<?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>126342</bug_id>
          
          <creation_ts>2013-12-31 08:12:10 -0800</creation_ts>
          <short_desc>[GTK] Move all GTK/GObject unit tests to Tools/TestWebKitAPI</short_desc>
          <delta_ts>2014-01-06 13:10:39 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>bunhere</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>glenn</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>rakuco</cc>
    
    <cc>rego+ews</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>963518</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-12-31 08:12:10 -0800</bug_when>
    <thetext>This location makes a lot more sense for holding all the unit tests that we have.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>964083</commentid>
    <comment_count>1</comment_count>
      <attachid>220300</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-01-03 06:42:18 -0800</bug_when>
    <thetext>Created attachment 220300
WIP patch

This is a WIP patch, although the only thing missing is the cmake stuff. I just want to make sure we all agree with the new places and names before fighting with the cmake files.

This patch moves the wk2 tests to Tools/TestWebKitAPI/Tests/WebKit2Gtk and wk1 to Tools/TestWebKitAPI/Tests/WebKitGtk. Binaries for all tests have also changed now we have:

$ ls -R Programs/TestWebKitAPI/
Programs/TestWebKitAPI/:
JavaScriptCore  WebCore  WebCoreGtk  WebKit2  WebKit2Gtk  WebKitGtk  WTF

Programs/TestWebKitAPI/JavaScriptCore:
TestJavaScriptCore

Programs/TestWebKitAPI/WebCore:
TestWebCore

Programs/TestWebKitAPI/WebCoreGtk:
TestWebCoreGtk

Programs/TestWebKitAPI/WebKit2:
TestWebKit2

Programs/TestWebKitAPI/WebKit2Gtk:
AccessibilityTestServer  TestBackForwardList  TestDownloads        TestLoaderClient  TestUIClient               TestWebKitFindController  TestWebKitWebContext
InspectorTestServer      TestContextMenu      TestFrame            TestPrinting      TestWebExtensions          TestWebKitPolicyClient    TestWebKitWebView
resources                TestCookieManager    TestInspector        TestResources     TestWebKitAccessibility    TestWebKitSettings        TestWebKitWebViewGroup
TestAuthentication       TestDOMNode          TestInspectorServer  TestSSL           TestWebKitFaviconDatabase  TestWebKitVersion         TestWebViewEditor

Programs/TestWebKitAPI/WebKit2Gtk/resources:
webkit2gtk-tests-resources.gresource

Programs/TestWebKitAPI/WebKitGtk:
testapplicationcache  testcopyandpaste  testdownload         testhttpbackend   testnetworkrequest      testwebframe           testwebresource
testatk               testdomdocument   testfavicondatabase  testkeyevents     testnetworkresponse     testwebhistoryitem     testwebsettings
testatkroles          testdomdomwindow  testglobals          testloading       testwebbackforwardlist  testwebinspector       testwebview
testcontextmenu       testdomnode       testhittestresult    testmimehandling  testwebdatasource       testwebplugindatabase  testwindow

Programs/TestWebKitAPI/WTF:
TestWTF</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>964090</commentid>
    <comment_count>2</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2014-01-03 06:55:18 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created an attachment (id=220300) [details]
&gt; WIP patch
&gt; 
&gt; This is a WIP patch, although the only thing missing is the cmake stuff. I just want to make sure we all agree with the new places and names before fighting with the cmake files.

This organization works for me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>964124</commentid>
    <comment_count>3</comment_count>
      <attachid>220306</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-01-03 09:13:55 -0800</bug_when>
    <thetext>Created attachment 220306
Updated patch to fix the build with autotools

cmake build is still missing, tried to do it but it&apos;s not just adding new files, and I still don&apos;t understand cmake well enough.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>964125</commentid>
    <comment_count>4</comment_count>
      <attachid>220307</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-01-03 09:16:58 -0800</bug_when>
    <thetext>Created attachment 220307
Updated patch using --binary

Try to make it apply using git diff --binary</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>964128</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-01-03 09:19:17 -0800</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>964129</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-01-03 09:19:32 -0800</bug_when>
    <thetext>Attachment 220307 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;GNUmakefile.am&apos;, u&apos;Source/WebKit/gtk/ChangeLog&apos;, u&apos;Source/WebKit/gtk/tests/CMakeLists.txt&apos;, u&apos;Source/WebKit/gtk/tests/GNUmakefile.am&apos;, u&apos;Source/WebKit/gtk/tests/resources/blank.ico&apos;, u&apos;Source/WebKit/gtk/tests/resources/test.html&apos;, u&apos;Source/WebKit/gtk/tests/resources/test.ogg&apos;, u&apos;Source/WebKit/gtk/tests/resources/test.pdf&apos;, u&apos;Source/WebKit/gtk/tests/resources/test.txt&apos;, u&apos;Source/WebKit/gtk/tests/test_utils.c&apos;, u&apos;Source/WebKit/gtk/tests/test_utils.h&apos;, u&apos;Source/WebKit/gtk/tests/testapplicationcache.c&apos;, u&apos;Source/WebKit/gtk/tests/testatk.c&apos;, u&apos;Source/WebKit/gtk/tests/testatkroles.c&apos;, u&apos;Source/WebKit/gtk/tests/testcontextmenu.c&apos;, u&apos;Source/WebKit/gtk/tests/testcopyandpaste.c&apos;, u&apos;Source/WebKit/gtk/tests/testdomdocument.c&apos;, u&apos;Source/WebKit/gtk/tests/testdomdomwindow.c&apos;, u&apos;Source/WebKit/gtk/tests/testdomnode.c&apos;, u&apos;Source/WebKit/gtk/tests/testdownload.c&apos;, u&apos;Source/WebKit/gtk/tests/testfavicondatabase.c&apos;, u&apos;Source/WebKit/gtk/tests/testglobals.c&apos;, u&apos;Source/WebKit/gtk/tests/testhittestresult.c&apos;, u&apos;Source/WebKit/gtk/tests/testhttpbackend.c&apos;, u&apos;Source/WebKit/gtk/tests/testkeyevents.c&apos;, u&apos;Source/WebKit/gtk/tests/testloading.c&apos;, u&apos;Source/WebKit/gtk/tests/testmimehandling.c&apos;, u&apos;Source/WebKit/gtk/tests/testnetworkrequest.c&apos;, u&apos;Source/WebKit/gtk/tests/testnetworkresponse.c&apos;, u&apos;Source/WebKit/gtk/tests/testwebbackforwardlist.c&apos;, u&apos;Source/WebKit/gtk/tests/testwebdatasource.c&apos;, u&apos;Source/WebKit/gtk/tests/testwebframe.c&apos;, u&apos;Source/WebKit/gtk/tests/testwebhistoryitem.c&apos;, u&apos;Source/WebKit/gtk/tests/testwebinspector.c&apos;, u&apos;Source/WebKit/gtk/tests/testwebplugindatabase.c&apos;, u&apos;Source/WebKit/gtk/tests/testwebresource.c&apos;, u&apos;Source/WebKit/gtk/tests/testwebsettings.c&apos;, u&apos;Source/WebKit/gtk/tests/testwebview.c&apos;, u&apos;Source/WebKit/gtk/tests/testwindow.c&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/AccessibilityTestServer.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/CMakeLists.txt&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/DOMNodeTest.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/FrameTest.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/GNUmakefile.am&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/InspectorTestServer.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/LoadTrackingTest.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/LoadTrackingTest.h&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestAuthentication.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestBackForwardList.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestContextMenu.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestCookieManager.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestDOMNode.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestDownloads.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestFrame.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestInspector.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestInspectorServer.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestLoaderClient.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestMain.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestMain.h&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestPrinting.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestResources.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestSSL.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestUIClient.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestWebExtensions.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFaviconDatabase.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFindController.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitPolicyClient.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitSettings.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitVersion.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebContext.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebViewGroup.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestWebViewEditor.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/WebExtensionTest.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/WebKitTestBus.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/WebKitTestBus.h&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/WebKitTestServer.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/WebKitTestServer.h&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/WebProcessTest.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/WebProcessTest.h&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/WebProcessTestRunner.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/WebProcessTestRunner.h&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.h&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/resources/link-title.js&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/resources/test-cert.pem&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/resources/test-key.pem&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/resources/webkit2gtk-tests.gresource.xml&apos;, u&apos;Tools/ChangeLog&apos;, u&apos;Tools/Scripts/run-gtk-tests&apos;, u&apos;Tools/Scripts/webkitpy/style/checker.py&apos;, u&apos;Tools/Scripts/webkitpy/style/checker_unittest.py&apos;, u&apos;Tools/TestWebKitAPI/GNUmakefile.am&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/AccessibilityTestServer.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/DOMDOMWindowTest.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/DOMNodeTest.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/FrameTest.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/InspectorTestServer.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestAuthentication.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestBackForwardList.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestContextMenu.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestCookieManager.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestDOMDOMWindow.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestDOMNode.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestDownloads.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestFrame.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestInspector.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestInspectorServer.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestLoaderClient.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestPrinting.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestResources.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestSSL.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestUIClient.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebExtensions.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitAccessibility.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitFaviconDatabase.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitFindController.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitPolicyClient.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitSettings.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitVersion.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebViewGroup.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebViewEditor.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/WebProcessTest.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/WebProcessTest.h&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/resources/link-title.js&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/resources/test-cert.pem&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/resources/test-key.pem&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/resources/webkit2gtk-tests.gresource.xml&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/resources/blank.ico&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/resources/test.html&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/resources/test.ogg&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/resources/test.pdf&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/resources/test.txt&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/test_utils.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/test_utils.h&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testapplicationcache.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testatk.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testatkroles.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testcontextmenu.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testcopyandpaste.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testdomdocument.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testdomdomwindow.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testdomnode.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testdownload.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testfavicondatabase.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testglobals.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testhittestresult.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testhttpbackend.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testkeyevents.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testloading.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testmimehandling.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testnetworkrequest.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testnetworkresponse.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testwebbackforwardlist.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testwebdatasource.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testwebframe.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testwebhistoryitem.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testwebinspector.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testwebplugindatabase.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testwebresource.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testwebsettings.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testwebview.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testwindow.c&apos;, u&apos;Tools/TestWebKitAPI/gtk/WebKit2Gtk/LoadTrackingTest.cpp&apos;, u&apos;Tools/TestWebKitAPI/gtk/WebKit2Gtk/LoadTrackingTest.h&apos;, u&apos;Tools/TestWebKitAPI/gtk/WebKit2Gtk/TestMain.cpp&apos;, u&apos;Tools/TestWebKitAPI/gtk/WebKit2Gtk/TestMain.h&apos;, u&apos;Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebKitTestBus.cpp&apos;, u&apos;Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebKitTestBus.h&apos;, u&apos;Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebKitTestServer.cpp&apos;, u&apos;Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebKitTestServer.h&apos;, u&apos;Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebProcessTestRunner.cpp&apos;, u&apos;Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebProcessTestRunner.h&apos;, u&apos;Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp&apos;, u&apos;Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.h&apos;, &apos;--commit-queue&apos;]&quot; exit_code: 1
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestResources.cpp:259:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testglobals.c&quot;
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testfavicondatabase.c&quot;
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp:215:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp:224:  Declaration has space between type name and * in static GDBusNodeInfo *introspectionData  [whitespace/declaration] [3]
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testwebinspector.c&quot;
ERROR: Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp:245:  Omit int when using unsigned  [runtime/unsigned] [1]
ERROR: Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp:269:  Omit int when using unsigned  [runtime/unsigned] [1]
ERROR: Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp:275:  Omit int when using unsigned  [runtime/unsigned] [1]
ERROR: Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp:301:  Omit int when using unsigned  [runtime/unsigned] [1]
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testwebsettings.c&quot;
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testhittestresult.c&quot;
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testwebbackforwardlist.c&quot;
ERROR: Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebKitTestServer.cpp:40:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebKitTestServer.cpp:41:  Use 0 instead of NULL.  [readability/null] [5]
ERROR: Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebKitTestServer.cpp:41:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/resources/test.txt&quot;
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testnetworkrequest.c&quot;
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testcopyandpaste.c&quot;
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testwebview.c&quot;
ERROR: Tools/TestWebKitAPI/gtk/WebKit2Gtk/TestMain.h:45:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/gtk/WebKit2Gtk/TestMain.h:46:  Else clause should never be on same line as else (use 2 lines)  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/gtk/WebKit2Gtk/TestMain.h:46:  More than one command on the same line in if  [whitespace/parens] [4]
ERROR: Tools/TestWebKitAPI/gtk/WebKit2Gtk/TestMain.h:48:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/test_utils.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/test_utils.c&quot;
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testwebframe.c&quot;
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testdownload.c&quot;
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testkeyevents.c&quot;
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestPrinting.cpp:123:  Omit int when using unsigned  [runtime/unsigned] [1]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestPrinting.cpp:150:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testwebhistoryitem.c&quot;
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testatkroles.c&quot;
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testloading.c&quot;
ERROR: Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebKitTestServer.h:36:  The parameter name &quot;type&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitSettings.cpp:282:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitSettings.cpp:283:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitSettings.cpp:284:  Use 0 instead of NULL.  [readability/null] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitSettings.cpp:284:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.h:55:  Omit int when using unsigned  [runtime/unsigned] [1]
ERROR: Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.h:56:  Omit int when using unsigned  [runtime/unsigned] [1]
ERROR: Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.h:57:  Omit int when using unsigned  [runtime/unsigned] [1]
ERROR: Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.h:83:  Omit int when using unsigned  [runtime/unsigned] [1]
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/resources/test.html&quot;
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp:403:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp:406:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testwebplugindatabase.c&quot;
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testapplicationcache.c&quot;
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testdomdomwindow.c&quot;
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebViewEditor.cpp:28:  Omit int when using unsigned  [runtime/unsigned] [1]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebViewEditor.cpp:29:  Omit int when using unsigned  [runtime/unsigned] [1]
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testwindow.c&quot;
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebExtensions.cpp:138:  Declaration has space between type name and * in static const char *mainWorldScript  [whitespace/declaration] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebExtensions.cpp:152:  Declaration has space between type name and * in static const char *isolatedWorldScript  [whitespace/declaration] [3]
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testhttpbackend.c&quot;
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testwebdatasource.c&quot;
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/AccessibilityTestServer.cpp:41:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/AccessibilityTestServer.cpp:42:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/AccessibilityTestServer.cpp:43:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/AccessibilityTestServer.cpp:44:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/AccessibilityTestServer.cpp:45:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/AccessibilityTestServer.cpp:46:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/AccessibilityTestServer.cpp:47:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/AccessibilityTestServer.cpp:48:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testatk.c&quot;
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testcontextmenu.c&quot;
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testmimehandling.c&quot;
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testdomdocument.c&quot;
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebViewGroup.cpp:84:  Use 0 instead of NULL.  [readability/null] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitAccessibility.cpp:100:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/WebProcessTest.cpp:79:  Declaration has space between type name and * in static GDBusNodeInfo *introspectionData  [whitespace/declaration] [3]
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testwebresource.c&quot;
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testnetworkresponse.c&quot;
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testdomnode.c&quot;
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:389:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:390:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:391:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:392:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:393:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:394:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:395:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:396:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 50 in 90 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>964145</commentid>
    <comment_count>7</comment_count>
      <attachid>220314</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-01-03 10:01:26 -0800</bug_when>
    <thetext>Created attachment 220314
Updated patch to try to fix the build without webkit1

I had forgotten there&apos;s an option to build without webkit1 :-P</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>964146</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-01-03 10:05:40 -0800</bug_when>
    <thetext>Attachment 220314 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;GNUmakefile.am&apos;, u&apos;Source/WebKit/gtk/ChangeLog&apos;, u&apos;Source/WebKit/gtk/tests/CMakeLists.txt&apos;, u&apos;Source/WebKit/gtk/tests/GNUmakefile.am&apos;, u&apos;Source/WebKit/gtk/tests/resources/blank.ico&apos;, u&apos;Source/WebKit/gtk/tests/resources/test.html&apos;, u&apos;Source/WebKit/gtk/tests/resources/test.ogg&apos;, u&apos;Source/WebKit/gtk/tests/resources/test.pdf&apos;, u&apos;Source/WebKit/gtk/tests/resources/test.txt&apos;, u&apos;Source/WebKit/gtk/tests/test_utils.c&apos;, u&apos;Source/WebKit/gtk/tests/test_utils.h&apos;, u&apos;Source/WebKit/gtk/tests/testapplicationcache.c&apos;, u&apos;Source/WebKit/gtk/tests/testatk.c&apos;, u&apos;Source/WebKit/gtk/tests/testatkroles.c&apos;, u&apos;Source/WebKit/gtk/tests/testcontextmenu.c&apos;, u&apos;Source/WebKit/gtk/tests/testcopyandpaste.c&apos;, u&apos;Source/WebKit/gtk/tests/testdomdocument.c&apos;, u&apos;Source/WebKit/gtk/tests/testdomdomwindow.c&apos;, u&apos;Source/WebKit/gtk/tests/testdomnode.c&apos;, u&apos;Source/WebKit/gtk/tests/testdownload.c&apos;, u&apos;Source/WebKit/gtk/tests/testfavicondatabase.c&apos;, u&apos;Source/WebKit/gtk/tests/testglobals.c&apos;, u&apos;Source/WebKit/gtk/tests/testhittestresult.c&apos;, u&apos;Source/WebKit/gtk/tests/testhttpbackend.c&apos;, u&apos;Source/WebKit/gtk/tests/testkeyevents.c&apos;, u&apos;Source/WebKit/gtk/tests/testloading.c&apos;, u&apos;Source/WebKit/gtk/tests/testmimehandling.c&apos;, u&apos;Source/WebKit/gtk/tests/testnetworkrequest.c&apos;, u&apos;Source/WebKit/gtk/tests/testnetworkresponse.c&apos;, u&apos;Source/WebKit/gtk/tests/testwebbackforwardlist.c&apos;, u&apos;Source/WebKit/gtk/tests/testwebdatasource.c&apos;, u&apos;Source/WebKit/gtk/tests/testwebframe.c&apos;, u&apos;Source/WebKit/gtk/tests/testwebhistoryitem.c&apos;, u&apos;Source/WebKit/gtk/tests/testwebinspector.c&apos;, u&apos;Source/WebKit/gtk/tests/testwebplugindatabase.c&apos;, u&apos;Source/WebKit/gtk/tests/testwebresource.c&apos;, u&apos;Source/WebKit/gtk/tests/testwebsettings.c&apos;, u&apos;Source/WebKit/gtk/tests/testwebview.c&apos;, u&apos;Source/WebKit/gtk/tests/testwindow.c&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/AccessibilityTestServer.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/CMakeLists.txt&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/DOMNodeTest.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/FrameTest.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/GNUmakefile.am&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/InspectorTestServer.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/LoadTrackingTest.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/LoadTrackingTest.h&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestAuthentication.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestBackForwardList.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestContextMenu.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestCookieManager.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestDOMNode.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestDownloads.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestFrame.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestInspector.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestInspectorServer.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestLoaderClient.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestMain.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestMain.h&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestPrinting.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestResources.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestSSL.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestUIClient.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestWebExtensions.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFaviconDatabase.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFindController.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitPolicyClient.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitSettings.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitVersion.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebContext.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebViewGroup.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestWebViewEditor.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/WebExtensionTest.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/WebKitTestBus.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/WebKitTestBus.h&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/WebKitTestServer.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/WebKitTestServer.h&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/WebProcessTest.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/WebProcessTest.h&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/WebProcessTestRunner.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/WebProcessTestRunner.h&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.h&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/resources/link-title.js&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/resources/test-cert.pem&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/resources/test-key.pem&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/resources/webkit2gtk-tests.gresource.xml&apos;, u&apos;Tools/ChangeLog&apos;, u&apos;Tools/Scripts/run-gtk-tests&apos;, u&apos;Tools/Scripts/webkitpy/style/checker.py&apos;, u&apos;Tools/Scripts/webkitpy/style/checker_unittest.py&apos;, u&apos;Tools/TestWebKitAPI/GNUmakefile.am&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/AccessibilityTestServer.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/DOMDOMWindowTest.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/DOMNodeTest.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/FrameTest.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/InspectorTestServer.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestAuthentication.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestBackForwardList.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestContextMenu.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestCookieManager.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestDOMDOMWindow.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestDOMNode.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestDownloads.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestFrame.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestInspector.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestInspectorServer.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestLoaderClient.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestPrinting.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestResources.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestSSL.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestUIClient.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebExtensions.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitAccessibility.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitFaviconDatabase.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitFindController.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitPolicyClient.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitSettings.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitVersion.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebViewGroup.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebViewEditor.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/WebProcessTest.cpp&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/WebProcessTest.h&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/resources/link-title.js&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/resources/test-cert.pem&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/resources/test-key.pem&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKit2Gtk/resources/webkit2gtk-tests.gresource.xml&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/resources/blank.ico&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/resources/test.html&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/resources/test.ogg&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/resources/test.pdf&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/resources/test.txt&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/test_utils.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/test_utils.h&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testapplicationcache.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testatk.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testatkroles.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testcontextmenu.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testcopyandpaste.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testdomdocument.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testdomdomwindow.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testdomnode.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testdownload.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testfavicondatabase.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testglobals.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testhittestresult.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testhttpbackend.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testkeyevents.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testloading.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testmimehandling.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testnetworkrequest.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testnetworkresponse.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testwebbackforwardlist.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testwebdatasource.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testwebframe.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testwebhistoryitem.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testwebinspector.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testwebplugindatabase.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testwebresource.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testwebsettings.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testwebview.c&apos;, u&apos;Tools/TestWebKitAPI/Tests/WebKitGtk/testwindow.c&apos;, u&apos;Tools/TestWebKitAPI/gtk/WebKit2Gtk/LoadTrackingTest.cpp&apos;, u&apos;Tools/TestWebKitAPI/gtk/WebKit2Gtk/LoadTrackingTest.h&apos;, u&apos;Tools/TestWebKitAPI/gtk/WebKit2Gtk/TestMain.cpp&apos;, u&apos;Tools/TestWebKitAPI/gtk/WebKit2Gtk/TestMain.h&apos;, u&apos;Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebKitTestBus.cpp&apos;, u&apos;Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebKitTestBus.h&apos;, u&apos;Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebKitTestServer.cpp&apos;, u&apos;Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebKitTestServer.h&apos;, u&apos;Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebProcessTestRunner.cpp&apos;, u&apos;Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebProcessTestRunner.h&apos;, u&apos;Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp&apos;, u&apos;Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.h&apos;, &apos;--commit-queue&apos;]&quot; exit_code: 1
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestResources.cpp:259:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testglobals.c&quot;
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testfavicondatabase.c&quot;
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp:215:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp:224:  Declaration has space between type name and * in static GDBusNodeInfo *introspectionData  [whitespace/declaration] [3]
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testwebinspector.c&quot;
ERROR: Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp:245:  Omit int when using unsigned  [runtime/unsigned] [1]
ERROR: Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp:269:  Omit int when using unsigned  [runtime/unsigned] [1]
ERROR: Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp:275:  Omit int when using unsigned  [runtime/unsigned] [1]
ERROR: Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp:301:  Omit int when using unsigned  [runtime/unsigned] [1]
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testwebsettings.c&quot;
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testhittestresult.c&quot;
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testwebbackforwardlist.c&quot;
ERROR: Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebKitTestServer.cpp:40:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebKitTestServer.cpp:41:  Use 0 instead of NULL.  [readability/null] [5]
ERROR: Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebKitTestServer.cpp:41:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/resources/test.txt&quot;
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testnetworkrequest.c&quot;
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testcopyandpaste.c&quot;
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testwebview.c&quot;
ERROR: Tools/TestWebKitAPI/gtk/WebKit2Gtk/TestMain.h:45:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/gtk/WebKit2Gtk/TestMain.h:46:  Else clause should never be on same line as else (use 2 lines)  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/gtk/WebKit2Gtk/TestMain.h:46:  More than one command on the same line in if  [whitespace/parens] [4]
ERROR: Tools/TestWebKitAPI/gtk/WebKit2Gtk/TestMain.h:48:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/test_utils.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/test_utils.c&quot;
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testwebframe.c&quot;
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testdownload.c&quot;
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testkeyevents.c&quot;
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestPrinting.cpp:123:  Omit int when using unsigned  [runtime/unsigned] [1]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestPrinting.cpp:150:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testwebhistoryitem.c&quot;
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testatkroles.c&quot;
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testloading.c&quot;
ERROR: Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebKitTestServer.h:36:  The parameter name &quot;type&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitSettings.cpp:282:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitSettings.cpp:283:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitSettings.cpp:284:  Use 0 instead of NULL.  [readability/null] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitSettings.cpp:284:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.h:55:  Omit int when using unsigned  [runtime/unsigned] [1]
ERROR: Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.h:56:  Omit int when using unsigned  [runtime/unsigned] [1]
ERROR: Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.h:57:  Omit int when using unsigned  [runtime/unsigned] [1]
ERROR: Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.h:83:  Omit int when using unsigned  [runtime/unsigned] [1]
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/resources/test.html&quot;
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp:403:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp:406:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testwebplugindatabase.c&quot;
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testapplicationcache.c&quot;
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testdomdomwindow.c&quot;
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebViewEditor.cpp:28:  Omit int when using unsigned  [runtime/unsigned] [1]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebViewEditor.cpp:29:  Omit int when using unsigned  [runtime/unsigned] [1]
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testwindow.c&quot;
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebExtensions.cpp:138:  Declaration has space between type name and * in static const char *mainWorldScript  [whitespace/declaration] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebExtensions.cpp:152:  Declaration has space between type name and * in static const char *isolatedWorldScript  [whitespace/declaration] [3]
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testhttpbackend.c&quot;
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testwebdatasource.c&quot;
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/AccessibilityTestServer.cpp:41:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/AccessibilityTestServer.cpp:42:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/AccessibilityTestServer.cpp:43:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/AccessibilityTestServer.cpp:44:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/AccessibilityTestServer.cpp:45:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/AccessibilityTestServer.cpp:46:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/AccessibilityTestServer.cpp:47:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/AccessibilityTestServer.cpp:48:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testatk.c&quot;
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testcontextmenu.c&quot;
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testmimehandling.c&quot;
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testdomdocument.c&quot;
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebViewGroup.cpp:84:  Use 0 instead of NULL.  [readability/null] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitAccessibility.cpp:100:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/WebProcessTest.cpp:79:  Declaration has space between type name and * in static GDBusNodeInfo *introspectionData  [whitespace/declaration] [3]
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testwebresource.c&quot;
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testnetworkresponse.c&quot;
WARNING: File exempt from style guide. Skipping: &quot;Tools/TestWebKitAPI/Tests/WebKitGtk/testdomnode.c&quot;
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:389:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:390:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:391:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:392:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:393:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:394:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:395:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:396:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 50 in 90 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>964389</commentid>
    <comment_count>9</comment_count>
      <attachid>220373</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-01-04 02:00:58 -0800</bug_when>
    <thetext>Created attachment 220373
Updated patch to fix the style issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>964390</commentid>
    <comment_count>10</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-01-04 02:15:53 -0800</bug_when>
    <thetext>Btw, cmake part is still missing, I&apos;ve tried to figure out how to build with cmake to try to do it myself, but I haven&apos;t found the way. Do you mind if we add the cmake files in a follow up patch? This patch involves a lot of files and it&apos;s a pain to maintain.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>964421</commentid>
    <comment_count>11</comment_count>
      <attachid>220377</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2014-01-04 12:31:36 -0800</bug_when>
    <thetext>Created attachment 220377
Include CMake build support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>964422</commentid>
    <comment_count>12</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2014-01-04 12:34:18 -0800</bug_when>
    <thetext>I&apos;ve added CMake support. To make this easier, I moved the files from Tools/TestWebKitAPI/gtk/WebKit2Gtk to Tools/TestWebKitAPI/Tests/WebKit2Gtk. Hopefully this is okay. It makes putting the CMake build file in Tools/TestWebKitAPI/Tests/WebKit2Gtk a lot easier keeps the build tidy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>964478</commentid>
    <comment_count>13</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-01-05 01:52:46 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; I&apos;ve added CMake support. 

Thank you very much! I managed to start a build with cmake in the end, but it failed complaining about deps libraries in my jhbuild and the system ones. 

&gt; To make this easier, I moved the files from Tools/TestWebKitAPI/gtk/WebKit2Gtk to Tools/TestWebKitAPI/Tests/WebKit2Gtk. Hopefully this is okay. It makes putting the CMake build file in Tools/TestWebKitAPI/Tests/WebKit2Gtk a lot easier keeps the build tidy.

Well, in Tests there are only test files, all other support code, utils or helper libs are outside that dir, that&apos;s why I added the library files to Tools/TestWebKitAPI/gtk/WebKit2Gtk instead. I personally don&apos;t mind, in our current layout all the files are in the same tests directory, but while moving to TestWebKitAPI I tried to follow the current layout there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>964494</commentid>
    <comment_count>14</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-01-05 05:02:41 -0800</bug_when>
    <thetext>Wouldn&apos;t it be possible to use the Tools/TestWebKitAPI/PlatformGTK.cmake file to add the library and the tests no matter where the sources are? All other tests and libs for the tests are built using that cmake file no? I don&apos;t see any other build file inside Tests directory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>964502</commentid>
    <comment_count>15</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2014-01-05 09:56:50 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; Wouldn&apos;t it be possible to use the Tools/TestWebKitAPI/PlatformGTK.cmake file to add the library and the tests no matter where the sources are? All other tests and libs for the tests are built using that cmake file no? I don&apos;t see any other build file inside Tests directory.

It is possible, but because the CMakeLists.txt in that directory uses the include_directories command, we would have to be careful to set the proper list of include directories for the WebKitGtk and WebKit2Gtk targets. I think having the separate CMakeList.txt files leads to a better separation.

If you are so inclined, you can try to move the files back, but refer to them as ${TOOLS_DIR}/TestWebKitAPI/gtk/WebKit2Gtk/File.cpp in the CMakeLists.txt file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>964661</commentid>
    <comment_count>16</comment_count>
      <attachid>220377</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2014-01-06 10:13:13 -0800</bug_when>
    <thetext>Comment on attachment 220377
Include CMake build support

The python bits look OK to me, and the automake/cmake ones too, hopefully I didn&apos;t miss anything in this sea of diffs ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>964732</commentid>
    <comment_count>17</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2014-01-06 13:10:39 -0800</bug_when>
    <thetext>Committed r161366: &lt;http://trac.webkit.org/changeset/161366&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220300</attachid>
            <date>2014-01-03 06:42:18 -0800</date>
            <delta_ts>2014-01-03 09:13:55 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>wk-wip-test-webkit-api.diff</filename>
            <type>text/plain</type>
            <size>1702807</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0dOVW1ha2VmaWxlLmFtIGIvR05VbWFrZWZpbGUuYW0KaW5kZXggYjNmMGEw
NC4uNTRkYTJiMSAxMDA2NDQKLS0tIGEvR05VbWFrZWZpbGUuYW0KKysrIGIvR05VbWFrZWZpbGUu
YW0KQEAgLTU5LDcgKzU5LDYgQEAgbm9pbnN0X0hFQURFUlMgOj0KIG5vaW5zdF9MVExJQlJBUklF
UyA6PQogbGliX0xUTElCUkFSSUVTIDo9CiBJRExfQklORElOR1MgOj0KLVRFU1RfUFJPR1MgOj0K
IFBPRklMRVMgOj0KIFBPX0xJTkdVQVMgOj0KIFVTRVJfTElOR1VBUyA6PQpAQCAtMjE0LDggKzIx
Myw2IEBAIGluY2x1ZGUgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvR05VbWFrZWZpbGUuYW0KIGlu
Y2x1ZGUgU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9HTlVtYWtlZmlsZS5hbQogCiBpZiBFTkFC
TEVfREVWRUxPUEVSX01PREUKLWluY2x1ZGUgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KLWluY2x1ZGUgU291cmNlL1dlYktpdC9ndGsvdGVzdHMv
R05VbWFrZWZpbGUuYW0KIGluY2x1ZGUgU291cmNlL1RoaXJkUGFydHkvZ3Rlc3QvR05VbWFrZWZp
bGUuYW0KIGluY2x1ZGUgVG9vbHMvR05VbWFrZWZpbGUuYW0KIGluY2x1ZGUgVG9vbHMvVGVzdFdl
YktpdEFQSS9HTlVtYWtlZmlsZS5hbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVz
dHMvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy9DTWFrZUxpc3RzLnR4
dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTUxYTk5Zi4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0L2d0ay90ZXN0cy9DTWFrZUxpc3RzLnR4dAorKysgL2Rldi9udWxsCkBAIC0x
LDU4ICswLDAgQEAKLWFkZF9kZWZpbml0aW9ucygtRFRFU1RfUExVR0lOX0RJUj0iJHtDTUFLRV9M
SUJSQVJZX09VVFBVVF9ESVJFQ1RPUll9IikKLWluY2x1ZGVfZGlyZWN0b3JpZXMoCi0gICAgJHtD
TUFLRV9CSU5BUllfRElSfQotICAgICR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNlCi0gICAgJHtD
TUFLRV9TT1VSQ0VfRElSfS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRm9yd2FyZGluZ0hlYWRlcnMK
LSAgICAke0NNQUtFX1NPVVJDRV9ESVJ9L1NvdXJjZS9XZWJLaXQvZ3RrCi0gICAgJHtDTUFLRV9T
T1VSQ0VfRElSfS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsKLSAgICAke0NNQUtFX1NPVVJD
RV9ESVJ9L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtCi0gICAgJHtDTUFLRV9TT1VSQ0VfRElSfS9T
b3VyY2UvV1RGCi0gICAgJHtERVJJVkVEX1NPVVJDRVNfRElSfQotICAgICR7REVSSVZFRF9TT1VS
Q0VTX1dFQktJVEdUS19ESVJ9Ci0gICAgJHtHTElCX0lOQ0xVREVfRElSU30KLSAgICAke0dUSzNf
SU5DTFVERV9ESVJTfQotICAgICR7TElCU09VUF9JTkNMVURFX0RJUlN9Ci0pCi0KLW1hY3JvKEFE
RF9XSzFfVEVTVCB0ZXN0X25hbWUpCi0gICAgYWRkX2V4ZWN1dGFibGUoJHt0ZXN0X25hbWV9ICR7
QVJHTn0pCi0gICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKCR7dGVzdF9uYW1lfQotICAgICAgICBK
YXZhU2NyaXB0Q29yZQotICAgICAgICBXZWJLaXQKLSAgICAgICAgJHtHTElCX0xJQlJBUklFU30K
LSAgICAgICAgJHtHVEszX0xJQlJBUklFU30KLSAgICAgICAgJHtMSUJTT1VQX0xJQlJBUklFU30K
LSAgICApCi0gICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKCR7dGVzdF9uYW1lfSBQUk9QRVJUSUVT
Ci0gICAgICAgIFJVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWSAke0NNQUtFX1JVTlRJTUVfT1VUUFVU
X0RJUkVDVE9SWX0vV2ViS2l0MUdPYmplY3RBUElUZXN0cwotICAgICkKLWVuZG1hY3JvKCkKLQot
QUREX1dLMV9URVNUKHRlc3RhcHBsaWNhdGlvbmNhY2hlIHRlc3RhcHBsaWNhdGlvbmNhY2hlLmMp
Ci1BRERfV0sxX1RFU1QodGVzdGF0a3JvbGVzIHRlc3RhdGtyb2xlcy5jKQotQUREX1dLMV9URVNU
KHRlc3RhdGsgdGVzdGF0ay5jKQotQUREX1dLMV9URVNUKHRlc3Rjb250ZXh0bWVudSB0ZXN0Y29u
dGV4dG1lbnUuYykKLUFERF9XSzFfVEVTVCh0ZXN0Y29weWFuZHBhc3RlIHRlc3Rjb3B5YW5kcGFz
dGUuYyAke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ndGsvR3RrVmVyc2lvbmluZy5jKQotQUREX1dL
MV9URVNUKHRlc3Rkb21kb2N1bWVudCB0ZXN0ZG9tZG9jdW1lbnQuYykKLUFERF9XSzFfVEVTVCh0
ZXN0ZG9tZG9td2luZG93IHRlc3Rkb21kb213aW5kb3cuYykKLUFERF9XSzFfVEVTVCh0ZXN0ZG9t
bm9kZSB0ZXN0ZG9tbm9kZS5jKQotQUREX1dLMV9URVNUKHRlc3Rkb3dubG9hZCB0ZXN0ZG93bmxv
YWQuYykKLUFERF9XSzFfVEVTVCh0ZXN0ZmF2aWNvbmRhdGFiYXNlIHRlc3RmYXZpY29uZGF0YWJh
c2UuYyB0ZXN0X3V0aWxzLmMpCi1BRERfV0sxX1RFU1QodGVzdGdsb2JhbHMgdGVzdGdsb2JhbHMu
YykKLUFERF9XSzFfVEVTVCh0ZXN0aGl0dGVzdHJlc3VsdCB0ZXN0aGl0dGVzdHJlc3VsdC5jKQot
QUREX1dLMV9URVNUKHRlc3RodHRwYmFja2VuZCB0ZXN0aHR0cGJhY2tlbmQuYykKLUFERF9XSzFf
VEVTVCh0ZXN0a2V5ZXZlbnRzIHRlc3RrZXlldmVudHMuYykKLUFERF9XSzFfVEVTVCh0ZXN0bG9h
ZGluZyB0ZXN0bG9hZGluZy5jKQotQUREX1dLMV9URVNUKHRlc3RtaW1laGFuZGxpbmcgdGVzdG1p
bWVoYW5kbGluZy5jIHRlc3RfdXRpbHMuYykKLUFERF9XSzFfVEVTVCh0ZXN0bmV0d29ya3JlcXVl
c3QgdGVzdG5ldHdvcmtyZXF1ZXN0LmMpCi1BRERfV0sxX1RFU1QodGVzdG5ldHdvcmtyZXNwb25z
ZSB0ZXN0bmV0d29ya3Jlc3BvbnNlLmMpCi1BRERfV0sxX1RFU1QodGVzdHdlYmJhY2tmb3J3YXJk
bGlzdCB0ZXN0d2ViYmFja2ZvcndhcmRsaXN0LmMpCi1BRERfV0sxX1RFU1QodGVzdHdlYmRhdGFz
b3VyY2UgdGVzdHdlYmRhdGFzb3VyY2UuYykKLUFERF9XSzFfVEVTVCh0ZXN0d2ViZnJhbWUgdGVz
dHdlYmZyYW1lLmMpCi1BRERfV0sxX1RFU1QodGVzdHdlYmhpc3RvcnlpdGVtIHRlc3R3ZWJoaXN0
b3J5aXRlbS5jKQotQUREX1dLMV9URVNUKHRlc3R3ZWJpbnNwZWN0b3IgdGVzdHdlYmluc3BlY3Rv
ci5jIHRlc3RfdXRpbHMuYykKLUFERF9XSzFfVEVTVCh0ZXN0d2VicGx1Z2luZGF0YWJhc2UgdGVz
dHdlYnBsdWdpbmRhdGFiYXNlLmMpCi1BRERfV0sxX1RFU1QodGVzdHdlYnJlc291cmNlIHRlc3R3
ZWJyZXNvdXJjZS5jKQotQUREX1dLMV9URVNUKHRlc3R3ZWJzZXR0aW5ncyB0ZXN0d2Vic2V0dGlu
Z3MuYykKLUFERF9XSzFfVEVTVCh0ZXN0d2VidmlldyB0ZXN0d2Vidmlldy5jIHRlc3RfdXRpbHMu
YykKLUFERF9XSzFfVEVTVCh0ZXN0d2luZG93IHRlc3R3aW5kb3cuYykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdC9ndGsv
dGVzdHMvR05VbWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiODZh
NzMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0K
KysrIC9kZXYvbnVsbApAQCAtMSwyMDggKzAsMCBAQAotIyBCdWlsZCB1bml0IHRlc3RzCi13ZWJr
aXRfdGVzdHNfY2ZsYWdzID0gXAotCS1mbm8tc3RyaWN0LWFsaWFzaW5nIFwKLQktSSQoc3JjZGly
KS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRm9yd2FyZGluZ0hlYWRlcnMgXAotCS1JJChXZWJLaXQp
IFwKLQktSSQoR0VOU09VUkNFUykgXAotCS1JJCh0b3BfYnVpbGRkaXIpL1NvdXJjZS9XZWJLaXQv
Z3RrIFwKLQktSSQodG9wX3NyY2RpcikvU291cmNlL1dlYkNvcmUvYmluZGluZ3MgXAotCS1JJCh0
b3Bfc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0IFwKLQkkKGdsb2JhbF9j
cHBmbGFncykgXAotCSQoZ2xvYmFsX2NmbGFncykgXAotCSQoamF2YXNjcmlwdGNvcmVfY3BwZmxh
Z3MpIFwKLQkkKEZSRUVUWVBFX0NGTEFHUykgXAotCSQoR0xJQl9DRkxBR1MpIFwKLQkkKEdUS19D
RkxBR1MpIFwKLQkkKExJQlNPVVBfQ0ZMQUdTKSBcCi0JJChYUkVOREVSX0NGTEFHUykgXAotCSQo
WFRfQ0ZMQUdTKQotCi13ZWJraXRfdGVzdHNfbGRhZGQgPSBcCi0JbGliamF2YXNjcmlwdGNvcmVn
dGstQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkAuQFdFQktJVEdUS19BUElfTUlOT1JfVkVS
U0lPTkAubGEgXAotCWxpYndlYmtpdGd0ay1AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQC5A
V0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQC5sYSBcCi0JJChGUkVFVFlQRV9MSUJTKSBcCi0J
JChHVEtfTElCUykgXAotCSQoR0xJQl9MSUJTKSBcCi0JJChMSUJTT1VQX0xJQlMpIFwKLQkkKFhS
RU5ERVJfTElCUykKLQotd2Via2l0X3Rlc3RzX2xkZmxhZ3MgPSBcCi0JLW5vLWluc3RhbGwKLQot
aWYgRU5BQkxFX1dFQktJVDEKLW5vaW5zdF9QUk9HUkFNUyArPSBcCi0JUHJvZ3JhbXMvV2ViS2l0
MUdPYmplY3RBUElUZXN0cy90ZXN0YXBwbGljYXRpb25jYWNoZSBcCi0JUHJvZ3JhbXMvV2ViS2l0
MUdPYmplY3RBUElUZXN0cy90ZXN0Y29udGV4dG1lbnUgXAotCVByb2dyYW1zL1dlYktpdDFHT2Jq
ZWN0QVBJVGVzdHMvdGVzdGRvbWRvY3VtZW50IFwKLQlQcm9ncmFtcy9XZWJLaXQxR09iamVjdEFQ
SVRlc3RzL3Rlc3Rkb21kb213aW5kb3cgXAotCVByb2dyYW1zL1dlYktpdDFHT2JqZWN0QVBJVGVz
dHMvdGVzdGRvbW5vZGUgXAotCVByb2dyYW1zL1dlYktpdDFHT2JqZWN0QVBJVGVzdHMvdGVzdGh0
dHBiYWNrZW5kIFwKLQlQcm9ncmFtcy9XZWJLaXQxR09iamVjdEFQSVRlc3RzL3Rlc3RmYXZpY29u
ZGF0YWJhc2UgXAotCVByb2dyYW1zL1dlYktpdDFHT2JqZWN0QVBJVGVzdHMvdGVzdGxvYWRpbmcg
XAotCVByb2dyYW1zL1dlYktpdDFHT2JqZWN0QVBJVGVzdHMvdGVzdGdsb2JhbHMgXAotCVByb2dy
YW1zL1dlYktpdDFHT2JqZWN0QVBJVGVzdHMvdGVzdG1pbWVoYW5kbGluZyBcCi0JUHJvZ3JhbXMv
V2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0bmV0d29ya3JlcXVlc3QgXAotCVByb2dyYW1zL1dl
YktpdDFHT2JqZWN0QVBJVGVzdHMvdGVzdG5ldHdvcmtyZXNwb25zZSBcCi0JUHJvZ3JhbXMvV2Vi
S2l0MUdPYmplY3RBUElUZXN0cy90ZXN0d2ViZnJhbWUgXAotCVByb2dyYW1zL1dlYktpdDFHT2Jq
ZWN0QVBJVGVzdHMvdGVzdHdlYmJhY2tmb3J3YXJkbGlzdCBcCi0JUHJvZ3JhbXMvV2ViS2l0MUdP
YmplY3RBUElUZXN0cy90ZXN0d2ViaGlzdG9yeWl0ZW0gXAotCVByb2dyYW1zL1dlYktpdDFHT2Jq
ZWN0QVBJVGVzdHMvdGVzdHdpbmRvdyBcCi0JUHJvZ3JhbXMvV2ViS2l0MUdPYmplY3RBUElUZXN0
cy90ZXN0ZG93bmxvYWQgXAotCVByb2dyYW1zL1dlYktpdDFHT2JqZWN0QVBJVGVzdHMvdGVzdGF0
ayBcCi0JUHJvZ3JhbXMvV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0YXRrcm9sZXMgXAotCVBy
b2dyYW1zL1dlYktpdDFHT2JqZWN0QVBJVGVzdHMvdGVzdGhpdHRlc3RyZXN1bHQgXAotCVByb2dy
YW1zL1dlYktpdDFHT2JqZWN0QVBJVGVzdHMvdGVzdHdlYmluc3BlY3RvciBcCi0JUHJvZ3JhbXMv
V2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0d2Vic2V0dGluZ3MgXAotCVByb2dyYW1zL1dlYktp
dDFHT2JqZWN0QVBJVGVzdHMvdGVzdHdlYnJlc291cmNlIFwKLQlQcm9ncmFtcy9XZWJLaXQxR09i
amVjdEFQSVRlc3RzL3Rlc3R3ZWJkYXRhc291cmNlIFwKLQlQcm9ncmFtcy9XZWJLaXQxR09iamVj
dEFQSVRlc3RzL3Rlc3R3ZWJwbHVnaW5kYXRhYmFzZSBcCi0JUHJvZ3JhbXMvV2ViS2l0MUdPYmpl
Y3RBUElUZXN0cy90ZXN0d2VidmlldyBcCi0JUHJvZ3JhbXMvV2ViS2l0MUdPYmplY3RBUElUZXN0
cy90ZXN0a2V5ZXZlbnRzIFwKLQlQcm9ncmFtcy9XZWJLaXQxR09iamVjdEFQSVRlc3RzL3Rlc3Rj
b3B5YW5kcGFzdGUKLWVuZGlmCi0KLSMgQWRkIGFkZGl0aW9uYWwgdGVzdHMgaGVyZQotUHJvZ3Jh
bXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0YXBwbGljYXRpb25jYWNoZV9TT1VSQ0VTID0g
U291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGFwcGxpY2F0aW9uY2FjaGUuYwotUHJvZ3JhbXNf
V2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0YXBwbGljYXRpb25jYWNoZV9DRkxBR1MgPSAkKHdl
YmtpdF90ZXN0c19jZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rh
cHBsaWNhdGlvbmNhY2hlX0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19X
ZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RhcHBsaWNhdGlvbmNhY2hlX0xERkxBR1MgPSAkKHdl
YmtpdF90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rl
c3Rjb250ZXh0bWVudV9TT1VSQ0VTID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGNvbnRl
eHRtZW51LmMKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGNvbnRleHRtZW51
X0NGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0
QVBJVGVzdHNfdGVzdGNvbnRleHRtZW51X0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQpCi1Q
cm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rjb250ZXh0bWVudV9MREZMQUdTID0g
JCh3ZWJraXRfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0
c190ZXN0ZG9tZG9jdW1lbnRfU09VUkNFUyA9IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rk
b21kb2N1bWVudC5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rkb21kb2N1
bWVudF9DRkxBR1MgPSAkKHdlYmtpdF90ZXN0c19jZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQxR09i
amVjdEFQSVRlc3RzX3Rlc3Rkb21kb2N1bWVudF9MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRk
KQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0ZG9tZG9jdW1lbnRfTERGTEFH
UyA9ICQod2Via2l0X3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJ
VGVzdHNfdGVzdGRvbWRvbXdpbmRvd19TT1VSQ0VTID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMv
dGVzdGRvbWRvbXdpbmRvdy5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rk
b21kb213aW5kb3dfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQotUHJvZ3JhbXNfV2Vi
S2l0MUdPYmplY3RBUElUZXN0c190ZXN0ZG9tZG9td2luZG93X0xEQUREID0gJCh3ZWJraXRfdGVz
dHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rkb21kb213aW5k
b3dfTERGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDFH
T2JqZWN0QVBJVGVzdHNfdGVzdGRvbW5vZGVfU09VUkNFUyA9IFNvdXJjZS9XZWJLaXQvZ3RrL3Rl
c3RzL3Rlc3Rkb21ub2RlLmMKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGRv
bW5vZGVfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0MUdP
YmplY3RBUElUZXN0c190ZXN0ZG9tbm9kZV9MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQot
UHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0ZG9tbm9kZV9MREZMQUdTID0gJCh3
ZWJraXRfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190
ZXN0aHR0cGJhY2tlbmRfU09VUkNFUyA9IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RodHRw
YmFja2VuZC5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RodHRwYmFja2Vu
ZF9DRkxBR1MgPSAkKHdlYmtpdF90ZXN0c19jZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVj
dEFQSVRlc3RzX3Rlc3RodHRwYmFja2VuZF9MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQot
UHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0aHR0cGJhY2tlbmRfTERGTEFHUyA9
ICQod2Via2l0X3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVz
dHNfdGVzdGZhdmljb25kYXRhYmFzZV9TT1VSQ0VTID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMv
dGVzdGZhdmljb25kYXRhYmFzZS5jIFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RfdXRpbHMu
YwotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0ZmF2aWNvbmRhdGFiYXNlX0NG
TEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJ
VGVzdHNfdGVzdGZhdmljb25kYXRhYmFzZV9MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQot
UHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0ZmF2aWNvbmRhdGFiYXNlX0xERkxB
R1MgPSAkKHdlYmtpdF90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQ
SVRlc3RzX3Rlc3RnbG9iYWxzX1NPVVJDRVMgPSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0
Z2xvYmFscy5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RnbG9iYWxzX0NG
TEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJ
VGVzdHNfdGVzdGdsb2JhbHNfTERBREQgPSAkKHdlYmtpdF90ZXN0c19sZGFkZCkKLVByb2dyYW1z
X1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGdsb2JhbHNfTERGTEFHUyA9ICQod2Via2l0X3Rl
c3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGxvYWRp
bmdfU09VUkNFUyA9IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rsb2FkaW5nLmMKLVByb2dy
YW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGxvYWRpbmdfQ0ZMQUdTID0gJCh3ZWJraXRf
dGVzdHNfY2ZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0bG9hZGlu
Z19MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RB
UElUZXN0c190ZXN0bG9hZGluZ19MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFncykKLQot
UHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0bWltZWhhbmRsaW5nX1NPVVJDRVMg
PSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0bWltZWhhbmRsaW5nLmMgU291cmNlL1dlYktp
dC9ndGsvdGVzdHMvdGVzdF91dGlscy5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3Rz
X3Rlc3RtaW1laGFuZGxpbmdfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQotUHJvZ3Jh
bXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0bWltZWhhbmRsaW5nX0xEQUREID0gJCh3ZWJr
aXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RtaW1l
aGFuZGxpbmdfTERGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dl
YktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdG5ldHdvcmtyZXF1ZXN0X1NPVVJDRVMgPSBTb3VyY2Uv
V2ViS2l0L2d0ay90ZXN0cy90ZXN0bmV0d29ya3JlcXVlc3QuYwotUHJvZ3JhbXNfV2ViS2l0MUdP
YmplY3RBUElUZXN0c190ZXN0bmV0d29ya3JlcXVlc3RfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNf
Y2ZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0bmV0d29ya3JlcXVl
c3RfTERBREQgPSAkKHdlYmtpdF90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0
QVBJVGVzdHNfdGVzdG5ldHdvcmtyZXF1ZXN0X0xERkxBR1MgPSAkKHdlYmtpdF90ZXN0c19sZGZs
YWdzKQotCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RuZXR3b3JrcmVzcG9u
c2VfU09VUkNFUyA9IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RuZXR3b3JrcmVzcG9uc2Uu
YwotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0bmV0d29ya3Jlc3BvbnNlX0NG
TEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJ
VGVzdHNfdGVzdG5ldHdvcmtyZXNwb25zZV9MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQot
UHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0bmV0d29ya3Jlc3BvbnNlX0xERkxB
R1MgPSAkKHdlYmtpdF90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQ
SVRlc3RzX3Rlc3R3ZWJmcmFtZV9TT1VSQ0VTID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVz
dHdlYmZyYW1lLmMKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYmZyYW1l
X0NGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0
QVBJVGVzdHNfdGVzdHdlYmZyYW1lX0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQpCi1Qcm9n
cmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3R3ZWJmcmFtZV9MREZMQUdTID0gJCh3ZWJr
aXRfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0
d2VicGx1Z2luZGF0YWJhc2VfU09VUkNFUyA9IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3
ZWJwbHVnaW5kYXRhYmFzZS5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3R3
ZWJwbHVnaW5kYXRhYmFzZV9DRkxBR1MgPSAtRFRFU1RfUExVR0lOX0RJUj1cIiR7c2hlbGwgcHdk
fS8ke3RvcF9idWlsZGRpcn0vVGVzdE5ldHNjYXBlUGx1Z2luLy5saWJzXCIgJCh3ZWJraXRfdGVz
dHNfY2ZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0d2VicGx1Z2lu
ZGF0YWJhc2VfTERBREQgPSAkKHdlYmtpdF90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDFH
T2JqZWN0QVBJVGVzdHNfdGVzdHdlYnBsdWdpbmRhdGFiYXNlX0xERkxBR1MgPSAkKHdlYmtpdF90
ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3R3ZWJi
YWNrZm9yd2FyZGxpc3RfU09VUkNFUyA9IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJi
YWNrZm9yd2FyZGxpc3QuYwotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0d2Vi
YmFja2ZvcndhcmRsaXN0X0NGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykKLVByb2dyYW1z
X1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYmJhY2tmb3J3YXJkbGlzdF9MREFERCA9ICQo
d2Via2l0X3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0
d2ViYmFja2ZvcndhcmRsaXN0X0xERkxBR1MgPSAkKHdlYmtpdF90ZXN0c19sZGZsYWdzKQotCi1Q
cm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3R3ZWJoaXN0b3J5aXRlbV9TT1VSQ0VT
ID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYmhpc3RvcnlpdGVtLmMKLVByb2dyYW1z
X1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYmhpc3RvcnlpdGVtX0NGTEFHUyA9ICQod2Vi
a2l0X3Rlc3RzX2NmbGFncykKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdl
Ymhpc3RvcnlpdGVtX0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJL
aXQxR09iamVjdEFQSVRlc3RzX3Rlc3R3ZWJoaXN0b3J5aXRlbV9MREZMQUdTID0gJCh3ZWJraXRf
dGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0d2lu
ZG93X1NPVVJDRVMgPSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2luZG93LmMKLVByb2dy
YW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdpbmRvd19DRkxBR1MgPSAkKHdlYmtpdF90
ZXN0c19jZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3R3aW5kb3df
TERBREQgPSAkKHdlYmtpdF90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJ
VGVzdHNfdGVzdHdpbmRvd19MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFncykKLQotUHJv
Z3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0ZG93bmxvYWRfU09VUkNFUyA9IFNvdXJj
ZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rkb3dubG9hZC5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVj
dEFQSVRlc3RzX3Rlc3Rkb3dubG9hZF9DRkxBR1MgPSAkKHdlYmtpdF90ZXN0c19jZmxhZ3MpCi1Q
cm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rkb3dubG9hZF9MREFERCA9ICQod2Vi
a2l0X3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0ZG93
bmxvYWRfTERGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktp
dDFHT2JqZWN0QVBJVGVzdHNfdGVzdGF0a19TT1VSQ0VTID0gU291cmNlL1dlYktpdC9ndGsvdGVz
dHMvdGVzdGF0ay5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RhdGtfQ0ZM
QUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElU
ZXN0c190ZXN0YXRrX0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJL
aXQxR09iamVjdEFQSVRlc3RzX3Rlc3RhdGtfTERGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2xkZmxh
Z3MpCi0KLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGF0a3JvbGVzX1NPVVJD
RVMgPSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXRrcm9sZXMuYwotUHJvZ3JhbXNfV2Vi
S2l0MUdPYmplY3RBUElUZXN0c190ZXN0YXRrcm9sZXNfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNf
Y2ZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0YXRrcm9sZXNfTERB
REQgPSAkKHdlYmtpdF90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVz
dHNfdGVzdGF0a3JvbGVzX0xERkxBR1MgPSAkKHdlYmtpdF90ZXN0c19sZGZsYWdzKQotCi1Qcm9n
cmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3R3ZWJpbnNwZWN0b3JfU09VUkNFUyA9IFNv
dXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJpbnNwZWN0b3IuYyBTb3VyY2UvV2ViS2l0L2d0
ay90ZXN0cy90ZXN0X3V0aWxzLmMKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVz
dHdlYmluc3BlY3Rvcl9DRkxBR1MgPSAkKHdlYmtpdF90ZXN0c19jZmxhZ3MpCi1Qcm9ncmFtc19X
ZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3R3ZWJpbnNwZWN0b3JfTERBREQgPSAkKHdlYmtpdF90
ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYmluc3Bl
Y3Rvcl9MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0
MUdPYmplY3RBUElUZXN0c190ZXN0d2Vic2V0dGluZ3NfU09VUkNFUyA9IFNvdXJjZS9XZWJLaXQv
Z3RrL3Rlc3RzL3Rlc3R3ZWJzZXR0aW5ncy5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRl
c3RzX3Rlc3R3ZWJzZXR0aW5nc19DRkxBR1MgPSAkKHdlYmtpdF90ZXN0c19jZmxhZ3MpCi1Qcm9n
cmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3R3ZWJzZXR0aW5nc19MREFERCA9ICQod2Vi
a2l0X3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0d2Vi
c2V0dGluZ3NfTERGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dl
YktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYnJlc291cmNlX1NPVVJDRVMgPSBTb3VyY2UvV2Vi
S2l0L2d0ay90ZXN0cy90ZXN0d2VicmVzb3VyY2UuYwotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RB
UElUZXN0c190ZXN0d2VicmVzb3VyY2VfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQot
UHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0d2VicmVzb3VyY2VfTERBREQgPSAk
KHdlYmtpdF90ZXN0c19sZGFkZCkKLQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190
ZXN0d2ViZGF0YXNvdXJjZV9TT1VSQ0VTID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdl
YmRhdGFzb3VyY2UuYwotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0d2ViZGF0
YXNvdXJjZV9DRkxBR1MgPSAkKHdlYmtpdF90ZXN0c19jZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQx
R09iamVjdEFQSVRlc3RzX3Rlc3R3ZWJkYXRhc291cmNlX0xEQUREID0gJCh3ZWJraXRfdGVzdHNf
bGRhZGQpCi0KLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYnZpZXdfU09V
UkNFUyA9IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJ2aWV3LmMgU291cmNlL1dlYktp
dC9ndGsvdGVzdHMvdGVzdF91dGlscy5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3Rz
X3Rlc3R3ZWJ2aWV3X0NGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykKLVByb2dyYW1zX1dl
YktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYnZpZXdfTERBREQgPSAkKHdlYmtpdF90ZXN0c19s
ZGFkZCkKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYnZpZXdfTERGTEFH
UyA9ICQod2Via2l0X3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJ
VGVzdHNfdGVzdGhpdHRlc3RyZXN1bHRfU09VUkNFUyA9IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3Rz
L3Rlc3RoaXR0ZXN0cmVzdWx0LmMKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVz
dGhpdHRlc3RyZXN1bHRfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQotUHJvZ3JhbXNf
V2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0aGl0dGVzdHJlc3VsdF9MREFERCA9ICQod2Via2l0
X3Rlc3RzX2xkYWRkKQotCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RrZXll
dmVudHNfU09VUkNFUyA9IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RrZXlldmVudHMuYwot
UHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0a2V5ZXZlbnRzX0NGTEFHUyA9ICQo
d2Via2l0X3Rlc3RzX2NmbGFncykKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVz
dGtleWV2ZW50c19MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfV2ViS2l0
MUdPYmplY3RBUElUZXN0c190ZXN0a2V5ZXZlbnRzX0xERkxBR1MgPSAkKHdlYmtpdF90ZXN0c19s
ZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rjb3B5YW5kcGFz
dGVfU09VUkNFUyA9IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rjb3B5YW5kcGFzdGUuYyBc
Ci0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1ZlcnNpb25pbmcuYwotUHJvZ3JhbXNf
V2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0Y29weWFuZHBhc3RlX0NGTEFHUyA9ICQod2Via2l0
X3Rlc3RzX2NmbGFncykgXAotCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ayBcCi0JLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0
QVBJVGVzdHNfdGVzdGNvcHlhbmRwYXN0ZV9MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQot
UHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0Y29weWFuZHBhc3RlX0xERkxBR1Mg
PSAkKHdlYmtpdF90ZXN0c19sZGZsYWdzKQotCi1FWFRSQV9ESVNUICs9ICBcCi0JJChXZWJLaXQp
L3Rlc3RzL3Jlc291cmNlcy8qIFwKLQkkKFdlYktpdCkvdGVzdHMvdGVzdF91dGlscy5oCi0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Jlc291cmNlcy9ibGFuay5pY28gYi9T
b3VyY2UvV2ViS2l0L2d0ay90ZXN0cy9yZXNvdXJjZXMvYmxhbmsuaWNvCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBlYTg0OGI5Li4wMDAwMDAwCkJpbmFyeSBmaWxlcyBhL1NvdXJjZS9X
ZWJLaXQvZ3RrL3Rlc3RzL3Jlc291cmNlcy9ibGFuay5pY28gYW5kIC9kZXYvbnVsbCBkaWZmZXIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Jlc291cmNlcy90ZXN0Lmh0bWwg
Yi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy9yZXNvdXJjZXMvdGVzdC5odG1sCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA5OGY3ZDRmLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQv
Z3RrL3Rlc3RzL3Jlc291cmNlcy90ZXN0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAg
QEAKLTxodG1sPgotPGhlYWQ+PHRpdGxlPnRlc3Q8L3RpdGxlPjwvaGVhZD4KLTxib2R5PnRlc3Q8
L2JvZHk+Ci08L2h0bWw+PjwvaGVhZD4KLTxib2R5PnRlc3Q8L2JvZHk+Ci08L2h0bWw+CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy9yZXNvdXJjZXMvdGVzdC5vZ2cgYi9Tb3Vy
Y2UvV2ViS2l0L2d0ay90ZXN0cy9yZXNvdXJjZXMvdGVzdC5vZ2cKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDdmM2EzYjkuLjAwMDAwMDAKQmluYXJ5IGZpbGVzIGEvU291cmNlL1dlYktp
dC9ndGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3Qub2dnIGFuZCAvZGV2L251bGwgZGlmZmVyCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy9yZXNvdXJjZXMvdGVzdC5wZGYgYi9Tb3Vy
Y2UvV2ViS2l0L2d0ay90ZXN0cy9yZXNvdXJjZXMvdGVzdC5wZGYKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDI0MjRjMTkuLjAwMDAwMDAKQmluYXJ5IGZpbGVzIGEvU291cmNlL1dlYktp
dC9ndGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3QucGRmIGFuZCAvZGV2L251bGwgZGlmZmVyCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy9yZXNvdXJjZXMvdGVzdC50eHQgYi9Tb3Vy
Y2UvV2ViS2l0L2d0ay90ZXN0cy9yZXNvdXJjZXMvdGVzdC50eHQKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDlkYWVhZmIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvdGVz
dHMvcmVzb3VyY2VzL3Rlc3QudHh0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotdGVzdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdF91dGlscy5jIGIvU291cmNl
L1dlYktpdC9ndGsvdGVzdHMvdGVzdF91dGlscy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA2YmI2NDVkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rf
dXRpbHMuYworKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgQXJubyBSZW5ldmllcgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAidGVzdF91dGlscy5oIgotCi0jaW5jbHVk
ZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0KLWludCB0ZXN0dXRpbHNfcmVs
YXRpdmVfY2hkaXIoY29uc3QgZ2NoYXIgKnRhcmdldEZpbGVuYW1lLCBjb25zdCBnY2hhciAqZXhl
Y3V0YWJsZVBhdGgpCi17Ci0gICAgLyogdXNlciBjYW4gc2V0IGxvY2F0aW9uIG9mIHRoZSB3ZWJr
aXQgcmVwb3NpdG9yeSBkaXJlY3RvcnkgaWYgaXQgZGlmZmVycyBmcm9tIGJ1aWxkIGRpcmVjdG9y
eSAqLwotICAgIGNvbnN0IGdjaGFyICpyZXBvUGF0aCA9IGdfZ2V0ZW52KCJXRUJLSVRSRVBPRElS
Iik7Ci0gICAgaWYgKHJlcG9QYXRoKSB7Ci0gICAgICAgIGlmIChnX2NoZGlyKHJlcG9QYXRoKSkK
LSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICB9IGVsc2UgaWYgKGdfY2hkaXIoZ19wYXRoX2dl
dF9kaXJuYW1lKGV4ZWN1dGFibGVQYXRoKSkpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0KLSAg
ICB3aGlsZSAoIWdfZmlsZV90ZXN0KHRhcmdldEZpbGVuYW1lLCBHX0ZJTEVfVEVTVF9FWElTVFMp
KSB7Ci0gICAgICAgIGdjaGFyICpwYXRoTmFtZTsKLSAgICAgICAgaWYgKGdfY2hkaXIoIi4uIikp
Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIGdfYXNzZXJ0KCFnX3N0cl9lcXVhbCgo
cGF0aE5hbWUgPSBnX2dldF9jdXJyZW50X2RpcigpKSwgIi8iKSk7Ci0gICAgICAgIGdfZnJlZShw
YXRoTmFtZSk7Ci0gICAgfQotCi0gICAgZ2NoYXIgKmRpck5hbWUgPSBnX3BhdGhfZ2V0X2Rpcm5h
bWUodGFyZ2V0RmlsZW5hbWUpOwotICAgIGlmIChnX2NoZGlyKGRpck5hbWUpKSB7Ci0gICAgICAg
IGdfZnJlZShkaXJOYW1lKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIGdfZnJl
ZShkaXJOYW1lKTsKLSAgICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Z3RrL3Rlc3RzL3Rlc3RfdXRpbHMuaCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RfdXRp
bHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWM2MGRhMy4uMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0X3V0aWxzLmgKKysrIC9kZXYvbnVsbApAQCAt
MSwzICswLDAgQEAKLSNpbmNsdWRlIDxnbGliLmg+Ci0KLWludCB0ZXN0dXRpbHNfcmVsYXRpdmVf
Y2hkaXIoY29uc3QgZ2NoYXIgKnRhcmdldEZpbGVuYW1lLCBjb25zdCBnY2hhciAqZXhlY3V0YWJs
ZVBhdGgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGFwcGxpY2F0
aW9uY2FjaGUuYyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhcHBsaWNhdGlvbmNhY2hl
LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxOGY0MDEuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGFwcGxpY2F0aW9uY2FjaGUuYworKysgL2Rldi9u
dWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgTHVrYXN6IFNs
YWNoY2lhawotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLDEgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRl
IDxnbGliL2dwcmludGYuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d2Via2l0
L3dlYmtpdC5oPgotCi1zdGF0aWMgdm9pZCB0ZXN0X2FwcGxpY2F0aW9uX2NhY2hlX21heGltdW1f
c2l6ZSgpCi17Ci0gICAgdW5zaWduZWQgbG9uZyBsb25nIG1heFNpemUgPSA4MTkyOwotICAgIHdl
YmtpdF9hcHBsaWNhdGlvbl9jYWNoZV9zZXRfbWF4aW11bV9zaXplKG1heFNpemUpOwotCi0gICAg
Ly8gQ3JlYXRpbmcgYSBXZWJWaWV3IC0gbWFrZSBzdXJlIHRoYXQgaXQgZGlkbid0IGNoYW5nZSBh
bnl0aGluZwotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Vi
a2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKLSAg
ICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKLQotICAgIGdfYXNzZXJ0KG1heFNpemUgPT0gd2Vi
a2l0X2FwcGxpY2F0aW9uX2NhY2hlX2dldF9tYXhpbXVtX3NpemUoKSk7Ci19Ci0KLWludCBtYWlu
KGludCBhcmdjLCBjaGFyKiogYXJndikKLXsKLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJn
diwgTlVMTCk7Ci0KLSAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3Jn
LyIpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hcHBsaWNhdGlvbl9jYWNoZS9tYXhp
bXVtX3NpemUiLAotICAgICAgICAgICAgICAgICAgICB0ZXN0X2FwcGxpY2F0aW9uX2NhY2hlX21h
eGltdW1fc2l6ZSk7Ci0KLSAgICByZXR1cm4gZ190ZXN0X3J1bigpOwotfQotCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXRrLmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90
ZXN0cy90ZXN0YXRrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhMmRiNjEuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGF0ay5jCisrKyAvZGV2L251
bGwKQEAgLTEsMTQ3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IElnYWxpYSBT
LkwuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5j
bHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0
ay5oPgotI2luY2x1ZGUgPGxvY2FsZS5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUg
PHdlYmtpdC93ZWJraXQuaD4KLQotc3RhdGljIGNvbnN0IGNoYXIqIGNlbnRlcmVkQ29udGVudHMg
PSAiPGh0bWw+PGJvZHk+PHAgc3R5bGU9J3RleHQtYWxpZ246IGNlbnRlcjsnPlNob3J0IGxpbmU8
L3A+PHAgc3R5bGU9J3RleHQtYWxpZ246IGNlbnRlcjsnPkxvbmctc2l6ZSBsaW5lIHdpdGggc29t
ZSBmb28gYmFyIGJheiBjb250ZW50PC9wPjxwIHN0eWxlPSd0ZXh0LWFsaWduOiBjZW50ZXI7Jz5T
aG9ydCBsaW5lPC9wPjxwIHN0eWxlPSd0ZXh0LWFsaWduOiBjZW50ZXI7Jz5UaGlzIGlzIGEgbXVs
dGktbGluZSBwYXJhZ3JhcGg8YnIgLz53aGVyZSB0aGUgZmlyc3QgbGluZTxiciAvPmlzIHRoZSBi
aWdnZXN0IG9uZTwvcD48L2JvZHk+PC9odG1sPiI7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBjb250
ZW50cyA9ICI8aHRtbD48Ym9keT48cD5UaGlzIGlzIGEgdGVzdC4gVGhpcyBpcyB0aGUgc2Vjb25k
IHNlbnRlbmNlLiBBbmQgdGhpcyB0aGUgdGhpcmQuPC9wPjwvYm9keT48L2h0bWw+IjsKLQotc3Rh
dGljIGNvbnN0IGNoYXIqIGNvbnRlbnRzSW5UYWJsZVdpdGhIZWFkZXJzID0gIjxodG1sPjxib2R5
Pjx0YWJsZT48dHI+PHRoPmZvbzwvdGg+PHRoPmJhcjwvdGg+PHRoIGNvbHNwYW49JzInPmJhejwv
dGg+PC90cj48dHI+PHRoPnF1eDwvdGg+PHRkPjE8L3RkPjx0ZD4yPC90ZD48dGQ+MzwvdGQ+PC90
cj48dHI+PHRoIHJvd3NwYW49JzInPnF1dXg8L3RoPjx0ZD40PC90ZD48dGQ+NTwvdGQ+PHRkPjY8
L3RkPjwvdHI+PHRyPjx0ZD42PC90ZD48dGQ+NzwvdGQ+PHRkPjg8L3RkPjwvdHI+PHRyPjx0aD5j
b3JnZTwvdGg+PHRkPjk8L3RkPjx0ZD4xMDwvdGQ+PHRkPjExPC90ZD48L3RyPjwvdGFibGU+PHRh
YmxlPjx0cj48dGQ+MTwvdGQ+PHRkPjI8L3RkPjwvdHI+PHRyPjx0ZD4zPC90ZD48dGQ+NDwvdGQ+
PC90cj48L3RhYmxlPjwvYm9keT48L2h0bWw+IjsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnRl
bnRzV2l0aEV4dHJhbmVvdXNXaGl0ZVNwYWNlcyA9ICI8aHRtbD48aGVhZD48Ym9keT48cD5UaGlz
XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFncmFwaFxuICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNcbiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib3JrZWQhPC9wPjwvYm9keT48L2h0bWw+IjsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNv
bWJvQm94U2VsZWN0b3IgPSAiPGh0bWw+PGJvZHk+PHNlbGVjdD48b3B0aW9uIHNlbGVjdGVkIHZh
bHVlPSdmb28nPmZvbzwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J2Jhcic+YmFyPC9vcHRpb24+PC9z
ZWxlY3Q+PC9ib2R5PjwvaHRtbD4iOwotCi1zdGF0aWMgY29uc3QgY2hhciogZW1iZWRkZWRPYmpl
Y3RzID0gIjxodG1sPjxib2R5PjxwPkNob29zZTogPGlucHV0IHZhbHVlPSdmb28nIHR5cGU9J2No
ZWNrYm94Jy8+Zm9vIDxpbnB1dCB2YWx1ZT0nYmFyJyB0eXBlPSdjaGVja2JveCcvPmJhciAocGlj
ayBvbmUpPC9wPjxwPkNob29zZTogPHNlbGVjdCBuYW1lPSdmb28nPjxvcHRpb24+YmFyPC9vcHRp
b24+PG9wdGlvbj5iYXo8L29wdGlvbj48L3NlbGVjdD4gKHBpY2sgb25lKTwvcD48cD48aW5wdXQg
bmFtZT0nZm9vYmFyYnV0dG9uJyB2YWx1ZT0nZm9vYmFyJyB0eXBlPSdidXR0b24nLz48L3A+PC9i
b2R5PjwvaHRtbD4iOwotCi1zdGF0aWMgY29uc3QgY2hhciogZm9ybVdpdGhUZXh0SW5wdXRzID0g
IjxodG1sPjxib2R5Pjxmb3JtPjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdlbnRyeScgLz48aW5w
dXQgdHlwZT0ncGFzc3dvcmQnIG5hbWU9J3Bhc3N3b3JkRW50cnknIC8+PC9mb3JtPjwvYm9keT48
L2h0bWw+IjsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGh5cGVydGV4dEFuZEh5cGVybGlua3MgPSAi
PGh0bWw+PGJvZHk+PHA+QSBwYXJhZ3JhcGggd2l0aCBubyBsaW5rcyBhdCBhbGw8L3A+PHA+PGEg
aHJlZj0naHR0cDovL2Zvby5iYXIuYmF6Lyc+QSBsaW5lPC9hPiB3aXRoIDxhIGhyZWY9J2h0dHA6
Ly9iYXIuYmF6LmZvby8nPmEgbGluayBpbiB0aGUgbWlkZGxlPC9hPiBhcyB3ZWxsIGFzIGF0IHRo
ZSBiZWdpbm5pbmcgYW5kIDxhIGhyZWY9J2h0dHA6Ly9iYXouZm9vLmJhci8nPmF0IHRoZSBlbmQ8
L2E+PC9wPjxvbD48bGk+TGlzdCBpdGVtIHdpdGggYSA8c3Bhbj48YSBocmVmPSdodHRwOi8vZm9v
LmJhci5iYXovJz5saW5rIGluc2lkZSBhIHNwYW4gbm9kZTwvYT48L3NwYW4+PC9saT48L29sPjwv
Ym9keT48L2h0bWw+IjsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGxheW91dEFuZERhdGFUYWJsZXMg
PSAiPGh0bWw+PGJvZHk+PHRhYmxlPjx0cj48dGg+T2RkPC90aD48dGg+RXZlbjwvdGg+PC90cj48
dHI+PHRkPjE8L3RkPjx0ZD4yPC90ZD48L3RyPjwvdGFibGU+PHRhYmxlPjx0cj48dGQ+Zm9vPC90
ZD48dGQ+YmFyPC90ZD48L3RyPjwvdGFibGU+PC9ib2R5PjwvaHRtbD4iOwotCi1zdGF0aWMgY29u
c3QgY2hhciogbGlua3NXaXRoSW5saW5lSW1hZ2VzID0gIjxodG1sPjxoZWFkPjxzdHlsZT5hLmh0
dHA6YmVmb3JlIHtjb250ZW50OiB1cmwobm8taW1hZ2UucG5nKTt9PC9zdHlsZT48Ym9keT48cD48
YSBjbGFzcz0naHR0cCcgaHJlZj0nZm9vJz5mb288L2E+IGJhciBiYXo8L3A+PHA+Zm9vIDxhIGNs
YXNzPSdodHRwJyBocmVmPSdiYXInPmJhcjwvYT4gYmF6PC9wPjxwPmZvbyBiYXIgPGEgY2xhc3M9
J2h0dHAnIGhyZWY9J2Jheic+YmF6PC9hPjwvcD48L2JvZHk+PC9odG1sPiI7Ci0KLXN0YXRpYyBj
b25zdCBjaGFyKiBsaXN0c09mSXRlbXMgPSAiPGh0bWw+PGJvZHk+PHVsPjxsaT50ZXh0IG9ubHk8
L2xpPjxsaT48YSBocmVmPSdmb28nPmxpbmsgb25seTwvYT48L2xpPjxsaT50ZXh0IGFuZCBhIDxh
IGhyZWY9J2Jhcic+bGluazwvYT48L2xpPjwvdWw+PG9sPjxsaT50ZXh0IG9ubHk8L2xpPjxsaT48
YSBocmVmPSdmb28nPmxpbmsgb25seTwvYT48L2xpPjxsaT50ZXh0IGFuZCBhIDxhIGhyZWY9J2Jh
cic+bGluazwvYT48L2xpPjwvb2w+PC9ib2R5PjwvaHRtbD4iOwotCi1zdGF0aWMgY29uc3QgY2hh
ciogdGV4dEZvckNhcmV0QnJvd3NpbmcgPSAiPGh0bWw+PGJvZHk+PGgxPkEgdGV4dCBoZWFkZXI8
L2gxPjxwPkEgcGFyYWdyYXBoIDxhIGhyZWY9J2h0dHA6Ly9mb28uYmFyLmJhei8nPndpdGggYSBs
aW5rPC9hPiBpbiB0aGUgbWlkZGxlPC9wPjxvbD48bGk+QSBsaXN0IGl0ZW08L2xpPjxsaT48c3Bh
biBzdHlsZT0nZGlzcGxheTpibG9jazsnPkJsb2NrIHNwYW4gaW4gYSBsaXN0IGl0ZW08L3NwYW4+
PHNwYW4+SW5saW5lIHNwYW4gaW4gYSBsaXN0IGl0ZW08L3NwYW4+PC9saT48bGk+PGEgaHJlZj0n
Zm9vJz48c3BhbiBzdHlsZT0nZGlzcGxheTpibG9jazsnPkJsb2NrIHNwYW4gaW4gYSBsaW5rIGlu
IGEgbGlzdCBpdGVtPC9zcGFuPjxzcGFuPklubGluZSBzcGFuIGluIGEgbGluayBpbiBhIGxpc3Qg
aXRlbTwvc3Bhbj48L2E+PC9saT48L29sPjxzZWxlY3Q+PG9wdGlvbiBzZWxlY3RlZCB2YWx1ZT0n
Zm9vJz5BbiBvcHRpb24gaW4gYSBjb21ibyBib3g8L29wdGlvbj48L3NlbGVjdD48aW5wdXQgdHlw
ZT0ndGV4dCcgbmFtZT0nZm9vJyB2YWx1ZT0nZm9vIGJhciBiYXonIC8+PHRhYmxlPjx0cj48dGQ+
YSB0YWJsZSBjZWxsPC90ZD48dGQ+PC90ZD48dGQ+PGEgaHJlZj0nZm9vJz48c3BhbiBzdHlsZT0n
ZGlzcGxheTpibG9jazsnPkJsb2NrIHNwYW4gaW4gYSBsaW5rIGluIGEgdGFibGUgY2VsbDwvc3Bh
bj48c3Bhbj5JbmxpbmUgc3BhbiBpbiBhIGxpbmsgaW4gYSB0YWJsZSBjZWxsPC9zcGFuPjwvYT48
L3RkPjx0ZD48c3BhbiBzdHlsZT0nZGlzcGxheTpibG9jazsnPkJsb2NrIHNwYW4gaW4gYSB0YWJs
ZSBjZWxsPC9zcGFuPjxzcGFuPklubGluZSBzcGFuIGluIGEgdGFibGUgY2VsbDwvc3Bhbj48L3Rk
PjwvdHI+PC90YWJsZT48aDQ+PGEgaHJlZj0nZm9vJz48c3BhbiBzdHlsZT0nZGlzcGxheTpibG9j
azsnPkJsb2NrIHNwYW4gaW4gYSBsaW5rIGluIGEgaGVhZGluZzwvc3Bhbj48c3Bhbj5JbmxpbmUg
c3BhbiBpbiBhIGxpbmsgaW4gYSBoZWFkaW5nPC9zcGFuPjwvaDQ+PGg0PjxzcGFuIHN0eWxlPSdk
aXNwbGF5OmJsb2NrOyc+QmxvY2sgc3BhbiBpbiBhIGhlYWRpbmc8L3NwYW4+PHNwYW4+SW5saW5l
IHNwYW4gaW4gYSBoZWFkaW5nPC9zcGFuPjwvaDQ+PC9ib2R5PjwvaHRtbD4iOwotCi1zdGF0aWMg
Y29uc3QgY2hhciogdGV4dEZvclNlbGVjdGlvbnMgPSAiPGh0bWw+PGJvZHk+PHA+QSBwYXJhZ3Jh
cGggd2l0aCBwbGFpbiB0ZXh0PC9wPjxwPkEgcGFyYWdyYXBoIHdpdGggPGEgaHJlZj0naHR0cDov
L3dlYmtpdC5vcmcnPmEgbGluazwvYT4gaW4gdGhlIG1pZGRsZTwvcD48b2w+PGxpPkEgbGlzdCBp
dGVtPC9saT48L29sPjxzZWxlY3Q+PC9ib2R5PjwvaHRtbD4iOwotCi1zdGF0aWMgY29uc3QgY2hh
ciogdGV4dFdpdGhBdHRyaWJ1dGVzID0gIjxodG1sPjxoZWFkPjxzdHlsZT4uc3QxIHtmb250LWZh
bWlseTogbW9ub3NwYWNlOyBjb2xvcjpyZ2IoMTIwLDEyMSwxMjIpO30gLnN0MiB7dGV4dC1kZWNv
cmF0aW9uOnVuZGVybGluZTsgYmFja2dyb3VuZC1jb2xvcjpyZ2IoODAsODEsODIpO308L3N0eWxl
PjwvaGVhZD48Ym9keT48cCBzdHlsZT1cImZvbnQtc2l6ZToxNDsgdGV4dC1hbGlnbjpyaWdodDtc
Ij5UaGlzIGlzIHRoZSA8aT5maXJzdDwvaT48Yj4gc2VudGVuY2Ugb2YgdGhpcyB0ZXh0LjwvYj48
L3A+PHAgY2xhc3M9XCJzdDFcIj5UaGlzIHNlbnRlbmNlIHNob3VsZCBoYXZlIGFuIHN0eWxlIGFw
cGxpZWQgPHNwYW4gY2xhc3M9XCJzdDJcIj5hbmQgdGhpcyBwYXJ0IHNob3VsZCBoYXZlIGFub3Ro
ZXIgb25lPC9zcGFuPi48L3A+PHA+eDxzdWI+MTwvc3ViPjxzdXA+Mjwvc3VwPj14PHN1Yj4yPC9z
dWI+PHN1cD4zPC9zdXA+PC9wPjxwIHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXI7XCI+VGhpcyBz
ZW50ZW5jZSBpcyB0aGUgPHN0cmlrZT5sYXN0PC9zdHJpa2U+IG9uZS48L3A+PC9ib2R5PjwvaHRt
bD4iOwotCi1zdGF0aWMgQXRrT2JqZWN0KiBnZXRXZWJBcmVhT2JqZWN0KFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcpCi17Ci0gICAgLyogTWFudWFsbHkgc3BpbiB0aGUgbWFpbiBjb250ZXh0IHRvIG1h
a2Ugc3VyZSB0aGUgYWNjZXNzaWJsZQotICAgICAgIG9iamVjdHMgYXJlIHByb3Blcmx5IGNyZWF0
ZWQgYmVmb3JlIGNvbnRpbnVpbmcuICovCi0gICAgd2hpbGUgKGdfbWFpbl9jb250ZXh0X3BlbmRp
bmcoMCkpCi0gICAgICAgIGdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbigwLCBUUlVFKTsKLQotICAg
IEF0a09iamVjdCogcm9vdE9iamVjdCA9IGd0a193aWRnZXRfZ2V0X2FjY2Vzc2libGUoR1RLX1dJ
REdFVCh3ZWJWaWV3KSk7Ci0gICAgaWYgKCFyb290T2JqZWN0KQotICAgICAgICByZXR1cm4gTlVM
TDsKLQotICAgIEF0a09iamVjdCogd2ViQXJlYU9iamVjdCA9IGF0a19vYmplY3RfcmVmX2FjY2Vz
c2libGVfY2hpbGQocm9vdE9iamVjdCwgMCk7Ci0gICAgaWYgKCF3ZWJBcmVhT2JqZWN0KQotICAg
ICAgICByZXR1cm4gTlVMTDsKLQotICAgIC8qIFdlIGRvbid0IG5lZWQgdGhlIGV4dHJhIHJlZiBo
ZXJlLiAqLwotICAgIGdfb2JqZWN0X3VucmVmKHdlYkFyZWFPYmplY3QpOwotCi0gICAgcmV0dXJu
IHdlYkFyZWFPYmplY3Q7Ci19Ci0KLXN0YXRpYyBnY2hhciogdGV4dENhcmV0TW92ZWRSZXN1bHQg
PSAwOwotCi1zdGF0aWMgdm9pZCB0ZXh0Q2FyZXRNb3ZlZENhbGxiYWNrKEF0a1RleHQqIHRleHQs
IGdpbnQgcG9zLCBncG9pbnRlciBkYXRhKQotewotICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHRl
eHQpKTsKLQotICAgIGdfZnJlZSh0ZXh0Q2FyZXRNb3ZlZFJlc3VsdCk7Ci0gICAgQXRrUm9sZSBy
b2xlID0gYXRrX29iamVjdF9nZXRfcm9sZShBVEtfT0JKRUNUKHRleHQpKTsKLSAgICB0ZXh0Q2Fy
ZXRNb3ZlZFJlc3VsdCA9IGdfc3RyZHVwX3ByaW50ZigifCVzfCVkfCIsIGF0a19yb2xlX2dldF9u
YW1lKHJvbGUpLCBwb3MpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrQ2FyZXRPZmZz
ZXRzKCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdl
YmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7Ci0g
ICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9OwotICAgIGd0
a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7
Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIHRleHRGb3JDYXJldEJy
b3dzaW5nLCAwLCAwLCAwKTsKLQotICAgIEF0a09iamVjdCogb2JqZWN0ID0gZ2V0V2ViQXJlYU9i
amVjdCh3ZWJWaWV3KTsKLSAgICBnX2Fzc2VydChvYmplY3QpOwotCi0gICAgQXRrT2JqZWN0KiBo
ZWFkZXIgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMCk7Ci0gICAg
Z19hc3NlcnQoQVRLX0lTX1RFWFQoaGVhZGVyKSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChoZWFk
ZXIsICJ0ZXh0LWNhcmV0LW1vdmVkIiwgR19DQUxMQkFDSyh0ZXh0Q2FyZXRNb3ZlZENhbGxiYWNr
KSwgMCk7Ci0KLSAgICAvKiBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8gcGxhY2UgdGhlIGNhcmV0
IGluc2lkZSBhIGhlYWRlci4gKi8KLSAgICBnYm9vbGVhbiByZXN1bHQgPSBhdGtfdGV4dF9zZXRf
Y2FyZXRfb2Zmc2V0KEFUS19URVhUKGhlYWRlciksIDUpOwotICAgIGdfYXNzZXJ0X2NtcGludChy
ZXN1bHQsID09LCBUUlVFKTsKLSAgICBnaW50IG9mZnNldCA9IGF0a190ZXh0X2dldF9jYXJldF9v
ZmZzZXQoQVRLX1RFWFQoaGVhZGVyKSk7Ci0gICAgZ19hc3NlcnRfY21waW50KG9mZnNldCwgPT0s
IDUpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0Q2FyZXRNb3ZlZFJlc3VsdCwgPT0sICJ8aGVh
ZGluZ3w1fCIpOwotCi0gICAgQXRrT2JqZWN0KiBwYXJhZ3JhcGggPSBhdGtfb2JqZWN0X3JlZl9h
Y2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMSk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQocGFy
YWdyYXBoKSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChwYXJhZ3JhcGgsICJ0ZXh0LWNhcmV0LW1v
dmVkIiwgR19DQUxMQkFDSyh0ZXh0Q2FyZXRNb3ZlZENhbGxiYWNrKSwgMCk7Ci0KLSAgICAvKiBJ
dCBzaG91bGQgYmUgcG9zc2libGUgdG8gcGxhY2UgdGhlIGNhcmV0IGluc2lkZSBhIHBhcmFncmFw
aCBhbmQgYSBsaW5rLiAqLwotICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9jYXJldF9vZmZzZXQo
QVRLX1RFWFQocGFyYWdyYXBoKSwgNSk7Ci0gICAgZ19hc3NlcnRfY21waW50KHJlc3VsdCwgPT0s
IFRSVUUpOwotICAgIG9mZnNldCA9IGF0a190ZXh0X2dldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQo
cGFyYWdyYXBoKSk7Ci0gICAgZ19hc3NlcnRfY21waW50KG9mZnNldCwgPT0sIDUpOwotICAgIGdf
YXNzZXJ0X2NtcHN0cih0ZXh0Q2FyZXRNb3ZlZFJlc3VsdCwgPT0sICJ8cGFyYWdyYXBofDV8Iik7
Ci0KLSAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhUKHBhcmFn
cmFwaCksIDIwKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQocmVzdWx0LCA9PSwgVFJVRSk7Ci0gICAg
b2Zmc2V0ID0gYXRrX3RleHRfZ2V0X2NhcmV0X29mZnNldChBVEtfVEVYVChwYXJhZ3JhcGgpKTsK
LSAgICBnX2Fzc2VydF9jbXBpbnQob2Zmc2V0LCA9PSwgMjApOwotICAgIGdfYXNzZXJ0X2NtcHN0
cih0ZXh0Q2FyZXRNb3ZlZFJlc3VsdCwgPT0sICJ8cGFyYWdyYXBofDIwfCIpOwotCi0gICAgcmVz
dWx0ID0gYXRrX3RleHRfc2V0X2NhcmV0X29mZnNldChBVEtfVEVYVChwYXJhZ3JhcGgpLCAzMCk7
Ci0gICAgZ19hc3NlcnRfY21waW50KHJlc3VsdCwgPT0sIFRSVUUpOwotICAgIG9mZnNldCA9IGF0
a190ZXh0X2dldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQocGFyYWdyYXBoKSk7Ci0gICAgZ19hc3Nl
cnRfY21waW50KG9mZnNldCwgPT0sIDMwKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGV4dENhcmV0
TW92ZWRSZXN1bHQsID09LCAifHBhcmFncmFwaHwzMHwiKTsKLQotICAgIEF0a09iamVjdCogbGlu
ayA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQocGFyYWdyYXBoLCAwKTsKLSAgICBn
X2Fzc2VydChBVEtfSVNfVEVYVChsaW5rKSk7Ci0KLSAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRf
Y2FyZXRfb2Zmc2V0KEFUS19URVhUKGxpbmspLCA1KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQocmVz
dWx0LCA9PSwgVFJVRSk7Ci0gICAgb2Zmc2V0ID0gYXRrX3RleHRfZ2V0X2NhcmV0X29mZnNldChB
VEtfVEVYVChsaW5rKSk7Ci0gICAgZ19hc3NlcnRfY21waW50KG9mZnNldCwgPT0sIDUpOwotICAg
IC8qIFBvc2l0aW9ucyBpbnNpZGUgbGlua3MgYXJlIHJlcG9ydGVkIHJlbGF0aXZlIHRvIHRoZSBw
YXJhZ3JhcGguICovCi0gICAgZ19hc3NlcnRfY21wc3RyKHRleHRDYXJldE1vdmVkUmVzdWx0LCA9
PSwgInxwYXJhZ3JhcGh8MTd8Iik7Ci0KLSAgICBBdGtPYmplY3QqIGxpc3QgPSBhdGtfb2JqZWN0
X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMik7Ci0gICAgZ19hc3NlcnQoQVRLX09CSkVD
VChsaXN0KSk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShsaXN0KSA9PSBBVEtf
Uk9MRV9MSVNUKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX29iamVjdF9nZXRfbl9hY2Nlc3Np
YmxlX2NoaWxkcmVuKGxpc3QpLCA9PSwgMyk7Ci0KLSAgICBBdGtPYmplY3QqIGxpc3RJdGVtID0g
YXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChsaXN0LCAwKTsKLSAgICBsaXN0SXRlbSA9
IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQobGlzdCwgMik7Ci0gICAgZ19hc3NlcnQo
QVRLX0lTX1RFWFQobGlzdEl0ZW0pKTsKLQotICAgIC8qIEl0J3Mgbm90IHBvc3NpYmxlIHRvIHBs
YWNlIHRoZSBjYXJldCBpbnNpZGUgYW4gaXRlbSdzIG1hcmtlci4gKi8KLSAgICByZXN1bHQgPSBh
dGtfdGV4dF9zZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhUKGxpc3RJdGVtKSwgMSk7Ci0gICAgZ19h
c3NlcnRfY21waW50KHJlc3VsdCwgPT0sIEZBTFNFKTsKLQotICAgIC8qIEl0IHNob3VsZCBiZSBw
b3NzaWJsZSB0byBwbGFjZSB0aGUgY2FyZXQgaW5zaWRlIGFuIGl0ZW0ncyB0ZXh0LiAqLwotICAg
IHJlc3VsdCA9IGF0a190ZXh0X3NldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQobGlzdEl0ZW0pLCA1
KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQocmVzdWx0LCA9PSwgVFJVRSk7Ci0gICAgb2Zmc2V0ID0g
YXRrX3RleHRfZ2V0X2NhcmV0X29mZnNldChBVEtfVEVYVChsaXN0SXRlbSkpOwotICAgIGdfYXNz
ZXJ0X2NtcGludChvZmZzZXQsID09LCA1KTsKLQotICAgIEF0a09iamVjdCogcGFuZWwgPSBhdGtf
b2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMyk7Ci0gICAgZ19hc3NlcnQoQVRL
X0lTX09CSkVDVChwYW5lbCkpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUocGFu
ZWwpID09IEFUS19ST0xFX1BBTkVMKTsKLQotICAgIEF0a09iamVjdCogY29tYm9Cb3ggPSBhdGtf
b2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKHBhbmVsLCAwKTsKLSAgICBnX2Fzc2VydChBVEtf
SVNfT0JKRUNUKGNvbWJvQm94KSk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShj
b21ib0JveCkgPT0gQVRLX1JPTEVfQ09NQk9fQk9YKTsKLQotICAgIEF0a09iamVjdCogbWVudVBv
cHVwID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChjb21ib0JveCwgMCk7Ci0gICAg
Z19hc3NlcnQoQVRLX0lTX09CSkVDVChtZW51UG9wdXApKTsKLSAgICBnX2Fzc2VydChhdGtfb2Jq
ZWN0X2dldF9yb2xlKG1lbnVQb3B1cCkgPT0gQVRLX1JPTEVfTUVOVSk7Ci0KLSAgICBBdGtPYmpl
Y3QqIGNvbWJvQm94T3B0aW9uID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChtZW51
UG9wdXAsIDApOwotICAgIGdfYXNzZXJ0KEFUS19JU19PQkpFQ1QoY29tYm9Cb3hPcHRpb24pKTsK
LSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGNvbWJvQm94T3B0aW9uKSA9PSBBVEtf
Uk9MRV9NRU5VX0lURU0pOwotCi0gICAgLyogSXQncyBub3QgcG9zc2libGUgdG8gcGxhY2UgdGhl
IGNhcmV0IGluc2lkZSBhbiBvcHRpb24gZm9yIGEgY29tYm9ib3guICovCi0gICAgcmVzdWx0ID0g
YXRrX3RleHRfc2V0X2NhcmV0X29mZnNldChBVEtfVEVYVChjb21ib0JveE9wdGlvbiksIDEpOwot
ICAgIGdfYXNzZXJ0X2NtcGludChyZXN1bHQsID09LCBGQUxTRSk7Ci0KLSAgICBBdGtPYmplY3Qq
IHRleHRFbnRyeSA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQocGFuZWwsIDEpOwot
ICAgIGdfYXNzZXJ0KEFUS19JU19PQkpFQ1QodGV4dEVudHJ5KSk7Ci0gICAgZ19hc3NlcnQoYXRr
X29iamVjdF9nZXRfcm9sZSh0ZXh0RW50cnkpID09IEFUS19ST0xFX0VOVFJZKTsKLQotICAgIHJl
c3VsdCA9IGF0a190ZXh0X3NldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQodGV4dEVudHJ5KSwgNSk7
Ci0gICAgZ19hc3NlcnRfY21waW50KHJlc3VsdCwgPT0sIFRSVUUpOwotICAgIG9mZnNldCA9IGF0
a190ZXh0X2dldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQodGV4dEVudHJ5KSk7Ci0gICAgZ19hc3Nl
cnRfY21waW50KG9mZnNldCwgPT0sIDUpOwotCi0gICAgQXRrT2JqZWN0KiB0YWJsZSA9IGF0a19v
YmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCA0KTsKLSAgICBnX2Fzc2VydChBVEtf
SVNfT0JKRUNUKHRhYmxlKSk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZSh0YWJs
ZSkgPT0gQVRLX1JPTEVfVEFCTEUpOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfb2JqZWN0X2dl
dF9uX2FjY2Vzc2libGVfY2hpbGRyZW4odGFibGUpLCA9PSwgNCk7Ci0KLSAgICBBdGtPYmplY3Qq
IHRhYmxlQ2VsbCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQodGFibGUsIDApOwot
ICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUodGFibGVDZWxsKSA9PSBBVEtfUk9MRV9U
QUJMRV9DRUxMKTsKLSAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfY2FyZXRfb2Zmc2V0KEFUS19U
RVhUKHRhYmxlQ2VsbCksIDIpOwotICAgIGdfYXNzZXJ0X2NtcGludChyZXN1bHQsID09LCBUUlVF
KTsKLSAgICBvZmZzZXQgPSBhdGtfdGV4dF9nZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhUKHRhYmxl
Q2VsbCkpOwotICAgIGdfYXNzZXJ0X2NtcGludChvZmZzZXQsID09LCAyKTsKLQotICAgIGdfZnJl
ZSh0ZXh0Q2FyZXRNb3ZlZFJlc3VsdCk7Ci0KLSAgICBnX29iamVjdF91bnJlZihwYXJhZ3JhcGgp
OwotICAgIGdfb2JqZWN0X3VucmVmKGxpbmspOwotICAgIGdfb2JqZWN0X3VucmVmKGxpc3QpOwot
ICAgIGdfb2JqZWN0X3VucmVmKGxpc3RJdGVtKTsKLSAgICBnX29iamVjdF91bnJlZihwYW5lbCk7
Ci0gICAgZ19vYmplY3RfdW5yZWYoY29tYm9Cb3gpOwotICAgIGdfb2JqZWN0X3VucmVmKG1lbnVQ
b3B1cCk7Ci0gICAgZ19vYmplY3RfdW5yZWYoY29tYm9Cb3hPcHRpb24pOwotICAgIGdfb2JqZWN0
X3VucmVmKHRleHRFbnRyeSk7Ci0gICAgZ19vYmplY3RfdW5yZWYodGFibGUpOwotICAgIGdfb2Jq
ZWN0X3VucmVmKHRhYmxlQ2VsbCk7Ci0gICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Ci19Ci0K
LXN0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtDYXJldE9mZnNldHNBbmRFeHRyYW5vdXNXaGl0ZVNw
YWNlcygpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3
ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOwot
ICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgODAwLCA2MDAgfTsKLSAgICBn
dGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24p
OwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LCBjb250ZW50c1dpdGhF
eHRyYW5lb3VzV2hpdGVTcGFjZXMsIDAsIDAsIDApOwotCi0gICAgLyogRW5hYmxlIGNhcmV0IGJy
b3dzaW5nLiAqLwotICAgIFdlYktpdFdlYlNldHRpbmdzKiBzZXR0aW5ncyA9IHdlYmtpdF93ZWJf
dmlld19nZXRfc2V0dGluZ3Mod2ViVmlldyk7Ci0gICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKHNl
dHRpbmdzKSwgImVuYWJsZS1jYXJldC1icm93c2luZyIsIFRSVUUsIE5VTEwpOwotCi0gICAgLyog
R2V0IHRvIHRoZSBpbm5lciBBdGtUZXh0IG9iamVjdC4gKi8KLSAgICBBdGtPYmplY3QqIG9iamVj
dCA9IGdldFdlYkFyZWFPYmplY3Qod2ViVmlldyk7Ci0gICAgZ19hc3NlcnQob2JqZWN0KTsKLSAg
ICBvYmplY3QgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMCk7Ci0g
ICAgZ19hc3NlcnQob2JqZWN0KTsKLQotICAgIEF0a1RleHQqIHRleHRPYmplY3QgPSBBVEtfVEVY
VChvYmplY3QpOwotICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHRleHRPYmplY3QpKTsKLQotICAg
IGdpbnQgY2hhcmFjdGVyQ291bnQgPSBhdGtfdGV4dF9nZXRfY2hhcmFjdGVyX2NvdW50KHRleHRP
YmplY3QpOwotICAgIGdfYXNzZXJ0X2NtcGludChjaGFyYWN0ZXJDb3VudCwgPT0sIDI1KTsKLQot
ICAgIGdib29sZWFuIHJlc3VsdCA9IGF0a190ZXh0X3NldF9jYXJldF9vZmZzZXQodGV4dE9iamVj
dCwgY2hhcmFjdGVyQ291bnQgLSAxKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQocmVzdWx0LCA9PSwg
VFJVRSk7Ci0KLSAgICBnaW50IGNhcmV0T2Zmc2V0ID0gYXRrX3RleHRfZ2V0X2NhcmV0X29mZnNl
dCh0ZXh0T2JqZWN0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoY2FyZXRPZmZzZXQsID09LCBjaGFy
YWN0ZXJDb3VudCAtIDEpOwotCi0gICAgcmVzdWx0ID0gYXRrX3RleHRfc2V0X2NhcmV0X29mZnNl
dCh0ZXh0T2JqZWN0LCBjaGFyYWN0ZXJDb3VudCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHJlc3Vs
dCwgPT0sIFRSVUUpOwotCi0gICAgY2FyZXRPZmZzZXQgPSBhdGtfdGV4dF9nZXRfY2FyZXRfb2Zm
c2V0KHRleHRPYmplY3QpOwotICAgIGdfYXNzZXJ0X2NtcGludChjYXJldE9mZnNldCwgPT0sIGNo
YXJhY3RlckNvdW50KTsKLQotICAgIGdfb2JqZWN0X3VucmVmKG9iamVjdCk7Ci0gICAgZ19vYmpl
Y3RfdW5yZWYod2ViVmlldyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtDb21ib0Jv
eCgpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJr
aXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOwotICAg
IEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgODAwLCA2MDAgfTsKLSAgICBndGtf
d2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOwot
ICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LCBjb21ib0JveFNlbGVjdG9y
LCAwLCAwLCAwKTsKLQotICAgIEF0a09iamVjdCogb2JqZWN0ID0gZ2V0V2ViQXJlYU9iamVjdCh3
ZWJWaWV3KTsKLSAgICBnX2Fzc2VydChvYmplY3QpOwotCi0gICAgQXRrT2JqZWN0KiBmb3JtT2Jq
ZWN0ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDApOwotICAgIGdf
YXNzZXJ0KGZvcm1PYmplY3QpOwotCi0gICAgQXRrT2JqZWN0KiBjb21ib0JveCA9IGF0a19vYmpl
Y3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoZm9ybU9iamVjdCwgMCk7Ci0gICAgZ19hc3NlcnQoQVRL
X0lTX09CSkVDVChjb21ib0JveCkpOwotCi0gICAgQXRrT2JqZWN0KiBtZW51UG9wdXAgPSBhdGtf
b2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGNvbWJvQm94LCAwKTsKLSAgICBnX2Fzc2VydChB
VEtfSVNfT0JKRUNUKG1lbnVQb3B1cCkpOwotCi0gICAgQXRrT2JqZWN0KiBpdGVtMSA9IGF0a19v
YmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQobWVudVBvcHVwLCAwKTsKLSAgICBnX2Fzc2VydChB
VEtfSVNfT0JKRUNUKGl0ZW0xKSk7Ci0KLSAgICBBdGtPYmplY3QqIGl0ZW0yID0gYXRrX29iamVj
dF9yZWZfYWNjZXNzaWJsZV9jaGlsZChtZW51UG9wdXAsIDEpOwotICAgIGdfYXNzZXJ0KEFUS19J
U19PQkpFQ1QoaXRlbTIpKTsKLQotICAgIC8qIENoZWNrIHJvbGVzLiAqLwotICAgIGdfYXNzZXJ0
KGF0a19vYmplY3RfZ2V0X3JvbGUoY29tYm9Cb3gpID09IEFUS19ST0xFX0NPTUJPX0JPWCk7Ci0g
ICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShtZW51UG9wdXApID09IEFUS19ST0xFX01F
TlUpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoaXRlbTEpID09IEFUS19ST0xF
X01FTlVfSVRFTSk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShpdGVtMikgPT0g
QVRLX1JPTEVfTUVOVV9JVEVNKTsKLQotICAgIC8qIENoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBv
ZiB0aGUgQXRrU2VsZWN0aW9uIGludGVyZmFjZS4gKi8KLSAgICBnX2Fzc2VydChBVEtfSVNfU0VM
RUNUSU9OKGNvbWJvQm94KSk7Ci0gICAgQXRrU2VsZWN0aW9uKiBhdGtTZWxlY3Rpb24gPSBBVEtf
U0VMRUNUSU9OKGNvbWJvQm94KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX3NlbGVjdGlvbl9n
ZXRfc2VsZWN0aW9uX2NvdW50KGF0a1NlbGVjdGlvbiksID09LCAxKTsKLSAgICBnX2Fzc2VydChh
dGtfc2VsZWN0aW9uX2lzX2NoaWxkX3NlbGVjdGVkKGF0a1NlbGVjdGlvbiwgMCkpOwotICAgIGdf
YXNzZXJ0KCFhdGtfc2VsZWN0aW9uX2lzX2NoaWxkX3NlbGVjdGVkKGF0a1NlbGVjdGlvbiwgMSkp
OwotICAgIEF0a09iamVjdCogc2VsZWN0ZWRJdGVtID0gYXRrX3NlbGVjdGlvbl9yZWZfc2VsZWN0
aW9uKGF0a1NlbGVjdGlvbiwgMCk7Ci0gICAgZ19hc3NlcnQoc2VsZWN0ZWRJdGVtID09IGl0ZW0x
KTsKLSAgICBnX29iamVjdF91bnJlZihzZWxlY3RlZEl0ZW0pOwotCi0gICAgLyogQ2hlY2sgdGhh
dCB0aGUgbWVudSBwb3B1cCBoYXMgMCBsaW5rcyBhbmQgZG9lc24ndCBjcmFzaCBmcm9tIGNoZWNr
aW5nLiAqLwotICAgIGdpbnQgbkxpbmtzID0gYXRrX2h5cGVydGV4dF9nZXRfbl9saW5rcyhBVEtf
SFlQRVJURVhUKG1lbnVQb3B1cCkpOwotICAgIGdfYXNzZXJ0X2NtcGludChuTGlua3MsID09LCAw
KTsKLQotICAgIC8qIENoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIEF0a0FjdGlvbiBp
bnRlcmZhY2UuICovCi0gICAgZ19hc3NlcnQoQVRLX0lTX0FDVElPTihjb21ib0JveCkpOwotICAg
IEF0a0FjdGlvbiogYXRrQWN0aW9uID0gQVRLX0FDVElPTihjb21ib0JveCk7Ci0gICAgZ19hc3Nl
cnRfY21waW50KGF0a19hY3Rpb25fZ2V0X25fYWN0aW9ucyhhdGtBY3Rpb24pLCA9PSwgMSk7Ci0g
ICAgZ19hc3NlcnQoYXRrX2FjdGlvbl9kb19hY3Rpb24oYXRrQWN0aW9uLCAwKSk7Ci0KLSAgICBn
X2Fzc2VydChBVEtfSVNfQUNUSU9OKG1lbnVQb3B1cCkpOwotICAgIGF0a0FjdGlvbiA9IEFUS19B
Q1RJT04obWVudVBvcHVwKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2FjdGlvbl9nZXRfbl9h
Y3Rpb25zKGF0a0FjdGlvbiksID09LCAxKTsKLSAgICBnX2Fzc2VydChhdGtfYWN0aW9uX2RvX2Fj
dGlvbihhdGtBY3Rpb24sIDApKTsKLQotICAgIGdfYXNzZXJ0KEFUS19JU19BQ1RJT04oaXRlbTEp
KTsKLSAgICBhdGtBY3Rpb24gPSBBVEtfQUNUSU9OKGl0ZW0xKTsKLSAgICBnX2Fzc2VydF9jbXBp
bnQoYXRrX2FjdGlvbl9nZXRfbl9hY3Rpb25zKGF0a0FjdGlvbiksID09LCAxKTsKLSAgICBnX2Fz
c2VydChhdGtfYWN0aW9uX2RvX2FjdGlvbihhdGtBY3Rpb24sIDApKTsKLQotICAgIGdfYXNzZXJ0
KEFUS19JU19BQ1RJT04oaXRlbTIpKTsKLSAgICBhdGtBY3Rpb24gPSBBVEtfQUNUSU9OKGl0ZW0y
KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2FjdGlvbl9nZXRfbl9hY3Rpb25zKGF0a0FjdGlv
biksID09LCAxKTsKLSAgICBnX2Fzc2VydChhdGtfYWN0aW9uX2RvX2FjdGlvbihhdGtBY3Rpb24s
IDApKTsKLQotICAgIC8qIEFmdGVyIHNlbGVjdGluZyB0aGUgc2Vjb25kIGl0ZW0sIHNlbGVjdGlv
biBzaG91bGQgaGF2ZSBjaGFuZ2VkLiAqLwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfc2VsZWN0
aW9uX2dldF9zZWxlY3Rpb25fY291bnQoYXRrU2VsZWN0aW9uKSwgPT0sIDEpOwotICAgIGdfYXNz
ZXJ0KCFhdGtfc2VsZWN0aW9uX2lzX2NoaWxkX3NlbGVjdGVkKGF0a1NlbGVjdGlvbiwgMCkpOwot
ICAgIGdfYXNzZXJ0KGF0a19zZWxlY3Rpb25faXNfY2hpbGRfc2VsZWN0ZWQoYXRrU2VsZWN0aW9u
LCAxKSk7Ci0gICAgc2VsZWN0ZWRJdGVtID0gYXRrX3NlbGVjdGlvbl9yZWZfc2VsZWN0aW9uKGF0
a1NlbGVjdGlvbiwgMCk7Ci0gICAgZ19hc3NlcnQoc2VsZWN0ZWRJdGVtID09IGl0ZW0yKTsKLSAg
ICBnX29iamVjdF91bnJlZihzZWxlY3RlZEl0ZW0pOwotCi0gICAgZ19vYmplY3RfdW5yZWYoZm9y
bU9iamVjdCk7Ci0gICAgZ19vYmplY3RfdW5yZWYoY29tYm9Cb3gpOwotICAgIGdfb2JqZWN0X3Vu
cmVmKG1lbnVQb3B1cCk7Ci0gICAgZ19vYmplY3RfdW5yZWYoaXRlbTEpOwotICAgIGdfb2JqZWN0
X3VucmVmKGl0ZW0yKTsKLSAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKLX0KLQotc3RhdGlj
IGdjaGFyKiBsb2FkaW5nRXZlbnRzUmVzdWx0ID0gMDsKLQotc3RhdGljIHZvaWQgdXBkYXRlTG9h
ZGluZ0V2ZW50c1Jlc3VsdChjb25zdCBnY2hhciogc2lnbmFsTmFtZSkKLXsKLSAgICBnX2Fzc2Vy
dChzaWduYWxOYW1lKTsKLQotICAgIGdjaGFyKiBwcmV2aW91c1Jlc3VsdCA9IGxvYWRpbmdFdmVu
dHNSZXN1bHQ7Ci0gICAgbG9hZGluZ0V2ZW50c1Jlc3VsdCA9IGdfc3RyZHVwX3ByaW50ZigiJXN8
JXMiLCBwcmV2aW91c1Jlc3VsdCwgc2lnbmFsTmFtZSk7Ci0gICAgZ19mcmVlKHByZXZpb3VzUmVz
dWx0KTsKLX0KLQotc3RhdGljIGdib29sZWFuIGRvY3VtZW50TG9hZGluZ0V2ZW50Q2FsbGJhY2so
R1NpZ25hbEludm9jYXRpb25IaW50ICpzaWduYWxIaW50LCBndWludCBudW1QYXJhbVZhbHVlcywg
Y29uc3QgR1ZhbHVlICpwYXJhbVZhbHVlcywgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICAvLyBBdCBs
ZWFzdCB3ZSBzaG91bGQgcmVjZWl2ZSB0aGUgaW5zdGFuY2UgZW1pdHRpbmcgdGhlIHNpZ25hbC4K
LSAgICBpZiAobnVtUGFyYW1WYWx1ZXMgPCAxKQotICAgICAgICByZXR1cm4gVFJVRTsKLQotICAg
IEdTaWduYWxRdWVyeSBzaWduYWxfcXVlcnk7Ci0gICAgZ19zaWduYWxfcXVlcnkoc2lnbmFsSGlu
dC0+c2lnbmFsX2lkLCAmc2lnbmFsX3F1ZXJ5KTsKLQotICAgIHVwZGF0ZUxvYWRpbmdFdmVudHNS
ZXN1bHQoc2lnbmFsX3F1ZXJ5LnNpZ25hbF9uYW1lKTsKLSAgICByZXR1cm4gVFJVRTsKLX0KLQot
c3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0RvY3VtZW50TG9hZGluZ0V2ZW50cygpCi17Ci0gICAg
V2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdf
bmV3KCkpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOwotICAgIEd0a0FsbG9jYXRp
b24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgODAwLCA2MDAgfTsKLSAgICBndGtfd2lkZ2V0X3NpemVf
YWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOwotCi0gICAgLyogQ29u
bmVjdCBnbG9iYWxseSB0byBzZWUgdGhvc2UgZXZlbnRzIGR1cmluZyBhIGZ1dHVyZSBsb2FkLiAq
LwotICAgIGd1aW50IGxvYWRDb21wbGV0ZUxpc3RlbmVySWQgPSBhdGtfYWRkX2dsb2JhbF9ldmVu
dF9saXN0ZW5lcihkb2N1bWVudExvYWRpbmdFdmVudENhbGxiYWNrLCAiQVRLOkF0a0RvY3VtZW50
OmxvYWQtY29tcGxldGUiKTsKLQotICAgIC8qIERvIHRoZSBsb2FkLCBzbyB3ZSBjYW4gc2VlIHRo
b3NlIGV2ZW50cyBoYXBwZW5pbmcuICovCi0gICAgbG9hZGluZ0V2ZW50c1Jlc3VsdCA9IGdfc3Ry
ZHVwKCIiKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgY29udGVu
dHMsIDAsIDAsIDApOwotCi0gICAgLyogVHJpZ2dlciB0aGUgY3JlYXRpb24gb2YgdGhlIGZ1bGwg
YWNjZXNzaWJpbGl0eSBoaWVyYXJjaHkgYnkKLSAgICAgICBhc2tpbmcgZm9yIHRoZSB3ZWJBcmVh
IG9iamVjdCwgc28gd2UgY2FuIGxpc3RlbiB0byBldmVudHMuICovCi0gICAgZ2V0V2ViQXJlYU9i
amVjdCh3ZWJWaWV3KTsKLQotICAgIGF0a19yZW1vdmVfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGxv
YWRDb21wbGV0ZUxpc3RlbmVySWQpOwotCi0gICAgZ19hc3NlcnRfY21wc3RyKGxvYWRpbmdFdmVu
dHNSZXN1bHQsID09LCAifGxvYWQtY29tcGxldGUiKTsKLQotICAgIGdfZnJlZShsb2FkaW5nRXZl
bnRzUmVzdWx0KTsKLSAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKLX0KLQotc3RhdGljIHZv
aWQgdGVzdFdlYmtpdEF0a0VtYmVkZGVkT2JqZWN0cygpCi17Ci0gICAgV2ViS2l0V2ViVmlldyog
d2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdf
b2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOwotICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9
IHsgMCwgMCwgODAwLCA2MDAgfTsKLSAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJ
REdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0
cmluZyh3ZWJWaWV3LCBlbWJlZGRlZE9iamVjdHMsIDAsIDAsIDApOwotCi0gICAgQXRrT2JqZWN0
KiBvYmplY3QgPSBnZXRXZWJBcmVhT2JqZWN0KHdlYlZpZXcpOwotICAgIGdfYXNzZXJ0KG9iamVj
dCk7Ci0KLSAgICBBdGtUZXh0KiBwYXJhZ3JhcGgxID0gQVRLX1RFWFQoYXRrX29iamVjdF9yZWZf
YWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDApKTsKLSAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChw
YXJhZ3JhcGgxKSk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX0hZUEVSVEVYVChwYXJhZ3JhcGgxKSk7
Ci0KLSAgICBnaW50IG5MaW5rcyA9IGF0a19oeXBlcnRleHRfZ2V0X25fbGlua3MoQVRLX0hZUEVS
VEVYVChwYXJhZ3JhcGgxKSk7Ci0gICAgZ19hc3NlcnRfY21waW50KG5MaW5rcywgPT0sIDIpOwot
Ci0gICAgQXRrSHlwZXJsaW5rKiBoTGluayA9IGF0a19oeXBlcnRleHRfZ2V0X2xpbmsoQVRLX0hZ
UEVSVEVYVChwYXJhZ3JhcGgxKSwgMCk7Ci0gICAgZ19hc3NlcnQoQVRLX0hZUEVSTElOSyhoTGlu
aykpOwotICAgIEF0a09iamVjdCogaExpbmtPYmplY3QgPSBhdGtfaHlwZXJsaW5rX2dldF9vYmpl
Y3QoaExpbmssIDApOwotICAgIGdfYXNzZXJ0KEFUS19PQkpFQ1QoaExpbmtPYmplY3QpKTsKLSAg
ICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGhMaW5rT2JqZWN0KSA9PSBBVEtfUk9MRV9D
SEVDS19CT1gpOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9zdGFydF9p
bmRleChoTGluayksID09LCA4KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19n
ZXRfZW5kX2luZGV4KGhMaW5rKSwgPT0sIDkpOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlw
ZXJsaW5rX2dldF9uX2FuY2hvcnMoaExpbmspLCA9PSwgMSk7Ci0gICAgZ19hc3NlcnRfY21wc3Ry
KGF0a19oeXBlcmxpbmtfZ2V0X3VyaShoTGluaywgMCksID09LCAwKTsKLQotICAgIEF0a1RleHQq
IHBhcmFncmFwaDIgPSBBVEtfVEVYVChhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9i
amVjdCwgMSkpOwotICAgIGdfYXNzZXJ0KEFUS19JU19IWVBFUlRFWFQocGFyYWdyYXBoMikpOwot
Ci0gICAgbkxpbmtzID0gYXRrX2h5cGVydGV4dF9nZXRfbl9saW5rcyhBVEtfSFlQRVJURVhUKHBh
cmFncmFwaDIpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQobkxpbmtzLCA9PSwgMSk7Ci0KLSAgICBo
TGluayA9IGF0a19oeXBlcnRleHRfZ2V0X2xpbmsoQVRLX0hZUEVSVEVYVChwYXJhZ3JhcGgyKSwg
MCk7Ci0gICAgZ19hc3NlcnQoQVRLX0hZUEVSTElOSyhoTGluaykpOwotICAgIGhMaW5rT2JqZWN0
ID0gYXRrX2h5cGVybGlua19nZXRfb2JqZWN0KGhMaW5rLCAwKTsKLSAgICBnX2Fzc2VydChBVEtf
T0JKRUNUKGhMaW5rT2JqZWN0KSk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZSho
TGlua09iamVjdCkgPT0gQVRLX1JPTEVfQ09NQk9fQk9YKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
YXRrX2h5cGVybGlua19nZXRfc3RhcnRfaW5kZXgoaExpbmspLCA9PSwgOCk7Ci0gICAgZ19hc3Nl
cnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0X2VuZF9pbmRleChoTGluayksID09LCA5KTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfbl9hbmNob3JzKGhMaW5rKSwgPT0s
IDEpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihhdGtfaHlwZXJsaW5rX2dldF91cmkoaExpbmssIDAp
LCA9PSwgMCk7Ci0KLSAgICBBdGtUZXh0KiBwYXJhZ3JhcGgzID0gQVRLX1RFWFQoYXRrX29iamVj
dF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDIpKTsKLSAgICBnX2Fzc2VydChBVEtfSVNf
SFlQRVJURVhUKHBhcmFncmFwaDMpKTsKLQotICAgIG5MaW5rcyA9IGF0a19oeXBlcnRleHRfZ2V0
X25fbGlua3MoQVRLX0hZUEVSVEVYVChwYXJhZ3JhcGgzKSk7Ci0gICAgZ19hc3NlcnRfY21waW50
KG5MaW5rcywgPT0sIDEpOwotCi0gICAgaExpbmsgPSBhdGtfaHlwZXJ0ZXh0X2dldF9saW5rKEFU
S19IWVBFUlRFWFQocGFyYWdyYXBoMyksIDApOwotICAgIGdfYXNzZXJ0KEFUS19IWVBFUkxJTkso
aExpbmspKTsKLSAgICBoTGlua09iamVjdCA9IGF0a19oeXBlcmxpbmtfZ2V0X29iamVjdChoTGlu
aywgMCk7Ci0gICAgZ19hc3NlcnQoQVRLX09CSkVDVChoTGlua09iamVjdCkpOwotICAgIGdfYXNz
ZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoaExpbmtPYmplY3QpID09IEFUS19ST0xFX1BVU0hfQlVU
VE9OKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfc3RhcnRfaW5kZXgo
aExpbmspLCA9PSwgMCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0X2Vu
ZF9pbmRleChoTGluayksID09LCAxKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlu
a19nZXRfbl9hbmNob3JzKGhMaW5rKSwgPT0sIDEpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihhdGtf
aHlwZXJsaW5rX2dldF91cmkoaExpbmssIDApLCA9PSwgMCk7Ci0KLSAgICBnX29iamVjdF91bnJl
ZihwYXJhZ3JhcGgxKTsKLSAgICBnX29iamVjdF91bnJlZihwYXJhZ3JhcGgyKTsKLSAgICBnX29i
amVjdF91bnJlZihwYXJhZ3JhcGgzKTsKLSAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKLX0K
LQotc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0dldEhlYWRlcnNJblRhYmxlKCkKLXsKLSAgICBX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19u
ZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7Ci0gICAgR3RrQWxsb2NhdGlv
biBhbGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9OwotICAgIGd0a193aWRnZXRfc2l6ZV9h
bGxvY2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7Ci0gICAgd2Via2l0X3dl
Yl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIGNvbnRlbnRzSW5UYWJsZVdpdGhIZWFkZXJzLCAw
LCAwLCAwKTsKLQotICAgIEF0a09iamVjdCogYXhXZWJWaWV3ID0gZ2V0V2ViQXJlYU9iamVjdCh3
ZWJWaWV3KTsKLSAgICBnX2Fzc2VydChheFdlYlZpZXcpOwotCi0gICAgLyogQ2hlY2sgdGFibGUg
d2l0aCBib3RoIGNvbHVtbiBhbmQgcm93IGhlYWRlcnMuICovCi0gICAgQXRrT2JqZWN0KiB0YWJs
ZSA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoYXhXZWJWaWV3LCAwKTsKLSAgICBn
X2Fzc2VydCh0YWJsZSk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZSh0YWJsZSkg
PT0gQVRLX1JPTEVfVEFCTEUpOwotCi0gICAgQXRrT2JqZWN0KiBjb2xIZWFkZXIgPSBhdGtfdGFi
bGVfZ2V0X2NvbHVtbl9oZWFkZXIoQVRLX1RBQkxFKHRhYmxlKSwgMCk7Ci0gICAgZ19hc3NlcnQo
Y29sSGVhZGVyKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGNvbEhlYWRlcikg
PT0gQVRLX1JPTEVfVEFCTEVfQ0VMTCk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfaW5k
ZXhfaW5fcGFyZW50KGNvbEhlYWRlcikgPT0gMCk7Ci0KLSAgICBjb2xIZWFkZXIgPSBhdGtfdGFi
bGVfZ2V0X2NvbHVtbl9oZWFkZXIoQVRLX1RBQkxFKHRhYmxlKSwgMSk7Ci0gICAgZ19hc3NlcnQo
Y29sSGVhZGVyKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGNvbEhlYWRlcikg
PT0gQVRLX1JPTEVfVEFCTEVfQ0VMTCk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfaW5k
ZXhfaW5fcGFyZW50KGNvbEhlYWRlcikgPT0gMSk7Ci0KLSAgICBjb2xIZWFkZXIgPSBhdGtfdGFi
bGVfZ2V0X2NvbHVtbl9oZWFkZXIoQVRLX1RBQkxFKHRhYmxlKSwgMik7Ci0gICAgZ19hc3NlcnQo
Y29sSGVhZGVyKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGNvbEhlYWRlcikg
PT0gQVRLX1JPTEVfVEFCTEVfQ0VMTCk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfaW5k
ZXhfaW5fcGFyZW50KGNvbEhlYWRlcikgPT0gMik7Ci0KLSAgICBjb2xIZWFkZXIgPSBhdGtfdGFi
bGVfZ2V0X2NvbHVtbl9oZWFkZXIoQVRLX1RBQkxFKHRhYmxlKSwgMyk7Ci0gICAgZ19hc3NlcnQo
Y29sSGVhZGVyKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGNvbEhlYWRlcikg
PT0gQVRLX1JPTEVfVEFCTEVfQ0VMTCk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfaW5k
ZXhfaW5fcGFyZW50KGNvbEhlYWRlcikgPT0gMik7Ci0KLSAgICBBdGtPYmplY3QqIHJvd0hlYWRl
ciA9IGF0a190YWJsZV9nZXRfcm93X2hlYWRlcihBVEtfVEFCTEUodGFibGUpLCAwKTsKLSAgICBn
X2Fzc2VydChyb3dIZWFkZXIpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUocm93
SGVhZGVyKSA9PSBBVEtfUk9MRV9UQUJMRV9DRUxMKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0
X2dldF9pbmRleF9pbl9wYXJlbnQocm93SGVhZGVyKSA9PSAwKTsKLQotICAgIHJvd0hlYWRlciA9
IGF0a190YWJsZV9nZXRfcm93X2hlYWRlcihBVEtfVEFCTEUodGFibGUpLCAxKTsKLSAgICBnX2Fz
c2VydChyb3dIZWFkZXIpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUocm93SGVh
ZGVyKSA9PSBBVEtfUk9MRV9UQUJMRV9DRUxMKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dl
dF9pbmRleF9pbl9wYXJlbnQocm93SGVhZGVyKSA9PSAzKTsKLQotICAgIHJvd0hlYWRlciA9IGF0
a190YWJsZV9nZXRfcm93X2hlYWRlcihBVEtfVEFCTEUodGFibGUpLCAyKTsKLSAgICBnX2Fzc2Vy
dChyb3dIZWFkZXIpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUocm93SGVhZGVy
KSA9PSBBVEtfUk9MRV9UQUJMRV9DRUxMKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9p
bmRleF9pbl9wYXJlbnQocm93SGVhZGVyKSA9PSA3KTsKLQotICAgIHJvd0hlYWRlciA9IGF0a190
YWJsZV9nZXRfcm93X2hlYWRlcihBVEtfVEFCTEUodGFibGUpLCAzKTsKLSAgICBnX2Fzc2VydChy
b3dIZWFkZXIpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUocm93SGVhZGVyKSA9
PSBBVEtfUk9MRV9UQUJMRV9DRUxMKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9pbmRl
eF9pbl9wYXJlbnQocm93SGVhZGVyKSA9PSA3KTsKLQotICAgIGdfb2JqZWN0X3VucmVmKHRhYmxl
KTsKLQotICAgIC8qIENoZWNrIHRhYmxlIHdpdGggbm8gaGVhZGVycyBhdCBhbGwuICovCi0gICAg
dGFibGUgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGF4V2ViVmlldywgMSk7Ci0g
ICAgZ19hc3NlcnQodGFibGUpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUodGFi
bGUpID09IEFUS19ST0xFX1RBQkxFKTsKLQotICAgIGNvbEhlYWRlciA9IGF0a190YWJsZV9nZXRf
Y29sdW1uX2hlYWRlcihBVEtfVEFCTEUodGFibGUpLCAwKTsKLSAgICBnX2Fzc2VydChjb2xIZWFk
ZXIgPT0gMCk7Ci0KLSAgICBjb2xIZWFkZXIgPSBhdGtfdGFibGVfZ2V0X2NvbHVtbl9oZWFkZXIo
QVRLX1RBQkxFKHRhYmxlKSwgMSk7Ci0gICAgZ19hc3NlcnQoY29sSGVhZGVyID09IDApOwotCi0g
ICAgcm93SGVhZGVyID0gYXRrX3RhYmxlX2dldF9yb3dfaGVhZGVyKEFUS19UQUJMRSh0YWJsZSks
IDApOwotICAgIGdfYXNzZXJ0KHJvd0hlYWRlciA9PSAwKTsKLQotICAgIHJvd0hlYWRlciA9IGF0
a190YWJsZV9nZXRfcm93X2hlYWRlcihBVEtfVEFCTEUodGFibGUpLCAxKTsKLSAgICBnX2Fzc2Vy
dChyb3dIZWFkZXIgPT0gMCk7Ci0KLSAgICBnX29iamVjdF91bnJlZih0YWJsZSk7Ci0gICAgZ19v
YmplY3RfdW5yZWYod2ViVmlldyk7Ci19Ci0KLXN0YXRpYyBnaW50IGNvbXBBdGtBdHRyaWJ1dGUo
QXRrQXR0cmlidXRlKiBhMSwgQXRrQXR0cmlidXRlKiBhMikKLXsKLSAgICBnaW50IHN0cmNtcFZh
bCA9IGdfc3RyY21wMChhMS0+bmFtZSwgYTItPm5hbWUpOwotICAgIGlmIChzdHJjbXBWYWwpCi0g
ICAgICAgIHJldHVybiBzdHJjbXBWYWw7Ci0gICAgcmV0dXJuIGdfc3RyY21wMChhMS0+dmFsdWUs
IGEyLT52YWx1ZSk7Ci19Ci0KLXN0YXRpYyBnaW50IGNvbXBBdGtBdHRyaWJ1dGVOYW1lKEF0a0F0
dHJpYnV0ZSogYTEsIEF0a0F0dHJpYnV0ZSogYTIpCi17Ci0gICAgcmV0dXJuIGdfc3RyY21wMChh
MS0+bmFtZSwgYTItPm5hbWUpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gYXRrQXR0cmlidXRlU2V0
QXR0cmlidXRlTmFtZUhhc1ZhbHVlKEF0a0F0dHJpYnV0ZVNldCogc2V0LCBjb25zdCBnY2hhciog
YXR0cmlidXRlTmFtZSwgY29uc3QgZ2NoYXIqIHZhbHVlKQotewotICAgIEF0a0F0dHJpYnV0ZSBh
dDsKLSAgICBhdC5uYW1lID0gKGdjaGFyKilhdHRyaWJ1dGVOYW1lOwotICAgIEdTTGlzdCogZWxl
bWVudCA9IGdfc2xpc3RfZmluZF9jdXN0b20oc2V0LCAmYXQsIChHQ29tcGFyZUZ1bmMpY29tcEF0
a0F0dHJpYnV0ZU5hbWUpOwotICAgIHJldHVybiBlbGVtZW50ICYmICFnX3N0cmNtcDAoKChBdGtB
dHRyaWJ1dGUqKShlbGVtZW50LT5kYXRhKSktPnZhbHVlLCB2YWx1ZSk7Ci19Ci0KLXN0YXRpYyBn
Ym9vbGVhbiBhdGtBdHRyaWJ1dGVTZXRDb250YWluc0F0dHJpYnV0ZU5hbWUoQXRrQXR0cmlidXRl
U2V0KiBzZXQsIGNvbnN0IGdjaGFyKiBhdHRyaWJ1dGVOYW1lKQotewotICAgIEF0a0F0dHJpYnV0
ZSBhdDsKLSAgICBhdC5uYW1lID0gKGdjaGFyKilhdHRyaWJ1dGVOYW1lOwotICAgIHJldHVybiBn
X3NsaXN0X2ZpbmRfY3VzdG9tKHNldCwgJmF0LCAoR0NvbXBhcmVGdW5jKWNvbXBBdGtBdHRyaWJ1
dGVOYW1lKSA/IHRydWUgOiBmYWxzZTsKLX0KLQotc3RhdGljIGdib29sZWFuIGF0a0F0dHJpYnV0
ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKEF0a0F0dHJpYnV0ZVNldCogc2V0LCBBdGtUZXh0QXR0cmli
dXRlIGF0dHJpYnV0ZSwgY29uc3QgZ2NoYXIqIHZhbHVlKQotewotICAgIHJldHVybiBhdGtBdHRy
aWJ1dGVTZXRBdHRyaWJ1dGVOYW1lSGFzVmFsdWUoc2V0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0
X25hbWUoYXR0cmlidXRlKSwgdmFsdWUpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gYXRrQXR0cmli
dXRlU2V0QXJlRXF1YWwoQXRrQXR0cmlidXRlU2V0KiBzZXQxLCBBdGtBdHRyaWJ1dGVTZXQqIHNl
dDIpCi17Ci0gICAgaWYgKCFzZXQxKQotICAgICAgICByZXR1cm4gIXNldDI7Ci0KLSAgICBzZXQx
ID0gZ19zbGlzdF9zb3J0KHNldDEsIChHQ29tcGFyZUZ1bmMpY29tcEF0a0F0dHJpYnV0ZSk7Ci0g
ICAgc2V0MiA9IGdfc2xpc3Rfc29ydChzZXQyLCAoR0NvbXBhcmVGdW5jKWNvbXBBdGtBdHRyaWJ1
dGUpOwotCi0gICAgd2hpbGUgKHNldDEpIHsKLSAgICAgICAgaWYgKCFzZXQyIHx8IGNvbXBBdGtB
dHRyaWJ1dGUoc2V0MS0+ZGF0YSwgc2V0Mi0+ZGF0YSkpCi0gICAgICAgICAgICByZXR1cm4gRkFM
U0U7Ci0KLSAgICAgICAgc2V0MSA9IHNldDEtPm5leHQ7Ci0gICAgICAgIHNldDIgPSBzZXQyLT5u
ZXh0OwotICAgIH0KLQotICAgIHJldHVybiAoIXNldDIpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0
V2Via2l0QXRrVGV4dEF0dHJpYnV0ZXMoKQotewotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcg
PSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBnX29iamVjdF9y
ZWZfc2luayh3ZWJWaWV3KTsKLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAs
IDgwMCwgNjAwIH07Ci0gICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQod2Vi
VmlldyksICZhbGxvY2F0aW9uKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2Vi
VmlldywgdGV4dFdpdGhBdHRyaWJ1dGVzLCAwLCAwLCAwKTsKLQotICAgIEF0a09iamVjdCogb2Jq
ZWN0ID0gZ2V0V2ViQXJlYU9iamVjdCh3ZWJWaWV3KTsKLSAgICBnX2Fzc2VydChvYmplY3QpOwot
Ci0gICAgQXRrT2JqZWN0KiBjaGlsZCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQo
b2JqZWN0LCAwKTsKLSAgICBnX2Fzc2VydChjaGlsZCAmJiBBVEtfSVNfVEVYVChjaGlsZCkpOwot
ICAgIEF0a1RleHQqIGNoaWxkVGV4dCA9IEFUS19URVhUKGNoaWxkKTsKLQotICAgIGdpbnQgc3Rh
cnRPZmZzZXQ7Ci0gICAgZ2ludCBlbmRPZmZzZXQ7Ci0gICAgQXRrQXR0cmlidXRlU2V0KiBzZXQx
ID0gYXRrX3RleHRfZ2V0X3J1bl9hdHRyaWJ1dGVzKGNoaWxkVGV4dCwgMCwgJnN0YXJ0T2Zmc2V0
LCAmZW5kT2Zmc2V0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAwKTsK
LSAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMTIpOwotICAgIGdfYXNzZXJ0KGF0
a0F0dHJpYnV0ZVNldEFyZUVxdWFsKHNldDEsIDApKTsKLQotICAgIEF0a0F0dHJpYnV0ZVNldCog
c2V0MiA9IGF0a190ZXh0X2dldF9ydW5fYXR0cmlidXRlcyhjaGlsZFRleHQsIDE1LCAmc3RhcnRP
ZmZzZXQsICZlbmRPZmZzZXQpOwotICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0s
IDEyKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMTcpOwotICAgIGdfYXNz
ZXJ0KGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDIsIEFUS19URVhUX0FUVFJf
U1RZTEUsICJpdGFsaWMiKSk7Ci0KLSAgICBBdGtBdHRyaWJ1dGVTZXQqIHNldDMgPSBhdGtfdGV4
dF9nZXRfcnVuX2F0dHJpYnV0ZXMoY2hpbGRUZXh0LCAxNywgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zm
c2V0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAxNyk7Ci0gICAgZ19h
c3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0sIDQwKTsKLSAgICBnX2Fzc2VydChhdGtBdHRyaWJ1
dGVTZXRBdHRyaWJ1dGVIYXNWYWx1ZShzZXQzLCBBVEtfVEVYVF9BVFRSX1dFSUdIVCwgIjcwMCIp
KTsKLQotICAgIEF0a0F0dHJpYnV0ZVNldCogc2V0NCA9IGF0a190ZXh0X2dldF9kZWZhdWx0X2F0
dHJpYnV0ZXMoY2hpbGRUZXh0KTsKLSAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1
dGVIYXNWYWx1ZShzZXQ0LCBBVEtfVEVYVF9BVFRSX1NUWUxFLCAibm9ybWFsIikpOwotICAgIGdf
YXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDQsIEFUS19URVhUX0FU
VFJfSlVTVElGSUNBVElPTiwgInJpZ2h0IikpOwotICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNl
dEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDQsIEFUS19URVhUX0FUVFJfU0laRSwgIjE0IikpOwotICAg
IGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0MSk7Ci0gICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJl
ZShzZXQyKTsKLSAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHNldDMpOwotICAgIGF0a19hdHRy
aWJ1dGVfc2V0X2ZyZWUoc2V0NCk7Ci0KLSAgICBnX29iamVjdF91bnJlZihjaGlsZCk7Ci0gICAg
Y2hpbGQgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMSk7Ci0gICAg
Z19hc3NlcnQoY2hpbGQgJiYgQVRLX0lTX1RFWFQoY2hpbGQpKTsKLSAgICBjaGlsZFRleHQgPSBB
VEtfVEVYVChjaGlsZCk7Ci0KLSAgICBzZXQxID0gYXRrX3RleHRfZ2V0X2RlZmF1bHRfYXR0cmli
dXRlcyhjaGlsZFRleHQpOwotICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhh
c1ZhbHVlKHNldDEsIEFUS19URVhUX0FUVFJfRkFNSUxZX05BTUUsICJtb25vc3BhY2UiKSk7Ci0g
ICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlSGFzVmFsdWUoc2V0MSwgQVRLX1RF
WFRfQVRUUl9TVFlMRSwgIm5vcm1hbCIpKTsKLSAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRB
dHRyaWJ1dGVIYXNWYWx1ZShzZXQxLCBBVEtfVEVYVF9BVFRSX1NUUklLRVRIUk9VR0gsICJmYWxz
ZSIpKTsKLSAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVIYXNWYWx1ZShzZXQx
LCBBVEtfVEVYVF9BVFRSX1dFSUdIVCwgIjQwMCIpKTsKLSAgICBnX2Fzc2VydChhdGtBdHRyaWJ1
dGVTZXRBdHRyaWJ1dGVIYXNWYWx1ZShzZXQxLCBBVEtfVEVYVF9BVFRSX0ZHX0NPTE9SLCAiMTIw
LDEyMSwxMjIiKSk7Ci0KLSAgICBzZXQyID0gYXRrX3RleHRfZ2V0X3J1bl9hdHRyaWJ1dGVzKGNo
aWxkVGV4dCwgNDMsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7Ci0gICAgZ19hc3NlcnRfY21w
aW50KHN0YXJ0T2Zmc2V0LCA9PSwgNDMpOwotICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQs
ID09LCA4MCk7Ci0gICAgLyogQ2hlY2tzIHRoYXQgZGVmYXVsdCBhdHRyaWJ1dGVzIG9mIHRleHQg
YXJlIG5vdCByZXR1cm5lZCB3aGVuIGNhbGxlZCB0byBhdGtfdGV4dF9nZXRfcnVuX2F0dHJpYnV0
ZXMuICovCi0gICAgZ19hc3NlcnQoIWF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKHNl
dDIsIEFUS19URVhUX0FUVFJfRkdfQ09MT1IsICIxMjAsMTIxLDEyMiIpKTsKLSAgICBnX2Fzc2Vy
dChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVIYXNWYWx1ZShzZXQyLCBBVEtfVEVYVF9BVFRSX1VO
REVSTElORSwgInNpbmdsZSIpKTsKLSAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1
dGVIYXNWYWx1ZShzZXQyLCBBVEtfVEVYVF9BVFRSX0JHX0NPTE9SLCAiODAsODEsODIiKSk7Ci0g
ICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJlZShzZXQxKTsKLSAgICBhdGtfYXR0cmlidXRlX3NldF9m
cmVlKHNldDIpOwotICAgIGdfb2JqZWN0X3VucmVmKGNoaWxkKTsKLQotICAgIGNoaWxkID0gYXRr
X29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDIpOwotICAgIGdfYXNzZXJ0KGNo
aWxkICYmIEFUS19JU19URVhUKGNoaWxkKSk7Ci0gICAgY2hpbGRUZXh0ID0gQVRLX1RFWFQoY2hp
bGQpOwotCi0gICAgc2V0MSA9IGF0a190ZXh0X2dldF9ydW5fYXR0cmlidXRlcyhjaGlsZFRleHQs
IDAsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7Ci0gICAgc2V0MiA9IGF0a190ZXh0X2dldF9y
dW5fYXR0cmlidXRlcyhjaGlsZFRleHQsIDMsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7Ci0g
ICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0QXJlRXF1YWwoc2V0MSwgc2V0MikpOwotICAgIGF0
a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0Mik7Ci0KLSAgICBzZXQyID0gYXRrX3RleHRfZ2V0X3J1
bl9hdHRyaWJ1dGVzKGNoaWxkVGV4dCwgMSwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAg
ICBzZXQzID0gYXRrX3RleHRfZ2V0X3J1bl9hdHRyaWJ1dGVzKGNoaWxkVGV4dCwgNSwgJnN0YXJ0
T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBcmVFcXVh
bChzZXQyLCBzZXQzKSk7Ci0gICAgZ19hc3NlcnQoIWF0a0F0dHJpYnV0ZVNldEFyZUVxdWFsKHNl
dDEsIHNldDIpKTsKLSAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHNldDMpOwotCi0gICAgc2V0
MyA9IGF0a190ZXh0X2dldF9ydW5fYXR0cmlidXRlcyhjaGlsZFRleHQsIDIsICZzdGFydE9mZnNl
dCwgJmVuZE9mZnNldCk7Ci0gICAgc2V0NCA9IGF0a190ZXh0X2dldF9ydW5fYXR0cmlidXRlcyhj
aGlsZFRleHQsIDYsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7Ci0gICAgZ19hc3NlcnQoYXRr
QXR0cmlidXRlU2V0QXJlRXF1YWwoc2V0Mywgc2V0NCkpOwotICAgIGdfYXNzZXJ0KCFhdGtBdHRy
aWJ1dGVTZXRBcmVFcXVhbChzZXQxLCBzZXQzKSk7Ci0gICAgZ19hc3NlcnQoIWF0a0F0dHJpYnV0
ZVNldEFyZUVxdWFsKHNldDIsIHNldDMpKTsKLSAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHNl
dDEpOwotICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0Mik7Ci0gICAgYXRrX2F0dHJpYnV0
ZV9zZXRfZnJlZShzZXQzKTsKLSAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHNldDQpOwotICAg
IGdfb2JqZWN0X3VucmVmKGNoaWxkKTsKLQotICAgIGNoaWxkID0gYXRrX29iamVjdF9yZWZfYWNj
ZXNzaWJsZV9jaGlsZChvYmplY3QsIDMpOwotICAgIGdfYXNzZXJ0KGNoaWxkICYmIEFUS19JU19U
RVhUKGNoaWxkKSk7Ci0gICAgY2hpbGRUZXh0ID0gQVRLX1RFWFQoY2hpbGQpOwotICAgIHNldDEg
PSBhdGtfdGV4dF9nZXRfcnVuX2F0dHJpYnV0ZXMoY2hpbGRUZXh0LCAyNCwgJnN0YXJ0T2Zmc2V0
LCAmZW5kT2Zmc2V0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAyMSk7
Ci0gICAgZ19hc3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0sIDI1KTsKLSAgICBnX2Fzc2VydChh
dGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVIYXNWYWx1ZShzZXQxLCBBVEtfVEVYVF9BVFRSX1NUUklL
RVRIUk9VR0gsICJ0cnVlIikpOwotCi0gICAgc2V0MiA9IGF0a190ZXh0X2dldF9ydW5fYXR0cmli
dXRlcyhjaGlsZFRleHQsIDI1LCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOwotICAgIGdfYXNz
ZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDI1KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZW5k
T2Zmc2V0LCA9PSwgMzApOwotICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEFyZUVxdWFsKHNl
dDIsIDApKTsKLQotICAgIHNldDMgPSBhdGtfdGV4dF9nZXRfZGVmYXVsdF9hdHRyaWJ1dGVzKGNo
aWxkVGV4dCk7Ci0gICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlSGFzVmFsdWUo
c2V0MywgQVRLX1RFWFRfQVRUUl9KVVNUSUZJQ0FUSU9OLCAiY2VudGVyIikpOwotICAgIGF0a19h
dHRyaWJ1dGVfc2V0X2ZyZWUoc2V0MSk7Ci0gICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJlZShzZXQy
KTsKLSAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHNldDMpOwotCi0gICAgZ19vYmplY3RfdW5y
ZWYoY2hpbGQpOwotfQotCi1zdGF0aWMgZ2NoYXIqIHRleHRTZWxlY3Rpb25DaGFuZ2VkUmVzdWx0
ID0gMDsKLQotc3RhdGljIHZvaWQgdGV4dFNlbGVjdGlvbkNoYW5nZWRDYWxsYmFjayhBdGtUZXh0
KiB0ZXh0LCBncG9pbnRlciBkYXRhKQotewotICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHRleHQp
KTsKLQotICAgIGdfZnJlZSh0ZXh0U2VsZWN0aW9uQ2hhbmdlZFJlc3VsdCk7Ci0gICAgQXRrUm9s
ZSByb2xlID0gYXRrX29iamVjdF9nZXRfcm9sZShBVEtfT0JKRUNUKHRleHQpKTsKLSAgICBpbnQg
c3RhcnRPZmZzZXQgPSAwOwotICAgIGludCBlbmRPZmZzZXQgPSAwOwotICAgIGF0a190ZXh0X2dl
dF9zZWxlY3Rpb24oQVRLX1RFWFQodGV4dCksIDAsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7
Ci0gICAgdGV4dFNlbGVjdGlvbkNoYW5nZWRSZXN1bHQgPSBnX3N0cmR1cF9wcmludGYoInwlc3wl
ZHwlZHwiLCBhdGtfcm9sZV9nZXRfbmFtZShyb2xlKSwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7
Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtUZXh0U2VsZWN0aW9ucygpCi17Ci0gICAg
V2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdf
bmV3KCkpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOwotICAgIEd0a0FsbG9jYXRp
b24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgODAwLCA2MDAgfTsKLSAgICBndGtfd2lkZ2V0X3NpemVf
YWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOwotICAgIHdlYmtpdF93
ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LCB0ZXh0Rm9yU2VsZWN0aW9ucywgMCwgMCwgMCk7
Ci0KLSAgICBBdGtPYmplY3QqIG9iamVjdCA9IGdldFdlYkFyZWFPYmplY3Qod2ViVmlldyk7Ci0g
ICAgZ19hc3NlcnQob2JqZWN0KTsKLQotICAgIEF0a1RleHQqIHBhcmFncmFwaDEgPSBBVEtfVEVY
VChhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMCkpOwotICAgIGdfYXNz
ZXJ0KEFUS19JU19URVhUKHBhcmFncmFwaDEpKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHBhcmFn
cmFwaDEsICJ0ZXh0LXNlbGVjdGlvbi1jaGFuZ2VkIiwgR19DQUxMQkFDSyh0ZXh0U2VsZWN0aW9u
Q2hhbmdlZENhbGxiYWNrKSwgMCk7Ci0KLSAgICBBdGtUZXh0KiBwYXJhZ3JhcGgyID0gQVRLX1RF
WFQoYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDEpKTsKLSAgICBnX2Fz
c2VydChBVEtfSVNfVEVYVChwYXJhZ3JhcGgyKSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChwYXJh
Z3JhcGgyLCAidGV4dC1zZWxlY3Rpb24tY2hhbmdlZCIsIEdfQ0FMTEJBQ0sodGV4dFNlbGVjdGlv
bkNoYW5nZWRDYWxsYmFjayksIDApOwotCi0gICAgQXRrVGV4dCogbGluayA9IEFUS19URVhUKGF0
a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoQVRLX09CSkVDVChwYXJhZ3JhcGgyKSwgMCkp
OwotICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKGxpbmspKTsKLQotICAgIEF0a09iamVjdCogbGlz
dCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAyKTsKLSAgICBnX2Fz
c2VydChBVEtfT0JKRUNUKGxpc3QpKTsKLQotICAgIEF0a1RleHQqIGxpc3RJdGVtID0gQVRLX1RF
WFQoYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChsaXN0LCAwKSk7Ci0gICAgZ19hc3Nl
cnQoQVRLX0lTX1RFWFQobGlzdEl0ZW0pKTsKLQotICAgIC8qIEZpcnN0IHBhcmFncmFwaCAoc2lt
cGxlIHRleHQpLiAqLwotCi0gICAgLyogQmFzaWMgaW5pdGlhbCBjaGVja3MuICovCi0gICAgZ19h
c3NlcnRfY21waW50KGF0a190ZXh0X2dldF9uX3NlbGVjdGlvbnMocGFyYWdyYXBoMSksID09LCAw
KTsKLQotICAgIGdpbnQgc3RhcnRPZmZzZXQ7Ci0gICAgZ2ludCBlbmRPZmZzZXQ7Ci0gICAgZ2No
YXIqIHNlbGVjdGVkVGV4dCA9IGF0a190ZXh0X2dldF9zZWxlY3Rpb24ocGFyYWdyYXBoMSwgMCwg
JnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZz
ZXQsID09LCAwKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMCk7Ci0gICAg
Z19hc3NlcnRfY21wc3RyKHNlbGVjdGVkVGV4dCwgPT0sIDApOwotICAgIGdfZnJlZSAoc2VsZWN0
ZWRUZXh0KTsKLQotICAgIC8qIFRyeSByZW1vdmluZyBhIG5vbiBleGlzdGluZyAoeWV0KSBzZWxl
Y3Rpb24uICovCi0gICAgZ2Jvb2xlYW4gcmVzdWx0ID0gYXRrX3RleHRfcmVtb3ZlX3NlbGVjdGlv
bihwYXJhZ3JhcGgxLCAwKTsKLSAgICBnX2Fzc2VydCghcmVzdWx0KTsKLQotICAgIC8qIFRyeSBz
ZXR0aW5nIGEgMC1jaGFyIHNlbGVjdGlvbi4gKi8KLSAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRf
c2VsZWN0aW9uKHBhcmFncmFwaDEsIDAsIDUsIDUpOwotICAgIGdfYXNzZXJ0KHJlc3VsdCk7Ci0K
LSAgICAvKiBNYWtlIGEgc2VsZWN0aW9uIGFuZCB0ZXN0IGl0LiAqLwotICAgIHJlc3VsdCA9IGF0
a190ZXh0X3NldF9zZWxlY3Rpb24ocGFyYWdyYXBoMSwgMCwgNSwgMjUpOwotICAgIGdfYXNzZXJ0
KHJlc3VsdCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a190ZXh0X2dldF9uX3NlbGVjdGlvbnMo
cGFyYWdyYXBoMSksID09LCAxKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGV4dFNlbGVjdGlvbkNo
YW5nZWRSZXN1bHQsID09LCAifHBhcmFncmFwaHw1fDI1fCIpOwotICAgIHNlbGVjdGVkVGV4dCA9
IGF0a190ZXh0X2dldF9zZWxlY3Rpb24ocGFyYWdyYXBoMSwgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5k
T2Zmc2V0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCA1KTsKLSAgICBn
X2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMjUpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihz
ZWxlY3RlZFRleHQsID09LCAiYWdyYXBoIHdpdGggcGxhaW4gdGUiKTsKLSAgICBnX2ZyZWUgKHNl
bGVjdGVkVGV4dCk7Ci0KLSAgICAvKiBUcnkgcmVtb3ZpbmcgdGhlIHNlbGVjdGlvbiBmcm9tIG90
aGVyIEF0a1RleHQgb2JqZWN0IChzaG91bGQgZmFpbCkuICovCi0gICAgcmVzdWx0ID0gYXRrX3Rl
eHRfcmVtb3ZlX3NlbGVjdGlvbihwYXJhZ3JhcGgyLCAwKTsKLSAgICBnX2Fzc2VydCghcmVzdWx0
KTsKLQotICAgIC8qIFJlbW92ZSB0aGUgc2VsZWN0aW9uIGFuZCB0ZXN0IGV2ZXJ5dGhpbmcgYWdh
aW4uICovCi0gICAgcmVzdWx0ID0gYXRrX3RleHRfcmVtb3ZlX3NlbGVjdGlvbihwYXJhZ3JhcGgx
LCAwKTsKLSAgICBnX2Fzc2VydChyZXN1bHQpOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfdGV4
dF9nZXRfbl9zZWxlY3Rpb25zKHBhcmFncmFwaDEpLCA9PSwgMCk7Ci0gICAgc2VsZWN0ZWRUZXh0
ID0gYXRrX3RleHRfZ2V0X3NlbGVjdGlvbihwYXJhZ3JhcGgxLCAwLCAmc3RhcnRPZmZzZXQsICZl
bmRPZmZzZXQpOwotICAgIC8qIE5vdyBvZmZzZXRzIHNob3VsZCBiZSB0aGUgc2FtZSwgc2V0IHRv
IHRoZSBsYXN0IHBvc2l0aW9uIG9mIHRoZSBjYXJldC4gKi8KLSAgICBnX2Fzc2VydF9jbXBpbnQo
c3RhcnRPZmZzZXQsID09LCBlbmRPZmZzZXQpOwotICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9m
ZnNldCwgPT0sIDI1KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMjUpOwot
ICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZFRleHQsID09LCAwKTsKLSAgICBnX2ZyZWUgKHNl
bGVjdGVkVGV4dCk7Ci0KLSAgICAvKiBTZWNvbmQgcGFyYWdyYXBoICh0ZXh0ICsgbGluayArIHRl
eHQpLiAqLwotCi0gICAgLyogU2V0IGEgc2VsZWN0aW9uIHBhcnRpYWxseSBjb3ZlcmluZyB0aGUg
bGluayBhbmQgdGVzdCBpdC4gKi8KLSAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfc2VsZWN0aW9u
KHBhcmFncmFwaDIsIDAsIDcsIDIxKTsKLSAgICBnX2Fzc2VydChyZXN1bHQpOwotCi0gICAgLyog
VGVzdCB0aGUgcGFyYWdyYXBoIGZpcnN0LiAqLwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfdGV4
dF9nZXRfbl9zZWxlY3Rpb25zKHBhcmFncmFwaDIpLCA9PSwgMSk7Ci0gICAgc2VsZWN0ZWRUZXh0
ID0gYXRrX3RleHRfZ2V0X3NlbGVjdGlvbihwYXJhZ3JhcGgyLCAwLCAmc3RhcnRPZmZzZXQsICZl
bmRPZmZzZXQpOwotICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDcpOwotICAg
IGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCAyMSk7Ci0gICAgZ19hc3NlcnRfY21wc3Ry
KHNlbGVjdGVkVGV4dCwgPT0sICJyYXBoIHdpdGggYSBsaSIpOwotICAgIGdfZnJlZSAoc2VsZWN0
ZWRUZXh0KTsKLQotICAgIC8qIE5vdyB0ZXN0IGp1c3QgdGhlIGxpbmsuICovCi0gICAgZ19hc3Nl
cnRfY21waW50KGF0a190ZXh0X2dldF9uX3NlbGVjdGlvbnMobGluayksID09LCAxKTsKLSAgICBz
ZWxlY3RlZFRleHQgPSBhdGtfdGV4dF9nZXRfc2VsZWN0aW9uKGxpbmssIDAsICZzdGFydE9mZnNl
dCwgJmVuZE9mZnNldCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMCk7
Ci0gICAgZ19hc3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0sIDQpOwotICAgIGdfYXNzZXJ0X2Nt
cHN0cihzZWxlY3RlZFRleHQsID09LCAiYSBsaSIpOwotICAgIGdfZnJlZSAoc2VsZWN0ZWRUZXh0
KTsKLQotICAgIC8qIE1ha2UgYSBzZWxlY3Rpb24gYWZ0ZXIgdGhlIGxpbmsgYW5kIGNoZWNrIHNl
bGVjdGlvbiBmb3IgdGhlIHdob2xlIHBhcmFncmFwaC4gKi8KLSAgICByZXN1bHQgPSBhdGtfdGV4
dF9zZXRfc2VsZWN0aW9uKHBhcmFncmFwaDIsIDAsIDI3LCAzNyk7Ci0gICAgZ19hc3NlcnQocmVz
dWx0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX3RleHRfZ2V0X25fc2VsZWN0aW9ucyhwYXJh
Z3JhcGgyKSwgPT0sIDEpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0U2VsZWN0aW9uQ2hhbmdl
ZFJlc3VsdCwgPT0sICJ8cGFyYWdyYXBofDI3fDM3fCIpOwotICAgIHNlbGVjdGVkVGV4dCA9IGF0
a190ZXh0X2dldF9zZWxlY3Rpb24ocGFyYWdyYXBoMiwgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zm
c2V0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAyNyk7Ci0gICAgZ19h
c3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0sIDM3KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc2Vs
ZWN0ZWRUZXh0LCA9PSwgInRoZSBtaWRkbGUiKTsKLSAgICBnX2ZyZWUgKHNlbGVjdGVkVGV4dCk7
Ci0KLSAgICAvKiBSZW1vdmUgc2VsZWN0aW9ucyBhbmQgdGV4dCBldmVyeXRoaW5nIGFnYWluLiAq
LwotICAgIHJlc3VsdCA9IGF0a190ZXh0X3JlbW92ZV9zZWxlY3Rpb24ocGFyYWdyYXBoMiwgMCk7
Ci0gICAgZ19hc3NlcnQocmVzdWx0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX3RleHRfZ2V0
X25fc2VsZWN0aW9ucyhwYXJhZ3JhcGgyKSwgPT0sIDApOwotICAgIHNlbGVjdGVkVGV4dCA9IGF0
a190ZXh0X2dldF9zZWxlY3Rpb24ocGFyYWdyYXBoMiwgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zm
c2V0KTsKLSAgICAvKiBOb3cgb2Zmc2V0cyBzaG91bGQgYmUgdGhlIHNhbWUgKG5vIHNlbGVjdGlv
bikuICovCi0gICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgZW5kT2Zmc2V0KTsK
LSAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRUZXh0LCA9PSwgMCk7Ci0gICAgZ19mcmVlIChz
ZWxlY3RlZFRleHQpOwotCi0gICAgZ19hc3NlcnRfY21waW50KGF0a190ZXh0X2dldF9uX3NlbGVj
dGlvbnMobGluayksID09LCAwKTsKLSAgICBzZWxlY3RlZFRleHQgPSBhdGtfdGV4dF9nZXRfc2Vs
ZWN0aW9uKGxpbmssIDAsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7Ci0gICAgLyogTm93IG9m
ZnNldHMgc2hvdWxkIGJlIHRoZSBzYW1lIChubyBzZWxlY3Rpb24pLiAqLwotICAgIGdfYXNzZXJ0
X2NtcGludChzdGFydE9mZnNldCwgPT0sIGVuZE9mZnNldCk7Ci0gICAgZ19hc3NlcnRfY21wc3Ry
KHNlbGVjdGVkVGV4dCwgPT0sIDApOwotICAgIGdfZnJlZSAoc2VsZWN0ZWRUZXh0KTsKLQotICAg
IC8qIExpc3QgaXRlbSAqLwotCi0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShsaXN0
KSA9PSBBVEtfUk9MRV9MSVNUKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX29iamVjdF9nZXRf
bl9hY2Nlc3NpYmxlX2NoaWxkcmVuKGxpc3QpLCA9PSwgMSk7Ci0KLSAgICAvKiBJdCdzIG5vdCBw
b3NzaWJsZSB0byBzZWxlY3QgdGV4dCBpbnNpZGUgYW4gaXRlbSdzIG1hcmtlci4gKi8KLSAgICBy
ZXN1bHQgPSBhdGtfdGV4dF9zZXRfc2VsZWN0aW9uIChsaXN0SXRlbSwgMCwgMCwgOSk7Ci0gICAg
Z19hc3NlcnQoIXJlc3VsdCk7Ci0gICAgcmVzdWx0ID0gYXRrX3RleHRfc2V0X3NlbGVjdGlvbiAo
bGlzdEl0ZW0sIDAsIDksIDEpOwotICAgIGdfYXNzZXJ0KCFyZXN1bHQpOwotCi0gICAgLyogSXQg
c2hvdWxkIGJlIHBvc3NpYmxlIHRvIHNlbGVjdCB0ZXh0IGluc2lkZSBhbiBpdGVtJ3MgdGV4dC4g
Ki8KLSAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfc2VsZWN0aW9uIChsaXN0SXRlbSwgMCwgMywg
OSk7Ci0gICAgZ19hc3NlcnQocmVzdWx0KTsKLQotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfdGV4
dF9nZXRfbl9zZWxlY3Rpb25zKGxpc3RJdGVtKSwgPT0sIDEpOwotICAgIHNlbGVjdGVkVGV4dCA9
IGF0a190ZXh0X2dldF9zZWxlY3Rpb24obGlzdEl0ZW0sIDAsICZzdGFydE9mZnNldCwgJmVuZE9m
ZnNldCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMyk7Ci0gICAgZ19h
c3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0sIDkpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxl
Y3RlZFRleHQsID09LCAiQSBsaXN0Iik7Ci0gICAgZ19mcmVlIChzZWxlY3RlZFRleHQpOwotCi0g
ICAgZ19mcmVlKHRleHRTZWxlY3Rpb25DaGFuZ2VkUmVzdWx0KTsKLQotICAgIGdfb2JqZWN0X3Vu
cmVmKHBhcmFncmFwaDEpOwotICAgIGdfb2JqZWN0X3VucmVmKHBhcmFncmFwaDIpOwotICAgIGdf
b2JqZWN0X3VucmVmKGxpbmspOwotICAgIGdfb2JqZWN0X3VucmVmKGxpc3QpOwotICAgIGdfb2Jq
ZWN0X3VucmVmKGxpc3RJdGVtKTsKLSAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKLX0KLQot
c3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0dldEV4dGVudHMoKQotewotICAgIFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAg
ICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRp
b24gPSB7IDAsIDAsIDgwMCwgNjAwIH07Ci0gICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdU
S19XSURHRVQod2ViVmlldyksICZhbGxvY2F0aW9uKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9h
ZF9zdHJpbmcod2ViVmlldywgY2VudGVyZWRDb250ZW50cywgMCwgMCwgMCk7Ci0KLSAgICBBdGtP
YmplY3QqIG9iamVjdCA9IGdldFdlYkFyZWFPYmplY3Qod2ViVmlldyk7Ci0gICAgZ19hc3NlcnQo
b2JqZWN0KTsKLQotICAgIEF0a1RleHQqIHNob3J0VGV4dDEgPSBBVEtfVEVYVChhdGtfb2JqZWN0
X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMCkpOwotICAgIGdfYXNzZXJ0KEFUS19JU19U
RVhUKHNob3J0VGV4dDEpKTsKLSAgICBBdGtUZXh0KiBsb25nVGV4dCA9IEFUS19URVhUKGF0a19v
YmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAxKSk7Ci0gICAgZ19hc3NlcnQoQVRL
X0lTX1RFWFQobG9uZ1RleHQpKTsKLSAgICBBdGtUZXh0KiBzaG9ydFRleHQyID0gQVRLX1RFWFQo
YXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDIpKTsKLSAgICBnX2Fzc2Vy
dChBVEtfSVNfVEVYVChzaG9ydFRleHQyKSk7Ci0gICAgQXRrVGV4dCogbXVsdGlsaW5lVGV4dCA9
IEFUS19URVhUKGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAzKSk7Ci0g
ICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQobXVsdGlsaW5lVGV4dCkpOwotCi0gICAgLyogU3RhcnQg
d2l0aCB3aW5kb3cgZXh0ZW50cy4gKi8KLSAgICBBdGtUZXh0UmVjdGFuZ2xlIHNsaW5lX3dpbmRv
dzEsIHNsaW5lX3dpbmRvdzIsIGxsaW5lX3dpbmRvdywgbWxpbmVfd2luZG93OwotICAgIGF0a190
ZXh0X2dldF9yYW5nZV9leHRlbnRzKHNob3J0VGV4dDEsIDAsIDEwLCBBVEtfWFlfV0lORE9XLCAm
c2xpbmVfd2luZG93MSk7Ci0gICAgYXRrX3RleHRfZ2V0X3JhbmdlX2V4dGVudHMobG9uZ1RleHQs
IDAsIDQ0LCBBVEtfWFlfV0lORE9XLCAmbGxpbmVfd2luZG93KTsKLSAgICBhdGtfdGV4dF9nZXRf
cmFuZ2VfZXh0ZW50cyhzaG9ydFRleHQyLCAwLCAxMCwgQVRLX1hZX1dJTkRPVywgJnNsaW5lX3dp
bmRvdzIpOwotICAgIGF0a190ZXh0X2dldF9yYW5nZV9leHRlbnRzKG11bHRpbGluZVRleHQsIDAs
IDYwLCBBVEtfWFlfV0lORE9XLCAmbWxpbmVfd2luZG93KTsKLQotICAgIC8qIENoZWNrIHZlcnRp
Y2FsIGxpbmUgcG9zaXRpb24uICovCi0gICAgZ19hc3NlcnRfY21waW50KHNsaW5lX3dpbmRvdzEu
eSArIHNsaW5lX3dpbmRvdzEuaGVpZ2h0LCA8PSwgbGxpbmVfd2luZG93LnkpOwotICAgIGdfYXNz
ZXJ0X2NtcGludChsbGluZV93aW5kb3cueSArIGxsaW5lX3dpbmRvdy5oZWlnaHQgKyBzbGluZV93
aW5kb3cyLmhlaWdodCwgPD0sIG1saW5lX3dpbmRvdy55KTsKLQotICAgIC8qIFBhcmFncmFwaHMg
MSBhbmQgMyBoYXZlIGlkZW50aWNhbCB0ZXh0IGFuZCBhbGlnbm1lbnQuICovCi0gICAgZ19hc3Nl
cnRfY21waW50KHNsaW5lX3dpbmRvdzEueCwgPT0sIHNsaW5lX3dpbmRvdzIueCk7Ci0gICAgZ19h
c3NlcnRfY21waW50KHNsaW5lX3dpbmRvdzEud2lkdGgsID09LCBzbGluZV93aW5kb3cyLndpZHRo
KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoc2xpbmVfd2luZG93MS5oZWlnaHQsID09LCBzbGluZV93
aW5kb3cyLmhlaWdodCk7Ci0KLSAgICAvKiBBbGwgbGluZXMgc2hvdWxkIGJlIHRoZSBzYW1lIGhl
aWdodDsgbGluZSAyIGlzIHRoZSB3aWRlc3QgbGluZS4gKi8KLSAgICBnX2Fzc2VydF9jbXBpbnQo
c2xpbmVfd2luZG93MS5oZWlnaHQsID09LCBsbGluZV93aW5kb3cuaGVpZ2h0KTsKLSAgICBnX2Fz
c2VydF9jbXBpbnQoc2xpbmVfd2luZG93MS53aWR0aCwgPCwgbGxpbmVfd2luZG93LndpZHRoKTsK
LQotICAgIC8qIE1ha2Ugc3VyZSB0aGUgY2hhcmFjdGVyIGV4dGVudHMgaml2ZSB3aXRoIHRoZSBy
YW5nZSBleHRlbnRzLiAqLwotICAgIGdpbnQgeDsKLSAgICBnaW50IHk7Ci0gICAgZ2ludCB3aWR0
aDsKLSAgICBnaW50IGhlaWdodDsKLQotICAgIC8qIEZpcnN0IHBhcmFncmFwaCAoc2hvcnQgdGV4
dCkuICovCi0gICAgYXRrX3RleHRfZ2V0X2NoYXJhY3Rlcl9leHRlbnRzKHNob3J0VGV4dDEsIDAs
ICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0LCBBVEtfWFlfV0lORE9XKTsKLSAgICBnX2Fzc2VydF9j
bXBpbnQoeCwgPT0sIHNsaW5lX3dpbmRvdzEueCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHksID09
LCBzbGluZV93aW5kb3cxLnkpOwotICAgIGdfYXNzZXJ0X2NtcGludChoZWlnaHQsID09LCBzbGlu
ZV93aW5kb3cxLmhlaWdodCk7Ci0KLSAgICBhdGtfdGV4dF9nZXRfY2hhcmFjdGVyX2V4dGVudHMo
c2hvcnRUZXh0MSwgOSwgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQsIEFUS19YWV9XSU5ET1cpOwot
ICAgIGdfYXNzZXJ0X2NtcGludCh4LCA9PSwgc2xpbmVfd2luZG93MS54ICsgc2xpbmVfd2luZG93
MS53aWR0aCAtIHdpZHRoKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoeSwgPT0sIHNsaW5lX3dpbmRv
dzEueSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGhlaWdodCwgPT0sIHNsaW5lX3dpbmRvdzEuaGVp
Z2h0KTsKLQotICAgIC8qIFNlY29uZCBwYXJhZ3JhcGggKGxvbmcgdGV4dCkuICovCi0gICAgYXRr
X3RleHRfZ2V0X2NoYXJhY3Rlcl9leHRlbnRzKGxvbmdUZXh0LCAwLCAmeCwgJnksICZ3aWR0aCwg
JmhlaWdodCwgQVRLX1hZX1dJTkRPVyk7Ci0gICAgZ19hc3NlcnRfY21waW50KHgsID09LCBsbGlu
ZV93aW5kb3cueCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHksID09LCBsbGluZV93aW5kb3cueSk7
Ci0gICAgZ19hc3NlcnRfY21waW50KGhlaWdodCwgPT0sIGxsaW5lX3dpbmRvdy5oZWlnaHQpOwot
Ci0gICAgYXRrX3RleHRfZ2V0X2NoYXJhY3Rlcl9leHRlbnRzKGxvbmdUZXh0LCA0MywgJngsICZ5
LCAmd2lkdGgsICZoZWlnaHQsIEFUS19YWV9XSU5ET1cpOwotICAgIGdfYXNzZXJ0X2NtcGludCh4
LCA9PSwgbGxpbmVfd2luZG93LnggKyBsbGluZV93aW5kb3cud2lkdGggLSB3aWR0aCk7Ci0gICAg
Z19hc3NlcnRfY21waW50KHksID09LCBsbGluZV93aW5kb3cueSk7Ci0gICAgZ19hc3NlcnRfY21w
aW50KGhlaWdodCwgPT0sIGxsaW5lX3dpbmRvdy5oZWlnaHQpOwotCi0gICAgLyogVGhpcmQgcGFy
YWdyYXBoIChzaG9ydCB0ZXh0KS4gKi8KLSAgICBhdGtfdGV4dF9nZXRfY2hhcmFjdGVyX2V4dGVu
dHMoc2hvcnRUZXh0MiwgMCwgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQsIEFUS19YWV9XSU5ET1cp
OwotICAgIGdfYXNzZXJ0X2NtcGludCh4LCA9PSwgc2xpbmVfd2luZG93Mi54KTsKLSAgICBnX2Fz
c2VydF9jbXBpbnQoeSwgPT0sIHNsaW5lX3dpbmRvdzIueSk7Ci0gICAgZ19hc3NlcnRfY21waW50
KGhlaWdodCwgPT0sIHNsaW5lX3dpbmRvdzIuaGVpZ2h0KTsKLQotICAgIGF0a190ZXh0X2dldF9j
aGFyYWN0ZXJfZXh0ZW50cyhzaG9ydFRleHQyLCA5LCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCwg
QVRLX1hZX1dJTkRPVyk7Ci0gICAgZ19hc3NlcnRfY21waW50KHgsID09LCBzbGluZV93aW5kb3cy
LnggKyBzbGluZV93aW5kb3cyLndpZHRoIC0gd2lkdGgpOwotICAgIGdfYXNzZXJ0X2NtcGludCh5
LCA9PSwgc2xpbmVfd2luZG93Mi55KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoaGVpZ2h0LCA9PSwg
c2xpbmVfd2luZG93Mi5oZWlnaHQpOwotCi0gICAgLyogRm91ciBwYXJhZ3JhcGggKDMgbGluZXMg
bXVsdGktbGluZSB0ZXh0KS4gKi8KLSAgICBhdGtfdGV4dF9nZXRfY2hhcmFjdGVyX2V4dGVudHMo
bXVsdGlsaW5lVGV4dCwgMCwgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQsIEFUS19YWV9XSU5ET1cp
OwotICAgIGdfYXNzZXJ0X2NtcGludCh4LCA9PSwgbWxpbmVfd2luZG93LngpOwotICAgIGdfYXNz
ZXJ0X2NtcGludCh5LCA9PSwgbWxpbmVfd2luZG93LnkpOwotICAgIGdfYXNzZXJ0X2NtcGludCgz
ICogaGVpZ2h0LCA9PSwgbWxpbmVfd2luZG93LmhlaWdodCk7Ci0KLSAgICBhdGtfdGV4dF9nZXRf
Y2hhcmFjdGVyX2V4dGVudHMobXVsdGlsaW5lVGV4dCwgNTksICZ4LCAmeSwgJndpZHRoLCAmaGVp
Z2h0LCBBVEtfWFlfV0lORE9XKTsKLSAgICAvKiBMYXN0IGxpbmUgd29uJ3QgZmlsbCB0aGUgd2hv
bGUgd2lkdGggb2YgdGhlIHJlY3RhbmdsZS4gKi8KLSAgICBnX2Fzc2VydF9jbXBpbnQoeCwgPD0s
IG1saW5lX3dpbmRvdy54ICsgbWxpbmVfd2luZG93LndpZHRoIC0gd2lkdGgpOwotICAgIGdfYXNz
ZXJ0X2NtcGludCh5LCA9PSwgbWxpbmVfd2luZG93LnkgKyBtbGluZV93aW5kb3cuaGVpZ2h0IC0g
aGVpZ2h0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoaGVpZ2h0LCA8PSwgbWxpbmVfd2luZG93Lmhl
aWdodCk7Ci0KLSAgICAvKiBDaGVjayB0aGF0IGV4dGVudCBmb3IgYSBmdWxsIGxpbmUgYXJlIHRo
ZSBzYW1lIGhlaWdodCB0aGFuIGZvcgotICAgICAgIGEgcGFydGlhbCBzZWN0aW9uIG9mIHRoZSBz
YW1lIGxpbmUgKi8KLSAgICBnaW50IHN0YXJ0T2Zmc2V0OwotICAgIGdpbnQgZW5kT2Zmc2V0Owot
Ci0jaWYgIUFUS19DSEVDS19WRVJTSU9OKDIsIDEwLCAwKQotICAgIGdjaGFyKiB0ZXh0ID0gYXRr
X3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0KG11bHRpbGluZVRleHQsIDAsIEFUS19URVhUX0JPVU5E
QVJZX0xJTkVfU1RBUlQsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7Ci0gICAgZ19mcmVlKHRl
eHQpOwotI2Vsc2UKLSAgICBnY2hhciogdGV4dCA9IGF0a190ZXh0X2dldF9zdHJpbmdfYXRfb2Zm
c2V0KG11bHRpbGluZVRleHQsIDAsIEFUS19URVhUX0dSQU5VTEFSSVRZX0xJTkUsICZzdGFydE9m
ZnNldCwgJmVuZE9mZnNldCk7Ci0gICAgZ19mcmVlKHRleHQpOwotI2VuZGlmCi0KLSAgICBBdGtU
ZXh0UmVjdGFuZ2xlIGZsaW5lX3dpbmRvdzsKLSAgICBBdGtUZXh0UmVjdGFuZ2xlIGFmbGluZV93
aW5kb3c7Ci0gICAgYXRrX3RleHRfZ2V0X3JhbmdlX2V4dGVudHMobXVsdGlsaW5lVGV4dCwgc3Rh
cnRPZmZzZXQsIGVuZE9mZnNldCwgQVRLX1hZX1dJTkRPVywgJmZsaW5lX3dpbmRvdyk7Ci0gICAg
YXRrX3RleHRfZ2V0X3JhbmdlX2V4dGVudHMobXVsdGlsaW5lVGV4dCwgc3RhcnRPZmZzZXQsIGVu
ZE9mZnNldCAtIDEsIEFUS19YWV9XSU5ET1csICZhZmxpbmVfd2luZG93KTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoZmxpbmVfd2luZG93LngsID09LCBhZmxpbmVfd2luZG93LngpOwotICAgIGdfYXNz
ZXJ0X2NtcGludChmbGluZV93aW5kb3cueSwgPT0sIGFmbGluZV93aW5kb3cueSk7Ci0gICAgZ19h
c3NlcnRfY21waW50KGZsaW5lX3dpbmRvdy5oZWlnaHQsID09LCBhZmxpbmVfd2luZG93LmhlaWdo
dCk7Ci0KLSAgICBnX29iamVjdF91bnJlZihzaG9ydFRleHQxKTsKLSAgICBnX29iamVjdF91bnJl
ZihzaG9ydFRleHQyKTsKLSAgICBnX29iamVjdF91bnJlZihsb25nVGV4dCk7Ci0gICAgZ19vYmpl
Y3RfdW5yZWYobXVsdGlsaW5lVGV4dCk7Ci0gICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Ci19
Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtMYXlvdXRBbmREYXRhVGFibGVzKCkKLXsKLSAg
ICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmll
d19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7Ci0gICAgR3RrQWxsb2Nh
dGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9OwotICAgIGd0a193aWRnZXRfc2l6
ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7Ci0gICAgd2Via2l0
X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIGxheW91dEFuZERhdGFUYWJsZXMsIDAsIDAs
IDApOwotCi0gICAgQXRrT2JqZWN0KiBvYmplY3QgPSBnZXRXZWJBcmVhT2JqZWN0KHdlYlZpZXcp
OwotICAgIGdfYXNzZXJ0KG9iamVjdCk7Ci0KLSAgICAvKiBDaGVjayB0aGUgbm9uLWxheW91dCB0
YWJsZSAoZGF0YSB0YWJsZSkuICovCi0KLSAgICBBdGtPYmplY3QqIHRhYmxlMSA9IGF0a19vYmpl
Y3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAwKTsKLSAgICBnX2Fzc2VydChBVEtfSVNf
VEFCTEUodGFibGUxKSk7Ci0gICAgQXRrQXR0cmlidXRlU2V0KiBzZXQxID0gYXRrX29iamVjdF9n
ZXRfYXR0cmlidXRlcyh0YWJsZTEpOwotICAgIGdfYXNzZXJ0KHNldDEpOwotICAgIGdfYXNzZXJ0
KCFhdGtBdHRyaWJ1dGVTZXRDb250YWluc0F0dHJpYnV0ZU5hbWUoc2V0MSwgImxheW91dC1ndWVz
cyIpKTsKLSAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHNldDEpOwotCi0gICAgLyogQ2hlY2sg
dGhlIGxheW91dCB0YWJsZS4gKi8KLQotICAgIEF0a09iamVjdCogdGFibGUyID0gYXRrX29iamVj
dF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDEpOwotICAgIGdfYXNzZXJ0KEFUS19JU19U
QUJMRSh0YWJsZTIpKTsKLSAgICBBdGtBdHRyaWJ1dGVTZXQqIHNldDIgPSBhdGtfb2JqZWN0X2dl
dF9hdHRyaWJ1dGVzKHRhYmxlMik7Ci0gICAgZ19hc3NlcnQoc2V0Mik7Ci0gICAgZ19hc3NlcnQo
YXRrQXR0cmlidXRlU2V0Q29udGFpbnNBdHRyaWJ1dGVOYW1lKHNldDIsICJsYXlvdXQtZ3Vlc3Mi
KSk7Ci0gICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlTmFtZUhhc1ZhbHVlKHNl
dDIsICJsYXlvdXQtZ3Vlc3MiLCAidHJ1ZSIpKTsKLSAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVl
KHNldDIpOwotCi0gICAgZ19vYmplY3RfdW5yZWYodGFibGUxKTsKLSAgICBnX29iamVjdF91bnJl
Zih0YWJsZTIpOwotICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwotfQotCi1zdGF0aWMgdm9p
ZCB0ZXN0V2Via2l0QXRrTGlua3NXaXRoSW5saW5lSW1hZ2VzKCkKLXsKLSAgICBXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0g
ICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7Ci0gICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0
aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9OwotICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShH
VEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xv
YWRfc3RyaW5nKHdlYlZpZXcsIGxpbmtzV2l0aElubGluZUltYWdlcywgMCwgMCwgMCk7Ci0KLSAg
ICBBdGtPYmplY3QqIG9iamVjdCA9IGdldFdlYkFyZWFPYmplY3Qod2ViVmlldyk7Ci0gICAgZ19h
c3NlcnQob2JqZWN0KTsKLQotICAgIC8qIEZpcnN0IHBhcmFncmFwaCAobGluayBhdCB0aGUgYmVn
aW5uaW5nKS4gKi8KLSAgICBBdGtPYmplY3QqIHBhcmFncmFwaCA9IGF0a19vYmplY3RfcmVmX2Fj
Y2Vzc2libGVfY2hpbGQob2JqZWN0LCAwKTsKLSAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChwYXJh
Z3JhcGgpKTsKLSAgICBnaW50IHN0YXJ0T2Zmc2V0OwotICAgIGdpbnQgZW5kT2Zmc2V0OwotCi0j
aWYgIUFUS19DSEVDS19WRVJTSU9OKDIsIDEwLCAwKQotICAgIGdjaGFyKiB0ZXh0ID0gYXRrX3Rl
eHRfZ2V0X3RleHRfYXRfb2Zmc2V0KEFUS19URVhUKHBhcmFncmFwaCksIDAsIEFUS19URVhUX0JP
VU5EQVJZX0xJTkVfU1RBUlQsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7Ci0gICAgZ19hc3Nl
cnQodGV4dCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09LCAiZm9vIGJhciBiYXoiKTsK
LSAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAwKTsKLSAgICBnX2Fzc2VydF9j
bXBpbnQoZW5kT2Zmc2V0LCA9PSwgMTEpOwotICAgIGdfZnJlZSh0ZXh0KTsKLSNlbHNlCi0gICAg
Z2NoYXIqIHRleHQgPSBhdGtfdGV4dF9nZXRfc3RyaW5nX2F0X29mZnNldChBVEtfVEVYVChwYXJh
Z3JhcGgpLCAwLCBBVEtfVEVYVF9HUkFOVUxBUklUWV9MSU5FLCAmc3RhcnRPZmZzZXQsICZlbmRP
ZmZzZXQpOwotICAgIGdfYXNzZXJ0KHRleHQpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9
PSwgImZvbyBiYXIgYmF6Iik7Ci0gICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwg
MCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0sIDExKTsKLSAgICBnX2ZyZWUo
dGV4dCk7Ci0jZW5kaWYKLQotICAgIGdfb2JqZWN0X3VucmVmKHBhcmFncmFwaCk7Ci0KLSAgICAv
KiBTZWNvbmQgcGFyYWdyYXBoIChsaW5rIGluIHRoZSBtaWRkbGUpLiAqLwotICAgIHBhcmFncmFw
aCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAxKTsKLSAgICBnX2Fz
c2VydChBVEtfSVNfVEVYVChwYXJhZ3JhcGgpKTsKLQotI2lmICFBVEtfQ0hFQ0tfVkVSU0lPTigy
LCAxMCwgMCkKLSAgICB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0KEFUS19URVhU
KHBhcmFncmFwaCksIDAsIEFUS19URVhUX0JPVU5EQVJZX0xJTkVfU1RBUlQsICZzdGFydE9mZnNl
dCwgJmVuZE9mZnNldCk7Ci0gICAgZ19hc3NlcnQodGV4dCk7Ci0gICAgZ19hc3NlcnRfY21wc3Ry
KHRleHQsID09LCAiZm9vIGJhciBiYXoiKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZz
ZXQsID09LCAwKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMTEpOwotICAg
IGdfZnJlZSh0ZXh0KTsKLSNlbHNlCi0gICAgdGV4dCA9IGF0a190ZXh0X2dldF9zdHJpbmdfYXRf
b2Zmc2V0KEFUS19URVhUKHBhcmFncmFwaCksIDAsIEFUS19URVhUX0dSQU5VTEFSSVRZX0xJTkUs
ICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7Ci0gICAgZ19hc3NlcnQodGV4dCk7Ci0gICAgZ19h
c3NlcnRfY21wc3RyKHRleHQsID09LCAiZm9vIGJhciBiYXoiKTsKLSAgICBnX2Fzc2VydF9jbXBp
bnQoc3RhcnRPZmZzZXQsID09LCAwKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9
PSwgMTEpOwotICAgIGdfZnJlZSh0ZXh0KTsKLSNlbmRpZgotCi0gICAgZ19vYmplY3RfdW5yZWYo
cGFyYWdyYXBoKTsKLQotICAgIC8qIFRoaXJkIHBhcmFncmFwaCAobGluayBhdCB0aGUgZW5kKS4g
Ki8KLSAgICBwYXJhZ3JhcGggPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVj
dCwgMik7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQocGFyYWdyYXBoKSk7Ci0KLSNpZiAhQVRL
X0NIRUNLX1ZFUlNJT04oMiwgMTAsIDApCi0gICAgdGV4dCA9IGF0a190ZXh0X2dldF90ZXh0X2F0
X29mZnNldChBVEtfVEVYVChwYXJhZ3JhcGgpLCAwLCBBVEtfVEVYVF9CT1VOREFSWV9MSU5FX1NU
QVJULCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOwotICAgIGdfYXNzZXJ0KHRleHQpOwotICAg
IGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwgImZvbyBiYXIgYmF6Iik7Ci0gICAgZ19hc3NlcnRf
Y21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGVuZE9mZnNl
dCwgPT0sIDExKTsKLSAgICBnX2ZyZWUodGV4dCk7Ci0jZWxzZQotICAgIHRleHQgPSBhdGtfdGV4
dF9nZXRfc3RyaW5nX2F0X29mZnNldChBVEtfVEVYVChwYXJhZ3JhcGgpLCAwLCBBVEtfVEVYVF9H
UkFOVUxBUklUWV9MSU5FLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOwotICAgIGdfYXNzZXJ0
KHRleHQpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwgImZvbyBiYXIgYmF6Iik7Ci0g
ICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMCk7Ci0gICAgZ19hc3NlcnRfY21w
aW50KGVuZE9mZnNldCwgPT0sIDExKTsKLSAgICBnX2ZyZWUodGV4dCk7Ci0jZW5kaWYKLQotICAg
IGdfb2JqZWN0X3VucmVmKHBhcmFncmFwaCk7Ci0gICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7
Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtIeXBlcnRleHRBbmRIeXBlcmxpbmtzKCkK
LXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93
ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7Ci0gICAgR3Rr
QWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9OwotICAgIGd0a193aWRn
ZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7Ci0gICAg
d2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIGh5cGVydGV4dEFuZEh5cGVybGlu
a3MsIDAsIDAsIDApOwotCi0gICAgQXRrT2JqZWN0KiBvYmplY3QgPSBnZXRXZWJBcmVhT2JqZWN0
KHdlYlZpZXcpOwotICAgIGdfYXNzZXJ0KG9iamVjdCk7Ci0KLSAgICBBdGtPYmplY3QqIHBhcmFn
cmFwaDEgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMCk7Ci0gICAg
Z19hc3NlcnQoQVRLX09CSkVDVChwYXJhZ3JhcGgxKSk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVj
dF9nZXRfcm9sZShwYXJhZ3JhcGgxKSA9PSBBVEtfUk9MRV9QQVJBR1JBUEgpOwotICAgIGdfYXNz
ZXJ0KEFUS19JU19IWVBFUlRFWFQocGFyYWdyYXBoMSkpOwotCi0gICAgLyogTm8gbGlua3MgaW4g
dGhlIGZpcnN0IHBhcmFncmFwaC4gKi8KLSAgICBnaW50IG5MaW5rcyA9IGF0a19oeXBlcnRleHRf
Z2V0X25fbGlua3MoQVRLX0hZUEVSVEVYVChwYXJhZ3JhcGgxKSk7Ci0gICAgZ19hc3NlcnRfY21w
aW50KG5MaW5rcywgPT0sIDApOwotCi0gICAgQXRrT2JqZWN0KiBwYXJhZ3JhcGgyID0gYXRrX29i
amVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDEpOwotICAgIGdfYXNzZXJ0KEFUS19P
QkpFQ1QocGFyYWdyYXBoMikpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUocGFy
YWdyYXBoMikgPT0gQVRLX1JPTEVfUEFSQUdSQVBIKTsKLSAgICBnX2Fzc2VydChBVEtfSVNfSFlQ
RVJURVhUKHBhcmFncmFwaDIpKTsKLQotICAgIC8qIENoZWNrIGxpbmtzIGluIHRoZSBzZWNvbmQg
cGFyYWdyYXBoLgotICAgICAgIG5MaW5rcyA9IGF0a19oeXBlcnRleHRfZ2V0X25fbGlua3MoQVRL
X0hZUEVSVEVYVChwYXJhZ3JhcGgyKSk7Ci0gICAgICAgZ19hc3NlcnRfY21waW50KG5MaW5rcywg
PT0sIDMpOyAqLwotCi0gICAgQXRrSHlwZXJsaW5rKiBoTGluazEgPSBhdGtfaHlwZXJ0ZXh0X2dl
dF9saW5rKEFUS19IWVBFUlRFWFQocGFyYWdyYXBoMiksIDApOwotICAgIGdfYXNzZXJ0KEFUS19I
WVBFUkxJTksoaExpbmsxKSk7Ci0gICAgQXRrT2JqZWN0KiBoTGlua09iamVjdDEgPSBhdGtfaHlw
ZXJsaW5rX2dldF9vYmplY3QoaExpbmsxLCAwKTsKLSAgICBnX2Fzc2VydChBVEtfT0JKRUNUKGhM
aW5rT2JqZWN0MSkpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoaExpbmtPYmpl
Y3QxKSA9PSBBVEtfUk9MRV9MSU5LKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlu
a19nZXRfc3RhcnRfaW5kZXgoaExpbmsxKSwgPT0sIDApOwotICAgIGdfYXNzZXJ0X2NtcGludChh
dGtfaHlwZXJsaW5rX2dldF9lbmRfaW5kZXgoaExpbmsxKSwgPT0sIDYpOwotICAgIGdfYXNzZXJ0
X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9uX2FuY2hvcnMoaExpbmsxKSwgPT0sIDEpOwotICAg
IGdfYXNzZXJ0X2NtcHN0cihhdGtfaHlwZXJsaW5rX2dldF91cmkoaExpbmsxLCAwKSwgPT0sICJo
dHRwOi8vZm9vLmJhci5iYXovIik7Ci0KLSAgICBBdGtIeXBlcmxpbmsqIGhMaW5rMiA9IGF0a19o
eXBlcnRleHRfZ2V0X2xpbmsoQVRLX0hZUEVSVEVYVChwYXJhZ3JhcGgyKSwgMSk7Ci0gICAgZ19h
c3NlcnQoQVRLX0hZUEVSTElOSyhoTGluazIpKTsKLSAgICBBdGtPYmplY3QqIGhMaW5rT2JqZWN0
MiA9IGF0a19oeXBlcmxpbmtfZ2V0X29iamVjdChoTGluazIsIDApOwotICAgIGdfYXNzZXJ0KEFU
S19PQkpFQ1QoaExpbmtPYmplY3QyKSk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9s
ZShoTGlua09iamVjdDIpID09IEFUS19ST0xFX0xJTkspOwotICAgIGdfYXNzZXJ0X2NtcGludChh
dGtfaHlwZXJsaW5rX2dldF9zdGFydF9pbmRleChoTGluazIpLCA9PSwgMTIpOwotICAgIGdfYXNz
ZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9lbmRfaW5kZXgoaExpbmsyKSwgPT0sIDMyKTsK
LSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfbl9hbmNob3JzKGhMaW5rMiks
ID09LCAxKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoYXRrX2h5cGVybGlua19nZXRfdXJpKGhMaW5r
MiwgMCksID09LCAiaHR0cDovL2Jhci5iYXouZm9vLyIpOwotCi0gICAgQXRrSHlwZXJsaW5rKiBo
TGluazMgPSBhdGtfaHlwZXJ0ZXh0X2dldF9saW5rKEFUS19IWVBFUlRFWFQocGFyYWdyYXBoMiks
IDIpOwotICAgIGdfYXNzZXJ0KEFUS19IWVBFUkxJTksoaExpbmszKSk7Ci0gICAgQXRrT2JqZWN0
KiBoTGlua09iamVjdDMgPSBhdGtfaHlwZXJsaW5rX2dldF9vYmplY3QoaExpbmszLCAwKTsKLSAg
ICBnX2Fzc2VydChBVEtfT0JKRUNUKGhMaW5rT2JqZWN0MykpOwotICAgIGdfYXNzZXJ0KGF0a19v
YmplY3RfZ2V0X3JvbGUoaExpbmtPYmplY3QzKSA9PSBBVEtfUk9MRV9MSU5LKTsKLSAgICBnX2Fz
c2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfc3RhcnRfaW5kZXgoaExpbmszKSwgPT0sIDY1
KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfZW5kX2luZGV4KGhMaW5r
MyksID09LCA3NSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0X25fYW5j
aG9ycyhoTGluazMpLCA9PSwgMSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKGF0a19oeXBlcmxpbmtf
Z2V0X3VyaShoTGluazMsIDApLCA9PSwgImh0dHA6Ly9iYXouZm9vLmJhci8iKTsKLQotICAgIEF0
a09iamVjdCogbGlzdCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAy
KTsKLSAgICBnX2Fzc2VydChBVEtfT0JKRUNUKGxpc3QpKTsKLSAgICBnX2Fzc2VydChhdGtfb2Jq
ZWN0X2dldF9yb2xlKGxpc3QpID09IEFUS19ST0xFX0xJU1QpOwotICAgIGdfYXNzZXJ0X2NtcGlu
dChhdGtfb2JqZWN0X2dldF9uX2FjY2Vzc2libGVfY2hpbGRyZW4obGlzdCksID09LCAxKTsKLQot
ICAgIEF0a09iamVjdCogbGlzdEl0ZW0gPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxk
KGxpc3QsIDApOwotICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKGxpc3RJdGVtKSk7Ci0gICAgZ19h
c3NlcnQoQVRLX0lTX0hZUEVSVEVYVChsaXN0SXRlbSkpOwotCi0gICAgQXRrSHlwZXJsaW5rKiBo
TGlua0luTGlzdEl0ZW0gPSBhdGtfaHlwZXJ0ZXh0X2dldF9saW5rKEFUS19IWVBFUlRFWFQobGlz
dEl0ZW0pLCAwKTsKLSAgICBnX2Fzc2VydChBVEtfSFlQRVJMSU5LKGhMaW5rSW5MaXN0SXRlbSkp
OwotICAgIEF0a09iamVjdCogaExpbmtPYmplY3QgPSBhdGtfaHlwZXJsaW5rX2dldF9vYmplY3Qo
aExpbmtJbkxpc3RJdGVtLCAwKTsKLSAgICBnX2Fzc2VydChBVEtfT0JKRUNUKGhMaW5rT2JqZWN0
KSk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShoTGlua09iamVjdCkgPT0gQVRL
X1JPTEVfTElOSyk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0X3N0YXJ0
X2luZGV4KGhMaW5rSW5MaXN0SXRlbSksID09LCAyMCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0
a19oeXBlcmxpbmtfZ2V0X2VuZF9pbmRleChoTGlua0luTGlzdEl0ZW0pLCA9PSwgNDMpOwotICAg
IGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9uX2FuY2hvcnMoaExpbmtJbkxpc3RJ
dGVtKSwgPT0sIDEpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihhdGtfaHlwZXJsaW5rX2dldF91cmko
aExpbmtJbkxpc3RJdGVtLCAwKSwgPT0sICJodHRwOi8vZm9vLmJhci5iYXovIik7Ci0KLSAgICAv
KiBGaW5hbGx5IGNoZWNrIHRoZSBBdGtBY3Rpb24gaW50ZXJmYWNlIGZvciBhIGdpdmVuIEF0a0h5
cGVybGluay4gKi8KLSAgICBnX2Fzc2VydChBVEtfSVNfQUNUSU9OKGhMaW5rMSkpOwotICAgIGdf
YXNzZXJ0X2NtcGludChhdGtfYWN0aW9uX2dldF9uX2FjdGlvbnMoQVRLX0FDVElPTihoTGluazEp
KSwgPT0sIDEpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihhdGtfYWN0aW9uX2dldF9rZXliaW5kaW5n
KEFUS19BQ1RJT04oaExpbmsxKSwgMCksID09LCAiIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKGF0
a19hY3Rpb25fZ2V0X25hbWUoQVRLX0FDVElPTihoTGluazEpLCAwKSwgPT0sICJqdW1wIik7Ci0g
ICAgZ19hc3NlcnQoYXRrX2FjdGlvbl9kb19hY3Rpb24oQVRLX0FDVElPTihoTGluazEpLCAwKSk7
Ci0KLSAgICBnX29iamVjdF91bnJlZihwYXJhZ3JhcGgxKTsKLSAgICBnX29iamVjdF91bnJlZihw
YXJhZ3JhcGgyKTsKLSAgICBnX29iamVjdF91bnJlZihsaXN0KTsKLSAgICBnX29iamVjdF91bnJl
ZihsaXN0SXRlbSk7Ci0gICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Ci19Ci0KLXN0YXRpYyB2
b2lkIHRlc3RXZWJraXRBdGtMaXN0c09mSXRlbXMoKQotewotICAgIFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBnX29i
amVjdF9yZWZfc2luayh3ZWJWaWV3KTsKLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7
IDAsIDAsIDgwMCwgNjAwIH07Ci0gICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURH
RVQod2ViVmlldyksICZhbGxvY2F0aW9uKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJp
bmcod2ViVmlldywgbGlzdHNPZkl0ZW1zLCAwLCAwLCAwKTsKLQotICAgIEF0a09iamVjdCogb2Jq
ZWN0ID0gZ2V0V2ViQXJlYU9iamVjdCh3ZWJWaWV3KTsKLSAgICBnX2Fzc2VydChvYmplY3QpOwot
Ci0gICAgLyogVW5vcmRlcmVkIGxpc3QuICovCi0KLSAgICBBdGtPYmplY3QqIHVMaXN0ID0gYXRr
X29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDApOwotICAgIGdfYXNzZXJ0KEFU
S19PQkpFQ1QodUxpc3QpKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKHVMaXN0
KSA9PSBBVEtfUk9MRV9MSVNUKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX29iamVjdF9nZXRf
bl9hY2Nlc3NpYmxlX2NoaWxkcmVuKHVMaXN0KSwgPT0sIDMpOwotCi0gICAgQXRrT2JqZWN0KiBp
dGVtMSA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQodUxpc3QsIDApOwotICAgIEF0
a09iamVjdCogaXRlbTIgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKHVMaXN0LCAx
KTsKLSAgICBBdGtPYmplY3QqIGl0ZW0zID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGls
ZCh1TGlzdCwgMik7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX29iamVjdF9nZXRfbl9hY2Nl
c3NpYmxlX2NoaWxkcmVuKGl0ZW0xKSwgPT0sIDApOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtf
b2JqZWN0X2dldF9uX2FjY2Vzc2libGVfY2hpbGRyZW4oaXRlbTIpLCA9PSwgMSk7Ci0gICAgZ19h
c3NlcnRfY21waW50KGF0a19vYmplY3RfZ2V0X25fYWNjZXNzaWJsZV9jaGlsZHJlbihpdGVtMyks
ID09LCAxKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGl0ZW0xKTsKLSAgICBnX29iamVjdF91bnJl
ZihpdGVtMik7Ci0gICAgZ19vYmplY3RfdW5yZWYoaXRlbTMpOwotCi0gICAgLyogT3JkZXJlZCBs
aXN0LiAqLwotCi0gICAgQXRrT2JqZWN0KiBvTGlzdCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2li
bGVfY2hpbGQob2JqZWN0LCAxKTsKLSAgICBnX2Fzc2VydChBVEtfT0JKRUNUKG9MaXN0KSk7Ci0g
ICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShvTGlzdCkgPT0gQVRLX1JPTEVfTElTVCk7
Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a19vYmplY3RfZ2V0X25fYWNjZXNzaWJsZV9jaGlsZHJl
bihvTGlzdCksID09LCAzKTsKLQotICAgIGl0ZW0xID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJs
ZV9jaGlsZChvTGlzdCwgMCk7Ci0gICAgaXRlbTIgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxl
X2NoaWxkKG9MaXN0LCAxKTsKLSAgICBpdGVtMyA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVf
Y2hpbGQob0xpc3QsIDIpOwotCi0gICAgZ19hc3NlcnRfY21waW50KGF0a19vYmplY3RfZ2V0X25f
YWNjZXNzaWJsZV9jaGlsZHJlbihpdGVtMSksID09LCAwKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
YXRrX29iamVjdF9nZXRfbl9hY2Nlc3NpYmxlX2NoaWxkcmVuKGl0ZW0yKSwgPT0sIDEpOwotICAg
IGdfYXNzZXJ0X2NtcGludChhdGtfb2JqZWN0X2dldF9uX2FjY2Vzc2libGVfY2hpbGRyZW4oaXRl
bTMpLCA9PSwgMSk7Ci0KLSAgICBnX29iamVjdF91bnJlZihpdGVtMSk7Ci0gICAgZ19vYmplY3Rf
dW5yZWYoaXRlbTIpOwotICAgIGdfb2JqZWN0X3VucmVmKGl0ZW0zKTsKLQotICAgIGdfb2JqZWN0
X3VucmVmKHVMaXN0KTsKLSAgICBnX29iamVjdF91bnJlZihvTGlzdCk7Ci0gICAgZ19vYmplY3Rf
dW5yZWYod2ViVmlldyk7Ci19Ci0KLXR5cGVkZWYgZW51bSB7Ci0gIFRFWFRfQ0hBTkdFX0lOU0VS
VCA9IDEsCi0gIFRFWFRfQ0hBTkdFX1JFTU9WRSA9IDIKLX0gVGV4dENoYW5nZVR5cGU7Ci0KLXN0
YXRpYyBnY2hhciogdGV4dENoYW5nZWRSZXN1bHQgPSAwOwotCi1zdGF0aWMgdm9pZCB0ZXh0Q2hh
bmdlZENiKEF0a1RleHQqIHRleHQsIGdpbnQgcG9zLCBnaW50IGxlbiwgZ2NoYXIqIG1vZGlmaWVk
VGV4dCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBnX2Fzc2VydCh0ZXh0ICYmIEFUS19JU19PQkpF
Q1QodGV4dCkpOwotCi0gICAgVGV4dENoYW5nZVR5cGUgdHlwZSA9IEdQT0lOVEVSX1RPX0lOVChk
YXRhKTsKLSAgICBnX2ZyZWUodGV4dENoYW5nZWRSZXN1bHQpOwotICAgIHRleHRDaGFuZ2VkUmVz
dWx0ID0gZ19zdHJkdXBfcHJpbnRmKCJ8JWR8JWR8JWR8JyVzJ3wiLCB0eXBlLCBwb3MsIGxlbiwg
bW9kaWZpZWRUZXh0KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a1RleHRDaGFuZ2Vk
Tm90aWZpY2F0aW9ucygpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9X
RUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdl
YlZpZXcpOwotICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgODAwLCA2MDAg
fTsKLSAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFs
bG9jYXRpb24pOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LCBmb3Jt
V2l0aFRleHRJbnB1dHMsIDAsIDAsIDApOwotCi0gICAgQXRrT2JqZWN0KiBvYmplY3QgPSBnZXRX
ZWJBcmVhT2JqZWN0KHdlYlZpZXcpOwotICAgIGdfYXNzZXJ0KG9iamVjdCk7Ci0KLSAgICBBdGtP
YmplY3QqIGZvcm0gPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMCk7
Ci0gICAgZ19hc3NlcnQoQVRLX0lTX09CSkVDVChmb3JtKSk7Ci0KLSAgICAvKiBGaXJzdCBjaGVj
ayBub3JtYWwgdGV4dCBlbnRyaWVzLiAqLwotICAgIEF0a09iamVjdCogdGV4dEVudHJ5ID0gYXRr
X29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmb3JtLCAwKTsKLSAgICBnX2Fzc2VydChBVEtf
SVNfRURJVEFCTEVfVEVYVCh0ZXh0RW50cnkpKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dl
dF9yb2xlKEFUS19PQkpFQ1QodGV4dEVudHJ5KSkgPT0gQVRLX1JPTEVfRU5UUlkpOwotCi0gICAg
Z19zaWduYWxfY29ubmVjdCh0ZXh0RW50cnksICJ0ZXh0LWluc2VydCIsCi0gICAgICAgICAgICAg
ICAgICAgICBHX0NBTExCQUNLKHRleHRDaGFuZ2VkQ2IpLAotICAgICAgICAgICAgICAgICAgICAg
R0lOVF9UT19QT0lOVEVSKFRFWFRfQ0hBTkdFX0lOU0VSVCkpOwotICAgIGdfc2lnbmFsX2Nvbm5l
Y3QodGV4dEVudHJ5LCAidGV4dC1yZW1vdmUiLAotICAgICAgICAgICAgICAgICAgICAgR19DQUxM
QkFDSyh0ZXh0Q2hhbmdlZENiKSwKLSAgICAgICAgICAgICAgICAgICAgIEdJTlRfVE9fUE9JTlRF
UihURVhUX0NIQU5HRV9SRU1PVkUpKTsKLQotICAgIGdpbnQgcG9zID0gMDsKLSAgICBhdGtfZWRp
dGFibGVfdGV4dF9pbnNlcnRfdGV4dChBVEtfRURJVEFCTEVfVEVYVCh0ZXh0RW50cnkpLCAiZm9v
IGJhciBiYXoiLCAxMSwgJnBvcyk7Ci0gICAgY2hhciogdGV4dCA9IGF0a190ZXh0X2dldF90ZXh0
KEFUS19URVhUKHRleHRFbnRyeSksIDAsIC0xKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGV4dCwg
PT0sICJmb28gYmFyIGJheiIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0Q2hhbmdlZFJlc3Vs
dCwgPT0sICJ8MXwwfDExfCdmb28gYmFyIGJheid8Iik7Ci0gICAgZ19mcmVlKHRleHQpOwotCi0g
ICAgYXRrX2VkaXRhYmxlX3RleHRfZGVsZXRlX3RleHQoQVRLX0VESVRBQkxFX1RFWFQodGV4dEVu
dHJ5KSwgNCwgNyk7Ci0gICAgdGV4dCA9IGF0a190ZXh0X2dldF90ZXh0KEFUS19URVhUKHRleHRF
bnRyeSksIDAsIC0xKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGV4dCwgPT0sICJmb28gIGJheiIp
OwotICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0Q2hhbmdlZFJlc3VsdCwgPT0sICJ8Mnw0fDN8J2Jh
cid8Iik7Ci0gICAgZ19mcmVlKHRleHQpOwotCi0gICAgcG9zID0gNDsKLSAgICBhdGtfZWRpdGFi
bGVfdGV4dF9pbnNlcnRfdGV4dChBVEtfRURJVEFCTEVfVEVYVCh0ZXh0RW50cnkpLCAicXV4IHF1
dXggdG9iZWlnbm9yZWQiLCA4LCAmcG9zKTsKLSAgICB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHQo
QVRLX1RFWFQodGV4dEVudHJ5KSwgMCwgLTEpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9
PSwgImZvbyBxdXggcXV1eCBiYXoiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGV4dENoYW5nZWRS
ZXN1bHQsID09LCAifDF8NHw4fCdxdXggcXV1eCd8Iik7Ci0gICAgZ19mcmVlKHRleHQpOwotCi0g
ICAgLyogTm93IGNoZWNrIGZvciBwYXNzd29yZCBlbnRyaWVzLiAqLwotICAgIEF0a09iamVjdCog
cGFzc3dvcmRFbnRyeSA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoZm9ybSwgMSk7
Ci0gICAgZ19hc3NlcnQoQVRLX0lTX0VESVRBQkxFX1RFWFQocGFzc3dvcmRFbnRyeSkpOwotICAg
IGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoQVRLX09CSkVDVChwYXNzd29yZEVudHJ5KSkg
PT0gQVRLX1JPTEVfUEFTU1dPUkRfVEVYVCk7Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KHBhc3N3
b3JkRW50cnksICJ0ZXh0LWluc2VydCIsCi0gICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNL
KHRleHRDaGFuZ2VkQ2IpLAotICAgICAgICAgICAgICAgICAgICAgR0lOVF9UT19QT0lOVEVSKFRF
WFRfQ0hBTkdFX0lOU0VSVCkpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QocGFzc3dvcmRFbnRyeSwg
InRleHQtcmVtb3ZlIiwKLSAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sodGV4dENoYW5n
ZWRDYiksCi0gICAgICAgICAgICAgICAgICAgICBHSU5UX1RPX1BPSU5URVIoVEVYVF9DSEFOR0Vf
UkVNT1ZFKSk7Ci0KLSAgICBwb3MgPSAwOwotICAgIC8qIEEgc2luZ2xlIGJ1bGxldCBjaGFyYWN0
ZXIgaXMgJ1wzNDJcMjAwXDI0MicgKi8KLSAgICBhdGtfZWRpdGFibGVfdGV4dF9pbnNlcnRfdGV4
dChBVEtfRURJVEFCTEVfVEVYVChwYXNzd29yZEVudHJ5KSwgImZvb2JhciIsIDYsICZwb3MpOwot
ICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0Q2hhbmdlZFJlc3VsdCwgPT0sICJ8MXwwfDZ8J1wzNDJc
MjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0Mlwz
NDJcMjAwXDI0Mid8Iik7Ci0gICAgdGV4dCA9IGF0a190ZXh0X2dldF90ZXh0KEFUS19URVhUKHBh
c3N3b3JkRW50cnkpLCAwLCAtMSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09LCAiXDM0
MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQy
XDM0MlwyMDBcMjQyIik7Ci0gICAgZ19mcmVlKHRleHQpOwotCi0gICAgYXRrX2VkaXRhYmxlX3Rl
eHRfZGVsZXRlX3RleHQoQVRLX0VESVRBQkxFX1RFWFQocGFzc3dvcmRFbnRyeSksIDIsIDQpOwot
ICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0Q2hhbmdlZFJlc3VsdCwgPT0sICJ8MnwyfDJ8J1wzNDJc
MjAwXDI0MlwzNDJcMjAwXDI0Mid8Iik7Ci0KLSAgICB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHQo
QVRLX1RFWFQocGFzc3dvcmRFbnRyeSksIDAsIC0xKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGV4
dCwgPT0sICJcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDIi
KTsKLSAgICBnX2ZyZWUodGV4dCk7Ci0KLSAgICBwb3MgPSAzOwotICAgIGF0a19lZGl0YWJsZV90
ZXh0X2luc2VydF90ZXh0KEFUS19FRElUQUJMRV9URVhUKHBhc3N3b3JkRW50cnkpLCAicXV4IHRv
YmVpZ25vcmVkIiwgMywgJnBvcyk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRleHRDaGFuZ2VkUmVz
dWx0LCA9PSwgInwxfDN8M3wnXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyJ3wi
KTsKLQotICAgIHRleHQgPSBhdGtfdGV4dF9nZXRfdGV4dChBVEtfVEVYVChwYXNzd29yZEVudHJ5
KSwgMCwgLTEpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwgIlwzNDJcMjAwXDI0Mlwz
NDJcMjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0
MlwzNDJcMjAwXDI0MiIpOwotICAgIGdfZnJlZSh0ZXh0KTsKLQotICAgIGdfZnJlZSh0ZXh0Q2hh
bmdlZFJlc3VsdCk7Ci0KLSAgICBnX29iamVjdF91bnJlZihmb3JtKTsKLSAgICBnX29iamVjdF91
bnJlZih0ZXh0RW50cnkpOwotICAgIGdfb2JqZWN0X3VucmVmKHBhc3N3b3JkRW50cnkpOwotICAg
IGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRr
UGFyZW50Rm9yUm9vdE9iamVjdCgpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdF
QktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIEd0a0FsbG9jYXRpb24g
YWxsb2NhdGlvbiA9IHsgMCwgMCwgODAwLCA2MDAgfTsKLSAgICBndGtfd2lkZ2V0X3NpemVfYWxs
b2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOwotICAgIHdlYmtpdF93ZWJf
dmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LCBjb250ZW50cywgMCwgMCwgMCk7Ci0KLSAgICAvKiBX
ZSBuZWVkIGEgcGFyZW50IGNvbnRhaW5lciB3aWRnZXQgZm9yIHRoZSB3ZWJ2aWV3LiAqLwotICAg
IEd0a1dpZGdldCogcGFyZW50Q29udGFpbmVyID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19U
T1BMRVZFTCk7Ci0gICAgZ19vYmplY3RfcmVmX3NpbmsocGFyZW50Q29udGFpbmVyKTsKLSAgICBn
dGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHBhcmVudENvbnRhaW5lciksIEdUS19XSURH
RVQod2ViVmlldykpOwotCi0gICAgQXRrT2JqZWN0KiBheFBhcmVudCA9IGd0a193aWRnZXRfZ2V0
X2FjY2Vzc2libGUocGFyZW50Q29udGFpbmVyKTsKLSAgICBnX2Fzc2VydChBVEtfSVNfT0JKRUNU
KGF4UGFyZW50KSk7Ci0KLSAgICBBdGtPYmplY3QqIGF4Um9vdCA9IGd0a193aWRnZXRfZ2V0X2Fj
Y2Vzc2libGUoR1RLX1dJREdFVCh3ZWJWaWV3KSk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX09CSkVD
VChheFJvb3QpKTsKLQotICAgIC8qIFRoZSBjaGlsZCBmb3IgdGhlIHBhcmVudCBjb250YWluZXIn
cyBhY2Nlc3NpYmlsaXR5IG9iamVjdAotICAgICAgIHNob3VsZCBiZSB0aGUgYWNjZXNzaWJpbGl0
eSBvYmplY3QgZm9yIHRoZSBXZWJWaWV3J3Mgcm9vdC4gKi8KLSAgICBBdGtPYmplY3QqIGF4UGFy
ZW50Q2hpbGQgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGF4UGFyZW50LCAwKTsK
LSAgICBnX2Fzc2VydChheFBhcmVudENoaWxkID09IGF4Um9vdCk7Ci0KLSAgICAvKiBCb3R0b20t
dXAgbmF2aWdhdGlvbiBzaG91bGQgbWF0Y2ggdG9wLWRvd24gb25lLiAqLwotICAgIGdfYXNzZXJ0
KGF0a19vYmplY3RfZ2V0X3BhcmVudChheFBhcmVudENoaWxkKSA9PSBheFBhcmVudCk7Ci0KLSAg
ICBnX29iamVjdF91bnJlZihheFBhcmVudENoaWxkKTsKLSAgICBnX29iamVjdF91bnJlZihwYXJl
bnRDb250YWluZXIpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrU2V0UGFyZW50Rm9y
T2JqZWN0KCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVX
KHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0g
eyAwLCAwLCA4MDAsIDYwMCB9OwotICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lE
R0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3Ry
aW5nKHdlYlZpZXcsIGNvbnRlbnRzLCAwLCAwLCAwKTsKLQotICAgIC8qIFB1dCB0aGUgd2Vidmll
dyBpbiBhIHBhcmVudCBjb250YWluZXIgd2lkZ2V0IHRvIGNoZWNrIHRoYXQgdGhlCi0gICAgICAg
bm9ybWFsIGJlaGF2aW91ciBrZWVwcyB3b3JraW5nIGFzIGV4cGVjdGVkIGJ5IGRlZmF1bHQuICov
Ci0gICAgR3RrV2lkZ2V0KiBwYXJlbnRDb250YWluZXIgPSBndGtfd2luZG93X25ldyhHVEtfV0lO
RE9XX1RPUExFVkVMKTsKLSAgICBnX29iamVjdF9yZWZfc2luayhwYXJlbnRDb250YWluZXIpOwot
ICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIocGFyZW50Q29udGFpbmVyKSwgR1RL
X1dJREdFVCh3ZWJWaWV3KSk7Ci0KLSAgICBBdGtPYmplY3QqIGF4Um9vdCA9IGd0a193aWRnZXRf
Z2V0X2FjY2Vzc2libGUoR1RLX1dJREdFVCh3ZWJWaWV3KSk7Ci0gICAgZ19hc3NlcnQoQVRLX0lT
X09CSkVDVChheFJvb3QpKTsKLQotICAgIEF0a09iamVjdCogYXhQYXJlbnQgPSBndGtfd2lkZ2V0
X2dldF9hY2Nlc3NpYmxlKHBhcmVudENvbnRhaW5lcik7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX09C
SkVDVChheFBhcmVudCkpOwotCi0gICAgLyogVGhlIHBhcmVudCBvZiB0aGUgcm9vdCBvYmplY3Qg
aXMgdGhlIHBhcmVudCBjb250YWluZXIncyBhMTF5IG9iamVjdC4gKi8KLSAgICBnX2Fzc2VydChh
dGtfb2JqZWN0X2dldF9wYXJlbnQoYXhSb290KSA9PSBheFBhcmVudCk7Ci0KLSAgICAvKiBXZSBu
b3cgbmVlZCB0byB1c2Ugc29tZXRoaW5nIGFzIGEgYW4gYWx0ZXJuYXRpdmUgcGFyZW50IGZvcgot
ICAgICAgIHRoZSBhMTF5IG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIHJvb3Qgb2YgdGhlIERP
TSB0cmVlLiAqLwotICAgIEd0a1dpZGdldCogYWx0ZXJuYXRpdmVQYXJlbnQgPSBndGtfYnV0dG9u
X25ldygpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKGFsdGVybmF0aXZlUGFyZW50KTsKLQotICAg
IEF0a09iamVjdCogYXhBbHRlcm5hdGl2ZVBhcmVudCA9IGd0a193aWRnZXRfZ2V0X2FjY2Vzc2li
bGUoYWx0ZXJuYXRpdmVQYXJlbnQpOwotICAgIGdfYXNzZXJ0KEFUS19JU19PQkpFQ1QoYXhBbHRl
cm5hdGl2ZVBhcmVudCkpOwotCi0gICAgLyogTWFudWFsbHkgc2V0IHRoZSBhbHRlcm5hdGl2ZSBw
YXJlbnQncyBhY2Nlc3NpYmlsaXR5IG9iamVjdCBhcwotICAgICAgIHRoZSBwYXJlbnQgZm9yIHRo
ZSBXZWJLaXQgYWNjZXNzaWJpbGl0eSByb290IG9iamVjdCBhbmQgY2hlY2suICovCi0gICAgYXRr
X29iamVjdF9zZXRfcGFyZW50KGF4Um9vdCwgYXhBbHRlcm5hdGl2ZVBhcmVudCk7Ci0gICAgZ19h
c3NlcnQoYXRrX29iamVjdF9nZXRfcGFyZW50KGF4Um9vdCkgPT0gYXhBbHRlcm5hdGl2ZVBhcmVu
dCk7Ci0KLSAgICBnX29iamVjdF91bnJlZihhbHRlcm5hdGl2ZVBhcmVudCk7Ci0gICAgZ19vYmpl
Y3RfdW5yZWYocGFyZW50Q29udGFpbmVyKTsKLX0KLQotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8y
Ci1zdGF0aWMgdm9pZCBpbml0aWFsaXplVGVzdGluZ0ZyYW1ld29yayhpbnQgYXJnYywgY2hhcioq
IGFyZ3YpCi17Ci0gICAgLyogRW5zdXJlIEdBSUwgaXMgdGhlIG9ubHkgbW9kdWxlIGxvYWRlZC4g
Ki8KLSAgICBnX3NldGVudigiR1RLX01PRFVMRVMiLCAiZ2FpbCIsIFRSVUUpOwotCi0gICAgLyog
Rm9sbG93aW5nIGxpbmVzIHdlcmUgdGFrZW4gZnJvbSBndGtfdGVzdF9pbml0KCkuICovCi0gICAg
Z190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCAwKTsKLSAgICBndGtfZGlzYWJsZV9zZXRsb2NhbGUo
KTsKLSAgICBzZXRsb2NhbGUoTENfQUxMLCAiQyIpOwotCi0gICAgZ3RrX2luaXQoJmFyZ2MsICZh
cmd2KTsKLX0KLSNlbmRpZgotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCi17Ci0j
aWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSAgICAvKiBXZSBjYW4ndCBqdXN0IGNhbGwgdG8gZ3Rr
X3Rlc3RfaW5pdCgpIGluIHRoaXMgY2FzZSBiZWNhdXNlIGl0cwotICAgICAgIGltcGxlbWVudGF0
aW9uIG1ha2VzIHN1cmUgdGhhdCBubyBHVEsrIG1vZHVsZSB3aWxsIGJlIGxvYWRlZCwgYW5kCi0g
ICAgICAgd2Ugd2lsbCBuZWVkIHRvIGxvYWQgR0FJTCBmb3IgdGVzdHMgdGhhdCBuZWVkIHRvIHVz
ZSBBdGtPYmplY3RzCi0gICAgICAgZnJvbSBub24tV2ViS2l0IEd0a1dpZGdldHMgKGUuZyBwYXJl
bnRGb3JSb290T2JqZWN0KS4qLwotICAgIGluaXRpYWxpemVUZXN0aW5nRnJhbWV3b3JrKGFyZ2Ms
IGFyZ3YpOwotI2Vsc2UKLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0j
ZW5kaWYKLQotICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7
Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9jYXJldE9mZnNldHMiLCB0ZXN0V2Vi
a2l0QXRrQ2FyZXRPZmZzZXRzKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2Nh
cmV0T2Zmc2V0c0FuZEV4dHJhbm91c1doaXRlU3BhY2VzIiwgdGVzdFdlYmtpdEF0a0NhcmV0T2Zm
c2V0c0FuZEV4dHJhbm91c1doaXRlU3BhY2VzKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJr
aXQvYXRrL2NvbWJvQm94IiwgdGVzdFdlYmtpdEF0a0NvbWJvQm94KTsKLSAgICBnX3Rlc3RfYWRk
X2Z1bmMoIi93ZWJraXQvYXRrL2RvY3VtZW50TG9hZGluZ0V2ZW50cyIsIHRlc3RXZWJraXRBdGtE
b2N1bWVudExvYWRpbmdFdmVudHMpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsv
ZW1iZWRkZWRPYmplY3RzIiwgdGVzdFdlYmtpdEF0a0VtYmVkZGVkT2JqZWN0cyk7Ci0gICAgZ190
ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9nZXRIZWFkZXJzSW5UYWJsZSIsIHRlc3RXZWJraXRB
dGtHZXRIZWFkZXJzSW5UYWJsZSk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay90
ZXh0QXR0cmlidXRlcyIsIHRlc3RXZWJraXRBdGtUZXh0QXR0cmlidXRlcyk7Ci0gICAgZ190ZXN0
X2FkZF9mdW5jKCIvd2Via2l0L2F0ay90ZXh0U2VsZWN0aW9ucyIsIHRlc3RXZWJraXRBdGtUZXh0
U2VsZWN0aW9ucyk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9nZXRFeHRlbnRz
IiwgdGVzdFdlYmtpdEF0a0dldEV4dGVudHMpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtp
dC9hdGsvaHlwZXJ0ZXh0QW5kSHlwZXJsaW5rcyIsIHRlc3RXZWJraXRBdGtIeXBlcnRleHRBbmRI
eXBlcmxpbmtzKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2xheW91dEFuZERh
dGFUYWJsZXMiLCB0ZXN0V2Via2l0QXRrTGF5b3V0QW5kRGF0YVRhYmxlcyk7Ci0gICAgZ190ZXN0
X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9saW5rc1dpdGhJbmxpbmVJbWFnZXMiLCB0ZXN0V2Via2l0
QXRrTGlua3NXaXRoSW5saW5lSW1hZ2VzKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQv
YXRrL2xpc3RzT2ZJdGVtcyIsIHRlc3RXZWJraXRBdGtMaXN0c09mSXRlbXMpOwotICAgIGdfdGVz
dF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvdGV4dENoYW5nZWROb3RpZmljYXRpb25zIiwgdGVzdFdl
YmtpdEF0a1RleHRDaGFuZ2VkTm90aWZpY2F0aW9ucyk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIv
d2Via2l0L2F0ay9wYXJlbnRGb3JSb290T2JqZWN0IiwgdGVzdFdlYmtpdEF0a1BhcmVudEZvclJv
b3RPYmplY3QpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvc2V0UGFyZW50Rm9y
T2JqZWN0IiwgdGVzdFdlYmtpdEF0a1NldFBhcmVudEZvck9iamVjdCk7Ci0gICAgcmV0dXJuIGdf
dGVzdF9ydW4gKCk7Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rl
c3RhdGtyb2xlcy5jIGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGF0a3JvbGVzLmMKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4ODE3Y2YuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdC9ndGsvdGVzdHMvdGVzdGF0a3JvbGVzLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MjYg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCDCqSAyMDEwIEpvYW5tYXJpZSBEaWdncwotICogQ29w
eXJpZ2h0IMKpIDIwMTAgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
PGdsaWIuaD4KLSNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4K
LSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+Ci0KLS8qIE5vbiBmb3JtIHJvbGVzICovCi0jZGVm
aW5lIEhUTUxfRE9DVU1FTlRfRlJBTUUgIjxodG1sPjxib2R5PlRoaXMgaXMgYSB0ZXN0LjwvYm9k
eT48L2h0bWw+IgotI2RlZmluZSBIVE1MX0hFQURJTkcgIjxodG1sPjxib2R5PjxoMT4xPC9oMT48
aDI+MjwvaDI+PGgzPjM8L2gzPjxoND40PC9oND48aDU+NTwvaDU+PGg2PjY8L2g2PjwvYm9keT48
L2h0bWw+IgotI2RlZmluZSBIVE1MX0lNQUdFICI8aHRtbD48Ym9keT48aW1nIHNyYz0nZm9vYmFy
LnBuZycgYWx0PSdUaGlzIGlzIGEgdGVzdC4nLz48L2JvZHk+PC9odG1sPiIKLSNkZWZpbmUgSFRN
TF9MSU5LX1RFWFQgIjxodG1sPjxib2R5PjxhIGhyZWY9J2Zvb2Jhci5odG1sJz5UaGlzIGlzIGEg
dGVzdC48L2E+PC9ib2R5PjwvaHRtbD4iCi0jZGVmaW5lIEhUTUxfTElTVCAiPGh0bWw+PGJvZHk+
PHVsPjxsaT4xPC9saT48bGk+MjwvbGk+PC91bD48b2w+PGxpPjE8L2xpPjxsaT4yPC9saT48L29s
PjwvYm9keT48L2h0bWw+IgotI2RlZmluZSBIVE1MX1BBUkFHUkFQSCAiPGh0bWw+PGJvZHk+PHA+
VGhpcyBpcyBhIHRlc3QuPC9wPjwvYm9keT48L2h0bWw+IgotI2RlZmluZSBIVE1MX1NFQ1RJT04g
IjxodG1sPjxib2R5PjxkaXY+VGhpcyBpcyBhIHRlc3QuPC9kaXY+PC9ib2R5PjwvaHRtbD4iCi0j
ZGVmaW5lIEhUTUxfVEFCTEUgIjxodG1sPjxib2R5Pjx0YWJsZSBib3JkZXI9JzEnPjx0cj48dGQ+
VGhpcyBpczwvdGQ+PHRkPmEgdGVzdC48L3RkPjwvdHI+PC90YWJsZT48L2JvZHk+PC9odG1sPiIK
LSNkZWZpbmUgSFRNTF9TRVBBUkFUT1IgIjxodG1sPjxib2R5Pjxoci8+PC9ib2R5PjwvaHRtbD4i
Ci0jZGVmaW5lIEhUTUxfQ09NQk9CT1ggIjxodG1sPjxib2R5PjxzZWxlY3Qgc2l6ZT0nMSc+PG9w
dGlvbj5vbmU8L29wdGlvbj48b3B0aW9uPnR3bzwvb3B0aW9uPjxvcHRpb24+dGhyZWU8L29wdGlv
bj48L3NlbGVjdD48L2JvZHk+PC9odG1sPiIKLS8qIEZvcm0gcm9sZXMgKi8KLSNkZWZpbmUgSFRN
TF9GT1JNICI8aHRtbD48Ym9keT48Zm9ybT5UaGlzIGlzIGEgdGVzdC48L2Zvcm0+PC9ib2R5Pjwv
aHRtbD4iCi0jZGVmaW5lIEhUTUxfQ0hFQ0tfQk9YICI8aHRtbD48Ym9keT48aW5wdXQgdHlwZT0n
Y2hlY2tib3gnIC8+VGhpcyBpcyBhIHRlc3QuPC9ib2R5PjwvaHRtbD4iCi0jZGVmaW5lIEhUTUxf
TEFCRUxFRF9FTlRSWSAiPGh0bWw+PGJvZHk+PGxhYmVsIGZvcj0nZm9vJz5OYW1lOjwvbGFiZWw+
PGlucHV0IHR5cGU9J3RleHQnIGlkPSdmb28nIC8+PC9ib2R5PjwvaHRtbD4iCi0jZGVmaW5lIEhU
TUxfTElTVEJPWCAiPGh0bWw+PGJvZHk+PHNlbGVjdCBzaXplPSczJz48b3B0aW9uPm9uZTwvb3B0
aW9uPjxvcHRpb24+dHdvPC9vcHRpb24+PG9wdGlvbj50aHJlZTwvb3B0aW9uPjwvc2VsZWN0Pjwv
Ym9keT48L2h0bWw+IgotI2RlZmluZSBIVE1MX1BBU1NXT1JEX1RFWFQgIjxodG1sPjxib2R5Pjxp
bnB1dCB0eXBlPSdwYXNzd29yZCcgLz48L2JvZHk+PC9odG1sPiIKLSNkZWZpbmUgSFRNTF9QVVNI
X0JVVFRPTiAiPGh0bWw+PGJvZHk+PGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9J29rJyAvPlRo
aXMgaXMgYSB0ZXN0LjwvYm9keT48L2h0bWw+IgotI2RlZmluZSBIVE1MX1JBRElPX0JVVFRPTiAi
PGh0bWw+PGJvZHk+PGlucHV0IHR5cGU9J3JhZGlvJyAvPlRoaXMgaXMgYSB0ZXN0LjwvYm9keT48
L2h0bWw+IgotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgQXRrT2JqZWN0KiBkb2N1bWVudDsKLSAg
ICBBdGtPYmplY3QqIG9iajsKLSAgICBBdGtSb2xlIHJvbGU7Ci0gICAgR3RrV2lkZ2V0KiB3ZWJW
aWV3OwotICAgIEd0a0FsbG9jYXRpb24gYWxsb2M7Ci0gICAgR01haW5Mb29wKiBsb29wOwotfSBB
dGtSb2xlc0ZpeHR1cmU7Ci0KLXN0YXRpYyBnYm9vbGVhbiBmaW5pc2hfbG9hZGluZyhBdGtSb2xl
c0ZpeHR1cmUqIGZpeHR1cmUpCi17Ci0gICAgaWYgKGdfbWFpbl9sb29wX2lzX3J1bm5pbmcoZml4
dHVyZS0+bG9vcCkpCi0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQoZml4dHVyZS0+bG9vcCk7Ci0K
LSAgICAvLyBXaXRoIHRoZSBjaGFuZ2UgdG8gc3VwcG9ydCBXSzIgYWNjZXNzaWJpbGl0eSwgdGhl
IHJvb3Qgb2JqZWN0Ci0gICAgLy8gaGFzIGNoYW5nZWQgYW5kIGl0J3Mgbm8gbG9uZ2VyIHRoZSBk
b2N1bWVudCBmcmFtZSwgYnV0IGEgc2Nyb2xsCi0gICAgLy8gcGFuZSBjb250YWluaW5nIHRoZSBk
b2N1bWVudCBmcmFtZSBhcyBpdHMgb25seSBjaGlsZC4gU2VlIHRoZQotICAgIC8vIGJ1ZyA3MjM5
MCBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoaXMgY2hhbmdlLgotICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjM5MAotICAgIEF0a09iamVjdCogcm9vdE9iamVj
dCA9IGd0a193aWRnZXRfZ2V0X2FjY2Vzc2libGUoZml4dHVyZS0+d2ViVmlldyk7Ci0gICAgZml4
dHVyZS0+ZG9jdW1lbnQgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKHJvb3RPYmpl
Y3QsIDApOwotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmRvY3VtZW50KTsKLQotICAgIC8vIFJlbW92
ZSB0aGUgcmVmZXJlbmNlIGFkZGVkIGJ5IHJlZl9hY2Nlc3NpYmxlX2NoaWxkKCkgYW5kCi0gICAg
Ly8gcmV0dXJuLCBzaW5jZSB3ZSBkb24ndCBuZWVkIHRvIGtlZXAgdGhhdCBleHRyYSByZWYgYXQg
YWxsLgotICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPmRvY3VtZW50KTsKLSAgICByZXR1cm4g
RkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0a19yb2xlc19maXh0dXJlX3NldHVwKEF0a1JvbGVz
Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGZpeHR1cmUtPmxv
b3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7Ci0gICAgZml4dHVyZS0+YWxsb2MgPSAo
R3RrQWxsb2NhdGlvbikgeyAwLCAwLCA4MDAsIDYwMCB9OwotICAgIGZpeHR1cmUtPndlYlZpZXcg
PSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7Ci0gICAgZ19vYmplY3RfcmVmX3NpbmsoZml4dHVyZS0+
d2ViVmlldyk7Ci0KLSAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoZml4dHVyZS0+d2ViVmll
dywgJmZpeHR1cmUtPmFsbG9jKTsKLQotICAgIGlmIChkYXRhICE9IE5VTEwpCi0gICAgICAgIHdl
YmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcgKGZpeHR1cmUtPndlYlZp
ZXcpLCAoY29uc3QgY2hhciopIGRhdGEsIE5VTEwsIE5VTEwsIE5VTEwpOwotCi0gICAgZ19pZGxl
X2FkZCgoR1NvdXJjZUZ1bmMpIGZpbmlzaF9sb2FkaW5nLCBmaXh0dXJlKTsKLSAgICBnX21haW5f
bG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0a19yb2xlc19maXh0
dXJlX3RlYXJkb3duKEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRh
KQotewotICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPndlYlZpZXcpOwotICAgIGdfbWFpbl9s
b29wX3VucmVmKGZpeHR1cmUtPmxvb3ApOwotfQotCi1zdGF0aWMgdm9pZCBnZXRfY2hpbGRfYW5k
X3Rlc3Rfcm9sZShBdGtPYmplY3QqIG9iaiwgZ2ludCBwb3MsIEF0a1JvbGUgcm9sZSkKLXsKLSAg
ICBBdGtPYmplY3QqIGNoaWxkOwotICAgIEF0a1JvbGUgY2hpbGRfcm9sZTsKLQotICAgIGNoaWxk
ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmosIHBvcyk7Ci0gICAgZ19hc3Nl
cnQoY2hpbGQpOwotICAgIGNoaWxkX3JvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKGNoaWxkKTsK
LSAgICBnX2Fzc2VydChjaGlsZF9yb2xlID09IHJvbGUpOwotCi0gICAgZ19vYmplY3RfdW5yZWYo
Y2hpbGQpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfZG9jdW1l
bnRfZnJhbWUoQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17
Ci0gICAgZml4dHVyZS0+cm9sZSA9IGF0a19vYmplY3RfZ2V0X3JvbGUoZml4dHVyZS0+ZG9jdW1l
bnQpOwotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPnJvbGUgPT0gQVRLX1JPTEVfRE9DVU1FTlRfV0VC
KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2hlYWRpbmcoQXRr
Um9sZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ2V0X2No
aWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+ZG9jdW1lbnQsIDAsIEFUS19ST0xFX0hFQURJTkcp
OwotICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPmRvY3VtZW50LCAxLCBBVEtf
Uk9MRV9IRUFESU5HKTsKLSAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5kb2N1
bWVudCwgMiwgQVRLX1JPTEVfSEVBRElORyk7Ci0gICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUo
Zml4dHVyZS0+ZG9jdW1lbnQsIDMsIEFUS19ST0xFX0hFQURJTkcpOwotICAgIGdldF9jaGlsZF9h
bmRfdGVzdF9yb2xlKGZpeHR1cmUtPmRvY3VtZW50LCA0LCBBVEtfUk9MRV9IRUFESU5HKTsKLSAg
ICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5kb2N1bWVudCwgNSwgQVRLX1JPTEVf
SEVBRElORyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9pbWFn
ZShBdGtSb2xlc0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICAv
LyBUaGlzIGlzIGFuIGV4dHJhbmVvdXMgb2JqZWN0IG9mIEFUS19ST0xFX1BBTkVMIHdoaWNoIHdl
IHNob3VsZCBnZXQgcmlkIG9mLgotICAgIGZpeHR1cmUtPm9iaiA9IGF0a19vYmplY3RfcmVmX2Fj
Y2Vzc2libGVfY2hpbGQoZml4dHVyZS0+ZG9jdW1lbnQsIDApOwotICAgIGdfYXNzZXJ0KGZpeHR1
cmUtPm9iaik7Ci0KLSAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5vYmosIDAs
IEFUS19ST0xFX0lNQUdFKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9iaik7Ci19
Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9saW5rKEF0a1JvbGVzRml4
dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIC8vIFRoaXMgaXMgYW4g
ZXh0cmFuZW91cyBvYmplY3Qgb2YgQVRLX1JPTEVfUEFORUwgd2hpY2ggd2Ugc2hvdWxkIGdldCBy
aWQgb2YuCi0gICAgZml4dHVyZS0+b2JqID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGls
ZChmaXh0dXJlLT5kb2N1bWVudCwgMCk7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+b2JqKTsKLQot
ICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPm9iaiwgMCwgQVRLX1JPTEVfTElO
Syk7Ci0KLSAgICBnX29iamVjdF91bnJlZihmaXh0dXJlLT5vYmopOwotfQotCi1zdGF0aWMgdm9p
ZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfbGlzdF9hbmRfaXRlbShBdGtSb2xlc0ZpeHR1cmUq
IGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBBdGtPYmplY3QqIGxpc3RPYmo7
Ci0KLSAgICBsaXN0T2JqID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmaXh0dXJl
LT5kb2N1bWVudCwgMCk7Ci0gICAgZ19hc3NlcnQobGlzdE9iaik7Ci0gICAgZml4dHVyZS0+cm9s
ZSA9IGF0a19vYmplY3RfZ2V0X3JvbGUobGlzdE9iaik7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+
cm9sZSA9PSBBVEtfUk9MRV9MSVNUKTsKLQotICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGxp
c3RPYmosIDAsIEFUS19ST0xFX0xJU1RfSVRFTSk7Ci0gICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3Jv
bGUobGlzdE9iaiwgMSwgQVRLX1JPTEVfTElTVF9JVEVNKTsKLSAgICBnX29iamVjdF91bnJlZihs
aXN0T2JqKTsKLQotICAgIGxpc3RPYmogPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxk
KGZpeHR1cmUtPmRvY3VtZW50LCAxKTsKLSAgICBnX2Fzc2VydChsaXN0T2JqKTsKLSAgICBmaXh0
dXJlLT5yb2xlID0gYXRrX29iamVjdF9nZXRfcm9sZShsaXN0T2JqKTsKLSAgICBnX2Fzc2VydChm
aXh0dXJlLT5yb2xlID09IEFUS19ST0xFX0xJU1QpOwotCi0gICAgZ2V0X2NoaWxkX2FuZF90ZXN0
X3JvbGUobGlzdE9iaiwgMCwgQVRLX1JPTEVfTElTVF9JVEVNKTsKLSAgICBnZXRfY2hpbGRfYW5k
X3Rlc3Rfcm9sZShsaXN0T2JqLCAxLCBBVEtfUk9MRV9MSVNUX0lURU0pOwotICAgIGdfb2JqZWN0
X3VucmVmKGxpc3RPYmopOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3Jv
bGVfcGFyYWdyYXBoKEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRh
KQotewotICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPmRvY3VtZW50LCAwLCBB
VEtfUk9MRV9QQVJBR1JBUEgpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0
X3JvbGVfc2VjdGlvbihBdGtSb2xlc0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0
YSkKLXsKLSAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5kb2N1bWVudCwgMCwg
QVRLX1JPTEVfU0VDVElPTik7Ci19Ci0KLS8vIERvZXMgbm90IHlldCB0ZXN0IHRhYmxlIGNlbGxz
IGJlY2F1c2Ugb2YgYnVnIDMwODk1Lgotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF9y
b2xlX3RhYmxlKEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQot
ewotICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPmRvY3VtZW50LCAwLCBBVEtf
Uk9MRV9UQUJMRSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9z
ZXBhcmF0b3IoQXRrUm9sZXNGaXh0dXJlICpmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17
Ci0gICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+ZG9jdW1lbnQsIDAsIEFUS19S
T0xFX1NFUEFSQVRPUik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9s
ZV9jb21ib2JveChBdGtSb2xlc0ZpeHR1cmUgKmZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkK
LXsKLSAgICBBdGtPYmplY3QqIGNvbWJvYm94TWVudTsKLQotICAgIC8vIFRoaXMgaXMgYW4gZXh0
cmFuZW91cyBvYmplY3Qgb2YgQVRLX1JPTEVfUEFORUwgd2hpY2ggd2Ugc2hvdWxkIGdldCByaWQg
b2YuCi0gICAgZml4dHVyZS0+b2JqID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChm
aXh0dXJlLT5kb2N1bWVudCwgMCk7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+b2JqKTsKLQotICAg
IGZpeHR1cmUtPm9iaiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoZml4dHVyZS0+
b2JqLCAwKTsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT5vYmopOwotICAgIGZpeHR1cmUtPnJvbGUg
PSBhdGtfb2JqZWN0X2dldF9yb2xlKGZpeHR1cmUtPm9iaik7Ci0gICAgZ19hc3NlcnQoZml4dHVy
ZS0+cm9sZSA9PSBBVEtfUk9MRV9DT01CT19CT1gpOwotCi0gICAgY29tYm9ib3hNZW51ID0gYXRr
X29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmaXh0dXJlLT5vYmosIDApOwotICAgIGdfYXNz
ZXJ0KGNvbWJvYm94TWVudSk7Ci0gICAgZml4dHVyZS0+cm9sZSA9IGF0a19vYmplY3RfZ2V0X3Jv
bGUoY29tYm9ib3hNZW51KTsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT5yb2xlID09IEFUS19ST0xF
X01FTlUpOwotCi0gICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoY29tYm9ib3hNZW51LCAwLCBB
VEtfUk9MRV9NRU5VX0lURU0pOwotICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGNvbWJvYm94
TWVudSwgMSwgQVRLX1JPTEVfTUVOVV9JVEVNKTsKLSAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9s
ZShjb21ib2JveE1lbnUsIDIsIEFUS19ST0xFX01FTlVfSVRFTSk7Ci0KLSAgICBnX29iamVjdF91
bnJlZihmaXh0dXJlLT5vYmopOwotICAgIGdfb2JqZWN0X3VucmVmKGNvbWJvYm94TWVudSk7Ci19
Ci0KLS8qIEZvcm0gcm9sZXMgKi8KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9s
ZV9mb3JtKEF0a1JvbGVzRml4dHVyZSAqZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewot
ICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPmRvY3VtZW50LCAwLCBBVEtfUk9M
RV9GT1JNKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2NoZWNr
X2JveChBdGtSb2xlc0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAg
ICAvLyBUaGlzIGlzIGFuIGV4dHJhbmVvdXMgb2JqZWN0IG9mIEFUS19ST0xFX1BBTkVMIHdoaWNo
IHdlIHNob3VsZCBnZXQgcmlkIG9mLgotICAgIGZpeHR1cmUtPm9iaiA9IGF0a19vYmplY3RfcmVm
X2FjY2Vzc2libGVfY2hpbGQoZml4dHVyZS0+ZG9jdW1lbnQsIDApOwotICAgIGdfYXNzZXJ0KGZp
eHR1cmUtPm9iaik7Ci0KLSAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5vYmos
IDAsIEFUS19ST0xFX0NIRUNLX0JPWCk7Ci0KLSAgICBnX29iamVjdF91bnJlZihmaXh0dXJlLT5v
YmopOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfZW50cnkoQXRr
Um9sZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgLy8gVGhp
cyBpcyBhbiBleHRyYW5lb3VzIG9iamVjdCBvZiBBVEtfUk9MRV9QQU5FTCB3aGljaCB3ZSBzaG91
bGQgZ2V0IHJpZCBvZi4KLSAgICBmaXh0dXJlLT5vYmogPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3Np
YmxlX2NoaWxkKGZpeHR1cmUtPmRvY3VtZW50LCAwKTsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT5v
YmopOwotCi0gICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+b2JqLCAxLCBBVEtf
Uk9MRV9FTlRSWSk7Ci0KLSAgICBnX29iamVjdF91bnJlZihmaXh0dXJlLT5vYmopOwotfQotCi1z
dGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfbGFiZWwoQXRrUm9sZXNGaXh0dXJl
KiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgLy8gVGhpcyBpcyBhbiBleHRy
YW5lb3VzIG9iamVjdCBvZiBBVEtfUk9MRV9QQU5FTCB3aGljaCB3ZSBzaG91bGQgZ2V0IHJpZCBv
Zi4KLSAgICBmaXh0dXJlLT5vYmogPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZp
eHR1cmUtPmRvY3VtZW50LCAwKTsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT5vYmopOwotCi0gICAg
Z2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+b2JqLCAwLCBBVEtfUk9MRV9MQUJFTCk7
Ci0KLSAgICBnX29iamVjdF91bnJlZihmaXh0dXJlLT5vYmopOwotfQotCi1zdGF0aWMgdm9pZCB0
ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfbGlzdGJveChBdGtSb2xlc0ZpeHR1cmUqIGZpeHR1cmUs
IGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBBdGtPYmplY3QqIGxpc3Rib3hPYmo7Ci0gICAg
Ly8gVGhpcyBpcyBhbiBleHRyYW5lb3VzIG9iamVjdCBvZiBBVEtfUk9MRV9QQU5FTCB3aGljaCB3
ZSBzaG91bGQgZ2V0IHJpZCBvZi4KLSAgICBmaXh0dXJlLT5vYmogPSBhdGtfb2JqZWN0X3JlZl9h
Y2Nlc3NpYmxlX2NoaWxkKGZpeHR1cmUtPmRvY3VtZW50LCAwKTsKLSAgICBnX2Fzc2VydChmaXh0
dXJlLT5vYmopOwotCi0gICAgbGlzdGJveE9iaiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVf
Y2hpbGQoZml4dHVyZS0+b2JqLCAwKTsKLSAgICBnX2Fzc2VydChsaXN0Ym94T2JqKTsKLSAgICBm
aXh0dXJlLT5yb2xlID0gYXRrX29iamVjdF9nZXRfcm9sZShsaXN0Ym94T2JqKTsKLSAgICBnX2Fz
c2VydChmaXh0dXJlLT5yb2xlID09IEFUS19ST0xFX0xJU1QpOwotCi0gICAgZ2V0X2NoaWxkX2Fu
ZF90ZXN0X3JvbGUobGlzdGJveE9iaiwgMCwgQVRLX1JPTEVfTElTVF9JVEVNKTsKLSAgICBnZXRf
Y2hpbGRfYW5kX3Rlc3Rfcm9sZShsaXN0Ym94T2JqLCAxLCBBVEtfUk9MRV9MSVNUX0lURU0pOwot
ICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGxpc3Rib3hPYmosIDIsIEFUS19ST0xFX0xJU1Rf
SVRFTSk7Ci0KLSAgICBnX29iamVjdF91bnJlZihmaXh0dXJlLT5vYmopOwotICAgIGdfb2JqZWN0
X3VucmVmKGxpc3Rib3hPYmopOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0
X3JvbGVfcGFzc3dvcmRfdGV4dChBdGtSb2xlc0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50
ZXIgZGF0YSkKLXsKLSAgICAvLyBUaGlzIGlzIGFuIGV4dHJhbmVvdXMgb2JqZWN0IG9mIEFUS19S
T0xFX1BBTkVMIHdoaWNoIHdlIHNob3VsZCBnZXQgcmlkIG9mLgotICAgIGZpeHR1cmUtPm9iaiA9
IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoZml4dHVyZS0+ZG9jdW1lbnQsIDApOwot
ICAgIGdfYXNzZXJ0KGZpeHR1cmUtPm9iaik7Ci0KLSAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9s
ZShmaXh0dXJlLT5vYmosIDAsIEFUS19ST0xFX1BBU1NXT1JEX1RFWFQpOwotCi0gICAgZ19vYmpl
Y3RfdW5yZWYoZml4dHVyZS0+b2JqKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRr
X2dldF9yb2xlX3B1c2hfYnV0dG9uKEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9p
bnRlciBkYXRhKQotewotICAgIC8vIFRoaXMgaXMgYW4gZXh0cmFuZW91cyBvYmplY3Qgb2YgQVRL
X1JPTEVfUEFORUwgd2hpY2ggd2Ugc2hvdWxkIGdldCByaWQgb2YuCi0gICAgZml4dHVyZS0+b2Jq
ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmaXh0dXJlLT5kb2N1bWVudCwgMCk7
Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+b2JqKTsKLQotICAgIGdldF9jaGlsZF9hbmRfdGVzdF9y
b2xlKGZpeHR1cmUtPm9iaiwgMCwgQVRLX1JPTEVfUFVTSF9CVVRUT04pOwotCi0gICAgZ19vYmpl
Y3RfdW5yZWYoZml4dHVyZS0+b2JqKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRr
X2dldF9yb2xlX3JhZGlvX2J1dHRvbihBdGtSb2xlc0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBv
aW50ZXIgZGF0YSkKLXsKLSAgICAvLyBUaGlzIGlzIGFuIGV4dHJhbmVvdXMgb2JqZWN0IG9mIEFU
S19ST0xFX1BBTkVMIHdoaWNoIHdlIHNob3VsZCBnZXQgcmlkIG9mLgotICAgIGZpeHR1cmUtPm9i
aiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoZml4dHVyZS0+ZG9jdW1lbnQsIDAp
OwotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPm9iaik7Ci0KLSAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rf
cm9sZShmaXh0dXJlLT5vYmosIDAsIEFUS19ST0xFX1JBRElPX0JVVFRPTik7Ci0KLSAgICBnX29i
amVjdF91bnJlZihmaXh0dXJlLT5vYmopOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioq
IGFyZ3YpCi17Ci0gICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOwotCi0gICAg
Z190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKLQotICAgIGdfdGVz
dF9hZGQoIi93ZWJraXQvYXRrL3Rlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9kb2N1bWVudF9mcmFt
ZSIsCi0gICAgICAgICAgICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhUTUxfRE9DVU1FTlRfRlJBTUUs
Ci0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAg
IHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9kb2N1bWVudF9mcmFtZSwKLSAgICAgICAgICAgICAg
IGF0a19yb2xlc19maXh0dXJlX3RlYXJkb3duKTsKLQotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQv
YXRrL3Rlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9oZWFkaW5nIiwKLSAgICAgICAgICAgICAgIEF0
a1JvbGVzRml4dHVyZSwgSFRNTF9IRUFESU5HLAotICAgICAgICAgICAgICAgYXRrX3JvbGVzX2Zp
eHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfaGVh
ZGluZywKLSAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3RlYXJkb3duKTsKLQotICAg
IGdfdGVzdF9hZGQoIi93ZWJraXQvYXRrL3Rlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9pbWFnZSIs
Ci0gICAgICAgICAgICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhUTUxfSU1BR0UsCi0gICAgICAgICAg
ICAgICBhdGtfcm9sZXNfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0
X2F0a19nZXRfcm9sZV9pbWFnZSwKLSAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3Rl
YXJkb3duKTsKLQotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvYXRrL3Rlc3Rfd2Via2l0X2F0a19n
ZXRfcm9sZV9saW5rIiwKLSAgICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVyZSwgSFRNTF9MSU5L
X1RFWFQsCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV9zZXR1cCwKLSAgICAgICAg
ICAgICAgIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9saW5rLAotICAgICAgICAgICAgICAgYXRr
X3JvbGVzX2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9hdGsv
dGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xpc3RfYW5kX2l0ZW0iLAotICAgICAgICAgICAgICAg
QXRrUm9sZXNGaXh0dXJlLCBIVE1MX0xJU1QsCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4
dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9saXN0
X2FuZF9pdGVtLAotICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfdGVhcmRvd24pOwot
Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9hdGsvdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX3Bh
cmFncmFwaCIsCi0gICAgICAgICAgICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhUTUxfUEFSQUdSQVBI
LAotICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAg
ICB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfcGFyYWdyYXBoLAotICAgICAgICAgICAgICAgYXRr
X3JvbGVzX2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9hdGsv
dGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX3NlY3Rpb24iLAotICAgICAgICAgICAgICAgQXRrUm9s
ZXNGaXh0dXJlLCBIVE1MX1NFQ1RJT04sCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVy
ZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9zZWN0aW9u
LAotICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAgZ190
ZXN0X2FkZCgiL3dlYmtpdC9hdGsvdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX3RhYmxlIiwKLSAg
ICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVyZSwgSFRNTF9UQUJMRSwKLSAgICAgICAgICAgICAg
IGF0a19yb2xlc19maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRr
X2dldF9yb2xlX3RhYmxlLAotICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfdGVhcmRv
d24pOwotCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9hdGsvdGVzdF93ZWJraXRfYXRrX2dldF9y
b2xlX3NlcGFyYXRvciIsCi0gICAgICAgICAgICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhUTUxfU0VQ
QVJBVE9SLAotICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAg
ICAgICAgICB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfc2VwYXJhdG9yLAotICAgICAgICAgICAg
ICAgYXRrX3JvbGVzX2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtp
dC9hdGsvdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2NvbWJvYm94IiwKLSAgICAgICAgICAgICAg
IEF0a1JvbGVzRml4dHVyZSwgSFRNTF9DT01CT0JPWCwKLSAgICAgICAgICAgICAgIGF0a19yb2xl
c19maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xl
X2NvbWJvYm94LAotICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfdGVhcmRvd24pOwot
Ci0gICAgLyogRm9ybSByb2xlcyAqLwotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvYXRrL3Rlc3Rf
d2Via2l0X2F0a19nZXRfcm9sZV9mb3JtIiwKLSAgICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVy
ZSwgSFRNTF9GT1JNLAotICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAsCi0g
ICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfZm9ybSwKLSAgICAgICAgICAg
ICAgIGF0a19yb2xlc19maXh0dXJlX3RlYXJkb3duKTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0
L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfY2hlY2tfYm94IiwKLSAgICAgICAgICAgICAg
IEF0a1JvbGVzRml4dHVyZSwgSFRNTF9DSEVDS19CT1gsCi0gICAgICAgICAgICAgICBhdGtfcm9s
ZXNfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9s
ZV9jaGVja19ib3gsCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7
Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVf
ZW50cnkiLAotICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX0xBQkVMRURfRU5U
UlksCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAg
ICAgIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9lbnRyeSwKLSAgICAgICAgICAgICAgIGF0a19y
b2xlc19maXh0dXJlX3RlYXJkb3duKTsKLQotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvYXRrL3Rl
c3Rfd2Via2l0X2F0a19nZXRfcm9sZV9sYWJlbCIsCi0gICAgICAgICAgICAgICBBdGtSb2xlc0Zp
eHR1cmUsIEhUTUxfTEFCRUxFRF9FTlRSWSwKLSAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0
dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xhYmVs
LAotICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAgZ190
ZXN0X2FkZCgiL3dlYmtpdC9hdGsvdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xpc3Rib3giLAot
ICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX0xJU1RCT1gsCi0gICAgICAgICAg
ICAgICBhdGtfcm9sZXNfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0
X2F0a19nZXRfcm9sZV9saXN0Ym94LAotICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVf
dGVhcmRvd24pOwotCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9hdGsvdGVzdF93ZWJraXRfYXRr
X2dldF9yb2xlX3Bhc3N3b3JkX3RleHQiLAotICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJl
LCBIVE1MX1BBU1NXT1JEX1RFWFQsCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV9z
ZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9wYXNzd29yZF90
ZXh0LAotICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAg
Z190ZXN0X2FkZCgiL3dlYmtpdC9hdGsvdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX3B1c2hfYnV0
dG9uIiwKLSAgICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVyZSwgSFRNTF9QVVNIX0JVVFRPTiwK
LSAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAg
dGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX3B1c2hfYnV0dG9uLAotICAgICAgICAgICAgICAgYXRr
X3JvbGVzX2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9hdGsv
dGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX3JhZGlvX2J1dHRvbiIsCi0gICAgICAgICAgICAgICBB
dGtSb2xlc0ZpeHR1cmUsIEhUTUxfUkFESU9fQlVUVE9OLAotICAgICAgICAgICAgICAgYXRrX3Jv
bGVzX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3Jv
bGVfcmFkaW9fYnV0dG9uLAotICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfdGVhcmRv
d24pOwotCi0gICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rjb250ZXh0bWVudS5jIGIvU291cmNlL1dlYktpdC9ndGsvdGVz
dHMvdGVzdGNvbnRleHRtZW51LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0YWFh
NTcuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGNvbnRleHRtZW51
LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAy
LDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgPHdlYmtpdC93
ZWJraXQuaD4KLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIGNoYXIgKmRhdGE7Ci0gICAgZ3VpbnQg
ZmxhZzsKLX0gVGVzdEluZm87Ci0KLXN0YXRpYyBHTWFpbkxvb3AgKmxvb3A7Ci0KLXR5cGVkZWYg
c3RydWN0IHsKLSAgICBXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3OwotICAgIFRlc3RJbmZvICppbmZv
OwotfSBDb250ZXh0TWVudUZpeHR1cmU7Ci0KLXN0YXRpYyBUZXN0SW5mbyAqdGVzdEluZm9OZXco
Y29uc3QgY2hhciAqZGF0YSwgZ3VpbnQgZmxhZykKLXsKLSAgICBUZXN0SW5mbyAqaW5mbyA9IGdf
c2xpY2VfbmV3KFRlc3RJbmZvKTsKLSAgICBpbmZvLT5kYXRhID0gZ19zdHJkdXAoZGF0YSk7Ci0g
ICAgaW5mby0+ZmxhZyA9IGZsYWc7Ci0KLSAgICByZXR1cm4gaW5mbzsKLX0KLQotc3RhdGljIHZv
aWQgdGVzdEluZm9EZXN0cm95KFRlc3RJbmZvICppbmZvKQotewotICAgIGdfZnJlZShpbmZvLT5k
YXRhKTsKLSAgICBnX3NsaWNlX2ZyZWUoVGVzdEluZm8sIGluZm8pOwotfQotCi1zdGF0aWMgdm9p
ZCBjb250ZXh0TWVudUZpeHR1cmVTZXR1cChDb250ZXh0TWVudUZpeHR1cmUgKmZpeHR1cmUsIGdj
b25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBmaXh0dXJlLT53ZWJWaWV3ID0gV0VCS0lUX1dFQl9W
SUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhO
VUxMLCBUUlVFKTsKLSAgICBmaXh0dXJlLT5pbmZvID0gKFRlc3RJbmZvICopZGF0YTsKLX0KLQot
c3RhdGljIHZvaWQgY29udGV4dE1lbnVGaXh0dXJlVGVhcmRvd24oQ29udGV4dE1lbnVGaXh0dXJl
ICpmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19vYmplY3RfdW5yZWYoZml4
dHVyZS0+d2ViVmlldyk7Ci0gICAgZ19tYWluX2xvb3BfdW5yZWYobG9vcCk7Ci0gICAgdGVzdElu
Zm9EZXN0cm95KGZpeHR1cmUtPmluZm8pOwotfQotCi1zdGF0aWMgR0xpc3QgKmNoZWNrQWN0aW9u
KEdMaXN0ICppdGVyLCBXZWJLaXRDb250ZXh0TWVudUFjdGlvbiBhY3Rpb24pCi17Ci0gICAgR3Rr
TWVudUl0ZW0gKml0ZW0gPSAoR3RrTWVudUl0ZW0gKilpdGVyLT5kYXRhOwotCi0gICAgZ19hc3Nl
cnQoR1RLX0lTX01FTlVfSVRFTShpdGVtKSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X2NvbnRleHRf
bWVudV9pdGVtX2dldF9hY3Rpb24oaXRlbSkgPT0gYWN0aW9uKTsKLQotICAgIHJldHVybiBpdGVy
LT5uZXh0OwotfQotCi1zdGF0aWMgR0xpc3QgKmNoZWNrQWN0aW9uV2l0aFN1Ym1lbnUoR0xpc3Qg
Kml0ZXIsIFdlYktpdENvbnRleHRNZW51QWN0aW9uIGFjdGlvbikKLXsKLSAgICBHdGtNZW51SXRl
bSAqaXRlbSA9IChHdGtNZW51SXRlbSAqKWl0ZXItPmRhdGE7Ci0KLSAgICBnX2Fzc2VydChHVEtf
SVNfTUVOVV9JVEVNKGl0ZW0pKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfY29udGV4dF9tZW51X2l0
ZW1fZ2V0X2FjdGlvbihpdGVtKSA9PSBhY3Rpb24pOwotICAgIGdfYXNzZXJ0KEdUS19JU19NRU5V
KGd0a19tZW51X2l0ZW1fZ2V0X3N1Ym1lbnUoaXRlbSkpKTsKLQotICAgIHJldHVybiBpdGVyLT5u
ZXh0OwotfQotCi1zdGF0aWMgR0xpc3QgKmNoZWNrU2VwYXJhdG9yKEdMaXN0ICppdGVyKQotewot
ICAgIEd0a01lbnVJdGVtICppdGVtID0gKEd0a01lbnVJdGVtICopaXRlci0+ZGF0YTsKLQotICAg
IGdfYXNzZXJ0KEdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pKTsKLQotICAgIHJldHVy
biBpdGVyLT5uZXh0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gY29udGV4dE1lbnVDYWxsYmFjayhX
ZWJLaXRXZWJWaWV3ICp3ZWJWaWV3LCBHdGtXaWRnZXQgKmRlZmF1bHRNZW51LCBXZWJLaXRIaXRU
ZXN0UmVzdWx0ICpoaXRUZXN0UmVzdWx0LCBnYm9vbGVhbiBrZXlib2FyZE1vZGUsIGdwb2ludGVy
IHVzZXJEYXRhKQotewotICAgIFRlc3RJbmZvICppbmZvID0gKFRlc3RJbmZvICopdXNlckRhdGE7
Ci0gICAgZ3VpbnQgY29udGV4dDsKLSAgICBHTGlzdCAqaXRlbXM7Ci0gICAgR0xpc3QgKml0ZXI7
Ci0KLSAgICAvKiBDaGVjayBzaWduYWwgcGFyYW1ldGVycyAqLwotICAgIGdfYXNzZXJ0KFdFQktJ
VF9JU19XRUJfVklFVyh3ZWJWaWV3KSk7Ci0gICAgZ19hc3NlcnQoR1RLX0lTX01FTlUoZGVmYXVs
dE1lbnUpKTsKLSAgICBnX2Fzc2VydChXRUJLSVRfSVNfSElUX1RFU1RfUkVTVUxUKGhpdFRlc3RS
ZXN1bHQpKTsKLSAgICBnX2Fzc2VydCgha2V5Ym9hcmRNb2RlKTsKLQotICAgIGdfb2JqZWN0X2dl
dChoaXRUZXN0UmVzdWx0LCAiY29udGV4dCIsICZjb250ZXh0LCBOVUxMKTsKLSAgICBnX2Fzc2Vy
dChjb250ZXh0ICYgaW5mby0+ZmxhZyk7Ci0KLSAgICBpdGVtcyA9IGd0a19jb250YWluZXJfZ2V0
X2NoaWxkcmVuKEdUS19DT05UQUlORVIoZGVmYXVsdE1lbnUpKTsKLSAgICBzd2l0Y2ggKGluZm8t
PmZsYWcpIHsKLSAgICBjYXNlIFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9ET0NVTUVO
VDoKLSAgICAgICAgaXRlciA9IGl0ZW1zOwotICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRl
ciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fR09fQkFDSyk7Ci0gICAgICAgIGl0ZXIgPSBj
aGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9HT19GT1JXQVJEKTsK
LSAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNU
SU9OX1NUT1ApOwotICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fUkVMT0FEKTsKLSAgICAgICAgZ19hc3NlcnQoIWl0ZXIpOwotCi0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0lNQUdF
OgotICAgICAgICBpdGVyID0gaXRlbXM7Ci0gICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVy
LCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0lNQUdFX0lOX05FV19XSU5ET1cpOwot
ICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T05fRE9XTkxPQURfSU1BR0VfVE9fRElTSyk7Ci0gICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihp
dGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX0lNQUdFX1RPX0NMSVBCT0FSRCk7
Ci0gICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FD
VElPTl9DT1BZX0lNQUdFX1VSTF9UT19DTElQQk9BUkQpOwotICAgICAgICBnX2Fzc2VydCghaXRl
cik7Ci0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NP
TlRFWFRfRURJVEFCTEU6Ci0gICAgICAgIGl0ZXIgPSBpdGVtczsKLSAgICAgICAgaXRlciA9IGNo
ZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NVVCk7Ci0gICAgICAg
IGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZ
KTsKLSAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVf
QUNUSU9OX1BBU1RFKTsKLSAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9D
T05URVhUX01FTlVfQUNUSU9OX0RFTEVURSk7Ci0gICAgICAgIGl0ZXIgPSBjaGVja1NlcGFyYXRv
cihpdGVyKTsKLSAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhU
X01FTlVfQUNUSU9OX1NFTEVDVF9BTEwpOwotICAgICAgICBpdGVyID0gY2hlY2tTZXBhcmF0b3Io
aXRlcik7Ci0gICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbldpdGhTdWJtZW51KGl0ZXIsIFdFQktJ
VF9DT05URVhUX01FTlVfQUNUSU9OX0lOUFVUX01FVEhPRFMpOwotICAgICAgICBpdGVyID0gY2hl
Y2tBY3Rpb25XaXRoU3VibWVudShpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9VTklD
T0RFKTsKLSAgICAgICAgZ19hc3NlcnQoIWl0ZXIpOwotCi0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0xJTks6Ci0gICAgICAgIGl0ZXIgPSBp
dGVtczsKLSAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01F
TlVfQUNUSU9OX09QRU5fTElOSyk7Ci0gICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0xJTktfSU5fTkVXX1dJTkRPVyk7Ci0gICAg
ICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9E
T1dOTE9BRF9MSU5LX1RPX0RJU0spOwotICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwg
V0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9MSU5LX1RPX0NMSVBCT0FSRCk7Ci0gICAg
ICAgIGdfYXNzZXJ0KCFpdGVyKTsKLQotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAg
ICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAgIH0KLQotICAgIGdfbGlzdF9mcmVlKGl0
ZW1zKTsKLSAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwotCi0gICAgcmV0dXJuIFRSVUU7Ci19
Ci0KLXN0YXRpYyB2b2lkIHB1c2hFdmVudChXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3KQotewotICAg
IEdka0V2ZW50ICpldmVudCA9IGdka19ldmVudF9uZXcoR0RLX0JVVFRPTl9QUkVTUyk7Ci0jaWYg
R1RLX0NIRUNLX1ZFUlNJT04oMywgMCwgMCkKLSAgICBHZGtEZXZpY2VNYW5hZ2VyICpkZXZpY2VN
YW5hZ2VyOwotI2VuZGlmCi0KLSAgICBldmVudC0+YW55LndpbmRvdyA9IGdfb2JqZWN0X3JlZihn
dGtfd2lkZ2V0X2dldF93aW5kb3coR1RLX1dJREdFVCh3ZWJWaWV3KSkpOwotICAgIGV2ZW50LT5h
bnkuc2VuZF9ldmVudCA9IEZBTFNFOwotICAgIGV2ZW50LT5idXR0b24udGltZSA9IEdES19DVVJS
RU5UX1RJTUU7Ci0gICAgZXZlbnQtPmJ1dHRvbi5idXR0b24gPSAzOwotICAgIGV2ZW50LT5idXR0
b24ueCA9IGV2ZW50LT5idXR0b24ueSA9IDU7Ci0gICAgZXZlbnQtPmJ1dHRvbi54X3Jvb3QgPSBl
dmVudC0+YnV0dG9uLng7Ci0gICAgZXZlbnQtPmJ1dHRvbi55X3Jvb3QgPSBldmVudC0+YnV0dG9u
Lnk7Ci0jaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMCwgMCkKLSAgICBkZXZpY2VNYW5hZ2VyID0g
Z2RrX2Rpc3BsYXlfZ2V0X2RldmljZV9tYW5hZ2VyKGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCkp
OwotICAgIGV2ZW50LT5idXR0b24uZGV2aWNlID0gZ2RrX2RldmljZV9tYW5hZ2VyX2dldF9jbGll
bnRfcG9pbnRlcihkZXZpY2VNYW5hZ2VyKTsKLSNlbmRpZgotCi0gICAgZ2RrX2V2ZW50X3B1dChl
dmVudCk7Ci0gICAgZ2RrX2V2ZW50X2ZyZWUoZXZlbnQpOwotfQotCi1zdGF0aWMgdm9pZCBsb2Fk
U3RhdHVzQ2FsbGJhY2soV2ViS2l0V2ViVmlldyAqd2ViVmlldywgR1BhcmFtU3BlYyAqc3BlYywg
Z3BvaW50ZXIgZGF0YSkKLXsKLSAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93
ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMod2ViVmlldyk7Ci0gICAgVGVzdEluZm8gKmluZm8gPSAo
VGVzdEluZm8gKilkYXRhOwotCi0gICAgZ19hc3NlcnQoc3RhdHVzICE9IFdFQktJVF9MT0FEX0ZB
SUxFRCk7Ci0KLSAgICBpZiAoc3RhdHVzICE9IFdFQktJVF9MT0FEX0ZJTklTSEVEKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJjb250ZXh0LW1lbnUi
LCBHX0NBTExCQUNLKGNvbnRleHRNZW51Q2FsbGJhY2spLCBpbmZvKTsKLSAgICBwdXNoRXZlbnQo
d2ViVmlldyk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBtYXBFdmVudENhbGxiYWNrKEd0a1dpZGdl
dCAqd2lkZ2V0LCBHZGtFdmVudCAqZXZlbnQsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgZ3RrX3dp
ZGdldF9ncmFiX2ZvY3VzKHdpZGdldCk7Ci0gICAgQ29udGV4dE1lbnVGaXh0dXJlICpmaXh0dXJl
ID0gKENvbnRleHRNZW51Rml4dHVyZSAqKWRhdGE7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRf
c3RyaW5nKGZpeHR1cmUtPndlYlZpZXcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZpeHR1cmUtPmluZm8tPmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0
ZXh0L2h0bWwiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXRmLTgiLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZTovLyIpOwotICAgIGdfc2lnbmFsX2Nv
bm5lY3QoZml4dHVyZS0+d2ViVmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLCBHX0NBTExCQUNL
KGxvYWRTdGF0dXNDYWxsYmFjayksIGZpeHR1cmUtPmluZm8pOwotICAgIHJldHVybiBGQUxTRTsK
LX0KLQotc3RhdGljIHZvaWQgdGVzdENvbnRleHRNZW51KENvbnRleHRNZW51Rml4dHVyZSAqZml4
dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlv
biA9IHsgMCwgMCwgNTAsIDUwIH07Ci0gICAgR3RrV2lkZ2V0ICp3aW5kb3cgPSBndGtfd2luZG93
X25ldyhHVEtfV0lORE9XX1BPUFVQKTsKLQotICAgIGd0a193aW5kb3dfcmVzaXplKEdUS19XSU5E
T1cod2luZG93KSwgNTAsIDUwKTsKLSAgICBndGtfd2luZG93X21vdmUoR1RLX1dJTkRPVyh3aW5k
b3cpLCAwLCAwKTsKLSAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVChmaXh0
dXJlLT53ZWJWaWV3KSwgJmFsbG9jYXRpb24pOwotICAgIGd0a19jb250YWluZXJfYWRkKEdUS19D
T05UQUlORVIod2luZG93KSwgR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSk7Ci0gICAgZ19z
aWduYWxfY29ubmVjdCh3aW5kb3csICJtYXAtZXZlbnQiLCBHX0NBTExCQUNLKG1hcEV2ZW50Q2Fs
bGJhY2spLCBmaXh0dXJlKTsKLSAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7Ci0KLSAg
ICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBjb250ZXh0TWVu
dUN1c3RvbUl0ZW1DYWxsYmFjayhXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3LCBHdGtXaWRnZXQgKmRl
ZmF1bHRNZW51LCBXZWJLaXRIaXRUZXN0UmVzdWx0ICpoaXRUZXN0UmVzdWx0LCBnYm9vbGVhbiBr
ZXlib2FyZE1vZGUsIGdwb2ludGVyIHVzZXJEYXRhKQotewotICAgIFRlc3RJbmZvICppbmZvID0g
KFRlc3RJbmZvICopdXNlckRhdGE7Ci0gICAgZ3VpbnQgY29udGV4dDsKLSAgICBHTGlzdCAqaXRl
bXM7Ci0gICAgR0xpc3QgKml0ZXI7Ci0gICAgR3RrV2lkZ2V0ICptZW51SXRlbTsKLSAgICBHdGtB
Y3Rpb24gKmFjdGlvbjsKLQotICAgIC8qIENoZWNrIHNpZ25hbCBwYXJhbWV0ZXJzICovCi0gICAg
Z19hc3NlcnQoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpKTsKLSAgICBnX2Fzc2VydChHVEtf
SVNfTUVOVShkZWZhdWx0TWVudSkpOwotICAgIGdfYXNzZXJ0KFdFQktJVF9JU19ISVRfVEVTVF9S
RVNVTFQoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0KCFrZXlib2FyZE1vZGUpOwotCi0g
ICAgZ19vYmplY3RfZ2V0KGhpdFRlc3RSZXN1bHQsICJjb250ZXh0IiwgJmNvbnRleHQsIE5VTEwp
OwotICAgIGdfYXNzZXJ0KGNvbnRleHQgJiBpbmZvLT5mbGFnKTsKLQotICAgIGFjdGlvbiA9IGd0
a19hY3Rpb25fbmV3KCJUZXN0QWN0aW9uIiwgIkN1c3RvbSBBY3Rpb24iLCAiQ3VzdG9tIEFjdGlv
biBUb29sdGlwIiwgTlVMTCk7Ci0gICAgbWVudUl0ZW0gPSBndGtfYWN0aW9uX2NyZWF0ZV9tZW51
X2l0ZW0oYWN0aW9uKTsKLSAgICBnX29iamVjdF91bnJlZihhY3Rpb24pOwotCi0gICAgZ3RrX21l
bnVfc2hlbGxfYXBwZW5kKEdUS19NRU5VX1NIRUxMKGRlZmF1bHRNZW51KSwgbWVudUl0ZW0pOwot
ICAgIGd0a193aWRnZXRfc2hvdyhtZW51SXRlbSk7Ci0KLSAgICBpdGVtcyA9IGd0a19jb250YWlu
ZXJfZ2V0X2NoaWxkcmVuKEdUS19DT05UQUlORVIoZGVmYXVsdE1lbnUpKTsKLSAgICBpdGVyID0g
aXRlbXM7Ci0gICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVf
QUNUSU9OX0dPX0JBQ0spOwotICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09O
VEVYVF9NRU5VX0FDVElPTl9HT19GT1JXQVJEKTsKLSAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRl
ciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fU1RPUCk7Ci0gICAgaXRlciA9IGNoZWNrQWN0
aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1JFTE9BRCk7Ci0gICAgaXRlciA9
IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX05PX0FDVElPTik7
Ci0gICAgZ19hc3NlcnQoIWl0ZXIpOwotCi0gICAgZ19saXN0X2ZyZWUoaXRlbXMpOwotICAgIGdf
bWFpbl9sb29wX3F1aXQobG9vcCk7Ci0KLSAgICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZv
aWQgdGVzdENvbnRleHRNZW51Q3VzdG9tSXRlbShDb250ZXh0TWVudUZpeHR1cmUgKmZpeHR1cmUs
IGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBHdGtXaWRnZXQgKndpbmRvdyA9IGd0a193aW5k
b3dfbmV3KEdUS19XSU5ET1dfUE9QVVApOwotICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05U
QUlORVIod2luZG93KSwgR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSk7Ci0gICAgZ3RrX3dp
ZGdldF9zaG93X2FsbCh3aW5kb3cpOwotICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1cyhHVEtfV0lE
R0VUKGZpeHR1cmUtPndlYlZpZXcpKTsKLQotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmlu
ZyhmaXh0dXJlLT53ZWJWaWV3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXh0
dXJlLT5pbmZvLT5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGV4dC9o
dG1sIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInV0Zi04IiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImZpbGU6Ly8iKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0
KGZpeHR1cmUtPndlYlZpZXcsICJjb250ZXh0LW1lbnUiLCBHX0NBTExCQUNLKGNvbnRleHRNZW51
Q3VzdG9tSXRlbUNhbGxiYWNrKSwgZml4dHVyZS0+aW5mbyk7Ci0gICAgcHVzaEV2ZW50KGZpeHR1
cmUtPndlYlZpZXcpOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0g
ICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOwotCi0gICAgZ190ZXN0X2J1Z19i
YXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKLQotICAgIGdfdGVzdF9hZGQoIi93ZWJr
aXQvdGVzdGNvbnRleHRtZW51L2RvY3VtZW50IiwgQ29udGV4dE1lbnVGaXh0dXJlLAotICAgICAg
ICAgICAgICAgdGVzdEluZm9OZXcoIjxodG1sPjxib2R5PjxoMT5XZWJLaXRHVEsrITwvaDE+PC9i
b2R5PjwvaHRtbD4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX0hJVF9URVNU
X1JFU1VMVF9DT05URVhUX0RPQ1VNRU5UKSwKLSAgICAgICAgICAgICAgIGNvbnRleHRNZW51Rml4
dHVyZVNldHVwLCB0ZXN0Q29udGV4dE1lbnUsIGNvbnRleHRNZW51Rml4dHVyZVRlYXJkb3duKTsK
LSAgICAvKiBXZSBoYXJkY29kZSBhbGwgZWxlbWVudHMgdG8gYmUgYXQgMCwwIHNvIHRoYXQgd2Ug
a25vdyB3aGVyZSB0byBnZW5lcmF0ZSB0aGUgYnV0dG9uIGV2ZW50cyAqLwotICAgIGdfdGVzdF9h
ZGQoIi93ZWJraXQvdGVzdGNvbnRleHRtZW51L2ltYWdlIiwgQ29udGV4dE1lbnVGaXh0dXJlLAot
ICAgICAgICAgICAgICAgdGVzdEluZm9OZXcoIjxodG1sPjxib2R5PjxpbWcgc3R5bGU9J3Bvc2l0
aW9uOmFic29sdXRlOyBsZWZ0OjA7IHRvcDowJyBzcmM9JzB4ZGVhZGJlZWYnIHdpZHRoPTUwIGhl
aWdodD01MD48L2ltZz48L2JvZHk+PC9odG1sPiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfSU1BR0UpLAotICAgICAgICAgICAgICAg
Y29udGV4dE1lbnVGaXh0dXJlU2V0dXAsIHRlc3RDb250ZXh0TWVudSwgY29udGV4dE1lbnVGaXh0
dXJlVGVhcmRvd24pOwotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvdGVzdGNvbnRleHRtZW51L2Vk
aXRhYmxlIiwgQ29udGV4dE1lbnVGaXh0dXJlLAotICAgICAgICAgICAgICAgdGVzdEluZm9OZXco
IjxodG1sPjxib2R5PjxpbnB1dCBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MDsgdG9w
OjAnIHNpemU9JzM1Jz48L2lucHV0Pj48L2JvZHk+PC9odG1sPiIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfRURJVEFCTEUpLAotICAg
ICAgICAgICAgICAgY29udGV4dE1lbnVGaXh0dXJlU2V0dXAsIHRlc3RDb250ZXh0TWVudSwgY29u
dGV4dE1lbnVGaXh0dXJlVGVhcmRvd24pOwotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvdGVzdGNv
bnRleHRtZW51L2xpbmsiLCBDb250ZXh0TWVudUZpeHR1cmUsCi0gICAgICAgICAgICAgICB0ZXN0
SW5mb05ldygiPGh0bWw+PGJvZHk+PGEgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjA7
IHRvcDowJyBocmVmPSdodHRwOi8vd3d3LmV4YW1wbGUuY29tJz5IRUxMTyBXT1JMRDwvYT48L2Jv
ZHk+PC9odG1sPiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfSElUX1RFU1Rf
UkVTVUxUX0NPTlRFWFRfTElOSyksCi0gICAgICAgICAgICAgICBjb250ZXh0TWVudUZpeHR1cmVT
ZXR1cCwgdGVzdENvbnRleHRNZW51LCBjb250ZXh0TWVudUZpeHR1cmVUZWFyZG93bik7Ci0gICAg
Z190ZXN0X2FkZCgiL3dlYmtpdC90ZXN0Y29udGV4dG1lbnUvY3VzdG9taXRlbSIsIENvbnRleHRN
ZW51Rml4dHVyZSwKLSAgICAgICAgICAgICAgIHRlc3RJbmZvTmV3KCI8aHRtbD48Ym9keT48aDE+
V2ViS2l0R1RLKyE8L2gxPjwvYm9keT48L2h0bWw+IiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9ET0NVTUVOVCksCi0gICAgICAgICAg
ICAgICBjb250ZXh0TWVudUZpeHR1cmVTZXR1cCwgdGVzdENvbnRleHRNZW51Q3VzdG9tSXRlbSwg
Y29udGV4dE1lbnVGaXh0dXJlVGVhcmRvd24pOwotCi0gICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsK
LX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGNvcHlhbmRwYXN0
ZS5jIGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGNvcHlhbmRwYXN0ZS5jCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjM4ZWE2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQvZ3RrL3Rlc3RzL3Rlc3Rjb3B5YW5kcGFzdGUuYworKysgL2Rldi9udWxsCkBAIC0xLDI2NiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNs
dWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgotI2luY2x1ZGUgPHdlYmtp
dC93ZWJraXQuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oPgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dFJlZi5oPgotCi10eXBlZGVmIHN0cnVjdCB7
Ci0gICAgY2hhciogcGFnZTsKLSAgICBjaGFyKiBleHBlY3RlZENvbnRlbnQ7Ci19IFRlc3RJbmZv
OwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgR3RrV2lkZ2V0KiB3aW5kb3c7Ci0gICAgV2ViS2l0
V2ViVmlldyogd2ViVmlldzsKLSAgICBHTWFpbkxvb3AqIGxvb3A7Ci0gICAgVGVzdEluZm8qIGlu
Zm87Ci19IENvcHlBbmRQYXN0ZUZpeHR1cmU7Ci0KLVRlc3RJbmZvKgotdGVzdF9pbmZvX25ldyhj
b25zdCBjaGFyKiBwYWdlLCBjb25zdCBjaGFyKiBleHBlY3RlZENvbnRlbnQpCi17Ci0gICAgVGVz
dEluZm8qIGluZm87Ci0gICAgaW5mbyA9IGdfc2xpY2VfbmV3MChUZXN0SW5mbyk7Ci0gICAgaW5m
by0+cGFnZSA9IGdfc3RyZHVwKHBhZ2UpOwotICAgIGlmIChleHBlY3RlZENvbnRlbnQpCi0gICAg
ICAgIGluZm8tPmV4cGVjdGVkQ29udGVudCA9IGdfc3RyZHVwKGV4cGVjdGVkQ29udGVudCk7Ci0g
ICAgcmV0dXJuIGluZm87Ci19Ci0KLXZvaWQKLXRlc3RfaW5mb19kZXN0cm95KFRlc3RJbmZvKiBp
bmZvKQotewotICAgIGdfZnJlZShpbmZvLT5wYWdlKTsKLSAgICBnX2ZyZWUoaW5mby0+ZXhwZWN0
ZWRDb250ZW50KTsKLSAgICBnX3NsaWNlX2ZyZWUoVGVzdEluZm8sIGluZm8pOwotfQotCi1zdGF0
aWMgdm9pZCBjb3B5X2FuZF9wYXN0ZV9maXh0dXJlX3NldHVwKENvcHlBbmRQYXN0ZUZpeHR1cmUq
IGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBmaXh0dXJlLT5sb29wID0gZ19t
YWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotCi0gICAgZml4dHVyZS0+d2luZG93ID0gZ3RrX3dp
bmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7Ci0gICAgZml4dHVyZS0+d2ViVmlldyA9IFdF
QktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotCi0gICAgZ3RrX2NvbnRhaW5l
cl9hZGQoR1RLX0NPTlRBSU5FUihmaXh0dXJlLT53aW5kb3cpLCBHVEtfV0lER0VUKGZpeHR1cmUt
PndlYlZpZXcpKTsKLX0KLQotc3RhdGljIHZvaWQgY29weV9hbmRfcGFzdGVfZml4dHVyZV90ZWFy
ZG93bihDb3B5QW5kUGFzdGVGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17
Ci0gICAgZ3RrX3dpZGdldF9kZXN0cm95KGZpeHR1cmUtPndpbmRvdyk7Ci0gICAgZ19tYWluX2xv
b3BfdW5yZWYoZml4dHVyZS0+bG9vcCk7Ci0gICAgdGVzdF9pbmZvX2Rlc3Ryb3koZml4dHVyZS0+
aW5mbyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGxvYWRfc3RhdHVzX2NiKFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcsIEdQYXJhbVNwZWMqIHNwZWMsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgQ29weUFuZFBh
c3RlRml4dHVyZSogZml4dHVyZSA9IChDb3B5QW5kUGFzdGVGaXh0dXJlKilkYXRhOwotICAgIFdl
YktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh3
ZWJWaWV3KTsKLSAgICBpZiAoc3RhdHVzICE9IFdFQktJVF9MT0FEX0ZJTklTSEVEKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCA9IGd0a19jbGlwYm9hcmRf
Z2V0KEdES19TRUxFQ1RJT05fQ0xJUEJPQVJEKTsKLSAgICBndGtfY2xpcGJvYXJkX2NsZWFyKGNs
aXBib2FyZCk7Ci0KLSAgICB3ZWJraXRfd2ViX3ZpZXdfY29weV9jbGlwYm9hcmQod2ViVmlldyk7
Ci0KLSAgICBnY2hhciogdGV4dCA9IGd0a19jbGlwYm9hcmRfd2FpdF9mb3JfdGV4dChjbGlwYm9h
cmQpOwotICAgIGdfYXNzZXJ0KHRleHQgfHwgIWZpeHR1cmUtPmluZm8tPmV4cGVjdGVkQ29udGVu
dCk7Ci0gICAgZ19hc3NlcnQoIXRleHQgfHwgIXN0cmNtcCh0ZXh0LCBmaXh0dXJlLT5pbmZvLT5l
eHBlY3RlZENvbnRlbnQpKTsKLSAgICBnX2ZyZWUodGV4dCk7Ci0KLSAgICAvLyBWZXJpZnkgdGhh
dCB0aGUgbWFya3VwIHN0YXJ0cyB3aXRoIHRoZSBwcm9wZXIgY29udGVudC10eXBlIG1ldGEgdGFn
IHByZWZpeC4KLSAgICBHdGtTZWxlY3Rpb25EYXRhKiBzZWxlY3Rpb25EYXRhID0gZ3RrX2NsaXBi
b2FyZF93YWl0X2Zvcl9jb250ZW50cyhjbGlwYm9hcmQsIGdka19hdG9tX2ludGVybigidGV4dC9o
dG1sIiwgRkFMU0UpKTsKLSAgICBpZiAoc2VsZWN0aW9uRGF0YSkgewotICAgICAgICBzdGF0aWMg
Y29uc3QgY2hhciogbWFya3VwUHJlZml4ID0gIjxtZXRhIGh0dHAtZXF1aXY9XCJjb250ZW50LXR5
cGVcIiBjb250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04XCI+IjsKLSAgICAgICAgY2hh
ciogbWFya3VwID0gZ19zdHJuZHVwKChjb25zdCBjaGFyKikgZ3RrX3NlbGVjdGlvbl9kYXRhX2dl
dF9kYXRhKHNlbGVjdGlvbkRhdGEpLAotICAgICAgICAgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX2dl
dF9sZW5ndGgoc2VsZWN0aW9uRGF0YSkpOwotICAgICAgICBnX2Fzc2VydChzdHJsZW4obWFya3Vw
UHJlZml4KSA8PSBzdHJsZW4obWFya3VwKSk7Ci0gICAgICAgIGdfYXNzZXJ0KCFzdHJuY21wKG1h
cmt1cFByZWZpeCwgbWFya3VwLCBzdHJsZW4obWFya3VwUHJlZml4KSkpOwotICAgICAgICBnX2Zy
ZWUobWFya3VwKTsKLSAgICB9Ci0KLSAgICBnX2Fzc2VydCghZ3RrX2NsaXBib2FyZF93YWl0X2lz
X3VyaXNfYXZhaWxhYmxlKGNsaXBib2FyZCkpOwotICAgIGdfYXNzZXJ0KCFndGtfY2xpcGJvYXJk
X3dhaXRfaXNfaW1hZ2VfYXZhaWxhYmxlKGNsaXBib2FyZCkpOwotCi0gICAgZ19tYWluX2xvb3Bf
cXVpdChmaXh0dXJlLT5sb29wKTsKLX0KLQotZ2Jvb2xlYW4gbWFwX2V2ZW50X2NiKEd0a1dpZGdl
dCAqd2lkZ2V0LCBHZGtFdmVudCogZXZlbnQsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgQ29weUFu
ZFBhc3RlRml4dHVyZSogZml4dHVyZSA9IChDb3B5QW5kUGFzdGVGaXh0dXJlKilkYXRhOwotICAg
IHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhmaXh0dXJlLT53ZWJWaWV3LCBmaXh0dXJlLT5p
bmZvLT5wYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGV4dC9odG1sIiwg
InV0Zi04IiwgImZpbGU6Ly8iKTsKLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lk
IHRlc3RfY29weV9hbmRfcGFzdGUoQ29weUFuZFBhc3RlRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0
cG9pbnRlciBkYXRhKQotewotICAgIGZpeHR1cmUtPmluZm8gPSAoVGVzdEluZm8qKWRhdGE7Ci0g
ICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53aW5kb3csICJtYXAtZXZlbnQiLAotICAgICAg
ICAgICAgICAgICAgICAgR19DQUxMQkFDSyhtYXBfZXZlbnRfY2IpLCBmaXh0dXJlKTsKLQotICAg
IGd0a193aWRnZXRfc2hvdyhmaXh0dXJlLT53aW5kb3cpOwotICAgIGd0a193aWRnZXRfc2hvdyhH
VEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpKTsKLSAgICBndGtfd2luZG93X3ByZXNlbnQoR1RL
X1dJTkRPVyhmaXh0dXJlLT53aW5kb3cpKTsKLSAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMoR1RL
X1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSk7Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1
cmUtPndlYlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwKLSAgICAgICAgICAgICAgICAgICAg
IEdfQ0FMTEJBQ0sobG9hZF9zdGF0dXNfY2IpLCBmaXh0dXJlKTsKLQotICAgIGdfbWFpbl9sb29w
X3J1bihmaXh0dXJlLT5sb29wKTsKLX0KLQotc3RhdGljIENvcHlBbmRQYXN0ZUZpeHR1cmUqIGN1
cnJlbnRGaXh0dXJlOwotc3RhdGljIEpTVmFsdWVSZWYgcnVuUGFzdGVUZXN0Q2FsbGJhY2soSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlz
T2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNb
XSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1cyhH
VEtfV0lER0VUKGN1cnJlbnRGaXh0dXJlLT53ZWJWaWV3KSk7Ci0KLSAgICAvLyBTaW11bGF0ZSBh
IHBhc3RlIGtleWJvYXJkIHNlcXVlbmNlLgotICAgIEdka0V2ZW50KiBldmVudCA9IGdka19ldmVu
dF9uZXcoR0RLX0tFWV9QUkVTUyk7Ci0gICAgZXZlbnQtPmtleS5rZXl2YWwgPSBnZGtfdW5pY29k
ZV90b19rZXl2YWwoJ3YnKTsKLSAgICBldmVudC0+a2V5LnN0YXRlID0gR0RLX0NPTlRST0xfTUFT
SzsKLSAgICBldmVudC0+a2V5LndpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyhHVEtfV0lE
R0VUKGN1cnJlbnRGaXh0dXJlLT53ZWJWaWV3KSk7Ci0gICAgZ19vYmplY3RfcmVmKGV2ZW50LT5r
ZXkud2luZG93KTsKLSNpZm5kZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSAgICBHZGtEZXZpY2VNYW5h
Z2VyKiBtYW5hZ2VyID0gIGdka19kaXNwbGF5X2dldF9kZXZpY2VfbWFuYWdlcihnZGtfd2luZG93
X2dldF9kaXNwbGF5KGV2ZW50LT5rZXkud2luZG93KSk7Ci0gICAgZ2RrX2V2ZW50X3NldF9kZXZp
Y2UoZXZlbnQsIGdka19kZXZpY2VfbWFuYWdlcl9nZXRfY2xpZW50X3BvaW50ZXIobWFuYWdlcikp
OwotI2VuZGlmCi0KLSAgICBHZGtLZXltYXBLZXkqIGtleXM7Ci0gICAgZ2ludCBuX2tleXM7Ci0g
ICAgaWYgKGdka19rZXltYXBfZ2V0X2VudHJpZXNfZm9yX2tleXZhbChnZGtfa2V5bWFwX2dldF9k
ZWZhdWx0KCksIGV2ZW50LT5rZXkua2V5dmFsLCAma2V5cywgJm5fa2V5cykpIHsKLSAgICAgICAg
ZXZlbnQtPmtleS5oYXJkd2FyZV9rZXljb2RlID0ga2V5c1swXS5rZXljb2RlOwotICAgICAgICBn
X2ZyZWUoa2V5cyk7Ci0gICAgfQotCi0gICAgZ3RrX21haW5fZG9fZXZlbnQoZXZlbnQpOwotICAg
IGV2ZW50LT5rZXkudHlwZSA9IEdES19LRVlfUkVMRUFTRTsKLSAgICBndGtfbWFpbl9kb19ldmVu
dChldmVudCk7Ci0gICAgZ2RrX2V2ZW50X2ZyZWUoZXZlbnQpOwotCi0gICAgSlNTdHJpbmdSZWYg
c2NyaXB0U3RyaW5nID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImRvY3VtZW50LmJv
ZHkuaW5uZXJIVE1MOyIpOwotICAgIEpTVmFsdWVSZWYgdmFsdWUgPSBKU0V2YWx1YXRlU2NyaXB0
KGNvbnRleHQsIHNjcmlwdFN0cmluZywgMCwgMCwgMCwgMCk7Ci0gICAgSlNTdHJpbmdSZWxlYXNl
KHNjcmlwdFN0cmluZyk7Ci0KLSAgICBnX2Fzc2VydChKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwg
dmFsdWUpKTsKLSAgICBKU1N0cmluZ1JlZiBhY3R1YWwgPSBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNv
bnRleHQsIHZhbHVlLCBleGNlcHRpb24pOwotICAgIGdfYXNzZXJ0KCFleGNlcHRpb24gfHwgISpl
eGNlcHRpb24pOwotICAgIGdfYXNzZXJ0KGN1cnJlbnRGaXh0dXJlLT5pbmZvLT5leHBlY3RlZENv
bnRlbnQpOwotICAgIEpTU3RyaW5nUmVmIGV4cGVjdGVkID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoY3VycmVudEZpeHR1cmUtPmluZm8tPmV4cGVjdGVkQ29udGVudCk7Ci0gICAgZ19h
c3NlcnQoSlNTdHJpbmdJc0VxdWFsKGV4cGVjdGVkLCBhY3R1YWwpKTsKLQotICAgIEpTU3RyaW5n
UmVsZWFzZShleHBlY3RlZCk7Ci0gICAgSlNTdHJpbmdSZWxlYXNlKGFjdHVhbCk7Ci0gICAgZ19t
YWluX2xvb3BfcXVpdChjdXJyZW50Rml4dHVyZS0+bG9vcCk7Ci0gICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgdm9pZCB3aW5kb3dfb2JqZWN0X2Ns
ZWFyZWRfY2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIFdlYktpdFdlYkZyYW1lKiB3
ZWJfZnJhbWUsIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3df
b2JqZWN0LCBncG9pbnRlciBkYXRhKQotewotICAgIEpTU3RyaW5nUmVmIG5hbWUgPSBKU1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicnVuVGVzdCIpOwotICAgIEpTT2JqZWN0UmVmIHRlc3RD
b21wbGV0ZSA9IEpTT2JqZWN0TWFrZUZ1bmN0aW9uV2l0aENhbGxiYWNrKGNvbnRleHQsIG5hbWUs
IHJ1blBhc3RlVGVzdENhbGxiYWNrKTsKLSAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQs
IHdpbmRvd19vYmplY3QsIG5hbWUsIHRlc3RDb21wbGV0ZSwga0pTUHJvcGVydHlBdHRyaWJ1dGVO
b25lLCAwKTsKLSAgICBKU1N0cmluZ1JlbGVhc2UobmFtZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBh
c3RpbmdfdGVzdF9nZXRfZGF0YV9jYWxsYmFjayhHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCwgR3Rr
U2VsZWN0aW9uRGF0YSogc2VsZWN0aW9uX2RhdGEsIGd1aW50IGluZm8sIGdwb2ludGVyIGRhdGEp
Ci17Ci0gICAgZ3RrX3NlbGVjdGlvbl9kYXRhX3NldChzZWxlY3Rpb25fZGF0YSwgZ2RrX2F0b21f
aW50ZXJuKCJ0ZXh0L2h0bWwiLCBGQUxTRSksIDgsIChjb25zdCBndWNoYXIqKSBkYXRhLCBzdHJs
ZW4oKGNoYXIqKWRhdGEpICsgMSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhc3RpbmdfdGVzdF9jbGVh
cl9kYXRhX2NhbGxiYWNrKEd0a0NsaXBib2FyZCogY2xpcGJvYXJkLCBncG9pbnRlciBkYXRhKQot
ewotICAgIGdfZnJlZShkYXRhKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF9wYXN0aW5nX21hcmt1
cChDb3B5QW5kUGFzdGVGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0g
ICAgZml4dHVyZS0+aW5mbyA9IChUZXN0SW5mbyopZGF0YTsKLSAgICBjdXJyZW50Rml4dHVyZSA9
IGZpeHR1cmU7Ci0KLSAgICBHdGtUYXJnZXRMaXN0KiB0YXJnZXRMaXN0ID0gZ3RrX3RhcmdldF9s
aXN0X25ldygwLCAwKTsKLSAgICBndGtfdGFyZ2V0X2xpc3RfYWRkKHRhcmdldExpc3QsIGdka19h
dG9tX2ludGVybigidGV4dC9odG1sIiwgRkFMU0UpLCAwLCAwKTsKLQotICAgIGludCBudW1iZXJP
ZlRhcmdldHMgPSAxOwotICAgIEd0a1RhcmdldEVudHJ5KiB0YXJnZXRUYWJsZSA9IGd0a190YXJn
ZXRfdGFibGVfbmV3X2Zyb21fbGlzdCh0YXJnZXRMaXN0LCAmbnVtYmVyT2ZUYXJnZXRzKTsKLSAg
ICBndGtfY2xpcGJvYXJkX3NldF93aXRoX2RhdGEoZ3RrX2NsaXBib2FyZF9nZXQoR0RLX1NFTEVD
VElPTl9DTElQQk9BUkQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRU
YWJsZSwgbnVtYmVyT2ZUYXJnZXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXN0aW5nX3Rlc3RfZ2V0X2RhdGFfY2FsbGJhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBhc3RpbmdfdGVzdF9jbGVhcl9kYXRhX2NhbGxiYWNrLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnX3N0cmR1cChmaXh0dXJlLT5pbmZvLT5leHBlY3RlZENvbnRlbnQp
KTsKLSAgICBndGtfdGFyZ2V0X2xpc3RfdW5yZWYodGFyZ2V0TGlzdCk7Ci0gICAgZ3RrX3Rhcmdl
dF90YWJsZV9mcmVlKHRhcmdldFRhYmxlLCBudW1iZXJPZlRhcmdldHMpOwotCi0gICAgZ19zaWdu
YWxfY29ubmVjdChmaXh0dXJlLT53aW5kb3csICJtYXAtZXZlbnQiLAotICAgICAgICAgICAgICAg
ICAgICAgR19DQUxMQkFDSyhtYXBfZXZlbnRfY2IpLCBmaXh0dXJlKTsKLSAgICBnX3NpZ25hbF9j
b25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJ3aW5kb3ctb2JqZWN0LWNsZWFyZWQiLAotICAgICAg
ICAgICAgICAgICAgICAgR19DQUxMQkFDSyh3aW5kb3dfb2JqZWN0X2NsZWFyZWRfY2FsbGJhY2sp
LCBmaXh0dXJlKTsKLQotICAgIGd0a193aWRnZXRfc2hvdyhmaXh0dXJlLT53aW5kb3cpOwotICAg
IGd0a193aWRnZXRfc2hvdyhHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpKTsKLSAgICBndGtf
d2luZG93X3ByZXNlbnQoR1RLX1dJTkRPVyhmaXh0dXJlLT53aW5kb3cpKTsKLQotICAgIGdfbWFp
bl9sb29wX3J1bihmaXh0dXJlLT5sb29wKTsKLX0KLQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hh
cioqIGFyZ3YpCi17Ci0gICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOwotCi0g
ICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKLSAgICBjb25z
dCBjaGFyKiBzZWxlY3RlZF9zcGFuX2h0bWwgPSAiPGh0bWw+PGJvZHk+IgotICAgICAgICAiPHNw
YW4gaWQ9XCJtYWluc3BhblwiPkFsbCB3b3JrIGFuZCBubyBwbGF5IDxzcGFuPm1ha2UgSmFjayBh
IGR1bGw8L3NwYW4+IGJveS48L3NwYW4+IgotICAgICAgICAiPHNjcmlwdD5kb2N1bWVudC5nZXRT
ZWxlY3Rpb24oKS5jb2xsYXBzZSgpO1xuIgotICAgICAgICAiZG9jdW1lbnQuZ2V0U2VsZWN0aW9u
KCkuc2VsZWN0QWxsQ2hpbGRyZW4oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW5zcGFuJykp
O1xuIgotICAgICAgICAiPC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4iOwotICAgIGNvbnN0IGNoYXIq
IG5vX3NlbGVjdGlvbl9odG1sID0gIjxodG1sPjxib2R5PiIKLSAgICAgICAgIjxzcGFuIGlkPVwi
bWFpbnNwYW5cIj5BbGwgd29yayBhbmQgbm8gcGxheSA8c3Bhbj5tYWtlIEphY2sgYSBkdWxsPC9z
cGFuPiBib3k8L3NwYW4+IgotICAgICAgICAiPHNjcmlwdD5kb2N1bWVudC5nZXRTZWxlY3Rpb24o
KS5jb2xsYXBzZSgpO1xuIgotICAgICAgICAiPC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4iOwotCi0g
ICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9jb3B5YW5kcGFzdGUvc2VsZWN0aW9uIiwgQ29weUFuZFBh
c3RlRml4dHVyZSwKLSAgICAgICAgICAgICAgIHRlc3RfaW5mb19uZXcoc2VsZWN0ZWRfc3Bhbl9o
dG1sLCAiQWxsIHdvcmsgYW5kIG5vIHBsYXkgbWFrZSBKYWNrIGEgZHVsbCBib3kuIiksCi0gICAg
ICAgICAgICAgICBjb3B5X2FuZF9wYXN0ZV9maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAg
dGVzdF9jb3B5X2FuZF9wYXN0ZSwKLSAgICAgICAgICAgICAgIGNvcHlfYW5kX3Bhc3RlX2ZpeHR1
cmVfdGVhcmRvd24pOwotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvY29weWFuZHBhc3RlL25vLXNl
bGVjdGlvbiIsIENvcHlBbmRQYXN0ZUZpeHR1cmUsCi0gICAgICAgICAgICAgICB0ZXN0X2luZm9f
bmV3KG5vX3NlbGVjdGlvbl9odG1sLCAwKSwKLSAgICAgICAgICAgICAgIGNvcHlfYW5kX3Bhc3Rl
X2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X2NvcHlfYW5kX3Bhc3RlLAotICAg
ICAgICAgICAgICAgY29weV9hbmRfcGFzdGVfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAgICBjb25z
dCBjaGFyKiBwYXN0ZV90ZXN0X2h0bWwgPSAiPGh0bWw+IgotICAgICAgICAiPGJvZHkgb25Mb2Fk
PVwiZG9jdW1lbnQuYm9keS5mb2N1cygpOyBydW5UZXN0KCk7XCIgY29udGVudEVkaXRhYmxlPVwi
dHJ1ZVwiPiIKLSAgICAgICAgIjwvYm9keT48L2h0bWw+IjsKLSAgICBnX3Rlc3RfYWRkKCIvd2Vi
a2l0L2NvcHlhbmRwYXN0ZS9wYXN0ZS1tYXJrdXAiLCBDb3B5QW5kUGFzdGVGaXh0dXJlLAotICAg
ICAgICAgICAgICAgdGVzdF9pbmZvX25ldyhwYXN0ZV90ZXN0X2h0bWwsICJib2JieSIpLAotICAg
ICAgICAgICAgICAgY29weV9hbmRfcGFzdGVfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAg
IHRlc3RfcGFzdGluZ19tYXJrdXAsCi0gICAgICAgICAgICAgICBjb3B5X2FuZF9wYXN0ZV9maXh0
dXJlX3RlYXJkb3duKTsKLQotICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7Ci19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0ZG9tZG9jdW1lbnQuYyBiL1NvdXJjZS9XZWJL
aXQvZ3RrL3Rlc3RzL3Rlc3Rkb21kb2N1bWVudC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA0Yzk5N2RkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rk
b21kb2N1bWVudC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDI4ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
InRlc3RfdXRpbHMuaCIKLQotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxnbGliL2dzdGRp
by5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+Ci0K
LSNkZWZpbmUgSFRNTF9ET0NVTUVOVF9USVRMRSAiPGh0bWw+PGhlYWQ+PHRpdGxlPlRoaXMgaXMg
dGhlIHRpdGxlPC90aXRsZT48L2hlYWQ+PGJvZHk+PC9ib2R5PjwvaHRtbD4iCi0jZGVmaW5lIEhU
TUxfRE9DVU1FTlRfRUxFTUVOVFMgIjxodG1sPjxib2R5Pjx1bD48bGk+MTwvbGk+PGxpPjI8L2xp
PjxsaT4zPC9saT48L3VsPjwvYm9keT48L2h0bWw+IgotI2RlZmluZSBIVE1MX0RPQ1VNRU5UX0VM
RU1FTlRTX0NMQVNTICI8aHRtbD48Ym9keT48ZGl2IGNsYXNzPVwidGVzdFwiPjwvZGl2PjxkaXYg
Y2xhc3M9XCJzdHJhbmdlXCI+PC9kaXY+PGRpdiBjbGFzcz1cInRlc3RcIj48L2Rpdj48L2JvZHk+
PC9odG1sPiIKLSNkZWZpbmUgSFRNTF9ET0NVTUVOVF9FTEVNRU5UU19JRCAiPGh0bWw+PGJvZHk+
PGRpdiBpZD1cInRlc3Rva1wiPjwvZGl2PjxkaXYgaWQ9XCJ0ZXN0YmFkXCI+Zmlyc3Q8L2Rpdj48
ZGl2IGlkPVwidGVzdGJhZFwiPnNlY29uZDwvZGl2PjwvYm9keT48L2h0bWw+IgotI2RlZmluZSBI
VE1MX0RPQ1VNRU5UX0xJTktTICI8aHRtbD48aGVhZD48dGl0bGU+VGl0bGU8L3RpdGxlPjwvaGVh
ZD48Ym9keT48YSBocmVmPVwiYWJvdXQ6YmxhbmtcIj5ibGFuazwvYT48YSBocmVmPVwiaHR0cDov
L3d3dy5nb29nbGUuY29tXCI+Z29vZ2xlPC9hPjxhIGhyZWY9XCJodHRwOi8vd3d3LndlYmtpdC5v
cmdcIj53ZWJraXQ8L2E+PC9ib2R5PjwvaHRtbD4iCi0jZGVmaW5lIEhUTUxfRE9DVU1FTlRfSUZS
QU1FICI8aHRtbD48aGVhZD48dGl0bGU+SUZyYW1lPC90aXRsZT48L2hlYWQ+PGJvZHk+PGlmcmFt
ZSBpZD0naWZyYW1lJz48L2lmcmFtZT48ZGl2IGlkPSd0ZXN0Jz48L2Rpdj48L2JvZHk+PC9odG1s
PiIKLSNkZWZpbmUgSFRNTF9ET0NVTUVOVF9UQUJMRSAiPGh0bWw+PGJvZHk+PHRhYmxlIGlkPVwi
dGFibGVcIj48L3RhYmxlPjwvYm9keT48L2h0bWw+IgotI2RlZmluZSBIVE1MX0RPQ1VNRU5UX0VW
QUxVQVRFICI8aHRtbD48aGVhZD48dGl0bGU+PC90aXRsZT48L2hlYWQ+PGJvZHk+PGRpdj5GaXJz
dCBkaXY8L2Rpdj48ZGl2PlNlY29uZCBkaXY8L2Rpdj48L2JvZHk+PC9odG1sPiIKLQotdHlwZWRl
ZiBzdHJ1Y3QgewotICAgIEd0a1dpZGdldCogd2ViVmlldzsKLSAgICBHTWFpbkxvb3AqIGxvb3A7
Ci19IERvbURvY3VtZW50Rml4dHVyZTsKLQotc3RhdGljIGdib29sZWFuIGZpbmlzaF9sb2FkaW5n
KERvbURvY3VtZW50Rml4dHVyZSogZml4dHVyZSkKLXsKLSAgICBpZiAoZ19tYWluX2xvb3BfaXNf
cnVubmluZyhmaXh0dXJlLT5sb29wKSkKLSAgICAgICAgZ19tYWluX2xvb3BfcXVpdChmaXh0dXJl
LT5sb29wKTsKLQotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQgZG9tX2RvY3Vt
ZW50X2ZpeHR1cmVfc2V0dXAoRG9tRG9jdW1lbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2lu
dGVyIGRhdGEpCi17Ci0gICAgZml4dHVyZS0+bG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBU
UlVFKTsKLSAgICBmaXh0dXJlLT53ZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygpOwotICAg
IGdfb2JqZWN0X3JlZl9zaW5rKGZpeHR1cmUtPndlYlZpZXcpOwotCi0gICAgaWYgKGRhdGEgIT0g
TlVMTCkKLSAgICAgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklF
VyAoZml4dHVyZS0+d2ViVmlldyksIChjb25zdCBjaGFyKikgZGF0YSwgTlVMTCwgTlVMTCwgTlVM
TCk7Ci0KLSAgICBnX2lkbGVfYWRkKChHU291cmNlRnVuYylmaW5pc2hfbG9hZGluZywgZml4dHVy
ZSk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1cmUtPmxvb3ApOwotfQotCi1zdGF0aWMgdm9p
ZCBkb21fZG9jdW1lbnRfZml4dHVyZV90ZWFyZG93bihEb21Eb2N1bWVudEZpeHR1cmUqIGZpeHR1
cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBpZiAoZml4dHVyZS0+d2ViVmlldykKLSAg
ICAgICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+d2ViVmlldyk7Ci0gICAgZ19tYWluX2xvb3Bf
dW5yZWYoZml4dHVyZS0+bG9vcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RfZG9tX2RvY3VtZW50
X3RpdGxlKERvbURvY3VtZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQot
ewotICAgIGdfYXNzZXJ0KGZpeHR1cmUpOwotICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSAoV2Vi
S2l0V2ViVmlldyopZml4dHVyZS0+d2ViVmlldzsKLSAgICBnX2Fzc2VydCh2aWV3KTsKLSAgICBX
ZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1
bWVudCh2aWV3KTsKLSAgICBnX2Fzc2VydChkb2N1bWVudCk7Ci0gICAgZ2NoYXIqIHRpdGxlID0g
d2Via2l0X2RvbV9kb2N1bWVudF9nZXRfdGl0bGUoZG9jdW1lbnQpOwotICAgIGdfYXNzZXJ0KHRp
dGxlKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGl0bGUsID09LCAiVGhpcyBpcyB0aGUgdGl0bGUi
KTsKLSAgICBnX2ZyZWUodGl0bGUpOwotICAgIHdlYmtpdF9kb21fZG9jdW1lbnRfc2V0X3RpdGxl
KGRvY3VtZW50LCAiVGhpcyBpcyB0aGUgc2Vjb25kIHRpdGxlIik7Ci0gICAgdGl0bGUgPSB3ZWJr
aXRfZG9tX2RvY3VtZW50X2dldF90aXRsZShkb2N1bWVudCk7Ci0gICAgZ19hc3NlcnQodGl0bGUp
OwotICAgIGdfYXNzZXJ0X2NtcHN0cih0aXRsZSwgPT0sICJUaGlzIGlzIHRoZSBzZWNvbmQgdGl0
bGUiKTsKLSAgICBnX2ZyZWUodGl0bGUpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X2RvbV9kb2N1
bWVudF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWUoRG9tRG9jdW1lbnRGaXh0dXJlKiBmaXh0dXJl
LCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19hc3NlcnQoZml4dHVyZSk7Ci0gICAgV2Vi
S2l0V2ViVmlldyogdmlldyA9IChXZWJLaXRXZWJWaWV3KilmaXh0dXJlLT53ZWJWaWV3OwotICAg
IGdfYXNzZXJ0KHZpZXcpOwotICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1bWVudCA9IHdlYmtp
dF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50KHZpZXcpOwotICAgIGdfYXNzZXJ0KGRvY3VtZW50
KTsKLSAgICBXZWJLaXRET01Ob2RlTGlzdCogbGlzdCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0
X2VsZW1lbnRzX2J5X3RhZ19uYW1lKGRvY3VtZW50LCAibGkiKTsKLSAgICBnX2Fzc2VydChsaXN0
KTsKLSAgICBndWxvbmcgbGVuZ3RoID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChs
aXN0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQobGVuZ3RoLCA9PSwgMyk7Ci0KLSAgICBndWludCBp
OwotCi0gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIFdlYktpdERP
TU5vZGUqIGl0ZW0gPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtKGxpc3QsIGkpOwotICAgICAg
ICBnX2Fzc2VydChpdGVtKTsKLSAgICAgICAgV2ViS2l0RE9NRWxlbWVudCogZWxlbWVudCA9IChX
ZWJLaXRET01FbGVtZW50KilpdGVtOwotICAgICAgICBnX2Fzc2VydChlbGVtZW50KTsKLSAgICAg
ICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9kb21fZWxlbWVudF9nZXRfdGFnX25hbWUoZWxlbWVu
dCksID09LCAiTEkiKTsKLSAgICAgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQqIGh0bWxFbGVtZW50
ID0gKFdlYktpdERPTUhUTUxFbGVtZW50KillbGVtZW50OwotICAgICAgICBjaGFyKiBuID0gZ19z
dHJkdXBfcHJpbnRmKCIlZCIsIGkrMSk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRf
ZG9tX2h0bWxfZWxlbWVudF9nZXRfaW5uZXJfdGV4dChodG1sRWxlbWVudCksID09LCBuKTsKLSAg
ICAgICAgZ19mcmVlKG4pOwotICAgIH0KLQotICAgIGdfb2JqZWN0X3VucmVmKGxpc3QpOwotfQot
Ci1zdGF0aWMgdm9pZCB0ZXN0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfY2xhc3NfbmFt
ZShEb21Eb2N1bWVudEZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAg
ICBnX2Fzc2VydChmaXh0dXJlKTsKLSAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gKFdlYktpdFdl
YlZpZXcqKWZpeHR1cmUtPndlYlZpZXc7Ci0gICAgZ19hc3NlcnQodmlldyk7Ci0gICAgV2ViS2l0
RE9NRG9jdW1lbnQqIGRvY3VtZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQo
dmlldyk7Ci0gICAgZ19hc3NlcnQoZG9jdW1lbnQpOwotICAgIFdlYktpdERPTU5vZGVMaXN0KiBs
aXN0ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfY2xhc3NfbmFtZShkb2N1
bWVudCwgInRlc3QiKTsKLSAgICBnX2Fzc2VydChsaXN0KTsKLSAgICBndWxvbmcgbGVuZ3RoID0g
d2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChsaXN0KTsKLSAgICBnX2Fzc2VydF9jbXBp
bnQobGVuZ3RoLCA9PSwgMik7Ci0KLSAgICBndWludCBpOwotCi0gICAgZm9yIChpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIFdlYktpdERPTU5vZGUqIGl0ZW0gPSB3ZWJraXRfZG9t
X25vZGVfbGlzdF9pdGVtKGxpc3QsIGkpOwotICAgICAgICBnX2Fzc2VydChpdGVtKTsKLSAgICAg
ICAgV2ViS2l0RE9NRWxlbWVudCogZWxlbWVudCA9IChXZWJLaXRET01FbGVtZW50KilpdGVtOwot
ICAgICAgICBnX2Fzc2VydChlbGVtZW50KTsKLSAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtp
dF9kb21fZWxlbWVudF9nZXRfdGFnX25hbWUoZWxlbWVudCksID09LCAiRElWIik7Ci0gICAgfQot
Ci0gICAgZ19vYmplY3RfdW5yZWYobGlzdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RfZG9tX2Rv
Y3VtZW50X2dldF9lbGVtZW50X2J5X2lkKERvbURvY3VtZW50Rml4dHVyZSogZml4dHVyZSwgZ2Nv
bnN0cG9pbnRlciBkYXRhKQotewotICAgIGdfYXNzZXJ0KGZpeHR1cmUpOwotICAgIFdlYktpdFdl
YlZpZXcqIHZpZXcgPSAoV2ViS2l0V2ViVmlldyopZml4dHVyZS0+d2ViVmlldzsKLSAgICBnX2Fz
c2VydCh2aWV3KTsKLSAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKLSAgICBnX2Fzc2VydChkb2N1bWVudCk7Ci0g
ICAgV2ViS2l0RE9NRWxlbWVudCogZWxlbWVudCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2Vs
ZW1lbnRfYnlfaWQoZG9jdW1lbnQsICJ0ZXN0b2siKTsKLSAgICBnX2Fzc2VydChlbGVtZW50KTsK
LSAgICBlbGVtZW50ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudF9ieV9pZChkb2N1
bWVudCwgInRoaXMtaWQtZG9lcy1ub3QtZXhpc3QiKTsKLSAgICBnX2Fzc2VydChlbGVtZW50ID09
IDApOwotICAgIC8qIFRoZSBET00gc3BlYyBzYXlzIHRoZSByZXR1cm4gdmFsdWUgaXMgdW5kZWZp
bmVkIHdoZW4gdGhlcmUncwotICAgICAqIG1vcmUgdGhhbiBvbmUgZWxlbWVudCB3aXRoIHRoZSBz
YW1lIGlkOyBpbiBvdXIgY2FzZSB0aGUgZmlyc3QKLSAgICAgKiBvbmUgd2lsbCBiZSByZXR1cm5l
ZCAqLwotICAgIGVsZW1lbnQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50X2J5X2lk
KGRvY3VtZW50LCAidGVzdGJhZCIpOwotICAgIGdfYXNzZXJ0KGVsZW1lbnQpOwotICAgIFdlYktp
dERPTUhUTUxFbGVtZW50KiBodG1sRWxlbWVudCA9IChXZWJLaXRET01IVE1MRWxlbWVudCopZWxl
bWVudDsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0X2lu
bmVyX3RleHQoaHRtbEVsZW1lbnQpLCA9PSwgImZpcnN0Iik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRl
c3RfZG9tX2RvY3VtZW50X2dldF9saW5rcyhEb21Eb2N1bWVudEZpeHR1cmUqIGZpeHR1cmUsIGdj
b25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBnX2Fzc2VydChmaXh0dXJlKTsKLSAgICBXZWJLaXRX
ZWJWaWV3KiB2aWV3ID0gKFdlYktpdFdlYlZpZXcqKWZpeHR1cmUtPndlYlZpZXc7Ci0gICAgZ19h
c3NlcnQodmlldyk7Ci0gICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50ID0gd2Via2l0X3dl
Yl92aWV3X2dldF9kb21fZG9jdW1lbnQodmlldyk7Ci0gICAgZ19hc3NlcnQoZG9jdW1lbnQpOwot
ICAgIFdlYktpdERPTUhUTUxDb2xsZWN0aW9uICpjb2xsZWN0aW9uID0gd2Via2l0X2RvbV9kb2N1
bWVudF9nZXRfbGlua3MoZG9jdW1lbnQpOwotICAgIGdfYXNzZXJ0KGNvbGxlY3Rpb24pOwotICAg
IGd1bG9uZyBsZW5ndGggPSB3ZWJraXRfZG9tX2h0bWxfY29sbGVjdGlvbl9nZXRfbGVuZ3RoKGNv
bGxlY3Rpb24pOwotICAgIGdfYXNzZXJ0X2NtcGludChsZW5ndGgsID09LCAzKTsKLQotICAgIGd1
aW50IGk7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgc3Rh
dGljIGNvbnN0IGNoYXIqIG5hbWVzW10gPSB7ICJibGFuayIsICJnb29nbGUiLCAid2Via2l0IiB9
OwotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogdXJpc1tdID0geyAiYWJvdXQ6YmxhbmsiLCAi
aHR0cDovL3d3dy5nb29nbGUuY29tLyIsICJodHRwOi8vd3d3LndlYmtpdC5vcmcvIiB9OwotICAg
ICAgICBXZWJLaXRET01Ob2RlICpub2RlID0gd2Via2l0X2RvbV9odG1sX2NvbGxlY3Rpb25faXRl
bShjb2xsZWN0aW9uLCBpKTsKLSAgICAgICAgZ19hc3NlcnQobm9kZSk7Ci0gICAgICAgIFdlYktp
dERPTUVsZW1lbnQqIGVsZW1lbnQgPSAoV2ViS2l0RE9NRWxlbWVudCopbm9kZTsKLSAgICAgICAg
Z19hc3NlcnRfY21wc3RyKHdlYmtpdF9kb21fZWxlbWVudF9nZXRfdGFnX25hbWUoZWxlbWVudCks
ID09LCAiQSIpOwotICAgICAgICBXZWJLaXRET01IVE1MRWxlbWVudCAqaHRtbEVsZW1lbnQgPSAo
V2ViS2l0RE9NSFRNTEVsZW1lbnQqKWVsZW1lbnQ7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3
ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfaW5uZXJfdGV4dChodG1sRWxlbWVudCksID09LCBu
YW1lc1tpXSk7Ci0gICAgICAgIFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50ICphbmNob3IgPSAo
V2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqKWVsZW1lbnQ7Ci0gICAgICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X2hyZWYoYW5jaG9yKSwgPT0s
IHVyaXNbaV0pOwotICAgIH0KLSAgICBnX29iamVjdF91bnJlZihjb2xsZWN0aW9uKTsKLX0KLQot
c3RhdGljIHZvaWQgdGVzdF9kb21fZG9jdW1lbnRfaW5zZXJ0X3JvdyhEb21Eb2N1bWVudEZpeHR1
cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBnX2Fzc2VydChmaXh0dXJl
KTsKLSAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gKFdlYktpdFdlYlZpZXcqKWZpeHR1cmUtPndl
YlZpZXc7Ci0gICAgZ19hc3NlcnQodmlldyk7Ci0gICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQodmlldyk7Ci0gICAgZ19hc3Nl
cnQoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChkb2N1bWVudCkpOwotICAgIFdlYktpdERPTUVsZW1l
bnQqIHRhYmxlID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudF9ieV9pZChkb2N1bWVu
dCwgInRhYmxlIik7Ci0gICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0VMRU1FTlQodGFi
bGUpKTsKLSAgICBXZWJLaXRET01IVE1MQ29sbGVjdGlvbiogcm93cyA9IHdlYmtpdF9kb21faHRt
bF90YWJsZV9lbGVtZW50X2dldF9yb3dzKFdFQktJVF9ET01fSFRNTF9UQUJMRV9FTEVNRU5UKHRh
YmxlKSk7Ci0gICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0NPTExFQ1RJT04ocm93cykp
OwotCi0gICAgLy8gVGFibGUgaXMgaW5pdGlhbGx5IGVtcHR5LgotICAgIGdfYXNzZXJ0X2NtcGlu
dCh3ZWJraXRfZG9tX2h0bWxfY29sbGVjdGlvbl9nZXRfbGVuZ3RoKHJvd3MpLCA9PSwgMCk7Ci0g
ICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQqIHJvdyA9IHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVt
ZW50X2luc2VydF9yb3coV0VCS0lUX0RPTV9IVE1MX1RBQkxFX0VMRU1FTlQodGFibGUpLCAtMSwg
TlVMTCk7Ci0gICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX1JPV19FTEVNRU5U
KHJvdykpOwotICAgIHJvd3MgPSB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRfcm93
cyhXRUJLSVRfRE9NX0hUTUxfVEFCTEVfRUxFTUVOVCh0YWJsZSkpOwotICAgIGdfYXNzZXJ0KFdF
QktJVF9ET01fSVNfSFRNTF9DT0xMRUNUSU9OKHJvd3MpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
d2Via2l0X2RvbV9odG1sX2NvbGxlY3Rpb25fZ2V0X2xlbmd0aChyb3dzKSwgPT0sIDEpOwotfQot
Ci1zdGF0aWMgdm9pZCB0ZXN0X2RvbV9kb2N1bWVudF9ldmFsdWF0ZShEb21Eb2N1bWVudEZpeHR1
cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBnX2Fzc2VydChmaXh0dXJl
KTsKLSAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gKFdlYktpdFdlYlZpZXcqKWZpeHR1cmUtPndl
YlZpZXc7Ci0gICAgZ19hc3NlcnQodmlldyk7Ci0gICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQodmlldyk7Ci0gICAgZ19hc3Nl
cnQoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChkb2N1bWVudCkpOwotICAgIFdlYktpdERPTU5vZGVM
aXN0KiBsaXN0ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWUo
ZG9jdW1lbnQsICJodG1sIik7Ci0gICAgZ19hc3NlcnQobGlzdCk7Ci0gICAgZ3Vsb25nIGxlbmd0
aCA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2dldF9sZW5ndGgobGlzdCk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KGxlbmd0aCwgPT0sIDEpOwotICAgIFdlYktpdERPTU5vZGUqIGh0bWwgPSB3ZWJraXRf
ZG9tX25vZGVfbGlzdF9pdGVtKGxpc3QsIDApOwotICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNf
Tk9ERShodG1sKSk7Ci0KLSAgICBXZWJLaXRET01YUGF0aFJlc3VsdCogcmVzdWx0ID0gd2Via2l0
X2RvbV9kb2N1bWVudF9ldmFsdWF0ZShkb2N1bWVudCwgIi8vZGl2IiwgaHRtbCwgTlVMTCwgMCwg
TlVMTCwgTlVMTCk7Ci0gICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19YUEFUSF9SRVNVTFQocmVz
dWx0KSk7Ci0KLSAgICBpbnQgaSA9IDA7Ci0gICAgV2ViS2l0RE9NTm9kZSogbm9kZTsKLSAgICB3
aGlsZSAoIChub2RlID0gd2Via2l0X2RvbV94cGF0aF9yZXN1bHRfaXRlcmF0ZV9uZXh0KHJlc3Vs
dCwgTlVMTCkpICE9IE5VTEwpIHsKLSAgICAgICAgZ19hc3NlcnQobm9kZSk7Ci0gICAgICAgIFdl
YktpdERPTUVsZW1lbnQqIGVsZW1lbnQgPSAoV2ViS2l0RE9NRWxlbWVudCopbm9kZTsKLSAgICAg
ICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9kb21fZWxlbWVudF9nZXRfdGFnX25hbWUoZWxlbWVu
dCksID09LCAiRElWIik7Ci0gICAgICAgIGkrKzsKLSAgICB9Ci0gICAgZ19hc3NlcnRfY21waW50
KGksID09LCAyKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGxpc3QpOwotfQotCi1zdGF0aWMgdm9p
ZCB3ZWFrX25vdGlmeShncG9pbnRlciBkYXRhLCBHT2JqZWN0KiB6b21iaWUpCi17Ci0gICAgZ3Vp
bnQqIGNvdW50ID0gKGd1aW50KilkYXRhOwotICAgICgqY291bnQpKys7Ci19Ci0KLXN0YXRpYyB2
b2lkIHRlc3RfZG9tX2RvY3VtZW50X2dhcmJhZ2VfY29sbGVjdGlvbihEb21Eb2N1bWVudEZpeHR1
cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBndWludCBjb3VudCA9IDA7
Ci0gICAgZ19hc3NlcnQoZml4dHVyZSk7Ci0gICAgV2ViS2l0V2ViVmlldyogdmlldyA9IChXZWJL
aXRXZWJWaWV3KilmaXh0dXJlLT53ZWJWaWV3OwotICAgIGdfYXNzZXJ0KHZpZXcpOwotICAgIFdl
YktpdERPTURvY3VtZW50KiBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3Vt
ZW50KHZpZXcpOwotICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsKLSAgICBnX29iamVjdF93ZWFrX3Jl
ZihHX09CSkVDVChkb2N1bWVudCksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsK
LSAgICBXZWJLaXRET01IVE1MSGVhZEVsZW1lbnQqIGhlYWQgPSB3ZWJraXRfZG9tX2RvY3VtZW50
X2dldF9oZWFkKGRvY3VtZW50KTsKLSAgICBnX2Fzc2VydChoZWFkKTsKLSAgICBnX29iamVjdF93
ZWFrX3JlZihHX09CSkVDVChoZWFkKSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQp
OwotICAgIFdlYktpdERPTUhUTUxFbGVtZW50KiBib2R5ID0gd2Via2l0X2RvbV9kb2N1bWVudF9n
ZXRfYm9keShkb2N1bWVudCk7Ci0gICAgZ19hc3NlcnQoYm9keSk7Ci0gICAgZ19vYmplY3Rfd2Vh
a19yZWYoR19PQkpFQ1QoYm9keSksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsK
LSAgICBXZWJLaXRET01IVE1MQ29sbGVjdGlvbiAqY29sbGVjdGlvbiA9IHdlYmtpdF9kb21fZG9j
dW1lbnRfZ2V0X2xpbmtzKGRvY3VtZW50KTsKLSAgICBnX2Fzc2VydChjb2xsZWN0aW9uKTsKLSAg
ICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVDVChjb2xsZWN0aW9uKSwgKEdXZWFrTm90aWZ5KXdl
YWtfbm90aWZ5LCAmY291bnQpOwotCi0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdF
QktJVF9XRUJfVklFVyh2aWV3KSwgSFRNTF9ET0NVTUVOVF9MSU5LUywgTlVMTCwgTlVMTCwgTlVM
TCk7Ci0KLSAgICB3aGlsZSAoZ19tYWluX2NvbnRleHRfcGVuZGluZyhOVUxMKSkKLSAgICAgICAg
Z19tYWluX2NvbnRleHRfaXRlcmF0aW9uKE5VTEwsIEZBTFNFKTsKLQotICAgIGdfYXNzZXJ0X2Nt
cHVpbnQoY291bnQsID09LCAzKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGNvbGxlY3Rpb24pOwot
ICAgIGdfYXNzZXJ0X2NtcHVpbnQoY291bnQsID09LCA0KTsKLQotICAgIGNvdW50ID0gMDsKLQot
ICAgIGRvY3VtZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQodmlldyk7Ci0g
ICAgZ19hc3NlcnQoZG9jdW1lbnQpOwotICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGRv
Y3VtZW50KSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOwotICAgIGhlYWQgPSB3
ZWJraXRfZG9tX2RvY3VtZW50X2dldF9oZWFkKGRvY3VtZW50KTsKLSAgICBnX2Fzc2VydChoZWFk
KTsKLSAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVDVChoZWFkKSwgKEdXZWFrTm90aWZ5KXdl
YWtfbm90aWZ5LCAmY291bnQpOwotICAgIGJvZHkgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9i
b2R5KGRvY3VtZW50KTsKLSAgICBnX2Fzc2VydChib2R5KTsKLSAgICBnX29iamVjdF93ZWFrX3Jl
ZihHX09CSkVDVChib2R5KSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOwotICAg
IGNvbGxlY3Rpb24gPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9saW5rcyhkb2N1bWVudCk7Ci0g
ICAgZ19hc3NlcnQoY29sbGVjdGlvbik7Ci0gICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1Qo
Y29sbGVjdGlvbiksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKLSAgICAvKiBB
c2sgdHdpY2UgZm9yIHRoZSBzYW1lIG9iamVjdCAqLwotICAgIFdlYktpdERPTUhUTUxDb2xsZWN0
aW9uKiBjb2xsZWN0aW9uMiA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2xpbmtzKGRvY3VtZW50
KTsKLSAgICBnX2Fzc2VydChjb2xsZWN0aW9uMik7Ci0gICAgZ19vYmplY3Rfd2Vha19yZWYoR19P
QkpFQ1QoY29sbGVjdGlvbjIpLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7Ci0K
LSAgICBnX29iamVjdF91bnJlZihkb2N1bWVudCk7Ci0gICAgZ19vYmplY3RfdW5yZWYoaGVhZCk7
Ci0gICAgZ19vYmplY3RfdW5yZWYoYm9keSk7Ci0gICAgZ19vYmplY3RfdW5yZWYoY29sbGVjdGlv
bik7Ci0gICAgZ19vYmplY3RfdW5yZWYoY29sbGVjdGlvbjIpOwotCi0gICAgZ19hc3NlcnRfY21w
dWludChjb3VudCwgPT0sIDUpOwotCi0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdF
QktJVF9XRUJfVklFVyh2aWV3KSwgSFRNTF9ET0NVTUVOVF9JRlJBTUUsIE5VTEwsIE5VTEwsIE5V
TEwpOwotCi0gICAgd2hpbGUgKGdfbWFpbl9jb250ZXh0X3BlbmRpbmcoTlVMTCkpCi0gICAgICAg
IGdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbihOVUxMLCBGQUxTRSk7Ci0KLSAgICBjb3VudCA9IDA7
Ci0KLSAgICBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50KHZpZXcp
OwotICAgIFdlYktpdERPTUVsZW1lbnQqIGRpdiA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2Vs
ZW1lbnRfYnlfaWQoZG9jdW1lbnQsICJ0ZXN0Iik7Ci0gICAgZ19hc3NlcnQoZGl2KTsKLSAgICBn
X29iamVjdF93ZWFrX3JlZihHX09CSkVDVChkaXYpLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnks
ICZjb3VudCk7Ci0gICAgV2ViS2l0RE9NRWxlbWVudCogaWZyYW1lID0gd2Via2l0X2RvbV9kb2N1
bWVudF9nZXRfZWxlbWVudF9ieV9pZChkb2N1bWVudCwgImlmcmFtZSIpOwotICAgIGdfYXNzZXJ0
KGlmcmFtZSk7Ci0KLSAgICB3ZWJraXRfZG9tX2VsZW1lbnRfc2V0X2F0dHJpYnV0ZShpZnJhbWUs
ICJzcmMiLCAiZGF0YTo8aHRtbD48aGVhZD48L2hlYWQ+PC9odG1sPiIsIE5VTEwpOwotCi0gICAg
d2hpbGUgKGdfbWFpbl9jb250ZXh0X3BlbmRpbmcoTlVMTCkpCi0gICAgICAgIGdfbWFpbl9jb250
ZXh0X2l0ZXJhdGlvbihOVUxMLCBGQUxTRSk7Ci0KLSAgICBXZWJLaXRET01Eb2N1bWVudCogaWZy
YW1lRG9jdW1lbnQgPSB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X2NvbnRlbnRf
ZG9jdW1lbnQoV0VCS0lUX0RPTV9IVE1MX0lGUkFNRV9FTEVNRU5UKGlmcmFtZSkpOwotICAgIGdf
YXNzZXJ0KGlmcmFtZURvY3VtZW50KTsKLSAgICBoZWFkID0gd2Via2l0X2RvbV9kb2N1bWVudF9n
ZXRfaGVhZChpZnJhbWVEb2N1bWVudCk7Ci0gICAgZ19hc3NlcnQoaGVhZCk7Ci0gICAgZ19vYmpl
Y3Rfd2Vha19yZWYoR19PQkpFQ1QoaGVhZCksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNv
dW50KTsKLQotICAgIHdlYmtpdF9kb21fZWxlbWVudF9zZXRfYXR0cmlidXRlKGlmcmFtZSwgInNy
YyIsICJhYm91dDpibGFuayIsIE5VTEwpOwotCi0gICAgd2hpbGUgKGdfbWFpbl9jb250ZXh0X3Bl
bmRpbmcoTlVMTCkpCi0gICAgICAgIGdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbihOVUxMLCBGQUxT
RSk7Ci0KLSAgICBnX2Fzc2VydF9jbXB1aW50KGNvdW50LCA9PSwgMSk7Ci0KLSAgICB3ZWJraXRf
d2ViX3ZpZXdfbG9hZF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVXKHZpZXcpLCBIVE1MX0RPQ1VNRU5U
X0xJTktTLCBOVUxMLCBOVUxMLCBOVUxMKTsKLQotICAgIHdoaWxlIChnX21haW5fY29udGV4dF9w
ZW5kaW5nKE5VTEwpKQotICAgICAgICBnX21haW5fY29udGV4dF9pdGVyYXRpb24oTlVMTCwgRkFM
U0UpOwotCi0gICAgZ19hc3NlcnRfY21wdWludChjb3VudCwgPT0sIDIpOwotCi0gICAgY291bnQg
PSAwOwotCi0gICAgZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2
aWV3KTsKLSAgICBnX2Fzc2VydChkb2N1bWVudCk7Ci0gICAgZ19vYmplY3Rfd2Vha19yZWYoR19P
QkpFQ1QoZG9jdW1lbnQpLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7Ci0gICAg
LyogQXNrIHR3aWNlIGZvciB0aGUgRG9jdW1lbnQgKi8KLSAgICBXZWJLaXRET01Eb2N1bWVudCog
ZG9jdW1lbnQyID0gd2Via2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQodmlldyk7Ci0gICAg
Z19hc3NlcnQoZG9jdW1lbnQyKTsKLSAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVDVChkb2N1
bWVudDIpLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7Ci0gICAgaGVhZCA9IHdl
YmtpdF9kb21fZG9jdW1lbnRfZ2V0X2hlYWQoZG9jdW1lbnQpOwotICAgIGdfYXNzZXJ0KGhlYWQp
OwotICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGhlYWQpLCAoR1dlYWtOb3RpZnkpd2Vh
a19ub3RpZnksICZjb3VudCk7Ci0gICAgYm9keSA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2Jv
ZHkoZG9jdW1lbnQpOwotICAgIGdfYXNzZXJ0KGJvZHkpOwotICAgIGdfb2JqZWN0X3dlYWtfcmVm
KEdfT0JKRUNUKGJvZHkpLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7Ci0gICAg
Y29sbGVjdGlvbiA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2xpbmtzKGRvY3VtZW50KTsKLSAg
ICBnX2Fzc2VydChjb2xsZWN0aW9uKTsKLSAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVDVChj
b2xsZWN0aW9uKSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOwotCi0gICAgZ3Rr
X3dpZGdldF9kZXN0cm95KGZpeHR1cmUtPndlYlZpZXcpOwotICAgIGZpeHR1cmUtPndlYlZpZXcg
PSBOVUxMOwotCi0gICAgZ19hc3NlcnRfY21wdWludChjb3VudCwgPT0sIDQpOwotCi0gICAgZ19v
YmplY3RfdW5yZWYoY29sbGVjdGlvbik7Ci0KLSAgICBnX2Fzc2VydF9jbXB1aW50KGNvdW50LCA9
PSwgNSk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKLXsKLSAgICBndGtf
dGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0
dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwotCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9kb21k
b2N1bWVudC90ZXN0X3RpdGxlIiwKLSAgICAgICAgICAgICAgIERvbURvY3VtZW50Rml4dHVyZSwg
SFRNTF9ET0NVTUVOVF9USVRMRSwKLSAgICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJl
X3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF9kb21fZG9jdW1lbnRfdGl0bGUsCi0gICAgICAg
ICAgICAgICBkb21fZG9jdW1lbnRfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAgICBnX3Rlc3RfYWRk
KCIvd2Via2l0L2RvbWRvY3VtZW50L3Rlc3RfZ2V0X2VsZW1lbnRzX2J5X3RhZ19uYW1lIiwKLSAg
ICAgICAgICAgICAgIERvbURvY3VtZW50Rml4dHVyZSwgSFRNTF9ET0NVTUVOVF9FTEVNRU5UUywK
LSAgICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3NldHVwLAotICAgICAgICAgICAg
ICAgdGVzdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRzX2J5X3RhZ19uYW1lLAotICAgICAgICAg
ICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAgZ190ZXN0X2FkZCgi
L3dlYmtpdC9kb21kb2N1bWVudC90ZXN0X2dldF9lbGVtZW50c19ieV9jbGFzc19uYW1lIiwKLSAg
ICAgICAgICAgICAgIERvbURvY3VtZW50Rml4dHVyZSwgSFRNTF9ET0NVTUVOVF9FTEVNRU5UU19D
TEFTUywKLSAgICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3NldHVwLAotICAgICAg
ICAgICAgICAgdGVzdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRzX2J5X2NsYXNzX25hbWUsCi0g
ICAgICAgICAgICAgICBkb21fZG9jdW1lbnRfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAgICBnX3Rl
c3RfYWRkKCIvd2Via2l0L2RvbWRvY3VtZW50L3Rlc3RfZ2V0X2VsZW1lbnRfYnlfaWQiLAotICAg
ICAgICAgICAgICAgRG9tRG9jdW1lbnRGaXh0dXJlLCBIVE1MX0RPQ1VNRU5UX0VMRU1FTlRTX0lE
LAotICAgICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAg
ICAgICB0ZXN0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudF9ieV9pZCwKLSAgICAgICAgICAgICAg
IGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKTsKLQotICAgIGdfdGVzdF9hZGQoIi93ZWJr
aXQvZG9tZG9jdW1lbnQvdGVzdF9nZXRfbGlua3MiLAotICAgICAgICAgICAgICAgRG9tRG9jdW1l
bnRGaXh0dXJlLCBIVE1MX0RPQ1VNRU5UX0xJTktTLAotICAgICAgICAgICAgICAgZG9tX2RvY3Vt
ZW50X2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X2RvbV9kb2N1bWVudF9nZXRf
bGlua3MsCi0gICAgICAgICAgICAgICBkb21fZG9jdW1lbnRfZml4dHVyZV90ZWFyZG93bik7Ci0K
LSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2RvbWRvY3VtZW50L3Rlc3RfdGFibGVfaW5zZXJ0X3Jv
dyIsCi0gICAgICAgICAgICAgICBEb21Eb2N1bWVudEZpeHR1cmUsIEhUTUxfRE9DVU1FTlRfVEFC
TEUsCi0gICAgICAgICAgICAgICBkb21fZG9jdW1lbnRfZml4dHVyZV9zZXR1cCwKLSAgICAgICAg
ICAgICAgIHRlc3RfZG9tX2RvY3VtZW50X2luc2VydF9yb3csCi0gICAgICAgICAgICAgICBkb21f
ZG9jdW1lbnRfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2Rv
bWRvY3VtZW50L3Rlc3RfZG9jdW1lbnRfZXZhbHVhdGUiLAotICAgICAgICAgICAgICAgRG9tRG9j
dW1lbnRGaXh0dXJlLCBIVE1MX0RPQ1VNRU5UX0VWQUxVQVRFLAotICAgICAgICAgICAgICAgZG9t
X2RvY3VtZW50X2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X2RvbV9kb2N1bWVu
dF9ldmFsdWF0ZSwKLSAgICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3du
KTsKLQotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvZG9tZG9jdW1lbnQvdGVzdF9nYXJiYWdlX2Nv
bGxlY3Rpb24iLAotICAgICAgICAgICAgICAgRG9tRG9jdW1lbnRGaXh0dXJlLCBIVE1MX0RPQ1VN
RU5UX0xJTktTLAotICAgICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfc2V0dXAsCi0g
ICAgICAgICAgICAgICB0ZXN0X2RvbV9kb2N1bWVudF9nYXJiYWdlX2NvbGxlY3Rpb24sCi0gICAg
ICAgICAgICAgICBkb21fZG9jdW1lbnRfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAgICByZXR1cm4g
Z190ZXN0X3J1bigpOwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90
ZXN0ZG9tZG9td2luZG93LmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0ZG9tZG9td2lu
ZG93LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0ZmNkMTguLjAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvbWRvbXdpbmRvdy5jCisrKyAvZGV2L251
bGwKQEAgLTEsMjU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMu
TC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgInRlc3RfdXRpbHMuaCIKLQotI2luY2x1
ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgotI2luY2x1ZGUgPGd0ay9ndGsu
aD4KLSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+Ci0KLSNkZWZpbmUgSFRNTF9ET0NVTUVOVCAi
PGh0bWw+PGhlYWQ+PHRpdGxlPjwvdGl0bGU+PC9oZWFkPjxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+
I3Rlc3QgeyBmb250LXNpemU6IDE2cHg7IH08L3N0eWxlPjxib2R5PjxwIGlkPSd0ZXN0Jz50ZXN0
PC9wPjwvYm9keT48L2h0bWw+IgotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgR3RrV2lkZ2V0KiB3
ZWJWaWV3OwotICAgIEd0a1dpZGdldCogd2luZG93OwotICAgIFdlYktpdERPTURPTVdpbmRvdyog
ZG9tV2luZG93OwotICAgIEdNYWluTG9vcCogbG9vcDsKLQotICAgIGdib29sZWFuIGxvYWRlZDsK
LSAgICBnYm9vbGVhbiBjbGlja2VkOwotICAgIGdjb25zdHBvaW50ZXIgZGF0YTsKLX0gRG9tRG9t
dmlld0ZpeHR1cmU7Ci0KLXN0YXRpYyBnYm9vbGVhbiBmaW5pc2hfbG9hZGluZyhEb21Eb212aWV3
Rml4dHVyZSogZml4dHVyZSkKLXsKLSAgICBpZiAoZ19tYWluX2xvb3BfaXNfcnVubmluZyhmaXh0
dXJlLT5sb29wKSkKLSAgICAgICAgZ19tYWluX2xvb3BfcXVpdChmaXh0dXJlLT5sb29wKTsKLQot
ICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQgZG9tX2RvbXZpZXdfZml4dHVyZV9z
ZXR1cChEb21Eb212aWV3Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewot
ICAgIGZpeHR1cmUtPmxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7Ci0gICAgZml4
dHVyZS0+d2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7Ci0gICAg
Zml4dHVyZS0+d2ViVmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKLSAgICBmaXh0dXJlLT5k
YXRhID0gZGF0YTsKLQotICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIoZml4dHVy
ZS0+d2luZG93KSwgR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSk7Ci19Ci0KLXN0YXRpYyB2
b2lkIGRvbV9kb212aWV3X2ZpeHR1cmVfdGVhcmRvd24oRG9tRG9tdmlld0ZpeHR1cmUqIGZpeHR1
cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koZml4dHVy
ZS0+d2luZG93KTsKLSAgICBnX21haW5fbG9vcF91bnJlZihmaXh0dXJlLT5sb29wKTsKLX0KLQot
c3RhdGljIHZvaWQgZG9tX2RvbV93aW5kb3dfZml4dHVyZV9zZXR1cChEb21Eb212aWV3Rml4dHVy
ZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGZpeHR1cmUtPmxvb3AgPSBn
X21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7Ci0gICAgZml4dHVyZS0+d2ViVmlldyA9IHdlYmtp
dF93ZWJfdmlld19uZXcoKTsKLSAgICBnX29iamVjdF9yZWZfc2luayhmaXh0dXJlLT53ZWJWaWV3
KTsKLQotICAgIGlmIChkYXRhICE9IE5VTEwpCi0gICAgICAgIHdlYmtpdF93ZWJfdmlld19sb2Fk
X3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcgKGZpeHR1cmUtPndlYlZpZXcpLCAoY29uc3QgY2hhciop
IGRhdGEsIE5VTEwsIE5VTEwsIE5VTEwpOwotCi0gICAgZ19pZGxlX2FkZCgoR1NvdXJjZUZ1bmMp
ZmluaXNoX2xvYWRpbmcsIGZpeHR1cmUpOwotICAgIGdfbWFpbl9sb29wX3J1bihmaXh0dXJlLT5s
b29wKTsKLX0KLQotc3RhdGljIHZvaWQgZG9tX2RvbV93aW5kb3dfZml4dHVyZV90ZWFyZG93bihE
b21Eb212aWV3Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGlm
IChmaXh0dXJlLT53ZWJWaWV3KQotICAgICAgICBnX29iamVjdF91bnJlZihmaXh0dXJlLT53ZWJW
aWV3KTsKLSAgICBnX21haW5fbG9vcF91bnJlZihmaXh0dXJlLT5sb29wKTsKLX0KLQotc3RhdGlj
IGdib29sZWFuIGxvYWRlZENhbGxiYWNrKFdlYktpdERPTURPTVdpbmRvdyogdmlldywgV2ViS2l0
RE9NRXZlbnQqIGV2ZW50LCBEb21Eb212aWV3Rml4dHVyZSogZml4dHVyZSkKLXsKLSAgICBnX2Fz
c2VydChmaXh0dXJlLT5sb2FkZWQgPT0gRkFMU0UpOwotICAgIGZpeHR1cmUtPmxvYWRlZCA9IFRS
VUU7Ci0KLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBjbGlja2VkQ2Fs
bGJhY2soV2ViS2l0RE9NRE9NV2luZG93KiB2aWV3LCBXZWJLaXRET01FdmVudCogZXZlbnQsIERv
bURvbXZpZXdGaXh0dXJlKiBmaXh0dXJlKQotewotICAgIFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0
YXJnZXQ7Ci0gICAgZ3VzaG9ydCBwaGFzZTsKLQotICAgIGdfYXNzZXJ0KGV2ZW50KTsKLSAgICBn
X2Fzc2VydChXRUJLSVRfRE9NX0lTX0VWRU5UKGV2ZW50KSk7Ci0KLSAgICAvLyBXZSBzaG91bGQg
Y2F0Y2ggdGhpcyBpbiB0aGUgYnViYmxpbmcgdXAgcGhhc2UsIHNpbmNlIHdlIGFyZSBjb25uZWN0
aW5nIHRvIHRoZSB0b3BsZXZlbCBvYmplY3QKLSAgICBwaGFzZSA9IHdlYmtpdF9kb21fZXZlbnRf
Z2V0X2V2ZW50X3BoYXNlKGV2ZW50KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQocGhhc2UsID09LCAz
KTsKLQotICAgIHRhcmdldCA9IHdlYmtpdF9kb21fZXZlbnRfZ2V0X2N1cnJlbnRfdGFyZ2V0KGV2
ZW50KTsKLSAgICBnX2Fzc2VydCh0YXJnZXQgPT0gV0VCS0lUX0RPTV9FVkVOVF9UQVJHRVQodmll
dykpOwotCi0gICAgZ19hc3NlcnQoZml4dHVyZS0+Y2xpY2tlZCA9PSBGQUxTRSk7Ci0gICAgZml4
dHVyZS0+Y2xpY2tlZCA9IFRSVUU7Ci0KLSAgICBmaW5pc2hfbG9hZGluZyhmaXh0dXJlKTsKLQot
ICAgIHJldHVybiBGQUxTRTsKLX0KLQotZ2Jvb2xlYW4gbWFwX2V2ZW50X2NiKEd0a1dpZGdldCAq
d2lkZ2V0LCBHZGtFdmVudCogZXZlbnQsIERvbURvbXZpZXdGaXh0dXJlKiBmaXh0dXJlKQotewot
ICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcgKGZpeHR1cmUt
PndlYlZpZXcpLCAoY29uc3QgY2hhciopZml4dHVyZS0+ZGF0YSwgTlVMTCwgTlVMTCwgTlVMTCk7
Ci0KLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lkIGxvYWRfZXZlbnRfY2FsbGJh
Y2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgR1BhcmFtU3BlYyogc3BlYywgRG9tRG9tdmlld0Zp
eHR1cmUqIGZpeHR1cmUpCi17Ci0gICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRf
d2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYlZpZXcpOwotICAgIGlmIChzdGF0dXMgPT0gV0VC
S0lUX0xPQURfRklOSVNIRUQpIHsKLSAgICAgICAgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfYWRk
X2V2ZW50X2xpc3RlbmVyKFdFQktJVF9ET01fRVZFTlRfVEFSR0VUKGZpeHR1cmUtPmRvbVdpbmRv
dyksICJjbGljayIsIEdfQ0FMTEJBQ0soY2xpY2tlZENhbGxiYWNrKSwgZmFsc2UsIGZpeHR1cmUp
OwotCi0gICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmNsaWNrZWQgPT0gRkFMU0UpOwotICAgICAg
ICBndGtfdGVzdF93aWRnZXRfY2xpY2soR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSwgMSwg
MCk7Ci0gICAgfQotCi19Ci0KLXN0YXRpYyB2b2lkIHRlc3RfZG9tX2RvbXZpZXdfc2lnbmFscyhE
b21Eb212aWV3Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGdf
YXNzZXJ0KGZpeHR1cmUpOwotICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSAoV2ViS2l0V2ViVmll
dyopZml4dHVyZS0+d2ViVmlldzsKLSAgICBnX2Fzc2VydCh2aWV3KTsKLSAgICBXZWJLaXRET01E
b2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3
KTsKLSAgICBnX2Fzc2VydChkb2N1bWVudCk7Ci0gICAgV2ViS2l0RE9NRE9NV2luZG93KiBkb21X
aW5kb3cgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9kZWZhdWx0X3ZpZXcoZG9jdW1lbnQpOwot
ICAgIGdfYXNzZXJ0KGRvbVdpbmRvdyk7Ci0KLSAgICBmaXh0dXJlLT5kb21XaW5kb3cgPSBkb21X
aW5kb3c7Ci0KLSAgICB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9hZGRfZXZlbnRfbGlzdGVuZXIo
V0VCS0lUX0RPTV9FVkVOVF9UQVJHRVQoZml4dHVyZS0+ZG9tV2luZG93KSwgImxvYWQiLCBHX0NB
TExCQUNLKGxvYWRlZENhbGxiYWNrKSwgZmFsc2UsIGZpeHR1cmUpOwotICAgIGdfc2lnbmFsX2Nv
bm5lY3QoZml4dHVyZS0+d2luZG93LCAibWFwLWV2ZW50IiwgR19DQUxMQkFDSyhtYXBfZXZlbnRf
Y2IpLCBmaXh0dXJlKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJu
b3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhsb2FkX2V2ZW50X2NhbGxiYWNrKSwgZml4
dHVyZSk7Ci0KLSAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKGZpeHR1cmUtPndpbmRvdyk7Ci0gICAg
Z3RrX3dpbmRvd19wcmVzZW50KEdUS19XSU5ET1coZml4dHVyZS0+d2luZG93KSk7Ci0KLSAgICBn
X21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7Ci0KLSAgICBnX2Fzc2VydChmaXh0dXJlLT5s
b2FkZWQpOwotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmNsaWNrZWQpOwotfQotCi1zdGF0aWMgZ2Jv
b2xlYW4KLWNsaWNrZWRfY2IoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9N
RXZlbnQqIGV2ZW50LCBEb21Eb212aWV3Rml4dHVyZSogZml4dHVyZSkKLXsKLSAgICBnX2Fzc2Vy
dChmaXh0dXJlLT5jbGlja2VkID09IEZBTFNFKTsKLSAgICBmaXh0dXJlLT5jbGlja2VkID0gVFJV
RTsKLSAgICBmaW5pc2hfbG9hZGluZyhmaXh0dXJlKTsKLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0K
LXN0YXRpYyB2b2lkIGxvYWRfc3RhdHVzX2NhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcs
IEdQYXJhbVNwZWMqIHNwZWMsIERvbURvbXZpZXdGaXh0dXJlKiBmaXh0dXJlKQotewotICAgIFdl
YktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh3
ZWJWaWV3KTsKLSAgICBpZiAoc3RhdHVzID09IFdFQktJVF9MT0FEX0ZJTklTSEVEKSB7Ci0gICAg
ICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1bWVudDsKLSAgICAgICAgV2ViS2l0RE9NRE9NV2lu
ZG93KiBkb21XaW5kb3c7Ci0gICAgICAgIFdlYktpdERPTUVsZW1lbnQqIGVsZW1lbnQ7Ci0gICAg
ICAgIFdlYktpdERPTUV2ZW50KiBldmVudDsKLSAgICAgICAgZ2xvbmcgY2xpZW50WCwgY2xpZW50
WTsKLQotICAgICAgICBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50
KFdFQktJVF9XRUJfVklFVyhmaXh0dXJlLT53ZWJWaWV3KSk7Ci0gICAgICAgIGdfYXNzZXJ0KGRv
Y3VtZW50KTsKLSAgICAgICAgZG9tV2luZG93ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZGVm
YXVsdF92aWV3KGRvY3VtZW50KTsKLSAgICAgICAgZ19hc3NlcnQoZG9tV2luZG93KTsKLSAgICAg
ICAgZml4dHVyZS0+ZG9tV2luZG93ID0gZG9tV2luZG93OwotCi0gICAgICAgIGVsZW1lbnQgPSB3
ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50X2J5X2lkKGRvY3VtZW50LCAidGVzdCIpOwot
ICAgICAgICBnX2Fzc2VydChlbGVtZW50KTsKLSAgICAgICAgZXZlbnQgPSB3ZWJraXRfZG9tX2Rv
Y3VtZW50X2NyZWF0ZV9ldmVudChkb2N1bWVudCwgIk1vdXNlRXZlbnQiLCBOVUxMKTsKLSAgICAg
ICAgZ19hc3NlcnQoZXZlbnQpOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0VWRU5U
KGV2ZW50KSk7Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfTU9VU0VfRVZFTlQoZXZl
bnQpKTsKLSAgICAgICAgY2xpZW50WCA9IHdlYmtpdF9kb21fZWxlbWVudF9nZXRfY2xpZW50X2xl
ZnQoZWxlbWVudCk7Ci0gICAgICAgIGNsaWVudFkgPSB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2Ns
aWVudF90b3AoZWxlbWVudCk7Ci0gICAgICAgIHdlYmtpdF9kb21fbW91c2VfZXZlbnRfaW5pdF9t
b3VzZV9ldmVudChXRUJLSVRfRE9NX01PVVNFX0VWRU5UKGV2ZW50KSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjbGljayIsIFRSVUUsIFRSVUUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXh0dXJlLT5k
b21XaW5kb3csIDAsIDAsIDAsIGNsaWVudFgsIGNsaWVudFksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSwgRkFMU0UsIEZBTFNFLCBGQUxTRSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIFdFQktJ
VF9ET01fRVZFTlRfVEFSR0VUKGVsZW1lbnQpKTsKLSAgICAgICAgd2Via2l0X2RvbV9ldmVudF90
YXJnZXRfYWRkX2V2ZW50X2xpc3RlbmVyKFdFQktJVF9ET01fRVZFTlRfVEFSR0VUKGVsZW1lbnQp
LCAiY2xpY2siLCBHX0NBTExCQUNLKGNsaWNrZWRfY2IpLCBmYWxzZSwgZml4dHVyZSk7Ci0gICAg
ICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmNsaWNrZWQgPT0gRkFMU0UpOwotICAgICAgICB3ZWJraXRf
ZG9tX2V2ZW50X3RhcmdldF9kaXNwYXRjaF9ldmVudChXRUJLSVRfRE9NX0VWRU5UX1RBUkdFVChl
bGVtZW50KSwgZXZlbnQsIE5VTEwpOwotICAgIH0KLQotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X2Rv
bV9kb212aWV3X2Rpc3BhdGNoX2V2ZW50KERvbURvbXZpZXdGaXh0dXJlKiBmaXh0dXJlLCBnY29u
c3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53aW5kb3cs
ICJtYXAtZXZlbnQiLCBHX0NBTExCQUNLKG1hcF9ldmVudF9jYiksIGZpeHR1cmUpOwotICAgIGdf
c2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2ViVmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLCBH
X0NBTExCQUNLKGxvYWRfc3RhdHVzX2NhbGxiYWNrKSwgZml4dHVyZSk7Ci0KLSAgICBndGtfd2lk
Z2V0X3Nob3dfYWxsKGZpeHR1cmUtPndpbmRvdyk7Ci0gICAgZ3RrX3dpbmRvd19wcmVzZW50KEdU
S19XSU5ET1coZml4dHVyZS0+d2luZG93KSk7Ci0KLSAgICBnX21haW5fbG9vcF9ydW4gKGZpeHR1
cmUtPmxvb3ApOwotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmNsaWNrZWQpOwotfQotCi1zdGF0aWMg
dm9pZCB0ZXN0X2RvbV9kb21fd2luZG93X2dldF9jb21wdXRlZF9zdHlsZShEb21Eb212aWV3Rml4
dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIFdlYktpdERPTURvY3Vt
ZW50KiBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50KFdFQktJVF9X
RUJfVklFVyhmaXh0dXJlLT53ZWJWaWV3KSk7Ci0gICAgZ19hc3NlcnQoZG9jdW1lbnQpOwotICAg
IFdlYktpdERPTURPTVdpbmRvdyogZG9tV2luZG93ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRf
ZGVmYXVsdF92aWV3KGRvY3VtZW50KTsKLSAgICBnX2Fzc2VydChkb21XaW5kb3cpOwotCi0gICAg
V2ViS2l0RE9NRWxlbWVudCogIGVsZW1lbnQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVt
ZW50X2J5X2lkKGRvY3VtZW50LCAidGVzdCIpOwotICAgIGdfYXNzZXJ0KGVsZW1lbnQpOwotICAg
IGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfRUxFTUVOVChlbGVtZW50KSk7Ci0gICAgV2ViS2l0RE9N
Q1NTU3R5bGVEZWNsYXJhdGlvbiogY3NzU3R5bGUgPSB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0
X2NvbXB1dGVkX3N0eWxlKGRvbVdpbmRvdywgZWxlbWVudCwgTlVMTCk7Ci0gICAgZ2NoYXIqIGZv
bnRTaXplID0gd2Via2l0X2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25fZ2V0X3Byb3BlcnR5X3Zh
bHVlKGNzc1N0eWxlLCAiZm9udC1zaXplIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKGZvbnRTaXpl
LCA9PSwgIjE2cHgiKTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotewot
ICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLQotICAgIGdfdGVzdF9idWdf
YmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Vi
a2l0L2RvbWRvbXZpZXcvc2lnbmFscyIsCi0gICAgICAgICAgICAgICBEb21Eb212aWV3Rml4dHVy
ZSwgSFRNTF9ET0NVTUVOVCwKLSAgICAgICAgICAgICAgIGRvbV9kb212aWV3X2ZpeHR1cmVfc2V0
dXAsCi0gICAgICAgICAgICAgICB0ZXN0X2RvbV9kb212aWV3X3NpZ25hbHMsCi0gICAgICAgICAg
ICAgICBkb21fZG9tdmlld19maXh0dXJlX3RlYXJkb3duKTsKLQotICAgIGdfdGVzdF9hZGQoIi93
ZWJraXQvZG9tZG9tdmlldy9kaXNwYXRjaF9ldmVudCIsCi0gICAgICAgICAgICAgICBEb21Eb212
aWV3Rml4dHVyZSwgSFRNTF9ET0NVTUVOVCwKLSAgICAgICAgICAgICAgIGRvbV9kb212aWV3X2Zp
eHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X2RvbV9kb212aWV3X2Rpc3BhdGNoX2V2
ZW50LAotICAgICAgICAgICAgICAgZG9tX2RvbXZpZXdfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAg
ICBnX3Rlc3RfYWRkKCIvd2Via2l0L2RvbWRvbXdpbmRvdy9nZXRfY29tcHV0ZWRfc3R5bGUiLAot
ICAgICAgICAgICAgICAgRG9tRG9tdmlld0ZpeHR1cmUsIEhUTUxfRE9DVU1FTlQsCi0gICAgICAg
ICAgICAgICBkb21fZG9tX3dpbmRvd19maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVz
dF9kb21fZG9tX3dpbmRvd19nZXRfY29tcHV0ZWRfc3R5bGUsCi0gICAgICAgICAgICAgICBkb21f
ZG9tX3dpbmRvd19maXh0dXJlX3RlYXJkb3duKTsKLQotICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7
Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rkb21ub2RlLmMg
Yi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0ZG9tbm9kZS5jCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBlZDRiY2JkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rl
c3RzL3Rlc3Rkb21ub2RlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMTkgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAidGVzdF91dGlscy5oIgotCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGdsaWIv
Z3N0ZGlvLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQu
aD4KLQotI2RlZmluZSBIVE1MX0RPQ1VNRU5UX0hJRVJBUkNIWV9OQVZJR0FUSU9OICI8aHRtbD48
aGVhZD48dGl0bGU+VGhpcyBpcyB0aGUgdGl0bGU8L3RpdGxlPjwvaGVhZD48Ym9keT48cD4xPC9w
PjxwPjI8L3A+PHA+MzwvcD48L2JvZHk+PC9odG1sPiIKLSNkZWZpbmUgSFRNTF9ET0NVTUVOVF9O
T0RFX0lOU0VSVElPTiAiPGh0bWw+PGJvZHk+PC9ib2R5PjwvaHRtbD4iCi0KLXR5cGVkZWYgc3Ry
dWN0IHsKLSAgICBHdGtXaWRnZXQqIHdlYlZpZXc7Ci0gICAgR01haW5Mb29wKiBsb29wOwotfSBE
b21Ob2RlRml4dHVyZTsKLQotc3RhdGljIGdib29sZWFuIGZpbmlzaF9sb2FkaW5nKERvbU5vZGVG
aXh0dXJlKiBmaXh0dXJlKQotewotICAgIGlmIChnX21haW5fbG9vcF9pc19ydW5uaW5nKGZpeHR1
cmUtPmxvb3ApKQotICAgICAgICBnX21haW5fbG9vcF9xdWl0KGZpeHR1cmUtPmxvb3ApOwotCi0g
ICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCBkb21fbm9kZV9maXh0dXJlX3NldHVw
KERvbU5vZGVGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZml4
dHVyZS0+bG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLSAgICBmaXh0dXJlLT53
ZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKGZp
eHR1cmUtPndlYlZpZXcpOwotCi0gICAgaWYgKGRhdGEgIT0gTlVMTCkKLSAgICAgICAgd2Via2l0
X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklFVyhmaXh0dXJlLT53ZWJWaWV3KSwg
KGNvbnN0IGNoYXIqKWRhdGEsIE5VTEwsIE5VTEwsIE5VTEwpOwotCi0gICAgZ19pZGxlX2FkZCgo
R1NvdXJjZUZ1bmMpZmluaXNoX2xvYWRpbmcsIGZpeHR1cmUpOwotICAgIGdfbWFpbl9sb29wX3J1
bihmaXh0dXJlLT5sb29wKTsKLX0KLQotc3RhdGljIHZvaWQgZG9tX25vZGVfZml4dHVyZV90ZWFy
ZG93bihEb21Ob2RlRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAg
IGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPndlYlZpZXcpOwotICAgIGdfbWFpbl9sb29wX3VucmVm
KGZpeHR1cmUtPmxvb3ApOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X2RvbV9ub2RlX2hpZXJhcmNo
eV9uYXZpZ2F0aW9uKERvbU5vZGVGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEp
Ci17Ci0gICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50OwotICAgIFdlYktpdERPTUhUTUxI
ZWFkRWxlbWVudCogaGVhZDsKLSAgICBXZWJLaXRET01IVE1MQm9keUVsZW1lbnQqIGJvZHk7Ci0g
ICAgV2ViS2l0RE9NTm9kZUxpc3QqIGxpc3Q7Ci0gICAgV2ViS2l0RE9NTm9kZSogcHRyOwotICAg
IGd1bG9uZyBpLCBsZW5ndGg7Ci0KLSAgICBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRf
ZG9tX2RvY3VtZW50KFdFQktJVF9XRUJfVklFVyhmaXh0dXJlLT53ZWJWaWV3KSk7Ci0gICAgZ19h
c3NlcnQoZG9jdW1lbnQpOwotICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfRE9DVU1FTlQoZG9j
dW1lbnQpKTsKLSAgICBoZWFkID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfaGVhZChkb2N1bWVu
dCk7Ci0gICAgZ19hc3NlcnQoaGVhZCk7Ci0gICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1M
X0hFQURfRUxFTUVOVChoZWFkKSk7Ci0KLSAgICAvKiBUaXRsZSwgaGVhZCdzIGNoaWxkICovCi0g
ICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2hhc19jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05P
REUoaGVhZCkpKTsKLSAgICBsaXN0ID0gd2Via2l0X2RvbV9ub2RlX2dldF9jaGlsZF9ub2RlcyhX
RUJLSVRfRE9NX05PREUoaGVhZCkpOwotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfZG9tX25v
ZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QpLCA9PSwgMSk7Ci0gICAgcHRyID0gd2Via2l0X2RvbV9u
b2RlX2xpc3RfaXRlbShsaXN0LCAwKTsKLSAgICBnX2Fzc2VydChwdHIpOwotICAgIGdfYXNzZXJ0
KFdFQktJVF9ET01fSVNfSFRNTF9USVRMRV9FTEVNRU5UKHB0cikpOwotICAgIGdfb2JqZWN0X3Vu
cmVmKGxpc3QpOwotCi0gICAgLyogQm9keSwgSGVhZCBzaWJsaW5nICovCi0gICAgcHRyID0gd2Vi
a2l0X2RvbV9ub2RlX2dldF9uZXh0X3NpYmxpbmcoV0VCS0lUX0RPTV9OT0RFKGhlYWQpKTsKLSAg
ICBnX2Fzc2VydChwdHIpOwotICAgIGJvZHkgPSBXRUJLSVRfRE9NX0hUTUxfQk9EWV9FTEVNRU5U
KHB0cik7Ci0gICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0JPRFlfRUxFTUVOVChib2R5
KSk7Ci0KLSAgICAvKiBUaGVyZSBpcyBubyB0aGlyZCBzaWJsaW5nICovCi0gICAgcHRyID0gd2Vi
a2l0X2RvbV9ub2RlX2dldF9uZXh0X3NpYmxpbmcocHRyKTsKLSAgICBnX2Fzc2VydChwdHIgPT0g
TlVMTCk7Ci0KLSAgICAvKiBCb2R5J3MgcHJldmlvdXMgc2libGluZyBpcyBIZWFkICovCi0gICAg
cHRyID0gd2Via2l0X2RvbV9ub2RlX2dldF9wcmV2aW91c19zaWJsaW5nKFdFQktJVF9ET01fTk9E
RShib2R5KSk7Ci0gICAgZ19hc3NlcnQocHRyKTsKLSAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lT
X0hUTUxfSEVBRF9FTEVNRU5UKHB0cikpOwotCi0gICAgLyogQm9keSBoYXMgMyBjaGlsZHJlbiAq
LwotICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9oYXNfY2hpbGRfbm9kZXMoV0VCS0lUX0RP
TV9OT0RFKGJvZHkpKSk7Ci0gICAgbGlzdCA9IHdlYmtpdF9kb21fbm9kZV9nZXRfY2hpbGRfbm9k
ZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKTsKLSAgICBsZW5ndGggPSB3ZWJraXRfZG9tX25vZGVf
bGlzdF9nZXRfbGVuZ3RoKGxpc3QpOwotICAgIGdfYXNzZXJ0X2NtcGludChsZW5ndGgsID09LCAz
KTsKLQotICAgIC8qIFRoZSB0aHJlZSBvZiB0aGVtIGFyZSBQIHRhZ3MgKi8KLSAgICBmb3IgKGkg
PSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgcHRyID0gd2Via2l0X2RvbV9ub2RlX2xp
c3RfaXRlbShsaXN0LCBpKTsKLSAgICAgICAgZ19hc3NlcnQocHRyKTsKLSAgICAgICAgZ19hc3Nl
cnQoV0VCS0lUX0RPTV9JU19IVE1MX1BBUkFHUkFQSF9FTEVNRU5UKHB0cikpOwotICAgIH0KLQot
ICAgIC8qIEdvIGJhY2t3YXJkcyAqLwotICAgIGZvciAoaSA9IDA7IHB0cjsgcHRyID0gd2Via2l0
X2RvbV9ub2RlX2dldF9wcmV2aW91c19zaWJsaW5nKHB0ciksIGkrKykKLSAgICAgICAgLyogTm90
aGluZyAqLzsKLQotICAgIGdfYXNzZXJ0X2NtcGludChpLCA9PSwgMyk7Ci0gICAgZ19vYmplY3Rf
dW5yZWYobGlzdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RfZG9tX25vZGVfaW5zZXJ0aW9uKERv
bU5vZGVGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgV2ViS2l0
RE9NRG9jdW1lbnQqIGRvY3VtZW50OwotICAgIFdlYktpdERPTUhUTUxFbGVtZW50KiBib2R5Owot
ICAgIFdlYktpdERPTUVsZW1lbnQqIHAsICpkaXY7Ci0gICAgV2ViS2l0RE9NTm9kZUxpc3QqIGxp
c3Q7Ci0gICAgV2ViS2l0RE9NTm9kZSogbm9kZTsKLQotICAgIGRvY3VtZW50ID0gd2Via2l0X3dl
Yl92aWV3X2dldF9kb21fZG9jdW1lbnQoV0VCS0lUX1dFQl9WSUVXKGZpeHR1cmUtPndlYlZpZXcp
KTsKLSAgICBnX2Fzc2VydChkb2N1bWVudCk7Ci0gICAgYm9keSA9IHdlYmtpdF9kb21fZG9jdW1l
bnRfZ2V0X2JvZHkoZG9jdW1lbnQpOwotICAgIGdfYXNzZXJ0KGJvZHkpOwotICAgIGdfYXNzZXJ0
KFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKGJvZHkpKTsKLQotICAgIC8qIEJvZHkgc2hvdWxk
bid0IGhhdmUgYW55IGNoaWxkcmVuIGF0IHRoaXMgcG9pbnQgKi8KLSAgICBnX2Fzc2VydCh3ZWJr
aXRfZG9tX25vZGVfaGFzX2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSkgPT0gRkFM
U0UpOwotCi0gICAgLyogSW5zZXJ0IG9uZSBQIGVsZW1lbnQgKi8KLSAgICBwID0gd2Via2l0X2Rv
bV9kb2N1bWVudF9jcmVhdGVfZWxlbWVudChkb2N1bWVudCwgIlAiLCBOVUxMKTsKLSAgICB3ZWJr
aXRfZG9tX25vZGVfYXBwZW5kX2NoaWxkKFdFQktJVF9ET01fTk9ERShib2R5KSwgV0VCS0lUX0RP
TV9OT0RFKHApLCBOVUxMKTsKLQotICAgIC8qIE5vdyBpdCBzaG91bGQgaGF2ZSBvbmUsIHRoZSBz
YW1lIHRoYXQgd2UgaW5zZXJ0ZWQgKi8KLSAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaGFz
X2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSkpOwotICAgIGxpc3QgPSB3ZWJraXRf
ZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSk7Ci0gICAgZ19h
c3NlcnRfY21waW50KHdlYmtpdF9kb21fbm9kZV9saXN0X2dldF9sZW5ndGgobGlzdCksID09LCAx
KTsKLSAgICBub2RlID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0LCAwKTsKLSAgICBn
X2Fzc2VydChub2RlKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaXNfc2FtZV9ub2Rl
KFdFQktJVF9ET01fTk9ERShwKSwgbm9kZSkpOwotICAgIGdfb2JqZWN0X3VucmVmKGxpc3QpOwot
Ci0gICAgLyogUmVwbGFjZSB0aGUgUCB0YWcgd2l0aCBhIERJViB0YWcgKi8KLSAgICBkaXYgPSB3
ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9lbGVtZW50KGRvY3VtZW50LCAiRElWIiwgTlVMTCk7
Ci0gICAgd2Via2l0X2RvbV9ub2RlX3JlcGxhY2VfY2hpbGQoV0VCS0lUX0RPTV9OT0RFKGJvZHkp
LCBXRUJLSVRfRE9NX05PREUoZGl2KSwgV0VCS0lUX0RPTV9OT0RFKHApLCBOVUxMKTsKLSAgICBn
X2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaGFzX2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShi
b2R5KSkpOwotICAgIGxpc3QgPSB3ZWJraXRfZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVzKFdFQktJ
VF9ET01fTk9ERShib2R5KSk7Ci0gICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9kb21fbm9kZV9s
aXN0X2dldF9sZW5ndGgobGlzdCksID09LCAxKTsKLSAgICBub2RlID0gd2Via2l0X2RvbV9ub2Rl
X2xpc3RfaXRlbShsaXN0LCAwKTsKLSAgICBnX2Fzc2VydChub2RlKTsKLSAgICBnX2Fzc2VydCh3
ZWJraXRfZG9tX25vZGVfaXNfc2FtZV9ub2RlKFdFQktJVF9ET01fTk9ERShkaXYpLCBub2RlKSk7
Ci0gICAgZ19vYmplY3RfdW5yZWYobGlzdCk7Ci0KLSAgICAvKiBOb3cgcmVtb3ZlIHRoZSB0YWcg
Ki8KLSAgICB3ZWJraXRfZG9tX25vZGVfcmVtb3ZlX2NoaWxkKFdFQktJVF9ET01fTk9ERShib2R5
KSwgbm9kZSwgTlVMTCk7Ci0gICAgbGlzdCA9IHdlYmtpdF9kb21fbm9kZV9nZXRfY2hpbGRfbm9k
ZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X2Rv
bV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChsaXN0KSwgPT0sIDApOwotICAgIGdfb2JqZWN0X3VucmVm
KGxpc3QpOwotCi0gICAgLyogVGVzdCBpbnNlcnRfYmVmb3JlICovCi0KLSAgICAvKiBJZiByZWZD
aGlsZCBpcyBudWxsLCBpbnNlcnQgbmV3Q2hpbGQgYXMgbGFzdCBlbGVtZW50IG9mIHBhcmVudCAq
LwotICAgIGRpdiA9IHdlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2VsZW1lbnQoZG9jdW1lbnQs
ICJESVYiLCBOVUxMKTsKLSAgICB3ZWJraXRfZG9tX25vZGVfaW5zZXJ0X2JlZm9yZShXRUJLSVRf
RE9NX05PREUoYm9keSksIFdFQktJVF9ET01fTk9ERShkaXYpLCBOVUxMLCBOVUxMKTsKLSAgICBn
X2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaGFzX2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShi
b2R5KSkpOwotICAgIGxpc3QgPSB3ZWJraXRfZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVzKFdFQktJ
VF9ET01fTk9ERShib2R5KSk7Ci0gICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9kb21fbm9kZV9s
aXN0X2dldF9sZW5ndGgobGlzdCksID09LCAxKTsKLSAgICBub2RlID0gd2Via2l0X2RvbV9ub2Rl
X2xpc3RfaXRlbShsaXN0LCAwKTsKLSAgICBnX2Fzc2VydChub2RlKTsKLSAgICBnX2Fzc2VydCh3
ZWJraXRfZG9tX25vZGVfaXNfc2FtZV9ub2RlKFdFQktJVF9ET01fTk9ERShkaXYpLCBub2RlKSk7
Ci0gICAgZ19vYmplY3RfdW5yZWYobGlzdCk7Ci0KLSAgICAvKiBOb3cgaW5zZXJ0IGEgJ3AnIGJl
Zm9yZSAnZGl2JyAqLwotICAgIHAgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9lbGVtZW50
KGRvY3VtZW50LCAiUCIsIE5VTEwpOwotICAgIHdlYmtpdF9kb21fbm9kZV9pbnNlcnRfYmVmb3Jl
KFdFQktJVF9ET01fTk9ERShib2R5KSwgV0VCS0lUX0RPTV9OT0RFKHApLCBXRUJLSVRfRE9NX05P
REUoZGl2KSwgTlVMTCk7Ci0gICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2hhc19jaGlsZF9u
b2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpKTsKLSAgICBsaXN0ID0gd2Via2l0X2RvbV9ub2Rl
X2dldF9jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpOwotICAgIGdfYXNzZXJ0X2Nt
cGludCh3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QpLCA9PSwgMik7Ci0gICAg
bm9kZSA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdCwgMCk7Ci0gICAgZ19hc3NlcnQo
bm9kZSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2lzX3NhbWVfbm9kZShXRUJLSVRf
RE9NX05PREUocCksIG5vZGUpKTsKLSAgICBub2RlID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRl
bShsaXN0LCAxKTsKLSAgICBnX2Fzc2VydChub2RlKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfZG9t
X25vZGVfaXNfc2FtZV9ub2RlKFdFQktJVF9ET01fTk9ERShkaXYpLCBub2RlKSk7Ci0gICAgZ19v
YmplY3RfdW5yZWYobGlzdCk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikK
LXsKLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAgICBnX3Rlc3Rf
YnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwotCi0gICAgZ190ZXN0X2FkZCgi
L3dlYmtpdC9kb21ub2RlL3Rlc3RfaGllcmFyY2h5X25hdmlnYXRpb24iLAotICAgICAgICAgICAg
ICAgRG9tTm9kZUZpeHR1cmUsIEhUTUxfRE9DVU1FTlRfSElFUkFSQ0hZX05BVklHQVRJT04sCi0g
ICAgICAgICAgICAgICBkb21fbm9kZV9maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVz
dF9kb21fbm9kZV9oaWVyYXJjaHlfbmF2aWdhdGlvbiwKLSAgICAgICAgICAgICAgIGRvbV9ub2Rl
X2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9kb21ub2RlL3Rl
c3RfaW5zZXJ0aW9uIiwKLSAgICAgICAgICAgICAgIERvbU5vZGVGaXh0dXJlLCBIVE1MX0RPQ1VN
RU5UX05PREVfSU5TRVJUSU9OLAotICAgICAgICAgICAgICAgZG9tX25vZGVfZml4dHVyZV9zZXR1
cCwKLSAgICAgICAgICAgICAgIHRlc3RfZG9tX25vZGVfaW5zZXJ0aW9uLAotICAgICAgICAgICAg
ICAgZG9tX25vZGVfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAgICByZXR1cm4gZ190ZXN0X3J1bigp
OwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0ZG93bmxvYWQu
YyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rkb3dubG9hZC5jCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBmOGU4ZGVkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvZ3Rr
L3Rlc3RzL3Rlc3Rkb3dubG9hZC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzIyICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQ2hyaXN0aWFuIER5d2FuIDxjaHJpc3RpYW5AdHdvdG9h
c3RzLmRlPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLDEgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVk
ZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRlIDx3ZWJraXQv
d2Via2l0Lmg+Ci0KLUdNYWluTG9vcCogbG9vcDsKLWNoYXIqIHRlbXBvcmFyeUZpbGVuYW1lID0g
TlVMTDsKLVdlYktpdERvd25sb2FkKiB0aGVEb3dubG9hZCA9IE5VTEw7Ci0KLXN0YXRpYyB2b2lk
Ci10ZXN0X3dlYmtpdF9kb3dubG9hZF9jcmVhdGUodm9pZCkKLXsKLSAgICBXZWJLaXROZXR3b3Jr
UmVxdWVzdCogcmVxdWVzdDsKLSAgICBXZWJLaXREb3dubG9hZCogZG93bmxvYWQ7Ci0gICAgY29u
c3QgZ2NoYXIqIHVyaSA9ICJodHRwOi8vZXhhbXBsZS5jb20iOwotICAgIGdjaGFyKiB0bXBEaXI7
Ci0KLSAgICByZXF1ZXN0ID0gd2Via2l0X25ldHdvcmtfcmVxdWVzdF9uZXcodXJpKTsKLSAgICBk
b3dubG9hZCA9IHdlYmtpdF9kb3dubG9hZF9uZXcocmVxdWVzdCk7Ci0gICAgZ19vYmplY3RfdW5y
ZWYocmVxdWVzdCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9kb3dubG9hZF9nZXRfdXJp
KGRvd25sb2FkKSwgPT0sIHVyaSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X2Rvd25sb2FkX2dldF9u
ZXR3b3JrX3JlcXVlc3QoZG93bmxvYWQpID09IHJlcXVlc3QpOwotICAgIGdfYXNzZXJ0KGdfc3Ry
cnN0cih1cmksIHdlYmtpdF9kb3dubG9hZF9nZXRfc3VnZ2VzdGVkX2ZpbGVuYW1lKGRvd25sb2Fk
KSkpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9kb3dubG9hZF9nZXRfc3RhdHVzKGRvd25sb2FkKSA9
PSBXRUJLSVRfRE9XTkxPQURfU1RBVFVTX0NSRUFURUQpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRf
ZG93bmxvYWRfZ2V0X3RvdGFsX3NpemUoZG93bmxvYWQpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0
X2Rvd25sb2FkX2dldF9jdXJyZW50X3NpemUoZG93bmxvYWQpKTsKLSAgICBnX2Fzc2VydCghd2Vi
a2l0X2Rvd25sb2FkX2dldF9wcm9ncmVzcyhkb3dubG9hZCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJr
aXRfZG93bmxvYWRfZ2V0X2VsYXBzZWRfdGltZShkb3dubG9hZCkpOwotICAgIHRtcERpciA9IGdf
ZmlsZW5hbWVfdG9fdXJpKGdfZ2V0X3RtcF9kaXIoKSwgTlVMTCwgTlVMTCk7Ci0gICAgd2Via2l0
X2Rvd25sb2FkX3NldF9kZXN0aW5hdGlvbl91cmkoZG93bmxvYWQsIHRtcERpcik7Ci0gICAgZ19h
c3NlcnRfY21wc3RyKHRtcERpciwgPT0sIHdlYmtpdF9kb3dubG9hZF9nZXRfZGVzdGluYXRpb25f
dXJpKGRvd25sb2FkKSk7OwotICAgIGdfZnJlZSh0bXBEaXIpOwotICAgIGdfb2JqZWN0X3VucmVm
KGRvd25sb2FkKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1uYXZpZ2F0aW9uX3BvbGljeV9kZWNp
c2lvbl9yZXF1ZXN0ZWRfY2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0V2ViRnJhbWUqIHdlYl9mcmFtZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXROZXR3b3JrUmVxdWVz
dCogcmVxdWVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJL
aXRXZWJOYXZpZ2F0aW9uQWN0aW9uKiBhY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgV2ViS2l0V2ViUG9saWN5RGVjaXNpb24qIGRlY2lzaW9uLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIGRhdGEpCi17Ci0gICAg
d2Via2l0X3dlYl9wb2xpY3lfZGVjaXNpb25fZG93bmxvYWQoZGVjaXNpb24pOwotICAgIHJldHVy
biBUUlVFOwotfQotCi1zdGF0aWMgdm9pZAotbm90aWZ5X3N0YXR1c19jYihHT2JqZWN0KiBvYmpl
Y3QsIEdQYXJhbVNwZWMqIHBzcGVjLCBncG9pbnRlciBkYXRhKQotewotICAgIFdlYktpdERvd25s
b2FkKiBkb3dubG9hZCA9IFdFQktJVF9ET1dOTE9BRChvYmplY3QpOwotICAgIHN3aXRjaCAod2Vi
a2l0X2Rvd25sb2FkX2dldF9zdGF0dXMoZG93bmxvYWQpKSB7Ci0gICAgY2FzZSBXRUJLSVRfRE9X
TkxPQURfU1RBVFVTX0ZJTklTSEVEOgotICAgIGNhc2UgV0VCS0lUX0RPV05MT0FEX1NUQVRVU19F
UlJPUjoKLSAgICAgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBXRUJLSVRfRE9XTkxPQURfU1RBVFVTX0NBTkNFTExFRDoKLSAgICAgICAgZ19hc3Nl
cnRfbm90X3JlYWNoZWQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXNldF9maWxlbmFtZShnY2hhciog
ZmlsZW5hbWUpCi17Ci0gICAgZ2NoYXIgKnVyaSA9IGdfZmlsZW5hbWVfdG9fdXJpKGZpbGVuYW1l
LCBOVUxMLCBOVUxMKTsKLQotICAgIHdlYmtpdF9kb3dubG9hZF9zZXRfZGVzdGluYXRpb25fdXJp
KHRoZURvd25sb2FkLCB1cmkpOwotICAgIGdfZnJlZSh1cmkpOwotCi0gICAgd2Via2l0X2Rvd25s
b2FkX3N0YXJ0KHRoZURvd25sb2FkKTsKLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2
b2lkCi1oYW5kbGVfZG93bmxvYWRfcmVxdWVzdGVkX2NiKFdlYktpdERvd25sb2FkKiBkb3dubG9h
ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4qIGJlZW5UaGVyZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gYXN5bmNoKQotewotICAgIHRoZURv
d25sb2FkID0gZG93bmxvYWQ7Ci0gICAgKmJlZW5UaGVyZSA9IFRSVUU7Ci0KLSAgICBpZiAodGVt
cG9yYXJ5RmlsZW5hbWUpIHsKLSAgICAgICAgaWYgKGFzeW5jaCkgewotICAgICAgICAgICAgZ19p
ZGxlX2FkZCgoR1NvdXJjZUZ1bmMpc2V0X2ZpbGVuYW1lLCB0ZW1wb3JhcnlGaWxlbmFtZSk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBnY2hhciAqdXJpID0gZ19maWxlbmFtZV90b191
cmkodGVtcG9yYXJ5RmlsZW5hbWUsIE5VTEwsIE5VTEwpOwotICAgICAgICAgICAgaWYgKHVyaSkK
LSAgICAgICAgICAgICAgICB3ZWJraXRfZG93bmxvYWRfc2V0X2Rlc3RpbmF0aW9uX3VyaShkb3du
bG9hZCwgdXJpKTsKLSAgICAgICAgICAgIGdfZnJlZSh1cmkpOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgZ19zaWduYWxfY29ubmVjdChkb3dubG9hZCwgIm5vdGlmeTo6c3RhdHVzIiwKLSAgICAg
ICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sobm90aWZ5X3N0YXR1c19jYiksIE5VTEwpOwotfQot
Ci1zdGF0aWMgZ2Jvb2xlYW4KLWRvd25sb2FkX3JlcXVlc3RlZF9jYihXZWJLaXRXZWJWaWV3KiB3
ZWJfdmlldywKLSAgICAgICAgICAgICAgICAgICAgICBXZWJLaXREb3dubG9hZCogZG93bmxvYWQs
Ci0gICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4qIGJlZW5UaGVyZSkKLXsKLSAgICBoYW5k
bGVfZG93bmxvYWRfcmVxdWVzdGVkX2NiKGRvd25sb2FkLCBiZWVuVGhlcmUsIEZBTFNFKTsKLSAg
ICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1kb3dubG9hZF9yZXF1ZXN0ZWRf
YXN5bmNoX2NiKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBXZWJLaXREb3dubG9hZCogZG93bmxvYWQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdib29sZWFuKiBiZWVuVGhlcmUpCi17Ci0gICAgaGFuZGxlX2Rvd25sb2FkX3JlcXVl
c3RlZF9jYihkb3dubG9hZCwgYmVlblRoZXJlLCBUUlVFKTsKLSAgICByZXR1cm4gVFJVRTsKLX0K
LQotc3RhdGljIHZvaWQKLXRlc3Rfd2Via2l0X2Rvd25sb2FkX3BlcmZvcm0oZ2Jvb2xlYW4gYXN5
bmNoKQotewotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Vi
a2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBHQ2FsbGJhY2sgZG93bmxvYWRSZXF1ZXN0Q2FsbGJh
Y2sgPSBOVUxMOwotCi0gICAgZ19vYmplY3RfcmVmX3NpbmsoR19PQkpFQ1Qod2ViVmlldykpOwot
Ci0gICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAibmF2aWdhdGlvbi1wb2xpY3ktZGVjaXNp
b24tcmVxdWVzdGVkIiwKLSAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sobmF2aWdhdGlv
bl9wb2xpY3lfZGVjaXNpb25fcmVxdWVzdGVkX2NiKSwKLSAgICAgICAgICAgICAgICAgICAgIE5V
TEwpOwotCi0gICAgaWYgKGFzeW5jaCkKLSAgICAgICAgZG93bmxvYWRSZXF1ZXN0Q2FsbGJhY2sg
PSBHX0NBTExCQUNLKGRvd25sb2FkX3JlcXVlc3RlZF9hc3luY2hfY2IpOwotICAgIGVsc2UKLSAg
ICAgICAgZG93bmxvYWRSZXF1ZXN0Q2FsbGJhY2sgPSBHX0NBTExCQUNLKGRvd25sb2FkX3JlcXVl
c3RlZF9jYik7Ci0KLSAgICBnYm9vbGVhbiBiZWVuVGhlcmUgPSBGQUxTRTsKLSAgICBnX3NpZ25h
bF9jb25uZWN0KHdlYlZpZXcsICJkb3dubG9hZC1yZXF1ZXN0ZWQiLAotICAgICAgICAgICAgICAg
ICAgICAgZG93bmxvYWRSZXF1ZXN0Q2FsbGJhY2ssICZiZWVuVGhlcmUpOwotCi0gICAgLyogUHJl
cGFyYXRpb247IEZJWE1FOiB3ZSBzaG91bGQgbW92ZSB0aGlzIGNvZGUgdG8gYSB0ZXN0Ci0gICAg
ICogdXRpbGl0aWVzIGZpbGUsIGJlY2F1c2Ugd2UgaGF2ZSBhIHZlcnkgc2ltaWxhciBvbmUgaW4K
LSAgICAgKiB0ZXN0d2ViZnJhbWUuYyAqLwotICAgIEdFcnJvciAqZXJyb3IgPSBOVUxMOwotICAg
IGdjaGFyKiBmaWxlbmFtZTsKLSAgICBpbnQgZmQgPSBnX2ZpbGVfb3Blbl90bXAoIndlYmtpdC10
ZXN0d2ViZG93bmxvYWQtWFhYWFhYIiwgJmZpbGVuYW1lLCAmZXJyb3IpOwotICAgIGNsb3NlKGZk
KTsKLQotICAgIGlmIChlcnJvcikKLSAgICAgICAgZ19jcml0aWNhbCgiRmFpbGVkIHRvIG9wZW4g
YSB0ZW1wb3JhcnkgZmlsZSBmb3Igd3JpdGluZzogJXMuIiwgZXJyb3ItPm1lc3NhZ2UpOwotCi0g
ICAgaWYgKGdfdW5saW5rKGZpbGVuYW1lKSA9PSAtMSkKLSAgICAgICAgZ19jcml0aWNhbCgiRmFp
bGVkIHRvIGRlbGV0ZSB0aGUgdGVtcG9yYXJ5IGZpbGU6ICVzLiIsIGdfc3RyZXJyb3IoZXJybm8p
KTsKLQotICAgIHRoZURvd25sb2FkID0gTlVMTDsKLSAgICB0ZW1wb3JhcnlGaWxlbmFtZSA9IGZp
bGVuYW1lOwotCi0gICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLSAgICB3
ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkod2ViVmlldywgImh0dHA6Ly9nbm9tZS5vcmcvIik7Ci0g
ICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAgZ19hc3NlcnRfY21waW50KGJlZW5UaGVy
ZSwgPT0sIFRSVUUpOwotCi0gICAgZ19hc3NlcnRfY21waW50KGdfZmlsZV90ZXN0KHRlbXBvcmFy
eUZpbGVuYW1lLCBHX0ZJTEVfVEVTVF9JU19SRUdVTEFSKSwgPT0sIFRSVUUpOwotCi0gICAgZ191
bmxpbmsodGVtcG9yYXJ5RmlsZW5hbWUpOwotICAgIGdfZnJlZSh0ZW1wb3JhcnlGaWxlbmFtZSk7
Ci0gICAgdGVtcG9yYXJ5RmlsZW5hbWUgPSBOVUxMOwotCi0gICAgZ19tYWluX2xvb3BfdW5yZWYo
bG9vcCk7Ci0gICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi10
ZXN0X3dlYmtpdF9kb3dubG9hZF9zeW5jaCh2b2lkKQotewotICAgIHRlc3Rfd2Via2l0X2Rvd25s
b2FkX3BlcmZvcm0oRkFMU0UpOwotfQotCi1zdGF0aWMgdm9pZAotdGVzdF93ZWJraXRfZG93bmxv
YWRfYXN5bmNoKHZvaWQpCi17Ci0gICAgdGVzdF93ZWJraXRfZG93bmxvYWRfcGVyZm9ybShUUlVF
KTsKLX0KLQotc3RhdGljIGdib29sZWFuIG1pbWVfdHlwZV9wb2xpY3lfZGVjaXNpb25fcmVxdWVz
dGVkX2NiKFdlYktpdFdlYlZpZXcqIHZpZXcsIFdlYktpdFdlYkZyYW1lKiBmcmFtZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRO
ZXR3b3JrUmVxdWVzdCogcmVxdWVzdCwgY29uc3QgY2hhciogbWltZV90eXBlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFdlYlBv
bGljeURlY2lzaW9uKiBkZWNpc2lvbiwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICB3ZWJraXRfd2Vi
X3BvbGljeV9kZWNpc2lvbl9kb3dubG9hZChkZWNpc2lvbik7Ci0gICAgcmV0dXJuIFRSVUU7Ci19
Ci0KLXN0YXRpYyB2b2lkIGlkbGVfcXVpdF9sb29wX2NiKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3
LCBHUGFyYW1TcGVjKiBwc3BlYywgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBpZiAod2Via2l0X3dl
Yl92aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJfdmlldykgPT0gV0VCS0lUX0xPQURfRklOSVNIRUQg
fHwKLSAgICAgICAgd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJfdmlldykgPT0g
V0VCS0lUX0xPQURfRkFJTEVEKQotICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwotfQot
Ci1zdGF0aWMgdm9pZAotdGVzdF93ZWJraXRfZG93bmxvYWRfZGF0YSh2b2lkKQotewotICAgIGdi
b29sZWFuIGJlZW5UaGVyZSA9IEZBTFNFOwotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBX
RUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBnX29iamVjdF9yZWZf
c2luayh3ZWJWaWV3KTsKLQotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgImRvd25sb2Fk
LXJlcXVlc3RlZCIsCi0gICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKGRvd25sb2FkX3Jl
cXVlc3RlZF9jYiksCi0gICAgICAgICAgICAgICAgICAgICAmYmVlblRoZXJlKTsKLQotICAgIGdf
c2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLAotICAgICAgICAg
ICAgICAgICAgICAgR19DQUxMQkFDSyhpZGxlX3F1aXRfbG9vcF9jYiksCi0gICAgICAgICAgICAg
ICAgICAgICBOVUxMKTsKLQotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgIm1pbWUtdHlw
ZS1wb2xpY3ktZGVjaXNpb24tcmVxdWVzdGVkIiwKLSAgICAgICAgICAgICAgICAgICAgIEdfQ0FM
TEJBQ0sobWltZV90eXBlX3BvbGljeV9kZWNpc2lvbl9yZXF1ZXN0ZWRfY2IpLAotICAgICAgICAg
ICAgICAgICAgICAgTlVMTCk7Ci0KLSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRS
VUUpOwotCi0gICAgLyogV2UncmUgdGVzdGluZyBmb3IgYSBjcmFzaCwgc28ganVzdCBub3QgY3Jh
c2hpbmcgaXMgYSBwYXNzICovCi0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHdlYlZpZXcs
ICJkYXRhOmFwcGxpY2F0aW9uL29jdGVjdC1zdHJlYW0sIik7Ci0gICAgZ19tYWluX2xvb3BfcnVu
KGxvb3ApOwotCi0gICAgZ19hc3NlcnRfY21waW50KGJlZW5UaGVyZSwgPT0sIFRSVUUpOwotCi0g
ICAgZ19tYWluX2xvb3BfdW5yZWYobG9vcCk7Ci0gICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7
Ci19Ci0KLXN0YXRpYyB2b2lkIG5vdGlmeURvd25sb2FkU3RhdHVzQ2FsbGJhY2soR09iamVjdCAq
b2JqZWN0LCBHUGFyYW1TcGVjICpwc3BlYywgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBXZWJLaXRE
b3dubG9hZCAqZG93bmxvYWQgPSBXRUJLSVRfRE9XTkxPQUQob2JqZWN0KTsKLSAgICBXZWJLaXRO
ZXR3b3JrUmVzcG9uc2UgKnJlc3BvbnNlID0gd2Via2l0X2Rvd25sb2FkX2dldF9uZXR3b3JrX3Jl
c3BvbnNlKGRvd25sb2FkKTsKLSAgICBTb3VwTWVzc2FnZSAqbWVzc2FnZSA9IHdlYmtpdF9uZXR3
b3JrX3Jlc3BvbnNlX2dldF9tZXNzYWdlKHJlc3BvbnNlKTsKLQotICAgIHN3aXRjaCAod2Via2l0
X2Rvd25sb2FkX2dldF9zdGF0dXMoZG93bmxvYWQpKSB7Ci0gICAgY2FzZSBXRUJLSVRfRE9XTkxP
QURfU1RBVFVTX0VSUk9SOgotICAgICAgICBnX2Fzc2VydF9jbXBpbnQobWVzc2FnZS0+c3RhdHVz
X2NvZGUsID09LCA0MDQpOwotICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIFdFQktJVF9ET1dOTE9BRF9TVEFUVVNfRklOSVNIRUQ6Ci0gICAg
Y2FzZSBXRUJLSVRfRE9XTkxPQURfU1RBVFVTX0NBTkNFTExFRDoKLSAgICAgICAgZ19hc3NlcnRf
bm90X3JlYWNoZWQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyICpz
ZXJ2ZXIsIFNvdXBNZXNzYWdlICptZXNzYWdlLCBjb25zdCBjaGFyICpwYXRoLCBHSGFzaFRhYmxl
ICpxdWVyeSwgU291cENsaWVudENvbnRleHQgKmNvbnRleHQsIGdwb2ludGVyIHVzZXJEYXRhKQot
ewotICAgIGlmIChtZXNzYWdlLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7Ci0gICAgICAg
IHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9JTVBMRU1F
TlRFRCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0
YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfRk9VTkQpOwotICAgIHNvdXBfbWVzc2FnZV9i
b2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOwotfQotCi1zdGF0aWMgdm9pZCB0
ZXN0X3dlYmtpdF9kb3dubG9hZF9ub3RfZm91bmQodm9pZCkKLXsKLSAgICBTb3VwU2VydmVyICpz
ZXJ2ZXIgPSBzb3VwX3NlcnZlcl9uZXcoU09VUF9TRVJWRVJfUE9SVCwgMCwgTlVMTCk7Ci0gICAg
c291cF9zZXJ2ZXJfcnVuX2FzeW5jKHNlcnZlcik7Ci0gICAgc291cF9zZXJ2ZXJfYWRkX2hhbmRs
ZXIoc2VydmVyLCBOVUxMLCBzZXJ2ZXJDYWxsYmFjaywgTlVMTCwgTlVMTCk7Ci0gICAgU291cFVS
SSAqYmFzZVVSSSA9IHNvdXBfdXJpX25ldygiaHR0cDovLzEyNy4wLjAuMS8iKTsKLSAgICBzb3Vw
X3VyaV9zZXRfcG9ydChiYXNlVVJJLCBzb3VwX3NlcnZlcl9nZXRfcG9ydChzZXJ2ZXIpKTsKLQot
ICAgIFNvdXBVUkkgKnVyaSA9IHNvdXBfdXJpX25ld193aXRoX2Jhc2UoYmFzZVVSSSwgIi9mb28i
KTsKLSAgICBjaGFyICp1cmlTdHJpbmcgPSBzb3VwX3VyaV90b19zdHJpbmcodXJpLCBGQUxTRSk7
Ci0gICAgc291cF91cmlfZnJlZSh1cmkpOwotCi0gICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhO
VUxMLCBUUlVFKTsKLSAgICBXZWJLaXROZXR3b3JrUmVxdWVzdCAqcmVxdWVzdCA9IHdlYmtpdF9u
ZXR3b3JrX3JlcXVlc3RfbmV3KHVyaVN0cmluZyk7Ci0gICAgZ19mcmVlICh1cmlTdHJpbmcpOwot
ICAgIFdlYktpdERvd25sb2FkICpkb3dubG9hZCA9IHdlYmtpdF9kb3dubG9hZF9uZXcocmVxdWVz
dCk7Ci0gICAgZ19vYmplY3RfdW5yZWYocmVxdWVzdCk7Ci0KLSAgICB3ZWJraXRfZG93bmxvYWRf
c2V0X2Rlc3RpbmF0aW9uX3VyaShkb3dubG9hZCwgImZpbGU6Ly8vdG1wL2ZvbyIpOwotICAgIGdf
c2lnbmFsX2Nvbm5lY3QoZG93bmxvYWQsICJub3RpZnk6OnN0YXR1cyIsIEdfQ0FMTEJBQ0sobm90
aWZ5RG93bmxvYWRTdGF0dXNDYWxsYmFjayksIE5VTEwpOwotCi0gICAgd2Via2l0X2Rvd25sb2Fk
X3N0YXJ0KGRvd25sb2FkKTsKLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICBnX29i
amVjdF91bnJlZihkb3dubG9hZCk7Ci0gICAgZ19tYWluX2xvb3BfdW5yZWYobG9vcCk7Ci0gICAg
c291cF91cmlfZnJlZShiYXNlVVJJKTsKLSAgICBnX29iamVjdF91bnJlZihzZXJ2ZXIpOwotfQot
Ci1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCi17Ci0gICAgZ3RrX3Rlc3RfaW5pdCgm
YXJnYywgJmFyZ3YsIE5VTEwpOwotCi0gICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy8iKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvZG93bmxvYWQvY3Jl
YXRlIiwgdGVzdF93ZWJraXRfZG93bmxvYWRfY3JlYXRlKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMo
Ii93ZWJraXQvZG93bmxvYWQvc3luY2giLCB0ZXN0X3dlYmtpdF9kb3dubG9hZF9zeW5jaCk7Ci0g
ICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2Rvd25sb2FkL2FzeW5jaCIsIHRlc3Rfd2Via2l0
X2Rvd25sb2FkX2FzeW5jaCk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2Rvd25sb2Fk
L2RhdGEiLCB0ZXN0X3dlYmtpdF9kb3dubG9hZF9kYXRhKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMo
Ii93ZWJraXQvZG93bmxvYWQvbm90LWZvdW5kIiwgdGVzdF93ZWJraXRfZG93bmxvYWRfbm90X2Zv
dW5kKTsKLSAgICByZXR1cm4gZ190ZXN0X3J1biAoKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RmYXZpY29uZGF0YWJhc2UuYyBiL1NvdXJjZS9XZWJLaXQvZ3Rr
L3Rlc3RzL3Rlc3RmYXZpY29uZGF0YWJhc2UuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMmJjNjA2YS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0ZmF2
aWNvbmRhdGFiYXNlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNzYgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAidGVzdF91dGlscy5oIgotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0jaW5jbHVkZSA8Z3Rr
L2d0ay5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4K
LQotY29uc3QgaW50IGdJY29uU2l6ZSA9IDE2OwotCi1HTWFpbkxvb3AgKmxvb3A7Ci1jaGFyICpi
YXNlVVJJOwotCi1zdGF0aWMgdm9pZAotc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciAqc2VydmVy
LCBTb3VwTWVzc2FnZSAqbWVzc2FnZSwgY29uc3QgY2hhciAqcGF0aCwgR0hhc2hUYWJsZSAqcXVl
cnksIFNvdXBDbGllbnRDb250ZXh0ICpjb250ZXh0LCB2b2lkICpkYXRhKQotewotICAgIGlmICht
ZXNzYWdlLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7Ci0gICAgICAgIHNvdXBfbWVzc2Fn
ZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdl
LCBTT1VQX1NUQVRVU19PSyk7Ci0KLSAgICBjaGFyICpjb250ZW50czsKLSAgICBnc2l6ZSBsZW5n
dGg7Ci0gICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvZmF2aWNvbi5pY28iKSkgewotICAgICAg
ICBHRXJyb3IgKmVycm9yID0gTlVMTDsKLQotICAgICAgICBnX2ZpbGVfZ2V0X2NvbnRlbnRzKCJi
bGFuay5pY28iLCAmY29udGVudHMsICZsZW5ndGgsICZlcnJvcik7Ci0gICAgICAgIGdfYXNzZXJ0
KCFlcnJvcik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY29udGVudHMgPSBnX3N0cmR1cCgiPGh0
bWw+PGJvZHk+dGVzdDwvYm9keT48L2h0bWw+Iik7Ci0gICAgICAgIGxlbmd0aCA9IHN0cmxlbihj
b250ZW50cyk7Ci0gICAgfQotCi0gICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2Ut
PnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGNvbnRlbnRzLCBsZW5ndGgpOwotICAg
IHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOwotfQot
Ci1zdGF0aWMgdm9pZCBkZWxldGVEYXRhYmFzZUZpbGVJZkV4aXN0cyhjb25zdCBjaGFyICpkYXRh
YmFzZVBhdGgpCi17Ci0gICAgaWYgKCFnX2ZpbGVfdGVzdChkYXRhYmFzZVBhdGgsIEdfRklMRV9U
RVNUX0lTX0RJUikpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNoYXIgKmRhdGFiYXNlRmlsZW5h
bWUgPSBnX2J1aWxkX2ZpbGVuYW1lKGRhdGFiYXNlUGF0aCwgIldlYnBhZ2VJY29ucy5kYiIsIE5V
TEwpOwotICAgIGlmIChnX3VubGluayhkYXRhYmFzZUZpbGVuYW1lKSA9PSAtMSkgewotICAgICAg
ICBnX2ZyZWUoZGF0YWJhc2VGaWxlbmFtZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBnX2ZyZWUoZGF0YWJhc2VGaWxlbmFtZSk7Ci0gICAgZ19ybWRpcihkYXRhYmFzZVBhdGgpOwot
fQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlU2V0UGF0aCgpCi17Ci0g
ICAgY2hhciAqZGF0YWJhc2VQYXRoID0gZ19idWlsZF9maWxlbmFtZShnX2dldF90bXBfZGlyKCks
ICJ3ZWJraXQtdGVzdGZhdmljb25kYXRhYmFzZSIsIE5VTEwpOwotICAgIGRlbGV0ZURhdGFiYXNl
RmlsZUlmRXhpc3RzKGRhdGFiYXNlUGF0aCk7Ci0KLSAgICBXZWJLaXRGYXZpY29uRGF0YWJhc2Ug
KmRhdGFiYXNlID0gd2Via2l0X2dldF9mYXZpY29uX2RhdGFiYXNlKCk7Ci0gICAgd2Via2l0X2Zh
dmljb25fZGF0YWJhc2Vfc2V0X3BhdGgoZGF0YWJhc2UsIGRhdGFiYXNlUGF0aCk7Ci0KLSAgICBn
X2Fzc2VydF9jbXBzdHIoZGF0YWJhc2VQYXRoLCA9PSwgd2Via2l0X2Zhdmljb25fZGF0YWJhc2Vf
Z2V0X3BhdGgoZGF0YWJhc2UpKTsKLQotICAgIGdfZnJlZShkYXRhYmFzZVBhdGgpOwotfQotCi0v
LyBTZWUgdGhlIGNvbW1lbnQgaW4gbWFpbigpIGZ1bmN0aW9uIHRoYXQgZ29lcyB3aXRoIHRoaXMg
c2FtZSBndWFyZC4KLSNpZmRlZiBOREVCVUcKLQotc3RhdGljIHZvaWQgZmF2aWNvbkRhdGFiYXNl
R2V0VmFsaWRGYXZpY29uQ2FsbGJhY2soR09iamVjdCAqc291cmNlT2JqZWN0LCBHQXN5bmNSZXN1
bHQgKnJlc3VsdCwgdm9pZCAqdXNlckRhdGEpCi17Ci0gICAgZ2Jvb2xlYW4gKmJlZW5IZXJlID0g
KGdib29sZWFuKil1c2VyRGF0YTsKLSAgICBHRXJyb3IgKmVycm9yID0gTlVMTDsKLSAgICBHZGtQ
aXhidWYgKmljb24gPSB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl9waXhidWZf
ZmluaXNoKFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFKHNvdXJjZU9iamVjdCksIHJlc3VsdCwgJmVy
cm9yKTsKLSAgICBnX2Fzc2VydChpY29uKTsKLSAgICBnX29iamVjdF91bnJlZihpY29uKTsKLQot
ICAgICpiZWVuSGVyZSA9IFRSVUU7Ci0KLSAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwotfQot
Ci1zdGF0aWMgdm9pZCBmYXZpY29uRGF0YWJhc2VHZXRJbnZhbGlkRmF2aWNvbkNhbGxiYWNrKEdP
YmplY3QgKnNvdXJjZU9iamVjdCwgR0FzeW5jUmVzdWx0ICpyZXN1bHQsIHZvaWQgKnVzZXJEYXRh
KQotewotICAgIGdib29sZWFuICpiZWVuSGVyZSA9IChnYm9vbGVhbiopdXNlckRhdGE7Ci0gICAg
R0Vycm9yICplcnJvciA9IE5VTEw7Ci0gICAgR2RrUGl4YnVmICppY29uID0gd2Via2l0X2Zhdmlj
b25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fcGl4YnVmX2ZpbmlzaChXRUJLSVRfRkFWSUNPTl9EQVRB
QkFTRShzb3VyY2VPYmplY3QpLCByZXN1bHQsICZlcnJvcik7Ci0gICAgZ19hc3NlcnQoIWljb24p
OwotCi0gICAgKmJlZW5IZXJlID0gVFJVRTsKLQotICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7
Ci19Ci0KLXN0YXRpYyB2b2lkIGZhdmljb25EYXRhYmFzZUdldEZhdmljb25DYW5jZWxsZWRDYWxs
YmFjayhHT2JqZWN0ICpzb3VyY2VPYmplY3QsIEdBc3luY1Jlc3VsdCAqcmVzdWx0LCB2b2lkICp1
c2VyRGF0YSkKLXsKLSAgICBnYm9vbGVhbiAqYmVlbkhlcmUgPSAoZ2Jvb2xlYW4qKXVzZXJEYXRh
OwotICAgIEdFcnJvciAqZXJyb3IgPSBOVUxMOwotICAgIEdka1BpeGJ1ZiAqaWNvbiA9IHdlYmtp
dF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX3BpeGJ1Zl9maW5pc2goV0VCS0lUX0ZBVklD
T05fREFUQUJBU0Uoc291cmNlT2JqZWN0KSwgcmVzdWx0LCAmZXJyb3IpOwotICAgIGdfYXNzZXJ0
KCFpY29uKTsKLSAgICBnX2Fzc2VydChlcnJvciAmJiBnX2Vycm9yX21hdGNoZXMoZXJyb3IsIEdf
SU9fRVJST1IsIEdfSU9fRVJST1JfQ0FOQ0VMTEVEKSk7Ci0KLSAgICAqYmVlbkhlcmUgPSBUUlVF
OwotCi0gICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lk
IHF1aXRNYWluTG9vcElmTG9hZENvbXBsZXRlZChnYm9vbGVhbiAqaWNvbk9yUGFnZUxvYWRlZCkK
LXsKLSAgICBpZiAoKmljb25PclBhZ2VMb2FkZWQpCi0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQo
bG9vcCk7Ci0gICAgZWxzZQotICAgICAgICAqaWNvbk9yUGFnZUxvYWRlZCA9IFRSVUU7Ci19Ci0K
LXN0YXRpYyB2b2lkIGlkbGVRdWl0TG9vcENhbGxiYWNrKFdlYktpdFdlYlZpZXcgKndlYlZpZXcs
IEdQYXJhbVNwZWMgKnBhcmFtU3BlYywgZ2Jvb2xlYW4gKmljb25PclBhZ2VMb2FkZWQpCi17Ci0g
ICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3Rh
dHVzKHdlYlZpZXcpOwotCi0gICAgaWYgKHN0YXR1cyA9PSBXRUJLSVRfTE9BRF9GSU5JU0hFRCB8
fCBzdGF0dXMgPT0gV0VCS0lUX0xPQURfRkFJTEVEKQotICAgICAgICBxdWl0TWFpbkxvb3BJZkxv
YWRDb21wbGV0ZWQoaWNvbk9yUGFnZUxvYWRlZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdFdl
YlZpZXdJY29uTG9hZGVkKFdlYktpdEZhdmljb25EYXRhYmFzZSAqZGF0YWJhc2UsIGNvbnN0IGNo
YXIgKmZyYW1lVVJJLCBnYm9vbGVhbiAqaWNvbk9yUGFnZUxvYWRlZCkKLXsKLSAgICBxdWl0TWFp
bkxvb3BJZkxvYWRDb21wbGV0ZWQoaWNvbk9yUGFnZUxvYWRlZCk7Ci19Ci0KLXN0YXRpYyB2b2lk
IGxvYWRVUkkoY29uc3QgY2hhciAqdXJpKQotewotICAgIFdlYktpdFdlYlZpZXcgKnZpZXcgPSBX
RUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBnYm9vbGVhbiBpY29u
T3JQYWdlTG9hZGVkID0gRkFMU0U7Ci0KLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkodmll
dywgdXJpKTsKLQotICAgIGdfc2lnbmFsX2Nvbm5lY3QodmlldywgIm5vdGlmeTo6bG9hZC1zdGF0
dXMiLCBHX0NBTExCQUNLKGlkbGVRdWl0TG9vcENhbGxiYWNrKSwgJmljb25PclBhZ2VMb2FkZWQp
OwotICAgIGdfc2lnbmFsX2Nvbm5lY3QodmlldywgImljb24tbG9hZGVkIiwgR19DQUxMQkFDSyh3
ZWJraXRXZWJWaWV3SWNvbkxvYWRlZCksICZpY29uT3JQYWdlTG9hZGVkKTsKLQotICAgIGdfbWFp
bl9sb29wX3J1bihsb29wKTsKLQotICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0
Y2hlZCh2aWV3LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCAmaWNvbk9yUGFnZUxv
YWRlZCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBmYXZpY29uRGF0YWJhc2VHZXRWYWxpZEZhdmlj
b25JZGxlKHZvaWQgKnVzZXJEYXRhKQotewotICAgIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dl
dF9mYXZpY29uX3BpeGJ1Zih3ZWJraXRfZ2V0X2Zhdmljb25fZGF0YWJhc2UoKSwgYmFzZVVSSSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ0ljb25TaXpl
LCBnSWNvblNpemUsIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZhdmljb25EYXRhYmFzZUdldFZhbGlkRmF2aWNvbkNhbGxiYWNrLCB1c2VyRGF0
YSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gZmF2aWNvbkRhdGFi
YXNlR2V0SW52YWxpZEZhdmljb25JZGxlKHZvaWQgKnVzZXJEYXRhKQotewotICAgIHdlYmtpdF9m
YXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX3BpeGJ1Zih3ZWJraXRfZ2V0X2Zhdmljb25fZGF0
YWJhc2UoKSwgImh0dHA6Ly93d3cud2Via2l0Z3RrLm9yZy8iLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnSWNvblNpemUsIGdJY29uU2l6ZSwgTlVMTCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmF2aWNvbkRh
dGFiYXNlR2V0SW52YWxpZEZhdmljb25DYWxsYmFjaywgdXNlckRhdGEpOwotICAgIHJldHVybiBG
QUxTRTsKLX0KLQotc3RhdGljIGdib29sZWFuIGZhdmljb25EYXRhYmFzZUdldEZhdmljb25DYW5j
ZWxsZWRJZGxlKHZvaWQgKnVzZXJEYXRhKQotewotICAgIEdDYW5jZWxsYWJsZSAqY2FuY2VsbGFi
bGUgPSBnX2NhbmNlbGxhYmxlX25ldygpOwotICAgIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dl
dF9mYXZpY29uX3BpeGJ1Zih3ZWJraXRfZ2V0X2Zhdmljb25fZGF0YWJhc2UoKSwgYmFzZVVSSSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ0ljb25TaXpl
LCBnSWNvblNpemUsIGNhbmNlbGxhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmYXZpY29uRGF0YWJhc2VHZXRGYXZpY29uQ2FuY2VsbGVkQ2FsbGJh
Y2ssIHVzZXJEYXRhKTsKLSAgICBnX2NhbmNlbGxhYmxlX2NhbmNlbChjYW5jZWxsYWJsZSk7Ci0g
ICAgZ19vYmplY3RfdW5yZWYoY2FuY2VsbGFibGUpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQot
c3RhdGljIHZvaWQgdGVzdFdlYktpdEZhdmljb25EYXRhYmFzZUdldEZhdmljb24oKQotewotICAg
IGdib29sZWFuIGJlZW5Ub0ljb25DYWxsYmFjazsKLQotICAgIGxvb3AgPSBnX21haW5fbG9vcF9u
ZXcoTlVMTCwgVFJVRSk7Ci0KLSAgICAvKiBMb2FkIHVyaSB0byBtYWtlIHN1cmUgZmF2aWNvbiBp
cyBhZGRlZCB0byBkYXRhYmFzZS4gKi8KLSAgICBsb2FkVVJJKGJhc2VVUkkpOwotCi0gICAgYmVl
blRvSWNvbkNhbGxiYWNrID0gRkFMU0U7Ci0gICAgZ19pZGxlX2FkZCgoR1NvdXJjZUZ1bmMpZmF2
aWNvbkRhdGFiYXNlR2V0VmFsaWRGYXZpY29uSWRsZSwgJmJlZW5Ub0ljb25DYWxsYmFjayk7Ci0g
ICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotICAgIGdfYXNzZXJ0KGJlZW5Ub0ljb25DYWxsYmFj
ayk7Ci0KLSAgICBiZWVuVG9JY29uQ2FsbGJhY2sgPSBGQUxTRTsKLSAgICBnX2lkbGVfYWRkKChH
U291cmNlRnVuYylmYXZpY29uRGF0YWJhc2VHZXRJbnZhbGlkRmF2aWNvbklkbGUsICZiZWVuVG9J
Y29uQ2FsbGJhY2spOwotICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLSAgICBnX2Fzc2VydChi
ZWVuVG9JY29uQ2FsbGJhY2spOwotCi0gICAgYmVlblRvSWNvbkNhbGxiYWNrID0gRkFMU0U7Ci0g
ICAgZ19pZGxlX2FkZCgoR1NvdXJjZUZ1bmMpZmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNvbkNhbmNl
bGxlZElkbGUsICZiZWVuVG9JY29uQ2FsbGJhY2spOwotICAgIGdfbWFpbl9sb29wX3J1bihsb29w
KTsKLSAgICBnX2Fzc2VydChiZWVuVG9JY29uQ2FsbGJhY2spOwotfQotCi1zdGF0aWMgdm9pZCB0
ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNvblVSSSgpCi17Ci0gICAgY2hhciAqaWNv
blVSSSA9IHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX3VyaSh3ZWJraXRfZ2V0
X2Zhdmljb25fZGF0YWJhc2UoKSwgYmFzZVVSSSk7Ci0gICAgY2hhciAqZXhwZWN0ZWRVUkkgPSBn
X3N0cmR1cF9wcmludGYoIiVzZmF2aWNvbi5pY28iLCBiYXNlVVJJKTsKLSAgICBnX2Fzc2VydF9j
bXBzdHIoaWNvblVSSSwgPT0sIGV4cGVjdGVkVVJJKTsKLSAgICBnX2ZyZWUoZXhwZWN0ZWRVUkkp
OwotICAgIGdfZnJlZShpY29uVVJJKTsKLX0KLQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIHRlc3RX
ZWJLaXRGYXZpY29uRGF0YWJhc2VSZW1vdmVBbGwodm9pZCkKLXsKLSAgICBXZWJLaXRGYXZpY29u
RGF0YWJhc2UgKmRhdGFiYXNlID0gd2Via2l0X2dldF9mYXZpY29uX2RhdGFiYXNlKCk7Ci0gICAg
d2Via2l0X2Zhdmljb25fZGF0YWJhc2VfY2xlYXIoZGF0YWJhc2UpOwotICAgIGNoYXIgKmljb25V
UkkgPSB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl91cmkoZGF0YWJhc2UsIGJh
c2VVUkkpOwotICAgIGdfYXNzZXJ0KCFpY29uVVJJKTsKLSAgICBnX2ZyZWUoaWNvblVSSSk7Ci19
Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VDbG9zZURhdGFiYXNlKHZv
aWQpCi17Ci0gICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlICpkYXRhYmFzZSA9IHdlYmtpdF9nZXRf
ZmF2aWNvbl9kYXRhYmFzZSgpOwotICAgIGNoYXIgKmRhdGFiYXNlUGF0aCA9IGdfc3RyZHVwKHdl
YmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9wYXRoKGRhdGFiYXNlKSk7Ci0gICAgd2Via2l0X2Zh
dmljb25fZGF0YWJhc2Vfc2V0X3BhdGgoZGF0YWJhc2UsIDApOwotICAgIGRlbGV0ZURhdGFiYXNl
RmlsZUlmRXhpc3RzKGRhdGFiYXNlUGF0aCk7Ci0gICAgZ19mcmVlKGRhdGFiYXNlUGF0aCk7Ci19
Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLXsKLSAgICBndGtfdGVzdF9pbml0
KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAgICAvKiBUaGlzIGhvcGVmdWxseSBtYWtlcyB0aGUg
dGVzdCBpbmRlcGVuZGVudCBvZiB0aGUgcGF0aCBpdCdzIGNhbGxlZCBmcm9tLiAqLwotICAgIHRl
c3R1dGlsc19yZWxhdGl2ZV9jaGRpcigiU291cmNlL1dlYktpdC9ndGsvdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QuaHRtbCIsIGFyZ3ZbMF0pOwotCi0gICAgU291cFNlcnZlciAqc2VydmVyID0gc291cF9z
ZXJ2ZXJfbmV3KFNPVVBfU0VSVkVSX1BPUlQsIDAsIE5VTEwpOwotICAgIHNvdXBfc2VydmVyX3J1
bl9hc3luYyhzZXJ2ZXIpOwotCi0gICAgc291cF9zZXJ2ZXJfYWRkX2hhbmRsZXIoc2VydmVyLCBO
VUxMLCBzZXJ2ZXJDYWxsYmFjaywgTlVMTCwgTlVMTCk7Ci0KLSAgICBTb3VwVVJJICpzb3VwVVJJ
ID0gc291cF91cmlfbmV3KCJodHRwOi8vMTI3LjAuMC4xLyIpOwotICAgIHNvdXBfdXJpX3NldF9w
b3J0KHNvdXBVUkksIHNvdXBfc2VydmVyX2dldF9wb3J0KHNlcnZlcikpOwotCi0gICAgYmFzZVVS
SSA9IHNvdXBfdXJpX3RvX3N0cmluZyhzb3VwVVJJLCBGQUxTRSk7Ci0gICAgc291cF91cmlfZnJl
ZShzb3VwVVJJKTsKLQotICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvIik7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2Zhdmljb25kYXRhYmFzZS9zZXQt
cGF0aCIsIHRlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VTZXRQYXRoKTsKLQotICAgIC8vIFRoZXNl
IHR3byB0ZXN0cyB3aWxsIHRyaWdnZXIgYW4gQVNTRVJUSU9OIG9uIGRlYnVnIGJ1aWxkcyBkdWUK
LSAgICAvLyB0byBodHRwOi8vd2Via2l0Lm9yZy9iLzY3NTgyLiBSZW1vdmUgdGhlIGd1YXJkcyBv
bmNlIHRoZSBidWcgaXMgZml4ZWQuCi0jaWZkZWYgTkRFQlVHCi0gICAgZ190ZXN0X2FkZF9mdW5j
KCIvd2Via2l0L2Zhdmljb25kYXRhYmFzZS9nZXQtZmF2aWNvbiIsIHRlc3RXZWJLaXRGYXZpY29u
RGF0YWJhc2VHZXRGYXZpY29uKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvZmF2aWNv
bmRhdGFiYXNlL2dldC1mYXZpY29uLXVyaSIsIHRlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VHZXRG
YXZpY29uVVJJKTsKLSNlbmRpZgotCi0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2Zhdmlj
b25kYXRhYmFzZS9yZW1vdmUtYWxsIiwgdGVzdFdlYktpdEZhdmljb25EYXRhYmFzZVJlbW92ZUFs
bCk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2Zhdmljb25kYXRhYmFzZS9jbG9zZS1k
YiIsIHRlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VDbG9zZURhdGFiYXNlKTsKLQotICAgIHJldHVy
biBnX3Rlc3RfcnVuKCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90
ZXN0Z2xvYmFscy5jIGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGdsb2JhbHMuYwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI5ZWM0Zi4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2d0ay90ZXN0cy90ZXN0Z2xvYmFscy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTEwICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQ29sbGFib3JhIEx0ZC4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDxsaWJzb3VwL3NvdXAu
aD4KLSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+Ci0KLS8vIE1ha2Ugc3VyZSB0aGUgc2Vzc2lv
biBpcyBpbml0aWFsaXplZCBwcm9wZXJseSB3aGVuIHdlYmtpdF9nZXRfZGVmYXVsdF9zZXNzaW9u
KCkgaXMgY2FsbGVkLgotc3RhdGljIHZvaWQgdGVzdF9nbG9iYWxzX2RlZmF1bHRfc2Vzc2lvbigp
Ci17Ci0gICAgZ190ZXN0X2J1ZygiMzY3NTQiKTsKLQotICAgIFNvdXBTZXNzaW9uKiBzZXNzaW9u
ID0gd2Via2l0X2dldF9kZWZhdWx0X3Nlc3Npb24oKTsKLSAgICBzb3VwX3Nlc3Npb25fcmVtb3Zl
X2ZlYXR1cmVfYnlfdHlwZShzZXNzaW9uLCBXRUJLSVRfVFlQRV9TT1VQX0FVVEhfRElBTE9HKTsK
LQotICAgIC8vIFRoaXMgbWFrZXMgc3VyZSBvdXIgaW5pdGlhbGl6YXRpb24gcmFuLgotICAgIGdf
YXNzZXJ0KHNvdXBfc2Vzc2lvbl9nZXRfZmVhdHVyZShzZXNzaW9uLCBTT1VQX1RZUEVfQ09OVEVO
VF9ERUNPREVSKSAhPSBOVUxMKTsKLQotICAgIC8vIENyZWF0aW5nIGEgV2ViVmlldyBzaG91bGQg
bWFrZSBzdXJlIHRoZSBzZXNzaW9uIGlzCi0gICAgLy8gaW5pdGlhbGl6ZWQsIGFuZCBub3QgbWVz
cyB3aXRoIG91ciBjaGFuZ2VzLgotICAgIFdlYktpdFdlYlZpZXcqIHdlYl92aWV3ID0gV0VCS0lU
X1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmso
d2ViX3ZpZXcpOwotICAgIGdfb2JqZWN0X3VucmVmKHdlYl92aWV3KTsKLQotICAgIC8vIFRoZXNl
IG1ha2VzIHN1cmUgb3VyIG1vZGlmaWNhdGlvbiB3YXMga2VwdC4KLSAgICBnX2Fzc2VydChzb3Vw
X3Nlc3Npb25fZ2V0X2ZlYXR1cmUoc2Vzc2lvbiwgU09VUF9UWVBFX0NPTlRFTlRfREVDT0RFUikg
IT0gTlVMTCk7Ci0gICAgZ19hc3NlcnQoc291cF9zZXNzaW9uX2dldF9mZWF0dXJlKHNlc3Npb24s
IFdFQktJVF9UWVBFX1NPVVBfQVVUSF9ESUFMT0cpID09IE5VTEwpOwotfQotCi1zdGF0aWMgdm9p
ZCB0ZXN0X2dsb2JhbHNfc2VjdXJpdHlfcG9saWN5KCkKLXsKLSAgICAvLyBDaGVjayBkZWZhdWx0
IHBvbGljeSBmb3Igd2VsbCBrbm93biBzY2hlbWVzLgotICAgIFdlYktpdFNlY3VyaXR5UG9saWN5
IHBvbGljeSA9IHdlYmtpdF9nZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJodHRw
Iik7Ci0gICAgZ3VpbnQgbWFzayA9IFdFQktJVF9TRUNVUklUWV9QT0xJQ1lfQ09SU19FTkFCTEVE
OwotICAgIGdfYXNzZXJ0X2NtcHVpbnQocG9saWN5ICYgbWFzaywgPT0sIG1hc2spOwotCi0gICAg
cG9saWN5ID0gd2Via2l0X2dldF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUoImh0dHBz
Iik7Ci0gICAgbWFzayA9IFdFQktJVF9TRUNVUklUWV9QT0xJQ1lfU0VDVVJFIHwgV0VCS0lUX1NF
Q1VSSVRZX1BPTElDWV9DT1JTX0VOQUJMRUQ7Ci0gICAgZ19hc3NlcnRfY21wdWludChwb2xpY3kg
JiBtYXNrLCA9PSwgbWFzayk7Ci0KLSAgICBwb2xpY3kgPSB3ZWJraXRfZ2V0X3NlY3VyaXR5X3Bv
bGljeV9mb3JfdXJpX3NjaGVtZSgiZmlsZSIpOwotICAgIG1hc2sgPSBXRUJLSVRfU0VDVVJJVFlf
UE9MSUNZX0xPQ0FMOwotICAgIGdfYXNzZXJ0X2NtcHVpbnQocG9saWN5ICYgbWFzaywgPT0sIG1h
c2spOwotCi0gICAgcG9saWN5ID0gd2Via2l0X2dldF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9z
Y2hlbWUoImRhdGEiKTsKLSAgICBtYXNrID0gV0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9OT19BQ0NF
U1NfVE9fT1RIRVJfU0NIRU1FIHwgV0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9TRUNVUkU7Ci0gICAg
Z19hc3NlcnRfY21wdWludChwb2xpY3kgJiBtYXNrLCA9PSwgbWFzayk7Ci0KLSAgICBwb2xpY3kg
PSB3ZWJraXRfZ2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiYWJvdXQiKTsKLSAg
ICBtYXNrID0gV0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9OT19BQ0NFU1NfVE9fT1RIRVJfU0NIRU1F
IHwgV0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9TRUNVUkUgfCBXRUJLSVRfU0VDVVJJVFlfUE9MSUNZ
X0VNUFRZX0RPQ1VNRU5UOwotICAgIGdfYXNzZXJ0X2NtcHVpbnQocG9saWN5ICYgbWFzaywgPT0s
IG1hc2spOwotCi0gICAgLy8gQ3VzdG9tIHNjaGVtZS4KLSAgICBwb2xpY3kgPSB3ZWJraXRfZ2V0
X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiZm9vIik7Ci0gICAgZ19hc3NlcnQoIXBv
bGljeSk7Ci0KLSAgICBwb2xpY3kgfD0gV0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9MT0NBTDsKLSAg
ICB3ZWJraXRfc2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiZm9vIiwgcG9saWN5
KTsKLSAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9nZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91
cmlfc2NoZW1lKCJmb28iKSwgPT0sIHBvbGljeSk7Ci0KLSAgICBwb2xpY3kgfD0gV0VCS0lUX1NF
Q1VSSVRZX1BPTElDWV9OT19BQ0NFU1NfVE9fT1RIRVJfU0NIRU1FOwotICAgIHdlYmtpdF9zZXRf
c2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJmb28iLCBwb2xpY3kpOwotICAgIGdfYXNz
ZXJ0X2NtcHVpbnQod2Via2l0X2dldF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUoImZv
byIpLCA9PSwgcG9saWN5KTsKLQotICAgIHBvbGljeSB8PSBXRUJLSVRfU0VDVVJJVFlfUE9MSUNZ
X0RJU1BMQVlfSVNPTEFURUQ7Ci0gICAgd2Via2l0X3NldF9zZWN1cml0eV9wb2xpY3lfZm9yX3Vy
aV9zY2hlbWUoImZvbyIsIHBvbGljeSk7Ci0gICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfZ2V0
X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiZm9vIiksID09LCBwb2xpY3kpOwotCi0g
ICAgcG9saWN5IHw9IFdFQktJVF9TRUNVUklUWV9QT0xJQ1lfU0VDVVJFOwotICAgIHdlYmtpdF9z
ZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJmb28iLCBwb2xpY3kpOwotICAgIGdf
YXNzZXJ0X2NtcHVpbnQod2Via2l0X2dldF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUo
ImZvbyIpLCA9PSwgcG9saWN5KTsKLQotICAgIHBvbGljeSB8PSBXRUJLSVRfU0VDVVJJVFlfUE9M
SUNZX0NPUlNfRU5BQkxFRDsKLSAgICB3ZWJraXRfc2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJp
X3NjaGVtZSgiZm9vIiwgcG9saWN5KTsKLSAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9nZXRf
c2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJmb28iKSwgPT0sIHBvbGljeSk7Ci0KLSAg
ICBwb2xpY3kgfD0gV0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9FTVBUWV9ET0NVTUVOVDsKLSAgICB3
ZWJraXRfc2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiZm9vIiwgcG9saWN5KTsK
LSAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9nZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlf
c2NoZW1lKCJmb28iKSwgPT0sIHBvbGljeSk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFy
KiogYXJndikKLXsKLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAg
ICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwotICAgIGdfdGVz
dF9hZGRfZnVuYygiL3dlYmtpdC9nbG9iYWxzL2RlZmF1bHRfc2Vzc2lvbiIsCi0gICAgICAgICAg
ICAgICAgICAgIHRlc3RfZ2xvYmFsc19kZWZhdWx0X3Nlc3Npb24pOwotICAgIGdfdGVzdF9hZGRf
ZnVuYygiL3dlYmtpdC9nbG9iYWxzL3NlY3VyaXR5LXBvbGljeSIsCi0gICAgICAgICAgICAgICAg
ICAgIHRlc3RfZ2xvYmFsc19zZWN1cml0eV9wb2xpY3kpOwotICAgIHJldHVybiBnX3Rlc3RfcnVu
KCk7Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RoaXR0ZXN0
cmVzdWx0LmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0aGl0dGVzdHJlc3VsdC5jCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmYwMTEwLi4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RoaXR0ZXN0cmVzdWx0LmMKKysrIC9kZXYvbnVsbApAQCAt
MSwxNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBJZ2FsaWEgUy5MLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+
Ci0jaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+Ci0K
LXR5cGVkZWYgc3RydWN0IHsKLSAgY2hhciogZGF0YTsKLSAgZ3VpbnQgZmxhZzsKLX0gVGVzdElu
Zm87Ci0KLXN0YXRpYyBHTWFpbkxvb3AqIGxvb3A7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OwotICAgIFRlc3RJbmZvKiBpbmZvOwotfSBIaXRUZXN0UmVz
dWx0Rml4dHVyZTsKLQotVGVzdEluZm8qCi10ZXN0X2luZm9fbmV3KGNvbnN0IGNoYXIqIGRhdGEs
IGd1aW50IGZsYWcpCi17Ci0gICAgVGVzdEluZm8qIGluZm87Ci0KLSAgICBpbmZvID0gZ19zbGlj
ZV9uZXcoVGVzdEluZm8pOwotICAgIGluZm8tPmRhdGEgPSBnX3N0cmR1cChkYXRhKTsKLSAgICBp
bmZvLT5mbGFnID0gZmxhZzsKLQotICAgIHJldHVybiBpbmZvOwotfQotCi12b2lkCi10ZXN0X2lu
Zm9fZGVzdHJveShUZXN0SW5mbyogaW5mbykKLXsKLSAgICBnX2ZyZWUoaW5mby0+ZGF0YSk7Ci0g
ICAgZ19zbGljZV9mcmVlKFRlc3RJbmZvLCBpbmZvKTsKLX0KLQotc3RhdGljIHZvaWQgaGl0X3Rl
c3RfcmVzdWx0X2ZpeHR1cmVfc2V0dXAoSGl0VGVzdFJlc3VsdEZpeHR1cmUqIGZpeHR1cmUsIGdj
b25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBmaXh0dXJlLT53ZWJWaWV3ID0gV0VCS0lUX1dFQl9W
SUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3NpbmsoZml4dHVy
ZS0+d2ViVmlldyk7Ci0gICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLSAg
ICBmaXh0dXJlLT5pbmZvID0gKFRlc3RJbmZvKilkYXRhOwotfQotCi1zdGF0aWMgdm9pZCBoaXRf
dGVzdF9yZXN1bHRfZml4dHVyZV90ZWFyZG93bihIaXRUZXN0UmVzdWx0Rml4dHVyZSogZml4dHVy
ZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPndl
YlZpZXcpOwotICAgIGdfbWFpbl9sb29wX3VucmVmKGxvb3ApOwotICAgIHRlc3RfaW5mb19kZXN0
cm95KGZpeHR1cmUtPmluZm8pOwotfQotCi1zdGF0aWMgdm9pZAotbG9hZF9zdGF0dXNfY2IoV2Vi
S2l0V2ViVmlldyogd2ViVmlldywKLSAgICAgICAgICAgICAgIEdQYXJhbVNwZWMqIHNwZWMsCi0g
ICAgICAgICAgICAgICBncG9pbnRlciBkYXRhKQotewotICAgIFdlYktpdExvYWRTdGF0dXMgc3Rh
dHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJWaWV3KTsKLSAgICBUZXN0
SW5mbyogaW5mbyA9IChUZXN0SW5mbyopZGF0YTsKLQotICAgIGlmIChzdGF0dXMgPT0gV0VCS0lU
X0xPQURfRklOSVNIRUQpIHsKLSAgICAgICAgV2ViS2l0SGl0VGVzdFJlc3VsdCogcmVzdWx0Owot
ICAgICAgICBndWludCBjb250ZXh0OwotICAgICAgICBHZGtFdmVudCogZXZlbnQgPSBnZGtfZXZl
bnRfbmV3KEdES19CVVRUT05fUFJFU1MpOwotICAgICAgICBXZWJLaXRET01Ob2RlKiBub2RlOwot
ICAgICAgICBnaW50IHgsIHk7Ci0KLSAgICAgICAgLyogQ2xvc2UgZW5vdWdoIHRvIDAsMCAqLwot
ICAgICAgICBldmVudC0+YnV0dG9uLnggPSA1OwotICAgICAgICBldmVudC0+YnV0dG9uLnkgPSA1
OwotCi0gICAgICAgIHJlc3VsdCA9IHdlYmtpdF93ZWJfdmlld19nZXRfaGl0X3Rlc3RfcmVzdWx0
KHdlYlZpZXcsIChHZGtFdmVudEJ1dHRvbiopIGV2ZW50KTsKLSAgICAgICAgZ2RrX2V2ZW50X2Zy
ZWUoZXZlbnQpOwotICAgICAgICBnX2Fzc2VydChyZXN1bHQpOwotCi0gICAgICAgIGdfb2JqZWN0
X2dldChyZXN1bHQsICJjb250ZXh0IiwgJmNvbnRleHQsIE5VTEwpOwotICAgICAgICBnX2Fzc2Vy
dChjb250ZXh0ICYgaW5mby0+ZmxhZyk7Ci0KLSAgICAgICAgZ19vYmplY3RfZ2V0KHJlc3VsdCwg
ImlubmVyLW5vZGUiLCAmbm9kZSwgTlVMTCk7Ci0gICAgICAgIGdfYXNzZXJ0KG5vZGUpOwotICAg
ICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX05PREUobm9kZSkpOwotCi0gICAgICAgIGdfb2Jq
ZWN0X2dldChyZXN1bHQsICJ4IiwgJngsICJ5IiwgJnksIE5VTEwpOwotICAgICAgICBnX2Fzc2Vy
dF9jbXBpbnQoeCwgPT0sIDUpOwotICAgICAgICBnX2Fzc2VydF9jbXBpbnQoeSwgPT0sIDUpOwot
Ci0gICAgICAgIC8qIFdlIGNhbiBvbmx5IHRlc3QgdGhlc2Ugbm9kZSB0eXBlcyBhdCB0aGUgbW9t
ZW50LiBJbiB0aGUKLSAgICAgICAgICogaW5wdXQgY2FzZSB0aGVyZSBzZWVtcyB0byBiZSBhbiBl
eHRyYSBsYXllciB3aXRoIGEgRElWIG9uCi0gICAgICAgICAqIHRvcCBvZiB0aGUgaW5wdXQsIHdo
aWNoIGdldHMgYXNzaWduZWQgdG8gdGhlIGlubmVyLW5vZGUuCi0gICAgICAgICAqIHRhZyAqLwot
ICAgICAgICBpZiAoaW5mby0+ZmxhZyA9PSBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRf
RE9DVU1FTlQpCi0gICAgICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfSFRNTF9F
TEVNRU5UKG5vZGUpKTsKLSAgICAgICAgZWxzZSBpZiAoaW5mby0+ZmxhZyA9PSBXRUJLSVRfSElU
X1RFU1RfUkVTVUxUX0NPTlRFWFRfSU1BR0UpCi0gICAgICAgICAgICBnX2Fzc2VydChXRUJLSVRf
RE9NX0lTX0hUTUxfSU1BR0VfRUxFTUVOVChub2RlKSk7Ci0gICAgICAgIGVsc2UgaWYgKGluZm8t
PmZsYWcgPT0gV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0xJTkspIHsKLSAgICAgICAg
ICAgIC8qIFRoZSBoaXQgdGVzdCB3aWxsIGdpdmUgdXMgdGhlIGlubmVyIHRleHQgbm9kZSwgd2Ug
d2FudAotICAgICAgICAgICAgICogdGhlIEEgdGFnICovCi0gICAgICAgICAgICBXZWJLaXRET01O
b2RlKiBwYXJlbnQgPSB3ZWJraXRfZG9tX25vZGVfZ2V0X3BhcmVudF9ub2RlKG5vZGUpOwotICAg
ICAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0FOQ0hPUl9FTEVNRU5UKHBhcmVu
dCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ19vYmplY3RfdW5yZWYocmVzdWx0KTsKLSAgICAg
ICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi10ZXN0
X3dlYmtpdF9oaXRfdGVzdF9yZXN1bHQoSGl0VGVzdFJlc3VsdEZpeHR1cmUqIGZpeHR1cmUsIGdj
b25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBUZXN0SW5mbyogaW5mbyA9IChUZXN0SW5mbyopZGF0
YTsKLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDUwLCA1MCB9OwotCi0g
ICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKGZpeHR1cmUtPndlYlZpZXcsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8tPmRhdGEsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJ0ZXh0L2h0bWwiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAidXRmLTgiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZTovLyIpOwot
ICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcp
LCAmYWxsb2NhdGlvbik7Ci0gICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53ZWJWaWV3LCAi
bm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0sobG9hZF9zdGF0dXNfY2IpLCBpbmZvKTsK
LSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFy
KiogYXJndikKLXsKLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAg
ICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwotCi0gICAgZ190
ZXN0X2FkZCgiL3dlYmtpdC9oaXR0ZXN0cmVzdWx0L2RvY3VtZW50IiwgSGl0VGVzdFJlc3VsdEZp
eHR1cmUsIAotICAgICAgICAgICAgICAgdGVzdF9pbmZvX25ldygiPGh0bWw+PGJvZHk+PGgxPldl
YktpdEdUSyshPC9oMT48L2JvZHk+PC9odG1sPiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9ET0NVTUVOVCksCi0gICAgICAgICAg
ICAgICBoaXRfdGVzdF9yZXN1bHRfZml4dHVyZV9zZXR1cCwgdGVzdF93ZWJraXRfaGl0X3Rlc3Rf
cmVzdWx0LCBoaXRfdGVzdF9yZXN1bHRfZml4dHVyZV90ZWFyZG93bik7Ci0gICAgLyogV2UgaGFy
ZGNvZGUgYWxsIGVsZW1lbnRzIHRvIGJlIGF0IDAsMCBzbyB0aGF0IHdlIGtub3cgd2hlcmUgdG8K
LSAgICAgKiBnZW5lcmF0ZSB0aGUgYnV0dG9uIGV2ZW50cyAqLwotICAgIGdfdGVzdF9hZGQoIi93
ZWJraXQvaGl0dGVzdHJlc3VsdC9pbWFnZSIsIEhpdFRlc3RSZXN1bHRGaXh0dXJlLAotICAgICAg
ICAgICAgICAgdGVzdF9pbmZvX25ldygiPGh0bWw+PGJvZHk+PGltZyBzdHlsZT0ncG9zaXRpb246
YWJzb2x1dGU7IGxlZnQ6MDsgdG9wOjAnc3JjPScweGRlYWRiZWVmJyB3aWR0aD01MCBoZWlnaHQ9
NTA+PC9pbWc+PC9ib2R5PjwvaHRtbD4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBX
RUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfSU1BR0UpLAotICAgICAgICAgICAgICAgaGl0
X3Rlc3RfcmVzdWx0X2ZpeHR1cmVfc2V0dXAsIHRlc3Rfd2Via2l0X2hpdF90ZXN0X3Jlc3VsdCwg
aGl0X3Rlc3RfcmVzdWx0X2ZpeHR1cmVfdGVhcmRvd24pOwotICAgIGdfdGVzdF9hZGQoIi93ZWJr
aXQvaGl0dGVzdHJlc3VsdC9lZGl0YWJsZSIsIEhpdFRlc3RSZXN1bHRGaXh0dXJlLAotICAgICAg
ICAgICAgICAgdGVzdF9pbmZvX25ldygiPGh0bWw+PGJvZHk+PGlucHV0IHN0eWxlPSdwb3NpdGlv
bjphYnNvbHV0ZTsgbGVmdDowOyB0b3A6MCcgc2l6ZT0nMzUnPjwvaW5wdXQ+PjwvYm9keT48L2h0
bWw+IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX0hJVF9URVNUX1JFU1VM
VF9DT05URVhUX0VESVRBQkxFKSwKLSAgICAgICAgICAgICAgIGhpdF90ZXN0X3Jlc3VsdF9maXh0
dXJlX3NldHVwLCB0ZXN0X3dlYmtpdF9oaXRfdGVzdF9yZXN1bHQsIGhpdF90ZXN0X3Jlc3VsdF9m
aXh0dXJlX3RlYXJkb3duKTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2hpdHRlc3RyZXN1bHQv
bGluayIsIEhpdFRlc3RSZXN1bHRGaXh0dXJlLAotICAgICAgICAgICAgICAgdGVzdF9pbmZvX25l
dygiPGh0bWw+PGJvZHk+PGEgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjA7IHRvcDow
JyBocmVmPSdodHRwOi8vd3d3LmV4YW1wbGUuY29tJz5IRUxMTyBXT1JMRDwvYT48L2JvZHk+PC9o
dG1sPiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9ISVRfVEVTVF9SRVNV
TFRfQ09OVEVYVF9MSU5LKSwKLSAgICAgICAgICAgICAgIGhpdF90ZXN0X3Jlc3VsdF9maXh0dXJl
X3NldHVwLCB0ZXN0X3dlYmtpdF9oaXRfdGVzdF9yZXN1bHQsIGhpdF90ZXN0X3Jlc3VsdF9maXh0
dXJlX3RlYXJkb3duKTsKLSAgICAgICAgICAgICAgIAotICAgIHJldHVybiBnX3Rlc3RfcnVuICgp
OwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0aHR0cGJhY2tl
bmQuYyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RodHRwYmFja2VuZC5jCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Mzc3Njg3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQvZ3RrL3Rlc3RzL3Rlc3RodHRwYmFja2VuZC5jCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHdXN0YXZvIE5vcm9uaGEgU2lsdmEKLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+
Ci0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0jaW5jbHVkZSA8
Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KLQotLy8gTm90IHlldCBwdWJs
aWMgQVBJCi1Tb3VwTWVzc2FnZSogd2Via2l0X25ldHdvcmtfcmVxdWVzdF9nZXRfbWVzc2FnZShX
ZWJLaXROZXR3b3JrUmVxdWVzdCogcmVxdWVzdCk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBuYXZpZ2F0
aW9uX3BvbGljeV9kZWNpc2lvbl9yZXF1ZXN0ZWRfY2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFdlYktpdFdlYkZyYW1lKiB3ZWJfZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXZWJLaXRXZWJOYXZpZ2F0aW9uQWN0aW9uKiBhY3Rpb24sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFdlYlBvbGljeURlY2lz
aW9uKiBkZWNpc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBTb3VwTWVzc2FnZSogbWVzc2Fn
ZSA9IHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfZ2V0X21lc3NhZ2UocmVxdWVzdCk7Ci0KLSAgICAv
KiAxIC0+IHdlYmtpdF9uZXR3b3JrX3JlcXVlc3Rfd2l0aF9jb3JlX3JlcXVlc3QKLSAgICAgKgot
ICAgICAqIFRoZSBTb3VwTWVzc2FnZSBpcyBjcmVhdGVkIGV4Y2x1c2l2ZWx5IGZvciB0aGUgZW1p
c3Npb24gb2YgdGhpcwotICAgICAqIHNpZ25hbC4KLSAgICAgKi8KLSAgICBnX2Fzc2VydF9jbXBp
bnQoR19PQkpFQ1QobWVzc2FnZSktPnJlZl9jb3VudCwgPT0sIDEpOwotCi0gICAgcmV0dXJuIEZB
TFNFOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3NvdXBfbWVzc2FnZV9saWZldGltZSgpCi17Ci0g
ICAgV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92
aWV3X25ldygpKTsKLQotICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYl92aWV3KTsKLQotICAgIGdf
c2lnbmFsX2Nvbm5lY3Qod2ViX3ZpZXcsICJuYXZpZ2F0aW9uLXBvbGljeS1kZWNpc2lvbi1yZXF1
ZXN0ZWQiLAotICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhuYXZpZ2F0aW9uX3BvbGlj
eV9kZWNpc2lvbl9yZXF1ZXN0ZWRfY2IpLAotICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0K
LSAgICAvKiBsb2FkX3VyaSB3aWxsIHRyaWdnZXIgdGhlIG5hdmlnYXRpb24tcG9saWN5LWRlY2lz
aW9uLXJlcXVlc3RlZAotICAgICAqIHNpZ25hbCBlbWlzc2lvbjsKLSAgICAgKi8KLSAgICB3ZWJr
aXRfd2ViX3ZpZXdfbG9hZF91cmkod2ViX3ZpZXcsICJodHRwOi8vMTI3LjAuMC4xLyIpOwotCi0g
ICAgZ19vYmplY3RfdW5yZWYod2ViX3ZpZXcpOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hh
cioqIGFyZ3YpCi17Ci0gICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOwotCi0g
ICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKLSAgICBnX3Rl
c3RfYWRkX2Z1bmMoIi93ZWJraXQvc291cG1lc3NhZ2UvbGlmZXRpbWUiLCB0ZXN0X3NvdXBfbWVz
c2FnZV9saWZldGltZSk7Ci0gICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7Ci19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0a2V5ZXZlbnRzLmMgYi9Tb3VyY2UvV2ViS2l0
L2d0ay90ZXN0cy90ZXN0a2V5ZXZlbnRzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGFjZDAxZjMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGtleWV2
ZW50cy5jCisrKyAvZGV2L251bGwKQEAgLTEsMzkwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDksIDIwMTAgTWFydGluIFJvYmluc29uIDxtcm9iaW5zb25Ad2Via2l0Lm9yZz4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHVuaXN0ZC5o
PgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0jaW5jbHVk
ZSA8d2Via2l0L3dlYmtpdC5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVm
Lmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0UmVmLmg+Ci0KLXR5cGVkZWYg
c3RydWN0IHsKLSAgICBjaGFyKiBwYWdlOwotICAgIGNoYXIqIHRleHQ7Ci0gICAgZ2Jvb2xlYW4g
c2hvdWxkQmVIYW5kbGVkOwotfSBUZXN0SW5mbzsKLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIEd0
a1dpZGdldCogd2luZG93OwotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXc7Ci0gICAgR01haW5M
b29wKiBsb29wOwotICAgIFRlc3RJbmZvKiBpbmZvOwotfSBLZXlFdmVudEZpeHR1cmU7Ci0KLVRl
c3RJbmZvKgotdGVzdF9pbmZvX25ldyhjb25zdCBjaGFyKiBwYWdlLCBnYm9vbGVhbiBzaG91bGRC
ZUhhbmRsZWQpCi17Ci0gICAgVGVzdEluZm8qIGluZm87Ci0KLSAgICBpbmZvID0gZ19zbGljZV9u
ZXcoVGVzdEluZm8pOwotICAgIGluZm8tPnBhZ2UgPSBnX3N0cmR1cChwYWdlKTsKLSAgICBpbmZv
LT5zaG91bGRCZUhhbmRsZWQgPSBzaG91bGRCZUhhbmRsZWQ7Ci0gICAgaW5mby0+dGV4dCA9IDA7
Ci0KLSAgICByZXR1cm4gaW5mbzsKLX0KLQotdm9pZAotdGVzdF9pbmZvX2Rlc3Ryb3koVGVzdElu
Zm8qIGluZm8pCi17Ci0gICAgZ19mcmVlKGluZm8tPnBhZ2UpOwotICAgIGdfZnJlZShpbmZvLT50
ZXh0KTsKLSAgICBnX3NsaWNlX2ZyZWUoVGVzdEluZm8sIGluZm8pOwotfQotCi1zdGF0aWMgdm9p
ZCBrZXlfZXZlbnRfZml4dHVyZV9zZXR1cChLZXlFdmVudEZpeHR1cmUqIGZpeHR1cmUsIGdjb25z
dHBvaW50ZXIgZGF0YSkKLXsKLSAgICBmaXh0dXJlLT5sb29wID0gZ19tYWluX2xvb3BfbmV3KE5V
TEwsIFRSVUUpOwotCi0gICAgZml4dHVyZS0+d2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJ
TkRPV19UT1BMRVZFTCk7Ci0gICAgZml4dHVyZS0+d2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3
ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotCi0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRB
SU5FUihmaXh0dXJlLT53aW5kb3cpLCBHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpKTsKLX0K
LQotc3RhdGljIHZvaWQga2V5X2V2ZW50X2ZpeHR1cmVfdGVhcmRvd24oS2V5RXZlbnRGaXh0dXJl
KiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ3RrX3dpZGdldF9kZXN0cm95
KGZpeHR1cmUtPndpbmRvdyk7Ci0gICAgZ19tYWluX2xvb3BfdW5yZWYoZml4dHVyZS0+bG9vcCk7
Ci0gICAgdGVzdF9pbmZvX2Rlc3Ryb3koZml4dHVyZS0+aW5mbyk7Ci19Ci0KLXN0YXRpYyBnYm9v
bGVhbiBrZXlfcHJlc3NfZXZlbnRfY2IoV2ViS2l0V2ViVmlldyogd2ViVmlldywgR2RrRXZlbnQq
IGV2ZW50LCBncG9pbnRlciBkYXRhKQotewotICAgIEtleUV2ZW50Rml4dHVyZSogZml4dHVyZSA9
IChLZXlFdmVudEZpeHR1cmUqKWRhdGE7Ci0gICAgZ2Jvb2xlYW4gaGFuZGxlZCA9IEdUS19XSURH
RVRfR0VUX0NMQVNTKGZpeHR1cmUtPndlYlZpZXcpLT5rZXlfcHJlc3NfZXZlbnQoR1RLX1dJREdF
VChmaXh0dXJlLT53ZWJWaWV3KSwgJmV2ZW50LT5rZXkpOwotICAgIGdfYXNzZXJ0X2NtcGludCho
YW5kbGVkLCA9PSwgZml4dHVyZS0+aW5mby0+c2hvdWxkQmVIYW5kbGVkKTsKLQotICAgIHJldHVy
biBGQUxTRTsKLX0KLQotc3RhdGljIGdib29sZWFuIGtleV9yZWxlYXNlX2V2ZW50X2NiKFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcsIEdka0V2ZW50KiBldmVudCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAg
ICAvLyBXZWJDb3JlIG5ldmVyIHNlZW1zIHRvIG1hcmsga2V5dXAgZXZlbnRzIGFzIGhhbmRsZWQu
Ci0gICAgS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJlID0gKEtleUV2ZW50Rml4dHVyZSopZGF0YTsK
LSAgICBnYm9vbGVhbiBoYW5kbGVkID0gR1RLX1dJREdFVF9HRVRfQ0xBU1MoZml4dHVyZS0+d2Vi
VmlldyktPmtleV9wcmVzc19ldmVudChHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpLCAmZXZl
bnQtPmtleSk7Ci0gICAgZ19hc3NlcnQoIWhhbmRsZWQpOwotCi0gICAgZ19tYWluX2xvb3BfcXVp
dChmaXh0dXJlLT5sb29wKTsKLQotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQg
dGVzdF9rZXlwcmVzc19ldmVudHNfbG9hZF9zdGF0dXNfY2IoV2ViS2l0V2ViVmlldyogd2ViVmll
dywgR1BhcmFtU3BlYyogc3BlYywgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBLZXlFdmVudEZpeHR1
cmUqIGZpeHR1cmUgPSAoS2V5RXZlbnRGaXh0dXJlKilkYXRhOwotICAgIFdlYktpdExvYWRTdGF0
dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJWaWV3KTsKLSAg
ICBpZiAoc3RhdHVzID09IFdFQktJVF9MT0FEX0ZJTklTSEVEKSB7Ci0gICAgICAgIGdfc2lnbmFs
X2Nvbm5lY3QoZml4dHVyZS0+d2ViVmlldywgImtleS1wcmVzcy1ldmVudCIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgR19DQUxMQkFDSyhrZXlfcHJlc3NfZXZlbnRfY2IpLCBmaXh0dXJlKTsK
LSAgICAgICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53ZWJWaWV3LCAia2V5LXJlbGVhc2Ut
ZXZlbnQiLAotICAgICAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0soa2V5X3JlbGVhc2Vf
ZXZlbnRfY2IpLCBmaXh0dXJlKTsKLSAgICAgICAgaWYgKCFndGtfdGVzdF93aWRnZXRfc2VuZF9r
ZXkoR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2RrX3VuaWNvZGVfdG9fa2V5dmFsKCdhJyksIDApKQotICAgICAgICAg
ICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICB9Ci0KLX0KLQotZ2Jvb2xlYW4gbWFwX2V2
ZW50X2NiKEd0a1dpZGdldCAqd2lkZ2V0LCBHZGtFdmVudCogZXZlbnQsIGdwb2ludGVyIGRhdGEp
Ci17Ci0gICAgS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJlID0gKEtleUV2ZW50Rml4dHVyZSopZGF0
YTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoZml4dHVyZS0+d2ViVmlldywgZml4
dHVyZS0+aW5mby0+cGFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRleHQv
aHRtbCIsICJ1dGYtOCIsICJmaWxlOi8vIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0
aWMgdm9pZCBzZXR1cF9rZXlldmVudF90ZXN0KEtleUV2ZW50Rml4dHVyZSogZml4dHVyZSwgZ2Nv
bnN0cG9pbnRlciBkYXRhLCBHQ2FsbGJhY2sgbG9hZF9ldmVudF9jYWxsYmFjaykKLXsKLSAgICBm
aXh0dXJlLT5pbmZvID0gKFRlc3RJbmZvKilkYXRhOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4
dHVyZS0+d2luZG93LCAibWFwLWV2ZW50IiwKLSAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJB
Q0sobWFwX2V2ZW50X2NiKSwgZml4dHVyZSk7Ci0KLSAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMo
R1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSk7Ci0gICAgZ3RrX3dpZGdldF9zaG93KGZpeHR1
cmUtPndpbmRvdyk7Ci0gICAgZ3RrX3dpZGdldF9zaG93KEdUS19XSURHRVQoZml4dHVyZS0+d2Vi
VmlldykpOwotICAgIGd0a193aW5kb3dfcHJlc2VudChHVEtfV0lORE9XKGZpeHR1cmUtPndpbmRv
dykpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53ZWJWaWV3LCAibm90aWZ5Ojps
b2FkLXN0YXR1cyIsCi0gICAgICAgICAgICAgICAgICAgICBsb2FkX2V2ZW50X2NhbGxiYWNrLCBm
aXh0dXJlKTsKLQotICAgIGdfbWFpbl9sb29wX3J1bihmaXh0dXJlLT5sb29wKTsKLX0KLQotc3Rh
dGljIHZvaWQgdGVzdF9rZXlwcmVzc19ldmVudHMoS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJlLCBn
Y29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgc2V0dXBfa2V5ZXZlbnRfdGVzdChmaXh0dXJlLCBk
YXRhLCBHX0NBTExCQUNLKHRlc3Rfa2V5cHJlc3NfZXZlbnRzX2xvYWRfc3RhdHVzX2NiKSk7Ci19
Ci0KLXN0YXRpYyBnYm9vbGVhbiBlbGVtZW50X3RleHRfZXF1YWxfdG8oSlNDb250ZXh0UmVmIGNv
bnRleHQsIGNvbnN0IGdjaGFyKiB0ZXh0KQotewotICAgIEpTU3RyaW5nUmVmIHNjcmlwdFN0cmlu
ZyA9IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKAotICAgICAgIndpbmRvdy5kb2N1bWVu
dC5nZXRFbGVtZW50QnlJZChcImluXCIpLnZhbHVlOyIpOwotICAgIEpTVmFsdWVSZWYgdmFsdWUg
PSBKU0V2YWx1YXRlU2NyaXB0KGNvbnRleHQsIHNjcmlwdFN0cmluZywgMCwgMCwgMCwgMCk7Ci0g
ICAgSlNTdHJpbmdSZWxlYXNlKHNjcmlwdFN0cmluZyk7Ci0KLSAgICAvLyBJZiB0aGUgdmFsdWUg
aXNuJ3QgYSBzdHJpbmcsIHRoZSBlbGVtZW50IGlzIHByb2JhYmx5IGEgZGl2Ci0gICAgLy8gc28g
Z3JhYiB0aGUgaW5uZXJUZXh0IGluc3RlYWQuCi0gICAgaWYgKCFKU1ZhbHVlSXNTdHJpbmcoY29u
dGV4dCwgdmFsdWUpKSB7Ci0gICAgICAgIEpTU3RyaW5nUmVmIHNjcmlwdFN0cmluZyA9IEpTU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKAotICAgICAgICAgICJ3aW5kb3cuZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoXCJpblwiKS5pbm5lclRleHQ7Iik7Ci0gICAgICAgIHZhbHVlID0gSlNFdmFs
dWF0ZVNjcmlwdChjb250ZXh0LCBzY3JpcHRTdHJpbmcsIDAsIDAsIDAsIDApOwotICAgICAgICBK
U1N0cmluZ1JlbGVhc2Uoc2NyaXB0U3RyaW5nKTsKLSAgICB9Ci0KLSAgICBnX2Fzc2VydChKU1Zh
bHVlSXNTdHJpbmcoY29udGV4dCwgdmFsdWUpKTsKLSAgICBKU1N0cmluZ1JlZiBpbnB1dFN0cmlu
ZyA9IEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsIDApOwotICAgIGdfYXNzZXJ0
KGlucHV0U3RyaW5nKTsKLQotICAgIGdpbnQgc2l6ZSA9IEpTU3RyaW5nR2V0TWF4aW11bVVURjhD
U3RyaW5nU2l6ZShpbnB1dFN0cmluZyk7Ci0gICAgZ2NoYXIqIGNTdHJpbmcgPSBnX21hbGxvYyhz
aXplKTsKLSAgICBKU1N0cmluZ0dldFVURjhDU3RyaW5nKGlucHV0U3RyaW5nLCBjU3RyaW5nLCBz
aXplKTsKLSAgICBKU1N0cmluZ1JlbGVhc2UoaW5wdXRTdHJpbmcpOwotCi0gICAgZ2Jvb2xlYW4g
cmVzdWx0ID0gZ191dGY4X2NvbGxhdGUoY1N0cmluZywgdGV4dCkgPT0gMDsKLSAgICBnX2ZyZWUo
Y1N0cmluZyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF9pbWVf
bG9hZF9zdGF0dXNfY2IoV2ViS2l0V2ViVmlldyogd2ViVmlldywgR1BhcmFtU3BlYyogc3BlYywg
Z3BvaW50ZXIgZGF0YSkKLXsKLSAgICBLZXlFdmVudEZpeHR1cmUqIGZpeHR1cmUgPSAoS2V5RXZl
bnRGaXh0dXJlKilkYXRhOwotICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dl
Yl92aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJWaWV3KTsKLSAgICBpZiAoc3RhdHVzICE9IFdFQktJ
VF9MT0FEX0ZJTklTSEVEKQotICAgICAgICByZXR1cm47Ci0KLSAgICBKU0dsb2JhbENvbnRleHRS
ZWYgY29udGV4dCA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X2dsb2JhbF9jb250ZXh0KAotICAgICAg
ICB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUod2ViVmlldykpOwotICAgIGdfYXNzZXJ0
KGNvbnRleHQpOwotCi0gICAgR3RrSU1Db250ZXh0KiBpbUNvbnRleHQgPSAwOwotICAgIGdfb2Jq
ZWN0X2dldCh3ZWJWaWV3LCAiaW0tY29udGV4dCIsICZpbUNvbnRleHQsIE5VTEwpOwotICAgIGdf
YXNzZXJ0KGltQ29udGV4dCk7Ci0KLSAgICAvLyBUZXN0IHRoYXQgY29tbWl0cyB0aGF0IGhhcHBl
biBvdXRzaWRlIG9mIGtleSBldmVudHMKLSAgICAvLyBjaGFuZ2UgdGhlIHRleHQgZmllbGQgaW1t
ZWRpYXRlbHkuIFRoaXMgY2xvc2VseSByZXBsaWNhdGVzCi0gICAgLy8gdGhlIGJlaGF2aW9yIG9m
IFNDSU0uCi0gICAgZ19hc3NlcnQoZWxlbWVudF90ZXh0X2VxdWFsX3RvKGNvbnRleHQsICIiKSk7
Ci0gICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKGltQ29udGV4dCwgImNvbW1pdCIsICJhIik7Ci0g
ICAgZ19hc3NlcnQoZWxlbWVudF90ZXh0X2VxdWFsX3RvKGNvbnRleHQsICJhIikpOwotICAgIGdf
c2lnbmFsX2VtaXRfYnlfbmFtZShpbUNvbnRleHQsICJjb21taXQiLCAiYiIpOwotICAgIGdfYXNz
ZXJ0KGVsZW1lbnRfdGV4dF9lcXVhbF90byhjb250ZXh0LCAiYWIiKSk7Ci0gICAgZ19zaWduYWxf
ZW1pdF9ieV9uYW1lKGltQ29udGV4dCwgImNvbW1pdCIsICJjIik7Ci0gICAgZ19hc3NlcnQoZWxl
bWVudF90ZXh0X2VxdWFsX3RvKGNvbnRleHQsICJhYmMiKSk7Ci0KLSAgICBnX29iamVjdF91bnJl
ZihpbUNvbnRleHQpOwotICAgIGdfbWFpbl9sb29wX3F1aXQoZml4dHVyZS0+bG9vcCk7Ci19Ci0K
LXN0YXRpYyB2b2lkIHRlc3RfaW1lKEtleUV2ZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9p
bnRlciBkYXRhKQotewotICAgIHNldHVwX2tleWV2ZW50X3Rlc3QoZml4dHVyZSwgZGF0YSwgR19D
QUxMQkFDSyh0ZXN0X2ltZV9sb2FkX3N0YXR1c19jYikpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4g
dmVyaWZ5X2NvbnRlbnRzKGdwb2ludGVyIGRhdGEpCi17Ci0gICAgS2V5RXZlbnRGaXh0dXJlKiBm
aXh0dXJlID0gKEtleUV2ZW50Rml4dHVyZSopZGF0YTsKLSAgICBKU0dsb2JhbENvbnRleHRSZWYg
Y29udGV4dCA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X2dsb2JhbF9jb250ZXh0KAotICAgICAgICB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUoZml4dHVyZS0+d2ViVmlldykpOwotICAgIGdf
YXNzZXJ0KGNvbnRleHQpOwotCi0gICAgZ19hc3NlcnQoZWxlbWVudF90ZXh0X2VxdWFsX3RvKGNv
bnRleHQsIGZpeHR1cmUtPmluZm8tPnRleHQpKTsKLSAgICBnX21haW5fbG9vcF9xdWl0KGZpeHR1
cmUtPmxvb3ApOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF9ibG9j
a2luZ19sb2FkX3N0YXR1c19jYihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHUGFyYW1TcGVjKiBz
cGVjLCBncG9pbnRlciBkYXRhKQotewotICAgIEtleUV2ZW50Rml4dHVyZSogZml4dHVyZSA9IChL
ZXlFdmVudEZpeHR1cmUqKWRhdGE7Ci0gICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYlZpZXcpOwotICAgIGlmIChzdGF0dXMgIT0g
V0VCS0lUX0xPQURfRklOSVNIRUQpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFRoZSBmaXJz
dCBrZXlwcmVzcyBldmVudCBzaG91bGQgbm90IG1vZGlmeSB0aGUgZmllbGQuCi0gICAgZml4dHVy
ZS0+aW5mby0+dGV4dCA9IGdfc3RyZHVwKCJiYyIpOwotICAgIGlmICghZ3RrX3Rlc3Rfd2lkZ2V0
X3NlbmRfa2V5KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldyksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnZGtfdW5pY29kZV90b19rZXl2YWwoJ2EnKSwgMCkpCi0gICAgICAg
IGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0gICAgaWYgKCFndGtfdGVzdF93aWRnZXRfc2VuZF9r
ZXkoR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnZGtfdW5pY29kZV90b19rZXl2YWwoJ2InKSwgMCkpCi0gICAgICAgIGdfYXNz
ZXJ0X25vdF9yZWFjaGVkKCk7Ci0gICAgaWYgKCFndGtfdGVzdF93aWRnZXRfc2VuZF9rZXkoR1RL
X1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnZGtfdW5pY29kZV90b19rZXl2YWwoJ2MnKSwgMCkpCi0gICAgICAgIGdfYXNzZXJ0X25v
dF9yZWFjaGVkKCk7Ci0KLSAgICBnX2lkbGVfYWRkKHZlcmlmeV9jb250ZW50cywgZml4dHVyZSk7
Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RfYmxvY2tpbmcoS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJl
LCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgc2V0dXBfa2V5ZXZlbnRfdGVzdChmaXh0dXJl
LCBkYXRhLCBHX0NBTExCQUNLKHRlc3RfYmxvY2tpbmdfbG9hZF9zdGF0dXNfY2IpKTsKLX0KLQot
I2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpCi1zdGF0aWMgdm9pZCB0ZXN0X3hpbV9sb2Fk
X3N0YXR1c19jYihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHUGFyYW1TcGVjKiBzcGVjLCBncG9p
bnRlciBkYXRhKQotewotICAgIEtleUV2ZW50Rml4dHVyZSogZml4dHVyZSA9IChLZXlFdmVudEZp
eHR1cmUqKWRhdGE7Ci0gICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYlZpZXcpOwotICAgIGlmIChzdGF0dXMgIT0gV0VCS0lUX0xP
QURfRklOSVNIRUQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEd0a0lNQ29udGV4dCogaW1Db250
ZXh0ID0gMDsKLSAgICBnX29iamVjdF9nZXQod2ViVmlldywgImltLWNvbnRleHQiLCAmaW1Db250
ZXh0LCBOVUxMKTsKLSAgICBnX2Fzc2VydChpbUNvbnRleHQpOwotCi0gICAgZ2NoYXIqIG9yaWdp
bmFsSWQgPSBnX3N0cmR1cChndGtfaW1fbXVsdGljb250ZXh0X2dldF9jb250ZXh0X2lkKEdUS19J
TV9NVUxUSUNPTlRFWFQoaW1Db250ZXh0KSkpOwotICAgIGd0a19pbV9tdWx0aWNvbnRleHRfc2V0
X2NvbnRleHRfaWQoR1RLX0lNX01VTFRJQ09OVEVYVChpbUNvbnRleHQpLCAieGltIik7Ci0KLSAg
ICAvLyBUZXN0IHRoYXQgY29tbWl0cyB0aGF0IGhhcHBlbiBvdXRzaWRlIG9mIGtleSBldmVudHMK
LSAgICAvLyBjaGFuZ2UgdGhlIHRleHQgZmllbGQgaW1tZWRpYXRlbHkuIFRoaXMgY2xvc2VseSBy
ZXBsaWNhdGVzCi0gICAgLy8gdGhlIGJlaGF2aW9yIG9mIFNDSU0uCi0gICAgZml4dHVyZS0+aW5m
by0+dGV4dCA9IGdfc3RyZHVwKCJkZWJpYW4iKTsKLSAgICBpZiAoIWd0a190ZXN0X3dpZGdldF9z
ZW5kX2tleShHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2RrX3VuaWNvZGVfdG9fa2V5dmFsKCdkJyksIDApKQotICAgICAgICBn
X2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAgIGlmICghZ3RrX3Rlc3Rfd2lkZ2V0X3NlbmRfa2V5
KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldyksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdka191bmljb2RlX3RvX2tleXZhbCgnZScpLCAwKSkKLSAgICAgICAgZ19hc3NlcnRfbm90
X3JlYWNoZWQoKTsKLSAgICBpZiAoIWd0a190ZXN0X3dpZGdldF9zZW5kX2tleShHVEtfV0lER0VU
KGZpeHR1cmUtPndlYlZpZXcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGtfdW5p
Y29kZV90b19rZXl2YWwoJ2InKSwgMCkpCi0gICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7
Ci0gICAgaWYgKCFndGtfdGVzdF93aWRnZXRfc2VuZF9rZXkoR1RLX1dJREdFVChmaXh0dXJlLT53
ZWJWaWV3KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RrX3VuaWNvZGVfdG9fa2V5
dmFsKCdpJyksIDApKQotICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAgIGlmICgh
Z3RrX3Rlc3Rfd2lkZ2V0X3NlbmRfa2V5KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldyksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdka191bmljb2RlX3RvX2tleXZhbCgnYScpLCAw
KSkKLSAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICBpZiAoIWd0a190ZXN0X3dp
ZGdldF9zZW5kX2tleShHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnZGtfdW5pY29kZV90b19rZXl2YWwoJ24nKSwgMCkpCi0gICAgICAg
IGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0KLSAgICBndGtfaW1fbXVsdGljb250ZXh0X3NldF9j
b250ZXh0X2lkKEdUS19JTV9NVUxUSUNPTlRFWFQoaW1Db250ZXh0KSwgb3JpZ2luYWxJZCk7Ci0g
ICAgZ19mcmVlKG9yaWdpbmFsSWQpOwotICAgIGdfb2JqZWN0X3VucmVmKGltQ29udGV4dCk7Ci0K
LSAgICBnX2lkbGVfYWRkKHZlcmlmeV9jb250ZW50cywgZml4dHVyZSk7Ci19Ci0KLXN0YXRpYyB2
b2lkIHRlc3RfeGltKEtleUV2ZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRh
KQotewotICAgIHNldHVwX2tleWV2ZW50X3Rlc3QoZml4dHVyZSwgZGF0YSwgR19DQUxMQkFDSyh0
ZXN0X3hpbV9sb2FkX3N0YXR1c19jYikpOwotfQotI2VuZGlmCi0KLWludCBtYWluKGludCBhcmdj
LCBjaGFyKiogYXJndikKLXsKLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7
Ci0KLSAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwotCi0K
LSAgICAvLyBXZSdsbCB0ZXN0IGlucHV0IG9uIGEgc2xldyBvZiBkaWZmZXJlbnQgbm9kZSB0eXBl
cy4gS2V5IGV2ZW50cyB0bwotICAgIC8vIHRleHQgaW5wdXRzIGFuZCBlZGl0YWJsZSBkaXZzIHNo
b3VsZCBiZSBtYXJrZWQgYXMgaGFuZGxlZC4gS2V5IGV2ZW50cwotICAgIC8vIHRvIGJ1dHRvbnMg
YW5kIGxpbmtzIHNob3VsZCBub3QuCi0gICAgY29uc3QgY2hhciogdGV4dGlucHV0X2h0bWwgPSAi
PGh0bWw+PGJvZHk+PGlucHV0IGlkPVwiaW5cIiB0eXBlPVwidGV4dFwiPiIKLSAgICAgICAgIjxz
Y3JpcHQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2luJykuZm9jdXMoKTs8L3NjcmlwdD48L2Jv
ZHk+PC9odG1sPiI7Ci0gICAgY29uc3QgY2hhciogYnV0dG9uX2h0bWwgPSAiPGh0bWw+PGJvZHk+
PGlucHV0IGlkPVwiaW5cIiB0eXBlPVwiYnV0dG9uXCI+IgotICAgICAgICAiPHNjcmlwdD5kb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnaW4nKS5mb2N1cygpOzwvc2NyaXB0PjwvYm9keT48L2h0bWw+
IjsKLSAgICBjb25zdCBjaGFyKiBsaW5rX2h0bWwgPSAiPGh0bWw+PGJvZHk+PGEgaHJlZj1cImh0
dHA6Ly93d3cuZ25vbWUub3JnXCIgaWQ9XCJpblwiPiIKLSAgICAgICAgIkxJTktZIE1DTElOS0VS
U09OPC9hPjxzY3JpcHQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2luJykuZm9jdXMoKTs8L3Nj
cmlwdD4iCi0gICAgICAgICI8L2JvZHk+PC9odG1sPiI7Ci0gICAgY29uc3QgY2hhciogZGl2X2h0
bWwgPSAiPGh0bWw+PGJvZHk+PGRpdiBpZD1cImluXCIgY29udGVudGVkaXRhYmxlPVwidHJ1ZVwi
PiIKLSAgICAgICAgIjxzY3JpcHQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2luJykuZm9jdXMo
KTs8L3NjcmlwdD48L2JvZHk+PC9odG1sPiI7Ci0KLSAgICAvLyBUaGVzZSBhcmUgc2ltaWxhciB0
byB0aGUgYmxvY2tzIGFib3ZlLCBidXQgdGhleSBzaG91bGQgYmxvY2sgdGhlIGZpcnN0Ci0gICAg
Ly8ga2V5cHJlc3MgbW9kaWZ5aW5nIHRoZSBlZGl0YWJsZSBub2RlLgotICAgIGNvbnN0IGNoYXIq
IHRleHRpbnB1dF9odG1sX2Jsb2NraW5nID0gIjxodG1sPjxib2R5PiIKLSAgICAgICAgIjxpbnB1
dCBpZD1cImluXCIgdHlwZT1cInRleHRcIiAiCi0gICAgICAgICJvbmtleXByZXNzPVwiaWYgKGZp
cnN0KSB7ZXZlbnQucHJldmVudERlZmF1bHQoKTtmaXJzdD1mYWxzZTt9XCI+IgotICAgICAgICAi
PHNjcmlwdD5maXJzdCA9IHRydWU7XG5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW4nKS5mb2N1
cygpOzwvc2NyaXB0PlxuIgotICAgICAgICAiPC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4iOwotICAg
IGNvbnN0IGNoYXIqIGRpdl9odG1sX2Jsb2NraW5nID0gIjxodG1sPjxib2R5PiIKLSAgICAgICAg
IjxkaXYgaWQ9XCJpblwiIGNvbnRlbnRlZGl0YWJsZT1cInRydWVcIiAiCi0gICAgICAgICJvbmtl
eXByZXNzPVwiaWYgKGZpcnN0KSB7ZXZlbnQucHJldmVudERlZmF1bHQoKTtmaXJzdD1mYWxzZTt9
XCI+IgotICAgICAgICAiPHNjcmlwdD5maXJzdCA9IHRydWU7IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdpbicpLmZvY3VzKCk7PC9zY3JpcHQ+XG4iCi0gICAgICAgICI8L3NjcmlwdD48L2JvZHk+
PC9odG1sPiI7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2tleWV2ZW50cy9ldmVudC10ZXh0
aW5wdXQiLCBLZXlFdmVudEZpeHR1cmUsCi0gICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KHRl
eHRpbnB1dF9odG1sLCBUUlVFKSwKLSAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3Nl
dHVwLAotICAgICAgICAgICAgICAgdGVzdF9rZXlwcmVzc19ldmVudHMsCi0gICAgICAgICAgICAg
ICBrZXlfZXZlbnRfZml4dHVyZV90ZWFyZG93bik7Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9r
ZXlldmVudHMvZXZlbnQtYnV0dG9ucyIsIEtleUV2ZW50Rml4dHVyZSwKLSAgICAgICAgICAgICAg
IHRlc3RfaW5mb19uZXcoYnV0dG9uX2h0bWwsIEZBTFNFKSwKLSAgICAgICAgICAgICAgIGtleV9l
dmVudF9maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF9rZXlwcmVzc19ldmVudHMs
Ci0gICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV90ZWFyZG93bik7Ci0gICAgZ190ZXN0
X2FkZCgiL3dlYmtpdC9rZXlldmVudHMvZXZlbnQtbGluayIsIEtleUV2ZW50Rml4dHVyZSwKLSAg
ICAgICAgICAgICAgIHRlc3RfaW5mb19uZXcobGlua19odG1sLCBGQUxTRSksCi0gICAgICAgICAg
ICAgICBrZXlfZXZlbnRfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3Rfa2V5cHJl
c3NfZXZlbnRzLAotICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfdGVhcmRvd24pOwot
ICAgIGdfdGVzdF9hZGQoIi93ZWJraXQva2V5ZXZlbnQvZXZlbnQtZGl2IiwgS2V5RXZlbnRGaXh0
dXJlLAotICAgICAgICAgICAgICAgdGVzdF9pbmZvX25ldyhkaXZfaHRtbCwgVFJVRSksCi0gICAg
ICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3Rf
a2V5cHJlc3NfZXZlbnRzLAotICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfdGVhcmRv
d24pOwotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQva2V5ZXZlbnQvaW1lLXRleHRpbnB1dCIsIEtl
eUV2ZW50Rml4dHVyZSwKLSAgICAgICAgICAgICAgIHRlc3RfaW5mb19uZXcodGV4dGlucHV0X2h0
bWwsIFRSVUUpLAotICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfc2V0dXAsCi0gICAg
ICAgICAgICAgICB0ZXN0X2ltZSwKLSAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3Rl
YXJkb3duKTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2tleWV2ZW50L2ltZS1kaXYiLCBLZXlF
dmVudEZpeHR1cmUsCi0gICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KGRpdl9odG1sLCBUUlVF
KSwKLSAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3NldHVwLAotICAgICAgICAgICAg
ICAgdGVzdF9pbWUsCi0gICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV90ZWFyZG93bik7
Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9rZXlldmVudC9ibG9jay10ZXh0aW5wdXQiLCBLZXlF
dmVudEZpeHR1cmUsCi0gICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KHRleHRpbnB1dF9odG1s
X2Jsb2NraW5nLCBUUlVFKSwKLSAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3NldHVw
LAotICAgICAgICAgICAgICAgdGVzdF9ibG9ja2luZywKLSAgICAgICAgICAgICAgIGtleV9ldmVu
dF9maXh0dXJlX3RlYXJkb3duKTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2tleWV2ZW50L2Js
b2NrLWRpdiIsIEtleUV2ZW50Rml4dHVyZSwKLSAgICAgICAgICAgICAgIHRlc3RfaW5mb19uZXco
ZGl2X2h0bWxfYmxvY2tpbmcsIFRSVUUpLAotICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1
cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X2Jsb2NraW5nLAotICAgICAgICAgICAgICAg
a2V5X2V2ZW50X2ZpeHR1cmVfdGVhcmRvd24pOwotI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19Y
MTEpCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9rZXlldmVudC94aW0tdGV4dGlucHV0IiwgS2V5
RXZlbnRGaXh0dXJlLAotICAgICAgICAgICAgICAgdGVzdF9pbmZvX25ldyh0ZXh0aW5wdXRfaHRt
bCwgVFJVRSksCi0gICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV9zZXR1cCwKLSAgICAg
ICAgICAgICAgIHRlc3RfeGltLAotICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfdGVh
cmRvd24pOwotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQva2V5ZXZlbnQveGltLWRpdiIsIEtleUV2
ZW50Rml4dHVyZSwKLSAgICAgICAgICAgICAgIHRlc3RfaW5mb19uZXcoZGl2X2h0bWwsIFRSVUUp
LAotICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAg
ICB0ZXN0X3hpbSwKLSAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3RlYXJkb3duKTsK
LSNlbmRpZgotCi0gICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsKLX0KLQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGxvYWRpbmcuYyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rl
c3RzL3Rlc3Rsb2FkaW5nLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYTkyMGYu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGxvYWRpbmcuYworKysg
L2Rldi9udWxsCkBAIC0xLDQzNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAy
MDEwIEd1c3Rhdm8gTm9yb25oYSBTaWx2YQotICogQ29weXJpZ2h0IChDKSAyMDA5IElnYWxpYSBT
LkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8
bGlic291cC9zb3VwLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dl
YmtpdC5oPgotCi0vKiBUaGlzIHN0cmluZyBoYXMgdG8gYmUgcmF0aGVyIGJpZyBiZWNhdXNlIG9m
IHRoZSBjYW5jZWxsZWQgdGVzdCAtIGl0Ci0gKiBsb29rcyBsaWtlIHNvdXAgcmVmdXNlcyB0byBz
ZW5kIG9yIHJlY2VpdmUgYSB0b28gc21hbGwgY2h1bmsgKi8KLSNkZWZpbmUgSFRNTF9TVFJJTkcg
IjxodG1sPjxib2R5PlRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyE8L2JvZHk+PC9odG1sPiIKLQotU291cFVSSSogYmFzZV91cmk7Ci0K
LS8qIEZvciByZWFsIHJlcXVlc3QgdGVzdGluZyAqLwotc3RhdGljIHZvaWQKLXNlcnZlcl9jYWxs
YmFjayhTb3VwU2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtc2csCi0gICAgICAgICAgICAg
ICAgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSogcXVlcnksCi0gICAgICAgICAgICAgICAg
U291cENsaWVudENvbnRleHQqIGNvbnRleHQsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgaWYgKG1z
Zy0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgewotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0
X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVT
X09LKTsKLQotICAgIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3Rlc3RfbG9hZGluZ19zdGF0dXMi
KSB8fCBnX3N0cl9lcXVhbChwYXRoLCAiL3Rlc3RfbG9hZGluZ19zdGF0dXMyIikpCi0gICAgICAg
IHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtc2ctPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZ
X1NUQVRJQywgSFRNTF9TVFJJTkcsIHN0cmxlbihIVE1MX1NUUklORykpOwotICAgIGVsc2UgaWYg
KGdfc3RyX2VxdWFsKHBhdGgsICIvdGVzdF9sb2FkX2Vycm9yIikpIHsKLSAgICAgICAgc291cF9t
ZXNzYWdlX3NldF9zdGF0dXMobXNnLCBTT1VQX1NUQVRVU19DQU5UX0NPTk5FQ1QpOwotICAgIH0g
ZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi90ZXN0X2xvYWRpbmdfY2FuY2VsbGVkIikpIHsK
LSAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfc2V0X2VuY29kaW5nKG1zZy0+cmVzcG9uc2Vf
aGVhZGVycywgU09VUF9FTkNPRElOR19DSFVOS0VEKTsKLSAgICAgICAgc291cF9tZXNzYWdlX2Jv
ZHlfYXBwZW5kKG1zZy0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBIVE1MX1NU
UklORywgc3RybGVuKEhUTUxfU1RSSU5HKSk7Ci0gICAgICAgIHNvdXBfc2VydmVyX3VucGF1c2Vf
bWVzc2FnZShzZXJ2ZXIsIG1zZyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzb3Vw
X21lc3NhZ2VfYm9keV9jb21wbGV0ZShtc2ctPnJlc3BvbnNlX2JvZHkpOwotfQotCi10eXBlZGVm
IHN0cnVjdCB7Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldzsKLSAgICBHTWFpbkxvb3AgKmxv
b3A7Ci0gICAgZ2Jvb2xlYW4gaGFzX2JlZW5fcHJvdmlzaW9uYWw7Ci0gICAgZ2Jvb2xlYW4gaGFz
X2JlZW5fY29tbWl0dGVkOwotICAgIGdib29sZWFuIGhhc19iZWVuX2ZpcnN0X3Zpc3VhbGx5X25v
bl9lbXB0eV9sYXlvdXQ7Ci0gICAgZ2Jvb2xlYW4gaGFzX2JlZW5fZmluaXNoZWQ7Ci0gICAgZ2Jv
b2xlYW4gaGFzX2JlZW5fZmFpbGVkOwotICAgIGdib29sZWFuIGhhc19iZWVuX2xvYWRfZXJyb3I7
Ci19IFdlYkxvYWRpbmdGaXh0dXJlOwotCi1zdGF0aWMgdm9pZCB3ZWJfbG9hZGluZ19maXh0dXJl
X3NldHVwKFdlYkxvYWRpbmdGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17
Ci0gICAgZml4dHVyZS0+d2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdf
bmV3KCkpOwotICAgIGZpeHR1cmUtPmxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7
Ci0gICAgZ19vYmplY3RfcmVmX3NpbmsoZml4dHVyZS0+d2ViVmlldyk7Ci0gICAgZml4dHVyZS0+
aGFzX2JlZW5fcHJvdmlzaW9uYWwgPSBGQUxTRTsKLSAgICBmaXh0dXJlLT5oYXNfYmVlbl9jb21t
aXR0ZWQgPSBGQUxTRTsKLSAgICBmaXh0dXJlLT5oYXNfYmVlbl9maXJzdF92aXN1YWxseV9ub25f
ZW1wdHlfbGF5b3V0ID0gRkFMU0U7Ci0gICAgZml4dHVyZS0+aGFzX2JlZW5fZmluaXNoZWQgPSBG
QUxTRTsKLSAgICBmaXh0dXJlLT5oYXNfYmVlbl9mYWlsZWQgPSBGQUxTRTsKLSAgICBmaXh0dXJl
LT5oYXNfYmVlbl9sb2FkX2Vycm9yID0gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYl9sb2Fk
aW5nX2ZpeHR1cmVfdGVhcmRvd24oV2ViTG9hZGluZ0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBv
aW50ZXIgZGF0YSkKLXsKLSAgICBnX29iamVjdF91bnJlZihmaXh0dXJlLT53ZWJWaWV3KTsKLSAg
ICBnX21haW5fbG9vcF91bnJlZihmaXh0dXJlLT5sb29wKTsKLX0KLQotc3RhdGljIGNoYXIqIGdl
dF91cmlfZm9yX3BhdGgoY29uc3QgY2hhciogcGF0aCkKLXsKLSAgICBTb3VwVVJJKiB1cmk7Ci0g
ICAgY2hhciogdXJpX3N0cmluZzsKLQotICAgIHVyaSA9IHNvdXBfdXJpX25ld193aXRoX2Jhc2Uo
YmFzZV91cmksIHBhdGgpOwotICAgIHVyaV9zdHJpbmcgPSBzb3VwX3VyaV90b19zdHJpbmcodXJp
LCBGQUxTRSk7Ci0gICAgc291cF91cmlfZnJlZSAodXJpKTsKLQotICAgIHJldHVybiB1cmlfc3Ry
aW5nOwotfQotCi1zdGF0aWMgdm9pZCBsb2FkX2ZpbmlzaGVkX2NiKFdlYktpdFdlYlZpZXcqIHdl
Yl92aWV3LCBXZWJLaXRXZWJGcmFtZSogd2ViX2ZyYW1lLCBXZWJMb2FkaW5nRml4dHVyZSogZml4
dHVyZSkKLXsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCk7Ci0g
ICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fY29tbWl0dGVkKTsKLSAgICBnX2Fzc2VydChm
aXh0dXJlLT5oYXNfYmVlbl9maXJzdF92aXN1YWxseV9ub25fZW1wdHlfbGF5b3V0KTsKLQotICAg
IGdfbWFpbl9sb29wX3F1aXQoZml4dHVyZS0+bG9vcCk7Ci19Ci0KLQotc3RhdGljIHZvaWQgc3Rh
dHVzX2NoYW5nZWRfY2IoR09iamVjdCogb2JqZWN0LCBHUGFyYW1TcGVjKiBwc3BlYywgV2ViTG9h
ZGluZ0ZpeHR1cmUqIGZpeHR1cmUpCi17Ci0gICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKFdFQktJVF9XRUJfVklFVyhvYmplY3QpKTsK
LQotICAgIHN3aXRjaCAoc3RhdHVzKSB7Ci0gICAgY2FzZSBXRUJLSVRfTE9BRF9QUk9WSVNJT05B
TDoKLSAgICAgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsKTsKLSAg
ICAgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX2NvbW1pdHRlZCk7Ci0gICAgICAgIGdf
YXNzZXJ0KCFmaXh0dXJlLT5oYXNfYmVlbl9maXJzdF92aXN1YWxseV9ub25fZW1wdHlfbGF5b3V0
KTsKLSAgICAgICAgZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwgPSBUUlVFOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIFdFQktJVF9MT0FEX0NPTU1JVFRFRDoKLSAgICAgICAgZ19hc3Nl
cnQoZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwpOwotICAgICAgICBnX2Fzc2VydCghZml4
dHVyZS0+aGFzX2JlZW5fY29tbWl0dGVkKTsKLSAgICAgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhh
c19iZWVuX2ZpcnN0X3Zpc3VhbGx5X25vbl9lbXB0eV9sYXlvdXQpOwotICAgICAgICBmaXh0dXJl
LT5oYXNfYmVlbl9jb21taXR0ZWQgPSBUUlVFOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdF
QktJVF9MT0FEX0ZJUlNUX1ZJU1VBTExZX05PTl9FTVBUWV9MQVlPVVQ6Ci0gICAgICAgIGdfYXNz
ZXJ0KGZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsKTsKLSAgICAgICAgZ19hc3NlcnQoZml4
dHVyZS0+aGFzX2JlZW5fY29tbWl0dGVkKTsKLSAgICAgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhh
c19iZWVuX2ZpcnN0X3Zpc3VhbGx5X25vbl9lbXB0eV9sYXlvdXQpOwotICAgICAgICBmaXh0dXJl
LT5oYXNfYmVlbl9maXJzdF92aXN1YWxseV9ub25fZW1wdHlfbGF5b3V0ID0gVFJVRTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBXRUJLSVRfTE9BRF9GSU5JU0hFRDoKLSAgICAgICAgZ19hc3Nl
cnQoZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwpOwotICAgICAgICBnX2Fzc2VydChmaXh0
dXJlLT5oYXNfYmVlbl9jb21taXR0ZWQpOwotICAgICAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNf
YmVlbl9maXJzdF92aXN1YWxseV9ub25fZW1wdHlfbGF5b3V0KTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICB9Ci19Ci0K
LXN0YXRpYyB2b2lkIHRlc3RfbG9hZGluZ19zdGF0dXMoV2ViTG9hZGluZ0ZpeHR1cmUqIGZpeHR1
cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBjaGFyKiB1cmlfc3RyaW5nOwotCi0gICAg
Z19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMoZml4dHVyZS0+
d2ViVmlldyksID09LCBXRUJLSVRfTE9BRF9QUk9WSVNJT05BTCk7Ci0KLSAgICBnX29iamVjdF9j
b25uZWN0KEdfT0JKRUNUKGZpeHR1cmUtPndlYlZpZXcpLAotICAgICAgICAgICAgICAgICAgICAg
InNpZ25hbDo6bm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0soc3RhdHVzX2NoYW5nZWRf
Y2IpLCBmaXh0dXJlLAotICAgICAgICAgICAgICAgICAgICAgInNpZ25hbDo6bG9hZC1maW5pc2hl
ZCIsIEdfQ0FMTEJBQ0sobG9hZF9maW5pc2hlZF9jYiksIGZpeHR1cmUsCi0gICAgICAgICAgICAg
ICAgICAgICBOVUxMKTsKLQotICAgIHVyaV9zdHJpbmcgPSBnZXRfdXJpX2Zvcl9wYXRoKCIvdGVz
dF9sb2FkaW5nX3N0YXR1cyIpOwotCi0gICAgLyogbG9hZF91cmkgd2lsbCB0cmlnZ2VyIHRoZSBu
YXZpZ2F0aW9uLXBvbGljeS1kZWNpc2lvbi1yZXF1ZXN0ZWQKLSAgICAgKiBzaWduYWwgZW1pc3Np
b247Ci0gICAgICovCi0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKGZpeHR1cmUtPndlYlZp
ZXcsIHVyaV9zdHJpbmcpOwotICAgIGdfZnJlZSh1cmlfc3RyaW5nKTsKLQotICAgIGdfbWFpbl9s
b29wX3J1bihmaXh0dXJlLT5sb29wKTsKLX0KLQotc3RhdGljIHZvaWQgbG9hZF9lcnJvcl9zdGF0
dXNfY2hhbmdlZF9jYihHT2JqZWN0KiBvYmplY3QsIEdQYXJhbVNwZWMqIHBzcGVjLCBXZWJMb2Fk
aW5nRml4dHVyZSogZml4dHVyZSkKLXsKLSAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdl
YmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMoV0VCS0lUX1dFQl9WSUVXKG9iamVjdCkpOwot
Ci0gICAgc3dpdGNoKHN0YXR1cykgewotICAgIGNhc2UgV0VCS0lUX0xPQURfUFJPVklTSU9OQUw6
Ci0gICAgICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCk7Ci0gICAg
ICAgIGZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsID0gVFJVRTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBXRUJLSVRfTE9BRF9DT01NSVRURUQ6Ci0gICAgICAgIGdfYXNzZXJ0KCFmaXh0
dXJlLT5oYXNfYmVlbl9jb21taXR0ZWQpOwotICAgICAgICBmaXh0dXJlLT5oYXNfYmVlbl9jb21t
aXR0ZWQgPSBUUlVFOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdFQktJVF9MT0FEX0ZJTklT
SEVEOgotICAgICAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCk7Ci0g
ICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX2xvYWRfZXJyb3IpOwotICAgICAgICBn
X2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9mYWlsZWQpOwotICAgICAgICBnX2Fzc2VydCghZml4
dHVyZS0+aGFzX2JlZW5fZmluaXNoZWQpOwotICAgICAgICBmaXh0dXJlLT5oYXNfYmVlbl9maW5p
c2hlZCA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV0VCS0lUX0xPQURfRkFJTEVE
OgotICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fZmFpbGVkKTsKLSAgICAgICAg
Zml4dHVyZS0+aGFzX2JlZW5fZmFpbGVkID0gVFJVRTsKLSAgICAgICAgZ19tYWluX2xvb3BfcXVp
dChmaXh0dXJlLT5sb29wKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gbG9hZF9lcnJvcl9jYihXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRXZWJGcmFtZSogZnJhbWUsIGNvbnN0IGNoYXIqIHVyaSwg
R0Vycm9yICplcnJvciwgV2ViTG9hZGluZ0ZpeHR1cmUqIGZpeHR1cmUpCi17Ci0gICAgZ19hc3Nl
cnQoZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwpOwotICAgIGdfYXNzZXJ0KCFmaXh0dXJl
LT5oYXNfYmVlbl9sb2FkX2Vycm9yKTsKLSAgICBmaXh0dXJlLT5oYXNfYmVlbl9sb2FkX2Vycm9y
ID0gVFJVRTsKLQotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF9sb2Fk
aW5nX2Vycm9yKFdlYkxvYWRpbmdGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEp
Ci17Ci0gICAgY2hhciogdXJpX3N0cmluZzsKLQotICAgIGdfdGVzdF9idWcoIjI4ODQyIik7Ci0K
LSAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJsb2FkLWVycm9yIiwgR19D
QUxMQkFDSyhsb2FkX2Vycm9yX2NiKSwgZml4dHVyZSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChm
aXh0dXJlLT53ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0sobG9hZF9l
cnJvcl9zdGF0dXNfY2hhbmdlZF9jYiksIGZpeHR1cmUpOwotCi0gICAgdXJpX3N0cmluZyA9IGdl
dF91cmlfZm9yX3BhdGgoIi90ZXN0X2xvYWRfZXJyb3IiKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdf
bG9hZF91cmkoZml4dHVyZS0+d2ViVmlldywgdXJpX3N0cmluZyk7Ci0gICAgZ19mcmVlKHVyaV9z
dHJpbmcpOwotCi0gICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1cmUtPmxvb3ApOwotCi0gICAgZ19h
c3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwpOwotICAgIGdfYXNzZXJ0KCFmaXh0
dXJlLT5oYXNfYmVlbl9jb21taXR0ZWQpOwotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVu
X2xvYWRfZXJyb3IpOwotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX2ZhaWxlZCk7Ci0g
ICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX2ZpbmlzaGVkKTsKLX0KLQotLyogQ2FuY2Vs
bGVkIGxvYWQgKi8KLQotc3RhdGljIGdib29sZWFuIGxvYWRfY2FuY2VsbGVkX2NiKFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcsIFdlYktpdFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgY2hhciogdXJpLCBH
RXJyb3IgKmVycm9yLCBXZWJMb2FkaW5nRml4dHVyZSogZml4dHVyZSkKLXsKLSAgICBnX2Fzc2Vy
dChmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCk7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+
aGFzX2JlZW5fZmFpbGVkKTsKLSAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fbG9hZF9l
cnJvcik7Ci0gICAgZ19hc3NlcnQoZXJyb3ItPmNvZGUgPT0gV0VCS0lUX05FVFdPUktfRVJST1Jf
Q0FOQ0VMTEVEKTsKLSAgICBmaXh0dXJlLT5oYXNfYmVlbl9sb2FkX2Vycm9yID0gVFJVRTsKLQot
ICAgIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gc3RvcF9sb2FkIChncG9pbnRl
ciBkYXRhKQotewotICAgIHdlYmtpdF93ZWJfdmlld19zdG9wX2xvYWRpbmcoV0VCS0lUX1dFQl9W
SUVXKGRhdGEpKTsKLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lkIGxvYWRfY2Fu
Y2VsbGVkX3N0YXR1c19jaGFuZ2VkX2NiKEdPYmplY3QqIG9iamVjdCwgR1BhcmFtU3BlYyogcHNw
ZWMsIFdlYkxvYWRpbmdGaXh0dXJlKiBmaXh0dXJlKQotewotICAgIFdlYktpdExvYWRTdGF0dXMg
c3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyhXRUJLSVRfV0VCX1ZJRVco
b2JqZWN0KSk7Ci0KLSAgICBzd2l0Y2goc3RhdHVzKSB7Ci0gICAgY2FzZSBXRUJLSVRfTE9BRF9Q
Uk9WSVNJT05BTDoKLSAgICAgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lv
bmFsKTsKLSAgICAgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX2ZhaWxlZCk7Ci0gICAg
ICAgIGZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsID0gVFJVRTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBXRUJLSVRfTE9BRF9DT01NSVRURUQ6Ci0gICAgICAgIGdfaWRsZV9hZGQgKHN0
b3BfbG9hZCwgb2JqZWN0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXRUJLSVRfTE9BRF9G
QUlMRUQ6Ci0gICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsKTsK
LSAgICAgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX2ZhaWxlZCk7Ci0gICAgICAgIGdf
YXNzZXJ0KCFmaXh0dXJlLT5oYXNfYmVlbl9sb2FkX2Vycm9yKTsKLSAgICAgICAgZml4dHVyZS0+
aGFzX2JlZW5fZmFpbGVkID0gVFJVRTsKLSAgICAgICAgZ19tYWluX2xvb3BfcXVpdChmaXh0dXJl
LT5sb29wKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXRUJLSVRfTE9BRF9GSU5JU0hFRDoK
LSAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X2xvYWRp
bmdfY2FuY2VsbGVkKFdlYkxvYWRpbmdGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRh
dGEpCi17Ci0gICAgY2hhciogdXJpX3N0cmluZzsKLQotICAgIGdfdGVzdF9idWcoIjI5NjQ0Iik7
Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJsb2FkLWVycm9yIiwg
R19DQUxMQkFDSyhsb2FkX2NhbmNlbGxlZF9jYiksIGZpeHR1cmUpOwotICAgIGdfc2lnbmFsX2Nv
bm5lY3QoZml4dHVyZS0+d2ViVmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLCBHX0NBTExCQUNL
KGxvYWRfY2FuY2VsbGVkX3N0YXR1c19jaGFuZ2VkX2NiKSwgZml4dHVyZSk7Ci0KLSAgICB1cmlf
c3RyaW5nID0gZ2V0X3VyaV9mb3JfcGF0aCgiL3Rlc3RfbG9hZGluZ19jYW5jZWxsZWQiKTsKLSAg
ICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkoZml4dHVyZS0+d2ViVmlldywgdXJpX3N0cmluZyk7
Ci0gICAgZ19mcmVlKHVyaV9zdHJpbmcpOwotCi0gICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1cmUt
Pmxvb3ApOwotfQotCi1zdGF0aWMgdm9pZCBsb2FkX2dvYmFja19zdGF0dXNfY2hhbmdlZF9jYihH
T2JqZWN0KiBvYmplY3QsIEdQYXJhbVNwZWMqIHBzcGVjLCBXZWJMb2FkaW5nRml4dHVyZSogZml4
dHVyZSkKLXsKLSAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJfdmlld19n
ZXRfbG9hZF9zdGF0dXMoV0VCS0lUX1dFQl9WSUVXKG9iamVjdCkpOwotCi0gICAgc3dpdGNoKHN0
YXR1cykgewotICAgIGNhc2UgV0VCS0lUX0xPQURfUFJPVklTSU9OQUw6Ci0gICAgICAgIGdfYXNz
ZXJ0KCFmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCk7Ci0gICAgICAgIGZpeHR1cmUtPmhh
c19iZWVuX3Byb3Zpc2lvbmFsID0gVFJVRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXRUJL
SVRfTE9BRF9DT01NSVRURUQ6Ci0gICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX3By
b3Zpc2lvbmFsKTsKLSAgICAgICAgZml4dHVyZS0+aGFzX2JlZW5fY29tbWl0dGVkID0gVFJVRTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXRUJLSVRfTE9BRF9GQUlMRUQ6Ci0gICAgICAgIGdf
YXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV0VCS0lUX0xP
QURfRklOSVNIRUQ6Ci0gICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lv
bmFsKTsKLSAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fY29tbWl0dGVkKTsKLSAg
ICAgICAgZml4dHVyZS0+aGFzX2JlZW5fZmluaXNoZWQgPSBUUlVFOwotICAgICAgICBnX21haW5f
bG9vcF9xdWl0KGZpeHR1cmUtPmxvb3ApOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGxvYWRfd2VudGJhY2tfc3Rh
dHVzX2NoYW5nZWRfY2IoR09iamVjdCogb2JqZWN0LCBHUGFyYW1TcGVjKiBwc3BlYywgV2ViTG9h
ZGluZ0ZpeHR1cmUqIGZpeHR1cmUpCi17Ci0gICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKFdFQktJVF9XRUJfVklFVyhvYmplY3QpKTsK
LSAgICBjaGFyKiB1cmlfc3RyaW5nOwotICAgIGNoYXIqIHVyaV9zdHJpbmcyOwotCi0gICAgdXJp
X3N0cmluZyA9IGdldF91cmlfZm9yX3BhdGgoIi90ZXN0X2xvYWRpbmdfc3RhdHVzIik7Ci0gICAg
dXJpX3N0cmluZzIgPSBnZXRfdXJpX2Zvcl9wYXRoKCIvdGVzdF9sb2FkaW5nX3N0YXR1czIiKTsK
LQotICAgIHN3aXRjaChzdGF0dXMpIHsKLSAgICBjYXNlIFdFQktJVF9MT0FEX1BST1ZJU0lPTkFM
OgotICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dldF91cmkoZml4dHVy
ZS0+d2ViVmlldyksID09LCB1cmlfc3RyaW5nMik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
V0VCS0lUX0xPQURfQ09NTUlUVEVEOgotICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dl
Yl92aWV3X2dldF91cmkoZml4dHVyZS0+d2ViVmlldyksID09LCB1cmlfc3RyaW5nKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBXRUJLSVRfTE9BRF9GQUlMRUQ6Ci0gICAgICAgIGdfYXNzZXJ0
X25vdF9yZWFjaGVkKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV0VCS0lUX0xPQURfRklO
SVNIRUQ6Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaShm
aXh0dXJlLT53ZWJWaWV3KSwgPT0sIHVyaV9zdHJpbmcpOwotICAgICAgICBnX21haW5fbG9vcF9x
dWl0KGZpeHR1cmUtPmxvb3ApOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAg
ICBicmVhazsKLSAgICB9Ci0KLSAgICBnX2ZyZWUodXJpX3N0cmluZyk7Ci0gICAgZ19mcmVlKHVy
aV9zdHJpbmcyKTsKLX0KLQotc3RhdGljIHZvaWQgbG9hZF9lcnJvcl90ZXN0KFdlYktpdFdlYlZp
ZXcqIHdlYnZpZXcsIFdlYktpdFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgY2hhciogdXJpLCBHRXJy
b3IqIGVycm9yKQotewotICAgIGdfZGVidWcoIkVycm9yOiAlcyIsIGVycm9yLT5tZXNzYWdlKTsK
LX0KLQotc3RhdGljIHZvaWQgdGVzdF9sb2FkaW5nX2dvYmFjayhXZWJMb2FkaW5nRml4dHVyZSog
Zml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGNoYXIqIHVyaV9zdHJpbmc7Ci0K
LSAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJub3RpZnk6OmxvYWQtc3Rh
dHVzIiwgR19DQUxMQkFDSyhsb2FkX2dvYmFja19zdGF0dXNfY2hhbmdlZF9jYiksIGZpeHR1cmUp
OwotCi0gICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53ZWJWaWV3LCAibG9hZC1lcnJvciIs
IEdfQ0FMTEJBQ0sobG9hZF9lcnJvcl90ZXN0KSwgZml4dHVyZSk7Ci0KLSAgICB1cmlfc3RyaW5n
ID0gZ2V0X3VyaV9mb3JfcGF0aCgiL3Rlc3RfbG9hZGluZ19zdGF0dXMiKTsKLSAgICB3ZWJraXRf
d2ViX3ZpZXdfbG9hZF91cmkoZml4dHVyZS0+d2ViVmlldywgdXJpX3N0cmluZyk7Ci0gICAgZ19m
cmVlKHVyaV9zdHJpbmcpOwotCi0gICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1cmUtPmxvb3ApOwot
Ci0gICAgZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwgPSBGQUxTRTsKLSAgICBmaXh0dXJl
LT5oYXNfYmVlbl9jb21taXR0ZWQgPSBGQUxTRTsKLSAgICBmaXh0dXJlLT5oYXNfYmVlbl9maXJz
dF92aXN1YWxseV9ub25fZW1wdHlfbGF5b3V0ID0gRkFMU0U7Ci0gICAgZml4dHVyZS0+aGFzX2Jl
ZW5fZmluaXNoZWQgPSBGQUxTRTsKLSAgICBmaXh0dXJlLT5oYXNfYmVlbl9mYWlsZWQgPSBGQUxT
RTsKLSAgICBmaXh0dXJlLT5oYXNfYmVlbl9sb2FkX2Vycm9yID0gRkFMU0U7Ci0KLSAgICB1cmlf
c3RyaW5nID0gZ2V0X3VyaV9mb3JfcGF0aCgiL3Rlc3RfbG9hZGluZ19zdGF0dXMyIik7Ci0gICAg
d2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKGZpeHR1cmUtPndlYlZpZXcsIHVyaV9zdHJpbmcpOwot
ICAgIGdfZnJlZSh1cmlfc3RyaW5nKTsKLQotICAgIGdfbWFpbl9sb29wX3J1bihmaXh0dXJlLT5s
b29wKTsKLQotICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhmaXh0dXJl
LT53ZWJWaWV3LCBsb2FkX2dvYmFja19zdGF0dXNfY2hhbmdlZF9jYiwgZml4dHVyZSk7Ci0KLSAg
ICBmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCA9IEZBTFNFOwotICAgIGZpeHR1cmUtPmhh
c19iZWVuX2NvbW1pdHRlZCA9IEZBTFNFOwotICAgIGZpeHR1cmUtPmhhc19iZWVuX2ZpcnN0X3Zp
c3VhbGx5X25vbl9lbXB0eV9sYXlvdXQgPSBGQUxTRTsKLSAgICBmaXh0dXJlLT5oYXNfYmVlbl9m
aW5pc2hlZCA9IEZBTFNFOwotICAgIGZpeHR1cmUtPmhhc19iZWVuX2ZhaWxlZCA9IEZBTFNFOwot
ICAgIGZpeHR1cmUtPmhhc19iZWVuX2xvYWRfZXJyb3IgPSBGQUxTRTsKLQotICAgIGdfc2lnbmFs
X2Nvbm5lY3QoZml4dHVyZS0+d2ViVmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLCBHX0NBTExC
QUNLKGxvYWRfd2VudGJhY2tfc3RhdHVzX2NoYW5nZWRfY2IpLCBmaXh0dXJlKTsKLSAgICB3ZWJr
aXRfd2ViX3ZpZXdfZ29fYmFjayhmaXh0dXJlLT53ZWJWaWV3KTsKLQotICAgIGdfbWFpbl9sb29w
X3J1bihmaXh0dXJlLT5sb29wKTsKLQotICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3Rf
YnlfZnVuYyhmaXh0dXJlLT53ZWJWaWV3LCBsb2FkX3dlbnRiYWNrX3N0YXR1c19jaGFuZ2VkX2Ni
LCBmaXh0dXJlKTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotewotICAg
IFNvdXBTZXJ2ZXIqIHNlcnZlcjsKLQotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBO
VUxMKTsKLQotICAgIHNlcnZlciA9IHNvdXBfc2VydmVyX25ldyhTT1VQX1NFUlZFUl9QT1JULCAw
LCBOVUxMKTsKLSAgICBzb3VwX3NlcnZlcl9ydW5fYXN5bmMoc2VydmVyKTsKLQotICAgIHNvdXBf
c2VydmVyX2FkZF9oYW5kbGVyKHNlcnZlciwgTlVMTCwgc2VydmVyX2NhbGxiYWNrLCBOVUxMLCBO
VUxMKTsKLQotICAgIGJhc2VfdXJpID0gc291cF91cmlfbmV3KCJodHRwOi8vMTI3LjAuMC4xLyIp
OwotICAgIHNvdXBfdXJpX3NldF9wb3J0KGJhc2VfdXJpLCBzb3VwX3NlcnZlcl9nZXRfcG9ydChz
ZXJ2ZXIpKTsKLQotICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
Iik7Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9sb2FkaW5nL3N0YXR1cyIsCi0gICAgICAgICAg
ICAgICBXZWJMb2FkaW5nRml4dHVyZSwgTlVMTCwKLSAgICAgICAgICAgICAgIHdlYl9sb2FkaW5n
X2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X2xvYWRpbmdfc3RhdHVzLAotICAg
ICAgICAgICAgICAgd2ViX2xvYWRpbmdfZml4dHVyZV90ZWFyZG93bik7Ci0gICAgZ190ZXN0X2Fk
ZCgiL3dlYmtpdC9sb2FkaW5nL2Vycm9yIiwKLSAgICAgICAgICAgICAgIFdlYkxvYWRpbmdGaXh0
dXJlLCBOVUxMLAotICAgICAgICAgICAgICAgd2ViX2xvYWRpbmdfZml4dHVyZV9zZXR1cCwKLSAg
ICAgICAgICAgICAgIHRlc3RfbG9hZGluZ19lcnJvciwKLSAgICAgICAgICAgICAgIHdlYl9sb2Fk
aW5nX2ZpeHR1cmVfdGVhcmRvd24pOwotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvbG9hZGluZy9j
YW5jZWxsZWQiLAotICAgICAgICAgICAgICAgV2ViTG9hZGluZ0ZpeHR1cmUsIE5VTEwsCi0gICAg
ICAgICAgICAgICB3ZWJfbG9hZGluZ19maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVz
dF9sb2FkaW5nX2NhbmNlbGxlZCwKLSAgICAgICAgICAgICAgIHdlYl9sb2FkaW5nX2ZpeHR1cmVf
dGVhcmRvd24pOwotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvbG9hZGluZy9nb2JhY2siLAotICAg
ICAgICAgICAgICAgV2ViTG9hZGluZ0ZpeHR1cmUsIE5VTEwsCi0gICAgICAgICAgICAgICB3ZWJf
bG9hZGluZ19maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF9sb2FkaW5nX2dvYmFj
aywKLSAgICAgICAgICAgICAgIHdlYl9sb2FkaW5nX2ZpeHR1cmVfdGVhcmRvd24pOwotICAgIHJl
dHVybiBnX3Rlc3RfcnVuKCk7Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rl
c3RzL3Rlc3RtaW1laGFuZGxpbmcuYyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RtaW1l
aGFuZGxpbmcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQ4ZTFjNi4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0bWltZWhhbmRsaW5nLmMKKysrIC9k
ZXYvbnVsbApAQCAtMSwyMDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4g
TWljaGFlbCBBbG9uem8KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHdXN0YXZvIE5vcm9uaGEgU2ls
dmEKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgInRlc3RfdXRpbHMuaCIKLQotI2luY2x1
ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgotI2luY2x1ZGUgPGxpYnNvdXAv
c291cC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4K
LSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotR01haW5Mb29wKiBsb29wOwotU291cFNlc3Npb24gKnNl
c3Npb247Ci1jaGFyKiBiYXNlX3VyaTsKLQotLyogRm9yIHJlYWwgcmVxdWVzdCB0ZXN0aW5nICov
Ci1zdGF0aWMgdm9pZAotc2VydmVyX2NhbGxiYWNrKFNvdXBTZXJ2ZXIgKnNlcnZlciwgU291cE1l
c3NhZ2UgKm1zZywKLSAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwgR0hhc2hUYWJs
ZSAqcXVlcnksCi0gICAgICAgICAgICAgICAgIFNvdXBDbGllbnRDb250ZXh0ICpjb250ZXh0LCBn
cG9pbnRlciBkYXRhKQotewotICAgIGlmIChtc2ctPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQp
IHsKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobXNnLCBTT1VQX1NUQVRVU19OT1Rf
SU1QTEVNRU5URUQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc291cF9tZXNzYWdl
X3NldF9zdGF0dXMobXNnLCBTT1VQX1NUQVRVU19PSyk7Ci0KLSAgICAvKiBQREYgKi8KLSAgICBp
ZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9wZGYiKSkgewotICAgICAgICBjaGFyKiBjb250ZW50czsK
LSAgICAgICAgZ3NpemUgbGVuZ3RoOwotICAgICAgICBHRXJyb3IqIGVycm9yID0gTlVMTDsKLQot
ICAgICAgICBnX2ZpbGVfZ2V0X2NvbnRlbnRzKCJ0ZXN0LnBkZiIsICZjb250ZW50cywgJmxlbmd0
aCwgJmVycm9yKTsKLSAgICAgICAgZ19hc3NlcnQoIWVycm9yKTsKLQotICAgICAgICBzb3VwX21l
c3NhZ2VfYm9keV9hcHBlbmQobXNnLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBj
b250ZW50cywgbGVuZ3RoKTsKLSAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvaHRt
bCIpKSB7Ci0gICAgICAgIGNoYXIqIGNvbnRlbnRzOwotICAgICAgICBnc2l6ZSBsZW5ndGg7Ci0g
ICAgICAgIEdFcnJvciogZXJyb3IgPSBOVUxMOwotCi0gICAgICAgIGdfZmlsZV9nZXRfY29udGVu
dHMoInRlc3QuaHRtbCIsICZjb250ZW50cywgJmxlbmd0aCwgJmVycm9yKTsKLSAgICAgICAgZ19h
c3NlcnQoIWVycm9yKTsKLQotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobXNnLT5y
ZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBjb250ZW50cywgbGVuZ3RoKTsKLSAgICB9
IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvdGV4dCIpKSB7Ci0gICAgICAgIGNoYXIqIGNv
bnRlbnRzOwotICAgICAgICBnc2l6ZSBsZW5ndGg7Ci0gICAgICAgIEdFcnJvciogZXJyb3IgPSBO
VUxMOwotCi0gICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChtc2ctPnJlc3BvbnNl
X2hlYWRlcnMsICJDb250ZW50LURpc3Bvc2l0aW9uIiwgImF0dGFjaG1lbnQ7IGZpbGVuYW1lPXRl
c3QudHh0Iik7Ci0KLSAgICAgICAgZ19maWxlX2dldF9jb250ZW50cygidGVzdC50eHQiLCAmY29u
dGVudHMsICZsZW5ndGgsICZlcnJvcik7Ci0gICAgICAgIGdfYXNzZXJ0KCFlcnJvcik7Ci0KLSAg
ICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1zZy0+cmVzcG9uc2VfYm9keSwgU09VUF9N
RU1PUllfVEFLRSwgY29udGVudHMsIGxlbmd0aCk7Ci0gICAgfQotCi0gICAgc291cF9tZXNzYWdl
X2JvZHlfY29tcGxldGUobXNnLT5yZXNwb25zZV9ib2R5KTsKLX0KLQotc3RhdGljIHZvaWQgaWRs
ZV9xdWl0X2xvb3BfY2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIEdQYXJhbVNwZWMqIHBzcGVj
LCBncG9pbnRlciBkYXRhKQotewotICAgIGlmICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3Rh
dHVzKHdlYl92aWV3KSA9PSBXRUJLSVRfTE9BRF9GSU5JU0hFRCB8fAotICAgICAgICB3ZWJraXRf
d2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYl92aWV3KSA9PSBXRUJLSVRfTE9BRF9GQUlMRUQp
Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBt
aW1lX3R5cGVfcG9saWN5X2RlY2lzaW9uX3JlcXVlc3RlZF9jYihXZWJLaXRXZWJWaWV3KiB2aWV3
LCBXZWJLaXRXZWJGcmFtZSogZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QsIGNv
bnN0IGNoYXIqIG1pbWVfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBXZWJLaXRXZWJQb2xpY3lEZWNpc2lvbiogZGVjaXNpb24sIGdw
b2ludGVyIGRhdGEpCi17Ci0gICAgY2hhciogdHlwZSA9IChjaGFyKilkYXRhOwotCi0gICAgaWYg
KGdfc3RyX2VxdWFsKHR5cGUsICJwZGYiKSkgewotICAgICAgICBnX2Fzc2VydF9jbXBzdHIobWlt
ZV90eXBlLCA9PSwgImFwcGxpY2F0aW9uL3BkZiIpOwotICAgICAgICBnX2Fzc2VydCghd2Via2l0
X3dlYl92aWV3X2Nhbl9zaG93X21pbWVfdHlwZSh2aWV3LCBtaW1lX3R5cGUpKTsKLSAgICB9IGVs
c2UgaWYgKGdfc3RyX2VxdWFsKHR5cGUsICJodG1sIikpIHsKLSAgICAgICAgZ19hc3NlcnRfY21w
c3RyKG1pbWVfdHlwZSwgPT0sICJ0ZXh0L2h0bWwiKTsKLSAgICAgICAgZ19hc3NlcnQod2Via2l0
X3dlYl92aWV3X2Nhbl9zaG93X21pbWVfdHlwZSh2aWV3LCBtaW1lX3R5cGUpKTsKLSAgICB9IGVs
c2UgaWYgKGdfc3RyX2VxdWFsKHR5cGUsICJ0ZXh0IikpIHsKLSAgICAgICAgV2ViS2l0TmV0d29y
a1Jlc3BvbnNlKiByZXNwb25zZSA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X25ldHdvcmtfcmVzcG9u
c2UoZnJhbWUpOwotICAgICAgICBTb3VwTWVzc2FnZSogbWVzc2FnZSA9IHdlYmtpdF9uZXR3b3Jr
X3Jlc3BvbnNlX2dldF9tZXNzYWdlKHJlc3BvbnNlKTsKLSAgICAgICAgY2hhciogZGlzcG9zaXRp
b247Ci0KLSAgICAgICAgZ19hc3NlcnQobWVzc2FnZSk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9o
ZWFkZXJzX2dldF9jb250ZW50X2Rpc3Bvc2l0aW9uKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZk
aXNwb3NpdGlvbiwgTlVMTCk7Ci0gICAgICAgIGdfb2JqZWN0X3VucmVmKHJlc3BvbnNlKTsKLQot
ICAgICAgICBnX2Fzc2VydF9jbXBzdHIoZGlzcG9zaXRpb24sID09LCAiYXR0YWNobWVudCIpOwot
ICAgICAgICBnX2ZyZWUoZGlzcG9zaXRpb24pOwotCi0gICAgICAgIGdfYXNzZXJ0X2NtcHN0ciht
aW1lX3R5cGUsID09LCAidGV4dC9wbGFpbiIpOwotICAgICAgICBnX2Fzc2VydCh3ZWJraXRfd2Vi
X3ZpZXdfY2FuX3Nob3dfbWltZV90eXBlKHZpZXcsIG1pbWVfdHlwZSkpOwotICAgIH0KLQotICAg
IGdfZnJlZSh0eXBlKTsKLQotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQgdGVz
dFJlbW90ZU1pbWVUeXBlKGNvbnN0IHZvaWQqIGRhdGEpCi17Ci0gICAgY29uc3QgY2hhciogbmFt
ZSA9IChjb25zdCBjaGFyKikgZGF0YTsKLSAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gV0VCS0lU
X1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmso
R19PQkpFQ1QodmlldykpOwotCi0gICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVF
KTsKLQotICAgIGdfb2JqZWN0X2Nvbm5lY3QoR19PQkpFQ1QodmlldyksCi0gICAgICAgICAgICAg
ICAgICAgICAic2lnbmFsOjpub3RpZnk6OmxvYWQtc3RhdHVzIiwgaWRsZV9xdWl0X2xvb3BfY2Is
IE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjptaW1lLXR5cGUtcG9saWN5LWRl
Y2lzaW9uLXJlcXVlc3RlZCIsIG1pbWVfdHlwZV9wb2xpY3lfZGVjaXNpb25fcmVxdWVzdGVkX2Ni
LCBnX3N0cmR1cChuYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotCi0gICAgY2hh
ciogZWZmZWN0aXZlX3VyaSA9IGdfc3RyZHVwX3ByaW50ZigiJXMlcyIsIGJhc2VfdXJpLCBuYW1l
KTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkodmlldywgZWZmZWN0aXZlX3VyaSk7Ci0g
ICAgZ19mcmVlKGVmZmVjdGl2ZV91cmkpOwotCi0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwot
Ci0gICAgZ19vYmplY3RfdW5yZWYodmlldyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RMb2NhbE1p
bWVUeXBlKGNvbnN0IHZvaWQqIGRhdGEpCi17Ci0gICAgIGNvbnN0IGNoYXIqIHR5cGVOYW1lID0g
KGNvbnN0IGNoYXIqKSBkYXRhOwotICAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gV0VCS0lUX1dF
Ql9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgIGdfb2JqZWN0X3JlZl9zaW5rKEdf
T0JKRUNUKHZpZXcpKTsKLQotICAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUp
OwotCi0gICAgIGdfb2JqZWN0X2Nvbm5lY3QoR19PQkpFQ1QodmlldyksCi0gICAgICAgICAgICAg
ICAgICAgICAgInNpZ25hbDo6bm90aWZ5Ojpsb2FkLXN0YXR1cyIsIGlkbGVfcXVpdF9sb29wX2Ni
LCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6Om1pbWUtdHlwZS1wb2xpY3kt
ZGVjaXNpb24tcmVxdWVzdGVkIiwgbWltZV90eXBlX3BvbGljeV9kZWNpc2lvbl9yZXF1ZXN0ZWRf
Y2IsIGdfc3RyZHVwKHR5cGVOYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLQot
ICAgICBnY2hhciogZmlsZW5hbWUgPSBnX3N0cmR1cF9wcmludGYoInRlc3QuJXMiLCB0eXBlTmFt
ZSk7Ci0gICAgIEdGaWxlKiBmaWxlID0gZ19maWxlX25ld19mb3JfcGF0aChmaWxlbmFtZSk7Ci0g
ICAgIGdfZnJlZShmaWxlbmFtZSk7Ci0KLSAgICAgZ2NoYXIqIGZpbGVVUkkgPSBnX2ZpbGVfZ2V0
X3VyaShmaWxlKTsKLSAgICAgZ19vYmplY3RfdW5yZWYoZmlsZSk7Ci0KLSAgICAgd2Via2l0X3dl
Yl92aWV3X2xvYWRfdXJpKHZpZXcsIGZpbGVVUkkpOwotICAgICBnX2ZyZWUoZmlsZVVSSSk7Ci0g
Ci0gICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLSAgICAgZ19vYmplY3RfdW5yZWYodmlldyk7
Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKLXsKLSAgICBTb3VwU2VydmVy
KiBzZXJ2ZXI7Ci0gICAgU291cFVSSSogc291cF91cmk7Ci0KLSAgICBndGtfdGVzdF9pbml0KCZh
cmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAgICAvKiBIb3BlZnVsbHkgbWFrZSB0ZXN0IGluZGVwZW5k
ZW50IG9mIHRoZSBwYXRoIGl0J3MgY2FsbGVkIGZyb20uICovCi0gICAgdGVzdHV0aWxzX3JlbGF0
aXZlX2NoZGlyKCJTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy9yZXNvdXJjZXMvdGVzdC5odG1sIiwg
YXJndlswXSk7Ci0KLSAgICBzZXJ2ZXIgPSBzb3VwX3NlcnZlcl9uZXcoU09VUF9TRVJWRVJfUE9S
VCwgMCwgTlVMTCk7Ci0gICAgc291cF9zZXJ2ZXJfcnVuX2FzeW5jKHNlcnZlcik7Ci0KLSAgICBz
b3VwX3NlcnZlcl9hZGRfaGFuZGxlcihzZXJ2ZXIsIE5VTEwsIHNlcnZlcl9jYWxsYmFjaywgTlVM
TCwgTlVMTCk7Ci0KLSAgICBzb3VwX3VyaSA9IHNvdXBfdXJpX25ldygiaHR0cDovLzEyNy4wLjAu
MS8iKTsKLSAgICBzb3VwX3VyaV9zZXRfcG9ydChzb3VwX3VyaSwgc291cF9zZXJ2ZXJfZ2V0X3Bv
cnQoc2VydmVyKSk7Ci0KLSAgICBiYXNlX3VyaSA9IHNvdXBfdXJpX3RvX3N0cmluZyhzb3VwX3Vy
aSwgRkFMU0UpOwotICAgIHNvdXBfdXJpX2ZyZWUoc291cF91cmkpOwotCi0gICAgZ190ZXN0X2J1
Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKLSAgICBnX3Rlc3RfYWRkX2RhdGFf
ZnVuYygiL3dlYmtpdC9taW1lL3JlbW90ZS1QREYiLCAicGRmIiwgdGVzdFJlbW90ZU1pbWVUeXBl
KTsKLSAgICBnX3Rlc3RfYWRkX2RhdGFfZnVuYygiL3dlYmtpdC9taW1lL3JlbW90ZS1IVE1MIiwg
Imh0bWwiLCB0ZXN0UmVtb3RlTWltZVR5cGUpOwotICAgIGdfdGVzdF9hZGRfZGF0YV9mdW5jKCIv
d2Via2l0L21pbWUvcmVtb3RlLVRFWFQiLCAidGV4dCIsIHRlc3RSZW1vdGVNaW1lVHlwZSk7Ci0g
ICAgZ190ZXN0X2FkZF9kYXRhX2Z1bmMoIi93ZWJraXQvbWltZS9sb2NhbC1QREYiLCAicGRmIiwg
dGVzdExvY2FsTWltZVR5cGUpOwotICAgIGdfdGVzdF9hZGRfZGF0YV9mdW5jKCIvd2Via2l0L21p
bWUvbG9jYWwtSFRNTCIsICJodG1sIiwgdGVzdExvY2FsTWltZVR5cGUpOwotICAgIGdfdGVzdF9h
ZGRfZGF0YV9mdW5jKCIvd2Via2l0L21pbWUvbG9jYWwtVEVYVCIsICJ0ZXh0IiwgdGVzdExvY2Fs
TWltZVR5cGUpOwotCi0gICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsKLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RuZXR3b3JrcmVxdWVzdC5jIGIvU291cmNlL1dlYktp
dC9ndGsvdGVzdHMvdGVzdG5ldHdvcmtyZXF1ZXN0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDFiMmM5MGYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVz
dG5ldHdvcmtyZXF1ZXN0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA5IEd1c3Rhdm8gTm9yb25oYSBTaWx2YQotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxn
bGliLmg+Ci0jaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0j
aW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgotCi1zdGF0aWMg
dm9pZCB0ZXN0X25ldHdvcmtfcmVxdWVzdF9jcmVhdGVfZGVzdHJveSgpCi17Ci0gICAgV2ViS2l0
TmV0d29ya1JlcXVlc3QqIHJlcXVlc3Q7Ci0gICAgU291cE1lc3NhZ2UqIG1lc3NhZ2U7Ci0KLSAg
ICAvKiBUZXN0IGNyZWF0aW9uIHdpdGggVVJJICovCi0gICAgcmVxdWVzdCA9IFdFQktJVF9ORVRX
T1JLX1JFUVVFU1QoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX05FVFdPUktfUkVRVUVTVCwgInVy
aSIsICJodHRwOi8vZGViaWFuLm9yZy8iLCBOVUxMKSk7Ci0gICAgZ19hc3NlcnQoV0VCS0lUX0lT
X05FVFdPUktfUkVRVUVTVChyZXF1ZXN0KSk7Ci0gICAgbWVzc2FnZSA9IHdlYmtpdF9uZXR3b3Jr
X3JlcXVlc3RfZ2V0X21lc3NhZ2UocmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQoIW1lc3NhZ2UpOwot
ICAgIGdfb2JqZWN0X3VucmVmKHJlcXVlc3QpOwotCi0gICAgLyogVGVzdCBjcmVhdGlvbiB3aXRo
IFNvdXBNZXNzYWdlICovCi0gICAgbWVzc2FnZSA9IHNvdXBfbWVzc2FnZV9uZXcoIkdFVCIsICJo
dHRwOi8vZGViaWFuLm9yZy8iKTsKLSAgICByZXF1ZXN0ID0gV0VCS0lUX05FVFdPUktfUkVRVUVT
VChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfTkVUV09SS19SRVFVRVNULCAibWVzc2FnZSIsIG1l
c3NhZ2UsIE5VTEwpKTsKLSAgICBnX2Fzc2VydChXRUJLSVRfSVNfTkVUV09SS19SRVFVRVNUKHJl
cXVlc3QpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QobWVzc2FnZSktPnJlZl9jb3Vu
dCwgPT0sIDIpOwotICAgIGdfb2JqZWN0X3VucmVmKHJlcXVlc3QpOwotICAgIGdfYXNzZXJ0X2Nt
cGludChHX09CSkVDVChtZXNzYWdlKS0+cmVmX2NvdW50LCA9PSwgMSk7Ci0gICAgZ19vYmplY3Rf
dW5yZWYobWVzc2FnZSk7Ci0KLSAgICAvKiBUZXN0IGNyZWF0aW9uIHdpdGggYm90aCBTb3VwTWVz
c2FnZSBhbmQgVVJJICovCi0gICAgbWVzc2FnZSA9IHNvdXBfbWVzc2FnZV9uZXcoIkdFVCIsICJo
dHRwOi8vZGViaWFuLm9yZy8iKTsKLSAgICByZXF1ZXN0ID0gV0VCS0lUX05FVFdPUktfUkVRVUVT
VChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfTkVUV09SS19SRVFVRVNULCAibWVzc2FnZSIsIG1l
c3NhZ2UsICJ1cmkiLCAiaHR0cDovL2dub21lLm9yZy8iLCBOVUxMKSk7Ci0gICAgZ19hc3NlcnQo
V0VCS0lUX0lTX05FVFdPUktfUkVRVUVTVChyZXF1ZXN0KSk7Ci0gICAgZ19hc3NlcnRfY21waW50
KEdfT0JKRUNUKG1lc3NhZ2UpLT5yZWZfY291bnQsID09LCAyKTsKLSAgICBnX2Fzc2VydF9jbXBz
dHIod2Via2l0X25ldHdvcmtfcmVxdWVzdF9nZXRfdXJpKHJlcXVlc3QpLCA9PSwgImh0dHA6Ly9n
bm9tZS5vcmcvIik7Ci0gICAgZ19vYmplY3RfdW5yZWYocmVxdWVzdCk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KEdfT0JKRUNUKG1lc3NhZ2UpLT5yZWZfY291bnQsID09LCAxKTsKLSAgICBnX29iamVj
dF91bnJlZihtZXNzYWdlKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF9uZXR3b3JrX3JlcXVlc3Rf
cHJvcGVydGllcygpCi17Ci0gICAgV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3Q7Ci0gICAg
U291cE1lc3NhZ2UqIG1lc3NhZ2U7Ci0gICAgZ2NoYXIqIHNvdXBVUkk7Ci0KLSAgICAvKiBUZXN0
IFVSSSBpcyBzZXQgY29ycmVjdGx5IHdoZW4gY3JlYXRpbmcgd2l0aCBVUkkgKi8KLSAgICByZXF1
ZXN0ID0gd2Via2l0X25ldHdvcmtfcmVxdWVzdF9uZXcoImh0dHA6Ly9kZWJpYW4ub3JnLyIpOwot
ICAgIGdfYXNzZXJ0KFdFQktJVF9JU19ORVRXT1JLX1JFUVVFU1QocmVxdWVzdCkpOwotICAgIGdf
YXNzZXJ0X2NtcHN0cih3ZWJraXRfbmV0d29ya19yZXF1ZXN0X2dldF91cmkocmVxdWVzdCksID09
LCAiaHR0cDovL2RlYmlhbi5vcmcvIik7Ci0gICAgZ19vYmplY3RfdW5yZWYocmVxdWVzdCk7Ci0K
LSAgICAvKiBUZXN0IFVSSSBpcyBzZXQgY29ycmVjdGx5IHdoZW4gY3JlYXRpbmcgd2l0aCBNZXNz
YWdlICovCi0gICAgbWVzc2FnZSA9IHNvdXBfbWVzc2FnZV9uZXcoIkdFVCIsICJodHRwOi8vZGVi
aWFuLm9yZy8iKTsKLSAgICByZXF1ZXN0ID0gV0VCS0lUX05FVFdPUktfUkVRVUVTVChnX29iamVj
dF9uZXcoV0VCS0lUX1RZUEVfTkVUV09SS19SRVFVRVNULCAibWVzc2FnZSIsIG1lc3NhZ2UsIE5V
TEwpKTsKLSAgICBnX2Fzc2VydChXRUJLSVRfSVNfTkVUV09SS19SRVFVRVNUKHJlcXVlc3QpKTsK
LSAgICBnX29iamVjdF91bnJlZihtZXNzYWdlKTsKLQotICAgIG1lc3NhZ2UgPSB3ZWJraXRfbmV0
d29ya19yZXF1ZXN0X2dldF9tZXNzYWdlKHJlcXVlc3QpOwotICAgIHNvdXBVUkkgPSBzb3VwX3Vy
aV90b19zdHJpbmcoc291cF9tZXNzYWdlX2dldF91cmkobWVzc2FnZSksIEZBTFNFKTsKLSAgICBn
X2Fzc2VydF9jbXBzdHIoc291cFVSSSwgPT0sICJodHRwOi8vZGViaWFuLm9yZy8iKTsKLSAgICBn
X2ZyZWUoc291cFVSSSk7Ci0KLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X25ldHdvcmtfcmVx
dWVzdF9nZXRfdXJpKHJlcXVlc3QpLCA9PSwgImh0dHA6Ly9kZWJpYW4ub3JnLyIpOwotICAgIGdf
b2JqZWN0X3VucmVmKHJlcXVlc3QpOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFy
Z3YpCi17Ci0gICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOwotCi0gICAgZ190
ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKLSAgICBnX3Rlc3RfYWRk
X2Z1bmMoIi93ZWJraXQvbmV0d29ya3JlcXVlc3QvY3JlYXRlZGVzdHJveSIsIHRlc3RfbmV0d29y
a19yZXF1ZXN0X2NyZWF0ZV9kZXN0cm95KTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQv
bmV0d29ya3JlcXVlc3QvcHJvcGVydGllcyIsIHRlc3RfbmV0d29ya19yZXF1ZXN0X3Byb3BlcnRp
ZXMpOwotICAgIHJldHVybiBnX3Rlc3RfcnVuICgpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9ndGsvdGVzdHMvdGVzdG5ldHdvcmtyZXNwb25zZS5jIGIvU291cmNlL1dlYktpdC9ndGsv
dGVzdHMvdGVzdG5ldHdvcmtyZXNwb25zZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBiODA2YWExLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RuZXR3
b3JrcmVzcG9uc2UuYworKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDkgR3VzdGF2byBOb3JvbmhhIFNpbHZhCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgQ29sbGFib3JhIEx0ZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgPGVycm5vLmg+
Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGdsaWIv
Z3N0ZGlvLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2lu
Y2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KLQotc3RhdGljIHZvaWQgdGVzdF9uZXR3b3JrX3Jlc3Bv
bnNlX2NyZWF0ZV9kZXN0cm95KCkKLXsKLSAgICBXZWJLaXROZXR3b3JrUmVzcG9uc2UqIHJlc3Bv
bnNlOwotICAgIFNvdXBNZXNzYWdlKiBtZXNzYWdlOwotCi0gICAgLyogVGVzdCBjcmVhdGlvbiB3
aXRoIFVSSSAqLwotICAgIHJlc3BvbnNlID0gV0VCS0lUX05FVFdPUktfUkVTUE9OU0UoZ19vYmpl
Y3RfbmV3KFdFQktJVF9UWVBFX05FVFdPUktfUkVTUE9OU0UsICJ1cmkiLCAiaHR0cDovL2RlYmlh
bi5vcmcvIiwgTlVMTCkpOwotICAgIGdfYXNzZXJ0KFdFQktJVF9JU19ORVRXT1JLX1JFU1BPTlNF
KHJlc3BvbnNlKSk7Ci0gICAgbWVzc2FnZSA9IHdlYmtpdF9uZXR3b3JrX3Jlc3BvbnNlX2dldF9t
ZXNzYWdlKHJlc3BvbnNlKTsKLSAgICBnX2Fzc2VydCghbWVzc2FnZSk7Ci0gICAgZ19vYmplY3Rf
dW5yZWYocmVzcG9uc2UpOwotCi0gICAgLyogVGVzdCBjcmVhdGlvbiB3aXRoIFNvdXBNZXNzYWdl
ICovCi0gICAgbWVzc2FnZSA9IHNvdXBfbWVzc2FnZV9uZXcoIkdFVCIsICJodHRwOi8vZGViaWFu
Lm9yZy8iKTsKLSAgICByZXNwb25zZSA9IFdFQktJVF9ORVRXT1JLX1JFU1BPTlNFKGdfb2JqZWN0
X25ldyhXRUJLSVRfVFlQRV9ORVRXT1JLX1JFU1BPTlNFLCAibWVzc2FnZSIsIG1lc3NhZ2UsIE5V
TEwpKTsKLSAgICBnX2Fzc2VydChXRUJLSVRfSVNfTkVUV09SS19SRVNQT05TRShyZXNwb25zZSkp
OwotICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChtZXNzYWdlKS0+cmVmX2NvdW50LCA9PSwg
Mik7Ci0gICAgZ19vYmplY3RfdW5yZWYocmVzcG9uc2UpOwotICAgIGdfYXNzZXJ0X2NtcGludChH
X09CSkVDVChtZXNzYWdlKS0+cmVmX2NvdW50LCA9PSwgMSk7Ci0gICAgZ19vYmplY3RfdW5yZWYo
bWVzc2FnZSk7Ci0KLSAgICAvKiBUZXN0IGNyZWF0aW9uIHdpdGggYm90aCBTb3VwTWVzc2FnZSBh
bmQgVVJJICovCi0gICAgbWVzc2FnZSA9IHNvdXBfbWVzc2FnZV9uZXcoIkdFVCIsICJodHRwOi8v
ZGViaWFuLm9yZy8iKTsKLSAgICByZXNwb25zZSA9IFdFQktJVF9ORVRXT1JLX1JFU1BPTlNFKGdf
b2JqZWN0X25ldyhXRUJLSVRfVFlQRV9ORVRXT1JLX1JFU1BPTlNFLCAibWVzc2FnZSIsIG1lc3Nh
Z2UsICJ1cmkiLCAiaHR0cDovL2dub21lLm9yZy8iLCBOVUxMKSk7Ci0gICAgZ19hc3NlcnQoV0VC
S0lUX0lTX05FVFdPUktfUkVTUE9OU0UocmVzcG9uc2UpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
R19PQkpFQ1QobWVzc2FnZSktPnJlZl9jb3VudCwgPT0sIDIpOwotICAgIGdfYXNzZXJ0X2NtcHN0
cih3ZWJraXRfbmV0d29ya19yZXNwb25zZV9nZXRfdXJpKHJlc3BvbnNlKSwgPT0sICJodHRwOi8v
Z25vbWUub3JnLyIpOwotICAgIGdfb2JqZWN0X3VucmVmKHJlc3BvbnNlKTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoR19PQkpFQ1QobWVzc2FnZSktPnJlZl9jb3VudCwgPT0sIDEpOwotICAgIGdfb2Jq
ZWN0X3VucmVmKG1lc3NhZ2UpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X25ldHdvcmtfcmVzcG9u
c2VfcHJvcGVydGllcygpCi17Ci0gICAgV2ViS2l0TmV0d29ya1Jlc3BvbnNlKiByZXNwb25zZTsK
LSAgICBTb3VwTWVzc2FnZSogbWVzc2FnZTsKLSAgICBnY2hhciogc291cFVSSTsKLQotICAgIC8q
IFRlc3QgVVJJIGlzIHNldCBjb3JyZWN0bHkgd2hlbiBjcmVhdGluZyB3aXRoIFVSSSAqLwotICAg
IHJlc3BvbnNlID0gd2Via2l0X25ldHdvcmtfcmVzcG9uc2VfbmV3KCJodHRwOi8vZGViaWFuLm9y
Zy8iKTsKLSAgICBnX2Fzc2VydChXRUJLSVRfSVNfTkVUV09SS19SRVNQT05TRShyZXNwb25zZSkp
OwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfbmV0d29ya19yZXNwb25zZV9nZXRfdXJpKHJl
c3BvbnNlKSwgPT0sICJodHRwOi8vZGViaWFuLm9yZy8iKTsKLSAgICBnX29iamVjdF91bnJlZihy
ZXNwb25zZSk7Ci0KLSAgICAvKiBUZXN0IFVSSSBpcyBzZXQgY29ycmVjdGx5IHdoZW4gY3JlYXRp
bmcgd2l0aCBNZXNzYWdlICovCi0gICAgbWVzc2FnZSA9IHNvdXBfbWVzc2FnZV9uZXcoIkdFVCIs
ICJodHRwOi8vZGViaWFuLm9yZy8iKTsKLSAgICByZXNwb25zZSA9IFdFQktJVF9ORVRXT1JLX1JF
U1BPTlNFKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9ORVRXT1JLX1JFU1BPTlNFLCAibWVzc2Fn
ZSIsIG1lc3NhZ2UsIE5VTEwpKTsKLSAgICBnX2Fzc2VydChXRUJLSVRfSVNfTkVUV09SS19SRVNQ
T05TRShyZXNwb25zZSkpOwotICAgIGdfb2JqZWN0X3VucmVmKG1lc3NhZ2UpOwotCi0gICAgbWVz
c2FnZSA9IHdlYmtpdF9uZXR3b3JrX3Jlc3BvbnNlX2dldF9tZXNzYWdlKHJlc3BvbnNlKTsKLSAg
ICBzb3VwVVJJID0gc291cF91cmlfdG9fc3RyaW5nKHNvdXBfbWVzc2FnZV9nZXRfdXJpKG1lc3Nh
Z2UpLCBGQUxTRSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHNvdXBVUkksID09LCAiaHR0cDovL2Rl
Ymlhbi5vcmcvIik7Ci0gICAgZ19mcmVlKHNvdXBVUkkpOwotCi0gICAgZ19hc3NlcnRfY21wc3Ry
KHdlYmtpdF9uZXR3b3JrX3Jlc3BvbnNlX2dldF91cmkocmVzcG9uc2UpLCA9PSwgImh0dHA6Ly9k
ZWJpYW4ub3JnLyIpOwotICAgIGdfb2JqZWN0X3VucmVmKHJlc3BvbnNlKTsKLX0KLQotaW50IG1h
aW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotewotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZh
cmd2LCBOVUxMKTsKLQotICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvIik7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L25ldHdvcmtyZXNwb25zZS9jcmVh
dGVkZXN0cm95IiwgdGVzdF9uZXR3b3JrX3Jlc3BvbnNlX2NyZWF0ZV9kZXN0cm95KTsKLSAgICBn
X3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvbmV0d29ya3Jlc3BvbnNlL3Byb3BlcnRpZXMiLCB0ZXN0
X25ldHdvcmtfcmVzcG9uc2VfcHJvcGVydGllcyk7Ci0gICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2ViYmFja2Zvcndh
cmRsaXN0LmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2ViYmFja2ZvcndhcmRsaXN0
LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3ODJkNDAuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYmJhY2tmb3J3YXJkbGlzdC5jCisrKyAvZGV2
L251bGwKQEAgLTEsMzI2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggSG9sZ2Vy
IEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgPGdsaWIu
aD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgotCi1z
dGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2xpZmV0aW1lKHZvaWQpCi17
Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldzsKLSAgICBXZWJLaXRXZWJCYWNrRm9yd2FyZExp
c3QqIGJhY2tGb3J3YXJkTGlzdDsKLSAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogY3VycmVudEl0
ZW07Ci0gICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGZvcndhcmRJdGVtOwotICAgIFdlYktpdFdl
Ykhpc3RvcnlJdGVtKiBiYWNrSXRlbTsKLSAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogbnRoSXRl
bTsKLSAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogaXRlbTE7Ci0gICAgV2ViS2l0V2ViSGlzdG9y
eUl0ZW0qIGl0ZW0yOwotICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBpdGVtMzsKLSAgICBXZWJL
aXRXZWJIaXN0b3J5SXRlbSogaXRlbTQ7Ci0gICAgR0xpc3QqIGJhY2tMaXN0ID0gTlVMTDsKLSAg
ICBHTGlzdCogZm9yd2FyZExpc3QgPSBOVUxMOwotICAgIGdfdGVzdF9idWcoIjE5ODk4Iik7Ci0K
LSAgICB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0g
ICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7Ci0gICAgYmFja0ZvcndhcmRMaXN0ID0gd2Vi
a2l0X3dlYl92aWV3X2dldF9iYWNrX2ZvcndhcmRfbGlzdCh3ZWJWaWV3KTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoR19PQkpFQ1QoYmFja0ZvcndhcmRMaXN0KS0+cmVmX2NvdW50LCA9PSwgMSk7Ci0K
LSAgICAvKiBhZGQgdGVzdCBpdGVtcyAqLwotICAgIGl0ZW0xID0gd2Via2l0X3dlYl9oaXN0b3J5
X2l0ZW1fbmV3X3dpdGhfZGF0YSgiaHR0cDovL2V4YW1wbGUuY29tLzEvIiwgIlNpdGUgMSIpOwot
ICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfYWRkX2l0ZW0oYmFja0ZvcndhcmRMaXN0
LCBpdGVtMSk7Ci0gICAgZ19vYmplY3RfdW5yZWYoaXRlbTEpOwotCi0gICAgaXRlbTIgPSB3ZWJr
aXRfd2ViX2hpc3RvcnlfaXRlbV9uZXdfd2l0aF9kYXRhKCJodHRwOi8vZXhhbXBsZS5jb20vMi8i
LCAiU2l0ZSAyIik7Ci0gICAgd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9hZGRfaXRlbShi
YWNrRm9yd2FyZExpc3QsIGl0ZW0yKTsKLSAgICBnX29iamVjdF91bnJlZihpdGVtMik7Ci0KLSAg
ICBpdGVtMyA9IHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX25ld193aXRoX2RhdGEoImh0dHA6Ly9l
eGFtcGxlLmNvbS8zLyIsICJTaXRlIDMiKTsKLSAgICB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9s
aXN0X2FkZF9pdGVtKGJhY2tGb3J3YXJkTGlzdCwgaXRlbTMpOwotICAgIGdfb2JqZWN0X3VucmVm
KGl0ZW0zKTsKLQotICAgIGl0ZW00ID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dpdGhf
ZGF0YSgiaHR0cDovL2V4YW1wbGUuY29tLzQvIiwgIlNpdGUgNCIpOwotICAgIHdlYmtpdF93ZWJf
YmFja19mb3J3YXJkX2xpc3RfYWRkX2l0ZW0oYmFja0ZvcndhcmRMaXN0LCBpdGVtNCk7Ci0gICAg
Z19vYmplY3RfdW5yZWYoaXRlbTQpOwotCi0gICAgLyogbWFrZSBzdXJlIHRoZXNlIGZ1bmN0aW9u
cyBkb24ndCBhZGQgdW5uZWNlc3NhcnkgcmVmIHRvIHRoZSBoaXN0b3J5IGl0ZW0gKi8KLSAgICBi
YWNrSXRlbSA9IHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfaXRlbShiYWNr
Rm9yd2FyZExpc3QpOwotICAgIGdfb2JqZWN0X3JlZihiYWNrSXRlbSk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KEdfT0JKRUNUKGJhY2tJdGVtKS0+cmVmX2NvdW50LCA9PSwgMik7Ci0gICAgZ19vYmpl
Y3RfdW5yZWYoYmFja0l0ZW0pOwotICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChiYWNrSXRl
bSktPnJlZl9jb3VudCwgPT0sIDEpOwotCi0gICAgY3VycmVudEl0ZW0gPSB3ZWJraXRfd2ViX2Jh
Y2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0oYmFja0ZvcndhcmRMaXN0KTsKLSAgICBn
X29iamVjdF9yZWYoY3VycmVudEl0ZW0pOwotICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChj
dXJyZW50SXRlbSktPnJlZl9jb3VudCwgPT0sIDIpOwotICAgIGdfb2JqZWN0X3VucmVmKGN1cnJl
bnRJdGVtKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoY3VycmVudEl0ZW0pLT5yZWZf
Y291bnQsID09LCAxKTsKLQotICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ29fdG9f
aXRlbShiYWNrRm9yd2FyZExpc3QsIGl0ZW0yKTsKLSAgICBmb3J3YXJkSXRlbSA9IHdlYmtpdF93
ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRlbShiYWNrRm9yd2FyZExpc3QpOwot
ICAgIGdfb2JqZWN0X3JlZihmb3J3YXJkSXRlbSk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdfT0JK
RUNUKGZvcndhcmRJdGVtKS0+cmVmX2NvdW50LCA9PSwgMik7Ci0gICAgZ19vYmplY3RfdW5yZWYo
Zm9yd2FyZEl0ZW0pOwotICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChmb3J3YXJkSXRlbSkt
PnJlZl9jb3VudCwgPT0sIDEpOwotCi0gICAgbnRoSXRlbSA9IHdlYmtpdF93ZWJfYmFja19mb3J3
YXJkX2xpc3RfZ2V0X250aF9pdGVtKGJhY2tGb3J3YXJkTGlzdCwgMSk7Ci0gICAgZ19vYmplY3Rf
cmVmKG50aEl0ZW0pOwotICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChudGhJdGVtKS0+cmVm
X2NvdW50LCA9PSwgMik7Ci0gICAgZ19vYmplY3RfdW5yZWYobnRoSXRlbSk7Ci0gICAgZ19hc3Nl
cnRfY21waW50KEdfT0JKRUNUKG50aEl0ZW0pLT5yZWZfY291bnQsID09LCAxKTsKLQotICAgIGJh
Y2tMaXN0ID0gd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19saXN0X3dpdGhf
bGltaXQoYmFja0ZvcndhcmRMaXN0LCA1KTsKLSAgICBmb3IgKDsgYmFja0xpc3Q7IGJhY2tMaXN0
ID0gYmFja0xpc3QtPm5leHQpCi0gICAgICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChiYWNr
TGlzdC0+ZGF0YSktPnJlZl9jb3VudCwgPT0sIDEpOwotCi0gICAgZm9yd2FyZExpc3QgPSB3ZWJr
aXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xpc3Rfd2l0aF9saW1pdChiYWNr
Rm9yd2FyZExpc3QsIDUpOwotICAgIGZvciAoOyBmb3J3YXJkTGlzdDsgZm9yd2FyZExpc3QgPSBm
b3J3YXJkTGlzdC0+bmV4dCkKLSAgICAgICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKGZvcndh
cmRMaXN0LT5kYXRhKS0+cmVmX2NvdW50LCA9PSwgMSk7Ci0KLSAgICBnX2xpc3RfZnJlZShmb3J3
YXJkTGlzdCk7Ci0gICAgZ19saXN0X2ZyZWUoYmFja0xpc3QpOwotICAgIGdfYXNzZXJ0X2NtcGlu
dChHX09CSkVDVChpdGVtMSktPnJlZl9jb3VudCwgPT0sIDEpOwotICAgIGdfYXNzZXJ0X2NtcGlu
dChHX09CSkVDVChpdGVtMiktPnJlZl9jb3VudCwgPT0sIDEpOwotICAgIGdfYXNzZXJ0X2NtcGlu
dChHX09CSkVDVChpdGVtMyktPnJlZl9jb3VudCwgPT0sIDEpOwotICAgIGdfYXNzZXJ0X2NtcGlu
dChHX09CSkVDVChpdGVtNCktPnJlZl9jb3VudCwgPT0sIDEpOwotICAgIGdfYXNzZXJ0X2NtcGlu
dChHX09CSkVDVChiYWNrRm9yd2FyZExpc3QpLT5yZWZfY291bnQsID09LCAxKTsKLSAgICBnX29i
amVjdF91bnJlZih3ZWJWaWV3KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX2Jh
Y2tfZm9yd2FyZF9saXN0X29yZGVyKHZvaWQpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmll
dzsKLSAgICBXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYkJhY2tGb3J3YXJkTGlzdDsKLSAg
ICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogaXRlbTE7Ci0gICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0q
IGl0ZW0yOwotICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBpdGVtMzsKLSAgICBXZWJLaXRXZWJI
aXN0b3J5SXRlbSogaXRlbTQ7Ci0gICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGN1cnJlbnRJdGVt
OwotICAgIEdMaXN0KiBiYWNrTGlzdCA9IE5VTEw7Ci0gICAgR0xpc3QqIGZvcndhcmRMaXN0ID0g
TlVMTDsKLSAgICBnX3Rlc3RfYnVnKCIyMjY5NCIpOwotCi0gICAgd2ViVmlldyA9IFdFQktJVF9X
RUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdl
YlZpZXcpOwotCi0gICAgd2Via2l0X3dlYl92aWV3X3NldF9tYWludGFpbnNfYmFja19mb3J3YXJk
X2xpc3Qod2ViVmlldywgVFJVRSk7Ci0gICAgd2ViQmFja0ZvcndhcmRMaXN0ID0gd2Via2l0X3dl
Yl92aWV3X2dldF9iYWNrX2ZvcndhcmRfbGlzdCh3ZWJWaWV3KTsKLSAgICBnX2Fzc2VydCh3ZWJC
YWNrRm9yd2FyZExpc3QpOwotCi0gICAgLy8gQ2hlY2sgdGhhdCB0aGVyZSBpcyBubyBpdGVtLgot
ICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0
ZW0od2ViQmFja0ZvcndhcmRMaXN0KSk7Ci0gICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJf
YmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGVuZ3RoKHdlYkJhY2tGb3J3YXJkTGlzdCks
ID09LCAwKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlz
dF9nZXRfYmFja19sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDApOwotICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQod2ViVmlldykpOwotICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2sod2ViVmlldykpOwotCi0gICAgLy8gQWRk
IGEgbmV3IGl0ZW1zCi0gICAgaXRlbTEgPSB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9uZXdfd2l0
aF9kYXRhKCJodHRwOi8vZXhhbXBsZS5jb20vMS8iLCAiU2l0ZSAxIik7Ci0gICAgd2Via2l0X3dl
Yl9iYWNrX2ZvcndhcmRfbGlzdF9hZGRfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QsIGl0ZW0xKTsK
LSAgICBnX29iamVjdF91bnJlZihpdGVtMSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3dlYl9iYWNr
X2ZvcndhcmRfbGlzdF9jb250YWluc19pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCwgaXRlbTEpKTsK
LQotICAgIGl0ZW0yID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dpdGhfZGF0YSgiaHR0
cDovL2V4YW1wbGUuY29tLzIvIiwgIlNpdGUgMiIpOwotICAgIHdlYmtpdF93ZWJfYmFja19mb3J3
YXJkX2xpc3RfYWRkX2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0LCBpdGVtMik7Ci0gICAgZ19vYmpl
Y3RfdW5yZWYoaXRlbTIpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xp
c3RfY29udGFpbnNfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QsIGl0ZW0yKSk7Ci0KLSAgICBpdGVt
MyA9IHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX25ld193aXRoX2RhdGEoImh0dHA6Ly9leGFtcGxl
LmNvbS8zLyIsICJTaXRlIDMiKTsKLSAgICB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2Fk
ZF9pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCwgaXRlbTMpOwotICAgIGdfb2JqZWN0X3VucmVmKGl0
ZW0zKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2NvbnRhaW5z
X2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0LCBpdGVtMykpOwotCi0gICAgaXRlbTQgPSB3ZWJraXRf
d2ViX2hpc3RvcnlfaXRlbV9uZXdfd2l0aF9kYXRhKCJodHRwOi8vZXhhbXBsZS5jb20vNC8iLCAi
U2l0ZSA0Iik7Ci0gICAgd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9hZGRfaXRlbSh3ZWJC
YWNrRm9yd2FyZExpc3QsIGl0ZW00KTsKLSAgICBnX29iamVjdF91bnJlZihpdGVtNCk7Ci0gICAg
Z19hc3NlcnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9jb250YWluc19pdGVtKHdlYkJh
Y2tGb3J3YXJkTGlzdCwgaXRlbTQpKTsKLQotICAgIC8vIGNoZWNrIHRoZSBiYWNrIGxpc3Qgb3Jk
ZXIKLSAgICBiYWNrTGlzdCA9IHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tf
bGlzdF93aXRoX2xpbWl0KHdlYkJhY2tGb3J3YXJkTGlzdCwgNSk7Ci0gICAgZ19hc3NlcnQoYmFj
a0xpc3QpOwotCi0gICAgY3VycmVudEl0ZW0gPSBXRUJLSVRfV0VCX0hJU1RPUllfSVRFTShiYWNr
TGlzdC0+ZGF0YSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVt
X2dldF91cmkoY3VycmVudEl0ZW0pLCA9PSwgImh0dHA6Ly9leGFtcGxlLmNvbS8zLyIpOwotICAg
IGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdGl0bGUoY3VycmVu
dEl0ZW0pLCA9PSwgIlNpdGUgMyIpOwotICAgIGJhY2tMaXN0ID0gYmFja0xpc3QtPm5leHQ7Ci0K
LSAgICBjdXJyZW50SXRlbSA9IFdFQktJVF9XRUJfSElTVE9SWV9JVEVNKGJhY2tMaXN0LT5kYXRh
KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3VyaShj
dXJyZW50SXRlbSksID09LCAiaHR0cDovL2V4YW1wbGUuY29tLzIvIik7Ci0gICAgZ19hc3NlcnRf
Y21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF90aXRsZShjdXJyZW50SXRlbSksID09
LCAiU2l0ZSAyIik7Ci0gICAgYmFja0xpc3QgPSBiYWNrTGlzdC0+bmV4dDsKLQotICAgIGN1cnJl
bnRJdGVtID0gV0VCS0lUX1dFQl9ISVNUT1JZX0lURU0oYmFja0xpc3QtPmRhdGEpOwotICAgIGdf
YXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdXJpKGN1cnJlbnRJdGVt
KSwgPT0sICJodHRwOi8vZXhhbXBsZS5jb20vMS8iKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Vi
a2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3RpdGxlKGN1cnJlbnRJdGVtKSwgPT0sICJTaXRlIDEi
KTsKLSAgICBnX2xpc3RfZnJlZShiYWNrTGlzdCk7Ci0KLSAgICAvLyBjaGVjayB0aGUgZm9yd2Fy
ZCBsaXN0IG9yZGVyCi0gICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dvX3RvX2JhY2tfZm9y
d2FyZF9pdGVtKHdlYlZpZXcsIGl0ZW0xKSk7Ci0gICAgZm9yd2FyZExpc3QgPSB3ZWJraXRfd2Vi
X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xpc3Rfd2l0aF9saW1pdCh3ZWJCYWNrRm9y
d2FyZExpc3QsNSk7Ci0gICAgZ19hc3NlcnQoZm9yd2FyZExpc3QpOwotCi0gICAgY3VycmVudEl0
ZW0gPSBXRUJLSVRfV0VCX0hJU1RPUllfSVRFTShmb3J3YXJkTGlzdC0+ZGF0YSk7Ci0gICAgZ19h
c3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF91cmkoY3VycmVudEl0ZW0p
LCA9PSwgImh0dHA6Ly9leGFtcGxlLmNvbS80LyIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJr
aXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdGl0bGUoY3VycmVudEl0ZW0pLCA9PSwgIlNpdGUgNCIp
OwotICAgIGZvcndhcmRMaXN0ID0gZm9yd2FyZExpc3QtPm5leHQ7Ci0KLSAgICBjdXJyZW50SXRl
bSA9IFdFQktJVF9XRUJfSElTVE9SWV9JVEVNKGZvcndhcmRMaXN0LT5kYXRhKTsKLSAgICBnX2Fz
c2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3VyaShjdXJyZW50SXRlbSks
ID09LCAiaHR0cDovL2V4YW1wbGUuY29tLzMvIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtp
dF93ZWJfaGlzdG9yeV9pdGVtX2dldF90aXRsZShjdXJyZW50SXRlbSksID09LCAiU2l0ZSAzIik7
Ci0gICAgZm9yd2FyZExpc3QgPSBmb3J3YXJkTGlzdC0+bmV4dDsKLQotICAgIGN1cnJlbnRJdGVt
ID0gV0VCS0lUX1dFQl9ISVNUT1JZX0lURU0oZm9yd2FyZExpc3QtPmRhdGEpOwotICAgIGdfYXNz
ZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdXJpKGN1cnJlbnRJdGVtKSwg
PT0sICJodHRwOi8vZXhhbXBsZS5jb20vMi8iKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0
X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3RpdGxlKGN1cnJlbnRJdGVtKSwgPT0sICJTaXRlIDIiKTsK
LQotICAgIGdfbGlzdF9mcmVlKGZvcndhcmRMaXN0KTsKLSAgICBnX29iamVjdF91bnJlZih3ZWJW
aWV3KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0
X2FkZF9pdGVtKHZvaWQpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldzsKLSAgICBXZWJL
aXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYkJhY2tGb3J3YXJkTGlzdDsKLSAgICBXZWJLaXRXZWJI
aXN0b3J5SXRlbSogYWRkSXRlbTE7Ci0gICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGFkZEl0ZW0y
OwotICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBiYWNrSXRlbTsKLSAgICBXZWJLaXRXZWJIaXN0
b3J5SXRlbSogY3VycmVudEl0ZW07Ci0gICAgZ190ZXN0X2J1ZygiMjI5ODgiKTsKLQotICAgIHdl
YlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBnX29i
amVjdF9yZWZfc2luayh3ZWJWaWV3KTsKLQotICAgIHdlYmtpdF93ZWJfdmlld19zZXRfbWFpbnRh
aW5zX2JhY2tfZm9yd2FyZF9saXN0KHdlYlZpZXcsIFRSVUUpOwotICAgIHdlYkJhY2tGb3J3YXJk
TGlzdCA9IHdlYmtpdF93ZWJfdmlld19nZXRfYmFja19mb3J3YXJkX2xpc3Qod2ViVmlldyk7Ci0g
ICAgZ19hc3NlcnQod2ViQmFja0ZvcndhcmRMaXN0KTsKLQotICAgIC8vIENoZWNrIHRoYXQgdGhl
cmUgaXMgbm8gaXRlbS4KLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlz
dF9nZXRfY3VycmVudF9pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCkpOwotICAgIGdfYXNzZXJ0X2Nt
cGludCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xlbmd0aCh3ZWJC
YWNrRm9yd2FyZExpc3QpLCA9PSwgMCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJf
YmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGVuZ3RoKHdlYkJhY2tGb3J3YXJkTGlzdCksID09
LCAwKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHdlYlZp
ZXcpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrKHdlYlZpZXcp
KTsKLQotICAgIC8vIEFkZCBhIG5ldyBpdGVtCi0gICAgYWRkSXRlbTEgPSB3ZWJraXRfd2ViX2hp
c3RvcnlfaXRlbV9uZXdfd2l0aF9kYXRhKCJodHRwOi8vZXhhbXBsZS5jb20vIiwgIkFkZGVkIHNp
dGUiKTsKLSAgICB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2FkZF9pdGVtKHdlYkJhY2tG
b3J3YXJkTGlzdCwgYWRkSXRlbTEpOwotICAgIGdfb2JqZWN0X3VucmVmKGFkZEl0ZW0xKTsKLSAg
ICBnX2Fzc2VydCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2NvbnRhaW5zX2l0ZW0od2Vi
QmFja0ZvcndhcmRMaXN0LCBhZGRJdGVtMSkpOwotCi0gICAgLy8gQ2hlY2sgdGhhdCB0aGUgYWRk
ZWQgaXRlbSBpcyB0aGUgY3VycmVudCBpdGVtLgotICAgIGN1cnJlbnRJdGVtID0gd2Via2l0X3dl
Yl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCk7
Ci0gICAgZ19hc3NlcnQoY3VycmVudEl0ZW0pOwotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRf
d2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xlbmd0aCh3ZWJCYWNrRm9yd2FyZExp
c3QpLCA9PSwgMCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJfYmFja19mb3J3YXJk
X2xpc3RfZ2V0X2JhY2tfbGVuZ3RoKHdlYkJhY2tGb3J3YXJkTGlzdCksID09LCAwKTsKLSAgICBn
X2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHdlYlZpZXcpKTsKLSAgICBn
X2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrKHdlYlZpZXcpKTsKLSAgICBnX2Fz
c2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3VyaShjdXJyZW50SXRlbSks
ID09LCAiaHR0cDovL2V4YW1wbGUuY29tLyIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRf
d2ViX2hpc3RvcnlfaXRlbV9nZXRfdGl0bGUoY3VycmVudEl0ZW0pLCA9PSwgIkFkZGVkIHNpdGUi
KTsKLQotICAgIC8vIEFkZCBhbm90aGVyIGl0ZW0uCi0gICAgYWRkSXRlbTIgPSB3ZWJraXRfd2Vi
X2hpc3RvcnlfaXRlbV9uZXdfd2l0aF9kYXRhKCJodHRwOi8vZXhhbXBsZS5jb20vMi8iLCAiQWRk
ZWQgc2l0ZSAyIik7Ci0gICAgd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9hZGRfaXRlbSh3
ZWJCYWNrRm9yd2FyZExpc3QsIGFkZEl0ZW0yKTsKLSAgICBnX29iamVjdF91bnJlZihhZGRJdGVt
Mik7Ci0gICAgZ19hc3NlcnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9jb250YWluc19p
dGVtKHdlYkJhY2tGb3J3YXJkTGlzdCwgYWRkSXRlbTIpKTsKLQotICAgIC8vIENoZWNrIHRoYXQg
dGhlIGFkZGVkIGl0ZW0gaXMgbmV3IGN1cnJlbnQgaXRlbS4KLSAgICBjdXJyZW50SXRlbSA9IHdl
YmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh3ZWJCYWNrRm9yd2Fy
ZExpc3QpOwotICAgIGdfYXNzZXJ0KGN1cnJlbnRJdGVtKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
d2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9sZW5ndGgod2ViQmFja0Zv
cndhcmRMaXN0KSwgPT0sIDApOwotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2ViX2JhY2tf
Zm9yd2FyZF9saXN0X2dldF9iYWNrX2xlbmd0aCh3ZWJCYWNrRm9yd2FyZExpc3QpLCA9PSwgMSk7
Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh3ZWJWaWV3KSk7
Ci0gICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrKHdlYlZpZXcpKTsKLSAg
ICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3VyaShjdXJyZW50
SXRlbSksID09LCAiaHR0cDovL2V4YW1wbGUuY29tLzIvIik7Ci0gICAgZ19hc3NlcnRfY21wc3Ry
KHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF90aXRsZShjdXJyZW50SXRlbSksID09LCAiQWRk
ZWQgc2l0ZSAyIik7Ci0KLSAgICBiYWNrSXRlbSA9IHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xp
c3RfZ2V0X2JhY2tfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QpOwotICAgIGdfYXNzZXJ0KGJhY2tJ
dGVtKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3Vy
aShiYWNrSXRlbSksID09LCAiaHR0cDovL2V4YW1wbGUuY29tLyIpOwotICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdGl0bGUoYmFja0l0ZW0pLCA9PSwgIkFk
ZGVkIHNpdGUiKTsKLQotICAgIC8vIEdvIHRvIHRoZSBmaXJzdCBhZGRlZCBpdGVtLgotICAgIGdf
YXNzZXJ0KHdlYmtpdF93ZWJfdmlld19nb190b19iYWNrX2ZvcndhcmRfaXRlbSh3ZWJWaWV3LCBh
ZGRJdGVtMSkpOwotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9s
aXN0X2dldF9mb3J3YXJkX2xlbmd0aCh3ZWJCYWNrRm9yd2FyZExpc3QpLCA9PSwgMSk7Ci0gICAg
Z19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGVu
Z3RoKHdlYkJhY2tGb3J3YXJkTGlzdCksID09LCAwKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfd2Vi
X3ZpZXdfY2FuX2dvX2ZvcndhcmQod2ViVmlldykpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2Vi
X3ZpZXdfY2FuX2dvX2JhY2sod2ViVmlldykpOwotCi0gICAgZ19vYmplY3RfdW5yZWYod2ViVmll
dyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9j
bGVhcih2b2lkKQotewotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXc7Ci0gICAgV2ViS2l0V2Vi
QmFja0ZvcndhcmRMaXN0KiB3ZWJCYWNrRm9yd2FyZExpc3Q7Ci0gICAgV2ViS2l0V2ViSGlzdG9y
eUl0ZW0qIGFkZEl0ZW07Ci0gICAgZ190ZXN0X2J1ZygiMzYxNzMiKTsKLQotICAgIHdlYlZpZXcg
PSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBnX29iamVjdF9y
ZWZfc2luayh3ZWJWaWV3KTsKLQotICAgIHdlYkJhY2tGb3J3YXJkTGlzdCA9IHdlYmtpdF93ZWJf
dmlld19nZXRfYmFja19mb3J3YXJkX2xpc3Qod2ViVmlldyk7Ci0gICAgZ19hc3NlcnQod2ViQmFj
a0ZvcndhcmRMaXN0KTsKLQotICAgIC8vIENoZWNrIHRoYXQgdGhlcmUgaXMgbm8gaXRlbS4KLSAg
ICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2Fy
ZF9sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDApOwotICAgIGdfYXNzZXJ0X2NtcGlu
dCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xlbmd0aCh3ZWJCYWNrRm9y
d2FyZExpc3QpLCA9PSwgMCk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfYmFja19mb3J3YXJk
X2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QpKTsKLSAgICBnX2Fzc2Vy
dCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHdlYlZpZXcpKTsKLSAgICBnX2Fzc2Vy
dCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrKHdlYlZpZXcpKTsKLQotICAgIC8vIENoZWNr
IHRoYXQgY2xlYXJpbmcgdGhlIGVtcHR5IGxpc3QgZG9lcyBub3QgbW9kaWZ5IGNvdW50ZXJzCi0g
ICAgd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9jbGVhcih3ZWJCYWNrRm9yd2FyZExpc3Qp
OwotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9m
b3J3YXJkX2xlbmd0aCh3ZWJCYWNrRm9yd2FyZExpc3QpLCA9PSwgMCk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGVuZ3RoKHdlYkJh
Y2tGb3J3YXJkTGlzdCksID09LCAwKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl9iYWNrX2Zv
cndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCkpOwotICAgIGdf
YXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQod2ViVmlldykpOwotICAgIGdf
YXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2sod2ViVmlldykpOwotCi0gICAgLy8g
QWRkIGEgbmV3IGl0ZW0KLSAgICBhZGRJdGVtID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3
X3dpdGhfZGF0YSgiaHR0cDovL2V4YW1wbGUuY29tLyIsICJBZGRlZCBzaXRlIik7Ci0gICAgd2Vi
a2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9hZGRfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QsIGFk
ZEl0ZW0pOwotICAgIGdfb2JqZWN0X3VucmVmKGFkZEl0ZW0pOwotICAgIGdfYXNzZXJ0KHdlYmtp
dF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY29udGFpbnNfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3Qs
IGFkZEl0ZW0pKTsKLQotICAgIC8vIENoZWNrIHRoYXQgYWZ0ZXIgY2xlYXJpbmcgdGhlIGxpc3Qg
dGhlIGFkZGVkIGl0ZW0gaXMgbm8gbG9uZ2VyIGluIHRoZSBsaXN0Ci0gICAgd2Via2l0X3dlYl9i
YWNrX2ZvcndhcmRfbGlzdF9jbGVhcih3ZWJCYWNrRm9yd2FyZExpc3QpOwotICAgIGdfYXNzZXJ0
KCF3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2NvbnRhaW5zX2l0ZW0od2ViQmFja0Zvcndh
cmRMaXN0LCBhZGRJdGVtKSk7Ci0KLSAgICAvLyBDaGVjayB0aGF0IGFmdGVyIGNsZWFyaW5nIGl0
LCB0aGUgbGlzdCBpcyBlbXB0eQotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2ViX2JhY2tf
Zm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xlbmd0aCh3ZWJCYWNrRm9yd2FyZExpc3QpLCA9PSwg
MCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0
X2JhY2tfbGVuZ3RoKHdlYkJhY2tGb3J3YXJkTGlzdCksID09LCAwKTsKLSAgICBnX2Fzc2VydCgh
d2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKHdlYkJhY2tGb3J3
YXJkTGlzdCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQo
d2ViVmlldykpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2sod2Vi
VmlldykpOwotCi0gICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Ci19Ci0KLWludCBtYWluKGlu
dCBhcmdjLCBjaGFyKiogYXJndikKLXsKLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwg
TlVMTCk7Ci0KLSAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIp
OwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJiYWNrZm9yd2FyZGxpc3QvYWRkX2l0
ZW0iLCB0ZXN0X3dlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfYWRkX2l0ZW0pOwotICAgIGdf
dGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJiYWNrZm9yd2FyZGxpc3QvbGlzdF9vcmRlciIsIHRl
c3Rfd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9vcmRlcik7Ci0gICAgZ190ZXN0X2FkZF9m
dW5jKCIvd2Via2l0L3dlYmhpc3RvcnlpdGVtL2xpZmV0aW1lIiwgdGVzdF93ZWJraXRfd2ViX2hp
c3RvcnlfaXRlbV9saWZldGltZSk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYmJh
Y2tmb3J3YXJkbGlzdC9jbGVhciIsIHRlc3Rfd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9j
bGVhcik7Ci0gICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2d0ay90ZXN0cy90ZXN0d2ViZGF0YXNvdXJjZS5jIGIvU291cmNlL1dlYktpdC9ndGsv
dGVzdHMvdGVzdHdlYmRhdGFzb3VyY2UuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDU2NjI1Ny4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2ViZGF0
YXNvdXJjZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgSmFuIE1pY2hhZWwgQWxvbnpvCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHdlYmtpdC93ZWJr
aXQuaD4KLQotc3RhdGljIGNvbnN0IGdzaG9ydCBkZWZhdWx0VGltZW91dCA9IDEwOwotZ3VpbnQg
d2FpdFRpbWVyOwotZ2Jvb2xlYW4gc2hvdWxkV2FpdDsKLQotdHlwZWRlZiBzdHJ1Y3QgewotICAg
IFdlYktpdFdlYlZpZXcqIHdlYlZpZXc7Ci0gICAgV2ViS2l0V2ViRnJhbWUqIG1haW5GcmFtZTsK
LX0gV2ViRGF0YVNvdXJjZUZpeHR1cmU7Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9k
YXRhX3NvdXJjZV9nZXRfaW5pdGlhbF9yZXF1ZXN0KCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB2
aWV3OwotICAgIFdlYktpdFdlYkZyYW1lKiBmcmFtZTsKLSAgICBXZWJLaXRXZWJEYXRhU291cmNl
KiBkYXRhU291cmNlOwotICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiBpbml0aWFsUmVxdWVzdDsK
LQotICAgIHZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAg
ICBnX29iamVjdF9yZWZfc2luayh2aWV3KTsKLSAgICBmcmFtZSA9IHdlYmtpdF93ZWJfdmlld19n
ZXRfbWFpbl9mcmFtZSh2aWV3KTsKLQotICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0
ID0gd2Via2l0X25ldHdvcmtfcmVxdWVzdF9uZXcoImh0dHA6Ly93d3cuZ29vZ2xlLmNvbSIpOwot
ICAgIHdlYmtpdF93ZWJfZnJhbWVfbG9hZF9yZXF1ZXN0KGZyYW1lLCByZXF1ZXN0KTsKLSAgICBn
X29iamVjdF91bnJlZihyZXF1ZXN0KTsKLQotICAgIGRhdGFTb3VyY2UgPSB3ZWJraXRfd2ViX2Zy
YW1lX2dldF9wcm92aXNpb25hbF9kYXRhX3NvdXJjZShmcmFtZSk7Ci0gICAgZ19hc3NlcnQoZGF0
YVNvdXJjZSk7Ci0gICAgaW5pdGlhbFJlcXVlc3QgPSB3ZWJraXRfd2ViX2RhdGFfc291cmNlX2dl
dF9pbml0aWFsX3JlcXVlc3QoZGF0YVNvdXJjZSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtp
dF9uZXR3b3JrX3JlcXVlc3RfZ2V0X3VyaShpbml0aWFsUmVxdWVzdCksID09LCAiaHR0cDovL3d3
dy5nb29nbGUuY29tLyIpOwotCi0gICAgZ19vYmplY3RfdW5yZWYodmlldyk7Ci19Ci0KLXN0YXRp
YyB2b2lkIG5vdGlmeV9sb2FkX3N0YXR1c191bnJlYWNoYWJsZV9jYihXZWJLaXRXZWJWaWV3KiB2
aWV3LCBHUGFyYW1TcGVjKiBwc3BlYywgR01haW5Mb29wKiBsb29wKQotewotICAgIFdlYktpdExv
YWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyAodmlldyk7
Ci0gICAgV2ViS2l0V2ViRnJhbWUqIGZyYW1lID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX2Zy
YW1lKHZpZXcpOwotCi0gICAgZ19hc3NlcnQoc3RhdHVzICE9IFdFQktJVF9MT0FEX0ZJTklTSEVE
KTsKLQotICAgIGlmIChzdGF0dXMgIT0gV0VCS0lUX0xPQURfRkFJTEVEKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBXZWJLaXRXZWJEYXRhU291cmNlKiBkYXRhc291cmNlID0gd2Via2l0X3dlYl9m
cmFtZV9nZXRfZGF0YV9zb3VyY2UoZnJhbWUpOwotCi0gICAgZ19hc3NlcnRfY21wc3RyKCJodHRw
Oi8vdGhpcy5ob3N0LmRvZXMubm90LmV4aXN0L2RvaXJlYWxseWV4aXN0Lmh0bWwiLCA9PSwKLSAg
ICAgICAgICAgICAgICAgICAgd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfdW5yZWFjaGFibGVf
dXJpKGRhdGFzb3VyY2UpKTsKLQotICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci19Ci0KLXN0
YXRpYyB2b2lkIG5vdGlmeV9sb2FkX3N0YXR1c19jYihXZWJLaXRXZWJWaWV3KiB2aWV3LCBHUGFy
YW1TcGVjKiBwc3BlYywgR01haW5Mb29wKiBsb29wKQotewotICAgIFdlYktpdExvYWRTdGF0dXMg
c3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyAodmlldyk7Ci0gICAgV2Vi
S2l0V2ViRnJhbWUqIGZyYW1lID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKHZpZXcp
OwotICAgIFdlYktpdFdlYkRhdGFTb3VyY2UqIGRhdGFTb3VyY2UgPSB3ZWJraXRfd2ViX2ZyYW1l
X2dldF9kYXRhX3NvdXJjZShmcmFtZSk7Ci0KLSAgICBpZiAoc3RhdHVzID09IFdFQktJVF9MT0FE
X0NPTU1JVFRFRCkgewotICAgICAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2RhdGFfc291cmNlX2lz
X2xvYWRpbmcoZGF0YVNvdXJjZSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGVsc2Ug
aWYgKHN0YXR1cyAhPSBXRUJLSVRfTE9BRF9GSU5JU0hFRCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLyogVGVzdCBnZXRfcmVxdWVzdCAqLwotICAgIGdfdGVzdF9tZXNzYWdlKCJUZXN0aW5nIHdl
YmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X3JlcXVlc3QiKTsKLSAgICBXZWJLaXROZXR3b3JrUmVx
dWVzdCogcmVxdWVzdCA9IHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X3JlcXVlc3QoZGF0YVNv
dXJjZSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfZ2V0X3Vy
aShyZXF1ZXN0KSwgPT0sICJodHRwOi8vd3d3LndlYmtpdC5vcmcvIik7Ci0KLSAgICAvKiBUZXN0
IGdldF9tYWluX3Jlc291cmNlICovCi0gICAgZ190ZXN0X21lc3NhZ2UoIlRlc3Rpbmcgd2Via2l0
X3dlYl9kYXRhX3NvdXJjZV9nZXRfbWFpbl9yZXNvdXJjZSIpOwotICAgIFdlYktpdFdlYlJlc291
cmNlKiByZXNvdXJjZSA9IHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X21haW5fcmVzb3VyY2Uo
ZGF0YVNvdXJjZSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKCJ0ZXh0L2h0bWwiLCA9PSwgd2Via2l0
X3dlYl9yZXNvdXJjZV9nZXRfbWltZV90eXBlKHJlc291cmNlKSk7Ci0gICAgZ19hc3NlcnRfY21w
c3RyKCJodHRwOi8vd3d3LndlYmtpdC5vcmcvIiwgPT0sIHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0
X3VyaShyZXNvdXJjZSkpOwotCi0gICAgLyogVGVzdCBnZXRfZGF0YS4gV2UganVzdCB0ZXN0IGlm
IGRhdGEgaGFzIGNlcnRhaW4gc2l6ZSBmb3IgdGhlIG1lYW4gdGltZSAqLwotICAgIGdfdGVzdF9t
ZXNzYWdlKCJUZXN0aW5nIHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X2RhdGEgaGFzIGNlcnRh
aW4gc2l6ZSIpOwotICAgIEdTdHJpbmcqIGRhdGEgPSB3ZWJraXRfd2ViX2RhdGFfc291cmNlX2dl
dF9kYXRhKGRhdGFTb3VyY2UpOwotICAgIGdfYXNzZXJ0KGRhdGEtPmxlbiA+IDEwMCk7Ci0KLSAg
ICAvKiBGSVhNRTogQWRkIHRlc3QgZm9yIGdldF9lbmNvZGluZyAqLwotCi0gICAgZ19tYWluX2xv
b3BfcXVpdChsb29wKTsKLX0KLQotc3RhdGljIGdib29sZWFuIHdhaXRfdGltZXJfZmlyZWQoR01h
aW5Mb29wKiBsb29wKQotewotICAgIHdhaXRUaW1lciA9IDA7Ci0gICAgZ19tYWluX2xvb3BfcXVp
dChsb29wKTsKLQotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJr
aXRfd2ViX2RhdGFfc291cmNlKCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB2aWV3OwotICAgIEdN
YWluTG9vcCogbG9vcDsKLQotICAgIHZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92
aWV3X25ldygpKTsKLSAgICBnX29iamVjdF9yZWZfc2luayh2aWV3KTsKLSAgICBsb29wID0gZ19t
YWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QodmlldywgIm5v
dGlmeTo6bG9hZC1zdGF0dXMiLCBHX0NBTExCQUNLKG5vdGlmeV9sb2FkX3N0YXR1c19jYiksIGxv
b3ApOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh2aWV3LCAiaHR0cDovL3d3dy53ZWJr
aXQub3JnIik7Ci0KLSAgICB3YWl0VGltZXIgPSBnX3RpbWVvdXRfYWRkX3NlY29uZHMoZGVmYXVs
dFRpbWVvdXQsIChHU291cmNlRnVuYyl3YWl0X3RpbWVyX2ZpcmVkLCBsb29wKTsKLQotICAgIGdf
bWFpbl9sb29wX3J1bihsb29wKTsKLQotICAgIGlmICh3YWl0VGltZXIpCi0gICAgICAgIGdfc291
cmNlX3JlbW92ZSh3YWl0VGltZXIpOwotCi0gICAgd2FpdFRpbWVyID0gMDsKLQotICAgIGdfbWFp
bl9sb29wX3VucmVmKGxvb3ApOwotICAgIGdfb2JqZWN0X3VucmVmKHZpZXcpOwotfQotCi1zdGF0
aWMgdm9pZCBub3RpZnlfbG9hZF9zdGF0dXNfbGlmZXRpbWVfY2IoV2ViS2l0V2ViVmlldyogdmll
dywgR1BhcmFtU3BlYyogcHNwZWMsIEdNYWluTG9vcCogbG9vcCkKLXsKLSAgICBXZWJLaXRMb2Fk
U3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMgKHZpZXcpOwot
ICAgIFdlYktpdFdlYkZyYW1lKiBmcmFtZSA9IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFt
ZSh2aWV3KTsKLSAgICBXZWJLaXRXZWJEYXRhU291cmNlKiBkYXRhU291cmNlID0gd2Via2l0X3dl
Yl9mcmFtZV9nZXRfZGF0YV9zb3VyY2UoZnJhbWUpOwotCi0gICAgaWYgKHN0YXR1cyA9PSBXRUJL
SVRfTE9BRF9DT01NSVRURUQpIHsKLSAgICAgICAgZ19hc3NlcnQod2Via2l0X3dlYl9kYXRhX3Nv
dXJjZV9pc19sb2FkaW5nKGRhdGFTb3VyY2UpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0gZWxz
ZSBpZiAoc3RhdHVzICE9IFdFQktJVF9MT0FEX0ZJTklTSEVEKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtp
dF93ZWJfZGF0YV9zb3VyY2VfbGlmZXRpbWUoKQotewotICAgIFdlYktpdFdlYlZpZXcqIHZpZXc7
Ci0gICAgR01haW5Mb29wKiBsb29wOwotCi0gICAgdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJr
aXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKHZpZXcpOwotICAgIGxv
b3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdCh2
aWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0sobm90aWZ5X2xvYWRfc3RhdHVz
X2xpZmV0aW1lX2NiKSwgbG9vcCk7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHZpZXcs
ICJodHRwOi8vd3d3LndlYmtpdC5vcmciKTsKLQotICAgIHdhaXRUaW1lciA9IGdfdGltZW91dF9h
ZGRfc2Vjb25kcyhkZWZhdWx0VGltZW91dCwgKEdTb3VyY2VGdW5jKXdhaXRfdGltZXJfZmlyZWQs
IGxvb3ApOwotCi0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAgV2ViS2l0V2ViRGF0
YVNvdXJjZSogZGF0YVNvdXJjZSA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X2RhdGFfc291cmNlKHdl
YmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh2aWV3KSk7Ci0gICAgR0xpc3QqIHN1YlJlc291
cmNlcyA9IHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X3N1YnJlc291cmNlcyhkYXRhU291cmNl
KTsKLSAgICBnaW50IG51bWJlck9mUmVzb3VyY2VzID0gZ19saXN0X2xlbmd0aChzdWJSZXNvdXJj
ZXMpOwotICAgIGdfbGlzdF9mcmVlKHN1YlJlc291cmNlcyk7Ci0KLSAgICBnX2Fzc2VydF9jbXBp
bnQod2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh2aWV3KSwgPT0sIFdFQktJVF9MT0FE
X0ZJTklTSEVEKTsKLQotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh2aWV3LCAiaHR0cDov
L2dub21lLm9yZyIpOwotCi0gICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJfdmlld19nZXRf
bG9hZF9zdGF0dXModmlldyksID09LCBXRUJLSVRfTE9BRF9QUk9WSVNJT05BTCk7Ci0KLSAgICB3
ZWJraXRfd2ViX3ZpZXdfc3RvcF9sb2FkaW5nKHZpZXcpOwotCi0gICAgZ19hc3NlcnRfY21waW50
KHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXModmlldyksID09LCBXRUJLSVRfTE9BRF9G
QUlMRUQpOwotCi0gICAgc3ViUmVzb3VyY2VzID0gd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRf
c3VicmVzb3VyY2VzKGRhdGFTb3VyY2UpOwotICAgIGdfYXNzZXJ0X2NtcGludChudW1iZXJPZlJl
c291cmNlcywgPT0sIGdfbGlzdF9sZW5ndGgoc3ViUmVzb3VyY2VzKSk7Ci0gICAgZ19saXN0X2Zy
ZWUoc3ViUmVzb3VyY2VzKTsKLQotICAgIGlmICh3YWl0VGltZXIpCi0gICAgICAgIGdfc291cmNl
X3JlbW92ZSh3YWl0VGltZXIpOwotCi0gICAgd2FpdFRpbWVyID0gMDsKLQotICAgIGdfbWFpbl9s
b29wX3VucmVmKGxvb3ApOwotICAgIGdfb2JqZWN0X3VucmVmKHZpZXcpOwotfQotCi1zdGF0aWMg
dm9pZCB0ZXN0X3dlYmtpdF93ZWJfZGF0YV9zb3VyY2VfdW5yZWFjaGFibGVfdXJpKCkKLXsKLSAg
ICAvKiBGSVhNRTogdGhpcyB0ZXN0IGZhaWxzIGN1cnJlbnRseS4gKi8KLSAgICByZXR1cm47Ci0K
LSAgICBXZWJLaXRXZWJWaWV3KiB2aWV3OwotICAgIEdNYWluTG9vcCogbG9vcDsKLQotICAgIHZp
ZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBnX29iamVj
dF9yZWZfc2luayh2aWV3KTsKLSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUp
OwotICAgIGdfc2lnbmFsX2Nvbm5lY3QodmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLCBHX0NB
TExCQUNLKG5vdGlmeV9sb2FkX3N0YXR1c191bnJlYWNoYWJsZV9jYiksIGxvb3ApOwotICAgIHdl
YmtpdF93ZWJfdmlld19sb2FkX3VyaSh2aWV3LCAiaHR0cDovL3RoaXMuaG9zdC5kb2VzLm5vdC5l
eGlzdC9kb2lyZWFsbHlleGlzdC5odG1sIik7Ci0KLSAgICB3YWl0VGltZXIgPSBnX3RpbWVvdXRf
YWRkX3NlY29uZHMoZGVmYXVsdFRpbWVvdXQsIChHU291cmNlRnVuYyl3YWl0X3RpbWVyX2ZpcmVk
LCBsb29wKTsKLQotICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLQotICAgIGlmICh3YWl0VGlt
ZXIpCi0gICAgICAgIGdfc291cmNlX3JlbW92ZSh3YWl0VGltZXIpOwotCi0gICAgd2FpdFRpbWVy
ID0gMDsKLQotICAgIGdfbWFpbl9sb29wX3VucmVmKGxvb3ApOwotICAgIGdfb2JqZWN0X3VucmVm
KHZpZXcpOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCi17Ci0gICAgZ3Rr
X3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOwotCi0gICAgZ190ZXN0X2J1Z19iYXNlKCJo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKLSAgICBnX3Rlc3RfYnVnKCIyNDc1OCIpOwotICAg
IGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJkYXRhc291cmNlL2dldF9pbml0aWFsX3JlcXVl
c3QiLAotICAgICAgICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0
X2luaXRpYWxfcmVxdWVzdCk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYmRhdGFz
b3VyY2UvYXBpIiwKLSAgICAgICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfd2ViX2RhdGFfc291
cmNlKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2ViZGF0YXNvdXJjZS91bnJlYWNo
YWJsZV91cmkiLAotICAgICAgICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF93ZWJfZGF0YV9zb3Vy
Y2VfdW5yZWFjaGFibGVfdXJpKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2ViZGF0
YXNvdXJjZS9saWZldGltZSIsCi0gICAgICAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X3dlYl9k
YXRhX3NvdXJjZV9saWZldGltZSk7Ci0KLSAgICByZXR1cm4gZ190ZXN0X3J1biAoKTsKLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJmcmFtZS5jIGIvU291cmNl
L1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYmZyYW1lLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDExMzE4NzMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVz
dHdlYmZyYW1lLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMjAgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICogQ29weXJpZ2h0IChD
KSAyMDA5IENvbGxhYm9yYSBMdGQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlIDxlcnJu
by5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxn
bGliL2dzdGRpby5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3ZWJraXQvd2Vi
a2l0Lmg+Ci0KLXN0YXRpYyBpbnQgbnVtYmVyT2ZGcmFtZXNDcmVhdGVkID0gMDsKLQotc3RhdGlj
IHZvaWQgY3JlYXRlRnJhbWVTaWduYWxUZXN0RnJhbWVDcmVhdGVkQ2FsbGJhY2soV2ViS2l0V2Vi
Vmlldyogd2ViVmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLCBncG9pbnRlciBkYXRhKQotewot
ICAgIG51bWJlck9mRnJhbWVzQ3JlYXRlZCsrOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gY3JlYXRl
RnJhbWVTaWduYWxUZXN0VGltZW91dChncG9pbnRlciBkYXRhKQotewotICAgIGdfYXNzZXJ0X2Nt
cGludChudW1iZXJPZkZyYW1lc0NyZWF0ZWQsID09LCAyKTsKLSAgICBnX21haW5fbG9vcF9xdWl0
KChHTWFpbkxvb3AqKSBkYXRhKTsKLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lk
IHRlc3Rfd2Via2l0X3dlYl9mcmFtZV9jcmVhdGVkX3NpZ25hbCh2b2lkKQotewotICAgIEd0a1dp
ZGdldCogd2ViVmlldzsKLSAgICBHdGtXaWRnZXQqIHdpbmRvdzsKLSAgICBHTWFpbkxvb3AqIGxv
b3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7Ci0KLSAgICB3aW5kb3cgPSBndGtfd2lu
ZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKLQotICAgIHdlYlZpZXcgPSB3ZWJraXRfd2Vi
X3ZpZXdfbmV3KCk7Ci0gICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAiZnJhbWUtY3JlYXRl
ZCIsIEdfQ0FMTEJBQ0soY3JlYXRlRnJhbWVTaWduYWxUZXN0RnJhbWVDcmVhdGVkQ2FsbGJhY2sp
LCBsb29wKTsKLQotICAgIC8vIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgZXhhY3RseSB0d28gY3Jl
YXRlLWZyYW1lIHNpZ25hbHMgYXJlCi0gICAgLy8gZmlyZWQgYW5kIG5vIG1vcmUsIHNvIHdlIHNl
dCBhIHRpbWVvdXQgaGVyZS4gVGhlcmUgZG9lcyBub3QgYXBwZWFyCi0gICAgLy8gdG8gYmUgYSBz
aW1wbGUgd2F5IHZpYSB0aGUgQVBJIHRvIGZpZ3VyZSBvdXQgd2hlbiBhbGwgZnJhbWVzIGhhdmUK
LSAgICAvLyBsb2FkZWQuCi0gICAgZ190aW1lb3V0X2FkZCg1MDAsIGNyZWF0ZUZyYW1lU2lnbmFs
VGVzdFRpbWVvdXQsIGxvb3ApOwotCi0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5F
Uih3aW5kb3cpLCB3ZWJWaWV3KTsKLSAgICBndGtfd2lkZ2V0X3Nob3cod2luZG93KTsKLSAgICBn
dGtfd2lkZ2V0X3Nob3cod2ViVmlldyk7Ci0KLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJp
bmcoV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpLAotICAgICAgICAiPGh0bWw+PGJvZHk+RnJhbWVz
ISIKLSAgICAgICAgIjxpZnJhbWU+PC9pZnJhbWU+IgotICAgICAgICAiPGlmcmFtZT48L2lmcmFt
ZT4iCi0gICAgICAgICI8L2JvZHk+PC9odG1sPiIsCi0gICAgICAgICJ0ZXh0L2h0bWwiLCAidXRm
LTgiLCAiZmlsZTovLyIpOwotICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLX0KLQotc3RhdGlj
IHZvaWQgdGVzdF93ZWJraXRfd2ViX2ZyYW1lX2NyZWF0ZV9kZXN0cm95KHZvaWQpCi17Ci0gICAg
R3RrV2lkZ2V0ICp3ZWJWaWV3OwotICAgIEd0a1dpZGdldCAqd2luZG93OwotCi0gICAgZ190ZXN0
X2J1ZygiMjE4MzciKTsKLSAgICB3ZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygpOwotICAg
IGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOwotICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVD
VCh3ZWJWaWV3KS0+cmVmX2NvdW50LCA9PSwgMSk7Ci0gICAgLy8gVGhpcyBjcmFzaGVkIHdpdGgg
dGhlIG9yaWdpbmFsIHZlcnNpb24KLSAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKLQotICAg
IGdfdGVzdF9idWcoIjI1MDQyIik7Ci0gICAgd2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJ
TkRPV19UT1BMRVZFTCk7Ci0gICAgd2ViVmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKLSAg
ICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHdlYlZpZXcpOwotICAg
IGd0a193aWRnZXRfc2hvdyh3aW5kb3cpOwotICAgIGd0a193aWRnZXRfc2hvdyh3ZWJWaWV3KTsK
LSAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kod2ViVmlldyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rf
d2Via2l0X3dlYl9mcmFtZV9saWZldGltZSh2b2lkKQotewotICAgIFdlYktpdFdlYlZpZXcqIHdl
YlZpZXc7Ci0gICAgV2ViS2l0V2ViRnJhbWUqIHdlYkZyYW1lOwotICAgIGdfdGVzdF9idWcoIjIx
ODM3Iik7Ci0KLSAgICB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19u
ZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7Ci0gICAgZ19hc3NlcnRfY21w
aW50KEdfT0JKRUNUKHdlYlZpZXcpLT5yZWZfY291bnQsID09LCAxKTsKLSAgICB3ZWJGcmFtZSA9
IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh3ZWJWaWV3KTsKLSAgICBnX2Fzc2VydF9j
bXBpbnQoR19PQkpFQ1Qod2ViRnJhbWUpLT5yZWZfY291bnQsID09LCAxKTsKLQotICAgIC8vIEFk
ZCBkdW1teSByZWZlcmVuY2Ugb24gdGhlIFdlYktpdFdlYkZyYW1lIHRvIGtlZXAgaXQgYWxpdmUK
LSAgICBnX29iamVjdF9yZWYod2ViRnJhbWUpOwotICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVD
VCh3ZWJGcmFtZSktPnJlZl9jb3VudCwgPT0sIDIpOwotCi0gICAgLy8gVGhpcyBjcmFzaGVkIHdp
dGggdGhlIG9yaWdpbmFsIHZlcnNpb24KLSAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKLQot
ICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBmcmFtZSBnb3QgZGVsZXRlZCBhcyB3ZWxsLiBXZSBk
aWQgdGhpcwotICAgIC8vIGJ5IGFkZGluZyBhbiBleHRyYSByZWYgb24gdGhlIFdlYktpdFdlYkZy
YW1lIGFuZCB3ZSBzaG91bGQKLSAgICAvLyBiZSB0aGUgb25lIGhvbGRpbmcgdGhlIGxhc3QgcmVm
ZXJlbmNlLgotICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVCh3ZWJGcmFtZSktPnJlZl9jb3Vu
dCwgPT0sIDEpOwotICAgIGdfb2JqZWN0X3VucmVmKHdlYkZyYW1lKTsKLX0KLQotc3RhdGljIGdi
b29sZWFuIHByaW50X3JlcXVlc3RlZF9jYihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRX
ZWJGcmFtZSogd2ViRnJhbWUsIEdNYWluTG9vcCogbG9vcCkKLXsKLSAgICBnX29iamVjdF9zZXRf
ZGF0YShHX09CSkVDVCh3ZWJWaWV3KSwgInNpZ25hbC1oYW5kbGVkIiwgR0lOVF9UT19QT0lOVEVS
KFRSVUUpKTsKLSAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwotICAgIHJldHVybiBUUlVFOwot
fQotCi1zdGF0aWMgdm9pZCBwcmludF90aW1lb3V0KEdNYWluTG9vcCogbG9vcCkKLXsKLSAgICBp
ZiAoZ19tYWluX2xvb3BfaXNfcnVubmluZyhsb29wKSkKLSAgICAgICAgZ19tYWluX2xvb3BfcXVp
dChsb29wKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX2ZyYW1lX3ByaW50aW5n
KHZvaWQpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldzsKLQotICAgIHdlYlZpZXcgPSBX
RUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBnX29iamVjdF9yZWZf
c2luayh3ZWJWaWV3KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1Qod2ViVmlldyktPnJl
Zl9jb3VudCwgPT0sIDEpOwotCi0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZp
ZXcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8aHRtbD48Ym9keT48aDE+V2Vi
S2l0R1RLKyE8L2gxPjwvYm9keT48L2h0bWw+IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgInRleHQvaHRtbCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1dGYt
OCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlOi8vIik7Ci0KLSAgICBH
TWFpbkxvb3AqIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7Ci0KLSAgICAvLyBE
b2VzIGphdmFzY3JpcHQgcHJpbnQoKSB3b3JrIGNvcnJlY3RseT8KLSAgICBnX3NpZ25hbF9jb25u
ZWN0KHdlYlZpZXcsICJwcmludC1yZXF1ZXN0ZWQiLAotICAgICAgICAgICAgICAgICAgICAgR19D
QUxMQkFDSyhwcmludF9yZXF1ZXN0ZWRfY2IpLAotICAgICAgICAgICAgICAgICAgICAgbG9vcCk7
Ci0KLSAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVCh3ZWJWaWV3KSwgInNpZ25hbC1oYW5k
bGVkIiwgR0lOVF9UT19QT0lOVEVSKEZBTFNFKSk7Ci0gICAgd2Via2l0X3dlYl92aWV3X2V4ZWN1
dGVfc2NyaXB0ICh3ZWJWaWV3LCAicHJpbnQoKTsiKTsKLQotICAgIC8vIEdpdmUgamF2YXNjcmlw
dGNvcmUgc29tZSB0aW1lIHRvIHByb2Nlc3MgdGhlIHByaW50IHJlcXVlc3QsIGJ1dAotICAgIC8v
IHByZXBhcmUgYSB0aW1lb3V0IHRvIGF2b2lkIGl0IHJ1bm5pbmcgZm9yZXZlciBpbiBjYXNlIHRo
ZSBzaWduYWwgaXMKLSAgICAvLyBuZXZlciBlbWl0dGVkLgotICAgIGdfdGltZW91dF9hZGQoMTAw
MCwgKEdTb3VyY2VGdW5jKXByaW50X3RpbWVvdXQsIGxvb3ApOwotICAgIGdfbWFpbl9sb29wX3J1
bihsb29wKTsKLQotICAgIGdfYXNzZXJ0X2NtcGludChHUE9JTlRFUl9UT19JTlQoZ19vYmplY3Rf
Z2V0X2RhdGEoR19PQkpFQ1Qod2ViVmlldyksICJzaWduYWwtaGFuZGxlZCIpKSwgPT0sIFRSVUUp
OwotCi0gICAgLy8gRG9lcyBwcmludGluZyBkaXJlY3RseSB0byBhIGZpbGU/Ci0gICAgR0Vycm9y
ICplcnJvciA9IE5VTEw7Ci0gICAgZ2NoYXIqIHRlbXBvcmFyeUZpbGVuYW1lID0gTlVMTDsKLSAg
ICBnaW50IGZkID0gZ19maWxlX29wZW5fdG1wICgid2Via2l0LXRlc3R3ZWJmcmFtZS1YWFhYWFgi
LCAmdGVtcG9yYXJ5RmlsZW5hbWUsICZlcnJvcik7Ci0gICAgY2xvc2UoZmQpOwotCi0gICAgaWYg
KGVycm9yKSB7Ci0gICAgICAgIGdfY3JpdGljYWwoIkZhaWxlZCB0byBvcGVuIGEgdGVtcG9yYXJ5
IGZpbGUgZm9yIHdyaXRpbmc6ICVzLiIsIGVycm9yLT5tZXNzYWdlKTsKLSAgICAgICAgZ19lcnJv
cl9mcmVlKGVycm9yKTsKLSAgICAgICAgZ290byBjbGVhbnVwOwotICAgIH0KLQotICAgIC8vIFdl
IGRlbGV0ZSB0aGUgZmlsZSwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGZpZ3VyZSBvdXQgdGhhdCB0
aGUKLSAgICAvLyBmaWxlIGdvdCBwcmludGVkOwotICAgIGlmIChnX3VubGluayh0ZW1wb3JhcnlG
aWxlbmFtZSkgPT0gLTEpIHsKLSAgICAgICAgZ193YXJuaW5nKCJGYWlsZWQgdG8gZGVsZXRlIHRo
ZSB0ZW1wb3JhcnkgZmlsZTogJXMuXG5UaGlzIG1heSBjYXVzZSB0aGUgdGVzdCB0byBiZSBib2d1
cy4iLCBnX3N0cmVycm9yKGVycm5vKSk7Ci0gICAgfQotCi0gICAgV2ViS2l0V2ViRnJhbWUqIHdl
YkZyYW1lID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKHdlYlZpZXcpOwotICAgIEd0
a1ByaW50T3BlcmF0aW9uKiBvcGVyYXRpb24gPSBndGtfcHJpbnRfb3BlcmF0aW9uX25ldygpOwot
ICAgIEd0a1ByaW50T3BlcmF0aW9uQWN0aW9uIGFjdGlvbiA9IEdUS19QUklOVF9PUEVSQVRJT05f
QUNUSU9OX0VYUE9SVDsKLSAgICBHdGtQcmludE9wZXJhdGlvblJlc3VsdCByZXN1bHQ7Ci0KLSAg
ICBndGtfcHJpbnRfb3BlcmF0aW9uX3NldF9leHBvcnRfZmlsZW5hbWUob3BlcmF0aW9uLCB0ZW1w
b3JhcnlGaWxlbmFtZSk7Ci0gICAgcmVzdWx0ID0gd2Via2l0X3dlYl9mcmFtZV9wcmludF9mdWxs
ICh3ZWJGcmFtZSwgb3BlcmF0aW9uLCBhY3Rpb24sIE5VTEwpOwotCi0gICAgZ19hc3NlcnRfY21w
aW50KHJlc3VsdCwgPT0sIEdUS19QUklOVF9PUEVSQVRJT05fUkVTVUxUX0FQUExZKTsKLSAgICBn
X2Fzc2VydF9jbXBpbnQoZ19maWxlX3Rlc3QodGVtcG9yYXJ5RmlsZW5hbWUsIEdfRklMRV9URVNU
X0lTX1JFR1VMQVIpLCA9PSwgVFJVRSk7Ci0KLSAgICBnX3VubGluayh0ZW1wb3JhcnlGaWxlbmFt
ZSk7Ci0gICAgZ19vYmplY3RfdW5yZWYob3BlcmF0aW9uKTsKLWNsZWFudXA6Ci0gICAgZ19vYmpl
Y3RfdW5yZWYod2ViVmlldyk7Ci0gICAgZ19mcmVlKHRlbXBvcmFyeUZpbGVuYW1lKTsKLX0KLQot
c3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX2ZyYW1lX3Jlc3BvbnNlKCkKLXsKLSAgICBXZWJL
aXRXZWJGcmFtZSogZnJhbWUgPSBnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCX0ZSQU1FLCBO
VUxMKTsKLSAgICBXZWJLaXROZXR3b3JrUmVzcG9uc2UqIHJlc3BvbnNlID0gd2Via2l0X3dlYl9m
cmFtZV9nZXRfbmV0d29ya19yZXNwb25zZShmcmFtZSk7Ci0gICAgZ19hc3NlcnQoIXJlc3BvbnNl
KTsKLSAgICBnX29iamVjdF91bnJlZihmcmFtZSk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBj
aGFyKiogYXJndikKLXsKLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0K
LSAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwotICAgIGdf
dGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJ2aWV3L2NyZWF0ZV9kZXN0cm95IiwgdGVzdF93ZWJr
aXRfd2ViX2ZyYW1lX2NyZWF0ZV9kZXN0cm95KTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJr
aXQvd2Vidmlldy9mcmFtZS1jcmVhdGVkX3NpZ25hbCIsIHRlc3Rfd2Via2l0X3dlYl9mcmFtZV9j
cmVhdGVkX3NpZ25hbCk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYmZyYW1lL2xp
ZmV0aW1lIiwgdGVzdF93ZWJraXRfd2ViX2ZyYW1lX2xpZmV0aW1lKTsKLSAgICBnX3Rlc3RfYWRk
X2Z1bmMoIi93ZWJraXQvd2Vidmlldy9wcmludGluZyIsIHRlc3Rfd2Via2l0X3dlYl9mcmFtZV9w
cmludGluZyk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnZpZXcvcmVzcG9uc2Ui
LCB0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfcmVzcG9uc2UpOwotICAgIHJldHVybiBnX3Rlc3RfcnVu
ICgpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYmhpc3Rv
cnlpdGVtLmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2ViaGlzdG9yeWl0ZW0uYwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJlMTkxYy4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2ViaGlzdG9yeWl0ZW0uYworKysgL2Rldi9udWxsCkBA
IC0xLDcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIE1pY2hhZWwgQWxv
bnpvCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z3Rr
L2d0ay5oPgotI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KLQotdHlwZWRlZiBzdHJ1Y3Qgewot
ICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBpdGVtOwotfSBXZWJIaXN0b3J5SXRlbUZpeHR1cmU7
Ci0KLXN0YXRpYyB2b2lkIHdlYl9oaXN0b3J5X2l0ZW1fZml4dHVyZV9zZXR1cChXZWJIaXN0b3J5
SXRlbUZpeHR1cmUqIGZpeHR1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGZpeHR1cmUtPml0ZW0gPSB3ZWJr
aXRfd2ViX2hpc3RvcnlfaXRlbV9uZXdfd2l0aF9kYXRhKCJodHRwOi8vZXhhbXBsZS5jb20vIiwg
IkV4YW1wbGUxIik7Ci0gICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKGZpeHR1cmUtPml0ZW0p
LT5yZWZfY291bnQsID09ICwgMSk7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+aXRlbSAhPSBOVUxM
KTsKLX0KLQotc3RhdGljIHZvaWQgd2ViX2hpc3RvcnlfaXRlbV9maXh0dXJlX3RlYXJkb3duKFdl
Ykhpc3RvcnlJdGVtRml4dHVyZSogZml4dHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19hc3NlcnQo
Zml4dHVyZS0+aXRlbSAhPSBOVUxMKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoZml4
dHVyZS0+aXRlbSktPnJlZl9jb3VudCwgPT0sIDEpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dl
YmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF9kYXRhKFdlYkhpc3RvcnlJdGVtRml4dHVyZSogZml4
dHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hp
c3RvcnlfaXRlbV9nZXRfdGl0bGUoZml4dHVyZS0+aXRlbSksID09LCAiRXhhbXBsZTEiKTsKLSAg
ICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3VyaShmaXh0dXJl
LT5pdGVtKSwgPT0sICJodHRwOi8vZXhhbXBsZS5jb20vIik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRl
c3Rfd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fYWx0ZXJuYXRlX3RpdGxlKFdlYkhpc3RvcnlJdGVt
Rml4dHVyZSogZml4dHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICB3ZWJraXRfd2Vi
X2hpc3RvcnlfaXRlbV9zZXRfYWx0ZXJuYXRlX3RpdGxlKGZpeHR1cmUtPml0ZW0sICJBbHRlcm5h
dGUgdGl0bGUiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1f
Z2V0X2FsdGVybmF0ZV90aXRsZShmaXh0dXJlLT5pdGVtKSwgPT0sICJBbHRlcm5hdGUgdGl0bGUi
KTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotewotICAgIGd0a190ZXN0
X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLQotICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC93ZWJoaXN0b3J5
aXRlbS9nZXRfZGF0YSIsCi0gICAgICAgICAgICAgICBXZWJIaXN0b3J5SXRlbUZpeHR1cmUsIDAs
IHdlYl9oaXN0b3J5X2l0ZW1fZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3Rfd2Vi
a2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X2RhdGEsIHdlYl9oaXN0b3J5X2l0ZW1fZml4dHVyZV90
ZWFyZG93bik7Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC93ZWJoaXN0b3J5aXRlbS9hbHRlcm5h
dGVfdGl0bGUiLAotICAgICAgICAgICAgICAgV2ViSGlzdG9yeUl0ZW1GaXh0dXJlLCAwLCB3ZWJf
aGlzdG9yeV9pdGVtX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF93
ZWJfaGlzdG9yeV9pdGVtX2FsdGVybmF0ZV90aXRsZSwgd2ViX2hpc3RvcnlfaXRlbV9maXh0dXJl
X3RlYXJkb3duKTsKLSAgICByZXR1cm4gZ190ZXN0X3J1biAoKTsKLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJpbnNwZWN0b3IuYyBiL1NvdXJjZS9XZWJLaXQv
Z3RrL3Rlc3RzL3Rlc3R3ZWJpbnNwZWN0b3IuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYTc0MzgyZi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2Vi
aW5zcGVjdG9yLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzMgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMiBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9tZS5vcmc+Ci0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJ0ZXN0X3V0aWxzLmgiCi0KLSNpbmNsdWRlIDxzdHJp
bmcuaD4KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUg
PHdlYmtpdC93ZWJraXQuaD4KLQotR01haW5Mb29wICpsb29wOwotR3RrV2lkZ2V0ICp3aW5kb3c7
Ci0KLXN0YXRpYyBnYm9vbGVhbiBxdWl0TG9vcChncG9pbnRlciBkYXRhKQotewotICAgIGdfbWFp
bl9sb29wX3F1aXQobG9vcCk7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qIElnbm9yZSBzaW1w
bGUgdHJhbnNsYXRpb24tcmVsYXRlZCBtZXNzYWdlcyBhbmQgdXBncmFkZSBvdGhlcgotICogbWVz
c2FnZXMgdG8gd2FybmluZ3MuCi0gKi8KLXN0YXRpYyBnYm9vbGVhbiBjb25zb2xlTWVzc2FnZUNh
bGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIHVuc2ln
bmVkIGludCBsaW5lLCBjb25zdCBjaGFyKiBzb3VyY2VJZCkKLXsKLSAgICBpZiAoc3Ryc3RyKG1l
c3NhZ2UsICJMb2NhbGl6ZWQgc3RyaW5nIikgfHwgc3Ryc3RyKG1lc3NhZ2UsICJQcm90b2NvbCBF
cnJvcjogdGhlIG1lc3NhZ2UgaXMgZm9yIG5vbi1leGlzdGluZyBkb21haW4gJ1Byb2ZpbGVyJyIp
IHx8Ci0gICAgICAgIHN0cnN0cihtZXNzYWdlLCAiRGlkbid0IGZpbmQgYSBUcmVlRWxlbWVudCBm
b3IgYSByZXByZXNlbnRlZE9iamVjdCIpKQotICAgICAgICByZXR1cm4gVFJVRTsKLQotICAgIGdf
d2FybmluZygiQ29uc29sZTogJXMgQCVkOiAlc1xuIiwgc291cmNlSWQsIGxpbmUsIG1lc3NhZ2Up
OwotICAgIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgV2ViS2l0V2ViVmlldyogaW5zcGVjdEVs
ZW1lbnRDYWxsYmFjayhXZWJLaXRXZWJJbnNwZWN0b3IgKmluc3BlY3RvciwgV2ViS2l0V2ViVmll
dyAqaW5zcGVjdGVkV2ViVmlldywgaW50ICp0aW1lc0VsZW1lbnRJbnNwZWN0ZWQpCi17Ci0gICAg
KnRpbWVzRWxlbWVudEluc3BlY3RlZCA9ICp0aW1lc0VsZW1lbnRJbnNwZWN0ZWQgKyAxOwotCi0g
ICAgd2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7Ci0KLSAgICBH
dGtXaWRnZXQgKm5ld1dlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7Ci0gICAgZ3RrX2Nv
bnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCBuZXdXZWJWaWV3KTsKLQotICAgIGdf
c2lnbmFsX2Nvbm5lY3QobmV3V2ViVmlldywgImNvbnNvbGUtbWVzc2FnZSIsCi0gICAgICAgICAg
ICAgICAgICAgICBHX0NBTExCQUNLKGNvbnNvbGVNZXNzYWdlQ2FsbGJhY2spLCBOVUxMKTsKLQot
ICAgIHJldHVybiBXRUJLSVRfV0VCX1ZJRVcobmV3V2ViVmlldyk7Ci19Ci0KLXN0YXRpYyBnYm9v
bGVhbiBjbG9zZUluc3BlY3RvcihXZWJLaXRXZWJJbnNwZWN0b3IgKmluc3BlY3RvciwgaW50ICp0
aW1lc0Nsb3NlZCkKLXsKLSAgICAqdGltZXNDbG9zZWQgPSAqdGltZXNDbG9zZWQgKyAxOwotCi0g
ICAgZ3RrX3dpZGdldF9kZXN0cm95KHdpbmRvdyk7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0
YXRpYyBnYm9vbGVhbiBzaG93SW5zcGVjdG9yKFdlYktpdFdlYkluc3BlY3RvciAqaW5zcGVjdG9y
LCBncG9pbnRlciBkYXRhKQotewotICAgIGdfaWRsZV9hZGQocXVpdExvb3AsIE5VTEwpOwotICAg
IHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZCBsb2FkRmluaXNoZWQoV2ViS2l0V2ViVmll
dyAqd2ViVmlldywgV2ViS2l0V2ViRnJhbWUgKmZyYW1lLCBnYm9vbGVhbiAqaXNMb2FkRmluaXNo
ZWQpCi17Ci0gICAgKmlzTG9hZEZpbmlzaGVkID0gVFJVRTsKLSAgICBpZiAoZ19tYWluX2xvb3Bf
aXNfcnVubmluZyhsb29wKSkKLSAgICAgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKLX0KLQot
c3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX2luc3BlY3Rvcl9jbG9zZV9hbmRfaW5zcGVjdCgp
Ci17Ci0gICAgV2ViS2l0V2ViVmlldyAqd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRf
d2ViX3ZpZXdfbmV3KCkpOwotICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7
Ci0KLSAgICBnYm9vbGVhbiBpc0xvYWRGaW5pc2hlZCA9IEZBTFNFOwotICAgIGdfc2lnbmFsX2Nv
bm5lY3Qod2ViVmlldywgImxvYWQtZmluaXNoZWQiLCBHX0NBTExCQUNLKGxvYWRGaW5pc2hlZCks
ICZpc0xvYWRGaW5pc2hlZCk7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZp
ZXcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8aHRtbD48Ym9keT48cD53b29o
b288L3A+PC9ib2R5PjwvaHRtbD4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
dGV4dC9odG1sIiwgIlVURi04IiwgImZpbGU6Ly8iKTsKLSAgICBpZiAoIWlzTG9hZEZpbmlzaGVk
KQotICAgICAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICBnX29iamVjdF9zZXQod2Vi
a2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3KSwgImVuYWJsZS1kZXZlbG9wZXItZXh0
cmFzIiwgVFJVRSwgTlVMTCk7Ci0gICAgV2ViS2l0V2ViSW5zcGVjdG9yICppbnNwZWN0b3IgPSB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X2luc3BlY3Rvcih3ZWJWaWV3KTsKLQotICAgIGludCB0aW1lc0Vs
ZW1lbnRJbnNwZWN0ZWQgPSAwOwotICAgIGludCB0aW1lc0Nsb3NlZCA9IDA7Ci0gICAgZ19vYmpl
Y3RfY29ubmVjdChpbnNwZWN0b3IsCi0gICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjppbnNw
ZWN0LXdlYi12aWV3IiwgR19DQUxMQkFDSyhpbnNwZWN0RWxlbWVudENhbGxiYWNrKSwgJnRpbWVz
RWxlbWVudEluc3BlY3RlZCwKLSAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6OnNob3ctd2lu
ZG93IiwgR19DQUxMQkFDSyhzaG93SW5zcGVjdG9yKSwgTlVMTCwKLSAgICAgICAgICAgICAgICAg
ICAgICJzaWduYWw6OmNsb3NlLXdpbmRvdyIsIEdfQ0FMTEJBQ0soY2xvc2VJbnNwZWN0b3IpLCAm
dGltZXNDbG9zZWQsCi0gICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLQotICAgIHdlYmtpdF93
ZWJfaW5zcGVjdG9yX2luc3BlY3RfY29vcmRpbmF0ZXMoaW5zcGVjdG9yLCAwLjAsIDAuMCk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KHRpbWVzRWxlbWVudEluc3BlY3RlZCwgPT0sIDEpOwotCi0gICAg
Z19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAgd2Via2l0X3dlYl9pbnNwZWN0b3JfY2xvc2Uo
aW5zcGVjdG9yKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGltZXNDbG9zZWQsID09LCAxKTsKLQot
ICAgIHdlYmtpdF93ZWJfaW5zcGVjdG9yX2luc3BlY3RfY29vcmRpbmF0ZXMoaW5zcGVjdG9yLCAw
LjAsIDAuMCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHRpbWVzRWxlbWVudEluc3BlY3RlZCwgPT0s
IDIpOwotCi0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAgZ3RrX3dpZGdldF9kZXN0
cm95KEdUS19XSURHRVQod2ViVmlldykpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0aW1lc0Nsb3Nl
ZCwgPT0sIDIpOwotCi0gICAgZ19tYWluX2xvb3BfdW5yZWYobG9vcCk7Ci19Ci0KLXN0YXRpYyB2
b2lkIHRlc3Rfd2Via2l0X3dlYl9pbnNwZWN0b3JfZGVzdHJveV9pbnNwZWN0ZWRfd2ViX3ZpZXco
KQotewotICAgIFdlYktpdFdlYlZpZXcgKndlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0
X3dlYl92aWV3X25ldygpKTsKLSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUp
OwotCi0gICAgZ2Jvb2xlYW4gaXNMb2FkRmluaXNoZWQgPSBGQUxTRTsKLSAgICBnX3NpZ25hbF9j
b25uZWN0KHdlYlZpZXcsICJsb2FkLWZpbmlzaGVkIiwgR19DQUxMQkFDSyhsb2FkRmluaXNoZWQp
LCAmaXNMb2FkRmluaXNoZWQpOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJW
aWV3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGh0bWw+PGJvZHk+PHA+d29v
aG9vPC9wPjwvYm9keT48L2h0bWw+IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
InRleHQvaHRtbCIsICJVVEYtOCIsICJmaWxlOi8vIik7Ci0gICAgaWYgKCFpc0xvYWRGaW5pc2hl
ZCkKLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAgZ19vYmplY3Rfc2V0KHdl
YmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmlldyksICJlbmFibGUtZGV2ZWxvcGVyLWV4
dHJhcyIsIFRSVUUsIE5VTEwpOwotICAgIFdlYktpdFdlYkluc3BlY3RvciAqaW5zcGVjdG9yID0g
d2Via2l0X3dlYl92aWV3X2dldF9pbnNwZWN0b3Iod2ViVmlldyk7Ci0KLSAgICBpbnQgdGltZXNF
bGVtZW50SW5zcGVjdGVkID0gMDsKLSAgICBpbnQgdGltZXNDbG9zZWQgPSAwOwotICAgIGdfb2Jq
ZWN0X2Nvbm5lY3QoaW5zcGVjdG9yLAotICAgICAgICAgICAgICAgICAgICAgInNpZ25hbDo6aW5z
cGVjdC13ZWItdmlldyIsIEdfQ0FMTEJBQ0soaW5zcGVjdEVsZW1lbnRDYWxsYmFjayksICZ0aW1l
c0VsZW1lbnRJbnNwZWN0ZWQsCi0gICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjpzaG93LXdp
bmRvdyIsIEdfQ0FMTEJBQ0soc2hvd0luc3BlY3RvciksIE5VTEwsCi0gICAgICAgICAgICAgICAg
ICAgICAic2lnbmFsOjpjbG9zZS13aW5kb3ciLCBHX0NBTExCQUNLKGNsb3NlSW5zcGVjdG9yKSwg
JnRpbWVzQ2xvc2VkLAotICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0KLSAgICB3ZWJraXRf
d2ViX2luc3BlY3Rvcl9pbnNwZWN0X2Nvb3JkaW5hdGVzKGluc3BlY3RvciwgMC4wLCAwLjApOwot
ICAgIGdfYXNzZXJ0X2NtcGludCh0aW1lc0VsZW1lbnRJbnNwZWN0ZWQsID09LCAxKTsKLQotICAg
IGdfbWFpbl9sb29wX3J1bihsb29wKTsKLQotICAgIGd0a193aWRnZXRfZGVzdHJveShHVEtfV0lE
R0VUKHdlYlZpZXcpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGltZXNDbG9zZWQsID09LCAxKTsK
LQotICAgIGdfbWFpbl9sb29wX3VucmVmKGxvb3ApOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywg
Y2hhcioqIGFyZ3YpCi17Ci0gICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOwot
Ci0gICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKLSAgICBn
X3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2ViaW5zcGVjdG9yL2Rlc3Ryb3ktaW5zcGVjdGVkLXdl
Yi12aWV3IiwgdGVzdF93ZWJraXRfd2ViX2luc3BlY3Rvcl9kZXN0cm95X2luc3BlY3RlZF93ZWJf
dmlldyk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYmluc3BlY3Rvci9jbG9zZS1h
bmQtaW5zcGVjdCIsIHRlc3Rfd2Via2l0X3dlYl9pbnNwZWN0b3JfY2xvc2VfYW5kX2luc3BlY3Qp
OwotCi0gICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJwbHVnaW5kYXRhYmFzZS5jIGIvU291cmNlL1dlYktpdC9ndGsv
dGVzdHMvdGVzdHdlYnBsdWdpbmRhdGFiYXNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDY1MjgxMWIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdl
YnBsdWdpbmRhdGFiYXNlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxnbGliL2dzdGRpby5o
PgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+Ci0KLS8q
IFRoaXMgZnVuY3Rpb24gaXMgbm90IHB1YmxpYywgc28gd2UgbmVlZCBhbiBleHRlcm4gZGVjbGFy
YXRpb24gKi8KLWV4dGVybiB2b2lkIHdlYmtpdF93ZWJfc2V0dGluZ3NfYWRkX2V4dHJhX3BsdWdp
bl9kaXJlY3RvcnkoV2ViS2l0V2ViVmlldyogdmlldywgY29uc3QgZ2NoYXIqIGRpcmVjdG9yeSk7
Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9wbHVnaW5fZGF0YWJhc2VfZ2V0X3BsdWdp
bnMoKQotewotICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0
X3dlYl92aWV3X25ldygpKTsKLSAgICBXZWJLaXRXZWJQbHVnaW5EYXRhYmFzZSogZGF0YWJhc2U7
Ci0gICAgR1NMaXN0KiBwbHVnaW5MaXN0LCAqcDsKLSAgICBnYm9vbGVhbiBmb3VuZCA9IEZBTFNF
OwotICAgIGdib29sZWFuIGVuYWJsZWQgPSBGQUxTRTsKLQotICAgIHdlYmtpdF93ZWJfc2V0dGlu
Z3NfYWRkX2V4dHJhX3BsdWdpbl9kaXJlY3RvcnkodmlldywgVEVTVF9QTFVHSU5fRElSKTsKLSAg
ICBnX29iamVjdF9yZWZfc2luayhHX09CSkVDVCh2aWV3KSk7Ci0KLSAgICBkYXRhYmFzZSA9IHdl
YmtpdF9nZXRfd2ViX3BsdWdpbl9kYXRhYmFzZSgpOwotICAgIHBsdWdpbkxpc3QgPSB3ZWJraXRf
d2ViX3BsdWdpbl9kYXRhYmFzZV9nZXRfcGx1Z2lucyhkYXRhYmFzZSk7Ci0gICAgZm9yIChwID0g
cGx1Z2luTGlzdDsgcDsgcCA9IHAtPm5leHQpIHsKLSAgICAgICAgV2ViS2l0V2ViUGx1Z2luKiBw
bHVnaW4gPSAoV2ViS2l0V2ViUGx1Z2luKilwLT5kYXRhOwotICAgICAgICBpZiAoIWdfc3RyY21w
MCh3ZWJraXRfd2ViX3BsdWdpbl9nZXRfbmFtZShwbHVnaW4pLCAiV2ViS2l0IFRlc3QgUGx1Z0lu
IikgJiYKLSAgICAgICAgICAgICFnX3N0cmNtcDAod2Via2l0X3dlYl9wbHVnaW5fZ2V0X2Rlc2Ny
aXB0aW9uKHBsdWdpbiksICJTaW1wbGUgTmV0c2NhcGXCriBwbHVnLWluIHRoYXQgaGFuZGxlcyB0
ZXN0IGNvbnRlbnQgZm9yIFdlYktpdCIpKSB7Ci0gICAgICAgICAgICBmb3VuZCA9IFRSVUU7Ci0g
ICAgICAgICAgICBlbmFibGVkID0gd2Via2l0X3dlYl9wbHVnaW5fZ2V0X2VuYWJsZWQocGx1Z2lu
KTsKLSAgICAgICAgICAgIHdlYmtpdF93ZWJfcGx1Z2luX3NldF9lbmFibGVkKHBsdWdpbiwgRkFM
U0UpOwotICAgICAgICB9Ci0gICAgfQotICAgIHdlYmtpdF93ZWJfcGx1Z2luX2RhdGFiYXNlX3Bs
dWdpbnNfbGlzdF9mcmVlKHBsdWdpbkxpc3QpOwotICAgIGdfYXNzZXJ0KGZvdW5kKTsKLSAgICBn
X2Fzc2VydChlbmFibGVkKTsKLQotICAgIHdlYmtpdF93ZWJfcGx1Z2luX2RhdGFiYXNlX3JlZnJl
c2goZGF0YWJhc2UpOwotICAgIHBsdWdpbkxpc3QgPSB3ZWJraXRfd2ViX3BsdWdpbl9kYXRhYmFz
ZV9nZXRfcGx1Z2lucyhkYXRhYmFzZSk7Ci0KLSAgICBmb3IgKHAgPSBwbHVnaW5MaXN0OyBwOyBw
ID0gcC0+bmV4dCkgewotICAgICAgICBXZWJLaXRXZWJQbHVnaW4qIHBsdWdpbiA9IChXZWJLaXRX
ZWJQbHVnaW4qKXAtPmRhdGE7Ci0gICAgICAgIGlmICghZ19zdHJjbXAwKHdlYmtpdF93ZWJfcGx1
Z2luX2dldF9uYW1lKHBsdWdpbiksICJXZWJLaXQgVGVzdCBQbHVnSW4iKSAmJgotICAgICAgICAg
ICAgIWdfc3RyY21wMCh3ZWJraXRfd2ViX3BsdWdpbl9nZXRfZGVzY3JpcHRpb24ocGx1Z2luKSwg
IlNpbXBsZSBOZXRzY2FwZcKuIHBsdWctaW4gdGhhdCBoYW5kbGVzIHRlc3QgY29udGVudCBmb3Ig
V2ViS2l0IikpCi0gICAgICAgICAgICBlbmFibGVkID0gd2Via2l0X3dlYl9wbHVnaW5fZ2V0X2Vu
YWJsZWQocGx1Z2luKTsKLSAgICB9Ci0gICAgd2Via2l0X3dlYl9wbHVnaW5fZGF0YWJhc2VfcGx1
Z2luc19saXN0X2ZyZWUocGx1Z2luTGlzdCk7Ci0gICAgZ19hc3NlcnQoIWVuYWJsZWQpOwotCi0g
ICAgZ19vYmplY3RfdW5yZWYodmlldyk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiog
YXJndikKLXsKLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAgICBn
X3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwotICAgIGdfdGVzdF9h
ZGRfZnVuYygiL3dlYmtpdC93ZWJwbHVnaW5kYXRhYmFzZS9nZXRwbHVnaW5zIiwgdGVzdF93ZWJr
aXRfd2ViX3BsdWdpbl9kYXRhYmFzZV9nZXRfcGx1Z2lucyk7Ci0gICAgcmV0dXJuIGdfdGVzdF9y
dW4gKCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2VicmVz
b3VyY2UuYyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJyZXNvdXJjZS5jCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzU4YjdhLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJyZXNvdXJjZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzMx
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIE1pY2hhZWwgQWxvbnpvCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5o
PgotI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1
ZGUgPHdlYmtpdC93ZWJraXQuaD4KLQotI2RlZmluZSBJTkRFWF9IVE1MICI8aHRtbD48L2h0bWw+
IgotI2RlZmluZSBNQUlOX0hUTUwgIjxodG1sPjxoZWFkPjxzY3JpcHQgbGFuZ3VhZ2U9XCJqYXZh
c2NyaXB0XCIgc3JjPVwiL2phdmFzY3JpcHQuanNcIj48L3NjcmlwdD48L2hlYWQ+PGJvZHk+PGgx
PmhhaDwvaDE+PC9odG1sPiIKLSNkZWZpbmUgSkFWQVNDUklQVCAiZnVuY3Rpb24gYmxhaCAoKSB7
IHZhciBhID0gMTsgfSIKLQotR01haW5Mb29wKiBsb29wOwotU291cFNlc3Npb24gKnNlc3Npb247
Ci1jaGFyICpiYXNlX3VyaTsKLVdlYktpdFdlYlJlc291cmNlKiBtYWluX3Jlc291cmNlOwotV2Vi
S2l0V2ViUmVzb3VyY2UqIHN1Yl9yZXNvdXJjZTsKLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIFdl
YktpdFdlYlJlc291cmNlKiB3ZWJSZXNvdXJjZTsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3
OwotfSBXZWJSZXNvdXJjZUZpeHR1cmU7Ci0KLS8qIEZvciByZWFsIHJlcXVlc3QgdGVzdGluZyAq
Lwotc3RhdGljIHZvaWQKLXNlcnZlcl9jYWxsYmFjayAoU291cFNlcnZlciAqc2VydmVyLCBTb3Vw
TWVzc2FnZSAqbXNnLAotICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoLCBHSGFzaFRh
YmxlICpxdWVyeSwKLSAgICAgICAgICAgICAgICAgU291cENsaWVudENvbnRleHQgKmNvbnRleHQs
IGdwb2ludGVyIGRhdGEpCi17Ci0gICAgaWYgKG1zZy0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dF
VCkgewotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyAobXNnLCBTT1VQX1NUQVRVU19O
T1RfSU1QTEVNRU5URUQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc291cF9tZXNz
YWdlX3NldF9zdGF0dXMgKG1zZywgU09VUF9TVEFUVVNfT0spOwotCi0gICAgLyogUmVkaXJlY3Qg
Ki8KLSAgICBpZiAoZ19zdHJfZXF1YWwgKHBhdGgsICIvIikpIHsKLSAgICAgICAgc291cF9tZXNz
YWdlX3NldF9zdGF0dXMgKG1zZywgU09VUF9TVEFUVVNfTU9WRURfUEVSTUFORU5UTFkpOwotCi0g
ICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZCAobXNnLT5yZXNwb25zZV9oZWFkZXJz
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMb2NhdGlvbiIsICIvaW5k
ZXguaHRtbCIpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwgKHBhdGgsICIvaW5kZXguaHRt
bCIpKSB7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZCAobXNnLT5yZXNwb25zZV9i
b2R5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPVVBfTUVNT1JZX0NPUFks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5ERVhfSFRNTCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4gKElOREVYX0hUTUwpKTsKLSAgICB9IGVs
c2UgaWYgKGdfc3RyX2VxdWFsIChwYXRoLCAiL21haW4uaHRtbCIpKSB7Ci0gICAgICAgIHNvdXBf
bWVzc2FnZV9ib2R5X2FwcGVuZCAobXNnLT5yZXNwb25zZV9ib2R5LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNPVVBfTUVNT1JZX0NPUFksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTUFJTl9IVE1MLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0cmxlbiAoTUFJTl9IVE1MKSk7Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbCAocGF0
aCwgIi9qYXZhc2NyaXB0LmpzIikpIHsKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5k
IChtc2ctPnJlc3BvbnNlX2JvZHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U09VUF9NRU1PUllfQ09QWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQVZB
U0NSSVBULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiAoSkFWQVND
UklQVCkpOwotICAgIH0KLQotCi0gICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUgKG1zZy0+
cmVzcG9uc2VfYm9keSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYl9yZXNvdXJjZV9maXh0dXJlX3Nl
dHVwKFdlYlJlc291cmNlRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewot
ICAgIGZpeHR1cmUtPndlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25l
dygpKTsKLSAgICBnX29iamVjdF9yZWZfc2luayhmaXh0dXJlLT53ZWJWaWV3KTsKLSAgICBjb25z
dCBnY2hhciogd2ViRGF0YSA9ICI8aHRtbD48L2h0bWw+IjsKLSAgICBmaXh0dXJlLT53ZWJSZXNv
dXJjZSA9IHdlYmtpdF93ZWJfcmVzb3VyY2VfbmV3KHdlYkRhdGEsIHN0cmxlbih3ZWJEYXRhKSwg
Imh0dHA6Ly9leGFtcGxlLmNvbS8iLCAidGV4dC9odG1sIiwgInV0ZjgiLCAiRXhhbXBsZS5jb20i
KTsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT53ZWJSZXNvdXJjZSk7Ci19Ci0KLXN0YXRpYyB2b2lk
IHdlYl9yZXNvdXJjZV9maXh0dXJlX3RlYXJkb3duKFdlYlJlc291cmNlRml4dHVyZSogZml4dHVy
ZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPndlYlJlc291
cmNlKTsKLSAgICBnX29iamVjdF91bnJlZihmaXh0dXJlLT53ZWJSZXNvdXJjZSk7Ci0gICAgZ19v
YmplY3RfdW5yZWYoZml4dHVyZS0+d2ViVmlldyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Vi
a2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJsKFdlYlJlc291cmNlRml4dHVyZSogZml4dHVyZSwgZ2Nv
bnN0cG9pbnRlciBkYXRhKQotewotICAgIGdjaGFyKiB1cmw7Ci0gICAgZ19vYmplY3RfZ2V0KEdf
T0JKRUNUKGZpeHR1cmUtPndlYlJlc291cmNlKSwgInVyaSIsICZ1cmwsIE5VTEwpOwotICAgIGdf
YXNzZXJ0X2NtcHN0cih1cmwsID09LCAiaHR0cDovL2V4YW1wbGUuY29tLyIpOwotICAgIGdfYXNz
ZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3Jlc291cmNlX2dldF91cmkoZml4dHVyZS0+d2ViUmVzb3Vy
Y2UpICw9PSwiaHR0cDovL2V4YW1wbGUuY29tLyIpOwotICAgIGdfZnJlZSh1cmwpOwotfQotCi1z
dGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X2RhdGEoV2ViUmVzb3VyY2VG
aXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgR1N0cmluZyogY2hh
ckRhdGEgPSB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF9kYXRhKGZpeHR1cmUtPndlYlJlc291cmNl
KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoY2hhckRhdGEtPnN0ciwgPT0sICI8aHRtbD48L2h0bWw+
Iik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfbWltZV90
eXBlKFdlYlJlc291cmNlRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewot
ICAgIGdjaGFyKiBtaW1lX3R5cGU7Ci0gICAgZ19vYmplY3RfZ2V0KEdfT0JKRUNUKGZpeHR1cmUt
PndlYlJlc291cmNlKSwgIm1pbWUtdHlwZSIsICZtaW1lX3R5cGUsIE5VTEwpOwotICAgIGdfYXNz
ZXJ0X2NtcHN0cihtaW1lX3R5cGUsID09LCAidGV4dC9odG1sIik7Ci0gICAgZ19hc3NlcnRfY21w
c3RyKHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X21pbWVfdHlwZShmaXh0dXJlLT53ZWJSZXNvdXJj
ZSksPT0sInRleHQvaHRtbCIpOwotICAgIGdfZnJlZShtaW1lX3R5cGUpOwotfQotCi1zdGF0aWMg
dm9pZCB0ZXN0X3dlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X2VuY29kaW5nKFdlYlJlc291cmNlRml4
dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGdjaGFyKiB0ZXh0X2Vu
Y29kaW5nOwotICAgIGdfb2JqZWN0X2dldChHX09CSkVDVChmaXh0dXJlLT53ZWJSZXNvdXJjZSks
ICJlbmNvZGluZyIsICZ0ZXh0X2VuY29kaW5nLCBOVUxMKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIo
dGV4dF9lbmNvZGluZywgPT0sICJ1dGY4Iik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93
ZWJfcmVzb3VyY2VfZ2V0X2VuY29kaW5nKGZpeHR1cmUtPndlYlJlc291cmNlKSw9PSwidXRmOCIp
OwotICAgIGdfZnJlZSh0ZXh0X2VuY29kaW5nKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJr
aXRfd2ViX3Jlc291cmNlX2dldF9mcmFtZV9uYW1lKFdlYlJlc291cmNlRml4dHVyZSogZml4dHVy
ZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGdjaGFyKiBmcmFtZV9uYW1lOwotICAgIGdf
b2JqZWN0X2dldChHX09CSkVDVChmaXh0dXJlLT53ZWJSZXNvdXJjZSksICJmcmFtZS1uYW1lIiwg
JmZyYW1lX25hbWUsIE5VTEwpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihmcmFtZV9uYW1lLCA9PSwg
IkV4YW1wbGUuY29tIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfcmVzb3VyY2Vf
Z2V0X2ZyYW1lX25hbWUoZml4dHVyZS0+d2ViUmVzb3VyY2UpLD09LCJFeGFtcGxlLmNvbSIpOwot
ICAgIGdfZnJlZShmcmFtZV9uYW1lKTsKLX0KLQotc3RhdGljIHZvaWQgcmVzb3VyY2VfcmVxdWVz
dF9zdGFydGluZ19jYihXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgV2ViS2l0V2ViRnJhbWUqIHdl
Yl9mcmFtZSwgV2ViS2l0V2ViUmVzb3VyY2UqIHdlYl9yZXNvdXJjZSwgV2ViS2l0TmV0d29ya1Jl
cXVlc3QqIHJlcXVlc3QsIFdlYktpdE5ldHdvcmtSZXNwb25zZSogcmVzcG9uc2UsIGdwb2ludGVy
IGRhdGEpCi17Ci0gICAgZ2ludCogYmVlbl90aGVyZSA9IGRhdGE7Ci0gICAgKmJlZW5fdGhlcmUg
PSAqYmVlbl90aGVyZSArIDE7Ci0KLSAgICBpZiAoKmJlZW5fdGhlcmUgPT0gMSkgewotICAgICAg
ICBnX2Fzc2VydCghbWFpbl9yZXNvdXJjZSk7Ci0gICAgICAgIG1haW5fcmVzb3VyY2UgPSBnX29i
amVjdF9yZWYod2ViX3Jlc291cmNlKTsKLQotICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0
X3dlYl9yZXNvdXJjZV9nZXRfdXJpKHdlYl9yZXNvdXJjZSksID09LCBiYXNlX3VyaSk7Ci0KLSAg
ICAgICAgLyogVGhpcyBzaG91bGQgYmUgYSByZWRpcmVjdCwgc28gdGhlIHJlc3BvbnNlIG11c3Qg
YmUgTlVMTCAqLwotICAgICAgICBnX2Fzc2VydCghcmVzcG9uc2UpOwotICAgIH0gZWxzZSBpZiAo
KmJlZW5fdGhlcmUgPT0gMikgewotICAgICAgICBjaGFyKiB1cmkgPSBnX3N0cmR1cF9wcmludGYo
IiVzaW5kZXguaHRtbCIsIGJhc2VfdXJpKTsKLQotICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Vi
a2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJpKHdlYl9yZXNvdXJjZSksID09LCB1cmkpOwotCi0gICAg
ICAgIC8qIENhbmNlbCB0aGUgcmVxdWVzdC4gKi8KLSAgICAgICAgd2Via2l0X25ldHdvcmtfcmVx
dWVzdF9zZXRfdXJpKHJlcXVlc3QsICJhYm91dDpibGFuayIpOwotCi0gICAgICAgIGdfZnJlZSh1
cmkpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgbm90aWZ5X2xvYWRfc3RhdHVzX2NiKFdlYktp
dFdlYlZpZXcqIHdlYl92aWV3LCBHUGFyYW1TcGVjKiBwc3BlYywgZ3BvaW50ZXIgZGF0YSkKLXsK
LSAgICBpZiAod2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJfdmlldykgPT0gV0VC
S0lUX0xPQURfRklOSVNIRUQpIHsKLSAgICAgICAgZ2Jvb2xlYW4qIGJlZW5fdGhlcmUgPSBkYXRh
OwotICAgICAgICAqYmVlbl90aGVyZSA9IFRSVUU7Ci0KLSAgICAgICAgZ19hc3NlcnRfY21wc3Ry
KHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKHdlYl92aWV3KSwgPT0sICJhYm91dDpibGFuayIpOwot
Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9p
ZCB0ZXN0X3dlYl9yZXNvdXJjZV9sb2FkaW5nKCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJf
dmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdpbnQg
YmVlbl90b19yZXNvdXJjZV9yZXF1ZXN0X3N0YXJ0aW5nID0gMDsKLSAgICBnYm9vbGVhbiBiZWVu
X3RvX2xvYWRfZmluaXNoZWQgPSBGQUxTRTsKLSAgICBXZWJLaXRXZWJGcmFtZSogd2ViX2ZyYW1l
OwotICAgIFdlYktpdFdlYkRhdGFTb3VyY2UqIGRhdGFfc291cmNlOwotCi0gICAgbG9vcCA9IGdf
bWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLQotICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYl92
aWV3KTsKLQotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViX3ZpZXcsICJyZXNvdXJjZS1yZXF1ZXN0
LXN0YXJ0aW5nIiwKLSAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0socmVzb3VyY2VfcmVx
dWVzdF9zdGFydGluZ19jYiksCi0gICAgICAgICAgICAgICAgICAgICAmYmVlbl90b19yZXNvdXJj
ZV9yZXF1ZXN0X3N0YXJ0aW5nKTsKLQotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViX3ZpZXcsICJu
b3RpZnk6OmxvYWQtc3RhdHVzIiwKLSAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sobm90
aWZ5X2xvYWRfc3RhdHVzX2NiKSwKLSAgICAgICAgICAgICAgICAgICAgICZiZWVuX3RvX2xvYWRf
ZmluaXNoZWQpOwotCi0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHdlYl92aWV3LCBiYXNl
X3VyaSk7Ci0KLSAgICAvKiBXZSB3b24ndCBnZXQgZmluaXNoZWQgaW1tZWRpYXRlbHksIGJlY2F1
c2Ugb2YgdGhlIHJlZGlyZWN0ICovCi0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotICAgIAot
ICAgIHdlYl9mcmFtZSA9IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh3ZWJfdmlldyk7
Ci0gICAgZGF0YV9zb3VyY2UgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9kYXRhX3NvdXJjZSh3ZWJf
ZnJhbWUpOwotCi0gICAgZ19hc3NlcnQobWFpbl9yZXNvdXJjZSk7Ci0gICAgZ19hc3NlcnQod2Vi
a2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfbWFpbl9yZXNvdXJjZShkYXRhX3NvdXJjZSkgPT0gbWFp
bl9yZXNvdXJjZSk7Ci0gICAgZ19vYmplY3RfdW5yZWYobWFpbl9yZXNvdXJjZSk7Ci0gICAgCi0g
ICAgZ19hc3NlcnRfY21waW50KGJlZW5fdG9fcmVzb3VyY2VfcmVxdWVzdF9zdGFydGluZywgPT0s
IDIpOwotICAgIGdfYXNzZXJ0X2NtcGludChiZWVuX3RvX2xvYWRfZmluaXNoZWQsID09LCBUUlVF
KTsKLQotICAgIGdfb2JqZWN0X3VucmVmKHdlYl92aWV3KTsKLSAgICBnX21haW5fbG9vcF91bnJl
Zihsb29wKTsKLX0KLQotc3RhdGljIHZvaWQgcmVzb3VyY2VfcmVxdWVzdF9zdGFydGluZ19zdWJf
Y2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIFdlYktpdFdlYkZyYW1lKiB3ZWJfZnJhbWUsIFdl
YktpdFdlYlJlc291cmNlKiB3ZWJfcmVzb3VyY2UsIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1
ZXN0LCBXZWJLaXROZXR3b3JrUmVzcG9uc2UqIHJlc3BvbnNlLCBncG9pbnRlciBkYXRhKQotewot
ICAgIGlmICghbWFpbl9yZXNvdXJjZSkKLSAgICAgICAgbWFpbl9yZXNvdXJjZSA9IGdfb2JqZWN0
X3JlZih3ZWJfcmVzb3VyY2UpOwotICAgIGVsc2UgaWYgKCFzdWJfcmVzb3VyY2UpCi0gICAgICBz
dWJfcmVzb3VyY2UgPSBnX29iamVjdF9yZWYod2ViX3Jlc291cmNlKTsKLX0KLQotc3RhdGljIHZv
aWQgbm90aWZ5X2xvYWRfc3RhdHVzX3N1Yl9jYihXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgR1Bh
cmFtU3BlYyogcHNwZWMsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgaWYgKHdlYmtpdF93ZWJfdmll
d19nZXRfbG9hZF9zdGF0dXMod2ViX3ZpZXcpID09IFdFQktJVF9MT0FEX0ZJTklTSEVEKQotICAg
ICAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gaWRsZV9x
dWl0X2xvb3BfY2IoZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBnX21haW5fbG9vcF9xdWl0KGxvb3Ap
OwotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJfcmVzb3VyY2Vf
c3ViX3Jlc291cmNlX2xvYWRpbmcoKQotewotICAgIFdlYktpdFdlYlZpZXcqIHdlYl92aWV3ID0g
V0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgV2ViS2l0V2ViRnJh
bWUqIHdlYl9mcmFtZTsKLSAgICBXZWJLaXRXZWJEYXRhU291cmNlKiBkYXRhX3NvdXJjZTsKLSAg
ICBHTGlzdCogc3ViX3Jlc291cmNlczsKLSAgICBjaGFyKiB1cmkgPSBnX3N0cmR1cF9wcmludGYo
IiVzbWFpbi5odG1sIiwgYmFzZV91cmkpOwotCi0gICAgbWFpbl9yZXNvdXJjZSA9IE5VTEw7Ci0g
ICAgCi0gICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLQotICAgIGdfb2Jq
ZWN0X3JlZl9zaW5rKHdlYl92aWV3KTsKLQotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViX3ZpZXcs
ICJyZXNvdXJjZS1yZXF1ZXN0LXN0YXJ0aW5nIiwKLSAgICAgICAgICAgICAgICAgICAgIEdfQ0FM
TEJBQ0socmVzb3VyY2VfcmVxdWVzdF9zdGFydGluZ19zdWJfY2IpLAotICAgICAgICAgICAgICAg
ICAgICAgTlVMTCk7Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KHdlYl92aWV3LCAibm90aWZ5Ojps
b2FkLXN0YXR1cyIsCi0gICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKG5vdGlmeV9sb2Fk
X3N0YXR1c19zdWJfY2IpLAotICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0KLSAgICB3ZWJr
aXRfd2ViX3ZpZXdfbG9hZF91cmkod2ViX3ZpZXcsIHVyaSk7Ci0KLSAgICBnX21haW5fbG9vcF9y
dW4obG9vcCk7Ci0KLSAgICAvKiBUaGUgbWFpbiByZXNvdXJjZSBzaG91bGQgYmUgbG9hZGVkOyBu
b3cgbGV0J3Mgd2FpdCBmb3IgdGhlIHN1Yi1yZXNvdXJjZSB0byBsb2FkICovCi0gICAgZ19pZGxl
X2FkZChpZGxlX3F1aXRfbG9vcF9jYiwgTlVMTCk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3Ap
OwotICAgIAotICAgIGdfYXNzZXJ0KG1haW5fcmVzb3VyY2UgJiYgc3ViX3Jlc291cmNlKTsKLSAg
ICBnX2Fzc2VydChtYWluX3Jlc291cmNlICE9IHN1Yl9yZXNvdXJjZSk7Ci0KLSAgICB3ZWJfZnJh
bWUgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUod2ViX3ZpZXcpOwotICAgIGRhdGFf
c291cmNlID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfZGF0YV9zb3VyY2Uod2ViX2ZyYW1lKTsKLQot
ICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X21haW5fcmVzb3VyY2UoZGF0
YV9zb3VyY2UpID09IG1haW5fcmVzb3VyY2UpOwotICAgIGdfb2JqZWN0X3VucmVmKG1haW5fcmVz
b3VyY2UpOwotCi0gICAgc3ViX3Jlc291cmNlcyA9IHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0
X3N1YnJlc291cmNlcyhkYXRhX3NvdXJjZSk7Ci0gICAgLy8gRXhwZWN0ZWQgcmVzb3VyY2VzOiBq
YXZhc2NyaXB0cy5qcywgZmF2aWNvbi5pY28KLSAgICBnX2Fzc2VydChzdWJfcmVzb3VyY2VzKTsK
LSAgICBnX2Fzc2VydChzdWJfcmVzb3VyY2VzLT5uZXh0KTsKLSAgICBnX2Fzc2VydCghc3ViX3Jl
c291cmNlcy0+bmV4dC0+bmV4dCk7Ci0KLSAgICAvLyBUZXN0IHRoYXQgdGhlIG9iamVjdCB3ZSBn
b3QgZnJvbSB0aGUgZGF0YSBzb3VyY2UgaXMgdGhlIHNhbWUKLSAgICAvLyB0aGF0IHdlbnQgdGhy
b3VnaCByZXNvdXJjZS1yZXF1ZXN0LXN0YXJ0aW5nLiBOb3RlIHRoYXQgdGhlIG9yZGVyIGlzCi0g
ICAgLy8gbm90IGltcG9ydGFudCAoYW5kIG5vdCBndWFyYW50ZWVkIHNpbmNlIHRoZSByZXNvdXJj
ZXMgYXJlIHN0b3JlZCBpbiBhCi0gICAgLy8gaGFzaHRhYmxlKS4KLSAgICBnX2Fzc2VydChXRUJL
SVRfV0VCX1JFU09VUkNFKHN1Yl9yZXNvdXJjZXMtPmRhdGEpID09IHN1Yl9yZXNvdXJjZQotICAg
ICAgICAgICAgIHx8IFdFQktJVF9XRUJfUkVTT1VSQ0Uoc3ViX3Jlc291cmNlcy0+bmV4dC0+ZGF0
YSkgPT0gc3ViX3Jlc291cmNlKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKHdlYl92aWV3KTsKLSAg
ICBnX21haW5fbG9vcF91bnJlZihsb29wKTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIq
KiBhcmd2KQotewotICAgIFNvdXBTZXJ2ZXIqIHNlcnZlcjsKLSAgICBTb3VwVVJJKiBzb3VwX3Vy
aTsKLQotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLQotICAgIHNlcnZl
ciA9IHNvdXBfc2VydmVyX25ldyhTT1VQX1NFUlZFUl9QT1JULCAwLCBOVUxMKTsKLSAgICBzb3Vw
X3NlcnZlcl9ydW5fYXN5bmMoc2VydmVyKTsKLQotICAgIHNvdXBfc2VydmVyX2FkZF9oYW5kbGVy
KHNlcnZlciwgTlVMTCwgc2VydmVyX2NhbGxiYWNrLCBOVUxMLCBOVUxMKTsKLQotICAgIHNvdXBf
dXJpID0gc291cF91cmlfbmV3KCJodHRwOi8vMTI3LjAuMC4xLyIpOwotICAgIHNvdXBfdXJpX3Nl
dF9wb3J0KHNvdXBfdXJpLCBzb3VwX3NlcnZlcl9nZXRfcG9ydChzZXJ2ZXIpKTsKLQotICAgIGJh
c2VfdXJpID0gc291cF91cmlfdG9fc3RyaW5nKHNvdXBfdXJpLCBGQUxTRSk7Ci0gICAgc291cF91
cmlfZnJlZShzb3VwX3VyaSk7Ci0KLSAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53
ZWJraXQub3JnLyIpOwotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvd2VicmVzb3VyY2UvZ2V0X3Vy
bCIsCi0gICAgICAgICAgICAgICBXZWJSZXNvdXJjZUZpeHR1cmUsIDAsIHdlYl9yZXNvdXJjZV9m
aXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfd2ViX3Jlc291cmNlX2dl
dF91cmwsIHdlYl9yZXNvdXJjZV9maXh0dXJlX3RlYXJkb3duKTsKLSAgICBnX3Rlc3RfYWRkKCIv
d2Via2l0L3dlYnJlc291cmNlL2dldF9taW1lX3R5cGUiLAotICAgICAgICAgICAgICAgV2ViUmVz
b3VyY2VGaXh0dXJlLCAwLCB3ZWJfcmVzb3VyY2VfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAg
ICAgIHRlc3Rfd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfbWltZV90eXBlLCB3ZWJfcmVzb3VyY2Vf
Zml4dHVyZV90ZWFyZG93bik7Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC93ZWJyZXNvdXJjZS9n
ZXRfdGV4dF9lbmNvZGluZ19uYW1lIiwKLSAgICAgICAgICAgICAgIFdlYlJlc291cmNlRml4dHVy
ZSwgMCwgd2ViX3Jlc291cmNlX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X3dl
YmtpdF93ZWJfcmVzb3VyY2VfZ2V0X2VuY29kaW5nLCB3ZWJfcmVzb3VyY2VfZml4dHVyZV90ZWFy
ZG93bik7Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC93ZWJyZXNvdXJjZS9nZXRfZnJhbWVfbmFt
ZSIsCi0gICAgICAgICAgICAgICBXZWJSZXNvdXJjZUZpeHR1cmUsIDAsIHdlYl9yZXNvdXJjZV9m
aXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfd2ViX3Jlc291cmNlX2dl
dF9mcmFtZV9uYW1lLCB3ZWJfcmVzb3VyY2VfZml4dHVyZV90ZWFyZG93bik7Ci0gICAgZ190ZXN0
X2FkZCgiL3dlYmtpdC93ZWJyZXNvdXJjZS9nZXRfZGF0YSIsCi0gICAgICAgICAgICAgICBXZWJS
ZXNvdXJjZUZpeHR1cmUsIDAsIHdlYl9yZXNvdXJjZV9maXh0dXJlX3NldHVwLAotICAgICAgICAg
ICAgICAgdGVzdF93ZWJraXRfd2ViX3Jlc291cmNlX2dldF9kYXRhLCB3ZWJfcmVzb3VyY2VfZml4
dHVyZV90ZWFyZG93bik7Ci0KLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2VicmVzb3Vy
Y2UvbG9hZGluZyIsIHRlc3Rfd2ViX3Jlc291cmNlX2xvYWRpbmcpOwotICAgIGdfdGVzdF9hZGRf
ZnVuYygiL3dlYmtpdC93ZWJyZXNvdXJjZS9zdWJfcmVzb3VyY2VfbG9hZGluZyIsIHRlc3Rfd2Vi
X3Jlc291cmNlX3N1Yl9yZXNvdXJjZV9sb2FkaW5nKTsKLQotICAgIHJldHVybiBnX3Rlc3RfcnVu
ICgpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYnNldHRp
bmdzLmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2Vic2V0dGluZ3MuYwpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzU0ODljZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2d0ay90ZXN0cy90ZXN0d2Vic2V0dGluZ3MuYworKysgL2Rldi9udWxsCkBAIC0xLDE1OSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEphbiBNaWNoYWVsIEFsb256bwotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4K
LSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+Ci0KLS8qIFByaXZhdGUgQVBJICovCi1jaGFyKiB3
ZWJraXRXZWJTZXR0aW5nc1VzZXJBZ2VudEZvclVSSShXZWJLaXRXZWJTZXR0aW5ncyAqc2V0dGlu
Z3MsIGNvbnN0IGNoYXIgKnVyaSk7Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9zZXR0
aW5nc19jb3B5KHZvaWQpCi17Ci0gICAgV2ViS2l0V2ViU2V0dGluZ3MgKnNldHRpbmdzID0gd2Vi
a2l0X3dlYl9zZXR0aW5nc19uZXcoKTsKLQotICAgIC8vIFNldCBzb21lIG5vbi1kZWZhdWx0IHNl
dHRpbmdzIHRvIHZlcmlmeSB0aGF0IHNldHRpbmdzIGFyZSBwcm9wZXJseSBjb3BpZWQuCi0gICAg
Z19vYmplY3Rfc2V0KHNldHRpbmdzLAotICAgICAgICAgICAgICAgICAiZW5hYmxlLXdlYmdsIiwg
VFJVRSwKLSAgICAgICAgICAgICAgICAgImVuYWJsZS1mdWxsc2NyZWVuIiwgVFJVRSwKLSAgICAg
ICAgICAgICAgICAgImF1dG8tbG9hZC1pbWFnZXMiLCBGQUxTRSwKLSAgICAgICAgICAgICAgICAg
ImRlZmF1bHQtZW5jb2RpbmciLCAidXRmLTgiLAotICAgICAgICAgICAgICAgICAiZW5hYmxlLW1l
ZGlhc291cmNlIiwgVFJVRSwKLSAgICAgICAgICAgICAgICAgTlVMTCk7Ci0KLSAgICBXZWJLaXRX
ZWJTZXR0aW5ncyAqY29weSA9IHdlYmtpdF93ZWJfc2V0dGluZ3NfY29weShzZXR0aW5ncyk7Ci0K
LSAgICBnYm9vbGVhbiBlbmFibGVXZWJHTCA9IEZBTFNFOwotICAgIGdib29sZWFuIGVuYWJsZUZ1
bGxzY3JlZW4gPSBGQUxTRTsKLSAgICBnYm9vbGVhbiBhdXRvTG9hZEltYWdlcyA9IEZBTFNFOwot
ICAgIGdib29sZWFuIGVuYWJsZU1lZGlhU291cmNlID0gRkFMU0U7Ci0gICAgY2hhciAqZGVmYXVs
dEVuY29kaW5nID0gMDsKLSAgICBnX29iamVjdF9nZXQoY29weSwKLSAgICAgICAgICAgICAgICAg
ImVuYWJsZS1mdWxsc2NyZWVuIiwgJmVuYWJsZUZ1bGxzY3JlZW4sCi0gICAgICAgICAgICAgICAg
ICJlbmFibGUtd2ViZ2wiLCAmZW5hYmxlV2ViR0wsCi0gICAgICAgICAgICAgICAgICJhdXRvLWxv
YWQtaW1hZ2VzIiwgJmF1dG9Mb2FkSW1hZ2VzLAotICAgICAgICAgICAgICAgICAiZGVmYXVsdC1l
bmNvZGluZyIsICZkZWZhdWx0RW5jb2RpbmcsCi0gICAgICAgICAgICAgICAgICJlbmFibGUtbWVk
aWFzb3VyY2UiLCAmZW5hYmxlTWVkaWFTb3VyY2UsCi0gICAgICAgICAgICAgICAgIE5VTEwpOwot
Ci0gICAgZ19hc3NlcnQoZW5hYmxlV2ViR0wpOwotICAgIGdfYXNzZXJ0KGVuYWJsZUZ1bGxzY3Jl
ZW4pOwotICAgIGdfYXNzZXJ0KCFhdXRvTG9hZEltYWdlcyk7Ci0gICAgZ19hc3NlcnRfY21wc3Ry
KGRlZmF1bHRFbmNvZGluZywgPT0sICJ1dGYtOCIpOwotICAgIGdfYXNzZXJ0KGVuYWJsZU1lZGlh
U291cmNlKTsKLSAgICBnX2ZyZWUoZGVmYXVsdEVuY29kaW5nKTsKLX0KLQotc3RhdGljIHZvaWQg
dGVzdF9ub25fcXVpcmt5X3VzZXJfYWdlbnRzKFdlYktpdFdlYlNldHRpbmdzICpzZXR0aW5ncywg
Y29uc3QgY2hhciAqZGVmYXVsdFVzZXJBZ2VudCkKLXsKLSAgICBjaGFyICp1c2VyQWdlbnQgPSAw
OwotCi0gICAgLy8gdGVzdCBhIGN1c3RvbSBVQSBzdHJpbmcKLSAgICB1c2VyQWdlbnQgPSAwOwot
ICAgIGdfb2JqZWN0X3NldChzZXR0aW5ncywgInVzZXItYWdlbnQiLCAidGVzdHdlYnNldHRpbmdz
LzAuMSIsIE5VTEwpOwotICAgIGdfb2JqZWN0X2dldChzZXR0aW5ncywidXNlci1hZ2VudCIsICZ1
c2VyQWdlbnQsIE5VTEwpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih1c2VyQWdlbnQsID09LCAidGVz
dHdlYnNldHRpbmdzLzAuMSIpOwotICAgIGdfZnJlZSh1c2VyQWdlbnQpOwotCi0gICAgLy8gc2V0
dGluZyBpdCB0byBOVUxMIG9yIGFuIGVtcHR5IHZhbHVlIHNob3VsZCBnaXZlIHVzIHRoZSBkZWZh
dWx0IFVBIHN0cmluZwotICAgIHVzZXJBZ2VudCA9IDA7Ci0gICAgZ19vYmplY3Rfc2V0KHNldHRp
bmdzLCAidXNlci1hZ2VudCIsIDAsIE5VTEwpOwotICAgIGdfb2JqZWN0X2dldChzZXR0aW5ncywi
dXNlci1hZ2VudCIsICZ1c2VyQWdlbnQsIE5VTEwpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih1c2Vy
QWdlbnQsID09LCBkZWZhdWx0VXNlckFnZW50KTsKLSAgICBnX2ZyZWUodXNlckFnZW50KTsKLQot
ICAgIHVzZXJBZ2VudCA9IDA7Ci0gICAgZ19vYmplY3Rfc2V0KHNldHRpbmdzLCAidXNlci1hZ2Vu
dCIsICIiLCBOVUxMKTsKLSAgICBnX29iamVjdF9nZXQoc2V0dGluZ3MsInVzZXItYWdlbnQiLCAm
dXNlckFnZW50LCBOVUxMKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodXNlckFnZW50LCA9PSwgZGVm
YXVsdFVzZXJBZ2VudCk7Ci0gICAgZ19mcmVlKHVzZXJBZ2VudCk7Ci19Ci0KLXN0YXRpYyB2b2lk
IHRlc3Rfd2Via2l0X3dlYl9zZXR0aW5nc191c2VyX2FnZW50KHZvaWQpCi17Ci0gICAgV2ViS2l0
V2ViU2V0dGluZ3MgKnNldHRpbmdzOwotICAgIEd0a1dpZGdldCAqd2ViVmlldzsKLSAgICBjaGFy
ICpkZWZhdWx0VXNlckFnZW50OwotICAgIGNoYXIgKnVzZXJBZ2VudCA9IDA7Ci0gICAgZ190ZXN0
X2J1ZygiMTczNzUiKTsKLQotICAgIHdlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7Ci0g
ICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7Ci0KLSAgICBzZXR0aW5ncyA9IHdlYmtpdF93
ZWJfdmlld19nZXRfc2V0dGluZ3MoV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpKTsKLSAgICBkZWZh
dWx0VXNlckFnZW50ID0gZ19zdHJkdXAod2Via2l0X3dlYl9zZXR0aW5nc19nZXRfdXNlcl9hZ2Vu
dChzZXR0aW5ncykpOwotCi0gICAgdGVzdF9ub25fcXVpcmt5X3VzZXJfYWdlbnRzKHNldHRpbmdz
LCBkZWZhdWx0VXNlckFnZW50KTsKLQotICAgIC8qIFRlc3QgcXVpcmt5IGdvb2dsZSBkb21haW5z
ICovCi0gICAgZ19vYmplY3Rfc2V0KHNldHRpbmdzLCAidXNlci1hZ2VudCIsICJ0ZXN0d2Vic2V0
dGluZ3MvMC4xIiwgTlVMTCk7Ci0KLSAgICB1c2VyQWdlbnQgPSB3ZWJraXRXZWJTZXR0aW5nc1Vz
ZXJBZ2VudEZvclVSSShzZXR0aW5ncywgImh0dHA6Ly93d3cuZ29vZ2xlLmNvbS8iKTsKLSAgICBn
X2Fzc2VydF9jbXBzdHIodXNlckFnZW50LCA9PSwgInRlc3R3ZWJzZXR0aW5ncy8wLjEiKTsKLSAg
ICBnX2ZyZWUodXNlckFnZW50KTsKLQotICAgIHVzZXJBZ2VudCA9IHdlYmtpdFdlYlNldHRpbmdz
VXNlckFnZW50Rm9yVVJJKHNldHRpbmdzLCAiaHR0cDovL2dtYWlsLmNvbS8iKTsKLSAgICBnX2Fz
c2VydF9jbXBzdHIodXNlckFnZW50LCA9PSwgInRlc3R3ZWJzZXR0aW5ncy8wLjEiKTsKLSAgICBn
X2ZyZWUodXNlckFnZW50KTsKLQotICAgIHVzZXJBZ2VudCA9IHdlYmtpdFdlYlNldHRpbmdzVXNl
ckFnZW50Rm9yVVJJKHNldHRpbmdzLCAiaHR0cDovL3d3dy5nb29nbGUuY29tLmJyLyIpOwotICAg
IGdfYXNzZXJ0X2NtcHN0cih1c2VyQWdlbnQsID09LCAidGVzdHdlYnNldHRpbmdzLzAuMSIpOwot
ICAgIGdfZnJlZSh1c2VyQWdlbnQpOwotCi0gICAgdXNlckFnZW50ID0gd2Via2l0V2ViU2V0dGlu
Z3NVc2VyQWdlbnRGb3JVUkkoc2V0dGluZ3MsICJodHRwOi8vY2FsZW5kYXIuZ29vZ2xlLmNvbS8i
KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodXNlckFnZW50LCA9PSwgInRlc3R3ZWJzZXR0aW5ncy8w
LjEiKTsKLSAgICBnX2ZyZWUodXNlckFnZW50KTsKLQotICAgIC8qIE5vdyBlbmFibGUgcXVpcmtz
IGhhbmRsaW5nICovCi0gICAgZ19vYmplY3Rfc2V0KHNldHRpbmdzLCAiZW5hYmxlLXNpdGUtc3Bl
Y2lmaWMtcXVpcmtzIiwgVFJVRSwgTlVMTCk7Ci0KLSAgICB0ZXN0X25vbl9xdWlya3lfdXNlcl9h
Z2VudHMoc2V0dGluZ3MsIGRlZmF1bHRVc2VyQWdlbnQpOwotCi0gICAgZ19vYmplY3Rfc2V0KHNl
dHRpbmdzLCAidXNlci1hZ2VudCIsICJ0ZXN0d2Vic2V0dGluZ3MvMC4xIiwgTlVMTCk7Ci0KLSAg
ICB1c2VyQWdlbnQgPSB3ZWJraXRXZWJTZXR0aW5nc1VzZXJBZ2VudEZvclVSSShzZXR0aW5ncywg
Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbS8iKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodXNlckFnZW50
LCA9PSwgZGVmYXVsdFVzZXJBZ2VudCk7Ci0gICAgZ19mcmVlKHVzZXJBZ2VudCk7Ci0KLSAgICB1
c2VyQWdlbnQgPSB3ZWJraXRXZWJTZXR0aW5nc1VzZXJBZ2VudEZvclVSSShzZXR0aW5ncywgImh0
dHA6Ly9nbWFpbC5jb20vIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHVzZXJBZ2VudCwgPT0sIGRl
ZmF1bHRVc2VyQWdlbnQpOwotICAgIGdfZnJlZSh1c2VyQWdlbnQpOwotCi0gICAgdXNlckFnZW50
ID0gd2Via2l0V2ViU2V0dGluZ3NVc2VyQWdlbnRGb3JVUkkoc2V0dGluZ3MsICJodHRwOi8vd3d3
Lmdvb2dsZS5jb20uYnIvIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHVzZXJBZ2VudCwgPT0sIGRl
ZmF1bHRVc2VyQWdlbnQpOwotICAgIGdfZnJlZSh1c2VyQWdlbnQpOwotCi0gICAgdXNlckFnZW50
ID0gd2Via2l0V2ViU2V0dGluZ3NVc2VyQWdlbnRGb3JVUkkoc2V0dGluZ3MsICJodHRwOi8vd3d3
Lmdvb2dsZS51ay5ub3QuY29tLmJyLyIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih1c2VyQWdlbnQs
ID09LCAidGVzdHdlYnNldHRpbmdzLzAuMSIpOwotICAgIGdfZnJlZSh1c2VyQWdlbnQpOwotCi0g
ICAgZ19mcmVlKGRlZmF1bHRVc2VyQWdlbnQpOwotICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcp
OwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gICAgZ3RrX3Rlc3Rf
aW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOwotCi0gICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy8iKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vic2V0
dGluZ3MvdXNlcl9hZ2VudCIsIHRlc3Rfd2Via2l0X3dlYl9zZXR0aW5nc191c2VyX2FnZW50KTsK
LSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vic2V0dGluZ3MvY29weSIsIHRlc3Rfd2Vi
a2l0X3dlYl9zZXR0aW5nc19jb3B5KTsKLSAgICByZXR1cm4gZ190ZXN0X3J1biAoKTsKLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJ2aWV3LmMgYi9Tb3VyY2Uv
V2ViS2l0L2d0ay90ZXN0cy90ZXN0d2Vidmlldy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAxNzAzNzJjLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3
ZWJ2aWV3LmMKKysrIC9kZXYvbnVsbApAQCAtMSw3NDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICogQ29weXJpZ2h0IChDKSAy
MDA5LCAyMDEwIENvbGxhYm9yYSBMdGQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMu
TC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgInRlc3RfdXRpbHMuaCIKLQotI2luY2x1
ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0K
LSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRlIDxn
ZGsvZ2RrLmg+Ci0jaW5jbHVkZSA8Z2RrL2dka2tleXN5bXMuaD4KLSNpbmNsdWRlIDxndGsvZ3Rr
Lmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgotCi1HTWFpbkxvb3AqIGxvb3A7Ci1Tb3Vw
U2Vzc2lvbiAqc2Vzc2lvbjsKLWNoYXIqIGJhc2VfdXJpOwotCi0vKiBGb3IgcmVhbCByZXF1ZXN0
IHRlc3RpbmcgKi8KLXN0YXRpYyB2b2lkCi1zZXJ2ZXJfY2FsbGJhY2soU291cFNlcnZlciogc2Vy
dmVyLCBTb3VwTWVzc2FnZSogbXNnLAotICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBwYXRo
LCBHSGFzaFRhYmxlKiBxdWVyeSwKLSAgICAgICAgICAgICAgICAgU291cENsaWVudENvbnRleHQq
IGNvbnRleHQsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgaWYgKG1zZy0+bWV0aG9kICE9IFNPVVBf
TUVUSE9EX0dFVCkgewotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2csIFNPVVBf
U1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBz
b3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX09LKTsKLQotICAgIGlmIChn
X3N0cl9lcXVhbChwYXRoLCAiL2Zhdmljb24uaWNvIikpIHsKLSAgICAgICAgY2hhciogY29udGVu
dHM7Ci0gICAgICAgIGdzaXplIGxlbmd0aDsKLSAgICAgICAgR0Vycm9yKiBlcnJvciA9IE5VTEw7
Ci0KLSAgICAgICAgZ19maWxlX2dldF9jb250ZW50cygiYmxhbmsuaWNvIiwgJmNvbnRlbnRzLCAm
bGVuZ3RoLCAmZXJyb3IpOwotICAgICAgICBnX2Fzc2VydCghZXJyb3IpOwotCi0gICAgICAgIHNv
dXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtc2ctPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RB
S0UsIGNvbnRlbnRzLCBsZW5ndGgpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwg
Ii9iaWdkaXYuaHRtbCIpKSB7Ci0gICAgICAgIGNoYXIqIGNvbnRlbnRzID0gZ19zdHJkdXAoIjxo
dG1sPjxib2R5PjxhIGlkPVwibGlua1wiIGhyZWY9XCJodHRwOi8vYWJjLmRlZlwiPnRlc3Q8L2E+
PGRpdiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IGdyZWVuOyBoZWlnaHQ6IDEyMDBweDtcIj48
L2Rpdj48L2JvZHk+PC9odG1sPiIpOwotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQo
bXNnLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBjb250ZW50cywgc3RybGVuKGNv
bnRlbnRzKSk7Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2lmcmFtZS5odG1s
IikpIHsKLSAgICAgICAgY2hhciogY29udGVudHMgPSBnX3N0cmR1cCgiPGh0bWw+PGJvZHkgaWQ9
XCJzb21lLWNvbnRlbnRcIj48ZGl2IHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogZ3JlZW47IGhl
aWdodDogNTBweDtcIj48L2Rpdj48aWZyYW1lIHNyYz1cImJpZ2Rpdi5odG1sXCI+PC9pZnJhbWU+
PC9ib2R5PjwvaHRtbD4iKTsKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1zZy0+
cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgY29udGVudHMsIHN0cmxlbihjb250ZW50
cykpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNoYXIqIGNvbnRlbnRzID0gZ19zdHJkdXAoIjxo
dG1sPjxib2R5PnRlc3Q8L2JvZHk+PC9odG1sPiIpOwotICAgICAgICBzb3VwX21lc3NhZ2VfYm9k
eV9hcHBlbmQobXNnLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBjb250ZW50cywg
c3RybGVuKGNvbnRlbnRzKSk7Ci0gICAgfQotCi0gICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxl
dGUobXNnLT5yZXNwb25zZV9ib2R5KTsKLX0KLQotc3RhdGljIHZvaWQgaWRsZV9xdWl0X2xvb3Bf
Y2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIEdQYXJhbVNwZWMqIHBzcGVjLCBncG9pbnRlciBk
YXRhKQotewotICAgIGlmICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYl92aWV3
KSA9PSBXRUJLSVRfTE9BRF9GSU5JU0hFRCB8fAotICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X2xvYWRfc3RhdHVzKHdlYl92aWV3KSA9PSBXRUJLSVRfTE9BRF9GQUlMRUQpCi0gICAgICAgIGdf
bWFpbl9sb29wX3F1aXQobG9vcCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiB0aW1lb3V0X2NiKGdw
b2ludGVyIGRhdGEpCi17Ci0gICAgZ19lcnJvcigiRGlkbid0IGdldCBpY29uLXVyaSBiZWZvcmUg
dGltaW5nIG91dC4iKTsKLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lkIGljb25f
dXJpX2NoYW5nZWRfY2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIEdQYXJhbVNwZWMqIHBzcGVj
LCBncG9pbnRlciBkYXRhKQotewotICAgIGNoYXIqIGV4cGVjdGVkX3VyaTsKLQotICAgIGdfYXNz
ZXJ0X2NtcHN0cihnX3BhcmFtX3NwZWNfZ2V0X25hbWUocHNwZWMpLCA9PSwgImljb24tdXJpIik7
Ci0KLSAgICBleHBlY3RlZF91cmkgPSBnX3N0cmR1cF9wcmludGYoIiVzZmF2aWNvbi5pY28iLCBi
YXNlX3VyaSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRfaWNvbl91
cmkod2ViX3ZpZXcpLCA9PSwgZXhwZWN0ZWRfdXJpKTsKLSAgICBnX2ZyZWUoZXhwZWN0ZWRfdXJp
KTsKLQotICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGljb25f
bG9hZGVkX2NiKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBjaGFyKiBpY29uX3VyaSwgZ3BvaW50
ZXIgZGF0YSkKLXsKLSAgICBnYm9vbGVhbiogYmVlbl9oZXJlID0gKGdib29sZWFuKilkYXRhOwot
ICAgIGNoYXIqIGV4cGVjdGVkX3VyaSA9IGdfc3RyZHVwX3ByaW50ZigiJXNmYXZpY29uLmljbyIs
IGJhc2VfdXJpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoaWNvbl91cmksID09LCBleHBlY3RlZF91
cmkpOwotICAgIGdfZnJlZShleHBlY3RlZF91cmkpOwotCi0gICAgZ19hc3NlcnRfY21wc3RyKGlj
b25fdXJpLCA9PSwgd2Via2l0X3dlYl92aWV3X2dldF9pY29uX3VyaSh3ZWJfdmlldykpOwotCi0g
ICAgKmJlZW5faGVyZSA9IFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl92
aWV3X2ljb25fdXJpKCkKLXsKLSAgICBnYm9vbGVhbiBiZWVuX3RvX2ljb25fbG9hZGVkID0gRkFM
U0U7Ci0gICAgV2ViS2l0V2ViVmlldyogdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2Vi
X3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKEdfT0JKRUNUKHZpZXcpKTsKLQot
ICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7Ci0KLSAgICBnX29iamVjdF9j
b25uZWN0KEdfT0JKRUNUKHZpZXcpLAotICAgICAgICAgICAgICAgICAgICAgInNpZ25hbDo6bm90
aWZ5OjppY29uLXVyaSIsIGljb25fdXJpX2NoYW5nZWRfY2IsIE5VTEwsCi0gICAgICAgICAgICAg
ICAgICAgICAic2lnbmFsOjppY29uLWxvYWRlZCIsIGljb25fbG9hZGVkX2NiLCAmYmVlbl90b19p
Y29uX2xvYWRlZCwKLSAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotCi0gICAgd2Via2l0X3dl
Yl92aWV3X2xvYWRfdXJpKHZpZXcsIGJhc2VfdXJpKTsKLQotICAgIGd1aW50IHRpbWVvdXRfaWQg
PSBnX3RpbWVvdXRfYWRkKDUwMCwgdGltZW91dF9jYiwgMCk7Ci0KLSAgICBnX21haW5fbG9vcF9y
dW4obG9vcCk7Ci0KLSAgICBnX3NvdXJjZV9yZW1vdmUodGltZW91dF9pZCk7Ci0KLSAgICBnX2Fz
c2VydChiZWVuX3RvX2ljb25fbG9hZGVkKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKHZpZXcpOwot
fQotCi1zdGF0aWMgZ2Jvb2xlYW4gbWFwX2V2ZW50X2NiKEd0a1dpZGdldCAqd2lkZ2V0LCBHZGtF
dmVudCogZXZlbnQsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgR01haW5Mb29wKiBsb29wID0gKEdN
YWluTG9vcCopZGF0YTsKLSAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwotCi0gICAgcmV0dXJu
IEZBTFNFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gcXVpdF9hZnRlcl9zaG9ydF9kZWxheV9jYihn
cG9pbnRlciBkYXRhKQotewotICAgIGdfbWFpbl9sb29wX3F1aXQoKEdNYWluTG9vcCopZGF0YSk7
Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfdmll
d19ncmFiX2ZvY3VzKCkKLXsKLSAgICBjaGFyKiB1cmkgPSBnX3N0cmNvbmNhdChiYXNlX3VyaSwg
ImlmcmFtZS5odG1sIiwgTlVMTCk7Ci0gICAgR3RrV2lkZ2V0KiB3aW5kb3cgPSBndGtfd2luZG93
X25ldyhHVEtfV0lORE9XX1BPUFVQKTsKLSAgICBHdGtXaWRnZXQqIHNjcm9sbGVkX3dpbmRvdyA9
IGd0a19zY3JvbGxlZF93aW5kb3dfbmV3KE5VTEwsIE5VTEwpOwotICAgIFdlYktpdFdlYlZpZXcq
IHZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBHdGtB
ZGp1c3RtZW50KiBhZGp1c3RtZW50OwotCi0gICAgZ3RrX3dpbmRvd19zZXRfZGVmYXVsdF9zaXpl
KEdUS19XSU5ET1cod2luZG93KSwgNDAwLCAyMDApOwotCi0gICAgZ3RrX2NvbnRhaW5lcl9hZGQo
R1RLX0NPTlRBSU5FUih3aW5kb3cpLCBzY3JvbGxlZF93aW5kb3cpOwotICAgIGd0a19jb250YWlu
ZXJfYWRkKEdUS19DT05UQUlORVIoc2Nyb2xsZWRfd2luZG93KSwgR1RLX1dJREdFVCh2aWV3KSk7
Ci0KLSAgICBndGtfc2Nyb2xsZWRfd2luZG93X3NldF9wb2xpY3koR1RLX1NDUk9MTEVEX1dJTkRP
VyhzY3JvbGxlZF93aW5kb3cpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
VEtfUE9MSUNZX0FVVE9NQVRJQywgR1RLX1BPTElDWV9BVVRPTUFUSUMpOwotCi0gICAgbG9vcCA9
IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLQotICAgIGdfc2lnbmFsX2Nvbm5lY3Qodmll
dywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLCBHX0NBTExCQUNLKGlkbGVfcXVpdF9sb29wX2NiKSwg
TlVMTCk7Ci0KLSAgICAvKiBXYWl0IGZvciB3aW5kb3cgdG8gc2hvdyB1cCAqLwotICAgIGd0a193
aWRnZXRfc2hvd19hbGwod2luZG93KTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHdpbmRvdywgIm1h
cC1ldmVudCIsCi0gICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKG1hcF9ldmVudF9jYiks
IGxvb3ApOwotICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLQotICAgIC8qIExvYWQgYSBwYWdl
IHdpdGggYSBiaWcgZGl2IHRoYXQgd2lsbCBjYXVzZSBzY3JvbGxiYXJzIHRvIGFwcGVhciAqLwot
ICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh2aWV3LCB1cmkpOwotICAgIGdfbWFpbl9sb29w
X3J1bihsb29wKTsKLQotICAgIGFkanVzdG1lbnQgPSBndGtfc2Nyb2xsZWRfd2luZG93X2dldF92
YWRqdXN0bWVudChHVEtfU0NST0xMRURfV0lORE9XKHNjcm9sbGVkX3dpbmRvdykpOwotICAgIGdf
YXNzZXJ0X2NtcGZsb2F0KGd0a19hZGp1c3RtZW50X2dldF92YWx1ZShhZGp1c3RtZW50KSwgPT0s
IDAuMCk7Ci0KLSAgICAvKiBTaW5jZSB3ZWJraXRfd2ViX3ZpZXdfZXhlY3V0ZV9zY3JpcHQgZG9l
cyBub3QgcmV0dXJuIGEgdmFsdWUsCi0gICAgICAgaXQgaXMgaW1wb3NzaWJsZSB0byBrbm93IGlm
IGFuIGlubmVyIGRvY3VtZW50IGhhcyBmb2N1cyBhZnRlcgotICAgICAgIGEgbm9kZSBvZiBpdCB3
YXMgZm9jdXNlZCB2aWEgLmZvY3VzKCkgbWV0aG9kLgotICAgICAgIFRoZSBjb2RlIGJlbG93IGlz
IGFuIHdvcmthcm91bmQ6IGlmIHRoZSBub2RlIGhhcyBmb2N1cywgYSBzY3JvbGwKLSAgICAgICBh
Y3Rpb24gaXMgcGVyZm9ybWVkIGFuZCBhZnRlcndhcmQgaXQgaXMgY2hlY2tlZCBpZiB0aGUgYWRq
dXN0bWVudAotICAgICAgIGhhcyB0byBiZSBkaWZmZXJlbnQgZnJvbSAwLgotICAgICovCi0gICAg
Y2hhciBzY3JpcHRbXSA9ICJ2YXIgaW5uZXJEb2MgPSBkb2N1bWVudC5kZWZhdWx0Vmlldy5mcmFt
ZXNbMF0uZG9jdW1lbnQ7IFwKLSAgICAgICAgICAgICAgICAgICAgIGlubmVyRG9jLmdldEVsZW1l
bnRCeUlkKFwibGlua1wiKS5mb2N1cygpOyAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAg
ICAgICAgaWYgKGlubmVyRG9jLmhhc0ZvY3VzKCkpICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2Nyb2xsQnkoMCwgMTAwKTsi
OwotCi0gICAgLyogRm9jdXMgYW4gZWxlbWVudCB1c2luZyBKYXZhU2NyaXB0ICovCi0gICAgd2Vi
a2l0X3dlYl92aWV3X2V4ZWN1dGVfc2NyaXB0KHZpZXcsIHNjcmlwdCk7Ci0KLSAgICAvKiBBZGp1
c3RtZW50cyB1cGRhdGUgYXN5bmNocm9ub3VzbHksIHNvIHdlIG11c3Qgd2FpdCBhIGJpdC4gKi8K
LSAgICBnX3RpbWVvdXRfYWRkKDEwMCwgcXVpdF9hZnRlcl9zaG9ydF9kZWxheV9jYiwgbG9vcCk7
Ci0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAgLyogTWFrZSBzdXJlIHRoZSBTY3Jv
bGxlZFdpbmRvdyBub3RpY2VkIHRoZSBzY3JvbGwgKi8KLSAgICBnX2Fzc2VydF9jbXBmbG9hdChn
dGtfYWRqdXN0bWVudF9nZXRfdmFsdWUoYWRqdXN0bWVudCksICE9LCAwLjApOwotCi0gICAgZ19m
cmVlKHVyaSk7Ci0gICAgZ3RrX3dpZGdldF9kZXN0cm95KHdpbmRvdyk7Ci19Ci0KLXN0YXRpYyB2
b2lkIGRvX3Rlc3Rfd2Via2l0X3dlYl92aWV3X2FkanVzdG1lbnRzKGdib29sZWFuIHdpdGhfcGFn
ZV9jYWNoZSkKLXsKLSAgICBjaGFyKiBlZmZlY3RpdmVfdXJpID0gZ19zdHJjb25jYXQoYmFzZV91
cmksICJiaWdkaXYuaHRtbCIsIE5VTEwpOwotICAgIGNoYXIqIHNlY29uZF91cmkgPSBnX3N0cmNv
bmNhdChiYXNlX3VyaSwgImlmcmFtZS5odG1sIiwgTlVMTCk7Ci0gICAgR3RrV2lkZ2V0KiB3aW5k
b3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKLSAgICBHdGtXaWRnZXQq
IHNjcm9sbGVkX3dpbmRvdyA9IGd0a19zY3JvbGxlZF93aW5kb3dfbmV3KE5VTEwsIE5VTEwpOwot
ICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3
X25ldygpKTsKLSAgICBHdGtBZGp1c3RtZW50KiBhZGp1c3RtZW50OwotICAgIGRvdWJsZSBsb3dl
cjsKLSAgICBkb3VibGUgdXBwZXI7Ci0KLSAgICBpZiAod2l0aF9wYWdlX2NhY2hlKSB7Ci0gICAg
ICAgIFdlYktpdFdlYlNldHRpbmdzKiBzZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0
dGluZ3Modmlldyk7Ci0gICAgICAgIGdfb2JqZWN0X3NldChzZXR0aW5ncywgImVuYWJsZS1wYWdl
LWNhY2hlIiwgVFJVRSwgTlVMTCk7Ci0gICAgfQotCi0gICAgZ3RrX3dpbmRvd19zZXRfZGVmYXVs
dF9zaXplKEdUS19XSU5ET1cod2luZG93KSwgNDAwLCAyMDApOwotCi0gICAgZ3RrX2NvbnRhaW5l
cl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCBzY3JvbGxlZF93aW5kb3cpOwotICAgIGd0a19j
b250YWluZXJfYWRkKEdUS19DT05UQUlORVIoc2Nyb2xsZWRfd2luZG93KSwgR1RLX1dJREdFVCh2
aWV3KSk7Ci0KLSAgICBndGtfc2Nyb2xsZWRfd2luZG93X3NldF9wb2xpY3koR1RLX1NDUk9MTEVE
X1dJTkRPVyhzY3JvbGxlZF93aW5kb3cpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHVEtfUE9MSUNZX0FVVE9NQVRJQywgR1RLX1BPTElDWV9BVVRPTUFUSUMpOwotCi0gICAg
bG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLQotICAgIGdfb2JqZWN0X2Nvbm5l
Y3QoR19PQkpFQ1QodmlldyksCi0gICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjpub3RpZnk6
OmxvYWQtc3RhdHVzIiwgaWRsZV9xdWl0X2xvb3BfY2IsIE5VTEwsCi0gICAgICAgICAgICAgICAg
ICAgICBOVUxMKTsKLQotICAgIC8qIFdhaXQgZm9yIHdpbmRvdyB0byBzaG93IHVwICovCi0gICAg
Z3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2luZG93
LCAibWFwLWV2ZW50IiwKLSAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sobWFwX2V2ZW50
X2NiKSwgbG9vcCk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAgLyogTG9hZCBh
IHBhZ2Ugd2l0aCBhIGJpZyBkaXYgdGhhdCB3aWxsIGNhdXNlIHNjcm9sbGJhcnMgdG8gYXBwZWFy
ICovCi0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHZpZXcsIGVmZmVjdGl2ZV91cmkpOwot
ICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLQotICAgIC8qIEFkanVzdG1lbnRzIHVwZGF0ZSBh
c3luY2hyb25vdXNseSwgc28gd2UgbXVzdCB3YWl0IGEgYml0LiAqLwotICAgIGdfdGltZW91dF9h
ZGQoMTAwLCBxdWl0X2FmdGVyX3Nob3J0X2RlbGF5X2NiLCBsb29wKTsKLSAgICBnX21haW5fbG9v
cF9ydW4obG9vcCk7Ci0KLSAgICBhZGp1c3RtZW50ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19nZXRf
dmFkanVzdG1lbnQoR1RLX1NDUk9MTEVEX1dJTkRPVyhzY3JvbGxlZF93aW5kb3cpKTsKLSAgICBn
X2Fzc2VydF9jbXBmbG9hdChndGtfYWRqdXN0bWVudF9nZXRfdmFsdWUoYWRqdXN0bWVudCksID09
LCAwLjApOwotCi0gICAgbG93ZXIgPSBndGtfYWRqdXN0bWVudF9nZXRfbG93ZXIoYWRqdXN0bWVu
dCk7Ci0gICAgdXBwZXIgPSBndGtfYWRqdXN0bWVudF9nZXRfdXBwZXIoYWRqdXN0bWVudCk7Ci0K
LSAgICAvKiBTY3JvbGwgdGhlIHZpZXcgdXNpbmcgSmF2YVNjcmlwdCAqLwotICAgIHdlYmtpdF93
ZWJfdmlld19leGVjdXRlX3NjcmlwdCh2aWV3LCAid2luZG93LnNjcm9sbEJ5KDAsIDEwMCkiKTsK
LQotICAgIC8qIEFkanVzdG1lbnRzIHVwZGF0ZSBhc3luY2hyb25vdXNseSwgc28gd2UgbXVzdCB3
YWl0IGEgYml0LiAqLwotICAgIGdfdGltZW91dF9hZGQoMTAwLCBxdWl0X2FmdGVyX3Nob3J0X2Rl
bGF5X2NiLCBsb29wKTsKLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICAvKiBNYWtl
IHN1cmUgdGhlIFNjcm9sbGVkV2luZG93IG5vdGljZWQgdGhlIHNjcm9sbCAqLwotICAgIGdfYXNz
ZXJ0X2NtcGZsb2F0KGd0a19hZGp1c3RtZW50X2dldF92YWx1ZShhZGp1c3RtZW50KSwgPT0sIDEw
MC4wKTsKLQotICAgIC8qIExvYWQgYSBzZWNvbmQgVVJJICovCi0gICAgd2Via2l0X3dlYl92aWV3
X2xvYWRfdXJpKHZpZXcsIHNlY29uZF91cmkpOwotICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsK
LQotICAgIC8qIFRoZSBwYWdlIGxvYWRlZCBidXQgdGhlIGFkanVzdG1lbnRzIG1heSBub3QgYmUg
dXBkYXRlZCB5ZXQuIFdhaXQgYSBiaXQuICovCi0gICAgZ190aW1lb3V0X2FkZCgxMDAsIHF1aXRf
YWZ0ZXJfc2hvcnRfZGVsYXlfY2IsIGxvb3ApOwotICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsK
LQotICAgIC8qIE1ha2Ugc3VyZSB0aGUgc2Nyb2xsYmFyIGhhcyBiZWVuIHJlc2V0ICovCi0gICAg
Z19hc3NlcnRfY21wZmxvYXQoZ3RrX2FkanVzdG1lbnRfZ2V0X3ZhbHVlKGFkanVzdG1lbnQpLCA9
PSwgMC4wKTsKLQotICAgIC8qIEdvIGJhY2sgKi8KLSAgICB3ZWJraXRfd2ViX3ZpZXdfZ29fYmFj
ayh2aWV3KTsKLQotICAgIC8qIFdoZW4gdXNpbmcgcGFnZSBjYWNoZSwgZ29fYmFjayB3aWxsIHJl
dHVybiBzeW5jcm9ub3VzbHkgKi8KLSAgICBpZiAoIXdpdGhfcGFnZV9jYWNoZSkKLSAgICAgICAg
Z19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAgLyogTWFrZSBzdXJlIEdUSysgaGFzIHRpbWUg
dG8gcHJvY2VzcyB0aGUgY2hhbmdlcyBpbiBzaXplLCBmb3IgdGhlIGFkanVzbWVudHMgKi8KLSAg
ICB3aGlsZSAoZ3RrX2V2ZW50c19wZW5kaW5nKCkpCi0gICAgICAgIGd0a19tYWluX2l0ZXJhdGlv
bigpOwotCi0gICAgLyogTWFrZSBzdXJlIHVwcGVyIGFuZCBsb3dlciBib3VuZHMgaGF2ZSBiZWVu
IHJlc3RvcmVkIGNvcnJlY3RseSAqLwotICAgIGdfYXNzZXJ0X2NtcGZsb2F0KGxvd2VyLCA9PSwg
Z3RrX2FkanVzdG1lbnRfZ2V0X2xvd2VyKGFkanVzdG1lbnQpKTsKLSAgICBnX2Fzc2VydF9jbXBm
bG9hdCh1cHBlciwgPT0sIGd0a19hZGp1c3RtZW50X2dldF91cHBlcihhZGp1c3RtZW50KSk7Ci0g
ICAgZ19hc3NlcnRfY21wZmxvYXQoZ3RrX2FkanVzdG1lbnRfZ2V0X3ZhbHVlKGFkanVzdG1lbnQp
LCA9PSwgMTAwLjApOwotCi0gICAgZ19mcmVlKGVmZmVjdGl2ZV91cmkpOwotICAgIGdfZnJlZShz
ZWNvbmRfdXJpKTsKLQotICAgIGd0a193aWRnZXRfZGVzdHJveSh3aW5kb3cpOwotfQotCi1zdGF0
aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfdmlld19hZGp1c3RtZW50cygpCi17Ci0gICAgLyogVGVz
dCB0aGlzIHdpdGggcGFnZSBjYWNoZSBkaXNhYmxlZCwgYW5kIGVuYWJsZWQuICovCi0gICAgZG9f
dGVzdF93ZWJraXRfd2ViX3ZpZXdfYWRqdXN0bWVudHMoRkFMU0UpOwotICAgIGRvX3Rlc3Rfd2Vi
a2l0X3dlYl92aWV3X2FkanVzdG1lbnRzKFRSVUUpOwotfQotCi1nYm9vbGVhbiBkZWxheWVkX2Rl
c3Ryb3koZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koR1RLX1dJREdF
VChkYXRhKSk7Ci0gICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKLSAgICByZXR1cm4gRkFMU0U7
Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl92aWV3X2Rlc3Ryb3koKQotewotICAg
IEd0a1dpZGdldCogd2luZG93OwotICAgIEd0a1dpZGdldCogd2ViX3ZpZXc7Ci0KLSAgICB3aW5k
b3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKLSAgICB3ZWJfdmlldyA9
IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKLQotICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05U
QUlORVIod2luZG93KSwgd2ViX3ZpZXcpOwotCi0gICAgZ3RrX3dpZGdldF9zaG93X2FsbCh3aW5k
b3cpOwotCi0gICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLQotICAgIGdf
c2lnbmFsX2Nvbm5lY3Qod2luZG93LCAibWFwLWV2ZW50IiwKLSAgICAgICAgICAgICAgICAgICAg
IEdfQ0FMTEJBQ0sobWFwX2V2ZW50X2NiKSwgbG9vcCk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGxv
b3ApOwotCi0gICAgZ19pZGxlX2FkZChkZWxheWVkX2Rlc3Ryb3ksIHdlYl92aWV3KTsKLSAgICBn
X21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kod2luZG93KTsK
LX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3ZpZXdfd2luZG93X2ZlYXR1cmVzKCkK
LXsKLSAgICBHdGtXaWRnZXQqIHdpbmRvdzsKLSAgICBHdGtXaWRnZXQqIHdlYl92aWV3OwotICAg
IAotICAgIHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOwotICAg
IHdlYl92aWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygpOwotICAgIAotICAgIGd0a19jb250YWlu
ZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgd2ViX3ZpZXcpOwotICAgIAotICAgIGd0a193
aWRnZXRfc2hvd19hbGwod2luZG93KTsKLSAgICAKLSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3
KE5VTEwsIFRSVUUpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh3aW5kb3csICJtYXAtZXZlbnQi
LAotICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhtYXBfZXZlbnRfY2IpLCBsb29wKTsK
LSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0gICAgCi0gICAgLyogQnVnICMzNjE0NCAqLwot
ICAgIGdfb2JqZWN0X3NldChHX09CSkVDVCh3ZWJfdmlldyksICJ3aW5kb3ctZmVhdHVyZXMiLCBO
VUxMLCBOVUxMKTsKLSAgICAKLSAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kod2luZG93KTsKLX0gICAg
Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl92aWV3X2luX29mZnNjcmVlbl93aW5kb3df
ZG9lc19ub3RfY3Jhc2goKQotewotICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJV
RSk7Ci0KLSAgICBHdGtXaWRnZXQgKndpbmRvdyA9IGd0a19vZmZzY3JlZW5fd2luZG93X25ldygp
OwotICAgIEd0a1dpZGdldCAqd2ViX3ZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7Ci0KLSAg
ICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHdlYl92aWV3KTsKLSAg
ICBndGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdCh3ZWJf
dmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLCBHX0NBTExCQUNLKGlkbGVfcXVpdF9sb29wX2Ni
KSwgTlVMTCk7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKFdFQktJVF9XRUJfVklFVyh3
ZWJfdmlldyksIGJhc2VfdXJpKTsKLQotICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLQotICAg
IGd0a193aWRnZXRfZGVzdHJveSh3aW5kb3cpOwotICAgIGdfbWFpbl9sb29wX3VucmVmKGxvb3Ap
OwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfdmlld19kb2VzX25vdF9zdGVhbF9m
b2N1cygpCi17Ci0gICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLQotICAg
IEd0a1dpZGdldCAqd2luZG93ID0gZ3RrX29mZnNjcmVlbl93aW5kb3dfbmV3KCk7Ci0gICAgR3Rr
V2lkZ2V0ICp3ZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygpOwotICAgIEd0a1dpZGdldCAq
ZW50cnkgPSBndGtfZW50cnlfbmV3KCk7Ci0KLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotICAg
IEd0a1dpZGdldCAqYm94ID0gZ3RrX2hib3hfbmV3KEZBTFNFLCAwKTsKLSNlbHNlCi0gICAgR3Rr
V2lkZ2V0ICpib3ggPSBndGtfYm94X25ldyhHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTCwgMCk7
Ci0jZW5kaWYKLQotICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIoYm94KSwgd2Vi
Vmlldyk7Ci0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihib3gpLCBlbnRyeSk7
Ci0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCBib3gpOwotICAg
IGd0a193aWRnZXRfc2hvd19hbGwod2luZG93KTsKLQotICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1
cyhlbnRyeSk7Ci0gICAgZ19hc3NlcnQoZ3RrX3dpZGdldF9pc19mb2N1cyhlbnRyeSkpOwotCi0g
ICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FM
TEJBQ0soaWRsZV9xdWl0X2xvb3BfY2IpLCBOVUxMKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9h
ZF9odG1sX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldyksCi0gICAgICAgICI8aHRtbD48
Ym9keT4iCi0gICAgICAgICIgICAgPGlucHV0IGlkPVwiZW50cnlcIiB0eXBlPVwidGV4dFwiLz4i
Ci0gICAgICAgICIgICAgPHNjcmlwdD4iCi0gICAgICAgICIgICAgICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKFwiZW50cnlcIikuZm9jdXMoKTsiCi0gICAgICAgICIgICAgPC9zY3JpcHQ+Igot
ICAgICAgICAiPC9ib2R5PjwvaHRtbD4iLCAiZmlsZTovLyIpOwotCi0gICAgZ19tYWluX2xvb3Bf
cnVuKGxvb3ApOwotCi0gICAgZ19hc3NlcnQoZ3RrX3dpZGdldF9pc19mb2N1cyhlbnRyeSkpOwot
Ci0gICAgZ3RrX3dpZGdldF9kZXN0cm95KHdpbmRvdyk7Ci0gICAgZ19tYWluX2xvb3BfdW5yZWYo
bG9vcCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBlbWl0S2V5U3Ryb2tlKFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcpCi17Ci0gICAgR2RrRXZlbnQqIHByZXNzRXZlbnQgPSBnZGtfZXZlbnRfbmV3KEdE
S19LRVlfUFJFU1MpOwotICAgIHByZXNzRXZlbnQtPmtleS5rZXl2YWwgPSBHREtfS0VZX2Y7Ci0g
ICAgR2RrV2luZG93KiB3aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3coR1RLX1dJREdFVCh3
ZWJWaWV3KSk7Ci0gICAgcHJlc3NFdmVudC0+a2V5LndpbmRvdyA9IHdpbmRvdzsKLSAgICBnX29i
amVjdF9yZWYocHJlc3NFdmVudC0+a2V5LndpbmRvdyk7Ci0KLSNpZm5kZWYgR1RLX0FQSV9WRVJT
SU9OXzIKLSAgICBHZGtEZXZpY2VNYW5hZ2VyKiBtYW5hZ2VyID0gZ2RrX2Rpc3BsYXlfZ2V0X2Rl
dmljZV9tYW5hZ2VyKGdka193aW5kb3dfZ2V0X2Rpc3BsYXkod2luZG93KSk7Ci0gICAgZ2RrX2V2
ZW50X3NldF9kZXZpY2UocHJlc3NFdmVudCwgZ2RrX2RldmljZV9tYW5hZ2VyX2dldF9jbGllbnRf
cG9pbnRlcihtYW5hZ2VyKSk7Ci0jZW5kaWYKLQotICAgIC8vIFdoZW4gc3ludGhlc2l6aW5nIGFu
IGV2ZW50LCBhbiBpbnZhbGlkIGhhcmR3YXJlX2tleWNvZGUgdmFsdWUKLSAgICAvLyBjYW4gY2F1
c2UgaXQgdG8gYmUgYmFkbHkgcHJvY2Vzc2VkIGJ5IEd0aysuCi0gICAgR2RrS2V5bWFwS2V5KiBr
ZXlzOwotICAgIGdpbnQgbl9rZXlzOwotICAgIGlmIChnZGtfa2V5bWFwX2dldF9lbnRyaWVzX2Zv
cl9rZXl2YWwoZ2RrX2tleW1hcF9nZXRfZGVmYXVsdCgpLCBHREtfS0VZX2YsICZrZXlzLCAmbl9r
ZXlzKSkgewotICAgICAgICBwcmVzc0V2ZW50LT5rZXkuaGFyZHdhcmVfa2V5Y29kZSA9IGtleXNb
MF0ua2V5Y29kZTsKLSAgICAgICAgZ19mcmVlKGtleXMpOwotICAgIH0KLQotICAgIEdka0V2ZW50
KiByZWxlYXNlRXZlbnQgPSBnZGtfZXZlbnRfY29weShwcmVzc0V2ZW50KTsKLSAgICBndGtfbWFp
bl9kb19ldmVudChwcmVzc0V2ZW50KTsKLSAgICBnZGtfZXZlbnRfZnJlZShwcmVzc0V2ZW50KTsK
LSAgICByZWxlYXNlRXZlbnQtPmtleS50eXBlID0gR0RLX0tFWV9SRUxFQVNFOwotICAgIGd0a19t
YWluX2RvX2V2ZW50KHJlbGVhc2VFdmVudCk7Ci0gICAgZ2RrX2V2ZW50X2ZyZWUocmVsZWFzZUV2
ZW50KTsKLQotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGdib29sZWFuIGVudGVyaW5n
X2Z1bGxzY3JlZW5fY2IoV2ViS2l0V2ViVmlldyogd2ViVmlldywgR09iamVjdCogZWxlbWVudCwg
Z2Jvb2xlYW4gYmxvY2tlZCkKLXsKLSAgICBpZiAoYmxvY2tlZCkKLSAgICAgICAgZ19tYWluX2xv
b3BfcXVpdChsb29wKTsKLSAgICBlbHNlCi0gICAgICAgIGdfdGltZW91dF9hZGQoMjAwLCAoR1Nv
dXJjZUZ1bmMpIGVtaXRLZXlTdHJva2UsIHdlYlZpZXcpOwotICAgIHJldHVybiBibG9ja2VkOwot
fQotCi1zdGF0aWMgZ2Jvb2xlYW4gbGVhdmluZ19mdWxsc2NyZWVuX2NiKFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcsIEdPYmplY3QqIGVsZW1lbnQsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19tYWlu
X2xvb3BfcXVpdChsb29wKTsKLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lkIHRl
c3Rfd2Via2l0X3dlYl92aWV3X2Z1bGxzY3JlZW4oZ2NvbnN0cG9pbnRlciBibG9ja2VkKQotewot
ICAgIEd0a1dpZGdldCogd2luZG93OwotICAgIEd0a1dpZGdldCogd2ViX3ZpZXc7Ci0gICAgV2Vi
S2l0V2ViU2V0dGluZ3MgKnNldHRpbmdzOwotCi0gICAgd2luZG93ID0gZ3RrX3dpbmRvd19uZXco
R1RLX1dJTkRPV19UT1BMRVZFTCk7Ci0gICAgd2ViX3ZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3
KCk7Ci0KLSAgICBzZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3MoV0VCS0lU
X1dFQl9WSUVXKHdlYl92aWV3KSk7Ci0gICAgZ19vYmplY3Rfc2V0KHNldHRpbmdzLCAiZW5hYmxl
LWZ1bGxzY3JlZW4iLCBUUlVFLCBOVUxMKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X3NldHRp
bmdzKFdFQktJVF9XRUJfVklFVyh3ZWJfdmlldyksIHNldHRpbmdzKTsKLQotICAgIGd0a19jb250
YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgd2ViX3ZpZXcpOwotCi0gICAgZ3RrX3dp
ZGdldF9zaG93X2FsbCh3aW5kb3cpOwotCi0gICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxM
LCBUUlVFKTsKLQotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViX3ZpZXcsICJlbnRlcmluZy1mdWxs
c2NyZWVuIiwgR19DQUxMQkFDSyhlbnRlcmluZ19mdWxsc2NyZWVuX2NiKSwgKGdwb2ludGVyKSBi
bG9ja2VkKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHdlYl92aWV3LCAibGVhdmluZy1mdWxsc2Ny
ZWVuIiwgR19DQUxMQkFDSyhsZWF2aW5nX2Z1bGxzY3JlZW5fY2IpLCBOVUxMKTsKLQotICAgIHdl
YmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcod2ViX3ZpZXcpLCAiPGh0
bWw+PGJvZHk+IgotICAgICAgICAgICAgICAgICAgICI8c2NyaXB0PiIKLSAgICAgICAgICAgICAg
ICAgICAidmFyIGV2ZW50TmFtZSA9ICdrZXlwcmVzcyc7IgotICAgICAgICAgICAgICAgICAgICJk
b2N1bWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZnVuY3Rpb24gKCkgeyIKLSAgICAg
ICAgICAgICAgICAgICAiICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC53ZWJraXRSZXF1ZXN0
RnVsbFNjcmVlbigpOyIKLSAgICAgICAgICAgICAgICAgICAifSwgZmFsc2UpOyIKLSAgICAgICAg
ICAgICAgICAgICAiPC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4iLCBOVUxMLCBOVUxMLCBOVUxMKTsK
LQotICAgIGdfdGltZW91dF9hZGQoMTAwLCAoR1NvdXJjZUZ1bmMpIGVtaXRLZXlTdHJva2UsIFdF
QktJVF9XRUJfVklFVyh3ZWJfdmlldykpOwotICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLQot
ICAgIGd0a193aWRnZXRfZGVzdHJveSh3aW5kb3cpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gY2hl
Y2tNaW1lVHlwZUZvckZpbHRlcihHdGtGaWxlRmlsdGVyKiBmaWx0ZXIsIGNvbnN0IGdjaGFyKiBt
aW1lVHlwZSkKLXsKLSAgICBHdGtGaWxlRmlsdGVySW5mbyBmaWx0ZXJfaW5mbzsKLSAgICBmaWx0
ZXJfaW5mby5jb250YWlucyA9IEdUS19GSUxFX0ZJTFRFUl9NSU1FX1RZUEU7Ci0gICAgZmlsdGVy
X2luZm8ubWltZV90eXBlID0gbWltZVR5cGU7Ci0gICAgcmV0dXJuIGd0a19maWxlX2ZpbHRlcl9m
aWx0ZXIoZmlsdGVyLCAmZmlsdGVyX2luZm8pOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gcnVuRmls
ZUNob29zZXJDYk5vTXVsdGlzZWxOb01pbWUoV2ViS2l0V2ViVmlldyogd2VidmlldywgV2ViS2l0
RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0LCBncG9pbnRlciBkYXRhKQotewotICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdF9tdWx0aXBsZShyZXF1
ZXN0KSk7Ci0KLSAgICBjb25zdCBnY2hhciogY29uc3QqIG1pbWVUeXBlcyA9IHdlYmtpdF9maWxl
X2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcyhyZXF1ZXN0KTsKLSAgICBnX2Fzc2VydCgh
bWltZVR5cGVzKTsKLSAgICBHdGtGaWxlRmlsdGVyKiBmaWx0ZXIgPSB3ZWJraXRfZmlsZV9jaG9v
c2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyKHJlcXVlc3QpOwotICAgIGdfYXNzZXJ0
KCFmaWx0ZXIpOwotCi0gICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBzZWxlY3RlZEZpbGVzID0gd2Vi
a2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0KTsKLSAg
ICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxlcyk7Ci0KLSAgICBnX21haW5fbG9vcF9xdWl0KGxvb3Ap
OwotICAgIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gcnVuRmlsZUNob29zZXJD
Yk11bHRpc2VsTm9NaW1lKFdlYktpdFdlYlZpZXcqIHdlYnZpZXcsIFdlYktpdEZpbGVDaG9vc2Vy
UmVxdWVzdCogcmVxdWVzdCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBnX2Fzc2VydCh3ZWJraXRf
ZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdF9tdWx0aXBsZShyZXF1ZXN0KSk7Ci0KLSAg
ICBjb25zdCBnY2hhciogY29uc3QqIG1pbWVUeXBlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVx
dWVzdF9nZXRfbWltZV90eXBlcyhyZXF1ZXN0KTsKLSAgICBnX2Fzc2VydCghbWltZVR5cGVzKTsK
LSAgICBHdGtGaWxlRmlsdGVyKiBmaWx0ZXIgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rf
Z2V0X21pbWVfdHlwZXNfZmlsdGVyKHJlcXVlc3QpOwotICAgIGdfYXNzZXJ0KCFmaWx0ZXIpOwot
ICAgIGNvbnN0IGdjaGFyKiBjb25zdCogc2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9maWxlX2Nob29z
ZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMocmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQoIXNl
bGVjdGVkRmlsZXMpOwotCi0gICAgLy8gU2VsZWN0IHNvbWUgZmlsZXMuCi0gICAgY29uc3QgZ2No
YXIqIGZpbGVzVG9TZWxlY3RbNF0gPSB7ICIvZm9vIiwgIi9mb28vYmFyIiwgIi9mb28vYmFyL2Jh
eiIsIDAgfTsKLSAgICB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rfc2VsZWN0X2ZpbGVzKHJl
cXVlc3QsIGZpbGVzVG9TZWxlY3QpOwotCi0gICAgLy8gQ2hlY2sgdGhlIGZpbGVzIHRoYXQgaGF2
ZSBiZWVuIGp1c3Qgc2VsZWN0ZWQuCi0gICAgc2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9maWxlX2No
b29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMocmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQo
c2VsZWN0ZWRGaWxlcyk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMF0sID09
LCAiL2ZvbyIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzFdLCA9PSwgIi9m
b28vYmFyIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMl0sID09LCAiL2Zv
by9iYXIvYmF6Iik7Ci0gICAgZ19hc3NlcnQoIXNlbGVjdGVkRmlsZXNbM10pOwotCi0gICAgZ19t
YWluX2xvb3BfcXVpdChsb29wKTsKLSAgICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29s
ZWFuIHJ1bkZpbGVDaG9vc2VyQ2JTZWxlY3Rpb25SZXRhaW5lZChXZWJLaXRXZWJWaWV3KiB3ZWJ2
aWV3LCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QsIGdwb2ludGVyIGRhdGEpCi17
Ci0gICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2ZpbGVfY2hv
b3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0KTsKLSAgICBnX2Fzc2VydChz
ZWxlY3RlZEZpbGVzKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1swXSwgPT0s
ICIvZm9vIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMV0sID09LCAiL2Zv
by9iYXIiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1syXSwgPT0sICIvZm9v
L2Jhci9iYXoiKTsKLSAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxlc1szXSk7Ci0KLSAgICBnX21h
aW5fbG9vcF9xdWl0KGxvb3ApOwotICAgIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xl
YW4gcnVuRmlsZUNob29zZXJDYk5vTXVsdGlzZWxBY2NlcHRUeXBlcyhXZWJLaXRXZWJWaWV3KiB3
ZWJ2aWV3LCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QsIGdwb2ludGVyIGRhdGEp
Ci17Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0
X211bHRpcGxlKHJlcXVlc3QpKTsKLQotICAgIGNvbnN0IGdjaGFyKiBjb25zdCogbWltZVR5cGVz
ID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKHJlcXVlc3QpOwot
ICAgIGdfYXNzZXJ0KG1pbWVUeXBlcyk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKG1pbWVUeXBlc1sw
XSwgPT0sICJhdWRpby8qIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKG1pbWVUeXBlc1sxXSwgPT0s
ICJ2aWRlby8qIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKG1pbWVUeXBlc1syXSwgPT0sICJpbWFn
ZS8qIik7Ci0gICAgZ19hc3NlcnQoIW1pbWVUeXBlc1szXSk7Ci0KLSAgICBHdGtGaWxlRmlsdGVy
KiBmaWx0ZXIgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmls
dGVyKHJlcXVlc3QpOwotICAgIGdfYXNzZXJ0KEdUS19JU19GSUxFX0ZJTFRFUihmaWx0ZXIpKTsK
LSAgICBnX2Fzc2VydChjaGVja01pbWVUeXBlRm9yRmlsdGVyKGZpbHRlciwgImF1ZGlvLyoiKSk7
Ci0gICAgZ19hc3NlcnQoY2hlY2tNaW1lVHlwZUZvckZpbHRlcihmaWx0ZXIsICJ2aWRlby8qIikp
OwotICAgIGdfYXNzZXJ0KGNoZWNrTWltZVR5cGVGb3JGaWx0ZXIoZmlsdGVyLCAiaW1hZ2UvKiIp
KTsKLQotICAgIGNvbnN0IGdjaGFyKiBjb25zdCogc2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9maWxl
X2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMocmVxdWVzdCk7Ci0gICAgZ19hc3Nl
cnQoIXNlbGVjdGVkRmlsZXMpOwotCi0gICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKLSAgICBy
ZXR1cm4gVFJVRTsKLX0KLQotdm9pZCBkb01vdXNlQnV0dG9uRXZlbnQoR3RrV2lkZ2V0KiB3aWRn
ZXQsIEdka0V2ZW50VHlwZSBldmVudFR5cGUsIGludCB4LCBpbnQgeSwgdW5zaWduZWQgaW50IGJ1
dHRvbiwgdW5zaWduZWQgaW50IG1vZGlmaWVycykKLXsKLSAgICBnX2Fzc2VydChndGtfd2lkZ2V0
X2dldF9yZWFsaXplZCh3aWRnZXQpKTsKLQotICAgIEdka0V2ZW50KiBldmVudCA9IGdka19ldmVu
dF9uZXcoZXZlbnRUeXBlKTsKLSAgICBldmVudC0+YnV0dG9uLndpbmRvdyA9IGd0a193aWRnZXRf
Z2V0X3dpbmRvdyh3aWRnZXQpOwotICAgIGdfb2JqZWN0X3JlZihldmVudC0+YnV0dG9uLndpbmRv
dyk7Ci0KLSAgICBldmVudC0+YnV0dG9uLnRpbWUgPSBHREtfQ1VSUkVOVF9USU1FOwotICAgIGV2
ZW50LT5idXR0b24ueCA9IHg7Ci0gICAgZXZlbnQtPmJ1dHRvbi55ID0geTsKLSAgICBldmVudC0+
YnV0dG9uLmF4ZXMgPSAwOwotICAgIGV2ZW50LT5idXR0b24uc3RhdGUgPSBtb2RpZmllcnM7Ci0g
ICAgZXZlbnQtPmJ1dHRvbi5idXR0b24gPSBidXR0b247Ci0KLSNpZm5kZWYgR1RLX0FQSV9WRVJT
SU9OXzIKLSAgICBldmVudC0+YnV0dG9uLmRldmljZSA9IGdka19kZXZpY2VfbWFuYWdlcl9nZXRf
Y2xpZW50X3BvaW50ZXIoZ2RrX2Rpc3BsYXlfZ2V0X2RldmljZV9tYW5hZ2VyKGd0a193aWRnZXRf
Z2V0X2Rpc3BsYXkod2lkZ2V0KSkpOwotI2VuZGlmCi0KLSAgICBpbnQgeFJvb3QsIHlSb290Owot
ICAgIGdka193aW5kb3dfZ2V0X3Jvb3RfY29vcmRzKGd0a193aWRnZXRfZ2V0X3dpbmRvdyh3aWRn
ZXQpLCB4LCB5LCAmeFJvb3QsICZ5Um9vdCk7Ci0gICAgZXZlbnQtPmJ1dHRvbi54X3Jvb3QgPSB4
Um9vdDsKLSAgICBldmVudC0+YnV0dG9uLnlfcm9vdCA9IHlSb290OwotICAgIGd0a19tYWluX2Rv
X2V2ZW50KGV2ZW50KTsKLX0KLQotc3RhdGljIHZvaWQgY2xpY2tNb3VzZUJ1dHRvbihHdGtXaWRn
ZXQqIHdpZGdldCwgaW50IHgsIGludCB5LCB1bnNpZ25lZCBpbnQgYnV0dG9uLCB1bnNpZ25lZCBp
bnQgbW9kaWZpZXJzKQotewotICAgIGRvTW91c2VCdXR0b25FdmVudCh3aWRnZXQsIEdES19CVVRU
T05fUFJFU1MsIHgsIHksIGJ1dHRvbiwgbW9kaWZpZXJzKTsKLSAgICBkb01vdXNlQnV0dG9uRXZl
bnQod2lkZ2V0LCBHREtfQlVUVE9OX1JFTEVBU0UsIHgsIHksIGJ1dHRvbiwgbW9kaWZpZXJzKTsK
LX0KLQotc3RhdGljIGdib29sZWFuIGNsaWNrTW91c2VCdXR0b25BbmRXYWl0Rm9yRmlsZUNob29z
ZXJSZXF1ZXN0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCi17Ci0gICAgY2xpY2tNb3VzZUJ1dHRv
bihHVEtfV0lER0VUKHdlYlZpZXcpLCA1LCA1LCAxLCAwKTsKLSAgICByZXR1cm4gVFJVRTsKLX0K
LQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3ZpZXdfZmlsZV9jaG9vc2VyKCkKLXsKLSAg
ICBjb25zdCBnY2hhciogaHRtbEZvcm1hdEJhc2UgPSAiPGh0bWw+PGJvZHk+IgotICAgICAgICAg
ICAgIjxpbnB1dCBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDowO21hcmdpbjow
O3BhZGRpbmc6MCcgdHlwZT0nZmlsZScgJXMvPiIKLSAgICAgICAgICAgICI8L2JvZHk+PC9odG1s
PiI7Ci0KLSAgICBHdGtXaWRnZXQqIHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1df
VE9QTEVWRUwpOwotICAgIEd0a1dpZGdldCogd2ViVmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXco
KTsKLSAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHdlYlZpZXcp
OwotICAgIGd0a193aWRnZXRfc2hvd19hbGwod2luZG93KTsKLQotICAgIGxvb3AgPSBnX21haW5f
bG9vcF9uZXcoTlVMTCwgVFJVRSk7Ci0KLSAgICAvLyBNdWx0aXBsZSBzZWxlY3Rpb25zIG5vdCBh
bGxvd2VkLCBubyBNSU1FIGZpbHRlcmluZy4KLSAgICBndWxvbmcgaGFuZGxlciA9IGdfc2lnbmFs
X2Nvbm5lY3Qod2ViVmlldywgInJ1bi1maWxlLWNob29zZXIiLCBHX0NBTExCQUNLKHJ1bkZpbGVD
aG9vc2VyQ2JOb011bHRpc2VsTm9NaW1lKSwgTlVMTCk7Ci0gICAgZ2NoYXIqIGh0bWxGb3JtYXQg
PSBnX3N0cmR1cF9wcmludGYoaHRtbEZvcm1hdEJhc2UsICIiKTsKLSAgICB3ZWJraXRfd2ViX3Zp
ZXdfbG9hZF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpLCBodG1sRm9ybWF0LCBOVUxM
LCBOVUxMLCBOVUxMKTsKLSAgICBnX2ZyZWUoaHRtbEZvcm1hdCk7Ci0KLSAgICBnX3RpbWVvdXRf
YWRkKDEwMCwgKEdTb3VyY2VGdW5jKSBjbGlja01vdXNlQnV0dG9uQW5kV2FpdEZvckZpbGVDaG9v
c2VyUmVxdWVzdCwgV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpKTsKLSAgICBnX21haW5fbG9vcF9y
dW4obG9vcCk7Ci0KLSAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3Qod2ViVmlldywgaGFu
ZGxlcik7Ci0KLSAgICAvLyBNdWx0aXBsZSBzZWxlY3Rpb25zIGFsbG93ZWQsIG5vIE1JTUUgZmls
dGVyaW5nLCBzb21lIHByZS1zZWxlY3RlZCBmaWxlcy4KLSAgICBoYW5kbGVyID0gZ19zaWduYWxf
Y29ubmVjdCh3ZWJWaWV3LCAicnVuLWZpbGUtY2hvb3NlciIsIEdfQ0FMTEJBQ0socnVuRmlsZUNo
b29zZXJDYk11bHRpc2VsTm9NaW1lKSwgTlVMTCk7Ci0gICAgaHRtbEZvcm1hdCA9IGdfc3RyZHVw
X3ByaW50ZihodG1sRm9ybWF0QmFzZSwgIm11bHRpcGxlIik7Ci0gICAgd2Via2l0X3dlYl92aWV3
X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3KSwgaHRtbEZvcm1hdCwgTlVMTCwg
TlVMTCwgTlVMTCk7Ci0gICAgZ19mcmVlKGh0bWxGb3JtYXQpOwotCi0gICAgZ190aW1lb3V0X2Fk
ZCgxMDAsIChHU291cmNlRnVuYykgY2xpY2tNb3VzZUJ1dHRvbkFuZFdhaXRGb3JGaWxlQ2hvb3Nl
clJlcXVlc3QsIFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3KSk7Ci0gICAgZ19tYWluX2xvb3BfcnVu
KGxvb3ApOwotCi0gICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KHdlYlZpZXcsIGhhbmRs
ZXIpOwotCi0gICAgLy8gUGVyZm9ybSBhbm90aGVyIHJlcXVlc3QgdG8gY2hlY2sgaWYgdGhlIGxp
c3Qgb2YgZmlsZXMgc2VsZWN0ZWQKLSAgICAvLyBpbiB0aGUgcHJldmlvdXMgc3RlcCBhcHBlYXJz
IG5vdyBhcyBwYXJ0IG9mIHRoZSBuZXcgcmVxdWVzdC4KLSAgICBoYW5kbGVyID0gZ19zaWduYWxf
Y29ubmVjdCh3ZWJWaWV3LCAicnVuLWZpbGUtY2hvb3NlciIsIEdfQ0FMTEJBQ0socnVuRmlsZUNo
b29zZXJDYlNlbGVjdGlvblJldGFpbmVkKSwgTlVMTCk7Ci0gICAgZ190aW1lb3V0X2FkZCgxMDAs
IChHU291cmNlRnVuYykgY2xpY2tNb3VzZUJ1dHRvbkFuZFdhaXRGb3JGaWxlQ2hvb3NlclJlcXVl
c3QsIFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3KSk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3Ap
OwotCi0gICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KHdlYlZpZXcsIGhhbmRsZXIpOwot
Ci0gICAgLy8gTXVsdGlwbGUgc2VsZWN0aW9ucyBub3QgYWxsb3dlZCwgb25seSBhY2NlcHQgaW1h
Z2VzLCBhdWRpbyBhbmQgdmlkZW8gZmlsZXMuCi0gICAgaGFuZGxlciA9IGdfc2lnbmFsX2Nvbm5l
Y3Qod2ViVmlldywgInJ1bi1maWxlLWNob29zZXIiLCBHX0NBTExCQUNLKHJ1bkZpbGVDaG9vc2Vy
Q2JOb011bHRpc2VsQWNjZXB0VHlwZXMpLCBOVUxMKTsKLSAgICBodG1sRm9ybWF0ID0gZ19zdHJk
dXBfcHJpbnRmKGh0bWxGb3JtYXRCYXNlLCAiYWNjZXB0PSdhdWRpby8qLHZpZGVvLyosaW1hZ2Uv
KiciKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVXKHdl
YlZpZXcpLCBodG1sRm9ybWF0LCBOVUxMLCBOVUxMLCBOVUxMKTsKLSAgICBnX2ZyZWUoaHRtbEZv
cm1hdCk7Ci0KLSAgICBnX3RpbWVvdXRfYWRkKDEwMCwgKEdTb3VyY2VGdW5jKSBjbGlja01vdXNl
QnV0dG9uQW5kV2FpdEZvckZpbGVDaG9vc2VyUmVxdWVzdCwgV0VCS0lUX1dFQl9WSUVXKHdlYlZp
ZXcpKTsKLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICBnX3NpZ25hbF9oYW5kbGVy
X2Rpc2Nvbm5lY3Qod2ViVmlldywgaGFuZGxlcik7Ci0gICAgZ3RrX3dpZGdldF9kZXN0cm95KHdp
bmRvdyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl92aWV3X3NvdXJjZV9tb2Rl
KCkKLXsKLSAgICBHdGtXaWRnZXQqIHdlYl92aWV3OwotCi0gICAgd2ViX3ZpZXcgPSB3ZWJraXRf
d2ViX3ZpZXdfbmV3KCk7Ci0KLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoV0VCS0lU
X1dFQl9WSUVXKHdlYl92aWV3KSwgIjxodG1sPjxib2R5PjwvYm9keT48L2h0bWw+IiwgTlVMTCwg
TlVMTCwgTlVMTCk7Ci0KLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2dldF92aWV3X3Nv
dXJjZV9tb2RlKFdFQktJVF9XRUJfVklFVyh3ZWJfdmlldykpKTsKLQotICAgIHdlYmtpdF93ZWJf
dmlld19zZXRfdmlld19zb3VyY2VfbW9kZShXRUJLSVRfV0VCX1ZJRVcod2ViX3ZpZXcpLCBUUlVF
KTsKLQotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19nZXRfdmlld19zb3VyY2VfbW9kZShX
RUJLSVRfV0VCX1ZJRVcod2ViX3ZpZXcpKSk7Ci0KLSAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X3Zp
ZXdfc291cmNlX21vZGUoV0VCS0lUX1dFQl9WSUVXKHdlYl92aWV3KSwgRkFMU0UpOwotCi0gICAg
Z19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19nZXRfdmlld19zb3VyY2VfbW9kZShXRUJLSVRfV0VC
X1ZJRVcod2ViX3ZpZXcpKSk7Ci0KLSAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kod2ViX3ZpZXcpOwot
fQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCi17Ci0gICAgU291cFNlcnZlciog
c2VydmVyOwotICAgIFNvdXBVUkkqIHNvdXBfdXJpOwotCi0gICAgZ3RrX3Rlc3RfaW5pdCgmYXJn
YywgJmFyZ3YsIE5VTEwpOwotCi0gICAgLyogSG9wZWZ1bGx5IG1ha2UgdGVzdCBpbmRlcGVuZGVu
dCBvZiB0aGUgcGF0aCBpdCdzIGNhbGxlZCBmcm9tLiAqLwotICAgIHRlc3R1dGlsc19yZWxhdGl2
ZV9jaGRpcigiU291cmNlL1dlYktpdC9ndGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3QuaHRtbCIsIGFy
Z3ZbMF0pOwotCi0gICAgc2VydmVyID0gc291cF9zZXJ2ZXJfbmV3KFNPVVBfU0VSVkVSX1BPUlQs
IDAsIE5VTEwpOwotICAgIHNvdXBfc2VydmVyX3J1bl9hc3luYyhzZXJ2ZXIpOwotCi0gICAgc291
cF9zZXJ2ZXJfYWRkX2hhbmRsZXIoc2VydmVyLCBOVUxMLCBzZXJ2ZXJfY2FsbGJhY2ssIE5VTEws
IE5VTEwpOwotCi0gICAgc291cF91cmkgPSBzb3VwX3VyaV9uZXcoImh0dHA6Ly8xMjcuMC4wLjEv
Iik7Ci0gICAgc291cF91cmlfc2V0X3BvcnQoc291cF91cmksIHNvdXBfc2VydmVyX2dldF9wb3J0
KHNlcnZlcikpOwotCi0gICAgYmFzZV91cmkgPSBzb3VwX3VyaV90b19zdHJpbmcoc291cF91cmks
IEZBTFNFKTsKLSAgICBzb3VwX3VyaV9mcmVlKHNvdXBfdXJpKTsKLQotICAgIGdfdGVzdF9idWdf
YmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIv
d2Via2l0L3dlYnZpZXcvaWNvbi11cmkiLCB0ZXN0X3dlYmtpdF93ZWJfdmlld19pY29uX3VyaSk7
Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnZpZXcvYWRqdXN0bWVudHMiLCB0ZXN0
X3dlYmtpdF93ZWJfdmlld19hZGp1c3RtZW50cyk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Vi
a2l0L3dlYnZpZXcvZGVzdHJveSIsIHRlc3Rfd2Via2l0X3dlYl92aWV3X2Rlc3Ryb3kpOwotICAg
IGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJ2aWV3L2dyYWJfZm9jdXMiLCB0ZXN0X3dlYmtp
dF93ZWJfdmlld19ncmFiX2ZvY3VzKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vi
dmlldy93aW5kb3ctZmVhdHVyZXMiLCB0ZXN0X3dlYmtpdF93ZWJfdmlld193aW5kb3dfZmVhdHVy
ZXMpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJ2aWV3L3dlYnZpZXctaW4tb2Zm
c2NyZWVuLXdpbmRvdy1kb2VzLW5vdC1jcmFzaCIsIHRlc3Rfd2Via2l0X3dlYl92aWV3X2luX29m
ZnNjcmVlbl93aW5kb3dfZG9lc19ub3RfY3Jhc2gpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dl
YmtpdC93ZWJ2aWV3L3dlYnZpZXctZG9lcy1ub3Qtc3RlYWwtZm9jdXMiLCB0ZXN0X3dlYmtpdF93
ZWJfdmlld19kb2VzX25vdF9zdGVhbF9mb2N1cyk7Ci0gICAgZ190ZXN0X2FkZF9kYXRhX2Z1bmMo
Ii93ZWJraXQvd2Vidmlldy9mdWxsc2NyZWVuIiwgR0lOVF9UT19QT0lOVEVSKEZBTFNFKSwgdGVz
dF93ZWJraXRfd2ViX3ZpZXdfZnVsbHNjcmVlbik7Ci0gICAgZ190ZXN0X2FkZF9kYXRhX2Z1bmMo
Ii93ZWJraXQvd2Vidmlldy9mdWxsc2NyZWVuLWJsb2NrZWQiLCBHSU5UX1RPX1BPSU5URVIoVFJV
RSksIHRlc3Rfd2Via2l0X3dlYl92aWV3X2Z1bGxzY3JlZW4pOwotICAgIGdfdGVzdF9hZGRfZnVu
YygiL3dlYmtpdC93ZWJ2aWV3L2ZpbGUtY2hvb3NlciIsIHRlc3Rfd2Via2l0X3dlYl92aWV3X2Zp
bGVfY2hvb3Nlcik7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnZpZXcvc291cmNl
LW1vZGUiLCB0ZXN0X3dlYmtpdF93ZWJfdmlld19zb3VyY2VfbW9kZSk7Ci0KLSAgICByZXR1cm4g
Z190ZXN0X3J1biAoKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rl
c3R3aW5kb3cuYyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3aW5kb3cuYwpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWVkYTQ3Yi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2d0ay90ZXN0cy90ZXN0d2luZG93LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBDb2xsYWJvcmEgTHRkLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4K
LQotc3RhdGljIHZvaWQgbm90aWZ5X2xvYWRfc3RhdHVzX2NiKFdlYktpdFdlYlZpZXcqIHdlYl92
aWV3LCBHUGFyYW1TcGVjKiBwc3BlYywgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBpZiAod2Via2l0
X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJfdmlldykgPT0gV0VCS0lUX0xPQURfRklOSVNI
RUQpIHsKLSAgICAgICAgR01haW5Mb29wKiBsb29wID0gKEdNYWluTG9vcCopZGF0YTsKLQotICAg
ICAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgdGVz
dF93ZWJraXRfd2luZG93X3Njcm9sbGJhcl9wb2xpY3kodm9pZCkKLXsKLSAgICBHTWFpbkxvb3Aq
IGxvb3A7Ci0gICAgR3RrV2lkZ2V0KiBzY3JvbGxlZFdpbmRvdzsKLSAgICBHdGtXaWRnZXQqIHdl
YlZpZXc7Ci0gICAgV2ViS2l0V2ViRnJhbWUqIG1haW5GcmFtZTsKLSAgICBHdGtQb2xpY3lUeXBl
IGhvcml6b250YWxQb2xpY3k7Ci0gICAgR3RrUG9saWN5VHlwZSB2ZXJ0aWNhbFBvbGljeTsKLQot
ICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7Ci0KLSAgICBzY3JvbGxlZFdp
bmRvdyA9IGd0a19zY3JvbGxlZF93aW5kb3dfbmV3KE5VTEwsIE5VTEwpOwotICAgIGd0a19zY3Jv
bGxlZF93aW5kb3dfc2V0X3BvbGljeShHVEtfU0NST0xMRURfV0lORE9XKHNjcm9sbGVkV2luZG93
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1BPTElDWV9BVVRPTUFU
SUMsIEdUS19QT0xJQ1lfQVVUT01BVElDKTsKLQotICAgIHdlYlZpZXcgPSB3ZWJraXRfd2ViX3Zp
ZXdfbmV3KCk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7Ci0KLSAgICBnX3NpZ25h
bF9jb25uZWN0KHdlYlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwKLSAgICAgICAgICAgICAg
ICAgICAgIEdfQ0FMTEJBQ0sobm90aWZ5X2xvYWRfc3RhdHVzX2NiKSwgbG9vcCk7Ci0KLSAgICBn
dGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHNjcm9sbGVkV2luZG93KSwgd2ViVmlldyk7
Ci0KLSAgICBtYWluRnJhbWUgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUoV0VCS0lU
X1dFQl9WSUVXKHdlYlZpZXcpKTsKLQotICAgIC8qIFRlc3Qgd2UgY29ycmVjdGx5IGFwcGx5IHBv
bGljeSBmb3Igbm90IGhhdmluZyBzY3JvbGxiYXJzOyBUaGlzCi0gICAgICogY2FzZSBpcyBzcGVj
aWFsLCBiZWNhdXNlIHdlIHR1cm4gdGhlIHBvbGljeSBmcm9tIE5FVkVSIHRvCi0gICAgICogQVVU
T01BVElDLCBzaW5jZSB3ZSBjYW5ub3QgZWFzaWx5IHJlcHJlc2VudCB0aGUgc2FtZSB0aGluZwot
ICAgICAqIHVzaW5nIEd0a1Njcm9sbGVkV2luZG93ICovCi0gICAgd2Via2l0X3dlYl92aWV3X2xv
YWRfaHRtbF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICI8aHRtbD48Ym9keT5XZWJLaXQhPC9ib2R5PjxzY3JpcHQ+
ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHknKVswXS5zdHlsZS5vdmVyZmxvdyA9
ICdoaWRkZW4nOzwvc2NyaXB0PjwvaHRtbD4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJmaWxlOi8vIik7Ci0KLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAg
ICBndGtfc2Nyb2xsZWRfd2luZG93X2dldF9wb2xpY3koR1RLX1NDUk9MTEVEX1dJTkRPVyhzY3Jv
bGxlZFdpbmRvdyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZob3Jpem9u
dGFsUG9saWN5LCAmdmVydGljYWxQb2xpY3kpOwotCi0gICAgZ19hc3NlcnQoaG9yaXpvbnRhbFBv
bGljeSA9PSBHVEtfUE9MSUNZX0FVVE9NQVRJQyk7Ci0gICAgZ19hc3NlcnQodmVydGljYWxQb2xp
Y3kgPT0gR1RLX1BPTElDWV9BVVRPTUFUSUMpOwotCi0gICAgZ19hc3NlcnQoR1RLX1BPTElDWV9O
RVZFUiA9PSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9ob3Jpem9udGFsX3Njcm9sbGJhcl9wb2xpY3ko
bWFpbkZyYW1lKSk7Ci0gICAgZ19hc3NlcnQoR1RLX1BPTElDWV9ORVZFUiA9PSB3ZWJraXRfd2Vi
X2ZyYW1lX2dldF92ZXJ0aWNhbF9zY3JvbGxiYXJfcG9saWN5KG1haW5GcmFtZSkpOwotCi0gICAg
LyogVGVzdCB3ZSBjb3JyZWN0bHkgYXBwbHkgcG9saWN5IGZvciBhbHdheXMgaGF2aW5nIHNjcm9s
bGJhcnMgKi8KLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9odG1sX3N0cmluZyhXRUJLSVRfV0VC
X1ZJRVcod2ViVmlldyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxo
dG1sPjxib2R5PldlYktpdCE8L2JvZHk+PHNjcmlwdD5kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFn
TmFtZSgnYm9keScpWzBdLnN0eWxlLm92ZXJmbG93ID0gJ3Njcm9sbCc7PC9zY3JpcHQ+PC9odG1s
PiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGU6Ly8iKTsKLQot
ICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLQotICAgIGd0a19zY3JvbGxlZF93aW5kb3dfZ2V0
X3BvbGljeShHVEtfU0NST0xMRURfV0lORE9XKHNjcm9sbGVkV2luZG93KSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJmhvcml6b250YWxQb2xpY3ksICZ2ZXJ0aWNhbFBvbGlj
eSk7Ci0KLSAgICBnX2Fzc2VydChob3Jpem9udGFsUG9saWN5ID09IEdUS19QT0xJQ1lfQUxXQVlT
KTsKLSAgICBnX2Fzc2VydCh2ZXJ0aWNhbFBvbGljeSA9PSBHVEtfUE9MSUNZX0FMV0FZUyk7Ci0K
LSAgICBnX2Fzc2VydChob3Jpem9udGFsUG9saWN5ID09IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X2hv
cml6b250YWxfc2Nyb2xsYmFyX3BvbGljeShtYWluRnJhbWUpKTsKLSAgICBnX2Fzc2VydCh2ZXJ0
aWNhbFBvbGljeSA9PSB3ZWJraXRfd2ViX2ZyYW1lX2dldF92ZXJ0aWNhbF9zY3JvbGxiYXJfcG9s
aWN5KG1haW5GcmFtZSkpOwotCi0gICAgLyogVGVzdCB3ZSBjb3JyZWN0bHkgYXBwbHkgcG9saWN5
IGZvciBoYXZpbmcgc2Nyb2xsYmFycyB3aGVuIG5lZWRlZCAqLwotICAgIHdlYmtpdF93ZWJfdmll
d19sb2FkX2h0bWxfc3RyaW5nKFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3KSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiPGh0bWw+PGJvZHk+V2ViS2l0ITwvYm9keT48c2Ny
aXB0PmRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0uc3R5bGUub3ZlcmZs
b3cgPSAnYXV0byc7PC9zY3JpcHQ+PC9odG1sPiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgImZpbGU6Ly8iKTsKLQotICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLQot
ICAgIGd0a19zY3JvbGxlZF93aW5kb3dfZ2V0X3BvbGljeShHVEtfU0NST0xMRURfV0lORE9XKHNj
cm9sbGVkV2luZG93KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhvcml6
b250YWxQb2xpY3ksICZ2ZXJ0aWNhbFBvbGljeSk7Ci0KLSAgICBnX2Fzc2VydChob3Jpem9udGFs
UG9saWN5ID09IEdUS19QT0xJQ1lfQVVUT01BVElDKTsKLSAgICBnX2Fzc2VydCh2ZXJ0aWNhbFBv
bGljeSA9PSBHVEtfUE9MSUNZX0FVVE9NQVRJQyk7Ci0KLSAgICBnX2Fzc2VydChob3Jpem9udGFs
UG9saWN5ID09IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X2hvcml6b250YWxfc2Nyb2xsYmFyX3BvbGlj
eShtYWluRnJhbWUpKTsKLSAgICBnX2Fzc2VydCh2ZXJ0aWNhbFBvbGljeSA9PSB3ZWJraXRfd2Vi
X2ZyYW1lX2dldF92ZXJ0aWNhbF9zY3JvbGxiYXJfcG9saWN5KG1haW5GcmFtZSkpOwotCi0gICAg
Z19vYmplY3RfdW5yZWYod2ViVmlldyk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiog
YXJndikKLXsKLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAgICBn
X3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwotICAgIGdfdGVzdF9h
ZGRfZnVuYygiL3dlYmtpdC93aW5kb3cvc2Nyb2xsYmFyX3BvbGljeSIsIHRlc3Rfd2Via2l0X3dp
bmRvd19zY3JvbGxiYXJfcG9saWN5KTsKLSAgICByZXR1cm4gZ190ZXN0X3J1biAoKTsKLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0FjY2Vzc2li
aWxpdHlUZXN0U2VydmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYjU1MDA1MC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9BY2Nlc3NpYmlsaXR5VGVzdFNlcnZlci5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d2Via2l0
Mi93ZWJraXQyLmg+Ci0KLXN0YXRpYyB2b2lkIGxvYWRDaGFuZ2VkQ2FsbGJhY2soV2ViS2l0V2Vi
VmlldyosIFdlYktpdExvYWRFdmVudCBsb2FkRXZlbnQsIGdwb2ludGVyKQotewotICAgIC8vIFNl
bmQgYSBtZXNzYWdlIHRvIHRoZSBwYXJlbnQgcHJvY2VzcyB3aGVuIHdlJ3JlIHJlYWR5LgotICAg
IGlmIChsb2FkRXZlbnQgPT0gV0VCS0lUX0xPQURfRklOSVNIRUQpCi0gICAgICAgIGdfcHJpbnQo
Ik9LIik7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKLXsKLSAgICAvLyBN
YWtlIHN1cmUgdGhhdCB0aGUgQVRLIGJyaWRnZSBpcyBsb2FkZWQuCi0gICAgZ19zZXRlbnYoIkdU
S19NT0RVTEVTIiwgImF0ay1icmlkZ2UiLCBUUlVFKTsKLQotICAgIGd0a19pbml0KCZhcmdjLCAm
YXJndik7Ci0KLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdl
YmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfaHRtbCh3ZWJW
aWV3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxodG1sPiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICIgIDxib2R5PiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICIgICA8aDE+VGhpcyBpcyBhIHRlc3Q8L2gxPiIKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICIgICA8cD5UaGlzIGlzIGEgcGFyYWdyYXBoIHdpdGggc29tZSBwbGFpbiB0ZXh0Ljwv
cD4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgPHA+VGhpcyBwYXJhZ3JhcGgg
Y29udGFpbnMgPGEgaHJlZj1cImh0dHA6Ly93d3cud2Via2l0Z3RrLm9yZ1wiPmEgbGluazwvYT4g
aW4gdGhlIG1pZGRsZS48L3A+IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgPC9i
b2R5PiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8L2h0bWw+IiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDApOwotCi0gICAgR3RrV2lkZ2V0KiB3aW5kb3cgPSBndGtf
d2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKLSAgICBndGtfY29udGFpbmVyX2FkZChH
VEtfQ09OVEFJTkVSKHdpbmRvdyksIEdUS19XSURHRVQod2ViVmlldykpOwotICAgIGd0a193aWRn
ZXRfc2hvd19hbGwod2luZG93KTsKLQotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2luZG93LCAiZGVs
ZXRlLWV2ZW50IiwgR19DQUxMQkFDSyhndGtfbWFpbl9xdWl0KSwgMCk7Ci0gICAgZ19zaWduYWxf
Y29ubmVjdCh3ZWJWaWV3LCAibG9hZC1jaGFuZ2VkIiwgR19DQUxMQkFDSyhsb2FkQ2hhbmdlZENh
bGxiYWNrKSwgMCk7Ci0KLSAgICBndGtfbWFpbigpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9DTWFrZUxpc3RzLnR4dApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYmNiMGNmZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9DTWFrZUxpc3RzLnR4dAorKysgL2Rldi9udWxsCkBAIC0x
LDEwMiArMCwwIEBACi1zZXQoVEVTVF9MSUJSQVJZX0RJUiAke0NNQUtFX0xJQlJBUllfT1VUUFVU
X0RJUkVDVE9SWX0vV2ViS2l0MkdPYmplY3RBUElUZXN0cykKLXNldChURVNUX1JFU09VUkNFU19E
SVIgJHtDTUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUll9L3Jlc291cmNlcykKLWZpbGUoTUFL
RV9ESVJFQ1RPUlkgJHtURVNUX1JFU09VUkNFU19ESVJ9KQotCi1hZGRfZGVmaW5pdGlvbnMoCi0g
ICAgLURXRUJLSVRfVEVTVF9QTFVHSU5fRElSPSIke0NNQUtFX0xJQlJBUllfT1VUUFVUX0RJUkVD
VE9SWX0iCi0gICAgLURXRUJLSVRfRVhFQ19QQVRIPSIke0NNQUtFX1JVTlRJTUVfT1VUUFVUX0RJ
UkVDVE9SWX0iCi0gICAgLURXRUJLSVRfU1JDX0RJUj0iJHtDTUFLRV9TT1VSQ0VfRElSfSIKLSAg
ICAtRFdFQktJVF9URVNUX1dFQl9FWFRFTlNJT05TX0RJUj0iJHtURVNUX0xJQlJBUllfRElSfSIK
LSAgICAtRFdFQktJVF9JTkpFQ1RFRF9CVU5ETEVfUEFUSD0iJHtDTUFLRV9MSUJSQVJZX09VVFBV
VF9ESVJFQ1RPUll9IgotKQotCi1pbmNsdWRlX2RpcmVjdG9yaWVzKAotICAgICR7Q01BS0VfQklO
QVJZX0RJUn0KLSAgICAke0NNQUtFX1NPVVJDRV9ESVJ9L1NvdXJjZQotICAgICR7Q01BS0VfU09V
UkNFX0RJUn0vU291cmNlL1dURgotICAgICR7REVSSVZFRF9TT1VSQ0VTX0RJUn0KLSAgICAke0RF
UklWRURfU09VUkNFU19XRUJLSVQyR1RLX0RJUn0KLSAgICAke0ZPUldBUkRJTkdfSEVBREVSU19E
SVJ9Ci0gICAgJHtGT1JXQVJESU5HX0hFQURFUlNfV0VCS0lUMkdUS19ESVJ9Ci0gICAgJHtGT1JX
QVJESU5HX0hFQURFUlNfV0VCS0lUMkdUS19FWFRFTlNJT05fRElSfQotICAgICR7QVRTUElfSU5D
TFVERV9ESVJTfQotICAgICR7R0xJQl9JTkNMVURFX0RJUlN9Ci0gICAgJHtHVEszX0lOQ0xVREVf
RElSU30KLSAgICAke0xJQlNPVVBfSU5DTFVERV9ESVJTfQotKQotCi1hZGRfbGlicmFyeShXZWJL
aXQyQVBJVGVzdENvcmUgU1RBVElDCi0gICAgTG9hZFRyYWNraW5nVGVzdC5jcHAKLSAgICBXZWJL
aXRUZXN0QnVzLmNwcAotICAgIFdlYktpdFRlc3RTZXJ2ZXIuY3BwCi0gICAgV2ViUHJvY2Vzc1Rl
c3RSdW5uZXIuY3BwCi0gICAgVGVzdE1haW4uY3BwCi0gICAgV2ViVmlld1Rlc3QuY3BwCi0pCi1h
ZGRfZGVwZW5kZW5jaWVzKFdlYktpdDJBUElUZXN0Q29yZSBXZWJLaXQyKQotCi1hZGRfY3VzdG9t
X3RhcmdldCh0ZXN0LWdyZXNvdXJjZS1idW5kbGUKLSAgICBERVBFTkRTIHJlc291cmNlcy93ZWJr
aXQyZ3RrLXRlc3RzLmdyZXNvdXJjZS54bWwKLSAgICAgICAgICAgIHJlc291cmNlcy9saW5rLXRp
dGxlLmpzCi0gICAgQ09NTUFORCBnbGliLWNvbXBpbGUtcmVzb3VyY2VzIC0tdGFyZ2V0PSR7VEVT
VF9SRVNPVVJDRVNfRElSfS93ZWJraXQyZ3RrLXRlc3RzLXJlc291cmNlcy5ncmVzb3VyY2UgLS1z
b3VyY2VkaXI9JHtDTUFLRV9TT1VSQ0VfRElSfSAke0NNQUtFX1NPVVJDRV9ESVJ9L1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL3Jlc291cmNlcy93ZWJraXQyZ3RrLXRlc3Rz
LmdyZXNvdXJjZS54bWwKLSkKLQotbWFjcm8oQUREX1dLMl9URVNUX1dFQl9FWFRFTlNJT04gZXh0
ZW5zaW9uX25hbWUpCi0gICAgYWRkX2xpYnJhcnkoJHtleHRlbnNpb25fbmFtZX0gTU9EVUxFICR7
QVJHTn0pCi0gICAgc2V0X3Byb3BlcnR5KAotICAgICAgICBUQVJHRVQgJHtleHRlbnNpb25fbmFt
ZX0KLSAgICAgICAgQVBQRU5ECi0gICAgICAgIFBST1BFUlRZIENPTVBJTEVfREVGSU5JVElPTlMg
V0VCS0lUMl9DT01QSUxBVElPTgotICAgICkKLSAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoJHtl
eHRlbnNpb25fbmFtZX0gUFJPUEVSVElFUwotICAgICAgICBMSUJSQVJZX09VVFBVVF9ESVJFQ1RP
UlkgJHtURVNUX0xJQlJBUllfRElSfQotICAgICkKLWVuZG1hY3JvKCkKLQotbWFjcm8oQUREX1dL
Ml9URVNUIHRlc3RfbmFtZSkKLSAgICBhZGRfZXhlY3V0YWJsZSgke3Rlc3RfbmFtZX0gJHtBUkdO
fSkKLSAgICBhZGRfZGVwZW5kZW5jaWVzKCR7dGVzdF9uYW1lfQotICAgICAgICB0ZXN0LWdyZXNv
dXJjZS1idW5kbGUKLSAgICAgICAgV2ViRXh0ZW5zaW9uVGVzdAotICAgICkKLSAgICB0YXJnZXRf
bGlua19saWJyYXJpZXMoJHt0ZXN0X25hbWV9Ci0gICAgICAgIEphdmFTY3JpcHRDb3JlCi0gICAg
ICAgIFdlYktpdDIKLSAgICAgICAgV2ViS2l0MkFQSVRlc3RDb3JlCi0gICAgICAgICR7QVRTUElf
TElCUkFSSUVTfQotICAgICAgICAke0dMSUJfTElCUkFSSUVTfQotICAgICAgICAke0dUSzNfTElC
UkFSSUVTfQotICAgICAgICAke0xJQlNPVVBfTElCUkFSSUVTfQotICAgICkKLSAgICBzZXRfdGFy
Z2V0X3Byb3BlcnRpZXMoJHt0ZXN0X25hbWV9IFBST1BFUlRJRVMKLSAgICAgICAgUlVOVElNRV9P
VVRQVVRfRElSRUNUT1JZICR7Q01BS0VfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZfS9XZWJLaXQy
R09iamVjdEFQSVRlc3RzCi0gICAgKQotZW5kbWFjcm8oKQotCi1BRERfV0syX1RFU1RfV0VCX0VY
VEVOU0lPTihXZWJFeHRlbnNpb25UZXN0IFdlYkV4dGVuc2lvblRlc3QuY3BwKQotQUREX1dLMl9U
RVNUX1dFQl9FWFRFTlNJT04oV2ViUHJvY2Vzc1Rlc3QgRE9NTm9kZVRlc3QuY3BwIEZyYW1lVGVz
dC5jcHAgV2ViUHJvY2Vzc1Rlc3QuY3BwKQotCi1BRERfV0syX1RFU1QoSW5zcGVjdG9yVGVzdFNl
cnZlciBJbnNwZWN0b3JUZXN0U2VydmVyLmNwcCkKLUFERF9XSzJfVEVTVChUZXN0QmFja0Zvcndh
cmRMaXN0IFRlc3RCYWNrRm9yd2FyZExpc3QuY3BwKQotQUREX1dLMl9URVNUKFRlc3RDb250ZXh0
TWVudSBUZXN0Q29udGV4dE1lbnUuY3BwKQotQUREX1dLMl9URVNUKFRlc3RDb29raWVNYW5hZ2Vy
IFRlc3RDb29raWVNYW5hZ2VyLmNwcCkKLUFERF9XSzJfVEVTVChUZXN0RE9NTm9kZSBUZXN0RE9N
Tm9kZS5jcHApCi1BRERfV0syX1RFU1QoVGVzdERvd25sb2FkcyBUZXN0RG93bmxvYWRzLmNwcCkK
LUFERF9XSzJfVEVTVChUZXN0RnJhbWUgVGVzdEZyYW1lLmNwcCkKLUFERF9XSzJfVEVTVChUZXN0
SW5zcGVjdG9yIFRlc3RJbnNwZWN0b3IuY3BwKQotQUREX1dLMl9URVNUKFRlc3RJbnNwZWN0b3JT
ZXJ2ZXIgVGVzdEluc3BlY3RvclNlcnZlci5jcHApCi1BRERfV0syX1RFU1QoVGVzdExvYWRlckNs
aWVudCBUZXN0TG9hZGVyQ2xpZW50LmNwcCkKLUFERF9XSzJfVEVTVChUZXN0UHJpbnRpbmcgVGVz
dFByaW50aW5nLmNwcCkKLUFERF9XSzJfVEVTVChUZXN0U1NMIFRlc3RTU0wuY3BwKQotQUREX1dL
Ml9URVNUKFRlc3RXZWJFeHRlbnNpb25zIFRlc3RXZWJFeHRlbnNpb25zLmNwcCkKLUFERF9XSzJf
VEVTVChUZXN0V2ViS2l0UG9saWN5Q2xpZW50IFRlc3RXZWJLaXRQb2xpY3lDbGllbnQuY3BwKQot
QUREX1dLMl9URVNUKFRlc3RXZWJLaXRTZXR0aW5ncyBUZXN0V2ViS2l0U2V0dGluZ3MuY3BwKQot
QUREX1dLMl9URVNUKFRlc3RXZWJLaXRWZXJzaW9uIFRlc3RXZWJLaXRWZXJzaW9uLmNwcCkKLUFE
RF9XSzJfVEVTVChUZXN0V2ViS2l0V2ViVmlld0dyb3VwIFRlc3RXZWJLaXRXZWJWaWV3R3JvdXAu
Y3BwKQotQUREX1dLMl9URVNUKFRlc3RXZWJLaXRXZWJDb250ZXh0IFRlc3RXZWJLaXRXZWJDb250
ZXh0LmNwcCkKLUFERF9XSzJfVEVTVChUZXN0V2ViS2l0V2ViVmlldyBUZXN0V2ViS2l0V2ViVmll
dy5jcHApCi0KLWlmIChBVFNQSV9GT1VORCkKLSAgICBBRERfV0syX1RFU1QoQWNjZXNzaWJpbGl0
eVRlc3RTZXJ2ZXIgQWNjZXNzaWJpbGl0eVRlc3RTZXJ2ZXIuY3BwKQotICAgIEFERF9XSzJfVEVT
VChUZXN0V2ViS2l0QWNjZXNzaWJpbGl0eSBUZXN0V2ViS2l0QWNjZXNzaWJpbGl0eS5jcHApCi1l
bmRpZiAoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvRE9NTm9kZVRlc3QuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvRE9NTm9kZVRlc3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTc1NGNm
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0RP
TU5vZGVUZXN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIxNiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1
ZGUgIldlYlByb2Nlc3NUZXN0LmgiCi0jaW5jbHVkZSA8Z2lvL2dpby5oPgotI2luY2x1ZGUgPHdl
YmtpdDIvd2Via2l0LXdlYi1leHRlbnNpb24uaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3du
UHRyLmg+Ci0KLWNsYXNzIFdlYktpdERPTU5vZGVUZXN0IDogcHVibGljIFdlYlByb2Nlc3NUZXN0
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxXZWJQcm9jZXNzVGVzdD4gY3JlYXRl
KCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IFdlYktpdERPTU5vZGVUZXN0KCkpOyB9Ci0KLXByaXZh
dGU6Ci0gICAgZ3VpbnQ2NCB3ZWJQYWdlRnJvbUFyZ3MoR1ZhcmlhbnQqIGFyZ3MpCi0gICAgewot
ICAgICAgICBHVmFyaWFudEl0ZXIgaXRlcjsKLSAgICAgICAgZ192YXJpYW50X2l0ZXJfaW5pdCgm
aXRlciwgYXJncyk7Ci0KLSAgICAgICAgY29uc3QgY2hhcioga2V5OwotICAgICAgICBHVmFyaWFu
dCogdmFsdWU7Ci0gICAgICAgIHdoaWxlIChnX3ZhcmlhbnRfaXRlcl9sb29wKCZpdGVyLCAieyZz
dn0iLCAma2V5LCAmdmFsdWUpKSB7Ci0gICAgICAgICAgICBpZiAoIXN0cmNtcChrZXksICJwYWdl
SUQiKSAmJiBnX3ZhcmlhbnRfY2xhc3NpZnkodmFsdWUpID09IEdfVkFSSUFOVF9DTEFTU19VSU5U
NjQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGdfdmFyaWFudF9nZXRfdWludDY0KHZhbHVlKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KLQotICAgIGJvb2wgdGVzdEhpZXJhcmNoeU5hdmlnYXRpb24oV2ViS2l0
V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24sIEdWYXJpYW50KiBhcmdzKQotICAgIHsKLSAgICAgICAg
V2ViS2l0V2ViUGFnZSogcGFnZSA9IHdlYmtpdF93ZWJfZXh0ZW5zaW9uX2dldF9wYWdlKGV4dGVu
c2lvbiwgd2ViUGFnZUZyb21BcmdzKGFyZ3MpKTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lT
X1dFQl9QQUdFKHBhZ2UpKTsKLSAgICAgICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50ID0g
d2Via2l0X3dlYl9wYWdlX2dldF9kb21fZG9jdW1lbnQocGFnZSk7Ci0gICAgICAgIGdfYXNzZXJ0
KFdFQktJVF9ET01fSVNfRE9DVU1FTlQoZG9jdW1lbnQpKTsKLQotICAgICAgICBXZWJLaXRET01I
VE1MSGVhZEVsZW1lbnQqIGhlYWQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9oZWFkKGRvY3Vt
ZW50KTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0hFQURfRUxFTUVOVCho
ZWFkKSk7Ci0KLSAgICAgICAgLy8gVGl0bGUsIGhlYWQncyBjaGlsZC4KLSAgICAgICAgZ19hc3Nl
cnQod2Via2l0X2RvbV9ub2RlX2hhc19jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoaGVhZCkp
KTsKLSAgICAgICAgR1JlZlB0cjxXZWJLaXRET01Ob2RlTGlzdD4gbGlzdCA9IGFkb3B0R1JlZih3
ZWJraXRfZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShoZWFkKSkpOwot
ICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX05PREVfTElTVChsaXN0LmdldCgpKSk7Ci0g
ICAgICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxp
c3QuZ2V0KCkpLCA9PSwgMSk7Ci0gICAgICAgIFdlYktpdERPTU5vZGUqIG5vZGUgPSB3ZWJraXRf
ZG9tX25vZGVfbGlzdF9pdGVtKGxpc3QuZ2V0KCksIDApOwotICAgICAgICBnX2Fzc2VydChXRUJL
SVRfRE9NX0lTX0hUTUxfVElUTEVfRUxFTUVOVChub2RlKSk7Ci0KLSAgICAgICAgLy8gQm9keSwg
SGVhZCBzaWJsaW5nLgotICAgICAgICBub2RlID0gd2Via2l0X2RvbV9ub2RlX2dldF9uZXh0X3Np
YmxpbmcoV0VCS0lUX0RPTV9OT0RFKGhlYWQpKTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RP
TV9JU19IVE1MX0JPRFlfRUxFTUVOVChub2RlKSk7Ci0gICAgICAgIFdlYktpdERPTUhUTUxCb2R5
RWxlbWVudCogYm9keSA9IFdFQktJVF9ET01fSFRNTF9CT0RZX0VMRU1FTlQobm9kZSk7Ci0KLSAg
ICAgICAgLy8gVGhlcmUgaXMgbm8gdGhpcmQgc2libGluZwotICAgICAgICBnX2Fzc2VydCghd2Vi
a2l0X2RvbV9ub2RlX2dldF9uZXh0X3NpYmxpbmcobm9kZSkpOwotCi0gICAgICAgIC8vIEJvZHkn
cyBwcmV2aW91cyBzaWJsaW5nIGlzIEhlYWQuCi0gICAgICAgIG5vZGUgPSB3ZWJraXRfZG9tX25v
ZGVfZ2V0X3ByZXZpb3VzX3NpYmxpbmcoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKTsKLSAgICAgICAg
Z19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0hFQURfRUxFTUVOVChub2RlKSk7Ci0KLSAgICAg
ICAgLy8gQm9keSBoYXMgMyBjaGlsZHJlbi4KLSAgICAgICAgZ19hc3NlcnQod2Via2l0X2RvbV9u
b2RlX2hhc19jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpKTsKLSAgICAgICAgbGlz
dCA9IGFkb3B0R1JlZih3ZWJraXRfZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVzKFdFQktJVF9ET01f
Tk9ERShib2R5KSkpOwotICAgICAgICB1bnNpZ25lZCBsb25nIGxlbmd0aCA9IHdlYmtpdF9kb21f
bm9kZV9saXN0X2dldF9sZW5ndGgobGlzdC5nZXQoKSk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcGlu
dChsZW5ndGgsID09LCAzKTsKLQotICAgICAgICAvLyBUaGUgdGhyZWUgb2YgdGhlbSBhcmUgUCB0
YWdzLgotICAgICAgICBmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykg
ewotICAgICAgICAgICAgbm9kZSA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdC5nZXQo
KSwgaSk7Ci0gICAgICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfUEFSQUdSQVBI
X0VMRU1FTlQobm9kZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gR28gYmFja3dhcmRzCi0g
ICAgICAgIHVuc2lnbmVkIGk7Ci0gICAgICAgIGZvciAoaSA9IDA7IG5vZGU7IG5vZGUgPSB3ZWJr
aXRfZG9tX25vZGVfZ2V0X3ByZXZpb3VzX3NpYmxpbmcobm9kZSksIGkrKykgeyB9Ci0gICAgICAg
IGdfYXNzZXJ0X2NtcGludChpLCA9PSwgMyk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotCi0gICAgYm9vbCB0ZXN0SW5zZXJ0aW9uKFdlYktpdFdlYkV4dGVuc2lvbiogZXh0ZW5zaW9u
LCBHVmFyaWFudCogYXJncykKLSAgICB7Ci0gICAgICAgIFdlYktpdFdlYlBhZ2UqIHBhZ2UgPSB3
ZWJraXRfd2ViX2V4dGVuc2lvbl9nZXRfcGFnZShleHRlbnNpb24sIHdlYlBhZ2VGcm9tQXJncyhh
cmdzKSk7Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19XRUJfUEFHRShwYWdlKSk7Ci0gICAg
ICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1bWVudCA9IHdlYmtpdF93ZWJfcGFnZV9nZXRfZG9t
X2RvY3VtZW50KHBhZ2UpOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5U
KGRvY3VtZW50KSk7Ci0KLSAgICAgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQqIGJvZHkgPSB3ZWJr
aXRfZG9tX2RvY3VtZW50X2dldF9ib2R5KGRvY3VtZW50KTsKLSAgICAgICAgZ19hc3NlcnQoV0VC
S0lUX0RPTV9JU19IVE1MX0VMRU1FTlQoYm9keSkpOwotCi0gICAgICAgIC8vIEJvZHkgc2hvdWxk
bid0IGhhdmUgYW55IGNoaWxkcmVuIGF0IHRoaXMgcG9pbnQuCi0gICAgICAgIGdfYXNzZXJ0KCF3
ZWJraXRfZG9tX25vZGVfaGFzX2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSkpOwot
Ci0gICAgICAgIC8vIEluc2VydCBvbmUgUCBlbGVtZW50LgotICAgICAgICBXZWJLaXRET01FbGVt
ZW50KiBwID0gd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZWxlbWVudChkb2N1bWVudCwgIlAi
LCAwKTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0VMRU1FTlQocCkpOwot
ICAgICAgICB3ZWJraXRfZG9tX25vZGVfYXBwZW5kX2NoaWxkKFdFQktJVF9ET01fTk9ERShib2R5
KSwgV0VCS0lUX0RPTV9OT0RFKHApLCAwKTsKLQotICAgICAgICAvLyBOb3cgaXQgc2hvdWxkIGhh
dmUgb25lLCB0aGUgc2FtZSB0aGF0IHdlIGluc2VydGVkLgotICAgICAgICBnX2Fzc2VydCh3ZWJr
aXRfZG9tX25vZGVfaGFzX2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSkpOwotICAg
ICAgICBHUmVmUHRyPFdlYktpdERPTU5vZGVMaXN0PiBsaXN0ID0gYWRvcHRHUmVmKHdlYmtpdF9k
b21fbm9kZV9nZXRfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKSk7Ci0gICAgICAg
IGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfTk9ERV9MSVNUKGxpc3QuZ2V0KCkpKTsKLSAgICAgICAg
Z19hc3NlcnRfY21waW50KHdlYmtpdF9kb21fbm9kZV9saXN0X2dldF9sZW5ndGgobGlzdC5nZXQo
KSksID09LCAxKTsKLSAgICAgICAgV2ViS2l0RE9NTm9kZSogbm9kZSA9IHdlYmtpdF9kb21fbm9k
ZV9saXN0X2l0ZW0obGlzdC5nZXQoKSwgMCk7Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01f
SVNfSFRNTF9FTEVNRU5UKG5vZGUpKTsKLSAgICAgICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2Rl
X2lzX3NhbWVfbm9kZShXRUJLSVRfRE9NX05PREUocCksIG5vZGUpKTsKLQotICAgICAgICAvLyBS
ZXBsYWNlIHRoZSBQIHRhZyB3aXRoIGEgRElWIHRhZy4KLSAgICAgICAgV2ViS2l0RE9NRWxlbWVu
dCogZGl2ID0gd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZWxlbWVudChkb2N1bWVudCwgIkRJ
ViIsIDApOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChkaXYp
KTsKLSAgICAgICAgd2Via2l0X2RvbV9ub2RlX3JlcGxhY2VfY2hpbGQoV0VCS0lUX0RPTV9OT0RF
KGJvZHkpLCBXRUJLSVRfRE9NX05PREUoZGl2KSwgV0VCS0lUX0RPTV9OT0RFKHApLCAwKTsKLSAg
ICAgICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2hhc19jaGlsZF9ub2RlcyhXRUJLSVRfRE9N
X05PREUoYm9keSkpKTsKLSAgICAgICAgbGlzdCA9IGFkb3B0R1JlZih3ZWJraXRfZG9tX25vZGVf
Z2V0X2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSkpOwotICAgICAgICBnX2Fzc2Vy
dChXRUJLSVRfRE9NX0lTX05PREVfTElTVChsaXN0LmdldCgpKSk7Ci0gICAgICAgIGdfYXNzZXJ0
X2NtcGludCh3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QuZ2V0KCkpLCA9PSwg
MSk7Ci0gICAgICAgIG5vZGUgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtKGxpc3QuZ2V0KCks
IDApOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChub2RlKSk7
Ci0gICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9pc19zYW1lX25vZGUoV0VCS0lUX0RP
TV9OT0RFKGRpdiksIG5vZGUpKTsKLQotICAgICAgICAvLyBOb3cgcmVtb3ZlIHRoZSB0YWcuCi0g
ICAgICAgIHdlYmtpdF9kb21fbm9kZV9yZW1vdmVfY2hpbGQoV0VCS0lUX0RPTV9OT0RFKGJvZHkp
LCBub2RlLCAwKTsKLSAgICAgICAgbGlzdCA9IGFkb3B0R1JlZih3ZWJraXRfZG9tX25vZGVfZ2V0
X2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSkpOwotICAgICAgICBnX2Fzc2VydChX
RUJLSVRfRE9NX0lTX05PREVfTElTVChsaXN0LmdldCgpKSk7Ci0gICAgICAgIGdfYXNzZXJ0X2Nt
cGludCh3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QuZ2V0KCkpLCA9PSwgMCk7
Ci0KLSAgICAgICAgLy8gVGVzdCBpbnNlcnQgYmVmb3JlLiBJZiByZWZDaGlsZCBpcyBudWxsLCBp
bnNlcnQgbmV3Q2hpbGQgYXMgbGFzdCBlbGVtZW50IG9mIHBhcmVudC4KLSAgICAgICAgZGl2ID0g
d2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZWxlbWVudChkb2N1bWVudCwgIkRJViIsIDApOwot
ICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChkaXYpKTsKLSAgICAg
ICAgd2Via2l0X2RvbV9ub2RlX2luc2VydF9iZWZvcmUoV0VCS0lUX0RPTV9OT0RFKGJvZHkpLCBX
RUJLSVRfRE9NX05PREUoZGl2KSwgMCwgMCk7Ci0gICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21f
bm9kZV9oYXNfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKSk7Ci0gICAgICAgIGxp
c3QgPSBhZG9wdEdSZWYod2Via2l0X2RvbV9ub2RlX2dldF9jaGlsZF9ub2RlcyhXRUJLSVRfRE9N
X05PREUoYm9keSkpKTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19OT0RFX0xJU1Qo
bGlzdC5nZXQoKSkpOwotICAgICAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X2RvbV9ub2RlX2xp
c3RfZ2V0X2xlbmd0aChsaXN0LmdldCgpKSwgPT0sIDEpOwotICAgICAgICBub2RlID0gd2Via2l0
X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0LmdldCgpLCAwKTsKLSAgICAgICAgZ19hc3NlcnQoV0VC
S0lUX0RPTV9JU19IVE1MX0VMRU1FTlQobm9kZSkpOwotICAgICAgICBnX2Fzc2VydCh3ZWJraXRf
ZG9tX25vZGVfaXNfc2FtZV9ub2RlKFdFQktJVF9ET01fTk9ERShkaXYpLCBub2RlKSk7Ci0KLSAg
ICAgICAgLy8gTm93IGluc2VydCBhICdwJyBiZWZvcmUgJ2RpdicuCi0gICAgICAgIHAgPSB3ZWJr
aXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9lbGVtZW50KGRvY3VtZW50LCAiUCIsIDApOwotICAgICAg
ICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChwKSk7Ci0gICAgICAgIHdlYmtp
dF9kb21fbm9kZV9pbnNlcnRfYmVmb3JlKFdFQktJVF9ET01fTk9ERShib2R5KSwgV0VCS0lUX0RP
TV9OT0RFKHApLCBXRUJLSVRfRE9NX05PREUoZGl2KSwgMCk7Ci0gICAgICAgIGdfYXNzZXJ0KHdl
YmtpdF9kb21fbm9kZV9oYXNfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKSk7Ci0g
ICAgICAgIGxpc3QgPSBhZG9wdEdSZWYod2Via2l0X2RvbV9ub2RlX2dldF9jaGlsZF9ub2RlcyhX
RUJLSVRfRE9NX05PREUoYm9keSkpKTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19O
T0RFX0xJU1QobGlzdC5nZXQoKSkpOwotICAgICAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X2Rv
bV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChsaXN0LmdldCgpKSwgPT0sIDIpOwotICAgICAgICBub2Rl
ID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0LmdldCgpLCAwKTsKLSAgICAgICAgZ19h
c3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0VMRU1FTlQobm9kZSkpOwotICAgICAgICBnX2Fzc2Vy
dCh3ZWJraXRfZG9tX25vZGVfaXNfc2FtZV9ub2RlKFdFQktJVF9ET01fTk9ERShwKSwgbm9kZSkp
OwotICAgICAgICBub2RlID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0LmdldCgpLCAx
KTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0VMRU1FTlQobm9kZSkpOwot
ICAgICAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaXNfc2FtZV9ub2RlKFdFQktJVF9ET01f
Tk9ERShkaXYpLCBub2RlKSk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAg
Ym9vbCB0ZXN0VGFnTmFtZXMoV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24sIEdWYXJpYW50
KiBhcmdzKQotICAgIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGV4cGVjdGVkVGFnTmFt
ZXNbXSA9IHsgIkhUTUwiLCAiSEVBRCIsICJCT0RZIiwgIlZJREVPIiwgIlNPVVJDRSIsICJWSURF
TyIsICJTT1VSQ0UiLCAiSU5QVVQiIH07Ci0KLSAgICAgICAgV2ViS2l0V2ViUGFnZSogcGFnZSA9
IHdlYmtpdF93ZWJfZXh0ZW5zaW9uX2dldF9wYWdlKGV4dGVuc2lvbiwgd2ViUGFnZUZyb21Bcmdz
KGFyZ3MpKTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX1dFQl9QQUdFKHBhZ2UpKTsKLSAg
ICAgICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50ID0gd2Via2l0X3dlYl9wYWdlX2dldF9k
b21fZG9jdW1lbnQocGFnZSk7Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfRE9DVU1F
TlQoZG9jdW1lbnQpKTsKLQotICAgICAgICBXZWJLaXRET01Ob2RlTGlzdCogbGlzdCA9IHdlYmtp
dF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRzX2J5X3RhZ19uYW1lKGRvY3VtZW50LCAiKiIpOwot
ICAgICAgICBndWxvbmcgbm9kZUNvdW50ID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0
aChsaXN0KTsKLSAgICAgICAgZ19hc3NlcnRfY21wdWludChub2RlQ291bnQsID09LCBHX05fRUxF
TUVOVFMoZXhwZWN0ZWRUYWdOYW1lcykpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbm9kZUNvdW50OyBpKyspIHsKLSAgICAgICAgICAgIFdlYktpdERPTU5vZGUqIG5vZGUgPSB3
ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtKGxpc3QsIGkpOwotICAgICAgICAgICAgZ19hc3NlcnQo
V0VCS0lUX0RPTV9JU19OT0RFKG5vZGUpKTsKLSAgICAgICAgICAgIEdPd25QdHI8Y2hhcj4gdGFn
TmFtZSh3ZWJraXRfZG9tX25vZGVfZ2V0X25vZGVfbmFtZShub2RlKSk7Ci0gICAgICAgICAgICBn
X2Fzc2VydF9jbXBzdHIodGFnTmFtZS5nZXQoKSwgPT0sIGV4cGVjdGVkVGFnTmFtZXNbaV0pOwot
ICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgdmlydHVhbCBi
b29sIHJ1blRlc3QoY29uc3QgY2hhciogdGVzdE5hbWUsIFdlYktpdFdlYkV4dGVuc2lvbiogZXh0
ZW5zaW9uLCBHVmFyaWFudCogYXJncykKLSAgICB7Ci0gICAgICAgIGlmICghc3RyY21wKHRlc3RO
YW1lLCAiaGllcmFyY2h5LW5hdmlnYXRpb24iKSkKLSAgICAgICAgICAgIHJldHVybiB0ZXN0SGll
cmFyY2h5TmF2aWdhdGlvbihleHRlbnNpb24sIGFyZ3MpOwotICAgICAgICBpZiAoIXN0cmNtcCh0
ZXN0TmFtZSwgImluc2VydGlvbiIpKQotICAgICAgICAgICAgcmV0dXJuIHRlc3RJbnNlcnRpb24o
ZXh0ZW5zaW9uLCBhcmdzKTsKLSAgICAgICAgaWYgKCFzdHJjbXAodGVzdE5hbWUsICJ0YWctbmFt
ZXMiKSkKLSAgICAgICAgICAgIHJldHVybiB0ZXN0VGFnTmFtZXMoZXh0ZW5zaW9uLCBhcmdzKTsK
LQotICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotfTsKLQotc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXygoY29uc3RydWN0b3IpKSBy
ZWdpc3RlclRlc3RzKCkKLXsKLSAgICBSRUdJU1RFUl9URVNUKFdlYktpdERPTU5vZGVUZXN0LCAi
V2ViS2l0RE9NTm9kZS9oaWVyYXJjaHktbmF2aWdhdGlvbiIpOwotICAgIFJFR0lTVEVSX1RFU1Qo
V2ViS2l0RE9NTm9kZVRlc3QsICJXZWJLaXRET01Ob2RlL2luc2VydGlvbiIpOwotICAgIFJFR0lT
VEVSX1RFU1QoV2ViS2l0RE9NTm9kZVRlc3QsICJXZWJLaXRET01Ob2RlL3RhZy1uYW1lcyIpOwot
fQotCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L0ZyYW1lVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9G
cmFtZVRlc3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDQ4NTBmLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0ZyYW1lVGVz
dC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJXZWJQ
cm9jZXNzVGVzdC5oIgotI2luY2x1ZGUgPGdpby9naW8uaD4KLSNpbmNsdWRlIDx3ZWJraXQyL3dl
YmtpdC13ZWItZXh0ZW5zaW9uLmg+Ci0KLWNsYXNzIFdlYktpdEZyYW1lVGVzdCA6IHB1YmxpYyBX
ZWJQcm9jZXNzVGVzdCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8V2ViUHJvY2Vz
c1Rlc3Q+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBXZWJLaXRGcmFtZVRlc3QoKSk7
IH0KLQotcHJpdmF0ZToKLSAgICBndWludDY0IHdlYlBhZ2VGcm9tQXJncyhHVmFyaWFudCogYXJn
cykKLSAgICB7Ci0gICAgICAgIEdWYXJpYW50SXRlciBpdGVyOwotICAgICAgICBnX3ZhcmlhbnRf
aXRlcl9pbml0KCZpdGVyLCBhcmdzKTsKLQotICAgICAgICBjb25zdCBjaGFyKiBrZXk7Ci0gICAg
ICAgIEdWYXJpYW50KiB2YWx1ZTsKLSAgICAgICAgd2hpbGUgKGdfdmFyaWFudF9pdGVyX2xvb3Ao
Jml0ZXIsICJ7JnN2fSIsICZrZXksICZ2YWx1ZSkpIHsKLSAgICAgICAgICAgIGlmICghc3RyY21w
KGtleSwgInBhZ2VJRCIpICYmIGdfdmFyaWFudF9jbGFzc2lmeSh2YWx1ZSkgPT0gR19WQVJJQU5U
X0NMQVNTX1VJTlQ2NCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZ192YXJpYW50X2dldF91aW50
NjQodmFsdWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgYm9vbCB0ZXN0TWFpbkZyYW1lKFdlYktp
dFdlYkV4dGVuc2lvbiogZXh0ZW5zaW9uLCBHVmFyaWFudCogYXJncykKLSAgICB7Ci0gICAgICAg
IFdlYktpdFdlYlBhZ2UqIHBhZ2UgPSB3ZWJraXRfd2ViX2V4dGVuc2lvbl9nZXRfcGFnZShleHRl
bnNpb24sIHdlYlBhZ2VGcm9tQXJncyhhcmdzKSk7Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJVF9J
U19XRUJfUEFHRShwYWdlKSk7Ci0KLSAgICAgICAgV2ViS2l0RnJhbWUqIGZyYW1lID0gd2Via2l0
X3dlYl9wYWdlX2dldF9tYWluX2ZyYW1lKHBhZ2UpOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRf
SVNfRlJBTUUoZnJhbWUpKTsKLSAgICAgICAgZ19hc3NlcnQod2Via2l0X2ZyYW1lX2lzX21haW5f
ZnJhbWUoZnJhbWUpKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBib29s
IHRlc3RVUkkoV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24sIEdWYXJpYW50KiBhcmdzKQot
ICAgIHsKLSAgICAgICAgV2ViS2l0V2ViUGFnZSogcGFnZSA9IHdlYmtpdF93ZWJfZXh0ZW5zaW9u
X2dldF9wYWdlKGV4dGVuc2lvbiwgd2ViUGFnZUZyb21BcmdzKGFyZ3MpKTsKLSAgICAgICAgZ19h
c3NlcnQoV0VCS0lUX0lTX1dFQl9QQUdFKHBhZ2UpKTsKLQotICAgICAgICBXZWJLaXRGcmFtZSog
ZnJhbWUgPSB3ZWJraXRfd2ViX3BhZ2VfZ2V0X21haW5fZnJhbWUocGFnZSk7Ci0gICAgICAgIGdf
YXNzZXJ0KFdFQktJVF9JU19GUkFNRShmcmFtZSkpOwotICAgICAgICBnX2Fzc2VydF9jbXBzdHIo
d2Via2l0X3dlYl9wYWdlX2dldF91cmkocGFnZSksID09LCB3ZWJraXRfZnJhbWVfZ2V0X3VyaShm
cmFtZSkpOwotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGJvb2wgdGVzdEph
dmFTY3JpcHRDb250ZXh0KFdlYktpdFdlYkV4dGVuc2lvbiogZXh0ZW5zaW9uLCBHVmFyaWFudCog
YXJncykKLSAgICB7Ci0gICAgICAgIFdlYktpdFdlYlBhZ2UqIHBhZ2UgPSB3ZWJraXRfd2ViX2V4
dGVuc2lvbl9nZXRfcGFnZShleHRlbnNpb24sIHdlYlBhZ2VGcm9tQXJncyhhcmdzKSk7Ci0gICAg
ICAgIGdfYXNzZXJ0KFdFQktJVF9JU19XRUJfUEFHRShwYWdlKSk7Ci0KLSAgICAgICAgV2ViS2l0
RnJhbWUqIGZyYW1lID0gd2Via2l0X3dlYl9wYWdlX2dldF9tYWluX2ZyYW1lKHBhZ2UpOwotICAg
ICAgICBnX2Fzc2VydChXRUJLSVRfSVNfRlJBTUUoZnJhbWUpKTsKLSAgICAgICAgZ19hc3NlcnQo
d2Via2l0X2ZyYW1lX2dldF9qYXZhc2NyaXB0X2dsb2JhbF9jb250ZXh0KGZyYW1lKSk7Ci0KLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgdmlydHVhbCBib29sIHJ1blRlc3QoY29u
c3QgY2hhciogdGVzdE5hbWUsIFdlYktpdFdlYkV4dGVuc2lvbiogZXh0ZW5zaW9uLCBHVmFyaWFu
dCogYXJncykKLSAgICB7Ci0gICAgICAgIGlmICghc3RyY21wKHRlc3ROYW1lLCAibWFpbi1mcmFt
ZSIpKQotICAgICAgICAgICAgcmV0dXJuIHRlc3RNYWluRnJhbWUoZXh0ZW5zaW9uLCBhcmdzKTsK
LSAgICAgICAgaWYgKCFzdHJjbXAodGVzdE5hbWUsICJ1cmkiKSkKLSAgICAgICAgICAgIHJldHVy
biB0ZXN0VVJJKGV4dGVuc2lvbiwgYXJncyk7Ci0gICAgICAgIGlmICghc3RyY21wKHRlc3ROYW1l
LCAiamF2YXNjcmlwdC1jb250ZXh0IikpCi0gICAgICAgICAgICByZXR1cm4gdGVzdEphdmFTY3Jp
cHRDb250ZXh0KGV4dGVuc2lvbiwgYXJncyk7Ci0KLSAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNo
ZWQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX07Ci0KLXN0YXRpYyB2b2lkIF9f
YXR0cmlidXRlX18oKGNvbnN0cnVjdG9yKSkgcmVnaXN0ZXJUZXN0cygpCi17Ci0gICAgUkVHSVNU
RVJfVEVTVChXZWJLaXRGcmFtZVRlc3QsICJXZWJLaXRGcmFtZS9tYWluLWZyYW1lIik7Ci0gICAg
UkVHSVNURVJfVEVTVChXZWJLaXRGcmFtZVRlc3QsICJXZWJLaXRGcmFtZS91cmkiKTsKLSAgICBS
RUdJU1RFUl9URVNUKFdlYktpdEZyYW1lVGVzdCwgIldlYktpdEZyYW1lL2phdmFzY3JpcHQtY29u
dGV4dCIpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9HTlVtYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTVlYzdk
MS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9H
TlVtYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDMyNiArMCwwIEBACi1pZiBFTkFCTEVf
V0VCS0lUMgotCi1URVNUX1BST0dTICs9IFwKLQlQcm9ncmFtcy9XZWJLaXQyR09iamVjdEFQSVRl
c3RzL0luc3BlY3RvclRlc3RTZXJ2ZXIgXAotCVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVz
dHMvVGVzdEF1dGhlbnRpY2F0aW9uIFwKLQlQcm9ncmFtcy9XZWJLaXQyR09iamVjdEFQSVRlc3Rz
L1Rlc3RCYWNrRm9yd2FyZExpc3QgXAotCVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVzdHMv
VGVzdENvbnRleHRNZW51IFwKLQlQcm9ncmFtcy9XZWJLaXQyR09iamVjdEFQSVRlc3RzL1Rlc3RD
b29raWVNYW5hZ2VyIFwKLQlQcm9ncmFtcy9XZWJLaXQyR09iamVjdEFQSVRlc3RzL1Rlc3RET01O
b2RlIFwKLQlQcm9ncmFtcy9XZWJLaXQyR09iamVjdEFQSVRlc3RzL1Rlc3REb3dubG9hZHMgXAot
CVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdEZyYW1lIFwKLQlQcm9ncmFtcy9X
ZWJLaXQyR09iamVjdEFQSVRlc3RzL1Rlc3RJbnNwZWN0b3IgXAotCVByb2dyYW1zL1dlYktpdDJH
T2JqZWN0QVBJVGVzdHMvVGVzdEluc3BlY3RvclNlcnZlciBcCi0JUHJvZ3JhbXMvV2ViS2l0MkdP
YmplY3RBUElUZXN0cy9UZXN0TG9hZGVyQ2xpZW50IFwKLQlQcm9ncmFtcy9XZWJLaXQyR09iamVj
dEFQSVRlc3RzL1Rlc3RQcmludGluZyBcCi0JUHJvZ3JhbXMvV2ViS2l0MkdPYmplY3RBUElUZXN0
cy9UZXN0UmVzb3VyY2VzIFwKLQlQcm9ncmFtcy9XZWJLaXQyR09iamVjdEFQSVRlc3RzL1Rlc3RT
U0wgXAotCVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdFVJQ2xpZW50IFwKLQlQ
cm9ncmFtcy9XZWJLaXQyR09iamVjdEFQSVRlc3RzL1Rlc3RXZWJFeHRlbnNpb25zIFwKLQlQcm9n
cmFtcy9XZWJLaXQyR09iamVjdEFQSVRlc3RzL1Rlc3RXZWJLaXRWZXJzaW9uIFwKLQlQcm9ncmFt
cy9XZWJLaXQyR09iamVjdEFQSVRlc3RzL1Rlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2UgXAotCVBy
b2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdFdlYktpdEZpbmRDb250cm9sbGVyIFwK
LQlQcm9ncmFtcy9XZWJLaXQyR09iamVjdEFQSVRlc3RzL1Rlc3RXZWJLaXRQb2xpY3lDbGllbnQg
XAotCVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdFdlYktpdFNldHRpbmdzIFwK
LQlQcm9ncmFtcy9XZWJLaXQyR09iamVjdEFQSVRlc3RzL1Rlc3RXZWJLaXRXZWJDb250ZXh0IFwK
LQlQcm9ncmFtcy9XZWJLaXQyR09iamVjdEFQSVRlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3IFwKLQlQ
cm9ncmFtcy9XZWJLaXQyR09iamVjdEFQSVRlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3R3JvdXAgXAot
CVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdFdlYlZpZXdFZGl0b3IKLQotbm9p
bnN0X1BST0dSQU1TICs9ICQoVEVTVF9QUk9HUykKLQotaWYgSEFWRV9BVFNQSTIKLVRFU1RfUFJP
R1MgKz0gUHJvZ3JhbXMvV2ViS2l0MkdPYmplY3RBUElUZXN0cy9UZXN0V2ViS2l0QWNjZXNzaWJp
bGl0eQotCi1ub2luc3RfUFJPR1JBTVMgKz0gUHJvZ3JhbXMvV2ViS2l0MkdPYmplY3RBUElUZXN0
cy9BY2Nlc3NpYmlsaXR5VGVzdFNlcnZlcgotZW5kaWYKLQotd2Via2l0Ml90ZXN0c19jcHBmbGFn
cyA9IFwKLQktRFdFQktJVF9FWEVDX1BBVEg9XCIke3NoZWxsIHB3ZH0vJCh0b3BfYnVpbGRkaXIp
L1Byb2dyYW1zXCIgXAotCS1EV0VCS0lUX1NSQ19ESVI9XCIke3NoZWxsIHB3ZH0vJHtzcmNkaXJ9
XCIgXAotCS1EV0VCS0lUX0RFUklWRURfU1JDX0RJUj1cIiR7c2hlbGwgcHdkfS8ke3RvcF9idWls
ZGRpcn0vRGVyaXZlZFNvdXJjZXNcIiBcCi0JLURXRUJLSVRfVEVTVF9QTFVHSU5fRElSPVwiJHtz
aGVsbCBwd2R9LyR7dG9wX2J1aWxkZGlyfS9UZXN0TmV0c2NhcGVQbHVnaW4vLmxpYnNcIiBcCi0J
LURXRUJLSVRfVEVTVF9XRUJfRVhURU5TSU9OU19ESVI9XCIke3NoZWxsIHB3ZH0vJHt0b3BfYnVp
bGRkaXJ9L0xpYnJhcmllcy9XZWJFeHRlbnNpb25zLy5saWJzXCIgXAotCS1EV0VCS0lUX0lOSkVD
VEVEX0JVTkRMRV9QQVRIPVwiJHtzaGVsbCBwd2R9LyQodG9wX2J1aWxkZGlyKS8ubGlic1wiIFwK
LQkkKGphdmFzY3JpcHRjb3JlX2NwcGZsYWdzKSBcCi0JLUkkKHNyY2RpcikvU291cmNlL0phdmFT
Y3JpcHRDb3JlIFwKLQktSSQoc3JjZGlyKS9Tb3VyY2UgXAotCS1JJChzcmNkaXIpL1NvdXJjZS9X
ZWJLaXQyIFwKLQktSSQodG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL2luY2x1
ZGUgXAotCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvd2Via2l0Mmd0
ayBcCi0JLUkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi93ZWJraXQyZ3Rr
L2luY2x1ZGUgXAotCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
IFwKLQkkKGdsb2JhbF9jcHBmbGFncykgXAotCSQoRlJFRVRZUEVfQ0ZMQUdTKSBcCi0JJChHTElC
X0NGTEFHUykgXAotCSQoR1RLX0NGTEFHUykgXAotCSQoTElCU09VUF9DRkxBR1MpCi0KLXdlYmtp
dDJfdGVzdHNfbGRhZGQgPSBcCi0JTGlicmFyaWVzL2xpYldlYktpdDJBUElUZXN0Q29yZS5sYSBc
Ci0JbGliamF2YXNjcmlwdGNvcmVndGstQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkAuQFdF
QktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkAubGEgXAotCWxpYndlYmtpdDJndGstQFdFQktJVEdU
S19BUElfTUFKT1JfVkVSU0lPTkAuQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkAubGEgXAot
CSQoRlJFRVRZUEVfTElCUykgXAotCSQoR0VPQ0xVRV9MSUJTKSBcCi0JJChHTElCX0xJQlMpIFwK
LQkkKEdUS19MSUJTKSBcCi0JJChMSUJTT1VQX0xJQlMpCi0KLXdlYmtpdDJfdGVzdHNfbGRmbGFn
cyA9IFwKLQktbm8taW5zdGFsbAotCi1Qcm9ncmFtcy9yZXNvdXJjZXMvd2Via2l0Mmd0ay10ZXN0
cy1yZXNvdXJjZXMuZ3Jlc291cmNlOiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9yZXNvdXJjZXMvd2Via2l0Mmd0ay10ZXN0cy5ncmVzb3VyY2UueG1sICQoc2hlbGwgJChH
TElCX0NPTVBJTEVfUkVTT1VSQ0VTKSAtLXNvdXJjZWRpcj0kKHNyY2RpcikgLS1nZW5lcmF0ZS1k
ZXBlbmRlbmNpZXMgJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL3Jlc291cmNlcy93ZWJraXQyZ3RrLXRlc3RzLmdyZXNvdXJjZS54bWwpCi0JJChBTV9WX2F0
KW1rZGlyIC1wICR7R0VOUFJPR1JBTVN9L3Jlc291cmNlcwotCSQoQU1fVl9HRU4pICQoR0xJQl9D
T01QSUxFX1JFU09VUkNFUykgLS10YXJnZXQ9JEAgLS1zb3VyY2VkaXI9JChzcmNkaXIpICQ8Ci0K
LVByb2dyYW1zL3Jlc291cmNlcy9pbnNwZWN0b3IvaW5zcGVjdG9yUGFnZUluZGV4Lmh0bWw6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvZnJvbnQtZW5kL2luc3BlY3Rv
clBhZ2VJbmRleC5odG1sCi0JJChBTV9WX2F0KW1rZGlyIC1wICR7R0VOUFJPR1JBTVN9L3Jlc291
cmNlcy9pbnNwZWN0b3IKLQkkKEFNX1ZfR0VOKWNwICQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL2Zyb250LWVuZC9pbnNwZWN0b3JQYWdlSW5kZXguaHRt
bCAke0dFTlBST0dSQU1TfS9yZXNvdXJjZXMvaW5zcGVjdG9yCi0KLURJU1RDTEVBTkZJTEVTICs9
IFwKLQlQcm9ncmFtcy9yZXNvdXJjZXMvd2Via2l0Mmd0ay10ZXN0cy1yZXNvdXJjZXMuZ3Jlc291
cmNlIFwKLQlQcm9ncmFtcy9yZXNvdXJjZXMvaW5zcGVjdG9yL2luc3BlY3RvclBhZ2VJbmRleC5o
dG1sCi0KLW5vaW5zdF9EQVRBICs9IFwKLQlQcm9ncmFtcy9yZXNvdXJjZXMvd2Via2l0Mmd0ay10
ZXN0cy1yZXNvdXJjZXMuZ3Jlc291cmNlIFwKLQlQcm9ncmFtcy9yZXNvdXJjZXMvaW5zcGVjdG9y
L2luc3BlY3RvclBhZ2VJbmRleC5odG1sCi0KLW5vaW5zdF9MVExJQlJBUklFUyArPSBMaWJyYXJp
ZXMvbGliV2ViS2l0MkFQSVRlc3RDb3JlLmxhCi1MaWJyYXJpZXNfbGliV2ViS2l0MkFQSVRlc3RD
b3JlX2xhX1NPVVJDRVMgPSBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvTG9hZFRyYWNraW5nVGVzdC5jcHAgXAotCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL0xvYWRUcmFja2luZ1Rlc3QuaCBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvV2ViS2l0VGVzdEJ1cy5jcHAgXAotCVNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYktpdFRlc3RCdXMuaCBcCi0JU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViS2l0VGVzdFNlcnZlci5jcHAgXAotCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYktpdFRlc3RTZXJ2ZXIuaCBcCi0JU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViUHJvY2Vzc1Rlc3RSdW5uZXIuY3Bw
IFwKLQlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJQcm9jZXNzVGVz
dFJ1bm5lci5oIFwKLQlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0
TWFpbi5jcHAgXAotCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RN
YWluLmggXAotCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdU
ZXN0LmNwcCBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmll
d1Rlc3QuaAotTGlicmFyaWVzX2xpYldlYktpdDJBUElUZXN0Q29yZV9sYV9DUFBGTEFHUyA9ICQo
d2Via2l0Ml90ZXN0c19jcHBmbGFncykKLQotbm9pbnN0X0xUTElCUkFSSUVTICs9IExpYnJhcmll
cy9XZWJFeHRlbnNpb25zL2xpYldlYkV4dGVuc2lvblRlc3QubGEKLUxpYnJhcmllc19XZWJFeHRl
bnNpb25zX2xpYldlYkV4dGVuc2lvblRlc3RfbGFfU09VUkNFUyA9IFwKLQlTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJFeHRlbnNpb25UZXN0LmNwcAotCi1MaWJyYXJp
ZXNfV2ViRXh0ZW5zaW9uc19saWJXZWJFeHRlbnNpb25UZXN0X2xhX0xERkxBR1MgPSBcCi0JLXJw
YXRoICR7c2hlbGwgcHdkfS8kKHRvcF9idWlsZGRpcikvTGlicmFyaWVzL1dlYkV4dGVuc2lvbnMv
LmxpYnMgXAotCSQobm9fdW5kZWZpbmVkKSBcCi0JLWF2b2lkLXZlcnNpb24gXAotCS1tb2R1bGUK
LQotTGlicmFyaWVzX1dlYkV4dGVuc2lvbnNfbGliV2ViRXh0ZW5zaW9uVGVzdF9sYV9DUFBGTEFH
UyA9IFwKLQktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsgXAotCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2VzIFwKLQktSSQo
dG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL3dlYmtpdDJleHRlbnNpb24vaW5j
bHVkZSBcCi0JLURXRUJLSVQyX0NPTVBJTEFUSU9OIFwKLQkkKHdlYmtpdDJfdGVzdHNfY3BwZmxh
Z3MpCi0KLUxpYnJhcmllc19XZWJFeHRlbnNpb25zX2xpYldlYkV4dGVuc2lvblRlc3RfbGFfQ1hY
RkxBR1MgPSBcCi0gICAgICAgICQoZ2xvYmFsX2N4eGZsYWdzKQotCi1MaWJyYXJpZXNfV2ViRXh0
ZW5zaW9uc19saWJXZWJFeHRlbnNpb25UZXN0X2xhX0NGTEFHUyA9IFwKLSAgICAgICAgJChnbG9i
YWxfY2ZsYWdzKQotCi0KLW5vaW5zdF9MVExJQlJBUklFUyArPSBMaWJyYXJpZXMvV2ViRXh0ZW5z
aW9ucy9saWJXZWJQcm9jZXNzVGVzdC5sYQotTGlicmFyaWVzX1dlYkV4dGVuc2lvbnNfbGliV2Vi
UHJvY2Vzc1Rlc3RfbGFfU09VUkNFUyA9IFwKLQlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9ET01Ob2RlVGVzdC5jcHAgXAotCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL0ZyYW1lVGVzdC5jcHAgXAotCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL1dlYlByb2Nlc3NUZXN0LmNwcCBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvV2ViUHJvY2Vzc1Rlc3QuaAotCi1MaWJyYXJpZXNfV2ViRXh0ZW5z
aW9uc19saWJXZWJQcm9jZXNzVGVzdF9sYV9MREZMQUdTID0gXAotCS1ycGF0aCAke3NoZWxsIHB3
ZH0vJCh0b3BfYnVpbGRkaXIpL0xpYnJhcmllcy9XZWJFeHRlbnNpb25zLy5saWJzIFwKLQkkKG5v
X3VuZGVmaW5lZCkgXAotCS1hdm9pZC12ZXJzaW9uIFwKLQktbW9kdWxlCi0KLUxpYnJhcmllc19X
ZWJFeHRlbnNpb25zX2xpYldlYlByb2Nlc3NUZXN0X2xhX0NQUEZMQUdTID0gXAotCS1JJChzcmNk
aXIpL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ayBcCi0J
LUkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJjZXMgXAotCS1JJCh0b3BfYnVpbGRkaXIpL0Rl
cml2ZWRTb3VyY2VzL1dlYktpdDIvd2Via2l0MmV4dGVuc2lvbi9pbmNsdWRlIFwKLQktRFdFQktJ
VDJfQ09NUElMQVRJT04gXAotCSQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKLQotTGlicmFyaWVz
X1dlYkV4dGVuc2lvbnNfbGliV2ViUHJvY2Vzc1Rlc3RfbGFfQ1hYRkxBR1MgPSBcCi0JJChnbG9i
YWxfY3h4ZmxhZ3MpCi0KLUxpYnJhcmllc19XZWJFeHRlbnNpb25zX2xpYldlYlByb2Nlc3NUZXN0
X2xhX0NGTEFHUyA9IFwKLQkkKGdsb2JhbF9jZmxhZ3MpCi0KLQotRVhUUkFfRElTVCArPSBcCi0J
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3QtY2Vy
dC5wZW0gXAotCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL3Jlc291cmNl
cy90ZXN0LWtleS5wZW0gXAotCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L3Jlc291cmNlcy93ZWJraXQyZ3RrLXRlc3RzLmdyZXNvdXJjZS54bWwgXAotCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL3Jlc291cmNlcy9saW5rLXRpdGxlLmpzCi0KLVBy
b2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktpdFdlYkNvbnRleHRfU09VUkNF
UyA9IFwKLQlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0
V2ViQ29udGV4dC5jcHAKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktp
dFdlYkNvbnRleHRfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MpCi1Qcm9ncmFt
c19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJLaXRXZWJDb250ZXh0X0xEQUREID0gJCh3
ZWJraXQyX3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0
V2ViS2l0V2ViQ29udGV4dF9MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCi0KLVBy
b2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktpdFdlYlZpZXdfU09VUkNFUyA9
IFwKLQlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2Vi
Vmlldy5jcHAKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktpdFdlYlZp
ZXdfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQy
R09iamVjdEFQSVRlc3RzX1Rlc3RXZWJLaXRXZWJWaWV3X0xEQUREID0gJCh3ZWJraXQyX3Rlc3Rz
X2xkYWRkKQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2ViS2l0V2ViVmll
d19MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDJH
T2JqZWN0QVBJVGVzdHNfVGVzdExvYWRlckNsaWVudF9TT1VSQ0VTID0gXAotCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RMb2FkZXJDbGllbnQuY3BwCi1Qcm9ncmFt
c19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RMb2FkZXJDbGllbnRfQ1BQRkxBR1MgPSAkKHdl
YmtpdDJfdGVzdHNfY3BwZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rl
c3RMb2FkZXJDbGllbnRfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19X
ZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RMb2FkZXJDbGllbnRfTERGTEFHUyA9ICQod2Via2l0
Ml90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RX
ZWJLaXRTZXR0aW5nc19TT1VSQ0VTID0gXAotCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL1Rlc3RXZWJLaXRTZXR0aW5ncy5jcHAKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0
QVBJVGVzdHNfVGVzdFdlYktpdFNldHRpbmdzX0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2Nw
cGZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2ViS2l0U2V0dGlu
Z3NfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVj
dEFQSVRlc3RzX1Rlc3RXZWJLaXRTZXR0aW5nc19MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xk
ZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfSW5zcGVjdG9yVGVzdFNl
cnZlcl9TT1VSQ0VTID0gXAotCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L0luc3BlY3RvclRlc3RTZXJ2ZXIuY3BwCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3Rz
X0luc3BlY3RvclRlc3RTZXJ2ZXJfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3Mp
Ci1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX0luc3BlY3RvclRlc3RTZXJ2ZXJfTERB
REQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRl
c3RzX0luc3BlY3RvclRlc3RTZXJ2ZXJfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdz
KQotCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RCYWNrRm9yd2FyZExpc3Rf
U09VUkNFUyA9IFwKLSAgICAgICAgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvVGVzdEJhY2tGb3J3YXJkTGlzdC5jcHAKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVz
dHNfVGVzdEJhY2tGb3J3YXJkTGlzdF9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFn
cykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdEJhY2tGb3J3YXJkTGlzdF9M
REFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJ
VGVzdHNfVGVzdEJhY2tGb3J3YXJkTGlzdF9MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxh
Z3MpCi0KLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktpdFBvbGljeUNs
aWVudF9TT1VSQ0VTID0gXAotICAgICAgICBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9UZXN0V2ViS2l0UG9saWN5Q2xpZW50LmNwcAotUHJvZ3JhbXNfV2ViS2l0MkdPYmpl
Y3RBUElUZXN0c19UZXN0V2ViS2l0UG9saWN5Q2xpZW50X0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rl
c3RzX2NwcGZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2ViS2l0
UG9saWN5Q2xpZW50X0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfV2Vi
S2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2ViS2l0UG9saWN5Q2xpZW50X0xERkxBR1MgPSAkKHdl
YmtpdDJfdGVzdHNfbGRmbGFncykKLQotaWYgSEFWRV9BVFNQSTIKLVByb2dyYW1zX1dlYktpdDJH
T2JqZWN0QVBJVGVzdHNfQWNjZXNzaWJpbGl0eVRlc3RTZXJ2ZXJfU09VUkNFUyA9IFwKLQlTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9BY2Nlc3NpYmlsaXR5VGVzdFNlcnZl
ci5jcHAKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfQWNjZXNzaWJpbGl0eVRlc3RT
ZXJ2ZXJfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MpCi1Qcm9ncmFtc19XZWJL
aXQyR09iamVjdEFQSVRlc3RzX0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyX0xEQUREID0gJCh3ZWJr
aXQyX3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19BY2Nlc3Np
YmlsaXR5VGVzdFNlcnZlcl9MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCi0KLVBy
b2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktpdEFjY2Vzc2liaWxpdHlfU09V
UkNFUyA9IFwKLQlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2Vi
S2l0QWNjZXNzaWJpbGl0eS5jcHAKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVz
dFdlYktpdEFjY2Vzc2liaWxpdHlfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3Mp
ICQoQVRTUEkyX0NGTEFHUykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdl
YktpdEFjY2Vzc2liaWxpdHlfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpICQoQVRTUEky
X0xJQlMpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJLaXRBY2Nlc3Np
YmlsaXR5X0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKLWVuZGlmCi0KLVByb2dy
YW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdERvd25sb2Fkc19TT1VSQ0VTID0gXAotICAg
ICAgICBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0RG93bmxvYWRz
LmNwcAotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0RG93bmxvYWRzX0NQUEZM
QUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RB
UElUZXN0c19UZXN0RG93bmxvYWRzX0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQotUHJv
Z3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0RG93bmxvYWRzX0xERkxBR1MgPSAkKHdl
YmtpdDJfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19U
ZXN0V2ViVmlld0VkaXRvcl9TT1VSQ0VTID0gXAotICAgICAgICBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViVmlld0VkaXRvci5jcHAKLVByb2dyYW1zX1dlYktp
dDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYlZpZXdFZGl0b3JfQ1BQRkxBR1MgPSAkKHdlYmtpdDJf
dGVzdHNfY3BwZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJW
aWV3RWRpdG9yX0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfV2ViS2l0
MkdPYmplY3RBUElUZXN0c19UZXN0V2ViVmlld0VkaXRvcl9MREZMQUdTID0gJCh3ZWJraXQyX3Rl
c3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFByaW50
aW5nX1NPVVJDRVMgPSBcCi0gICAgICAgIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL1Rlc3RQcmludGluZy5jcHAKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNf
VGVzdFByaW50aW5nX0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKSAkKEdUS19V
TklYX1BSSU5USU5HX0NGTEFHUykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVz
dFByaW50aW5nX0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKSAkKEdUS19VTklYX1BSSU5U
SU5HX0xJQlMpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RQcmludGluZ19M
REZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDJHT2Jq
ZWN0QVBJVGVzdHNfVGVzdFdlYktpdEZhdmljb25EYXRhYmFzZV9TT1VSQ0VTID0gXAotCVNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRGYXZpY29uRGF0YWJh
c2UuY3BwCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJLaXRGYXZpY29u
RGF0YWJhc2VfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MpCi1Qcm9ncmFtc19X
ZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VfTERBREQgPSAk
KHdlYmtpdDJfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rl
c3RXZWJLaXRGYXZpY29uRGF0YWJhc2VfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdz
KQotCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJLaXRGaW5kQ29udHJv
bGxlcl9TT1VSQ0VTID0gXAotCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxlci5jcHAKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJ
VGVzdHNfVGVzdFdlYktpdEZpbmRDb250cm9sbGVyX0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3Rz
X2NwcGZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2ViS2l0Rmlu
ZENvbnRyb2xsZXJfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJL
aXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxlcl9MREZMQUdTID0gJCh3
ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNf
VGVzdFJlc291cmNlc19TT1VSQ0VTID0gXAotICAgICAgICBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9UZXN0UmVzb3VyY2VzLmNwcAotUHJvZ3JhbXNfV2ViS2l0MkdPYmpl
Y3RBUElUZXN0c19UZXN0UmVzb3VyY2VzX0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZs
YWdzKQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0UmVzb3VyY2VzX0xEQURE
ID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0
c19UZXN0UmVzb3VyY2VzX0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKLQotUHJv
Z3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0Q29va2llTWFuYWdlcl9TT1VSQ0VTID0g
XAotICAgICAgICBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0Q29v
a2llTWFuYWdlci5jcHAKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdENvb2tp
ZU1hbmFnZXJfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MpCi1Qcm9ncmFtc19X
ZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RDb29raWVNYW5hZ2VyX0xEQUREID0gJCh3ZWJraXQy
X3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0Q29va2ll
TWFuYWdlcl9MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dl
YktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdEluc3BlY3Rvcl9TT1VSQ0VTID0gXAotICAgICAgICBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0SW5zcGVjdG9yLmNwcAot
UHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0SW5zcGVjdG9yX0NQUEZMQUdTID0g
XAotCSQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJ
VGVzdHNfVGVzdEluc3BlY3Rvcl9MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKLVByb2dy
YW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdEluc3BlY3Rvcl9MREZMQUdTID0gJCh3ZWJr
aXQyX3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVz
dEluc3BlY3RvclNlcnZlcl9TT1VSQ0VTID0gXAotCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL1Rlc3RJbnNwZWN0b3JTZXJ2ZXIuY3BwCi1Qcm9ncmFtc19XZWJLaXQyR09i
amVjdEFQSVRlc3RzX1Rlc3RJbnNwZWN0b3JTZXJ2ZXJfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVz
dHNfY3BwZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RJbnNwZWN0
b3JTZXJ2ZXJfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQy
R09iamVjdEFQSVRlc3RzX1Rlc3RJbnNwZWN0b3JTZXJ2ZXJfTERGTEFHUyA9ICQod2Via2l0Ml90
ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJL
aXRWZXJzaW9uX1NPVVJDRVMgPSBcCi0gICAgICAgIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRWZXJzaW9uLmNwcAotUHJvZ3JhbXNfV2ViS2l0MkdPYmpl
Y3RBUElUZXN0c19UZXN0V2ViS2l0VmVyc2lvbl9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19j
cHBmbGFncykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktpdFZlcnNp
b25fTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVj
dEFQSVRlc3RzX1Rlc3RXZWJLaXRWZXJzaW9uX0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRm
bGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0Q29udGV4dE1lbnVf
U09VUkNFUyA9IFwKLSAgICAgICAgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvVGVzdENvbnRleHRNZW51LmNwcAotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19U
ZXN0Q29udGV4dE1lbnVfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MpCi1Qcm9n
cmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RDb250ZXh0TWVudV9MREFERCA9ICQod2Vi
a2l0Ml90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdENv
bnRleHRNZW51X0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNf
V2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0U1NMX1NPVVJDRVMgPSBcCi0gICAgICAgIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RTU0wuY3BwCi1Qcm9ncmFtc19X
ZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RTU0xfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNf
Y3BwZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RTU0xfTERBREQg
PSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3Rz
X1Rlc3RTU0xfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19X
ZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJFeHRlbnNpb25zX1NPVVJDRVMgPSBcCi0gICAg
ICAgIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJFeHRlbnNp
b25zLmNwcAotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2ViRXh0ZW5zaW9u
c19DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKLVByb2dyYW1zX1dlYktpdDJH
T2JqZWN0QVBJVGVzdHNfVGVzdFdlYkV4dGVuc2lvbnNfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNf
bGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJFeHRlbnNpb25z
X0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MkdP
YmplY3RBUElUZXN0c19UZXN0V2ViS2l0V2ViVmlld0dyb3VwX1NPVVJDRVMgPSBcCi0gICAgICAg
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3
R3JvdXAuY3BwCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJLaXRXZWJW
aWV3R3JvdXBfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MpCi1Qcm9ncmFtc19X
ZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJLaXRXZWJWaWV3R3JvdXBfTERBREQgPSAkKHdl
YmtpdDJfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RX
ZWJLaXRXZWJWaWV3R3JvdXBfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQotCi1Q
cm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RET01Ob2RlX1NPVVJDRVMgPSBcCi0g
ICAgICAgIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RET01Ob2Rl
LmNwcAotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0RE9NTm9kZV9DUFBGTEFH
UyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJ
VGVzdHNfVGVzdERPTU5vZGVfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCi1Qcm9ncmFt
c19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RET01Ob2RlX0xERkxBR1MgPSAkKHdlYmtpdDJf
dGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0RnJh
bWVfU09VUkNFUyA9IFwKLSAgICAgICAgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvVGVzdEZyYW1lLmNwcAotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0
RnJhbWVfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MpCi1Qcm9ncmFtc19XZWJL
aXQyR09iamVjdEFQSVRlc3RzX1Rlc3RGcmFtZV9MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFk
ZCkKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdEZyYW1lX0xERkxBR1MgPSAk
KHdlYmtpdDJfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0
c19UZXN0QXV0aGVudGljYXRpb25fU09VUkNFUyA9IFwKLSAgICAgICAgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdEF1dGhlbnRpY2F0aW9uLmNwcAotUHJvZ3JhbXNf
V2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0QXV0aGVudGljYXRpb25fQ1BQRkxBR1MgPSAkKHdl
YmtpdDJfdGVzdHNfY3BwZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rl
c3RBdXRoZW50aWNhdGlvbl9MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKLVByb2dyYW1z
X1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdEF1dGhlbnRpY2F0aW9uX0xERkxBR1MgPSAkKHdl
YmtpdDJfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19U
ZXN0VUlDbGllbnRfU09VUkNFUyA9IFwKLSAgICAgICAgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvVGVzdFVJQ2xpZW50LmNwcAotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RB
UElUZXN0c19UZXN0VUlDbGllbnRfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3Mp
Ci1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RVSUNsaWVudF9MREFERCA9ICQo
d2Via2l0Ml90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVz
dFVJQ2xpZW50X0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKLQotZW5kaWYgIyBF
TkFCTEVfV0VCS0lUMgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvSW5zcGVjdG9yVGVzdFNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9JbnNwZWN0b3JUZXN0U2VydmVyLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZjEzYjA0My4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9JbnNwZWN0b3JUZXN0U2VydmVyLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVj
dHJvbmljcyBMdGQuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLSAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3ZWJraXQy
L3dlYmtpdDIuaD4KLQotc3RhdGljIHZvaWQgbG9hZENoYW5nZWRDYWxsYmFjayhXZWJLaXRXZWJW
aWV3KiwgV2ViS2l0TG9hZEV2ZW50IGxvYWRFdmVudCwgZ3BvaW50ZXIpCi17Ci0gICAgLy8gU2Vu
ZCBhIG1lc3NhZ2UgdG8gdGhlIHBhcmVudCBwcm9jZXNzIHdoZW4gd2UncmUgcmVhZHkuCi0gICAg
aWYgKGxvYWRFdmVudCA9PSBXRUJLSVRfTE9BRF9GSU5JU0hFRCkKLSAgICAgICAgZ19wcmludCgi
T0siKTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotewotICAgIGd0a19p
bml0KCZhcmdjLCAmYXJndik7Ci0KLSAgICAvLyBPdmVyd3JpdGUgV0VCS0lUX0lOU1BFQ1RPUl9T
RVJWRVIgdmFyaWFibGUgd2l0aCBkZWZhdWx0IHZhbHVlLgotICAgIGdfc2V0ZW52KCJXRUJLSVRf
SU5TUEVDVE9SX1NFUlZFUiIsICIxMjcuMC4wLjE6Mjk5OSIsIFRSVUUpOwotCi0gICAgV2ViS2l0
V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkp
OwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX2RldmVsb3Blcl9leHRyYXMod2Via2l0
X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3KSwgVFJVRSk7Ci0gICAgd2Via2l0X3dlYl92
aWV3X2xvYWRfaHRtbCh3ZWJWaWV3LAotICAgICAgICAiPGh0bWw+PGJvZHk+PHA+V2ViS2l0R1RL
KyBJbnNwZWN0b3IgVGVzdCBTZXJ2ZXI8L3A+PC9ib2R5PjwvaHRtbD4iLAotICAgICAgICAiaHR0
cDovLzEyNy4wLjAuMToyOTk5LyIpOwotCi0gICAgR3RrV2lkZ2V0KiB3aW5kb3cgPSBndGtfd2lu
ZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKLSAgICBndGtfY29udGFpbmVyX2FkZChHVEtf
Q09OVEFJTkVSKHdpbmRvdyksIEdUS19XSURHRVQod2ViVmlldykpOwotICAgIGd0a193aWRnZXRf
c2hvd19hbGwod2luZG93KTsKLQotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2luZG93LCAiZGVsZXRl
LWV2ZW50IiwgR19DQUxMQkFDSyhndGtfbWFpbl9xdWl0KSwgMCk7Ci0gICAgZ19zaWduYWxfY29u
bmVjdCh3ZWJWaWV3LCAibG9hZC1jaGFuZ2VkIiwgR19DQUxMQkFDSyhsb2FkQ2hhbmdlZENhbGxi
YWNrKSwgMCk7Ci0KLSAgICBndGtfbWFpbigpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvTG9hZFRyYWNraW5nVGVzdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9Mb2FkVHJhY2tpbmdUZXN0LmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGYzNDIwNC4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9Mb2FkVHJhY2tpbmdUZXN0LmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDIwNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEln
YWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJMb2FkVHJhY2tpbmdUZXN0
LmgiCi0KLSNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdDIuaD4KLQotc3RhdGljIHZvaWQgbG9hZENo
YW5nZWRDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRMb2FkRXZlbnQgbG9h
ZEV2ZW50LCBMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0KQotewotICAgIHN3aXRjaCAobG9hZEV2ZW50
KSB7Ci0gICAgY2FzZSBXRUJLSVRfTE9BRF9TVEFSVEVEOgotICAgICAgICBnX2Fzc2VydCh3ZWJr
aXRfd2ViX3ZpZXdfaXNfbG9hZGluZyh3ZWJWaWV3KSk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0
cih0ZXN0LT5tX2FjdGl2ZVVSSS5kYXRhKCksID09LCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSh3
ZWJWaWV3KSk7Ci0gICAgICAgIHRlc3QtPnByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQoKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBXRUJLSVRfTE9BRF9SRURJUkVDVEVEOgotICAgICAgICBnX2Fz
c2VydCh3ZWJraXRfd2ViX3ZpZXdfaXNfbG9hZGluZyh3ZWJWaWV3KSk7Ci0gICAgICAgIHRlc3Qt
Pm1fYWN0aXZlVVJJID0gd2Via2l0X3dlYl92aWV3X2dldF91cmkod2ViVmlldyk7Ci0gICAgICAg
IGlmICghdGVzdC0+bV9yZWRpcmVjdFVSSS5pc051bGwoKSkKLSAgICAgICAgICAgIGdfYXNzZXJ0
X2NtcHN0cih0ZXN0LT5tX3JlZGlyZWN0VVJJLmRhdGEoKSwgPT0sIHRlc3QtPm1fYWN0aXZlVVJJ
LmRhdGEoKSk7Ci0gICAgICAgIHRlc3QtPnByb3Zpc2lvbmFsTG9hZFJlY2VpdmVkU2VydmVyUmVk
aXJlY3QoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXRUJLSVRfTE9BRF9DT01NSVRURUQ6
IHsKLSAgICAgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2lzX2xvYWRpbmcod2ViVmlldykp
OwotICAgICAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9hY3RpdmVVUkkuZGF0YSgpLCA9PSwg
d2Via2l0X3dlYl92aWV3X2dldF91cmkod2ViVmlldykpOwotCi0gICAgICAgIC8vIENoZWNrIHRo
YXQgb24gY29tbWl0dGVkIHdlIGFsd2F5cyBoYXZlIGEgbWFpbiByZXNvdXJjZSB3aXRoIGEgcmVz
cG9uc2UuCi0gICAgICAgIFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSA9IHdlYmtpdF93ZWJf
dmlld19nZXRfbWFpbl9yZXNvdXJjZSh3ZWJWaWV3KTsKLSAgICAgICAgZ19hc3NlcnQocmVzb3Vy
Y2UpOwotICAgICAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3Jlc291cmNlX2dldF9yZXNwb25zZShy
ZXNvdXJjZSkpOwotCi0gICAgICAgIHRlc3QtPmxvYWRDb21taXR0ZWQoKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGNhc2UgV0VCS0lUX0xPQURfRklOSVNIRUQ6Ci0gICAgICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfaXNfbG9hZGluZyh3ZWJWaWV3KSk7Ci0gICAgICAgIGlmICgh
dGVzdC0+bV9sb2FkRmFpbGVkKQotICAgICAgICAgICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPm1f
YWN0aXZlVVJJLmRhdGEoKSwgPT0sIHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKHdlYlZpZXcpKTsK
LSAgICAgICAgdGVzdC0+bG9hZEZpbmlzaGVkKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0gICAgfQotfQotCi1zdGF0aWMg
dm9pZCBsb2FkRmFpbGVkQ2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0TG9h
ZEV2ZW50IGxvYWRFdmVudCwgY29uc3QgY2hhciogZmFpbGluZ1VSSSwgR0Vycm9yKiBlcnJvciwg
TG9hZFRyYWNraW5nVGVzdCogdGVzdCkKLXsKLSAgICB0ZXN0LT5tX2xvYWRGYWlsZWQgPSB0cnVl
OwotICAgIHRlc3QtPm1fZXJyb3Iuc2V0KGdfZXJyb3JfY29weShlcnJvcikpOwotCi0gICAgc3dp
dGNoIChsb2FkRXZlbnQpIHsKLSAgICBjYXNlIFdFQktJVF9MT0FEX1NUQVJURUQ6Ci0gICAgICAg
IGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfaXNfbG9hZGluZyh3ZWJWaWV3KSk7Ci0gICAgICAg
IGdfYXNzZXJ0X2NtcHN0cih0ZXN0LT5tX2FjdGl2ZVVSSS5kYXRhKCksID09LCB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X3VyaSh3ZWJWaWV3KSk7Ci0gICAgICAgIGdfYXNzZXJ0KGVycm9yKTsKLSAgICAg
ICAgdGVzdC0+cHJvdmlzaW9uYWxMb2FkRmFpbGVkKGZhaWxpbmdVUkksIGVycm9yKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBXRUJLSVRfTE9BRF9DT01NSVRURUQ6Ci0gICAgICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfaXNfbG9hZGluZyh3ZWJWaWV3KSk7Ci0gICAgICAgIGdfYXNz
ZXJ0X2NtcHN0cih0ZXN0LT5tX2FjdGl2ZVVSSS5kYXRhKCksID09LCB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X3VyaSh3ZWJWaWV3KSk7Ci0gICAgICAgIGdfYXNzZXJ0KGVycm9yKTsKLSAgICAgICAgdGVz
dC0+bG9hZEZhaWxlZChmYWlsaW5nVVJJLCBlcnJvcik7Ci0gICAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0gICAgfQotfQotCi1zdGF0
aWMgdm9pZCBlc3RpbWF0ZWRQcm9ncmVzc0NoYW5nZWRDYWxsYmFjayhHT2JqZWN0KiwgR1BhcmFt
U3BlYyosIExvYWRUcmFja2luZ1Rlc3QqIHRlc3QpCi17Ci0gICAgdGVzdC0+ZXN0aW1hdGVkUHJv
Z3Jlc3NDaGFuZ2VkKCk7Ci19Ci0KLUxvYWRUcmFja2luZ1Rlc3Q6OkxvYWRUcmFja2luZ1Rlc3Qo
KQotICAgIDogbV9ydW5Mb2FkVW50aWxDb21wbGV0aW9uKGZhbHNlKQotICAgICwgbV9sb2FkRmFp
bGVkKGZhbHNlKQotewotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAibG9hZC1jaGFu
Z2VkIiwgR19DQUxMQkFDSyhsb2FkQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19zaWdu
YWxfY29ubmVjdChtX3dlYlZpZXcsICJsb2FkLWZhaWxlZCIsIEdfQ0FMTEJBQ0sobG9hZEZhaWxl
ZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJub3Rp
Znk6OmVzdGltYXRlZC1sb2FkLXByb2dyZXNzIiwgR19DQUxMQkFDSyhlc3RpbWF0ZWRQcm9ncmVz
c0NoYW5nZWRDYWxsYmFjayksIHRoaXMpOwotCi0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmll
d19nZXRfdXJpKG1fd2ViVmlldykpOwotfQotCi1Mb2FkVHJhY2tpbmdUZXN0Ojp+TG9hZFRyYWNr
aW5nVGVzdCgpCi17Ci0gICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1f
d2ViVmlldywgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7Ci19Ci0KLXZv
aWQgTG9hZFRyYWNraW5nVGVzdDo6d2FpdFVudGlsTG9hZEZpbmlzaGVkKCkKLXsKLSAgICBtX2Vz
dGltYXRlZFByb2dyZXNzID0gMDsKLSAgICBtX3J1bkxvYWRVbnRpbENvbXBsZXRpb24gPSB0cnVl
OwotICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLX0KLQotdm9pZCBMb2FkVHJhY2tp
bmdUZXN0Ojpwcm92aXNpb25hbExvYWRTdGFydGVkKCkKLXsKLSAgICBtX2xvYWRFdmVudHMuYXBw
ZW5kKFByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOwotfQotCi12b2lkIExvYWRUcmFja2luZ1Rlc3Q6
OnByb3Zpc2lvbmFsTG9hZFJlY2VpdmVkU2VydmVyUmVkaXJlY3QoKQotewotICAgIG1fbG9hZEV2
ZW50cy5hcHBlbmQoUHJvdmlzaW9uYWxMb2FkUmVjZWl2ZWRTZXJ2ZXJSZWRpcmVjdCk7Ci19Ci0K
LXZvaWQgTG9hZFRyYWNraW5nVGVzdDo6cHJvdmlzaW9uYWxMb2FkRmFpbGVkKGNvbnN0IGdjaGFy
KiBmYWlsaW5nVVJJLCBHRXJyb3IqIGVycm9yKQotewotICAgIG1fbG9hZEV2ZW50cy5hcHBlbmQo
UHJvdmlzaW9uYWxMb2FkRmFpbGVkKTsKLX0KLQotdm9pZCBMb2FkVHJhY2tpbmdUZXN0Ojpsb2Fk
Q29tbWl0dGVkKCkKLXsKLSAgICBtX2xvYWRFdmVudHMuYXBwZW5kKExvYWRDb21taXR0ZWQpOwot
fQotCi12b2lkIExvYWRUcmFja2luZ1Rlc3Q6OmxvYWRGaW5pc2hlZCgpCi17Ci0gICAgbV9sb2Fk
RXZlbnRzLmFwcGVuZChMb2FkRmluaXNoZWQpOwotICAgIGlmIChtX3J1bkxvYWRVbnRpbENvbXBs
ZXRpb24pCi0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7Ci19Ci0KLXZvaWQg
TG9hZFRyYWNraW5nVGVzdDo6bG9hZEZhaWxlZChjb25zdCBnY2hhciogZmFpbGluZ1VSSSwgR0Vy
cm9yKiBlcnJvcikKLXsKLSAgICBtX2xvYWRFdmVudHMuYXBwZW5kKExvYWRGYWlsZWQpOwotfQot
Ci12b2lkIExvYWRUcmFja2luZ1Rlc3Q6OmVzdGltYXRlZFByb2dyZXNzQ2hhbmdlZCgpCi17Ci0g
ICAgZG91YmxlIHByb2dyZXNzID0gd2Via2l0X3dlYl92aWV3X2dldF9lc3RpbWF0ZWRfbG9hZF9w
cm9ncmVzcyhtX3dlYlZpZXcpOwotICAgIGdfYXNzZXJ0X2NtcGZsb2F0KG1fZXN0aW1hdGVkUHJv
Z3Jlc3MsIDwsIHByb2dyZXNzKTsKLSAgICBtX2VzdGltYXRlZFByb2dyZXNzID0gcHJvZ3Jlc3M7
Ci19Ci0KLXZvaWQgTG9hZFRyYWNraW5nVGVzdDo6bG9hZFVSSShjb25zdCBjaGFyKiB1cmkpCi17
Ci0gICAgbV9sb2FkRXZlbnRzLmNsZWFyKCk7Ci0gICAgbV9lc3RpbWF0ZWRQcm9ncmVzcyA9IDA7
Ci0gICAgbV9lcnJvci5jbGVhcigpOwotICAgIFdlYlZpZXdUZXN0Ojpsb2FkVVJJKHVyaSk7Ci19
Ci0KLXZvaWQgTG9hZFRyYWNraW5nVGVzdDo6bG9hZEh0bWwoY29uc3QgY2hhciogaHRtbCwgY29u
c3QgY2hhciogYmFzZVVSSSkKLXsKLSAgICBtX2xvYWRFdmVudHMuY2xlYXIoKTsKLSAgICBtX2Vz
dGltYXRlZFByb2dyZXNzID0gMDsKLSAgICBtX2Vycm9yLmNsZWFyKCk7Ci0gICAgV2ViVmlld1Rl
c3Q6OmxvYWRIdG1sKGh0bWwsIGJhc2VVUkkpOwotfQotCi12b2lkIExvYWRUcmFja2luZ1Rlc3Q6
OmxvYWRQbGFpblRleHQoY29uc3QgY2hhciogcGxhaW5UZXh0KQotewotICAgIG1fbG9hZEV2ZW50
cy5jbGVhcigpOwotICAgIG1fZXN0aW1hdGVkUHJvZ3Jlc3MgPSAwOwotICAgIG1fZXJyb3IuY2xl
YXIoKTsKLSAgICBXZWJWaWV3VGVzdDo6bG9hZFBsYWluVGV4dChwbGFpblRleHQpOwotfQotCi12
b2lkIExvYWRUcmFja2luZ1Rlc3Q6OmxvYWRSZXF1ZXN0KFdlYktpdFVSSVJlcXVlc3QqIHJlcXVl
c3QpCi17Ci0gICAgbV9sb2FkRXZlbnRzLmNsZWFyKCk7Ci0gICAgbV9lc3RpbWF0ZWRQcm9ncmVz
cyA9IDA7Ci0gICAgbV9lcnJvci5jbGVhcigpOwotICAgIFdlYlZpZXdUZXN0Ojpsb2FkUmVxdWVz
dChyZXF1ZXN0KTsKLX0KLQotdm9pZCBMb2FkVHJhY2tpbmdUZXN0OjpyZWxvYWQoKQotewotICAg
IG1fbG9hZEV2ZW50cy5jbGVhcigpOwotICAgIG1fZXN0aW1hdGVkUHJvZ3Jlc3MgPSAwOwotICAg
IG1fZXJyb3IuY2xlYXIoKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfcmVsb2FkKG1fd2ViVmlldyk7
Ci19Ci0KLXZvaWQgTG9hZFRyYWNraW5nVGVzdDo6Z29CYWNrKCkKLXsKLSAgICBtX2xvYWRFdmVu
dHMuY2xlYXIoKTsKLSAgICBtX2VzdGltYXRlZFByb2dyZXNzID0gMDsKLSAgICBtX2Vycm9yLmNs
ZWFyKCk7Ci0gICAgV2ViVmlld1Rlc3Q6OmdvQmFjaygpOwotfQotCi12b2lkIExvYWRUcmFja2lu
Z1Rlc3Q6OmdvRm9yd2FyZCgpCi17Ci0gICAgbV9sb2FkRXZlbnRzLmNsZWFyKCk7Ci0gICAgbV9l
c3RpbWF0ZWRQcm9ncmVzcyA9IDA7Ci0gICAgbV9lcnJvci5jbGVhcigpOwotICAgIFdlYlZpZXdU
ZXN0Ojpnb0ZvcndhcmQoKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL0xvYWRUcmFja2luZ1Rlc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL0xvYWRUcmFja2luZ1Rlc3QuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYTNjZjc4NC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9Mb2FkVHJhY2tpbmdUZXN0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2
OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYg
TG9hZFRyYWNraW5nVGVzdF9oCi0jZGVmaW5lIExvYWRUcmFja2luZ1Rlc3RfaAotCi0jaW5jbHVk
ZSAiVGVzdE1haW4uaCIKLSNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgotI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KLQotY2xhc3MgTG9hZFRyYWNraW5nVGVzdCA6IHB1YmxpYyBXZWJWaWV3VGVzdCB7
Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShMb2FkVHJhY2tpbmdUZXN0KTsK
LSAgICBMb2FkVHJhY2tpbmdUZXN0KCk7Ci0gICAgdmlydHVhbCB+TG9hZFRyYWNraW5nVGVzdCgp
OwotICAgIHZvaWQgd2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
cHJvdmlzaW9uYWxMb2FkU3RhcnRlZCgpOwotICAgIHZpcnR1YWwgdm9pZCBwcm92aXNpb25hbExv
YWRSZWNlaXZlZFNlcnZlclJlZGlyZWN0KCk7Ci0gICAgdmlydHVhbCB2b2lkIHByb3Zpc2lvbmFs
TG9hZEZhaWxlZChjb25zdCBnY2hhciogZmFpbGluZ1VSSSwgR0Vycm9yKik7Ci0gICAgdmlydHVh
bCB2b2lkIGxvYWRDb21taXR0ZWQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZEZpbmlzaGVkKCk7
Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRGYWlsZWQoY29uc3QgY2hhciogZmFpbGluZ1VSSSwgR0Vy
cm9yKik7Ci0gICAgdmlydHVhbCB2b2lkIGVzdGltYXRlZFByb2dyZXNzQ2hhbmdlZCgpOwotCi0g
ICAgdm9pZCBsb2FkVVJJKGNvbnN0IGNoYXIqIHVyaSk7Ci0gICAgdm9pZCBsb2FkSHRtbChjb25z
dCBjaGFyKiBodG1sLCBjb25zdCBjaGFyKiBiYXNlVVJJKTsKLSAgICB2b2lkIGxvYWRQbGFpblRl
eHQoY29uc3QgY2hhciogcGxhaW5UZXh0KTsKLSAgICB2b2lkIGxvYWRSZXF1ZXN0KFdlYktpdFVS
SVJlcXVlc3QqKTsKLSAgICB2b2lkIHJlbG9hZCgpOwotICAgIHZvaWQgZ29CYWNrKCk7Ci0gICAg
dm9pZCBnb0ZvcndhcmQoKTsKLQotICAgIHZvaWQgc2V0UmVkaXJlY3RVUkkoY29uc3QgY2hhciog
dXJpKSB7IG1fcmVkaXJlY3RVUkkgPSB1cmk7IH0KLQotICAgIGVudW0gTG9hZEV2ZW50cyB7Ci0g
ICAgICAgIFByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQsCi0gICAgICAgIFByb3Zpc2lvbmFsTG9hZFJl
Y2VpdmVkU2VydmVyUmVkaXJlY3QsCi0gICAgICAgIFByb3Zpc2lvbmFsTG9hZEZhaWxlZCwKLSAg
ICAgICAgTG9hZENvbW1pdHRlZCwKLSAgICAgICAgTG9hZEZpbmlzaGVkLAotICAgICAgICBMb2Fk
RmFpbGVkCi0gICAgfTsKLSAgICBib29sIG1fcnVuTG9hZFVudGlsQ29tcGxldGlvbjsKLSAgICBi
b29sIG1fbG9hZEZhaWxlZDsKLSAgICBHT3duUHRyPEdFcnJvcj4gbV9lcnJvcjsKLSAgICBWZWN0
b3I8TG9hZEV2ZW50cz4gbV9sb2FkRXZlbnRzOwotICAgIGZsb2F0IG1fZXN0aW1hdGVkUHJvZ3Jl
c3M7Ci0gICAgQ1N0cmluZyBtX3JlZGlyZWN0VVJJOwotfTsKLQotI2VuZGlmIC8vIExvYWRUcmFj
a2luZ1Rlc3RfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvVGVzdEF1dGhlbnRpY2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL1Rlc3RBdXRoZW50aWNhdGlvbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGVkZTQyMjUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvVGVzdEF1dGhlbnRpY2F0aW9uLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDI4NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTG9hZFRyYWNraW5nVGVzdC5oIgotI2luY2x1ZGUg
IldlYktpdFRlc3RTZXJ2ZXIuaCIKLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Ci0K
LXN0YXRpYyBXZWJLaXRUZXN0U2VydmVyKiBrU2VydmVyOwotCi1jbGFzcyBBdXRoZW50aWNhdGlv
blRlc3Q6IHB1YmxpYyBMb2FkVHJhY2tpbmdUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJf
VEVTVF9GSVhUVVJFKEF1dGhlbnRpY2F0aW9uVGVzdCk7Ci0KLSAgICBBdXRoZW50aWNhdGlvblRl
c3QoKQotICAgIHsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJhdXRoZW50
aWNhdGUiLCBHX0NBTExCQUNLKHJ1bkF1dGhlbnRpY2F0aW9uQ2FsbGJhY2spLCB0aGlzKTsKLSAg
ICB9Ci0KLSAgICB+QXV0aGVudGljYXRpb25UZXN0KCkKLSAgICB7Ci0gICAgICAgIGdfc2lnbmFs
X2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3dlYlZpZXcsIEdfU0lHTkFMX01BVENIX0RB
VEEsIDAsIDAsIDAsIDAsIHRoaXMpOwotICAgIH0KLQotICAgIHN0YXRpYyBpbnQgYXV0aGVudGlj
YXRpb25SZXRyaWVzOwotICAgIHN0YXRpYyBib29sIGF1dGhlbnRpY2F0aW9uQ2FuY2VsbGVkUmVj
ZWl2ZWQ7Ci0KLSAgICB2b2lkIGxvYWRVUkkoY29uc3QgY2hhciogdXJpKQotICAgIHsKLSAgICAg
ICAgLy8gUmVzZXQgdGhlIHJldHJ5IGNvdW50IG9mIHRoZSBmYWtlIHNlcnZlciB3aGVuIGEgcGFn
ZSBpcyBsb2FkZWQuCi0gICAgICAgIGF1dGhlbnRpY2F0aW9uUmV0cmllcyA9IDA7Ci0gICAgICAg
IGF1dGhlbnRpY2F0aW9uQ2FuY2VsbGVkUmVjZWl2ZWQgPSBmYWxzZTsKLSAgICAgICAgTG9hZFRy
YWNraW5nVGVzdDo6bG9hZFVSSSh1cmkpOwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiBy
dW5BdXRoZW50aWNhdGlvbkNhbGxiYWNrKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRBdXRoZW50aWNh
dGlvblJlcXVlc3QqIHJlcXVlc3QsIEF1dGhlbnRpY2F0aW9uVGVzdCogdGVzdCkKLSAgICB7Ci0g
ICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QocmVxdWVzdCwgImNhbmNlbGxlZCIsIEdfQ0FMTEJBQ0so
YXV0aGVudGljYXRpb25DYW5jZWxsZWRDYWxsYmFjayksIHRlc3QpOwotICAgICAgICB0ZXN0LT5y
dW5BdXRoZW50aWNhdGlvbihyZXF1ZXN0KTsKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgfQot
Ci0gICAgc3RhdGljIHZvaWQgYXV0aGVudGljYXRpb25DYW5jZWxsZWRDYWxsYmFjayhXZWJLaXRB
dXRoZW50aWNhdGlvblJlcXVlc3QqLCBBdXRoZW50aWNhdGlvblRlc3QqKQotICAgIHsKLSAgICAg
ICAgYXV0aGVudGljYXRpb25DYW5jZWxsZWRSZWNlaXZlZCA9IHRydWU7Ci0gICAgfQotCi0gICAg
dm9pZCBydW5BdXRoZW50aWNhdGlvbihXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVl
c3QpCi0gICAgewotICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVz
KEdfT0JKRUNUKHJlcXVlc3QpKTsKLSAgICAgICAgbV9hdXRoZW50aWNhdGlvblJlcXVlc3QgPSBy
ZXF1ZXN0OwotICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3ApOwotICAgIH0KLQot
ICAgIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogd2FpdEZvckF1dGhlbnRpY2F0aW9uUmVx
dWVzdCgpCi0gICAgewotICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Ci0gICAg
ICAgIHJldHVybiBtX2F1dGhlbnRpY2F0aW9uUmVxdWVzdC5nZXQoKTsKLSAgICB9Ci0KLXByaXZh
dGU6Ci0gICAgR1JlZlB0cjxXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3Q+IG1fYXV0aGVudGlj
YXRpb25SZXF1ZXN0OwotfTsKLQotaW50IEF1dGhlbnRpY2F0aW9uVGVzdDo6YXV0aGVudGljYXRp
b25SZXRyaWVzID0gMDsKLWJvb2wgQXV0aGVudGljYXRpb25UZXN0OjphdXRoZW50aWNhdGlvbkNh
bmNlbGxlZFJlY2VpdmVkID0gZmFsc2U7Ci0KLXN0YXRpYyBjb25zdCBjaGFyIGF1dGhUZXN0VXNl
cm5hbWVbXSA9ICJ1c2VybmFtZSI7Ci1zdGF0aWMgY29uc3QgY2hhciBhdXRoVGVzdFBhc3N3b3Jk
W10gPSAicGFzc3dvcmQiOwotc3RhdGljIGNvbnN0IGNoYXIgYXV0aEV4cGVjdGVkU3VjY2Vzc1Rp
dGxlW10gPSAiV2ViS2l0Mkd0aysgQXV0aGVudGljYXRpb24gdGVzdCI7Ci1zdGF0aWMgY29uc3Qg
Y2hhciBhdXRoRXhwZWN0ZWRGYWlsdXJlVGl0bGVbXSA9ICI0MDEgQXV0aG9yaXphdGlvbiBSZXF1
aXJlZCI7Ci1zdGF0aWMgY29uc3QgY2hhciBhdXRoRXhwZWN0ZWRBdXRob3JpemF0aW9uW10gPSAi
QmFzaWMgZFhObGNtNWhiV1U2Y0dGemMzZHZjbVE9IjsgLy8gQmFzZTY0IGVuY29kaW5nIG9mICJ1
c2VybmFtZTpwYXNzd29yZCIuCi1zdGF0aWMgY29uc3QgY2hhciBhdXRoU3VjY2Vzc0hUTUxTdHJp
bmdbXSA9Ci0gICAgIjxodG1sPiIKLSAgICAiPGhlYWQ+PHRpdGxlPldlYktpdDJHdGsrIEF1dGhl
bnRpY2F0aW9uIHRlc3Q8L3RpdGxlPjwvaGVhZD4iCi0gICAgIjxib2R5PjwvYm9keT48L2h0bWw+
IjsKLXN0YXRpYyBjb25zdCBjaGFyIGF1dGhGYWlsdXJlSFRNTFN0cmluZ1tdID0KLSAgICAiPGh0
bWw+IgotICAgICI8aGVhZD48dGl0bGU+NDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQ8L3RpdGxl
PjwvaGVhZD4iCi0gICAgIjxib2R5PjwvYm9keT48L2h0bWw+IjsKLQotc3RhdGljIHZvaWQgdGVz
dFdlYlZpZXdBdXRoZW50aWNhdGlvblJlcXVlc3QoQXV0aGVudGljYXRpb25UZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQotewotICAgIC8vIFRlc3QgYXV0aGVudGljYXRpb24gcmVxdWVzdCBnZXR0
ZXJzIG1hdGNoIHNvdXAgYXV0aGVudGljYXRpb24gaGVhZGVyLgotICAgIHRlc3QtPmxvYWRVUkko
a1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2F1dGgtdGVzdC5odG1sIikuZGF0YSgpKTsKLSAgICBX
ZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QgPSB0ZXN0LT53YWl0Rm9yQXV0aGVu
dGljYXRpb25SZXF1ZXN0KCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9hdXRoZW50aWNh
dGlvbl9yZXF1ZXN0X2dldF9ob3N0KHJlcXVlc3QpLCA9PSwgc291cF91cmlfZ2V0X2hvc3Qoa1Nl
cnZlci0+YmFzZVVSSSgpKSk7Ci0gICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfYXV0aGVudGlj
YXRpb25fcmVxdWVzdF9nZXRfcG9ydChyZXF1ZXN0KSwgPT0sIHNvdXBfdXJpX2dldF9wb3J0KGtT
ZXJ2ZXItPmJhc2VVUkkoKSkpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfYXV0aGVudGlj
YXRpb25fcmVxdWVzdF9nZXRfcmVhbG0ocmVxdWVzdCksID09LCAibXkgcmVhbG0iKTsKLSAgICBn
X2Fzc2VydCh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfc2NoZW1lKHJlcXVlc3Qp
ID09IFdFQktJVF9BVVRIRU5USUNBVElPTl9TQ0hFTUVfSFRUUF9CQVNJQyk7Ci0gICAgZ19hc3Nl
cnQoIXdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2lzX2Zvcl9wcm94eShyZXF1ZXN0KSk7
Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2lzX3JldHJ5KHJl
cXVlc3QpKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvbkNhbmNl
bChBdXRoZW50aWNhdGlvblRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgLy8gVGVz
dCBjYW5jZWwuCi0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvYXV0
aC10ZXN0Lmh0bWwiKS5kYXRhKCkpOwotICAgIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCog
cmVxdWVzdCA9IHRlc3QtPndhaXRGb3JBdXRoZW50aWNhdGlvblJlcXVlc3QoKTsKLSAgICB3ZWJr
aXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jYW5jZWwocmVxdWVzdCk7Ci0gICAgLy8gU2VydmVy
IGRvZXNuJ3QgYXNrIGZvciBuZXcgY3JlZGVudGlhbHMuCi0gICAgdGVzdC0+d2FpdFVudGlsTG9h
ZEZpbmlzaGVkKCk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzLnNp
emUoKSwgPT0sIDMpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMF0s
ID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsKLSAgICBnX2Fz
c2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6
UHJvdmlzaW9uYWxMb2FkRmFpbGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2Fk
RXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKLQotICAgIGdf
YXNzZXJ0X2Vycm9yKHRlc3QtPm1fZXJyb3IuZ2V0KCksIFdFQktJVF9ORVRXT1JLX0VSUk9SLCBX
RUJLSVRfTkVUV09SS19FUlJPUl9DQU5DRUxMRUQpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2Vi
Vmlld0F1dGhlbnRpY2F0aW9uTG9hZENhbmNlbGxlZChBdXRoZW50aWNhdGlvblRlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQ
YXRoKCIvYXV0aC10ZXN0Lmh0bWwiKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRGb3JBdXRoZW50
aWNhdGlvblJlcXVlc3QoKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfc3RvcF9sb2FkaW5nKHRlc3Qt
Pm1fd2ViVmlldyk7Ci0gICAgLy8gRXhwZWN0IGVtcHR5IHBhZ2UuCi0gICAgdGVzdC0+d2FpdFVu
dGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgZ19hc3NlcnQodGVzdC0+YXV0aGVudGljYXRpb25DYW5j
ZWxsZWRSZWNlaXZlZCk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRz
LnNpemUoKSwgPT0sIDMpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNb
MF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsKLSAgICBn
X2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVz
dDo6UHJvdmlzaW9uYWxMb2FkRmFpbGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9s
b2FkRXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKLQotICAg
IGdfYXNzZXJ0X2Vycm9yKHRlc3QtPm1fZXJyb3IuZ2V0KCksIFdFQktJVF9ORVRXT1JLX0VSUk9S
LCBXRUJLSVRfTkVUV09SS19FUlJPUl9DQU5DRUxMRUQpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0
V2ViVmlld0F1dGhlbnRpY2F0aW9uRmFpbHVyZShBdXRoZW50aWNhdGlvblRlc3QqIHRlc3QsIGdj
b25zdHBvaW50ZXIpCi17Ci0gICAgLy8gVGVzdCBhdXRoZW50aWNhdGlvbiBmYWlsdXJlcy4KLSAg
ICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9hdXRoLXRlc3QuaHRtbCIp
LmRhdGEoKSk7Ci0gICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0ID0gdGVz
dC0+d2FpdEZvckF1dGhlbnRpY2F0aW9uUmVxdWVzdCgpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRf
YXV0aGVudGljYXRpb25fcmVxdWVzdF9pc19yZXRyeShyZXF1ZXN0KSk7Ci0gICAgV2ViS2l0Q3Jl
ZGVudGlhbCogY3JlZGVudGlhbCA9IHdlYmtpdF9jcmVkZW50aWFsX25ldyhhdXRoVGVzdFVzZXJu
YW1lLCAid3JvbmdwYXNzd29yZCIsIFdFQktJVF9DUkVERU5USUFMX1BFUlNJU1RFTkNFX05PTkUp
OwotICAgIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2F1dGhlbnRpY2F0ZShyZXF1ZXN0
LCBjcmVkZW50aWFsKTsKLSAgICB3ZWJraXRfY3JlZGVudGlhbF9mcmVlKGNyZWRlbnRpYWwpOwot
ICAgIC8vIEV4cGVjdCBhIHNlY29uZCBhdXRoZW50aWNhdGlvbiByZXF1ZXN0LgotICAgIHJlcXVl
c3QgPSB0ZXN0LT53YWl0Rm9yQXV0aGVudGljYXRpb25SZXF1ZXN0KCk7Ci0gICAgZ19hc3NlcnQo
d2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfaXNfcmV0cnkocmVxdWVzdCkpOwotICAgIC8v
IFRlc3Qgc2Vjb25kIGZhaWx1cmUuCi0gICAgY3JlZGVudGlhbCA9IHdlYmtpdF9jcmVkZW50aWFs
X25ldyhhdXRoVGVzdFVzZXJuYW1lLCAid3JvbmdwYXNzd29yZDIiLCBXRUJLSVRfQ1JFREVOVElB
TF9QRVJTSVNURU5DRV9OT05FKTsKLSAgICB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9h
dXRoZW50aWNhdGUocmVxdWVzdCwgY3JlZGVudGlhbCk7Ci0gICAgd2Via2l0X2NyZWRlbnRpYWxf
ZnJlZShjcmVkZW50aWFsKTsKLSAgICAvLyBFeHBlY3QgYXV0aGVudGljYXRpb24gZmFpbGVkIHBh
Z2UuCi0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBnX2Fzc2VydF9j
bXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0sIDMpOwotICAgIGdfYXNzZXJ0X2Nt
cGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNp
b25hbExvYWRTdGFydGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRz
WzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZENvbW1pdHRlZCk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRG
aW5pc2hlZCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRfdGl0bGUo
dGVzdC0+bV93ZWJWaWV3KSwgPT0sIGF1dGhFeHBlY3RlZEZhaWx1cmVUaXRsZSk7Ci19Ci0KLXN0
YXRpYyB2b2lkIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25Ob0NyZWRlbnRpYWwoQXV0aGVudGlj
YXRpb25UZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIC8vIFRlc3QgY29udGludWUg
d2l0aG91dCBjcmVkZW50aWFscy4KLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZv
clBhdGgoIi9hdXRoLXRlc3QuaHRtbCIpLmRhdGEoKSk7Ci0gICAgV2ViS2l0QXV0aGVudGljYXRp
b25SZXF1ZXN0KiByZXF1ZXN0ID0gdGVzdC0+d2FpdEZvckF1dGhlbnRpY2F0aW9uUmVxdWVzdCgp
OwotICAgIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2F1dGhlbnRpY2F0ZShyZXF1ZXN0
LCAwKTsKLSAgICAvLyBTZXJ2ZXIgZG9lc24ndCBhc2sgZm9yIG5ldyBjcmVkZW50aWFscy4KLSAg
ICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0X2NtcGludCh0
ZXN0LT5tX2xvYWRFdmVudHMuc2l6ZSgpLCA9PSwgMyk7Ci0gICAgZ19hc3NlcnRfY21waW50KHRl
c3QtPm1fbG9hZEV2ZW50c1swXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9h
ZFN0YXJ0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMV0sID09
LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkQ29tbWl0dGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
dGVzdC0+bV9sb2FkRXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVk
KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dldF90aXRsZSh0ZXN0LT5t
X3dlYlZpZXcpLCA9PSwgYXV0aEV4cGVjdGVkRmFpbHVyZVRpdGxlKTsKLX0KLQotc3RhdGljIHZv
aWQgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvblN0b3JhZ2UoQXV0aGVudGljYXRpb25UZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIC8vIEVuYWJsZSBwcml2YXRlIGJyb3dzaW5nIGJl
Zm9yZSBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IHRvIHRlc3QgdGhhdCBjcmVkZW50aWFscyBjYW4n
dCBiZSBzYXZlZC4KLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9wcml2YXRlX2Jyb3dz
aW5nKHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3ModGVzdC0+bV93ZWJWaWV3KSwgVFJVRSk7
Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvYXV0aC10ZXN0Lmh0
bWwiKS5kYXRhKCkpOwotICAgIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCA9
IHRlc3QtPndhaXRGb3JBdXRoZW50aWNhdGlvblJlcXVlc3QoKTsKLSAgICBnX2Fzc2VydCghd2Vi
a2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3Byb3Bvc2VkX2NyZWRlbnRpYWwocmVxdWVz
dCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jYW5fc2F2
ZV9jcmVkZW50aWFscyhyZXF1ZXN0KSk7Ci0KLSAgICAvLyBJZiBXZWJLaXQgaGFzIGJlZW4gY29t
cGlsZWQgd2l0aCBsaWJzZWNyZXQsIGFuZCBwcml2YXRlIGJyb3dzaW5nIGlzIGRpc2FibGVkCi0g
ICAgLy8gdGhlbiBjaGVjayB0aGF0IGNyZWRlbnRpYWxzIGNhbiBiZSBzYXZlZC4KLSNpZiBFTkFC
TEUoQ1JFREVOVElBTF9TVE9SQUdFKQotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX3By
aXZhdGVfYnJvd3Npbmcod2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh0ZXN0LT5tX3dlYlZp
ZXcpLCBGQUxTRSk7Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIv
YXV0aC10ZXN0Lmh0bWwiKS5kYXRhKCkpOwotICAgIHJlcXVlc3QgPSB0ZXN0LT53YWl0Rm9yQXV0
aGVudGljYXRpb25SZXF1ZXN0KCk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9hdXRoZW50aWNhdGlv
bl9yZXF1ZXN0X2dldF9wcm9wb3NlZF9jcmVkZW50aWFsKHJlcXVlc3QpKTsKLSAgICBnX2Fzc2Vy
dCh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jYW5fc2F2ZV9jcmVkZW50aWFscyhyZXF1
ZXN0KSk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlv
blN1Y2Nlc3MoQXV0aGVudGljYXRpb25UZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAg
IC8vIFRlc3QgY29ycmVjdCBhdXRoZW50aWNhdGlvbi4KLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2
ZXItPmdldFVSSUZvclBhdGgoIi9hdXRoLXRlc3QuaHRtbCIpLmRhdGEoKSk7Ci0gICAgV2ViS2l0
QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0ID0gdGVzdC0+d2FpdEZvckF1dGhlbnRpY2F0
aW9uUmVxdWVzdCgpOwotICAgIFdlYktpdENyZWRlbnRpYWwqIGNyZWRlbnRpYWwgPSB3ZWJraXRf
Y3JlZGVudGlhbF9uZXcoYXV0aFRlc3RVc2VybmFtZSwgYXV0aFRlc3RQYXNzd29yZCwgV0VCS0lU
X0NSRURFTlRJQUxfUEVSU0lTVEVOQ0VfRk9SX1NFU1NJT04pOwotICAgIHdlYmtpdF9hdXRoZW50
aWNhdGlvbl9yZXF1ZXN0X2F1dGhlbnRpY2F0ZShyZXF1ZXN0LCBjcmVkZW50aWFsKTsKLSAgICB3
ZWJraXRfY3JlZGVudGlhbF9mcmVlKGNyZWRlbnRpYWwpOwotICAgIHRlc3QtPndhaXRVbnRpbExv
YWRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50cy5z
aXplKCksID09LCAzKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzBd
LCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7Ci0gICAgZ19h
c3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6
OkxvYWRDb21taXR0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNb
Ml0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOwotICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3RpdGxlKHRlc3QtPm1fd2ViVmlldyksID09LCBhdXRo
RXhwZWN0ZWRTdWNjZXNzVGl0bGUpOwotCi0gICAgLy8gVGVzdCBsb2FkaW5nIHRoZSBzYW1lIChh
dXRob3JpemVkKSBwYWdlIGFnYWluLgotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJ
Rm9yUGF0aCgiL2F1dGgtdGVzdC5odG1sIikuZGF0YSgpKTsKLSAgICAvLyBUaGVyZSBpcyBubyBh
dXRoZW50aWNhdGlvbiBjaGFsbGVuZ2UuCi0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVk
KCk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0s
IDMpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMF0sID09LCBMb2Fk
VHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsKLSAgICBnX2Fzc2VydF9jbXBp
bnQodGVzdC0+bV9sb2FkRXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZENvbW1p
dHRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1syXSwgPT0sIExv
YWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtp
dF93ZWJfdmlld19nZXRfdGl0bGUodGVzdC0+bV93ZWJWaWV3KSwgPT0sIGF1dGhFeHBlY3RlZFN1
Y2Nlc3NUaXRsZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIq
LCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSosIFNv
dXBDbGllbnRDb250ZXh0Kiwgdm9pZCopCi17Ci0gICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBT
T1VQX01FVEhPRF9HRVQpIHsKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2Fn
ZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmICghc3RyY21wKHBhdGgsICIvYXV0aC10ZXN0Lmh0bWwiKSkgewotICAgICAgICBj
b25zdCBjaGFyKiBhdXRob3JpemF0aW9uID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X29uZSht
ZXNzYWdlLT5yZXF1ZXN0X2hlYWRlcnMsICJBdXRob3JpemF0aW9uIik7Ci0gICAgICAgIC8vIFJl
cXVpcmUgYXV0aGVudGljYXRpb24uCi0gICAgICAgIGlmICghZ19zdHJjbXAwKGF1dGhvcml6YXRp
b24sIGF1dGhFeHBlY3RlZEF1dGhvcml6YXRpb24pKSB7Ci0gICAgICAgICAgICAvLyBTdWNjZXNz
ZnVsIGF1dGhlbnRpY2F0aW9uLgotICAgICAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMo
bWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOwotICAgICAgICAgICAgc291cF9tZXNzYWdlX2JvZHlf
YXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgYXV0aFN1
Y2Nlc3NIVE1MU3RyaW5nLCBzdHJsZW4oYXV0aFN1Y2Nlc3NIVE1MU3RyaW5nKSk7Ci0gICAgICAg
ICAgICBBdXRoZW50aWNhdGlvblRlc3Q6OmF1dGhlbnRpY2F0aW9uUmV0cmllcyA9IDA7Ci0gICAg
ICAgIH0gZWxzZSBpZiAoKytBdXRoZW50aWNhdGlvblRlc3Q6OmF1dGhlbnRpY2F0aW9uUmV0cmll
cyA8IDMpIHsKLSAgICAgICAgICAgIC8vIE5vIG9yIGludmFsaWQgYXV0aG9yaXphdGlvbiBoZWFk
ZXIgcHJvdmlkZWQgYnkgdGhlIGNsaWVudCwgcmVxdWVzdCBhdXRoZW50aWNhdGlvbiB0d2ljZSB0
aGVuIGZhaWwuCi0gICAgICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBT
T1VQX1NUQVRVU19VTkFVVEhPUklaRUQpOwotICAgICAgICAgICAgc291cF9tZXNzYWdlX2hlYWRl
cnNfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJXV1ctQXV0aGVudGljYXRlIiwg
IkJhc2ljIHJlYWxtPVwibXkgcmVhbG1cIiIpOwotICAgICAgICAgICAgLy8gSW5jbHVkZSBhIGZh
aWx1cmUgbWVzc2FnZSBpbiBjYXNlIHRoZSB1c2VyIGF0dGVtcHRzIHRvIHByb2NlZWQgd2l0aG91
dCBhdXRoZW50aWNhdGlvbi4KLSAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZCht
ZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGF1dGhGYWlsdXJlSFRN
TFN0cmluZywgc3RybGVuKGF1dGhGYWlsdXJlSFRNTFN0cmluZykpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgLy8gQXV0aGVudGljYXRpb24gbm90IHN1Y2Nlc3NmdWwsIGRpc3BsYXkg
YSAiNDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQiIHBhZ2UuCi0gICAgICAgICAgICBzb3VwX21l
c3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7Ci0gICAgICAgICAgICBz
b3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1P
UllfU1RBVElDLCBhdXRoRmFpbHVyZUhUTUxTdHJpbmcsIHN0cmxlbihhdXRoRmFpbHVyZUhUTUxT
dHJpbmcpKTsKLSAgICAgICAgfQotICAgIH0gZWxzZQotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0
X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfRk9VTkQpOwotCi0gICAgc291cF9tZXNz
YWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7Ci19Ci0KLXZvaWQgYmVm
b3JlQWxsKCkKLXsKLSAgICBrU2VydmVyID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIoKTsKLSAgICBr
U2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2spOwotCi0gICAgQXV0aGVudGljYXRpb25UZXN0Ojph
ZGQoIldlYktpdFdlYlZpZXciLCAiYXV0aGVudGljYXRpb24tcmVxdWVzdCIsIHRlc3RXZWJWaWV3
QXV0aGVudGljYXRpb25SZXF1ZXN0KTsKLSAgICBBdXRoZW50aWNhdGlvblRlc3Q6OmFkZCgiV2Vi
S2l0V2ViVmlldyIsICJhdXRoZW50aWNhdGlvbi1jYW5jZWwiLCB0ZXN0V2ViVmlld0F1dGhlbnRp
Y2F0aW9uQ2FuY2VsKTsKLSAgICBBdXRoZW50aWNhdGlvblRlc3Q6OmFkZCgiV2ViS2l0V2ViVmll
dyIsICJhdXRoZW50aWNhdGlvbi1sb2FkLWNhbmNlbGxlZCIsIHRlc3RXZWJWaWV3QXV0aGVudGlj
YXRpb25Mb2FkQ2FuY2VsbGVkKTsKLSAgICBBdXRoZW50aWNhdGlvblRlc3Q6OmFkZCgiV2ViS2l0
V2ViVmlldyIsICJhdXRoZW50aWNhdGlvbi1mYWlsdXJlIiwgdGVzdFdlYlZpZXdBdXRoZW50aWNh
dGlvbkZhaWx1cmUpOwotICAgIEF1dGhlbnRpY2F0aW9uVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3
IiwgImF1dGhlbnRpY2F0aW9uLW5vLWNyZWRlbnRpYWwiLCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0
aW9uTm9DcmVkZW50aWFsKTsKLSAgICBBdXRoZW50aWNhdGlvblRlc3Q6OmFkZCgiV2ViS2l0V2Vi
VmlldyIsICJhdXRoZW50aWNhdGlvbi1zdG9yYWdlIiwgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlv
blN0b3JhZ2UpOwotICAgIC8vIFRlc3RpbmcgYXV0aGVudGljYXRpb24gc3VjY2VzcyBtdXN0IGJl
IGRvbmUgbGFzdCBiZWNhdXNlIGxpYnNvdXAgd2lsbCBuZXZlciBmaXJlCi0gICAgLy8gdGhlIGF1
dGhlbnRpY2F0ZSBzaWduYWwgYWdhaW4gb25jZSBhdXRoZW50aWNhdGlvbiBpcyBzdWNjZXNzZnVs
LgotICAgIEF1dGhlbnRpY2F0aW9uVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImF1dGhlbnRp
Y2F0aW9uLXN1Y2Nlc3MiLCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uU3VjY2Vzcyk7Ci19Ci0K
LXZvaWQgYWZ0ZXJBbGwoKQotewotICAgIGRlbGV0ZSBrU2VydmVyOwotfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdEJhY2tGb3J3YXJkTGlz
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0QmFja0Zv
cndhcmRMaXN0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQ3OTM2Ni4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0QmFj
a0ZvcndhcmRMaXN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI4MCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lu
Y2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKLSNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgotI2lu
Y2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KLSNpbmNsdWRlIDxz
dHJpbmcuaD4KLSNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdDIuaD4KLQotLy8gQmFjayBmb3J3YXJk
IGxpc3QgbGltaXQgaXMgMTAwIGJ5IGRlZmF1bHQuCi1zdGF0aWMgY29uc3QgaW50IGtCYWNrRm9y
d2FyZExpc3RMaW1pdCA9IDEwMDsKLQotc3RhdGljIFdlYktpdFRlc3RTZXJ2ZXIqIGtTZXJ2ZXI7
Ci0KLXN0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1l
c3NhZ2UqIG1zZywgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSogcXVlcnksIFNvdXBDbGll
bnRDb250ZXh0KiBjb250ZXh0LCBncG9pbnRlciBkYXRhKQotewotICAgIGlmIChtc2ctPm1ldGhv
ZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMo
bXNnLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgaWYgKGdfc3RyX2hhc19zdWZmaXgocGF0aCwgImZhdmljb24uaWNvIikpIHsKLSAg
ICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobXNnLCBTT1VQX1NUQVRVU19OT1RfRk9VTkQp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMo
bXNnLCBTT1VQX1NUQVRVU19PSyk7Ci0KLSAgICBjaGFyKiBib2R5ID0gZ19zdHJkdXBfcHJpbnRm
KCI8aHRtbD48dGl0bGU+JXM8L3RpdGxlPjxib2R5PiVzPC9ib2R5PjwvaHRtbD4iLCBwYXRoICsg
MSwgcGF0aCArIDEpOwotICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtc2ctPnJlc3BvbnNl
X2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGJvZHksIHN0cmxlbihib2R5KSk7Ci0KLSAgICBzb3Vw
X21lc3NhZ2VfYm9keV9jb21wbGV0ZShtc2ctPnJlc3BvbnNlX2JvZHkpOwotfQotCi1jbGFzcyBC
YWNrRm9yd2FyZExpc3RUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3QgewotcHVibGljOgotICAgIE1B
S0VfR0xJQl9URVNUX0ZJWFRVUkUoQmFja0ZvcndhcmRMaXN0VGVzdCk7Ci0KLSAgICBlbnVtIHsK
LSAgICAgICAgQmFja3dhcmQsCi0gICAgICAgIEZvcndhcmQKLSAgICB9OwotCi0gICAgZW51bSB7
Ci0gICAgICAgIEN1cnJlbnRJdGVtICA9IDEgPDwgMCwKLSAgICAgICAgQWRkZWRJdGVtICAgID0g
MSA8PCAxLAotICAgICAgICBSZW1vdmVkSXRlbXMgPSAxIDw8IDIKLSAgICB9OwotCi0gICAgc3Rh
dGljIHZvaWQgY2hlY2tJdGVtKFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW0sIGNvbnN0
IGNoYXIqIHRpdGxlLCBjb25zdCBjaGFyKiB1cmksIGNvbnN0IGNoYXIqIG9yaWdpbmFsVVJJKQot
ICAgIHsKLSAgICAgICAgZ19hc3NlcnQoaXRlbSk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3
ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9nZXRfdXJpKGl0ZW0pLCA9PSwgdXJpKTsKLSAg
ICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dldF90
aXRsZShpdGVtKSwgPT0gLCB0aXRsZSk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRf
YmFja19mb3J3YXJkX2xpc3RfaXRlbV9nZXRfb3JpZ2luYWxfdXJpKGl0ZW0pLCA9PSwgb3JpZ2lu
YWxVUkkpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGNoZWNrSXRlbUluZGV4KFdlYktpdEJh
Y2tGb3J3YXJkTGlzdCogbGlzdCkKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9iYWNr
X2ZvcndhcmRfbGlzdF9nZXRfbnRoX2l0ZW0obGlzdCwgLTEpID09IHdlYmtpdF9iYWNrX2Zvcndh
cmRfbGlzdF9nZXRfYmFja19pdGVtKGxpc3QpKTsKLSAgICAgICAgZ19hc3NlcnQod2Via2l0X2Jh
Y2tfZm9yd2FyZF9saXN0X2dldF9udGhfaXRlbShsaXN0LCAwKSA9PSB3ZWJraXRfYmFja19mb3J3
YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbShsaXN0KSk7Ci0gICAgICAgIGdfYXNzZXJ0KHdlYmtp
dF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbnRoX2l0ZW0obGlzdCwgMSkgPT0gd2Via2l0X2JhY2tf
Zm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2l0ZW0obGlzdCkpOwotICAgIH0KLQotICAgIHN0YXRp
YyB2b2lkIGNoZWNrTGlzdChXZWJLaXRCYWNrRm9yd2FyZExpc3QqIGxpc3QsIHVuc2lnbmVkIHR5
cGUsIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qKiBpdGVtcywgdW5zaWduZWQgbkl0ZW1zKQot
ICAgIHsKLSAgICAgICAgR0xpc3QqIGxpc3RJdGVtcyA9IHR5cGUgPT0gQmFja0ZvcndhcmRMaXN0
VGVzdDo6QmFja3dhcmQgPyB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGlzdChs
aXN0KSA6Ci0gICAgICAgICAgICB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRf
bGlzdChsaXN0KTsKLSAgICAgICAgZ19hc3NlcnQobGlzdEl0ZW1zKTsKLQotICAgICAgICB1bnNp
Z25lZCBpID0gMDsKLSAgICAgICAgZm9yIChHTGlzdCogbGlzdEl0ZW0gPSBsaXN0SXRlbXM7IGxp
c3RJdGVtOyBsaXN0SXRlbSA9IGdfbGlzdF9uZXh0KGxpc3RJdGVtKSwgaSsrKSB7Ci0gICAgICAg
ICAgICBnX2Fzc2VydF9jbXB1aW50KGksIDwsIG5JdGVtcyk7Ci0gICAgICAgICAgICBnX2Fzc2Vy
dChsaXN0SXRlbS0+ZGF0YSA9PSBpdGVtc1tpXSk7Ci0gICAgICAgIH0KLSAgICAgICAgZ19saXN0
X2ZyZWUobGlzdEl0ZW1zKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBiYWNrRm9yd2FyZExp
c3RDaGFuZ2VkKFdlYktpdEJhY2tGb3J3YXJkTGlzdCogbGlzdCwgV2ViS2l0QmFja0ZvcndhcmRM
aXN0SXRlbSogYWRkZWRJdGVtLCBHTGlzdCogcmVtb3ZlZEl0ZW1zLCBCYWNrRm9yd2FyZExpc3RU
ZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+bV9oYXNDaGFuZ2VkID0gdHJ1ZTsKLQot
ICAgICAgICBpZiAodGVzdC0+bV9jaGFuZ2VkRmxhZ3MgJiBCYWNrRm9yd2FyZExpc3RUZXN0OjpB
ZGRlZEl0ZW0pIHsKLSAgICAgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19CQUNLX0ZPUldBUkRf
TElTVF9JVEVNKGFkZGVkSXRlbSkpOwotICAgICAgICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNE
ZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChhZGRlZEl0ZW0pKTsKLSAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICBnX2Fzc2VydCghYWRkZWRJdGVtKTsKLQotICAgICAgICBpZiAodGVz
dC0+bV9jaGFuZ2VkRmxhZ3MgJiBCYWNrRm9yd2FyZExpc3RUZXN0OjpSZW1vdmVkSXRlbXMpIHsK
LSAgICAgICAgICAgIGdfYXNzZXJ0KHJlbW92ZWRJdGVtcyk7Ci0gICAgICAgICAgICBmb3IgKEdM
aXN0KiBpdGVyID0gcmVtb3ZlZEl0ZW1zOyBpdGVyOyBpdGVyID0gaXRlci0+bmV4dCkgewotICAg
ICAgICAgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19CQUNLX0ZPUldBUkRfTElTVF9JVEVNKGl0
ZXItPmRhdGEpKTsKLSAgICAgICAgICAgICAgICBpZiAodGVzdC0+bV9leHBlY3RlZFJlbW92ZWRJ
dGVtcykKLSAgICAgICAgICAgICAgICAgICAgZ19hc3NlcnQoZ19saXN0X2ZpbmQodGVzdC0+bV9l
eHBlY3RlZFJlbW92ZWRJdGVtcywgaXRlci0+ZGF0YSkpOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgZ19hc3NlcnQoIXJlbW92ZWRJdGVtcyk7Ci0gICAgfQot
Ci0gICAgQmFja0ZvcndhcmRMaXN0VGVzdCgpCi0gICAgICAgIDogbV9saXN0KHdlYmtpdF93ZWJf
dmlld19nZXRfYmFja19mb3J3YXJkX2xpc3QobV93ZWJWaWV3KSkKLSAgICAgICAgLCBtX2NoYW5n
ZWRGbGFncygwKQotICAgICAgICAsIG1faGFzQ2hhbmdlZChmYWxzZSkKLSAgICAgICAgLCBtX2V4
cGVjdGVkUmVtb3ZlZEl0ZW1zKDApCi0gICAgewotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1f
bGlzdCwgImNoYW5nZWQiLCBHX0NBTExCQUNLKGJhY2tGb3J3YXJkTGlzdENoYW5nZWQpLCB0aGlz
KTsKLSAgICAgICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVD
VChtX2xpc3QpKTsKLSAgICB9Ci0KLSAgICB+QmFja0ZvcndhcmRMaXN0VGVzdCgpCi0gICAgewot
ICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9saXN0LCBHX1NJ
R05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKLSAgICB9Ci0KLSAgICB2b2lkIHdh
aXRVbnRpbExvYWRGaW5pc2hlZCgpCi0gICAgewotICAgICAgICBtX2hhc0NoYW5nZWQgPSBmYWxz
ZTsKLSAgICAgICAgV2ViVmlld1Rlc3Q6OndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgICAg
ICBnX2Fzc2VydChtX2hhc0NoYW5nZWQpOwotICAgIH0KLQotICAgIHZvaWQgd2FpdFVudGlsTG9h
ZEZpbmlzaGVkQW5kQ2hlY2tSZW1vdmVkSXRlbXMoR0xpc3QqIHJlbW92ZWRJdGVtcykKLSAgICB7
Ci0gICAgICAgIG1fZXhwZWN0ZWRSZW1vdmVkSXRlbXMgPSByZW1vdmVkSXRlbXM7Ci0gICAgICAg
IHdhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgICAgICBtX2V4cGVjdGVkUmVtb3ZlZEl0ZW1z
ID0gMDsKLSAgICB9Ci0KLSAgICBXZWJLaXRCYWNrRm9yd2FyZExpc3QqIG1fbGlzdDsKLSAgICB1
bnNpZ25lZCBsb25nIG1fY2hhbmdlZEZsYWdzOwotICAgIGJvb2wgbV9oYXNDaGFuZ2VkOwotICAg
IEdMaXN0KiBtX2V4cGVjdGVkUmVtb3ZlZEl0ZW1zOwotfTsKLQotc3RhdGljIHZvaWQgdGVzdEJh
Y2tGb3J3YXJkTGlzdE5hdmlnYXRpb24oQmFja0ZvcndhcmRMaXN0VGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKLXsKLSAgICBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiBpdGVtc1sxXTsKLQot
ICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2sodGVzdC0+bV93ZWJWaWV3
KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh0ZXN0LT5t
X3dlYlZpZXcpKTsKLQotICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2JhY2tfZm9yd2FyZF9s
aXN0X2dldF9sZW5ndGgodGVzdC0+bV9saXN0KSwgPT0sIDApOwotICAgIGdfYXNzZXJ0KCF3ZWJr
aXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh0ZXN0LT5tX2xpc3QpKTsKLSAg
ICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2l0ZW0odGVzdC0+
bV9saXN0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9y
d2FyZF9pdGVtKHRlc3QtPm1fbGlzdCkpOwotICAgIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OmNoZWNr
SXRlbUluZGV4KHRlc3QtPm1fbGlzdCk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNrX2Zvcndh
cmRfbGlzdF9nZXRfYmFja19saXN0KHRlc3QtPm1fbGlzdCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJr
aXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlzdCh0ZXN0LT5tX2xpc3QpKTsKLQot
ICAgIENTdHJpbmcgdXJpUGFnZTEgPSBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvUGFnZTEiKTsK
LSAgICB0ZXN0LT5tX2NoYW5nZWRGbGFncyA9IEJhY2tGb3J3YXJkTGlzdFRlc3Q6OkN1cnJlbnRJ
dGVtIHwgQmFja0ZvcndhcmRMaXN0VGVzdDo6QWRkZWRJdGVtOwotICAgIHRlc3QtPmxvYWRVUkko
dXJpUGFnZTEuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQot
ICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2sodGVzdC0+bV93ZWJWaWV3
KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh0ZXN0LT5t
X3dlYlZpZXcpKTsKLQotICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2JhY2tfZm9yd2FyZF9s
aXN0X2dldF9sZW5ndGgodGVzdC0+bV9saXN0KSwgPT0sIDEpOwotICAgIFdlYktpdEJhY2tGb3J3
YXJkTGlzdEl0ZW0qIGl0ZW1QYWdlMSA9IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3Vy
cmVudF9pdGVtKHRlc3QtPm1fbGlzdCk7Ci0gICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tJ
dGVtKGl0ZW1QYWdlMSwgIlBhZ2UxIiwgdXJpUGFnZTEuZGF0YSgpLCB1cmlQYWdlMS5kYXRhKCkp
OwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfaXRlbSh0
ZXN0LT5tX2xpc3QpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dl
dF9mb3J3YXJkX2l0ZW0odGVzdC0+bV9saXN0KSk7Ci0gICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6
Y2hlY2tJdGVtSW5kZXgodGVzdC0+bV9saXN0KTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tf
Zm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3QodGVzdC0+bV9saXN0KSk7Ci0gICAgZ19hc3NlcnQo
IXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0KHRlc3QtPm1fbGlzdCkp
OwotCi0gICAgQ1N0cmluZyB1cmlQYWdlMiA9IGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9QYWdl
MiIpOwotICAgIHRlc3QtPm1fY2hhbmdlZEZsYWdzID0gQmFja0ZvcndhcmRMaXN0VGVzdDo6Q3Vy
cmVudEl0ZW0gfCBCYWNrRm9yd2FyZExpc3RUZXN0OjpBZGRlZEl0ZW07Ci0gICAgdGVzdC0+bG9h
ZFVSSSh1cmlQYWdlMi5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgp
OwotCi0gICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrKHRlc3QtPm1fd2Vi
VmlldykpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQodGVz
dC0+bV93ZWJWaWV3KSk7Ci0KLSAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9iYWNrX2Zvcndh
cmRfbGlzdF9nZXRfbGVuZ3RoKHRlc3QtPm1fbGlzdCksID09LCAyKTsKLSAgICBXZWJLaXRCYWNr
Rm9yd2FyZExpc3RJdGVtKiBpdGVtUGFnZTIgPSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0
X2N1cnJlbnRfaXRlbSh0ZXN0LT5tX2xpc3QpOwotICAgIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OmNo
ZWNrSXRlbShpdGVtUGFnZTIsICJQYWdlMiIsIHVyaVBhZ2UyLmRhdGEoKSwgdXJpUGFnZTIuZGF0
YSgpKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfaXRl
bSh0ZXN0LT5tX2xpc3QpID09IGl0ZW1QYWdlMSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNr
X2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9pdGVtKHRlc3QtPm1fbGlzdCkpOwotICAgIEJhY2tG
b3J3YXJkTGlzdFRlc3Q6OmNoZWNrSXRlbUluZGV4KHRlc3QtPm1fbGlzdCk7Ci0gICAgaXRlbXNb
MF0gPSBpdGVtUGFnZTE7Ci0gICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tMaXN0KHRlc3Qt
Pm1fbGlzdCwgQmFja0ZvcndhcmRMaXN0VGVzdDo6QmFja3dhcmQsIGl0ZW1zLCAxKTsKLSAgICBn
X2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xpc3QodGVzdC0+
bV9saXN0KSk7Ci0KLSAgICB0ZXN0LT5tX2NoYW5nZWRGbGFncyA9IEJhY2tGb3J3YXJkTGlzdFRl
c3Q6OkN1cnJlbnRJdGVtOwotICAgIHRlc3QtPmdvQmFjaygpOwotICAgIHRlc3QtPndhaXRVbnRp
bExvYWRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29f
YmFjayh0ZXN0LT5tX3dlYlZpZXcpKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfY2Fu
X2dvX2ZvcndhcmQodGVzdC0+bV93ZWJWaWV3KSk7Ci0KLSAgICBnX2Fzc2VydF9jbXB1aW50KHdl
YmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbGVuZ3RoKHRlc3QtPm1fbGlzdCksID09LCAyKTsK
LSAgICBnX2Fzc2VydChpdGVtUGFnZTEgPT0gd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9j
dXJyZW50X2l0ZW0odGVzdC0+bV9saXN0KSk7Ci0gICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hl
Y2tJdGVtKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKHRlc3QtPm1f
bGlzdCksICJQYWdlMSIsIHVyaVBhZ2UxLmRhdGEoKSwgdXJpUGFnZTEuZGF0YSgpKTsKLSAgICBn
X2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2l0ZW0odGVzdC0+bV9s
aXN0KSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJk
X2l0ZW0odGVzdC0+bV9saXN0KSA9PSBpdGVtUGFnZTIpOwotICAgIEJhY2tGb3J3YXJkTGlzdFRl
c3Q6OmNoZWNrSXRlbUluZGV4KHRlc3QtPm1fbGlzdCk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9i
YWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19saXN0KHRlc3QtPm1fbGlzdCkpOwotICAgIGl0ZW1z
WzBdID0gaXRlbVBhZ2UyOwotICAgIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OmNoZWNrTGlzdCh0ZXN0
LT5tX2xpc3QsIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OkZvcndhcmQsIGl0ZW1zLCAxKTsKLQotICAg
IHRlc3QtPm1fY2hhbmdlZEZsYWdzID0gQmFja0ZvcndhcmRMaXN0VGVzdDo6Q3VycmVudEl0ZW07
Ci0gICAgdGVzdC0+Z29Gb3J3YXJkKCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVk
KCk7Ci0KLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2sodGVzdC0+bV93
ZWJWaWV3KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh0
ZXN0LT5tX3dlYlZpZXcpKTsKLQotICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2JhY2tfZm9y
d2FyZF9saXN0X2dldF9sZW5ndGgodGVzdC0+bV9saXN0KSwgPT0sIDIpOwotICAgIGdfYXNzZXJ0
KGl0ZW1QYWdlMiA9PSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh0
ZXN0LT5tX2xpc3QpKTsKLSAgICBCYWNrRm9yd2FyZExpc3RUZXN0OjpjaGVja0l0ZW0od2Via2l0
X2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0odGVzdC0+bV9saXN0KSwgIlBhZ2Uy
IiwgdXJpUGFnZTIuZGF0YSgpLCB1cmlQYWdlMi5kYXRhKCkpOwotICAgIGdfYXNzZXJ0KHdlYmtp
dF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19pdGVtKHRlc3QtPm1fbGlzdCkgPT0gaXRlbVBh
Z2UxKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJk
X2l0ZW0odGVzdC0+bV9saXN0KSk7Ci0gICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tJdGVt
SW5kZXgodGVzdC0+bV9saXN0KTsKLSAgICBpdGVtc1swXSA9IGl0ZW1QYWdlMTsKLSAgICBCYWNr
Rm9yd2FyZExpc3RUZXN0OjpjaGVja0xpc3QodGVzdC0+bV9saXN0LCBCYWNrRm9yd2FyZExpc3RU
ZXN0OjpCYWNrd2FyZCwgaXRlbXMsIDEpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3
YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlzdCh0ZXN0LT5tX2xpc3QpKTsKLQotICAgIHRlc3QtPm1f
Y2hhbmdlZEZsYWdzID0gQmFja0ZvcndhcmRMaXN0VGVzdDo6Q3VycmVudEl0ZW07Ci0gICAgdGVz
dC0+Z29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW0oaXRlbVBhZ2UxKTsKLSAgICB0ZXN0LT53YWl0VW50
aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0KGl0ZW1QYWdlMSA9PSB3ZWJraXRfYmFj
a19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh0ZXN0LT5tX2xpc3QpKTsKLX0KLQotc3Rh
dGljIHZvaWQgdGVzdEJhY2tGb3J3YXJkTGlzdExpbWl0QW5kQ2FjaGUoQmFja0ZvcndhcmRMaXN0
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGtC
YWNrRm9yd2FyZExpc3RMaW1pdDsgaSsrKSB7Ci0gICAgICAgIEdPd25QdHI8Y2hhcj4gcGF0aChn
X3N0cmR1cF9wcmludGYoIi9QYWdlJWQiLCBpKSk7Ci0gICAgICAgIHRlc3QtPm1fY2hhbmdlZEZs
YWdzID0gQmFja0ZvcndhcmRMaXN0VGVzdDo6Q3VycmVudEl0ZW0gfCBCYWNrRm9yd2FyZExpc3RU
ZXN0OjpBZGRlZEl0ZW07Ci0gICAgICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9y
UGF0aChwYXRoLmdldCgpKS5kYXRhKCkpOwotICAgICAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmlu
aXNoZWQoKTsKLSAgICB9Ci0KLSAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9iYWNrX2Zvcndh
cmRfbGlzdF9nZXRfbGVuZ3RoKHRlc3QtPm1fbGlzdCksID09LCBrQmFja0ZvcndhcmRMaXN0TGlt
aXQpOwotICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW1QYWdlRmlyc3QgPSB3ZWJr
aXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X250aF9pdGVtKHRlc3QtPm1fbGlzdCwgLShrQmFja0Zv
cndhcmRMaXN0TGltaXQgLSAxKSk7Ci0gICAgR093blB0cjxHTGlzdD4gcmVtb3ZlZEl0ZW1zKGdf
bGlzdF9wcmVwZW5kKDAsIGl0ZW1QYWdlRmlyc3QpKTsKLQotICAgIEdPd25QdHI8Y2hhcj4gcGF0
aChnX3N0cmR1cF9wcmludGYoIi9QYWdlJWQiLCBrQmFja0ZvcndhcmRMaXN0TGltaXQpKTsKLSAg
ICB0ZXN0LT5tX2NoYW5nZWRGbGFncyA9IEJhY2tGb3J3YXJkTGlzdFRlc3Q6OkN1cnJlbnRJdGVt
IHwgQmFja0ZvcndhcmRMaXN0VGVzdDo6QWRkZWRJdGVtIHwgQmFja0ZvcndhcmRMaXN0VGVzdDo6
UmVtb3ZlZEl0ZW1zOwotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aChw
YXRoLmdldCgpKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZEFuZENo
ZWNrUmVtb3ZlZEl0ZW1zKHJlbW92ZWRJdGVtcy5nZXQoKSk7Ci0KLSAgICBnX2Fzc2VydF9jbXB1
aW50KHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbGVuZ3RoKHRlc3QtPm1fbGlzdCksID09
LCBrQmFja0ZvcndhcmRMaXN0TGltaXQpOwotfQotCi12b2lkIGJlZm9yZUFsbCgpCi17Ci0gICAg
a1NlcnZlciA9IG5ldyBXZWJLaXRUZXN0U2VydmVyKCk7Ci0gICAga1NlcnZlci0+cnVuKHNlcnZl
ckNhbGxiYWNrKTsKLQotICAgIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OmFkZCgiQmFja0ZvcndhcmRM
aXN0IiwgIm5hdmlnYXRpb24iLCB0ZXN0QmFja0ZvcndhcmRMaXN0TmF2aWdhdGlvbik7Ci0gICAg
QmFja0ZvcndhcmRMaXN0VGVzdDo6YWRkKCJCYWNrRm9yd2FyZExpc3QiLCAibGlzdC1saW1pdC1h
bmQtY2FjaGUiLCB0ZXN0QmFja0ZvcndhcmRMaXN0TGltaXRBbmRDYWNoZSk7Ci19Ci0KLXZvaWQg
YWZ0ZXJBbGwoKQotewotICAgIGRlbGV0ZSBrU2VydmVyOwotfQotCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0Q29udGV4dE1lbnUuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdENvbnRleHRNZW51LmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTIzMjliOS4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0Q29udGV4dE1lbnUuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsODY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTIgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiwx
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Ci0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJWaWV3VGVz
dC5oIgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLQotY2xhc3MgQ29udGV4dE1l
bnVUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3QgewotcHVibGljOgotICAgIGVudW0gQ29udGV4dE1l
bnVJdGVtU3RhdGVGbGFncyB7Ci0gICAgICAgIFZpc2libGUgPSAxIDw8IDAsCi0gICAgICAgIEVu
YWJsZWQgPSAxIDw8IDEsCi0gICAgICAgIENoZWNrZWQgPSAxIDw8IDIKLSAgICB9OwotCi0gICAg
dm9pZCBjaGVja0NvbnRleHRNZW51RXZlbnQoR2RrRXZlbnQqIGV2ZW50KQotICAgIHsKLSAgICAg
ICAgZ19hc3NlcnQoZXZlbnQpOwotICAgICAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnQtPnR5cGUs
ID09LCBHREtfQlVUVE9OX1BSRVNTKTsKLSAgICAgICAgZ19hc3NlcnRfY21waW50KGV2ZW50LT5i
dXR0b24uYnV0dG9uLCA9PSwgMyk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcGludChldmVudC0+YnV0
dG9uLngsID09LCBtX21lbnVQb3NpdGlvblgpOwotICAgICAgICBnX2Fzc2VydF9jbXBpbnQoZXZl
bnQtPmJ1dHRvbi55LCA9PSwgbV9tZW51UG9zaXRpb25ZKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMg
Z2Jvb2xlYW4gY29udGV4dE1lbnVDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJL
aXRDb250ZXh0TWVudSogY29udGV4dE1lbnUsIEdka0V2ZW50KiBldmVudCwgV2ViS2l0SGl0VGVz
dFJlc3VsdCogaGl0VGVzdFJlc3VsdCwgQ29udGV4dE1lbnVUZXN0KiB0ZXN0KQotICAgIHsKLSAg
ICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX0NPTlRFWFRfTUVOVShjb250ZXh0TWVudSkpOwotICAg
ICAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNU
KGNvbnRleHRNZW51KSk7Ci0gICAgICAgIHRlc3QtPmNoZWNrQ29udGV4dE1lbnVFdmVudChldmVu
dCk7Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19ISVRfVEVTVF9SRVNVTFQoaGl0VGVzdFJl
c3VsdCkpOwotICAgICAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlz
aGVzKEdfT0JKRUNUKGhpdFRlc3RSZXN1bHQpKTsKLQotICAgICAgICByZXR1cm4gdGVzdC0+Y29u
dGV4dE1lbnUoY29udGV4dE1lbnUsIGV2ZW50LCBoaXRUZXN0UmVzdWx0KTsKLSAgICB9Ci0KLSAg
ICBzdGF0aWMgdm9pZCBjb250ZXh0TWVudURpc21pc3NlZENhbGxiYWNrKFdlYktpdFdlYlZpZXcq
LCBDb250ZXh0TWVudVRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICB0ZXN0LT5jb250ZXh0TWVu
dURpc21pc3NlZCgpOwotICAgIH0KLQotICAgIENvbnRleHRNZW51VGVzdCgpCi0gICAgICAgIDog
bV9tZW51UG9zaXRpb25YKDApCi0gICAgICAgICwgbV9tZW51UG9zaXRpb25ZKDApCi0gICAgewot
ICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImNvbnRleHQtbWVudSIsIEdfQ0FM
TEJBQ0soY29udGV4dE1lbnVDYWxsYmFjayksIHRoaXMpOwotICAgICAgICBnX3NpZ25hbF9jb25u
ZWN0KG1fd2ViVmlldywgImNvbnRleHQtbWVudS1kaXNtaXNzZWQiLCBHX0NBTExCQUNLKGNvbnRl
eHRNZW51RGlzbWlzc2VkQ2FsbGJhY2spLCB0aGlzKTsKLSAgICB9Ci0KLSAgICB+Q29udGV4dE1l
bnVUZXN0KCkKLSAgICB7Ci0gICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0
Y2hlZChtX3dlYlZpZXcsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOwot
ICAgIH0KLQotICAgIHZpcnR1YWwgYm9vbCBjb250ZXh0TWVudShXZWJLaXRDb250ZXh0TWVudSos
IEdka0V2ZW50KiwgV2ViS2l0SGl0VGVzdFJlc3VsdCopID0gMDsKLQotICAgIHZpcnR1YWwgdm9p
ZCBjb250ZXh0TWVudURpc21pc3NlZCgpCi0gICAgewotICAgICAgICBxdWl0TWFpbkxvb3AoKTsK
LSAgICB9Ci0KLSAgICBHdGtNZW51KiBnZXRQb3B1cE1lbnUoKQotICAgIHsKLSAgICAgICAgR093
blB0cjxHTGlzdD4gdG9wbGV2ZWxzKGd0a193aW5kb3dfbGlzdF90b3BsZXZlbHMoKSk7Ci0gICAg
ICAgIGZvciAoR0xpc3QqIGl0ZXIgPSB0b3BsZXZlbHMuZ2V0KCk7IGl0ZXI7IGl0ZXIgPSBnX2xp
c3RfbmV4dChpdGVyKSkgewotICAgICAgICAgICAgaWYgKCFHVEtfSVNfV0lORE9XKGl0ZXItPmRh
dGEpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBHdGtXaWRnZXQq
IGNoaWxkID0gZ3RrX2Jpbl9nZXRfY2hpbGQoR1RLX0JJTihpdGVyLT5kYXRhKSk7Ci0gICAgICAg
ICAgICBpZiAoIUdUS19JU19NRU5VKGNoaWxkKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICAgICAgaWYgKGd0a19tZW51X2dldF9hdHRhY2hfd2lkZ2V0KEdUS19NRU5VKGNo
aWxkKSkgPT0gR1RLX1dJREdFVChtX3dlYlZpZXcpKQotICAgICAgICAgICAgICAgIHJldHVybiBH
VEtfTUVOVShjaGlsZCk7Ci0gICAgICAgIH0KLSAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQo
KTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgYm9vbCBzaG91bGRTaG93SW5wdXRN
ZXRob2RzTWVudSgpCi0gICAgewotICAgICAgICBHdGtTZXR0aW5ncyogc2V0dGluZ3MgPSBndGtf
d2lkZ2V0X2dldF9zZXR0aW5ncyhHVEtfV0lER0VUKG1fd2ViVmlldykpOwotICAgICAgICBpZiAo
IXNldHRpbmdzKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgZ2Jvb2xlYW4g
c2hvd0lucHV0TWV0aG9kTWVudTsKLSAgICAgICAgZ19vYmplY3RfZ2V0KHNldHRpbmdzLCAiZ3Rr
LXNob3ctaW5wdXQtbWV0aG9kLW1lbnUiLCAmc2hvd0lucHV0TWV0aG9kTWVudSwgTlVMTCk7Ci0g
ICAgICAgIHJldHVybiBzaG93SW5wdXRNZXRob2RNZW51OwotICAgIH0KLQotICAgIHZvaWQgY2hl
Y2tBY3Rpb25TdGF0ZShHdGtBY3Rpb24qIGFjdGlvbiwgdW5zaWduZWQgc3RhdGUpCi0gICAgewot
ICAgICAgICBpZiAoc3RhdGUgJiBWaXNpYmxlKQotICAgICAgICAgICAgZ19hc3NlcnQoZ3RrX2Fj
dGlvbl9nZXRfdmlzaWJsZShhY3Rpb24pKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZ19h
c3NlcnQoIWd0a19hY3Rpb25fZ2V0X3Zpc2libGUoYWN0aW9uKSk7Ci0KLSAgICAgICAgaWYgKHN0
YXRlICYgRW5hYmxlZCkKLSAgICAgICAgICAgIGdfYXNzZXJ0KGd0a19hY3Rpb25fZ2V0X3NlbnNp
dGl2ZShhY3Rpb24pKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZ19hc3NlcnQoIWd0a19h
Y3Rpb25fZ2V0X3NlbnNpdGl2ZShhY3Rpb24pKTsKLQotICAgICAgICBpZiAoR1RLX0lTX1RPR0dM
RV9BQ1RJT04oYWN0aW9uKSkgewotICAgICAgICAgICAgaWYgKHN0YXRlICYgQ2hlY2tlZCkKLSAg
ICAgICAgICAgICAgICBnX2Fzc2VydChndGtfdG9nZ2xlX2FjdGlvbl9nZXRfYWN0aXZlKEdUS19U
T0dHTEVfQUNUSU9OKGFjdGlvbikpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBnX2Fzc2VydCghZ3RrX3RvZ2dsZV9hY3Rpb25fZ2V0X2FjdGl2ZShHVEtfVE9HR0xFX0FDVElP
TihhY3Rpb24pKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBHTGlzdCogY2hlY2tDdXJyZW50
SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KEdMaXN0KiBpdGVtcywgV2ViS2l0Q29udGV4dE1l
bnVBY3Rpb24gc3RvY2tBY3Rpb24sIHVuc2lnbmVkIHN0YXRlKQotICAgIHsKLSAgICAgICAgZ19h
c3NlcnQoaXRlbXMpOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfQ09OVEVYVF9NRU5VX0lU
RU0oaXRlbXMtPmRhdGEpKTsKLQotICAgICAgICBXZWJLaXRDb250ZXh0TWVudUl0ZW0qIGl0ZW0g
PSBXRUJLSVRfQ09OVEVYVF9NRU5VX0lURU0oaXRlbXMtPmRhdGEpOwotICAgICAgICBhc3NlcnRP
YmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKGl0ZW0pKTsKLQotICAgICAg
ICBHdGtBY3Rpb24qIGFjdGlvbiA9IHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRfYWN0aW9u
KGl0ZW0pOwotICAgICAgICBnX2Fzc2VydChHVEtfSVNfQUNUSU9OKGFjdGlvbikpOwotCi0gICAg
ICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X3N0b2NrX2Fj
dGlvbihpdGVtKSwgPT0sIHN0b2NrQWN0aW9uKTsKLQotICAgICAgICBjaGVja0FjdGlvblN0YXRl
KGFjdGlvbiwgc3RhdGUpOwotCi0gICAgICAgIHJldHVybiBnX2xpc3RfbmV4dChpdGVtcyk7Ci0g
ICAgfQotCi0gICAgR0xpc3QqIGNoZWNrQ3VycmVudEl0ZW1Jc0N1c3RvbUFjdGlvbkFuZEdldE5l
eHQoR0xpc3QqIGl0ZW1zLCBjb25zdCBjaGFyKiBsYWJlbCwgdW5zaWduZWQgc3RhdGUpCi0gICAg
ewotICAgICAgICBnX2Fzc2VydChpdGVtcyk7Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19D
T05URVhUX01FTlVfSVRFTShpdGVtcy0+ZGF0YSkpOwotCi0gICAgICAgIFdlYktpdENvbnRleHRN
ZW51SXRlbSogaXRlbSA9IFdFQktJVF9DT05URVhUX01FTlVfSVRFTShpdGVtcy0+ZGF0YSk7Ci0g
ICAgICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QoaXRl
bSkpOwotCi0gICAgICAgIEd0a0FjdGlvbiogYWN0aW9uID0gd2Via2l0X2NvbnRleHRfbWVudV9p
dGVtX2dldF9hY3Rpb24oaXRlbSk7Ci0gICAgICAgIGdfYXNzZXJ0KEdUS19JU19BQ1RJT04oYWN0
aW9uKSk7Ci0KLSAgICAgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9jb250ZXh0X21lbnVfaXRl
bV9nZXRfc3RvY2tfYWN0aW9uKGl0ZW0pLCA9PSwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05f
Q1VTVE9NKTsKLSAgICAgICAgZ19hc3NlcnRfY21wc3RyKGd0a19hY3Rpb25fZ2V0X2xhYmVsKGFj
dGlvbiksID09LCBsYWJlbCk7Ci0KLSAgICAgICAgY2hlY2tBY3Rpb25TdGF0ZShhY3Rpb24sIHN0
YXRlKTsKLQotICAgICAgICByZXR1cm4gZ19saXN0X25leHQoaXRlbXMpOwotICAgIH0KLQotICAg
IEdMaXN0KiBjaGVja0N1cnJlbnRJdGVtSXNTdWJNZW51QW5kR2V0TmV4dChHTGlzdCogaXRlbXMs
IGNvbnN0IGNoYXIqIGxhYmVsLCB1bnNpZ25lZCBzdGF0ZSwgR0xpc3QqKiBzdWJNZW51SXRlcikK
LSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0KGl0ZW1zKTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lU
X0lTX0NPTlRFWFRfTUVOVV9JVEVNKGl0ZW1zLT5kYXRhKSk7Ci0KLSAgICAgICAgV2ViS2l0Q29u
dGV4dE1lbnVJdGVtKiBpdGVtID0gV0VCS0lUX0NPTlRFWFRfTUVOVV9JVEVNKGl0ZW1zLT5kYXRh
KTsKLSAgICAgICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVD
VChpdGVtKSk7Ci0KLSAgICAgICAgR3RrQWN0aW9uKiBhY3Rpb24gPSB3ZWJraXRfY29udGV4dF9t
ZW51X2l0ZW1fZ2V0X2FjdGlvbihpdGVtKTsKLSAgICAgICAgZ19hc3NlcnQoR1RLX0lTX0FDVElP
TihhY3Rpb24pKTsKLQotICAgICAgICBnX2Fzc2VydF9jbXBzdHIoZ3RrX2FjdGlvbl9nZXRfbGFi
ZWwoYWN0aW9uKSwgPT0sIGxhYmVsKTsKLSAgICAgICAgY2hlY2tBY3Rpb25TdGF0ZShhY3Rpb24s
IHN0YXRlKTsKLQotICAgICAgICBXZWJLaXRDb250ZXh0TWVudSogc3ViTWVudSA9IHdlYmtpdF9j
b250ZXh0X21lbnVfaXRlbV9nZXRfc3VibWVudShpdGVtKTsKLSAgICAgICAgZ19hc3NlcnQoV0VC
S0lUX0lTX0NPTlRFWFRfTUVOVShzdWJNZW51KSk7Ci0gICAgICAgIGlmIChzdWJNZW51SXRlcikK
LSAgICAgICAgICAgICpzdWJNZW51SXRlciA9IHdlYmtpdF9jb250ZXh0X21lbnVfZ2V0X2l0ZW1z
KHN1Yk1lbnUpOwotCi0gICAgICAgIHJldHVybiBnX2xpc3RfbmV4dChpdGVtcyk7Ci0gICAgfQot
Ci0gICAgR0xpc3QqIGNoZWNrQ3VycmVudEl0ZW1Jc1NlcGFyYXRvckFuZEdldE5leHQoR0xpc3Qq
IGl0ZW1zKQotICAgIHsKLSAgICAgICAgZ19hc3NlcnQoaXRlbXMpOwotICAgICAgICBnX2Fzc2Vy
dChXRUJLSVRfSVNfQ09OVEVYVF9NRU5VX0lURU0oaXRlbXMtPmRhdGEpKTsKLQotICAgICAgICBX
ZWJLaXRDb250ZXh0TWVudUl0ZW0qIGl0ZW0gPSBXRUJLSVRfQ09OVEVYVF9NRU5VX0lURU0oaXRl
bXMtPmRhdGEpOwotICAgICAgICBnX2Fzc2VydCh3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1faXNf
c2VwYXJhdG9yKGl0ZW0pKTsKLQotICAgICAgICByZXR1cm4gZ19saXN0X25leHQoaXRlbXMpOwot
ICAgIH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiBkb1JpZ2h0Q2xpY2tJZGxlQ2FsbGJhY2soQ29u
dGV4dE1lbnVUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+Y2xpY2tNb3VzZUJ1dHRv
bih0ZXN0LT5tX21lbnVQb3NpdGlvblgsIHRlc3QtPm1fbWVudVBvc2l0aW9uWSwgMyk7Ci0gICAg
ICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAgICB2b2lkIHNob3dDb250ZXh0TWVudUF0UG9z
aXRpb25BbmRXYWl0VW50aWxGaW5pc2hlZChpbnQgeCwgaW50IHkpCi0gICAgewotICAgICAgICBt
X21lbnVQb3NpdGlvblggPSB4OwotICAgICAgICBtX21lbnVQb3NpdGlvblkgPSB5OwotICAgICAg
ICBnX2lkbGVfYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KGRvUmlnaHRDbGlja0lk
bGVDYWxsYmFjayksIHRoaXMpOwotICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7
Ci0gICAgfQotCi0gICAgdm9pZCBzaG93Q29udGV4dE1lbnVBbmRXYWl0VW50aWxGaW5pc2hlZCgp
Ci0gICAgewotICAgICAgICBzaG93Q29udGV4dE1lbnVBdFBvc2l0aW9uQW5kV2FpdFVudGlsRmlu
aXNoZWQoMCwgMCk7Ci0gICAgfQotCi0gICAgc3RhdGljIGdib29sZWFuIHNpbXVsYXRlRXNjS2V5
SWRsZUNhbGxiYWNrKENvbnRleHRNZW51VGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHRlc3Qt
PmtleVN0cm9rZShHREtfS0VZX0VzY2FwZSk7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9
Ci0KLSAgICB2b2lkIGRpc21pc3NDb250ZXh0TWVudUFuZFdhaXRVbnRpbEZpbmlzaGVkKCkKLSAg
ICB7Ci0gICAgICAgIGdfaWRsZV9hZGQocmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oc2lt
dWxhdGVFc2NLZXlJZGxlQ2FsbGJhY2spLCB0aGlzKTsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVu
KG1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIGRvdWJsZSBtX21lbnVQb3NpdGlvblg7Ci0gICAg
ZG91YmxlIG1fbWVudVBvc2l0aW9uWTsKLX07Ci0KLWNsYXNzIENvbnRleHRNZW51RGVmYXVsdFRl
c3Q6IHB1YmxpYyBDb250ZXh0TWVudVRlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJQl9URVNU
X0ZJWFRVUkUoQ29udGV4dE1lbnVEZWZhdWx0VGVzdCk7Ci0KLSAgICBlbnVtIERlZmF1bHRNZW51
VHlwZSB7Ci0gICAgICAgIE5hdmlnYXRpb24sCi0gICAgICAgIExpbmssCi0gICAgICAgIEltYWdl
LAotICAgICAgICBMaW5rSW1hZ2UsCi0gICAgICAgIFZpZGVvLAotICAgICAgICBBdWRpbywKLSAg
ICAgICAgRWRpdGFibGUKLSAgICB9OwotCi0gICAgQ29udGV4dE1lbnVEZWZhdWx0VGVzdCgpCi0g
ICAgICAgIDogbV9leHBlY3RlZE1lbnVUeXBlKE5hdmlnYXRpb24pCi0gICAgewotICAgIH0KLQot
ICAgIGJvb2wgY29udGV4dE1lbnUoV2ViS2l0Q29udGV4dE1lbnUqIGNvbnRleHRNZW51LCBHZGtF
dmVudCogZXZlbnQsIFdlYktpdEhpdFRlc3RSZXN1bHQqIGhpdFRlc3RSZXN1bHQpCi0gICAgewot
ICAgICAgICBHTGlzdCogaXRlciA9IHdlYmtpdF9jb250ZXh0X21lbnVfZ2V0X2l0ZW1zKGNvbnRl
eHRNZW51KTsKLQotICAgICAgICBzd2l0Y2ggKG1fZXhwZWN0ZWRNZW51VHlwZSkgewotICAgICAg
ICBjYXNlIE5hdmlnYXRpb246Ci0gICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0
X3Jlc3VsdF9jb250ZXh0X2lzX2xpbmsoaGl0VGVzdFJlc3VsdCkpOwotICAgICAgICAgICAgZ19h
c3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFnZShoaXRUZXN0UmVz
dWx0KSk7Ci0gICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250
ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQpKTsKLSAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJr
aXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkpOwot
ICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4
dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9HT19CQUNLLCBWaXNpYmxlKTsKLSAg
ICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQo
aXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fR09fRk9SV0FSRCwgVmlzaWJsZSk7Ci0g
ICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0
KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1NUT1AsIFZpc2libGUpOwotICAgICAg
ICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVy
LCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9SRUxPQUQsIFZpc2libGUgfCBFbmFibGVkKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIExpbms6Ci0gICAgICAgICAgICBnX2Fz
c2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluayhoaXRUZXN0UmVzdWx0
KSk7Ci0gICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0
X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQpKTsKLSAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRf
aGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbWVkaWEoaGl0VGVzdFJlc3VsdCkpOwotICAgICAg
ICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19lZGl0YWJs
ZShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlz
U3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX09Q
RU5fTElOSywgVmlzaWJsZSB8IEVuYWJsZWQpOwotICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3Vy
cmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5V
X0FDVElPTl9PUEVOX0xJTktfSU5fTkVXX1dJTkRPVywgVmlzaWJsZSB8IEVuYWJsZWQpOwotICAg
ICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChp
dGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9ET1dOTE9BRF9MSU5LX1RPX0RJU0ssIFZp
c2libGUgfCBFbmFibGVkKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNT
dG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09Q
WV9MSU5LX1RPX0NMSVBCT0FSRCwgVmlzaWJsZSB8IEVuYWJsZWQpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgSW1hZ2U6Ci0gICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hp
dF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xpbmsoaGl0VGVzdFJlc3VsdCkpOwotICAgICAgICAg
ICAgZ19hc3NlcnQod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdlKGhpdFRl
c3RSZXN1bHQpKTsKLSAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0
X2NvbnRleHRfaXNfbWVkaWEoaGl0VGVzdFJlc3VsdCkpOwotICAgICAgICAgICAgZ19hc3NlcnQo
IXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0UmVzdWx0
KSk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRH
ZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5fSU1BR0VfSU5fTkVX
X1dJTkRPVywgVmlzaWJsZSB8IEVuYWJsZWQpOwotICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3Vy
cmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5V
X0FDVElPTl9ET1dOTE9BRF9JTUFHRV9UT19ESVNLLCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAg
ICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0
ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFlfSU1BR0VfVE9fQ0xJUEJPQVJELCBW
aXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlz
U3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NP
UFlfSU1BR0VfVVJMX1RPX0NMSVBCT0FSRCwgVmlzaWJsZSB8IEVuYWJsZWQpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTGlua0ltYWdlOgotICAgICAgICAgICAgZ19hc3NlcnQo
d2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xpbmsoaGl0VGVzdFJlc3VsdCkpOwot
ICAgICAgICAgICAgZ19hc3NlcnQod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2lt
YWdlKGhpdFRlc3RSZXN1bHQpKTsKLSAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rl
c3RfcmVzdWx0X2NvbnRleHRfaXNfbWVkaWEoaGl0VGVzdFJlc3VsdCkpOwotICAgICAgICAgICAg
Z19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19lZGl0YWJsZShoaXRU
ZXN0UmVzdWx0KSk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tB
Y3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5fTElO
SywgVmlzaWJsZSB8IEVuYWJsZWQpOwotICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0
ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
Tl9PUEVOX0xJTktfSU5fTkVXX1dJTkRPVywgVmlzaWJsZSB8IEVuYWJsZWQpOwotICAgICAgICAg
ICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9ET1dOTE9BRF9MSU5LX1RPX0RJU0ssIFZpc2libGUg
fCBFbmFibGVkKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0Fj
dGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9MSU5L
X1RPX0NMSVBCT0FSRCwgVmlzaWJsZSB8IEVuYWJsZWQpOwotICAgICAgICAgICAgaXRlciA9IGNo
ZWNrQ3VycmVudEl0ZW1Jc1NlcGFyYXRvckFuZEdldE5leHQoaXRlcik7Ci0gICAgICAgICAgICBp
dGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJ
VF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5fSU1BR0VfSU5fTkVXX1dJTkRPVywgVmlzaWJsZSB8
IEVuYWJsZWQpOwotICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0
aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9ET1dOTE9BRF9J
TUFHRV9UT19ESVNLLCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgICAgICBpdGVyID0gY2hl
Y2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhU
X01FTlVfQUNUSU9OX0NPUFlfSU1BR0VfVE9fQ0xJUEJPQVJELCBWaXNpYmxlIHwgRW5hYmxlZCk7
Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXRO
ZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFlfSU1BR0VfVVJMX1RPX0NM
SVBCT0FSRCwgVmlzaWJsZSB8IEVuYWJsZWQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgVmlkZW86Ci0gICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3Vs
dF9jb250ZXh0X2lzX2xpbmsoaGl0VGVzdFJlc3VsdCkpOwotICAgICAgICAgICAgZ19hc3NlcnQo
IXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0KSk7
Ci0gICAgICAgICAgICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNf
bWVkaWEoaGl0VGVzdFJlc3VsdCkpOwotICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRf
dGVzdF9yZXN1bHRfY29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgICAg
ICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIs
IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX01FRElBX1BMQVksIFZpc2libGUgfCBFbmFibGVk
KTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdl
dE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fTUVESUFfTVVURSwgVmlzaWJs
ZSk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRH
ZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1RPR0dMRV9NRURJQV9DT05U
Uk9MUywgVmlzaWJsZSB8IEVuYWJsZWQgfCBDaGVja2VkKTsKLSAgICAgICAgICAgIGl0ZXIgPSBj
aGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fVE9HR0xFX01FRElBX0xPT1AsIFZpc2libGUgfCBFbmFibGVkKTsKLSAg
ICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQo
aXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRU5URVJfVklERU9fRlVMTFNDUkVFTiwg
VmlzaWJsZSB8IEVuYWJsZWQpOwotICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1J
c1NlcGFyYXRvckFuZEdldE5leHQoaXRlcik7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJy
ZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVf
QUNUSU9OX0NPUFlfVklERU9fTElOS19UT19DTElQQk9BUkQsIFZpc2libGUgfCBFbmFibGVkKTsK
LSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5l
eHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9WSURFT19JTl9ORVdfV0lO
RE9XLCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50
SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNU
SU9OX0RPV05MT0FEX1ZJREVPX1RPX0RJU0ssIFZpc2libGUgfCBFbmFibGVkKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEF1ZGlvOgotICAgICAgICAgICAgZ19hc3NlcnQoIXdl
YmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RSZXN1bHQpKTsKLSAg
ICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfaW1h
Z2UoaGl0VGVzdFJlc3VsdCkpOwotICAgICAgICAgICAgZ19hc3NlcnQod2Via2l0X2hpdF90ZXN0
X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQpKTsKLSAgICAgICAgICAgIGdf
YXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfZWRpdGFibGUoaGl0VGVz
dFJlc3VsdCkpOwotICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0
aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9NRURJQV9QTEFZ
LCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRl
bUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9O
X01FRElBX01VVEUsIFZpc2libGUpOwotICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0
ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
Tl9UT0dHTEVfTUVESUFfQ09OVFJPTFMsIFZpc2libGUgfCBFbmFibGVkIHwgQ2hlY2tlZCk7Ci0g
ICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0
KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1RPR0dMRV9NRURJQV9MT09QLCBWaXNp
YmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3Rv
Y2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0VOVEVS
X1ZJREVPX0ZVTExTQ1JFRU4sIFZpc2libGUpOwotICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3Vy
cmVudEl0ZW1Jc1NlcGFyYXRvckFuZEdldE5leHQoaXRlcik7Ci0gICAgICAgICAgICBpdGVyID0g
Y2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05U
RVhUX01FTlVfQUNUSU9OX0NPUFlfQVVESU9fTElOS19UT19DTElQQk9BUkQsIFZpc2libGUgfCBF
bmFibGVkKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlv
bkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9BVURJT19J
Tl9ORVdfV0lORE9XLCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgICAgICBpdGVyID0gY2hl
Y2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhU
X01FTlVfQUNUSU9OX0RPV05MT0FEX0FVRElPX1RPX0RJU0ssIFZpc2libGUgfCBFbmFibGVkKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVkaXRhYmxlOgotICAgICAgICAgICAg
Z19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RS
ZXN1bHQpKTsKLSAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2Nv
bnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkpOwotICAgICAgICAgICAgZ19hc3NlcnQoIXdl
YmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7Ci0g
ICAgICAgICAgICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfZWRp
dGFibGUoaGl0VGVzdFJlc3VsdCkpOwotICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0
ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
Tl9DVVQsIFZpc2libGUpOwotICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0
b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZ
LCBWaXNpYmxlKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0Fj
dGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fUEFTVEUsIFZp
c2libGUgfCBFbmFibGVkKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNT
dG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fREVM
RVRFLCBWaXNpYmxlKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTZXBh
cmF0b3JBbmRHZXROZXh0KGl0ZXIpOwotICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0
ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
Tl9TRUxFQ1RfQUxMLCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgICAgICBpdGVyID0gY2hl
Y2tDdXJyZW50SXRlbUlzU2VwYXJhdG9yQW5kR2V0TmV4dChpdGVyKTsKLSAgICAgICAgICAgIGlm
IChzaG91bGRTaG93SW5wdXRNZXRob2RzTWVudSgpKQotICAgICAgICAgICAgICAgIGl0ZXIgPSBj
aGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fSU5QVVRfTUVUSE9EUywgVmlzaWJsZSB8IEVuYWJsZWQpOwotICAgICAg
ICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVy
LCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9VTklDT0RFLCBWaXNpYmxlIHwgRW5hYmxlZCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGdfYXNz
ZXJ0X25vdF9yZWFjaGVkKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAod2Via2l0X3NldHRp
bmdzX2dldF9lbmFibGVfZGV2ZWxvcGVyX2V4dHJhcyh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRp
bmdzKG1fd2ViVmlldykpKSB7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlz
U2VwYXJhdG9yQW5kR2V0TmV4dChpdGVyKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJl
bnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9B
Q1RJT05fSU5TUEVDVF9FTEVNRU5ULCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgZ19hc3NlcnQoIWl0ZXIpOwotCi0gICAgICAgIHF1aXRNYWluTG9vcCgpOwotCi0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIERlZmF1bHRNZW51VHlwZSBtX2V4cGVjdGVk
TWVudVR5cGU7Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0Q29udGV4dE1lbnVEZWZhdWx0TWVudShD
b250ZXh0TWVudURlZmF1bHRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3Qt
PnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOwotCi0gICAgY29uc3QgY2hhciogbGlu
a3NIVE1MID0KLSAgICAgICAgIjxodG1sPjxib2R5PiIKLSAgICAgICAgIiA8YSBzdHlsZT0ncG9z
aXRpb246YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjEnIGhyZWY9J2h0dHA6Ly93d3cud2Via2l0Z3Rr
Lm9yZycgdGl0bGU9J1dlYktpdEdUSysgVGl0bGUnPldlYktpdEdUSysgV2Vic2l0ZTwvYT4iCi0g
ICAgICAgICIgPGltZyBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjEwJyBz
cmM9JzB4ZGVhZGJlZWYnIHdpZHRoPTUgaGVpZ2h0PTU+PC9pbWc+IgotICAgICAgICAiIDxhIHN0
eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6MjAnIGhyZWY9J2h0dHA6Ly93d3cu
d2Via2l0Z3RrLm9yZy9sb2dvJyB0aXRsZT0nV2ViS2l0R1RLKyBMb2dvJz48aW1nIHNyYz0nMHhk
ZWFkYmVlZicgd2lkdGg9NSBoZWlnaHQ9NT48L2ltZz48L2E+IgotICAgICAgICAiIDxpbnB1dCBz
dHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjMwJyBzaXplPScxMCc+PC9pbnB1
dD4iCi0gICAgICAgICIgPHZpZGVvIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0
b3A6NTAnIHdpZHRoPSczMDAnIGhlaWdodD0nMzAwJyBjb250cm9scz0nY29udHJvbHMnIHByZWxv
YWQ9J25vbmUnPjxzb3VyY2Ugc3JjPSdtb3ZpZS5vZ2cnIHR5cGU9J3ZpZGVvL29nZycgLz48L3Zp
ZGVvPiIKLSAgICAgICAgIiA8YXVkaW8gc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7
IHRvcDo2MCcgd2lkdGg9JzUwJyBoZWlnaHQ9JzIwJyBjb250cm9scz0nY29udHJvbHMnIHByZWxv
YWQ9J25vbmUnPjxzb3VyY2Ugc3JjPSd0cmFjay5tcDMnIHR5cGU9J2F1ZGlvL21wMycgLz48L2F1
ZGlvPiIKLSAgICAgICAgIjwvYm9keT48L2h0bWw+IjsKLSAgICB0ZXN0LT5sb2FkSHRtbChsaW5r
c0hUTUwsICJmaWxlOi8vLyIpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwot
Ci0gICAgLy8gQ29udGV4dCBtZW51IGZvciBkb2N1bWVudC4KLSAgICB0ZXN0LT5tX2V4cGVjdGVk
TWVudVR5cGUgPSBDb250ZXh0TWVudURlZmF1bHRUZXN0OjpOYXZpZ2F0aW9uOwotICAgIHRlc3Qt
PnNob3dDb250ZXh0TWVudUF0UG9zaXRpb25BbmRXYWl0VW50aWxGaW5pc2hlZCgwLCAwKTsKLQot
ICAgIC8vIENvbnRleHQgbWVudSBmb3IgbGluay4KLSAgICB0ZXN0LT5tX2V4cGVjdGVkTWVudVR5
cGUgPSBDb250ZXh0TWVudURlZmF1bHRUZXN0OjpMaW5rOwotICAgIHRlc3QtPnNob3dDb250ZXh0
TWVudUF0UG9zaXRpb25BbmRXYWl0VW50aWxGaW5pc2hlZCgxLCAxKTsKLQotICAgIC8vIENvbnRl
eHQgbWVudSBmb3IgaW1hZ2UuCi0gICAgdGVzdC0+bV9leHBlY3RlZE1lbnVUeXBlID0gQ29udGV4
dE1lbnVEZWZhdWx0VGVzdDo6SW1hZ2U7Ci0gICAgdGVzdC0+c2hvd0NvbnRleHRNZW51QXRQb3Np
dGlvbkFuZFdhaXRVbnRpbEZpbmlzaGVkKDEsIDEwKTsKLQotICAgIC8vIEVuYWJsZSBkZXZlbG9w
ZXIgZXh0cmFzIG5vdywgc28gdGhhdCBpbnNwZWN0b3IgZWxlbWVudAotICAgIC8vIHdpbGwgYmUg
c2hvd24gaW4gdGhlIGRlZmF1bHQgY29udGV4dCBtZW51LgotICAgIHdlYmtpdF9zZXR0aW5nc19z
ZXRfZW5hYmxlX2RldmVsb3Blcl9leHRyYXMod2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh0
ZXN0LT5tX3dlYlZpZXcpLCBUUlVFKTsKLQotICAgIC8vIENvbnRleHQgbWVudSBmb3IgaW1hZ2Ug
bGluay4KLSAgICB0ZXN0LT5tX2V4cGVjdGVkTWVudVR5cGUgPSBDb250ZXh0TWVudURlZmF1bHRU
ZXN0OjpMaW5rSW1hZ2U7Ci0gICAgdGVzdC0+c2hvd0NvbnRleHRNZW51QXRQb3NpdGlvbkFuZFdh
aXRVbnRpbEZpbmlzaGVkKDEsIDIwKTsKLQotICAgIC8vIENvbnRleHQgbWVudSBmb3IgdmlkZW8u
Ci0gICAgdGVzdC0+bV9leHBlY3RlZE1lbnVUeXBlID0gQ29udGV4dE1lbnVEZWZhdWx0VGVzdDo6
VmlkZW87Ci0gICAgdGVzdC0+c2hvd0NvbnRleHRNZW51QXRQb3NpdGlvbkFuZFdhaXRVbnRpbEZp
bmlzaGVkKDEsIDUwKTsKLQotICAgIC8vIENvbnRleHQgbWVudSBmb3IgYXVkaW8uCi0gICAgdGVz
dC0+bV9leHBlY3RlZE1lbnVUeXBlID0gQ29udGV4dE1lbnVEZWZhdWx0VGVzdDo6QXVkaW87Ci0g
ICAgdGVzdC0+c2hvd0NvbnRleHRNZW51QXRQb3NpdGlvbkFuZFdhaXRVbnRpbEZpbmlzaGVkKDEs
IDYwKTsKLQotICAgIC8vIENvbnRleHQgbWVudSBmb3IgZWRpdGFibGUuCi0gICAgdGVzdC0+bV9l
eHBlY3RlZE1lbnVUeXBlID0gQ29udGV4dE1lbnVEZWZhdWx0VGVzdDo6RWRpdGFibGU7Ci0gICAg
dGVzdC0+c2hvd0NvbnRleHRNZW51QXRQb3NpdGlvbkFuZFdhaXRVbnRpbEZpbmlzaGVkKDUsIDM1
KTsKLX0KLQotY2xhc3MgQ29udGV4dE1lbnVDdXN0b21UZXN0OiBwdWJsaWMgQ29udGV4dE1lbnVU
ZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKENvbnRleHRNZW51Q3Vz
dG9tVGVzdCk7Ci0KLSAgICBDb250ZXh0TWVudUN1c3RvbVRlc3QoKQotICAgICAgICA6IG1faXRl
bVRvQWN0aXZhdGVMYWJlbCgwKQotICAgICAgICAsIG1fYWN0aXZhdGVkKGZhbHNlKQotICAgICAg
ICAsIG1fdG9nZ2xlZChmYWxzZSkKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBjb250ZXh0TWVu
dShXZWJLaXRDb250ZXh0TWVudSogY29udGV4dE1lbnUsIEdka0V2ZW50KiwgV2ViS2l0SGl0VGVz
dFJlc3VsdCogaGl0VGVzdFJlc3VsdCkKLSAgICB7Ci0gICAgICAgIC8vIEFwcGVuZCBvdXIgY3Vz
dG9tIGl0ZW0gdG8gdGhlIGRlZmF1bHQgbWVudS4KLSAgICAgICAgd2Via2l0X2NvbnRleHRfbWVu
dV9hcHBlbmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXcobV9hY3Rp
b24uZ2V0KCkpKTsKLSAgICAgICAgcXVpdE1haW5Mb29wKCk7Ci0KLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIEd0a01lbnVJdGVtKiBnZXRNZW51SXRlbShHdGtNZW51KiBtZW51
LCBjb25zdCBnY2hhciogaXRlbUxhYmVsKQotICAgIHsKLSAgICAgICAgR093blB0cjxHTGlzdD4g
aXRlbXMoZ3RrX2NvbnRhaW5lcl9nZXRfY2hpbGRyZW4oR1RLX0NPTlRBSU5FUihtZW51KSkpOwot
ICAgICAgICBmb3IgKEdMaXN0KiBpdGVyID0gaXRlbXMuZ2V0KCk7IGl0ZXI7IGl0ZXIgPSBnX2xp
c3RfbmV4dChpdGVyKSkgewotICAgICAgICAgICAgR3RrTWVudUl0ZW0qIGNoaWxkID0gR1RLX01F
TlVfSVRFTShpdGVyLT5kYXRhKTsKLSAgICAgICAgICAgIGlmIChnX3N0cl9lcXVhbChpdGVtTGFi
ZWwsIGd0a19tZW51X2l0ZW1fZ2V0X2xhYmVsKGNoaWxkKSkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGNoaWxkOwotICAgICAgICB9Ci0gICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0g
ICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHZvaWQgYWN0aXZhdGVNZW51SXRlbSgpCi0g
ICAgewotICAgICAgICBnX2Fzc2VydChtX2l0ZW1Ub0FjdGl2YXRlTGFiZWwpOwotICAgICAgICBH
dGtNZW51KiBtZW51ID0gZ2V0UG9wdXBNZW51KCk7Ci0gICAgICAgIEd0a01lbnVJdGVtKiBpdGVt
ID0gZ2V0TWVudUl0ZW0obWVudSwgbV9pdGVtVG9BY3RpdmF0ZUxhYmVsKTsKLSAgICAgICAgZ3Rr
X21lbnVfc2hlbGxfYWN0aXZhdGVfaXRlbShHVEtfTUVOVV9TSEVMTChtZW51KSwgR1RLX1dJREdF
VChpdGVtKSwgVFJVRSk7Ci0gICAgICAgIG1faXRlbVRvQWN0aXZhdGVMYWJlbCA9IDA7Ci0gICAg
fQotCi0gICAgc3RhdGljIGdib29sZWFuIGFjdGl2YXRlTWVudUl0ZW1JZGxlQ2FsbGJhY2soZ3Bv
aW50ZXIgdXNlckRhdGEpCi0gICAgewotICAgICAgICBDb250ZXh0TWVudUN1c3RvbVRlc3QqIHRl
c3QgPSBzdGF0aWNfY2FzdDxDb250ZXh0TWVudUN1c3RvbVRlc3QqPih1c2VyRGF0YSk7Ci0gICAg
ICAgIHRlc3QtPmFjdGl2YXRlTWVudUl0ZW0oKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAg
IH0KLQotICAgIHZvaWQgYWN0aXZhdGVDdXN0b21NZW51SXRlbUFuZFdhaXRVbnRpbEFjdGl2YXRl
ZChjb25zdCBjaGFyKiBhY3Rpb25MYWJlbCkKLSAgICB7Ci0gICAgICAgIG1fYWN0aXZhdGVkID0g
bV90b2dnbGVkID0gZmFsc2U7Ci0gICAgICAgIG1faXRlbVRvQWN0aXZhdGVMYWJlbCA9IGFjdGlv
bkxhYmVsOwotICAgICAgICBnX2lkbGVfYWRkKGFjdGl2YXRlTWVudUl0ZW1JZGxlQ2FsbGJhY2ss
IHRoaXMpOwotICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Ci0gICAgfQotCi0g
ICAgdm9pZCB0b2dnbGVDdXN0b21NZW51SXRlbUFuZFdhaXRVbnRpbFRvZ2dsZWQoY29uc3QgY2hh
ciogYWN0aW9uTGFiZWwpCi0gICAgewotICAgICAgICBhY3RpdmF0ZUN1c3RvbU1lbnVJdGVtQW5k
V2FpdFVudGlsQWN0aXZhdGVkKGFjdGlvbkxhYmVsKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9p
ZCBhY3Rpb25BY3RpdmF0ZWRDYWxsYmFjayhHdGtBY3Rpb24qLCBDb250ZXh0TWVudUN1c3RvbVRl
c3QqIHRlc3QpCi0gICAgewotICAgICAgICB0ZXN0LT5tX2FjdGl2YXRlZCA9IHRydWU7Ci0gICAg
fQotCi0gICAgc3RhdGljIHZvaWQgYWN0aW9uVG9nZ2xlZENhbGxiYWNrKEd0a0FjdGlvbiosIENv
bnRleHRNZW51Q3VzdG9tVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHRlc3QtPm1fdG9nZ2xl
ZCA9IHRydWU7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRBY3Rpb24oR3RrQWN0aW9uKiBhY3Rpb24p
Ci0gICAgewotICAgICAgICBtX2FjdGlvbiA9IGFjdGlvbjsKLSAgICAgICAgaWYgKEdUS19JU19U
T0dHTEVfQUNUSU9OKGFjdGlvbikpCi0gICAgICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGFjdGlv
biwgInRvZ2dsZWQiLCBHX0NBTExCQUNLKGFjdGlvblRvZ2dsZWRDYWxsYmFjayksIHRoaXMpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGFjdGlvbiwgImFjdGl2
YXRlIiwgR19DQUxMQkFDSyhhY3Rpb25BY3RpdmF0ZWRDYWxsYmFjayksIHRoaXMpOwotICAgIH0K
LQotICAgIEdSZWZQdHI8R3RrQWN0aW9uPiBtX2FjdGlvbjsKLSAgICBjb25zdCBjaGFyKiBtX2l0
ZW1Ub0FjdGl2YXRlTGFiZWw7Ci0gICAgYm9vbCBtX2FjdGl2YXRlZDsKLSAgICBib29sIG1fdG9n
Z2xlZDsKLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RDb250ZXh0TWVudVBvcHVsYXRlTWVudShDb250
ZXh0TWVudUN1c3RvbVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+c2hv
d0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7Ci0KLSAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0
bWw+PGJvZHk+V2ViS2l0R1RLKyBDb250ZXh0IG1lbnUgdGVzdHM8L2JvZHk+PC9odG1sPiIsICJm
aWxlOi8vLyIpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgLy8g
Q3JlYXRlIGEgY3VzdG9tIG1lbnUgaXRlbS4KLSAgICBHUmVmUHRyPEd0a0FjdGlvbj4gYWN0aW9u
ID0gYWRvcHRHUmVmKGd0a19hY3Rpb25fbmV3KCJXZWJLaXRHVEsrQ3VzdG9tQWN0aW9uIiwgIkN1
c3RvbSBfQWN0aW9uIiwgMCwgMCkpOwotICAgIHRlc3QtPnNldEFjdGlvbihhY3Rpb24uZ2V0KCkp
OwotICAgIHRlc3QtPnNob3dDb250ZXh0TWVudUFuZFdhaXRVbnRpbEZpbmlzaGVkKCk7Ci0gICAg
dGVzdC0+YWN0aXZhdGVDdXN0b21NZW51SXRlbUFuZFdhaXRVbnRpbEFjdGl2YXRlZChndGtfYWN0
aW9uX2dldF9sYWJlbChhY3Rpb24uZ2V0KCkpKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX2FjdGl2
YXRlZCk7Ci0gICAgZ19hc3NlcnQoIXRlc3QtPm1fdG9nZ2xlZCk7Ci0KLSAgICAvLyBDcmVhdGUg
YSBjdXN0b20gdG9nZ2xlIG1lbnUgaXRlbS4KLSAgICBHUmVmUHRyPEd0a0FjdGlvbj4gdG9nZ2xl
QWN0aW9uID0gYWRvcHRHUmVmKEdUS19BQ1RJT04oZ3RrX3RvZ2dsZV9hY3Rpb25fbmV3KCJXZWJL
aXRHVEsrQ3VzdG9tVG9nZ2xlQWN0aW9uIiwgIkN1c3RvbSBfVG9nZ2xlIEFjdGlvbiIsIDAsIDAp
KSk7Ci0gICAgdGVzdC0+c2V0QWN0aW9uKHRvZ2dsZUFjdGlvbi5nZXQoKSk7Ci0gICAgdGVzdC0+
c2hvd0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmluaXNoZWQoKTsKLSAgICB0ZXN0LT50b2dnbGVD
dXN0b21NZW51SXRlbUFuZFdhaXRVbnRpbFRvZ2dsZWQoZ3RrX2FjdGlvbl9nZXRfbGFiZWwodG9n
Z2xlQWN0aW9uLmdldCgpKSk7Ci0gICAgZ19hc3NlcnQoIXRlc3QtPm1fYWN0aXZhdGVkKTsKLSAg
ICBnX2Fzc2VydCh0ZXN0LT5tX3RvZ2dsZWQpOwotfQotCi1jbGFzcyBDb250ZXh0TWVudUN1c3Rv
bUZ1bGxUZXN0OiBwdWJsaWMgQ29udGV4dE1lbnVUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dM
SUJfVEVTVF9GSVhUVVJFKENvbnRleHRNZW51Q3VzdG9tRnVsbFRlc3QpOwotCi0gICAgYm9vbCBj
b250ZXh0TWVudShXZWJLaXRDb250ZXh0TWVudSogY29udGV4dE1lbnUsIEdka0V2ZW50KiwgV2Vi
S2l0SGl0VGVzdFJlc3VsdCopCi0gICAgewotICAgICAgICAvLyBDbGVhciBwcm9wb3NlZCBtZW51
IGFuZCBidWlsZCBvdXIgb3duLgotICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X3JlbW92ZV9h
bGwoY29udGV4dE1lbnUpOwotICAgICAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X2NvbnRleHRf
bWVudV9nZXRfbl9pdGVtcyhjb250ZXh0TWVudSksID09LCAwKTsKLQotICAgICAgICAvLyBBZGQg
YWN0aW9ucyBmcm9tIHN0b2NrLgotICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X3ByZXBlbmQo
Y29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfZnJvbV9zdG9ja19hY3Rp
b24oV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fR09fQkFDSykpOwotICAgICAgICB3ZWJraXRf
Y29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVt
X25ld19mcm9tX3N0b2NrX2FjdGlvbihXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9HT19GT1JX
QVJEKSk7Ci0gICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfaW5zZXJ0KGNvbnRleHRNZW51LCB3
ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X3NlcGFyYXRvcigpLCAyKTsKLQotICAgICAgICAv
LyBBZGQgY3VzdG9tIGFjdGlvbnMuCi0gICAgICAgIEdSZWZQdHI8R3RrQWN0aW9uPiBhY3Rpb24g
PSBhZG9wdEdSZWYoZ3RrX2FjdGlvbl9uZXcoIldlYktpdEdUSytDdXN0b21BY3Rpb24iLCAiQ3Vz
dG9tIF9BY3Rpb24iLCAwLCAwKSk7Ci0gICAgICAgIGd0a19hY3Rpb25fc2V0X3NlbnNpdGl2ZShh
Y3Rpb24uZ2V0KCksIEZBTFNFKTsKLSAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9pbnNlcnQo
Y29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXcoYWN0aW9uLmdldCgpKSwg
LTEpOwotICAgICAgICBHUmVmUHRyPEd0a0FjdGlvbj4gdG9nZ2xlQWN0aW9uID0gYWRvcHRHUmVm
KEdUS19BQ1RJT04oZ3RrX3RvZ2dsZV9hY3Rpb25fbmV3KCJXZWJLaXRHVEsrQ3VzdG9tVG9nZ2xl
QWN0aW9uIiwgIkN1c3RvbSBfVG9nZ2xlIEFjdGlvbiIsIDAsIDApKSk7Ci0gICAgICAgIGd0a190
b2dnbGVfYWN0aW9uX3NldF9hY3RpdmUoR1RLX1RPR0dMRV9BQ1RJT04odG9nZ2xlQWN0aW9uLmdl
dCgpKSwgVFJVRSk7Ci0gICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRN
ZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3KHRvZ2dsZUFjdGlvbi5nZXQoKSkpOwot
ICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2Nv
bnRleHRfbWVudV9pdGVtX25ld19zZXBhcmF0b3IoKSk7Ci0KLSAgICAgICAgLy8gQWRkIGEgc3Vi
bWVudS4KLSAgICAgICAgR1JlZlB0cjxXZWJLaXRDb250ZXh0TWVudT4gc3ViTWVudSA9IGFkb3B0
R1JlZih3ZWJraXRfY29udGV4dF9tZW51X25ldygpKTsKLSAgICAgICAgYXNzZXJ0T2JqZWN0SXNE
ZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChzdWJNZW51LmdldCgpKSk7Ci0gICAgICAg
IHdlYmtpdF9jb250ZXh0X21lbnVfaW5zZXJ0KHN1Yk1lbnUuZ2V0KCksIHdlYmtpdF9jb250ZXh0
X21lbnVfaXRlbV9uZXdfZnJvbV9zdG9ja19hY3Rpb25fd2l0aF9sYWJlbChXRUJLSVRfQ09OVEVY
VF9NRU5VX0FDVElPTl9TVE9QLCAiU3RvcCBMb2FkIiksIDApOwotICAgICAgICB3ZWJraXRfY29u
dGV4dF9tZW51X2luc2VydChzdWJNZW51LmdldCgpLCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1f
bmV3X2Zyb21fc3RvY2tfYWN0aW9uKFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1JFTE9BRCks
IC0xKTsKLSAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBlbmQoY29udGV4dE1lbnUsIHdl
YmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfd2l0aF9zdWJtZW51KCJMb2FkIG9wdGlvbnMiLCBz
dWJNZW51LmdldCgpKSk7Ci0gICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRl
eHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X3NlcGFyYXRvcigpKTsKLQotICAg
ICAgICAvLyBNb3ZlIExvYWQgc3VibWVudSBiZWZvcmUgY3VzdG9tIGFjdGlvbnMuCi0gICAgICAg
IHdlYmtpdF9jb250ZXh0X21lbnVfbW92ZV9pdGVtKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4
dF9tZW51X2xhc3QoY29udGV4dE1lbnUpLCAzKTsKLSAgICAgICAgd2Via2l0X2NvbnRleHRfbWVu
dV9tb3ZlX2l0ZW0oY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfbGFzdChjb250ZXh0
TWVudSksIDMpOwotCi0gICAgICAgIC8vIElmIGxhc3QgaXRlbSBpcyBhIHNlcGFyYXRvciwgcmVt
b3ZlIGl0LgotICAgICAgICBpZiAod2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2lzX3NlcGFyYXRv
cih3ZWJraXRfY29udGV4dF9tZW51X2xhc3QoY29udGV4dE1lbnUpKSkKLSAgICAgICAgICAgIHdl
YmtpdF9jb250ZXh0X21lbnVfcmVtb3ZlKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51
X2xhc3QoY29udGV4dE1lbnUpKTsKLQotICAgICAgICAvLyBDaGVjayB0aGUgbWVudS4KLSAgICAg
ICAgR0xpc3QqIGl0ZXIgPSB3ZWJraXRfY29udGV4dF9tZW51X2dldF9pdGVtcyhjb250ZXh0TWVu
dSk7Ci0KLSAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0
TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9HT19CQUNLLCBWaXNpYmxlIHwg
RW5hYmxlZCk7Ci0gICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFu
ZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fR09fRk9SV0FSRCwgVmlz
aWJsZSB8IEVuYWJsZWQpOwotICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU2VwYXJh
dG9yQW5kR2V0TmV4dChpdGVyKTsKLQotICAgICAgICBHTGlzdCogc3ViTWVudUl0ZXIgPSAwOwot
ICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3ViTWVudUFuZEdldE5leHQoaXRlciwg
IkxvYWQgb3B0aW9ucyIsIFZpc2libGUgfCBFbmFibGVkLCAmc3ViTWVudUl0ZXIpOwotICAgICAg
ICBzdWJNZW51SXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChz
dWJNZW51SXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fU1RPUCwgVmlzaWJsZSB8IEVu
YWJsZWQpOwotICAgICAgICBzdWJNZW51SXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0
aW9uQW5kR2V0TmV4dChzdWJNZW51SXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fUkVM
T0FELCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVt
SXNTZXBhcmF0b3JBbmRHZXROZXh0KGl0ZXIpOwotCi0gICAgICAgIGl0ZXIgPSBjaGVja0N1cnJl
bnRJdGVtSXNDdXN0b21BY3Rpb25BbmRHZXROZXh0KGl0ZXIsICJDdXN0b20gX0FjdGlvbiIsIFZp
c2libGUpOwotICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzQ3VzdG9tQWN0aW9uQW5k
R2V0TmV4dChpdGVyLCAiQ3VzdG9tIF9Ub2dnbGUgQWN0aW9uIiwgVmlzaWJsZSB8IEVuYWJsZWQg
fCBDaGVja2VkKTsKLSAgICAgICAgZ19hc3NlcnQoIWl0ZXIpOwotCi0gICAgICAgIHF1aXRNYWlu
TG9vcCgpOwotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLX07Ci0KLXN0YXRpYyB2b2lk
IHRlc3RDb250ZXh0TWVudUN1c3RvbU1lbnUoQ29udGV4dE1lbnVDdXN0b21GdWxsVGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxN
YXBwZWQoKTsKLQotICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keT5XZWJLaXRHVEsrIENv
bnRleHQgbWVudSB0ZXN0czwvYm9keT48L2h0bWw+IiwgImZpbGU6Ly8vIik7Ci0gICAgdGVzdC0+
d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBbmRX
YWl0VW50aWxGaW5pc2hlZCgpOwotfQotCi1jbGFzcyBDb250ZXh0TWVudURpc2FibGVkVGVzdDog
cHVibGljIENvbnRleHRNZW51VGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklY
VFVSRShDb250ZXh0TWVudURpc2FibGVkVGVzdCk7Ci0KLSAgICBlbnVtIERpc2FibGVNb2RlIHsK
LSAgICAgICAgSWdub3JlQ2xpY2tzLAotICAgICAgICBJZ25vcmVEZWZhdWx0TWVudQotICAgIH07
Ci0KLSAgICBzdGF0aWMgZ2Jvb2xlYW4gYnV0dG9uUHJlc3NFdmVudENhbGxiYWNrKEd0a1dpZGdl
dCosIEdka0V2ZW50KiBldmVudCwgQ29udGV4dE1lbnVEaXNhYmxlZFRlc3QqIHRlc3QpCi0gICAg
ewotICAgICAgICBpZiAoZXZlbnQtPmJ1dHRvbi5idXR0b24gIT0gMykKLSAgICAgICAgICAgIHJl
dHVybiBGQUxTRTsKLSAgICAgICAgcmV0dXJuIHRlc3QtPnJpZ2h0QnV0dG9uUHJlc3NlZCgpOwot
ICAgIH0KLQotICAgIENvbnRleHRNZW51RGlzYWJsZWRUZXN0KCkKLSAgICAgICAgOiBtX2Rpc2Fi
bGVNb2RlKElnbm9yZUNsaWNrcykKLSAgICB7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93
ZWJWaWV3LCAiYnV0dG9uLXByZXNzLWV2ZW50IiwgR19DQUxMQkFDSyhidXR0b25QcmVzc0V2ZW50
Q2FsbGJhY2spLCB0aGlzKTsKLSAgICB9Ci0KLSAgICBib29sIGNvbnRleHRNZW51KFdlYktpdENv
bnRleHRNZW51KiBjb250ZXh0TWVudSwgR2RrRXZlbnQqLCBXZWJLaXRIaXRUZXN0UmVzdWx0KikK
LSAgICB7Ci0gICAgICAgIGlmIChtX2Rpc2FibGVNb2RlID09IElnbm9yZUNsaWNrcykKLSAgICAg
ICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHF1aXRNYWluTG9vcCgpOwotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGJv
b2wgcmlnaHRCdXR0b25QcmVzc2VkKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2Rpc2FibGVNb2Rl
ID09IElnbm9yZUNsaWNrcykgewotICAgICAgICAgICAgcXVpdE1haW5Mb29wQWZ0ZXJQcm9jZXNz
aW5nUGVuZGluZ0V2ZW50cygpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIERpc2FibGVNb2RlIG1fZGlzYWJs
ZU1vZGU7Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0Q29udGV4dE1lbnVEaXNhYmxlTWVudShDb250
ZXh0TWVudURpc2FibGVkVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5z
aG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKLQotICAgIHRlc3QtPmxvYWRIdG1sKCI8
aHRtbD48Ym9keT5XZWJLaXRHVEsrIENvbnRleHQgbWVudSB0ZXN0czwvYm9keT48L2h0bWw+Iiwg
ImZpbGU6Ly8vIik7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICB0
ZXN0LT5tX2Rpc2FibGVNb2RlID0gQ29udGV4dE1lbnVEaXNhYmxlZFRlc3Q6Oklnbm9yZURlZmF1
bHRNZW51OwotICAgIHRlc3QtPnNob3dDb250ZXh0TWVudUFuZFdhaXRVbnRpbEZpbmlzaGVkKCk7
Ci0KLSAgICB0ZXN0LT5tX2Rpc2FibGVNb2RlID0gQ29udGV4dE1lbnVEaXNhYmxlZFRlc3Q6Okln
bm9yZUNsaWNrczsKLSAgICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBbmRXYWl0VW50aWxGaW5pc2hl
ZCgpOwotfQotCi1jbGFzcyBDb250ZXh0TWVudVN1Ym1lbnVUZXN0OiBwdWJsaWMgQ29udGV4dE1l
bnVUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKENvbnRleHRNZW51
U3VibWVudVRlc3QpOwotCi0gICAgYm9vbCBjb250ZXh0TWVudShXZWJLaXRDb250ZXh0TWVudSog
Y29udGV4dE1lbnUsIEdka0V2ZW50KiwgV2ViS2l0SGl0VGVzdFJlc3VsdCopCi0gICAgewotICAg
ICAgICBzaXplX3QgbWVudVNpemUgPSB3ZWJraXRfY29udGV4dF9tZW51X2dldF9uX2l0ZW1zKGNv
bnRleHRNZW51KTsKLSAgICAgICAgR1JlZlB0cjxXZWJLaXRDb250ZXh0TWVudT4gc3ViTWVudSA9
IGFkb3B0R1JlZih3ZWJraXRfY29udGV4dF9tZW51X25ldygpKTsKLSAgICAgICAgd2Via2l0X2Nv
bnRleHRfbWVudV9hcHBlbmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9u
ZXdfd2l0aF9zdWJtZW51KCJTdWJNZW51SXRlbSIsIHN1Yk1lbnUuZ2V0KCkpKTsKLSAgICAgICAg
Z19hc3NlcnRfY21wdWludCh3ZWJraXRfY29udGV4dF9tZW51X2dldF9uX2l0ZW1zKGNvbnRleHRN
ZW51KSwgPT0sIG1lbnVTaXplICsgMSk7Ci0KLSAgICAgICAgR1JlZlB0cjxXZWJLaXRDb250ZXh0
TWVudT4gc3ViTWVudTIgPSBhZG9wdEdSZWYod2Via2l0X2NvbnRleHRfbWVudV9uZXcoKSk7Ci0g
ICAgICAgIEdSZWZQdHI8V2ViS2l0Q29udGV4dE1lbnVJdGVtPiBpdGVtID0gd2Via2l0X2NvbnRl
eHRfbWVudV9pdGVtX25ld19mcm9tX3N0b2NrX2FjdGlvbihXRUJLSVRfQ09OVEVYVF9NRU5VX0FD
VElPTl9PUEVOX0xJTkspOwotCi0gICAgICAgIC8vIEFkZCBzdWJtZW51IHRvIG5ld2x5IGNyZWF0
ZWQgaXRlbS4KLSAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRf
c3VibWVudShpdGVtLmdldCgpKSk7Ci0gICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9z
ZXRfc3VibWVudShpdGVtLmdldCgpLCBzdWJNZW51Mi5nZXQoKSk7Ci0gICAgICAgIGdfYXNzZXJ0
KHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRfc3VibWVudShpdGVtLmdldCgpKSA9PSBzdWJN
ZW51Mi5nZXQoKSk7Ci0KLSAgICAgICAgLy8gUmVwbGFjZSB0aGUgc3VibWVudS4KLSAgICAgICAg
d2Via2l0X2NvbnRleHRfbWVudV9pdGVtX3NldF9zdWJtZW51KGl0ZW0uZ2V0KCksIDApOwotICAg
ICAgICBnX2Fzc2VydCghd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9zdWJtZW51KGl0ZW0u
Z2V0KCkpKTsKLQotICAgICAgICAvLyBUcnkgdG8gYWRkIGEgc3VibWVudSBhbHJlYWR5IGFkZGVk
IHRvIGFub3RoZXIgaXRlbS4KLSAgICAgICAgcmVtb3ZlTG9nRmF0YWxGbGFnKEdfTE9HX0xFVkVM
X1dBUk5JTkcpOwotICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fc2V0X3N1Ym1lbnUo
aXRlbS5nZXQoKSwgc3ViTWVudS5nZXQoKSk7Ci0gICAgICAgIGFkZExvZ0ZhdGFsRmxhZyhHX0xP
R19MRVZFTF9XQVJOSU5HKTsKLSAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9jb250ZXh0X21lbnVf
aXRlbV9nZXRfc3VibWVudShpdGVtLmdldCgpKSk7Ci0KLSAgICAgICAgLy8gQSByZW1vdmVkIHN1
Ym1lbnUgc2hvdWxkbid0IGhhdmUgYSBwYXJlbnQuCi0gICAgICAgIHdlYmtpdF9jb250ZXh0X21l
bnVfaXRlbV9zZXRfc3VibWVudShpdGVtLmdldCgpLCBzdWJNZW51Mi5nZXQoKSk7Ci0gICAgICAg
IGdfYXNzZXJ0KHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRfc3VibWVudShpdGVtLmdldCgp
KSA9PSBzdWJNZW51Mi5nZXQoKSk7Ci0KLSAgICAgICAgcXVpdE1haW5Mb29wKCk7Ci0KLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotfTsKLQotc3RhdGljIHZvaWQgdGVzdENvbnRleHRNZW51
U3ViTWVudShDb250ZXh0TWVudVN1Ym1lbnVUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewot
ICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOwotCi0gICAgdGVzdC0+
bG9hZEh0bWwoIjxodG1sPjxib2R5PldlYktpdEdUSysgQ29udGV4dCBtZW51IHRlc3RzPC9ib2R5
PjwvaHRtbD4iLCAiZmlsZTovLy8iKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQo
KTsKLQotICAgIHRlc3QtPnNob3dDb250ZXh0TWVudUFuZFdhaXRVbnRpbEZpbmlzaGVkKCk7Ci19
Ci0KLWNsYXNzIENvbnRleHRNZW51RGlzbWlzc2VkVGVzdDogcHVibGljIENvbnRleHRNZW51VGVz
dCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShDb250ZXh0TWVudURpc21p
c3NlZFRlc3QpOwotCi0gICAgQ29udGV4dE1lbnVEaXNtaXNzZWRUZXN0KCkKLSAgICAgICAgOiBt
X2Rpc21pc3NlZChmYWxzZSkKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBjb250ZXh0TWVudShX
ZWJLaXRDb250ZXh0TWVudSogY29udGV4dE1lbnUsIEdka0V2ZW50KiwgV2ViS2l0SGl0VGVzdFJl
c3VsdCopCi0gICAgewotICAgICAgICBxdWl0TWFpbkxvb3AoKTsKLSAgICAgICAgLy8gU2hvdyB0
aGUgZGVmYXVsdCBjb250ZXh0IG1lbnUuCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICB2b2lkIGNvbnRleHRNZW51RGlzbWlzc2VkKCkKLSAgICB7Ci0gICAgICAgIG1fZGlzbWlz
c2VkID0gdHJ1ZTsKLSAgICAgICAgQ29udGV4dE1lbnVUZXN0Ojpjb250ZXh0TWVudURpc21pc3Nl
ZCgpOwotICAgIH0KLQotICAgIHZvaWQgc2hvd0NvbnRleHRNZW51QW5kV2FpdFVudGlsRGlzbWlz
c2VkKCkKLSAgICB7Ci0gICAgICAgIHNob3dDb250ZXh0TWVudUFuZFdhaXRVbnRpbEZpbmlzaGVk
KCk7Ci0gICAgICAgIGRpc21pc3NDb250ZXh0TWVudUFuZFdhaXRVbnRpbEZpbmlzaGVkKCk7Ci0g
ICAgfQotCi0gICAgYm9vbCBtX2Rpc21pc3NlZDsKLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RDb250
ZXh0TWVudURpc21pc3NlZChDb250ZXh0TWVudURpc21pc3NlZFRlc3QqIHRlc3QsIGdjb25zdHBv
aW50ZXIpCi17Ci0gICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7Ci0K
LSAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHk+V2ViS2l0R1RLKyBDb250ZXh0IG1lbnUg
dGVzdHM8L2JvZHk+PC9odG1sPiIsICJmaWxlOi8vLyIpOwotICAgIHRlc3QtPndhaXRVbnRpbExv
YWRGaW5pc2hlZCgpOwotCi0gICAgdGVzdC0+c2hvd0NvbnRleHRNZW51QW5kV2FpdFVudGlsRGlz
bWlzc2VkKCk7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV9kaXNtaXNzZWQpOwotfQotCi1jbGFzcyBD
b250ZXh0TWVudVNtYXJ0U2VwYXJhdG9yc1Rlc3Q6IHB1YmxpYyBDb250ZXh0TWVudVRlc3Qgewot
cHVibGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoQ29udGV4dE1lbnVTbWFydFNlcGFy
YXRvcnNUZXN0KTsKLQotICAgIGJvb2wgY29udGV4dE1lbnUoV2ViS2l0Q29udGV4dE1lbnUqIGNv
bnRleHRNZW51LCBHZGtFdmVudCosIFdlYktpdEhpdFRlc3RSZXN1bHQqKQotICAgIHsKLSAgICAg
ICAgd2Via2l0X2NvbnRleHRfbWVudV9yZW1vdmVfYWxsKGNvbnRleHRNZW51KTsKLQotICAgICAg
ICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRf
bWVudV9pdGVtX25ld19zZXBhcmF0b3IoKSk7Ci0gICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVf
YXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X3NlcGFyYXRv
cigpKTsKLSAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBlbmQoY29udGV4dE1lbnUsIHdl
YmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfZnJvbV9zdG9ja19hY3Rpb24oV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fR09fQkFDSykpOwotICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2Fw
cGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19mcm9tX3N0b2Nr
X2FjdGlvbihXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9HT19GT1JXQVJEKSk7Ci0gICAgICAg
IHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9t
ZW51X2l0ZW1fbmV3X3NlcGFyYXRvcigpKTsKLSAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9h
cHBlbmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfc2VwYXJhdG9y
KCkpOwotICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Vi
a2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19mcm9tX3N0b2NrX2FjdGlvbihXRUJLSVRfQ09OVEVY
VF9NRU5VX0FDVElPTl9DT1BZKSk7Ci0gICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5k
KGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X3NlcGFyYXRvcigpKTsK
LSAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBlbmQoY29udGV4dE1lbnUsIHdlYmtpdF9j
b250ZXh0X21lbnVfaXRlbV9uZXdfZnJvbV9zdG9ja19hY3Rpb24oV0VCS0lUX0NPTlRFWFRfTUVO
VV9BQ1RJT05fSU5TUEVDVF9FTEVNRU5UKSk7Ci0gICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVf
YXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X3NlcGFyYXRv
cigpKTsKLSAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBlbmQoY29udGV4dE1lbnUsIHdl
YmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfc2VwYXJhdG9yKCkpOwotCi0gICAgICAgIHF1aXRN
YWluTG9vcCgpOwotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBHdGtNZW51
KiBzaG93Q29udGV4dE1lbnVBbmRHZXRHdGtNZW51KCkKLSAgICB7Ci0gICAgICAgIHNob3dDb250
ZXh0TWVudUFuZFdhaXRVbnRpbEZpbmlzaGVkKCk7Ci0gICAgICAgIHJldHVybiBnZXRQb3B1cE1l
bnUoKTsKLSAgICB9Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0Q29udGV4dE1lbnVTbWFydFNlcGFy
YXRvcnMoQ29udGV4dE1lbnVTbWFydFNlcGFyYXRvcnNUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVy
KQotewotICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOwotCi0gICAg
dGVzdC0+bG9hZEh0bWwoIjxodG1sPjxib2R5PldlYktpdEdUSysgQ29udGV4dCBtZW51IHRlc3Rz
PC9ib2R5PjwvaHRtbD4iLCAiZmlsZTovLy8iKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmlu
aXNoZWQoKTsKLQotICAgIEd0a01lbnUqIG1lbnUgPSB0ZXN0LT5zaG93Q29udGV4dE1lbnVBbmRH
ZXRHdGtNZW51KCk7Ci0gICAgZ19hc3NlcnQobWVudSk7Ci0KLSAgICAvLyBMZWFkaW5nIGFuZCB0
cmFpbGluZyBzZXBhcmF0b3JzIGFyZSBub3QgYWRkZWQgdG8gdGhlIGNvbnRleHQgbWVudS4KLSAg
ICBHT3duUHRyPEdMaXN0PiBtZW51SXRlbXMoZ3RrX2NvbnRhaW5lcl9nZXRfY2hpbGRyZW4oR1RL
X0NPTlRBSU5FUihtZW51KSkpOwotICAgIGdfYXNzZXJ0X2NtcHVpbnQoZ19saXN0X2xlbmd0aCht
ZW51SXRlbXMuZ2V0KCkpLCA9PSwgNik7Ci0gICAgR3RrV2lkZ2V0KiBpdGVtID0gR1RLX1dJREdF
VChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCAwKSk7Ci0gICAgZ19hc3NlcnQoIUdU
S19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUo
aXRlbSkpOwotICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMu
Z2V0KCksIDEpKTsKLSAgICBnX2Fzc2VydCghR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRl
bSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7Ci0gICAgaXRlbSA9IEdUS19XSURH
RVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgMikpOwotICAgIGdfYXNzZXJ0KEdU
S19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUo
aXRlbSkpOwotICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMu
Z2V0KCksIDMpKTsKLSAgICBnX2Fzc2VydCghR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRl
bSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7Ci0gICAgaXRlbSA9IEdUS19XSURH
RVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgNCkpOwotICAgIGdfYXNzZXJ0KEdU
S19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUo
aXRlbSkpOwotICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMu
Z2V0KCksIDUpKTsKLSAgICBnX2Fzc2VydCghR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRl
bSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7Ci0KLSAgICAvLyBIaWRpbmcgYSBt
ZW51IGl0ZW0gYmV0d2VlbiB0d28gc2VwYXJhdG9ycyBoaWRlcyB0aGUgZm9sbG93aW5nIHNlcGFy
YXRvci4KLSAgICBHdGtBY3Rpb24qIGFjdGlvbiA9IGd0a19hY3RpdmF0YWJsZV9nZXRfcmVsYXRl
ZF9hY3Rpb24oR1RLX0FDVElWQVRBQkxFKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCks
IDMpKSk7Ci0gICAgZ3RrX2FjdGlvbl9zZXRfdmlzaWJsZShhY3Rpb24sIEZBTFNFKTsKLSAgICBt
ZW51SXRlbXMuc2V0KGd0a19jb250YWluZXJfZ2V0X2NoaWxkcmVuKEdUS19DT05UQUlORVIobWVu
dSkpKTsKLSAgICBnX2Fzc2VydF9jbXB1aW50KGdfbGlzdF9sZW5ndGgobWVudUl0ZW1zLmdldCgp
KSwgPT0sIDYpOwotICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRl
bXMuZ2V0KCksIDApKTsKLSAgICBnX2Fzc2VydCghR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0o
aXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7Ci0gICAgaXRlbSA9IEdUS19X
SURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgMSkpOwotICAgIGdfYXNzZXJ0
KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0X2dldF92aXNp
YmxlKGl0ZW0pKTsKLSAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0
ZW1zLmdldCgpLCAyKSk7Ci0gICAgZ19hc3NlcnQoR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0o
aXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7Ci0gICAgaXRlbSA9IEdUS19X
SURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgMykpOwotICAgIGdfYXNzZXJ0
KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAmJiAhZ3RrX3dpZGdldF9nZXRfdmlz
aWJsZShpdGVtKSk7Ci0gICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJ
dGVtcy5nZXQoKSwgNCkpOwotICAgIGdfYXNzZXJ0KEdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVN
KGl0ZW0pICYmICFndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKLSAgICBpdGVtID0gR1RL
X1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCA1KSk7Ci0gICAgZ19hc3Nl
cnQoIUdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zp
c2libGUoaXRlbSkpOwotICAgIGd0a19hY3Rpb25fc2V0X3Zpc2libGUoYWN0aW9uLCBUUlVFKTsK
LQotICAgIC8vIFNob3dpbmcgYW4gYWN0aW9uIGJldHdlZW4gdHdvIHNlcGFyYXRvcnMgc2hvd3Mg
dGhlIGhpZGRlbiBzZXBhcmF0b3IuCi0gICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9k
YXRhKG1lbnVJdGVtcy5nZXQoKSwgMCkpOwotICAgIGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9S
X01FTlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKLSAgICBp
dGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCAxKSk7Ci0g
ICAgZ19hc3NlcnQoIUdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRn
ZXRfZ2V0X3Zpc2libGUoaXRlbSkpOwotICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhf
ZGF0YShtZW51SXRlbXMuZ2V0KCksIDIpKTsKLSAgICBnX2Fzc2VydChHVEtfSVNfU0VQQVJBVE9S
X01FTlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKLSAgICBp
dGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCAzKSk7Ci0g
ICAgZ19hc3NlcnQoIUdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRn
ZXRfZ2V0X3Zpc2libGUoaXRlbSkpOwotICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhf
ZGF0YShtZW51SXRlbXMuZ2V0KCksIDQpKTsKLSAgICBnX2Fzc2VydChHVEtfSVNfU0VQQVJBVE9S
X01FTlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKLSAgICBp
dGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCA1KSk7Ci0g
ICAgZ19hc3NlcnQoIUdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRn
ZXRfZ2V0X3Zpc2libGUoaXRlbSkpOwotCi0gICAgLy8gVHJhaWxpbmcgc2VwYXJhdG9ycyBhcmUg
aGlkZGVuIHRvby4KLSAgICBhY3Rpb24gPSBndGtfYWN0aXZhdGFibGVfZ2V0X3JlbGF0ZWRfYWN0
aW9uKEdUS19BQ1RJVkFUQUJMRShnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCA1KSkp
OwotICAgIGd0a19hY3Rpb25fc2V0X3Zpc2libGUoYWN0aW9uLCBGQUxTRSk7Ci0gICAgbWVudUl0
ZW1zLnNldChndGtfY29udGFpbmVyX2dldF9jaGlsZHJlbihHVEtfQ09OVEFJTkVSKG1lbnUpKSk7
Ci0gICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwg
MCkpOwotICAgIGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAmJiBn
dGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKLSAgICBpdGVtID0gR1RLX1dJREdFVChnX2xp
c3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCAxKSk7Ci0gICAgZ19hc3NlcnQoIUdUS19JU19T
RVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkp
OwotICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCks
IDIpKTsKLSAgICBnX2Fzc2VydChHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAmJiBn
dGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKLSAgICBpdGVtID0gR1RLX1dJREdFVChnX2xp
c3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCAzKSk7Ci0gICAgZ19hc3NlcnQoIUdUS19JU19T
RVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkp
OwotICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCks
IDQpKTsKLSAgICBnX2Fzc2VydChHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAmJiAh
Z3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7Ci0gICAgaXRlbSA9IEdUS19XSURHRVQoZ19s
aXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgNSkpOwotICAgIGdfYXNzZXJ0KCFHVEtfSVNf
U0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAmJiAhZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVt
KSk7Ci19Ci0KLXZvaWQgYmVmb3JlQWxsKCkKLXsKLSAgICBDb250ZXh0TWVudURlZmF1bHRUZXN0
OjphZGQoIldlYktpdFdlYlZpZXciLCAiZGVmYXVsdC1tZW51IiwgdGVzdENvbnRleHRNZW51RGVm
YXVsdE1lbnUpOwotICAgIENvbnRleHRNZW51Q3VzdG9tVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3
IiwgInBvcHVsYXRlLW1lbnUiLCB0ZXN0Q29udGV4dE1lbnVQb3B1bGF0ZU1lbnUpOwotICAgIENv
bnRleHRNZW51Q3VzdG9tRnVsbFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJjdXN0b20tbWVu
dSIsIHRlc3RDb250ZXh0TWVudUN1c3RvbU1lbnUpOwotICAgIENvbnRleHRNZW51RGlzYWJsZWRU
ZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiZGlzYWJsZS1tZW51IiwgdGVzdENvbnRleHRNZW51
RGlzYWJsZU1lbnUpOwotICAgIENvbnRleHRNZW51U3VibWVudVRlc3Q6OmFkZCgiV2ViS2l0V2Vi
VmlldyIsICJzdWJtZW51IiwgdGVzdENvbnRleHRNZW51U3ViTWVudSk7Ci0gICAgQ29udGV4dE1l
bnVEaXNtaXNzZWRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAibWVudS1kaXNtaXNzZWQiLCB0
ZXN0Q29udGV4dE1lbnVEaXNtaXNzZWQpOwotICAgIENvbnRleHRNZW51U21hcnRTZXBhcmF0b3Jz
VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInNtYXJ0LXNlcGFyYXRvcnMiLCB0ZXN0Q29udGV4
dE1lbnVTbWFydFNlcGFyYXRvcnMpOwotfQotCi12b2lkIGFmdGVyQWxsKCkKLXsKLX0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RDb29raWVN
YW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RD
b29raWVNYW5hZ2VyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWRjNmI1Yi4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0
Q29va2llTWFuYWdlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMzEgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNp
bmNsdWRlICJXZWJLaXRUZXN0U2VydmVyLmgiCi0jaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKLSNp
bmNsdWRlIDxnbGliL2dzdGRpby5oPgotCi1zdGF0aWMgV2ViS2l0VGVzdFNlcnZlcioga1NlcnZl
cjsKLXN0YXRpYyBjaGFyKiBrVGVtcERpcmVjdG9yeTsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGtG
aXJzdFBhcnR5RG9tYWluID0gIjEyNy4wLjAuMSI7Ci1zdGF0aWMgY29uc3QgY2hhcioga1RoaXJk
UGFydHlEb21haW4gPSAibG9jYWxob3N0IjsKLXN0YXRpYyBjb25zdCBjaGFyKiBrSW5kZXhIdG1s
Rm9ybWF0ID0KLSAgICAiPGh0bWw+PGJvZHk+IgotICAgICIgPHA+V2ViS2l0R1RLKyBDb29raWUg
TWFuYWdlciB0ZXN0PC9wPiIKLSAgICAiIDxpbWcgc3JjPSdodHRwOi8vbG9jYWxob3N0OiV1L2lt
YWdlLnBuZycgd2lkdGg9NSBoZWlnaHQ9NT48L2ltZz4iCi0gICAgIjwvYm9keT48L2h0bWw+IjsK
LQotY2xhc3MgQ29va2llTWFuYWdlclRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7Ci1wdWJsaWM6
Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShDb29raWVNYW5hZ2VyVGVzdCk7Ci0KLSAgICBz
dGF0aWMgdm9pZCBjb29raWVzQ2hhbmdlZENhbGxiYWNrKFdlYktpdENvb2tpZU1hbmFnZXIqLCBD
b29raWVNYW5hZ2VyVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHRlc3QtPm1fY29va2llc0No
YW5nZWQgPSB0cnVlOwotICAgICAgICBpZiAodGVzdC0+bV9maW5pc2hMb29wV2hlbkNvb2tpZXND
aGFuZ2UpCi0gICAgICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOwot
ICAgIH0KLQotICAgIENvb2tpZU1hbmFnZXJUZXN0KCkKLSAgICAgICAgOiBXZWJWaWV3VGVzdCgp
Ci0gICAgICAgICwgbV9jb29raWVNYW5hZ2VyKHdlYmtpdF93ZWJfY29udGV4dF9nZXRfY29va2ll
X21hbmFnZXIod2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KG1fd2ViVmlldykpKQotICAgICAg
ICAsIG1fYWNjZXB0UG9saWN5KFdFQktJVF9DT09LSUVfUE9MSUNZX0FDQ0VQVF9OT19USElSRF9Q
QVJUWSkKLSAgICAgICAgLCBtX2RvbWFpbnMoMCkKLSAgICAgICAgLCBtX2Nvb2tpZXNDaGFuZ2Vk
KGZhbHNlKQotICAgICAgICAsIG1fZmluaXNoTG9vcFdoZW5Db29raWVzQ2hhbmdlKGZhbHNlKQot
ICAgIHsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX2Nvb2tpZU1hbmFnZXIsICJjaGFuZ2Vk
IiwgR19DQUxMQkFDSyhjb29raWVzQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgfQotCi0g
ICAgfkNvb2tpZU1hbmFnZXJUZXN0KCkKLSAgICB7Ci0gICAgICAgIGdfc3RyZnJlZXYobV9kb21h
aW5zKTsKLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fY29v
a2llTWFuYWdlciwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7Ci0gICAg
ICAgIGlmIChtX2Nvb2tpZXNUZXh0RmlsZSkKLSAgICAgICAgICAgIGdfdW5saW5rKG1fY29va2ll
c1RleHRGaWxlLmdldCgpKTsKLSAgICAgICAgaWYgKG1fY29va2llc1NRTGl0ZUZpbGUpCi0gICAg
ICAgICAgICBnX3VubGluayhtX2Nvb2tpZXNTUUxpdGVGaWxlLmdldCgpKTsKLSAgICB9Ci0KLSAg
ICB2b2lkIHNldFBlcnNpc3RlbnRTdG9yYWdlKFdlYktpdENvb2tpZVBlcnNpc3RlbnRTdG9yYWdl
IHN0b3JhZ2UpCi0gICAgewotICAgICAgICBjb25zdCBjaGFyKiBmaWxlbmFtZSA9IDA7Ci0gICAg
ICAgIHN3aXRjaCAoc3RvcmFnZSkgewotICAgICAgICBjYXNlIFdFQktJVF9DT09LSUVfUEVSU0lT
VEVOVF9TVE9SQUdFX1RFWFQ6Ci0gICAgICAgICAgICBpZiAoIW1fY29va2llc1RleHRGaWxlKQot
ICAgICAgICAgICAgICAgIG1fY29va2llc1RleHRGaWxlLnNldChnX2J1aWxkX2ZpbGVuYW1lKGtU
ZW1wRGlyZWN0b3J5LCAiY29va2llcy50eHQiLCBOVUxMKSk7Ci0gICAgICAgICAgICBmaWxlbmFt
ZSA9IG1fY29va2llc1RleHRGaWxlLmdldCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgV0VCS0lUX0NPT0tJRV9QRVJTSVNURU5UX1NUT1JBR0VfU1FMSVRFOgotICAgICAgICAg
ICAgaWYgKCFtX2Nvb2tpZXNTUUxpdGVGaWxlKQotICAgICAgICAgICAgICAgIG1fY29va2llc1NR
TGl0ZUZpbGUuc2V0KGdfYnVpbGRfZmlsZW5hbWUoa1RlbXBEaXJlY3RvcnksICJjb29raWVzLmRi
IiwgTlVMTCkpOwotICAgICAgICAgICAgZmlsZW5hbWUgPSBtX2Nvb2tpZXNTUUxpdGVGaWxlLmdl
dCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBn
X2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAgICAgICB9Ci0gICAgICAgIHdlYmtpdF9jb29raWVf
bWFuYWdlcl9zZXRfcGVyc2lzdGVudF9zdG9yYWdlKG1fY29va2llTWFuYWdlciwgZmlsZW5hbWUs
IHN0b3JhZ2UpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGdldEFjY2VwdFBvbGljeVJlYWR5
Q2FsbGJhY2soR09iamVjdCogb2JqZWN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIg
dXNlckRhdGEpCi0gICAgewotICAgICAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgICAg
IFdlYktpdENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kgPSB3ZWJraXRfY29va2llX21hbmFnZXJf
Z2V0X2FjY2VwdF9wb2xpY3lfZmluaXNoKFdFQktJVF9DT09LSUVfTUFOQUdFUihvYmplY3QpLCBy
ZXN1bHQsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7
Ci0KLSAgICAgICAgQ29va2llTWFuYWdlclRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxDb29raWVN
YW5hZ2VyVGVzdCo+KHVzZXJEYXRhKTsKLSAgICAgICAgdGVzdC0+bV9hY2NlcHRQb2xpY3kgPSBw
b2xpY3k7Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7Ci0gICAg
fQotCi0gICAgV2ViS2l0Q29va2llQWNjZXB0UG9saWN5IGdldEFjY2VwdFBvbGljeSgpCi0gICAg
ewotICAgICAgICBtX2FjY2VwdFBvbGljeSA9IFdFQktJVF9DT09LSUVfUE9MSUNZX0FDQ0VQVF9O
T19USElSRF9QQVJUWTsKLSAgICAgICAgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9hY2NlcHRf
cG9saWN5KG1fY29va2llTWFuYWdlciwgMCwgZ2V0QWNjZXB0UG9saWN5UmVhZHlDYWxsYmFjaywg
dGhpcyk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLQotICAgICAgICBy
ZXR1cm4gbV9hY2NlcHRQb2xpY3k7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRBY2NlcHRQb2xpY3ko
V2ViS2l0Q29va2llQWNjZXB0UG9saWN5IHBvbGljeSkKLSAgICB7Ci0gICAgICAgIHdlYmtpdF9j
b29raWVfbWFuYWdlcl9zZXRfYWNjZXB0X3BvbGljeShtX2Nvb2tpZU1hbmFnZXIsIHBvbGljeSk7
Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgZ2V0RG9tYWluc1JlYWR5Q2FsbGJhY2soR09iamVj
dCogb2JqZWN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEpCi0gICAg
ewotICAgICAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgICAgIGNoYXIqKiBkb21haW5z
ID0gd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9kb21haW5zX3dpdGhfY29va2llc19maW5pc2go
V0VCS0lUX0NPT0tJRV9NQU5BR0VSKG9iamVjdCksIHJlc3VsdCwgJmVycm9yLm91dFB0cigpKTsK
LSAgICAgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKLQotICAgICAgICBDb29raWVNYW5hZ2Vy
VGVzdCogdGVzdCA9IHN0YXRpY19jYXN0PENvb2tpZU1hbmFnZXJUZXN0Kj4odXNlckRhdGEpOwot
ICAgICAgICB0ZXN0LT5tX2RvbWFpbnMgPSBkb21haW5zOwotICAgICAgICBnX21haW5fbG9vcF9x
dWl0KHRlc3QtPm1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIGNoYXIqKiBnZXREb21haW5zKCkK
LSAgICB7Ci0gICAgICAgIGdfc3RyZnJlZXYobV9kb21haW5zKTsKLSAgICAgICAgbV9kb21haW5z
ID0gMDsKLSAgICAgICAgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9kb21haW5zX3dpdGhfY29v
a2llcyhtX2Nvb2tpZU1hbmFnZXIsIDAsIGdldERvbWFpbnNSZWFkeUNhbGxiYWNrLCB0aGlzKTsK
LSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotCi0gICAgICAgIHJldHVybiBt
X2RvbWFpbnM7Ci0gICAgfQotCi0gICAgYm9vbCBoYXNEb21haW4oY29uc3QgY2hhciogZG9tYWlu
KQotICAgIHsKLSAgICAgICAgaWYgKCFtX2RvbWFpbnMpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IG1fZG9tYWluc1tpXTsgKytpKQotICAg
ICAgICAgICAgaWYgKGdfc3RyX2VxdWFsKG1fZG9tYWluc1tpXSwgZG9tYWluKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IHZvaWQgZGVsZXRlQ29va2llc0ZvckRvbWFpbihjb25zdCBjaGFyKiBkb21haW4pCi0gICAgewot
ICAgICAgICB3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZXNfZm9yX2RvbWFpbiht
X2Nvb2tpZU1hbmFnZXIsIGRvbWFpbik7Ci0gICAgfQotCi0gICAgdm9pZCBkZWxldGVBbGxDb29r
aWVzKCkKLSAgICB7Ci0gICAgICAgIHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfYWxsX2Nv
b2tpZXMobV9jb29raWVNYW5hZ2VyKTsKLSAgICB9Ci0KLSAgICB2b2lkIHdhaXRVbnRpbENvb2tp
ZXNDaGFuZ2VkKCkKLSAgICB7Ci0gICAgICAgIG1fY29va2llc0NoYW5nZWQgPSBmYWxzZTsKLSAg
ICAgICAgbV9maW5pc2hMb29wV2hlbkNvb2tpZXNDaGFuZ2UgPSB0cnVlOwotICAgICAgICBnX21h
aW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Ci0gICAgICAgIG1fZmluaXNoTG9vcFdoZW5Db29raWVz
Q2hhbmdlID0gZmFsc2U7Ci0gICAgfQotCi0gICAgV2ViS2l0Q29va2llTWFuYWdlciogbV9jb29r
aWVNYW5hZ2VyOwotICAgIFdlYktpdENvb2tpZUFjY2VwdFBvbGljeSBtX2FjY2VwdFBvbGljeTsK
LSAgICBjaGFyKiogbV9kb21haW5zOwotICAgIGJvb2wgbV9jb29raWVzQ2hhbmdlZDsKLSAgICBi
b29sIG1fZmluaXNoTG9vcFdoZW5Db29raWVzQ2hhbmdlOwotICAgIEdPd25QdHI8Y2hhcj4gbV9j
b29raWVzVGV4dEZpbGU7Ci0gICAgR093blB0cjxjaGFyPiBtX2Nvb2tpZXNTUUxpdGVGaWxlOwot
fTsKLQotc3RhdGljIHZvaWQgdGVzdENvb2tpZU1hbmFnZXJBY2NlcHRQb2xpY3koQ29va2llTWFu
YWdlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgLy8gRGVmYXVsdCBwb2xpY3kg
aXMgTk9fVEhJUkRfUEFSVFkuCi0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPmdldEFjY2VwdFBv
bGljeSgpLCA9PSwgV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX05PX1RISVJEX1BBUlRZKTsK
LSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbmRleC5odG1sIiku
ZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBjaGFyKiog
ZG9tYWlucyA9IHRlc3QtPmdldERvbWFpbnMoKTsKLSAgICBnX2Fzc2VydChkb21haW5zKTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aChkb21haW5zKSwgPT0sIDEpOwotICAgIGdf
YXNzZXJ0X2NtcHN0cihkb21haW5zWzBdLCA9PSwga0ZpcnN0UGFydHlEb21haW4pOwotICAgIHRl
c3QtPmRlbGV0ZUFsbENvb2tpZXMoKTsKLQotICAgIHRlc3QtPnNldEFjY2VwdFBvbGljeShXRUJL
SVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfQUxXQVlTKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVz
dC0+Z2V0QWNjZXB0UG9saWN5KCksID09LCBXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfQUxX
QVlTKTsKLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbmRleC5o
dG1sIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBk
b21haW5zID0gdGVzdC0+Z2V0RG9tYWlucygpOwotICAgIGdfYXNzZXJ0KGRvbWFpbnMpOwotICAg
IGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKGRvbWFpbnMpLCA9PSwgMik7Ci0gICAgZ19h
c3NlcnQodGVzdC0+aGFzRG9tYWluKGtGaXJzdFBhcnR5RG9tYWluKSk7Ci0gICAgZ19hc3NlcnQo
dGVzdC0+aGFzRG9tYWluKGtUaGlyZFBhcnR5RG9tYWluKSk7Ci0gICAgdGVzdC0+ZGVsZXRlQWxs
Q29va2llcygpOwotCi0gICAgdGVzdC0+c2V0QWNjZXB0UG9saWN5KFdFQktJVF9DT09LSUVfUE9M
SUNZX0FDQ0VQVF9ORVZFUik7Ci0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPmdldEFjY2VwdFBv
bGljeSgpLCA9PSwgV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX05FVkVSKTsKLSAgICB0ZXN0
LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbmRleC5odG1sIikuZGF0YSgpKTsK
LSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBkb21haW5zID0gdGVzdC0+
Z2V0RG9tYWlucygpOwotICAgIGdfYXNzZXJ0KGRvbWFpbnMpOwotICAgIGdfYXNzZXJ0X2NtcGlu
dChnX3N0cnZfbGVuZ3RoKGRvbWFpbnMpLCA9PSwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RD
b29raWVNYW5hZ2VyRGVsZXRlQ29va2llcyhDb29raWVNYW5hZ2VyVGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5zZXRBY2NlcHRQb2xpY3koV0VCS0lUX0NPT0tJRV9QT0xJ
Q1lfQUNDRVBUX0FMV0FZUyk7Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQ
YXRoKCIvaW5kZXguaHRtbCIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlz
aGVkKCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlu
cygpKSwgPT0sIDIpOwotCi0gICAgLy8gRGVsZXRlIGZpcnN0IHBhcnR5IGNvb2tpZXMuCi0gICAg
dGVzdC0+ZGVsZXRlQ29va2llc0ZvckRvbWFpbihrRmlyc3RQYXJ0eURvbWFpbik7Ci0gICAgZ19h
c3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlucygpKSwgPT0sIDEpOwot
Ci0gICAgLy8gRGVsZXRlIHRoaXJkIHBhcnR5IGNvb2tpZXMuCi0gICAgdGVzdC0+ZGVsZXRlQ29v
a2llc0ZvckRvbWFpbihrVGhpcmRQYXJ0eURvbWFpbik7Ci0gICAgZ19hc3NlcnRfY21waW50KGdf
c3Rydl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlucygpKSwgPT0sIDApOwotCi0gICAgdGVzdC0+bG9h
ZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvaW5kZXguaHRtbCIpLmRhdGEoKSk7Ci0gICAg
dGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGdfc3Ry
dl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlucygpKSwgPT0sIDIpOwotCi0gICAgLy8gRGVsZXRlIGFs
bCBjb29raWVzLgotICAgIHRlc3QtPmRlbGV0ZUFsbENvb2tpZXMoKTsKLSAgICBnX2Fzc2VydF9j
bXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0LT5nZXREb21haW5zKCkpLCA9PSwgMCk7Ci19Ci0KLXN0
YXRpYyB2b2lkIHRlc3RDb29raWVNYW5hZ2VyQ29va2llc0NoYW5nZWQoQ29va2llTWFuYWdlclRl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgZ19hc3NlcnQoIXRlc3QtPm1fY29va2ll
c0NoYW5nZWQpOwotICAgIHRlc3QtPnNldEFjY2VwdFBvbGljeShXRUJLSVRfQ09PS0lFX1BPTElD
WV9BQ0NFUFRfQUxXQVlTKTsKLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBh
dGgoIi9pbmRleC5odG1sIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNo
ZWQoKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX2Nvb2tpZXNDaGFuZ2VkKTsKLQotICAgIHRlc3Qt
PmRlbGV0ZUNvb2tpZXNGb3JEb21haW4oa0ZpcnN0UGFydHlEb21haW4pOwotICAgIHRlc3QtPndh
aXRVbnRpbENvb2tpZXNDaGFuZ2VkKCk7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV9jb29raWVzQ2hh
bmdlZCk7Ci0KLSAgICB0ZXN0LT5kZWxldGVBbGxDb29raWVzKCk7Ci0gICAgdGVzdC0+d2FpdFVu
dGlsQ29va2llc0NoYW5nZWQoKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX2Nvb2tpZXNDaGFuZ2Vk
KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdENvb2tpZU1hbmFnZXJQZXJzaXN0ZW50U3RvcmFnZShD
b29raWVNYW5hZ2VyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5zZXRB
Y2NlcHRQb2xpY3koV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX0FMV0FZUyk7Ci0KLSAgICAv
LyBUZXh0IHN0b3JhZ2UgdXNpbmcgYSBuZXcgZmlsZS4KLSAgICB0ZXN0LT5zZXRQZXJzaXN0ZW50
U3RvcmFnZShXRUJLSVRfQ09PS0lFX1BFUlNJU1RFTlRfU1RPUkFHRV9URVhUKTsKLSAgICBjaGFy
KiogZG9tYWlucyA9IHRlc3QtPmdldERvbWFpbnMoKTsKLSAgICBnX2Fzc2VydChkb21haW5zKTsK
LSAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aChkb21haW5zKSwgPT0sIDApOwotCi0g
ICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvaW5kZXguaHRtbCIpLmRh
dGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgZ19hc3NlcnQo
dGVzdC0+bV9jb29raWVzQ2hhbmdlZCk7Ci0gICAgZG9tYWlucyA9IHRlc3QtPmdldERvbWFpbnMo
KTsKLSAgICBnX2Fzc2VydChkb21haW5zKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xl
bmd0aChkb21haW5zKSwgPT0sIDIpOwotCi0KLSAgICAvLyBTUUxpdGUgc3RvcmFnZSB1c2luZyBh
IG5ldyBmaWxlLgotICAgIHRlc3QtPnNldFBlcnNpc3RlbnRTdG9yYWdlKFdFQktJVF9DT09LSUVf
UEVSU0lTVEVOVF9TVE9SQUdFX1NRTElURSk7Ci0gICAgZG9tYWlucyA9IHRlc3QtPmdldERvbWFp
bnMoKTsKLSAgICBnX2Fzc2VydChkb21haW5zKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2
X2xlbmd0aChkb21haW5zKSwgPT0sIDApOwotCi0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5n
ZXRVUklGb3JQYXRoKCIvaW5kZXguaHRtbCIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGls
TG9hZEZpbmlzaGVkKCk7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV9jb29raWVzQ2hhbmdlZCk7Ci0g
ICAgZG9tYWlucyA9IHRlc3QtPmdldERvbWFpbnMoKTsKLSAgICBnX2Fzc2VydChkb21haW5zKTsK
LSAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aChkb21haW5zKSwgPT0sIDIpOwotCi0g
ICAgLy8gVGV4dCBzdG9yYWdlIHVzaW5nIGFuIGV4aXN0aW5nIGZpbGUuCi0gICAgdGVzdC0+c2V0
UGVyc2lzdGVudFN0b3JhZ2UoV0VCS0lUX0NPT0tJRV9QRVJTSVNURU5UX1NUT1JBR0VfVEVYVCk7
Ci0gICAgZG9tYWlucyA9IHRlc3QtPmdldERvbWFpbnMoKTsKLSAgICBnX2Fzc2VydChkb21haW5z
KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aChkb21haW5zKSwgPT0sIDIpOwot
ICAgIHRlc3QtPmRlbGV0ZUFsbENvb2tpZXMoKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2
X2xlbmd0aCh0ZXN0LT5nZXREb21haW5zKCkpLCA9PSwgMCk7Ci0KLSAgICAvLyBTUUxpdGUgc3Rv
cmFnZSB3aXRoIGFuIGV4aXN0aW5nIGZpbGUuCi0gICAgdGVzdC0+c2V0UGVyc2lzdGVudFN0b3Jh
Z2UoV0VCS0lUX0NPT0tJRV9QRVJTSVNURU5UX1NUT1JBR0VfU1FMSVRFKTsKLSAgICBkb21haW5z
ID0gdGVzdC0+Z2V0RG9tYWlucygpOwotICAgIGdfYXNzZXJ0KGRvbWFpbnMpOwotICAgIGdfYXNz
ZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKGRvbWFpbnMpLCA9PSwgMik7Ci0gICAgdGVzdC0+ZGVs
ZXRlQWxsQ29va2llcygpOwotICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKHRlc3Qt
PmdldERvbWFpbnMoKSksID09LCAwKTsKLX0KLQotc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2so
U291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0
aCwgR0hhc2hUYWJsZSosIFNvdXBDbGllbnRDb250ZXh0KiwgZ3BvaW50ZXIpCi17Ci0gICAgaWYg
KG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKLSAgICAgICAgc291cF9tZXNz
YWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3Nh
Z2UsIFNPVVBfU1RBVFVTX09LKTsKLSAgICBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9pbmRleC5o
dG1sIikpIHsKLSAgICAgICAgY2hhciogaW5kZXhIdG1sID0gZ19zdHJkdXBfcHJpbnRmKGtJbmRl
eEh0bWxGb3JtYXQsIHNvdXBfc2VydmVyX2dldF9wb3J0KHNlcnZlcikpOwotICAgICAgICBzb3Vw
X21lc3NhZ2VfaGVhZGVyc19yZXBsYWNlKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJTZXQt
Q29va2llIiwgImZvbz1iYXI7IE1heC1BZ2U9NjAiKTsKLSAgICAgICAgc291cF9tZXNzYWdlX2Jv
ZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGluZGV4
SHRtbCwgc3RybGVuKGluZGV4SHRtbCkpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0
aCwgIi9pbWFnZS5wbmciKSkKLSAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfcmVwbGFjZSht
ZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiU2V0LUNvb2tpZSIsICJiYXo9cXV4OyBNYXgtQWdl
PTYwIik7Ci0gICAgZWxzZQotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdl
LCBTT1VQX1NUQVRVU19OT1RfRk9VTkQpOwotICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRl
KG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOwotfQotCi12b2lkIGJlZm9yZUFsbCgpCi17Ci0gICAg
a1NlcnZlciA9IG5ldyBXZWJLaXRUZXN0U2VydmVyKCk7Ci0gICAga1NlcnZlci0+cnVuKHNlcnZl
ckNhbGxiYWNrKTsKLQotICAgIGtUZW1wRGlyZWN0b3J5ID0gZ19kaXJfbWFrZV90bXAoIldlYktp
dDJUZXN0cy1YWFhYWFgiLCAwKTsKLSAgICBnX2Fzc2VydChrVGVtcERpcmVjdG9yeSk7Ci0KLSAg
ICBDb29raWVNYW5hZ2VyVGVzdDo6YWRkKCJXZWJLaXRDb29raWVNYW5hZ2VyIiwgImFjY2VwdC1w
b2xpY3kiLCB0ZXN0Q29va2llTWFuYWdlckFjY2VwdFBvbGljeSk7Ci0gICAgQ29va2llTWFuYWdl
clRlc3Q6OmFkZCgiV2ViS2l0Q29va2llTWFuYWdlciIsICJkZWxldGUtY29va2llcyIsIHRlc3RD
b29raWVNYW5hZ2VyRGVsZXRlQ29va2llcyk7Ci0gICAgQ29va2llTWFuYWdlclRlc3Q6OmFkZCgi
V2ViS2l0Q29va2llTWFuYWdlciIsICJjb29raWVzLWNoYW5nZWQiLCB0ZXN0Q29va2llTWFuYWdl
ckNvb2tpZXNDaGFuZ2VkKTsKLSAgICBDb29raWVNYW5hZ2VyVGVzdDo6YWRkKCJXZWJLaXRDb29r
aWVNYW5hZ2VyIiwgInBlcnNpc3RlbnQtc3RvcmFnZSIsIHRlc3RDb29raWVNYW5hZ2VyUGVyc2lz
dGVudFN0b3JhZ2UpOwotfQotCi12b2lkIGFmdGVyQWxsKCkKLXsKLSAgICBkZWxldGUga1NlcnZl
cjsKLSAgICBnX3JtZGlyKGtUZW1wRGlyZWN0b3J5KTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RET01Ob2RlLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RET01Ob2RlLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYmQzMjA3Ny4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0RE9NTm9kZS5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSw4NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwuCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJXZWJQcm9jZXNzVGVzdFJ1bm5lci5oIgot
I2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUg
PHdlYmtpdDIvd2Via2l0Mi5oPgotCi1zdGF0aWMgV2ViUHJvY2Vzc1Rlc3RSdW5uZXIqIHRlc3RS
dW5uZXI7Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJLaXRET01Ob2RlSGllcmFyY2h5TmF2aWdhdGlv
bihXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBzdGF0aWMgY29uc3Qg
Y2hhciogdGVzdEhUTUwgPSAiPGh0bWw+PGhlYWQ+PHRpdGxlPlRoaXMgaXMgdGhlIHRpdGxlPC90
aXRsZT48L2hlYWQ+PGJvZHk+PHA+MTwvcD48cD4yPC9wPjxwPjM8L3A+PC9ib2R5PjwvaHRtbD4i
OwotICAgIHRlc3QtPmxvYWRIdG1sKHRlc3RIVE1MLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxM
b2FkRmluaXNoZWQoKTsKLQotICAgIEdWYXJpYW50QnVpbGRlciBidWlsZGVyOwotICAgIGdfdmFy
aWFudF9idWlsZGVyX2luaXQoJmJ1aWxkZXIsIEdfVkFSSUFOVF9UWVBFX1ZBUkRJQ1QpOwotICAg
IGdfdmFyaWFudF9idWlsZGVyX2FkZCgmYnVpbGRlciwgIntzdn0iLCAicGFnZUlEIiwgZ192YXJp
YW50X25ld191aW50NjQod2Via2l0X3dlYl92aWV3X2dldF9wYWdlX2lkKHRlc3QtPm1fd2ViVmll
dykpKTsKLSAgICBnX2Fzc2VydCh0ZXN0UnVubmVyLT5ydW5UZXN0KCJXZWJLaXRET01Ob2RlIiwg
ImhpZXJhcmNoeS1uYXZpZ2F0aW9uIiwgZ192YXJpYW50X2J1aWxkZXJfZW5kKCZidWlsZGVyKSkp
OwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViS2l0RE9NTm9kZUluc2VydGlvbihXZWJWaWV3VGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogdGVzdEhU
TUwgPSAiPGh0bWw+PGJvZHk+PC9ib2R5PjwvaHRtbD4iOwotICAgIHRlc3QtPmxvYWRIdG1sKHRl
c3RIVE1MLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIEdW
YXJpYW50QnVpbGRlciBidWlsZGVyOwotICAgIGdfdmFyaWFudF9idWlsZGVyX2luaXQoJmJ1aWxk
ZXIsIEdfVkFSSUFOVF9UWVBFX1ZBUkRJQ1QpOwotICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZCgm
YnVpbGRlciwgIntzdn0iLCAicGFnZUlEIiwgZ192YXJpYW50X25ld191aW50NjQod2Via2l0X3dl
Yl92aWV3X2dldF9wYWdlX2lkKHRlc3QtPm1fd2ViVmlldykpKTsKLSAgICBnX2Fzc2VydCh0ZXN0
UnVubmVyLT5ydW5UZXN0KCJXZWJLaXRET01Ob2RlIiwgImluc2VydGlvbiIsIGdfdmFyaWFudF9i
dWlsZGVyX2VuZCgmYnVpbGRlcikpKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYktpdERPTU5v
ZGVUYWdOYW1lcyhXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBzdGF0
aWMgY29uc3QgY2hhciogdGVzdEhUTUwgPSAiPGh0bWw+PGhlYWQ+PC9oZWFkPjxib2R5PiIKLSAg
ICAgICAgIjx2aWRlbyBpZD0ndmlkZW8nIHByZWxvYWQ9J25vbmUnPiIKLSAgICAgICAgIiAgICA8
c291cmNlIHNyYz0nbW92aWUub2dnJyB0eXBlPSd2aWRlby9vZ2cnPiIKLSAgICAgICAgIiAgICAg
ICAgWW91ciBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgdGhlIHZpZGVvIHRhZy4iCi0gICAgICAg
ICI8L3ZpZGVvPiIKLSAgICAgICAgIjx2aWRlbyBpZD0ndmlkZW8yJyBwcmVsb2FkPSdub25lJz4i
Ci0gICAgICAgICIgICAgIDxzb3VyY2Ugc3JjPSdtb3ZpZS5vZ2cnIHR5cGU9J3ZpZGVvL29nZyc+
IgotICAgICAgICAiICAgICAgICBZb3VyIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgdmlk
ZW8gdGFnLiIKLSAgICAgICAgIjwvdmlkZW8+IgotICAgICAgICAiPGlucHV0IHR5cGU9J2hpZGRl
bicgaWQ9J3Rlc3QnIG5hbWU9J2ZpbmlzaCcgdmFsdWU9J2ZhbHNlJz48L2JvZHk+PC9odG1sPiI7
Ci0gICAgdGVzdC0+bG9hZEh0bWwodGVzdEhUTUwsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExv
YWRGaW5pc2hlZCgpOwotCi0gICAgR1ZhcmlhbnRCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgZ192YXJp
YW50X2J1aWxkZXJfaW5pdCgmYnVpbGRlciwgR19WQVJJQU5UX1RZUEVfVkFSRElDVCk7Ci0gICAg
Z192YXJpYW50X2J1aWxkZXJfYWRkKCZidWlsZGVyLCAie3N2fSIsICJwYWdlSUQiLCBnX3Zhcmlh
bnRfbmV3X3VpbnQ2NCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3BhZ2VfaWQodGVzdC0+bV93ZWJWaWV3
KSkpOwotICAgIGdfYXNzZXJ0KHRlc3RSdW5uZXItPnJ1blRlc3QoIldlYktpdERPTU5vZGUiLCAi
dGFnLW5hbWVzIiwgZ192YXJpYW50X2J1aWxkZXJfZW5kKCZidWlsZGVyKSkpOwotfQotCi12b2lk
IGJlZm9yZUFsbCgpCi17Ci0gICAgdGVzdFJ1bm5lciA9IG5ldyBXZWJQcm9jZXNzVGVzdFJ1bm5l
cigpOwotICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfd2ViX2V4dGVuc2lvbnNfZGlyZWN0b3J5
KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpLCBXRUJLSVRfVEVTVF9XRUJfRVhURU5T
SU9OU19ESVIpOwotCi0gICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0RE9NTm9kZSIsICJoaWVy
YXJjaHktbmF2aWdhdGlvbiIsIHRlc3RXZWJLaXRET01Ob2RlSGllcmFyY2h5TmF2aWdhdGlvbik7
Ci0gICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0RE9NTm9kZSIsICJpbnNlcnRpb24iLCB0ZXN0
V2ViS2l0RE9NTm9kZUluc2VydGlvbik7Ci0gICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0RE9N
Tm9kZSIsICJ0YWctbmFtZXMiLCB0ZXN0V2ViS2l0RE9NTm9kZVRhZ05hbWVzKTsKLX0KLQotdm9p
ZCBhZnRlckFsbCgpCi17Ci0gICAgZGVsZXRlIHRlc3RSdW5uZXI7Ci19CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0RG93bmxvYWRzLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3REb3dubG9hZHMuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTE1OTkwLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3REb3dubG9hZHMuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsNTIyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
SWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiV2ViS2l0VGVzdFNl
cnZlci5oIgotI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCi0jaW5jbHVkZSA8Z2xpYi9nc3RkaW8u
aD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8bGlic291cC9zb3VwLmg+Ci0jaW5j
bHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+Ci0jaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KLSNpbmNsdWRl
IDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgot
Ci1zdGF0aWMgY2hhcioga1RlbXBEaXJlY3Rvcnk7Ci0KLWNsYXNzIERvd25sb2FkVGVzdDogcHVi
bGljIFRlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoRG93bmxvYWRU
ZXN0KTsKLQotICAgIGVudW0gRG93bmxvYWRFdmVudCB7Ci0gICAgICAgIFN0YXJ0ZWQsCi0gICAg
ICAgIFJlY2VpdmVkUmVzcG9uc2UsCi0gICAgICAgIENyZWF0ZWREZXN0aW5hdGlvbiwKLSAgICAg
ICAgUmVjZWl2ZWREYXRhLAotICAgICAgICBGYWlsZWQsCi0gICAgICAgIEZpbmlzaGVkCi0gICAg
fTsKLQotICAgIHN0YXRpYyB2b2lkIHJlY2VpdmVkUmVzcG9uc2VDYWxsYmFjayhXZWJLaXREb3du
bG9hZCogZG93bmxvYWQsIEdQYXJhbVNwZWMqLCBEb3dubG9hZFRlc3QqIHRlc3QpCi0gICAgewot
ICAgICAgICBnX2Fzc2VydCh3ZWJraXRfZG93bmxvYWRfZ2V0X3Jlc3BvbnNlKGRvd25sb2FkKSk7
Ci0gICAgICAgIHRlc3QtPnJlY2VpdmVkUmVzcG9uc2UoZG93bmxvYWQpOwotICAgIH0KLQotICAg
IHN0YXRpYyBnYm9vbGVhbiBjcmVhdGVkRGVzdGluYXRpb25DYWxsYmFjayhXZWJLaXREb3dubG9h
ZCogZG93bmxvYWQsIGNvbnN0IGdjaGFyKiBkZXN0aW5hdGlvbiwgRG93bmxvYWRUZXN0KiB0ZXN0
KQotICAgIHsKLSAgICAgICAgZ19hc3NlcnQod2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlv
bihkb3dubG9hZCkpOwotICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2Rvd25sb2FkX2dl
dF9kZXN0aW5hdGlvbihkb3dubG9hZCksID09LCBkZXN0aW5hdGlvbik7Ci0gICAgICAgIHRlc3Qt
PmNyZWF0ZWREZXN0aW5hdGlvbihkb3dubG9hZCwgZGVzdGluYXRpb24pOwotICAgICAgICByZXR1
cm4gVFJVRTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZ2Jvb2xlYW4gcmVjZWl2ZWREYXRhQ2FsbGJh
Y2soV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBndWludDY0IGRhdGFMZW5ndGgsIERvd25sb2Fk
VGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHRlc3QtPnJlY2VpdmVkRGF0YShkb3dubG9hZCwg
ZGF0YUxlbmd0aCk7Ci0gICAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQotICAgIHN0YXRpYyBn
Ym9vbGVhbiBmaW5pc2hlZENhbGxiYWNrKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgRG93bmxv
YWRUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+ZmluaXNoZWQoZG93bmxvYWQpOwot
ICAgICAgICByZXR1cm4gVFJVRTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZ2Jvb2xlYW4gZmFpbGVk
Q2FsbGJhY2soV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBHRXJyb3IqIGVycm9yLCBEb3dubG9h
ZFRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICBnX2Fzc2VydChlcnJvcik7Ci0gICAgICAgIHRl
c3QtPmZhaWxlZChkb3dubG9hZCwgZXJyb3IpOwotICAgICAgICByZXR1cm4gVFJVRTsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgZ2Jvb2xlYW4gZGVjaWRlRGVzdGluYXRpb25DYWxsYmFjayhXZWJLaXRE
b3dubG9hZCogZG93bmxvYWQsIGNvbnN0IGdjaGFyKiBzdWdnZXN0ZWRGaWxlbmFtZSwgRG93bmxv
YWRUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgZ19hc3NlcnQoc3VnZ2VzdGVkRmlsZW5hbWUp
OwotICAgICAgICB0ZXN0LT5kZWNpZGVEZXN0aW5hdGlvbihkb3dubG9hZCwgc3VnZ2VzdGVkRmls
ZW5hbWUpOwotICAgICAgICByZXR1cm4gVFJVRTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBk
b3dubG9hZFN0YXJ0ZWRDYWxsYmFjayhXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0LCBXZWJLaXRE
b3dubG9hZCogZG93bmxvYWQsIERvd25sb2FkVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIGdf
YXNzZXJ0KHdlYmtpdF9kb3dubG9hZF9nZXRfcmVxdWVzdChkb3dubG9hZCkpOwotICAgICAgICB0
ZXN0LT5zdGFydGVkKGRvd25sb2FkKTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChkb3dubG9h
ZCwgIm5vdGlmeTo6cmVzcG9uc2UiLCBHX0NBTExCQUNLKHJlY2VpdmVkUmVzcG9uc2VDYWxsYmFj
ayksIHRlc3QpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGRvd25sb2FkLCAiY3JlYXRlZC1k
ZXN0aW5hdGlvbiIsIEdfQ0FMTEJBQ0soY3JlYXRlZERlc3RpbmF0aW9uQ2FsbGJhY2spLCB0ZXN0
KTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChkb3dubG9hZCwgInJlY2VpdmVkLWRhdGEiLCBH
X0NBTExCQUNLKHJlY2VpdmVkRGF0YUNhbGxiYWNrKSwgdGVzdCk7Ci0gICAgICAgIGdfc2lnbmFs
X2Nvbm5lY3QoZG93bmxvYWQsICJmaW5pc2hlZCIsIEdfQ0FMTEJBQ0soZmluaXNoZWRDYWxsYmFj
ayksIHRlc3QpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGRvd25sb2FkLCAiZmFpbGVkIiwg
R19DQUxMQkFDSyhmYWlsZWRDYWxsYmFjayksIHRlc3QpOwotICAgICAgICBnX3NpZ25hbF9jb25u
ZWN0KGRvd25sb2FkLCAiZGVjaWRlLWRlc3RpbmF0aW9uIiwgR19DQUxMQkFDSyhkZWNpZGVEZXN0
aW5hdGlvbkNhbGxiYWNrKSwgdGVzdCk7Ci0gICAgfQotCi0gICAgRG93bmxvYWRUZXN0KCkKLSAg
ICAgICAgOiBtX3dlYkNvbnRleHQod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCkpCi0g
ICAgICAgICwgbV9tYWluTG9vcChnX21haW5fbG9vcF9uZXcoMCwgVFJVRSkpCi0gICAgICAgICwg
bV9kb3dubG9hZFNpemUoMCkKLSAgICB7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJD
b250ZXh0LCAiZG93bmxvYWQtc3RhcnRlZCIsIEdfQ0FMTEJBQ0soZG93bmxvYWRTdGFydGVkQ2Fs
bGJhY2spLCB0aGlzKTsKLSAgICB9Ci0KLSAgICB+RG93bmxvYWRUZXN0KCkKLSAgICB7Ci0gICAg
ICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3dlYkNvbnRleHQsIEdf
U0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOwotICAgICAgICBnX21haW5fbG9v
cF91bnJlZihtX21haW5Mb29wKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnRlZChX
ZWJLaXREb3dubG9hZCogZG93bmxvYWQpCi0gICAgewotICAgICAgICBtX2Rvd25sb2FkRXZlbnRz
LmFwcGVuZChTdGFydGVkKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRSZXNw
b25zZShXZWJLaXREb3dubG9hZCogZG93bmxvYWQpCi0gICAgewotICAgICAgICBtX2Rvd25sb2Fk
RXZlbnRzLmFwcGVuZChSZWNlaXZlZFJlc3BvbnNlKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgY3JlYXRlZERlc3RpbmF0aW9uKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgY29uc3QgY2hh
ciogZGVzdGluYXRpb24pCi0gICAgewotICAgICAgICBtX2Rvd25sb2FkRXZlbnRzLmFwcGVuZChD
cmVhdGVkRGVzdGluYXRpb24pOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlZERh
dGEoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBndWludDY0IGRhdGFMZW5ndGgpCi0gICAgewot
ICAgICAgICBtX2Rvd25sb2FkU2l6ZSArPSBkYXRhTGVuZ3RoOwotICAgICAgICBpZiAoIW1fZG93
bmxvYWRFdmVudHMuY29udGFpbnMoUmVjZWl2ZWREYXRhKSkKLSAgICAgICAgICAgIG1fZG93bmxv
YWRFdmVudHMuYXBwZW5kKFJlY2VpdmVkRGF0YSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lk
IGZpbmlzaGVkKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCkKLSAgICB7Ci0gICAgICAgIGdfYXNz
ZXJ0X2NtcHVpbnQobV9kb3dubG9hZFNpemUsID09LCB3ZWJraXRfZG93bmxvYWRfZ2V0X3JlY2Vp
dmVkX2RhdGFfbGVuZ3RoKGRvd25sb2FkKSk7Ci0gICAgICAgIG1fZG93bmxvYWRFdmVudHMuYXBw
ZW5kKEZpbmlzaGVkKTsKLSAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX21haW5Mb29wKTsKLSAg
ICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZmFpbGVkKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwg
R0Vycm9yKiBlcnJvcikKLSAgICB7Ci0gICAgICAgIG1fZG93bmxvYWRFdmVudHMuYXBwZW5kKEZh
aWxlZCk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIGRlY2lkZURlc3RpbmF0aW9uKFdlYktp
dERvd25sb2FkKiBkb3dubG9hZCwgY29uc3QgZ2NoYXIqIHN1Z2dlc3RlZEZpbGVuYW1lKQotICAg
IHsKLSAgICAgICAgR093blB0cjxjaGFyPiBkZXN0aW5hdGlvbihnX2J1aWxkX2ZpbGVuYW1lKGtU
ZW1wRGlyZWN0b3J5LCBzdWdnZXN0ZWRGaWxlbmFtZSwgTlVMTCkpOwotICAgICAgICBHT3duUHRy
PGNoYXI+IGRlc3RpbmF0aW9uVVJJKGdfZmlsZW5hbWVfdG9fdXJpKGRlc3RpbmF0aW9uLmdldCgp
LCAwLCAwKSk7Ci0gICAgICAgIHdlYmtpdF9kb3dubG9hZF9zZXRfZGVzdGluYXRpb24oZG93bmxv
YWQsIGRlc3RpbmF0aW9uVVJJLmdldCgpKTsKLSAgICB9Ci0KLSAgICBXZWJLaXREb3dubG9hZCog
ZG93bmxvYWRVUklBbmRXYWl0VW50aWxGaW5pc2hlcyhjb25zdCBDU3RyaW5nJiByZXF1ZXN0VVJJ
KQotICAgIHsKLSAgICAgICAgV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkID0gd2Via2l0X3dlYl9j
b250ZXh0X2Rvd25sb2FkX3VyaShtX3dlYkNvbnRleHQsIHJlcXVlc3RVUkkuZGF0YSgpKTsKLSAg
ICAgICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChkb3du
bG9hZCkpOwotCi0gICAgICAgIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QgPSB3ZWJraXRfZG93
bmxvYWRfZ2V0X3JlcXVlc3QoZG93bmxvYWQpOwotICAgICAgICBnX2Fzc2VydChyZXF1ZXN0KTsK
LSAgICAgICAgQVNTRVJUX0NNUF9DU1RSSU5HKHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfdXJpKHJl
cXVlc3QpLCA9PSwgcmVxdWVzdFVSSSk7Ci0KLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFp
bkxvb3ApOwotCi0gICAgICAgIHJldHVybiBkb3dubG9hZDsKLSAgICB9Ci0KLSAgICB2b2lkIGNo
ZWNrRGVzdGluYXRpb25BbmREZWxldGVGaWxlKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgY29u
c3QgY2hhciogZXhwZWN0ZWROYW1lKQotICAgIHsKLSAgICAgICAgaWYgKCF3ZWJraXRfZG93bmxv
YWRfZ2V0X2Rlc3RpbmF0aW9uKGRvd25sb2FkKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgR1JlZlB0cjxHRmlsZT4gZGVzdEZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfdXJp
KHdlYmtpdF9kb3dubG9hZF9nZXRfZGVzdGluYXRpb24oZG93bmxvYWQpKSk7Ci0gICAgICAgIEdP
d25QdHI8Y2hhcj4gZGVzdEJhc2VuYW1lKGdfZmlsZV9nZXRfYmFzZW5hbWUoZGVzdEZpbGUuZ2V0
KCkpKTsKLSAgICAgICAgZ19hc3NlcnRfY21wc3RyKGRlc3RCYXNlbmFtZS5nZXQoKSwgPT0sIGV4
cGVjdGVkTmFtZSk7Ci0KLSAgICAgICAgZ19maWxlX2RlbGV0ZShkZXN0RmlsZS5nZXQoKSwgMCwg
MCk7Ci0gICAgfQotCi0gICAgV2ViS2l0V2ViQ29udGV4dCogbV93ZWJDb250ZXh0OwotICAgIEdN
YWluTG9vcCogbV9tYWluTG9vcDsKLSAgICBWZWN0b3I8RG93bmxvYWRFdmVudD4gbV9kb3dubG9h
ZEV2ZW50czsKLSAgICBndWludDY0IG1fZG93bmxvYWRTaXplOwotfTsKLQotc3RhdGljIHZvaWQg
dGVzdERvd25sb2FkTG9jYWxGaWxlKERvd25sb2FkVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikK
LXsKLSAgICBHT3duUHRyPGNoYXI+IHNvdXJjZVBhdGgoZ19idWlsZF9maWxlbmFtZShUZXN0Ojpn
ZXRXZWJLaXQxVGVzdFJlc291Y2VzRGlyKCkuZGF0YSgpLCAidGVzdC5wZGYiLCBOVUxMKSk7Ci0g
ICAgR1JlZlB0cjxHRmlsZT4gc291cmNlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgo
c291cmNlUGF0aC5nZXQoKSkpOwotICAgIEdSZWZQdHI8R0ZpbGVJbmZvPiBzb3VyY2VJbmZvID0g
YWRvcHRHUmVmKGdfZmlsZV9xdWVyeV9pbmZvKHNvdXJjZS5nZXQoKSwgR19GSUxFX0FUVFJJQlVU
RV9TVEFOREFSRF9TSVpFLCBzdGF0aWNfY2FzdDxHRmlsZVF1ZXJ5SW5mb0ZsYWdzPigwKSwgMCwg
MCkpOwotICAgIEdPd25QdHI8Y2hhcj4gc291cmNlVVJJKGdfZmlsZV9nZXRfdXJpKHNvdXJjZS5n
ZXQoKSkpOwotICAgIEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkID0gYWRvcHRHUmVm
KHRlc3QtPmRvd25sb2FkVVJJQW5kV2FpdFVudGlsRmluaXNoZXMoc291cmNlVVJJLmdldCgpKSk7
Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9kb3dubG9hZF9nZXRfd2ViX3ZpZXcoZG93bmxvYWQuZ2V0
KCkpKTsKLQotICAgIFZlY3RvcjxEb3dubG9hZFRlc3Q6OkRvd25sb2FkRXZlbnQ+JiBldmVudHMg
PSB0ZXN0LT5tX2Rvd25sb2FkRXZlbnRzOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6
ZSgpLCA9PSwgNSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIERvd25sb2Fk
VGVzdDo6U3RhcnRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIERvd25s
b2FkVGVzdDo6UmVjZWl2ZWRSZXNwb25zZSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sy
XSwgPT0sIERvd25sb2FkVGVzdDo6Q3JlYXRlZERlc3RpbmF0aW9uKTsKLSAgICBnX2Fzc2VydF9j
bXBpbnQoZXZlbnRzWzNdLCA9PSwgRG93bmxvYWRUZXN0OjpSZWNlaXZlZERhdGEpOwotICAgIGdf
YXNzZXJ0X2NtcGludChldmVudHNbNF0sID09LCBEb3dubG9hZFRlc3Q6OkZpbmlzaGVkKTsKLQot
ICAgIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QgPSB3ZWJraXRfZG93bmxvYWRfZ2V0X3JlcXVl
c3QoZG93bmxvYWQuZ2V0KCkpOwotICAgIGdfYXNzZXJ0KHJlcXVlc3QpOwotICAgIGdfYXNzZXJ0
X2NtcHN0cih3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KSwgPT0sIHNvdXJjZVVS
SS5nZXQoKSk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9kb3dubG9hZFNpemUsID09
LCBnX2ZpbGVfaW5mb19nZXRfc2l6ZShzb3VyY2VJbmZvLmdldCgpKSk7Ci0gICAgZ19hc3NlcnQo
d2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbihkb3dubG9hZC5nZXQoKSkpOwotICAgIGdf
YXNzZXJ0X2NtcGZsb2F0KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNzKGRv
d25sb2FkLmdldCgpKSwgPT0sIDEpOwotICAgIHRlc3QtPmNoZWNrRGVzdGluYXRpb25BbmREZWxl
dGVGaWxlKGRvd25sb2FkLmdldCgpLCAidGVzdC5wZGYiKTsKLX0KLQotY2xhc3MgRG93bmxvYWRF
cnJvclRlc3Q6IHB1YmxpYyBEb3dubG9hZFRlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJQl9U
RVNUX0ZJWFRVUkUoRG93bmxvYWRFcnJvclRlc3QpOwotCi0gICAgRG93bmxvYWRFcnJvclRlc3Qo
KQotICAgICAgICA6IG1fZXhwZWN0ZWRFcnJvcihXRUJLSVRfRE9XTkxPQURfRVJST1JfTkVUV09S
SykKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCByZWNlaXZlZFJlc3BvbnNlKFdlYktpdERvd25s
b2FkKiBkb3dubG9hZCkKLSAgICB7Ci0gICAgICAgIERvd25sb2FkVGVzdDo6cmVjZWl2ZWRSZXNw
b25zZShkb3dubG9hZCk7Ci0gICAgICAgIGlmIChtX2V4cGVjdGVkRXJyb3IgPT0gV0VCS0lUX0RP
V05MT0FEX0VSUk9SX0NBTkNFTExFRF9CWV9VU0VSKQotICAgICAgICAgICAgd2Via2l0X2Rvd25s
b2FkX2NhbmNlbChkb3dubG9hZCk7Ci0gICAgfQotCi0gICAgdm9pZCBjcmVhdGVkRGVzdGluYXRp
b24oV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBjb25zdCBjaGFyKiBkZXN0aW5hdGlvbikKLSAg
ICB7Ci0gICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0gICAgfQotCi0gICAgdm9pZCBm
YWlsZWQoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBHRXJyb3IqIGVycm9yKQotICAgIHsKLSAg
ICAgICAgZ19hc3NlcnQoZ19lcnJvcl9tYXRjaGVzKGVycm9yLCBXRUJLSVRfRE9XTkxPQURfRVJS
T1IsIG1fZXhwZWN0ZWRFcnJvcikpOwotICAgICAgICBEb3dubG9hZFRlc3Q6OmZhaWxlZChkb3du
bG9hZCwgZXJyb3IpOwotICAgIH0KLQotICAgIHZvaWQgZGVjaWRlRGVzdGluYXRpb24oV2ViS2l0
RG93bmxvYWQqIGRvd25sb2FkLCBjb25zdCBnY2hhciogc3VnZ2VzdGVkRmlsZW5hbWUpCi0gICAg
ewotICAgICAgICBpZiAobV9leHBlY3RlZEVycm9yICE9IFdFQktJVF9ET1dOTE9BRF9FUlJPUl9E
RVNUSU5BVElPTikgewotICAgICAgICAgICAgRG93bmxvYWRUZXN0OjpkZWNpZGVEZXN0aW5hdGlv
bihkb3dubG9hZCwgc3VnZ2VzdGVkRmlsZW5hbWUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIHdlYmtpdF9kb3dubG9hZF9zZXRfZGVzdGluYXRpb24oZG93bmxvYWQs
ICJmaWxlOi8vL2Zvby9iYXIiKTsKLSAgICB9Ci0KLSAgICBXZWJLaXREb3dubG9hZEVycm9yIG1f
ZXhwZWN0ZWRFcnJvcjsKLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3REb3dubG9hZExvY2FsRmlsZUVy
cm9yKERvd25sb2FkRXJyb3JUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3Qt
Pm1fZXhwZWN0ZWRFcnJvciA9IFdFQktJVF9ET1dOTE9BRF9FUlJPUl9ORVRXT1JLOwotICAgIEdS
ZWZQdHI8V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkID0gYWRvcHRHUmVmKHRlc3QtPmRvd25sb2Fk
VVJJQW5kV2FpdFVudGlsRmluaXNoZXMoImZpbGU6Ly8vZm9vL2JhciIpKTsKLSAgICBnX2Fzc2Vy
dCghd2Via2l0X2Rvd25sb2FkX2dldF93ZWJfdmlldyhkb3dubG9hZC5nZXQoKSkpOwotCi0gICAg
VmVjdG9yPERvd25sb2FkVGVzdDo6RG93bmxvYWRFdmVudD4mIGV2ZW50cyA9IHRlc3QtPm1fZG93
bmxvYWRFdmVudHM7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAzKTsK
LSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgRG93bmxvYWRUZXN0OjpTdGFydGVk
KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgRG93bmxvYWRUZXN0OjpGYWls
ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBEb3dubG9hZFRlc3Q6OkZp
bmlzaGVkKTsKLSAgICBldmVudHMuY2xlYXIoKTsKLSAgICBnX2Fzc2VydF9jbXBmbG9hdCh3ZWJr
aXRfZG93bmxvYWRfZ2V0X2VzdGltYXRlZF9wcm9ncmVzcyhkb3dubG9hZC5nZXQoKSksIDwsIDEp
OwotCi0gICAgdGVzdC0+bV9leHBlY3RlZEVycm9yID0gV0VCS0lUX0RPV05MT0FEX0VSUk9SX0RF
U1RJTkFUSU9OOwotICAgIEdPd25QdHI8Y2hhcj4gcGF0aChnX2J1aWxkX2ZpbGVuYW1lKFRlc3Q6
OmdldFdlYktpdDFUZXN0UmVzb3VjZXNEaXIoKS5kYXRhKCksICJ0ZXN0LnBkZiIsIE5VTEwpKTsK
LSAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgo
cGF0aC5nZXQoKSkpOwotICAgIEdPd25QdHI8Y2hhcj4gdXJpKGdfZmlsZV9nZXRfdXJpKGZpbGUu
Z2V0KCkpKTsKLSAgICBkb3dubG9hZCA9IGFkb3B0R1JlZih0ZXN0LT5kb3dubG9hZFVSSUFuZFdh
aXRVbnRpbEZpbmlzaGVzKHVyaS5nZXQoKSkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG93bmxv
YWRfZ2V0X3dlYl92aWV3KGRvd25sb2FkLmdldCgpKSk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQo
ZXZlbnRzLnNpemUoKSwgPT0sIDQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09
LCBEb3dubG9hZFRlc3Q6OlN0YXJ0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0s
ID09LCBEb3dubG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOwotICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHNbMl0sID09LCBEb3dubG9hZFRlc3Q6OkZhaWxlZCk7Ci0gICAgZ19hc3NlcnRfY21w
aW50KGV2ZW50c1szXSwgPT0sIERvd25sb2FkVGVzdDo6RmluaXNoZWQpOwotICAgIGV2ZW50cy5j
bGVhcigpOwotICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1h
dGVkX3Byb2dyZXNzKGRvd25sb2FkLmdldCgpKSwgPCwgMSk7Ci0gICAgdGVzdC0+Y2hlY2tEZXN0
aW5hdGlvbkFuZERlbGV0ZUZpbGUoZG93bmxvYWQuZ2V0KCksICJiYXIiKTsKLQotICAgIHRlc3Qt
Pm1fZXhwZWN0ZWRFcnJvciA9IFdFQktJVF9ET1dOTE9BRF9FUlJPUl9DQU5DRUxMRURfQllfVVNF
UjsKLSAgICBkb3dubG9hZCA9IGFkb3B0R1JlZih0ZXN0LT5kb3dubG9hZFVSSUFuZFdhaXRVbnRp
bEZpbmlzaGVzKHVyaS5nZXQoKSkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG93bmxvYWRfZ2V0
X3dlYl92aWV3KGRvd25sb2FkLmdldCgpKSk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRz
LnNpemUoKSwgPT0sIDQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBEb3du
bG9hZFRlc3Q6OlN0YXJ0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBE
b3dubG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVu
dHNbMl0sID09LCBEb3dubG9hZFRlc3Q6OkZhaWxlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2
ZW50c1szXSwgPT0sIERvd25sb2FkVGVzdDo6RmluaXNoZWQpOwotICAgIGV2ZW50cy5jbGVhcigp
OwotICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3By
b2dyZXNzKGRvd25sb2FkLmdldCgpKSwgPCwgMSk7Ci0gICAgdGVzdC0+Y2hlY2tEZXN0aW5hdGlv
bkFuZERlbGV0ZUZpbGUoZG93bmxvYWQuZ2V0KCksICJ0ZXN0LnBkZiIpOwotfQotCi1zdGF0aWMg
V2ViS2l0VGVzdFNlcnZlcioga1NlcnZlcjsKLXN0YXRpYyBjb25zdCBjaGFyKiBrU2VydmVyU3Vn
Z2VzdGVkRmlsZW5hbWUgPSAid2Via2l0LWRvd25sb2FkZWQtZmlsZSI7Ci0KLXN0YXRpYyB2b2lk
IHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1lc3NhZ2Us
IGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqLCBTb3VwQ2xpZW50Q29udGV4dCosIGdwb2lu
dGVyKQotewotICAgIGlmIChtZXNzYWdlLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7Ci0g
ICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9J
TVBMRU1FTlRFRCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBHT3duUHRyPGNoYXI+
IGZpbGVQYXRoKGdfYnVpbGRfZmlsZW5hbWUoVGVzdDo6Z2V0V2ViS2l0MVRlc3RSZXNvdWNlc0Rp
cigpLmRhdGEoKSwgcGF0aCwgTlVMTCkpOwotICAgIGNoYXIqIGNvbnRlbnRzOwotICAgIGdzaXpl
IGNvbnRlbnRzTGVuZ3RoOwotICAgIGlmICghZ19maWxlX2dldF9jb250ZW50cyhmaWxlUGF0aC5n
ZXQoKSwgJmNvbnRlbnRzLCAmY29udGVudHNMZW5ndGgsIDApKSB7Ci0gICAgICAgIHNvdXBfbWVz
c2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7Ci0gICAgICAg
IHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2Fn
ZSwgU09VUF9TVEFUVVNfT0spOwotCi0gICAgR093blB0cjxjaGFyPiBjb250ZW50RGlzcG9zaXRp
b24oZ19zdHJkdXBfcHJpbnRmKCJmaWxlbmFtZT0lcyIsIGtTZXJ2ZXJTdWdnZXN0ZWRGaWxlbmFt
ZSkpOwotICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9o
ZWFkZXJzLCAiQ29udGVudC1EaXNwb3NpdGlvbiIsIGNvbnRlbnREaXNwb3NpdGlvbi5nZXQoKSk7
Ci0gICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNP
VVBfTUVNT1JZX1RBS0UsIGNvbnRlbnRzLCBjb250ZW50c0xlbmd0aCk7Ci0KLSAgICBzb3VwX21l
c3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKLX0KLQotc3RhdGlj
IHZvaWQgdGVzdERvd25sb2FkUmVtb3RlRmlsZShEb3dubG9hZFRlc3QqIHRlc3QsIGdjb25zdHBv
aW50ZXIpCi17Ci0gICAgR1JlZlB0cjxXZWJLaXREb3dubG9hZD4gZG93bmxvYWQgPSBhZG9wdEdS
ZWYodGVzdC0+ZG93bmxvYWRVUklBbmRXYWl0VW50aWxGaW5pc2hlcyhrU2VydmVyLT5nZXRVUklG
b3JQYXRoKCIvdGVzdC5wZGYiKSkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG93bmxvYWRfZ2V0
X3dlYl92aWV3KGRvd25sb2FkLmdldCgpKSk7Ci0KLSAgICBWZWN0b3I8RG93bmxvYWRUZXN0OjpE
b3dubG9hZEV2ZW50PiYgZXZlbnRzID0gdGVzdC0+bV9kb3dubG9hZEV2ZW50czsKLSAgICBnX2Fz
c2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDUpOwotICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHNbMF0sID09LCBEb3dubG9hZFRlc3Q6OlN0YXJ0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHNbMV0sID09LCBEb3dubG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOwotICAgIGdf
YXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBEb3dubG9hZFRlc3Q6OkNyZWF0ZWREZXN0aW5h
dGlvbik7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1szXSwgPT0sIERvd25sb2FkVGVzdDo6
UmVjZWl2ZWREYXRhKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzRdLCA9PSwgRG93bmxv
YWRUZXN0OjpGaW5pc2hlZCk7Ci0gICAgZXZlbnRzLmNsZWFyKCk7Ci0KLSAgICBXZWJLaXRVUklS
ZXF1ZXN0KiByZXF1ZXN0ID0gd2Via2l0X2Rvd25sb2FkX2dldF9yZXF1ZXN0KGRvd25sb2FkLmdl
dCgpKTsKLSAgICBnX2Fzc2VydChyZXF1ZXN0KTsKLSAgICBBU1NFUlRfQ01QX0NTVFJJTkcod2Vi
a2l0X3VyaV9yZXF1ZXN0X2dldF91cmkocmVxdWVzdCksID09LCBrU2VydmVyLT5nZXRVUklGb3JQ
YXRoKCIvdGVzdC5wZGYiKSk7Ci0KLSAgICBnX2Fzc2VydCh3ZWJraXRfZG93bmxvYWRfZ2V0X2Rl
c3RpbmF0aW9uKGRvd25sb2FkLmdldCgpKSk7Ci0gICAgZ19hc3NlcnRfY21wZmxvYXQod2Via2l0
X2Rvd25sb2FkX2dldF9lc3RpbWF0ZWRfcHJvZ3Jlc3MoZG93bmxvYWQuZ2V0KCkpLCA9PSwgMSk7
Ci0gICAgdGVzdC0+Y2hlY2tEZXN0aW5hdGlvbkFuZERlbGV0ZUZpbGUoZG93bmxvYWQuZ2V0KCks
IGtTZXJ2ZXJTdWdnZXN0ZWRGaWxlbmFtZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3REb3dubG9h
ZFJlbW90ZUZpbGVFcnJvcihEb3dubG9hZEVycm9yVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikK
LXsKLSAgICB0ZXN0LT5tX2V4cGVjdGVkRXJyb3IgPSBXRUJLSVRfRE9XTkxPQURfRVJST1JfTkVU
V09SSzsKLSAgICBHUmVmUHRyPFdlYktpdERvd25sb2FkPiBkb3dubG9hZCA9IGFkb3B0R1JlZih0
ZXN0LT5kb3dubG9hZFVSSUFuZFdhaXRVbnRpbEZpbmlzaGVzKGtTZXJ2ZXItPmdldFVSSUZvclBh
dGgoIi9mb28iKSkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG93bmxvYWRfZ2V0X3dlYl92aWV3
KGRvd25sb2FkLmdldCgpKSk7Ci0KLSAgICBWZWN0b3I8RG93bmxvYWRUZXN0OjpEb3dubG9hZEV2
ZW50PiYgZXZlbnRzID0gdGVzdC0+bV9kb3dubG9hZEV2ZW50czsKLSAgICBnX2Fzc2VydF9jbXBp
bnQoZXZlbnRzLnNpemUoKSwgPT0sIDQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0s
ID09LCBEb3dubG9hZFRlc3Q6OlN0YXJ0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNb
MV0sID09LCBEb3dubG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOwotICAgIGdfYXNzZXJ0X2Nt
cGludChldmVudHNbMl0sID09LCBEb3dubG9hZFRlc3Q6OkZhaWxlZCk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KGV2ZW50c1szXSwgPT0sIERvd25sb2FkVGVzdDo6RmluaXNoZWQpOwotICAgIGV2ZW50
cy5jbGVhcigpOwotICAgIFdlYktpdFVSSVJlc3BvbnNlKiByZXNwb25zZSA9IHdlYmtpdF9kb3du
bG9hZF9nZXRfcmVzcG9uc2UoZG93bmxvYWQuZ2V0KCkpOwotICAgIGdfYXNzZXJ0X2NtcHVpbnQo
d2Via2l0X3VyaV9yZXNwb25zZV9nZXRfc3RhdHVzX2NvZGUocmVzcG9uc2UpLCA9PSwgNDA0KTsK
LSAgICBnX2Fzc2VydF9jbXBmbG9hdCh3ZWJraXRfZG93bmxvYWRfZ2V0X2VzdGltYXRlZF9wcm9n
cmVzcyhkb3dubG9hZC5nZXQoKSksIDwsIDEpOwotCi0gICAgdGVzdC0+bV9leHBlY3RlZEVycm9y
ID0gV0VCS0lUX0RPV05MT0FEX0VSUk9SX0RFU1RJTkFUSU9OOwotICAgIGRvd25sb2FkID0gYWRv
cHRHUmVmKHRlc3QtPmRvd25sb2FkVVJJQW5kV2FpdFVudGlsRmluaXNoZXMoa1NlcnZlci0+Z2V0
VVJJRm9yUGF0aCgiL3Rlc3QucGRmIikpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2Rvd25sb2Fk
X2dldF93ZWJfdmlldyhkb3dubG9hZC5nZXQoKSkpOwotCi0gICAgZ19hc3NlcnRfY21waW50KGV2
ZW50cy5zaXplKCksID09LCA0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwg
RG93bmxvYWRUZXN0OjpTdGFydGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9
PSwgRG93bmxvYWRUZXN0OjpSZWNlaXZlZFJlc3BvbnNlKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
ZXZlbnRzWzJdLCA9PSwgRG93bmxvYWRUZXN0OjpGYWlsZWQpOwotICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHNbM10sID09LCBEb3dubG9hZFRlc3Q6OkZpbmlzaGVkKTsKLSAgICBldmVudHMuY2xl
YXIoKTsKLSAgICBnX2Fzc2VydF9jbXBmbG9hdCh3ZWJraXRfZG93bmxvYWRfZ2V0X2VzdGltYXRl
ZF9wcm9ncmVzcyhkb3dubG9hZC5nZXQoKSksIDwsIDEpOwotICAgIHRlc3QtPmNoZWNrRGVzdGlu
YXRpb25BbmREZWxldGVGaWxlKGRvd25sb2FkLmdldCgpLCAiYmFyIik7Ci0KLSAgICB0ZXN0LT5t
X2V4cGVjdGVkRXJyb3IgPSBXRUJLSVRfRE9XTkxPQURfRVJST1JfQ0FOQ0VMTEVEX0JZX1VTRVI7
Ci0gICAgZG93bmxvYWQgPSBhZG9wdEdSZWYodGVzdC0+ZG93bmxvYWRVUklBbmRXYWl0VW50aWxG
aW5pc2hlcyhrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvdGVzdC5wZGYiKSkpOwotICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfZG93bmxvYWRfZ2V0X3dlYl92aWV3KGRvd25sb2FkLmdldCgpKSk7Ci0KLSAg
ICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDQpOwotICAgIGdfYXNzZXJ0X2Nt
cGludChldmVudHNbMF0sID09LCBEb3dubG9hZFRlc3Q6OlN0YXJ0ZWQpOwotICAgIGdfYXNzZXJ0
X2NtcGludChldmVudHNbMV0sID09LCBEb3dubG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOwot
ICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBEb3dubG9hZFRlc3Q6OkZhaWxlZCk7
Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1szXSwgPT0sIERvd25sb2FkVGVzdDo6RmluaXNo
ZWQpOwotICAgIGV2ZW50cy5jbGVhcigpOwotICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHdlYmtpdF9k
b3dubG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNzKGRvd25sb2FkLmdldCgpKSwgPCwgMSk7Ci0g
ICAgdGVzdC0+Y2hlY2tEZXN0aW5hdGlvbkFuZERlbGV0ZUZpbGUoZG93bmxvYWQuZ2V0KCksIGtT
ZXJ2ZXJTdWdnZXN0ZWRGaWxlbmFtZSk7Ci19Ci0KLWNsYXNzIFdlYlZpZXdEb3dubG9hZFRlc3Q6
IHB1YmxpYyBXZWJWaWV3VGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVS
RShXZWJWaWV3RG93bmxvYWRUZXN0KTsKLQotICAgIHN0YXRpYyB2b2lkIGRvd25sb2FkU3RhcnRl
ZENhbGxiYWNrKFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYktpdERvd25sb2FkKiBkb3du
bG9hZCwgV2ViVmlld0Rvd25sb2FkVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHRlc3QtPm1f
ZG93bmxvYWQgPSBkb3dubG9hZDsKLSAgICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVk
V2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChkb3dubG9hZCkpOwotICAgICAgICB0ZXN0LT5xdWl0
TWFpbkxvb3AoKTsKLSAgICB9Ci0KLSAgICBXZWJWaWV3RG93bmxvYWRUZXN0KCkKLSAgICB7Ci0g
ICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KG1fd2Vi
VmlldyksICJkb3dubG9hZC1zdGFydGVkIiwgR19DQUxMQkFDSyhkb3dubG9hZFN0YXJ0ZWRDYWxs
YmFjayksIHRoaXMpOwotICAgIH0KLQotICAgIH5XZWJWaWV3RG93bmxvYWRUZXN0KCkKLSAgICB7
Ci0gICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZCh3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X2NvbnRleHQobV93ZWJWaWV3KSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwg
MCwgMCwgdGhpcyk7Ci0gICAgfQotCi0gICAgdm9pZCB3YWl0VW50aWxEb3dubG9hZFN0YXJ0ZWQo
KQotICAgIHsKLSAgICAgICAgbV9kb3dubG9hZCA9IDA7Ci0gICAgICAgIGdfbWFpbl9sb29wX3J1
bihtX21haW5Mb29wKTsKLSAgICAgICAgZ19hc3NlcnQobV9kb3dubG9hZC5nZXQoKSk7Ci0gICAg
fQotCi0gICAgc3RhdGljIGdib29sZWFuIGRvd25sb2FkRGVjaWRlRGVzdGluYXRpb25DYWxsYmFj
ayhXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IGdjaGFyKiBzdWdnZXN0ZWRGaWxlbmFt
ZSwgV2ViVmlld0Rvd25sb2FkVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIEdPd25QdHI8Y2hh
cj4gZGVzdGluYXRpb24oZ19idWlsZF9maWxlbmFtZShrVGVtcERpcmVjdG9yeSwgc3VnZ2VzdGVk
RmlsZW5hbWUsIE5VTEwpKTsKLSAgICAgICAgR093blB0cjxjaGFyPiBkZXN0aW5hdGlvblVSSShn
X2ZpbGVuYW1lX3RvX3VyaShkZXN0aW5hdGlvbi5nZXQoKSwgMCwgMCkpOwotICAgICAgICB3ZWJr
aXRfZG93bmxvYWRfc2V0X2Rlc3RpbmF0aW9uKGRvd25sb2FkLCBkZXN0aW5hdGlvblVSSS5nZXQo
KSk7Ci0gICAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGRvd25s
b2FkRmluaXNoZWRDYWxsYmFjayhXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIFdlYlZpZXdEb3du
bG9hZFRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICB0ZXN0LT5xdWl0TWFpbkxvb3AoKTsKLSAg
ICB9Ci0KLSAgICB2b2lkIHdhaXRVbnRpbERvd25sb2FkRmluaXNoZWQoKQotICAgIHsKLSAgICAg
ICAgZ19zaWduYWxfY29ubmVjdChtX2Rvd25sb2FkLmdldCgpLCAiZGVjaWRlLWRlc3RpbmF0aW9u
IiwgR19DQUxMQkFDSyhkb3dubG9hZERlY2lkZURlc3RpbmF0aW9uQ2FsbGJhY2spLCB0aGlzKTsK
LSAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX2Rvd25sb2FkLmdldCgpLCAiZmluaXNoZWQiLCBH
X0NBTExCQUNLKGRvd25sb2FkRmluaXNoZWRDYWxsYmFjayksIHRoaXMpOwotICAgICAgICBnX21h
aW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgR1JlZlB0cjxXZWJLaXREb3du
bG9hZD4gbV9kb3dubG9hZDsKLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3RG93bmxvYWRV
UkkoV2ViVmlld0Rvd25sb2FkVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBHUmVm
UHRyPFdlYktpdERvd25sb2FkPiBkb3dubG9hZCA9IGFkb3B0R1JlZih3ZWJraXRfd2ViX3ZpZXdf
ZG93bmxvYWRfdXJpKHRlc3QtPm1fd2ViVmlldywga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3Rl
c3QucGRmIikuZGF0YSgpKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsRG93bmxvYWRTdGFydGVkKCk7
Ci0gICAgZ19hc3NlcnQodGVzdC0+bV93ZWJWaWV3ID09IHdlYmtpdF9kb3dubG9hZF9nZXRfd2Vi
X3ZpZXcoZG93bmxvYWQuZ2V0KCkpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxEb3dubG9hZEZpbmlz
aGVkKCk7Ci0KLSAgICBHUmVmUHRyPEdGaWxlPiBkb3dubG9hZEZpbGUgPSBhZG9wdEdSZWYoZ19m
aWxlX25ld19mb3JfdXJpKHdlYmtpdF9kb3dubG9hZF9nZXRfZGVzdGluYXRpb24oZG93bmxvYWQu
Z2V0KCkpKSk7Ci0gICAgR1JlZlB0cjxHRmlsZUluZm8+IGRvd25sb2FkRmlsZUluZm8gPSBhZG9w
dEdSZWYoZ19maWxlX3F1ZXJ5X2luZm8oZG93bmxvYWRGaWxlLmdldCgpLCBHX0ZJTEVfQVRUUklC
VVRFX1NUQU5EQVJEX1NJWkUsIHN0YXRpY19jYXN0PEdGaWxlUXVlcnlJbmZvRmxhZ3M+KDApLCAw
LCAwKSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGdfZmlsZV9pbmZvX2dldF9zaXplKGRvd25sb2Fk
RmlsZUluZm8uZ2V0KCkpLCA+LCAwKTsKLSAgICBnX2ZpbGVfZGVsZXRlKGRvd25sb2FkRmlsZS5n
ZXQoKSwgMCwgMCk7Ci19Ci0KLWNsYXNzIFBvbGljeVJlc3BvbnNlRG93bmxvYWRUZXN0OiBwdWJs
aWMgV2ViVmlld0Rvd25sb2FkVGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklY
VFVSRShQb2xpY3lSZXNwb25zZURvd25sb2FkVGVzdCk7Ci0KLSAgICBzdGF0aWMgZ2Jvb2xlYW4g
ZGVjaWRlUG9saWN5Q2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0UG9saWN5
RGVjaXNpb24qIGRlY2lzaW9uLCBXZWJLaXRQb2xpY3lEZWNpc2lvblR5cGUgdHlwZSwgUG9saWN5
UmVzcG9uc2VEb3dubG9hZFRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICBpZiAodHlwZSAhPSBX
RUJLSVRfUE9MSUNZX0RFQ0lTSU9OX1RZUEVfUkVTUE9OU0UpCi0gICAgICAgICAgICByZXR1cm4g
RkFMU0U7Ci0KLSAgICAgICAgd2Via2l0X3BvbGljeV9kZWNpc2lvbl9kb3dubG9hZChkZWNpc2lv
bik7Ci0gICAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQotICAgIFBvbGljeVJlc3BvbnNlRG93
bmxvYWRUZXN0KCkKLSAgICB7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAi
ZGVjaWRlLXBvbGljeSIsIEdfQ0FMTEJBQ0soZGVjaWRlUG9saWN5Q2FsbGJhY2spLCB0aGlzKTsK
LSAgICB9Ci0KLSAgICB+UG9saWN5UmVzcG9uc2VEb3dubG9hZFRlc3QoKQotICAgIHsKLSAgICAg
ICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fd2ViVmlldywgR19TSUdO
QUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7Ci0gICAgfQotCi0gICAgdm9pZCBjYW5j
ZWxEb3dubG9hZEFuZFdhaXRVbnRpbEZpbmlzaGVkKCkKLSAgICB7Ci0gICAgICAgIHdlYmtpdF9k
b3dubG9hZF9jYW5jZWwobV9kb3dubG9hZC5nZXQoKSk7Ci0gICAgICAgIHdhaXRVbnRpbERvd25s
b2FkRmluaXNoZWQoKTsKLSAgICAgICAgbV9kb3dubG9hZCA9IDA7Ci0gICAgfQotfTsKLQotc3Rh
dGljIHZvaWQgdGVzdFBvbGljeVJlc3BvbnNlRG93bmxvYWQoUG9saWN5UmVzcG9uc2VEb3dubG9h
ZFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgLy8gVGVzdCB0aGF0IGEgZG93bmxv
YWQgc3RhcnRlZCBieSB0aGUgdGhlIHBvbGljeSBjaGVja2VyIGNvbnRhaW5zIHRoZSB3ZWIgdmll
dy4KLSAgICBDU3RyaW5nIHJlcXVlc3RVUkkgPSBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvdGVz
dC5wZGYiKS5kYXRhKCk7Ci0gICAgdGVzdC0+bG9hZFVSSShyZXF1ZXN0VVJJLmRhdGEoKSk7Ci0g
ICAgdGVzdC0+d2FpdFVudGlsRG93bmxvYWRTdGFydGVkKCk7Ci0KLSAgICBXZWJLaXRVUklSZXF1
ZXN0KiByZXF1ZXN0ID0gd2Via2l0X2Rvd25sb2FkX2dldF9yZXF1ZXN0KHRlc3QtPm1fZG93bmxv
YWQuZ2V0KCkpOwotICAgIGdfYXNzZXJ0KHJlcXVlc3QpOwotICAgIEFTU0VSVF9DTVBfQ1NUUklO
Ryh3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KSwgPT0sIHJlcXVlc3RVUkkpOwot
Ci0gICAgZ19hc3NlcnQodGVzdC0+bV93ZWJWaWV3ID09IHdlYmtpdF9kb3dubG9hZF9nZXRfd2Vi
X3ZpZXcodGVzdC0+bV9kb3dubG9hZC5nZXQoKSkpOwotICAgIHRlc3QtPmNhbmNlbERvd25sb2Fk
QW5kV2FpdFVudGlsRmluaXNoZWQoKTsKLX0KLQotdm9pZCBiZWZvcmVBbGwoKQotewotICAgIGtT
ZXJ2ZXIgPSBuZXcgV2ViS2l0VGVzdFNlcnZlcigpOwotICAgIGtTZXJ2ZXItPnJ1bihzZXJ2ZXJD
YWxsYmFjayk7Ci0KLSAgICBrVGVtcERpcmVjdG9yeSA9IGdfZGlyX21ha2VfdG1wKCJXZWJLaXQy
VGVzdHMtWFhYWFhYIiwgMCk7Ci0gICAgZ19hc3NlcnQoa1RlbXBEaXJlY3RvcnkpOwotCi0gICAg
RG93bmxvYWRUZXN0OjphZGQoIkRvd25sb2FkcyIsICJsb2NhbC1maWxlIiwgdGVzdERvd25sb2Fk
TG9jYWxGaWxlKTsKLSAgICBEb3dubG9hZEVycm9yVGVzdDo6YWRkKCJEb3dubG9hZHMiLCAibG9j
YWwtZmlsZS1lcnJvciIsIHRlc3REb3dubG9hZExvY2FsRmlsZUVycm9yKTsKLSAgICBEb3dubG9h
ZFRlc3Q6OmFkZCgiRG93bmxvYWRzIiwgInJlbW90ZS1maWxlIiwgdGVzdERvd25sb2FkUmVtb3Rl
RmlsZSk7Ci0gICAgRG93bmxvYWRFcnJvclRlc3Q6OmFkZCgiRG93bmxvYWRzIiwgInJlbW90ZS1m
aWxlLWVycm9yIiwgdGVzdERvd25sb2FkUmVtb3RlRmlsZUVycm9yKTsKLSAgICBXZWJWaWV3RG93
bmxvYWRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiZG93bmxvYWQtdXJpIiwgdGVzdFdlYlZp
ZXdEb3dubG9hZFVSSSk7Ci0gICAgUG9saWN5UmVzcG9uc2VEb3dubG9hZFRlc3Q6OmFkZCgiRG93
bmxvYWRzIiwgInBvbGljeS1kZWNpc2lvbi1kb3dubG9hZCIsIHRlc3RQb2xpY3lSZXNwb25zZURv
d25sb2FkKTsKLX0KLQotdm9pZCBhZnRlckFsbCgpCi17Ci0gICAgZGVsZXRlIGtTZXJ2ZXI7Ci0g
ICAgZ19ybWRpcihrVGVtcERpcmVjdG9yeSk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0RnJhbWUuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdEZyYW1lLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYTYzYjA3OS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9UZXN0RnJhbWUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotCi0jaW5jbHVkZSAiV2ViUHJvY2Vzc1Rlc3RSdW5uZXIuaCIKLSNpbmNsdWRlICJX
ZWJWaWV3VGVzdC5oIgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3ZWJraXQyL3dl
YmtpdDIuaD4KLQotc3RhdGljIFdlYlByb2Nlc3NUZXN0UnVubmVyKiB0ZXN0UnVubmVyOwotCi1z
dGF0aWMgdm9pZCB3ZWJraXRGcmFtZVRlc3RSdW4oV2ViVmlld1Rlc3QqIHRlc3QsIGNvbnN0IGNo
YXIqIHRlc3ROYW1lKQotewotICAgIHN0YXRpYyBjb25zdCBjaGFyKiB0ZXN0SFRNTCA9ICI8aHRt
bD48Ym9keT48L2JvZHk+PC9odG1sPiI7Ci0gICAgdGVzdC0+bG9hZEh0bWwodGVzdEhUTUwsIDAp
OwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgR1ZhcmlhbnRCdWls
ZGVyIGJ1aWxkZXI7Ci0gICAgZ192YXJpYW50X2J1aWxkZXJfaW5pdCgmYnVpbGRlciwgR19WQVJJ
QU5UX1RZUEVfVkFSRElDVCk7Ci0gICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKCZidWlsZGVyLCAi
e3N2fSIsICJwYWdlSUQiLCBnX3ZhcmlhbnRfbmV3X3VpbnQ2NCh3ZWJraXRfd2ViX3ZpZXdfZ2V0
X3BhZ2VfaWQodGVzdC0+bV93ZWJWaWV3KSkpOwotICAgIGdfYXNzZXJ0KHRlc3RSdW5uZXItPnJ1
blRlc3QoIldlYktpdEZyYW1lIiwgdGVzdE5hbWUsIGdfdmFyaWFudF9idWlsZGVyX2VuZCgmYnVp
bGRlcikpKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYktpdEZyYW1lTWFpbkZyYW1lKFdlYlZp
ZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHdlYmtpdEZyYW1lVGVzdFJ1bih0
ZXN0LCAibWFpbi1mcmFtZSIpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViS2l0RnJhbWVVUkko
V2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgd2Via2l0RnJhbWVUZXN0
UnVuKHRlc3QsICJ1cmkiKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYktpdEZyYW1lSmF2YVNj
cmlwdENvbnRleHQoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgd2Vi
a2l0RnJhbWVUZXN0UnVuKHRlc3QsICJqYXZhc2NyaXB0LWNvbnRleHQiKTsKLX0KLQotdm9pZCBi
ZWZvcmVBbGwoKQotewotICAgIHRlc3RSdW5uZXIgPSBuZXcgV2ViUHJvY2Vzc1Rlc3RSdW5uZXIo
KTsKLSAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3dlYl9leHRlbnNpb25zX2RpcmVjdG9yeSh3
ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSwgV0VCS0lUX1RFU1RfV0VCX0VYVEVOU0lP
TlNfRElSKTsKLQotICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdEZyYW1lIiwgIm1haW4tZnJh
bWUiLCB0ZXN0V2ViS2l0RnJhbWVNYWluRnJhbWUpOwotICAgIFdlYlZpZXdUZXN0OjphZGQoIldl
YktpdEZyYW1lIiwgInVyaSIsIHRlc3RXZWJLaXRGcmFtZVVSSSk7Ci0gICAgV2ViVmlld1Rlc3Q6
OmFkZCgiV2ViS2l0RnJhbWUiLCAiamF2YXNjcmlwdC1jb250ZXh0IiwgdGVzdFdlYktpdEZyYW1l
SmF2YVNjcmlwdENvbnRleHQpOwotfQotCi12b2lkIGFmdGVyQWxsKCkKLXsKLSAgICBkZWxldGUg
dGVzdFJ1bm5lcjsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL1Rlc3RJbnNwZWN0b3IuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvVGVzdEluc3BlY3Rvci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDFmMDQzMDMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvVGVzdEluc3BlY3Rvci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzNTYgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0KLSNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
LSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Ci0KLWNsYXNzIEluc3BlY3RvclRlc3Q6
IHB1YmxpYyBXZWJWaWV3VGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVS
RShJbnNwZWN0b3JUZXN0KTsKLQotICAgIGVudW0gSW5zcGVjdG9yRXZlbnRzIHsKLSAgICAgICAg
T3BlbldpbmRvdywKLSAgICAgICAgQnJpbmdUb0Zyb250LAotICAgICAgICBDbG9zZWQsCi0gICAg
ICAgIEF0dGFjaCwKLSAgICAgICAgRGV0YWNoCi0gICAgfTsKLQotICAgIHN0YXRpYyBnYm9vbGVh
biBvcGVuV2luZG93Q2FsbGJhY2soV2ViS2l0V2ViSW5zcGVjdG9yKiwgSW5zcGVjdG9yVGVzdCog
dGVzdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0ZXN0LT5vcGVuV2luZG93KCk7Ci0gICAgfQot
Ci0gICAgc3RhdGljIGdib29sZWFuIGJyaW5nVG9Gcm9udENhbGxiYWNrKFdlYktpdFdlYkluc3Bl
Y3RvciosIEluc3BlY3RvclRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICByZXR1cm4gdGVzdC0+
YnJpbmdUb0Zyb250KCk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgY2xvc2VkQ2FsbGJhY2so
V2ViS2l0V2ViSW5zcGVjdG9yKiwgSW5zcGVjdG9yVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0ZXN0LT5jbG9zZWQoKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZ2Jvb2xlYW4gYXR0
YWNoQ2FsbGJhY2soV2ViS2l0V2ViSW5zcGVjdG9yKiwgSW5zcGVjdG9yVGVzdCogdGVzdCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB0ZXN0LT5hdHRhY2goKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMg
Z2Jvb2xlYW4gZGV0YWNoQ2FsbGJhY2soV2ViS2l0V2ViSW5zcGVjdG9yKiwgSW5zcGVjdG9yVGVz
dCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0ZXN0LT5kZXRhY2goKTsKLSAgICB9Ci0K
LSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZ01pbmltdW1BdHRhY2hlZEluc3BlY3RvcldpZHRo
ID0gNzUwOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBnTWluaW11bUF0dGFjaGVkSW5zcGVj
dG9ySGVpZ2h0ID0gMjUwOwotCi0gICAgSW5zcGVjdG9yVGVzdCgpCi0gICAgICAgIDogV2ViVmll
d1Rlc3QoKQotICAgICAgICAsIG1faW5zcGVjdG9yKHdlYmtpdF93ZWJfdmlld19nZXRfaW5zcGVj
dG9yKG1fd2ViVmlldykpCi0gICAgewotICAgICAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJs
ZV9kZXZlbG9wZXJfZXh0cmFzKHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3MobV93ZWJWaWV3
KSwgVFJVRSk7Ci0gICAgICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMo
R19PQkpFQ1QobV9pbnNwZWN0b3IpKTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX2luc3Bl
Y3RvciwgIm9wZW4td2luZG93IiwgR19DQUxMQkFDSyhvcGVuV2luZG93Q2FsbGJhY2spLCB0aGlz
KTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX2luc3BlY3RvciwgImJyaW5nLXRvLWZyb250
IiwgR19DQUxMQkFDSyhicmluZ1RvRnJvbnRDYWxsYmFjayksIHRoaXMpOwotICAgICAgICBnX3Np
Z25hbF9jb25uZWN0KG1faW5zcGVjdG9yLCAiY2xvc2VkIiwgR19DQUxMQkFDSyhjbG9zZWRDYWxs
YmFjayksIHRoaXMpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1faW5zcGVjdG9yLCAiYXR0
YWNoIiwgR19DQUxMQkFDSyhhdHRhY2hDYWxsYmFjayksIHRoaXMpOwotICAgICAgICBnX3NpZ25h
bF9jb25uZWN0KG1faW5zcGVjdG9yLCAiZGV0YWNoIiwgR19DQUxMQkFDSyhkZXRhY2hDYWxsYmFj
ayksIHRoaXMpOwotICAgIH0KLQotICAgIH5JbnNwZWN0b3JUZXN0KCkKLSAgICB7Ci0gICAgICAg
IGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX2luc3BlY3RvciwgR19TSUdO
QUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7Ci0gICAgfQotCi0gICAgdmlydHVhbCBi
b29sIG9wZW5XaW5kb3coKQotICAgIHsKLSAgICAgICAgbV9ldmVudHMuYXBwZW5kKE9wZW5XaW5k
b3cpOwotICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3ApOwotICAgICAgICByZXR1
cm4gVFJVRTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgYnJpbmdUb0Zyb250KCkKLSAgICB7
Ci0gICAgICAgIG1fZXZlbnRzLmFwcGVuZChCcmluZ1RvRnJvbnQpOwotICAgICAgICBnX21haW5f
bG9vcF9xdWl0KG1fbWFpbkxvb3ApOwotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0g
ICAgdmlydHVhbCB2b2lkIGNsb3NlZCgpCi0gICAgewotICAgICAgICBtX2V2ZW50cy5hcHBlbmQo
Q2xvc2VkKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgYXR0YWNoKCkKLSAgICB7Ci0gICAg
ICAgIG1fZXZlbnRzLmFwcGVuZChBdHRhY2gpOwotICAgICAgICByZXR1cm4gVFJVRTsKLSAgICB9
Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZGV0YWNoKCkKLSAgICB7Ci0gICAgICAgIG1fZXZlbnRzLmFw
cGVuZChEZXRhY2gpOwotICAgICAgICByZXR1cm4gVFJVRTsKLSAgICB9Ci0KLQotICAgIHN0YXRp
YyBnYm9vbGVhbiBzaG93SWRsZShJbnNwZWN0b3JUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAg
d2Via2l0X3dlYl9pbnNwZWN0b3Jfc2hvdyh0ZXN0LT5tX2luc3BlY3Rvcik7Ci0gICAgICAgIHJl
dHVybiBGQUxTRTsKLSAgICB9Ci0KLSAgICB2b2lkIHNob3coKQotICAgIHsKLSAgICAgICAgZ19p
ZGxlX2FkZChyZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihzaG93SWRsZSksIHRoaXMpOwot
ICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgdm9pZCBy
ZXNpemVWaWV3QW5kQXR0YWNoKCkKLSAgICB7Ci0gICAgICAgIC8vIFJlc2l6ZSB0aGUgdmlldyB0
byBtYWtlIHJvb20gZm9yIHRoZSBpbnNwZWN0b3IuCi0gICAgICAgIHJlc2l6ZVZpZXcoZ01pbmlt
dW1BdHRhY2hlZEluc3BlY3RvcldpZHRoLCAoZ01pbmltdW1BdHRhY2hlZEluc3BlY3RvckhlaWdo
dCArIDEpICogNCAvIDMpOwotICAgICAgICB3ZWJraXRfd2ViX2luc3BlY3Rvcl9hdHRhY2gobV9p
bnNwZWN0b3IpOwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiBkZXRhY2hJZGxlKEluc3Bl
Y3RvclRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICB3ZWJraXRfd2ViX2luc3BlY3Rvcl9kZXRh
Y2godGVzdC0+bV9pbnNwZWN0b3IpOwotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0g
ICAgdm9pZCBkZXRhY2hBbmRXYWl0VW50aWxXaW5kb3dPcGVuZWQoKQotICAgIHsKLSAgICAgICAg
Z19pZGxlX2FkZChyZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihkZXRhY2hJZGxlKSwgdGhp
cyk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAgICB9Ci0KLSAgICB2
b2lkIGNsb3NlKCkKLSAgICB7Ci0gICAgICAgIHdlYmtpdF93ZWJfaW5zcGVjdG9yX2Nsb3NlKG1f
aW5zcGVjdG9yKTsKLSAgICB9Ci0KLSAgICBXZWJLaXRXZWJJbnNwZWN0b3IqIG1faW5zcGVjdG9y
OwotICAgIFZlY3RvcjxJbnNwZWN0b3JFdmVudHM+IG1fZXZlbnRzOwotfTsKLQotc3RhdGljIHZv
aWQgdGVzdEluc3BlY3RvckRlZmF1bHQoSW5zcGVjdG9yVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRl
cikKLXsKLSAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoR1RLX1dJTkRP
V19UT1BMRVZFTCk7Ci0gICAgdGVzdC0+cmVzaXplVmlldygyMDAsIDIwMCk7Ci0gICAgdGVzdC0+
bG9hZEh0bWwoIjxodG1sPjxib2R5PjxwPldlYktpdEdUSysgSW5zcGVjdG9yIHRlc3Q8L3A+PC9i
b2R5PjwvaHRtbD4iLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQot
ICAgIHRlc3QtPnNob3coKTsKLSAgICAvLyBXZSBkb24ndCBhZGQgdGhlIHZpZXcgdG8gYSBjb250
YWluZXIsIHNvIGNvbnN1bWUgdGhlIHdlYWsgcmVmIHdpdGggR1JlZlB0ci4KLSAgICBHUmVmUHRy
PFdlYktpdFdlYlZpZXdCYXNlPiBpbnNwZWN0b3JWaWV3ID0gd2Via2l0X3dlYl9pbnNwZWN0b3Jf
Z2V0X3dlYl92aWV3KHRlc3QtPm1faW5zcGVjdG9yKTsKLSAgICBnX2Fzc2VydChpbnNwZWN0b3JW
aWV3LmdldCgpKTsKLSAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlz
aGVzKEdfT0JKRUNUKGluc3BlY3RvclZpZXcuZ2V0KCkpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0
X3dlYl9pbnNwZWN0b3JfaXNfYXR0YWNoZWQodGVzdC0+bV9pbnNwZWN0b3IpKTsKLSAgICBnX2Fz
c2VydF9jbXB1aW50KHdlYmtpdF93ZWJfaW5zcGVjdG9yX2dldF9hdHRhY2hlZF9oZWlnaHQodGVz
dC0+bV9pbnNwZWN0b3IpLCA9PSwgMCk7Ci0gICAgVmVjdG9yPEluc3BlY3RvclRlc3Q6Okluc3Bl
Y3RvckV2ZW50cz4mIGV2ZW50cyA9IHRlc3QtPm1fZXZlbnRzOwotICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHMuc2l6ZSgpLCA9PSwgMSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwg
PT0sIEluc3BlY3RvclRlc3Q6Ok9wZW5XaW5kb3cpOwotICAgIHRlc3QtPm1fZXZlbnRzLmNsZWFy
KCk7Ci0KLSAgICB0ZXN0LT5zaG93KCk7Ci0gICAgZXZlbnRzID0gdGVzdC0+bV9ldmVudHM7Ci0g
ICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAxKTsKLSAgICBnX2Fzc2VydF9j
bXBpbnQoZXZlbnRzWzBdLCA9PSwgSW5zcGVjdG9yVGVzdDo6QnJpbmdUb0Zyb250KTsKLSAgICB0
ZXN0LT5tX2V2ZW50cy5jbGVhcigpOwotCi0gICAgdGVzdC0+cmVzaXplVmlld0FuZEF0dGFjaCgp
OwotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfaW5zcGVjdG9yX2lzX2F0dGFjaGVkKHRlc3QtPm1f
aW5zcGVjdG9yKSk7Ci0gICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfd2ViX2luc3BlY3Rvcl9n
ZXRfYXR0YWNoZWRfaGVpZ2h0KHRlc3QtPm1faW5zcGVjdG9yKSwgPj0sIEluc3BlY3RvclRlc3Q6
OmdNaW5pbXVtQXR0YWNoZWRJbnNwZWN0b3JIZWlnaHQpOwotICAgIGV2ZW50cyA9IHRlc3QtPm1f
ZXZlbnRzOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgMSk7Ci0gICAg
Z19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIEluc3BlY3RvclRlc3Q6OkF0dGFjaCk7Ci0g
ICAgdGVzdC0+bV9ldmVudHMuY2xlYXIoKTsKLQotICAgIHRlc3QtPmRldGFjaEFuZFdhaXRVbnRp
bFdpbmRvd09wZW5lZCgpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX2luc3BlY3Rvcl9pc19h
dHRhY2hlZCh0ZXN0LT5tX2luc3BlY3RvcikpOwotICAgIGV2ZW50cyA9IHRlc3QtPm1fZXZlbnRz
OwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgMik7Ci0gICAgZ19hc3Nl
cnRfY21waW50KGV2ZW50c1swXSwgPT0sIEluc3BlY3RvclRlc3Q6OkRldGFjaCk7Ci0gICAgZ19h
c3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIEluc3BlY3RvclRlc3Q6Ok9wZW5XaW5kb3cpOwot
ICAgIHRlc3QtPm1fZXZlbnRzLmNsZWFyKCk7Ci0KLSAgICB0ZXN0LT5jbG9zZSgpOwotICAgIGV2
ZW50cyA9IHRlc3QtPm1fZXZlbnRzOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgp
LCA9PSwgMSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIEluc3BlY3RvclRl
c3Q6OkNsb3NlZCk7Ci0gICAgdGVzdC0+bV9ldmVudHMuY2xlYXIoKTsKLX0KLQotY2xhc3MgQ3Vz
dG9tSW5zcGVjdG9yVGVzdDogcHVibGljIEluc3BlY3RvclRlc3QgewotcHVibGljOgotICAgIE1B
S0VfR0xJQl9URVNUX0ZJWFRVUkUoQ3VzdG9tSW5zcGVjdG9yVGVzdCk7Ci0KLSAgICBDdXN0b21J
bnNwZWN0b3JUZXN0KCkKLSAgICAgICAgOiBJbnNwZWN0b3JUZXN0KCkKLSAgICAgICAgLCBtX2lu
c3BlY3RvcldpbmRvdygwKQotICAgIHsKLSAgICB9Ci0KLSAgICB+Q3VzdG9tSW5zcGVjdG9yVGVz
dCgpCi0gICAgewotICAgICAgICBpZiAobV9pbnNwZWN0b3JXaW5kb3cpCi0gICAgICAgICAgICBn
dGtfd2lkZ2V0X2Rlc3Ryb3kobV9pbnNwZWN0b3JXaW5kb3cpOwotICAgIH0KLQotICAgIGJvb2wg
b3BlbldpbmRvdygpCi0gICAgewotICAgICAgICBnX2Fzc2VydCghbV9pbnNwZWN0b3JXaW5kb3cp
OwotICAgICAgICBtX2luc3BlY3RvcldpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1df
VE9QTEVWRUwpOwotICAgICAgICBXZWJLaXRXZWJWaWV3QmFzZSogaW5zcGVjdG9yVmlldyA9IHdl
YmtpdF93ZWJfaW5zcGVjdG9yX2dldF93ZWJfdmlldyhtX2luc3BlY3Rvcik7Ci0gICAgICAgIGdf
YXNzZXJ0KGluc3BlY3RvclZpZXcpOwotICAgICAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09O
VEFJTkVSKG1faW5zcGVjdG9yV2luZG93KSwgR1RLX1dJREdFVChpbnNwZWN0b3JWaWV3KSk7Ci0g
ICAgICAgIGd0a193aWRnZXRfc2hvd19hbGwobV9pbnNwZWN0b3JXaW5kb3cpOwotCi0gICAgICAg
IHJldHVybiBJbnNwZWN0b3JUZXN0OjpvcGVuV2luZG93KCk7Ci0gICAgfQotCi0gICAgdm9pZCBj
bG9zZWQoKQotICAgIHsKLSAgICAgICAgaWYgKG1faW5zcGVjdG9yV2luZG93KSB7Ci0gICAgICAg
ICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV9pbnNwZWN0b3JXaW5kb3cpOwotICAgICAgICAgICAg
bV9pbnNwZWN0b3JXaW5kb3cgPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIEluc3Bl
Y3RvclRlc3Q6OmNsb3NlZCgpOwotICAgIH0KLQotICAgIGJvb2wgYXR0YWNoKCkKLSAgICB7Ci0g
ICAgICAgIEdSZWZQdHI8V2ViS2l0V2ViVmlld0Jhc2U+IGluc3BlY3RvclZpZXcgPSB3ZWJraXRf
d2ViX2luc3BlY3Rvcl9nZXRfd2ViX3ZpZXcobV9pbnNwZWN0b3IpOwotICAgICAgICBpZiAobV9p
bnNwZWN0b3JXaW5kb3cpIHsKLSAgICAgICAgICAgIGd0a19jb250YWluZXJfcmVtb3ZlKEdUS19D
T05UQUlORVIobV9pbnNwZWN0b3JXaW5kb3cpLCBHVEtfV0lER0VUKGluc3BlY3RvclZpZXcuZ2V0
KCkpKTsKLSAgICAgICAgICAgIGd0a193aWRnZXRfZGVzdHJveShtX2luc3BlY3RvcldpbmRvdyk7
Ci0gICAgICAgICAgICBtX2luc3BlY3RvcldpbmRvdyA9IDA7Ci0gICAgICAgIH0KLQotICAgICAg
ICBHdGtXaWRnZXQqIHBhbmU7Ci0gICAgICAgIGlmIChndGtfYmluX2dldF9jaGlsZChHVEtfQklO
KG1fcGFyZW50V2luZG93KSkgPT0gR1RLX1dJREdFVChtX3dlYlZpZXcpKSB7Ci0gICAgICAgICAg
ICBHUmVmUHRyPFdlYktpdFdlYlZpZXc+IGluc3BlY3RlZFZpZXcgPSBtX3dlYlZpZXc7Ci0gICAg
ICAgICAgICBndGtfY29udGFpbmVyX3JlbW92ZShHVEtfQ09OVEFJTkVSKG1fcGFyZW50V2luZG93
KSwgR1RLX1dJREdFVChtX3dlYlZpZXcpKTsKLSAgICAgICAgICAgIHBhbmUgPSBndGtfcGFuZWRf
bmV3KEdUS19PUklFTlRBVElPTl9WRVJUSUNBTCk7Ci0gICAgICAgICAgICBndGtfcGFuZWRfYWRk
MShHVEtfUEFORUQocGFuZSksIEdUS19XSURHRVQobV93ZWJWaWV3KSk7Ci0gICAgICAgICAgICBn
dGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKG1fcGFyZW50V2luZG93KSwgcGFuZSk7Ci0g
ICAgICAgICAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKHBhbmUpOwotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIHBhbmUgPSBndGtfYmluX2dldF9jaGlsZChHVEtfQklOKG1fcGFyZW50V2luZG93
KSk7Ci0gICAgICAgIGd0a19wYW5lZF9zZXRfcG9zaXRpb24oR1RLX1BBTkVEKHBhbmUpLCB3ZWJr
aXRfd2ViX2luc3BlY3Rvcl9nZXRfYXR0YWNoZWRfaGVpZ2h0KG1faW5zcGVjdG9yKSk7Ci0gICAg
ICAgIGd0a19wYW5lZF9hZGQyKEdUS19QQU5FRChwYW5lKSwgR1RLX1dJREdFVChpbnNwZWN0b3JW
aWV3LmdldCgpKSk7Ci0KLSAgICAgICAgcmV0dXJuIEluc3BlY3RvclRlc3Q6OmF0dGFjaCgpOwot
ICAgIH0KLQotICAgIGJvb2wgZGV0YWNoKCkKLSAgICB7Ci0gICAgICAgIEdSZWZQdHI8V2ViS2l0
V2ViVmlld0Jhc2U+IGluc3BlY3RvclZpZXcgPSB3ZWJraXRfd2ViX2luc3BlY3Rvcl9nZXRfd2Vi
X3ZpZXcobV9pbnNwZWN0b3IpOwotICAgICAgICBHdGtXaWRnZXQqIHBhbmUgPSBndGtfYmluX2dl
dF9jaGlsZChHVEtfQklOKG1fcGFyZW50V2luZG93KSk7Ci0gICAgICAgIGdfYXNzZXJ0KEdUS19J
U19QQU5FRChwYW5lKSk7Ci0gICAgICAgIGd0a19jb250YWluZXJfcmVtb3ZlKEdUS19DT05UQUlO
RVIocGFuZSksIEdUS19XSURHRVQoaW5zcGVjdG9yVmlldy5nZXQoKSkpOwotICAgICAgICByZXR1
cm4gSW5zcGVjdG9yVGVzdDo6ZGV0YWNoKCk7Ci0gICAgfQotCi0gICAgdm9pZCBkZXN0cm95V2lu
ZG93KCkKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0KG1faW5zcGVjdG9yV2luZG93KTsKLSAgICAg
ICAgZ3RrX3dpZGdldF9kZXN0cm95KG1faW5zcGVjdG9yV2luZG93KTsKLSAgICAgICAgbV9pbnNw
ZWN0b3JXaW5kb3cgPSAwOwotICAgIH0KLQotICAgIEd0a1dpZGdldCogbV9pbnNwZWN0b3JXaW5k
b3c7Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0SW5zcGVjdG9yTWFudWFsQXR0YWNoRGV0YWNoKEN1
c3RvbUluc3BlY3RvclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+c2hv
d0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKEdUS19XSU5ET1dfVE9QTEVWRUwpOwotICAgIHRl
c3QtPnJlc2l6ZVZpZXcoMjAwLCAyMDApOwotICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9k
eT48cD5XZWJLaXRHVEsrIEluc3BlY3RvciB0ZXN0PC9wPjwvYm9keT48L2h0bWw+IiwgMCk7Ci0g
ICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICB0ZXN0LT5zaG93KCk7Ci0g
ICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVCh3
ZWJraXRfd2ViX2luc3BlY3Rvcl9nZXRfd2ViX3ZpZXcodGVzdC0+bV9pbnNwZWN0b3IpKSk7Ci0g
ICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfaW5zcGVjdG9yX2lzX2F0dGFjaGVkKHRlc3QtPm1faW5z
cGVjdG9yKSk7Ci0gICAgVmVjdG9yPEluc3BlY3RvclRlc3Q6Okluc3BlY3RvckV2ZW50cz4mIGV2
ZW50cyA9IHRlc3QtPm1fZXZlbnRzOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgp
LCA9PSwgMSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIEluc3BlY3RvclRl
c3Q6Ok9wZW5XaW5kb3cpOwotICAgIHRlc3QtPm1fZXZlbnRzLmNsZWFyKCk7Ci0KLSAgICB0ZXN0
LT5yZXNpemVWaWV3QW5kQXR0YWNoKCk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3dlYl9pbnNwZWN0
b3JfaXNfYXR0YWNoZWQodGVzdC0+bV9pbnNwZWN0b3IpKTsKLSAgICBnX2Fzc2VydF9jbXB1aW50
KHdlYmtpdF93ZWJfaW5zcGVjdG9yX2dldF9hdHRhY2hlZF9oZWlnaHQodGVzdC0+bV9pbnNwZWN0
b3IpLCA+PSwgSW5zcGVjdG9yVGVzdDo6Z01pbmltdW1BdHRhY2hlZEluc3BlY3RvckhlaWdodCk7
Ci0gICAgZXZlbnRzID0gdGVzdC0+bV9ldmVudHM7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50
cy5zaXplKCksID09LCAxKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgSW5z
cGVjdG9yVGVzdDo6QXR0YWNoKTsKLSAgICB0ZXN0LT5tX2V2ZW50cy5jbGVhcigpOwotCi0gICAg
dGVzdC0+ZGV0YWNoQW5kV2FpdFVudGlsV2luZG93T3BlbmVkKCk7Ci0gICAgZ19hc3NlcnQoIXdl
YmtpdF93ZWJfaW5zcGVjdG9yX2lzX2F0dGFjaGVkKHRlc3QtPm1faW5zcGVjdG9yKSk7Ci0gICAg
ZXZlbnRzID0gdGVzdC0+bV9ldmVudHM7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXpl
KCksID09LCAyKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgSW5zcGVjdG9y
VGVzdDo6RGV0YWNoKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgSW5zcGVj
dG9yVGVzdDo6T3BlbldpbmRvdyk7Ci0gICAgdGVzdC0+bV9ldmVudHMuY2xlYXIoKTsKLQotICAg
IHRlc3QtPnJlc2l6ZVZpZXdBbmRBdHRhY2goKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2lu
c3BlY3Rvcl9pc19hdHRhY2hlZCh0ZXN0LT5tX2luc3BlY3RvcikpOwotICAgIHRlc3QtPm1fZXZl
bnRzLmNsZWFyKCk7Ci0gICAgdGVzdC0+Y2xvc2UoKTsKLSAgICBldmVudHMgPSB0ZXN0LT5tX2V2
ZW50czsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDIpOwotICAgIGdf
YXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBJbnNwZWN0b3JUZXN0OjpEZXRhY2gpOwotICAg
IGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBJbnNwZWN0b3JUZXN0OjpDbG9zZWQpOwot
ICAgIHRlc3QtPm1fZXZlbnRzLmNsZWFyKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RJbnNwZWN0
b3JDdXN0b21Db250YWluZXJEZXN0cm95ZWQoQ3VzdG9tSW5zcGVjdG9yVGVzdCogdGVzdCwgZ2Nv
bnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQo
R1RLX1dJTkRPV19UT1BMRVZFTCk7Ci0gICAgdGVzdC0+cmVzaXplVmlldygyMDAsIDIwMCk7Ci0g
ICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxib2R5PjxwPldlYktpdEdUSysgSW5zcGVjdG9yIHRl
c3Q8L3A+PC9ib2R5PjwvaHRtbD4iLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNo
ZWQoKTsKLQotICAgIHRlc3QtPnNob3coKTsKLSAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0
ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHdlYmtpdF93ZWJfaW5zcGVjdG9yX2dldF93ZWJf
dmlldyh0ZXN0LT5tX2luc3BlY3RvcikpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl9pbnNw
ZWN0b3JfaXNfYXR0YWNoZWQodGVzdC0+bV9pbnNwZWN0b3IpKTsKLQotICAgIHRlc3QtPm1fZXZl
bnRzLmNsZWFyKCk7Ci0gICAgdGVzdC0+ZGVzdHJveVdpbmRvdygpOwotICAgIFZlY3RvcjxJbnNw
ZWN0b3JUZXN0OjpJbnNwZWN0b3JFdmVudHM+JiBldmVudHMgPSB0ZXN0LT5tX2V2ZW50czsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDEpOwotICAgIGdfYXNzZXJ0X2Nt
cGludChldmVudHNbMF0sID09LCBJbnNwZWN0b3JUZXN0OjpDbG9zZWQpOwotICAgIHRlc3QtPm1f
ZXZlbnRzLmNsZWFyKCk7Ci19Ci0KLXZvaWQgYmVmb3JlQWxsKCkKLXsKLSAgICBJbnNwZWN0b3JU
ZXN0OjphZGQoIldlYktpdFdlYkluc3BlY3RvciIsICJkZWZhdWx0IiwgdGVzdEluc3BlY3RvckRl
ZmF1bHQpOwotICAgIEN1c3RvbUluc3BlY3RvclRlc3Q6OmFkZCgiV2ViS2l0V2ViSW5zcGVjdG9y
IiwgIm1hbnVhbC1hdHRhY2gtZGV0YWNoIiwgdGVzdEluc3BlY3Rvck1hbnVhbEF0dGFjaERldGFj
aCk7Ci0gICAgQ3VzdG9tSW5zcGVjdG9yVGVzdDo6YWRkKCJXZWJLaXRXZWJJbnNwZWN0b3IiLCAi
Y3VzdG9tLWNvbnRhaW5lci1kZXN0cm95ZWQiLCB0ZXN0SW5zcGVjdG9yQ3VzdG9tQ29udGFpbmVy
RGVzdHJveWVkKTsKLX0KLQotdm9pZCBhZnRlckFsbCgpCi17Ci19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0SW5zcGVjdG9yU2VydmVyLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RJbnNwZWN0b3JT
ZXJ2ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjRiZjU0Li4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RJbnNwZWN0
b3JTZXJ2ZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjk0ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcyBMdGQuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAotICogQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IK
LSAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIldl
YlZpZXdUZXN0LmgiCi0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0vLyBOYW1lIG9mIHRoZSB0ZXN0IHNlcnZlciBhcHBs
aWNhdGlvbiBjcmVhdGluZyB0aGUgd2ViVmlldyBvYmplY3QuCi1zdGF0aWMgY29uc3QgY2hhciog
Z1Rlc3RTZXJ2ZXJBcHBOYW1lID0gIkluc3BlY3RvclRlc3RTZXJ2ZXIiOwotCi0vLyBNYXggc2Vj
b25kcyB0byB3YWl0IGZvciB0aGUgdGVzdCBzZXJ2ZXIgYmVmb3JlIGluc3BlY3RpbmcgaXQuCi1z
dGF0aWMgY29uc3QgaW50IGdNYXhXYWl0Rm9yQ2hpbGQgPSA1OwotCi0vLyBUaGUgUElEIGZvciB0
aGUgdGVzdCBzZXJ2ZXIgcnVubmluZywgc28gd2UgY2FuIGtpbGwgaXQgaWYgbmVlZGVkLgotc3Rh
dGljIEdQaWQgZ0NoaWxkUHJvY2Vzc1BpZCA9IDA7Ci0KLS8vIFdoZXRoZXIgdGhlIGNoaWxkIGhh
cyByZXBsaWVkIGFuZCBpdCdzIHJlYWR5Lgotc3RhdGljIGJvb2wgZ0NoaWxkSXNSZWFkeSA9IGZh
bHNlOwotCi1zdGF0aWMgdm9pZCBzdG9wVGVzdFNlcnZlcigpCi17Ci0gICAgLy8gRG8gbm90aGlu
ZyBpZiB0aGVyZSdzIG5vIHNlcnZlciBydW5uaW5nLgotICAgIGlmICghZ0NoaWxkUHJvY2Vzc1Bp
ZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZ19zcGF3bl9jbG9zZV9waWQoZ0NoaWxkUHJvY2Vz
c1BpZCk7Ci0gICAga2lsbChnQ2hpbGRQcm9jZXNzUGlkLCBTSUdURVJNKTsKLSAgICBnQ2hpbGRQ
cm9jZXNzUGlkID0gMDsKLX0KLQotc3RhdGljIHZvaWQgc2lnQWJvcnRIYW5kbGVyKGludCBzaWdO
dW0pCi17Ci0gICAgLy8gSnVzdCBzdG9wIHRoZSB0ZXN0IHNlcnZlciBpZiBTSUdBQlJUIHdhcyBy
ZWNlaXZlZC4KLSAgICBzdG9wVGVzdFNlcnZlcigpOwotfQotCi1zdGF0aWMgZ3BvaW50ZXIgdGVz
dFNlcnZlck1vbml0b3JUaHJlYWRGdW5jKGdwb2ludGVyKQotewotICAgIC8vIFdhaXQgZm9yIHRo
ZSBzcGVjaWZpZWQgdGltZW91dCB0byBoYXBwZW4uCi0gICAgZ191c2xlZXAoZ01heFdhaXRGb3JD
aGlsZCAqIEdfVVNFQ19QRVJfU0VDKTsKLQotICAgIC8vIEtpbGwgdGhlIGNoaWxkIHByb2Nlc3Mg
aWYgbm90IHJlYWR5IHlldC4KLSAgICBpZiAoIWdDaGlsZElzUmVhZHkpCi0gICAgICAgIHN0b3BU
ZXN0U2VydmVyKCk7Ci0KLSAgICBnX3RocmVhZF9leGl0KDApOwotICAgIHJldHVybiAwOwotfQot
Ci1zdGF0aWMgdm9pZCBzdGFydFRlc3RTZXJ2ZXJNb25pdG9yKCkKLXsKLSAgICBnQ2hpbGRJc1Jl
YWR5ID0gZmFsc2U7Ci0gICAgZ190aHJlYWRfbmV3KCJUZXN0U2VydmVyTW9uaXRvciIsIHRlc3RT
ZXJ2ZXJNb25pdG9yVGhyZWFkRnVuYywgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0YXJ0VGVzdFNl
cnZlcigpCi17Ci0gICAgLy8gUHJlcGFyZSBhcmd2W10gZm9yIHNwYXduaW5nIHRoZSBzZXJ2ZXIg
cHJvY2Vzcy4KLSAgICBHT3duUHRyPGNoYXI+IHRlc3RTZXJ2ZXJQYXRoKGdfYnVpbGRfZmlsZW5h
bWUoV0VCS0lUX0VYRUNfUEFUSCwgIldlYktpdDJHT2JqZWN0QVBJVGVzdHMiLCBnVGVzdFNlcnZl
ckFwcE5hbWUsIE5VTEwpKTsKLQotICAgIC8vIFdlIGluc3RhbGwgYSBoYW5kbGVyIHRvIGVuc3Vy
ZSB0aGF0IHdlIGtpbGwgdGhlIGNoaWxkIHByb2Nlc3MKLSAgICAvLyBpZiB0aGUgcGFyZW50IGRp
ZXMgYmVjYXVzZSBvZiB3aGF0ZXZlciB0aGUgcmVhc29uIGlzLgotICAgIHNpZ25hbChTSUdBQlJU
LCBzaWdBYm9ydEhhbmRsZXIpOwotCi0gICAgY2hhciogdGVzdFNlcnZlckFyZ3ZbMl07Ci0gICAg
dGVzdFNlcnZlckFyZ3ZbMF0gPSB0ZXN0U2VydmVyUGF0aC5nZXQoKTsKLSAgICB0ZXN0U2VydmVy
QXJndlsxXSA9IDA7Ci0KLSAgICAvLyBTcGF3biB0aGUgc2VydmVyLCBnZXR0aW5nIGl0cyBzdGRv
dXQgZmlsZSBkZXNjcmlwdG9yIHRvIHNldCBhCi0gICAgLy8gY29tbXVuaWNhdGlvbiBjaGFubmVs
LCBzbyB3ZSBrbm93IHdoZW4gaXQncyByZWFkeS4KLSAgICBpbnQgY2hpbGRTdGRvdXQgPSAwOwot
ICAgIGdfYXNzZXJ0KGdfc3Bhd25fYXN5bmNfd2l0aF9waXBlcygwLCB0ZXN0U2VydmVyQXJndiwg
MCwgc3RhdGljX2Nhc3Q8R1NwYXduRmxhZ3M+KDApLCAwLCAwLAotICAgICAgICAmZ0NoaWxkUHJv
Y2Vzc1BpZCwgMCwgJmNoaWxkU3Rkb3V0LCAwLCAwKSk7Ci0KLSAgICAvLyBTdGFydCBtb25pdG9y
aW5nIHRoZSB0ZXN0IHNlcnZlciAoaW4gYSBzZXBhcmF0ZSB0aHJlYWQpIHRvCi0gICAgLy8gZW5z
dXJlIHdlIGRvbid0IGJsb2NrIG9uIHRoZSBjaGlsZCBwcm9jZXNzIG1vcmUgdGhhbiBhIHRpbWVv
dXQuCi0gICAgc3RhcnRUZXN0U2VydmVyTW9uaXRvcigpOwotCi0gICAgY2hhciBtc2dbMl07Ci0g
ICAgR0lPQ2hhbm5lbCogaW9DaGFubmVsID0gZ19pb19jaGFubmVsX3VuaXhfbmV3KGNoaWxkU3Rk
b3V0KTsKLSAgICBpZiAoZ19pb19jaGFubmVsX3JlYWRfY2hhcnMoaW9DaGFubmVsLCBtc2csIDIs
IDAsIDApID09IEdfSU9fU1RBVFVTX05PUk1BTCkgewotICAgICAgICAvLyBDaGVjayB3aGV0aGVy
IHRoZSBzZXJ2ZXIgc2VudCBhIG1lc3NhZ2Ugc2F5aW5nIGl0J3MgcmVhZHkKLSAgICAgICAgLy8g
YW5kIHN0b3JlIHRoZSByZXN1bHQgZ2xvYmFsbHksIHNvIHRoZSBtb25pdG9yIGNhbiBzZWUgaXQu
Ci0gICAgICAgIGdDaGlsZElzUmVhZHkgPSBtc2dbMF0gPT0gJ08nICYmIG1zZ1sxXSA9PSAnSyc7
Ci0gICAgfQotICAgIGdfaW9fY2hhbm5lbF91bnJlZihpb0NoYW5uZWwpOwotICAgIGNsb3NlKGNo
aWxkU3Rkb3V0KTsKLQotICAgIC8vIFRoZSB0aW1lb3V0IHdhcyByZWFjaGVkIGFuZCB0aGUgc2Vy
dmVyIGlzIG5vdCByZWFkeSB5ZXQsIHNvCi0gICAgLy8gc3RvcCBpdCBpbm1lZGlhdGVseSwgYW5k
IGxldCB0aGUgdW5pdCB0ZXN0cyBmYWlsLgotICAgIGlmICghZ0NoaWxkSXNSZWFkeSkKLSAgICAg
ICAgc3RvcFRlc3RTZXJ2ZXIoKTsKLX0KLQotY2xhc3MgSW5zcGVjdG9yU2VydmVyVGVzdDogcHVi
bGljIFdlYlZpZXdUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKElu
c3BlY3RvclNlcnZlclRlc3QpOwotCi0gICAgSW5zcGVjdG9yU2VydmVyVGVzdCgpCi0gICAgICAg
IDogV2ViVmlld1Rlc3QoKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGdldFBhZ2VMaXN0KCkK
LSAgICB7Ci0gICAgICAgIGxvYWRIdG1sKCI8c2NyaXB0IHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRc
Ij5cbiIKLSAgICAgICAgICAgICJ2YXIgcGFnZXM7XG4iCi0gICAgICAgICAgICAidmFyIHhociA9
IG5ldyBYTUxIdHRwUmVxdWVzdDtcbiIKLSAgICAgICAgICAgICJ4aHIub3BlbihcIkdFVFwiLCBc
Ii9wYWdlbGlzdC5qc29uXCIpO1xuIgotICAgICAgICAgICAgInhoci5vbmxvYWQgPSBmdW5jdGlv
bihlKSB7XG4iCi0gICAgICAgICAgICAgICAgImlmICh4aHIuc3RhdHVzID09IDIwMCkge1xuIgot
ICAgICAgICAgICAgICAgICAgICAicGFnZXMgPSBKU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQp
O1xuIgotICAgICAgICAgICAgICAgICAgICAiZG9jdW1lbnQudGl0bGUgPSBcIk9LXCI7XG4iCi0g
ICAgICAgICAgICAgICAgIn0gZWxzZSBcbiIKLSAgICAgICAgICAgICAgICAgICAgImRvY3VtZW50
LnRpdGxlID0gXCJGQUlMXCI7XG4iCi0gICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAg
ICJ4aHIuc2VuZCgpO1xuIgotICAgICAgICAgICAgIjwvc2NyaXB0PlxuIiwKLSAgICAgICAgICAg
ICJodHRwOi8vMTI3LjAuMC4xOjI5OTkvIik7Ci0KLSAgICAgICAgd2FpdFVudGlsVGl0bGVDaGFu
Z2VkKCk7Ci0KLSAgICAgICAgaWYgKCFzdHJjbXAod2Via2l0X3dlYl92aWV3X2dldF90aXRsZSht
X3dlYlZpZXcpLCAiT0siKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICB+SW5zcGVjdG9yU2VydmVyVGVzdCgpCi0gICAgewot
ICAgIH0KLX07Ci0KLS8vIFRlc3QgdG8gZ2V0IGluc3BlY3RvciBzZXJ2ZXIgcGFnZSBsaXN0IGZy
b20gdGhlIHRlc3Qgc2VydmVyLgotLy8gU2hvdWxkIGNvbnRhaW4gb25seSBvbmUgZW50cnkgcG9p
bnRpbmcgdG8gaHR0cDovLzEyNy4wLjAuMToyOTk5L3dlYmluc3BlY3Rvci9NYWluLmh0bWw/cGFn
ZT0xCi1zdGF0aWMgdm9pZCB0ZXN0SW5zcGVjdG9yU2VydmVyUGFnZUxpc3QoSW5zcGVjdG9yU2Vy
dmVyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBHT3duUHRyPEdFcnJvcj4gZXJy
b3I7Ci0KLSAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoR1RLX1dJTkRP
V19UT1BMRVZFTCk7Ci0gICAgZ19hc3NlcnQodGVzdC0+Z2V0UGFnZUxpc3QoKSk7Ci0KLSAgICBX
ZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNj
cmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJwYWdlcy5sZW5ndGg7IiwgJmVycm9yLm91dFB0cigp
KTsKLSAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBnX2Fzc2VydCghZXJyb3Iu
Z2V0KCkpOwotICAgIGdfYXNzZXJ0X2NtcGludChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3Vs
dFRvTnVtYmVyKGphdmFzY3JpcHRSZXN1bHQpLCA9PSwgMSk7Ci0KLSAgICBqYXZhc2NyaXB0UmVz
dWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJwYWdlc1swXS5p
ZDsiLCAmZXJyb3Iub3V0UHRyKCkpOwotICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOwot
ICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7Ci0gICAgaW50IHBhZ2VJZCA9IFdlYlZpZXdUZXN0
OjpqYXZhc2NyaXB0UmVzdWx0VG9OdW1iZXIoamF2YXNjcmlwdFJlc3VsdCk7Ci0KLSAgICBHT3du
UHRyPGNoYXI+IHZhbHVlU3RyaW5nOwotICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5K
YXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoInBhZ2VzWzBdLnVybDsiLCAmZXJyb3Iub3V0
UHRyKCkpOwotICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOwotICAgIGdfYXNzZXJ0KCFl
cnJvci5nZXQoKSk7Ci0gICAgdmFsdWVTdHJpbmcuc2V0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0
UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIo
dmFsdWVTdHJpbmcuZ2V0KCksID09LCAiaHR0cDovLzEyNy4wLjAuMToyOTk5LyIpOwotCi0gICAg
amF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hl
ZCgicGFnZXNbMF0uaW5zcGVjdG9yVXJsOyIsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgZ19hc3Nl
cnQoamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKLSAgICB2
YWx1ZVN0cmluZy5zZXQoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0NTdHJpbmcoamF2
YXNjcmlwdFJlc3VsdCkpOwotICAgIFN0cmluZyB2YWxpZEluc3BlY3RvclVSTCA9IFN0cmluZygi
L01haW4uaHRtbD9wYWdlPSIpICsgU3RyaW5nOjpudW1iZXIocGFnZUlkKTsKLSAgICBBU1NFUlRf
Q01QX0NTVFJJTkcodmFsdWVTdHJpbmcuZ2V0KCksID09LCB2YWxpZEluc3BlY3RvclVSTC51dGY4
KCkpOwotfQotCi0vLyBUZXN0IHNlbmRpbmcgYSByYXcgcmVtb3RlIGRlYnVnZ2luZyBtZXNzYWdl
IHRocm91Z2ggb3VyIHdlYiBzb2NrZXQgc2VydmVyLgotLy8gRm9yIHRoaXMgc3BlY2lmaWMgbWVz
c2FnZSBzZWU6IGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vY2hyb21lL2RldnRvb2xzL2RvY3MvcHJv
dG9jb2wvdG90L3J1bnRpbWUuaHRtbCNjb21tYW5kLWV2YWx1YXRlCi1zdGF0aWMgdm9pZCB0ZXN0
UmVtb3RlRGVidWdnaW5nTWVzc2FnZShJbnNwZWN0b3JTZXJ2ZXJUZXN0KiB0ZXN0LCBnY29uc3Rw
b2ludGVyKQotewotICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZChHVEtf
V0lORE9XX1RPUExFVkVMKTsKLQotICAgIHRlc3QtPmxvYWRIdG1sKCI8c2NyaXB0IHR5cGU9XCJ0
ZXh0L2phdmFzY3JpcHRcIj5cbiIKLSAgICAgICAgInZhciBzb2NrZXQgPSBuZXcgV2ViU29ja2V0
KCd3czovLzEyNy4wLjAuMToyOTk5L2RldnRvb2xzL3BhZ2UvMScpO1xuIgotICAgICAgICAic29j
a2V0Lm9ubWVzc2FnZSA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHtcbiIKLSAgICAgICAgICAgICJ2YXIg
cmVzcG9uc2UgPSBKU09OLnBhcnNlKG1lc3NhZ2UuZGF0YSk7XG4iCi0gICAgICAgICAgICAiaWYg
KHJlc3BvbnNlLmlkID09PSAxKVxuIgotICAgICAgICAgICAgICAgICJkb2N1bWVudC50aXRsZSA9
IHJlc3BvbnNlLnJlc3VsdC5yZXN1bHQudmFsdWU7XG4iCi0gICAgICAgICAgICAiZWxzZVxuIgot
ICAgICAgICAgICAgICAgICJkb2N1bWVudC50aXRsZSA9IFwiRkFJTFwiO1xuIgotICAgICAgICAg
ICAgIn1cbiIKLSAgICAgICAgICAgICJzb2NrZXQub25vcGVuID0gZnVuY3Rpb24oKSB7XG4iCi0g
ICAgICAgICAgICAic29ja2V0LnNlbmQoJ3tcImlkXCI6IDEsIFwibWV0aG9kXCI6IFwiUnVudGlt
ZS5ldmFsdWF0ZVwiLCBcInBhcmFtc1wiOiB7XCJleHByZXNzaW9uXCI6IFwiMiArIDJcIiB9IH0n
KTtcbiIKLSAgICAgICAgIn1cbiIKLSAgICAgICAgIjwvc2NyaXB0PiIsCi0gICAgICAgICJodHRw
Oi8vMTI3LjAuMC4xOjI5OTkvIik7Ci0gICAgdGVzdC0+d2FpdFVudGlsVGl0bGVDaGFuZ2VkKCk7
Ci0KLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dldF90aXRsZSh0ZXN0LT5t
X3dlYlZpZXcpLCA9PSwgIjQiKTsKLX0KLQotc3RhdGljIHZvaWQgb3BlblJlbW90ZURlYnVnZ2lu
Z1Nlc3Npb24oSW5zcGVjdG9yU2VydmVyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAg
ICAvLyBUbyB0ZXN0IHRoZSB3aG9sZSBwaXBlbGluZSB0aGlzIGV4cGxvaXRzIGEgYmVoYXZpb3Ig
b2YgdGhlIGluc3BlY3RvciBmcm9udC1lbmQgd2hpY2ggd29uJ3QgcHJvdmlkZSB0aGUgcGFnZSBh
ZGRyZXNzIGFzIHRpdGxlIHVubGVzcyB0aGUKLSAgICAvLyBkZWJ1Z2dpbmcgc2Vzc2lvbiB3YXMg
ZXN0YWJsaXNoZWQgY29ycmVjdGx5IHRocm91Z2ggd2ViIHNvY2tldC4KLSAgICAvLyBJbiBvdXIg
Y2FzZSBwYWdlIFVSTCBzaG91bGQgYmUgaHR0cDovLzEyNy4wLjAuMToyOTk5LwotICAgIC8vIFNv
IHRoaXMgdGVzdCBjYXNlIHdpbGwgZmFpbCBpZjoKLSAgICAvLyAtIFRoZSBwYWdlIGxpc3QgZGlk
bid0IHJldHVybiBhIHZhbGlkIGluc3BlY3RvciBVUkwKLSAgICAvLyAtIE9yIHRoZSBmcm9udC1l
bmQgY291bGRuJ3QgYmUgbG9hZGVkIHRocm91Z2ggdGhlIGluc3BlY3RvciBIVFRQIHNlcnZlcgot
ICAgIC8vIC0gT3IgdGhlIHdlYiBzb2NrZXQgY29ubmVjdGlvbiBjb3VsZG4ndCBiZSBlc3RhYmxp
c2hlZCBiZXR3ZWVuIHRoZSBmcm9udC1lbmQgYW5kIHRoZSBwYWdlIHRocm91Z2ggdGhlIGluc3Bl
Y3RvciBzZXJ2ZXIKLSAgICAvLyBMZXQncyBzZWUgaWYgdGhpcyB0ZXN0IGlzbid0IHJhaXNpbmcg
dG9vIG1hbnkgZmFsc2UgcG9zaXRpdmVzLCBpbiB3aGljaCBjYXNlIHdlIHNob3VsZCB1c2UgYSBi
ZXR0ZXIgcHJlZGljYXRlIGlmIGF2YWlsYWJsZS4KLQotICAgIHRlc3QtPnNob3dJbldpbmRvd0Fu
ZFdhaXRVbnRpbE1hcHBlZChHVEtfV0lORE9XX1RPUExFVkVMKTsKLQotICAgIGdfYXNzZXJ0KHRl
c3QtPmdldFBhZ2VMaXN0KCkpOwotCi0gICAgR093blB0cjxHRXJyb3I+IGVycm9yOwotICAgIFdl
YktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2Ny
aXB0QW5kV2FpdFVudGlsRmluaXNoZWQoInBhZ2VzWzBdLmluc3BlY3RvclVybDsiLCAmZXJyb3Iu
b3V0UHRyKCkpOwotICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOwotICAgIGdfYXNzZXJ0
KCFlcnJvci5nZXQoKSk7Ci0KLSAgICBTdHJpbmcgcmVzb2x2ZWRVUkwgPSBTdHJpbmcoImh0dHA6
Ly8xMjcuMC4wLjE6Mjk5OS8iKSArIFN0cmluZzo6ZnJvbVVURjgoV2ViVmlld1Rlc3Q6OmphdmFz
Y3JpcHRSZXN1bHRUb0NTdHJpbmcoamF2YXNjcmlwdFJlc3VsdCkpOwotICAgIHRlc3QtPmxvYWRV
UkkocmVzb2x2ZWRVUkwudXRmOCgpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZp
bmlzaGVkKCk7Ci0KLSAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFu
ZFdhaXRVbnRpbEZpbmlzaGVkKCJ3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUo
J2xpJylbMF0udGl0bGUiLCAmZXJyb3Iub3V0UHRyKCkpOwotICAgIGdfYXNzZXJ0KGphdmFzY3Jp
cHRSZXN1bHQpOwotICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7Ci0KLSAgICBHT3duUHRyPGNo
YXI+IHRpdGxlKFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3Jp
cHRSZXN1bHQpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGl0bGUuZ2V0KCksID09LCAiaHR0cDov
LzEyNy4wLjAuMToyOTk5LyIpOwotfQotCi1zdGF0aWMgdm9pZCBzZW5kSW5jb21wbGV0ZVJlcXVl
c3QoSW5zcGVjdG9yU2VydmVyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBHT3du
UHRyPEdFcnJvcj4gZXJyb3I7Ci0KLSAgICAvLyBDb25uZWN0IHRvIHRoZSBpbnNwZWN0b3Igc2Vy
dmVyLgotICAgIEdSZWZQdHI8R1NvY2tldENsaWVudD4gY2xpZW50ID0gYWRvcHRHUmVmKGdfc29j
a2V0X2NsaWVudF9uZXcoKSk7Ci0gICAgR1JlZlB0cjxHU29ja2V0Q29ubmVjdGlvbj4gY29ubmVj
dGlvbiA9IGFkb3B0R1JlZihnX3NvY2tldF9jbGllbnRfY29ubmVjdF90b19ob3N0KGNsaWVudC5n
ZXQoKSwgIjEyNy4wLjAuMSIsIDI5OTksIDAsICZlcnJvci5vdXRQdHIoKSkpOwotICAgIGdfYXNz
ZXJ0X25vX2Vycm9yKGVycm9yLmdldCgpKTsKLQotICAgIC8vIFNlbmQgaW5jb21wbGV0ZSByZXF1
ZXN0IChtaXNzaW5nIGJsYW5rIGxpbmUgYWZ0ZXIgaGVhZGVycykgYW5kIGNoZWNrIGlmIGluc3Bl
Y3RvciBzZXJ2ZXIKLSAgICAvLyByZXBsaWVzLiBUaGUgc2VydmVyIHNob3VsZCBub3QgcmVwbHkg
dG8gYW4gaW5jb21wbGV0ZSByZXF1ZXN0IGFuZCB0aGUgdGVzdCBzaG91bGQgdGltZW91dAotICAg
IC8vIG9uIHJlYWQuCi0gICAgR091dHB1dFN0cmVhbSogb3N0cmVhbSA9IGdfaW9fc3RyZWFtX2dl
dF9vdXRwdXRfc3RyZWFtKEdfSU9fU1RSRUFNKGNvbm5lY3Rpb24uZ2V0KCkpKTsKLSAgICAvLyBS
ZXF1ZXN0IG1pc3NpbmcgYmxhbmsgbGluZSBhZnRlciBoZWFkZXJzLgotICAgIGNvbnN0IGdjaGFy
KiBpbmNvbXBsZXRlUmVxdWVzdCA9ICJHRVQgL2RldnRvb2xzL3BhZ2UvMSBIVFRQLzEuMVxyXG5I
b3N0OiBMb2NhbGhvc3RcclxuIjsKLSAgICBnX291dHB1dF9zdHJlYW1fd3JpdGUob3N0cmVhbSwg
aW5jb21wbGV0ZVJlcXVlc3QsIHN0cmxlbihpbmNvbXBsZXRlUmVxdWVzdCksIDAsICZlcnJvci5v
dXRQdHIoKSk7Ci0gICAgZ19hc3NlcnRfbm9fZXJyb3IoZXJyb3IuZ2V0KCkpOwotCi0gICAgR0lu
cHV0U3RyZWFtKiBpc3RyZWFtID0gZ19pb19zdHJlYW1fZ2V0X2lucHV0X3N0cmVhbShHX0lPX1NU
UkVBTShjb25uZWN0aW9uLmdldCgpKSk7Ci0gICAgY2hhciByZXNwb25zZVsxNl07Ci0gICAgbWVt
c2V0KHJlc3BvbnNlLCAwLCBzaXplb2YocmVzcG9uc2UpKTsKLSAgICBHUmVmUHRyPEdDYW5jZWxs
YWJsZT4gY2FuY2VsID0gYWRvcHRHUmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpOwotICAgIGdfaW5w
dXRfc3RyZWFtX3JlYWRfYXN5bmMoaXN0cmVhbSwgcmVzcG9uc2UsIHNpemVvZihyZXNwb25zZSkg
LSAxLCBHX1BSSU9SSVRZX0RFRkFVTFQsIGNhbmNlbC5nZXQoKSwgMCwgMCk7Ci0gICAgLy8gR2l2
ZSBhIGNoYW5jZSBmb3IgdGhlIHNlcnZlciB0byByZXBseS4KLSAgICB0ZXN0LT53YWl0KDEpOwot
ICAgIGdfY2FuY2VsbGFibGVfY2FuY2VsKGNhbmNlbC5nZXQoKSk7Ci0gICAgLy8gSWYgd2UgZ290
IGFueSBhbnN3ZXIgaXQgbWVhbnMgdGhlIHNlcnZlciByZXBsaWVkIHRvIGFuIGluY29tcGxldGUg
cmVxdWVzdCwgbGV0cyBmYWlsLgotICAgIGdfYXNzZXJ0KHJlc3BvbnNlWzBdID09ICdcMCcpOwot
fQotCi12b2lkIGJlZm9yZUFsbCgpCi17Ci0gICAgLy8gT3ZlcndyaXRlIFdFQktJVF9JTlNQRUNU
T1JfU0VSVkVSIHZhcmlhYmxlIHdpdGggZGVmYXVsdCBJUCBhZGRyZXNzIGJ1dCBkaWZmZXJlbnQg
cG9ydCB0byBhdm9pZCBjb25mbGljdCB3aXRoIHRoZSB0ZXN0IGluc3BlY3RvciBzZXJ2ZXIgcGFn
ZS4KLSAgICBnX3NldGVudigiV0VCS0lUX0lOU1BFQ1RPUl9TRVJWRVIiLCAiMTI3LjAuMC4xOjI5
OTgiLCBUUlVFKTsKLQotICAgIHN0YXJ0VGVzdFNlcnZlcigpOwotICAgIEluc3BlY3RvclNlcnZl
clRlc3Q6OmFkZCgiV2ViS2l0V2ViSW5zcGVjdG9yU2VydmVyIiwgInRlc3QtcGFnZS1saXN0Iiwg
dGVzdEluc3BlY3RvclNlcnZlclBhZ2VMaXN0KTsKLSAgICBJbnNwZWN0b3JTZXJ2ZXJUZXN0Ojph
ZGQoIldlYktpdFdlYkluc3BlY3RvclNlcnZlciIsICJ0ZXN0LXJlbW90ZS1kZWJ1Z2dpbmctbWVz
c2FnZSIsIHRlc3RSZW1vdGVEZWJ1Z2dpbmdNZXNzYWdlKTsKLSAgICBJbnNwZWN0b3JTZXJ2ZXJU
ZXN0OjphZGQoIldlYktpdFdlYkluc3BlY3RvclNlcnZlciIsICJ0ZXN0LW9wZW4tZGVidWdnaW5n
LXNlc3Npb24iLCBvcGVuUmVtb3RlRGVidWdnaW5nU2Vzc2lvbik7Ci0gICAgSW5zcGVjdG9yU2Vy
dmVyVGVzdDo6YWRkKCJXZWJLaXRXZWJJbnNwZWN0b3JTZXJ2ZXIiLCAidGVzdC1pbmNvbXBsZXRl
LXJlcXVlc3QiLCBzZW5kSW5jb21wbGV0ZVJlcXVlc3QpOwotCi19Ci0KLXZvaWQgYWZ0ZXJBbGwo
KQotewotICAgIHN0b3BUZXN0U2VydmVyKCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0TG9hZGVyQ2xpZW50LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RMb2FkZXJDbGllbnQuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzE5MTVlLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RMb2FkZXJDbGllbnQuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsNDY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIw
MTAgR3VzdGF2byBOb3JvbmhhIFNpbHZhCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEgSWdh
bGlhIFMuTC4KLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMSBNb3Rvcm9sYSBNb2JpbGl0
eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5j
bHVkZSAiTG9hZFRyYWNraW5nVGVzdC5oIgotI2luY2x1ZGUgIldlYktpdFRlc3RCdXMuaCIKLSNp
bmNsdWRlICJXZWJLaXRUZXN0U2VydmVyLmgiCi0jaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKLSNp
bmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8bGlic291cC9zb3VwLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgotCi1zdGF0aWMgV2ViS2l0VGVzdEJ1cyogYnVzOwotc3RhdGlj
IFdlYktpdFRlc3RTZXJ2ZXIqIGtTZXJ2ZXI7Ci0KLWNvbnN0IGNoYXIqIGtETlRIZWFkZXJOb3RQ
cmVzZW50ID0gIkROVCBoZWFkZXIgbm90IHByZXNlbnQiOwotCi1zdGF0aWMgdm9pZCB0ZXN0TG9h
ZGluZ1N0YXR1cyhMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyIGRhdGEpCi17
Ci0gICAgdGVzdC0+c2V0UmVkaXJlY3RVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL25vcm1h
bCIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIv
cmVkaXJlY3QiKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwot
Ci0gICAgVmVjdG9yPExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRFdmVudHM+JiBldmVudHMgPSB0ZXN0
LT5tX2xvYWRFdmVudHM7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCA0
KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6
UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwg
PT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFJlY2VpdmVkU2VydmVyUmVkaXJl
Y3QpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBMb2FkVHJhY2tpbmdUZXN0
OjpMb2FkQ29tbWl0dGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzNdLCA9PSwgTG9h
ZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdExvYWRp
bmdFcnJvcihMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRl
c3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2Vycm9yIikuZGF0YSgpKTsKLSAg
ICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIFZlY3RvcjxMb2FkVHJhY2tp
bmdUZXN0OjpMb2FkRXZlbnRzPiYgZXZlbnRzID0gdGVzdC0+bV9sb2FkRXZlbnRzOwotICAgIGdf
YXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgMyk7Ci0gICAgZ19hc3NlcnRfY21waW50
KGV2ZW50c1swXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQp
OwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQ
cm92aXNpb25hbExvYWRGYWlsZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09
LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOwotfQotCi1zdGF0aWMgdm9pZCBhc3Nl
cnROb3JtYWxMb2FkSGFwcGVuZWQoVmVjdG9yPExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRFdmVudHM+
JiBldmVudHMpCi17Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAzKTsK
LSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJv
dmlzaW9uYWxMb2FkU3RhcnRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0s
IExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRDb21taXR0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHNbMl0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOwotfQotCi1zdGF0
aWMgdm9pZCB0ZXN0TG9hZEh0bWwoTG9hZFRyYWNraW5nVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRl
cikKLXsKLSAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHk+SGVsbG8gV2ViS2l0LUdUSys8
L2JvZHk+PC9odG1sPiIsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwot
ICAgIGFzc2VydE5vcm1hbExvYWRIYXBwZW5lZCh0ZXN0LT5tX2xvYWRFdmVudHMpOwotfQotCi1z
dGF0aWMgdm9pZCB0ZXN0TG9hZEFsdGVybmF0ZUhUTUwoTG9hZFRyYWNraW5nVGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5sb2FkQWx0ZXJuYXRlSFRNTCgiPGh0bWw+PGJv
ZHk+QWx0ZXJuYXRlIHBhZ2U8L2JvZHk+PC9odG1sPiIsICJodHRwOi8vZXJyb3ItcGFnZS5mb28v
IiwgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgYXNzZXJ0Tm9y
bWFsTG9hZEhhcHBlbmVkKHRlc3QtPm1fbG9hZEV2ZW50cyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRl
c3RMb2FkUGxhaW5UZXh0KExvYWRUcmFja2luZ1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17
Ci0gICAgdGVzdC0+bG9hZFBsYWluVGV4dCgiSGVsbG8gV2ViS2l0LUdUSysiKTsKLSAgICB0ZXN0
LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBhc3NlcnROb3JtYWxMb2FkSGFwcGVuZWQo
dGVzdC0+bV9sb2FkRXZlbnRzKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdExvYWRSZXF1ZXN0KExv
YWRUcmFja2luZ1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgR1JlZlB0cjxXZWJL
aXRVUklSZXF1ZXN0PiByZXF1ZXN0KHdlYmtpdF91cmlfcmVxdWVzdF9uZXcoa1NlcnZlci0+Z2V0
VVJJRm9yUGF0aCgiL25vcm1hbCIpLmRhdGEoKSkpOwotICAgIHRlc3QtPmxvYWRSZXF1ZXN0KHJl
cXVlc3QuZ2V0KCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGFz
c2VydE5vcm1hbExvYWRIYXBwZW5lZCh0ZXN0LT5tX2xvYWRFdmVudHMpOwotfQotCi1jbGFzcyBM
b2FkU3RvcFRyYWNraW5nVGVzdCA6IHB1YmxpYyBMb2FkVHJhY2tpbmdUZXN0IHsKLXB1YmxpYzoK
LSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKExvYWRTdG9wVHJhY2tpbmdUZXN0KTsKLQotICAg
IHZpcnR1YWwgdm9pZCBsb2FkQ29tbWl0dGVkKCkKLSAgICB7Ci0gICAgICAgIExvYWRUcmFja2lu
Z1Rlc3Q6OmxvYWRDb21taXR0ZWQoKTsKLSAgICAgICAgd2Via2l0X3dlYl92aWV3X3N0b3BfbG9h
ZGluZyhtX3dlYlZpZXcpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgbG9hZEZhaWxlZChjb25z
dCBnY2hhciogZmFpbGluZ1VSSSwgR0Vycm9yKiBlcnJvcikKLSAgICB7Ci0gICAgICAgIGdfYXNz
ZXJ0KGdfZXJyb3JfbWF0Y2hlcyhlcnJvciwgV0VCS0lUX05FVFdPUktfRVJST1IsIFdFQktJVF9O
RVRXT1JLX0VSUk9SX0NBTkNFTExFRCkpOwotICAgICAgICBMb2FkVHJhY2tpbmdUZXN0Ojpsb2Fk
RmFpbGVkKGZhaWxpbmdVUkksIGVycm9yKTsKLSAgICB9Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0
TG9hZENhbmNlbGxlZChMb2FkU3RvcFRyYWNraW5nVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikK
LXsKLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9jYW5jZWxsZWQi
KS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgVmVj
dG9yPExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRFdmVudHM+JiBldmVudHMgPSB0ZXN0LT5tX2xvYWRF
dmVudHM7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCA0KTsKLSAgICBn
X2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9u
YWxMb2FkU3RhcnRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIExvYWRU
cmFja2luZ1Rlc3Q6OkxvYWRDb21taXR0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNb
Ml0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmFpbGVkKTsKLSAgICBnX2Fzc2VydF9jbXBp
bnQoZXZlbnRzWzNdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKLX0KLQot
c3RhdGljIHZvaWQgdGVzdFdlYlZpZXdUaXRsZShMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0LCBnY29u
c3Rwb2ludGVyKQotewotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfZ2V0X3RpdGxlKHRl
c3QtPm1fd2ViVmlldykpOwotICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48aGVhZD48dGl0bGU+
V2VsY29tZSB0byBXZWJLaXQtR1RLKyE8L3RpdGxlPjwvaGVhZD48L2h0bWw+IiwgMCk7Ci0gICAg
dGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtp
dF93ZWJfdmlld19nZXRfdGl0bGUodGVzdC0+bV93ZWJWaWV3KSwgPT0sICJXZWxjb21lIHRvIFdl
YktpdC1HVEsrISIpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1JlbG9hZChMb2FkVHJh
Y2tpbmdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIC8vIENoZWNrIHRoYXQgbm90
aGluZyBoYXBwZW5zIHdoZW4gdGhlcmUncyBub3RoaW5nIHRvIHJlbG9hZC4KLSAgICB0ZXN0LT5y
ZWxvYWQoKTsKLSAgICB0ZXN0LT53YWl0KDAuMjUpOyAvLyBXYWl0IGZvciBhIHF1YXJ0ZXIgb2Yg
YSBzZWNvbmQuCi0KLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9u
b3JtYWwiKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAg
IGFzc2VydE5vcm1hbExvYWRIYXBwZW5lZCh0ZXN0LT5tX2xvYWRFdmVudHMpOwotCi0gICAgdGVz
dC0+cmVsb2FkKCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgYXNz
ZXJ0Tm9ybWFsTG9hZEhhcHBlbmVkKHRlc3QtPm1fbG9hZEV2ZW50cyk7Ci19Ci0KLXN0YXRpYyB2
b2lkIHRlc3RMb2FkUHJvZ3Jlc3MoTG9hZFRyYWNraW5nVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRl
cikKLXsKLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9ub3JtYWwi
KS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGdfYXNz
ZXJ0X2NtcGZsb2F0KHRlc3QtPm1fZXN0aW1hdGVkUHJvZ3Jlc3MsID09LCAxKTsKLX0KLQotc3Rh
dGljIHZvaWQgdGVzdFdlYlZpZXdIaXN0b3J5TG9hZChMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0
aCgiL25vcm1hbCIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7
Ci0gICAgYXNzZXJ0Tm9ybWFsTG9hZEhhcHBlbmVkKHRlc3QtPm1fbG9hZEV2ZW50cyk7Ci0KLSAg
ICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9ub3JtYWwyIikuZGF0YSgp
KTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBhc3NlcnROb3JtYWxM
b2FkSGFwcGVuZWQodGVzdC0+bV9sb2FkRXZlbnRzKTsKLQotICAgIC8vIENoZWNrIHRoYXQgbG9h
ZCBwcm9jZXNzIGlzIHRoZSBzYW1lIGZvciBwYWdlcyBsb2FkZWQgZnJvbSBoaXN0b3J5IGNhY2hl
LgotICAgIHRlc3QtPmdvQmFjaygpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgp
OwotICAgIGFzc2VydE5vcm1hbExvYWRIYXBwZW5lZCh0ZXN0LT5tX2xvYWRFdmVudHMpOwotCi0g
ICAgdGVzdC0+Z29Gb3J3YXJkKCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7
Ci0gICAgYXNzZXJ0Tm9ybWFsTG9hZEhhcHBlbmVkKHRlc3QtPm1fbG9hZEV2ZW50cyk7Ci19Ci0K
LWNsYXNzIFZpZXdVUklUcmFja2luZ1Rlc3Q6IHB1YmxpYyBMb2FkVHJhY2tpbmdUZXN0IHsKLXB1
YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFZpZXdVUklUcmFja2luZ1Rlc3QpOwot
Ci0gICAgc3RhdGljIHZvaWQgdXJpQ2hhbmdlZChHT2JqZWN0KiwgR1BhcmFtU3BlYyosIFZpZXdV
UklUcmFja2luZ1Rlc3QqIHRlc3QpCi0gICAgewotICAgICAgICBnX2Fzc2VydF9jbXBzdHIodGVz
dC0+bV9hY3RpdmVVUkkuZGF0YSgpLCAhPSwgd2Via2l0X3dlYl92aWV3X2dldF91cmkodGVzdC0+
bV93ZWJWaWV3KSk7Ci0gICAgICAgIHRlc3QtPm1fYWN0aXZlVVJJID0gd2Via2l0X3dlYl92aWV3
X2dldF91cmkodGVzdC0+bV93ZWJWaWV3KTsKLSAgICB9Ci0KLSAgICBWaWV3VVJJVHJhY2tpbmdU
ZXN0KCkKLSAgICAgICAgOiBtX2FjdGl2ZVVSSSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaShtX3dl
YlZpZXcpKQotICAgIHsKLSAgICAgICAgZ19hc3NlcnQobV9hY3RpdmVVUkkuaXNOdWxsKCkpOwot
ICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgIm5vdGlmeTo6dXJpIiwgR19DQUxM
QkFDSyh1cmlDaGFuZ2VkKSwgdGhpcyk7Ci0gICAgfQotCi0gICAgdm9pZCBwcm92aXNpb25hbExv
YWRTdGFydGVkKCkKLSAgICB7Ci0gICAgICAgIGNoZWNrQWN0aXZlVVJJKCIvcmVkaXJlY3QiKTsK
LSAgICB9Ci0KLSAgICB2b2lkIHByb3Zpc2lvbmFsTG9hZFJlY2VpdmVkU2VydmVyUmVkaXJlY3Qo
KQotICAgIHsKLSAgICAgICAgY2hlY2tBY3RpdmVVUkkoIi9ub3JtYWwiKTsKLSAgICB9Ci0KLSAg
ICB2b2lkIGxvYWRDb21taXR0ZWQoKQotICAgIHsKLSAgICAgICAgY2hlY2tBY3RpdmVVUkkoIi9u
b3JtYWwiKTsKLSAgICB9Ci0KLSAgICB2b2lkIGxvYWRGaW5pc2hlZCgpCi0gICAgewotICAgICAg
ICBjaGVja0FjdGl2ZVVSSSgiL25vcm1hbCIpOwotICAgICAgICBMb2FkVHJhY2tpbmdUZXN0Ojps
b2FkRmluaXNoZWQoKTsKLSAgICB9Ci0KLSAgICBDU3RyaW5nIG1fYWN0aXZlVVJJOwotCi1wcml2
YXRlOgotICAgIHZvaWQgY2hlY2tBY3RpdmVVUkkoY29uc3QgY2hhciogdXJpKQotICAgIHsKLSAg
ICAgICAgQVNTRVJUX0NNUF9DU1RSSU5HKG1fYWN0aXZlVVJJLCA9PSwga1NlcnZlci0+Z2V0VVJJ
Rm9yUGF0aCh1cmkpKTsKLSAgICB9Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0FjdGl2
ZVVSSShWaWV3VVJJVHJhY2tpbmdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRl
c3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3JlZGlyZWN0IikuZGF0YSgpKTsK
LSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLX0KLQotY2xhc3MgVmlld0lzTG9h
ZGluZ1Rlc3Q6IHB1YmxpYyBMb2FkVHJhY2tpbmdUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dM
SUJfVEVTVF9GSVhUVVJFKFZpZXdJc0xvYWRpbmdUZXN0KTsKLQotICAgIHN0YXRpYyB2b2lkIGlz
TG9hZGluZ0NoYW5nZWQoR09iamVjdCosIEdQYXJhbVNwZWMqLCBWaWV3SXNMb2FkaW5nVGVzdCog
dGVzdCkKLSAgICB7Ci0gICAgICAgIGlmICh3ZWJraXRfd2ViX3ZpZXdfaXNfbG9hZGluZyh0ZXN0
LT5tX3dlYlZpZXcpKQotICAgICAgICAgICAgdGVzdC0+YmVnaW5Mb2FkKCk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHRlc3QtPmVuZExvYWQoKTsKLSAgICB9Ci0KLSAgICBWaWV3SXNMb2Fk
aW5nVGVzdCgpCi0gICAgewotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgIm5v
dGlmeTo6aXMtbG9hZGluZyIsIEdfQ0FMTEJBQ0soaXNMb2FkaW5nQ2hhbmdlZCksIHRoaXMpOwot
ICAgIH0KLQotICAgIHZvaWQgYmVnaW5Mb2FkKCkKLSAgICB7Ci0gICAgICAgIC8vIE5ldyBsb2Fk
LCBsb2FkLXN0YXJ0ZWQgaGFzbid0IGJlZW4gZW1pdHRlZCB5ZXQuCi0gICAgICAgIGdfYXNzZXJ0
KG1fbG9hZEV2ZW50cy5pc0VtcHR5KCkpOwotICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0
X3dlYl92aWV3X2dldF91cmkobV93ZWJWaWV3KSwgPT0sIG1fYWN0aXZlVVJJLmRhdGEoKSk7Ci0g
ICAgfQotCi0gICAgdm9pZCBlbmRMb2FkKCkKLSAgICB7Ci0gICAgICAgIC8vIExvYWQgZmluaXNo
LCBsb2FkLWZpbmlzaGVkIGFuZCBsb2FkLWZhaWxlZCBoYXZlbid0IGJlZW4gZW1pdHRlZCB5ZXQu
Ci0gICAgICAgIGdfYXNzZXJ0KCFtX2xvYWRFdmVudHMuaXNFbXB0eSgpKTsKLSAgICAgICAgZ19h
c3NlcnQoIW1fbG9hZEV2ZW50cy5jb250YWlucyhMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNo
ZWQpKTsKLSAgICAgICAgZ19hc3NlcnQoIW1fbG9hZEV2ZW50cy5jb250YWlucyhMb2FkVHJhY2tp
bmdUZXN0OjpMb2FkRmFpbGVkKSk7Ci0gICAgfQotfTsKLQotc3RhdGljIHZvaWQgdGVzdFdlYlZp
ZXdJc0xvYWRpbmcoVmlld0lzTG9hZGluZ1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0g
ICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvbm9ybWFsIikuZGF0YSgp
KTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIHRlc3QtPnJlbG9h
ZCgpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgdGVzdC0+bG9h
ZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvZXJyb3IiKS5kYXRhKCkpOwotICAgIHRlc3Qt
PndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5n
ZXRVUklGb3JQYXRoKCIvbm9ybWFsIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2Fk
RmluaXNoZWQoKTsKLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9u
b3JtYWwyIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQot
ICAgIHRlc3QtPmdvQmFjaygpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwot
Ci0gICAgdGVzdC0+Z29Gb3J3YXJkKCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVk
KCk7Ci19Ci0KLWNsYXNzIFdlYlBhZ2VVUklUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3QgewotcHVi
bGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoV2ViUGFnZVVSSVRlc3QpOwotCi0gICAg
c3RhdGljIHZvaWQgd2ViUGFnZVVSSUNoYW5nZWRDYWxsYmFjayhHREJ1c0Nvbm5lY3Rpb24qLCBj
b25zdCBjaGFyKiwgY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgR1Zhcmlh
bnQqIHJlc3VsdCwgV2ViUGFnZVVSSVRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICBjb25zdCBj
aGFyKiB1cmk7Ci0gICAgICAgIGdfdmFyaWFudF9nZXQocmVzdWx0LCAiKCZzKSIsICZ1cmkpOwot
ICAgICAgICB0ZXN0LT5tX3dlYlBhZ2VVUklzLmFwcGVuZCh1cmkpOwotICAgIH0KLQotICAgIHN0
YXRpYyB2b2lkIHdlYlZpZXdVUklDaGFuZ2VkKEdPYmplY3QqLCBHUGFyYW1TcGVjKiwgV2ViUGFn
ZVVSSVRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICB0ZXN0LT5tX3dlYlZpZXdVUklzLmFwcGVu
ZCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSh0ZXN0LT5tX3dlYlZpZXcpKTsKLSAgICB9Ci0KLSAg
ICBXZWJQYWdlVVJJVGVzdCgpCi0gICAgewotICAgICAgICBHUmVmUHRyPEdEQnVzUHJveHk+IHBy
b3h5ID0gYWRvcHRHUmVmKGJ1cy0+Y3JlYXRlUHJveHkoIm9yZy53ZWJraXQuZ3RrLldlYkV4dGVu
c2lvblRlc3QiLAotICAgICAgICAgICAgIi9vcmcvd2Via2l0L2d0ay9XZWJFeHRlbnNpb25UZXN0
IiwgIm9yZy53ZWJraXQuZ3RrLldlYkV4dGVuc2lvblRlc3QiLCBtX21haW5Mb29wKSk7Ci0gICAg
ICAgIG1fdXJpQ2hhbmdlZFNpZ25hbElEID0gZ19kYnVzX2Nvbm5lY3Rpb25fc2lnbmFsX3N1YnNj
cmliZSgKLSAgICAgICAgICAgIGdfZGJ1c19wcm94eV9nZXRfY29ubmVjdGlvbihwcm94eS5nZXQo
KSksCi0gICAgICAgICAgICAwLAotICAgICAgICAgICAgIm9yZy53ZWJraXQuZ3RrLldlYkV4dGVu
c2lvblRlc3QiLAotICAgICAgICAgICAgIlVSSUNoYW5nZWQiLAotICAgICAgICAgICAgIi9vcmcv
d2Via2l0L2d0ay9XZWJFeHRlbnNpb25UZXN0IiwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAg
ICBHX0RCVVNfU0lHTkFMX0ZMQUdTX05PTkUsCi0gICAgICAgICAgICByZWludGVycHJldF9jYXN0
PEdEQnVzU2lnbmFsQ2FsbGJhY2s+KHdlYlBhZ2VVUklDaGFuZ2VkQ2FsbGJhY2spLAotICAgICAg
ICAgICAgdGhpcywKLSAgICAgICAgICAgIDApOwotICAgICAgICBnX2Fzc2VydChtX3VyaUNoYW5n
ZWRTaWduYWxJRCk7Ci0KLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJub3Rp
Znk6OnVyaSIsIEdfQ0FMTEJBQ0sod2ViVmlld1VSSUNoYW5nZWQpLCB0aGlzKTsKLSAgICB9Ci0K
LSAgICB+V2ViUGFnZVVSSVRlc3QoKQotICAgIHsKLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNf
ZGlzY29ubmVjdF9tYXRjaGVkKG1fd2ViVmlldywgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwg
MCwgMCwgdGhpcyk7Ci0gICAgICAgIGdfZGJ1c19jb25uZWN0aW9uX3NpZ25hbF91bnN1YnNjcmli
ZShidXMtPmNvbm5lY3Rpb24oKSwgbV91cmlDaGFuZ2VkU2lnbmFsSUQpOwotICAgIH0KLQotICAg
IHVuc2lnbmVkIG1fdXJpQ2hhbmdlZFNpZ25hbElEOwotICAgIFZlY3RvcjxDU3RyaW5nPiBtX3dl
YlBhZ2VVUklzOwotICAgIFZlY3RvcjxDU3RyaW5nPiBtX3dlYlZpZXdVUklzOwotfTsKLQotc3Rh
dGljIHZvaWQgdGVzdFdlYlBhZ2VVUkkoV2ViUGFnZVVSSVRlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCi17Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvcmVkaXJl
Y3QiKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAg
Z19hc3NlcnRfY21waW50KHRlc3QtPm1fd2ViUGFnZVVSSXMuc2l6ZSgpLCA9PSwgdGVzdC0+bV93
ZWJWaWV3VVJJcy5zaXplKCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGVzdC0+bV93
ZWJQYWdlVVJJcy5zaXplKCk7ICsraSkKLSAgICAgICAgQVNTRVJUX0NNUF9DU1RSSU5HKHRlc3Qt
Pm1fd2ViUGFnZVVSSXNbaV0sID09LCB0ZXN0LT5tX3dlYlZpZXdVUklzW2ldKTsKLQotICAgIGdf
YXNzZXJ0X2NtcGludCh0ZXN0LT5tX3dlYlBhZ2VVUklzLnNpemUoKSwgPT0sIDIpOwotICAgIEFT
U0VSVF9DTVBfQ1NUUklORyh0ZXN0LT5tX3dlYlBhZ2VVUklzWzBdLCA9PSwga1NlcnZlci0+Z2V0
VVJJRm9yUGF0aCgiL3JlZGlyZWN0IikpOwotICAgIEFTU0VSVF9DTVBfQ1NUUklORyh0ZXN0LT5t
X3dlYlBhZ2VVUklzWzFdLCA9PSwga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL25vcm1hbCIpKTsK
LQotfQotCi1zdGF0aWMgdm9pZCB0ZXN0VVJJUmVxdWVzdEhUVFBIZWFkZXJzKFdlYlZpZXdUZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIEdSZWZQdHI8V2ViS2l0VVJJUmVxdWVzdD4g
dXJpUmVxdWVzdCA9IGFkb3B0R1JlZih3ZWJraXRfdXJpX3JlcXVlc3RfbmV3KCJmaWxlOi8vL2Zv
by9iYXIiKSk7Ci0gICAgZ19hc3NlcnQodXJpUmVxdWVzdC5nZXQoKSk7Ci0gICAgZ19hc3NlcnRf
Y21wc3RyKHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfdXJpKHVyaVJlcXVlc3QuZ2V0KCkpLCA9PSwg
ImZpbGU6Ly8vZm9vL2JhciIpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0
X2h0dHBfaGVhZGVycyh1cmlSZXF1ZXN0LmdldCgpKSk7Ci0KLSAgICAvLyBMb2FkIGEgcmVxdWVz
dCB3aXRoIG5vIERvIE5vdCBUcmFjayBoZWFkZXIuCi0gICAgd2Via2l0X3VyaV9yZXF1ZXN0X3Nl
dF91cmkodXJpUmVxdWVzdC5nZXQoKSwga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2RvLW5vdC10
cmFjay1oZWFkZXIiKS5kYXRhKCkpOwotICAgIHRlc3QtPmxvYWRSZXF1ZXN0KHVyaVJlcXVlc3Qu
Z2V0KCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgc2l6ZV90
IG1haW5SZXNvdXJjZURhdGFTaXplID0gMDsKLSAgICBjb25zdCBjaGFyKiBtYWluUmVzb3VyY2VE
YXRhID0gdGVzdC0+bWFpblJlc291cmNlRGF0YShtYWluUmVzb3VyY2VEYXRhU2l6ZSk7Ci0gICAg
Z19hc3NlcnRfY21waW50KG1haW5SZXNvdXJjZURhdGFTaXplLCA9PSwgc3RybGVuKGtETlRIZWFk
ZXJOb3RQcmVzZW50KSk7Ci0gICAgZ19hc3NlcnQoIXN0cm5jbXAobWFpblJlc291cmNlRGF0YSwg
a0ROVEhlYWRlck5vdFByZXNlbnQsIG1haW5SZXNvdXJjZURhdGFTaXplKSk7Ci0KLSAgICAvLyBB
ZGQgdGhlIERvIE5vdCBUcmFjayBoZWFkZXIgYW5kIGxvYWQgdGhlIHJlcXVlc3QgYWdhaW4uCi0g
ICAgU291cE1lc3NhZ2VIZWFkZXJzKiBoZWFkZXJzID0gd2Via2l0X3VyaV9yZXF1ZXN0X2dldF9o
dHRwX2hlYWRlcnModXJpUmVxdWVzdC5nZXQoKSk7Ci0gICAgZ19hc3NlcnQoaGVhZGVycyk7Ci0g
ICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKGhlYWRlcnMsICJETlQiLCAiMSIpOwotICAg
IHRlc3QtPmxvYWRSZXF1ZXN0KHVyaVJlcXVlc3QuZ2V0KCkpOwotICAgIHRlc3QtPndhaXRVbnRp
bExvYWRGaW5pc2hlZCgpOwotCi0gICAgbWFpblJlc291cmNlRGF0YSA9IHRlc3QtPm1haW5SZXNv
dXJjZURhdGEobWFpblJlc291cmNlRGF0YVNpemUpOwotICAgIGdfYXNzZXJ0X2NtcGludChtYWlu
UmVzb3VyY2VEYXRhU2l6ZSwgPT0sIDEpOwotICAgIGdfYXNzZXJ0KCFzdHJuY21wKG1haW5SZXNv
dXJjZURhdGEsICIxIiwgbWFpblJlc291cmNlRGF0YVNpemUpKTsKLQotICAgIC8vIExvYWQgYSBV
UkkgZm9yIHdoaWNoIHRoZSB3ZWIgZXh0ZW5zaW9uIHdpbGwgYWRkIHRoZSBEbyBOb3QgVHJhY2sg
aGVhZGVyLgotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2FkZC1k
by1ub3QtdHJhY2staGVhZGVyIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmlu
aXNoZWQoKTsKLQotICAgIG1haW5SZXNvdXJjZURhdGEgPSB0ZXN0LT5tYWluUmVzb3VyY2VEYXRh
KG1haW5SZXNvdXJjZURhdGFTaXplKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQobWFpblJlc291cmNl
RGF0YVNpemUsID09LCAxKTsKLSAgICBnX2Fzc2VydCghc3RybmNtcChtYWluUmVzb3VyY2VEYXRh
LCAiMSIsIG1haW5SZXNvdXJjZURhdGFTaXplKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNlcnZlckNh
bGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IGNo
YXIqIHBhdGgsIEdIYXNoVGFibGUqLCBTb3VwQ2xpZW50Q29udGV4dCosIGdwb2ludGVyKQotewot
ICAgIHN0YXRpYyBjb25zdCBjaGFyKiByZXNwb25zZVN0cmluZyA9ICI8aHRtbD48Ym9keT5UZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nISIKLSAg
ICAgICAgIlRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nISIKLSAgICAgICAg
IlRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nISIKLSAgICAgICAgIlRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nISIKLSAgICAgICAgIlRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nISIKLSAgICAgICAgIlRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nISIKLSAgICAgICAgIlRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nISIKLSAgICAgICAgIlRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nITwvYm9keT48L2h0bWw+IjsKLQotICAgIGlmIChtZXNzYWdlLT5tZXRob2QgIT0g
U09VUF9NRVRIT0RfR0VUKSB7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3Nh
Z2UsIFNPVVBfU1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7
Ci0KLSAgICBpZiAoZ19zdHJfaGFzX3ByZWZpeChwYXRoLCAiL25vcm1hbCIpKQotICAgICAgICBz
b3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1P
UllfU1RBVElDLCByZXNwb25zZVN0cmluZywgc3RybGVuKHJlc3BvbnNlU3RyaW5nKSk7Ci0gICAg
ZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9lcnJvciIpKQotICAgICAgICBzb3VwX21lc3Nh
Z2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19DQU5UX0NPTk5FQ1QpOwotICAgIGVs
c2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvcmVkaXJlY3QiKSkgewotICAgICAgICBzb3VwX21l
c3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19NT1ZFRF9QRVJNQU5FTlRMWSk7
Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9o
ZWFkZXJzLCAiTG9jYXRpb24iLCAiL25vcm1hbCIpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1
YWwocGF0aCwgIi9jYW5jZWxsZWQiKSkgewotICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19z
ZXRfZW5jb2RpbmcobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgU09VUF9FTkNPRElOR19DSFVO
S0VEKTsKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNl
X2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgcmVzcG9uc2VTdHJpbmcsIHN0cmxlbihyZXNwb25z
ZVN0cmluZykpOwotICAgICAgICBzb3VwX3NlcnZlcl91bnBhdXNlX21lc3NhZ2Uoc2VydmVyLCBt
ZXNzYWdlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0
aCwgIi9kby1ub3QtdHJhY2staGVhZGVyIikgfHwgZ19zdHJfZXF1YWwocGF0aCwgIi9hZGQtZG8t
bm90LXRyYWNrLWhlYWRlciIpKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGRvTm90VHJhY2sgPSBz
b3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfb25lKG1lc3NhZ2UtPnJlcXVlc3RfaGVhZGVycywgIkRO
VCIpOwotICAgICAgICBpZiAoZG9Ob3RUcmFjaykKLSAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9i
b2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9DT1BZLCBkb05v
dFRyYWNrLCBzdHJsZW4oZG9Ob3RUcmFjaykpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBz
b3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1P
UllfU1RBVElDLCBrRE5USGVhZGVyTm90UHJlc2VudCwgc3RybGVuKGtETlRIZWFkZXJOb3RQcmVz
ZW50KSk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RB
VFVTX09LKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVz
c2FnZSwgU09VUF9TVEFUVVNfTk9UX0ZPVU5EKTsKLQotICAgIHNvdXBfbWVzc2FnZV9ib2R5X2Nv
bXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOwotfQotCi12b2lkIGJlZm9yZUFsbCgpCi17
Ci0gICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF93ZWJfZXh0ZW5zaW9uc19kaXJlY3Rvcnkod2Vi
a2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCksIFdFQktJVF9URVNUX1dFQl9FWFRFTlNJT05T
X0RJUik7Ci0gICAgYnVzID0gbmV3IFdlYktpdFRlc3RCdXMoKTsKLSAgICBpZiAoIWJ1cy0+cnVu
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGtTZXJ2ZXIgPSBuZXcgV2ViS2l0VGVzdFNlcnZl
cigpOwotICAgIGtTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFjayk7Ci0KLSAgICBMb2FkVHJhY2tp
bmdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAibG9hZGluZy1zdGF0dXMiLCB0ZXN0TG9hZGlu
Z1N0YXR1cyk7Ci0gICAgTG9hZFRyYWNraW5nVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImxv
YWRpbmctZXJyb3IiLCB0ZXN0TG9hZGluZ0Vycm9yKTsKLSAgICBMb2FkVHJhY2tpbmdUZXN0Ojph
ZGQoIldlYktpdFdlYlZpZXciLCAibG9hZC1odG1sIiwgdGVzdExvYWRIdG1sKTsKLSAgICBMb2Fk
VHJhY2tpbmdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAibG9hZC1hbHRlcm5hdGUtaHRtbCIs
IHRlc3RMb2FkQWx0ZXJuYXRlSFRNTCk7Ci0gICAgTG9hZFRyYWNraW5nVGVzdDo6YWRkKCJXZWJL
aXRXZWJWaWV3IiwgImxvYWQtcGxhaW4tdGV4dCIsIHRlc3RMb2FkUGxhaW5UZXh0KTsKLSAgICBM
b2FkVHJhY2tpbmdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAibG9hZC1yZXF1ZXN0IiwgdGVz
dExvYWRSZXF1ZXN0KTsKLSAgICBMb2FkU3RvcFRyYWNraW5nVGVzdDo6YWRkKCJXZWJLaXRXZWJW
aWV3IiwgInN0b3AtbG9hZGluZyIsIHRlc3RMb2FkQ2FuY2VsbGVkKTsKLSAgICBMb2FkVHJhY2tp
bmdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAidGl0bGUiLCB0ZXN0V2ViVmlld1RpdGxlKTsK
LSAgICBMb2FkVHJhY2tpbmdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAicHJvZ3Jlc3MiLCB0
ZXN0TG9hZFByb2dyZXNzKTsKLSAgICBMb2FkVHJhY2tpbmdUZXN0OjphZGQoIldlYktpdFdlYlZp
ZXciLCAicmVsb2FkIiwgdGVzdFdlYlZpZXdSZWxvYWQpOwotICAgIExvYWRUcmFja2luZ1Rlc3Q6
OmFkZCgiV2ViS2l0V2ViVmlldyIsICJoaXN0b3J5LWxvYWQiLCB0ZXN0V2ViVmlld0hpc3RvcnlM
b2FkKTsKLQotICAgIC8vIFRoaXMgdGVzdCBjaGVja3MgdGhhdCB3ZWIgdmlldyBub3RpZnk6OnVy
aSBzaWduYWwgaXMgY29ycmVjdGx5IGVtaXR0ZWQKLSAgICAvLyBhbmQgdGhlIHVyaSBpcyBhbHJl
YWR5IHVwZGF0ZWQgd2hlbiBsb2FkZXIgY2xpZW50IHNpZ25hbHMgYXJlIGVtaXR0ZWQuCi0gICAg
Vmlld1VSSVRyYWNraW5nVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImFjdGl2ZS11cmkiLCB0
ZXN0V2ViVmlld0FjdGl2ZVVSSSk7Ci0KLSAgICBWaWV3SXNMb2FkaW5nVGVzdDo6YWRkKCJXZWJL
aXRXZWJWaWV3IiwgImlzLWxvYWRpbmciLCB0ZXN0V2ViVmlld0lzTG9hZGluZyk7Ci0gICAgV2Vi
UGFnZVVSSVRlc3Q6OmFkZCgiV2ViS2l0V2ViUGFnZSIsICJnZXQtdXJpIiwgdGVzdFdlYlBhZ2VV
UkkpOwotICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFVSSVJlcXVlc3QiLCAiaHR0cC1oZWFk
ZXJzIiwgdGVzdFVSSVJlcXVlc3RIVFRQSGVhZGVycyk7Ci19Ci0KLXZvaWQgYWZ0ZXJBbGwoKQot
ewotICAgIGRlbGV0ZSBidXM7Ci0gICAgZGVsZXRlIGtTZXJ2ZXI7Ci19CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0TWFpbi5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0TWFpbi5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3ODE5Y2YuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdE1haW4uY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsNzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdE1haW4uaCIKLQotI2luY2x1ZGUgPGdsaWIv
Z3N0ZGlvLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0
Mi5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KLQotdm9pZCBiZWZvcmVBbGwo
KTsKLXZvaWQgYWZ0ZXJBbGwoKTsKLQotc3RhdGljIHZvaWQgcmVnaXN0ZXJHUmVzb3VyY2Uodm9p
ZCkKLXsKLSAgICBHT3duUHRyPGNoYXI+IHJlc291cmNlc1BhdGgoZ19idWlsZF9maWxlbmFtZShX
RUJLSVRfRVhFQ19QQVRILCAicmVzb3VyY2VzIiwgIndlYmtpdDJndGstdGVzdHMtcmVzb3VyY2Vz
LmdyZXNvdXJjZSIsIE5VTEwpKTsKLSAgICBHUmVzb3VyY2UqIHJlc291cmNlID0gZ19yZXNvdXJj
ZV9sb2FkKHJlc291cmNlc1BhdGguZ2V0KCksIDApOwotICAgIGdfYXNzZXJ0KHJlc291cmNlKTsK
LQotICAgIGdfcmVzb3VyY2VzX3JlZ2lzdGVyKHJlc291cmNlKTsKLSAgICBnX3Jlc291cmNlX3Vu
cmVmKHJlc291cmNlKTsKLX0KLQotc3RhdGljIHZvaWQgcmVtb3ZlTm9uRW1wdHlEaXJlY3Rvcnko
Y29uc3QgY2hhciogZGlyZWN0b3J5UGF0aCkKLXsKLSAgICBHRGlyKiBkaXJlY3RvcnkgPSBnX2Rp
cl9vcGVuKGRpcmVjdG9yeVBhdGgsIDAsIDApOwotICAgIGdfYXNzZXJ0KGRpcmVjdG9yeSk7Ci0g
ICAgY29uc3QgY2hhciogZmlsZU5hbWU7Ci0gICAgd2hpbGUgKChmaWxlTmFtZSA9IGdfZGlyX3Jl
YWRfbmFtZShkaXJlY3RvcnkpKSkgewotICAgICAgICBHT3duUHRyPGNoYXI+IGZpbGVQYXRoKGdf
YnVpbGRfZmlsZW5hbWUoZGlyZWN0b3J5UGF0aCwgZmlsZU5hbWUsIE5VTEwpKTsKLSAgICAgICAg
Z191bmxpbmsoZmlsZVBhdGguZ2V0KCkpOwotICAgIH0KLSAgICBnX2Rpcl9jbG9zZShkaXJlY3Rv
cnkpOwotICAgIGdfcm1kaXIoZGlyZWN0b3J5UGF0aCk7Ci19Ci0KLWludCBtYWluKGludCBhcmdj
LCBjaGFyKiogYXJndikKLXsKLSAgICBnX3Vuc2V0ZW52KCJEQlVTX1NFU1NJT05fQlVTX0FERFJF
U1MiKTsKLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgMCk7Ci0gICAgZ19zZXRlbnYo
IldFQktJVF9FWEVDX1BBVEgiLCBXRUJLSVRfRVhFQ19QQVRILCBGQUxTRSk7Ci0gICAgZ19zZXRl
bnYoIldFQktJVF9JTkpFQ1RFRF9CVU5ETEVfUEFUSCIsIFdFQktJVF9JTkpFQ1RFRF9CVU5ETEVf
UEFUSCwgRkFMU0UpOwotICAgIGdfc2V0ZW52KCJMQ19BTEwiLCAiQyIsIFRSVUUpOwotICAgIGdf
c2V0ZW52KCJHSU9fVVNFX1ZGUyIsICJsb2NhbCIsIFRSVUUpOwotICAgIGdfc2V0ZW52KCJHU0VU
VElOR1NfQkFDS0VORCIsICJtZW1vcnkiLCBUUlVFKTsKLSAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0
dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwotCi0gICAgcmVnaXN0ZXJHUmVzb3VyY2UoKTsKLQot
ICAgIEdPd25QdHI8Y2hhcj4gZGlza0NhY2hlVGVtcERpcmVjdG9yeShnX2Rpcl9tYWtlX3RtcCgi
V2ViS2l0MlRlc3RzRGlza0NhY2hlLVhYWFhYWCIsIDApKTsKLSAgICBnX2Fzc2VydChkaXNrQ2Fj
aGVUZW1wRGlyZWN0b3J5LmdldCgpKTsKLSAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X2Rpc2tf
Y2FjaGVfZGlyZWN0b3J5KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpLCBkaXNrQ2Fj
aGVUZW1wRGlyZWN0b3J5LmdldCgpKTsKLQotICAgIGJlZm9yZUFsbCgpOwotICAgIGludCByZXR1
cm5WYWx1ZSA9IGdfdGVzdF9ydW4oKTsKLSAgICBhZnRlckFsbCgpOwotCi0gICAgcmVtb3ZlTm9u
RW1wdHlEaXJlY3RvcnkoZGlza0NhY2hlVGVtcERpcmVjdG9yeS5nZXQoKSk7Ci0KLSAgICByZXR1
cm4gcmV0dXJuVmFsdWU7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9UZXN0TWFpbi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvVGVzdE1haW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJjOTA3
MC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9U
ZXN0TWFpbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBUZXN0TWFpbl9oCi0jZGVmaW5lIFRlc3RN
YWluX2gKLQotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KLSNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNkZWZpbmUgTUFLRV9HTElCX1RFU1Rf
RklYVFVSRShDbGFzc05hbWUpIFwKLSAgICBzdGF0aWMgdm9pZCBzZXRVcChDbGFzc05hbWUqIGZp
eHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkgXAotICAgIHsgXAotICAgICAgICBuZXcgKGZpeHR1
cmUpIENsYXNzTmFtZTsgXAotICAgIH0gXAotICAgIHN0YXRpYyB2b2lkIHRlYXJEb3duKENsYXNz
TmFtZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKSBcCi0gICAgeyBcCi0gICAgICAgIGZp
eHR1cmUtPn5DbGFzc05hbWUoKTsgXAotICAgIH0gXAotICAgIHN0YXRpYyB2b2lkIGFkZChjb25z
dCBjaGFyKiBzdWl0ZU5hbWUsIGNvbnN0IGNoYXIqIHRlc3ROYW1lLCB2b2lkICgqdGVzdEZ1bmMp
KENsYXNzTmFtZSosIGNvbnN0IHZvaWQqKSkgXAotICAgIHsgXAotICAgICAgICBHT3duUHRyPGdj
aGFyPiB0ZXN0UGF0aChnX3N0cmR1cF9wcmludGYoIi93ZWJraXQyLyVzLyVzIiwgc3VpdGVOYW1l
LCB0ZXN0TmFtZSkpOyBcCi0gICAgICAgIGdfdGVzdF9hZGQodGVzdFBhdGguZ2V0KCksIENsYXNz
TmFtZSwgMCwgQ2xhc3NOYW1lOjpzZXRVcCwgdGVzdEZ1bmMsIENsYXNzTmFtZTo6dGVhckRvd24p
OyBcCi0gICAgfQotCi0jZGVmaW5lIEFTU0VSVF9DTVBfQ1NUUklORyhzMSwgY21wLCBzMikgXAot
ICAgIGRvIHsgQ1N0cmluZyBfX3MxID0gKHMxKTsgQ1N0cmluZyBfX3MyID0gKHMyKTsgXAotICAg
ICAgICBpZiAoZ19zdHJjbXAwKF9fczEuZGF0YSgpLCBfX3MyLmRhdGEoKSkgY21wIDApIDsgZWxz
ZSBcCi0gICAgICAgICAgICBnX2Fzc2VydGlvbl9tZXNzYWdlX2NtcHN0cihHX0xPR19ET01BSU4s
IF9fRklMRV9fLCBfX0xJTkVfXywgR19TVFJGVU5DLCBcCi0gICAgICAgICAgICAgICAgI3MxICIg
IiAjY21wICIgIiAjczIsIF9fczEuZGF0YSgpLCAjY21wLCBfX3MyLmRhdGEoKSk7IH0gd2hpbGUg
KDApCi0KLWNsYXNzIFRlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUo
VGVzdCk7Ci0KLSAgICB+VGVzdCgpCi0gICAgewotICAgICAgICBpZiAobV93YXRjaGVkT2JqZWN0
cy5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgZ19wcmludCgiTGVh
a2VkIG9iamVjdHM6Iik7Ci0gICAgICAgIEhhc2hTZXQ8R09iamVjdCo+Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtX3dhdGNoZWRPYmplY3RzLmVuZCgpOwotICAgICAgICBmb3IgKEhhc2hTZXQ8R09i
amVjdCo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fd2F0Y2hlZE9iamVjdHMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQotICAgICAgICAgICAgZ19wcmludCgiICVzKCVwKSIsIGdfdHlwZV9uYW1l
X2Zyb21faW5zdGFuY2UocmVpbnRlcnByZXRfY2FzdDxHVHlwZUluc3RhbmNlKj4oKml0KSksICpp
dCk7Ci0gICAgICAgIGdfcHJpbnQoIlxuIik7Ci0KLSAgICAgICAgZ19hc3NlcnQobV93YXRjaGVk
T2JqZWN0cy5pc0VtcHR5KCkpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIG9iamVjdEZpbmFs
aXplZChUZXN0KiB0ZXN0LCBHT2JqZWN0KiBmaW5hbGl6ZWRPYmplY3QpCi0gICAgewotICAgICAg
ICB0ZXN0LT5tX3dhdGNoZWRPYmplY3RzLnJlbW92ZShmaW5hbGl6ZWRPYmplY3QpOwotICAgIH0K
LQotICAgIHZvaWQgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHT2JqZWN0
KiBvYmplY3QpCi0gICAgewotICAgICAgICBtX3dhdGNoZWRPYmplY3RzLmFkZChvYmplY3QpOwot
ICAgICAgICBnX29iamVjdF93ZWFrX3JlZihvYmplY3QsIHJlaW50ZXJwcmV0X2Nhc3Q8R1dlYWtO
b3RpZnk+KG9iamVjdEZpbmFsaXplZCksIHRoaXMpOwotICAgIH0KLQotICAgIHN0YXRpYyBDU3Ry
aW5nIGdldFdlYktpdDFUZXN0UmVzb3VjZXNEaXIoKQotICAgIHsKLSAgICAgICAgR093blB0cjxj
aGFyPiByZXNvdXJjZXNEaXIoZ19idWlsZF9maWxlbmFtZShXRUJLSVRfU1JDX0RJUiwgIlNvdXJj
ZSIsICJXZWJLaXQiLCAiZ3RrIiwgInRlc3RzIiwgInJlc291cmNlcyIsIE5VTEwpKTsKLSAgICAg
ICAgcmV0dXJuIHJlc291cmNlc0Rpci5nZXQoKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgQ1N0cmlu
ZyBnZXRSZXNvdXJjZXNEaXIoKQotICAgIHsKLSAgICAgICAgR093blB0cjxjaGFyPiByZXNvdXJj
ZXNEaXIoZ19idWlsZF9maWxlbmFtZShXRUJLSVRfU1JDX0RJUiwgIlNvdXJjZSIsICJXZWJLaXQy
IiwgIlVJUHJvY2VzcyIsICJBUEkiLCAiZ3RrIiwgInRlc3RzIiwgInJlc291cmNlcyIsIE5VTEwp
KTsKLSAgICAgICAgcmV0dXJuIHJlc291cmNlc0Rpci5nZXQoKTsKLSAgICB9Ci0KLSAgICB2b2lk
IGFkZExvZ0ZhdGFsRmxhZyh1bnNpZ25lZCBmbGFnKQotICAgIHsKLSAgICAgICAgdW5zaWduZWQg
ZmF0YWxNYXNrID0gZ19sb2dfc2V0X2Fsd2F5c19mYXRhbChzdGF0aWNfY2FzdDxHTG9nTGV2ZWxG
bGFncz4oR19MT0dfRkFUQUxfTUFTSykpOwotICAgICAgICBmYXRhbE1hc2sgfD0gZmxhZzsKLSAg
ICAgICAgZ19sb2dfc2V0X2Fsd2F5c19mYXRhbChzdGF0aWNfY2FzdDxHTG9nTGV2ZWxGbGFncz4o
ZmF0YWxNYXNrKSk7Ci0gICAgfQotCi0gICAgdm9pZCByZW1vdmVMb2dGYXRhbEZsYWcodW5zaWdu
ZWQgZmxhZykKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGZhdGFsTWFzayA9IGdfbG9nX3NldF9h
bHdheXNfZmF0YWwoc3RhdGljX2Nhc3Q8R0xvZ0xldmVsRmxhZ3M+KEdfTE9HX0ZBVEFMX01BU0sp
KTsKLSAgICAgICAgZmF0YWxNYXNrICY9IH5mbGFnOwotICAgICAgICBnX2xvZ19zZXRfYWx3YXlz
X2ZhdGFsKHN0YXRpY19jYXN0PEdMb2dMZXZlbEZsYWdzPihmYXRhbE1hc2spKTsKLSAgICB9Ci0K
LSAgICBzdGF0aWMgYm9vbCBjYWlyb1N1cmZhY2VzRXF1YWwoY2Fpcm9fc3VyZmFjZV90KiBzMSwg
Y2Fpcm9fc3VyZmFjZV90KiBzMikKLSAgICB7Ci0gICAgICAgIHJldHVybiAoY2Fpcm9faW1hZ2Vf
c3VyZmFjZV9nZXRfZm9ybWF0KHMxKSA9PSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9mb3JtYXQo
czIpCi0gICAgICAgICAgICAmJiBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChzMSkgPT0g
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoczIpCi0gICAgICAgICAgICAmJiBjYWlyb19p
bWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoczEpID09IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hl
aWdodChzMikKLSAgICAgICAgICAgICYmIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShz
MSkgPT0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKHMyKQotICAgICAgICAgICAgJiYg
IW1lbWNtcChjb25zdF9jYXN0PGNvbnN0IHZvaWQqPihyZWludGVycHJldF9jYXN0PHZvaWQqPihj
YWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHMxKSkpLAotICAgICAgICAgICAgICAgIGNvbnN0
X2Nhc3Q8Y29uc3Qgdm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhaXJvX2ltYWdlX3N1
cmZhY2VfZ2V0X2RhdGEoczIpKSksCi0gICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9nZXRfaGVpZ2h0KHMxKSpjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoczEpKSk7Ci0g
ICAgfQotCi0gICAgSGFzaFNldDxHT2JqZWN0Kj4gbV93YXRjaGVkT2JqZWN0czsKLX07Ci0KLSNl
bmRpZiAvLyBUZXN0TWFpbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9UZXN0UHJpbnRpbmcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvVGVzdFByaW50aW5nLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNzJjMmNmYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9UZXN0UHJpbnRpbmcuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjA5ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+
Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgotCi0jaWZkZWYgSEFWRV9HVEtfVU5J
WF9QUklOVElORwotI2luY2x1ZGUgPGd0ay9ndGt1bml4cHJpbnQuaD4KLSNlbmRpZgotCi1zdGF0
aWMgY2hhcioga1RlbXBEaXJlY3Rvcnk7Ci0KLXN0YXRpYyB2b2lkIHRlc3RQcmludE9wZXJhdGlv
blByaW50U2V0dGluZ3MoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAg
R1JlZlB0cjxXZWJLaXRQcmludE9wZXJhdGlvbj4gcHJpbnRPcGVyYXRpb24gPSBhZG9wdEdSZWYo
d2Via2l0X3ByaW50X29wZXJhdGlvbl9uZXcodGVzdC0+bV93ZWJWaWV3KSk7Ci0gICAgdGVzdC0+
YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChwcmludE9wZXJh
dGlvbi5nZXQoKSkpOwotCi0gICAgZ19hc3NlcnQoIXdlYmtpdF9wcmludF9vcGVyYXRpb25fZ2V0
X3ByaW50X3NldHRpbmdzKHByaW50T3BlcmF0aW9uLmdldCgpKSk7Ci0gICAgZ19hc3NlcnQoIXdl
YmtpdF9wcmludF9vcGVyYXRpb25fZ2V0X3BhZ2Vfc2V0dXAocHJpbnRPcGVyYXRpb24uZ2V0KCkp
KTsKLQotICAgIEdSZWZQdHI8R3RrUHJpbnRTZXR0aW5ncz4gcHJpbnRTZXR0aW5ncyA9IGFkb3B0
R1JlZihndGtfcHJpbnRfc2V0dGluZ3NfbmV3KCkpOwotICAgIHRlc3QtPmFzc2VydE9iamVjdElz
RGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QocHJpbnRTZXR0aW5ncy5nZXQoKSkpOwot
Ci0gICAgR1JlZlB0cjxHdGtQYWdlU2V0dXA+IHBhZ2VTZXR1cCA9IGFkb3B0R1JlZihndGtfcGFn
ZV9zZXR1cF9uZXcoKSk7Ci0gICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RG
aW5pc2hlcyhHX09CSkVDVChwYWdlU2V0dXAuZ2V0KCkpKTsKLQotICAgIHdlYmtpdF9wcmludF9v
cGVyYXRpb25fc2V0X3ByaW50X3NldHRpbmdzKHByaW50T3BlcmF0aW9uLmdldCgpLCBwcmludFNl
dHRpbmdzLmdldCgpKTsKLSAgICB3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX3NldF9wYWdlX3NldHVw
KHByaW50T3BlcmF0aW9uLmdldCgpLCBwYWdlU2V0dXAuZ2V0KCkpOwotCi0gICAgZ19hc3NlcnQo
d2Via2l0X3ByaW50X29wZXJhdGlvbl9nZXRfcHJpbnRfc2V0dGluZ3MocHJpbnRPcGVyYXRpb24u
Z2V0KCkpID09IHByaW50U2V0dGluZ3MuZ2V0KCkpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9wcmlu
dF9vcGVyYXRpb25fZ2V0X3BhZ2Vfc2V0dXAocHJpbnRPcGVyYXRpb24uZ2V0KCkpID09IHBhZ2VT
ZXR1cC5nZXQoKSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3UHJpbnRDYWxsYmFjayhX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRQcmludE9wZXJhdGlvbiogcHJpbnRPcGVyYXRp
b24sIFdlYlZpZXdUZXN0KiB0ZXN0KQotewotICAgIGdfYXNzZXJ0KHdlYlZpZXcgPT0gdGVzdC0+
bV93ZWJWaWV3KTsKLQotICAgIGdfYXNzZXJ0KFdFQktJVF9JU19QUklOVF9PUEVSQVRJT04ocHJp
bnRPcGVyYXRpb24pKTsKLSAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZp
bmlzaGVzKEdfT0JKRUNUKHByaW50T3BlcmF0aW9uKSk7Ci0KLSAgICBnX2Fzc2VydCghd2Via2l0
X3ByaW50X29wZXJhdGlvbl9nZXRfcHJpbnRfc2V0dGluZ3MocHJpbnRPcGVyYXRpb24pKTsKLSAg
ICBnX2Fzc2VydCghd2Via2l0X3ByaW50X29wZXJhdGlvbl9nZXRfcGFnZV9zZXR1cChwcmludE9w
ZXJhdGlvbikpOwotCi0gICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKLQot
ICAgIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1ByaW50KFdlYlZp
ZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIGdfc2lnbmFsX2Nvbm5lY3QodGVz
dC0+bV93ZWJWaWV3LCAicHJpbnQiLCBHX0NBTExCQUNLKHdlYlZpZXdQcmludENhbGxiYWNrKSwg
dGVzdCk7Ci0gICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxib2R5IG9uTG9hZD1cInByaW50KCk7
XCI+V2ViS2l0R1RLKyBwcmludGluZyB0ZXN0PC9ib2R5PjwvaHRtbD4iLCAwKTsKLSAgICBnX21h
aW5fbG9vcF9ydW4odGVzdC0+bV9tYWluTG9vcCk7Ci19Ci0KLSNpZmRlZiBIQVZFX0dUS19VTklY
X1BSSU5USU5HCi1jbGFzcyBQcmludFRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7Ci1wdWJsaWM6
Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShQcmludFRlc3QpOwotCi0gICAgc3RhdGljIHZv
aWQgcHJpbnRGaW5pc2hlZENhbGxiYWNrKFdlYktpdFByaW50T3BlcmF0aW9uKiwgUHJpbnRUZXN0
KiB0ZXN0KQotICAgIHsKLSAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29w
KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBwcmludEZhaWxlZENhbGxiYWNrKFdlYktpdFBy
aW50T3BlcmF0aW9uKiwgR0Vycm9yKiBlcnJvciwgUHJpbnRUZXN0KiB0ZXN0KQotICAgIHsKLSAg
ICAgICAgZ19hc3NlcnQodGVzdC0+bV9leHBlY3RlZEVycm9yKTsKLSAgICAgICAgZ19hc3NlcnQo
ZXJyb3IpOwotICAgICAgICBnX2Fzc2VydChnX2Vycm9yX21hdGNoZXMoZXJyb3IsIFdFQktJVF9Q
UklOVF9FUlJPUiwgdGVzdC0+bV9leHBlY3RlZEVycm9yKSk7Ci0gICAgfQotCi0gICAgUHJpbnRU
ZXN0KCkKLSAgICAgICAgOiBtX2V4cGVjdGVkRXJyb3IoMCkKLSAgICB7Ci0gICAgICAgIG1fcHJp
bnRPcGVyYXRpb24gPSBhZG9wdEdSZWYod2Via2l0X3ByaW50X29wZXJhdGlvbl9uZXcobV93ZWJW
aWV3KSk7Ci0gICAgICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19P
QkpFQ1QobV9wcmludE9wZXJhdGlvbi5nZXQoKSkpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0
KG1fcHJpbnRPcGVyYXRpb24uZ2V0KCksICJmaW5pc2hlZCIsIEdfQ0FMTEJBQ0socHJpbnRGaW5p
c2hlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9wcmludE9w
ZXJhdGlvbi5nZXQoKSwgImZhaWxlZCIsIEdfQ0FMTEJBQ0socHJpbnRGYWlsZWRDYWxsYmFjayks
IHRoaXMpOwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiB0ZXN0UHJpbnRPcGVyYXRpb25Q
cmludFByaW50ZXIoR3RrUHJpbnRlciogcHJpbnRlciwgZ3BvaW50ZXIgdXNlckRhdGEpCi0gICAg
ewotICAgICAgICBpZiAoc3RyY21wKGd0a19wcmludGVyX2dldF9uYW1lKHByaW50ZXIpLCAiUHJp
bnQgdG8gRmlsZSIpKQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwotCi0gICAgICAgIEd0a1By
aW50ZXIqKiBmb3VuZFByaW50ZXIgPSBzdGF0aWNfY2FzdDxHdGtQcmludGVyKio+KHVzZXJEYXRh
KTsKLSAgICAgICAgKmZvdW5kUHJpbnRlciA9IHN0YXRpY19jYXN0PEd0a1ByaW50ZXIqPihnX29i
amVjdF9yZWYocHJpbnRlcikpOwotICAgICAgICByZXR1cm4gVFJVRTsKLSAgICB9Ci0KLSAgICBH
dGtQcmludGVyKiBmaW5kUHJpbnRUb0ZpbGVQcmludGVyKCkKLSAgICB7Ci0gICAgICAgIEd0a1By
aW50ZXIqIHByaW50ZXIgPSAwOwotICAgICAgICBndGtfZW51bWVyYXRlX3ByaW50ZXJzKHRlc3RQ
cmludE9wZXJhdGlvblByaW50UHJpbnRlciwgJnByaW50ZXIsIDAsIFRSVUUpOwotICAgICAgICBy
ZXR1cm4gcHJpbnRlcjsKLSAgICB9Ci0KLSAgICB2b2lkIHdhaXRVbnRpbFByaW50RmluaXNoZWQo
KQotICAgIHsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotICAgIH0KLQot
ICAgIEdSZWZQdHI8V2ViS2l0UHJpbnRPcGVyYXRpb24+IG1fcHJpbnRPcGVyYXRpb247Ci0gICAg
dW5zaWduZWQgaW50IG1fZXhwZWN0ZWRFcnJvcjsKLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RQcmlu
dE9wZXJhdGlvblByaW50KFByaW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0
ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHk+V2ViS2l0R1RLKyBwcmludGluZyB0ZXN0PC9ib2R5
PjwvaHRtbD4iLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAg
IEdSZWZQdHI8R3RrUHJpbnRlcj4gcHJpbnRlciA9IGFkb3B0R1JlZih0ZXN0LT5maW5kUHJpbnRU
b0ZpbGVQcmludGVyKCkpOwotICAgIGlmICghcHJpbnRlcikgewotICAgICAgICBnX21lc3NhZ2Uo
IiVzIiwgIkNhbm5vdCB0ZXN0IFdlYktpdFByaW50T3BlcmF0aW9uL3ByaW50OiBubyBzdWl0YWJs
ZSBwcmludGVyIGZvdW5kIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBHT3duUHRy
PGNoYXI+IG91dHB1dEZpbGVuYW1lKGdfYnVpbGRfZmlsZW5hbWUoa1RlbXBEaXJlY3RvcnksICJ3
ZWJraXQtcHJpbnQucGRmIiwgTlVMTCkpOwotICAgIEdSZWZQdHI8R0ZpbGU+IG91dHB1dEZpbGUg
PSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0aChvdXRwdXRGaWxlbmFtZS5nZXQoKSkpOwot
ICAgIEdPd25QdHI8Y2hhcj4gb3V0cHV0VVJJKGdfZmlsZV9nZXRfdXJpKG91dHB1dEZpbGUuZ2V0
KCkpKTsKLQotICAgIEdSZWZQdHI8R3RrUHJpbnRTZXR0aW5ncz4gcHJpbnRTZXR0aW5ncyA9IGFk
b3B0R1JlZihndGtfcHJpbnRfc2V0dGluZ3NfbmV3KCkpOwotICAgIGd0a19wcmludF9zZXR0aW5n
c19zZXRfcHJpbnRlcihwcmludFNldHRpbmdzLmdldCgpLCBndGtfcHJpbnRlcl9nZXRfbmFtZShw
cmludGVyLmdldCgpKSk7Ci0gICAgZ3RrX3ByaW50X3NldHRpbmdzX3NldChwcmludFNldHRpbmdz
LmdldCgpLCBHVEtfUFJJTlRfU0VUVElOR1NfT1VUUFVUX1VSSSwgb3V0cHV0VVJJLmdldCgpKTsK
LQotICAgIHdlYmtpdF9wcmludF9vcGVyYXRpb25fc2V0X3ByaW50X3NldHRpbmdzKHRlc3QtPm1f
cHJpbnRPcGVyYXRpb24uZ2V0KCksIHByaW50U2V0dGluZ3MuZ2V0KCkpOwotICAgIHdlYmtpdF9w
cmludF9vcGVyYXRpb25fcHJpbnQodGVzdC0+bV9wcmludE9wZXJhdGlvbi5nZXQoKSk7Ci0gICAg
dGVzdC0+d2FpdFVudGlsUHJpbnRGaW5pc2hlZCgpOwotCi0gICAgR1JlZlB0cjxHRmlsZUluZm8+
IGZpbGVJbmZvID0gYWRvcHRHUmVmKGdfZmlsZV9xdWVyeV9pbmZvKG91dHB1dEZpbGUuZ2V0KCks
IEdfRklMRV9BVFRSSUJVVEVfU1RBTkRBUkRfU0laRSAiLCIgR19GSUxFX0FUVFJJQlVURV9TVEFO
REFSRF9DT05URU5UX1RZUEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEdGaWxlUXVlcnlJbmZvRmxhZ3M+
KDApLCAwLCAwKSk7Ci0gICAgZ19hc3NlcnQoZmlsZUluZm8uZ2V0KCkpOwotICAgIGdfYXNzZXJ0
X2NtcGludChnX2ZpbGVfaW5mb19nZXRfc2l6ZShmaWxlSW5mby5nZXQoKSksID4sIDApOwotICAg
IGdfYXNzZXJ0X2NtcHN0cihnX2ZpbGVfaW5mb19nZXRfY29udGVudF90eXBlKGZpbGVJbmZvLmdl
dCgpKSwgPT0sICJhcHBsaWNhdGlvbi9wZGYiKTsKLQotICAgIGdfZmlsZV9kZWxldGUob3V0cHV0
RmlsZS5nZXQoKSwgMCwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RQcmludE9wZXJhdGlvbkVy
cm9ycyhQcmludFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+bG9hZEh0
bWwoIjxodG1sPjxib2R5PldlYktpdEdUSysgcHJpbnRpbmcgZXJyb3JzIHRlc3Q8L2JvZHk+PC9o
dG1sPiIsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgR1Jl
ZlB0cjxHdGtQcmludGVyPiBwcmludGVyID0gYWRvcHRHUmVmKHRlc3QtPmZpbmRQcmludFRvRmls
ZVByaW50ZXIoKSk7Ci0gICAgaWYgKCFwcmludGVyKSB7Ci0gICAgICAgIGdfbWVzc2FnZSgiJXMi
LCAiQ2Fubm90IHRlc3QgV2ViS2l0UHJpbnRPcGVyYXRpb24vcHJpbnQ6IG5vIHN1aXRhYmxlIHBy
aW50ZXIgZm91bmQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEdlbmVyYWwg
RXJyb3I6IGludmFsaWQgZmlsZW5hbWUuCi0gICAgdGVzdC0+bV9leHBlY3RlZEVycm9yID0gV0VC
S0lUX1BSSU5UX0VSUk9SX0dFTkVSQUw7Ci0gICAgR1JlZlB0cjxHdGtQcmludFNldHRpbmdzPiBw
cmludFNldHRpbmdzID0gYWRvcHRHUmVmKGd0a19wcmludF9zZXR0aW5nc19uZXcoKSk7Ci0gICAg
Z3RrX3ByaW50X3NldHRpbmdzX3NldF9wcmludGVyKHByaW50U2V0dGluZ3MuZ2V0KCksIGd0a19w
cmludGVyX2dldF9uYW1lKHByaW50ZXIuZ2V0KCkpKTsKLSAgICBndGtfcHJpbnRfc2V0dGluZ3Nf
c2V0KHByaW50U2V0dGluZ3MuZ2V0KCksIEdUS19QUklOVF9TRVRUSU5HU19PVVRQVVRfVVJJLCAi
ZmlsZTovLy9mb28vYmFyIik7Ci0gICAgd2Via2l0X3ByaW50X29wZXJhdGlvbl9zZXRfcHJpbnRf
c2V0dGluZ3ModGVzdC0+bV9wcmludE9wZXJhdGlvbi5nZXQoKSwgcHJpbnRTZXR0aW5ncy5nZXQo
KSk7Ci0gICAgd2Via2l0X3ByaW50X29wZXJhdGlvbl9wcmludCh0ZXN0LT5tX3ByaW50T3BlcmF0
aW9uLmdldCgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxQcmludEZpbmlzaGVkKCk7Ci0KLSAgICAv
LyBQcmludGVyIG5vdCBmb3VuZCBlcnJvci4KLSAgICB0ZXN0LT5tX2V4cGVjdGVkRXJyb3IgPSBX
RUJLSVRfUFJJTlRfRVJST1JfUFJJTlRFUl9OT1RfRk9VTkQ7Ci0gICAgZ3RrX3ByaW50X3NldHRp
bmdzX3NldF9wcmludGVyKHByaW50U2V0dGluZ3MuZ2V0KCksICJUaGUgZmFrZSBXZWJLaXQgcHJp
bnRlciIpOwotICAgIHdlYmtpdF9wcmludF9vcGVyYXRpb25fcHJpbnQodGVzdC0+bV9wcmludE9w
ZXJhdGlvbi5nZXQoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsUHJpbnRGaW5pc2hlZCgpOwotCi0g
ICAgLy8gTm8gcGFnZXMgdG8gcHJpbnQ6IHByaW50IGV2ZW4gcGFnZXMgZm9yIGEgc2luZ2xlIHBh
Z2UgZG9jdW1lbnQuCi0gICAgdGVzdC0+bV9leHBlY3RlZEVycm9yID0gV0VCS0lUX1BSSU5UX0VS
Uk9SX0lOVkFMSURfUEFHRV9SQU5HRTsKLSAgICBndGtfcHJpbnRfc2V0dGluZ3Nfc2V0X3ByaW50
ZXIocHJpbnRTZXR0aW5ncy5nZXQoKSwgZ3RrX3ByaW50ZXJfZ2V0X25hbWUocHJpbnRlci5nZXQo
KSkpOwotICAgIGd0a19wcmludF9zZXR0aW5nc19zZXRfcGFnZV9zZXQocHJpbnRTZXR0aW5ncy5n
ZXQoKSwgR1RLX1BBR0VfU0VUX0VWRU4pOwotICAgIHdlYmtpdF9wcmludF9vcGVyYXRpb25fcHJp
bnQodGVzdC0+bV9wcmludE9wZXJhdGlvbi5nZXQoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsUHJp
bnRGaW5pc2hlZCgpOwotfQotI2VuZGlmIC8vIEhBVkVfR1RLX1VOSVhfUFJJTlRJTkcKLQotdm9p
ZCBiZWZvcmVBbGwoKQotewotICAgIGtUZW1wRGlyZWN0b3J5ID0gZ19kaXJfbWFrZV90bXAoIldl
YktpdDJUZXN0cy1YWFhYWFgiLCAwKTsKLSAgICBnX2Fzc2VydChrVGVtcERpcmVjdG9yeSk7Ci0K
LSAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRQcmludE9wZXJhdGlvbiIsICJwcmludGluZy1z
ZXR0aW5ncyIsIHRlc3RQcmludE9wZXJhdGlvblByaW50U2V0dGluZ3MpOwotICAgIFdlYlZpZXdU
ZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAicHJpbnQiLCB0ZXN0V2ViVmlld1ByaW50KTsKLSNp
ZmRlZiBIQVZFX0dUS19VTklYX1BSSU5USU5HCi0gICAgUHJpbnRUZXN0OjphZGQoIldlYktpdFBy
aW50T3BlcmF0aW9uIiwgInByaW50IiwgdGVzdFByaW50T3BlcmF0aW9uUHJpbnQpOwotICAgIFBy
aW50VGVzdDo6YWRkKCJXZWJLaXRQcmludE9wZXJhdGlvbiIsICJwcmludC1lcnJvcnMiLCB0ZXN0
UHJpbnRPcGVyYXRpb25FcnJvcnMpOwotI2VuZGlmCi19Ci0KLXZvaWQgYWZ0ZXJBbGwoKQotewot
ICAgIGdfcm1kaXIoa1RlbXBEaXJlY3RvcnkpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFJlc291cmNlcy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0UmVzb3VyY2VzLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNTdmMTgyYy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0UmVzb3VyY2VzLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDc4OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwu
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKLSNp
bmNsdWRlICJXZWJWaWV3VGVzdC5oIgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRl
IDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Ci0KLXN0YXRpYyBXZWJLaXRUZXN0U2VydmVyKiBrU2Vy
dmVyOwotCi1zdGF0aWMgY29uc3QgY2hhcioga0luZGV4SHRtbCA9Ci0gICAgIjxodG1sPjxoZWFk
PiIKLSAgICAiIDxsaW5rIHJlbD0nc3R5bGVzaGVldCcgaHJlZj0nL3N0eWxlLmNzcycgdHlwZT0n
dGV4dC9jc3MnPiIKLSAgICAiIDxzY3JpcHQgbGFuZ3VhZ2U9J2phdmFzY3JpcHQnIHNyYz0nL2ph
dmFzY3JpcHQuanMnPjwvc2NyaXB0PiIKLSAgICAiPC9oZWFkPjxib2R5PldlYktpdEdUSysgcmVz
b3VyY2VzIHRlc3Q8L2JvZHk+PC9odG1sPiI7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBrU3R5bGVD
U1MgPQotICAgICJib2R5IHsiCi0gICAgIiAgICBtYXJnaW46IDBweDsiCi0gICAgIiAgICBwYWRk
aW5nOiAwcHg7IgotICAgICIgICAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7IgotICAgICIgICAg
YmFja2dyb3VuZDogdXJsKC9ibGFuay5pY28pIDAgMCBuby1yZXBlYXQ7IgotICAgICIgICAgY29s
b3I6IGJsYWNrOyIKLSAgICAifSI7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBrSmF2YXNjcmlwdCA9
ICJmdW5jdGlvbiBmb28gKCkgeyB2YXIgYSA9IDE7IH0iOwotCi1jbGFzcyBSZXNvdXJjZXNUZXN0
OiBwdWJsaWMgV2ViVmlld1Rlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRV
UkUoUmVzb3VyY2VzVGVzdCk7Ci0KLSAgICBzdGF0aWMgdm9pZCByZXNvdXJjZVNlbnRSZXF1ZXN0
Q2FsbGJhY2soV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBXZWJLaXRVUklSZXF1ZXN0KiBy
ZXF1ZXN0LCBXZWJLaXRVUklSZXNwb25zZSogcmVkaXJlY3RSZXNwb25zZSwgUmVzb3VyY2VzVGVz
dCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5U
ZXN0RmluaXNoZXMoR19PQkpFQ1QocmVxdWVzdCkpOwotICAgICAgICBpZiAocmVkaXJlY3RSZXNw
b25zZSkKLSAgICAgICAgICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0Rmlu
aXNoZXMoR19PQkpFQ1QocmVkaXJlY3RSZXNwb25zZSkpOwotICAgICAgICB0ZXN0LT5yZXNvdXJj
ZVNlbnRSZXF1ZXN0KHJlc291cmNlLCByZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKTsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgdm9pZCByZXNvdXJjZVJlY2VpdmVkUmVzcG9uc2VDYWxsYmFjayhXZWJL
aXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIEdQYXJhbVNwZWMqLCBSZXNvdXJjZXNUZXN0KiB0ZXN0
KQotICAgIHsKLSAgICAgICAgZ19hc3NlcnQod2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfcmVzcG9u
c2UocmVzb3VyY2UpKTsKLSAgICAgICAgdGVzdC0+cmVzb3VyY2VSZWNlaXZlZFJlc3BvbnNlKHJl
c291cmNlKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCByZXNvdXJjZVJlY2VpdmVkRGF0YUNh
bGxiYWNrKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgZ3VpbnQ2NCBieXRlc1JlY2VpdmVk
LCBSZXNvdXJjZXNUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+cmVzb3VyY2VSZWNl
aXZlZERhdGEocmVzb3VyY2UsIGJ5dGVzUmVjZWl2ZWQpOwotICAgIH0KLQotICAgIHN0YXRpYyB2
b2lkIHJlc291cmNlRmluaXNoZWRDYWxsYmFjayhXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2Us
IFJlc291cmNlc1Rlc3QqIHRlc3QpCi0gICAgewotICAgICAgICB0ZXN0LT5yZXNvdXJjZUZpbmlz
aGVkKHJlc291cmNlKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCByZXNvdXJjZUZhaWxlZENh
bGxiYWNrKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgR0Vycm9yKiBlcnJvciwgUmVzb3Vy
Y2VzVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0KGVycm9yKTsKLSAgICAgICAg
dGVzdC0+cmVzb3VyY2VGYWlsZWQocmVzb3VyY2UsIGVycm9yKTsKLSAgICB9Ci0KLSAgICBzdGF0
aWMgdm9pZCByZXNvdXJjZUxvYWRTdGFydGVkQ2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmll
dywgV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBXZWJLaXRVUklSZXF1ZXN0KiByZXF1ZXN0
LCBSZXNvdXJjZXNUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0
SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChyZXNvdXJjZSkpOwotICAgICAgICB0
ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHJlcXVl
c3QpKTsKLQotICAgICAgICAvLyBJZ25vcmUgZmF2aWNvbnMuCi0gICAgICAgIGlmIChnX3N0cl9o
YXNfc3VmZml4KHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfdXJpKHJlcXVlc3QpLCAiZmF2aWNvbi5p
Y28iKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0ZXN0LT5yZXNvdXJjZUxvYWRT
dGFydGVkKHJlc291cmNlLCByZXF1ZXN0KTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChyZXNv
dXJjZSwgInNlbnQtcmVxdWVzdCIsIEdfQ0FMTEJBQ0socmVzb3VyY2VTZW50UmVxdWVzdENhbGxi
YWNrKSwgdGVzdCk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QocmVzb3VyY2UsICJub3RpZnk6
OnJlc3BvbnNlIiwgR19DQUxMQkFDSyhyZXNvdXJjZVJlY2VpdmVkUmVzcG9uc2VDYWxsYmFjayks
IHRlc3QpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KHJlc291cmNlLCAicmVjZWl2ZWQtZGF0
YSIsIEdfQ0FMTEJBQ0socmVzb3VyY2VSZWNlaXZlZERhdGFDYWxsYmFjayksIHRlc3QpOwotICAg
ICAgICBnX3NpZ25hbF9jb25uZWN0KHJlc291cmNlLCAiZmluaXNoZWQiLCBHX0NBTExCQUNLKHJl
c291cmNlRmluaXNoZWRDYWxsYmFjayksIHRlc3QpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0
KHJlc291cmNlLCAiZmFpbGVkIiwgR19DQUxMQkFDSyhyZXNvdXJjZUZhaWxlZENhbGxiYWNrKSwg
dGVzdCk7Ci0gICAgfQotCi0gICAgdm9pZCBjbGVhclN1YnJlc291cmNlcygpCi0gICAgewotICAg
ICAgICBnX2xpc3RfZnJlZV9mdWxsKG1fc3VicmVzb3VyY2VzLCByZWludGVycHJldF9jYXN0PEdE
ZXN0cm95Tm90aWZ5PihnX29iamVjdF91bnJlZikpOwotICAgICAgICBtX3N1YnJlc291cmNlcyA9
IDA7Ci0gICAgfQotCi0gICAgUmVzb3VyY2VzVGVzdCgpCi0gICAgICAgIDogV2ViVmlld1Rlc3Qo
KQotICAgICAgICAsIG1fcmVzb3VyY2VzTG9hZGVkKDApCi0gICAgICAgICwgbV9yZXNvdXJjZXNU
b0xvYWQoMCkKLSAgICAgICAgLCBtX3Jlc291cmNlRGF0YVNpemUoMCkKLSAgICAgICAgLCBtX3N1
YnJlc291cmNlcygwKQotICAgIHsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcs
ICJyZXNvdXJjZS1sb2FkLXN0YXJ0ZWQiLCBHX0NBTExCQUNLKHJlc291cmNlTG9hZFN0YXJ0ZWRD
YWxsYmFjayksIHRoaXMpOwotICAgIH0KLQotICAgIH5SZXNvdXJjZXNUZXN0KCkKLSAgICB7Ci0g
ICAgICAgIGNsZWFyU3VicmVzb3VyY2VzKCk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHJl
c291cmNlTG9hZFN0YXJ0ZWQoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBXZWJLaXRVUklS
ZXF1ZXN0KiByZXF1ZXN0KQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcmVzb3Vy
Y2VTZW50UmVxdWVzdChXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIFdlYktpdFVSSVJlcXVl
c3QqIHJlcXVlc3QsIFdlYktpdFVSSVJlc3BvbnNlKiByZWRpcmVjdFJlc3BvbnNlKQotICAgIHsK
LSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcmVzb3VyY2VSZWNlaXZlZFJlc3BvbnNlKFdlYktp
dFdlYlJlc291cmNlKiByZXNvdXJjZSkKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lk
IHJlc291cmNlUmVjZWl2ZWREYXRhKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgZ3VpbnQ2
NCBieXRlc1JlY2VpdmVkKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcmVzb3Vy
Y2VGaW5pc2hlZChXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UpCi0gICAgewotICAgICAgICBn
X3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQocmVzb3VyY2UsIEdfU0lHTkFMX01B
VENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOwotICAgICAgICBpZiAod2Via2l0X3dlYl92aWV3
X2dldF9tYWluX3Jlc291cmNlKG1fd2ViVmlldykgIT0gcmVzb3VyY2UpCi0gICAgICAgICAgICBt
X3N1YnJlc291cmNlcyA9IGdfbGlzdF9wcmVwZW5kKG1fc3VicmVzb3VyY2VzLCBnX29iamVjdF9y
ZWYocmVzb3VyY2UpKTsKLSAgICAgICAgaWYgKCsrbV9yZXNvdXJjZXNMb2FkZWQgPT0gbV9yZXNv
dXJjZXNUb0xvYWQpCi0gICAgICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3ApOwot
ICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCByZXNvdXJjZUZhaWxlZChXZWJLaXRXZWJSZXNvdXJj
ZSogcmVzb3VyY2UsIEdFcnJvciogZXJyb3IpCi0gICAgewotICAgICAgICBnX2Fzc2VydF9ub3Rf
cmVhY2hlZCgpOwotICAgIH0KLQotICAgIHZvaWQgd2FpdFVudGlsUmVzb3VyY2VzTG9hZGVkKHNp
emVfdCByZXNvdXJjZXNDb3VudCkKLSAgICB7Ci0gICAgICAgIG1fcmVzb3VyY2VzTG9hZGVkID0g
MDsKLSAgICAgICAgbV9yZXNvdXJjZXNUb0xvYWQgPSByZXNvdXJjZXNDb3VudDsKLSAgICAgICAg
Y2xlYXJTdWJyZXNvdXJjZXMoKTsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3Ap
OwotICAgIH0KLQotICAgIEdMaXN0KiBzdWJyZXNvdXJjZXMoKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fc3VicmVzb3VyY2VzOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHJlc291cmNlR2V0
RGF0YUNhbGxiYWNrKEdPYmplY3QqIG9iamVjdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIGdwb2lu
dGVyIHVzZXJEYXRhKQotICAgIHsKLSAgICAgICAgc2l6ZV90IGRhdGFTaXplOwotICAgICAgICBH
T3duUHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIqIGRhdGEgPSB3ZWJr
aXRfd2ViX3Jlc291cmNlX2dldF9kYXRhX2ZpbmlzaChXRUJLSVRfV0VCX1JFU09VUkNFKG9iamVj
dCksIHJlc3VsdCwgJmRhdGFTaXplLCAmZXJyb3Iub3V0UHRyKCkpOwotICAgICAgICBnX2Fzc2Vy
dCghZXJyb3IuZ2V0KCkpOwotICAgICAgICBnX2Fzc2VydChkYXRhKTsKLSAgICAgICAgZ19hc3Nl
cnRfY21waW50KGRhdGFTaXplLCA+LCAwKTsKLQotICAgICAgICBSZXNvdXJjZXNUZXN0KiB0ZXN0
ID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VzVGVzdCo+KHVzZXJEYXRhKTsKLSAgICAgICAgdGVzdC0+
bV9yZXNvdXJjZURhdGEuc2V0KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGRhdGEpKTsKLSAgICAg
ICAgdGVzdC0+bV9yZXNvdXJjZURhdGFTaXplID0gZGF0YVNpemU7Ci0gICAgICAgIGdfbWFpbl9s
b29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgdm9pZCBjaGVja1Jlc291
cmNlRGF0YShXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UpCi0gICAgewotICAgICAgICBtX3Jl
c291cmNlRGF0YVNpemUgPSAwOwotICAgICAgICB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF9kYXRh
KHJlc291cmNlLCAwLCByZXNvdXJjZUdldERhdGFDYWxsYmFjaywgdGhpcyk7Ci0gICAgICAgIGdf
bWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLQotICAgICAgICBjb25zdCBjaGFyKiB1cmkgPSB3
ZWJraXRfd2ViX3Jlc291cmNlX2dldF91cmkocmVzb3VyY2UpOwotICAgICAgICBpZiAodXJpID09
IGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi8iKSkgewotICAgICAgICAgICAgZ19hc3NlcnRfY21w
aW50KG1fcmVzb3VyY2VEYXRhU2l6ZSwgPT0sIHN0cmxlbihrSW5kZXhIdG1sKSk7Ci0gICAgICAg
ICAgICBnX2Fzc2VydCghc3RybmNtcChtX3Jlc291cmNlRGF0YS5nZXQoKSwga0luZGV4SHRtbCwg
bV9yZXNvdXJjZURhdGFTaXplKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAodXJpID09IGtTZXJ2ZXIt
PmdldFVSSUZvclBhdGgoIi9zdHlsZS5jc3MiKSkgewotICAgICAgICAgICAgZ19hc3NlcnRfY21w
aW50KG1fcmVzb3VyY2VEYXRhU2l6ZSwgPT0sIHN0cmxlbihrU3R5bGVDU1MpKTsKLSAgICAgICAg
ICAgIGdfYXNzZXJ0KCFzdHJuY21wKG1fcmVzb3VyY2VEYXRhLmdldCgpLCBrU3R5bGVDU1MsIG1f
cmVzb3VyY2VEYXRhU2l6ZSkpOwotICAgICAgICB9IGVsc2UgaWYgKHVyaSA9PSBrU2VydmVyLT5n
ZXRVUklGb3JQYXRoKCIvamF2YXNjcmlwdC5qcyIpKSB7Ci0gICAgICAgICAgICBnX2Fzc2VydF9j
bXBpbnQobV9yZXNvdXJjZURhdGFTaXplLCA9PSwgc3RybGVuKGtKYXZhc2NyaXB0KSk7Ci0gICAg
ICAgICAgICBnX2Fzc2VydCghc3RybmNtcChtX3Jlc291cmNlRGF0YS5nZXQoKSwga0phdmFzY3Jp
cHQsIG1fcmVzb3VyY2VEYXRhU2l6ZSkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGdf
YXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0gICAgICAgIG1fcmVzb3VyY2VEYXRhLmNsZWFyKCk7Ci0g
ICAgfQotCi0gICAgc2l6ZV90IG1fcmVzb3VyY2VzTG9hZGVkOwotICAgIHNpemVfdCBtX3Jlc291
cmNlc1RvTG9hZDsKLSAgICBHT3duUHRyPGNoYXI+IG1fcmVzb3VyY2VEYXRhOwotICAgIHNpemVf
dCBtX3Jlc291cmNlRGF0YVNpemU7Ci0gICAgR0xpc3QqIG1fc3VicmVzb3VyY2VzOwotfTsKLQot
c3RhdGljIHZvaWQgdGVzdFdlYlZpZXdSZXNvdXJjZXMoUmVzb3VyY2VzVGVzdCogdGVzdCwgZ2Nv
bnN0cG9pbnRlcikKLXsKLSAgICAvLyBOb3RoaW5nIGxvYWRlZCB5ZXQsIHRoZXJlIHNob3VsbmQn
dCBiZSByZXNvdXJjZXMuCi0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9y
ZXNvdXJjZSh0ZXN0LT5tX3dlYlZpZXcpKTsKLSAgICBnX2Fzc2VydCghdGVzdC0+c3VicmVzb3Vy
Y2VzKCkpOwotCi0gICAgLy8gTG9hZCBzaW1wbGUgcGFnZSB3aXRob3V0IHN1YnJlc291cmNlcy4K
LSAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHk+VGVzdGluZyBXZWJLaXRHVEsrPC9ib2R5
PjwvaHRtbD4iLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBX
ZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVz
b3VyY2UodGVzdC0+bV93ZWJWaWV3KTsKLSAgICBnX2Fzc2VydChyZXNvdXJjZSk7Ci0gICAgZ19h
c3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKHRlc3QtPm1fd2ViVmlldyksID09
LCB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF91cmkocmVzb3VyY2UpKTsKLSAgICBnX2Fzc2VydCgh
dGVzdC0+c3VicmVzb3VyY2VzKCkpOwotCi0gICAgLy8gTG9hZCBzaW1wbGUgcGFnZSB3aXRoIHN1
YnJlc291cmNlcy4KLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi8i
KS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbFJlc291cmNlc0xvYWRlZCg0KTsKLQotICAg
IHJlc291cmNlID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX3Jlc291cmNlKHRlc3QtPm1fd2Vi
Vmlldyk7Ci0gICAgZ19hc3NlcnQocmVzb3VyY2UpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X3VyaSh0ZXN0LT5tX3dlYlZpZXcpLCA9PSwgd2Via2l0X3dlYl9yZXNv
dXJjZV9nZXRfdXJpKHJlc291cmNlKSk7Ci0gICAgR0xpc3QqIHN1YnJlc291cmNlcyA9IHRlc3Qt
PnN1YnJlc291cmNlcygpOwotICAgIGdfYXNzZXJ0KHN1YnJlc291cmNlcyk7Ci0gICAgZ19hc3Nl
cnRfY21waW50KGdfbGlzdF9sZW5ndGgoc3VicmVzb3VyY2VzKSwgPT0sIDMpOwotCi0jaWYgMAot
ICAgIC8vIExvYWQgdGhlIHNhbWUgVVJJIGFnYWluLgotICAgIC8vIEZJWE1FOiB3ZSBuZWVkIGEg
d29ya2Fyb3VuZCBmb3IgYnVnIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03ODUxMC4KLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi8iKS5k
YXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbFJlc291cmNlc0xvYWRlZCg0KTsKLSNlbmRpZgot
Ci0gICAgLy8gUmVsb2FkLgotICAgIHdlYmtpdF93ZWJfdmlld19yZWxvYWRfYnlwYXNzX2NhY2hl
KHRlc3QtPm1fd2ViVmlldyk7Ci0gICAgdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VzTG9hZGVkKDQp
OwotfQotCi1jbGFzcyBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OiBwdWJsaWMgUmVzb3VyY2VzVGVz
dCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShTaW5nbGVSZXNvdXJjZUxv
YWRUZXN0KTsKLQotICAgIGVudW0gTG9hZEV2ZW50cyB7Ci0gICAgICAgIFN0YXJ0ZWQsCi0gICAg
ICAgIFNlbnRSZXF1ZXN0LAotICAgICAgICBSZWRpcmVjdGVkLAotICAgICAgICBSZWNlaXZlZFJl
c3BvbnNlLAotICAgICAgICBSZWNlaXZlZERhdGEsCi0gICAgICAgIEZpbmlzaGVkLAotICAgICAg
ICBGYWlsZWQKLSAgICB9OwotCi0gICAgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdCgpCi0gICAgICAg
IDogUmVzb3VyY2VzVGVzdCgpCi0gICAgICAgICwgbV9yZXNvdXJjZURhdGFSZWNlaXZlZCgwKQot
ICAgIHsKLSAgICAgICAgIG1fcmVzb3VyY2VzVG9Mb2FkID0gMjsKLSAgICB9Ci0KLSAgICB2b2lk
IHJlc291cmNlTG9hZFN0YXJ0ZWQoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBXZWJLaXRV
UklSZXF1ZXN0KiByZXF1ZXN0KQotICAgIHsKLSAgICAgICAgaWYgKHJlc291cmNlID09IHdlYmtp
dF93ZWJfdmlld19nZXRfbWFpbl9yZXNvdXJjZShtX3dlYlZpZXcpKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIG1fcmVzb3VyY2VEYXRhUmVjZWl2ZWQgPSAwOwotICAgICAgICBtX3Jl
c291cmNlID0gcmVzb3VyY2U7Ci0gICAgICAgIG1fbG9hZEV2ZW50cy5hcHBlbmQoU3RhcnRlZCk7
Ci0gICAgfQotCi0gICAgdm9pZCByZXNvdXJjZVNlbnRSZXF1ZXN0KFdlYktpdFdlYlJlc291cmNl
KiByZXNvdXJjZSwgV2ViS2l0VVJJUmVxdWVzdCogcmVxdWVzdCwgV2ViS2l0VVJJUmVzcG9uc2Uq
IHJlZGlyZWN0UmVzcG9uc2UpCi0gICAgewotICAgICAgICBpZiAocmVzb3VyY2UgIT0gbV9yZXNv
dXJjZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAocmVkaXJlY3RSZXNwb25z
ZSkKLSAgICAgICAgICAgIG1fbG9hZEV2ZW50cy5hcHBlbmQoUmVkaXJlY3RlZCk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIG1fbG9hZEV2ZW50cy5hcHBlbmQoU2VudFJlcXVlc3QpOwotICAg
IH0KLQotICAgIHZvaWQgcmVzb3VyY2VSZWNlaXZlZFJlc3BvbnNlKFdlYktpdFdlYlJlc291cmNl
KiByZXNvdXJjZSkKLSAgICB7Ci0gICAgICAgIGlmIChyZXNvdXJjZSAhPSBtX3Jlc291cmNlKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG1fbG9hZEV2ZW50cy5hcHBlbmQoUmVjZWl2
ZWRSZXNwb25zZSk7Ci0gICAgfQotCi0gICAgdm9pZCByZXNvdXJjZVJlY2VpdmVkRGF0YShXZWJL
aXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIGd1aW50NjQgYnl0ZXNSZWNlaXZlZCkKLSAgICB7Ci0g
ICAgICAgIGlmIChyZXNvdXJjZSAhPSBtX3Jlc291cmNlKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIG1fcmVzb3VyY2VEYXRhUmVjZWl2ZWQgKz0gYnl0ZXNSZWNlaXZlZDsKLSAgICAg
ICAgaWYgKCFtX2xvYWRFdmVudHMuY29udGFpbnMoUmVjZWl2ZWREYXRhKSkKLSAgICAgICAgICAg
IG1fbG9hZEV2ZW50cy5hcHBlbmQoUmVjZWl2ZWREYXRhKTsKLSAgICB9Ci0KLSAgICB2b2lkIHJl
c291cmNlRmluaXNoZWQoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlKQotICAgIHsKLSAgICAg
ICAgaWYgKHJlc291cmNlICE9IG1fcmVzb3VyY2UpIHsKLSAgICAgICAgICAgIFJlc291cmNlc1Rl
c3Q6OnJlc291cmNlRmluaXNoZWQocmVzb3VyY2UpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKCFtX2xvYWRFdmVudHMuY29udGFpbnMoRmFpbGVkKSkgewot
ICAgICAgICAgICAgV2ViS2l0VVJJUmVzcG9uc2UqIHJlc3BvbnNlID0gd2Via2l0X3dlYl9yZXNv
dXJjZV9nZXRfcmVzcG9uc2UobV9yZXNvdXJjZS5nZXQoKSk7Ci0gICAgICAgICAgICBnX2Fzc2Vy
dChyZXNwb25zZSk7Ci0gICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3VyaV9yZXNw
b25zZV9nZXRfY29udGVudF9sZW5ndGgocmVzcG9uc2UpLCA9PSwgbV9yZXNvdXJjZURhdGFSZWNl
aXZlZCk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9sb2FkRXZlbnRzLmFwcGVuZChGaW5pc2hlZCk7
Ci0gICAgICAgIFJlc291cmNlc1Rlc3Q6OnJlc291cmNlRmluaXNoZWQocmVzb3VyY2UpOwotICAg
IH0KLQotICAgIHZvaWQgcmVzb3VyY2VGYWlsZWQoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNl
LCBHRXJyb3IqIGVycm9yKQotICAgIHsKLSAgICAgICAgaWYgKHJlc291cmNlID09IG1fcmVzb3Vy
Y2UpCi0gICAgICAgICAgICBtX2xvYWRFdmVudHMuYXBwZW5kKEZhaWxlZCk7Ci0gICAgfQotCi0g
ICAgdm9pZCB3YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZCgpCi0gICAgewotICAgICAgICBt
X3Jlc291cmNlID0gMDsKLSAgICAgICAgbV9yZXNvdXJjZXNMb2FkZWQgPSAwOwotICAgICAgICBn
X21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgV2ViS2l0VVJJUmVzcG9u
c2UqIHdhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlzaGVkQW5kUmV0dXJuVVJJUmVzcG9uc2UoKQot
ICAgIHsKLSAgICAgICAgd2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWQoKTsKLSAgICAgICAg
Z19hc3NlcnQobV9yZXNvdXJjZSk7Ci0gICAgICAgIHJldHVybiB3ZWJraXRfd2ViX3Jlc291cmNl
X2dldF9yZXNwb25zZShtX3Jlc291cmNlLmdldCgpKTsKLSAgICB9Ci0KLSAgICBHUmVmUHRyPFdl
YktpdFdlYlJlc291cmNlPiBtX3Jlc291cmNlOwotICAgIFZlY3RvcjxMb2FkRXZlbnRzPiBtX2xv
YWRFdmVudHM7Ci0gICAgZ3VpbnQ2NCBtX3Jlc291cmNlRGF0YVJlY2VpdmVkOwotfTsKLQotc3Rh
dGljIHZvaWQgdGVzdFdlYlJlc291cmNlTG9hZGluZyhTaW5nbGVSZXNvdXJjZUxvYWRUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJ
Rm9yUGF0aCgiL2phdmFzY3JpcHQuaHRtbCIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGls
UmVzb3VyY2VMb2FkRmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX3Jlc291cmNlKTsK
LSAgICBWZWN0b3I8U2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6TG9hZEV2ZW50cz4mIGV2ZW50cyA9
IHRlc3QtPm1fbG9hZEV2ZW50czsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwg
PT0sIDUpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBTaW5nbGVSZXNvdXJj
ZUxvYWRUZXN0OjpTdGFydGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwg
U2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6U2VudFJlcXVlc3QpOwotICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHNbMl0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpSZWNlaXZlZFJlc3BvbnNl
KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzNdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2Fk
VGVzdDo6UmVjZWl2ZWREYXRhKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzRdLCA9PSwg
U2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6RmluaXNoZWQpOwotICAgIGV2ZW50cy5jbGVhcigpOwot
Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvcmVkaXJlY3RlZC1j
c3MuaHRtbCIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNo
ZWQoKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX3Jlc291cmNlKTsKLSAgICBnX2Fzc2VydF9jbXBp
bnQoZXZlbnRzLnNpemUoKSwgPT0sIDYpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0s
ID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpTdGFydGVkKTsKLSAgICBnX2Fzc2VydF9jbXBp
bnQoZXZlbnRzWzFdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6U2VudFJlcXVlc3QpOwot
ICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0
OjpSZWRpcmVjdGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzNdLCA9PSwgU2luZ2xl
UmVzb3VyY2VMb2FkVGVzdDo6UmVjZWl2ZWRSZXNwb25zZSk7Ci0gICAgZ19hc3NlcnRfY21waW50
KGV2ZW50c1s0XSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlJlY2VpdmVkRGF0YSk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1s1XSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6
OkZpbmlzaGVkKTsKLSAgICBldmVudHMuY2xlYXIoKTsKLQotICAgIHRlc3QtPmxvYWRVUkkoa1Nl
cnZlci0+Z2V0VVJJRm9yUGF0aCgiL2ludmFsaWQtY3NzLmh0bWwiKS5kYXRhKCkpOwotICAgIHRl
c3QtPndhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlzaGVkKCk7Ci0gICAgZ19hc3NlcnQodGVzdC0+
bV9yZXNvdXJjZSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCA0KTsK
LSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVz
dDo6U3RhcnRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIFNpbmdsZVJl
c291cmNlTG9hZFRlc3Q6OlNlbnRSZXF1ZXN0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRz
WzJdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6RmFpbGVkKTsKLSAgICBnX2Fzc2VydF9j
bXBpbnQoZXZlbnRzWzNdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6RmluaXNoZWQpOwot
ICAgIGV2ZW50cy5jbGVhcigpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViUmVzb3VyY2VSZXNw
b25zZShTaW5nbGVSZXNvdXJjZUxvYWRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAg
IC8vIE5vIGNhY2hlZCByZXNvdXJjZTogRmlyc3QgbG9hZC4KLSAgICB0ZXN0LT5sb2FkVVJJKGtT
ZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9qYXZhc2NyaXB0Lmh0bWwiKS5kYXRhKCkpOwotICAgIFdl
YktpdFVSSVJlc3BvbnNlKiByZXNwb25zZSA9IHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9hZEZp
bmlzaGVkQW5kUmV0dXJuVVJJUmVzcG9uc2UoKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0
X3VyaV9yZXNwb25zZV9nZXRfc3RhdHVzX2NvZGUocmVzcG9uc2UpLCA9PSwgU09VUF9TVEFUVVNf
T0spOwotCi0gICAgLy8gTm8gY2FjaGVkIHJlc291cmNlOiBTZWNvbmQgbG9hZC4KLSAgICB0ZXN0
LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9qYXZhc2NyaXB0Lmh0bWwiKS5kYXRh
KCkpOwotICAgIHJlc3BvbnNlID0gdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWRB
bmRSZXR1cm5VUklSZXNwb25zZSgpOwotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfdXJpX3Jl
c3BvbnNlX2dldF9zdGF0dXNfY29kZShyZXNwb25zZSksID09LCBTT1VQX1NUQVRVU19PSyk7Ci0K
LSAgICAvLyBObyBjYWNoZWQgcmVzb3VyY2U6IFJlbG9hZC4KLSAgICB3ZWJraXRfd2ViX3ZpZXdf
cmVsb2FkKHRlc3QtPm1fd2ViVmlldyk7Ci0gICAgcmVzcG9uc2UgPSB0ZXN0LT53YWl0VW50aWxS
ZXNvdXJjZUxvYWRGaW5pc2hlZEFuZFJldHVyblVSSVJlc3BvbnNlKCk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KHdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0X3N0YXR1c19jb2RlKHJlc3BvbnNlKSwgPT0s
IFNPVVBfU1RBVFVTX09LKTsKLQotICAgIC8vIENhY2hlZCByZXNvdXJjZTogRmlyc3QgbG9hZC4K
LSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbWFnZS5odG1sIiku
ZGF0YSgpKTsKLSAgICByZXNwb25zZSA9IHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlz
aGVkQW5kUmV0dXJuVVJJUmVzcG9uc2UoKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3Vy
aV9yZXNwb25zZV9nZXRfc3RhdHVzX2NvZGUocmVzcG9uc2UpLCA9PSwgU09VUF9TVEFUVVNfT0sp
OwotCi0gICAgLy8gQ2FjaGVkIHJlc291cmNlOiBTZWNvbmQgbG9hZC4KLSAgICB0ZXN0LT5sb2Fk
VVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbWFnZS5odG1sIikuZGF0YSgpKTsKLSAgICBy
ZXNwb25zZSA9IHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlzaGVkQW5kUmV0dXJuVVJJ
UmVzcG9uc2UoKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3VyaV9yZXNwb25zZV9nZXRf
c3RhdHVzX2NvZGUocmVzcG9uc2UpLCA9PSwgU09VUF9TVEFUVVNfT0spOwotCi0gICAgLy8gQ2Fj
aGVkIHJlc291cmNlOiBSZWxvYWQuCi0gICAgd2Via2l0X3dlYl92aWV3X3JlbG9hZCh0ZXN0LT5t
X3dlYlZpZXcpOwotICAgIHJlc3BvbnNlID0gdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmlu
aXNoZWRBbmRSZXR1cm5VUklSZXNwb25zZSgpOwotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRf
dXJpX3Jlc3BvbnNlX2dldF9zdGF0dXNfY29kZShyZXNwb25zZSksID09LCBTT1VQX1NUQVRVU19O
T1RfTU9ESUZJRUQpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViUmVzb3VyY2VNaW1lVHlwZShT
aW5nbGVSZXNvdXJjZUxvYWRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3Qt
PmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2phdmFzY3JpcHQuaHRtbCIpLmRhdGEo
KSk7Ci0gICAgV2ViS2l0VVJJUmVzcG9uc2UqIHJlc3BvbnNlID0gdGVzdC0+d2FpdFVudGlsUmVz
b3VyY2VMb2FkRmluaXNoZWRBbmRSZXR1cm5VUklSZXNwb25zZSgpOwotICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF9taW1lX3R5cGUocmVzcG9uc2UpLCA9PSwgInRl
eHQvamF2YXNjcmlwdCIpOwotCi0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQ
YXRoKCIvaW1hZ2UuaHRtbCIpLmRhdGEoKSk7Ci0gICAgcmVzcG9uc2UgPSB0ZXN0LT53YWl0VW50
aWxSZXNvdXJjZUxvYWRGaW5pc2hlZEFuZFJldHVyblVSSVJlc3BvbnNlKCk7Ci0gICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0X21pbWVfdHlwZShyZXNwb25zZSksID09
LCAiaW1hZ2Uvdm5kLm1pY3Jvc29mdC5pY29uIik7Ci0KLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2
ZXItPmdldFVSSUZvclBhdGgoIi9yZWRpcmVjdGVkLWNzcy5odG1sIikuZGF0YSgpKTsKLSAgICBy
ZXNwb25zZSA9IHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlzaGVkQW5kUmV0dXJuVVJJ
UmVzcG9uc2UoKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3VyaV9yZXNwb25zZV9nZXRf
bWltZV90eXBlKHJlc3BvbnNlKSwgPT0sICJ0ZXh0L2NzcyIpOwotfQotCi1zdGF0aWMgdm9pZCB0
ZXN0V2ViUmVzb3VyY2VTdWdnZXN0ZWRGaWxlbmFtZShTaW5nbGVSZXNvdXJjZUxvYWRUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJ
Rm9yUGF0aCgiL2phdmFzY3JpcHQuaHRtbCIpLmRhdGEoKSk7Ci0gICAgV2ViS2l0VVJJUmVzcG9u
c2UqIHJlc3BvbnNlID0gdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWRBbmRSZXR1
cm5VUklSZXNwb25zZSgpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfdXJpX3Jlc3BvbnNl
X2dldF9zdWdnZXN0ZWRfZmlsZW5hbWUocmVzcG9uc2UpLCA9PSwgIkphdmFTY3JpcHQuanMiKTsK
LQotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2ltYWdlLmh0bWwi
KS5kYXRhKCkpOwotICAgIHJlc3BvbnNlID0gdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmlu
aXNoZWRBbmRSZXR1cm5VUklSZXNwb25zZSgpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfdXJpX3Jl
c3BvbnNlX2dldF9zdWdnZXN0ZWRfZmlsZW5hbWUocmVzcG9uc2UpKTsKLX0KLQotY2xhc3MgUmVz
b3VyY2VVUklUcmFja2luZ1Rlc3Q6IHB1YmxpYyBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0IHsKLXB1
YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFJlc291cmNlVVJJVHJhY2tpbmdUZXN0
KTsKLQotICAgIFJlc291cmNlVVJJVHJhY2tpbmdUZXN0KCkKLSAgICAgICAgOiBTaW5nbGVSZXNv
dXJjZUxvYWRUZXN0KCkKLSAgICB7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgdXJpQ2hhbmdl
ZChXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIEdQYXJhbVNwZWMqLCBSZXNvdXJjZVVSSVRy
YWNraW5nVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0KHJlc291cmNlID09IHRl
c3QtPm1fcmVzb3VyY2UuZ2V0KCkpOwotICAgICAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9h
Y3RpdmVVUkkuZGF0YSgpLCAhPSwgd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJpKHRlc3QtPm1f
cmVzb3VyY2UuZ2V0KCkpKTsKLSAgICAgICAgdGVzdC0+bV9hY3RpdmVVUkkgPSB3ZWJraXRfd2Vi
X3Jlc291cmNlX2dldF91cmkodGVzdC0+bV9yZXNvdXJjZS5nZXQoKSk7Ci0gICAgfQotCi0gICAg
dm9pZCByZXNvdXJjZUxvYWRTdGFydGVkKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgV2Vi
S2l0VVJJUmVxdWVzdCogcmVxdWVzdCkKLSAgICB7Ci0gICAgICAgIGlmIChyZXNvdXJjZSA9PSB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2UobV93ZWJWaWV3KSkKLSAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICBtX3Jlc291cmNlID0gcmVzb3VyY2U7Ci0gICAgICAgIG1fYWN0
aXZlVVJJID0gd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJpKHJlc291cmNlKTsKLSAgICAgICAg
Y2hlY2tBY3RpdmVVUkkoIi9yZWRpcmVjdGVkLmNzcyIpOwotICAgICAgICBnX2Fzc2VydF9jbXBz
dHIobV9hY3RpdmVVUkkuZGF0YSgpLCA9PSwgd2Via2l0X3VyaV9yZXF1ZXN0X2dldF91cmkocmVx
dWVzdCkpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KHJlc291cmNlLCAibm90aWZ5Ojp1cmki
LCBHX0NBTExCQUNLKHVyaUNoYW5nZWQpLCB0aGlzKTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlc291
cmNlU2VudFJlcXVlc3QoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBXZWJLaXRVUklSZXF1
ZXN0KiByZXF1ZXN0LCBXZWJLaXRVUklSZXNwb25zZSogcmVkaXJlY3RSZXNwb25zZSkKLSAgICB7
Ci0gICAgICAgIGlmIChyZXNvdXJjZSAhPSBtX3Jlc291cmNlKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIGlmIChyZWRpcmVjdFJlc3BvbnNlKQotICAgICAgICAgICAgY2hlY2tBY3Rp
dmVVUkkoIi9zaW1wbGUtc3R5bGUuY3NzIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNo
ZWNrQWN0aXZlVVJJKCIvcmVkaXJlY3RlZC5jc3MiKTsKLSAgICAgICAgZ19hc3NlcnRfY21wc3Ry
KG1fYWN0aXZlVVJJLmRhdGEoKSwgPT0sIHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfdXJpKHJlcXVl
c3QpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlc291cmNlUmVjZWl2ZWRSZXNwb25zZShXZWJLaXRX
ZWJSZXNvdXJjZSogcmVzb3VyY2UpCi0gICAgewotICAgICAgICBpZiAocmVzb3VyY2UgIT0gbV9y
ZXNvdXJjZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBjaGVja0FjdGl2ZVVSSSgi
L3NpbXBsZS1zdHlsZS5jc3MiKTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlc291cmNlUmVjZWl2ZWRE
YXRhKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgZ3VpbnQ2NCBieXRlc1JlY2VpdmVkKQot
ICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIHJlc291cmNlRmluaXNoZWQoV2ViS2l0V2ViUmVzb3Vy
Y2UqIHJlc291cmNlKQotICAgIHsKLSAgICAgICAgaWYgKHJlc291cmNlID09IG1fcmVzb3VyY2Up
Ci0gICAgICAgICAgICBjaGVja0FjdGl2ZVVSSSgiL3NpbXBsZS1zdHlsZS5jc3MiKTsKLSAgICAg
ICAgUmVzb3VyY2VzVGVzdDo6cmVzb3VyY2VGaW5pc2hlZChyZXNvdXJjZSk7Ci0gICAgfQotCi0g
ICAgdm9pZCByZXNvdXJjZUZhaWxlZChXZWJLaXRXZWJSZXNvdXJjZSosIEdFcnJvciopCi0gICAg
ewotICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAgIH0KLQotICAgIENTdHJpbmcg
bV9hY3RpdmVVUkk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBjaGVja0FjdGl2ZVVSSShjb25zdCBj
aGFyKiB1cmkpCi0gICAgewotICAgICAgICBBU1NFUlRfQ01QX0NTVFJJTkcobV9hY3RpdmVVUkks
ID09LCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKHVyaSkpOwotICAgIH0KLX07Ci0KLXN0YXRpYyB2
b2lkIHRlc3RXZWJSZXNvdXJjZUFjdGl2ZVVSSShSZXNvdXJjZVVSSVRyYWNraW5nVGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZv
clBhdGgoIi9yZWRpcmVjdGVkLWNzcy5odG1sIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50
aWxSZXNvdXJjZUxvYWRGaW5pc2hlZCgpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViUmVzb3Vy
Y2VHZXREYXRhKFJlc291cmNlc1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVz
dC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIikuZGF0YSgpKTsKLSAgICAvLyBG
SVhNRTogdGhpcyBzaG91bGQgYmUgNCBpbnN0ZWFkIG9mIDMsIGJ1dCB3ZSBkb24ndCBnZXQgdGhl
IGNzcyBpbWFnZSByZXNvdXJjZQotICAgIC8vIGR1ZSB0byBidWcgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NTEwLgotICAgIHRlc3QtPndhaXRVbnRpbFJlc291cmNl
c0xvYWRlZCgzKTsKLQotICAgIFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSA9IHdlYmtpdF93
ZWJfdmlld19nZXRfbWFpbl9yZXNvdXJjZSh0ZXN0LT5tX3dlYlZpZXcpOwotICAgIGdfYXNzZXJ0
KHJlc291cmNlKTsKLSAgICB0ZXN0LT5jaGVja1Jlc291cmNlRGF0YShyZXNvdXJjZSk7Ci0KLSAg
ICBHTGlzdCogc3VicmVzb3VyY2VzID0gdGVzdC0+c3VicmVzb3VyY2VzKCk7Ci0gICAgZm9yIChH
TGlzdCogaXRlbSA9IHN1YnJlc291cmNlczsgaXRlbTsgaXRlbSA9IGdfbGlzdF9uZXh0KGl0ZW0p
KQotICAgICAgICB0ZXN0LT5jaGVja1Jlc291cmNlRGF0YShXRUJLSVRfV0VCX1JFU09VUkNFKGl0
ZW0tPmRhdGEpKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdSZXNvdXJjZXNIaXN0b3J5
Q2FjaGUoU2luZ2xlUmVzb3VyY2VMb2FkVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAg
ICBDU3RyaW5nIGphdmFzY3JpcHRVUkkgPSBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvamF2YXNj
cmlwdC5odG1sIik7Ci0gICAgdGVzdC0+bG9hZFVSSShqYXZhc2NyaXB0VVJJLmRhdGEoKSk7Ci0g
ICAgdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWQoKTsKLSAgICBXZWJLaXRXZWJS
ZXNvdXJjZSogcmVzb3VyY2UgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2UodGVz
dC0+bV93ZWJWaWV3KTsKLSAgICBnX2Fzc2VydChyZXNvdXJjZSk7Ci0gICAgZ19hc3NlcnRfY21w
c3RyKHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaShyZXNvdXJjZSksID09LCBqYXZhc2NyaXB0
VVJJLmRhdGEoKSk7Ci0KLSAgICBDU3RyaW5nIHNpbXBsZVN0eWxlQ1NTVVJJID0ga1NlcnZlci0+
Z2V0VVJJRm9yUGF0aCgiL3NpbXBsZS1zdHlsZS1jc3MuaHRtbCIpOwotICAgIHRlc3QtPmxvYWRV
Ukkoc2ltcGxlU3R5bGVDU1NVUkkuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxSZXNvdXJj
ZUxvYWRGaW5pc2hlZCgpOwotICAgIHJlc291cmNlID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWlu
X3Jlc291cmNlKHRlc3QtPm1fd2ViVmlldyk7Ci0gICAgZ19hc3NlcnQocmVzb3VyY2UpOwotICAg
IGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3Jlc291cmNlX2dldF91cmkocmVzb3VyY2UpLCA9
PSwgc2ltcGxlU3R5bGVDU1NVUkkuZGF0YSgpKTsKLQotICAgIHRlc3QtPmdvQmFjaygpOwotICAg
IHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlzaGVkKCk7Ci0gICAgcmVzb3VyY2UgPSB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2UodGVzdC0+bV93ZWJWaWV3KTsKLSAgICBn
X2Fzc2VydChyZXNvdXJjZSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfcmVzb3Vy
Y2VfZ2V0X3VyaShyZXNvdXJjZSksID09LCBqYXZhc2NyaXB0VVJJLmRhdGEoKSk7Ci0KLSAgICB0
ZXN0LT5nb0ZvcndhcmQoKTsKLSAgICB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hl
ZCgpOwotICAgIHJlc291cmNlID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX3Jlc291cmNlKHRl
c3QtPm1fd2ViVmlldyk7Ci0gICAgZ19hc3NlcnQocmVzb3VyY2UpOwotICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfd2ViX3Jlc291cmNlX2dldF91cmkocmVzb3VyY2UpLCA9PSwgc2ltcGxlU3R5
bGVDU1NVUkkuZGF0YSgpKTsKLX0KLQotY2xhc3MgU2VuZFJlcXVlc3RUZXN0OiBwdWJsaWMgU2lu
Z2xlUmVzb3VyY2VMb2FkVGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVS
RShTZW5kUmVxdWVzdFRlc3QpOwotCi0gICAgdm9pZCByZXNvdXJjZVNlbnRSZXF1ZXN0KFdlYktp
dFdlYlJlc291cmNlKiByZXNvdXJjZSwgV2ViS2l0VVJJUmVxdWVzdCogcmVxdWVzdCwgV2ViS2l0
VVJJUmVzcG9uc2UqIHJlZGlyZWN0UmVzcG9uc2UpCi0gICAgewotICAgICAgICBpZiAocmVzb3Vy
Y2UgIT0gbV9yZXNvdXJjZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAocmVk
aXJlY3RSZXNwb25zZSkKLSAgICAgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfdXJpX3Jl
cXVlc3RfZ2V0X3VyaShyZXF1ZXN0KSwgPT0sIG1fZXhwZWN0ZWROZXdSZXNvdXJjZVVSSUFmdGVy
UmVkaXJlY3Rpb24uZGF0YSgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZ19hc3NlcnRf
Y21wc3RyKHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfdXJpKHJlcXVlc3QpLCA9PSwgbV9leHBlY3Rl
ZE5ld1Jlc291cmNlVVJJLmRhdGEoKSk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRf
dXJpX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KSwgPT0sIHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0
X3VyaShyZXNvdXJjZSkpOwotCi0gICAgICAgIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OnJlc291
cmNlU2VudFJlcXVlc3QocmVzb3VyY2UsIHJlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpOwotICAg
IH0KLQotICAgIHZvaWQgcmVzb3VyY2VGYWlsZWQoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNl
LCBHRXJyb3IqIGVycm9yKQotICAgIHsKLSAgICAgICAgaWYgKHJlc291cmNlICE9IG1fcmVzb3Vy
Y2UpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtp
dF93ZWJfcmVzb3VyY2VfZ2V0X3VyaShyZXNvdXJjZSksID09LCBtX2V4cGVjdGVkQ2FuY2VsbGVk
UmVzb3VyY2VVUkkuZGF0YSgpKTsKLSAgICAgICAgZ19hc3NlcnRfZXJyb3IoZXJyb3IsIFdFQktJ
VF9ORVRXT1JLX0VSUk9SLCBXRUJLSVRfTkVUV09SS19FUlJPUl9DQU5DRUxMRUQpOwotCi0gICAg
ICAgIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OnJlc291cmNlRmFpbGVkKHJlc291cmNlLCBlcnJv
cik7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRFeHBlY3RlZE5ld1Jlc291cmNlVVJJKGNvbnN0IENT
dHJpbmcmIHVyaSkKLSAgICB7Ci0gICAgICAgIG1fZXhwZWN0ZWROZXdSZXNvdXJjZVVSSSA9IHVy
aTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldEV4cGVjdGVkQ2FuY2VsbGVkUmVzb3VyY2VVUkkoY29u
c3QgQ1N0cmluZyYgdXJpKQotICAgIHsKLSAgICAgICAgbV9leHBlY3RlZENhbmNlbGxlZFJlc291
cmNlVVJJID0gdXJpOwotICAgIH0KLQotICAgIHZvaWQgc2V0RXhwZWN0ZWROZXdSZXNvdXJjZVVS
SUFmdGVyUmVkaXJlY3Rpb24oY29uc3QgQ1N0cmluZyYgdXJpKQotICAgIHsKLSAgICAgICAgbV9l
eHBlY3RlZE5ld1Jlc291cmNlVVJJQWZ0ZXJSZWRpcmVjdGlvbiA9IHVyaTsKLSAgICB9Ci0KLSAg
ICBDU3RyaW5nIG1fZXhwZWN0ZWROZXdSZXNvdXJjZVVSSTsKLSAgICBDU3RyaW5nIG1fZXhwZWN0
ZWRDYW5jZWxsZWRSZXNvdXJjZVVSSTsKLSAgICBDU3RyaW5nIG1fZXhwZWN0ZWROZXdSZXNvdXJj
ZVVSSUFmdGVyUmVkaXJlY3Rpb247Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViUmVzb3VyY2VT
ZW5kUmVxdWVzdChTZW5kUmVxdWVzdFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAg
dGVzdC0+c2V0RXhwZWN0ZWROZXdSZXNvdXJjZVVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIv
amF2YXNjcmlwdC5qcyIpKTsKLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBh
dGgoInJlbGF0aXZlLWphdmFzY3JpcHQuaHRtbCIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVu
dGlsUmVzb3VyY2VMb2FkRmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX3Jlc291cmNl
KTsKLQotICAgIFZlY3RvcjxTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpMb2FkRXZlbnRzPiYgZXZl
bnRzID0gdGVzdC0+bV9sb2FkRXZlbnRzOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6
ZSgpLCA9PSwgNSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIFNpbmdsZVJl
c291cmNlTG9hZFRlc3Q6OlN0YXJ0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0s
ID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpTZW50UmVxdWVzdCk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KGV2ZW50c1syXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlJlY2VpdmVkUmVz
cG9uc2UpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbM10sID09LCBTaW5nbGVSZXNvdXJj
ZUxvYWRUZXN0OjpSZWNlaXZlZERhdGEpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbNF0s
ID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpGaW5pc2hlZCk7Ci0gICAgZXZlbnRzLmNsZWFy
KCk7Ci0KLSAgICAvLyBDYW5jZWwgcmVxdWVzdC4KLSAgICB0ZXN0LT5zZXRFeHBlY3RlZENhbmNl
bGxlZFJlc291cmNlVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9jYW5jZWwtdGhpcy5qcyIp
KTsKLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9yZXNvdXJjZS10
by1jYW5jZWwuaHRtbCIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2Fk
RmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX3Jlc291cmNlKTsKLQotICAgIGdfYXNz
ZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgMyk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2
ZW50c1swXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlN0YXJ0ZWQpOwotICAgIGdfYXNz
ZXJ0X2NtcGludChldmVudHNbMV0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpGYWlsZWQp
OwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRU
ZXN0OjpGaW5pc2hlZCk7Ci0gICAgZXZlbnRzLmNsZWFyKCk7Ci0KLSAgICAvLyBVUkkgY2hhbmdl
ZCBhZnRlciBhIHJlZGlyZWN0LgotICAgIHRlc3QtPnNldEV4cGVjdGVkTmV3UmVzb3VyY2VVUkko
a1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3JlZGlyZWN0ZWQuanMiKSk7Ci0gICAgdGVzdC0+c2V0
RXhwZWN0ZWROZXdSZXNvdXJjZVVSSUFmdGVyUmVkaXJlY3Rpb24oa1NlcnZlci0+Z2V0VVJJRm9y
UGF0aCgiL2phdmFzY3JpcHQuanMiKSk7Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRV
UklGb3JQYXRoKCJyZWRpcmVjdGVkLWphdmFzY3JpcHQuaHRtbCIpLmRhdGEoKSk7Ci0gICAgdGVz
dC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5t
X3Jlc291cmNlKTsKLQotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgNik7
Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRl
c3Q6OlN0YXJ0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBTaW5nbGVS
ZXNvdXJjZUxvYWRUZXN0OjpTZW50UmVxdWVzdCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50
c1syXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlJlZGlyZWN0ZWQpOwotICAgIGdfYXNz
ZXJ0X2NtcGludChldmVudHNbM10sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpSZWNlaXZl
ZFJlc3BvbnNlKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzRdLCA9PSwgU2luZ2xlUmVz
b3VyY2VMb2FkVGVzdDo6UmVjZWl2ZWREYXRhKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRz
WzVdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6RmluaXNoZWQpOwotICAgIGV2ZW50cy5j
bGVhcigpOwotCi0gICAgLy8gQ2FuY2VsIGFmdGVyIGEgcmVkaXJlY3QuCi0gICAgdGVzdC0+c2V0
RXhwZWN0ZWROZXdSZXNvdXJjZVVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvcmVkaXJlY3Rl
ZC10by1jYW5jZWwuanMiKSk7Ci0gICAgdGVzdC0+c2V0RXhwZWN0ZWRDYW5jZWxsZWRSZXNvdXJj
ZVVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvcmVkaXJlY3RlZC10by1jYW5jZWwuanMiKSk7
Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvcmVkaXJlY3RlZC10
by1jYW5jZWwuaHRtbCIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2Fk
RmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX3Jlc291cmNlKTsKLQotICAgIGdfYXNz
ZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgNCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2
ZW50c1swXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlN0YXJ0ZWQpOwotICAgIGdfYXNz
ZXJ0X2NtcGludChldmVudHNbMV0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpTZW50UmVx
dWVzdCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIFNpbmdsZVJlc291cmNl
TG9hZFRlc3Q6OkZhaWxlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1szXSwgPT0sIFNp
bmdsZVJlc291cmNlTG9hZFRlc3Q6OkZpbmlzaGVkKTsKLSAgICBldmVudHMuY2xlYXIoKTsKLX0K
LQotc3RhdGljIHZvaWQgYWRkQ2FjaGVIVFRQSGVhZGVyc1RvUmVzcG9uc2UoU291cE1lc3NhZ2Uq
IG1lc3NhZ2UpCi17Ci0gICAgLy8gVGhlIGFjdHVhbCBkYXRlIGRvZXNuJ3QgcmVhbGx5IG1hdHRl
ci4KLSAgICBTb3VwRGF0ZSogc291cERhdGUgPSBzb3VwX2RhdGVfbmV3X2Zyb21fbm93KDApOwot
ICAgIEdPd25QdHI8Y2hhcj4gZGF0ZShzb3VwX2RhdGVfdG9fc3RyaW5nKHNvdXBEYXRlLCBTT1VQ
X0RBVEVfSFRUUCkpOwotICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChtZXNzYWdlLT5y
ZXNwb25zZV9oZWFkZXJzLCAiTGFzdC1Nb2RpZmllZCIsIGRhdGUuZ2V0KCkpOwotICAgIHNvdXBf
ZGF0ZV9mcmVlKHNvdXBEYXRlKTsKLSAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobWVz
c2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIkNhY2hlLWNvbnRyb2wiLCAicHVibGljLCBtYXgtYWdl
PTMxNTM2MDAwIik7Ci0gICAgc291cERhdGUgPSBzb3VwX2RhdGVfbmV3X2Zyb21fbm93KDM2MDAp
OwotICAgIGRhdGUuc2V0KHNvdXBfZGF0ZV90b19zdHJpbmcoc291cERhdGUsIFNPVVBfREFURV9I
VFRQKSk7Ci0gICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNl
X2hlYWRlcnMsICJFeHBpcmVzIiwgZGF0ZS5nZXQoKSk7Ci0gICAgc291cF9kYXRlX2ZyZWUoc291
cERhdGUpOwotfQotCi1zdGF0aWMgdm9pZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBzZXJ2
ZXIsIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiwg
U291cENsaWVudENvbnRleHQqLCBncG9pbnRlcikKLXsKLSAgICBpZiAobWVzc2FnZS0+bWV0aG9k
ICE9IFNPVVBfTUVUSE9EX0dFVCkgewotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyht
ZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNf
T0spOwotCi0gICAgaWYgKHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9vbmUobWVzc2FnZS0+cmVx
dWVzdF9oZWFkZXJzLCAiSWYtTW9kaWZpZWQtU2luY2UiKSkgewotICAgICAgICBzb3VwX21lc3Nh
Z2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfTU9ESUZJRUQpOwotICAgICAg
ICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiLyIpKSB7
Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5
LCBTT1VQX01FTU9SWV9TVEFUSUMsIGtJbmRleEh0bWwsIHN0cmxlbihrSW5kZXhIdG1sKSk7Ci0g
ICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2phdmFzY3JpcHQuaHRtbCIpKSB7Ci0g
ICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBqYXZhc2NyaXB0SHRtbCA9ICI8aHRtbD48aGVhZD48
c2NyaXB0IGxhbmd1YWdlPSdqYXZhc2NyaXB0JyBzcmM9Jy9qYXZhc2NyaXB0LmpzJz48L3Njcmlw
dD48L2hlYWQ+PGJvZHk+PC9ib2R5PjwvaHRtbD4iOwotICAgICAgICBzb3VwX21lc3NhZ2VfYm9k
eV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBqYXZh
c2NyaXB0SHRtbCwgc3RybGVuKGphdmFzY3JpcHRIdG1sKSk7Ci0gICAgfSBlbHNlIGlmIChnX3N0
cl9lcXVhbChwYXRoLCAiL2ltYWdlLmh0bWwiKSkgewotICAgICAgICBzdGF0aWMgY29uc3QgY2hh
ciogaW1hZ2VIVE1MID0gIjxodG1sPjxib2R5PjxpbWcgc3JjPScvYmxhbmsuaWNvJz48L2ltZz48
L2JvZHk+PC9odG1sPiI7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdl
LT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGltYWdlSFRNTCwgc3RybGVuKGlt
YWdlSFRNTCkpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9yZWRpcmVjdGVk
LWNzcy5odG1sIikpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHJlZGlyZWN0ZWRDU1NI
dG1sID0gIjxodG1sPjxoZWFkPjxsaW5rIHJlbD0nc3R5bGVzaGVldCcgaHJlZj0nL3JlZGlyZWN0
ZWQuY3NzJyB0eXBlPSd0ZXh0L2Nzcyc+PC9oZWFkPjxib2R5PjwvaHRtbD4iOwotICAgICAgICBz
b3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1P
UllfU1RBVElDLCByZWRpcmVjdGVkQ1NTSHRtbCwgc3RybGVuKHJlZGlyZWN0ZWRDU1NIdG1sKSk7
Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2ludmFsaWQtY3NzLmh0bWwiKSkg
ewotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogaW52YWxpZENTU0h0bWwgPSAiPGh0bWw+PGhl
YWQ+PGxpbmsgcmVsPSdzdHlsZXNoZWV0JyBocmVmPScvaW52YWxpZC5jc3MnIHR5cGU9J3RleHQv
Y3NzJz48L2hlYWQ+PGJvZHk+PC9odG1sPiI7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2Fw
cGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGludmFsaWRD
U1NIdG1sLCBzdHJsZW4oaW52YWxpZENTU0h0bWwpKTsKLSAgICB9IGVsc2UgaWYgKGdfc3RyX2Vx
dWFsKHBhdGgsICIvc2ltcGxlLXN0eWxlLWNzcy5odG1sIikpIHsKLSAgICAgICAgc3RhdGljIGNv
bnN0IGNoYXIqIHNpbXBsZVN0eWxlQ1NTSHRtbCA9ICI8aHRtbD48aGVhZD48bGluayByZWw9J3N0
eWxlc2hlZXQnIGhyZWY9Jy9zaW1wbGUtc3R5bGUuY3NzJyB0eXBlPSd0ZXh0L2Nzcyc+PC9oZWFk
Pjxib2R5PjwvaHRtbD4iOwotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2Fn
ZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBzaW1wbGVTdHlsZUNTU0h0bWws
IHN0cmxlbihzaW1wbGVTdHlsZUNTU0h0bWwpKTsKLSAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFs
KHBhdGgsICIvc3R5bGUuY3NzIikpIHsKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5k
KG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywga1N0eWxlQ1NTLCBz
dHJsZW4oa1N0eWxlQ1NTKSk7Ci0gICAgICAgIGFkZENhY2hlSFRUUEhlYWRlcnNUb1Jlc3BvbnNl
KG1lc3NhZ2UpOwotICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobWVzc2FnZS0+
cmVzcG9uc2VfaGVhZGVycywgIkNvbnRlbnQtVHlwZSIsICJ0ZXh0L2NzcyIpOwotICAgIH0gZWxz
ZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9qYXZhc2NyaXB0LmpzIikpIHsKLSAgICAgICAgc291
cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZ
X1NUQVRJQywga0phdmFzY3JpcHQsIHN0cmxlbihrSmF2YXNjcmlwdCkpOwotICAgICAgICBzb3Vw
X21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIkNvbnRl
bnQtVHlwZSIsICJ0ZXh0L2phdmFzY3JpcHQiKTsKLSAgICAgICAgc291cF9tZXNzYWdlX2hlYWRl
cnNfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJDb250ZW50LURpc3Bvc2l0aW9u
IiwgImZpbGVuYW1lPUphdmFTY3JpcHQuanMiKTsKLSAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFs
KHBhdGgsICIvcmVsYXRpdmUtamF2YXNjcmlwdC5odG1sIikpIHsKLSAgICAgICAgc3RhdGljIGNv
bnN0IGNoYXIqIGphdmFzY3JpcHRSZWxhdGl2ZUhUTUwgPSAiPGh0bWw+PGhlYWQ+PHNjcmlwdCBs
YW5ndWFnZT0namF2YXNjcmlwdCcgc3JjPSdyZW1vdmUtdGhpcy9qYXZhc2NyaXB0LmpzJz48L3Nj
cmlwdD48L2hlYWQ+PGJvZHk+PC9ib2R5PjwvaHRtbD4iOwotICAgICAgICBzb3VwX21lc3NhZ2Vf
Ym9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBq
YXZhc2NyaXB0UmVsYXRpdmVIVE1MLCBzdHJsZW4oamF2YXNjcmlwdFJlbGF0aXZlSFRNTCkpOwot
ICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9yZXNvdXJjZS10by1jYW5jZWwuaHRt
bCIpKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiByZXNvdXJjZVRvQ2FuY2VsSFRNTCA9
ICI8aHRtbD48aGVhZD48c2NyaXB0IGxhbmd1YWdlPSdqYXZhc2NyaXB0JyBzcmM9J2NhbmNlbC10
aGlzLmpzJz48L3NjcmlwdD48L2hlYWQ+PGJvZHk+PC9ib2R5PjwvaHRtbD4iOwotICAgICAgICBz
b3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1P
UllfU1RBVElDLCByZXNvdXJjZVRvQ2FuY2VsSFRNTCwgc3RybGVuKHJlc291cmNlVG9DYW5jZWxI
VE1MKSk7Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3JlZGlyZWN0ZWQtamF2
YXNjcmlwdC5odG1sIikpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGphdmFzY3JpcHRS
ZWxhdGl2ZUhUTUwgPSAiPGh0bWw+PGhlYWQ+PHNjcmlwdCBsYW5ndWFnZT0namF2YXNjcmlwdCcg
c3JjPScvcmVkaXJlY3RlZC5qcyc+PC9zY3JpcHQ+PC9oZWFkPjxib2R5PjwvYm9keT48L2h0bWw+
IjsKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2Jv
ZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgamF2YXNjcmlwdFJlbGF0aXZlSFRNTCwgc3RybGVuKGph
dmFzY3JpcHRSZWxhdGl2ZUhUTUwpKTsKLSAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgs
ICIvcmVkaXJlY3RlZC10by1jYW5jZWwuaHRtbCIpKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBqYXZhc2NyaXB0UmVsYXRpdmVIVE1MID0gIjxodG1sPjxoZWFkPjxzY3JpcHQgbGFuZ3Vh
Z2U9J2phdmFzY3JpcHQnIHNyYz0nL3JlZGlyZWN0ZWQtdG8tY2FuY2VsLmpzJz48L3NjcmlwdD48
L2hlYWQ+PGJvZHk+PC9ib2R5PjwvaHRtbD4iOwotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9h
cHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBqYXZhc2Ny
aXB0UmVsYXRpdmVIVE1MLCBzdHJsZW4oamF2YXNjcmlwdFJlbGF0aXZlSFRNTCkpOwotICAgIH0g
ZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9ibGFuay5pY28iKSkgewotICAgICAgICBHT3du
UHRyPGNoYXI+IGZpbGVQYXRoKGdfYnVpbGRfZmlsZW5hbWUoVGVzdDo6Z2V0V2ViS2l0MVRlc3RS
ZXNvdWNlc0RpcigpLmRhdGEoKSwgcGF0aCwgTlVMTCkpOwotICAgICAgICBjaGFyKiBjb250ZW50
czsKLSAgICAgICAgZ3NpemUgY29udGVudHNMZW5ndGg7Ci0gICAgICAgIGdfZmlsZV9nZXRfY29u
dGVudHMoZmlsZVBhdGguZ2V0KCksICZjb250ZW50cywgJmNvbnRlbnRzTGVuZ3RoLCAwKTsKLSAg
ICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNP
VVBfTUVNT1JZX1RBS0UsIGNvbnRlbnRzLCBjb250ZW50c0xlbmd0aCk7Ci0gICAgICAgIGFkZENh
Y2hlSFRUUEhlYWRlcnNUb1Jlc3BvbnNlKG1lc3NhZ2UpOwotICAgICAgICBzb3VwX21lc3NhZ2Vf
aGVhZGVyc19hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIkNvbnRlbnQtVHlwZSIs
ICJpbWFnZS92bmQubWljcm9zb2Z0Lmljb24iKTsKLSAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFs
KHBhdGgsICIvc2ltcGxlLXN0eWxlLmNzcyIpKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBzaW1wbGVDU1MgPQotICAgICAgICAgICAgImJvZHkgeyIKLSAgICAgICAgICAgICIgICAgbWFy
Z2luOiAwcHg7IgotICAgICAgICAgICAgIiAgICBwYWRkaW5nOiAwcHg7IgotICAgICAgICAgICAg
In0iOwotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2Vf
Ym9keSwgU09VUF9NRU1PUllfU1RBVElDLCBzaW1wbGVDU1MsIHN0cmxlbihzaW1wbGVDU1MpKTsK
LSAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2hl
YWRlcnMsICJDb250ZW50LVR5cGUiLCAidGV4dC9jc3MiKTsKLSAgICB9IGVsc2UgaWYgKGdfc3Ry
X2VxdWFsKHBhdGgsICIvcmVkaXJlY3RlZC5jc3MiKSkgewotICAgICAgICBzb3VwX21lc3NhZ2Vf
c2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19NT1ZFRF9QRVJNQU5FTlRMWSk7Ci0gICAg
ICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJz
LCAiTG9jYXRpb24iLCAiL3NpbXBsZS1zdHlsZS5jc3MiKTsKLSAgICB9IGVsc2UgaWYgKGdfc3Ry
X2VxdWFsKHBhdGgsICIvcmVkaXJlY3RlZC5qcyIpKSB7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9z
ZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX01PVkVEX1BFUk1BTkVOVExZKTsKLSAgICAg
ICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMs
ICJMb2NhdGlvbiIsICIvcmVtb3ZlLXRoaXMvamF2YXNjcmlwdC5qcyIpOwotICAgIH0gZWxzZSBp
ZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9yZWRpcmVjdGVkLXRvLWNhbmNlbC5qcyIpKSB7Ci0gICAg
ICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX01PVkVEX1BF
Uk1BTkVOVExZKTsKLSAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1lc3NhZ2Ut
PnJlc3BvbnNlX2hlYWRlcnMsICJMb2NhdGlvbiIsICIvY2FuY2VsLXRoaXMuanMiKTsKLSAgICB9
IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvaW52YWxpZC5jc3MiKSkKLSAgICAgICAgc291
cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfQ0FOVF9DT05ORUNUKTsK
LSAgICBlbHNlCi0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBf
U1RBVFVTX05PVF9GT1VORCk7Ci0gICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2Fn
ZS0+cmVzcG9uc2VfYm9keSk7Ci19Ci0KLXZvaWQgYmVmb3JlQWxsKCkKLXsKLSAgICBrU2VydmVy
ID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIoKTsKLSAgICBrU2VydmVyLT5ydW4oc2VydmVyQ2FsbGJh
Y2spOwotCi0gICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF93ZWJfZXh0ZW5zaW9uc19kaXJlY3Rv
cnkod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCksIFdFQktJVF9URVNUX1dFQl9FWFRF
TlNJT05TX0RJUik7Ci0KLSAgICBSZXNvdXJjZXNUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAi
cmVzb3VyY2VzIiwgdGVzdFdlYlZpZXdSZXNvdXJjZXMpOwotICAgIFNpbmdsZVJlc291cmNlTG9h
ZFRlc3Q6OmFkZCgiV2ViS2l0V2ViUmVzb3VyY2UiLCAibG9hZGluZyIsIHRlc3RXZWJSZXNvdXJj
ZUxvYWRpbmcpOwotICAgIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OmFkZCgiV2ViS2l0V2ViUmVz
b3VyY2UiLCAicmVzcG9uc2UiLCB0ZXN0V2ViUmVzb3VyY2VSZXNwb25zZSk7Ci0gICAgU2luZ2xl
UmVzb3VyY2VMb2FkVGVzdDo6YWRkKCJXZWJLaXRXZWJSZXNvdXJjZSIsICJtaW1lLXR5cGUiLCB0
ZXN0V2ViUmVzb3VyY2VNaW1lVHlwZSk7Ci0gICAgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6YWRk
KCJXZWJLaXRXZWJSZXNvdXJjZSIsICJzdWdnZXN0ZWQtZmlsZW5hbWUiLCB0ZXN0V2ViUmVzb3Vy
Y2VTdWdnZXN0ZWRGaWxlbmFtZSk7Ci0gICAgUmVzb3VyY2VVUklUcmFja2luZ1Rlc3Q6OmFkZCgi
V2ViS2l0V2ViUmVzb3VyY2UiLCAiYWN0aXZlLXVyaSIsIHRlc3RXZWJSZXNvdXJjZUFjdGl2ZVVS
SSk7Ci0gICAgUmVzb3VyY2VzVGVzdDo6YWRkKCJXZWJLaXRXZWJSZXNvdXJjZSIsICJnZXQtZGF0
YSIsIHRlc3RXZWJSZXNvdXJjZUdldERhdGEpOwotICAgIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6
OmFkZCgiV2ViS2l0V2ViVmlldyIsICJoaXN0b3J5LWNhY2hlIiwgdGVzdFdlYlZpZXdSZXNvdXJj
ZXNIaXN0b3J5Q2FjaGUpOwotICAgIFNlbmRSZXF1ZXN0VGVzdDo6YWRkKCJXZWJLaXRXZWJQYWdl
IiwgInNlbmQtcmVxdWVzdCIsIHRlc3RXZWJSZXNvdXJjZVNlbmRSZXF1ZXN0KTsKLX0KLQotdm9p
ZCBhZnRlckFsbCgpCi17Ci0gICAgZGVsZXRlIGtTZXJ2ZXI7Ci19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0U1NMLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RTU0wuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBlMzE4MGM1Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RTU0wuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjkw
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiTG9hZFRyYWNraW5nVGVzdC5oIgotI2luY2x1ZGUgIldl
YktpdFRlc3RTZXJ2ZXIuaCIKLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0KLXN0YXRpYyBXZWJLaXRU
ZXN0U2VydmVyKiBrSHR0cHNTZXJ2ZXI7Ci1zdGF0aWMgV2ViS2l0VGVzdFNlcnZlcioga0h0dHBT
ZXJ2ZXI7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBpbmRleEhUTUwgPSAiPGh0bWw+PGJvZHk+VGVz
dGluZyBXZWJLaXQyR1RLKyBTU0w8L2JvZHk+PC9odG1sbD4iOwotc3RhdGljIGNvbnN0IGNoYXIq
IGluc2VjdXJlQ29udGVudEhUTUwgPSAiPGh0bWw+PHNjcmlwdCBzcmM9XCIlc1wiPjwvc2NyaXB0
Pjxib2R5PjxwPlRleHQgKyBpbWFnZSA8aW1nIHNyYz1cIiVzXCIgYWxpZ249XCJyaWdodFwiLz48
L3A+PC9ib2R5PjwvaHRtbD4iOwotc3RhdGljIGNvbnN0IGNoYXIgVExTRXhwZWN0ZWRTdWNjZXNz
VGl0bGVbXSA9ICJXZWJLaXQyR3RrKyBUTFMgcGVybWlzc2lvbiB0ZXN0IjsKLXN0YXRpYyBjb25z
dCBjaGFyIFRMU1N1Y2Nlc3NIVE1MU3RyaW5nW10gPSAiPGh0bWw+PGhlYWQ+PHRpdGxlPldlYktp
dDJHdGsrIFRMUyBwZXJtaXNzaW9uIHRlc3Q8L3RpdGxlPjwvaGVhZD48Ym9keT48L2JvZHk+PC9o
dG1sPiI7Ci0KLWNsYXNzIFNTTFRlc3Q6IHB1YmxpYyBMb2FkVHJhY2tpbmdUZXN0IHsKLXB1Ymxp
YzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFNTTFRlc3QpOwotCi0gICAgU1NMVGVzdCgp
Ci0gICAgICAgIDogbV90bHNFcnJvcnMoc3RhdGljX2Nhc3Q8R1Rsc0NlcnRpZmljYXRlRmxhZ3M+
KDApKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcHJvdmlzaW9uYWxMb2FkRmFp
bGVkKGNvbnN0IGdjaGFyKiBmYWlsaW5nVVJJLCBHRXJyb3IqIGVycm9yKQotICAgIHsKLSAgICAg
ICAgZ19hc3NlcnRfZXJyb3IoZXJyb3IsIFNPVVBfSFRUUF9FUlJPUiwgU09VUF9TVEFUVVNfU1NM
X0ZBSUxFRCk7Ci0gICAgICAgIExvYWRUcmFja2luZ1Rlc3Q6OnByb3Zpc2lvbmFsTG9hZEZhaWxl
ZChmYWlsaW5nVVJJLCBlcnJvcik7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIGxvYWRDb21t
aXR0ZWQoKQotICAgIHsKLSAgICAgICAgR1Rsc0NlcnRpZmljYXRlKiBjZXJ0aWZpY2F0ZSA9IDA7
Ci0gICAgICAgIHdlYmtpdF93ZWJfdmlld19nZXRfdGxzX2luZm8obV93ZWJWaWV3LCAmY2VydGlm
aWNhdGUsICZtX3Rsc0Vycm9ycyk7Ci0gICAgICAgIG1fY2VydGlmaWNhdGUgPSBjZXJ0aWZpY2F0
ZTsKLSAgICAgICAgTG9hZFRyYWNraW5nVGVzdDo6bG9hZENvbW1pdHRlZCgpOwotICAgIH0KLQot
ICAgIHZvaWQgd2FpdFVudGlsTG9hZEZpbmlzaGVkKCkKLSAgICB7Ci0gICAgICAgIG1fY2VydGlm
aWNhdGUgPSAwOwotICAgICAgICBtX3Rsc0Vycm9ycyA9IHN0YXRpY19jYXN0PEdUbHNDZXJ0aWZp
Y2F0ZUZsYWdzPigwKTsKLSAgICAgICAgTG9hZFRyYWNraW5nVGVzdDo6d2FpdFVudGlsTG9hZEZp
bmlzaGVkKCk7Ci0gICAgfQotCi0gICAgR1JlZlB0cjxHVGxzQ2VydGlmaWNhdGU+IG1fY2VydGlm
aWNhdGU7Ci0gICAgR1Rsc0NlcnRpZmljYXRlRmxhZ3MgbV90bHNFcnJvcnM7Ci19OwotCi1zdGF0
aWMgdm9pZCB0ZXN0U1NMKFNTTFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVz
dC0+bG9hZFVSSShrSHR0cHNTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi8iKS5kYXRhKCkpOwotICAg
IHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fY2Vy
dGlmaWNhdGUpOwotICAgIC8vIFdlIGFsd2F5cyBleHBlY3QgZXJyb3JzIGJlY2F1c2Ugd2UgYXJl
IHVzaW5nIGEgc2VsZi1zaWduZWQgY2VydGlmaWNhdGUsCi0gICAgLy8gYnV0IG9ubHkgR19UTFNf
Q0VSVElGSUNBVEVfVU5LTk9XTl9DQSBmbGFncyBzaG91bGQgYmUgcHJlc2VudC4KLSAgICBnX2Fz
c2VydCh0ZXN0LT5tX3Rsc0Vycm9ycyk7Ci0gICAgZ19hc3NlcnRfY21wdWludCh0ZXN0LT5tX3Rs
c0Vycm9ycywgPT0sIEdfVExTX0NFUlRJRklDQVRFX1VOS05PV05fQ0EpOwotCi0gICAgLy8gTm9u
IEhUVFBTIGxvYWRzIHNob3VsZG4ndCBoYXZlIGEgY2VydGlmaWNhdGUgbm9yIGVycm9ycy4KLSAg
ICB0ZXN0LT5sb2FkSHRtbChpbmRleEhUTUwsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRG
aW5pc2hlZCgpOwotICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX2NlcnRpZmljYXRlKTsKLSAgICBnX2Fz
c2VydCghdGVzdC0+bV90bHNFcnJvcnMpOwotfQotCi1jbGFzcyBJbnNlY3VyZUNvbnRlbnRUZXN0
OiBwdWJsaWMgV2ViVmlld1Rlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRV
UkUoSW5zZWN1cmVDb250ZW50VGVzdCk7Ci0KLSAgICBJbnNlY3VyZUNvbnRlbnRUZXN0KCkKLSAg
ICAgICAgOiBtX2luc2VjdXJlQ29udGVudFJ1bihmYWxzZSkKLSAgICAgICAgLCBtX2luc2VjdXJl
Q29udGVudERpc3BsYXllZChmYWxzZSkKLSAgICB7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
bV93ZWJWaWV3LCAiaW5zZWN1cmUtY29udGVudC1kZXRlY3RlZCIsIEdfQ0FMTEJBQ0soaW5zZWN1
cmVDb250ZW50RGV0ZWN0ZWRDYWxsYmFjayksIHRoaXMpOwotICAgIH0KLQotICAgIHN0YXRpYyB2
b2lkIGluc2VjdXJlQ29udGVudERldGVjdGVkQ2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmll
dywgV2ViS2l0SW5zZWN1cmVDb250ZW50RXZlbnQgZXZlbnQsIEluc2VjdXJlQ29udGVudFRlc3Qq
IHRlc3QpCi0gICAgewotICAgICAgICBnX2Fzc2VydCh3ZWJWaWV3ID09IHRlc3QtPm1fd2ViVmll
dyk7Ci0KLSAgICAgICAgaWYgKGV2ZW50ID09IFdFQktJVF9JTlNFQ1VSRV9DT05URU5UX1JVTikK
LSAgICAgICAgICAgIHRlc3QtPm1faW5zZWN1cmVDb250ZW50UnVuID0gdHJ1ZTsKLQotICAgICAg
ICBpZiAoZXZlbnQgPT0gV0VCS0lUX0lOU0VDVVJFX0NPTlRFTlRfRElTUExBWUVEKQotICAgICAg
ICAgICAgdGVzdC0+bV9pbnNlY3VyZUNvbnRlbnREaXNwbGF5ZWQgPSB0cnVlOwotICAgIH0KLQot
ICAgIGJvb2wgbV9pbnNlY3VyZUNvbnRlbnRSdW47Ci0gICAgYm9vbCBtX2luc2VjdXJlQ29udGVu
dERpc3BsYXllZDsKLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RJbnNlY3VyZUNvbnRlbnQoSW5zZWN1
cmVDb250ZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5sb2FkVVJJ
KGtIdHRwc1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2luc2VjdXJlLWNvbnRlbnQvIikuZGF0YSgp
KTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0KHRl
c3QtPm1faW5zZWN1cmVDb250ZW50UnVuKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX2luc2VjdXJl
Q29udGVudERpc3BsYXllZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RUTFNFcnJvcnNQb2xpY3ko
U1NMVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBXZWJLaXRXZWJDb250ZXh0KiBj
b250ZXh0ID0gd2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KHRlc3QtPm1fd2ViVmlldyk7Ci0g
ICAgLy8gVExTIGVycm9ycyBhcmUgaWdub3JlZCBieSBkZWZhdWx0LgotICAgIGdfYXNzZXJ0KHdl
YmtpdF93ZWJfY29udGV4dF9nZXRfdGxzX2Vycm9yc19wb2xpY3koY29udGV4dCkgPT0gV0VCS0lU
X1RMU19FUlJPUlNfUE9MSUNZX0lHTk9SRSk7Ci0gICAgdGVzdC0+bG9hZFVSSShrSHR0cHNTZXJ2
ZXItPmdldFVSSUZvclBhdGgoIi8iKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRG
aW5pc2hlZCgpOwotICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX2xvYWRGYWlsZWQpOwotCi0gICAgd2Vi
a2l0X3dlYl9jb250ZXh0X3NldF90bHNfZXJyb3JzX3BvbGljeShjb250ZXh0LCBXRUJLSVRfVExT
X0VSUk9SU19QT0xJQ1lfRkFJTCk7Ci0gICAgdGVzdC0+bG9hZFVSSShrSHR0cHNTZXJ2ZXItPmdl
dFVSSUZvclBhdGgoIi8iKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hl
ZCgpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fbG9hZEZhaWxlZCk7Ci0gICAgZ19hc3NlcnQodGVz
dC0+bV9sb2FkRXZlbnRzLmNvbnRhaW5zKExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9h
ZEZhaWxlZCkpOwotICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX2xvYWRFdmVudHMuY29udGFpbnMoTG9h
ZFRyYWNraW5nVGVzdDo6TG9hZENvbW1pdHRlZCkpOwotfQotCi1jbGFzcyBUTFNFcnJvcnNUZXN0
OiBwdWJsaWMgU1NMVGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShU
TFNFcnJvcnNUZXN0KTsKLQotICAgIFRMU0Vycm9yc1Rlc3QoKQotICAgIHsKLSAgICAgICAgZ19z
aWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJsb2FkLWZhaWxlZC13aXRoLXRscy1lcnJvcnMiLCBH
X0NBTExCQUNLKHJ1bkxvYWRGYWlsZWRXaXRoVExTRXJyb3JzQ2FsbGJhY2spLCB0aGlzKTsKLSAg
ICB9Ci0KLSAgICB+VExTRXJyb3JzVGVzdCgpCi0gICAgewotICAgICAgICBnX3NpZ25hbF9oYW5k
bGVyc19kaXNjb25uZWN0X21hdGNoZWQobV93ZWJWaWV3LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAw
LCAwLCAwLCAwLCB0aGlzKTsKLSAgICAgICAgaWYgKG1fY2VydGlmaWNhdGVJbmZvKQotICAgICAg
ICAgICAgd2Via2l0X2NlcnRpZmljYXRlX2luZm9fZnJlZShtX2NlcnRpZmljYXRlSW5mbyk7Ci0g
ICAgfQotCi0gICAgc3RhdGljIGdib29sZWFuIHJ1bkxvYWRGYWlsZWRXaXRoVExTRXJyb3JzQ2Fs
bGJhY2soV2ViS2l0V2ViVmlldyosIFdlYktpdENlcnRpZmljYXRlSW5mbyogaW5mbywgY29uc3Qg
Y2hhciogaG9zdCwgVExTRXJyb3JzVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHRlc3QtPnJ1
bkxvYWRGYWlsZWRXaXRoVExTRXJyb3JzKGluZm8sIGhvc3QpOwotICAgICAgICByZXR1cm4gVFJV
RTsKLSAgICB9Ci0KLSAgICB2b2lkIHJ1bkxvYWRGYWlsZWRXaXRoVExTRXJyb3JzKFdlYktpdENl
cnRpZmljYXRlSW5mbyogaW5mbywgY29uc3QgY2hhciogaG9zdCkKLSAgICB7Ci0gICAgICAgIGlm
IChtX2NlcnRpZmljYXRlSW5mbykKLSAgICAgICAgICAgIHdlYmtpdF9jZXJ0aWZpY2F0ZV9pbmZv
X2ZyZWUobV9jZXJ0aWZpY2F0ZUluZm8pOwotICAgICAgICBtX2NlcnRpZmljYXRlSW5mbyA9IHdl
YmtpdF9jZXJ0aWZpY2F0ZV9pbmZvX2NvcHkoaW5mbyk7Ci0gICAgICAgIG1faG9zdC5zZXQoZ19z
dHJkdXAoaG9zdCkpOwotICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3ApOwotICAg
IH0KLQotICAgIHZvaWQgd2FpdFVudGlsTG9hZEZhaWxlZFdpdGhUTFNFcnJvcnMoKQotICAgIHsK
LSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIFdlYktp
dENlcnRpZmljYXRlSW5mbyogY2VydGlmaWNhdGVJbmZvKCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBtX2NlcnRpZmljYXRlSW5mbzsKLSAgICB9Ci0KLSAgICBjb25zdCBjaGFyKiBob3N0KCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtX2hvc3QuZ2V0KCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAg
IFdlYktpdENlcnRpZmljYXRlSW5mbyogbV9jZXJ0aWZpY2F0ZUluZm87Ci0gICAgR093blB0cjxj
aGFyPiBtX2hvc3Q7Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0TG9hZEZhaWxlZFdpdGhUTFNFcnJv
cnMoVExTRXJyb3JzVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBXZWJLaXRXZWJD
b250ZXh0KiBjb250ZXh0ID0gd2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KHRlc3QtPm1fd2Vi
Vmlldyk7Ci0gICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF90bHNfZXJyb3JzX3BvbGljeShjb250
ZXh0LCBXRUJLSVRfVExTX0VSUk9SU19QT0xJQ1lfRkFJTCk7Ci0KLSAgICAvLyBUaGUgbG9hZC1m
YWlsZWQtd2l0aC10bHMtZXJyb3JzIHNpZ25hbCBzaG91bGQgYmUgZW1pdHRlZCB3aGVuIHRoZXJl
IGlzIGEgVExTIGZhaWx1cmUuCi0gICAgdGVzdC0+bG9hZFVSSShrSHR0cHNTZXJ2ZXItPmdldFVS
SUZvclBhdGgoIi90ZXN0LXRscy8iKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRG
YWlsZWRXaXRoVExTRXJyb3JzKCk7Ci0gICAgLy8gVGVzdCB0aGUgV2ViS2l0Q2VydGlmaWNhdGVJ
bmZvIEFQSS4KLSAgICBnX2Fzc2VydChHX0lTX1RMU19DRVJUSUZJQ0FURSh3ZWJraXRfY2VydGlm
aWNhdGVfaW5mb19nZXRfdGxzX2NlcnRpZmljYXRlKHRlc3QtPmNlcnRpZmljYXRlSW5mbygpKSkp
OwotICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2NlcnRpZmljYXRlX2luZm9fZ2V0X3Rsc19l
cnJvcnModGVzdC0+Y2VydGlmaWNhdGVJbmZvKCkpLCA9PSwgR19UTFNfQ0VSVElGSUNBVEVfVU5L
Tk9XTl9DQSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPmhvc3QoKSwgPT0sIHNvdXBfdXJp
X2dldF9ob3N0KGtIdHRwc1NlcnZlci0+YmFzZVVSSSgpKSk7Ci0gICAgZ19hc3NlcnRfY21waW50
KHRlc3QtPm1fbG9hZEV2ZW50c1swXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFs
TG9hZFN0YXJ0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMV0s
ID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOwotCi0gICAgLy8gVGVzdCBhbGxv
d2luZyBhbiBleGNlcHRpb24gZm9yIHRoaXMgY2VydGlmaWNhdGUgb24gdGhpcyBob3N0LgotICAg
IHdlYmtpdF93ZWJfY29udGV4dF9hbGxvd190bHNfY2VydGlmaWNhdGVfZm9yX2hvc3QoY29udGV4
dCwgdGVzdC0+Y2VydGlmaWNhdGVJbmZvKCksIHRlc3QtPmhvc3QoKSk7Ci0gICAgLy8gVGhlIHBh
Z2Ugc2hvdWxkIG5vdyBsb2FkIHdpdGhvdXQgZXJyb3JzLgotICAgIHRlc3QtPmxvYWRVUkkoa0h0
dHBzU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvdGVzdC10bHMvIikuZGF0YSgpKTsKLSAgICB0ZXN0
LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5t
X2xvYWRFdmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFy
dGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzFdLCA9PSwgTG9h
ZFRyYWNraW5nVGVzdDo6TG9hZENvbW1pdHRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHRlc3Qt
Pm1fbG9hZEV2ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7Ci0g
ICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRfdGl0bGUodGVzdC0+bV93ZWJW
aWV3KSwgPT0sIFRMU0V4cGVjdGVkU3VjY2Vzc1RpdGxlKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBo
dHRwc1NlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1lc3Nh
Z2UsIGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqLCBTb3VwQ2xpZW50Q29udGV4dCosIGdw
b2ludGVyKQotewotICAgIGlmIChtZXNzYWdlLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7
Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05P
VF9JTVBMRU1FTlRFRCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoZ19zdHJf
ZXF1YWwocGF0aCwgIi8iKSkgewotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNz
YWdlLCBTT1VQX1NUQVRVU19PSyk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZCht
ZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGluZGV4SFRNTCwgc3Ry
bGVuKGluZGV4SFRNTCkpOwotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNz
YWdlLT5yZXNwb25zZV9ib2R5KTsKLSAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIv
aW5zZWN1cmUtY29udGVudC8iKSkgewotICAgICAgICBHT3duUHRyPGNoYXI+IHJlc3BvbnNlSFRN
TChnX3N0cmR1cF9wcmludGYoaW5zZWN1cmVDb250ZW50SFRNTCwga0h0dHBTZXJ2ZXItPmdldFVS
SUZvclBhdGgoIi90ZXN0LXNjcmlwdCIpLmRhdGEoKSwga0h0dHBTZXJ2ZXItPmdldFVSSUZvclBh
dGgoIi90ZXN0LWltYWdlIikuZGF0YSgpKSk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2Fw
cGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9DT1BZLCByZXNwb25zZUhU
TUwuZ2V0KCksIHN0cmxlbihyZXNwb25zZUhUTUwuZ2V0KCkpKTsKLSAgICAgICAgc291cF9tZXNz
YWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOwotICAgICAgICBzb3VwX21l
c3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKLSAgICB9IGVsc2Ug
aWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvdGVzdC10bHMvIikpIHsKLSAgICAgICAgc291cF9tZXNz
YWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOwotICAgICAgICBzb3VwX21l
c3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RB
VElDLCBUTFNTdWNjZXNzSFRNTFN0cmluZywgc3RybGVuKFRMU1N1Y2Nlc3NIVE1MU3RyaW5nKSk7
Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2Jv
ZHkpOwotICAgIH0gZWxzZQotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdl
LCBTT1VQX1NUQVRVU19OT1RfRk9VTkQpOwotfQotCi1zdGF0aWMgdm9pZCBodHRwU2VydmVyQ2Fs
bGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hh
ciogcGF0aCwgR0hhc2hUYWJsZSosIFNvdXBDbGllbnRDb250ZXh0KiwgZ3BvaW50ZXIpCi17Ci0g
ICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKLSAgICAgICAgc291
cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVE
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChnX3N0cl9lcXVhbChwYXRoLCAi
L3Rlc3Qtc2NyaXB0IikpIHsKLSAgICAgICAgR093blB0cjxjaGFyPiBwYXRoVG9GaWxlKGdfYnVp
bGRfZmlsZW5hbWUoVGVzdDo6Z2V0UmVzb3VyY2VzRGlyKCkuZGF0YSgpLCAibGluay10aXRsZS5q
cyIsIE5VTEwpKTsKLSAgICAgICAgY2hhciogY29udGVudHM7Ci0gICAgICAgIGdzaXplIGxlbmd0
aDsKLSAgICAgICAgZ19maWxlX2dldF9jb250ZW50cyhwYXRoVG9GaWxlLmdldCgpLCAmY29udGVu
dHMsICZsZW5ndGgsIDApOwotCi0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNz
YWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBjb250ZW50cywgbGVuZ3RoKTsK
LSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0sp
OwotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9i
b2R5KTsKLSAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvdGVzdC1pbWFnZSIpKSB7
Ci0gICAgICAgIEdPd25QdHI8Y2hhcj4gcGF0aFRvRmlsZShnX2J1aWxkX2ZpbGVuYW1lKFRlc3Q6
OmdldFdlYktpdDFUZXN0UmVzb3VjZXNEaXIoKS5kYXRhKCksICJibGFuay5pY28iLCBOVUxMKSk7
Ci0gICAgICAgIGNoYXIqIGNvbnRlbnRzOwotICAgICAgICBnc2l6ZSBsZW5ndGg7Ci0gICAgICAg
IGdfZmlsZV9nZXRfY29udGVudHMocGF0aFRvRmlsZS5nZXQoKSwgJmNvbnRlbnRzLCAmbGVuZ3Ro
LCAwKTsKLQotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9u
c2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgY29udGVudHMsIGxlbmd0aCk7Ci0gICAgICAgIHNv
dXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKLSAgICAgICAg
c291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RB
VFVTX05PVF9GT1VORCk7Ci19Ci0KLXZvaWQgYmVmb3JlQWxsKCkKLXsKLSAgICBrSHR0cHNTZXJ2
ZXIgPSBuZXcgV2ViS2l0VGVzdFNlcnZlcihXZWJLaXRUZXN0U2VydmVyOjpTZXJ2ZXJIVFRQUyk7
Ci0gICAga0h0dHBzU2VydmVyLT5ydW4oaHR0cHNTZXJ2ZXJDYWxsYmFjayk7Ci0KLSAgICBrSHR0
cFNlcnZlciA9IG5ldyBXZWJLaXRUZXN0U2VydmVyKFdlYktpdFRlc3RTZXJ2ZXI6OlNlcnZlckhU
VFApOwotICAgIGtIdHRwU2VydmVyLT5ydW4oaHR0cFNlcnZlckNhbGxiYWNrKTsKLQotICAgIFNT
TFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJzc2wiLCB0ZXN0U1NMKTsKLSAgICBJbnNlY3Vy
ZUNvbnRlbnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiaW5zZWN1cmUtY29udGVudCIsIHRl
c3RJbnNlY3VyZUNvbnRlbnQpOwotICAgIC8vIEluIHRoaXMgY2FzZSB0aGUgb3JkZXIgb2YgdGhl
IHRlc3RzIGRvZXMgbWF0dGVyIGJlY2F1c2UgdGxzLWVycm9ycy1wb2xpY3kgdGVzdHMgdGhlIGRl
ZmF1bHQgcG9saWN5LAotICAgIC8vIGFuZCBleHBlY3RzIHRoYXQgbm8gZXhjZXB0aW9uIHdpbGwg
aGF2ZSBiZWVuIGFkZGVkIGZvciB0aGlzIGNlcnRpZmljYXRlIGFuZCBob3N0IHBhaXIgYXMgaXMK
LSAgICAvLyBkb25lIGluIHRoZSB0bHMtcGVybWlzc2lvbi1yZXF1ZXN0IHRlc3QuCi0gICAgU1NM
VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInRscy1lcnJvcnMtcG9saWN5IiwgdGVzdFRMU0Vy
cm9yc1BvbGljeSk7Ci0gICAgVExTRXJyb3JzVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImxv
YWQtZmFpbGVkLXdpdGgtdGxzLWVycm9ycyIsIHRlc3RMb2FkRmFpbGVkV2l0aFRMU0Vycm9ycyk7
Ci19Ci0KLXZvaWQgYWZ0ZXJBbGwoKQotewotICAgIGRlbGV0ZSBrSHR0cHNTZXJ2ZXI7Ci0gICAg
ZGVsZXRlIGtIdHRwU2VydmVyOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFVJQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RVSUNsaWVudC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGJjMzBkNmQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvVGVzdFVJQ2xpZW50LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDY3OSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdIYXNoLmg+Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBrQWxlcnREaWFsb2dNZXNzYWdl
ID0gIldlYktpdEdUSysgYWxlcnQgZGlhbG9nIG1lc3NhZ2UiOwotc3RhdGljIGNvbnN0IGNoYXIq
IGtDb25maXJtRGlhbG9nTWVzc2FnZSA9ICJXZWJLaXRHVEsrIGNvbmZpcm0gZGlhbG9nIG1lc3Nh
Z2UiOwotc3RhdGljIGNvbnN0IGNoYXIqIGtQcm9tcHREaWFsb2dNZXNzYWdlID0gIldlYktpdEdU
SysgcHJvbXB0IGRpYWxvZyBtZXNzYWdlIjsKLXN0YXRpYyBjb25zdCBjaGFyKiBrUHJvbXB0RGlh
bG9nUmV0dXJuZWRUZXh0ID0gIldlYktpdEdUSysgcHJvbXB0IGRpYWxvZyByZXR1cm5lZCB0ZXh0
IjsKLQotY2xhc3MgVUlDbGllbnRUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3QgewotcHVibGljOgot
ICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoVUlDbGllbnRUZXN0KTsKLQotICAgIGVudW0gV2Vi
Vmlld0V2ZW50cyB7Ci0gICAgICAgIENyZWF0ZSwKLSAgICAgICAgUmVhZHlUb1Nob3csCi0gICAg
ICAgIFJ1bkFzTW9kYWwsCi0gICAgICAgIENsb3NlCi0gICAgfTsKLQotICAgIGNsYXNzIFdpbmRv
d1Byb3BlcnRpZXMgewotICAgIHB1YmxpYzoKLSAgICAgICAgV2luZG93UHJvcGVydGllcygpCi0g
ICAgICAgICAgICA6IG1faXNOdWxsKHRydWUpCi0gICAgICAgICAgICAsIG1fdG9vbGJhclZpc2li
bGUodHJ1ZSkKLSAgICAgICAgICAgICwgbV9zdGF0dXNiYXJWaXNpYmxlKHRydWUpCi0gICAgICAg
ICAgICAsIG1fc2Nyb2xsYmFyc1Zpc2libGUodHJ1ZSkKLSAgICAgICAgICAgICwgbV9tZW51YmFy
VmlzaWJsZSh0cnVlKQotICAgICAgICAgICAgLCBtX2xvY2F0aW9uYmFyVmlzaWJsZSh0cnVlKQot
ICAgICAgICAgICAgLCBtX3Jlc2l6YWJsZSh0cnVlKQotICAgICAgICAgICAgLCBtX2Z1bGxzY3Jl
ZW4oZmFsc2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1lbXNldCgmbV9nZW9tZXRyeSwgMCwg
c2l6ZW9mKEdka1JlY3RhbmdsZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgV2luZG93UHJvcGVy
dGllcyhXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzKiB3aW5kb3dQcm9wZXJ0aWVzKQotICAgICAgICAg
ICAgOiBtX2lzTnVsbChmYWxzZSkKLSAgICAgICAgICAgICwgbV90b29sYmFyVmlzaWJsZSh3ZWJr
aXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X3Rvb2xiYXJfdmlzaWJsZSh3aW5kb3dQcm9wZXJ0aWVz
KSkKLSAgICAgICAgICAgICwgbV9zdGF0dXNiYXJWaXNpYmxlKHdlYmtpdF93aW5kb3dfcHJvcGVy
dGllc19nZXRfc3RhdHVzYmFyX3Zpc2libGUod2luZG93UHJvcGVydGllcykpCi0gICAgICAgICAg
ICAsIG1fc2Nyb2xsYmFyc1Zpc2libGUod2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF9zY3Jv
bGxiYXJzX3Zpc2libGUod2luZG93UHJvcGVydGllcykpCi0gICAgICAgICAgICAsIG1fbWVudWJh
clZpc2libGUod2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF9tZW51YmFyX3Zpc2libGUod2lu
ZG93UHJvcGVydGllcykpCi0gICAgICAgICAgICAsIG1fbG9jYXRpb25iYXJWaXNpYmxlKHdlYmtp
dF93aW5kb3dfcHJvcGVydGllc19nZXRfbG9jYXRpb25iYXJfdmlzaWJsZSh3aW5kb3dQcm9wZXJ0
aWVzKSkKLSAgICAgICAgICAgICwgbV9yZXNpemFibGUod2Via2l0X3dpbmRvd19wcm9wZXJ0aWVz
X2dldF9yZXNpemFibGUod2luZG93UHJvcGVydGllcykpCi0gICAgICAgICAgICAsIG1fZnVsbHNj
cmVlbih3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X2Z1bGxzY3JlZW4od2luZG93UHJvcGVy
dGllcykpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19n
ZXRfZ2VvbWV0cnkod2luZG93UHJvcGVydGllcywgJm1fZ2VvbWV0cnkpOwotICAgICAgICB9Ci0K
LSAgICAgICAgV2luZG93UHJvcGVydGllcyhHZGtSZWN0YW5nbGUqIGdlb21ldHJ5LCBib29sIHRv
b2xiYXJWaXNpYmxlLCBib29sIHN0YXR1c2JhclZpc2libGUsIGJvb2wgc2Nyb2xsYmFyc1Zpc2li
bGUsIGJvb2wgbWVudWJhclZpc2libGUsIGJvb2wgbG9jYXRpb25iYXJWaXNpYmxlLCBib29sIHJl
c2l6YWJsZSwgYm9vbCBmdWxsc2NyZWVuKQotICAgICAgICAgICAgOiBtX2lzTnVsbChmYWxzZSkK
LSAgICAgICAgICAgICwgbV9nZW9tZXRyeSgqZ2VvbWV0cnkpCi0gICAgICAgICAgICAsIG1fdG9v
bGJhclZpc2libGUodG9vbGJhclZpc2libGUpCi0gICAgICAgICAgICAsIG1fc3RhdHVzYmFyVmlz
aWJsZShzdGF0dXNiYXJWaXNpYmxlKQotICAgICAgICAgICAgLCBtX3Njcm9sbGJhcnNWaXNpYmxl
KHNjcm9sbGJhcnNWaXNpYmxlKQotICAgICAgICAgICAgLCBtX21lbnViYXJWaXNpYmxlKG1lbnVi
YXJWaXNpYmxlKQotICAgICAgICAgICAgLCBtX2xvY2F0aW9uYmFyVmlzaWJsZShsb2NhdGlvbmJh
clZpc2libGUpCi0gICAgICAgICAgICAsIG1fcmVzaXphYmxlKHJlc2l6YWJsZSkKLSAgICAgICAg
ICAgICwgbV9mdWxsc2NyZWVuKGZ1bGxzY3JlZW4pCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0g
ICAgICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV9pc051bGw7IH0KLQotICAgICAg
ICB2b2lkIGFzc2VydEVxdWFsKGNvbnN0IFdpbmRvd1Byb3BlcnRpZXMmIG90aGVyKSBjb25zdAot
ICAgICAgICB7Ci0gICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQobV9nZW9tZXRyeS54LCA9PSwg
b3RoZXIubV9nZW9tZXRyeS54KTsKLSAgICAgICAgICAgIGdfYXNzZXJ0X2NtcGludChtX2dlb21l
dHJ5LnksID09LCBvdGhlci5tX2dlb21ldHJ5LnkpOwotICAgICAgICAgICAgZ19hc3NlcnRfY21w
aW50KG1fZ2VvbWV0cnkud2lkdGgsID09LCBvdGhlci5tX2dlb21ldHJ5LndpZHRoKTsKLSAgICAg
ICAgICAgIGdfYXNzZXJ0X2NtcGludChtX2dlb21ldHJ5LmhlaWdodCwgPT0sIG90aGVyLm1fZ2Vv
bWV0cnkuaGVpZ2h0KTsKLSAgICAgICAgICAgIGdfYXNzZXJ0X2NtcGludChzdGF0aWNfY2FzdDxp
bnQ+KG1fdG9vbGJhclZpc2libGUpLCA9PSwgc3RhdGljX2Nhc3Q8aW50PihvdGhlci5tX3Rvb2xi
YXJWaXNpYmxlKSk7Ci0gICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQoc3RhdGljX2Nhc3Q8aW50
PihtX3N0YXR1c2JhclZpc2libGUpLCA9PSwgc3RhdGljX2Nhc3Q8aW50PihvdGhlci5tX3N0YXR1
c2JhclZpc2libGUpKTsKLSAgICAgICAgICAgIGdfYXNzZXJ0X2NtcGludChzdGF0aWNfY2FzdDxp
bnQ+KG1fc2Nyb2xsYmFyc1Zpc2libGUpLCA9PSwgc3RhdGljX2Nhc3Q8aW50PihvdGhlci5tX3Nj
cm9sbGJhcnNWaXNpYmxlKSk7Ci0gICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQoc3RhdGljX2Nh
c3Q8aW50PihtX21lbnViYXJWaXNpYmxlKSwgPT0sIHN0YXRpY19jYXN0PGludD4ob3RoZXIubV9t
ZW51YmFyVmlzaWJsZSkpOwotICAgICAgICAgICAgZ19hc3NlcnRfY21waW50KHN0YXRpY19jYXN0
PGludD4obV9sb2NhdGlvbmJhclZpc2libGUpLCA9PSwgc3RhdGljX2Nhc3Q8aW50PihvdGhlci5t
X2xvY2F0aW9uYmFyVmlzaWJsZSkpOwotICAgICAgICAgICAgZ19hc3NlcnRfY21waW50KHN0YXRp
Y19jYXN0PGludD4obV9yZXNpemFibGUpLCA9PSwgc3RhdGljX2Nhc3Q8aW50PihvdGhlci5tX3Jl
c2l6YWJsZSkpOwotICAgICAgICAgICAgZ19hc3NlcnRfY21waW50KHN0YXRpY19jYXN0PGludD4o
bV9mdWxsc2NyZWVuKSwgPT0sIHN0YXRpY19jYXN0PGludD4ob3RoZXIubV9mdWxsc2NyZWVuKSk7
Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGJvb2wgbV9pc051bGw7Ci0KLSAg
ICAgICAgR2RrUmVjdGFuZ2xlIG1fZ2VvbWV0cnk7Ci0KLSAgICAgICAgYm9vbCBtX3Rvb2xiYXJW
aXNpYmxlOwotICAgICAgICBib29sIG1fc3RhdHVzYmFyVmlzaWJsZTsKLSAgICAgICAgYm9vbCBt
X3Njcm9sbGJhcnNWaXNpYmxlOwotICAgICAgICBib29sIG1fbWVudWJhclZpc2libGU7Ci0gICAg
ICAgIGJvb2wgbV9sb2NhdGlvbmJhclZpc2libGU7Ci0KLSAgICAgICAgYm9vbCBtX3Jlc2l6YWJs
ZTsKLSAgICAgICAgYm9vbCBtX2Z1bGxzY3JlZW47Ci0gICAgfTsKLQotICAgIHN0YXRpYyB2b2lk
IHdpbmRvd1Byb3BlcnRpZXNOb3RpZnlDYWxsYmFjayhHT2JqZWN0KiwgR1BhcmFtU3BlYyogcGFy
YW1TcGVjLCBVSUNsaWVudFRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICB0ZXN0LT5tX3dpbmRv
d1Byb3BlcnRpZXNDaGFuZ2VkLmFkZChnX3BhcmFtX3NwZWNfZ2V0X25hbWUocGFyYW1TcGVjKSk7
Ci0gICAgfQotCi0gICAgc3RhdGljIEd0a1dpZGdldCogdmlld0NyZWF0ZUNhbGxiYWNrKFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcsIFVJQ2xpZW50VGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiB0ZXN0LT52aWV3Q3JlYXRlKHdlYlZpZXcpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lk
IHZpZXdSZWFkeVRvU2hvd0NhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFVJQ2xpZW50
VGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHRlc3QtPnZpZXdSZWFkeVRvU2hvdyh3ZWJWaWV3
KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCB2aWV3Q2xvc2VDYWxsYmFjayhXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3LCBVSUNsaWVudFRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICB0ZXN0LT52
aWV3Q2xvc2Uod2ViVmlldyk7Ci0gICAgfQotCi0gICAgdm9pZCBzY3JpcHRBbGVydChXZWJLaXRT
Y3JpcHREaWFsb2cqIGRpYWxvZykKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobV9zY3JpcHREaWFs
b2dUeXBlKSB7Ci0gICAgICAgIGNhc2UgV0VCS0lUX1NDUklQVF9ESUFMT0dfQUxFUlQ6Ci0gICAg
ICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NjcmlwdF9kaWFsb2dfZ2V0X21lc3NhZ2Uo
ZGlhbG9nKSwgPT0sIGtBbGVydERpYWxvZ01lc3NhZ2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgV0VCS0lUX1NDUklQVF9ESUFMT0dfQ09ORklSTToKLSAgICAgICAgICAgIGdf
YXNzZXJ0KG1fc2NyaXB0RGlhbG9nQ29uZmlybWVkKTsKLSAgICAgICAgICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfc2NyaXB0X2RpYWxvZ19nZXRfbWVzc2FnZShkaWFsb2cpLCA9PSwgImNvbmZp
cm1lZCIpOwotCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXRUJLSVRfU0NSSVBU
X0RJQUxPR19QUk9NUFQ6Ci0gICAgICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3Njcmlw
dF9kaWFsb2dfZ2V0X21lc3NhZ2UoZGlhbG9nKSwgPT0sIGtQcm9tcHREaWFsb2dSZXR1cm5lZFRl
eHQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBnX21haW5fbG9v
cF9xdWl0KG1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIHZvaWQgc2NyaXB0Q29uZmlybShXZWJL
aXRTY3JpcHREaWFsb2cqIGRpYWxvZykKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3
ZWJraXRfc2NyaXB0X2RpYWxvZ19nZXRfbWVzc2FnZShkaWFsb2cpLCA9PSwga0NvbmZpcm1EaWFs
b2dNZXNzYWdlKTsKLSAgICAgICAgbV9zY3JpcHREaWFsb2dDb25maXJtZWQgPSAhbV9zY3JpcHRE
aWFsb2dDb25maXJtZWQ7Ci0gICAgICAgIHdlYmtpdF9zY3JpcHRfZGlhbG9nX2NvbmZpcm1fc2V0
X2NvbmZpcm1lZChkaWFsb2csIG1fc2NyaXB0RGlhbG9nQ29uZmlybWVkKTsKLSAgICB9Ci0KLSAg
ICB2b2lkIHNjcmlwdFByb21wdChXZWJLaXRTY3JpcHREaWFsb2cqIGRpYWxvZykKLSAgICB7Ci0g
ICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2NyaXB0X2RpYWxvZ19nZXRfbWVzc2FnZShk
aWFsb2cpLCA9PSwga1Byb21wdERpYWxvZ01lc3NhZ2UpOwotICAgICAgICBnX2Fzc2VydF9jbXBz
dHIod2Via2l0X3NjcmlwdF9kaWFsb2dfcHJvbXB0X2dldF9kZWZhdWx0X3RleHQoZGlhbG9nKSwg
PT0sICJkZWZhdWx0Iik7Ci0gICAgICAgIHdlYmtpdF9zY3JpcHRfZGlhbG9nX3Byb21wdF9zZXRf
dGV4dChkaWFsb2csIGtQcm9tcHREaWFsb2dSZXR1cm5lZFRleHQpOwotICAgIH0KLQotICAgIHN0
YXRpYyBnYm9vbGVhbiBzY3JpcHREaWFsb2coV2ViS2l0V2ViVmlldyosIFdlYktpdFNjcmlwdERp
YWxvZyogZGlhbG9nLCBVSUNsaWVudFRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICBzd2l0Y2gg
KHdlYmtpdF9zY3JpcHRfZGlhbG9nX2dldF9kaWFsb2dfdHlwZShkaWFsb2cpKSB7Ci0gICAgICAg
IGNhc2UgV0VCS0lUX1NDUklQVF9ESUFMT0dfQUxFUlQ6Ci0gICAgICAgICAgICB0ZXN0LT5zY3Jp
cHRBbGVydChkaWFsb2cpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV0VCS0lU
X1NDUklQVF9ESUFMT0dfQ09ORklSTToKLSAgICAgICAgICAgIHRlc3QtPnNjcmlwdENvbmZpcm0o
ZGlhbG9nKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdFQktJVF9TQ1JJUFRf
RElBTE9HX1BST01QVDoKLSAgICAgICAgICAgIHRlc3QtPnNjcmlwdFByb21wdChkaWFsb2cpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gVFJVRTsKLSAg
ICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBtb3VzZVRhcmdldENoYW5nZWQoV2ViS2l0V2ViVmlldyos
IFdlYktpdEhpdFRlc3RSZXN1bHQqIGhpdFRlc3RSZXN1bHQsIGd1aW50IG1vZGlmaWVycywgVUlD
bGllbnRUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX0hJVF9U
RVNUX1JFU1VMVChoaXRUZXN0UmVzdWx0KSk7Ci0gICAgICAgIHRlc3QtPmFzc2VydE9iamVjdElz
RGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QoaGl0VGVzdFJlc3VsdCkpOwotCi0gICAg
ICAgIHRlc3QtPm1fbW91c2VUYXJnZXRIaXRUZXN0UmVzdWx0ID0gaGl0VGVzdFJlc3VsdDsKLSAg
ICAgICAgdGVzdC0+bV9tb3VzZVRhcmdldE1vZGlmaWVycyA9IG1vZGlmaWVyczsKLSAgICAgICAg
Z19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMg
Z2Jvb2xlYW4gcGVybWlzc2lvblJlcXVlc3RlZChXZWJLaXRXZWJWaWV3KiwgV2ViS2l0UGVybWlz
c2lvblJlcXVlc3QqIHJlcXVlc3QsIFVJQ2xpZW50VGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAg
IGdfYXNzZXJ0KFdFQktJVF9JU19QRVJNSVNTSU9OX1JFUVVFU1QocmVxdWVzdCkpOwotICAgICAg
ICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHJl
cXVlc3QpKTsKLQotICAgICAgICBpZiAodGVzdC0+bV9hbGxvd1Blcm1pc3Npb25SZXF1ZXN0cykK
LSAgICAgICAgICAgIHdlYmtpdF9wZXJtaXNzaW9uX3JlcXVlc3RfYWxsb3cocmVxdWVzdCk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHdlYmtpdF9wZXJtaXNzaW9uX3JlcXVlc3RfZGVueShy
ZXF1ZXN0KTsKLQotICAgICAgICByZXR1cm4gVFJVRTsKLSAgICB9Ci0KLSAgICBVSUNsaWVudFRl
c3QoKQotICAgICAgICA6IG1fc2NyaXB0RGlhbG9nVHlwZShXRUJLSVRfU0NSSVBUX0RJQUxPR19B
TEVSVCkKLSAgICAgICAgLCBtX3NjcmlwdERpYWxvZ0NvbmZpcm1lZCh0cnVlKQotICAgICAgICAs
IG1fYWxsb3dQZXJtaXNzaW9uUmVxdWVzdHMoZmFsc2UpCi0gICAgICAgICwgbV9tb3VzZVRhcmdl
dE1vZGlmaWVycygwKQotICAgIHsKLSAgICAgICAgd2Via2l0X3NldHRpbmdzX3NldF9qYXZhc2Ny
aXB0X2Nhbl9vcGVuX3dpbmRvd3NfYXV0b21hdGljYWxseSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3Nl
dHRpbmdzKG1fd2ViVmlldyksIFRSVUUpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2Vi
VmlldywgImNyZWF0ZSIsIEdfQ0FMTEJBQ0sodmlld0NyZWF0ZUNhbGxiYWNrKSwgdGhpcyk7Ci0g
ICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAic2NyaXB0LWRpYWxvZyIsIEdfQ0FM
TEJBQ0soc2NyaXB0RGlhbG9nKSwgdGhpcyk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93
ZWJWaWV3LCAibW91c2UtdGFyZ2V0LWNoYW5nZWQiLCBHX0NBTExCQUNLKG1vdXNlVGFyZ2V0Q2hh
bmdlZCksIHRoaXMpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgInBlcm1p
c3Npb24tcmVxdWVzdCIsIEdfQ0FMTEJBQ0socGVybWlzc2lvblJlcXVlc3RlZCksIHRoaXMpOwot
ICAgIH0KLQotICAgIH5VSUNsaWVudFRlc3QoKQotICAgIHsKLSAgICAgICAgZ19zaWduYWxfaGFu
ZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fd2ViVmlldywgR19TSUdOQUxfTUFUQ0hfREFUQSwg
MCwgMCwgMCwgMCwgdGhpcyk7Ci0gICAgfQotCi0gICAgdm9pZCB3YWl0VW50aWxNYWluTG9vcEZp
bmlzaGVzKCkKLSAgICB7Ci0gICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAg
ICB9Ci0KLSAgICB2b2lkIHNldEV4cGVjdGVkV2luZG93UHJvcGVydGllcyhjb25zdCBXaW5kb3dQ
cm9wZXJ0aWVzJiB3aW5kb3dQcm9wZXJ0aWVzKQotICAgIHsKLSAgICAgICAgbV93aW5kb3dQcm9w
ZXJ0aWVzID0gd2luZG93UHJvcGVydGllczsKLSAgICB9Ci0KLSAgICBXZWJLaXRIaXRUZXN0UmVz
dWx0KiBtb3ZlTW91c2VBbmRXYWl0VW50aWxNb3VzZVRhcmdldENoYW5nZWQoaW50IHgsIGludCB5
LCB1bnNpZ25lZCBtb3VzZU1vZGlmaWVycyA9IDApCi0gICAgewotICAgICAgICBtb3VzZU1vdmVU
byh4LCB5LCBtb3VzZU1vZGlmaWVycyk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5M
b29wKTsKLSAgICAgICAgcmV0dXJuIG1fbW91c2VUYXJnZXRIaXRUZXN0UmVzdWx0LmdldCgpOwot
ICAgIH0KLQotICAgIHZpcnR1YWwgR3RrV2lkZ2V0KiB2aWV3Q3JlYXRlKFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcpCi0gICAgewotICAgICAgICBnX2Fzc2VydCh3ZWJWaWV3ID09IG1fd2ViVmlldyk7
Ci0KLSAgICAgICAgR3RrV2lkZ2V0KiBuZXdXZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X25ld193
aXRoX2NvbnRleHQod2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KHdlYlZpZXcpKTsKLSAgICAg
ICAgZ19vYmplY3RfcmVmX3NpbmsobmV3V2ViVmlldyk7Ci0KLSAgICAgICAgbV93ZWJWaWV3RXZl
bnRzLmFwcGVuZChDcmVhdGUpOwotCi0gICAgICAgIFdlYktpdFdpbmRvd1Byb3BlcnRpZXMqIHdp
bmRvd1Byb3BlcnRpZXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9wZXJ0aWVzKFdF
QktJVF9XRUJfVklFVyhuZXdXZWJWaWV3KSk7Ci0gICAgICAgIGdfYXNzZXJ0KHdpbmRvd1Byb3Bl
cnRpZXMpOwotICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdf
T0JKRUNUKHdpbmRvd1Byb3BlcnRpZXMpKTsKLSAgICAgICAgbV93aW5kb3dQcm9wZXJ0aWVzQ2hh
bmdlZC5jbGVhcigpOwotCi0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2luZG93UHJvcGVydGll
cywgIm5vdGlmeSIsIEdfQ0FMTEJBQ0sod2luZG93UHJvcGVydGllc05vdGlmeUNhbGxiYWNrKSwg
dGhpcyk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobmV3V2ViVmlldywgInJlYWR5LXRvLXNo
b3ciLCBHX0NBTExCQUNLKHZpZXdSZWFkeVRvU2hvd0NhbGxiYWNrKSwgdGhpcyk7Ci0gICAgICAg
IGdfc2lnbmFsX2Nvbm5lY3QobmV3V2ViVmlldywgImNsb3NlIiwgR19DQUxMQkFDSyh2aWV3Q2xv
c2VDYWxsYmFjayksIHRoaXMpOwotCi0gICAgICAgIHJldHVybiBuZXdXZWJWaWV3OwotICAgIH0K
LQotICAgIHZpcnR1YWwgdm9pZCB2aWV3UmVhZHlUb1Nob3coV2ViS2l0V2ViVmlldyogd2ViVmll
dykKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0KHdlYlZpZXcgIT0gbV93ZWJWaWV3KTsKLQotICAg
ICAgICBXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzKiB3aW5kb3dQcm9wZXJ0aWVzID0gd2Via2l0X3dl
Yl92aWV3X2dldF93aW5kb3dfcHJvcGVydGllcyh3ZWJWaWV3KTsKLSAgICAgICAgZ19hc3NlcnQo
d2luZG93UHJvcGVydGllcyk7Ci0gICAgICAgIGlmICghbV93aW5kb3dQcm9wZXJ0aWVzLmlzTnVs
bCgpKQotICAgICAgICAgICAgV2luZG93UHJvcGVydGllcyh3aW5kb3dQcm9wZXJ0aWVzKS5hc3Nl
cnRFcXVhbChtX3dpbmRvd1Byb3BlcnRpZXMpOwotCi0gICAgICAgIG1fd2ViVmlld0V2ZW50cy5h
cHBlbmQoUmVhZHlUb1Nob3cpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aWV3Q2xvc2Uo
V2ViS2l0V2ViVmlldyogd2ViVmlldykKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0KHdlYlZpZXcg
IT0gbV93ZWJWaWV3KTsKLQotICAgICAgICBtX3dlYlZpZXdFdmVudHMuYXBwZW5kKENsb3NlKTsK
LSAgICAgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Ci0KLSAgICAgICAgZ19tYWluX2xvb3Bf
cXVpdChtX21haW5Mb29wKTsKLSAgICB9Ci0KLSAgICBWZWN0b3I8V2ViVmlld0V2ZW50cz4gbV93
ZWJWaWV3RXZlbnRzOwotICAgIFdlYktpdFNjcmlwdERpYWxvZ1R5cGUgbV9zY3JpcHREaWFsb2dU
eXBlOwotICAgIGJvb2wgbV9zY3JpcHREaWFsb2dDb25maXJtZWQ7Ci0gICAgYm9vbCBtX2FsbG93
UGVybWlzc2lvblJlcXVlc3RzOwotICAgIFdpbmRvd1Byb3BlcnRpZXMgbV93aW5kb3dQcm9wZXJ0
aWVzOwotICAgIEhhc2hTZXQ8V1RGOjpTdHJpbmc+IG1fd2luZG93UHJvcGVydGllc0NoYW5nZWQ7
Ci0gICAgR1JlZlB0cjxXZWJLaXRIaXRUZXN0UmVzdWx0PiBtX21vdXNlVGFyZ2V0SGl0VGVzdFJl
c3VsdDsKLSAgICB1bnNpZ25lZCBtX21vdXNlVGFyZ2V0TW9kaWZpZXJzOwotfTsKLQotc3RhdGlj
IHZvaWQgdGVzdFdlYlZpZXdDcmVhdGVSZWFkeUNsb3NlKFVJQ2xpZW50VGVzdCogdGVzdCwgZ2Nv
bnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHkgb25Mb2FkPVwi
d2luZG93Lm9wZW4oKS5jbG9zZSgpO1wiPjwvaHRtbD4iLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50
aWxNYWluTG9vcEZpbmlzaGVzKCk7Ci0KLSAgICBWZWN0b3I8VUlDbGllbnRUZXN0OjpXZWJWaWV3
RXZlbnRzPiYgZXZlbnRzID0gdGVzdC0+bV93ZWJWaWV3RXZlbnRzOwotICAgIGdfYXNzZXJ0X2Nt
cGludChldmVudHMuc2l6ZSgpLCA9PSwgMyk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sw
XSwgPT0sIFVJQ2xpZW50VGVzdDo6Q3JlYXRlKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRz
WzFdLCA9PSwgVUlDbGllbnRUZXN0OjpSZWFkeVRvU2hvdyk7Ci0gICAgZ19hc3NlcnRfY21waW50
KGV2ZW50c1syXSwgPT0sIFVJQ2xpZW50VGVzdDo6Q2xvc2UpOwotfQotCi1zdGF0aWMgZ2Jvb2xl
YW4gY2hlY2tNaW1lVHlwZUZvckZpbHRlcihHdGtGaWxlRmlsdGVyKiBmaWx0ZXIsIGNvbnN0IGdj
aGFyKiBtaW1lVHlwZSkKLXsKLSAgICBHdGtGaWxlRmlsdGVySW5mbyBmaWx0ZXJJbmZvOwotICAg
IGZpbHRlckluZm8uY29udGFpbnMgPSBHVEtfRklMRV9GSUxURVJfTUlNRV9UWVBFOwotICAgIGZp
bHRlckluZm8ubWltZV90eXBlID0gbWltZVR5cGU7Ci0gICAgcmV0dXJuIGd0a19maWxlX2ZpbHRl
cl9maWx0ZXIoZmlsdGVyLCAmZmlsdGVySW5mbyk7Ci19Ci0KLWNsYXNzIE1vZGFsRGlhbG9nc1Rl
c3Q6IHB1YmxpYyBVSUNsaWVudFRlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJ
WFRVUkUoTW9kYWxEaWFsb2dzVGVzdCk7Ci0KLSAgICBzdGF0aWMgdm9pZCBkaWFsb2dSdW5Bc01v
ZGFsQ2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgTW9kYWxEaWFsb2dzVGVzdCogdGVz
dCkKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0KHdlYlZpZXcgIT0gdGVzdC0+bV93ZWJWaWV3KTsK
LSAgICAgICAgdGVzdC0+bV93ZWJWaWV3RXZlbnRzLmFwcGVuZChSdW5Bc01vZGFsKTsKLSAgICB9
Ci0KLSAgICBHdGtXaWRnZXQqIHZpZXdDcmVhdGUoV2ViS2l0V2ViVmlldyogd2ViVmlldykKLSAg
ICB7Ci0gICAgICAgIGdfYXNzZXJ0KHdlYlZpZXcgPT0gbV93ZWJWaWV3KTsKLQotICAgICAgICBH
dGtXaWRnZXQqIG5ld1dlYlZpZXcgPSBVSUNsaWVudFRlc3Q6OnZpZXdDcmVhdGUod2ViVmlldyk7
Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobmV3V2ViVmlldywgInJ1bi1hcy1tb2RhbCIsIEdf
Q0FMTEJBQ0soZGlhbG9nUnVuQXNNb2RhbENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIHJldHVy
biBuZXdXZWJWaWV3OwotICAgIH0KLQotICAgIHZvaWQgdmlld1JlYWR5VG9TaG93KFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcpCi0gICAgewotICAgICAgICBnX2Fzc2VydCh3ZWJWaWV3ICE9IG1fd2Vi
Vmlldyk7Ci0gICAgICAgIG1fd2ViVmlld0V2ZW50cy5hcHBlbmQoUmVhZHlUb1Nob3cpOwotICAg
IH0KLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3QWxsb3dNb2RhbERpYWxvZ3MoTW9kYWxE
aWFsb2dzVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBXZWJLaXRTZXR0aW5ncyog
c2V0dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHRlc3QtPm1fd2ViVmlldyk7
Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9hbGxvd19tb2RhbF9kaWFsb2dzKHNldHRpbmdzLCBU
UlVFKTsKLQotICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keSBvbmxvYWQ9XCJ3aW5kb3cu
c2hvd01vZGFsRGlhbG9nKCdkYXRhOnRleHQvaHRtbCw8aHRtbD48Ym9keS8+PHNjcmlwdD53aW5k
b3cuY2xvc2UoKTs8L3NjcmlwdD48L2h0bWw+JylcIj48L2JvZHk+PC9odG1sPiIsIDApOwotICAg
IHRlc3QtPndhaXRVbnRpbE1haW5Mb29wRmluaXNoZXMoKTsKLQotICAgIFZlY3RvcjxVSUNsaWVu
dFRlc3Q6OldlYlZpZXdFdmVudHM+JiBldmVudHMgPSB0ZXN0LT5tX3dlYlZpZXdFdmVudHM7Ci0g
ICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCA0KTsKLSAgICBnX2Fzc2VydF9j
bXBpbnQoZXZlbnRzWzBdLCA9PSwgVUlDbGllbnRUZXN0OjpDcmVhdGUpOwotICAgIGdfYXNzZXJ0
X2NtcGludChldmVudHNbMV0sID09LCBVSUNsaWVudFRlc3Q6OlJlYWR5VG9TaG93KTsKLSAgICBn
X2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgVUlDbGllbnRUZXN0OjpSdW5Bc01vZGFsKTsK
LSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzNdLCA9PSwgVUlDbGllbnRUZXN0OjpDbG9zZSk7
Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3RGlzYWxsb3dNb2RhbERpYWxvZ3MoTW9kYWxE
aWFsb2dzVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBXZWJLaXRTZXR0aW5ncyog
c2V0dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHRlc3QtPm1fd2ViVmlldyk7
Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9hbGxvd19tb2RhbF9kaWFsb2dzKHNldHRpbmdzLCBG
QUxTRSk7Ci0KLSAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHkgb25sb2FkPVwid2luZG93
LnNob3dNb2RhbERpYWxvZygnZGF0YTp0ZXh0L2h0bWwsPGh0bWw+PGJvZHkvPjxzY3JpcHQ+d2lu
ZG93LmNsb3NlKCk7PC9zY3JpcHQ+PC9odG1sPicpXCI+PC9ib2R5PjwvaHRtbD4iLCAwKTsKLSAg
ICAvLyBXZSBuZWVkIHRvIHVzZSBhIHRpbWVvdXQgaGVyZSBiZWNhdXNlIHRoZSB2aWV3Q2xvc2Uo
KSBmdW5jdGlvbgotICAgIC8vIHdvbid0IGV2ZXIgYmUgY2FsbGVkIGFzIHRoZSBkaWFsb2cgd29u
J3QgYmUgY3JlYXRlZC4KLSAgICB0ZXN0LT53YWl0KDEpOwotCi0gICAgVmVjdG9yPFVJQ2xpZW50
VGVzdDo6V2ViVmlld0V2ZW50cz4mIGV2ZW50cyA9IHRlc3QtPm1fd2ViVmlld0V2ZW50czsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDApOwotfQotCi1zdGF0aWMgdm9p
ZCB0ZXN0V2ViVmlld0phdmFTY3JpcHREaWFsb2dzKFVJQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKLXsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogaHRtbE9uTG9hZEZvcm1hdCA9ICI8
aHRtbD48Ym9keSBvbkxvYWQ9XCIlc1wiPjwvYm9keT48L2h0bWw+IjsKLSAgICBzdGF0aWMgY29u
c3QgY2hhcioganNBbGVydEZvcm1hdCA9ICJhbGVydCgnJXMnKSI7Ci0gICAgc3RhdGljIGNvbnN0
IGNoYXIqIGpzQ29uZmlybUZvcm1hdCA9ICJkbyB7IGNvbmZpcm1lZCA9IGNvbmZpcm0oJyVzJyk7
IH0gd2hpbGUgKCFjb25maXJtZWQpOyBhbGVydCgnY29uZmlybWVkJyk7IjsKLSAgICBzdGF0aWMg
Y29uc3QgY2hhcioganNQcm9tcHRGb3JtYXQgPSAiYWxlcnQocHJvbXB0KCclcycsICdkZWZhdWx0
JykpOyI7Ci0KLSAgICB0ZXN0LT5tX3NjcmlwdERpYWxvZ1R5cGUgPSBXRUJLSVRfU0NSSVBUX0RJ
QUxPR19BTEVSVDsKLSAgICBHT3duUHRyPGNoYXI+IGFsZXJ0RGlhbG9nTWVzc2FnZShnX3N0cmR1
cF9wcmludGYoanNBbGVydEZvcm1hdCwga0FsZXJ0RGlhbG9nTWVzc2FnZSkpOwotICAgIEdPd25Q
dHI8Y2hhcj4gYWxlcnRIVE1MKGdfc3RyZHVwX3ByaW50ZihodG1sT25Mb2FkRm9ybWF0LCBhbGVy
dERpYWxvZ01lc3NhZ2UuZ2V0KCkpKTsKLSAgICB0ZXN0LT5sb2FkSHRtbChhbGVydEhUTUwuZ2V0
KCksIDApOwotICAgIHRlc3QtPndhaXRVbnRpbE1haW5Mb29wRmluaXNoZXMoKTsKLQotICAgIHRl
c3QtPm1fc2NyaXB0RGlhbG9nVHlwZSA9IFdFQktJVF9TQ1JJUFRfRElBTE9HX0NPTkZJUk07Ci0g
ICAgR093blB0cjxjaGFyPiBjb25maXJtRGlhbG9nTWVzc2FnZShnX3N0cmR1cF9wcmludGYoanND
b25maXJtRm9ybWF0LCBrQ29uZmlybURpYWxvZ01lc3NhZ2UpKTsKLSAgICBHT3duUHRyPGNoYXI+
IGNvbmZpcm1IVE1MKGdfc3RyZHVwX3ByaW50ZihodG1sT25Mb2FkRm9ybWF0LCBjb25maXJtRGlh
bG9nTWVzc2FnZS5nZXQoKSkpOwotICAgIHRlc3QtPmxvYWRIdG1sKGNvbmZpcm1IVE1MLmdldCgp
LCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxNYWluTG9vcEZpbmlzaGVzKCk7Ci0KLSAgICB0ZXN0
LT5tX3NjcmlwdERpYWxvZ1R5cGUgPSBXRUJLSVRfU0NSSVBUX0RJQUxPR19QUk9NUFQ7Ci0gICAg
R093blB0cjxjaGFyPiBwcm9tcHREaWFsb2dNZXNzYWdlKGdfc3RyZHVwX3ByaW50Zihqc1Byb21w
dEZvcm1hdCwga1Byb21wdERpYWxvZ01lc3NhZ2UpKTsKLSAgICBHT3duUHRyPGNoYXI+IHByb21w
dEhUTUwoZ19zdHJkdXBfcHJpbnRmKGh0bWxPbkxvYWRGb3JtYXQsIHByb21wdERpYWxvZ01lc3Nh
Z2UuZ2V0KCkpKTsKLSAgICB0ZXN0LT5sb2FkSHRtbChwcm9tcHRIVE1MLmdldCgpLCAwKTsKLSAg
ICB0ZXN0LT53YWl0VW50aWxNYWluTG9vcEZpbmlzaGVzKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRl
c3RXZWJWaWV3V2luZG93UHJvcGVydGllcyhVSUNsaWVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCi17Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHdpbmRvd1Byb3JwZXJ0aWVzU3RyaW5nID0g
ImxlZnQ9MTAwLHRvcD0xNTAsd2lkdGg9NDAwLGhlaWdodD00MDAsbG9jYXRpb249bm8sbWVudWJh
cj1ubyxzdGF0dXM9bm8sdG9vbGJhcj1ubyxzY3JvbGxiYXJzPW5vIjsKLSAgICBHZGtSZWN0YW5n
bGUgZ2VvbWV0cnkgPSB7IDEwMCwgMTUwLCA0MDAsIDQwMCB9OwotICAgIHRlc3QtPnNldEV4cGVj
dGVkV2luZG93UHJvcGVydGllcyhVSUNsaWVudFRlc3Q6OldpbmRvd1Byb3BlcnRpZXMoJmdlb21l
dHJ5LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlKSk7Ci0K
LSAgICBHT3duUHRyPGNoYXI+IGh0bWxTdHJpbmcoZ19zdHJkdXBfcHJpbnRmKCI8aHRtbD48Ym9k
eSBvbkxvYWQ9XCJ3aW5kb3cub3BlbignJywgJycsICclcycpLmNsb3NlKCk7XCI+PC9ib2R5Pjwv
aHRtbD4iLCB3aW5kb3dQcm9ycGVydGllc1N0cmluZykpOwotICAgIHRlc3QtPmxvYWRIdG1sKGh0
bWxTdHJpbmcuZ2V0KCksIDApOwotICAgIHRlc3QtPndhaXRVbnRpbE1haW5Mb29wRmluaXNoZXMo
KTsKLQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBwcm9wZXJ0aWVzQ2hhbmdlZFtdID0gewotICAg
ICAgICAiZ2VvbWV0cnkiLCAibG9jYXRpb25iYXItdmlzaWJsZSIsICJtZW51YmFyLXZpc2libGUi
LCAic3RhdHVzYmFyLXZpc2libGUiLCAidG9vbGJhci12aXNpYmxlIiwgInNjcm9sbGJhcnMtdmlz
aWJsZSIKLSAgICB9OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgR19OX0VMRU1FTlRTKHBy
b3BlcnRpZXNDaGFuZ2VkKTsgKytpKQotICAgICAgICBnX2Fzc2VydCh0ZXN0LT5tX3dpbmRvd1By
b3BlcnRpZXNDaGFuZ2VkLmNvbnRhaW5zKHByb3BlcnRpZXNDaGFuZ2VkW2ldKSk7Ci0KLSAgICBW
ZWN0b3I8VUlDbGllbnRUZXN0OjpXZWJWaWV3RXZlbnRzPiYgZXZlbnRzID0gdGVzdC0+bV93ZWJW
aWV3RXZlbnRzOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgMyk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIFVJQ2xpZW50VGVzdDo6Q3JlYXRlKTsK
LSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgVUlDbGllbnRUZXN0OjpSZWFkeVRv
U2hvdyk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIFVJQ2xpZW50VGVzdDo6
Q2xvc2UpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld01vdXNlVGFyZ2V0KFVJQ2xpZW50
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRX
YWl0VW50aWxNYXBwZWQoR1RLX1dJTkRPV19UT1BMRVZFTCk7Ci0KLSAgICBjb25zdCBjaGFyKiBs
aW5rc0hvdmVyZWRIVE1MID0KLSAgICAgICAgIjxodG1sPjxib2R5PiIKLSAgICAgICAgIiA8YSBz
dHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjEnIGhyZWY9J2h0dHA6Ly93d3cu
d2Via2l0Z3RrLm9yZycgdGl0bGU9J1dlYktpdEdUSysgVGl0bGUnPldlYktpdEdUSysgV2Vic2l0
ZTwvYT4iCi0gICAgICAgICIgPGltZyBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsg
dG9wOjEwJyBzcmM9JzB4ZGVhZGJlZWYnIHdpZHRoPTUgaGVpZ2h0PTU+PC9pbWc+IgotICAgICAg
ICAiIDxhIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6MjAnIGhyZWY9J2h0
dHA6Ly93d3cud2Via2l0Z3RrLm9yZy9sb2dvJyB0aXRsZT0nV2ViS2l0R1RLKyBMb2dvJz48aW1n
IHNyYz0nMHhkZWFkYmVlZicgd2lkdGg9NSBoZWlnaHQ9NT48L2ltZz48L2E+IgotICAgICAgICAi
IDxpbnB1dCBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjMwJyBzaXplPScx
MCc+PC9pbnB1dD4iCi0gICAgICAgICIgPGRpdiBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxl
ZnQ6MTsgdG9wOjUwOyB3aWR0aDozMDsgaGVpZ2h0OjMwOyBvdmVyZmxvdzpzY3JvbGwnPiZuYnNw
OzwvZGl2PiIKLSAgICAgICAgIiA8dmlkZW8gc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0
OjE7IHRvcDoxMDAnIHdpZHRoPSczMDAnIGhlaWdodD0nMzAwJyBjb250cm9scz0nY29udHJvbHMn
IHByZWxvYWQ9J25vbmUnPjxzb3VyY2Ugc3JjPSdtb3ZpZS5vZ2cnIHR5cGU9J3ZpZGVvL29nZycg
Lz48L3ZpZGVvPiIKLSAgICAgICAgIjwvYm9keT48L2h0bWw+IjsKLQotICAgIHRlc3QtPmxvYWRI
dG1sKGxpbmtzSG92ZXJlZEhUTUwsICJmaWxlOi8vLyIpOwotICAgIHRlc3QtPndhaXRVbnRpbExv
YWRGaW5pc2hlZCgpOwotCi0gICAgLy8gTW92ZSBvdmVyIGxpbmsuCi0gICAgV2ViS2l0SGl0VGVz
dFJlc3VsdCogaGl0VGVzdFJlc3VsdCA9IHRlc3QtPm1vdmVNb3VzZUFuZFdhaXRVbnRpbE1vdXNl
VGFyZ2V0Q2hhbmdlZCgxLCAxKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0
X2NvbnRleHRfaXNfbGluayhoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9o
aXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19h
c3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVz
dWx0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19l
ZGl0YWJsZShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9oaXRf
dGVzdF9yZXN1bHRfZ2V0X2xpbmtfdXJpKGhpdFRlc3RSZXN1bHQpLCA9PSwgImh0dHA6Ly93d3cu
d2Via2l0Z3RrLm9yZy8iKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2hpdF90ZXN0X3Jl
c3VsdF9nZXRfbGlua190aXRsZShoaXRUZXN0UmVzdWx0KSwgPT0sICJXZWJLaXRHVEsrIFRpdGxl
Iik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2xpbmtf
bGFiZWwoaGl0VGVzdFJlc3VsdCksID09LCAiV2ViS2l0R1RLKyBXZWJzaXRlIik7Ci0gICAgZ19h
c3NlcnQoIXRlc3QtPm1fbW91c2VUYXJnZXRNb2RpZmllcnMpOwotCi0gICAgLy8gTW92ZSBvdXQg
b2YgdGhlIGxpbmsuCi0gICAgaGl0VGVzdFJlc3VsdCA9IHRlc3QtPm1vdmVNb3VzZUFuZFdhaXRV
bnRpbE1vdXNlVGFyZ2V0Q2hhbmdlZCgwLCAwKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90
ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xpbmsoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0
KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkp
OwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbWVkaWEo
aGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2Nv
bnRleHRfaXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0KCF0ZXN0LT5t
X21vdXNlVGFyZ2V0TW9kaWZpZXJzKTsKLQotICAgIC8vIE1vdmUgb3ZlciBpbWFnZSB3aXRoIEdE
S19DT05UUk9MX01BU0suCi0gICAgaGl0VGVzdFJlc3VsdCA9IHRlc3QtPm1vdmVNb3VzZUFuZFdh
aXRVbnRpbE1vdXNlVGFyZ2V0Q2hhbmdlZCgxLCAxMCwgR0RLX0NPTlRST0xfTUFTSyk7Ci0gICAg
Z19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RS
ZXN1bHQpKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNf
aW1hZ2UoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVz
dWx0X2NvbnRleHRfaXNfbWVkaWEoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJr
aXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkpOwot
ICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfc2Nyb2xsYmFy
KGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2hpdF90ZXN0X3Jl
c3VsdF9nZXRfaW1hZ2VfdXJpKGhpdFRlc3RSZXN1bHQpLCA9PSwgImZpbGU6Ly8vMHhkZWFkYmVl
ZiIpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fbW91c2VUYXJnZXRNb2RpZmllcnMgJiBHREtfQ09O
VFJPTF9NQVNLKTsKLQotICAgIC8vIE1vdmUgb3ZlciBpbWFnZSBsaW5rLgotICAgIGhpdFRlc3RS
ZXN1bHQgPSB0ZXN0LT5tb3ZlTW91c2VBbmRXYWl0VW50aWxNb3VzZVRhcmdldENoYW5nZWQoMSwg
MjApOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5r
KGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2Nv
bnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0
X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbWVkaWEoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfZWRpdGFibGUoaGl0VGVzdFJl
c3VsdCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNf
c2Nyb2xsYmFyKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2hp
dF90ZXN0X3Jlc3VsdF9nZXRfbGlua191cmkoaGl0VGVzdFJlc3VsdCksID09LCAiaHR0cDovL3d3
dy53ZWJraXRndGsub3JnL2xvZ28iKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2hpdF90
ZXN0X3Jlc3VsdF9nZXRfaW1hZ2VfdXJpKGhpdFRlc3RSZXN1bHQpLCA9PSwgImZpbGU6Ly8vMHhk
ZWFkYmVlZiIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dl
dF9saW5rX3RpdGxlKGhpdFRlc3RSZXN1bHQpLCA9PSwgIldlYktpdEdUSysgTG9nbyIpOwotICAg
IGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9saW5rX2xhYmVsKGhpdFRlc3RS
ZXN1bHQpKTsKLSAgICBnX2Fzc2VydCghdGVzdC0+bV9tb3VzZVRhcmdldE1vZGlmaWVycyk7Ci0K
LSAgICAvLyBNb3ZlIG92ZXIgbWVkaWEuCi0gICAgaGl0VGVzdFJlc3VsdCA9IHRlc3QtPm1vdmVN
b3VzZUFuZFdhaXRVbnRpbE1vdXNlVGFyZ2V0Q2hhbmdlZCgxLCAxMDApOwotICAgIGdfYXNzZXJ0
KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluayhoaXRUZXN0UmVzdWx0KSk7
Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFnZSho
aXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250
ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90
ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fz
c2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX3Njcm9sbGJhcihoaXRUZXN0
UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0
X21lZGlhX3VyaShoaXRUZXN0UmVzdWx0KSwgPT0sICJmaWxlOi8vL21vdmllLm9nZyIpOwotICAg
IGdfYXNzZXJ0KCF0ZXN0LT5tX21vdXNlVGFyZ2V0TW9kaWZpZXJzKTsKLQotICAgIC8vIE1vdmVy
IG92ZXIgaW5wdXQuCi0gICAgaGl0VGVzdFJlc3VsdCA9IHRlc3QtPm1vdmVNb3VzZUFuZFdhaXRV
bnRpbE1vdXNlVGFyZ2V0Q2hhbmdlZCg1LCAzNSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRf
dGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2Vy
dCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQp
KTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlh
KGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9j
b250ZXh0X2lzX3Njcm9sbGJhcihoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQod2Via2l0
X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKLSAg
ICBnX2Fzc2VydCghdGVzdC0+bV9tb3VzZVRhcmdldE1vZGlmaWVycyk7Ci0KLSAgICAvLyBNb3Zl
IG92ZXIgc2Nyb2xsYmFyLgotICAgIGhpdFRlc3RSZXN1bHQgPSB0ZXN0LT5tb3ZlTW91c2VBbmRX
YWl0VW50aWxNb3VzZVRhcmdldENoYW5nZWQoNSwgNzUpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRf
aGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluayhoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19h
c3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFnZShoaXRUZXN0UmVz
dWx0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19t
ZWRpYShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1
bHRfY29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQod2Vi
a2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX3Njcm9sbGJhcihoaXRUZXN0UmVzdWx0KSk7
Ci0gICAgZ19hc3NlcnQoIXRlc3QtPm1fbW91c2VUYXJnZXRNb2RpZmllcnMpOwotfQotCi1zdGF0
aWMgdm9pZCB0ZXN0V2ViVmlld1Blcm1pc3Npb25SZXF1ZXN0cyhVSUNsaWVudFRlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIpCi17Ci0gICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBnZW9jbHVlIGdpdmUg
YSBydW50aW1lIHdhcm5pbmcgYmVjYXVzZSBpdCB0cmllcwotICAgIC8vIHRvIHJlZ2lzdGVyIHRo
ZSBlcnJvciBxdWFyayB0d2ljZS4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04OTg1OC4KLSAgICAvLyBNYWtlIHdhcm5pbmdzIG5vbi1mYXRhbCBmb3IgdGhpcyB0
ZXN0IHRvIG1ha2UgaXQgcGFzcy4KLSAgICB0ZXN0LT5yZW1vdmVMb2dGYXRhbEZsYWcoR19MT0df
TEVWRUxfV0FSTklORyk7Ci0gICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVk
KCk7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGdlb2xvY2F0aW9uUmVxdWVzdEhUTUwgPQotICAg
ICAgICAiPGh0bWw+IgotICAgICAgICAiICA8c2NyaXB0PiIKLSAgICAgICAgIiAgZnVuY3Rpb24g
cnVuVGVzdCgpIgotICAgICAgICAiICB7IgotICAgICAgICAiICAgIG5hdmlnYXRvci5nZW9sb2Nh
dGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZnVuY3Rpb24ocCkgeyBkb2N1bWVudC50aXRsZSA9IFwi
T0tcIiB9LCIKLSAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZ1bmN0aW9uKGUpIHsgZG9jdW1lbnQudGl0bGUgPSBlLmNvZGUgfSk7IgotICAgICAg
ICAiICB9IgotICAgICAgICAiICA8L3NjcmlwdD4iCi0gICAgICAgICIgIDxib2R5IG9ubG9hZD0n
cnVuVGVzdCgpOyc+PC9ib2R5PiIKLSAgICAgICAgIjwvaHRtbD4iOwotCi0gICAgLy8gVGVzdCBk
ZW55aW5nIGEgcGVybWlzc2lvbiByZXF1ZXN0LgotICAgIHRlc3QtPm1fYWxsb3dQZXJtaXNzaW9u
UmVxdWVzdHMgPSBmYWxzZTsKLSAgICB0ZXN0LT5sb2FkSHRtbChnZW9sb2NhdGlvblJlcXVlc3RI
VE1MLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxUaXRsZUNoYW5nZWQoKTsKLQotICAgIC8vIEFj
Y29yZGluZyB0byB0aGUgR2VvbG9jYXRpb24gQVBJIHNwZWNpZmljYXRpb24sICcxJyBpcyB0aGUK
LSAgICAvLyBlcnJvciBjb2RlIHJldHVybmVkIGZvciB0aGUgUEVSTUlTU0lPTl9ERU5JRUQgZXJy
b3IuCi0gICAgLy8gaHR0cDovL2Rldi53My5vcmcvZ2VvL2FwaS9zcGVjLXNvdXJjZS5odG1sI3Bv
c2l0aW9uX2Vycm9yX2ludGVyZmFjZQotICAgIGNvbnN0IGdjaGFyKiByZXN1bHQgPSB3ZWJraXRf
d2ViX3ZpZXdfZ2V0X3RpdGxlKHRlc3QtPm1fd2ViVmlldyk7Ci0gICAgZ19hc3NlcnRfY21wc3Ry
KHJlc3VsdCwgPT0sICIxIik7Ci0KLSAgICAvLyBUZXN0IGFsbG93aW5nIGEgcGVybWlzc2lvbiBy
ZXF1ZXN0LgotICAgIHRlc3QtPm1fYWxsb3dQZXJtaXNzaW9uUmVxdWVzdHMgPSB0cnVlOwotICAg
IHRlc3QtPmxvYWRIdG1sKGdlb2xvY2F0aW9uUmVxdWVzdEhUTUwsIDApOwotICAgIHRlc3QtPndh
aXRVbnRpbFRpdGxlQ2hhbmdlZCgpOwotCi0gICAgLy8gQ2hlY2sgdGhhdCB3ZSBkaWQgbm90IGdl
dCB0aGUgUEVSTUlTU0lPTl9ERU5JRUQgZXJyb3Igbm93LgotICAgIHJlc3VsdCA9IHdlYmtpdF93
ZWJfdmlld19nZXRfdGl0bGUodGVzdC0+bV93ZWJWaWV3KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIo
cmVzdWx0LCAhPSwgIjEiKTsKLSAgICB0ZXN0LT5hZGRMb2dGYXRhbEZsYWcoR19MT0dfTEVWRUxf
V0FSTklORyk7Ci19Ci0KLWNsYXNzIEZpbGVDaG9vc2VyVGVzdDogcHVibGljIFVJQ2xpZW50VGVz
dCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShGaWxlQ2hvb3NlclRlc3Qp
OwotCi0gICAgRmlsZUNob29zZXJUZXN0KCkKLSAgICB7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5l
Y3QobV93ZWJWaWV3LCAicnVuLWZpbGUtY2hvb3NlciIsIEdfQ0FMTEJBQ0socnVuRmlsZUNob29z
ZXJDYWxsYmFjayksIHRoaXMpOwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiBydW5GaWxl
Q2hvb3NlckNhbGxiYWNrKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Qq
IHJlcXVlc3QsIEZpbGVDaG9vc2VyVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHRlc3QtPnJ1
bkZpbGVDaG9vc2VyKHJlcXVlc3QpOwotICAgICAgICByZXR1cm4gVFJVRTsKLSAgICB9Ci0KLSAg
ICB2b2lkIHJ1bkZpbGVDaG9vc2VyKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkK
LSAgICB7Ci0gICAgICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19P
QkpFQ1QocmVxdWVzdCkpOwotICAgICAgICBtX2ZpbGVDaG9vc2VyUmVxdWVzdCA9IHJlcXVlc3Q7
Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgV2Vi
S2l0RmlsZUNob29zZXJSZXF1ZXN0KiBjbGlja01vdXNlQnV0dG9uQW5kV2FpdEZvckZpbGVDaG9v
c2VyUmVxdWVzdChpbnQgeCwgaW50IHkpCi0gICAgewotICAgICAgICBjbGlja01vdXNlQnV0dG9u
KHgsIHkpOwotICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Ci0gICAgICAgIHJl
dHVybiBtX2ZpbGVDaG9vc2VyUmVxdWVzdC5nZXQoKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAg
R1JlZlB0cjxXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q+IG1fZmlsZUNob29zZXJSZXF1ZXN0Owot
fTsKLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdGaWxlQ2hvb3NlclJlcXVlc3QoRmlsZUNob29z
ZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPnNob3dJbldpbmRvd0Fu
ZFdhaXRVbnRpbE1hcHBlZCgpOwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmaWxlQ2hvb3NlckhU
TUxGb3JtYXQgPSAiPGh0bWw+PGJvZHk+PGlucHV0IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTts
ZWZ0OjA7dG9wOjA7bWFyZ2luOjA7cGFkZGluZzowJyB0eXBlPSdmaWxlJyAlcy8+PC9ib2R5Pjwv
aHRtbD4iOwotCi0gICAgLy8gTXVsdGlwbGUgc2VsZWN0aW9ucyBub3QgYWxsb3dlZCwgbm8gTUlN
RSBmaWx0ZXJpbmcuCi0gICAgR093blB0cjxjaGFyPiBzaW1wbGVGaWxlVXBsb2FkSFRNTChnX3N0
cmR1cF9wcmludGYoZmlsZUNob29zZXJIVE1MRm9ybWF0LCAiIikpOwotICAgIHRlc3QtPmxvYWRI
dG1sKHNpbXBsZUZpbGVVcGxvYWRIVE1MLmdldCgpLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxM
b2FkRmluaXNoZWQoKTsKLSAgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIGZpbGVDaG9vc2Vy
UmVxdWVzdCA9IHRlc3QtPmNsaWNrTW91c2VCdXR0b25BbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1
ZXN0KDUsIDUpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0
X3NlbGVjdF9tdWx0aXBsZShmaWxlQ2hvb3NlclJlcXVlc3QpKTsKLQotICAgIGNvbnN0IGdjaGFy
KiBjb25zdCogbWltZVR5cGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1l
X3R5cGVzKGZpbGVDaG9vc2VyUmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQoIW1pbWVUeXBlcyk7Ci0g
ICAgR3RrRmlsZUZpbHRlciogZmlsdGVyID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dl
dF9taW1lX3R5cGVzX2ZpbHRlcihmaWxlQ2hvb3NlclJlcXVlc3QpOwotICAgIGdfYXNzZXJ0KCFm
aWx0ZXIpOwotICAgIGNvbnN0IGdjaGFyKiBjb25zdCogc2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9m
aWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMoZmlsZUNob29zZXJSZXF1ZXN0
KTsKLSAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxlcyk7Ci0gICAgd2Via2l0X2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X2NhbmNlbChmaWxlQ2hvb3NlclJlcXVlc3QpOwotCi0gICAgLy8gTXVsdGlwbGUg
c2VsZWN0aW9ucyBhbGxvd2VkLCBubyBNSU1FIGZpbHRlcmluZywgc29tZSBwcmUtc2VsZWN0ZWQg
ZmlsZXMuCi0gICAgR093blB0cjxjaGFyPiBtdWx0aXBsZVNlbGVjdGlvbkZpbGVVcGxvYWRIVE1M
KGdfc3RyZHVwX3ByaW50ZihmaWxlQ2hvb3NlckhUTUxGb3JtYXQsICJtdWx0aXBsZSIpKTsKLSAg
ICB0ZXN0LT5sb2FkSHRtbChtdWx0aXBsZVNlbGVjdGlvbkZpbGVVcGxvYWRIVE1MLmdldCgpLCAw
KTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBmaWxlQ2hvb3NlclJl
cXVlc3QgPSB0ZXN0LT5jbGlja01vdXNlQnV0dG9uQW5kV2FpdEZvckZpbGVDaG9vc2VyUmVxdWVz
dCg1LCA1KTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3Nl
bGVjdF9tdWx0aXBsZShmaWxlQ2hvb3NlclJlcXVlc3QpKTsKLQotICAgIG1pbWVUeXBlcyA9IHdl
YmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcyhmaWxlQ2hvb3NlclJlcXVl
c3QpOwotICAgIGdfYXNzZXJ0KCFtaW1lVHlwZXMpOwotICAgIGZpbHRlciA9IHdlYmtpdF9maWxl
X2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIoZmlsZUNob29zZXJSZXF1ZXN0
KTsKLSAgICBnX2Fzc2VydCghZmlsdGVyKTsKLSAgICBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2Zp
bGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhmaWxlQ2hvb3NlclJlcXVlc3Qp
OwotICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZpbGVzKTsKLQotICAgIC8vIFNlbGVjdCBzb21lIGZp
bGVzLgotICAgIGNvbnN0IGdjaGFyKiBmaWxlc1RvU2VsZWN0WzRdID0geyAiL2ZvbyIsICIvZm9v
L2JhciIsICIvZm9vL2Jhci9iYXoiLCAwIH07Ci0gICAgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1
ZXN0X3NlbGVjdF9maWxlcyhmaWxlQ2hvb3NlclJlcXVlc3QsIGZpbGVzVG9TZWxlY3QpOwotCi0g
ICAgLy8gQ2hlY2sgdGhlIGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGp1c3Qgc2VsZWN0ZWQuCi0gICAg
c2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRf
ZmlsZXMoZmlsZUNob29zZXJSZXF1ZXN0KTsKLSAgICBnX2Fzc2VydChzZWxlY3RlZEZpbGVzKTsK
LSAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1swXSwgPT0sICIvZm9vIik7Ci0gICAg
Z19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMV0sID09LCAiL2Zvby9iYXIiKTsKLSAgICBn
X2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1syXSwgPT0sICIvZm9vL2Jhci9iYXoiKTsKLSAg
ICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxlc1szXSk7Ci0KLSAgICAvLyBQZXJmb3JtIGFub3RoZXIg
cmVxdWVzdCB0byBjaGVjayBpZiB0aGUgbGlzdCBvZiBmaWxlcyBzZWxlY3RlZAotICAgIC8vIGlu
IHRoZSBwcmV2aW91cyBzdGVwIGFwcGVhcnMgbm93IGFzIHBhcnQgb2YgdGhlIG5ldyByZXF1ZXN0
LgotICAgIGZpbGVDaG9vc2VyUmVxdWVzdCA9IHRlc3QtPmNsaWNrTW91c2VCdXR0b25BbmRXYWl0
Rm9yRmlsZUNob29zZXJSZXF1ZXN0KDUsIDUpOwotICAgIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRf
ZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKGZpbGVDaG9vc2VyUmVxdWVz
dCk7Ci0gICAgZ19hc3NlcnQoc2VsZWN0ZWRGaWxlcyk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHNl
bGVjdGVkRmlsZXNbMF0sID09LCAiL2ZvbyIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3Rl
ZEZpbGVzWzFdLCA9PSwgIi9mb28vYmFyIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVk
RmlsZXNbMl0sID09LCAiL2Zvby9iYXIvYmF6Iik7Ci0gICAgZ19hc3NlcnQoIXNlbGVjdGVkRmls
ZXNbM10pOwotICAgIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9jYW5jZWwoZmlsZUNob29z
ZXJSZXF1ZXN0KTsKLQotICAgIC8vIE11bHRpcGxlIHNlbGVjdGlvbnMgbm90IGFsbG93ZWQsIG9u
bHkgYWNjZXB0IGltYWdlcywgYXVkaW8gYW5kIHZpZGVvIGZpbGVzLi4KLSAgICBHT3duUHRyPGNo
YXI+IG1pbWVGaWx0ZXJlZEZpbGVVcGxvYWRIVE1MKGdfc3RyZHVwX3ByaW50ZihmaWxlQ2hvb3Nl
ckhUTUxGb3JtYXQsICJhY2NlcHQ9J2F1ZGlvLyosdmlkZW8vKixpbWFnZS8qJyIpKTsKLSAgICB0
ZXN0LT5sb2FkSHRtbChtaW1lRmlsdGVyZWRGaWxlVXBsb2FkSFRNTC5nZXQoKSwgMCk7Ci0gICAg
dGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgZmlsZUNob29zZXJSZXF1ZXN0ID0g
dGVzdC0+Y2xpY2tNb3VzZUJ1dHRvbkFuZFdhaXRGb3JGaWxlQ2hvb3NlclJlcXVlc3QoNSwgNSk7
Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211
bHRpcGxlKGZpbGVDaG9vc2VyUmVxdWVzdCkpOwotCi0gICAgbWltZVR5cGVzID0gd2Via2l0X2Zp
bGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKGZpbGVDaG9vc2VyUmVxdWVzdCk7Ci0g
ICAgZ19hc3NlcnQobWltZVR5cGVzKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIobWltZVR5cGVzWzBd
LCA9PSwgImF1ZGlvLyoiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIobWltZVR5cGVzWzFdLCA9PSwg
InZpZGVvLyoiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIobWltZVR5cGVzWzJdLCA9PSwgImltYWdl
LyoiKTsKLSAgICBnX2Fzc2VydCghbWltZVR5cGVzWzNdKTsKLQotICAgIGZpbHRlciA9IHdlYmtp
dF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIoZmlsZUNob29zZXJS
ZXF1ZXN0KTsKLSAgICBnX2Fzc2VydChHVEtfSVNfRklMRV9GSUxURVIoZmlsdGVyKSk7Ci0gICAg
Z19hc3NlcnQoY2hlY2tNaW1lVHlwZUZvckZpbHRlcihmaWx0ZXIsICJhdWRpby8qIikpOwotICAg
IGdfYXNzZXJ0KGNoZWNrTWltZVR5cGVGb3JGaWx0ZXIoZmlsdGVyLCAidmlkZW8vKiIpKTsKLSAg
ICBnX2Fzc2VydChjaGVja01pbWVUeXBlRm9yRmlsdGVyKGZpbHRlciwgImltYWdlLyoiKSk7Ci0K
LSAgICBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxl
Y3RlZF9maWxlcyhmaWxlQ2hvb3NlclJlcXVlc3QpOwotICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZp
bGVzKTsKLSAgICB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2FuY2VsKGZpbGVDaG9vc2Vy
UmVxdWVzdCk7Ci19Ci0KLXZvaWQgYmVmb3JlQWxsKCkKLXsKLSAgICBVSUNsaWVudFRlc3Q6OmFk
ZCgiV2ViS2l0V2ViVmlldyIsICJjcmVhdGUtcmVhZHktY2xvc2UiLCB0ZXN0V2ViVmlld0NyZWF0
ZVJlYWR5Q2xvc2UpOwotICAgIE1vZGFsRGlhbG9nc1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIs
ICJhbGxvdy1tb2RhbC1kaWFsb2dzIiwgdGVzdFdlYlZpZXdBbGxvd01vZGFsRGlhbG9ncyk7Ci0g
ICAgTW9kYWxEaWFsb2dzVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImRpc2FsbG93LW1vZGFs
LWRpYWxvZ3MiLCB0ZXN0V2ViVmlld0Rpc2FsbG93TW9kYWxEaWFsb2dzKTsKLSAgICBVSUNsaWVu
dFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJqYXZhc2NyaXB0LWRpYWxvZ3MiLCB0ZXN0V2Vi
Vmlld0phdmFTY3JpcHREaWFsb2dzKTsKLSAgICBVSUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2Vi
VmlldyIsICJ3aW5kb3ctcHJvcGVydGllcyIsIHRlc3RXZWJWaWV3V2luZG93UHJvcGVydGllcyk7
Ci0gICAgVUlDbGllbnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAibW91c2UtdGFyZ2V0Iiwg
dGVzdFdlYlZpZXdNb3VzZVRhcmdldCk7Ci0gICAgVUlDbGllbnRUZXN0OjphZGQoIldlYktpdFdl
YlZpZXciLCAicGVybWlzc2lvbi1yZXF1ZXN0cyIsIHRlc3RXZWJWaWV3UGVybWlzc2lvblJlcXVl
c3RzKTsKLSAgICBGaWxlQ2hvb3NlclRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJmaWxlLWNo
b29zZXItcmVxdWVzdCIsIHRlc3RXZWJWaWV3RmlsZUNob29zZXJSZXF1ZXN0KTsKLX0KLQotdm9p
ZCBhZnRlckFsbCgpCi17Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9UZXN0V2ViRXh0ZW5zaW9ucy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViRXh0ZW5zaW9ucy5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDkxY2I3YWEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYkV4dGVuc2lvbnMuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMTk1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIldlYktpdFRlc3RCdXMuaCIKLSNpbmNs
dWRlICJXZWJWaWV3VGVzdC5oIgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLQot
c3RhdGljIFdlYktpdFRlc3RCdXMqIGJ1czsKLQotc3RhdGljIHZvaWQgdGVzdFdlYkV4dGVuc2lv
bkdldFRpdGxlKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3Qt
PmxvYWRIdG1sKCI8aHRtbD48aGVhZD48dGl0bGU+V2ViS2l0R1RLKyBXZWIgRXh0ZW5zaW9ucyBU
ZXN0PC90aXRsZT48L2hlYWQ+PGJvZHk+PC9ib2R5PjwvaHRtbD4iLCAwKTsKLSAgICB0ZXN0LT53
YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIEdSZWZQdHI8R0RCdXNQcm94eT4gcHJveHkg
PSBhZG9wdEdSZWYoYnVzLT5jcmVhdGVQcm94eSgib3JnLndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9u
VGVzdCIsCi0gICAgICAgICIvb3JnL3dlYmtpdC9ndGsvV2ViRXh0ZW5zaW9uVGVzdCIgLCAib3Jn
LndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9uVGVzdCIsIHRlc3QtPm1fbWFpbkxvb3ApKTsKLSAgICBH
UmVmUHRyPEdWYXJpYW50PiByZXN1bHQgPSBhZG9wdEdSZWYoZ19kYnVzX3Byb3h5X2NhbGxfc3lu
YygKLSAgICAgICAgcHJveHkuZ2V0KCksCi0gICAgICAgICJHZXRUaXRsZSIsCi0gICAgICAgIGdf
dmFyaWFudF9uZXcoIih0KSIsIHdlYmtpdF93ZWJfdmlld19nZXRfcGFnZV9pZCh0ZXN0LT5tX3dl
YlZpZXcpKSwKLSAgICAgICAgR19EQlVTX0NBTExfRkxBR1NfTk9ORSwKLSAgICAgICAgLTEsIDAs
IDApKTsKLSAgICBnX2Fzc2VydChyZXN1bHQpOwotCi0gICAgY29uc3QgY2hhciogdGl0bGU7Ci0g
ICAgZ192YXJpYW50X2dldChyZXN1bHQuZ2V0KCksICIoJnMpIiwgJnRpdGxlKTsKLSAgICBnX2Fz
c2VydF9jbXBzdHIodGl0bGUsID09LCAiV2ViS2l0R1RLKyBXZWIgRXh0ZW5zaW9ucyBUZXN0Iik7
Ci19Ci0KLXN0YXRpYyB2b2lkIGRvY3VtZW50TG9hZGVkQ2FsbGJhY2soR0RCdXNDb25uZWN0aW9u
KiwgY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIEdW
YXJpYW50KiwgV2ViVmlld1Rlc3QqIHRlc3QpCi17Ci0gICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0
LT5tX21haW5Mb29wKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdERvY3VtZW50TG9hZGVkU2lnbmFs
KFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIEdSZWZQdHI8R0RCdXNQ
cm94eT4gcHJveHkgPSBhZG9wdEdSZWYoYnVzLT5jcmVhdGVQcm94eSgib3JnLndlYmtpdC5ndGsu
V2ViRXh0ZW5zaW9uVGVzdCIsCi0gICAgICAgICIvb3JnL3dlYmtpdC9ndGsvV2ViRXh0ZW5zaW9u
VGVzdCIsICJvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwgdGVzdC0+bV9tYWluTG9v
cCkpOwotICAgIEdEQnVzQ29ubmVjdGlvbiogY29ubmVjdGlvbiA9IGdfZGJ1c19wcm94eV9nZXRf
Y29ubmVjdGlvbihwcm94eS5nZXQoKSk7Ci0gICAgZ3VpbnQgaWQgPSBnX2RidXNfY29ubmVjdGlv
bl9zaWduYWxfc3Vic2NyaWJlKGNvbm5lY3Rpb24sCi0gICAgICAgIDAsCi0gICAgICAgICJvcmcu
d2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwKLSAgICAgICAgIkRvY3VtZW50TG9hZGVkIiwK
LSAgICAgICAgIi9vcmcvd2Via2l0L2d0ay9XZWJFeHRlbnNpb25UZXN0IiwKLSAgICAgICAgMCwK
LSAgICAgICAgR19EQlVTX1NJR05BTF9GTEFHU19OT05FLAotICAgICAgICByZWludGVycHJldF9j
YXN0PEdEQnVzU2lnbmFsQ2FsbGJhY2s+KGRvY3VtZW50TG9hZGVkQ2FsbGJhY2spLAotICAgICAg
ICB0ZXN0LAotICAgICAgICAwKTsKLSAgICBnX2Fzc2VydChpZCk7Ci0KLSAgICB0ZXN0LT5sb2Fk
SHRtbCgiPGh0bWw+PGhlYWQ+PHRpdGxlPldlYktpdEdUSysgV2ViIEV4dGVuc2lvbnMgVGVzdDwv
dGl0bGU+PC9oZWFkPjxib2R5PjwvYm9keT48L2h0bWw+IiwgMCk7Ci0gICAgZ19tYWluX2xvb3Bf
cnVuKHRlc3QtPm1fbWFpbkxvb3ApOwotICAgIGdfZGJ1c19jb25uZWN0aW9uX3NpZ25hbF91bnN1
YnNjcmliZShjb25uZWN0aW9uLCBpZCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiB3ZWJQcm9jZXNz
Q3Jhc2hlZENhbGxiYWNrKFdlYktpdFdlYlZpZXcqLCBXZWJWaWV3VGVzdCogdGVzdCkKLXsKLSAg
ICB0ZXN0LT5xdWl0TWFpbkxvb3AoKTsKLQotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGlj
IHZvaWQgdGVzdFdlYktpdFdlYlZpZXdQcm9jZXNzQ3Jhc2hlZChXZWJWaWV3VGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PC9odG1sPiIsIDAp
OwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgZ19zaWduYWxfY29u
bmVjdCh0ZXN0LT5tX3dlYlZpZXcsICJ3ZWItcHJvY2Vzcy1jcmFzaGVkIiwKLSAgICAgICAgR19D
QUxMQkFDSyh3ZWJQcm9jZXNzQ3Jhc2hlZENhbGxiYWNrKSwgdGVzdCk7Ci0KLSAgICBHUmVmUHRy
PEdEQnVzUHJveHk+IHByb3h5ID0gYWRvcHRHUmVmKGJ1cy0+Y3JlYXRlUHJveHkoIm9yZy53ZWJr
aXQuZ3RrLldlYkV4dGVuc2lvblRlc3QiLAotICAgICAgICAiL29yZy93ZWJraXQvZ3RrL1dlYkV4
dGVuc2lvblRlc3QiLCAib3JnLndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9uVGVzdCIsIHRlc3QtPm1f
bWFpbkxvb3ApKTsKLQotICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHJlc3VsdCA9IGFkb3B0R1JlZihn
X2RidXNfcHJveHlfY2FsbF9zeW5jKAotICAgICAgICBwcm94eS5nZXQoKSwKLSAgICAgICAgIkFi
b3J0UHJvY2VzcyIsCi0gICAgICAgIDAsCi0gICAgICAgIEdfREJVU19DQUxMX0ZMQUdTX05PTkUs
Ci0gICAgICAgIC0xLCAwLCAwKSk7Ci0gICAgZ19hc3NlcnQoIXJlc3VsdCk7Ci0gICAgZ19tYWlu
X2xvb3BfcnVuKHRlc3QtPm1fbWFpbkxvb3ApOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViRXh0
ZW5zaW9uV2luZG93T2JqZWN0Q2xlYXJlZChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRl
cikKLXsKLSAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGhlYWRlcj48L2hlYWRlcj48Ym9keT48
L2JvZHk+PC9odG1sPiIsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwot
Ci0gICAgR093blB0cjxHRXJyb3I+IGVycm9yOwotICAgIFdlYktpdEphdmFzY3JpcHRSZXN1bHQq
IGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNo
ZWQoIndpbmRvdy5lY2hvKCdGb28nKTsiLCAmZXJyb3Iub3V0UHRyKCkpOwotICAgIGdfYXNzZXJ0
KGphdmFzY3JpcHRSZXN1bHQpOwotICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7Ci0gICAgR093
blB0cjxjaGFyPiB2YWx1ZVN0cmluZyhXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQ1N0
cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5n
LmdldCgpLCA9PSwgIkZvbyIpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gc2NyaXB0RGlhbG9nQ2Fs
bGJhY2soV2ViS2l0V2ViVmlldyosIFdlYktpdFNjcmlwdERpYWxvZyogZGlhbG9nLCBjaGFyKiog
cmVzdWx0KQotewotICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X3NjcmlwdF9kaWFsb2dfZ2V0
X2RpYWxvZ190eXBlKGRpYWxvZyksID09LCBXRUJLSVRfU0NSSVBUX0RJQUxPR19BTEVSVCk7Ci0g
ICAgZ19hc3NlcnQoISpyZXN1bHQpOwotICAgICpyZXN1bHQgPSBnX3N0cmR1cCh3ZWJraXRfc2Ny
aXB0X2RpYWxvZ19nZXRfbWVzc2FnZShkaWFsb2cpKTsKLSAgICByZXR1cm4gVFJVRTsKLX0KLQot
c3RhdGljIHZvaWQgcnVuSmF2YVNjcmlwdEluSXNvbGF0ZWRXb3JsZEZpbmlzaGVkQ2FsbGJhY2so
R0RCdXNQcm94eSogcHJveHksIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBXZWJWaWV3VGVzdCogdGVz
dCkKLXsKLSAgICBnX2RidXNfcHJveHlfY2FsbF9maW5pc2gocHJveHksIHJlc3VsdCwgMCk7Ci0g
ICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKLX0KLQotc3RhdGljIHZvaWQg
dGVzdFdlYkV4dGVuc2lvbklzb2xhdGVkV29ybGQoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBv
aW50ZXIpCi17Ci0gICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxoZWFkZXI+PC9oZWFkZXI+PGJv
ZHk+PGRpdiBpZD0nY29uc29sZSc+PC9kaXY+PC9ib2R5PjwvaHRtbD4iLCAwKTsKLSAgICB0ZXN0
LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIEdPd25QdHI8Y2hhcj4gcmVzdWx0Owot
ICAgIGd1bG9uZyBzY3JpcHREaWFsb2dJRCA9IGdfc2lnbmFsX2Nvbm5lY3QodGVzdC0+bV93ZWJW
aWV3LCAic2NyaXB0LWRpYWxvZyIsIEdfQ0FMTEJBQ0soc2NyaXB0RGlhbG9nQ2FsbGJhY2spLCAm
cmVzdWx0Lm91dFB0cigpKTsKLQotICAgIHN0YXRpYyBjb25zdCBjaGFyICptYWluV29ybGRTY3Jp
cHQgPQotICAgICAgICAidG9wLmZvbyA9ICdGb28nO1xuIgotICAgICAgICAiZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5pbm5lckhUTUwgPSB0b3AuZm9vO1xuIgotICAgICAgICAi
d2luZG93Lm9wZW4gPSBmdW5jdGlvbiAoKSB7IGFsZXJ0KCdNYWluIFdvcmxkJyk7IH1cbiIKLSAg
ICAgICAgImRvY3VtZW50Lm9wZW4oMSwgMiwgMyk7IjsKLSAgICB0ZXN0LT5ydW5KYXZhU2NyaXB0
QW5kV2FpdFVudGlsRmluaXNoZWQobWFpbldvcmxkU2NyaXB0LCAwKTsKLSAgICBnX2Fzc2VydF9j
bXBzdHIocmVzdWx0LmdldCgpLCA9PSwgIk1haW4gV29ybGQiKTsKLSAgICByZXN1bHQuY2xlYXIo
KTsKLQotICAgIFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0
LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdjb25zb2xlJykuaW5uZXJIVE1MIiwgMCk7Ci0gICAgZ19hc3NlcnQoamF2YXNjcmlwdFJl
c3VsdCk7Ci0gICAgR093blB0cjxjaGFyPiB2YWx1ZVN0cmluZyhXZWJWaWV3VGVzdDo6amF2YXNj
cmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnRfY21w
c3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgIkZvbyIpOwotCi0gICAgc3RhdGljIGNvbnN0IGNo
YXIgKmlzb2xhdGVkV29ybGRTY3JpcHQgPQotICAgICAgICAiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ2NvbnNvbGUnKS5pbm5lckhUTUwgPSB0b3AuZm9vO1xuIgotICAgICAgICAid2luZG93Lm9w
ZW4gPSBmdW5jdGlvbiAoKSB7IGFsZXJ0KCdJc29sYXRlZCBXb3JsZCcpOyB9XG4iCi0gICAgICAg
ICJkb2N1bWVudC5vcGVuKDEsIDIsIDMpOyI7Ci0gICAgR1JlZlB0cjxHREJ1c1Byb3h5PiBwcm94
eSA9IGFkb3B0R1JlZihidXMtPmNyZWF0ZVByb3h5KCJvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNp
b25UZXN0IiwKLSAgICAgICAgIi9vcmcvd2Via2l0L2d0ay9XZWJFeHRlbnNpb25UZXN0IiAsICJv
cmcud2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwgdGVzdC0+bV9tYWluTG9vcCkpOwotICAg
IGdfZGJ1c19wcm94eV9jYWxsKHByb3h5LmdldCgpLAotICAgICAgICAiUnVuSmF2YVNjcmlwdElu
SXNvbGF0ZWRXb3JsZCIsCi0gICAgICAgIGdfdmFyaWFudF9uZXcoIih0JnMpIiwgd2Via2l0X3dl
Yl92aWV3X2dldF9wYWdlX2lkKHRlc3QtPm1fd2ViVmlldyksIGlzb2xhdGVkV29ybGRTY3JpcHQp
LAotICAgICAgICBHX0RCVVNfQ0FMTF9GTEFHU19OT05FLAotICAgICAgICAtMSwgMCwKLSAgICAg
ICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihydW5KYXZhU2NyaXB0SW5J
c29sYXRlZFdvcmxkRmluaXNoZWRDYWxsYmFjayksCi0gICAgICAgIHRlc3QpOwotICAgIGdfbWFp
bl9sb29wX3J1bih0ZXN0LT5tX21haW5Mb29wKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIocmVzdWx0
LmdldCgpLCA9PSwgIklzb2xhdGVkIFdvcmxkIik7Ci0gICAgcmVzdWx0LmNsZWFyKCk7Ci0KLSAg
ICAvLyBDaGVjayB0aGF0ICd0b3AuZm9vJyBkZWZpbmVkIGluIG1haW4gd29ybGQgaXMgbm90IHZp
c2libGUgaW4gaXNvbGF0ZWQgd29ybGQuCi0gICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1
bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J2NvbnNvbGUnKS5pbm5lckhUTUwiLCAwKTsKLSAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0
KTsKLSAgICB2YWx1ZVN0cmluZy5zZXQoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0NT
dHJpbmcoamF2YXNjcmlwdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih2YWx1ZVN0cmlu
Zy5nZXQoKSwgPT0sICJ1bmRlZmluZWQiKTsKLQotICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29u
bmVjdCh0ZXN0LT5tX3dlYlZpZXcsIHNjcmlwdERpYWxvZ0lEKTsKLX0KLQotdm9pZCBiZWZvcmVB
bGwoKQotewotICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfd2ViX2V4dGVuc2lvbnNfZGlyZWN0
b3J5KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpLCBXRUJLSVRfVEVTVF9XRUJfRVhU
RU5TSU9OU19ESVIpOwotICAgIGJ1cyA9IG5ldyBXZWJLaXRUZXN0QnVzKCk7Ci0gICAgaWYgKCFi
dXMtPnJ1bigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJL
aXRXZWJFeHRlbnNpb24iLCAiZG9tLWRvY3VtZW50LXRpdGxlIiwgdGVzdFdlYkV4dGVuc2lvbkdl
dFRpdGxlKTsKLSAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJFeHRlbnNpb24iLCAiZG9j
dW1lbnQtbG9hZGVkLXNpZ25hbCIsIHRlc3REb2N1bWVudExvYWRlZFNpZ25hbCk7Ci0gICAgV2Vi
Vmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJ3ZWItcHJvY2Vzcy1jcmFzaGVkIiwgdGVz
dFdlYktpdFdlYlZpZXdQcm9jZXNzQ3Jhc2hlZCk7Ci0gICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2Vi
S2l0V2ViRXh0ZW5zaW9uIiwgIndpbmRvdy1vYmplY3QtY2xlYXJlZCIsIHRlc3RXZWJFeHRlbnNp
b25XaW5kb3dPYmplY3RDbGVhcmVkKTsKLSAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJF
eHRlbnNpb24iLCAiaXNvbGF0ZWQtd29ybGQiLCB0ZXN0V2ViRXh0ZW5zaW9uSXNvbGF0ZWRXb3Js
ZCk7Ci19Ci0KLXZvaWQgYWZ0ZXJBbGwoKQotewotICAgIGRlbGV0ZSBidXM7Ci19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0QWNj
ZXNzaWJpbGl0eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9U
ZXN0V2ViS2l0QWNjZXNzaWJpbGl0eS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGUxYmQzODMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvVGVzdFdlYktpdEFjY2Vzc2liaWxpdHkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjI1
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLQotI2luY2x1ZGUgIlRlc3RNYWluLmgiCi0jaW5jbHVkZSAiV2ViVmlld1Rl
c3QuaCIKLQotLy8gVGhlIGxpYmF0c3BpIGhlYWRlcnMgZG9uJ3QgdXNlIEdfQkVHSU5fREVDTFMK
LWV4dGVybiAiQyIgewotI2luY2x1ZGUgPGF0c3BpL2F0c3BpLmg+Ci19Ci0KLSNpbmNsdWRlIDxl
cnJuby5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUg
PHNpZ25hbC5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9nb2Jq
ZWN0L0dSZWZQdHIuaD4KLQotLy8gTmFtZSBvZiB0aGUgdGVzdCBzZXJ2ZXIgYXBwbGljYXRpb24g
Y3JlYXRpbmcgdGhlIHdlYlZpZXcgb2JqZWN0Lgotc3RhdGljIGNvbnN0IGNoYXIqIGtUZXN0U2Vy
dmVyQXBwTmFtZSA9ICJBY2Nlc3NpYmlsaXR5VGVzdFNlcnZlciI7Ci0KLS8vIE1heCBzZWNvbmRz
IHRvIHdhaXQgZm9yIHRoZSB0ZXN0IHNlcnZlciBiZWZvcmUgaW5zcGVjdGluZyBpdC4KLXN0YXRp
YyBjb25zdCBpbnQga01heFdhaXRGb3JDaGlsZCA9IDU7Ci0KLS8vIFRoZSBQSUQgZm9yIHRoZSB0
ZXN0IHNlcnZlciBydW5uaW5nLCBzbyB3ZSBjYW4ga2lsbCBpdCBpZiBuZWVkZWQuCi1zdGF0aWMg
R1BpZCBrQ2hpbGRQcm9jZXNzUGlkID0gMDsKLQotLy8gV2hldGhlciB0aGUgY2hpbGQgaGFzIHJl
cGxpZWQgYW5kIGl0J3MgcmVhZHkuCi1zdGF0aWMgYm9vbCBrQ2hpbGRJc1JlYWR5ID0gZmFsc2U7
Ci0KLXN0YXRpYyB2b2lkIHN0b3BUZXN0U2VydmVyKCkKLXsKLSAgICAvLyBEbyBub3RoaW5nIGlm
IHRoZXJlJ3Mgbm8gc2VydmVyIHJ1bm5pbmcuCi0gICAgaWYgKCFrQ2hpbGRQcm9jZXNzUGlkKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBnX3NwYXduX2Nsb3NlX3BpZChrQ2hpbGRQcm9jZXNzUGlk
KTsKLSAgICBraWxsKGtDaGlsZFByb2Nlc3NQaWQsIFNJR1RFUk0pOwotICAgIGtDaGlsZFByb2Nl
c3NQaWQgPSAwOwotfQotCi1zdGF0aWMgdm9pZCBzaWdBYm9ydEhhbmRsZXIoaW50IHNpZ051bSkK
LXsKLSAgICAvLyBKdXN0IHN0b3AgdGhlIHRlc3Qgc2VydmVyIGlmIFNJR0FCUlQgd2FzIHJlY2Vp
dmVkLgotICAgIHN0b3BUZXN0U2VydmVyKCk7Ci19Ci0KLXN0YXRpYyBncG9pbnRlciB0ZXN0U2Vy
dmVyTW9uaXRvclRocmVhZEZ1bmMoZ3BvaW50ZXIpCi17Ci0gICAgLy8gV2FpdCBmb3IgdGhlIHNw
ZWNpZmllZCB0aW1lb3V0IHRvIGhhcHBlbi4KLSAgICBnX3VzbGVlcChrTWF4V2FpdEZvckNoaWxk
ICogR19VU0VDX1BFUl9TRUMpOwotCi0gICAgLy8gS2lsbCB0aGUgY2hpbGQgcHJvY2VzcyBpZiBu
b3QgcmVhZHkgeWV0LgotICAgIGlmICgha0NoaWxkSXNSZWFkeSkKLSAgICAgICAgc3RvcFRlc3RT
ZXJ2ZXIoKTsKLQotICAgIGdfdGhyZWFkX2V4aXQoMCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0
YXRpYyB2b2lkIHN0YXJ0VGVzdFNlcnZlck1vbml0b3IoKQotewotICAgIGtDaGlsZElzUmVhZHkg
PSBmYWxzZTsKLSAgICBnX3RocmVhZF9uZXcoIlRlc3RTZXJ2ZXJNb25pdG9yIiwgdGVzdFNlcnZl
ck1vbml0b3JUaHJlYWRGdW5jLCAwKTsKLX0KLQotc3RhdGljIHZvaWQgc3RhcnRUZXN0U2VydmVy
KCkKLXsKLSAgICAvLyBQcmVwYXJlIGFyZ3ZbXSBmb3Igc3Bhd25pbmcgdGhlIHNlcnZlciBwcm9j
ZXNzLgotICAgIEdPd25QdHI8Y2hhcj4gdGVzdFNlcnZlclBhdGgoZ19idWlsZF9maWxlbmFtZShX
RUJLSVRfRVhFQ19QQVRILCAiV2ViS2l0MkdPYmplY3RBUElUZXN0cyIsIGtUZXN0U2VydmVyQXBw
TmFtZSwgTlVMTCkpOwotCi0gICAgY2hhciogdGVzdFNlcnZlckFyZ3ZbMl07Ci0gICAgdGVzdFNl
cnZlckFyZ3ZbMF0gPSB0ZXN0U2VydmVyUGF0aC5nZXQoKTsKLSAgICB0ZXN0U2VydmVyQXJndlsx
XSA9IDA7Ci0KLSAgICAvLyBTcGF3biB0aGUgc2VydmVyLCBnZXR0aW5nIGl0cyBzdGRvdXQgZmls
ZSBkZXNjcmlwdG9yIHRvIHNldCBhCi0gICAgLy8gY29tbXVuaWNhdGlvbiBjaGFubmVsLCBzbyB3
ZSBrbm93IHdoZW4gaXQncyByZWFkeS4KLSAgICBpbnQgY2hpbGRTdGRvdXQgPSAwOwotICAgIGlm
ICghZ19zcGF3bl9hc3luY193aXRoX3BpcGVzKDAsIHRlc3RTZXJ2ZXJBcmd2LCAwLCBzdGF0aWNf
Y2FzdDxHU3Bhd25GbGFncz4oMCksIDAsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJmtDaGlsZFByb2Nlc3NQaWQsIDAsICZjaGlsZFN0ZG91dCwgMCwgMCkpIHsKLSAgICAg
ICAgY2xvc2UoY2hpbGRTdGRvdXQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8g
U3RhcnQgbW9uaXRvcmluZyB0aGUgdGVzdCBzZXJ2ZXIgKGluIGEgc2VwYXJhdGUgdGhyZWFkKSB0
bwotICAgIC8vIGVuc3VyZSB3ZSBkb24ndCBibG9jayBvbiB0aGUgY2hpbGQgcHJvY2VzcyBtb3Jl
IHRoYW4gYSB0aW1lb3V0LgotICAgIHN0YXJ0VGVzdFNlcnZlck1vbml0b3IoKTsKLQotICAgIGNo
YXIgbXNnWzJdOwotICAgIEdJT0NoYW5uZWwqIGlvQ2hhbm5lbCA9IGdfaW9fY2hhbm5lbF91bml4
X25ldyhjaGlsZFN0ZG91dCk7Ci0gICAgaWYgKGdfaW9fY2hhbm5lbF9yZWFkX2NoYXJzKGlvQ2hh
bm5lbCwgbXNnLCAyLCAwLCAwKSA9PSBHX0lPX1NUQVRVU19OT1JNQUwpIHsKLSAgICAgICAgLy8g
Q2hlY2sgd2hldGhlciB0aGUgc2VydmVyIHNlbnQgYSBtZXNzYWdlIHNheWluZyBpdCdzIHJlYWR5
Ci0gICAgICAgIC8vIGFuZCBzdG9yZSB0aGUgcmVzdWx0IGdsb2JhbGx5LCBzbyB0aGUgbW9uaXRv
ciBjYW4gc2VlIGl0LgotICAgICAgICBrQ2hpbGRJc1JlYWR5ID0gbXNnWzBdID09ICdPJyAmJiBt
c2dbMV0gPT0gJ0snOwotICAgIH0KLSAgICBnX2lvX2NoYW5uZWxfdW5yZWYoaW9DaGFubmVsKTsK
LSAgICBjbG9zZShjaGlsZFN0ZG91dCk7Ci0KLSAgICAvLyBUaGUgdGltZW91dCB3YXMgcmVhY2hl
ZCBhbmQgdGhlIHNlcnZlciBpcyBub3QgcmVhZHkgeWV0LCBzbwotICAgIC8vIHN0b3AgaXQgaW5t
ZWRpYXRlbHksIGFuZCBsZXQgdGhlIHVuaXQgdGVzdHMgZmFpbC4KLSAgICBpZiAoIWtDaGlsZElz
UmVhZHkpCi0gICAgICAgIHN0b3BUZXN0U2VydmVyKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNoZWNr
QXRzcGlBY2Nlc3NpYmxlKEF0c3BpQWNjZXNzaWJsZSogYWNjZXNzaWJsZSwgY29uc3QgY2hhciog
dGFyZ2V0TmFtZSwgQXRzcGlSb2xlIHRhcmdldFJvbGUpCi17Ci0gICAgZ19hc3NlcnQoQVRTUElf
SVNfQUNDRVNTSUJMRShhY2Nlc3NpYmxlKSk7Ci0KLSAgICBHT3duUHRyPGNoYXI+IG5hbWUoYXRz
cGlfYWNjZXNzaWJsZV9nZXRfbmFtZShhY2Nlc3NpYmxlLCAwKSk7Ci0gICAgZ19hc3NlcnRfY21w
c3RyKHRhcmdldE5hbWUsID09LCBuYW1lLmdldCgpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGFy
Z2V0Um9sZSwgPT0sIGF0c3BpX2FjY2Vzc2libGVfZ2V0X3JvbGUoYWNjZXNzaWJsZSwgMCkpOwot
fQotCi1zdGF0aWMgR1JlZlB0cjxBdHNwaUFjY2Vzc2libGU+IGZpbmRUZXN0U2VydmVyQXBwbGlj
YXRpb24oKQotewotICAgIC8vIE9ubHkgb25lIGRlc2t0b3AgaXMgc3VwcG9ydGVkIGJ5IEFUU1BJ
IGF0IHRoZSBtb21lbnQuCi0gICAgR1JlZlB0cjxBdHNwaUFjY2Vzc2libGU+IGRlc2t0b3AgPSBh
ZG9wdEdSZWYoYXRzcGlfZ2V0X2Rlc2t0b3AoMCkpOwotCi0gICAgLy8gTG9vayBmb3IgdGhlIHNl
cnZlciBhcHBsaWNhdGlvbiBpbiB0aGUgbGlzdCBvZiBhcHBzLgotICAgIEdSZWZQdHI8QXRzcGlB
Y2Nlc3NpYmxlPiBjdXJyZW50OwotICAgIGludCBjaGlsZENvdW50ID0gYXRzcGlfYWNjZXNzaWJs
ZV9nZXRfY2hpbGRfY291bnQoZGVza3RvcC5nZXQoKSwgMCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjaGlsZENvdW50OyBpKyspIHsKLSAgICAgICAgY3VycmVudCA9IGFkb3B0R1JlZihhdHNw
aV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChkZXNrdG9wLmdldCgpLCBpLCAwKSk7Ci0g
ICAgICAgIGlmICghZ19zdHJjbXAwKGF0c3BpX2FjY2Vzc2libGVfZ2V0X25hbWUoY3VycmVudC5n
ZXQoKSwgMCksIGtUZXN0U2VydmVyQXBwTmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gY3VycmVu
dDsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgdGVzdEF0c3BpQmFz
aWNIaWVyYXJjaHkoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgLy8g
VGhlIHRlc3Qgc2VydmVyJ3MgYWNjZXNzaWJpbGl0eSBvYmplY3QgKFVJIFByb2Nlc3MpLgotICAg
IEdSZWZQdHI8QXRzcGlBY2Nlc3NpYmxlPiB0ZXN0U2VydmVyQXBwID0gZmluZFRlc3RTZXJ2ZXJB
cHBsaWNhdGlvbigpOwotICAgIGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUodGVzdFNlcnZl
ckFwcC5nZXQoKSkpOwotICAgIGNoZWNrQXRzcGlBY2Nlc3NpYmxlKHRlc3RTZXJ2ZXJBcHAuZ2V0
KCksICJBY2Nlc3NpYmlsaXR5VGVzdFNlcnZlciIsIEFUU1BJX1JPTEVfQVBQTElDQVRJT04pOwot
Ci0gICAgLy8gVGhlIG1haW4gd2luZG93J3MgYWNjZXNzaWJpbGl0eSBvYmplY3QgKFVJIFByb2Nl
c3MpLgotICAgIEdSZWZQdHI8QXRzcGlBY2Nlc3NpYmxlPiBjdXJyZW50UGFyZW50ID0gdGVzdFNl
cnZlckFwcDsKLSAgICBHUmVmUHRyPEF0c3BpQWNjZXNzaWJsZT4gY3VycmVudENoaWxkID0gYWRv
cHRHUmVmKGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQYXJlbnQu
Z2V0KCksIDAsIDApKTsKLSAgICBnX2Fzc2VydChBVFNQSV9JU19BQ0NFU1NJQkxFKGN1cnJlbnRD
aGlsZC5nZXQoKSkpOwotICAgIGNoZWNrQXRzcGlBY2Nlc3NpYmxlKGN1cnJlbnRDaGlsZC5nZXQo
KSwgIiIsIEFUU1BJX1JPTEVfRlJBTUUpOwotCi0gICAgLy8gVGhlIFdlYlZpZXcncyBhY2Nlc3Np
YmlsaXR5IG9iamVjdCAoVUkgUHJvY2VzcykuCi0gICAgY3VycmVudFBhcmVudCA9IGN1cnJlbnRD
aGlsZDsKLSAgICBjdXJyZW50Q2hpbGQgPSBhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9p
bmRleChjdXJyZW50UGFyZW50LmdldCgpLCAwLCAwKTsKLSAgICBnX2Fzc2VydChBVFNQSV9JU19B
Q0NFU1NJQkxFKGN1cnJlbnRDaGlsZC5nZXQoKSkpOwotICAgIGNoZWNrQXRzcGlBY2Nlc3NpYmxl
KGN1cnJlbnRDaGlsZC5nZXQoKSwgIiIsIEFUU1BJX1JPTEVfRklMTEVSKTsKLQotICAgIC8vIFRo
ZSBXZWJQYWdlJ3MgYWNjZXNzaWJpbGl0eSBvYmplY3QgKFdlYiBQcm9jZXNzKS4KLSAgICBjdXJy
ZW50UGFyZW50ID0gY3VycmVudENoaWxkOwotICAgIGN1cnJlbnRDaGlsZCA9IGF0c3BpX2FjY2Vz
c2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQYXJlbnQuZ2V0KCksIDAsIDApOwotICAg
IGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY3VycmVudENoaWxkLmdldCgpKSk7Ci0gICAg
Y2hlY2tBdHNwaUFjY2Vzc2libGUoY3VycmVudENoaWxkLmdldCgpLCAiIiwgQVRTUElfUk9MRV9G
SUxMRVIpOwotCi0gICAgLy8gSFRNTCByb290IGVsZW1lbnQncyBhY2Nlc3NpYmxlIGVsZW1lbnQg
KFdlYiBQcm9jZXNzKS4KLSAgICBjdXJyZW50UGFyZW50ID0gY3VycmVudENoaWxkOwotICAgIGN1
cnJlbnRDaGlsZCA9IGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQ
YXJlbnQuZ2V0KCksIDAsIDApOwotICAgIGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY3Vy
cmVudENoaWxkLmdldCgpKSk7Ci0KLSAgICAvLyBIVE1MIGJvZHkncyBhY2Nlc3NpYmxlIGVsZW1l
bnQgKFdlYiBQcm9jZXNzKS4KLSAgICBjdXJyZW50UGFyZW50ID0gY3VycmVudENoaWxkOwotICAg
IGN1cnJlbnRDaGlsZCA9IGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGN1cnJl
bnRQYXJlbnQuZ2V0KCksIDAsIDApOwotICAgIGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUo
Y3VycmVudENoaWxkLmdldCgpKSk7Ci0gICAgY2hlY2tBdHNwaUFjY2Vzc2libGUoY3VycmVudENo
aWxkLmdldCgpLCAiIiwgQVRTUElfUk9MRV9ET0NVTUVOVF9XRUIpOwotCi0gICAgLy8gSFRNTCBI
MSdzIGFjY2Vzc2libGUgZWxlbWVudCAoV2ViIFByb2Nlc3MpLgotICAgIGN1cnJlbnRQYXJlbnQg
PSBjdXJyZW50Q2hpbGQ7Ci0gICAgY3VycmVudENoaWxkID0gYXRzcGlfYWNjZXNzaWJsZV9nZXRf
Y2hpbGRfYXRfaW5kZXgoY3VycmVudFBhcmVudC5nZXQoKSwgMCwgMCk7Ci0gICAgZ19hc3NlcnQo
QVRTUElfSVNfQUNDRVNTSUJMRShjdXJyZW50Q2hpbGQuZ2V0KCkpKTsKLSAgICBjaGVja0F0c3Bp
QWNjZXNzaWJsZShjdXJyZW50Q2hpbGQuZ2V0KCksICJUaGlzIGlzIGEgdGVzdCIsIEFUU1BJX1JP
TEVfSEVBRElORyk7Ci0KLSAgICAvLyBIVE1MIGZpcnN0IHBhcmFncmFwaCdzIGFjY2Vzc2libGUg
ZWxlbWVudCAoV2ViIFByb2Nlc3MpLgotICAgIGN1cnJlbnRDaGlsZCA9IGF0c3BpX2FjY2Vzc2li
bGVfZ2V0X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQYXJlbnQuZ2V0KCksIDEsIDApOwotICAgIGdf
YXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY3VycmVudENoaWxkLmdldCgpKSk7Ci0gICAgY2hl
Y2tBdHNwaUFjY2Vzc2libGUoY3VycmVudENoaWxkLmdldCgpLCAiIiwgQVRTUElfUk9MRV9QQVJB
R1JBUEgpOwotCi0gICAgLy8gSFRNTCBzZWNvbmQgcGFyYWdyYXBoJ3MgYWNjZXNzaWJsZSBlbGVt
ZW50IChXZWIgUHJvY2VzcykuCi0gICAgY3VycmVudENoaWxkID0gYXRzcGlfYWNjZXNzaWJsZV9n
ZXRfY2hpbGRfYXRfaW5kZXgoY3VycmVudFBhcmVudC5nZXQoKSwgMiwgMCk7Ci0gICAgZ19hc3Nl
cnQoQVRTUElfSVNfQUNDRVNTSUJMRShjdXJyZW50Q2hpbGQuZ2V0KCkpKTsKLSAgICBjaGVja0F0
c3BpQWNjZXNzaWJsZShjdXJyZW50Q2hpbGQuZ2V0KCksICIiLCBBVFNQSV9ST0xFX1BBUkFHUkFQ
SCk7Ci0KLSAgICAvLyBIVE1MIGxpbmsncyBhY2Nlc3NpYmxlIGVsZW1lbnQgKFdlYiBQcm9jZXNz
KS4KLSAgICBjdXJyZW50UGFyZW50ID0gY3VycmVudENoaWxkOwotICAgIGN1cnJlbnRDaGlsZCA9
IGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQYXJlbnQuZ2V0KCks
IDAsIDApOwotICAgIGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY3VycmVudENoaWxkLmdl
dCgpKSk7Ci0gICAgY2hlY2tBdHNwaUFjY2Vzc2libGUoY3VycmVudENoaWxkLmdldCgpLCAiYSBs
aW5rIiwgQVRTUElfUk9MRV9MSU5LKTsKLX0KLQotdm9pZCBiZWZvcmVBbGwoKQotewotICAgIC8v
IFdlIGluc3RhbGwgYSBoYW5kbGVyIHRvIGVuc3VyZSB0aGF0IHdlIGtpbGwgdGhlIGNoaWxkIHBy
b2Nlc3MKLSAgICAvLyBpZiB0aGUgcGFyZW50IGRpZXMgYmVjYXVzZSBvZiB3aGF0ZXZlciB0aGUg
cmVhc29uIGlzLgotICAgIHNpZ25hbChTSUdBQlJULCBzaWdBYm9ydEhhbmRsZXIpOwotCi0gICAg
Ly8gU3RhcnQgdGhlIGFjY2Vzc2liaWxpdHkgdGVzdCBzZXJ2ZXIgYW5kIGxvYWQgdGhlIHRlc3Rz
LgotICAgIHN0YXJ0VGVzdFNlcnZlcigpOwotICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdEFj
Y2Vzc2liaWxpdHkiLCAiYXRzcGktYmFzaWMtaGllcmFyY2h5IiwgdGVzdEF0c3BpQmFzaWNIaWVy
YXJjaHkpOwotfQotCi12b2lkIGFmdGVyQWxsKCkKLXsKLSAgICAvLyBFbnN1cmUgd2Ugc3RvcCB0
aGUgc2VydmVyLgotICAgIHN0b3BUZXN0U2VydmVyKCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNl
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRG
YXZpY29uRGF0YWJhc2UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTA2Zjc0
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rl
c3RXZWJLaXRGYXZpY29uRGF0YWJhc2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjc0ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLQotI2luY2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKLSNpbmNsdWRlICJXZWJWaWV3
VGVzdC5oIgotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0jaW5jbHVkZSA8bGlic291cC9zb3Vw
Lmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgotCi1zdGF0aWMgV2ViS2l0VGVz
dFNlcnZlcioga1NlcnZlcjsKLXN0YXRpYyBjaGFyKiBrVGVtcERpcmVjdG9yeTsKLQotY2xhc3Mg
RmF2aWNvbkRhdGFiYXNlVGVzdDogcHVibGljIFdlYlZpZXdUZXN0IHsKLXB1YmxpYzoKLSAgICBN
QUtFX0dMSUJfVEVTVF9GSVhUVVJFKEZhdmljb25EYXRhYmFzZVRlc3QpOwotCi0gICAgRmF2aWNv
bkRhdGFiYXNlVGVzdCgpCi0gICAgICAgIDogbV93ZWJDb250ZXh0KHdlYmtpdF93ZWJfY29udGV4
dF9nZXRfZGVmYXVsdCgpKQotICAgICAgICAsIG1fZmF2aWNvbigwKQotICAgICAgICAsIG1fZXJy
b3IoMCkKLSAgICAgICAgLCBtX2Zhdmljb25Ob3RpZmljYXRpb25SZWNlaXZlZChmYWxzZSkKLSAg
ICB7Ci0gICAgICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfd2Vi
X2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2UobV93ZWJDb250ZXh0KTsKLSAgICAgICAgZ19z
aWduYWxfY29ubmVjdChkYXRhYmFzZSwgImZhdmljb24tY2hhbmdlZCIsIEdfQ0FMTEJBQ0soZmF2
aWNvbkNoYW5nZWRDYWxsYmFjayksIHRoaXMpOwotICAgIH0KLQotICAgIH5GYXZpY29uRGF0YWJh
c2VUZXN0KCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2Zhdmljb24pCi0gICAgICAgICAgICBjYWly
b19zdXJmYWNlX2Rlc3Ryb3kobV9mYXZpY29uKTsKLQotICAgICAgICBXZWJLaXRGYXZpY29uRGF0
YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNl
KG1fd2ViQ29udGV4dCk7Ci0gICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0
Y2hlZChkYXRhYmFzZSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7Ci0g
ICAgfQotCi0gICAgc3RhdGljIHZvaWQgZmF2aWNvbkNoYW5nZWRDYWxsYmFjayhXZWJLaXRGYXZp
Y29uRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBjaGFyKiBwYWdlVVJJLCBjb25zdCBjaGFyKiBm
YXZpY29uVVJJLCBGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgaWYg
KCFnX3N0cmNtcDAod2Via2l0X3dlYl92aWV3X2dldF91cmkodGVzdC0+bV93ZWJWaWV3KSwgcGFn
ZVVSSSkpCi0gICAgICAgICAgICB0ZXN0LT5tX2Zhdmljb25VUkkgPSBmYXZpY29uVVJJOwotICAg
IH0KLQotICAgIHN0YXRpYyB2b2lkIHZpZXdGYXZpY29uQ2hhbmdlZENhbGxiYWNrKFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcsIEdQYXJhbVNwZWMqIHBzcGVjLCBncG9pbnRlciBkYXRhKQotICAgIHsK
LSAgICAgICAgRmF2aWNvbkRhdGFiYXNlVGVzdCogdGVzdCA9IHN0YXRpY19jYXN0PEZhdmljb25E
YXRhYmFzZVRlc3QqPihkYXRhKTsKLSAgICAgICAgZ19hc3NlcnQodGVzdC0+bV93ZWJWaWV3ID09
IHdlYlZpZXcpOwotICAgICAgICB0ZXN0LT5tX2Zhdmljb25Ob3RpZmljYXRpb25SZWNlaXZlZCA9
IHRydWU7Ci0gICAgICAgIHRlc3QtPnF1aXRNYWluTG9vcCgpOwotICAgIH0KLQotICAgIHN0YXRp
YyB2b2lkIGdldEZhdmljb25DYWxsYmFjayhHT2JqZWN0KiBzb3VyY2VPYmplY3QsIEdBc3luY1Jl
c3VsdCogcmVzdWx0LCB2b2lkKiBkYXRhKQotICAgIHsKLSAgICAgICAgRmF2aWNvbkRhdGFiYXNl
VGVzdCogdGVzdCA9IHN0YXRpY19jYXN0PEZhdmljb25EYXRhYmFzZVRlc3QqPihkYXRhKTsKLSAg
ICAgICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF93ZWJfY29udGV4
dF9nZXRfZmF2aWNvbl9kYXRhYmFzZSh0ZXN0LT5tX3dlYkNvbnRleHQpOwotICAgICAgICB0ZXN0
LT5tX2Zhdmljb24gPSB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl9maW5pc2go
ZGF0YWJhc2UsIHJlc3VsdCwgJnRlc3QtPm1fZXJyb3Iub3V0UHRyKCkpOwotICAgICAgICB0ZXN0
LT5xdWl0TWFpbkxvb3AoKTsKLSAgICB9Ci0KLSAgICB2b2lkIHdhaXRVbnRpbEZhdmljb25DaGFu
Z2VkKCkKLSAgICB7Ci0gICAgICAgIG1fZmF2aWNvbk5vdGlmaWNhdGlvblJlY2VpdmVkID0gZmFs
c2U7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgaGFuZGxlcklEID0gZ19zaWduYWxfY29ubmVjdCht
X3dlYlZpZXcsICJub3RpZnk6OmZhdmljb24iLCBHX0NBTExCQUNLKHZpZXdGYXZpY29uQ2hhbmdl
ZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsK
LSAgICAgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KG1fd2ViVmlldywgaGFuZGxlcklE
KTsKLSAgICB9Ci0KLSAgICB2b2lkIGdldEZhdmljb25Gb3JQYWdlVVJJQW5kV2FpdFVudGlsUmVh
ZHkoY29uc3QgY2hhciogcGFnZVVSSSkKLSAgICB7Ci0gICAgICAgIG1fZXJyb3IuY2xlYXIoKTsK
LSAgICAgICAgaWYgKG1fZmF2aWNvbikgewotICAgICAgICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0
cm95KG1fZmF2aWNvbik7Ci0gICAgICAgICAgICBtX2Zhdmljb24gPSAwOwotICAgICAgICB9Ci0K
LSAgICAgICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF93ZWJfY29u
dGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFzZShtX3dlYkNvbnRleHQpOwotICAgICAgICB3ZWJraXRf
ZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbihkYXRhYmFzZSwgcGFnZVVSSSwgMCwgZ2V0RmF2
aWNvbkNhbGxiYWNrLCB0aGlzKTsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3Ap
OwotICAgIH0KLQotICAgIFdlYktpdFdlYkNvbnRleHQqIG1fd2ViQ29udGV4dDsKLSAgICBjYWly
b19zdXJmYWNlX3QqIG1fZmF2aWNvbjsKLSAgICBDU3RyaW5nIG1fZmF2aWNvblVSSTsKLSAgICBH
T3duUHRyPEdFcnJvcj4gbV9lcnJvcjsKLSAgICBib29sIG1fZmF2aWNvbk5vdGlmaWNhdGlvblJl
Y2VpdmVkOwotfTsKLQotc3RhdGljIHZvaWQKLXNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNl
cnZlciwgU291cE1lc3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUq
IHF1ZXJ5LCBTb3VwQ2xpZW50Q29udGV4dCogY29udGV4dCwgdm9pZCogZGF0YSkKLXsKLSAgICBp
ZiAobWVzc2FnZS0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgewotICAgICAgICBzb3VwX21l
c3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvZmF2
aWNvbi5pY28iKSkgewotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBT
T1VQX1NUQVRVU19OT1RfRk9VTkQpOwotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0
ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGNoYXIqIGNvbnRlbnRzOwotICAgIGdzaXplIGxlbmd0aDsKLSAgICBpZiAoZ19zdHJfZXF1YWwo
cGF0aCwgIi9pY29uL2Zhdmljb24uaWNvIikpIHsKLSAgICAgICAgR093blB0cjxjaGFyPiBwYXRo
VG9GYXZpY29uKGdfYnVpbGRfZmlsZW5hbWUoVGVzdDo6Z2V0V2ViS2l0MVRlc3RSZXNvdWNlc0Rp
cigpLmRhdGEoKSwgImJsYW5rLmljbyIsIE5VTEwpKTsKLSAgICAgICAgZ19maWxlX2dldF9jb250
ZW50cyhwYXRoVG9GYXZpY29uLmdldCgpLCAmY29udGVudHMsICZsZW5ndGgsIDApOwotICAgICAg
ICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9N
RU1PUllfVEFLRSwgY29udGVudHMsIGxlbmd0aCk7Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9lcXVh
bChwYXRoLCAiL25vZmF2aWNvbiIpKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBub0Zh
dmljb25IVE1MID0gIjxodG1sPjxoZWFkPjxib2R5PnRlc3Q8L2JvZHk+PC9odG1sPiI7Ci0gICAg
ICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQ
X01FTU9SWV9TVEFUSUMsIG5vRmF2aWNvbkhUTUwsIHN0cmxlbihub0Zhdmljb25IVE1MKSk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnRlbnRzSFRNTCA9ICI8
aHRtbD48aGVhZD48bGluayByZWw9J2ljb24nIGhyZWY9Jy9pY29uL2Zhdmljb24uaWNvJyB0eXBl
PSdpbWFnZS94LWljbzsgY2hhcnNldD1iaW5hcnknPjwvaGVhZD48Ym9keT50ZXN0PC9ib2R5Pjwv
aHRtbD4iOwotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9u
c2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBjb250ZW50c0hUTUwsIHN0cmxlbihjb250ZW50
c0hUTUwpKTsKLSAgICB9Ci0KLSAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBT
T1VQX1NUQVRVU19PSyk7Ci0gICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+
cmVzcG9uc2VfYm9keSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3ROb3RJbml0aWFsaXplZChGYXZp
Y29uRGF0YWJhc2VUZXN0KiB0ZXN0KQotewotICAgIC8vIFRyeSB0byByZXRyaWV2ZSBhIHZhbGlk
IGZhdmljb24gZnJvbSBhIG5vdCBpbml0aWFsaXplZCBkYXRhYmFzZS4KLSAgICB0ZXN0LT5nZXRG
YXZpY29uRm9yUGFnZVVSSUFuZFdhaXRVbnRpbFJlYWR5KGtTZXJ2ZXItPmdldFVSSUZvclBhdGgo
Ii9mb28iKS5kYXRhKCkpOwotICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX2Zhdmljb24pOwotICAgIGdf
YXNzZXJ0KHRlc3QtPm1fZXJyb3IpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2Vycm9y
LT5jb2RlLCA9PSwgV0VCS0lUX0ZBVklDT05fREFUQUJBU0VfRVJST1JfTk9UX0lOSVRJQUxJWkVE
KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFNldERpcmVjdG9yeShGYXZpY29uRGF0YWJhc2VUZXN0
KiB0ZXN0KQotewotICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfZmF2aWNvbl9kYXRhYmFzZV9k
aXJlY3RvcnkodGVzdC0+bV93ZWJDb250ZXh0LCBrVGVtcERpcmVjdG9yeSk7Ci0gICAgZ19hc3Nl
cnRfY21wc3RyKGtUZW1wRGlyZWN0b3J5LCA9PSwgd2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZp
Y29uX2RhdGFiYXNlX2RpcmVjdG9yeSh0ZXN0LT5tX3dlYkNvbnRleHQpKTsKLX0KLQotc3RhdGlj
IHZvaWQgdGVzdENsZWFyRGF0YWJhc2UoRmF2aWNvbkRhdGFiYXNlVGVzdCogdGVzdCkKLXsKLSAg
ICBXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X3dlYl9jb250ZXh0X2dl
dF9mYXZpY29uX2RhdGFiYXNlKHRlc3QtPm1fd2ViQ29udGV4dCk7Ci0gICAgd2Via2l0X2Zhdmlj
b25fZGF0YWJhc2VfY2xlYXIoZGF0YWJhc2UpOwotCi0gICAgR093blB0cjxjaGFyPiBpY29uVVJJ
KHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX3VyaShkYXRhYmFzZSwga1NlcnZl
ci0+Z2V0VVJJRm9yUGF0aCgiL2ZvbyIpLmRhdGEoKSkpOwotICAgIGdfYXNzZXJ0KCFpY29uVVJJ
KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdEdldEZhdmljb24oRmF2aWNvbkRhdGFiYXNlVGVzdCog
dGVzdCkKLXsKLSAgICAvLyBXZSBuZWVkIHRvIGxvYWQgdGhlIHBhZ2UgZmlyc3QgdG8gZW5zdXJl
IHRoZSBpY29uIGRhdGEgd2lsbCBiZQotICAgIC8vIGluIHRoZSBkYXRhYmFzZSBpbiBjYXNlIHRo
ZXJlJ3MgYW4gYXNzb2NpYXRlZCBmYXZpY29uLgotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+
Z2V0VVJJRm9yUGF0aCgiL2ZvbyIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsRmF2aWNv
bkNoYW5nZWQoKTsKLSAgICBDU3RyaW5nIGZhdmljb25VUkkgPSBrU2VydmVyLT5nZXRVUklGb3JQ
YXRoKCIvaWNvbi9mYXZpY29uLmljbyIpOwotCi0gICAgLy8gQ2hlY2sgdGhlIEFQSSByZXRyaWV2
aW5nIGEgdmFsaWQgZmF2aWNvbi4KLSAgICB0ZXN0LT5nZXRGYXZpY29uRm9yUGFnZVVSSUFuZFdh
aXRVbnRpbFJlYWR5KGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9mb28iKS5kYXRhKCkpOwotICAg
IGdfYXNzZXJ0KHRlc3QtPm1fZmF2aWNvbik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPm1f
ZmF2aWNvblVSSS5kYXRhKCksID09LCBmYXZpY29uVVJJLmRhdGEoKSk7Ci0gICAgZ19hc3NlcnQo
IXRlc3QtPm1fZXJyb3IpOwotCi0gICAgLy8gQ2hlY2sgdGhhdCB3aWR0aCBhbmQgaGVpZ2h0IG1h
dGNoIHRob3NlIGZyb20gYmxhbmsuaWNvICgxNngxNiBmYXZpY29uKS4KLSAgICBnX2Fzc2VydF9j
bXBpbnQoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgodGVzdC0+bV9mYXZpY29uKSwgPT0s
IDE2KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0
KHRlc3QtPm1fZmF2aWNvbiksID09LCAxNik7Ci0KLSAgICAvLyBDaGVjayB0aGF0IGFub3RoZXIg
cGFnZSB3aXRoIHRoZSBzYW1lIGZhdmljb24gcmV0dXJuIHRoZSBzYW1lIGljb24uCi0gICAgY2Fp
cm9fc3VyZmFjZV90KiBmYXZpY29uID0gY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2UodGVzdC0+bV9m
YXZpY29uKTsKLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9iYXIi
KS5kYXRhKCkpOwotICAgIC8vIEl0J3MgYSBuZXcgcGFnZSBpbiB0aGUgZGF0YWJhc2UsIHNvIGZh
dmljb24gd2lsbCBjaGFuZ2UgdHdpY2UsIGZpcnN0IHRvIHJlc2V0IGl0Ci0gICAgLy8gYW5kIHRo
ZW4gd2hlbiB0aGUgaWNvbiBpcyBsb2FkZWQuCi0gICAgdGVzdC0+d2FpdFVudGlsRmF2aWNvbkNo
YW5nZWQoKTsKLSAgICB0ZXN0LT53YWl0VW50aWxGYXZpY29uQ2hhbmdlZCgpOwotICAgIHRlc3Qt
PmdldEZhdmljb25Gb3JQYWdlVVJJQW5kV2FpdFVudGlsUmVhZHkoa1NlcnZlci0+Z2V0VVJJRm9y
UGF0aCgiL2JhciIpLmRhdGEoKSk7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV9mYXZpY29uKTsKLSAg
ICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9mYXZpY29uVVJJLmRhdGEoKSwgPT0sIGZhdmljb25V
UkkuZGF0YSgpKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX2Zhdmljb24gPT0gZmF2aWNvbik7Ci0g
ICAgZ19hc3NlcnQoIXRlc3QtPm1fZXJyb3IpOwotICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShm
YXZpY29uKTsKLQotICAgIC8vIENoZWNrIHRoZSBBUEkgcmV0cmlldmluZyBhbiBpbnZhbGlkIGZh
dmljb24uCi0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvbm9mYXZp
Y29uIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxGYXZpY29uQ2hhbmdlZCgpOwotCi0g
ICAgdGVzdC0+Z2V0RmF2aWNvbkZvclBhZ2VVUklBbmRXYWl0VW50aWxSZWFkeShrU2VydmVyLT5n
ZXRVUklGb3JQYXRoKCIvbm9mYXZpY29uIikuZGF0YSgpKTsKLSAgICBnX2Fzc2VydCghdGVzdC0+
bV9mYXZpY29uKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX2Vycm9yKTsKLX0KLQotc3RhdGljIHZv
aWQgdGVzdEdldEZhdmljb25VUkkoRmF2aWNvbkRhdGFiYXNlVGVzdCogdGVzdCkKLXsKLSAgICBX
ZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9m
YXZpY29uX2RhdGFiYXNlKHRlc3QtPm1fd2ViQ29udGV4dCk7Ci0KLSAgICBDU3RyaW5nIGJhc2VV
UkkgPSBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvZm9vIik7Ci0gICAgR093blB0cjxjaGFyPiBp
Y29uVVJJKHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX3VyaShkYXRhYmFzZSwg
YmFzZVVSSS5kYXRhKCkpKTsKLSAgICBBU1NFUlRfQ01QX0NTVFJJTkcoaWNvblVSSS5nZXQoKSwg
PT0sIGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pY29uL2Zhdmljb24uaWNvIikpOwotfQotCi1z
dGF0aWMgdm9pZCB0ZXN0V2ViVmlld0Zhdmljb24oRmF2aWNvbkRhdGFiYXNlVGVzdCogdGVzdCkK
LXsKLSAgICB0ZXN0LT5tX2Zhdmljb25VUkkgPSBDU3RyaW5nKCk7Ci0KLSAgICBjYWlyb19zdXJm
YWNlX3QqIGljb25Gcm9tV2ViVmlldyA9IHdlYmtpdF93ZWJfdmlld19nZXRfZmF2aWNvbih0ZXN0
LT5tX3dlYlZpZXcpOwotICAgIGdfYXNzZXJ0KCFpY29uRnJvbVdlYlZpZXcpOwotCi0gICAgdGVz
dC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvZm9vIikuZGF0YSgpKTsKLSAgICB0
ZXN0LT53YWl0VW50aWxGYXZpY29uQ2hhbmdlZCgpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fZmF2
aWNvbk5vdGlmaWNhdGlvblJlY2VpdmVkKTsKLSAgICAvLyBUaGUgaWNvbiBpcyBrbm93biBhbmQg
aGFzbid0IGNoYW5nZWQgaW4gdGhlIGRhdGFiYXNlLCBzbyBub3RpZnk6OmZhdmljb24gaXMgZW1p
dHRlZAotICAgIC8vIGJ1dCBXZWJLaXRGYXZpY29uRGF0YWJhc2U6Omljb24tY2hhbmdlZCBpc24n
dC4KLSAgICBnX2Fzc2VydCh0ZXN0LT5tX2Zhdmljb25VUkkuaXNOdWxsKCkpOwotCi0gICAgaWNv
bkZyb21XZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X2dldF9mYXZpY29uKHRlc3QtPm1fd2ViVmll
dyk7Ci0gICAgZ19hc3NlcnQoaWNvbkZyb21XZWJWaWV3KTsKLSAgICBnX2Fzc2VydF9jbXB1aW50
KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKGljb25Gcm9tV2ViVmlldyksID09LCAxNik7
Ci0gICAgZ19hc3NlcnRfY21wdWludChjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoaWNv
bkZyb21XZWJWaWV3KSwgPT0sIDE2KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdEZhdmljb25EYXRh
YmFzZShGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIC8v
IFRoZXNlIHRlc3RzIGRlcGVuZCBvbiB0aGlzIG9yZGVyIHRvIHJ1biBwcm9wZXJseSBzbyB3ZSBk
ZWNsYXJlIHRoZW0gaW4gYSBzaW5nbGUgb25lLgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTExNDM0LgotICAgIHRlc3ROb3RJbml0aWFsaXplZCh0
ZXN0KTsKLSAgICB0ZXN0U2V0RGlyZWN0b3J5KHRlc3QpOwotICAgIHRlc3RHZXRGYXZpY29uKHRl
c3QpOwotICAgIHRlc3RHZXRGYXZpY29uVVJJKHRlc3QpOwotICAgIHRlc3RXZWJWaWV3RmF2aWNv
bih0ZXN0KTsKLSAgICB0ZXN0Q2xlYXJEYXRhYmFzZSh0ZXN0KTsKLX0KLQotdm9pZCBiZWZvcmVB
bGwoKQotewotICAgIC8vIFN0YXJ0IGEgc291cCBzZXJ2ZXIgZm9yIHRlc3RpbmcuCi0gICAga1Nl
cnZlciA9IG5ldyBXZWJLaXRUZXN0U2VydmVyKCk7Ci0gICAga1NlcnZlci0+cnVuKHNlcnZlckNh
bGxiYWNrKTsKLQotICAgIGtUZW1wRGlyZWN0b3J5ID0gZ19kaXJfbWFrZV90bXAoIldlYktpdDJU
ZXN0cy1YWFhYWFgiLCAwKTsKLSAgICBnX2Fzc2VydChrVGVtcERpcmVjdG9yeSk7Ci0KLSAgICAv
LyBBZGQgdGVzdHMgdG8gdGhlIHN1aXRlLgotICAgIEZhdmljb25EYXRhYmFzZVRlc3Q6OmFkZCgi
V2ViS2l0RmF2aWNvbkRhdGFiYXNlIiwgImZhdmljb24tZGF0YWJhc2UtdGVzdCIsIHRlc3RGYXZp
Y29uRGF0YWJhc2UpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRGYXZpY29uRGF0YWJhc2VGaW5h
bGl6ZWRDYWxsYmFjayhncG9pbnRlciwgR09iamVjdCopCi17Ci0gICAgaWYgKCFnX2ZpbGVfdGVz
dChrVGVtcERpcmVjdG9yeSwgR19GSUxFX1RFU1RfSVNfRElSKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgR093blB0cjxjaGFyPiBmaWxlbmFtZShnX2J1aWxkX2ZpbGVuYW1lKGtUZW1wRGlyZWN0
b3J5LCAiV2VicGFnZUljb25zLmRiIiwgTlVMTCkpOwotICAgIGdfdW5saW5rKGZpbGVuYW1lLmdl
dCgpKTsKLQotICAgIGdfcm1kaXIoa1RlbXBEaXJlY3RvcnkpOwotfQotCi12b2lkIGFmdGVyQWxs
KCkKLXsKLSAgICBkZWxldGUga1NlcnZlcjsKLQotICAgIC8vIERlbGV0ZSB0aGUgdGVtcG9yYXJ5
IGZpbGVzIGFmdGVyIHRoZSBJY29uRGF0YWJhc2UgaGFzIGJlZW4KLSAgICAvLyBjbG9zZWQsIHRo
YXQgaXMsIG9uY2UgV2ViS2l0RmF2aWNvbkRhdGFiYXNlIGlzIGJlaW5nIGRlc3Ryb3llZC4KLSAg
ICBXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X3dlYl9jb250ZXh0X2dl
dF9mYXZpY29uX2RhdGFiYXNlKHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpKTsKLSAg
ICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVDVChkYXRhYmFzZSksIHdlYmtpdEZhdmljb25EYXRh
YmFzZUZpbmFsaXplZENhbGxiYWNrLCAwKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxlci5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0RmluZENvbnRy
b2xsZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMmVlZjRjLi4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRG
aW5kQ29udHJvbGxlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMzUgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0j
aW5jbHVkZSAiTG9hZFRyYWNraW5nVGVzdC5oIgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNs
dWRlIDx3ZWJraXQyL3dlYmtpdDIuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+
Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiB0ZXN0U3RyaW5nID0gIjxodG1sPjxib2R5PmZpcnN0IHRl
c3Rpbmcgc2Vjb25kIHRlc3Rpbmcgc2Vjb25kSGFsZjwvYm9keT48L2h0bWw+IjsKLQotY2xhc3Mg
RmluZENvbnRyb2xsZXJUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3QgewotcHVibGljOgotICAgIE1B
S0VfR0xJQl9URVNUX0ZJWFRVUkUoRmluZENvbnRyb2xsZXJUZXN0KTsKLQotICAgIEZpbmRDb250
cm9sbGVyVGVzdCgpCi0gICAgICAgIDogbV9maW5kQ29udHJvbGxlcih3ZWJraXRfd2ViX3ZpZXdf
Z2V0X2ZpbmRfY29udHJvbGxlcihtX3dlYlZpZXcpKQotICAgICAgICAsIG1fcnVuRmluZFVudGls
Q29tcGxldGlvbihmYWxzZSkKLSAgICB7Ci0gICAgICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdo
ZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QobV9maW5kQ29udHJvbGxlci5nZXQoKSkpOwotICAgIH0K
LQotICAgIH5GaW5kQ29udHJvbGxlclRlc3QoKQotICAgIHsKLSAgICAgICAgaWYgKG1fZmluZENv
bnRyb2xsZXIpCi0gICAgICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNo
ZWQobV9maW5kQ29udHJvbGxlci5nZXQoKSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwg
MCwgdGhpcyk7Ci0gICAgfQotCi0gICAgdm9pZCBmaW5kKGNvbnN0IGNoYXIqIHNlYXJjaFRleHQs
IGd1aW50MzIgZmluZE9wdGlvbnMsIGd1aW50IG1heE1hdGNoQ291bnQpCi0gICAgewotICAgICAg
ICBnX3NpZ25hbF9jb25uZWN0KG1fZmluZENvbnRyb2xsZXIuZ2V0KCksICJmb3VuZC10ZXh0Iiwg
R19DQUxMQkFDSyhmb3VuZFRleHRDYWxsYmFjayksIHRoaXMpOwotICAgICAgICBnX3NpZ25hbF9j
b25uZWN0KG1fZmluZENvbnRyb2xsZXIuZ2V0KCksICJmYWlsZWQtdG8tZmluZC10ZXh0IiwgR19D
QUxMQkFDSyhmYWlsZWRUb0ZpbmRUZXh0Q2FsbGJhY2spLCB0aGlzKTsKLSAgICAgICAgd2Via2l0
X2ZpbmRfY29udHJvbGxlcl9zZWFyY2gobV9maW5kQ29udHJvbGxlci5nZXQoKSwgc2VhcmNoVGV4
dCwgZmluZE9wdGlvbnMsIG1heE1hdGNoQ291bnQpOwotICAgIH0KLQotICAgIHZvaWQgY291bnQo
Y29uc3QgY2hhciogc2VhcmNoVGV4dCwgZ3VpbnQzMiBmaW5kT3B0aW9ucywgZ3VpbnQgbWF4TWF0
Y2hDb3VudCkKLSAgICB7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9maW5kQ29udHJvbGxl
ci5nZXQoKSwgImNvdW50ZWQtbWF0Y2hlcyIsIEdfQ0FMTEJBQ0soY291bnRlZE1hdGNoZXNDYWxs
YmFjayksIHRoaXMpOwotICAgICAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX2NvdW50X21hdGNo
ZXMobV9maW5kQ29udHJvbGxlci5nZXQoKSwgc2VhcmNoVGV4dCwgZmluZE9wdGlvbnMsIG1heE1h
dGNoQ291bnQpOwotICAgIH0KLQotICAgIHZvaWQgd2FpdFVudGlsRmluZEZpbmlzaGVkKCkKLSAg
ICB7Ci0gICAgICAgIG1fcnVuRmluZFVudGlsQ29tcGxldGlvbiA9IHRydWU7Ci0gICAgICAgIGdf
bWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAgICB9Ci0KLSAgICBHUmVmUHRyPFdlYktpdEZp
bmRDb250cm9sbGVyPiBtX2ZpbmRDb250cm9sbGVyOwotICAgIGJvb2wgbV90ZXh0Rm91bmQ7Ci0g
ICAgdW5zaWduZWQgbV9tYXRjaENvdW50OwotCi1wcml2YXRlOgotICAgIGJvb2wgbV9ydW5GaW5k
VW50aWxDb21wbGV0aW9uOwotCi0gICAgc3RhdGljIHZvaWQgZm91bmRUZXh0Q2FsbGJhY2soV2Vi
S2l0RmluZENvbnRyb2xsZXIqLCBndWludCBtYXRjaENvdW50LCBGaW5kQ29udHJvbGxlclRlc3Qq
IHRlc3QpCi0gICAgewotICAgICAgICB0ZXN0LT5tX3RleHRGb3VuZCA9IHRydWU7Ci0gICAgICAg
IHRlc3QtPm1fbWF0Y2hDb3VudCA9IG1hdGNoQ291bnQ7Ci0gICAgICAgIGlmICh0ZXN0LT5tX3J1
bkZpbmRVbnRpbENvbXBsZXRpb24pCi0gICAgICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3Qt
Pm1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGZhaWxlZFRvRmluZFRleHRD
YWxsYmFjayhXZWJLaXRGaW5kQ29udHJvbGxlciosIEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCkK
LSAgICB7Ci0gICAgICAgIHRlc3QtPm1fdGV4dEZvdW5kID0gZmFsc2U7Ci0gICAgICAgIGlmICh0
ZXN0LT5tX3J1bkZpbmRVbnRpbENvbXBsZXRpb24pCi0gICAgICAgICAgICBnX21haW5fbG9vcF9x
dWl0KHRlc3QtPm1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGNvdW50ZWRN
YXRjaGVzQ2FsbGJhY2soV2ViS2l0RmluZENvbnRyb2xsZXIqLCBndWludCBtYXRjaENvdW50LCBG
aW5kQ29udHJvbGxlclRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICB0ZXN0LT5tX21hdGNoQ291
bnQgPSBtYXRjaENvdW50OwotICAgICAgICBpZiAodGVzdC0+bV9ydW5GaW5kVW50aWxDb21wbGV0
aW9uKQotICAgICAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKLSAg
ICB9Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xsZXJUZXh0Rm91bmQoRmluZENv
bnRyb2xsZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxvYWRIdG1s
KHRlc3RTdHJpbmcsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0g
ICAgdGVzdC0+ZmluZCgidGVzdGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwgMSk7Ci0g
ICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7Ci0KLSAgICBnX2Fzc2VydCh0ZXN0LT5t
X3RleHRGb3VuZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RGaW5kQ29udHJvbGxlclRleHROb3RG
b3VuZChGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVz
dC0+bG9hZEh0bWwodGVzdFN0cmluZywgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlz
aGVkKCk7Ci0KLSAgICB0ZXN0LT5maW5kKCJub3RGb3VuZCIsIFdFQktJVF9GSU5EX09QVElPTlNf
Tk9ORSwgMSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7Ci0KLSAgICBnX2Fz
c2VydCghdGVzdC0+bV90ZXh0Rm91bmQpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0RmluZENvbnRy
b2xsZXJNYXRjaENvdW50KEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikK
LXsKLSAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0U3RyaW5nLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50
aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIHRlc3QtPmZpbmQoInRlc3RpbmciLCBXRUJLSVRfRklO
RF9PUFRJT05TX05PTkUsIDIpOwotICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOwot
Ci0gICAgZ19hc3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09IDIpOwotICAgIGdfYXNzZXJ0KHRl
c3QtPm1fdGV4dEZvdW5kKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVyTWF4
TWF0Y2hDb3VudChGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0g
ICAgdGVzdC0+bG9hZEh0bWwodGVzdFN0cmluZywgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9h
ZEZpbmlzaGVkKCk7Ci0KLSAgICB0ZXN0LT5maW5kKCJ0ZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BU
SU9OU19OT05FLCAxKTsKLSAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKLQotICAg
IGdfYXNzZXJ0KHRlc3QtPm1fbWF0Y2hDb3VudCA9PSBHX01BWFVJTlQpOwotICAgIGdfYXNzZXJ0
KHRlc3QtPm1fdGV4dEZvdW5kKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVy
TmV4dChGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVz
dC0+bG9hZEh0bWwodGVzdFN0cmluZywgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlz
aGVkKCk7Ci0KLSAgICB0ZXN0LT5maW5kKCJ0ZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19O
T05FLCAyKTsKLSAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKLQotICAgIGdfYXNz
ZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX21hdGNoQ291bnQg
PT0gMik7Ci0KLSAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF9uZXh0KHRlc3QtPm1f
ZmluZENvbnRyb2xsZXIuZ2V0KCkpOwotICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgp
OwotCi0gICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOwotICAgIGdfYXNzZXJ0KHRlc3Qt
Pm1fbWF0Y2hDb3VudCA9PSAxKTsKLSAgICBnX2Fzc2VydCghKHdlYmtpdF9maW5kX2NvbnRyb2xs
ZXJfZ2V0X29wdGlvbnModGVzdC0+bV9maW5kQ29udHJvbGxlci5nZXQoKSkgJiBXRUJLSVRfRklO
RF9PUFRJT05TX0JBQ0tXQVJEUykpOwotCi0gICAgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFy
Y2hfbmV4dCh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKTsKLSAgICB0ZXN0LT53YWl0VW50
aWxGaW5kRmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX3RleHRGb3VuZCk7Ci0g
ICAgZ19hc3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09IDEpOwotICAgIGdfYXNzZXJ0KCEod2Vi
a2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfb3B0aW9ucyh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdl
dCgpKSAmIFdFQktJVF9GSU5EX09QVElPTlNfQkFDS1dBUkRTKSk7Ci19Ci0KLXN0YXRpYyB2b2lk
IHRlc3RGaW5kQ29udHJvbGxlclByZXZpb3VzKEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCwgZ2Nv
bnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0U3RyaW5nLCAwKTsKLSAgICB0
ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIHRlc3QtPmZpbmQoInRlc3Rpbmci
LCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUsIDIpOwotICAgIHRlc3QtPndhaXRVbnRpbEZpbmRG
aW5pc2hlZCgpOwotCi0gICAgZ19hc3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09IDIpOwotICAg
IGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKLQotICAgIHdlYmtpdF9maW5kX2NvbnRyb2xs
ZXJfc2VhcmNoX25leHQodGVzdC0+bV9maW5kQ29udHJvbGxlci5nZXQoKSk7Ci0gICAgdGVzdC0+
d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7Ci0KLSAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3Vu
ZCk7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09IDEpOwotICAgIGdfYXNzZXJ0
KCEod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfb3B0aW9ucyh0ZXN0LT5tX2ZpbmRDb250cm9s
bGVyLmdldCgpKSAmIFdFQktJVF9GSU5EX09QVElPTlNfQkFDS1dBUkRTKSk7Ci0KLSAgICB3ZWJr
aXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF9wcmV2aW91cyh0ZXN0LT5tX2ZpbmRDb250cm9sbGVy
LmdldCgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKLQotICAgIGdfYXNz
ZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX21hdGNoQ291bnQg
PT0gMSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfb3B0aW9ucyh0
ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKSAmIFdFQktJVF9GSU5EX09QVElPTlNfQkFDS1dB
UkRTKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVyQ291bnRlZE1hdGNoZXMo
RmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxv
YWRIdG1sKHRlc3RTdHJpbmcsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgp
OwotCi0gICAgdGVzdC0+Y291bnQoInRlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUs
IDIpOwotICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3NlcnQo
dGVzdC0+bV9tYXRjaENvdW50ID09IDIpOwotCi0gICAgdGVzdC0+Y291bnQoImZpcnN0IiwgV0VC
S0lUX0ZJTkRfT1BUSU9OU19OT05FLCAyKTsKLSAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNo
ZWQoKTsKLQotICAgIGdfYXNzZXJ0KHRlc3QtPm1fbWF0Y2hDb3VudCA9PSAxKTsKLQotICAgIHRl
c3QtPmNvdW50KCJub3RGb3VuZCIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwgMik7Ci0gICAg
dGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7Ci0KLSAgICBnX2Fzc2VydCghdGVzdC0+bV9t
YXRjaENvdW50KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVyT3B0aW9ucyhG
aW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+bG9h
ZEh0bWwodGVzdFN0cmluZywgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7
Ci0KLSAgICB0ZXN0LT5maW5kKCJUZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAy
KTsKLSAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0KCF0
ZXN0LT5tX3RleHRGb3VuZCk7Ci0KLSAgICB0ZXN0LT5maW5kKCJUZXN0aW5nIiwgV0VCS0lUX0ZJ
TkRfT1BUSU9OU19DQVNFX0lOU0VOU0lUSVZFLCAyKTsKLSAgICB0ZXN0LT53YWl0VW50aWxGaW5k
RmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKLQotICAgIHRl
c3QtPmZpbmQoImVzdGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwgMik7Ci0gICAgdGVz
dC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7Ci0KLSAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRG
b3VuZCk7Ci0KLSAgICB0ZXN0LT5maW5kKCJlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05TX0FU
X1dPUkRfU1RBUlRTLCAyKTsKLSAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKLQot
ICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX3RleHRGb3VuZCk7Ci0KLSAgICB0ZXN0LT5maW5kKCJIYWxm
IiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19BVF9XT1JEX1NUQVJUUywgMik7Ci0gICAgdGVzdC0+d2Fp
dFVudGlsRmluZEZpbmlzaGVkKCk7Ci0KLSAgICBnX2Fzc2VydCghdGVzdC0+bV90ZXh0Rm91bmQp
OwotCi0gICAgdGVzdC0+ZmluZCgiSGFsZiIsIFdFQktJVF9GSU5EX09QVElPTlNfQVRfV09SRF9T
VEFSVFMgfCBXRUJLSVRfRklORF9PUFRJT05TX1RSRUFUX01FRElBTF9DQVBJVEFMX0FTX1dPUkRf
U1RBUlQsIDIpOwotICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOwotCi0gICAgZ19h
c3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOwotCi0gICAgdGVzdC0+ZmluZCgidGVzdGluZyIsIFdF
QktJVF9GSU5EX09QVElPTlNfV1JBUF9BUk9VTkQsIDMpOwotICAgIHRlc3QtPndhaXRVbnRpbEZp
bmRGaW5pc2hlZCgpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKLQotICAgIHdl
YmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX25leHQodGVzdC0+bV9maW5kQ29udHJvbGxlci5n
ZXQoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7Ci0gICAgZ19hc3NlcnQo
dGVzdC0+bV90ZXh0Rm91bmQpOwotCi0gICAgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hf
bmV4dCh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxG
aW5kRmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7Ci19Ci0KLXN0
YXRpYyB2b2lkIHRlc3RGaW5kQ29udHJvbGxlckhpZGUoRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxvYWRIdG1sKHRlc3RTdHJpbmcsIDApOwot
ICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgdGVzdC0+c2hvd0luV2lu
ZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7Ci0KLSAgICBjYWlyb19zdXJmYWNlX3QqIG9yaWdpbmFs
U3VyZmFjZSA9IGNhaXJvX3N1cmZhY2VfcmVmZXJlbmNlKAotICAgICAgICB0ZXN0LT5nZXRTbmFw
c2hvdEFuZFdhaXRVbnRpbFJlYWR5KFdFQktJVF9TTkFQU0hPVF9SRUdJT05fRlVMTF9ET0NVTUVO
VCwgV0VCS0lUX1NOQVBTSE9UX09QVElPTlNfTk9ORSkpOwotICAgIGdfYXNzZXJ0KG9yaWdpbmFs
U3VyZmFjZSk7Ci0KLSAgICB0ZXN0LT5maW5kKCJ0ZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9O
U19OT05FLCAxKTsKLSAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKLSAgICBnX2Fz
c2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7Ci0KLSAgICBjYWlyb19zdXJmYWNlX3QqIGhpZ2hsaWdo
dFN1cmZhY2UgPSBjYWlyb19zdXJmYWNlX3JlZmVyZW5jZSgKLSAgICAgICAgdGVzdC0+Z2V0U25h
cHNob3RBbmRXYWl0VW50aWxSZWFkeShXRUJLSVRfU05BUFNIT1RfUkVHSU9OX0ZVTExfRE9DVU1F
TlQsIFdFQktJVF9TTkFQU0hPVF9PUFRJT05TX05PTkUpKTsKLSAgICBnX2Fzc2VydChoaWdobGln
aHRTdXJmYWNlKTsKLSAgICBnX2Fzc2VydCghVGVzdDo6Y2Fpcm9TdXJmYWNlc0VxdWFsKG9yaWdp
bmFsU3VyZmFjZSwgaGlnaGxpZ2h0U3VyZmFjZSkpOwotCi0gICAgV2ViS2l0RmluZENvbnRyb2xs
ZXIqIGZpbmRDb250cm9sbGVyID0gd2Via2l0X3dlYl92aWV3X2dldF9maW5kX2NvbnRyb2xsZXIo
dGVzdC0+bV93ZWJWaWV3KTsKLSAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF9maW5p
c2goZmluZENvbnRyb2xsZXIpOwotICAgIHdlYmtpdF93ZWJfdmlld19leGVjdXRlX2VkaXRpbmdf
Y29tbWFuZCh0ZXN0LT5tX3dlYlZpZXcsICJVbnNlbGVjdCIpOwotCi0gICAgY2Fpcm9fc3VyZmFj
ZV90KiB1bmhpZ2hsaWdodFN1cmZhY2UgPSBjYWlyb19zdXJmYWNlX3JlZmVyZW5jZSgKLSAgICAg
ICAgdGVzdC0+Z2V0U25hcHNob3RBbmRXYWl0VW50aWxSZWFkeShXRUJLSVRfU05BUFNIT1RfUkVH
SU9OX0ZVTExfRE9DVU1FTlQsIFdFQktJVF9TTkFQU0hPVF9PUFRJT05TX05PTkUpKTsKLSAgICBn
X2Fzc2VydCh1bmhpZ2hsaWdodFN1cmZhY2UpOwotICAgIGdfYXNzZXJ0KFRlc3Q6OmNhaXJvU3Vy
ZmFjZXNFcXVhbChvcmlnaW5hbFN1cmZhY2UsIHVuaGlnaGxpZ2h0U3VyZmFjZSkpOwotCi0gICAg
Y2Fpcm9fc3VyZmFjZV9kZXN0cm95KG9yaWdpbmFsU3VyZmFjZSk7Ci0gICAgY2Fpcm9fc3VyZmFj
ZV9kZXN0cm95KGhpZ2hsaWdodFN1cmZhY2UpOwotICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveSh1
bmhpZ2hsaWdodFN1cmZhY2UpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xsZXJJ
bnN0YW5jZShGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAg
V2ViS2l0RmluZENvbnRyb2xsZXIqIGZpbmRDb250cm9sbGVyMSA9IHdlYmtpdF93ZWJfdmlld19n
ZXRfZmluZF9jb250cm9sbGVyKHRlc3QtPm1fd2ViVmlldyk7Ci0gICAgV2ViS2l0RmluZENvbnRy
b2xsZXIqIGZpbmRDb250cm9sbGVyMiA9IHdlYmtpdF93ZWJfdmlld19nZXRfZmluZF9jb250cm9s
bGVyKHRlc3QtPm1fd2ViVmlldyk7Ci0KLSAgICBnX2Fzc2VydChmaW5kQ29udHJvbGxlcjEgPT0g
ZmluZENvbnRyb2xsZXIyKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVyR2V0
dGVycyhGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgY29u
c3QgY2hhciogc2VhcmNoVGV4dCA9ICJ0ZXN0aW5nIjsKLSAgICBndWludCBtYXhNYXRjaENvdW50
ID0gMTsKLSAgICBndWludDMyIGZpbmRPcHRpb25zID0gV0VCS0lUX0ZJTkRfT1BUSU9OU19XUkFQ
X0FST1VORCB8IFdFQktJVF9GSU5EX09QVElPTlNfQVRfV09SRF9TVEFSVFM7Ci0gICAgV2ViS2l0
RmluZENvbnRyb2xsZXIqIGZpbmRDb250cm9sbGVyID0gd2Via2l0X3dlYl92aWV3X2dldF9maW5k
X2NvbnRyb2xsZXIodGVzdC0+bV93ZWJWaWV3KTsKLQotICAgIHdlYmtpdF9maW5kX2NvbnRyb2xs
ZXJfc2VhcmNoKGZpbmRDb250cm9sbGVyLCBzZWFyY2hUZXh0LCBmaW5kT3B0aW9ucywgbWF4TWF0
Y2hDb3VudCk7Ci0gICAgZ19hc3NlcnQod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfd2ViX3Zp
ZXcoZmluZENvbnRyb2xsZXIpID09IHRlc3QtPm1fd2ViVmlldyk7Ci0gICAgZ19hc3NlcnQoIWdf
c3RyY21wMCh3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9zZWFyY2hfdGV4dChmaW5kQ29udHJv
bGxlciksIHNlYXJjaFRleHQpKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfZmluZF9jb250cm9sbGVy
X2dldF9tYXhfbWF0Y2hfY291bnQoZmluZENvbnRyb2xsZXIpID09IG1heE1hdGNoQ291bnQpOwot
ICAgIGdfYXNzZXJ0KHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X29wdGlvbnMoZmluZENvbnRy
b2xsZXIpID09IGZpbmRPcHRpb25zKTsKLX0KLQotdm9pZCBiZWZvcmVBbGwoKQotewotICAgIEZp
bmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udHJvbGxlciIsICJnZXR0ZXJzIiwg
dGVzdEZpbmRDb250cm9sbGVyR2V0dGVycyk7Ci0gICAgRmluZENvbnRyb2xsZXJUZXN0OjphZGQo
IldlYktpdEZpbmRDb250cm9sbGVyIiwgImluc3RhbmNlIiwgdGVzdEZpbmRDb250cm9sbGVySW5z
dGFuY2UpOwotICAgIEZpbmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udHJvbGxl
ciIsICJ0ZXh0LWZvdW5kIiwgdGVzdEZpbmRDb250cm9sbGVyVGV4dEZvdW5kKTsKLSAgICBGaW5k
Q29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIiLCAidGV4dC1ub3QtZm91
bmQiLCB0ZXN0RmluZENvbnRyb2xsZXJUZXh0Tm90Rm91bmQpOwotICAgIEZpbmRDb250cm9sbGVy
VGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udHJvbGxlciIsICJtYXRjaC1jb3VudCIsIHRlc3RGaW5k
Q29udHJvbGxlck1hdGNoQ291bnQpOwotICAgIEZpbmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJL
aXRGaW5kQ29udHJvbGxlciIsICJtYXgtbWF0Y2gtY291bnQiLCB0ZXN0RmluZENvbnRyb2xsZXJN
YXhNYXRjaENvdW50KTsKLSAgICBGaW5kQ29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENv
bnRyb2xsZXIiLCAibmV4dCIsIHRlc3RGaW5kQ29udHJvbGxlck5leHQpOwotICAgIEZpbmRDb250
cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udHJvbGxlciIsICJwcmV2aW91cyIsIHRlc3RG
aW5kQ29udHJvbGxlclByZXZpb3VzKTsKLSAgICBGaW5kQ29udHJvbGxlclRlc3Q6OmFkZCgiV2Vi
S2l0RmluZENvbnRyb2xsZXIiLCAiY291bnRlZC1tYXRjaGVzIiwgdGVzdEZpbmRDb250cm9sbGVy
Q291bnRlZE1hdGNoZXMpOwotICAgIEZpbmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5k
Q29udHJvbGxlciIsICJvcHRpb25zIiwgdGVzdEZpbmRDb250cm9sbGVyT3B0aW9ucyk7Ci0gICAg
RmluZENvbnRyb2xsZXJUZXN0OjphZGQoIldlYktpdEZpbmRDb250cm9sbGVyIiwgImhpZGUiLCB0
ZXN0RmluZENvbnRyb2xsZXJIaWRlKTsKLX0KLQotdm9pZCBhZnRlckFsbCgpCi17Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0
UG9saWN5Q2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L1Rlc3RXZWJLaXRQb2xpY3lDbGllbnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAyMDllYTA0Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL1Rlc3RXZWJLaXRQb2xpY3lDbGllbnQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjY3
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiTG9hZFRyYWNraW5nVGVzdC5oIgotI2luY2x1ZGUgIldl
YktpdFRlc3RTZXJ2ZXIuaCIKLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1zdGF0aWMgV2ViS2l0VGVzdFNlcnZlcioga1Nl
cnZlcjsKLQotY2xhc3MgUG9saWN5Q2xpZW50VGVzdDogcHVibGljIExvYWRUcmFja2luZ1Rlc3Qg
ewotcHVibGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoUG9saWN5Q2xpZW50VGVzdCk7
Ci0KLSAgICBlbnVtIFBvbGljeURlY2lzaW9uUmVzcG9uc2UgewotICAgICAgICBVc2UsCi0gICAg
ICAgIElnbm9yZSwKLSAgICAgICAgRG93bmxvYWQsCi0gICAgICAgIE5vbmUKLSAgICB9OwotCi0g
ICAgUG9saWN5Q2xpZW50VGVzdCgpCi0gICAgICAgIDogTG9hZFRyYWNraW5nVGVzdCgpCi0gICAg
ICAgICwgbV9wb2xpY3lEZWNpc2lvblJlc3BvbnNlKE5vbmUpCi0gICAgICAgICwgbV9wb2xpY3lE
ZWNpc2lvblR5cGVGaWx0ZXIoMCkKLSAgICAgICAgLCBtX3Jlc3BvbmRUb1BvbGljeURlY2lzaW9u
QXN5bmNocm9ub3VzbHkoZmFsc2UpCi0gICAgICAgICwgbV9oYWx0TWFpbkxvb3BBZnRlck1ha2lu
Z0RlY2lzaW9uKGZhbHNlKQotICAgIHsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZp
ZXcsICJkZWNpZGUtcG9saWN5IiwgR19DQUxMQkFDSyhkZWNpZGVQb2xpY3lDYWxsYmFjayksIHRo
aXMpOwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiBxdWl0TWFpbkxvb3BMYXRlcihHTWFp
bkxvb3AqIGxvb3ApCi0gICAgewotICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwotICAg
ICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgcmVzcG9uZFRvUG9s
aWN5RGVjaXNpb24oUG9saWN5Q2xpZW50VGVzdCogdGVzdCwgV2ViS2l0UG9saWN5RGVjaXNpb24q
IGRlY2lzaW9uKQotICAgIHsKLSAgICAgICAgc3dpdGNoICh0ZXN0LT5tX3BvbGljeURlY2lzaW9u
UmVzcG9uc2UpIHsKLSAgICAgICAgY2FzZSBVc2U6Ci0gICAgICAgICAgICB3ZWJraXRfcG9saWN5
X2RlY2lzaW9uX3VzZShkZWNpc2lvbik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBJZ25vcmU6Ci0gICAgICAgICAgICB3ZWJraXRfcG9saWN5X2RlY2lzaW9uX2lnbm9yZShkZWNp
c2lvbik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBEb3dubG9hZDoKLSAgICAg
ICAgICAgIHdlYmtpdF9wb2xpY3lfZGVjaXNpb25fZG93bmxvYWQoZGVjaXNpb24pOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTm9uZToKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKHRlc3QtPm1faGFsdE1haW5Mb29wQWZ0ZXJNYWtpbmdEZWNp
c2lvbikKLSAgICAgICAgICAgIGdfaWRsZV9hZGQocmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVu
Yz4ocXVpdE1haW5Mb29wTGF0ZXIpLCB0ZXN0LT5tX21haW5Mb29wKTsKLSAgICB9Ci0KLSAgICBz
dGF0aWMgZ2Jvb2xlYW4gcmVzcG9uZFRvUG9saWN5RGVjaXNpb25MYXRlcihQb2xpY3lDbGllbnRU
ZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgcmVzcG9uZFRvUG9saWN5RGVjaXNpb24odGVzdCwg
dGVzdC0+bV9wcmV2aW91c1BvbGljeURlY2lzaW9uLmdldCgpKTsKLSAgICAgICAgdGVzdC0+bV9w
cmV2aW91c1BvbGljeURlY2lzaW9uID0gMDsKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0K
LQotICAgIHN0YXRpYyBnYm9vbGVhbiBkZWNpZGVQb2xpY3lDYWxsYmFjayhXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3LCBXZWJLaXRQb2xpY3lEZWNpc2lvbiogZGVjaXNpb24sIFdlYktpdFBvbGljeURl
Y2lzaW9uVHlwZSB0eXBlLCBQb2xpY3lDbGllbnRUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAg
aWYgKHRlc3QtPm1fcG9saWN5RGVjaXNpb25UeXBlRmlsdGVyICE9IHR5cGUpCi0gICAgICAgICAg
ICByZXR1cm4gRkFMU0U7Ci0KLSAgICAgICAgdGVzdC0+bV9wcmV2aW91c1BvbGljeURlY2lzaW9u
ID0gZGVjaXNpb247Ci0gICAgICAgIGlmICh0ZXN0LT5tX3Jlc3BvbmRUb1BvbGljeURlY2lzaW9u
QXN5bmNocm9ub3VzbHkpIHsKLSAgICAgICAgICAgIGdfaWRsZV9hZGQocmVpbnRlcnByZXRfY2Fz
dDxHU291cmNlRnVuYz4ocmVzcG9uZFRvUG9saWN5RGVjaXNpb25MYXRlciksIHRlc3QpOwotICAg
ICAgICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXNwb25kVG9Qb2xp
Y3lEZWNpc2lvbih0ZXN0LCBkZWNpc2lvbik7Ci0KLSAgICAgICAgLy8gV2UgcmV0dXJuIEZBTFNF
IGhlcmUgdG8gZW5zdXJlIHRoYXQgdGhlIGRlZmF1bHQgcG9saWN5IGRlY2lzaW9uCi0gICAgICAg
IC8vIGhhbmRsZXIgZG9lc24ndCBvdmVycmlkZSB3aGF0ZXZlciB3ZSB1c2UgaGVyZS4KLSAgICAg
ICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQotICAgIFBvbGljeURlY2lzaW9uUmVzcG9uc2UgbV9w
b2xpY3lEZWNpc2lvblJlc3BvbnNlOwotICAgIGludCBtX3BvbGljeURlY2lzaW9uVHlwZUZpbHRl
cjsKLSAgICBib29sIG1fcmVzcG9uZFRvUG9saWN5RGVjaXNpb25Bc3luY2hyb25vdXNseTsKLSAg
ICBib29sIG1faGFsdE1haW5Mb29wQWZ0ZXJNYWtpbmdEZWNpc2lvbjsKLSAgICBHUmVmUHRyPFdl
YktpdFBvbGljeURlY2lzaW9uPiBtX3ByZXZpb3VzUG9saWN5RGVjaXNpb247Ci19OwotCi1zdGF0
aWMgdm9pZCB0ZXN0TmF2aWdhdGlvblBvbGljeShQb2xpY3lDbGllbnRUZXN0KiB0ZXN0LCBnY29u
c3Rwb2ludGVyKQotewotICAgIHRlc3QtPm1fcG9saWN5RGVjaXNpb25UeXBlRmlsdGVyID0gV0VC
S0lUX1BPTElDWV9ERUNJU0lPTl9UWVBFX05BVklHQVRJT05fQUNUSU9OOwotCi0gICAgdGVzdC0+
bV9wb2xpY3lEZWNpc2lvblJlc3BvbnNlID0gUG9saWN5Q2xpZW50VGVzdDo6VXNlOwotICAgIHRl
c3QtPmxvYWRIdG1sKCI8aHRtbC8+IiwgImh0dHA6Ly93ZWJraXRndGsub3JnLyIpOwotICAgIHRl
c3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5t
X2xvYWRFdmVudHMuc2l6ZSgpLCA9PSwgMyk7Ci0KLSAgICAvLyBJZGVhbGx5IHdlJ2QgbGlrZSB0
byBoYXZlIGEgbW9yZSBpbnRlbnNpdmUgdGVzdCBoZXJlLCBidXQgaXQncyBzdGlsbCBwcmV0dHkg
dHJpY2t5Ci0gICAgLy8gdG8gdHJpZ2dlciBkaWZmZXJlbnQgdHlwZXMgb2YgbmF2aWdhdGlvbnMg
d2l0aCB0aGUgR1RLKyBXZWJLaXQyIEFQSS4KLSAgICBXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVj
aXNpb24qIGRlY2lzaW9uID0gV0VCS0lUX05BVklHQVRJT05fUE9MSUNZX0RFQ0lTSU9OKHRlc3Qt
Pm1fcHJldmlvdXNQb2xpY3lEZWNpc2lvbi5nZXQoKSk7Ci0gICAgZ19hc3NlcnRfY21waW50KHdl
YmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRfbmF2aWdhdGlvbl90eXBlKGRlY2lz
aW9uKSwgPT0sIFdFQktJVF9OQVZJR0FUSU9OX1RZUEVfT1RIRVIpOwotICAgIGdfYXNzZXJ0X2Nt
cGludCh3ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0X21vdXNlX2J1dHRvbihk
ZWNpc2lvbiksID09LCAwKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X25hdmlnYXRpb25f
cG9saWN5X2RlY2lzaW9uX2dldF9tb2RpZmllcnMoZGVjaXNpb24pLCA9PSwgMCk7Ci0gICAgZ19h
c3NlcnRfY21wc3RyKHdlYmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRfZnJhbWVf
bmFtZShkZWNpc2lvbiksID09LCAwKTsKLSAgICBXZWJLaXRVUklSZXF1ZXN0KiByZXF1ZXN0ID0g
d2Via2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF9yZXF1ZXN0KGRlY2lzaW9uKTsK
LSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3VyaV9yZXF1ZXN0X2dldF91cmkocmVxdWVzdCks
ID09LCAiaHR0cDovL3dlYmtpdGd0ay5vcmcvIik7Ci0KLSAgICB0ZXN0LT5tX3BvbGljeURlY2lz
aW9uUmVzcG9uc2UgPSBQb2xpY3lDbGllbnRUZXN0OjpVc2U7Ci0gICAgdGVzdC0+bV9yZXNwb25k
VG9Qb2xpY3lEZWNpc2lvbkFzeW5jaHJvbm91c2x5ID0gdHJ1ZTsKLSAgICB0ZXN0LT5sb2FkSHRt
bCgiPGh0bWwvPiIsICJodHRwOi8vd2Via2l0Z3RrLm9yZy8iKTsKLSAgICB0ZXN0LT53YWl0VW50
aWxMb2FkRmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRz
LnNpemUoKSwgPT0sIDMpOwotCi0gICAgLy8gSWYgd2UgYXJlIHdhaXRpbmcgdW50aWwgbG9hZCBj
b21wbGV0aW9uLCBpdCB3aWxsIG5ldmVyIGNvbXBsZXRlIGlmIHdlIGlnbm9yZSB0aGUKLSAgICAv
LyBuYXZpZ2F0aW9uLiBTbyB3ZSB0ZWxsIHRoZSBtYWluIGxvb3AgdG8gcXVpdCBzb21ldGltZSBs
YXRlci4KLSAgICB0ZXN0LT5tX3BvbGljeURlY2lzaW9uUmVzcG9uc2UgPSBQb2xpY3lDbGllbnRU
ZXN0OjpJZ25vcmU7Ci0gICAgdGVzdC0+bV9yZXNwb25kVG9Qb2xpY3lEZWNpc2lvbkFzeW5jaHJv
bm91c2x5ID0gZmFsc2U7Ci0gICAgdGVzdC0+bV9oYWx0TWFpbkxvb3BBZnRlck1ha2luZ0RlY2lz
aW9uID0gdHJ1ZTsKLSAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWwvPiIsICJodHRwOi8vd2Via2l0
Z3RrLm9yZy8iKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBnX2Fz
c2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0sIDApOwotCi0gICAgdGVz
dC0+bV9wb2xpY3lEZWNpc2lvblJlc3BvbnNlID0gUG9saWN5Q2xpZW50VGVzdDo6SWdub3JlOwot
ICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbC8+IiwgImh0dHA6Ly93ZWJraXRndGsub3JnLyIpOwot
ICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0
ZXN0LT5tX2xvYWRFdmVudHMuc2l6ZSgpLCA9PSwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RS
ZXNwb25zZVBvbGljeShQb2xpY3lDbGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewot
ICAgIHRlc3QtPm1fcG9saWN5RGVjaXNpb25UeXBlRmlsdGVyID0gV0VCS0lUX1BPTElDWV9ERUNJ
U0lPTl9UWVBFX1JFU1BPTlNFOwotCi0gICAgdGVzdC0+bV9wb2xpY3lEZWNpc2lvblJlc3BvbnNl
ID0gUG9saWN5Q2xpZW50VGVzdDo6VXNlOwotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0
VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVk
KCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50cy5zaXplKCksID09LCAz
KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzBdLCA9PSwgTG9hZFRy
YWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50
KHRlc3QtPm1fbG9hZEV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRDb21taXR0
ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMl0sID09LCBMb2Fk
VHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOwotCi0gICAgV2ViS2l0UmVzcG9uc2VQb2xpY3lE
ZWNpc2lvbiogZGVjaXNpb24gPSBXRUJLSVRfUkVTUE9OU0VfUE9MSUNZX0RFQ0lTSU9OKHRlc3Qt
Pm1fcHJldmlvdXNQb2xpY3lEZWNpc2lvbi5nZXQoKSk7Ci0gICAgV2ViS2l0VVJJUmVxdWVzdCog
cmVxdWVzdCA9IHdlYmtpdF9yZXNwb25zZV9wb2xpY3lfZGVjaXNpb25fZ2V0X3JlcXVlc3QoZGVj
aXNpb24pOwotICAgIGdfYXNzZXJ0KFdFQktJVF9JU19VUklfUkVRVUVTVChyZXF1ZXN0KSk7Ci0g
ICAgQVNTRVJUX0NNUF9DU1RSSU5HKHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfdXJpKHJlcXVlc3Qp
LCA9PSwga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpKTsKLSAgICBXZWJLaXRVUklSZXNwb25z
ZSogcmVzcG9uc2UgPSB3ZWJraXRfcmVzcG9uc2VfcG9saWN5X2RlY2lzaW9uX2dldF9yZXNwb25z
ZShkZWNpc2lvbik7Ci0gICAgZ19hc3NlcnQoV0VCS0lUX0lTX1VSSV9SRVNQT05TRShyZXNwb25z
ZSkpOwotICAgIEFTU0VSVF9DTVBfQ1NUUklORyh3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF91cmko
cmVzcG9uc2UpLCA9PSwga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpKTsKLSAgICBnX2Fzc2Vy
dCh3ZWJraXRfd2ViX3ZpZXdfY2FuX3Nob3dfbWltZV90eXBlKHRlc3QtPm1fd2ViVmlldywgd2Vi
a2l0X3VyaV9yZXNwb25zZV9nZXRfbWltZV90eXBlKHJlc3BvbnNlKSkgPT0KLSAgICAgICAgd2Vi
a2l0X3Jlc3BvbnNlX3BvbGljeV9kZWNpc2lvbl9pc19taW1lX3R5cGVfc3VwcG9ydGVkKGRlY2lz
aW9uKSk7Ci0KLSAgICB0ZXN0LT5tX3Jlc3BvbmRUb1BvbGljeURlY2lzaW9uQXN5bmNocm9ub3Vz
bHkgPSB0cnVlOwotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIp
LmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgZ19hc3Nl
cnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50cy5zaXplKCksID09LCAzKTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJv
dmlzaW9uYWxMb2FkU3RhcnRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2
ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRDb21taXR0ZWQpOwotICAgIGdfYXNz
ZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMl0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpM
b2FkRmluaXNoZWQpOwotCi0gICAgdGVzdC0+bV9yZXNwb25kVG9Qb2xpY3lEZWNpc2lvbkFzeW5j
aHJvbm91c2x5ID0gZmFsc2U7Ci0gICAgdGVzdC0+bV9wb2xpY3lEZWNpc2lvblJlc3BvbnNlID0g
UG9saWN5Q2xpZW50VGVzdDo6SWdub3JlOwotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0
VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVk
KCk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0s
IDMpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMF0sID09LCBMb2Fk
VHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsKLSAgICBnX2Fzc2VydF9jbXBp
bnQodGVzdC0+bV9sb2FkRXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9u
YWxMb2FkRmFpbGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzJd
LCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKLX0KLQotc3RydWN0IENyZWF0
ZUNhbGxiYWNrRGF0YSB7Ci0gICAgYm9vbCB0cmllZFRvT3BlbldpbmRvdzsKLSAgICBHTWFpbkxv
b3AqIG1haW5Mb29wOwotfTsKLQotc3RhdGljIFdlYktpdFdlYlZpZXcqIGNyZWF0ZUNhbGxiYWNr
KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIENyZWF0ZUNhbGxiYWNrRGF0YSogZGF0YSkKLXsKLSAg
ICBkYXRhLT50cmllZFRvT3BlbldpbmRvdyA9IHRydWU7Ci0gICAgZ19tYWluX2xvb3BfcXVpdChk
YXRhLT5tYWluTG9vcCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3ROZXdX
aW5kb3dQb2xpY3koUG9saWN5Q2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAg
ICBzdGF0aWMgY29uc3QgY2hhciogd2luZG93T3BlbmluZ0hUTUwgPQotICAgICAgICAiPGh0bWw+
PGJvZHk+IgotICAgICAgICAiICAgIDxhIGlkPVwibGlua1wiIGhyZWY9XCJodHRwOi8vd3d3Lmdv
b2dsZS5jb21cIiB0YXJnZXQ9XCJfYmxhbmtcIj5MaW5rPC9hPiIKLSAgICAgICAgIiAgICA8c2Ny
aXB0PiIKLSAgICAgICAgIiAgICAgICAgdmFyIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQo
J01vdXNlRXZlbnRzJyk7IgotICAgICAgICAiICAgICAgICBldmVudC5pbml0RXZlbnQoJ2NsaWNr
JywgdHJ1ZSwgZmFsc2UpOyIKLSAgICAgICAgIiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ2xpbmsnKS5kaXNwYXRjaEV2ZW50KGV2ZW50KTsiCi0gICAgICAgICIgICAgPC9zY3JpcHQ+
IgotICAgICAgICAiPC9ib2R5PjwvaHRtbD4iOwotICAgIHRlc3QtPm1fcG9saWN5RGVjaXNpb25U
eXBlRmlsdGVyID0gV0VCS0lUX1BPTElDWV9ERUNJU0lPTl9UWVBFX05FV19XSU5ET1dfQUNUSU9O
OwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfamF2YXNjcmlwdF9jYW5fb3Blbl93aW5kb3dzX2F1
dG9tYXRpY2FsbHkod2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh0ZXN0LT5tX3dlYlZpZXcp
LCBUUlVFKTsKLQotICAgIENyZWF0ZUNhbGxiYWNrRGF0YSBkYXRhOwotICAgIGRhdGEudHJpZWRU
b09wZW5XaW5kb3cgPSBmYWxzZTsKLSAgICBkYXRhLm1haW5Mb29wID0gdGVzdC0+bV9tYWluTG9v
cDsKLQotICAgIGdfc2lnbmFsX2Nvbm5lY3QodGVzdC0+bV93ZWJWaWV3LCAiY3JlYXRlIiwgR19D
QUxMQkFDSyhjcmVhdGVDYWxsYmFjayksICZkYXRhKTsKLSAgICB0ZXN0LT5tX3BvbGljeURlY2lz
aW9uUmVzcG9uc2UgPSBQb2xpY3lDbGllbnRUZXN0OjpVc2U7Ci0gICAgdGVzdC0+bG9hZEh0bWwo
d2luZG93T3BlbmluZ0hUTUwsICJodHRwOi8vd2Via2l0Z3RrLm9yZy8iKTsKLSAgICB0ZXN0LT53
YWl0KDEpOwotICAgIGdfYXNzZXJ0KGRhdGEudHJpZWRUb09wZW5XaW5kb3cpOwotCi0gICAgV2Vi
S2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uKiBkZWNpc2lvbiA9IFdFQktJVF9OQVZJR0FUSU9O
X1BPTElDWV9ERUNJU0lPTih0ZXN0LT5tX3ByZXZpb3VzUG9saWN5RGVjaXNpb24uZ2V0KCkpOwot
ICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0
X2ZyYW1lX25hbWUoZGVjaXNpb24pLCA9PSwgIl9ibGFuayIpOwotCi0gICAgLy8gVXNpbmcgYSBz
aG9ydCB0aW1lb3V0IGlzIGEgYml0IHVnbHkgaGVyZSwgYnV0IGl0J3MgaGFyZCB0byBnZXQgYXJv
dW5kIGJlY2F1c2UgaWYgd2UgYmxvY2sKLSAgICAvLyB0aGUgbmV3IHdpbmRvdyBzaWduYWwgd2Ug
Y2Fubm90IGhhbHQgdGhlIG1haW4gbG9vcCBpbiB0aGUgY3JlYXRlIGNhbGxiYWNrLiBJZiB3ZQot
ICAgIC8vIGhhbHQgdGhlIG1haW4gbG9vcCBpbiB0aGUgcG9saWN5IGRlY2lzaW9uLCB0aGUgY3Jl
YXRlIGNhbGxiYWNrIG5ldmVyIGV4ZWN1dGVzLgotICAgIGRhdGEudHJpZWRUb09wZW5XaW5kb3cg
PSBmYWxzZTsKLSAgICB0ZXN0LT5tX3BvbGljeURlY2lzaW9uUmVzcG9uc2UgPSBQb2xpY3lDbGll
bnRUZXN0OjpJZ25vcmU7Ci0gICAgdGVzdC0+bG9hZEh0bWwod2luZG93T3BlbmluZ0hUTUwsICJo
dHRwOi8vd2Via2l0Z3RrLm9yZy8iKTsKLSAgICB0ZXN0LT53YWl0KC4yKTsKLSAgICBnX2Fzc2Vy
dCghZGF0YS50cmllZFRvT3BlbldpbmRvdyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNlcnZlckNhbGxi
YWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IGNoYXIq
IHBhdGgsIEdIYXNoVGFibGUqLCBTb3VwQ2xpZW50Q29udGV4dCosIGdwb2ludGVyKQotewotICAg
IGlmIChtZXNzYWdlLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7Ci0gICAgICAgIHNvdXBf
bWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi8i
KSkgewotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogcmVzcG9uc2VTdHJpbmcgPSAiPGh0bWw+
PGJvZHk+VGVzdGluZyE8L2JvZHk+PC9odG1sPiI7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRf
c3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKLSAgICAgICAgc291cF9tZXNzYWdlX2Jv
ZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgcmVz
cG9uc2VTdHJpbmcsIHN0cmxlbihyZXNwb25zZVN0cmluZykpOwotICAgICAgICBzb3VwX21lc3Nh
Z2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKLSAgICB9IGVsc2UKLSAg
ICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0ZP
VU5EKTsKLX0KLQotdm9pZCBiZWZvcmVBbGwoKQotewotICAgIGtTZXJ2ZXIgPSBuZXcgV2ViS2l0
VGVzdFNlcnZlcigpOwotICAgIGtTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFjayk7Ci0KLSAgICBQ
b2xpY3lDbGllbnRUZXN0OjphZGQoIldlYktpdFBvbGljeUNsaWVudCIsICJuYXZpZ2F0aW9uLXBv
bGljeSIsIHRlc3ROYXZpZ2F0aW9uUG9saWN5KTsKLSAgICBQb2xpY3lDbGllbnRUZXN0OjphZGQo
IldlYktpdFBvbGljeUNsaWVudCIsICJyZXNwb25zZS1wb2xpY3kiLCB0ZXN0UmVzcG9uc2VQb2xp
Y3kpOwotICAgIFBvbGljeUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0UG9saWN5Q2xpZW50IiwgIm5l
dy13aW5kb3ctcG9saWN5IiwgdGVzdE5ld1dpbmRvd1BvbGljeSk7Ci19Ci0KLXZvaWQgYWZ0ZXJB
bGwoKQotewotICAgIGRlbGV0ZSBrU2VydmVyOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFNldHRpbmdzLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRTZXR0aW5ncy5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxZDMwMTguLjAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFNldHRpbmdzLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDM3MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAy
MDExIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dCBtb2RpZmljYXRpb24sIAotICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwg
Ci0gKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgCi0gKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciAK
LSAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IAotICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCAKLSAqIHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIAotICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIAotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIAot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCAKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiAKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyAKLSAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyAKLSAqIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIlRlc3RNYWluLmgiCi0jaW5jbHVkZSAi
V2ViVmlld1Rlc3QuaCIKLSNpbmNsdWRlICJXZWJLaXRUZXN0U2VydmVyLmgiCi0jaW5jbHVkZSA8
Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgotI2luY2x1ZGUgPHd0Zi9n
b2JqZWN0L0dSZWZQdHIuaD4KLQotc3RhdGljIFdlYktpdFRlc3RTZXJ2ZXIqIGdTZXJ2ZXI7Ci0K
LXN0YXRpYyB2b2lkIHRlc3RXZWJLaXRTZXR0aW5ncyhUZXN0KiwgZ2NvbnN0cG9pbnRlcikKLXsK
LSAgICBXZWJLaXRTZXR0aW5ncyogc2V0dGluZ3MgPSB3ZWJraXRfc2V0dGluZ3NfbmV3KCk7Ci0K
LSAgICAvLyBKYXZhU2NyaXB0IGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4KLSAgICBnX2Fzc2VydCh3
ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9qYXZhc2NyaXB0KHNldHRpbmdzKSk7Ci0gICAgd2Vi
a2l0X3NldHRpbmdzX3NldF9lbmFibGVfamF2YXNjcmlwdChzZXR0aW5ncywgRkFMU0UpOwotICAg
IGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9qYXZhc2NyaXB0KHNldHRpbmdz
KSk7Ci0KLSAgICAvLyBCeSBkZWZhdWx0IGF1dG8tbG9hZC1pbWFnZSBpcyB0cnVlLgotICAgIGdf
YXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfYXV0b19sb2FkX2ltYWdlcyhzZXR0aW5ncykpOwot
ICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfYXV0b19sb2FkX2ltYWdlcyhzZXR0aW5ncywgRkFMU0Up
OwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2F1dG9fbG9hZF9pbWFnZXMoc2V0
dGluZ3MpKTsKLQotICAgIC8vIGxvYWQtaWNvbnMtaWdub3JpbmctaW1hZ2UtbG9hZC1zZXR0aW5n
IGlzIGZhbHNlIGJ5IGRlZmF1bHQuCi0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRf
bG9hZF9pY29uc19pZ25vcmluZ19pbWFnZV9sb2FkX3NldHRpbmcoc2V0dGluZ3MpKTsKLSAgICB3
ZWJraXRfc2V0dGluZ3Nfc2V0X2xvYWRfaWNvbnNfaWdub3JpbmdfaW1hZ2VfbG9hZF9zZXR0aW5n
KHNldHRpbmdzLCBUUlVFKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2xvYWRf
aWNvbnNfaWdub3JpbmdfaW1hZ2VfbG9hZF9zZXR0aW5nKHNldHRpbmdzKSk7Ci0gICAgCi0gICAg
Ly8gT2ZmbGluZSBhcHBsaWNhdGlvbiBjYWNoZSBpcyB0cnVlIGJ5IGRlZmF1bHQuCi0gICAgZ19h
c3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfb2ZmbGluZV93ZWJfYXBwbGljYXRpb25f
Y2FjaGUoc2V0dGluZ3MpKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9vZmZsaW5l
X3dlYl9hcHBsaWNhdGlvbl9jYWNoZShzZXR0aW5ncywgRkFMU0UpOwotICAgIGdfYXNzZXJ0KCF3
ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9vZmZsaW5lX3dlYl9hcHBsaWNhdGlvbl9jYWNoZShz
ZXR0aW5ncykpOwotCi0gICAgLy8gTG9jYWwgc3RvcmFnZSBpcyBlbmFibGUgYnkgZGVmYXVsdC4K
LSAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9odG1sNV9sb2NhbF9zdG9y
YWdlKHNldHRpbmdzKSk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfaHRtbDVfbG9j
YWxfc3RvcmFnZShzZXR0aW5ncywgRkFMU0UpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGlu
Z3NfZ2V0X2VuYWJsZV9odG1sNV9sb2NhbF9zdG9yYWdlKHNldHRpbmdzKSk7Ci0KLSAgICAvLyBI
VE1MNSBkYXRhYmFzZSBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCi0gICAgZ19hc3NlcnQod2Via2l0
X3NldHRpbmdzX2dldF9lbmFibGVfaHRtbDVfZGF0YWJhc2Uoc2V0dGluZ3MpKTsKLSAgICB3ZWJr
aXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9odG1sNV9kYXRhYmFzZShzZXR0aW5ncywgRkFMU0UpOwot
ICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9odG1sNV9kYXRhYmFzZShz
ZXR0aW5ncykpOwotCi0gICAgLy8gWFNTIEF1ZGl0b3IgaXMgZW5hYmxlZCBieSBkZWZhdWx0Lgot
ICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3hzc19hdWRpdG9yKHNldHRp
bmdzKSk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfeHNzX2F1ZGl0b3Ioc2V0dGlu
Z3MsIEZBTFNFKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfeHNz
X2F1ZGl0b3Ioc2V0dGluZ3MpKTsKLQotICAgIC8vIEZyYW1lIGZsYXR0ZW5pbmcgaXMgZGlzYWJs
ZWQgYnkgZGVmYXVsdC4KLSAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVf
ZnJhbWVfZmxhdHRlbmluZyhzZXR0aW5ncykpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5h
YmxlX2ZyYW1lX2ZsYXR0ZW5pbmcoc2V0dGluZ3MsIFRSVUUpOwotICAgIGdfYXNzZXJ0KHdlYmtp
dF9zZXR0aW5nc19nZXRfZW5hYmxlX2ZyYW1lX2ZsYXR0ZW5pbmcoc2V0dGluZ3MpKTsKLQotICAg
IC8vIFBsdWdpbnMgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdC4KLSAgICBnX2Fzc2VydCh3ZWJraXRf
c2V0dGluZ3NfZ2V0X2VuYWJsZV9wbHVnaW5zKHNldHRpbmdzKSk7Ci0gICAgd2Via2l0X3NldHRp
bmdzX3NldF9lbmFibGVfcGx1Z2lucyhzZXR0aW5ncywgRkFMU0UpOwotICAgIGdfYXNzZXJ0KCF3
ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9wbHVnaW5zKHNldHRpbmdzKSk7Ci0KLSAgICAvLyBK
YXZhIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4KLSAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3Nf
Z2V0X2VuYWJsZV9qYXZhKHNldHRpbmdzKSk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFi
bGVfamF2YShzZXR0aW5ncywgRkFMU0UpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3Nf
Z2V0X2VuYWJsZV9qYXZhKHNldHRpbmdzKSk7Ci0KLSAgICAvLyBCeSBkZWZhdWx0LCBKYXZhU2Ny
aXB0IGNhbiBvcGVuIHdpbmRvd3MgYXV0b21hdGljYWxseSBpcyBkaXNhYmxlZC4KLSAgICBnX2Fz
c2VydCghd2Via2l0X3NldHRpbmdzX2dldF9qYXZhc2NyaXB0X2Nhbl9vcGVuX3dpbmRvd3NfYXV0
b21hdGljYWxseShzZXR0aW5ncykpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfamF2YXNjcmlw
dF9jYW5fb3Blbl93aW5kb3dzX2F1dG9tYXRpY2FsbHkoc2V0dGluZ3MsIFRSVUUpOwotICAgIGdf
YXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfamF2YXNjcmlwdF9jYW5fb3Blbl93aW5kb3dzX2F1
dG9tYXRpY2FsbHkoc2V0dGluZ3MpKTsKLQotICAgIC8vIEJ5IGRlZmF1bHQgaHlwZXIgbGluayBh
dWRpdGluZyBpcyBkaXNhYmxlZC4KLSAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9l
bmFibGVfaHlwZXJsaW5rX2F1ZGl0aW5nKHNldHRpbmdzKSk7Ci0gICAgd2Via2l0X3NldHRpbmdz
X3NldF9lbmFibGVfaHlwZXJsaW5rX2F1ZGl0aW5nKHNldHRpbmdzLCBUUlVFKTsKLSAgICBnX2Fz
c2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9oeXBlcmxpbmtfYXVkaXRpbmcoc2V0dGlu
Z3MpKTsKLQotICAgIC8vIERlZmF1bHQgZm9udCBmYW1pbHkgaXMgInNhbnMtc2VyaWYiLgotICAg
IGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2V0dGluZ3NfZ2V0X2RlZmF1bHRfZm9udF9mYW1pbHko
c2V0dGluZ3MpLCA9PSwgInNhbnMtc2VyaWYiKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2Rl
ZmF1bHRfZm9udF9mYW1pbHkoc2V0dGluZ3MsICJtb25vc3BhY2UiKTsKLSAgICBnX2Fzc2VydF9j
bXBzdHIod2Via2l0X3NldHRpbmdzX2dldF9kZWZhdWx0X2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwg
PT0sICJtb25vc3BhY2UiKTsKLQotICAgIC8vIERlZmF1bHQgbW9ub3NwYWNlIGZvbnQgZmFtaWx5
IGZvbnQgZmFtaWx5IGlzICJtb25vc3BhY2UiLgotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRf
c2V0dGluZ3NfZ2V0X21vbm9zcGFjZV9mb250X2ZhbWlseShzZXR0aW5ncyksID09LCAibW9ub3Nw
YWNlIik7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9tb25vc3BhY2VfZm9udF9mYW1pbHkoc2V0
dGluZ3MsICJzYW5zLXNlcmlmIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zZXR0aW5n
c19nZXRfbW9ub3NwYWNlX2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJzYW5zLXNlcmlmIik7
Ci0KLSAgICAvLyBEZWZhdWx0IHNlcmlmIGZvbnQgZmFtaWx5IGlzICJzZXJpZiIuCi0gICAgZ19h
c3NlcnRfY21wc3RyKHdlYmtpdF9zZXR0aW5nc19nZXRfc2VyaWZfZm9udF9mYW1pbHkoc2V0dGlu
Z3MpLCA9PSwgInNlcmlmIik7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9zZXJpZl9mb250X2Zh
bWlseShzZXR0aW5ncywgInNhbnMtc2VyaWYiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0
X3NldHRpbmdzX2dldF9zZXJpZl9mb250X2ZhbWlseShzZXR0aW5ncyksID09LCAic2Fucy1zZXJp
ZiIpOwotCi0gICAgLy8gRGVmYXVsdCBzYW5zIHNlcmlmIGZvbnQgZmFtaWx5IGlzICJzYW5zLXNl
cmlmIi4KLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NldHRpbmdzX2dldF9zYW5zX3Nlcmlm
X2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJzYW5zLXNlcmlmIik7Ci0gICAgd2Via2l0X3Nl
dHRpbmdzX3NldF9zYW5zX3NlcmlmX2ZvbnRfZmFtaWx5KHNldHRpbmdzLCAic2VyaWYiKTsKLSAg
ICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NldHRpbmdzX2dldF9zYW5zX3NlcmlmX2ZvbnRfZmFt
aWx5KHNldHRpbmdzKSwgPT0sICJzZXJpZiIpOwotCi0gICAgLy8gRGVmYXVsdCBjdXJzaXZlIGZv
bnQgZmFtaWx5ICJzZXJpZiIuCi0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zZXR0aW5nc19n
ZXRfY3Vyc2l2ZV9mb250X2ZhbWlseShzZXR0aW5ncyksID09LCAic2VyaWYiKTsKLSAgICB3ZWJr
aXRfc2V0dGluZ3Nfc2V0X2N1cnNpdmVfZm9udF9mYW1pbHkoc2V0dGluZ3MsICJzYW5zLXNlcmlm
Iik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zZXR0aW5nc19nZXRfY3Vyc2l2ZV9mb250
X2ZhbWlseShzZXR0aW5ncyksID09LCAic2Fucy1zZXJpZiIpOwotCi0gICAgLy8gRGVmYXVsdCBm
YW50YXN5IGZvbnQgZmFtaWx5IGlzICJzZXJpZiIuCi0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtp
dF9zZXR0aW5nc19nZXRfZmFudGFzeV9mb250X2ZhbWlseShzZXR0aW5ncyksID09LCAic2VyaWYi
KTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2ZhbnRhc3lfZm9udF9mYW1pbHkoc2V0dGluZ3Ms
ICJzYW5zLXNlcmlmIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zZXR0aW5nc19nZXRf
ZmFudGFzeV9mb250X2ZhbWlseShzZXR0aW5ncyksID09LCAic2Fucy1zZXJpZiIpOwotCi0gICAg
Ly8gRGVmYXVsdCBwaWN0b2dyYXBoIGZvbnQgZmFtaWx5IGlzICJzZXJpZiIuCi0gICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF9zZXR0aW5nc19nZXRfcGljdG9ncmFwaF9mb250X2ZhbWlseShzZXR0
aW5ncyksID09LCAic2VyaWYiKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X3BpY3RvZ3JhcGhf
Zm9udF9mYW1pbHkoc2V0dGluZ3MsICJzYW5zLXNlcmlmIik7Ci0gICAgZ19hc3NlcnRfY21wc3Ry
KHdlYmtpdF9zZXR0aW5nc19nZXRfcGljdG9ncmFwaF9mb250X2ZhbWlseShzZXR0aW5ncyksID09
LCAic2Fucy1zZXJpZiIpOwotCi0gICAgLy8gRGVmYXVsdCBmb250IHNpemUgaXMgMTYuCi0gICAg
Z19hc3NlcnRfY21wdWludCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2RlZmF1bHRfZm9udF9zaXplKHNl
dHRpbmdzKSwgPT0sIDE2KTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2RlZmF1bHRfZm9udF9z
aXplKHNldHRpbmdzLCAxNCk7Ci0gICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfc2V0dGluZ3Nf
Z2V0X2RlZmF1bHRfZm9udF9zaXplKHNldHRpbmdzKSwgPT0sIDE0KTsKLQotICAgIC8vIERlZmF1
bHQgbW9ub3NwYWNlIGZvbnQgc2l6ZSBpcyAxMy4KLSAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtp
dF9zZXR0aW5nc19nZXRfZGVmYXVsdF9tb25vc3BhY2VfZm9udF9zaXplKHNldHRpbmdzKSwgPT0s
IDEzKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2RlZmF1bHRfbW9ub3NwYWNlX2ZvbnRfc2l6
ZShzZXR0aW5ncywgMTApOwotICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X3NldHRpbmdzX2dl
dF9kZWZhdWx0X21vbm9zcGFjZV9mb250X3NpemUoc2V0dGluZ3MpLCA9PSwgMTApOwotCi0gICAg
Ly8gRGVmYXVsdCBtaW5pbXVtIGZvbnQgc2l6ZSBpcyAwLgotICAgIGdfYXNzZXJ0X2NtcHVpbnQo
d2Via2l0X3NldHRpbmdzX2dldF9taW5pbXVtX2ZvbnRfc2l6ZShzZXR0aW5ncyksID09LCAwKTsK
LSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X21pbmltdW1fZm9udF9zaXplKHNldHRpbmdzLCA3KTsK
LSAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9zZXR0aW5nc19nZXRfbWluaW11bV9mb250X3Np
emUoc2V0dGluZ3MpLCA9PSwgNyk7Ci0KLSAgICAvLyBEZWZhdWx0IGNoYXJzZXQgaXMgImlzby04
ODU5LTEiLgotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2V0dGluZ3NfZ2V0X2RlZmF1bHRf
Y2hhcnNldChzZXR0aW5ncyksID09LCAiaXNvLTg4NTktMSIpOwotICAgIHdlYmtpdF9zZXR0aW5n
c19zZXRfZGVmYXVsdF9jaGFyc2V0KHNldHRpbmdzLCAidXRmOCIpOwotICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfc2V0dGluZ3NfZ2V0X2RlZmF1bHRfY2hhcnNldChzZXR0aW5ncyksID09LCAi
dXRmOCIpOwotCi0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3ByaXZh
dGVfYnJvd3Npbmcoc2V0dGluZ3MpKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9w
cml2YXRlX2Jyb3dzaW5nKHNldHRpbmdzLCBUUlVFKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfc2V0
dGluZ3NfZ2V0X2VuYWJsZV9wcml2YXRlX2Jyb3dzaW5nKHNldHRpbmdzKSk7Ci0KLSAgICBnX2Fz
c2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfZGV2ZWxvcGVyX2V4dHJhcyhzZXR0aW5n
cykpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX2RldmVsb3Blcl9leHRyYXMoc2V0
dGluZ3MsIFRSVUUpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2Rl
dmVsb3Blcl9leHRyYXMoc2V0dGluZ3MpKTsKLQotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5n
c19nZXRfZW5hYmxlX3Jlc2l6YWJsZV90ZXh0X2FyZWFzKHNldHRpbmdzKSk7Ci0gICAgd2Via2l0
X3NldHRpbmdzX3NldF9lbmFibGVfcmVzaXphYmxlX3RleHRfYXJlYXMoc2V0dGluZ3MsIEZBTFNF
KTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfcmVzaXphYmxlX3Rl
eHRfYXJlYXMoc2V0dGluZ3MpKTsKLQotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRf
ZW5hYmxlX3RhYnNfdG9fbGlua3Moc2V0dGluZ3MpKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0
X2VuYWJsZV90YWJzX3RvX2xpbmtzKHNldHRpbmdzLCBGQUxTRSk7Ci0gICAgZ19hc3NlcnQoIXdl
YmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3RhYnNfdG9fbGlua3Moc2V0dGluZ3MpKTsKLQotICAg
IGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9kbnNfcHJlZmV0Y2hpbmcoc2V0
dGluZ3MpKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9kbnNfcHJlZmV0Y2hpbmco
c2V0dGluZ3MsIFRSVUUpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxl
X2Ruc19wcmVmZXRjaGluZyhzZXR0aW5ncykpOwotCi0gICAgLy8gQ2FyZXQgYnJvd3NpbmcgaXMg
ZGlzYWJsZWQgYnkgZGVmYXVsdC4KLSAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9l
bmFibGVfY2FyZXRfYnJvd3Npbmcoc2V0dGluZ3MpKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0
X2VuYWJsZV9jYXJldF9icm93c2luZyhzZXR0aW5ncywgVFJVRSk7Ci0gICAgZ19hc3NlcnQod2Vi
a2l0X3NldHRpbmdzX2dldF9lbmFibGVfY2FyZXRfYnJvd3Npbmcoc2V0dGluZ3MpKTsKLQotICAg
IC8vIEZ1bGxzY3JlZW4gSmF2YVNjcmlwdCBBUEkgaXMgZW5hYmxlZCBieSBkZWZhdWx0LgotICAg
IGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2Z1bGxzY3JlZW4oc2V0dGluZ3Mp
KTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9mdWxsc2NyZWVuKHNldHRpbmdzLCBG
QUxTRSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2Z1bGxzY3Jl
ZW4oc2V0dGluZ3MpKTsKLQotICAgIC8vIFByaW50IGJhY2tncm91bmRzIGlzIGVuYWJsZWQgYnkg
ZGVmYXVsdAotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfcHJpbnRfYmFja2dyb3Vu
ZHMoc2V0dGluZ3MpKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X3ByaW50X2JhY2tncm91bmRz
KHNldHRpbmdzLCBGQUxTRSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfcHJp
bnRfYmFja2dyb3VuZHMoc2V0dGluZ3MpKTsKLQotICAgIC8vIFdlYkF1ZGlvIGlzIGRpc2FibGVk
IGJ5IGRlZmF1bHQuCi0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3dl
YmF1ZGlvKHNldHRpbmdzKSk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfd2ViYXVk
aW8oc2V0dGluZ3MsIFRSVUUpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5h
YmxlX3dlYmF1ZGlvKHNldHRpbmdzKSk7Ci0KLSAgICAvLyBXZWJHTCBpcyBkaXNhYmxlZCBieSBk
ZWZhdWx0LgotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV93ZWJnbChz
ZXR0aW5ncykpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX3dlYmdsKHNldHRpbmdz
LCBUUlVFKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV93ZWJnbChz
ZXR0aW5ncykpOwotCi0gICAgLy8gQWxsb3cgTW9kYWwgRGlhbG9ncyBpcyBkaXNhYmxlZCBieSBk
ZWZhdWx0LgotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2FsbG93X21vZGFsX2Rp
YWxvZ3Moc2V0dGluZ3MpKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2FsbG93X21vZGFsX2Rp
YWxvZ3Moc2V0dGluZ3MsIFRSVUUpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRf
YWxsb3dfbW9kYWxfZGlhbG9ncyhzZXR0aW5ncykpOwotCi0gICAgLy8gWm9vbSB0ZXh0IG9ubHkg
aXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KLSAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dl
dF96b29tX3RleHRfb25seShzZXR0aW5ncykpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfem9v
bV90ZXh0X29ubHkoc2V0dGluZ3MsIFRSVUUpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5n
c19nZXRfem9vbV90ZXh0X29ubHkoc2V0dGluZ3MpKTsKLQotICAgIC8vIEJ5IGRlZmF1bHQsIEph
dmFTY3JpcHQgY2Fubm90IGFjY2VzcyB0aGUgY2xpcGJvYXJkLgotICAgIGdfYXNzZXJ0KCF3ZWJr
aXRfc2V0dGluZ3NfZ2V0X2phdmFzY3JpcHRfY2FuX2FjY2Vzc19jbGlwYm9hcmQoc2V0dGluZ3Mp
KTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2phdmFzY3JpcHRfY2FuX2FjY2Vzc19jbGlwYm9h
cmQoc2V0dGluZ3MsIFRSVUUpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfamF2
YXNjcmlwdF9jYW5fYWNjZXNzX2NsaXBib2FyZChzZXR0aW5ncykpOwotCi0gICAgLy8gQnkgZGVm
YXVsdCwgbWVkaWEgcGxheWJhY2sgZG9lc24ndCByZXF1aXJlIHVzZXIgZ2VzdHVyZXMuCi0gICAg
Z19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfbWVkaWFfcGxheWJhY2tfcmVxdWlyZXNfdXNl
cl9nZXN0dXJlKHNldHRpbmdzKSk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9tZWRpYV9wbGF5
YmFja19yZXF1aXJlc191c2VyX2dlc3R1cmUoc2V0dGluZ3MsIFRSVUUpOwotICAgIGdfYXNzZXJ0
KHdlYmtpdF9zZXR0aW5nc19nZXRfbWVkaWFfcGxheWJhY2tfcmVxdWlyZXNfdXNlcl9nZXN0dXJl
KHNldHRpbmdzKSk7Ci0KLSAgICAvLyBCeSBkZWZhdWx0LCBpbmxpbmUgbWVkaWEgcGxheWJhY2sg
aXMgYWxsb3dlZAotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfbWVkaWFfcGxheWJh
Y2tfYWxsb3dzX2lubGluZShzZXR0aW5ncykpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfbWVk
aWFfcGxheWJhY2tfYWxsb3dzX2lubGluZShzZXR0aW5ncywgRkFMU0UpOwotICAgIGdfYXNzZXJ0
KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X21lZGlhX3BsYXliYWNrX2FsbG93c19pbmxpbmUoc2V0dGlu
Z3MpKTsKLQotICAgIC8vIEJ5IGRlZmF1bHQsIGRlYnVnIGluZGljYXRvcnMgYXJlIGRpc2FibGVk
LgotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2RyYXdfY29tcG9zaXRpbmdfaW5k
aWNhdG9ycyhzZXR0aW5ncykpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZHJhd19jb21wb3Np
dGluZ19pbmRpY2F0b3JzKHNldHRpbmdzLCBUUlVFKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfc2V0
dGluZ3NfZ2V0X2RyYXdfY29tcG9zaXRpbmdfaW5kaWNhdG9ycyhzZXR0aW5ncykpOwotCi0gICAg
Ly8gQnkgZGVmYXVsdCwgc2l0ZSBzcGVjaWZpYyBxdWlya3MgYXJlIGRpc2FibGVkLgotICAgIGdf
YXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9zaXRlX3NwZWNpZmljX3F1aXJrcyhz
ZXR0aW5ncykpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX3NpdGVfc3BlY2lmaWNf
cXVpcmtzKHNldHRpbmdzLCBUUlVFKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0
X2VuYWJsZV9zaXRlX3NwZWNpZmljX3F1aXJrcyhzZXR0aW5ncykpOwotCi0gICAgLy8gQnkgZGVm
YXVsdCwgcGFnZSBjYWNoZSBpcyBlbmFibGVkLgotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5n
c19nZXRfZW5hYmxlX3BhZ2VfY2FjaGUoc2V0dGluZ3MpKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nf
c2V0X2VuYWJsZV9wYWdlX2NhY2hlKHNldHRpbmdzLCBGQUxTRSk7Ci0gICAgZ19hc3NlcnQoIXdl
YmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3BhZ2VfY2FjaGUoc2V0dGluZ3MpKTsKLQotICAgIC8v
IEJ5IGRlZmF1bHQsIHNtb290aCBzY3JvbGxpbmcgaXMgZGlzYWJsZWQuCi0gICAgZ19hc3NlcnQo
IXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3Ntb290aF9zY3JvbGxpbmcoc2V0dGluZ3MpKTsK
LSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9zbW9vdGhfc2Nyb2xsaW5nKHNldHRpbmdz
LCBUUlVFKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9zbW9vdGhf
c2Nyb2xsaW5nKHNldHRpbmdzKSk7Ci0KLSAgICAvLyBCeSBkZWZhdWx0LCBhY2NlbGVyYXRlZCAy
RCBjYW52YXMgaXMgZGlzYWJsZWQuCi0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRf
ZW5hYmxlX2FjY2VsZXJhdGVkXzJkX2NhbnZhcyhzZXR0aW5ncykpOwotICAgIHdlYmtpdF9zZXR0
aW5nc19zZXRfZW5hYmxlX2FjY2VsZXJhdGVkXzJkX2NhbnZhcyhzZXR0aW5ncywgVFJVRSk7Ci0g
ICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfYWNjZWxlcmF0ZWRfMmRfY2Fu
dmFzKHNldHRpbmdzKSk7Ci0KLSAgICAvLyBCeSBkZWZhdWx0LCB3cml0aW5nIG9mIGNvbnNvbGUg
bWVzc2FnZXMgdG8gc3Rkb3V0IGlzIGRpc2FibGVkLgotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0
dGluZ3NfZ2V0X2VuYWJsZV93cml0ZV9jb25zb2xlX21lc3NhZ2VzX3RvX3N0ZG91dChzZXR0aW5n
cykpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX3dyaXRlX2NvbnNvbGVfbWVzc2Fn
ZXNfdG9fc3Rkb3V0KHNldHRpbmdzLCBUUlVFKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGlu
Z3NfZ2V0X2VuYWJsZV93cml0ZV9jb25zb2xlX21lc3NhZ2VzX3RvX3N0ZG91dChzZXR0aW5ncykp
OwotCi0gICAgLy8gTWVkaWFTdHJlYW0gaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KLSAgICBnX2Fz
c2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfbWVkaWFfc3RyZWFtKHNldHRpbmdzKSk7
Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfbWVkaWFfc3RyZWFtKHNldHRpbmdzLCBU
UlVFKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9tZWRpYV9zdHJl
YW0oc2V0dGluZ3MpKTsKLQotICAgIC8vIEJ5IGRlZmF1bHQsIFNwYXRpYWxOYXZpZ2F0aW9uIGlz
IGRpc2FibGVkCi0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3NwYXRp
YWxfbmF2aWdhdGlvbihzZXR0aW5ncykpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxl
X3NwYXRpYWxfbmF2aWdhdGlvbihzZXR0aW5ncywgVFJVRSk7Ci0gICAgZ19hc3NlcnQod2Via2l0
X3NldHRpbmdzX2dldF9lbmFibGVfc3BhdGlhbF9uYXZpZ2F0aW9uKHNldHRpbmdzKSk7Ci0KLSAg
ICAvLyBNZWRpYVNvdXJjZSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0Ci0gICAgZ19hc3NlcnQoIXdl
YmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX21lZGlhc291cmNlKHNldHRpbmdzKSk7Ci0gICAgd2Vi
a2l0X3NldHRpbmdzX3NldF9lbmFibGVfbWVkaWFzb3VyY2Uoc2V0dGluZ3MsIFRSVUUpOwotICAg
IGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX21lZGlhc291cmNlKHNldHRpbmdz
KSk7Ci0KLSAgICBnX29iamVjdF91bnJlZihHX09CSkVDVChzZXR0aW5ncykpOwotfQotCi12b2lk
IHRlc3RXZWJLaXRTZXR0aW5nc05ld1dpdGhTZXR0aW5ncyhUZXN0KiB0ZXN0LCBnY29uc3Rwb2lu
dGVyKQotewotICAgIEdSZWZQdHI8V2ViS2l0U2V0dGluZ3M+IHNldHRpbmdzID0gYWRvcHRHUmVm
KHdlYmtpdF9zZXR0aW5nc19uZXdfd2l0aF9zZXR0aW5ncygiZW5hYmxlLWphdmFzY3JpcHQiLCBG
QUxTRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImF1dG8tbG9hZC1pbWFnZXMiLCBGQUxT
RSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxvYWQtaWNvbnMtaWdub3JpbmctaW1hZ2Ut
bG9hZC1zZXR0aW5nIiwgVFJVRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCkpOwot
ICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1Qo
c2V0dGluZ3MuZ2V0KCkpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFi
bGVfamF2YXNjcmlwdChzZXR0aW5ncy5nZXQoKSkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0
dGluZ3NfZ2V0X2F1dG9fbG9hZF9pbWFnZXMoc2V0dGluZ3MuZ2V0KCkpKTsKLSAgICBnX2Fzc2Vy
dCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2xvYWRfaWNvbnNfaWdub3JpbmdfaW1hZ2VfbG9hZF9zZXR0
aW5nKHNldHRpbmdzLmdldCgpKSk7Ci19Ci0KLXN0YXRpYyBDU3RyaW5nIGNvbnZlcnRXZWJWaWV3
TWFpblJlc291cmNlRGF0YVRvQ1N0cmluZyhXZWJWaWV3VGVzdCogdGVzdCkKLXsKLSAgICBzaXpl
X3QgbWFpblJlc291cmNlRGF0YVNpemUgPSAwOwotICAgIGNvbnN0IGNoYXIqIG1haW5SZXNvdXJj
ZURhdGEgPSB0ZXN0LT5tYWluUmVzb3VyY2VEYXRhKG1haW5SZXNvdXJjZURhdGFTaXplKTsKLSAg
ICByZXR1cm4gQ1N0cmluZyhtYWluUmVzb3VyY2VEYXRhLCBtYWluUmVzb3VyY2VEYXRhU2l6ZSk7
Ci19Ci0KLXN0YXRpYyB2b2lkIGFzc2VydFRoYXRVc2VyQWdlbnRJc1NlbnRJbkhlYWRlcnMoV2Vi
Vmlld1Rlc3QqIHRlc3QsIGNvbnN0IENTdHJpbmcmIHVzZXJBZ2VudCkKLXsKLSAgICB0ZXN0LT5s
b2FkVVJJKGdTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi8iKS5kYXRhKCkpOwotICAgIHRlc3QtPndh
aXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIEFTU0VSVF9DTVBfQ1NUUklORyhjb252ZXJ0V2Vi
Vmlld01haW5SZXNvdXJjZURhdGFUb0NTdHJpbmcodGVzdCksID09LCB1c2VyQWdlbnQpOwotfQot
Ci1zdGF0aWMgdm9pZCB0ZXN0V2ViS2l0U2V0dGluZ3NVc2VyQWdlbnQoV2ViVmlld1Rlc3QqIHRl
c3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgR1JlZlB0cjxXZWJLaXRTZXR0aW5ncz4gc2V0dGlu
Z3MgPSBhZG9wdEdSZWYod2Via2l0X3NldHRpbmdzX25ldygpKTsKLSAgICBDU3RyaW5nIGRlZmF1
bHRVc2VyQWdlbnQgPSB3ZWJraXRfc2V0dGluZ3NfZ2V0X3VzZXJfYWdlbnQoc2V0dGluZ3MuZ2V0
KCkpOwotICAgIHdlYmtpdF93ZWJfdmlld19zZXRfc2V0dGluZ3ModGVzdC0+bV93ZWJWaWV3LCBz
ZXR0aW5ncy5nZXQoKSk7Ci0KLSAgICBnX2Fzc2VydChnX3N0cnN0cl9sZW4oZGVmYXVsdFVzZXJB
Z2VudC5kYXRhKCksIC0xLCAiQXBwbGVXZWJLaXQiKSk7Ci0gICAgZ19hc3NlcnQoZ19zdHJzdHJf
bGVuKGRlZmF1bHRVc2VyQWdlbnQuZGF0YSgpLCAtMSwgIlNhZmFyaSIpKTsKLQotICAgIHdlYmtp
dF9zZXR0aW5nc19zZXRfdXNlcl9hZ2VudChzZXR0aW5ncy5nZXQoKSwgMCk7Ci0gICAgZ19hc3Nl
cnRfY21wc3RyKGRlZmF1bHRVc2VyQWdlbnQuZGF0YSgpLCA9PSwgd2Via2l0X3NldHRpbmdzX2dl
dF91c2VyX2FnZW50KHNldHRpbmdzLmdldCgpKSk7Ci0gICAgYXNzZXJ0VGhhdFVzZXJBZ2VudElz
U2VudEluSGVhZGVycyh0ZXN0LCBkZWZhdWx0VXNlckFnZW50LmRhdGEoKSk7Ci0KLSAgICB3ZWJr
aXRfc2V0dGluZ3Nfc2V0X3VzZXJfYWdlbnQoc2V0dGluZ3MuZ2V0KCksICIiKTsKLSAgICBnX2Fz
c2VydF9jbXBzdHIoZGVmYXVsdFVzZXJBZ2VudC5kYXRhKCksID09LCB3ZWJraXRfc2V0dGluZ3Nf
Z2V0X3VzZXJfYWdlbnQoc2V0dGluZ3MuZ2V0KCkpKTsKLQotICAgIGNvbnN0IGNoYXIqIGZ1bmt5
VXNlckFnZW50ID0gIkZ1bmt5ISI7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF91c2VyX2FnZW50
KHNldHRpbmdzLmdldCgpLCBmdW5reVVzZXJBZ2VudCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKGZ1
bmt5VXNlckFnZW50LCA9PSwgd2Via2l0X3NldHRpbmdzX2dldF91c2VyX2FnZW50KHNldHRpbmdz
LmdldCgpKSk7Ci0gICAgYXNzZXJ0VGhhdFVzZXJBZ2VudElzU2VudEluSGVhZGVycyh0ZXN0LCBm
dW5reVVzZXJBZ2VudCk7Ci0KLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X3VzZXJfYWdlbnRfd2l0
aF9hcHBsaWNhdGlvbl9kZXRhaWxzKHNldHRpbmdzLmdldCgpLCAiV2ViS2l0R1RLKyIsIDApOwot
ICAgIGNvbnN0IGNoYXIqIHVzZXJBZ2VudFdpdGhOdWxsVmVyc2lvbiA9IHdlYmtpdF9zZXR0aW5n
c19nZXRfdXNlcl9hZ2VudChzZXR0aW5ncy5nZXQoKSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKGdf
c3Ryc3RyX2xlbih1c2VyQWdlbnRXaXRoTnVsbFZlcnNpb24sIC0xLCBkZWZhdWx0VXNlckFnZW50
LmRhdGEoKSksID09LCB1c2VyQWdlbnRXaXRoTnVsbFZlcnNpb24pOwotICAgIGdfYXNzZXJ0KGdf
c3Ryc3RyX2xlbih1c2VyQWdlbnRXaXRoTnVsbFZlcnNpb24sIC0xLCAiV2ViS2l0R1RLKyIpKTsK
LQotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfdXNlcl9hZ2VudF93aXRoX2FwcGxpY2F0aW9uX2Rl
dGFpbHMoc2V0dGluZ3MuZ2V0KCksICJXZWJLaXRHVEsrIiwgIiIpOwotICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfc2V0dGluZ3NfZ2V0X3VzZXJfYWdlbnQoc2V0dGluZ3MuZ2V0KCkpLCA9PSwg
dXNlckFnZW50V2l0aE51bGxWZXJzaW9uKTsKLQotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfdXNl
cl9hZ2VudF93aXRoX2FwcGxpY2F0aW9uX2RldGFpbHMoc2V0dGluZ3MuZ2V0KCksICJXZWJDYXRH
VEsrIiwgIjMuNC41Iik7Ci0gICAgY29uc3QgY2hhciogbmV3VXNlckFnZW50ID0gd2Via2l0X3Nl
dHRpbmdzX2dldF91c2VyX2FnZW50KHNldHRpbmdzLmdldCgpKTsKLSAgICBnX2Fzc2VydChnX3N0
cnN0cl9sZW4obmV3VXNlckFnZW50LCAtMSwgIjMuNC41IikpOwotICAgIGdfYXNzZXJ0KGdfc3Ry
c3RyX2xlbihuZXdVc2VyQWdlbnQsIC0xLCAiV2ViQ2F0R1RLKyIpKTsKLX0KLQotc3RhdGljIHZv
aWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbWVzc2Fn
ZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSosIFNvdXBDbGllbnRDb250ZXh0KiwgZ3Bv
aW50ZXIpCi17Ci0gICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsK
LSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9U
X0lNUExFTUVOVEVEKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChnX3N0cl9l
cXVhbChwYXRoLCAiLyIpKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIHVzZXJBZ2VudCA9IHNvdXBf
bWVzc2FnZV9oZWFkZXJzX2dldF9vbmUobWVzc2FnZS0+cmVxdWVzdF9oZWFkZXJzLCAiVXNlci1B
Z2VudCIpOwotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NU
QVRVU19PSyk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNw
b25zZV9ib2R5LCBTT1VQX01FTU9SWV9DT1BZLCB1c2VyQWdlbnQsIHN0cmxlbih1c2VyQWdlbnQp
KTsKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2Vf
Ym9keSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3Nh
Z2UsIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7Ci19Ci0KLXZvaWQgYmVmb3JlQWxsKCkKLXsKLSAg
ICBnU2VydmVyID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIoKTsKLSAgICBnU2VydmVyLT5ydW4oc2Vy
dmVyQ2FsbGJhY2spOwotCi0gICAgVGVzdDo6YWRkKCJXZWJLaXRTZXR0aW5ncyIsICJ3ZWJraXQt
c2V0dGluZ3MiLCB0ZXN0V2ViS2l0U2V0dGluZ3MpOwotICAgIFRlc3Q6OmFkZCgiV2ViS2l0U2V0
dGluZ3MiLCAibmV3LXdpdGgtc2V0dGluZ3MiLCB0ZXN0V2ViS2l0U2V0dGluZ3NOZXdXaXRoU2V0
dGluZ3MpOwotICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFNldHRpbmdzIiwgInVzZXItYWdl
bnQiLCB0ZXN0V2ViS2l0U2V0dGluZ3NVc2VyQWdlbnQpOwotfQotCi12b2lkIGFmdGVyQWxsKCkK
LXsKLSAgICBkZWxldGUgZ1NlcnZlcjsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFZlcnNpb24uY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFZlcnNpb24uY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzQ3ZmY5Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRWZXJzaW9uLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdh
bGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiwxIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIlRlc3RNYWluLmgiCi0j
aW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgotCi0KLXN0
YXRpYyB2b2lkIHRlc3RXZWJLaXRWZXJzaW9uKFRlc3QqLCBnY29uc3Rwb2ludGVyKQotewotICAg
IGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2dldF9tYWpvcl92ZXJzaW9uKCksID09LCBXRUJLSVRf
TUFKT1JfVkVSU0lPTik7Ci0gICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfZ2V0X21pbm9yX3Zl
cnNpb24oKSwgPT0sIFdFQktJVF9NSU5PUl9WRVJTSU9OKTsKLSAgICBnX2Fzc2VydF9jbXB1aW50
KHdlYmtpdF9nZXRfbWljcm9fdmVyc2lvbigpLCA9PSwgV0VCS0lUX01JQ1JPX1ZFUlNJT04pOwot
fQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViS2l0Q2hlY2tWZXJzaW9uKFRlc3QqLCBnY29uc3Rwb2lu
dGVyKQotewotICAgIGdfYXNzZXJ0KFdFQktJVF9DSEVDS19WRVJTSU9OKFdFQktJVF9NQUpPUl9W
RVJTSU9OLCBXRUJLSVRfTUlOT1JfVkVSU0lPTiwgV0VCS0lUX01JQ1JPX1ZFUlNJT04pKTsKLSAg
ICBnX2Fzc2VydCghV0VCS0lUX0NIRUNLX1ZFUlNJT04oV0VCS0lUX01BSk9SX1ZFUlNJT04gKyAx
LCBXRUJLSVRfTUlOT1JfVkVSU0lPTiwgV0VCS0lUX01JQ1JPX1ZFUlNJT04pKTsKLSAgICBnX2Fz
c2VydCghV0VCS0lUX0NIRUNLX1ZFUlNJT04oV0VCS0lUX01BSk9SX1ZFUlNJT04sIFdFQktJVF9N
SU5PUl9WRVJTSU9OICsgMSwgV0VCS0lUX01JQ1JPX1ZFUlNJT04pKTsKLSAgICBnX2Fzc2VydCgh
V0VCS0lUX0NIRUNLX1ZFUlNJT04oV0VCS0lUX01BSk9SX1ZFUlNJT04sIFdFQktJVF9NSU5PUl9W
RVJTSU9OLCBXRUJLSVRfTUlDUk9fVkVSU0lPTiArIDEpKTsKLX0KLQotdm9pZCBiZWZvcmVBbGwo
KQotewotICAgIFRlc3Q6OmFkZCgiV2ViS2l0VmVyc2lvbiIsICJ2ZXJzaW9uIiwgdGVzdFdlYktp
dFZlcnNpb24pOwotICAgIFRlc3Q6OmFkZCgiV2ViS2l0VmVyc2lvbiIsICJjaGVjay12ZXJzaW9u
IiwgdGVzdFdlYktpdENoZWNrVmVyc2lvbik7Ci19Ci0KLXZvaWQgYWZ0ZXJBbGwoKQotewotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdl
YktpdFdlYkNvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvVGVzdFdlYktpdFdlYkNvbnRleHQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA5MzBmNDA2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL1Rlc3RXZWJLaXRXZWJDb250ZXh0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQyNSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0KLSNpbmNsdWRlICJMb2FkVHJhY2tpbmdUZXN0LmgiCi0jaW5jbHVkZSAiV2Vi
S2l0VGVzdFNlcnZlci5oIgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3ZWJraXQy
L3dlYmtpdDIuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9nb2Jq
ZWN0L0dPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotCi1zdGF0aWMgV2ViS2l0VGVzdFNlcnZlcioga1Nl
cnZlcjsKLQotc3RhdGljIHZvaWQgdGVzdFdlYkNvbnRleHREZWZhdWx0KFRlc3QqIHRlc3QsIGdj
b25zdHBvaW50ZXIpCi17Ci0gICAgLy8gQ2hlY2sgdGhlcmUncyBhIHNpbmdsZSBpbnN0YW5jZSBv
ZiB0aGUgZGVmYXVsdCB3ZWIgY29udGV4dC4KLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2NvbnRl
eHRfZ2V0X2RlZmF1bHQoKSA9PSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSk7Ci19
Ci0KLWNsYXNzIFBsdWdpbnNUZXN0OiBwdWJsaWMgVGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9H
TElCX1RFU1RfRklYVFVSRShQbHVnaW5zVGVzdCk7Ci0KLSAgICBQbHVnaW5zVGVzdCgpCi0gICAg
ICAgIDogbV9jb250ZXh0KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpKQotICAgICAg
ICAsIG1fbWFpbkxvb3AoZ19tYWluX2xvb3BfbmV3KDAsIFRSVUUpKQotICAgICAgICAsIG1fcGx1
Z2lucygwKQotICAgIHsKLSAgICAgICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF9hZGRpdGlvbmFs
X3BsdWdpbnNfZGlyZWN0b3J5KG1fY29udGV4dCwgV0VCS0lUX1RFU1RfUExVR0lOX0RJUik7Ci0g
ICAgfQotCi0gICAgflBsdWdpbnNUZXN0KCkKLSAgICB7Ci0gICAgICAgIGdfbWFpbl9sb29wX3Vu
cmVmKG1fbWFpbkxvb3ApOwotICAgICAgICBnX2xpc3RfZnJlZV9mdWxsKG1fcGx1Z2lucywgZ19v
YmplY3RfdW5yZWYpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGdldFBsdWdpbnNBc3luY1Jl
YWR5Q2FsbGJhY2soR09iamVjdCosIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBQbHVnaW5zVGVzdCog
dGVzdCkKLSAgICB7Ci0gICAgICAgIHRlc3QtPm1fcGx1Z2lucyA9IHdlYmtpdF93ZWJfY29udGV4
dF9nZXRfcGx1Z2luc19maW5pc2godGVzdC0+bV9jb250ZXh0LCByZXN1bHQsIDApOwotICAgICAg
ICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIEdMaXN0
KiBnZXRQbHVnaW5zKCkKLSAgICB7Ci0gICAgICAgIGdfbGlzdF9mcmVlX2Z1bGwobV9wbHVnaW5z
LCBnX29iamVjdF91bnJlZik7Ci0gICAgICAgIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfcGx1Z2lu
cyhtX2NvbnRleHQsIDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4oZ2V0
UGx1Z2luc0FzeW5jUmVhZHlDYWxsYmFjayksIHRoaXMpOwotICAgICAgICBnX21haW5fbG9vcF9y
dW4obV9tYWluTG9vcCk7Ci0gICAgICAgIHJldHVybiBtX3BsdWdpbnM7Ci0gICAgfQotCi0gICAg
V2ViS2l0V2ViQ29udGV4dCogbV9jb250ZXh0OwotICAgIEdNYWluTG9vcCogbV9tYWluTG9vcDsK
LSAgICBHTGlzdCogbV9wbHVnaW5zOwotfTsKLQotc3RhdGljIHZvaWQgdGVzdFdlYkNvbnRleHRH
ZXRQbHVnaW5zKFBsdWdpbnNUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIEdMaXN0
KiBwbHVnaW5zID0gdGVzdC0+Z2V0UGx1Z2lucygpOwotICAgIGdfYXNzZXJ0KHBsdWdpbnMpOwot
Ci0gICAgR1JlZlB0cjxXZWJLaXRQbHVnaW4+IHRlc3RQbHVnaW47Ci0gICAgZm9yIChHTGlzdCog
aXRlbSA9IHBsdWdpbnM7IGl0ZW07IGl0ZW0gPSBnX2xpc3RfbmV4dChpdGVtKSkgewotICAgICAg
ICBXZWJLaXRQbHVnaW4qIHBsdWdpbiA9IFdFQktJVF9QTFVHSU4oaXRlbS0+ZGF0YSk7Ci0gICAg
ICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1Qo
cGx1Z2luKSk7Ci0gICAgICAgIGlmICghZ19zdHJjbXAwKHdlYmtpdF9wbHVnaW5fZ2V0X25hbWUo
cGx1Z2luKSwgIldlYktpdCBUZXN0IFBsdWdJbiIpKSB7Ci0gICAgICAgICAgICB0ZXN0UGx1Z2lu
ID0gcGx1Z2luOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZ19h
c3NlcnQoV0VCS0lUX0lTX1BMVUdJTih0ZXN0UGx1Z2luLmdldCgpKSk7Ci0KLSAgICBHT3duUHRy
PGNoYXI+IHBsdWdpblBhdGgoZ19idWlsZF9maWxlbmFtZShXRUJLSVRfVEVTVF9QTFVHSU5fRElS
LCAibGliVGVzdE5ldHNjYXBlUGx1Z2luLnNvIiwgTlVMTCkpOwotICAgIGdfYXNzZXJ0X2NtcHN0
cih3ZWJraXRfcGx1Z2luX2dldF9wYXRoKHRlc3RQbHVnaW4uZ2V0KCkpLCA9PSwgcGx1Z2luUGF0
aC5nZXQoKSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9wbHVnaW5fZ2V0X2Rlc2NyaXB0
aW9uKHRlc3RQbHVnaW4uZ2V0KCkpLCA9PSwgIlNpbXBsZSBOZXRzY2FwZcKuIHBsdWctaW4gdGhh
dCBoYW5kbGVzIHRlc3QgY29udGVudCBmb3IgV2ViS2l0Iik7Ci0gICAgR0xpc3QqIG1pbWVJbmZv
TGlzdCA9IHdlYmtpdF9wbHVnaW5fZ2V0X21pbWVfaW5mb19saXN0KHRlc3RQbHVnaW4uZ2V0KCkp
OwotICAgIGdfYXNzZXJ0KG1pbWVJbmZvTGlzdCk7Ci0gICAgZ19hc3NlcnRfY21wdWludChnX2xp
c3RfbGVuZ3RoKG1pbWVJbmZvTGlzdCksID09LCAyKTsKLQotICAgIFdlYktpdE1pbWVJbmZvKiBt
aW1lSW5mbyA9IHN0YXRpY19jYXN0PFdlYktpdE1pbWVJbmZvKj4obWltZUluZm9MaXN0LT5kYXRh
KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X21pbWVfaW5mb19nZXRfbWltZV90eXBlKG1p
bWVJbmZvKSwgPT0sICJpbWFnZS9wbmciKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X21p
bWVfaW5mb19nZXRfZGVzY3JpcHRpb24obWltZUluZm8pLCA9PSwgInBuZyBpbWFnZSIpOwotICAg
IGNvbnN0IGdjaGFyKiBjb25zdCogZXh0ZW5zaW9ucyA9IHdlYmtpdF9taW1lX2luZm9fZ2V0X2V4
dGVuc2lvbnMobWltZUluZm8pOwotICAgIGdfYXNzZXJ0KGV4dGVuc2lvbnMpOwotICAgIGdfYXNz
ZXJ0X2NtcHN0cihleHRlbnNpb25zWzBdLCA9PSwgInBuZyIpOwotCi0gICAgbWltZUluZm9MaXN0
ID0gZ19saXN0X25leHQobWltZUluZm9MaXN0KTsKLSAgICBtaW1lSW5mbyA9IHN0YXRpY19jYXN0
PFdlYktpdE1pbWVJbmZvKj4obWltZUluZm9MaXN0LT5kYXRhKTsKLSAgICBnX2Fzc2VydF9jbXBz
dHIod2Via2l0X21pbWVfaW5mb19nZXRfbWltZV90eXBlKG1pbWVJbmZvKSwgPT0sICJhcHBsaWNh
dGlvbi94LXdlYmtpdC10ZXN0LW5ldHNjYXBlIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtp
dF9taW1lX2luZm9fZ2V0X2Rlc2NyaXB0aW9uKG1pbWVJbmZvKSwgPT0sICJ0ZXN0IG5ldHNjYXBl
IGNvbnRlbnQiKTsKLSAgICBleHRlbnNpb25zID0gd2Via2l0X21pbWVfaW5mb19nZXRfZXh0ZW5z
aW9ucyhtaW1lSW5mbyk7Ci0gICAgZ19hc3NlcnQoZXh0ZW5zaW9ucyk7Ci0gICAgZ19hc3NlcnRf
Y21wc3RyKGV4dGVuc2lvbnNbMF0sID09LCAidGVzdG5ldHNjYXBlIik7Ci19Ci0KLXN0YXRpYyBj
b25zdCBjaGFyKiBrQmFySFRNTCA9ICI8aHRtbD48Ym9keT5CYXI8L2JvZHk+PC9odG1sPiI7Ci1z
dGF0aWMgY29uc3QgY2hhcioga0VjaG9IVE1MRm9ybWF0ID0gIjxodG1sPjxib2R5PiVzPC9ib2R5
PjwvaHRtbD4iOwotc3RhdGljIGNvbnN0IGNoYXIqIGVycm9yRG9tYWluID0gInRlc3QiOwotc3Rh
dGljIGNvbnN0IGludCBlcnJvckNvZGUgPSAxMDsKLXN0YXRpYyBjb25zdCBjaGFyKiBlcnJvck1l
c3NhZ2UgPSAiRXJyb3IgbWVzc2FnZS4iOwotCi1jbGFzcyBVUklTY2hlbWVUZXN0OiBwdWJsaWMg
TG9hZFRyYWNraW5nVGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShV
UklTY2hlbWVUZXN0KTsKLQotICAgIHN0cnVjdCBVUklTY2hlbWVIYW5kbGVyIHsKLSAgICAgICAg
VVJJU2NoZW1lSGFuZGxlcigpCi0gICAgICAgICAgICA6IHJlcGx5TGVuZ3RoKDApCi0gICAgICAg
IHsKLSAgICAgICAgfQotCi0gICAgICAgIFVSSVNjaGVtZUhhbmRsZXIoY29uc3QgY2hhciogcmVw
bHksIGludCByZXBseUxlbmd0aCwgY29uc3QgY2hhciogbWltZVR5cGUpCi0gICAgICAgICAgICA6
IHJlcGx5KHJlcGx5KQotICAgICAgICAgICAgLCByZXBseUxlbmd0aChyZXBseUxlbmd0aCkKLSAg
ICAgICAgICAgICwgbWltZVR5cGUobWltZVR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0g
ICAgICAgIENTdHJpbmcgcmVwbHk7Ci0gICAgICAgIGludCByZXBseUxlbmd0aDsKLSAgICAgICAg
Q1N0cmluZyBtaW1lVHlwZTsKLSAgICB9OwotCi0gICAgc3RhdGljIHZvaWQgdXJpU2NoZW1lUmVx
dWVzdENhbGxiYWNrKFdlYktpdFVSSVNjaGVtZVJlcXVlc3QqIHJlcXVlc3QsIGdwb2ludGVyIHVz
ZXJEYXRhKQotICAgIHsKLSAgICAgICAgVVJJU2NoZW1lVGVzdCogdGVzdCA9IHN0YXRpY19jYXN0
PFVSSVNjaGVtZVRlc3QqPih1c2VyRGF0YSk7Ci0gICAgICAgIHRlc3QtPm1fdXJpU2NoZW1lUmVx
dWVzdCA9IHJlcXVlc3Q7Ci0gICAgICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5U
ZXN0RmluaXNoZXMoR19PQkpFQ1QocmVxdWVzdCkpOwotCi0gICAgICAgIGdfYXNzZXJ0KHdlYmtp
dF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0X3dlYl92aWV3KHJlcXVlc3QpID09IHRlc3QtPm1fd2Vi
Vmlldyk7Ci0KLSAgICAgICAgR1JlZlB0cjxHSW5wdXRTdHJlYW0+IGlucHV0U3RyZWFtID0gYWRv
cHRHUmVmKGdfbWVtb3J5X2lucHV0X3N0cmVhbV9uZXcoKSk7Ci0gICAgICAgIHRlc3QtPmFzc2Vy
dE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QoaW5wdXRTdHJlYW0uZ2V0
KCkpKTsKLQotICAgICAgICBjb25zdCBjaGFyKiBzY2hlbWUgPSB3ZWJraXRfdXJpX3NjaGVtZV9y
ZXF1ZXN0X2dldF9zY2hlbWUocmVxdWVzdCk7Ci0gICAgICAgIGdfYXNzZXJ0KHNjaGVtZSk7Ci0g
ICAgICAgIGdfYXNzZXJ0KHRlc3QtPm1faGFuZGxlcnNNYXAuY29udGFpbnMoU3RyaW5nOjpmcm9t
VVRGOChzY2hlbWUpKSk7Ci0KLSAgICAgICAgaWYgKCFnX3N0cmNtcDAoc2NoZW1lLCAiZXJyb3Ii
KSkgewotICAgICAgICAgICAgR093blB0cjxHRXJyb3I+IGVycm9yKGdfZXJyb3JfbmV3X2xpdGVy
YWwoZ19xdWFya19mcm9tX3N0cmluZyhlcnJvckRvbWFpbiksIGVycm9yQ29kZSwgZXJyb3JNZXNz
YWdlKSk7Ci0gICAgICAgICAgICB3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2ZpbmlzaF9lcnJv
cihyZXF1ZXN0LCBlcnJvci5nZXQoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LQotICAgICAgICBjb25zdCBVUklTY2hlbWVIYW5kbGVyJiBoYW5kbGVyID0gdGVzdC0+bV9oYW5k
bGVyc01hcC5nZXQoU3RyaW5nOjpmcm9tVVRGOChzY2hlbWUpKTsKLQotICAgICAgICBpZiAoIWdf
c3RyY21wMChzY2hlbWUsICJlY2hvIikpIHsKLSAgICAgICAgICAgIGNoYXIqIHJlcGx5SFRNTCA9
IGdfc3RyZHVwX3ByaW50ZihoYW5kbGVyLnJlcGx5LmRhdGEoKSwgd2Via2l0X3VyaV9zY2hlbWVf
cmVxdWVzdF9nZXRfcGF0aChyZXF1ZXN0KSk7Ci0gICAgICAgICAgICBnX21lbW9yeV9pbnB1dF9z
dHJlYW1fYWRkX2RhdGEoR19NRU1PUllfSU5QVVRfU1RSRUFNKGlucHV0U3RyZWFtLmdldCgpKSwg
cmVwbHlIVE1MLCBzdHJsZW4ocmVwbHlIVE1MKSwgZ19mcmVlKTsKLSAgICAgICAgfSBlbHNlIGlm
ICghZ19zdHJjbXAwKHNjaGVtZSwgImNsb3NlZCIpKQotICAgICAgICAgICAgZ19pbnB1dF9zdHJl
YW1fY2xvc2UoaW5wdXRTdHJlYW0uZ2V0KCksIDAsIDApOwotICAgICAgICBlbHNlIGlmICghaGFu
ZGxlci5yZXBseS5pc051bGwoKSkKLSAgICAgICAgICAgIGdfbWVtb3J5X2lucHV0X3N0cmVhbV9h
ZGRfZGF0YShHX01FTU9SWV9JTlBVVF9TVFJFQU0oaW5wdXRTdHJlYW0uZ2V0KCkpLCBoYW5kbGVy
LnJlcGx5LmRhdGEoKSwgaGFuZGxlci5yZXBseS5sZW5ndGgoKSwgMCk7Ci0KLSAgICAgICAgd2Vi
a2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9maW5pc2gocmVxdWVzdCwgaW5wdXRTdHJlYW0uZ2V0KCks
IGhhbmRsZXIucmVwbHlMZW5ndGgsIGhhbmRsZXIubWltZVR5cGUuZGF0YSgpKTsKLSAgICB9Ci0K
LSAgICB2b2lkIHJlZ2lzdGVyVVJJU2NoZW1lSGFuZGxlcihjb25zdCBjaGFyKiBzY2hlbWUsIGNv
bnN0IGNoYXIqIHJlcGx5LCBpbnQgcmVwbHlMZW5ndGgsIGNvbnN0IGNoYXIqIG1pbWVUeXBlKQot
ICAgIHsKLSAgICAgICAgbV9oYW5kbGVyc01hcC5zZXQoU3RyaW5nOjpmcm9tVVRGOChzY2hlbWUp
LCBVUklTY2hlbWVIYW5kbGVyKHJlcGx5LCByZXBseUxlbmd0aCwgbWltZVR5cGUpKTsKLSAgICAg
ICAgd2Via2l0X3dlYl9jb250ZXh0X3JlZ2lzdGVyX3VyaV9zY2hlbWUod2Via2l0X3dlYl9jb250
ZXh0X2dldF9kZWZhdWx0KCksIHNjaGVtZSwgdXJpU2NoZW1lUmVxdWVzdENhbGxiYWNrLCB0aGlz
LCAwKTsKLSAgICB9Ci0KLSAgICBHUmVmUHRyPFdlYktpdFVSSVNjaGVtZVJlcXVlc3Q+IG1fdXJp
U2NoZW1lUmVxdWVzdDsKLSAgICBIYXNoTWFwPFN0cmluZywgVVJJU2NoZW1lSGFuZGxlcj4gbV9o
YW5kbGVyc01hcDsKLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJDb250ZXh0VVJJU2NoZW1lKFVS
SVNjaGVtZVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+cmVnaXN0ZXJV
UklTY2hlbWVIYW5kbGVyKCJmb28iLCBrQmFySFRNTCwgc3RybGVuKGtCYXJIVE1MKSwgInRleHQv
aHRtbCIpOwotICAgIHRlc3QtPmxvYWRVUkkoImZvbzpibGFuayIpOwotICAgIHRlc3QtPndhaXRV
bnRpbExvYWRGaW5pc2hlZCgpOwotICAgIHNpemVfdCBtYWluUmVzb3VyY2VEYXRhU2l6ZSA9IDA7
Ci0gICAgY29uc3QgY2hhciogbWFpblJlc291cmNlRGF0YSA9IHRlc3QtPm1haW5SZXNvdXJjZURh
dGEobWFpblJlc291cmNlRGF0YVNpemUpOwotICAgIGdfYXNzZXJ0X2NtcGludChtYWluUmVzb3Vy
Y2VEYXRhU2l6ZSwgPT0sIHN0cmxlbihrQmFySFRNTCkpOwotICAgIGdfYXNzZXJ0KCFzdHJuY21w
KG1haW5SZXNvdXJjZURhdGEsIGtCYXJIVE1MLCBtYWluUmVzb3VyY2VEYXRhU2l6ZSkpOwotCi0g
ICAgdGVzdC0+cmVnaXN0ZXJVUklTY2hlbWVIYW5kbGVyKCJlY2hvIiwga0VjaG9IVE1MRm9ybWF0
LCAtMSwgInRleHQvaHRtbCIpOwotICAgIHRlc3QtPmxvYWRVUkkoImVjaG86aGVsbG8gd29ybGQi
KTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBHT3duUHRyPGNoYXI+
IGVjaG9IVE1MKGdfc3RyZHVwX3ByaW50ZihrRWNob0hUTUxGb3JtYXQsIHdlYmtpdF91cmlfc2No
ZW1lX3JlcXVlc3RfZ2V0X3BhdGgodGVzdC0+bV91cmlTY2hlbWVSZXF1ZXN0LmdldCgpKSkpOwot
ICAgIG1haW5SZXNvdXJjZURhdGFTaXplID0gMDsKLSAgICBtYWluUmVzb3VyY2VEYXRhID0gdGVz
dC0+bWFpblJlc291cmNlRGF0YShtYWluUmVzb3VyY2VEYXRhU2l6ZSk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KG1haW5SZXNvdXJjZURhdGFTaXplLCA9PSwgc3RybGVuKGVjaG9IVE1MLmdldCgpKSk7
Ci0gICAgZ19hc3NlcnQoIXN0cm5jbXAobWFpblJlc291cmNlRGF0YSwgZWNob0hUTUwuZ2V0KCks
IG1haW5SZXNvdXJjZURhdGFTaXplKSk7Ci0KLSAgICB0ZXN0LT5yZWdpc3RlclVSSVNjaGVtZUhh
bmRsZXIoIm5vbWltZSIsIGtCYXJIVE1MLCAtMSwgMCk7Ci0gICAgdGVzdC0+bV9sb2FkRXZlbnRz
LmNsZWFyKCk7Ci0gICAgdGVzdC0+bG9hZFVSSSgibm9taW1lOmZvbyBiYXIiKTsKLSAgICB0ZXN0
LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX2xvYWRFdmVu
dHMuY29udGFpbnMoTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkRmFpbGVkKSk7Ci0K
LSAgICB0ZXN0LT5yZWdpc3RlclVSSVNjaGVtZUhhbmRsZXIoImVtcHR5IiwgMCwgMCwgInRleHQv
aHRtbCIpOwotICAgIHRlc3QtPm1fbG9hZEV2ZW50cy5jbGVhcigpOwotICAgIHRlc3QtPmxvYWRV
UkkoImVtcHR5Om5vdGhpbmciKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsK
LSAgICBnX2Fzc2VydCghdGVzdC0+bV9sb2FkRXZlbnRzLmNvbnRhaW5zKExvYWRUcmFja2luZ1Rl
c3Q6OlByb3Zpc2lvbmFsTG9hZEZhaWxlZCkpOwotICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX2xvYWRF
dmVudHMuY29udGFpbnMoTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZhaWxlZCkpOwotCi0gICAgdGVz
dC0+cmVnaXN0ZXJVUklTY2hlbWVIYW5kbGVyKCJlcnJvciIsIDAsIDAsIDApOwotICAgIHRlc3Qt
Pm1fbG9hZEV2ZW50cy5jbGVhcigpOwotICAgIHRlc3QtPmxvYWRVUkkoImVycm9yOmVycm9yIik7
Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgZ19hc3NlcnQodGVzdC0+
bV9sb2FkRXZlbnRzLmNvbnRhaW5zKExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZEZh
aWxlZCkpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fbG9hZEZhaWxlZCk7Ci0gICAgZ19hc3NlcnRf
ZXJyb3IodGVzdC0+bV9lcnJvci5nZXQoKSwgZ19xdWFya19mcm9tX3N0cmluZyhlcnJvckRvbWFp
biksIGVycm9yQ29kZSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPm1fZXJyb3ItPm1lc3Nh
Z2UsID09LCBlcnJvck1lc3NhZ2UpOwotCi0gICAgdGVzdC0+cmVnaXN0ZXJVUklTY2hlbWVIYW5k
bGVyKCJjbG9zZWQiLCAwLCAwLCAwKTsKLSAgICB0ZXN0LT5tX2xvYWRFdmVudHMuY2xlYXIoKTsK
LSAgICB0ZXN0LT5sb2FkVVJJKCJjbG9zZWQ6aW5wdXQtc3RyZWFtIik7Ci0gICAgdGVzdC0+d2Fp
dFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV9sb2FkRXZlbnRzLmNv
bnRhaW5zKExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZEZhaWxlZCkpOwotICAgIGdf
YXNzZXJ0KHRlc3QtPm1fbG9hZEZhaWxlZCk7Ci0gICAgZ19hc3NlcnRfZXJyb3IodGVzdC0+bV9l
cnJvci5nZXQoKSwgR19JT19FUlJPUiwgR19JT19FUlJPUl9DTE9TRUQpOwotfQotCi1zdGF0aWMg
dm9pZCB0ZXN0V2ViQ29udGV4dFNwZWxsQ2hlY2tlcihUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVy
KQotewotICAgIFdlYktpdFdlYkNvbnRleHQqIHdlYkNvbnRleHQgPSB3ZWJraXRfd2ViX2NvbnRl
eHRfZ2V0X2RlZmF1bHQoKTsKLQotICAgIC8vIENoZWNrIHdoYXQgaGFwcGVucyBpZiBubyBzcGVs
bCBjaGVja2luZyBsYW5ndWFnZSBoYXMgYmVlbiBzZXQuCi0gICAgY29uc3QgZ2NoYXIqIGNvbnN0
KiBjdXJyZW50TGFuZ3VhZ2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3NwZWxsX2NoZWNraW5n
X2xhbmd1YWdlcyh3ZWJDb250ZXh0KTsKLSAgICBnX2Fzc2VydCghY3VycmVudExhbmd1YWdlKTsK
LQotICAgIC8vIFNldCB0aGUgbGFuZ3VhZ2UgdG8gYSBzcGVjaWZpYyBvbmUuCi0gICAgR1JlZlB0
cjxHUHRyQXJyYXk+IGxhbmd1YWdlcyA9IGFkb3B0R1JlZihnX3B0cl9hcnJheV9uZXcoKSk7Ci0g
ICAgZ19wdHJfYXJyYXlfYWRkKGxhbmd1YWdlcy5nZXQoKSwgY29uc3RfY2FzdDxncG9pbnRlcj4o
c3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KCJlbl9VUyIpKSk7Ci0gICAgZ19wdHJfYXJyYXlfYWRk
KGxhbmd1YWdlcy5nZXQoKSwgMCk7Ci0gICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF9zcGVsbF9j
aGVja2luZ19sYW5ndWFnZXMod2ViQ29udGV4dCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFy
KiBjb25zdCo+KGxhbmd1YWdlcy0+cGRhdGEpKTsKLSAgICBjdXJyZW50TGFuZ3VhZ2UgPSB3ZWJr
aXRfd2ViX2NvbnRleHRfZ2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyh3ZWJDb250ZXh0KTsK
LSAgICBnX2Fzc2VydF9jbXB1aW50KGdfc3Rydl9sZW5ndGgoY29uc3RfY2FzdDxjaGFyKio+KGN1
cnJlbnRMYW5ndWFnZSkpLCA9PSwgMSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKGN1cnJlbnRMYW5n
dWFnZVswXSwgPT0sICJlbl9VUyIpOwotCi0gICAgLy8gU2V0IHRoZSBsYW5ndWFnZSBzdHJpbmcg
dG8gbGlzdCBvZiB2YWxpZCBsYW5ndWFnZXMuCi0gICAgZ19wdHJfYXJyYXlfcmVtb3ZlX2luZGV4
X2Zhc3QobGFuZ3VhZ2VzLmdldCgpLCBsYW5ndWFnZXMtPmxlbiAtIDEpOwotICAgIGdfcHRyX2Fy
cmF5X2FkZChsYW5ndWFnZXMuZ2V0KCksIGNvbnN0X2Nhc3Q8Z3BvaW50ZXI+KHN0YXRpY19jYXN0
PGNvbnN0IHZvaWQqPigiZW5fR0IiKSkpOwotICAgIGdfcHRyX2FycmF5X2FkZChsYW5ndWFnZXMu
Z2V0KCksIDApOwotICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfc3BlbGxfY2hlY2tpbmdfbGFu
Z3VhZ2VzKHdlYkNvbnRleHQsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhciogY29uc3QqPihs
YW5ndWFnZXMtPnBkYXRhKSk7Ci0gICAgY3VycmVudExhbmd1YWdlID0gd2Via2l0X3dlYl9jb250
ZXh0X2dldF9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMod2ViQ29udGV4dCk7Ci0gICAgZ19hc3Nl
cnRfY21wdWludChnX3N0cnZfbGVuZ3RoKGNvbnN0X2Nhc3Q8Y2hhcioqPihjdXJyZW50TGFuZ3Vh
Z2UpKSwgPT0sIDIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihjdXJyZW50TGFuZ3VhZ2VbMF0sID09
LCAiZW5fVVMiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoY3VycmVudExhbmd1YWdlWzFdLCA9PSwg
ImVuX0dCIik7Ci0KLSAgICAvLyBUcnkgcGFzc2luZyBhIHdyb25nIGxhbmd1YWdlIGFsb25nIHdp
dGggZ29vZCBvbmVzLgotICAgIGdfcHRyX2FycmF5X3JlbW92ZV9pbmRleF9mYXN0KGxhbmd1YWdl
cy5nZXQoKSwgbGFuZ3VhZ2VzLT5sZW4gLSAxKTsKLSAgICBnX3B0cl9hcnJheV9hZGQobGFuZ3Vh
Z2VzLmdldCgpLCBjb25zdF9jYXN0PGdwb2ludGVyPihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4o
ImJkX1dSIikpKTsKLSAgICBnX3B0cl9hcnJheV9hZGQobGFuZ3VhZ2VzLmdldCgpLCAwKTsKLSAg
ICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyh3ZWJDb250
ZXh0LCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqIGNvbnN0Kj4obGFuZ3VhZ2VzLT5wZGF0
YSkpOwotICAgIGN1cnJlbnRMYW5ndWFnZSA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxf
Y2hlY2tpbmdfbGFuZ3VhZ2VzKHdlYkNvbnRleHQpOwotICAgIGdfYXNzZXJ0X2NtcHVpbnQoZ19z
dHJ2X2xlbmd0aChjb25zdF9jYXN0PGNoYXIqKj4oY3VycmVudExhbmd1YWdlKSksID09LCAyKTsK
LSAgICBnX2Fzc2VydF9jbXBzdHIoY3VycmVudExhbmd1YWdlWzBdLCA9PSwgImVuX1VTIik7Ci0g
ICAgZ19hc3NlcnRfY21wc3RyKGN1cnJlbnRMYW5ndWFnZVsxXSwgPT0sICJlbl9HQiIpOwotCi0g
ICAgLy8gVHJ5IHBhc3NpbmcgYSBsaXN0IHdpdGggb25seSB3cm9uZyBsYW5ndWFnZXMuCi0gICAg
bGFuZ3VhZ2VzID0gYWRvcHRHUmVmKGdfcHRyX2FycmF5X25ldygpKTsKLSAgICBnX3B0cl9hcnJh
eV9hZGQobGFuZ3VhZ2VzLmdldCgpLCBjb25zdF9jYXN0PGdwb2ludGVyPihzdGF0aWNfY2FzdDxj
b25zdCB2b2lkKj4oImJkX1dSIikpKTsKLSAgICBnX3B0cl9hcnJheV9hZGQobGFuZ3VhZ2VzLmdl
dCgpLCBjb25zdF9jYXN0PGdwb2ludGVyPihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4oIndyX0JE
IikpKTsKLSAgICBnX3B0cl9hcnJheV9hZGQobGFuZ3VhZ2VzLmdldCgpLCAwKTsKLSAgICB3ZWJr
aXRfd2ViX2NvbnRleHRfc2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyh3ZWJDb250ZXh0LCBy
ZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqIGNvbnN0Kj4obGFuZ3VhZ2VzLT5wZGF0YSkpOwot
ICAgIGN1cnJlbnRMYW5ndWFnZSA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hlY2tp
bmdfbGFuZ3VhZ2VzKHdlYkNvbnRleHQpOwotICAgIGdfYXNzZXJ0KCFjdXJyZW50TGFuZ3VhZ2Up
OwotCi0gICAgLy8gQ2hlY2sgZGlzYWJsaW5nIGFuZCByZS1lbmFibGluZyBzcGVsbCBjaGVja2lu
Zy4KLSAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3NwZWxsX2NoZWNraW5nX2VuYWJsZWQod2Vi
Q29udGV4dCwgRkFMU0UpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3Nw
ZWxsX2NoZWNraW5nX2VuYWJsZWQod2ViQ29udGV4dCkpOwotICAgIHdlYmtpdF93ZWJfY29udGV4
dF9zZXRfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZCh3ZWJDb250ZXh0LCBUUlVFKTsKLSAgICBnX2Fz
c2VydCh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3NwZWxsX2NoZWNraW5nX2VuYWJsZWQod2ViQ29u
dGV4dCkpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViQ29udGV4dExhbmd1YWdlcyhXZWJWaWV3
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogZXhw
ZWN0ZWREZWZhdWx0TGFuZ3VhZ2UgPSAiZW4iOwotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+
Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlz
aGVkKCk7Ci0gICAgc2l6ZV90IG1haW5SZXNvdXJjZURhdGFTaXplID0gMDsKLSAgICBjb25zdCBj
aGFyKiBtYWluUmVzb3VyY2VEYXRhID0gdGVzdC0+bWFpblJlc291cmNlRGF0YShtYWluUmVzb3Vy
Y2VEYXRhU2l6ZSk7Ci0gICAgZ19hc3NlcnRfY21wdWludChtYWluUmVzb3VyY2VEYXRhU2l6ZSwg
PT0sIHN0cmxlbihleHBlY3RlZERlZmF1bHRMYW5ndWFnZSkpOwotICAgIGdfYXNzZXJ0KCFzdHJu
Y21wKG1haW5SZXNvdXJjZURhdGEsIGV4cGVjdGVkRGVmYXVsdExhbmd1YWdlLCBtYWluUmVzb3Vy
Y2VEYXRhU2l6ZSkpOwotCi0gICAgR1JlZlB0cjxHUHRyQXJyYXk+IGxhbmd1YWdlcyA9IGFkb3B0
R1JlZihnX3B0cl9hcnJheV9uZXcoKSk7Ci0gICAgZ19wdHJfYXJyYXlfYWRkKGxhbmd1YWdlcy5n
ZXQoKSwgY29uc3RfY2FzdDxncG9pbnRlcj4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KCJlbiIp
KSk7Ci0gICAgZ19wdHJfYXJyYXlfYWRkKGxhbmd1YWdlcy5nZXQoKSwgY29uc3RfY2FzdDxncG9p
bnRlcj4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KCJFU19lcyIpKSk7Ci0gICAgZ19wdHJfYXJy
YXlfYWRkKGxhbmd1YWdlcy5nZXQoKSwgY29uc3RfY2FzdDxncG9pbnRlcj4oc3RhdGljX2Nhc3Q8
Y29uc3Qgdm9pZCo+KCJkRSIpKSk7Ci0gICAgZ19wdHJfYXJyYXlfYWRkKGxhbmd1YWdlcy5nZXQo
KSwgMCk7Ci0gICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF9wcmVmZXJyZWRfbGFuZ3VhZ2VzKHdl
YmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNo
YXIqIGNvbnN0Kj4obGFuZ3VhZ2VzLT5wZGF0YSkpOwotCi0gICAgc3RhdGljIGNvbnN0IGNoYXIq
IGV4cGVjdGVkTGFuZ3VhZ2VzID0gImVuLCBlcy1lcztxPTAuOTAsIGRlO3E9MC44MCI7Ci0gICAg
dGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIikuZGF0YSgpKTsKLSAgICB0
ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBtYWluUmVzb3VyY2VEYXRhU2l6ZSA9
IDA7Ci0gICAgbWFpblJlc291cmNlRGF0YSA9IHRlc3QtPm1haW5SZXNvdXJjZURhdGEobWFpblJl
c291cmNlRGF0YVNpemUpOwotICAgIGdfYXNzZXJ0X2NtcHVpbnQobWFpblJlc291cmNlRGF0YVNp
emUsID09LCBzdHJsZW4oZXhwZWN0ZWRMYW5ndWFnZXMpKTsKLSAgICBnX2Fzc2VydCghc3RybmNt
cChtYWluUmVzb3VyY2VEYXRhLCBleHBlY3RlZExhbmd1YWdlcywgbWFpblJlc291cmNlRGF0YVNp
emUpKTsKLX0KLQotc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVy
LCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSosIFNv
dXBDbGllbnRDb250ZXh0KiwgZ3BvaW50ZXIpCi17Ci0gICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAh
PSBTT1VQX01FVEhPRF9HRVQpIHsKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVz
c2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiLyIpKSB7Ci0gICAgICAgIGNvbnN0IGNo
YXIqIGFjY2VwdExhbmd1YWdlID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X29uZShtZXNzYWdl
LT5yZXF1ZXN0X2hlYWRlcnMsICJBY2NlcHQtTGFuZ3VhZ2UiKTsKLSAgICAgICAgc291cF9tZXNz
YWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOwotICAgICAgICBzb3VwX21l
c3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfQ09Q
WSwgYWNjZXB0TGFuZ3VhZ2UsIHN0cmxlbihhY2NlcHRMYW5ndWFnZSkpOwotICAgICAgICBzb3Vw
X21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKLSAgICB9IGVs
c2UKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNf
Tk9UX0ZPVU5EKTsKLX0KLQotY2xhc3MgU2VjdXJpdHlQb2xpY3lUZXN0OiBwdWJsaWMgVGVzdCB7
Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShTZWN1cml0eVBvbGljeVRlc3Qp
OwotCi0gICAgZW51bSBTZWN1cml0eVBvbGljeSB7Ci0gICAgICAgIExvY2FsID0gMSA8PCAxLAot
ICAgICAgICBOb0FjY2VzcyA9IDEgPDwgMiwKLSAgICAgICAgRGlzcGxheUlzb2xhdGVkID0gMSA8
PCAzLAotICAgICAgICBTZWN1cmUgPSAxIDw8IDQsCi0gICAgICAgIENPUlNFbmFibGVkID0gMSA8
PCA1LAotICAgICAgICBFbXB0eURvY3VtZW50ID0gMSA8PCA2Ci0gICAgfTsKLQotICAgIFNlY3Vy
aXR5UG9saWN5VGVzdCgpCi0gICAgICAgIDogbV9tYW5hZ2VyKHdlYmtpdF93ZWJfY29udGV4dF9n
ZXRfc2VjdXJpdHlfbWFuYWdlcih3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSkpCi0g
ICAgewotICAgIH0KLQotICAgIHZvaWQgdmVyaWZ5VGhhdFNjaGVtZU1hdGNoZXNQb2xpY3koY29u
c3QgY2hhciogc2NoZW1lLCB1bnNpZ25lZCBwb2xpY3kpCi0gICAgewotICAgICAgICBpZiAocG9s
aWN5ICYgTG9jYWwpCi0gICAgICAgICAgICBnX2Fzc2VydCh3ZWJraXRfc2VjdXJpdHlfbWFuYWdl
cl91cmlfc2NoZW1lX2lzX2xvY2FsKG1fbWFuYWdlciwgc2NoZW1lKSk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl91cmlfc2NoZW1l
X2lzX2xvY2FsKG1fbWFuYWdlciwgc2NoZW1lKSk7Ci0gICAgICAgIGlmIChwb2xpY3kgJiBOb0Fj
Y2VzcykKLSAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9zZWN1cml0eV9tYW5hZ2VyX3VyaV9z
Y2hlbWVfaXNfbm9fYWNjZXNzKG1fbWFuYWdlciwgc2NoZW1lKSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl91cmlfc2NoZW1lX2lz
X25vX2FjY2VzcyhtX21hbmFnZXIsIHNjaGVtZSkpOwotICAgICAgICBpZiAocG9saWN5ICYgRGlz
cGxheUlzb2xhdGVkKQotICAgICAgICAgICAgZ19hc3NlcnQod2Via2l0X3NlY3VyaXR5X21hbmFn
ZXJfdXJpX3NjaGVtZV9pc19kaXNwbGF5X2lzb2xhdGVkKG1fbWFuYWdlciwgc2NoZW1lKSk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2VjdXJpdHlfbWFuYWdl
cl91cmlfc2NoZW1lX2lzX2Rpc3BsYXlfaXNvbGF0ZWQobV9tYW5hZ2VyLCBzY2hlbWUpKTsKLSAg
ICAgICAgaWYgKHBvbGljeSAmIFNlY3VyZSkKLSAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9z
ZWN1cml0eV9tYW5hZ2VyX3VyaV9zY2hlbWVfaXNfc2VjdXJlKG1fbWFuYWdlciwgc2NoZW1lKSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2VjdXJpdHlfbWFu
YWdlcl91cmlfc2NoZW1lX2lzX3NlY3VyZShtX21hbmFnZXIsIHNjaGVtZSkpOwotICAgICAgICBp
ZiAocG9saWN5ICYgQ09SU0VuYWJsZWQpCi0gICAgICAgICAgICBnX2Fzc2VydCh3ZWJraXRfc2Vj
dXJpdHlfbWFuYWdlcl91cmlfc2NoZW1lX2lzX2NvcnNfZW5hYmxlZChtX21hbmFnZXIsIHNjaGVt
ZSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X3NlY3VyaXR5
X21hbmFnZXJfdXJpX3NjaGVtZV9pc19jb3JzX2VuYWJsZWQobV9tYW5hZ2VyLCBzY2hlbWUpKTsK
LSAgICAgICAgaWYgKHBvbGljeSAmIEVtcHR5RG9jdW1lbnQpCi0gICAgICAgICAgICBnX2Fzc2Vy
dCh3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl91cmlfc2NoZW1lX2lzX2VtcHR5X2RvY3VtZW50KG1f
bWFuYWdlciwgc2NoZW1lKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGdfYXNzZXJ0KCF3
ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl91cmlfc2NoZW1lX2lzX2VtcHR5X2RvY3VtZW50KG1fbWFu
YWdlciwgc2NoZW1lKSk7Ci0gICAgfQotCi0gICAgV2ViS2l0U2VjdXJpdHlNYW5hZ2VyKiBtX21h
bmFnZXI7Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViQ29udGV4dFNlY3VyaXR5UG9saWN5KFNl
Y3VyaXR5UG9saWN5VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICAvLyBWZXJpZnlU
aGF0U2NoZW1lTWF0Y2hlc1BvbGljeSBkZWZhdWx0IHBvbGljeSBmb3Igd2VsbCBrbm93biBzY2hl
bWVzLgotICAgIHRlc3QtPnZlcmlmeVRoYXRTY2hlbWVNYXRjaGVzUG9saWN5KCJodHRwIiwgU2Vj
dXJpdHlQb2xpY3lUZXN0OjpDT1JTRW5hYmxlZCk7Ci0gICAgdGVzdC0+dmVyaWZ5VGhhdFNjaGVt
ZU1hdGNoZXNQb2xpY3koImh0dHBzIiwgU2VjdXJpdHlQb2xpY3lUZXN0OjpDT1JTRW5hYmxlZCB8
IFNlY3VyaXR5UG9saWN5VGVzdDo6U2VjdXJlKTsKLSAgICB0ZXN0LT52ZXJpZnlUaGF0U2NoZW1l
TWF0Y2hlc1BvbGljeSgiZmlsZSIsIFNlY3VyaXR5UG9saWN5VGVzdDo6TG9jYWwpOwotICAgIHRl
c3QtPnZlcmlmeVRoYXRTY2hlbWVNYXRjaGVzUG9saWN5KCJkYXRhIiwgU2VjdXJpdHlQb2xpY3lU
ZXN0OjpOb0FjY2VzcyB8IFNlY3VyaXR5UG9saWN5VGVzdDo6U2VjdXJlKTsKLSAgICB0ZXN0LT52
ZXJpZnlUaGF0U2NoZW1lTWF0Y2hlc1BvbGljeSgiYWJvdXQiLCBTZWN1cml0eVBvbGljeVRlc3Q6
Ok5vQWNjZXNzIHwgU2VjdXJpdHlQb2xpY3lUZXN0OjpTZWN1cmUgfCBTZWN1cml0eVBvbGljeVRl
c3Q6OkVtcHR5RG9jdW1lbnQpOwotCi0gICAgLy8gQ3VzdG9tIHNjaGVtZS4KLSAgICB0ZXN0LT52
ZXJpZnlUaGF0U2NoZW1lTWF0Y2hlc1BvbGljeSgiZm9vIiwgMCk7Ci0KLSAgICB3ZWJraXRfc2Vj
dXJpdHlfbWFuYWdlcl9yZWdpc3Rlcl91cmlfc2NoZW1lX2FzX2xvY2FsKHRlc3QtPm1fbWFuYWdl
ciwgImZvbyIpOwotICAgIHRlc3QtPnZlcmlmeVRoYXRTY2hlbWVNYXRjaGVzUG9saWN5KCJmb28i
LCBTZWN1cml0eVBvbGljeVRlc3Q6OkxvY2FsKTsKLSAgICB3ZWJraXRfc2VjdXJpdHlfbWFuYWdl
cl9yZWdpc3Rlcl91cmlfc2NoZW1lX2FzX25vX2FjY2Vzcyh0ZXN0LT5tX21hbmFnZXIsICJmb28i
KTsKLSAgICB0ZXN0LT52ZXJpZnlUaGF0U2NoZW1lTWF0Y2hlc1BvbGljeSgiZm9vIiwgU2VjdXJp
dHlQb2xpY3lUZXN0OjpMb2NhbCB8IFNlY3VyaXR5UG9saWN5VGVzdDo6Tm9BY2Nlc3MpOwotICAg
IHdlYmtpdF9zZWN1cml0eV9tYW5hZ2VyX3JlZ2lzdGVyX3VyaV9zY2hlbWVfYXNfZGlzcGxheV9p
c29sYXRlZCh0ZXN0LT5tX21hbmFnZXIsICJmb28iKTsKLSAgICB0ZXN0LT52ZXJpZnlUaGF0U2No
ZW1lTWF0Y2hlc1BvbGljeSgiZm9vIiwgU2VjdXJpdHlQb2xpY3lUZXN0OjpMb2NhbCB8IFNlY3Vy
aXR5UG9saWN5VGVzdDo6Tm9BY2Nlc3MgfCBTZWN1cml0eVBvbGljeVRlc3Q6OkRpc3BsYXlJc29s
YXRlZCk7Ci0gICAgd2Via2l0X3NlY3VyaXR5X21hbmFnZXJfcmVnaXN0ZXJfdXJpX3NjaGVtZV9h
c19zZWN1cmUodGVzdC0+bV9tYW5hZ2VyLCAiZm9vIik7Ci0gICAgdGVzdC0+dmVyaWZ5VGhhdFNj
aGVtZU1hdGNoZXNQb2xpY3koImZvbyIsIFNlY3VyaXR5UG9saWN5VGVzdDo6TG9jYWwgfCBTZWN1
cml0eVBvbGljeVRlc3Q6Ok5vQWNjZXNzIHwgU2VjdXJpdHlQb2xpY3lUZXN0OjpEaXNwbGF5SXNv
bGF0ZWQgfCBTZWN1cml0eVBvbGljeVRlc3Q6OlNlY3VyZSk7Ci0gICAgd2Via2l0X3NlY3VyaXR5
X21hbmFnZXJfcmVnaXN0ZXJfdXJpX3NjaGVtZV9hc19jb3JzX2VuYWJsZWQodGVzdC0+bV9tYW5h
Z2VyLCAiZm9vIik7Ci0gICAgdGVzdC0+dmVyaWZ5VGhhdFNjaGVtZU1hdGNoZXNQb2xpY3koImZv
byIsIFNlY3VyaXR5UG9saWN5VGVzdDo6TG9jYWwgfCBTZWN1cml0eVBvbGljeVRlc3Q6Ok5vQWNj
ZXNzIHwgU2VjdXJpdHlQb2xpY3lUZXN0OjpEaXNwbGF5SXNvbGF0ZWQgfCBTZWN1cml0eVBvbGlj
eVRlc3Q6OlNlY3VyZQotICAgICAgICAgICAgICAgIHwgU2VjdXJpdHlQb2xpY3lUZXN0OjpDT1JT
RW5hYmxlZCk7Ci0gICAgd2Via2l0X3NlY3VyaXR5X21hbmFnZXJfcmVnaXN0ZXJfdXJpX3NjaGVt
ZV9hc19lbXB0eV9kb2N1bWVudCh0ZXN0LT5tX21hbmFnZXIsICJmb28iKTsKLSAgICB0ZXN0LT52
ZXJpZnlUaGF0U2NoZW1lTWF0Y2hlc1BvbGljeSgiZm9vIiwgU2VjdXJpdHlQb2xpY3lUZXN0OjpM
b2NhbCB8IFNlY3VyaXR5UG9saWN5VGVzdDo6Tm9BY2Nlc3MgfCBTZWN1cml0eVBvbGljeVRlc3Q6
OkRpc3BsYXlJc29sYXRlZCB8IFNlY3VyaXR5UG9saWN5VGVzdDo6U2VjdXJlCi0gICAgICAgICAg
ICAgICAgfCBTZWN1cml0eVBvbGljeVRlc3Q6OkNPUlNFbmFibGVkIHwgU2VjdXJpdHlQb2xpY3lU
ZXN0OjpFbXB0eURvY3VtZW50KTsKLX0KLQotdm9pZCBiZWZvcmVBbGwoKQotewotICAgIGtTZXJ2
ZXIgPSBuZXcgV2ViS2l0VGVzdFNlcnZlcigpOwotICAgIGtTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxs
YmFjayk7Ci0KLSAgICBUZXN0OjphZGQoIldlYktpdFdlYkNvbnRleHQiLCAiZGVmYXVsdC1jb250
ZXh0IiwgdGVzdFdlYkNvbnRleHREZWZhdWx0KTsKLSAgICBQbHVnaW5zVGVzdDo6YWRkKCJXZWJL
aXRXZWJDb250ZXh0IiwgImdldC1wbHVnaW5zIiwgdGVzdFdlYkNvbnRleHRHZXRQbHVnaW5zKTsK
LSAgICBVUklTY2hlbWVUZXN0OjphZGQoIldlYktpdFdlYkNvbnRleHQiLCAidXJpLXNjaGVtZSIs
IHRlc3RXZWJDb250ZXh0VVJJU2NoZW1lKTsKLSAgICBUZXN0OjphZGQoIldlYktpdFdlYkNvbnRl
eHQiLCAic3BlbGwtY2hlY2tlciIsIHRlc3RXZWJDb250ZXh0U3BlbGxDaGVja2VyKTsKLSAgICBX
ZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJDb250ZXh0IiwgImxhbmd1YWdlcyIsIHRlc3RXZWJD
b250ZXh0TGFuZ3VhZ2VzKTsKLSAgICBTZWN1cml0eVBvbGljeVRlc3Q6OmFkZCgiV2ViS2l0U2Vj
dXJpdHlNYW5hZ2VyIiwgInNlY3VyaXR5LXBvbGljeSIsIHRlc3RXZWJDb250ZXh0U2VjdXJpdHlQ
b2xpY3kpOwotfQotCi12b2lkIGFmdGVyQWxsKCkKLXsKLSAgICBkZWxldGUga1NlcnZlcjsKLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RX
ZWJLaXRXZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L1Rlc3RXZWJLaXRXZWJWaWV3LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDcw
YjBhMi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0
cy9UZXN0V2ViS2l0V2ViVmlldy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2MDggKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
LSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNT
dHJpbmdSZWYuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1ZhbHVlUmVmLmg+Ci0jaW5j
bHVkZSA8Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Ci0K
LXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3RGVmYXVsdENvbnRleHQoV2ViVmlld1Rlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIpCi17Ci0gICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dldF9jb250
ZXh0KHRlc3QtPm1fd2ViVmlldykgPT0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCkp
OwotCi0gICAgLy8gQ2hlY2sgdGhhdCBhIHdlYiB2aWV3IGNyZWF0ZWQgd2l0aCBnX29iamVjdF9u
ZXcgaGFzIHRoZSBkZWZhdWx0IGNvbnRleHQuCi0gICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3PiB3
ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfVklF
VywgTlVMTCkpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dCh3ZWJW
aWV3LmdldCgpKSA9PSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSk7Ci19Ci0KLXN0
YXRpYyB2b2lkIHRlc3RXZWJWaWV3Q3VzdG9tQ2hhcnNldChXZWJWaWV3VGVzdCogdGVzdCwgZ2Nv
bnN0cG9pbnRlcikKLXsKLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2dldF9jdXN0b21f
Y2hhcnNldCh0ZXN0LT5tX3dlYlZpZXcpKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X2N1c3Rv
bV9jaGFyc2V0KHRlc3QtPm1fd2ViVmlldywgInV0ZjgiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIo
d2Via2l0X3dlYl92aWV3X2dldF9jdXN0b21fY2hhcnNldCh0ZXN0LT5tX3dlYlZpZXcpLCA9PSwg
InV0ZjgiKTsKLSAgICAvLyBHbyBiYWNrIHRvIHRoZSBkZWZhdWx0IGNoYXJzZXQuCi0gICAgd2Vi
a2l0X3dlYl92aWV3X3NldF9jdXN0b21fY2hhcnNldCh0ZXN0LT5tX3dlYlZpZXcsIDApOwotICAg
IGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfZ2V0X2N1c3RvbV9jaGFyc2V0KHRlc3QtPm1fd2Vi
VmlldykpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1NldHRpbmdzKFdlYlZpZXdUZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIFdlYktpdFNldHRpbmdzKiBkZWZhdWx0U2V0
dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHRlc3QtPm1fd2ViVmlldyk7Ci0g
ICAgZ19hc3NlcnQoZGVmYXVsdFNldHRpbmdzKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGlu
Z3NfZ2V0X2VuYWJsZV9qYXZhc2NyaXB0KGRlZmF1bHRTZXR0aW5ncykpOwotCi0gICAgR1JlZlB0
cjxXZWJLaXRTZXR0aW5ncz4gbmV3U2V0dGluZ3MgPSBhZG9wdEdSZWYod2Via2l0X3NldHRpbmdz
X25ldygpKTsKLSAgICBnX29iamVjdF9zZXQoR19PQkpFQ1QobmV3U2V0dGluZ3MuZ2V0KCkpLCAi
ZW5hYmxlLWphdmFzY3JpcHQiLCBGQUxTRSwgTlVMTCk7Ci0gICAgd2Via2l0X3dlYl92aWV3X3Nl
dF9zZXR0aW5ncyh0ZXN0LT5tX3dlYlZpZXcsIG5ld1NldHRpbmdzLmdldCgpKTsKLQotICAgIFdl
YktpdFNldHRpbmdzKiBzZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3ModGVz
dC0+bV93ZWJWaWV3KTsKLSAgICBnX2Fzc2VydChzZXR0aW5ncyAhPSBkZWZhdWx0U2V0dGluZ3Mp
OwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9qYXZhc2NyaXB0KHNl
dHRpbmdzKSk7Ci0KLSAgICBHUmVmUHRyPEd0a1dpZGdldD4gd2ViVmlldzIgPSB3ZWJraXRfd2Vi
X3ZpZXdfbmV3KCk7Ci0gICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5p
c2hlcyhHX09CSkVDVCh3ZWJWaWV3Mi5nZXQoKSkpOwotICAgIHdlYmtpdF93ZWJfdmlld19zZXRf
c2V0dGluZ3MoV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcyLmdldCgpKSwgc2V0dGluZ3MpOwotICAg
IGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3MoV0VCS0lUX1dFQl9WSUVXKHdl
YlZpZXcyLmdldCgpKSkgPT0gc2V0dGluZ3MpOwotCi0gICAgR1JlZlB0cjxXZWJLaXRTZXR0aW5n
cz4gbmV3U2V0dGluZ3MyID0gYWRvcHRHUmVmKHdlYmtpdF9zZXR0aW5nc19uZXcoKSk7Ci0gICAg
d2Via2l0X3dlYl92aWV3X3NldF9zZXR0aW5ncyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldzIuZ2V0
KCkpLCBuZXdTZXR0aW5nczIuZ2V0KCkpOwotICAgIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3
X2dldF9zZXR0aW5ncyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldzIuZ2V0KCkpKTsKLSAgICBnX2Fz
c2VydChzZXR0aW5ncyA9PSBuZXdTZXR0aW5nczIuZ2V0KCkpOwotICAgIGdfYXNzZXJ0KHdlYmtp
dF9zZXR0aW5nc19nZXRfZW5hYmxlX2phdmFzY3JpcHQoc2V0dGluZ3MpKTsKLX0KLQotc3RhdGlj
IHZvaWQgdGVzdFdlYlZpZXdab29tTGV2ZWwoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCi17Ci0gICAgZ19hc3NlcnRfY21wZmxvYXQod2Via2l0X3dlYl92aWV3X2dldF96b29tX2xl
dmVsKHRlc3QtPm1fd2ViVmlldyksID09LCAxKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X3pv
b21fbGV2ZWwodGVzdC0+bV93ZWJWaWV3LCAyLjUpOwotICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHdl
YmtpdF93ZWJfdmlld19nZXRfem9vbV9sZXZlbCh0ZXN0LT5tX3dlYlZpZXcpLCA9PSwgMi41KTsK
LQotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfem9vbV90ZXh0X29ubHkod2Via2l0X3dlYl92aWV3
X2dldF9zZXR0aW5ncyh0ZXN0LT5tX3dlYlZpZXcpLCBUUlVFKTsKLSAgICAvLyBUaGUgem9vbSBs
ZXZlbCBzaG91bGRuJ3QgY2hhbmdlIHdoZW4gem9vbS10ZXh0LW9ubHkgc2V0dGluZyBjaGFuZ2Vz
LgotICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHdlYmtpdF93ZWJfdmlld19nZXRfem9vbV9sZXZlbCh0
ZXN0LT5tX3dlYlZpZXcpLCA9PSwgMi41KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdS
dW5KYXZhU2NyaXB0KFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHN0
YXRpYyBjb25zdCBjaGFyKiBodG1sID0gIjxodG1sPjxib2R5PjxhIGlkPSdXZWJLaXRMaW5rJyBo
cmVmPSdodHRwOi8vd3d3LndlYmtpdGd0ay5vcmcvJyB0aXRsZT0nV2ViS2l0R1RLKyBUaXRsZSc+
V2ViS2l0R1RLKyBXZWJzaXRlPC9hPjwvYm9keT48L2h0bWw+IjsKLSAgICB0ZXN0LT5sb2FkSHRt
bChodG1sLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIEdP
d25QdHI8R0Vycm9yPiBlcnJvcjsKLSAgICBXZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBqYXZhc2Ny
aXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJ3aW5k
b3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1dlYktpdExpbmsnKS50aXRsZTsiLCAmZXJyb3Iu
b3V0UHRyKCkpOwotICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOwotICAgIGdfYXNzZXJ0
KCFlcnJvci5nZXQoKSk7Ci0gICAgR093blB0cjxjaGFyPiB2YWx1ZVN0cmluZyhXZWJWaWV3VGVz
dDo6amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7Ci0gICAgZ19h
c3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgIldlYktpdEdUSysgVGl0bGUiKTsK
LQotICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGls
RmluaXNoZWQoIndpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnV2ViS2l0TGluaycpLmhy
ZWY7IiwgJmVycm9yLm91dFB0cigpKTsKLSAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsK
LSAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOwotICAgIHZhbHVlU3RyaW5nLnNldChXZWJWaWV3
VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7Ci0gICAg
Z19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgImh0dHA6Ly93d3cud2Via2l0
Z3RrLm9yZy8iKTsKLQotICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0
QW5kV2FpdFVudGlsRmluaXNoZWQoIndpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnV2Vi
S2l0TGluaycpLnRleHRDb250ZW50IiwgJmVycm9yLm91dFB0cigpKTsKLSAgICBnX2Fzc2VydChq
YXZhc2NyaXB0UmVzdWx0KTsKLSAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOwotICAgIHZhbHVl
U3RyaW5nLnNldChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZhc2Ny
aXB0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwg
IldlYktpdEdUSysgV2Vic2l0ZSIpOwotCi0gICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1
bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiYSA9IDI1OyIsICZlcnJvci5vdXRQdHIo
KSk7Ci0gICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAgZ19hc3NlcnQoIWVycm9y
LmdldCgpKTsKLSAgICBnX2Fzc2VydF9jbXBmbG9hdChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJl
c3VsdFRvTnVtYmVyKGphdmFzY3JpcHRSZXN1bHQpLCA9PSwgMjUpOwotCi0gICAgamF2YXNjcmlw
dFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiYSA9IDIu
NTsiLCAmZXJyb3Iub3V0UHRyKCkpOwotICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOwot
ICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7Ci0gICAgZ19hc3NlcnRfY21wZmxvYXQoV2ViVmll
d1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb051bWJlcihqYXZhc2NyaXB0UmVzdWx0KSwgPT0sIDIu
NSk7Ci0KLSAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRV
bnRpbEZpbmlzaGVkKCJhID0gdHJ1ZSIsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgZ19hc3NlcnQo
amF2YXNjcmlwdFJlc3VsdCk7Ci0gICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKLSAgICBnX2Fz
c2VydChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQm9vbGVhbihqYXZhc2NyaXB0UmVz
dWx0KSk7Ci0KLSAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdh
aXRVbnRpbEZpbmlzaGVkKCJhID0gZmFsc2UiLCAmZXJyb3Iub3V0UHRyKCkpOwotICAgIGdfYXNz
ZXJ0KGphdmFzY3JpcHRSZXN1bHQpOwotICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7Ci0gICAg
Z19hc3NlcnQoIVdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9Cb29sZWFuKGphdmFzY3Jp
cHRSZXN1bHQpKTsKLQotICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0
QW5kV2FpdFVudGlsRmluaXNoZWQoImEgPSBudWxsIiwgJmVycm9yLm91dFB0cigpKTsKLSAgICBn
X2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOwot
ICAgIGdfYXNzZXJ0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0SXNOdWxsKGphdmFzY3Jp
cHRSZXN1bHQpKTsKLQotICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0
QW5kV2FpdFVudGlsRmluaXNoZWQoImZ1bmN0aW9uIEZvbygpIHsgYSA9IDI1OyB9IEZvbygpOyIs
ICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAg
Z19hc3NlcnQoIWVycm9yLmdldCgpKTsKLSAgICBnX2Fzc2VydChXZWJWaWV3VGVzdDo6amF2YXNj
cmlwdFJlc3VsdElzVW5kZWZpbmVkKGphdmFzY3JpcHRSZXN1bHQpKTsKLQotICAgIGphdmFzY3Jp
cHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0RnJvbUdSZXNvdXJjZUFuZFdhaXRVbnRpbEZp
bmlzaGVkKCIvb3JnL3dlYmtpdC93ZWJraXQyZ3RrL3Rlc3RzL2xpbmstdGl0bGUuanMiLCAmZXJy
b3Iub3V0UHRyKCkpOwotICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOwotICAgIGdfYXNz
ZXJ0KCFlcnJvci5nZXQoKSk7Ci0gICAgdmFsdWVTdHJpbmcuc2V0KFdlYlZpZXdUZXN0OjpqYXZh
c2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKLSAgICBnX2Fzc2VydF9j
bXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAiV2ViS2l0R1RLKyBUaXRsZSIpOwotCi0gICAg
amF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRGcm9tR1Jlc291cmNlQW5kV2Fp
dFVudGlsRmluaXNoZWQoIi93cm9uZy9wYXRoL3RvL3Jlc291cmNlLmpzIiwgJmVycm9yLm91dFB0
cigpKTsKLSAgICBnX2Fzc2VydCghamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAgZ19hc3NlcnRfZXJy
b3IoZXJyb3IuZ2V0KCksIEdfUkVTT1VSQ0VfRVJST1IsIEdfUkVTT1VSQ0VfRVJST1JfTk9UX0ZP
VU5EKTsKLSAgICBlcnJvci5jbGVhcigpOwotCi0gICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3Qt
PnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZm9vKCk7IiwgJmVycm9yLm91dFB0
cigpKTsKLSAgICBnX2Fzc2VydCghamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAgZ19hc3NlcnRfZXJy
b3IoZXJyb3IuZ2V0KCksIFdFQktJVF9KQVZBU0NSSVBUX0VSUk9SLCBXRUJLSVRfSkFWQVNDUklQ
VF9FUlJPUl9TQ1JJUFRfRkFJTEVEKTsKLX0KLQotY2xhc3MgRnVsbFNjcmVlbkNsaWVudFRlc3Q6
IHB1YmxpYyBXZWJWaWV3VGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVS
RShGdWxsU2NyZWVuQ2xpZW50VGVzdCk7Ci0KLSAgICBlbnVtIEZ1bGxTY3JlZW5FdmVudCB7Ci0g
ICAgICAgIE5vbmUsCi0gICAgICAgIEVudGVyLAotICAgICAgICBMZWF2ZQotICAgIH07Ci0KLSAg
ICBzdGF0aWMgZ2Jvb2xlYW4gdmlld0VudGVyRnVsbFNjcmVlbkNhbGxiYWNrKFdlYktpdFdlYlZp
ZXcqLCBGdWxsU2NyZWVuQ2xpZW50VGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHRlc3QtPm1f
ZXZlbnQgPSBFbnRlcjsKLSAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29w
KTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiB2
aWV3TGVhdmVGdWxsU2NyZWVuQ2FsbGJhY2soV2ViS2l0V2ViVmlldyosIEZ1bGxTY3JlZW5DbGll
bnRUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+bV9ldmVudCA9IExlYXZlOwotICAg
ICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOwotICAgICAgICByZXR1cm4g
RkFMU0U7Ci0gICAgfQotCi0gICAgRnVsbFNjcmVlbkNsaWVudFRlc3QoKQotICAgICAgICA6IG1f
ZXZlbnQoTm9uZSkKLSAgICB7Ci0gICAgICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX2Z1
bGxzY3JlZW4od2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyhtX3dlYlZpZXcpLCBUUlVFKTsK
LSAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJlbnRlci1mdWxsc2NyZWVuIiwg
R19DQUxMQkFDSyh2aWV3RW50ZXJGdWxsU2NyZWVuQ2FsbGJhY2spLCB0aGlzKTsKLSAgICAgICAg
Z19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJsZWF2ZS1mdWxsc2NyZWVuIiwgR19DQUxMQkFD
Syh2aWV3TGVhdmVGdWxsU2NyZWVuQ2FsbGJhY2spLCB0aGlzKTsKLSAgICB9Ci0KLSAgICB+RnVs
bFNjcmVlbkNsaWVudFRlc3QoKQotICAgIHsKLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlz
Y29ubmVjdF9tYXRjaGVkKG1fd2ViVmlldywgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwg
MCwgdGhpcyk7Ci0gICAgfQotCi0gICAgdm9pZCByZXF1ZXN0RnVsbFNjcmVlbkFuZFdhaXRVbnRp
bEVudGVyZWRGdWxsU2NyZWVuKCkKLSAgICB7Ci0gICAgICAgIG1fZXZlbnQgPSBOb25lOwotICAg
ICAgICB3ZWJraXRfd2ViX3ZpZXdfcnVuX2phdmFzY3JpcHQobV93ZWJWaWV3LCAiZG9jdW1lbnQu
ZG9jdW1lbnRFbGVtZW50LndlYmtpdFJlcXVlc3RGdWxsU2NyZWVuKCk7IiwgMCwgMCwgMCk7Ci0g
ICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMg
Z2Jvb2xlYW4gbGVhdmVGdWxsU2NyZWVuSWRsZShGdWxsU2NyZWVuQ2xpZW50VGVzdCogdGVzdCkK
LSAgICB7Ci0gICAgICAgIHRlc3QtPmtleVN0cm9rZShHREtfS0VZX0VzY2FwZSk7Ci0gICAgICAg
IHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAgICB2b2lkIGxlYXZlRnVsbFNjcmVlbkFuZFdhaXRV
bnRpbExlZnRGdWxsU2NyZWVuKCkKLSAgICB7Ci0gICAgICAgIG1fZXZlbnQgPSBOb25lOwotICAg
ICAgICBnX2lkbGVfYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KGxlYXZlRnVsbFNj
cmVlbklkbGUpLCB0aGlzKTsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwot
ICAgIH0KLQotICAgIEZ1bGxTY3JlZW5FdmVudCBtX2V2ZW50OwotfTsKLQotc3RhdGljIHZvaWQg
dGVzdFdlYlZpZXdGdWxsU2NyZWVuKEZ1bGxTY3JlZW5DbGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rw
b2ludGVyKQotewotICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOwot
ICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keT5GdWxsU2NyZWVuIHRlc3Q8L2JvZHk+PC9o
dG1sPiIsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIHRlc3Qt
PnJlcXVlc3RGdWxsU2NyZWVuQW5kV2FpdFVudGlsRW50ZXJlZEZ1bGxTY3JlZW4oKTsKLSAgICBn
X2Fzc2VydF9jbXBpbnQodGVzdC0+bV9ldmVudCwgPT0sIEZ1bGxTY3JlZW5DbGllbnRUZXN0OjpF
bnRlcik7Ci0gICAgdGVzdC0+bGVhdmVGdWxsU2NyZWVuQW5kV2FpdFVudGlsTGVmdEZ1bGxTY3Jl
ZW4oKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9ldmVudCwgPT0sIEZ1bGxTY3JlZW5D
bGllbnRUZXN0OjpMZWF2ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3Q2FuU2hvd01J
TUVUeXBlKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIC8vIFN1cHBv
cnRlZCBNSU1FIHR5cGVzLgotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19jYW5fc2hvd19t
aW1lX3R5cGUodGVzdC0+bV93ZWJWaWV3LCAidGV4dC9odG1sIikpOwotICAgIGdfYXNzZXJ0KHdl
YmtpdF93ZWJfdmlld19jYW5fc2hvd19taW1lX3R5cGUodGVzdC0+bV93ZWJWaWV3LCAidGV4dC9w
bGFpbiIpKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfY2FuX3Nob3dfbWltZV90eXBl
KHRlc3QtPm1fd2ViVmlldywgImltYWdlL2pwZWciKSk7Ci0KLSAgICAvLyBVbnN1cHBvcnRlZCBN
SU1FIHR5cGVzLgotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX3Nob3dfbWltZV90
eXBlKHRlc3QtPm1fd2ViVmlldywgInRleHQvdmNhcmQiKSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtp
dF93ZWJfdmlld19jYW5fc2hvd19taW1lX3R5cGUodGVzdC0+bV93ZWJWaWV3LCAiYXBwbGljYXRp
b24vcGRmIikpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX3Nob3dfbWltZV90
eXBlKHRlc3QtPm1fd2ViVmlldywgImFwcGxpY2F0aW9uL3ppcCIpKTsKLSAgICBnX2Fzc2VydCgh
d2Via2l0X3dlYl92aWV3X2Nhbl9zaG93X21pbWVfdHlwZSh0ZXN0LT5tX3dlYlZpZXcsICJhcHBs
aWNhdGlvbi9vY3RldC1zdHJlYW0iKSk7Ci0KLSAgICAvLyBQbHVnaW5zIGFyZSBvbmx5IHN1cHBv
cnRlZCB3aGVuIGVuYWJsZWQuCi0gICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF9hZGRpdGlvbmFs
X3BsdWdpbnNfZGlyZWN0b3J5KHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dCh0ZXN0LT5tX3dl
YlZpZXcpLCBXRUJLSVRfVEVTVF9QTFVHSU5fRElSKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfd2Vi
X3ZpZXdfY2FuX3Nob3dfbWltZV90eXBlKHRlc3QtPm1fd2ViVmlldywgImFwcGxpY2F0aW9uL3gt
d2Via2l0LXRlc3QtbmV0c2NhcGUiKSk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVf
cGx1Z2lucyh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHRlc3QtPm1fd2ViVmlldyksIEZB
TFNFKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9zaG93X21pbWVfdHlwZSh0
ZXN0LT5tX3dlYlZpZXcsICJhcHBsaWNhdGlvbi94LXdlYmtpdC10ZXN0LW5ldHNjYXBlIikpOwot
fQotCi1jbGFzcyBGb3JtQ2xpZW50VGVzdDogcHVibGljIFdlYlZpZXdUZXN0IHsKLXB1YmxpYzoK
LSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKEZvcm1DbGllbnRUZXN0KTsKLQotICAgIHN0YXRp
YyB2b2lkIHN1Ym1pdEZvcm1DYWxsYmFjayhXZWJLaXRXZWJWaWV3KiwgV2ViS2l0Rm9ybVN1Ym1p
c3Npb25SZXF1ZXN0KiByZXF1ZXN0LCBGb3JtQ2xpZW50VGVzdCogdGVzdCkKLSAgICB7Ci0gICAg
ICAgIHRlc3QtPnN1Ym1pdEZvcm0ocmVxdWVzdCk7Ci0gICAgfQotCi0gICAgRm9ybUNsaWVudFRl
c3QoKQotICAgICAgICA6IG1fc3VibWl0UG9zaXRpb25YKDApCi0gICAgICAgICwgbV9zdWJtaXRQ
b3NpdGlvblkoMCkKLSAgICB7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAi
c3VibWl0LWZvcm0iLCBHX0NBTExCQUNLKHN1Ym1pdEZvcm1DYWxsYmFjayksIHRoaXMpOwotICAg
IH0KLQotICAgIH5Gb3JtQ2xpZW50VGVzdCgpCi0gICAgewotICAgICAgICBnX3NpZ25hbF9oYW5k
bGVyc19kaXNjb25uZWN0X21hdGNoZWQobV93ZWJWaWV3LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAw
LCAwLCAwLCAwLCB0aGlzKTsKLSAgICB9Ci0KLSAgICB2b2lkIHN1Ym1pdEZvcm0oV2ViS2l0Rm9y
bVN1Ym1pc3Npb25SZXF1ZXN0KiByZXF1ZXN0KQotICAgIHsKLSAgICAgICAgYXNzZXJ0T2JqZWN0
SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChyZXF1ZXN0KSk7Ci0gICAgICAgIG1f
cmVxdWVzdCA9IHJlcXVlc3Q7Ci0gICAgICAgIHdlYmtpdF9mb3JtX3N1Ym1pc3Npb25fcmVxdWVz
dF9zdWJtaXQocmVxdWVzdCk7Ci0gICAgICAgIHF1aXRNYWluTG9vcCgpOwotICAgIH0KLQotICAg
IEdIYXNoVGFibGUqIHdhaXRVbnRpbEZvcm1TdWJtaXR0ZWRBbmRHZXRUZXh0RmllbGRzKCkKLSAg
ICB7Ci0gICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAgICAgICAgcmV0dXJu
IHdlYmtpdF9mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdF9nZXRfdGV4dF9maWVsZHMobV9yZXF1ZXN0
LmdldCgpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZ2Jvb2xlYW4gZG9DbGlja0lkbGVDYWxsYmFj
ayhGb3JtQ2xpZW50VGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHRlc3QtPmNsaWNrTW91c2VC
dXR0b24odGVzdC0+bV9zdWJtaXRQb3NpdGlvblgsIHRlc3QtPm1fc3VibWl0UG9zaXRpb25ZLCAx
KTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQotICAgIHZvaWQgc3VibWl0Rm9ybUF0
UG9zaXRpb24oaW50IHgsIGludCB5KQotICAgIHsKLSAgICAgICAgbV9zdWJtaXRQb3NpdGlvblgg
PSB4OwotICAgICAgICBtX3N1Ym1pdFBvc2l0aW9uWSA9IHk7Ci0gICAgICAgIGdfaWRsZV9hZGQo
cmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oZG9DbGlja0lkbGVDYWxsYmFjayksIHRoaXMp
OwotICAgIH0KLQotICAgIGludCBtX3N1Ym1pdFBvc2l0aW9uWDsKLSAgICBpbnQgbV9zdWJtaXRQ
b3NpdGlvblk7Ci0gICAgR1JlZlB0cjxXZWJLaXRGb3JtU3VibWlzc2lvblJlcXVlc3Q+IG1fcmVx
dWVzdDsKLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3U3VibWl0Rm9ybShGb3JtQ2xpZW50
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRX
YWl0VW50aWxNYXBwZWQoKTsKLQotICAgIGNvbnN0IGNoYXIqIGZvcm1IVE1MID0KLSAgICAgICAg
IjxodG1sPjxib2R5PiIKLSAgICAgICAgIiA8Zm9ybSBhY3Rpb249JyMnPiIKLSAgICAgICAgIiAg
PGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3RleHQxJyB2YWx1ZT0ndmFsdWUxJz4iCi0gICAgICAg
ICIgIDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSd0ZXh0MicgdmFsdWU9J3ZhbHVlMic+IgotICAg
ICAgICAiICA8aW5wdXQgdHlwZT0ncGFzc3dvcmQnIG5hbWU9J3Bhc3N3b3JkJyB2YWx1ZT0nc2Vj
cmV0Jz4iCi0gICAgICAgICIgIDx0ZXh0YXJlYSBjb2xzPSc1JyByb3dzPSc1JyBuYW1lPSd0ZXh0
YXJlYSc+VGV4dDwvdGV4dGFyZWE+IgotICAgICAgICAiICA8aW5wdXQgdHlwZT0naGlkZGVuJyBu
YW1lPSdoaWRkZW4xJyB2YWx1ZT0naGlkZGVuMSc+IgotICAgICAgICAiICA8aW5wdXQgdHlwZT0n
c3VibWl0JyB2YWx1ZT0nU3VibWl0JyBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsg
dG9wOjEnIHNpemU9JzEwJz4iCi0gICAgICAgICIgPC9mb3JtPiIKLSAgICAgICAgIjwvYm9keT48
L2h0bWw+IjsKLQotICAgIHRlc3QtPmxvYWRIdG1sKGZvcm1IVE1MLCAiZmlsZTovLy8iKTsKLSAg
ICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIHRlc3QtPnN1Ym1pdEZvcm1B
dFBvc2l0aW9uKDUsIDUpOwotICAgIEdIYXNoVGFibGUqIHZhbHVlcyA9IHRlc3QtPndhaXRVbnRp
bEZvcm1TdWJtaXR0ZWRBbmRHZXRUZXh0RmllbGRzKCk7Ci0gICAgZ19hc3NlcnQodmFsdWVzKTsK
LSAgICBnX2Fzc2VydF9jbXB1aW50KGdfaGFzaF90YWJsZV9zaXplKHZhbHVlcyksID09LCAzKTsK
LSAgICBnX2Fzc2VydF9jbXBzdHIoc3RhdGljX2Nhc3Q8Y2hhcio+KGdfaGFzaF90YWJsZV9sb29r
dXAodmFsdWVzLCAidGV4dDEiKSksID09LCAidmFsdWUxIik7Ci0gICAgZ19hc3NlcnRfY21wc3Ry
KHN0YXRpY19jYXN0PGNoYXIqPihnX2hhc2hfdGFibGVfbG9va3VwKHZhbHVlcywgInRleHQyIikp
LCA9PSwgInZhbHVlMiIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihzdGF0aWNfY2FzdDxjaGFyKj4o
Z19oYXNoX3RhYmxlX2xvb2t1cCh2YWx1ZXMsICJwYXNzd29yZCIpKSwgPT0sICJzZWNyZXQiKTsK
LX0KLQotY2xhc3MgU2F2ZVdlYlZpZXdUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3QgewotcHVibGlj
OgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoU2F2ZVdlYlZpZXdUZXN0KTsKLQotICAgIFNh
dmVXZWJWaWV3VGVzdCgpCi0gICAgICAgIDogbV90ZW1wRGlyZWN0b3J5KGdfZGlyX21ha2VfdG1w
KCJXZWJLaXQyU2F2ZVZpZXdUZXN0LVhYWFhYWCIsIDApKQotICAgIHsKLSAgICB9Ci0KLSAgICB+
U2F2ZVdlYlZpZXdUZXN0KCkKLSAgICB7Ci0gICAgICAgIGlmIChHX0lTX0ZJTEUobV9maWxlLmdl
dCgpKSkKLSAgICAgICAgICAgIGdfZmlsZV9kZWxldGUobV9maWxlLmdldCgpLCAwLCAwKTsKLQot
ICAgICAgICBpZiAoR19JU19JTlBVVF9TVFJFQU0obV9pbnB1dFN0cmVhbS5nZXQoKSkpCi0gICAg
ICAgICAgICBnX2lucHV0X3N0cmVhbV9jbG9zZShtX2lucHV0U3RyZWFtLmdldCgpLCAwLCAwKTsK
LQotICAgICAgICBpZiAobV90ZW1wRGlyZWN0b3J5KQotICAgICAgICAgICAgZ19ybWRpcihtX3Rl
bXBEaXJlY3RvcnkuZ2V0KCkpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHdlYlZpZXdTYXZl
ZFRvU3RyZWFtQ2FsbGJhY2soR09iamVjdCogb2JqZWN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwg
U2F2ZVdlYlZpZXdUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgR093blB0cjxHRXJyb3I+IGVy
cm9yOwotICAgICAgICB0ZXN0LT5tX2lucHV0U3RyZWFtID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJf
dmlld19zYXZlX2ZpbmlzaCh0ZXN0LT5tX3dlYlZpZXcsIHJlc3VsdCwgJmVycm9yLm91dFB0cigp
KSk7Ci0gICAgICAgIGdfYXNzZXJ0KEdfSVNfSU5QVVRfU1RSRUFNKHRlc3QtPm1faW5wdXRTdHJl
YW0uZ2V0KCkpKTsKLSAgICAgICAgZ19hc3NlcnQoIWVycm9yKTsKLQotICAgICAgICB0ZXN0LT5x
dWl0TWFpbkxvb3AoKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCB3ZWJWaWV3U2F2ZWRUb0Zp
bGVDYWxsYmFjayhHT2JqZWN0KiBvYmplY3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBTYXZlV2Vi
Vmlld1Rlc3QqIHRlc3QpCi0gICAgewotICAgICAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7Ci0g
ICAgICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19zYXZlX3RvX2ZpbGVfZmluaXNoKHRlc3Qt
Pm1fd2ViVmlldywgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpKTsKLSAgICAgICAgZ19hc3NlcnQo
IWVycm9yKTsKLQotICAgICAgICB0ZXN0LT5xdWl0TWFpbkxvb3AoKTsKLSAgICB9Ci0KLSAgICB2
b2lkIHNhdmVBbmRXYWl0Rm9yU3RyZWFtKCkKLSAgICB7Ci0gICAgICAgIHdlYmtpdF93ZWJfdmll
d19zYXZlKG1fd2ViVmlldywgV0VCS0lUX1NBVkVfTU9ERV9NSFRNTCwgMCwgcmVpbnRlcnByZXRf
Y2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPih3ZWJWaWV3U2F2ZWRUb1N0cmVhbUNhbGxiYWNrKSwg
dGhpcyk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAgICB9Ci0KLSAg
ICB2b2lkIHNhdmVBbmRXYWl0Rm9yRmlsZSgpCi0gICAgewotICAgICAgICBtX3NhdmVEZXN0aW5h
dGlvbkZpbGVQYXRoLnNldChnX2J1aWxkX2ZpbGVuYW1lKG1fdGVtcERpcmVjdG9yeS5nZXQoKSwg
InRlc3RXZWJWaWV3U2F2ZVJlc3VsdC5taHQiLCBOVUxMKSk7Ci0gICAgICAgIG1fZmlsZSA9IGFk
b3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKG1fc2F2ZURlc3RpbmF0aW9uRmlsZVBhdGguZ2V0
KCkpKTsKLSAgICAgICAgd2Via2l0X3dlYl92aWV3X3NhdmVfdG9fZmlsZShtX3dlYlZpZXcsIG1f
ZmlsZS5nZXQoKSwgV0VCS0lUX1NBVkVfTU9ERV9NSFRNTCwgMCwgcmVpbnRlcnByZXRfY2FzdDxH
QXN5bmNSZWFkeUNhbGxiYWNrPih3ZWJWaWV3U2F2ZWRUb0ZpbGVDYWxsYmFjayksIHRoaXMpOwot
ICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgR093blB0
cjxjaGFyPiBtX3RlbXBEaXJlY3Rvcnk7Ci0gICAgR093blB0cjxjaGFyPiBtX3NhdmVEZXN0aW5h
dGlvbkZpbGVQYXRoOwotICAgIEdSZWZQdHI8R0lucHV0U3RyZWFtPiBtX2lucHV0U3RyZWFtOwot
ICAgIEdSZWZQdHI8R0ZpbGU+IG1fZmlsZTsKLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3
U2F2ZShTYXZlV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+
bG9hZEh0bWwoIjxodG1sPiIKLSAgICAgICAgICAgICAgICAgICAiPGJvZHk+IgotICAgICAgICAg
ICAgICAgICAgICIgIDxwPkEgcGFyYWdyYXBoIHdpdGggcGxhaW4gdGV4dDwvcD4iCi0gICAgICAg
ICAgICAgICAgICAgIiAgPHA+IgotICAgICAgICAgICAgICAgICAgICIgICAgQSByZWQgYm94OiA8
aW1nIHNyYz0nZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFB
SUFBQUFDQ0FJQUFBRDkxSnB6QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVV
SDNBWVdEVE1Wd25TWm53QUFBQjFwVkZoMFEyOXRiV1Z1ZEFBQUFBQUFRM0psWVhSbFpDQjNhWFJv
SUVkSlRWQmtMbVVIQUFBQUZrbEVRVlFJMTJQOHo4REF3TURBeE1EQXdNREFBQUFOSFFFREsrbW15
QUFBQUFCSlJVNUVya0pnZ2c9PSc+PC9icj4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBBIGJs
dWUgYm94OiA8aW1nIHNyYz0nZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5T
VWhFVWdBQUFBSUFBQUFDQ0FJQUFBRDkxSnB6QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFB
QUFCM1JKVFVVSDNBWVdEVE12QkhoQUxRQUFBQjFwVkZoMFEyOXRiV1Z1ZEFBQUFBQUFRM0psWVhS
bFpDQjNhWFJvSUVkSlRWQmtMbVVIQUFBQUZrbEVRVlFJMTJOazRQblB3TURBeE1EQXdNREFBQUFM
cndFUFBJczFwZ0FBQUFCSlJVNUVya0pnZ2c9PSc+IgotICAgICAgICAgICAgICAgICAgICIgIDwv
cD4iCi0gICAgICAgICAgICAgICAgICAgIjwvYm9keT4iCi0gICAgICAgICAgICAgICAgICAgIjwv
aHRtbD4iLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIC8v
IFdyaXRlIHRvIGEgZmlsZSBhbmQgdG8gYW4gaW5wdXQgc3RyZWFtLgotICAgIHRlc3QtPnNhdmVB
bmRXYWl0Rm9yRmlsZSgpOwotICAgIHRlc3QtPnNhdmVBbmRXYWl0Rm9yU3RyZWFtKCk7Ci0KLSAg
ICAvLyBXZSBzaG91bGQgaGF2ZSBleGFjdGx5IHRoZSBzYW1lIGFtb3VudCBvZiBieXRlcyBpbiB0
aGUgZmlsZQotICAgIC8vIHRoYW4gdGhvc2UgY29taW5nIGZyb20gdGhlIEdJbnB1dFN0cmVhbS4g
V2UgZG9uJ3QgY29tcGFyZSB0aGUKLSAgICAvLyBzdHJpbmdzIHJlYWQgc2luY2UgdGhlICdEYXRl
JyBmaWVsZCBhbmQgdGhlIGJvdW5kYXJpZXMgd2lsbCBiZQotICAgIC8vIGRpZmZlcmVudCBvbiBl
YWNoIGNhc2UuIE1IVE1MIGZ1bmN0aW9uYWxpdHkgd2lsbCBiZSB0ZXN0ZWQgYnkKLSAgICAvLyBM
YXlvdXQgdGVzdHMsIHNvIGNoZWNraW5nIHRoZSBhbW91bnQgb2YgYnl0ZXMgaXMgZW5vdWdoLgot
ICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKLSAgICBnY2hhciBidWZmZXJbNTEyXSA9IHsgMCB9
OwotICAgIGdzc2l6ZSByZWFkQnl0ZXMgPSAwOwotICAgIGdzc2l6ZSB0b3RhbEJ5dGVzRnJvbVN0
cmVhbSA9IDA7Ci0gICAgd2hpbGUgKHJlYWRCeXRlcyA9IGdfaW5wdXRfc3RyZWFtX3JlYWQodGVz
dC0+bV9pbnB1dFN0cmVhbS5nZXQoKSwgJmJ1ZmZlciwgNTEyLCAwLCAmZXJyb3Iub3V0UHRyKCkp
KSB7Ci0gICAgICAgIGdfYXNzZXJ0KCFlcnJvcik7Ci0gICAgICAgIHRvdGFsQnl0ZXNGcm9tU3Ry
ZWFtICs9IHJlYWRCeXRlczsKLSAgICB9Ci0KLSAgICAvLyBDaGVjayB0aGF0IHRoZSBmaWxlIGV4
aXN0cyBhbmQgdGhhdCBpdCBjb250YWlucyB0aGUgc2FtZSBhbW91bnQgb2YgYnl0ZXMuCi0gICAg
R1JlZlB0cjxHRmlsZUluZm8+IGZpbGVJbmZvID0gYWRvcHRHUmVmKGdfZmlsZV9xdWVyeV9pbmZv
KHRlc3QtPm1fZmlsZS5nZXQoKSwgR19GSUxFX0FUVFJJQlVURV9TVEFOREFSRF9TSVpFLCBzdGF0
aWNfY2FzdDxHRmlsZVF1ZXJ5SW5mb0ZsYWdzPigwKSwgMCwgMCkpOwotICAgIGdfYXNzZXJ0X2Nt
cGludChnX2ZpbGVfaW5mb19nZXRfc2l6ZShmaWxlSW5mby5nZXQoKSksID09LCB0b3RhbEJ5dGVz
RnJvbVN0cmVhbSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3TW9kZShXZWJWaWV3VGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogaW5kZXhI
VE1MID0gIjxodG1sPjxib2R5PjxwPlRlc3QgV2ViIFZpZXcgTW9kZTwvcD48L2JvZHk+PC9odG1s
PiI7Ci0KLSAgICAvLyBXZWIgbW9kZS4KLSAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF93ZWJf
dmlld19nZXRfdmlld19tb2RlKHRlc3QtPm1fd2ViVmlldyksID09LCBXRUJLSVRfVklFV19NT0RF
X1dFQik7Ci0gICAgdGVzdC0+bG9hZEh0bWwoaW5kZXhIVE1MLCAwKTsKLSAgICB0ZXN0LT53YWl0
VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBXZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBqYXZhc2Ny
aXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJ3aW5k
b3cuZG9jdW1lbnQuYm9keS50ZXh0Q29udGVudDsiLCAwKTsKLSAgICBHT3duUHRyPGNoYXI+IHZh
bHVlU3RyaW5nKFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3Jp
cHRSZXN1bHQpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAi
VGVzdCBXZWIgVmlldyBNb2RlIik7Ci0KLSAgICAvLyBTb3VyY2UgbW9kZS4KLSAgICB3ZWJraXRf
d2ViX3ZpZXdfc2V0X3ZpZXdfbW9kZSh0ZXN0LT5tX3dlYlZpZXcsIFdFQktJVF9WSUVXX01PREVf
U09VUkNFKTsKLSAgICB0ZXN0LT5sb2FkSHRtbChpbmRleEhUTUwsIDApOwotICAgIHRlc3QtPndh
aXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5K
YXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoIndpbmRvdy5kb2N1bWVudC5ib2R5LnRleHRD
b250ZW50OyIsIDApOwotICAgIHZhbHVlU3RyaW5nLnNldChXZWJWaWV3VGVzdDo6amF2YXNjcmlw
dFJlc3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnRfY21wc3Ry
KHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgaW5kZXhIVE1MKTsKLX0KLQotLy8gVG8gdGVzdCBwYWdl
IHZpc2liaWxpdHkgQVBJLiBDdXJyZW50bHkgb25seSAndmlzaWJsZScgYW5kICdoaWRkZW4nIHN0
YXRlcyBhcmUgaW1wbGVtZW50ZWQgZnVsbHkgaW4gV2ViQ29yZS4KLS8vIFNlZSBhbHNvIGh0dHA6
Ly93d3cudzMub3JnL1RSLzIwMTEvV0QtcGFnZS12aXNpYmlsaXR5LTIwMTEwNjAyLyBhbmQgaHR0
cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vY2hyb21lL3doaXRlcGFwZXJzL3BhZ2V2aXNpYmls
aXR5Ci1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1BhZ2VWaXNpYmlsaXR5KFdlYlZpZXdUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48dGl0bGU+
PC90aXRsZT4iCi0gICAgICAgICI8Ym9keT48cD5UZXN0IFdlYiBQYWdlIFZpc2liaWxpdHk8L3A+
IgotICAgICAgICAiPHNjcmlwdD4iCi0gICAgICAgICJkb2N1bWVudC5hZGRFdmVudExpc3RlbmVy
KFwidmlzaWJpbGl0eWNoYW5nZVwiLCBvblZpc2liaWxpdHlDaGFuZ2UsIGZhbHNlKTsiCi0gICAg
ICAgICJmdW5jdGlvbiBvblZpc2liaWxpdHlDaGFuZ2UoKSB7IgotICAgICAgICAiICAgIGRvY3Vt
ZW50LnRpdGxlID0gZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlOyIKLSAgICAgICAgIn0iCi0gICAg
ICAgICI8L3NjcmlwdD4iCi0gICAgICAgICI8L2JvZHk+PC9odG1sPiIsCi0gICAgICAgIDApOwot
Ci0gICAgLy8gV2FpdCB1bnRpbGwgdGhlIHBhZ2UgaXMgbG9hZGVkLiBJbml0aWFsIHZpc2liaWxp
dHkgc2hvdWxkIGJlICdoaWRkZW4nLgotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgp
OwotCi0gICAgR093blB0cjxHRXJyb3I+IGVycm9yOwotICAgIFdlYktpdEphdmFzY3JpcHRSZXN1
bHQqIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmlu
aXNoZWQoImRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZTsiLCAmZXJyb3Iub3V0UHRyKCkpOwotICAg
IGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOwotICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7
Ci0gICAgR093blB0cjxjaGFyPiB2YWx1ZVN0cmluZyhXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJl
c3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHZh
bHVlU3RyaW5nLmdldCgpLCA9PSwgImhpZGRlbiIpOwotCi0gICAgamF2YXNjcmlwdFJlc3VsdCA9
IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQuaGlkZGVu
OyIsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7Ci0g
ICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKLSAgICBnX2Fzc2VydChXZWJWaWV3VGVzdDo6amF2
YXNjcmlwdFJlc3VsdFRvQm9vbGVhbihqYXZhc2NyaXB0UmVzdWx0KSk7Ci0KLSAgICAvLyBTaG93
IHRoZSBwYWdlLiBUaGUgdmlzaWJpbGl0eSBzaG91bGQgYmUgdXBkYXRlZCB0byAndmlzaWJsZScu
Ci0gICAgdGVzdC0+c2hvd0luV2luZG93KCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsVGl0bGVDaGFu
Z2VkKCk7Ci0KLSAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdh
aXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU7IiwgJmVycm9yLm91dFB0
cigpKTsKLSAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBnX2Fzc2VydCghZXJy
b3IuZ2V0KCkpOwotICAgIHZhbHVlU3RyaW5nLnNldChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJl
c3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHZh
bHVlU3RyaW5nLmdldCgpLCA9PSwgInZpc2libGUiKTsKLQotICAgIGphdmFzY3JpcHRSZXN1bHQg
PSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImRvY3VtZW50LmhpZGRl
bjsiLCAmZXJyb3Iub3V0UHRyKCkpOwotICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOwot
ICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7Ci0gICAgZ19hc3NlcnQoIVdlYlZpZXdUZXN0Ojpq
YXZhc2NyaXB0UmVzdWx0VG9Cb29sZWFuKGphdmFzY3JpcHRSZXN1bHQpKTsKLQotICAgIC8vIEhp
ZGUgdGhlIHBhZ2UuIFRoZSB2aXNpYmlsaXR5IHNob3VsZCBiZSB1cGRhdGVkIHRvICdoaWRkZW4n
LgotICAgIGd0a193aWRnZXRfaGlkZShHVEtfV0lER0VUKHRlc3QtPm1fd2ViVmlldykpOwotICAg
IHRlc3QtPndhaXRVbnRpbFRpdGxlQ2hhbmdlZCgpOwotCi0gICAgamF2YXNjcmlwdFJlc3VsdCA9
IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQudmlzaWJp
bGl0eVN0YXRlOyIsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgZ19hc3NlcnQoamF2YXNjcmlwdFJl
c3VsdCk7Ci0gICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKLSAgICB2YWx1ZVN0cmluZy5zZXQo
V2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0NTdHJpbmcoamF2YXNjcmlwdFJlc3VsdCkp
OwotICAgIGdfYXNzZXJ0X2NtcHN0cih2YWx1ZVN0cmluZy5nZXQoKSwgPT0sICJoaWRkZW4iKTsK
LQotICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGls
RmluaXNoZWQoImRvY3VtZW50LmhpZGRlbjsiLCAmZXJyb3Iub3V0UHRyKCkpOwotICAgIGdfYXNz
ZXJ0KGphdmFzY3JpcHRSZXN1bHQpOwotICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7Ci0gICAg
Z19hc3NlcnQoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0Jvb2xlYW4oamF2YXNjcmlw
dFJlc3VsdCkpOwotfQotCi1jbGFzcyBTbmFwc2hvdFdlYlZpZXdUZXN0OiBwdWJsaWMgV2ViVmll
d1Rlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoU25hcHNob3RXZWJW
aWV3VGVzdCk7Ci0KLSAgICBzdGF0aWMgdm9pZCBvblNuYXBzaG90Q2FuY2VsbGVkUmVhZHkoV2Vi
S2l0V2ViVmlldyogd2ViX3ZpZXcsIEdBc3luY1Jlc3VsdCogcmVzLCBTbmFwc2hvdFdlYlZpZXdU
ZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgR093blB0cjxHRXJyb3I+IGVycm9yOwotICAgICAg
ICB0ZXN0LT5tX3N1cmZhY2UgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NuYXBzaG90X2ZpbmlzaCh3
ZWJfdmlldywgcmVzLCAmZXJyb3Iub3V0UHRyKCkpOwotICAgICAgICBnX2Fzc2VydCghdGVzdC0+
bV9zdXJmYWNlKTsKLSAgICAgICAgZ19hc3NlcnRfZXJyb3IoZXJyb3IuZ2V0KCksIEdfSU9fRVJS
T1IsIEdfSU9fRVJST1JfQ0FOQ0VMTEVEKTsKLSAgICAgICAgdGVzdC0+cXVpdE1haW5Mb29wKCk7
Ci0gICAgfQotCi0gICAgZ2Jvb2xlYW4gZ2V0U25hcHNob3RBbmRDYW5jZWwoKQotICAgIHsKLSAg
ICAgICAgaWYgKG1fc3VyZmFjZSkKLSAgICAgICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveSht
X3N1cmZhY2UpOwotICAgICAgICBtX3N1cmZhY2UgPSAwOwotICAgICAgICBHUmVmUHRyPEdDYW5j
ZWxsYWJsZT4gY2FuY2VsbGFibGUgPSBhZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSk7Ci0g
ICAgICAgIHdlYmtpdF93ZWJfdmlld19nZXRfc25hcHNob3QobV93ZWJWaWV3LCBXRUJLSVRfU05B
UFNIT1RfUkVHSU9OX1ZJU0lCTEUsIFdFQktJVF9TTkFQU0hPVF9PUFRJT05TX05PTkUsIGNhbmNl
bGxhYmxlLmdldCgpLCByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KG9uU25h
cHNob3RDYW5jZWxsZWRSZWFkeSksIHRoaXMpOwotICAgICAgICBnX2NhbmNlbGxhYmxlX2NhbmNl
bChjYW5jZWxsYWJsZS5nZXQoKSk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29w
KTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLX07Ci0KLXN0YXRpYyB2b2lkIHRl
c3RXZWJWaWV3U25hcHNob3QoU25hcHNob3RXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRl
cikKLXsKLSAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHk+PHA+V2hhdGV2ZXI8L3A+PC9i
b2R5PjwvaHRtbD4iLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQot
ICAgIC8vIFdlYlZpZXcgbm90IHZpc2libGUuCi0gICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNl
MSA9IHRlc3QtPmdldFNuYXBzaG90QW5kV2FpdFVudGlsUmVhZHkoV0VCS0lUX1NOQVBTSE9UX1JF
R0lPTl9WSVNJQkxFLCBXRUJLSVRfU05BUFNIT1RfT1BUSU9OU19OT05FKTsKLSAgICBnX2Fzc2Vy
dCghc3VyZmFjZTEpOwotCi0gICAgLy8gU2hvdyBzdXJmYWNlLCByZXNpemUgdG8gNTB4NTAsIHRy
eSBhZ2Fpbi4KLSAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKLSAg
ICB0ZXN0LT5yZXNpemVWaWV3KDUwLCA1MCk7Ci0gICAgc3VyZmFjZTEgPSB0ZXN0LT5nZXRTbmFw
c2hvdEFuZFdhaXRVbnRpbFJlYWR5KFdFQktJVF9TTkFQU0hPVF9SRUdJT05fVklTSUJMRSwgV0VC
S0lUX1NOQVBTSE9UX09QVElPTlNfTk9ORSk7Ci0gICAgZ19hc3NlcnQoc3VyZmFjZTEpOwotCi0g
ICAgLy8gb2J0YWluZWQgc3VyZmFjZSBzaG91bGQgYmUgYXQgdGhlIG1vc3QgNTB4NTAuIFN0b3Jl
IHRoZSBzaXplCi0gICAgLy8gZm9yIGNvbXBhcmlzb24gbGF0ZXIuCi0gICAgaW50IHdpZHRoID0g
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZTEpOwotICAgIGludCBoZWlnaHQg
PSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZTEpOwotICAgIGdfYXNzZXJ0
X2NtcGludCh3aWR0aCwgPD0sIDUwKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoaGVpZ2h0LCA8PSwg
NTApOwotCi0gICAgLy8gU2VsZWN0IGFsbCB0ZXh0IGluIHRoZSBXZWJWaWV3LCByZXF1ZXN0IGEg
c25hcHNob3QgaWdub3Jpbmcgc2VsZWN0aW9uLgotICAgIHRlc3QtPnNlbGVjdEFsbCgpOwotICAg
IHN1cmZhY2UxID0gY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2UodGVzdC0+Z2V0U25hcHNob3RBbmRX
YWl0VW50aWxSZWFkeShXRUJLSVRfU05BUFNIT1RfUkVHSU9OX1ZJU0lCTEUsIFdFQktJVF9TTkFQ
U0hPVF9PUFRJT05TX05PTkUpKTsKLSAgICBnX2Fzc2VydChzdXJmYWNlMSk7Ci0gICAgZ19hc3Nl
cnRfY21waW50KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UxKSwgPT0sIHdp
ZHRoKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0
KHN1cmZhY2UxKSwgPT0sIGhlaWdodCk7Ci0KLSAgICAvLyBDcmVhdGUgaWRlbnRpY2FsIHN1cmZh
Y2UuCi0gICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlMiA9IHRlc3QtPmdldFNuYXBzaG90QW5k
V2FpdFVudGlsUmVhZHkoV0VCS0lUX1NOQVBTSE9UX1JFR0lPTl9WSVNJQkxFLCBXRUJLSVRfU05B
UFNIT1RfT1BUSU9OU19OT05FKTsKLSAgICBnX2Fzc2VydChzdXJmYWNlMik7Ci0KLSAgICAvLyBD
b21wYXJlIHRoZXNlIHR3bywgdGhleSBzaG91bGQgYmUgaWRlbnRpY2FsLgotICAgIGdfYXNzZXJ0
KFRlc3Q6OmNhaXJvU3VyZmFjZXNFcXVhbChzdXJmYWNlMSwgc3VyZmFjZTIpKTsKLQotICAgIC8v
IFJlcXVlc3QgYSBuZXcgc25hcHNob3QsIGluY2x1ZGluZyB0aGUgc2VsZWN0aW9uIHRoaXMgdGlt
ZS4gVGhlCi0gICAgLy8gc2l6ZSBzaG91bGQgYmUgdGhlIHNhbWUgYnV0IHRoZSByZXN1bHQgbXVz
dCBiZSBkaWZmZXJlbnQgdG8gdGhlCi0gICAgLy8gb25lIHByZXZpb3VzbHkgb2J0YWluZWQuCi0g
ICAgc3VyZmFjZTIgPSB0ZXN0LT5nZXRTbmFwc2hvdEFuZFdhaXRVbnRpbFJlYWR5KFdFQktJVF9T
TkFQU0hPVF9SRUdJT05fVklTSUJMRSwgV0VCS0lUX1NOQVBTSE9UX09QVElPTlNfSU5DTFVERV9T
RUxFQ1RJT05fSElHSExJR0hUSU5HKTsKLSAgICBnX2Fzc2VydChzdXJmYWNlMik7Ci0gICAgZ19h
c3NlcnRfY21waW50KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UyKSwgPT0s
IHdpZHRoKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVp
Z2h0KHN1cmZhY2UyKSwgPT0sIGhlaWdodCk7Ci0gICAgZ19hc3NlcnQoIVRlc3Q6OmNhaXJvU3Vy
ZmFjZXNFcXVhbChzdXJmYWNlMSwgc3VyZmFjZTIpKTsKLQotICAgIC8vIFJlcXVlc3QgYSBzbmFw
c2hvdCBvZiB0aGUgd2hvbGUgZG9jdW1lbnQgaW4gdGhlIFdlYlZpZXcuIFRoZQotICAgIC8vIHJl
c3VsdCBzaG91bGQgYmUgZGlmZmVyZW50IGZyb20gdGhlIHNpemUgb2J0YWluZWQgcHJldmlvdXNs
eS4KLSAgICBzdXJmYWNlMiA9IHRlc3QtPmdldFNuYXBzaG90QW5kV2FpdFVudGlsUmVhZHkoV0VC
S0lUX1NOQVBTSE9UX1JFR0lPTl9GVUxMX0RPQ1VNRU5ULCBXRUJLSVRfU05BUFNIT1RfT1BUSU9O
U19OT05FKTsKLSAgICBnX2Fzc2VydChzdXJmYWNlMik7Ci0gICAgZ19hc3NlcnRfY21waW50KGNh
aXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UyKSwgID4sIHdpZHRoKTsKLSAgICBn
X2Fzc2VydF9jbXBpbnQoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UyKSwg
PiwgaGVpZ2h0KTsKLSAgICBnX2Fzc2VydCghVGVzdDo6Y2Fpcm9TdXJmYWNlc0VxdWFsKHN1cmZh
Y2UxLCBzdXJmYWNlMikpOwotCi0gICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KHN1cmZhY2UxKTsK
LQotICAgIGdfYXNzZXJ0KHRlc3QtPmdldFNuYXBzaG90QW5kQ2FuY2VsKCkpOwotfQotCi12b2lk
IGJlZm9yZUFsbCgpCi17Ci0gICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJk
ZWZhdWx0LWNvbnRleHQiLCB0ZXN0V2ViVmlld0RlZmF1bHRDb250ZXh0KTsKLSAgICBXZWJWaWV3
VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImN1c3RvbS1jaGFyc2V0IiwgdGVzdFdlYlZpZXdD
dXN0b21DaGFyc2V0KTsKLSAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInNl
dHRpbmdzIiwgdGVzdFdlYlZpZXdTZXR0aW5ncyk7Ci0gICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2Vi
S2l0V2ViVmlldyIsICJ6b29tLWxldmVsIiwgdGVzdFdlYlZpZXdab29tTGV2ZWwpOwotICAgIFdl
YlZpZXdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAicnVuLWphdmFzY3JpcHQiLCB0ZXN0V2Vi
Vmlld1J1bkphdmFTY3JpcHQpOwotICAgIEZ1bGxTY3JlZW5DbGllbnRUZXN0OjphZGQoIldlYktp
dFdlYlZpZXciLCAiZnVsbHNjcmVlbiIsIHRlc3RXZWJWaWV3RnVsbFNjcmVlbik7Ci0gICAgV2Vi
Vmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJjYW4tc2hvdy1taW1lLXR5cGUiLCB0ZXN0
V2ViVmlld0NhblNob3dNSU1FVHlwZSk7Ci0gICAgRm9ybUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0
V2ViVmlldyIsICJzdWJtaXQtZm9ybSIsIHRlc3RXZWJWaWV3U3VibWl0Rm9ybSk7Ci0gICAgU2F2
ZVdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAic2F2ZSIsIHRlc3RXZWJWaWV3U2F2
ZSk7Ci0gICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJ2aWV3LW1vZGUiLCB0
ZXN0V2ViVmlld01vZGUpOwotICAgIFNuYXBzaG90V2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2Vi
VmlldyIsICJzbmFwc2hvdCIsIHRlc3RXZWJWaWV3U25hcHNob3QpOwotICAgIFdlYlZpZXdUZXN0
OjphZGQoIldlYktpdFdlYlZpZXciLCAicGFnZS12aXNpYmlsaXR5IiwgdGVzdFdlYlZpZXdQYWdl
VmlzaWJpbGl0eSk7Ci19Ci0KLXZvaWQgYWZ0ZXJBbGwoKQotewotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXdHcm91
cC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0
V2ViVmlld0dyb3VwLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDI2YzVjNS4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0
V2ViS2l0V2ViVmlld0dyb3VwLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIwNiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwot
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0g
KgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0g
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0KLSNpbmNsdWRlICJXZWJLaXRUZXN0U2VydmVyLmgiCi0jaW5jbHVkZSAiV2ViVmlld1Rlc3Qu
aCIKLSNpbmNsdWRlIDxjc3RkYXJnPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3
ZWJraXQyL3dlYmtpdDIuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Ci0KLXN0
YXRpYyBXZWJLaXRUZXN0U2VydmVyKiBrU2VydmVyOwotCi0vLyBUaGVzZSBhcmUgYWxsIGhlcmUg
c28gdGhhdCB0aGV5IGNhbiBiZSBjaGFuZ2VkIGVhc2lseSwgaWYgbmVjZXNzYXJ5Lgotc3RhdGlj
IGNvbnN0IGNoYXIqIGtTdHlsZVNoZWV0SFRNTCA9ICI8aHRtbD48ZGl2IGlkPVwic3R5bGVkRWxl
bWVudFwiPlN3ZWV0IHN0eWxleiE8L2Rpdj48L2h0bWw+IjsKLXN0YXRpYyBjb25zdCBjaGFyKiBr
SW5qZWN0ZWRTdHlsZVNoZWV0ID0gIiNzdHlsZWRFbGVtZW50IHsgZm9udC13ZWlnaHQ6IGJvbGQ7
IH0iOwotc3RhdGljIGNvbnN0IGNoYXIqIGtTdHlsZVNoZWV0VGVzdFNjcmlwdCA9ICJnZXRDb21w
dXRlZFN0eWxlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdHlsZWRFbGVtZW50JykpWydmb250
LXdlaWdodCddIjsKLXN0YXRpYyBjb25zdCBjaGFyKiBrU3R5bGVTaGVldFRlc3RTY3JpcHRSZXN1
bHQgPSAiYm9sZCI7Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3R3JvdXBEZWZhdWx0KFRlc3Qq
IHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgLy8gRGVmYXVsdCBncm91cCBpcyBzaGFyZWQg
YnkgYWxsIFdlYlZpZXdzIGJ5IGRlZmF1bHQuCi0gICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3PiB3
ZWJWaWV3MSA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIEdS
ZWZQdHI8V2ViS2l0V2ViVmlldz4gd2ViVmlldzIgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dl
Yl92aWV3X25ldygpKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2dyb3VwKHdl
YlZpZXcxLmdldCgpKSA9PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2dyb3VwKHdlYlZpZXcyLmdldCgp
KSk7Ci0KLSAgICAvLyBTZXR0aW5ncyBhcmUgc2hhcmVkIGJ5IGFsbCB3ZWIgdmlldyBpbiB0aGUg
c2FtZSBncm91cC4KLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdl
YlZpZXcxLmdldCgpKSA9PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdlYlZpZXcyLmdl
dCgpKSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3
MS5nZXQoKSkgPT0gd2Via2l0X3dlYl92aWV3X2dyb3VwX2dldF9zZXR0aW5ncyh3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X2dyb3VwKHdlYlZpZXcyLmdldCgpKSkpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0
V2ViVmlld0dyb3VwTmV3R3JvdXAoVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICAv
LyBQYXNzaW5nIDAgYXMgZ3JvdXAgbmFtZSBnZW5lcmF0ZXMgdGhlIG5hbWUgYXV0b21hdGljYWxs
eS4KLSAgICBHUmVmUHRyPFdlYktpdFdlYlZpZXdHcm91cD4gdmlld0dyb3VwMSA9IGFkb3B0R1Jl
Zih3ZWJraXRfd2ViX3ZpZXdfZ3JvdXBfbmV3KDApKTsKLSAgICB0ZXN0LT5hc3NlcnRPYmplY3RJ
c0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHZpZXdHcm91cDEuZ2V0KCkpKTsKLSAg
ICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ3JvdXBfZ2V0X25hbWUodmlld0dyb3VwMS5nZXQo
KSkpOwotCi0gICAgLy8gTmV3IGdyb3VwIHdpdGggYSBnaXZlbiBuYW1lLgotICAgIEdSZWZQdHI8
V2ViS2l0V2ViVmlld0dyb3VwPiB2aWV3R3JvdXAyID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJfdmll
d19ncm91cF9uZXcoIlRlc3RHcm91cDIiKSk7Ci0gICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxl
dGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVCh2aWV3R3JvdXAyLmdldCgpKSk7Ci0gICAgZ19h
c3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19ncm91cF9nZXRfbmFtZSh2aWV3R3JvdXAyLmdl
dCgpKSwgPT0sICJUZXN0R3JvdXAyIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJf
dmlld19ncm91cF9nZXRfbmFtZSh2aWV3R3JvdXAyLmdldCgpKSwgIT0sIHdlYmtpdF93ZWJfdmll
d19ncm91cF9nZXRfbmFtZSh2aWV3R3JvdXAxLmdldCgpKSk7Ci0KLSAgICAvLyBFdmVyeSBncm91
cCBoYXMgaXRzIG93biBzZXR0aW5ncy4KLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ3Jv
dXBfZ2V0X3NldHRpbmdzKHZpZXdHcm91cDEuZ2V0KCkpICE9IHdlYmtpdF93ZWJfdmlld19ncm91
cF9nZXRfc2V0dGluZ3Modmlld0dyb3VwMi5nZXQoKSkpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0
V2ViVmlld05ld1dpdGhHcm91cChUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIEdS
ZWZQdHI8V2ViS2l0V2ViVmlld0dyb3VwPiB2aWV3R3JvdXAxID0gYWRvcHRHUmVmKHdlYmtpdF93
ZWJfdmlld19ncm91cF9uZXcoIlRlc3RHcm91cDEiKSk7Ci0gICAgdGVzdC0+YXNzZXJ0T2JqZWN0
SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVCh2aWV3R3JvdXAxLmdldCgpKSk7Ci0g
ICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3PiB3ZWJWaWV3MSA9IFdFQktJVF9XRUJfVklFVyh3ZWJr
aXRfd2ViX3ZpZXdfbmV3X3dpdGhfZ3JvdXAodmlld0dyb3VwMS5nZXQoKSkpOwotICAgIGdfYXNz
ZXJ0KHdlYmtpdF93ZWJfdmlld19nZXRfZ3JvdXAod2ViVmlldzEuZ2V0KCkpID09IHZpZXdHcm91
cDEuZ2V0KCkpOwotCi0gICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3PiB3ZWJWaWV3MiA9IFdFQktJ
VF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF93
ZWJfdmlld19nZXRfZ3JvdXAod2ViVmlldzIuZ2V0KCkpICE9IHZpZXdHcm91cDEuZ2V0KCkpOwot
Ci0gICAgLy8gU2V0dGluZ3Mgc2hvdWxkIGJlIGRpZmZlcmVudCBmb3Igdmlld3MgaW4gZGlmZmVy
ZW50IGdyb3Vwcy4KLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdl
YlZpZXcxLmdldCgpKSAhPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdlYlZpZXcyLmdl
dCgpKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3R3JvdXBTZXR0aW5ncyhUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIEdSZWZQdHI8V2ViS2l0V2ViVmlld0dyb3VwPiB2
aWV3R3JvdXAxID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJfdmlld19ncm91cF9uZXcoIlRlc3RHcm91
cDEiKSk7Ci0gICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhH
X09CSkVDVCh2aWV3R3JvdXAxLmdldCgpKSk7Ci0gICAgR1JlZlB0cjxXZWJLaXRTZXR0aW5ncz4g
bmV3U2V0dGluZ3MgPSBhZG9wdEdSZWYod2Via2l0X3NldHRpbmdzX25ld193aXRoX3NldHRpbmdz
KCJlbmFibGUtamF2YXNjcmlwdCIsIEZBTFNFLCBOVUxMKSk7Ci0gICAgdGVzdC0+YXNzZXJ0T2Jq
ZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChuZXdTZXR0aW5ncy5nZXQoKSkp
OwotICAgIHdlYmtpdF93ZWJfdmlld19ncm91cF9zZXRfc2V0dGluZ3Modmlld0dyb3VwMS5nZXQo
KSwgbmV3U2V0dGluZ3MuZ2V0KCkpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19ncm91
cF9nZXRfc2V0dGluZ3Modmlld0dyb3VwMS5nZXQoKSkgPT0gbmV3U2V0dGluZ3MuZ2V0KCkpOwot
Ci0gICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3PiB3ZWJWaWV3MSA9IFdFQktJVF9XRUJfVklFVyh3
ZWJraXRfd2ViX3ZpZXdfbmV3X3dpdGhfZ3JvdXAodmlld0dyb3VwMS5nZXQoKSkpOwotICAgIEdS
ZWZQdHI8V2ViS2l0V2ViVmlldz4gd2ViVmlldzIgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dl
Yl92aWV3X25ldygpKTsKLSAgICBXZWJLaXRTZXR0aW5ncyogd2ViVmlldzFTZXR0aW5ncyA9IHdl
YmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmlldzEuZ2V0KCkpOwotICAgIFdlYktpdFNl
dHRpbmdzKiB3ZWJWaWV3MlNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3
ZWJWaWV3Mi5nZXQoKSk7Ci0gICAgZ19hc3NlcnQod2ViVmlldzFTZXR0aW5ncyAhPSB3ZWJWaWV3
MlNldHRpbmdzKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9qYXZh
c2NyaXB0KHdlYlZpZXcxU2V0dGluZ3MpICE9IHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2ph
dmFzY3JpcHQod2ViVmlldzJTZXR0aW5ncykpOwotCi0gICAgd2Via2l0X3dlYl92aWV3X3NldF9z
ZXR0aW5ncyh3ZWJWaWV3MS5nZXQoKSwgd2ViVmlldzJTZXR0aW5ncyk7Ci0gICAgZ19hc3NlcnQo
d2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3MS5nZXQoKSkgPT0gd2ViVmlldzJT
ZXR0aW5ncyk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dyb3VwX2dldF9zZXR0aW5n
cyh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2dyb3VwKHdlYlZpZXcxLmdldCgpKSkgPT0gd2ViVmlldzJT
ZXR0aW5ncyk7Ci19Ci0KLXN0YXRpYyBib29sIGlzU3R5bGVTaGVldEluamVjdGVkRm9yVVJMQXRQ
YXRoKFdlYlZpZXdUZXN0KiB0ZXN0LCBjb25zdCBjaGFyKiBwYXRoKQotewotICAgIHRlc3QtPmxv
YWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aChwYXRoKS5kYXRhKCkpOwotICAgIHRlc3QtPndh
aXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgR093blB0cjxHRXJyb3I+IGVycm9yOwotICAg
IFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZh
U2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoa1N0eWxlU2hlZXRUZXN0U2NyaXB0LCAmZXJyb3Iu
b3V0UHRyKCkpOwotICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOwotICAgIGdfYXNzZXJ0
KCFlcnJvci5nZXQoKSk7Ci0KLSAgICBHT3duUHRyPGNoYXI+IHJlc3VsdFN0cmluZyhXZWJWaWV3
VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7Ci0gICAg
cmV0dXJuICFnX3N0cmNtcDAocmVzdWx0U3RyaW5nLmdldCgpLCBrU3R5bGVTaGVldFRlc3RTY3Jp
cHRSZXN1bHQpOwotfQotCi1zdGF0aWMgdm9pZCBmaWxsVVJMTGlzdEZyb21QYXRocyhjaGFyKiog
bGlzdCwgY29uc3QgY2hhciogcGF0aCwgLi4uKQotewotICAgIHZhX2xpc3QgYXJndW1lbnRMaXN0
OwotICAgIHZhX3N0YXJ0KGFyZ3VtZW50TGlzdCwgcGF0aCk7Ci0KLSAgICBpbnQgaSA9IDA7Ci0g
ICAgd2hpbGUgKHBhdGgpIHsKLSAgICAgICAgLy8gRklYTUU6IFdlIG11c3QgdXNlIGEgd2lsZGNh
cmQgZm9yIHRoZSBob3N0IGhlcmUgdW50aWwgaHR0cDovL3drYnVnLmNvbS8xMTI0NzYgaXMgZml4
ZWQuCi0gICAgICAgIC8vIFVudGlsIHRoYXQgdGltZSBwYXR0ZXJucyB3aXRoIHBvcnQgbnVtYmVy
cyBpbiB0aGVtIHdpbGwgbm90IHByb3Blcmx5IG1hdGNoIFVSTHMgd2l0aCBwb3J0IG51bWJlcnMu
Ci0gICAgICAgIGxpc3RbaSsrXSA9IGdfc3RyZHVwX3ByaW50ZigiaHR0cDovLyovJXMqIiwgcGF0
aCk7Ci0gICAgICAgIHBhdGggPSB2YV9hcmcoYXJndW1lbnRMaXN0LCBjb25zdCBjaGFyKik7Ci0g
ICAgfQotfQotCi1zdGF0aWMgdm9pZCByZW1vdmVPbGRJbmplY3RlZFN0eWxlU2hlZXRzQW5kUmVz
ZXRMaXN0cyhXZWJLaXRXZWJWaWV3R3JvdXAqIGdyb3VwLCBjaGFyKiogd2hpdGVsaXN0LCBjaGFy
KiogYmxhY2tsaXN0KQotewotICAgIHdlYmtpdF93ZWJfdmlld19ncm91cF9yZW1vdmVfYWxsX3Vz
ZXJfc3R5bGVfc2hlZXRzKGdyb3VwKTsKLQotICAgIHdoaWxlICgqd2hpdGVsaXN0KSB7Ci0gICAg
ICAgIGdfZnJlZSgqd2hpdGVsaXN0KTsKLSAgICAgICAgKndoaXRlbGlzdCA9IDA7Ci0gICAgICAg
IHdoaXRlbGlzdCsrOwotICAgIH0KLQotICAgIHdoaWxlICgqYmxhY2tsaXN0KSB7Ci0gICAgICAg
IGdfZnJlZSgqYmxhY2tsaXN0KTsKLSAgICAgICAgKmJsYWNrbGlzdCA9IDA7Ci0gICAgICAgIGJs
YWNrbGlzdCsrOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdHcm91cEluamVj
dGVkU3R5bGVTaGVldChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBX
ZWJLaXRXZWJWaWV3R3JvdXAqIGdyb3VwID0gd2Via2l0X3dlYl92aWV3X2dldF9ncm91cCh0ZXN0
LT5tX3dlYlZpZXcpOwotICAgIGNoYXIqIHdoaXRlbGlzdFszXSA9IHsgMCwgMCwgMCB9OwotICAg
IGNoYXIqIGJsYWNrbGlzdFszXSA9IHsgMCwgMCwgMCB9OwotCi0gICAgcmVtb3ZlT2xkSW5qZWN0
ZWRTdHlsZVNoZWV0c0FuZFJlc2V0TGlzdHMoZ3JvdXAsIHdoaXRlbGlzdCwgYmxhY2tsaXN0KTsK
LQotICAgIC8vIFdpdGhvdXQgYSB3aGl0ZWxpc3Qgb3IgYSBibGFja2xpc3QgYWxsIFVSTHMgc2hv
dWxkIGhhdmUgdGhlIGluamVjdGVkIHN0eWxlIHNoZWV0LgotICAgIHN0YXRpYyBjb25zdCBjaGFy
KiByYW5kb21QYXRoID0gInNvbWVyYW5kb21wYXRoIjsKLSAgICBnX2Fzc2VydCghaXNTdHlsZVNo
ZWV0SW5qZWN0ZWRGb3JVUkxBdFBhdGgodGVzdCwgcmFuZG9tUGF0aCkpOwotICAgIHdlYmtpdF93
ZWJfdmlld19ncm91cF9hZGRfdXNlcl9zdHlsZV9zaGVldChncm91cCwga0luamVjdGVkU3R5bGVT
aGVldCwgMCwgMCwgMCwgV0VCS0lUX0lOSkVDVEVEX0NPTlRFTlRfRlJBTUVTX0FMTCk7Ci0gICAg
Z19hc3NlcnQoaXNTdHlsZVNoZWV0SW5qZWN0ZWRGb3JVUkxBdFBhdGgodGVzdCwgcmFuZG9tUGF0
aCkpOwotCi0gICAgcmVtb3ZlT2xkSW5qZWN0ZWRTdHlsZVNoZWV0c0FuZFJlc2V0TGlzdHMoZ3Jv
dXAsIHdoaXRlbGlzdCwgYmxhY2tsaXN0KTsKLQotICAgIGZpbGxVUkxMaXN0RnJvbVBhdGhzKGJs
YWNrbGlzdCwgcmFuZG9tUGF0aCwgMCk7Ci0gICAgd2Via2l0X3dlYl92aWV3X2dyb3VwX2FkZF91
c2VyX3N0eWxlX3NoZWV0KGdyb3VwLCBrSW5qZWN0ZWRTdHlsZVNoZWV0LCAwLCAwLCBibGFja2xp
c3QsIFdFQktJVF9JTkpFQ1RFRF9DT05URU5UX0ZSQU1FU19BTEwpOwotICAgIGdfYXNzZXJ0KCFp
c1N0eWxlU2hlZXRJbmplY3RlZEZvclVSTEF0UGF0aCh0ZXN0LCByYW5kb21QYXRoKSk7Ci0gICAg
Z19hc3NlcnQoaXNTdHlsZVNoZWV0SW5qZWN0ZWRGb3JVUkxBdFBhdGgodGVzdCwgInNvbWVvdGhl
cnJhbmRvbXBhdGgiKSk7Ci0KLSAgICByZW1vdmVPbGRJbmplY3RlZFN0eWxlU2hlZXRzQW5kUmVz
ZXRMaXN0cyhncm91cCwgd2hpdGVsaXN0LCBibGFja2xpc3QpOwotCi0gICAgc3RhdGljIGNvbnN0
IGNoYXIqIGluVGhlV2hpdGVMaXN0ID0gImludGhld2hpdGVsaXN0IjsKLSAgICBzdGF0aWMgY29u
c3QgY2hhciogbm90SW5XaGl0ZWxpc3QgPSAibm90aW50aGV3aGl0ZWxpc3QiOwotICAgIHN0YXRp
YyBjb25zdCBjaGFyKiBpblRoZVdoaXRlTGlzdEFuZEJsYWNrTGlzdCA9ICJpbnRoZXdoaXRlbGlz
dGFuZGJsYWNrbGlzdCI7Ci0KLSAgICBmaWxsVVJMTGlzdEZyb21QYXRocyh3aGl0ZWxpc3QsIGlu
VGhlV2hpdGVMaXN0LCBpblRoZVdoaXRlTGlzdEFuZEJsYWNrTGlzdCwgMCk7Ci0gICAgZmlsbFVS
TExpc3RGcm9tUGF0aHMoYmxhY2tsaXN0LCBpblRoZVdoaXRlTGlzdEFuZEJsYWNrTGlzdCwgMCk7
Ci0gICAgd2Via2l0X3dlYl92aWV3X2dyb3VwX2FkZF91c2VyX3N0eWxlX3NoZWV0KGdyb3VwLCBr
SW5qZWN0ZWRTdHlsZVNoZWV0LCAwLCB3aGl0ZWxpc3QsIGJsYWNrbGlzdCwgV0VCS0lUX0lOSkVD
VEVEX0NPTlRFTlRfRlJBTUVTX0FMTCk7Ci0gICAgZ19hc3NlcnQoaXNTdHlsZVNoZWV0SW5qZWN0
ZWRGb3JVUkxBdFBhdGgodGVzdCwgaW5UaGVXaGl0ZUxpc3QpKTsKLSAgICBnX2Fzc2VydCghaXNT
dHlsZVNoZWV0SW5qZWN0ZWRGb3JVUkxBdFBhdGgodGVzdCwgaW5UaGVXaGl0ZUxpc3RBbmRCbGFj
a0xpc3QpKTsKLSAgICBnX2Fzc2VydCghaXNTdHlsZVNoZWV0SW5qZWN0ZWRGb3JVUkxBdFBhdGgo
dGVzdCwgbm90SW5XaGl0ZWxpc3QpKTsKLQotICAgIC8vIEl0J3MgaW1wb3J0YW50IHRvIGNsZWFu
IHVwIHRoZSBlbnZpcm9ubWVudCBiZWZvcmUgb3RoZXIgdGVzdHMuCi0gICAgcmVtb3ZlT2xkSW5q
ZWN0ZWRTdHlsZVNoZWV0c0FuZFJlc2V0TGlzdHMoZ3JvdXAsIHdoaXRlbGlzdCwgYmxhY2tsaXN0
KTsKLX0KLQotc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBT
b3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSosIFNvdXBD
bGllbnRDb250ZXh0KiwgZ3BvaW50ZXIpCi17Ci0gICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMo
bWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOwotICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZCht
ZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGtTdHlsZVNoZWV0SFRN
TCwgc3RybGVuKGtTdHlsZVNoZWV0SFRNTCkpOwotICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBs
ZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOwotfQotCi12b2lkIGJlZm9yZUFsbCgpCi17Ci0g
ICAga1NlcnZlciA9IG5ldyBXZWJLaXRUZXN0U2VydmVyKCk7Ci0gICAga1NlcnZlci0+cnVuKHNl
cnZlckNhbGxiYWNrKTsKLQotICAgIFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlld0dyb3VwIiwgImRl
ZmF1bHQtZ3JvdXAiLCB0ZXN0V2ViVmlld0dyb3VwRGVmYXVsdCk7Ci0gICAgVGVzdDo6YWRkKCJX
ZWJLaXRXZWJWaWV3R3JvdXAiLCAibmV3LWdyb3VwIiwgdGVzdFdlYlZpZXdHcm91cE5ld0dyb3Vw
KTsKLSAgICBUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAibmV3LXdpdGgtZ3JvdXAiLCB0ZXN0
V2ViVmlld05ld1dpdGhHcm91cCk7Ci0gICAgVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3R3JvdXAi
LCAic2V0dGluZ3MiLCB0ZXN0V2ViVmlld0dyb3VwU2V0dGluZ3MpOwotICAgIFdlYlZpZXdUZXN0
OjphZGQoIldlYktpdFdlYlZpZXdHcm91cCIsICJpbmplY3RlZC1zdHlsZS1zaGVldCIsIHRlc3RX
ZWJWaWV3R3JvdXBJbmplY3RlZFN0eWxlU2hlZXQpOwotfQotCi12b2lkIGFmdGVyQWxsKCkKLXsK
LSAgICBkZWxldGUga1NlcnZlcjsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJWaWV3RWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJWaWV3RWRpdG9yLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggOTMzMTVkYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViVmlld0VkaXRvci5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSwyMDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEg
Uy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLDEgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCi0jaW5j
bHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgotCi1jbGFzcyBFZGl0b3JUZXN0OiBwdWJsaWMg
V2ViVmlld1Rlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoRWRpdG9y
VGVzdCk7Ci0KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGtDbGlwYm9hcmRXYWl0VGlt
ZW91dCA9IDUwOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQga0NsaXBib2FyZFdhaXRN
YXhUcmllcyA9IDI7Ci0KLSAgICBFZGl0b3JUZXN0KCkKLSAgICAgICAgOiBtX2NsaXBib2FyZChn
dGtfY2xpcGJvYXJkX2dldChHREtfU0VMRUNUSU9OX0NMSVBCT0FSRCkpCi0gICAgICAgICwgbV9j
YW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQoZmFsc2UpCi0gICAgICAgICwgbV90cmllc0NvdW50KDAp
Ci0gICAgewotICAgICAgICBndGtfY2xpcGJvYXJkX2NsZWFyKG1fY2xpcGJvYXJkKTsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgdm9pZCBjYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmRSZWFkeUNhbGxiYWNr
KEdPYmplY3QqLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgRWRpdG9yVGVzdCogdGVzdCkKLSAgICB7
Ci0gICAgICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKLSAgICAgICAgdGVzdC0+bV9jYW5FeGVj
dXRlRWRpdGluZ0NvbW1hbmQgPSB3ZWJraXRfd2ViX3ZpZXdfY2FuX2V4ZWN1dGVfZWRpdGluZ19j
b21tYW5kX2ZpbmlzaCh0ZXN0LT5tX3dlYlZpZXcsIHJlc3VsdCwgJmVycm9yLm91dFB0cigpKTsK
LSAgICAgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKLSAgICAgICAgZ19tYWluX2xvb3BfcXVp
dCh0ZXN0LT5tX21haW5Mb29wKTsKLSAgICB9Ci0KLSAgICBib29sIGNhbkV4ZWN1dGVFZGl0aW5n
Q29tbWFuZChjb25zdCBjaGFyKiBjb21tYW5kKQotICAgIHsKLSAgICAgICAgbV9jYW5FeGVjdXRl
RWRpdGluZ0NvbW1hbmQgPSBmYWxzZTsKLSAgICAgICAgd2Via2l0X3dlYl92aWV3X2Nhbl9leGVj
dXRlX2VkaXRpbmdfY29tbWFuZChtX3dlYlZpZXcsIGNvbW1hbmQsIDAsIHJlaW50ZXJwcmV0X2Nh
c3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4oY2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kUmVhZHlDYWxs
YmFjayksIHRoaXMpOwotICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Ci0gICAg
ICAgIHJldHVybiBtX2NhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZDsKLSAgICB9Ci0KLSAgICBzdGF0
aWMgZ2Jvb2xlYW4gd2FpdEZvckNsaXBib2FyZFRleHQoRWRpdG9yVGVzdCogdGVzdCkKLSAgICB7
Ci0gICAgICAgIHRlc3QtPm1fdHJpZXNDb3VudCsrOwotICAgICAgICBpZiAoZ3RrX2NsaXBib2Fy
ZF93YWl0X2lzX3RleHRfYXZhaWxhYmxlKHRlc3QtPm1fY2xpcGJvYXJkKSB8fCB0ZXN0LT5tX3Ry
aWVzQ291bnQgPiBrQ2xpcGJvYXJkV2FpdE1heFRyaWVzKSB7Ci0gICAgICAgICAgICBnX21haW5f
bG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOwotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwot
ICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgfQotCi0gICAgdm9pZCBjb3B5
Q2xpcGJvYXJkKCkKLSAgICB7Ci0gICAgICAgIHdlYmtpdF93ZWJfdmlld19leGVjdXRlX2VkaXRp
bmdfY29tbWFuZChtX3dlYlZpZXcsIFdFQktJVF9FRElUSU5HX0NPTU1BTkRfQ09QWSk7Ci0gICAg
ICAgIC8vIFRoZXJlJ3Mgbm8gd2F5IHRvIGtub3cgd2hlbiB0aGUgc2VsZWN0aW9uIGhhcyBiZWVu
IGNvcGllZCB0bwotICAgICAgICAvLyB0aGUgY2xpcGJvYXJkLCBzbyB1c2UgYSB0aW1lb3V0IHNv
dXJjZSB0byBxdWVyeSB0aGUgY2xpcGJvYXJkLgotICAgICAgICBtX3RyaWVzQ291bnQgPSAwOwot
ICAgICAgICBnX3RpbWVvdXRfYWRkKGtDbGlwYm9hcmRXYWl0VGltZW91dCwgcmVpbnRlcnByZXRf
Y2FzdDxHU291cmNlRnVuYz4od2FpdEZvckNsaXBib2FyZFRleHQpLCB0aGlzKTsKLSAgICAgICAg
Z19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIEd0a0NsaXBib2FyZCog
bV9jbGlwYm9hcmQ7Ci0gICAgYm9vbCBtX2NhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZDsKLSAgICBz
aXplX3QgbV90cmllc0NvdW50OwotfTsKLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdFZGl0b3JD
dXRDb3B5UGFzdGVOb25FZGl0YWJsZShFZGl0b3JUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQot
ewotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzZWxlY3RlZFNwYW5IVE1MID0gIjxodG1sPjxib2R5
IGNvbnRlbnRFZGl0YWJsZT1cImZhbHNlXCI+IgotICAgICAgICAiPHNwYW4gaWQ9XCJtYWluc3Bh
blwiPkFsbCB3b3JrIGFuZCBubyBwbGF5IDxzcGFuIGlkPVwic3Vic3BhblwiPm1ha2UgSmFjayBh
IGR1bGw8L3NwYW4+IGJveS48L3NwYW4+IgotICAgICAgICAiPHNjcmlwdD5kb2N1bWVudC5nZXRT
ZWxlY3Rpb24oKS5jb2xsYXBzZSgpO1xuIgotICAgICAgICAiZG9jdW1lbnQuZ2V0U2VsZWN0aW9u
KCkuc2VsZWN0QWxsQ2hpbGRyZW4oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1YnNwYW4nKSk7
XG4iCi0gICAgICAgICI8L3NjcmlwdD48L2JvZHk+PC9odG1sPiI7Ci0KLSAgICAvLyBOb3RoaW5n
IGxvYWRlZCB5ZXQuCi0gICAgZ19hc3NlcnQoIXRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFu
ZChXRUJLSVRfRURJVElOR19DT01NQU5EX0NVVCkpOwotICAgIGdfYXNzZXJ0KCF0ZXN0LT5jYW5F
eGVjdXRlRWRpdGluZ0NvbW1hbmQoV0VCS0lUX0VESVRJTkdfQ09NTUFORF9DT1BZKSk7Ci0gICAg
Z19hc3NlcnQoIXRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElOR19D
T01NQU5EX1BBU1RFKSk7Ci0KLSAgICB0ZXN0LT5sb2FkSHRtbChzZWxlY3RlZFNwYW5IVE1MLCAw
KTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0KHRl
c3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElOR19DT01NQU5EX0NPUFkp
KTsKLSAgICAvLyBJdCdzIG5vdCBwb3NzaWJsZSB0byBjdXQgYW5kIHBhc3RlIHdoZW4gY29udGVu
dCBpcyBub3QgZWRpdGFibGUKLSAgICAvLyBldmVuIGlmIHRoZXJlJ3MgYSBzZWxlY3Rpb24uCi0g
ICAgZ19hc3NlcnQoIXRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElO
R19DT01NQU5EX0NVVCkpOwotICAgIGdfYXNzZXJ0KCF0ZXN0LT5jYW5FeGVjdXRlRWRpdGluZ0Nv
bW1hbmQoV0VCS0lUX0VESVRJTkdfQ09NTUFORF9QQVNURSkpOwotCi0gICAgdGVzdC0+Y29weUNs
aXBib2FyZCgpOwotICAgIEdPd25QdHI8Y2hhcj4gY2xpcGJvYXJkVGV4dChndGtfY2xpcGJvYXJk
X3dhaXRfZm9yX3RleHQodGVzdC0+bV9jbGlwYm9hcmQpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIo
Y2xpcGJvYXJkVGV4dC5nZXQoKSwgPT0sICJtYWtlIEphY2sgYSBkdWxsIik7Ci19Ci0KLXN0YXRp
YyB2b2lkIHRlc3RXZWJWaWV3RWRpdG9yQ3V0Q29weVBhc3RlRWRpdGFibGUoRWRpdG9yVGVzdCog
dGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogc2VsZWN0ZWRT
cGFuSFRNTCA9ICI8aHRtbD48Ym9keSBjb250ZW50RWRpdGFibGU9XCJ0cnVlXCI+IgotICAgICAg
ICAiPHNwYW4gaWQ9XCJtYWluc3BhblwiPkFsbCB3b3JrIGFuZCBubyBwbGF5IDxzcGFuPm1ha2Ug
SmFjayBhIGR1bGw8L3NwYW4+IGJveS48L3NwYW4+IgotICAgICAgICAiPHNjcmlwdD5kb2N1bWVu
dC5nZXRTZWxlY3Rpb24oKS5jb2xsYXBzZSgpO1xuIgotICAgICAgICAiZG9jdW1lbnQuZ2V0U2Vs
ZWN0aW9uKCkuc2VsZWN0QWxsQ2hpbGRyZW4oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW5z
cGFuJykpO1xuIgotICAgICAgICAiPC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4iOwotCi0gICAgLy8g
Tm90aGluZyBsb2FkZWQgeWV0LgotICAgIGdfYXNzZXJ0KCF0ZXN0LT5jYW5FeGVjdXRlRWRpdGlu
Z0NvbW1hbmQoV0VCS0lUX0VESVRJTkdfQ09NTUFORF9DVVQpKTsKLSAgICBnX2Fzc2VydCghdGVz
dC0+Y2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kKFdFQktJVF9FRElUSU5HX0NPTU1BTkRfQ09QWSkp
OwotICAgIGdfYXNzZXJ0KCF0ZXN0LT5jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQoV0VCS0lUX0VE
SVRJTkdfQ09NTUFORF9QQVNURSkpOwotCi0gICAgdGVzdC0+bG9hZEh0bWwoc2VsZWN0ZWRTcGFu
SFRNTCwgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICAvLyBU
aGVyZSdzIGEgc2VsZWN0aW9uLgotICAgIGdfYXNzZXJ0KHRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5n
Q29tbWFuZChXRUJLSVRfRURJVElOR19DT01NQU5EX0NVVCkpOwotICAgIGdfYXNzZXJ0KHRlc3Qt
PmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElOR19DT01NQU5EX0NPUFkpKTsK
LSAgICBnX2Fzc2VydCh0ZXN0LT5jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQoV0VCS0lUX0VESVRJ
TkdfQ09NTUFORF9QQVNURSkpOwotCi0gICAgdGVzdC0+Y29weUNsaXBib2FyZCgpOwotICAgIEdP
d25QdHI8Y2hhcj4gY2xpcGJvYXJkVGV4dChndGtfY2xpcGJvYXJkX3dhaXRfZm9yX3RleHQodGVz
dC0+bV9jbGlwYm9hcmQpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoY2xpcGJvYXJkVGV4dC5nZXQo
KSwgPT0sICJBbGwgd29yayBhbmQgbm8gcGxheSBtYWtlIEphY2sgYSBkdWxsIGJveS4iKTsKLX0K
LQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdFZGl0b3JTZWxlY3RBbGxOb25FZGl0YWJsZShFZGl0
b3JUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBz
ZWxlY3RlZFNwYW5IVE1MID0gIjxodG1sPjxib2R5IGNvbnRlbnRFZGl0YWJsZT1cImZhbHNlXCI+
IgotICAgICAgICAiPHNwYW4gaWQ9XCJtYWluc3BhblwiPkFsbCB3b3JrIGFuZCBubyBwbGF5IDxz
cGFuIGlkPVwic3Vic3BhblwiPm1ha2UgSmFjayBhIGR1bGw8L3NwYW4+IGJveS48L3NwYW4+Igot
ICAgICAgICAiPHNjcmlwdD5kb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5jb2xsYXBzZSgpO1xuIgot
ICAgICAgICAiZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0QWxsQ2hpbGRyZW4oZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ3N1YnNwYW4nKSk7XG4iCi0gICAgICAgICI8L3NjcmlwdD48L2Jv
ZHk+PC9odG1sPiI7Ci0KLSAgICBnX2Fzc2VydCh0ZXN0LT5jYW5FeGVjdXRlRWRpdGluZ0NvbW1h
bmQoV0VCS0lUX0VESVRJTkdfQ09NTUFORF9TRUxFQ1RfQUxMKSk7Ci0KLSAgICB0ZXN0LT5sb2Fk
SHRtbChzZWxlY3RlZFNwYW5IVE1MLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNo
ZWQoKTsKLQotICAgIGdfYXNzZXJ0KHRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJL
SVRfRURJVElOR19DT01NQU5EX1NFTEVDVF9BTEwpKTsKLQotICAgIHRlc3QtPmNvcHlDbGlwYm9h
cmQoKTsKLSAgICBHT3duUHRyPGNoYXI+IGNsaXBib2FyZFRleHQoZ3RrX2NsaXBib2FyZF93YWl0
X2Zvcl90ZXh0KHRlc3QtPm1fY2xpcGJvYXJkKSk7Ci0KLSAgICAvLyBJbml0aWFsbHkgb25seSB0
aGUgc3Vic3BhbiBpcyBzZWxlY3RlZC4KLSAgICBnX2Fzc2VydF9jbXBzdHIoY2xpcGJvYXJkVGV4
dC5nZXQoKSwgPT0sICJtYWtlIEphY2sgYSBkdWxsIik7Ci0KLSAgICB3ZWJraXRfd2ViX3ZpZXdf
ZXhlY3V0ZV9lZGl0aW5nX2NvbW1hbmQodGVzdC0+bV93ZWJWaWV3LCBXRUJLSVRfRURJVElOR19D
T01NQU5EX1NFTEVDVF9BTEwpOwotICAgIHRlc3QtPmNvcHlDbGlwYm9hcmQoKTsKLSAgICBjbGlw
Ym9hcmRUZXh0LnNldChndGtfY2xpcGJvYXJkX3dhaXRfZm9yX3RleHQodGVzdC0+bV9jbGlwYm9h
cmQpKTsKLQotICAgIC8vIFRoZSBtYWluc3BhbiBzaG91bGQgYmUgc2VsZWN0ZWQgYWZ0ZXIgY2Fs
bGluZyBTRUxFQ1RfQUxMLgotICAgIGdfYXNzZXJ0X2NtcHN0cihjbGlwYm9hcmRUZXh0LmdldCgp
LCA9PSwgIkFsbCB3b3JrIGFuZCBubyBwbGF5IG1ha2UgSmFjayBhIGR1bGwgYm95LiIpOwotfQot
Ci1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0VkaXRvclNlbGVjdEFsbEVkaXRhYmxlKEVkaXRvclRl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHNlbGVj
dGVkU3BhbkhUTUwgPSAiPGh0bWw+PGJvZHkgY29udGVudEVkaXRhYmxlPVwidHJ1ZVwiPiIKLSAg
ICAgICAgIjxzcGFuIGlkPVwibWFpbnNwYW5cIj5BbGwgd29yayBhbmQgbm8gcGxheSA8c3BhbiBp
ZD1cInN1YnNwYW5cIj5tYWtlIEphY2sgYSBkdWxsPC9zcGFuPiBib3kuPC9zcGFuPiIKLSAgICAg
ICAgIjxzY3JpcHQ+ZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkuY29sbGFwc2UoKTtcbiIKLSAgICAg
ICAgImRvY3VtZW50LmdldFNlbGVjdGlvbigpLnNlbGVjdEFsbENoaWxkcmVuKGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdzdWJzcGFuJykpO1xuIgotICAgICAgICAiPC9zY3JpcHQ+PC9ib2R5Pjwv
aHRtbD4iOwotCi0gICAgZ19hc3NlcnQodGVzdC0+Y2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kKFdF
QktJVF9FRElUSU5HX0NPTU1BTkRfU0VMRUNUX0FMTCkpOwotCi0gICAgdGVzdC0+bG9hZEh0bWwo
c2VsZWN0ZWRTcGFuSFRNTCwgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7
Ci0KLSAgICBnX2Fzc2VydCh0ZXN0LT5jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQoV0VCS0lUX0VE
SVRJTkdfQ09NTUFORF9TRUxFQ1RfQUxMKSk7Ci0KLSAgICB0ZXN0LT5jb3B5Q2xpcGJvYXJkKCk7
Ci0gICAgR093blB0cjxjaGFyPiBjbGlwYm9hcmRUZXh0KGd0a19jbGlwYm9hcmRfd2FpdF9mb3Jf
dGV4dCh0ZXN0LT5tX2NsaXBib2FyZCkpOwotCi0gICAgLy8gSW5pdGlhbGx5IG9ubHkgdGhlIHN1
YnNwYW4gaXMgc2VsZWN0ZWQuCi0gICAgZ19hc3NlcnRfY21wc3RyKGNsaXBib2FyZFRleHQuZ2V0
KCksID09LCAibWFrZSBKYWNrIGEgZHVsbCIpOwotCi0gICAgd2Via2l0X3dlYl92aWV3X2V4ZWN1
dGVfZWRpdGluZ19jb21tYW5kKHRlc3QtPm1fd2ViVmlldywgV0VCS0lUX0VESVRJTkdfQ09NTUFO
RF9TRUxFQ1RfQUxMKTsKLSAgICB0ZXN0LT5jb3B5Q2xpcGJvYXJkKCk7Ci0gICAgY2xpcGJvYXJk
VGV4dC5zZXQoZ3RrX2NsaXBib2FyZF93YWl0X2Zvcl90ZXh0KHRlc3QtPm1fY2xpcGJvYXJkKSk7
Ci0KLSAgICAvLyBUaGUgbWFpbnNwYW4gc2hvdWxkIGJlIHNlbGVjdGVkIGFmdGVyIGNhbGxpbmcg
U0VMRUNUX0FMTC4KLSAgICBnX2Fzc2VydF9jbXBzdHIoY2xpcGJvYXJkVGV4dC5nZXQoKSwgPT0s
ICJBbGwgd29yayBhbmQgbm8gcGxheSBtYWtlIEphY2sgYSBkdWxsIGJveS4iKTsKLX0KLQotdm9p
ZCBiZWZvcmVBbGwoKQotewotICAgIEVkaXRvclRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJj
dXQtY29weS1wYXN0ZS9ub24tZWRpdGFibGUiLCB0ZXN0V2ViVmlld0VkaXRvckN1dENvcHlQYXN0
ZU5vbkVkaXRhYmxlKTsKLSAgICBFZGl0b3JUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiY3V0
LWNvcHktcGFzdGUvZWRpdGFibGUiLCB0ZXN0V2ViVmlld0VkaXRvckN1dENvcHlQYXN0ZUVkaXRh
YmxlKTsKLSAgICBFZGl0b3JUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAic2VsZWN0LWFsbC9u
b24tZWRpdGFibGUiLCB0ZXN0V2ViVmlld0VkaXRvclNlbGVjdEFsbE5vbkVkaXRhYmxlKTsKLSAg
ICBFZGl0b3JUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAic2VsZWN0LWFsbC9lZGl0YWJsZSIs
IHRlc3RXZWJWaWV3RWRpdG9yU2VsZWN0QWxsRWRpdGFibGUpOwotfQotCi12b2lkIGFmdGVyQWxs
KCkKLXsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL1dlYkV4dGVuc2lvblRlc3QuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvV2ViRXh0ZW5zaW9uVGVzdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAyMTJlMmIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvV2ViRXh0ZW5zaW9uVGVzdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNjcgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NvbnRleHRSZWYuaD4KLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0ci5oPgotI2luY2x1ZGUgPGdpby9naW8uaD4K
LSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx3ZWJr
aXQyL3dlYmtpdC13ZWItZXh0ZW5zaW9uLmg+Ci0jaW5jbHVkZSA8d3RmL0RlcXVlLmg+Ci0jaW5j
bHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVk
ZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLXN0YXRpYyBjb25zdCBjaGFyIGlu
dHJvc3BlY3Rpb25YTUxbXSA9Ci0gICAgIjxub2RlPiIKLSAgICAiIDxpbnRlcmZhY2UgbmFtZT0n
b3JnLndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9uVGVzdCc+IgotICAgICIgIDxtZXRob2QgbmFtZT0n
R2V0VGl0bGUnPiIKLSAgICAiICAgPGFyZyB0eXBlPSd0JyBuYW1lPSdwYWdlSUQnIGRpcmVjdGlv
bj0naW4nLz4iCi0gICAgIiAgIDxhcmcgdHlwZT0ncycgbmFtZT0ndGl0bGUnIGRpcmVjdGlvbj0n
b3V0Jy8+IgotICAgICIgIDwvbWV0aG9kPiIKLSAgICAiICA8bWV0aG9kIG5hbWU9J0Fib3J0UHJv
Y2Vzcyc+IgotICAgICIgIDwvbWV0aG9kPiIKLSAgICAiICA8bWV0aG9kIG5hbWU9J1J1bkphdmFT
Y3JpcHRJbklzb2xhdGVkV29ybGQnPiIKLSAgICAiICAgPGFyZyB0eXBlPSd0JyBuYW1lPSdwYWdl
SUQnIGRpcmVjdGlvbj0naW4nLz4iCi0gICAgIiAgIDxhcmcgdHlwZT0ncycgbmFtZT0nc2NyaXB0
JyBkaXJlY3Rpb249J2luJy8+IgotICAgICIgIDwvbWV0aG9kPiIKLSAgICAiICA8c2lnbmFsIG5h
bWU9J0RvY3VtZW50TG9hZGVkJy8+IgotICAgICIgIDxzaWduYWwgbmFtZT0nVVJJQ2hhbmdlZCc+
IgotICAgICIgICA8YXJnIHR5cGU9J3MnIG5hbWU9J3VyaScgZGlyZWN0aW9uPSdvdXQnLz4iCi0g
ICAgIiAgPC9zaWduYWw+IgotICAgICIgPC9pbnRlcmZhY2U+IgotICAgICI8L25vZGU+IjsKLQot
dHlwZWRlZiBlbnVtIHsKLSAgICBEb2N1bWVudExvYWRlZFNpZ25hbCwKLSAgICBVUklDaGFuZ2Vk
U2lnbmFsLAotfSBEZWxheWVkU2lnbmFsVHlwZTsKLQotc3RydWN0IERlbGF5ZWRTaWduYWwgewot
ICAgIERlbGF5ZWRTaWduYWwoRGVsYXllZFNpZ25hbFR5cGUgdHlwZSkKLSAgICAgICAgOiB0eXBl
KHR5cGUpCi0gICAgewotICAgIH0KLQotICAgIERlbGF5ZWRTaWduYWwoRGVsYXllZFNpZ25hbFR5
cGUgdHlwZSwgY29uc3QgY2hhciogdXJpKQotICAgICAgICA6IHR5cGUodHlwZSkKLSAgICAgICAg
LCB1cmkodXJpKQotICAgIHsKLSAgICB9Ci0KLSAgICBEZWxheWVkU2lnbmFsVHlwZSB0eXBlOwot
ICAgIENTdHJpbmcgdXJpOwotfTsKLQotRGVxdWU8T3duUHRyPERlbGF5ZWRTaWduYWw+PiBkZWxh
eWVkU2lnbmFsc1F1ZXVlOwotCi1zdGF0aWMgdm9pZCBlbWl0RG9jdW1lbnRMb2FkZWQoR0RCdXND
b25uZWN0aW9uKiBjb25uZWN0aW9uKQotewotICAgIGJvb2wgb2sgPSBnX2RidXNfY29ubmVjdGlv
bl9lbWl0X3NpZ25hbCgKLSAgICAgICAgY29ubmVjdGlvbiwKLSAgICAgICAgMCwKLSAgICAgICAg
Ii9vcmcvd2Via2l0L2d0ay9XZWJFeHRlbnNpb25UZXN0IiwKLSAgICAgICAgIm9yZy53ZWJraXQu
Z3RrLldlYkV4dGVuc2lvblRlc3QiLAotICAgICAgICAiRG9jdW1lbnRMb2FkZWQiLAotICAgICAg
ICAwLAotICAgICAgICAwKTsKLSAgICBnX2Fzc2VydChvayk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRv
Y3VtZW50TG9hZGVkQ2FsbGJhY2soV2ViS2l0V2ViUGFnZSosIFdlYktpdFdlYkV4dGVuc2lvbiog
ZXh0ZW5zaW9uKQotewotICAgIGdwb2ludGVyIGRhdGEgPSBnX29iamVjdF9nZXRfZGF0YShHX09C
SkVDVChleHRlbnNpb24pLCAiZGJ1cy1jb25uZWN0aW9uIik7Ci0gICAgaWYgKGRhdGEpCi0gICAg
ICAgIGVtaXREb2N1bWVudExvYWRlZChHX0RCVVNfQ09OTkVDVElPTihkYXRhKSk7Ci0gICAgZWxz
ZQotICAgICAgICBkZWxheWVkU2lnbmFsc1F1ZXVlLmFwcGVuZChhZG9wdFB0cihuZXcgRGVsYXll
ZFNpZ25hbChEb2N1bWVudExvYWRlZFNpZ25hbCkpKTsKLX0KLQotc3RhdGljIHZvaWQgZW1pdFVS
SUNoYW5nZWQoR0RCdXNDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBjb25zdCBjaGFyKiB1cmkpCi17
Ci0gICAgYm9vbCBvayA9IGdfZGJ1c19jb25uZWN0aW9uX2VtaXRfc2lnbmFsKAotICAgICAgICBj
b25uZWN0aW9uLAotICAgICAgICAwLAotICAgICAgICAiL29yZy93ZWJraXQvZ3RrL1dlYkV4dGVu
c2lvblRlc3QiLAotICAgICAgICAib3JnLndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9uVGVzdCIsCi0g
ICAgICAgICJVUklDaGFuZ2VkIiwKLSAgICAgICAgZ192YXJpYW50X25ldygiKHMpIiwgdXJpKSwK
LSAgICAgICAgMCk7Ci0gICAgZ19hc3NlcnQob2spOwotfQotCi1zdGF0aWMgdm9pZCB1cmlDaGFu
Z2VkQ2FsbGJhY2soV2ViS2l0V2ViUGFnZSogd2ViUGFnZSwgR1BhcmFtU3BlYyogcHNwZWMsIFdl
YktpdFdlYkV4dGVuc2lvbiogZXh0ZW5zaW9uKQotewotICAgIGdwb2ludGVyIGRhdGEgPSBnX29i
amVjdF9nZXRfZGF0YShHX09CSkVDVChleHRlbnNpb24pLCAiZGJ1cy1jb25uZWN0aW9uIik7Ci0g
ICAgaWYgKGRhdGEpCi0gICAgICAgIGVtaXRVUklDaGFuZ2VkKEdfREJVU19DT05ORUNUSU9OKGRh
dGEpLCB3ZWJraXRfd2ViX3BhZ2VfZ2V0X3VyaSh3ZWJQYWdlKSk7Ci0gICAgZWxzZQotICAgICAg
ICBkZWxheWVkU2lnbmFsc1F1ZXVlLmFwcGVuZChhZG9wdFB0cihuZXcgRGVsYXllZFNpZ25hbChV
UklDaGFuZ2VkU2lnbmFsLCB3ZWJraXRfd2ViX3BhZ2VfZ2V0X3VyaSh3ZWJQYWdlKSkpKTsKLX0K
LQotc3RhdGljIGdib29sZWFuIHNlbmRSZXF1ZXN0Q2FsbGJhY2soV2ViS2l0V2ViUGFnZSosIFdl
YktpdFVSSVJlcXVlc3QqIHJlcXVlc3QsIFdlYktpdFVSSVJlc3BvbnNlKiwgZ3BvaW50ZXIpCi17
Ci0gICAgY29uc3QgY2hhciogcmVxdWVzdFVSSSA9IHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfdXJp
KHJlcXVlc3QpOwotICAgIGdfYXNzZXJ0KHJlcXVlc3RVUkkpOwotCi0gICAgaWYgKGNvbnN0IGNo
YXIqIHN1ZmZpeCA9IGdfc3RycnN0cihyZXF1ZXN0VVJJLCAiL3JlbW92ZS10aGlzL2phdmFzY3Jp
cHQuanMiKSkgewotICAgICAgICBHT3duUHRyPGNoYXI+IHByZWZpeChnX3N0cm5kdXAocmVxdWVz
dFVSSSwgc3RybGVuKHJlcXVlc3RVUkkpIC0gc3RybGVuKHN1ZmZpeCkpKTsKLSAgICAgICAgR093
blB0cjxjaGFyPiBuZXdVUkkoZ19zdHJkdXBfcHJpbnRmKCIlcy9qYXZhc2NyaXB0LmpzIiwgcHJl
Zml4LmdldCgpKSk7Ci0gICAgICAgIHdlYmtpdF91cmlfcmVxdWVzdF9zZXRfdXJpKHJlcXVlc3Qs
IG5ld1VSSS5nZXQoKSk7Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9oYXNfc3VmZml4KHJlcXVlc3RV
UkksICIvYWRkLWRvLW5vdC10cmFjay1oZWFkZXIiKSkgewotICAgICAgICBTb3VwTWVzc2FnZUhl
YWRlcnMqIGhlYWRlcnMgPSB3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X2h0dHBfaGVhZGVycyhyZXF1
ZXN0KTsKLSAgICAgICAgZ19hc3NlcnQoaGVhZGVycyk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9o
ZWFkZXJzX2FwcGVuZChoZWFkZXJzLCAiRE5UIiwgIjEiKTsKLSAgICB9IGVsc2UgaWYgKGdfc3Ry
X2hhc19zdWZmaXgocmVxdWVzdFVSSSwgIi9jYW5jZWwtdGhpcy5qcyIpKQotICAgICAgICByZXR1
cm4gVFJVRTsKLQotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQgcGFnZUNyZWF0
ZWRDYWxsYmFjayhXZWJLaXRXZWJFeHRlbnNpb24qIGV4dGVuc2lvbiwgV2ViS2l0V2ViUGFnZSog
d2ViUGFnZSwgZ3BvaW50ZXIpCi17Ci0gICAgZ19zaWduYWxfY29ubmVjdCh3ZWJQYWdlLCAiZG9j
dW1lbnQtbG9hZGVkIiwgR19DQUxMQkFDSyhkb2N1bWVudExvYWRlZENhbGxiYWNrKSwgZXh0ZW5z
aW9uKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlBhZ2UsICJub3RpZnk6OnVyaSIsIEdfQ0FM
TEJBQ0sodXJpQ2hhbmdlZENhbGxiYWNrKSwgZXh0ZW5zaW9uKTsKLSAgICBnX3NpZ25hbF9jb25u
ZWN0KHdlYlBhZ2UsICJzZW5kLXJlcXVlc3QiLCBHX0NBTExCQUNLKHNlbmRSZXF1ZXN0Q2FsbGJh
Y2spLCAwKTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgZWNob0NhbGxiYWNrKEpTQ29udGV4dFJl
ZiBqc0NvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiwgc2l6ZV90IGFyZ3VtZW50Q291
bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqKQotewotICAgIGlm
IChhcmd1bWVudENvdW50IDw9IDApCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChqc0NvbnRleHQpOwotCi0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHN0cmluZyhBZG9w
dCwgSlNWYWx1ZVRvU3RyaW5nQ29weShqc0NvbnRleHQsIGFyZ3VtZW50c1swXSwgMCkpOwotICAg
IHJldHVybiBKU1ZhbHVlTWFrZVN0cmluZyhqc0NvbnRleHQsIHN0cmluZy5nZXQoKSk7Ci19Ci0K
LXN0YXRpYyB2b2lkIHdpbmRvd09iamVjdENsZWFyZWQoV2ViS2l0U2NyaXB0V29ybGQqIHdvcmxk
LCBXZWJLaXRXZWJQYWdlKiBwYWdlLCBXZWJLaXRGcmFtZSogZnJhbWUsIGdwb2ludGVyKQotewot
ICAgIEpTR2xvYmFsQ29udGV4dFJlZiBqc0NvbnRleHQgPSB3ZWJraXRfZnJhbWVfZ2V0X2phdmFz
Y3JpcHRfY29udGV4dF9mb3Jfc2NyaXB0X3dvcmxkKGZyYW1lLCB3b3JsZCk7Ci0gICAgZ19hc3Nl
cnQoanNDb250ZXh0KTsKLSAgICBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QgPSBKU0NvbnRleHRH
ZXRHbG9iYWxPYmplY3QoanNDb250ZXh0KTsKLSAgICBnX2Fzc2VydChnbG9iYWxPYmplY3QpOwot
Ci0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGZ1bmN0aW9uTmFtZShBZG9wdCwgSlNTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImVjaG8iKSk7Ci0gICAgSlNPYmplY3RSZWYgZnVuY3Rp
b24gPSBKU09iamVjdE1ha2VGdW5jdGlvbldpdGhDYWxsYmFjayhqc0NvbnRleHQsIGZ1bmN0aW9u
TmFtZS5nZXQoKSwgZWNob0NhbGxiYWNrKTsKLSAgICBKU09iamVjdFNldFByb3BlcnR5KGpzQ29u
dGV4dCwgZ2xvYmFsT2JqZWN0LCBmdW5jdGlvbk5hbWUuZ2V0KCksIGZ1bmN0aW9uLCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5LCAw
KTsKLX0KLQotc3RhdGljIFdlYktpdFdlYlBhZ2UqIGdldFdlYlBhZ2UoV2ViS2l0V2ViRXh0ZW5z
aW9uKiBleHRlbnNpb24sIHVpbnQ2NF90IHBhZ2VJRCwgR0RCdXNNZXRob2RJbnZvY2F0aW9uKiBp
bnZvY2F0aW9uKQotewotICAgIFdlYktpdFdlYlBhZ2UqIHBhZ2UgPSB3ZWJraXRfd2ViX2V4dGVu
c2lvbl9nZXRfcGFnZShleHRlbnNpb24sIHBhZ2VJRCk7Ci0gICAgaWYgKCFwYWdlKSB7Ci0gICAg
ICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fZXJyb3IoCi0gICAgICAgICAgICBp
bnZvY2F0aW9uLCBHX0RCVVNfRVJST1IsIEdfREJVU19FUlJPUl9JTlZBTElEX0FSR1MsCi0gICAg
ICAgICAgICAiSW52YWxpZCBwYWdlIElEOiAlIiBHX0dVSU5UNjRfRk9STUFULCBwYWdlSUQpOwot
ICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF93
ZWJfcGFnZV9nZXRfaWQocGFnZSksID09LCBwYWdlSUQpOwotICAgIHJldHVybiBwYWdlOwotfQot
Ci1zdGF0aWMgdm9pZCBtZXRob2RDYWxsQ2FsbGJhY2soR0RCdXNDb25uZWN0aW9uKiBjb25uZWN0
aW9uLCBjb25zdCBjaGFyKiBzZW5kZXIsIGNvbnN0IGNoYXIqIG9iamVjdFBhdGgsIGNvbnN0IGNo
YXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG1ldGhvZE5hbWUsIEdWYXJpYW50KiBwYXJh
bWV0ZXJzLCBHREJ1c01ldGhvZEludm9jYXRpb24qIGludm9jYXRpb24sIGdwb2ludGVyIHVzZXJE
YXRhKQotewotICAgIGlmIChnX3N0cmNtcDAoaW50ZXJmYWNlTmFtZSwgIm9yZy53ZWJraXQuZ3Rr
LldlYkV4dGVuc2lvblRlc3QiKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFnX3N0cmNt
cDAobWV0aG9kTmFtZSwgIkdldFRpdGxlIikpIHsKLSAgICAgICAgdWludDY0X3QgcGFnZUlEOwot
ICAgICAgICBnX3ZhcmlhbnRfZ2V0KHBhcmFtZXRlcnMsICIodCkiLCAmcGFnZUlEKTsKLSAgICAg
ICAgV2ViS2l0V2ViUGFnZSogcGFnZSA9IGdldFdlYlBhZ2UoV0VCS0lUX1dFQl9FWFRFTlNJT04o
dXNlckRhdGEpLCBwYWdlSUQsIGludm9jYXRpb24pOwotICAgICAgICBpZiAoIXBhZ2UpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50ID0g
d2Via2l0X3dlYl9wYWdlX2dldF9kb21fZG9jdW1lbnQocGFnZSk7Ci0gICAgICAgIEdPd25QdHI8
Y2hhcj4gdGl0bGUod2Via2l0X2RvbV9kb2N1bWVudF9nZXRfdGl0bGUoZG9jdW1lbnQpKTsKLSAg
ICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVybl92YWx1ZShpbnZvY2F0aW9uLCBn
X3ZhcmlhbnRfbmV3KCIocykiLCB0aXRsZS5nZXQoKSkpOwotICAgIH0gZWxzZSBpZiAoIWdfc3Ry
Y21wMChtZXRob2ROYW1lLCAiUnVuSmF2YVNjcmlwdEluSXNvbGF0ZWRXb3JsZCIpKSB7Ci0gICAg
ICAgIHVpbnQ2NF90IHBhZ2VJRDsKLSAgICAgICAgY29uc3QgY2hhciogc2NyaXB0OwotICAgICAg
ICBnX3ZhcmlhbnRfZ2V0KHBhcmFtZXRlcnMsICIodCZzKSIsICZwYWdlSUQsICZzY3JpcHQpOwot
ICAgICAgICBXZWJLaXRXZWJQYWdlKiBwYWdlID0gZ2V0V2ViUGFnZShXRUJLSVRfV0VCX0VYVEVO
U0lPTih1c2VyRGF0YSksIHBhZ2VJRCwgaW52b2NhdGlvbik7Ci0gICAgICAgIGlmICghcGFnZSkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBHUmVmUHRyPFdlYktpdFNjcmlwdFdvcmxk
PiB3b3JsZCA9IGFkb3B0R1JlZih3ZWJraXRfc2NyaXB0X3dvcmxkX25ldygpKTsKLSAgICAgICAg
Z19hc3NlcnQod2Via2l0X3NjcmlwdF93b3JsZF9nZXRfZGVmYXVsdCgpICE9IHdvcmxkLmdldCgp
KTsKLSAgICAgICAgV2ViS2l0RnJhbWUqIGZyYW1lID0gd2Via2l0X3dlYl9wYWdlX2dldF9tYWlu
X2ZyYW1lKHBhZ2UpOwotICAgICAgICBKU0dsb2JhbENvbnRleHRSZWYganNDb250ZXh0ID0gd2Vi
a2l0X2ZyYW1lX2dldF9qYXZhc2NyaXB0X2NvbnRleHRfZm9yX3NjcmlwdF93b3JsZChmcmFtZSwg
d29ybGQuZ2V0KCkpOwotICAgICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4ganNTY3JpcHQo
QWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHNjcmlwdCkpOwotICAgICAgICBK
U0V2YWx1YXRlU2NyaXB0KGpzQ29udGV4dCwganNTY3JpcHQuZ2V0KCksIDAsIDAsIDAsIDApOwot
ICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9jYXRpb25fcmV0dXJuX3ZhbHVlKGludm9jYXRpb24s
IDApOwotICAgIH0gZWxzZSBpZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAiQWJvcnRQcm9jZXNz
IikpIHsKLSAgICAgICAgYWJvcnQoKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBjb25zdCBHREJ1c0lu
dGVyZmFjZVZUYWJsZSBpbnRlcmZhY2VWaXJ0dWFsVGFibGUgPSB7Ci0gICAgbWV0aG9kQ2FsbENh
bGxiYWNrLCAwLCAwLCB7IDAsIH0KLX07Ci0KLXN0YXRpYyB2b2lkIGJ1c0FjcXVpcmVkQ2FsbGJh
Y2soR0RCdXNDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBjb25zdCBjaGFyKiBuYW1lLCBncG9pbnRl
ciB1c2VyRGF0YSkKLXsKLSAgICBzdGF0aWMgR0RCdXNOb2RlSW5mbyAqaW50cm9zcGVjdGlvbkRh
dGEgPSAwOwotICAgIGlmICghaW50cm9zcGVjdGlvbkRhdGEpCi0gICAgICAgIGludHJvc3BlY3Rp
b25EYXRhID0gZ19kYnVzX25vZGVfaW5mb19uZXdfZm9yX3htbChpbnRyb3NwZWN0aW9uWE1MLCAw
KTsKLQotICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKLSAgICB1bnNpZ25lZCByZWdpc3RyYXRp
b25JRCA9IGdfZGJ1c19jb25uZWN0aW9uX3JlZ2lzdGVyX29iamVjdCgKLSAgICAgICAgY29ubmVj
dGlvbiwKLSAgICAgICAgIi9vcmcvd2Via2l0L2d0ay9XZWJFeHRlbnNpb25UZXN0IiwKLSAgICAg
ICAgaW50cm9zcGVjdGlvbkRhdGEtPmludGVyZmFjZXNbMF0sCi0gICAgICAgICZpbnRlcmZhY2VW
aXJ0dWFsVGFibGUsCi0gICAgICAgIGdfb2JqZWN0X3JlZih1c2VyRGF0YSksCi0gICAgICAgIHN0
YXRpY19jYXN0PEdEZXN0cm95Tm90aWZ5PihnX29iamVjdF91bnJlZiksCi0gICAgICAgICZlcnJv
ci5vdXRQdHIoKSk7Ci0gICAgaWYgKCFyZWdpc3RyYXRpb25JRCkKLSAgICAgICAgZ193YXJuaW5n
KCJGYWlsZWQgdG8gcmVnaXN0ZXIgb2JqZWN0OiAlc1xuIiwgZXJyb3ItPm1lc3NhZ2UpOwotCi0g
ICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QodXNlckRhdGEpLCAiZGJ1cy1jb25uZWN0aW9u
IiwgY29ubmVjdGlvbik7Ci0gICAgd2hpbGUgKGRlbGF5ZWRTaWduYWxzUXVldWUuc2l6ZSgpKSB7
Ci0gICAgICAgIE93blB0cjxEZWxheWVkU2lnbmFsPiBkZWxheWVkU2lnbmFsID0gZGVsYXllZFNp
Z25hbHNRdWV1ZS50YWtlRmlyc3QoKTsKLSAgICAgICAgc3dpdGNoIChkZWxheWVkU2lnbmFsLT50
eXBlKSB7Ci0gICAgICAgIGNhc2UgRG9jdW1lbnRMb2FkZWRTaWduYWw6Ci0gICAgICAgICAgICBl
bWl0RG9jdW1lbnRMb2FkZWQoY29ubmVjdGlvbik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBVUklDaGFuZ2VkU2lnbmFsOgotICAgICAgICAgICAgZW1pdFVSSUNoYW5nZWQoY29u
bmVjdGlvbiwgZGVsYXllZFNpZ25hbC0+dXJpLmRhdGEoKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgIH0KLX0KLQotZXh0ZXJuICJDIiB2b2lkIHdlYmtpdF93ZWJfZXh0ZW5z
aW9uX2luaXRpYWxpemUoV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24pCi17Ci0gICAgZ19z
aWduYWxfY29ubmVjdChleHRlbnNpb24sICJwYWdlLWNyZWF0ZWQiLCBHX0NBTExCQUNLKHBhZ2VD
cmVhdGVkQ2FsbGJhY2spLCBleHRlbnNpb24pOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2Via2l0
X3NjcmlwdF93b3JsZF9nZXRfZGVmYXVsdCgpLCAid2luZG93LW9iamVjdC1jbGVhcmVkIiwgR19D
QUxMQkFDSyh3aW5kb3dPYmplY3RDbGVhcmVkKSwgMCk7Ci0KLSAgICBnX2J1c19vd25fbmFtZSgK
LSAgICAgICAgR19CVVNfVFlQRV9TRVNTSU9OLAotICAgICAgICAib3JnLndlYmtpdC5ndGsuV2Vi
RXh0ZW5zaW9uVGVzdCIsCi0gICAgICAgIEdfQlVTX05BTUVfT1dORVJfRkxBR1NfTk9ORSwKLSAg
ICAgICAgYnVzQWNxdWlyZWRDYWxsYmFjaywKLSAgICAgICAgMCwgMCwKLSAgICAgICAgZ19vYmpl
Y3RfcmVmKGV4dGVuc2lvbiksCi0gICAgICAgIHN0YXRpY19jYXN0PEdEZXN0cm95Tm90aWZ5Pihn
X29iamVjdF91bnJlZikpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvV2ViS2l0VGVzdEJ1cy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9XZWJLaXRUZXN0QnVzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggOGMyZDNmNi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9XZWJLaXRUZXN0QnVzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwNiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJXZWJLaXRUZXN0QnVzLmgiCi0KLSNpbmNsdWRlIDx3dGYvZ29i
amVjdC9HT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLVdlYktp
dFRlc3RCdXM6OldlYktpdFRlc3RCdXMoKQotICAgIDogbV9waWQoLTEpCi17Ci19Ci0KLWJvb2wg
V2ViS2l0VGVzdEJ1czo6cnVuKCkKLXsKLSAgICAvLyBGSVhNRTogVXNlIEdUZXN0REJ1cyB3aGVu
IHdlIGJ1bXAgZ2xpYiB0byAyLjM0LgotICAgIEdPd25QdHI8Y2hhcj4gZGJ1c0xhdW5jaChnX2Zp
bmRfcHJvZ3JhbV9pbl9wYXRoKCJkYnVzLWxhdW5jaCIpKTsKLSAgICBpZiAoIWRidXNMYXVuY2gp
IHsKLSAgICAgICAgZ193YXJuaW5nKCJFcnJvciBzdGFydGluZyBEQlVTIGRhZW1vbjogZGJ1cy1s
YXVuY2ggbm90IGZvdW5kIGluIHBhdGgiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIEdPd25QdHI8Y2hhcj4gb3V0cHV0OwotICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsK
LSAgICBpZiAoIWdfc3Bhd25fY29tbWFuZF9saW5lX3N5bmMoZGJ1c0xhdW5jaC5nZXQoKSwgJm91
dHB1dC5vdXRQdHIoKSwgMCwgMCwgJmVycm9yLm91dFB0cigpKSkgewotICAgICAgICBnX3dhcm5p
bmcoIkVycm9yIHN0YXJ0aW5nIERCVVMgZGFlbW9uOiAlcyIsIGVycm9yLT5tZXNzYWdlKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFN0cmluZyBvdXRwdXRTdHJpbmcgPSBT
dHJpbmc6OmZyb21VVEY4KG91dHB1dC5nZXQoKSk7Ci0gICAgVmVjdG9yPFN0cmluZz4gbGluZXM7
Ci0gICAgb3V0cHV0U3RyaW5nLnNwbGl0KFVDaGFyKCdcbicpLCAvKiBhbGxvd0VtcHR5RW50cmll
cyAqLyBmYWxzZSwgbGluZXMpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGluZXMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgY2hhcioqIGtleVZhbHVlID0gZ19zdHJzcGxpdChsaW5lc1tp
XS51dGY4KCkuZGF0YSgpLCAiPSIsIDIpOwotICAgICAgICBnX2Fzc2VydF9jbXB1aW50KGdfc3Ry
dl9sZW5ndGgoa2V5VmFsdWUpLCA9PSwgMik7Ci0gICAgICAgIGlmICghZ19zdHJjbXAwKGtleVZh
bHVlWzBdLCAiREJVU19TRVNTSU9OX0JVU19BRERSRVNTIikpIHsKLSAgICAgICAgICAgIG1fYWRk
cmVzcyA9IGtleVZhbHVlWzFdOwotICAgICAgICAgICAgZ19zZXRlbnYoIkRCVVNfU0VTU0lPTl9C
VVNfQUREUkVTUyIsIGtleVZhbHVlWzFdLCBUUlVFKTsKLSAgICAgICAgfSBlbHNlIGlmICghZ19z
dHJjbXAwKGtleVZhbHVlWzBdLCAiREJVU19TRVNTSU9OX0JVU19QSUQiKSkKLSAgICAgICAgICAg
IG1fcGlkID0gZ19hc2NpaV9zdHJ0b2xsKGtleVZhbHVlWzFdLCAwLCAxMCk7Ci0gICAgICAgIGdf
c3RyZnJlZXYoa2V5VmFsdWUpOwotICAgIH0KLQotICAgIHJldHVybiBtX3BpZCA+IDA7Ci19Ci0K
LVdlYktpdFRlc3RCdXM6On5XZWJLaXRUZXN0QnVzKCkKLXsKLSAgICBnX3Vuc2V0ZW52KCJEQlVT
X1NFU1NJT05fQlVTX0FERFJFU1MiKTsKLQotICAgIGlmIChtX3BpZCAhPSAtMSkKLSAgICAgICAg
a2lsbChtX3BpZCwgU0lHVEVSTSk7Ci19Ci0KLUdEQnVzQ29ubmVjdGlvbiogV2ViS2l0VGVzdEJ1
czo6Z2V0T3JDcmVhdGVDb25uZWN0aW9uKCkKLXsKLSAgICBpZiAobV9jb25uZWN0aW9uKQotICAg
ICAgICByZXR1cm4gbV9jb25uZWN0aW9uLmdldCgpOwotCi0gICAgZ19hc3NlcnQoIW1fYWRkcmVz
cy5pc051bGwoKSk7Ci0gICAgbV9jb25uZWN0aW9uID0gYWRvcHRHUmVmKGdfZGJ1c19jb25uZWN0
aW9uX25ld19mb3JfYWRkcmVzc19zeW5jKG1fYWRkcmVzcy5kYXRhKCksCi0gICAgICAgIHN0YXRp
Y19jYXN0PEdEQnVzQ29ubmVjdGlvbkZsYWdzPihHX0RCVVNfQ09OTkVDVElPTl9GTEFHU19BVVRI
RU5USUNBVElPTl9DTElFTlQgfCBHX0RCVVNfQ09OTkVDVElPTl9GTEFHU19NRVNTQUdFX0JVU19D
T05ORUNUSU9OKSwKLSAgICAgICAgMCwgMCwgMCkpOwotICAgIHJldHVybiBtX2Nvbm5lY3Rpb24u
Z2V0KCk7Ci19Ci0KLXN0YXRpYyB2b2lkIG9uTmFtZUFwcGVhcmVkKEdEQnVzQ29ubmVjdGlvbios
IGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgZ3BvaW50ZXIgdXNlckRhdGEpCi17Ci0gICAgZ19t
YWluX2xvb3BfcXVpdChzdGF0aWNfY2FzdDxHTWFpbkxvb3AqPih1c2VyRGF0YSkpOwotfQotCi1H
REJ1c1Byb3h5KiBXZWJLaXRUZXN0QnVzOjpjcmVhdGVQcm94eShjb25zdCBjaGFyKiBzZXJ2aWNl
TmFtZSwgY29uc3QgY2hhciogb2JqZWN0UGF0aCwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwg
R01haW5Mb29wKiBtYWluTG9vcCkKLXsKLSAgICB1bnNpZ25lZCB3YXRjaGVySUQgPSBnX2J1c193
YXRjaF9uYW1lX29uX2Nvbm5lY3Rpb24oZ2V0T3JDcmVhdGVDb25uZWN0aW9uKCksIHNlcnZpY2VO
YW1lLCBHX0JVU19OQU1FX1dBVENIRVJfRkxBR1NfTk9ORSwgb25OYW1lQXBwZWFyZWQsIDAsIG1h
aW5Mb29wLCAwKTsKLSAgICBnX21haW5fbG9vcF9ydW4obWFpbkxvb3ApOwotICAgIGdfYnVzX3Vu
d2F0Y2hfbmFtZSh3YXRjaGVySUQpOwotCi0gICAgR0RCdXNQcm94eSogcHJveHkgPSBnX2RidXNf
cHJveHlfbmV3X3N5bmMoCi0gICAgICAgIGNvbm5lY3Rpb24oKSwKLSAgICAgICAgR19EQlVTX1BS
T1hZX0ZMQUdTX0RPX05PVF9BVVRPX1NUQVJULAotICAgICAgICAwLCAvLyBHREJ1c0ludGVyZmFj
ZUluZm8KLSAgICAgICAgc2VydmljZU5hbWUsCi0gICAgICAgIG9iamVjdFBhdGgsCi0gICAgICAg
IGludGVyZmFjZU5hbWUsCi0gICAgICAgIDAsIC8vIEdDYW5jZWxsYWJsZQotICAgICAgICAwKTsK
LSAgICBnX2Fzc2VydChwcm94eSk7Ci0gICAgcmV0dXJuIHByb3h5OwotfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViS2l0VGVzdEJ1cy5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViS2l0VGVzdEJ1cy5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOWY4NTZiLi4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYktpdFRlc3RCdXMuaAorKysgL2Rl
di9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlh
IFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0g
Ki8KLQotI2lmbmRlZiBXZWJLaXRUZXN0QnVzX2gKLSNkZWZpbmUgV2ViS2l0VGVzdEJ1c19oCi0K
LSNpbmNsdWRlIDxnaW8vZ2lvLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotY2xhc3MgV2ViS2l0VGVzdEJ1cyB7Ci1w
dWJsaWM6Ci0gICAgV2ViS2l0VGVzdEJ1cygpOwotICAgIHZpcnR1YWwgfldlYktpdFRlc3RCdXMo
KTsKLQotICAgIGJvb2wgcnVuKCk7Ci0gICAgR0RCdXNQcm94eSogY3JlYXRlUHJveHkoY29uc3Qg
Y2hhciogc2VydmljZU5hbWUsIGNvbnN0IGNoYXIqIG9iamVjdFBhdGgsIGNvbnN0IGNoYXIqIGlu
dGVyZmFjZU5hbWUsIEdNYWluTG9vcCopOwotICAgIEdEQnVzQ29ubmVjdGlvbiogY29ubmVjdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fY29ubmVjdGlvbi5nZXQoKTsgfQotCi1wcml2YXRlOgotICAg
IEdEQnVzQ29ubmVjdGlvbiogZ2V0T3JDcmVhdGVDb25uZWN0aW9uKCk7Ci0KLSAgICBwaWRfdCBt
X3BpZDsKLSAgICBDU3RyaW5nIG1fYWRkcmVzczsKLSAgICBHUmVmUHRyPEdEQnVzQ29ubmVjdGlv
bj4gbV9jb25uZWN0aW9uOwotfTsKLQotI2VuZGlmIC8vIFdlYktpdFRlc3RCdXNfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViS2l0VGVzdFNl
cnZlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJLaXRU
ZXN0U2VydmVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThiNGE5YS4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJLaXRU
ZXN0U2VydmVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IldlYktpdFRlc3RTZXJ2ZXIuaCIKLQotI2luY2x1ZGUgIlRlc3RNYWluLmgiCi0jaW5jbHVkZSA8
d3RmL2dvYmplY3QvR093blB0ci5oPgotCi1XZWJLaXRUZXN0U2VydmVyOjpXZWJLaXRUZXN0U2Vy
dmVyKFNlcnZlclR5cGUgdHlwZSkKLXsKLSAgICBHT3duUHRyPGNoYXI+IHNzbENlcnRpZmljYXRl
RmlsZTsKLSAgICBHT3duUHRyPGNoYXI+IHNzbEtleUZpbGU7Ci0gICAgaWYgKHR5cGUgPT0gU2Vy
dmVySFRUUFMpIHsKLSAgICAgICAgQ1N0cmluZyByZXNvdXJjZXNEaXIgPSBUZXN0OjpnZXRSZXNv
dXJjZXNEaXIoKTsKLSAgICAgICAgc3NsQ2VydGlmaWNhdGVGaWxlLnNldChnX2J1aWxkX2ZpbGVu
YW1lKHJlc291cmNlc0Rpci5kYXRhKCksICJ0ZXN0LWNlcnQucGVtIiwgTlVMTCkpOwotICAgICAg
ICBzc2xLZXlGaWxlLnNldChnX2J1aWxkX2ZpbGVuYW1lKHJlc291cmNlc0Rpci5kYXRhKCksICJ0
ZXN0LWtleS5wZW0iLCBOVUxMKSk7Ci0gICAgfQotCi0gICAgR1JlZlB0cjxTb3VwQWRkcmVzcz4g
YWRkcmVzcyA9IGFkb3B0R1JlZihzb3VwX2FkZHJlc3NfbmV3KCIxMjcuMC4wLjEiLCBTT1VQX0FE
RFJFU1NfQU5ZX1BPUlQpKTsKLSAgICBzb3VwX2FkZHJlc3NfcmVzb2x2ZV9zeW5jKGFkZHJlc3Mu
Z2V0KCksIDApOwotCi0gICAgbV9zb3VwU2VydmVyID0gYWRvcHRHUmVmKHNvdXBfc2VydmVyX25l
dyhTT1VQX1NFUlZFUl9JTlRFUkZBQ0UsIGFkZHJlc3MuZ2V0KCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT1VQX1NFUlZFUl9TU0xfQ0VSVF9GSUxFLCBz
c2xDZXJ0aWZpY2F0ZUZpbGUuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTT1VQX1NFUlZFUl9TU0xfS0VZX0ZJTEUsIHNzbEtleUZpbGUuZ2V0KCks
IE5VTEwpKTsKLSAgICBtX2Jhc2VVUkkgPSB0eXBlID09IFNlcnZlckhUVFBTID8gc291cF91cmlf
bmV3KCJodHRwczovLzEyNy4wLjAuMS8iKSA6IHNvdXBfdXJpX25ldygiaHR0cDovLzEyNy4wLjAu
MS8iKTsKLSAgICBzb3VwX3VyaV9zZXRfcG9ydChtX2Jhc2VVUkksIHNvdXBfc2VydmVyX2dldF9w
b3J0KG1fc291cFNlcnZlci5nZXQoKSkpOwotfQotCi1XZWJLaXRUZXN0U2VydmVyOjp+V2ViS2l0
VGVzdFNlcnZlcigpCi17Ci0gICAgc291cF91cmlfZnJlZShtX2Jhc2VVUkkpOwotfQotCi12b2lk
IFdlYktpdFRlc3RTZXJ2ZXI6OnJ1bihTb3VwU2VydmVyQ2FsbGJhY2sgc2VydmVyQ2FsbGJhY2sp
Ci17Ci0gICAgc291cF9zZXJ2ZXJfcnVuX2FzeW5jKG1fc291cFNlcnZlci5nZXQoKSk7Ci0gICAg
c291cF9zZXJ2ZXJfYWRkX2hhbmRsZXIobV9zb3VwU2VydmVyLmdldCgpLCAwLCBzZXJ2ZXJDYWxs
YmFjaywgMCwgMCk7Ci19Ci0KLUNTdHJpbmcgV2ViS2l0VGVzdFNlcnZlcjo6Z2V0VVJJRm9yUGF0
aChjb25zdCBjaGFyKiBwYXRoKQotewotICAgIFNvdXBVUkkqIHVyaSA9IHNvdXBfdXJpX25ld193
aXRoX2Jhc2UobV9iYXNlVVJJLCBwYXRoKTsKLSAgICBHT3duUHRyPGdjaGFyPiB1cmlTdHJpbmco
c291cF91cmlfdG9fc3RyaW5nKHVyaSwgRkFMU0UpKTsKLSAgICBzb3VwX3VyaV9mcmVlKHVyaSk7
Ci0gICAgcmV0dXJuIHVyaVN0cmluZy5nZXQoKTsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViS2l0VGVzdFNlcnZlci5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViS2l0VGVzdFNlcnZlci5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDYyNmY2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYktpdFRlc3RTZXJ2ZXIuaAorKysgL2Rl
di9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlh
IFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0g
Ki8KLQotI2lmbmRlZiBXZWJLaXRUZXN0U2VydmVyX2gKLSNkZWZpbmUgV2ViS2l0VGVzdFNlcnZl
cl9oCi0KLSNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KLSNpbmNsdWRlIDx3ZWJraXQyL3dlYmtp
dDIuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgotCi1jbGFzcyBXZWJLaXRUZXN0U2VydmVyIHsKLXB1YmxpYzoKLQotICAg
IGVudW0gU2VydmVyVHlwZSB7Ci0gICAgICAgIFNlcnZlckhUVFAsCi0gICAgICAgIFNlcnZlckhU
VFBTCi0gICAgfTsKLQotICAgIFdlYktpdFRlc3RTZXJ2ZXIoU2VydmVyVHlwZSB0eXBlID0gU2Vy
dmVySFRUUCk7Ci0gICAgdmlydHVhbCB+V2ViS2l0VGVzdFNlcnZlcigpOwotCi0gICAgU291cFVS
SSogYmFzZVVSSSgpIHsgcmV0dXJuIG1fYmFzZVVSSTsgfQotCi0gICAgQ1N0cmluZyBnZXRVUklG
b3JQYXRoKGNvbnN0IGNoYXIqIHBhdGgpOwotICAgIHZvaWQgcnVuKFNvdXBTZXJ2ZXJDYWxsYmFj
ayk7Ci0KLXByaXZhdGU6Ci0gICAgR1JlZlB0cjxTb3VwU2VydmVyPiBtX3NvdXBTZXJ2ZXI7Ci0g
ICAgU291cFVSSSogbV9iYXNlVVJJOwotfTsKLQotI2VuZGlmIC8vIFdlYktpdFRlc3RTZXJ2ZXJf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2Vi
UHJvY2Vzc1Rlc3QuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
V2ViUHJvY2Vzc1Rlc3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTFhNmU3
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dl
YlByb2Nlc3NUZXN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJXZWJQcm9jZXNzVGVzdC5oIgotCi0jaW5jbHVkZSA8Z2lvL2dpby5oPgotI2luY2x1ZGUg
PHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KLQotdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgc3RkOjpm
dW5jdGlvbjxQYXNzT3duUHRyPFdlYlByb2Nlc3NUZXN0PiAoKT4+IFRlc3RzTWFwOwotc3RhdGlj
IFRlc3RzTWFwJiB0ZXN0c01hcCgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChUZXN0c01h
cCwgc190ZXN0c01hcCwgKCkpOwotICAgIHJldHVybiBzX3Rlc3RzTWFwOwotfQotCi12b2lkIFdl
YlByb2Nlc3NUZXN0OjphZGQoY29uc3QgU3RyaW5nJiB0ZXN0TmFtZSwgc3RkOjpmdW5jdGlvbjxQ
YXNzT3duUHRyPFdlYlByb2Nlc3NUZXN0PiAoKT4gY2xvc3VyZSkKLXsKLSAgICB0ZXN0c01hcCgp
LmFkZCh0ZXN0TmFtZSwgc3RkOjpmb3J3YXJkPHN0ZDo6ZnVuY3Rpb248UGFzc093blB0cjxXZWJQ
cm9jZXNzVGVzdD4gKCk+PihjbG9zdXJlKSk7Ci19Ci0KLVBhc3NPd25QdHI8V2ViUHJvY2Vzc1Rl
c3Q+IFdlYlByb2Nlc3NUZXN0OjpjcmVhdGUoY29uc3QgU3RyaW5nJiB0ZXN0TmFtZSkKLXsKLSAg
ICBnX2Fzc2VydCh0ZXN0c01hcCgpLmNvbnRhaW5zKHRlc3ROYW1lKSk7Ci0gICAgcmV0dXJuIHRl
c3RzTWFwKCkuZ2V0KHRlc3ROYW1lKSgpOwotfQotCi1zdGF0aWMgY29uc3QgY2hhciBpbnRyb3Nw
ZWN0aW9uWE1MW10gPQotICAgICI8bm9kZT4iCi0gICAgIiA8aW50ZXJmYWNlIG5hbWU9J29yZy53
ZWJraXQuZ3RrLldlYlByb2Nlc3NUZXN0Jz4iCi0gICAgIiAgPG1ldGhvZCBuYW1lPSdSdW5UZXN0
Jz4iCi0gICAgIiAgIDxhcmcgdHlwZT0ncycgbmFtZT0ncGF0aCcgZGlyZWN0aW9uPSdpbicvPiIK
LSAgICAiICAgPGFyZyB0eXBlPSdhe3N2fScgbmFtZT0nYXJncycgZGlyZWN0aW9uPSdpbicvPiIK
LSAgICAiICAgPGFyZyB0eXBlPSdiJyBuYW1lPSdyZXN1bHQnIGRpcmVjdGlvbj0nb3V0Jy8+Igot
ICAgICIgIDwvbWV0aG9kPiIKLSAgICAiIDwvaW50ZXJmYWNlPiIKLSAgICAiPC9ub2RlPiI7Ci0K
LXN0YXRpYyB2b2lkIG1ldGhvZENhbGxDYWxsYmFjayhHREJ1c0Nvbm5lY3Rpb24qIGNvbm5lY3Rp
b24sIGNvbnN0IGNoYXIqIHNlbmRlciwgY29uc3QgY2hhciogb2JqZWN0UGF0aCwgY29uc3QgY2hh
ciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogbWV0aG9kTmFtZSwgR1ZhcmlhbnQqIHBhcmFt
ZXRlcnMsIEdEQnVzTWV0aG9kSW52b2NhdGlvbiogaW52b2NhdGlvbiwgZ3BvaW50ZXIgdXNlckRh
dGEpCi17Ci0gICAgaWYgKGdfc3RyY21wMChpbnRlcmZhY2VOYW1lLCAib3JnLndlYmtpdC5ndGsu
V2ViUHJvY2Vzc1Rlc3QiKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFnX3N0cmNtcDAo
bWV0aG9kTmFtZSwgIlJ1blRlc3QiKSkgewotICAgICAgICBjb25zdCBjaGFyKiB0ZXN0UGF0aDsK
LSAgICAgICAgR1ZhcmlhbnQqIGFyZ3M7Ci0gICAgICAgIGdfdmFyaWFudF9nZXQocGFyYW1ldGVy
cywgIigmc0Bhe3N2fSkiLCAmdGVzdFBhdGgsICZhcmdzKTsKLSAgICAgICAgT3duUHRyPFdlYlBy
b2Nlc3NUZXN0PiB0ZXN0ID0gV2ViUHJvY2Vzc1Rlc3Q6OmNyZWF0ZShTdHJpbmc6OmZyb21VVEY4
KHRlc3RQYXRoKSk7Ci0gICAgICAgIGJvb2wgcmVzdWx0ID0gdGVzdC0+cnVuVGVzdChnX3N0cnJz
dHIodGVzdFBhdGgsICIvIikgKyAxLCBXRUJLSVRfV0VCX0VYVEVOU0lPTih1c2VyRGF0YSksIGFy
Z3MpOwotICAgICAgICBnX3ZhcmlhbnRfdW5yZWYoYXJncyk7Ci0KLSAgICAgICAgZ19kYnVzX21l
dGhvZF9pbnZvY2F0aW9uX3JldHVybl92YWx1ZShpbnZvY2F0aW9uLCBnX3ZhcmlhbnRfbmV3KCIo
YikiLCByZXN1bHQpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQo
KTsKLX0KLQotc3RhdGljIGNvbnN0IEdEQnVzSW50ZXJmYWNlVlRhYmxlIGludGVyZmFjZVZpcnR1
YWxUYWJsZSA9IHsKLSAgICBtZXRob2RDYWxsQ2FsbGJhY2ssIDAsIDAsIHsgMCwgfQotfTsKLQot
c3RhdGljIHZvaWQgYnVzQWNxdWlyZWRDYWxsYmFjayhHREJ1c0Nvbm5lY3Rpb24qIGNvbm5lY3Rp
b24sIGNvbnN0IGNoYXIqIG5hbWUsIGdwb2ludGVyIHVzZXJEYXRhKQotewotICAgIHN0YXRpYyBH
REJ1c05vZGVJbmZvICppbnRyb3NwZWN0aW9uRGF0YSA9IDA7Ci0gICAgaWYgKCFpbnRyb3NwZWN0
aW9uRGF0YSkKLSAgICAgICAgaW50cm9zcGVjdGlvbkRhdGEgPSBnX2RidXNfbm9kZV9pbmZvX25l
d19mb3JfeG1sKGludHJvc3BlY3Rpb25YTUwsIDApOwotCi0gICAgR093blB0cjxHRXJyb3I+IGVy
cm9yOwotICAgIHVuc2lnbmVkIHJlZ2lzdHJhdGlvbklEID0gZ19kYnVzX2Nvbm5lY3Rpb25fcmVn
aXN0ZXJfb2JqZWN0KAotICAgICAgICBjb25uZWN0aW9uLAotICAgICAgICAiL29yZy93ZWJraXQv
Z3RrL1dlYlByb2Nlc3NUZXN0IiwKLSAgICAgICAgaW50cm9zcGVjdGlvbkRhdGEtPmludGVyZmFj
ZXNbMF0sCi0gICAgICAgICZpbnRlcmZhY2VWaXJ0dWFsVGFibGUsCi0gICAgICAgIGdfb2JqZWN0
X3JlZih1c2VyRGF0YSksCi0gICAgICAgIHN0YXRpY19jYXN0PEdEZXN0cm95Tm90aWZ5PihnX29i
amVjdF91bnJlZiksCi0gICAgICAgICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgaWYgKCFyZWdpc3Ry
YXRpb25JRCkKLSAgICAgICAgZ193YXJuaW5nKCJGYWlsZWQgdG8gcmVnaXN0ZXIgb2JqZWN0OiAl
c1xuIiwgZXJyb3ItPm1lc3NhZ2UpOwotfQotCi1leHRlcm4gIkMiIHZvaWQgd2Via2l0X3dlYl9l
eHRlbnNpb25faW5pdGlhbGl6ZShXZWJLaXRXZWJFeHRlbnNpb24qIGV4dGVuc2lvbikKLXsKLSAg
ICBnX2J1c19vd25fbmFtZSgKLSAgICAgICAgR19CVVNfVFlQRV9TRVNTSU9OLAotICAgICAgICAi
b3JnLndlYmtpdC5ndGsuV2ViUHJvY2Vzc1Rlc3QiLAotICAgICAgICBHX0JVU19OQU1FX09XTkVS
X0ZMQUdTX05PTkUsCi0gICAgICAgIGJ1c0FjcXVpcmVkQ2FsbGJhY2ssCi0gICAgICAgIDAsIDAs
Ci0gICAgICAgIGdfb2JqZWN0X3JlZihleHRlbnNpb24pLAotICAgICAgICBzdGF0aWNfY2FzdDxH
RGVzdHJveU5vdGlmeT4oZ19vYmplY3RfdW5yZWYpKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlByb2Nlc3NUZXN0LmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJQcm9jZXNzVGVzdC5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlM2VlZGQwLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlByb2Nlc3NUZXN0LmgKKysrIC9kZXYvbnVs
bApAQCAtMSwzOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwu
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0K
LSNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdC13ZWItZXh0ZW5zaW9uLmg+Ci0jaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9n
b2JqZWN0L0dSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLWNsYXNzIFdlYlByb2Nlc3NUZXN0IHsKLXB1
YmxpYzoKLSAgICB2aXJ0dWFsIH5XZWJQcm9jZXNzVGVzdCgpIHsgfQotICAgIHZpcnR1YWwgYm9v
bCBydW5UZXN0KGNvbnN0IGNoYXIqIHRlc3ROYW1lLCBXZWJLaXRXZWJFeHRlbnNpb24qLCBHVmFy
aWFudCogYXJncykgPSAwOwotCi0gICAgc3RhdGljIHZvaWQgYWRkKGNvbnN0IFN0cmluZyYgdGVz
dE5hbWUsIHN0ZDo6ZnVuY3Rpb248UGFzc093blB0cjxXZWJQcm9jZXNzVGVzdD4gKCk+KTsKLSAg
ICBzdGF0aWMgUGFzc093blB0cjxXZWJQcm9jZXNzVGVzdD4gY3JlYXRlKGNvbnN0IFN0cmluZyYg
dGVzdE5hbWUpOwotfTsKLQotI2RlZmluZSBSRUdJU1RFUl9URVNUKENsYXNzTmFtZSwgVGVzdE5h
bWUpIFwKLSAgICBXZWJQcm9jZXNzVGVzdDo6YWRkKFN0cmluZzo6ZnJvbVVURjgoVGVzdE5hbWUp
LCBDbGFzc05hbWU6OmNyZWF0ZSkKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvV2ViUHJvY2Vzc1Rlc3RSdW5uZXIuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViUHJvY2Vzc1Rlc3RSdW5uZXIuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTNjZDk2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlByb2Nlc3NUZXN0UnVubmVyLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzVGVz
dFJ1bm5lci5oIgotCi0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgotCi1XZWJQcm9j
ZXNzVGVzdFJ1bm5lcjo6V2ViUHJvY2Vzc1Rlc3RSdW5uZXIoKQotICAgIDogbV9tYWluTG9vcChn
X21haW5fbG9vcF9uZXcoMCwgVFJVRSkpCi0gICAgLCBtX2J1cyhhZG9wdEdSZWYoZ190ZXN0X2Ri
dXNfbmV3KEdfVEVTVF9EQlVTX05PTkUpKSkKLXsKLSAgICAvLyBTYXZlIHRoZSBESVNQTEFZIGVu
diB2YXIgdG8gcmVzdG9yZSBpdCBhZnRlciBjYWxsaW5nIGdfdGVzdF9kYnVzX3VwKCkgdGhhdCB1
bnNldHMgaXQuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMjU2MjEuCi0gICAgY29uc3QgY2hhciogZGlzcGxheSA9IGdfZ2V0ZW52KCJESVNQTEFZ
Iik7Ci0gICAgZ190ZXN0X2RidXNfdXAobV9idXMuZ2V0KCkpOwotICAgIGdfc2V0ZW52KCJESVNQ
TEFZIiwgZGlzcGxheSwgRkFMU0UpOwotICAgIG1fY29ubmVjdGlvbiA9IGFkb3B0R1JlZihnX2J1
c19nZXRfc3luYyhHX0JVU19UWVBFX1NFU1NJT04sIDAsIDApKTsKLX0KLQotV2ViUHJvY2Vzc1Rl
c3RSdW5uZXI6On5XZWJQcm9jZXNzVGVzdFJ1bm5lcigpCi17Ci0gICAgZ19tYWluX2xvb3BfdW5y
ZWYobV9tYWluTG9vcCk7Ci0KLSAgICAvLyBnX3Rlc3RfZGJ1c19kb3duIHdhaXRzIHVudGlsIHRo
ZSBjb25uZWN0aW9uIGlzIGZyZWVkLCBzbyByZWxlYXNlIG91ciByZWZzIGV4cGxpY2l0bHkgYmVm
b3JlIGNhbGxpbmcgaXQuCi0gICAgbV9jb25uZWN0aW9uID0gMDsKLSAgICBtX3Byb3h5ID0gMDsK
LSAgICBnX3Rlc3RfZGJ1c19kb3duKG1fYnVzLmdldCgpKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNz
VGVzdFJ1bm5lcjo6cHJveHlDcmVhdGVkQ2FsbGJhY2soR09iamVjdCosIEdBc3luY1Jlc3VsdCog
cmVzdWx0LCBXZWJQcm9jZXNzVGVzdFJ1bm5lciogdGVzdFJ1bm5lcikKLXsKLSAgICB0ZXN0UnVu
bmVyLT5tX3Byb3h5ID0gYWRvcHRHUmVmKGdfZGJ1c19wcm94eV9uZXdfZmluaXNoKHJlc3VsdCwg
MCkpOwotICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdFJ1bm5lci0+bV9tYWluTG9vcCk7Ci19Ci0K
LUdEQnVzUHJveHkqIFdlYlByb2Nlc3NUZXN0UnVubmVyOjpwcm94eSgpCi17Ci0gICAgaWYgKG1f
cHJveHkpCi0gICAgICAgIHJldHVybiBtX3Byb3h5LmdldCgpOwotCi0gICAgZ19kYnVzX3Byb3h5
X25ldyhtX2Nvbm5lY3Rpb24uZ2V0KCksIEdfREJVU19QUk9YWV9GTEFHU19ET19OT1RfQVVUT19T
VEFSVCwgMCwKLSAgICAgICAgIm9yZy53ZWJraXQuZ3RrLldlYlByb2Nlc3NUZXN0IiwgIi9vcmcv
d2Via2l0L2d0ay9XZWJQcm9jZXNzVGVzdCIsICJvcmcud2Via2l0Lmd0ay5XZWJQcm9jZXNzVGVz
dCIsCi0gICAgICAgIDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4oV2Vi
UHJvY2Vzc1Rlc3RSdW5uZXI6OnByb3h5Q3JlYXRlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19t
YWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotICAgIGdfYXNzZXJ0KG1fcHJveHkuZ2V0KCkpOwot
Ci0gICAgcmV0dXJuIG1fcHJveHkuZ2V0KCk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Rlc3RSdW5u
ZXI6Om9uTmFtZUFwcGVhcmVkKEdEQnVzQ29ubmVjdGlvbiosIGNvbnN0IGNoYXIqLCBjb25zdCBj
aGFyKiwgZ3BvaW50ZXIgdXNlckRhdGEpCi17Ci0gICAgV2ViUHJvY2Vzc1Rlc3RSdW5uZXIqIHRl
c3RSdW5uZXIgPSBzdGF0aWNfY2FzdDxXZWJQcm9jZXNzVGVzdFJ1bm5lcio+KHVzZXJEYXRhKTsK
LSAgICBnX21haW5fbG9vcF9xdWl0KHRlc3RSdW5uZXItPm1fbWFpbkxvb3ApOwotfQotCi12b2lk
IFdlYlByb2Nlc3NUZXN0UnVubmVyOjpvbk5hbWVWYW5pc2hlZChHREJ1c0Nvbm5lY3Rpb24qLCBj
b25zdCBjaGFyKiBuYW1lLCBncG9pbnRlciB1c2VyRGF0YSkKLXsKLSAgICBfZXhpdCgxKTsKLX0K
LQotdm9pZCBXZWJQcm9jZXNzVGVzdFJ1bm5lcjo6dGVzdEZpbmlzaGVkQ2FsbGJhY2soR0RCdXNQ
cm94eSogcHJveHksIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBXZWJQcm9jZXNzVGVzdFJ1bm5lciog
dGVzdFJ1bm5lcikKLXsKLSAgICBHUmVmUHRyPEdWYXJpYW50PiByZXR1cm5WYWx1ZSA9IGFkb3B0
R1JlZihnX2RidXNfcHJveHlfY2FsbF9maW5pc2gocHJveHksIHJlc3VsdCwgMCkpOwotICAgIGdf
YXNzZXJ0KHJldHVyblZhbHVlLmdldCgpKTsKLSAgICBnYm9vbGVhbiB0ZXN0UmVzdWx0OwotICAg
IGdfdmFyaWFudF9nZXQocmV0dXJuVmFsdWUuZ2V0KCksICIoYikiLCAmdGVzdFJlc3VsdCk7Ci0g
ICAgdGVzdFJ1bm5lci0+ZmluaXNoVGVzdCh0ZXN0UmVzdWx0KTsKLX0KLQotYm9vbCBXZWJQcm9j
ZXNzVGVzdFJ1bm5lcjo6cnVuVGVzdChjb25zdCBjaGFyKiBzdWl0ZU5hbWUsIGNvbnN0IGNoYXIq
IHRlc3ROYW1lLCBHVmFyaWFudCogYXJncykKLXsKLSAgICBnX2Fzc2VydChnX3ZhcmlhbnRfaXNf
b2ZfdHlwZShhcmdzLCBHX1ZBUklBTlRfVFlQRV9WQVJESUNUKSk7Ci0KLSAgICB1bnNpZ25lZCB3
YXRjaGVySUQgPSBnX2J1c193YXRjaF9uYW1lX29uX2Nvbm5lY3Rpb24obV9jb25uZWN0aW9uLmdl
dCgpLCAib3JnLndlYmtpdC5ndGsuV2ViUHJvY2Vzc1Rlc3QiLCBHX0JVU19OQU1FX1dBVENIRVJf
RkxBR1NfTk9ORSwKLSAgICAgICAgV2ViUHJvY2Vzc1Rlc3RSdW5uZXI6Om9uTmFtZUFwcGVhcmVk
LCBXZWJQcm9jZXNzVGVzdFJ1bm5lcjo6b25OYW1lVmFuaXNoZWQsIHRoaXMsIDApOwotICAgIGdf
bWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLQotICAgIG1fdGVzdFJlc3VsdCA9IGZhbHNlOwot
ICAgIEdPd25QdHI8Y2hhcj4gdGVzdFBhdGgoZ19zdHJkdXBfcHJpbnRmKCIlcy8lcyIsIHN1aXRl
TmFtZSwgdGVzdE5hbWUpKTsKLSAgICBnX2RidXNfcHJveHlfY2FsbCgKLSAgICAgICAgcHJveHko
KSwKLSAgICAgICAgIlJ1blRlc3QiLAotICAgICAgICBnX3ZhcmlhbnRfbmV3KCIoc0Bhe3N2fSki
LCB0ZXN0UGF0aC5nZXQoKSwgYXJncyksCi0gICAgICAgIEdfREJVU19DQUxMX0ZMQUdTX05PTkUs
Ci0gICAgICAgIC0xLCAwLAotICAgICAgICByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2Fs
bGJhY2s+KFdlYlByb2Nlc3NUZXN0UnVubmVyOjp0ZXN0RmluaXNoZWRDYWxsYmFjayksCi0gICAg
ICAgIHRoaXMpOwotICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAgICBnX2J1c191
bndhdGNoX25hbWUod2F0Y2hlcklEKTsKLQotICAgIHJldHVybiBtX3Rlc3RSZXN1bHQ7Ci19Ci0K
LXZvaWQgV2ViUHJvY2Vzc1Rlc3RSdW5uZXI6OmZpbmlzaFRlc3QoYm9vbCByZXN1bHQpCi17Ci0g
ICAgbV90ZXN0UmVzdWx0ID0gcmVzdWx0OwotICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9v
cCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0
cy9XZWJQcm9jZXNzVGVzdFJ1bm5lci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvV2ViUHJvY2Vzc1Rlc3RSdW5uZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYzQwZmE5Ni4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9XZWJQcm9jZXNzVGVzdFJ1bm5lci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTAg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBJZ2FsaWEgUy5MLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFdl
YlByb2Nlc3NUZXN0UnVubmVyX2gKLSNkZWZpbmUgV2ViUHJvY2Vzc1Rlc3RSdW5uZXJfaAotCi0j
aW5jbHVkZSA8Z2lvL2dpby5oPgotI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgotI2luY2x1
ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLQotY2xhc3MgV2ViUHJvY2Vzc1Rlc3RSdW5uZXIg
ewotcHVibGljOgotICAgIFdlYlByb2Nlc3NUZXN0UnVubmVyKCk7Ci0gICAgfldlYlByb2Nlc3NU
ZXN0UnVubmVyKCk7Ci0KLSAgICBib29sIHJ1blRlc3QoY29uc3QgY2hhciogc3VpdGVOYW1lLCBj
b25zdCBjaGFyKiB0ZXN0TmFtZSwgR1ZhcmlhbnQqIGFyZ3MpOwotCi1wcml2YXRlOgotICAgIHN0
YXRpYyB2b2lkIHByb3h5Q3JlYXRlZENhbGxiYWNrKEdPYmplY3QqLCBHQXN5bmNSZXN1bHQqLCBX
ZWJQcm9jZXNzVGVzdFJ1bm5lciopOwotICAgIHN0YXRpYyB2b2lkIG9uTmFtZUFwcGVhcmVkKEdE
QnVzQ29ubmVjdGlvbiosIGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgZ3BvaW50ZXIpOwotICAg
IHN0YXRpYyB2b2lkIG9uTmFtZVZhbmlzaGVkKEdEQnVzQ29ubmVjdGlvbiosIGNvbnN0IGNoYXIq
LCBncG9pbnRlcik7Ci0gICAgc3RhdGljIHZvaWQgdGVzdEZpbmlzaGVkQ2FsbGJhY2soR0RCdXNQ
cm94eSosIEdBc3luY1Jlc3VsdCosIFdlYlByb2Nlc3NUZXN0UnVubmVyKik7Ci0KLSAgICBHREJ1
c1Byb3h5KiBwcm94eSgpOwotICAgIHZvaWQgZmluaXNoVGVzdChib29sIHJlc3VsdCk7Ci0KLSAg
ICBHTWFpbkxvb3AqIG1fbWFpbkxvb3A7Ci0gICAgR1JlZlB0cjxHVGVzdERCdXM+IG1fYnVzOwot
ICAgIEdSZWZQdHI8R0RCdXNDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247Ci0gICAgR1JlZlB0cjxH
REJ1c1Byb3h5PiBtX3Byb3h5OwotICAgIGJvb2wgbV90ZXN0UmVzdWx0OwotfTsKLQotI2VuZGlm
IC8vIFdlYlByb2Nlc3NUZXN0UnVubmVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZTZjODQzNC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NDQg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgotICogUG9ydGlv
bnMgQ29weXJpZ2h0IChjKSAyMDExIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIK
LQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9HT3duUHRyR3RrLmg+Ci0KLVdlYlZpZXdUZXN0OjpXZWJWaWV3VGVzdCgpCi0gICAgOiBt
X3dlYlZpZXcoV0VCS0lUX1dFQl9WSUVXKGdfb2JqZWN0X3JlZl9zaW5rKHdlYmtpdF93ZWJfdmll
d19uZXcoKSkpKQotICAgICwgbV9tYWluTG9vcChnX21haW5fbG9vcF9uZXcoMCwgVFJVRSkpCi0g
ICAgLCBtX3BhcmVudFdpbmRvdygwKQotICAgICwgbV9qYXZhc2NyaXB0UmVzdWx0KDApCi0gICAg
LCBtX3Jlc291cmNlRGF0YVNpemUoMCkKLSAgICAsIG1fc3VyZmFjZSgwKQotewotICAgIGFzc2Vy
dE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QobV93ZWJWaWV3KSk7Ci19
Ci0KLVdlYlZpZXdUZXN0Ojp+V2ViVmlld1Rlc3QoKQotewotICAgIGlmIChtX3BhcmVudFdpbmRv
dykKLSAgICAgICAgZ3RrX3dpZGdldF9kZXN0cm95KG1fcGFyZW50V2luZG93KTsKLSAgICBpZiAo
bV9qYXZhc2NyaXB0UmVzdWx0KQotICAgICAgICB3ZWJraXRfamF2YXNjcmlwdF9yZXN1bHRfdW5y
ZWYobV9qYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBpZiAobV9zdXJmYWNlKQotICAgICAgICBjYWly
b19zdXJmYWNlX2Rlc3Ryb3kobV9zdXJmYWNlKTsKLSAgICBnX29iamVjdF91bnJlZihtX3dlYlZp
ZXcpOwotICAgIGdfbWFpbl9sb29wX3VucmVmKG1fbWFpbkxvb3ApOwotfQotCi12b2lkIFdlYlZp
ZXdUZXN0Ojpsb2FkVVJJKGNvbnN0IGNoYXIqIHVyaSkKLXsKLSAgICBtX2FjdGl2ZVVSSSA9IHVy
aTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkobV93ZWJWaWV3LCB1cmkpOwotfQotCi12
b2lkIFdlYlZpZXdUZXN0Ojpsb2FkSHRtbChjb25zdCBjaGFyKiBodG1sLCBjb25zdCBjaGFyKiBi
YXNlVVJJKQotewotICAgIGlmICghYmFzZVVSSSkKLSAgICAgICAgbV9hY3RpdmVVUkkgPSAiYWJv
dXQ6YmxhbmsiOwotICAgIGVsc2UKLSAgICAgICAgbV9hY3RpdmVVUkkgPSBiYXNlVVJJOwotICAg
IHdlYmtpdF93ZWJfdmlld19sb2FkX2h0bWwobV93ZWJWaWV3LCBodG1sLCBiYXNlVVJJKTsKLX0K
LQotdm9pZCBXZWJWaWV3VGVzdDo6bG9hZFBsYWluVGV4dChjb25zdCBjaGFyKiBwbGFpblRleHQp
Ci17Ci0gICAgbV9hY3RpdmVVUkkgPSAiYWJvdXQ6YmxhbmsiOwotICAgIHdlYmtpdF93ZWJfdmll
d19sb2FkX3BsYWluX3RleHQobV93ZWJWaWV3LCBwbGFpblRleHQpOwotfQotCi12b2lkIFdlYlZp
ZXdUZXN0Ojpsb2FkUmVxdWVzdChXZWJLaXRVUklSZXF1ZXN0KiByZXF1ZXN0KQotewotICAgIG1f
YWN0aXZlVVJJID0gd2Via2l0X3VyaV9yZXF1ZXN0X2dldF91cmkocmVxdWVzdCk7Ci0gICAgd2Vi
a2l0X3dlYl92aWV3X2xvYWRfcmVxdWVzdChtX3dlYlZpZXcsIHJlcXVlc3QpOwotfQotCi12b2lk
IFdlYlZpZXdUZXN0Ojpsb2FkQWx0ZXJuYXRlSFRNTChjb25zdCBjaGFyKiBodG1sLCBjb25zdCBj
aGFyKiBjb250ZW50VVJJLCBjb25zdCBjaGFyKiBiYXNlVVJJKQotewotICAgIG1fYWN0aXZlVVJJ
ID0gY29udGVudFVSSTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9hbHRlcm5hdGVfaHRtbCht
X3dlYlZpZXcsIGh0bWwsIGNvbnRlbnRVUkksIGJhc2VVUkkpOwotfQotCi12b2lkIFdlYlZpZXdU
ZXN0Ojpnb0JhY2soKQotewotICAgIGlmICh3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2sobV93
ZWJWaWV3KSkgewotICAgICAgICBXZWJLaXRCYWNrRm9yd2FyZExpc3QqIGxpc3QgPSB3ZWJraXRf
d2ViX3ZpZXdfZ2V0X2JhY2tfZm9yd2FyZF9saXN0KG1fd2ViVmlldyk7Ci0gICAgICAgIFdlYktp
dEJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW0gPSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0
X250aF9pdGVtKGxpc3QsIC0xKTsKLSAgICAgICAgbV9hY3RpdmVVUkkgPSB3ZWJraXRfYmFja19m
b3J3YXJkX2xpc3RfaXRlbV9nZXRfb3JpZ2luYWxfdXJpKGl0ZW0pOwotICAgIH0KLQotICAgIC8v
IENhbGwgZ29fYmFjayBldmVuIHdoZW4gY2FuX2dvX2JhY2sgcmV0dXJucyBGQUxTRSB0byBjaGVj
ayBub3RoaW5nIGhhcHBlbnMuCi0gICAgd2Via2l0X3dlYl92aWV3X2dvX2JhY2sobV93ZWJWaWV3
KTsKLX0KLQotdm9pZCBXZWJWaWV3VGVzdDo6Z29Gb3J3YXJkKCkKLXsKLSAgICBpZiAod2Via2l0
X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKG1fd2ViVmlldykpIHsKLSAgICAgICAgV2ViS2l0QmFj
a0ZvcndhcmRMaXN0KiBsaXN0ID0gd2Via2l0X3dlYl92aWV3X2dldF9iYWNrX2ZvcndhcmRfbGlz
dChtX3dlYlZpZXcpOwotICAgICAgICBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiBpdGVtID0g
d2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9udGhfaXRlbShsaXN0LCAxKTsKLSAgICAgICAg
bV9hY3RpdmVVUkkgPSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9nZXRfb3JpZ2luYWxf
dXJpKGl0ZW0pOwotICAgIH0KLQotICAgIC8vIENhbGwgZ29fZm9yd2FyZCBldmVuIHdoZW4gY2Fu
X2dvX2ZvcndhcmQgcmV0dXJucyBGQUxTRSB0byBjaGVjayBub3RoaW5nIGhhcHBlbnMuCi0gICAg
d2Via2l0X3dlYl92aWV3X2dvX2ZvcndhcmQobV93ZWJWaWV3KTsKLX0KLQotdm9pZCBXZWJWaWV3
VGVzdDo6Z29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW0oV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSog
aXRlbSkKLXsKLSAgICBtX2FjdGl2ZVVSSSA9IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVt
X2dldF9vcmlnaW5hbF91cmkoaXRlbSk7Ci0gICAgd2Via2l0X3dlYl92aWV3X2dvX3RvX2JhY2tf
Zm9yd2FyZF9saXN0X2l0ZW0obV93ZWJWaWV3LCBpdGVtKTsKLX0KLQotdm9pZCBXZWJWaWV3VGVz
dDo6cXVpdE1haW5Mb29wKCkKLXsKLSAgICBnX21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3ApOwot
fQotCi12b2lkIFdlYlZpZXdUZXN0OjpxdWl0TWFpbkxvb3BBZnRlclByb2Nlc3NpbmdQZW5kaW5n
RXZlbnRzKCkKLXsKLSAgICB3aGlsZSAoZ3RrX2V2ZW50c19wZW5kaW5nKCkpCi0gICAgICAgIGd0
a19tYWluX2l0ZXJhdGlvbigpOwotICAgIHF1aXRNYWluTG9vcCgpOwotfQotCi1zdGF0aWMgZ2Jv
b2xlYW4gcXVpdE1haW5Mb29wSWRsZUNhbGxiYWNrKFdlYlZpZXdUZXN0KiB0ZXN0KQotewotICAg
IHRlc3QtPnF1aXRNYWluTG9vcCgpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQotdm9pZCBXZWJW
aWV3VGVzdDo6d2FpdChkb3VibGUgc2Vjb25kcykKLXsKLSAgICBnX3RpbWVvdXRfYWRkX3NlY29u
ZHMoc2Vjb25kcywgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4ocXVpdE1haW5Mb29wSWRs
ZUNhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotfQot
Ci1zdGF0aWMgdm9pZCBsb2FkQ2hhbmdlZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRM
b2FkRXZlbnQgbG9hZEV2ZW50LCBXZWJWaWV3VGVzdCogdGVzdCkKLXsKLSAgICBpZiAobG9hZEV2
ZW50ICE9IFdFQktJVF9MT0FEX0ZJTklTSEVEKQotICAgICAgICByZXR1cm47Ci0gICAgZ19zaWdu
YWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKHdlYlZpZXcsIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KGxvYWRDaGFuZ2VkKSwgdGVzdCk7Ci0gICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5t
X21haW5Mb29wKTsKLX0KLQotdm9pZCBXZWJWaWV3VGVzdDo6d2FpdFVudGlsTG9hZEZpbmlzaGVk
KCkKLXsKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImxvYWQtY2hhbmdlZCIsIEdf
Q0FMTEJBQ0sobG9hZENoYW5nZWQpLCB0aGlzKTsKLSAgICBnX21haW5fbG9vcF9ydW4obV9tYWlu
TG9vcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRpdGxlQ2hhbmdlZChXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3LCBHUGFyYW1TcGVjKiwgV2ViVmlld1Rlc3QqIHRlc3QpCi17Ci0gICAgaWYgKCF0ZXN0LT5t
X2V4cGVjdGVkVGl0bGUuaXNOdWxsKCkgJiYgdGVzdC0+bV9leHBlY3RlZFRpdGxlICE9IHdlYmtp
dF93ZWJfdmlld19nZXRfdGl0bGUod2ViVmlldykpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdf
c2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyh3ZWJWaWV3LCByZWludGVycHJldF9j
YXN0PHZvaWQqPih0aXRsZUNoYW5nZWQpLCB0ZXN0KTsKLSAgICBnX21haW5fbG9vcF9xdWl0KHRl
c3QtPm1fbWFpbkxvb3ApOwotfQotCi12b2lkIFdlYlZpZXdUZXN0Ojp3YWl0VW50aWxUaXRsZUNo
YW5nZWRUbyhjb25zdCBjaGFyKiBleHBlY3RlZFRpdGxlKQotewotICAgIG1fZXhwZWN0ZWRUaXRs
ZSA9IGV4cGVjdGVkVGl0bGU7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJub3Rp
Znk6OnRpdGxlIiwgR19DQUxMQkFDSyh0aXRsZUNoYW5nZWQpLCB0aGlzKTsKLSAgICBnX21haW5f
bG9vcF9ydW4obV9tYWluTG9vcCk7Ci0gICAgbV9leHBlY3RlZFRpdGxlID0gQ1N0cmluZygpOwot
fQotCi12b2lkIFdlYlZpZXdUZXN0Ojp3YWl0VW50aWxUaXRsZUNoYW5nZWQoKQotewotICAgIHdh
aXRVbnRpbFRpdGxlQ2hhbmdlZFRvKDApOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gcGFyZW50V2lu
ZG93TWFwcGVkKEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudCosIFdlYlZpZXdUZXN0KiB0ZXN0
KQotewotICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyh3aWRnZXQsIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHBhcmVudFdpbmRvd01hcHBlZCksIHRlc3QpOwotICAgIGdf
bWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7Ci0KLSAgICByZXR1cm4gRkFMU0U7Ci19
Ci0KLXZvaWQgV2ViVmlld1Rlc3Q6OnNob3dJbldpbmRvdyhHdGtXaW5kb3dUeXBlIHdpbmRvd1R5
cGUpCi17Ci0gICAgZ19hc3NlcnQoIW1fcGFyZW50V2luZG93KTsKLSAgICBtX3BhcmVudFdpbmRv
dyA9IGd0a193aW5kb3dfbmV3KHdpbmRvd1R5cGUpOwotICAgIGd0a19jb250YWluZXJfYWRkKEdU
S19DT05UQUlORVIobV9wYXJlbnRXaW5kb3cpLCBHVEtfV0lER0VUKG1fd2ViVmlldykpOwotICAg
IGd0a193aWRnZXRfc2hvdyhHVEtfV0lER0VUKG1fd2ViVmlldykpOwotICAgIGd0a193aWRnZXRf
c2hvdyhtX3BhcmVudFdpbmRvdyk7Ci19Ci0KLXZvaWQgV2ViVmlld1Rlc3Q6OnNob3dJbldpbmRv
d0FuZFdhaXRVbnRpbE1hcHBlZChHdGtXaW5kb3dUeXBlIHdpbmRvd1R5cGUpCi17Ci0gICAgZ19h
c3NlcnQoIW1fcGFyZW50V2luZG93KTsKLSAgICBtX3BhcmVudFdpbmRvdyA9IGd0a193aW5kb3df
bmV3KHdpbmRvd1R5cGUpOwotICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIobV9w
YXJlbnRXaW5kb3cpLCBHVEtfV0lER0VUKG1fd2ViVmlldykpOwotICAgIGd0a193aWRnZXRfc2hv
dyhHVEtfV0lER0VUKG1fd2ViVmlldykpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdChtX3BhcmVu
dFdpbmRvdywgIm1hcC1ldmVudCIsIEdfQ0FMTEJBQ0socGFyZW50V2luZG93TWFwcGVkKSwgdGhp
cyk7Ci0gICAgZ3RrX3dpZGdldF9zaG93KG1fcGFyZW50V2luZG93KTsKLSAgICBnX21haW5fbG9v
cF9ydW4obV9tYWluTG9vcCk7Ci19Ci0KLXZvaWQgV2ViVmlld1Rlc3Q6OnJlc2l6ZVZpZXcoaW50
IHdpZHRoLCBpbnQgaGVpZ2h0KQotewotICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbjsKLSAg
ICBndGtfd2lkZ2V0X2dldF9hbGxvY2F0aW9uKEdUS19XSURHRVQobV93ZWJWaWV3KSwgJmFsbG9j
YXRpb24pOwotICAgIGlmICh3aWR0aCAhPSAtMSkKLSAgICAgICAgYWxsb2NhdGlvbi53aWR0aCA9
IHdpZHRoOwotICAgIGlmIChoZWlnaHQgIT0gLTEpCi0gICAgICAgIGFsbG9jYXRpb24uaGVpZ2h0
ID0gaGVpZ2h0OwotICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKG1fd2Vi
VmlldyksICZhbGxvY2F0aW9uKTsKLX0KLQotdm9pZCBXZWJWaWV3VGVzdDo6c2VsZWN0QWxsKCkK
LXsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfZXhlY3V0ZV9lZGl0aW5nX2NvbW1hbmQobV93ZWJWaWV3
LCAiU2VsZWN0QWxsIik7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlc291cmNlR2V0RGF0YUNhbGxiYWNr
KEdPYmplY3QqIG9iamVjdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIGdwb2ludGVyIHVzZXJEYXRh
KQotewotICAgIHNpemVfdCBkYXRhU2l6ZTsKLSAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7Ci0g
ICAgdW5zaWduZWQgY2hhciogZGF0YSA9IHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X2RhdGFfZmlu
aXNoKFdFQktJVF9XRUJfUkVTT1VSQ0Uob2JqZWN0KSwgcmVzdWx0LCAmZGF0YVNpemUsICZlcnJv
ci5vdXRQdHIoKSk7Ci0gICAgZ19hc3NlcnQoZGF0YSk7Ci0KLSAgICBXZWJWaWV3VGVzdCogdGVz
dCA9IHN0YXRpY19jYXN0PFdlYlZpZXdUZXN0Kj4odXNlckRhdGEpOwotICAgIHRlc3QtPm1fcmVz
b3VyY2VEYXRhLnNldChyZWludGVycHJldF9jYXN0PGNoYXIqPihkYXRhKSk7Ci0gICAgdGVzdC0+
bV9yZXNvdXJjZURhdGFTaXplID0gZGF0YVNpemU7Ci0gICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0
LT5tX21haW5Mb29wKTsKLX0KLQotY29uc3QgY2hhciogV2ViVmlld1Rlc3Q6Om1haW5SZXNvdXJj
ZURhdGEoc2l6ZV90JiBtYWluUmVzb3VyY2VEYXRhU2l6ZSkKLXsKLSAgICBtX3Jlc291cmNlRGF0
YVNpemUgPSAwOwotICAgIG1fcmVzb3VyY2VEYXRhLmNsZWFyKCk7Ci0gICAgV2ViS2l0V2ViUmVz
b3VyY2UqIHJlc291cmNlID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX3Jlc291cmNlKG1fd2Vi
Vmlldyk7Ci0gICAgZ19hc3NlcnQocmVzb3VyY2UpOwotCi0gICAgd2Via2l0X3dlYl9yZXNvdXJj
ZV9nZXRfZGF0YShyZXNvdXJjZSwgMCwgcmVzb3VyY2VHZXREYXRhQ2FsbGJhY2ssIHRoaXMpOwot
ICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLQotICAgIG1haW5SZXNvdXJjZURhdGFT
aXplID0gbV9yZXNvdXJjZURhdGFTaXplOwotICAgIHJldHVybiBtX3Jlc291cmNlRGF0YS5nZXQo
KTsKLX0KLQotdm9pZCBXZWJWaWV3VGVzdDo6bW91c2VNb3ZlVG8oaW50IHgsIGludCB5LCB1bnNp
Z25lZCBpbnQgbW91c2VNb2RpZmllcnMpCi17Ci0gICAgZ19hc3NlcnQobV9wYXJlbnRXaW5kb3cp
OwotICAgIEd0a1dpZGdldCogdmlld1dpZGdldCA9IEdUS19XSURHRVQobV93ZWJWaWV3KTsKLSAg
ICBnX2Fzc2VydChndGtfd2lkZ2V0X2dldF9yZWFsaXplZCh2aWV3V2lkZ2V0KSk7Ci0KLSAgICBH
T3duUHRyPEdka0V2ZW50PiBldmVudChnZGtfZXZlbnRfbmV3KEdES19NT1RJT05fTk9USUZZKSk7
Ci0gICAgZXZlbnQtPm1vdGlvbi54ID0geDsKLSAgICBldmVudC0+bW90aW9uLnkgPSB5OwotCi0g
ICAgZXZlbnQtPm1vdGlvbi50aW1lID0gR0RLX0NVUlJFTlRfVElNRTsKLSAgICBldmVudC0+bW90
aW9uLndpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyh2aWV3V2lkZ2V0KTsKLSAgICBnX29i
amVjdF9yZWYoZXZlbnQtPm1vdGlvbi53aW5kb3cpOwotICAgIGV2ZW50LT5tb3Rpb24uZGV2aWNl
ID0gZ2RrX2RldmljZV9tYW5hZ2VyX2dldF9jbGllbnRfcG9pbnRlcihnZGtfZGlzcGxheV9nZXRf
ZGV2aWNlX21hbmFnZXIoZ3RrX3dpZGdldF9nZXRfZGlzcGxheSh2aWV3V2lkZ2V0KSkpOwotICAg
IGV2ZW50LT5tb3Rpb24uc3RhdGUgPSBtb3VzZU1vZGlmaWVyczsKLSAgICBldmVudC0+bW90aW9u
LmF4ZXMgPSAwOwotCi0gICAgaW50IHhSb290LCB5Um9vdDsKLSAgICBnZGtfd2luZG93X2dldF9y
b290X2Nvb3JkcyhndGtfd2lkZ2V0X2dldF93aW5kb3codmlld1dpZGdldCksIHgsIHksICZ4Um9v
dCwgJnlSb290KTsKLSAgICBldmVudC0+bW90aW9uLnhfcm9vdCA9IHhSb290OwotICAgIGV2ZW50
LT5tb3Rpb24ueV9yb290ID0geVJvb3Q7Ci0gICAgZ3RrX21haW5fZG9fZXZlbnQoZXZlbnQuZ2V0
KCkpOwotfQotCi12b2lkIFdlYlZpZXdUZXN0OjpjbGlja01vdXNlQnV0dG9uKGludCB4LCBpbnQg
eSwgdW5zaWduZWQgaW50IGJ1dHRvbiwgdW5zaWduZWQgaW50IG1vdXNlTW9kaWZpZXJzKQotewot
ICAgIGRvTW91c2VCdXR0b25FdmVudChHREtfQlVUVE9OX1BSRVNTLCB4LCB5LCBidXR0b24sIG1v
dXNlTW9kaWZpZXJzKTsKLSAgICBkb01vdXNlQnV0dG9uRXZlbnQoR0RLX0JVVFRPTl9SRUxFQVNF
LCB4LCB5LCBidXR0b24sIG1vdXNlTW9kaWZpZXJzKTsKLX0KLQotdm9pZCBXZWJWaWV3VGVzdDo6
a2V5U3Ryb2tlKHVuc2lnbmVkIGludCBrZXlWYWwsIHVuc2lnbmVkIGludCBrZXlNb2RpZmllcnMp
Ci17Ci0gICAgZ19hc3NlcnQobV9wYXJlbnRXaW5kb3cpOwotICAgIEd0a1dpZGdldCogdmlld1dp
ZGdldCA9IEdUS19XSURHRVQobV93ZWJWaWV3KTsKLSAgICBnX2Fzc2VydChndGtfd2lkZ2V0X2dl
dF9yZWFsaXplZCh2aWV3V2lkZ2V0KSk7Ci0KLSAgICBHT3duUHRyPEdka0V2ZW50PiBldmVudChn
ZGtfZXZlbnRfbmV3KEdES19LRVlfUFJFU1MpKTsKLSAgICBldmVudC0+a2V5LmtleXZhbCA9IGtl
eVZhbDsKLQotICAgIGV2ZW50LT5rZXkudGltZSA9IEdES19DVVJSRU5UX1RJTUU7Ci0gICAgZXZl
bnQtPmtleS53aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3codmlld1dpZGdldCk7Ci0gICAg
Z19vYmplY3RfcmVmKGV2ZW50LT5rZXkud2luZG93KTsKLSAgICBnZGtfZXZlbnRfc2V0X2Rldmlj
ZShldmVudC5nZXQoKSwgZ2RrX2RldmljZV9tYW5hZ2VyX2dldF9jbGllbnRfcG9pbnRlcihnZGtf
ZGlzcGxheV9nZXRfZGV2aWNlX21hbmFnZXIoZ3RrX3dpZGdldF9nZXRfZGlzcGxheSh2aWV3V2lk
Z2V0KSkpKTsKLSAgICBldmVudC0+a2V5LnN0YXRlID0ga2V5TW9kaWZpZXJzOwotCi0gICAgLy8g
V2hlbiBzeW50aGVzaXppbmcgYW4gZXZlbnQsIGFuIGludmFsaWQgaGFyZHdhcmVfa2V5Y29kZSB2
YWx1ZSBjYW4gY2F1c2UgaXQgdG8gYmUgYmFkbHkgcHJvY2Vzc2VkIGJ5IEdUSysuCi0gICAgR093
blB0cjxHZGtLZXltYXBLZXk+IGtleXM7Ci0gICAgaW50IGtleXNDb3VudDsKLSAgICBpZiAoZ2Rr
X2tleW1hcF9nZXRfZW50cmllc19mb3Jfa2V5dmFsKGdka19rZXltYXBfZ2V0X2RlZmF1bHQoKSwg
a2V5VmFsLCAma2V5cy5vdXRQdHIoKSwgJmtleXNDb3VudCkpCi0gICAgICAgIGV2ZW50LT5rZXku
aGFyZHdhcmVfa2V5Y29kZSA9IGtleXMuZ2V0KClbMF0ua2V5Y29kZTsKLQotICAgIGd0a19tYWlu
X2RvX2V2ZW50KGV2ZW50LmdldCgpKTsKLSAgICBldmVudC0+a2V5LnR5cGUgPSBHREtfS0VZX1JF
TEVBU0U7Ci0gICAgZ3RrX21haW5fZG9fZXZlbnQoZXZlbnQuZ2V0KCkpOwotfQotCi12b2lkIFdl
YlZpZXdUZXN0Ojpkb01vdXNlQnV0dG9uRXZlbnQoR2RrRXZlbnRUeXBlIGV2ZW50VHlwZSwgaW50
IHgsIGludCB5LCB1bnNpZ25lZCBpbnQgYnV0dG9uLCB1bnNpZ25lZCBpbnQgbW91c2VNb2RpZmll
cnMpCi17Ci0gICAgZ19hc3NlcnQobV9wYXJlbnRXaW5kb3cpOwotICAgIEd0a1dpZGdldCogdmll
d1dpZGdldCA9IEdUS19XSURHRVQobV93ZWJWaWV3KTsKLSAgICBnX2Fzc2VydChndGtfd2lkZ2V0
X2dldF9yZWFsaXplZCh2aWV3V2lkZ2V0KSk7Ci0KLSAgICBHT3duUHRyPEdka0V2ZW50PiBldmVu
dChnZGtfZXZlbnRfbmV3KGV2ZW50VHlwZSkpOwotICAgIGV2ZW50LT5idXR0b24ud2luZG93ID0g
Z3RrX3dpZGdldF9nZXRfd2luZG93KHZpZXdXaWRnZXQpOwotICAgIGdfb2JqZWN0X3JlZihldmVu
dC0+YnV0dG9uLndpbmRvdyk7Ci0KLSAgICBldmVudC0+YnV0dG9uLnRpbWUgPSBHREtfQ1VSUkVO
VF9USU1FOwotICAgIGV2ZW50LT5idXR0b24ueCA9IHg7Ci0gICAgZXZlbnQtPmJ1dHRvbi55ID0g
eTsKLSAgICBldmVudC0+YnV0dG9uLmF4ZXMgPSAwOwotICAgIGV2ZW50LT5idXR0b24uc3RhdGUg
PSBtb3VzZU1vZGlmaWVyczsKLSAgICBldmVudC0+YnV0dG9uLmJ1dHRvbiA9IGJ1dHRvbjsKLQot
ICAgIGV2ZW50LT5idXR0b24uZGV2aWNlID0gZ2RrX2RldmljZV9tYW5hZ2VyX2dldF9jbGllbnRf
cG9pbnRlcihnZGtfZGlzcGxheV9nZXRfZGV2aWNlX21hbmFnZXIoZ3RrX3dpZGdldF9nZXRfZGlz
cGxheSh2aWV3V2lkZ2V0KSkpOwotCi0gICAgaW50IHhSb290LCB5Um9vdDsKLSAgICBnZGtfd2lu
ZG93X2dldF9yb290X2Nvb3JkcyhndGtfd2lkZ2V0X2dldF93aW5kb3codmlld1dpZGdldCksIHgs
IHksICZ4Um9vdCwgJnlSb290KTsKLSAgICBldmVudC0+YnV0dG9uLnhfcm9vdCA9IHhSb290Owot
ICAgIGV2ZW50LT5idXR0b24ueV9yb290ID0geVJvb3Q7Ci0gICAgZ3RrX21haW5fZG9fZXZlbnQo
ZXZlbnQuZ2V0KCkpOwotfQotCi1zdGF0aWMgdm9pZCBydW5KYXZhU2NyaXB0UmVhZHlDYWxsYmFj
ayhHT2JqZWN0KiwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIFdlYlZpZXdUZXN0KiB0ZXN0KQotewot
ICAgIHRlc3QtPm1famF2YXNjcmlwdFJlc3VsdCA9IHdlYmtpdF93ZWJfdmlld19ydW5famF2YXNj
cmlwdF9maW5pc2godGVzdC0+bV93ZWJWaWV3LCByZXN1bHQsIHRlc3QtPm1famF2YXNjcmlwdEVy
cm9yKTsKLSAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOwotfQotCi1zdGF0
aWMgdm9pZCBydW5KYXZhU2NyaXB0RnJvbUdSZXNvdXJjZVJlYWR5Q2FsbGJhY2soR09iamVjdCos
IEdBc3luY1Jlc3VsdCogcmVzdWx0LCBXZWJWaWV3VGVzdCogdGVzdCkKLXsKLSAgICB0ZXN0LT5t
X2phdmFzY3JpcHRSZXN1bHQgPSB3ZWJraXRfd2ViX3ZpZXdfcnVuX2phdmFzY3JpcHRfZnJvbV9n
cmVzb3VyY2VfZmluaXNoKHRlc3QtPm1fd2ViVmlldywgcmVzdWx0LCB0ZXN0LT5tX2phdmFzY3Jp
cHRFcnJvcik7Ci0gICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKLX0KLQot
V2ViS2l0SmF2YXNjcmlwdFJlc3VsdCogV2ViVmlld1Rlc3Q6OnJ1bkphdmFTY3JpcHRBbmRXYWl0
VW50aWxGaW5pc2hlZChjb25zdCBjaGFyKiBqYXZhc2NyaXB0LCBHRXJyb3IqKiBlcnJvcikKLXsK
LSAgICBpZiAobV9qYXZhc2NyaXB0UmVzdWx0KQotICAgICAgICB3ZWJraXRfamF2YXNjcmlwdF9y
ZXN1bHRfdW5yZWYobV9qYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBtX2phdmFzY3JpcHRSZXN1bHQg
PSAwOwotICAgIG1famF2YXNjcmlwdEVycm9yID0gZXJyb3I7Ci0gICAgd2Via2l0X3dlYl92aWV3
X3J1bl9qYXZhc2NyaXB0KG1fd2ViVmlldywgamF2YXNjcmlwdCwgMCwgcmVpbnRlcnByZXRfY2Fz
dDxHQXN5bmNSZWFkeUNhbGxiYWNrPihydW5KYXZhU2NyaXB0UmVhZHlDYWxsYmFjayksIHRoaXMp
OwotICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLQotICAgIHJldHVybiBtX2phdmFz
Y3JpcHRSZXN1bHQ7Ci19Ci0KLVdlYktpdEphdmFzY3JpcHRSZXN1bHQqIFdlYlZpZXdUZXN0Ojpy
dW5KYXZhU2NyaXB0RnJvbUdSZXNvdXJjZUFuZFdhaXRVbnRpbEZpbmlzaGVkKGNvbnN0IGNoYXIq
IHJlc291cmNlLCBHRXJyb3IqKiBlcnJvcikKLXsKLSAgICBpZiAobV9qYXZhc2NyaXB0UmVzdWx0
KQotICAgICAgICB3ZWJraXRfamF2YXNjcmlwdF9yZXN1bHRfdW5yZWYobV9qYXZhc2NyaXB0UmVz
dWx0KTsKLSAgICBtX2phdmFzY3JpcHRSZXN1bHQgPSAwOwotICAgIG1famF2YXNjcmlwdEVycm9y
ID0gZXJyb3I7Ci0gICAgd2Via2l0X3dlYl92aWV3X3J1bl9qYXZhc2NyaXB0X2Zyb21fZ3Jlc291
cmNlKG1fd2ViVmlldywgcmVzb3VyY2UsIDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlD
YWxsYmFjaz4ocnVuSmF2YVNjcmlwdEZyb21HUmVzb3VyY2VSZWFkeUNhbGxiYWNrKSwgdGhpcyk7
Ci0gICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotCi0gICAgcmV0dXJuIG1famF2YXNj
cmlwdFJlc3VsdDsKLX0KLQotc3RhdGljIGNoYXIqIGpzVmFsdWVUb0NTdHJpbmcoSlNHbG9iYWxD
b250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCi17Ci0gICAgZ19hc3NlcnQodmFs
dWUpOwotICAgIGdfYXNzZXJ0KEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCB2YWx1ZSkpOwotCi0g
ICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHN0cmluZ1ZhbHVlKEFkb3B0LCBKU1ZhbHVlVG9T
dHJpbmdDb3B5KGNvbnRleHQsIHZhbHVlLCAwKSk7Ci0gICAgZ19hc3NlcnQoc3RyaW5nVmFsdWUp
OwotCi0gICAgc2l6ZV90IGNTdHJpbmdMZW5ndGggPSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0
cmluZ1NpemUoc3RyaW5nVmFsdWUuZ2V0KCkpOwotICAgIGNoYXIqIGNTdHJpbmcgPSBzdGF0aWNf
Y2FzdDxjaGFyKj4oZ19tYWxsb2MoY1N0cmluZ0xlbmd0aCkpOwotICAgIEpTU3RyaW5nR2V0VVRG
OENTdHJpbmcoc3RyaW5nVmFsdWUuZ2V0KCksIGNTdHJpbmcsIGNTdHJpbmdMZW5ndGgpOwotICAg
IHJldHVybiBjU3RyaW5nOwotfQotCi1jaGFyKiBXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3Vs
dFRvQ1N0cmluZyhXZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBqYXZhc2NyaXB0UmVzdWx0KQotewot
ICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0ID0gd2Via2l0X2phdmFzY3JpcHRfcmVzdWx0
X2dldF9nbG9iYWxfY29udGV4dChqYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBnX2Fzc2VydChjb250
ZXh0KTsKLSAgICByZXR1cm4ganNWYWx1ZVRvQ1N0cmluZyhjb250ZXh0LCB3ZWJraXRfamF2YXNj
cmlwdF9yZXN1bHRfZ2V0X3ZhbHVlKGphdmFzY3JpcHRSZXN1bHQpKTsKLX0KLQotZG91YmxlIFdl
YlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9OdW1iZXIoV2ViS2l0SmF2YXNjcmlwdFJlc3Vs
dCogamF2YXNjcmlwdFJlc3VsdCkKLXsKLSAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCA9
IHdlYmtpdF9qYXZhc2NyaXB0X3Jlc3VsdF9nZXRfZ2xvYmFsX2NvbnRleHQoamF2YXNjcmlwdFJl
c3VsdCk7Ci0gICAgZ19hc3NlcnQoY29udGV4dCk7Ci0gICAgSlNWYWx1ZVJlZiB2YWx1ZSA9IHdl
YmtpdF9qYXZhc2NyaXB0X3Jlc3VsdF9nZXRfdmFsdWUoamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAg
Z19hc3NlcnQodmFsdWUpOwotICAgIGdfYXNzZXJ0KEpTVmFsdWVJc051bWJlcihjb250ZXh0LCB2
YWx1ZSkpOwotCi0gICAgcmV0dXJuIEpTVmFsdWVUb051bWJlcihjb250ZXh0LCB2YWx1ZSwgMCk7
Ci19Ci0KLWJvb2wgV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0Jvb2xlYW4oV2ViS2l0
SmF2YXNjcmlwdFJlc3VsdCogamF2YXNjcmlwdFJlc3VsdCkKLXsKLSAgICBKU0dsb2JhbENvbnRl
eHRSZWYgY29udGV4dCA9IHdlYmtpdF9qYXZhc2NyaXB0X3Jlc3VsdF9nZXRfZ2xvYmFsX2NvbnRl
eHQoamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAgZ19hc3NlcnQoY29udGV4dCk7Ci0gICAgSlNWYWx1
ZVJlZiB2YWx1ZSA9IHdlYmtpdF9qYXZhc2NyaXB0X3Jlc3VsdF9nZXRfdmFsdWUoamF2YXNjcmlw
dFJlc3VsdCk7Ci0gICAgZ19hc3NlcnQodmFsdWUpOwotICAgIGdfYXNzZXJ0KEpTVmFsdWVJc0Jv
b2xlYW4oY29udGV4dCwgdmFsdWUpKTsKLQotICAgIHJldHVybiBKU1ZhbHVlVG9Cb29sZWFuKGNv
bnRleHQsIHZhbHVlKTsKLX0KLQotYm9vbCBXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdElz
TnVsbChXZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBqYXZhc2NyaXB0UmVzdWx0KQotewotICAgIEpT
R2xvYmFsQ29udGV4dFJlZiBjb250ZXh0ID0gd2Via2l0X2phdmFzY3JpcHRfcmVzdWx0X2dldF9n
bG9iYWxfY29udGV4dChqYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBnX2Fzc2VydChjb250ZXh0KTsK
LSAgICBKU1ZhbHVlUmVmIHZhbHVlID0gd2Via2l0X2phdmFzY3JpcHRfcmVzdWx0X2dldF92YWx1
ZShqYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBnX2Fzc2VydCh2YWx1ZSk7Ci0KLSAgICByZXR1cm4g
SlNWYWx1ZUlzTnVsbChjb250ZXh0LCB2YWx1ZSk7Ci19Ci0KLWJvb2wgV2ViVmlld1Rlc3Q6Omph
dmFzY3JpcHRSZXN1bHRJc1VuZGVmaW5lZChXZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBqYXZhc2Ny
aXB0UmVzdWx0KQotewotICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0ID0gd2Via2l0X2ph
dmFzY3JpcHRfcmVzdWx0X2dldF9nbG9iYWxfY29udGV4dChqYXZhc2NyaXB0UmVzdWx0KTsKLSAg
ICBnX2Fzc2VydChjb250ZXh0KTsKLSAgICBKU1ZhbHVlUmVmIHZhbHVlID0gd2Via2l0X2phdmFz
Y3JpcHRfcmVzdWx0X2dldF92YWx1ZShqYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBnX2Fzc2VydCh2
YWx1ZSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZUlzVW5kZWZpbmVkKGNvbnRleHQsIHZhbHVlKTsK
LX0KLQotc3RhdGljIHZvaWQgb25TbmFwc2hvdFJlYWR5KFdlYktpdFdlYlZpZXcqIHdlYl92aWV3
LCBHQXN5bmNSZXN1bHQqIHJlcywgV2ViVmlld1Rlc3QqIHRlc3QpCi17Ci0gICAgR093blB0cjxH
RXJyb3I+IGVycm9yOwotICAgIHRlc3QtPm1fc3VyZmFjZSA9IHdlYmtpdF93ZWJfdmlld19nZXRf
c25hcHNob3RfZmluaXNoKHdlYl92aWV3LCByZXMsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgZ19h
c3NlcnQoIXRlc3QtPm1fc3VyZmFjZSB8fCAhZXJyb3IuZ2V0KCkpOwotICAgIGlmIChlcnJvcikK
LSAgICAgICAgZ19hc3NlcnRfZXJyb3IoZXJyb3IuZ2V0KCksIFdFQktJVF9TTkFQU0hPVF9FUlJP
UiwgV0VCS0lUX1NOQVBTSE9UX0VSUk9SX0ZBSUxFRF9UT19DUkVBVEUpOwotICAgIHRlc3QtPnF1
aXRNYWluTG9vcCgpOwotfQotCi1jYWlyb19zdXJmYWNlX3QqIFdlYlZpZXdUZXN0OjpnZXRTbmFw
c2hvdEFuZFdhaXRVbnRpbFJlYWR5KFdlYktpdFNuYXBzaG90UmVnaW9uIHJlZ2lvbiwgV2ViS2l0
U25hcHNob3RPcHRpb25zIG9wdGlvbnMpCi17Ci0gICAgaWYgKG1fc3VyZmFjZSkKLSAgICAgICAg
Y2Fpcm9fc3VyZmFjZV9kZXN0cm95KG1fc3VyZmFjZSk7Ci0gICAgbV9zdXJmYWNlID0gMDsKLSAg
ICB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NuYXBzaG90KG1fd2ViVmlldywgcmVnaW9uLCBvcHRpb25z
LCAwLCByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KG9uU25hcHNob3RSZWFk
eSksIHRoaXMpOwotICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAgICByZXR1cm4g
bV9zdXJmYWNlOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvV2ViVmlld1Rlc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL1dlYlZpZXdUZXN0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0NjBl
MjIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
V2ViVmlld1Rlc3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAx
MSBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBX
ZWJWaWV3VGVzdF9oCi0jZGVmaW5lIFdlYlZpZXdUZXN0X2gKLQotI2luY2x1ZGUgIlRlc3RNYWlu
LmgiCi0jaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgotCi1jbGFzcyBXZWJWaWV3VGVzdDogcHVibGljIFRlc3QgewotcHVibGljOgotICAg
IE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoV2ViVmlld1Rlc3QpOwotICAgIFdlYlZpZXdUZXN0KCk7
Ci0gICAgdmlydHVhbCB+V2ViVmlld1Rlc3QoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBsb2FkVVJJ
KGNvbnN0IGNoYXIqIHVyaSk7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRIdG1sKGNvbnN0IGNoYXIq
IGh0bWwsIGNvbnN0IGNoYXIqIGJhc2VVUkkpOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUGxhaW5U
ZXh0KGNvbnN0IGNoYXIqIHBsYWluVGV4dCk7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXF1ZXN0
KFdlYktpdFVSSVJlcXVlc3QqKTsKLSAgICB2b2lkIGxvYWRBbHRlcm5hdGVIVE1MKGNvbnN0IGNo
YXIqIGh0bWwsIGNvbnN0IGNoYXIqIGNvbnRlbnRVUkksIGNvbnN0IGNoYXIqIGJhc2VVUkkpOwot
ICAgIHZvaWQgZ29CYWNrKCk7Ci0gICAgdm9pZCBnb0ZvcndhcmQoKTsKLSAgICB2b2lkIGdvVG9C
YWNrRm9yd2FyZExpc3RJdGVtKFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qKTsKLQotICAgIHZv
aWQgcXVpdE1haW5Mb29wKCk7Ci0gICAgdm9pZCBxdWl0TWFpbkxvb3BBZnRlclByb2Nlc3NpbmdQ
ZW5kaW5nRXZlbnRzKCk7Ci0gICAgdm9pZCB3YWl0KGRvdWJsZSBzZWNvbmRzKTsKLSAgICB2b2lk
IHdhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIHZvaWQgd2FpdFVudGlsVGl0bGVDaGFuZ2Vk
VG8oY29uc3QgY2hhciogZXhwZWN0ZWRUaXRsZSk7Ci0gICAgdm9pZCB3YWl0VW50aWxUaXRsZUNo
YW5nZWQoKTsKLSAgICB2b2lkIHNob3dJbldpbmRvdyhHdGtXaW5kb3dUeXBlID0gR1RLX1dJTkRP
V19QT1BVUCk7Ci0gICAgdm9pZCBzaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoR3RrV2lu
ZG93VHlwZSA9IEdUS19XSU5ET1dfUE9QVVApOwotICAgIHZvaWQgcmVzaXplVmlldyhpbnQgd2lk
dGgsIGludCBoZWlnaHQpOwotICAgIHZvaWQgc2VsZWN0QWxsKCk7Ci0gICAgY29uc3QgY2hhciog
bWFpblJlc291cmNlRGF0YShzaXplX3QmIG1haW5SZXNvdXJjZURhdGFTaXplKTsKLQotICAgIHZv
aWQgbW91c2VNb3ZlVG8oaW50IHgsIGludCB5LCB1bnNpZ25lZCBpbnQgbW91c2VNb2RpZmllcnMg
PSAwKTsKLSAgICB2b2lkIGNsaWNrTW91c2VCdXR0b24oaW50IHgsIGludCB5LCB1bnNpZ25lZCBp
bnQgYnV0dG9uID0gMSwgdW5zaWduZWQgaW50IG1vdXNlTW9kaWZpZXJzID0gMCk7Ci0gICAgdm9p
ZCBrZXlTdHJva2UodW5zaWduZWQgaW50IGtleVZhbCwgdW5zaWduZWQgaW50IGtleU1vZGlmaWVy
cyA9IDApOwotCi0gICAgV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCogcnVuSmF2YVNjcmlwdEFuZFdh
aXRVbnRpbEZpbmlzaGVkKGNvbnN0IGNoYXIqIGphdmFzY3JpcHQsIEdFcnJvcioqKTsKLSAgICBX
ZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBydW5KYXZhU2NyaXB0RnJvbUdSZXNvdXJjZUFuZFdhaXRV
bnRpbEZpbmlzaGVkKGNvbnN0IGNoYXIqIHJlc291cmNlLCBHRXJyb3IqKik7Ci0KLSAgICAvLyBK
YXZhc2NyaXB0IHJlc3VsdCBoZWxwZXJzLgotICAgIHN0YXRpYyBjaGFyKiBqYXZhc2NyaXB0UmVz
dWx0VG9DU3RyaW5nKFdlYktpdEphdmFzY3JpcHRSZXN1bHQqKTsKLSAgICBzdGF0aWMgZG91Ymxl
IGphdmFzY3JpcHRSZXN1bHRUb051bWJlcihXZWJLaXRKYXZhc2NyaXB0UmVzdWx0Kik7Ci0gICAg
c3RhdGljIGJvb2wgamF2YXNjcmlwdFJlc3VsdFRvQm9vbGVhbihXZWJLaXRKYXZhc2NyaXB0UmVz
dWx0Kik7Ci0gICAgc3RhdGljIGJvb2wgamF2YXNjcmlwdFJlc3VsdElzTnVsbChXZWJLaXRKYXZh
c2NyaXB0UmVzdWx0Kik7Ci0gICAgc3RhdGljIGJvb2wgamF2YXNjcmlwdFJlc3VsdElzVW5kZWZp
bmVkKFdlYktpdEphdmFzY3JpcHRSZXN1bHQqKTsKLQotICAgIGNhaXJvX3N1cmZhY2VfdCogZ2V0
U25hcHNob3RBbmRXYWl0VW50aWxSZWFkeShXZWJLaXRTbmFwc2hvdFJlZ2lvbiwgV2ViS2l0U25h
cHNob3RPcHRpb25zKTsKLQotICAgIFdlYktpdFdlYlZpZXcqIG1fd2ViVmlldzsKLSAgICBHTWFp
bkxvb3AqIG1fbWFpbkxvb3A7Ci0gICAgQ1N0cmluZyBtX2FjdGl2ZVVSSTsKLSAgICBHdGtXaWRn
ZXQqIG1fcGFyZW50V2luZG93OwotICAgIENTdHJpbmcgbV9leHBlY3RlZFRpdGxlOwotICAgIFdl
YktpdEphdmFzY3JpcHRSZXN1bHQqIG1famF2YXNjcmlwdFJlc3VsdDsKLSAgICBHRXJyb3IqKiBt
X2phdmFzY3JpcHRFcnJvcjsKLSAgICBHT3duUHRyPGNoYXI+IG1fcmVzb3VyY2VEYXRhOwotICAg
IHNpemVfdCBtX3Jlc291cmNlRGF0YVNpemU7Ci0gICAgY2Fpcm9fc3VyZmFjZV90KiBtX3N1cmZh
Y2U7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBkb01vdXNlQnV0dG9uRXZlbnQoR2RrRXZlbnRUeXBl
LCBpbnQsIGludCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwotfTsKLQotI2VuZGlmIC8v
IFdlYlZpZXdUZXN0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL3Jlc291cmNlcy9saW5rLXRpdGxlLmpzIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvcmVzb3VyY2VzL2xpbmstdGl0bGUuanMKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDJjODI0ZGEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvdGVzdHMvcmVzb3VyY2VzL2xpbmstdGl0bGUuanMKKysrIC9kZXYvbnVs
bApAQCAtMSArMCwwIEBACi13aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1dlYktpdExp
bmsnKS50aXRsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL3Jlc291cmNlcy90ZXN0LWNlcnQucGVtIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3QtY2VydC5wZW0KZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGIzNDMwMWYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3QtY2VydC5wZW0KKysrIC9kZXYvbnVsbApA
QCAtMSwxMyArMCwwIEBACi0tLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KLU1JSUI5akNDQVYr
Z0F3SUJBZ0lKQUxldVhCbyt2d3o5TUEwR0NTcUdTSWIzRFFFQkJRVUFNQlF4RWpBUUJnTlYKLUJB
TU1DVEV5Tnk0d0xqQXVNVEFlRncweE1qQTNNVEl4TWpRNE1qUmFGdzB5TWpBM01UQXhNalE0TWpS
YU1CUXgKLUVqQVFCZ05WQkFNTUNURXlOeTR3TGpBdU1UQ0JuekFOQmdrcWhraUc5dzBCQVFFRkFB
T0JqUUF3Z1lrQ2dZRUEKLTBUVXpPUXhIQklLREQybWt1cSt0VTkybVF2RFpnNzNCMEcrTmhyMlQy
RzZNYmNMcUl3amcxUVl0QlpXSjgzdFoKLXhNTUVmaXdlSExGODVaOW9oYXZBZ3hKbEtHN1ltdlpP
NzlLa0ZwbWpWMlc1Q1ZSbTBlWU1QbnpteE5Db2FZcW8KLURMbDB6c0g2S1pPTFBLdS9mWDRlRFg5
WHBBUDFmODNoV0IxVUZCbUhLTjhDQXdFQUFhTlFNRTR3SFFZRFZSME8KLUJCWUVGREh2NVpRMUJk
bWh6VHNEVUVvWTU1RVh5VWRLTUI4R0ExVWRJd1FZTUJhQUZESHY1WlExQmRtaHpUc0QKLVVFb1k1
NUVYeVVkS01Bd0dBMVVkRXdRRk1BTUJBZjh3RFFZSktvWklodmNOQVFFRkJRQURnWUVBaDNxTUJ4
N3YKLWpTb2RNZjNPeVRxVExFN2RlTG5tbkNlQlZwZ3p4UlpFb2l6Y0dxWWNqaXFPMjdpNU41WjZL
VlFzbklUbkxpeUMKLW1VdHVSNUtuRjY5dVRLVXc0bS91Z1plNXdoamlnNU1xMmw0MTBLVks2RWVH
NHRkTGxmWFIrd2k0VTVLNEtqUDYKLXA0bmNoUVVYTGEyemNiSm4rVkJleEpuNi85d2RocitEVUdZ
PQotLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3Qta2V5LnBlbSBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL3Jlc291cmNlcy90ZXN0LWtleS5wZW0KZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwMzYyMjIuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3Qta2V5LnBlbQor
KysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLS0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0t
LQotTUlJQ2R3SUJBREFOQmdrcWhraUc5dzBCQVFFRkFBU0NBbUV3Z2dKZEFnRUFBb0dCQU5FMU16
a01Sd1NDZ3c5cAotcExxdnJWUGRwa0x3MllPOXdkQnZqWWE5azlodWpHM0M2aU1JNE5VR0xRV1Zp
Zk43V2NUREJINHNIaHl4Zk9XZgotYUlXcndJTVNaU2h1MkpyMlR1L1NwQmFabzFkbHVRbFVadEht
REQ1ODVzVFFxR21LcUF5NWRNN0IraW1UaXp5cgotdjMxK0hnMS9WNlFEOVgvTjRWZ2RWQlFaaHlq
ZkFnTUJBQUVDZ1lCMlF3T1VzUnNJTXByUndKOXRKTmZ2TzdHNwotejVpMS96T3JseFBDNGpITVBC
bklCbElDd2djT2hMSTRvT0xkcjVIOFIxMm4wVnFvVDdEUndQMzk2aXdsSmlwRgotaU8xaGVETW4v
OHo4TFBHd2tDSy8rY2swNHJNRGtzeFdJZE13WUtCWHQ5YWhuSi94Ukx6UTEvM0FKaUFHbm9lNQot
L1FMWFF3ZW9mZDRtbWZzaktRSkJBTzJDd1Q3dU1QNm5NalhndFZNSnE1UVA4VWJlQ1Mxc0VPUEpK
Ykh1RHhKQgotL0hlUFFIQmpxNGt6RzZDTDRvTzdUKzVmRHY0ZytmSUlIenVYZXJaMGltc0NRUURo
Zm1pVEljOU91Y0VJZmc2LwotbXMwSmlLU21XYytxb2lPQ3RySUx1UXZGb053SlJjaVFBTnFlSnM2
d3BhRHZldlNVdkJMR2ZHLzdiM0h2YUU1WAotaXFCZEFrQkVRSXZwMnFjSHR1Sk42MG9RRjdwUHJS
a254VXliMmU4c2xqUVg0cEpBSytneUwxOVVMTUF4aUJkTAotVm9kOFZZcU50SkZwWSs2UHA5Zlox
eGp6YjZBTEFrRUE0SnpyREF3MGxRWEErM1dkdVV3NGl4T2FkcjJsZHlHMAotMzZLZWJjRHdzZlpP
MThtMFE0VW1QejBHeTd6Z04wd3h6dW9jaGF3MFc2K2lQVWlZS09sRVhRSkJBTVdRclBsdQotcnJp
bm9aUzJmOGRvSjlCTk5VYStSTnBNdWc2VVhjNTVxb1VKbHlpWEVoK3R1NEFhTU90eHVHSXlDMHNB
Y3V3NgotWGRBUFZQWEtkN01uZTcwPQotLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvcmVzb3VyY2VzL3dl
YmtpdDJndGstdGVzdHMuZ3Jlc291cmNlLnhtbCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL3Jlc291cmNlcy93ZWJraXQyZ3RrLXRlc3RzLmdyZXNvdXJjZS54bWwKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmMWU1YTYuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvcmVzb3VyY2VzL3dlYmtpdDJndGstdGVz
dHMuZ3Jlc291cmNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotPD94bWwgdmVy
c2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxncmVzb3VyY2VzPgotICA8Z3Jlc291cmNl
IHByZWZpeD0iL29yZy93ZWJraXQvd2Via2l0Mmd0ay90ZXN0cy8iPgotICAgIDxmaWxlIGFsaWFz
PSJsaW5rLXRpdGxlLmpzIj5Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9y
ZXNvdXJjZXMvbGluay10aXRsZS5qczwvZmlsZT4KLSAgPC9ncmVzb3VyY2U+Ci08L2dyZXNvdXJj
ZXM+CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3J1bi1ndGstdGVzdHMgYi9Ub29scy9TY3Jp
cHRzL3J1bi1ndGstdGVzdHMKaW5kZXggNTI0ZTdlMy4uODJmYTM2YyAxMDA3NTUKLS0tIGEvVG9v
bHMvU2NyaXB0cy9ydW4tZ3RrLXRlc3RzCisrKyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWd0ay10ZXN0
cwpAQCAtNTgsMzUgKzU4LDM1IEBAIGNsYXNzIFRlc3RUaW1lb3V0KEV4Y2VwdGlvbik6CiAgICAg
cGFzcwogCiBjbGFzcyBUZXN0UnVubmVyOgotICAgIFRFU1RfRElSUyA9IFsgIldlYktpdDFHT2Jq
ZWN0QVBJVGVzdHMiLCAiV2ViS2l0MkdPYmplY3RBUElUZXN0cyIsICJUZXN0V2ViS2l0QVBJIiBd
CisgICAgVEVTVF9ESVJTID0gWyAiV2ViS2l0Mkd0ayIsICJXZWJLaXRHdGsiLCAiV2ViS2l0MiIs
ICJKYXZhU2NyaXB0Q29yZSIsICJXVEYiLCAiV2ViQ29yZSIsICAiV2ViQ29yZUd0ayIgXQogCiAg
ICAgU0tJUFBFRCA9IFsKLSAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdDFHT2JqZWN0QVBJVGVz
dHMvdGVzdGRvd25sb2FkIiwgIi93ZWJraXQvZG93bmxvYWQvbm90LWZvdW5kIiwgIlRlc3QgZmFp
bHMgaW4gR1RLIExpbnV4IDY0LWJpdCBSZWxlYXNlIGJvdCIsIDgyMzI5KSwKLSAgICAgICAgU2tp
cHBlZFRlc3QoIldlYktpdDFHT2JqZWN0QVBJVGVzdHMvdGVzdHdlYmluc3BlY3RvciIsICIvd2Vi
a2l0L3dlYmluc3BlY3Rvci9jbG9zZS1hbmQtaW5zcGVjdCIsICJUZXN0IGlzIGZsYWt5IGluIEdU
SyBMaW51eCAzMi1iaXQgUmVsZWFzZSBib3QiLCA4Mjg2OSksCi0gICAgICAgIFNraXBwZWRUZXN0
KCJXZWJLaXQxR09iamVjdEFQSVRlc3RzL3Rlc3R3ZWJyZXNvdXJjZSIsICIvd2Via2l0L3dlYnJl
c291cmNlL2xvYWRpbmciLCAiVGVzdCBmYWlscyIsIDEwNDY4OSksCi0gICAgICAgIFNraXBwZWRU
ZXN0KCJXZWJLaXQxR09iamVjdEFQSVRlc3RzL3Rlc3R3ZWJyZXNvdXJjZSIsICIvd2Via2l0L3dl
YnJlc291cmNlL3N1Yl9yZXNvdXJjZV9sb2FkaW5nIiwgIlRlc3QgZmFpbHMgaW4gR1RLIExpbnV4
IDY0LWJpdCBSZWxlYXNlIGJvdCIsIDgyMzMwKSwKLSAgICAgICAgU2tpcHBlZFRlc3QoIldlYktp
dDFHT2JqZWN0QVBJVGVzdHMvdGVzdHdlYnZpZXciLCAiL3dlYmtpdC93ZWJ2aWV3L2ljb24tdXJp
IiwgIlRlc3QgdGltZXMgb3V0IGluIEdUSyBMaW51eCA2NC1iaXQgUmVsZWFzZSBib3QiLCA4MjMy
OCksCi0gICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXQyR09iamVjdEFQSVRlc3RzL1Rlc3RSZXNv
dXJjZXMiLCAiL3dlYmtpdDIvV2ViS2l0V2ViVmlldy9yZXNvdXJjZXMiLCAiVGVzdCBpcyBmbGFr
eSBpbiBHVEsgTGludXggMzItYml0IFJlbGVhc2UgYm90IiwgODI4NjgpLAotICAgICAgICBTa2lw
cGVkVGVzdCgiV2ViS2l0MkdPYmplY3RBUElUZXN0cy9UZXN0VUlDbGllbnQiLCAiL3dlYmtpdDIv
V2ViS2l0V2ViVmlldy9tb3VzZS10YXJnZXQiLCAiVGVzdCB0aW1lcyBvdXQgYWZ0ZXIgcjE1MDg5
MCIsIDExNzY4OSksCi0gICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXQyR09iamVjdEFQSVRlc3Rz
L1Rlc3RBdXRoZW50aWNhdGlvbiIsIFNraXBwZWRUZXN0LkVOVElSRV9TVUlURSwgIlRlc3QgdGlt
ZXMgb3V0IGFmdGVyIHIxNTA4OTAiLCAxMTc2ODkpLAotICAgICAgICBTa2lwcGVkVGVzdCgiV2Vi
S2l0MkdPYmplY3RBUElUZXN0cy9UZXN0Q29udGV4dE1lbnUiLCBTa2lwcGVkVGVzdC5FTlRJUkVf
U1VJVEUsICJUZXN0IHRpbWVzIG91dCBhZnRlciByMTUwODkwIiwgMTE3Njg5KSwKLSAgICAgICAg
U2tpcHBlZFRlc3QoIlRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5Nb3VzZU1v
dmVBZnRlckNyYXNoIiwgIlRlc3QgaXMgZmxha3kiLCA4NTA2NiksCi0gICAgICAgIFNraXBwZWRU
ZXN0KCJUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXQyIiwgIldlYktpdDIuTmV3Rmlyc3RWaXN1YWxs
eU5vbkVtcHR5TGF5b3V0Rm9ySW1hZ2VzIiwgIlRlc3QgaXMgZmxha3kiLCA4NTA2NiksCi0gICAg
ICAgIFNraXBwZWRUZXN0KCJUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXQyIiwgIldlYktpdDIuTmV3
Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0RnJhbWVzIiwgIlRlc3QgZmFpbHMiLCA4NTAzNyks
Ci0gICAgICAgIFNraXBwZWRUZXN0KCJUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXQyIiwgIldlYktp
dDIuUmVzdG9yZVNlc3Npb25TdGF0ZUNvbnRhaW5pbmdGb3JtRGF0YSIsICJTZXNzaW9uIFN0YXRl
IGlzIG5vdCBpbXBsZW1lbnRlZCBpbiBHVEsrIHBvcnQiLCA4NDk2MCksCi0gICAgICAgIFNraXBw
ZWRUZXN0KCJUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXQyIiwgIldlYktpdDIuU3BhY2ViYXJTY3Jv
bGxpbmciLCAiVGVzdCBmYWlscyIsIDg0OTYxKSwKLSAgICAgICAgU2tpcHBlZFRlc3QoIlRlc3RX
ZWJLaXRBUEkvVGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5XS0Nvbm5lY3Rpb24iLCAiVGVzdHMgZmFp
bCBhbmQgdGltZSBvdXQgb3V0IiwgODQ5NTkpLAotICAgICAgICBTa2lwcGVkVGVzdCgiVGVzdFdl
YktpdEFQSS9UZXN0V2ViS2l0MiIsICJXZWJLaXQyLldLUGFnZUdldFNjYWxlRmFjdG9yTm90WmVy
byIsICJUZXN0IGZhaWxzIGFuZCB0aW1lcyBvdXQiLCA4ODQ1NSksCi0gICAgICAgIFNraXBwZWRU
ZXN0KCJUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXQyIiwgIldlYktpdDIuRm9yY2VSZXBhaW50Iiwg
IlRlc3QgdGltZXMgb3V0IiwgMTA1NTMyKSwKLSAgICAgICAgU2tpcHBlZFRlc3QoIlRlc3RXZWJL
aXRBUEkvVGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5SZWxvYWRQYWdlQWZ0ZXJDcmFzaCIsICJUZXN0
IGZsYWtpbHkgdGltZXMgb3V0IiwgMTEwMTI5KSwKLSAgICAgICAgU2tpcHBlZFRlc3QoIlRlc3RX
ZWJLaXRBUEkvVGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5EaWRBc3NvY2lhdGVGb3JtQ29udHJvbHMi
LCAiVGVzdCB0aW1lcyBvdXQiLCAxMjAzMDIpLAotICAgICAgICBTa2lwcGVkVGVzdCgiVGVzdFdl
YktpdEFQSS9UZXN0V2ViS2l0MiIsICJXZWJLaXQyLkluamVjdGVkQnVuZGxlRnJhbWVIaXRUZXN0
IiwgIlRlc3QgdGltZXMgb3V0IiwgMTIwMzAzKSwKLSAgICAgICAgU2tpcHBlZFRlc3QoIlRlc3RX
ZWJLaXRBUEkvVGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5SZXNpemVSZXZlcnNlUGFnaW5hdGVkV2Vi
VmlldyIsICJUZXN0IGZhaWxzIiwgMTIwMzA1KSwKLSAgICAgICAgU2tpcHBlZFRlc3QoIlRlc3RX
ZWJLaXRBUEkvVGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5TY3JvbGxQaW5uaW5nQmVoYXZpb3JzIiwg
IlRlc3QgZmFpbHMiLCAxMjAzMDYpLAotICAgICAgICBTa2lwcGVkVGVzdCgiVGVzdFdlYktpdEFQ
SS9UZXN0V2ViS2l0MiIsICJXZWJLaXQyLlRlcm1pbmF0ZVR3aWNlIiwgIlRlc3QgY2F1c2VzIGNy
YXNoIG9uIHRoZSBuZXh0IHRlc3QiLCAxMjE5NzApLAotICAgICAgICBTa2lwcGVkVGVzdCgiVGVz
dFdlYktpdEFQSS9UZXN0V2ViS2l0MiIsICJXZWJLaXQyLkdlb2xvY2F0aW9uVHJhbnNpdGlvblRv
SGlnaEFjY3VyYWN5IiwgIlRlc3QgY2F1c2VzIGNyYXNoIG9uIHRoZSBuZXh0IHRlc3QiLCAxMjUw
NjgpLAotICAgICAgICBTa2lwcGVkVGVzdCgiVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0MiIsICJX
ZWJLaXQyLkdlb2xvY2F0aW9uVHJhbnNpdGlvblRvTG93QWNjdXJhY3kiLCAiVGVzdCBjYXVzZXMg
Y3Jhc2ggb24gdGhlIG5leHQgdGVzdCIsIDEyNTA2OCksCi0gICAgICAgIFNraXBwZWRUZXN0KCJX
ZWJLaXQyR09iamVjdEFQSVRlc3RzL1Rlc3RJbnNwZWN0b3JTZXJ2ZXIiLCBTa2lwcGVkVGVzdC5F
TlRJUkVfU1VJVEUsICJUaW1pbmcgb3V0IG9uIHRoZSBib3QiLCAxMjI1NzEpLAorICAgICAgICBT
a2lwcGVkVGVzdCgiV2ViS2l0R3RrL3Rlc3Rkb3dubG9hZCIsICIvd2Via2l0L2Rvd25sb2FkL25v
dC1mb3VuZCIsICJUZXN0IGZhaWxzIGluIEdUSyBMaW51eCA2NC1iaXQgUmVsZWFzZSBib3QiLCA4
MjMyOSksCisgICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXRHdGsvdGVzdHdlYmluc3BlY3RvciIs
ICIvd2Via2l0L3dlYmluc3BlY3Rvci9jbG9zZS1hbmQtaW5zcGVjdCIsICJUZXN0IGlzIGZsYWt5
IGluIEdUSyBMaW51eCAzMi1iaXQgUmVsZWFzZSBib3QiLCA4Mjg2OSksCisgICAgICAgIFNraXBw
ZWRUZXN0KCJXZWJLaXRHdGsvdGVzdHdlYnJlc291cmNlIiwgIi93ZWJraXQvd2VicmVzb3VyY2Uv
bG9hZGluZyIsICJUZXN0IGZhaWxzIiwgMTA0Njg5KSwKKyAgICAgICAgU2tpcHBlZFRlc3QoIldl
YktpdEd0ay90ZXN0d2VicmVzb3VyY2UiLCAiL3dlYmtpdC93ZWJyZXNvdXJjZS9zdWJfcmVzb3Vy
Y2VfbG9hZGluZyIsICJUZXN0IGZhaWxzIGluIEdUSyBMaW51eCA2NC1iaXQgUmVsZWFzZSBib3Qi
LCA4MjMzMCksCisgICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXRHdGsvdGVzdHdlYnZpZXciLCAi
L3dlYmtpdC93ZWJ2aWV3L2ljb24tdXJpIiwgIlRlc3QgdGltZXMgb3V0IGluIEdUSyBMaW51eCA2
NC1iaXQgUmVsZWFzZSBib3QiLCA4MjMyOCksCisgICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXQy
R3RrL1Rlc3RSZXNvdXJjZXMiLCAiL3dlYmtpdDIvV2ViS2l0V2ViVmlldy9yZXNvdXJjZXMiLCAi
VGVzdCBpcyBmbGFreSBpbiBHVEsgTGludXggMzItYml0IFJlbGVhc2UgYm90IiwgODI4NjgpLAor
ICAgICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0Mkd0ay9UZXN0VUlDbGllbnQiLCAiL3dlYmtpdDIv
V2ViS2l0V2ViVmlldy9tb3VzZS10YXJnZXQiLCAiVGVzdCB0aW1lcyBvdXQgYWZ0ZXIgcjE1MDg5
MCIsIDExNzY4OSksCisgICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXQyR3RrL1Rlc3RBdXRoZW50
aWNhdGlvbiIsIFNraXBwZWRUZXN0LkVOVElSRV9TVUlURSwgIlRlc3QgdGltZXMgb3V0IGFmdGVy
IHIxNTA4OTAiLCAxMTc2ODkpLAorICAgICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0Mkd0ay9UZXN0
Q29udGV4dE1lbnUiLCBTa2lwcGVkVGVzdC5FTlRJUkVfU1VJVEUsICJUZXN0IHRpbWVzIG91dCBh
ZnRlciByMTUwODkwIiwgMTE3Njg5KSwKKyAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdDIvVGVz
dFdlYktpdDIiLCAiV2ViS2l0Mi5Nb3VzZU1vdmVBZnRlckNyYXNoIiwgIlRlc3QgaXMgZmxha3ki
LCA4NTA2NiksCisgICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXQyL1Rlc3RXZWJLaXQyIiwgIldl
YktpdDIuTmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9ySW1hZ2VzIiwgIlRlc3QgaXMg
Zmxha3kiLCA4NTA2NiksCisgICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXQyL1Rlc3RXZWJLaXQy
IiwgIldlYktpdDIuTmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0RnJhbWVzIiwgIlRlc3Qg
ZmFpbHMiLCA4NTAzNyksCisgICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXQyL1Rlc3RXZWJLaXQy
IiwgIldlYktpdDIuUmVzdG9yZVNlc3Npb25TdGF0ZUNvbnRhaW5pbmdGb3JtRGF0YSIsICJTZXNz
aW9uIFN0YXRlIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiBHVEsrIHBvcnQiLCA4NDk2MCksCisgICAg
ICAgIFNraXBwZWRUZXN0KCJXZWJLaXQyL1Rlc3RXZWJLaXQyIiwgIldlYktpdDIuU3BhY2ViYXJT
Y3JvbGxpbmciLCAiVGVzdCBmYWlscyIsIDg0OTYxKSwKKyAgICAgICAgU2tpcHBlZFRlc3QoIldl
YktpdDIvVGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5XS0Nvbm5lY3Rpb24iLCAiVGVzdHMgZmFpbCBh
bmQgdGltZSBvdXQgb3V0IiwgODQ5NTkpLAorICAgICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0Mi9U
ZXN0V2ViS2l0MiIsICJXZWJLaXQyLldLUGFnZUdldFNjYWxlRmFjdG9yTm90WmVybyIsICJUZXN0
IGZhaWxzIGFuZCB0aW1lcyBvdXQiLCA4ODQ1NSksCisgICAgICAgIFNraXBwZWRUZXN0KCJXZWJL
aXQyL1Rlc3RXZWJLaXQyIiwgIldlYktpdDIuRm9yY2VSZXBhaW50IiwgIlRlc3QgdGltZXMgb3V0
IiwgMTA1NTMyKSwKKyAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdDIvVGVzdFdlYktpdDIiLCAi
V2ViS2l0Mi5SZWxvYWRQYWdlQWZ0ZXJDcmFzaCIsICJUZXN0IGZsYWtpbHkgdGltZXMgb3V0Iiwg
MTEwMTI5KSwKKyAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdDIvVGVzdFdlYktpdDIiLCAiV2Vi
S2l0Mi5EaWRBc3NvY2lhdGVGb3JtQ29udHJvbHMiLCAiVGVzdCB0aW1lcyBvdXQiLCAxMjAzMDIp
LAorICAgICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0Mi9UZXN0V2ViS2l0MiIsICJXZWJLaXQyLklu
amVjdGVkQnVuZGxlRnJhbWVIaXRUZXN0IiwgIlRlc3QgdGltZXMgb3V0IiwgMTIwMzAzKSwKKyAg
ICAgICAgU2tpcHBlZFRlc3QoIldlYktpdDIvVGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5SZXNpemVS
ZXZlcnNlUGFnaW5hdGVkV2ViVmlldyIsICJUZXN0IGZhaWxzIiwgMTIwMzA1KSwKKyAgICAgICAg
U2tpcHBlZFRlc3QoIldlYktpdDIvVGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5TY3JvbGxQaW5uaW5n
QmVoYXZpb3JzIiwgIlRlc3QgZmFpbHMiLCAxMjAzMDYpLAorICAgICAgICBTa2lwcGVkVGVzdCgi
V2ViS2l0Mi9UZXN0V2ViS2l0MiIsICJXZWJLaXQyLlRlcm1pbmF0ZVR3aWNlIiwgIlRlc3QgY2F1
c2VzIGNyYXNoIG9uIHRoZSBuZXh0IHRlc3QiLCAxMjE5NzApLAorICAgICAgICBTa2lwcGVkVGVz
dCgiV2ViS2l0Mi9UZXN0V2ViS2l0MiIsICJXZWJLaXQyLkdlb2xvY2F0aW9uVHJhbnNpdGlvblRv
SGlnaEFjY3VyYWN5IiwgIlRlc3QgY2F1c2VzIGNyYXNoIG9uIHRoZSBuZXh0IHRlc3QiLCAxMjUw
NjgpLAorICAgICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0Mi9UZXN0V2ViS2l0MiIsICJXZWJLaXQy
Lkdlb2xvY2F0aW9uVHJhbnNpdGlvblRvTG93QWNjdXJhY3kiLCAiVGVzdCBjYXVzZXMgY3Jhc2gg
b24gdGhlIG5leHQgdGVzdCIsIDEyNTA2OCksCisgICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXQy
R3RrL1Rlc3RJbnNwZWN0b3JTZXJ2ZXIiLCBTa2lwcGVkVGVzdC5FTlRJUkVfU1VJVEUsICJUaW1p
bmcgb3V0IG9uIHRoZSBib3QiLCAxMjI1NzEpLAogICAgIF0KIAogICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBvcHRpb25zLCB0ZXN0cz1bXSk6CkBAIC0xMDYsNiArMTA2LDkgQEAgY2xhc3MgVGVzdFJ1
bm5lcjoKICAgICAgICAgc2VsZi5fc3BpX3JlZ2lzdHJ5ZCA9IE5vbmUKICAgICAgICAgc2VsZi5f
c3BpX2J1c19sYXVuY2hlciA9IE5vbmUKIAorICAgIGRlZiBfdGVzdF9wcm9ncmFtc19iYXNlX2Rp
cihzZWxmKToKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLl9wcm9ncmFtc19wYXRo
LCAiVGVzdFdlYktpdEFQSSIpCisKICAgICBkZWYgX2dldF90ZXN0c19mcm9tX2RpcihzZWxmLCB0
ZXN0X2Rpcik6CiAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHRlc3RfZGlyKToKICAgICAg
ICAgICAgIHJldHVybiBbXQpAQCAtMTMxLDcgKzEzNCw3IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAK
ICAgICAgICAgdGVzdHMgPSBbXQogICAgICAgICBmb3IgdGVzdF9kaXIgaW4gc2VsZi5URVNUX0RJ
UlM6Ci0gICAgICAgICAgICBhYnNvbHV0ZV90ZXN0X2RpciA9IG9zLnBhdGguam9pbihzZWxmLl9w
cm9ncmFtc19wYXRoLCB0ZXN0X2RpcikKKyAgICAgICAgICAgIGFic29sdXRlX3Rlc3RfZGlyID0g
b3MucGF0aC5qb2luKHNlbGYuX3Rlc3RfcHJvZ3JhbXNfYmFzZV9kaXIoKSwgdGVzdF9kaXIpCiAg
ICAgICAgICAgICB0ZXN0cy5leHRlbmQoc2VsZi5fZ2V0X3Rlc3RzX2Zyb21fZGlyKGFic29sdXRl
X3Rlc3RfZGlyKSkKICAgICAgICAgcmV0dXJuIHRlc3RzCiAKQEAgLTM2MSwxNyArMzY0LDE4IEBA
IGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgIHJldHVybiAwCiAKICAgICBkZWYgX3J1bl90ZXN0
KHNlbGYsIHRlc3RfcHJvZ3JhbSk6Ci0gICAgICAgIGlmICJHT2JqZWN0QVBJVGVzdCIgaW4gdGVz
dF9wcm9ncmFtOgorICAgICAgICBiYXNlZGlyID0gb3MucGF0aC5iYXNlbmFtZShvcy5wYXRoLmRp
cm5hbWUodGVzdF9wcm9ncmFtKSkKKyAgICAgICAgaWYgYmFzZWRpciBpbiBbIldlYktpdDJHdGsi
LCAiV2ViS2l0R3RrIl06CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcnVuX3Rlc3RfZ2xpYih0
ZXN0X3Byb2dyYW0pCiAKLSAgICAgICAgaWYgIlRlc3RXZWJLaXRBUEkiIGluIHRlc3RfcHJvZ3Jh
bToKKyAgICAgICAgaWYgYmFzZWRpciBpbiBbIldlYktpdDIiLCAiSmF2YVNjcmlwdENvcmUiLCAi
V1RGIiwgIldlYkNvcmUiLCAgIldlYkNvcmVHdGsiXToKICAgICAgICAgICAgIHJldHVybiBzZWxm
Ll9ydW5fZ29vZ2xlX3Rlc3Rfc3VpdGUodGVzdF9wcm9ncmFtKQogCiAgICAgICAgIHJldHVybiAx
CiAKICAgICBkZWYgcnVuX3Rlc3RzKHNlbGYpOgogICAgICAgICBpZiBub3Qgc2VsZi5fdGVzdHM6
Ci0gICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJFUlJPUjogdGVzdHMgbm90IGZvdW5kIGlu
ICVzLlxuIiAlIChzZWxmLl9wcm9ncmFtc19wYXRoKSkKKyAgICAgICAgICAgIHN5cy5zdGRlcnIu
d3JpdGUoIkVSUk9SOiB0ZXN0cyBub3QgZm91bmQgaW4gJXMuXG4iICUgKHNlbGYuX3Rlc3RfcHJv
Z3JhbXNfYmFzZV9kaXIoKSkpCiAgICAgICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKICAgICAg
ICAgICAgIHJldHVybiAxCiAKQEAgLTQwNSwxNyArNDA5LDE3IEBAIGNsYXNzIFRlc3RSdW5uZXI6
CiAgICAgICAgICAgICBzZWxmLl90ZWFyX2Rvd25fdGVzdGluZ19lbnZpcm9ubWVudCgpCiAKICAg
ICAgICAgaWYgZmFpbGVkX3Rlc3RzOgotICAgICAgICAgICAgbmFtZXMgPSBbdGVzdC5yZXBsYWNl
KHNlbGYuX3Byb2dyYW1zX3BhdGgsICcnLCAxKSBmb3IgdGVzdCBpbiBmYWlsZWRfdGVzdHNdCisg
ICAgICAgICAgICBuYW1lcyA9IFt0ZXN0LnJlcGxhY2Uoc2VsZi5fdGVzdF9wcm9ncmFtc19iYXNl
X2RpcigpLCAnJywgMSkgZm9yIHRlc3QgaW4gZmFpbGVkX3Rlc3RzXQogICAgICAgICAgICAgc3lz
LnN0ZG91dC53cml0ZSgiVGVzdHMgZmFpbGVkICglZCk6ICVzXG4iICUgKGxlbihuYW1lcyksICIs
ICIuam9pbihuYW1lcykpKQogICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCiAKICAgICAg
ICAgaWYgY3Jhc2hlZF90ZXN0czoKLSAgICAgICAgICAgIG5hbWVzID0gW3Rlc3QucmVwbGFjZShz
ZWxmLl9wcm9ncmFtc19wYXRoLCAnJywgMSkgZm9yIHRlc3QgaW4gY3Jhc2hlZF90ZXN0c10KKyAg
ICAgICAgICAgIG5hbWVzID0gW3Rlc3QucmVwbGFjZShzZWxmLl90ZXN0X3Byb2dyYW1zX2Jhc2Vf
ZGlyKCksICcnLCAxKSBmb3IgdGVzdCBpbiBjcmFzaGVkX3Rlc3RzXQogICAgICAgICAgICAgc3lz
LnN0ZG91dC53cml0ZSgiVGVzdHMgdGhhdCBjcmFzaGVkICglZCk6ICVzXG4iICUgKGxlbihuYW1l
cyksICIsICIuam9pbihuYW1lcykpKQogICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCiAK
ICAgICAgICAgaWYgdGltZWRfb3V0X3Rlc3RzOgotICAgICAgICAgICAgbmFtZXMgPSBbdGVzdC5y
ZXBsYWNlKHNlbGYuX3Byb2dyYW1zX3BhdGgsICcnLCAxKSBmb3IgdGVzdCBpbiB0aW1lZF9vdXRf
dGVzdHNdCisgICAgICAgICAgICBuYW1lcyA9IFt0ZXN0LnJlcGxhY2Uoc2VsZi5fdGVzdF9wcm9n
cmFtc19iYXNlX2RpcigpLCAnJywgMSkgZm9yIHRlc3QgaW4gdGltZWRfb3V0X3Rlc3RzXQogICAg
ICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiVGVzdHMgdGhhdCB0aW1lZCBvdXQgKCVkKTogJXNc
biIgJSAobGVuKG5hbWVzKSwgIiwgIi5qb2luKG5hbWVzKSkpCiAgICAgICAgICAgICBzeXMuc3Rk
b3V0LmZsdXNoKCkKIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9HTlVtYWtlZmls
ZS5hbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvR05VbWFrZWZpbGUuYW0KaW5kZXggMmVhMTA0MC4u
Yjk3YTY0MCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9HTlVtYWtlZmlsZS5hbQor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0dOVW1ha2VmaWxlLmFtCkBAIC0xLDYgKzEsMTEgQEAK
IG5vaW5zdF9MVExJQlJBUklFUyArPSBcCiAJTGlicmFyaWVzL2xpYlRlc3RXZWJLaXRBUElNYWlu
LmxhCiAKK2lmIEVOQUJMRV9XRUJLSVQyCitub2luc3RfTFRMSUJSQVJJRVMgKz0gXAorCUxpYnJh
cmllcy9saWJUZXN0V2ViS2l0Mkd0a0FQSS5sYQorZW5kaWYKKwogTGlicmFyaWVzX2xpYlRlc3RX
ZWJLaXRBUElNYWluX2xhX1NPVVJDRVMgPSBcCiAJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0Lmgg
XAogCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHNDb250cm9sbGVyLmNwcCBcCkBAIC0yMCwzNyAr
MjUsMTgwIEBAIExpYnJhcmllc19saWJUZXN0V2ViS2l0QVBJTWFpbl9sYV9DUFBGTEFHUyA9IFwK
IAkkKGphdmFzY3JpcHRjb3JlX2NwcGZsYWdzKSBcCiAJJChHVEtfQ0ZMQUdTKQogCit3ZWJraXRn
dGtfdGVzdHNfY2ZsYWdzID0gXAorCS1mbm8tc3RyaWN0LWFsaWFzaW5nIFwKKwktRFRFU1RfUExV
R0lOX0RJUj1cIiR7c2hlbGwgcHdkfS8ke3RvcF9idWlsZGRpcn0vVGVzdE5ldHNjYXBlUGx1Z2lu
Ly5saWJzXCIgXAorCS1JJChzcmNkaXIpL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Gb3J3YXJkaW5n
SGVhZGVycyBcCisJLUkkKFdlYktpdCkgXAorCS1JJChHRU5TT1VSQ0VTKSBcCisJLUkkKHRvcF9i
dWlsZGRpcikvU291cmNlL1dlYktpdC9ndGsgXAorCS1JJCh0b3Bfc3JjZGlyKS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncyBcCisJLUkkKHRvcF9zcmNkaXIpL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2dvYmplY3QgXAorCSQoZ2xvYmFsX2NwcGZsYWdzKSBcCisJJChnbG9iYWxfY2ZsYWdzKSBcCisJ
JChqYXZhc2NyaXB0Y29yZV9jcHBmbGFncykgXAorCSQoRlJFRVRZUEVfQ0ZMQUdTKSBcCisJJChH
TElCX0NGTEFHUykgXAorCSQoR1RLX0NGTEFHUykgXAorCSQoTElCU09VUF9DRkxBR1MpIFwKKwkk
KFhSRU5ERVJfQ0ZMQUdTKSBcCisJJChYVF9DRkxBR1MpCisKK3dlYmtpdGd0a190ZXN0c19sZGFk
ZCA9IFwKKwlsaWJqYXZhc2NyaXB0Y29yZWd0ay1AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9O
QC5AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQC5sYSBcCisJbGlid2Via2l0Z3RrLUBXRUJL
SVRHVEtfQVBJX01BSk9SX1ZFUlNJT05ALkBXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05ALmxh
IFwKKwkkKEZSRUVUWVBFX0xJQlMpIFwKKwkkKEdUS19MSUJTKSBcCisJJChHTElCX0xJQlMpIFwK
KwkkKExJQlNPVVBfTElCUykgXAorCSQoWFJFTkRFUl9MSUJTKQorCit3ZWJraXRndGtfdGVzdHNf
bGRmbGFncyA9IFwKKwktbm8taW5zdGFsbAorCisKK3dlYmtpdDJndGtfdGVzdHNfY3BwZmxhZ3Mg
PSBcCisJLURXRUJLSVRfRVhFQ19QQVRIPVwiJHtzaGVsbCBwd2R9LyQodG9wX2J1aWxkZGlyKS9Q
cm9ncmFtc1wiIFwKKwktRFdFQktJVF9TUkNfRElSPVwiJHtzaGVsbCBwd2R9LyR7c3JjZGlyfVwi
IFwKKwktRFdFQktJVF9ERVJJVkVEX1NSQ19ESVI9XCIke3NoZWxsIHB3ZH0vJHt0b3BfYnVpbGRk
aXJ9L0Rlcml2ZWRTb3VyY2VzXCIgXAorCS1EV0VCS0lUX1RFU1RfUExVR0lOX0RJUj1cIiR7c2hl
bGwgcHdkfS8ke3RvcF9idWlsZGRpcn0vVGVzdE5ldHNjYXBlUGx1Z2luLy5saWJzXCIgXAorCS1E
V0VCS0lUX1RFU1RfV0VCX0VYVEVOU0lPTlNfRElSPVwiJHtzaGVsbCBwd2R9LyR7dG9wX2J1aWxk
ZGlyfS9MaWJyYXJpZXMvV2ViRXh0ZW5zaW9ucy8ubGlic1wiIFwKKwktRFdFQktJVF9JTkpFQ1RF
RF9CVU5ETEVfUEFUSD1cIiR7c2hlbGwgcHdkfS8kKHRvcF9idWlsZGRpcikvLmxpYnNcIiBcCisJ
JChqYXZhc2NyaXB0Y29yZV9jcHBmbGFncykgXAorCS1JJChzcmNkaXIpL1NvdXJjZSBcCisJLUkk
KHNyY2RpcikvU291cmNlL1dlYktpdDIgXAorCS1JJChzcmNkaXIpL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZSBcCisJLUkkKHNyY2RpcikvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ayBc
CisJLUkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9pbmNsdWRlIFwKKwkt
SSQodG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL3dlYmtpdDJndGsgXAorCS1J
JCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvd2Via2l0Mmd0ay9pbmNsdWRl
IFwKKwktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ayBcCisJJChn
bG9iYWxfY3BwZmxhZ3MpIFwKKwkkKEZSRUVUWVBFX0NGTEFHUykgXAorCSQoR0xJQl9DRkxBR1Mp
IFwKKwkkKEdUS19DRkxBR1MpIFwKKwkkKExJQlNPVVBfQ0ZMQUdTKQorCit3ZWJraXQyZ3RrX3Rl
c3RzX2xkYWRkID0gXAorCUxpYnJhcmllcy9saWJXZWJLaXQyQVBJVGVzdENvcmUubGEgXAorCWxp
YmphdmFzY3JpcHRjb3JlZ3RrLUBXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05ALkBXRUJLSVRH
VEtfQVBJX01JTk9SX1ZFUlNJT05ALmxhIFwKKwlsaWJ3ZWJraXQyZ3RrLUBXRUJLSVRHVEtfQVBJ
X01BSk9SX1ZFUlNJT05ALkBXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05ALmxhIFwKKwkkKEZS
RUVUWVBFX0xJQlMpIFwKKwkkKEdFT0NMVUVfTElCUykgXAorCSQoR0xJQl9MSUJTKSBcCisJJChH
VEtfTElCUykgXAorCSQoTElCU09VUF9MSUJTKQorCit3ZWJraXQyZ3RrX3Rlc3RzX2xkZmxhZ3Mg
PSBcCisJLW5vLWluc3RhbGwKKworTGlicmFyaWVzX2xpYlRlc3RXZWJLaXQyR3RrQVBJX2xhX1NP
VVJDRVMgPSBcCisJVG9vbHMvVGVzdFdlYktpdEd0ay9ndGsvV2ViS2l0Mkd0ay9Mb2FkVHJhY2tp
bmdUZXN0LmNwcCBcCisJVG9vbHMvVGVzdFdlYktpdEd0ay9ndGsvV2ViS2l0Mkd0ay9Mb2FkVHJh
Y2tpbmdUZXN0LmggXAorCVRvb2xzL1Rlc3RXZWJLaXRHdGsvZ3RrL1dlYktpdDJHdGsvV2ViS2l0
VGVzdEJ1cy5jcHAgXAorCVRvb2xzL1Rlc3RXZWJLaXRHdGsvZ3RrL1dlYktpdDJHdGsvV2ViS2l0
VGVzdEJ1cy5oIFwKKwlUb29scy9UZXN0V2ViS2l0R3RrL2d0ay9XZWJLaXQyR3RrL1dlYktpdFRl
c3RTZXJ2ZXIuY3BwIFwKKwlUb29scy9UZXN0V2ViS2l0R3RrL2d0ay9XZWJLaXQyR3RrL1dlYktp
dFRlc3RTZXJ2ZXIuaCBcCisJVG9vbHMvVGVzdFdlYktpdEd0ay9ndGsvV2ViS2l0Mkd0ay9XZWJQ
cm9jZXNzVGVzdFJ1bm5lci5jcHAgXAorCVRvb2xzL1Rlc3RXZWJLaXRHdGsvZ3RrL1dlYktpdDJH
dGsvV2ViUHJvY2Vzc1Rlc3RSdW5uZXIuaCBcCisJVG9vbHMvVGVzdFdlYktpdEd0ay9ndGsvV2Vi
S2l0Mkd0ay9UZXN0TWFpbi5jcHAgXAorCVRvb2xzL1Rlc3RXZWJLaXRHdGsvZ3RrL1dlYktpdDJH
dGsvVGVzdE1haW4uaCBcCisJVG9vbHMvVGVzdFdlYktpdEd0ay9ndGsvV2ViS2l0Mkd0ay9XZWJW
aWV3VGVzdC5jcHAgXAorCVRvb2xzL1Rlc3RXZWJLaXRHdGsvZ3RrL1dlYktpdDJHdGsvV2ViVmll
d1Rlc3QuaAorCitMaWJyYXJpZXNfbGliVGVzdFdlYktpdDJHdGtBUElfbGFfQ1BQRkxBR1MgPSAk
KHdlYmtpdDJndGtfdGVzdHNfY3BwZmxhZ3MpCisKKwogbm9pbnN0X1BST0dSQU1TICs9IFwKLQlQ
cm9ncmFtcy9UZXN0V2ViS2l0QVBJL1Rlc3RXVEYgXAotCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkv
VGVzdEphdmFTY3JpcHRDb3JlIFwKLQlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJDb3Jl
IFwKLQlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1Rlc3RHdGsKKwlQcm9ncmFtcy9UZXN0V2ViS2l0
QVBJL1dURi9UZXN0V1RGIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL0phdmFTY3JpcHRDb3Jl
L1Rlc3RKYXZhU2NyaXB0Q29yZSBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJDb3JlL1Rl
c3RXZWJDb3JlIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYkNvcmVHdGsvVGVzdFdlYkNv
cmVHdGsgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0R3RrL3Rlc3RhcHBsaWNhdGlv
bmNhY2hlIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdEd0ay90ZXN0Y29udGV4dG1l
bnUgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0R3RrL3Rlc3Rkb21kb2N1bWVudCBc
CisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXRHdGsvdGVzdGRvbWRvbXdpbmRvdyBcCisJ
UHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXRHdGsvdGVzdGRvbW5vZGUgXAorCVByb2dyYW1z
L1Rlc3RXZWJLaXRBUEkvV2ViS2l0R3RrL3Rlc3RodHRwYmFja2VuZCBcCisJUHJvZ3JhbXMvVGVz
dFdlYktpdEFQSS9XZWJLaXRHdGsvdGVzdGZhdmljb25kYXRhYmFzZSBcCisJUHJvZ3JhbXMvVGVz
dFdlYktpdEFQSS9XZWJLaXRHdGsvdGVzdGxvYWRpbmcgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRB
UEkvV2ViS2l0R3RrL3Rlc3RnbG9iYWxzIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktp
dEd0ay90ZXN0bWltZWhhbmRsaW5nIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdEd0
ay90ZXN0bmV0d29ya3JlcXVlc3QgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0R3Rr
L3Rlc3RuZXR3b3JrcmVzcG9uc2UgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0R3Rr
L3Rlc3R3ZWJmcmFtZSBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXRHdGsvdGVzdHdl
YmJhY2tmb3J3YXJkbGlzdCBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXRHdGsvdGVz
dHdlYmhpc3RvcnlpdGVtIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdEd0ay90ZXN0
d2luZG93IFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdEd0ay90ZXN0ZG93bmxvYWQg
XAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0R3RrL3Rlc3RhdGsgXAorCVByb2dyYW1z
L1Rlc3RXZWJLaXRBUEkvV2ViS2l0R3RrL3Rlc3RhdGtyb2xlcyBcCisJUHJvZ3JhbXMvVGVzdFdl
YktpdEFQSS9XZWJLaXRHdGsvdGVzdGhpdHRlc3RyZXN1bHQgXAorCVByb2dyYW1zL1Rlc3RXZWJL
aXRBUEkvV2ViS2l0R3RrL3Rlc3R3ZWJpbnNwZWN0b3IgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRB
UEkvV2ViS2l0R3RrL3Rlc3R3ZWJzZXR0aW5ncyBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9X
ZWJLaXRHdGsvdGVzdHdlYnJlc291cmNlIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktp
dEd0ay90ZXN0d2ViZGF0YXNvdXJjZSBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXRH
dGsvdGVzdHdlYnBsdWdpbmRhdGFiYXNlIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktp
dEd0ay90ZXN0d2VidmlldyBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXRHdGsvdGVz
dGtleWV2ZW50cyBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXRHdGsvdGVzdGNvcHlh
bmRwYXN0ZQogCiBpZiBFTkFCTEVfV0VCS0lUMgogbm9pbnN0X1BST0dSQU1TICs9IFwKLQlQcm9n
cmFtcy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXQyCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9X
ZWJLaXQyL1Rlc3RXZWJLaXQyIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdDJHdGsv
SW5zcGVjdG9yVGVzdFNlcnZlciBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXQyR3Rr
L1Rlc3RBdXRoZW50aWNhdGlvbiBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXQyR3Rr
L1Rlc3RCYWNrRm9yd2FyZExpc3QgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0Mkd0
ay9UZXN0Q29udGV4dE1lbnUgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0Mkd0ay9U
ZXN0Q29va2llTWFuYWdlciBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXQyR3RrL1Rl
c3RET01Ob2RlIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdDJHdGsvVGVzdERvd25s
b2FkcyBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXQyR3RrL1Rlc3RGcmFtZSBcCisJ
UHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXQyR3RrL1Rlc3RJbnNwZWN0b3IgXAorCVByb2dy
YW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0Mkd0ay9UZXN0SW5zcGVjdG9yU2VydmVyIFwKKwlQcm9n
cmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdDJHdGsvVGVzdExvYWRlckNsaWVudCBcCisJUHJvZ3Jh
bXMvVGVzdFdlYktpdEFQSS9XZWJLaXQyR3RrL1Rlc3RQcmludGluZyBcCisJUHJvZ3JhbXMvVGVz
dFdlYktpdEFQSS9XZWJLaXQyR3RrL1Rlc3RSZXNvdXJjZXMgXAorCVByb2dyYW1zL1Rlc3RXZWJL
aXRBUEkvV2ViS2l0Mkd0ay9UZXN0U1NMIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktp
dDJHdGsvVGVzdFVJQ2xpZW50IFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdDJHdGsv
VGVzdFdlYkV4dGVuc2lvbnMgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0Mkd0ay9U
ZXN0V2ViS2l0VmVyc2lvbiBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXQyR3RrL1Rl
c3RXZWJLaXRGYXZpY29uRGF0YWJhc2UgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0
Mkd0ay9UZXN0V2ViS2l0RmluZENvbnRyb2xsZXIgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkv
V2ViS2l0Mkd0ay9UZXN0V2ViS2l0UG9saWN5Q2xpZW50IFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0
QVBJL1dlYktpdDJHdGsvVGVzdFdlYktpdFNldHRpbmdzIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0
QVBJL1dlYktpdDJHdGsvVGVzdFdlYktpdFdlYkNvbnRleHQgXAorCVByb2dyYW1zL1Rlc3RXZWJL
aXRBUEkvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0V2ViVmlldyBcCisJUHJvZ3JhbXMvVGVzdFdlYktp
dEFQSS9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRXZWJWaWV3R3JvdXAgXAorCVByb2dyYW1zL1Rlc3RX
ZWJLaXRBUEkvV2ViS2l0Mkd0ay9UZXN0V2ViVmlld0VkaXRvcgorCitpZiBIQVZFX0FUU1BJMgor
bm9pbnN0X1BST0dSQU1TICs9IFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdDJHdGsv
QWNjZXNzaWJpbGl0eVRlc3RTZXJ2ZXIgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0
Mkd0ay9UZXN0V2ViS2l0QWNjZXNzaWJpbGl0eQorZW5kaWYKIGVuZGlmICMgRU5BQkxFX1dFQktJ
VDIKIAotUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0V1RGX0NQUEZMQUdTID0gXAorUHJvZ3Jh
bXNfVGVzdFdlYktpdEFQSV9XVEZfVGVzdFdURl9DUFBGTEFHUyA9IFwKIAkkKExpYnJhcmllc19s
aWJUZXN0V2ViS2l0QVBJTWFpbl9sYV9DUFBGTEFHUykgXAogCSQoR0xJQl9MSUJTKSBcCiAJJChD
QUlST19DRkxBR1MpCiAKLVByb2dyYW1zX1Rlc3RXZWJLaXRBUElfVGVzdFdURl9DWFhGTEFHUyA9
IFwKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV1RGX1Rlc3RXVEZfQ1hYRkxBR1MgPSBcCiAJLURH
VEVTVF9IQVNfUlRUST0wIFwKIAkkKGdsb2JhbF9jeHhmbGFncykKIAotUHJvZ3JhbXNfVGVzdFdl
YktpdEFQSV9UZXN0V1RGX0xEQUREID0gXAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XVEZfVGVz
dFdURl9MREFERCA9IFwKIAlMaWJyYXJpZXMvbGliVGVzdFdlYktpdEFQSU1haW4ubGEgXAogCUxp
YnJhcmllcy9saWJndGVzdC5sYSBcCiAJbGliV1RGLmxhIFwKIAkkKEdUS19MSUJTKSBcCiAJJChH
TElCX0xJQlMpCiAKLVByb2dyYW1zX1Rlc3RXZWJLaXRBUElfVGVzdFdURl9MREZMQUdTID0gXAor
UHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XVEZfVGVzdFdURl9MREZMQUdTID0gXAogCS1uby1pbnN0
YWxsCiAKLVByb2dyYW1zX1Rlc3RXZWJLaXRBUElfVGVzdFdURl9TT1VSQ0VTID0gXAorUHJvZ3Jh
bXNfVGVzdFdlYktpdEFQSV9XVEZfVGVzdFdURl9TT1VSQ0VTID0gXAogCVRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV1RGL0F0b21pY1N0cmluZy5jcHAgXAogCVRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL0NTdHJpbmcuY3BwIFwKIAlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9D
aGVja2VkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwIFwKQEAgLTc4LDIzICsyMjYsMjMgQEAgUHJv
Z3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0V1RGX1NPVVJDRVMgPSBcCiAJVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XVEYvVmVjdG9yLmNwcCBcCiAJVG9vbHMvVGVzdFdlYktpdEFQSS9XVEZTdHJp
bmdVdGlsaXRpZXMuaAogCi1Qcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RKYXZhU2NyaXB0Q29y
ZV9DUFBGTEFHUyA9IFwKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfSmF2YVNjcmlwdENvcmVfVGVz
dEphdmFTY3JpcHRDb3JlX0NQUEZMQUdTID0gXAogCSQoTGlicmFyaWVzX2xpYlRlc3RXZWJLaXRB
UElNYWluX2xhX0NQUEZMQUdTKQogCi1Qcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RKYXZhU2Ny
aXB0Q29yZV9DWFhGTEFHUyA9IFwKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfSmF2YVNjcmlwdENv
cmVfVGVzdEphdmFTY3JpcHRDb3JlX0NYWEZMQUdTID0gXAogCS1ER1RFU1RfSEFTX1JUVEk9MCBc
CiAJJChnbG9iYWxfY3h4ZmxhZ3MpCiAKLVByb2dyYW1zX1Rlc3RXZWJLaXRBUElfVGVzdEphdmFT
Y3JpcHRDb3JlX0xEQUREID0gXAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9KYXZhU2NyaXB0Q29y
ZV9UZXN0SmF2YVNjcmlwdENvcmVfTERBREQgPSBcCiAJTGlicmFyaWVzL2xpYlRlc3RXZWJLaXRB
UElNYWluLmxhIFwKIAlMaWJyYXJpZXMvbGliZ3Rlc3QubGEgXAogCWxpYldURi5sYSBcCiAJJChH
VEtfTElCUykKIAotUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0SmF2YVNjcmlwdENvcmVfTERG
TEFHUyA9IFwKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfSmF2YVNjcmlwdENvcmVfVGVzdEphdmFT
Y3JpcHRDb3JlX0xERkxBR1MgPSBcCiAJLW5vLWluc3RhbGwKIAotUHJvZ3JhbXNfVGVzdFdlYktp
dEFQSV9UZXN0SmF2YVNjcmlwdENvcmVfU09VUkNFUyA9IFwKK1Byb2dyYW1zX1Rlc3RXZWJLaXRB
UElfSmF2YVNjcmlwdENvcmVfVGVzdEphdmFTY3JpcHRDb3JlX1NPVVJDRVMgPSBcCiAJVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9KYXZhU2NyaXB0Q29yZS9WTUluc3BlY3Rvci5jcHAKIAogd2Vi
Y29yZV9sYXllcl9kZXBzID0gXApAQCAtMTI5LDE1ICsyNzcsMTUgQEAgbGliV2ViQ29yZUxheWVy
LmE6ICQod2ViY29yZV9sYXllcl9kZXBzKQogRElTVENMRUFORklMRVMgKz0gXAogCSQodG9wX2J1
aWxkZGlyKS9saWJXZWJDb3JlTGF5ZXIuYQogCi1Qcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RX
ZWJDb3JlX0NQUEZMQUdTID0gXAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJDb3JlX1Rlc3RX
ZWJDb3JlX0NQUEZMQUdTID0gXAogCSQoTGlicmFyaWVzX2xpYlRlc3RXZWJLaXRBUElNYWluX2xh
X0NQUEZMQUdTKSBcCiAJLUkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9p
bmNsdWRlCiAKLVByb2dyYW1zX1Rlc3RXZWJLaXRBUElfVGVzdFdlYkNvcmVfQ1hYRkxBR1MgPSBc
CitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYkNvcmVfVGVzdFdlYkNvcmVfQ1hYRkxBR1MgPSBc
CiAJLURHVEVTVF9IQVNfUlRUST0wIFwKIAkkKGdsb2JhbF9jeHhmbGFncykKIAotUHJvZ3JhbXNf
VGVzdFdlYktpdEFQSV9UZXN0V2ViQ29yZV9MREFERCA9IFwKK1Byb2dyYW1zX1Rlc3RXZWJLaXRB
UElfV2ViQ29yZV9UZXN0V2ViQ29yZV9MREFERCA9IFwKIAlMaWJyYXJpZXMvbGliVGVzdFdlYktp
dEFQSU1haW4ubGEgXAogCUxpYnJhcmllcy9saWJndGVzdC5sYSBcCiAJbGliamF2YXNjcmlwdGNv
cmVndGstQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkAuQFdFQktJVEdUS19BUElfTUlOT1Jf
VkVSU0lPTkAubGEgXApAQCAtMTY0LDE1ICszMTIsMTUgQEAgUHJvZ3JhbXNfVGVzdFdlYktpdEFQ
SV9UZXN0V2ViQ29yZV9MREFERCA9IFwKIAkkKFhUX0xJQlMpIFwKIAkkKFpMSUJfTElCUykKIAot
UHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0V2ViQ29yZV9MREZMQUdTID0gXAorUHJvZ3JhbXNf
VGVzdFdlYktpdEFQSV9XZWJDb3JlX1Rlc3RXZWJDb3JlX0xERkxBR1MgPSBcCiAJLW5vLWluc3Rh
bGwKIAotUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0V2ViQ29yZV9TT1VSQ0VTID0gXAorUHJv
Z3JhbXNfVGVzdFdlYktpdEFQSV9XZWJDb3JlX1Rlc3RXZWJDb3JlX1NPVVJDRVMgPSBcCiAJVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1VSTC5jcHAgXAogCVRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViQ29yZS9MYXlvdXRVbml0LmNwcAogCi1Qcm9ncmFtc19UZXN0V2ViS2l0
QVBJX1Rlc3RHdGtfQ1BQRkxBR1MgPSBcCi0JJChQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RX
VEZfQ1BQRkxBR1MpIFwKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViQ29yZUd0a19UZXN0V2Vi
Q29yZUd0a19DUFBGTEFHUyA9IFwKKwkkKFByb2dyYW1zX1Rlc3RXZWJLaXRBUElfV1RGX1Rlc3RX
VEZfQ1BQRkxBR1MpIFwKIAkkKHBsYXRmb3JtX2NwcGZsYWdzKSBcCiAJJChwbGF0Zm9ybWd0a19j
cHBmbGFncykgXAogCSQod2ViY29yZV9jcHBmbGFncykgXApAQCAtMTgyLDExICszMzAsMTEgQEAg
UHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0R3RrX0NQUEZMQUdTID0gXAogCSQoR1RLX0NGTEFH
UykgXAogCSQoTElCU09VUF9DRkxBR1MpCiAKLVByb2dyYW1zX1Rlc3RXZWJLaXRBUElfVGVzdEd0
a19DWFhGTEFHUyA9IFwKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViQ29yZUd0a19UZXN0V2Vi
Q29yZUd0a19DWFhGTEFHUyA9IFwKIAktREdURVNUX0hBU19SVFRJPTAgXAogCSQoZ2xvYmFsX2N4
eGZsYWdzKQogCi1Qcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RHdGtfTERBREQgPSBcCitQcm9n
cmFtc19UZXN0V2ViS2l0QVBJX1dlYkNvcmVHdGtfVGVzdFdlYkNvcmVHdGtfTERBREQgPSBcCiAJ
TGlicmFyaWVzL2xpYlRlc3RXZWJLaXRBUElNYWluLmxhIFwKIAlMaWJyYXJpZXMvbGliZ3Rlc3Qu
bGEgXAogCWxpYmphdmFzY3JpcHRjb3JlZ3RrLUBXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05A
LkBXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05ALmxhIFwKQEAgLTE5OCwxMCArMzQ2LDEwIEBA
IFByb2dyYW1zX1Rlc3RXZWJLaXRBUElfVGVzdEd0a19MREFERCA9IFwKIAkkKEdUS19MSUJTKSBc
CiAJJChMSUJTT1VQX0xJQlMpCiAKLVByb2dyYW1zX1Rlc3RXZWJLaXRBUElfVGVzdEd0a19MREZM
QUdTID0gXAotCSQoUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0V1RGX0xERkxBR1MpCitQcm9n
cmFtc19UZXN0V2ViS2l0QVBJX1dlYkNvcmVHdGtfVGVzdFdlYkNvcmVHdGtfTERGTEFHUyA9IFwK
KwkkKFByb2dyYW1zX1Rlc3RXZWJLaXRBUElfV1RGX1Rlc3RXVEZfTERGTEFHUykKIAotUHJvZ3Jh
bXNfVGVzdFdlYktpdEFQSV9UZXN0R3RrX1NPVVJDRVMgPSBcCitQcm9ncmFtc19UZXN0V2ViS2l0
QVBJX1dlYkNvcmVHdGtfVGVzdFdlYkNvcmVHdGtfU09VUkNFUyA9IFwKIAlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbnRTaXplLmNwcCBcCkBAIC0yMTEsMTkgKzM1OSwxOTIgQEAgUHJvZ3JhbXNfVGVzdFdl
YktpdEFQSV9UZXN0R3RrX1NPVVJDRVMgPSBcCiAJVG9vbHMvVGVzdFdlYktpdEFQSS9jb25maWcu
aCBcCiAJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9ndGsvSW5wdXRNZXRob2RGaWx0ZXIuY3Bw
CiAKLVByb2dyYW1zX1Rlc3RXZWJLaXRBUElfVGVzdFdlYktpdDJfQ1BQRkxBR1MgPSBcCi0JJChQ
cm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RXVEZfQ1BQRkxBR1MpIFwKK1Byb2dyYW1zX1Rlc3RX
ZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3RhcHBsaWNhdGlvbmNhY2hlX1NPVVJDRVMgPSBcCisJVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGFwcGxpY2F0aW9uY2FjaGUuYwor
UHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGFwcGxpY2F0aW9uY2FjaGVfQ0ZM
QUdTID0gJCh3ZWJraXRndGtfdGVzdHNfY2ZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9X
ZWJLaXRHdGtfdGVzdGFwcGxpY2F0aW9uY2FjaGVfTERBREQgPSAkKHdlYmtpdGd0a190ZXN0c19s
ZGFkZCkKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3RhcHBsaWNhdGlvbmNh
Y2hlX0xERkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0
V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0Y29udGV4dG1lbnVfU09VUkNFUyA9IFwKKwlUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0Y29udGV4dG1lbnUuYworUHJvZ3JhbXNf
VGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGNvbnRleHRtZW51X0NGTEFHUyA9ICQod2Via2l0
Z3RrX3Rlc3RzX2NmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3Rj
b250ZXh0bWVudV9MREFERCA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVz
dFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGNvbnRleHRtZW51X0xERkxBR1MgPSAkKHdlYmtpdGd0
a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0
ZG9tZG9jdW1lbnRfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dEd0ay90ZXN0ZG9tZG9jdW1lbnQuYworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtf
dGVzdGRvbWRvY3VtZW50X0NGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2NmbGFncykKK1Byb2dy
YW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3Rkb21kb2N1bWVudF9MREFERCA9ICQod2Vi
a2l0Z3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVz
dGRvbWRvY3VtZW50X0xERkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19sZGZsYWdzKQorCitQcm9n
cmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0ZG9tZG9td2luZG93X1NPVVJDRVMgPSBc
CisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGRvbWRvbXdpbmRvdy5j
CitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0ZG9tZG9td2luZG93X0NGTEFH
UyA9ICQod2Via2l0Z3RrX3Rlc3RzX2NmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2Vi
S2l0R3RrX3Rlc3Rkb21kb213aW5kb3dfTERBREQgPSAkKHdlYmtpdGd0a190ZXN0c19sZGFkZCkK
K1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3Rkb21kb213aW5kb3dfTERGTEFH
UyA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElf
V2ViS2l0R3RrX3Rlc3Rkb21ub2RlX1NPVVJDRVMgPSBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRHdGsvdGVzdGRvbW5vZGUuYworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJL
aXRHdGtfdGVzdGRvbW5vZGVfQ0ZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfY2ZsYWdzKQorUHJv
Z3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGRvbW5vZGVfTERBREQgPSAkKHdlYmtp
dGd0a190ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3Rk
b21ub2RlX0xERkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19U
ZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0aHR0cGJhY2tlbmRfU09VUkNFUyA9IFwKKwlUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0aHR0cGJhY2tlbmQuYworUHJvZ3Jh
bXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGh0dHBiYWNrZW5kX0NGTEFHUyA9ICQod2Vi
a2l0Z3RrX3Rlc3RzX2NmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rl
c3RodHRwYmFja2VuZF9MREFERCA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNf
VGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGh0dHBiYWNrZW5kX0xERkxBR1MgPSAkKHdlYmtp
dGd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190
ZXN0ZmF2aWNvbmRhdGFiYXNlX1NPVVJDRVMgPSBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRHdGsvdGVzdGZhdmljb25kYXRhYmFzZS5jIFwKKwlUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdEd0ay90ZXN0X3V0aWxzLmMKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2Vi
S2l0R3RrX3Rlc3RmYXZpY29uZGF0YWJhc2VfQ0ZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfY2Zs
YWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGZhdmljb25kYXRhYmFz
ZV9MREFERCA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQ
SV9XZWJLaXRHdGtfdGVzdGZhdmljb25kYXRhYmFzZV9MREZMQUdTID0gJCh3ZWJraXRndGtfdGVz
dHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGdsb2Jh
bHNfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0
Z2xvYmFscy5jCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0Z2xvYmFsc19D
RkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19jZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJ
X1dlYktpdEd0a190ZXN0Z2xvYmFsc19MREFERCA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkYWRkKQor
UHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGdsb2JhbHNfTERGTEFHUyA9ICQo
d2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0
R3RrX3Rlc3Rsb2FkaW5nX1NPVVJDRVMgPSBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRHdGsvdGVzdGxvYWRpbmcuYworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtf
dGVzdGxvYWRpbmdfQ0ZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfY2ZsYWdzKQorUHJvZ3JhbXNf
VGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGxvYWRpbmdfTERBREQgPSAkKHdlYmtpdGd0a190
ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3Rsb2FkaW5n
X0xERkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2Vi
S2l0QVBJX1dlYktpdEd0a190ZXN0bWltZWhhbmRsaW5nX1NPVVJDRVMgPSBcCisJVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdG1pbWVoYW5kbGluZy5jIFwKKwlUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0X3V0aWxzLmMKK1Byb2dyYW1zX1Rlc3RX
ZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3RtaW1laGFuZGxpbmdfQ0ZMQUdTID0gJCh3ZWJraXRndGtf
dGVzdHNfY2ZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdG1pbWVo
YW5kbGluZ19MREFERCA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdl
YktpdEFQSV9XZWJLaXRHdGtfdGVzdG1pbWVoYW5kbGluZ19MREZMQUdTID0gJCh3ZWJraXRndGtf
dGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdG5l
dHdvcmtyZXF1ZXN0X1NPVVJDRVMgPSBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRHdGsvdGVzdG5ldHdvcmtyZXF1ZXN0LmMKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0
R3RrX3Rlc3RuZXR3b3JrcmVxdWVzdF9DRkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19jZmxhZ3Mp
CitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0bmV0d29ya3JlcXVlc3RfTERB
REQgPSAkKHdlYmtpdGd0a190ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2Vi
S2l0R3RrX3Rlc3RuZXR3b3JrcmVxdWVzdF9MREZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfbGRm
bGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdG5ldHdvcmtyZXNw
b25zZV9TT1VSQ0VTID0gXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rl
c3RuZXR3b3JrcmVzcG9uc2UuYworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVz
dG5ldHdvcmtyZXNwb25zZV9DRkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19jZmxhZ3MpCitQcm9n
cmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0bmV0d29ya3Jlc3BvbnNlX0xEQUREID0g
JCh3ZWJraXRndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0
a190ZXN0bmV0d29ya3Jlc3BvbnNlX0xERkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19sZGZsYWdz
KQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0d2ViZnJhbWVfU09VUkNF
UyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2ViZnJhbWUu
YworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdHdlYmZyYW1lX0NGTEFHUyA9
ICQod2Via2l0Z3RrX3Rlc3RzX2NmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0
R3RrX3Rlc3R3ZWJmcmFtZV9MREFERCA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3Jh
bXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdHdlYmZyYW1lX0xERkxBR1MgPSAkKHdlYmtp
dGd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190
ZXN0d2VicGx1Z2luZGF0YWJhc2VfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdEd0ay90ZXN0d2VicGx1Z2luZGF0YWJhc2UuYworUHJvZ3JhbXNfVGVzdFdlYktp
dEFQSV9XZWJLaXRHdGtfdGVzdHdlYnBsdWdpbmRhdGFiYXNlX0NGTEFHUyA9ICQod2Via2l0Z3Rr
X3Rlc3RzX2NmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3R3ZWJw
bHVnaW5kYXRhYmFzZV9MREFERCA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNf
VGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdHdlYnBsdWdpbmRhdGFiYXNlX0xERkxBR1MgPSAk
KHdlYmtpdGd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktp
dEd0a190ZXN0d2ViYmFja2ZvcndhcmRsaXN0X1NPVVJDRVMgPSBcCisJVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYmJhY2tmb3J3YXJkbGlzdC5jCitQcm9ncmFtc19U
ZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0d2ViYmFja2ZvcndhcmRsaXN0X0NGTEFHUyA9ICQo
d2Via2l0Z3RrX3Rlc3RzX2NmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3Rr
X3Rlc3R3ZWJiYWNrZm9yd2FyZGxpc3RfTERBREQgPSAkKHdlYmtpdGd0a190ZXN0c19sZGFkZCkK
K1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3R3ZWJiYWNrZm9yd2FyZGxpc3Rf
TERGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJL
aXRBUElfV2ViS2l0R3RrX3Rlc3R3ZWJoaXN0b3J5aXRlbV9TT1VSQ0VTID0gXAorCVRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJoaXN0b3J5aXRlbS5jCitQcm9ncmFt
c19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0d2ViaGlzdG9yeWl0ZW1fQ0ZMQUdTID0gJCh3
ZWJraXRndGtfdGVzdHNfY2ZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtf
dGVzdHdlYmhpc3RvcnlpdGVtX0xEQUREID0gJCh3ZWJraXRndGtfdGVzdHNfbGRhZGQpCitQcm9n
cmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0d2ViaGlzdG9yeWl0ZW1fTERGTEFHUyA9
ICQod2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2Vi
S2l0R3RrX3Rlc3R3aW5kb3dfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdEd0ay90ZXN0d2luZG93LmMKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3Rr
X3Rlc3R3aW5kb3dfQ0ZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfY2ZsYWdzKQorUHJvZ3JhbXNf
VGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdHdpbmRvd19MREFERCA9ICQod2Via2l0Z3RrX3Rl
c3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdHdpbmRvd19M
REZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktp
dEFQSV9XZWJLaXRHdGtfdGVzdGRvd25sb2FkX1NPVVJDRVMgPSBcCisJVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGRvd25sb2FkLmMKK1Byb2dyYW1zX1Rlc3RXZWJLaXRB
UElfV2ViS2l0R3RrX3Rlc3Rkb3dubG9hZF9DRkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19jZmxh
Z3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0ZG93bmxvYWRfTERBREQg
PSAkKHdlYmtpdGd0a190ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0
R3RrX3Rlc3Rkb3dubG9hZF9MREZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfbGRmbGFncykKKwor
UHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGF0a19TT1VSQ0VTID0gXAorCVRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RhdGsuYworUHJvZ3JhbXNfVGVz
dFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGF0a19DRkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19j
ZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0YXRrX0xEQUREID0g
JCh3ZWJraXRndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0
a190ZXN0YXRrX0xERkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFt
c19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0YXRrcm9sZXNfU09VUkNFUyA9IFwKKwlUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0YXRrcm9sZXMuYworUHJvZ3JhbXNf
VGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGF0a3JvbGVzX0NGTEFHUyA9ICQod2Via2l0Z3Rr
X3Rlc3RzX2NmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3RhdGty
b2xlc19MREFERCA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktp
dEFQSV9XZWJLaXRHdGtfdGVzdGF0a3JvbGVzX0xERkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19s
ZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0d2ViaW5zcGVj
dG9yX1NPVVJDRVMgPSBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVz
dHdlYmluc3BlY3Rvci5jIFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90
ZXN0X3V0aWxzLmMKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3R3ZWJpbnNw
ZWN0b3JfQ0ZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfY2ZsYWdzKQorUHJvZ3JhbXNfVGVzdFdl
YktpdEFQSV9XZWJLaXRHdGtfdGVzdHdlYmluc3BlY3Rvcl9MREFERCA9ICQod2Via2l0Z3RrX3Rl
c3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdHdlYmluc3Bl
Y3Rvcl9MREZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVz
dFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdHdlYnNldHRpbmdzX1NPVVJDRVMgPSBcCisJVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYnNldHRpbmdzLmMKK1Byb2dyYW1z
X1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3R3ZWJzZXR0aW5nc19DRkxBR1MgPSAkKHdlYmtp
dGd0a190ZXN0c19jZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0
d2Vic2V0dGluZ3NfTERBREQgPSAkKHdlYmtpdGd0a190ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1Rl
c3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3R3ZWJzZXR0aW5nc19MREZMQUdTID0gJCh3ZWJraXRn
dGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVz
dHdlYnJlc291cmNlX1NPVVJDRVMgPSBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRHdGsvdGVzdHdlYnJlc291cmNlLmMKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3Rr
X3Rlc3R3ZWJyZXNvdXJjZV9DRkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19jZmxhZ3MpCitQcm9n
cmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0d2VicmVzb3VyY2VfTERBREQgPSAkKHdl
YmtpdGd0a190ZXN0c19sZGFkZCkKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtf
dGVzdHdlYmRhdGFzb3VyY2VfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdEd0ay90ZXN0d2ViZGF0YXNvdXJjZS5jCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dl
YktpdEd0a190ZXN0d2ViZGF0YXNvdXJjZV9DRkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19jZmxh
Z3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0d2ViZGF0YXNvdXJjZV9M
REFERCA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkYWRkKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJ
X1dlYktpdEd0a190ZXN0d2Vidmlld19TT1VSQ0VTID0gXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJ2aWV3LmMgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRHdGsvdGVzdF91dGlscy5jCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190
ZXN0d2Vidmlld19DRkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19jZmxhZ3MpCitQcm9ncmFtc19U
ZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0d2Vidmlld19MREFERCA9ICQod2Via2l0Z3RrX3Rl
c3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdHdlYnZpZXdf
TERGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJL
aXRBUElfV2ViS2l0R3RrX3Rlc3RoaXR0ZXN0cmVzdWx0X1NPVVJDRVMgPSBcCisJVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGhpdHRlc3RyZXN1bHQuYworUHJvZ3JhbXNf
VGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGhpdHRlc3RyZXN1bHRfQ0ZMQUdTID0gJCh3ZWJr
aXRndGtfdGVzdHNfY2ZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVz
dGhpdHRlc3RyZXN1bHRfTERBREQgPSAkKHdlYmtpdGd0a190ZXN0c19sZGFkZCkKKworUHJvZ3Jh
bXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGtleWV2ZW50c19TT1VSQ0VTID0gXAorCVRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RrZXlldmVudHMuYworUHJvZ3Jh
bXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGtleWV2ZW50c19DRkxBR1MgPSAkKHdlYmtp
dGd0a190ZXN0c19jZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0
a2V5ZXZlbnRzX0xEQUREID0gJCh3ZWJraXRndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0
V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0a2V5ZXZlbnRzX0xERkxBR1MgPSAkKHdlYmtpdGd0a190
ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0Y29w
eWFuZHBhc3RlX1NPVVJDRVMgPSBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRH
dGsvdGVzdGNvcHlhbmRwYXN0ZS5jIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3Rr
VmVyc2lvbmluZy5jCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0Y29weWFu
ZHBhc3RlX0NGTEFHUyA9IFwKKwkkKHdlYmtpdGd0a190ZXN0c19jZmxhZ3MpIFwKKwktSSQoc3Jj
ZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsgXAorCS1JJChzcmNkaXIpL1NvdXJjZS9X
ZWJDb3JlCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0Y29weWFuZHBhc3Rl
X0xEQUREID0gJCh3ZWJraXRndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJ
X1dlYktpdEd0a190ZXN0Y29weWFuZHBhc3RlX0xERkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19s
ZGZsYWdzKQorCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Ml9UZXN0V2ViS2l0Ml9D
UFBGTEFHUyA9IFwKKwkkKFByb2dyYW1zX1Rlc3RXZWJLaXRBUElfV1RGX1Rlc3RXVEZfQ1BQRkxB
R1MpIFwKIAktSSQodG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL2luY2x1ZGUg
XAogCSQoRlJFRVRZUEVfQ0ZMQUdTKSBcCiAJJChHTElCX0NGTEFHUykgXAogCSQoR1RLX0NGTEFH
UykgXAogCSQoTElCU09VUF9DRkxBR1MpCiAKLVByb2dyYW1zX1Rlc3RXZWJLaXRBUElfVGVzdFdl
YktpdDJfQ1hYRkxBR1MgPSBcCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJfVGVzdFdl
YktpdDJfQ1hYRkxBR1MgPSBcCiAJLURHVEVTVF9IQVNfUlRUST0wIFwKIAkkKGdsb2JhbF9jeHhm
bGFncykKIAotUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0V2ViS2l0Ml9MREFERCA9IFwKK1By
b2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Ml9UZXN0V2ViS2l0Ml9MREFERCA9IFwKIAlMaWJy
YXJpZXMvbGliVGVzdFdlYktpdEFQSU1haW4ubGEgXAogCUxpYnJhcmllcy9saWJndGVzdC5sYSBc
CiAJbGliamF2YXNjcmlwdGNvcmVndGstQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkAuQFdF
QktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkAubGEgXApAQCAtMjMzLDEwICs1NTQsMTAgQEAgUHJv
Z3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0V2ViS2l0Ml9MREFERCA9IFwKIAkkKEdUS19MSUJTKSBc
CiAJJChMSUJTT1VQX0xJQlMpCiAKLVByb2dyYW1zX1Rlc3RXZWJLaXRBUElfVGVzdFdlYktpdDJf
TERGTEFHUyA9IFwKLQkkKFByb2dyYW1zX1Rlc3RXZWJLaXRBUElfVGVzdFdURl9MREZMQUdTKQor
UHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyX1Rlc3RXZWJLaXQyX0xERkxBR1MgPSBcCisJ
JChQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dURl9UZXN0V1RGX0xERkxBR1MpCiAKLVByb2dyYW1z
X1Rlc3RXZWJLaXRBUElfVGVzdFdlYktpdDJfU09VUkNFUyA9IFwKK1Byb2dyYW1zX1Rlc3RXZWJL
aXRBUElfV2ViS2l0Ml9UZXN0V2ViS2l0Ml9TT1VSQ0VTID0gXAogCVRvb2xzL1Rlc3RXZWJLaXRB
UEkvY29uZmlnLmggXAogCVRvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1BsYXRmb3JtVXRpbGl0aWVz
R3RrLmNwcCBcCiAJVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvUGxhdGZvcm1XZWJWaWV3R3RrLmNw
cCBcCkBAIC0zNTcsMTEgKzY3OCwyNDUgQEAgTGlicmFyaWVzX2xpYlRlc3RXZWJLaXRBUElJbmpl
Y3RlZEJ1bmRsZV9sYV9DRkxBR1MgPSBcCiAJJChnbG9iYWxfY2ZsYWdzKQogCiAKLXN0YW1wLXRl
c3R3ZWJraXRhcGktd2ViY29yZS1mb3J3YXJkaW5nLWhlYWRlcnM6ICQoV2ViS2l0MikvU2NyaXB0
cy9nZW5lcmF0ZS1mb3J3YXJkaW5nLWhlYWRlcnMucGwgJChQcm9ncmFtc19UZXN0V2ViS2l0QVBJ
X1Rlc3RXZWJDb3JlX1NPVVJDRVMpCitpZiBFTkFCTEVfV0VCS0lUMgorbm9pbnN0X0xUTElCUkFS
SUVTICs9IExpYnJhcmllcy9XZWJFeHRlbnNpb25zL2xpYldlYkV4dGVuc2lvblRlc3QubGEKK2Vu
ZGlmCisKK0xpYnJhcmllc19XZWJFeHRlbnNpb25zX2xpYldlYkV4dGVuc2lvblRlc3RfbGFfU09V
UkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvV2ViRXh0ZW5z
aW9uVGVzdC5jcHAKKworTGlicmFyaWVzX1dlYkV4dGVuc2lvbnNfbGliV2ViRXh0ZW5zaW9uVGVz
dF9sYV9MREZMQUdTID0gXAorCS1ycGF0aCAke3NoZWxsIHB3ZH0vJCh0b3BfYnVpbGRkaXIpL0xp
YnJhcmllcy9XZWJFeHRlbnNpb25zLy5saWJzIFwKKwkkKG5vX3VuZGVmaW5lZCkgXAorCS1hdm9p
ZC12ZXJzaW9uIFwKKwktbW9kdWxlCisKK0xpYnJhcmllc19XZWJFeHRlbnNpb25zX2xpYldlYkV4
dGVuc2lvblRlc3RfbGFfQ1BQRkxBR1MgPSBcCisJLUkkKHNyY2RpcikvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrIFwKKwktSSQodG9wX2J1aWxkZGlyKS9E
ZXJpdmVkU291cmNlcyBcCisJLUkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0
Mi93ZWJraXQyZXh0ZW5zaW9uL2luY2x1ZGUgXAorCS1EV0VCS0lUMl9DT01QSUxBVElPTiBcCisJ
JCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQorCitMaWJyYXJpZXNfV2ViRXh0ZW5zaW9uc19s
aWJXZWJFeHRlbnNpb25UZXN0X2xhX0NYWEZMQUdTID0gXAorICAgICAgICAkKGdsb2JhbF9jeHhm
bGFncykKKworTGlicmFyaWVzX1dlYkV4dGVuc2lvbnNfbGliV2ViRXh0ZW5zaW9uVGVzdF9sYV9D
RkxBR1MgPSBcCisgICAgICAgICQoZ2xvYmFsX2NmbGFncykKKworCitpZiBFTkFCTEVfV0VCS0lU
Mgorbm9pbnN0X0xUTElCUkFSSUVTICs9IExpYnJhcmllcy9XZWJFeHRlbnNpb25zL2xpYldlYlBy
b2Nlc3NUZXN0LmxhCitlbmRpZgorCitMaWJyYXJpZXNfV2ViRXh0ZW5zaW9uc19saWJXZWJQcm9j
ZXNzVGVzdF9sYV9TT1VSQ0VTID0gXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Mkd0ay9ET01Ob2RlVGVzdC5jcHAgXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Mkd0ay9GcmFtZVRlc3QuY3BwIFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJH
dGsvV2ViUHJvY2Vzc1Rlc3QuY3BwIFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dDJHdGsvV2ViUHJvY2Vzc1Rlc3QuaAorCitMaWJyYXJpZXNfV2ViRXh0ZW5zaW9uc19saWJXZWJQ
cm9jZXNzVGVzdF9sYV9MREZMQUdTID0gXAorCS1ycGF0aCAke3NoZWxsIHB3ZH0vJCh0b3BfYnVp
bGRkaXIpL0xpYnJhcmllcy9XZWJFeHRlbnNpb25zLy5saWJzIFwKKwkkKG5vX3VuZGVmaW5lZCkg
XAorCS1hdm9pZC12ZXJzaW9uIFwKKwktbW9kdWxlCisKK0xpYnJhcmllc19XZWJFeHRlbnNpb25z
X2xpYldlYlByb2Nlc3NUZXN0X2xhX0NQUEZMQUdTID0gXAorCS1JJChzcmNkaXIpL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ayBcCisJLUkkKHRvcF9idWls
ZGRpcikvRGVyaXZlZFNvdXJjZXMgXAorCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2Vz
L1dlYktpdDIvd2Via2l0MmV4dGVuc2lvbi9pbmNsdWRlIFwKKwktRFdFQktJVDJfQ09NUElMQVRJ
T04gXAorCSQod2Via2l0Mmd0a190ZXN0c19jcHBmbGFncykKKworTGlicmFyaWVzX1dlYkV4dGVu
c2lvbnNfbGliV2ViUHJvY2Vzc1Rlc3RfbGFfQ1hYRkxBR1MgPSBcCisJJChnbG9iYWxfY3h4Zmxh
Z3MpCisKK0xpYnJhcmllc19XZWJFeHRlbnNpb25zX2xpYldlYlByb2Nlc3NUZXN0X2xhX0NGTEFH
UyA9IFwKKwkkKGdsb2JhbF9jZmxhZ3MpCisKKworUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJL
aXQyR3RrL3Jlc291cmNlcy93ZWJraXQyZ3RrLXRlc3RzLXJlc291cmNlcy5ncmVzb3VyY2U6IFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9yZXNvdXJjZXMvd2Via2l0Mmd0ay10
ZXN0cy5ncmVzb3VyY2UueG1sICQoc2hlbGwgJChHTElCX0NPTVBJTEVfUkVTT1VSQ0VTKSAtLXNv
dXJjZWRpcj0kKHNyY2RpcikgLS1nZW5lcmF0ZS1kZXBlbmRlbmNpZXMgJChzcmNkaXIpL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9yZXNvdXJjZXMvd2Via2l0Mmd0ay10ZXN0
cy5ncmVzb3VyY2UueG1sKQorCSQoQU1fVl9hdClta2RpciAtcCAke0dFTlBST0dSQU1TfS9UZXN0
V2ViS2l0QVBJL1dlYktpdDJHdGsvcmVzb3VyY2VzCisJJChBTV9WX0dFTikgJChHTElCX0NPTVBJ
TEVfUkVTT1VSQ0VTKSAtLXRhcmdldD0kQCAtLXNvdXJjZWRpcj0kKHNyY2RpcikgJDwKKworRElT
VENMRUFORklMRVMgKz0gXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0Mkd0ay9yZXNv
dXJjZXMvd2Via2l0Mmd0ay10ZXN0cy1yZXNvdXJjZXMuZ3Jlc291cmNlCisKK25vaW5zdF9EQVRB
ICs9IFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdDJHdGsvcmVzb3VyY2VzL3dlYmtp
dDJndGstdGVzdHMtcmVzb3VyY2VzLmdyZXNvdXJjZQorCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRB
UElfV2ViS2l0Mkd0a19UZXN0V2ViS2l0V2ViQ29udGV4dF9TT1VSQ0VTID0gXAorCVRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0V2ViQ29udGV4dC5jcHAKK1By
b2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0V2ViS2l0V2ViQ29udGV4dF9DUFBG
TEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19jcHBmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRB
UElfV2ViS2l0Mkd0a19UZXN0V2ViS2l0V2ViQ29udGV4dF9MREFERCA9ICQod2Via2l0Mmd0a190
ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0V2ViS2l0
V2ViQ29udGV4dF9MREZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dy
YW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0V2ViS2l0V2ViVmlld19TT1VSQ0VTID0g
XAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0V2ViVmll
dy5jcHAKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0V2ViS2l0V2ViVmll
d19DUFBGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19jcHBmbGFncykKK1Byb2dyYW1zX1Rlc3RX
ZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0V2ViS2l0V2ViVmlld19MREFERCA9ICQod2Via2l0Mmd0
a190ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0V2Vi
S2l0V2ViVmlld19MREZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dy
YW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0TG9hZGVyQ2xpZW50X1NPVVJDRVMgPSBc
CisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RMb2FkZXJDbGllbnQu
Y3BwCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdExvYWRlckNsaWVudF9D
UFBGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19jcHBmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJL
aXRBUElfV2ViS2l0Mkd0a19UZXN0TG9hZGVyQ2xpZW50X0xEQUREID0gJCh3ZWJraXQyZ3RrX3Rl
c3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RMb2FkZXJD
bGllbnRfTERGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19U
ZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYktpdFNldHRpbmdzX1NPVVJDRVMgPSBcCisJ
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRTZXR0aW5ncy5j
cHAKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0V2ViS2l0U2V0dGluZ3Nf
Q1BQRkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfY3BwZmxhZ3MpCitQcm9ncmFtc19UZXN0V2Vi
S2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYktpdFNldHRpbmdzX0xEQUREID0gJCh3ZWJraXQyZ3Rr
X3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJL
aXRTZXR0aW5nc19MREZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dy
YW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19JbnNwZWN0b3JUZXN0U2VydmVyX1NPVVJDRVMg
PSBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL0luc3BlY3RvclRlc3RT
ZXJ2ZXIuY3BwCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfSW5zcGVjdG9yVGVz
dFNlcnZlcl9DUFBGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19jcHBmbGFncykKK1Byb2dyYW1z
X1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19JbnNwZWN0b3JUZXN0U2VydmVyX0xEQUREID0gJCh3
ZWJraXQyZ3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3Rr
X0luc3BlY3RvclRlc3RTZXJ2ZXJfTERGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19sZGZsYWdz
KQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdEJhY2tGb3J3YXJkTGlz
dF9TT1VSQ0VTID0gXAorICAgICAgICBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJH
dGsvVGVzdEJhY2tGb3J3YXJkTGlzdC5jcHAKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0
Mkd0a19UZXN0QmFja0ZvcndhcmRMaXN0X0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2Nw
cGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RCYWNrRm9yd2Fy
ZExpc3RfTERBREQgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2Vi
S2l0QVBJX1dlYktpdDJHdGtfVGVzdEJhY2tGb3J3YXJkTGlzdF9MREZMQUdTID0gJCh3ZWJraXQy
Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19U
ZXN0V2ViS2l0UG9saWN5Q2xpZW50X1NPVVJDRVMgPSBcCisgICAgICAgIFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0UG9saWN5Q2xpZW50LmNwcAorUHJvZ3Jh
bXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRQb2xpY3lDbGllbnRfQ1BQRkxB
R1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfY3BwZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJ
X1dlYktpdDJHdGtfVGVzdFdlYktpdFBvbGljeUNsaWVudF9MREFERCA9ICQod2Via2l0Mmd0a190
ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0V2ViS2l0
UG9saWN5Q2xpZW50X0xERkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRmbGFncykKKworaWYg
SEFWRV9BVFNQSTIKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19BY2Nlc3NpYmls
aXR5VGVzdFNlcnZlcl9TT1VSQ0VTID0gXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Mkd0ay9BY2Nlc3NpYmlsaXR5VGVzdFNlcnZlci5jcHAKK1Byb2dyYW1zX1Rlc3RXZWJLaXRB
UElfV2ViS2l0Mkd0a19BY2Nlc3NpYmlsaXR5VGVzdFNlcnZlcl9DUFBGTEFHUyA9ICQod2Via2l0
Mmd0a190ZXN0c19jcHBmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19B
Y2Nlc3NpYmlsaXR5VGVzdFNlcnZlcl9MREFERCA9ICQod2Via2l0Mmd0a190ZXN0c19sZGFkZCkK
K1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19BY2Nlc3NpYmlsaXR5VGVzdFNlcnZl
cl9MREZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RX
ZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0V2ViS2l0QWNjZXNzaWJpbGl0eV9TT1VSQ0VTID0gXAor
CVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0QWNjZXNzaWJp
bGl0eS5jcHAKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0V2ViS2l0QWNj
ZXNzaWJpbGl0eV9DUFBGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19jcHBmbGFncykgJChBVFNQ
STJfQ0ZMQUdTKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRB
Y2Nlc3NpYmlsaXR5X0xEQUREID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkYWRkKSAkKEFUU1BJMl9M
SUJTKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRBY2Nlc3Np
YmlsaXR5X0xERkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRmbGFncykKK2VuZGlmCisKK1By
b2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0RG93bmxvYWRzX1NPVVJDRVMgPSBc
CisgICAgICAgIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0RG93bmxv
YWRzLmNwcAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3REb3dubG9hZHNf
Q1BQRkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfY3BwZmxhZ3MpCitQcm9ncmFtc19UZXN0V2Vi
S2l0QVBJX1dlYktpdDJHdGtfVGVzdERvd25sb2Fkc19MREFERCA9ICQod2Via2l0Mmd0a190ZXN0
c19sZGFkZCkKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0RG93bmxvYWRz
X0xERkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdl
YktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJWaWV3RWRpdG9yX1NPVVJDRVMgPSBcCisgICAgICAg
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViVmlld0VkaXRvci5j
cHAKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0V2ViVmlld0VkaXRvcl9D
UFBGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19jcHBmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJL
aXRBUElfV2ViS2l0Mkd0a19UZXN0V2ViVmlld0VkaXRvcl9MREFERCA9ICQod2Via2l0Mmd0a190
ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0V2ViVmll
d0VkaXRvcl9MREZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1z
X1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0UHJpbnRpbmdfU09VUkNFUyA9IFwKKyAgICAg
ICAgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RQcmludGluZy5jcHAK
K1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0UHJpbnRpbmdfQ1BQRkxBR1Mg
PSAkKHdlYmtpdDJndGtfdGVzdHNfY3BwZmxhZ3MpICQoR1RLX1VOSVhfUFJJTlRJTkdfQ0ZMQUdT
KQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RQcmludGluZ19MREFERCA9
ICQod2Via2l0Mmd0a190ZXN0c19sZGFkZCkgJChHVEtfVU5JWF9QUklOVElOR19MSUJTKQorUHJv
Z3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RQcmludGluZ19MREZMQUdTID0gJCh3
ZWJraXQyZ3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0
Mkd0a19UZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlX1NPVVJDRVMgPSBcCisJVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2UuY3BwCitQ
cm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYktpdEZhdmljb25EYXRhYmFz
ZV9DUFBGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19jcHBmbGFncykKK1Byb2dyYW1zX1Rlc3RX
ZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlX0xEQUREID0gJCh3
ZWJraXQyZ3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3Rr
X1Rlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VfTERGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19s
ZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYktpdEZp
bmRDb250cm9sbGVyX1NPVVJDRVMgPSBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXQyR3RrL1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxlci5jcHAKK1Byb2dyYW1zX1Rlc3RXZWJLaXRB
UElfV2ViS2l0Mkd0a19UZXN0V2ViS2l0RmluZENvbnRyb2xsZXJfQ1BQRkxBR1MgPSAkKHdlYmtp
dDJndGtfdGVzdHNfY3BwZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtf
VGVzdFdlYktpdEZpbmRDb250cm9sbGVyX0xEQUREID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkYWRk
KQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRGaW5kQ29udHJv
bGxlcl9MREZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rl
c3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0UmVzb3VyY2VzX1NPVVJDRVMgPSBcCisgICAgICAg
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0UmVzb3VyY2VzLmNwcAor
UHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RSZXNvdXJjZXNfQ1BQRkxBR1Mg
PSAkKHdlYmtpdDJndGtfdGVzdHNfY3BwZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dl
YktpdDJHdGtfVGVzdFJlc291cmNlc19MREFERCA9ICQod2Via2l0Mmd0a190ZXN0c19sZGFkZCkK
K1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0UmVzb3VyY2VzX0xERkxBR1Mg
PSAkKHdlYmtpdDJndGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9X
ZWJLaXQyR3RrX1Rlc3RDb29raWVNYW5hZ2VyX1NPVVJDRVMgPSBcCisgICAgICAgIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0Q29va2llTWFuYWdlci5jcHAKK1Byb2dy
YW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0Q29va2llTWFuYWdlcl9DUFBGTEFHUyA9
ICQod2Via2l0Mmd0a190ZXN0c19jcHBmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2Vi
S2l0Mkd0a19UZXN0Q29va2llTWFuYWdlcl9MREFERCA9ICQod2Via2l0Mmd0a190ZXN0c19sZGFk
ZCkKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0Q29va2llTWFuYWdlcl9M
REZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJL
aXRBUElfV2ViS2l0Mkd0a19UZXN0SW5zcGVjdG9yX1NPVVJDRVMgPSBcCisgICAgICAgIFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0SW5zcGVjdG9yLmNwcAorUHJvZ3Jh
bXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RJbnNwZWN0b3JfQ1BQRkxBR1MgPSBcCisJ
JCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJL
aXQyR3RrX1Rlc3RJbnNwZWN0b3JfTERBREQgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRhZGQpCitQ
cm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdEluc3BlY3Rvcl9MREZMQUdTID0g
JCh3ZWJraXQyZ3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2Vi
S2l0Mkd0a19UZXN0SW5zcGVjdG9yU2VydmVyX1NPVVJDRVMgPSBcCisJVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RJbnNwZWN0b3JTZXJ2ZXIuY3BwCitQcm9ncmFtc19U
ZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdEluc3BlY3RvclNlcnZlcl9DUFBGTEFHUyA9ICQo
d2Via2l0Mmd0a190ZXN0c19jcHBmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0
Mkd0a19UZXN0SW5zcGVjdG9yU2VydmVyX0xEQUREID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkYWRk
KQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RJbnNwZWN0b3JTZXJ2ZXJf
TERGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2Vi
S2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYktpdFZlcnNpb25fU09VUkNFUyA9IFwKKyAgICAgICAg
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRWZXJzaW9uLmNw
cAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRWZXJzaW9uX0NQ
UEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktp
dEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRWZXJzaW9uX0xEQUREID0gJCh3ZWJraXQyZ3RrX3Rl
c3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRW
ZXJzaW9uX0xERkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNf
VGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RDb250ZXh0TWVudV9TT1VSQ0VTID0gXAorICAg
ICAgICBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdENvbnRleHRNZW51
LmNwcAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RDb250ZXh0TWVudV9D
UFBGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19jcHBmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJL
aXRBUElfV2ViS2l0Mkd0a19UZXN0Q29udGV4dE1lbnVfTERBREQgPSAkKHdlYmtpdDJndGtfdGVz
dHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdENvbnRleHRN
ZW51X0xERkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVz
dFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RTU0xfU09VUkNFUyA9IFwKKyAgICAgICAgVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RTU0wuY3BwCitQcm9ncmFtc19UZXN0
V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFNTTF9DUFBGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0
c19jcHBmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0U1NMX0xE
QUREID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9X
ZWJLaXQyR3RrX1Rlc3RTU0xfTERGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19sZGZsYWdzKQor
CitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYkV4dGVuc2lvbnNfU09V
UkNFUyA9IFwKKyAgICAgICAgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rl
c3RXZWJFeHRlbnNpb25zLmNwcAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rl
c3RXZWJFeHRlbnNpb25zX0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQor
UHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJFeHRlbnNpb25zX0xEQURE
ID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJL
aXQyR3RrX1Rlc3RXZWJFeHRlbnNpb25zX0xERkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRm
bGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRXZWJW
aWV3R3JvdXBfU09VUkNFUyA9IFwKKyAgICAgICAgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyR3RrL1Rlc3RXZWJLaXRXZWJWaWV3R3JvdXAuY3BwCitQcm9ncmFtc19UZXN0V2ViS2l0
QVBJX1dlYktpdDJHdGtfVGVzdFdlYktpdFdlYlZpZXdHcm91cF9DUFBGTEFHUyA9ICQod2Via2l0
Mmd0a190ZXN0c19jcHBmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19U
ZXN0V2ViS2l0V2ViVmlld0dyb3VwX0xEQUREID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkYWRkKQor
UHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRXZWJWaWV3R3JvdXBf
TERGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2Vi
S2l0QVBJX1dlYktpdDJHdGtfVGVzdERPTU5vZGVfU09VUkNFUyA9IFwKKyAgICAgICAgVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RET01Ob2RlLmNwcAorUHJvZ3JhbXNf
VGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RET01Ob2RlX0NQUEZMQUdTID0gJCh3ZWJraXQy
Z3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rl
c3RET01Ob2RlX0xEQUREID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVz
dFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RET01Ob2RlX0xERkxBR1MgPSAkKHdlYmtpdDJndGtf
dGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RG
cmFtZV9TT1VSQ0VTID0gXAorICAgICAgICBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dDJHdGsvVGVzdEZyYW1lLmNwcAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rl
c3RGcmFtZV9DUFBGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19jcHBmbGFncykKK1Byb2dyYW1z
X1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0RnJhbWVfTERBREQgPSAkKHdlYmtpdDJndGtf
dGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdEZyYW1l
X0xERkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdl
YktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RBdXRoZW50aWNhdGlvbl9TT1VSQ0VTID0gXAorICAgICAg
ICBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdEF1dGhlbnRpY2F0aW9u
LmNwcAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RBdXRoZW50aWNhdGlv
bl9DUFBGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19jcHBmbGFncykKK1Byb2dyYW1zX1Rlc3RX
ZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0QXV0aGVudGljYXRpb25fTERBREQgPSAkKHdlYmtpdDJn
dGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdEF1
dGhlbnRpY2F0aW9uX0xERkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRmbGFncykKKworUHJv
Z3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RVSUNsaWVudF9TT1VSQ0VTID0gXAor
ICAgICAgICBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFVJQ2xpZW50
LmNwcAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RVSUNsaWVudF9DUFBG
TEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19jcHBmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRB
UElfV2ViS2l0Mkd0a19UZXN0VUlDbGllbnRfTERBREQgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRh
ZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFVJQ2xpZW50X0xERkxB
R1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRmbGFncykKKworCitzdGFtcC10ZXN0d2Via2l0YXBp
LXdlYmNvcmUtZm9yd2FyZGluZy1oZWFkZXJzOiAkKFdlYktpdDIpL1NjcmlwdHMvZ2VuZXJhdGUt
Zm9yd2FyZGluZy1oZWFkZXJzLnBsICQoUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJDb3JlX1Rl
c3RXZWJDb3JlX1NPVVJDRVMpCiAJJChBTV9WX0dFTikkKFBFUkwpICQ8ICQoc3JjZGlyKS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUgJChHRU5TT1VSQ0VTX1dFQkNPUkUpL2luY2x1
ZGUgZ3RrIFwKIAkmJiBlY2hvIHRpbWVzdGFtcCA+ICQoQEYpCiAKLXN0YW1wLXRlc3R3ZWJraXRh
cGktd2Via2l0Mi1mb3J3YXJkaW5nLWhlYWRlcnM6ICQoV2ViS2l0MikvU2NyaXB0cy9nZW5lcmF0
ZS1mb3J3YXJkaW5nLWhlYWRlcnMucGwgJChQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RXZWJL
aXQyX1NPVVJDRVMpICQoTGlicmFyaWVzX2xpYlRlc3RXZWJLaXRBUElJbmplY3RlZEJ1bmRsZV9s
YV9TT1VSQ0VTKQorc3RhbXAtdGVzdHdlYmtpdGFwaS13ZWJraXQyLWZvcndhcmRpbmctaGVhZGVy
czogJChXZWJLaXQyKS9TY3JpcHRzL2dlbmVyYXRlLWZvcndhcmRpbmctaGVhZGVycy5wbCAkKFBy
b2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Ml9UZXN0V2ViS2l0Ml9TT1VSQ0VTKSAkKExpYnJh
cmllc19saWJUZXN0V2ViS2l0QVBJSW5qZWN0ZWRCdW5kbGVfbGFfU09VUkNFUykKIAkkKEFNX1Zf
R0VOKSQoUEVSTCkgJDwgJChzcmNkaXIpL1Rvb2xzL1Rlc3RXZWJLaXRBUEkgJChHRU5TT1VSQ0VT
X1dFQktJVDIpL2luY2x1ZGUgZ3RrIFwKIAkmJiBlY2hvIHRpbWVzdGFtcCA+ICQoQEYpCiAKQEAg
LTM4Niw0ICs5NDEsMTQgQEAgRVhUUkFfRElTVCArPSBcCiAJVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXQyL3NpbXBsZS5odG1sIFwKIAlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdDIvc2ltcGxlLWlmcmFtZS5odG1sIFwKIAlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdDIvc2ltcGxlLXRhbGwuaHRtbCBcCi0JVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXQyL3NwYWNlYmFyLXNjcm9sbGluZy5odG1sCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyL3NwYWNlYmFyLXNjcm9sbGluZy5odG1sIFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdDJHdGsvcmVzb3VyY2VzL3Rlc3QtY2VydC5wZW0gXAorCVRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9yZXNvdXJjZXMvdGVzdC1rZXkucGVtIFwKKwlUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvcmVzb3VyY2VzL3dlYmtpdDJndGstdGVzdHMu
Z3Jlc291cmNlLnhtbCBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL3Jl
c291cmNlcy9saW5rLXRpdGxlLmpzIFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dEd0ay90ZXN0X3V0aWxzLmggXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3Rr
L3Jlc291cmNlcy9ibGFuay5pY28gXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
R3RrL3Jlc291cmNlcy90ZXN0Lmh0bWwgXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0R3RrL3Jlc291cmNlcy90ZXN0Lm9nZyBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRHdGsvcmVzb3VyY2VzL3Rlc3QucGRmIFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdEd0ay9yZXNvdXJjZXMvdGVzdC50eHQKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9BY2Nlc3NpYmlsaXR5VGVzdFNlcnZlci5jcHAgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvQWNjZXNzaWJpbGl0eVRlc3RTZXJ2ZXIu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NTAwNTAKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvQWNjZXNzaWJp
bGl0eVRlc3RTZXJ2ZXIuY3BwCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPGd0ay9n
dGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdDIuaD4KKworc3RhdGljIHZvaWQgbG9hZENo
YW5nZWRDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiwgV2ViS2l0TG9hZEV2ZW50IGxvYWRFdmVudCwg
Z3BvaW50ZXIpCit7CisgICAgLy8gU2VuZCBhIG1lc3NhZ2UgdG8gdGhlIHBhcmVudCBwcm9jZXNz
IHdoZW4gd2UncmUgcmVhZHkuCisgICAgaWYgKGxvYWRFdmVudCA9PSBXRUJLSVRfTE9BRF9GSU5J
U0hFRCkKKyAgICAgICAgZ19wcmludCgiT0siKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNo
YXIqKiBhcmd2KQoreworICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBBVEsgYnJpZGdlIGlzIGxv
YWRlZC4KKyAgICBnX3NldGVudigiR1RLX01PRFVMRVMiLCAiYXRrLWJyaWRnZSIsIFRSVUUpOwor
CisgICAgZ3RrX2luaXQoJmFyZ2MsICZhcmd2KTsKKworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICB3ZWJraXRf
d2ViX3ZpZXdfbG9hZF9odG1sKHdlYlZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiPGh0bWw+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgPGJvZHk+IgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgIDxoMT5UaGlzIGlzIGEgdGVzdDwvaDE+Igor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgIDxwPlRoaXMgaXMgYSBwYXJhZ3JhcGgg
d2l0aCBzb21lIHBsYWluIHRleHQuPC9wPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICIgICA8cD5UaGlzIHBhcmFncmFwaCBjb250YWlucyA8YSBocmVmPVwiaHR0cDovL3d3dy53ZWJr
aXRndGsub3JnXCI+YSBsaW5rPC9hPiBpbiB0aGUgbWlkZGxlLjwvcD4iCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiICA8L2JvZHk+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIjwvaHRtbD4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CisKKyAgICBH
dGtXaWRnZXQqIHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOwor
ICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgR1RLX1dJREdFVCh3
ZWJWaWV3KSk7CisgICAgZ3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpOworCisgICAgZ19zaWdu
YWxfY29ubmVjdCh3aW5kb3csICJkZWxldGUtZXZlbnQiLCBHX0NBTExCQUNLKGd0a19tYWluX3F1
aXQpLCAwKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJsb2FkLWNoYW5nZWQiLCBH
X0NBTExCQUNLKGxvYWRDaGFuZ2VkQ2FsbGJhY2spLCAwKTsKKworICAgIGd0a19tYWluKCk7Cit9
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvRE9NRE9N
V2luZG93VGVzdC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvRE9N
RE9NV2luZG93VGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Nh
YWQ1NAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Mkd0ay9ET01ET01XaW5kb3dUZXN0LmNwcApAQCAtMCwwICsxLDIyMSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRl
ICJXZWJQcm9jZXNzVGVzdC5oIgorI2luY2x1ZGUgPGdpby9naW8uaD4KKyNpbmNsdWRlIDx3ZWJr
aXQyL3dlYmtpdC13ZWItZXh0ZW5zaW9uLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKwor
Y2xhc3MgV2ViS2l0RE9NRE9NV2luZG93VGVzdDsKK3N0YXRpYyBnYm9vbGVhbiBsb2FkZWRDYWxs
YmFjayhXZWJLaXRET01ET01XaW5kb3cqLCBXZWJLaXRET01FdmVudCosIFdlYktpdERPTURPTVdp
bmRvd1Rlc3QqKTsKK3N0YXRpYyBnYm9vbGVhbiBjbGlja2VkQ2FsbGJhY2soV2ViS2l0RE9NRE9N
V2luZG93KiwgV2ViS2l0RE9NRXZlbnQqLCBXZWJLaXRET01ET01XaW5kb3dUZXN0Kik7CisKK2Ns
YXNzIFdlYktpdERPTURPTVdpbmRvd1Rlc3QgOiBwdWJsaWMgV2ViUHJvY2Vzc1Rlc3QgeworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFdlYlByb2Nlc3NUZXN0PiBjcmVhdGUoKSB7IHJl
dHVybiBhZG9wdFB0cihuZXcgV2ViS2l0RE9NRE9NV2luZG93VGVzdCgpKTsgfQorCitwcml2YXRl
OgorICAgIGd1aW50NjQgd2ViUGFnZUZyb21BcmdzKEdWYXJpYW50KiBhcmdzKQorICAgIHsKKyAg
ICAgICAgR1ZhcmlhbnRJdGVyIGl0ZXI7CisgICAgICAgIGdfdmFyaWFudF9pdGVyX2luaXQoJml0
ZXIsIGFyZ3MpOworCisgICAgICAgIGNvbnN0IGNoYXIqIGtleTsKKyAgICAgICAgR1ZhcmlhbnQq
IHZhbHVlOworICAgICAgICB3aGlsZSAoZ192YXJpYW50X2l0ZXJfbG9vcCgmaXRlciwgInsmc3Z9
IiwgJmtleSwgJnZhbHVlKSkgeworICAgICAgICAgICAgaWYgKCFzdHJjbXAoa2V5LCAicGFnZUlE
IikgJiYgZ192YXJpYW50X2NsYXNzaWZ5KHZhbHVlKSA9PSBHX1ZBUklBTlRfQ0xBU1NfVUlOVDY0
KQorICAgICAgICAgICAgICAgIHJldHVybiBnX3ZhcmlhbnRfZ2V0X3VpbnQ2NCh2YWx1ZSk7Cisg
ICAgICAgIH0KKworICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisKKyAgICBib29sIHRlc3RTaWduYWxzKFdlYktpdFdlYkV4dGVuc2lvbiog
ZXh0ZW5zaW9uLCBHVmFyaWFudCogYXJncykKKyAgICB7CisgICAgICAgIG5vdGlmeSgicmVhZHki
LCAiIik7CisKKyAgICAgICAgV2ViS2l0V2ViUGFnZSogcGFnZSA9IHdlYmtpdF93ZWJfZXh0ZW5z
aW9uX2dldF9wYWdlKGV4dGVuc2lvbiwgd2ViUGFnZUZyb21BcmdzKGFyZ3MpKTsKKyAgICAgICAg
Z19hc3NlcnQoV0VCS0lUX0lTX1dFQl9QQUdFKHBhZ2UpKTsKKyAgICAgICAgV2ViS2l0RE9NRG9j
dW1lbnQqIGRvY3VtZW50ID0gd2Via2l0X3dlYl9wYWdlX2dldF9kb21fZG9jdW1lbnQocGFnZSk7
CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfRE9DVU1FTlQoZG9jdW1lbnQpKTsKKwor
ICAgICAgICBXZWJLaXRET01ET01XaW5kb3cqIGRvbVdpbmRvdyA9IHdlYmtpdF9kb21fZG9jdW1l
bnRfZ2V0X2RlZmF1bHRfdmlldyhkb2N1bWVudCk7CisgICAgICAgIGdfYXNzZXJ0KGRvbVdpbmRv
dyk7CisKKyAgICAgICAgLy8gVGhlICJsb2FkIiBXZWJLaXRET01ET01XaW5kb3cgc2lnbmFsIGlz
IGlzc3VlZCBiZWZvcmUgdGhpcyB0ZXN0IGlzCisgICAgICAgIC8vIGNhbGxlZC4gVGhlcmUncyBu
byB3YXkgdG8gY2FwdHVyZSBpdCBoZXJlLiBXZSBzaW1wbHkgYXNzdW1lIHRoYXQKKyAgICAgICAg
Ly8gdGhlIGRvY3VtZW50IGlzIGxvYWRlZCBhbmQgbm90aWZ5IHRoZSB1aXByb2Nlc3MgYWNjb3Jk
aW5nbHkKKyAgICAgICAgLy8gbm90aWZ5KCJsb2FkZWQiLCAiIik7CisKKyAgICAgICAgd2Via2l0
X2RvbV9ldmVudF90YXJnZXRfYWRkX2V2ZW50X2xpc3RlbmVyKAorICAgICAgICAgICAgV0VCS0lU
X0RPTV9FVkVOVF9UQVJHRVQoZG9tV2luZG93KSwKKyAgICAgICAgICAgICJsb2FkIiwKKyAgICAg
ICAgICAgIEdfQ0FMTEJBQ0sobG9hZGVkQ2FsbGJhY2spLAorICAgICAgICAgICAgZmFsc2UsCisg
ICAgICAgICAgICB0aGlzKTsKKworICAgICAgICAvLyBsb2FkZWRDYWxsYmFjaygpIHdpbGwgc3Rv
cCB0aGlzIGxvb3AKKyAgICAgICAgUnVuTG9vcDo6cnVuKCk7CisKKyAgICAgICAgZG9jdW1lbnQg
PSB3ZWJraXRfd2ViX3BhZ2VfZ2V0X2RvbV9kb2N1bWVudChwYWdlKTsKKyAgICAgICAgZ19hc3Nl
cnQoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChkb2N1bWVudCkpOworCisgICAgICAgIFdlYktpdERP
TUVsZW1lbnQqIGVsZW1lbnQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50X2J5X2lk
KGRvY3VtZW50LCAidGVzdCIpOworICAgICAgICBnX2Fzc2VydChlbGVtZW50KTsKKworICAgICAg
ICB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9hZGRfZXZlbnRfbGlzdGVuZXIoCisgICAgICAgICAg
ICBXRUJLSVRfRE9NX0VWRU5UX1RBUkdFVChlbGVtZW50KSwKKyAgICAgICAgICAgICJjbGljayIs
CisgICAgICAgICAgICBHX0NBTExCQUNLKGNsaWNrZWRDYWxsYmFjayksCisgICAgICAgICAgICBm
YWxzZSwKKyAgICAgICAgICAgIHRoaXMpOworCisgICAgICAgIC8vIFRoZSAiY2xpY2siIGFjdGlv
biB3aWxsIGJlIGlzc3VlZCBpbiB0aGUgdWlwcm9jZXNzIGFuZCB0aGF0IHdpbGwKKyAgICAgICAg
Ly8gdHJpZ2dlciB0aGUgZG9tIGV2ZW50IGhlcmUuCisgICAgICAgIC8vIGNsaWNrZWRDYWxsYmFj
aygpIHdpbGwgc3RvcCB0aGlzIGxvb3AKKyAgICAgICAgUnVuTG9vcDo6cnVuKCk7CisKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCB0ZXN0RGlzcGF0Y2hFdmVudChXZWJL
aXRXZWJFeHRlbnNpb24qIGV4dGVuc2lvbiwgR1ZhcmlhbnQqIGFyZ3MpCisgICAgeworICAgICAg
ICBub3RpZnkoInJlYWR5IiwgIiIpOworCisgICAgICAgIFdlYktpdFdlYlBhZ2UqIHBhZ2UgPSB3
ZWJraXRfd2ViX2V4dGVuc2lvbl9nZXRfcGFnZShleHRlbnNpb24sIHdlYlBhZ2VGcm9tQXJncyhh
cmdzKSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19XRUJfUEFHRShwYWdlKSk7CisgICAg
ICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1bWVudCA9IHdlYmtpdF93ZWJfcGFnZV9nZXRfZG9t
X2RvY3VtZW50KHBhZ2UpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5U
KGRvY3VtZW50KSk7CisKKyAgICAgICAgV2ViS2l0RE9NRE9NV2luZG93KiBkb21XaW5kb3cgPSB3
ZWJraXRfZG9tX2RvY3VtZW50X2dldF9kZWZhdWx0X3ZpZXcoZG9jdW1lbnQpOworICAgICAgICBn
X2Fzc2VydChkb21XaW5kb3cpOworCisgICAgICAgIC8vIFRoZSAibG9hZCIgV2ViS2l0RE9NRE9N
V2luZG93IHNpZ25hbCBpcyBpc3N1ZWQgYmVmb3JlIHRoaXMgdGVzdCBpcworICAgICAgICAvLyBj
YWxsZWQuIFRoZXJlJ3Mgbm8gd2F5IHRvIGNhcHR1cmUgaXQgaGVyZS4gV2Ugc2ltcGx5IGFzc3Vt
ZSB0aGF0CisgICAgICAgIC8vIHRoZSBkb2N1bWVudCBpcyBsb2FkZWQgYW5kIG5vdGlmeSB0aGUg
dWlwcm9jZXNzIGFjY29yZGluZ2x5CisgICAgICAgIC8vIG5vdGlmeSgibG9hZGVkIiwgIiIpOwor
CisgICAgICAgIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2FkZF9ldmVudF9saXN0ZW5lcigKKyAg
ICAgICAgICAgIFdFQktJVF9ET01fRVZFTlRfVEFSR0VUKGRvbVdpbmRvdyksCisgICAgICAgICAg
ICAibG9hZCIsCisgICAgICAgICAgICBHX0NBTExCQUNLKGxvYWRlZENhbGxiYWNrKSwKKyAgICAg
ICAgICAgIGZhbHNlLAorICAgICAgICAgICAgdGhpcyk7CisKKyAgICAgICAgLy8gbG9hZGVkQ2Fs
bGJhY2soKSB3aWxsIHN0b3AgdGhpcyBsb29wCisgICAgICAgIFJ1bkxvb3A6OnJ1bigpOworCisg
ICAgICAgIGRvY3VtZW50ID0gd2Via2l0X3dlYl9wYWdlX2dldF9kb21fZG9jdW1lbnQocGFnZSk7
CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfRE9DVU1FTlQoZG9jdW1lbnQpKTsKKwor
ICAgICAgICBXZWJLaXRET01FbGVtZW50KiBlbGVtZW50ID0gd2Via2l0X2RvbV9kb2N1bWVudF9n
ZXRfZWxlbWVudF9ieV9pZChkb2N1bWVudCwgInRlc3QiKTsKKyAgICAgICAgZ19hc3NlcnQoZWxl
bWVudCk7CisKKyAgICAgICAgV2ViS2l0RE9NRXZlbnQqIGV2ZW50ID0gd2Via2l0X2RvbV9kb2N1
bWVudF9jcmVhdGVfZXZlbnQoZG9jdW1lbnQsICJNb3VzZUV2ZW50IiwgMCk7CisgICAgICAgIGdf
YXNzZXJ0KGV2ZW50KTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19FVkVOVChldmVu
dCkpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX01PVVNFX0VWRU5UKGV2ZW50KSk7
CisKKyAgICAgICAgZ2xvbmcgY2xpZW50WCwgY2xpZW50WTsKKyAgICAgICAgY2xpZW50WCA9IHdl
YmtpdF9kb21fZWxlbWVudF9nZXRfY2xpZW50X2xlZnQoZWxlbWVudCk7CisgICAgICAgIGNsaWVu
dFkgPSB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2NsaWVudF90b3AoZWxlbWVudCk7CisKKyAgICAg
ICAgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfYWRkX2V2ZW50X2xpc3RlbmVyKAorICAgICAgICAg
ICAgV0VCS0lUX0RPTV9FVkVOVF9UQVJHRVQoZWxlbWVudCksCisgICAgICAgICAgICAiY2xpY2si
LAorICAgICAgICAgICAgR19DQUxMQkFDSyhjbGlja2VkQ2FsbGJhY2spLAorICAgICAgICAgICAg
ZmFsc2UsCisgICAgICAgICAgICB0aGlzKTsKKworICAgICAgICB3ZWJraXRfZG9tX21vdXNlX2V2
ZW50X2luaXRfbW91c2VfZXZlbnQoV0VCS0lUX0RPTV9NT1VTRV9FVkVOVChldmVudCksCisgICAg
ICAgICAgICAiY2xpY2siLCBUUlVFLCBUUlVFLAorICAgICAgICAgICAgZG9tV2luZG93LCAwLCAw
LCAwLCBjbGllbnRYLCBjbGllbnRZLAorICAgICAgICAgICAgRkFMU0UsIEZBTFNFLCBGQUxTRSwg
RkFMU0UsCisgICAgICAgICAgICAxLCBXRUJLSVRfRE9NX0VWRU5UX1RBUkdFVChlbGVtZW50KSk7
CisKKyAgICAgICAgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfZGlzcGF0Y2hfZXZlbnQoV0VCS0lU
X0RPTV9FVkVOVF9UQVJHRVQoZWxlbWVudCksIGV2ZW50LCAwKTsKKworICAgICAgICAvLyBjbGlj
a2VkQ2FsbGJhY2soKSB3aWxsIHN0b3AgdGhpcyBsb29wCisgICAgICAgIFJ1bkxvb3A6OnJ1bigp
OworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgdGVzdEdldENvbXB1
dGVkU3R5bGUoV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24sIEdWYXJpYW50KiBhcmdzKQor
ICAgIHsKKyAgICAgICAgV2ViS2l0V2ViUGFnZSogcGFnZSA9IHdlYmtpdF93ZWJfZXh0ZW5zaW9u
X2dldF9wYWdlKGV4dGVuc2lvbiwgd2ViUGFnZUZyb21BcmdzKGFyZ3MpKTsKKyAgICAgICAgZ19h
c3NlcnQoV0VCS0lUX0lTX1dFQl9QQUdFKHBhZ2UpKTsKKyAgICAgICAgV2ViS2l0RE9NRG9jdW1l
bnQqIGRvY3VtZW50ID0gd2Via2l0X3dlYl9wYWdlX2dldF9kb21fZG9jdW1lbnQocGFnZSk7Cisg
ICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfRE9DVU1FTlQoZG9jdW1lbnQpKTsKKyAgICAg
ICAgV2ViS2l0RE9NRE9NV2luZG93KiBkb21XaW5kb3cgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dl
dF9kZWZhdWx0X3ZpZXcoZG9jdW1lbnQpOworICAgICAgICBnX2Fzc2VydChkb21XaW5kb3cpOwor
ICAgICAgICBXZWJLaXRET01FbGVtZW50KiBlbGVtZW50ID0gd2Via2l0X2RvbV9kb2N1bWVudF9n
ZXRfZWxlbWVudF9ieV9pZChkb2N1bWVudCwgInRlc3QiKTsKKyAgICAgICAgZ19hc3NlcnQoZWxl
bWVudCk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfRUxFTUVOVChlbGVtZW50KSk7
CisgICAgICAgIFdlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24qIGNzc1N0eWxlID0gd2Via2l0
X2RvbV9kb21fd2luZG93X2dldF9jb21wdXRlZF9zdHlsZShkb21XaW5kb3csIGVsZW1lbnQsIDAp
OworICAgICAgICBnY2hhciogZm9udFNpemUgPSB3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNsYXJh
dGlvbl9nZXRfcHJvcGVydHlfdmFsdWUoY3NzU3R5bGUsICJmb250LXNpemUiKTsKKyAgICAgICAg
Z19hc3NlcnRfY21wc3RyKGZvbnRTaXplLCA9PSwgIjE2cHgiKTsKKworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgcnVuVGVzdChjb25zdCBjaGFyKiB0ZXN0
TmFtZSwgV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24sIEdWYXJpYW50KiBhcmdzKQorICAg
IHsKKyAgICAgICAgaWYgKCFzdHJjbXAodGVzdE5hbWUsICJzaWduYWxzIikpCisgICAgICAgICAg
ICByZXR1cm4gdGVzdFNpZ25hbHMoZXh0ZW5zaW9uLCBhcmdzKTsKKyAgICAgICAgaWYgKCFzdHJj
bXAodGVzdE5hbWUsICJkaXNwYXRjaC1ldmVudCIpKQorICAgICAgICAgICAgcmV0dXJuIHRlc3RE
aXNwYXRjaEV2ZW50KGV4dGVuc2lvbiwgYXJncyk7CisgICAgICAgIGlmICghc3RyY21wKHRlc3RO
YW1lLCAiZ2V0LWNvbXB1dGVkLXN0eWxlIikpCisgICAgICAgICAgICByZXR1cm4gdGVzdEdldENv
bXB1dGVkU3R5bGUoZXh0ZW5zaW9uLCBhcmdzKTsKKworICAgICAgICBnX2Fzc2VydF9ub3RfcmVh
Y2hlZCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfTsKKworc3RhdGljIHZvaWQg
X19hdHRyaWJ1dGVfXygoY29uc3RydWN0b3IpKSByZWdpc3RlclRlc3RzKCkKK3sKKyAgICBSRUdJ
U1RFUl9URVNUKFdlYktpdERPTURPTVdpbmRvd1Rlc3QsICJXZWJLaXRET01ET01XaW5kb3cvc2ln
bmFscyIpOworICAgIFJFR0lTVEVSX1RFU1QoV2ViS2l0RE9NRE9NV2luZG93VGVzdCwgIldlYktp
dERPTURPTVdpbmRvdy9kaXNwYXRjaC1ldmVudCIpOworICAgIFJFR0lTVEVSX1RFU1QoV2ViS2l0
RE9NRE9NV2luZG93VGVzdCwgIldlYktpdERPTURPTVdpbmRvdy9nZXQtY29tcHV0ZWQtc3R5bGUi
KTsKK30KKworc3RhdGljIGdib29sZWFuIGxvYWRlZENhbGxiYWNrKFdlYktpdERPTURPTVdpbmRv
dyogdmlldywgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBXZWJLaXRET01ET01XaW5kb3dUZXN0KiB0
ZXN0KQoreworICAgIHRlc3QtPm5vdGlmeSgibG9hZGVkIiwgIiIpOworCisgICAgLy8gU3RvcCB0
aGUgbG9vcCBhbmQgbGV0IHRlc3RTaWduYWxzKCkgb3IgdGVzdERpc3BhdGNoRXZlbnQoKSBjb250
aW51ZSBpdHMgY291cnNlCisgICAgUnVuTG9vcDo6Y3VycmVudCgpLT5zdG9wKCk7CisKKyAgICBy
ZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBjbGlja2VkQ2FsbGJhY2soV2ViS2l0
RE9NRE9NV2luZG93KiB2aWV3LCBXZWJLaXRET01FdmVudCogZXZlbnQsIFdlYktpdERPTURPTVdp
bmRvd1Rlc3QqIHRlc3QpCit7CisgICAgdGVzdC0+bm90aWZ5KCJjbGlja2VkIiwgIiIpOworICAg
IHRlc3QtPm5vdGlmeSgiZmluaXNoIiwgIiIpOworCisgICAgLy8gU3RvcCB0aGUgbG9vcCBhbmQg
bGV0IHRlc3RTaWduYWxzKCkgb3IgdGVzdERpc3BhdGNoRXZlbnQoKSBjb250aW51ZSBpdHMgY291
cnNlCisgICAgUnVuTG9vcDo6Y3VycmVudCgpLT5zdG9wKCk7CisKKyAgICByZXR1cm4gRkFMU0U7
Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvRE9N
Tm9kZVRlc3QuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL0RPTU5v
ZGVUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTc1NGNmCi0t
LSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL0RP
TU5vZGVUZXN0LmNwcApAQCAtMCwwICsxLDIxNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJXZWJQcm9jZXNz
VGVzdC5oIgorI2luY2x1ZGUgPGdpby9naW8uaD4KKyNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdC13
ZWItZXh0ZW5zaW9uLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorCitjbGFz
cyBXZWJLaXRET01Ob2RlVGVzdCA6IHB1YmxpYyBXZWJQcm9jZXNzVGVzdCB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NPd25QdHI8V2ViUHJvY2Vzc1Rlc3Q+IGNyZWF0ZSgpIHsgcmV0dXJuIGFk
b3B0UHRyKG5ldyBXZWJLaXRET01Ob2RlVGVzdCgpKTsgfQorCitwcml2YXRlOgorICAgIGd1aW50
NjQgd2ViUGFnZUZyb21BcmdzKEdWYXJpYW50KiBhcmdzKQorICAgIHsKKyAgICAgICAgR1Zhcmlh
bnRJdGVyIGl0ZXI7CisgICAgICAgIGdfdmFyaWFudF9pdGVyX2luaXQoJml0ZXIsIGFyZ3MpOwor
CisgICAgICAgIGNvbnN0IGNoYXIqIGtleTsKKyAgICAgICAgR1ZhcmlhbnQqIHZhbHVlOworICAg
ICAgICB3aGlsZSAoZ192YXJpYW50X2l0ZXJfbG9vcCgmaXRlciwgInsmc3Z9IiwgJmtleSwgJnZh
bHVlKSkgeworICAgICAgICAgICAgaWYgKCFzdHJjbXAoa2V5LCAicGFnZUlEIikgJiYgZ192YXJp
YW50X2NsYXNzaWZ5KHZhbHVlKSA9PSBHX1ZBUklBTlRfQ0xBU1NfVUlOVDY0KQorICAgICAgICAg
ICAgICAgIHJldHVybiBnX3ZhcmlhbnRfZ2V0X3VpbnQ2NCh2YWx1ZSk7CisgICAgICAgIH0KKwor
ICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9
CisKKyAgICBib29sIHRlc3RIaWVyYXJjaHlOYXZpZ2F0aW9uKFdlYktpdFdlYkV4dGVuc2lvbiog
ZXh0ZW5zaW9uLCBHVmFyaWFudCogYXJncykKKyAgICB7CisgICAgICAgIFdlYktpdFdlYlBhZ2Uq
IHBhZ2UgPSB3ZWJraXRfd2ViX2V4dGVuc2lvbl9nZXRfcGFnZShleHRlbnNpb24sIHdlYlBhZ2VG
cm9tQXJncyhhcmdzKSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19XRUJfUEFHRShwYWdl
KSk7CisgICAgICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1bWVudCA9IHdlYmtpdF93ZWJfcGFn
ZV9nZXRfZG9tX2RvY3VtZW50KHBhZ2UpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lT
X0RPQ1VNRU5UKGRvY3VtZW50KSk7CisKKyAgICAgICAgV2ViS2l0RE9NSFRNTEhlYWRFbGVtZW50
KiBoZWFkID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfaGVhZChkb2N1bWVudCk7CisgICAgICAg
IGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9IRUFEX0VMRU1FTlQoaGVhZCkpOworCisgICAg
ICAgIC8vIFRpdGxlLCBoZWFkJ3MgY2hpbGQuCisgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21f
bm9kZV9oYXNfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGhlYWQpKSk7CisgICAgICAgIEdS
ZWZQdHI8V2ViS2l0RE9NTm9kZUxpc3Q+IGxpc3QgPSBhZG9wdEdSZWYod2Via2l0X2RvbV9ub2Rl
X2dldF9jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoaGVhZCkpKTsKKyAgICAgICAgZ19hc3Nl
cnQoV0VCS0lUX0RPTV9JU19OT0RFX0xJU1QobGlzdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2Vy
dF9jbXBpbnQod2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChsaXN0LmdldCgpKSwgPT0s
IDEpOworICAgICAgICBXZWJLaXRET01Ob2RlKiBub2RlID0gd2Via2l0X2RvbV9ub2RlX2xpc3Rf
aXRlbShsaXN0LmdldCgpLCAwKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1M
X1RJVExFX0VMRU1FTlQobm9kZSkpOworCisgICAgICAgIC8vIEJvZHksIEhlYWQgc2libGluZy4K
KyAgICAgICAgbm9kZSA9IHdlYmtpdF9kb21fbm9kZV9nZXRfbmV4dF9zaWJsaW5nKFdFQktJVF9E
T01fTk9ERShoZWFkKSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9CT0RZ
X0VMRU1FTlQobm9kZSkpOworICAgICAgICBXZWJLaXRET01IVE1MQm9keUVsZW1lbnQqIGJvZHkg
PSBXRUJLSVRfRE9NX0hUTUxfQk9EWV9FTEVNRU5UKG5vZGUpOworCisgICAgICAgIC8vIFRoZXJl
IGlzIG5vIHRoaXJkIHNpYmxpbmcKKyAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9kb21fbm9kZV9n
ZXRfbmV4dF9zaWJsaW5nKG5vZGUpKTsKKworICAgICAgICAvLyBCb2R5J3MgcHJldmlvdXMgc2li
bGluZyBpcyBIZWFkLgorICAgICAgICBub2RlID0gd2Via2l0X2RvbV9ub2RlX2dldF9wcmV2aW91
c19zaWJsaW5nKFdFQktJVF9ET01fTk9ERShib2R5KSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJ
VF9ET01fSVNfSFRNTF9IRUFEX0VMRU1FTlQobm9kZSkpOworCisgICAgICAgIC8vIEJvZHkgaGFz
IDMgY2hpbGRyZW4uCisgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9oYXNfY2hpbGRf
bm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKSk7CisgICAgICAgIGxpc3QgPSBhZG9wdEdSZWYo
d2Via2l0X2RvbV9ub2RlX2dldF9jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpKTsK
KyAgICAgICAgdW5zaWduZWQgbG9uZyBsZW5ndGggPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRf
bGVuZ3RoKGxpc3QuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQobGVuZ3RoLCA9PSwg
Myk7CisKKyAgICAgICAgLy8gVGhlIHRocmVlIG9mIHRoZW0gYXJlIFAgdGFncy4KKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBsb25nIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAg
IG5vZGUgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtKGxpc3QuZ2V0KCksIGkpOworICAgICAg
ICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX1BBUkFHUkFQSF9FTEVNRU5UKG5vZGUp
KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEdvIGJhY2t3YXJkcworICAgICAgICB1bnNpZ25l
ZCBpOworICAgICAgICBmb3IgKGkgPSAwOyBub2RlOyBub2RlID0gd2Via2l0X2RvbV9ub2RlX2dl
dF9wcmV2aW91c19zaWJsaW5nKG5vZGUpLCBpKyspIHsgfQorICAgICAgICBnX2Fzc2VydF9jbXBp
bnQoaSwgPT0sIDMpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wg
dGVzdEluc2VydGlvbihXZWJLaXRXZWJFeHRlbnNpb24qIGV4dGVuc2lvbiwgR1ZhcmlhbnQqIGFy
Z3MpCisgICAgeworICAgICAgICBXZWJLaXRXZWJQYWdlKiBwYWdlID0gd2Via2l0X3dlYl9leHRl
bnNpb25fZ2V0X3BhZ2UoZXh0ZW5zaW9uLCB3ZWJQYWdlRnJvbUFyZ3MoYXJncykpOworICAgICAg
ICBnX2Fzc2VydChXRUJLSVRfSVNfV0VCX1BBR0UocGFnZSkpOworICAgICAgICBXZWJLaXRET01E
b2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3BhZ2VfZ2V0X2RvbV9kb2N1bWVudChwYWdl
KTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChkb2N1bWVudCkpOwor
CisgICAgICAgIFdlYktpdERPTUhUTUxFbGVtZW50KiBib2R5ID0gd2Via2l0X2RvbV9kb2N1bWVu
dF9nZXRfYm9keShkb2N1bWVudCk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRN
TF9FTEVNRU5UKGJvZHkpKTsKKworICAgICAgICAvLyBCb2R5IHNob3VsZG4ndCBoYXZlIGFueSBj
aGlsZHJlbiBhdCB0aGlzIHBvaW50LgorICAgICAgICBnX2Fzc2VydCghd2Via2l0X2RvbV9ub2Rl
X2hhc19jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpKTsKKworICAgICAgICAvLyBJ
bnNlcnQgb25lIFAgZWxlbWVudC4KKyAgICAgICAgV2ViS2l0RE9NRWxlbWVudCogcCA9IHdlYmtp
dF9kb21fZG9jdW1lbnRfY3JlYXRlX2VsZW1lbnQoZG9jdW1lbnQsICJQIiwgMCk7CisgICAgICAg
IGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKHApKTsKKyAgICAgICAgd2Via2l0
X2RvbV9ub2RlX2FwcGVuZF9jaGlsZChXRUJLSVRfRE9NX05PREUoYm9keSksIFdFQktJVF9ET01f
Tk9ERShwKSwgMCk7CisKKyAgICAgICAgLy8gTm93IGl0IHNob3VsZCBoYXZlIG9uZSwgdGhlIHNh
bWUgdGhhdCB3ZSBpbnNlcnRlZC4KKyAgICAgICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2hh
c19jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpKTsKKyAgICAgICAgR1JlZlB0cjxX
ZWJLaXRET01Ob2RlTGlzdD4gbGlzdCA9IGFkb3B0R1JlZih3ZWJraXRfZG9tX25vZGVfZ2V0X2No
aWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSkpOworICAgICAgICBnX2Fzc2VydChXRUJL
SVRfRE9NX0lTX05PREVfTElTVChsaXN0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGlu
dCh3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QuZ2V0KCkpLCA9PSwgMSk7Cisg
ICAgICAgIFdlYktpdERPTU5vZGUqIG5vZGUgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtKGxp
c3QuZ2V0KCksIDApOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVO
VChub2RlKSk7CisgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9pc19zYW1lX25vZGUo
V0VCS0lUX0RPTV9OT0RFKHApLCBub2RlKSk7CisKKyAgICAgICAgLy8gUmVwbGFjZSB0aGUgUCB0
YWcgd2l0aCBhIERJViB0YWcuCisgICAgICAgIFdlYktpdERPTUVsZW1lbnQqIGRpdiA9IHdlYmtp
dF9kb21fZG9jdW1lbnRfY3JlYXRlX2VsZW1lbnQoZG9jdW1lbnQsICJESVYiLCAwKTsKKyAgICAg
ICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0VMRU1FTlQoZGl2KSk7CisgICAgICAgIHdl
YmtpdF9kb21fbm9kZV9yZXBsYWNlX2NoaWxkKFdFQktJVF9ET01fTk9ERShib2R5KSwgV0VCS0lU
X0RPTV9OT0RFKGRpdiksIFdFQktJVF9ET01fTk9ERShwKSwgMCk7CisgICAgICAgIGdfYXNzZXJ0
KHdlYmtpdF9kb21fbm9kZV9oYXNfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKSk7
CisgICAgICAgIGxpc3QgPSBhZG9wdEdSZWYod2Via2l0X2RvbV9ub2RlX2dldF9jaGlsZF9ub2Rl
cyhXRUJLSVRfRE9NX05PREUoYm9keSkpKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9J
U19OT0RFX0xJU1QobGlzdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0
X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChsaXN0LmdldCgpKSwgPT0sIDEpOworICAgICAgICBu
b2RlID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0LmdldCgpLCAwKTsKKyAgICAgICAg
Z19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0VMRU1FTlQobm9kZSkpOworICAgICAgICBnX2Fz
c2VydCh3ZWJraXRfZG9tX25vZGVfaXNfc2FtZV9ub2RlKFdFQktJVF9ET01fTk9ERShkaXYpLCBu
b2RlKSk7CisKKyAgICAgICAgLy8gTm93IHJlbW92ZSB0aGUgdGFnLgorICAgICAgICB3ZWJraXRf
ZG9tX25vZGVfcmVtb3ZlX2NoaWxkKFdFQktJVF9ET01fTk9ERShib2R5KSwgbm9kZSwgMCk7Cisg
ICAgICAgIGxpc3QgPSBhZG9wdEdSZWYod2Via2l0X2RvbV9ub2RlX2dldF9jaGlsZF9ub2RlcyhX
RUJLSVRfRE9NX05PREUoYm9keSkpKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19O
T0RFX0xJU1QobGlzdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X2Rv
bV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChsaXN0LmdldCgpKSwgPT0sIDApOworCisgICAgICAgIC8v
IFRlc3QgaW5zZXJ0IGJlZm9yZS4gSWYgcmVmQ2hpbGQgaXMgbnVsbCwgaW5zZXJ0IG5ld0NoaWxk
IGFzIGxhc3QgZWxlbWVudCBvZiBwYXJlbnQuCisgICAgICAgIGRpdiA9IHdlYmtpdF9kb21fZG9j
dW1lbnRfY3JlYXRlX2VsZW1lbnQoZG9jdW1lbnQsICJESVYiLCAwKTsKKyAgICAgICAgZ19hc3Nl
cnQoV0VCS0lUX0RPTV9JU19IVE1MX0VMRU1FTlQoZGl2KSk7CisgICAgICAgIHdlYmtpdF9kb21f
bm9kZV9pbnNlcnRfYmVmb3JlKFdFQktJVF9ET01fTk9ERShib2R5KSwgV0VCS0lUX0RPTV9OT0RF
KGRpdiksIDAsIDApOworICAgICAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaGFzX2NoaWxk
X25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSkpOworICAgICAgICBsaXN0ID0gYWRvcHRHUmVm
KHdlYmtpdF9kb21fbm9kZV9nZXRfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKSk7
CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfTk9ERV9MSVNUKGxpc3QuZ2V0KCkpKTsK
KyAgICAgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9kb21fbm9kZV9saXN0X2dldF9sZW5ndGgo
bGlzdC5nZXQoKSksID09LCAxKTsKKyAgICAgICAgbm9kZSA9IHdlYmtpdF9kb21fbm9kZV9saXN0
X2l0ZW0obGlzdC5nZXQoKSwgMCk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRN
TF9FTEVNRU5UKG5vZGUpKTsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2lzX3Nh
bWVfbm9kZShXRUJLSVRfRE9NX05PREUoZGl2KSwgbm9kZSkpOworCisgICAgICAgIC8vIE5vdyBp
bnNlcnQgYSAncCcgYmVmb3JlICdkaXYnLgorICAgICAgICBwID0gd2Via2l0X2RvbV9kb2N1bWVu
dF9jcmVhdGVfZWxlbWVudChkb2N1bWVudCwgIlAiLCAwKTsKKyAgICAgICAgZ19hc3NlcnQoV0VC
S0lUX0RPTV9JU19IVE1MX0VMRU1FTlQocCkpOworICAgICAgICB3ZWJraXRfZG9tX25vZGVfaW5z
ZXJ0X2JlZm9yZShXRUJLSVRfRE9NX05PREUoYm9keSksIFdFQktJVF9ET01fTk9ERShwKSwgV0VC
S0lUX0RPTV9OT0RFKGRpdiksIDApOworICAgICAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVf
aGFzX2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSkpOworICAgICAgICBsaXN0ID0g
YWRvcHRHUmVmKHdlYmtpdF9kb21fbm9kZV9nZXRfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RF
KGJvZHkpKSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfTk9ERV9MSVNUKGxpc3Qu
Z2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9kb21fbm9kZV9saXN0X2dl
dF9sZW5ndGgobGlzdC5nZXQoKSksID09LCAyKTsKKyAgICAgICAgbm9kZSA9IHdlYmtpdF9kb21f
bm9kZV9saXN0X2l0ZW0obGlzdC5nZXQoKSwgMCk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9E
T01fSVNfSFRNTF9FTEVNRU5UKG5vZGUpKTsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X2RvbV9u
b2RlX2lzX3NhbWVfbm9kZShXRUJLSVRfRE9NX05PREUocCksIG5vZGUpKTsKKyAgICAgICAgbm9k
ZSA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdC5nZXQoKSwgMSk7CisgICAgICAgIGdf
YXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKG5vZGUpKTsKKyAgICAgICAgZ19hc3Nl
cnQod2Via2l0X2RvbV9ub2RlX2lzX3NhbWVfbm9kZShXRUJLSVRfRE9NX05PREUoZGl2KSwgbm9k
ZSkpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgdGVzdFRhZ05h
bWVzKFdlYktpdFdlYkV4dGVuc2lvbiogZXh0ZW5zaW9uLCBHVmFyaWFudCogYXJncykKKyAgICB7
CisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBleHBlY3RlZFRhZ05hbWVzW10gPSB7ICJIVE1M
IiwgIkhFQUQiLCAiQk9EWSIsICJWSURFTyIsICJTT1VSQ0UiLCAiVklERU8iLCAiU09VUkNFIiwg
IklOUFVUIiB9OworCisgICAgICAgIFdlYktpdFdlYlBhZ2UqIHBhZ2UgPSB3ZWJraXRfd2ViX2V4
dGVuc2lvbl9nZXRfcGFnZShleHRlbnNpb24sIHdlYlBhZ2VGcm9tQXJncyhhcmdzKSk7CisgICAg
ICAgIGdfYXNzZXJ0KFdFQktJVF9JU19XRUJfUEFHRShwYWdlKSk7CisgICAgICAgIFdlYktpdERP
TURvY3VtZW50KiBkb2N1bWVudCA9IHdlYmtpdF93ZWJfcGFnZV9nZXRfZG9tX2RvY3VtZW50KHBh
Z2UpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKGRvY3VtZW50KSk7
CisKKyAgICAgICAgV2ViS2l0RE9NTm9kZUxpc3QqIGxpc3QgPSB3ZWJraXRfZG9tX2RvY3VtZW50
X2dldF9lbGVtZW50c19ieV90YWdfbmFtZShkb2N1bWVudCwgIioiKTsKKyAgICAgICAgZ3Vsb25n
IG5vZGVDb3VudCA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2dldF9sZW5ndGgobGlzdCk7CisgICAg
ICAgIGdfYXNzZXJ0X2NtcHVpbnQobm9kZUNvdW50LCA9PSwgR19OX0VMRU1FTlRTKGV4cGVjdGVk
VGFnTmFtZXMpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5vZGVDb3VudDsg
aSsrKSB7CisgICAgICAgICAgICBXZWJLaXRET01Ob2RlKiBub2RlID0gd2Via2l0X2RvbV9ub2Rl
X2xpc3RfaXRlbShsaXN0LCBpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNf
Tk9ERShub2RlKSk7CisgICAgICAgICAgICBHT3duUHRyPGNoYXI+IHRhZ05hbWUod2Via2l0X2Rv
bV9ub2RlX2dldF9ub2RlX25hbWUobm9kZSkpOworICAgICAgICAgICAgZ19hc3NlcnRfY21wc3Ry
KHRhZ05hbWUuZ2V0KCksID09LCBleHBlY3RlZFRhZ05hbWVzW2ldKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBydW5UZXN0KGNv
bnN0IGNoYXIqIHRlc3ROYW1lLCBXZWJLaXRXZWJFeHRlbnNpb24qIGV4dGVuc2lvbiwgR1Zhcmlh
bnQqIGFyZ3MpCisgICAgeworICAgICAgICBpZiAoIXN0cmNtcCh0ZXN0TmFtZSwgImhpZXJhcmNo
eS1uYXZpZ2F0aW9uIikpCisgICAgICAgICAgICByZXR1cm4gdGVzdEhpZXJhcmNoeU5hdmlnYXRp
b24oZXh0ZW5zaW9uLCBhcmdzKTsKKyAgICAgICAgaWYgKCFzdHJjbXAodGVzdE5hbWUsICJpbnNl
cnRpb24iKSkKKyAgICAgICAgICAgIHJldHVybiB0ZXN0SW5zZXJ0aW9uKGV4dGVuc2lvbiwgYXJn
cyk7CisgICAgICAgIGlmICghc3RyY21wKHRlc3ROYW1lLCAidGFnLW5hbWVzIikpCisgICAgICAg
ICAgICByZXR1cm4gdGVzdFRhZ05hbWVzKGV4dGVuc2lvbiwgYXJncyk7CisKKyAgICAgICAgZ19h
c3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK307CisK
K3N0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKGNvbnN0cnVjdG9yKSkgcmVnaXN0ZXJUZXN0cygp
Cit7CisgICAgUkVHSVNURVJfVEVTVChXZWJLaXRET01Ob2RlVGVzdCwgIldlYktpdERPTU5vZGUv
aGllcmFyY2h5LW5hdmlnYXRpb24iKTsKKyAgICBSRUdJU1RFUl9URVNUKFdlYktpdERPTU5vZGVU
ZXN0LCAiV2ViS2l0RE9NTm9kZS9pbnNlcnRpb24iKTsKKyAgICBSRUdJU1RFUl9URVNUKFdlYktp
dERPTU5vZGVUZXN0LCAiV2ViS2l0RE9NTm9kZS90YWctbmFtZXMiKTsKK30KKworCmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvRnJhbWVUZXN0LmNwcCBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9GcmFtZVRlc3QuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNDg1MGYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvRnJhbWVUZXN0LmNwcApAQCAt
MCwwICsxLDEwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJZ2FsaWEgUy5MLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJXZWJQcm9jZXNzVGVzdC5oIgorI2luY2x1ZGUg
PGdpby9naW8uaD4KKyNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdC13ZWItZXh0ZW5zaW9uLmg+CisK
K2NsYXNzIFdlYktpdEZyYW1lVGVzdCA6IHB1YmxpYyBXZWJQcm9jZXNzVGVzdCB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NPd25QdHI8V2ViUHJvY2Vzc1Rlc3Q+IGNyZWF0ZSgpIHsgcmV0dXJu
IGFkb3B0UHRyKG5ldyBXZWJLaXRGcmFtZVRlc3QoKSk7IH0KKworcHJpdmF0ZToKKyAgICBndWlu
dDY0IHdlYlBhZ2VGcm9tQXJncyhHVmFyaWFudCogYXJncykKKyAgICB7CisgICAgICAgIEdWYXJp
YW50SXRlciBpdGVyOworICAgICAgICBnX3ZhcmlhbnRfaXRlcl9pbml0KCZpdGVyLCBhcmdzKTsK
KworICAgICAgICBjb25zdCBjaGFyKiBrZXk7CisgICAgICAgIEdWYXJpYW50KiB2YWx1ZTsKKyAg
ICAgICAgd2hpbGUgKGdfdmFyaWFudF9pdGVyX2xvb3AoJml0ZXIsICJ7JnN2fSIsICZrZXksICZ2
YWx1ZSkpIHsKKyAgICAgICAgICAgIGlmICghc3RyY21wKGtleSwgInBhZ2VJRCIpICYmIGdfdmFy
aWFudF9jbGFzc2lmeSh2YWx1ZSkgPT0gR19WQVJJQU5UX0NMQVNTX1VJTlQ2NCkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ192YXJpYW50X2dldF91aW50NjQodmFsdWUpOworICAgICAgICB9CisK
KyAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgYm9vbCB0ZXN0TWFpbkZyYW1lKFdlYktpdFdlYkV4dGVuc2lvbiogZXh0ZW5zaW9u
LCBHVmFyaWFudCogYXJncykKKyAgICB7CisgICAgICAgIFdlYktpdFdlYlBhZ2UqIHBhZ2UgPSB3
ZWJraXRfd2ViX2V4dGVuc2lvbl9nZXRfcGFnZShleHRlbnNpb24sIHdlYlBhZ2VGcm9tQXJncyhh
cmdzKSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19XRUJfUEFHRShwYWdlKSk7CisKKyAg
ICAgICAgV2ViS2l0RnJhbWUqIGZyYW1lID0gd2Via2l0X3dlYl9wYWdlX2dldF9tYWluX2ZyYW1l
KHBhZ2UpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfRlJBTUUoZnJhbWUpKTsKKyAgICAg
ICAgZ19hc3NlcnQod2Via2l0X2ZyYW1lX2lzX21haW5fZnJhbWUoZnJhbWUpKTsKKworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIHRlc3RVUkkoV2ViS2l0V2ViRXh0ZW5z
aW9uKiBleHRlbnNpb24sIEdWYXJpYW50KiBhcmdzKQorICAgIHsKKyAgICAgICAgV2ViS2l0V2Vi
UGFnZSogcGFnZSA9IHdlYmtpdF93ZWJfZXh0ZW5zaW9uX2dldF9wYWdlKGV4dGVuc2lvbiwgd2Vi
UGFnZUZyb21BcmdzKGFyZ3MpKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX1dFQl9QQUdF
KHBhZ2UpKTsKKworICAgICAgICBXZWJLaXRGcmFtZSogZnJhbWUgPSB3ZWJraXRfd2ViX3BhZ2Vf
Z2V0X21haW5fZnJhbWUocGFnZSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19GUkFNRShm
cmFtZSkpOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9wYWdlX2dldF91cmko
cGFnZSksID09LCB3ZWJraXRfZnJhbWVfZ2V0X3VyaShmcmFtZSkpOworCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIGJvb2wgdGVzdEphdmFTY3JpcHRDb250ZXh0KFdlYktpdFdl
YkV4dGVuc2lvbiogZXh0ZW5zaW9uLCBHVmFyaWFudCogYXJncykKKyAgICB7CisgICAgICAgIFdl
YktpdFdlYlBhZ2UqIHBhZ2UgPSB3ZWJraXRfd2ViX2V4dGVuc2lvbl9nZXRfcGFnZShleHRlbnNp
b24sIHdlYlBhZ2VGcm9tQXJncyhhcmdzKSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19X
RUJfUEFHRShwYWdlKSk7CisKKyAgICAgICAgV2ViS2l0RnJhbWUqIGZyYW1lID0gd2Via2l0X3dl
Yl9wYWdlX2dldF9tYWluX2ZyYW1lKHBhZ2UpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNf
RlJBTUUoZnJhbWUpKTsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X2ZyYW1lX2dldF9qYXZhc2Ny
aXB0X2dsb2JhbF9jb250ZXh0KGZyYW1lKSk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgdmlydHVhbCBib29sIHJ1blRlc3QoY29uc3QgY2hhciogdGVzdE5hbWUsIFdlYktp
dFdlYkV4dGVuc2lvbiogZXh0ZW5zaW9uLCBHVmFyaWFudCogYXJncykKKyAgICB7CisgICAgICAg
IGlmICghc3RyY21wKHRlc3ROYW1lLCAibWFpbi1mcmFtZSIpKQorICAgICAgICAgICAgcmV0dXJu
IHRlc3RNYWluRnJhbWUoZXh0ZW5zaW9uLCBhcmdzKTsKKyAgICAgICAgaWYgKCFzdHJjbXAodGVz
dE5hbWUsICJ1cmkiKSkKKyAgICAgICAgICAgIHJldHVybiB0ZXN0VVJJKGV4dGVuc2lvbiwgYXJn
cyk7CisgICAgICAgIGlmICghc3RyY21wKHRlc3ROYW1lLCAiamF2YXNjcmlwdC1jb250ZXh0Iikp
CisgICAgICAgICAgICByZXR1cm4gdGVzdEphdmFTY3JpcHRDb250ZXh0KGV4dGVuc2lvbiwgYXJn
cyk7CisKKyAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KK307CisKK3N0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKGNvbnN0cnVjdG9y
KSkgcmVnaXN0ZXJUZXN0cygpCit7CisgICAgUkVHSVNURVJfVEVTVChXZWJLaXRGcmFtZVRlc3Qs
ICJXZWJLaXRGcmFtZS9tYWluLWZyYW1lIik7CisgICAgUkVHSVNURVJfVEVTVChXZWJLaXRGcmFt
ZVRlc3QsICJXZWJLaXRGcmFtZS91cmkiKTsKKyAgICBSRUdJU1RFUl9URVNUKFdlYktpdEZyYW1l
VGVzdCwgIldlYktpdEZyYW1lL2phdmFzY3JpcHQtY29udGV4dCIpOworfQpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL0luc3BlY3RvclRlc3RTZXJ2ZXIu
Y3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL0luc3BlY3RvclRlc3RT
ZXJ2ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxM2IwNDMKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvSW5z
cGVjdG9yVGVzdFNlcnZlci5jcHAKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzIEx0ZC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8Z3RrL2d0ay5o
PgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgorCitzdGF0aWMgdm9pZCBsb2FkQ2hhbmdl
ZENhbGxiYWNrKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRMb2FkRXZlbnQgbG9hZEV2ZW50LCBncG9p
bnRlcikKK3sKKyAgICAvLyBTZW5kIGEgbWVzc2FnZSB0byB0aGUgcGFyZW50IHByb2Nlc3Mgd2hl
biB3ZSdyZSByZWFkeS4KKyAgICBpZiAobG9hZEV2ZW50ID09IFdFQktJVF9MT0FEX0ZJTklTSEVE
KQorICAgICAgICBnX3ByaW50KCJPSyIpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioq
IGFyZ3YpCit7CisgICAgZ3RrX2luaXQoJmFyZ2MsICZhcmd2KTsKKworICAgIC8vIE92ZXJ3cml0
ZSBXRUJLSVRfSU5TUEVDVE9SX1NFUlZFUiB2YXJpYWJsZSB3aXRoIGRlZmF1bHQgdmFsdWUuCisg
ICAgZ19zZXRlbnYoIldFQktJVF9JTlNQRUNUT1JfU0VSVkVSIiwgIjEyNy4wLjAuMToyOTk5Iiwg
VFJVRSk7CisKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdl
YmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfZGV2
ZWxvcGVyX2V4dHJhcyh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdlYlZpZXcpLCBUUlVF
KTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9odG1sKHdlYlZpZXcsCisgICAgICAgICI8aHRt
bD48Ym9keT48cD5XZWJLaXRHVEsrIEluc3BlY3RvciBUZXN0IFNlcnZlcjwvcD48L2JvZHk+PC9o
dG1sPiIsCisgICAgICAgICJodHRwOi8vMTI3LjAuMC4xOjI5OTkvIik7CisKKyAgICBHdGtXaWRn
ZXQqIHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOworICAgIGd0
a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgR1RLX1dJREdFVCh3ZWJWaWV3
KSk7CisgICAgZ3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpOworCisgICAgZ19zaWduYWxfY29u
bmVjdCh3aW5kb3csICJkZWxldGUtZXZlbnQiLCBHX0NBTExCQUNLKGd0a19tYWluX3F1aXQpLCAw
KTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJsb2FkLWNoYW5nZWQiLCBHX0NBTExC
QUNLKGxvYWRDaGFuZ2VkQ2FsbGJhY2spLCAwKTsKKworICAgIGd0a19tYWluKCk7Cit9CmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdEF1dGhlbnRp
Y2F0aW9uLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0QXV0
aGVudGljYXRpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZTQy
MjUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJH
dGsvVGVzdEF1dGhlbnRpY2F0aW9uLmNwcApAQCAtMCwwICsxLDI4NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkxvYWRUcmFja2luZ1Rlc3QuaCIKKyNpbmNsdWRlICJXZWJLaXRUZXN0U2VydmVyLmgiCisjaW5j
bHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCitzdGF0aWMgV2ViS2l0VGVzdFNlcnZlciog
a1NlcnZlcjsKKworY2xhc3MgQXV0aGVudGljYXRpb25UZXN0OiBwdWJsaWMgTG9hZFRyYWNraW5n
VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShBdXRoZW50aWNhdGlv
blRlc3QpOworCisgICAgQXV0aGVudGljYXRpb25UZXN0KCkKKyAgICB7CisgICAgICAgIGdfc2ln
bmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAiYXV0aGVudGljYXRlIiwgR19DQUxMQkFDSyhydW5BdXRo
ZW50aWNhdGlvbkNhbGxiYWNrKSwgdGhpcyk7CisgICAgfQorCisgICAgfkF1dGhlbnRpY2F0aW9u
VGVzdCgpCisgICAgeworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNo
ZWQobV93ZWJWaWV3LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgaW50IGF1dGhlbnRpY2F0aW9uUmV0cmllczsKKyAgICBzdGF0aWMg
Ym9vbCBhdXRoZW50aWNhdGlvbkNhbmNlbGxlZFJlY2VpdmVkOworCisgICAgdm9pZCBsb2FkVVJJ
KGNvbnN0IGNoYXIqIHVyaSkKKyAgICB7CisgICAgICAgIC8vIFJlc2V0IHRoZSByZXRyeSBjb3Vu
dCBvZiB0aGUgZmFrZSBzZXJ2ZXIgd2hlbiBhIHBhZ2UgaXMgbG9hZGVkLgorICAgICAgICBhdXRo
ZW50aWNhdGlvblJldHJpZXMgPSAwOworICAgICAgICBhdXRoZW50aWNhdGlvbkNhbmNlbGxlZFJl
Y2VpdmVkID0gZmFsc2U7CisgICAgICAgIExvYWRUcmFja2luZ1Rlc3Q6OmxvYWRVUkkodXJpKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gcnVuQXV0aGVudGljYXRpb25DYWxsYmFjayhX
ZWJLaXRXZWJWaWV3KiwgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0LCBBdXRo
ZW50aWNhdGlvblRlc3QqIHRlc3QpCisgICAgeworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KHJl
cXVlc3QsICJjYW5jZWxsZWQiLCBHX0NBTExCQUNLKGF1dGhlbnRpY2F0aW9uQ2FuY2VsbGVkQ2Fs
bGJhY2spLCB0ZXN0KTsKKyAgICAgICAgdGVzdC0+cnVuQXV0aGVudGljYXRpb24ocmVxdWVzdCk7
CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGF1dGhlbnRp
Y2F0aW9uQ2FuY2VsbGVkQ2FsbGJhY2soV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiwgQXV0
aGVudGljYXRpb25UZXN0KikKKyAgICB7CisgICAgICAgIGF1dGhlbnRpY2F0aW9uQ2FuY2VsbGVk
UmVjZWl2ZWQgPSB0cnVlOworICAgIH0KKworICAgIHZvaWQgcnVuQXV0aGVudGljYXRpb24oV2Vi
S2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0KQorICAgIHsKKyAgICAgICAgYXNzZXJ0
T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChyZXF1ZXN0KSk7CisgICAg
ICAgIG1fYXV0aGVudGljYXRpb25SZXF1ZXN0ID0gcmVxdWVzdDsKKyAgICAgICAgZ19tYWluX2xv
b3BfcXVpdChtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBXZWJLaXRBdXRoZW50aWNhdGlvblJl
cXVlc3QqIHdhaXRGb3JBdXRoZW50aWNhdGlvblJlcXVlc3QoKQorICAgIHsKKyAgICAgICAgZ19t
YWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgICAgICByZXR1cm4gbV9hdXRoZW50aWNhdGlv
blJlcXVlc3QuZ2V0KCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEdSZWZQdHI8V2ViS2l0QXV0
aGVudGljYXRpb25SZXF1ZXN0PiBtX2F1dGhlbnRpY2F0aW9uUmVxdWVzdDsKK307CisKK2ludCBB
dXRoZW50aWNhdGlvblRlc3Q6OmF1dGhlbnRpY2F0aW9uUmV0cmllcyA9IDA7Citib29sIEF1dGhl
bnRpY2F0aW9uVGVzdDo6YXV0aGVudGljYXRpb25DYW5jZWxsZWRSZWNlaXZlZCA9IGZhbHNlOwor
CitzdGF0aWMgY29uc3QgY2hhciBhdXRoVGVzdFVzZXJuYW1lW10gPSAidXNlcm5hbWUiOworc3Rh
dGljIGNvbnN0IGNoYXIgYXV0aFRlc3RQYXNzd29yZFtdID0gInBhc3N3b3JkIjsKK3N0YXRpYyBj
b25zdCBjaGFyIGF1dGhFeHBlY3RlZFN1Y2Nlc3NUaXRsZVtdID0gIldlYktpdDJHdGsrIEF1dGhl
bnRpY2F0aW9uIHRlc3QiOworc3RhdGljIGNvbnN0IGNoYXIgYXV0aEV4cGVjdGVkRmFpbHVyZVRp
dGxlW10gPSAiNDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQiOworc3RhdGljIGNvbnN0IGNoYXIg
YXV0aEV4cGVjdGVkQXV0aG9yaXphdGlvbltdID0gIkJhc2ljIGRYTmxjbTVoYldVNmNHRnpjM2R2
Y21RPSI7IC8vIEJhc2U2NCBlbmNvZGluZyBvZiAidXNlcm5hbWU6cGFzc3dvcmQiLgorc3RhdGlj
IGNvbnN0IGNoYXIgYXV0aFN1Y2Nlc3NIVE1MU3RyaW5nW10gPQorICAgICI8aHRtbD4iCisgICAg
IjxoZWFkPjx0aXRsZT5XZWJLaXQyR3RrKyBBdXRoZW50aWNhdGlvbiB0ZXN0PC90aXRsZT48L2hl
YWQ+IgorICAgICI8Ym9keT48L2JvZHk+PC9odG1sPiI7CitzdGF0aWMgY29uc3QgY2hhciBhdXRo
RmFpbHVyZUhUTUxTdHJpbmdbXSA9CisgICAgIjxodG1sPiIKKyAgICAiPGhlYWQ+PHRpdGxlPjQw
MSBBdXRob3JpemF0aW9uIFJlcXVpcmVkPC90aXRsZT48L2hlYWQ+IgorICAgICI8Ym9keT48L2Jv
ZHk+PC9odG1sPiI7CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25SZXF1
ZXN0KEF1dGhlbnRpY2F0aW9uVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICAvLyBU
ZXN0IGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QgZ2V0dGVycyBtYXRjaCBzb3VwIGF1dGhlbnRpY2F0
aW9uIGhlYWRlci4KKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9h
dXRoLXRlc3QuaHRtbCIpLmRhdGEoKSk7CisgICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0
KiByZXF1ZXN0ID0gdGVzdC0+d2FpdEZvckF1dGhlbnRpY2F0aW9uUmVxdWVzdCgpOworICAgIGdf
YXNzZXJ0X2NtcHN0cih3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfaG9zdChyZXF1
ZXN0KSwgPT0sIHNvdXBfdXJpX2dldF9ob3N0KGtTZXJ2ZXItPmJhc2VVUkkoKSkpOworICAgIGdf
YXNzZXJ0X2NtcHVpbnQod2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3BvcnQocmVx
dWVzdCksID09LCBzb3VwX3VyaV9nZXRfcG9ydChrU2VydmVyLT5iYXNlVVJJKCkpKTsKKyAgICBn
X2Fzc2VydF9jbXBzdHIod2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3JlYWxtKHJl
cXVlc3QpLCA9PSwgIm15IHJlYWxtIik7CisgICAgZ19hc3NlcnQod2Via2l0X2F1dGhlbnRpY2F0
aW9uX3JlcXVlc3RfZ2V0X3NjaGVtZShyZXF1ZXN0KSA9PSBXRUJLSVRfQVVUSEVOVElDQVRJT05f
U0NIRU1FX0hUVFBfQkFTSUMpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYXV0aGVudGljYXRpb25f
cmVxdWVzdF9pc19mb3JfcHJveHkocmVxdWVzdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYXV0
aGVudGljYXRpb25fcmVxdWVzdF9pc19yZXRyeShyZXF1ZXN0KSk7Cit9CisKK3N0YXRpYyB2b2lk
IHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25DYW5jZWwoQXV0aGVudGljYXRpb25UZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQoreworICAgIC8vIFRlc3QgY2FuY2VsLgorICAgIHRlc3QtPmxvYWRV
Ukkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2F1dGgtdGVzdC5odG1sIikuZGF0YSgpKTsKKyAg
ICBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QgPSB0ZXN0LT53YWl0Rm9yQXV0
aGVudGljYXRpb25SZXF1ZXN0KCk7CisgICAgd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3Rf
Y2FuY2VsKHJlcXVlc3QpOworICAgIC8vIFNlcnZlciBkb2Vzbid0IGFzayBmb3IgbmV3IGNyZWRl
bnRpYWxzLgorICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgZ19hc3Nl
cnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50cy5zaXplKCksID09LCAzKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJv
dmlzaW9uYWxMb2FkU3RhcnRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2
ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZEZhaWxlZCk7Cisg
ICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1syXSwgPT0sIExvYWRUcmFja2lu
Z1Rlc3Q6OkxvYWRGaW5pc2hlZCk7CisKKyAgICBnX2Fzc2VydF9lcnJvcih0ZXN0LT5tX2Vycm9y
LmdldCgpLCBXRUJLSVRfTkVUV09SS19FUlJPUiwgV0VCS0lUX05FVFdPUktfRVJST1JfQ0FOQ0VM
TEVEKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvbkxvYWRDYW5j
ZWxsZWQoQXV0aGVudGljYXRpb25UZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRl
c3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2F1dGgtdGVzdC5odG1sIikuZGF0
YSgpKTsKKyAgICB0ZXN0LT53YWl0Rm9yQXV0aGVudGljYXRpb25SZXF1ZXN0KCk7CisgICAgd2Vi
a2l0X3dlYl92aWV3X3N0b3BfbG9hZGluZyh0ZXN0LT5tX3dlYlZpZXcpOworICAgIC8vIEV4cGVj
dCBlbXB0eSBwYWdlLgorICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIGdf
YXNzZXJ0KHRlc3QtPmF1dGhlbnRpY2F0aW9uQ2FuY2VsbGVkUmVjZWl2ZWQpOworCisgICAgZ19h
c3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50cy5zaXplKCksID09LCAzKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6
UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9h
ZEV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZEZhaWxlZCk7
CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1syXSwgPT0sIExvYWRUcmFj
a2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7CisKKyAgICBnX2Fzc2VydF9lcnJvcih0ZXN0LT5tX2Vy
cm9yLmdldCgpLCBXRUJLSVRfTkVUV09SS19FUlJPUiwgV0VCS0lUX05FVFdPUktfRVJST1JfQ0FO
Q0VMTEVEKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvbkZhaWx1
cmUoQXV0aGVudGljYXRpb25UZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIC8vIFRl
c3QgYXV0aGVudGljYXRpb24gZmFpbHVyZXMuCisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5n
ZXRVUklGb3JQYXRoKCIvYXV0aC10ZXN0Lmh0bWwiKS5kYXRhKCkpOworICAgIFdlYktpdEF1dGhl
bnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCA9IHRlc3QtPndhaXRGb3JBdXRoZW50aWNhdGlvblJl
cXVlc3QoKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfaXNf
cmV0cnkocmVxdWVzdCkpOworICAgIFdlYktpdENyZWRlbnRpYWwqIGNyZWRlbnRpYWwgPSB3ZWJr
aXRfY3JlZGVudGlhbF9uZXcoYXV0aFRlc3RVc2VybmFtZSwgIndyb25ncGFzc3dvcmQiLCBXRUJL
SVRfQ1JFREVOVElBTF9QRVJTSVNURU5DRV9OT05FKTsKKyAgICB3ZWJraXRfYXV0aGVudGljYXRp
b25fcmVxdWVzdF9hdXRoZW50aWNhdGUocmVxdWVzdCwgY3JlZGVudGlhbCk7CisgICAgd2Via2l0
X2NyZWRlbnRpYWxfZnJlZShjcmVkZW50aWFsKTsKKyAgICAvLyBFeHBlY3QgYSBzZWNvbmQgYXV0
aGVudGljYXRpb24gcmVxdWVzdC4KKyAgICByZXF1ZXN0ID0gdGVzdC0+d2FpdEZvckF1dGhlbnRp
Y2F0aW9uUmVxdWVzdCgpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1
ZXN0X2lzX3JldHJ5KHJlcXVlc3QpKTsKKyAgICAvLyBUZXN0IHNlY29uZCBmYWlsdXJlLgorICAg
IGNyZWRlbnRpYWwgPSB3ZWJraXRfY3JlZGVudGlhbF9uZXcoYXV0aFRlc3RVc2VybmFtZSwgIndy
b25ncGFzc3dvcmQyIiwgV0VCS0lUX0NSRURFTlRJQUxfUEVSU0lTVEVOQ0VfTk9ORSk7CisgICAg
d2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfYXV0aGVudGljYXRlKHJlcXVlc3QsIGNyZWRl
bnRpYWwpOworICAgIHdlYmtpdF9jcmVkZW50aWFsX2ZyZWUoY3JlZGVudGlhbCk7CisgICAgLy8g
RXhwZWN0IGF1dGhlbnRpY2F0aW9uIGZhaWxlZCBwYWdlLgorICAgIHRlc3QtPndhaXRVbnRpbExv
YWRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50cy5z
aXplKCksID09LCAzKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzBd
LCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7CisgICAgZ19h
c3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6
OkxvYWRDb21taXR0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNb
Ml0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3RpdGxlKHRlc3QtPm1fd2ViVmlldyksID09LCBhdXRo
RXhwZWN0ZWRGYWlsdXJlVGl0bGUpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0F1dGhl
bnRpY2F0aW9uTm9DcmVkZW50aWFsKEF1dGhlbnRpY2F0aW9uVGVzdCogdGVzdCwgZ2NvbnN0cG9p
bnRlcikKK3sKKyAgICAvLyBUZXN0IGNvbnRpbnVlIHdpdGhvdXQgY3JlZGVudGlhbHMuCisgICAg
dGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvYXV0aC10ZXN0Lmh0bWwiKS5k
YXRhKCkpOworICAgIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCA9IHRlc3Qt
PndhaXRGb3JBdXRoZW50aWNhdGlvblJlcXVlc3QoKTsKKyAgICB3ZWJraXRfYXV0aGVudGljYXRp
b25fcmVxdWVzdF9hdXRoZW50aWNhdGUocmVxdWVzdCwgMCk7CisgICAgLy8gU2VydmVyIGRvZXNu
J3QgYXNrIGZvciBuZXcgY3JlZGVudGlhbHMuCisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlz
aGVkKCk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzLnNpemUoKSwg
PT0sIDMpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMF0sID09LCBM
b2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZENv
bW1pdHRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1syXSwgPT0s
IExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdl
YmtpdF93ZWJfdmlld19nZXRfdGl0bGUodGVzdC0+bV93ZWJWaWV3KSwgPT0sIGF1dGhFeHBlY3Rl
ZEZhaWx1cmVUaXRsZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3QXV0aGVudGljYXRp
b25TdG9yYWdlKEF1dGhlbnRpY2F0aW9uVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAg
ICAvLyBFbmFibGUgcHJpdmF0ZSBicm93c2luZyBiZWZvcmUgYXV0aGVudGljYXRpb24gcmVxdWVz
dCB0byB0ZXN0IHRoYXQgY3JlZGVudGlhbHMgY2FuJ3QgYmUgc2F2ZWQuCisgICAgd2Via2l0X3Nl
dHRpbmdzX3NldF9lbmFibGVfcHJpdmF0ZV9icm93c2luZyh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3Nl
dHRpbmdzKHRlc3QtPm1fd2ViVmlldyksIFRSVUUpOworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZl
ci0+Z2V0VVJJRm9yUGF0aCgiL2F1dGgtdGVzdC5odG1sIikuZGF0YSgpKTsKKyAgICBXZWJLaXRB
dXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QgPSB0ZXN0LT53YWl0Rm9yQXV0aGVudGljYXRp
b25SZXF1ZXN0KCk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0
X2dldF9wcm9wb3NlZF9jcmVkZW50aWFsKHJlcXVlc3QpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0
X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfY2FuX3NhdmVfY3JlZGVudGlhbHMocmVxdWVzdCkpOwor
CisgICAgLy8gSWYgV2ViS2l0IGhhcyBiZWVuIGNvbXBpbGVkIHdpdGggbGlic2VjcmV0LCBhbmQg
cHJpdmF0ZSBicm93c2luZyBpcyBkaXNhYmxlZAorICAgIC8vIHRoZW4gY2hlY2sgdGhhdCBjcmVk
ZW50aWFscyBjYW4gYmUgc2F2ZWQuCisjaWYgRU5BQkxFKENSRURFTlRJQUxfU1RPUkFHRSkKKyAg
ICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9wcml2YXRlX2Jyb3dzaW5nKHdlYmtpdF93ZWJf
dmlld19nZXRfc2V0dGluZ3ModGVzdC0+bV93ZWJWaWV3KSwgRkFMU0UpOworICAgIHRlc3QtPmxv
YWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2F1dGgtdGVzdC5odG1sIikuZGF0YSgpKTsK
KyAgICByZXF1ZXN0ID0gdGVzdC0+d2FpdEZvckF1dGhlbnRpY2F0aW9uUmVxdWVzdCgpOworICAg
IGdfYXNzZXJ0KCF3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcHJvcG9zZWRfY3Jl
ZGVudGlhbChyZXF1ZXN0KSk7CisgICAgZ19hc3NlcnQod2Via2l0X2F1dGhlbnRpY2F0aW9uX3Jl
cXVlc3RfY2FuX3NhdmVfY3JlZGVudGlhbHMocmVxdWVzdCkpOworI2VuZGlmCit9CisKK3N0YXRp
YyB2b2lkIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25TdWNjZXNzKEF1dGhlbnRpY2F0aW9uVGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICAvLyBUZXN0IGNvcnJlY3QgYXV0aGVudGlj
YXRpb24uCisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvYXV0aC10
ZXN0Lmh0bWwiKS5kYXRhKCkpOworICAgIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVx
dWVzdCA9IHRlc3QtPndhaXRGb3JBdXRoZW50aWNhdGlvblJlcXVlc3QoKTsKKyAgICBXZWJLaXRD
cmVkZW50aWFsKiBjcmVkZW50aWFsID0gd2Via2l0X2NyZWRlbnRpYWxfbmV3KGF1dGhUZXN0VXNl
cm5hbWUsIGF1dGhUZXN0UGFzc3dvcmQsIFdFQktJVF9DUkVERU5USUFMX1BFUlNJU1RFTkNFX0ZP
Ul9TRVNTSU9OKTsKKyAgICB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9hdXRoZW50aWNh
dGUocmVxdWVzdCwgY3JlZGVudGlhbCk7CisgICAgd2Via2l0X2NyZWRlbnRpYWxfZnJlZShjcmVk
ZW50aWFsKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIGdfYXNz
ZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHMuc2l6ZSgpLCA9PSwgMyk7CisgICAgZ19hc3Nl
cnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1swXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlBy
b3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRF
dmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkQ29tbWl0dGVkKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6
TG9hZEZpbmlzaGVkKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dldF90
aXRsZSh0ZXN0LT5tX3dlYlZpZXcpLCA9PSwgYXV0aEV4cGVjdGVkU3VjY2Vzc1RpdGxlKTsKKwor
ICAgIC8vIFRlc3QgbG9hZGluZyB0aGUgc2FtZSAoYXV0aG9yaXplZCkgcGFnZSBhZ2Fpbi4KKyAg
ICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9hdXRoLXRlc3QuaHRtbCIp
LmRhdGEoKSk7CisgICAgLy8gVGhlcmUgaXMgbm8gYXV0aGVudGljYXRpb24gY2hhbGxlbmdlLgor
ICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnRfY21waW50
KHRlc3QtPm1fbG9hZEV2ZW50cy5zaXplKCksID09LCAzKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
dGVzdC0+bV9sb2FkRXZlbnRzWzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxM
b2FkU3RhcnRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1sxXSwg
PT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRDb21taXR0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGlu
dCh0ZXN0LT5tX2xvYWRFdmVudHNbMl0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNo
ZWQpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3RpdGxlKHRlc3Qt
Pm1fd2ViVmlldyksID09LCBhdXRoRXhwZWN0ZWRTdWNjZXNzVGl0bGUpOworfQorCitzdGF0aWMg
dm9pZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiwgU291cE1lc3NhZ2UqIG1lc3NhZ2UsIGNv
bnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqLCBTb3VwQ2xpZW50Q29udGV4dCosIHZvaWQqKQor
eworICAgIGlmIChtZXNzYWdlLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7CisgICAgICAg
IHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9JTVBMRU1F
TlRFRCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIXN0cmNtcChwYXRoLCAi
L2F1dGgtdGVzdC5odG1sIikpIHsKKyAgICAgICAgY29uc3QgY2hhciogYXV0aG9yaXphdGlvbiA9
IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9vbmUobWVzc2FnZS0+cmVxdWVzdF9oZWFkZXJzLCAi
QXV0aG9yaXphdGlvbiIpOworICAgICAgICAvLyBSZXF1aXJlIGF1dGhlbnRpY2F0aW9uLgorICAg
ICAgICBpZiAoIWdfc3RyY21wMChhdXRob3JpemF0aW9uLCBhdXRoRXhwZWN0ZWRBdXRob3JpemF0
aW9uKSkgeworICAgICAgICAgICAgLy8gU3VjY2Vzc2Z1bCBhdXRoZW50aWNhdGlvbi4KKyAgICAg
ICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsK
KyAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9i
b2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGF1dGhTdWNjZXNzSFRNTFN0cmluZywgc3RybGVuKGF1
dGhTdWNjZXNzSFRNTFN0cmluZykpOworICAgICAgICAgICAgQXV0aGVudGljYXRpb25UZXN0Ojph
dXRoZW50aWNhdGlvblJldHJpZXMgPSAwOworICAgICAgICB9IGVsc2UgaWYgKCsrQXV0aGVudGlj
YXRpb25UZXN0OjphdXRoZW50aWNhdGlvblJldHJpZXMgPCAzKSB7CisgICAgICAgICAgICAvLyBO
byBvciBpbnZhbGlkIGF1dGhvcml6YXRpb24gaGVhZGVyIHByb3ZpZGVkIGJ5IHRoZSBjbGllbnQs
IHJlcXVlc3QgYXV0aGVudGljYXRpb24gdHdpY2UgdGhlbiBmYWlsLgorICAgICAgICAgICAgc291
cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfVU5BVVRIT1JJWkVEKTsK
KyAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChtZXNzYWdlLT5yZXNwb25z
ZV9oZWFkZXJzLCAiV1dXLUF1dGhlbnRpY2F0ZSIsICJCYXNpYyByZWFsbT1cIm15IHJlYWxtXCIi
KTsKKyAgICAgICAgICAgIC8vIEluY2x1ZGUgYSBmYWlsdXJlIG1lc3NhZ2UgaW4gY2FzZSB0aGUg
dXNlciBhdHRlbXB0cyB0byBwcm9jZWVkIHdpdGhvdXQgYXV0aGVudGljYXRpb24uCisgICAgICAg
ICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09V
UF9NRU1PUllfU1RBVElDLCBhdXRoRmFpbHVyZUhUTUxTdHJpbmcsIHN0cmxlbihhdXRoRmFpbHVy
ZUhUTUxTdHJpbmcpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEF1dGhlbnRp
Y2F0aW9uIG5vdCBzdWNjZXNzZnVsLCBkaXNwbGF5IGEgIjQwMSBBdXRob3JpemF0aW9uIFJlcXVp
cmVkIiBwYWdlLgorICAgICAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwg
U09VUF9TVEFUVVNfT0spOworICAgICAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1l
c3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgYXV0aEZhaWx1cmVIVE1M
U3RyaW5nLCBzdHJsZW4oYXV0aEZhaWx1cmVIVE1MU3RyaW5nKSk7CisgICAgICAgIH0KKyAgICB9
IGVsc2UKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFU
VVNfTk9UX0ZPVU5EKTsKKworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2Ut
PnJlc3BvbnNlX2JvZHkpOworfQorCit2b2lkIGJlZm9yZUFsbCgpCit7CisgICAga1NlcnZlciA9
IG5ldyBXZWJLaXRUZXN0U2VydmVyKCk7CisgICAga1NlcnZlci0+cnVuKHNlcnZlckNhbGxiYWNr
KTsKKworICAgIEF1dGhlbnRpY2F0aW9uVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImF1dGhl
bnRpY2F0aW9uLXJlcXVlc3QiLCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uUmVxdWVzdCk7Cisg
ICAgQXV0aGVudGljYXRpb25UZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiYXV0aGVudGljYXRp
b24tY2FuY2VsIiwgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvbkNhbmNlbCk7CisgICAgQXV0aGVu
dGljYXRpb25UZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiYXV0aGVudGljYXRpb24tbG9hZC1j
YW5jZWxsZWQiLCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uTG9hZENhbmNlbGxlZCk7CisgICAg
QXV0aGVudGljYXRpb25UZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiYXV0aGVudGljYXRpb24t
ZmFpbHVyZSIsIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25GYWlsdXJlKTsKKyAgICBBdXRoZW50
aWNhdGlvblRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJhdXRoZW50aWNhdGlvbi1uby1jcmVk
ZW50aWFsIiwgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvbk5vQ3JlZGVudGlhbCk7CisgICAgQXV0
aGVudGljYXRpb25UZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiYXV0aGVudGljYXRpb24tc3Rv
cmFnZSIsIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25TdG9yYWdlKTsKKyAgICAvLyBUZXN0aW5n
IGF1dGhlbnRpY2F0aW9uIHN1Y2Nlc3MgbXVzdCBiZSBkb25lIGxhc3QgYmVjYXVzZSBsaWJzb3Vw
IHdpbGwgbmV2ZXIgZmlyZQorICAgIC8vIHRoZSBhdXRoZW50aWNhdGUgc2lnbmFsIGFnYWluIG9u
Y2UgYXV0aGVudGljYXRpb24gaXMgc3VjY2Vzc2Z1bC4KKyAgICBBdXRoZW50aWNhdGlvblRlc3Q6
OmFkZCgiV2ViS2l0V2ViVmlldyIsICJhdXRoZW50aWNhdGlvbi1zdWNjZXNzIiwgdGVzdFdlYlZp
ZXdBdXRoZW50aWNhdGlvblN1Y2Nlc3MpOworfQorCit2b2lkIGFmdGVyQWxsKCkKK3sKKyAgICBk
ZWxldGUga1NlcnZlcjsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Mkd0ay9UZXN0QmFja0ZvcndhcmRMaXN0LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Mkd0ay9UZXN0QmFja0ZvcndhcmRMaXN0LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5iNDc5MzY2Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RCYWNrRm9yd2FyZExpc3QuY3BwCkBAIC0w
LDAgKzEsMjgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKKyNpbmNsdWRl
ICJXZWJWaWV3VGVzdC5oIgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDxsaWJzb3Vw
L3NvdXAuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdDIu
aD4KKworLy8gQmFjayBmb3J3YXJkIGxpc3QgbGltaXQgaXMgMTAwIGJ5IGRlZmF1bHQuCitzdGF0
aWMgY29uc3QgaW50IGtCYWNrRm9yd2FyZExpc3RMaW1pdCA9IDEwMDsKKworc3RhdGljIFdlYktp
dFRlc3RTZXJ2ZXIqIGtTZXJ2ZXI7CisKK3N0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBT
ZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1zZywgY29uc3QgY2hhciogcGF0aCwgR0hhc2hU
YWJsZSogcXVlcnksIFNvdXBDbGllbnRDb250ZXh0KiBjb250ZXh0LCBncG9pbnRlciBkYXRhKQor
eworICAgIGlmIChtc2ctPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKKyAgICAgICAgc291
cF9tZXNzYWdlX3NldF9zdGF0dXMobXNnLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGdfc3RyX2hhc19zdWZmaXgocGF0aCwg
ImZhdmljb24uaWNvIikpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobXNnLCBT
T1VQX1NUQVRVU19OT1RfRk9VTkQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc291
cF9tZXNzYWdlX3NldF9zdGF0dXMobXNnLCBTT1VQX1NUQVRVU19PSyk7CisKKyAgICBjaGFyKiBi
b2R5ID0gZ19zdHJkdXBfcHJpbnRmKCI8aHRtbD48dGl0bGU+JXM8L3RpdGxlPjxib2R5PiVzPC9i
b2R5PjwvaHRtbD4iLCBwYXRoICsgMSwgcGF0aCArIDEpOworICAgIHNvdXBfbWVzc2FnZV9ib2R5
X2FwcGVuZChtc2ctPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGJvZHksIHN0cmxl
bihib2R5KSk7CisKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtc2ctPnJlc3BvbnNl
X2JvZHkpOworfQorCitjbGFzcyBCYWNrRm9yd2FyZExpc3RUZXN0OiBwdWJsaWMgV2ViVmlld1Rl
c3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoQmFja0ZvcndhcmRMaXN0
VGVzdCk7CisKKyAgICBlbnVtIHsKKyAgICAgICAgQmFja3dhcmQsCisgICAgICAgIEZvcndhcmQK
KyAgICB9OworCisgICAgZW51bSB7CisgICAgICAgIEN1cnJlbnRJdGVtICA9IDEgPDwgMCwKKyAg
ICAgICAgQWRkZWRJdGVtICAgID0gMSA8PCAxLAorICAgICAgICBSZW1vdmVkSXRlbXMgPSAxIDw8
IDIKKyAgICB9OworCisgICAgc3RhdGljIHZvaWQgY2hlY2tJdGVtKFdlYktpdEJhY2tGb3J3YXJk
TGlzdEl0ZW0qIGl0ZW0sIGNvbnN0IGNoYXIqIHRpdGxlLCBjb25zdCBjaGFyKiB1cmksIGNvbnN0
IGNoYXIqIG9yaWdpbmFsVVJJKQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQoaXRlbSk7CisgICAg
ICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9nZXRfdXJp
KGl0ZW0pLCA9PSwgdXJpKTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9iYWNrX2Zv
cndhcmRfbGlzdF9pdGVtX2dldF90aXRsZShpdGVtKSwgPT0gLCB0aXRsZSk7CisgICAgICAgIGdf
YXNzZXJ0X2NtcHN0cih3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9nZXRfb3JpZ2luYWxf
dXJpKGl0ZW0pLCA9PSwgb3JpZ2luYWxVUkkpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGNo
ZWNrSXRlbUluZGV4KFdlYktpdEJhY2tGb3J3YXJkTGlzdCogbGlzdCkKKyAgICB7CisgICAgICAg
IGdfYXNzZXJ0KHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbnRoX2l0ZW0obGlzdCwgLTEp
ID09IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19pdGVtKGxpc3QpKTsKKyAgICAg
ICAgZ19hc3NlcnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9udGhfaXRlbShsaXN0LCAw
KSA9PSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbShsaXN0KSk7Cisg
ICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbnRoX2l0ZW0obGlz
dCwgMSkgPT0gd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2l0ZW0obGlzdCkp
OworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGNoZWNrTGlzdChXZWJLaXRCYWNrRm9yd2FyZExp
c3QqIGxpc3QsIHVuc2lnbmVkIHR5cGUsIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qKiBpdGVt
cywgdW5zaWduZWQgbkl0ZW1zKQorICAgIHsKKyAgICAgICAgR0xpc3QqIGxpc3RJdGVtcyA9IHR5
cGUgPT0gQmFja0ZvcndhcmRMaXN0VGVzdDo6QmFja3dhcmQgPyB3ZWJraXRfYmFja19mb3J3YXJk
X2xpc3RfZ2V0X2JhY2tfbGlzdChsaXN0KSA6CisgICAgICAgICAgICB3ZWJraXRfYmFja19mb3J3
YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlzdChsaXN0KTsKKyAgICAgICAgZ19hc3NlcnQobGlzdEl0
ZW1zKTsKKworICAgICAgICB1bnNpZ25lZCBpID0gMDsKKyAgICAgICAgZm9yIChHTGlzdCogbGlz
dEl0ZW0gPSBsaXN0SXRlbXM7IGxpc3RJdGVtOyBsaXN0SXRlbSA9IGdfbGlzdF9uZXh0KGxpc3RJ
dGVtKSwgaSsrKSB7CisgICAgICAgICAgICBnX2Fzc2VydF9jbXB1aW50KGksIDwsIG5JdGVtcyk7
CisgICAgICAgICAgICBnX2Fzc2VydChsaXN0SXRlbS0+ZGF0YSA9PSBpdGVtc1tpXSk7CisgICAg
ICAgIH0KKyAgICAgICAgZ19saXN0X2ZyZWUobGlzdEl0ZW1zKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgdm9pZCBiYWNrRm9yd2FyZExpc3RDaGFuZ2VkKFdlYktpdEJhY2tGb3J3YXJkTGlzdCogbGlz
dCwgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSogYWRkZWRJdGVtLCBHTGlzdCogcmVtb3ZlZEl0
ZW1zLCBCYWNrRm9yd2FyZExpc3RUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+bV9o
YXNDaGFuZ2VkID0gdHJ1ZTsKKworICAgICAgICBpZiAodGVzdC0+bV9jaGFuZ2VkRmxhZ3MgJiBC
YWNrRm9yd2FyZExpc3RUZXN0OjpBZGRlZEl0ZW0pIHsKKyAgICAgICAgICAgIGdfYXNzZXJ0KFdF
QktJVF9JU19CQUNLX0ZPUldBUkRfTElTVF9JVEVNKGFkZGVkSXRlbSkpOworICAgICAgICAgICAg
dGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChhZGRl
ZEl0ZW0pKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBnX2Fzc2VydCghYWRkZWRJdGVt
KTsKKworICAgICAgICBpZiAodGVzdC0+bV9jaGFuZ2VkRmxhZ3MgJiBCYWNrRm9yd2FyZExpc3RU
ZXN0OjpSZW1vdmVkSXRlbXMpIHsKKyAgICAgICAgICAgIGdfYXNzZXJ0KHJlbW92ZWRJdGVtcyk7
CisgICAgICAgICAgICBmb3IgKEdMaXN0KiBpdGVyID0gcmVtb3ZlZEl0ZW1zOyBpdGVyOyBpdGVy
ID0gaXRlci0+bmV4dCkgeworICAgICAgICAgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19CQUNL
X0ZPUldBUkRfTElTVF9JVEVNKGl0ZXItPmRhdGEpKTsKKyAgICAgICAgICAgICAgICBpZiAodGVz
dC0+bV9leHBlY3RlZFJlbW92ZWRJdGVtcykKKyAgICAgICAgICAgICAgICAgICAgZ19hc3NlcnQo
Z19saXN0X2ZpbmQodGVzdC0+bV9leHBlY3RlZFJlbW92ZWRJdGVtcywgaXRlci0+ZGF0YSkpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZ19hc3NlcnQoIXJl
bW92ZWRJdGVtcyk7CisgICAgfQorCisgICAgQmFja0ZvcndhcmRMaXN0VGVzdCgpCisgICAgICAg
IDogbV9saXN0KHdlYmtpdF93ZWJfdmlld19nZXRfYmFja19mb3J3YXJkX2xpc3QobV93ZWJWaWV3
KSkKKyAgICAgICAgLCBtX2NoYW5nZWRGbGFncygwKQorICAgICAgICAsIG1faGFzQ2hhbmdlZChm
YWxzZSkKKyAgICAgICAgLCBtX2V4cGVjdGVkUmVtb3ZlZEl0ZW1zKDApCisgICAgeworICAgICAg
ICBnX3NpZ25hbF9jb25uZWN0KG1fbGlzdCwgImNoYW5nZWQiLCBHX0NBTExCQUNLKGJhY2tGb3J3
YXJkTGlzdENoYW5nZWQpLCB0aGlzKTsKKyAgICAgICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hl
blRlc3RGaW5pc2hlcyhHX09CSkVDVChtX2xpc3QpKTsKKyAgICB9CisKKyAgICB+QmFja0Zvcndh
cmRMaXN0VGVzdCgpCisgICAgeworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0
X21hdGNoZWQobV9saXN0LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsK
KyAgICB9CisKKyAgICB2b2lkIHdhaXRVbnRpbExvYWRGaW5pc2hlZCgpCisgICAgeworICAgICAg
ICBtX2hhc0NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgV2ViVmlld1Rlc3Q6OndhaXRVbnRpbExv
YWRGaW5pc2hlZCgpOworICAgICAgICBnX2Fzc2VydChtX2hhc0NoYW5nZWQpOworICAgIH0KKwor
ICAgIHZvaWQgd2FpdFVudGlsTG9hZEZpbmlzaGVkQW5kQ2hlY2tSZW1vdmVkSXRlbXMoR0xpc3Qq
IHJlbW92ZWRJdGVtcykKKyAgICB7CisgICAgICAgIG1fZXhwZWN0ZWRSZW1vdmVkSXRlbXMgPSBy
ZW1vdmVkSXRlbXM7CisgICAgICAgIHdhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgICAgICBt
X2V4cGVjdGVkUmVtb3ZlZEl0ZW1zID0gMDsKKyAgICB9CisKKyAgICBXZWJLaXRCYWNrRm9yd2Fy
ZExpc3QqIG1fbGlzdDsKKyAgICB1bnNpZ25lZCBsb25nIG1fY2hhbmdlZEZsYWdzOworICAgIGJv
b2wgbV9oYXNDaGFuZ2VkOworICAgIEdMaXN0KiBtX2V4cGVjdGVkUmVtb3ZlZEl0ZW1zOworfTsK
Kworc3RhdGljIHZvaWQgdGVzdEJhY2tGb3J3YXJkTGlzdE5hdmlnYXRpb24oQmFja0ZvcndhcmRM
aXN0VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBXZWJLaXRCYWNrRm9yd2FyZExp
c3RJdGVtKiBpdGVtc1sxXTsKKworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dv
X2JhY2sodGVzdC0+bV93ZWJWaWV3KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19j
YW5fZ29fZm9yd2FyZCh0ZXN0LT5tX3dlYlZpZXcpKTsKKworICAgIGdfYXNzZXJ0X2NtcHVpbnQo
d2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9sZW5ndGgodGVzdC0+bV9saXN0KSwgPT0sIDAp
OworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRl
bSh0ZXN0LT5tX2xpc3QpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0
X2dldF9iYWNrX2l0ZW0odGVzdC0+bV9saXN0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNr
X2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9pdGVtKHRlc3QtPm1fbGlzdCkpOworICAgIEJhY2tG
b3J3YXJkTGlzdFRlc3Q6OmNoZWNrSXRlbUluZGV4KHRlc3QtPm1fbGlzdCk7CisgICAgZ19hc3Nl
cnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19saXN0KHRlc3QtPm1fbGlzdCkp
OworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlz
dCh0ZXN0LT5tX2xpc3QpKTsKKworICAgIENTdHJpbmcgdXJpUGFnZTEgPSBrU2VydmVyLT5nZXRV
UklGb3JQYXRoKCIvUGFnZTEiKTsKKyAgICB0ZXN0LT5tX2NoYW5nZWRGbGFncyA9IEJhY2tGb3J3
YXJkTGlzdFRlc3Q6OkN1cnJlbnRJdGVtIHwgQmFja0ZvcndhcmRMaXN0VGVzdDo6QWRkZWRJdGVt
OworICAgIHRlc3QtPmxvYWRVUkkodXJpUGFnZTEuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50
aWxMb2FkRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dv
X2JhY2sodGVzdC0+bV93ZWJWaWV3KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19j
YW5fZ29fZm9yd2FyZCh0ZXN0LT5tX3dlYlZpZXcpKTsKKworICAgIGdfYXNzZXJ0X2NtcHVpbnQo
d2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9sZW5ndGgodGVzdC0+bV9saXN0KSwgPT0sIDEp
OworICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW1QYWdlMSA9IHdlYmtpdF9iYWNr
X2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKHRlc3QtPm1fbGlzdCk7CisgICAgQmFja0Zv
cndhcmRMaXN0VGVzdDo6Y2hlY2tJdGVtKGl0ZW1QYWdlMSwgIlBhZ2UxIiwgdXJpUGFnZTEuZGF0
YSgpLCB1cmlQYWdlMS5kYXRhKCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJk
X2xpc3RfZ2V0X2JhY2tfaXRlbSh0ZXN0LT5tX2xpc3QpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0
X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2l0ZW0odGVzdC0+bV9saXN0KSk7CisgICAg
QmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tJdGVtSW5kZXgodGVzdC0+bV9saXN0KTsKKyAgICBn
X2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3QodGVzdC0+bV9s
aXN0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2Fy
ZF9saXN0KHRlc3QtPm1fbGlzdCkpOworCisgICAgQ1N0cmluZyB1cmlQYWdlMiA9IGtTZXJ2ZXIt
PmdldFVSSUZvclBhdGgoIi9QYWdlMiIpOworICAgIHRlc3QtPm1fY2hhbmdlZEZsYWdzID0gQmFj
a0ZvcndhcmRMaXN0VGVzdDo6Q3VycmVudEl0ZW0gfCBCYWNrRm9yd2FyZExpc3RUZXN0OjpBZGRl
ZEl0ZW07CisgICAgdGVzdC0+bG9hZFVSSSh1cmlQYWdlMi5kYXRhKCkpOworICAgIHRlc3QtPndh
aXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2Nh
bl9nb19iYWNrKHRlc3QtPm1fd2ViVmlldykpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3Zp
ZXdfY2FuX2dvX2ZvcndhcmQodGVzdC0+bV93ZWJWaWV3KSk7CisKKyAgICBnX2Fzc2VydF9jbXB1
aW50KHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbGVuZ3RoKHRlc3QtPm1fbGlzdCksID09
LCAyKTsKKyAgICBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiBpdGVtUGFnZTIgPSB3ZWJraXRf
YmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh0ZXN0LT5tX2xpc3QpOworICAgIEJh
Y2tGb3J3YXJkTGlzdFRlc3Q6OmNoZWNrSXRlbShpdGVtUGFnZTIsICJQYWdlMiIsIHVyaVBhZ2Uy
LmRhdGEoKSwgdXJpUGFnZTIuZGF0YSgpKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfYmFja19mb3J3
YXJkX2xpc3RfZ2V0X2JhY2tfaXRlbSh0ZXN0LT5tX2xpc3QpID09IGl0ZW1QYWdlMSk7CisgICAg
Z19hc3NlcnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9pdGVtKHRlc3Qt
Pm1fbGlzdCkpOworICAgIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OmNoZWNrSXRlbUluZGV4KHRlc3Qt
Pm1fbGlzdCk7CisgICAgaXRlbXNbMF0gPSBpdGVtUGFnZTE7CisgICAgQmFja0ZvcndhcmRMaXN0
VGVzdDo6Y2hlY2tMaXN0KHRlc3QtPm1fbGlzdCwgQmFja0ZvcndhcmRMaXN0VGVzdDo6QmFja3dh
cmQsIGl0ZW1zLCAxKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dl
dF9mb3J3YXJkX2xpc3QodGVzdC0+bV9saXN0KSk7CisKKyAgICB0ZXN0LT5tX2NoYW5nZWRGbGFn
cyA9IEJhY2tGb3J3YXJkTGlzdFRlc3Q6OkN1cnJlbnRJdGVtOworICAgIHRlc3QtPmdvQmFjaygp
OworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQoIXdl
YmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayh0ZXN0LT5tX3dlYlZpZXcpKTsKKyAgICBnX2Fzc2Vy
dCh3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQodGVzdC0+bV93ZWJWaWV3KSk7CisKKyAg
ICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbGVuZ3RoKHRl
c3QtPm1fbGlzdCksID09LCAyKTsKKyAgICBnX2Fzc2VydChpdGVtUGFnZTEgPT0gd2Via2l0X2Jh
Y2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0odGVzdC0+bV9saXN0KSk7CisgICAgQmFj
a0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tJdGVtKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRf
Y3VycmVudF9pdGVtKHRlc3QtPm1fbGlzdCksICJQYWdlMSIsIHVyaVBhZ2UxLmRhdGEoKSwgdXJp
UGFnZTEuZGF0YSgpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dl
dF9iYWNrX2l0ZW0odGVzdC0+bV9saXN0KSk7CisgICAgZ19hc3NlcnQod2Via2l0X2JhY2tfZm9y
d2FyZF9saXN0X2dldF9mb3J3YXJkX2l0ZW0odGVzdC0+bV9saXN0KSA9PSBpdGVtUGFnZTIpOwor
ICAgIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OmNoZWNrSXRlbUluZGV4KHRlc3QtPm1fbGlzdCk7Cisg
ICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19saXN0KHRlc3Qt
Pm1fbGlzdCkpOworICAgIGl0ZW1zWzBdID0gaXRlbVBhZ2UyOworICAgIEJhY2tGb3J3YXJkTGlz
dFRlc3Q6OmNoZWNrTGlzdCh0ZXN0LT5tX2xpc3QsIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OkZvcndh
cmQsIGl0ZW1zLCAxKTsKKworICAgIHRlc3QtPm1fY2hhbmdlZEZsYWdzID0gQmFja0ZvcndhcmRM
aXN0VGVzdDo6Q3VycmVudEl0ZW07CisgICAgdGVzdC0+Z29Gb3J3YXJkKCk7CisgICAgdGVzdC0+
d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdf
Y2FuX2dvX2JhY2sodGVzdC0+bV93ZWJWaWV3KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJf
dmlld19jYW5fZ29fZm9yd2FyZCh0ZXN0LT5tX3dlYlZpZXcpKTsKKworICAgIGdfYXNzZXJ0X2Nt
cHVpbnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9sZW5ndGgodGVzdC0+bV9saXN0KSwg
PT0sIDIpOworICAgIGdfYXNzZXJ0KGl0ZW1QYWdlMiA9PSB3ZWJraXRfYmFja19mb3J3YXJkX2xp
c3RfZ2V0X2N1cnJlbnRfaXRlbSh0ZXN0LT5tX2xpc3QpKTsKKyAgICBCYWNrRm9yd2FyZExpc3RU
ZXN0OjpjaGVja0l0ZW0od2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0o
dGVzdC0+bV9saXN0KSwgIlBhZ2UyIiwgdXJpUGFnZTIuZGF0YSgpLCB1cmlQYWdlMi5kYXRhKCkp
OworICAgIGdfYXNzZXJ0KHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19pdGVtKHRl
c3QtPm1fbGlzdCkgPT0gaXRlbVBhZ2UxKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9y
d2FyZF9saXN0X2dldF9mb3J3YXJkX2l0ZW0odGVzdC0+bV9saXN0KSk7CisgICAgQmFja0Zvcndh
cmRMaXN0VGVzdDo6Y2hlY2tJdGVtSW5kZXgodGVzdC0+bV9saXN0KTsKKyAgICBpdGVtc1swXSA9
IGl0ZW1QYWdlMTsKKyAgICBCYWNrRm9yd2FyZExpc3RUZXN0OjpjaGVja0xpc3QodGVzdC0+bV9s
aXN0LCBCYWNrRm9yd2FyZExpc3RUZXN0OjpCYWNrd2FyZCwgaXRlbXMsIDEpOworICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlzdCh0ZXN0LT5tX2xp
c3QpKTsKKworICAgIHRlc3QtPm1fY2hhbmdlZEZsYWdzID0gQmFja0ZvcndhcmRMaXN0VGVzdDo6
Q3VycmVudEl0ZW07CisgICAgdGVzdC0+Z29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW0oaXRlbVBhZ2Ux
KTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KGl0
ZW1QYWdlMSA9PSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh0ZXN0
LT5tX2xpc3QpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEJhY2tGb3J3YXJkTGlzdExpbWl0QW5k
Q2FjaGUoQmFja0ZvcndhcmRMaXN0VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IGtCYWNrRm9yd2FyZExpc3RMaW1pdDsgaSsrKSB7CisgICAgICAg
IEdPd25QdHI8Y2hhcj4gcGF0aChnX3N0cmR1cF9wcmludGYoIi9QYWdlJWQiLCBpKSk7CisgICAg
ICAgIHRlc3QtPm1fY2hhbmdlZEZsYWdzID0gQmFja0ZvcndhcmRMaXN0VGVzdDo6Q3VycmVudEl0
ZW0gfCBCYWNrRm9yd2FyZExpc3RUZXN0OjpBZGRlZEl0ZW07CisgICAgICAgIHRlc3QtPmxvYWRV
Ukkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aChwYXRoLmdldCgpKS5kYXRhKCkpOworICAgICAgICB0
ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICB9CisKKyAgICBnX2Fzc2VydF9jbXB1
aW50KHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbGVuZ3RoKHRlc3QtPm1fbGlzdCksID09
LCBrQmFja0ZvcndhcmRMaXN0TGltaXQpOworICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0q
IGl0ZW1QYWdlRmlyc3QgPSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X250aF9pdGVtKHRl
c3QtPm1fbGlzdCwgLShrQmFja0ZvcndhcmRMaXN0TGltaXQgLSAxKSk7CisgICAgR093blB0cjxH
TGlzdD4gcmVtb3ZlZEl0ZW1zKGdfbGlzdF9wcmVwZW5kKDAsIGl0ZW1QYWdlRmlyc3QpKTsKKwor
ICAgIEdPd25QdHI8Y2hhcj4gcGF0aChnX3N0cmR1cF9wcmludGYoIi9QYWdlJWQiLCBrQmFja0Zv
cndhcmRMaXN0TGltaXQpKTsKKyAgICB0ZXN0LT5tX2NoYW5nZWRGbGFncyA9IEJhY2tGb3J3YXJk
TGlzdFRlc3Q6OkN1cnJlbnRJdGVtIHwgQmFja0ZvcndhcmRMaXN0VGVzdDo6QWRkZWRJdGVtIHwg
QmFja0ZvcndhcmRMaXN0VGVzdDo6UmVtb3ZlZEl0ZW1zOworICAgIHRlc3QtPmxvYWRVUkkoa1Nl
cnZlci0+Z2V0VVJJRm9yUGF0aChwYXRoLmdldCgpKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRV
bnRpbExvYWRGaW5pc2hlZEFuZENoZWNrUmVtb3ZlZEl0ZW1zKHJlbW92ZWRJdGVtcy5nZXQoKSk7
CisKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbGVu
Z3RoKHRlc3QtPm1fbGlzdCksID09LCBrQmFja0ZvcndhcmRMaXN0TGltaXQpOworfQorCit2b2lk
IGJlZm9yZUFsbCgpCit7CisgICAga1NlcnZlciA9IG5ldyBXZWJLaXRUZXN0U2VydmVyKCk7Cisg
ICAga1NlcnZlci0+cnVuKHNlcnZlckNhbGxiYWNrKTsKKworICAgIEJhY2tGb3J3YXJkTGlzdFRl
c3Q6OmFkZCgiQmFja0ZvcndhcmRMaXN0IiwgIm5hdmlnYXRpb24iLCB0ZXN0QmFja0ZvcndhcmRM
aXN0TmF2aWdhdGlvbik7CisgICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6YWRkKCJCYWNrRm9yd2Fy
ZExpc3QiLCAibGlzdC1saW1pdC1hbmQtY2FjaGUiLCB0ZXN0QmFja0ZvcndhcmRMaXN0TGltaXRB
bmRDYWNoZSk7Cit9CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworICAgIGRlbGV0ZSBrU2VydmVyOwor
fQorCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVz
dENvbnRleHRNZW51LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9U
ZXN0Q29udGV4dE1lbnUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEy
MzI5YjkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dDJHdGsvVGVzdENvbnRleHRNZW51LmNwcApAQCAtMCwwICsxLDg2NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYlZpZXdUZXN0LmgiCisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCitjbGFz
cyBDb250ZXh0TWVudVRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7CitwdWJsaWM6CisgICAgZW51
bSBDb250ZXh0TWVudUl0ZW1TdGF0ZUZsYWdzIHsKKyAgICAgICAgVmlzaWJsZSA9IDEgPDwgMCwK
KyAgICAgICAgRW5hYmxlZCA9IDEgPDwgMSwKKyAgICAgICAgQ2hlY2tlZCA9IDEgPDwgMgorICAg
IH07CisKKyAgICB2b2lkIGNoZWNrQ29udGV4dE1lbnVFdmVudChHZGtFdmVudCogZXZlbnQpCisg
ICAgeworICAgICAgICBnX2Fzc2VydChldmVudCk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudC0+dHlwZSwgPT0sIEdES19CVVRUT05fUFJFU1MpOworICAgICAgICBnX2Fzc2VydF9jbXBp
bnQoZXZlbnQtPmJ1dHRvbi5idXR0b24sID09LCAzKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50
KGV2ZW50LT5idXR0b24ueCwgPT0sIG1fbWVudVBvc2l0aW9uWCk7CisgICAgICAgIGdfYXNzZXJ0
X2NtcGludChldmVudC0+YnV0dG9uLnksID09LCBtX21lbnVQb3NpdGlvblkpOworICAgIH0KKwor
ICAgIHN0YXRpYyBnYm9vbGVhbiBjb250ZXh0TWVudUNhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcsIFdlYktpdENvbnRleHRNZW51KiBjb250ZXh0TWVudSwgR2RrRXZlbnQqIGV2ZW50LCBX
ZWJLaXRIaXRUZXN0UmVzdWx0KiBoaXRUZXN0UmVzdWx0LCBDb250ZXh0TWVudVRlc3QqIHRlc3Qp
CisgICAgeworICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfQ09OVEVYVF9NRU5VKGNvbnRleHRN
ZW51KSk7CisgICAgICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNo
ZXMoR19PQkpFQ1QoY29udGV4dE1lbnUpKTsKKyAgICAgICAgdGVzdC0+Y2hlY2tDb250ZXh0TWVu
dUV2ZW50KGV2ZW50KTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX0hJVF9URVNUX1JFU1VM
VChoaXRUZXN0UmVzdWx0KSk7CisgICAgICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdo
ZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QoaGl0VGVzdFJlc3VsdCkpOworCisgICAgICAgIHJldHVy
biB0ZXN0LT5jb250ZXh0TWVudShjb250ZXh0TWVudSwgZXZlbnQsIGhpdFRlc3RSZXN1bHQpOwor
ICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGNvbnRleHRNZW51RGlzbWlzc2VkQ2FsbGJhY2soV2Vi
S2l0V2ViVmlldyosIENvbnRleHRNZW51VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3Qt
PmNvbnRleHRNZW51RGlzbWlzc2VkKCk7CisgICAgfQorCisgICAgQ29udGV4dE1lbnVUZXN0KCkK
KyAgICAgICAgOiBtX21lbnVQb3NpdGlvblgoMCkKKyAgICAgICAgLCBtX21lbnVQb3NpdGlvblko
MCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAiY29udGV4dC1t
ZW51IiwgR19DQUxMQkFDSyhjb250ZXh0TWVudUNhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIGdf
c2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAiY29udGV4dC1tZW51LWRpc21pc3NlZCIsIEdfQ0FM
TEJBQ0soY29udGV4dE1lbnVEaXNtaXNzZWRDYWxsYmFjayksIHRoaXMpOworICAgIH0KKworICAg
IH5Db250ZXh0TWVudVRlc3QoKQorICAgIHsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlz
Y29ubmVjdF9tYXRjaGVkKG1fd2ViVmlldywgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwg
MCwgdGhpcyk7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIGNvbnRleHRNZW51KFdlYktpdENv
bnRleHRNZW51KiwgR2RrRXZlbnQqLCBXZWJLaXRIaXRUZXN0UmVzdWx0KikgPSAwOworCisgICAg
dmlydHVhbCB2b2lkIGNvbnRleHRNZW51RGlzbWlzc2VkKCkKKyAgICB7CisgICAgICAgIHF1aXRN
YWluTG9vcCgpOworICAgIH0KKworICAgIEd0a01lbnUqIGdldFBvcHVwTWVudSgpCisgICAgewor
ICAgICAgICBHT3duUHRyPEdMaXN0PiB0b3BsZXZlbHMoZ3RrX3dpbmRvd19saXN0X3RvcGxldmVs
cygpKTsKKyAgICAgICAgZm9yIChHTGlzdCogaXRlciA9IHRvcGxldmVscy5nZXQoKTsgaXRlcjsg
aXRlciA9IGdfbGlzdF9uZXh0KGl0ZXIpKSB7CisgICAgICAgICAgICBpZiAoIUdUS19JU19XSU5E
T1coaXRlci0+ZGF0YSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAg
IEd0a1dpZGdldCogY2hpbGQgPSBndGtfYmluX2dldF9jaGlsZChHVEtfQklOKGl0ZXItPmRhdGEp
KTsKKyAgICAgICAgICAgIGlmICghR1RLX0lTX01FTlUoY2hpbGQpKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAoZ3RrX21lbnVfZ2V0X2F0dGFjaF93aWRnZXQo
R1RLX01FTlUoY2hpbGQpKSA9PSBHVEtfV0lER0VUKG1fd2ViVmlldykpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIEdUS19NRU5VKGNoaWxkKTsKKyAgICAgICAgfQorICAgICAgICBnX2Fzc2VydF9u
b3RfcmVhY2hlZCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBib29sIHNob3Vs
ZFNob3dJbnB1dE1ldGhvZHNNZW51KCkKKyAgICB7CisgICAgICAgIEd0a1NldHRpbmdzKiBzZXR0
aW5ncyA9IGd0a193aWRnZXRfZ2V0X3NldHRpbmdzKEdUS19XSURHRVQobV93ZWJWaWV3KSk7Cisg
ICAgICAgIGlmICghc2V0dGluZ3MpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAg
ICBnYm9vbGVhbiBzaG93SW5wdXRNZXRob2RNZW51OworICAgICAgICBnX29iamVjdF9nZXQoc2V0
dGluZ3MsICJndGstc2hvdy1pbnB1dC1tZXRob2QtbWVudSIsICZzaG93SW5wdXRNZXRob2RNZW51
LCBOVUxMKTsKKyAgICAgICAgcmV0dXJuIHNob3dJbnB1dE1ldGhvZE1lbnU7CisgICAgfQorCisg
ICAgdm9pZCBjaGVja0FjdGlvblN0YXRlKEd0a0FjdGlvbiogYWN0aW9uLCB1bnNpZ25lZCBzdGF0
ZSkKKyAgICB7CisgICAgICAgIGlmIChzdGF0ZSAmIFZpc2libGUpCisgICAgICAgICAgICBnX2Fz
c2VydChndGtfYWN0aW9uX2dldF92aXNpYmxlKGFjdGlvbikpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBnX2Fzc2VydCghZ3RrX2FjdGlvbl9nZXRfdmlzaWJsZShhY3Rpb24pKTsKKworICAg
ICAgICBpZiAoc3RhdGUgJiBFbmFibGVkKQorICAgICAgICAgICAgZ19hc3NlcnQoZ3RrX2FjdGlv
bl9nZXRfc2Vuc2l0aXZlKGFjdGlvbikpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBnX2Fz
c2VydCghZ3RrX2FjdGlvbl9nZXRfc2Vuc2l0aXZlKGFjdGlvbikpOworCisgICAgICAgIGlmIChH
VEtfSVNfVE9HR0xFX0FDVElPTihhY3Rpb24pKSB7CisgICAgICAgICAgICBpZiAoc3RhdGUgJiBD
aGVja2VkKQorICAgICAgICAgICAgICAgIGdfYXNzZXJ0KGd0a190b2dnbGVfYWN0aW9uX2dldF9h
Y3RpdmUoR1RLX1RPR0dMRV9BQ1RJT04oYWN0aW9uKSkpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIGdfYXNzZXJ0KCFndGtfdG9nZ2xlX2FjdGlvbl9nZXRfYWN0aXZlKEdUS19U
T0dHTEVfQUNUSU9OKGFjdGlvbikpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEdMaXN0KiBj
aGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoR0xpc3QqIGl0ZW1zLCBXZWJL
aXRDb250ZXh0TWVudUFjdGlvbiBzdG9ja0FjdGlvbiwgdW5zaWduZWQgc3RhdGUpCisgICAgewor
ICAgICAgICBnX2Fzc2VydChpdGVtcyk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19DT05U
RVhUX01FTlVfSVRFTShpdGVtcy0+ZGF0YSkpOworCisgICAgICAgIFdlYktpdENvbnRleHRNZW51
SXRlbSogaXRlbSA9IFdFQktJVF9DT05URVhUX01FTlVfSVRFTShpdGVtcy0+ZGF0YSk7CisgICAg
ICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QoaXRlbSkp
OworCisgICAgICAgIEd0a0FjdGlvbiogYWN0aW9uID0gd2Via2l0X2NvbnRleHRfbWVudV9pdGVt
X2dldF9hY3Rpb24oaXRlbSk7CisgICAgICAgIGdfYXNzZXJ0KEdUS19JU19BQ1RJT04oYWN0aW9u
KSk7CisKKyAgICAgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9n
ZXRfc3RvY2tfYWN0aW9uKGl0ZW0pLCA9PSwgc3RvY2tBY3Rpb24pOworCisgICAgICAgIGNoZWNr
QWN0aW9uU3RhdGUoYWN0aW9uLCBzdGF0ZSk7CisKKyAgICAgICAgcmV0dXJuIGdfbGlzdF9uZXh0
KGl0ZW1zKTsKKyAgICB9CisKKyAgICBHTGlzdCogY2hlY2tDdXJyZW50SXRlbUlzQ3VzdG9tQWN0
aW9uQW5kR2V0TmV4dChHTGlzdCogaXRlbXMsIGNvbnN0IGNoYXIqIGxhYmVsLCB1bnNpZ25lZCBz
dGF0ZSkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KGl0ZW1zKTsKKyAgICAgICAgZ19hc3NlcnQo
V0VCS0lUX0lTX0NPTlRFWFRfTUVOVV9JVEVNKGl0ZW1zLT5kYXRhKSk7CisKKyAgICAgICAgV2Vi
S2l0Q29udGV4dE1lbnVJdGVtKiBpdGVtID0gV0VCS0lUX0NPTlRFWFRfTUVOVV9JVEVNKGl0ZW1z
LT5kYXRhKTsKKyAgICAgICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhH
X09CSkVDVChpdGVtKSk7CisKKyAgICAgICAgR3RrQWN0aW9uKiBhY3Rpb24gPSB3ZWJraXRfY29u
dGV4dF9tZW51X2l0ZW1fZ2V0X2FjdGlvbihpdGVtKTsKKyAgICAgICAgZ19hc3NlcnQoR1RLX0lT
X0FDVElPTihhY3Rpb24pKTsKKworICAgICAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X2NvbnRl
eHRfbWVudV9pdGVtX2dldF9zdG9ja19hY3Rpb24oaXRlbSksID09LCBXRUJLSVRfQ09OVEVYVF9N
RU5VX0FDVElPTl9DVVNUT00pOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIoZ3RrX2FjdGlvbl9n
ZXRfbGFiZWwoYWN0aW9uKSwgPT0sIGxhYmVsKTsKKworICAgICAgICBjaGVja0FjdGlvblN0YXRl
KGFjdGlvbiwgc3RhdGUpOworCisgICAgICAgIHJldHVybiBnX2xpc3RfbmV4dChpdGVtcyk7Cisg
ICAgfQorCisgICAgR0xpc3QqIGNoZWNrQ3VycmVudEl0ZW1Jc1N1Yk1lbnVBbmRHZXROZXh0KEdM
aXN0KiBpdGVtcywgY29uc3QgY2hhciogbGFiZWwsIHVuc2lnbmVkIHN0YXRlLCBHTGlzdCoqIHN1
Yk1lbnVJdGVyKQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQoaXRlbXMpOworICAgICAgICBnX2Fz
c2VydChXRUJLSVRfSVNfQ09OVEVYVF9NRU5VX0lURU0oaXRlbXMtPmRhdGEpKTsKKworICAgICAg
ICBXZWJLaXRDb250ZXh0TWVudUl0ZW0qIGl0ZW0gPSBXRUJLSVRfQ09OVEVYVF9NRU5VX0lURU0o
aXRlbXMtPmRhdGEpOworICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlz
aGVzKEdfT0JKRUNUKGl0ZW0pKTsKKworICAgICAgICBHdGtBY3Rpb24qIGFjdGlvbiA9IHdlYmtp
dF9jb250ZXh0X21lbnVfaXRlbV9nZXRfYWN0aW9uKGl0ZW0pOworICAgICAgICBnX2Fzc2VydChH
VEtfSVNfQUNUSU9OKGFjdGlvbikpOworCisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cihndGtfYWN0
aW9uX2dldF9sYWJlbChhY3Rpb24pLCA9PSwgbGFiZWwpOworICAgICAgICBjaGVja0FjdGlvblN0
YXRlKGFjdGlvbiwgc3RhdGUpOworCisgICAgICAgIFdlYktpdENvbnRleHRNZW51KiBzdWJNZW51
ID0gd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9zdWJtZW51KGl0ZW0pOworICAgICAgICBn
X2Fzc2VydChXRUJLSVRfSVNfQ09OVEVYVF9NRU5VKHN1Yk1lbnUpKTsKKyAgICAgICAgaWYgKHN1
Yk1lbnVJdGVyKQorICAgICAgICAgICAgKnN1Yk1lbnVJdGVyID0gd2Via2l0X2NvbnRleHRfbWVu
dV9nZXRfaXRlbXMoc3ViTWVudSk7CisKKyAgICAgICAgcmV0dXJuIGdfbGlzdF9uZXh0KGl0ZW1z
KTsKKyAgICB9CisKKyAgICBHTGlzdCogY2hlY2tDdXJyZW50SXRlbUlzU2VwYXJhdG9yQW5kR2V0
TmV4dChHTGlzdCogaXRlbXMpCisgICAgeworICAgICAgICBnX2Fzc2VydChpdGVtcyk7CisgICAg
ICAgIGdfYXNzZXJ0KFdFQktJVF9JU19DT05URVhUX01FTlVfSVRFTShpdGVtcy0+ZGF0YSkpOwor
CisgICAgICAgIFdlYktpdENvbnRleHRNZW51SXRlbSogaXRlbSA9IFdFQktJVF9DT05URVhUX01F
TlVfSVRFTShpdGVtcy0+ZGF0YSk7CisgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9jb250ZXh0X21l
bnVfaXRlbV9pc19zZXBhcmF0b3IoaXRlbSkpOworCisgICAgICAgIHJldHVybiBnX2xpc3RfbmV4
dChpdGVtcyk7CisgICAgfQorCisgICAgc3RhdGljIGdib29sZWFuIGRvUmlnaHRDbGlja0lkbGVD
YWxsYmFjayhDb250ZXh0TWVudVRlc3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT5jbGlj
a01vdXNlQnV0dG9uKHRlc3QtPm1fbWVudVBvc2l0aW9uWCwgdGVzdC0+bV9tZW51UG9zaXRpb25Z
LCAzKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIHZvaWQgc2hvd0NvbnRl
eHRNZW51QXRQb3NpdGlvbkFuZFdhaXRVbnRpbEZpbmlzaGVkKGludCB4LCBpbnQgeSkKKyAgICB7
CisgICAgICAgIG1fbWVudVBvc2l0aW9uWCA9IHg7CisgICAgICAgIG1fbWVudVBvc2l0aW9uWSA9
IHk7CisgICAgICAgIGdfaWRsZV9hZGQocmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oZG9S
aWdodENsaWNrSWRsZUNhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIGdfbWFpbl9sb29wX3J1biht
X21haW5Mb29wKTsKKyAgICB9CisKKyAgICB2b2lkIHNob3dDb250ZXh0TWVudUFuZFdhaXRVbnRp
bEZpbmlzaGVkKCkKKyAgICB7CisgICAgICAgIHNob3dDb250ZXh0TWVudUF0UG9zaXRpb25BbmRX
YWl0VW50aWxGaW5pc2hlZCgwLCAwKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gc2lt
dWxhdGVFc2NLZXlJZGxlQ2FsbGJhY2soQ29udGV4dE1lbnVUZXN0KiB0ZXN0KQorICAgIHsKKyAg
ICAgICAgdGVzdC0+a2V5U3Ryb2tlKEdES19LRVlfRXNjYXBlKTsKKyAgICAgICAgcmV0dXJuIEZB
TFNFOworICAgIH0KKworICAgIHZvaWQgZGlzbWlzc0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmlu
aXNoZWQoKQorICAgIHsKKyAgICAgICAgZ19pZGxlX2FkZChyZWludGVycHJldF9jYXN0PEdTb3Vy
Y2VGdW5jPihzaW11bGF0ZUVzY0tleUlkbGVDYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX21h
aW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgfQorCisgICAgZG91YmxlIG1fbWVudVBvc2l0
aW9uWDsKKyAgICBkb3VibGUgbV9tZW51UG9zaXRpb25ZOworfTsKKworY2xhc3MgQ29udGV4dE1l
bnVEZWZhdWx0VGVzdDogcHVibGljIENvbnRleHRNZW51VGVzdCB7CitwdWJsaWM6CisgICAgTUFL
RV9HTElCX1RFU1RfRklYVFVSRShDb250ZXh0TWVudURlZmF1bHRUZXN0KTsKKworICAgIGVudW0g
RGVmYXVsdE1lbnVUeXBlIHsKKyAgICAgICAgTmF2aWdhdGlvbiwKKyAgICAgICAgTGluaywKKyAg
ICAgICAgSW1hZ2UsCisgICAgICAgIExpbmtJbWFnZSwKKyAgICAgICAgVmlkZW8sCisgICAgICAg
IEF1ZGlvLAorICAgICAgICBFZGl0YWJsZQorICAgIH07CisKKyAgICBDb250ZXh0TWVudURlZmF1
bHRUZXN0KCkKKyAgICAgICAgOiBtX2V4cGVjdGVkTWVudVR5cGUoTmF2aWdhdGlvbikKKyAgICB7
CisgICAgfQorCisgICAgYm9vbCBjb250ZXh0TWVudShXZWJLaXRDb250ZXh0TWVudSogY29udGV4
dE1lbnUsIEdka0V2ZW50KiBldmVudCwgV2ViS2l0SGl0VGVzdFJlc3VsdCogaGl0VGVzdFJlc3Vs
dCkKKyAgICB7CisgICAgICAgIEdMaXN0KiBpdGVyID0gd2Via2l0X2NvbnRleHRfbWVudV9nZXRf
aXRlbXMoY29udGV4dE1lbnUpOworCisgICAgICAgIHN3aXRjaCAobV9leHBlY3RlZE1lbnVUeXBl
KSB7CisgICAgICAgIGNhc2UgTmF2aWdhdGlvbjoKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJr
aXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluayhoaXRUZXN0UmVzdWx0KSk7CisgICAg
ICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdl
KGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3Rf
cmVzdWx0X2NvbnRleHRfaXNfbWVkaWEoaGl0VGVzdFJlc3VsdCkpOworICAgICAgICAgICAgZ19h
c3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0
UmVzdWx0KSk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rp
b25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0dPX0JBQ0ssIFZp
c2libGUpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9u
QW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9HT19GT1JXQVJELCBW
aXNpYmxlKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlv
bkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fU1RPUCwgVmlzaWJs
ZSk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRH
ZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1JFTE9BRCwgVmlzaWJsZSB8
IEVuYWJsZWQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTGluazoKKyAgICAg
ICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhp
dFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVz
dWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkpOworICAgICAgICAgICAgZ19hc3Nl
cnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0
KSk7CisgICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0
X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1
cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVO
VV9BQ1RJT05fT1BFTl9MSU5LLCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBpdGVy
ID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9D
T05URVhUX01FTlVfQUNUSU9OX09QRU5fTElOS19JTl9ORVdfV0lORE9XLCBWaXNpYmxlIHwgRW5h
YmxlZCk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25B
bmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0RPV05MT0FEX0xJTktf
VE9fRElTSywgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3Vy
cmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5V
X0FDVElPTl9DT1BZX0xJTktfVE9fQ0xJUEJPQVJELCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbWFnZToKKyAgICAgICAgICAgIGdfYXNzZXJ0
KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluayhoaXRUZXN0UmVzdWx0KSk7
CisgICAgICAgICAgICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNf
aW1hZ2UoaGl0VGVzdFJlc3VsdCkpOworICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRf
dGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7CisgICAgICAgICAg
ICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRhYmxlKGhp
dFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9j
a0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9J
TUFHRV9JTl9ORVdfV0lORE9XLCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBpdGVy
ID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9D
T05URVhUX01FTlVfQUNUSU9OX0RPV05MT0FEX0lNQUdFX1RPX0RJU0ssIFZpc2libGUgfCBFbmFi
bGVkKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFu
ZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9JTUFHRV9UT19D
TElQQk9BUkQsIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1
cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVO
VV9BQ1RJT05fQ09QWV9JTUFHRV9VUkxfVE9fQ0xJUEJPQVJELCBWaXNpYmxlIHwgRW5hYmxlZCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMaW5rSW1hZ2U6CisgICAgICAgICAg
ICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluayhoaXRUZXN0
UmVzdWx0KSk7CisgICAgICAgICAgICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2Nv
bnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkpOworICAgICAgICAgICAgZ19hc3NlcnQoIXdl
YmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7Cisg
ICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2Vk
aXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJ
dGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T05fT1BFTl9MSU5LLCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBpdGVyID0gY2hl
Y2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhU
X01FTlVfQUNUSU9OX09QRU5fTElOS19JTl9ORVdfV0lORE9XLCBWaXNpYmxlIHwgRW5hYmxlZCk7
CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXRO
ZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0RPV05MT0FEX0xJTktfVE9fRElT
SywgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0
ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
Tl9DT1BZX0xJTktfVE9fQ0xJUEJPQVJELCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAg
ICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU2VwYXJhdG9yQW5kR2V0TmV4dChpdGVyKTsKKyAg
ICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQo
aXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9JTUFHRV9JTl9ORVdfV0lORE9X
LCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRl
bUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9O
X0RPV05MT0FEX0lNQUdFX1RPX0RJU0ssIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAg
IGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VC
S0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9JTUFHRV9UT19DTElQQk9BUkQsIFZpc2libGUg
fCBFbmFibGVkKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0Fj
dGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9JTUFH
RV9VUkxfVE9fQ0xJUEJPQVJELCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBWaWRlbzoKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0
X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluayhoaXRUZXN0UmVzdWx0KSk7CisgICAgICAgICAg
ICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdlKGhpdFRl
c3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRf
Y29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7CisgICAgICAgICAgICBnX2Fzc2VydCgh
d2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQp
KTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdl
dE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fTUVESUFfUExBWSwgVmlzaWJs
ZSB8IEVuYWJsZWQpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2Nr
QWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9NRURJQV9N
VVRFLCBWaXNpYmxlKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9j
a0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fVE9HR0xF
X01FRElBX0NPTlRST0xTLCBWaXNpYmxlIHwgRW5hYmxlZCB8IENoZWNrZWQpOworICAgICAgICAg
ICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9UT0dHTEVfTUVESUFfTE9PUCwgVmlzaWJsZSB8IEVu
YWJsZWQpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9u
QW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9FTlRFUl9WSURFT19G
VUxMU0NSRUVOLCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tD
dXJyZW50SXRlbUlzU2VwYXJhdG9yQW5kR2V0TmV4dChpdGVyKTsKKyAgICAgICAgICAgIGl0ZXIg
PSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NP
TlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9WSURFT19MSU5LX1RPX0NMSVBCT0FSRCwgVmlzaWJsZSB8
IEVuYWJsZWQpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0
aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX1ZJREVP
X0lOX05FV19XSU5ET1csIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGl0ZXIgPSBj
aGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fRE9XTkxPQURfVklERU9fVE9fRElTSywgVmlzaWJsZSB8IEVuYWJsZWQp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXVkaW86CisgICAgICAgICAgICBn
X2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xpbmsoaGl0VGVzdFJl
c3VsdCkpOworICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29u
dGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0KSk7CisgICAgICAgICAgICBnX2Fzc2VydCh3ZWJr
aXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbWVkaWEoaGl0VGVzdFJlc3VsdCkpOworICAg
ICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19lZGl0
YWJsZShoaXRUZXN0UmVzdWx0KSk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRl
bUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9O
X01FRElBX1BMQVksIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVj
a0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRf
TUVOVV9BQ1RJT05fTUVESUFfTVVURSwgVmlzaWJsZSk7CisgICAgICAgICAgICBpdGVyID0gY2hl
Y2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhU
X01FTlVfQUNUSU9OX1RPR0dMRV9NRURJQV9DT05UUk9MUywgVmlzaWJsZSB8IEVuYWJsZWQgfCBD
aGVja2VkKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlv
bkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fVE9HR0xFX01FRElB
X0xPT1AsIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJl
bnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9B
Q1RJT05fRU5URVJfVklERU9fRlVMTFNDUkVFTiwgVmlzaWJsZSk7CisgICAgICAgICAgICBpdGVy
ID0gY2hlY2tDdXJyZW50SXRlbUlzU2VwYXJhdG9yQW5kR2V0TmV4dChpdGVyKTsKKyAgICAgICAg
ICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwg
V0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9BVURJT19MSU5LX1RPX0NMSVBCT0FSRCwg
VmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1J
c1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9P
UEVOX0FVRElPX0lOX05FV19XSU5ET1csIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAg
IGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VC
S0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRE9XTkxPQURfQVVESU9fVE9fRElTSywgVmlzaWJsZSB8
IEVuYWJsZWQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRWRpdGFibGU6Cisg
ICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xp
bmsoaGl0VGVzdFJlc3VsdCkpOworICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVz
dF9yZXN1bHRfY29udGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0KSk7CisgICAgICAgICAgICBn
X2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RS
ZXN1bHQpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29u
dGV4dF9pc19lZGl0YWJsZShoaXRUZXN0UmVzdWx0KSk7CisgICAgICAgICAgICBpdGVyID0gY2hl
Y2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhU
X01FTlVfQUNUSU9OX0NVVCwgVmlzaWJsZSk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJy
ZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVf
QUNUSU9OX0NPUFksIFZpc2libGUpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0
ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
Tl9QQVNURSwgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3Vy
cmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5V
X0FDVElPTl9ERUxFVEUsIFZpc2libGUpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVu
dEl0ZW1Jc1NlcGFyYXRvckFuZEdldE5leHQoaXRlcik7CisgICAgICAgICAgICBpdGVyID0gY2hl
Y2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhU
X01FTlVfQUNUSU9OX1NFTEVDVF9BTEwsIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAg
IGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTZXBhcmF0b3JBbmRHZXROZXh0KGl0ZXIpOworICAg
ICAgICAgICAgaWYgKHNob3VsZFNob3dJbnB1dE1ldGhvZHNNZW51KCkpCisgICAgICAgICAgICAg
ICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9JTlBVVF9NRVRIT0RTLCBWaXNpYmxlIHwgRW5hYmxl
ZCk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRH
ZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1VOSUNPREUsIFZpc2libGUg
fCBFbmFibGVkKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh3
ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9kZXZlbG9wZXJfZXh0cmFzKHdlYmtpdF93ZWJfdmll
d19nZXRfc2V0dGluZ3MobV93ZWJWaWV3KSkpIHsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1
cnJlbnRJdGVtSXNTZXBhcmF0b3JBbmRHZXROZXh0KGl0ZXIpOworICAgICAgICAgICAgaXRlciA9
IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09O
VEVYVF9NRU5VX0FDVElPTl9JTlNQRUNUX0VMRU1FTlQsIFZpc2libGUgfCBFbmFibGVkKTsKKyAg
ICAgICAgfQorICAgICAgICBnX2Fzc2VydCghaXRlcik7CisKKyAgICAgICAgcXVpdE1haW5Mb29w
KCk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgRGVmYXVsdE1lbnVUeXBl
IG1fZXhwZWN0ZWRNZW51VHlwZTsKK307CisKK3N0YXRpYyB2b2lkIHRlc3RDb250ZXh0TWVudURl
ZmF1bHRNZW51KENvbnRleHRNZW51RGVmYXVsdFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7
CisgICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7CisKKyAgICBjb25z
dCBjaGFyKiBsaW5rc0hUTUwgPQorICAgICAgICAiPGh0bWw+PGJvZHk+IgorICAgICAgICAiIDxh
IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6MScgaHJlZj0naHR0cDovL3d3
dy53ZWJraXRndGsub3JnJyB0aXRsZT0nV2ViS2l0R1RLKyBUaXRsZSc+V2ViS2l0R1RLKyBXZWJz
aXRlPC9hPiIKKyAgICAgICAgIiA8aW1nIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDox
OyB0b3A6MTAnIHNyYz0nMHhkZWFkYmVlZicgd2lkdGg9NSBoZWlnaHQ9NT48L2ltZz4iCisgICAg
ICAgICIgPGEgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRvcDoyMCcgaHJlZj0n
aHR0cDovL3d3dy53ZWJraXRndGsub3JnL2xvZ28nIHRpdGxlPSdXZWJLaXRHVEsrIExvZ28nPjxp
bWcgc3JjPScweGRlYWRiZWVmJyB3aWR0aD01IGhlaWdodD01PjwvaW1nPjwvYT4iCisgICAgICAg
ICIgPGlucHV0IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6MzAnIHNpemU9
JzEwJz48L2lucHV0PiIKKyAgICAgICAgIiA8dmlkZW8gc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRl
OyBsZWZ0OjE7IHRvcDo1MCcgd2lkdGg9JzMwMCcgaGVpZ2h0PSczMDAnIGNvbnRyb2xzPSdjb250
cm9scycgcHJlbG9hZD0nbm9uZSc+PHNvdXJjZSBzcmM9J21vdmllLm9nZycgdHlwZT0ndmlkZW8v
b2dnJyAvPjwvdmlkZW8+IgorICAgICAgICAiIDxhdWRpbyBzdHlsZT0ncG9zaXRpb246YWJzb2x1
dGU7IGxlZnQ6MTsgdG9wOjYwJyB3aWR0aD0nNTAnIGhlaWdodD0nMjAnIGNvbnRyb2xzPSdjb250
cm9scycgcHJlbG9hZD0nbm9uZSc+PHNvdXJjZSBzcmM9J3RyYWNrLm1wMycgdHlwZT0nYXVkaW8v
bXAzJyAvPjwvYXVkaW8+IgorICAgICAgICAiPC9ib2R5PjwvaHRtbD4iOworICAgIHRlc3QtPmxv
YWRIdG1sKGxpbmtzSFRNTCwgImZpbGU6Ly8vIik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZp
bmlzaGVkKCk7CisKKyAgICAvLyBDb250ZXh0IG1lbnUgZm9yIGRvY3VtZW50LgorICAgIHRlc3Qt
Pm1fZXhwZWN0ZWRNZW51VHlwZSA9IENvbnRleHRNZW51RGVmYXVsdFRlc3Q6Ok5hdmlnYXRpb247
CisgICAgdGVzdC0+c2hvd0NvbnRleHRNZW51QXRQb3NpdGlvbkFuZFdhaXRVbnRpbEZpbmlzaGVk
KDAsIDApOworCisgICAgLy8gQ29udGV4dCBtZW51IGZvciBsaW5rLgorICAgIHRlc3QtPm1fZXhw
ZWN0ZWRNZW51VHlwZSA9IENvbnRleHRNZW51RGVmYXVsdFRlc3Q6Okxpbms7CisgICAgdGVzdC0+
c2hvd0NvbnRleHRNZW51QXRQb3NpdGlvbkFuZFdhaXRVbnRpbEZpbmlzaGVkKDEsIDEpOworCisg
ICAgLy8gQ29udGV4dCBtZW51IGZvciBpbWFnZS4KKyAgICB0ZXN0LT5tX2V4cGVjdGVkTWVudVR5
cGUgPSBDb250ZXh0TWVudURlZmF1bHRUZXN0OjpJbWFnZTsKKyAgICB0ZXN0LT5zaG93Q29udGV4
dE1lbnVBdFBvc2l0aW9uQW5kV2FpdFVudGlsRmluaXNoZWQoMSwgMTApOworCisgICAgLy8gRW5h
YmxlIGRldmVsb3BlciBleHRyYXMgbm93LCBzbyB0aGF0IGluc3BlY3RvciBlbGVtZW50CisgICAg
Ly8gd2lsbCBiZSBzaG93biBpbiB0aGUgZGVmYXVsdCBjb250ZXh0IG1lbnUuCisgICAgd2Via2l0
X3NldHRpbmdzX3NldF9lbmFibGVfZGV2ZWxvcGVyX2V4dHJhcyh3ZWJraXRfd2ViX3ZpZXdfZ2V0
X3NldHRpbmdzKHRlc3QtPm1fd2ViVmlldyksIFRSVUUpOworCisgICAgLy8gQ29udGV4dCBtZW51
IGZvciBpbWFnZSBsaW5rLgorICAgIHRlc3QtPm1fZXhwZWN0ZWRNZW51VHlwZSA9IENvbnRleHRN
ZW51RGVmYXVsdFRlc3Q6OkxpbmtJbWFnZTsKKyAgICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBdFBv
c2l0aW9uQW5kV2FpdFVudGlsRmluaXNoZWQoMSwgMjApOworCisgICAgLy8gQ29udGV4dCBtZW51
IGZvciB2aWRlby4KKyAgICB0ZXN0LT5tX2V4cGVjdGVkTWVudVR5cGUgPSBDb250ZXh0TWVudURl
ZmF1bHRUZXN0OjpWaWRlbzsKKyAgICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBdFBvc2l0aW9uQW5k
V2FpdFVudGlsRmluaXNoZWQoMSwgNTApOworCisgICAgLy8gQ29udGV4dCBtZW51IGZvciBhdWRp
by4KKyAgICB0ZXN0LT5tX2V4cGVjdGVkTWVudVR5cGUgPSBDb250ZXh0TWVudURlZmF1bHRUZXN0
OjpBdWRpbzsKKyAgICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBdFBvc2l0aW9uQW5kV2FpdFVudGls
RmluaXNoZWQoMSwgNjApOworCisgICAgLy8gQ29udGV4dCBtZW51IGZvciBlZGl0YWJsZS4KKyAg
ICB0ZXN0LT5tX2V4cGVjdGVkTWVudVR5cGUgPSBDb250ZXh0TWVudURlZmF1bHRUZXN0OjpFZGl0
YWJsZTsKKyAgICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBdFBvc2l0aW9uQW5kV2FpdFVudGlsRmlu
aXNoZWQoNSwgMzUpOworfQorCitjbGFzcyBDb250ZXh0TWVudUN1c3RvbVRlc3Q6IHB1YmxpYyBD
b250ZXh0TWVudVRlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoQ29u
dGV4dE1lbnVDdXN0b21UZXN0KTsKKworICAgIENvbnRleHRNZW51Q3VzdG9tVGVzdCgpCisgICAg
ICAgIDogbV9pdGVtVG9BY3RpdmF0ZUxhYmVsKDApCisgICAgICAgICwgbV9hY3RpdmF0ZWQoZmFs
c2UpCisgICAgICAgICwgbV90b2dnbGVkKGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAgICBib29s
IGNvbnRleHRNZW51KFdlYktpdENvbnRleHRNZW51KiBjb250ZXh0TWVudSwgR2RrRXZlbnQqLCBX
ZWJLaXRIaXRUZXN0UmVzdWx0KiBoaXRUZXN0UmVzdWx0KQorICAgIHsKKyAgICAgICAgLy8gQXBw
ZW5kIG91ciBjdXN0b20gaXRlbSB0byB0aGUgZGVmYXVsdCBtZW51LgorICAgICAgICB3ZWJraXRf
Y29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVt
X25ldyhtX2FjdGlvbi5nZXQoKSkpOworICAgICAgICBxdWl0TWFpbkxvb3AoKTsKKworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgR3RrTWVudUl0ZW0qIGdldE1lbnVJdGVtKEd0
a01lbnUqIG1lbnUsIGNvbnN0IGdjaGFyKiBpdGVtTGFiZWwpCisgICAgeworICAgICAgICBHT3du
UHRyPEdMaXN0PiBpdGVtcyhndGtfY29udGFpbmVyX2dldF9jaGlsZHJlbihHVEtfQ09OVEFJTkVS
KG1lbnUpKSk7CisgICAgICAgIGZvciAoR0xpc3QqIGl0ZXIgPSBpdGVtcy5nZXQoKTsgaXRlcjsg
aXRlciA9IGdfbGlzdF9uZXh0KGl0ZXIpKSB7CisgICAgICAgICAgICBHdGtNZW51SXRlbSogY2hp
bGQgPSBHVEtfTUVOVV9JVEVNKGl0ZXItPmRhdGEpOworICAgICAgICAgICAgaWYgKGdfc3RyX2Vx
dWFsKGl0ZW1MYWJlbCwgZ3RrX21lbnVfaXRlbV9nZXRfbGFiZWwoY2hpbGQpKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gY2hpbGQ7CisgICAgICAgIH0KKyAgICAgICAgZ19hc3NlcnRfbm90X3Jl
YWNoZWQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgdm9pZCBhY3RpdmF0ZU1l
bnVJdGVtKCkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KG1faXRlbVRvQWN0aXZhdGVMYWJlbCk7
CisgICAgICAgIEd0a01lbnUqIG1lbnUgPSBnZXRQb3B1cE1lbnUoKTsKKyAgICAgICAgR3RrTWVu
dUl0ZW0qIGl0ZW0gPSBnZXRNZW51SXRlbShtZW51LCBtX2l0ZW1Ub0FjdGl2YXRlTGFiZWwpOwor
ICAgICAgICBndGtfbWVudV9zaGVsbF9hY3RpdmF0ZV9pdGVtKEdUS19NRU5VX1NIRUxMKG1lbnUp
LCBHVEtfV0lER0VUKGl0ZW0pLCBUUlVFKTsKKyAgICAgICAgbV9pdGVtVG9BY3RpdmF0ZUxhYmVs
ID0gMDsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gYWN0aXZhdGVNZW51SXRlbUlkbGVD
YWxsYmFjayhncG9pbnRlciB1c2VyRGF0YSkKKyAgICB7CisgICAgICAgIENvbnRleHRNZW51Q3Vz
dG9tVGVzdCogdGVzdCA9IHN0YXRpY19jYXN0PENvbnRleHRNZW51Q3VzdG9tVGVzdCo+KHVzZXJE
YXRhKTsKKyAgICAgICAgdGVzdC0+YWN0aXZhdGVNZW51SXRlbSgpOworICAgICAgICByZXR1cm4g
RkFMU0U7CisgICAgfQorCisgICAgdm9pZCBhY3RpdmF0ZUN1c3RvbU1lbnVJdGVtQW5kV2FpdFVu
dGlsQWN0aXZhdGVkKGNvbnN0IGNoYXIqIGFjdGlvbkxhYmVsKQorICAgIHsKKyAgICAgICAgbV9h
Y3RpdmF0ZWQgPSBtX3RvZ2dsZWQgPSBmYWxzZTsKKyAgICAgICAgbV9pdGVtVG9BY3RpdmF0ZUxh
YmVsID0gYWN0aW9uTGFiZWw7CisgICAgICAgIGdfaWRsZV9hZGQoYWN0aXZhdGVNZW51SXRlbUlk
bGVDYWxsYmFjaywgdGhpcyk7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsK
KyAgICB9CisKKyAgICB2b2lkIHRvZ2dsZUN1c3RvbU1lbnVJdGVtQW5kV2FpdFVudGlsVG9nZ2xl
ZChjb25zdCBjaGFyKiBhY3Rpb25MYWJlbCkKKyAgICB7CisgICAgICAgIGFjdGl2YXRlQ3VzdG9t
TWVudUl0ZW1BbmRXYWl0VW50aWxBY3RpdmF0ZWQoYWN0aW9uTGFiZWwpOworICAgIH0KKworICAg
IHN0YXRpYyB2b2lkIGFjdGlvbkFjdGl2YXRlZENhbGxiYWNrKEd0a0FjdGlvbiosIENvbnRleHRN
ZW51Q3VzdG9tVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPm1fYWN0aXZhdGVkID0g
dHJ1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBhY3Rpb25Ub2dnbGVkQ2FsbGJhY2soR3Rr
QWN0aW9uKiwgQ29udGV4dE1lbnVDdXN0b21UZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVz
dC0+bV90b2dnbGVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICB2b2lkIHNldEFjdGlvbihHdGtBY3Rp
b24qIGFjdGlvbikKKyAgICB7CisgICAgICAgIG1fYWN0aW9uID0gYWN0aW9uOworICAgICAgICBp
ZiAoR1RLX0lTX1RPR0dMRV9BQ1RJT04oYWN0aW9uKSkKKyAgICAgICAgICAgIGdfc2lnbmFsX2Nv
bm5lY3QoYWN0aW9uLCAidG9nZ2xlZCIsIEdfQ0FMTEJBQ0soYWN0aW9uVG9nZ2xlZENhbGxiYWNr
KSwgdGhpcyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoYWN0
aW9uLCAiYWN0aXZhdGUiLCBHX0NBTExCQUNLKGFjdGlvbkFjdGl2YXRlZENhbGxiYWNrKSwgdGhp
cyk7CisgICAgfQorCisgICAgR1JlZlB0cjxHdGtBY3Rpb24+IG1fYWN0aW9uOworICAgIGNvbnN0
IGNoYXIqIG1faXRlbVRvQWN0aXZhdGVMYWJlbDsKKyAgICBib29sIG1fYWN0aXZhdGVkOworICAg
IGJvb2wgbV90b2dnbGVkOworfTsKKworc3RhdGljIHZvaWQgdGVzdENvbnRleHRNZW51UG9wdWxh
dGVNZW51KENvbnRleHRNZW51Q3VzdG9tVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAg
ICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKKworICAgIHRlc3QtPmxv
YWRIdG1sKCI8aHRtbD48Ym9keT5XZWJLaXRHVEsrIENvbnRleHQgbWVudSB0ZXN0czwvYm9keT48
L2h0bWw+IiwgImZpbGU6Ly8vIik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7
CisKKyAgICAvLyBDcmVhdGUgYSBjdXN0b20gbWVudSBpdGVtLgorICAgIEdSZWZQdHI8R3RrQWN0
aW9uPiBhY3Rpb24gPSBhZG9wdEdSZWYoZ3RrX2FjdGlvbl9uZXcoIldlYktpdEdUSytDdXN0b21B
Y3Rpb24iLCAiQ3VzdG9tIF9BY3Rpb24iLCAwLCAwKSk7CisgICAgdGVzdC0+c2V0QWN0aW9uKGFj
dGlvbi5nZXQoKSk7CisgICAgdGVzdC0+c2hvd0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmluaXNo
ZWQoKTsKKyAgICB0ZXN0LT5hY3RpdmF0ZUN1c3RvbU1lbnVJdGVtQW5kV2FpdFVudGlsQWN0aXZh
dGVkKGd0a19hY3Rpb25fZ2V0X2xhYmVsKGFjdGlvbi5nZXQoKSkpOworICAgIGdfYXNzZXJ0KHRl
c3QtPm1fYWN0aXZhdGVkKTsKKyAgICBnX2Fzc2VydCghdGVzdC0+bV90b2dnbGVkKTsKKworICAg
IC8vIENyZWF0ZSBhIGN1c3RvbSB0b2dnbGUgbWVudSBpdGVtLgorICAgIEdSZWZQdHI8R3RrQWN0
aW9uPiB0b2dnbGVBY3Rpb24gPSBhZG9wdEdSZWYoR1RLX0FDVElPTihndGtfdG9nZ2xlX2FjdGlv
bl9uZXcoIldlYktpdEdUSytDdXN0b21Ub2dnbGVBY3Rpb24iLCAiQ3VzdG9tIF9Ub2dnbGUgQWN0
aW9uIiwgMCwgMCkpKTsKKyAgICB0ZXN0LT5zZXRBY3Rpb24odG9nZ2xlQWN0aW9uLmdldCgpKTsK
KyAgICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBbmRXYWl0VW50aWxGaW5pc2hlZCgpOworICAgIHRl
c3QtPnRvZ2dsZUN1c3RvbU1lbnVJdGVtQW5kV2FpdFVudGlsVG9nZ2xlZChndGtfYWN0aW9uX2dl
dF9sYWJlbCh0b2dnbGVBY3Rpb24uZ2V0KCkpKTsKKyAgICBnX2Fzc2VydCghdGVzdC0+bV9hY3Rp
dmF0ZWQpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdG9nZ2xlZCk7Cit9CisKK2NsYXNzIENvbnRl
eHRNZW51Q3VzdG9tRnVsbFRlc3Q6IHB1YmxpYyBDb250ZXh0TWVudVRlc3QgeworcHVibGljOgor
ICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoQ29udGV4dE1lbnVDdXN0b21GdWxsVGVzdCk7CisK
KyAgICBib29sIGNvbnRleHRNZW51KFdlYktpdENvbnRleHRNZW51KiBjb250ZXh0TWVudSwgR2Rr
RXZlbnQqLCBXZWJLaXRIaXRUZXN0UmVzdWx0KikKKyAgICB7CisgICAgICAgIC8vIENsZWFyIHBy
b3Bvc2VkIG1lbnUgYW5kIGJ1aWxkIG91ciBvd24uCisgICAgICAgIHdlYmtpdF9jb250ZXh0X21l
bnVfcmVtb3ZlX2FsbChjb250ZXh0TWVudSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJr
aXRfY29udGV4dF9tZW51X2dldF9uX2l0ZW1zKGNvbnRleHRNZW51KSwgPT0sIDApOworCisgICAg
ICAgIC8vIEFkZCBhY3Rpb25zIGZyb20gc3RvY2suCisgICAgICAgIHdlYmtpdF9jb250ZXh0X21l
bnVfcHJlcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19mcm9t
X3N0b2NrX2FjdGlvbihXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9HT19CQUNLKSk7CisgICAg
ICAgIHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4
dF9tZW51X2l0ZW1fbmV3X2Zyb21fc3RvY2tfYWN0aW9uKFdFQktJVF9DT05URVhUX01FTlVfQUNU
SU9OX0dPX0ZPUldBUkQpKTsKKyAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9pbnNlcnQoY29u
dGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfc2VwYXJhdG9yKCksIDIpOwor
CisgICAgICAgIC8vIEFkZCBjdXN0b20gYWN0aW9ucy4KKyAgICAgICAgR1JlZlB0cjxHdGtBY3Rp
b24+IGFjdGlvbiA9IGFkb3B0R1JlZihndGtfYWN0aW9uX25ldygiV2ViS2l0R1RLK0N1c3RvbUFj
dGlvbiIsICJDdXN0b20gX0FjdGlvbiIsIDAsIDApKTsKKyAgICAgICAgZ3RrX2FjdGlvbl9zZXRf
c2Vuc2l0aXZlKGFjdGlvbi5nZXQoKSwgRkFMU0UpOworICAgICAgICB3ZWJraXRfY29udGV4dF9t
ZW51X2luc2VydChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ldyhhY3Rp
b24uZ2V0KCkpLCAtMSk7CisgICAgICAgIEdSZWZQdHI8R3RrQWN0aW9uPiB0b2dnbGVBY3Rpb24g
PSBhZG9wdEdSZWYoR1RLX0FDVElPTihndGtfdG9nZ2xlX2FjdGlvbl9uZXcoIldlYktpdEdUSytD
dXN0b21Ub2dnbGVBY3Rpb24iLCAiQ3VzdG9tIF9Ub2dnbGUgQWN0aW9uIiwgMCwgMCkpKTsKKyAg
ICAgICAgZ3RrX3RvZ2dsZV9hY3Rpb25fc2V0X2FjdGl2ZShHVEtfVE9HR0xFX0FDVElPTih0b2dn
bGVBY3Rpb24uZ2V0KCkpLCBUUlVFKTsKKyAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBl
bmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXcodG9nZ2xlQWN0aW9u
LmdldCgpKSk7CisgICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51
LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X3NlcGFyYXRvcigpKTsKKworICAgICAgICAv
LyBBZGQgYSBzdWJtZW51LgorICAgICAgICBHUmVmUHRyPFdlYktpdENvbnRleHRNZW51PiBzdWJN
ZW51ID0gYWRvcHRHUmVmKHdlYmtpdF9jb250ZXh0X21lbnVfbmV3KCkpOworICAgICAgICBhc3Nl
cnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHN1Yk1lbnUuZ2V0KCkp
KTsKKyAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9pbnNlcnQoc3ViTWVudS5nZXQoKSwgd2Vi
a2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19mcm9tX3N0b2NrX2FjdGlvbl93aXRoX2xhYmVsKFdF
QktJVF9DT05URVhUX01FTlVfQUNUSU9OX1NUT1AsICJTdG9wIExvYWQiKSwgMCk7CisgICAgICAg
IHdlYmtpdF9jb250ZXh0X21lbnVfaW5zZXJ0KHN1Yk1lbnUuZ2V0KCksIHdlYmtpdF9jb250ZXh0
X21lbnVfaXRlbV9uZXdfZnJvbV9zdG9ja19hY3Rpb24oV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T05fUkVMT0FEKSwgLTEpOworICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250
ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld193aXRoX3N1Ym1lbnUoIkxvYWQg
b3B0aW9ucyIsIHN1Yk1lbnUuZ2V0KCkpKTsKKyAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9h
cHBlbmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfc2VwYXJhdG9y
KCkpOworCisgICAgICAgIC8vIE1vdmUgTG9hZCBzdWJtZW51IGJlZm9yZSBjdXN0b20gYWN0aW9u
cy4KKyAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9tb3ZlX2l0ZW0oY29udGV4dE1lbnUsIHdl
YmtpdF9jb250ZXh0X21lbnVfbGFzdChjb250ZXh0TWVudSksIDMpOworICAgICAgICB3ZWJraXRf
Y29udGV4dF9tZW51X21vdmVfaXRlbShjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9s
YXN0KGNvbnRleHRNZW51KSwgMyk7CisKKyAgICAgICAgLy8gSWYgbGFzdCBpdGVtIGlzIGEgc2Vw
YXJhdG9yLCByZW1vdmUgaXQuCisgICAgICAgIGlmICh3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1f
aXNfc2VwYXJhdG9yKHdlYmtpdF9jb250ZXh0X21lbnVfbGFzdChjb250ZXh0TWVudSkpKQorICAg
ICAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9yZW1vdmUoY29udGV4dE1lbnUsIHdlYmtpdF9j
b250ZXh0X21lbnVfbGFzdChjb250ZXh0TWVudSkpOworCisgICAgICAgIC8vIENoZWNrIHRoZSBt
ZW51LgorICAgICAgICBHTGlzdCogaXRlciA9IHdlYmtpdF9jb250ZXh0X21lbnVfZ2V0X2l0ZW1z
KGNvbnRleHRNZW51KTsKKworICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tB
Y3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0dPX0JBQ0ss
IFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0
b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9HT19G
T1JXQVJELCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJ
dGVtSXNTZXBhcmF0b3JBbmRHZXROZXh0KGl0ZXIpOworCisgICAgICAgIEdMaXN0KiBzdWJNZW51
SXRlciA9IDA7CisgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdWJNZW51QW5kR2V0
TmV4dChpdGVyLCAiTG9hZCBvcHRpb25zIiwgVmlzaWJsZSB8IEVuYWJsZWQsICZzdWJNZW51SXRl
cik7CisgICAgICAgIHN1Yk1lbnVJdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25B
bmRHZXROZXh0KHN1Yk1lbnVJdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9TVE9QLCBW
aXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgIHN1Yk1lbnVJdGVyID0gY2hlY2tDdXJyZW50SXRl
bUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KHN1Yk1lbnVJdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5V
X0FDVElPTl9SRUxPQUQsIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgaXRlciA9IGNoZWNr
Q3VycmVudEl0ZW1Jc1NlcGFyYXRvckFuZEdldE5leHQoaXRlcik7CisKKyAgICAgICAgaXRlciA9
IGNoZWNrQ3VycmVudEl0ZW1Jc0N1c3RvbUFjdGlvbkFuZEdldE5leHQoaXRlciwgIkN1c3RvbSBf
QWN0aW9uIiwgVmlzaWJsZSk7CisgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNDdXN0
b21BY3Rpb25BbmRHZXROZXh0KGl0ZXIsICJDdXN0b20gX1RvZ2dsZSBBY3Rpb24iLCBWaXNpYmxl
IHwgRW5hYmxlZCB8IENoZWNrZWQpOworICAgICAgICBnX2Fzc2VydCghaXRlcik7CisKKyAgICAg
ICAgcXVpdE1haW5Mb29wKCk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfTsKKwor
c3RhdGljIHZvaWQgdGVzdENvbnRleHRNZW51Q3VzdG9tTWVudShDb250ZXh0TWVudUN1c3RvbUZ1
bGxUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPnNob3dJbldpbmRvd0Fu
ZFdhaXRVbnRpbE1hcHBlZCgpOworCisgICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxib2R5Pldl
YktpdEdUSysgQ29udGV4dCBtZW51IHRlc3RzPC9ib2R5PjwvaHRtbD4iLCAiZmlsZTovLy8iKTsK
KyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3QtPnNob3dDb250
ZXh0TWVudUFuZFdhaXRVbnRpbEZpbmlzaGVkKCk7Cit9CisKK2NsYXNzIENvbnRleHRNZW51RGlz
YWJsZWRUZXN0OiBwdWJsaWMgQ29udGV4dE1lbnVUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dM
SUJfVEVTVF9GSVhUVVJFKENvbnRleHRNZW51RGlzYWJsZWRUZXN0KTsKKworICAgIGVudW0gRGlz
YWJsZU1vZGUgeworICAgICAgICBJZ25vcmVDbGlja3MsCisgICAgICAgIElnbm9yZURlZmF1bHRN
ZW51CisgICAgfTsKKworICAgIHN0YXRpYyBnYm9vbGVhbiBidXR0b25QcmVzc0V2ZW50Q2FsbGJh
Y2soR3RrV2lkZ2V0KiwgR2RrRXZlbnQqIGV2ZW50LCBDb250ZXh0TWVudURpc2FibGVkVGVzdCog
dGVzdCkKKyAgICB7CisgICAgICAgIGlmIChldmVudC0+YnV0dG9uLmJ1dHRvbiAhPSAzKQorICAg
ICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICByZXR1cm4gdGVzdC0+cmlnaHRCdXR0b25Q
cmVzc2VkKCk7CisgICAgfQorCisgICAgQ29udGV4dE1lbnVEaXNhYmxlZFRlc3QoKQorICAgICAg
ICA6IG1fZGlzYWJsZU1vZGUoSWdub3JlQ2xpY2tzKQorICAgIHsKKyAgICAgICAgZ19zaWduYWxf
Y29ubmVjdChtX3dlYlZpZXcsICJidXR0b24tcHJlc3MtZXZlbnQiLCBHX0NBTExCQUNLKGJ1dHRv
blByZXNzRXZlbnRDYWxsYmFjayksIHRoaXMpOworICAgIH0KKworICAgIGJvb2wgY29udGV4dE1l
bnUoV2ViS2l0Q29udGV4dE1lbnUqIGNvbnRleHRNZW51LCBHZGtFdmVudCosIFdlYktpdEhpdFRl
c3RSZXN1bHQqKQorICAgIHsKKyAgICAgICAgaWYgKG1fZGlzYWJsZU1vZGUgPT0gSWdub3JlQ2xp
Y2tzKQorICAgICAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgcXVpdE1haW5Mb29wKCk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgYm9vbCByaWdodEJ1dHRvblByZXNzZWQoKQorICAgIHsKKyAgICAgICAgaWYgKG1f
ZGlzYWJsZU1vZGUgPT0gSWdub3JlQ2xpY2tzKSB7CisgICAgICAgICAgICBxdWl0TWFpbkxvb3BB
ZnRlclByb2Nlc3NpbmdQZW5kaW5nRXZlbnRzKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgRGlzYWJsZU1v
ZGUgbV9kaXNhYmxlTW9kZTsKK307CisKK3N0YXRpYyB2b2lkIHRlc3RDb250ZXh0TWVudURpc2Fi
bGVNZW51KENvbnRleHRNZW51RGlzYWJsZWRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQorewor
ICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOworCisgICAgdGVzdC0+
bG9hZEh0bWwoIjxodG1sPjxib2R5PldlYktpdEdUSysgQ29udGV4dCBtZW51IHRlc3RzPC9ib2R5
PjwvaHRtbD4iLCAiZmlsZTovLy8iKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQo
KTsKKworICAgIHRlc3QtPm1fZGlzYWJsZU1vZGUgPSBDb250ZXh0TWVudURpc2FibGVkVGVzdDo6
SWdub3JlRGVmYXVsdE1lbnU7CisgICAgdGVzdC0+c2hvd0NvbnRleHRNZW51QW5kV2FpdFVudGls
RmluaXNoZWQoKTsKKworICAgIHRlc3QtPm1fZGlzYWJsZU1vZGUgPSBDb250ZXh0TWVudURpc2Fi
bGVkVGVzdDo6SWdub3JlQ2xpY2tzOworICAgIHRlc3QtPnNob3dDb250ZXh0TWVudUFuZFdhaXRV
bnRpbEZpbmlzaGVkKCk7Cit9CisKK2NsYXNzIENvbnRleHRNZW51U3VibWVudVRlc3Q6IHB1Ymxp
YyBDb250ZXh0TWVudVRlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUo
Q29udGV4dE1lbnVTdWJtZW51VGVzdCk7CisKKyAgICBib29sIGNvbnRleHRNZW51KFdlYktpdENv
bnRleHRNZW51KiBjb250ZXh0TWVudSwgR2RrRXZlbnQqLCBXZWJLaXRIaXRUZXN0UmVzdWx0KikK
KyAgICB7CisgICAgICAgIHNpemVfdCBtZW51U2l6ZSA9IHdlYmtpdF9jb250ZXh0X21lbnVfZ2V0
X25faXRlbXMoY29udGV4dE1lbnUpOworICAgICAgICBHUmVmUHRyPFdlYktpdENvbnRleHRNZW51
PiBzdWJNZW51ID0gYWRvcHRHUmVmKHdlYmtpdF9jb250ZXh0X21lbnVfbmV3KCkpOworICAgICAg
ICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRf
bWVudV9pdGVtX25ld193aXRoX3N1Ym1lbnUoIlN1Yk1lbnVJdGVtIiwgc3ViTWVudS5nZXQoKSkp
OworICAgICAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9jb250ZXh0X21lbnVfZ2V0X25faXRl
bXMoY29udGV4dE1lbnUpLCA9PSwgbWVudVNpemUgKyAxKTsKKworICAgICAgICBHUmVmUHRyPFdl
YktpdENvbnRleHRNZW51PiBzdWJNZW51MiA9IGFkb3B0R1JlZih3ZWJraXRfY29udGV4dF9tZW51
X25ldygpKTsKKyAgICAgICAgR1JlZlB0cjxXZWJLaXRDb250ZXh0TWVudUl0ZW0+IGl0ZW0gPSB3
ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X2Zyb21fc3RvY2tfYWN0aW9uKFdFQktJVF9DT05U
RVhUX01FTlVfQUNUSU9OX09QRU5fTElOSyk7CisKKyAgICAgICAgLy8gQWRkIHN1Ym1lbnUgdG8g
bmV3bHkgY3JlYXRlZCBpdGVtLgorICAgICAgICBnX2Fzc2VydCghd2Via2l0X2NvbnRleHRfbWVu
dV9pdGVtX2dldF9zdWJtZW51KGl0ZW0uZ2V0KCkpKTsKKyAgICAgICAgd2Via2l0X2NvbnRleHRf
bWVudV9pdGVtX3NldF9zdWJtZW51KGl0ZW0uZ2V0KCksIHN1Yk1lbnUyLmdldCgpKTsKKyAgICAg
ICAgZ19hc3NlcnQod2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9zdWJtZW51KGl0ZW0uZ2V0
KCkpID09IHN1Yk1lbnUyLmdldCgpKTsKKworICAgICAgICAvLyBSZXBsYWNlIHRoZSBzdWJtZW51
LgorICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fc2V0X3N1Ym1lbnUoaXRlbS5nZXQo
KSwgMCk7CisgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X3N1
Ym1lbnUoaXRlbS5nZXQoKSkpOworCisgICAgICAgIC8vIFRyeSB0byBhZGQgYSBzdWJtZW51IGFs
cmVhZHkgYWRkZWQgdG8gYW5vdGhlciBpdGVtLgorICAgICAgICByZW1vdmVMb2dGYXRhbEZsYWco
R19MT0dfTEVWRUxfV0FSTklORyk7CisgICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9z
ZXRfc3VibWVudShpdGVtLmdldCgpLCBzdWJNZW51LmdldCgpKTsKKyAgICAgICAgYWRkTG9nRmF0
YWxGbGFnKEdfTE9HX0xFVkVMX1dBUk5JTkcpOworICAgICAgICBnX2Fzc2VydCghd2Via2l0X2Nv
bnRleHRfbWVudV9pdGVtX2dldF9zdWJtZW51KGl0ZW0uZ2V0KCkpKTsKKworICAgICAgICAvLyBB
IHJlbW92ZWQgc3VibWVudSBzaG91bGRuJ3QgaGF2ZSBhIHBhcmVudC4KKyAgICAgICAgd2Via2l0
X2NvbnRleHRfbWVudV9pdGVtX3NldF9zdWJtZW51KGl0ZW0uZ2V0KCksIHN1Yk1lbnUyLmdldCgp
KTsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9zdWJtZW51
KGl0ZW0uZ2V0KCkpID09IHN1Yk1lbnUyLmdldCgpKTsKKworICAgICAgICBxdWl0TWFpbkxvb3Ao
KTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0
Q29udGV4dE1lbnVTdWJNZW51KENvbnRleHRNZW51U3VibWVudVRlc3QqIHRlc3QsIGdjb25zdHBv
aW50ZXIpCit7CisgICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7CisK
KyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHk+V2ViS2l0R1RLKyBDb250ZXh0IG1lbnUg
dGVzdHM8L2JvZHk+PC9odG1sPiIsICJmaWxlOi8vLyIpOworICAgIHRlc3QtPndhaXRVbnRpbExv
YWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+c2hvd0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmlu
aXNoZWQoKTsKK30KKworY2xhc3MgQ29udGV4dE1lbnVEaXNtaXNzZWRUZXN0OiBwdWJsaWMgQ29u
dGV4dE1lbnVUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKENvbnRl
eHRNZW51RGlzbWlzc2VkVGVzdCk7CisKKyAgICBDb250ZXh0TWVudURpc21pc3NlZFRlc3QoKQor
ICAgICAgICA6IG1fZGlzbWlzc2VkKGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGNv
bnRleHRNZW51KFdlYktpdENvbnRleHRNZW51KiBjb250ZXh0TWVudSwgR2RrRXZlbnQqLCBXZWJL
aXRIaXRUZXN0UmVzdWx0KikKKyAgICB7CisgICAgICAgIHF1aXRNYWluTG9vcCgpOworICAgICAg
ICAvLyBTaG93IHRoZSBkZWZhdWx0IGNvbnRleHQgbWVudS4KKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIHZvaWQgY29udGV4dE1lbnVEaXNtaXNzZWQoKQorICAgIHsKKyAgICAg
ICAgbV9kaXNtaXNzZWQgPSB0cnVlOworICAgICAgICBDb250ZXh0TWVudVRlc3Q6OmNvbnRleHRN
ZW51RGlzbWlzc2VkKCk7CisgICAgfQorCisgICAgdm9pZCBzaG93Q29udGV4dE1lbnVBbmRXYWl0
VW50aWxEaXNtaXNzZWQoKQorICAgIHsKKyAgICAgICAgc2hvd0NvbnRleHRNZW51QW5kV2FpdFVu
dGlsRmluaXNoZWQoKTsKKyAgICAgICAgZGlzbWlzc0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmlu
aXNoZWQoKTsKKyAgICB9CisKKyAgICBib29sIG1fZGlzbWlzc2VkOworfTsKKworc3RhdGljIHZv
aWQgdGVzdENvbnRleHRNZW51RGlzbWlzc2VkKENvbnRleHRNZW51RGlzbWlzc2VkVGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxN
YXBwZWQoKTsKKworICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keT5XZWJLaXRHVEsrIENv
bnRleHQgbWVudSB0ZXN0czwvYm9keT48L2h0bWw+IiwgImZpbGU6Ly8vIik7CisgICAgdGVzdC0+
d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBbmRX
YWl0VW50aWxEaXNtaXNzZWQoKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX2Rpc21pc3NlZCk7Cit9
CisKK2NsYXNzIENvbnRleHRNZW51U21hcnRTZXBhcmF0b3JzVGVzdDogcHVibGljIENvbnRleHRN
ZW51VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShDb250ZXh0TWVu
dVNtYXJ0U2VwYXJhdG9yc1Rlc3QpOworCisgICAgYm9vbCBjb250ZXh0TWVudShXZWJLaXRDb250
ZXh0TWVudSogY29udGV4dE1lbnUsIEdka0V2ZW50KiwgV2ViS2l0SGl0VGVzdFJlc3VsdCopCisg
ICAgeworICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X3JlbW92ZV9hbGwoY29udGV4dE1lbnUp
OworCisgICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJr
aXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X3NlcGFyYXRvcigpKTsKKyAgICAgICAgd2Via2l0X2Nv
bnRleHRfbWVudV9hcHBlbmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9u
ZXdfc2VwYXJhdG9yKCkpOworICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250
ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19mcm9tX3N0b2NrX2FjdGlvbihX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9HT19CQUNLKSk7CisgICAgICAgIHdlYmtpdF9jb250
ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3
X2Zyb21fc3RvY2tfYWN0aW9uKFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0dPX0ZPUldBUkQp
KTsKKyAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBlbmQoY29udGV4dE1lbnUsIHdlYmtp
dF9jb250ZXh0X21lbnVfaXRlbV9uZXdfc2VwYXJhdG9yKCkpOworICAgICAgICB3ZWJraXRfY29u
dGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25l
d19zZXBhcmF0b3IoKSk7CisgICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRl
eHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X2Zyb21fc3RvY2tfYWN0aW9uKFdF
QktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFkpKTsKKyAgICAgICAgd2Via2l0X2NvbnRleHRf
bWVudV9hcHBlbmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfc2Vw
YXJhdG9yKCkpOworICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVu
dSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19mcm9tX3N0b2NrX2FjdGlvbihXRUJLSVRf
Q09OVEVYVF9NRU5VX0FDVElPTl9JTlNQRUNUX0VMRU1FTlQpKTsKKyAgICAgICAgd2Via2l0X2Nv
bnRleHRfbWVudV9hcHBlbmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9u
ZXdfc2VwYXJhdG9yKCkpOworICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250
ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19zZXBhcmF0b3IoKSk7CisKKyAg
ICAgICAgcXVpdE1haW5Mb29wKCk7CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIEd0a01lbnUqIHNob3dDb250ZXh0TWVudUFuZEdldEd0a01lbnUoKQorICAgIHsKKyAgICAg
ICAgc2hvd0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmluaXNoZWQoKTsKKyAgICAgICAgcmV0dXJu
IGdldFBvcHVwTWVudSgpOworICAgIH0KK307CisKK3N0YXRpYyB2b2lkIHRlc3RDb250ZXh0TWVu
dVNtYXJ0U2VwYXJhdG9ycyhDb250ZXh0TWVudVNtYXJ0U2VwYXJhdG9yc1Rlc3QqIHRlc3QsIGdj
b25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVk
KCk7CisKKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHk+V2ViS2l0R1RLKyBDb250ZXh0
IG1lbnUgdGVzdHM8L2JvZHk+PC9odG1sPiIsICJmaWxlOi8vLyIpOworICAgIHRlc3QtPndhaXRV
bnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgR3RrTWVudSogbWVudSA9IHRlc3QtPnNob3dDb250
ZXh0TWVudUFuZEdldEd0a01lbnUoKTsKKyAgICBnX2Fzc2VydChtZW51KTsKKworICAgIC8vIExl
YWRpbmcgYW5kIHRyYWlsaW5nIHNlcGFyYXRvcnMgYXJlIG5vdCBhZGRlZCB0byB0aGUgY29udGV4
dCBtZW51LgorICAgIEdPd25QdHI8R0xpc3Q+IG1lbnVJdGVtcyhndGtfY29udGFpbmVyX2dldF9j
aGlsZHJlbihHVEtfQ09OVEFJTkVSKG1lbnUpKSk7CisgICAgZ19hc3NlcnRfY21wdWludChnX2xp
c3RfbGVuZ3RoKG1lbnVJdGVtcy5nZXQoKSksID09LCA2KTsKKyAgICBHdGtXaWRnZXQqIGl0ZW0g
PSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDApKTsKKyAgICBn
X2Fzc2VydCghR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9n
ZXRfdmlzaWJsZShpdGVtKSk7CisgICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRh
KG1lbnVJdGVtcy5nZXQoKSwgMSkpOworICAgIGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01F
TlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKKyAgICBpdGVt
ID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCAyKSk7CisgICAg
Z19hc3NlcnQoR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9n
ZXRfdmlzaWJsZShpdGVtKSk7CisgICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRh
KG1lbnVJdGVtcy5nZXQoKSwgMykpOworICAgIGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01F
TlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKKyAgICBpdGVt
ID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCA0KSk7CisgICAg
Z19hc3NlcnQoR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9n
ZXRfdmlzaWJsZShpdGVtKSk7CisgICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRh
KG1lbnVJdGVtcy5nZXQoKSwgNSkpOworICAgIGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01F
TlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKKworICAgIC8v
IEhpZGluZyBhIG1lbnUgaXRlbSBiZXR3ZWVuIHR3byBzZXBhcmF0b3JzIGhpZGVzIHRoZSBmb2xs
b3dpbmcgc2VwYXJhdG9yLgorICAgIEd0a0FjdGlvbiogYWN0aW9uID0gZ3RrX2FjdGl2YXRhYmxl
X2dldF9yZWxhdGVkX2FjdGlvbihHVEtfQUNUSVZBVEFCTEUoZ19saXN0X250aF9kYXRhKG1lbnVJ
dGVtcy5nZXQoKSwgMykpKTsKKyAgICBndGtfYWN0aW9uX3NldF92aXNpYmxlKGFjdGlvbiwgRkFM
U0UpOworICAgIG1lbnVJdGVtcy5zZXQoZ3RrX2NvbnRhaW5lcl9nZXRfY2hpbGRyZW4oR1RLX0NP
TlRBSU5FUihtZW51KSkpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQoZ19saXN0X2xlbmd0aChtZW51
SXRlbXMuZ2V0KCkpLCA9PSwgNik7CisgICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9k
YXRhKG1lbnVJdGVtcy5nZXQoKSwgMCkpOworICAgIGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9S
X01FTlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKKyAgICBp
dGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCAxKSk7Cisg
ICAgZ19hc3NlcnQoIUdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRn
ZXRfZ2V0X3Zpc2libGUoaXRlbSkpOworICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhf
ZGF0YShtZW51SXRlbXMuZ2V0KCksIDIpKTsKKyAgICBnX2Fzc2VydChHVEtfSVNfU0VQQVJBVE9S
X01FTlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKKyAgICBp
dGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCAzKSk7Cisg
ICAgZ19hc3NlcnQoIUdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmICFndGtfd2lk
Z2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKKyAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRo
X2RhdGEobWVudUl0ZW1zLmdldCgpLCA0KSk7CisgICAgZ19hc3NlcnQoR1RLX0lTX1NFUEFSQVRP
Ul9NRU5VX0lURU0oaXRlbSkgJiYgIWd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOworICAg
IGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDUpKTsK
KyAgICBnX2Fzc2VydCghR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dp
ZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7CisgICAgZ3RrX2FjdGlvbl9zZXRfdmlzaWJsZShhY3Rp
b24sIFRSVUUpOworCisgICAgLy8gU2hvd2luZyBhbiBhY3Rpb24gYmV0d2VlbiB0d28gc2VwYXJh
dG9ycyBzaG93cyB0aGUgaGlkZGVuIHNlcGFyYXRvci4KKyAgICBpdGVtID0gR1RLX1dJREdFVChn
X2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCAwKSk7CisgICAgZ19hc3NlcnQoIUdUS19J
U19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRl
bSkpOworICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0
KCksIDEpKTsKKyAgICBnX2Fzc2VydCghR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkg
JiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7CisgICAgaXRlbSA9IEdUS19XSURHRVQo
Z19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgMikpOworICAgIGdfYXNzZXJ0KEdUS19J
U19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRl
bSkpOworICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0
KCksIDMpKTsKKyAgICBnX2Fzc2VydCghR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkg
JiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7CisgICAgaXRlbSA9IEdUS19XSURHRVQo
Z19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgNCkpOworICAgIGdfYXNzZXJ0KEdUS19J
U19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRl
bSkpOworICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0
KCksIDUpKTsKKyAgICBnX2Fzc2VydCghR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkg
JiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7CisKKyAgICAvLyBUcmFpbGluZyBzZXBh
cmF0b3JzIGFyZSBoaWRkZW4gdG9vLgorICAgIGFjdGlvbiA9IGd0a19hY3RpdmF0YWJsZV9nZXRf
cmVsYXRlZF9hY3Rpb24oR1RLX0FDVElWQVRBQkxFKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMu
Z2V0KCksIDUpKSk7CisgICAgZ3RrX2FjdGlvbl9zZXRfdmlzaWJsZShhY3Rpb24sIEZBTFNFKTsK
KyAgICBtZW51SXRlbXMuc2V0KGd0a19jb250YWluZXJfZ2V0X2NoaWxkcmVuKEdUS19DT05UQUlO
RVIobWVudSkpKTsKKyAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0
ZW1zLmdldCgpLCAwKSk7CisgICAgZ19hc3NlcnQoIUdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVN
KGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOworICAgIGl0ZW0gPSBHVEtf
V0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDEpKTsKKyAgICBnX2Fzc2Vy
dCghR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlz
aWJsZShpdGVtKSk7CisgICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJ
dGVtcy5nZXQoKSwgMikpOworICAgIGdfYXNzZXJ0KEdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVN
KGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOworICAgIGl0ZW0gPSBHVEtf
V0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDMpKTsKKyAgICBnX2Fzc2Vy
dCghR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlz
aWJsZShpdGVtKSk7CisgICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJ
dGVtcy5nZXQoKSwgNCkpOworICAgIGdfYXNzZXJ0KEdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVN
KGl0ZW0pICYmICFndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKKyAgICBpdGVtID0gR1RL
X1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCA1KSk7CisgICAgZ19hc3Nl
cnQoIUdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmICFndGtfd2lkZ2V0X2dldF92
aXNpYmxlKGl0ZW0pKTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQoreworICAgIENvbnRleHRNZW51
RGVmYXVsdFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJkZWZhdWx0LW1lbnUiLCB0ZXN0Q29u
dGV4dE1lbnVEZWZhdWx0TWVudSk7CisgICAgQ29udGV4dE1lbnVDdXN0b21UZXN0OjphZGQoIldl
YktpdFdlYlZpZXciLCAicG9wdWxhdGUtbWVudSIsIHRlc3RDb250ZXh0TWVudVBvcHVsYXRlTWVu
dSk7CisgICAgQ29udGV4dE1lbnVDdXN0b21GdWxsVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3Iiwg
ImN1c3RvbS1tZW51IiwgdGVzdENvbnRleHRNZW51Q3VzdG9tTWVudSk7CisgICAgQ29udGV4dE1l
bnVEaXNhYmxlZFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJkaXNhYmxlLW1lbnUiLCB0ZXN0
Q29udGV4dE1lbnVEaXNhYmxlTWVudSk7CisgICAgQ29udGV4dE1lbnVTdWJtZW51VGVzdDo6YWRk
KCJXZWJLaXRXZWJWaWV3IiwgInN1Ym1lbnUiLCB0ZXN0Q29udGV4dE1lbnVTdWJNZW51KTsKKyAg
ICBDb250ZXh0TWVudURpc21pc3NlZFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJtZW51LWRp
c21pc3NlZCIsIHRlc3RDb250ZXh0TWVudURpc21pc3NlZCk7CisgICAgQ29udGV4dE1lbnVTbWFy
dFNlcGFyYXRvcnNUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAic21hcnQtc2VwYXJhdG9ycyIs
IHRlc3RDb250ZXh0TWVudVNtYXJ0U2VwYXJhdG9ycyk7Cit9CisKK3ZvaWQgYWZ0ZXJBbGwoKQor
eworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rl
c3RDb29raWVNYW5hZ2VyLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0
ay9UZXN0Q29va2llTWFuYWdlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uYWRjNmI1YgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Mkd0ay9UZXN0Q29va2llTWFuYWdlci5jcHAKQEAgLTAsMCArMSwzMzEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5oIgorI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCisj
aW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KKworc3RhdGljIFdlYktpdFRlc3RTZXJ2ZXIqIGtTZXJ2
ZXI7CitzdGF0aWMgY2hhcioga1RlbXBEaXJlY3Rvcnk7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBr
Rmlyc3RQYXJ0eURvbWFpbiA9ICIxMjcuMC4wLjEiOworc3RhdGljIGNvbnN0IGNoYXIqIGtUaGly
ZFBhcnR5RG9tYWluID0gImxvY2FsaG9zdCI7CitzdGF0aWMgY29uc3QgY2hhcioga0luZGV4SHRt
bEZvcm1hdCA9CisgICAgIjxodG1sPjxib2R5PiIKKyAgICAiIDxwPldlYktpdEdUSysgQ29va2ll
IE1hbmFnZXIgdGVzdDwvcD4iCisgICAgIiA8aW1nIHNyYz0naHR0cDovL2xvY2FsaG9zdDoldS9p
bWFnZS5wbmcnIHdpZHRoPTUgaGVpZ2h0PTU+PC9pbWc+IgorICAgICI8L2JvZHk+PC9odG1sPiI7
CisKK2NsYXNzIENvb2tpZU1hbmFnZXJUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3QgeworcHVibGlj
OgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoQ29va2llTWFuYWdlclRlc3QpOworCisgICAg
c3RhdGljIHZvaWQgY29va2llc0NoYW5nZWRDYWxsYmFjayhXZWJLaXRDb29raWVNYW5hZ2VyKiwg
Q29va2llTWFuYWdlclRlc3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT5tX2Nvb2tpZXND
aGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgaWYgKHRlc3QtPm1fZmluaXNoTG9vcFdoZW5Db29raWVz
Q2hhbmdlKQorICAgICAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsK
KyAgICB9CisKKyAgICBDb29raWVNYW5hZ2VyVGVzdCgpCisgICAgICAgIDogV2ViVmlld1Rlc3Qo
KQorICAgICAgICAsIG1fY29va2llTWFuYWdlcih3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Nvb2tp
ZV9tYW5hZ2VyKHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dChtX3dlYlZpZXcpKSkKKyAgICAg
ICAgLCBtX2FjY2VwdFBvbGljeShXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfTk9fVEhJUkRf
UEFSVFkpCisgICAgICAgICwgbV9kb21haW5zKDApCisgICAgICAgICwgbV9jb29raWVzQ2hhbmdl
ZChmYWxzZSkKKyAgICAgICAgLCBtX2ZpbmlzaExvb3BXaGVuQ29va2llc0NoYW5nZShmYWxzZSkK
KyAgICB7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9jb29raWVNYW5hZ2VyLCAiY2hhbmdl
ZCIsIEdfQ0FMTEJBQ0soY29va2llc0NoYW5nZWRDYWxsYmFjayksIHRoaXMpOworICAgIH0KKwor
ICAgIH5Db29raWVNYW5hZ2VyVGVzdCgpCisgICAgeworICAgICAgICBnX3N0cmZyZWV2KG1fZG9t
YWlucyk7CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX2Nv
b2tpZU1hbmFnZXIsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOworICAg
ICAgICBpZiAobV9jb29raWVzVGV4dEZpbGUpCisgICAgICAgICAgICBnX3VubGluayhtX2Nvb2tp
ZXNUZXh0RmlsZS5nZXQoKSk7CisgICAgICAgIGlmIChtX2Nvb2tpZXNTUUxpdGVGaWxlKQorICAg
ICAgICAgICAgZ191bmxpbmsobV9jb29raWVzU1FMaXRlRmlsZS5nZXQoKSk7CisgICAgfQorCisg
ICAgdm9pZCBzZXRQZXJzaXN0ZW50U3RvcmFnZShXZWJLaXRDb29raWVQZXJzaXN0ZW50U3RvcmFn
ZSBzdG9yYWdlKQorICAgIHsKKyAgICAgICAgY29uc3QgY2hhciogZmlsZW5hbWUgPSAwOworICAg
ICAgICBzd2l0Y2ggKHN0b3JhZ2UpIHsKKyAgICAgICAgY2FzZSBXRUJLSVRfQ09PS0lFX1BFUlNJ
U1RFTlRfU1RPUkFHRV9URVhUOgorICAgICAgICAgICAgaWYgKCFtX2Nvb2tpZXNUZXh0RmlsZSkK
KyAgICAgICAgICAgICAgICBtX2Nvb2tpZXNUZXh0RmlsZS5zZXQoZ19idWlsZF9maWxlbmFtZShr
VGVtcERpcmVjdG9yeSwgImNvb2tpZXMudHh0IiwgTlVMTCkpOworICAgICAgICAgICAgZmlsZW5h
bWUgPSBtX2Nvb2tpZXNUZXh0RmlsZS5nZXQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFdFQktJVF9DT09LSUVfUEVSU0lTVEVOVF9TVE9SQUdFX1NRTElURToKKyAgICAgICAg
ICAgIGlmICghbV9jb29raWVzU1FMaXRlRmlsZSkKKyAgICAgICAgICAgICAgICBtX2Nvb2tpZXNT
UUxpdGVGaWxlLnNldChnX2J1aWxkX2ZpbGVuYW1lKGtUZW1wRGlyZWN0b3J5LCAiY29va2llcy5k
YiIsIE5VTEwpKTsKKyAgICAgICAgICAgIGZpbGVuYW1lID0gbV9jb29raWVzU1FMaXRlRmlsZS5n
ZXQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
Z19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICAgICAgfQorICAgICAgICB3ZWJraXRfY29va2ll
X21hbmFnZXJfc2V0X3BlcnNpc3RlbnRfc3RvcmFnZShtX2Nvb2tpZU1hbmFnZXIsIGZpbGVuYW1l
LCBzdG9yYWdlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBnZXRBY2NlcHRQb2xpY3lSZWFk
eUNhbGxiYWNrKEdPYmplY3QqIG9iamVjdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIGdwb2ludGVy
IHVzZXJEYXRhKQorICAgIHsKKyAgICAgICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAgICAg
ICBXZWJLaXRDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5ID0gd2Via2l0X2Nvb2tpZV9tYW5hZ2Vy
X2dldF9hY2NlcHRfcG9saWN5X2ZpbmlzaChXRUJLSVRfQ09PS0lFX01BTkFHRVIob2JqZWN0KSwg
cmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpOworICAgICAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkp
OworCisgICAgICAgIENvb2tpZU1hbmFnZXJUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8Q29va2ll
TWFuYWdlclRlc3QqPih1c2VyRGF0YSk7CisgICAgICAgIHRlc3QtPm1fYWNjZXB0UG9saWN5ID0g
cG9saWN5OworICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworICAg
IH0KKworICAgIFdlYktpdENvb2tpZUFjY2VwdFBvbGljeSBnZXRBY2NlcHRQb2xpY3koKQorICAg
IHsKKyAgICAgICAgbV9hY2NlcHRQb2xpY3kgPSBXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRf
Tk9fVEhJUkRfUEFSVFk7CisgICAgICAgIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfYWNjZXB0
X3BvbGljeShtX2Nvb2tpZU1hbmFnZXIsIDAsIGdldEFjY2VwdFBvbGljeVJlYWR5Q2FsbGJhY2ss
IHRoaXMpOworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisKKyAgICAgICAg
cmV0dXJuIG1fYWNjZXB0UG9saWN5OworICAgIH0KKworICAgIHZvaWQgc2V0QWNjZXB0UG9saWN5
KFdlYktpdENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpCisgICAgeworICAgICAgICB3ZWJraXRf
Y29va2llX21hbmFnZXJfc2V0X2FjY2VwdF9wb2xpY3kobV9jb29raWVNYW5hZ2VyLCBwb2xpY3kp
OworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGdldERvbWFpbnNSZWFkeUNhbGxiYWNrKEdPYmpl
Y3QqIG9iamVjdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIGdwb2ludGVyIHVzZXJEYXRhKQorICAg
IHsKKyAgICAgICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAgICAgICBjaGFyKiogZG9tYWlu
cyA9IHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfZG9tYWluc193aXRoX2Nvb2tpZXNfZmluaXNo
KFdFQktJVF9DT09LSUVfTUFOQUdFUihvYmplY3QpLCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSk7
CisgICAgICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7CisKKyAgICAgICAgQ29va2llTWFuYWdl
clRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxDb29raWVNYW5hZ2VyVGVzdCo+KHVzZXJEYXRhKTsK
KyAgICAgICAgdGVzdC0+bV9kb21haW5zID0gZG9tYWluczsKKyAgICAgICAgZ19tYWluX2xvb3Bf
cXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBjaGFyKiogZ2V0RG9tYWlucygp
CisgICAgeworICAgICAgICBnX3N0cmZyZWV2KG1fZG9tYWlucyk7CisgICAgICAgIG1fZG9tYWlu
cyA9IDA7CisgICAgICAgIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfZG9tYWluc193aXRoX2Nv
b2tpZXMobV9jb29raWVNYW5hZ2VyLCAwLCBnZXREb21haW5zUmVhZHlDYWxsYmFjaywgdGhpcyk7
CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKworICAgICAgICByZXR1cm4g
bV9kb21haW5zOworICAgIH0KKworICAgIGJvb2wgaGFzRG9tYWluKGNvbnN0IGNoYXIqIGRvbWFp
bikKKyAgICB7CisgICAgICAgIGlmICghbV9kb21haW5zKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBtX2RvbWFpbnNbaV07ICsraSkKKyAg
ICAgICAgICAgIGlmIChnX3N0cl9lcXVhbChtX2RvbWFpbnNbaV0sIGRvbWFpbikpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICB2b2lkIGRlbGV0ZUNvb2tpZXNGb3JEb21haW4oY29uc3QgY2hhciogZG9tYWluKQorICAgIHsK
KyAgICAgICAgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWVzX2Zvcl9kb21haW4o
bV9jb29raWVNYW5hZ2VyLCBkb21haW4pOworICAgIH0KKworICAgIHZvaWQgZGVsZXRlQWxsQ29v
a2llcygpCisgICAgeworICAgICAgICB3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2FsbF9j
b29raWVzKG1fY29va2llTWFuYWdlcik7CisgICAgfQorCisgICAgdm9pZCB3YWl0VW50aWxDb29r
aWVzQ2hhbmdlZCgpCisgICAgeworICAgICAgICBtX2Nvb2tpZXNDaGFuZ2VkID0gZmFsc2U7Cisg
ICAgICAgIG1fZmluaXNoTG9vcFdoZW5Db29raWVzQ2hhbmdlID0gdHJ1ZTsKKyAgICAgICAgZ19t
YWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgICAgICBtX2ZpbmlzaExvb3BXaGVuQ29va2ll
c0NoYW5nZSA9IGZhbHNlOworICAgIH0KKworICAgIFdlYktpdENvb2tpZU1hbmFnZXIqIG1fY29v
a2llTWFuYWdlcjsKKyAgICBXZWJLaXRDb29raWVBY2NlcHRQb2xpY3kgbV9hY2NlcHRQb2xpY3k7
CisgICAgY2hhcioqIG1fZG9tYWluczsKKyAgICBib29sIG1fY29va2llc0NoYW5nZWQ7CisgICAg
Ym9vbCBtX2ZpbmlzaExvb3BXaGVuQ29va2llc0NoYW5nZTsKKyAgICBHT3duUHRyPGNoYXI+IG1f
Y29va2llc1RleHRGaWxlOworICAgIEdPd25QdHI8Y2hhcj4gbV9jb29raWVzU1FMaXRlRmlsZTsK
K307CisKK3N0YXRpYyB2b2lkIHRlc3RDb29raWVNYW5hZ2VyQWNjZXB0UG9saWN5KENvb2tpZU1h
bmFnZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIC8vIERlZmF1bHQgcG9saWN5
IGlzIE5PX1RISVJEX1BBUlRZLgorICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5nZXRBY2NlcHRQ
b2xpY3koKSwgPT0sIFdFQktJVF9DT09LSUVfUE9MSUNZX0FDQ0VQVF9OT19USElSRF9QQVJUWSk7
CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvaW5kZXguaHRtbCIp
LmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgY2hhcioq
IGRvbWFpbnMgPSB0ZXN0LT5nZXREb21haW5zKCk7CisgICAgZ19hc3NlcnQoZG9tYWlucyk7Cisg
ICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgoZG9tYWlucyksID09LCAxKTsKKyAgICBn
X2Fzc2VydF9jbXBzdHIoZG9tYWluc1swXSwgPT0sIGtGaXJzdFBhcnR5RG9tYWluKTsKKyAgICB0
ZXN0LT5kZWxldGVBbGxDb29raWVzKCk7CisKKyAgICB0ZXN0LT5zZXRBY2NlcHRQb2xpY3koV0VC
S0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX0FMV0FZUyk7CisgICAgZ19hc3NlcnRfY21waW50KHRl
c3QtPmdldEFjY2VwdFBvbGljeSgpLCA9PSwgV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX0FM
V0FZUyk7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvaW5kZXgu
aHRtbCIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAg
ZG9tYWlucyA9IHRlc3QtPmdldERvbWFpbnMoKTsKKyAgICBnX2Fzc2VydChkb21haW5zKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aChkb21haW5zKSwgPT0sIDIpOworICAgIGdf
YXNzZXJ0KHRlc3QtPmhhc0RvbWFpbihrRmlyc3RQYXJ0eURvbWFpbikpOworICAgIGdfYXNzZXJ0
KHRlc3QtPmhhc0RvbWFpbihrVGhpcmRQYXJ0eURvbWFpbikpOworICAgIHRlc3QtPmRlbGV0ZUFs
bENvb2tpZXMoKTsKKworICAgIHRlc3QtPnNldEFjY2VwdFBvbGljeShXRUJLSVRfQ09PS0lFX1BP
TElDWV9BQ0NFUFRfTkVWRVIpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5nZXRBY2NlcHRQ
b2xpY3koKSwgPT0sIFdFQktJVF9DT09LSUVfUE9MSUNZX0FDQ0VQVF9ORVZFUik7CisgICAgdGVz
dC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvaW5kZXguaHRtbCIpLmRhdGEoKSk7
CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZG9tYWlucyA9IHRlc3Qt
PmdldERvbWFpbnMoKTsKKyAgICBnX2Fzc2VydChkb21haW5zKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoZ19zdHJ2X2xlbmd0aChkb21haW5zKSwgPT0sIDApOworfQorCitzdGF0aWMgdm9pZCB0ZXN0
Q29va2llTWFuYWdlckRlbGV0ZUNvb2tpZXMoQ29va2llTWFuYWdlclRlc3QqIHRlc3QsIGdjb25z
dHBvaW50ZXIpCit7CisgICAgdGVzdC0+c2V0QWNjZXB0UG9saWN5KFdFQktJVF9DT09LSUVfUE9M
SUNZX0FDQ0VQVF9BTFdBWVMpOworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9y
UGF0aCgiL2luZGV4Lmh0bWwiKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5p
c2hlZCgpOworICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKHRlc3QtPmdldERvbWFp
bnMoKSksID09LCAyKTsKKworICAgIC8vIERlbGV0ZSBmaXJzdCBwYXJ0eSBjb29raWVzLgorICAg
IHRlc3QtPmRlbGV0ZUNvb2tpZXNGb3JEb21haW4oa0ZpcnN0UGFydHlEb21haW4pOworICAgIGdf
YXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKHRlc3QtPmdldERvbWFpbnMoKSksID09LCAxKTsK
KworICAgIC8vIERlbGV0ZSB0aGlyZCBwYXJ0eSBjb29raWVzLgorICAgIHRlc3QtPmRlbGV0ZUNv
b2tpZXNGb3JEb21haW4oa1RoaXJkUGFydHlEb21haW4pOworICAgIGdfYXNzZXJ0X2NtcGludChn
X3N0cnZfbGVuZ3RoKHRlc3QtPmdldERvbWFpbnMoKSksID09LCAwKTsKKworICAgIHRlc3QtPmxv
YWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2luZGV4Lmh0bWwiKS5kYXRhKCkpOworICAg
IHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0X2NtcGludChnX3N0
cnZfbGVuZ3RoKHRlc3QtPmdldERvbWFpbnMoKSksID09LCAyKTsKKworICAgIC8vIERlbGV0ZSBh
bGwgY29va2llcy4KKyAgICB0ZXN0LT5kZWxldGVBbGxDb29raWVzKCk7CisgICAgZ19hc3NlcnRf
Y21waW50KGdfc3Rydl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlucygpKSwgPT0sIDApOworfQorCitz
dGF0aWMgdm9pZCB0ZXN0Q29va2llTWFuYWdlckNvb2tpZXNDaGFuZ2VkKENvb2tpZU1hbmFnZXJU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX2Nvb2tp
ZXNDaGFuZ2VkKTsKKyAgICB0ZXN0LT5zZXRBY2NlcHRQb2xpY3koV0VCS0lUX0NPT0tJRV9QT0xJ
Q1lfQUNDRVBUX0FMV0FZUyk7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQ
YXRoKCIvaW5kZXguaHRtbCIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlz
aGVkKCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9jb29raWVzQ2hhbmdlZCk7CisKKyAgICB0ZXN0
LT5kZWxldGVDb29raWVzRm9yRG9tYWluKGtGaXJzdFBhcnR5RG9tYWluKTsKKyAgICB0ZXN0LT53
YWl0VW50aWxDb29raWVzQ2hhbmdlZCgpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fY29va2llc0No
YW5nZWQpOworCisgICAgdGVzdC0+ZGVsZXRlQWxsQ29va2llcygpOworICAgIHRlc3QtPndhaXRV
bnRpbENvb2tpZXNDaGFuZ2VkKCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9jb29raWVzQ2hhbmdl
ZCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RDb29raWVNYW5hZ2VyUGVyc2lzdGVudFN0b3JhZ2Uo
Q29va2llTWFuYWdlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+c2V0
QWNjZXB0UG9saWN5KFdFQktJVF9DT09LSUVfUE9MSUNZX0FDQ0VQVF9BTFdBWVMpOworCisgICAg
Ly8gVGV4dCBzdG9yYWdlIHVzaW5nIGEgbmV3IGZpbGUuCisgICAgdGVzdC0+c2V0UGVyc2lzdGVu
dFN0b3JhZ2UoV0VCS0lUX0NPT0tJRV9QRVJTSVNURU5UX1NUT1JBR0VfVEVYVCk7CisgICAgY2hh
cioqIGRvbWFpbnMgPSB0ZXN0LT5nZXREb21haW5zKCk7CisgICAgZ19hc3NlcnQoZG9tYWlucyk7
CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgoZG9tYWlucyksID09LCAwKTsKKwor
ICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2luZGV4Lmh0bWwiKS5k
YXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0
KHRlc3QtPm1fY29va2llc0NoYW5nZWQpOworICAgIGRvbWFpbnMgPSB0ZXN0LT5nZXREb21haW5z
KCk7CisgICAgZ19hc3NlcnQoZG9tYWlucyk7CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9s
ZW5ndGgoZG9tYWlucyksID09LCAyKTsKKworCisgICAgLy8gU1FMaXRlIHN0b3JhZ2UgdXNpbmcg
YSBuZXcgZmlsZS4KKyAgICB0ZXN0LT5zZXRQZXJzaXN0ZW50U3RvcmFnZShXRUJLSVRfQ09PS0lF
X1BFUlNJU1RFTlRfU1RPUkFHRV9TUUxJVEUpOworICAgIGRvbWFpbnMgPSB0ZXN0LT5nZXREb21h
aW5zKCk7CisgICAgZ19hc3NlcnQoZG9tYWlucyk7CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Ry
dl9sZW5ndGgoZG9tYWlucyksID09LCAwKTsKKworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+
Z2V0VVJJRm9yUGF0aCgiL2luZGV4Lmh0bWwiKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRp
bExvYWRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fY29va2llc0NoYW5nZWQpOwor
ICAgIGRvbWFpbnMgPSB0ZXN0LT5nZXREb21haW5zKCk7CisgICAgZ19hc3NlcnQoZG9tYWlucyk7
CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgoZG9tYWlucyksID09LCAyKTsKKwor
ICAgIC8vIFRleHQgc3RvcmFnZSB1c2luZyBhbiBleGlzdGluZyBmaWxlLgorICAgIHRlc3QtPnNl
dFBlcnNpc3RlbnRTdG9yYWdlKFdFQktJVF9DT09LSUVfUEVSU0lTVEVOVF9TVE9SQUdFX1RFWFQp
OworICAgIGRvbWFpbnMgPSB0ZXN0LT5nZXREb21haW5zKCk7CisgICAgZ19hc3NlcnQoZG9tYWlu
cyk7CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgoZG9tYWlucyksID09LCAyKTsK
KyAgICB0ZXN0LT5kZWxldGVBbGxDb29raWVzKCk7CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Ry
dl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlucygpKSwgPT0sIDApOworCisgICAgLy8gU1FMaXRlIHN0
b3JhZ2Ugd2l0aCBhbiBleGlzdGluZyBmaWxlLgorICAgIHRlc3QtPnNldFBlcnNpc3RlbnRTdG9y
YWdlKFdFQktJVF9DT09LSUVfUEVSU0lTVEVOVF9TVE9SQUdFX1NRTElURSk7CisgICAgZG9tYWlu
cyA9IHRlc3QtPmdldERvbWFpbnMoKTsKKyAgICBnX2Fzc2VydChkb21haW5zKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aChkb21haW5zKSwgPT0sIDIpOworICAgIHRlc3QtPmRl
bGV0ZUFsbENvb2tpZXMoKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0
LT5nZXREb21haW5zKCkpLCA9PSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNr
KFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IGNoYXIqIHBh
dGgsIEdIYXNoVGFibGUqLCBTb3VwQ2xpZW50Q29udGV4dCosIGdwb2ludGVyKQoreworICAgIGlm
IChtZXNzYWdlLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7CisgICAgICAgIHNvdXBfbWVz
c2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNz
YWdlLCBTT1VQX1NUQVRVU19PSyk7CisgICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvaW5kZXgu
aHRtbCIpKSB7CisgICAgICAgIGNoYXIqIGluZGV4SHRtbCA9IGdfc3RyZHVwX3ByaW50ZihrSW5k
ZXhIdG1sRm9ybWF0LCBzb3VwX3NlcnZlcl9nZXRfcG9ydChzZXJ2ZXIpKTsKKyAgICAgICAgc291
cF9tZXNzYWdlX2hlYWRlcnNfcmVwbGFjZShtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiU2V0
LUNvb2tpZSIsICJmb289YmFyOyBNYXgtQWdlPTYwIik7CisgICAgICAgIHNvdXBfbWVzc2FnZV9i
b2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBpbmRl
eEh0bWwsIHN0cmxlbihpbmRleEh0bWwpKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBh
dGgsICIvaW1hZ2UucG5nIikpCisgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX3JlcGxhY2Uo
bWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIlNldC1Db29raWUiLCAiYmF6PXF1eDsgTWF4LUFn
ZT02MCIpOworICAgIGVsc2UKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2Fn
ZSwgU09VUF9TVEFUVVNfTk9UX0ZPVU5EKTsKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0
ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQoreworICAg
IGtTZXJ2ZXIgPSBuZXcgV2ViS2l0VGVzdFNlcnZlcigpOworICAgIGtTZXJ2ZXItPnJ1bihzZXJ2
ZXJDYWxsYmFjayk7CisKKyAgICBrVGVtcERpcmVjdG9yeSA9IGdfZGlyX21ha2VfdG1wKCJXZWJL
aXQyVGVzdHMtWFhYWFhYIiwgMCk7CisgICAgZ19hc3NlcnQoa1RlbXBEaXJlY3RvcnkpOworCisg
ICAgQ29va2llTWFuYWdlclRlc3Q6OmFkZCgiV2ViS2l0Q29va2llTWFuYWdlciIsICJhY2NlcHQt
cG9saWN5IiwgdGVzdENvb2tpZU1hbmFnZXJBY2NlcHRQb2xpY3kpOworICAgIENvb2tpZU1hbmFn
ZXJUZXN0OjphZGQoIldlYktpdENvb2tpZU1hbmFnZXIiLCAiZGVsZXRlLWNvb2tpZXMiLCB0ZXN0
Q29va2llTWFuYWdlckRlbGV0ZUNvb2tpZXMpOworICAgIENvb2tpZU1hbmFnZXJUZXN0OjphZGQo
IldlYktpdENvb2tpZU1hbmFnZXIiLCAiY29va2llcy1jaGFuZ2VkIiwgdGVzdENvb2tpZU1hbmFn
ZXJDb29raWVzQ2hhbmdlZCk7CisgICAgQ29va2llTWFuYWdlclRlc3Q6OmFkZCgiV2ViS2l0Q29v
a2llTWFuYWdlciIsICJwZXJzaXN0ZW50LXN0b3JhZ2UiLCB0ZXN0Q29va2llTWFuYWdlclBlcnNp
c3RlbnRTdG9yYWdlKTsKK30KKwordm9pZCBhZnRlckFsbCgpCit7CisgICAgZGVsZXRlIGtTZXJ2
ZXI7CisgICAgZ19ybWRpcihrVGVtcERpcmVjdG9yeSk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdERPTURPTVdpbmRvdy5jcHAgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdERPTURPTVdpbmRvdy5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThjNmUxMAotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0RE9NRE9NV2luZG93
LmNwcApAQCAtMCwwICsxLDE1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJZ2FsaWEg
Uy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Rlc3RSdW5u
ZXIuaCIKKyNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNp
bmNsdWRlIDx3ZWJraXQyL3dlYmtpdDIuaD4KKworI2RlZmluZSBIVE1MX0RPQ1VNRU5UICI8aHRt
bD48aGVhZD48dGl0bGU+PC90aXRsZT48L2hlYWQ+PHN0eWxlIHR5cGU9J3RleHQvY3NzJz4jdGVz
dCB7IGZvbnQtc2l6ZTogMTZweDsgfTwvc3R5bGU+PGJvZHk+PHAgaWQ9J3Rlc3QnPnRlc3Q8L3A+
PC9ib2R5PjwvaHRtbD4iCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBnYm9vbGVhbiBsb2FkZWQ7
CisgICAgZ2Jvb2xlYW4gY2xpY2tlZDsKKyAgICBXZWJQcm9jZXNzVGVzdFJ1bm5lciogdGVzdFJ1
bm5lcjsKKyAgICBXZWJWaWV3VGVzdCogdGVzdDsKK30gRG9tRG9tV2luZG93VGVzdFN0YXR1czsK
Kworc3RhdGljIERvbURvbVdpbmRvd1Rlc3RTdGF0dXMgc3RhdHVzOworCitzdGF0aWMgdm9pZCBz
aWduYWxzTm90aWZ5Q2FsbGJhY2soY29uc3QgZ2NoYXIgKmtleSwgY29uc3QgZ2NoYXIgKnZhbHVl
LCBnY29uc3Rwb2ludGVyKQoreworICAgIGlmIChnX3N0cl9lcXVhbChrZXksICJyZWFkeSIpKSB7
CisgICAgICAgIC8vIFRoZSBkb2N1bWVudCB3YXMgYWxyZWFkeSBsb2FkZWQgaW4gdGhlIHdlYnBy
b2Nlc3MsIGFuZCBpdHMgImxvYWQiCisgICAgICAgIC8vIHNpZ25hbCBjb3VsZG4ndCBiZSBjYXB0
dXJlZCBvbiB0aW1lICh3YXMgaXNzdWVkIGJlZm9yZSB0aGUgdGVzdAorICAgICAgICAvLyBzdGFy
dGVkKS4gV2UgbG9hZCBpdCBhZ2FpbiB0byBmb3JjZSBhIG5ldyAibG9hZCIgc2lnbmFsIGluIHRo
ZQorICAgICAgICAvLyB3ZWJwcm9jZXNzLCB3aGljaCB3aWxsIGJlIGNhcHR1cmVkIHRoaXMgdGlt
ZQorICAgICAgICBzdGF0dXMudGVzdC0+bG9hZEh0bWwoSFRNTF9ET0NVTUVOVCwgMCk7CisgICAg
fQorCisgICAgaWYgKGdfc3RyX2VxdWFsKGtleSwgImxvYWRlZCIpKSB7CisgICAgICAgIHN0YXR1
cy5sb2FkZWQgPSBUUlVFOworICAgICAgICBzdGF0dXMudGVzdC0+c2hvd0luV2luZG93QW5kV2Fp
dFVudGlsTWFwcGVkKCk7CisKKyAgICAgICAgLy8gQ2xpY2sgaW4gYSBrbm93biBsb2NhdGlvbiB3
aGVyZSB0aGUgdGV4dCBpcworICAgICAgICBzdGF0dXMudGVzdC0+Y2xpY2tNb3VzZUJ1dHRvbigy
MCwgMTgsIDEsIDApOworICAgIH0KKworICAgIGlmIChnX3N0cl9lcXVhbChrZXksICJjbGlja2Vk
IikpCisgICAgICAgIHN0YXR1cy5jbGlja2VkID0gVFJVRTsKKworICAgIGlmIChnX3N0cl9lcXVh
bChrZXksICJmaW5pc2giKSkgeworICAgICAgICBzdGF0dXMudGVzdCA9IDA7CisgICAgICAgIHN0
YXR1cy50ZXN0UnVubmVyLT5maW5pc2hUZXN0KHN0YXR1cy5sb2FkZWQgJiYgc3RhdHVzLmNsaWNr
ZWQpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgZGlzcGF0Y2hFdmVudE5vdGlmeUNhbGxiYWNr
KGNvbnN0IGdjaGFyICprZXksIGNvbnN0IGdjaGFyICp2YWx1ZSwgZ2NvbnN0cG9pbnRlcikKK3sK
KyAgICBpZiAoZ19zdHJfZXF1YWwoa2V5LCAicmVhZHkiKSkgeworICAgICAgICAvLyBUaGUgZG9j
dW1lbnQgd2FzIGFscmVhZHkgbG9hZGVkIGluIHRoZSB3ZWJwcm9jZXNzLCBhbmQgaXRzICJsb2Fk
IgorICAgICAgICAvLyBzaWduYWwgY291bGRuJ3QgYmUgY2FwdHVyZWQgb24gdGltZSAod2FzIGlz
c3VlZCBiZWZvcmUgdGhlIHRlc3QKKyAgICAgICAgLy8gc3RhcnRlZCkuIFdlIGxvYWQgaXQgYWdh
aW4gdG8gZm9yY2UgYSBuZXcgImxvYWQiIHNpZ25hbCBpbiB0aGUKKyAgICAgICAgLy8gd2VicHJv
Y2Vzcywgd2hpY2ggd2lsbCBiZSBjYXB0dXJlZCB0aGlzIHRpbWUKKyAgICAgICAgc3RhdHVzLnRl
c3QtPmxvYWRIdG1sKEhUTUxfRE9DVU1FTlQsIDApOworICAgIH0KKworICAgIGlmIChnX3N0cl9l
cXVhbChrZXksICJsb2FkZWQiKSkKKyAgICAgICAgc3RhdHVzLmxvYWRlZCA9IFRSVUU7CisKKyAg
ICBpZiAoZ19zdHJfZXF1YWwoa2V5LCAiY2xpY2tlZCIpKQorICAgICAgICBzdGF0dXMuY2xpY2tl
ZCA9IFRSVUU7CisKKyAgICBpZiAoZ19zdHJfZXF1YWwoa2V5LCAiZmluaXNoIikpIHsKKyAgICAg
ICAgc3RhdHVzLnRlc3QgPSAwOworICAgICAgICBzdGF0dXMudGVzdFJ1bm5lci0+ZmluaXNoVGVz
dChzdGF0dXMubG9hZGVkICYmIHN0YXR1cy5jbGlja2VkKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2
b2lkIHRlc3RXZWJLaXRET01ET01XaW5kb3dTaWduYWxzKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29u
c3Rwb2ludGVyKQoreworICAgIHN0YXR1cy5sb2FkZWQgPSBGQUxTRTsKKyAgICBzdGF0dXMuY2xp
Y2tlZCA9IEZBTFNFOworICAgIHN0YXR1cy50ZXN0ID0gdGVzdDsKKworICAgIHN0YXR1cy50ZXN0
UnVubmVyLT5zZXROb3RpZnlDYWxsYmFjayhHX0NBTExCQUNLKHNpZ25hbHNOb3RpZnlDYWxsYmFj
ayksIDApOworCisgICAgLy8gVGhlIEhUTUwgZG9jdW1lbnQgd2lsbCB3ZSBsb2FkZWQgbGF0ZXIs
IHdoZW4gdGhlIHRlc3QgaXMgInJlYWR5IiBiZWNhdXNlCisgICAgLy8gd2Ugd2FudCB0byB0ZXN0
IHRoZSAibG9hZCIgc2lnbmFsCisKKyAgICBHVmFyaWFudEJ1aWxkZXIgYnVpbGRlcjsKKyAgICBn
X3ZhcmlhbnRfYnVpbGRlcl9pbml0KCZidWlsZGVyLCBHX1ZBUklBTlRfVFlQRV9WQVJESUNUKTsK
KyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoJmJ1aWxkZXIsICJ7c3Z9IiwgInBhZ2VJRCIsIGdf
dmFyaWFudF9uZXdfdWludDY0KHdlYmtpdF93ZWJfdmlld19nZXRfcGFnZV9pZChzdGF0dXMudGVz
dC0+bV93ZWJWaWV3KSkpOworICAgIHN0YXR1cy50ZXN0UnVubmVyLT5ydW5UZXN0QW5kV2FpdCgi
V2ViS2l0RE9NRE9NV2luZG93IiwgInNpZ25hbHMiLCBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQoJmJ1
aWxkZXIpKTsKKyAgICBnX2Fzc2VydChzdGF0dXMudGVzdFJ1bm5lci0+Z2V0VGVzdFJlc3VsdCgp
KTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYktpdERPTURPTVdpbmRvd0Rpc3BhdGNoRXZlbnQo
V2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgc3RhdHVzLmxvYWRlZCA9
IEZBTFNFOworICAgIHN0YXR1cy5jbGlja2VkID0gRkFMU0U7CisgICAgc3RhdHVzLnRlc3QgPSB0
ZXN0OworCisgICAgc3RhdHVzLnRlc3RSdW5uZXItPnNldE5vdGlmeUNhbGxiYWNrKEdfQ0FMTEJB
Q0soZGlzcGF0Y2hFdmVudE5vdGlmeUNhbGxiYWNrKSwgMCk7CisKKyAgICAvLyBUaGUgSFRNTCBk
b2N1bWVudCB3aWxsIHdlIGxvYWRlZCBsYXRlciwgd2hlbiB0aGUgdGVzdCBpcyAicmVhZHkiIGJl
Y2F1c2UKKyAgICAvLyB3ZSB3YW50IHRvIHRlc3QgdGhlICJsb2FkIiBzaWduYWwKKworICAgIEdW
YXJpYW50QnVpbGRlciBidWlsZGVyOworICAgIGdfdmFyaWFudF9idWlsZGVyX2luaXQoJmJ1aWxk
ZXIsIEdfVkFSSUFOVF9UWVBFX1ZBUkRJQ1QpOworICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZCgm
YnVpbGRlciwgIntzdn0iLCAicGFnZUlEIiwgZ192YXJpYW50X25ld191aW50NjQod2Via2l0X3dl
Yl92aWV3X2dldF9wYWdlX2lkKHN0YXR1cy50ZXN0LT5tX3dlYlZpZXcpKSk7CisgICAgc3RhdHVz
LnRlc3RSdW5uZXItPnJ1blRlc3RBbmRXYWl0KCJXZWJLaXRET01ET01XaW5kb3ciLCAiZGlzcGF0
Y2gtZXZlbnQiLCBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQoJmJ1aWxkZXIpKTsKKyAgICBnX2Fzc2Vy
dChzdGF0dXMudGVzdFJ1bm5lci0+Z2V0VGVzdFJlc3VsdCgpKTsKK30KKworc3RhdGljIHZvaWQg
dGVzdFdlYktpdERPTURPTVdpbmRvd0dldENvbXB1dGVkU3R5bGUoV2ViVmlld1Rlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIpCit7CisgICAgc3RhdHVzLmxvYWRlZCA9IEZBTFNFOworICAgIHN0YXR1
cy5jbGlja2VkID0gRkFMU0U7CisgICAgc3RhdHVzLnRlc3QgPSB0ZXN0OworCisgICAgc3RhdGlj
IGNvbnN0IGNoYXIqIHRlc3RIVE1MID0gSFRNTF9ET0NVTUVOVDsKKyAgICBzdGF0dXMudGVzdC0+
bG9hZEh0bWwodGVzdEhUTUwsIDApOworICAgIHN0YXR1cy50ZXN0LT53YWl0VW50aWxMb2FkRmlu
aXNoZWQoKTsKKworICAgIEdWYXJpYW50QnVpbGRlciBidWlsZGVyOworICAgIGdfdmFyaWFudF9i
dWlsZGVyX2luaXQoJmJ1aWxkZXIsIEdfVkFSSUFOVF9UWVBFX1ZBUkRJQ1QpOworICAgIGdfdmFy
aWFudF9idWlsZGVyX2FkZCgmYnVpbGRlciwgIntzdn0iLCAicGFnZUlEIiwgZ192YXJpYW50X25l
d191aW50NjQod2Via2l0X3dlYl92aWV3X2dldF9wYWdlX2lkKHN0YXR1cy50ZXN0LT5tX3dlYlZp
ZXcpKSk7CisgICAgZ19hc3NlcnQoc3RhdHVzLnRlc3RSdW5uZXItPnJ1blRlc3QoIldlYktpdERP
TURPTVdpbmRvdyIsICJnZXQtY29tcHV0ZWQtc3R5bGUiLCBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQo
JmJ1aWxkZXIpKSk7Cit9CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICBzdGF0dXMudGVzdFJ1
bm5lciA9IG5ldyBXZWJQcm9jZXNzVGVzdFJ1bm5lcigpOworICAgIHdlYmtpdF93ZWJfY29udGV4
dF9zZXRfd2ViX2V4dGVuc2lvbnNfZGlyZWN0b3J5KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVm
YXVsdCgpLCBXRUJLSVRfVEVTVF9XRUJfRVhURU5TSU9OU19ESVIpOworCisgICAgV2ViVmlld1Rl
c3Q6OmFkZCgiV2ViS2l0RE9NRE9NV2luZG93IiwgInNpZ25hbHMiLCB0ZXN0V2ViS2l0RE9NRE9N
V2luZG93U2lnbmFscyk7CisgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0RE9NRE9NV2luZG93
IiwgImRpc3BhdGNoLWV2ZW50IiwgdGVzdFdlYktpdERPTURPTVdpbmRvd0Rpc3BhdGNoRXZlbnQp
OworICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdERPTURPTVdpbmRvdyIsICJnZXQtY29tcHV0
ZWQtc3R5bGUiLCB0ZXN0V2ViS2l0RE9NRE9NV2luZG93R2V0Q29tcHV0ZWRTdHlsZSk7Cit9CisK
K3ZvaWQgYWZ0ZXJBbGwoKQoreworICAgIGRlbGV0ZSBzdGF0dXMudGVzdFJ1bm5lcjsKK30KZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0RE9NTm9k
ZS5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdERPTU5vZGUu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMzIwNzcKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdERPTU5v
ZGUuY3BwCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSWdhbGlh
IFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIldlYlByb2Nlc3NUZXN0UnVu
bmVyLmgiCisjaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+Cisj
aW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+CisKK3N0YXRpYyBXZWJQcm9jZXNzVGVzdFJ1bm5l
ciogdGVzdFJ1bm5lcjsKKworc3RhdGljIHZvaWQgdGVzdFdlYktpdERPTU5vZGVIaWVyYXJjaHlO
YXZpZ2F0aW9uKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHN0YXRp
YyBjb25zdCBjaGFyKiB0ZXN0SFRNTCA9ICI8aHRtbD48aGVhZD48dGl0bGU+VGhpcyBpcyB0aGUg
dGl0bGU8L3RpdGxlPjwvaGVhZD48Ym9keT48cD4xPC9wPjxwPjI8L3A+PHA+MzwvcD48L2JvZHk+
PC9odG1sPiI7CisgICAgdGVzdC0+bG9hZEh0bWwodGVzdEhUTUwsIDApOworICAgIHRlc3QtPndh
aXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgR1ZhcmlhbnRCdWlsZGVyIGJ1aWxkZXI7Cisg
ICAgZ192YXJpYW50X2J1aWxkZXJfaW5pdCgmYnVpbGRlciwgR19WQVJJQU5UX1RZUEVfVkFSRElD
VCk7CisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKCZidWlsZGVyLCAie3N2fSIsICJwYWdlSUQi
LCBnX3ZhcmlhbnRfbmV3X3VpbnQ2NCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3BhZ2VfaWQodGVzdC0+
bV93ZWJWaWV3KSkpOworICAgIGdfYXNzZXJ0KHRlc3RSdW5uZXItPnJ1blRlc3QoIldlYktpdERP
TU5vZGUiLCAiaGllcmFyY2h5LW5hdmlnYXRpb24iLCBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQoJmJ1
aWxkZXIpKSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJLaXRET01Ob2RlSW5zZXJ0aW9uKFdl
YlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFy
KiB0ZXN0SFRNTCA9ICI8aHRtbD48Ym9keT48L2JvZHk+PC9odG1sPiI7CisgICAgdGVzdC0+bG9h
ZEh0bWwodGVzdEhUTUwsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwor
CisgICAgR1ZhcmlhbnRCdWlsZGVyIGJ1aWxkZXI7CisgICAgZ192YXJpYW50X2J1aWxkZXJfaW5p
dCgmYnVpbGRlciwgR19WQVJJQU5UX1RZUEVfVkFSRElDVCk7CisgICAgZ192YXJpYW50X2J1aWxk
ZXJfYWRkKCZidWlsZGVyLCAie3N2fSIsICJwYWdlSUQiLCBnX3ZhcmlhbnRfbmV3X3VpbnQ2NCh3
ZWJraXRfd2ViX3ZpZXdfZ2V0X3BhZ2VfaWQodGVzdC0+bV93ZWJWaWV3KSkpOworICAgIGdfYXNz
ZXJ0KHRlc3RSdW5uZXItPnJ1blRlc3QoIldlYktpdERPTU5vZGUiLCAiaW5zZXJ0aW9uIiwgZ192
YXJpYW50X2J1aWxkZXJfZW5kKCZidWlsZGVyKSkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2Vi
S2l0RE9NTm9kZVRhZ05hbWVzKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQorewor
ICAgIHN0YXRpYyBjb25zdCBjaGFyKiB0ZXN0SFRNTCA9ICI8aHRtbD48aGVhZD48L2hlYWQ+PGJv
ZHk+IgorICAgICAgICAiPHZpZGVvIGlkPSd2aWRlbycgcHJlbG9hZD0nbm9uZSc+IgorICAgICAg
ICAiICAgIDxzb3VyY2Ugc3JjPSdtb3ZpZS5vZ2cnIHR5cGU9J3ZpZGVvL29nZyc+IgorICAgICAg
ICAiICAgICAgICBZb3VyIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgdmlkZW8gdGFnLiIK
KyAgICAgICAgIjwvdmlkZW8+IgorICAgICAgICAiPHZpZGVvIGlkPSd2aWRlbzInIHByZWxvYWQ9
J25vbmUnPiIKKyAgICAgICAgIiAgICAgPHNvdXJjZSBzcmM9J21vdmllLm9nZycgdHlwZT0ndmlk
ZW8vb2dnJz4iCisgICAgICAgICIgICAgICAgIFlvdXIgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0
IHRoZSB2aWRlbyB0YWcuIgorICAgICAgICAiPC92aWRlbz4iCisgICAgICAgICI8aW5wdXQgdHlw
ZT0naGlkZGVuJyBpZD0ndGVzdCcgbmFtZT0nZmluaXNoJyB2YWx1ZT0nZmFsc2UnPjwvYm9keT48
L2h0bWw+IjsKKyAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0SFRNTCwgMCk7CisgICAgdGVzdC0+d2Fp
dFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBHVmFyaWFudEJ1aWxkZXIgYnVpbGRlcjsKKyAg
ICBnX3ZhcmlhbnRfYnVpbGRlcl9pbml0KCZidWlsZGVyLCBHX1ZBUklBTlRfVFlQRV9WQVJESUNU
KTsKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoJmJ1aWxkZXIsICJ7c3Z9IiwgInBhZ2VJRCIs
IGdfdmFyaWFudF9uZXdfdWludDY0KHdlYmtpdF93ZWJfdmlld19nZXRfcGFnZV9pZCh0ZXN0LT5t
X3dlYlZpZXcpKSk7CisgICAgZ19hc3NlcnQodGVzdFJ1bm5lci0+cnVuVGVzdCgiV2ViS2l0RE9N
Tm9kZSIsICJ0YWctbmFtZXMiLCBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQoJmJ1aWxkZXIpKSk7Cit9
CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICB0ZXN0UnVubmVyID0gbmV3IFdlYlByb2Nlc3NU
ZXN0UnVubmVyKCk7CisgICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF93ZWJfZXh0ZW5zaW9uc19k
aXJlY3Rvcnkod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCksIFdFQktJVF9URVNUX1dF
Ql9FWFRFTlNJT05TX0RJUik7CisKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRET01Ob2Rl
IiwgImhpZXJhcmNoeS1uYXZpZ2F0aW9uIiwgdGVzdFdlYktpdERPTU5vZGVIaWVyYXJjaHlOYXZp
Z2F0aW9uKTsKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRET01Ob2RlIiwgImluc2VydGlv
biIsIHRlc3RXZWJLaXRET01Ob2RlSW5zZXJ0aW9uKTsKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJX
ZWJLaXRET01Ob2RlIiwgInRhZy1uYW1lcyIsIHRlc3RXZWJLaXRET01Ob2RlVGFnTmFtZXMpOwor
fQorCit2b2lkIGFmdGVyQWxsKCkKK3sKKyAgICBkZWxldGUgdGVzdFJ1bm5lcjsKK30KZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0RG93bmxvYWRz
LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0RG93bmxvYWRz
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTE1OTkwCi0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3REb3du
bG9hZHMuY3BwCkBAIC0wLDAgKzEsNTIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEln
YWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIldlYktpdFRlc3RTZXJ2
ZXIuaCIKKyNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgorI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+
CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgorI2luY2x1
ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSA8
d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwor
c3RhdGljIGNoYXIqIGtUZW1wRGlyZWN0b3J5OworCitjbGFzcyBEb3dubG9hZFRlc3Q6IHB1Ymxp
YyBUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKERvd25sb2FkVGVz
dCk7CisKKyAgICBlbnVtIERvd25sb2FkRXZlbnQgeworICAgICAgICBTdGFydGVkLAorICAgICAg
ICBSZWNlaXZlZFJlc3BvbnNlLAorICAgICAgICBDcmVhdGVkRGVzdGluYXRpb24sCisgICAgICAg
IFJlY2VpdmVkRGF0YSwKKyAgICAgICAgRmFpbGVkLAorICAgICAgICBGaW5pc2hlZAorICAgIH07
CisKKyAgICBzdGF0aWMgdm9pZCByZWNlaXZlZFJlc3BvbnNlQ2FsbGJhY2soV2ViS2l0RG93bmxv
YWQqIGRvd25sb2FkLCBHUGFyYW1TcGVjKiwgRG93bmxvYWRUZXN0KiB0ZXN0KQorICAgIHsKKyAg
ICAgICAgZ19hc3NlcnQod2Via2l0X2Rvd25sb2FkX2dldF9yZXNwb25zZShkb3dubG9hZCkpOwor
ICAgICAgICB0ZXN0LT5yZWNlaXZlZFJlc3BvbnNlKGRvd25sb2FkKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgZ2Jvb2xlYW4gY3JlYXRlZERlc3RpbmF0aW9uQ2FsbGJhY2soV2ViS2l0RG93bmxvYWQq
IGRvd25sb2FkLCBjb25zdCBnY2hhciogZGVzdGluYXRpb24sIERvd25sb2FkVGVzdCogdGVzdCkK
KyAgICB7CisgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9kb3dubG9hZF9nZXRfZGVzdGluYXRpb24o
ZG93bmxvYWQpKTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9kb3dubG9hZF9nZXRf
ZGVzdGluYXRpb24oZG93bmxvYWQpLCA9PSwgZGVzdGluYXRpb24pOworICAgICAgICB0ZXN0LT5j
cmVhdGVkRGVzdGluYXRpb24oZG93bmxvYWQsIGRlc3RpbmF0aW9uKTsKKyAgICAgICAgcmV0dXJu
IFRSVUU7CisgICAgfQorCisgICAgc3RhdGljIGdib29sZWFuIHJlY2VpdmVkRGF0YUNhbGxiYWNr
KFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgZ3VpbnQ2NCBkYXRhTGVuZ3RoLCBEb3dubG9hZFRl
c3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT5yZWNlaXZlZERhdGEoZG93bmxvYWQsIGRh
dGFMZW5ndGgpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jv
b2xlYW4gZmluaXNoZWRDYWxsYmFjayhXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIERvd25sb2Fk
VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPmZpbmlzaGVkKGRvd25sb2FkKTsKKyAg
ICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgc3RhdGljIGdib29sZWFuIGZhaWxlZENh
bGxiYWNrKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgR0Vycm9yKiBlcnJvciwgRG93bmxvYWRU
ZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQoZXJyb3IpOworICAgICAgICB0ZXN0
LT5mYWlsZWQoZG93bmxvYWQsIGVycm9yKTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQor
CisgICAgc3RhdGljIGdib29sZWFuIGRlY2lkZURlc3RpbmF0aW9uQ2FsbGJhY2soV2ViS2l0RG93
bmxvYWQqIGRvd25sb2FkLCBjb25zdCBnY2hhciogc3VnZ2VzdGVkRmlsZW5hbWUsIERvd25sb2Fk
VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KHN1Z2dlc3RlZEZpbGVuYW1lKTsK
KyAgICAgICAgdGVzdC0+ZGVjaWRlRGVzdGluYXRpb24oZG93bmxvYWQsIHN1Z2dlc3RlZEZpbGVu
YW1lKTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZG93
bmxvYWRTdGFydGVkQ2FsbGJhY2soV2ViS2l0V2ViQ29udGV4dCogY29udGV4dCwgV2ViS2l0RG93
bmxvYWQqIGRvd25sb2FkLCBEb3dubG9hZFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICBnX2Fz
c2VydCh3ZWJraXRfZG93bmxvYWRfZ2V0X3JlcXVlc3QoZG93bmxvYWQpKTsKKyAgICAgICAgdGVz
dC0+c3RhcnRlZChkb3dubG9hZCk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoZG93bmxvYWQs
ICJub3RpZnk6OnJlc3BvbnNlIiwgR19DQUxMQkFDSyhyZWNlaXZlZFJlc3BvbnNlQ2FsbGJhY2sp
LCB0ZXN0KTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChkb3dubG9hZCwgImNyZWF0ZWQtZGVz
dGluYXRpb24iLCBHX0NBTExCQUNLKGNyZWF0ZWREZXN0aW5hdGlvbkNhbGxiYWNrKSwgdGVzdCk7
CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoZG93bmxvYWQsICJyZWNlaXZlZC1kYXRhIiwgR19D
QUxMQkFDSyhyZWNlaXZlZERhdGFDYWxsYmFjayksIHRlc3QpOworICAgICAgICBnX3NpZ25hbF9j
b25uZWN0KGRvd25sb2FkLCAiZmluaXNoZWQiLCBHX0NBTExCQUNLKGZpbmlzaGVkQ2FsbGJhY2sp
LCB0ZXN0KTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChkb3dubG9hZCwgImZhaWxlZCIsIEdf
Q0FMTEJBQ0soZmFpbGVkQ2FsbGJhY2spLCB0ZXN0KTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVj
dChkb3dubG9hZCwgImRlY2lkZS1kZXN0aW5hdGlvbiIsIEdfQ0FMTEJBQ0soZGVjaWRlRGVzdGlu
YXRpb25DYWxsYmFjayksIHRlc3QpOworICAgIH0KKworICAgIERvd25sb2FkVGVzdCgpCisgICAg
ICAgIDogbV93ZWJDb250ZXh0KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpKQorICAg
ICAgICAsIG1fbWFpbkxvb3AoZ19tYWluX2xvb3BfbmV3KDAsIFRSVUUpKQorICAgICAgICAsIG1f
ZG93bmxvYWRTaXplKDApCisgICAgeworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViQ29u
dGV4dCwgImRvd25sb2FkLXN0YXJ0ZWQiLCBHX0NBTExCQUNLKGRvd25sb2FkU3RhcnRlZENhbGxi
YWNrKSwgdGhpcyk7CisgICAgfQorCisgICAgfkRvd25sb2FkVGVzdCgpCisgICAgeworICAgICAg
ICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV93ZWJDb250ZXh0LCBHX1NJ
R05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKKyAgICAgICAgZ19tYWluX2xvb3Bf
dW5yZWYobV9tYWluTG9vcCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHN0YXJ0ZWQoV2Vi
S2l0RG93bmxvYWQqIGRvd25sb2FkKQorICAgIHsKKyAgICAgICAgbV9kb3dubG9hZEV2ZW50cy5h
cHBlbmQoU3RhcnRlZCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHJlY2VpdmVkUmVzcG9u
c2UoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQorICAgIHsKKyAgICAgICAgbV9kb3dubG9hZEV2
ZW50cy5hcHBlbmQoUmVjZWl2ZWRSZXNwb25zZSk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lk
IGNyZWF0ZWREZXN0aW5hdGlvbihXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IGNoYXIq
IGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAgbV9kb3dubG9hZEV2ZW50cy5hcHBlbmQoQ3Jl
YXRlZERlc3RpbmF0aW9uKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWREYXRh
KFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgZ3VpbnQ2NCBkYXRhTGVuZ3RoKQorICAgIHsKKyAg
ICAgICAgbV9kb3dubG9hZFNpemUgKz0gZGF0YUxlbmd0aDsKKyAgICAgICAgaWYgKCFtX2Rvd25s
b2FkRXZlbnRzLmNvbnRhaW5zKFJlY2VpdmVkRGF0YSkpCisgICAgICAgICAgICBtX2Rvd25sb2Fk
RXZlbnRzLmFwcGVuZChSZWNlaXZlZERhdGEpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBm
aW5pc2hlZChXZWJLaXREb3dubG9hZCogZG93bmxvYWQpCisgICAgeworICAgICAgICBnX2Fzc2Vy
dF9jbXB1aW50KG1fZG93bmxvYWRTaXplLCA9PSwgd2Via2l0X2Rvd25sb2FkX2dldF9yZWNlaXZl
ZF9kYXRhX2xlbmd0aChkb3dubG9hZCkpOworICAgICAgICBtX2Rvd25sb2FkRXZlbnRzLmFwcGVu
ZChGaW5pc2hlZCk7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7CisgICAg
fQorCisgICAgdmlydHVhbCB2b2lkIGZhaWxlZChXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIEdF
cnJvciogZXJyb3IpCisgICAgeworICAgICAgICBtX2Rvd25sb2FkRXZlbnRzLmFwcGVuZChGYWls
ZWQpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkZWNpZGVEZXN0aW5hdGlvbihXZWJLaXRE
b3dubG9hZCogZG93bmxvYWQsIGNvbnN0IGdjaGFyKiBzdWdnZXN0ZWRGaWxlbmFtZSkKKyAgICB7
CisgICAgICAgIEdPd25QdHI8Y2hhcj4gZGVzdGluYXRpb24oZ19idWlsZF9maWxlbmFtZShrVGVt
cERpcmVjdG9yeSwgc3VnZ2VzdGVkRmlsZW5hbWUsIE5VTEwpKTsKKyAgICAgICAgR093blB0cjxj
aGFyPiBkZXN0aW5hdGlvblVSSShnX2ZpbGVuYW1lX3RvX3VyaShkZXN0aW5hdGlvbi5nZXQoKSwg
MCwgMCkpOworICAgICAgICB3ZWJraXRfZG93bmxvYWRfc2V0X2Rlc3RpbmF0aW9uKGRvd25sb2Fk
LCBkZXN0aW5hdGlvblVSSS5nZXQoKSk7CisgICAgfQorCisgICAgV2ViS2l0RG93bmxvYWQqIGRv
d25sb2FkVVJJQW5kV2FpdFVudGlsRmluaXNoZXMoY29uc3QgQ1N0cmluZyYgcmVxdWVzdFVSSSkK
KyAgICB7CisgICAgICAgIFdlYktpdERvd25sb2FkKiBkb3dubG9hZCA9IHdlYmtpdF93ZWJfY29u
dGV4dF9kb3dubG9hZF91cmkobV93ZWJDb250ZXh0LCByZXF1ZXN0VVJJLmRhdGEoKSk7CisgICAg
ICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QoZG93bmxv
YWQpKTsKKworICAgICAgICBXZWJLaXRVUklSZXF1ZXN0KiByZXF1ZXN0ID0gd2Via2l0X2Rvd25s
b2FkX2dldF9yZXF1ZXN0KGRvd25sb2FkKTsKKyAgICAgICAgZ19hc3NlcnQocmVxdWVzdCk7Cisg
ICAgICAgIEFTU0VSVF9DTVBfQ1NUUklORyh3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3VyaShyZXF1
ZXN0KSwgPT0sIHJlcXVlc3RVUkkpOworCisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5M
b29wKTsKKworICAgICAgICByZXR1cm4gZG93bmxvYWQ7CisgICAgfQorCisgICAgdm9pZCBjaGVj
a0Rlc3RpbmF0aW9uQW5kRGVsZXRlRmlsZShXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0
IGNoYXIqIGV4cGVjdGVkTmFtZSkKKyAgICB7CisgICAgICAgIGlmICghd2Via2l0X2Rvd25sb2Fk
X2dldF9kZXN0aW5hdGlvbihkb3dubG9hZCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IEdSZWZQdHI8R0ZpbGU+IGRlc3RGaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3VyaSh3
ZWJraXRfZG93bmxvYWRfZ2V0X2Rlc3RpbmF0aW9uKGRvd25sb2FkKSkpOworICAgICAgICBHT3du
UHRyPGNoYXI+IGRlc3RCYXNlbmFtZShnX2ZpbGVfZ2V0X2Jhc2VuYW1lKGRlc3RGaWxlLmdldCgp
KSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cihkZXN0QmFzZW5hbWUuZ2V0KCksID09LCBleHBl
Y3RlZE5hbWUpOworCisgICAgICAgIGdfZmlsZV9kZWxldGUoZGVzdEZpbGUuZ2V0KCksIDAsIDAp
OworICAgIH0KKworICAgIFdlYktpdFdlYkNvbnRleHQqIG1fd2ViQ29udGV4dDsKKyAgICBHTWFp
bkxvb3AqIG1fbWFpbkxvb3A7CisgICAgVmVjdG9yPERvd25sb2FkRXZlbnQ+IG1fZG93bmxvYWRF
dmVudHM7CisgICAgZ3VpbnQ2NCBtX2Rvd25sb2FkU2l6ZTsKK307CisKK3N0YXRpYyB2b2lkIHRl
c3REb3dubG9hZExvY2FsRmlsZShEb3dubG9hZFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7
CisgICAgR093blB0cjxjaGFyPiBzb3VyY2VQYXRoKGdfYnVpbGRfZmlsZW5hbWUoVGVzdDo6Z2V0
V2ViS2l0MVRlc3RSZXNvdWNlc0RpcigpLmRhdGEoKSwgInRlc3QucGRmIiwgTlVMTCkpOworICAg
IEdSZWZQdHI8R0ZpbGU+IHNvdXJjZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKHNv
dXJjZVBhdGguZ2V0KCkpKTsKKyAgICBHUmVmUHRyPEdGaWxlSW5mbz4gc291cmNlSW5mbyA9IGFk
b3B0R1JlZihnX2ZpbGVfcXVlcnlfaW5mbyhzb3VyY2UuZ2V0KCksIEdfRklMRV9BVFRSSUJVVEVf
U1RBTkRBUkRfU0laRSwgc3RhdGljX2Nhc3Q8R0ZpbGVRdWVyeUluZm9GbGFncz4oMCksIDAsIDAp
KTsKKyAgICBHT3duUHRyPGNoYXI+IHNvdXJjZVVSSShnX2ZpbGVfZ2V0X3VyaShzb3VyY2UuZ2V0
KCkpKTsKKyAgICBHUmVmUHRyPFdlYktpdERvd25sb2FkPiBkb3dubG9hZCA9IGFkb3B0R1JlZih0
ZXN0LT5kb3dubG9hZFVSSUFuZFdhaXRVbnRpbEZpbmlzaGVzKHNvdXJjZVVSSS5nZXQoKSkpOwor
ICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG93bmxvYWRfZ2V0X3dlYl92aWV3KGRvd25sb2FkLmdldCgp
KSk7CisKKyAgICBWZWN0b3I8RG93bmxvYWRUZXN0OjpEb3dubG9hZEV2ZW50PiYgZXZlbnRzID0g
dGVzdC0+bV9kb3dubG9hZEV2ZW50czsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUo
KSwgPT0sIDUpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBEb3dubG9hZFRl
c3Q6OlN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBEb3dubG9h
ZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0s
ID09LCBEb3dubG9hZFRlc3Q6OkNyZWF0ZWREZXN0aW5hdGlvbik7CisgICAgZ19hc3NlcnRfY21w
aW50KGV2ZW50c1szXSwgPT0sIERvd25sb2FkVGVzdDo6UmVjZWl2ZWREYXRhKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoZXZlbnRzWzRdLCA9PSwgRG93bmxvYWRUZXN0OjpGaW5pc2hlZCk7CisKKyAg
ICBXZWJLaXRVUklSZXF1ZXN0KiByZXF1ZXN0ID0gd2Via2l0X2Rvd25sb2FkX2dldF9yZXF1ZXN0
KGRvd25sb2FkLmdldCgpKTsKKyAgICBnX2Fzc2VydChyZXF1ZXN0KTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIod2Via2l0X3VyaV9yZXF1ZXN0X2dldF91cmkocmVxdWVzdCksID09LCBzb3VyY2VVUkku
Z2V0KCkpOworCisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fZG93bmxvYWRTaXplLCA9PSwg
Z19maWxlX2luZm9fZ2V0X3NpemUoc291cmNlSW5mby5nZXQoKSkpOworICAgIGdfYXNzZXJ0KHdl
YmtpdF9kb3dubG9hZF9nZXRfZGVzdGluYXRpb24oZG93bmxvYWQuZ2V0KCkpKTsKKyAgICBnX2Fz
c2VydF9jbXBmbG9hdCh3ZWJraXRfZG93bmxvYWRfZ2V0X2VzdGltYXRlZF9wcm9ncmVzcyhkb3du
bG9hZC5nZXQoKSksID09LCAxKTsKKyAgICB0ZXN0LT5jaGVja0Rlc3RpbmF0aW9uQW5kRGVsZXRl
RmlsZShkb3dubG9hZC5nZXQoKSwgInRlc3QucGRmIik7Cit9CisKK2NsYXNzIERvd25sb2FkRXJy
b3JUZXN0OiBwdWJsaWMgRG93bmxvYWRUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVT
VF9GSVhUVVJFKERvd25sb2FkRXJyb3JUZXN0KTsKKworICAgIERvd25sb2FkRXJyb3JUZXN0KCkK
KyAgICAgICAgOiBtX2V4cGVjdGVkRXJyb3IoV0VCS0lUX0RPV05MT0FEX0VSUk9SX05FVFdPUksp
CisgICAgeworICAgIH0KKworICAgIHZvaWQgcmVjZWl2ZWRSZXNwb25zZShXZWJLaXREb3dubG9h
ZCogZG93bmxvYWQpCisgICAgeworICAgICAgICBEb3dubG9hZFRlc3Q6OnJlY2VpdmVkUmVzcG9u
c2UoZG93bmxvYWQpOworICAgICAgICBpZiAobV9leHBlY3RlZEVycm9yID09IFdFQktJVF9ET1dO
TE9BRF9FUlJPUl9DQU5DRUxMRURfQllfVVNFUikKKyAgICAgICAgICAgIHdlYmtpdF9kb3dubG9h
ZF9jYW5jZWwoZG93bmxvYWQpOworICAgIH0KKworICAgIHZvaWQgY3JlYXRlZERlc3RpbmF0aW9u
KFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgY29uc3QgY2hhciogZGVzdGluYXRpb24pCisgICAg
eworICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgIH0KKworICAgIHZvaWQgZmFp
bGVkKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgR0Vycm9yKiBlcnJvcikKKyAgICB7CisgICAg
ICAgIGdfYXNzZXJ0KGdfZXJyb3JfbWF0Y2hlcyhlcnJvciwgV0VCS0lUX0RPV05MT0FEX0VSUk9S
LCBtX2V4cGVjdGVkRXJyb3IpKTsKKyAgICAgICAgRG93bmxvYWRUZXN0OjpmYWlsZWQoZG93bmxv
YWQsIGVycm9yKTsKKyAgICB9CisKKyAgICB2b2lkIGRlY2lkZURlc3RpbmF0aW9uKFdlYktpdERv
d25sb2FkKiBkb3dubG9hZCwgY29uc3QgZ2NoYXIqIHN1Z2dlc3RlZEZpbGVuYW1lKQorICAgIHsK
KyAgICAgICAgaWYgKG1fZXhwZWN0ZWRFcnJvciAhPSBXRUJLSVRfRE9XTkxPQURfRVJST1JfREVT
VElOQVRJT04pIHsKKyAgICAgICAgICAgIERvd25sb2FkVGVzdDo6ZGVjaWRlRGVzdGluYXRpb24o
ZG93bmxvYWQsIHN1Z2dlc3RlZEZpbGVuYW1lKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICB3ZWJraXRfZG93bmxvYWRfc2V0X2Rlc3RpbmF0aW9uKGRvd25sb2FkLCAi
ZmlsZTovLy9mb28vYmFyIik7CisgICAgfQorCisgICAgV2ViS2l0RG93bmxvYWRFcnJvciBtX2V4
cGVjdGVkRXJyb3I7Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0RG93bmxvYWRMb2NhbEZpbGVFcnJv
cihEb3dubG9hZEVycm9yVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5t
X2V4cGVjdGVkRXJyb3IgPSBXRUJLSVRfRE9XTkxPQURfRVJST1JfTkVUV09SSzsKKyAgICBHUmVm
UHRyPFdlYktpdERvd25sb2FkPiBkb3dubG9hZCA9IGFkb3B0R1JlZih0ZXN0LT5kb3dubG9hZFVS
SUFuZFdhaXRVbnRpbEZpbmlzaGVzKCJmaWxlOi8vL2Zvby9iYXIiKSk7CisgICAgZ19hc3NlcnQo
IXdlYmtpdF9kb3dubG9hZF9nZXRfd2ViX3ZpZXcoZG93bmxvYWQuZ2V0KCkpKTsKKworICAgIFZl
Y3RvcjxEb3dubG9hZFRlc3Q6OkRvd25sb2FkRXZlbnQ+JiBldmVudHMgPSB0ZXN0LT5tX2Rvd25s
b2FkRXZlbnRzOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgMyk7Cisg
ICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIERvd25sb2FkVGVzdDo6U3RhcnRlZCk7
CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIERvd25sb2FkVGVzdDo6RmFpbGVk
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgRG93bmxvYWRUZXN0OjpGaW5p
c2hlZCk7CisgICAgZXZlbnRzLmNsZWFyKCk7CisgICAgZ19hc3NlcnRfY21wZmxvYXQod2Via2l0
X2Rvd25sb2FkX2dldF9lc3RpbWF0ZWRfcHJvZ3Jlc3MoZG93bmxvYWQuZ2V0KCkpLCA8LCAxKTsK
KworICAgIHRlc3QtPm1fZXhwZWN0ZWRFcnJvciA9IFdFQktJVF9ET1dOTE9BRF9FUlJPUl9ERVNU
SU5BVElPTjsKKyAgICBHT3duUHRyPGNoYXI+IHBhdGgoZ19idWlsZF9maWxlbmFtZShUZXN0Ojpn
ZXRXZWJLaXQxVGVzdFJlc291Y2VzRGlyKCkuZGF0YSgpLCAidGVzdC5wZGYiLCBOVUxMKSk7Cisg
ICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKHBh
dGguZ2V0KCkpKTsKKyAgICBHT3duUHRyPGNoYXI+IHVyaShnX2ZpbGVfZ2V0X3VyaShmaWxlLmdl
dCgpKSk7CisgICAgZG93bmxvYWQgPSBhZG9wdEdSZWYodGVzdC0+ZG93bmxvYWRVUklBbmRXYWl0
VW50aWxGaW5pc2hlcyh1cmkuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2Rvd25sb2Fk
X2dldF93ZWJfdmlldyhkb3dubG9hZC5nZXQoKSkpOworCisgICAgZ19hc3NlcnRfY21waW50KGV2
ZW50cy5zaXplKCksID09LCA0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwg
RG93bmxvYWRUZXN0OjpTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9
PSwgRG93bmxvYWRUZXN0OjpSZWNlaXZlZFJlc3BvbnNlKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
ZXZlbnRzWzJdLCA9PSwgRG93bmxvYWRUZXN0OjpGYWlsZWQpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHNbM10sID09LCBEb3dubG9hZFRlc3Q6OkZpbmlzaGVkKTsKKyAgICBldmVudHMuY2xl
YXIoKTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdCh3ZWJraXRfZG93bmxvYWRfZ2V0X2VzdGltYXRl
ZF9wcm9ncmVzcyhkb3dubG9hZC5nZXQoKSksIDwsIDEpOworICAgIHRlc3QtPmNoZWNrRGVzdGlu
YXRpb25BbmREZWxldGVGaWxlKGRvd25sb2FkLmdldCgpLCAiYmFyIik7CisKKyAgICB0ZXN0LT5t
X2V4cGVjdGVkRXJyb3IgPSBXRUJLSVRfRE9XTkxPQURfRVJST1JfQ0FOQ0VMTEVEX0JZX1VTRVI7
CisgICAgZG93bmxvYWQgPSBhZG9wdEdSZWYodGVzdC0+ZG93bmxvYWRVUklBbmRXYWl0VW50aWxG
aW5pc2hlcyh1cmkuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2Rvd25sb2FkX2dldF93
ZWJfdmlldyhkb3dubG9hZC5nZXQoKSkpOworCisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5z
aXplKCksID09LCA0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgRG93bmxv
YWRUZXN0OjpTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgRG93
bmxvYWRUZXN0OjpSZWNlaXZlZFJlc3BvbnNlKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRz
WzJdLCA9PSwgRG93bmxvYWRUZXN0OjpGYWlsZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVu
dHNbM10sID09LCBEb3dubG9hZFRlc3Q6OkZpbmlzaGVkKTsKKyAgICBldmVudHMuY2xlYXIoKTsK
KyAgICBnX2Fzc2VydF9jbXBmbG9hdCh3ZWJraXRfZG93bmxvYWRfZ2V0X2VzdGltYXRlZF9wcm9n
cmVzcyhkb3dubG9hZC5nZXQoKSksIDwsIDEpOworICAgIHRlc3QtPmNoZWNrRGVzdGluYXRpb25B
bmREZWxldGVGaWxlKGRvd25sb2FkLmdldCgpLCAidGVzdC5wZGYiKTsKK30KKworc3RhdGljIFdl
YktpdFRlc3RTZXJ2ZXIqIGtTZXJ2ZXI7CitzdGF0aWMgY29uc3QgY2hhcioga1NlcnZlclN1Z2dl
c3RlZEZpbGVuYW1lID0gIndlYmtpdC1kb3dubG9hZGVkLWZpbGUiOworCitzdGF0aWMgdm9pZCBz
ZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBj
b25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiwgU291cENsaWVudENvbnRleHQqLCBncG9pbnRl
cikKK3sKKyAgICBpZiAobWVzc2FnZS0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgeworICAg
ICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfSU1Q
TEVNRU5URUQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgR093blB0cjxjaGFyPiBm
aWxlUGF0aChnX2J1aWxkX2ZpbGVuYW1lKFRlc3Q6OmdldFdlYktpdDFUZXN0UmVzb3VjZXNEaXIo
KS5kYXRhKCksIHBhdGgsIE5VTEwpKTsKKyAgICBjaGFyKiBjb250ZW50czsKKyAgICBnc2l6ZSBj
b250ZW50c0xlbmd0aDsKKyAgICBpZiAoIWdfZmlsZV9nZXRfY29udGVudHMoZmlsZVBhdGguZ2V0
KCksICZjb250ZW50cywgJmNvbnRlbnRzTGVuZ3RoLCAwKSkgeworICAgICAgICBzb3VwX21lc3Nh
Z2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfRk9VTkQpOworICAgICAgICBz
b3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2Us
IFNPVVBfU1RBVFVTX09LKTsKKworICAgIEdPd25QdHI8Y2hhcj4gY29udGVudERpc3Bvc2l0aW9u
KGdfc3RyZHVwX3ByaW50ZigiZmlsZW5hbWU9JXMiLCBrU2VydmVyU3VnZ2VzdGVkRmlsZW5hbWUp
KTsKKyAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVh
ZGVycywgIkNvbnRlbnQtRGlzcG9zaXRpb24iLCBjb250ZW50RGlzcG9zaXRpb24uZ2V0KCkpOwor
ICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQ
X01FTU9SWV9UQUtFLCBjb250ZW50cywgY29udGVudHNMZW5ndGgpOworCisgICAgc291cF9tZXNz
YWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7Cit9CisKK3N0YXRpYyB2
b2lkIHRlc3REb3dubG9hZFJlbW90ZUZpbGUoRG93bmxvYWRUZXN0KiB0ZXN0LCBnY29uc3Rwb2lu
dGVyKQoreworICAgIEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkID0gYWRvcHRHUmVm
KHRlc3QtPmRvd25sb2FkVVJJQW5kV2FpdFVudGlsRmluaXNoZXMoa1NlcnZlci0+Z2V0VVJJRm9y
UGF0aCgiL3Rlc3QucGRmIikpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2Rvd25sb2FkX2dldF93
ZWJfdmlldyhkb3dubG9hZC5nZXQoKSkpOworCisgICAgVmVjdG9yPERvd25sb2FkVGVzdDo6RG93
bmxvYWRFdmVudD4mIGV2ZW50cyA9IHRlc3QtPm1fZG93bmxvYWRFdmVudHM7CisgICAgZ19hc3Nl
cnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCA1KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZl
bnRzWzBdLCA9PSwgRG93bmxvYWRUZXN0OjpTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
ZXZlbnRzWzFdLCA9PSwgRG93bmxvYWRUZXN0OjpSZWNlaXZlZFJlc3BvbnNlKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgRG93bmxvYWRUZXN0OjpDcmVhdGVkRGVzdGluYXRp
b24pOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbM10sID09LCBEb3dubG9hZFRlc3Q6OlJl
Y2VpdmVkRGF0YSk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1s0XSwgPT0sIERvd25sb2Fk
VGVzdDo6RmluaXNoZWQpOworICAgIGV2ZW50cy5jbGVhcigpOworCisgICAgV2ViS2l0VVJJUmVx
dWVzdCogcmVxdWVzdCA9IHdlYmtpdF9kb3dubG9hZF9nZXRfcmVxdWVzdChkb3dubG9hZC5nZXQo
KSk7CisgICAgZ19hc3NlcnQocmVxdWVzdCk7CisgICAgQVNTRVJUX0NNUF9DU1RSSU5HKHdlYmtp
dF91cmlfcmVxdWVzdF9nZXRfdXJpKHJlcXVlc3QpLCA9PSwga1NlcnZlci0+Z2V0VVJJRm9yUGF0
aCgiL3Rlc3QucGRmIikpOworCisgICAgZ19hc3NlcnQod2Via2l0X2Rvd25sb2FkX2dldF9kZXN0
aW5hdGlvbihkb3dubG9hZC5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHdlYmtpdF9k
b3dubG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNzKGRvd25sb2FkLmdldCgpKSwgPT0sIDEpOwor
ICAgIHRlc3QtPmNoZWNrRGVzdGluYXRpb25BbmREZWxldGVGaWxlKGRvd25sb2FkLmdldCgpLCBr
U2VydmVyU3VnZ2VzdGVkRmlsZW5hbWUpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0RG93bmxvYWRS
ZW1vdGVGaWxlRXJyb3IoRG93bmxvYWRFcnJvclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7
CisgICAgdGVzdC0+bV9leHBlY3RlZEVycm9yID0gV0VCS0lUX0RPV05MT0FEX0VSUk9SX05FVFdP
Uks7CisgICAgR1JlZlB0cjxXZWJLaXREb3dubG9hZD4gZG93bmxvYWQgPSBhZG9wdEdSZWYodGVz
dC0+ZG93bmxvYWRVUklBbmRXYWl0VW50aWxGaW5pc2hlcyhrU2VydmVyLT5nZXRVUklGb3JQYXRo
KCIvZm9vIikpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2Rvd25sb2FkX2dldF93ZWJfdmlldyhk
b3dubG9hZC5nZXQoKSkpOworCisgICAgVmVjdG9yPERvd25sb2FkVGVzdDo6RG93bmxvYWRFdmVu
dD4mIGV2ZW50cyA9IHRlc3QtPm1fZG93bmxvYWRFdmVudHM7CisgICAgZ19hc3NlcnRfY21waW50
KGV2ZW50cy5zaXplKCksID09LCA0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9
PSwgRG93bmxvYWRUZXN0OjpTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFd
LCA9PSwgRG93bmxvYWRUZXN0OjpSZWNlaXZlZFJlc3BvbnNlKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoZXZlbnRzWzJdLCA9PSwgRG93bmxvYWRUZXN0OjpGYWlsZWQpOworICAgIGdfYXNzZXJ0X2Nt
cGludChldmVudHNbM10sID09LCBEb3dubG9hZFRlc3Q6OkZpbmlzaGVkKTsKKyAgICBldmVudHMu
Y2xlYXIoKTsKKyAgICBXZWJLaXRVUklSZXNwb25zZSogcmVzcG9uc2UgPSB3ZWJraXRfZG93bmxv
YWRfZ2V0X3Jlc3BvbnNlKGRvd25sb2FkLmdldCgpKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdl
YmtpdF91cmlfcmVzcG9uc2VfZ2V0X3N0YXR1c19jb2RlKHJlc3BvbnNlKSwgPT0sIDQwNCk7Cisg
ICAgZ19hc3NlcnRfY21wZmxvYXQod2Via2l0X2Rvd25sb2FkX2dldF9lc3RpbWF0ZWRfcHJvZ3Jl
c3MoZG93bmxvYWQuZ2V0KCkpLCA8LCAxKTsKKworICAgIHRlc3QtPm1fZXhwZWN0ZWRFcnJvciA9
IFdFQktJVF9ET1dOTE9BRF9FUlJPUl9ERVNUSU5BVElPTjsKKyAgICBkb3dubG9hZCA9IGFkb3B0
R1JlZih0ZXN0LT5kb3dubG9hZFVSSUFuZFdhaXRVbnRpbEZpbmlzaGVzKGtTZXJ2ZXItPmdldFVS
SUZvclBhdGgoIi90ZXN0LnBkZiIpKSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9kb3dubG9hZF9n
ZXRfd2ViX3ZpZXcoZG93bmxvYWQuZ2V0KCkpKTsKKworICAgIGdfYXNzZXJ0X2NtcGludChldmVu
dHMuc2l6ZSgpLCA9PSwgNCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIERv
d25sb2FkVGVzdDo6U3RhcnRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0s
IERvd25sb2FkVGVzdDo6UmVjZWl2ZWRSZXNwb25zZSk7CisgICAgZ19hc3NlcnRfY21waW50KGV2
ZW50c1syXSwgPT0sIERvd25sb2FkVGVzdDo6RmFpbGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
ZXZlbnRzWzNdLCA9PSwgRG93bmxvYWRUZXN0OjpGaW5pc2hlZCk7CisgICAgZXZlbnRzLmNsZWFy
KCk7CisgICAgZ19hc3NlcnRfY21wZmxvYXQod2Via2l0X2Rvd25sb2FkX2dldF9lc3RpbWF0ZWRf
cHJvZ3Jlc3MoZG93bmxvYWQuZ2V0KCkpLCA8LCAxKTsKKyAgICB0ZXN0LT5jaGVja0Rlc3RpbmF0
aW9uQW5kRGVsZXRlRmlsZShkb3dubG9hZC5nZXQoKSwgImJhciIpOworCisgICAgdGVzdC0+bV9l
eHBlY3RlZEVycm9yID0gV0VCS0lUX0RPV05MT0FEX0VSUk9SX0NBTkNFTExFRF9CWV9VU0VSOwor
ICAgIGRvd25sb2FkID0gYWRvcHRHUmVmKHRlc3QtPmRvd25sb2FkVVJJQW5kV2FpdFVudGlsRmlu
aXNoZXMoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3Rlc3QucGRmIikpKTsKKyAgICBnX2Fzc2Vy
dCghd2Via2l0X2Rvd25sb2FkX2dldF93ZWJfdmlldyhkb3dubG9hZC5nZXQoKSkpOworCisgICAg
Z19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCA0KTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoZXZlbnRzWzBdLCA9PSwgRG93bmxvYWRUZXN0OjpTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoZXZlbnRzWzFdLCA9PSwgRG93bmxvYWRUZXN0OjpSZWNlaXZlZFJlc3BvbnNlKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgRG93bmxvYWRUZXN0OjpGYWlsZWQpOwor
ICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbM10sID09LCBEb3dubG9hZFRlc3Q6OkZpbmlzaGVk
KTsKKyAgICBldmVudHMuY2xlYXIoKTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdCh3ZWJraXRfZG93
bmxvYWRfZ2V0X2VzdGltYXRlZF9wcm9ncmVzcyhkb3dubG9hZC5nZXQoKSksIDwsIDEpOworICAg
IHRlc3QtPmNoZWNrRGVzdGluYXRpb25BbmREZWxldGVGaWxlKGRvd25sb2FkLmdldCgpLCBrU2Vy
dmVyU3VnZ2VzdGVkRmlsZW5hbWUpOworfQorCitjbGFzcyBXZWJWaWV3RG93bmxvYWRUZXN0OiBw
dWJsaWMgV2ViVmlld1Rlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUo
V2ViVmlld0Rvd25sb2FkVGVzdCk7CisKKyAgICBzdGF0aWMgdm9pZCBkb3dubG9hZFN0YXJ0ZWRD
YWxsYmFjayhXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0LCBXZWJLaXREb3dubG9hZCogZG93bmxv
YWQsIFdlYlZpZXdEb3dubG9hZFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT5tX2Rv
d25sb2FkID0gZG93bmxvYWQ7CisgICAgICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdo
ZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QoZG93bmxvYWQpKTsKKyAgICAgICAgdGVzdC0+cXVpdE1h
aW5Mb29wKCk7CisgICAgfQorCisgICAgV2ViVmlld0Rvd25sb2FkVGVzdCgpCisgICAgeworICAg
ICAgICBnX3NpZ25hbF9jb25uZWN0KHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dChtX3dlYlZp
ZXcpLCAiZG93bmxvYWQtc3RhcnRlZCIsIEdfQ0FMTEJBQ0soZG93bmxvYWRTdGFydGVkQ2FsbGJh
Y2spLCB0aGlzKTsKKyAgICB9CisKKyAgICB+V2ViVmlld0Rvd25sb2FkVGVzdCgpCisgICAgewor
ICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQod2Via2l0X3dlYl92
aWV3X2dldF9jb250ZXh0KG1fd2ViVmlldyksIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAs
IDAsIHRoaXMpOworICAgIH0KKworICAgIHZvaWQgd2FpdFVudGlsRG93bmxvYWRTdGFydGVkKCkK
KyAgICB7CisgICAgICAgIG1fZG93bmxvYWQgPSAwOworICAgICAgICBnX21haW5fbG9vcF9ydW4o
bV9tYWluTG9vcCk7CisgICAgICAgIGdfYXNzZXJ0KG1fZG93bmxvYWQuZ2V0KCkpOworICAgIH0K
KworICAgIHN0YXRpYyBnYm9vbGVhbiBkb3dubG9hZERlY2lkZURlc3RpbmF0aW9uQ2FsbGJhY2so
V2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBjb25zdCBnY2hhciogc3VnZ2VzdGVkRmlsZW5hbWUs
IFdlYlZpZXdEb3dubG9hZFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICBHT3duUHRyPGNoYXI+
IGRlc3RpbmF0aW9uKGdfYnVpbGRfZmlsZW5hbWUoa1RlbXBEaXJlY3RvcnksIHN1Z2dlc3RlZEZp
bGVuYW1lLCBOVUxMKSk7CisgICAgICAgIEdPd25QdHI8Y2hhcj4gZGVzdGluYXRpb25VUkkoZ19m
aWxlbmFtZV90b191cmkoZGVzdGluYXRpb24uZ2V0KCksIDAsIDApKTsKKyAgICAgICAgd2Via2l0
X2Rvd25sb2FkX3NldF9kZXN0aW5hdGlvbihkb3dubG9hZCwgZGVzdGluYXRpb25VUkkuZ2V0KCkp
OworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBkb3dubG9h
ZEZpbmlzaGVkQ2FsbGJhY2soV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBXZWJWaWV3RG93bmxv
YWRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+cXVpdE1haW5Mb29wKCk7CisgICAg
fQorCisgICAgdm9pZCB3YWl0VW50aWxEb3dubG9hZEZpbmlzaGVkKCkKKyAgICB7CisgICAgICAg
IGdfc2lnbmFsX2Nvbm5lY3QobV9kb3dubG9hZC5nZXQoKSwgImRlY2lkZS1kZXN0aW5hdGlvbiIs
IEdfQ0FMTEJBQ0soZG93bmxvYWREZWNpZGVEZXN0aW5hdGlvbkNhbGxiYWNrKSwgdGhpcyk7Cisg
ICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9kb3dubG9hZC5nZXQoKSwgImZpbmlzaGVkIiwgR19D
QUxMQkFDSyhkb3dubG9hZEZpbmlzaGVkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgZ19tYWlu
X2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIEdSZWZQdHI8V2ViS2l0RG93bmxv
YWQ+IG1fZG93bmxvYWQ7Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0Rvd25sb2FkVVJJ
KFdlYlZpZXdEb3dubG9hZFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgR1JlZlB0
cjxXZWJLaXREb3dubG9hZD4gZG93bmxvYWQgPSBhZG9wdEdSZWYod2Via2l0X3dlYl92aWV3X2Rv
d25sb2FkX3VyaSh0ZXN0LT5tX3dlYlZpZXcsIGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi90ZXN0
LnBkZiIpLmRhdGEoKSkpOworICAgIHRlc3QtPndhaXRVbnRpbERvd25sb2FkU3RhcnRlZCgpOwor
ICAgIGdfYXNzZXJ0KHRlc3QtPm1fd2ViVmlldyA9PSB3ZWJraXRfZG93bmxvYWRfZ2V0X3dlYl92
aWV3KGRvd25sb2FkLmdldCgpKSk7CisgICAgdGVzdC0+d2FpdFVudGlsRG93bmxvYWRGaW5pc2hl
ZCgpOworCisgICAgR1JlZlB0cjxHRmlsZT4gZG93bmxvYWRGaWxlID0gYWRvcHRHUmVmKGdfZmls
ZV9uZXdfZm9yX3VyaSh3ZWJraXRfZG93bmxvYWRfZ2V0X2Rlc3RpbmF0aW9uKGRvd25sb2FkLmdl
dCgpKSkpOworICAgIEdSZWZQdHI8R0ZpbGVJbmZvPiBkb3dubG9hZEZpbGVJbmZvID0gYWRvcHRH
UmVmKGdfZmlsZV9xdWVyeV9pbmZvKGRvd25sb2FkRmlsZS5nZXQoKSwgR19GSUxFX0FUVFJJQlVU
RV9TVEFOREFSRF9TSVpFLCBzdGF0aWNfY2FzdDxHRmlsZVF1ZXJ5SW5mb0ZsYWdzPigwKSwgMCwg
MCkpOworICAgIGdfYXNzZXJ0X2NtcGludChnX2ZpbGVfaW5mb19nZXRfc2l6ZShkb3dubG9hZEZp
bGVJbmZvLmdldCgpKSwgPiwgMCk7CisgICAgZ19maWxlX2RlbGV0ZShkb3dubG9hZEZpbGUuZ2V0
KCksIDAsIDApOworfQorCitjbGFzcyBQb2xpY3lSZXNwb25zZURvd25sb2FkVGVzdDogcHVibGlj
IFdlYlZpZXdEb3dubG9hZFRlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRV
UkUoUG9saWN5UmVzcG9uc2VEb3dubG9hZFRlc3QpOworCisgICAgc3RhdGljIGdib29sZWFuIGRl
Y2lkZVBvbGljeUNhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFBvbGljeURl
Y2lzaW9uKiBkZWNpc2lvbiwgV2ViS2l0UG9saWN5RGVjaXNpb25UeXBlIHR5cGUsIFBvbGljeVJl
c3BvbnNlRG93bmxvYWRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgaWYgKHR5cGUgIT0gV0VC
S0lUX1BPTElDWV9ERUNJU0lPTl9UWVBFX1JFU1BPTlNFKQorICAgICAgICAgICAgcmV0dXJuIEZB
TFNFOworCisgICAgICAgIHdlYmtpdF9wb2xpY3lfZGVjaXNpb25fZG93bmxvYWQoZGVjaXNpb24p
OworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICBQb2xpY3lSZXNwb25zZURvd25s
b2FkVGVzdCgpCisgICAgeworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImRl
Y2lkZS1wb2xpY3kiLCBHX0NBTExCQUNLKGRlY2lkZVBvbGljeUNhbGxiYWNrKSwgdGhpcyk7Cisg
ICAgfQorCisgICAgflBvbGljeVJlc3BvbnNlRG93bmxvYWRUZXN0KCkKKyAgICB7CisgICAgICAg
IGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3dlYlZpZXcsIEdfU0lHTkFM
X01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOworICAgIH0KKworICAgIHZvaWQgY2FuY2Vs
RG93bmxvYWRBbmRXYWl0VW50aWxGaW5pc2hlZCgpCisgICAgeworICAgICAgICB3ZWJraXRfZG93
bmxvYWRfY2FuY2VsKG1fZG93bmxvYWQuZ2V0KCkpOworICAgICAgICB3YWl0VW50aWxEb3dubG9h
ZEZpbmlzaGVkKCk7CisgICAgICAgIG1fZG93bmxvYWQgPSAwOworICAgIH0KK307CisKK3N0YXRp
YyB2b2lkIHRlc3RQb2xpY3lSZXNwb25zZURvd25sb2FkKFBvbGljeVJlc3BvbnNlRG93bmxvYWRU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIC8vIFRlc3QgdGhhdCBhIGRvd25sb2Fk
IHN0YXJ0ZWQgYnkgdGhlIHRoZSBwb2xpY3kgY2hlY2tlciBjb250YWlucyB0aGUgd2ViIHZpZXcu
CisgICAgQ1N0cmluZyByZXF1ZXN0VVJJID0ga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3Rlc3Qu
cGRmIikuZGF0YSgpOworICAgIHRlc3QtPmxvYWRVUkkocmVxdWVzdFVSSS5kYXRhKCkpOworICAg
IHRlc3QtPndhaXRVbnRpbERvd25sb2FkU3RhcnRlZCgpOworCisgICAgV2ViS2l0VVJJUmVxdWVz
dCogcmVxdWVzdCA9IHdlYmtpdF9kb3dubG9hZF9nZXRfcmVxdWVzdCh0ZXN0LT5tX2Rvd25sb2Fk
LmdldCgpKTsKKyAgICBnX2Fzc2VydChyZXF1ZXN0KTsKKyAgICBBU1NFUlRfQ01QX0NTVFJJTkco
d2Via2l0X3VyaV9yZXF1ZXN0X2dldF91cmkocmVxdWVzdCksID09LCByZXF1ZXN0VVJJKTsKKwor
ICAgIGdfYXNzZXJ0KHRlc3QtPm1fd2ViVmlldyA9PSB3ZWJraXRfZG93bmxvYWRfZ2V0X3dlYl92
aWV3KHRlc3QtPm1fZG93bmxvYWQuZ2V0KCkpKTsKKyAgICB0ZXN0LT5jYW5jZWxEb3dubG9hZEFu
ZFdhaXRVbnRpbEZpbmlzaGVkKCk7Cit9CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICBrU2Vy
dmVyID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIoKTsKKyAgICBrU2VydmVyLT5ydW4oc2VydmVyQ2Fs
bGJhY2spOworCisgICAga1RlbXBEaXJlY3RvcnkgPSBnX2Rpcl9tYWtlX3RtcCgiV2ViS2l0MlRl
c3RzLVhYWFhYWCIsIDApOworICAgIGdfYXNzZXJ0KGtUZW1wRGlyZWN0b3J5KTsKKworICAgIERv
d25sb2FkVGVzdDo6YWRkKCJEb3dubG9hZHMiLCAibG9jYWwtZmlsZSIsIHRlc3REb3dubG9hZExv
Y2FsRmlsZSk7CisgICAgRG93bmxvYWRFcnJvclRlc3Q6OmFkZCgiRG93bmxvYWRzIiwgImxvY2Fs
LWZpbGUtZXJyb3IiLCB0ZXN0RG93bmxvYWRMb2NhbEZpbGVFcnJvcik7CisgICAgRG93bmxvYWRU
ZXN0OjphZGQoIkRvd25sb2FkcyIsICJyZW1vdGUtZmlsZSIsIHRlc3REb3dubG9hZFJlbW90ZUZp
bGUpOworICAgIERvd25sb2FkRXJyb3JUZXN0OjphZGQoIkRvd25sb2FkcyIsICJyZW1vdGUtZmls
ZS1lcnJvciIsIHRlc3REb3dubG9hZFJlbW90ZUZpbGVFcnJvcik7CisgICAgV2ViVmlld0Rvd25s
b2FkVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImRvd25sb2FkLXVyaSIsIHRlc3RXZWJWaWV3
RG93bmxvYWRVUkkpOworICAgIFBvbGljeVJlc3BvbnNlRG93bmxvYWRUZXN0OjphZGQoIkRvd25s
b2FkcyIsICJwb2xpY3ktZGVjaXNpb24tZG93bmxvYWQiLCB0ZXN0UG9saWN5UmVzcG9uc2VEb3du
bG9hZCk7Cit9CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworICAgIGRlbGV0ZSBrU2VydmVyOworICAg
IGdfcm1kaXIoa1RlbXBEaXJlY3RvcnkpOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RGcmFtZS5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdDJHdGsvVGVzdEZyYW1lLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5hNjNiMDc5Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RGcmFtZS5jcHAKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aW5jbHVkZSAiV2ViUHJvY2Vzc1Rlc3RSdW5uZXIuaCIKKyNpbmNsdWRlICJXZWJWaWV3VGVzdC5o
IgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdDIuaD4KKwor
c3RhdGljIFdlYlByb2Nlc3NUZXN0UnVubmVyKiB0ZXN0UnVubmVyOworCitzdGF0aWMgdm9pZCB3
ZWJraXRGcmFtZVRlc3RSdW4oV2ViVmlld1Rlc3QqIHRlc3QsIGNvbnN0IGNoYXIqIHRlc3ROYW1l
KQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyKiB0ZXN0SFRNTCA9ICI8aHRtbD48Ym9keT48L2Jv
ZHk+PC9odG1sPiI7CisgICAgdGVzdC0+bG9hZEh0bWwodGVzdEhUTUwsIDApOworICAgIHRlc3Qt
PndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgR1ZhcmlhbnRCdWlsZGVyIGJ1aWxkZXI7
CisgICAgZ192YXJpYW50X2J1aWxkZXJfaW5pdCgmYnVpbGRlciwgR19WQVJJQU5UX1RZUEVfVkFS
RElDVCk7CisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKCZidWlsZGVyLCAie3N2fSIsICJwYWdl
SUQiLCBnX3ZhcmlhbnRfbmV3X3VpbnQ2NCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3BhZ2VfaWQodGVz
dC0+bV93ZWJWaWV3KSkpOworICAgIGdfYXNzZXJ0KHRlc3RSdW5uZXItPnJ1blRlc3QoIldlYktp
dEZyYW1lIiwgdGVzdE5hbWUsIGdfdmFyaWFudF9idWlsZGVyX2VuZCgmYnVpbGRlcikpKTsKK30K
Kworc3RhdGljIHZvaWQgdGVzdFdlYktpdEZyYW1lTWFpbkZyYW1lKFdlYlZpZXdUZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQoreworICAgIHdlYmtpdEZyYW1lVGVzdFJ1bih0ZXN0LCAibWFpbi1m
cmFtZSIpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViS2l0RnJhbWVVUkkoV2ViVmlld1Rlc3Qq
IHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgd2Via2l0RnJhbWVUZXN0UnVuKHRlc3QsICJ1
cmkiKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYktpdEZyYW1lSmF2YVNjcmlwdENvbnRleHQo
V2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgd2Via2l0RnJhbWVUZXN0
UnVuKHRlc3QsICJqYXZhc2NyaXB0LWNvbnRleHQiKTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQor
eworICAgIHRlc3RSdW5uZXIgPSBuZXcgV2ViUHJvY2Vzc1Rlc3RSdW5uZXIoKTsKKyAgICB3ZWJr
aXRfd2ViX2NvbnRleHRfc2V0X3dlYl9leHRlbnNpb25zX2RpcmVjdG9yeSh3ZWJraXRfd2ViX2Nv
bnRleHRfZ2V0X2RlZmF1bHQoKSwgV0VCS0lUX1RFU1RfV0VCX0VYVEVOU0lPTlNfRElSKTsKKwor
ICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdEZyYW1lIiwgIm1haW4tZnJhbWUiLCB0ZXN0V2Vi
S2l0RnJhbWVNYWluRnJhbWUpOworICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdEZyYW1lIiwg
InVyaSIsIHRlc3RXZWJLaXRGcmFtZVVSSSk7CisgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0
RnJhbWUiLCAiamF2YXNjcmlwdC1jb250ZXh0IiwgdGVzdFdlYktpdEZyYW1lSmF2YVNjcmlwdENv
bnRleHQpOworfQorCit2b2lkIGFmdGVyQWxsKCkKK3sKKyAgICBkZWxldGUgdGVzdFJ1bm5lcjsK
K30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0
SW5zcGVjdG9yLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0
SW5zcGVjdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjA0MzAz
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3Rr
L1Rlc3RJbnNwZWN0b3IuY3BwCkBAIC0wLDAgKzEsMzU2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIldlYlZp
ZXdUZXN0LmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0
L0dSZWZQdHIuaD4KKworY2xhc3MgSW5zcGVjdG9yVGVzdDogcHVibGljIFdlYlZpZXdUZXN0IHsK
K3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKEluc3BlY3RvclRlc3QpOworCisg
ICAgZW51bSBJbnNwZWN0b3JFdmVudHMgeworICAgICAgICBPcGVuV2luZG93LAorICAgICAgICBC
cmluZ1RvRnJvbnQsCisgICAgICAgIENsb3NlZCwKKyAgICAgICAgQXR0YWNoLAorICAgICAgICBE
ZXRhY2gKKyAgICB9OworCisgICAgc3RhdGljIGdib29sZWFuIG9wZW5XaW5kb3dDYWxsYmFjayhX
ZWJLaXRXZWJJbnNwZWN0b3IqLCBJbnNwZWN0b3JUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRlc3QtPm9wZW5XaW5kb3coKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4g
YnJpbmdUb0Zyb250Q2FsbGJhY2soV2ViS2l0V2ViSW5zcGVjdG9yKiwgSW5zcGVjdG9yVGVzdCog
dGVzdCkKKyAgICB7CisgICAgICAgIHJldHVybiB0ZXN0LT5icmluZ1RvRnJvbnQoKTsKKyAgICB9
CisKKyAgICBzdGF0aWMgdm9pZCBjbG9zZWRDYWxsYmFjayhXZWJLaXRXZWJJbnNwZWN0b3IqLCBJ
bnNwZWN0b3JUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRlc3QtPmNsb3NlZCgp
OworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBhdHRhY2hDYWxsYmFjayhXZWJLaXRXZWJJ
bnNwZWN0b3IqLCBJbnNwZWN0b3JUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRl
c3QtPmF0dGFjaCgpOworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBkZXRhY2hDYWxsYmFj
ayhXZWJLaXRXZWJJbnNwZWN0b3IqLCBJbnNwZWN0b3JUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHRlc3QtPmRldGFjaCgpOworICAgIH0KKworICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBnTWluaW11bUF0dGFjaGVkSW5zcGVjdG9yV2lkdGggPSA3NTA7CisgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIGdNaW5pbXVtQXR0YWNoZWRJbnNwZWN0b3JIZWlnaHQgPSAyNTA7CisKKyAg
ICBJbnNwZWN0b3JUZXN0KCkKKyAgICAgICAgOiBXZWJWaWV3VGVzdCgpCisgICAgICAgICwgbV9p
bnNwZWN0b3Iod2Via2l0X3dlYl92aWV3X2dldF9pbnNwZWN0b3IobV93ZWJWaWV3KSkKKyAgICB7
CisgICAgICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX2RldmVsb3Blcl9leHRyYXMod2Vi
a2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyhtX3dlYlZpZXcpLCBUUlVFKTsKKyAgICAgICAgYXNz
ZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChtX2luc3BlY3Rvcikp
OworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1faW5zcGVjdG9yLCAib3Blbi13aW5kb3ciLCBH
X0NBTExCQUNLKG9wZW5XaW5kb3dDYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX3NpZ25hbF9j
b25uZWN0KG1faW5zcGVjdG9yLCAiYnJpbmctdG8tZnJvbnQiLCBHX0NBTExCQUNLKGJyaW5nVG9G
cm9udENhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9pbnNwZWN0
b3IsICJjbG9zZWQiLCBHX0NBTExCQUNLKGNsb3NlZENhbGxiYWNrKSwgdGhpcyk7CisgICAgICAg
IGdfc2lnbmFsX2Nvbm5lY3QobV9pbnNwZWN0b3IsICJhdHRhY2giLCBHX0NBTExCQUNLKGF0dGFj
aENhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9pbnNwZWN0b3Is
ICJkZXRhY2giLCBHX0NBTExCQUNLKGRldGFjaENhbGxiYWNrKSwgdGhpcyk7CisgICAgfQorCisg
ICAgfkluc3BlY3RvclRlc3QoKQorICAgIHsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlz
Y29ubmVjdF9tYXRjaGVkKG1faW5zcGVjdG9yLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAw
LCAwLCB0aGlzKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgb3BlbldpbmRvdygpCisgICAg
eworICAgICAgICBtX2V2ZW50cy5hcHBlbmQoT3BlbldpbmRvdyk7CisgICAgICAgIGdfbWFpbl9s
b29wX3F1aXQobV9tYWluTG9vcCk7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKworICAg
IHZpcnR1YWwgYm9vbCBicmluZ1RvRnJvbnQoKQorICAgIHsKKyAgICAgICAgbV9ldmVudHMuYXBw
ZW5kKEJyaW5nVG9Gcm9udCk7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7
CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2Vk
KCkKKyAgICB7CisgICAgICAgIG1fZXZlbnRzLmFwcGVuZChDbG9zZWQpOworICAgIH0KKworICAg
IHZpcnR1YWwgYm9vbCBhdHRhY2goKQorICAgIHsKKyAgICAgICAgbV9ldmVudHMuYXBwZW5kKEF0
dGFjaCk7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBk
ZXRhY2goKQorICAgIHsKKyAgICAgICAgbV9ldmVudHMuYXBwZW5kKERldGFjaCk7CisgICAgICAg
IHJldHVybiBUUlVFOworICAgIH0KKworCisgICAgc3RhdGljIGdib29sZWFuIHNob3dJZGxlKElu
c3BlY3RvclRlc3QqIHRlc3QpCisgICAgeworICAgICAgICB3ZWJraXRfd2ViX2luc3BlY3Rvcl9z
aG93KHRlc3QtPm1faW5zcGVjdG9yKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKwor
ICAgIHZvaWQgc2hvdygpCisgICAgeworICAgICAgICBnX2lkbGVfYWRkKHJlaW50ZXJwcmV0X2Nh
c3Q8R1NvdXJjZUZ1bmM+KHNob3dJZGxlKSwgdGhpcyk7CisgICAgICAgIGdfbWFpbl9sb29wX3J1
bihtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICB2b2lkIHJlc2l6ZVZpZXdBbmRBdHRhY2goKQor
ICAgIHsKKyAgICAgICAgLy8gUmVzaXplIHRoZSB2aWV3IHRvIG1ha2Ugcm9vbSBmb3IgdGhlIGlu
c3BlY3Rvci4KKyAgICAgICAgcmVzaXplVmlldyhnTWluaW11bUF0dGFjaGVkSW5zcGVjdG9yV2lk
dGgsIChnTWluaW11bUF0dGFjaGVkSW5zcGVjdG9ySGVpZ2h0ICsgMSkgKiA0IC8gMyk7CisgICAg
ICAgIHdlYmtpdF93ZWJfaW5zcGVjdG9yX2F0dGFjaChtX2luc3BlY3Rvcik7CisgICAgfQorCisg
ICAgc3RhdGljIGdib29sZWFuIGRldGFjaElkbGUoSW5zcGVjdG9yVGVzdCogdGVzdCkKKyAgICB7
CisgICAgICAgIHdlYmtpdF93ZWJfaW5zcGVjdG9yX2RldGFjaCh0ZXN0LT5tX2luc3BlY3Rvcik7
CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICB2b2lkIGRldGFjaEFuZFdhaXRV
bnRpbFdpbmRvd09wZW5lZCgpCisgICAgeworICAgICAgICBnX2lkbGVfYWRkKHJlaW50ZXJwcmV0
X2Nhc3Q8R1NvdXJjZUZ1bmM+KGRldGFjaElkbGUpLCB0aGlzKTsKKyAgICAgICAgZ19tYWluX2xv
b3BfcnVuKG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIHZvaWQgY2xvc2UoKQorICAgIHsKKyAg
ICAgICAgd2Via2l0X3dlYl9pbnNwZWN0b3JfY2xvc2UobV9pbnNwZWN0b3IpOworICAgIH0KKwor
ICAgIFdlYktpdFdlYkluc3BlY3RvciogbV9pbnNwZWN0b3I7CisgICAgVmVjdG9yPEluc3BlY3Rv
ckV2ZW50cz4gbV9ldmVudHM7Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0SW5zcGVjdG9yRGVmYXVs
dChJbnNwZWN0b3JUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPnNob3dJ
bldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZChHVEtfV0lORE9XX1RPUExFVkVMKTsKKyAgICB0ZXN0
LT5yZXNpemVWaWV3KDIwMCwgMjAwKTsKKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHk+
PHA+V2ViS2l0R1RLKyBJbnNwZWN0b3IgdGVzdDwvcD48L2JvZHk+PC9odG1sPiIsIDApOworICAg
IHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+c2hvdygpOworICAg
IC8vIFdlIGRvbid0IGFkZCB0aGUgdmlldyB0byBhIGNvbnRhaW5lciwgc28gY29uc3VtZSB0aGUg
d2VhayByZWYgd2l0aCBHUmVmUHRyLgorICAgIEdSZWZQdHI8V2ViS2l0V2ViVmlld0Jhc2U+IGlu
c3BlY3RvclZpZXcgPSB3ZWJraXRfd2ViX2luc3BlY3Rvcl9nZXRfd2ViX3ZpZXcodGVzdC0+bV9p
bnNwZWN0b3IpOworICAgIGdfYXNzZXJ0KGluc3BlY3RvclZpZXcuZ2V0KCkpOworICAgIHRlc3Qt
PmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QoaW5zcGVjdG9y
Vmlldy5nZXQoKSkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX2luc3BlY3Rvcl9pc19hdHRh
Y2hlZCh0ZXN0LT5tX2luc3BlY3RvcikpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X3dl
Yl9pbnNwZWN0b3JfZ2V0X2F0dGFjaGVkX2hlaWdodCh0ZXN0LT5tX2luc3BlY3RvciksID09LCAw
KTsKKyAgICBWZWN0b3I8SW5zcGVjdG9yVGVzdDo6SW5zcGVjdG9yRXZlbnRzPiYgZXZlbnRzID0g
dGVzdC0+bV9ldmVudHM7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAx
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgSW5zcGVjdG9yVGVzdDo6T3Bl
bldpbmRvdyk7CisgICAgdGVzdC0+bV9ldmVudHMuY2xlYXIoKTsKKworICAgIHRlc3QtPnNob3co
KTsKKyAgICBldmVudHMgPSB0ZXN0LT5tX2V2ZW50czsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZl
bnRzLnNpemUoKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBJ
bnNwZWN0b3JUZXN0OjpCcmluZ1RvRnJvbnQpOworICAgIHRlc3QtPm1fZXZlbnRzLmNsZWFyKCk7
CisKKyAgICB0ZXN0LT5yZXNpemVWaWV3QW5kQXR0YWNoKCk7CisgICAgZ19hc3NlcnQod2Via2l0
X3dlYl9pbnNwZWN0b3JfaXNfYXR0YWNoZWQodGVzdC0+bV9pbnNwZWN0b3IpKTsKKyAgICBnX2Fz
c2VydF9jbXB1aW50KHdlYmtpdF93ZWJfaW5zcGVjdG9yX2dldF9hdHRhY2hlZF9oZWlnaHQodGVz
dC0+bV9pbnNwZWN0b3IpLCA+PSwgSW5zcGVjdG9yVGVzdDo6Z01pbmltdW1BdHRhY2hlZEluc3Bl
Y3RvckhlaWdodCk7CisgICAgZXZlbnRzID0gdGVzdC0+bV9ldmVudHM7CisgICAgZ19hc3NlcnRf
Y21waW50KGV2ZW50cy5zaXplKCksID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRz
WzBdLCA9PSwgSW5zcGVjdG9yVGVzdDo6QXR0YWNoKTsKKyAgICB0ZXN0LT5tX2V2ZW50cy5jbGVh
cigpOworCisgICAgdGVzdC0+ZGV0YWNoQW5kV2FpdFVudGlsV2luZG93T3BlbmVkKCk7CisgICAg
Z19hc3NlcnQoIXdlYmtpdF93ZWJfaW5zcGVjdG9yX2lzX2F0dGFjaGVkKHRlc3QtPm1faW5zcGVj
dG9yKSk7CisgICAgZXZlbnRzID0gdGVzdC0+bV9ldmVudHM7CisgICAgZ19hc3NlcnRfY21waW50
KGV2ZW50cy5zaXplKCksID09LCAyKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9
PSwgSW5zcGVjdG9yVGVzdDo6RGV0YWNoKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFd
LCA9PSwgSW5zcGVjdG9yVGVzdDo6T3BlbldpbmRvdyk7CisgICAgdGVzdC0+bV9ldmVudHMuY2xl
YXIoKTsKKworICAgIHRlc3QtPmNsb3NlKCk7CisgICAgZXZlbnRzID0gdGVzdC0+bV9ldmVudHM7
CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAxKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgSW5zcGVjdG9yVGVzdDo6Q2xvc2VkKTsKKyAgICB0ZXN0
LT5tX2V2ZW50cy5jbGVhcigpOworfQorCitjbGFzcyBDdXN0b21JbnNwZWN0b3JUZXN0OiBwdWJs
aWMgSW5zcGVjdG9yVGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShD
dXN0b21JbnNwZWN0b3JUZXN0KTsKKworICAgIEN1c3RvbUluc3BlY3RvclRlc3QoKQorICAgICAg
ICA6IEluc3BlY3RvclRlc3QoKQorICAgICAgICAsIG1faW5zcGVjdG9yV2luZG93KDApCisgICAg
eworICAgIH0KKworICAgIH5DdXN0b21JbnNwZWN0b3JUZXN0KCkKKyAgICB7CisgICAgICAgIGlm
IChtX2luc3BlY3RvcldpbmRvdykKKyAgICAgICAgICAgIGd0a193aWRnZXRfZGVzdHJveShtX2lu
c3BlY3RvcldpbmRvdyk7CisgICAgfQorCisgICAgYm9vbCBvcGVuV2luZG93KCkKKyAgICB7Cisg
ICAgICAgIGdfYXNzZXJ0KCFtX2luc3BlY3RvcldpbmRvdyk7CisgICAgICAgIG1faW5zcGVjdG9y
V2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7CisgICAgICAgIFdl
YktpdFdlYlZpZXdCYXNlKiBpbnNwZWN0b3JWaWV3ID0gd2Via2l0X3dlYl9pbnNwZWN0b3JfZ2V0
X3dlYl92aWV3KG1faW5zcGVjdG9yKTsKKyAgICAgICAgZ19hc3NlcnQoaW5zcGVjdG9yVmlldyk7
CisgICAgICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIobV9pbnNwZWN0b3JXaW5k
b3cpLCBHVEtfV0lER0VUKGluc3BlY3RvclZpZXcpKTsKKyAgICAgICAgZ3RrX3dpZGdldF9zaG93
X2FsbChtX2luc3BlY3RvcldpbmRvdyk7CisKKyAgICAgICAgcmV0dXJuIEluc3BlY3RvclRlc3Q6
Om9wZW5XaW5kb3coKTsKKyAgICB9CisKKyAgICB2b2lkIGNsb3NlZCgpCisgICAgeworICAgICAg
ICBpZiAobV9pbnNwZWN0b3JXaW5kb3cpIHsKKyAgICAgICAgICAgIGd0a193aWRnZXRfZGVzdHJv
eShtX2luc3BlY3RvcldpbmRvdyk7CisgICAgICAgICAgICBtX2luc3BlY3RvcldpbmRvdyA9IDA7
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gSW5zcGVjdG9yVGVzdDo6Y2xvc2VkKCk7Cisg
ICAgfQorCisgICAgYm9vbCBhdHRhY2goKQorICAgIHsKKyAgICAgICAgR1JlZlB0cjxXZWJLaXRX
ZWJWaWV3QmFzZT4gaW5zcGVjdG9yVmlldyA9IHdlYmtpdF93ZWJfaW5zcGVjdG9yX2dldF93ZWJf
dmlldyhtX2luc3BlY3Rvcik7CisgICAgICAgIGlmIChtX2luc3BlY3RvcldpbmRvdykgeworICAg
ICAgICAgICAgZ3RrX2NvbnRhaW5lcl9yZW1vdmUoR1RLX0NPTlRBSU5FUihtX2luc3BlY3Rvcldp
bmRvdyksIEdUS19XSURHRVQoaW5zcGVjdG9yVmlldy5nZXQoKSkpOworICAgICAgICAgICAgZ3Rr
X3dpZGdldF9kZXN0cm95KG1faW5zcGVjdG9yV2luZG93KTsKKyAgICAgICAgICAgIG1faW5zcGVj
dG9yV2luZG93ID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIEd0a1dpZGdldCogcGFuZTsKKyAg
ICAgICAgaWYgKGd0a19iaW5fZ2V0X2NoaWxkKEdUS19CSU4obV9wYXJlbnRXaW5kb3cpKSA9PSBH
VEtfV0lER0VUKG1fd2ViVmlldykpIHsKKyAgICAgICAgICAgIEdSZWZQdHI8V2ViS2l0V2ViVmll
dz4gaW5zcGVjdGVkVmlldyA9IG1fd2ViVmlldzsKKyAgICAgICAgICAgIGd0a19jb250YWluZXJf
cmVtb3ZlKEdUS19DT05UQUlORVIobV9wYXJlbnRXaW5kb3cpLCBHVEtfV0lER0VUKG1fd2ViVmll
dykpOworICAgICAgICAgICAgcGFuZSA9IGd0a19wYW5lZF9uZXcoR1RLX09SSUVOVEFUSU9OX1ZF
UlRJQ0FMKTsKKyAgICAgICAgICAgIGd0a19wYW5lZF9hZGQxKEdUS19QQU5FRChwYW5lKSwgR1RL
X1dJREdFVChtX3dlYlZpZXcpKTsKKyAgICAgICAgICAgIGd0a19jb250YWluZXJfYWRkKEdUS19D
T05UQUlORVIobV9wYXJlbnRXaW5kb3cpLCBwYW5lKTsKKyAgICAgICAgICAgIGd0a193aWRnZXRf
c2hvd19hbGwocGFuZSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcGFuZSA9IGd0a19i
aW5fZ2V0X2NoaWxkKEdUS19CSU4obV9wYXJlbnRXaW5kb3cpKTsKKyAgICAgICAgZ3RrX3BhbmVk
X3NldF9wb3NpdGlvbihHVEtfUEFORUQocGFuZSksIHdlYmtpdF93ZWJfaW5zcGVjdG9yX2dldF9h
dHRhY2hlZF9oZWlnaHQobV9pbnNwZWN0b3IpKTsKKyAgICAgICAgZ3RrX3BhbmVkX2FkZDIoR1RL
X1BBTkVEKHBhbmUpLCBHVEtfV0lER0VUKGluc3BlY3RvclZpZXcuZ2V0KCkpKTsKKworICAgICAg
ICByZXR1cm4gSW5zcGVjdG9yVGVzdDo6YXR0YWNoKCk7CisgICAgfQorCisgICAgYm9vbCBkZXRh
Y2goKQorICAgIHsKKyAgICAgICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3QmFzZT4gaW5zcGVjdG9y
VmlldyA9IHdlYmtpdF93ZWJfaW5zcGVjdG9yX2dldF93ZWJfdmlldyhtX2luc3BlY3Rvcik7Cisg
ICAgICAgIEd0a1dpZGdldCogcGFuZSA9IGd0a19iaW5fZ2V0X2NoaWxkKEdUS19CSU4obV9wYXJl
bnRXaW5kb3cpKTsKKyAgICAgICAgZ19hc3NlcnQoR1RLX0lTX1BBTkVEKHBhbmUpKTsKKyAgICAg
ICAgZ3RrX2NvbnRhaW5lcl9yZW1vdmUoR1RLX0NPTlRBSU5FUihwYW5lKSwgR1RLX1dJREdFVChp
bnNwZWN0b3JWaWV3LmdldCgpKSk7CisgICAgICAgIHJldHVybiBJbnNwZWN0b3JUZXN0OjpkZXRh
Y2goKTsKKyAgICB9CisKKyAgICB2b2lkIGRlc3Ryb3lXaW5kb3coKQorICAgIHsKKyAgICAgICAg
Z19hc3NlcnQobV9pbnNwZWN0b3JXaW5kb3cpOworICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3ko
bV9pbnNwZWN0b3JXaW5kb3cpOworICAgICAgICBtX2luc3BlY3RvcldpbmRvdyA9IDA7CisgICAg
fQorCisgICAgR3RrV2lkZ2V0KiBtX2luc3BlY3RvcldpbmRvdzsKK307CisKK3N0YXRpYyB2b2lk
IHRlc3RJbnNwZWN0b3JNYW51YWxBdHRhY2hEZXRhY2goQ3VzdG9tSW5zcGVjdG9yVGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxN
YXBwZWQoR1RLX1dJTkRPV19UT1BMRVZFTCk7CisgICAgdGVzdC0+cmVzaXplVmlldygyMDAsIDIw
MCk7CisgICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxib2R5PjxwPldlYktpdEdUSysgSW5zcGVj
dG9yIHRlc3Q8L3A+PC9ib2R5PjwvaHRtbD4iLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2Fk
RmluaXNoZWQoKTsKKworICAgIHRlc3QtPnNob3coKTsKKyAgICB0ZXN0LT5hc3NlcnRPYmplY3RJ
c0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHdlYmtpdF93ZWJfaW5zcGVjdG9yX2dl
dF93ZWJfdmlldyh0ZXN0LT5tX2luc3BlY3RvcikpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dl
Yl9pbnNwZWN0b3JfaXNfYXR0YWNoZWQodGVzdC0+bV9pbnNwZWN0b3IpKTsKKyAgICBWZWN0b3I8
SW5zcGVjdG9yVGVzdDo6SW5zcGVjdG9yRXZlbnRzPiYgZXZlbnRzID0gdGVzdC0+bV9ldmVudHM7
CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAxKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgSW5zcGVjdG9yVGVzdDo6T3BlbldpbmRvdyk7CisgICAg
dGVzdC0+bV9ldmVudHMuY2xlYXIoKTsKKworICAgIHRlc3QtPnJlc2l6ZVZpZXdBbmRBdHRhY2go
KTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2luc3BlY3Rvcl9pc19hdHRhY2hlZCh0ZXN0LT5t
X2luc3BlY3RvcikpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X3dlYl9pbnNwZWN0b3Jf
Z2V0X2F0dGFjaGVkX2hlaWdodCh0ZXN0LT5tX2luc3BlY3RvciksID49LCBJbnNwZWN0b3JUZXN0
OjpnTWluaW11bUF0dGFjaGVkSW5zcGVjdG9ySGVpZ2h0KTsKKyAgICBldmVudHMgPSB0ZXN0LT5t
X2V2ZW50czsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDEpOworICAg
IGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBJbnNwZWN0b3JUZXN0OjpBdHRhY2gpOwor
ICAgIHRlc3QtPm1fZXZlbnRzLmNsZWFyKCk7CisKKyAgICB0ZXN0LT5kZXRhY2hBbmRXYWl0VW50
aWxXaW5kb3dPcGVuZWQoKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl9pbnNwZWN0b3JfaXNf
YXR0YWNoZWQodGVzdC0+bV9pbnNwZWN0b3IpKTsKKyAgICBldmVudHMgPSB0ZXN0LT5tX2V2ZW50
czsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDIpOworICAgIGdfYXNz
ZXJ0X2NtcGludChldmVudHNbMF0sID09LCBJbnNwZWN0b3JUZXN0OjpEZXRhY2gpOworICAgIGdf
YXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBJbnNwZWN0b3JUZXN0OjpPcGVuV2luZG93KTsK
KyAgICB0ZXN0LT5tX2V2ZW50cy5jbGVhcigpOworCisgICAgdGVzdC0+cmVzaXplVmlld0FuZEF0
dGFjaCgpOworICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfaW5zcGVjdG9yX2lzX2F0dGFjaGVkKHRl
c3QtPm1faW5zcGVjdG9yKSk7CisgICAgdGVzdC0+bV9ldmVudHMuY2xlYXIoKTsKKyAgICB0ZXN0
LT5jbG9zZSgpOworICAgIGV2ZW50cyA9IHRlc3QtPm1fZXZlbnRzOworICAgIGdfYXNzZXJ0X2Nt
cGludChldmVudHMuc2l6ZSgpLCA9PSwgMik7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sw
XSwgPT0sIEluc3BlY3RvclRlc3Q6OkRldGFjaCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50
c1sxXSwgPT0sIEluc3BlY3RvclRlc3Q6OkNsb3NlZCk7CisgICAgdGVzdC0+bV9ldmVudHMuY2xl
YXIoKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEluc3BlY3RvckN1c3RvbUNvbnRhaW5lckRlc3Ry
b3llZChDdXN0b21JbnNwZWN0b3JUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRl
c3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZChHVEtfV0lORE9XX1RPUExFVkVMKTsK
KyAgICB0ZXN0LT5yZXNpemVWaWV3KDIwMCwgMjAwKTsKKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0
bWw+PGJvZHk+PHA+V2ViS2l0R1RLKyBJbnNwZWN0b3IgdGVzdDwvcD48L2JvZHk+PC9odG1sPiIs
IDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+c2hv
dygpOworICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19P
QkpFQ1Qod2Via2l0X3dlYl9pbnNwZWN0b3JfZ2V0X3dlYl92aWV3KHRlc3QtPm1faW5zcGVjdG9y
KSkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX2luc3BlY3Rvcl9pc19hdHRhY2hlZCh0ZXN0
LT5tX2luc3BlY3RvcikpOworCisgICAgdGVzdC0+bV9ldmVudHMuY2xlYXIoKTsKKyAgICB0ZXN0
LT5kZXN0cm95V2luZG93KCk7CisgICAgVmVjdG9yPEluc3BlY3RvclRlc3Q6Okluc3BlY3RvckV2
ZW50cz4mIGV2ZW50cyA9IHRlc3QtPm1fZXZlbnRzOworICAgIGdfYXNzZXJ0X2NtcGludChldmVu
dHMuc2l6ZSgpLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIElu
c3BlY3RvclRlc3Q6OkNsb3NlZCk7CisgICAgdGVzdC0+bV9ldmVudHMuY2xlYXIoKTsKK30KKwor
dm9pZCBiZWZvcmVBbGwoKQoreworICAgIEluc3BlY3RvclRlc3Q6OmFkZCgiV2ViS2l0V2ViSW5z
cGVjdG9yIiwgImRlZmF1bHQiLCB0ZXN0SW5zcGVjdG9yRGVmYXVsdCk7CisgICAgQ3VzdG9tSW5z
cGVjdG9yVGVzdDo6YWRkKCJXZWJLaXRXZWJJbnNwZWN0b3IiLCAibWFudWFsLWF0dGFjaC1kZXRh
Y2giLCB0ZXN0SW5zcGVjdG9yTWFudWFsQXR0YWNoRGV0YWNoKTsKKyAgICBDdXN0b21JbnNwZWN0
b3JUZXN0OjphZGQoIldlYktpdFdlYkluc3BlY3RvciIsICJjdXN0b20tY29udGFpbmVyLWRlc3Ry
b3llZCIsIHRlc3RJbnNwZWN0b3JDdXN0b21Db250YWluZXJEZXN0cm95ZWQpOworfQorCit2b2lk
IGFmdGVyQWxsKCkKK3sKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Mkd0ay9UZXN0SW5zcGVjdG9yU2VydmVyLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Mkd0ay9UZXN0SW5zcGVjdG9yU2VydmVyLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5mYmI2MmNlCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RJbnNwZWN0b3JTZXJ2ZXIuY3BwCkBAIC0w
LDAgKzEsMjk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25p
Y3MgTHRkLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgorI2luY2x1ZGUgPHd0Zi9nb2Jq
ZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworLy8gTmFt
ZSBvZiB0aGUgdGVzdCBzZXJ2ZXIgYXBwbGljYXRpb24gY3JlYXRpbmcgdGhlIHdlYlZpZXcgb2Jq
ZWN0Lgorc3RhdGljIGNvbnN0IGNoYXIqIGdUZXN0U2VydmVyQXBwTmFtZSA9ICJJbnNwZWN0b3JU
ZXN0U2VydmVyIjsKKworLy8gTWF4IHNlY29uZHMgdG8gd2FpdCBmb3IgdGhlIHRlc3Qgc2VydmVy
IGJlZm9yZSBpbnNwZWN0aW5nIGl0Lgorc3RhdGljIGNvbnN0IGludCBnTWF4V2FpdEZvckNoaWxk
ID0gNTsKKworLy8gVGhlIFBJRCBmb3IgdGhlIHRlc3Qgc2VydmVyIHJ1bm5pbmcsIHNvIHdlIGNh
biBraWxsIGl0IGlmIG5lZWRlZC4KK3N0YXRpYyBHUGlkIGdDaGlsZFByb2Nlc3NQaWQgPSAwOwor
CisvLyBXaGV0aGVyIHRoZSBjaGlsZCBoYXMgcmVwbGllZCBhbmQgaXQncyByZWFkeS4KK3N0YXRp
YyBib29sIGdDaGlsZElzUmVhZHkgPSBmYWxzZTsKKworc3RhdGljIHZvaWQgc3RvcFRlc3RTZXJ2
ZXIoKQoreworICAgIC8vIERvIG5vdGhpbmcgaWYgdGhlcmUncyBubyBzZXJ2ZXIgcnVubmluZy4K
KyAgICBpZiAoIWdDaGlsZFByb2Nlc3NQaWQpCisgICAgICAgIHJldHVybjsKKworICAgIGdfc3Bh
d25fY2xvc2VfcGlkKGdDaGlsZFByb2Nlc3NQaWQpOworICAgIGtpbGwoZ0NoaWxkUHJvY2Vzc1Bp
ZCwgU0lHVEVSTSk7CisgICAgZ0NoaWxkUHJvY2Vzc1BpZCA9IDA7Cit9CisKK3N0YXRpYyB2b2lk
IHNpZ0Fib3J0SGFuZGxlcihpbnQgc2lnTnVtKQoreworICAgIC8vIEp1c3Qgc3RvcCB0aGUgdGVz
dCBzZXJ2ZXIgaWYgU0lHQUJSVCB3YXMgcmVjZWl2ZWQuCisgICAgc3RvcFRlc3RTZXJ2ZXIoKTsK
K30KKworc3RhdGljIGdwb2ludGVyIHRlc3RTZXJ2ZXJNb25pdG9yVGhyZWFkRnVuYyhncG9pbnRl
cikKK3sKKyAgICAvLyBXYWl0IGZvciB0aGUgc3BlY2lmaWVkIHRpbWVvdXQgdG8gaGFwcGVuLgor
ICAgIGdfdXNsZWVwKGdNYXhXYWl0Rm9yQ2hpbGQgKiBHX1VTRUNfUEVSX1NFQyk7CisKKyAgICAv
LyBLaWxsIHRoZSBjaGlsZCBwcm9jZXNzIGlmIG5vdCByZWFkeSB5ZXQuCisgICAgaWYgKCFnQ2hp
bGRJc1JlYWR5KQorICAgICAgICBzdG9wVGVzdFNlcnZlcigpOworCisgICAgZ190aHJlYWRfZXhp
dCgwKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3RhcnRUZXN0U2VydmVyTW9u
aXRvcigpCit7CisgICAgZ0NoaWxkSXNSZWFkeSA9IGZhbHNlOworICAgIGdfdGhyZWFkX25ldygi
VGVzdFNlcnZlck1vbml0b3IiLCB0ZXN0U2VydmVyTW9uaXRvclRocmVhZEZ1bmMsIDApOworfQor
CitzdGF0aWMgdm9pZCBzdGFydFRlc3RTZXJ2ZXIoKQoreworICAgIC8vIFByZXBhcmUgYXJndltd
IGZvciBzcGF3bmluZyB0aGUgc2VydmVyIHByb2Nlc3MuCisgICAgR093blB0cjxjaGFyPiB0ZXN0
U2VydmVyUGF0aChnX2J1aWxkX2ZpbGVuYW1lKFdFQktJVF9FWEVDX1BBVEgsICJUZXN0V2ViS2l0
QVBJIiwgIldlYktpdDJHdGsiLCBnVGVzdFNlcnZlckFwcE5hbWUsIE5VTEwpKTsKKworICAgIC8v
IFdlIGluc3RhbGwgYSBoYW5kbGVyIHRvIGVuc3VyZSB0aGF0IHdlIGtpbGwgdGhlIGNoaWxkIHBy
b2Nlc3MKKyAgICAvLyBpZiB0aGUgcGFyZW50IGRpZXMgYmVjYXVzZSBvZiB3aGF0ZXZlciB0aGUg
cmVhc29uIGlzLgorICAgIHNpZ25hbChTSUdBQlJULCBzaWdBYm9ydEhhbmRsZXIpOworCisgICAg
Y2hhciogdGVzdFNlcnZlckFyZ3ZbMl07CisgICAgdGVzdFNlcnZlckFyZ3ZbMF0gPSB0ZXN0U2Vy
dmVyUGF0aC5nZXQoKTsKKyAgICB0ZXN0U2VydmVyQXJndlsxXSA9IDA7CisKKyAgICAvLyBTcGF3
biB0aGUgc2VydmVyLCBnZXR0aW5nIGl0cyBzdGRvdXQgZmlsZSBkZXNjcmlwdG9yIHRvIHNldCBh
CisgICAgLy8gY29tbXVuaWNhdGlvbiBjaGFubmVsLCBzbyB3ZSBrbm93IHdoZW4gaXQncyByZWFk
eS4KKyAgICBpbnQgY2hpbGRTdGRvdXQgPSAwOworICAgIGdfYXNzZXJ0KGdfc3Bhd25fYXN5bmNf
d2l0aF9waXBlcygwLCB0ZXN0U2VydmVyQXJndiwgMCwgc3RhdGljX2Nhc3Q8R1NwYXduRmxhZ3M+
KDApLCAwLCAwLAorICAgICAgICAmZ0NoaWxkUHJvY2Vzc1BpZCwgMCwgJmNoaWxkU3Rkb3V0LCAw
LCAwKSk7CisKKyAgICAvLyBTdGFydCBtb25pdG9yaW5nIHRoZSB0ZXN0IHNlcnZlciAoaW4gYSBz
ZXBhcmF0ZSB0aHJlYWQpIHRvCisgICAgLy8gZW5zdXJlIHdlIGRvbid0IGJsb2NrIG9uIHRoZSBj
aGlsZCBwcm9jZXNzIG1vcmUgdGhhbiBhIHRpbWVvdXQuCisgICAgc3RhcnRUZXN0U2VydmVyTW9u
aXRvcigpOworCisgICAgY2hhciBtc2dbMl07CisgICAgR0lPQ2hhbm5lbCogaW9DaGFubmVsID0g
Z19pb19jaGFubmVsX3VuaXhfbmV3KGNoaWxkU3Rkb3V0KTsKKyAgICBpZiAoZ19pb19jaGFubmVs
X3JlYWRfY2hhcnMoaW9DaGFubmVsLCBtc2csIDIsIDAsIDApID09IEdfSU9fU1RBVFVTX05PUk1B
TCkgeworICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBzZXJ2ZXIgc2VudCBhIG1lc3NhZ2Ug
c2F5aW5nIGl0J3MgcmVhZHkKKyAgICAgICAgLy8gYW5kIHN0b3JlIHRoZSByZXN1bHQgZ2xvYmFs
bHksIHNvIHRoZSBtb25pdG9yIGNhbiBzZWUgaXQuCisgICAgICAgIGdDaGlsZElzUmVhZHkgPSBt
c2dbMF0gPT0gJ08nICYmIG1zZ1sxXSA9PSAnSyc7CisgICAgfQorICAgIGdfaW9fY2hhbm5lbF91
bnJlZihpb0NoYW5uZWwpOworICAgIGNsb3NlKGNoaWxkU3Rkb3V0KTsKKworICAgIC8vIFRoZSB0
aW1lb3V0IHdhcyByZWFjaGVkIGFuZCB0aGUgc2VydmVyIGlzIG5vdCByZWFkeSB5ZXQsIHNvCisg
ICAgLy8gc3RvcCBpdCBpbm1lZGlhdGVseSwgYW5kIGxldCB0aGUgdW5pdCB0ZXN0cyBmYWlsLgor
ICAgIGlmICghZ0NoaWxkSXNSZWFkeSkKKyAgICAgICAgc3RvcFRlc3RTZXJ2ZXIoKTsKK30KKwor
Y2xhc3MgSW5zcGVjdG9yU2VydmVyVGVzdDogcHVibGljIFdlYlZpZXdUZXN0IHsKK3B1YmxpYzoK
KyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKEluc3BlY3RvclNlcnZlclRlc3QpOworCisgICAg
SW5zcGVjdG9yU2VydmVyVGVzdCgpCisgICAgICAgIDogV2ViVmlld1Rlc3QoKQorICAgIHsKKyAg
ICB9CisKKyAgICBib29sIGdldFBhZ2VMaXN0KCkKKyAgICB7CisgICAgICAgIGxvYWRIdG1sKCI8
c2NyaXB0IHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIj5cbiIKKyAgICAgICAgICAgICJ2YXIgcGFn
ZXM7XG4iCisgICAgICAgICAgICAidmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdDtcbiIKKyAg
ICAgICAgICAgICJ4aHIub3BlbihcIkdFVFwiLCBcIi9wYWdlbGlzdC5qc29uXCIpO1xuIgorICAg
ICAgICAgICAgInhoci5vbmxvYWQgPSBmdW5jdGlvbihlKSB7XG4iCisgICAgICAgICAgICAgICAg
ImlmICh4aHIuc3RhdHVzID09IDIwMCkge1xuIgorICAgICAgICAgICAgICAgICAgICAicGFnZXMg
PSBKU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpO1xuIgorICAgICAgICAgICAgICAgICAgICAi
ZG9jdW1lbnQudGl0bGUgPSBcIk9LXCI7XG4iCisgICAgICAgICAgICAgICAgIn0gZWxzZSBcbiIK
KyAgICAgICAgICAgICAgICAgICAgImRvY3VtZW50LnRpdGxlID0gXCJGQUlMXCI7XG4iCisgICAg
ICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICJ4aHIuc2VuZCgpO1xuIgorICAgICAgICAg
ICAgIjwvc2NyaXB0PlxuIiwKKyAgICAgICAgICAgICJodHRwOi8vMTI3LjAuMC4xOjI5OTkvIik7
CisKKyAgICAgICAgd2FpdFVudGlsVGl0bGVDaGFuZ2VkKCk7CisKKyAgICAgICAgaWYgKCFzdHJj
bXAod2Via2l0X3dlYl92aWV3X2dldF90aXRsZShtX3dlYlZpZXcpLCAiT0siKSkKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB+
SW5zcGVjdG9yU2VydmVyVGVzdCgpCisgICAgeworICAgIH0KK307CisKKy8vIFRlc3QgdG8gZ2V0
IGluc3BlY3RvciBzZXJ2ZXIgcGFnZSBsaXN0IGZyb20gdGhlIHRlc3Qgc2VydmVyLgorLy8gU2hv
dWxkIGNvbnRhaW4gb25seSBvbmUgZW50cnkgcG9pbnRpbmcgdG8gaHR0cDovLzEyNy4wLjAuMToy
OTk5L3dlYmluc3BlY3Rvci9NYWluLmh0bWw/cGFnZT0xCitzdGF0aWMgdm9pZCB0ZXN0SW5zcGVj
dG9yU2VydmVyUGFnZUxpc3QoSW5zcGVjdG9yU2VydmVyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRl
cikKK3sKKyAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7CisKKyAgICB0ZXN0LT5zaG93SW5XaW5k
b3dBbmRXYWl0VW50aWxNYXBwZWQoR1RLX1dJTkRPV19UT1BMRVZFTCk7CisgICAgZ19hc3NlcnQo
dGVzdC0+Z2V0UGFnZUxpc3QoKSk7CisKKyAgICBXZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBqYXZh
c2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJw
YWdlcy5sZW5ndGg7IiwgJmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fzc2VydChqYXZhc2NyaXB0
UmVzdWx0KTsKKyAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvTnVtYmVyKGphdmFzY3JpcHRSZXN1bHQp
LCA9PSwgMSk7CisKKyAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFu
ZFdhaXRVbnRpbEZpbmlzaGVkKCJwYWdlc1swXS5pZDsiLCAmZXJyb3Iub3V0UHRyKCkpOworICAg
IGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7
CisgICAgaW50IHBhZ2VJZCA9IFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9OdW1iZXIo
amF2YXNjcmlwdFJlc3VsdCk7CisKKyAgICBHT3duUHRyPGNoYXI+IHZhbHVlU3RyaW5nOworICAg
IGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNo
ZWQoInBhZ2VzWzBdLnVybDsiLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGdfYXNzZXJ0KGphdmFz
Y3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7CisgICAgdmFsdWVTdHJp
bmcuc2V0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRS
ZXN1bHQpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAiaHR0
cDovLzEyNy4wLjAuMToyOTk5LyIpOworCisgICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1
bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgicGFnZXNbMF0uaW5zcGVjdG9yVXJsOyIs
ICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAg
Z19hc3NlcnQoIWVycm9yLmdldCgpKTsKKyAgICB2YWx1ZVN0cmluZy5zZXQoV2ViVmlld1Rlc3Q6
OmphdmFzY3JpcHRSZXN1bHRUb0NTdHJpbmcoamF2YXNjcmlwdFJlc3VsdCkpOworICAgIFN0cmlu
ZyB2YWxpZEluc3BlY3RvclVSTCA9IFN0cmluZygiL01haW4uaHRtbD9wYWdlPSIpICsgU3RyaW5n
OjpudW1iZXIocGFnZUlkKTsKKyAgICBBU1NFUlRfQ01QX0NTVFJJTkcodmFsdWVTdHJpbmcuZ2V0
KCksID09LCB2YWxpZEluc3BlY3RvclVSTC51dGY4KCkpOworfQorCisvLyBUZXN0IHNlbmRpbmcg
YSByYXcgcmVtb3RlIGRlYnVnZ2luZyBtZXNzYWdlIHRocm91Z2ggb3VyIHdlYiBzb2NrZXQgc2Vy
dmVyLgorLy8gRm9yIHRoaXMgc3BlY2lmaWMgbWVzc2FnZSBzZWU6IGh0dHA6Ly9jb2RlLmdvb2ds
ZS5jb20vY2hyb21lL2RldnRvb2xzL2RvY3MvcHJvdG9jb2wvdG90L3J1bnRpbWUuaHRtbCNjb21t
YW5kLWV2YWx1YXRlCitzdGF0aWMgdm9pZCB0ZXN0UmVtb3RlRGVidWdnaW5nTWVzc2FnZShJbnNw
ZWN0b3JTZXJ2ZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPnNob3dJ
bldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZChHVEtfV0lORE9XX1RPUExFVkVMKTsKKworICAgIHRl
c3QtPmxvYWRIdG1sKCI8c2NyaXB0IHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIj5cbiIKKyAgICAg
ICAgInZhciBzb2NrZXQgPSBuZXcgV2ViU29ja2V0KCd3czovLzEyNy4wLjAuMToyOTk5L2RldnRv
b2xzL3BhZ2UvMScpO1xuIgorICAgICAgICAic29ja2V0Lm9ubWVzc2FnZSA9IGZ1bmN0aW9uKG1l
c3NhZ2UpIHtcbiIKKyAgICAgICAgICAgICJ2YXIgcmVzcG9uc2UgPSBKU09OLnBhcnNlKG1lc3Nh
Z2UuZGF0YSk7XG4iCisgICAgICAgICAgICAiaWYgKHJlc3BvbnNlLmlkID09PSAxKVxuIgorICAg
ICAgICAgICAgICAgICJkb2N1bWVudC50aXRsZSA9IHJlc3BvbnNlLnJlc3VsdC5yZXN1bHQudmFs
dWU7XG4iCisgICAgICAgICAgICAiZWxzZVxuIgorICAgICAgICAgICAgICAgICJkb2N1bWVudC50
aXRsZSA9IFwiRkFJTFwiO1xuIgorICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICJzb2Nr
ZXQub25vcGVuID0gZnVuY3Rpb24oKSB7XG4iCisgICAgICAgICAgICAic29ja2V0LnNlbmQoJ3tc
ImlkXCI6IDEsIFwibWV0aG9kXCI6IFwiUnVudGltZS5ldmFsdWF0ZVwiLCBcInBhcmFtc1wiOiB7
XCJleHByZXNzaW9uXCI6IFwiMiArIDJcIiB9IH0nKTtcbiIKKyAgICAgICAgIn1cbiIKKyAgICAg
ICAgIjwvc2NyaXB0PiIsCisgICAgICAgICJodHRwOi8vMTI3LjAuMC4xOjI5OTkvIik7CisgICAg
dGVzdC0+d2FpdFVudGlsVGl0bGVDaGFuZ2VkKCk7CisKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Vi
a2l0X3dlYl92aWV3X2dldF90aXRsZSh0ZXN0LT5tX3dlYlZpZXcpLCA9PSwgIjQiKTsKK30KKwor
c3RhdGljIHZvaWQgb3BlblJlbW90ZURlYnVnZ2luZ1Nlc3Npb24oSW5zcGVjdG9yU2VydmVyVGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICAvLyBUbyB0ZXN0IHRoZSB3aG9sZSBwaXBl
bGluZSB0aGlzIGV4cGxvaXRzIGEgYmVoYXZpb3Igb2YgdGhlIGluc3BlY3RvciBmcm9udC1lbmQg
d2hpY2ggd29uJ3QgcHJvdmlkZSB0aGUgcGFnZSBhZGRyZXNzIGFzIHRpdGxlIHVubGVzcyB0aGUK
KyAgICAvLyBkZWJ1Z2dpbmcgc2Vzc2lvbiB3YXMgZXN0YWJsaXNoZWQgY29ycmVjdGx5IHRocm91
Z2ggd2ViIHNvY2tldC4KKyAgICAvLyBJbiBvdXIgY2FzZSBwYWdlIFVSTCBzaG91bGQgYmUgaHR0
cDovLzEyNy4wLjAuMToyOTk5LworICAgIC8vIFNvIHRoaXMgdGVzdCBjYXNlIHdpbGwgZmFpbCBp
ZjoKKyAgICAvLyAtIFRoZSBwYWdlIGxpc3QgZGlkbid0IHJldHVybiBhIHZhbGlkIGluc3BlY3Rv
ciBVUkwKKyAgICAvLyAtIE9yIHRoZSBmcm9udC1lbmQgY291bGRuJ3QgYmUgbG9hZGVkIHRocm91
Z2ggdGhlIGluc3BlY3RvciBIVFRQIHNlcnZlcgorICAgIC8vIC0gT3IgdGhlIHdlYiBzb2NrZXQg
Y29ubmVjdGlvbiBjb3VsZG4ndCBiZSBlc3RhYmxpc2hlZCBiZXR3ZWVuIHRoZSBmcm9udC1lbmQg
YW5kIHRoZSBwYWdlIHRocm91Z2ggdGhlIGluc3BlY3RvciBzZXJ2ZXIKKyAgICAvLyBMZXQncyBz
ZWUgaWYgdGhpcyB0ZXN0IGlzbid0IHJhaXNpbmcgdG9vIG1hbnkgZmFsc2UgcG9zaXRpdmVzLCBp
biB3aGljaCBjYXNlIHdlIHNob3VsZCB1c2UgYSBiZXR0ZXIgcHJlZGljYXRlIGlmIGF2YWlsYWJs
ZS4KKworICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZChHVEtfV0lORE9X
X1RPUExFVkVMKTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPmdldFBhZ2VMaXN0KCkpOworCisgICAg
R093blB0cjxHRXJyb3I+IGVycm9yOworICAgIFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFz
Y3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoInBh
Z2VzWzBdLmluc3BlY3RvclVybDsiLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGdfYXNzZXJ0KGph
dmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7CisKKyAgICBTdHJp
bmcgcmVzb2x2ZWRVUkwgPSBTdHJpbmcoImh0dHA6Ly8xMjcuMC4wLjE6Mjk5OS8iKSArIFN0cmlu
Zzo6ZnJvbVVURjgoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0NTdHJpbmcoamF2YXNj
cmlwdFJlc3VsdCkpOworICAgIHRlc3QtPmxvYWRVUkkocmVzb2x2ZWRVUkwudXRmOCgpLmRhdGEo
KSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBqYXZhc2NyaXB0
UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJ3aW5kb3cu
ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2xpJylbMF0udGl0bGUiLCAmZXJyb3Iub3V0
UHRyKCkpOworICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KCFl
cnJvci5nZXQoKSk7CisKKyAgICBHT3duUHRyPGNoYXI+IHRpdGxlKFdlYlZpZXdUZXN0OjpqYXZh
c2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIodGl0bGUuZ2V0KCksID09LCAiaHR0cDovLzEyNy4wLjAuMToyOTk5LyIpOworfQorCitz
dGF0aWMgdm9pZCBzZW5kSW5jb21wbGV0ZVJlcXVlc3QoSW5zcGVjdG9yU2VydmVyVGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7CisKKyAgICAv
LyBDb25uZWN0IHRvIHRoZSBpbnNwZWN0b3Igc2VydmVyLgorICAgIEdSZWZQdHI8R1NvY2tldENs
aWVudD4gY2xpZW50ID0gYWRvcHRHUmVmKGdfc29ja2V0X2NsaWVudF9uZXcoKSk7CisgICAgR1Jl
ZlB0cjxHU29ja2V0Q29ubmVjdGlvbj4gY29ubmVjdGlvbiA9IGFkb3B0R1JlZihnX3NvY2tldF9j
bGllbnRfY29ubmVjdF90b19ob3N0KGNsaWVudC5nZXQoKSwgIjEyNy4wLjAuMSIsIDI5OTksIDAs
ICZlcnJvci5vdXRQdHIoKSkpOworICAgIGdfYXNzZXJ0X25vX2Vycm9yKGVycm9yLmdldCgpKTsK
KworICAgIC8vIFNlbmQgaW5jb21wbGV0ZSByZXF1ZXN0IChtaXNzaW5nIGJsYW5rIGxpbmUgYWZ0
ZXIgaGVhZGVycykgYW5kIGNoZWNrIGlmIGluc3BlY3RvciBzZXJ2ZXIKKyAgICAvLyByZXBsaWVz
LiBUaGUgc2VydmVyIHNob3VsZCBub3QgcmVwbHkgdG8gYW4gaW5jb21wbGV0ZSByZXF1ZXN0IGFu
ZCB0aGUgdGVzdCBzaG91bGQgdGltZW91dAorICAgIC8vIG9uIHJlYWQuCisgICAgR091dHB1dFN0
cmVhbSogb3N0cmVhbSA9IGdfaW9fc3RyZWFtX2dldF9vdXRwdXRfc3RyZWFtKEdfSU9fU1RSRUFN
KGNvbm5lY3Rpb24uZ2V0KCkpKTsKKyAgICAvLyBSZXF1ZXN0IG1pc3NpbmcgYmxhbmsgbGluZSBh
ZnRlciBoZWFkZXJzLgorICAgIGNvbnN0IGdjaGFyKiBpbmNvbXBsZXRlUmVxdWVzdCA9ICJHRVQg
L2RldnRvb2xzL3BhZ2UvMSBIVFRQLzEuMVxyXG5Ib3N0OiBMb2NhbGhvc3RcclxuIjsKKyAgICBn
X291dHB1dF9zdHJlYW1fd3JpdGUob3N0cmVhbSwgaW5jb21wbGV0ZVJlcXVlc3QsIHN0cmxlbihp
bmNvbXBsZXRlUmVxdWVzdCksIDAsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnRfbm9f
ZXJyb3IoZXJyb3IuZ2V0KCkpOworCisgICAgR0lucHV0U3RyZWFtKiBpc3RyZWFtID0gZ19pb19z
dHJlYW1fZ2V0X2lucHV0X3N0cmVhbShHX0lPX1NUUkVBTShjb25uZWN0aW9uLmdldCgpKSk7Cisg
ICAgY2hhciByZXNwb25zZVsxNl07CisgICAgbWVtc2V0KHJlc3BvbnNlLCAwLCBzaXplb2YocmVz
cG9uc2UpKTsKKyAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gY2FuY2VsID0gYWRvcHRHUmVmKGdf
Y2FuY2VsbGFibGVfbmV3KCkpOworICAgIGdfaW5wdXRfc3RyZWFtX3JlYWRfYXN5bmMoaXN0cmVh
bSwgcmVzcG9uc2UsIHNpemVvZihyZXNwb25zZSkgLSAxLCBHX1BSSU9SSVRZX0RFRkFVTFQsIGNh
bmNlbC5nZXQoKSwgMCwgMCk7CisgICAgLy8gR2l2ZSBhIGNoYW5jZSBmb3IgdGhlIHNlcnZlciB0
byByZXBseS4KKyAgICB0ZXN0LT53YWl0KDEpOworICAgIGdfY2FuY2VsbGFibGVfY2FuY2VsKGNh
bmNlbC5nZXQoKSk7CisgICAgLy8gSWYgd2UgZ290IGFueSBhbnN3ZXIgaXQgbWVhbnMgdGhlIHNl
cnZlciByZXBsaWVkIHRvIGFuIGluY29tcGxldGUgcmVxdWVzdCwgbGV0cyBmYWlsLgorICAgIGdf
YXNzZXJ0KHJlc3BvbnNlWzBdID09ICdcMCcpOworfQorCit2b2lkIGJlZm9yZUFsbCgpCit7Cisg
ICAgLy8gT3ZlcndyaXRlIFdFQktJVF9JTlNQRUNUT1JfU0VSVkVSIHZhcmlhYmxlIHdpdGggZGVm
YXVsdCBJUCBhZGRyZXNzIGJ1dCBkaWZmZXJlbnQgcG9ydCB0byBhdm9pZCBjb25mbGljdCB3aXRo
IHRoZSB0ZXN0IGluc3BlY3RvciBzZXJ2ZXIgcGFnZS4KKyAgICBnX3NldGVudigiV0VCS0lUX0lO
U1BFQ1RPUl9TRVJWRVIiLCAiMTI3LjAuMC4xOjI5OTgiLCBUUlVFKTsKKworICAgIHN0YXJ0VGVz
dFNlcnZlcigpOworICAgIEluc3BlY3RvclNlcnZlclRlc3Q6OmFkZCgiV2ViS2l0V2ViSW5zcGVj
dG9yU2VydmVyIiwgInRlc3QtcGFnZS1saXN0IiwgdGVzdEluc3BlY3RvclNlcnZlclBhZ2VMaXN0
KTsKKyAgICBJbnNwZWN0b3JTZXJ2ZXJUZXN0OjphZGQoIldlYktpdFdlYkluc3BlY3RvclNlcnZl
ciIsICJ0ZXN0LXJlbW90ZS1kZWJ1Z2dpbmctbWVzc2FnZSIsIHRlc3RSZW1vdGVEZWJ1Z2dpbmdN
ZXNzYWdlKTsKKyAgICBJbnNwZWN0b3JTZXJ2ZXJUZXN0OjphZGQoIldlYktpdFdlYkluc3BlY3Rv
clNlcnZlciIsICJ0ZXN0LW9wZW4tZGVidWdnaW5nLXNlc3Npb24iLCBvcGVuUmVtb3RlRGVidWdn
aW5nU2Vzc2lvbik7CisgICAgSW5zcGVjdG9yU2VydmVyVGVzdDo6YWRkKCJXZWJLaXRXZWJJbnNw
ZWN0b3JTZXJ2ZXIiLCAidGVzdC1pbmNvbXBsZXRlLXJlcXVlc3QiLCBzZW5kSW5jb21wbGV0ZVJl
cXVlc3QpOworCit9CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworICAgIHN0b3BUZXN0U2VydmVyKCk7
Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVz
dExvYWRlckNsaWVudC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsv
VGVzdExvYWRlckNsaWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MzMxOTE1ZQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Mkd0ay9UZXN0TG9hZGVyQ2xpZW50LmNwcApAQCAtMCwwICsxLDQ2NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSwgMjAxMCBHdXN0YXZvIE5vcm9uaGEgU2lsdmEKKyAqIENvcHlyaWdo
dCAoQykgMjAwOSwgMjAxMSBJZ2FsaWEgUy5MLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAy
MDExIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJMb2FkVHJhY2tpbmdUZXN0LmgiCisjaW5jbHVkZSAi
V2ViS2l0VGVzdEJ1cy5oIgorI2luY2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKKyNpbmNsdWRl
ICJXZWJWaWV3VGVzdC5oIgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDxsaWJzb3Vw
L3NvdXAuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3N0YXRpYyBXZWJLaXRU
ZXN0QnVzKiBidXM7CitzdGF0aWMgV2ViS2l0VGVzdFNlcnZlcioga1NlcnZlcjsKKworY29uc3Qg
Y2hhcioga0ROVEhlYWRlck5vdFByZXNlbnQgPSAiRE5UIGhlYWRlciBub3QgcHJlc2VudCI7CisK
K3N0YXRpYyB2b2lkIHRlc3RMb2FkaW5nU3RhdHVzKExvYWRUcmFja2luZ1Rlc3QqIHRlc3QsIGdj
b25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICB0ZXN0LT5zZXRSZWRpcmVjdFVSSShrU2VydmVyLT5n
ZXRVUklGb3JQYXRoKCIvbm9ybWFsIikuZGF0YSgpKTsKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2
ZXItPmdldFVSSUZvclBhdGgoIi9yZWRpcmVjdCIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVu
dGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBWZWN0b3I8TG9hZFRyYWNraW5nVGVzdDo6TG9hZEV2
ZW50cz4mIGV2ZW50cyA9IHRlc3QtPm1fbG9hZEV2ZW50czsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
ZXZlbnRzLnNpemUoKSwgPT0sIDQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09
LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2Fk
UmVjZWl2ZWRTZXJ2ZXJSZWRpcmVjdCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwg
PT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRDb21taXR0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHNbM10sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOworfQorCitz
dGF0aWMgdm9pZCB0ZXN0TG9hZGluZ0Vycm9yKExvYWRUcmFja2luZ1Rlc3QqIHRlc3QsIGdjb25z
dHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIv
ZXJyb3IiKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisg
ICAgVmVjdG9yPExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRFdmVudHM+JiBldmVudHMgPSB0ZXN0LT5t
X2xvYWRFdmVudHM7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAzKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJv
dmlzaW9uYWxMb2FkU3RhcnRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0s
IExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZEZhaWxlZCk7CisgICAgZ19hc3NlcnRf
Y21waW50KGV2ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7Cit9
CisKK3N0YXRpYyB2b2lkIGFzc2VydE5vcm1hbExvYWRIYXBwZW5lZChWZWN0b3I8TG9hZFRyYWNr
aW5nVGVzdDo6TG9hZEV2ZW50cz4mIGV2ZW50cykKK3sKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZl
bnRzLnNpemUoKSwgPT0sIDMpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBM
b2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoZXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZENvbW1pdHRlZCk7Cisg
ICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRG
aW5pc2hlZCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RMb2FkSHRtbChMb2FkVHJhY2tpbmdUZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9k
eT5IZWxsbyBXZWJLaXQtR1RLKzwvYm9keT48L2h0bWw+IiwgMCk7CisgICAgdGVzdC0+d2FpdFVu
dGlsTG9hZEZpbmlzaGVkKCk7CisgICAgYXNzZXJ0Tm9ybWFsTG9hZEhhcHBlbmVkKHRlc3QtPm1f
bG9hZEV2ZW50cyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RMb2FkQWx0ZXJuYXRlSFRNTChMb2Fk
VHJhY2tpbmdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRBbHRl
cm5hdGVIVE1MKCI8aHRtbD48Ym9keT5BbHRlcm5hdGUgcGFnZTwvYm9keT48L2h0bWw+IiwgImh0
dHA6Ly9lcnJvci1wYWdlLmZvby8iLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNo
ZWQoKTsKKyAgICBhc3NlcnROb3JtYWxMb2FkSGFwcGVuZWQodGVzdC0+bV9sb2FkRXZlbnRzKTsK
K30KKworc3RhdGljIHZvaWQgdGVzdExvYWRQbGFpblRleHQoTG9hZFRyYWNraW5nVGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkUGxhaW5UZXh0KCJIZWxsbyBXZWJL
aXQtR1RLKyIpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIGFzc2Vy
dE5vcm1hbExvYWRIYXBwZW5lZCh0ZXN0LT5tX2xvYWRFdmVudHMpOworfQorCitzdGF0aWMgdm9p
ZCB0ZXN0TG9hZFJlcXVlc3QoTG9hZFRyYWNraW5nVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikK
K3sKKyAgICBHUmVmUHRyPFdlYktpdFVSSVJlcXVlc3Q+IHJlcXVlc3Qod2Via2l0X3VyaV9yZXF1
ZXN0X25ldyhrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvbm9ybWFsIikuZGF0YSgpKSk7CisgICAg
dGVzdC0+bG9hZFJlcXVlc3QocmVxdWVzdC5nZXQoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9h
ZEZpbmlzaGVkKCk7CisgICAgYXNzZXJ0Tm9ybWFsTG9hZEhhcHBlbmVkKHRlc3QtPm1fbG9hZEV2
ZW50cyk7Cit9CisKK2NsYXNzIExvYWRTdG9wVHJhY2tpbmdUZXN0IDogcHVibGljIExvYWRUcmFj
a2luZ1Rlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoTG9hZFN0b3BU
cmFja2luZ1Rlc3QpOworCisgICAgdmlydHVhbCB2b2lkIGxvYWRDb21taXR0ZWQoKQorICAgIHsK
KyAgICAgICAgTG9hZFRyYWNraW5nVGVzdDo6bG9hZENvbW1pdHRlZCgpOworICAgICAgICB3ZWJr
aXRfd2ViX3ZpZXdfc3RvcF9sb2FkaW5nKG1fd2ViVmlldyk7CisgICAgfQorICAgIHZpcnR1YWwg
dm9pZCBsb2FkRmFpbGVkKGNvbnN0IGdjaGFyKiBmYWlsaW5nVVJJLCBHRXJyb3IqIGVycm9yKQor
ICAgIHsKKyAgICAgICAgZ19hc3NlcnQoZ19lcnJvcl9tYXRjaGVzKGVycm9yLCBXRUJLSVRfTkVU
V09SS19FUlJPUiwgV0VCS0lUX05FVFdPUktfRVJST1JfQ0FOQ0VMTEVEKSk7CisgICAgICAgIExv
YWRUcmFja2luZ1Rlc3Q6OmxvYWRGYWlsZWQoZmFpbGluZ1VSSSwgZXJyb3IpOworICAgIH0KK307
CisKK3N0YXRpYyB2b2lkIHRlc3RMb2FkQ2FuY2VsbGVkKExvYWRTdG9wVHJhY2tpbmdUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJ
Rm9yUGF0aCgiL2NhbmNlbGxlZCIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZp
bmlzaGVkKCk7CisKKyAgICBWZWN0b3I8TG9hZFRyYWNraW5nVGVzdDo6TG9hZEV2ZW50cz4mIGV2
ZW50cyA9IHRlc3QtPm1fbG9hZEV2ZW50czsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNp
emUoKSwgPT0sIDQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBMb2FkVHJh
Y2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
ZXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZENvbW1pdHRlZCk7CisgICAgZ19h
c3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGYWlsZWQp
OworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbM10sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpM
b2FkRmluaXNoZWQpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1RpdGxlKExvYWRUcmFj
a2luZ1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93
ZWJfdmlld19nZXRfdGl0bGUodGVzdC0+bV93ZWJWaWV3KSk7CisgICAgdGVzdC0+bG9hZEh0bWwo
IjxodG1sPjxoZWFkPjx0aXRsZT5XZWxjb21lIHRvIFdlYktpdC1HVEsrITwvdGl0bGU+PC9oZWFk
PjwvaHRtbD4iLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBn
X2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dldF90aXRsZSh0ZXN0LT5tX3dlYlZpZXcp
LCA9PSwgIldlbGNvbWUgdG8gV2ViS2l0LUdUSyshIik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RX
ZWJWaWV3UmVsb2FkKExvYWRUcmFja2luZ1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7Cisg
ICAgLy8gQ2hlY2sgdGhhdCBub3RoaW5nIGhhcHBlbnMgd2hlbiB0aGVyZSdzIG5vdGhpbmcgdG8g
cmVsb2FkLgorICAgIHRlc3QtPnJlbG9hZCgpOworICAgIHRlc3QtPndhaXQoMC4yNSk7IC8vIFdh
aXQgZm9yIGEgcXVhcnRlciBvZiBhIHNlY29uZC4KKworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZl
ci0+Z2V0VVJJRm9yUGF0aCgiL25vcm1hbCIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGls
TG9hZEZpbmlzaGVkKCk7CisgICAgYXNzZXJ0Tm9ybWFsTG9hZEhhcHBlbmVkKHRlc3QtPm1fbG9h
ZEV2ZW50cyk7CisKKyAgICB0ZXN0LT5yZWxvYWQoKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2Fk
RmluaXNoZWQoKTsKKyAgICBhc3NlcnROb3JtYWxMb2FkSGFwcGVuZWQodGVzdC0+bV9sb2FkRXZl
bnRzKTsKK30KKworc3RhdGljIHZvaWQgdGVzdExvYWRQcm9ncmVzcyhMb2FkVHJhY2tpbmdUZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0
VVJJRm9yUGF0aCgiL25vcm1hbCIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZp
bmlzaGVkKCk7CisgICAgZ19hc3NlcnRfY21wZmxvYXQodGVzdC0+bV9lc3RpbWF0ZWRQcm9ncmVz
cywgPT0sIDEpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0hpc3RvcnlMb2FkKExvYWRU
cmFja2luZ1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZFVSSShr
U2VydmVyLT5nZXRVUklGb3JQYXRoKCIvbm9ybWFsIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0
VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBhc3NlcnROb3JtYWxMb2FkSGFwcGVuZWQodGVzdC0+
bV9sb2FkRXZlbnRzKTsKKworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0
aCgiL25vcm1hbDIiKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgp
OworICAgIGFzc2VydE5vcm1hbExvYWRIYXBwZW5lZCh0ZXN0LT5tX2xvYWRFdmVudHMpOworCisg
ICAgLy8gQ2hlY2sgdGhhdCBsb2FkIHByb2Nlc3MgaXMgdGhlIHNhbWUgZm9yIHBhZ2VzIGxvYWRl
ZCBmcm9tIGhpc3RvcnkgY2FjaGUuCisgICAgdGVzdC0+Z29CYWNrKCk7CisgICAgdGVzdC0+d2Fp
dFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgYXNzZXJ0Tm9ybWFsTG9hZEhhcHBlbmVkKHRlc3Qt
Pm1fbG9hZEV2ZW50cyk7CisKKyAgICB0ZXN0LT5nb0ZvcndhcmQoKTsKKyAgICB0ZXN0LT53YWl0
VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBhc3NlcnROb3JtYWxMb2FkSGFwcGVuZWQodGVzdC0+
bV9sb2FkRXZlbnRzKTsKK30KKworY2xhc3MgVmlld1VSSVRyYWNraW5nVGVzdDogcHVibGljIExv
YWRUcmFja2luZ1Rlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoVmll
d1VSSVRyYWNraW5nVGVzdCk7CisKKyAgICBzdGF0aWMgdm9pZCB1cmlDaGFuZ2VkKEdPYmplY3Qq
LCBHUGFyYW1TcGVjKiwgVmlld1VSSVRyYWNraW5nVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAg
IGdfYXNzZXJ0X2NtcHN0cih0ZXN0LT5tX2FjdGl2ZVVSSS5kYXRhKCksICE9LCB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X3VyaSh0ZXN0LT5tX3dlYlZpZXcpKTsKKyAgICAgICAgdGVzdC0+bV9hY3RpdmVV
UkkgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSh0ZXN0LT5tX3dlYlZpZXcpOworICAgIH0KKwor
ICAgIFZpZXdVUklUcmFja2luZ1Rlc3QoKQorICAgICAgICA6IG1fYWN0aXZlVVJJKHdlYmtpdF93
ZWJfdmlld19nZXRfdXJpKG1fd2ViVmlldykpCisgICAgeworICAgICAgICBnX2Fzc2VydChtX2Fj
dGl2ZVVSSS5pc051bGwoKSk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAi
bm90aWZ5Ojp1cmkiLCBHX0NBTExCQUNLKHVyaUNoYW5nZWQpLCB0aGlzKTsKKyAgICB9CisKKyAg
ICB2b2lkIHByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQoKQorICAgIHsKKyAgICAgICAgY2hlY2tBY3Rp
dmVVUkkoIi9yZWRpcmVjdCIpOworICAgIH0KKworICAgIHZvaWQgcHJvdmlzaW9uYWxMb2FkUmVj
ZWl2ZWRTZXJ2ZXJSZWRpcmVjdCgpCisgICAgeworICAgICAgICBjaGVja0FjdGl2ZVVSSSgiL25v
cm1hbCIpOworICAgIH0KKworICAgIHZvaWQgbG9hZENvbW1pdHRlZCgpCisgICAgeworICAgICAg
ICBjaGVja0FjdGl2ZVVSSSgiL25vcm1hbCIpOworICAgIH0KKworICAgIHZvaWQgbG9hZEZpbmlz
aGVkKCkKKyAgICB7CisgICAgICAgIGNoZWNrQWN0aXZlVVJJKCIvbm9ybWFsIik7CisgICAgICAg
IExvYWRUcmFja2luZ1Rlc3Q6OmxvYWRGaW5pc2hlZCgpOworICAgIH0KKworICAgIENTdHJpbmcg
bV9hY3RpdmVVUkk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBjaGVja0FjdGl2ZVVSSShjb25zdCBj
aGFyKiB1cmkpCisgICAgeworICAgICAgICBBU1NFUlRfQ01QX0NTVFJJTkcobV9hY3RpdmVVUkks
ID09LCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKHVyaSkpOworICAgIH0KK307CisKK3N0YXRpYyB2
b2lkIHRlc3RXZWJWaWV3QWN0aXZlVVJJKFZpZXdVUklUcmFja2luZ1Rlc3QqIHRlc3QsIGdjb25z
dHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIv
cmVkaXJlY3QiKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwor
fQorCitjbGFzcyBWaWV3SXNMb2FkaW5nVGVzdDogcHVibGljIExvYWRUcmFja2luZ1Rlc3Qgewor
cHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoVmlld0lzTG9hZGluZ1Rlc3QpOwor
CisgICAgc3RhdGljIHZvaWQgaXNMb2FkaW5nQ2hhbmdlZChHT2JqZWN0KiwgR1BhcmFtU3BlYyos
IFZpZXdJc0xvYWRpbmdUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgaWYgKHdlYmtpdF93ZWJf
dmlld19pc19sb2FkaW5nKHRlc3QtPm1fd2ViVmlldykpCisgICAgICAgICAgICB0ZXN0LT5iZWdp
bkxvYWQoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGVzdC0+ZW5kTG9hZCgpOworICAg
IH0KKworICAgIFZpZXdJc0xvYWRpbmdUZXN0KCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2Nv
bm5lY3QobV93ZWJWaWV3LCAibm90aWZ5Ojppcy1sb2FkaW5nIiwgR19DQUxMQkFDSyhpc0xvYWRp
bmdDaGFuZ2VkKSwgdGhpcyk7CisgICAgfQorCisgICAgdm9pZCBiZWdpbkxvYWQoKQorICAgIHsK
KyAgICAgICAgLy8gTmV3IGxvYWQsIGxvYWQtc3RhcnRlZCBoYXNuJ3QgYmVlbiBlbWl0dGVkIHll
dC4KKyAgICAgICAgZ19hc3NlcnQobV9sb2FkRXZlbnRzLmlzRW1wdHkoKSk7CisgICAgICAgIGdf
YXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaShtX3dlYlZpZXcpLCA9PSwgbV9h
Y3RpdmVVUkkuZGF0YSgpKTsKKyAgICB9CisKKyAgICB2b2lkIGVuZExvYWQoKQorICAgIHsKKyAg
ICAgICAgLy8gTG9hZCBmaW5pc2gsIGxvYWQtZmluaXNoZWQgYW5kIGxvYWQtZmFpbGVkIGhhdmVu
J3QgYmVlbiBlbWl0dGVkIHlldC4KKyAgICAgICAgZ19hc3NlcnQoIW1fbG9hZEV2ZW50cy5pc0Vt
cHR5KCkpOworICAgICAgICBnX2Fzc2VydCghbV9sb2FkRXZlbnRzLmNvbnRhaW5zKExvYWRUcmFj
a2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCkpOworICAgICAgICBnX2Fzc2VydCghbV9sb2FkRXZlbnRz
LmNvbnRhaW5zKExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGYWlsZWQpKTsKKyAgICB9Cit9OworCitz
dGF0aWMgdm9pZCB0ZXN0V2ViVmlld0lzTG9hZGluZyhWaWV3SXNMb2FkaW5nVGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBh
dGgoIi9ub3JtYWwiKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgp
OworCisgICAgdGVzdC0+cmVsb2FkKCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVk
KCk7CisKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9lcnJvciIp
LmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0
LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9ub3JtYWwiKS5kYXRhKCkpOworICAg
IHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZl
ci0+Z2V0VVJJRm9yUGF0aCgiL25vcm1hbDIiKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRp
bExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+Z29CYWNrKCk7CisgICAgdGVzdC0+d2FpdFVu
dGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5nb0ZvcndhcmQoKTsKKyAgICB0ZXN0LT53
YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKK30KKworY2xhc3MgV2ViUGFnZVVSSVRlc3Q6IHB1Ymxp
YyBXZWJWaWV3VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShXZWJQ
YWdlVVJJVGVzdCk7CisKKyAgICBzdGF0aWMgdm9pZCB3ZWJQYWdlVVJJQ2hhbmdlZENhbGxiYWNr
KEdEQnVzQ29ubmVjdGlvbiosIGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgY29uc3QgY2hhcios
IGNvbnN0IGNoYXIqLCBHVmFyaWFudCogcmVzdWx0LCBXZWJQYWdlVVJJVGVzdCogdGVzdCkKKyAg
ICB7CisgICAgICAgIGNvbnN0IGNoYXIqIHVyaTsKKyAgICAgICAgZ192YXJpYW50X2dldChyZXN1
bHQsICIoJnMpIiwgJnVyaSk7CisgICAgICAgIHRlc3QtPm1fd2ViUGFnZVVSSXMuYXBwZW5kKHVy
aSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgd2ViVmlld1VSSUNoYW5nZWQoR09iamVjdCos
IEdQYXJhbVNwZWMqLCBXZWJQYWdlVVJJVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3Qt
Pm1fd2ViVmlld1VSSXMuYXBwZW5kKHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKHRlc3QtPm1fd2Vi
VmlldykpOworICAgIH0KKworICAgIFdlYlBhZ2VVUklUZXN0KCkKKyAgICB7CisgICAgICAgIEdS
ZWZQdHI8R0RCdXNQcm94eT4gcHJveHkgPSBhZG9wdEdSZWYoYnVzLT5jcmVhdGVQcm94eSgib3Jn
LndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9uVGVzdCIsCisgICAgICAgICAgICAiL29yZy93ZWJraXQv
Z3RrL1dlYkV4dGVuc2lvblRlc3QiLCAib3JnLndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9uVGVzdCIs
IG1fbWFpbkxvb3ApKTsKKyAgICAgICAgbV91cmlDaGFuZ2VkU2lnbmFsSUQgPSBnX2RidXNfY29u
bmVjdGlvbl9zaWduYWxfc3Vic2NyaWJlKAorICAgICAgICAgICAgZ19kYnVzX3Byb3h5X2dldF9j
b25uZWN0aW9uKHByb3h5LmdldCgpKSwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAib3Jn
LndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9uVGVzdCIsCisgICAgICAgICAgICAiVVJJQ2hhbmdlZCIs
CisgICAgICAgICAgICAiL29yZy93ZWJraXQvZ3RrL1dlYkV4dGVuc2lvblRlc3QiLAorICAgICAg
ICAgICAgMCwKKyAgICAgICAgICAgIEdfREJVU19TSUdOQUxfRkxBR1NfTk9ORSwKKyAgICAgICAg
ICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0RCdXNTaWduYWxDYWxsYmFjaz4od2ViUGFnZVVSSUNoYW5n
ZWRDYWxsYmFjayksCisgICAgICAgICAgICB0aGlzLAorICAgICAgICAgICAgMCk7CisgICAgICAg
IGdfYXNzZXJ0KG1fdXJpQ2hhbmdlZFNpZ25hbElEKTsKKworICAgICAgICBnX3NpZ25hbF9jb25u
ZWN0KG1fd2ViVmlldywgIm5vdGlmeTo6dXJpIiwgR19DQUxMQkFDSyh3ZWJWaWV3VVJJQ2hhbmdl
ZCksIHRoaXMpOworICAgIH0KKworICAgIH5XZWJQYWdlVVJJVGVzdCgpCisgICAgeworICAgICAg
ICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV93ZWJWaWV3LCBHX1NJR05B
TF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKKyAgICAgICAgZ19kYnVzX2Nvbm5lY3Rp
b25fc2lnbmFsX3Vuc3Vic2NyaWJlKGJ1cy0+Y29ubmVjdGlvbigpLCBtX3VyaUNoYW5nZWRTaWdu
YWxJRCk7CisgICAgfQorCisgICAgdW5zaWduZWQgbV91cmlDaGFuZ2VkU2lnbmFsSUQ7CisgICAg
VmVjdG9yPENTdHJpbmc+IG1fd2ViUGFnZVVSSXM7CisgICAgVmVjdG9yPENTdHJpbmc+IG1fd2Vi
Vmlld1VSSXM7Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0V2ViUGFnZVVSSShXZWJQYWdlVVJJVGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdl
dFVSSUZvclBhdGgoIi9yZWRpcmVjdCIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9h
ZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV93ZWJQYWdlVVJJcy5z
aXplKCksID09LCB0ZXN0LT5tX3dlYlZpZXdVUklzLnNpemUoKSk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCB0ZXN0LT5tX3dlYlBhZ2VVUklzLnNpemUoKTsgKytpKQorICAgICAgICBBU1NF
UlRfQ01QX0NTVFJJTkcodGVzdC0+bV93ZWJQYWdlVVJJc1tpXSwgPT0sIHRlc3QtPm1fd2ViVmll
d1VSSXNbaV0pOworCisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fd2ViUGFnZVVSSXMuc2l6
ZSgpLCA9PSwgMik7CisgICAgQVNTRVJUX0NNUF9DU1RSSU5HKHRlc3QtPm1fd2ViUGFnZVVSSXNb
MF0sID09LCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvcmVkaXJlY3QiKSk7CisgICAgQVNTRVJU
X0NNUF9DU1RSSU5HKHRlc3QtPm1fd2ViUGFnZVVSSXNbMV0sID09LCBrU2VydmVyLT5nZXRVUklG
b3JQYXRoKCIvbm9ybWFsIikpOworCit9CisKK3N0YXRpYyB2b2lkIHRlc3RVUklSZXF1ZXN0SFRU
UEhlYWRlcnMoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgR1JlZlB0
cjxXZWJLaXRVUklSZXF1ZXN0PiB1cmlSZXF1ZXN0ID0gYWRvcHRHUmVmKHdlYmtpdF91cmlfcmVx
dWVzdF9uZXcoImZpbGU6Ly8vZm9vL2JhciIpKTsKKyAgICBnX2Fzc2VydCh1cmlSZXF1ZXN0Lmdl
dCgpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3VyaV9yZXF1ZXN0X2dldF91cmkodXJp
UmVxdWVzdC5nZXQoKSksID09LCAiZmlsZTovLy9mb28vYmFyIik7CisgICAgZ19hc3NlcnQoIXdl
YmtpdF91cmlfcmVxdWVzdF9nZXRfaHR0cF9oZWFkZXJzKHVyaVJlcXVlc3QuZ2V0KCkpKTsKKwor
ICAgIC8vIExvYWQgYSByZXF1ZXN0IHdpdGggbm8gRG8gTm90IFRyYWNrIGhlYWRlci4KKyAgICB3
ZWJraXRfdXJpX3JlcXVlc3Rfc2V0X3VyaSh1cmlSZXF1ZXN0LmdldCgpLCBrU2VydmVyLT5nZXRV
UklGb3JQYXRoKCIvZG8tbm90LXRyYWNrLWhlYWRlciIpLmRhdGEoKSk7CisgICAgdGVzdC0+bG9h
ZFJlcXVlc3QodXJpUmVxdWVzdC5nZXQoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlz
aGVkKCk7CisKKyAgICBzaXplX3QgbWFpblJlc291cmNlRGF0YVNpemUgPSAwOworICAgIGNvbnN0
IGNoYXIqIG1haW5SZXNvdXJjZURhdGEgPSB0ZXN0LT5tYWluUmVzb3VyY2VEYXRhKG1haW5SZXNv
dXJjZURhdGFTaXplKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQobWFpblJlc291cmNlRGF0YVNpemUs
ID09LCBzdHJsZW4oa0ROVEhlYWRlck5vdFByZXNlbnQpKTsKKyAgICBnX2Fzc2VydCghc3RybmNt
cChtYWluUmVzb3VyY2VEYXRhLCBrRE5USGVhZGVyTm90UHJlc2VudCwgbWFpblJlc291cmNlRGF0
YVNpemUpKTsKKworICAgIC8vIEFkZCB0aGUgRG8gTm90IFRyYWNrIGhlYWRlciBhbmQgbG9hZCB0
aGUgcmVxdWVzdCBhZ2Fpbi4KKyAgICBTb3VwTWVzc2FnZUhlYWRlcnMqIGhlYWRlcnMgPSB3ZWJr
aXRfdXJpX3JlcXVlc3RfZ2V0X2h0dHBfaGVhZGVycyh1cmlSZXF1ZXN0LmdldCgpKTsKKyAgICBn
X2Fzc2VydChoZWFkZXJzKTsKKyAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQoaGVhZGVy
cywgIkROVCIsICIxIik7CisgICAgdGVzdC0+bG9hZFJlcXVlc3QodXJpUmVxdWVzdC5nZXQoKSk7
CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBtYWluUmVzb3VyY2VE
YXRhID0gdGVzdC0+bWFpblJlc291cmNlRGF0YShtYWluUmVzb3VyY2VEYXRhU2l6ZSk7CisgICAg
Z19hc3NlcnRfY21waW50KG1haW5SZXNvdXJjZURhdGFTaXplLCA9PSwgMSk7CisgICAgZ19hc3Nl
cnQoIXN0cm5jbXAobWFpblJlc291cmNlRGF0YSwgIjEiLCBtYWluUmVzb3VyY2VEYXRhU2l6ZSkp
OworCisgICAgLy8gTG9hZCBhIFVSSSBmb3Igd2hpY2ggdGhlIHdlYiBleHRlbnNpb24gd2lsbCBh
ZGQgdGhlIERvIE5vdCBUcmFjayBoZWFkZXIuCisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5n
ZXRVUklGb3JQYXRoKCIvYWRkLWRvLW5vdC10cmFjay1oZWFkZXIiKS5kYXRhKCkpOworICAgIHRl
c3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgbWFpblJlc291cmNlRGF0YSA9IHRl
c3QtPm1haW5SZXNvdXJjZURhdGEobWFpblJlc291cmNlRGF0YVNpemUpOworICAgIGdfYXNzZXJ0
X2NtcGludChtYWluUmVzb3VyY2VEYXRhU2l6ZSwgPT0sIDEpOworICAgIGdfYXNzZXJ0KCFzdHJu
Y21wKG1haW5SZXNvdXJjZURhdGEsICIxIiwgbWFpblJlc291cmNlRGF0YVNpemUpKTsKK30KKwor
c3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2Fn
ZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSosIFNvdXBDbGllbnRDb250
ZXh0KiwgZ3BvaW50ZXIpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHJlc3BvbnNlU3RyaW5n
ID0gIjxodG1sPjxib2R5PlRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchIgorICAgICAgICAiVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchIgorICAgICAgICAiVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchIgorICAgICAgICAiVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchIgor
ICAgICAgICAiVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchIgorICAgICAg
ICAiVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchIgorICAgICAgICAiVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchIgorICAgICAgICAiVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchPC9ib2R5PjwvaHRtbD4iOworCisgICAgaWYg
KG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKKyAgICAgICAgc291cF9tZXNz
YWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3Nh
Z2UsIFNPVVBfU1RBVFVTX09LKTsKKworICAgIGlmIChnX3N0cl9oYXNfcHJlZml4KHBhdGgsICIv
bm9ybWFsIikpCisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNw
b25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIHJlc3BvbnNlU3RyaW5nLCBzdHJsZW4ocmVz
cG9uc2VTdHJpbmcpKTsKKyAgICBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2Vycm9yIikp
CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX0NB
TlRfQ09OTkVDVCk7CisgICAgZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9yZWRpcmVjdCIp
KSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVT
X01PVkVEX1BFUk1BTkVOVExZKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5k
KG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJMb2NhdGlvbiIsICIvbm9ybWFsIik7CisgICAg
fSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2NhbmNlbGxlZCIpKSB7CisgICAgICAgIHNv
dXBfbWVzc2FnZV9oZWFkZXJzX3NldF9lbmNvZGluZyhtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJz
LCBTT1VQX0VOQ09ESU5HX0NIVU5LRUQpOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBl
bmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCByZXNwb25zZVN0
cmluZywgc3RybGVuKHJlc3BvbnNlU3RyaW5nKSk7CisgICAgICAgIHNvdXBfc2VydmVyX3VucGF1
c2VfbWVzc2FnZShzZXJ2ZXIsIG1lc3NhZ2UpOworICAgICAgICByZXR1cm47CisgICAgfSBlbHNl
IGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2RvLW5vdC10cmFjay1oZWFkZXIiKSB8fCBnX3N0cl9l
cXVhbChwYXRoLCAiL2FkZC1kby1ub3QtdHJhY2staGVhZGVyIikpIHsKKyAgICAgICAgY29uc3Qg
Y2hhciogZG9Ob3RUcmFjayA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9vbmUobWVzc2FnZS0+
cmVxdWVzdF9oZWFkZXJzLCAiRE5UIik7CisgICAgICAgIGlmIChkb05vdFRyYWNrKQorICAgICAg
ICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNP
VVBfTUVNT1JZX0NPUFksIGRvTm90VHJhY2ssIHN0cmxlbihkb05vdFRyYWNrKSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNw
b25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGtETlRIZWFkZXJOb3RQcmVzZW50LCBzdHJs
ZW4oa0ROVEhlYWRlck5vdFByZXNlbnQpKTsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0
dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOworICAgIH0gZWxzZQorICAgICAgICBzb3VwX21l
c3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfRk9VTkQpOworCisgICAg
c291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7Cit9CisK
K3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3dlYl9leHRl
bnNpb25zX2RpcmVjdG9yeSh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSwgV0VCS0lU
X1RFU1RfV0VCX0VYVEVOU0lPTlNfRElSKTsKKyAgICBidXMgPSBuZXcgV2ViS2l0VGVzdEJ1cygp
OworICAgIGlmICghYnVzLT5ydW4oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAga1NlcnZlciA9
IG5ldyBXZWJLaXRUZXN0U2VydmVyKCk7CisgICAga1NlcnZlci0+cnVuKHNlcnZlckNhbGxiYWNr
KTsKKworICAgIExvYWRUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJsb2FkaW5n
LXN0YXR1cyIsIHRlc3RMb2FkaW5nU3RhdHVzKTsKKyAgICBMb2FkVHJhY2tpbmdUZXN0OjphZGQo
IldlYktpdFdlYlZpZXciLCAibG9hZGluZy1lcnJvciIsIHRlc3RMb2FkaW5nRXJyb3IpOworICAg
IExvYWRUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJsb2FkLWh0bWwiLCB0ZXN0
TG9hZEh0bWwpOworICAgIExvYWRUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJs
b2FkLWFsdGVybmF0ZS1odG1sIiwgdGVzdExvYWRBbHRlcm5hdGVIVE1MKTsKKyAgICBMb2FkVHJh
Y2tpbmdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAibG9hZC1wbGFpbi10ZXh0IiwgdGVzdExv
YWRQbGFpblRleHQpOworICAgIExvYWRUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIs
ICJsb2FkLXJlcXVlc3QiLCB0ZXN0TG9hZFJlcXVlc3QpOworICAgIExvYWRTdG9wVHJhY2tpbmdU
ZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAic3RvcC1sb2FkaW5nIiwgdGVzdExvYWRDYW5jZWxs
ZWQpOworICAgIExvYWRUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJ0aXRsZSIs
IHRlc3RXZWJWaWV3VGl0bGUpOworICAgIExvYWRUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2Vi
VmlldyIsICJwcm9ncmVzcyIsIHRlc3RMb2FkUHJvZ3Jlc3MpOworICAgIExvYWRUcmFja2luZ1Rl
c3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJyZWxvYWQiLCB0ZXN0V2ViVmlld1JlbG9hZCk7Cisg
ICAgTG9hZFRyYWNraW5nVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImhpc3RvcnktbG9hZCIs
IHRlc3RXZWJWaWV3SGlzdG9yeUxvYWQpOworCisgICAgLy8gVGhpcyB0ZXN0IGNoZWNrcyB0aGF0
IHdlYiB2aWV3IG5vdGlmeTo6dXJpIHNpZ25hbCBpcyBjb3JyZWN0bHkgZW1pdHRlZAorICAgIC8v
IGFuZCB0aGUgdXJpIGlzIGFscmVhZHkgdXBkYXRlZCB3aGVuIGxvYWRlciBjbGllbnQgc2lnbmFs
cyBhcmUgZW1pdHRlZC4KKyAgICBWaWV3VVJJVHJhY2tpbmdUZXN0OjphZGQoIldlYktpdFdlYlZp
ZXciLCAiYWN0aXZlLXVyaSIsIHRlc3RXZWJWaWV3QWN0aXZlVVJJKTsKKworICAgIFZpZXdJc0xv
YWRpbmdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiaXMtbG9hZGluZyIsIHRlc3RXZWJWaWV3
SXNMb2FkaW5nKTsKKyAgICBXZWJQYWdlVVJJVGVzdDo6YWRkKCJXZWJLaXRXZWJQYWdlIiwgImdl
dC11cmkiLCB0ZXN0V2ViUGFnZVVSSSk7CisgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0VVJJ
UmVxdWVzdCIsICJodHRwLWhlYWRlcnMiLCB0ZXN0VVJJUmVxdWVzdEhUVFBIZWFkZXJzKTsKK30K
Kwordm9pZCBhZnRlckFsbCgpCit7CisgICAgZGVsZXRlIGJ1czsKKyAgICBkZWxldGUga1NlcnZl
cjsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9U
ZXN0UHJpbnRpbmcuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rl
c3RQcmludGluZy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJjMmNm
YgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0
ay9UZXN0UHJpbnRpbmcuY3BwCkBAIC0wLDAgKzEsMjA5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViVmll
d1Rlc3QuaCIKKyNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0
L0dSZWZQdHIuaD4KKworI2lmZGVmIEhBVkVfR1RLX1VOSVhfUFJJTlRJTkcKKyNpbmNsdWRlIDxn
dGsvZ3RrdW5peHByaW50Lmg+CisjZW5kaWYKKworc3RhdGljIGNoYXIqIGtUZW1wRGlyZWN0b3J5
OworCitzdGF0aWMgdm9pZCB0ZXN0UHJpbnRPcGVyYXRpb25QcmludFNldHRpbmdzKFdlYlZpZXdU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIEdSZWZQdHI8V2ViS2l0UHJpbnRPcGVy
YXRpb24+IHByaW50T3BlcmF0aW9uID0gYWRvcHRHUmVmKHdlYmtpdF9wcmludF9vcGVyYXRpb25f
bmV3KHRlc3QtPm1fd2ViVmlldykpOworICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdo
ZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QocHJpbnRPcGVyYXRpb24uZ2V0KCkpKTsKKworICAgIGdf
YXNzZXJ0KCF3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX2dldF9wcmludF9zZXR0aW5ncyhwcmludE9w
ZXJhdGlvbi5nZXQoKSkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX2dl
dF9wYWdlX3NldHVwKHByaW50T3BlcmF0aW9uLmdldCgpKSk7CisKKyAgICBHUmVmUHRyPEd0a1By
aW50U2V0dGluZ3M+IHByaW50U2V0dGluZ3MgPSBhZG9wdEdSZWYoZ3RrX3ByaW50X3NldHRpbmdz
X25ldygpKTsKKyAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVz
KEdfT0JKRUNUKHByaW50U2V0dGluZ3MuZ2V0KCkpKTsKKworICAgIEdSZWZQdHI8R3RrUGFnZVNl
dHVwPiBwYWdlU2V0dXAgPSBhZG9wdEdSZWYoZ3RrX3BhZ2Vfc2V0dXBfbmV3KCkpOworICAgIHRl
c3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QocGFnZVNl
dHVwLmdldCgpKSk7CisKKyAgICB3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX3NldF9wcmludF9zZXR0
aW5ncyhwcmludE9wZXJhdGlvbi5nZXQoKSwgcHJpbnRTZXR0aW5ncy5nZXQoKSk7CisgICAgd2Vi
a2l0X3ByaW50X29wZXJhdGlvbl9zZXRfcGFnZV9zZXR1cChwcmludE9wZXJhdGlvbi5nZXQoKSwg
cGFnZVNldHVwLmdldCgpKTsKKworICAgIGdfYXNzZXJ0KHdlYmtpdF9wcmludF9vcGVyYXRpb25f
Z2V0X3ByaW50X3NldHRpbmdzKHByaW50T3BlcmF0aW9uLmdldCgpKSA9PSBwcmludFNldHRpbmdz
LmdldCgpKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX2dldF9wYWdlX3Nl
dHVwKHByaW50T3BlcmF0aW9uLmdldCgpKSA9PSBwYWdlU2V0dXAuZ2V0KCkpOworfQorCitzdGF0
aWMgZ2Jvb2xlYW4gd2ViVmlld1ByaW50Q2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywg
V2ViS2l0UHJpbnRPcGVyYXRpb24qIHByaW50T3BlcmF0aW9uLCBXZWJWaWV3VGVzdCogdGVzdCkK
K3sKKyAgICBnX2Fzc2VydCh3ZWJWaWV3ID09IHRlc3QtPm1fd2ViVmlldyk7CisKKyAgICBnX2Fz
c2VydChXRUJLSVRfSVNfUFJJTlRfT1BFUkFUSU9OKHByaW50T3BlcmF0aW9uKSk7CisgICAgdGVz
dC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChwcmludE9w
ZXJhdGlvbikpOworCisgICAgZ19hc3NlcnQoIXdlYmtpdF9wcmludF9vcGVyYXRpb25fZ2V0X3By
aW50X3NldHRpbmdzKHByaW50T3BlcmF0aW9uKSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9wcmlu
dF9vcGVyYXRpb25fZ2V0X3BhZ2Vfc2V0dXAocHJpbnRPcGVyYXRpb24pKTsKKworICAgIGdfbWFp
bl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7CisKKyAgICByZXR1cm4gVFJVRTsKK30KKwor
c3RhdGljIHZvaWQgdGVzdFdlYlZpZXdQcmludChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9p
bnRlcikKK3sKKyAgICBnX3NpZ25hbF9jb25uZWN0KHRlc3QtPm1fd2ViVmlldywgInByaW50Iiwg
R19DQUxMQkFDSyh3ZWJWaWV3UHJpbnRDYWxsYmFjayksIHRlc3QpOworICAgIHRlc3QtPmxvYWRI
dG1sKCI8aHRtbD48Ym9keSBvbkxvYWQ9XCJwcmludCgpO1wiPldlYktpdEdUSysgcHJpbnRpbmcg
dGVzdDwvYm9keT48L2h0bWw+IiwgMCk7CisgICAgZ19tYWluX2xvb3BfcnVuKHRlc3QtPm1fbWFp
bkxvb3ApOworfQorCisjaWZkZWYgSEFWRV9HVEtfVU5JWF9QUklOVElORworY2xhc3MgUHJpbnRU
ZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJ
WFRVUkUoUHJpbnRUZXN0KTsKKworICAgIHN0YXRpYyB2b2lkIHByaW50RmluaXNoZWRDYWxsYmFj
ayhXZWJLaXRQcmludE9wZXJhdGlvbiosIFByaW50VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAg
IGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7CisgICAgfQorCisgICAgc3RhdGlj
IHZvaWQgcHJpbnRGYWlsZWRDYWxsYmFjayhXZWJLaXRQcmludE9wZXJhdGlvbiosIEdFcnJvciog
ZXJyb3IsIFByaW50VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KHRlc3QtPm1f
ZXhwZWN0ZWRFcnJvcik7CisgICAgICAgIGdfYXNzZXJ0KGVycm9yKTsKKyAgICAgICAgZ19hc3Nl
cnQoZ19lcnJvcl9tYXRjaGVzKGVycm9yLCBXRUJLSVRfUFJJTlRfRVJST1IsIHRlc3QtPm1fZXhw
ZWN0ZWRFcnJvcikpOworICAgIH0KKworICAgIFByaW50VGVzdCgpCisgICAgICAgIDogbV9leHBl
Y3RlZEVycm9yKDApCisgICAgeworICAgICAgICBtX3ByaW50T3BlcmF0aW9uID0gYWRvcHRHUmVm
KHdlYmtpdF9wcmludF9vcGVyYXRpb25fbmV3KG1fd2ViVmlldykpOworICAgICAgICBhc3NlcnRP
YmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKG1fcHJpbnRPcGVyYXRpb24u
Z2V0KCkpKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3ByaW50T3BlcmF0aW9uLmdldCgp
LCAiZmluaXNoZWQiLCBHX0NBTExCQUNLKHByaW50RmluaXNoZWRDYWxsYmFjayksIHRoaXMpOwor
ICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fcHJpbnRPcGVyYXRpb24uZ2V0KCksICJmYWlsZWQi
LCBHX0NBTExCQUNLKHByaW50RmFpbGVkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgZ2Jvb2xlYW4gdGVzdFByaW50T3BlcmF0aW9uUHJpbnRQcmludGVyKEd0a1ByaW50ZXIq
IHByaW50ZXIsIGdwb2ludGVyIHVzZXJEYXRhKQorICAgIHsKKyAgICAgICAgaWYgKHN0cmNtcChn
dGtfcHJpbnRlcl9nZXRfbmFtZShwcmludGVyKSwgIlByaW50IHRvIEZpbGUiKSkKKyAgICAgICAg
ICAgIHJldHVybiBGQUxTRTsKKworICAgICAgICBHdGtQcmludGVyKiogZm91bmRQcmludGVyID0g
c3RhdGljX2Nhc3Q8R3RrUHJpbnRlcioqPih1c2VyRGF0YSk7CisgICAgICAgICpmb3VuZFByaW50
ZXIgPSBzdGF0aWNfY2FzdDxHdGtQcmludGVyKj4oZ19vYmplY3RfcmVmKHByaW50ZXIpKTsKKyAg
ICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgR3RrUHJpbnRlciogZmluZFByaW50VG9G
aWxlUHJpbnRlcigpCisgICAgeworICAgICAgICBHdGtQcmludGVyKiBwcmludGVyID0gMDsKKyAg
ICAgICAgZ3RrX2VudW1lcmF0ZV9wcmludGVycyh0ZXN0UHJpbnRPcGVyYXRpb25QcmludFByaW50
ZXIsICZwcmludGVyLCAwLCBUUlVFKTsKKyAgICAgICAgcmV0dXJuIHByaW50ZXI7CisgICAgfQor
CisgICAgdm9pZCB3YWl0VW50aWxQcmludEZpbmlzaGVkKCkKKyAgICB7CisgICAgICAgIGdfbWFp
bl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBHUmVmUHRyPFdlYktpdFByaW50
T3BlcmF0aW9uPiBtX3ByaW50T3BlcmF0aW9uOworICAgIHVuc2lnbmVkIGludCBtX2V4cGVjdGVk
RXJyb3I7Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0UHJpbnRPcGVyYXRpb25QcmludChQcmludFRl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxi
b2R5PldlYktpdEdUSysgcHJpbnRpbmcgdGVzdDwvYm9keT48L2h0bWw+IiwgMCk7CisgICAgdGVz
dC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBHUmVmUHRyPEd0a1ByaW50ZXI+IHBy
aW50ZXIgPSBhZG9wdEdSZWYodGVzdC0+ZmluZFByaW50VG9GaWxlUHJpbnRlcigpKTsKKyAgICBp
ZiAoIXByaW50ZXIpIHsKKyAgICAgICAgZ19tZXNzYWdlKCIlcyIsICJDYW5ub3QgdGVzdCBXZWJL
aXRQcmludE9wZXJhdGlvbi9wcmludDogbm8gc3VpdGFibGUgcHJpbnRlciBmb3VuZCIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgR093blB0cjxjaGFyPiBvdXRwdXRGaWxlbmFtZShn
X2J1aWxkX2ZpbGVuYW1lKGtUZW1wRGlyZWN0b3J5LCAid2Via2l0LXByaW50LnBkZiIsIE5VTEwp
KTsKKyAgICBHUmVmUHRyPEdGaWxlPiBvdXRwdXRGaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdf
Zm9yX3BhdGgob3V0cHV0RmlsZW5hbWUuZ2V0KCkpKTsKKyAgICBHT3duUHRyPGNoYXI+IG91dHB1
dFVSSShnX2ZpbGVfZ2V0X3VyaShvdXRwdXRGaWxlLmdldCgpKSk7CisKKyAgICBHUmVmUHRyPEd0
a1ByaW50U2V0dGluZ3M+IHByaW50U2V0dGluZ3MgPSBhZG9wdEdSZWYoZ3RrX3ByaW50X3NldHRp
bmdzX25ldygpKTsKKyAgICBndGtfcHJpbnRfc2V0dGluZ3Nfc2V0X3ByaW50ZXIocHJpbnRTZXR0
aW5ncy5nZXQoKSwgZ3RrX3ByaW50ZXJfZ2V0X25hbWUocHJpbnRlci5nZXQoKSkpOworICAgIGd0
a19wcmludF9zZXR0aW5nc19zZXQocHJpbnRTZXR0aW5ncy5nZXQoKSwgR1RLX1BSSU5UX1NFVFRJ
TkdTX09VVFBVVF9VUkksIG91dHB1dFVSSS5nZXQoKSk7CisKKyAgICB3ZWJraXRfcHJpbnRfb3Bl
cmF0aW9uX3NldF9wcmludF9zZXR0aW5ncyh0ZXN0LT5tX3ByaW50T3BlcmF0aW9uLmdldCgpLCBw
cmludFNldHRpbmdzLmdldCgpKTsKKyAgICB3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX3ByaW50KHRl
c3QtPm1fcHJpbnRPcGVyYXRpb24uZ2V0KCkpOworICAgIHRlc3QtPndhaXRVbnRpbFByaW50Rmlu
aXNoZWQoKTsKKworICAgIEdSZWZQdHI8R0ZpbGVJbmZvPiBmaWxlSW5mbyA9IGFkb3B0R1JlZihn
X2ZpbGVfcXVlcnlfaW5mbyhvdXRwdXRGaWxlLmdldCgpLCBHX0ZJTEVfQVRUUklCVVRFX1NUQU5E
QVJEX1NJWkUgIiwiIEdfRklMRV9BVFRSSUJVVEVfU1RBTkRBUkRfQ09OVEVOVF9UWVBFLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxHRmlsZVF1ZXJ5SW5mb0ZsYWdzPigwKSwgMCwgMCkpOworICAgIGdfYXNz
ZXJ0KGZpbGVJbmZvLmdldCgpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19maWxlX2luZm9fZ2V0
X3NpemUoZmlsZUluZm8uZ2V0KCkpLCA+LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoZ19maWxl
X2luZm9fZ2V0X2NvbnRlbnRfdHlwZShmaWxlSW5mby5nZXQoKSksID09LCAiYXBwbGljYXRpb24v
cGRmIik7CisKKyAgICBnX2ZpbGVfZGVsZXRlKG91dHB1dEZpbGUuZ2V0KCksIDAsIDApOworfQor
CitzdGF0aWMgdm9pZCB0ZXN0UHJpbnRPcGVyYXRpb25FcnJvcnMoUHJpbnRUZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keT5XZWJLaXRH
VEsrIHByaW50aW5nIGVycm9ycyB0ZXN0PC9ib2R5PjwvaHRtbD4iLCAwKTsKKyAgICB0ZXN0LT53
YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIEdSZWZQdHI8R3RrUHJpbnRlcj4gcHJpbnRl
ciA9IGFkb3B0R1JlZih0ZXN0LT5maW5kUHJpbnRUb0ZpbGVQcmludGVyKCkpOworICAgIGlmICgh
cHJpbnRlcikgeworICAgICAgICBnX21lc3NhZ2UoIiVzIiwgIkNhbm5vdCB0ZXN0IFdlYktpdFBy
aW50T3BlcmF0aW9uL3ByaW50OiBubyBzdWl0YWJsZSBwcmludGVyIGZvdW5kIik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyBHZW5lcmFsIEVycm9yOiBpbnZhbGlkIGZpbGVuYW1l
LgorICAgIHRlc3QtPm1fZXhwZWN0ZWRFcnJvciA9IFdFQktJVF9QUklOVF9FUlJPUl9HRU5FUkFM
OworICAgIEdSZWZQdHI8R3RrUHJpbnRTZXR0aW5ncz4gcHJpbnRTZXR0aW5ncyA9IGFkb3B0R1Jl
ZihndGtfcHJpbnRfc2V0dGluZ3NfbmV3KCkpOworICAgIGd0a19wcmludF9zZXR0aW5nc19zZXRf
cHJpbnRlcihwcmludFNldHRpbmdzLmdldCgpLCBndGtfcHJpbnRlcl9nZXRfbmFtZShwcmludGVy
LmdldCgpKSk7CisgICAgZ3RrX3ByaW50X3NldHRpbmdzX3NldChwcmludFNldHRpbmdzLmdldCgp
LCBHVEtfUFJJTlRfU0VUVElOR1NfT1VUUFVUX1VSSSwgImZpbGU6Ly8vZm9vL2JhciIpOworICAg
IHdlYmtpdF9wcmludF9vcGVyYXRpb25fc2V0X3ByaW50X3NldHRpbmdzKHRlc3QtPm1fcHJpbnRP
cGVyYXRpb24uZ2V0KCksIHByaW50U2V0dGluZ3MuZ2V0KCkpOworICAgIHdlYmtpdF9wcmludF9v
cGVyYXRpb25fcHJpbnQodGVzdC0+bV9wcmludE9wZXJhdGlvbi5nZXQoKSk7CisgICAgdGVzdC0+
d2FpdFVudGlsUHJpbnRGaW5pc2hlZCgpOworCisgICAgLy8gUHJpbnRlciBub3QgZm91bmQgZXJy
b3IuCisgICAgdGVzdC0+bV9leHBlY3RlZEVycm9yID0gV0VCS0lUX1BSSU5UX0VSUk9SX1BSSU5U
RVJfTk9UX0ZPVU5EOworICAgIGd0a19wcmludF9zZXR0aW5nc19zZXRfcHJpbnRlcihwcmludFNl
dHRpbmdzLmdldCgpLCAiVGhlIGZha2UgV2ViS2l0IHByaW50ZXIiKTsKKyAgICB3ZWJraXRfcHJp
bnRfb3BlcmF0aW9uX3ByaW50KHRlc3QtPm1fcHJpbnRPcGVyYXRpb24uZ2V0KCkpOworICAgIHRl
c3QtPndhaXRVbnRpbFByaW50RmluaXNoZWQoKTsKKworICAgIC8vIE5vIHBhZ2VzIHRvIHByaW50
OiBwcmludCBldmVuIHBhZ2VzIGZvciBhIHNpbmdsZSBwYWdlIGRvY3VtZW50LgorICAgIHRlc3Qt
Pm1fZXhwZWN0ZWRFcnJvciA9IFdFQktJVF9QUklOVF9FUlJPUl9JTlZBTElEX1BBR0VfUkFOR0U7
CisgICAgZ3RrX3ByaW50X3NldHRpbmdzX3NldF9wcmludGVyKHByaW50U2V0dGluZ3MuZ2V0KCks
IGd0a19wcmludGVyX2dldF9uYW1lKHByaW50ZXIuZ2V0KCkpKTsKKyAgICBndGtfcHJpbnRfc2V0
dGluZ3Nfc2V0X3BhZ2Vfc2V0KHByaW50U2V0dGluZ3MuZ2V0KCksIEdUS19QQUdFX1NFVF9FVkVO
KTsKKyAgICB3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX3ByaW50KHRlc3QtPm1fcHJpbnRPcGVyYXRp
b24uZ2V0KCkpOworICAgIHRlc3QtPndhaXRVbnRpbFByaW50RmluaXNoZWQoKTsKK30KKyNlbmRp
ZiAvLyBIQVZFX0dUS19VTklYX1BSSU5USU5HCisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICBr
VGVtcERpcmVjdG9yeSA9IGdfZGlyX21ha2VfdG1wKCJXZWJLaXQyVGVzdHMtWFhYWFhYIiwgMCk7
CisgICAgZ19hc3NlcnQoa1RlbXBEaXJlY3RvcnkpOworCisgICAgV2ViVmlld1Rlc3Q6OmFkZCgi
V2ViS2l0UHJpbnRPcGVyYXRpb24iLCAicHJpbnRpbmctc2V0dGluZ3MiLCB0ZXN0UHJpbnRPcGVy
YXRpb25QcmludFNldHRpbmdzKTsKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3
IiwgInByaW50IiwgdGVzdFdlYlZpZXdQcmludCk7CisjaWZkZWYgSEFWRV9HVEtfVU5JWF9QUklO
VElORworICAgIFByaW50VGVzdDo6YWRkKCJXZWJLaXRQcmludE9wZXJhdGlvbiIsICJwcmludCIs
IHRlc3RQcmludE9wZXJhdGlvblByaW50KTsKKyAgICBQcmludFRlc3Q6OmFkZCgiV2ViS2l0UHJp
bnRPcGVyYXRpb24iLCAicHJpbnQtZXJyb3JzIiwgdGVzdFByaW50T3BlcmF0aW9uRXJyb3JzKTsK
KyNlbmRpZgorfQorCit2b2lkIGFmdGVyQWxsKCkKK3sKKyAgICBnX3JtZGlyKGtUZW1wRGlyZWN0
b3J5KTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0
ay9UZXN0UmVzb3VyY2VzLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0
ay9UZXN0UmVzb3VyY2VzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41
N2YxODJjCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXQyR3RrL1Rlc3RSZXNvdXJjZXMuY3BwCkBAIC0wLDAgKzEsNzg5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUg
IldlYktpdFRlc3RTZXJ2ZXIuaCIKKyNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisKK3N0YXRp
YyBXZWJLaXRUZXN0U2VydmVyKiBrU2VydmVyOworCitzdGF0aWMgY29uc3QgY2hhcioga0luZGV4
SHRtbCA9CisgICAgIjxodG1sPjxoZWFkPiIKKyAgICAiIDxsaW5rIHJlbD0nc3R5bGVzaGVldCcg
aHJlZj0nL3N0eWxlLmNzcycgdHlwZT0ndGV4dC9jc3MnPiIKKyAgICAiIDxzY3JpcHQgbGFuZ3Vh
Z2U9J2phdmFzY3JpcHQnIHNyYz0nL2phdmFzY3JpcHQuanMnPjwvc2NyaXB0PiIKKyAgICAiPC9o
ZWFkPjxib2R5PldlYktpdEdUSysgcmVzb3VyY2VzIHRlc3Q8L2JvZHk+PC9odG1sPiI7CisKK3N0
YXRpYyBjb25zdCBjaGFyKiBrU3R5bGVDU1MgPQorICAgICJib2R5IHsiCisgICAgIiAgICBtYXJn
aW46IDBweDsiCisgICAgIiAgICBwYWRkaW5nOiAwcHg7IgorICAgICIgICAgZm9udC1mYW1pbHk6
IHNhbnMtc2VyaWY7IgorICAgICIgICAgYmFja2dyb3VuZDogdXJsKC9ibGFuay5pY28pIDAgMCBu
by1yZXBlYXQ7IgorICAgICIgICAgY29sb3I6IGJsYWNrOyIKKyAgICAifSI7CisKK3N0YXRpYyBj
b25zdCBjaGFyKiBrSmF2YXNjcmlwdCA9ICJmdW5jdGlvbiBmb28gKCkgeyB2YXIgYSA9IDE7IH0i
OworCitjbGFzcyBSZXNvdXJjZXNUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3QgeworcHVibGljOgor
ICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoUmVzb3VyY2VzVGVzdCk7CisKKyAgICBzdGF0aWMg
dm9pZCByZXNvdXJjZVNlbnRSZXF1ZXN0Q2FsbGJhY2soV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291
cmNlLCBXZWJLaXRVUklSZXF1ZXN0KiByZXF1ZXN0LCBXZWJLaXRVUklSZXNwb25zZSogcmVkaXJl
Y3RSZXNwb25zZSwgUmVzb3VyY2VzVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPmFz
c2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QocmVxdWVzdCkpOwor
ICAgICAgICBpZiAocmVkaXJlY3RSZXNwb25zZSkKKyAgICAgICAgICAgIHRlc3QtPmFzc2VydE9i
amVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QocmVkaXJlY3RSZXNwb25zZSkp
OworICAgICAgICB0ZXN0LT5yZXNvdXJjZVNlbnRSZXF1ZXN0KHJlc291cmNlLCByZXF1ZXN0LCBy
ZWRpcmVjdFJlc3BvbnNlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZXNvdXJjZVJlY2Vp
dmVkUmVzcG9uc2VDYWxsYmFjayhXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIEdQYXJhbVNw
ZWMqLCBSZXNvdXJjZXNUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0
X3dlYl9yZXNvdXJjZV9nZXRfcmVzcG9uc2UocmVzb3VyY2UpKTsKKyAgICAgICAgdGVzdC0+cmVz
b3VyY2VSZWNlaXZlZFJlc3BvbnNlKHJlc291cmNlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9p
ZCByZXNvdXJjZVJlY2VpdmVkRGF0YUNhbGxiYWNrKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJj
ZSwgZ3VpbnQ2NCBieXRlc1JlY2VpdmVkLCBSZXNvdXJjZXNUZXN0KiB0ZXN0KQorICAgIHsKKyAg
ICAgICAgdGVzdC0+cmVzb3VyY2VSZWNlaXZlZERhdGEocmVzb3VyY2UsIGJ5dGVzUmVjZWl2ZWQp
OworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHJlc291cmNlRmluaXNoZWRDYWxsYmFjayhXZWJL
aXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIFJlc291cmNlc1Rlc3QqIHRlc3QpCisgICAgeworICAg
ICAgICB0ZXN0LT5yZXNvdXJjZUZpbmlzaGVkKHJlc291cmNlKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgdm9pZCByZXNvdXJjZUZhaWxlZENhbGxiYWNrKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJj
ZSwgR0Vycm9yKiBlcnJvciwgUmVzb3VyY2VzVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIGdf
YXNzZXJ0KGVycm9yKTsKKyAgICAgICAgdGVzdC0+cmVzb3VyY2VGYWlsZWQocmVzb3VyY2UsIGVy
cm9yKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZXNvdXJjZUxvYWRTdGFydGVkQ2FsbGJh
Y2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBX
ZWJLaXRVUklSZXF1ZXN0KiByZXF1ZXN0LCBSZXNvdXJjZXNUZXN0KiB0ZXN0KQorICAgIHsKKyAg
ICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVD
VChyZXNvdXJjZSkpOworICAgICAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVz
dEZpbmlzaGVzKEdfT0JKRUNUKHJlcXVlc3QpKTsKKworICAgICAgICAvLyBJZ25vcmUgZmF2aWNv
bnMuCisgICAgICAgIGlmIChnX3N0cl9oYXNfc3VmZml4KHdlYmtpdF91cmlfcmVxdWVzdF9nZXRf
dXJpKHJlcXVlc3QpLCAiZmF2aWNvbi5pY28iKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICB0ZXN0LT5yZXNvdXJjZUxvYWRTdGFydGVkKHJlc291cmNlLCByZXF1ZXN0KTsKKyAgICAg
ICAgZ19zaWduYWxfY29ubmVjdChyZXNvdXJjZSwgInNlbnQtcmVxdWVzdCIsIEdfQ0FMTEJBQ0so
cmVzb3VyY2VTZW50UmVxdWVzdENhbGxiYWNrKSwgdGVzdCk7CisgICAgICAgIGdfc2lnbmFsX2Nv
bm5lY3QocmVzb3VyY2UsICJub3RpZnk6OnJlc3BvbnNlIiwgR19DQUxMQkFDSyhyZXNvdXJjZVJl
Y2VpdmVkUmVzcG9uc2VDYWxsYmFjayksIHRlc3QpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0
KHJlc291cmNlLCAicmVjZWl2ZWQtZGF0YSIsIEdfQ0FMTEJBQ0socmVzb3VyY2VSZWNlaXZlZERh
dGFDYWxsYmFjayksIHRlc3QpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KHJlc291cmNlLCAi
ZmluaXNoZWQiLCBHX0NBTExCQUNLKHJlc291cmNlRmluaXNoZWRDYWxsYmFjayksIHRlc3QpOwor
ICAgICAgICBnX3NpZ25hbF9jb25uZWN0KHJlc291cmNlLCAiZmFpbGVkIiwgR19DQUxMQkFDSyhy
ZXNvdXJjZUZhaWxlZENhbGxiYWNrKSwgdGVzdCk7CisgICAgfQorCisgICAgdm9pZCBjbGVhclN1
YnJlc291cmNlcygpCisgICAgeworICAgICAgICBnX2xpc3RfZnJlZV9mdWxsKG1fc3VicmVzb3Vy
Y2VzLCByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5PihnX29iamVjdF91bnJlZikpOwor
ICAgICAgICBtX3N1YnJlc291cmNlcyA9IDA7CisgICAgfQorCisgICAgUmVzb3VyY2VzVGVzdCgp
CisgICAgICAgIDogV2ViVmlld1Rlc3QoKQorICAgICAgICAsIG1fcmVzb3VyY2VzTG9hZGVkKDAp
CisgICAgICAgICwgbV9yZXNvdXJjZXNUb0xvYWQoMCkKKyAgICAgICAgLCBtX3Jlc291cmNlRGF0
YVNpemUoMCkKKyAgICAgICAgLCBtX3N1YnJlc291cmNlcygwKQorICAgIHsKKyAgICAgICAgZ19z
aWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJyZXNvdXJjZS1sb2FkLXN0YXJ0ZWQiLCBHX0NBTExC
QUNLKHJlc291cmNlTG9hZFN0YXJ0ZWRDYWxsYmFjayksIHRoaXMpOworICAgIH0KKworICAgIH5S
ZXNvdXJjZXNUZXN0KCkKKyAgICB7CisgICAgICAgIGNsZWFyU3VicmVzb3VyY2VzKCk7CisgICAg
fQorCisgICAgdmlydHVhbCB2b2lkIHJlc291cmNlTG9hZFN0YXJ0ZWQoV2ViS2l0V2ViUmVzb3Vy
Y2UqIHJlc291cmNlLCBXZWJLaXRVUklSZXF1ZXN0KiByZXF1ZXN0KQorICAgIHsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgcmVzb3VyY2VTZW50UmVxdWVzdChXZWJLaXRXZWJSZXNvdXJjZSog
cmVzb3VyY2UsIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QsIFdlYktpdFVSSVJlc3BvbnNlKiBy
ZWRpcmVjdFJlc3BvbnNlKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVzb3Vy
Y2VSZWNlaXZlZFJlc3BvbnNlKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSkKKyAgICB7Cisg
ICAgfQorCisgICAgdmlydHVhbCB2b2lkIHJlc291cmNlUmVjZWl2ZWREYXRhKFdlYktpdFdlYlJl
c291cmNlKiByZXNvdXJjZSwgZ3VpbnQ2NCBieXRlc1JlY2VpdmVkKQorICAgIHsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgcmVzb3VyY2VGaW5pc2hlZChXZWJLaXRXZWJSZXNvdXJjZSogcmVz
b3VyY2UpCisgICAgeworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNo
ZWQocmVzb3VyY2UsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOworICAg
ICAgICBpZiAod2Via2l0X3dlYl92aWV3X2dldF9tYWluX3Jlc291cmNlKG1fd2ViVmlldykgIT0g
cmVzb3VyY2UpCisgICAgICAgICAgICBtX3N1YnJlc291cmNlcyA9IGdfbGlzdF9wcmVwZW5kKG1f
c3VicmVzb3VyY2VzLCBnX29iamVjdF9yZWYocmVzb3VyY2UpKTsKKyAgICAgICAgaWYgKCsrbV9y
ZXNvdXJjZXNMb2FkZWQgPT0gbV9yZXNvdXJjZXNUb0xvYWQpCisgICAgICAgICAgICBnX21haW5f
bG9vcF9xdWl0KG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCByZXNvdXJj
ZUZhaWxlZChXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIEdFcnJvciogZXJyb3IpCisgICAg
eworICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgIH0KKworICAgIHZvaWQgd2Fp
dFVudGlsUmVzb3VyY2VzTG9hZGVkKHNpemVfdCByZXNvdXJjZXNDb3VudCkKKyAgICB7CisgICAg
ICAgIG1fcmVzb3VyY2VzTG9hZGVkID0gMDsKKyAgICAgICAgbV9yZXNvdXJjZXNUb0xvYWQgPSBy
ZXNvdXJjZXNDb3VudDsKKyAgICAgICAgY2xlYXJTdWJyZXNvdXJjZXMoKTsKKyAgICAgICAgZ19t
YWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIEdMaXN0KiBzdWJyZXNvdXJj
ZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc3VicmVzb3VyY2VzOworICAgIH0KKworICAg
IHN0YXRpYyB2b2lkIHJlc291cmNlR2V0RGF0YUNhbGxiYWNrKEdPYmplY3QqIG9iamVjdCwgR0Fz
eW5jUmVzdWx0KiByZXN1bHQsIGdwb2ludGVyIHVzZXJEYXRhKQorICAgIHsKKyAgICAgICAgc2l6
ZV90IGRhdGFTaXplOworICAgICAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgICAgIHVu
c2lnbmVkIGNoYXIqIGRhdGEgPSB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF9kYXRhX2ZpbmlzaChX
RUJLSVRfV0VCX1JFU09VUkNFKG9iamVjdCksIHJlc3VsdCwgJmRhdGFTaXplLCAmZXJyb3Iub3V0
UHRyKCkpOworICAgICAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOworICAgICAgICBnX2Fzc2Vy
dChkYXRhKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGRhdGFTaXplLCA+LCAwKTsKKworICAg
ICAgICBSZXNvdXJjZXNUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VzVGVzdCo+KHVz
ZXJEYXRhKTsKKyAgICAgICAgdGVzdC0+bV9yZXNvdXJjZURhdGEuc2V0KHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KGRhdGEpKTsKKyAgICAgICAgdGVzdC0+bV9yZXNvdXJjZURhdGFTaXplID0gZGF0
YVNpemU7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7CisgICAg
fQorCisgICAgdm9pZCBjaGVja1Jlc291cmNlRGF0YShXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3Vy
Y2UpCisgICAgeworICAgICAgICBtX3Jlc291cmNlRGF0YVNpemUgPSAwOworICAgICAgICB3ZWJr
aXRfd2ViX3Jlc291cmNlX2dldF9kYXRhKHJlc291cmNlLCAwLCByZXNvdXJjZUdldERhdGFDYWxs
YmFjaywgdGhpcyk7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKworICAg
ICAgICBjb25zdCBjaGFyKiB1cmkgPSB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF91cmkocmVzb3Vy
Y2UpOworICAgICAgICBpZiAodXJpID09IGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi8iKSkgewor
ICAgICAgICAgICAgZ19hc3NlcnRfY21waW50KG1fcmVzb3VyY2VEYXRhU2l6ZSwgPT0sIHN0cmxl
bihrSW5kZXhIdG1sKSk7CisgICAgICAgICAgICBnX2Fzc2VydCghc3RybmNtcChtX3Jlc291cmNl
RGF0YS5nZXQoKSwga0luZGV4SHRtbCwgbV9yZXNvdXJjZURhdGFTaXplKSk7CisgICAgICAgIH0g
ZWxzZSBpZiAodXJpID09IGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9zdHlsZS5jc3MiKSkgewor
ICAgICAgICAgICAgZ19hc3NlcnRfY21waW50KG1fcmVzb3VyY2VEYXRhU2l6ZSwgPT0sIHN0cmxl
bihrU3R5bGVDU1MpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KCFzdHJuY21wKG1fcmVzb3VyY2VE
YXRhLmdldCgpLCBrU3R5bGVDU1MsIG1fcmVzb3VyY2VEYXRhU2l6ZSkpOworICAgICAgICB9IGVs
c2UgaWYgKHVyaSA9PSBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvamF2YXNjcmlwdC5qcyIpKSB7
CisgICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQobV9yZXNvdXJjZURhdGFTaXplLCA9PSwgc3Ry
bGVuKGtKYXZhc2NyaXB0KSk7CisgICAgICAgICAgICBnX2Fzc2VydCghc3RybmNtcChtX3Jlc291
cmNlRGF0YS5nZXQoKSwga0phdmFzY3JpcHQsIG1fcmVzb3VyY2VEYXRhU2l6ZSkpOworICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgICAgIG1f
cmVzb3VyY2VEYXRhLmNsZWFyKCk7CisgICAgfQorCisgICAgc2l6ZV90IG1fcmVzb3VyY2VzTG9h
ZGVkOworICAgIHNpemVfdCBtX3Jlc291cmNlc1RvTG9hZDsKKyAgICBHT3duUHRyPGNoYXI+IG1f
cmVzb3VyY2VEYXRhOworICAgIHNpemVfdCBtX3Jlc291cmNlRGF0YVNpemU7CisgICAgR0xpc3Qq
IG1fc3VicmVzb3VyY2VzOworfTsKKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdSZXNvdXJjZXMo
UmVzb3VyY2VzVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICAvLyBOb3RoaW5nIGxv
YWRlZCB5ZXQsIHRoZXJlIHNob3VsbmQndCBiZSByZXNvdXJjZXMuCisgICAgZ19hc3NlcnQoIXdl
YmtpdF93ZWJfdmlld19nZXRfbWFpbl9yZXNvdXJjZSh0ZXN0LT5tX3dlYlZpZXcpKTsKKyAgICBn
X2Fzc2VydCghdGVzdC0+c3VicmVzb3VyY2VzKCkpOworCisgICAgLy8gTG9hZCBzaW1wbGUgcGFn
ZSB3aXRob3V0IHN1YnJlc291cmNlcy4KKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHk+
VGVzdGluZyBXZWJLaXRHVEsrPC9ib2R5PjwvaHRtbD4iLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50
aWxMb2FkRmluaXNoZWQoKTsKKyAgICBXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2UodGVzdC0+bV93ZWJWaWV3KTsKKyAgICBnX2Fz
c2VydChyZXNvdXJjZSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRf
dXJpKHRlc3QtPm1fd2ViVmlldyksID09LCB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF91cmkocmVz
b3VyY2UpKTsKKyAgICBnX2Fzc2VydCghdGVzdC0+c3VicmVzb3VyY2VzKCkpOworCisgICAgLy8g
TG9hZCBzaW1wbGUgcGFnZSB3aXRoIHN1YnJlc291cmNlcy4KKyAgICB0ZXN0LT5sb2FkVVJJKGtT
ZXJ2ZXItPmdldFVSSUZvclBhdGgoIi8iKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbFJl
c291cmNlc0xvYWRlZCg0KTsKKworICAgIHJlc291cmNlID0gd2Via2l0X3dlYl92aWV3X2dldF9t
YWluX3Jlc291cmNlKHRlc3QtPm1fd2ViVmlldyk7CisgICAgZ19hc3NlcnQocmVzb3VyY2UpOwor
ICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSh0ZXN0LT5tX3dlYlZp
ZXcpLCA9PSwgd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJpKHJlc291cmNlKSk7CisgICAgR0xp
c3QqIHN1YnJlc291cmNlcyA9IHRlc3QtPnN1YnJlc291cmNlcygpOworICAgIGdfYXNzZXJ0KHN1
YnJlc291cmNlcyk7CisgICAgZ19hc3NlcnRfY21waW50KGdfbGlzdF9sZW5ndGgoc3VicmVzb3Vy
Y2VzKSwgPT0sIDMpOworCisjaWYgMAorICAgIC8vIExvYWQgdGhlIHNhbWUgVVJJIGFnYWluLgor
ICAgIC8vIEZJWE1FOiB3ZSBuZWVkIGEgd29ya2Fyb3VuZCBmb3IgYnVnIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODUxMC4KKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2
ZXItPmdldFVSSUZvclBhdGgoIi8iKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbFJlc291
cmNlc0xvYWRlZCg0KTsKKyNlbmRpZgorCisgICAgLy8gUmVsb2FkLgorICAgIHdlYmtpdF93ZWJf
dmlld19yZWxvYWRfYnlwYXNzX2NhY2hlKHRlc3QtPm1fd2ViVmlldyk7CisgICAgdGVzdC0+d2Fp
dFVudGlsUmVzb3VyY2VzTG9hZGVkKDQpOworfQorCitjbGFzcyBTaW5nbGVSZXNvdXJjZUxvYWRU
ZXN0OiBwdWJsaWMgUmVzb3VyY2VzVGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1Rf
RklYVFVSRShTaW5nbGVSZXNvdXJjZUxvYWRUZXN0KTsKKworICAgIGVudW0gTG9hZEV2ZW50cyB7
CisgICAgICAgIFN0YXJ0ZWQsCisgICAgICAgIFNlbnRSZXF1ZXN0LAorICAgICAgICBSZWRpcmVj
dGVkLAorICAgICAgICBSZWNlaXZlZFJlc3BvbnNlLAorICAgICAgICBSZWNlaXZlZERhdGEsCisg
ICAgICAgIEZpbmlzaGVkLAorICAgICAgICBGYWlsZWQKKyAgICB9OworCisgICAgU2luZ2xlUmVz
b3VyY2VMb2FkVGVzdCgpCisgICAgICAgIDogUmVzb3VyY2VzVGVzdCgpCisgICAgICAgICwgbV9y
ZXNvdXJjZURhdGFSZWNlaXZlZCgwKQorICAgIHsKKyAgICAgICAgIG1fcmVzb3VyY2VzVG9Mb2Fk
ID0gMjsKKyAgICB9CisKKyAgICB2b2lkIHJlc291cmNlTG9hZFN0YXJ0ZWQoV2ViS2l0V2ViUmVz
b3VyY2UqIHJlc291cmNlLCBXZWJLaXRVUklSZXF1ZXN0KiByZXF1ZXN0KQorICAgIHsKKyAgICAg
ICAgaWYgKHJlc291cmNlID09IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9yZXNvdXJjZShtX3dl
YlZpZXcpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fcmVzb3VyY2VEYXRhUmVj
ZWl2ZWQgPSAwOworICAgICAgICBtX3Jlc291cmNlID0gcmVzb3VyY2U7CisgICAgICAgIG1fbG9h
ZEV2ZW50cy5hcHBlbmQoU3RhcnRlZCk7CisgICAgfQorCisgICAgdm9pZCByZXNvdXJjZVNlbnRS
ZXF1ZXN0KFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgV2ViS2l0VVJJUmVxdWVzdCogcmVx
dWVzdCwgV2ViS2l0VVJJUmVzcG9uc2UqIHJlZGlyZWN0UmVzcG9uc2UpCisgICAgeworICAgICAg
ICBpZiAocmVzb3VyY2UgIT0gbV9yZXNvdXJjZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBpZiAocmVkaXJlY3RSZXNwb25zZSkKKyAgICAgICAgICAgIG1fbG9hZEV2ZW50cy5hcHBl
bmQoUmVkaXJlY3RlZCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fbG9hZEV2ZW50cy5h
cHBlbmQoU2VudFJlcXVlc3QpOworICAgIH0KKworICAgIHZvaWQgcmVzb3VyY2VSZWNlaXZlZFJl
c3BvbnNlKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSkKKyAgICB7CisgICAgICAgIGlmIChy
ZXNvdXJjZSAhPSBtX3Jlc291cmNlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1f
bG9hZEV2ZW50cy5hcHBlbmQoUmVjZWl2ZWRSZXNwb25zZSk7CisgICAgfQorCisgICAgdm9pZCBy
ZXNvdXJjZVJlY2VpdmVkRGF0YShXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIGd1aW50NjQg
Ynl0ZXNSZWNlaXZlZCkKKyAgICB7CisgICAgICAgIGlmIChyZXNvdXJjZSAhPSBtX3Jlc291cmNl
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fcmVzb3VyY2VEYXRhUmVjZWl2ZWQg
Kz0gYnl0ZXNSZWNlaXZlZDsKKyAgICAgICAgaWYgKCFtX2xvYWRFdmVudHMuY29udGFpbnMoUmVj
ZWl2ZWREYXRhKSkKKyAgICAgICAgICAgIG1fbG9hZEV2ZW50cy5hcHBlbmQoUmVjZWl2ZWREYXRh
KTsKKyAgICB9CisKKyAgICB2b2lkIHJlc291cmNlRmluaXNoZWQoV2ViS2l0V2ViUmVzb3VyY2Uq
IHJlc291cmNlKQorICAgIHsKKyAgICAgICAgaWYgKHJlc291cmNlICE9IG1fcmVzb3VyY2UpIHsK
KyAgICAgICAgICAgIFJlc291cmNlc1Rlc3Q6OnJlc291cmNlRmluaXNoZWQocmVzb3VyY2UpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFtX2xvYWRFdmVu
dHMuY29udGFpbnMoRmFpbGVkKSkgeworICAgICAgICAgICAgV2ViS2l0VVJJUmVzcG9uc2UqIHJl
c3BvbnNlID0gd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfcmVzcG9uc2UobV9yZXNvdXJjZS5nZXQo
KSk7CisgICAgICAgICAgICBnX2Fzc2VydChyZXNwb25zZSk7CisgICAgICAgICAgICBnX2Fzc2Vy
dF9jbXBpbnQod2Via2l0X3VyaV9yZXNwb25zZV9nZXRfY29udGVudF9sZW5ndGgocmVzcG9uc2Up
LCA9PSwgbV9yZXNvdXJjZURhdGFSZWNlaXZlZCk7CisgICAgICAgIH0KKyAgICAgICAgbV9sb2Fk
RXZlbnRzLmFwcGVuZChGaW5pc2hlZCk7CisgICAgICAgIFJlc291cmNlc1Rlc3Q6OnJlc291cmNl
RmluaXNoZWQocmVzb3VyY2UpOworICAgIH0KKworICAgIHZvaWQgcmVzb3VyY2VGYWlsZWQoV2Vi
S2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBHRXJyb3IqIGVycm9yKQorICAgIHsKKyAgICAgICAg
aWYgKHJlc291cmNlID09IG1fcmVzb3VyY2UpCisgICAgICAgICAgICBtX2xvYWRFdmVudHMuYXBw
ZW5kKEZhaWxlZCk7CisgICAgfQorCisgICAgdm9pZCB3YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5p
c2hlZCgpCisgICAgeworICAgICAgICBtX3Jlc291cmNlID0gMDsKKyAgICAgICAgbV9yZXNvdXJj
ZXNMb2FkZWQgPSAwOworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAg
fQorCisgICAgV2ViS2l0VVJJUmVzcG9uc2UqIHdhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlzaGVk
QW5kUmV0dXJuVVJJUmVzcG9uc2UoKQorICAgIHsKKyAgICAgICAgd2FpdFVudGlsUmVzb3VyY2VM
b2FkRmluaXNoZWQoKTsKKyAgICAgICAgZ19hc3NlcnQobV9yZXNvdXJjZSk7CisgICAgICAgIHJl
dHVybiB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF9yZXNwb25zZShtX3Jlc291cmNlLmdldCgpKTsK
KyAgICB9CisKKyAgICBHUmVmUHRyPFdlYktpdFdlYlJlc291cmNlPiBtX3Jlc291cmNlOworICAg
IFZlY3RvcjxMb2FkRXZlbnRzPiBtX2xvYWRFdmVudHM7CisgICAgZ3VpbnQ2NCBtX3Jlc291cmNl
RGF0YVJlY2VpdmVkOworfTsKKworc3RhdGljIHZvaWQgdGVzdFdlYlJlc291cmNlTG9hZGluZyhT
aW5nbGVSZXNvdXJjZUxvYWRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3Qt
PmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2phdmFzY3JpcHQuaHRtbCIpLmRhdGEo
KSk7CisgICAgdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fz
c2VydCh0ZXN0LT5tX3Jlc291cmNlKTsKKyAgICBWZWN0b3I8U2luZ2xlUmVzb3VyY2VMb2FkVGVz
dDo6TG9hZEV2ZW50cz4mIGV2ZW50cyA9IHRlc3QtPm1fbG9hZEV2ZW50czsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDUpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVu
dHNbMF0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpTdGFydGVkKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6U2VudFJlcXVl
c3QpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBTaW5nbGVSZXNvdXJjZUxv
YWRUZXN0OjpSZWNlaXZlZFJlc3BvbnNlKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzNd
LCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6UmVjZWl2ZWREYXRhKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoZXZlbnRzWzRdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6RmluaXNoZWQp
OworICAgIGV2ZW50cy5jbGVhcigpOworCisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRV
UklGb3JQYXRoKCIvcmVkaXJlY3RlZC1jc3MuaHRtbCIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2Fp
dFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3Jlc291
cmNlKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDYpOworICAgIGdf
YXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpTdGFy
dGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgU2luZ2xlUmVzb3VyY2VM
b2FkVGVzdDo6U2VudFJlcXVlc3QpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09
LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpSZWRpcmVjdGVkKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoZXZlbnRzWzNdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6UmVjZWl2ZWRSZXNwb25z
ZSk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1s0XSwgPT0sIFNpbmdsZVJlc291cmNlTG9h
ZFRlc3Q6OlJlY2VpdmVkRGF0YSk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1s1XSwgPT0s
IFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OkZpbmlzaGVkKTsKKyAgICBldmVudHMuY2xlYXIoKTsK
KworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2ludmFsaWQtY3Nz
Lmh0bWwiKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlzaGVk
KCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9yZXNvdXJjZSk7CisgICAgZ19hc3NlcnRfY21waW50
KGV2ZW50cy5zaXplKCksID09LCA0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9
PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6U3RhcnRlZCk7CisgICAgZ19hc3NlcnRfY21waW50
KGV2ZW50c1sxXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlNlbnRSZXF1ZXN0KTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6
RmFpbGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzNdLCA9PSwgU2luZ2xlUmVzb3Vy
Y2VMb2FkVGVzdDo6RmluaXNoZWQpOworICAgIGV2ZW50cy5jbGVhcigpOworfQorCitzdGF0aWMg
dm9pZCB0ZXN0V2ViUmVzb3VyY2VSZXNwb25zZShTaW5nbGVSZXNvdXJjZUxvYWRUZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQoreworICAgIC8vIE5vIGNhY2hlZCByZXNvdXJjZTogRmlyc3QgbG9h
ZC4KKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9qYXZhc2NyaXB0
Lmh0bWwiKS5kYXRhKCkpOworICAgIFdlYktpdFVSSVJlc3BvbnNlKiByZXNwb25zZSA9IHRlc3Qt
PndhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlzaGVkQW5kUmV0dXJuVVJJUmVzcG9uc2UoKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3VyaV9yZXNwb25zZV9nZXRfc3RhdHVzX2NvZGUocmVz
cG9uc2UpLCA9PSwgU09VUF9TVEFUVVNfT0spOworCisgICAgLy8gTm8gY2FjaGVkIHJlc291cmNl
OiBTZWNvbmQgbG9hZC4KKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgo
Ii9qYXZhc2NyaXB0Lmh0bWwiKS5kYXRhKCkpOworICAgIHJlc3BvbnNlID0gdGVzdC0+d2FpdFVu
dGlsUmVzb3VyY2VMb2FkRmluaXNoZWRBbmRSZXR1cm5VUklSZXNwb25zZSgpOworICAgIGdfYXNz
ZXJ0X2NtcGludCh3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF9zdGF0dXNfY29kZShyZXNwb25zZSks
ID09LCBTT1VQX1NUQVRVU19PSyk7CisKKyAgICAvLyBObyBjYWNoZWQgcmVzb3VyY2U6IFJlbG9h
ZC4KKyAgICB3ZWJraXRfd2ViX3ZpZXdfcmVsb2FkKHRlc3QtPm1fd2ViVmlldyk7CisgICAgcmVz
cG9uc2UgPSB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZEFuZFJldHVyblVSSVJl
c3BvbnNlKCk7CisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0X3N0
YXR1c19jb2RlKHJlc3BvbnNlKSwgPT0sIFNPVVBfU1RBVFVTX09LKTsKKworICAgIC8vIENhY2hl
ZCByZXNvdXJjZTogRmlyc3QgbG9hZC4KKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVS
SUZvclBhdGgoIi9pbWFnZS5odG1sIikuZGF0YSgpKTsKKyAgICByZXNwb25zZSA9IHRlc3QtPndh
aXRVbnRpbFJlc291cmNlTG9hZEZpbmlzaGVkQW5kUmV0dXJuVVJJUmVzcG9uc2UoKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQod2Via2l0X3VyaV9yZXNwb25zZV9nZXRfc3RhdHVzX2NvZGUocmVzcG9u
c2UpLCA9PSwgU09VUF9TVEFUVVNfT0spOworCisgICAgLy8gQ2FjaGVkIHJlc291cmNlOiBTZWNv
bmQgbG9hZC4KKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbWFn
ZS5odG1sIikuZGF0YSgpKTsKKyAgICByZXNwb25zZSA9IHRlc3QtPndhaXRVbnRpbFJlc291cmNl
TG9hZEZpbmlzaGVkQW5kUmV0dXJuVVJJUmVzcG9uc2UoKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
d2Via2l0X3VyaV9yZXNwb25zZV9nZXRfc3RhdHVzX2NvZGUocmVzcG9uc2UpLCA9PSwgU09VUF9T
VEFUVVNfT0spOworCisgICAgLy8gQ2FjaGVkIHJlc291cmNlOiBSZWxvYWQuCisgICAgd2Via2l0
X3dlYl92aWV3X3JlbG9hZCh0ZXN0LT5tX3dlYlZpZXcpOworICAgIHJlc3BvbnNlID0gdGVzdC0+
d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWRBbmRSZXR1cm5VUklSZXNwb25zZSgpOworICAg
IGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF9zdGF0dXNfY29kZShyZXNw
b25zZSksID09LCBTT1VQX1NUQVRVU19OT1RfTU9ESUZJRUQpOworfQorCitzdGF0aWMgdm9pZCB0
ZXN0V2ViUmVzb3VyY2VNaW1lVHlwZShTaW5nbGVSZXNvdXJjZUxvYWRUZXN0KiB0ZXN0LCBnY29u
c3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgi
L2phdmFzY3JpcHQuaHRtbCIpLmRhdGEoKSk7CisgICAgV2ViS2l0VVJJUmVzcG9uc2UqIHJlc3Bv
bnNlID0gdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWRBbmRSZXR1cm5VUklSZXNw
b25zZSgpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF9taW1l
X3R5cGUocmVzcG9uc2UpLCA9PSwgInRleHQvamF2YXNjcmlwdCIpOworCisgICAgdGVzdC0+bG9h
ZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvaW1hZ2UuaHRtbCIpLmRhdGEoKSk7CisgICAg
cmVzcG9uc2UgPSB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZEFuZFJldHVyblVS
SVJlc3BvbnNlKCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0
X21pbWVfdHlwZShyZXNwb25zZSksID09LCAiaW1hZ2Uvdm5kLm1pY3Jvc29mdC5pY29uIik7CisK
KyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9yZWRpcmVjdGVkLWNz
cy5odG1sIikuZGF0YSgpKTsKKyAgICByZXNwb25zZSA9IHRlc3QtPndhaXRVbnRpbFJlc291cmNl
TG9hZEZpbmlzaGVkQW5kUmV0dXJuVVJJUmVzcG9uc2UoKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIo
d2Via2l0X3VyaV9yZXNwb25zZV9nZXRfbWltZV90eXBlKHJlc3BvbnNlKSwgPT0sICJ0ZXh0L2Nz
cyIpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViUmVzb3VyY2VTdWdnZXN0ZWRGaWxlbmFtZShT
aW5nbGVSZXNvdXJjZUxvYWRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3Qt
PmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2phdmFzY3JpcHQuaHRtbCIpLmRhdGEo
KSk7CisgICAgV2ViS2l0VVJJUmVzcG9uc2UqIHJlc3BvbnNlID0gdGVzdC0+d2FpdFVudGlsUmVz
b3VyY2VMb2FkRmluaXNoZWRBbmRSZXR1cm5VUklSZXNwb25zZSgpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF9zdWdnZXN0ZWRfZmlsZW5hbWUocmVzcG9uc2Up
LCA9PSwgIkphdmFTY3JpcHQuanMiKTsKKworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0
VVJJRm9yUGF0aCgiL2ltYWdlLmh0bWwiKS5kYXRhKCkpOworICAgIHJlc3BvbnNlID0gdGVzdC0+
d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWRBbmRSZXR1cm5VUklSZXNwb25zZSgpOworICAg
IGdfYXNzZXJ0KCF3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF9zdWdnZXN0ZWRfZmlsZW5hbWUocmVz
cG9uc2UpKTsKK30KKworY2xhc3MgUmVzb3VyY2VVUklUcmFja2luZ1Rlc3Q6IHB1YmxpYyBTaW5n
bGVSZXNvdXJjZUxvYWRUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJF
KFJlc291cmNlVVJJVHJhY2tpbmdUZXN0KTsKKworICAgIFJlc291cmNlVVJJVHJhY2tpbmdUZXN0
KCkKKyAgICAgICAgOiBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0KCkKKyAgICB7CisgICAgfQorCisg
ICAgc3RhdGljIHZvaWQgdXJpQ2hhbmdlZChXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIEdQ
YXJhbVNwZWMqLCBSZXNvdXJjZVVSSVRyYWNraW5nVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAg
IGdfYXNzZXJ0KHJlc291cmNlID09IHRlc3QtPm1fcmVzb3VyY2UuZ2V0KCkpOworICAgICAgICBn
X2Fzc2VydF9jbXBzdHIodGVzdC0+bV9hY3RpdmVVUkkuZGF0YSgpLCAhPSwgd2Via2l0X3dlYl9y
ZXNvdXJjZV9nZXRfdXJpKHRlc3QtPm1fcmVzb3VyY2UuZ2V0KCkpKTsKKyAgICAgICAgdGVzdC0+
bV9hY3RpdmVVUkkgPSB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF91cmkodGVzdC0+bV9yZXNvdXJj
ZS5nZXQoKSk7CisgICAgfQorCisgICAgdm9pZCByZXNvdXJjZUxvYWRTdGFydGVkKFdlYktpdFdl
YlJlc291cmNlKiByZXNvdXJjZSwgV2ViS2l0VVJJUmVxdWVzdCogcmVxdWVzdCkKKyAgICB7Cisg
ICAgICAgIGlmIChyZXNvdXJjZSA9PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2Uo
bV93ZWJWaWV3KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX3Jlc291cmNlID0g
cmVzb3VyY2U7CisgICAgICAgIG1fYWN0aXZlVVJJID0gd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRf
dXJpKHJlc291cmNlKTsKKyAgICAgICAgY2hlY2tBY3RpdmVVUkkoIi9yZWRpcmVjdGVkLmNzcyIp
OworICAgICAgICBnX2Fzc2VydF9jbXBzdHIobV9hY3RpdmVVUkkuZGF0YSgpLCA9PSwgd2Via2l0
X3VyaV9yZXF1ZXN0X2dldF91cmkocmVxdWVzdCkpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0
KHJlc291cmNlLCAibm90aWZ5Ojp1cmkiLCBHX0NBTExCQUNLKHVyaUNoYW5nZWQpLCB0aGlzKTsK
KyAgICB9CisKKyAgICB2b2lkIHJlc291cmNlU2VudFJlcXVlc3QoV2ViS2l0V2ViUmVzb3VyY2Uq
IHJlc291cmNlLCBXZWJLaXRVUklSZXF1ZXN0KiByZXF1ZXN0LCBXZWJLaXRVUklSZXNwb25zZSog
cmVkaXJlY3RSZXNwb25zZSkKKyAgICB7CisgICAgICAgIGlmIChyZXNvdXJjZSAhPSBtX3Jlc291
cmNlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChyZWRpcmVjdFJlc3BvbnNl
KQorICAgICAgICAgICAgY2hlY2tBY3RpdmVVUkkoIi9zaW1wbGUtc3R5bGUuY3NzIik7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGNoZWNrQWN0aXZlVVJJKCIvcmVkaXJlY3RlZC5jc3MiKTsK
KyAgICAgICAgZ19hc3NlcnRfY21wc3RyKG1fYWN0aXZlVVJJLmRhdGEoKSwgPT0sIHdlYmtpdF91
cmlfcmVxdWVzdF9nZXRfdXJpKHJlcXVlc3QpKTsKKyAgICB9CisKKyAgICB2b2lkIHJlc291cmNl
UmVjZWl2ZWRSZXNwb25zZShXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UpCisgICAgeworICAg
ICAgICBpZiAocmVzb3VyY2UgIT0gbV9yZXNvdXJjZSkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBjaGVja0FjdGl2ZVVSSSgiL3NpbXBsZS1zdHlsZS5jc3MiKTsKKyAgICB9CisKKyAg
ICB2b2lkIHJlc291cmNlUmVjZWl2ZWREYXRhKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwg
Z3VpbnQ2NCBieXRlc1JlY2VpdmVkKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHJlc291cmNl
RmluaXNoZWQoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlKQorICAgIHsKKyAgICAgICAgaWYg
KHJlc291cmNlID09IG1fcmVzb3VyY2UpCisgICAgICAgICAgICBjaGVja0FjdGl2ZVVSSSgiL3Np
bXBsZS1zdHlsZS5jc3MiKTsKKyAgICAgICAgUmVzb3VyY2VzVGVzdDo6cmVzb3VyY2VGaW5pc2hl
ZChyZXNvdXJjZSk7CisgICAgfQorCisgICAgdm9pZCByZXNvdXJjZUZhaWxlZChXZWJLaXRXZWJS
ZXNvdXJjZSosIEdFcnJvciopCisgICAgeworICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgp
OworICAgIH0KKworICAgIENTdHJpbmcgbV9hY3RpdmVVUkk7CisKK3ByaXZhdGU6CisgICAgdm9p
ZCBjaGVja0FjdGl2ZVVSSShjb25zdCBjaGFyKiB1cmkpCisgICAgeworICAgICAgICBBU1NFUlRf
Q01QX0NTVFJJTkcobV9hY3RpdmVVUkksID09LCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKHVyaSkp
OworICAgIH0KK307CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJSZXNvdXJjZUFjdGl2ZVVSSShSZXNv
dXJjZVVSSVRyYWNraW5nVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5s
b2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9yZWRpcmVjdGVkLWNzcy5odG1sIikuZGF0
YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZCgpOworfQorCitz
dGF0aWMgdm9pZCB0ZXN0V2ViUmVzb3VyY2VHZXREYXRhKFJlc291cmNlc1Rlc3QqIHRlc3QsIGdj
b25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRo
KCIvIikuZGF0YSgpKTsKKyAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgYmUgNCBpbnN0ZWFkIG9m
IDMsIGJ1dCB3ZSBkb24ndCBnZXQgdGhlIGNzcyBpbWFnZSByZXNvdXJjZQorICAgIC8vIGR1ZSB0
byBidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NTEwLgorICAg
IHRlc3QtPndhaXRVbnRpbFJlc291cmNlc0xvYWRlZCgzKTsKKworICAgIFdlYktpdFdlYlJlc291
cmNlKiByZXNvdXJjZSA9IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9yZXNvdXJjZSh0ZXN0LT5t
X3dlYlZpZXcpOworICAgIGdfYXNzZXJ0KHJlc291cmNlKTsKKyAgICB0ZXN0LT5jaGVja1Jlc291
cmNlRGF0YShyZXNvdXJjZSk7CisKKyAgICBHTGlzdCogc3VicmVzb3VyY2VzID0gdGVzdC0+c3Vi
cmVzb3VyY2VzKCk7CisgICAgZm9yIChHTGlzdCogaXRlbSA9IHN1YnJlc291cmNlczsgaXRlbTsg
aXRlbSA9IGdfbGlzdF9uZXh0KGl0ZW0pKQorICAgICAgICB0ZXN0LT5jaGVja1Jlc291cmNlRGF0
YShXRUJLSVRfV0VCX1JFU09VUkNFKGl0ZW0tPmRhdGEpKTsKK30KKworc3RhdGljIHZvaWQgdGVz
dFdlYlZpZXdSZXNvdXJjZXNIaXN0b3J5Q2FjaGUoU2luZ2xlUmVzb3VyY2VMb2FkVGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBDU3RyaW5nIGphdmFzY3JpcHRVUkkgPSBrU2VydmVy
LT5nZXRVUklGb3JQYXRoKCIvamF2YXNjcmlwdC5odG1sIik7CisgICAgdGVzdC0+bG9hZFVSSShq
YXZhc2NyaXB0VVJJLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmlu
aXNoZWQoKTsKKyAgICBXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UgPSB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X21haW5fcmVzb3VyY2UodGVzdC0+bV93ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChyZXNv
dXJjZSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaShy
ZXNvdXJjZSksID09LCBqYXZhc2NyaXB0VVJJLmRhdGEoKSk7CisKKyAgICBDU3RyaW5nIHNpbXBs
ZVN0eWxlQ1NTVVJJID0ga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3NpbXBsZS1zdHlsZS1jc3Mu
aHRtbCIpOworICAgIHRlc3QtPmxvYWRVUkkoc2ltcGxlU3R5bGVDU1NVUkkuZGF0YSgpKTsKKyAg
ICB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZCgpOworICAgIHJlc291cmNlID0g
d2Via2l0X3dlYl92aWV3X2dldF9tYWluX3Jlc291cmNlKHRlc3QtPm1fd2ViVmlldyk7CisgICAg
Z19hc3NlcnQocmVzb3VyY2UpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3Jlc291
cmNlX2dldF91cmkocmVzb3VyY2UpLCA9PSwgc2ltcGxlU3R5bGVDU1NVUkkuZGF0YSgpKTsKKwor
ICAgIHRlc3QtPmdvQmFjaygpOworICAgIHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlz
aGVkKCk7CisgICAgcmVzb3VyY2UgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2Uo
dGVzdC0+bV93ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChyZXNvdXJjZSk7CisgICAgZ19hc3NlcnRf
Y21wc3RyKHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaShyZXNvdXJjZSksID09LCBqYXZhc2Ny
aXB0VVJJLmRhdGEoKSk7CisKKyAgICB0ZXN0LT5nb0ZvcndhcmQoKTsKKyAgICB0ZXN0LT53YWl0
VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZCgpOworICAgIHJlc291cmNlID0gd2Via2l0X3dlYl92
aWV3X2dldF9tYWluX3Jlc291cmNlKHRlc3QtPm1fd2ViVmlldyk7CisgICAgZ19hc3NlcnQocmVz
b3VyY2UpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3Jlc291cmNlX2dldF91cmko
cmVzb3VyY2UpLCA9PSwgc2ltcGxlU3R5bGVDU1NVUkkuZGF0YSgpKTsKK30KKworY2xhc3MgU2Vu
ZFJlcXVlc3RUZXN0OiBwdWJsaWMgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdCB7CitwdWJsaWM6Cisg
ICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShTZW5kUmVxdWVzdFRlc3QpOworCisgICAgdm9pZCBy
ZXNvdXJjZVNlbnRSZXF1ZXN0KFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgV2ViS2l0VVJJ
UmVxdWVzdCogcmVxdWVzdCwgV2ViS2l0VVJJUmVzcG9uc2UqIHJlZGlyZWN0UmVzcG9uc2UpCisg
ICAgeworICAgICAgICBpZiAocmVzb3VyY2UgIT0gbV9yZXNvdXJjZSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBpZiAocmVkaXJlY3RSZXNwb25zZSkKKyAgICAgICAgICAgIGdfYXNz
ZXJ0X2NtcHN0cih3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KSwgPT0sIG1fZXhw
ZWN0ZWROZXdSZXNvdXJjZVVSSUFmdGVyUmVkaXJlY3Rpb24uZGF0YSgpKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfdXJp
KHJlcXVlc3QpLCA9PSwgbV9leHBlY3RlZE5ld1Jlc291cmNlVVJJLmRhdGEoKSk7CisgICAgICAg
IGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KSwgPT0s
IHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaShyZXNvdXJjZSkpOworCisgICAgICAgIFNpbmds
ZVJlc291cmNlTG9hZFRlc3Q6OnJlc291cmNlU2VudFJlcXVlc3QocmVzb3VyY2UsIHJlcXVlc3Qs
IHJlZGlyZWN0UmVzcG9uc2UpOworICAgIH0KKworICAgIHZvaWQgcmVzb3VyY2VGYWlsZWQoV2Vi
S2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBHRXJyb3IqIGVycm9yKQorICAgIHsKKyAgICAgICAg
aWYgKHJlc291cmNlICE9IG1fcmVzb3VyY2UpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaShyZXNvdXJjZSks
ID09LCBtX2V4cGVjdGVkQ2FuY2VsbGVkUmVzb3VyY2VVUkkuZGF0YSgpKTsKKyAgICAgICAgZ19h
c3NlcnRfZXJyb3IoZXJyb3IsIFdFQktJVF9ORVRXT1JLX0VSUk9SLCBXRUJLSVRfTkVUV09SS19F
UlJPUl9DQU5DRUxMRUQpOworCisgICAgICAgIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OnJlc291
cmNlRmFpbGVkKHJlc291cmNlLCBlcnJvcik7CisgICAgfQorCisgICAgdm9pZCBzZXRFeHBlY3Rl
ZE5ld1Jlc291cmNlVVJJKGNvbnN0IENTdHJpbmcmIHVyaSkKKyAgICB7CisgICAgICAgIG1fZXhw
ZWN0ZWROZXdSZXNvdXJjZVVSSSA9IHVyaTsKKyAgICB9CisKKyAgICB2b2lkIHNldEV4cGVjdGVk
Q2FuY2VsbGVkUmVzb3VyY2VVUkkoY29uc3QgQ1N0cmluZyYgdXJpKQorICAgIHsKKyAgICAgICAg
bV9leHBlY3RlZENhbmNlbGxlZFJlc291cmNlVVJJID0gdXJpOworICAgIH0KKworICAgIHZvaWQg
c2V0RXhwZWN0ZWROZXdSZXNvdXJjZVVSSUFmdGVyUmVkaXJlY3Rpb24oY29uc3QgQ1N0cmluZyYg
dXJpKQorICAgIHsKKyAgICAgICAgbV9leHBlY3RlZE5ld1Jlc291cmNlVVJJQWZ0ZXJSZWRpcmVj
dGlvbiA9IHVyaTsKKyAgICB9CisKKyAgICBDU3RyaW5nIG1fZXhwZWN0ZWROZXdSZXNvdXJjZVVS
STsKKyAgICBDU3RyaW5nIG1fZXhwZWN0ZWRDYW5jZWxsZWRSZXNvdXJjZVVSSTsKKyAgICBDU3Ry
aW5nIG1fZXhwZWN0ZWROZXdSZXNvdXJjZVVSSUFmdGVyUmVkaXJlY3Rpb247Cit9OworCitzdGF0
aWMgdm9pZCB0ZXN0V2ViUmVzb3VyY2VTZW5kUmVxdWVzdChTZW5kUmVxdWVzdFRlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+c2V0RXhwZWN0ZWROZXdSZXNvdXJjZVVSSShr
U2VydmVyLT5nZXRVUklGb3JQYXRoKCIvamF2YXNjcmlwdC5qcyIpKTsKKyAgICB0ZXN0LT5sb2Fk
VVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoInJlbGF0aXZlLWphdmFzY3JpcHQuaHRtbCIpLmRh
dGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWQoKTsKKyAgICBn
X2Fzc2VydCh0ZXN0LT5tX3Jlc291cmNlKTsKKworICAgIFZlY3RvcjxTaW5nbGVSZXNvdXJjZUxv
YWRUZXN0OjpMb2FkRXZlbnRzPiYgZXZlbnRzID0gdGVzdC0+bV9sb2FkRXZlbnRzOworICAgIGdf
YXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgNSk7CisgICAgZ19hc3NlcnRfY21waW50
KGV2ZW50c1swXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlN0YXJ0ZWQpOworICAgIGdf
YXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpTZW50
UmVxdWVzdCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIFNpbmdsZVJlc291
cmNlTG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVu
dHNbM10sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpSZWNlaXZlZERhdGEpOworICAgIGdf
YXNzZXJ0X2NtcGludChldmVudHNbNF0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpGaW5p
c2hlZCk7CisgICAgZXZlbnRzLmNsZWFyKCk7CisKKyAgICAvLyBDYW5jZWwgcmVxdWVzdC4KKyAg
ICB0ZXN0LT5zZXRFeHBlY3RlZENhbmNlbGxlZFJlc291cmNlVVJJKGtTZXJ2ZXItPmdldFVSSUZv
clBhdGgoIi9jYW5jZWwtdGhpcy5qcyIpKTsKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdl
dFVSSUZvclBhdGgoIi9yZXNvdXJjZS10by1jYW5jZWwuaHRtbCIpLmRhdGEoKSk7CisgICAgdGVz
dC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5t
X3Jlc291cmNlKTsKKworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgMyk7
CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRl
c3Q6OlN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBTaW5nbGVS
ZXNvdXJjZUxvYWRUZXN0OjpGYWlsZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0s
ID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpGaW5pc2hlZCk7CisgICAgZXZlbnRzLmNsZWFy
KCk7CisKKyAgICAvLyBVUkkgY2hhbmdlZCBhZnRlciBhIHJlZGlyZWN0LgorICAgIHRlc3QtPnNl
dEV4cGVjdGVkTmV3UmVzb3VyY2VVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3JlZGlyZWN0
ZWQuanMiKSk7CisgICAgdGVzdC0+c2V0RXhwZWN0ZWROZXdSZXNvdXJjZVVSSUFmdGVyUmVkaXJl
Y3Rpb24oa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2phdmFzY3JpcHQuanMiKSk7CisgICAgdGVz
dC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCJyZWRpcmVjdGVkLWphdmFzY3JpcHQu
aHRtbCIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWQo
KTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3Jlc291cmNlKTsKKworICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHMuc2l6ZSgpLCA9PSwgNik7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwg
PT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHNbMV0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpTZW50UmVxdWVzdCk7Cisg
ICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6
OlJlZGlyZWN0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbM10sID09LCBTaW5nbGVS
ZXNvdXJjZUxvYWRUZXN0OjpSZWNlaXZlZFJlc3BvbnNlKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
ZXZlbnRzWzRdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6UmVjZWl2ZWREYXRhKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzVdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6
RmluaXNoZWQpOworICAgIGV2ZW50cy5jbGVhcigpOworCisgICAgLy8gQ2FuY2VsIGFmdGVyIGEg
cmVkaXJlY3QuCisgICAgdGVzdC0+c2V0RXhwZWN0ZWROZXdSZXNvdXJjZVVSSShrU2VydmVyLT5n
ZXRVUklGb3JQYXRoKCIvcmVkaXJlY3RlZC10by1jYW5jZWwuanMiKSk7CisgICAgdGVzdC0+c2V0
RXhwZWN0ZWRDYW5jZWxsZWRSZXNvdXJjZVVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvcmVk
aXJlY3RlZC10by1jYW5jZWwuanMiKSk7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRV
UklGb3JQYXRoKCIvcmVkaXJlY3RlZC10by1jYW5jZWwuaHRtbCIpLmRhdGEoKSk7CisgICAgdGVz
dC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5t
X3Jlc291cmNlKTsKKworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgNCk7
CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRl
c3Q6OlN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBTaW5nbGVS
ZXNvdXJjZUxvYWRUZXN0OjpTZW50UmVxdWVzdCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50
c1syXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OkZhaWxlZCk7CisgICAgZ19hc3NlcnRf
Y21waW50KGV2ZW50c1szXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OkZpbmlzaGVkKTsK
KyAgICBldmVudHMuY2xlYXIoKTsKK30KKworc3RhdGljIHZvaWQgYWRkQ2FjaGVIVFRQSGVhZGVy
c1RvUmVzcG9uc2UoU291cE1lc3NhZ2UqIG1lc3NhZ2UpCit7CisgICAgLy8gVGhlIGFjdHVhbCBk
YXRlIGRvZXNuJ3QgcmVhbGx5IG1hdHRlci4KKyAgICBTb3VwRGF0ZSogc291cERhdGUgPSBzb3Vw
X2RhdGVfbmV3X2Zyb21fbm93KDApOworICAgIEdPd25QdHI8Y2hhcj4gZGF0ZShzb3VwX2RhdGVf
dG9fc3RyaW5nKHNvdXBEYXRlLCBTT1VQX0RBVEVfSFRUUCkpOworICAgIHNvdXBfbWVzc2FnZV9o
ZWFkZXJzX2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiTGFzdC1Nb2RpZmllZCIs
IGRhdGUuZ2V0KCkpOworICAgIHNvdXBfZGF0ZV9mcmVlKHNvdXBEYXRlKTsKKyAgICBzb3VwX21l
c3NhZ2VfaGVhZGVyc19hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIkNhY2hlLWNv
bnRyb2wiLCAicHVibGljLCBtYXgtYWdlPTMxNTM2MDAwIik7CisgICAgc291cERhdGUgPSBzb3Vw
X2RhdGVfbmV3X2Zyb21fbm93KDM2MDApOworICAgIGRhdGUuc2V0KHNvdXBfZGF0ZV90b19zdHJp
bmcoc291cERhdGUsIFNPVVBfREFURV9IVFRQKSk7CisgICAgc291cF9tZXNzYWdlX2hlYWRlcnNf
YXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJFeHBpcmVzIiwgZGF0ZS5nZXQoKSk7
CisgICAgc291cF9kYXRlX2ZyZWUoc291cERhdGUpOworfQorCitzdGF0aWMgdm9pZCBzZXJ2ZXJD
YWxsYmFjayhTb3VwU2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBj
aGFyKiBwYXRoLCBHSGFzaFRhYmxlKiwgU291cENsaWVudENvbnRleHQqLCBncG9pbnRlcikKK3sK
KyAgICBpZiAobWVzc2FnZS0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgeworICAgICAgICBz
b3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5U
RUQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc291cF9tZXNzYWdlX3NldF9zdGF0
dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOworCisgICAgaWYgKHNvdXBfbWVzc2FnZV9oZWFk
ZXJzX2dldF9vbmUobWVzc2FnZS0+cmVxdWVzdF9oZWFkZXJzLCAiSWYtTW9kaWZpZWQtU2luY2Ui
KSkgeworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRV
U19OT1RfTU9ESUZJRUQpOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNz
YWdlLT5yZXNwb25zZV9ib2R5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChn
X3N0cl9lcXVhbChwYXRoLCAiLyIpKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVu
ZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGtJbmRleEh0bWws
IHN0cmxlbihrSW5kZXhIdG1sKSk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAi
L2phdmFzY3JpcHQuaHRtbCIpKSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBqYXZhc2Ny
aXB0SHRtbCA9ICI8aHRtbD48aGVhZD48c2NyaXB0IGxhbmd1YWdlPSdqYXZhc2NyaXB0JyBzcmM9
Jy9qYXZhc2NyaXB0LmpzJz48L3NjcmlwdD48L2hlYWQ+PGJvZHk+PC9ib2R5PjwvaHRtbD4iOwor
ICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwg
U09VUF9NRU1PUllfU1RBVElDLCBqYXZhc2NyaXB0SHRtbCwgc3RybGVuKGphdmFzY3JpcHRIdG1s
KSk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2ltYWdlLmh0bWwiKSkgewor
ICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogaW1hZ2VIVE1MID0gIjxodG1sPjxib2R5PjxpbWcg
c3JjPScvYmxhbmsuaWNvJz48L2ltZz48L2JvZHk+PC9odG1sPiI7CisgICAgICAgIHNvdXBfbWVz
c2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFU
SUMsIGltYWdlSFRNTCwgc3RybGVuKGltYWdlSFRNTCkpOworICAgIH0gZWxzZSBpZiAoZ19zdHJf
ZXF1YWwocGF0aCwgIi9yZWRpcmVjdGVkLWNzcy5odG1sIikpIHsKKyAgICAgICAgc3RhdGljIGNv
bnN0IGNoYXIqIHJlZGlyZWN0ZWRDU1NIdG1sID0gIjxodG1sPjxoZWFkPjxsaW5rIHJlbD0nc3R5
bGVzaGVldCcgaHJlZj0nL3JlZGlyZWN0ZWQuY3NzJyB0eXBlPSd0ZXh0L2Nzcyc+PC9oZWFkPjxi
b2R5PjwvaHRtbD4iOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+
cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCByZWRpcmVjdGVkQ1NTSHRtbCwgc3Ry
bGVuKHJlZGlyZWN0ZWRDU1NIdG1sKSk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRo
LCAiL2ludmFsaWQtY3NzLmh0bWwiKSkgeworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogaW52
YWxpZENTU0h0bWwgPSAiPGh0bWw+PGhlYWQ+PGxpbmsgcmVsPSdzdHlsZXNoZWV0JyBocmVmPScv
aW52YWxpZC5jc3MnIHR5cGU9J3RleHQvY3NzJz48L2hlYWQ+PGJvZHk+PC9odG1sPiI7CisgICAg
ICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQ
X01FTU9SWV9TVEFUSUMsIGludmFsaWRDU1NIdG1sLCBzdHJsZW4oaW52YWxpZENTU0h0bWwpKTsK
KyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvc2ltcGxlLXN0eWxlLWNzcy5odG1s
IikpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHNpbXBsZVN0eWxlQ1NTSHRtbCA9ICI8
aHRtbD48aGVhZD48bGluayByZWw9J3N0eWxlc2hlZXQnIGhyZWY9Jy9zaW1wbGUtc3R5bGUuY3Nz
JyB0eXBlPSd0ZXh0L2Nzcyc+PC9oZWFkPjxib2R5PjwvaHRtbD4iOworICAgICAgICBzb3VwX21l
c3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RB
VElDLCBzaW1wbGVTdHlsZUNTU0h0bWwsIHN0cmxlbihzaW1wbGVTdHlsZUNTU0h0bWwpKTsKKyAg
ICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvc3R5bGUuY3NzIikpIHsKKyAgICAgICAg
c291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVN
T1JZX1NUQVRJQywga1N0eWxlQ1NTLCBzdHJsZW4oa1N0eWxlQ1NTKSk7CisgICAgICAgIGFkZENh
Y2hlSFRUUEhlYWRlcnNUb1Jlc3BvbnNlKG1lc3NhZ2UpOworICAgICAgICBzb3VwX21lc3NhZ2Vf
aGVhZGVyc19hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIkNvbnRlbnQtVHlwZSIs
ICJ0ZXh0L2NzcyIpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9qYXZhc2Ny
aXB0LmpzIikpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJl
c3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywga0phdmFzY3JpcHQsIHN0cmxlbihrSmF2
YXNjcmlwdCkpOworICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobWVzc2FnZS0+
cmVzcG9uc2VfaGVhZGVycywgIkNvbnRlbnQtVHlwZSIsICJ0ZXh0L2phdmFzY3JpcHQiKTsKKyAg
ICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRl
cnMsICJDb250ZW50LURpc3Bvc2l0aW9uIiwgImZpbGVuYW1lPUphdmFTY3JpcHQuanMiKTsKKyAg
ICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvcmVsYXRpdmUtamF2YXNjcmlwdC5odG1s
IikpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGphdmFzY3JpcHRSZWxhdGl2ZUhUTUwg
PSAiPGh0bWw+PGhlYWQ+PHNjcmlwdCBsYW5ndWFnZT0namF2YXNjcmlwdCcgc3JjPSdyZW1vdmUt
dGhpcy9qYXZhc2NyaXB0LmpzJz48L3NjcmlwdD48L2hlYWQ+PGJvZHk+PC9ib2R5PjwvaHRtbD4i
OworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9k
eSwgU09VUF9NRU1PUllfU1RBVElDLCBqYXZhc2NyaXB0UmVsYXRpdmVIVE1MLCBzdHJsZW4oamF2
YXNjcmlwdFJlbGF0aXZlSFRNTCkpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwg
Ii9yZXNvdXJjZS10by1jYW5jZWwuaHRtbCIpKSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFy
KiByZXNvdXJjZVRvQ2FuY2VsSFRNTCA9ICI8aHRtbD48aGVhZD48c2NyaXB0IGxhbmd1YWdlPSdq
YXZhc2NyaXB0JyBzcmM9J2NhbmNlbC10aGlzLmpzJz48L3NjcmlwdD48L2hlYWQ+PGJvZHk+PC9i
b2R5PjwvaHRtbD4iOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+
cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCByZXNvdXJjZVRvQ2FuY2VsSFRNTCwg
c3RybGVuKHJlc291cmNlVG9DYW5jZWxIVE1MKSk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVh
bChwYXRoLCAiL3JlZGlyZWN0ZWQtamF2YXNjcmlwdC5odG1sIikpIHsKKyAgICAgICAgc3RhdGlj
IGNvbnN0IGNoYXIqIGphdmFzY3JpcHRSZWxhdGl2ZUhUTUwgPSAiPGh0bWw+PGhlYWQ+PHNjcmlw
dCBsYW5ndWFnZT0namF2YXNjcmlwdCcgc3JjPScvcmVkaXJlY3RlZC5qcyc+PC9zY3JpcHQ+PC9o
ZWFkPjxib2R5PjwvYm9keT48L2h0bWw+IjsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBw
ZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgamF2YXNjcmlw
dFJlbGF0aXZlSFRNTCwgc3RybGVuKGphdmFzY3JpcHRSZWxhdGl2ZUhUTUwpKTsKKyAgICB9IGVs
c2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvcmVkaXJlY3RlZC10by1jYW5jZWwuaHRtbCIpKSB7
CisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBqYXZhc2NyaXB0UmVsYXRpdmVIVE1MID0gIjxo
dG1sPjxoZWFkPjxzY3JpcHQgbGFuZ3VhZ2U9J2phdmFzY3JpcHQnIHNyYz0nL3JlZGlyZWN0ZWQt
dG8tY2FuY2VsLmpzJz48L3NjcmlwdD48L2hlYWQ+PGJvZHk+PC9ib2R5PjwvaHRtbD4iOworICAg
ICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09V
UF9NRU1PUllfU1RBVElDLCBqYXZhc2NyaXB0UmVsYXRpdmVIVE1MLCBzdHJsZW4oamF2YXNjcmlw
dFJlbGF0aXZlSFRNTCkpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9ibGFu
ay5pY28iKSkgeworICAgICAgICBHT3duUHRyPGNoYXI+IGZpbGVQYXRoKGdfYnVpbGRfZmlsZW5h
bWUoVGVzdDo6Z2V0V2ViS2l0MVRlc3RSZXNvdWNlc0RpcigpLmRhdGEoKSwgcGF0aCwgTlVMTCkp
OworICAgICAgICBjaGFyKiBjb250ZW50czsKKyAgICAgICAgZ3NpemUgY29udGVudHNMZW5ndGg7
CisgICAgICAgIGdfZmlsZV9nZXRfY29udGVudHMoZmlsZVBhdGguZ2V0KCksICZjb250ZW50cywg
JmNvbnRlbnRzTGVuZ3RoLCAwKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1l
c3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGNvbnRlbnRzLCBjb250ZW50
c0xlbmd0aCk7CisgICAgICAgIGFkZENhY2hlSFRUUEhlYWRlcnNUb1Jlc3BvbnNlKG1lc3NhZ2Up
OworICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2Vf
aGVhZGVycywgIkNvbnRlbnQtVHlwZSIsICJpbWFnZS92bmQubWljcm9zb2Z0Lmljb24iKTsKKyAg
ICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvc2ltcGxlLXN0eWxlLmNzcyIpKSB7Cisg
ICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzaW1wbGVDU1MgPQorICAgICAgICAgICAgImJvZHkg
eyIKKyAgICAgICAgICAgICIgICAgbWFyZ2luOiAwcHg7IgorICAgICAgICAgICAgIiAgICBwYWRk
aW5nOiAwcHg7IgorICAgICAgICAgICAgIn0iOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9h
cHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBzaW1wbGVD
U1MsIHN0cmxlbihzaW1wbGVDU1MpKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBw
ZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJDb250ZW50LVR5cGUiLCAidGV4dC9jc3Mi
KTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvcmVkaXJlY3RlZC5jc3MiKSkg
eworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19N
T1ZFRF9QRVJNQU5FTlRMWSk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZCht
ZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiTG9jYXRpb24iLCAiL3NpbXBsZS1zdHlsZS5jc3Mi
KTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvcmVkaXJlY3RlZC5qcyIpKSB7
CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX01P
VkVEX1BFUk1BTkVOVExZKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1l
c3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJMb2NhdGlvbiIsICIvcmVtb3ZlLXRoaXMvamF2YXNj
cmlwdC5qcyIpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9yZWRpcmVjdGVk
LXRvLWNhbmNlbC5qcyIpKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3Nh
Z2UsIFNPVVBfU1RBVFVTX01PVkVEX1BFUk1BTkVOVExZKTsKKyAgICAgICAgc291cF9tZXNzYWdl
X2hlYWRlcnNfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJMb2NhdGlvbiIsICIv
Y2FuY2VsLXRoaXMuanMiKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvaW52
YWxpZC5jc3MiKSkKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09V
UF9TVEFUVVNfQ0FOVF9DT05ORUNUKTsKKyAgICBlbHNlCisgICAgICAgIHNvdXBfbWVzc2FnZV9z
ZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7CisgICAgc291cF9tZXNz
YWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7Cit9CisKK3ZvaWQgYmVm
b3JlQWxsKCkKK3sKKyAgICBrU2VydmVyID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIoKTsKKyAgICBr
U2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2spOworCisgICAgd2Via2l0X3dlYl9jb250ZXh0X3Nl
dF93ZWJfZXh0ZW5zaW9uc19kaXJlY3Rvcnkod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0
KCksIFdFQktJVF9URVNUX1dFQl9FWFRFTlNJT05TX0RJUik7CisKKyAgICBSZXNvdXJjZXNUZXN0
OjphZGQoIldlYktpdFdlYlZpZXciLCAicmVzb3VyY2VzIiwgdGVzdFdlYlZpZXdSZXNvdXJjZXMp
OworICAgIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OmFkZCgiV2ViS2l0V2ViUmVzb3VyY2UiLCAi
bG9hZGluZyIsIHRlc3RXZWJSZXNvdXJjZUxvYWRpbmcpOworICAgIFNpbmdsZVJlc291cmNlTG9h
ZFRlc3Q6OmFkZCgiV2ViS2l0V2ViUmVzb3VyY2UiLCAicmVzcG9uc2UiLCB0ZXN0V2ViUmVzb3Vy
Y2VSZXNwb25zZSk7CisgICAgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6YWRkKCJXZWJLaXRXZWJS
ZXNvdXJjZSIsICJtaW1lLXR5cGUiLCB0ZXN0V2ViUmVzb3VyY2VNaW1lVHlwZSk7CisgICAgU2lu
Z2xlUmVzb3VyY2VMb2FkVGVzdDo6YWRkKCJXZWJLaXRXZWJSZXNvdXJjZSIsICJzdWdnZXN0ZWQt
ZmlsZW5hbWUiLCB0ZXN0V2ViUmVzb3VyY2VTdWdnZXN0ZWRGaWxlbmFtZSk7CisgICAgUmVzb3Vy
Y2VVUklUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViUmVzb3VyY2UiLCAiYWN0aXZlLXVyaSIs
IHRlc3RXZWJSZXNvdXJjZUFjdGl2ZVVSSSk7CisgICAgUmVzb3VyY2VzVGVzdDo6YWRkKCJXZWJL
aXRXZWJSZXNvdXJjZSIsICJnZXQtZGF0YSIsIHRlc3RXZWJSZXNvdXJjZUdldERhdGEpOworICAg
IFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJoaXN0b3J5LWNh
Y2hlIiwgdGVzdFdlYlZpZXdSZXNvdXJjZXNIaXN0b3J5Q2FjaGUpOworICAgIFNlbmRSZXF1ZXN0
VGVzdDo6YWRkKCJXZWJLaXRXZWJQYWdlIiwgInNlbmQtcmVxdWVzdCIsIHRlc3RXZWJSZXNvdXJj
ZVNlbmRSZXF1ZXN0KTsKK30KKwordm9pZCBhZnRlckFsbCgpCit7CisgICAgZGVsZXRlIGtTZXJ2
ZXI7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsv
VGVzdFNTTC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFNT
TC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMxODBjNQotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0U1NM
LmNwcApAQCAtMCwwICsxLDI5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEg
Uy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJMb2FkVHJhY2tpbmdUZXN0Lmgi
CisjaW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5oIgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKwor
c3RhdGljIFdlYktpdFRlc3RTZXJ2ZXIqIGtIdHRwc1NlcnZlcjsKK3N0YXRpYyBXZWJLaXRUZXN0
U2VydmVyKiBrSHR0cFNlcnZlcjsKKworc3RhdGljIGNvbnN0IGNoYXIqIGluZGV4SFRNTCA9ICI8
aHRtbD48Ym9keT5UZXN0aW5nIFdlYktpdDJHVEsrIFNTTDwvYm9keT48L2h0bWxsPiI7CitzdGF0
aWMgY29uc3QgY2hhciogaW5zZWN1cmVDb250ZW50SFRNTCA9ICI8aHRtbD48c2NyaXB0IHNyYz1c
IiVzXCI+PC9zY3JpcHQ+PGJvZHk+PHA+VGV4dCArIGltYWdlIDxpbWcgc3JjPVwiJXNcIiBhbGln
bj1cInJpZ2h0XCIvPjwvcD48L2JvZHk+PC9odG1sPiI7CitzdGF0aWMgY29uc3QgY2hhciBUTFNF
eHBlY3RlZFN1Y2Nlc3NUaXRsZVtdID0gIldlYktpdDJHdGsrIFRMUyBwZXJtaXNzaW9uIHRlc3Qi
Oworc3RhdGljIGNvbnN0IGNoYXIgVExTU3VjY2Vzc0hUTUxTdHJpbmdbXSA9ICI8aHRtbD48aGVh
ZD48dGl0bGU+V2ViS2l0Mkd0aysgVExTIHBlcm1pc3Npb24gdGVzdDwvdGl0bGU+PC9oZWFkPjxi
b2R5PjwvYm9keT48L2h0bWw+IjsKKworY2xhc3MgU1NMVGVzdDogcHVibGljIExvYWRUcmFja2lu
Z1Rlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoU1NMVGVzdCk7CisK
KyAgICBTU0xUZXN0KCkKKyAgICAgICAgOiBtX3Rsc0Vycm9ycyhzdGF0aWNfY2FzdDxHVGxzQ2Vy
dGlmaWNhdGVGbGFncz4oMCkpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBwcm92
aXNpb25hbExvYWRGYWlsZWQoY29uc3QgZ2NoYXIqIGZhaWxpbmdVUkksIEdFcnJvciogZXJyb3Ip
CisgICAgeworICAgICAgICBnX2Fzc2VydF9lcnJvcihlcnJvciwgU09VUF9IVFRQX0VSUk9SLCBT
T1VQX1NUQVRVU19TU0xfRkFJTEVEKTsKKyAgICAgICAgTG9hZFRyYWNraW5nVGVzdDo6cHJvdmlz
aW9uYWxMb2FkRmFpbGVkKGZhaWxpbmdVUkksIGVycm9yKTsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgbG9hZENvbW1pdHRlZCgpCisgICAgeworICAgICAgICBHVGxzQ2VydGlmaWNhdGUqIGNl
cnRpZmljYXRlID0gMDsKKyAgICAgICAgd2Via2l0X3dlYl92aWV3X2dldF90bHNfaW5mbyhtX3dl
YlZpZXcsICZjZXJ0aWZpY2F0ZSwgJm1fdGxzRXJyb3JzKTsKKyAgICAgICAgbV9jZXJ0aWZpY2F0
ZSA9IGNlcnRpZmljYXRlOworICAgICAgICBMb2FkVHJhY2tpbmdUZXN0Ojpsb2FkQ29tbWl0dGVk
KCk7CisgICAgfQorCisgICAgdm9pZCB3YWl0VW50aWxMb2FkRmluaXNoZWQoKQorICAgIHsKKyAg
ICAgICAgbV9jZXJ0aWZpY2F0ZSA9IDA7CisgICAgICAgIG1fdGxzRXJyb3JzID0gc3RhdGljX2Nh
c3Q8R1Rsc0NlcnRpZmljYXRlRmxhZ3M+KDApOworICAgICAgICBMb2FkVHJhY2tpbmdUZXN0Ojp3
YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICB9CisKKyAgICBHUmVmUHRyPEdUbHNDZXJ0aWZp
Y2F0ZT4gbV9jZXJ0aWZpY2F0ZTsKKyAgICBHVGxzQ2VydGlmaWNhdGVGbGFncyBtX3Rsc0Vycm9y
czsKK307CisKK3N0YXRpYyB2b2lkIHRlc3RTU0woU1NMVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRl
cikKK3sKKyAgICB0ZXN0LT5sb2FkVVJJKGtIdHRwc1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIp
LmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3Nl
cnQodGVzdC0+bV9jZXJ0aWZpY2F0ZSk7CisgICAgLy8gV2UgYWx3YXlzIGV4cGVjdCBlcnJvcnMg
YmVjYXVzZSB3ZSBhcmUgdXNpbmcgYSBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZSwKKyAgICAvLyBi
dXQgb25seSBHX1RMU19DRVJUSUZJQ0FURV9VTktOT1dOX0NBIGZsYWdzIHNob3VsZCBiZSBwcmVz
ZW50LgorICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGxzRXJyb3JzKTsKKyAgICBnX2Fzc2VydF9jbXB1
aW50KHRlc3QtPm1fdGxzRXJyb3JzLCA9PSwgR19UTFNfQ0VSVElGSUNBVEVfVU5LTk9XTl9DQSk7
CisKKyAgICAvLyBOb24gSFRUUFMgbG9hZHMgc2hvdWxkbid0IGhhdmUgYSBjZXJ0aWZpY2F0ZSBu
b3IgZXJyb3JzLgorICAgIHRlc3QtPmxvYWRIdG1sKGluZGV4SFRNTCwgMCk7CisgICAgdGVzdC0+
d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnQoIXRlc3QtPm1fY2VydGlmaWNh
dGUpOworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX3Rsc0Vycm9ycyk7Cit9CisKK2NsYXNzIEluc2Vj
dXJlQ29udGVudFRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9H
TElCX1RFU1RfRklYVFVSRShJbnNlY3VyZUNvbnRlbnRUZXN0KTsKKworICAgIEluc2VjdXJlQ29u
dGVudFRlc3QoKQorICAgICAgICA6IG1faW5zZWN1cmVDb250ZW50UnVuKGZhbHNlKQorICAgICAg
ICAsIG1faW5zZWN1cmVDb250ZW50RGlzcGxheWVkKGZhbHNlKQorICAgIHsKKyAgICAgICAgZ19z
aWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJpbnNlY3VyZS1jb250ZW50LWRldGVjdGVkIiwgR19D
QUxMQkFDSyhpbnNlY3VyZUNvbnRlbnREZXRlY3RlZENhbGxiYWNrKSwgdGhpcyk7CisgICAgfQor
CisgICAgc3RhdGljIHZvaWQgaW5zZWN1cmVDb250ZW50RGV0ZWN0ZWRDYWxsYmFjayhXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRJbnNlY3VyZUNvbnRlbnRFdmVudCBldmVudCwgSW5zZWN1
cmVDb250ZW50VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KHdlYlZpZXcgPT0g
dGVzdC0+bV93ZWJWaWV3KTsKKworICAgICAgICBpZiAoZXZlbnQgPT0gV0VCS0lUX0lOU0VDVVJF
X0NPTlRFTlRfUlVOKQorICAgICAgICAgICAgdGVzdC0+bV9pbnNlY3VyZUNvbnRlbnRSdW4gPSB0
cnVlOworCisgICAgICAgIGlmIChldmVudCA9PSBXRUJLSVRfSU5TRUNVUkVfQ09OVEVOVF9ESVNQ
TEFZRUQpCisgICAgICAgICAgICB0ZXN0LT5tX2luc2VjdXJlQ29udGVudERpc3BsYXllZCA9IHRy
dWU7CisgICAgfQorCisgICAgYm9vbCBtX2luc2VjdXJlQ29udGVudFJ1bjsKKyAgICBib29sIG1f
aW5zZWN1cmVDb250ZW50RGlzcGxheWVkOworfTsKKworc3RhdGljIHZvaWQgdGVzdEluc2VjdXJl
Q29udGVudChJbnNlY3VyZUNvbnRlbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAg
IHRlc3QtPmxvYWRVUkkoa0h0dHBzU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvaW5zZWN1cmUtY29u
dGVudC8iKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisg
ICAgZ19hc3NlcnQodGVzdC0+bV9pbnNlY3VyZUNvbnRlbnRSdW4pOworICAgIGdfYXNzZXJ0KHRl
c3QtPm1faW5zZWN1cmVDb250ZW50RGlzcGxheWVkKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFRM
U0Vycm9yc1BvbGljeShTU0xUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIFdlYktp
dFdlYkNvbnRleHQqIGNvbnRleHQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQodGVzdC0+
bV93ZWJWaWV3KTsKKyAgICAvLyBUTFMgZXJyb3JzIGFyZSBpZ25vcmVkIGJ5IGRlZmF1bHQuCisg
ICAgZ19hc3NlcnQod2Via2l0X3dlYl9jb250ZXh0X2dldF90bHNfZXJyb3JzX3BvbGljeShjb250
ZXh0KSA9PSBXRUJLSVRfVExTX0VSUk9SU19QT0xJQ1lfSUdOT1JFKTsKKyAgICB0ZXN0LT5sb2Fk
VVJJKGtIdHRwc1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7CisgICAgdGVzdC0+
d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnQoIXRlc3QtPm1fbG9hZEZhaWxl
ZCk7CisKKyAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3Rsc19lcnJvcnNfcG9saWN5KGNvbnRl
eHQsIFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9GQUlMKTsKKyAgICB0ZXN0LT5sb2FkVVJJKGtI
dHRwc1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVu
dGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9sb2FkRmFpbGVkKTsKKyAg
ICBnX2Fzc2VydCh0ZXN0LT5tX2xvYWRFdmVudHMuY29udGFpbnMoTG9hZFRyYWNraW5nVGVzdDo6
UHJvdmlzaW9uYWxMb2FkRmFpbGVkKSk7CisgICAgZ19hc3NlcnQoIXRlc3QtPm1fbG9hZEV2ZW50
cy5jb250YWlucyhMb2FkVHJhY2tpbmdUZXN0OjpMb2FkQ29tbWl0dGVkKSk7Cit9CisKK2NsYXNz
IFRMU0Vycm9yc1Rlc3Q6IHB1YmxpYyBTU0xUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJf
VEVTVF9GSVhUVVJFKFRMU0Vycm9yc1Rlc3QpOworCisgICAgVExTRXJyb3JzVGVzdCgpCisgICAg
eworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImxvYWQtZmFpbGVkLXdpdGgt
dGxzLWVycm9ycyIsIEdfQ0FMTEJBQ0socnVuTG9hZEZhaWxlZFdpdGhUTFNFcnJvcnNDYWxsYmFj
ayksIHRoaXMpOworICAgIH0KKworICAgIH5UTFNFcnJvcnNUZXN0KCkKKyAgICB7CisgICAgICAg
IGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3dlYlZpZXcsIEdfU0lHTkFM
X01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOworICAgICAgICBpZiAobV9jZXJ0aWZpY2F0
ZUluZm8pCisgICAgICAgICAgICB3ZWJraXRfY2VydGlmaWNhdGVfaW5mb19mcmVlKG1fY2VydGlm
aWNhdGVJbmZvKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gcnVuTG9hZEZhaWxlZFdp
dGhUTFNFcnJvcnNDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiwgV2ViS2l0Q2VydGlmaWNhdGVJbmZv
KiBpbmZvLCBjb25zdCBjaGFyKiBob3N0LCBUTFNFcnJvcnNUZXN0KiB0ZXN0KQorICAgIHsKKyAg
ICAgICAgdGVzdC0+cnVuTG9hZEZhaWxlZFdpdGhUTFNFcnJvcnMoaW5mbywgaG9zdCk7CisgICAg
ICAgIHJldHVybiBUUlVFOworICAgIH0KKworICAgIHZvaWQgcnVuTG9hZEZhaWxlZFdpdGhUTFNF
cnJvcnMoV2ViS2l0Q2VydGlmaWNhdGVJbmZvKiBpbmZvLCBjb25zdCBjaGFyKiBob3N0KQorICAg
IHsKKyAgICAgICAgaWYgKG1fY2VydGlmaWNhdGVJbmZvKQorICAgICAgICAgICAgd2Via2l0X2Nl
cnRpZmljYXRlX2luZm9fZnJlZShtX2NlcnRpZmljYXRlSW5mbyk7CisgICAgICAgIG1fY2VydGlm
aWNhdGVJbmZvID0gd2Via2l0X2NlcnRpZmljYXRlX2luZm9fY29weShpbmZvKTsKKyAgICAgICAg
bV9ob3N0LnNldChnX3N0cmR1cChob3N0KSk7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9t
YWluTG9vcCk7CisgICAgfQorCisgICAgdm9pZCB3YWl0VW50aWxMb2FkRmFpbGVkV2l0aFRMU0Vy
cm9ycygpCisgICAgeworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAg
fQorCisgICAgV2ViS2l0Q2VydGlmaWNhdGVJbmZvKiBjZXJ0aWZpY2F0ZUluZm8oKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fY2VydGlmaWNhdGVJbmZvOworICAgIH0KKworICAgIGNvbnN0IGNo
YXIqIGhvc3QoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faG9zdC5nZXQoKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgV2ViS2l0Q2VydGlmaWNhdGVJbmZvKiBtX2NlcnRpZmljYXRlSW5mbzsK
KyAgICBHT3duUHRyPGNoYXI+IG1faG9zdDsKK307CisKK3N0YXRpYyB2b2lkIHRlc3RMb2FkRmFp
bGVkV2l0aFRMU0Vycm9ycyhUTFNFcnJvcnNUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQorewor
ICAgIFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRl
eHQodGVzdC0+bV93ZWJWaWV3KTsKKyAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3Rsc19lcnJv
cnNfcG9saWN5KGNvbnRleHQsIFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9GQUlMKTsKKworICAg
IC8vIFRoZSBsb2FkLWZhaWxlZC13aXRoLXRscy1lcnJvcnMgc2lnbmFsIHNob3VsZCBiZSBlbWl0
dGVkIHdoZW4gdGhlcmUgaXMgYSBUTFMgZmFpbHVyZS4KKyAgICB0ZXN0LT5sb2FkVVJJKGtIdHRw
c1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3Rlc3QtdGxzLyIpLmRhdGEoKSk7CisgICAgdGVzdC0+
d2FpdFVudGlsTG9hZEZhaWxlZFdpdGhUTFNFcnJvcnMoKTsKKyAgICAvLyBUZXN0IHRoZSBXZWJL
aXRDZXJ0aWZpY2F0ZUluZm8gQVBJLgorICAgIGdfYXNzZXJ0KEdfSVNfVExTX0NFUlRJRklDQVRF
KHdlYmtpdF9jZXJ0aWZpY2F0ZV9pbmZvX2dldF90bHNfY2VydGlmaWNhdGUodGVzdC0+Y2VydGlm
aWNhdGVJbmZvKCkpKSk7CisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfY2VydGlmaWNhdGVf
aW5mb19nZXRfdGxzX2Vycm9ycyh0ZXN0LT5jZXJ0aWZpY2F0ZUluZm8oKSksID09LCBHX1RMU19D
RVJUSUZJQ0FURV9VTktOT1dOX0NBKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+aG9zdCgp
LCA9PSwgc291cF91cmlfZ2V0X2hvc3Qoa0h0dHBzU2VydmVyLT5iYXNlVVJJKCkpKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzBdLCA9PSwgTG9hZFRyYWNraW5nVGVz
dDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1f
bG9hZEV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7CisKKyAg
ICAvLyBUZXN0IGFsbG93aW5nIGFuIGV4Y2VwdGlvbiBmb3IgdGhpcyBjZXJ0aWZpY2F0ZSBvbiB0
aGlzIGhvc3QuCisgICAgd2Via2l0X3dlYl9jb250ZXh0X2FsbG93X3Rsc19jZXJ0aWZpY2F0ZV9m
b3JfaG9zdChjb250ZXh0LCB0ZXN0LT5jZXJ0aWZpY2F0ZUluZm8oKSwgdGVzdC0+aG9zdCgpKTsK
KyAgICAvLyBUaGUgcGFnZSBzaG91bGQgbm93IGxvYWQgd2l0aG91dCBlcnJvcnMuCisgICAgdGVz
dC0+bG9hZFVSSShrSHR0cHNTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi90ZXN0LXRscy8iKS5kYXRh
KCkpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnRf
Y21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1swXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zp
c2lvbmFsTG9hZFN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVu
dHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkQ29tbWl0dGVkKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9h
ZEZpbmlzaGVkKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dldF90aXRs
ZSh0ZXN0LT5tX3dlYlZpZXcpLCA9PSwgVExTRXhwZWN0ZWRTdWNjZXNzVGl0bGUpOworfQorCisK
K3N0YXRpYyB2b2lkIGh0dHBzU2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3Vw
TWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSosIFNvdXBDbGll
bnRDb250ZXh0KiwgZ3BvaW50ZXIpCit7CisgICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQ
X01FVEhPRF9HRVQpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwg
U09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiLyIpKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9z
ZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKKyAgICAgICAgc291cF9tZXNzYWdl
X2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywg
aW5kZXhIVE1MLCBzdHJsZW4oaW5kZXhIVE1MKSk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5
X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOworICAgIH0gZWxzZSBpZiAoZ19zdHJf
ZXF1YWwocGF0aCwgIi9pbnNlY3VyZS1jb250ZW50LyIpKSB7CisgICAgICAgIEdPd25QdHI8Y2hh
cj4gcmVzcG9uc2VIVE1MKGdfc3RyZHVwX3ByaW50ZihpbnNlY3VyZUNvbnRlbnRIVE1MLCBrSHR0
cFNlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3Rlc3Qtc2NyaXB0IikuZGF0YSgpLCBrSHR0cFNlcnZl
ci0+Z2V0VVJJRm9yUGF0aCgiL3Rlc3QtaW1hZ2UiKS5kYXRhKCkpKTsKKyAgICAgICAgc291cF9t
ZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX0NP
UFksIHJlc3BvbnNlSFRNTC5nZXQoKSwgc3RybGVuKHJlc3BvbnNlSFRNTC5nZXQoKSkpOworICAg
ICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7Cisg
ICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkp
OworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi90ZXN0LXRscy8iKSkgeworICAg
ICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7Cisg
ICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBT
T1VQX01FTU9SWV9TVEFUSUMsIFRMU1N1Y2Nlc3NIVE1MU3RyaW5nLCBzdHJsZW4oVExTU3VjY2Vz
c0hUTUxTdHJpbmcpKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2Fn
ZS0+cmVzcG9uc2VfYm9keSk7CisgICAgfSBlbHNlCisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRf
c3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7Cit9CisKK3N0YXRpYyB2b2lk
IGh0dHBTZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtZXNz
YWdlLCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiwgU291cENsaWVudENvbnRleHQqLCBn
cG9pbnRlcikKK3sKKyAgICBpZiAobWVzc2FnZS0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkg
eworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19O
T1RfSU1QTEVNRU5URUQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGdfc3Ry
X2VxdWFsKHBhdGgsICIvdGVzdC1zY3JpcHQiKSkgeworICAgICAgICBHT3duUHRyPGNoYXI+IHBh
dGhUb0ZpbGUoZ19idWlsZF9maWxlbmFtZShUZXN0OjpnZXRSZXNvdXJjZXNEaXIoKS5kYXRhKCks
ICJsaW5rLXRpdGxlLmpzIiwgTlVMTCkpOworICAgICAgICBjaGFyKiBjb250ZW50czsKKyAgICAg
ICAgZ3NpemUgbGVuZ3RoOworICAgICAgICBnX2ZpbGVfZ2V0X2NvbnRlbnRzKHBhdGhUb0ZpbGUu
Z2V0KCksICZjb250ZW50cywgJmxlbmd0aCwgMCk7CisKKyAgICAgICAgc291cF9tZXNzYWdlX2Jv
ZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGNvbnRl
bnRzLCBsZW5ndGgpOworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBT
T1VQX1NUQVRVU19PSyk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3Nh
Z2UtPnJlc3BvbnNlX2JvZHkpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi90
ZXN0LWltYWdlIikpIHsKKyAgICAgICAgR093blB0cjxjaGFyPiBwYXRoVG9GaWxlKGdfYnVpbGRf
ZmlsZW5hbWUoVGVzdDo6Z2V0V2ViS2l0MVRlc3RSZXNvdWNlc0RpcigpLmRhdGEoKSwgImJsYW5r
LmljbyIsIE5VTEwpKTsKKyAgICAgICAgY2hhciogY29udGVudHM7CisgICAgICAgIGdzaXplIGxl
bmd0aDsKKyAgICAgICAgZ19maWxlX2dldF9jb250ZW50cyhwYXRoVG9GaWxlLmdldCgpLCAmY29u
dGVudHMsICZsZW5ndGgsIDApOworCisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZCht
ZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBjb250ZW50cywgbGVuZ3Ro
KTsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNf
T0spOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25z
ZV9ib2R5KTsKKyAgICB9IGVsc2UKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVz
c2FnZSwgU09VUF9TVEFUVVNfTk9UX0ZPVU5EKTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQorewor
ICAgIGtIdHRwc1NlcnZlciA9IG5ldyBXZWJLaXRUZXN0U2VydmVyKFdlYktpdFRlc3RTZXJ2ZXI6
OlNlcnZlckhUVFBTKTsKKyAgICBrSHR0cHNTZXJ2ZXItPnJ1bihodHRwc1NlcnZlckNhbGxiYWNr
KTsKKworICAgIGtIdHRwU2VydmVyID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIoV2ViS2l0VGVzdFNl
cnZlcjo6U2VydmVySFRUUCk7CisgICAga0h0dHBTZXJ2ZXItPnJ1bihodHRwU2VydmVyQ2FsbGJh
Y2spOworCisgICAgU1NMVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInNzbCIsIHRlc3RTU0wp
OworICAgIEluc2VjdXJlQ29udGVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJpbnNlY3Vy
ZS1jb250ZW50IiwgdGVzdEluc2VjdXJlQ29udGVudCk7CisgICAgLy8gSW4gdGhpcyBjYXNlIHRo
ZSBvcmRlciBvZiB0aGUgdGVzdHMgZG9lcyBtYXR0ZXIgYmVjYXVzZSB0bHMtZXJyb3JzLXBvbGlj
eSB0ZXN0cyB0aGUgZGVmYXVsdCBwb2xpY3ksCisgICAgLy8gYW5kIGV4cGVjdHMgdGhhdCBubyBl
eGNlcHRpb24gd2lsbCBoYXZlIGJlZW4gYWRkZWQgZm9yIHRoaXMgY2VydGlmaWNhdGUgYW5kIGhv
c3QgcGFpciBhcyBpcworICAgIC8vIGRvbmUgaW4gdGhlIHRscy1wZXJtaXNzaW9uLXJlcXVlc3Qg
dGVzdC4KKyAgICBTU0xUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAidGxzLWVycm9ycy1wb2xp
Y3kiLCB0ZXN0VExTRXJyb3JzUG9saWN5KTsKKyAgICBUTFNFcnJvcnNUZXN0OjphZGQoIldlYktp
dFdlYlZpZXciLCAibG9hZC1mYWlsZWQtd2l0aC10bHMtZXJyb3JzIiwgdGVzdExvYWRGYWlsZWRX
aXRoVExTRXJyb3JzKTsKK30KKwordm9pZCBhZnRlckFsbCgpCit7CisgICAgZGVsZXRlIGtIdHRw
c1NlcnZlcjsKKyAgICBkZWxldGUga0h0dHBTZXJ2ZXI7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFVJQ2xpZW50LmNwcCBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0VUlDbGllbnQuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMzBkNmQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFVJQ2xpZW50LmNwcApAQCAtMCww
ICsxLDY3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCisjaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nSGFzaC5oPgorCitzdGF0aWMgY29uc3QgY2hhcioga0FsZXJ0RGlhbG9nTWVz
c2FnZSA9ICJXZWJLaXRHVEsrIGFsZXJ0IGRpYWxvZyBtZXNzYWdlIjsKK3N0YXRpYyBjb25zdCBj
aGFyKiBrQ29uZmlybURpYWxvZ01lc3NhZ2UgPSAiV2ViS2l0R1RLKyBjb25maXJtIGRpYWxvZyBt
ZXNzYWdlIjsKK3N0YXRpYyBjb25zdCBjaGFyKiBrUHJvbXB0RGlhbG9nTWVzc2FnZSA9ICJXZWJL
aXRHVEsrIHByb21wdCBkaWFsb2cgbWVzc2FnZSI7CitzdGF0aWMgY29uc3QgY2hhcioga1Byb21w
dERpYWxvZ1JldHVybmVkVGV4dCA9ICJXZWJLaXRHVEsrIHByb21wdCBkaWFsb2cgcmV0dXJuZWQg
dGV4dCI7CisKK2NsYXNzIFVJQ2xpZW50VGVzdDogcHVibGljIFdlYlZpZXdUZXN0IHsKK3B1Ymxp
YzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFVJQ2xpZW50VGVzdCk7CisKKyAgICBlbnVt
IFdlYlZpZXdFdmVudHMgeworICAgICAgICBDcmVhdGUsCisgICAgICAgIFJlYWR5VG9TaG93LAor
ICAgICAgICBSdW5Bc01vZGFsLAorICAgICAgICBDbG9zZQorICAgIH07CisKKyAgICBjbGFzcyBX
aW5kb3dQcm9wZXJ0aWVzIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFdpbmRvd1Byb3BlcnRpZXMo
KQorICAgICAgICAgICAgOiBtX2lzTnVsbCh0cnVlKQorICAgICAgICAgICAgLCBtX3Rvb2xiYXJW
aXNpYmxlKHRydWUpCisgICAgICAgICAgICAsIG1fc3RhdHVzYmFyVmlzaWJsZSh0cnVlKQorICAg
ICAgICAgICAgLCBtX3Njcm9sbGJhcnNWaXNpYmxlKHRydWUpCisgICAgICAgICAgICAsIG1fbWVu
dWJhclZpc2libGUodHJ1ZSkKKyAgICAgICAgICAgICwgbV9sb2NhdGlvbmJhclZpc2libGUodHJ1
ZSkKKyAgICAgICAgICAgICwgbV9yZXNpemFibGUodHJ1ZSkKKyAgICAgICAgICAgICwgbV9mdWxs
c2NyZWVuKGZhbHNlKQorICAgICAgICB7CisgICAgICAgICAgICBtZW1zZXQoJm1fZ2VvbWV0cnks
IDAsIHNpemVvZihHZGtSZWN0YW5nbGUpKTsKKyAgICAgICAgfQorCisgICAgICAgIFdpbmRvd1By
b3BlcnRpZXMoV2ViS2l0V2luZG93UHJvcGVydGllcyogd2luZG93UHJvcGVydGllcykKKyAgICAg
ICAgICAgIDogbV9pc051bGwoZmFsc2UpCisgICAgICAgICAgICAsIG1fdG9vbGJhclZpc2libGUo
d2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF90b29sYmFyX3Zpc2libGUod2luZG93UHJvcGVy
dGllcykpCisgICAgICAgICAgICAsIG1fc3RhdHVzYmFyVmlzaWJsZSh3ZWJraXRfd2luZG93X3By
b3BlcnRpZXNfZ2V0X3N0YXR1c2Jhcl92aXNpYmxlKHdpbmRvd1Byb3BlcnRpZXMpKQorICAgICAg
ICAgICAgLCBtX3Njcm9sbGJhcnNWaXNpYmxlKHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRf
c2Nyb2xsYmFyc192aXNpYmxlKHdpbmRvd1Byb3BlcnRpZXMpKQorICAgICAgICAgICAgLCBtX21l
bnViYXJWaXNpYmxlKHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRfbWVudWJhcl92aXNpYmxl
KHdpbmRvd1Byb3BlcnRpZXMpKQorICAgICAgICAgICAgLCBtX2xvY2F0aW9uYmFyVmlzaWJsZSh3
ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X2xvY2F0aW9uYmFyX3Zpc2libGUod2luZG93UHJv
cGVydGllcykpCisgICAgICAgICAgICAsIG1fcmVzaXphYmxlKHdlYmtpdF93aW5kb3dfcHJvcGVy
dGllc19nZXRfcmVzaXphYmxlKHdpbmRvd1Byb3BlcnRpZXMpKQorICAgICAgICAgICAgLCBtX2Z1
bGxzY3JlZW4od2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF9mdWxsc2NyZWVuKHdpbmRvd1By
b3BlcnRpZXMpKQorICAgICAgICB7CisgICAgICAgICAgICB3ZWJraXRfd2luZG93X3Byb3BlcnRp
ZXNfZ2V0X2dlb21ldHJ5KHdpbmRvd1Byb3BlcnRpZXMsICZtX2dlb21ldHJ5KTsKKyAgICAgICAg
fQorCisgICAgICAgIFdpbmRvd1Byb3BlcnRpZXMoR2RrUmVjdGFuZ2xlKiBnZW9tZXRyeSwgYm9v
bCB0b29sYmFyVmlzaWJsZSwgYm9vbCBzdGF0dXNiYXJWaXNpYmxlLCBib29sIHNjcm9sbGJhcnNW
aXNpYmxlLCBib29sIG1lbnViYXJWaXNpYmxlLCBib29sIGxvY2F0aW9uYmFyVmlzaWJsZSwgYm9v
bCByZXNpemFibGUsIGJvb2wgZnVsbHNjcmVlbikKKyAgICAgICAgICAgIDogbV9pc051bGwoZmFs
c2UpCisgICAgICAgICAgICAsIG1fZ2VvbWV0cnkoKmdlb21ldHJ5KQorICAgICAgICAgICAgLCBt
X3Rvb2xiYXJWaXNpYmxlKHRvb2xiYXJWaXNpYmxlKQorICAgICAgICAgICAgLCBtX3N0YXR1c2Jh
clZpc2libGUoc3RhdHVzYmFyVmlzaWJsZSkKKyAgICAgICAgICAgICwgbV9zY3JvbGxiYXJzVmlz
aWJsZShzY3JvbGxiYXJzVmlzaWJsZSkKKyAgICAgICAgICAgICwgbV9tZW51YmFyVmlzaWJsZSht
ZW51YmFyVmlzaWJsZSkKKyAgICAgICAgICAgICwgbV9sb2NhdGlvbmJhclZpc2libGUobG9jYXRp
b25iYXJWaXNpYmxlKQorICAgICAgICAgICAgLCBtX3Jlc2l6YWJsZShyZXNpemFibGUpCisgICAg
ICAgICAgICAsIG1fZnVsbHNjcmVlbihmdWxsc2NyZWVuKQorICAgICAgICB7CisgICAgICAgIH0K
KworICAgICAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1faXNOdWxsOyB9CisKKyAg
ICAgICAgdm9pZCBhc3NlcnRFcXVhbChjb25zdCBXaW5kb3dQcm9wZXJ0aWVzJiBvdGhlcikgY29u
c3QKKyAgICAgICAgeworICAgICAgICAgICAgZ19hc3NlcnRfY21waW50KG1fZ2VvbWV0cnkueCwg
PT0sIG90aGVyLm1fZ2VvbWV0cnkueCk7CisgICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQobV9n
ZW9tZXRyeS55LCA9PSwgb3RoZXIubV9nZW9tZXRyeS55KTsKKyAgICAgICAgICAgIGdfYXNzZXJ0
X2NtcGludChtX2dlb21ldHJ5LndpZHRoLCA9PSwgb3RoZXIubV9nZW9tZXRyeS53aWR0aCk7Cisg
ICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQobV9nZW9tZXRyeS5oZWlnaHQsID09LCBvdGhlci5t
X2dlb21ldHJ5LmhlaWdodCk7CisgICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQoc3RhdGljX2Nh
c3Q8aW50PihtX3Rvb2xiYXJWaXNpYmxlKSwgPT0sIHN0YXRpY19jYXN0PGludD4ob3RoZXIubV90
b29sYmFyVmlzaWJsZSkpOworICAgICAgICAgICAgZ19hc3NlcnRfY21waW50KHN0YXRpY19jYXN0
PGludD4obV9zdGF0dXNiYXJWaXNpYmxlKSwgPT0sIHN0YXRpY19jYXN0PGludD4ob3RoZXIubV9z
dGF0dXNiYXJWaXNpYmxlKSk7CisgICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQoc3RhdGljX2Nh
c3Q8aW50PihtX3Njcm9sbGJhcnNWaXNpYmxlKSwgPT0sIHN0YXRpY19jYXN0PGludD4ob3RoZXIu
bV9zY3JvbGxiYXJzVmlzaWJsZSkpOworICAgICAgICAgICAgZ19hc3NlcnRfY21waW50KHN0YXRp
Y19jYXN0PGludD4obV9tZW51YmFyVmlzaWJsZSksID09LCBzdGF0aWNfY2FzdDxpbnQ+KG90aGVy
Lm1fbWVudWJhclZpc2libGUpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0X2NtcGludChzdGF0aWNf
Y2FzdDxpbnQ+KG1fbG9jYXRpb25iYXJWaXNpYmxlKSwgPT0sIHN0YXRpY19jYXN0PGludD4ob3Ro
ZXIubV9sb2NhdGlvbmJhclZpc2libGUpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0X2NtcGludChz
dGF0aWNfY2FzdDxpbnQ+KG1fcmVzaXphYmxlKSwgPT0sIHN0YXRpY19jYXN0PGludD4ob3RoZXIu
bV9yZXNpemFibGUpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0X2NtcGludChzdGF0aWNfY2FzdDxp
bnQ+KG1fZnVsbHNjcmVlbiksID09LCBzdGF0aWNfY2FzdDxpbnQ+KG90aGVyLm1fZnVsbHNjcmVl
bikpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBib29sIG1faXNOdWxsOwor
CisgICAgICAgIEdka1JlY3RhbmdsZSBtX2dlb21ldHJ5OworCisgICAgICAgIGJvb2wgbV90b29s
YmFyVmlzaWJsZTsKKyAgICAgICAgYm9vbCBtX3N0YXR1c2JhclZpc2libGU7CisgICAgICAgIGJv
b2wgbV9zY3JvbGxiYXJzVmlzaWJsZTsKKyAgICAgICAgYm9vbCBtX21lbnViYXJWaXNpYmxlOwor
ICAgICAgICBib29sIG1fbG9jYXRpb25iYXJWaXNpYmxlOworCisgICAgICAgIGJvb2wgbV9yZXNp
emFibGU7CisgICAgICAgIGJvb2wgbV9mdWxsc2NyZWVuOworICAgIH07CisKKyAgICBzdGF0aWMg
dm9pZCB3aW5kb3dQcm9wZXJ0aWVzTm90aWZ5Q2FsbGJhY2soR09iamVjdCosIEdQYXJhbVNwZWMq
IHBhcmFtU3BlYywgVUlDbGllbnRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+bV93
aW5kb3dQcm9wZXJ0aWVzQ2hhbmdlZC5hZGQoZ19wYXJhbV9zcGVjX2dldF9uYW1lKHBhcmFtU3Bl
YykpOworICAgIH0KKworICAgIHN0YXRpYyBHdGtXaWRnZXQqIHZpZXdDcmVhdGVDYWxsYmFjayhX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBVSUNsaWVudFRlc3QqIHRlc3QpCisgICAgeworICAgICAg
ICByZXR1cm4gdGVzdC0+dmlld0NyZWF0ZSh3ZWJWaWV3KTsKKyAgICB9CisKKyAgICBzdGF0aWMg
dm9pZCB2aWV3UmVhZHlUb1Nob3dDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBVSUNs
aWVudFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT52aWV3UmVhZHlUb1Nob3cod2Vi
Vmlldyk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgdmlld0Nsb3NlQ2FsbGJhY2soV2ViS2l0
V2ViVmlldyogd2ViVmlldywgVUlDbGllbnRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVz
dC0+dmlld0Nsb3NlKHdlYlZpZXcpOworICAgIH0KKworICAgIHZvaWQgc2NyaXB0QWxlcnQoV2Vi
S2l0U2NyaXB0RGlhbG9nKiBkaWFsb2cpCisgICAgeworICAgICAgICBzd2l0Y2ggKG1fc2NyaXB0
RGlhbG9nVHlwZSkgeworICAgICAgICBjYXNlIFdFQktJVF9TQ1JJUFRfRElBTE9HX0FMRVJUOgor
ICAgICAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zY3JpcHRfZGlhbG9nX2dldF9tZXNz
YWdlKGRpYWxvZyksID09LCBrQWxlcnREaWFsb2dNZXNzYWdlKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFdFQktJVF9TQ1JJUFRfRElBTE9HX0NPTkZJUk06CisgICAgICAgICAg
ICBnX2Fzc2VydChtX3NjcmlwdERpYWxvZ0NvbmZpcm1lZCk7CisgICAgICAgICAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X3NjcmlwdF9kaWFsb2dfZ2V0X21lc3NhZ2UoZGlhbG9nKSwgPT0sICJj
b25maXJtZWQiKTsKKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0VCS0lUX1ND
UklQVF9ESUFMT0dfUFJPTVBUOgorICAgICAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9z
Y3JpcHRfZGlhbG9nX2dldF9tZXNzYWdlKGRpYWxvZyksID09LCBrUHJvbXB0RGlhbG9nUmV0dXJu
ZWRUZXh0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZ19tYWlu
X2xvb3BfcXVpdChtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICB2b2lkIHNjcmlwdENvbmZpcm0o
V2ViS2l0U2NyaXB0RGlhbG9nKiBkaWFsb2cpCisgICAgeworICAgICAgICBnX2Fzc2VydF9jbXBz
dHIod2Via2l0X3NjcmlwdF9kaWFsb2dfZ2V0X21lc3NhZ2UoZGlhbG9nKSwgPT0sIGtDb25maXJt
RGlhbG9nTWVzc2FnZSk7CisgICAgICAgIG1fc2NyaXB0RGlhbG9nQ29uZmlybWVkID0gIW1fc2Ny
aXB0RGlhbG9nQ29uZmlybWVkOworICAgICAgICB3ZWJraXRfc2NyaXB0X2RpYWxvZ19jb25maXJt
X3NldF9jb25maXJtZWQoZGlhbG9nLCBtX3NjcmlwdERpYWxvZ0NvbmZpcm1lZCk7CisgICAgfQor
CisgICAgdm9pZCBzY3JpcHRQcm9tcHQoV2ViS2l0U2NyaXB0RGlhbG9nKiBkaWFsb2cpCisgICAg
eworICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NjcmlwdF9kaWFsb2dfZ2V0X21lc3Nh
Z2UoZGlhbG9nKSwgPT0sIGtQcm9tcHREaWFsb2dNZXNzYWdlKTsKKyAgICAgICAgZ19hc3NlcnRf
Y21wc3RyKHdlYmtpdF9zY3JpcHRfZGlhbG9nX3Byb21wdF9nZXRfZGVmYXVsdF90ZXh0KGRpYWxv
ZyksID09LCAiZGVmYXVsdCIpOworICAgICAgICB3ZWJraXRfc2NyaXB0X2RpYWxvZ19wcm9tcHRf
c2V0X3RleHQoZGlhbG9nLCBrUHJvbXB0RGlhbG9nUmV0dXJuZWRUZXh0KTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgZ2Jvb2xlYW4gc2NyaXB0RGlhbG9nKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRTY3Jp
cHREaWFsb2cqIGRpYWxvZywgVUlDbGllbnRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgc3dp
dGNoICh3ZWJraXRfc2NyaXB0X2RpYWxvZ19nZXRfZGlhbG9nX3R5cGUoZGlhbG9nKSkgeworICAg
ICAgICBjYXNlIFdFQktJVF9TQ1JJUFRfRElBTE9HX0FMRVJUOgorICAgICAgICAgICAgdGVzdC0+
c2NyaXB0QWxlcnQoZGlhbG9nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdF
QktJVF9TQ1JJUFRfRElBTE9HX0NPTkZJUk06CisgICAgICAgICAgICB0ZXN0LT5zY3JpcHRDb25m
aXJtKGRpYWxvZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXRUJLSVRfU0NS
SVBUX0RJQUxPR19QUk9NUFQ6CisgICAgICAgICAgICB0ZXN0LT5zY3JpcHRQcm9tcHQoZGlhbG9n
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIFRSVUU7
CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgbW91c2VUYXJnZXRDaGFuZ2VkKFdlYktpdFdlYlZp
ZXcqLCBXZWJLaXRIaXRUZXN0UmVzdWx0KiBoaXRUZXN0UmVzdWx0LCBndWludCBtb2RpZmllcnMs
IFVJQ2xpZW50VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19I
SVRfVEVTVF9SRVNVTFQoaGl0VGVzdFJlc3VsdCkpOworICAgICAgICB0ZXN0LT5hc3NlcnRPYmpl
Y3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKGhpdFRlc3RSZXN1bHQpKTsKKwor
ICAgICAgICB0ZXN0LT5tX21vdXNlVGFyZ2V0SGl0VGVzdFJlc3VsdCA9IGhpdFRlc3RSZXN1bHQ7
CisgICAgICAgIHRlc3QtPm1fbW91c2VUYXJnZXRNb2RpZmllcnMgPSBtb2RpZmllcnM7CisgICAg
ICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7CisgICAgfQorCisgICAgc3Rh
dGljIGdib29sZWFuIHBlcm1pc3Npb25SZXF1ZXN0ZWQoV2ViS2l0V2ViVmlldyosIFdlYktpdFBl
cm1pc3Npb25SZXF1ZXN0KiByZXF1ZXN0LCBVSUNsaWVudFRlc3QqIHRlc3QpCisgICAgeworICAg
ICAgICBnX2Fzc2VydChXRUJLSVRfSVNfUEVSTUlTU0lPTl9SRVFVRVNUKHJlcXVlc3QpKTsKKyAg
ICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVD
VChyZXF1ZXN0KSk7CisKKyAgICAgICAgaWYgKHRlc3QtPm1fYWxsb3dQZXJtaXNzaW9uUmVxdWVz
dHMpCisgICAgICAgICAgICB3ZWJraXRfcGVybWlzc2lvbl9yZXF1ZXN0X2FsbG93KHJlcXVlc3Qp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICB3ZWJraXRfcGVybWlzc2lvbl9yZXF1ZXN0X2Rl
bnkocmVxdWVzdCk7CisKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgVUlDbGll
bnRUZXN0KCkKKyAgICAgICAgOiBtX3NjcmlwdERpYWxvZ1R5cGUoV0VCS0lUX1NDUklQVF9ESUFM
T0dfQUxFUlQpCisgICAgICAgICwgbV9zY3JpcHREaWFsb2dDb25maXJtZWQodHJ1ZSkKKyAgICAg
ICAgLCBtX2FsbG93UGVybWlzc2lvblJlcXVlc3RzKGZhbHNlKQorICAgICAgICAsIG1fbW91c2VU
YXJnZXRNb2RpZmllcnMoMCkKKyAgICB7CisgICAgICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfamF2
YXNjcmlwdF9jYW5fb3Blbl93aW5kb3dzX2F1dG9tYXRpY2FsbHkod2Via2l0X3dlYl92aWV3X2dl
dF9zZXR0aW5ncyhtX3dlYlZpZXcpLCBUUlVFKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdCht
X3dlYlZpZXcsICJjcmVhdGUiLCBHX0NBTExCQUNLKHZpZXdDcmVhdGVDYWxsYmFjayksIHRoaXMp
OworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgInNjcmlwdC1kaWFsb2ciLCBH
X0NBTExCQUNLKHNjcmlwdERpYWxvZyksIHRoaXMpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0
KG1fd2ViVmlldywgIm1vdXNlLXRhcmdldC1jaGFuZ2VkIiwgR19DQUxMQkFDSyhtb3VzZVRhcmdl
dENoYW5nZWQpLCB0aGlzKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJw
ZXJtaXNzaW9uLXJlcXVlc3QiLCBHX0NBTExCQUNLKHBlcm1pc3Npb25SZXF1ZXN0ZWQpLCB0aGlz
KTsKKyAgICB9CisKKyAgICB+VUlDbGllbnRUZXN0KCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFs
X2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3dlYlZpZXcsIEdfU0lHTkFMX01BVENIX0RB
VEEsIDAsIDAsIDAsIDAsIHRoaXMpOworICAgIH0KKworICAgIHZvaWQgd2FpdFVudGlsTWFpbkxv
b3BGaW5pc2hlcygpCisgICAgeworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7
CisgICAgfQorCisgICAgdm9pZCBzZXRFeHBlY3RlZFdpbmRvd1Byb3BlcnRpZXMoY29uc3QgV2lu
ZG93UHJvcGVydGllcyYgd2luZG93UHJvcGVydGllcykKKyAgICB7CisgICAgICAgIG1fd2luZG93
UHJvcGVydGllcyA9IHdpbmRvd1Byb3BlcnRpZXM7CisgICAgfQorCisgICAgV2ViS2l0SGl0VGVz
dFJlc3VsdCogbW92ZU1vdXNlQW5kV2FpdFVudGlsTW91c2VUYXJnZXRDaGFuZ2VkKGludCB4LCBp
bnQgeSwgdW5zaWduZWQgbW91c2VNb2RpZmllcnMgPSAwKQorICAgIHsKKyAgICAgICAgbW91c2VN
b3ZlVG8oeCwgeSwgbW91c2VNb2RpZmllcnMpOworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9t
YWluTG9vcCk7CisgICAgICAgIHJldHVybiBtX21vdXNlVGFyZ2V0SGl0VGVzdFJlc3VsdC5nZXQo
KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIEd0a1dpZGdldCogdmlld0NyZWF0ZShXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3KQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQod2ViVmlldyA9PSBtX3dlYlZp
ZXcpOworCisgICAgICAgIEd0a1dpZGdldCogbmV3V2ViVmlldyA9IHdlYmtpdF93ZWJfdmlld19u
ZXdfd2l0aF9jb250ZXh0KHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dCh3ZWJWaWV3KSk7Cisg
ICAgICAgIGdfb2JqZWN0X3JlZl9zaW5rKG5ld1dlYlZpZXcpOworCisgICAgICAgIG1fd2ViVmll
d0V2ZW50cy5hcHBlbmQoQ3JlYXRlKTsKKworICAgICAgICBXZWJLaXRXaW5kb3dQcm9wZXJ0aWVz
KiB3aW5kb3dQcm9wZXJ0aWVzID0gd2Via2l0X3dlYl92aWV3X2dldF93aW5kb3dfcHJvcGVydGll
cyhXRUJLSVRfV0VCX1ZJRVcobmV3V2ViVmlldykpOworICAgICAgICBnX2Fzc2VydCh3aW5kb3dQ
cm9wZXJ0aWVzKTsKKyAgICAgICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hl
cyhHX09CSkVDVCh3aW5kb3dQcm9wZXJ0aWVzKSk7CisgICAgICAgIG1fd2luZG93UHJvcGVydGll
c0NoYW5nZWQuY2xlYXIoKTsKKworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KHdpbmRvd1Byb3Bl
cnRpZXMsICJub3RpZnkiLCBHX0NBTExCQUNLKHdpbmRvd1Byb3BlcnRpZXNOb3RpZnlDYWxsYmFj
ayksIHRoaXMpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG5ld1dlYlZpZXcsICJyZWFkeS10
by1zaG93IiwgR19DQUxMQkFDSyh2aWV3UmVhZHlUb1Nob3dDYWxsYmFjayksIHRoaXMpOworICAg
ICAgICBnX3NpZ25hbF9jb25uZWN0KG5ld1dlYlZpZXcsICJjbG9zZSIsIEdfQ0FMTEJBQ0sodmll
d0Nsb3NlQ2FsbGJhY2spLCB0aGlzKTsKKworICAgICAgICByZXR1cm4gbmV3V2ViVmlldzsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgdmlld1JlYWR5VG9TaG93KFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcpCisgICAgeworICAgICAgICBnX2Fzc2VydCh3ZWJWaWV3ICE9IG1fd2ViVmlldyk7CisK
KyAgICAgICAgV2ViS2l0V2luZG93UHJvcGVydGllcyogd2luZG93UHJvcGVydGllcyA9IHdlYmtp
dF93ZWJfdmlld19nZXRfd2luZG93X3Byb3BlcnRpZXMod2ViVmlldyk7CisgICAgICAgIGdfYXNz
ZXJ0KHdpbmRvd1Byb3BlcnRpZXMpOworICAgICAgICBpZiAoIW1fd2luZG93UHJvcGVydGllcy5p
c051bGwoKSkKKyAgICAgICAgICAgIFdpbmRvd1Byb3BlcnRpZXMod2luZG93UHJvcGVydGllcyku
YXNzZXJ0RXF1YWwobV93aW5kb3dQcm9wZXJ0aWVzKTsKKworICAgICAgICBtX3dlYlZpZXdFdmVu
dHMuYXBwZW5kKFJlYWR5VG9TaG93KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgdmlld0Ns
b3NlKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCisgICAgeworICAgICAgICBnX2Fzc2VydCh3ZWJW
aWV3ICE9IG1fd2ViVmlldyk7CisKKyAgICAgICAgbV93ZWJWaWV3RXZlbnRzLmFwcGVuZChDbG9z
ZSk7CisgICAgICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOworCisgICAgICAgIGdfbWFpbl9s
b29wX3F1aXQobV9tYWluTG9vcCk7CisgICAgfQorCisgICAgVmVjdG9yPFdlYlZpZXdFdmVudHM+
IG1fd2ViVmlld0V2ZW50czsKKyAgICBXZWJLaXRTY3JpcHREaWFsb2dUeXBlIG1fc2NyaXB0RGlh
bG9nVHlwZTsKKyAgICBib29sIG1fc2NyaXB0RGlhbG9nQ29uZmlybWVkOworICAgIGJvb2wgbV9h
bGxvd1Blcm1pc3Npb25SZXF1ZXN0czsKKyAgICBXaW5kb3dQcm9wZXJ0aWVzIG1fd2luZG93UHJv
cGVydGllczsKKyAgICBIYXNoU2V0PFdURjo6U3RyaW5nPiBtX3dpbmRvd1Byb3BlcnRpZXNDaGFu
Z2VkOworICAgIEdSZWZQdHI8V2ViS2l0SGl0VGVzdFJlc3VsdD4gbV9tb3VzZVRhcmdldEhpdFRl
c3RSZXN1bHQ7CisgICAgdW5zaWduZWQgbV9tb3VzZVRhcmdldE1vZGlmaWVyczsKK307CisKK3N0
YXRpYyB2b2lkIHRlc3RXZWJWaWV3Q3JlYXRlUmVhZHlDbG9zZShVSUNsaWVudFRlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxib2R5IG9uTG9h
ZD1cIndpbmRvdy5vcGVuKCkuY2xvc2UoKTtcIj48L2h0bWw+IiwgMCk7CisgICAgdGVzdC0+d2Fp
dFVudGlsTWFpbkxvb3BGaW5pc2hlcygpOworCisgICAgVmVjdG9yPFVJQ2xpZW50VGVzdDo6V2Vi
Vmlld0V2ZW50cz4mIGV2ZW50cyA9IHRlc3QtPm1fd2ViVmlld0V2ZW50czsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDMpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVu
dHNbMF0sID09LCBVSUNsaWVudFRlc3Q6OkNyZWF0ZSk7CisgICAgZ19hc3NlcnRfY21waW50KGV2
ZW50c1sxXSwgPT0sIFVJQ2xpZW50VGVzdDo6UmVhZHlUb1Nob3cpOworICAgIGdfYXNzZXJ0X2Nt
cGludChldmVudHNbMl0sID09LCBVSUNsaWVudFRlc3Q6OkNsb3NlKTsKK30KKworc3RhdGljIGdi
b29sZWFuIGNoZWNrTWltZVR5cGVGb3JGaWx0ZXIoR3RrRmlsZUZpbHRlciogZmlsdGVyLCBjb25z
dCBnY2hhciogbWltZVR5cGUpCit7CisgICAgR3RrRmlsZUZpbHRlckluZm8gZmlsdGVySW5mbzsK
KyAgICBmaWx0ZXJJbmZvLmNvbnRhaW5zID0gR1RLX0ZJTEVfRklMVEVSX01JTUVfVFlQRTsKKyAg
ICBmaWx0ZXJJbmZvLm1pbWVfdHlwZSA9IG1pbWVUeXBlOworICAgIHJldHVybiBndGtfZmlsZV9m
aWx0ZXJfZmlsdGVyKGZpbHRlciwgJmZpbHRlckluZm8pOworfQorCitjbGFzcyBNb2RhbERpYWxv
Z3NUZXN0OiBwdWJsaWMgVUlDbGllbnRUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVT
VF9GSVhUVVJFKE1vZGFsRGlhbG9nc1Rlc3QpOworCisgICAgc3RhdGljIHZvaWQgZGlhbG9nUnVu
QXNNb2RhbENhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIE1vZGFsRGlhbG9nc1Rlc3Qq
IHRlc3QpCisgICAgeworICAgICAgICBnX2Fzc2VydCh3ZWJWaWV3ICE9IHRlc3QtPm1fd2ViVmll
dyk7CisgICAgICAgIHRlc3QtPm1fd2ViVmlld0V2ZW50cy5hcHBlbmQoUnVuQXNNb2RhbCk7Cisg
ICAgfQorCisgICAgR3RrV2lkZ2V0KiB2aWV3Q3JlYXRlKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcp
CisgICAgeworICAgICAgICBnX2Fzc2VydCh3ZWJWaWV3ID09IG1fd2ViVmlldyk7CisKKyAgICAg
ICAgR3RrV2lkZ2V0KiBuZXdXZWJWaWV3ID0gVUlDbGllbnRUZXN0Ojp2aWV3Q3JlYXRlKHdlYlZp
ZXcpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG5ld1dlYlZpZXcsICJydW4tYXMtbW9kYWwi
LCBHX0NBTExCQUNLKGRpYWxvZ1J1bkFzTW9kYWxDYWxsYmFjayksIHRoaXMpOworICAgICAgICBy
ZXR1cm4gbmV3V2ViVmlldzsKKyAgICB9CisKKyAgICB2b2lkIHZpZXdSZWFkeVRvU2hvdyhXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3KQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQod2ViVmlldyAhPSBt
X3dlYlZpZXcpOworICAgICAgICBtX3dlYlZpZXdFdmVudHMuYXBwZW5kKFJlYWR5VG9TaG93KTsK
KyAgICB9Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0FsbG93TW9kYWxEaWFsb2dzKE1v
ZGFsRGlhbG9nc1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgV2ViS2l0U2V0dGlu
Z3MqIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh0ZXN0LT5tX3dlYlZp
ZXcpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfYWxsb3dfbW9kYWxfZGlhbG9ncyhzZXR0aW5n
cywgVFJVRSk7CisKKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHkgb25sb2FkPVwid2lu
ZG93LnNob3dNb2RhbERpYWxvZygnZGF0YTp0ZXh0L2h0bWwsPGh0bWw+PGJvZHkvPjxzY3JpcHQ+
d2luZG93LmNsb3NlKCk7PC9zY3JpcHQ+PC9odG1sPicpXCI+PC9ib2R5PjwvaHRtbD4iLCAwKTsK
KyAgICB0ZXN0LT53YWl0VW50aWxNYWluTG9vcEZpbmlzaGVzKCk7CisKKyAgICBWZWN0b3I8VUlD
bGllbnRUZXN0OjpXZWJWaWV3RXZlbnRzPiYgZXZlbnRzID0gdGVzdC0+bV93ZWJWaWV3RXZlbnRz
OworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgNCk7CisgICAgZ19hc3Nl
cnRfY21waW50KGV2ZW50c1swXSwgPT0sIFVJQ2xpZW50VGVzdDo6Q3JlYXRlKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgVUlDbGllbnRUZXN0OjpSZWFkeVRvU2hvdyk7Cisg
ICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIFVJQ2xpZW50VGVzdDo6UnVuQXNNb2Rh
bCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1szXSwgPT0sIFVJQ2xpZW50VGVzdDo6Q2xv
c2UpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0Rpc2FsbG93TW9kYWxEaWFsb2dzKE1v
ZGFsRGlhbG9nc1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgV2ViS2l0U2V0dGlu
Z3MqIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh0ZXN0LT5tX3dlYlZp
ZXcpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfYWxsb3dfbW9kYWxfZGlhbG9ncyhzZXR0aW5n
cywgRkFMU0UpOworCisgICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxib2R5IG9ubG9hZD1cIndp
bmRvdy5zaG93TW9kYWxEaWFsb2coJ2RhdGE6dGV4dC9odG1sLDxodG1sPjxib2R5Lz48c2NyaXB0
PndpbmRvdy5jbG9zZSgpOzwvc2NyaXB0PjwvaHRtbD4nKVwiPjwvYm9keT48L2h0bWw+IiwgMCk7
CisgICAgLy8gV2UgbmVlZCB0byB1c2UgYSB0aW1lb3V0IGhlcmUgYmVjYXVzZSB0aGUgdmlld0Ns
b3NlKCkgZnVuY3Rpb24KKyAgICAvLyB3b24ndCBldmVyIGJlIGNhbGxlZCBhcyB0aGUgZGlhbG9n
IHdvbid0IGJlIGNyZWF0ZWQuCisgICAgdGVzdC0+d2FpdCgxKTsKKworICAgIFZlY3RvcjxVSUNs
aWVudFRlc3Q6OldlYlZpZXdFdmVudHM+JiBldmVudHMgPSB0ZXN0LT5tX3dlYlZpZXdFdmVudHM7
CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAwKTsKK30KKworc3RhdGlj
IHZvaWQgdGVzdFdlYlZpZXdKYXZhU2NyaXB0RGlhbG9ncyhVSUNsaWVudFRlc3QqIHRlc3QsIGdj
b25zdHBvaW50ZXIpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGh0bWxPbkxvYWRGb3JtYXQg
PSAiPGh0bWw+PGJvZHkgb25Mb2FkPVwiJXNcIj48L2JvZHk+PC9odG1sPiI7CisgICAgc3RhdGlj
IGNvbnN0IGNoYXIqIGpzQWxlcnRGb3JtYXQgPSAiYWxlcnQoJyVzJykiOworICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBqc0NvbmZpcm1Gb3JtYXQgPSAiZG8geyBjb25maXJtZWQgPSBjb25maXJtKCcl
cycpOyB9IHdoaWxlICghY29uZmlybWVkKTsgYWxlcnQoJ2NvbmZpcm1lZCcpOyI7CisgICAgc3Rh
dGljIGNvbnN0IGNoYXIqIGpzUHJvbXB0Rm9ybWF0ID0gImFsZXJ0KHByb21wdCgnJXMnLCAnZGVm
YXVsdCcpKTsiOworCisgICAgdGVzdC0+bV9zY3JpcHREaWFsb2dUeXBlID0gV0VCS0lUX1NDUklQ
VF9ESUFMT0dfQUxFUlQ7CisgICAgR093blB0cjxjaGFyPiBhbGVydERpYWxvZ01lc3NhZ2UoZ19z
dHJkdXBfcHJpbnRmKGpzQWxlcnRGb3JtYXQsIGtBbGVydERpYWxvZ01lc3NhZ2UpKTsKKyAgICBH
T3duUHRyPGNoYXI+IGFsZXJ0SFRNTChnX3N0cmR1cF9wcmludGYoaHRtbE9uTG9hZEZvcm1hdCwg
YWxlcnREaWFsb2dNZXNzYWdlLmdldCgpKSk7CisgICAgdGVzdC0+bG9hZEh0bWwoYWxlcnRIVE1M
LmdldCgpLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxNYWluTG9vcEZpbmlzaGVzKCk7CisKKyAg
ICB0ZXN0LT5tX3NjcmlwdERpYWxvZ1R5cGUgPSBXRUJLSVRfU0NSSVBUX0RJQUxPR19DT05GSVJN
OworICAgIEdPd25QdHI8Y2hhcj4gY29uZmlybURpYWxvZ01lc3NhZ2UoZ19zdHJkdXBfcHJpbnRm
KGpzQ29uZmlybUZvcm1hdCwga0NvbmZpcm1EaWFsb2dNZXNzYWdlKSk7CisgICAgR093blB0cjxj
aGFyPiBjb25maXJtSFRNTChnX3N0cmR1cF9wcmludGYoaHRtbE9uTG9hZEZvcm1hdCwgY29uZmly
bURpYWxvZ01lc3NhZ2UuZ2V0KCkpKTsKKyAgICB0ZXN0LT5sb2FkSHRtbChjb25maXJtSFRNTC5n
ZXQoKSwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTWFpbkxvb3BGaW5pc2hlcygpOworCisgICAg
dGVzdC0+bV9zY3JpcHREaWFsb2dUeXBlID0gV0VCS0lUX1NDUklQVF9ESUFMT0dfUFJPTVBUOwor
ICAgIEdPd25QdHI8Y2hhcj4gcHJvbXB0RGlhbG9nTWVzc2FnZShnX3N0cmR1cF9wcmludGYoanNQ
cm9tcHRGb3JtYXQsIGtQcm9tcHREaWFsb2dNZXNzYWdlKSk7CisgICAgR093blB0cjxjaGFyPiBw
cm9tcHRIVE1MKGdfc3RyZHVwX3ByaW50ZihodG1sT25Mb2FkRm9ybWF0LCBwcm9tcHREaWFsb2dN
ZXNzYWdlLmdldCgpKSk7CisgICAgdGVzdC0+bG9hZEh0bWwocHJvbXB0SFRNTC5nZXQoKSwgMCk7
CisgICAgdGVzdC0+d2FpdFVudGlsTWFpbkxvb3BGaW5pc2hlcygpOworfQorCitzdGF0aWMgdm9p
ZCB0ZXN0V2ViVmlld1dpbmRvd1Byb3BlcnRpZXMoVUlDbGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rw
b2ludGVyKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyKiB3aW5kb3dQcm9ycGVydGllc1N0cmlu
ZyA9ICJsZWZ0PTEwMCx0b3A9MTUwLHdpZHRoPTQwMCxoZWlnaHQ9NDAwLGxvY2F0aW9uPW5vLG1l
bnViYXI9bm8sc3RhdHVzPW5vLHRvb2xiYXI9bm8sc2Nyb2xsYmFycz1ubyI7CisgICAgR2RrUmVj
dGFuZ2xlIGdlb21ldHJ5ID0geyAxMDAsIDE1MCwgNDAwLCA0MDAgfTsKKyAgICB0ZXN0LT5zZXRF
eHBlY3RlZFdpbmRvd1Byb3BlcnRpZXMoVUlDbGllbnRUZXN0OjpXaW5kb3dQcm9wZXJ0aWVzKCZn
ZW9tZXRyeSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSkp
OworCisgICAgR093blB0cjxjaGFyPiBodG1sU3RyaW5nKGdfc3RyZHVwX3ByaW50ZigiPGh0bWw+
PGJvZHkgb25Mb2FkPVwid2luZG93Lm9wZW4oJycsICcnLCAnJXMnKS5jbG9zZSgpO1wiPjwvYm9k
eT48L2h0bWw+Iiwgd2luZG93UHJvcnBlcnRpZXNTdHJpbmcpKTsKKyAgICB0ZXN0LT5sb2FkSHRt
bChodG1sU3RyaW5nLmdldCgpLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxNYWluTG9vcEZpbmlz
aGVzKCk7CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogcHJvcGVydGllc0NoYW5nZWRbXSA9IHsK
KyAgICAgICAgImdlb21ldHJ5IiwgImxvY2F0aW9uYmFyLXZpc2libGUiLCAibWVudWJhci12aXNp
YmxlIiwgInN0YXR1c2Jhci12aXNpYmxlIiwgInRvb2xiYXItdmlzaWJsZSIsICJzY3JvbGxiYXJz
LXZpc2libGUiCisgICAgfTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IEdfTl9FTEVNRU5U
Uyhwcm9wZXJ0aWVzQ2hhbmdlZCk7ICsraSkKKyAgICAgICAgZ19hc3NlcnQodGVzdC0+bV93aW5k
b3dQcm9wZXJ0aWVzQ2hhbmdlZC5jb250YWlucyhwcm9wZXJ0aWVzQ2hhbmdlZFtpXSkpOworCisg
ICAgVmVjdG9yPFVJQ2xpZW50VGVzdDo6V2ViVmlld0V2ZW50cz4mIGV2ZW50cyA9IHRlc3QtPm1f
d2ViVmlld0V2ZW50czsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDMp
OworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBVSUNsaWVudFRlc3Q6OkNyZWF0
ZSk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIFVJQ2xpZW50VGVzdDo6UmVh
ZHlUb1Nob3cpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBVSUNsaWVudFRl
c3Q6OkNsb3NlKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdNb3VzZVRhcmdldChVSUNs
aWVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+c2hvd0luV2luZG93
QW5kV2FpdFVudGlsTWFwcGVkKEdUS19XSU5ET1dfVE9QTEVWRUwpOworCisgICAgY29uc3QgY2hh
ciogbGlua3NIb3ZlcmVkSFRNTCA9CisgICAgICAgICI8aHRtbD48Ym9keT4iCisgICAgICAgICIg
PGEgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRvcDoxJyBocmVmPSdodHRwOi8v
d3d3LndlYmtpdGd0ay5vcmcnIHRpdGxlPSdXZWJLaXRHVEsrIFRpdGxlJz5XZWJLaXRHVEsrIFdl
YnNpdGU8L2E+IgorICAgICAgICAiIDxpbWcgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0
OjE7IHRvcDoxMCcgc3JjPScweGRlYWRiZWVmJyB3aWR0aD01IGhlaWdodD01PjwvaW1nPiIKKyAg
ICAgICAgIiA8YSBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjIwJyBocmVm
PSdodHRwOi8vd3d3LndlYmtpdGd0ay5vcmcvbG9nbycgdGl0bGU9J1dlYktpdEdUSysgTG9nbyc+
PGltZyBzcmM9JzB4ZGVhZGJlZWYnIHdpZHRoPTUgaGVpZ2h0PTU+PC9pbWc+PC9hPiIKKyAgICAg
ICAgIiA8aW5wdXQgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRvcDozMCcgc2l6
ZT0nMTAnPjwvaW5wdXQ+IgorICAgICAgICAiIDxkaXYgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRl
OyBsZWZ0OjE7IHRvcDo1MDsgd2lkdGg6MzA7IGhlaWdodDozMDsgb3ZlcmZsb3c6c2Nyb2xsJz4m
bmJzcDs8L2Rpdj4iCisgICAgICAgICIgPHZpZGVvIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsg
bGVmdDoxOyB0b3A6MTAwJyB3aWR0aD0nMzAwJyBoZWlnaHQ9JzMwMCcgY29udHJvbHM9J2NvbnRy
b2xzJyBwcmVsb2FkPSdub25lJz48c291cmNlIHNyYz0nbW92aWUub2dnJyB0eXBlPSd2aWRlby9v
Z2cnIC8+PC92aWRlbz4iCisgICAgICAgICI8L2JvZHk+PC9odG1sPiI7CisKKyAgICB0ZXN0LT5s
b2FkSHRtbChsaW5rc0hvdmVyZWRIVE1MLCAiZmlsZTovLy8iKTsKKyAgICB0ZXN0LT53YWl0VW50
aWxMb2FkRmluaXNoZWQoKTsKKworICAgIC8vIE1vdmUgb3ZlciBsaW5rLgorICAgIFdlYktpdEhp
dFRlc3RSZXN1bHQqIGhpdFRlc3RSZXN1bHQgPSB0ZXN0LT5tb3ZlTW91c2VBbmRXYWl0VW50aWxN
b3VzZVRhcmdldENoYW5nZWQoMSwgMSk7CisgICAgZ19hc3NlcnQod2Via2l0X2hpdF90ZXN0X3Jl
c3VsdF9jb250ZXh0X2lzX2xpbmsoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJr
aXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkpOworICAg
IGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbWVkaWEoaGl0VGVz
dFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRf
aXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRf
aGl0X3Rlc3RfcmVzdWx0X2dldF9saW5rX3VyaShoaXRUZXN0UmVzdWx0KSwgPT0sICJodHRwOi8v
d3d3LndlYmtpdGd0ay5vcmcvIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9oaXRfdGVz
dF9yZXN1bHRfZ2V0X2xpbmtfdGl0bGUoaGl0VGVzdFJlc3VsdCksID09LCAiV2ViS2l0R1RLKyBU
aXRsZSIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9s
aW5rX2xhYmVsKGhpdFRlc3RSZXN1bHQpLCA9PSwgIldlYktpdEdUSysgV2Vic2l0ZSIpOworICAg
IGdfYXNzZXJ0KCF0ZXN0LT5tX21vdXNlVGFyZ2V0TW9kaWZpZXJzKTsKKworICAgIC8vIE1vdmUg
b3V0IG9mIHRoZSBsaW5rLgorICAgIGhpdFRlc3RSZXN1bHQgPSB0ZXN0LT5tb3ZlTW91c2VBbmRX
YWl0VW50aWxNb3VzZVRhcmdldENoYW5nZWQoMCwgMCk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9o
aXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fz
c2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1
bHQpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21l
ZGlhKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3Vs
dF9jb250ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCghdGVz
dC0+bV9tb3VzZVRhcmdldE1vZGlmaWVycyk7CisKKyAgICAvLyBNb3ZlIG92ZXIgaW1hZ2Ugd2l0
aCBHREtfQ09OVFJPTF9NQVNLLgorICAgIGhpdFRlc3RSZXN1bHQgPSB0ZXN0LT5tb3ZlTW91c2VB
bmRXYWl0VW50aWxNb3VzZVRhcmdldENoYW5nZWQoMSwgMTAsIEdES19DT05UUk9MX01BU0spOwor
ICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluayhoaXRU
ZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0
X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0
X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCgh
d2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQp
KTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX3Njcm9s
bGJhcihoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9oaXRfdGVz
dF9yZXN1bHRfZ2V0X2ltYWdlX3VyaShoaXRUZXN0UmVzdWx0KSwgPT0sICJmaWxlOi8vLzB4ZGVh
ZGJlZWYiKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX21vdXNlVGFyZ2V0TW9kaWZpZXJzICYgR0RL
X0NPTlRST0xfTUFTSyk7CisKKyAgICAvLyBNb3ZlIG92ZXIgaW1hZ2UgbGluay4KKyAgICBoaXRU
ZXN0UmVzdWx0ID0gdGVzdC0+bW92ZU1vdXNlQW5kV2FpdFVudGlsTW91c2VUYXJnZXRDaGFuZ2Vk
KDEsIDIwKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNf
bGluayhoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQod2Via2l0X2hpdF90ZXN0X3Jlc3Vs
dF9jb250ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0
X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBn
X2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRhYmxlKGhpdFRl
c3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0
X2lzX3Njcm9sbGJhcihoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtp
dF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2xpbmtfdXJpKGhpdFRlc3RSZXN1bHQpLCA9PSwgImh0dHA6
Ly93d3cud2Via2l0Z3RrLm9yZy9sb2dvIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9o
aXRfdGVzdF9yZXN1bHRfZ2V0X2ltYWdlX3VyaShoaXRUZXN0UmVzdWx0KSwgPT0sICJmaWxlOi8v
LzB4ZGVhZGJlZWYiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2hpdF90ZXN0X3Jlc3Vs
dF9nZXRfbGlua190aXRsZShoaXRUZXN0UmVzdWx0KSwgPT0sICJXZWJLaXRHVEsrIExvZ28iKTsK
KyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfbGlua19sYWJlbChoaXRU
ZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQoIXRlc3QtPm1fbW91c2VUYXJnZXRNb2RpZmllcnMp
OworCisgICAgLy8gTW92ZSBvdmVyIG1lZGlhLgorICAgIGhpdFRlc3RSZXN1bHQgPSB0ZXN0LT5t
b3ZlTW91c2VBbmRXYWl0VW50aWxNb3VzZVRhcmdldENoYW5nZWQoMSwgMTAwKTsKKyAgICBnX2Fz
c2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xpbmsoaGl0VGVzdFJlc3Vs
dCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfaW1h
Z2UoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRf
Y29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9o
aXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0UmVzdWx0KSk7CisgICAg
Z19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19zY3JvbGxiYXIoaGl0
VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0
X2dldF9tZWRpYV91cmkoaGl0VGVzdFJlc3VsdCksID09LCAiZmlsZTovLy9tb3ZpZS5vZ2ciKTsK
KyAgICBnX2Fzc2VydCghdGVzdC0+bV9tb3VzZVRhcmdldE1vZGlmaWVycyk7CisKKyAgICAvLyBN
b3ZlciBvdmVyIGlucHV0LgorICAgIGhpdFRlc3RSZXN1bHQgPSB0ZXN0LT5tb3ZlTW91c2VBbmRX
YWl0VW50aWxNb3VzZVRhcmdldENoYW5nZWQoNSwgMzUpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRf
aGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluayhoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19h
c3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFnZShoaXRUZXN0UmVz
dWx0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19t
ZWRpYShoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1
bHRfY29udGV4dF9pc19zY3JvbGxiYXIoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KHdl
YmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0UmVzdWx0KSk7
CisgICAgZ19hc3NlcnQoIXRlc3QtPm1fbW91c2VUYXJnZXRNb2RpZmllcnMpOworCisgICAgLy8g
TW92ZSBvdmVyIHNjcm9sbGJhci4KKyAgICBoaXRUZXN0UmVzdWx0ID0gdGVzdC0+bW92ZU1vdXNl
QW5kV2FpdFVudGlsTW91c2VUYXJnZXRDaGFuZ2VkKDUsIDc1KTsKKyAgICBnX2Fzc2VydCghd2Vi
a2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xpbmsoaGl0VGVzdFJlc3VsdCkpOworICAg
IGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVz
dFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRf
aXNfbWVkaWEoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3Rf
cmVzdWx0X2NvbnRleHRfaXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0
KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19zY3JvbGxiYXIoaGl0VGVzdFJlc3Vs
dCkpOworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX21vdXNlVGFyZ2V0TW9kaWZpZXJzKTsKK30KKwor
c3RhdGljIHZvaWQgdGVzdFdlYlZpZXdQZXJtaXNzaW9uUmVxdWVzdHMoVUlDbGllbnRUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgZ2VvY2x1ZSBn
aXZlIGEgcnVudGltZSB3YXJuaW5nIGJlY2F1c2UgaXQgdHJpZXMKKyAgICAvLyB0byByZWdpc3Rl
ciB0aGUgZXJyb3IgcXVhcmsgdHdpY2UuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9ODk4NTguCisgICAgLy8gTWFrZSB3YXJuaW5ncyBub24tZmF0YWwgZm9yIHRo
aXMgdGVzdCB0byBtYWtlIGl0IHBhc3MuCisgICAgdGVzdC0+cmVtb3ZlTG9nRmF0YWxGbGFnKEdf
TE9HX0xFVkVMX1dBUk5JTkcpOworICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1h
cHBlZCgpOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBnZW9sb2NhdGlvblJlcXVlc3RIVE1MID0K
KyAgICAgICAgIjxodG1sPiIKKyAgICAgICAgIiAgPHNjcmlwdD4iCisgICAgICAgICIgIGZ1bmN0
aW9uIHJ1blRlc3QoKSIKKyAgICAgICAgIiAgeyIKKyAgICAgICAgIiAgICBuYXZpZ2F0b3IuZ2Vv
bG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGZ1bmN0aW9uKHApIHsgZG9jdW1lbnQudGl0bGUg
PSBcIk9LXCIgfSwiCisgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmdW5jdGlvbihlKSB7IGRvY3VtZW50LnRpdGxlID0gZS5jb2RlIH0pOyIKKyAg
ICAgICAgIiAgfSIKKyAgICAgICAgIiAgPC9zY3JpcHQ+IgorICAgICAgICAiICA8Ym9keSBvbmxv
YWQ9J3J1blRlc3QoKTsnPjwvYm9keT4iCisgICAgICAgICI8L2h0bWw+IjsKKworICAgIC8vIFRl
c3QgZGVueWluZyBhIHBlcm1pc3Npb24gcmVxdWVzdC4KKyAgICB0ZXN0LT5tX2FsbG93UGVybWlz
c2lvblJlcXVlc3RzID0gZmFsc2U7CisgICAgdGVzdC0+bG9hZEh0bWwoZ2VvbG9jYXRpb25SZXF1
ZXN0SFRNTCwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsVGl0bGVDaGFuZ2VkKCk7CisKKyAgICAv
LyBBY2NvcmRpbmcgdG8gdGhlIEdlb2xvY2F0aW9uIEFQSSBzcGVjaWZpY2F0aW9uLCAnMScgaXMg
dGhlCisgICAgLy8gZXJyb3IgY29kZSByZXR1cm5lZCBmb3IgdGhlIFBFUk1JU1NJT05fREVOSUVE
IGVycm9yLgorICAgIC8vIGh0dHA6Ly9kZXYudzMub3JnL2dlby9hcGkvc3BlYy1zb3VyY2UuaHRt
bCNwb3NpdGlvbl9lcnJvcl9pbnRlcmZhY2UKKyAgICBjb25zdCBnY2hhciogcmVzdWx0ID0gd2Vi
a2l0X3dlYl92aWV3X2dldF90aXRsZSh0ZXN0LT5tX3dlYlZpZXcpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cihyZXN1bHQsID09LCAiMSIpOworCisgICAgLy8gVGVzdCBhbGxvd2luZyBhIHBlcm1pc3Np
b24gcmVxdWVzdC4KKyAgICB0ZXN0LT5tX2FsbG93UGVybWlzc2lvblJlcXVlc3RzID0gdHJ1ZTsK
KyAgICB0ZXN0LT5sb2FkSHRtbChnZW9sb2NhdGlvblJlcXVlc3RIVE1MLCAwKTsKKyAgICB0ZXN0
LT53YWl0VW50aWxUaXRsZUNoYW5nZWQoKTsKKworICAgIC8vIENoZWNrIHRoYXQgd2UgZGlkIG5v
dCBnZXQgdGhlIFBFUk1JU1NJT05fREVOSUVEIGVycm9yIG5vdy4KKyAgICByZXN1bHQgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X3RpdGxlKHRlc3QtPm1fd2ViVmlldyk7CisgICAgZ19hc3NlcnRfY21w
c3RyKHJlc3VsdCwgIT0sICIxIik7CisgICAgdGVzdC0+YWRkTG9nRmF0YWxGbGFnKEdfTE9HX0xF
VkVMX1dBUk5JTkcpOworfQorCitjbGFzcyBGaWxlQ2hvb3NlclRlc3Q6IHB1YmxpYyBVSUNsaWVu
dFRlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoRmlsZUNob29zZXJU
ZXN0KTsKKworICAgIEZpbGVDaG9vc2VyVGVzdCgpCisgICAgeworICAgICAgICBnX3NpZ25hbF9j
b25uZWN0KG1fd2ViVmlldywgInJ1bi1maWxlLWNob29zZXIiLCBHX0NBTExCQUNLKHJ1bkZpbGVD
aG9vc2VyQ2FsbGJhY2spLCB0aGlzKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gcnVu
RmlsZUNob29zZXJDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiwgV2ViS2l0RmlsZUNob29zZXJSZXF1
ZXN0KiByZXF1ZXN0LCBGaWxlQ2hvb3NlclRlc3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0
LT5ydW5GaWxlQ2hvb3NlcihyZXF1ZXN0KTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQor
CisgICAgdm9pZCBydW5GaWxlQ2hvb3NlcihXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVl
c3QpCisgICAgeworICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVz
KEdfT0JKRUNUKHJlcXVlc3QpKTsKKyAgICAgICAgbV9maWxlQ2hvb3NlclJlcXVlc3QgPSByZXF1
ZXN0OworICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3ApOworICAgIH0KKworICAg
IFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogY2xpY2tNb3VzZUJ1dHRvbkFuZFdhaXRGb3JGaWxl
Q2hvb3NlclJlcXVlc3QoaW50IHgsIGludCB5KQorICAgIHsKKyAgICAgICAgY2xpY2tNb3VzZUJ1
dHRvbih4LCB5KTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgICAg
ICByZXR1cm4gbV9maWxlQ2hvb3NlclJlcXVlc3QuZ2V0KCk7CisgICAgfQorCitwcml2YXRlOgor
ICAgIEdSZWZQdHI8V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0PiBtX2ZpbGVDaG9vc2VyUmVxdWVz
dDsKK307CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3RmlsZUNob29zZXJSZXF1ZXN0KEZpbGVD
aG9vc2VyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5zaG93SW5XaW5k
b3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZmlsZUNob29z
ZXJIVE1MRm9ybWF0ID0gIjxodG1sPjxib2R5PjxpbnB1dCBzdHlsZT0ncG9zaXRpb246YWJzb2x1
dGU7bGVmdDowO3RvcDowO21hcmdpbjowO3BhZGRpbmc6MCcgdHlwZT0nZmlsZScgJXMvPjwvYm9k
eT48L2h0bWw+IjsKKworICAgIC8vIE11bHRpcGxlIHNlbGVjdGlvbnMgbm90IGFsbG93ZWQsIG5v
IE1JTUUgZmlsdGVyaW5nLgorICAgIEdPd25QdHI8Y2hhcj4gc2ltcGxlRmlsZVVwbG9hZEhUTUwo
Z19zdHJkdXBfcHJpbnRmKGZpbGVDaG9vc2VySFRNTEZvcm1hdCwgIiIpKTsKKyAgICB0ZXN0LT5s
b2FkSHRtbChzaW1wbGVGaWxlVXBsb2FkSFRNTC5nZXQoKSwgMCk7CisgICAgdGVzdC0+d2FpdFVu
dGlsTG9hZEZpbmlzaGVkKCk7CisgICAgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiBmaWxlQ2hv
b3NlclJlcXVlc3QgPSB0ZXN0LT5jbGlja01vdXNlQnV0dG9uQW5kV2FpdEZvckZpbGVDaG9vc2Vy
UmVxdWVzdCg1LCA1KTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X2dldF9zZWxlY3RfbXVsdGlwbGUoZmlsZUNob29zZXJSZXF1ZXN0KSk7CisKKyAgICBjb25zdCBn
Y2hhciogY29uc3QqIG1pbWVUeXBlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRf
bWltZV90eXBlcyhmaWxlQ2hvb3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0KCFtaW1lVHlwZXMp
OworICAgIEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVz
dF9nZXRfbWltZV90eXBlc19maWx0ZXIoZmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2Vy
dCghZmlsdGVyKTsKKyAgICBjb25zdCBnY2hhciogY29uc3QqIHNlbGVjdGVkRmlsZXMgPSB3ZWJr
aXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKGZpbGVDaG9vc2VyUmVx
dWVzdCk7CisgICAgZ19hc3NlcnQoIXNlbGVjdGVkRmlsZXMpOworICAgIHdlYmtpdF9maWxlX2No
b29zZXJfcmVxdWVzdF9jYW5jZWwoZmlsZUNob29zZXJSZXF1ZXN0KTsKKworICAgIC8vIE11bHRp
cGxlIHNlbGVjdGlvbnMgYWxsb3dlZCwgbm8gTUlNRSBmaWx0ZXJpbmcsIHNvbWUgcHJlLXNlbGVj
dGVkIGZpbGVzLgorICAgIEdPd25QdHI8Y2hhcj4gbXVsdGlwbGVTZWxlY3Rpb25GaWxlVXBsb2Fk
SFRNTChnX3N0cmR1cF9wcmludGYoZmlsZUNob29zZXJIVE1MRm9ybWF0LCAibXVsdGlwbGUiKSk7
CisgICAgdGVzdC0+bG9hZEh0bWwobXVsdGlwbGVTZWxlY3Rpb25GaWxlVXBsb2FkSFRNTC5nZXQo
KSwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZmlsZUNob29z
ZXJSZXF1ZXN0ID0gdGVzdC0+Y2xpY2tNb3VzZUJ1dHRvbkFuZFdhaXRGb3JGaWxlQ2hvb3NlclJl
cXVlc3QoNSwgNSk7CisgICAgZ19hc3NlcnQod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dl
dF9zZWxlY3RfbXVsdGlwbGUoZmlsZUNob29zZXJSZXF1ZXN0KSk7CisKKyAgICBtaW1lVHlwZXMg
PSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMoZmlsZUNob29zZXJS
ZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghbWltZVR5cGVzKTsKKyAgICBmaWx0ZXIgPSB3ZWJraXRf
ZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyKGZpbGVDaG9vc2VyUmVx
dWVzdCk7CisgICAgZ19hc3NlcnQoIWZpbHRlcik7CisgICAgc2VsZWN0ZWRGaWxlcyA9IHdlYmtp
dF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMoZmlsZUNob29zZXJSZXF1
ZXN0KTsKKyAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxlcyk7CisKKyAgICAvLyBTZWxlY3Qgc29t
ZSBmaWxlcy4KKyAgICBjb25zdCBnY2hhciogZmlsZXNUb1NlbGVjdFs0XSA9IHsgIi9mb28iLCAi
L2Zvby9iYXIiLCAiL2Zvby9iYXIvYmF6IiwgMCB9OworICAgIHdlYmtpdF9maWxlX2Nob29zZXJf
cmVxdWVzdF9zZWxlY3RfZmlsZXMoZmlsZUNob29zZXJSZXF1ZXN0LCBmaWxlc1RvU2VsZWN0KTsK
KworICAgIC8vIENoZWNrIHRoZSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBqdXN0IHNlbGVjdGVkLgor
ICAgIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVj
dGVkX2ZpbGVzKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQoc2VsZWN0ZWRGaWxl
cyk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMF0sID09LCAiL2ZvbyIpOwor
ICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzFdLCA9PSwgIi9mb28vYmFyIik7Cisg
ICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMl0sID09LCAiL2Zvby9iYXIvYmF6Iik7
CisgICAgZ19hc3NlcnQoIXNlbGVjdGVkRmlsZXNbM10pOworCisgICAgLy8gUGVyZm9ybSBhbm90
aGVyIHJlcXVlc3QgdG8gY2hlY2sgaWYgdGhlIGxpc3Qgb2YgZmlsZXMgc2VsZWN0ZWQKKyAgICAv
LyBpbiB0aGUgcHJldmlvdXMgc3RlcCBhcHBlYXJzIG5vdyBhcyBwYXJ0IG9mIHRoZSBuZXcgcmVx
dWVzdC4KKyAgICBmaWxlQ2hvb3NlclJlcXVlc3QgPSB0ZXN0LT5jbGlja01vdXNlQnV0dG9uQW5k
V2FpdEZvckZpbGVDaG9vc2VyUmVxdWVzdCg1LCA1KTsKKyAgICBzZWxlY3RlZEZpbGVzID0gd2Vi
a2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhmaWxlQ2hvb3NlclJl
cXVlc3QpOworICAgIGdfYXNzZXJ0KHNlbGVjdGVkRmlsZXMpOworICAgIGdfYXNzZXJ0X2NtcHN0
cihzZWxlY3RlZEZpbGVzWzBdLCA9PSwgIi9mb28iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2Vs
ZWN0ZWRGaWxlc1sxXSwgPT0sICIvZm9vL2JhciIpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxl
Y3RlZEZpbGVzWzJdLCA9PSwgIi9mb28vYmFyL2JheiIpOworICAgIGdfYXNzZXJ0KCFzZWxlY3Rl
ZEZpbGVzWzNdKTsKKyAgICB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2FuY2VsKGZpbGVD
aG9vc2VyUmVxdWVzdCk7CisKKyAgICAvLyBNdWx0aXBsZSBzZWxlY3Rpb25zIG5vdCBhbGxvd2Vk
LCBvbmx5IGFjY2VwdCBpbWFnZXMsIGF1ZGlvIGFuZCB2aWRlbyBmaWxlcy4uCisgICAgR093blB0
cjxjaGFyPiBtaW1lRmlsdGVyZWRGaWxlVXBsb2FkSFRNTChnX3N0cmR1cF9wcmludGYoZmlsZUNo
b29zZXJIVE1MRm9ybWF0LCAiYWNjZXB0PSdhdWRpby8qLHZpZGVvLyosaW1hZ2UvKiciKSk7Cisg
ICAgdGVzdC0+bG9hZEh0bWwobWltZUZpbHRlcmVkRmlsZVVwbG9hZEhUTUwuZ2V0KCksIDApOwor
ICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIGZpbGVDaG9vc2VyUmVxdWVz
dCA9IHRlc3QtPmNsaWNrTW91c2VCdXR0b25BbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0KDUs
IDUpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVj
dF9tdWx0aXBsZShmaWxlQ2hvb3NlclJlcXVlc3QpKTsKKworICAgIG1pbWVUeXBlcyA9IHdlYmtp
dF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcyhmaWxlQ2hvb3NlclJlcXVlc3Qp
OworICAgIGdfYXNzZXJ0KG1pbWVUeXBlcyk7CisgICAgZ19hc3NlcnRfY21wc3RyKG1pbWVUeXBl
c1swXSwgPT0sICJhdWRpby8qIik7CisgICAgZ19hc3NlcnRfY21wc3RyKG1pbWVUeXBlc1sxXSwg
PT0sICJ2aWRlby8qIik7CisgICAgZ19hc3NlcnRfY21wc3RyKG1pbWVUeXBlc1syXSwgPT0sICJp
bWFnZS8qIik7CisgICAgZ19hc3NlcnQoIW1pbWVUeXBlc1szXSk7CisKKyAgICBmaWx0ZXIgPSB3
ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyKGZpbGVDaG9v
c2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQoR1RLX0lTX0ZJTEVfRklMVEVSKGZpbHRlcikpOwor
ICAgIGdfYXNzZXJ0KGNoZWNrTWltZVR5cGVGb3JGaWx0ZXIoZmlsdGVyLCAiYXVkaW8vKiIpKTsK
KyAgICBnX2Fzc2VydChjaGVja01pbWVUeXBlRm9yRmlsdGVyKGZpbHRlciwgInZpZGVvLyoiKSk7
CisgICAgZ19hc3NlcnQoY2hlY2tNaW1lVHlwZUZvckZpbHRlcihmaWx0ZXIsICJpbWFnZS8qIikp
OworCisgICAgc2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRf
c2VsZWN0ZWRfZmlsZXMoZmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghc2VsZWN0
ZWRGaWxlcyk7CisgICAgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNlbChmaWxlQ2hv
b3NlclJlcXVlc3QpOworfQorCit2b2lkIGJlZm9yZUFsbCgpCit7CisgICAgVUlDbGllbnRUZXN0
OjphZGQoIldlYktpdFdlYlZpZXciLCAiY3JlYXRlLXJlYWR5LWNsb3NlIiwgdGVzdFdlYlZpZXdD
cmVhdGVSZWFkeUNsb3NlKTsKKyAgICBNb2RhbERpYWxvZ3NUZXN0OjphZGQoIldlYktpdFdlYlZp
ZXciLCAiYWxsb3ctbW9kYWwtZGlhbG9ncyIsIHRlc3RXZWJWaWV3QWxsb3dNb2RhbERpYWxvZ3Mp
OworICAgIE1vZGFsRGlhbG9nc1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJkaXNhbGxvdy1t
b2RhbC1kaWFsb2dzIiwgdGVzdFdlYlZpZXdEaXNhbGxvd01vZGFsRGlhbG9ncyk7CisgICAgVUlD
bGllbnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiamF2YXNjcmlwdC1kaWFsb2dzIiwgdGVz
dFdlYlZpZXdKYXZhU2NyaXB0RGlhbG9ncyk7CisgICAgVUlDbGllbnRUZXN0OjphZGQoIldlYktp
dFdlYlZpZXciLCAid2luZG93LXByb3BlcnRpZXMiLCB0ZXN0V2ViVmlld1dpbmRvd1Byb3BlcnRp
ZXMpOworICAgIFVJQ2xpZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgIm1vdXNlLXRhcmdl
dCIsIHRlc3RXZWJWaWV3TW91c2VUYXJnZXQpOworICAgIFVJQ2xpZW50VGVzdDo6YWRkKCJXZWJL
aXRXZWJWaWV3IiwgInBlcm1pc3Npb24tcmVxdWVzdHMiLCB0ZXN0V2ViVmlld1Blcm1pc3Npb25S
ZXF1ZXN0cyk7CisgICAgRmlsZUNob29zZXJUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiZmls
ZS1jaG9vc2VyLXJlcXVlc3QiLCB0ZXN0V2ViVmlld0ZpbGVDaG9vc2VyUmVxdWVzdCk7Cit9CisK
K3ZvaWQgYWZ0ZXJBbGwoKQoreworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJFeHRlbnNpb25zLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViRXh0ZW5zaW9ucy5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uOTFjYjdhYQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViRXh0ZW5zaW9ucy5jcHAKQEAgLTAs
MCArMSwxOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIldlYktpdFRlc3RCdXMuaCIKKyNpbmNsdWRlICJX
ZWJWaWV3VGVzdC5oIgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKworc3RhdGlj
IFdlYktpdFRlc3RCdXMqIGJ1czsKKworc3RhdGljIHZvaWQgdGVzdFdlYkV4dGVuc2lvbkdldFRp
dGxlKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRI
dG1sKCI8aHRtbD48aGVhZD48dGl0bGU+V2ViS2l0R1RLKyBXZWIgRXh0ZW5zaW9ucyBUZXN0PC90
aXRsZT48L2hlYWQ+PGJvZHk+PC9ib2R5PjwvaHRtbD4iLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50
aWxMb2FkRmluaXNoZWQoKTsKKworICAgIEdSZWZQdHI8R0RCdXNQcm94eT4gcHJveHkgPSBhZG9w
dEdSZWYoYnVzLT5jcmVhdGVQcm94eSgib3JnLndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9uVGVzdCIs
CisgICAgICAgICIvb3JnL3dlYmtpdC9ndGsvV2ViRXh0ZW5zaW9uVGVzdCIgLCAib3JnLndlYmtp
dC5ndGsuV2ViRXh0ZW5zaW9uVGVzdCIsIHRlc3QtPm1fbWFpbkxvb3ApKTsKKyAgICBHUmVmUHRy
PEdWYXJpYW50PiByZXN1bHQgPSBhZG9wdEdSZWYoZ19kYnVzX3Byb3h5X2NhbGxfc3luYygKKyAg
ICAgICAgcHJveHkuZ2V0KCksCisgICAgICAgICJHZXRUaXRsZSIsCisgICAgICAgIGdfdmFyaWFu
dF9uZXcoIih0KSIsIHdlYmtpdF93ZWJfdmlld19nZXRfcGFnZV9pZCh0ZXN0LT5tX3dlYlZpZXcp
KSwKKyAgICAgICAgR19EQlVTX0NBTExfRkxBR1NfTk9ORSwKKyAgICAgICAgLTEsIDAsIDApKTsK
KyAgICBnX2Fzc2VydChyZXN1bHQpOworCisgICAgY29uc3QgY2hhciogdGl0bGU7CisgICAgZ192
YXJpYW50X2dldChyZXN1bHQuZ2V0KCksICIoJnMpIiwgJnRpdGxlKTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIodGl0bGUsID09LCAiV2ViS2l0R1RLKyBXZWIgRXh0ZW5zaW9ucyBUZXN0Iik7Cit9CisK
K3N0YXRpYyB2b2lkIGRvY3VtZW50TG9hZGVkQ2FsbGJhY2soR0RCdXNDb25uZWN0aW9uKiwgY29u
c3QgY2hhciosIGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIEdWYXJpYW50
KiwgV2ViVmlld1Rlc3QqIHRlc3QpCit7CisgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21h
aW5Mb29wKTsKK30KKworc3RhdGljIHZvaWQgdGVzdERvY3VtZW50TG9hZGVkU2lnbmFsKFdlYlZp
ZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIEdSZWZQdHI8R0RCdXNQcm94eT4g
cHJveHkgPSBhZG9wdEdSZWYoYnVzLT5jcmVhdGVQcm94eSgib3JnLndlYmtpdC5ndGsuV2ViRXh0
ZW5zaW9uVGVzdCIsCisgICAgICAgICIvb3JnL3dlYmtpdC9ndGsvV2ViRXh0ZW5zaW9uVGVzdCIs
ICJvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwgdGVzdC0+bV9tYWluTG9vcCkpOwor
ICAgIEdEQnVzQ29ubmVjdGlvbiogY29ubmVjdGlvbiA9IGdfZGJ1c19wcm94eV9nZXRfY29ubmVj
dGlvbihwcm94eS5nZXQoKSk7CisgICAgZ3VpbnQgaWQgPSBnX2RidXNfY29ubmVjdGlvbl9zaWdu
YWxfc3Vic2NyaWJlKGNvbm5lY3Rpb24sCisgICAgICAgIDAsCisgICAgICAgICJvcmcud2Via2l0
Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwKKyAgICAgICAgIkRvY3VtZW50TG9hZGVkIiwKKyAgICAg
ICAgIi9vcmcvd2Via2l0L2d0ay9XZWJFeHRlbnNpb25UZXN0IiwKKyAgICAgICAgMCwKKyAgICAg
ICAgR19EQlVTX1NJR05BTF9GTEFHU19OT05FLAorICAgICAgICByZWludGVycHJldF9jYXN0PEdE
QnVzU2lnbmFsQ2FsbGJhY2s+KGRvY3VtZW50TG9hZGVkQ2FsbGJhY2spLAorICAgICAgICB0ZXN0
LAorICAgICAgICAwKTsKKyAgICBnX2Fzc2VydChpZCk7CisKKyAgICB0ZXN0LT5sb2FkSHRtbCgi
PGh0bWw+PGhlYWQ+PHRpdGxlPldlYktpdEdUSysgV2ViIEV4dGVuc2lvbnMgVGVzdDwvdGl0bGU+
PC9oZWFkPjxib2R5PjwvYm9keT48L2h0bWw+IiwgMCk7CisgICAgZ19tYWluX2xvb3BfcnVuKHRl
c3QtPm1fbWFpbkxvb3ApOworICAgIGdfZGJ1c19jb25uZWN0aW9uX3NpZ25hbF91bnN1YnNjcmli
ZShjb25uZWN0aW9uLCBpZCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJQcm9jZXNzQ3Jhc2hl
ZENhbGxiYWNrKFdlYktpdFdlYlZpZXcqLCBXZWJWaWV3VGVzdCogdGVzdCkKK3sKKyAgICB0ZXN0
LT5xdWl0TWFpbkxvb3AoKTsKKworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQg
dGVzdFdlYktpdFdlYlZpZXdQcm9jZXNzQ3Jhc2hlZChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PC9odG1sPiIsIDApOworICAg
IHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgZ19zaWduYWxfY29ubmVjdCh0
ZXN0LT5tX3dlYlZpZXcsICJ3ZWItcHJvY2Vzcy1jcmFzaGVkIiwKKyAgICAgICAgR19DQUxMQkFD
Syh3ZWJQcm9jZXNzQ3Jhc2hlZENhbGxiYWNrKSwgdGVzdCk7CisKKyAgICBHUmVmUHRyPEdEQnVz
UHJveHk+IHByb3h5ID0gYWRvcHRHUmVmKGJ1cy0+Y3JlYXRlUHJveHkoIm9yZy53ZWJraXQuZ3Rr
LldlYkV4dGVuc2lvblRlc3QiLAorICAgICAgICAiL29yZy93ZWJraXQvZ3RrL1dlYkV4dGVuc2lv
blRlc3QiLCAib3JnLndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9uVGVzdCIsIHRlc3QtPm1fbWFpbkxv
b3ApKTsKKworICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHJlc3VsdCA9IGFkb3B0R1JlZihnX2RidXNf
cHJveHlfY2FsbF9zeW5jKAorICAgICAgICBwcm94eS5nZXQoKSwKKyAgICAgICAgIkFib3J0UHJv
Y2VzcyIsCisgICAgICAgIDAsCisgICAgICAgIEdfREJVU19DQUxMX0ZMQUdTX05PTkUsCisgICAg
ICAgIC0xLCAwLCAwKSk7CisgICAgZ19hc3NlcnQoIXJlc3VsdCk7CisgICAgZ19tYWluX2xvb3Bf
cnVuKHRlc3QtPm1fbWFpbkxvb3ApOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViRXh0ZW5zaW9u
V2luZG93T2JqZWN0Q2xlYXJlZChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sK
KyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGhlYWRlcj48L2hlYWRlcj48Ym9keT48L2JvZHk+
PC9odG1sPiIsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAg
R093blB0cjxHRXJyb3I+IGVycm9yOworICAgIFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFz
Y3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoIndp
bmRvdy5lY2hvKCdGb28nKTsiLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGdfYXNzZXJ0KGphdmFz
Y3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7CisgICAgR093blB0cjxj
aGFyPiB2YWx1ZVN0cmluZyhXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhq
YXZhc2NyaXB0UmVzdWx0KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgp
LCA9PSwgIkZvbyIpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gc2NyaXB0RGlhbG9nQ2FsbGJhY2so
V2ViS2l0V2ViVmlldyosIFdlYktpdFNjcmlwdERpYWxvZyogZGlhbG9nLCBjaGFyKiogcmVzdWx0
KQoreworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X3NjcmlwdF9kaWFsb2dfZ2V0X2RpYWxv
Z190eXBlKGRpYWxvZyksID09LCBXRUJLSVRfU0NSSVBUX0RJQUxPR19BTEVSVCk7CisgICAgZ19h
c3NlcnQoISpyZXN1bHQpOworICAgICpyZXN1bHQgPSBnX3N0cmR1cCh3ZWJraXRfc2NyaXB0X2Rp
YWxvZ19nZXRfbWVzc2FnZShkaWFsb2cpKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGlj
IHZvaWQgcnVuSmF2YVNjcmlwdEluSXNvbGF0ZWRXb3JsZEZpbmlzaGVkQ2FsbGJhY2soR0RCdXNQ
cm94eSogcHJveHksIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBXZWJWaWV3VGVzdCogdGVzdCkKK3sK
KyAgICBnX2RidXNfcHJveHlfY2FsbF9maW5pc2gocHJveHksIHJlc3VsdCwgMCk7CisgICAgZ19t
YWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdl
YkV4dGVuc2lvbklzb2xhdGVkV29ybGQoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIp
Cit7CisgICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxoZWFkZXI+PC9oZWFkZXI+PGJvZHk+PGRp
diBpZD0nY29uc29sZSc+PC9kaXY+PC9ib2R5PjwvaHRtbD4iLCAwKTsKKyAgICB0ZXN0LT53YWl0
VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIEdPd25QdHI8Y2hhcj4gcmVzdWx0OworICAgIGd1
bG9uZyBzY3JpcHREaWFsb2dJRCA9IGdfc2lnbmFsX2Nvbm5lY3QodGVzdC0+bV93ZWJWaWV3LCAi
c2NyaXB0LWRpYWxvZyIsIEdfQ0FMTEJBQ0soc2NyaXB0RGlhbG9nQ2FsbGJhY2spLCAmcmVzdWx0
Lm91dFB0cigpKTsKKworICAgIHN0YXRpYyBjb25zdCBjaGFyICptYWluV29ybGRTY3JpcHQgPQor
ICAgICAgICAidG9wLmZvbyA9ICdGb28nO1xuIgorICAgICAgICAiZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2NvbnNvbGUnKS5pbm5lckhUTUwgPSB0b3AuZm9vO1xuIgorICAgICAgICAid2luZG93
Lm9wZW4gPSBmdW5jdGlvbiAoKSB7IGFsZXJ0KCdNYWluIFdvcmxkJyk7IH1cbiIKKyAgICAgICAg
ImRvY3VtZW50Lm9wZW4oMSwgMiwgMyk7IjsKKyAgICB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2Fp
dFVudGlsRmluaXNoZWQobWFpbldvcmxkU2NyaXB0LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIo
cmVzdWx0LmdldCgpLCA9PSwgIk1haW4gV29ybGQiKTsKKyAgICByZXN1bHQuY2xlYXIoKTsKKwor
ICAgIFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5K
YXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdj
b25zb2xlJykuaW5uZXJIVE1MIiwgMCk7CisgICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7
CisgICAgR093blB0cjxjaGFyPiB2YWx1ZVN0cmluZyhXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJl
c3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHZh
bHVlU3RyaW5nLmdldCgpLCA9PSwgIkZvbyIpOworCisgICAgc3RhdGljIGNvbnN0IGNoYXIgKmlz
b2xhdGVkV29ybGRTY3JpcHQgPQorICAgICAgICAiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Nv
bnNvbGUnKS5pbm5lckhUTUwgPSB0b3AuZm9vO1xuIgorICAgICAgICAid2luZG93Lm9wZW4gPSBm
dW5jdGlvbiAoKSB7IGFsZXJ0KCdJc29sYXRlZCBXb3JsZCcpOyB9XG4iCisgICAgICAgICJkb2N1
bWVudC5vcGVuKDEsIDIsIDMpOyI7CisgICAgR1JlZlB0cjxHREJ1c1Byb3h5PiBwcm94eSA9IGFk
b3B0R1JlZihidXMtPmNyZWF0ZVByb3h5KCJvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0
IiwKKyAgICAgICAgIi9vcmcvd2Via2l0L2d0ay9XZWJFeHRlbnNpb25UZXN0IiAsICJvcmcud2Vi
a2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwgdGVzdC0+bV9tYWluTG9vcCkpOworICAgIGdfZGJ1
c19wcm94eV9jYWxsKHByb3h5LmdldCgpLAorICAgICAgICAiUnVuSmF2YVNjcmlwdEluSXNvbGF0
ZWRXb3JsZCIsCisgICAgICAgIGdfdmFyaWFudF9uZXcoIih0JnMpIiwgd2Via2l0X3dlYl92aWV3
X2dldF9wYWdlX2lkKHRlc3QtPm1fd2ViVmlldyksIGlzb2xhdGVkV29ybGRTY3JpcHQpLAorICAg
ICAgICBHX0RCVVNfQ0FMTF9GTEFHU19OT05FLAorICAgICAgICAtMSwgMCwKKyAgICAgICAgcmVp
bnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihydW5KYXZhU2NyaXB0SW5Jc29sYXRl
ZFdvcmxkRmluaXNoZWRDYWxsYmFjayksCisgICAgICAgIHRlc3QpOworICAgIGdfbWFpbl9sb29w
X3J1bih0ZXN0LT5tX21haW5Mb29wKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIocmVzdWx0LmdldCgp
LCA9PSwgIklzb2xhdGVkIFdvcmxkIik7CisgICAgcmVzdWx0LmNsZWFyKCk7CisKKyAgICAvLyBD
aGVjayB0aGF0ICd0b3AuZm9vJyBkZWZpbmVkIGluIG1haW4gd29ybGQgaXMgbm90IHZpc2libGUg
aW4gaXNvbGF0ZWQgd29ybGQuCisgICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFT
Y3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNv
bGUnKS5pbm5lckhUTUwiLCAwKTsKKyAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKKyAg
ICB2YWx1ZVN0cmluZy5zZXQoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0NTdHJpbmco
amF2YXNjcmlwdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih2YWx1ZVN0cmluZy5nZXQo
KSwgPT0sICJ1bmRlZmluZWQiKTsKKworICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdCh0
ZXN0LT5tX3dlYlZpZXcsIHNjcmlwdERpYWxvZ0lEKTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQor
eworICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfd2ViX2V4dGVuc2lvbnNfZGlyZWN0b3J5KHdl
YmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpLCBXRUJLSVRfVEVTVF9XRUJfRVhURU5TSU9O
U19ESVIpOworICAgIGJ1cyA9IG5ldyBXZWJLaXRUZXN0QnVzKCk7CisgICAgaWYgKCFidXMtPnJ1
bigpKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJF
eHRlbnNpb24iLCAiZG9tLWRvY3VtZW50LXRpdGxlIiwgdGVzdFdlYkV4dGVuc2lvbkdldFRpdGxl
KTsKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJFeHRlbnNpb24iLCAiZG9jdW1lbnQt
bG9hZGVkLXNpZ25hbCIsIHRlc3REb2N1bWVudExvYWRlZFNpZ25hbCk7CisgICAgV2ViVmlld1Rl
c3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJ3ZWItcHJvY2Vzcy1jcmFzaGVkIiwgdGVzdFdlYktp
dFdlYlZpZXdQcm9jZXNzQ3Jhc2hlZCk7CisgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2Vi
RXh0ZW5zaW9uIiwgIndpbmRvdy1vYmplY3QtY2xlYXJlZCIsIHRlc3RXZWJFeHRlbnNpb25XaW5k
b3dPYmplY3RDbGVhcmVkKTsKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJFeHRlbnNp
b24iLCAiaXNvbGF0ZWQtd29ybGQiLCB0ZXN0V2ViRXh0ZW5zaW9uSXNvbGF0ZWRXb3JsZCk7Cit9
CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworICAgIGRlbGV0ZSBidXM7Cit9CmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdEFjY2Vzc2liaWxp
dHkuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRB
Y2Nlc3NpYmlsaXR5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGVl
MDRiCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQy
R3RrL1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5LmNwcApAQCAtMCwwICsxLDIyNSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aW5jbHVkZSAiVGVzdE1haW4uaCIKKyNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgorCisvLyBUaGUg
bGliYXRzcGkgaGVhZGVycyBkb24ndCB1c2UgR19CRUdJTl9ERUNMUworZXh0ZXJuICJDIiB7Cisj
aW5jbHVkZSA8YXRzcGkvYXRzcGkuaD4KK30KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVk
ZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5j
bHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgor
CisvLyBOYW1lIG9mIHRoZSB0ZXN0IHNlcnZlciBhcHBsaWNhdGlvbiBjcmVhdGluZyB0aGUgd2Vi
VmlldyBvYmplY3QuCitzdGF0aWMgY29uc3QgY2hhcioga1Rlc3RTZXJ2ZXJBcHBOYW1lID0gIkFj
Y2Vzc2liaWxpdHlUZXN0U2VydmVyIjsKKworLy8gTWF4IHNlY29uZHMgdG8gd2FpdCBmb3IgdGhl
IHRlc3Qgc2VydmVyIGJlZm9yZSBpbnNwZWN0aW5nIGl0Lgorc3RhdGljIGNvbnN0IGludCBrTWF4
V2FpdEZvckNoaWxkID0gNTsKKworLy8gVGhlIFBJRCBmb3IgdGhlIHRlc3Qgc2VydmVyIHJ1bm5p
bmcsIHNvIHdlIGNhbiBraWxsIGl0IGlmIG5lZWRlZC4KK3N0YXRpYyBHUGlkIGtDaGlsZFByb2Nl
c3NQaWQgPSAwOworCisvLyBXaGV0aGVyIHRoZSBjaGlsZCBoYXMgcmVwbGllZCBhbmQgaXQncyBy
ZWFkeS4KK3N0YXRpYyBib29sIGtDaGlsZElzUmVhZHkgPSBmYWxzZTsKKworc3RhdGljIHZvaWQg
c3RvcFRlc3RTZXJ2ZXIoKQoreworICAgIC8vIERvIG5vdGhpbmcgaWYgdGhlcmUncyBubyBzZXJ2
ZXIgcnVubmluZy4KKyAgICBpZiAoIWtDaGlsZFByb2Nlc3NQaWQpCisgICAgICAgIHJldHVybjsK
KworICAgIGdfc3Bhd25fY2xvc2VfcGlkKGtDaGlsZFByb2Nlc3NQaWQpOworICAgIGtpbGwoa0No
aWxkUHJvY2Vzc1BpZCwgU0lHVEVSTSk7CisgICAga0NoaWxkUHJvY2Vzc1BpZCA9IDA7Cit9CisK
K3N0YXRpYyB2b2lkIHNpZ0Fib3J0SGFuZGxlcihpbnQgc2lnTnVtKQoreworICAgIC8vIEp1c3Qg
c3RvcCB0aGUgdGVzdCBzZXJ2ZXIgaWYgU0lHQUJSVCB3YXMgcmVjZWl2ZWQuCisgICAgc3RvcFRl
c3RTZXJ2ZXIoKTsKK30KKworc3RhdGljIGdwb2ludGVyIHRlc3RTZXJ2ZXJNb25pdG9yVGhyZWFk
RnVuYyhncG9pbnRlcikKK3sKKyAgICAvLyBXYWl0IGZvciB0aGUgc3BlY2lmaWVkIHRpbWVvdXQg
dG8gaGFwcGVuLgorICAgIGdfdXNsZWVwKGtNYXhXYWl0Rm9yQ2hpbGQgKiBHX1VTRUNfUEVSX1NF
Qyk7CisKKyAgICAvLyBLaWxsIHRoZSBjaGlsZCBwcm9jZXNzIGlmIG5vdCByZWFkeSB5ZXQuCisg
ICAgaWYgKCFrQ2hpbGRJc1JlYWR5KQorICAgICAgICBzdG9wVGVzdFNlcnZlcigpOworCisgICAg
Z190aHJlYWRfZXhpdCgwKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3RhcnRU
ZXN0U2VydmVyTW9uaXRvcigpCit7CisgICAga0NoaWxkSXNSZWFkeSA9IGZhbHNlOworICAgIGdf
dGhyZWFkX25ldygiVGVzdFNlcnZlck1vbml0b3IiLCB0ZXN0U2VydmVyTW9uaXRvclRocmVhZEZ1
bmMsIDApOworfQorCitzdGF0aWMgdm9pZCBzdGFydFRlc3RTZXJ2ZXIoKQoreworICAgIC8vIFBy
ZXBhcmUgYXJndltdIGZvciBzcGF3bmluZyB0aGUgc2VydmVyIHByb2Nlc3MuCisgICAgR093blB0
cjxjaGFyPiB0ZXN0U2VydmVyUGF0aChnX2J1aWxkX2ZpbGVuYW1lKFdFQktJVF9FWEVDX1BBVEgs
ICJUZXN0V2ViS2l0QVBJIiwgIldlYktpdDJHdGsiLCBrVGVzdFNlcnZlckFwcE5hbWUsIE5VTEwp
KTsKKworICAgIGNoYXIqIHRlc3RTZXJ2ZXJBcmd2WzJdOworICAgIHRlc3RTZXJ2ZXJBcmd2WzBd
ID0gdGVzdFNlcnZlclBhdGguZ2V0KCk7CisgICAgdGVzdFNlcnZlckFyZ3ZbMV0gPSAwOworCisg
ICAgLy8gU3Bhd24gdGhlIHNlcnZlciwgZ2V0dGluZyBpdHMgc3Rkb3V0IGZpbGUgZGVzY3JpcHRv
ciB0byBzZXQgYQorICAgIC8vIGNvbW11bmljYXRpb24gY2hhbm5lbCwgc28gd2Uga25vdyB3aGVu
IGl0J3MgcmVhZHkuCisgICAgaW50IGNoaWxkU3Rkb3V0ID0gMDsKKyAgICBpZiAoIWdfc3Bhd25f
YXN5bmNfd2l0aF9waXBlcygwLCB0ZXN0U2VydmVyQXJndiwgMCwgc3RhdGljX2Nhc3Q8R1NwYXdu
RmxhZ3M+KDApLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrQ2hp
bGRQcm9jZXNzUGlkLCAwLCAmY2hpbGRTdGRvdXQsIDAsIDApKSB7CisgICAgICAgIGNsb3NlKGNo
aWxkU3Rkb3V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFN0YXJ0IG1vbml0
b3JpbmcgdGhlIHRlc3Qgc2VydmVyIChpbiBhIHNlcGFyYXRlIHRocmVhZCkgdG8KKyAgICAvLyBl
bnN1cmUgd2UgZG9uJ3QgYmxvY2sgb24gdGhlIGNoaWxkIHByb2Nlc3MgbW9yZSB0aGFuIGEgdGlt
ZW91dC4KKyAgICBzdGFydFRlc3RTZXJ2ZXJNb25pdG9yKCk7CisKKyAgICBjaGFyIG1zZ1syXTsK
KyAgICBHSU9DaGFubmVsKiBpb0NoYW5uZWwgPSBnX2lvX2NoYW5uZWxfdW5peF9uZXcoY2hpbGRT
dGRvdXQpOworICAgIGlmIChnX2lvX2NoYW5uZWxfcmVhZF9jaGFycyhpb0NoYW5uZWwsIG1zZywg
MiwgMCwgMCkgPT0gR19JT19TVEFUVVNfTk9STUFMKSB7CisgICAgICAgIC8vIENoZWNrIHdoZXRo
ZXIgdGhlIHNlcnZlciBzZW50IGEgbWVzc2FnZSBzYXlpbmcgaXQncyByZWFkeQorICAgICAgICAv
LyBhbmQgc3RvcmUgdGhlIHJlc3VsdCBnbG9iYWxseSwgc28gdGhlIG1vbml0b3IgY2FuIHNlZSBp
dC4KKyAgICAgICAga0NoaWxkSXNSZWFkeSA9IG1zZ1swXSA9PSAnTycgJiYgbXNnWzFdID09ICdL
JzsKKyAgICB9CisgICAgZ19pb19jaGFubmVsX3VucmVmKGlvQ2hhbm5lbCk7CisgICAgY2xvc2Uo
Y2hpbGRTdGRvdXQpOworCisgICAgLy8gVGhlIHRpbWVvdXQgd2FzIHJlYWNoZWQgYW5kIHRoZSBz
ZXJ2ZXIgaXMgbm90IHJlYWR5IHlldCwgc28KKyAgICAvLyBzdG9wIGl0IGlubWVkaWF0ZWx5LCBh
bmQgbGV0IHRoZSB1bml0IHRlc3RzIGZhaWwuCisgICAgaWYgKCFrQ2hpbGRJc1JlYWR5KQorICAg
ICAgICBzdG9wVGVzdFNlcnZlcigpOworfQorCitzdGF0aWMgdm9pZCBjaGVja0F0c3BpQWNjZXNz
aWJsZShBdHNwaUFjY2Vzc2libGUqIGFjY2Vzc2libGUsIGNvbnN0IGNoYXIqIHRhcmdldE5hbWUs
IEF0c3BpUm9sZSB0YXJnZXRSb2xlKQoreworICAgIGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lC
TEUoYWNjZXNzaWJsZSkpOworCisgICAgR093blB0cjxjaGFyPiBuYW1lKGF0c3BpX2FjY2Vzc2li
bGVfZ2V0X25hbWUoYWNjZXNzaWJsZSwgMCkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0YXJnZXRO
YW1lLCA9PSwgbmFtZS5nZXQoKSk7CisgICAgZ19hc3NlcnRfY21waW50KHRhcmdldFJvbGUsID09
LCBhdHNwaV9hY2Nlc3NpYmxlX2dldF9yb2xlKGFjY2Vzc2libGUsIDApKTsKK30KKworc3RhdGlj
IEdSZWZQdHI8QXRzcGlBY2Nlc3NpYmxlPiBmaW5kVGVzdFNlcnZlckFwcGxpY2F0aW9uKCkKK3sK
KyAgICAvLyBPbmx5IG9uZSBkZXNrdG9wIGlzIHN1cHBvcnRlZCBieSBBVFNQSSBhdCB0aGUgbW9t
ZW50LgorICAgIEdSZWZQdHI8QXRzcGlBY2Nlc3NpYmxlPiBkZXNrdG9wID0gYWRvcHRHUmVmKGF0
c3BpX2dldF9kZXNrdG9wKDApKTsKKworICAgIC8vIExvb2sgZm9yIHRoZSBzZXJ2ZXIgYXBwbGlj
YXRpb24gaW4gdGhlIGxpc3Qgb2YgYXBwcy4KKyAgICBHUmVmUHRyPEF0c3BpQWNjZXNzaWJsZT4g
Y3VycmVudDsKKyAgICBpbnQgY2hpbGRDb3VudCA9IGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxk
X2NvdW50KGRlc2t0b3AuZ2V0KCksIDApOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRD
b3VudDsgaSsrKSB7CisgICAgICAgIGN1cnJlbnQgPSBhZG9wdEdSZWYoYXRzcGlfYWNjZXNzaWJs
ZV9nZXRfY2hpbGRfYXRfaW5kZXgoZGVza3RvcC5nZXQoKSwgaSwgMCkpOworICAgICAgICBpZiAo
IWdfc3RyY21wMChhdHNwaV9hY2Nlc3NpYmxlX2dldF9uYW1lKGN1cnJlbnQuZ2V0KCksIDApLCBr
VGVzdFNlcnZlckFwcE5hbWUpKQorICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7CisgICAgfQor
CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RBdHNwaUJhc2ljSGllcmFyY2h5
KFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIC8vIFRoZSB0ZXN0IHNl
cnZlcidzIGFjY2Vzc2liaWxpdHkgb2JqZWN0IChVSSBQcm9jZXNzKS4KKyAgICBHUmVmUHRyPEF0
c3BpQWNjZXNzaWJsZT4gdGVzdFNlcnZlckFwcCA9IGZpbmRUZXN0U2VydmVyQXBwbGljYXRpb24o
KTsKKyAgICBnX2Fzc2VydChBVFNQSV9JU19BQ0NFU1NJQkxFKHRlc3RTZXJ2ZXJBcHAuZ2V0KCkp
KTsKKyAgICBjaGVja0F0c3BpQWNjZXNzaWJsZSh0ZXN0U2VydmVyQXBwLmdldCgpLCAiQWNjZXNz
aWJpbGl0eVRlc3RTZXJ2ZXIiLCBBVFNQSV9ST0xFX0FQUExJQ0FUSU9OKTsKKworICAgIC8vIFRo
ZSBtYWluIHdpbmRvdydzIGFjY2Vzc2liaWxpdHkgb2JqZWN0IChVSSBQcm9jZXNzKS4KKyAgICBH
UmVmUHRyPEF0c3BpQWNjZXNzaWJsZT4gY3VycmVudFBhcmVudCA9IHRlc3RTZXJ2ZXJBcHA7Cisg
ICAgR1JlZlB0cjxBdHNwaUFjY2Vzc2libGU+IGN1cnJlbnRDaGlsZCA9IGFkb3B0R1JlZihhdHNw
aV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChjdXJyZW50UGFyZW50LmdldCgpLCAwLCAw
KSk7CisgICAgZ19hc3NlcnQoQVRTUElfSVNfQUNDRVNTSUJMRShjdXJyZW50Q2hpbGQuZ2V0KCkp
KTsKKyAgICBjaGVja0F0c3BpQWNjZXNzaWJsZShjdXJyZW50Q2hpbGQuZ2V0KCksICIiLCBBVFNQ
SV9ST0xFX0ZSQU1FKTsKKworICAgIC8vIFRoZSBXZWJWaWV3J3MgYWNjZXNzaWJpbGl0eSBvYmpl
Y3QgKFVJIFByb2Nlc3MpLgorICAgIGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50Q2hpbGQ7CisgICAg
Y3VycmVudENoaWxkID0gYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoY3VycmVu
dFBhcmVudC5nZXQoKSwgMCwgMCk7CisgICAgZ19hc3NlcnQoQVRTUElfSVNfQUNDRVNTSUJMRShj
dXJyZW50Q2hpbGQuZ2V0KCkpKTsKKyAgICBjaGVja0F0c3BpQWNjZXNzaWJsZShjdXJyZW50Q2hp
bGQuZ2V0KCksICIiLCBBVFNQSV9ST0xFX0ZJTExFUik7CisKKyAgICAvLyBUaGUgV2ViUGFnZSdz
IGFjY2Vzc2liaWxpdHkgb2JqZWN0IChXZWIgUHJvY2VzcykuCisgICAgY3VycmVudFBhcmVudCA9
IGN1cnJlbnRDaGlsZDsKKyAgICBjdXJyZW50Q2hpbGQgPSBhdHNwaV9hY2Nlc3NpYmxlX2dldF9j
aGlsZF9hdF9pbmRleChjdXJyZW50UGFyZW50LmdldCgpLCAwLCAwKTsKKyAgICBnX2Fzc2VydChB
VFNQSV9JU19BQ0NFU1NJQkxFKGN1cnJlbnRDaGlsZC5nZXQoKSkpOworICAgIGNoZWNrQXRzcGlB
Y2Nlc3NpYmxlKGN1cnJlbnRDaGlsZC5nZXQoKSwgIiIsIEFUU1BJX1JPTEVfRklMTEVSKTsKKwor
ICAgIC8vIEhUTUwgcm9vdCBlbGVtZW50J3MgYWNjZXNzaWJsZSBlbGVtZW50IChXZWIgUHJvY2Vz
cykuCisgICAgY3VycmVudFBhcmVudCA9IGN1cnJlbnRDaGlsZDsKKyAgICBjdXJyZW50Q2hpbGQg
PSBhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChjdXJyZW50UGFyZW50LmdldCgp
LCAwLCAwKTsKKyAgICBnX2Fzc2VydChBVFNQSV9JU19BQ0NFU1NJQkxFKGN1cnJlbnRDaGlsZC5n
ZXQoKSkpOworCisgICAgLy8gSFRNTCBib2R5J3MgYWNjZXNzaWJsZSBlbGVtZW50IChXZWIgUHJv
Y2VzcykuCisgICAgY3VycmVudFBhcmVudCA9IGN1cnJlbnRDaGlsZDsKKyAgICBjdXJyZW50Q2hp
bGQgPSBhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChjdXJyZW50UGFyZW50Lmdl
dCgpLCAwLCAwKTsKKyAgICBnX2Fzc2VydChBVFNQSV9JU19BQ0NFU1NJQkxFKGN1cnJlbnRDaGls
ZC5nZXQoKSkpOworICAgIGNoZWNrQXRzcGlBY2Nlc3NpYmxlKGN1cnJlbnRDaGlsZC5nZXQoKSwg
IiIsIEFUU1BJX1JPTEVfRE9DVU1FTlRfV0VCKTsKKworICAgIC8vIEhUTUwgSDEncyBhY2Nlc3Np
YmxlIGVsZW1lbnQgKFdlYiBQcm9jZXNzKS4KKyAgICBjdXJyZW50UGFyZW50ID0gY3VycmVudENo
aWxkOworICAgIGN1cnJlbnRDaGlsZCA9IGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2lu
ZGV4KGN1cnJlbnRQYXJlbnQuZ2V0KCksIDAsIDApOworICAgIGdfYXNzZXJ0KEFUU1BJX0lTX0FD
Q0VTU0lCTEUoY3VycmVudENoaWxkLmdldCgpKSk7CisgICAgY2hlY2tBdHNwaUFjY2Vzc2libGUo
Y3VycmVudENoaWxkLmdldCgpLCAiVGhpcyBpcyBhIHRlc3QiLCBBVFNQSV9ST0xFX0hFQURJTkcp
OworCisgICAgLy8gSFRNTCBmaXJzdCBwYXJhZ3JhcGgncyBhY2Nlc3NpYmxlIGVsZW1lbnQgKFdl
YiBQcm9jZXNzKS4KKyAgICBjdXJyZW50Q2hpbGQgPSBhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGls
ZF9hdF9pbmRleChjdXJyZW50UGFyZW50LmdldCgpLCAxLCAwKTsKKyAgICBnX2Fzc2VydChBVFNQ
SV9JU19BQ0NFU1NJQkxFKGN1cnJlbnRDaGlsZC5nZXQoKSkpOworICAgIGNoZWNrQXRzcGlBY2Nl
c3NpYmxlKGN1cnJlbnRDaGlsZC5nZXQoKSwgIiIsIEFUU1BJX1JPTEVfUEFSQUdSQVBIKTsKKwor
ICAgIC8vIEhUTUwgc2Vjb25kIHBhcmFncmFwaCdzIGFjY2Vzc2libGUgZWxlbWVudCAoV2ViIFBy
b2Nlc3MpLgorICAgIGN1cnJlbnRDaGlsZCA9IGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0
X2luZGV4KGN1cnJlbnRQYXJlbnQuZ2V0KCksIDIsIDApOworICAgIGdfYXNzZXJ0KEFUU1BJX0lT
X0FDQ0VTU0lCTEUoY3VycmVudENoaWxkLmdldCgpKSk7CisgICAgY2hlY2tBdHNwaUFjY2Vzc2li
bGUoY3VycmVudENoaWxkLmdldCgpLCAiIiwgQVRTUElfUk9MRV9QQVJBR1JBUEgpOworCisgICAg
Ly8gSFRNTCBsaW5rJ3MgYWNjZXNzaWJsZSBlbGVtZW50IChXZWIgUHJvY2VzcykuCisgICAgY3Vy
cmVudFBhcmVudCA9IGN1cnJlbnRDaGlsZDsKKyAgICBjdXJyZW50Q2hpbGQgPSBhdHNwaV9hY2Nl
c3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChjdXJyZW50UGFyZW50LmdldCgpLCAwLCAwKTsKKyAg
ICBnX2Fzc2VydChBVFNQSV9JU19BQ0NFU1NJQkxFKGN1cnJlbnRDaGlsZC5nZXQoKSkpOworICAg
IGNoZWNrQXRzcGlBY2Nlc3NpYmxlKGN1cnJlbnRDaGlsZC5nZXQoKSwgImEgbGluayIsIEFUU1BJ
X1JPTEVfTElOSyk7Cit9CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICAvLyBXZSBpbnN0YWxs
IGEgaGFuZGxlciB0byBlbnN1cmUgdGhhdCB3ZSBraWxsIHRoZSBjaGlsZCBwcm9jZXNzCisgICAg
Ly8gaWYgdGhlIHBhcmVudCBkaWVzIGJlY2F1c2Ugb2Ygd2hhdGV2ZXIgdGhlIHJlYXNvbiBpcy4K
KyAgICBzaWduYWwoU0lHQUJSVCwgc2lnQWJvcnRIYW5kbGVyKTsKKworICAgIC8vIFN0YXJ0IHRo
ZSBhY2Nlc3NpYmlsaXR5IHRlc3Qgc2VydmVyIGFuZCBsb2FkIHRoZSB0ZXN0cy4KKyAgICBzdGFy
dFRlc3RTZXJ2ZXIoKTsKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRBY2Nlc3NpYmlsaXR5
IiwgImF0c3BpLWJhc2ljLWhpZXJhcmNoeSIsIHRlc3RBdHNwaUJhc2ljSGllcmFyY2h5KTsKK30K
Kwordm9pZCBhZnRlckFsbCgpCit7CisgICAgLy8gRW5zdXJlIHdlIHN0b3AgdGhlIHNlcnZlci4K
KyAgICBzdG9wVGVzdFNlcnZlcigpOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2UuY3BwIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2Uu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMDZmNzQKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktp
dEZhdmljb25EYXRhYmFzZS5jcHAKQEAgLTAsMCArMSwyNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIldl
YktpdFRlc3RTZXJ2ZXIuaCIKKyNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgorI2luY2x1ZGUgPGds
aWIvZ3N0ZGlvLmg+CisjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CisjaW5jbHVkZSA8d3RmL2dv
YmplY3QvR093blB0ci5oPgorCitzdGF0aWMgV2ViS2l0VGVzdFNlcnZlcioga1NlcnZlcjsKK3N0
YXRpYyBjaGFyKiBrVGVtcERpcmVjdG9yeTsKKworY2xhc3MgRmF2aWNvbkRhdGFiYXNlVGVzdDog
cHVibGljIFdlYlZpZXdUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJF
KEZhdmljb25EYXRhYmFzZVRlc3QpOworCisgICAgRmF2aWNvbkRhdGFiYXNlVGVzdCgpCisgICAg
ICAgIDogbV93ZWJDb250ZXh0KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpKQorICAg
ICAgICAsIG1fZmF2aWNvbigwKQorICAgICAgICAsIG1fZXJyb3IoMCkKKyAgICAgICAgLCBtX2Zh
dmljb25Ob3RpZmljYXRpb25SZWNlaXZlZChmYWxzZSkKKyAgICB7CisgICAgICAgIFdlYktpdEZh
dmljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25f
ZGF0YWJhc2UobV93ZWJDb250ZXh0KTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChkYXRhYmFz
ZSwgImZhdmljb24tY2hhbmdlZCIsIEdfQ0FMTEJBQ0soZmF2aWNvbkNoYW5nZWRDYWxsYmFjayks
IHRoaXMpOworICAgIH0KKworICAgIH5GYXZpY29uRGF0YWJhc2VUZXN0KCkKKyAgICB7CisgICAg
ICAgIGlmIChtX2Zhdmljb24pCisgICAgICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3kobV9m
YXZpY29uKTsKKworICAgICAgICBXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlID0gd2Vi
a2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNlKG1fd2ViQ29udGV4dCk7CisgICAg
ICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChkYXRhYmFzZSwgR19TSUdO
QUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7CisgICAgfQorCisgICAgc3RhdGljIHZv
aWQgZmF2aWNvbkNoYW5nZWRDYWxsYmFjayhXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNl
LCBjb25zdCBjaGFyKiBwYWdlVVJJLCBjb25zdCBjaGFyKiBmYXZpY29uVVJJLCBGYXZpY29uRGF0
YWJhc2VUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgaWYgKCFnX3N0cmNtcDAod2Via2l0X3dl
Yl92aWV3X2dldF91cmkodGVzdC0+bV93ZWJWaWV3KSwgcGFnZVVSSSkpCisgICAgICAgICAgICB0
ZXN0LT5tX2Zhdmljb25VUkkgPSBmYXZpY29uVVJJOworICAgIH0KKworICAgIHN0YXRpYyB2b2lk
IHZpZXdGYXZpY29uQ2hhbmdlZENhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEdQYXJh
bVNwZWMqIHBzcGVjLCBncG9pbnRlciBkYXRhKQorICAgIHsKKyAgICAgICAgRmF2aWNvbkRhdGFi
YXNlVGVzdCogdGVzdCA9IHN0YXRpY19jYXN0PEZhdmljb25EYXRhYmFzZVRlc3QqPihkYXRhKTsK
KyAgICAgICAgZ19hc3NlcnQodGVzdC0+bV93ZWJWaWV3ID09IHdlYlZpZXcpOworICAgICAgICB0
ZXN0LT5tX2Zhdmljb25Ob3RpZmljYXRpb25SZWNlaXZlZCA9IHRydWU7CisgICAgICAgIHRlc3Qt
PnF1aXRNYWluTG9vcCgpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGdldEZhdmljb25DYWxs
YmFjayhHT2JqZWN0KiBzb3VyY2VPYmplY3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCB2b2lkKiBk
YXRhKQorICAgIHsKKyAgICAgICAgRmF2aWNvbkRhdGFiYXNlVGVzdCogdGVzdCA9IHN0YXRpY19j
YXN0PEZhdmljb25EYXRhYmFzZVRlc3QqPihkYXRhKTsKKyAgICAgICAgV2ViS2l0RmF2aWNvbkRh
dGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFz
ZSh0ZXN0LT5tX3dlYkNvbnRleHQpOworICAgICAgICB0ZXN0LT5tX2Zhdmljb24gPSB3ZWJraXRf
ZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl9maW5pc2goZGF0YWJhc2UsIHJlc3VsdCwgJnRl
c3QtPm1fZXJyb3Iub3V0UHRyKCkpOworICAgICAgICB0ZXN0LT5xdWl0TWFpbkxvb3AoKTsKKyAg
ICB9CisKKyAgICB2b2lkIHdhaXRVbnRpbEZhdmljb25DaGFuZ2VkKCkKKyAgICB7CisgICAgICAg
IG1fZmF2aWNvbk5vdGlmaWNhdGlvblJlY2VpdmVkID0gZmFsc2U7CisgICAgICAgIHVuc2lnbmVk
IGxvbmcgaGFuZGxlcklEID0gZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJub3RpZnk6OmZh
dmljb24iLCBHX0NBTExCQUNLKHZpZXdGYXZpY29uQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7Cisg
ICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICAgICAgZ19zaWduYWxfaGFu
ZGxlcl9kaXNjb25uZWN0KG1fd2ViVmlldywgaGFuZGxlcklEKTsKKyAgICB9CisKKyAgICB2b2lk
IGdldEZhdmljb25Gb3JQYWdlVVJJQW5kV2FpdFVudGlsUmVhZHkoY29uc3QgY2hhciogcGFnZVVS
SSkKKyAgICB7CisgICAgICAgIG1fZXJyb3IuY2xlYXIoKTsKKyAgICAgICAgaWYgKG1fZmF2aWNv
bikgeworICAgICAgICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KG1fZmF2aWNvbik7CisgICAg
ICAgICAgICBtX2Zhdmljb24gPSAwOworICAgICAgICB9CisKKyAgICAgICAgV2ViS2l0RmF2aWNv
bkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZmF2aWNvbl9kYXRh
YmFzZShtX3dlYkNvbnRleHQpOworICAgICAgICB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRf
ZmF2aWNvbihkYXRhYmFzZSwgcGFnZVVSSSwgMCwgZ2V0RmF2aWNvbkNhbGxiYWNrLCB0aGlzKTsK
KyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIFdlYktp
dFdlYkNvbnRleHQqIG1fd2ViQ29udGV4dDsKKyAgICBjYWlyb19zdXJmYWNlX3QqIG1fZmF2aWNv
bjsKKyAgICBDU3RyaW5nIG1fZmF2aWNvblVSSTsKKyAgICBHT3duUHRyPEdFcnJvcj4gbV9lcnJv
cjsKKyAgICBib29sIG1fZmF2aWNvbk5vdGlmaWNhdGlvblJlY2VpdmVkOworfTsKKworc3RhdGlj
IHZvaWQKK3NlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1l
c3NhZ2UsIGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqIHF1ZXJ5LCBTb3VwQ2xpZW50Q29u
dGV4dCogY29udGV4dCwgdm9pZCogZGF0YSkKK3sKKyAgICBpZiAobWVzc2FnZS0+bWV0aG9kICE9
IFNPVVBfTUVUSE9EX0dFVCkgeworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNz
YWdlLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvZmF2aWNvbi5pY28iKSkgeworICAgICAg
ICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfRk9VTkQp
OworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9i
b2R5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNoYXIqIGNvbnRlbnRzOworICAg
IGdzaXplIGxlbmd0aDsKKyAgICBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9pY29uL2Zhdmljb24u
aWNvIikpIHsKKyAgICAgICAgR093blB0cjxjaGFyPiBwYXRoVG9GYXZpY29uKGdfYnVpbGRfZmls
ZW5hbWUoVGVzdDo6Z2V0V2ViS2l0MVRlc3RSZXNvdWNlc0RpcigpLmRhdGEoKSwgImJsYW5rLmlj
byIsIE5VTEwpKTsKKyAgICAgICAgZ19maWxlX2dldF9jb250ZW50cyhwYXRoVG9GYXZpY29uLmdl
dCgpLCAmY29udGVudHMsICZsZW5ndGgsIDApOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9h
cHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgY29udGVudHMs
IGxlbmd0aCk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL25vZmF2aWNvbiIp
KSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBub0Zhdmljb25IVE1MID0gIjxodG1sPjxo
ZWFkPjxib2R5PnRlc3Q8L2JvZHk+PC9odG1sPiI7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5
X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIG5vRmF2
aWNvbkhUTUwsIHN0cmxlbihub0Zhdmljb25IVE1MKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
c3RhdGljIGNvbnN0IGNoYXIqIGNvbnRlbnRzSFRNTCA9ICI8aHRtbD48aGVhZD48bGluayByZWw9
J2ljb24nIGhyZWY9Jy9pY29uL2Zhdmljb24uaWNvJyB0eXBlPSdpbWFnZS94LWljbzsgY2hhcnNl
dD1iaW5hcnknPjwvaGVhZD48Ym9keT50ZXN0PC9ib2R5PjwvaHRtbD4iOworICAgICAgICBzb3Vw
X21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllf
U1RBVElDLCBjb250ZW50c0hUTUwsIHN0cmxlbihjb250ZW50c0hUTUwpKTsKKyAgICB9CisKKyAg
ICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7CisgICAg
c291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7Cit9CisK
K3N0YXRpYyB2b2lkIHRlc3ROb3RJbml0aWFsaXplZChGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0
KQoreworICAgIC8vIFRyeSB0byByZXRyaWV2ZSBhIHZhbGlkIGZhdmljb24gZnJvbSBhIG5vdCBp
bml0aWFsaXplZCBkYXRhYmFzZS4KKyAgICB0ZXN0LT5nZXRGYXZpY29uRm9yUGFnZVVSSUFuZFdh
aXRVbnRpbFJlYWR5KGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9mb28iKS5kYXRhKCkpOworICAg
IGdfYXNzZXJ0KCF0ZXN0LT5tX2Zhdmljb24pOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fZXJyb3Ip
OworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2Vycm9yLT5jb2RlLCA9PSwgV0VCS0lUX0ZB
VklDT05fREFUQUJBU0VfRVJST1JfTk9UX0lOSVRJQUxJWkVEKTsKK30KKworc3RhdGljIHZvaWQg
dGVzdFNldERpcmVjdG9yeShGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0KQoreworICAgIHdlYmtp
dF93ZWJfY29udGV4dF9zZXRfZmF2aWNvbl9kYXRhYmFzZV9kaXJlY3RvcnkodGVzdC0+bV93ZWJD
b250ZXh0LCBrVGVtcERpcmVjdG9yeSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGtUZW1wRGlyZWN0
b3J5LCA9PSwgd2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNlX2RpcmVjdG9y
eSh0ZXN0LT5tX3dlYkNvbnRleHQpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdENsZWFyRGF0YWJh
c2UoRmF2aWNvbkRhdGFiYXNlVGVzdCogdGVzdCkKK3sKKyAgICBXZWJLaXRGYXZpY29uRGF0YWJh
c2UqIGRhdGFiYXNlID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNlKHRl
c3QtPm1fd2ViQ29udGV4dCk7CisgICAgd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfY2xlYXIoZGF0
YWJhc2UpOworCisgICAgR093blB0cjxjaGFyPiBpY29uVVJJKHdlYmtpdF9mYXZpY29uX2RhdGFi
YXNlX2dldF9mYXZpY29uX3VyaShkYXRhYmFzZSwga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2Zv
byIpLmRhdGEoKSkpOworICAgIGdfYXNzZXJ0KCFpY29uVVJJKTsKK30KKworc3RhdGljIHZvaWQg
dGVzdEdldEZhdmljb24oRmF2aWNvbkRhdGFiYXNlVGVzdCogdGVzdCkKK3sKKyAgICAvLyBXZSBu
ZWVkIHRvIGxvYWQgdGhlIHBhZ2UgZmlyc3QgdG8gZW5zdXJlIHRoZSBpY29uIGRhdGEgd2lsbCBi
ZQorICAgIC8vIGluIHRoZSBkYXRhYmFzZSBpbiBjYXNlIHRoZXJlJ3MgYW4gYXNzb2NpYXRlZCBm
YXZpY29uLgorICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2ZvbyIp
LmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsRmF2aWNvbkNoYW5nZWQoKTsKKyAgICBDU3Ry
aW5nIGZhdmljb25VUkkgPSBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvaWNvbi9mYXZpY29uLmlj
byIpOworCisgICAgLy8gQ2hlY2sgdGhlIEFQSSByZXRyaWV2aW5nIGEgdmFsaWQgZmF2aWNvbi4K
KyAgICB0ZXN0LT5nZXRGYXZpY29uRm9yUGFnZVVSSUFuZFdhaXRVbnRpbFJlYWR5KGtTZXJ2ZXIt
PmdldFVSSUZvclBhdGgoIi9mb28iKS5kYXRhKCkpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fZmF2
aWNvbik7CisgICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPm1fZmF2aWNvblVSSS5kYXRhKCksID09
LCBmYXZpY29uVVJJLmRhdGEoKSk7CisgICAgZ19hc3NlcnQoIXRlc3QtPm1fZXJyb3IpOworCisg
ICAgLy8gQ2hlY2sgdGhhdCB3aWR0aCBhbmQgaGVpZ2h0IG1hdGNoIHRob3NlIGZyb20gYmxhbmsu
aWNvICgxNngxNiBmYXZpY29uKS4KKyAgICBnX2Fzc2VydF9jbXBpbnQoY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9nZXRfd2lkdGgodGVzdC0+bV9mYXZpY29uKSwgPT0sIDE2KTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHRlc3QtPm1fZmF2aWNvbiksID09
LCAxNik7CisKKyAgICAvLyBDaGVjayB0aGF0IGFub3RoZXIgcGFnZSB3aXRoIHRoZSBzYW1lIGZh
dmljb24gcmV0dXJuIHRoZSBzYW1lIGljb24uCisgICAgY2Fpcm9fc3VyZmFjZV90KiBmYXZpY29u
ID0gY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2UodGVzdC0+bV9mYXZpY29uKTsKKyAgICB0ZXN0LT5s
b2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9iYXIiKS5kYXRhKCkpOworICAgIC8vIEl0
J3MgYSBuZXcgcGFnZSBpbiB0aGUgZGF0YWJhc2UsIHNvIGZhdmljb24gd2lsbCBjaGFuZ2UgdHdp
Y2UsIGZpcnN0IHRvIHJlc2V0IGl0CisgICAgLy8gYW5kIHRoZW4gd2hlbiB0aGUgaWNvbiBpcyBs
b2FkZWQuCisgICAgdGVzdC0+d2FpdFVudGlsRmF2aWNvbkNoYW5nZWQoKTsKKyAgICB0ZXN0LT53
YWl0VW50aWxGYXZpY29uQ2hhbmdlZCgpOworICAgIHRlc3QtPmdldEZhdmljb25Gb3JQYWdlVVJJ
QW5kV2FpdFVudGlsUmVhZHkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2JhciIpLmRhdGEoKSk7
CisgICAgZ19hc3NlcnQodGVzdC0+bV9mYXZpY29uKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGVz
dC0+bV9mYXZpY29uVVJJLmRhdGEoKSwgPT0sIGZhdmljb25VUkkuZGF0YSgpKTsKKyAgICBnX2Fz
c2VydCh0ZXN0LT5tX2Zhdmljb24gPT0gZmF2aWNvbik7CisgICAgZ19hc3NlcnQoIXRlc3QtPm1f
ZXJyb3IpOworICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShmYXZpY29uKTsKKworICAgIC8vIENo
ZWNrIHRoZSBBUEkgcmV0cmlldmluZyBhbiBpbnZhbGlkIGZhdmljb24uCisgICAgdGVzdC0+bG9h
ZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvbm9mYXZpY29uIikuZGF0YSgpKTsKKyAgICB0
ZXN0LT53YWl0VW50aWxGYXZpY29uQ2hhbmdlZCgpOworCisgICAgdGVzdC0+Z2V0RmF2aWNvbkZv
clBhZ2VVUklBbmRXYWl0VW50aWxSZWFkeShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvbm9mYXZp
Y29uIikuZGF0YSgpKTsKKyAgICBnX2Fzc2VydCghdGVzdC0+bV9mYXZpY29uKTsKKyAgICBnX2Fz
c2VydCh0ZXN0LT5tX2Vycm9yKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEdldEZhdmljb25VUkko
RmF2aWNvbkRhdGFiYXNlVGVzdCogdGVzdCkKK3sKKyAgICBXZWJLaXRGYXZpY29uRGF0YWJhc2Uq
IGRhdGFiYXNlID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNlKHRlc3Qt
Pm1fd2ViQ29udGV4dCk7CisKKyAgICBDU3RyaW5nIGJhc2VVUkkgPSBrU2VydmVyLT5nZXRVUklG
b3JQYXRoKCIvZm9vIik7CisgICAgR093blB0cjxjaGFyPiBpY29uVVJJKHdlYmtpdF9mYXZpY29u
X2RhdGFiYXNlX2dldF9mYXZpY29uX3VyaShkYXRhYmFzZSwgYmFzZVVSSS5kYXRhKCkpKTsKKyAg
ICBBU1NFUlRfQ01QX0NTVFJJTkcoaWNvblVSSS5nZXQoKSwgPT0sIGtTZXJ2ZXItPmdldFVSSUZv
clBhdGgoIi9pY29uL2Zhdmljb24uaWNvIikpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmll
d0Zhdmljb24oRmF2aWNvbkRhdGFiYXNlVGVzdCogdGVzdCkKK3sKKyAgICB0ZXN0LT5tX2Zhdmlj
b25VUkkgPSBDU3RyaW5nKCk7CisKKyAgICBjYWlyb19zdXJmYWNlX3QqIGljb25Gcm9tV2ViVmll
dyA9IHdlYmtpdF93ZWJfdmlld19nZXRfZmF2aWNvbih0ZXN0LT5tX3dlYlZpZXcpOworICAgIGdf
YXNzZXJ0KCFpY29uRnJvbVdlYlZpZXcpOworCisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5n
ZXRVUklGb3JQYXRoKCIvZm9vIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGYXZpY29u
Q2hhbmdlZCgpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fZmF2aWNvbk5vdGlmaWNhdGlvblJlY2Vp
dmVkKTsKKyAgICAvLyBUaGUgaWNvbiBpcyBrbm93biBhbmQgaGFzbid0IGNoYW5nZWQgaW4gdGhl
IGRhdGFiYXNlLCBzbyBub3RpZnk6OmZhdmljb24gaXMgZW1pdHRlZAorICAgIC8vIGJ1dCBXZWJL
aXRGYXZpY29uRGF0YWJhc2U6Omljb24tY2hhbmdlZCBpc24ndC4KKyAgICBnX2Fzc2VydCh0ZXN0
LT5tX2Zhdmljb25VUkkuaXNOdWxsKCkpOworCisgICAgaWNvbkZyb21XZWJWaWV3ID0gd2Via2l0
X3dlYl92aWV3X2dldF9mYXZpY29uKHRlc3QtPm1fd2ViVmlldyk7CisgICAgZ19hc3NlcnQoaWNv
bkZyb21XZWJWaWV3KTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X3dpZHRoKGljb25Gcm9tV2ViVmlldyksID09LCAxNik7CisgICAgZ19hc3NlcnRfY21wdWlu
dChjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoaWNvbkZyb21XZWJWaWV3KSwgPT0sIDE2
KTsKK30KKworc3RhdGljIHZvaWQgdGVzdEZhdmljb25EYXRhYmFzZShGYXZpY29uRGF0YWJhc2VU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIC8vIFRoZXNlIHRlc3RzIGRlcGVuZCBv
biB0aGlzIG9yZGVyIHRvIHJ1biBwcm9wZXJseSBzbyB3ZSBkZWNsYXJlIHRoZW0gaW4gYSBzaW5n
bGUgb25lLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTExNDM0LgorICAgIHRlc3ROb3RJbml0aWFsaXplZCh0ZXN0KTsKKyAgICB0ZXN0U2V0RGly
ZWN0b3J5KHRlc3QpOworICAgIHRlc3RHZXRGYXZpY29uKHRlc3QpOworICAgIHRlc3RHZXRGYXZp
Y29uVVJJKHRlc3QpOworICAgIHRlc3RXZWJWaWV3RmF2aWNvbih0ZXN0KTsKKyAgICB0ZXN0Q2xl
YXJEYXRhYmFzZSh0ZXN0KTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQoreworICAgIC8vIFN0YXJ0
IGEgc291cCBzZXJ2ZXIgZm9yIHRlc3RpbmcuCisgICAga1NlcnZlciA9IG5ldyBXZWJLaXRUZXN0
U2VydmVyKCk7CisgICAga1NlcnZlci0+cnVuKHNlcnZlckNhbGxiYWNrKTsKKworICAgIGtUZW1w
RGlyZWN0b3J5ID0gZ19kaXJfbWFrZV90bXAoIldlYktpdDJUZXN0cy1YWFhYWFgiLCAwKTsKKyAg
ICBnX2Fzc2VydChrVGVtcERpcmVjdG9yeSk7CisKKyAgICAvLyBBZGQgdGVzdHMgdG8gdGhlIHN1
aXRlLgorICAgIEZhdmljb25EYXRhYmFzZVRlc3Q6OmFkZCgiV2ViS2l0RmF2aWNvbkRhdGFiYXNl
IiwgImZhdmljb24tZGF0YWJhc2UtdGVzdCIsIHRlc3RGYXZpY29uRGF0YWJhc2UpOworfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRGYXZpY29uRGF0YWJhc2VGaW5hbGl6ZWRDYWxsYmFjayhncG9pbnRl
ciwgR09iamVjdCopCit7CisgICAgaWYgKCFnX2ZpbGVfdGVzdChrVGVtcERpcmVjdG9yeSwgR19G
SUxFX1RFU1RfSVNfRElSKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR093blB0cjxjaGFyPiBm
aWxlbmFtZShnX2J1aWxkX2ZpbGVuYW1lKGtUZW1wRGlyZWN0b3J5LCAiV2VicGFnZUljb25zLmRi
IiwgTlVMTCkpOworICAgIGdfdW5saW5rKGZpbGVuYW1lLmdldCgpKTsKKworICAgIGdfcm1kaXIo
a1RlbXBEaXJlY3RvcnkpOworfQorCit2b2lkIGFmdGVyQWxsKCkKK3sKKyAgICBkZWxldGUga1Nl
cnZlcjsKKworICAgIC8vIERlbGV0ZSB0aGUgdGVtcG9yYXJ5IGZpbGVzIGFmdGVyIHRoZSBJY29u
RGF0YWJhc2UgaGFzIGJlZW4KKyAgICAvLyBjbG9zZWQsIHRoYXQgaXMsIG9uY2UgV2ViS2l0RmF2
aWNvbkRhdGFiYXNlIGlzIGJlaW5nIGRlc3Ryb3llZC4KKyAgICBXZWJLaXRGYXZpY29uRGF0YWJh
c2UqIGRhdGFiYXNlID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNlKHdl
YmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpKTsKKyAgICBnX29iamVjdF93ZWFrX3JlZihH
X09CSkVDVChkYXRhYmFzZSksIHdlYmtpdEZhdmljb25EYXRhYmFzZUZpbmFsaXplZENhbGxiYWNr
LCAwKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0
ay9UZXN0V2ViS2l0RmluZENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxlci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uZDJlZWY0YwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0RmluZENvbnRyb2xsZXIuY3Bw
CkBAIC0wLDAgKzEsMzM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJMb2FkVHJhY2tpbmdUZXN0LmgiCisj
aW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgorI2luY2x1
ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKworc3RhdGljIGNvbnN0IGNoYXIqIHRlc3RTdHJp
bmcgPSAiPGh0bWw+PGJvZHk+Zmlyc3QgdGVzdGluZyBzZWNvbmQgdGVzdGluZyBzZWNvbmRIYWxm
PC9ib2R5PjwvaHRtbD4iOworCitjbGFzcyBGaW5kQ29udHJvbGxlclRlc3Q6IHB1YmxpYyBXZWJW
aWV3VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShGaW5kQ29udHJv
bGxlclRlc3QpOworCisgICAgRmluZENvbnRyb2xsZXJUZXN0KCkKKyAgICAgICAgOiBtX2ZpbmRD
b250cm9sbGVyKHdlYmtpdF93ZWJfdmlld19nZXRfZmluZF9jb250cm9sbGVyKG1fd2ViVmlldykp
CisgICAgICAgICwgbV9ydW5GaW5kVW50aWxDb21wbGV0aW9uKGZhbHNlKQorICAgIHsKKyAgICAg
ICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChtX2ZpbmRD
b250cm9sbGVyLmdldCgpKSk7CisgICAgfQorCisgICAgfkZpbmRDb250cm9sbGVyVGVzdCgpCisg
ICAgeworICAgICAgICBpZiAobV9maW5kQ29udHJvbGxlcikKKyAgICAgICAgICAgIGdfc2lnbmFs
X2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX2ZpbmRDb250cm9sbGVyLmdldCgpLCBHX1NJ
R05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKKyAgICB9CisKKyAgICB2b2lkIGZp
bmQoY29uc3QgY2hhciogc2VhcmNoVGV4dCwgZ3VpbnQzMiBmaW5kT3B0aW9ucywgZ3VpbnQgbWF4
TWF0Y2hDb3VudCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9maW5kQ29udHJv
bGxlci5nZXQoKSwgImZvdW5kLXRleHQiLCBHX0NBTExCQUNLKGZvdW5kVGV4dENhbGxiYWNrKSwg
dGhpcyk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9maW5kQ29udHJvbGxlci5nZXQoKSwg
ImZhaWxlZC10by1maW5kLXRleHQiLCBHX0NBTExCQUNLKGZhaWxlZFRvRmluZFRleHRDYWxsYmFj
ayksIHRoaXMpOworICAgICAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaChtX2ZpbmRD
b250cm9sbGVyLmdldCgpLCBzZWFyY2hUZXh0LCBmaW5kT3B0aW9ucywgbWF4TWF0Y2hDb3VudCk7
CisgICAgfQorCisgICAgdm9pZCBjb3VudChjb25zdCBjaGFyKiBzZWFyY2hUZXh0LCBndWludDMy
IGZpbmRPcHRpb25zLCBndWludCBtYXhNYXRjaENvdW50KQorICAgIHsKKyAgICAgICAgZ19zaWdu
YWxfY29ubmVjdChtX2ZpbmRDb250cm9sbGVyLmdldCgpLCAiY291bnRlZC1tYXRjaGVzIiwgR19D
QUxMQkFDSyhjb3VudGVkTWF0Y2hlc0NhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIHdlYmtpdF9m
aW5kX2NvbnRyb2xsZXJfY291bnRfbWF0Y2hlcyhtX2ZpbmRDb250cm9sbGVyLmdldCgpLCBzZWFy
Y2hUZXh0LCBmaW5kT3B0aW9ucywgbWF4TWF0Y2hDb3VudCk7CisgICAgfQorCisgICAgdm9pZCB3
YWl0VW50aWxGaW5kRmluaXNoZWQoKQorICAgIHsKKyAgICAgICAgbV9ydW5GaW5kVW50aWxDb21w
bGV0aW9uID0gdHJ1ZTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAg
IH0KKworICAgIEdSZWZQdHI8V2ViS2l0RmluZENvbnRyb2xsZXI+IG1fZmluZENvbnRyb2xsZXI7
CisgICAgYm9vbCBtX3RleHRGb3VuZDsKKyAgICB1bnNpZ25lZCBtX21hdGNoQ291bnQ7CisKK3By
aXZhdGU6CisgICAgYm9vbCBtX3J1bkZpbmRVbnRpbENvbXBsZXRpb247CisKKyAgICBzdGF0aWMg
dm9pZCBmb3VuZFRleHRDYWxsYmFjayhXZWJLaXRGaW5kQ29udHJvbGxlciosIGd1aW50IG1hdGNo
Q291bnQsIEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPm1f
dGV4dEZvdW5kID0gdHJ1ZTsKKyAgICAgICAgdGVzdC0+bV9tYXRjaENvdW50ID0gbWF0Y2hDb3Vu
dDsKKyAgICAgICAgaWYgKHRlc3QtPm1fcnVuRmluZFVudGlsQ29tcGxldGlvbikKKyAgICAgICAg
ICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7CisgICAgfQorCisgICAgc3Rh
dGljIHZvaWQgZmFpbGVkVG9GaW5kVGV4dENhbGxiYWNrKFdlYktpdEZpbmRDb250cm9sbGVyKiwg
RmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+bV90ZXh0Rm91
bmQgPSBmYWxzZTsKKyAgICAgICAgaWYgKHRlc3QtPm1fcnVuRmluZFVudGlsQ29tcGxldGlvbikK
KyAgICAgICAgICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7CisgICAgfQor
CisgICAgc3RhdGljIHZvaWQgY291bnRlZE1hdGNoZXNDYWxsYmFjayhXZWJLaXRGaW5kQ29udHJv
bGxlciosIGd1aW50IG1hdGNoQ291bnQsIEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCkKKyAgICB7
CisgICAgICAgIHRlc3QtPm1fbWF0Y2hDb3VudCA9IG1hdGNoQ291bnQ7CisgICAgICAgIGlmICh0
ZXN0LT5tX3J1bkZpbmRVbnRpbENvbXBsZXRpb24pCisgICAgICAgICAgICBnX21haW5fbG9vcF9x
dWl0KHRlc3QtPm1fbWFpbkxvb3ApOworICAgIH0KK307CisKK3N0YXRpYyB2b2lkIHRlc3RGaW5k
Q29udHJvbGxlclRleHRGb3VuZChGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwodGVzdFN0cmluZywgMCk7CisgICAgdGVzdC0+d2Fp
dFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5maW5kKCJ0ZXN0aW5nIiwgV0VCS0lU
X0ZJTkRfT1BUSU9OU19OT05FLCAxKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQo
KTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKK30KKworc3RhdGljIHZvaWQg
dGVzdEZpbmRDb250cm9sbGVyVGV4dE5vdEZvdW5kKEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0U3RyaW5nLCAwKTsKKyAg
ICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3QtPmZpbmQoIm5vdEZv
dW5kIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAxKTsKKyAgICB0ZXN0LT53YWl0VW50aWxG
aW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX3RleHRGb3VuZCk7Cit9CisK
K3N0YXRpYyB2b2lkIHRlc3RGaW5kQ29udHJvbGxlck1hdGNoQ291bnQoRmluZENvbnRyb2xsZXJU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRIdG1sKHRlc3RTdHJp
bmcsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+
ZmluZCgidGVzdGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwgMik7CisgICAgdGVzdC0+
d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX21hdGNoQ291
bnQgPT0gMik7CisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOworfQorCitzdGF0aWMg
dm9pZCB0ZXN0RmluZENvbnRyb2xsZXJNYXhNYXRjaENvdW50KEZpbmRDb250cm9sbGVyVGVzdCog
dGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0U3RyaW5nLCAw
KTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3QtPmZpbmQo
InRlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUsIDEpOworICAgIHRlc3QtPndhaXRV
bnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09
IEdfTUFYVUlOVCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOworfQorCitzdGF0
aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xsZXJOZXh0KEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0U3RyaW5nLCAwKTsKKyAg
ICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3QtPmZpbmQoInRlc3Rp
bmciLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUsIDIpOworICAgIHRlc3QtPndhaXRVbnRpbEZp
bmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOworICAgIGdf
YXNzZXJ0KHRlc3QtPm1fbWF0Y2hDb3VudCA9PSAyKTsKKworICAgIHdlYmtpdF9maW5kX2NvbnRy
b2xsZXJfc2VhcmNoX25leHQodGVzdC0+bV9maW5kQ29udHJvbGxlci5nZXQoKSk7CisgICAgdGVz
dC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRG
b3VuZCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09IDEpOworICAgIGdfYXNz
ZXJ0KCEod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfb3B0aW9ucyh0ZXN0LT5tX2ZpbmRDb250
cm9sbGVyLmdldCgpKSAmIFdFQktJVF9GSU5EX09QVElPTlNfQkFDS1dBUkRTKSk7CisKKyAgICB3
ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF9uZXh0KHRlc3QtPm1fZmluZENvbnRyb2xsZXIu
Z2V0KCkpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3Nl
cnQoIXRlc3QtPm1fdGV4dEZvdW5kKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX21hdGNoQ291bnQg
PT0gMSk7CisgICAgZ19hc3NlcnQoISh3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9vcHRpb25z
KHRlc3QtPm1fZmluZENvbnRyb2xsZXIuZ2V0KCkpICYgV0VCS0lUX0ZJTkRfT1BUSU9OU19CQUNL
V0FSRFMpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVyUHJldmlvdXMoRmlu
ZENvbnRyb2xsZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRI
dG1sKHRlc3RTdHJpbmcsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwor
CisgICAgdGVzdC0+ZmluZCgidGVzdGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwgMik7
CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCh0ZXN0
LT5tX21hdGNoQ291bnQgPT0gMik7CisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOwor
CisgICAgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfbmV4dCh0ZXN0LT5tX2ZpbmRDb250
cm9sbGVyLmdldCgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAg
IGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX21hdGNo
Q291bnQgPT0gMSk7CisgICAgZ19hc3NlcnQoISh3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9v
cHRpb25zKHRlc3QtPm1fZmluZENvbnRyb2xsZXIuZ2V0KCkpICYgV0VCS0lUX0ZJTkRfT1BUSU9O
U19CQUNLV0FSRFMpKTsKKworICAgIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX3ByZXZp
b3VzKHRlc3QtPm1fZmluZENvbnRyb2xsZXIuZ2V0KCkpOworICAgIHRlc3QtPndhaXRVbnRpbEZp
bmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOworICAgIGdf
YXNzZXJ0KHRlc3QtPm1fbWF0Y2hDb3VudCA9PSAxKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfZmlu
ZF9jb250cm9sbGVyX2dldF9vcHRpb25zKHRlc3QtPm1fZmluZENvbnRyb2xsZXIuZ2V0KCkpICYg
V0VCS0lUX0ZJTkRfT1BUSU9OU19CQUNLV0FSRFMpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0Rmlu
ZENvbnRyb2xsZXJDb3VudGVkTWF0Y2hlcyhGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25z
dHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwodGVzdFN0cmluZywgMCk7CisgICAgdGVz
dC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5jb3VudCgidGVzdGluZyIs
IFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwgMik7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZp
bmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX21hdGNoQ291bnQgPT0gMik7CisKKyAg
ICB0ZXN0LT5jb3VudCgiZmlyc3QiLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUsIDIpOworICAg
IHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQodGVzdC0+bV9t
YXRjaENvdW50ID09IDEpOworCisgICAgdGVzdC0+Y291bnQoIm5vdEZvdW5kIiwgV0VCS0lUX0ZJ
TkRfT1BUSU9OU19OT05FLCAyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsK
KworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX21hdGNoQ291bnQpOworfQorCitzdGF0aWMgdm9pZCB0
ZXN0RmluZENvbnRyb2xsZXJPcHRpb25zKEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0U3RyaW5nLCAwKTsKKyAgICB0ZXN0
LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3QtPmZpbmQoIlRlc3RpbmciLCBX
RUJLSVRfRklORF9PUFRJT05TX05PTkUsIDIpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5p
c2hlZCgpOworCisgICAgZ19hc3NlcnQoIXRlc3QtPm1fdGV4dEZvdW5kKTsKKworICAgIHRlc3Qt
PmZpbmQoIlRlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05TX0NBU0VfSU5TRU5TSVRJVkUsIDIp
OworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQodGVz
dC0+bV90ZXh0Rm91bmQpOworCisgICAgdGVzdC0+ZmluZCgiZXN0aW5nIiwgV0VCS0lUX0ZJTkRf
T1BUSU9OU19OT05FLCAyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKwor
ICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKKworICAgIHRlc3QtPmZpbmQoImVzdGlu
ZyIsIFdFQktJVF9GSU5EX09QVElPTlNfQVRfV09SRF9TVEFSVFMsIDIpOworICAgIHRlc3QtPndh
aXRVbnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQoIXRlc3QtPm1fdGV4dEZvdW5k
KTsKKworICAgIHRlc3QtPmZpbmQoIkhhbGYiLCBXRUJLSVRfRklORF9PUFRJT05TX0FUX1dPUkRf
U1RBUlRTLCAyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdf
YXNzZXJ0KCF0ZXN0LT5tX3RleHRGb3VuZCk7CisKKyAgICB0ZXN0LT5maW5kKCJIYWxmIiwgV0VC
S0lUX0ZJTkRfT1BUSU9OU19BVF9XT1JEX1NUQVJUUyB8IFdFQktJVF9GSU5EX09QVElPTlNfVFJF
QVRfTUVESUFMX0NBUElUQUxfQVNfV09SRF9TVEFSVCwgMik7CisgICAgdGVzdC0+d2FpdFVudGls
RmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7CisKKyAg
ICB0ZXN0LT5maW5kKCJ0ZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19XUkFQX0FST1VORCwg
Myk7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnQodGVz
dC0+bV90ZXh0Rm91bmQpOworCisgICAgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfbmV4
dCh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5k
RmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7CisKKyAgICB3ZWJr
aXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF9uZXh0KHRlc3QtPm1fZmluZENvbnRyb2xsZXIuZ2V0
KCkpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0KHRl
c3QtPm1fdGV4dEZvdW5kKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVySGlk
ZShGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+
bG9hZEh0bWwodGVzdFN0cmluZywgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVk
KCk7CisKKyAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKKworICAg
IGNhaXJvX3N1cmZhY2VfdCogb3JpZ2luYWxTdXJmYWNlID0gY2Fpcm9fc3VyZmFjZV9yZWZlcmVu
Y2UoCisgICAgICAgIHRlc3QtPmdldFNuYXBzaG90QW5kV2FpdFVudGlsUmVhZHkoV0VCS0lUX1NO
QVBTSE9UX1JFR0lPTl9GVUxMX0RPQ1VNRU5ULCBXRUJLSVRfU05BUFNIT1RfT1BUSU9OU19OT05F
KSk7CisgICAgZ19hc3NlcnQob3JpZ2luYWxTdXJmYWNlKTsKKworICAgIHRlc3QtPmZpbmQoInRl
c3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUsIDEpOworICAgIHRlc3QtPndhaXRVbnRp
bEZpbmRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKKworICAg
IGNhaXJvX3N1cmZhY2VfdCogaGlnaGxpZ2h0U3VyZmFjZSA9IGNhaXJvX3N1cmZhY2VfcmVmZXJl
bmNlKAorICAgICAgICB0ZXN0LT5nZXRTbmFwc2hvdEFuZFdhaXRVbnRpbFJlYWR5KFdFQktJVF9T
TkFQU0hPVF9SRUdJT05fRlVMTF9ET0NVTUVOVCwgV0VCS0lUX1NOQVBTSE9UX09QVElPTlNfTk9O
RSkpOworICAgIGdfYXNzZXJ0KGhpZ2hsaWdodFN1cmZhY2UpOworICAgIGdfYXNzZXJ0KCFUZXN0
OjpjYWlyb1N1cmZhY2VzRXF1YWwob3JpZ2luYWxTdXJmYWNlLCBoaWdobGlnaHRTdXJmYWNlKSk7
CisKKyAgICBXZWJLaXRGaW5kQ29udHJvbGxlciogZmluZENvbnRyb2xsZXIgPSB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X2ZpbmRfY29udHJvbGxlcih0ZXN0LT5tX3dlYlZpZXcpOworICAgIHdlYmtpdF9m
aW5kX2NvbnRyb2xsZXJfc2VhcmNoX2ZpbmlzaChmaW5kQ29udHJvbGxlcik7CisgICAgd2Via2l0
X3dlYl92aWV3X2V4ZWN1dGVfZWRpdGluZ19jb21tYW5kKHRlc3QtPm1fd2ViVmlldywgIlVuc2Vs
ZWN0Iik7CisKKyAgICBjYWlyb19zdXJmYWNlX3QqIHVuaGlnaGxpZ2h0U3VyZmFjZSA9IGNhaXJv
X3N1cmZhY2VfcmVmZXJlbmNlKAorICAgICAgICB0ZXN0LT5nZXRTbmFwc2hvdEFuZFdhaXRVbnRp
bFJlYWR5KFdFQktJVF9TTkFQU0hPVF9SRUdJT05fRlVMTF9ET0NVTUVOVCwgV0VCS0lUX1NOQVBT
SE9UX09QVElPTlNfTk9ORSkpOworICAgIGdfYXNzZXJ0KHVuaGlnaGxpZ2h0U3VyZmFjZSk7Cisg
ICAgZ19hc3NlcnQoVGVzdDo6Y2Fpcm9TdXJmYWNlc0VxdWFsKG9yaWdpbmFsU3VyZmFjZSwgdW5o
aWdobGlnaHRTdXJmYWNlKSk7CisKKyAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3kob3JpZ2luYWxT
dXJmYWNlKTsKKyAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koaGlnaGxpZ2h0U3VyZmFjZSk7Cisg
ICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KHVuaGlnaGxpZ2h0U3VyZmFjZSk7Cit9CisKK3N0YXRp
YyB2b2lkIHRlc3RGaW5kQ29udHJvbGxlckluc3RhbmNlKEZpbmRDb250cm9sbGVyVGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBXZWJLaXRGaW5kQ29udHJvbGxlciogZmluZENvbnRy
b2xsZXIxID0gd2Via2l0X3dlYl92aWV3X2dldF9maW5kX2NvbnRyb2xsZXIodGVzdC0+bV93ZWJW
aWV3KTsKKyAgICBXZWJLaXRGaW5kQ29udHJvbGxlciogZmluZENvbnRyb2xsZXIyID0gd2Via2l0
X3dlYl92aWV3X2dldF9maW5kX2NvbnRyb2xsZXIodGVzdC0+bV93ZWJWaWV3KTsKKworICAgIGdf
YXNzZXJ0KGZpbmRDb250cm9sbGVyMSA9PSBmaW5kQ29udHJvbGxlcjIpOworfQorCitzdGF0aWMg
dm9pZCB0ZXN0RmluZENvbnRyb2xsZXJHZXR0ZXJzKEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKK3sKKyAgICBjb25zdCBjaGFyKiBzZWFyY2hUZXh0ID0gInRlc3Rpbmci
OworICAgIGd1aW50IG1heE1hdGNoQ291bnQgPSAxOworICAgIGd1aW50MzIgZmluZE9wdGlvbnMg
PSBXRUJLSVRfRklORF9PUFRJT05TX1dSQVBfQVJPVU5EIHwgV0VCS0lUX0ZJTkRfT1BUSU9OU19B
VF9XT1JEX1NUQVJUUzsKKyAgICBXZWJLaXRGaW5kQ29udHJvbGxlciogZmluZENvbnRyb2xsZXIg
PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ZpbmRfY29udHJvbGxlcih0ZXN0LT5tX3dlYlZpZXcpOwor
CisgICAgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2goZmluZENvbnRyb2xsZXIsIHNlYXJj
aFRleHQsIGZpbmRPcHRpb25zLCBtYXhNYXRjaENvdW50KTsKKyAgICBnX2Fzc2VydCh3ZWJraXRf
ZmluZF9jb250cm9sbGVyX2dldF93ZWJfdmlldyhmaW5kQ29udHJvbGxlcikgPT0gdGVzdC0+bV93
ZWJWaWV3KTsKKyAgICBnX2Fzc2VydCghZ19zdHJjbXAwKHdlYmtpdF9maW5kX2NvbnRyb2xsZXJf
Z2V0X3NlYXJjaF90ZXh0KGZpbmRDb250cm9sbGVyKSwgc2VhcmNoVGV4dCkpOworICAgIGdfYXNz
ZXJ0KHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X21heF9tYXRjaF9jb3VudChmaW5kQ29udHJv
bGxlcikgPT0gbWF4TWF0Y2hDb3VudCk7CisgICAgZ19hc3NlcnQod2Via2l0X2ZpbmRfY29udHJv
bGxlcl9nZXRfb3B0aW9ucyhmaW5kQ29udHJvbGxlcikgPT0gZmluZE9wdGlvbnMpOworfQorCit2
b2lkIGJlZm9yZUFsbCgpCit7CisgICAgRmluZENvbnRyb2xsZXJUZXN0OjphZGQoIldlYktpdEZp
bmRDb250cm9sbGVyIiwgImdldHRlcnMiLCB0ZXN0RmluZENvbnRyb2xsZXJHZXR0ZXJzKTsKKyAg
ICBGaW5kQ29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIiLCAiaW5zdGFu
Y2UiLCB0ZXN0RmluZENvbnRyb2xsZXJJbnN0YW5jZSk7CisgICAgRmluZENvbnRyb2xsZXJUZXN0
OjphZGQoIldlYktpdEZpbmRDb250cm9sbGVyIiwgInRleHQtZm91bmQiLCB0ZXN0RmluZENvbnRy
b2xsZXJUZXh0Rm91bmQpOworICAgIEZpbmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5k
Q29udHJvbGxlciIsICJ0ZXh0LW5vdC1mb3VuZCIsIHRlc3RGaW5kQ29udHJvbGxlclRleHROb3RG
b3VuZCk7CisgICAgRmluZENvbnRyb2xsZXJUZXN0OjphZGQoIldlYktpdEZpbmRDb250cm9sbGVy
IiwgIm1hdGNoLWNvdW50IiwgdGVzdEZpbmRDb250cm9sbGVyTWF0Y2hDb3VudCk7CisgICAgRmlu
ZENvbnRyb2xsZXJUZXN0OjphZGQoIldlYktpdEZpbmRDb250cm9sbGVyIiwgIm1heC1tYXRjaC1j
b3VudCIsIHRlc3RGaW5kQ29udHJvbGxlck1heE1hdGNoQ291bnQpOworICAgIEZpbmRDb250cm9s
bGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udHJvbGxlciIsICJuZXh0IiwgdGVzdEZpbmRDb250
cm9sbGVyTmV4dCk7CisgICAgRmluZENvbnRyb2xsZXJUZXN0OjphZGQoIldlYktpdEZpbmRDb250
cm9sbGVyIiwgInByZXZpb3VzIiwgdGVzdEZpbmRDb250cm9sbGVyUHJldmlvdXMpOworICAgIEZp
bmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udHJvbGxlciIsICJjb3VudGVkLW1h
dGNoZXMiLCB0ZXN0RmluZENvbnRyb2xsZXJDb3VudGVkTWF0Y2hlcyk7CisgICAgRmluZENvbnRy
b2xsZXJUZXN0OjphZGQoIldlYktpdEZpbmRDb250cm9sbGVyIiwgIm9wdGlvbnMiLCB0ZXN0Rmlu
ZENvbnRyb2xsZXJPcHRpb25zKTsKKyAgICBGaW5kQ29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0
RmluZENvbnRyb2xsZXIiLCAiaGlkZSIsIHRlc3RGaW5kQ29udHJvbGxlckhpZGUpOworfQorCit2
b2lkIGFmdGVyQWxsKCkKK3sKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0UG9saWN5Q2xpZW50LmNwcCBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0UG9saWN5Q2xpZW50LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDllYTA0Ci0tLSAvZGV2L251bGwKKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRQb2xpY3lDbGll
bnQuY3BwCkBAIC0wLDAgKzEsMjY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxp
YSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkxvYWRUcmFja2luZ1Rlc3Qu
aCIKKyNpbmNsdWRlICJXZWJLaXRUZXN0U2VydmVyLmgiCisjaW5jbHVkZSA8d3RmL2dvYmplY3Qv
R1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworc3RhdGljIFdlYktp
dFRlc3RTZXJ2ZXIqIGtTZXJ2ZXI7CisKK2NsYXNzIFBvbGljeUNsaWVudFRlc3Q6IHB1YmxpYyBM
b2FkVHJhY2tpbmdUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFBv
bGljeUNsaWVudFRlc3QpOworCisgICAgZW51bSBQb2xpY3lEZWNpc2lvblJlc3BvbnNlIHsKKyAg
ICAgICAgVXNlLAorICAgICAgICBJZ25vcmUsCisgICAgICAgIERvd25sb2FkLAorICAgICAgICBO
b25lCisgICAgfTsKKworICAgIFBvbGljeUNsaWVudFRlc3QoKQorICAgICAgICA6IExvYWRUcmFj
a2luZ1Rlc3QoKQorICAgICAgICAsIG1fcG9saWN5RGVjaXNpb25SZXNwb25zZShOb25lKQorICAg
ICAgICAsIG1fcG9saWN5RGVjaXNpb25UeXBlRmlsdGVyKDApCisgICAgICAgICwgbV9yZXNwb25k
VG9Qb2xpY3lEZWNpc2lvbkFzeW5jaHJvbm91c2x5KGZhbHNlKQorICAgICAgICAsIG1faGFsdE1h
aW5Mb29wQWZ0ZXJNYWtpbmdEZWNpc2lvbihmYWxzZSkKKyAgICB7CisgICAgICAgIGdfc2lnbmFs
X2Nvbm5lY3QobV93ZWJWaWV3LCAiZGVjaWRlLXBvbGljeSIsIEdfQ0FMTEJBQ0soZGVjaWRlUG9s
aWN5Q2FsbGJhY2spLCB0aGlzKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gcXVpdE1h
aW5Mb29wTGF0ZXIoR01haW5Mb29wKiBsb29wKQorICAgIHsKKyAgICAgICAgZ19tYWluX2xvb3Bf
cXVpdChsb29wKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIHN0YXRpYyB2
b2lkIHJlc3BvbmRUb1BvbGljeURlY2lzaW9uKFBvbGljeUNsaWVudFRlc3QqIHRlc3QsIFdlYktp
dFBvbGljeURlY2lzaW9uKiBkZWNpc2lvbikKKyAgICB7CisgICAgICAgIHN3aXRjaCAodGVzdC0+
bV9wb2xpY3lEZWNpc2lvblJlc3BvbnNlKSB7CisgICAgICAgIGNhc2UgVXNlOgorICAgICAgICAg
ICAgd2Via2l0X3BvbGljeV9kZWNpc2lvbl91c2UoZGVjaXNpb24pOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgSWdub3JlOgorICAgICAgICAgICAgd2Via2l0X3BvbGljeV9kZWNp
c2lvbl9pZ25vcmUoZGVjaXNpb24pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
RG93bmxvYWQ6CisgICAgICAgICAgICB3ZWJraXRfcG9saWN5X2RlY2lzaW9uX2Rvd25sb2FkKGRl
Y2lzaW9uKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5vbmU6CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0ZXN0LT5tX2hhbHRNYWluTG9v
cEFmdGVyTWFraW5nRGVjaXNpb24pCisgICAgICAgICAgICBnX2lkbGVfYWRkKHJlaW50ZXJwcmV0
X2Nhc3Q8R1NvdXJjZUZ1bmM+KHF1aXRNYWluTG9vcExhdGVyKSwgdGVzdC0+bV9tYWluTG9vcCk7
CisgICAgfQorCisgICAgc3RhdGljIGdib29sZWFuIHJlc3BvbmRUb1BvbGljeURlY2lzaW9uTGF0
ZXIoUG9saWN5Q2xpZW50VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHJlc3BvbmRUb1BvbGlj
eURlY2lzaW9uKHRlc3QsIHRlc3QtPm1fcHJldmlvdXNQb2xpY3lEZWNpc2lvbi5nZXQoKSk7Cisg
ICAgICAgIHRlc3QtPm1fcHJldmlvdXNQb2xpY3lEZWNpc2lvbiA9IDA7CisgICAgICAgIHJldHVy
biBGQUxTRTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gZGVjaWRlUG9saWN5Q2FsbGJh
Y2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0UG9saWN5RGVjaXNpb24qIGRlY2lzaW9u
LCBXZWJLaXRQb2xpY3lEZWNpc2lvblR5cGUgdHlwZSwgUG9saWN5Q2xpZW50VGVzdCogdGVzdCkK
KyAgICB7CisgICAgICAgIGlmICh0ZXN0LT5tX3BvbGljeURlY2lzaW9uVHlwZUZpbHRlciAhPSB0
eXBlKQorICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgICAgIHRlc3QtPm1fcHJldmlv
dXNQb2xpY3lEZWNpc2lvbiA9IGRlY2lzaW9uOworICAgICAgICBpZiAodGVzdC0+bV9yZXNwb25k
VG9Qb2xpY3lEZWNpc2lvbkFzeW5jaHJvbm91c2x5KSB7CisgICAgICAgICAgICBnX2lkbGVfYWRk
KHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHJlc3BvbmRUb1BvbGljeURlY2lzaW9uTGF0
ZXIpLCB0ZXN0KTsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisKKyAgICAg
ICAgcmVzcG9uZFRvUG9saWN5RGVjaXNpb24odGVzdCwgZGVjaXNpb24pOworCisgICAgICAgIC8v
IFdlIHJldHVybiBGQUxTRSBoZXJlIHRvIGVuc3VyZSB0aGF0IHRoZSBkZWZhdWx0IHBvbGljeSBk
ZWNpc2lvbgorICAgICAgICAvLyBoYW5kbGVyIGRvZXNuJ3Qgb3ZlcnJpZGUgd2hhdGV2ZXIgd2Ug
dXNlIGhlcmUuCisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBQb2xpY3lEZWNp
c2lvblJlc3BvbnNlIG1fcG9saWN5RGVjaXNpb25SZXNwb25zZTsKKyAgICBpbnQgbV9wb2xpY3lE
ZWNpc2lvblR5cGVGaWx0ZXI7CisgICAgYm9vbCBtX3Jlc3BvbmRUb1BvbGljeURlY2lzaW9uQXN5
bmNocm9ub3VzbHk7CisgICAgYm9vbCBtX2hhbHRNYWluTG9vcEFmdGVyTWFraW5nRGVjaXNpb247
CisgICAgR1JlZlB0cjxXZWJLaXRQb2xpY3lEZWNpc2lvbj4gbV9wcmV2aW91c1BvbGljeURlY2lz
aW9uOworfTsKKworc3RhdGljIHZvaWQgdGVzdE5hdmlnYXRpb25Qb2xpY3koUG9saWN5Q2xpZW50
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5tX3BvbGljeURlY2lzaW9u
VHlwZUZpbHRlciA9IFdFQktJVF9QT0xJQ1lfREVDSVNJT05fVFlQRV9OQVZJR0FUSU9OX0FDVElP
TjsKKworICAgIHRlc3QtPm1fcG9saWN5RGVjaXNpb25SZXNwb25zZSA9IFBvbGljeUNsaWVudFRl
c3Q6OlVzZTsKKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWwvPiIsICJodHRwOi8vd2Via2l0Z3Rr
Lm9yZy8iKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0sIDMpOworCisgICAgLy8gSWRl
YWxseSB3ZSdkIGxpa2UgdG8gaGF2ZSBhIG1vcmUgaW50ZW5zaXZlIHRlc3QgaGVyZSwgYnV0IGl0
J3Mgc3RpbGwgcHJldHR5IHRyaWNreQorICAgIC8vIHRvIHRyaWdnZXIgZGlmZmVyZW50IHR5cGVz
IG9mIG5hdmlnYXRpb25zIHdpdGggdGhlIEdUSysgV2ViS2l0MiBBUEkuCisgICAgV2ViS2l0TmF2
aWdhdGlvblBvbGljeURlY2lzaW9uKiBkZWNpc2lvbiA9IFdFQktJVF9OQVZJR0FUSU9OX1BPTElD
WV9ERUNJU0lPTih0ZXN0LT5tX3ByZXZpb3VzUG9saWN5RGVjaXNpb24uZ2V0KCkpOworICAgIGdf
YXNzZXJ0X2NtcGludCh3ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0X25hdmln
YXRpb25fdHlwZShkZWNpc2lvbiksID09LCBXRUJLSVRfTkFWSUdBVElPTl9UWVBFX09USEVSKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dl
dF9tb3VzZV9idXR0b24oZGVjaXNpb24pLCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21waW50KHdl
YmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRfbW9kaWZpZXJzKGRlY2lzaW9uKSwg
PT0sIDApOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVj
aXNpb25fZ2V0X2ZyYW1lX25hbWUoZGVjaXNpb24pLCA9PSwgMCk7CisgICAgV2ViS2l0VVJJUmVx
dWVzdCogcmVxdWVzdCA9IHdlYmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRfcmVx
dWVzdChkZWNpc2lvbik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF91cmlfcmVxdWVzdF9n
ZXRfdXJpKHJlcXVlc3QpLCA9PSwgImh0dHA6Ly93ZWJraXRndGsub3JnLyIpOworCisgICAgdGVz
dC0+bV9wb2xpY3lEZWNpc2lvblJlc3BvbnNlID0gUG9saWN5Q2xpZW50VGVzdDo6VXNlOworICAg
IHRlc3QtPm1fcmVzcG9uZFRvUG9saWN5RGVjaXNpb25Bc3luY2hyb25vdXNseSA9IHRydWU7Cisg
ICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sLz4iLCAiaHR0cDovL3dlYmtpdGd0ay5vcmcvIik7Cisg
ICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnRfY21waW50KHRl
c3QtPm1fbG9hZEV2ZW50cy5zaXplKCksID09LCAzKTsKKworICAgIC8vIElmIHdlIGFyZSB3YWl0
aW5nIHVudGlsIGxvYWQgY29tcGxldGlvbiwgaXQgd2lsbCBuZXZlciBjb21wbGV0ZSBpZiB3ZSBp
Z25vcmUgdGhlCisgICAgLy8gbmF2aWdhdGlvbi4gU28gd2UgdGVsbCB0aGUgbWFpbiBsb29wIHRv
IHF1aXQgc29tZXRpbWUgbGF0ZXIuCisgICAgdGVzdC0+bV9wb2xpY3lEZWNpc2lvblJlc3BvbnNl
ID0gUG9saWN5Q2xpZW50VGVzdDo6SWdub3JlOworICAgIHRlc3QtPm1fcmVzcG9uZFRvUG9saWN5
RGVjaXNpb25Bc3luY2hyb25vdXNseSA9IGZhbHNlOworICAgIHRlc3QtPm1faGFsdE1haW5Mb29w
QWZ0ZXJNYWtpbmdEZWNpc2lvbiA9IHRydWU7CisgICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sLz4i
LCAiaHR0cDovL3dlYmtpdGd0ay5vcmcvIik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlz
aGVkKCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50cy5zaXplKCksID09
LCAwKTsKKworICAgIHRlc3QtPm1fcG9saWN5RGVjaXNpb25SZXNwb25zZSA9IFBvbGljeUNsaWVu
dFRlc3Q6Oklnbm9yZTsKKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWwvPiIsICJodHRwOi8vd2Vi
a2l0Z3RrLm9yZy8iKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0sIDApOworfQorCitz
dGF0aWMgdm9pZCB0ZXN0UmVzcG9uc2VQb2xpY3koUG9saWN5Q2xpZW50VGVzdCogdGVzdCwgZ2Nv
bnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5tX3BvbGljeURlY2lzaW9uVHlwZUZpbHRlciA9IFdF
QktJVF9QT0xJQ1lfREVDSVNJT05fVFlQRV9SRVNQT05TRTsKKworICAgIHRlc3QtPm1fcG9saWN5
RGVjaXNpb25SZXNwb25zZSA9IFBvbGljeUNsaWVudFRlc3Q6OlVzZTsKKyAgICB0ZXN0LT5sb2Fk
VVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi8iKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRV
bnRpbExvYWRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVu
dHMuc2l6ZSgpLCA9PSwgMyk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50
c1swXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOworICAg
IGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdU
ZXN0OjpMb2FkQ29tbWl0dGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZl
bnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKKworICAgIFdlYktp
dFJlc3BvbnNlUG9saWN5RGVjaXNpb24qIGRlY2lzaW9uID0gV0VCS0lUX1JFU1BPTlNFX1BPTElD
WV9ERUNJU0lPTih0ZXN0LT5tX3ByZXZpb3VzUG9saWN5RGVjaXNpb24uZ2V0KCkpOworICAgIFdl
YktpdFVSSVJlcXVlc3QqIHJlcXVlc3QgPSB3ZWJraXRfcmVzcG9uc2VfcG9saWN5X2RlY2lzaW9u
X2dldF9yZXF1ZXN0KGRlY2lzaW9uKTsKKyAgICBnX2Fzc2VydChXRUJLSVRfSVNfVVJJX1JFUVVF
U1QocmVxdWVzdCkpOworICAgIEFTU0VSVF9DTVBfQ1NUUklORyh3ZWJraXRfdXJpX3JlcXVlc3Rf
Z2V0X3VyaShyZXF1ZXN0KSwgPT0sIGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi8iKSk7CisgICAg
V2ViS2l0VVJJUmVzcG9uc2UqIHJlc3BvbnNlID0gd2Via2l0X3Jlc3BvbnNlX3BvbGljeV9kZWNp
c2lvbl9nZXRfcmVzcG9uc2UoZGVjaXNpb24pOworICAgIGdfYXNzZXJ0KFdFQktJVF9JU19VUklf
UkVTUE9OU0UocmVzcG9uc2UpKTsKKyAgICBBU1NFUlRfQ01QX0NTVFJJTkcod2Via2l0X3VyaV9y
ZXNwb25zZV9nZXRfdXJpKHJlc3BvbnNlKSwgPT0sIGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi8i
KSk7CisgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2Nhbl9zaG93X21pbWVfdHlwZSh0ZXN0
LT5tX3dlYlZpZXcsIHdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0X21pbWVfdHlwZShyZXNwb25zZSkp
ID09CisgICAgICAgIHdlYmtpdF9yZXNwb25zZV9wb2xpY3lfZGVjaXNpb25faXNfbWltZV90eXBl
X3N1cHBvcnRlZChkZWNpc2lvbikpOworCisgICAgdGVzdC0+bV9yZXNwb25kVG9Qb2xpY3lEZWNp
c2lvbkFzeW5jaHJvbm91c2x5ID0gdHJ1ZTsKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdl
dFVSSUZvclBhdGgoIi8iKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hl
ZCgpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHMuc2l6ZSgpLCA9PSwg
Myk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1swXSwgPT0sIExvYWRU
cmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGlu
dCh0ZXN0LT5tX2xvYWRFdmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkQ29tbWl0
dGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzJdLCA9PSwgTG9h
ZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKKworICAgIHRlc3QtPm1fcmVzcG9uZFRvUG9s
aWN5RGVjaXNpb25Bc3luY2hyb25vdXNseSA9IGZhbHNlOworICAgIHRlc3QtPm1fcG9saWN5RGVj
aXNpb25SZXNwb25zZSA9IFBvbGljeUNsaWVudFRlc3Q6Oklnbm9yZTsKKyAgICB0ZXN0LT5sb2Fk
VVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi8iKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRV
bnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2
ZW50cy5zaXplKCksID09LCAzKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZl
bnRzWzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7Cisg
ICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2lu
Z1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZEZhaWxlZCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3Qt
Pm1fbG9hZEV2ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7Cit9
CisKK3N0cnVjdCBDcmVhdGVDYWxsYmFja0RhdGEgeworICAgIGJvb2wgdHJpZWRUb09wZW5XaW5k
b3c7CisgICAgR01haW5Mb29wKiBtYWluTG9vcDsKK307CisKK3N0YXRpYyBXZWJLaXRXZWJWaWV3
KiBjcmVhdGVDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBDcmVhdGVDYWxsYmFja0Rh
dGEqIGRhdGEpCit7CisgICAgZGF0YS0+dHJpZWRUb09wZW5XaW5kb3cgPSB0cnVlOworICAgIGdf
bWFpbl9sb29wX3F1aXQoZGF0YS0+bWFpbkxvb3ApOworICAgIHJldHVybiAwOworfQorCitzdGF0
aWMgdm9pZCB0ZXN0TmV3V2luZG93UG9saWN5KFBvbGljeUNsaWVudFRlc3QqIHRlc3QsIGdjb25z
dHBvaW50ZXIpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHdpbmRvd09wZW5pbmdIVE1MID0K
KyAgICAgICAgIjxodG1sPjxib2R5PiIKKyAgICAgICAgIiAgICA8YSBpZD1cImxpbmtcIiBocmVm
PVwiaHR0cDovL3d3dy5nb29nbGUuY29tXCIgdGFyZ2V0PVwiX2JsYW5rXCI+TGluazwvYT4iCisg
ICAgICAgICIgICAgPHNjcmlwdD4iCisgICAgICAgICIgICAgICAgIHZhciBldmVudCA9IGRvY3Vt
ZW50LmNyZWF0ZUV2ZW50KCdNb3VzZUV2ZW50cycpOyIKKyAgICAgICAgIiAgICAgICAgZXZlbnQu
aW5pdEV2ZW50KCdjbGljaycsIHRydWUsIGZhbHNlKTsiCisgICAgICAgICIgICAgICAgIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCdsaW5rJykuZGlzcGF0Y2hFdmVudChldmVudCk7IgorICAgICAg
ICAiICAgIDwvc2NyaXB0PiIKKyAgICAgICAgIjwvYm9keT48L2h0bWw+IjsKKyAgICB0ZXN0LT5t
X3BvbGljeURlY2lzaW9uVHlwZUZpbHRlciA9IFdFQktJVF9QT0xJQ1lfREVDSVNJT05fVFlQRV9O
RVdfV0lORE9XX0FDVElPTjsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2phdmFzY3JpcHRfY2Fu
X29wZW5fd2luZG93c19hdXRvbWF0aWNhbGx5KHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mo
dGVzdC0+bV93ZWJWaWV3KSwgVFJVRSk7CisKKyAgICBDcmVhdGVDYWxsYmFja0RhdGEgZGF0YTsK
KyAgICBkYXRhLnRyaWVkVG9PcGVuV2luZG93ID0gZmFsc2U7CisgICAgZGF0YS5tYWluTG9vcCA9
IHRlc3QtPm1fbWFpbkxvb3A7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHRlc3QtPm1fd2ViVmll
dywgImNyZWF0ZSIsIEdfQ0FMTEJBQ0soY3JlYXRlQ2FsbGJhY2spLCAmZGF0YSk7CisgICAgdGVz
dC0+bV9wb2xpY3lEZWNpc2lvblJlc3BvbnNlID0gUG9saWN5Q2xpZW50VGVzdDo6VXNlOworICAg
IHRlc3QtPmxvYWRIdG1sKHdpbmRvd09wZW5pbmdIVE1MLCAiaHR0cDovL3dlYmtpdGd0ay5vcmcv
Iik7CisgICAgdGVzdC0+d2FpdCgxKTsKKyAgICBnX2Fzc2VydChkYXRhLnRyaWVkVG9PcGVuV2lu
ZG93KTsKKworICAgIFdlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbiogZGVjaXNpb24gPSBX
RUJLSVRfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJT04odGVzdC0+bV9wcmV2aW91c1BvbGljeURl
Y2lzaW9uLmdldCgpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X25hdmlnYXRpb25fcG9s
aWN5X2RlY2lzaW9uX2dldF9mcmFtZV9uYW1lKGRlY2lzaW9uKSwgPT0sICJfYmxhbmsiKTsKKwor
ICAgIC8vIFVzaW5nIGEgc2hvcnQgdGltZW91dCBpcyBhIGJpdCB1Z2x5IGhlcmUsIGJ1dCBpdCdz
IGhhcmQgdG8gZ2V0IGFyb3VuZCBiZWNhdXNlIGlmIHdlIGJsb2NrCisgICAgLy8gdGhlIG5ldyB3
aW5kb3cgc2lnbmFsIHdlIGNhbm5vdCBoYWx0IHRoZSBtYWluIGxvb3AgaW4gdGhlIGNyZWF0ZSBj
YWxsYmFjay4gSWYgd2UKKyAgICAvLyBoYWx0IHRoZSBtYWluIGxvb3AgaW4gdGhlIHBvbGljeSBk
ZWNpc2lvbiwgdGhlIGNyZWF0ZSBjYWxsYmFjayBuZXZlciBleGVjdXRlcy4KKyAgICBkYXRhLnRy
aWVkVG9PcGVuV2luZG93ID0gZmFsc2U7CisgICAgdGVzdC0+bV9wb2xpY3lEZWNpc2lvblJlc3Bv
bnNlID0gUG9saWN5Q2xpZW50VGVzdDo6SWdub3JlOworICAgIHRlc3QtPmxvYWRIdG1sKHdpbmRv
d09wZW5pbmdIVE1MLCAiaHR0cDovL3dlYmtpdGd0ay5vcmcvIik7CisgICAgdGVzdC0+d2FpdCgu
Mik7CisgICAgZ19hc3NlcnQoIWRhdGEudHJpZWRUb09wZW5XaW5kb3cpOworfQorCitzdGF0aWMg
dm9pZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtZXNz
YWdlLCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiwgU291cENsaWVudENvbnRleHQqLCBn
cG9pbnRlcikKK3sKKyAgICBpZiAobWVzc2FnZS0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkg
eworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19O
T1RfSU1QTEVNRU5URUQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGdfc3Ry
X2VxdWFsKHBhdGgsICIvIikpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHJlc3BvbnNl
U3RyaW5nID0gIjxodG1sPjxib2R5PlRlc3RpbmchPC9ib2R5PjwvaHRtbD4iOworICAgICAgICBz
b3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7CisgICAgICAg
IHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01F
TU9SWV9TVEFUSUMsIHJlc3BvbnNlU3RyaW5nLCBzdHJsZW4ocmVzcG9uc2VTdHJpbmcpKTsKKyAg
ICAgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7
CisgICAgfSBlbHNlCisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNP
VVBfU1RBVFVTX05PVF9GT1VORCk7Cit9CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICBrU2Vy
dmVyID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIoKTsKKyAgICBrU2VydmVyLT5ydW4oc2VydmVyQ2Fs
bGJhY2spOworCisgICAgUG9saWN5Q2xpZW50VGVzdDo6YWRkKCJXZWJLaXRQb2xpY3lDbGllbnQi
LCAibmF2aWdhdGlvbi1wb2xpY3kiLCB0ZXN0TmF2aWdhdGlvblBvbGljeSk7CisgICAgUG9saWN5
Q2xpZW50VGVzdDo6YWRkKCJXZWJLaXRQb2xpY3lDbGllbnQiLCAicmVzcG9uc2UtcG9saWN5Iiwg
dGVzdFJlc3BvbnNlUG9saWN5KTsKKyAgICBQb2xpY3lDbGllbnRUZXN0OjphZGQoIldlYktpdFBv
bGljeUNsaWVudCIsICJuZXctd2luZG93LXBvbGljeSIsIHRlc3ROZXdXaW5kb3dQb2xpY3kpOwor
fQorCit2b2lkIGFmdGVyQWxsKCkKK3sKKyAgICBkZWxldGUga1NlcnZlcjsKK30KZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0U2V0dGlu
Z3MuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRT
ZXR0aW5ncy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFkMzAxOAot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9U
ZXN0V2ViS2l0U2V0dGluZ3MuY3BwCkBAIC0wLDAgKzEsMzcwIEBACisvKgorICogQ29weXJpZ2h0
IChjKSAyMDExIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIAorICogYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5v
dGljZSwgCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICoKKyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciAKKyAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogTmVpdGhlciB0aGUgbmFtZSBvZiBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IAorICogYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCAK
KyAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
IAorICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIAorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVS
IE9SIAorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCAKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiAKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyAKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyAKKyAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlRlc3RNYWluLmgiCisjaW5j
bHVkZSAiV2ViVmlld1Rlc3QuaCIKKyNpbmNsdWRlICJXZWJLaXRUZXN0U2VydmVyLmgiCisjaW5j
bHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgorI2luY2x1ZGUg
PHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKworc3RhdGljIFdlYktpdFRlc3RTZXJ2ZXIqIGdTZXJ2
ZXI7CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJLaXRTZXR0aW5ncyhUZXN0KiwgZ2NvbnN0cG9pbnRl
cikKK3sKKyAgICBXZWJLaXRTZXR0aW5ncyogc2V0dGluZ3MgPSB3ZWJraXRfc2V0dGluZ3NfbmV3
KCk7CisKKyAgICAvLyBKYXZhU2NyaXB0IGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4KKyAgICBnX2Fz
c2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9qYXZhc2NyaXB0KHNldHRpbmdzKSk7Cisg
ICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfamF2YXNjcmlwdChzZXR0aW5ncywgRkFMU0Up
OworICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9qYXZhc2NyaXB0KHNl
dHRpbmdzKSk7CisKKyAgICAvLyBCeSBkZWZhdWx0IGF1dG8tbG9hZC1pbWFnZSBpcyB0cnVlLgor
ICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfYXV0b19sb2FkX2ltYWdlcyhzZXR0aW5n
cykpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfYXV0b19sb2FkX2ltYWdlcyhzZXR0aW5ncywg
RkFMU0UpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2F1dG9fbG9hZF9pbWFn
ZXMoc2V0dGluZ3MpKTsKKworICAgIC8vIGxvYWQtaWNvbnMtaWdub3JpbmctaW1hZ2UtbG9hZC1z
ZXR0aW5nIGlzIGZhbHNlIGJ5IGRlZmF1bHQuCisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5n
c19nZXRfbG9hZF9pY29uc19pZ25vcmluZ19pbWFnZV9sb2FkX3NldHRpbmcoc2V0dGluZ3MpKTsK
KyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2xvYWRfaWNvbnNfaWdub3JpbmdfaW1hZ2VfbG9hZF9z
ZXR0aW5nKHNldHRpbmdzLCBUUlVFKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0
X2xvYWRfaWNvbnNfaWdub3JpbmdfaW1hZ2VfbG9hZF9zZXR0aW5nKHNldHRpbmdzKSk7CisgICAg
CisgICAgLy8gT2ZmbGluZSBhcHBsaWNhdGlvbiBjYWNoZSBpcyB0cnVlIGJ5IGRlZmF1bHQuCisg
ICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfb2ZmbGluZV93ZWJfYXBwbGlj
YXRpb25fY2FjaGUoc2V0dGluZ3MpKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9v
ZmZsaW5lX3dlYl9hcHBsaWNhdGlvbl9jYWNoZShzZXR0aW5ncywgRkFMU0UpOworICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9vZmZsaW5lX3dlYl9hcHBsaWNhdGlvbl9j
YWNoZShzZXR0aW5ncykpOworCisgICAgLy8gTG9jYWwgc3RvcmFnZSBpcyBlbmFibGUgYnkgZGVm
YXVsdC4KKyAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9odG1sNV9sb2Nh
bF9zdG9yYWdlKHNldHRpbmdzKSk7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfaHRt
bDVfbG9jYWxfc3RvcmFnZShzZXR0aW5ncywgRkFMU0UpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRf
c2V0dGluZ3NfZ2V0X2VuYWJsZV9odG1sNV9sb2NhbF9zdG9yYWdlKHNldHRpbmdzKSk7CisKKyAg
ICAvLyBIVE1MNSBkYXRhYmFzZSBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCisgICAgZ19hc3NlcnQo
d2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfaHRtbDVfZGF0YWJhc2Uoc2V0dGluZ3MpKTsKKyAg
ICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9odG1sNV9kYXRhYmFzZShzZXR0aW5ncywgRkFM
U0UpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9odG1sNV9kYXRh
YmFzZShzZXR0aW5ncykpOworCisgICAgLy8gWFNTIEF1ZGl0b3IgaXMgZW5hYmxlZCBieSBkZWZh
dWx0LgorICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3hzc19hdWRpdG9y
KHNldHRpbmdzKSk7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfeHNzX2F1ZGl0b3Io
c2V0dGluZ3MsIEZBTFNFKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFi
bGVfeHNzX2F1ZGl0b3Ioc2V0dGluZ3MpKTsKKworICAgIC8vIEZyYW1lIGZsYXR0ZW5pbmcgaXMg
ZGlzYWJsZWQgYnkgZGVmYXVsdC4KKyAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9l
bmFibGVfZnJhbWVfZmxhdHRlbmluZyhzZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5nc19z
ZXRfZW5hYmxlX2ZyYW1lX2ZsYXR0ZW5pbmcoc2V0dGluZ3MsIFRSVUUpOworICAgIGdfYXNzZXJ0
KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2ZyYW1lX2ZsYXR0ZW5pbmcoc2V0dGluZ3MpKTsK
KworICAgIC8vIFBsdWdpbnMgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdC4KKyAgICBnX2Fzc2VydCh3
ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9wbHVnaW5zKHNldHRpbmdzKSk7CisgICAgd2Via2l0
X3NldHRpbmdzX3NldF9lbmFibGVfcGx1Z2lucyhzZXR0aW5ncywgRkFMU0UpOworICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9wbHVnaW5zKHNldHRpbmdzKSk7CisKKyAg
ICAvLyBKYXZhIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4KKyAgICBnX2Fzc2VydCh3ZWJraXRfc2V0
dGluZ3NfZ2V0X2VuYWJsZV9qYXZhKHNldHRpbmdzKSk7CisgICAgd2Via2l0X3NldHRpbmdzX3Nl
dF9lbmFibGVfamF2YShzZXR0aW5ncywgRkFMU0UpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0
dGluZ3NfZ2V0X2VuYWJsZV9qYXZhKHNldHRpbmdzKSk7CisKKyAgICAvLyBCeSBkZWZhdWx0LCBK
YXZhU2NyaXB0IGNhbiBvcGVuIHdpbmRvd3MgYXV0b21hdGljYWxseSBpcyBkaXNhYmxlZC4KKyAg
ICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9qYXZhc2NyaXB0X2Nhbl9vcGVuX3dpbmRv
d3NfYXV0b21hdGljYWxseShzZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfamF2
YXNjcmlwdF9jYW5fb3Blbl93aW5kb3dzX2F1dG9tYXRpY2FsbHkoc2V0dGluZ3MsIFRSVUUpOwor
ICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfamF2YXNjcmlwdF9jYW5fb3Blbl93aW5k
b3dzX2F1dG9tYXRpY2FsbHkoc2V0dGluZ3MpKTsKKworICAgIC8vIEJ5IGRlZmF1bHQgaHlwZXIg
bGluayBhdWRpdGluZyBpcyBkaXNhYmxlZC4KKyAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdz
X2dldF9lbmFibGVfaHlwZXJsaW5rX2F1ZGl0aW5nKHNldHRpbmdzKSk7CisgICAgd2Via2l0X3Nl
dHRpbmdzX3NldF9lbmFibGVfaHlwZXJsaW5rX2F1ZGl0aW5nKHNldHRpbmdzLCBUUlVFKTsKKyAg
ICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9oeXBlcmxpbmtfYXVkaXRpbmco
c2V0dGluZ3MpKTsKKworICAgIC8vIERlZmF1bHQgZm9udCBmYW1pbHkgaXMgInNhbnMtc2VyaWYi
LgorICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2V0dGluZ3NfZ2V0X2RlZmF1bHRfZm9udF9m
YW1pbHkoc2V0dGluZ3MpLCA9PSwgInNhbnMtc2VyaWYiKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nf
c2V0X2RlZmF1bHRfZm9udF9mYW1pbHkoc2V0dGluZ3MsICJtb25vc3BhY2UiKTsKKyAgICBnX2Fz
c2VydF9jbXBzdHIod2Via2l0X3NldHRpbmdzX2dldF9kZWZhdWx0X2ZvbnRfZmFtaWx5KHNldHRp
bmdzKSwgPT0sICJtb25vc3BhY2UiKTsKKworICAgIC8vIERlZmF1bHQgbW9ub3NwYWNlIGZvbnQg
ZmFtaWx5IGZvbnQgZmFtaWx5IGlzICJtb25vc3BhY2UiLgorICAgIGdfYXNzZXJ0X2NtcHN0cih3
ZWJraXRfc2V0dGluZ3NfZ2V0X21vbm9zcGFjZV9mb250X2ZhbWlseShzZXR0aW5ncyksID09LCAi
bW9ub3NwYWNlIik7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9tb25vc3BhY2VfZm9udF9mYW1p
bHkoc2V0dGluZ3MsICJzYW5zLXNlcmlmIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9z
ZXR0aW5nc19nZXRfbW9ub3NwYWNlX2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJzYW5zLXNl
cmlmIik7CisKKyAgICAvLyBEZWZhdWx0IHNlcmlmIGZvbnQgZmFtaWx5IGlzICJzZXJpZiIuCisg
ICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zZXR0aW5nc19nZXRfc2VyaWZfZm9udF9mYW1pbHko
c2V0dGluZ3MpLCA9PSwgInNlcmlmIik7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9zZXJpZl9m
b250X2ZhbWlseShzZXR0aW5ncywgInNhbnMtc2VyaWYiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIo
d2Via2l0X3NldHRpbmdzX2dldF9zZXJpZl9mb250X2ZhbWlseShzZXR0aW5ncyksID09LCAic2Fu
cy1zZXJpZiIpOworCisgICAgLy8gRGVmYXVsdCBzYW5zIHNlcmlmIGZvbnQgZmFtaWx5IGlzICJz
YW5zLXNlcmlmIi4KKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NldHRpbmdzX2dldF9zYW5z
X3NlcmlmX2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJzYW5zLXNlcmlmIik7CisgICAgd2Vi
a2l0X3NldHRpbmdzX3NldF9zYW5zX3NlcmlmX2ZvbnRfZmFtaWx5KHNldHRpbmdzLCAic2VyaWYi
KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NldHRpbmdzX2dldF9zYW5zX3NlcmlmX2Zv
bnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJzZXJpZiIpOworCisgICAgLy8gRGVmYXVsdCBjdXJz
aXZlIGZvbnQgZmFtaWx5ICJzZXJpZiIuCisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zZXR0
aW5nc19nZXRfY3Vyc2l2ZV9mb250X2ZhbWlseShzZXR0aW5ncyksID09LCAic2VyaWYiKTsKKyAg
ICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2N1cnNpdmVfZm9udF9mYW1pbHkoc2V0dGluZ3MsICJzYW5z
LXNlcmlmIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zZXR0aW5nc19nZXRfY3Vyc2l2
ZV9mb250X2ZhbWlseShzZXR0aW5ncyksID09LCAic2Fucy1zZXJpZiIpOworCisgICAgLy8gRGVm
YXVsdCBmYW50YXN5IGZvbnQgZmFtaWx5IGlzICJzZXJpZiIuCisgICAgZ19hc3NlcnRfY21wc3Ry
KHdlYmtpdF9zZXR0aW5nc19nZXRfZmFudGFzeV9mb250X2ZhbWlseShzZXR0aW5ncyksID09LCAi
c2VyaWYiKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2ZhbnRhc3lfZm9udF9mYW1pbHkoc2V0
dGluZ3MsICJzYW5zLXNlcmlmIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zZXR0aW5n
c19nZXRfZmFudGFzeV9mb250X2ZhbWlseShzZXR0aW5ncyksID09LCAic2Fucy1zZXJpZiIpOwor
CisgICAgLy8gRGVmYXVsdCBwaWN0b2dyYXBoIGZvbnQgZmFtaWx5IGlzICJzZXJpZiIuCisgICAg
Z19hc3NlcnRfY21wc3RyKHdlYmtpdF9zZXR0aW5nc19nZXRfcGljdG9ncmFwaF9mb250X2ZhbWls
eShzZXR0aW5ncyksID09LCAic2VyaWYiKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X3BpY3Rv
Z3JhcGhfZm9udF9mYW1pbHkoc2V0dGluZ3MsICJzYW5zLXNlcmlmIik7CisgICAgZ19hc3NlcnRf
Y21wc3RyKHdlYmtpdF9zZXR0aW5nc19nZXRfcGljdG9ncmFwaF9mb250X2ZhbWlseShzZXR0aW5n
cyksID09LCAic2Fucy1zZXJpZiIpOworCisgICAgLy8gRGVmYXVsdCBmb250IHNpemUgaXMgMTYu
CisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2RlZmF1bHRfZm9udF9z
aXplKHNldHRpbmdzKSwgPT0sIDE2KTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2RlZmF1bHRf
Zm9udF9zaXplKHNldHRpbmdzLCAxNCk7CisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfc2V0
dGluZ3NfZ2V0X2RlZmF1bHRfZm9udF9zaXplKHNldHRpbmdzKSwgPT0sIDE0KTsKKworICAgIC8v
IERlZmF1bHQgbW9ub3NwYWNlIGZvbnQgc2l6ZSBpcyAxMy4KKyAgICBnX2Fzc2VydF9jbXB1aW50
KHdlYmtpdF9zZXR0aW5nc19nZXRfZGVmYXVsdF9tb25vc3BhY2VfZm9udF9zaXplKHNldHRpbmdz
KSwgPT0sIDEzKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2RlZmF1bHRfbW9ub3NwYWNlX2Zv
bnRfc2l6ZShzZXR0aW5ncywgMTApOworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X3NldHRp
bmdzX2dldF9kZWZhdWx0X21vbm9zcGFjZV9mb250X3NpemUoc2V0dGluZ3MpLCA9PSwgMTApOwor
CisgICAgLy8gRGVmYXVsdCBtaW5pbXVtIGZvbnQgc2l6ZSBpcyAwLgorICAgIGdfYXNzZXJ0X2Nt
cHVpbnQod2Via2l0X3NldHRpbmdzX2dldF9taW5pbXVtX2ZvbnRfc2l6ZShzZXR0aW5ncyksID09
LCAwKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X21pbmltdW1fZm9udF9zaXplKHNldHRpbmdz
LCA3KTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9zZXR0aW5nc19nZXRfbWluaW11bV9m
b250X3NpemUoc2V0dGluZ3MpLCA9PSwgNyk7CisKKyAgICAvLyBEZWZhdWx0IGNoYXJzZXQgaXMg
Imlzby04ODU5LTEiLgorICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2V0dGluZ3NfZ2V0X2Rl
ZmF1bHRfY2hhcnNldChzZXR0aW5ncyksID09LCAiaXNvLTg4NTktMSIpOworICAgIHdlYmtpdF9z
ZXR0aW5nc19zZXRfZGVmYXVsdF9jaGFyc2V0KHNldHRpbmdzLCAidXRmOCIpOworICAgIGdfYXNz
ZXJ0X2NtcHN0cih3ZWJraXRfc2V0dGluZ3NfZ2V0X2RlZmF1bHRfY2hhcnNldChzZXR0aW5ncyks
ID09LCAidXRmOCIpOworCisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxl
X3ByaXZhdGVfYnJvd3Npbmcoc2V0dGluZ3MpKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2Vu
YWJsZV9wcml2YXRlX2Jyb3dzaW5nKHNldHRpbmdzLCBUUlVFKTsKKyAgICBnX2Fzc2VydCh3ZWJr
aXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9wcml2YXRlX2Jyb3dzaW5nKHNldHRpbmdzKSk7CisKKyAg
ICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfZGV2ZWxvcGVyX2V4dHJhcyhz
ZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX2RldmVsb3Blcl9leHRy
YXMoc2V0dGluZ3MsIFRSVUUpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5h
YmxlX2RldmVsb3Blcl9leHRyYXMoc2V0dGluZ3MpKTsKKworICAgIGdfYXNzZXJ0KHdlYmtpdF9z
ZXR0aW5nc19nZXRfZW5hYmxlX3Jlc2l6YWJsZV90ZXh0X2FyZWFzKHNldHRpbmdzKSk7CisgICAg
d2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfcmVzaXphYmxlX3RleHRfYXJlYXMoc2V0dGluZ3Ms
IEZBTFNFKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfcmVzaXph
YmxlX3RleHRfYXJlYXMoc2V0dGluZ3MpKTsKKworICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5n
c19nZXRfZW5hYmxlX3RhYnNfdG9fbGlua3Moc2V0dGluZ3MpKTsKKyAgICB3ZWJraXRfc2V0dGlu
Z3Nfc2V0X2VuYWJsZV90YWJzX3RvX2xpbmtzKHNldHRpbmdzLCBGQUxTRSk7CisgICAgZ19hc3Nl
cnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3RhYnNfdG9fbGlua3Moc2V0dGluZ3MpKTsK
KworICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9kbnNfcHJlZmV0Y2hp
bmcoc2V0dGluZ3MpKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9kbnNfcHJlZmV0
Y2hpbmcoc2V0dGluZ3MsIFRSVUUpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRf
ZW5hYmxlX2Ruc19wcmVmZXRjaGluZyhzZXR0aW5ncykpOworCisgICAgLy8gQ2FyZXQgYnJvd3Np
bmcgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKyAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdz
X2dldF9lbmFibGVfY2FyZXRfYnJvd3Npbmcoc2V0dGluZ3MpKTsKKyAgICB3ZWJraXRfc2V0dGlu
Z3Nfc2V0X2VuYWJsZV9jYXJldF9icm93c2luZyhzZXR0aW5ncywgVFJVRSk7CisgICAgZ19hc3Nl
cnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfY2FyZXRfYnJvd3Npbmcoc2V0dGluZ3MpKTsK
KworICAgIC8vIEZ1bGxzY3JlZW4gSmF2YVNjcmlwdCBBUEkgaXMgZW5hYmxlZCBieSBkZWZhdWx0
LgorICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2Z1bGxzY3JlZW4oc2V0
dGluZ3MpKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9mdWxsc2NyZWVuKHNldHRp
bmdzLCBGQUxTRSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2Z1
bGxzY3JlZW4oc2V0dGluZ3MpKTsKKworICAgIC8vIFByaW50IGJhY2tncm91bmRzIGlzIGVuYWJs
ZWQgYnkgZGVmYXVsdAorICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfcHJpbnRfYmFj
a2dyb3VuZHMoc2V0dGluZ3MpKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X3ByaW50X2JhY2tn
cm91bmRzKHNldHRpbmdzLCBGQUxTRSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19n
ZXRfcHJpbnRfYmFja2dyb3VuZHMoc2V0dGluZ3MpKTsKKworICAgIC8vIFdlYkF1ZGlvIGlzIGRp
c2FibGVkIGJ5IGRlZmF1bHQuCisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5h
YmxlX3dlYmF1ZGlvKHNldHRpbmdzKSk7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVf
d2ViYXVkaW8oc2V0dGluZ3MsIFRSVUUpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19n
ZXRfZW5hYmxlX3dlYmF1ZGlvKHNldHRpbmdzKSk7CisKKyAgICAvLyBXZWJHTCBpcyBkaXNhYmxl
ZCBieSBkZWZhdWx0LgorICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV93
ZWJnbChzZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX3dlYmdsKHNl
dHRpbmdzLCBUUlVFKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV93
ZWJnbChzZXR0aW5ncykpOworCisgICAgLy8gQWxsb3cgTW9kYWwgRGlhbG9ncyBpcyBkaXNhYmxl
ZCBieSBkZWZhdWx0LgorICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2FsbG93X21v
ZGFsX2RpYWxvZ3Moc2V0dGluZ3MpKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2FsbG93X21v
ZGFsX2RpYWxvZ3Moc2V0dGluZ3MsIFRSVUUpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5n
c19nZXRfYWxsb3dfbW9kYWxfZGlhbG9ncyhzZXR0aW5ncykpOworCisgICAgLy8gWm9vbSB0ZXh0
IG9ubHkgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKyAgICBnX2Fzc2VydCghd2Via2l0X3NldHRp
bmdzX2dldF96b29tX3RleHRfb25seShzZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5nc19z
ZXRfem9vbV90ZXh0X29ubHkoc2V0dGluZ3MsIFRSVUUpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9z
ZXR0aW5nc19nZXRfem9vbV90ZXh0X29ubHkoc2V0dGluZ3MpKTsKKworICAgIC8vIEJ5IGRlZmF1
bHQsIEphdmFTY3JpcHQgY2Fubm90IGFjY2VzcyB0aGUgY2xpcGJvYXJkLgorICAgIGdfYXNzZXJ0
KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2phdmFzY3JpcHRfY2FuX2FjY2Vzc19jbGlwYm9hcmQoc2V0
dGluZ3MpKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2phdmFzY3JpcHRfY2FuX2FjY2Vzc19j
bGlwYm9hcmQoc2V0dGluZ3MsIFRSVUUpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19n
ZXRfamF2YXNjcmlwdF9jYW5fYWNjZXNzX2NsaXBib2FyZChzZXR0aW5ncykpOworCisgICAgLy8g
QnkgZGVmYXVsdCwgbWVkaWEgcGxheWJhY2sgZG9lc24ndCByZXF1aXJlIHVzZXIgZ2VzdHVyZXMu
CisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfbWVkaWFfcGxheWJhY2tfcmVxdWly
ZXNfdXNlcl9nZXN0dXJlKHNldHRpbmdzKSk7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9tZWRp
YV9wbGF5YmFja19yZXF1aXJlc191c2VyX2dlc3R1cmUoc2V0dGluZ3MsIFRSVUUpOworICAgIGdf
YXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfbWVkaWFfcGxheWJhY2tfcmVxdWlyZXNfdXNlcl9n
ZXN0dXJlKHNldHRpbmdzKSk7CisKKyAgICAvLyBCeSBkZWZhdWx0LCBpbmxpbmUgbWVkaWEgcGxh
eWJhY2sgaXMgYWxsb3dlZAorICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfbWVkaWFf
cGxheWJhY2tfYWxsb3dzX2lubGluZShzZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5nc19z
ZXRfbWVkaWFfcGxheWJhY2tfYWxsb3dzX2lubGluZShzZXR0aW5ncywgRkFMU0UpOworICAgIGdf
YXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X21lZGlhX3BsYXliYWNrX2FsbG93c19pbmxpbmUo
c2V0dGluZ3MpKTsKKworICAgIC8vIEJ5IGRlZmF1bHQsIGRlYnVnIGluZGljYXRvcnMgYXJlIGRp
c2FibGVkLgorICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2RyYXdfY29tcG9zaXRp
bmdfaW5kaWNhdG9ycyhzZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZHJhd19j
b21wb3NpdGluZ19pbmRpY2F0b3JzKHNldHRpbmdzLCBUUlVFKTsKKyAgICBnX2Fzc2VydCh3ZWJr
aXRfc2V0dGluZ3NfZ2V0X2RyYXdfY29tcG9zaXRpbmdfaW5kaWNhdG9ycyhzZXR0aW5ncykpOwor
CisgICAgLy8gQnkgZGVmYXVsdCwgc2l0ZSBzcGVjaWZpYyBxdWlya3MgYXJlIGRpc2FibGVkLgor
ICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9zaXRlX3NwZWNpZmljX3F1
aXJrcyhzZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX3NpdGVfc3Bl
Y2lmaWNfcXVpcmtzKHNldHRpbmdzLCBUUlVFKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGlu
Z3NfZ2V0X2VuYWJsZV9zaXRlX3NwZWNpZmljX3F1aXJrcyhzZXR0aW5ncykpOworCisgICAgLy8g
QnkgZGVmYXVsdCwgcGFnZSBjYWNoZSBpcyBlbmFibGVkLgorICAgIGdfYXNzZXJ0KHdlYmtpdF9z
ZXR0aW5nc19nZXRfZW5hYmxlX3BhZ2VfY2FjaGUoc2V0dGluZ3MpKTsKKyAgICB3ZWJraXRfc2V0
dGluZ3Nfc2V0X2VuYWJsZV9wYWdlX2NhY2hlKHNldHRpbmdzLCBGQUxTRSk7CisgICAgZ19hc3Nl
cnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3BhZ2VfY2FjaGUoc2V0dGluZ3MpKTsKKwor
ICAgIC8vIEJ5IGRlZmF1bHQsIHNtb290aCBzY3JvbGxpbmcgaXMgZGlzYWJsZWQuCisgICAgZ19h
c3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3Ntb290aF9zY3JvbGxpbmcoc2V0dGlu
Z3MpKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9zbW9vdGhfc2Nyb2xsaW5nKHNl
dHRpbmdzLCBUUlVFKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9z
bW9vdGhfc2Nyb2xsaW5nKHNldHRpbmdzKSk7CisKKyAgICAvLyBCeSBkZWZhdWx0LCBhY2NlbGVy
YXRlZCAyRCBjYW52YXMgaXMgZGlzYWJsZWQuCisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5n
c19nZXRfZW5hYmxlX2FjY2VsZXJhdGVkXzJkX2NhbnZhcyhzZXR0aW5ncykpOworICAgIHdlYmtp
dF9zZXR0aW5nc19zZXRfZW5hYmxlX2FjY2VsZXJhdGVkXzJkX2NhbnZhcyhzZXR0aW5ncywgVFJV
RSk7CisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfYWNjZWxlcmF0ZWRf
MmRfY2FudmFzKHNldHRpbmdzKSk7CisKKyAgICAvLyBCeSBkZWZhdWx0LCB3cml0aW5nIG9mIGNv
bnNvbGUgbWVzc2FnZXMgdG8gc3Rkb3V0IGlzIGRpc2FibGVkLgorICAgIGdfYXNzZXJ0KCF3ZWJr
aXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV93cml0ZV9jb25zb2xlX21lc3NhZ2VzX3RvX3N0ZG91dChz
ZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX3dyaXRlX2NvbnNvbGVf
bWVzc2FnZXNfdG9fc3Rkb3V0KHNldHRpbmdzLCBUUlVFKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRf
c2V0dGluZ3NfZ2V0X2VuYWJsZV93cml0ZV9jb25zb2xlX21lc3NhZ2VzX3RvX3N0ZG91dChzZXR0
aW5ncykpOworCisgICAgLy8gTWVkaWFTdHJlYW0gaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKyAg
ICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfbWVkaWFfc3RyZWFtKHNldHRp
bmdzKSk7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfbWVkaWFfc3RyZWFtKHNldHRp
bmdzLCBUUlVFKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9tZWRp
YV9zdHJlYW0oc2V0dGluZ3MpKTsKKworICAgIC8vIEJ5IGRlZmF1bHQsIFNwYXRpYWxOYXZpZ2F0
aW9uIGlzIGRpc2FibGVkCisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxl
X3NwYXRpYWxfbmF2aWdhdGlvbihzZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRf
ZW5hYmxlX3NwYXRpYWxfbmF2aWdhdGlvbihzZXR0aW5ncywgVFJVRSk7CisgICAgZ19hc3NlcnQo
d2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfc3BhdGlhbF9uYXZpZ2F0aW9uKHNldHRpbmdzKSk7
CisKKyAgICAvLyBNZWRpYVNvdXJjZSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0CisgICAgZ19hc3Nl
cnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX21lZGlhc291cmNlKHNldHRpbmdzKSk7Cisg
ICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfbWVkaWFzb3VyY2Uoc2V0dGluZ3MsIFRSVUUp
OworICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX21lZGlhc291cmNlKHNl
dHRpbmdzKSk7CisKKyAgICBnX29iamVjdF91bnJlZihHX09CSkVDVChzZXR0aW5ncykpOworfQor
Cit2b2lkIHRlc3RXZWJLaXRTZXR0aW5nc05ld1dpdGhTZXR0aW5ncyhUZXN0KiB0ZXN0LCBnY29u
c3Rwb2ludGVyKQoreworICAgIEdSZWZQdHI8V2ViS2l0U2V0dGluZ3M+IHNldHRpbmdzID0gYWRv
cHRHUmVmKHdlYmtpdF9zZXR0aW5nc19uZXdfd2l0aF9zZXR0aW5ncygiZW5hYmxlLWphdmFzY3Jp
cHQiLCBGQUxTRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImF1dG8tbG9hZC1pbWFnZXMi
LCBGQUxTRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxvYWQtaWNvbnMtaWdub3Jpbmct
aW1hZ2UtbG9hZC1zZXR0aW5nIiwgVFJVRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVM
TCkpOworICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19P
QkpFQ1Qoc2V0dGluZ3MuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dl
dF9lbmFibGVfamF2YXNjcmlwdChzZXR0aW5ncy5nZXQoKSkpOworICAgIGdfYXNzZXJ0KCF3ZWJr
aXRfc2V0dGluZ3NfZ2V0X2F1dG9fbG9hZF9pbWFnZXMoc2V0dGluZ3MuZ2V0KCkpKTsKKyAgICBn
X2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2xvYWRfaWNvbnNfaWdub3JpbmdfaW1hZ2VfbG9h
ZF9zZXR0aW5nKHNldHRpbmdzLmdldCgpKSk7Cit9CisKK3N0YXRpYyBDU3RyaW5nIGNvbnZlcnRX
ZWJWaWV3TWFpblJlc291cmNlRGF0YVRvQ1N0cmluZyhXZWJWaWV3VGVzdCogdGVzdCkKK3sKKyAg
ICBzaXplX3QgbWFpblJlc291cmNlRGF0YVNpemUgPSAwOworICAgIGNvbnN0IGNoYXIqIG1haW5S
ZXNvdXJjZURhdGEgPSB0ZXN0LT5tYWluUmVzb3VyY2VEYXRhKG1haW5SZXNvdXJjZURhdGFTaXpl
KTsKKyAgICByZXR1cm4gQ1N0cmluZyhtYWluUmVzb3VyY2VEYXRhLCBtYWluUmVzb3VyY2VEYXRh
U2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGFzc2VydFRoYXRVc2VyQWdlbnRJc1NlbnRJbkhlYWRl
cnMoV2ViVmlld1Rlc3QqIHRlc3QsIGNvbnN0IENTdHJpbmcmIHVzZXJBZ2VudCkKK3sKKyAgICB0
ZXN0LT5sb2FkVVJJKGdTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi8iKS5kYXRhKCkpOworICAgIHRl
c3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIEFTU0VSVF9DTVBfQ1NUUklORyhjb252
ZXJ0V2ViVmlld01haW5SZXNvdXJjZURhdGFUb0NTdHJpbmcodGVzdCksID09LCB1c2VyQWdlbnQp
OworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViS2l0U2V0dGluZ3NVc2VyQWdlbnQoV2ViVmlld1Rl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgR1JlZlB0cjxXZWJLaXRTZXR0aW5ncz4g
c2V0dGluZ3MgPSBhZG9wdEdSZWYod2Via2l0X3NldHRpbmdzX25ldygpKTsKKyAgICBDU3RyaW5n
IGRlZmF1bHRVc2VyQWdlbnQgPSB3ZWJraXRfc2V0dGluZ3NfZ2V0X3VzZXJfYWdlbnQoc2V0dGlu
Z3MuZ2V0KCkpOworICAgIHdlYmtpdF93ZWJfdmlld19zZXRfc2V0dGluZ3ModGVzdC0+bV93ZWJW
aWV3LCBzZXR0aW5ncy5nZXQoKSk7CisKKyAgICBnX2Fzc2VydChnX3N0cnN0cl9sZW4oZGVmYXVs
dFVzZXJBZ2VudC5kYXRhKCksIC0xLCAiQXBwbGVXZWJLaXQiKSk7CisgICAgZ19hc3NlcnQoZ19z
dHJzdHJfbGVuKGRlZmF1bHRVc2VyQWdlbnQuZGF0YSgpLCAtMSwgIlNhZmFyaSIpKTsKKworICAg
IHdlYmtpdF9zZXR0aW5nc19zZXRfdXNlcl9hZ2VudChzZXR0aW5ncy5nZXQoKSwgMCk7CisgICAg
Z19hc3NlcnRfY21wc3RyKGRlZmF1bHRVc2VyQWdlbnQuZGF0YSgpLCA9PSwgd2Via2l0X3NldHRp
bmdzX2dldF91c2VyX2FnZW50KHNldHRpbmdzLmdldCgpKSk7CisgICAgYXNzZXJ0VGhhdFVzZXJB
Z2VudElzU2VudEluSGVhZGVycyh0ZXN0LCBkZWZhdWx0VXNlckFnZW50LmRhdGEoKSk7CisKKyAg
ICB3ZWJraXRfc2V0dGluZ3Nfc2V0X3VzZXJfYWdlbnQoc2V0dGluZ3MuZ2V0KCksICIiKTsKKyAg
ICBnX2Fzc2VydF9jbXBzdHIoZGVmYXVsdFVzZXJBZ2VudC5kYXRhKCksID09LCB3ZWJraXRfc2V0
dGluZ3NfZ2V0X3VzZXJfYWdlbnQoc2V0dGluZ3MuZ2V0KCkpKTsKKworICAgIGNvbnN0IGNoYXIq
IGZ1bmt5VXNlckFnZW50ID0gIkZ1bmt5ISI7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF91c2Vy
X2FnZW50KHNldHRpbmdzLmdldCgpLCBmdW5reVVzZXJBZ2VudCk7CisgICAgZ19hc3NlcnRfY21w
c3RyKGZ1bmt5VXNlckFnZW50LCA9PSwgd2Via2l0X3NldHRpbmdzX2dldF91c2VyX2FnZW50KHNl
dHRpbmdzLmdldCgpKSk7CisgICAgYXNzZXJ0VGhhdFVzZXJBZ2VudElzU2VudEluSGVhZGVycyh0
ZXN0LCBmdW5reVVzZXJBZ2VudCk7CisKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X3VzZXJfYWdl
bnRfd2l0aF9hcHBsaWNhdGlvbl9kZXRhaWxzKHNldHRpbmdzLmdldCgpLCAiV2ViS2l0R1RLKyIs
IDApOworICAgIGNvbnN0IGNoYXIqIHVzZXJBZ2VudFdpdGhOdWxsVmVyc2lvbiA9IHdlYmtpdF9z
ZXR0aW5nc19nZXRfdXNlcl9hZ2VudChzZXR0aW5ncy5nZXQoKSk7CisgICAgZ19hc3NlcnRfY21w
c3RyKGdfc3Ryc3RyX2xlbih1c2VyQWdlbnRXaXRoTnVsbFZlcnNpb24sIC0xLCBkZWZhdWx0VXNl
ckFnZW50LmRhdGEoKSksID09LCB1c2VyQWdlbnRXaXRoTnVsbFZlcnNpb24pOworICAgIGdfYXNz
ZXJ0KGdfc3Ryc3RyX2xlbih1c2VyQWdlbnRXaXRoTnVsbFZlcnNpb24sIC0xLCAiV2ViS2l0R1RL
KyIpKTsKKworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfdXNlcl9hZ2VudF93aXRoX2FwcGxpY2F0
aW9uX2RldGFpbHMoc2V0dGluZ3MuZ2V0KCksICJXZWJLaXRHVEsrIiwgIiIpOworICAgIGdfYXNz
ZXJ0X2NtcHN0cih3ZWJraXRfc2V0dGluZ3NfZ2V0X3VzZXJfYWdlbnQoc2V0dGluZ3MuZ2V0KCkp
LCA9PSwgdXNlckFnZW50V2l0aE51bGxWZXJzaW9uKTsKKworICAgIHdlYmtpdF9zZXR0aW5nc19z
ZXRfdXNlcl9hZ2VudF93aXRoX2FwcGxpY2F0aW9uX2RldGFpbHMoc2V0dGluZ3MuZ2V0KCksICJX
ZWJDYXRHVEsrIiwgIjMuNC41Iik7CisgICAgY29uc3QgY2hhciogbmV3VXNlckFnZW50ID0gd2Vi
a2l0X3NldHRpbmdzX2dldF91c2VyX2FnZW50KHNldHRpbmdzLmdldCgpKTsKKyAgICBnX2Fzc2Vy
dChnX3N0cnN0cl9sZW4obmV3VXNlckFnZW50LCAtMSwgIjMuNC41IikpOworICAgIGdfYXNzZXJ0
KGdfc3Ryc3RyX2xlbihuZXdVc2VyQWdlbnQsIC0xLCAiV2ViQ2F0R1RLKyIpKTsKK30KKworc3Rh
dGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSog
bWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSosIFNvdXBDbGllbnRDb250ZXh0
KiwgZ3BvaW50ZXIpCit7CisgICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9H
RVQpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFU
VVNfTk9UX0lNUExFTUVOVEVEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChn
X3N0cl9lcXVhbChwYXRoLCAiLyIpKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIHVzZXJBZ2VudCA9
IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9vbmUobWVzc2FnZS0+cmVxdWVzdF9oZWFkZXJzLCAi
VXNlci1BZ2VudCIpOworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBT
T1VQX1NUQVRVU19PSyk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdl
LT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9DT1BZLCB1c2VyQWdlbnQsIHN0cmxlbih1c2Vy
QWdlbnQpKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVz
cG9uc2VfYm9keSk7CisgICAgfSBlbHNlCisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVz
KG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7Cit9CisKK3ZvaWQgYmVmb3JlQWxsKCkK
K3sKKyAgICBnU2VydmVyID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIoKTsKKyAgICBnU2VydmVyLT5y
dW4oc2VydmVyQ2FsbGJhY2spOworCisgICAgVGVzdDo6YWRkKCJXZWJLaXRTZXR0aW5ncyIsICJ3
ZWJraXQtc2V0dGluZ3MiLCB0ZXN0V2ViS2l0U2V0dGluZ3MpOworICAgIFRlc3Q6OmFkZCgiV2Vi
S2l0U2V0dGluZ3MiLCAibmV3LXdpdGgtc2V0dGluZ3MiLCB0ZXN0V2ViS2l0U2V0dGluZ3NOZXdX
aXRoU2V0dGluZ3MpOworICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFNldHRpbmdzIiwgInVz
ZXItYWdlbnQiLCB0ZXN0V2ViS2l0U2V0dGluZ3NVc2VyQWdlbnQpOworfQorCit2b2lkIGFmdGVy
QWxsKCkKK3sKKyAgICBkZWxldGUgZ1NlcnZlcjsKK30KKwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRWZXJzaW9uLmNwcCBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0VmVyc2lvbi5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc0N2ZmOQotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0VmVyc2lv
bi5jcHAKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEg
Uy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVGVzdE1haW4uaCIKKyNpbmNs
dWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+CisKKworc3RhdGlj
IHZvaWQgdGVzdFdlYktpdFZlcnNpb24oVGVzdCosIGdjb25zdHBvaW50ZXIpCit7CisgICAgZ19h
c3NlcnRfY21wdWludCh3ZWJraXRfZ2V0X21ham9yX3ZlcnNpb24oKSwgPT0sIFdFQktJVF9NQUpP
Ul9WRVJTSU9OKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9nZXRfbWlub3JfdmVyc2lv
bigpLCA9PSwgV0VCS0lUX01JTk9SX1ZFUlNJT04pOworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Vi
a2l0X2dldF9taWNyb192ZXJzaW9uKCksID09LCBXRUJLSVRfTUlDUk9fVkVSU0lPTik7Cit9CisK
K3N0YXRpYyB2b2lkIHRlc3RXZWJLaXRDaGVja1ZlcnNpb24oVGVzdCosIGdjb25zdHBvaW50ZXIp
Cit7CisgICAgZ19hc3NlcnQoV0VCS0lUX0NIRUNLX1ZFUlNJT04oV0VCS0lUX01BSk9SX1ZFUlNJ
T04sIFdFQktJVF9NSU5PUl9WRVJTSU9OLCBXRUJLSVRfTUlDUk9fVkVSU0lPTikpOworICAgIGdf
YXNzZXJ0KCFXRUJLSVRfQ0hFQ0tfVkVSU0lPTihXRUJLSVRfTUFKT1JfVkVSU0lPTiArIDEsIFdF
QktJVF9NSU5PUl9WRVJTSU9OLCBXRUJLSVRfTUlDUk9fVkVSU0lPTikpOworICAgIGdfYXNzZXJ0
KCFXRUJLSVRfQ0hFQ0tfVkVSU0lPTihXRUJLSVRfTUFKT1JfVkVSU0lPTiwgV0VCS0lUX01JTk9S
X1ZFUlNJT04gKyAxLCBXRUJLSVRfTUlDUk9fVkVSU0lPTikpOworICAgIGdfYXNzZXJ0KCFXRUJL
SVRfQ0hFQ0tfVkVSU0lPTihXRUJLSVRfTUFKT1JfVkVSU0lPTiwgV0VCS0lUX01JTk9SX1ZFUlNJ
T04sIFdFQktJVF9NSUNST19WRVJTSU9OICsgMSkpOworfQorCit2b2lkIGJlZm9yZUFsbCgpCit7
CisgICAgVGVzdDo6YWRkKCJXZWJLaXRWZXJzaW9uIiwgInZlcnNpb24iLCB0ZXN0V2ViS2l0VmVy
c2lvbik7CisgICAgVGVzdDo6YWRkKCJXZWJLaXRWZXJzaW9uIiwgImNoZWNrLXZlcnNpb24iLCB0
ZXN0V2ViS2l0Q2hlY2tWZXJzaW9uKTsKK30KKwordm9pZCBhZnRlckFsbCgpCit7Cit9CmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFdl
YkNvbnRleHQuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RX
ZWJLaXRXZWJDb250ZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45
MzBmNDA2Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXQyR3RrL1Rlc3RXZWJLaXRXZWJDb250ZXh0LmNwcApAQCAtMCwwICsxLDQyNSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aW5jbHVkZSAiTG9hZFRyYWNraW5nVGVzdC5oIgorI2luY2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIu
aCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+Cisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+
CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0hhc2guaD4KKworc3RhdGljIFdlYktpdFRlc3RTZXJ2ZXIqIGtTZXJ2ZXI7CisKK3N0YXRp
YyB2b2lkIHRlc3RXZWJDb250ZXh0RGVmYXVsdChUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQor
eworICAgIC8vIENoZWNrIHRoZXJlJ3MgYSBzaW5nbGUgaW5zdGFuY2Ugb2YgdGhlIGRlZmF1bHQg
d2ViIGNvbnRleHQuCisgICAgZ19hc3NlcnQod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0
KCkgPT0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCkpOworfQorCitjbGFzcyBQbHVn
aW5zVGVzdDogcHVibGljIFRlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRV
UkUoUGx1Z2luc1Rlc3QpOworCisgICAgUGx1Z2luc1Rlc3QoKQorICAgICAgICA6IG1fY29udGV4
dCh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSkKKyAgICAgICAgLCBtX21haW5Mb29w
KGdfbWFpbl9sb29wX25ldygwLCBUUlVFKSkKKyAgICAgICAgLCBtX3BsdWdpbnMoMCkKKyAgICB7
CisgICAgICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfYWRkaXRpb25hbF9wbHVnaW5zX2RpcmVj
dG9yeShtX2NvbnRleHQsIFdFQktJVF9URVNUX1BMVUdJTl9ESVIpOworICAgIH0KKworICAgIH5Q
bHVnaW5zVGVzdCgpCisgICAgeworICAgICAgICBnX21haW5fbG9vcF91bnJlZihtX21haW5Mb29w
KTsKKyAgICAgICAgZ19saXN0X2ZyZWVfZnVsbChtX3BsdWdpbnMsIGdfb2JqZWN0X3VucmVmKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBnZXRQbHVnaW5zQXN5bmNSZWFkeUNhbGxiYWNrKEdP
YmplY3QqLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgUGx1Z2luc1Rlc3QqIHRlc3QpCisgICAgewor
ICAgICAgICB0ZXN0LT5tX3BsdWdpbnMgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3BsdWdpbnNf
ZmluaXNoKHRlc3QtPm1fY29udGV4dCwgcmVzdWx0LCAwKTsKKyAgICAgICAgZ19tYWluX2xvb3Bf
cXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBHTGlzdCogZ2V0UGx1Z2lucygp
CisgICAgeworICAgICAgICBnX2xpc3RfZnJlZV9mdWxsKG1fcGx1Z2lucywgZ19vYmplY3RfdW5y
ZWYpOworICAgICAgICB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3BsdWdpbnMobV9jb250ZXh0LCAw
LCByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KGdldFBsdWdpbnNBc3luY1Jl
YWR5Q2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3Ap
OworICAgICAgICByZXR1cm4gbV9wbHVnaW5zOworICAgIH0KKworICAgIFdlYktpdFdlYkNvbnRl
eHQqIG1fY29udGV4dDsKKyAgICBHTWFpbkxvb3AqIG1fbWFpbkxvb3A7CisgICAgR0xpc3QqIG1f
cGx1Z2luczsKK307CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJDb250ZXh0R2V0UGx1Z2lucyhQbHVn
aW5zVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBHTGlzdCogcGx1Z2lucyA9IHRl
c3QtPmdldFBsdWdpbnMoKTsKKyAgICBnX2Fzc2VydChwbHVnaW5zKTsKKworICAgIEdSZWZQdHI8
V2ViS2l0UGx1Z2luPiB0ZXN0UGx1Z2luOworICAgIGZvciAoR0xpc3QqIGl0ZW0gPSBwbHVnaW5z
OyBpdGVtOyBpdGVtID0gZ19saXN0X25leHQoaXRlbSkpIHsKKyAgICAgICAgV2ViS2l0UGx1Z2lu
KiBwbHVnaW4gPSBXRUJLSVRfUExVR0lOKGl0ZW0tPmRhdGEpOworICAgICAgICB0ZXN0LT5hc3Nl
cnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHBsdWdpbikpOworICAg
ICAgICBpZiAoIWdfc3RyY21wMCh3ZWJraXRfcGx1Z2luX2dldF9uYW1lKHBsdWdpbiksICJXZWJL
aXQgVGVzdCBQbHVnSW4iKSkgeworICAgICAgICAgICAgdGVzdFBsdWdpbiA9IHBsdWdpbjsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIGdfYXNzZXJ0KFdFQktJVF9J
U19QTFVHSU4odGVzdFBsdWdpbi5nZXQoKSkpOworCisgICAgR093blB0cjxjaGFyPiBwbHVnaW5Q
YXRoKGdfYnVpbGRfZmlsZW5hbWUoV0VCS0lUX1RFU1RfUExVR0lOX0RJUiwgImxpYlRlc3ROZXRz
Y2FwZVBsdWdpbi5zbyIsIE5VTEwpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3BsdWdp
bl9nZXRfcGF0aCh0ZXN0UGx1Z2luLmdldCgpKSwgPT0sIHBsdWdpblBhdGguZ2V0KCkpOworICAg
IGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfcGx1Z2luX2dldF9kZXNjcmlwdGlvbih0ZXN0UGx1Z2lu
LmdldCgpKSwgPT0sICJTaW1wbGUgTmV0c2NhcGXCriBwbHVnLWluIHRoYXQgaGFuZGxlcyB0ZXN0
IGNvbnRlbnQgZm9yIFdlYktpdCIpOworICAgIEdMaXN0KiBtaW1lSW5mb0xpc3QgPSB3ZWJraXRf
cGx1Z2luX2dldF9taW1lX2luZm9fbGlzdCh0ZXN0UGx1Z2luLmdldCgpKTsKKyAgICBnX2Fzc2Vy
dChtaW1lSW5mb0xpc3QpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQoZ19saXN0X2xlbmd0aChtaW1l
SW5mb0xpc3QpLCA9PSwgMik7CisKKyAgICBXZWJLaXRNaW1lSW5mbyogbWltZUluZm8gPSBzdGF0
aWNfY2FzdDxXZWJLaXRNaW1lSW5mbyo+KG1pbWVJbmZvTGlzdC0+ZGF0YSk7CisgICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF9taW1lX2luZm9fZ2V0X21pbWVfdHlwZShtaW1lSW5mbyksID09LCAi
aW1hZ2UvcG5nIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9taW1lX2luZm9fZ2V0X2Rl
c2NyaXB0aW9uKG1pbWVJbmZvKSwgPT0sICJwbmcgaW1hZ2UiKTsKKyAgICBjb25zdCBnY2hhciog
Y29uc3QqIGV4dGVuc2lvbnMgPSB3ZWJraXRfbWltZV9pbmZvX2dldF9leHRlbnNpb25zKG1pbWVJ
bmZvKTsKKyAgICBnX2Fzc2VydChleHRlbnNpb25zKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoZXh0
ZW5zaW9uc1swXSwgPT0sICJwbmciKTsKKworICAgIG1pbWVJbmZvTGlzdCA9IGdfbGlzdF9uZXh0
KG1pbWVJbmZvTGlzdCk7CisgICAgbWltZUluZm8gPSBzdGF0aWNfY2FzdDxXZWJLaXRNaW1lSW5m
byo+KG1pbWVJbmZvTGlzdC0+ZGF0YSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9taW1l
X2luZm9fZ2V0X21pbWVfdHlwZShtaW1lSW5mbyksID09LCAiYXBwbGljYXRpb24veC13ZWJraXQt
dGVzdC1uZXRzY2FwZSIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfbWltZV9pbmZvX2dl
dF9kZXNjcmlwdGlvbihtaW1lSW5mbyksID09LCAidGVzdCBuZXRzY2FwZSBjb250ZW50Iik7Cisg
ICAgZXh0ZW5zaW9ucyA9IHdlYmtpdF9taW1lX2luZm9fZ2V0X2V4dGVuc2lvbnMobWltZUluZm8p
OworICAgIGdfYXNzZXJ0KGV4dGVuc2lvbnMpOworICAgIGdfYXNzZXJ0X2NtcHN0cihleHRlbnNp
b25zWzBdLCA9PSwgInRlc3RuZXRzY2FwZSIpOworfQorCitzdGF0aWMgY29uc3QgY2hhcioga0Jh
ckhUTUwgPSAiPGh0bWw+PGJvZHk+QmFyPC9ib2R5PjwvaHRtbD4iOworc3RhdGljIGNvbnN0IGNo
YXIqIGtFY2hvSFRNTEZvcm1hdCA9ICI8aHRtbD48Ym9keT4lczwvYm9keT48L2h0bWw+IjsKK3N0
YXRpYyBjb25zdCBjaGFyKiBlcnJvckRvbWFpbiA9ICJ0ZXN0IjsKK3N0YXRpYyBjb25zdCBpbnQg
ZXJyb3JDb2RlID0gMTA7CitzdGF0aWMgY29uc3QgY2hhciogZXJyb3JNZXNzYWdlID0gIkVycm9y
IG1lc3NhZ2UuIjsKKworY2xhc3MgVVJJU2NoZW1lVGVzdDogcHVibGljIExvYWRUcmFja2luZ1Rl
c3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoVVJJU2NoZW1lVGVzdCk7
CisKKyAgICBzdHJ1Y3QgVVJJU2NoZW1lSGFuZGxlciB7CisgICAgICAgIFVSSVNjaGVtZUhhbmRs
ZXIoKQorICAgICAgICAgICAgOiByZXBseUxlbmd0aCgwKQorICAgICAgICB7CisgICAgICAgIH0K
KworICAgICAgICBVUklTY2hlbWVIYW5kbGVyKGNvbnN0IGNoYXIqIHJlcGx5LCBpbnQgcmVwbHlM
ZW5ndGgsIGNvbnN0IGNoYXIqIG1pbWVUeXBlKQorICAgICAgICAgICAgOiByZXBseShyZXBseSkK
KyAgICAgICAgICAgICwgcmVwbHlMZW5ndGgocmVwbHlMZW5ndGgpCisgICAgICAgICAgICAsIG1p
bWVUeXBlKG1pbWVUeXBlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBDU3RyaW5n
IHJlcGx5OworICAgICAgICBpbnQgcmVwbHlMZW5ndGg7CisgICAgICAgIENTdHJpbmcgbWltZVR5
cGU7CisgICAgfTsKKworICAgIHN0YXRpYyB2b2lkIHVyaVNjaGVtZVJlcXVlc3RDYWxsYmFjayhX
ZWJLaXRVUklTY2hlbWVSZXF1ZXN0KiByZXF1ZXN0LCBncG9pbnRlciB1c2VyRGF0YSkKKyAgICB7
CisgICAgICAgIFVSSVNjaGVtZVRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxVUklTY2hlbWVUZXN0
Kj4odXNlckRhdGEpOworICAgICAgICB0ZXN0LT5tX3VyaVNjaGVtZVJlcXVlc3QgPSByZXF1ZXN0
OworICAgICAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdf
T0JKRUNUKHJlcXVlc3QpKTsKKworICAgICAgICBnX2Fzc2VydCh3ZWJraXRfdXJpX3NjaGVtZV9y
ZXF1ZXN0X2dldF93ZWJfdmlldyhyZXF1ZXN0KSA9PSB0ZXN0LT5tX3dlYlZpZXcpOworCisgICAg
ICAgIEdSZWZQdHI8R0lucHV0U3RyZWFtPiBpbnB1dFN0cmVhbSA9IGFkb3B0R1JlZihnX21lbW9y
eV9pbnB1dF9zdHJlYW1fbmV3KCkpOworICAgICAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0
ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKGlucHV0U3RyZWFtLmdldCgpKSk7CisKKyAgICAg
ICAgY29uc3QgY2hhciogc2NoZW1lID0gd2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9nZXRfc2No
ZW1lKHJlcXVlc3QpOworICAgICAgICBnX2Fzc2VydChzY2hlbWUpOworICAgICAgICBnX2Fzc2Vy
dCh0ZXN0LT5tX2hhbmRsZXJzTWFwLmNvbnRhaW5zKFN0cmluZzo6ZnJvbVVURjgoc2NoZW1lKSkp
OworCisgICAgICAgIGlmICghZ19zdHJjbXAwKHNjaGVtZSwgImVycm9yIikpIHsKKyAgICAgICAg
ICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcihnX2Vycm9yX25ld19saXRlcmFsKGdfcXVhcmtfZnJv
bV9zdHJpbmcoZXJyb3JEb21haW4pLCBlcnJvckNvZGUsIGVycm9yTWVzc2FnZSkpOworICAgICAg
ICAgICAgd2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9maW5pc2hfZXJyb3IocmVxdWVzdCwgZXJy
b3IuZ2V0KCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY29u
c3QgVVJJU2NoZW1lSGFuZGxlciYgaGFuZGxlciA9IHRlc3QtPm1faGFuZGxlcnNNYXAuZ2V0KFN0
cmluZzo6ZnJvbVVURjgoc2NoZW1lKSk7CisKKyAgICAgICAgaWYgKCFnX3N0cmNtcDAoc2NoZW1l
LCAiZWNobyIpKSB7CisgICAgICAgICAgICBjaGFyKiByZXBseUhUTUwgPSBnX3N0cmR1cF9wcmlu
dGYoaGFuZGxlci5yZXBseS5kYXRhKCksIHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0X3Bh
dGgocmVxdWVzdCkpOworICAgICAgICAgICAgZ19tZW1vcnlfaW5wdXRfc3RyZWFtX2FkZF9kYXRh
KEdfTUVNT1JZX0lOUFVUX1NUUkVBTShpbnB1dFN0cmVhbS5nZXQoKSksIHJlcGx5SFRNTCwgc3Ry
bGVuKHJlcGx5SFRNTCksIGdfZnJlZSk7CisgICAgICAgIH0gZWxzZSBpZiAoIWdfc3RyY21wMChz
Y2hlbWUsICJjbG9zZWQiKSkKKyAgICAgICAgICAgIGdfaW5wdXRfc3RyZWFtX2Nsb3NlKGlucHV0
U3RyZWFtLmdldCgpLCAwLCAwKTsKKyAgICAgICAgZWxzZSBpZiAoIWhhbmRsZXIucmVwbHkuaXNO
dWxsKCkpCisgICAgICAgICAgICBnX21lbW9yeV9pbnB1dF9zdHJlYW1fYWRkX2RhdGEoR19NRU1P
UllfSU5QVVRfU1RSRUFNKGlucHV0U3RyZWFtLmdldCgpKSwgaGFuZGxlci5yZXBseS5kYXRhKCks
IGhhbmRsZXIucmVwbHkubGVuZ3RoKCksIDApOworCisgICAgICAgIHdlYmtpdF91cmlfc2NoZW1l
X3JlcXVlc3RfZmluaXNoKHJlcXVlc3QsIGlucHV0U3RyZWFtLmdldCgpLCBoYW5kbGVyLnJlcGx5
TGVuZ3RoLCBoYW5kbGVyLm1pbWVUeXBlLmRhdGEoKSk7CisgICAgfQorCisgICAgdm9pZCByZWdp
c3RlclVSSVNjaGVtZUhhbmRsZXIoY29uc3QgY2hhciogc2NoZW1lLCBjb25zdCBjaGFyKiByZXBs
eSwgaW50IHJlcGx5TGVuZ3RoLCBjb25zdCBjaGFyKiBtaW1lVHlwZSkKKyAgICB7CisgICAgICAg
IG1faGFuZGxlcnNNYXAuc2V0KFN0cmluZzo6ZnJvbVVURjgoc2NoZW1lKSwgVVJJU2NoZW1lSGFu
ZGxlcihyZXBseSwgcmVwbHlMZW5ndGgsIG1pbWVUeXBlKSk7CisgICAgICAgIHdlYmtpdF93ZWJf
Y29udGV4dF9yZWdpc3Rlcl91cmlfc2NoZW1lKHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVs
dCgpLCBzY2hlbWUsIHVyaVNjaGVtZVJlcXVlc3RDYWxsYmFjaywgdGhpcywgMCk7CisgICAgfQor
CisgICAgR1JlZlB0cjxXZWJLaXRVUklTY2hlbWVSZXF1ZXN0PiBtX3VyaVNjaGVtZVJlcXVlc3Q7
CisgICAgSGFzaE1hcDxTdHJpbmcsIFVSSVNjaGVtZUhhbmRsZXI+IG1faGFuZGxlcnNNYXA7Cit9
OworCitzdGF0aWMgdm9pZCB0ZXN0V2ViQ29udGV4dFVSSVNjaGVtZShVUklTY2hlbWVUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPnJlZ2lzdGVyVVJJU2NoZW1lSGFuZGxl
cigiZm9vIiwga0JhckhUTUwsIHN0cmxlbihrQmFySFRNTCksICJ0ZXh0L2h0bWwiKTsKKyAgICB0
ZXN0LT5sb2FkVVJJKCJmb286YmxhbmsiKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNo
ZWQoKTsKKyAgICBzaXplX3QgbWFpblJlc291cmNlRGF0YVNpemUgPSAwOworICAgIGNvbnN0IGNo
YXIqIG1haW5SZXNvdXJjZURhdGEgPSB0ZXN0LT5tYWluUmVzb3VyY2VEYXRhKG1haW5SZXNvdXJj
ZURhdGFTaXplKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQobWFpblJlc291cmNlRGF0YVNpemUsID09
LCBzdHJsZW4oa0JhckhUTUwpKTsKKyAgICBnX2Fzc2VydCghc3RybmNtcChtYWluUmVzb3VyY2VE
YXRhLCBrQmFySFRNTCwgbWFpblJlc291cmNlRGF0YVNpemUpKTsKKworICAgIHRlc3QtPnJlZ2lz
dGVyVVJJU2NoZW1lSGFuZGxlcigiZWNobyIsIGtFY2hvSFRNTEZvcm1hdCwgLTEsICJ0ZXh0L2h0
bWwiKTsKKyAgICB0ZXN0LT5sb2FkVVJJKCJlY2hvOmhlbGxvIHdvcmxkIik7CisgICAgdGVzdC0+
d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgR093blB0cjxjaGFyPiBlY2hvSFRNTChnX3N0
cmR1cF9wcmludGYoa0VjaG9IVE1MRm9ybWF0LCB3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dl
dF9wYXRoKHRlc3QtPm1fdXJpU2NoZW1lUmVxdWVzdC5nZXQoKSkpKTsKKyAgICBtYWluUmVzb3Vy
Y2VEYXRhU2l6ZSA9IDA7CisgICAgbWFpblJlc291cmNlRGF0YSA9IHRlc3QtPm1haW5SZXNvdXJj
ZURhdGEobWFpblJlc291cmNlRGF0YVNpemUpOworICAgIGdfYXNzZXJ0X2NtcGludChtYWluUmVz
b3VyY2VEYXRhU2l6ZSwgPT0sIHN0cmxlbihlY2hvSFRNTC5nZXQoKSkpOworICAgIGdfYXNzZXJ0
KCFzdHJuY21wKG1haW5SZXNvdXJjZURhdGEsIGVjaG9IVE1MLmdldCgpLCBtYWluUmVzb3VyY2VE
YXRhU2l6ZSkpOworCisgICAgdGVzdC0+cmVnaXN0ZXJVUklTY2hlbWVIYW5kbGVyKCJub21pbWUi
LCBrQmFySFRNTCwgLTEsIDApOworICAgIHRlc3QtPm1fbG9hZEV2ZW50cy5jbGVhcigpOworICAg
IHRlc3QtPmxvYWRVUkkoIm5vbWltZTpmb28gYmFyIik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9h
ZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9sb2FkRXZlbnRzLmNvbnRhaW5zKExv
YWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZEZhaWxlZCkpOworCisgICAgdGVzdC0+cmVn
aXN0ZXJVUklTY2hlbWVIYW5kbGVyKCJlbXB0eSIsIDAsIDAsICJ0ZXh0L2h0bWwiKTsKKyAgICB0
ZXN0LT5tX2xvYWRFdmVudHMuY2xlYXIoKTsKKyAgICB0ZXN0LT5sb2FkVVJJKCJlbXB0eTpub3Ro
aW5nIik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnQo
IXRlc3QtPm1fbG9hZEV2ZW50cy5jb250YWlucyhMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25h
bExvYWRGYWlsZWQpKTsKKyAgICBnX2Fzc2VydCghdGVzdC0+bV9sb2FkRXZlbnRzLmNvbnRhaW5z
KExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGYWlsZWQpKTsKKworICAgIHRlc3QtPnJlZ2lzdGVyVVJJ
U2NoZW1lSGFuZGxlcigiZXJyb3IiLCAwLCAwLCAwKTsKKyAgICB0ZXN0LT5tX2xvYWRFdmVudHMu
Y2xlYXIoKTsKKyAgICB0ZXN0LT5sb2FkVVJJKCJlcnJvcjplcnJvciIpOworICAgIHRlc3QtPndh
aXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fbG9hZEV2ZW50cy5j
b250YWlucyhMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRGYWlsZWQpKTsKKyAgICBn
X2Fzc2VydCh0ZXN0LT5tX2xvYWRGYWlsZWQpOworICAgIGdfYXNzZXJ0X2Vycm9yKHRlc3QtPm1f
ZXJyb3IuZ2V0KCksIGdfcXVhcmtfZnJvbV9zdHJpbmcoZXJyb3JEb21haW4pLCBlcnJvckNvZGUp
OworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXN0LT5tX2Vycm9yLT5tZXNzYWdlLCA9PSwgZXJyb3JN
ZXNzYWdlKTsKKworICAgIHRlc3QtPnJlZ2lzdGVyVVJJU2NoZW1lSGFuZGxlcigiY2xvc2VkIiwg
MCwgMCwgMCk7CisgICAgdGVzdC0+bV9sb2FkRXZlbnRzLmNsZWFyKCk7CisgICAgdGVzdC0+bG9h
ZFVSSSgiY2xvc2VkOmlucHV0LXN0cmVhbSIpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5p
c2hlZCgpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fbG9hZEV2ZW50cy5jb250YWlucyhMb2FkVHJh
Y2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRGYWlsZWQpKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5t
X2xvYWRGYWlsZWQpOworICAgIGdfYXNzZXJ0X2Vycm9yKHRlc3QtPm1fZXJyb3IuZ2V0KCksIEdf
SU9fRVJST1IsIEdfSU9fRVJST1JfQ0xPU0VEKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYkNv
bnRleHRTcGVsbENoZWNrZXIoVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBXZWJL
aXRXZWJDb250ZXh0KiB3ZWJDb250ZXh0ID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0
KCk7CisKKyAgICAvLyBDaGVjayB3aGF0IGhhcHBlbnMgaWYgbm8gc3BlbGwgY2hlY2tpbmcgbGFu
Z3VhZ2UgaGFzIGJlZW4gc2V0LgorICAgIGNvbnN0IGdjaGFyKiBjb25zdCogY3VycmVudExhbmd1
YWdlID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMod2Vi
Q29udGV4dCk7CisgICAgZ19hc3NlcnQoIWN1cnJlbnRMYW5ndWFnZSk7CisKKyAgICAvLyBTZXQg
dGhlIGxhbmd1YWdlIHRvIGEgc3BlY2lmaWMgb25lLgorICAgIEdSZWZQdHI8R1B0ckFycmF5PiBs
YW5ndWFnZXMgPSBhZG9wdEdSZWYoZ19wdHJfYXJyYXlfbmV3KCkpOworICAgIGdfcHRyX2FycmF5
X2FkZChsYW5ndWFnZXMuZ2V0KCksIGNvbnN0X2Nhc3Q8Z3BvaW50ZXI+KHN0YXRpY19jYXN0PGNv
bnN0IHZvaWQqPigiZW5fVVMiKSkpOworICAgIGdfcHRyX2FycmF5X2FkZChsYW5ndWFnZXMuZ2V0
KCksIDApOworICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3Vh
Z2VzKHdlYkNvbnRleHQsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhciogY29uc3QqPihsYW5n
dWFnZXMtPnBkYXRhKSk7CisgICAgY3VycmVudExhbmd1YWdlID0gd2Via2l0X3dlYl9jb250ZXh0
X2dldF9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMod2ViQ29udGV4dCk7CisgICAgZ19hc3NlcnRf
Y21wdWludChnX3N0cnZfbGVuZ3RoKGNvbnN0X2Nhc3Q8Y2hhcioqPihjdXJyZW50TGFuZ3VhZ2Up
KSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcHN0cihjdXJyZW50TGFuZ3VhZ2VbMF0sID09LCAi
ZW5fVVMiKTsKKworICAgIC8vIFNldCB0aGUgbGFuZ3VhZ2Ugc3RyaW5nIHRvIGxpc3Qgb2YgdmFs
aWQgbGFuZ3VhZ2VzLgorICAgIGdfcHRyX2FycmF5X3JlbW92ZV9pbmRleF9mYXN0KGxhbmd1YWdl
cy5nZXQoKSwgbGFuZ3VhZ2VzLT5sZW4gLSAxKTsKKyAgICBnX3B0cl9hcnJheV9hZGQobGFuZ3Vh
Z2VzLmdldCgpLCBjb25zdF9jYXN0PGdwb2ludGVyPihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4o
ImVuX0dCIikpKTsKKyAgICBnX3B0cl9hcnJheV9hZGQobGFuZ3VhZ2VzLmdldCgpLCAwKTsKKyAg
ICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyh3ZWJDb250
ZXh0LCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqIGNvbnN0Kj4obGFuZ3VhZ2VzLT5wZGF0
YSkpOworICAgIGN1cnJlbnRMYW5ndWFnZSA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxf
Y2hlY2tpbmdfbGFuZ3VhZ2VzKHdlYkNvbnRleHQpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQoZ19z
dHJ2X2xlbmd0aChjb25zdF9jYXN0PGNoYXIqKj4oY3VycmVudExhbmd1YWdlKSksID09LCAyKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIoY3VycmVudExhbmd1YWdlWzBdLCA9PSwgImVuX1VTIik7Cisg
ICAgZ19hc3NlcnRfY21wc3RyKGN1cnJlbnRMYW5ndWFnZVsxXSwgPT0sICJlbl9HQiIpOworCisg
ICAgLy8gVHJ5IHBhc3NpbmcgYSB3cm9uZyBsYW5ndWFnZSBhbG9uZyB3aXRoIGdvb2Qgb25lcy4K
KyAgICBnX3B0cl9hcnJheV9yZW1vdmVfaW5kZXhfZmFzdChsYW5ndWFnZXMuZ2V0KCksIGxhbmd1
YWdlcy0+bGVuIC0gMSk7CisgICAgZ19wdHJfYXJyYXlfYWRkKGxhbmd1YWdlcy5nZXQoKSwgY29u
c3RfY2FzdDxncG9pbnRlcj4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KCJiZF9XUiIpKSk7Cisg
ICAgZ19wdHJfYXJyYXlfYWRkKGxhbmd1YWdlcy5nZXQoKSwgMCk7CisgICAgd2Via2l0X3dlYl9j
b250ZXh0X3NldF9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMod2ViQ29udGV4dCwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBjaGFyKiBjb25zdCo+KGxhbmd1YWdlcy0+cGRhdGEpKTsKKyAgICBjdXJy
ZW50TGFuZ3VhZ2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1
YWdlcyh3ZWJDb250ZXh0KTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGdfc3Rydl9sZW5ndGgoY29u
c3RfY2FzdDxjaGFyKio+KGN1cnJlbnRMYW5ndWFnZSkpLCA9PSwgMik7CisgICAgZ19hc3NlcnRf
Y21wc3RyKGN1cnJlbnRMYW5ndWFnZVswXSwgPT0sICJlbl9VUyIpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cihjdXJyZW50TGFuZ3VhZ2VbMV0sID09LCAiZW5fR0IiKTsKKworICAgIC8vIFRyeSBwYXNz
aW5nIGEgbGlzdCB3aXRoIG9ubHkgd3JvbmcgbGFuZ3VhZ2VzLgorICAgIGxhbmd1YWdlcyA9IGFk
b3B0R1JlZihnX3B0cl9hcnJheV9uZXcoKSk7CisgICAgZ19wdHJfYXJyYXlfYWRkKGxhbmd1YWdl
cy5nZXQoKSwgY29uc3RfY2FzdDxncG9pbnRlcj4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KCJi
ZF9XUiIpKSk7CisgICAgZ19wdHJfYXJyYXlfYWRkKGxhbmd1YWdlcy5nZXQoKSwgY29uc3RfY2Fz
dDxncG9pbnRlcj4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KCJ3cl9CRCIpKSk7CisgICAgZ19w
dHJfYXJyYXlfYWRkKGxhbmd1YWdlcy5nZXQoKSwgMCk7CisgICAgd2Via2l0X3dlYl9jb250ZXh0
X3NldF9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMod2ViQ29udGV4dCwgcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBjaGFyKiBjb25zdCo+KGxhbmd1YWdlcy0+cGRhdGEpKTsKKyAgICBjdXJyZW50TGFu
Z3VhZ2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyh3
ZWJDb250ZXh0KTsKKyAgICBnX2Fzc2VydCghY3VycmVudExhbmd1YWdlKTsKKworICAgIC8vIENo
ZWNrIGRpc2FibGluZyBhbmQgcmUtZW5hYmxpbmcgc3BlbGwgY2hlY2tpbmcuCisgICAgd2Via2l0
X3dlYl9jb250ZXh0X3NldF9zcGVsbF9jaGVja2luZ19lbmFibGVkKHdlYkNvbnRleHQsIEZBTFNF
KTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl9jb250ZXh0X2dldF9zcGVsbF9jaGVja2luZ19l
bmFibGVkKHdlYkNvbnRleHQpKTsKKyAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3NwZWxsX2No
ZWNraW5nX2VuYWJsZWQod2ViQ29udGV4dCwgVFJVRSk7CisgICAgZ19hc3NlcnQod2Via2l0X3dl
Yl9jb250ZXh0X2dldF9zcGVsbF9jaGVja2luZ19lbmFibGVkKHdlYkNvbnRleHQpKTsKK30KKwor
c3RhdGljIHZvaWQgdGVzdFdlYkNvbnRleHRMYW5ndWFnZXMoV2ViVmlld1Rlc3QqIHRlc3QsIGdj
b25zdHBvaW50ZXIpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGV4cGVjdGVkRGVmYXVsdExh
bmd1YWdlID0gImVuIjsKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgo
Ii8iKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIHNp
emVfdCBtYWluUmVzb3VyY2VEYXRhU2l6ZSA9IDA7CisgICAgY29uc3QgY2hhciogbWFpblJlc291
cmNlRGF0YSA9IHRlc3QtPm1haW5SZXNvdXJjZURhdGEobWFpblJlc291cmNlRGF0YVNpemUpOwor
ICAgIGdfYXNzZXJ0X2NtcHVpbnQobWFpblJlc291cmNlRGF0YVNpemUsID09LCBzdHJsZW4oZXhw
ZWN0ZWREZWZhdWx0TGFuZ3VhZ2UpKTsKKyAgICBnX2Fzc2VydCghc3RybmNtcChtYWluUmVzb3Vy
Y2VEYXRhLCBleHBlY3RlZERlZmF1bHRMYW5ndWFnZSwgbWFpblJlc291cmNlRGF0YVNpemUpKTsK
KworICAgIEdSZWZQdHI8R1B0ckFycmF5PiBsYW5ndWFnZXMgPSBhZG9wdEdSZWYoZ19wdHJfYXJy
YXlfbmV3KCkpOworICAgIGdfcHRyX2FycmF5X2FkZChsYW5ndWFnZXMuZ2V0KCksIGNvbnN0X2Nh
c3Q8Z3BvaW50ZXI+KHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqPigiZW4iKSkpOworICAgIGdfcHRy
X2FycmF5X2FkZChsYW5ndWFnZXMuZ2V0KCksIGNvbnN0X2Nhc3Q8Z3BvaW50ZXI+KHN0YXRpY19j
YXN0PGNvbnN0IHZvaWQqPigiRVNfZXMiKSkpOworICAgIGdfcHRyX2FycmF5X2FkZChsYW5ndWFn
ZXMuZ2V0KCksIGNvbnN0X2Nhc3Q8Z3BvaW50ZXI+KHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqPigi
ZEUiKSkpOworICAgIGdfcHRyX2FycmF5X2FkZChsYW5ndWFnZXMuZ2V0KCksIDApOworICAgIHdl
YmtpdF93ZWJfY29udGV4dF9zZXRfcHJlZmVycmVkX2xhbmd1YWdlcyh3ZWJraXRfd2ViX2NvbnRl
eHRfZ2V0X2RlZmF1bHQoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKiBjb25zdCo+KGxh
bmd1YWdlcy0+cGRhdGEpKTsKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBleHBlY3RlZExhbmd1
YWdlcyA9ICJlbiwgZXMtZXM7cT0wLjkwLCBkZTtxPTAuODAiOworICAgIHRlc3QtPmxvYWRVUkko
a1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGls
TG9hZEZpbmlzaGVkKCk7CisgICAgbWFpblJlc291cmNlRGF0YVNpemUgPSAwOworICAgIG1haW5S
ZXNvdXJjZURhdGEgPSB0ZXN0LT5tYWluUmVzb3VyY2VEYXRhKG1haW5SZXNvdXJjZURhdGFTaXpl
KTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KG1haW5SZXNvdXJjZURhdGFTaXplLCA9PSwgc3RybGVu
KGV4cGVjdGVkTGFuZ3VhZ2VzKSk7CisgICAgZ19hc3NlcnQoIXN0cm5jbXAobWFpblJlc291cmNl
RGF0YSwgZXhwZWN0ZWRMYW5ndWFnZXMsIG1haW5SZXNvdXJjZURhdGFTaXplKSk7Cit9CisKK3N0
YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2Uq
IG1lc3NhZ2UsIGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqLCBTb3VwQ2xpZW50Q29udGV4
dCosIGdwb2ludGVyKQoreworICAgIGlmIChtZXNzYWdlLT5tZXRob2QgIT0gU09VUF9NRVRIT0Rf
R0VUKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RB
VFVTX05PVF9JTVBMRU1FTlRFRCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
Z19zdHJfZXF1YWwocGF0aCwgIi8iKSkgeworICAgICAgICBjb25zdCBjaGFyKiBhY2NlcHRMYW5n
dWFnZSA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9vbmUobWVzc2FnZS0+cmVxdWVzdF9oZWFk
ZXJzLCAiQWNjZXB0LUxhbmd1YWdlIik7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVz
KG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBw
ZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX0NPUFksIGFjY2VwdExhbmd1
YWdlLCBzdHJsZW4oYWNjZXB0TGFuZ3VhZ2UpKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlf
Y29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7CisgICAgfSBlbHNlCisgICAgICAgIHNv
dXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7Cit9
CisKK2NsYXNzIFNlY3VyaXR5UG9saWN5VGVzdDogcHVibGljIFRlc3QgeworcHVibGljOgorICAg
IE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoU2VjdXJpdHlQb2xpY3lUZXN0KTsKKworICAgIGVudW0g
U2VjdXJpdHlQb2xpY3kgeworICAgICAgICBMb2NhbCA9IDEgPDwgMSwKKyAgICAgICAgTm9BY2Nl
c3MgPSAxIDw8IDIsCisgICAgICAgIERpc3BsYXlJc29sYXRlZCA9IDEgPDwgMywKKyAgICAgICAg
U2VjdXJlID0gMSA8PCA0LAorICAgICAgICBDT1JTRW5hYmxlZCA9IDEgPDwgNSwKKyAgICAgICAg
RW1wdHlEb2N1bWVudCA9IDEgPDwgNgorICAgIH07CisKKyAgICBTZWN1cml0eVBvbGljeVRlc3Qo
KQorICAgICAgICA6IG1fbWFuYWdlcih3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3NlY3VyaXR5X21h
bmFnZXIod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCkpKQorICAgIHsKKyAgICB9CisK
KyAgICB2b2lkIHZlcmlmeVRoYXRTY2hlbWVNYXRjaGVzUG9saWN5KGNvbnN0IGNoYXIqIHNjaGVt
ZSwgdW5zaWduZWQgcG9saWN5KQorICAgIHsKKyAgICAgICAgaWYgKHBvbGljeSAmIExvY2FsKQor
ICAgICAgICAgICAgZ19hc3NlcnQod2Via2l0X3NlY3VyaXR5X21hbmFnZXJfdXJpX3NjaGVtZV9p
c19sb2NhbChtX21hbmFnZXIsIHNjaGVtZSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBn
X2Fzc2VydCghd2Via2l0X3NlY3VyaXR5X21hbmFnZXJfdXJpX3NjaGVtZV9pc19sb2NhbChtX21h
bmFnZXIsIHNjaGVtZSkpOworICAgICAgICBpZiAocG9saWN5ICYgTm9BY2Nlc3MpCisgICAgICAg
ICAgICBnX2Fzc2VydCh3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl91cmlfc2NoZW1lX2lzX25vX2Fj
Y2VzcyhtX21hbmFnZXIsIHNjaGVtZSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBnX2Fz
c2VydCghd2Via2l0X3NlY3VyaXR5X21hbmFnZXJfdXJpX3NjaGVtZV9pc19ub19hY2Nlc3MobV9t
YW5hZ2VyLCBzY2hlbWUpKTsKKyAgICAgICAgaWYgKHBvbGljeSAmIERpc3BsYXlJc29sYXRlZCkK
KyAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9zZWN1cml0eV9tYW5hZ2VyX3VyaV9zY2hlbWVf
aXNfZGlzcGxheV9pc29sYXRlZChtX21hbmFnZXIsIHNjaGVtZSkpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X3NlY3VyaXR5X21hbmFnZXJfdXJpX3NjaGVtZV9p
c19kaXNwbGF5X2lzb2xhdGVkKG1fbWFuYWdlciwgc2NoZW1lKSk7CisgICAgICAgIGlmIChwb2xp
Y3kgJiBTZWN1cmUpCisgICAgICAgICAgICBnX2Fzc2VydCh3ZWJraXRfc2VjdXJpdHlfbWFuYWdl
cl91cmlfc2NoZW1lX2lzX3NlY3VyZShtX21hbmFnZXIsIHNjaGVtZSkpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X3NlY3VyaXR5X21hbmFnZXJfdXJpX3NjaGVt
ZV9pc19zZWN1cmUobV9tYW5hZ2VyLCBzY2hlbWUpKTsKKyAgICAgICAgaWYgKHBvbGljeSAmIENP
UlNFbmFibGVkKQorICAgICAgICAgICAgZ19hc3NlcnQod2Via2l0X3NlY3VyaXR5X21hbmFnZXJf
dXJpX3NjaGVtZV9pc19jb3JzX2VuYWJsZWQobV9tYW5hZ2VyLCBzY2hlbWUpKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9zZWN1cml0eV9tYW5hZ2VyX3VyaV9z
Y2hlbWVfaXNfY29yc19lbmFibGVkKG1fbWFuYWdlciwgc2NoZW1lKSk7CisgICAgICAgIGlmIChw
b2xpY3kgJiBFbXB0eURvY3VtZW50KQorICAgICAgICAgICAgZ19hc3NlcnQod2Via2l0X3NlY3Vy
aXR5X21hbmFnZXJfdXJpX3NjaGVtZV9pc19lbXB0eV9kb2N1bWVudChtX21hbmFnZXIsIHNjaGVt
ZSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X3NlY3VyaXR5
X21hbmFnZXJfdXJpX3NjaGVtZV9pc19lbXB0eV9kb2N1bWVudChtX21hbmFnZXIsIHNjaGVtZSkp
OworICAgIH0KKworICAgIFdlYktpdFNlY3VyaXR5TWFuYWdlciogbV9tYW5hZ2VyOworfTsKKwor
c3RhdGljIHZvaWQgdGVzdFdlYkNvbnRleHRTZWN1cml0eVBvbGljeShTZWN1cml0eVBvbGljeVRl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8gVmVyaWZ5VGhhdFNjaGVtZU1hdGNo
ZXNQb2xpY3kgZGVmYXVsdCBwb2xpY3kgZm9yIHdlbGwga25vd24gc2NoZW1lcy4KKyAgICB0ZXN0
LT52ZXJpZnlUaGF0U2NoZW1lTWF0Y2hlc1BvbGljeSgiaHR0cCIsIFNlY3VyaXR5UG9saWN5VGVz
dDo6Q09SU0VuYWJsZWQpOworICAgIHRlc3QtPnZlcmlmeVRoYXRTY2hlbWVNYXRjaGVzUG9saWN5
KCJodHRwcyIsIFNlY3VyaXR5UG9saWN5VGVzdDo6Q09SU0VuYWJsZWQgfCBTZWN1cml0eVBvbGlj
eVRlc3Q6OlNlY3VyZSk7CisgICAgdGVzdC0+dmVyaWZ5VGhhdFNjaGVtZU1hdGNoZXNQb2xpY3ko
ImZpbGUiLCBTZWN1cml0eVBvbGljeVRlc3Q6OkxvY2FsKTsKKyAgICB0ZXN0LT52ZXJpZnlUaGF0
U2NoZW1lTWF0Y2hlc1BvbGljeSgiZGF0YSIsIFNlY3VyaXR5UG9saWN5VGVzdDo6Tm9BY2Nlc3Mg
fCBTZWN1cml0eVBvbGljeVRlc3Q6OlNlY3VyZSk7CisgICAgdGVzdC0+dmVyaWZ5VGhhdFNjaGVt
ZU1hdGNoZXNQb2xpY3koImFib3V0IiwgU2VjdXJpdHlQb2xpY3lUZXN0OjpOb0FjY2VzcyB8IFNl
Y3VyaXR5UG9saWN5VGVzdDo6U2VjdXJlIHwgU2VjdXJpdHlQb2xpY3lUZXN0OjpFbXB0eURvY3Vt
ZW50KTsKKworICAgIC8vIEN1c3RvbSBzY2hlbWUuCisgICAgdGVzdC0+dmVyaWZ5VGhhdFNjaGVt
ZU1hdGNoZXNQb2xpY3koImZvbyIsIDApOworCisgICAgd2Via2l0X3NlY3VyaXR5X21hbmFnZXJf
cmVnaXN0ZXJfdXJpX3NjaGVtZV9hc19sb2NhbCh0ZXN0LT5tX21hbmFnZXIsICJmb28iKTsKKyAg
ICB0ZXN0LT52ZXJpZnlUaGF0U2NoZW1lTWF0Y2hlc1BvbGljeSgiZm9vIiwgU2VjdXJpdHlQb2xp
Y3lUZXN0OjpMb2NhbCk7CisgICAgd2Via2l0X3NlY3VyaXR5X21hbmFnZXJfcmVnaXN0ZXJfdXJp
X3NjaGVtZV9hc19ub19hY2Nlc3ModGVzdC0+bV9tYW5hZ2VyLCAiZm9vIik7CisgICAgdGVzdC0+
dmVyaWZ5VGhhdFNjaGVtZU1hdGNoZXNQb2xpY3koImZvbyIsIFNlY3VyaXR5UG9saWN5VGVzdDo6
TG9jYWwgfCBTZWN1cml0eVBvbGljeVRlc3Q6Ok5vQWNjZXNzKTsKKyAgICB3ZWJraXRfc2VjdXJp
dHlfbWFuYWdlcl9yZWdpc3Rlcl91cmlfc2NoZW1lX2FzX2Rpc3BsYXlfaXNvbGF0ZWQodGVzdC0+
bV9tYW5hZ2VyLCAiZm9vIik7CisgICAgdGVzdC0+dmVyaWZ5VGhhdFNjaGVtZU1hdGNoZXNQb2xp
Y3koImZvbyIsIFNlY3VyaXR5UG9saWN5VGVzdDo6TG9jYWwgfCBTZWN1cml0eVBvbGljeVRlc3Q6
Ok5vQWNjZXNzIHwgU2VjdXJpdHlQb2xpY3lUZXN0OjpEaXNwbGF5SXNvbGF0ZWQpOworICAgIHdl
YmtpdF9zZWN1cml0eV9tYW5hZ2VyX3JlZ2lzdGVyX3VyaV9zY2hlbWVfYXNfc2VjdXJlKHRlc3Qt
Pm1fbWFuYWdlciwgImZvbyIpOworICAgIHRlc3QtPnZlcmlmeVRoYXRTY2hlbWVNYXRjaGVzUG9s
aWN5KCJmb28iLCBTZWN1cml0eVBvbGljeVRlc3Q6OkxvY2FsIHwgU2VjdXJpdHlQb2xpY3lUZXN0
OjpOb0FjY2VzcyB8IFNlY3VyaXR5UG9saWN5VGVzdDo6RGlzcGxheUlzb2xhdGVkIHwgU2VjdXJp
dHlQb2xpY3lUZXN0OjpTZWN1cmUpOworICAgIHdlYmtpdF9zZWN1cml0eV9tYW5hZ2VyX3JlZ2lz
dGVyX3VyaV9zY2hlbWVfYXNfY29yc19lbmFibGVkKHRlc3QtPm1fbWFuYWdlciwgImZvbyIpOwor
ICAgIHRlc3QtPnZlcmlmeVRoYXRTY2hlbWVNYXRjaGVzUG9saWN5KCJmb28iLCBTZWN1cml0eVBv
bGljeVRlc3Q6OkxvY2FsIHwgU2VjdXJpdHlQb2xpY3lUZXN0OjpOb0FjY2VzcyB8IFNlY3VyaXR5
UG9saWN5VGVzdDo6RGlzcGxheUlzb2xhdGVkIHwgU2VjdXJpdHlQb2xpY3lUZXN0OjpTZWN1cmUK
KyAgICAgICAgICAgICAgICB8IFNlY3VyaXR5UG9saWN5VGVzdDo6Q09SU0VuYWJsZWQpOworICAg
IHdlYmtpdF9zZWN1cml0eV9tYW5hZ2VyX3JlZ2lzdGVyX3VyaV9zY2hlbWVfYXNfZW1wdHlfZG9j
dW1lbnQodGVzdC0+bV9tYW5hZ2VyLCAiZm9vIik7CisgICAgdGVzdC0+dmVyaWZ5VGhhdFNjaGVt
ZU1hdGNoZXNQb2xpY3koImZvbyIsIFNlY3VyaXR5UG9saWN5VGVzdDo6TG9jYWwgfCBTZWN1cml0
eVBvbGljeVRlc3Q6Ok5vQWNjZXNzIHwgU2VjdXJpdHlQb2xpY3lUZXN0OjpEaXNwbGF5SXNvbGF0
ZWQgfCBTZWN1cml0eVBvbGljeVRlc3Q6OlNlY3VyZQorICAgICAgICAgICAgICAgIHwgU2VjdXJp
dHlQb2xpY3lUZXN0OjpDT1JTRW5hYmxlZCB8IFNlY3VyaXR5UG9saWN5VGVzdDo6RW1wdHlEb2N1
bWVudCk7Cit9CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICBrU2VydmVyID0gbmV3IFdlYktp
dFRlc3RTZXJ2ZXIoKTsKKyAgICBrU2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2spOworCisgICAg
VGVzdDo6YWRkKCJXZWJLaXRXZWJDb250ZXh0IiwgImRlZmF1bHQtY29udGV4dCIsIHRlc3RXZWJD
b250ZXh0RGVmYXVsdCk7CisgICAgUGx1Z2luc1Rlc3Q6OmFkZCgiV2ViS2l0V2ViQ29udGV4dCIs
ICJnZXQtcGx1Z2lucyIsIHRlc3RXZWJDb250ZXh0R2V0UGx1Z2lucyk7CisgICAgVVJJU2NoZW1l
VGVzdDo6YWRkKCJXZWJLaXRXZWJDb250ZXh0IiwgInVyaS1zY2hlbWUiLCB0ZXN0V2ViQ29udGV4
dFVSSVNjaGVtZSk7CisgICAgVGVzdDo6YWRkKCJXZWJLaXRXZWJDb250ZXh0IiwgInNwZWxsLWNo
ZWNrZXIiLCB0ZXN0V2ViQ29udGV4dFNwZWxsQ2hlY2tlcik7CisgICAgV2ViVmlld1Rlc3Q6OmFk
ZCgiV2ViS2l0V2ViQ29udGV4dCIsICJsYW5ndWFnZXMiLCB0ZXN0V2ViQ29udGV4dExhbmd1YWdl
cyk7CisgICAgU2VjdXJpdHlQb2xpY3lUZXN0OjphZGQoIldlYktpdFNlY3VyaXR5TWFuYWdlciIs
ICJzZWN1cml0eS1wb2xpY3kiLCB0ZXN0V2ViQ29udGV4dFNlY3VyaXR5UG9saWN5KTsKK30KKwor
dm9pZCBhZnRlckFsbCgpCit7CisgICAgZGVsZXRlIGtTZXJ2ZXI7Cit9CmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFdlYlZpZXcuY3Bw
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRXZWJWaWV3
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzBiMGEyCi0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJL
aXRXZWJWaWV3LmNwcApAQCAtMCwwICsxLDYwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlZpZXdUZXN0
LmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9KU1ZhbHVlUmVmLmg+CisjaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KKyNp
bmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3
RGVmYXVsdENvbnRleHQoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAg
Z19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KHRlc3QtPm1fd2ViVmlldykgPT0g
d2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCkpOworCisgICAgLy8gQ2hlY2sgdGhhdCBh
IHdlYiB2aWV3IGNyZWF0ZWQgd2l0aCBnX29iamVjdF9uZXcgaGFzIHRoZSBkZWZhdWx0IGNvbnRl
eHQuCisgICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3PiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVX
KGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfVklFVywgTlVMTCkpOworICAgIGdfYXNzZXJ0
KHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dCh3ZWJWaWV3LmdldCgpKSA9PSB3ZWJraXRfd2Vi
X2NvbnRleHRfZ2V0X2RlZmF1bHQoKSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3Q3Vz
dG9tQ2hhcnNldChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBnX2Fz
c2VydCghd2Via2l0X3dlYl92aWV3X2dldF9jdXN0b21fY2hhcnNldCh0ZXN0LT5tX3dlYlZpZXcp
KTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X2N1c3RvbV9jaGFyc2V0KHRlc3QtPm1fd2ViVmll
dywgInV0ZjgiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dldF9jdXN0
b21fY2hhcnNldCh0ZXN0LT5tX3dlYlZpZXcpLCA9PSwgInV0ZjgiKTsKKyAgICAvLyBHbyBiYWNr
IHRvIHRoZSBkZWZhdWx0IGNoYXJzZXQuCisgICAgd2Via2l0X3dlYl92aWV3X3NldF9jdXN0b21f
Y2hhcnNldCh0ZXN0LT5tX3dlYlZpZXcsIDApOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X2N1c3RvbV9jaGFyc2V0KHRlc3QtPm1fd2ViVmlldykpOworfQorCitzdGF0aWMgdm9p
ZCB0ZXN0V2ViVmlld1NldHRpbmdzKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQor
eworICAgIFdlYktpdFNldHRpbmdzKiBkZWZhdWx0U2V0dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X3NldHRpbmdzKHRlc3QtPm1fd2ViVmlldyk7CisgICAgZ19hc3NlcnQoZGVmYXVsdFNldHRp
bmdzKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9qYXZhc2NyaXB0
KGRlZmF1bHRTZXR0aW5ncykpOworCisgICAgR1JlZlB0cjxXZWJLaXRTZXR0aW5ncz4gbmV3U2V0
dGluZ3MgPSBhZG9wdEdSZWYod2Via2l0X3NldHRpbmdzX25ldygpKTsKKyAgICBnX29iamVjdF9z
ZXQoR19PQkpFQ1QobmV3U2V0dGluZ3MuZ2V0KCkpLCAiZW5hYmxlLWphdmFzY3JpcHQiLCBGQUxT
RSwgTlVMTCk7CisgICAgd2Via2l0X3dlYl92aWV3X3NldF9zZXR0aW5ncyh0ZXN0LT5tX3dlYlZp
ZXcsIG5ld1NldHRpbmdzLmdldCgpKTsKKworICAgIFdlYktpdFNldHRpbmdzKiBzZXR0aW5ncyA9
IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3ModGVzdC0+bV93ZWJWaWV3KTsKKyAgICBnX2Fz
c2VydChzZXR0aW5ncyAhPSBkZWZhdWx0U2V0dGluZ3MpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRf
c2V0dGluZ3NfZ2V0X2VuYWJsZV9qYXZhc2NyaXB0KHNldHRpbmdzKSk7CisKKyAgICBHUmVmUHRy
PEd0a1dpZGdldD4gd2ViVmlldzIgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7CisgICAgdGVzdC0+
YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVCh3ZWJWaWV3Mi5n
ZXQoKSkpOworICAgIHdlYmtpdF93ZWJfdmlld19zZXRfc2V0dGluZ3MoV0VCS0lUX1dFQl9WSUVX
KHdlYlZpZXcyLmdldCgpKSwgc2V0dGluZ3MpOworICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmll
d19nZXRfc2V0dGluZ3MoV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcyLmdldCgpKSkgPT0gc2V0dGlu
Z3MpOworCisgICAgR1JlZlB0cjxXZWJLaXRTZXR0aW5ncz4gbmV3U2V0dGluZ3MyID0gYWRvcHRH
UmVmKHdlYmtpdF9zZXR0aW5nc19uZXcoKSk7CisgICAgd2Via2l0X3dlYl92aWV3X3NldF9zZXR0
aW5ncyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldzIuZ2V0KCkpLCBuZXdTZXR0aW5nczIuZ2V0KCkp
OworICAgIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyhXRUJLSVRfV0VC
X1ZJRVcod2ViVmlldzIuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydChzZXR0aW5ncyA9PSBuZXdTZXR0
aW5nczIuZ2V0KCkpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2ph
dmFzY3JpcHQoc2V0dGluZ3MpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdab29tTGV2
ZWwoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgZ19hc3NlcnRfY21w
ZmxvYXQod2Via2l0X3dlYl92aWV3X2dldF96b29tX2xldmVsKHRlc3QtPm1fd2ViVmlldyksID09
LCAxKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X3pvb21fbGV2ZWwodGVzdC0+bV93ZWJWaWV3
LCAyLjUpOworICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHdlYmtpdF93ZWJfdmlld19nZXRfem9vbV9s
ZXZlbCh0ZXN0LT5tX3dlYlZpZXcpLCA9PSwgMi41KTsKKworICAgIHdlYmtpdF9zZXR0aW5nc19z
ZXRfem9vbV90ZXh0X29ubHkod2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh0ZXN0LT5tX3dl
YlZpZXcpLCBUUlVFKTsKKyAgICAvLyBUaGUgem9vbSBsZXZlbCBzaG91bGRuJ3QgY2hhbmdlIHdo
ZW4gem9vbS10ZXh0LW9ubHkgc2V0dGluZyBjaGFuZ2VzLgorICAgIGdfYXNzZXJ0X2NtcGZsb2F0
KHdlYmtpdF93ZWJfdmlld19nZXRfem9vbV9sZXZlbCh0ZXN0LT5tX3dlYlZpZXcpLCA9PSwgMi41
KTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdSdW5KYXZhU2NyaXB0KFdlYlZpZXdUZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBodG1sID0g
IjxodG1sPjxib2R5PjxhIGlkPSdXZWJLaXRMaW5rJyBocmVmPSdodHRwOi8vd3d3LndlYmtpdGd0
ay5vcmcvJyB0aXRsZT0nV2ViS2l0R1RLKyBUaXRsZSc+V2ViS2l0R1RLKyBXZWJzaXRlPC9hPjwv
Ym9keT48L2h0bWw+IjsKKyAgICB0ZXN0LT5sb2FkSHRtbChodG1sLCAwKTsKKyAgICB0ZXN0LT53
YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAg
ICBXZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2
YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJ3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ1dlYktpdExpbmsnKS50aXRsZTsiLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGdfYXNzZXJ0
KGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7CisgICAgR093
blB0cjxjaGFyPiB2YWx1ZVN0cmluZyhXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQ1N0
cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5n
LmdldCgpLCA9PSwgIldlYktpdEdUSysgVGl0bGUiKTsKKworICAgIGphdmFzY3JpcHRSZXN1bHQg
PSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoIndpbmRvdy5kb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnV2ViS2l0TGluaycpLmhyZWY7IiwgJmVycm9yLm91dFB0cigpKTsK
KyAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydCghZXJyb3IuZ2V0
KCkpOworICAgIHZhbHVlU3RyaW5nLnNldChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRv
Q1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3Ry
aW5nLmdldCgpLCA9PSwgImh0dHA6Ly93d3cud2Via2l0Z3RrLm9yZy8iKTsKKworICAgIGphdmFz
Y3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoIndp
bmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnV2ViS2l0TGluaycpLnRleHRDb250ZW50Iiwg
JmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBn
X2Fzc2VydCghZXJyb3IuZ2V0KCkpOworICAgIHZhbHVlU3RyaW5nLnNldChXZWJWaWV3VGVzdDo6
amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7CisgICAgZ19hc3Nl
cnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgIldlYktpdEdUSysgV2Vic2l0ZSIpOwor
CisgICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxG
aW5pc2hlZCgiYSA9IDI1OyIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQoamF2YXNj
cmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKyAgICBnX2Fzc2VydF9j
bXBmbG9hdChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvTnVtYmVyKGphdmFzY3JpcHRS
ZXN1bHQpLCA9PSwgMjUpOworCisgICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFT
Y3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiYSA9IDIuNTsiLCAmZXJyb3Iub3V0UHRyKCkpOwor
ICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQo
KSk7CisgICAgZ19hc3NlcnRfY21wZmxvYXQoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRU
b051bWJlcihqYXZhc2NyaXB0UmVzdWx0KSwgPT0sIDIuNSk7CisKKyAgICBqYXZhc2NyaXB0UmVz
dWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJhID0gdHJ1ZSIs
ICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAg
Z19hc3NlcnQoIWVycm9yLmdldCgpKTsKKyAgICBnX2Fzc2VydChXZWJWaWV3VGVzdDo6amF2YXNj
cmlwdFJlc3VsdFRvQm9vbGVhbihqYXZhc2NyaXB0UmVzdWx0KSk7CisKKyAgICBqYXZhc2NyaXB0
UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJhID0gZmFs
c2UiLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOwor
ICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7CisgICAgZ19hc3NlcnQoIVdlYlZpZXdUZXN0Ojpq
YXZhc2NyaXB0UmVzdWx0VG9Cb29sZWFuKGphdmFzY3JpcHRSZXN1bHQpKTsKKworICAgIGphdmFz
Y3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImEg
PSBudWxsIiwgJmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0
KTsKKyAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOworICAgIGdfYXNzZXJ0KFdlYlZpZXdUZXN0
OjpqYXZhc2NyaXB0UmVzdWx0SXNOdWxsKGphdmFzY3JpcHRSZXN1bHQpKTsKKworICAgIGphdmFz
Y3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImZ1
bmN0aW9uIEZvbygpIHsgYSA9IDI1OyB9IEZvbygpOyIsICZlcnJvci5vdXRQdHIoKSk7CisgICAg
Z19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsK
KyAgICBnX2Fzc2VydChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdElzVW5kZWZpbmVkKGph
dmFzY3JpcHRSZXN1bHQpKTsKKworICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZh
U2NyaXB0RnJvbUdSZXNvdXJjZUFuZFdhaXRVbnRpbEZpbmlzaGVkKCIvb3JnL3dlYmtpdC93ZWJr
aXQyZ3RrL3Rlc3RzL2xpbmstdGl0bGUuanMiLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGdfYXNz
ZXJ0KGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7CisgICAg
dmFsdWVTdHJpbmcuc2V0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGph
dmFzY3JpcHRSZXN1bHQpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCks
ID09LCAiV2ViS2l0R1RLKyBUaXRsZSIpOworCisgICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3Qt
PnJ1bkphdmFTY3JpcHRGcm9tR1Jlc291cmNlQW5kV2FpdFVudGlsRmluaXNoZWQoIi93cm9uZy9w
YXRoL3RvL3Jlc291cmNlLmpzIiwgJmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fzc2VydCghamF2
YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnRfZXJyb3IoZXJyb3IuZ2V0KCksIEdfUkVTT1VS
Q0VfRVJST1IsIEdfUkVTT1VSQ0VfRVJST1JfTk9UX0ZPVU5EKTsKKyAgICBlcnJvci5jbGVhcigp
OworCisgICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50
aWxGaW5pc2hlZCgiZm9vKCk7IiwgJmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fzc2VydCghamF2
YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnRfZXJyb3IoZXJyb3IuZ2V0KCksIFdFQktJVF9K
QVZBU0NSSVBUX0VSUk9SLCBXRUJLSVRfSkFWQVNDUklQVF9FUlJPUl9TQ1JJUFRfRkFJTEVEKTsK
K30KKworY2xhc3MgRnVsbFNjcmVlbkNsaWVudFRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7Citw
dWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShGdWxsU2NyZWVuQ2xpZW50VGVzdCk7
CisKKyAgICBlbnVtIEZ1bGxTY3JlZW5FdmVudCB7CisgICAgICAgIE5vbmUsCisgICAgICAgIEVu
dGVyLAorICAgICAgICBMZWF2ZQorICAgIH07CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gdmlld0Vu
dGVyRnVsbFNjcmVlbkNhbGxiYWNrKFdlYktpdFdlYlZpZXcqLCBGdWxsU2NyZWVuQ2xpZW50VGVz
dCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPm1fZXZlbnQgPSBFbnRlcjsKKyAgICAgICAg
Z19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICAgICAgcmV0dXJuIEZBTFNF
OworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiB2aWV3TGVhdmVGdWxsU2NyZWVuQ2FsbGJh
Y2soV2ViS2l0V2ViVmlldyosIEZ1bGxTY3JlZW5DbGllbnRUZXN0KiB0ZXN0KQorICAgIHsKKyAg
ICAgICAgdGVzdC0+bV9ldmVudCA9IExlYXZlOworICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRl
c3QtPm1fbWFpbkxvb3ApOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgRnVs
bFNjcmVlbkNsaWVudFRlc3QoKQorICAgICAgICA6IG1fZXZlbnQoTm9uZSkKKyAgICB7CisgICAg
ICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX2Z1bGxzY3JlZW4od2Via2l0X3dlYl92aWV3
X2dldF9zZXR0aW5ncyhtX3dlYlZpZXcpLCBUUlVFKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVj
dChtX3dlYlZpZXcsICJlbnRlci1mdWxsc2NyZWVuIiwgR19DQUxMQkFDSyh2aWV3RW50ZXJGdWxs
U2NyZWVuQ2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZp
ZXcsICJsZWF2ZS1mdWxsc2NyZWVuIiwgR19DQUxMQkFDSyh2aWV3TGVhdmVGdWxsU2NyZWVuQ2Fs
bGJhY2spLCB0aGlzKTsKKyAgICB9CisKKyAgICB+RnVsbFNjcmVlbkNsaWVudFRlc3QoKQorICAg
IHsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fd2ViVmll
dywgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7CisgICAgfQorCisgICAg
dm9pZCByZXF1ZXN0RnVsbFNjcmVlbkFuZFdhaXRVbnRpbEVudGVyZWRGdWxsU2NyZWVuKCkKKyAg
ICB7CisgICAgICAgIG1fZXZlbnQgPSBOb25lOworICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfcnVu
X2phdmFzY3JpcHQobV93ZWJWaWV3LCAiZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LndlYmtpdFJl
cXVlc3RGdWxsU2NyZWVuKCk7IiwgMCwgMCwgMCk7CisgICAgICAgIGdfbWFpbl9sb29wX3J1biht
X21haW5Mb29wKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gbGVhdmVGdWxsU2NyZWVu
SWRsZShGdWxsU2NyZWVuQ2xpZW50VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPmtl
eVN0cm9rZShHREtfS0VZX0VzY2FwZSk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisK
KyAgICB2b2lkIGxlYXZlRnVsbFNjcmVlbkFuZFdhaXRVbnRpbExlZnRGdWxsU2NyZWVuKCkKKyAg
ICB7CisgICAgICAgIG1fZXZlbnQgPSBOb25lOworICAgICAgICBnX2lkbGVfYWRkKHJlaW50ZXJw
cmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KGxlYXZlRnVsbFNjcmVlbklkbGUpLCB0aGlzKTsKKyAgICAg
ICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIEZ1bGxTY3JlZW5F
dmVudCBtX2V2ZW50OworfTsKKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdGdWxsU2NyZWVuKEZ1
bGxTY3JlZW5DbGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPnNo
b3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOworICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRt
bD48Ym9keT5GdWxsU2NyZWVuIHRlc3Q8L2JvZHk+PC9odG1sPiIsIDApOworICAgIHRlc3QtPndh
aXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIHRlc3QtPnJlcXVlc3RGdWxsU2NyZWVuQW5kV2Fp
dFVudGlsRW50ZXJlZEZ1bGxTY3JlZW4oKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9l
dmVudCwgPT0sIEZ1bGxTY3JlZW5DbGllbnRUZXN0OjpFbnRlcik7CisgICAgdGVzdC0+bGVhdmVG
dWxsU2NyZWVuQW5kV2FpdFVudGlsTGVmdEZ1bGxTY3JlZW4oKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQodGVzdC0+bV9ldmVudCwgPT0sIEZ1bGxTY3JlZW5DbGllbnRUZXN0OjpMZWF2ZSk7Cit9CisK
K3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3Q2FuU2hvd01JTUVUeXBlKFdlYlZpZXdUZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQoreworICAgIC8vIFN1cHBvcnRlZCBNSU1FIHR5cGVzLgorICAgIGdf
YXNzZXJ0KHdlYmtpdF93ZWJfdmlld19jYW5fc2hvd19taW1lX3R5cGUodGVzdC0+bV93ZWJWaWV3
LCAidGV4dC9odG1sIikpOworICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19jYW5fc2hvd19t
aW1lX3R5cGUodGVzdC0+bV93ZWJWaWV3LCAidGV4dC9wbGFpbiIpKTsKKyAgICBnX2Fzc2VydCh3
ZWJraXRfd2ViX3ZpZXdfY2FuX3Nob3dfbWltZV90eXBlKHRlc3QtPm1fd2ViVmlldywgImltYWdl
L2pwZWciKSk7CisKKyAgICAvLyBVbnN1cHBvcnRlZCBNSU1FIHR5cGVzLgorICAgIGdfYXNzZXJ0
KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX3Nob3dfbWltZV90eXBlKHRlc3QtPm1fd2ViVmlldywgInRl
eHQvdmNhcmQiKSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fc2hvd19taW1l
X3R5cGUodGVzdC0+bV93ZWJWaWV3LCAiYXBwbGljYXRpb24vcGRmIikpOworICAgIGdfYXNzZXJ0
KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX3Nob3dfbWltZV90eXBlKHRlc3QtPm1fd2ViVmlldywgImFw
cGxpY2F0aW9uL3ppcCIpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9zaG93
X21pbWVfdHlwZSh0ZXN0LT5tX3dlYlZpZXcsICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iKSk7
CisKKyAgICAvLyBQbHVnaW5zIGFyZSBvbmx5IHN1cHBvcnRlZCB3aGVuIGVuYWJsZWQuCisgICAg
d2Via2l0X3dlYl9jb250ZXh0X3NldF9hZGRpdGlvbmFsX3BsdWdpbnNfZGlyZWN0b3J5KHdlYmtp
dF93ZWJfdmlld19nZXRfY29udGV4dCh0ZXN0LT5tX3dlYlZpZXcpLCBXRUJLSVRfVEVTVF9QTFVH
SU5fRElSKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfY2FuX3Nob3dfbWltZV90eXBl
KHRlc3QtPm1fd2ViVmlldywgImFwcGxpY2F0aW9uL3gtd2Via2l0LXRlc3QtbmV0c2NhcGUiKSk7
CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfcGx1Z2lucyh3ZWJraXRfd2ViX3ZpZXdf
Z2V0X3NldHRpbmdzKHRlc3QtPm1fd2ViVmlldyksIEZBTFNFKTsKKyAgICBnX2Fzc2VydCghd2Vi
a2l0X3dlYl92aWV3X2Nhbl9zaG93X21pbWVfdHlwZSh0ZXN0LT5tX3dlYlZpZXcsICJhcHBsaWNh
dGlvbi94LXdlYmtpdC10ZXN0LW5ldHNjYXBlIikpOworfQorCitjbGFzcyBGb3JtQ2xpZW50VGVz
dDogcHVibGljIFdlYlZpZXdUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhU
VVJFKEZvcm1DbGllbnRUZXN0KTsKKworICAgIHN0YXRpYyB2b2lkIHN1Ym1pdEZvcm1DYWxsYmFj
ayhXZWJLaXRXZWJWaWV3KiwgV2ViS2l0Rm9ybVN1Ym1pc3Npb25SZXF1ZXN0KiByZXF1ZXN0LCBG
b3JtQ2xpZW50VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPnN1Ym1pdEZvcm0ocmVx
dWVzdCk7CisgICAgfQorCisgICAgRm9ybUNsaWVudFRlc3QoKQorICAgICAgICA6IG1fc3VibWl0
UG9zaXRpb25YKDApCisgICAgICAgICwgbV9zdWJtaXRQb3NpdGlvblkoMCkKKyAgICB7CisgICAg
ICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAic3VibWl0LWZvcm0iLCBHX0NBTExCQUNL
KHN1Ym1pdEZvcm1DYWxsYmFjayksIHRoaXMpOworICAgIH0KKworICAgIH5Gb3JtQ2xpZW50VGVz
dCgpCisgICAgeworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQo
bV93ZWJWaWV3LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKKyAgICB9
CisKKyAgICB2b2lkIHN1Ym1pdEZvcm0oV2ViS2l0Rm9ybVN1Ym1pc3Npb25SZXF1ZXN0KiByZXF1
ZXN0KQorICAgIHsKKyAgICAgICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hl
cyhHX09CSkVDVChyZXF1ZXN0KSk7CisgICAgICAgIG1fcmVxdWVzdCA9IHJlcXVlc3Q7CisgICAg
ICAgIHdlYmtpdF9mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdF9zdWJtaXQocmVxdWVzdCk7CisgICAg
ICAgIHF1aXRNYWluTG9vcCgpOworICAgIH0KKworICAgIEdIYXNoVGFibGUqIHdhaXRVbnRpbEZv
cm1TdWJtaXR0ZWRBbmRHZXRUZXh0RmllbGRzKCkKKyAgICB7CisgICAgICAgIGdfbWFpbl9sb29w
X3J1bihtX21haW5Mb29wKTsKKyAgICAgICAgcmV0dXJuIHdlYmtpdF9mb3JtX3N1Ym1pc3Npb25f
cmVxdWVzdF9nZXRfdGV4dF9maWVsZHMobV9yZXF1ZXN0LmdldCgpKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgZ2Jvb2xlYW4gZG9DbGlja0lkbGVDYWxsYmFjayhGb3JtQ2xpZW50VGVzdCogdGVzdCkK
KyAgICB7CisgICAgICAgIHRlc3QtPmNsaWNrTW91c2VCdXR0b24odGVzdC0+bV9zdWJtaXRQb3Np
dGlvblgsIHRlc3QtPm1fc3VibWl0UG9zaXRpb25ZLCAxKTsKKyAgICAgICAgcmV0dXJuIEZBTFNF
OworICAgIH0KKworICAgIHZvaWQgc3VibWl0Rm9ybUF0UG9zaXRpb24oaW50IHgsIGludCB5KQor
ICAgIHsKKyAgICAgICAgbV9zdWJtaXRQb3NpdGlvblggPSB4OworICAgICAgICBtX3N1Ym1pdFBv
c2l0aW9uWSA9IHk7CisgICAgICAgIGdfaWRsZV9hZGQocmVpbnRlcnByZXRfY2FzdDxHU291cmNl
RnVuYz4oZG9DbGlja0lkbGVDYWxsYmFjayksIHRoaXMpOworICAgIH0KKworICAgIGludCBtX3N1
Ym1pdFBvc2l0aW9uWDsKKyAgICBpbnQgbV9zdWJtaXRQb3NpdGlvblk7CisgICAgR1JlZlB0cjxX
ZWJLaXRGb3JtU3VibWlzc2lvblJlcXVlc3Q+IG1fcmVxdWVzdDsKK307CisKK3N0YXRpYyB2b2lk
IHRlc3RXZWJWaWV3U3VibWl0Rm9ybShGb3JtQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRl
cikKK3sKKyAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKKworICAg
IGNvbnN0IGNoYXIqIGZvcm1IVE1MID0KKyAgICAgICAgIjxodG1sPjxib2R5PiIKKyAgICAgICAg
IiA8Zm9ybSBhY3Rpb249JyMnPiIKKyAgICAgICAgIiAgPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9
J3RleHQxJyB2YWx1ZT0ndmFsdWUxJz4iCisgICAgICAgICIgIDxpbnB1dCB0eXBlPSd0ZXh0JyBu
YW1lPSd0ZXh0MicgdmFsdWU9J3ZhbHVlMic+IgorICAgICAgICAiICA8aW5wdXQgdHlwZT0ncGFz
c3dvcmQnIG5hbWU9J3Bhc3N3b3JkJyB2YWx1ZT0nc2VjcmV0Jz4iCisgICAgICAgICIgIDx0ZXh0
YXJlYSBjb2xzPSc1JyByb3dzPSc1JyBuYW1lPSd0ZXh0YXJlYSc+VGV4dDwvdGV4dGFyZWE+Igor
ICAgICAgICAiICA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdoaWRkZW4xJyB2YWx1ZT0naGlk
ZGVuMSc+IgorICAgICAgICAiICA8aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nU3VibWl0JyBz
dHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjEnIHNpemU9JzEwJz4iCisgICAg
ICAgICIgPC9mb3JtPiIKKyAgICAgICAgIjwvYm9keT48L2h0bWw+IjsKKworICAgIHRlc3QtPmxv
YWRIdG1sKGZvcm1IVE1MLCAiZmlsZTovLy8iKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmlu
aXNoZWQoKTsKKworICAgIHRlc3QtPnN1Ym1pdEZvcm1BdFBvc2l0aW9uKDUsIDUpOworICAgIEdI
YXNoVGFibGUqIHZhbHVlcyA9IHRlc3QtPndhaXRVbnRpbEZvcm1TdWJtaXR0ZWRBbmRHZXRUZXh0
RmllbGRzKCk7CisgICAgZ19hc3NlcnQodmFsdWVzKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGdf
aGFzaF90YWJsZV9zaXplKHZhbHVlcyksID09LCAzKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc3Rh
dGljX2Nhc3Q8Y2hhcio+KGdfaGFzaF90YWJsZV9sb29rdXAodmFsdWVzLCAidGV4dDEiKSksID09
LCAidmFsdWUxIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHN0YXRpY19jYXN0PGNoYXIqPihnX2hh
c2hfdGFibGVfbG9va3VwKHZhbHVlcywgInRleHQyIikpLCA9PSwgInZhbHVlMiIpOworICAgIGdf
YXNzZXJ0X2NtcHN0cihzdGF0aWNfY2FzdDxjaGFyKj4oZ19oYXNoX3RhYmxlX2xvb2t1cCh2YWx1
ZXMsICJwYXNzd29yZCIpKSwgPT0sICJzZWNyZXQiKTsKK30KKworY2xhc3MgU2F2ZVdlYlZpZXdU
ZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJ
WFRVUkUoU2F2ZVdlYlZpZXdUZXN0KTsKKworICAgIFNhdmVXZWJWaWV3VGVzdCgpCisgICAgICAg
IDogbV90ZW1wRGlyZWN0b3J5KGdfZGlyX21ha2VfdG1wKCJXZWJLaXQyU2F2ZVZpZXdUZXN0LVhY
WFhYWCIsIDApKQorICAgIHsKKyAgICB9CisKKyAgICB+U2F2ZVdlYlZpZXdUZXN0KCkKKyAgICB7
CisgICAgICAgIGlmIChHX0lTX0ZJTEUobV9maWxlLmdldCgpKSkKKyAgICAgICAgICAgIGdfZmls
ZV9kZWxldGUobV9maWxlLmdldCgpLCAwLCAwKTsKKworICAgICAgICBpZiAoR19JU19JTlBVVF9T
VFJFQU0obV9pbnB1dFN0cmVhbS5nZXQoKSkpCisgICAgICAgICAgICBnX2lucHV0X3N0cmVhbV9j
bG9zZShtX2lucHV0U3RyZWFtLmdldCgpLCAwLCAwKTsKKworICAgICAgICBpZiAobV90ZW1wRGly
ZWN0b3J5KQorICAgICAgICAgICAgZ19ybWRpcihtX3RlbXBEaXJlY3RvcnkuZ2V0KCkpOworICAg
IH0KKworICAgIHN0YXRpYyB2b2lkIHdlYlZpZXdTYXZlZFRvU3RyZWFtQ2FsbGJhY2soR09iamVj
dCogb2JqZWN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgU2F2ZVdlYlZpZXdUZXN0KiB0ZXN0KQor
ICAgIHsKKyAgICAgICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAgICAgICB0ZXN0LT5tX2lu
cHV0U3RyZWFtID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJfdmlld19zYXZlX2ZpbmlzaCh0ZXN0LT5t
X3dlYlZpZXcsIHJlc3VsdCwgJmVycm9yLm91dFB0cigpKSk7CisgICAgICAgIGdfYXNzZXJ0KEdf
SVNfSU5QVVRfU1RSRUFNKHRlc3QtPm1faW5wdXRTdHJlYW0uZ2V0KCkpKTsKKyAgICAgICAgZ19h
c3NlcnQoIWVycm9yKTsKKworICAgICAgICB0ZXN0LT5xdWl0TWFpbkxvb3AoKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgdm9pZCB3ZWJWaWV3U2F2ZWRUb0ZpbGVDYWxsYmFjayhHT2JqZWN0KiBvYmpl
Y3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBTYXZlV2ViVmlld1Rlc3QqIHRlc3QpCisgICAgewor
ICAgICAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF93
ZWJfdmlld19zYXZlX3RvX2ZpbGVfZmluaXNoKHRlc3QtPm1fd2ViVmlldywgcmVzdWx0LCAmZXJy
b3Iub3V0UHRyKCkpKTsKKyAgICAgICAgZ19hc3NlcnQoIWVycm9yKTsKKworICAgICAgICB0ZXN0
LT5xdWl0TWFpbkxvb3AoKTsKKyAgICB9CisKKyAgICB2b2lkIHNhdmVBbmRXYWl0Rm9yU3RyZWFt
KCkKKyAgICB7CisgICAgICAgIHdlYmtpdF93ZWJfdmlld19zYXZlKG1fd2ViVmlldywgV0VCS0lU
X1NBVkVfTU9ERV9NSFRNTCwgMCwgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNr
Pih3ZWJWaWV3U2F2ZWRUb1N0cmVhbUNhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIGdfbWFpbl9s
b29wX3J1bihtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICB2b2lkIHNhdmVBbmRXYWl0Rm9yRmls
ZSgpCisgICAgeworICAgICAgICBtX3NhdmVEZXN0aW5hdGlvbkZpbGVQYXRoLnNldChnX2J1aWxk
X2ZpbGVuYW1lKG1fdGVtcERpcmVjdG9yeS5nZXQoKSwgInRlc3RXZWJWaWV3U2F2ZVJlc3VsdC5t
aHQiLCBOVUxMKSk7CisgICAgICAgIG1fZmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9w
YXRoKG1fc2F2ZURlc3RpbmF0aW9uRmlsZVBhdGguZ2V0KCkpKTsKKyAgICAgICAgd2Via2l0X3dl
Yl92aWV3X3NhdmVfdG9fZmlsZShtX3dlYlZpZXcsIG1fZmlsZS5nZXQoKSwgV0VCS0lUX1NBVkVf
TU9ERV9NSFRNTCwgMCwgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPih3ZWJW
aWV3U2F2ZWRUb0ZpbGVDYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX21haW5fbG9vcF9ydW4o
bV9tYWluTG9vcCk7CisgICAgfQorCisgICAgR093blB0cjxjaGFyPiBtX3RlbXBEaXJlY3Rvcnk7
CisgICAgR093blB0cjxjaGFyPiBtX3NhdmVEZXN0aW5hdGlvbkZpbGVQYXRoOworICAgIEdSZWZQ
dHI8R0lucHV0U3RyZWFtPiBtX2lucHV0U3RyZWFtOworICAgIEdSZWZQdHI8R0ZpbGU+IG1fZmls
ZTsKK307CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3U2F2ZShTYXZlV2ViVmlld1Rlc3QqIHRl
c3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPiIKKyAgICAg
ICAgICAgICAgICAgICAiPGJvZHk+IgorICAgICAgICAgICAgICAgICAgICIgIDxwPkEgcGFyYWdy
YXBoIHdpdGggcGxhaW4gdGV4dDwvcD4iCisgICAgICAgICAgICAgICAgICAgIiAgPHA+IgorICAg
ICAgICAgICAgICAgICAgICIgICAgQSByZWQgYm94OiA8aW1nIHNyYz0nZGF0YTppbWFnZS9wbmc7
YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBSUFBQUFDQ0FJQUFBRDkxSnB6QUFBQUNY
QklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDNBWVdEVE1Wd25TWm53QUFBQjFwVkZo
MFEyOXRiV1Z1ZEFBQUFBQUFRM0psWVhSbFpDQjNhWFJvSUVkSlRWQmtMbVVIQUFBQUZrbEVRVlFJ
MTJQOHo4REF3TURBeE1EQXdNREFBQUFOSFFFREsrbW15QUFBQUFCSlJVNUVya0pnZ2c9PSc+PC9i
cj4iCisgICAgICAgICAgICAgICAgICAgIiAgICBBIGJsdWUgYm94OiA8aW1nIHNyYz0nZGF0YTpp
bWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBSUFBQUFDQ0FJQUFBRDkx
SnB6QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDNBWVdEVE12QkhoQUxR
QUFBQjFwVkZoMFEyOXRiV1Z1ZEFBQUFBQUFRM0psWVhSbFpDQjNhWFJvSUVkSlRWQmtMbVVIQUFB
QUZrbEVRVlFJMTJOazRQblB3TURBeE1EQXdNREFBQUFMcndFUFBJczFwZ0FBQUFCSlJVNUVya0pn
Z2c9PSc+IgorICAgICAgICAgICAgICAgICAgICIgIDwvcD4iCisgICAgICAgICAgICAgICAgICAg
IjwvYm9keT4iCisgICAgICAgICAgICAgICAgICAgIjwvaHRtbD4iLCAwKTsKKyAgICB0ZXN0LT53
YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIC8vIFdyaXRlIHRvIGEgZmlsZSBhbmQgdG8g
YW4gaW5wdXQgc3RyZWFtLgorICAgIHRlc3QtPnNhdmVBbmRXYWl0Rm9yRmlsZSgpOworICAgIHRl
c3QtPnNhdmVBbmRXYWl0Rm9yU3RyZWFtKCk7CisKKyAgICAvLyBXZSBzaG91bGQgaGF2ZSBleGFj
dGx5IHRoZSBzYW1lIGFtb3VudCBvZiBieXRlcyBpbiB0aGUgZmlsZQorICAgIC8vIHRoYW4gdGhv
c2UgY29taW5nIGZyb20gdGhlIEdJbnB1dFN0cmVhbS4gV2UgZG9uJ3QgY29tcGFyZSB0aGUKKyAg
ICAvLyBzdHJpbmdzIHJlYWQgc2luY2UgdGhlICdEYXRlJyBmaWVsZCBhbmQgdGhlIGJvdW5kYXJp
ZXMgd2lsbCBiZQorICAgIC8vIGRpZmZlcmVudCBvbiBlYWNoIGNhc2UuIE1IVE1MIGZ1bmN0aW9u
YWxpdHkgd2lsbCBiZSB0ZXN0ZWQgYnkKKyAgICAvLyBMYXlvdXQgdGVzdHMsIHNvIGNoZWNraW5n
IHRoZSBhbW91bnQgb2YgYnl0ZXMgaXMgZW5vdWdoLgorICAgIEdPd25QdHI8R0Vycm9yPiBlcnJv
cjsKKyAgICBnY2hhciBidWZmZXJbNTEyXSA9IHsgMCB9OworICAgIGdzc2l6ZSByZWFkQnl0ZXMg
PSAwOworICAgIGdzc2l6ZSB0b3RhbEJ5dGVzRnJvbVN0cmVhbSA9IDA7CisgICAgd2hpbGUgKHJl
YWRCeXRlcyA9IGdfaW5wdXRfc3RyZWFtX3JlYWQodGVzdC0+bV9pbnB1dFN0cmVhbS5nZXQoKSwg
JmJ1ZmZlciwgNTEyLCAwLCAmZXJyb3Iub3V0UHRyKCkpKSB7CisgICAgICAgIGdfYXNzZXJ0KCFl
cnJvcik7CisgICAgICAgIHRvdGFsQnl0ZXNGcm9tU3RyZWFtICs9IHJlYWRCeXRlczsKKyAgICB9
CisKKyAgICAvLyBDaGVjayB0aGF0IHRoZSBmaWxlIGV4aXN0cyBhbmQgdGhhdCBpdCBjb250YWlu
cyB0aGUgc2FtZSBhbW91bnQgb2YgYnl0ZXMuCisgICAgR1JlZlB0cjxHRmlsZUluZm8+IGZpbGVJ
bmZvID0gYWRvcHRHUmVmKGdfZmlsZV9xdWVyeV9pbmZvKHRlc3QtPm1fZmlsZS5nZXQoKSwgR19G
SUxFX0FUVFJJQlVURV9TVEFOREFSRF9TSVpFLCBzdGF0aWNfY2FzdDxHRmlsZVF1ZXJ5SW5mb0Zs
YWdzPigwKSwgMCwgMCkpOworICAgIGdfYXNzZXJ0X2NtcGludChnX2ZpbGVfaW5mb19nZXRfc2l6
ZShmaWxlSW5mby5nZXQoKSksID09LCB0b3RhbEJ5dGVzRnJvbVN0cmVhbSk7Cit9CisKK3N0YXRp
YyB2b2lkIHRlc3RXZWJWaWV3TW9kZShXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikK
K3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciogaW5kZXhIVE1MID0gIjxodG1sPjxib2R5PjxwPlRl
c3QgV2ViIFZpZXcgTW9kZTwvcD48L2JvZHk+PC9odG1sPiI7CisKKyAgICAvLyBXZWIgbW9kZS4K
KyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF93ZWJfdmlld19nZXRfdmlld19tb2RlKHRlc3Qt
Pm1fd2ViVmlldyksID09LCBXRUJLSVRfVklFV19NT0RFX1dFQik7CisgICAgdGVzdC0+bG9hZEh0
bWwoaW5kZXhIVE1MLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAg
ICBXZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2
YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJ3aW5kb3cuZG9jdW1lbnQuYm9keS50ZXh0Q29u
dGVudDsiLCAwKTsKKyAgICBHT3duUHRyPGNoYXI+IHZhbHVlU3RyaW5nKFdlYlZpZXdUZXN0Ojpq
YXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAiVGVzdCBXZWIgVmlldyBNb2RlIik7CisK
KyAgICAvLyBTb3VyY2UgbW9kZS4KKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X3ZpZXdfbW9kZSh0
ZXN0LT5tX3dlYlZpZXcsIFdFQktJVF9WSUVXX01PREVfU09VUkNFKTsKKyAgICB0ZXN0LT5sb2Fk
SHRtbChpbmRleEhUTUwsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwor
ICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmlu
aXNoZWQoIndpbmRvdy5kb2N1bWVudC5ib2R5LnRleHRDb250ZW50OyIsIDApOworICAgIHZhbHVl
U3RyaW5nLnNldChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZhc2Ny
aXB0UmVzdWx0KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwg
aW5kZXhIVE1MKTsKK30KKworLy8gVG8gdGVzdCBwYWdlIHZpc2liaWxpdHkgQVBJLiBDdXJyZW50
bHkgb25seSAndmlzaWJsZScgYW5kICdoaWRkZW4nIHN0YXRlcyBhcmUgaW1wbGVtZW50ZWQgZnVs
bHkgaW4gV2ViQ29yZS4KKy8vIFNlZSBhbHNvIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvV0Qt
cGFnZS12aXNpYmlsaXR5LTIwMTEwNjAyLyBhbmQgaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5j
b20vY2hyb21lL3doaXRlcGFwZXJzL3BhZ2V2aXNpYmlsaXR5CitzdGF0aWMgdm9pZCB0ZXN0V2Vi
Vmlld1BhZ2VWaXNpYmlsaXR5KFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQorewor
ICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48dGl0bGU+PC90aXRsZT4iCisgICAgICAgICI8Ym9k
eT48cD5UZXN0IFdlYiBQYWdlIFZpc2liaWxpdHk8L3A+IgorICAgICAgICAiPHNjcmlwdD4iCisg
ICAgICAgICJkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwidmlzaWJpbGl0eWNoYW5nZVwiLCBv
blZpc2liaWxpdHlDaGFuZ2UsIGZhbHNlKTsiCisgICAgICAgICJmdW5jdGlvbiBvblZpc2liaWxp
dHlDaGFuZ2UoKSB7IgorICAgICAgICAiICAgIGRvY3VtZW50LnRpdGxlID0gZG9jdW1lbnQudmlz
aWJpbGl0eVN0YXRlOyIKKyAgICAgICAgIn0iCisgICAgICAgICI8L3NjcmlwdD4iCisgICAgICAg
ICI8L2JvZHk+PC9odG1sPiIsCisgICAgICAgIDApOworCisgICAgLy8gV2FpdCB1bnRpbGwgdGhl
IHBhZ2UgaXMgbG9hZGVkLiBJbml0aWFsIHZpc2liaWxpdHkgc2hvdWxkIGJlICdoaWRkZW4nLgor
ICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgR093blB0cjxHRXJyb3I+
IGVycm9yOworICAgIFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQgPSB0
ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImRvY3VtZW50LnZpc2liaWxp
dHlTdGF0ZTsiLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1
bHQpOworICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7CisgICAgR093blB0cjxjaGFyPiB2YWx1
ZVN0cmluZyhXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0
UmVzdWx0KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgImhp
ZGRlbiIpOworCisgICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRX
YWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQuaGlkZGVuOyIsICZlcnJvci5vdXRQdHIoKSk7Cisg
ICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgp
KTsKKyAgICBnX2Fzc2VydChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQm9vbGVhbihq
YXZhc2NyaXB0UmVzdWx0KSk7CisKKyAgICAvLyBTaG93IHRoZSBwYWdlLiBUaGUgdmlzaWJpbGl0
eSBzaG91bGQgYmUgdXBkYXRlZCB0byAndmlzaWJsZScuCisgICAgdGVzdC0+c2hvd0luV2luZG93
KCk7CisgICAgdGVzdC0+d2FpdFVudGlsVGl0bGVDaGFuZ2VkKCk7CisKKyAgICBqYXZhc2NyaXB0
UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVu
dC52aXNpYmlsaXR5U3RhdGU7IiwgJmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fzc2VydChqYXZh
c2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOworICAgIHZhbHVlU3Ry
aW5nLnNldChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0
UmVzdWx0KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgInZp
c2libGUiKTsKKworICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5k
V2FpdFVudGlsRmluaXNoZWQoImRvY3VtZW50LmhpZGRlbjsiLCAmZXJyb3Iub3V0UHRyKCkpOwor
ICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQo
KSk7CisgICAgZ19hc3NlcnQoIVdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9Cb29sZWFu
KGphdmFzY3JpcHRSZXN1bHQpKTsKKworICAgIC8vIEhpZGUgdGhlIHBhZ2UuIFRoZSB2aXNpYmls
aXR5IHNob3VsZCBiZSB1cGRhdGVkIHRvICdoaWRkZW4nLgorICAgIGd0a193aWRnZXRfaGlkZShH
VEtfV0lER0VUKHRlc3QtPm1fd2ViVmlldykpOworICAgIHRlc3QtPndhaXRVbnRpbFRpdGxlQ2hh
bmdlZCgpOworCisgICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRX
YWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlOyIsICZlcnJvci5vdXRQ
dHIoKSk7CisgICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVy
cm9yLmdldCgpKTsKKyAgICB2YWx1ZVN0cmluZy5zZXQoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRS
ZXN1bHRUb0NTdHJpbmcoamF2YXNjcmlwdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih2
YWx1ZVN0cmluZy5nZXQoKSwgPT0sICJoaWRkZW4iKTsKKworICAgIGphdmFzY3JpcHRSZXN1bHQg
PSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImRvY3VtZW50LmhpZGRl
bjsiLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOwor
ICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7CisgICAgZ19hc3NlcnQoV2ViVmlld1Rlc3Q6Omph
dmFzY3JpcHRSZXN1bHRUb0Jvb2xlYW4oamF2YXNjcmlwdFJlc3VsdCkpOworfQorCitjbGFzcyBT
bmFwc2hvdFdlYlZpZXdUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3QgeworcHVibGljOgorICAgIE1B
S0VfR0xJQl9URVNUX0ZJWFRVUkUoU25hcHNob3RXZWJWaWV3VGVzdCk7CisKKyAgICBzdGF0aWMg
dm9pZCBvblNuYXBzaG90Q2FuY2VsbGVkUmVhZHkoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIEdB
c3luY1Jlc3VsdCogcmVzLCBTbmFwc2hvdFdlYlZpZXdUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAg
ICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAgICAgICB0ZXN0LT5tX3N1cmZhY2UgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X3NuYXBzaG90X2ZpbmlzaCh3ZWJfdmlldywgcmVzLCAmZXJyb3Iub3V0
UHRyKCkpOworICAgICAgICBnX2Fzc2VydCghdGVzdC0+bV9zdXJmYWNlKTsKKyAgICAgICAgZ19h
c3NlcnRfZXJyb3IoZXJyb3IuZ2V0KCksIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfQ0FOQ0VMTEVE
KTsKKyAgICAgICAgdGVzdC0+cXVpdE1haW5Mb29wKCk7CisgICAgfQorCisgICAgZ2Jvb2xlYW4g
Z2V0U25hcHNob3RBbmRDYW5jZWwoKQorICAgIHsKKyAgICAgICAgaWYgKG1fc3VyZmFjZSkKKyAg
ICAgICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShtX3N1cmZhY2UpOworICAgICAgICBtX3N1
cmZhY2UgPSAwOworICAgICAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gY2FuY2VsbGFibGUgPSBh
ZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSk7CisgICAgICAgIHdlYmtpdF93ZWJfdmlld19n
ZXRfc25hcHNob3QobV93ZWJWaWV3LCBXRUJLSVRfU05BUFNIT1RfUkVHSU9OX1ZJU0lCTEUsIFdF
QktJVF9TTkFQU0hPVF9PUFRJT05TX05PTkUsIGNhbmNlbGxhYmxlLmdldCgpLCByZWludGVycHJl
dF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KG9uU25hcHNob3RDYW5jZWxsZWRSZWFkeSksIHRo
aXMpOworICAgICAgICBnX2NhbmNlbGxhYmxlX2NhbmNlbChjYW5jZWxsYWJsZS5nZXQoKSk7Cisg
ICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKK307CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3U25hcHNob3QoU25hcHNo
b3RXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkSHRt
bCgiPGh0bWw+PGJvZHk+PHA+V2hhdGV2ZXI8L3A+PC9ib2R5PjwvaHRtbD4iLCAwKTsKKyAgICB0
ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIC8vIFdlYlZpZXcgbm90IHZpc2li
bGUuCisgICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlMSA9IHRlc3QtPmdldFNuYXBzaG90QW5k
V2FpdFVudGlsUmVhZHkoV0VCS0lUX1NOQVBTSE9UX1JFR0lPTl9WSVNJQkxFLCBXRUJLSVRfU05B
UFNIT1RfT1BUSU9OU19OT05FKTsKKyAgICBnX2Fzc2VydCghc3VyZmFjZTEpOworCisgICAgLy8g
U2hvdyBzdXJmYWNlLCByZXNpemUgdG8gNTB4NTAsIHRyeSBhZ2Fpbi4KKyAgICB0ZXN0LT5zaG93
SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKKyAgICB0ZXN0LT5yZXNpemVWaWV3KDUwLCA1
MCk7CisgICAgc3VyZmFjZTEgPSB0ZXN0LT5nZXRTbmFwc2hvdEFuZFdhaXRVbnRpbFJlYWR5KFdF
QktJVF9TTkFQU0hPVF9SRUdJT05fVklTSUJMRSwgV0VCS0lUX1NOQVBTSE9UX09QVElPTlNfTk9O
RSk7CisgICAgZ19hc3NlcnQoc3VyZmFjZTEpOworCisgICAgLy8gb2J0YWluZWQgc3VyZmFjZSBz
aG91bGQgYmUgYXQgdGhlIG1vc3QgNTB4NTAuIFN0b3JlIHRoZSBzaXplCisgICAgLy8gZm9yIGNv
bXBhcmlzb24gbGF0ZXIuCisgICAgaW50IHdpZHRoID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRf
d2lkdGgoc3VyZmFjZTEpOworICAgIGludCBoZWlnaHQgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dl
dF9oZWlnaHQoc3VyZmFjZTEpOworICAgIGdfYXNzZXJ0X2NtcGludCh3aWR0aCwgPD0sIDUwKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoaGVpZ2h0LCA8PSwgNTApOworCisgICAgLy8gU2VsZWN0IGFs
bCB0ZXh0IGluIHRoZSBXZWJWaWV3LCByZXF1ZXN0IGEgc25hcHNob3QgaWdub3Jpbmcgc2VsZWN0
aW9uLgorICAgIHRlc3QtPnNlbGVjdEFsbCgpOworICAgIHN1cmZhY2UxID0gY2Fpcm9fc3VyZmFj
ZV9yZWZlcmVuY2UodGVzdC0+Z2V0U25hcHNob3RBbmRXYWl0VW50aWxSZWFkeShXRUJLSVRfU05B
UFNIT1RfUkVHSU9OX1ZJU0lCTEUsIFdFQktJVF9TTkFQU0hPVF9PUFRJT05TX05PTkUpKTsKKyAg
ICBnX2Fzc2VydChzdXJmYWNlMSk7CisgICAgZ19hc3NlcnRfY21waW50KGNhaXJvX2ltYWdlX3N1
cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UxKSwgPT0sIHdpZHRoKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UxKSwgPT0sIGhlaWdodCk7
CisKKyAgICAvLyBDcmVhdGUgaWRlbnRpY2FsIHN1cmZhY2UuCisgICAgY2Fpcm9fc3VyZmFjZV90
KiBzdXJmYWNlMiA9IHRlc3QtPmdldFNuYXBzaG90QW5kV2FpdFVudGlsUmVhZHkoV0VCS0lUX1NO
QVBTSE9UX1JFR0lPTl9WSVNJQkxFLCBXRUJLSVRfU05BUFNIT1RfT1BUSU9OU19OT05FKTsKKyAg
ICBnX2Fzc2VydChzdXJmYWNlMik7CisKKyAgICAvLyBDb21wYXJlIHRoZXNlIHR3bywgdGhleSBz
aG91bGQgYmUgaWRlbnRpY2FsLgorICAgIGdfYXNzZXJ0KFRlc3Q6OmNhaXJvU3VyZmFjZXNFcXVh
bChzdXJmYWNlMSwgc3VyZmFjZTIpKTsKKworICAgIC8vIFJlcXVlc3QgYSBuZXcgc25hcHNob3Qs
IGluY2x1ZGluZyB0aGUgc2VsZWN0aW9uIHRoaXMgdGltZS4gVGhlCisgICAgLy8gc2l6ZSBzaG91
bGQgYmUgdGhlIHNhbWUgYnV0IHRoZSByZXN1bHQgbXVzdCBiZSBkaWZmZXJlbnQgdG8gdGhlCisg
ICAgLy8gb25lIHByZXZpb3VzbHkgb2J0YWluZWQuCisgICAgc3VyZmFjZTIgPSB0ZXN0LT5nZXRT
bmFwc2hvdEFuZFdhaXRVbnRpbFJlYWR5KFdFQktJVF9TTkFQU0hPVF9SRUdJT05fVklTSUJMRSwg
V0VCS0lUX1NOQVBTSE9UX09QVElPTlNfSU5DTFVERV9TRUxFQ1RJT05fSElHSExJR0hUSU5HKTsK
KyAgICBnX2Fzc2VydChzdXJmYWNlMik7CisgICAgZ19hc3NlcnRfY21waW50KGNhaXJvX2ltYWdl
X3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UyKSwgPT0sIHdpZHRoKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UyKSwgPT0sIGhlaWdo
dCk7CisgICAgZ19hc3NlcnQoIVRlc3Q6OmNhaXJvU3VyZmFjZXNFcXVhbChzdXJmYWNlMSwgc3Vy
ZmFjZTIpKTsKKworICAgIC8vIFJlcXVlc3QgYSBzbmFwc2hvdCBvZiB0aGUgd2hvbGUgZG9jdW1l
bnQgaW4gdGhlIFdlYlZpZXcuIFRoZQorICAgIC8vIHJlc3VsdCBzaG91bGQgYmUgZGlmZmVyZW50
IGZyb20gdGhlIHNpemUgb2J0YWluZWQgcHJldmlvdXNseS4KKyAgICBzdXJmYWNlMiA9IHRlc3Qt
PmdldFNuYXBzaG90QW5kV2FpdFVudGlsUmVhZHkoV0VCS0lUX1NOQVBTSE9UX1JFR0lPTl9GVUxM
X0RPQ1VNRU5ULCBXRUJLSVRfU05BUFNIT1RfT1BUSU9OU19OT05FKTsKKyAgICBnX2Fzc2VydChz
dXJmYWNlMik7CisgICAgZ19hc3NlcnRfY21waW50KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dp
ZHRoKHN1cmZhY2UyKSwgID4sIHdpZHRoKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UyKSwgPiwgaGVpZ2h0KTsKKyAgICBnX2Fzc2Vy
dCghVGVzdDo6Y2Fpcm9TdXJmYWNlc0VxdWFsKHN1cmZhY2UxLCBzdXJmYWNlMikpOworCisgICAg
Y2Fpcm9fc3VyZmFjZV9kZXN0cm95KHN1cmZhY2UxKTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPmdl
dFNuYXBzaG90QW5kQ2FuY2VsKCkpOworfQorCit2b2lkIGJlZm9yZUFsbCgpCit7CisgICAgV2Vi
Vmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJkZWZhdWx0LWNvbnRleHQiLCB0ZXN0V2Vi
Vmlld0RlZmF1bHRDb250ZXh0KTsKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3
IiwgImN1c3RvbS1jaGFyc2V0IiwgdGVzdFdlYlZpZXdDdXN0b21DaGFyc2V0KTsKKyAgICBXZWJW
aWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInNldHRpbmdzIiwgdGVzdFdlYlZpZXdTZXR0
aW5ncyk7CisgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJ6b29tLWxldmVs
IiwgdGVzdFdlYlZpZXdab29tTGV2ZWwpOworICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdl
YlZpZXciLCAicnVuLWphdmFzY3JpcHQiLCB0ZXN0V2ViVmlld1J1bkphdmFTY3JpcHQpOworICAg
IEZ1bGxTY3JlZW5DbGllbnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiZnVsbHNjcmVlbiIs
IHRlc3RXZWJWaWV3RnVsbFNjcmVlbik7CisgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2Vi
VmlldyIsICJjYW4tc2hvdy1taW1lLXR5cGUiLCB0ZXN0V2ViVmlld0NhblNob3dNSU1FVHlwZSk7
CisgICAgRm9ybUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJzdWJtaXQtZm9ybSIs
IHRlc3RXZWJWaWV3U3VibWl0Rm9ybSk7CisgICAgU2F2ZVdlYlZpZXdUZXN0OjphZGQoIldlYktp
dFdlYlZpZXciLCAic2F2ZSIsIHRlc3RXZWJWaWV3U2F2ZSk7CisgICAgV2ViVmlld1Rlc3Q6OmFk
ZCgiV2ViS2l0V2ViVmlldyIsICJ2aWV3LW1vZGUiLCB0ZXN0V2ViVmlld01vZGUpOworICAgIFNu
YXBzaG90V2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJzbmFwc2hvdCIsIHRlc3RX
ZWJWaWV3U25hcHNob3QpOworICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAi
cGFnZS12aXNpYmlsaXR5IiwgdGVzdFdlYlZpZXdQYWdlVmlzaWJpbGl0eSk7Cit9CisKK3ZvaWQg
YWZ0ZXJBbGwoKQoreworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyR3RrL1Rlc3RXZWJLaXRXZWJWaWV3R3JvdXAuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRXZWJWaWV3R3JvdXAuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNmM1YzUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFdlYlZpZXdHcm91cC5j
cHAKQEAgLTAsMCArMSwyMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSWdhbGlhIFMu
TC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIK
KyNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgorI2luY2x1ZGUgPGNzdGRhcmc+CisjaW5jbHVkZSA8
Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgorI2luY2x1ZGUgPHd0Zi9n
b2JqZWN0L0dSZWZQdHIuaD4KKworc3RhdGljIFdlYktpdFRlc3RTZXJ2ZXIqIGtTZXJ2ZXI7CisK
Ky8vIFRoZXNlIGFyZSBhbGwgaGVyZSBzbyB0aGF0IHRoZXkgY2FuIGJlIGNoYW5nZWQgZWFzaWx5
LCBpZiBuZWNlc3NhcnkuCitzdGF0aWMgY29uc3QgY2hhcioga1N0eWxlU2hlZXRIVE1MID0gIjxo
dG1sPjxkaXYgaWQ9XCJzdHlsZWRFbGVtZW50XCI+U3dlZXQgc3R5bGV6ITwvZGl2PjwvaHRtbD4i
Oworc3RhdGljIGNvbnN0IGNoYXIqIGtJbmplY3RlZFN0eWxlU2hlZXQgPSAiI3N0eWxlZEVsZW1l
bnQgeyBmb250LXdlaWdodDogYm9sZDsgfSI7CitzdGF0aWMgY29uc3QgY2hhcioga1N0eWxlU2hl
ZXRUZXN0U2NyaXB0ID0gImdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J3N0eWxlZEVsZW1lbnQnKSlbJ2ZvbnQtd2VpZ2h0J10iOworc3RhdGljIGNvbnN0IGNoYXIqIGtT
dHlsZVNoZWV0VGVzdFNjcmlwdFJlc3VsdCA9ICJib2xkIjsKKworc3RhdGljIHZvaWQgdGVzdFdl
YlZpZXdHcm91cERlZmF1bHQoVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICAvLyBE
ZWZhdWx0IGdyb3VwIGlzIHNoYXJlZCBieSBhbGwgV2ViVmlld3MgYnkgZGVmYXVsdC4KKyAgICBH
UmVmUHRyPFdlYktpdFdlYlZpZXc+IHdlYlZpZXcxID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93
ZWJfdmlld19uZXcoKSk7CisgICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3PiB3ZWJWaWV3MiA9IFdF
QktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdfYXNzZXJ0KHdlYmtp
dF93ZWJfdmlld19nZXRfZ3JvdXAod2ViVmlldzEuZ2V0KCkpID09IHdlYmtpdF93ZWJfdmlld19n
ZXRfZ3JvdXAod2ViVmlldzIuZ2V0KCkpKTsKKworICAgIC8vIFNldHRpbmdzIGFyZSBzaGFyZWQg
YnkgYWxsIHdlYiB2aWV3IGluIHRoZSBzYW1lIGdyb3VwLgorICAgIGdfYXNzZXJ0KHdlYmtpdF93
ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmlldzEuZ2V0KCkpID09IHdlYmtpdF93ZWJfdmlld19n
ZXRfc2V0dGluZ3Mod2ViVmlldzIuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X3NldHRpbmdzKHdlYlZpZXcxLmdldCgpKSA9PSB3ZWJraXRfd2ViX3ZpZXdfZ3JvdXBf
Z2V0X3NldHRpbmdzKHdlYmtpdF93ZWJfdmlld19nZXRfZ3JvdXAod2ViVmlldzIuZ2V0KCkpKSk7
Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3R3JvdXBOZXdHcm91cChUZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQoreworICAgIC8vIFBhc3NpbmcgMCBhcyBncm91cCBuYW1lIGdlbmVyYXRl
cyB0aGUgbmFtZSBhdXRvbWF0aWNhbGx5LgorICAgIEdSZWZQdHI8V2ViS2l0V2ViVmlld0dyb3Vw
PiB2aWV3R3JvdXAxID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJfdmlld19ncm91cF9uZXcoMCkpOwor
ICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1Qo
dmlld0dyb3VwMS5nZXQoKSkpOworICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19ncm91cF9n
ZXRfbmFtZSh2aWV3R3JvdXAxLmdldCgpKSk7CisKKyAgICAvLyBOZXcgZ3JvdXAgd2l0aCBhIGdp
dmVuIG5hbWUuCisgICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3R3JvdXA+IHZpZXdHcm91cDIgPSBh
ZG9wdEdSZWYod2Via2l0X3dlYl92aWV3X2dyb3VwX25ldygiVGVzdEdyb3VwMiIpKTsKKyAgICB0
ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHZpZXdH
cm91cDIuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dyb3Vw
X2dldF9uYW1lKHZpZXdHcm91cDIuZ2V0KCkpLCA9PSwgIlRlc3RHcm91cDIiKTsKKyAgICBnX2Fz
c2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dyb3VwX2dldF9uYW1lKHZpZXdHcm91cDIuZ2V0
KCkpLCAhPSwgd2Via2l0X3dlYl92aWV3X2dyb3VwX2dldF9uYW1lKHZpZXdHcm91cDEuZ2V0KCkp
KTsKKworICAgIC8vIEV2ZXJ5IGdyb3VwIGhhcyBpdHMgb3duIHNldHRpbmdzLgorICAgIGdfYXNz
ZXJ0KHdlYmtpdF93ZWJfdmlld19ncm91cF9nZXRfc2V0dGluZ3Modmlld0dyb3VwMS5nZXQoKSkg
IT0gd2Via2l0X3dlYl92aWV3X2dyb3VwX2dldF9zZXR0aW5ncyh2aWV3R3JvdXAyLmdldCgpKSk7
Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3TmV3V2l0aEdyb3VwKFRlc3QqIHRlc3QsIGdj
b25zdHBvaW50ZXIpCit7CisgICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3R3JvdXA+IHZpZXdHcm91
cDEgPSBhZG9wdEdSZWYod2Via2l0X3dlYl92aWV3X2dyb3VwX25ldygiVGVzdEdyb3VwMSIpKTsK
KyAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNU
KHZpZXdHcm91cDEuZ2V0KCkpKTsKKyAgICBHUmVmUHRyPFdlYktpdFdlYlZpZXc+IHdlYlZpZXcx
ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXdfd2l0aF9ncm91cCh2aWV3R3Jv
dXAxLmdldCgpKSk7CisgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dldF9ncm91cCh3ZWJW
aWV3MS5nZXQoKSkgPT0gdmlld0dyb3VwMS5nZXQoKSk7CisKKyAgICBHUmVmUHRyPFdlYktpdFdl
YlZpZXc+IHdlYlZpZXcyID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7
CisgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dldF9ncm91cCh3ZWJWaWV3Mi5nZXQoKSkg
IT0gdmlld0dyb3VwMS5nZXQoKSk7CisKKyAgICAvLyBTZXR0aW5ncyBzaG91bGQgYmUgZGlmZmVy
ZW50IGZvciB2aWV3cyBpbiBkaWZmZXJlbnQgZ3JvdXBzLgorICAgIGdfYXNzZXJ0KHdlYmtpdF93
ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmlldzEuZ2V0KCkpICE9IHdlYmtpdF93ZWJfdmlld19n
ZXRfc2V0dGluZ3Mod2ViVmlldzIuZ2V0KCkpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZp
ZXdHcm91cFNldHRpbmdzKFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgR1JlZlB0
cjxXZWJLaXRXZWJWaWV3R3JvdXA+IHZpZXdHcm91cDEgPSBhZG9wdEdSZWYod2Via2l0X3dlYl92
aWV3X2dyb3VwX25ldygiVGVzdEdyb3VwMSIpKTsKKyAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0Rl
bGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHZpZXdHcm91cDEuZ2V0KCkpKTsKKyAgICBH
UmVmUHRyPFdlYktpdFNldHRpbmdzPiBuZXdTZXR0aW5ncyA9IGFkb3B0R1JlZih3ZWJraXRfc2V0
dGluZ3NfbmV3X3dpdGhfc2V0dGluZ3MoImVuYWJsZS1qYXZhc2NyaXB0IiwgRkFMU0UsIE5VTEwp
KTsKKyAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JK
RUNUKG5ld1NldHRpbmdzLmdldCgpKSk7CisgICAgd2Via2l0X3dlYl92aWV3X2dyb3VwX3NldF9z
ZXR0aW5ncyh2aWV3R3JvdXAxLmdldCgpLCBuZXdTZXR0aW5ncy5nZXQoKSk7CisgICAgZ19hc3Nl
cnQod2Via2l0X3dlYl92aWV3X2dyb3VwX2dldF9zZXR0aW5ncyh2aWV3R3JvdXAxLmdldCgpKSA9
PSBuZXdTZXR0aW5ncy5nZXQoKSk7CisKKyAgICBHUmVmUHRyPFdlYktpdFdlYlZpZXc+IHdlYlZp
ZXcxID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXdfd2l0aF9ncm91cCh2aWV3
R3JvdXAxLmdldCgpKSk7CisgICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3PiB3ZWJWaWV3MiA9IFdF
QktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIFdlYktpdFNldHRpbmdz
KiB3ZWJWaWV3MVNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3
MS5nZXQoKSk7CisgICAgV2ViS2l0U2V0dGluZ3MqIHdlYlZpZXcyU2V0dGluZ3MgPSB3ZWJraXRf
d2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdlYlZpZXcyLmdldCgpKTsKKyAgICBnX2Fzc2VydCh3ZWJW
aWV3MVNldHRpbmdzICE9IHdlYlZpZXcyU2V0dGluZ3MpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9z
ZXR0aW5nc19nZXRfZW5hYmxlX2phdmFzY3JpcHQod2ViVmlldzFTZXR0aW5ncykgIT0gd2Via2l0
X3NldHRpbmdzX2dldF9lbmFibGVfamF2YXNjcmlwdCh3ZWJWaWV3MlNldHRpbmdzKSk7CisKKyAg
ICB3ZWJraXRfd2ViX3ZpZXdfc2V0X3NldHRpbmdzKHdlYlZpZXcxLmdldCgpLCB3ZWJWaWV3MlNl
dHRpbmdzKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdlYlZp
ZXcxLmdldCgpKSA9PSB3ZWJWaWV3MlNldHRpbmdzKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2Vi
X3ZpZXdfZ3JvdXBfZ2V0X3NldHRpbmdzKHdlYmtpdF93ZWJfdmlld19nZXRfZ3JvdXAod2ViVmll
dzEuZ2V0KCkpKSA9PSB3ZWJWaWV3MlNldHRpbmdzKTsKK30KKworc3RhdGljIGJvb2wgaXNTdHls
ZVNoZWV0SW5qZWN0ZWRGb3JVUkxBdFBhdGgoV2ViVmlld1Rlc3QqIHRlc3QsIGNvbnN0IGNoYXIq
IHBhdGgpCit7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKHBhdGgp
LmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBHT3du
UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCogamF2YXNjcmlw
dFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZChrU3R5bGVT
aGVldFRlc3RTY3JpcHQsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQoamF2YXNjcmlw
dFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKworICAgIEdPd25QdHI8Y2hh
cj4gcmVzdWx0U3RyaW5nKFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGph
dmFzY3JpcHRSZXN1bHQpKTsKKyAgICByZXR1cm4gIWdfc3RyY21wMChyZXN1bHRTdHJpbmcuZ2V0
KCksIGtTdHlsZVNoZWV0VGVzdFNjcmlwdFJlc3VsdCk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGxV
UkxMaXN0RnJvbVBhdGhzKGNoYXIqKiBsaXN0LCBjb25zdCBjaGFyKiBwYXRoLCAuLi4pCit7Cisg
ICAgdmFfbGlzdCBhcmd1bWVudExpc3Q7CisgICAgdmFfc3RhcnQoYXJndW1lbnRMaXN0LCBwYXRo
KTsKKworICAgIGludCBpID0gMDsKKyAgICB3aGlsZSAocGF0aCkgeworICAgICAgICAvLyBGSVhN
RTogV2UgbXVzdCB1c2UgYSB3aWxkY2FyZCBmb3IgdGhlIGhvc3QgaGVyZSB1bnRpbCBodHRwOi8v
d2tidWcuY29tLzExMjQ3NiBpcyBmaXhlZC4KKyAgICAgICAgLy8gVW50aWwgdGhhdCB0aW1lIHBh
dHRlcm5zIHdpdGggcG9ydCBudW1iZXJzIGluIHRoZW0gd2lsbCBub3QgcHJvcGVybHkgbWF0Y2gg
VVJMcyB3aXRoIHBvcnQgbnVtYmVycy4KKyAgICAgICAgbGlzdFtpKytdID0gZ19zdHJkdXBfcHJp
bnRmKCJodHRwOi8vKi8lcyoiLCBwYXRoKTsKKyAgICAgICAgcGF0aCA9IHZhX2FyZyhhcmd1bWVu
dExpc3QsIGNvbnN0IGNoYXIqKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZU9sZElu
amVjdGVkU3R5bGVTaGVldHNBbmRSZXNldExpc3RzKFdlYktpdFdlYlZpZXdHcm91cCogZ3JvdXAs
IGNoYXIqKiB3aGl0ZWxpc3QsIGNoYXIqKiBibGFja2xpc3QpCit7CisgICAgd2Via2l0X3dlYl92
aWV3X2dyb3VwX3JlbW92ZV9hbGxfdXNlcl9zdHlsZV9zaGVldHMoZ3JvdXApOworCisgICAgd2hp
bGUgKCp3aGl0ZWxpc3QpIHsKKyAgICAgICAgZ19mcmVlKCp3aGl0ZWxpc3QpOworICAgICAgICAq
d2hpdGVsaXN0ID0gMDsKKyAgICAgICAgd2hpdGVsaXN0Kys7CisgICAgfQorCisgICAgd2hpbGUg
KCpibGFja2xpc3QpIHsKKyAgICAgICAgZ19mcmVlKCpibGFja2xpc3QpOworICAgICAgICAqYmxh
Y2tsaXN0ID0gMDsKKyAgICAgICAgYmxhY2tsaXN0Kys7CisgICAgfQorfQorCitzdGF0aWMgdm9p
ZCB0ZXN0V2ViVmlld0dyb3VwSW5qZWN0ZWRTdHlsZVNoZWV0KFdlYlZpZXdUZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQoreworICAgIFdlYktpdFdlYlZpZXdHcm91cCogZ3JvdXAgPSB3ZWJraXRf
d2ViX3ZpZXdfZ2V0X2dyb3VwKHRlc3QtPm1fd2ViVmlldyk7CisgICAgY2hhciogd2hpdGVsaXN0
WzNdID0geyAwLCAwLCAwIH07CisgICAgY2hhciogYmxhY2tsaXN0WzNdID0geyAwLCAwLCAwIH07
CisKKyAgICByZW1vdmVPbGRJbmplY3RlZFN0eWxlU2hlZXRzQW5kUmVzZXRMaXN0cyhncm91cCwg
d2hpdGVsaXN0LCBibGFja2xpc3QpOworCisgICAgLy8gV2l0aG91dCBhIHdoaXRlbGlzdCBvciBh
IGJsYWNrbGlzdCBhbGwgVVJMcyBzaG91bGQgaGF2ZSB0aGUgaW5qZWN0ZWQgc3R5bGUgc2hlZXQu
CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHJhbmRvbVBhdGggPSAic29tZXJhbmRvbXBhdGgiOwor
ICAgIGdfYXNzZXJ0KCFpc1N0eWxlU2hlZXRJbmplY3RlZEZvclVSTEF0UGF0aCh0ZXN0LCByYW5k
b21QYXRoKSk7CisgICAgd2Via2l0X3dlYl92aWV3X2dyb3VwX2FkZF91c2VyX3N0eWxlX3NoZWV0
KGdyb3VwLCBrSW5qZWN0ZWRTdHlsZVNoZWV0LCAwLCAwLCAwLCBXRUJLSVRfSU5KRUNURURfQ09O
VEVOVF9GUkFNRVNfQUxMKTsKKyAgICBnX2Fzc2VydChpc1N0eWxlU2hlZXRJbmplY3RlZEZvclVS
TEF0UGF0aCh0ZXN0LCByYW5kb21QYXRoKSk7CisKKyAgICByZW1vdmVPbGRJbmplY3RlZFN0eWxl
U2hlZXRzQW5kUmVzZXRMaXN0cyhncm91cCwgd2hpdGVsaXN0LCBibGFja2xpc3QpOworCisgICAg
ZmlsbFVSTExpc3RGcm9tUGF0aHMoYmxhY2tsaXN0LCByYW5kb21QYXRoLCAwKTsKKyAgICB3ZWJr
aXRfd2ViX3ZpZXdfZ3JvdXBfYWRkX3VzZXJfc3R5bGVfc2hlZXQoZ3JvdXAsIGtJbmplY3RlZFN0
eWxlU2hlZXQsIDAsIDAsIGJsYWNrbGlzdCwgV0VCS0lUX0lOSkVDVEVEX0NPTlRFTlRfRlJBTUVT
X0FMTCk7CisgICAgZ19hc3NlcnQoIWlzU3R5bGVTaGVldEluamVjdGVkRm9yVVJMQXRQYXRoKHRl
c3QsIHJhbmRvbVBhdGgpKTsKKyAgICBnX2Fzc2VydChpc1N0eWxlU2hlZXRJbmplY3RlZEZvclVS
TEF0UGF0aCh0ZXN0LCAic29tZW90aGVycmFuZG9tcGF0aCIpKTsKKworICAgIHJlbW92ZU9sZElu
amVjdGVkU3R5bGVTaGVldHNBbmRSZXNldExpc3RzKGdyb3VwLCB3aGl0ZWxpc3QsIGJsYWNrbGlz
dCk7CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogaW5UaGVXaGl0ZUxpc3QgPSAiaW50aGV3aGl0
ZWxpc3QiOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBub3RJbldoaXRlbGlzdCA9ICJub3RpbnRo
ZXdoaXRlbGlzdCI7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGluVGhlV2hpdGVMaXN0QW5kQmxh
Y2tMaXN0ID0gImludGhld2hpdGVsaXN0YW5kYmxhY2tsaXN0IjsKKworICAgIGZpbGxVUkxMaXN0
RnJvbVBhdGhzKHdoaXRlbGlzdCwgaW5UaGVXaGl0ZUxpc3QsIGluVGhlV2hpdGVMaXN0QW5kQmxh
Y2tMaXN0LCAwKTsKKyAgICBmaWxsVVJMTGlzdEZyb21QYXRocyhibGFja2xpc3QsIGluVGhlV2hp
dGVMaXN0QW5kQmxhY2tMaXN0LCAwKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfZ3JvdXBfYWRkX3Vz
ZXJfc3R5bGVfc2hlZXQoZ3JvdXAsIGtJbmplY3RlZFN0eWxlU2hlZXQsIDAsIHdoaXRlbGlzdCwg
YmxhY2tsaXN0LCBXRUJLSVRfSU5KRUNURURfQ09OVEVOVF9GUkFNRVNfQUxMKTsKKyAgICBnX2Fz
c2VydChpc1N0eWxlU2hlZXRJbmplY3RlZEZvclVSTEF0UGF0aCh0ZXN0LCBpblRoZVdoaXRlTGlz
dCkpOworICAgIGdfYXNzZXJ0KCFpc1N0eWxlU2hlZXRJbmplY3RlZEZvclVSTEF0UGF0aCh0ZXN0
LCBpblRoZVdoaXRlTGlzdEFuZEJsYWNrTGlzdCkpOworICAgIGdfYXNzZXJ0KCFpc1N0eWxlU2hl
ZXRJbmplY3RlZEZvclVSTEF0UGF0aCh0ZXN0LCBub3RJbldoaXRlbGlzdCkpOworCisgICAgLy8g
SXQncyBpbXBvcnRhbnQgdG8gY2xlYW4gdXAgdGhlIGVudmlyb25tZW50IGJlZm9yZSBvdGhlciB0
ZXN0cy4KKyAgICByZW1vdmVPbGRJbmplY3RlZFN0eWxlU2hlZXRzQW5kUmVzZXRMaXN0cyhncm91
cCwgd2hpdGVsaXN0LCBibGFja2xpc3QpOworfQorCitzdGF0aWMgdm9pZCBzZXJ2ZXJDYWxsYmFj
ayhTb3VwU2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBjaGFyKiBw
YXRoLCBHSGFzaFRhYmxlKiwgU291cENsaWVudENvbnRleHQqLCBncG9pbnRlcikKK3sKKyAgICBz
b3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7CisgICAgc291
cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZ
X1NUQVRJQywga1N0eWxlU2hlZXRIVE1MLCBzdHJsZW4oa1N0eWxlU2hlZXRIVE1MKSk7CisgICAg
c291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7Cit9CisK
K3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICBrU2VydmVyID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIo
KTsKKyAgICBrU2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2spOworCisgICAgVGVzdDo6YWRkKCJX
ZWJLaXRXZWJWaWV3R3JvdXAiLCAiZGVmYXVsdC1ncm91cCIsIHRlc3RXZWJWaWV3R3JvdXBEZWZh
dWx0KTsKKyAgICBUZXN0OjphZGQoIldlYktpdFdlYlZpZXdHcm91cCIsICJuZXctZ3JvdXAiLCB0
ZXN0V2ViVmlld0dyb3VwTmV3R3JvdXApOworICAgIFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIs
ICJuZXctd2l0aC1ncm91cCIsIHRlc3RXZWJWaWV3TmV3V2l0aEdyb3VwKTsKKyAgICBUZXN0Ojph
ZGQoIldlYktpdFdlYlZpZXdHcm91cCIsICJzZXR0aW5ncyIsIHRlc3RXZWJWaWV3R3JvdXBTZXR0
aW5ncyk7CisgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlld0dyb3VwIiwgImluamVj
dGVkLXN0eWxlLXNoZWV0IiwgdGVzdFdlYlZpZXdHcm91cEluamVjdGVkU3R5bGVTaGVldCk7Cit9
CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworICAgIGRlbGV0ZSBrU2VydmVyOworfQpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJWaWV3RWRpdG9y
LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViVmlld0Vk
aXRvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMzMTVkYgotLS0g
L2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0
V2ViVmlld0VkaXRvci5jcHAKQEAgLTAsMCArMSwyMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJWaWV3
VGVzdC5oIgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKworY2xhc3MgRWRpdG9y
VGVzdDogcHVibGljIFdlYlZpZXdUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9G
SVhUVVJFKEVkaXRvclRlc3QpOworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBrQ2xp
cGJvYXJkV2FpdFRpbWVvdXQgPSA1MDsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGtD
bGlwYm9hcmRXYWl0TWF4VHJpZXMgPSAyOworCisgICAgRWRpdG9yVGVzdCgpCisgICAgICAgIDog
bV9jbGlwYm9hcmQoZ3RrX2NsaXBib2FyZF9nZXQoR0RLX1NFTEVDVElPTl9DTElQQk9BUkQpKQor
ICAgICAgICAsIG1fY2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kKGZhbHNlKQorICAgICAgICAsIG1f
dHJpZXNDb3VudCgwKQorICAgIHsKKyAgICAgICAgZ3RrX2NsaXBib2FyZF9jbGVhcihtX2NsaXBi
b2FyZCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgY2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5k
UmVhZHlDYWxsYmFjayhHT2JqZWN0KiwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIEVkaXRvclRlc3Qq
IHRlc3QpCisgICAgeworICAgICAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgICAgIHRl
c3QtPm1fY2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kID0gd2Via2l0X3dlYl92aWV3X2Nhbl9leGVj
dXRlX2VkaXRpbmdfY29tbWFuZF9maW5pc2godGVzdC0+bV93ZWJWaWV3LCByZXN1bHQsICZlcnJv
ci5vdXRQdHIoKSk7CisgICAgICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7CisgICAgICAgIGdf
bWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7CisgICAgfQorCisgICAgYm9vbCBjYW5F
eGVjdXRlRWRpdGluZ0NvbW1hbmQoY29uc3QgY2hhciogY29tbWFuZCkKKyAgICB7CisgICAgICAg
IG1fY2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kID0gZmFsc2U7CisgICAgICAgIHdlYmtpdF93ZWJf
dmlld19jYW5fZXhlY3V0ZV9lZGl0aW5nX2NvbW1hbmQobV93ZWJWaWV3LCBjb21tYW5kLCAwLCBy
ZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KGNhbkV4ZWN1dGVFZGl0aW5nQ29t
bWFuZFJlYWR5Q2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFp
bkxvb3ApOworICAgICAgICByZXR1cm4gbV9jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQ7CisgICAg
fQorCisgICAgc3RhdGljIGdib29sZWFuIHdhaXRGb3JDbGlwYm9hcmRUZXh0KEVkaXRvclRlc3Qq
IHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT5tX3RyaWVzQ291bnQrKzsKKyAgICAgICAgaWYg
KGd0a19jbGlwYm9hcmRfd2FpdF9pc190ZXh0X2F2YWlsYWJsZSh0ZXN0LT5tX2NsaXBib2FyZCkg
fHwgdGVzdC0+bV90cmllc0NvdW50ID4ga0NsaXBib2FyZFdhaXRNYXhUcmllcykgeworICAgICAg
ICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICAgICAgICAgIHJl
dHVybiBGQUxTRTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKwor
ICAgIHZvaWQgY29weUNsaXBib2FyZCgpCisgICAgeworICAgICAgICB3ZWJraXRfd2ViX3ZpZXdf
ZXhlY3V0ZV9lZGl0aW5nX2NvbW1hbmQobV93ZWJWaWV3LCBXRUJLSVRfRURJVElOR19DT01NQU5E
X0NPUFkpOworICAgICAgICAvLyBUaGVyZSdzIG5vIHdheSB0byBrbm93IHdoZW4gdGhlIHNlbGVj
dGlvbiBoYXMgYmVlbiBjb3BpZWQgdG8KKyAgICAgICAgLy8gdGhlIGNsaXBib2FyZCwgc28gdXNl
IGEgdGltZW91dCBzb3VyY2UgdG8gcXVlcnkgdGhlIGNsaXBib2FyZC4KKyAgICAgICAgbV90cmll
c0NvdW50ID0gMDsKKyAgICAgICAgZ190aW1lb3V0X2FkZChrQ2xpcGJvYXJkV2FpdFRpbWVvdXQs
IHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHdhaXRGb3JDbGlwYm9hcmRUZXh0KSwgdGhp
cyk7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBH
dGtDbGlwYm9hcmQqIG1fY2xpcGJvYXJkOworICAgIGJvb2wgbV9jYW5FeGVjdXRlRWRpdGluZ0Nv
bW1hbmQ7CisgICAgc2l6ZV90IG1fdHJpZXNDb3VudDsKK307CisKK3N0YXRpYyB2b2lkIHRlc3RX
ZWJWaWV3RWRpdG9yQ3V0Q29weVBhc3RlTm9uRWRpdGFibGUoRWRpdG9yVGVzdCogdGVzdCwgZ2Nv
bnN0cG9pbnRlcikKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciogc2VsZWN0ZWRTcGFuSFRNTCA9
ICI8aHRtbD48Ym9keSBjb250ZW50RWRpdGFibGU9XCJmYWxzZVwiPiIKKyAgICAgICAgIjxzcGFu
IGlkPVwibWFpbnNwYW5cIj5BbGwgd29yayBhbmQgbm8gcGxheSA8c3BhbiBpZD1cInN1YnNwYW5c
Ij5tYWtlIEphY2sgYSBkdWxsPC9zcGFuPiBib3kuPC9zcGFuPiIKKyAgICAgICAgIjxzY3JpcHQ+
ZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkuY29sbGFwc2UoKTtcbiIKKyAgICAgICAgImRvY3VtZW50
LmdldFNlbGVjdGlvbigpLnNlbGVjdEFsbENoaWxkcmVuKGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdzdWJzcGFuJykpO1xuIgorICAgICAgICAiPC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4iOworCisg
ICAgLy8gTm90aGluZyBsb2FkZWQgeWV0LgorICAgIGdfYXNzZXJ0KCF0ZXN0LT5jYW5FeGVjdXRl
RWRpdGluZ0NvbW1hbmQoV0VCS0lUX0VESVRJTkdfQ09NTUFORF9DVVQpKTsKKyAgICBnX2Fzc2Vy
dCghdGVzdC0+Y2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kKFdFQktJVF9FRElUSU5HX0NPTU1BTkRf
Q09QWSkpOworICAgIGdfYXNzZXJ0KCF0ZXN0LT5jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQoV0VC
S0lUX0VESVRJTkdfQ09NTUFORF9QQVNURSkpOworCisgICAgdGVzdC0+bG9hZEh0bWwoc2VsZWN0
ZWRTcGFuSFRNTCwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAg
ICBnX2Fzc2VydCh0ZXN0LT5jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQoV0VCS0lUX0VESVRJTkdf
Q09NTUFORF9DT1BZKSk7CisgICAgLy8gSXQncyBub3QgcG9zc2libGUgdG8gY3V0IGFuZCBwYXN0
ZSB3aGVuIGNvbnRlbnQgaXMgbm90IGVkaXRhYmxlCisgICAgLy8gZXZlbiBpZiB0aGVyZSdzIGEg
c2VsZWN0aW9uLgorICAgIGdfYXNzZXJ0KCF0ZXN0LT5jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQo
V0VCS0lUX0VESVRJTkdfQ09NTUFORF9DVVQpKTsKKyAgICBnX2Fzc2VydCghdGVzdC0+Y2FuRXhl
Y3V0ZUVkaXRpbmdDb21tYW5kKFdFQktJVF9FRElUSU5HX0NPTU1BTkRfUEFTVEUpKTsKKworICAg
IHRlc3QtPmNvcHlDbGlwYm9hcmQoKTsKKyAgICBHT3duUHRyPGNoYXI+IGNsaXBib2FyZFRleHQo
Z3RrX2NsaXBib2FyZF93YWl0X2Zvcl90ZXh0KHRlc3QtPm1fY2xpcGJvYXJkKSk7CisgICAgZ19h
c3NlcnRfY21wc3RyKGNsaXBib2FyZFRleHQuZ2V0KCksID09LCAibWFrZSBKYWNrIGEgZHVsbCIp
OworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0VkaXRvckN1dENvcHlQYXN0ZUVkaXRhYmxl
KEVkaXRvclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgc3RhdGljIGNvbnN0IGNo
YXIqIHNlbGVjdGVkU3BhbkhUTUwgPSAiPGh0bWw+PGJvZHkgY29udGVudEVkaXRhYmxlPVwidHJ1
ZVwiPiIKKyAgICAgICAgIjxzcGFuIGlkPVwibWFpbnNwYW5cIj5BbGwgd29yayBhbmQgbm8gcGxh
eSA8c3Bhbj5tYWtlIEphY2sgYSBkdWxsPC9zcGFuPiBib3kuPC9zcGFuPiIKKyAgICAgICAgIjxz
Y3JpcHQ+ZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkuY29sbGFwc2UoKTtcbiIKKyAgICAgICAgImRv
Y3VtZW50LmdldFNlbGVjdGlvbigpLnNlbGVjdEFsbENoaWxkcmVuKGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdtYWluc3BhbicpKTtcbiIKKyAgICAgICAgIjwvc2NyaXB0PjwvYm9keT48L2h0bWw+
IjsKKworICAgIC8vIE5vdGhpbmcgbG9hZGVkIHlldC4KKyAgICBnX2Fzc2VydCghdGVzdC0+Y2Fu
RXhlY3V0ZUVkaXRpbmdDb21tYW5kKFdFQktJVF9FRElUSU5HX0NPTU1BTkRfQ1VUKSk7CisgICAg
Z19hc3NlcnQoIXRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElOR19D
T01NQU5EX0NPUFkpKTsKKyAgICBnX2Fzc2VydCghdGVzdC0+Y2FuRXhlY3V0ZUVkaXRpbmdDb21t
YW5kKFdFQktJVF9FRElUSU5HX0NPTU1BTkRfUEFTVEUpKTsKKworICAgIHRlc3QtPmxvYWRIdG1s
KHNlbGVjdGVkU3BhbkhUTUwsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgp
OworCisgICAgLy8gVGhlcmUncyBhIHNlbGVjdGlvbi4KKyAgICBnX2Fzc2VydCh0ZXN0LT5jYW5F
eGVjdXRlRWRpdGluZ0NvbW1hbmQoV0VCS0lUX0VESVRJTkdfQ09NTUFORF9DVVQpKTsKKyAgICBn
X2Fzc2VydCh0ZXN0LT5jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQoV0VCS0lUX0VESVRJTkdfQ09N
TUFORF9DT1BZKSk7CisgICAgZ19hc3NlcnQodGVzdC0+Y2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5k
KFdFQktJVF9FRElUSU5HX0NPTU1BTkRfUEFTVEUpKTsKKworICAgIHRlc3QtPmNvcHlDbGlwYm9h
cmQoKTsKKyAgICBHT3duUHRyPGNoYXI+IGNsaXBib2FyZFRleHQoZ3RrX2NsaXBib2FyZF93YWl0
X2Zvcl90ZXh0KHRlc3QtPm1fY2xpcGJvYXJkKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGNsaXBi
b2FyZFRleHQuZ2V0KCksID09LCAiQWxsIHdvcmsgYW5kIG5vIHBsYXkgbWFrZSBKYWNrIGEgZHVs
bCBib3kuIik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3RWRpdG9yU2VsZWN0QWxsTm9u
RWRpdGFibGUoRWRpdG9yVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBzdGF0aWMg
Y29uc3QgY2hhciogc2VsZWN0ZWRTcGFuSFRNTCA9ICI8aHRtbD48Ym9keSBjb250ZW50RWRpdGFi
bGU9XCJmYWxzZVwiPiIKKyAgICAgICAgIjxzcGFuIGlkPVwibWFpbnNwYW5cIj5BbGwgd29yayBh
bmQgbm8gcGxheSA8c3BhbiBpZD1cInN1YnNwYW5cIj5tYWtlIEphY2sgYSBkdWxsPC9zcGFuPiBi
b3kuPC9zcGFuPiIKKyAgICAgICAgIjxzY3JpcHQ+ZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkuY29s
bGFwc2UoKTtcbiIKKyAgICAgICAgImRvY3VtZW50LmdldFNlbGVjdGlvbigpLnNlbGVjdEFsbENo
aWxkcmVuKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdWJzcGFuJykpO1xuIgorICAgICAgICAi
PC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4iOworCisgICAgZ19hc3NlcnQodGVzdC0+Y2FuRXhlY3V0
ZUVkaXRpbmdDb21tYW5kKFdFQktJVF9FRElUSU5HX0NPTU1BTkRfU0VMRUNUX0FMTCkpOworCisg
ICAgdGVzdC0+bG9hZEh0bWwoc2VsZWN0ZWRTcGFuSFRNTCwgMCk7CisgICAgdGVzdC0+d2FpdFVu
dGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCh0ZXN0LT5jYW5FeGVjdXRlRWRpdGlu
Z0NvbW1hbmQoV0VCS0lUX0VESVRJTkdfQ09NTUFORF9TRUxFQ1RfQUxMKSk7CisKKyAgICB0ZXN0
LT5jb3B5Q2xpcGJvYXJkKCk7CisgICAgR093blB0cjxjaGFyPiBjbGlwYm9hcmRUZXh0KGd0a19j
bGlwYm9hcmRfd2FpdF9mb3JfdGV4dCh0ZXN0LT5tX2NsaXBib2FyZCkpOworCisgICAgLy8gSW5p
dGlhbGx5IG9ubHkgdGhlIHN1YnNwYW4gaXMgc2VsZWN0ZWQuCisgICAgZ19hc3NlcnRfY21wc3Ry
KGNsaXBib2FyZFRleHQuZ2V0KCksID09LCAibWFrZSBKYWNrIGEgZHVsbCIpOworCisgICAgd2Vi
a2l0X3dlYl92aWV3X2V4ZWN1dGVfZWRpdGluZ19jb21tYW5kKHRlc3QtPm1fd2ViVmlldywgV0VC
S0lUX0VESVRJTkdfQ09NTUFORF9TRUxFQ1RfQUxMKTsKKyAgICB0ZXN0LT5jb3B5Q2xpcGJvYXJk
KCk7CisgICAgY2xpcGJvYXJkVGV4dC5zZXQoZ3RrX2NsaXBib2FyZF93YWl0X2Zvcl90ZXh0KHRl
c3QtPm1fY2xpcGJvYXJkKSk7CisKKyAgICAvLyBUaGUgbWFpbnNwYW4gc2hvdWxkIGJlIHNlbGVj
dGVkIGFmdGVyIGNhbGxpbmcgU0VMRUNUX0FMTC4KKyAgICBnX2Fzc2VydF9jbXBzdHIoY2xpcGJv
YXJkVGV4dC5nZXQoKSwgPT0sICJBbGwgd29yayBhbmQgbm8gcGxheSBtYWtlIEphY2sgYSBkdWxs
IGJveS4iKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdFZGl0b3JTZWxlY3RBbGxFZGl0
YWJsZShFZGl0b3JUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHN0YXRpYyBjb25z
dCBjaGFyKiBzZWxlY3RlZFNwYW5IVE1MID0gIjxodG1sPjxib2R5IGNvbnRlbnRFZGl0YWJsZT1c
InRydWVcIj4iCisgICAgICAgICI8c3BhbiBpZD1cIm1haW5zcGFuXCI+QWxsIHdvcmsgYW5kIG5v
IHBsYXkgPHNwYW4gaWQ9XCJzdWJzcGFuXCI+bWFrZSBKYWNrIGEgZHVsbDwvc3Bhbj4gYm95Ljwv
c3Bhbj4iCisgICAgICAgICI8c2NyaXB0PmRvY3VtZW50LmdldFNlbGVjdGlvbigpLmNvbGxhcHNl
KCk7XG4iCisgICAgICAgICJkb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJl
bihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3Vic3BhbicpKTtcbiIKKyAgICAgICAgIjwvc2Ny
aXB0PjwvYm9keT48L2h0bWw+IjsKKworICAgIGdfYXNzZXJ0KHRlc3QtPmNhbkV4ZWN1dGVFZGl0
aW5nQ29tbWFuZChXRUJLSVRfRURJVElOR19DT01NQU5EX1NFTEVDVF9BTEwpKTsKKworICAgIHRl
c3QtPmxvYWRIdG1sKHNlbGVjdGVkU3BhbkhUTUwsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExv
YWRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQodGVzdC0+Y2FuRXhlY3V0ZUVkaXRpbmdDb21t
YW5kKFdFQktJVF9FRElUSU5HX0NPTU1BTkRfU0VMRUNUX0FMTCkpOworCisgICAgdGVzdC0+Y29w
eUNsaXBib2FyZCgpOworICAgIEdPd25QdHI8Y2hhcj4gY2xpcGJvYXJkVGV4dChndGtfY2xpcGJv
YXJkX3dhaXRfZm9yX3RleHQodGVzdC0+bV9jbGlwYm9hcmQpKTsKKworICAgIC8vIEluaXRpYWxs
eSBvbmx5IHRoZSBzdWJzcGFuIGlzIHNlbGVjdGVkLgorICAgIGdfYXNzZXJ0X2NtcHN0cihjbGlw
Ym9hcmRUZXh0LmdldCgpLCA9PSwgIm1ha2UgSmFjayBhIGR1bGwiKTsKKworICAgIHdlYmtpdF93
ZWJfdmlld19leGVjdXRlX2VkaXRpbmdfY29tbWFuZCh0ZXN0LT5tX3dlYlZpZXcsIFdFQktJVF9F
RElUSU5HX0NPTU1BTkRfU0VMRUNUX0FMTCk7CisgICAgdGVzdC0+Y29weUNsaXBib2FyZCgpOwor
ICAgIGNsaXBib2FyZFRleHQuc2V0KGd0a19jbGlwYm9hcmRfd2FpdF9mb3JfdGV4dCh0ZXN0LT5t
X2NsaXBib2FyZCkpOworCisgICAgLy8gVGhlIG1haW5zcGFuIHNob3VsZCBiZSBzZWxlY3RlZCBh
ZnRlciBjYWxsaW5nIFNFTEVDVF9BTEwuCisgICAgZ19hc3NlcnRfY21wc3RyKGNsaXBib2FyZFRl
eHQuZ2V0KCksID09LCAiQWxsIHdvcmsgYW5kIG5vIHBsYXkgbWFrZSBKYWNrIGEgZHVsbCBib3ku
Iik7Cit9CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICBFZGl0b3JUZXN0OjphZGQoIldlYktp
dFdlYlZpZXciLCAiY3V0LWNvcHktcGFzdGUvbm9uLWVkaXRhYmxlIiwgdGVzdFdlYlZpZXdFZGl0
b3JDdXRDb3B5UGFzdGVOb25FZGl0YWJsZSk7CisgICAgRWRpdG9yVGVzdDo6YWRkKCJXZWJLaXRX
ZWJWaWV3IiwgImN1dC1jb3B5LXBhc3RlL2VkaXRhYmxlIiwgdGVzdFdlYlZpZXdFZGl0b3JDdXRD
b3B5UGFzdGVFZGl0YWJsZSk7CisgICAgRWRpdG9yVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3Iiwg
InNlbGVjdC1hbGwvbm9uLWVkaXRhYmxlIiwgdGVzdFdlYlZpZXdFZGl0b3JTZWxlY3RBbGxOb25F
ZGl0YWJsZSk7CisgICAgRWRpdG9yVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInNlbGVjdC1h
bGwvZWRpdGFibGUiLCB0ZXN0V2ViVmlld0VkaXRvclNlbGVjdEFsbEVkaXRhYmxlKTsKK30KKwor
dm9pZCBhZnRlckFsbCgpCit7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdDJHdGsvV2ViRXh0ZW5zaW9uVGVzdC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdDJHdGsvV2ViRXh0ZW5zaW9uVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMDIxMmUyYgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9XZWJFeHRlbnNpb25UZXN0LmNwcApAQCAtMCwwICsx
LDI2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NvbnRleHRSZWYuaD4KKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0ci5oPgorI2luY2x1ZGUgPGdpby9naW8u
aD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx3
ZWJraXQyL3dlYmtpdC13ZWItZXh0ZW5zaW9uLmg+CisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+Cisj
aW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5j
bHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3N0YXRpYyBjb25zdCBjaGFy
IGludHJvc3BlY3Rpb25YTUxbXSA9CisgICAgIjxub2RlPiIKKyAgICAiIDxpbnRlcmZhY2UgbmFt
ZT0nb3JnLndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9uVGVzdCc+IgorICAgICIgIDxtZXRob2QgbmFt
ZT0nR2V0VGl0bGUnPiIKKyAgICAiICAgPGFyZyB0eXBlPSd0JyBuYW1lPSdwYWdlSUQnIGRpcmVj
dGlvbj0naW4nLz4iCisgICAgIiAgIDxhcmcgdHlwZT0ncycgbmFtZT0ndGl0bGUnIGRpcmVjdGlv
bj0nb3V0Jy8+IgorICAgICIgIDwvbWV0aG9kPiIKKyAgICAiICA8bWV0aG9kIG5hbWU9J0Fib3J0
UHJvY2Vzcyc+IgorICAgICIgIDwvbWV0aG9kPiIKKyAgICAiICA8bWV0aG9kIG5hbWU9J1J1bkph
dmFTY3JpcHRJbklzb2xhdGVkV29ybGQnPiIKKyAgICAiICAgPGFyZyB0eXBlPSd0JyBuYW1lPSdw
YWdlSUQnIGRpcmVjdGlvbj0naW4nLz4iCisgICAgIiAgIDxhcmcgdHlwZT0ncycgbmFtZT0nc2Ny
aXB0JyBkaXJlY3Rpb249J2luJy8+IgorICAgICIgIDwvbWV0aG9kPiIKKyAgICAiICA8c2lnbmFs
IG5hbWU9J0RvY3VtZW50TG9hZGVkJy8+IgorICAgICIgIDxzaWduYWwgbmFtZT0nVVJJQ2hhbmdl
ZCc+IgorICAgICIgICA8YXJnIHR5cGU9J3MnIG5hbWU9J3VyaScgZGlyZWN0aW9uPSdvdXQnLz4i
CisgICAgIiAgPC9zaWduYWw+IgorICAgICIgPC9pbnRlcmZhY2U+IgorICAgICI8L25vZGU+IjsK
KwordHlwZWRlZiBlbnVtIHsKKyAgICBEb2N1bWVudExvYWRlZFNpZ25hbCwKKyAgICBVUklDaGFu
Z2VkU2lnbmFsLAorfSBEZWxheWVkU2lnbmFsVHlwZTsKKworc3RydWN0IERlbGF5ZWRTaWduYWwg
eworICAgIERlbGF5ZWRTaWduYWwoRGVsYXllZFNpZ25hbFR5cGUgdHlwZSkKKyAgICAgICAgOiB0
eXBlKHR5cGUpCisgICAgeworICAgIH0KKworICAgIERlbGF5ZWRTaWduYWwoRGVsYXllZFNpZ25h
bFR5cGUgdHlwZSwgY29uc3QgY2hhciogdXJpKQorICAgICAgICA6IHR5cGUodHlwZSkKKyAgICAg
ICAgLCB1cmkodXJpKQorICAgIHsKKyAgICB9CisKKyAgICBEZWxheWVkU2lnbmFsVHlwZSB0eXBl
OworICAgIENTdHJpbmcgdXJpOworfTsKKworRGVxdWU8T3duUHRyPERlbGF5ZWRTaWduYWw+PiBk
ZWxheWVkU2lnbmFsc1F1ZXVlOworCitzdGF0aWMgdm9pZCBlbWl0RG9jdW1lbnRMb2FkZWQoR0RC
dXNDb25uZWN0aW9uKiBjb25uZWN0aW9uKQoreworICAgIGJvb2wgb2sgPSBnX2RidXNfY29ubmVj
dGlvbl9lbWl0X3NpZ25hbCgKKyAgICAgICAgY29ubmVjdGlvbiwKKyAgICAgICAgMCwKKyAgICAg
ICAgIi9vcmcvd2Via2l0L2d0ay9XZWJFeHRlbnNpb25UZXN0IiwKKyAgICAgICAgIm9yZy53ZWJr
aXQuZ3RrLldlYkV4dGVuc2lvblRlc3QiLAorICAgICAgICAiRG9jdW1lbnRMb2FkZWQiLAorICAg
ICAgICAwLAorICAgICAgICAwKTsKKyAgICBnX2Fzc2VydChvayk7Cit9CisKK3N0YXRpYyB2b2lk
IGRvY3VtZW50TG9hZGVkQ2FsbGJhY2soV2ViS2l0V2ViUGFnZSosIFdlYktpdFdlYkV4dGVuc2lv
biogZXh0ZW5zaW9uKQoreworICAgIGdwb2ludGVyIGRhdGEgPSBnX29iamVjdF9nZXRfZGF0YShH
X09CSkVDVChleHRlbnNpb24pLCAiZGJ1cy1jb25uZWN0aW9uIik7CisgICAgaWYgKGRhdGEpCisg
ICAgICAgIGVtaXREb2N1bWVudExvYWRlZChHX0RCVVNfQ09OTkVDVElPTihkYXRhKSk7CisgICAg
ZWxzZQorICAgICAgICBkZWxheWVkU2lnbmFsc1F1ZXVlLmFwcGVuZChhZG9wdFB0cihuZXcgRGVs
YXllZFNpZ25hbChEb2N1bWVudExvYWRlZFNpZ25hbCkpKTsKK30KKworc3RhdGljIHZvaWQgZW1p
dFVSSUNoYW5nZWQoR0RCdXNDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBjb25zdCBjaGFyKiB1cmkp
Cit7CisgICAgYm9vbCBvayA9IGdfZGJ1c19jb25uZWN0aW9uX2VtaXRfc2lnbmFsKAorICAgICAg
ICBjb25uZWN0aW9uLAorICAgICAgICAwLAorICAgICAgICAiL29yZy93ZWJraXQvZ3RrL1dlYkV4
dGVuc2lvblRlc3QiLAorICAgICAgICAib3JnLndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9uVGVzdCIs
CisgICAgICAgICJVUklDaGFuZ2VkIiwKKyAgICAgICAgZ192YXJpYW50X25ldygiKHMpIiwgdXJp
KSwKKyAgICAgICAgMCk7CisgICAgZ19hc3NlcnQob2spOworfQorCitzdGF0aWMgdm9pZCB1cmlD
aGFuZ2VkQ2FsbGJhY2soV2ViS2l0V2ViUGFnZSogd2ViUGFnZSwgR1BhcmFtU3BlYyogcHNwZWMs
IFdlYktpdFdlYkV4dGVuc2lvbiogZXh0ZW5zaW9uKQoreworICAgIGdwb2ludGVyIGRhdGEgPSBn
X29iamVjdF9nZXRfZGF0YShHX09CSkVDVChleHRlbnNpb24pLCAiZGJ1cy1jb25uZWN0aW9uIik7
CisgICAgaWYgKGRhdGEpCisgICAgICAgIGVtaXRVUklDaGFuZ2VkKEdfREJVU19DT05ORUNUSU9O
KGRhdGEpLCB3ZWJraXRfd2ViX3BhZ2VfZ2V0X3VyaSh3ZWJQYWdlKSk7CisgICAgZWxzZQorICAg
ICAgICBkZWxheWVkU2lnbmFsc1F1ZXVlLmFwcGVuZChhZG9wdFB0cihuZXcgRGVsYXllZFNpZ25h
bChVUklDaGFuZ2VkU2lnbmFsLCB3ZWJraXRfd2ViX3BhZ2VfZ2V0X3VyaSh3ZWJQYWdlKSkpKTsK
K30KKworc3RhdGljIGdib29sZWFuIHNlbmRSZXF1ZXN0Q2FsbGJhY2soV2ViS2l0V2ViUGFnZSos
IFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QsIFdlYktpdFVSSVJlc3BvbnNlKiwgZ3BvaW50ZXIp
Cit7CisgICAgY29uc3QgY2hhciogcmVxdWVzdFVSSSA9IHdlYmtpdF91cmlfcmVxdWVzdF9nZXRf
dXJpKHJlcXVlc3QpOworICAgIGdfYXNzZXJ0KHJlcXVlc3RVUkkpOworCisgICAgaWYgKGNvbnN0
IGNoYXIqIHN1ZmZpeCA9IGdfc3RycnN0cihyZXF1ZXN0VVJJLCAiL3JlbW92ZS10aGlzL2phdmFz
Y3JpcHQuanMiKSkgeworICAgICAgICBHT3duUHRyPGNoYXI+IHByZWZpeChnX3N0cm5kdXAocmVx
dWVzdFVSSSwgc3RybGVuKHJlcXVlc3RVUkkpIC0gc3RybGVuKHN1ZmZpeCkpKTsKKyAgICAgICAg
R093blB0cjxjaGFyPiBuZXdVUkkoZ19zdHJkdXBfcHJpbnRmKCIlcy9qYXZhc2NyaXB0LmpzIiwg
cHJlZml4LmdldCgpKSk7CisgICAgICAgIHdlYmtpdF91cmlfcmVxdWVzdF9zZXRfdXJpKHJlcXVl
c3QsIG5ld1VSSS5nZXQoKSk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9oYXNfc3VmZml4KHJlcXVl
c3RVUkksICIvYWRkLWRvLW5vdC10cmFjay1oZWFkZXIiKSkgeworICAgICAgICBTb3VwTWVzc2Fn
ZUhlYWRlcnMqIGhlYWRlcnMgPSB3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X2h0dHBfaGVhZGVycyhy
ZXF1ZXN0KTsKKyAgICAgICAgZ19hc3NlcnQoaGVhZGVycyk7CisgICAgICAgIHNvdXBfbWVzc2Fn
ZV9oZWFkZXJzX2FwcGVuZChoZWFkZXJzLCAiRE5UIiwgIjEiKTsKKyAgICB9IGVsc2UgaWYgKGdf
c3RyX2hhc19zdWZmaXgocmVxdWVzdFVSSSwgIi9jYW5jZWwtdGhpcy5qcyIpKQorICAgICAgICBy
ZXR1cm4gVFJVRTsKKworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgcGFnZUNy
ZWF0ZWRDYWxsYmFjayhXZWJLaXRXZWJFeHRlbnNpb24qIGV4dGVuc2lvbiwgV2ViS2l0V2ViUGFn
ZSogd2ViUGFnZSwgZ3BvaW50ZXIpCit7CisgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJQYWdlLCAi
ZG9jdW1lbnQtbG9hZGVkIiwgR19DQUxMQkFDSyhkb2N1bWVudExvYWRlZENhbGxiYWNrKSwgZXh0
ZW5zaW9uKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlBhZ2UsICJub3RpZnk6OnVyaSIsIEdf
Q0FMTEJBQ0sodXJpQ2hhbmdlZENhbGxiYWNrKSwgZXh0ZW5zaW9uKTsKKyAgICBnX3NpZ25hbF9j
b25uZWN0KHdlYlBhZ2UsICJzZW5kLXJlcXVlc3QiLCBHX0NBTExCQUNLKHNlbmRSZXF1ZXN0Q2Fs
bGJhY2spLCAwKTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgZWNob0NhbGxiYWNrKEpTQ29udGV4
dFJlZiBqc0NvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiwgc2l6ZV90IGFyZ3VtZW50
Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqKQoreworICAg
IGlmIChhcmd1bWVudENvdW50IDw9IDApCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChqc0NvbnRleHQpOworCisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHN0cmluZyhB
ZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShqc0NvbnRleHQsIGFyZ3VtZW50c1swXSwgMCkpOwor
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVN0cmluZyhqc0NvbnRleHQsIHN0cmluZy5nZXQoKSk7Cit9
CisKK3N0YXRpYyB2b2lkIHdpbmRvd09iamVjdENsZWFyZWQoV2ViS2l0U2NyaXB0V29ybGQqIHdv
cmxkLCBXZWJLaXRXZWJQYWdlKiBwYWdlLCBXZWJLaXRGcmFtZSogZnJhbWUsIGdwb2ludGVyKQor
eworICAgIEpTR2xvYmFsQ29udGV4dFJlZiBqc0NvbnRleHQgPSB3ZWJraXRfZnJhbWVfZ2V0X2ph
dmFzY3JpcHRfY29udGV4dF9mb3Jfc2NyaXB0X3dvcmxkKGZyYW1lLCB3b3JsZCk7CisgICAgZ19h
c3NlcnQoanNDb250ZXh0KTsKKyAgICBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QgPSBKU0NvbnRl
eHRHZXRHbG9iYWxPYmplY3QoanNDb250ZXh0KTsKKyAgICBnX2Fzc2VydChnbG9iYWxPYmplY3Qp
OworCisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGZ1bmN0aW9uTmFtZShBZG9wdCwgSlNT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImVjaG8iKSk7CisgICAgSlNPYmplY3RSZWYgZnVu
Y3Rpb24gPSBKU09iamVjdE1ha2VGdW5jdGlvbldpdGhDYWxsYmFjayhqc0NvbnRleHQsIGZ1bmN0
aW9uTmFtZS5nZXQoKSwgZWNob0NhbGxiYWNrKTsKKyAgICBKU09iamVjdFNldFByb3BlcnR5KGpz
Q29udGV4dCwgZ2xvYmFsT2JqZWN0LCBmdW5jdGlvbk5hbWUuZ2V0KCksIGZ1bmN0aW9uLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5
LCAwKTsKK30KKworc3RhdGljIFdlYktpdFdlYlBhZ2UqIGdldFdlYlBhZ2UoV2ViS2l0V2ViRXh0
ZW5zaW9uKiBleHRlbnNpb24sIHVpbnQ2NF90IHBhZ2VJRCwgR0RCdXNNZXRob2RJbnZvY2F0aW9u
KiBpbnZvY2F0aW9uKQoreworICAgIFdlYktpdFdlYlBhZ2UqIHBhZ2UgPSB3ZWJraXRfd2ViX2V4
dGVuc2lvbl9nZXRfcGFnZShleHRlbnNpb24sIHBhZ2VJRCk7CisgICAgaWYgKCFwYWdlKSB7Cisg
ICAgICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fZXJyb3IoCisgICAgICAgICAg
ICBpbnZvY2F0aW9uLCBHX0RCVVNfRVJST1IsIEdfREJVU19FUlJPUl9JTlZBTElEX0FSR1MsCisg
ICAgICAgICAgICAiSW52YWxpZCBwYWdlIElEOiAlIiBHX0dVSU5UNjRfRk9STUFULCBwYWdlSUQp
OworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtp
dF93ZWJfcGFnZV9nZXRfaWQocGFnZSksID09LCBwYWdlSUQpOworICAgIHJldHVybiBwYWdlOwor
fQorCitzdGF0aWMgdm9pZCBtZXRob2RDYWxsQ2FsbGJhY2soR0RCdXNDb25uZWN0aW9uKiBjb25u
ZWN0aW9uLCBjb25zdCBjaGFyKiBzZW5kZXIsIGNvbnN0IGNoYXIqIG9iamVjdFBhdGgsIGNvbnN0
IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG1ldGhvZE5hbWUsIEdWYXJpYW50KiBw
YXJhbWV0ZXJzLCBHREJ1c01ldGhvZEludm9jYXRpb24qIGludm9jYXRpb24sIGdwb2ludGVyIHVz
ZXJEYXRhKQoreworICAgIGlmIChnX3N0cmNtcDAoaW50ZXJmYWNlTmFtZSwgIm9yZy53ZWJraXQu
Z3RrLldlYkV4dGVuc2lvblRlc3QiKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFnX3N0
cmNtcDAobWV0aG9kTmFtZSwgIkdldFRpdGxlIikpIHsKKyAgICAgICAgdWludDY0X3QgcGFnZUlE
OworICAgICAgICBnX3ZhcmlhbnRfZ2V0KHBhcmFtZXRlcnMsICIodCkiLCAmcGFnZUlEKTsKKyAg
ICAgICAgV2ViS2l0V2ViUGFnZSogcGFnZSA9IGdldFdlYlBhZ2UoV0VCS0lUX1dFQl9FWFRFTlNJ
T04odXNlckRhdGEpLCBwYWdlSUQsIGludm9jYXRpb24pOworICAgICAgICBpZiAoIXBhZ2UpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50
ID0gd2Via2l0X3dlYl9wYWdlX2dldF9kb21fZG9jdW1lbnQocGFnZSk7CisgICAgICAgIEdPd25Q
dHI8Y2hhcj4gdGl0bGUod2Via2l0X2RvbV9kb2N1bWVudF9nZXRfdGl0bGUoZG9jdW1lbnQpKTsK
KyAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVybl92YWx1ZShpbnZvY2F0aW9u
LCBnX3ZhcmlhbnRfbmV3KCIocykiLCB0aXRsZS5nZXQoKSkpOworICAgIH0gZWxzZSBpZiAoIWdf
c3RyY21wMChtZXRob2ROYW1lLCAiUnVuSmF2YVNjcmlwdEluSXNvbGF0ZWRXb3JsZCIpKSB7Cisg
ICAgICAgIHVpbnQ2NF90IHBhZ2VJRDsKKyAgICAgICAgY29uc3QgY2hhciogc2NyaXB0OworICAg
ICAgICBnX3ZhcmlhbnRfZ2V0KHBhcmFtZXRlcnMsICIodCZzKSIsICZwYWdlSUQsICZzY3JpcHQp
OworICAgICAgICBXZWJLaXRXZWJQYWdlKiBwYWdlID0gZ2V0V2ViUGFnZShXRUJLSVRfV0VCX0VY
VEVOU0lPTih1c2VyRGF0YSksIHBhZ2VJRCwgaW52b2NhdGlvbik7CisgICAgICAgIGlmICghcGFn
ZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBHUmVmUHRyPFdlYktpdFNjcmlwdFdv
cmxkPiB3b3JsZCA9IGFkb3B0R1JlZih3ZWJraXRfc2NyaXB0X3dvcmxkX25ldygpKTsKKyAgICAg
ICAgZ19hc3NlcnQod2Via2l0X3NjcmlwdF93b3JsZF9nZXRfZGVmYXVsdCgpICE9IHdvcmxkLmdl
dCgpKTsKKyAgICAgICAgV2ViS2l0RnJhbWUqIGZyYW1lID0gd2Via2l0X3dlYl9wYWdlX2dldF9t
YWluX2ZyYW1lKHBhZ2UpOworICAgICAgICBKU0dsb2JhbENvbnRleHRSZWYganNDb250ZXh0ID0g
d2Via2l0X2ZyYW1lX2dldF9qYXZhc2NyaXB0X2NvbnRleHRfZm9yX3NjcmlwdF93b3JsZChmcmFt
ZSwgd29ybGQuZ2V0KCkpOworICAgICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4ganNTY3Jp
cHQoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHNjcmlwdCkpOworICAgICAg
ICBKU0V2YWx1YXRlU2NyaXB0KGpzQ29udGV4dCwganNTY3JpcHQuZ2V0KCksIDAsIDAsIDAsIDAp
OworICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9jYXRpb25fcmV0dXJuX3ZhbHVlKGludm9jYXRp
b24sIDApOworICAgIH0gZWxzZSBpZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAiQWJvcnRQcm9j
ZXNzIikpIHsKKyAgICAgICAgYWJvcnQoKTsKKyAgICB9Cit9CisKK3N0YXRpYyBjb25zdCBHREJ1
c0ludGVyZmFjZVZUYWJsZSBpbnRlcmZhY2VWaXJ0dWFsVGFibGUgPSB7CisgICAgbWV0aG9kQ2Fs
bENhbGxiYWNrLCAwLCAwLCB7IDAsIH0KK307CisKK3N0YXRpYyB2b2lkIGJ1c0FjcXVpcmVkQ2Fs
bGJhY2soR0RCdXNDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBjb25zdCBjaGFyKiBuYW1lLCBncG9p
bnRlciB1c2VyRGF0YSkKK3sKKyAgICBzdGF0aWMgR0RCdXNOb2RlSW5mbyAqaW50cm9zcGVjdGlv
bkRhdGEgPSAwOworICAgIGlmICghaW50cm9zcGVjdGlvbkRhdGEpCisgICAgICAgIGludHJvc3Bl
Y3Rpb25EYXRhID0gZ19kYnVzX25vZGVfaW5mb19uZXdfZm9yX3htbChpbnRyb3NwZWN0aW9uWE1M
LCAwKTsKKworICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICB1bnNpZ25lZCByZWdpc3Ry
YXRpb25JRCA9IGdfZGJ1c19jb25uZWN0aW9uX3JlZ2lzdGVyX29iamVjdCgKKyAgICAgICAgY29u
bmVjdGlvbiwKKyAgICAgICAgIi9vcmcvd2Via2l0L2d0ay9XZWJFeHRlbnNpb25UZXN0IiwKKyAg
ICAgICAgaW50cm9zcGVjdGlvbkRhdGEtPmludGVyZmFjZXNbMF0sCisgICAgICAgICZpbnRlcmZh
Y2VWaXJ0dWFsVGFibGUsCisgICAgICAgIGdfb2JqZWN0X3JlZih1c2VyRGF0YSksCisgICAgICAg
IHN0YXRpY19jYXN0PEdEZXN0cm95Tm90aWZ5PihnX29iamVjdF91bnJlZiksCisgICAgICAgICZl
cnJvci5vdXRQdHIoKSk7CisgICAgaWYgKCFyZWdpc3RyYXRpb25JRCkKKyAgICAgICAgZ193YXJu
aW5nKCJGYWlsZWQgdG8gcmVnaXN0ZXIgb2JqZWN0OiAlc1xuIiwgZXJyb3ItPm1lc3NhZ2UpOwor
CisgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QodXNlckRhdGEpLCAiZGJ1cy1jb25uZWN0
aW9uIiwgY29ubmVjdGlvbik7CisgICAgd2hpbGUgKGRlbGF5ZWRTaWduYWxzUXVldWUuc2l6ZSgp
KSB7CisgICAgICAgIE93blB0cjxEZWxheWVkU2lnbmFsPiBkZWxheWVkU2lnbmFsID0gZGVsYXll
ZFNpZ25hbHNRdWV1ZS50YWtlRmlyc3QoKTsKKyAgICAgICAgc3dpdGNoIChkZWxheWVkU2lnbmFs
LT50eXBlKSB7CisgICAgICAgIGNhc2UgRG9jdW1lbnRMb2FkZWRTaWduYWw6CisgICAgICAgICAg
ICBlbWl0RG9jdW1lbnRMb2FkZWQoY29ubmVjdGlvbik7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBVUklDaGFuZ2VkU2lnbmFsOgorICAgICAgICAgICAgZW1pdFVSSUNoYW5nZWQo
Y29ubmVjdGlvbiwgZGVsYXllZFNpZ25hbC0+dXJpLmRhdGEoKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgIH0KK30KKworZXh0ZXJuICJDIiB2b2lkIHdlYmtpdF93ZWJfZXh0
ZW5zaW9uX2luaXRpYWxpemUoV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24pCit7CisgICAg
Z19zaWduYWxfY29ubmVjdChleHRlbnNpb24sICJwYWdlLWNyZWF0ZWQiLCBHX0NBTExCQUNLKHBh
Z2VDcmVhdGVkQ2FsbGJhY2spLCBleHRlbnNpb24pOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2Vi
a2l0X3NjcmlwdF93b3JsZF9nZXRfZGVmYXVsdCgpLCAid2luZG93LW9iamVjdC1jbGVhcmVkIiwg
R19DQUxMQkFDSyh3aW5kb3dPYmplY3RDbGVhcmVkKSwgMCk7CisKKyAgICBnX2J1c19vd25fbmFt
ZSgKKyAgICAgICAgR19CVVNfVFlQRV9TRVNTSU9OLAorICAgICAgICAib3JnLndlYmtpdC5ndGsu
V2ViRXh0ZW5zaW9uVGVzdCIsCisgICAgICAgIEdfQlVTX05BTUVfT1dORVJfRkxBR1NfTk9ORSwK
KyAgICAgICAgYnVzQWNxdWlyZWRDYWxsYmFjaywKKyAgICAgICAgMCwgMCwKKyAgICAgICAgZ19v
YmplY3RfcmVmKGV4dGVuc2lvbiksCisgICAgICAgIHN0YXRpY19jYXN0PEdEZXN0cm95Tm90aWZ5
PihnX29iamVjdF91bnJlZikpOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXQyR3RrL1dlYlByb2Nlc3NUZXN0LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Mkd0ay9XZWJQcm9jZXNzVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZDkxYTZlNwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9XZWJQcm9jZXNzVGVzdC5jcHAKQEAgLTAsMCArMSwxMDYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3NUZXN0LmgiCisKKyNpbmNsdWRlIDxnaW8vZ2lvLmg+
CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorCit0eXBlZGVmIEhhc2hNYXA8U3Ry
aW5nLCBzdGQ6OmZ1bmN0aW9uPFBhc3NPd25QdHI8V2ViUHJvY2Vzc1Rlc3Q+ICgpPj4gVGVzdHNN
YXA7CitzdGF0aWMgVGVzdHNNYXAmIHRlc3RzTWFwKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKFRlc3RzTWFwLCBzX3Rlc3RzTWFwLCAoKSk7CisgICAgcmV0dXJuIHNfdGVzdHNNYXA7Cit9
CisKK3ZvaWQgV2ViUHJvY2Vzc1Rlc3Q6OmFkZChjb25zdCBTdHJpbmcmIHRlc3ROYW1lLCBzdGQ6
OmZ1bmN0aW9uPFBhc3NPd25QdHI8V2ViUHJvY2Vzc1Rlc3Q+ICgpPiBjbG9zdXJlKQoreworICAg
IHRlc3RzTWFwKCkuYWRkKHRlc3ROYW1lLCBzdGQ6OmZvcndhcmQ8c3RkOjpmdW5jdGlvbjxQYXNz
T3duUHRyPFdlYlByb2Nlc3NUZXN0PiAoKT4+KGNsb3N1cmUpKTsKK30KKworUGFzc093blB0cjxX
ZWJQcm9jZXNzVGVzdD4gV2ViUHJvY2Vzc1Rlc3Q6OmNyZWF0ZShjb25zdCBTdHJpbmcmIHRlc3RO
YW1lKQoreworICAgIGdfYXNzZXJ0KHRlc3RzTWFwKCkuY29udGFpbnModGVzdE5hbWUpKTsKKyAg
ICByZXR1cm4gdGVzdHNNYXAoKS5nZXQodGVzdE5hbWUpKCk7Cit9CisKK3N0YXRpYyBjb25zdCBj
aGFyIGludHJvc3BlY3Rpb25YTUxbXSA9CisgICAgIjxub2RlPiIKKyAgICAiIDxpbnRlcmZhY2Ug
bmFtZT0nb3JnLndlYmtpdC5ndGsuV2ViUHJvY2Vzc1Rlc3QnPiIKKyAgICAiICA8bWV0aG9kIG5h
bWU9J1J1blRlc3QnPiIKKyAgICAiICAgPGFyZyB0eXBlPSdzJyBuYW1lPSdwYXRoJyBkaXJlY3Rp
b249J2luJy8+IgorICAgICIgICA8YXJnIHR5cGU9J2F7c3Z9JyBuYW1lPSdhcmdzJyBkaXJlY3Rp
b249J2luJy8+IgorICAgICIgICA8YXJnIHR5cGU9J2InIG5hbWU9J3Jlc3VsdCcgZGlyZWN0aW9u
PSdvdXQnLz4iCisgICAgIiAgPC9tZXRob2Q+IgorICAgICIgPC9pbnRlcmZhY2U+IgorICAgICI8
L25vZGU+IjsKKworc3RhdGljIHZvaWQgbWV0aG9kQ2FsbENhbGxiYWNrKEdEQnVzQ29ubmVjdGlv
biogY29ubmVjdGlvbiwgY29uc3QgY2hhciogc2VuZGVyLCBjb25zdCBjaGFyKiBvYmplY3RQYXRo
LCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBtZXRob2ROYW1lLCBHVmFy
aWFudCogcGFyYW1ldGVycywgR0RCdXNNZXRob2RJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBncG9p
bnRlciB1c2VyRGF0YSkKK3sKKyAgICBpZiAoZ19zdHJjbXAwKGludGVyZmFjZU5hbWUsICJvcmcu
d2Via2l0Lmd0ay5XZWJQcm9jZXNzVGVzdCIpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
IWdfc3RyY21wMChtZXRob2ROYW1lLCAiUnVuVGVzdCIpKSB7CisgICAgICAgIGNvbnN0IGNoYXIq
IHRlc3RQYXRoOworICAgICAgICBHVmFyaWFudCogYXJnczsKKyAgICAgICAgZ192YXJpYW50X2dl
dChwYXJhbWV0ZXJzLCAiKCZzQGF7c3Z9KSIsICZ0ZXN0UGF0aCwgJmFyZ3MpOworICAgICAgICBP
d25QdHI8V2ViUHJvY2Vzc1Rlc3Q+IHRlc3QgPSBXZWJQcm9jZXNzVGVzdDo6Y3JlYXRlKFN0cmlu
Zzo6ZnJvbVVURjgodGVzdFBhdGgpKTsKKyAgICAgICAgYm9vbCByZXN1bHQgPSB0ZXN0LT5ydW5U
ZXN0KGdfc3RycnN0cih0ZXN0UGF0aCwgIi8iKSArIDEsIFdFQktJVF9XRUJfRVhURU5TSU9OKHVz
ZXJEYXRhKSwgYXJncyk7CisgICAgICAgIGdfdmFyaWFudF91bnJlZihhcmdzKTsKKworICAgICAg
ICBnX2RidXNfbWV0aG9kX2ludm9jYXRpb25fcmV0dXJuX3ZhbHVlKGludm9jYXRpb24sIGdfdmFy
aWFudF9uZXcoIihiKSIsIHJlc3VsdCkpOworICAgIH0gZWxzZQorICAgICAgICBnX2Fzc2VydF9u
b3RfcmVhY2hlZCgpOworfQorCitzdGF0aWMgY29uc3QgR0RCdXNJbnRlcmZhY2VWVGFibGUgaW50
ZXJmYWNlVmlydHVhbFRhYmxlID0geworICAgIG1ldGhvZENhbGxDYWxsYmFjaywgMCwgMCwgeyAw
LCB9Cit9OworCitzdGF0aWMgdm9pZCBidXNBY3F1aXJlZENhbGxiYWNrKEdEQnVzQ29ubmVjdGlv
biogY29ubmVjdGlvbiwgY29uc3QgY2hhciogbmFtZSwgZ3BvaW50ZXIgdXNlckRhdGEpCit7Cisg
ICAgc3RhdGljIEdEQnVzTm9kZUluZm8gKmludHJvc3BlY3Rpb25EYXRhID0gMDsKKyAgICBpZiAo
IWludHJvc3BlY3Rpb25EYXRhKQorICAgICAgICBpbnRyb3NwZWN0aW9uRGF0YSA9IGdfZGJ1c19u
b2RlX2luZm9fbmV3X2Zvcl94bWwoaW50cm9zcGVjdGlvblhNTCwgMCk7CisKKyAgICBHT3duUHRy
PEdFcnJvcj4gZXJyb3I7CisgICAgdW5zaWduZWQgcmVnaXN0cmF0aW9uSUQgPSBnX2RidXNfY29u
bmVjdGlvbl9yZWdpc3Rlcl9vYmplY3QoCisgICAgICAgIGNvbm5lY3Rpb24sCisgICAgICAgICIv
b3JnL3dlYmtpdC9ndGsvV2ViUHJvY2Vzc1Rlc3QiLAorICAgICAgICBpbnRyb3NwZWN0aW9uRGF0
YS0+aW50ZXJmYWNlc1swXSwKKyAgICAgICAgJmludGVyZmFjZVZpcnR1YWxUYWJsZSwKKyAgICAg
ICAgZ19vYmplY3RfcmVmKHVzZXJEYXRhKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8R0Rlc3Ryb3lO
b3RpZnk+KGdfb2JqZWN0X3VucmVmKSwKKyAgICAgICAgJmVycm9yLm91dFB0cigpKTsKKyAgICBp
ZiAoIXJlZ2lzdHJhdGlvbklEKQorICAgICAgICBnX3dhcm5pbmcoIkZhaWxlZCB0byByZWdpc3Rl
ciBvYmplY3Q6ICVzXG4iLCBlcnJvci0+bWVzc2FnZSk7Cit9CisKK2V4dGVybiAiQyIgdm9pZCB3
ZWJraXRfd2ViX2V4dGVuc2lvbl9pbml0aWFsaXplKFdlYktpdFdlYkV4dGVuc2lvbiogZXh0ZW5z
aW9uKQoreworICAgIGdfYnVzX293bl9uYW1lKAorICAgICAgICBHX0JVU19UWVBFX1NFU1NJT04s
CisgICAgICAgICJvcmcud2Via2l0Lmd0ay5XZWJQcm9jZXNzVGVzdCIsCisgICAgICAgIEdfQlVT
X05BTUVfT1dORVJfRkxBR1NfTk9ORSwKKyAgICAgICAgYnVzQWNxdWlyZWRDYWxsYmFjaywKKyAg
ICAgICAgMCwgMCwKKyAgICAgICAgZ19vYmplY3RfcmVmKGV4dGVuc2lvbiksCisgICAgICAgIHN0
YXRpY19jYXN0PEdEZXN0cm95Tm90aWZ5PihnX29iamVjdF91bnJlZikpOworfQpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1dlYlByb2Nlc3NUZXN0Lmgg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvV2ViUHJvY2Vzc1Rlc3QuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2VlZGQwCi0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1dlYlByb2Nlc3NUZXN0
LmgKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJZ2FsaWEgUy5M
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQtd2ViLWV4dGVuc2lvbi5oPgorI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYv
Z29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitjbGFzcyBXZWJQcm9jZXNzVGVzdCB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB+V2ViUHJvY2Vzc1Rlc3QoKSB7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgcnVuVGVzdChjb25zdCBjaGFyKiB0ZXN0TmFtZSwgV2ViS2l0V2ViRXh0ZW5zaW9uKiwgR1Zh
cmlhbnQqIGFyZ3MpID0gMDsKKworICAgIHN0YXRpYyB2b2lkIGFkZChjb25zdCBTdHJpbmcmIHRl
c3ROYW1lLCBzdGQ6OmZ1bmN0aW9uPFBhc3NPd25QdHI8V2ViUHJvY2Vzc1Rlc3Q+ICgpPik7Cisg
ICAgc3RhdGljIFBhc3NPd25QdHI8V2ViUHJvY2Vzc1Rlc3Q+IGNyZWF0ZShjb25zdCBTdHJpbmcm
IHRlc3ROYW1lKTsKK307CisKKyNkZWZpbmUgUkVHSVNURVJfVEVTVChDbGFzc05hbWUsIFRlc3RO
YW1lKSBcCisgICAgV2ViUHJvY2Vzc1Rlc3Q6OmFkZChTdHJpbmc6OmZyb21VVEY4KFRlc3ROYW1l
KSwgQ2xhc3NOYW1lOjpjcmVhdGUpCisKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Mkd0ay9yZXNvdXJjZXMvbGluay10aXRsZS5qcyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9yZXNvdXJjZXMvbGluay10aXRsZS5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzgyNGRhCi0tLSAvZGV2L251bGwKKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL3Jlc291cmNlcy9saW5rLXRpdGxlLmpz
CkBAIC0wLDAgKzEgQEAKK3dpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnV2ViS2l0TGlu
aycpLnRpdGxlOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQy
R3RrL3Jlc291cmNlcy90ZXN0LWNlcnQucGVtIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyR3RrL3Jlc291cmNlcy90ZXN0LWNlcnQucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmIzNDMwMWYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdDJHdGsvcmVzb3VyY2VzL3Rlc3QtY2VydC5wZW0KQEAgLTAsMCArMSwx
MyBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlCOWpDQ0FWK2dBd0lCQWdJSkFM
ZXVYQm8rdnd6OU1BMEdDU3FHU0liM0RRRUJCUVVBTUJReEVqQVFCZ05WCitCQU1NQ1RFeU55NHdM
akF1TVRBZUZ3MHhNakEzTVRJeE1qUTRNalJhRncweU1qQTNNVEF4TWpRNE1qUmFNQlF4CitFakFR
QmdOVkJBTU1DVEV5Tnk0d0xqQXVNVENCbnpBTkJna3Foa2lHOXcwQkFRRUZBQU9CalFBd2dZa0Nn
WUVBCiswVFV6T1F4SEJJS0REMm1rdXErdFU5Mm1RdkRaZzczQjBHK05ocjJUMkc2TWJjTHFJd2pn
MVFZdEJaV0o4M3RaCit4TU1FZml3ZUhMRjg1WjlvaGF2QWd4SmxLRzdZbXZaTzc5S2tGcG1qVjJX
NUNWUm0wZVlNUG56bXhOQ29hWXFvCitETGwwenNINktaT0xQS3UvZlg0ZURYOVhwQVAxZjgzaFdC
MVVGQm1IS044Q0F3RUFBYU5RTUU0d0hRWURWUjBPCitCQllFRkRIdjVaUTFCZG1oelRzRFVFb1k1
NUVYeVVkS01COEdBMVVkSXdRWU1CYUFGREh2NVpRMUJkbWh6VHNECitVRW9ZNTVFWHlVZEtNQXdH
QTFVZEV3UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUZCUUFEZ1lFQWgzcU1CeDd2CitqU29kTWYz
T3lUcVRMRTdkZUxubW5DZUJWcGd6eFJaRW9pemNHcVljamlxTzI3aTVONVo2S1ZRc25JVG5MaXlD
CittVXR1UjVLbkY2OXVUS1V3NG0vdWdaZTV3aGppZzVNcTJsNDEwS1ZLNkVlRzR0ZExsZlhSK3dp
NFU1SzRLalA2CitwNG5jaFFVWExhMnpjYkpuK1ZCZXhKbjYvOXdkaHIrRFVHWT0KKy0tLS0tRU5E
IENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Mkd0ay9yZXNvdXJjZXMvdGVzdC1rZXkucGVtIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXQyR3RrL3Jlc291cmNlcy90ZXN0LWtleS5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uOTAzNjIyMgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9yZXNvdXJjZXMvdGVzdC1rZXkucGVtCkBAIC0wLDAg
KzEsMTYgQEAKKy0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLQorTUlJQ2R3SUJBREFOQmdrcWhr
aUc5dzBCQVFFRkFBU0NBbUV3Z2dKZEFnRUFBb0dCQU5FMU16a01Sd1NDZ3c5cAorcExxdnJWUGRw
a0x3MllPOXdkQnZqWWE5azlodWpHM0M2aU1JNE5VR0xRV1ZpZk43V2NUREJINHNIaHl4Zk9XZgor
YUlXcndJTVNaU2h1MkpyMlR1L1NwQmFabzFkbHVRbFVadEhtREQ1ODVzVFFxR21LcUF5NWRNN0Ir
aW1UaXp5cgordjMxK0hnMS9WNlFEOVgvTjRWZ2RWQlFaaHlqZkFnTUJBQUVDZ1lCMlF3T1VzUnNJ
TXByUndKOXRKTmZ2TzdHNworejVpMS96T3JseFBDNGpITVBCbklCbElDd2djT2hMSTRvT0xkcjVI
OFIxMm4wVnFvVDdEUndQMzk2aXdsSmlwRgoraU8xaGVETW4vOHo4TFBHd2tDSy8rY2swNHJNRGtz
eFdJZE13WUtCWHQ5YWhuSi94Ukx6UTEvM0FKaUFHbm9lNQorL1FMWFF3ZW9mZDRtbWZzaktRSkJB
TzJDd1Q3dU1QNm5NalhndFZNSnE1UVA4VWJlQ1Mxc0VPUEpKYkh1RHhKQgorL0hlUFFIQmpxNGt6
RzZDTDRvTzdUKzVmRHY0ZytmSUlIenVYZXJaMGltc0NRUURoZm1pVEljOU91Y0VJZmc2LworbXMw
SmlLU21XYytxb2lPQ3RySUx1UXZGb053SlJjaVFBTnFlSnM2d3BhRHZldlNVdkJMR2ZHLzdiM0h2
YUU1WAoraXFCZEFrQkVRSXZwMnFjSHR1Sk42MG9RRjdwUHJSa254VXliMmU4c2xqUVg0cEpBSytn
eUwxOVVMTUF4aUJkTAorVm9kOFZZcU50SkZwWSs2UHA5ZloxeGp6YjZBTEFrRUE0SnpyREF3MGxR
WEErM1dkdVV3NGl4T2FkcjJsZHlHMAorMzZLZWJjRHdzZlpPMThtMFE0VW1QejBHeTd6Z04wd3h6
dW9jaGF3MFc2K2lQVWlZS09sRVhRSkJBTVdRclBsdQorcnJpbm9aUzJmOGRvSjlCTk5VYStSTnBN
dWc2VVhjNTVxb1VKbHlpWEVoK3R1NEFhTU90eHVHSXlDMHNBY3V3NgorWGRBUFZQWEtkN01uZTcw
PQorLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQyR3RrL3Jlc291cmNlcy93ZWJraXQyZ3RrLXRlc3RzLmdyZXNvdXJj
ZS54bWwgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvcmVzb3VyY2VzL3dl
YmtpdDJndGstdGVzdHMuZ3Jlc291cmNlLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi40ZjFlNWE2Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXQyR3RrL3Jlc291cmNlcy93ZWJraXQyZ3RrLXRlc3RzLmdyZXNvdXJjZS54bWwK
QEAgLTAsMCArMSw2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pgor
PGdyZXNvdXJjZXM+CisgIDxncmVzb3VyY2UgcHJlZml4PSIvb3JnL3dlYmtpdC93ZWJraXQyZ3Rr
L3Rlc3RzLyI+CisgICAgPGZpbGUgYWxpYXM9ImxpbmstdGl0bGUuanMiPlNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL3Jlc291cmNlcy9saW5rLXRpdGxlLmpzPC9maWxlPgor
ICA8L2dyZXNvdXJjZT4KKzwvZ3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Jlc291cmNlcy9ibGFuay5pY28gYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9yZXNvdXJjZXMvYmxhbmsuaWNvCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhODQ4YjkKQmluYXJ5IGZpbGVzIC9kZXYvbnVsbCBhbmQg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9yZXNvdXJjZXMvYmxhbmsuaWNv
IGRpZmZlcgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsv
cmVzb3VyY2VzL3Rlc3QuaHRtbCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3Rr
L3Jlc291cmNlcy90ZXN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
OThmN2Q0ZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0R3RrL3Jlc291cmNlcy90ZXN0Lmh0bWwKQEAgLTAsMCArMSw2IEBACis8aHRtbD4KKzxoZWFk
Pjx0aXRsZT50ZXN0PC90aXRsZT48L2hlYWQ+Cis8Ym9keT50ZXN0PC9ib2R5PgorPC9odG1sPj48
L2hlYWQ+Cis8Ym9keT50ZXN0PC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvcmVzb3VyY2VzL3Rlc3Qub2dnIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvcmVzb3VyY2VzL3Rlc3Qub2dnCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmM2EzYjkKQmluYXJ5IGZpbGVzIC9kZXYvbnVsbCBh
bmQgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9yZXNvdXJjZXMvdGVzdC5v
Z2cgZGlmZmVyCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0
ay9yZXNvdXJjZXMvdGVzdC5wZGYgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0
ay9yZXNvdXJjZXMvdGVzdC5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MjQyNGMxOQpCaW5hcnkgZmlsZXMgL2Rldi9udWxsIGFuZCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0R3RrL3Jlc291cmNlcy90ZXN0LnBkZiBkaWZmZXIKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Jlc291cmNlcy90ZXN0LnR4dCBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Jlc291cmNlcy90ZXN0LnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGFlYWZiCi0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvcmVzb3VyY2VzL3Rlc3QudHh0
CkBAIC0wLDAgKzEgQEAKK3Rlc3QKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0R3RrL3Rlc3RfdXRpbHMuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0R3RrL3Rlc3RfdXRpbHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42
YmI2NDVkCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRHdGsvdGVzdF91dGlscy5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgQXJubyBSZW5ldmllcgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAidGVzdF91dGlscy5oIgorCisjaW5jbHVkZSA8
Z2xpYi5oPgorI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CisKK2ludCB0ZXN0dXRpbHNfcmVsYXRp
dmVfY2hkaXIoY29uc3QgZ2NoYXIgKnRhcmdldEZpbGVuYW1lLCBjb25zdCBnY2hhciAqZXhlY3V0
YWJsZVBhdGgpCit7CisgICAgLyogdXNlciBjYW4gc2V0IGxvY2F0aW9uIG9mIHRoZSB3ZWJraXQg
cmVwb3NpdG9yeSBkaXJlY3RvcnkgaWYgaXQgZGlmZmVycyBmcm9tIGJ1aWxkIGRpcmVjdG9yeSAq
LworICAgIGNvbnN0IGdjaGFyICpyZXBvUGF0aCA9IGdfZ2V0ZW52KCJXRUJLSVRSRVBPRElSIik7
CisgICAgaWYgKHJlcG9QYXRoKSB7CisgICAgICAgIGlmIChnX2NoZGlyKHJlcG9QYXRoKSkKKyAg
ICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9IGVsc2UgaWYgKGdfY2hkaXIoZ19wYXRoX2dldF9k
aXJuYW1lKGV4ZWN1dGFibGVQYXRoKSkpCisgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICB3
aGlsZSAoIWdfZmlsZV90ZXN0KHRhcmdldEZpbGVuYW1lLCBHX0ZJTEVfVEVTVF9FWElTVFMpKSB7
CisgICAgICAgIGdjaGFyICpwYXRoTmFtZTsKKyAgICAgICAgaWYgKGdfY2hkaXIoIi4uIikpCisg
ICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGdfYXNzZXJ0KCFnX3N0cl9lcXVhbCgocGF0
aE5hbWUgPSBnX2dldF9jdXJyZW50X2RpcigpKSwgIi8iKSk7CisgICAgICAgIGdfZnJlZShwYXRo
TmFtZSk7CisgICAgfQorCisgICAgZ2NoYXIgKmRpck5hbWUgPSBnX3BhdGhfZ2V0X2Rpcm5hbWUo
dGFyZ2V0RmlsZW5hbWUpOworICAgIGlmIChnX2NoZGlyKGRpck5hbWUpKSB7CisgICAgICAgIGdf
ZnJlZShkaXJOYW1lKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGdfZnJlZShk
aXJOYW1lKTsKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RfdXRpbHMuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0R3RrL3Rlc3RfdXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5lYzYwZGEzCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRHdGsvdGVzdF91dGlscy5oCkBAIC0wLDAgKzEsMyBAQAorI2luY2x1ZGUgPGdsaWIu
aD4KKworaW50IHRlc3R1dGlsc19yZWxhdGl2ZV9jaGRpcihjb25zdCBnY2hhciAqdGFyZ2V0Rmls
ZW5hbWUsIGNvbnN0IGdjaGFyICpleGVjdXRhYmxlUGF0aCk7CmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0YXBwbGljYXRpb25jYWNoZS5jIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGFwcGxpY2F0aW9uY2FjaGUuYwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MThmNDAxCi0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGFwcGxpY2F0aW9u
Y2FjaGUuYwpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEx1a2Fz
eiBTbGFjaGNpYWsKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5j
bHVkZSA8Z2xpYi9ncHJpbnRmLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdl
YmtpdC93ZWJraXQuaD4KKworc3RhdGljIHZvaWQgdGVzdF9hcHBsaWNhdGlvbl9jYWNoZV9tYXhp
bXVtX3NpemUoKQoreworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhTaXplID0gODE5MjsKKyAg
ICB3ZWJraXRfYXBwbGljYXRpb25fY2FjaGVfc2V0X21heGltdW1fc2l6ZShtYXhTaXplKTsKKwor
ICAgIC8vIENyZWF0aW5nIGEgV2ViVmlldyAtIG1ha2Ugc3VyZSB0aGF0IGl0IGRpZG4ndCBjaGFu
Z2UgYW55dGhpbmcKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVX
KHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7
CisgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7CisKKyAgICBnX2Fzc2VydChtYXhTaXplID09
IHdlYmtpdF9hcHBsaWNhdGlvbl9jYWNoZV9nZXRfbWF4aW11bV9zaXplKCkpOworfQorCitpbnQg
bWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywg
JmFyZ3YsIE5VTEwpOworCisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXBwbGljYXRpb25fY2FjaGUv
bWF4aW11bV9zaXplIiwKKyAgICAgICAgICAgICAgICAgICAgdGVzdF9hcHBsaWNhdGlvbl9jYWNo
ZV9tYXhpbXVtX3NpemUpOworCisgICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsKK30KKwpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGF0ay5jIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGF0ay5jCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMmRiNjEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0YXRrLmMKQEAgLTAsMCArMSwxNDc2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1
ZGUgPGdsaWIvZ3N0ZGlvLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPGxvY2Fs
ZS5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKwor
c3RhdGljIGNvbnN0IGNoYXIqIGNlbnRlcmVkQ29udGVudHMgPSAiPGh0bWw+PGJvZHk+PHAgc3R5
bGU9J3RleHQtYWxpZ246IGNlbnRlcjsnPlNob3J0IGxpbmU8L3A+PHAgc3R5bGU9J3RleHQtYWxp
Z246IGNlbnRlcjsnPkxvbmctc2l6ZSBsaW5lIHdpdGggc29tZSBmb28gYmFyIGJheiBjb250ZW50
PC9wPjxwIHN0eWxlPSd0ZXh0LWFsaWduOiBjZW50ZXI7Jz5TaG9ydCBsaW5lPC9wPjxwIHN0eWxl
PSd0ZXh0LWFsaWduOiBjZW50ZXI7Jz5UaGlzIGlzIGEgbXVsdGktbGluZSBwYXJhZ3JhcGg8YnIg
Lz53aGVyZSB0aGUgZmlyc3QgbGluZTxiciAvPmlzIHRoZSBiaWdnZXN0IG9uZTwvcD48L2JvZHk+
PC9odG1sPiI7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb250ZW50cyA9ICI8aHRtbD48Ym9keT48
cD5UaGlzIGlzIGEgdGVzdC4gVGhpcyBpcyB0aGUgc2Vjb25kIHNlbnRlbmNlLiBBbmQgdGhpcyB0
aGUgdGhpcmQuPC9wPjwvYm9keT48L2h0bWw+IjsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnRl
bnRzSW5UYWJsZVdpdGhIZWFkZXJzID0gIjxodG1sPjxib2R5Pjx0YWJsZT48dHI+PHRoPmZvbzwv
dGg+PHRoPmJhcjwvdGg+PHRoIGNvbHNwYW49JzInPmJhejwvdGg+PC90cj48dHI+PHRoPnF1eDwv
dGg+PHRkPjE8L3RkPjx0ZD4yPC90ZD48dGQ+MzwvdGQ+PC90cj48dHI+PHRoIHJvd3NwYW49JzIn
PnF1dXg8L3RoPjx0ZD40PC90ZD48dGQ+NTwvdGQ+PHRkPjY8L3RkPjwvdHI+PHRyPjx0ZD42PC90
ZD48dGQ+NzwvdGQ+PHRkPjg8L3RkPjwvdHI+PHRyPjx0aD5jb3JnZTwvdGg+PHRkPjk8L3RkPjx0
ZD4xMDwvdGQ+PHRkPjExPC90ZD48L3RyPjwvdGFibGU+PHRhYmxlPjx0cj48dGQ+MTwvdGQ+PHRk
PjI8L3RkPjwvdHI+PHRyPjx0ZD4zPC90ZD48dGQ+NDwvdGQ+PC90cj48L3RhYmxlPjwvYm9keT48
L2h0bWw+IjsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnRlbnRzV2l0aEV4dHJhbmVvdXNXaGl0
ZVNwYWNlcyA9ICI8aHRtbD48aGVhZD48Ym9keT48cD5UaGlzXG4gICAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcmFncmFwaFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JrZWQhPC9wPjwvYm9k
eT48L2h0bWw+IjsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbWJvQm94U2VsZWN0b3IgPSAiPGh0
bWw+PGJvZHk+PHNlbGVjdD48b3B0aW9uIHNlbGVjdGVkIHZhbHVlPSdmb28nPmZvbzwvb3B0aW9u
PjxvcHRpb24gdmFsdWU9J2Jhcic+YmFyPC9vcHRpb24+PC9zZWxlY3Q+PC9ib2R5PjwvaHRtbD4i
OworCitzdGF0aWMgY29uc3QgY2hhciogZW1iZWRkZWRPYmplY3RzID0gIjxodG1sPjxib2R5Pjxw
PkNob29zZTogPGlucHV0IHZhbHVlPSdmb28nIHR5cGU9J2NoZWNrYm94Jy8+Zm9vIDxpbnB1dCB2
YWx1ZT0nYmFyJyB0eXBlPSdjaGVja2JveCcvPmJhciAocGljayBvbmUpPC9wPjxwPkNob29zZTog
PHNlbGVjdCBuYW1lPSdmb28nPjxvcHRpb24+YmFyPC9vcHRpb24+PG9wdGlvbj5iYXo8L29wdGlv
bj48L3NlbGVjdD4gKHBpY2sgb25lKTwvcD48cD48aW5wdXQgbmFtZT0nZm9vYmFyYnV0dG9uJyB2
YWx1ZT0nZm9vYmFyJyB0eXBlPSdidXR0b24nLz48L3A+PC9ib2R5PjwvaHRtbD4iOworCitzdGF0
aWMgY29uc3QgY2hhciogZm9ybVdpdGhUZXh0SW5wdXRzID0gIjxodG1sPjxib2R5Pjxmb3JtPjxp
bnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdlbnRyeScgLz48aW5wdXQgdHlwZT0ncGFzc3dvcmQnIG5h
bWU9J3Bhc3N3b3JkRW50cnknIC8+PC9mb3JtPjwvYm9keT48L2h0bWw+IjsKKworc3RhdGljIGNv
bnN0IGNoYXIqIGh5cGVydGV4dEFuZEh5cGVybGlua3MgPSAiPGh0bWw+PGJvZHk+PHA+QSBwYXJh
Z3JhcGggd2l0aCBubyBsaW5rcyBhdCBhbGw8L3A+PHA+PGEgaHJlZj0naHR0cDovL2Zvby5iYXIu
YmF6Lyc+QSBsaW5lPC9hPiB3aXRoIDxhIGhyZWY9J2h0dHA6Ly9iYXIuYmF6LmZvby8nPmEgbGlu
ayBpbiB0aGUgbWlkZGxlPC9hPiBhcyB3ZWxsIGFzIGF0IHRoZSBiZWdpbm5pbmcgYW5kIDxhIGhy
ZWY9J2h0dHA6Ly9iYXouZm9vLmJhci8nPmF0IHRoZSBlbmQ8L2E+PC9wPjxvbD48bGk+TGlzdCBp
dGVtIHdpdGggYSA8c3Bhbj48YSBocmVmPSdodHRwOi8vZm9vLmJhci5iYXovJz5saW5rIGluc2lk
ZSBhIHNwYW4gbm9kZTwvYT48L3NwYW4+PC9saT48L29sPjwvYm9keT48L2h0bWw+IjsKKworc3Rh
dGljIGNvbnN0IGNoYXIqIGxheW91dEFuZERhdGFUYWJsZXMgPSAiPGh0bWw+PGJvZHk+PHRhYmxl
Pjx0cj48dGg+T2RkPC90aD48dGg+RXZlbjwvdGg+PC90cj48dHI+PHRkPjE8L3RkPjx0ZD4yPC90
ZD48L3RyPjwvdGFibGU+PHRhYmxlPjx0cj48dGQ+Zm9vPC90ZD48dGQ+YmFyPC90ZD48L3RyPjwv
dGFibGU+PC9ib2R5PjwvaHRtbD4iOworCitzdGF0aWMgY29uc3QgY2hhciogbGlua3NXaXRoSW5s
aW5lSW1hZ2VzID0gIjxodG1sPjxoZWFkPjxzdHlsZT5hLmh0dHA6YmVmb3JlIHtjb250ZW50OiB1
cmwobm8taW1hZ2UucG5nKTt9PC9zdHlsZT48Ym9keT48cD48YSBjbGFzcz0naHR0cCcgaHJlZj0n
Zm9vJz5mb288L2E+IGJhciBiYXo8L3A+PHA+Zm9vIDxhIGNsYXNzPSdodHRwJyBocmVmPSdiYXIn
PmJhcjwvYT4gYmF6PC9wPjxwPmZvbyBiYXIgPGEgY2xhc3M9J2h0dHAnIGhyZWY9J2Jheic+YmF6
PC9hPjwvcD48L2JvZHk+PC9odG1sPiI7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBsaXN0c09mSXRl
bXMgPSAiPGh0bWw+PGJvZHk+PHVsPjxsaT50ZXh0IG9ubHk8L2xpPjxsaT48YSBocmVmPSdmb28n
Pmxpbmsgb25seTwvYT48L2xpPjxsaT50ZXh0IGFuZCBhIDxhIGhyZWY9J2Jhcic+bGluazwvYT48
L2xpPjwvdWw+PG9sPjxsaT50ZXh0IG9ubHk8L2xpPjxsaT48YSBocmVmPSdmb28nPmxpbmsgb25s
eTwvYT48L2xpPjxsaT50ZXh0IGFuZCBhIDxhIGhyZWY9J2Jhcic+bGluazwvYT48L2xpPjwvb2w+
PC9ib2R5PjwvaHRtbD4iOworCitzdGF0aWMgY29uc3QgY2hhciogdGV4dEZvckNhcmV0QnJvd3Np
bmcgPSAiPGh0bWw+PGJvZHk+PGgxPkEgdGV4dCBoZWFkZXI8L2gxPjxwPkEgcGFyYWdyYXBoIDxh
IGhyZWY9J2h0dHA6Ly9mb28uYmFyLmJhei8nPndpdGggYSBsaW5rPC9hPiBpbiB0aGUgbWlkZGxl
PC9wPjxvbD48bGk+QSBsaXN0IGl0ZW08L2xpPjxsaT48c3BhbiBzdHlsZT0nZGlzcGxheTpibG9j
azsnPkJsb2NrIHNwYW4gaW4gYSBsaXN0IGl0ZW08L3NwYW4+PHNwYW4+SW5saW5lIHNwYW4gaW4g
YSBsaXN0IGl0ZW08L3NwYW4+PC9saT48bGk+PGEgaHJlZj0nZm9vJz48c3BhbiBzdHlsZT0nZGlz
cGxheTpibG9jazsnPkJsb2NrIHNwYW4gaW4gYSBsaW5rIGluIGEgbGlzdCBpdGVtPC9zcGFuPjxz
cGFuPklubGluZSBzcGFuIGluIGEgbGluayBpbiBhIGxpc3QgaXRlbTwvc3Bhbj48L2E+PC9saT48
L29sPjxzZWxlY3Q+PG9wdGlvbiBzZWxlY3RlZCB2YWx1ZT0nZm9vJz5BbiBvcHRpb24gaW4gYSBj
b21ibyBib3g8L29wdGlvbj48L3NlbGVjdD48aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nZm9vJyB2
YWx1ZT0nZm9vIGJhciBiYXonIC8+PHRhYmxlPjx0cj48dGQ+YSB0YWJsZSBjZWxsPC90ZD48dGQ+
PC90ZD48dGQ+PGEgaHJlZj0nZm9vJz48c3BhbiBzdHlsZT0nZGlzcGxheTpibG9jazsnPkJsb2Nr
IHNwYW4gaW4gYSBsaW5rIGluIGEgdGFibGUgY2VsbDwvc3Bhbj48c3Bhbj5JbmxpbmUgc3BhbiBp
biBhIGxpbmsgaW4gYSB0YWJsZSBjZWxsPC9zcGFuPjwvYT48L3RkPjx0ZD48c3BhbiBzdHlsZT0n
ZGlzcGxheTpibG9jazsnPkJsb2NrIHNwYW4gaW4gYSB0YWJsZSBjZWxsPC9zcGFuPjxzcGFuPklu
bGluZSBzcGFuIGluIGEgdGFibGUgY2VsbDwvc3Bhbj48L3RkPjwvdHI+PC90YWJsZT48aDQ+PGEg
aHJlZj0nZm9vJz48c3BhbiBzdHlsZT0nZGlzcGxheTpibG9jazsnPkJsb2NrIHNwYW4gaW4gYSBs
aW5rIGluIGEgaGVhZGluZzwvc3Bhbj48c3Bhbj5JbmxpbmUgc3BhbiBpbiBhIGxpbmsgaW4gYSBo
ZWFkaW5nPC9zcGFuPjwvaDQ+PGg0PjxzcGFuIHN0eWxlPSdkaXNwbGF5OmJsb2NrOyc+QmxvY2sg
c3BhbiBpbiBhIGhlYWRpbmc8L3NwYW4+PHNwYW4+SW5saW5lIHNwYW4gaW4gYSBoZWFkaW5nPC9z
cGFuPjwvaDQ+PC9ib2R5PjwvaHRtbD4iOworCitzdGF0aWMgY29uc3QgY2hhciogdGV4dEZvclNl
bGVjdGlvbnMgPSAiPGh0bWw+PGJvZHk+PHA+QSBwYXJhZ3JhcGggd2l0aCBwbGFpbiB0ZXh0PC9w
PjxwPkEgcGFyYWdyYXBoIHdpdGggPGEgaHJlZj0naHR0cDovL3dlYmtpdC5vcmcnPmEgbGluazwv
YT4gaW4gdGhlIG1pZGRsZTwvcD48b2w+PGxpPkEgbGlzdCBpdGVtPC9saT48L29sPjxzZWxlY3Q+
PC9ib2R5PjwvaHRtbD4iOworCitzdGF0aWMgY29uc3QgY2hhciogdGV4dFdpdGhBdHRyaWJ1dGVz
ID0gIjxodG1sPjxoZWFkPjxzdHlsZT4uc3QxIHtmb250LWZhbWlseTogbW9ub3NwYWNlOyBjb2xv
cjpyZ2IoMTIwLDEyMSwxMjIpO30gLnN0MiB7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTsgYmFj
a2dyb3VuZC1jb2xvcjpyZ2IoODAsODEsODIpO308L3N0eWxlPjwvaGVhZD48Ym9keT48cCBzdHls
ZT1cImZvbnQtc2l6ZToxNDsgdGV4dC1hbGlnbjpyaWdodDtcIj5UaGlzIGlzIHRoZSA8aT5maXJz
dDwvaT48Yj4gc2VudGVuY2Ugb2YgdGhpcyB0ZXh0LjwvYj48L3A+PHAgY2xhc3M9XCJzdDFcIj5U
aGlzIHNlbnRlbmNlIHNob3VsZCBoYXZlIGFuIHN0eWxlIGFwcGxpZWQgPHNwYW4gY2xhc3M9XCJz
dDJcIj5hbmQgdGhpcyBwYXJ0IHNob3VsZCBoYXZlIGFub3RoZXIgb25lPC9zcGFuPi48L3A+PHA+
eDxzdWI+MTwvc3ViPjxzdXA+Mjwvc3VwPj14PHN1Yj4yPC9zdWI+PHN1cD4zPC9zdXA+PC9wPjxw
IHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXI7XCI+VGhpcyBzZW50ZW5jZSBpcyB0aGUgPHN0cmlr
ZT5sYXN0PC9zdHJpa2U+IG9uZS48L3A+PC9ib2R5PjwvaHRtbD4iOworCitzdGF0aWMgQXRrT2Jq
ZWN0KiBnZXRXZWJBcmVhT2JqZWN0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCit7CisgICAgLyog
TWFudWFsbHkgc3BpbiB0aGUgbWFpbiBjb250ZXh0IHRvIG1ha2Ugc3VyZSB0aGUgYWNjZXNzaWJs
ZQorICAgICAgIG9iamVjdHMgYXJlIHByb3Blcmx5IGNyZWF0ZWQgYmVmb3JlIGNvbnRpbnVpbmcu
ICovCisgICAgd2hpbGUgKGdfbWFpbl9jb250ZXh0X3BlbmRpbmcoMCkpCisgICAgICAgIGdfbWFp
bl9jb250ZXh0X2l0ZXJhdGlvbigwLCBUUlVFKTsKKworICAgIEF0a09iamVjdCogcm9vdE9iamVj
dCA9IGd0a193aWRnZXRfZ2V0X2FjY2Vzc2libGUoR1RLX1dJREdFVCh3ZWJWaWV3KSk7CisgICAg
aWYgKCFyb290T2JqZWN0KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIEF0a09iamVjdCog
d2ViQXJlYU9iamVjdCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQocm9vdE9iamVj
dCwgMCk7CisgICAgaWYgKCF3ZWJBcmVhT2JqZWN0KQorICAgICAgICByZXR1cm4gTlVMTDsKKwor
ICAgIC8qIFdlIGRvbid0IG5lZWQgdGhlIGV4dHJhIHJlZiBoZXJlLiAqLworICAgIGdfb2JqZWN0
X3VucmVmKHdlYkFyZWFPYmplY3QpOworCisgICAgcmV0dXJuIHdlYkFyZWFPYmplY3Q7Cit9CisK
K3N0YXRpYyBnY2hhciogdGV4dENhcmV0TW92ZWRSZXN1bHQgPSAwOworCitzdGF0aWMgdm9pZCB0
ZXh0Q2FyZXRNb3ZlZENhbGxiYWNrKEF0a1RleHQqIHRleHQsIGdpbnQgcG9zLCBncG9pbnRlciBk
YXRhKQoreworICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHRleHQpKTsKKworICAgIGdfZnJlZSh0
ZXh0Q2FyZXRNb3ZlZFJlc3VsdCk7CisgICAgQXRrUm9sZSByb2xlID0gYXRrX29iamVjdF9nZXRf
cm9sZShBVEtfT0JKRUNUKHRleHQpKTsKKyAgICB0ZXh0Q2FyZXRNb3ZlZFJlc3VsdCA9IGdfc3Ry
ZHVwX3ByaW50ZigifCVzfCVkfCIsIGF0a19yb2xlX2dldF9uYW1lKHJvbGUpLCBwb3MpOworfQor
CitzdGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrQ2FyZXRPZmZzZXRzKCkKK3sKKyAgICBXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7
CisgICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxv
Y2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9OworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0
ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7CisgICAgd2Via2l0X3dlYl92aWV3
X2xvYWRfc3RyaW5nKHdlYlZpZXcsIHRleHRGb3JDYXJldEJyb3dzaW5nLCAwLCAwLCAwKTsKKwor
ICAgIEF0a09iamVjdCogb2JqZWN0ID0gZ2V0V2ViQXJlYU9iamVjdCh3ZWJWaWV3KTsKKyAgICBn
X2Fzc2VydChvYmplY3QpOworCisgICAgQXRrT2JqZWN0KiBoZWFkZXIgPSBhdGtfb2JqZWN0X3Jl
Zl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMCk7CisgICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQo
aGVhZGVyKSk7CisgICAgZ19zaWduYWxfY29ubmVjdChoZWFkZXIsICJ0ZXh0LWNhcmV0LW1vdmVk
IiwgR19DQUxMQkFDSyh0ZXh0Q2FyZXRNb3ZlZENhbGxiYWNrKSwgMCk7CisKKyAgICAvKiBJdCBz
aG91bGQgYmUgcG9zc2libGUgdG8gcGxhY2UgdGhlIGNhcmV0IGluc2lkZSBhIGhlYWRlci4gKi8K
KyAgICBnYm9vbGVhbiByZXN1bHQgPSBhdGtfdGV4dF9zZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhU
KGhlYWRlciksIDUpOworICAgIGdfYXNzZXJ0X2NtcGludChyZXN1bHQsID09LCBUUlVFKTsKKyAg
ICBnaW50IG9mZnNldCA9IGF0a190ZXh0X2dldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQoaGVhZGVy
KSk7CisgICAgZ19hc3NlcnRfY21waW50KG9mZnNldCwgPT0sIDUpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cih0ZXh0Q2FyZXRNb3ZlZFJlc3VsdCwgPT0sICJ8aGVhZGluZ3w1fCIpOworCisgICAgQXRr
T2JqZWN0KiBwYXJhZ3JhcGggPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVj
dCwgMSk7CisgICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQocGFyYWdyYXBoKSk7CisgICAgZ19zaWdu
YWxfY29ubmVjdChwYXJhZ3JhcGgsICJ0ZXh0LWNhcmV0LW1vdmVkIiwgR19DQUxMQkFDSyh0ZXh0
Q2FyZXRNb3ZlZENhbGxiYWNrKSwgMCk7CisKKyAgICAvKiBJdCBzaG91bGQgYmUgcG9zc2libGUg
dG8gcGxhY2UgdGhlIGNhcmV0IGluc2lkZSBhIHBhcmFncmFwaCBhbmQgYSBsaW5rLiAqLworICAg
IHJlc3VsdCA9IGF0a190ZXh0X3NldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQocGFyYWdyYXBoKSwg
NSk7CisgICAgZ19hc3NlcnRfY21waW50KHJlc3VsdCwgPT0sIFRSVUUpOworICAgIG9mZnNldCA9
IGF0a190ZXh0X2dldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQocGFyYWdyYXBoKSk7CisgICAgZ19h
c3NlcnRfY21waW50KG9mZnNldCwgPT0sIDUpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0Q2Fy
ZXRNb3ZlZFJlc3VsdCwgPT0sICJ8cGFyYWdyYXBofDV8Iik7CisKKyAgICByZXN1bHQgPSBhdGtf
dGV4dF9zZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhUKHBhcmFncmFwaCksIDIwKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQocmVzdWx0LCA9PSwgVFJVRSk7CisgICAgb2Zmc2V0ID0gYXRrX3RleHRfZ2V0
X2NhcmV0X29mZnNldChBVEtfVEVYVChwYXJhZ3JhcGgpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
b2Zmc2V0LCA9PSwgMjApOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0Q2FyZXRNb3ZlZFJlc3Vs
dCwgPT0sICJ8cGFyYWdyYXBofDIwfCIpOworCisgICAgcmVzdWx0ID0gYXRrX3RleHRfc2V0X2Nh
cmV0X29mZnNldChBVEtfVEVYVChwYXJhZ3JhcGgpLCAzMCk7CisgICAgZ19hc3NlcnRfY21waW50
KHJlc3VsdCwgPT0sIFRSVUUpOworICAgIG9mZnNldCA9IGF0a190ZXh0X2dldF9jYXJldF9vZmZz
ZXQoQVRLX1RFWFQocGFyYWdyYXBoKSk7CisgICAgZ19hc3NlcnRfY21waW50KG9mZnNldCwgPT0s
IDMwKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGV4dENhcmV0TW92ZWRSZXN1bHQsID09LCAifHBh
cmFncmFwaHwzMHwiKTsKKworICAgIEF0a09iamVjdCogbGluayA9IGF0a19vYmplY3RfcmVmX2Fj
Y2Vzc2libGVfY2hpbGQocGFyYWdyYXBoLCAwKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChs
aW5rKSk7CisKKyAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhU
KGxpbmspLCA1KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocmVzdWx0LCA9PSwgVFJVRSk7CisgICAg
b2Zmc2V0ID0gYXRrX3RleHRfZ2V0X2NhcmV0X29mZnNldChBVEtfVEVYVChsaW5rKSk7CisgICAg
Z19hc3NlcnRfY21waW50KG9mZnNldCwgPT0sIDUpOworICAgIC8qIFBvc2l0aW9ucyBpbnNpZGUg
bGlua3MgYXJlIHJlcG9ydGVkIHJlbGF0aXZlIHRvIHRoZSBwYXJhZ3JhcGguICovCisgICAgZ19h
c3NlcnRfY21wc3RyKHRleHRDYXJldE1vdmVkUmVzdWx0LCA9PSwgInxwYXJhZ3JhcGh8MTd8Iik7
CisKKyAgICBBdGtPYmplY3QqIGxpc3QgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxk
KG9iamVjdCwgMik7CisgICAgZ19hc3NlcnQoQVRLX09CSkVDVChsaXN0KSk7CisgICAgZ19hc3Nl
cnQoYXRrX29iamVjdF9nZXRfcm9sZShsaXN0KSA9PSBBVEtfUk9MRV9MSVNUKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoYXRrX29iamVjdF9nZXRfbl9hY2Nlc3NpYmxlX2NoaWxkcmVuKGxpc3QpLCA9
PSwgMyk7CisKKyAgICBBdGtPYmplY3QqIGxpc3RJdGVtID0gYXRrX29iamVjdF9yZWZfYWNjZXNz
aWJsZV9jaGlsZChsaXN0LCAwKTsKKyAgICBsaXN0SXRlbSA9IGF0a19vYmplY3RfcmVmX2FjY2Vz
c2libGVfY2hpbGQobGlzdCwgMik7CisgICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQobGlzdEl0ZW0p
KTsKKworICAgIC8qIEl0J3Mgbm90IHBvc3NpYmxlIHRvIHBsYWNlIHRoZSBjYXJldCBpbnNpZGUg
YW4gaXRlbSdzIG1hcmtlci4gKi8KKyAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfY2FyZXRfb2Zm
c2V0KEFUS19URVhUKGxpc3RJdGVtKSwgMSk7CisgICAgZ19hc3NlcnRfY21waW50KHJlc3VsdCwg
PT0sIEZBTFNFKTsKKworICAgIC8qIEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBwbGFjZSB0aGUg
Y2FyZXQgaW5zaWRlIGFuIGl0ZW0ncyB0ZXh0LiAqLworICAgIHJlc3VsdCA9IGF0a190ZXh0X3Nl
dF9jYXJldF9vZmZzZXQoQVRLX1RFWFQobGlzdEl0ZW0pLCA1KTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQocmVzdWx0LCA9PSwgVFJVRSk7CisgICAgb2Zmc2V0ID0gYXRrX3RleHRfZ2V0X2NhcmV0X29m
ZnNldChBVEtfVEVYVChsaXN0SXRlbSkpOworICAgIGdfYXNzZXJ0X2NtcGludChvZmZzZXQsID09
LCA1KTsKKworICAgIEF0a09iamVjdCogcGFuZWwgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxl
X2NoaWxkKG9iamVjdCwgMyk7CisgICAgZ19hc3NlcnQoQVRLX0lTX09CSkVDVChwYW5lbCkpOwor
ICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUocGFuZWwpID09IEFUS19ST0xFX1BBTkVM
KTsKKworICAgIEF0a09iamVjdCogY29tYm9Cb3ggPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxl
X2NoaWxkKHBhbmVsLCAwKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfT0JKRUNUKGNvbWJvQm94KSk7
CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShjb21ib0JveCkgPT0gQVRLX1JPTEVf
Q09NQk9fQk9YKTsKKworICAgIEF0a09iamVjdCogbWVudVBvcHVwID0gYXRrX29iamVjdF9yZWZf
YWNjZXNzaWJsZV9jaGlsZChjb21ib0JveCwgMCk7CisgICAgZ19hc3NlcnQoQVRLX0lTX09CSkVD
VChtZW51UG9wdXApKTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKG1lbnVQb3B1
cCkgPT0gQVRLX1JPTEVfTUVOVSk7CisKKyAgICBBdGtPYmplY3QqIGNvbWJvQm94T3B0aW9uID0g
YXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChtZW51UG9wdXAsIDApOworICAgIGdfYXNz
ZXJ0KEFUS19JU19PQkpFQ1QoY29tYm9Cb3hPcHRpb24pKTsKKyAgICBnX2Fzc2VydChhdGtfb2Jq
ZWN0X2dldF9yb2xlKGNvbWJvQm94T3B0aW9uKSA9PSBBVEtfUk9MRV9NRU5VX0lURU0pOworCisg
ICAgLyogSXQncyBub3QgcG9zc2libGUgdG8gcGxhY2UgdGhlIGNhcmV0IGluc2lkZSBhbiBvcHRp
b24gZm9yIGEgY29tYm9ib3guICovCisgICAgcmVzdWx0ID0gYXRrX3RleHRfc2V0X2NhcmV0X29m
ZnNldChBVEtfVEVYVChjb21ib0JveE9wdGlvbiksIDEpOworICAgIGdfYXNzZXJ0X2NtcGludChy
ZXN1bHQsID09LCBGQUxTRSk7CisKKyAgICBBdGtPYmplY3QqIHRleHRFbnRyeSA9IGF0a19vYmpl
Y3RfcmVmX2FjY2Vzc2libGVfY2hpbGQocGFuZWwsIDEpOworICAgIGdfYXNzZXJ0KEFUS19JU19P
QkpFQ1QodGV4dEVudHJ5KSk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZSh0ZXh0
RW50cnkpID09IEFUS19ST0xFX0VOVFJZKTsKKworICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9j
YXJldF9vZmZzZXQoQVRLX1RFWFQodGV4dEVudHJ5KSwgNSk7CisgICAgZ19hc3NlcnRfY21waW50
KHJlc3VsdCwgPT0sIFRSVUUpOworICAgIG9mZnNldCA9IGF0a190ZXh0X2dldF9jYXJldF9vZmZz
ZXQoQVRLX1RFWFQodGV4dEVudHJ5KSk7CisgICAgZ19hc3NlcnRfY21waW50KG9mZnNldCwgPT0s
IDUpOworCisgICAgQXRrT2JqZWN0KiB0YWJsZSA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVf
Y2hpbGQob2JqZWN0LCA0KTsKKyAgICBnX2Fzc2VydChBVEtfSVNfT0JKRUNUKHRhYmxlKSk7Cisg
ICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZSh0YWJsZSkgPT0gQVRLX1JPTEVfVEFCTEUp
OworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfb2JqZWN0X2dldF9uX2FjY2Vzc2libGVfY2hpbGRy
ZW4odGFibGUpLCA9PSwgNCk7CisKKyAgICBBdGtPYmplY3QqIHRhYmxlQ2VsbCA9IGF0a19vYmpl
Y3RfcmVmX2FjY2Vzc2libGVfY2hpbGQodGFibGUsIDApOworICAgIGdfYXNzZXJ0KGF0a19vYmpl
Y3RfZ2V0X3JvbGUodGFibGVDZWxsKSA9PSBBVEtfUk9MRV9UQUJMRV9DRUxMKTsKKyAgICByZXN1
bHQgPSBhdGtfdGV4dF9zZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhUKHRhYmxlQ2VsbCksIDIpOwor
ICAgIGdfYXNzZXJ0X2NtcGludChyZXN1bHQsID09LCBUUlVFKTsKKyAgICBvZmZzZXQgPSBhdGtf
dGV4dF9nZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhUKHRhYmxlQ2VsbCkpOworICAgIGdfYXNzZXJ0
X2NtcGludChvZmZzZXQsID09LCAyKTsKKworICAgIGdfZnJlZSh0ZXh0Q2FyZXRNb3ZlZFJlc3Vs
dCk7CisKKyAgICBnX29iamVjdF91bnJlZihwYXJhZ3JhcGgpOworICAgIGdfb2JqZWN0X3VucmVm
KGxpbmspOworICAgIGdfb2JqZWN0X3VucmVmKGxpc3QpOworICAgIGdfb2JqZWN0X3VucmVmKGxp
c3RJdGVtKTsKKyAgICBnX29iamVjdF91bnJlZihwYW5lbCk7CisgICAgZ19vYmplY3RfdW5yZWYo
Y29tYm9Cb3gpOworICAgIGdfb2JqZWN0X3VucmVmKG1lbnVQb3B1cCk7CisgICAgZ19vYmplY3Rf
dW5yZWYoY29tYm9Cb3hPcHRpb24pOworICAgIGdfb2JqZWN0X3VucmVmKHRleHRFbnRyeSk7Cisg
ICAgZ19vYmplY3RfdW5yZWYodGFibGUpOworICAgIGdfb2JqZWN0X3VucmVmKHRhYmxlQ2VsbCk7
CisgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJr
aXRBdGtDYXJldE9mZnNldHNBbmRFeHRyYW5vdXNXaGl0ZVNwYWNlcygpCit7CisgICAgV2ViS2l0
V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkp
OworICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOworICAgIEd0a0FsbG9jYXRpb24gYWxs
b2NhdGlvbiA9IHsgMCwgMCwgODAwLCA2MDAgfTsKKyAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2Nh
dGUoR1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOworICAgIHdlYmtpdF93ZWJfdmll
d19sb2FkX3N0cmluZyh3ZWJWaWV3LCBjb250ZW50c1dpdGhFeHRyYW5lb3VzV2hpdGVTcGFjZXMs
IDAsIDAsIDApOworCisgICAgLyogRW5hYmxlIGNhcmV0IGJyb3dzaW5nLiAqLworICAgIFdlYktp
dFdlYlNldHRpbmdzKiBzZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2Vi
Vmlldyk7CisgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKHNldHRpbmdzKSwgImVuYWJsZS1jYXJl
dC1icm93c2luZyIsIFRSVUUsIE5VTEwpOworCisgICAgLyogR2V0IHRvIHRoZSBpbm5lciBBdGtU
ZXh0IG9iamVjdC4gKi8KKyAgICBBdGtPYmplY3QqIG9iamVjdCA9IGdldFdlYkFyZWFPYmplY3Qo
d2ViVmlldyk7CisgICAgZ19hc3NlcnQob2JqZWN0KTsKKyAgICBvYmplY3QgPSBhdGtfb2JqZWN0
X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMCk7CisgICAgZ19hc3NlcnQob2JqZWN0KTsK
KworICAgIEF0a1RleHQqIHRleHRPYmplY3QgPSBBVEtfVEVYVChvYmplY3QpOworICAgIGdfYXNz
ZXJ0KEFUS19JU19URVhUKHRleHRPYmplY3QpKTsKKworICAgIGdpbnQgY2hhcmFjdGVyQ291bnQg
PSBhdGtfdGV4dF9nZXRfY2hhcmFjdGVyX2NvdW50KHRleHRPYmplY3QpOworICAgIGdfYXNzZXJ0
X2NtcGludChjaGFyYWN0ZXJDb3VudCwgPT0sIDI1KTsKKworICAgIGdib29sZWFuIHJlc3VsdCA9
IGF0a190ZXh0X3NldF9jYXJldF9vZmZzZXQodGV4dE9iamVjdCwgY2hhcmFjdGVyQ291bnQgLSAx
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocmVzdWx0LCA9PSwgVFJVRSk7CisKKyAgICBnaW50IGNh
cmV0T2Zmc2V0ID0gYXRrX3RleHRfZ2V0X2NhcmV0X29mZnNldCh0ZXh0T2JqZWN0KTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoY2FyZXRPZmZzZXQsID09LCBjaGFyYWN0ZXJDb3VudCAtIDEpOworCisg
ICAgcmVzdWx0ID0gYXRrX3RleHRfc2V0X2NhcmV0X29mZnNldCh0ZXh0T2JqZWN0LCBjaGFyYWN0
ZXJDb3VudCk7CisgICAgZ19hc3NlcnRfY21waW50KHJlc3VsdCwgPT0sIFRSVUUpOworCisgICAg
Y2FyZXRPZmZzZXQgPSBhdGtfdGV4dF9nZXRfY2FyZXRfb2Zmc2V0KHRleHRPYmplY3QpOworICAg
IGdfYXNzZXJ0X2NtcGludChjYXJldE9mZnNldCwgPT0sIGNoYXJhY3RlckNvdW50KTsKKworICAg
IGdfb2JqZWN0X3VucmVmKG9iamVjdCk7CisgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Cit9
CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtDb21ib0JveCgpCit7CisgICAgV2ViS2l0V2Vi
Vmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwor
ICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOworICAgIEd0a0FsbG9jYXRpb24gYWxsb2Nh
dGlvbiA9IHsgMCwgMCwgODAwLCA2MDAgfTsKKyAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUo
R1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOworICAgIHdlYmtpdF93ZWJfdmlld19s
b2FkX3N0cmluZyh3ZWJWaWV3LCBjb21ib0JveFNlbGVjdG9yLCAwLCAwLCAwKTsKKworICAgIEF0
a09iamVjdCogb2JqZWN0ID0gZ2V0V2ViQXJlYU9iamVjdCh3ZWJWaWV3KTsKKyAgICBnX2Fzc2Vy
dChvYmplY3QpOworCisgICAgQXRrT2JqZWN0KiBmb3JtT2JqZWN0ID0gYXRrX29iamVjdF9yZWZf
YWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDApOworICAgIGdfYXNzZXJ0KGZvcm1PYmplY3QpOwor
CisgICAgQXRrT2JqZWN0KiBjb21ib0JveCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hp
bGQoZm9ybU9iamVjdCwgMCk7CisgICAgZ19hc3NlcnQoQVRLX0lTX09CSkVDVChjb21ib0JveCkp
OworCisgICAgQXRrT2JqZWN0KiBtZW51UG9wdXAgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxl
X2NoaWxkKGNvbWJvQm94LCAwKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfT0JKRUNUKG1lbnVQb3B1
cCkpOworCisgICAgQXRrT2JqZWN0KiBpdGVtMSA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVf
Y2hpbGQobWVudVBvcHVwLCAwKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfT0JKRUNUKGl0ZW0xKSk7
CisKKyAgICBBdGtPYmplY3QqIGl0ZW0yID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGls
ZChtZW51UG9wdXAsIDEpOworICAgIGdfYXNzZXJ0KEFUS19JU19PQkpFQ1QoaXRlbTIpKTsKKwor
ICAgIC8qIENoZWNrIHJvbGVzLiAqLworICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUo
Y29tYm9Cb3gpID09IEFUS19ST0xFX0NPTUJPX0JPWCk7CisgICAgZ19hc3NlcnQoYXRrX29iamVj
dF9nZXRfcm9sZShtZW51UG9wdXApID09IEFUS19ST0xFX01FTlUpOworICAgIGdfYXNzZXJ0KGF0
a19vYmplY3RfZ2V0X3JvbGUoaXRlbTEpID09IEFUS19ST0xFX01FTlVfSVRFTSk7CisgICAgZ19h
c3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShpdGVtMikgPT0gQVRLX1JPTEVfTUVOVV9JVEVNKTsK
KworICAgIC8qIENoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQXRrU2VsZWN0aW9uIGlu
dGVyZmFjZS4gKi8KKyAgICBnX2Fzc2VydChBVEtfSVNfU0VMRUNUSU9OKGNvbWJvQm94KSk7Cisg
ICAgQXRrU2VsZWN0aW9uKiBhdGtTZWxlY3Rpb24gPSBBVEtfU0VMRUNUSU9OKGNvbWJvQm94KTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX3NlbGVjdGlvbl9nZXRfc2VsZWN0aW9uX2NvdW50KGF0
a1NlbGVjdGlvbiksID09LCAxKTsKKyAgICBnX2Fzc2VydChhdGtfc2VsZWN0aW9uX2lzX2NoaWxk
X3NlbGVjdGVkKGF0a1NlbGVjdGlvbiwgMCkpOworICAgIGdfYXNzZXJ0KCFhdGtfc2VsZWN0aW9u
X2lzX2NoaWxkX3NlbGVjdGVkKGF0a1NlbGVjdGlvbiwgMSkpOworICAgIEF0a09iamVjdCogc2Vs
ZWN0ZWRJdGVtID0gYXRrX3NlbGVjdGlvbl9yZWZfc2VsZWN0aW9uKGF0a1NlbGVjdGlvbiwgMCk7
CisgICAgZ19hc3NlcnQoc2VsZWN0ZWRJdGVtID09IGl0ZW0xKTsKKyAgICBnX29iamVjdF91bnJl
ZihzZWxlY3RlZEl0ZW0pOworCisgICAgLyogQ2hlY2sgdGhhdCB0aGUgbWVudSBwb3B1cCBoYXMg
MCBsaW5rcyBhbmQgZG9lc24ndCBjcmFzaCBmcm9tIGNoZWNraW5nLiAqLworICAgIGdpbnQgbkxp
bmtzID0gYXRrX2h5cGVydGV4dF9nZXRfbl9saW5rcyhBVEtfSFlQRVJURVhUKG1lbnVQb3B1cCkp
OworICAgIGdfYXNzZXJ0X2NtcGludChuTGlua3MsID09LCAwKTsKKworICAgIC8qIENoZWNrIHRo
ZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIEF0a0FjdGlvbiBpbnRlcmZhY2UuICovCisgICAgZ19h
c3NlcnQoQVRLX0lTX0FDVElPTihjb21ib0JveCkpOworICAgIEF0a0FjdGlvbiogYXRrQWN0aW9u
ID0gQVRLX0FDVElPTihjb21ib0JveCk7CisgICAgZ19hc3NlcnRfY21waW50KGF0a19hY3Rpb25f
Z2V0X25fYWN0aW9ucyhhdGtBY3Rpb24pLCA9PSwgMSk7CisgICAgZ19hc3NlcnQoYXRrX2FjdGlv
bl9kb19hY3Rpb24oYXRrQWN0aW9uLCAwKSk7CisKKyAgICBnX2Fzc2VydChBVEtfSVNfQUNUSU9O
KG1lbnVQb3B1cCkpOworICAgIGF0a0FjdGlvbiA9IEFUS19BQ1RJT04obWVudVBvcHVwKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoYXRrX2FjdGlvbl9nZXRfbl9hY3Rpb25zKGF0a0FjdGlvbiksID09
LCAxKTsKKyAgICBnX2Fzc2VydChhdGtfYWN0aW9uX2RvX2FjdGlvbihhdGtBY3Rpb24sIDApKTsK
KworICAgIGdfYXNzZXJ0KEFUS19JU19BQ1RJT04oaXRlbTEpKTsKKyAgICBhdGtBY3Rpb24gPSBB
VEtfQUNUSU9OKGl0ZW0xKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2FjdGlvbl9nZXRfbl9h
Y3Rpb25zKGF0a0FjdGlvbiksID09LCAxKTsKKyAgICBnX2Fzc2VydChhdGtfYWN0aW9uX2RvX2Fj
dGlvbihhdGtBY3Rpb24sIDApKTsKKworICAgIGdfYXNzZXJ0KEFUS19JU19BQ1RJT04oaXRlbTIp
KTsKKyAgICBhdGtBY3Rpb24gPSBBVEtfQUNUSU9OKGl0ZW0yKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoYXRrX2FjdGlvbl9nZXRfbl9hY3Rpb25zKGF0a0FjdGlvbiksID09LCAxKTsKKyAgICBnX2Fz
c2VydChhdGtfYWN0aW9uX2RvX2FjdGlvbihhdGtBY3Rpb24sIDApKTsKKworICAgIC8qIEFmdGVy
IHNlbGVjdGluZyB0aGUgc2Vjb25kIGl0ZW0sIHNlbGVjdGlvbiBzaG91bGQgaGF2ZSBjaGFuZ2Vk
LiAqLworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfc2VsZWN0aW9uX2dldF9zZWxlY3Rpb25fY291
bnQoYXRrU2VsZWN0aW9uKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0KCFhdGtfc2VsZWN0aW9uX2lz
X2NoaWxkX3NlbGVjdGVkKGF0a1NlbGVjdGlvbiwgMCkpOworICAgIGdfYXNzZXJ0KGF0a19zZWxl
Y3Rpb25faXNfY2hpbGRfc2VsZWN0ZWQoYXRrU2VsZWN0aW9uLCAxKSk7CisgICAgc2VsZWN0ZWRJ
dGVtID0gYXRrX3NlbGVjdGlvbl9yZWZfc2VsZWN0aW9uKGF0a1NlbGVjdGlvbiwgMCk7CisgICAg
Z19hc3NlcnQoc2VsZWN0ZWRJdGVtID09IGl0ZW0yKTsKKyAgICBnX29iamVjdF91bnJlZihzZWxl
Y3RlZEl0ZW0pOworCisgICAgZ19vYmplY3RfdW5yZWYoZm9ybU9iamVjdCk7CisgICAgZ19vYmpl
Y3RfdW5yZWYoY29tYm9Cb3gpOworICAgIGdfb2JqZWN0X3VucmVmKG1lbnVQb3B1cCk7CisgICAg
Z19vYmplY3RfdW5yZWYoaXRlbTEpOworICAgIGdfb2JqZWN0X3VucmVmKGl0ZW0yKTsKKyAgICBn
X29iamVjdF91bnJlZih3ZWJWaWV3KTsKK30KKworc3RhdGljIGdjaGFyKiBsb2FkaW5nRXZlbnRz
UmVzdWx0ID0gMDsKKworc3RhdGljIHZvaWQgdXBkYXRlTG9hZGluZ0V2ZW50c1Jlc3VsdChjb25z
dCBnY2hhciogc2lnbmFsTmFtZSkKK3sKKyAgICBnX2Fzc2VydChzaWduYWxOYW1lKTsKKworICAg
IGdjaGFyKiBwcmV2aW91c1Jlc3VsdCA9IGxvYWRpbmdFdmVudHNSZXN1bHQ7CisgICAgbG9hZGlu
Z0V2ZW50c1Jlc3VsdCA9IGdfc3RyZHVwX3ByaW50ZigiJXN8JXMiLCBwcmV2aW91c1Jlc3VsdCwg
c2lnbmFsTmFtZSk7CisgICAgZ19mcmVlKHByZXZpb3VzUmVzdWx0KTsKK30KKworc3RhdGljIGdi
b29sZWFuIGRvY3VtZW50TG9hZGluZ0V2ZW50Q2FsbGJhY2soR1NpZ25hbEludm9jYXRpb25IaW50
ICpzaWduYWxIaW50LCBndWludCBudW1QYXJhbVZhbHVlcywgY29uc3QgR1ZhbHVlICpwYXJhbVZh
bHVlcywgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICAvLyBBdCBsZWFzdCB3ZSBzaG91bGQgcmVjZWl2
ZSB0aGUgaW5zdGFuY2UgZW1pdHRpbmcgdGhlIHNpZ25hbC4KKyAgICBpZiAobnVtUGFyYW1WYWx1
ZXMgPCAxKQorICAgICAgICByZXR1cm4gVFJVRTsKKworICAgIEdTaWduYWxRdWVyeSBzaWduYWxf
cXVlcnk7CisgICAgZ19zaWduYWxfcXVlcnkoc2lnbmFsSGludC0+c2lnbmFsX2lkLCAmc2lnbmFs
X3F1ZXJ5KTsKKworICAgIHVwZGF0ZUxvYWRpbmdFdmVudHNSZXN1bHQoc2lnbmFsX3F1ZXJ5LnNp
Z25hbF9uYW1lKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYmtp
dEF0a0RvY3VtZW50TG9hZGluZ0V2ZW50cygpCit7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmll
dyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0
X3JlZl9zaW5rKHdlYlZpZXcpOworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwg
MCwgODAwLCA2MDAgfTsKKyAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVCh3
ZWJWaWV3KSwgJmFsbG9jYXRpb24pOworCisgICAgLyogQ29ubmVjdCBnbG9iYWxseSB0byBzZWUg
dGhvc2UgZXZlbnRzIGR1cmluZyBhIGZ1dHVyZSBsb2FkLiAqLworICAgIGd1aW50IGxvYWRDb21w
bGV0ZUxpc3RlbmVySWQgPSBhdGtfYWRkX2dsb2JhbF9ldmVudF9saXN0ZW5lcihkb2N1bWVudExv
YWRpbmdFdmVudENhbGxiYWNrLCAiQVRLOkF0a0RvY3VtZW50OmxvYWQtY29tcGxldGUiKTsKKwor
ICAgIC8qIERvIHRoZSBsb2FkLCBzbyB3ZSBjYW4gc2VlIHRob3NlIGV2ZW50cyBoYXBwZW5pbmcu
ICovCisgICAgbG9hZGluZ0V2ZW50c1Jlc3VsdCA9IGdfc3RyZHVwKCIiKTsKKyAgICB3ZWJraXRf
d2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgY29udGVudHMsIDAsIDAsIDApOworCisgICAg
LyogVHJpZ2dlciB0aGUgY3JlYXRpb24gb2YgdGhlIGZ1bGwgYWNjZXNzaWJpbGl0eSBoaWVyYXJj
aHkgYnkKKyAgICAgICBhc2tpbmcgZm9yIHRoZSB3ZWJBcmVhIG9iamVjdCwgc28gd2UgY2FuIGxp
c3RlbiB0byBldmVudHMuICovCisgICAgZ2V0V2ViQXJlYU9iamVjdCh3ZWJWaWV3KTsKKworICAg
IGF0a19yZW1vdmVfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGxvYWRDb21wbGV0ZUxpc3RlbmVySWQp
OworCisgICAgZ19hc3NlcnRfY21wc3RyKGxvYWRpbmdFdmVudHNSZXN1bHQsID09LCAifGxvYWQt
Y29tcGxldGUiKTsKKworICAgIGdfZnJlZShsb2FkaW5nRXZlbnRzUmVzdWx0KTsKKyAgICBnX29i
amVjdF91bnJlZih3ZWJWaWV3KTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0VtYmVk
ZGVkT2JqZWN0cygpCit7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJf
VklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZp
ZXcpOworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgODAwLCA2MDAgfTsK
KyAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9j
YXRpb24pOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LCBlbWJlZGRl
ZE9iamVjdHMsIDAsIDAsIDApOworCisgICAgQXRrT2JqZWN0KiBvYmplY3QgPSBnZXRXZWJBcmVh
T2JqZWN0KHdlYlZpZXcpOworICAgIGdfYXNzZXJ0KG9iamVjdCk7CisKKyAgICBBdGtUZXh0KiBw
YXJhZ3JhcGgxID0gQVRLX1RFWFQoYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmpl
Y3QsIDApKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChwYXJhZ3JhcGgxKSk7CisgICAgZ19h
c3NlcnQoQVRLX0lTX0hZUEVSVEVYVChwYXJhZ3JhcGgxKSk7CisKKyAgICBnaW50IG5MaW5rcyA9
IGF0a19oeXBlcnRleHRfZ2V0X25fbGlua3MoQVRLX0hZUEVSVEVYVChwYXJhZ3JhcGgxKSk7Cisg
ICAgZ19hc3NlcnRfY21waW50KG5MaW5rcywgPT0sIDIpOworCisgICAgQXRrSHlwZXJsaW5rKiBo
TGluayA9IGF0a19oeXBlcnRleHRfZ2V0X2xpbmsoQVRLX0hZUEVSVEVYVChwYXJhZ3JhcGgxKSwg
MCk7CisgICAgZ19hc3NlcnQoQVRLX0hZUEVSTElOSyhoTGluaykpOworICAgIEF0a09iamVjdCog
aExpbmtPYmplY3QgPSBhdGtfaHlwZXJsaW5rX2dldF9vYmplY3QoaExpbmssIDApOworICAgIGdf
YXNzZXJ0KEFUS19PQkpFQ1QoaExpbmtPYmplY3QpKTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0
X2dldF9yb2xlKGhMaW5rT2JqZWN0KSA9PSBBVEtfUk9MRV9DSEVDS19CT1gpOworICAgIGdfYXNz
ZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9zdGFydF9pbmRleChoTGluayksID09LCA4KTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfZW5kX2luZGV4KGhMaW5rKSwg
PT0sIDkpOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9uX2FuY2hvcnMo
aExpbmspLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGF0a19oeXBlcmxpbmtfZ2V0X3Vy
aShoTGluaywgMCksID09LCAwKTsKKworICAgIEF0a1RleHQqIHBhcmFncmFwaDIgPSBBVEtfVEVY
VChhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMSkpOworICAgIGdfYXNz
ZXJ0KEFUS19JU19IWVBFUlRFWFQocGFyYWdyYXBoMikpOworCisgICAgbkxpbmtzID0gYXRrX2h5
cGVydGV4dF9nZXRfbl9saW5rcyhBVEtfSFlQRVJURVhUKHBhcmFncmFwaDIpKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQobkxpbmtzLCA9PSwgMSk7CisKKyAgICBoTGluayA9IGF0a19oeXBlcnRleHRf
Z2V0X2xpbmsoQVRLX0hZUEVSVEVYVChwYXJhZ3JhcGgyKSwgMCk7CisgICAgZ19hc3NlcnQoQVRL
X0hZUEVSTElOSyhoTGluaykpOworICAgIGhMaW5rT2JqZWN0ID0gYXRrX2h5cGVybGlua19nZXRf
b2JqZWN0KGhMaW5rLCAwKTsKKyAgICBnX2Fzc2VydChBVEtfT0JKRUNUKGhMaW5rT2JqZWN0KSk7
CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShoTGlua09iamVjdCkgPT0gQVRLX1JP
TEVfQ09NQk9fQk9YKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfc3Rh
cnRfaW5kZXgoaExpbmspLCA9PSwgOCk7CisgICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBlcmxp
bmtfZ2V0X2VuZF9pbmRleChoTGluayksID09LCA5KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRr
X2h5cGVybGlua19nZXRfbl9hbmNob3JzKGhMaW5rKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cihhdGtfaHlwZXJsaW5rX2dldF91cmkoaExpbmssIDApLCA9PSwgMCk7CisKKyAgICBBdGtU
ZXh0KiBwYXJhZ3JhcGgzID0gQVRLX1RFWFQoYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGls
ZChvYmplY3QsIDIpKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfSFlQRVJURVhUKHBhcmFncmFwaDMp
KTsKKworICAgIG5MaW5rcyA9IGF0a19oeXBlcnRleHRfZ2V0X25fbGlua3MoQVRLX0hZUEVSVEVY
VChwYXJhZ3JhcGgzKSk7CisgICAgZ19hc3NlcnRfY21waW50KG5MaW5rcywgPT0sIDEpOworCisg
ICAgaExpbmsgPSBhdGtfaHlwZXJ0ZXh0X2dldF9saW5rKEFUS19IWVBFUlRFWFQocGFyYWdyYXBo
MyksIDApOworICAgIGdfYXNzZXJ0KEFUS19IWVBFUkxJTksoaExpbmspKTsKKyAgICBoTGlua09i
amVjdCA9IGF0a19oeXBlcmxpbmtfZ2V0X29iamVjdChoTGluaywgMCk7CisgICAgZ19hc3NlcnQo
QVRLX09CSkVDVChoTGlua09iamVjdCkpOworICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3Jv
bGUoaExpbmtPYmplY3QpID09IEFUS19ST0xFX1BVU0hfQlVUVE9OKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoYXRrX2h5cGVybGlua19nZXRfc3RhcnRfaW5kZXgoaExpbmspLCA9PSwgMCk7CisgICAg
Z19hc3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0X2VuZF9pbmRleChoTGluayksID09LCAx
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfbl9hbmNob3JzKGhMaW5r
KSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcHN0cihhdGtfaHlwZXJsaW5rX2dldF91cmkoaExp
bmssIDApLCA9PSwgMCk7CisKKyAgICBnX29iamVjdF91bnJlZihwYXJhZ3JhcGgxKTsKKyAgICBn
X29iamVjdF91bnJlZihwYXJhZ3JhcGgyKTsKKyAgICBnX29iamVjdF91bnJlZihwYXJhZ3JhcGgz
KTsKKyAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdl
YmtpdEF0a0dldEhlYWRlcnNJblRhYmxlKCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3
ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmplY3Rf
cmVmX3Npbmsod2ViVmlldyk7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAw
LCA4MDAsIDYwMCB9OworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdl
YlZpZXcpLCAmYWxsb2NhdGlvbik7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdl
YlZpZXcsIGNvbnRlbnRzSW5UYWJsZVdpdGhIZWFkZXJzLCAwLCAwLCAwKTsKKworICAgIEF0a09i
amVjdCogYXhXZWJWaWV3ID0gZ2V0V2ViQXJlYU9iamVjdCh3ZWJWaWV3KTsKKyAgICBnX2Fzc2Vy
dChheFdlYlZpZXcpOworCisgICAgLyogQ2hlY2sgdGFibGUgd2l0aCBib3RoIGNvbHVtbiBhbmQg
cm93IGhlYWRlcnMuICovCisgICAgQXRrT2JqZWN0KiB0YWJsZSA9IGF0a19vYmplY3RfcmVmX2Fj
Y2Vzc2libGVfY2hpbGQoYXhXZWJWaWV3LCAwKTsKKyAgICBnX2Fzc2VydCh0YWJsZSk7CisgICAg
Z19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZSh0YWJsZSkgPT0gQVRLX1JPTEVfVEFCTEUpOwor
CisgICAgQXRrT2JqZWN0KiBjb2xIZWFkZXIgPSBhdGtfdGFibGVfZ2V0X2NvbHVtbl9oZWFkZXIo
QVRLX1RBQkxFKHRhYmxlKSwgMCk7CisgICAgZ19hc3NlcnQoY29sSGVhZGVyKTsKKyAgICBnX2Fz
c2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGNvbEhlYWRlcikgPT0gQVRLX1JPTEVfVEFCTEVfQ0VM
TCk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfaW5kZXhfaW5fcGFyZW50KGNvbEhlYWRl
cikgPT0gMCk7CisKKyAgICBjb2xIZWFkZXIgPSBhdGtfdGFibGVfZ2V0X2NvbHVtbl9oZWFkZXIo
QVRLX1RBQkxFKHRhYmxlKSwgMSk7CisgICAgZ19hc3NlcnQoY29sSGVhZGVyKTsKKyAgICBnX2Fz
c2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGNvbEhlYWRlcikgPT0gQVRLX1JPTEVfVEFCTEVfQ0VM
TCk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfaW5kZXhfaW5fcGFyZW50KGNvbEhlYWRl
cikgPT0gMSk7CisKKyAgICBjb2xIZWFkZXIgPSBhdGtfdGFibGVfZ2V0X2NvbHVtbl9oZWFkZXIo
QVRLX1RBQkxFKHRhYmxlKSwgMik7CisgICAgZ19hc3NlcnQoY29sSGVhZGVyKTsKKyAgICBnX2Fz
c2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGNvbEhlYWRlcikgPT0gQVRLX1JPTEVfVEFCTEVfQ0VM
TCk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfaW5kZXhfaW5fcGFyZW50KGNvbEhlYWRl
cikgPT0gMik7CisKKyAgICBjb2xIZWFkZXIgPSBhdGtfdGFibGVfZ2V0X2NvbHVtbl9oZWFkZXIo
QVRLX1RBQkxFKHRhYmxlKSwgMyk7CisgICAgZ19hc3NlcnQoY29sSGVhZGVyKTsKKyAgICBnX2Fz
c2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGNvbEhlYWRlcikgPT0gQVRLX1JPTEVfVEFCTEVfQ0VM
TCk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfaW5kZXhfaW5fcGFyZW50KGNvbEhlYWRl
cikgPT0gMik7CisKKyAgICBBdGtPYmplY3QqIHJvd0hlYWRlciA9IGF0a190YWJsZV9nZXRfcm93
X2hlYWRlcihBVEtfVEFCTEUodGFibGUpLCAwKTsKKyAgICBnX2Fzc2VydChyb3dIZWFkZXIpOwor
ICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUocm93SGVhZGVyKSA9PSBBVEtfUk9MRV9U
QUJMRV9DRUxMKTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9pbmRleF9pbl9wYXJlbnQo
cm93SGVhZGVyKSA9PSAwKTsKKworICAgIHJvd0hlYWRlciA9IGF0a190YWJsZV9nZXRfcm93X2hl
YWRlcihBVEtfVEFCTEUodGFibGUpLCAxKTsKKyAgICBnX2Fzc2VydChyb3dIZWFkZXIpOworICAg
IGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUocm93SGVhZGVyKSA9PSBBVEtfUk9MRV9UQUJM
RV9DRUxMKTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9pbmRleF9pbl9wYXJlbnQocm93
SGVhZGVyKSA9PSAzKTsKKworICAgIHJvd0hlYWRlciA9IGF0a190YWJsZV9nZXRfcm93X2hlYWRl
cihBVEtfVEFCTEUodGFibGUpLCAyKTsKKyAgICBnX2Fzc2VydChyb3dIZWFkZXIpOworICAgIGdf
YXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUocm93SGVhZGVyKSA9PSBBVEtfUk9MRV9UQUJMRV9D
RUxMKTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9pbmRleF9pbl9wYXJlbnQocm93SGVh
ZGVyKSA9PSA3KTsKKworICAgIHJvd0hlYWRlciA9IGF0a190YWJsZV9nZXRfcm93X2hlYWRlcihB
VEtfVEFCTEUodGFibGUpLCAzKTsKKyAgICBnX2Fzc2VydChyb3dIZWFkZXIpOworICAgIGdfYXNz
ZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUocm93SGVhZGVyKSA9PSBBVEtfUk9MRV9UQUJMRV9DRUxM
KTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9pbmRleF9pbl9wYXJlbnQocm93SGVhZGVy
KSA9PSA3KTsKKworICAgIGdfb2JqZWN0X3VucmVmKHRhYmxlKTsKKworICAgIC8qIENoZWNrIHRh
YmxlIHdpdGggbm8gaGVhZGVycyBhdCBhbGwuICovCisgICAgdGFibGUgPSBhdGtfb2JqZWN0X3Jl
Zl9hY2Nlc3NpYmxlX2NoaWxkKGF4V2ViVmlldywgMSk7CisgICAgZ19hc3NlcnQodGFibGUpOwor
ICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUodGFibGUpID09IEFUS19ST0xFX1RBQkxF
KTsKKworICAgIGNvbEhlYWRlciA9IGF0a190YWJsZV9nZXRfY29sdW1uX2hlYWRlcihBVEtfVEFC
TEUodGFibGUpLCAwKTsKKyAgICBnX2Fzc2VydChjb2xIZWFkZXIgPT0gMCk7CisKKyAgICBjb2xI
ZWFkZXIgPSBhdGtfdGFibGVfZ2V0X2NvbHVtbl9oZWFkZXIoQVRLX1RBQkxFKHRhYmxlKSwgMSk7
CisgICAgZ19hc3NlcnQoY29sSGVhZGVyID09IDApOworCisgICAgcm93SGVhZGVyID0gYXRrX3Rh
YmxlX2dldF9yb3dfaGVhZGVyKEFUS19UQUJMRSh0YWJsZSksIDApOworICAgIGdfYXNzZXJ0KHJv
d0hlYWRlciA9PSAwKTsKKworICAgIHJvd0hlYWRlciA9IGF0a190YWJsZV9nZXRfcm93X2hlYWRl
cihBVEtfVEFCTEUodGFibGUpLCAxKTsKKyAgICBnX2Fzc2VydChyb3dIZWFkZXIgPT0gMCk7CisK
KyAgICBnX29iamVjdF91bnJlZih0YWJsZSk7CisgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7
Cit9CisKK3N0YXRpYyBnaW50IGNvbXBBdGtBdHRyaWJ1dGUoQXRrQXR0cmlidXRlKiBhMSwgQXRr
QXR0cmlidXRlKiBhMikKK3sKKyAgICBnaW50IHN0cmNtcFZhbCA9IGdfc3RyY21wMChhMS0+bmFt
ZSwgYTItPm5hbWUpOworICAgIGlmIChzdHJjbXBWYWwpCisgICAgICAgIHJldHVybiBzdHJjbXBW
YWw7CisgICAgcmV0dXJuIGdfc3RyY21wMChhMS0+dmFsdWUsIGEyLT52YWx1ZSk7Cit9CisKK3N0
YXRpYyBnaW50IGNvbXBBdGtBdHRyaWJ1dGVOYW1lKEF0a0F0dHJpYnV0ZSogYTEsIEF0a0F0dHJp
YnV0ZSogYTIpCit7CisgICAgcmV0dXJuIGdfc3RyY21wMChhMS0+bmFtZSwgYTItPm5hbWUpOwor
fQorCitzdGF0aWMgZ2Jvb2xlYW4gYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlTmFtZUhhc1ZhbHVl
KEF0a0F0dHJpYnV0ZVNldCogc2V0LCBjb25zdCBnY2hhciogYXR0cmlidXRlTmFtZSwgY29uc3Qg
Z2NoYXIqIHZhbHVlKQoreworICAgIEF0a0F0dHJpYnV0ZSBhdDsKKyAgICBhdC5uYW1lID0gKGdj
aGFyKilhdHRyaWJ1dGVOYW1lOworICAgIEdTTGlzdCogZWxlbWVudCA9IGdfc2xpc3RfZmluZF9j
dXN0b20oc2V0LCAmYXQsIChHQ29tcGFyZUZ1bmMpY29tcEF0a0F0dHJpYnV0ZU5hbWUpOworICAg
IHJldHVybiBlbGVtZW50ICYmICFnX3N0cmNtcDAoKChBdGtBdHRyaWJ1dGUqKShlbGVtZW50LT5k
YXRhKSktPnZhbHVlLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBhdGtBdHRyaWJ1dGVT
ZXRDb250YWluc0F0dHJpYnV0ZU5hbWUoQXRrQXR0cmlidXRlU2V0KiBzZXQsIGNvbnN0IGdjaGFy
KiBhdHRyaWJ1dGVOYW1lKQoreworICAgIEF0a0F0dHJpYnV0ZSBhdDsKKyAgICBhdC5uYW1lID0g
KGdjaGFyKilhdHRyaWJ1dGVOYW1lOworICAgIHJldHVybiBnX3NsaXN0X2ZpbmRfY3VzdG9tKHNl
dCwgJmF0LCAoR0NvbXBhcmVGdW5jKWNvbXBBdGtBdHRyaWJ1dGVOYW1lKSA/IHRydWUgOiBmYWxz
ZTsKK30KKworc3RhdGljIGdib29sZWFuIGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVl
KEF0a0F0dHJpYnV0ZVNldCogc2V0LCBBdGtUZXh0QXR0cmlidXRlIGF0dHJpYnV0ZSwgY29uc3Qg
Z2NoYXIqIHZhbHVlKQoreworICAgIHJldHVybiBhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVOYW1l
SGFzVmFsdWUoc2V0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoYXR0cmlidXRlKSwgdmFs
dWUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gYXRrQXR0cmlidXRlU2V0QXJlRXF1YWwoQXRrQXR0
cmlidXRlU2V0KiBzZXQxLCBBdGtBdHRyaWJ1dGVTZXQqIHNldDIpCit7CisgICAgaWYgKCFzZXQx
KQorICAgICAgICByZXR1cm4gIXNldDI7CisKKyAgICBzZXQxID0gZ19zbGlzdF9zb3J0KHNldDEs
IChHQ29tcGFyZUZ1bmMpY29tcEF0a0F0dHJpYnV0ZSk7CisgICAgc2V0MiA9IGdfc2xpc3Rfc29y
dChzZXQyLCAoR0NvbXBhcmVGdW5jKWNvbXBBdGtBdHRyaWJ1dGUpOworCisgICAgd2hpbGUgKHNl
dDEpIHsKKyAgICAgICAgaWYgKCFzZXQyIHx8IGNvbXBBdGtBdHRyaWJ1dGUoc2V0MS0+ZGF0YSwg
c2V0Mi0+ZGF0YSkpCisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICAgICAgc2V0MSA9
IHNldDEtPm5leHQ7CisgICAgICAgIHNldDIgPSBzZXQyLT5uZXh0OworICAgIH0KKworICAgIHJl
dHVybiAoIXNldDIpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrVGV4dEF0dHJpYnV0
ZXMoKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Vi
a2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKKyAg
ICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDgwMCwgNjAwIH07CisgICAgZ3Rr
X3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQod2ViVmlldyksICZhbGxvY2F0aW9uKTsK
KyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgdGV4dFdpdGhBdHRyaWJ1
dGVzLCAwLCAwLCAwKTsKKworICAgIEF0a09iamVjdCogb2JqZWN0ID0gZ2V0V2ViQXJlYU9iamVj
dCh3ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChvYmplY3QpOworCisgICAgQXRrT2JqZWN0KiBjaGls
ZCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAwKTsKKyAgICBnX2Fz
c2VydChjaGlsZCAmJiBBVEtfSVNfVEVYVChjaGlsZCkpOworICAgIEF0a1RleHQqIGNoaWxkVGV4
dCA9IEFUS19URVhUKGNoaWxkKTsKKworICAgIGdpbnQgc3RhcnRPZmZzZXQ7CisgICAgZ2ludCBl
bmRPZmZzZXQ7CisgICAgQXRrQXR0cmlidXRlU2V0KiBzZXQxID0gYXRrX3RleHRfZ2V0X3J1bl9h
dHRyaWJ1dGVzKGNoaWxkVGV4dCwgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
ZW5kT2Zmc2V0LCA9PSwgMTIpOworICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEFyZUVxdWFs
KHNldDEsIDApKTsKKworICAgIEF0a0F0dHJpYnV0ZVNldCogc2V0MiA9IGF0a190ZXh0X2dldF9y
dW5fYXR0cmlidXRlcyhjaGlsZFRleHQsIDE1LCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOwor
ICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDEyKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoZW5kT2Zmc2V0LCA9PSwgMTcpOworICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEF0
dHJpYnV0ZUhhc1ZhbHVlKHNldDIsIEFUS19URVhUX0FUVFJfU1RZTEUsICJpdGFsaWMiKSk7CisK
KyAgICBBdGtBdHRyaWJ1dGVTZXQqIHNldDMgPSBhdGtfdGV4dF9nZXRfcnVuX2F0dHJpYnV0ZXMo
Y2hpbGRUZXh0LCAxNywgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoc3RhcnRPZmZzZXQsID09LCAxNyk7CisgICAgZ19hc3NlcnRfY21waW50KGVuZE9mZnNl
dCwgPT0sIDQwKTsKKyAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVIYXNWYWx1
ZShzZXQzLCBBVEtfVEVYVF9BVFRSX1dFSUdIVCwgIjcwMCIpKTsKKworICAgIEF0a0F0dHJpYnV0
ZVNldCogc2V0NCA9IGF0a190ZXh0X2dldF9kZWZhdWx0X2F0dHJpYnV0ZXMoY2hpbGRUZXh0KTsK
KyAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVIYXNWYWx1ZShzZXQ0LCBBVEtf
VEVYVF9BVFRSX1NUWUxFLCAibm9ybWFsIikpOworICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNl
dEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDQsIEFUS19URVhUX0FUVFJfSlVTVElGSUNBVElPTiwgInJp
Z2h0IikpOworICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKHNl
dDQsIEFUS19URVhUX0FUVFJfU0laRSwgIjE0IikpOworICAgIGF0a19hdHRyaWJ1dGVfc2V0X2Zy
ZWUoc2V0MSk7CisgICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJlZShzZXQyKTsKKyAgICBhdGtfYXR0
cmlidXRlX3NldF9mcmVlKHNldDMpOworICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0NCk7
CisKKyAgICBnX29iamVjdF91bnJlZihjaGlsZCk7CisgICAgY2hpbGQgPSBhdGtfb2JqZWN0X3Jl
Zl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMSk7CisgICAgZ19hc3NlcnQoY2hpbGQgJiYgQVRL
X0lTX1RFWFQoY2hpbGQpKTsKKyAgICBjaGlsZFRleHQgPSBBVEtfVEVYVChjaGlsZCk7CisKKyAg
ICBzZXQxID0gYXRrX3RleHRfZ2V0X2RlZmF1bHRfYXR0cmlidXRlcyhjaGlsZFRleHQpOworICAg
IGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDEsIEFUS19URVhU
X0FUVFJfRkFNSUxZX05BTUUsICJtb25vc3BhY2UiKSk7CisgICAgZ19hc3NlcnQoYXRrQXR0cmli
dXRlU2V0QXR0cmlidXRlSGFzVmFsdWUoc2V0MSwgQVRLX1RFWFRfQVRUUl9TVFlMRSwgIm5vcm1h
bCIpKTsKKyAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVIYXNWYWx1ZShzZXQx
LCBBVEtfVEVYVF9BVFRSX1NUUklLRVRIUk9VR0gsICJmYWxzZSIpKTsKKyAgICBnX2Fzc2VydChh
dGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVIYXNWYWx1ZShzZXQxLCBBVEtfVEVYVF9BVFRSX1dFSUdI
VCwgIjQwMCIpKTsKKyAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVIYXNWYWx1
ZShzZXQxLCBBVEtfVEVYVF9BVFRSX0ZHX0NPTE9SLCAiMTIwLDEyMSwxMjIiKSk7CisKKyAgICBz
ZXQyID0gYXRrX3RleHRfZ2V0X3J1bl9hdHRyaWJ1dGVzKGNoaWxkVGV4dCwgNDMsICZzdGFydE9m
ZnNldCwgJmVuZE9mZnNldCk7CisgICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwg
NDMpOworICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCA4MCk7CisgICAgLyogQ2hl
Y2tzIHRoYXQgZGVmYXVsdCBhdHRyaWJ1dGVzIG9mIHRleHQgYXJlIG5vdCByZXR1cm5lZCB3aGVu
IGNhbGxlZCB0byBhdGtfdGV4dF9nZXRfcnVuX2F0dHJpYnV0ZXMuICovCisgICAgZ19hc3NlcnQo
IWF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDIsIEFUS19URVhUX0FUVFJfRkdf
Q09MT1IsICIxMjAsMTIxLDEyMiIpKTsKKyAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRy
aWJ1dGVIYXNWYWx1ZShzZXQyLCBBVEtfVEVYVF9BVFRSX1VOREVSTElORSwgInNpbmdsZSIpKTsK
KyAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVIYXNWYWx1ZShzZXQyLCBBVEtf
VEVYVF9BVFRSX0JHX0NPTE9SLCAiODAsODEsODIiKSk7CisgICAgYXRrX2F0dHJpYnV0ZV9zZXRf
ZnJlZShzZXQxKTsKKyAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHNldDIpOworICAgIGdfb2Jq
ZWN0X3VucmVmKGNoaWxkKTsKKworICAgIGNoaWxkID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJs
ZV9jaGlsZChvYmplY3QsIDIpOworICAgIGdfYXNzZXJ0KGNoaWxkICYmIEFUS19JU19URVhUKGNo
aWxkKSk7CisgICAgY2hpbGRUZXh0ID0gQVRLX1RFWFQoY2hpbGQpOworCisgICAgc2V0MSA9IGF0
a190ZXh0X2dldF9ydW5fYXR0cmlidXRlcyhjaGlsZFRleHQsIDAsICZzdGFydE9mZnNldCwgJmVu
ZE9mZnNldCk7CisgICAgc2V0MiA9IGF0a190ZXh0X2dldF9ydW5fYXR0cmlidXRlcyhjaGlsZFRl
eHQsIDMsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgZ19hc3NlcnQoYXRrQXR0cmli
dXRlU2V0QXJlRXF1YWwoc2V0MSwgc2V0MikpOworICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUo
c2V0Mik7CisKKyAgICBzZXQyID0gYXRrX3RleHRfZ2V0X3J1bl9hdHRyaWJ1dGVzKGNoaWxkVGV4
dCwgMSwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAgICBzZXQzID0gYXRrX3RleHRfZ2V0
X3J1bl9hdHRyaWJ1dGVzKGNoaWxkVGV4dCwgNSwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsK
KyAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBcmVFcXVhbChzZXQyLCBzZXQzKSk7CisgICAg
Z19hc3NlcnQoIWF0a0F0dHJpYnV0ZVNldEFyZUVxdWFsKHNldDEsIHNldDIpKTsKKyAgICBhdGtf
YXR0cmlidXRlX3NldF9mcmVlKHNldDMpOworCisgICAgc2V0MyA9IGF0a190ZXh0X2dldF9ydW5f
YXR0cmlidXRlcyhjaGlsZFRleHQsIDIsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAg
c2V0NCA9IGF0a190ZXh0X2dldF9ydW5fYXR0cmlidXRlcyhjaGlsZFRleHQsIDYsICZzdGFydE9m
ZnNldCwgJmVuZE9mZnNldCk7CisgICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0QXJlRXF1YWwo
c2V0Mywgc2V0NCkpOworICAgIGdfYXNzZXJ0KCFhdGtBdHRyaWJ1dGVTZXRBcmVFcXVhbChzZXQx
LCBzZXQzKSk7CisgICAgZ19hc3NlcnQoIWF0a0F0dHJpYnV0ZVNldEFyZUVxdWFsKHNldDIsIHNl
dDMpKTsKKyAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHNldDEpOworICAgIGF0a19hdHRyaWJ1
dGVfc2V0X2ZyZWUoc2V0Mik7CisgICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJlZShzZXQzKTsKKyAg
ICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHNldDQpOworICAgIGdfb2JqZWN0X3VucmVmKGNoaWxk
KTsKKworICAgIGNoaWxkID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3Qs
IDMpOworICAgIGdfYXNzZXJ0KGNoaWxkICYmIEFUS19JU19URVhUKGNoaWxkKSk7CisgICAgY2hp
bGRUZXh0ID0gQVRLX1RFWFQoY2hpbGQpOworICAgIHNldDEgPSBhdGtfdGV4dF9nZXRfcnVuX2F0
dHJpYnV0ZXMoY2hpbGRUZXh0LCAyNCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAyMSk7CisgICAgZ19hc3NlcnRfY21waW50
KGVuZE9mZnNldCwgPT0sIDI1KTsKKyAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1
dGVIYXNWYWx1ZShzZXQxLCBBVEtfVEVYVF9BVFRSX1NUUklLRVRIUk9VR0gsICJ0cnVlIikpOwor
CisgICAgc2V0MiA9IGF0a190ZXh0X2dldF9ydW5fYXR0cmlidXRlcyhjaGlsZFRleHQsIDI1LCAm
c3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOworICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNl
dCwgPT0sIDI1KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMzApOworICAg
IGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEFyZUVxdWFsKHNldDIsIDApKTsKKworICAgIHNldDMg
PSBhdGtfdGV4dF9nZXRfZGVmYXVsdF9hdHRyaWJ1dGVzKGNoaWxkVGV4dCk7CisgICAgZ19hc3Nl
cnQoYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlSGFzVmFsdWUoc2V0MywgQVRLX1RFWFRfQVRUUl9K
VVNUSUZJQ0FUSU9OLCAiY2VudGVyIikpOworICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0
MSk7CisgICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJlZShzZXQyKTsKKyAgICBhdGtfYXR0cmlidXRl
X3NldF9mcmVlKHNldDMpOworCisgICAgZ19vYmplY3RfdW5yZWYoY2hpbGQpOworfQorCitzdGF0
aWMgZ2NoYXIqIHRleHRTZWxlY3Rpb25DaGFuZ2VkUmVzdWx0ID0gMDsKKworc3RhdGljIHZvaWQg
dGV4dFNlbGVjdGlvbkNoYW5nZWRDYWxsYmFjayhBdGtUZXh0KiB0ZXh0LCBncG9pbnRlciBkYXRh
KQoreworICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHRleHQpKTsKKworICAgIGdfZnJlZSh0ZXh0
U2VsZWN0aW9uQ2hhbmdlZFJlc3VsdCk7CisgICAgQXRrUm9sZSByb2xlID0gYXRrX29iamVjdF9n
ZXRfcm9sZShBVEtfT0JKRUNUKHRleHQpKTsKKyAgICBpbnQgc3RhcnRPZmZzZXQgPSAwOworICAg
IGludCBlbmRPZmZzZXQgPSAwOworICAgIGF0a190ZXh0X2dldF9zZWxlY3Rpb24oQVRLX1RFWFQo
dGV4dCksIDAsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgdGV4dFNlbGVjdGlvbkNo
YW5nZWRSZXN1bHQgPSBnX3N0cmR1cF9wcmludGYoInwlc3wlZHwlZHwiLCBhdGtfcm9sZV9nZXRf
bmFtZShyb2xlKSwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIHRl
c3RXZWJraXRBdGtUZXh0U2VsZWN0aW9ucygpCit7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmll
dyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0
X3JlZl9zaW5rKHdlYlZpZXcpOworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwg
MCwgODAwLCA2MDAgfTsKKyAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVCh3
ZWJWaWV3KSwgJmFsbG9jYXRpb24pOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3
ZWJWaWV3LCB0ZXh0Rm9yU2VsZWN0aW9ucywgMCwgMCwgMCk7CisKKyAgICBBdGtPYmplY3QqIG9i
amVjdCA9IGdldFdlYkFyZWFPYmplY3Qod2ViVmlldyk7CisgICAgZ19hc3NlcnQob2JqZWN0KTsK
KworICAgIEF0a1RleHQqIHBhcmFncmFwaDEgPSBBVEtfVEVYVChhdGtfb2JqZWN0X3JlZl9hY2Nl
c3NpYmxlX2NoaWxkKG9iamVjdCwgMCkpOworICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHBhcmFn
cmFwaDEpKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KHBhcmFncmFwaDEsICJ0ZXh0LXNlbGVjdGlv
bi1jaGFuZ2VkIiwgR19DQUxMQkFDSyh0ZXh0U2VsZWN0aW9uQ2hhbmdlZENhbGxiYWNrKSwgMCk7
CisKKyAgICBBdGtUZXh0KiBwYXJhZ3JhcGgyID0gQVRLX1RFWFQoYXRrX29iamVjdF9yZWZfYWNj
ZXNzaWJsZV9jaGlsZChvYmplY3QsIDEpKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChwYXJh
Z3JhcGgyKSk7CisgICAgZ19zaWduYWxfY29ubmVjdChwYXJhZ3JhcGgyLCAidGV4dC1zZWxlY3Rp
b24tY2hhbmdlZCIsIEdfQ0FMTEJBQ0sodGV4dFNlbGVjdGlvbkNoYW5nZWRDYWxsYmFjayksIDAp
OworCisgICAgQXRrVGV4dCogbGluayA9IEFUS19URVhUKGF0a19vYmplY3RfcmVmX2FjY2Vzc2li
bGVfY2hpbGQoQVRLX09CSkVDVChwYXJhZ3JhcGgyKSwgMCkpOworICAgIGdfYXNzZXJ0KEFUS19J
U19URVhUKGxpbmspKTsKKworICAgIEF0a09iamVjdCogbGlzdCA9IGF0a19vYmplY3RfcmVmX2Fj
Y2Vzc2libGVfY2hpbGQob2JqZWN0LCAyKTsKKyAgICBnX2Fzc2VydChBVEtfT0JKRUNUKGxpc3Qp
KTsKKworICAgIEF0a1RleHQqIGxpc3RJdGVtID0gQVRLX1RFWFQoYXRrX29iamVjdF9yZWZfYWNj
ZXNzaWJsZV9jaGlsZChsaXN0LCAwKSk7CisgICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQobGlzdEl0
ZW0pKTsKKworICAgIC8qIEZpcnN0IHBhcmFncmFwaCAoc2ltcGxlIHRleHQpLiAqLworCisgICAg
LyogQmFzaWMgaW5pdGlhbCBjaGVja3MuICovCisgICAgZ19hc3NlcnRfY21waW50KGF0a190ZXh0
X2dldF9uX3NlbGVjdGlvbnMocGFyYWdyYXBoMSksID09LCAwKTsKKworICAgIGdpbnQgc3RhcnRP
ZmZzZXQ7CisgICAgZ2ludCBlbmRPZmZzZXQ7CisgICAgZ2NoYXIqIHNlbGVjdGVkVGV4dCA9IGF0
a190ZXh0X2dldF9zZWxlY3Rpb24ocGFyYWdyYXBoMSwgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zm
c2V0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAwKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVj
dGVkVGV4dCwgPT0sIDApOworICAgIGdfZnJlZSAoc2VsZWN0ZWRUZXh0KTsKKworICAgIC8qIFRy
eSByZW1vdmluZyBhIG5vbiBleGlzdGluZyAoeWV0KSBzZWxlY3Rpb24uICovCisgICAgZ2Jvb2xl
YW4gcmVzdWx0ID0gYXRrX3RleHRfcmVtb3ZlX3NlbGVjdGlvbihwYXJhZ3JhcGgxLCAwKTsKKyAg
ICBnX2Fzc2VydCghcmVzdWx0KTsKKworICAgIC8qIFRyeSBzZXR0aW5nIGEgMC1jaGFyIHNlbGVj
dGlvbi4gKi8KKyAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfc2VsZWN0aW9uKHBhcmFncmFwaDEs
IDAsIDUsIDUpOworICAgIGdfYXNzZXJ0KHJlc3VsdCk7CisKKyAgICAvKiBNYWtlIGEgc2VsZWN0
aW9uIGFuZCB0ZXN0IGl0LiAqLworICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9zZWxlY3Rpb24o
cGFyYWdyYXBoMSwgMCwgNSwgMjUpOworICAgIGdfYXNzZXJ0KHJlc3VsdCk7CisgICAgZ19hc3Nl
cnRfY21waW50KGF0a190ZXh0X2dldF9uX3NlbGVjdGlvbnMocGFyYWdyYXBoMSksID09LCAxKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIodGV4dFNlbGVjdGlvbkNoYW5nZWRSZXN1bHQsID09LCAifHBh
cmFncmFwaHw1fDI1fCIpOworICAgIHNlbGVjdGVkVGV4dCA9IGF0a190ZXh0X2dldF9zZWxlY3Rp
b24ocGFyYWdyYXBoMSwgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCA1KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zm
c2V0LCA9PSwgMjUpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZFRleHQsID09LCAiYWdy
YXBoIHdpdGggcGxhaW4gdGUiKTsKKyAgICBnX2ZyZWUgKHNlbGVjdGVkVGV4dCk7CisKKyAgICAv
KiBUcnkgcmVtb3ZpbmcgdGhlIHNlbGVjdGlvbiBmcm9tIG90aGVyIEF0a1RleHQgb2JqZWN0IChz
aG91bGQgZmFpbCkuICovCisgICAgcmVzdWx0ID0gYXRrX3RleHRfcmVtb3ZlX3NlbGVjdGlvbihw
YXJhZ3JhcGgyLCAwKTsKKyAgICBnX2Fzc2VydCghcmVzdWx0KTsKKworICAgIC8qIFJlbW92ZSB0
aGUgc2VsZWN0aW9uIGFuZCB0ZXN0IGV2ZXJ5dGhpbmcgYWdhaW4uICovCisgICAgcmVzdWx0ID0g
YXRrX3RleHRfcmVtb3ZlX3NlbGVjdGlvbihwYXJhZ3JhcGgxLCAwKTsKKyAgICBnX2Fzc2VydChy
ZXN1bHQpOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfdGV4dF9nZXRfbl9zZWxlY3Rpb25zKHBh
cmFncmFwaDEpLCA9PSwgMCk7CisgICAgc2VsZWN0ZWRUZXh0ID0gYXRrX3RleHRfZ2V0X3NlbGVj
dGlvbihwYXJhZ3JhcGgxLCAwLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOworICAgIC8qIE5v
dyBvZmZzZXRzIHNob3VsZCBiZSB0aGUgc2FtZSwgc2V0IHRvIHRoZSBsYXN0IHBvc2l0aW9uIG9m
IHRoZSBjYXJldC4gKi8KKyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCBlbmRP
ZmZzZXQpOworICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDI1KTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMjUpOworICAgIGdfYXNzZXJ0X2NtcHN0cihz
ZWxlY3RlZFRleHQsID09LCAwKTsKKyAgICBnX2ZyZWUgKHNlbGVjdGVkVGV4dCk7CisKKyAgICAv
KiBTZWNvbmQgcGFyYWdyYXBoICh0ZXh0ICsgbGluayArIHRleHQpLiAqLworCisgICAgLyogU2V0
IGEgc2VsZWN0aW9uIHBhcnRpYWxseSBjb3ZlcmluZyB0aGUgbGluayBhbmQgdGVzdCBpdC4gKi8K
KyAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfc2VsZWN0aW9uKHBhcmFncmFwaDIsIDAsIDcsIDIx
KTsKKyAgICBnX2Fzc2VydChyZXN1bHQpOworCisgICAgLyogVGVzdCB0aGUgcGFyYWdyYXBoIGZp
cnN0LiAqLworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfdGV4dF9nZXRfbl9zZWxlY3Rpb25zKHBh
cmFncmFwaDIpLCA9PSwgMSk7CisgICAgc2VsZWN0ZWRUZXh0ID0gYXRrX3RleHRfZ2V0X3NlbGVj
dGlvbihwYXJhZ3JhcGgyLCAwLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOworICAgIGdfYXNz
ZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDcpOworICAgIGdfYXNzZXJ0X2NtcGludChlbmRP
ZmZzZXQsID09LCAyMSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkVGV4dCwgPT0sICJy
YXBoIHdpdGggYSBsaSIpOworICAgIGdfZnJlZSAoc2VsZWN0ZWRUZXh0KTsKKworICAgIC8qIE5v
dyB0ZXN0IGp1c3QgdGhlIGxpbmsuICovCisgICAgZ19hc3NlcnRfY21waW50KGF0a190ZXh0X2dl
dF9uX3NlbGVjdGlvbnMobGluayksID09LCAxKTsKKyAgICBzZWxlY3RlZFRleHQgPSBhdGtfdGV4
dF9nZXRfc2VsZWN0aW9uKGxpbmssIDAsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAg
Z19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21waW50
KGVuZE9mZnNldCwgPT0sIDQpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZFRleHQsID09
LCAiYSBsaSIpOworICAgIGdfZnJlZSAoc2VsZWN0ZWRUZXh0KTsKKworICAgIC8qIE1ha2UgYSBz
ZWxlY3Rpb24gYWZ0ZXIgdGhlIGxpbmsgYW5kIGNoZWNrIHNlbGVjdGlvbiBmb3IgdGhlIHdob2xl
IHBhcmFncmFwaC4gKi8KKyAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfc2VsZWN0aW9uKHBhcmFn
cmFwaDIsIDAsIDI3LCAzNyk7CisgICAgZ19hc3NlcnQocmVzdWx0KTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoYXRrX3RleHRfZ2V0X25fc2VsZWN0aW9ucyhwYXJhZ3JhcGgyKSwgPT0sIDEpOworICAg
IGdfYXNzZXJ0X2NtcHN0cih0ZXh0U2VsZWN0aW9uQ2hhbmdlZFJlc3VsdCwgPT0sICJ8cGFyYWdy
YXBofDI3fDM3fCIpOworICAgIHNlbGVjdGVkVGV4dCA9IGF0a190ZXh0X2dldF9zZWxlY3Rpb24o
cGFyYWdyYXBoMiwgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoc3RhcnRPZmZzZXQsID09LCAyNyk7CisgICAgZ19hc3NlcnRfY21waW50KGVuZE9mZnNl
dCwgPT0sIDM3KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRUZXh0LCA9PSwgInRoZSBt
aWRkbGUiKTsKKyAgICBnX2ZyZWUgKHNlbGVjdGVkVGV4dCk7CisKKyAgICAvKiBSZW1vdmUgc2Vs
ZWN0aW9ucyBhbmQgdGV4dCBldmVyeXRoaW5nIGFnYWluLiAqLworICAgIHJlc3VsdCA9IGF0a190
ZXh0X3JlbW92ZV9zZWxlY3Rpb24ocGFyYWdyYXBoMiwgMCk7CisgICAgZ19hc3NlcnQocmVzdWx0
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX3RleHRfZ2V0X25fc2VsZWN0aW9ucyhwYXJhZ3Jh
cGgyKSwgPT0sIDApOworICAgIHNlbGVjdGVkVGV4dCA9IGF0a190ZXh0X2dldF9zZWxlY3Rpb24o
cGFyYWdyYXBoMiwgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAgICAvKiBOb3cgb2Zm
c2V0cyBzaG91bGQgYmUgdGhlIHNhbWUgKG5vIHNlbGVjdGlvbikuICovCisgICAgZ19hc3NlcnRf
Y21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgZW5kT2Zmc2V0KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIo
c2VsZWN0ZWRUZXh0LCA9PSwgMCk7CisgICAgZ19mcmVlIChzZWxlY3RlZFRleHQpOworCisgICAg
Z19hc3NlcnRfY21waW50KGF0a190ZXh0X2dldF9uX3NlbGVjdGlvbnMobGluayksID09LCAwKTsK
KyAgICBzZWxlY3RlZFRleHQgPSBhdGtfdGV4dF9nZXRfc2VsZWN0aW9uKGxpbmssIDAsICZzdGFy
dE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgLyogTm93IG9mZnNldHMgc2hvdWxkIGJlIHRoZSBz
YW1lIChubyBzZWxlY3Rpb24pLiAqLworICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwg
PT0sIGVuZE9mZnNldCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkVGV4dCwgPT0sIDAp
OworICAgIGdfZnJlZSAoc2VsZWN0ZWRUZXh0KTsKKworICAgIC8qIExpc3QgaXRlbSAqLworCisg
ICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShsaXN0KSA9PSBBVEtfUk9MRV9MSVNUKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX29iamVjdF9nZXRfbl9hY2Nlc3NpYmxlX2NoaWxkcmVu
KGxpc3QpLCA9PSwgMSk7CisKKyAgICAvKiBJdCdzIG5vdCBwb3NzaWJsZSB0byBzZWxlY3QgdGV4
dCBpbnNpZGUgYW4gaXRlbSdzIG1hcmtlci4gKi8KKyAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRf
c2VsZWN0aW9uIChsaXN0SXRlbSwgMCwgMCwgOSk7CisgICAgZ19hc3NlcnQoIXJlc3VsdCk7Cisg
ICAgcmVzdWx0ID0gYXRrX3RleHRfc2V0X3NlbGVjdGlvbiAobGlzdEl0ZW0sIDAsIDksIDEpOwor
ICAgIGdfYXNzZXJ0KCFyZXN1bHQpOworCisgICAgLyogSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRv
IHNlbGVjdCB0ZXh0IGluc2lkZSBhbiBpdGVtJ3MgdGV4dC4gKi8KKyAgICByZXN1bHQgPSBhdGtf
dGV4dF9zZXRfc2VsZWN0aW9uIChsaXN0SXRlbSwgMCwgMywgOSk7CisgICAgZ19hc3NlcnQocmVz
dWx0KTsKKworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfdGV4dF9nZXRfbl9zZWxlY3Rpb25zKGxp
c3RJdGVtKSwgPT0sIDEpOworICAgIHNlbGVjdGVkVGV4dCA9IGF0a190ZXh0X2dldF9zZWxlY3Rp
b24obGlzdEl0ZW0sIDAsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgZ19hc3NlcnRf
Y21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMyk7CisgICAgZ19hc3NlcnRfY21waW50KGVuZE9mZnNl
dCwgPT0sIDkpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZFRleHQsID09LCAiQSBsaXN0
Iik7CisgICAgZ19mcmVlIChzZWxlY3RlZFRleHQpOworCisgICAgZ19mcmVlKHRleHRTZWxlY3Rp
b25DaGFuZ2VkUmVzdWx0KTsKKworICAgIGdfb2JqZWN0X3VucmVmKHBhcmFncmFwaDEpOworICAg
IGdfb2JqZWN0X3VucmVmKHBhcmFncmFwaDIpOworICAgIGdfb2JqZWN0X3VucmVmKGxpbmspOwor
ICAgIGdfb2JqZWN0X3VucmVmKGxpc3QpOworICAgIGdfb2JqZWN0X3VucmVmKGxpc3RJdGVtKTsK
KyAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYmtp
dEF0a0dldEV4dGVudHMoKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRf
V0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBnX29iamVjdF9yZWZfc2luayh3
ZWJWaWV3KTsKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDgwMCwgNjAw
IH07CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQod2ViVmlldyksICZh
bGxvY2F0aW9uKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgY2Vu
dGVyZWRDb250ZW50cywgMCwgMCwgMCk7CisKKyAgICBBdGtPYmplY3QqIG9iamVjdCA9IGdldFdl
YkFyZWFPYmplY3Qod2ViVmlldyk7CisgICAgZ19hc3NlcnQob2JqZWN0KTsKKworICAgIEF0a1Rl
eHQqIHNob3J0VGV4dDEgPSBBVEtfVEVYVChhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxk
KG9iamVjdCwgMCkpOworICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHNob3J0VGV4dDEpKTsKKyAg
ICBBdGtUZXh0KiBsb25nVGV4dCA9IEFUS19URVhUKGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVf
Y2hpbGQob2JqZWN0LCAxKSk7CisgICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQobG9uZ1RleHQpKTsK
KyAgICBBdGtUZXh0KiBzaG9ydFRleHQyID0gQVRLX1RFWFQoYXRrX29iamVjdF9yZWZfYWNjZXNz
aWJsZV9jaGlsZChvYmplY3QsIDIpKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChzaG9ydFRl
eHQyKSk7CisgICAgQXRrVGV4dCogbXVsdGlsaW5lVGV4dCA9IEFUS19URVhUKGF0a19vYmplY3Rf
cmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAzKSk7CisgICAgZ19hc3NlcnQoQVRLX0lTX1RF
WFQobXVsdGlsaW5lVGV4dCkpOworCisgICAgLyogU3RhcnQgd2l0aCB3aW5kb3cgZXh0ZW50cy4g
Ki8KKyAgICBBdGtUZXh0UmVjdGFuZ2xlIHNsaW5lX3dpbmRvdzEsIHNsaW5lX3dpbmRvdzIsIGxs
aW5lX3dpbmRvdywgbWxpbmVfd2luZG93OworICAgIGF0a190ZXh0X2dldF9yYW5nZV9leHRlbnRz
KHNob3J0VGV4dDEsIDAsIDEwLCBBVEtfWFlfV0lORE9XLCAmc2xpbmVfd2luZG93MSk7CisgICAg
YXRrX3RleHRfZ2V0X3JhbmdlX2V4dGVudHMobG9uZ1RleHQsIDAsIDQ0LCBBVEtfWFlfV0lORE9X
LCAmbGxpbmVfd2luZG93KTsKKyAgICBhdGtfdGV4dF9nZXRfcmFuZ2VfZXh0ZW50cyhzaG9ydFRl
eHQyLCAwLCAxMCwgQVRLX1hZX1dJTkRPVywgJnNsaW5lX3dpbmRvdzIpOworICAgIGF0a190ZXh0
X2dldF9yYW5nZV9leHRlbnRzKG11bHRpbGluZVRleHQsIDAsIDYwLCBBVEtfWFlfV0lORE9XLCAm
bWxpbmVfd2luZG93KTsKKworICAgIC8qIENoZWNrIHZlcnRpY2FsIGxpbmUgcG9zaXRpb24uICov
CisgICAgZ19hc3NlcnRfY21waW50KHNsaW5lX3dpbmRvdzEueSArIHNsaW5lX3dpbmRvdzEuaGVp
Z2h0LCA8PSwgbGxpbmVfd2luZG93LnkpOworICAgIGdfYXNzZXJ0X2NtcGludChsbGluZV93aW5k
b3cueSArIGxsaW5lX3dpbmRvdy5oZWlnaHQgKyBzbGluZV93aW5kb3cyLmhlaWdodCwgPD0sIG1s
aW5lX3dpbmRvdy55KTsKKworICAgIC8qIFBhcmFncmFwaHMgMSBhbmQgMyBoYXZlIGlkZW50aWNh
bCB0ZXh0IGFuZCBhbGlnbm1lbnQuICovCisgICAgZ19hc3NlcnRfY21waW50KHNsaW5lX3dpbmRv
dzEueCwgPT0sIHNsaW5lX3dpbmRvdzIueCk7CisgICAgZ19hc3NlcnRfY21waW50KHNsaW5lX3dp
bmRvdzEud2lkdGgsID09LCBzbGluZV93aW5kb3cyLndpZHRoKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoc2xpbmVfd2luZG93MS5oZWlnaHQsID09LCBzbGluZV93aW5kb3cyLmhlaWdodCk7CisKKyAg
ICAvKiBBbGwgbGluZXMgc2hvdWxkIGJlIHRoZSBzYW1lIGhlaWdodDsgbGluZSAyIGlzIHRoZSB3
aWRlc3QgbGluZS4gKi8KKyAgICBnX2Fzc2VydF9jbXBpbnQoc2xpbmVfd2luZG93MS5oZWlnaHQs
ID09LCBsbGluZV93aW5kb3cuaGVpZ2h0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc2xpbmVfd2lu
ZG93MS53aWR0aCwgPCwgbGxpbmVfd2luZG93LndpZHRoKTsKKworICAgIC8qIE1ha2Ugc3VyZSB0
aGUgY2hhcmFjdGVyIGV4dGVudHMgaml2ZSB3aXRoIHRoZSByYW5nZSBleHRlbnRzLiAqLworICAg
IGdpbnQgeDsKKyAgICBnaW50IHk7CisgICAgZ2ludCB3aWR0aDsKKyAgICBnaW50IGhlaWdodDsK
KworICAgIC8qIEZpcnN0IHBhcmFncmFwaCAoc2hvcnQgdGV4dCkuICovCisgICAgYXRrX3RleHRf
Z2V0X2NoYXJhY3Rlcl9leHRlbnRzKHNob3J0VGV4dDEsIDAsICZ4LCAmeSwgJndpZHRoLCAmaGVp
Z2h0LCBBVEtfWFlfV0lORE9XKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoeCwgPT0sIHNsaW5lX3dp
bmRvdzEueCk7CisgICAgZ19hc3NlcnRfY21waW50KHksID09LCBzbGluZV93aW5kb3cxLnkpOwor
ICAgIGdfYXNzZXJ0X2NtcGludChoZWlnaHQsID09LCBzbGluZV93aW5kb3cxLmhlaWdodCk7CisK
KyAgICBhdGtfdGV4dF9nZXRfY2hhcmFjdGVyX2V4dGVudHMoc2hvcnRUZXh0MSwgOSwgJngsICZ5
LCAmd2lkdGgsICZoZWlnaHQsIEFUS19YWV9XSU5ET1cpOworICAgIGdfYXNzZXJ0X2NtcGludCh4
LCA9PSwgc2xpbmVfd2luZG93MS54ICsgc2xpbmVfd2luZG93MS53aWR0aCAtIHdpZHRoKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoeSwgPT0sIHNsaW5lX3dpbmRvdzEueSk7CisgICAgZ19hc3NlcnRf
Y21waW50KGhlaWdodCwgPT0sIHNsaW5lX3dpbmRvdzEuaGVpZ2h0KTsKKworICAgIC8qIFNlY29u
ZCBwYXJhZ3JhcGggKGxvbmcgdGV4dCkuICovCisgICAgYXRrX3RleHRfZ2V0X2NoYXJhY3Rlcl9l
eHRlbnRzKGxvbmdUZXh0LCAwLCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCwgQVRLX1hZX1dJTkRP
Vyk7CisgICAgZ19hc3NlcnRfY21waW50KHgsID09LCBsbGluZV93aW5kb3cueCk7CisgICAgZ19h
c3NlcnRfY21waW50KHksID09LCBsbGluZV93aW5kb3cueSk7CisgICAgZ19hc3NlcnRfY21waW50
KGhlaWdodCwgPT0sIGxsaW5lX3dpbmRvdy5oZWlnaHQpOworCisgICAgYXRrX3RleHRfZ2V0X2No
YXJhY3Rlcl9leHRlbnRzKGxvbmdUZXh0LCA0MywgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQsIEFU
S19YWV9XSU5ET1cpOworICAgIGdfYXNzZXJ0X2NtcGludCh4LCA9PSwgbGxpbmVfd2luZG93Lngg
KyBsbGluZV93aW5kb3cud2lkdGggLSB3aWR0aCk7CisgICAgZ19hc3NlcnRfY21waW50KHksID09
LCBsbGluZV93aW5kb3cueSk7CisgICAgZ19hc3NlcnRfY21waW50KGhlaWdodCwgPT0sIGxsaW5l
X3dpbmRvdy5oZWlnaHQpOworCisgICAgLyogVGhpcmQgcGFyYWdyYXBoIChzaG9ydCB0ZXh0KS4g
Ki8KKyAgICBhdGtfdGV4dF9nZXRfY2hhcmFjdGVyX2V4dGVudHMoc2hvcnRUZXh0MiwgMCwgJngs
ICZ5LCAmd2lkdGgsICZoZWlnaHQsIEFUS19YWV9XSU5ET1cpOworICAgIGdfYXNzZXJ0X2NtcGlu
dCh4LCA9PSwgc2xpbmVfd2luZG93Mi54KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoeSwgPT0sIHNs
aW5lX3dpbmRvdzIueSk7CisgICAgZ19hc3NlcnRfY21waW50KGhlaWdodCwgPT0sIHNsaW5lX3dp
bmRvdzIuaGVpZ2h0KTsKKworICAgIGF0a190ZXh0X2dldF9jaGFyYWN0ZXJfZXh0ZW50cyhzaG9y
dFRleHQyLCA5LCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCwgQVRLX1hZX1dJTkRPVyk7CisgICAg
Z19hc3NlcnRfY21waW50KHgsID09LCBzbGluZV93aW5kb3cyLnggKyBzbGluZV93aW5kb3cyLndp
ZHRoIC0gd2lkdGgpOworICAgIGdfYXNzZXJ0X2NtcGludCh5LCA9PSwgc2xpbmVfd2luZG93Mi55
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoaGVpZ2h0LCA9PSwgc2xpbmVfd2luZG93Mi5oZWlnaHQp
OworCisgICAgLyogRm91ciBwYXJhZ3JhcGggKDMgbGluZXMgbXVsdGktbGluZSB0ZXh0KS4gKi8K
KyAgICBhdGtfdGV4dF9nZXRfY2hhcmFjdGVyX2V4dGVudHMobXVsdGlsaW5lVGV4dCwgMCwgJngs
ICZ5LCAmd2lkdGgsICZoZWlnaHQsIEFUS19YWV9XSU5ET1cpOworICAgIGdfYXNzZXJ0X2NtcGlu
dCh4LCA9PSwgbWxpbmVfd2luZG93LngpOworICAgIGdfYXNzZXJ0X2NtcGludCh5LCA9PSwgbWxp
bmVfd2luZG93LnkpOworICAgIGdfYXNzZXJ0X2NtcGludCgzICogaGVpZ2h0LCA9PSwgbWxpbmVf
d2luZG93LmhlaWdodCk7CisKKyAgICBhdGtfdGV4dF9nZXRfY2hhcmFjdGVyX2V4dGVudHMobXVs
dGlsaW5lVGV4dCwgNTksICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0LCBBVEtfWFlfV0lORE9XKTsK
KyAgICAvKiBMYXN0IGxpbmUgd29uJ3QgZmlsbCB0aGUgd2hvbGUgd2lkdGggb2YgdGhlIHJlY3Rh
bmdsZS4gKi8KKyAgICBnX2Fzc2VydF9jbXBpbnQoeCwgPD0sIG1saW5lX3dpbmRvdy54ICsgbWxp
bmVfd2luZG93LndpZHRoIC0gd2lkdGgpOworICAgIGdfYXNzZXJ0X2NtcGludCh5LCA9PSwgbWxp
bmVfd2luZG93LnkgKyBtbGluZV93aW5kb3cuaGVpZ2h0IC0gaGVpZ2h0KTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoaGVpZ2h0LCA8PSwgbWxpbmVfd2luZG93LmhlaWdodCk7CisKKyAgICAvKiBDaGVj
ayB0aGF0IGV4dGVudCBmb3IgYSBmdWxsIGxpbmUgYXJlIHRoZSBzYW1lIGhlaWdodCB0aGFuIGZv
cgorICAgICAgIGEgcGFydGlhbCBzZWN0aW9uIG9mIHRoZSBzYW1lIGxpbmUgKi8KKyAgICBnaW50
IHN0YXJ0T2Zmc2V0OworICAgIGdpbnQgZW5kT2Zmc2V0OworCisjaWYgIUFUS19DSEVDS19WRVJT
SU9OKDIsIDEwLCAwKQorICAgIGdjaGFyKiB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zm
c2V0KG11bHRpbGluZVRleHQsIDAsIEFUS19URVhUX0JPVU5EQVJZX0xJTkVfU1RBUlQsICZzdGFy
dE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgZ19mcmVlKHRleHQpOworI2Vsc2UKKyAgICBnY2hh
ciogdGV4dCA9IGF0a190ZXh0X2dldF9zdHJpbmdfYXRfb2Zmc2V0KG11bHRpbGluZVRleHQsIDAs
IEFUS19URVhUX0dSQU5VTEFSSVRZX0xJTkUsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7Cisg
ICAgZ19mcmVlKHRleHQpOworI2VuZGlmCisKKyAgICBBdGtUZXh0UmVjdGFuZ2xlIGZsaW5lX3dp
bmRvdzsKKyAgICBBdGtUZXh0UmVjdGFuZ2xlIGFmbGluZV93aW5kb3c7CisgICAgYXRrX3RleHRf
Z2V0X3JhbmdlX2V4dGVudHMobXVsdGlsaW5lVGV4dCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwg
QVRLX1hZX1dJTkRPVywgJmZsaW5lX3dpbmRvdyk7CisgICAgYXRrX3RleHRfZ2V0X3JhbmdlX2V4
dGVudHMobXVsdGlsaW5lVGV4dCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCAtIDEsIEFUS19YWV9X
SU5ET1csICZhZmxpbmVfd2luZG93KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZmxpbmVfd2luZG93
LngsID09LCBhZmxpbmVfd2luZG93LngpOworICAgIGdfYXNzZXJ0X2NtcGludChmbGluZV93aW5k
b3cueSwgPT0sIGFmbGluZV93aW5kb3cueSk7CisgICAgZ19hc3NlcnRfY21waW50KGZsaW5lX3dp
bmRvdy5oZWlnaHQsID09LCBhZmxpbmVfd2luZG93LmhlaWdodCk7CisKKyAgICBnX29iamVjdF91
bnJlZihzaG9ydFRleHQxKTsKKyAgICBnX29iamVjdF91bnJlZihzaG9ydFRleHQyKTsKKyAgICBn
X29iamVjdF91bnJlZihsb25nVGV4dCk7CisgICAgZ19vYmplY3RfdW5yZWYobXVsdGlsaW5lVGV4
dCk7CisgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RX
ZWJraXRBdGtMYXlvdXRBbmREYXRhVGFibGVzKCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmpl
Y3RfcmVmX3Npbmsod2ViVmlldyk7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAw
LCAwLCA4MDAsIDYwMCB9OworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VU
KHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5n
KHdlYlZpZXcsIGxheW91dEFuZERhdGFUYWJsZXMsIDAsIDAsIDApOworCisgICAgQXRrT2JqZWN0
KiBvYmplY3QgPSBnZXRXZWJBcmVhT2JqZWN0KHdlYlZpZXcpOworICAgIGdfYXNzZXJ0KG9iamVj
dCk7CisKKyAgICAvKiBDaGVjayB0aGUgbm9uLWxheW91dCB0YWJsZSAoZGF0YSB0YWJsZSkuICov
CisKKyAgICBBdGtPYmplY3QqIHRhYmxlMSA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hp
bGQob2JqZWN0LCAwKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfVEFCTEUodGFibGUxKSk7CisgICAg
QXRrQXR0cmlidXRlU2V0KiBzZXQxID0gYXRrX29iamVjdF9nZXRfYXR0cmlidXRlcyh0YWJsZTEp
OworICAgIGdfYXNzZXJ0KHNldDEpOworICAgIGdfYXNzZXJ0KCFhdGtBdHRyaWJ1dGVTZXRDb250
YWluc0F0dHJpYnV0ZU5hbWUoc2V0MSwgImxheW91dC1ndWVzcyIpKTsKKyAgICBhdGtfYXR0cmli
dXRlX3NldF9mcmVlKHNldDEpOworCisgICAgLyogQ2hlY2sgdGhlIGxheW91dCB0YWJsZS4gKi8K
KworICAgIEF0a09iamVjdCogdGFibGUyID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGls
ZChvYmplY3QsIDEpOworICAgIGdfYXNzZXJ0KEFUS19JU19UQUJMRSh0YWJsZTIpKTsKKyAgICBB
dGtBdHRyaWJ1dGVTZXQqIHNldDIgPSBhdGtfb2JqZWN0X2dldF9hdHRyaWJ1dGVzKHRhYmxlMik7
CisgICAgZ19hc3NlcnQoc2V0Mik7CisgICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0Q29udGFp
bnNBdHRyaWJ1dGVOYW1lKHNldDIsICJsYXlvdXQtZ3Vlc3MiKSk7CisgICAgZ19hc3NlcnQoYXRr
QXR0cmlidXRlU2V0QXR0cmlidXRlTmFtZUhhc1ZhbHVlKHNldDIsICJsYXlvdXQtZ3Vlc3MiLCAi
dHJ1ZSIpKTsKKyAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHNldDIpOworCisgICAgZ19vYmpl
Y3RfdW5yZWYodGFibGUxKTsKKyAgICBnX29iamVjdF91bnJlZih0YWJsZTIpOworICAgIGdfb2Jq
ZWN0X3VucmVmKHdlYlZpZXcpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrTGlua3NX
aXRoSW5saW5lSW1hZ2VzKCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lU
X1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmplY3RfcmVmX3Npbmso
d2ViVmlldyk7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYw
MCB9OworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAm
YWxsb2NhdGlvbik7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIGxp
bmtzV2l0aElubGluZUltYWdlcywgMCwgMCwgMCk7CisKKyAgICBBdGtPYmplY3QqIG9iamVjdCA9
IGdldFdlYkFyZWFPYmplY3Qod2ViVmlldyk7CisgICAgZ19hc3NlcnQob2JqZWN0KTsKKworICAg
IC8qIEZpcnN0IHBhcmFncmFwaCAobGluayBhdCB0aGUgYmVnaW5uaW5nKS4gKi8KKyAgICBBdGtP
YmplY3QqIHBhcmFncmFwaCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0
LCAwKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChwYXJhZ3JhcGgpKTsKKyAgICBnaW50IHN0
YXJ0T2Zmc2V0OworICAgIGdpbnQgZW5kT2Zmc2V0OworCisjaWYgIUFUS19DSEVDS19WRVJTSU9O
KDIsIDEwLCAwKQorICAgIGdjaGFyKiB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0
KEFUS19URVhUKHBhcmFncmFwaCksIDAsIEFUS19URVhUX0JPVU5EQVJZX0xJTkVfU1RBUlQsICZz
dGFydE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgZ19hc3NlcnQodGV4dCk7CisgICAgZ19hc3Nl
cnRfY21wc3RyKHRleHQsID09LCAiZm9vIGJhciBiYXoiKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
c3RhcnRPZmZzZXQsID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwg
MTEpOworICAgIGdfZnJlZSh0ZXh0KTsKKyNlbHNlCisgICAgZ2NoYXIqIHRleHQgPSBhdGtfdGV4
dF9nZXRfc3RyaW5nX2F0X29mZnNldChBVEtfVEVYVChwYXJhZ3JhcGgpLCAwLCBBVEtfVEVYVF9H
UkFOVUxBUklUWV9MSU5FLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOworICAgIGdfYXNzZXJ0
KHRleHQpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwgImZvbyBiYXIgYmF6Iik7Cisg
ICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21w
aW50KGVuZE9mZnNldCwgPT0sIDExKTsKKyAgICBnX2ZyZWUodGV4dCk7CisjZW5kaWYKKworICAg
IGdfb2JqZWN0X3VucmVmKHBhcmFncmFwaCk7CisKKyAgICAvKiBTZWNvbmQgcGFyYWdyYXBoIChs
aW5rIGluIHRoZSBtaWRkbGUpLiAqLworICAgIHBhcmFncmFwaCA9IGF0a19vYmplY3RfcmVmX2Fj
Y2Vzc2libGVfY2hpbGQob2JqZWN0LCAxKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChwYXJh
Z3JhcGgpKTsKKworI2lmICFBVEtfQ0hFQ0tfVkVSU0lPTigyLCAxMCwgMCkKKyAgICB0ZXh0ID0g
YXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0KEFUS19URVhUKHBhcmFncmFwaCksIDAsIEFUS19U
RVhUX0JPVU5EQVJZX0xJTkVfU1RBUlQsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAg
Z19hc3NlcnQodGV4dCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09LCAiZm9vIGJhciBi
YXoiKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAwKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMTEpOworICAgIGdfZnJlZSh0ZXh0KTsKKyNlbHNl
CisgICAgdGV4dCA9IGF0a190ZXh0X2dldF9zdHJpbmdfYXRfb2Zmc2V0KEFUS19URVhUKHBhcmFn
cmFwaCksIDAsIEFUS19URVhUX0dSQU5VTEFSSVRZX0xJTkUsICZzdGFydE9mZnNldCwgJmVuZE9m
ZnNldCk7CisgICAgZ19hc3NlcnQodGV4dCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09
LCAiZm9vIGJhciBiYXoiKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAw
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMTEpOworICAgIGdfZnJlZSh0
ZXh0KTsKKyNlbmRpZgorCisgICAgZ19vYmplY3RfdW5yZWYocGFyYWdyYXBoKTsKKworICAgIC8q
IFRoaXJkIHBhcmFncmFwaCAobGluayBhdCB0aGUgZW5kKS4gKi8KKyAgICBwYXJhZ3JhcGggPSBh
dGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMik7CisgICAgZ19hc3NlcnQo
QVRLX0lTX1RFWFQocGFyYWdyYXBoKSk7CisKKyNpZiAhQVRLX0NIRUNLX1ZFUlNJT04oMiwgMTAs
IDApCisgICAgdGV4dCA9IGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNldChBVEtfVEVYVChwYXJh
Z3JhcGgpLCAwLCBBVEtfVEVYVF9CT1VOREFSWV9MSU5FX1NUQVJULCAmc3RhcnRPZmZzZXQsICZl
bmRPZmZzZXQpOworICAgIGdfYXNzZXJ0KHRleHQpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0
LCA9PSwgImZvbyBiYXIgYmF6Iik7CisgICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9
PSwgMCk7CisgICAgZ19hc3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0sIDExKTsKKyAgICBnX2Zy
ZWUodGV4dCk7CisjZWxzZQorICAgIHRleHQgPSBhdGtfdGV4dF9nZXRfc3RyaW5nX2F0X29mZnNl
dChBVEtfVEVYVChwYXJhZ3JhcGgpLCAwLCBBVEtfVEVYVF9HUkFOVUxBUklUWV9MSU5FLCAmc3Rh
cnRPZmZzZXQsICZlbmRPZmZzZXQpOworICAgIGdfYXNzZXJ0KHRleHQpOworICAgIGdfYXNzZXJ0
X2NtcHN0cih0ZXh0LCA9PSwgImZvbyBiYXIgYmF6Iik7CisgICAgZ19hc3NlcnRfY21waW50KHN0
YXJ0T2Zmc2V0LCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0sIDEx
KTsKKyAgICBnX2ZyZWUodGV4dCk7CisjZW5kaWYKKworICAgIGdfb2JqZWN0X3VucmVmKHBhcmFn
cmFwaCk7CisgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Cit9CisKK3N0YXRpYyB2b2lkIHRl
c3RXZWJraXRBdGtIeXBlcnRleHRBbmRIeXBlcmxpbmtzKCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAg
Z19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9u
ID0geyAwLCAwLCA4MDAsIDYwMCB9OworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtf
V0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRf
c3RyaW5nKHdlYlZpZXcsIGh5cGVydGV4dEFuZEh5cGVybGlua3MsIDAsIDAsIDApOworCisgICAg
QXRrT2JqZWN0KiBvYmplY3QgPSBnZXRXZWJBcmVhT2JqZWN0KHdlYlZpZXcpOworICAgIGdfYXNz
ZXJ0KG9iamVjdCk7CisKKyAgICBBdGtPYmplY3QqIHBhcmFncmFwaDEgPSBhdGtfb2JqZWN0X3Jl
Zl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMCk7CisgICAgZ19hc3NlcnQoQVRLX09CSkVDVChw
YXJhZ3JhcGgxKSk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShwYXJhZ3JhcGgx
KSA9PSBBVEtfUk9MRV9QQVJBR1JBUEgpOworICAgIGdfYXNzZXJ0KEFUS19JU19IWVBFUlRFWFQo
cGFyYWdyYXBoMSkpOworCisgICAgLyogTm8gbGlua3MgaW4gdGhlIGZpcnN0IHBhcmFncmFwaC4g
Ki8KKyAgICBnaW50IG5MaW5rcyA9IGF0a19oeXBlcnRleHRfZ2V0X25fbGlua3MoQVRLX0hZUEVS
VEVYVChwYXJhZ3JhcGgxKSk7CisgICAgZ19hc3NlcnRfY21waW50KG5MaW5rcywgPT0sIDApOwor
CisgICAgQXRrT2JqZWN0KiBwYXJhZ3JhcGgyID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9j
aGlsZChvYmplY3QsIDEpOworICAgIGdfYXNzZXJ0KEFUS19PQkpFQ1QocGFyYWdyYXBoMikpOwor
ICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUocGFyYWdyYXBoMikgPT0gQVRLX1JPTEVf
UEFSQUdSQVBIKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfSFlQRVJURVhUKHBhcmFncmFwaDIpKTsK
KworICAgIC8qIENoZWNrIGxpbmtzIGluIHRoZSBzZWNvbmQgcGFyYWdyYXBoLgorICAgICAgIG5M
aW5rcyA9IGF0a19oeXBlcnRleHRfZ2V0X25fbGlua3MoQVRLX0hZUEVSVEVYVChwYXJhZ3JhcGgy
KSk7CisgICAgICAgZ19hc3NlcnRfY21waW50KG5MaW5rcywgPT0sIDMpOyAqLworCisgICAgQXRr
SHlwZXJsaW5rKiBoTGluazEgPSBhdGtfaHlwZXJ0ZXh0X2dldF9saW5rKEFUS19IWVBFUlRFWFQo
cGFyYWdyYXBoMiksIDApOworICAgIGdfYXNzZXJ0KEFUS19IWVBFUkxJTksoaExpbmsxKSk7Cisg
ICAgQXRrT2JqZWN0KiBoTGlua09iamVjdDEgPSBhdGtfaHlwZXJsaW5rX2dldF9vYmplY3QoaExp
bmsxLCAwKTsKKyAgICBnX2Fzc2VydChBVEtfT0JKRUNUKGhMaW5rT2JqZWN0MSkpOworICAgIGdf
YXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoaExpbmtPYmplY3QxKSA9PSBBVEtfUk9MRV9MSU5L
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfc3RhcnRfaW5kZXgoaExp
bmsxKSwgPT0sIDApOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9lbmRf
aW5kZXgoaExpbmsxKSwgPT0sIDYpOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5r
X2dldF9uX2FuY2hvcnMoaExpbmsxKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcHN0cihhdGtf
aHlwZXJsaW5rX2dldF91cmkoaExpbmsxLCAwKSwgPT0sICJodHRwOi8vZm9vLmJhci5iYXovIik7
CisKKyAgICBBdGtIeXBlcmxpbmsqIGhMaW5rMiA9IGF0a19oeXBlcnRleHRfZ2V0X2xpbmsoQVRL
X0hZUEVSVEVYVChwYXJhZ3JhcGgyKSwgMSk7CisgICAgZ19hc3NlcnQoQVRLX0hZUEVSTElOSyho
TGluazIpKTsKKyAgICBBdGtPYmplY3QqIGhMaW5rT2JqZWN0MiA9IGF0a19oeXBlcmxpbmtfZ2V0
X29iamVjdChoTGluazIsIDApOworICAgIGdfYXNzZXJ0KEFUS19PQkpFQ1QoaExpbmtPYmplY3Qy
KSk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShoTGlua09iamVjdDIpID09IEFU
S19ST0xFX0xJTkspOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9zdGFy
dF9pbmRleChoTGluazIpLCA9PSwgMTIpOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJs
aW5rX2dldF9lbmRfaW5kZXgoaExpbmsyKSwgPT0sIDMyKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
YXRrX2h5cGVybGlua19nZXRfbl9hbmNob3JzKGhMaW5rMiksID09LCAxKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIoYXRrX2h5cGVybGlua19nZXRfdXJpKGhMaW5rMiwgMCksID09LCAiaHR0cDovL2Jh
ci5iYXouZm9vLyIpOworCisgICAgQXRrSHlwZXJsaW5rKiBoTGluazMgPSBhdGtfaHlwZXJ0ZXh0
X2dldF9saW5rKEFUS19IWVBFUlRFWFQocGFyYWdyYXBoMiksIDIpOworICAgIGdfYXNzZXJ0KEFU
S19IWVBFUkxJTksoaExpbmszKSk7CisgICAgQXRrT2JqZWN0KiBoTGlua09iamVjdDMgPSBhdGtf
aHlwZXJsaW5rX2dldF9vYmplY3QoaExpbmszLCAwKTsKKyAgICBnX2Fzc2VydChBVEtfT0JKRUNU
KGhMaW5rT2JqZWN0MykpOworICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoaExpbmtP
YmplY3QzKSA9PSBBVEtfUk9MRV9MSU5LKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVy
bGlua19nZXRfc3RhcnRfaW5kZXgoaExpbmszKSwgPT0sIDY1KTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoYXRrX2h5cGVybGlua19nZXRfZW5kX2luZGV4KGhMaW5rMyksID09LCA3NSk7CisgICAgZ19h
c3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0X25fYW5jaG9ycyhoTGluazMpLCA9PSwgMSk7
CisgICAgZ19hc3NlcnRfY21wc3RyKGF0a19oeXBlcmxpbmtfZ2V0X3VyaShoTGluazMsIDApLCA9
PSwgImh0dHA6Ly9iYXouZm9vLmJhci8iKTsKKworICAgIEF0a09iamVjdCogbGlzdCA9IGF0a19v
YmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAyKTsKKyAgICBnX2Fzc2VydChBVEtf
T0JKRUNUKGxpc3QpKTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGxpc3QpID09
IEFUS19ST0xFX0xJU1QpOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfb2JqZWN0X2dldF9uX2Fj
Y2Vzc2libGVfY2hpbGRyZW4obGlzdCksID09LCAxKTsKKworICAgIEF0a09iamVjdCogbGlzdEl0
ZW0gPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGxpc3QsIDApOworICAgIGdfYXNz
ZXJ0KEFUS19JU19URVhUKGxpc3RJdGVtKSk7CisgICAgZ19hc3NlcnQoQVRLX0lTX0hZUEVSVEVY
VChsaXN0SXRlbSkpOworCisgICAgQXRrSHlwZXJsaW5rKiBoTGlua0luTGlzdEl0ZW0gPSBhdGtf
aHlwZXJ0ZXh0X2dldF9saW5rKEFUS19IWVBFUlRFWFQobGlzdEl0ZW0pLCAwKTsKKyAgICBnX2Fz
c2VydChBVEtfSFlQRVJMSU5LKGhMaW5rSW5MaXN0SXRlbSkpOworICAgIEF0a09iamVjdCogaExp
bmtPYmplY3QgPSBhdGtfaHlwZXJsaW5rX2dldF9vYmplY3QoaExpbmtJbkxpc3RJdGVtLCAwKTsK
KyAgICBnX2Fzc2VydChBVEtfT0JKRUNUKGhMaW5rT2JqZWN0KSk7CisgICAgZ19hc3NlcnQoYXRr
X29iamVjdF9nZXRfcm9sZShoTGlua09iamVjdCkgPT0gQVRLX1JPTEVfTElOSyk7CisgICAgZ19h
c3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0X3N0YXJ0X2luZGV4KGhMaW5rSW5MaXN0SXRl
bSksID09LCAyMCk7CisgICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0X2VuZF9p
bmRleChoTGlua0luTGlzdEl0ZW0pLCA9PSwgNDMpOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtf
aHlwZXJsaW5rX2dldF9uX2FuY2hvcnMoaExpbmtJbkxpc3RJdGVtKSwgPT0sIDEpOworICAgIGdf
YXNzZXJ0X2NtcHN0cihhdGtfaHlwZXJsaW5rX2dldF91cmkoaExpbmtJbkxpc3RJdGVtLCAwKSwg
PT0sICJodHRwOi8vZm9vLmJhci5iYXovIik7CisKKyAgICAvKiBGaW5hbGx5IGNoZWNrIHRoZSBB
dGtBY3Rpb24gaW50ZXJmYWNlIGZvciBhIGdpdmVuIEF0a0h5cGVybGluay4gKi8KKyAgICBnX2Fz
c2VydChBVEtfSVNfQUNUSU9OKGhMaW5rMSkpOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfYWN0
aW9uX2dldF9uX2FjdGlvbnMoQVRLX0FDVElPTihoTGluazEpKSwgPT0sIDEpOworICAgIGdfYXNz
ZXJ0X2NtcHN0cihhdGtfYWN0aW9uX2dldF9rZXliaW5kaW5nKEFUS19BQ1RJT04oaExpbmsxKSwg
MCksID09LCAiIik7CisgICAgZ19hc3NlcnRfY21wc3RyKGF0a19hY3Rpb25fZ2V0X25hbWUoQVRL
X0FDVElPTihoTGluazEpLCAwKSwgPT0sICJqdW1wIik7CisgICAgZ19hc3NlcnQoYXRrX2FjdGlv
bl9kb19hY3Rpb24oQVRLX0FDVElPTihoTGluazEpLCAwKSk7CisKKyAgICBnX29iamVjdF91bnJl
ZihwYXJhZ3JhcGgxKTsKKyAgICBnX29iamVjdF91bnJlZihwYXJhZ3JhcGgyKTsKKyAgICBnX29i
amVjdF91bnJlZihsaXN0KTsKKyAgICBnX29iamVjdF91bnJlZihsaXN0SXRlbSk7CisgICAgZ19v
YmplY3RfdW5yZWYod2ViVmlldyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtMaXN0
c09mSXRlbXMoKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJ
RVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3
KTsKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDgwMCwgNjAwIH07Cisg
ICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQod2ViVmlldyksICZhbGxvY2F0
aW9uKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgbGlzdHNPZkl0
ZW1zLCAwLCAwLCAwKTsKKworICAgIEF0a09iamVjdCogb2JqZWN0ID0gZ2V0V2ViQXJlYU9iamVj
dCh3ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChvYmplY3QpOworCisgICAgLyogVW5vcmRlcmVkIGxp
c3QuICovCisKKyAgICBBdGtPYmplY3QqIHVMaXN0ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJs
ZV9jaGlsZChvYmplY3QsIDApOworICAgIGdfYXNzZXJ0KEFUS19PQkpFQ1QodUxpc3QpKTsKKyAg
ICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKHVMaXN0KSA9PSBBVEtfUk9MRV9MSVNUKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX29iamVjdF9nZXRfbl9hY2Nlc3NpYmxlX2NoaWxkcmVu
KHVMaXN0KSwgPT0sIDMpOworCisgICAgQXRrT2JqZWN0KiBpdGVtMSA9IGF0a19vYmplY3RfcmVm
X2FjY2Vzc2libGVfY2hpbGQodUxpc3QsIDApOworICAgIEF0a09iamVjdCogaXRlbTIgPSBhdGtf
b2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKHVMaXN0LCAxKTsKKyAgICBBdGtPYmplY3QqIGl0
ZW0zID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZCh1TGlzdCwgMik7CisKKyAgICBn
X2Fzc2VydF9jbXBpbnQoYXRrX29iamVjdF9nZXRfbl9hY2Nlc3NpYmxlX2NoaWxkcmVuKGl0ZW0x
KSwgPT0sIDApOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfb2JqZWN0X2dldF9uX2FjY2Vzc2li
bGVfY2hpbGRyZW4oaXRlbTIpLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21waW50KGF0a19vYmpl
Y3RfZ2V0X25fYWNjZXNzaWJsZV9jaGlsZHJlbihpdGVtMyksID09LCAxKTsKKworICAgIGdfb2Jq
ZWN0X3VucmVmKGl0ZW0xKTsKKyAgICBnX29iamVjdF91bnJlZihpdGVtMik7CisgICAgZ19vYmpl
Y3RfdW5yZWYoaXRlbTMpOworCisgICAgLyogT3JkZXJlZCBsaXN0LiAqLworCisgICAgQXRrT2Jq
ZWN0KiBvTGlzdCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAxKTsK
KyAgICBnX2Fzc2VydChBVEtfT0JKRUNUKG9MaXN0KSk7CisgICAgZ19hc3NlcnQoYXRrX29iamVj
dF9nZXRfcm9sZShvTGlzdCkgPT0gQVRLX1JPTEVfTElTVCk7CisgICAgZ19hc3NlcnRfY21waW50
KGF0a19vYmplY3RfZ2V0X25fYWNjZXNzaWJsZV9jaGlsZHJlbihvTGlzdCksID09LCAzKTsKKwor
ICAgIGl0ZW0xID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvTGlzdCwgMCk7Cisg
ICAgaXRlbTIgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9MaXN0LCAxKTsKKyAg
ICBpdGVtMyA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob0xpc3QsIDIpOworCisg
ICAgZ19hc3NlcnRfY21waW50KGF0a19vYmplY3RfZ2V0X25fYWNjZXNzaWJsZV9jaGlsZHJlbihp
dGVtMSksID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX29iamVjdF9nZXRfbl9hY2Nl
c3NpYmxlX2NoaWxkcmVuKGl0ZW0yKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtf
b2JqZWN0X2dldF9uX2FjY2Vzc2libGVfY2hpbGRyZW4oaXRlbTMpLCA9PSwgMSk7CisKKyAgICBn
X29iamVjdF91bnJlZihpdGVtMSk7CisgICAgZ19vYmplY3RfdW5yZWYoaXRlbTIpOworICAgIGdf
b2JqZWN0X3VucmVmKGl0ZW0zKTsKKworICAgIGdfb2JqZWN0X3VucmVmKHVMaXN0KTsKKyAgICBn
X29iamVjdF91bnJlZihvTGlzdCk7CisgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Cit9CisK
K3R5cGVkZWYgZW51bSB7CisgIFRFWFRfQ0hBTkdFX0lOU0VSVCA9IDEsCisgIFRFWFRfQ0hBTkdF
X1JFTU9WRSA9IDIKK30gVGV4dENoYW5nZVR5cGU7CisKK3N0YXRpYyBnY2hhciogdGV4dENoYW5n
ZWRSZXN1bHQgPSAwOworCitzdGF0aWMgdm9pZCB0ZXh0Q2hhbmdlZENiKEF0a1RleHQqIHRleHQs
IGdpbnQgcG9zLCBnaW50IGxlbiwgZ2NoYXIqIG1vZGlmaWVkVGV4dCwgZ3BvaW50ZXIgZGF0YSkK
K3sKKyAgICBnX2Fzc2VydCh0ZXh0ICYmIEFUS19JU19PQkpFQ1QodGV4dCkpOworCisgICAgVGV4
dENoYW5nZVR5cGUgdHlwZSA9IEdQT0lOVEVSX1RPX0lOVChkYXRhKTsKKyAgICBnX2ZyZWUodGV4
dENoYW5nZWRSZXN1bHQpOworICAgIHRleHRDaGFuZ2VkUmVzdWx0ID0gZ19zdHJkdXBfcHJpbnRm
KCJ8JWR8JWR8JWR8JyVzJ3wiLCB0eXBlLCBwb3MsIGxlbiwgbW9kaWZpZWRUZXh0KTsKK30KKwor
c3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a1RleHRDaGFuZ2VkTm90aWZpY2F0aW9ucygpCit7Cisg
ICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3Zp
ZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOworICAgIEd0a0FsbG9j
YXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgODAwLCA2MDAgfTsKKyAgICBndGtfd2lkZ2V0X3Np
emVfYWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOworICAgIHdlYmtp
dF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LCBmb3JtV2l0aFRleHRJbnB1dHMsIDAsIDAs
IDApOworCisgICAgQXRrT2JqZWN0KiBvYmplY3QgPSBnZXRXZWJBcmVhT2JqZWN0KHdlYlZpZXcp
OworICAgIGdfYXNzZXJ0KG9iamVjdCk7CisKKyAgICBBdGtPYmplY3QqIGZvcm0gPSBhdGtfb2Jq
ZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMCk7CisgICAgZ19hc3NlcnQoQVRLX0lT
X09CSkVDVChmb3JtKSk7CisKKyAgICAvKiBGaXJzdCBjaGVjayBub3JtYWwgdGV4dCBlbnRyaWVz
LiAqLworICAgIEF0a09iamVjdCogdGV4dEVudHJ5ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJs
ZV9jaGlsZChmb3JtLCAwKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfRURJVEFCTEVfVEVYVCh0ZXh0
RW50cnkpKTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKEFUS19PQkpFQ1QodGV4
dEVudHJ5KSkgPT0gQVRLX1JPTEVfRU5UUlkpOworCisgICAgZ19zaWduYWxfY29ubmVjdCh0ZXh0
RW50cnksICJ0ZXh0LWluc2VydCIsCisgICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKHRl
eHRDaGFuZ2VkQ2IpLAorICAgICAgICAgICAgICAgICAgICAgR0lOVF9UT19QT0lOVEVSKFRFWFRf
Q0hBTkdFX0lOU0VSVCkpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QodGV4dEVudHJ5LCAidGV4dC1y
ZW1vdmUiLAorICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyh0ZXh0Q2hhbmdlZENiKSwK
KyAgICAgICAgICAgICAgICAgICAgIEdJTlRfVE9fUE9JTlRFUihURVhUX0NIQU5HRV9SRU1PVkUp
KTsKKworICAgIGdpbnQgcG9zID0gMDsKKyAgICBhdGtfZWRpdGFibGVfdGV4dF9pbnNlcnRfdGV4
dChBVEtfRURJVEFCTEVfVEVYVCh0ZXh0RW50cnkpLCAiZm9vIGJhciBiYXoiLCAxMSwgJnBvcyk7
CisgICAgY2hhciogdGV4dCA9IGF0a190ZXh0X2dldF90ZXh0KEFUS19URVhUKHRleHRFbnRyeSks
IDAsIC0xKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGV4dCwgPT0sICJmb28gYmFyIGJheiIpOwor
ICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0Q2hhbmdlZFJlc3VsdCwgPT0sICJ8MXwwfDExfCdmb28g
YmFyIGJheid8Iik7CisgICAgZ19mcmVlKHRleHQpOworCisgICAgYXRrX2VkaXRhYmxlX3RleHRf
ZGVsZXRlX3RleHQoQVRLX0VESVRBQkxFX1RFWFQodGV4dEVudHJ5KSwgNCwgNyk7CisgICAgdGV4
dCA9IGF0a190ZXh0X2dldF90ZXh0KEFUS19URVhUKHRleHRFbnRyeSksIDAsIC0xKTsKKyAgICBn
X2Fzc2VydF9jbXBzdHIodGV4dCwgPT0sICJmb28gIGJheiIpOworICAgIGdfYXNzZXJ0X2NtcHN0
cih0ZXh0Q2hhbmdlZFJlc3VsdCwgPT0sICJ8Mnw0fDN8J2Jhcid8Iik7CisgICAgZ19mcmVlKHRl
eHQpOworCisgICAgcG9zID0gNDsKKyAgICBhdGtfZWRpdGFibGVfdGV4dF9pbnNlcnRfdGV4dChB
VEtfRURJVEFCTEVfVEVYVCh0ZXh0RW50cnkpLCAicXV4IHF1dXggdG9iZWlnbm9yZWQiLCA4LCAm
cG9zKTsKKyAgICB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHQoQVRLX1RFWFQodGV4dEVudHJ5KSwg
MCwgLTEpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwgImZvbyBxdXggcXV1eCBiYXoi
KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGV4dENoYW5nZWRSZXN1bHQsID09LCAifDF8NHw4fCdx
dXggcXV1eCd8Iik7CisgICAgZ19mcmVlKHRleHQpOworCisgICAgLyogTm93IGNoZWNrIGZvciBw
YXNzd29yZCBlbnRyaWVzLiAqLworICAgIEF0a09iamVjdCogcGFzc3dvcmRFbnRyeSA9IGF0a19v
YmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoZm9ybSwgMSk7CisgICAgZ19hc3NlcnQoQVRLX0lT
X0VESVRBQkxFX1RFWFQocGFzc3dvcmRFbnRyeSkpOworICAgIGdfYXNzZXJ0KGF0a19vYmplY3Rf
Z2V0X3JvbGUoQVRLX09CSkVDVChwYXNzd29yZEVudHJ5KSkgPT0gQVRLX1JPTEVfUEFTU1dPUkRf
VEVYVCk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHBhc3N3b3JkRW50cnksICJ0ZXh0LWluc2Vy
dCIsCisgICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKHRleHRDaGFuZ2VkQ2IpLAorICAg
ICAgICAgICAgICAgICAgICAgR0lOVF9UT19QT0lOVEVSKFRFWFRfQ0hBTkdFX0lOU0VSVCkpOwor
ICAgIGdfc2lnbmFsX2Nvbm5lY3QocGFzc3dvcmRFbnRyeSwgInRleHQtcmVtb3ZlIiwKKyAgICAg
ICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sodGV4dENoYW5nZWRDYiksCisgICAgICAgICAgICAg
ICAgICAgICBHSU5UX1RPX1BPSU5URVIoVEVYVF9DSEFOR0VfUkVNT1ZFKSk7CisKKyAgICBwb3Mg
PSAwOworICAgIC8qIEEgc2luZ2xlIGJ1bGxldCBjaGFyYWN0ZXIgaXMgJ1wzNDJcMjAwXDI0Micg
Ki8KKyAgICBhdGtfZWRpdGFibGVfdGV4dF9pbnNlcnRfdGV4dChBVEtfRURJVEFCTEVfVEVYVChw
YXNzd29yZEVudHJ5KSwgImZvb2JhciIsIDYsICZwb3MpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0
ZXh0Q2hhbmdlZFJlc3VsdCwgPT0sICJ8MXwwfDZ8J1wzNDJcMjAwXDI0MlwzNDJcMjAwXDI0Mlwz
NDJcMjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0Mid8Iik7CisgICAg
dGV4dCA9IGF0a190ZXh0X2dldF90ZXh0KEFUS19URVhUKHBhc3N3b3JkRW50cnkpLCAwLCAtMSk7
CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09LCAiXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQy
XDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyIik7CisgICAg
Z19mcmVlKHRleHQpOworCisgICAgYXRrX2VkaXRhYmxlX3RleHRfZGVsZXRlX3RleHQoQVRLX0VE
SVRBQkxFX1RFWFQocGFzc3dvcmRFbnRyeSksIDIsIDQpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0
ZXh0Q2hhbmdlZFJlc3VsdCwgPT0sICJ8MnwyfDJ8J1wzNDJcMjAwXDI0MlwzNDJcMjAwXDI0Mid8
Iik7CisKKyAgICB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHQoQVRLX1RFWFQocGFzc3dvcmRFbnRy
eSksIDAsIC0xKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGV4dCwgPT0sICJcMzQyXDIwMFwyNDJc
MzQyXDIwMFwyNDJcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDIiKTsKKyAgICBnX2ZyZWUodGV4dCk7
CisKKyAgICBwb3MgPSAzOworICAgIGF0a19lZGl0YWJsZV90ZXh0X2luc2VydF90ZXh0KEFUS19F
RElUQUJMRV9URVhUKHBhc3N3b3JkRW50cnkpLCAicXV4IHRvYmVpZ25vcmVkIiwgMywgJnBvcyk7
CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHRDaGFuZ2VkUmVzdWx0LCA9PSwgInwxfDN8M3wnXDM0
MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyJ3wiKTsKKworICAgIHRleHQgPSBhdGtf
dGV4dF9nZXRfdGV4dChBVEtfVEVYVChwYXNzd29yZEVudHJ5KSwgMCwgLTEpOworICAgIGdfYXNz
ZXJ0X2NtcHN0cih0ZXh0LCA9PSwgIlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0
MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MiIpOworICAg
IGdfZnJlZSh0ZXh0KTsKKworICAgIGdfZnJlZSh0ZXh0Q2hhbmdlZFJlc3VsdCk7CisKKyAgICBn
X29iamVjdF91bnJlZihmb3JtKTsKKyAgICBnX29iamVjdF91bnJlZih0ZXh0RW50cnkpOworICAg
IGdfb2JqZWN0X3VucmVmKHBhc3N3b3JkRW50cnkpOworICAgIGdfb2JqZWN0X3VucmVmKHdlYlZp
ZXcpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrUGFyZW50Rm9yUm9vdE9iamVjdCgp
Cit7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRf
d2ViX3ZpZXdfbmV3KCkpOworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwg
ODAwLCA2MDAgfTsKKyAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJW
aWV3KSwgJmFsbG9jYXRpb24pOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJW
aWV3LCBjb250ZW50cywgMCwgMCwgMCk7CisKKyAgICAvKiBXZSBuZWVkIGEgcGFyZW50IGNvbnRh
aW5lciB3aWRnZXQgZm9yIHRoZSB3ZWJ2aWV3LiAqLworICAgIEd0a1dpZGdldCogcGFyZW50Q29u
dGFpbmVyID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7CisgICAgZ19vYmpl
Y3RfcmVmX3NpbmsocGFyZW50Q29udGFpbmVyKTsKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtf
Q09OVEFJTkVSKHBhcmVudENvbnRhaW5lciksIEdUS19XSURHRVQod2ViVmlldykpOworCisgICAg
QXRrT2JqZWN0KiBheFBhcmVudCA9IGd0a193aWRnZXRfZ2V0X2FjY2Vzc2libGUocGFyZW50Q29u
dGFpbmVyKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfT0JKRUNUKGF4UGFyZW50KSk7CisKKyAgICBB
dGtPYmplY3QqIGF4Um9vdCA9IGd0a193aWRnZXRfZ2V0X2FjY2Vzc2libGUoR1RLX1dJREdFVCh3
ZWJWaWV3KSk7CisgICAgZ19hc3NlcnQoQVRLX0lTX09CSkVDVChheFJvb3QpKTsKKworICAgIC8q
IFRoZSBjaGlsZCBmb3IgdGhlIHBhcmVudCBjb250YWluZXIncyBhY2Nlc3NpYmlsaXR5IG9iamVj
dAorICAgICAgIHNob3VsZCBiZSB0aGUgYWNjZXNzaWJpbGl0eSBvYmplY3QgZm9yIHRoZSBXZWJW
aWV3J3Mgcm9vdC4gKi8KKyAgICBBdGtPYmplY3QqIGF4UGFyZW50Q2hpbGQgPSBhdGtfb2JqZWN0
X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGF4UGFyZW50LCAwKTsKKyAgICBnX2Fzc2VydChheFBhcmVu
dENoaWxkID09IGF4Um9vdCk7CisKKyAgICAvKiBCb3R0b20tdXAgbmF2aWdhdGlvbiBzaG91bGQg
bWF0Y2ggdG9wLWRvd24gb25lLiAqLworICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3BhcmVu
dChheFBhcmVudENoaWxkKSA9PSBheFBhcmVudCk7CisKKyAgICBnX29iamVjdF91bnJlZihheFBh
cmVudENoaWxkKTsKKyAgICBnX29iamVjdF91bnJlZihwYXJlbnRDb250YWluZXIpOworfQorCitz
dGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrU2V0UGFyZW50Rm9yT2JqZWN0KCkKK3sKKyAgICBXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXco
KSk7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9Owor
ICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2Nh
dGlvbik7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIGNvbnRlbnRz
LCAwLCAwLCAwKTsKKworICAgIC8qIFB1dCB0aGUgd2VidmlldyBpbiBhIHBhcmVudCBjb250YWlu
ZXIgd2lkZ2V0IHRvIGNoZWNrIHRoYXQgdGhlCisgICAgICAgbm9ybWFsIGJlaGF2aW91ciBrZWVw
cyB3b3JraW5nIGFzIGV4cGVjdGVkIGJ5IGRlZmF1bHQuICovCisgICAgR3RrV2lkZ2V0KiBwYXJl
bnRDb250YWluZXIgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKKyAgICBn
X29iamVjdF9yZWZfc2luayhwYXJlbnRDb250YWluZXIpOworICAgIGd0a19jb250YWluZXJfYWRk
KEdUS19DT05UQUlORVIocGFyZW50Q29udGFpbmVyKSwgR1RLX1dJREdFVCh3ZWJWaWV3KSk7CisK
KyAgICBBdGtPYmplY3QqIGF4Um9vdCA9IGd0a193aWRnZXRfZ2V0X2FjY2Vzc2libGUoR1RLX1dJ
REdFVCh3ZWJWaWV3KSk7CisgICAgZ19hc3NlcnQoQVRLX0lTX09CSkVDVChheFJvb3QpKTsKKwor
ICAgIEF0a09iamVjdCogYXhQYXJlbnQgPSBndGtfd2lkZ2V0X2dldF9hY2Nlc3NpYmxlKHBhcmVu
dENvbnRhaW5lcik7CisgICAgZ19hc3NlcnQoQVRLX0lTX09CSkVDVChheFBhcmVudCkpOworCisg
ICAgLyogVGhlIHBhcmVudCBvZiB0aGUgcm9vdCBvYmplY3QgaXMgdGhlIHBhcmVudCBjb250YWlu
ZXIncyBhMTF5IG9iamVjdC4gKi8KKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9wYXJlbnQo
YXhSb290KSA9PSBheFBhcmVudCk7CisKKyAgICAvKiBXZSBub3cgbmVlZCB0byB1c2Ugc29tZXRo
aW5nIGFzIGEgYW4gYWx0ZXJuYXRpdmUgcGFyZW50IGZvcgorICAgICAgIHRoZSBhMTF5IG9iamVj
dCBhc3NvY2lhdGVkIHdpdGggdGhlIHJvb3Qgb2YgdGhlIERPTSB0cmVlLiAqLworICAgIEd0a1dp
ZGdldCogYWx0ZXJuYXRpdmVQYXJlbnQgPSBndGtfYnV0dG9uX25ldygpOworICAgIGdfb2JqZWN0
X3JlZl9zaW5rKGFsdGVybmF0aXZlUGFyZW50KTsKKworICAgIEF0a09iamVjdCogYXhBbHRlcm5h
dGl2ZVBhcmVudCA9IGd0a193aWRnZXRfZ2V0X2FjY2Vzc2libGUoYWx0ZXJuYXRpdmVQYXJlbnQp
OworICAgIGdfYXNzZXJ0KEFUS19JU19PQkpFQ1QoYXhBbHRlcm5hdGl2ZVBhcmVudCkpOworCisg
ICAgLyogTWFudWFsbHkgc2V0IHRoZSBhbHRlcm5hdGl2ZSBwYXJlbnQncyBhY2Nlc3NpYmlsaXR5
IG9iamVjdCBhcworICAgICAgIHRoZSBwYXJlbnQgZm9yIHRoZSBXZWJLaXQgYWNjZXNzaWJpbGl0
eSByb290IG9iamVjdCBhbmQgY2hlY2suICovCisgICAgYXRrX29iamVjdF9zZXRfcGFyZW50KGF4
Um9vdCwgYXhBbHRlcm5hdGl2ZVBhcmVudCk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRf
cGFyZW50KGF4Um9vdCkgPT0gYXhBbHRlcm5hdGl2ZVBhcmVudCk7CisKKyAgICBnX29iamVjdF91
bnJlZihhbHRlcm5hdGl2ZVBhcmVudCk7CisgICAgZ19vYmplY3RfdW5yZWYocGFyZW50Q29udGFp
bmVyKTsKK30KKworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCitzdGF0aWMgdm9pZCBpbml0aWFs
aXplVGVzdGluZ0ZyYW1ld29yayhpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgLyogRW5z
dXJlIEdBSUwgaXMgdGhlIG9ubHkgbW9kdWxlIGxvYWRlZC4gKi8KKyAgICBnX3NldGVudigiR1RL
X01PRFVMRVMiLCAiZ2FpbCIsIFRSVUUpOworCisgICAgLyogRm9sbG93aW5nIGxpbmVzIHdlcmUg
dGFrZW4gZnJvbSBndGtfdGVzdF9pbml0KCkuICovCisgICAgZ190ZXN0X2luaXQoJmFyZ2MsICZh
cmd2LCAwKTsKKyAgICBndGtfZGlzYWJsZV9zZXRsb2NhbGUoKTsKKyAgICBzZXRsb2NhbGUoTENf
QUxMLCAiQyIpOworCisgICAgZ3RrX2luaXQoJmFyZ2MsICZhcmd2KTsKK30KKyNlbmRpZgorCitp
bnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisjaWZkZWYgR1RLX0FQSV9WRVJTSU9O
XzIKKyAgICAvKiBXZSBjYW4ndCBqdXN0IGNhbGwgdG8gZ3RrX3Rlc3RfaW5pdCgpIGluIHRoaXMg
Y2FzZSBiZWNhdXNlIGl0cworICAgICAgIGltcGxlbWVudGF0aW9uIG1ha2VzIHN1cmUgdGhhdCBu
byBHVEsrIG1vZHVsZSB3aWxsIGJlIGxvYWRlZCwgYW5kCisgICAgICAgd2Ugd2lsbCBuZWVkIHRv
IGxvYWQgR0FJTCBmb3IgdGVzdHMgdGhhdCBuZWVkIHRvIHVzZSBBdGtPYmplY3RzCisgICAgICAg
ZnJvbSBub24tV2ViS2l0IEd0a1dpZGdldHMgKGUuZyBwYXJlbnRGb3JSb290T2JqZWN0KS4qLwor
ICAgIGluaXRpYWxpemVUZXN0aW5nRnJhbWV3b3JrKGFyZ2MsIGFyZ3YpOworI2Vsc2UKKyAgICBn
dGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7CisjZW5kaWYKKworICAgIGdfdGVzdF9i
dWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7CisgICAgZ190ZXN0X2FkZF9mdW5j
KCIvd2Via2l0L2F0ay9jYXJldE9mZnNldHMiLCB0ZXN0V2Via2l0QXRrQ2FyZXRPZmZzZXRzKTsK
KyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2NhcmV0T2Zmc2V0c0FuZEV4dHJhbm91
c1doaXRlU3BhY2VzIiwgdGVzdFdlYmtpdEF0a0NhcmV0T2Zmc2V0c0FuZEV4dHJhbm91c1doaXRl
U3BhY2VzKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2NvbWJvQm94IiwgdGVz
dFdlYmtpdEF0a0NvbWJvQm94KTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2Rv
Y3VtZW50TG9hZGluZ0V2ZW50cyIsIHRlc3RXZWJraXRBdGtEb2N1bWVudExvYWRpbmdFdmVudHMp
OworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvZW1iZWRkZWRPYmplY3RzIiwgdGVz
dFdlYmtpdEF0a0VtYmVkZGVkT2JqZWN0cyk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0
L2F0ay9nZXRIZWFkZXJzSW5UYWJsZSIsIHRlc3RXZWJraXRBdGtHZXRIZWFkZXJzSW5UYWJsZSk7
CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay90ZXh0QXR0cmlidXRlcyIsIHRlc3RX
ZWJraXRBdGtUZXh0QXR0cmlidXRlcyk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0
ay90ZXh0U2VsZWN0aW9ucyIsIHRlc3RXZWJraXRBdGtUZXh0U2VsZWN0aW9ucyk7CisgICAgZ190
ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9nZXRFeHRlbnRzIiwgdGVzdFdlYmtpdEF0a0dldEV4
dGVudHMpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvaHlwZXJ0ZXh0QW5kSHlw
ZXJsaW5rcyIsIHRlc3RXZWJraXRBdGtIeXBlcnRleHRBbmRIeXBlcmxpbmtzKTsKKyAgICBnX3Rl
c3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2xheW91dEFuZERhdGFUYWJsZXMiLCB0ZXN0V2Via2l0
QXRrTGF5b3V0QW5kRGF0YVRhYmxlcyk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0
ay9saW5rc1dpdGhJbmxpbmVJbWFnZXMiLCB0ZXN0V2Via2l0QXRrTGlua3NXaXRoSW5saW5lSW1h
Z2VzKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2xpc3RzT2ZJdGVtcyIsIHRl
c3RXZWJraXRBdGtMaXN0c09mSXRlbXMpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9h
dGsvdGV4dENoYW5nZWROb3RpZmljYXRpb25zIiwgdGVzdFdlYmtpdEF0a1RleHRDaGFuZ2VkTm90
aWZpY2F0aW9ucyk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9wYXJlbnRGb3JS
b290T2JqZWN0IiwgdGVzdFdlYmtpdEF0a1BhcmVudEZvclJvb3RPYmplY3QpOworICAgIGdfdGVz
dF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvc2V0UGFyZW50Rm9yT2JqZWN0IiwgdGVzdFdlYmtpdEF0
a1NldFBhcmVudEZvck9iamVjdCk7CisgICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7Cit9CisKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RhdGtyb2xl
cy5jIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGF0a3JvbGVzLmMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg4MTdjZgotLS0gL2Rldi9udWxs
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RhdGtyb2xlcy5j
CkBAIC0wLDAgKzEsNDI2IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTAgSm9hbm1hcmllIERp
Z2dzCisgKiBDb3B5cmlnaHQgwqkgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CisjaW5jbHVkZSA8
Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKworLyogTm9uIGZvcm0gcm9s
ZXMgKi8KKyNkZWZpbmUgSFRNTF9ET0NVTUVOVF9GUkFNRSAiPGh0bWw+PGJvZHk+VGhpcyBpcyBh
IHRlc3QuPC9ib2R5PjwvaHRtbD4iCisjZGVmaW5lIEhUTUxfSEVBRElORyAiPGh0bWw+PGJvZHk+
PGgxPjE8L2gxPjxoMj4yPC9oMj48aDM+MzwvaDM+PGg0PjQ8L2g0PjxoNT41PC9oNT48aDY+Njwv
aDY+PC9ib2R5PjwvaHRtbD4iCisjZGVmaW5lIEhUTUxfSU1BR0UgIjxodG1sPjxib2R5PjxpbWcg
c3JjPSdmb29iYXIucG5nJyBhbHQ9J1RoaXMgaXMgYSB0ZXN0LicvPjwvYm9keT48L2h0bWw+Igor
I2RlZmluZSBIVE1MX0xJTktfVEVYVCAiPGh0bWw+PGJvZHk+PGEgaHJlZj0nZm9vYmFyLmh0bWwn
PlRoaXMgaXMgYSB0ZXN0LjwvYT48L2JvZHk+PC9odG1sPiIKKyNkZWZpbmUgSFRNTF9MSVNUICI8
aHRtbD48Ym9keT48dWw+PGxpPjE8L2xpPjxsaT4yPC9saT48L3VsPjxvbD48bGk+MTwvbGk+PGxp
PjI8L2xpPjwvb2w+PC9ib2R5PjwvaHRtbD4iCisjZGVmaW5lIEhUTUxfUEFSQUdSQVBIICI8aHRt
bD48Ym9keT48cD5UaGlzIGlzIGEgdGVzdC48L3A+PC9ib2R5PjwvaHRtbD4iCisjZGVmaW5lIEhU
TUxfU0VDVElPTiAiPGh0bWw+PGJvZHk+PGRpdj5UaGlzIGlzIGEgdGVzdC48L2Rpdj48L2JvZHk+
PC9odG1sPiIKKyNkZWZpbmUgSFRNTF9UQUJMRSAiPGh0bWw+PGJvZHk+PHRhYmxlIGJvcmRlcj0n
MSc+PHRyPjx0ZD5UaGlzIGlzPC90ZD48dGQ+YSB0ZXN0LjwvdGQ+PC90cj48L3RhYmxlPjwvYm9k
eT48L2h0bWw+IgorI2RlZmluZSBIVE1MX1NFUEFSQVRPUiAiPGh0bWw+PGJvZHk+PGhyLz48L2Jv
ZHk+PC9odG1sPiIKKyNkZWZpbmUgSFRNTF9DT01CT0JPWCAiPGh0bWw+PGJvZHk+PHNlbGVjdCBz
aXplPScxJz48b3B0aW9uPm9uZTwvb3B0aW9uPjxvcHRpb24+dHdvPC9vcHRpb24+PG9wdGlvbj50
aHJlZTwvb3B0aW9uPjwvc2VsZWN0PjwvYm9keT48L2h0bWw+IgorLyogRm9ybSByb2xlcyAqLwor
I2RlZmluZSBIVE1MX0ZPUk0gIjxodG1sPjxib2R5Pjxmb3JtPlRoaXMgaXMgYSB0ZXN0LjwvZm9y
bT48L2JvZHk+PC9odG1sPiIKKyNkZWZpbmUgSFRNTF9DSEVDS19CT1ggIjxodG1sPjxib2R5Pjxp
bnB1dCB0eXBlPSdjaGVja2JveCcgLz5UaGlzIGlzIGEgdGVzdC48L2JvZHk+PC9odG1sPiIKKyNk
ZWZpbmUgSFRNTF9MQUJFTEVEX0VOVFJZICI8aHRtbD48Ym9keT48bGFiZWwgZm9yPSdmb28nPk5h
bWU6PC9sYWJlbD48aW5wdXQgdHlwZT0ndGV4dCcgaWQ9J2ZvbycgLz48L2JvZHk+PC9odG1sPiIK
KyNkZWZpbmUgSFRNTF9MSVNUQk9YICI8aHRtbD48Ym9keT48c2VsZWN0IHNpemU9JzMnPjxvcHRp
b24+b25lPC9vcHRpb24+PG9wdGlvbj50d288L29wdGlvbj48b3B0aW9uPnRocmVlPC9vcHRpb24+
PC9zZWxlY3Q+PC9ib2R5PjwvaHRtbD4iCisjZGVmaW5lIEhUTUxfUEFTU1dPUkRfVEVYVCAiPGh0
bWw+PGJvZHk+PGlucHV0IHR5cGU9J3Bhc3N3b3JkJyAvPjwvYm9keT48L2h0bWw+IgorI2RlZmlu
ZSBIVE1MX1BVU0hfQlVUVE9OICI8aHRtbD48Ym9keT48aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1
ZT0nb2snIC8+VGhpcyBpcyBhIHRlc3QuPC9ib2R5PjwvaHRtbD4iCisjZGVmaW5lIEhUTUxfUkFE
SU9fQlVUVE9OICI8aHRtbD48Ym9keT48aW5wdXQgdHlwZT0ncmFkaW8nIC8+VGhpcyBpcyBhIHRl
c3QuPC9ib2R5PjwvaHRtbD4iCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBBdGtPYmplY3QqIGRv
Y3VtZW50OworICAgIEF0a09iamVjdCogb2JqOworICAgIEF0a1JvbGUgcm9sZTsKKyAgICBHdGtX
aWRnZXQqIHdlYlZpZXc7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvYzsKKyAgICBHTWFpbkxvb3Aq
IGxvb3A7Cit9IEF0a1JvbGVzRml4dHVyZTsKKworc3RhdGljIGdib29sZWFuIGZpbmlzaF9sb2Fk
aW5nKEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSkKK3sKKyAgICBpZiAoZ19tYWluX2xvb3BfaXNf
cnVubmluZyhmaXh0dXJlLT5sb29wKSkKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChmaXh0dXJl
LT5sb29wKTsKKworICAgIC8vIFdpdGggdGhlIGNoYW5nZSB0byBzdXBwb3J0IFdLMiBhY2Nlc3Np
YmlsaXR5LCB0aGUgcm9vdCBvYmplY3QKKyAgICAvLyBoYXMgY2hhbmdlZCBhbmQgaXQncyBubyBs
b25nZXIgdGhlIGRvY3VtZW50IGZyYW1lLCBidXQgYSBzY3JvbGwKKyAgICAvLyBwYW5lIGNvbnRh
aW5pbmcgdGhlIGRvY3VtZW50IGZyYW1lIGFzIGl0cyBvbmx5IGNoaWxkLiBTZWUgdGhlCisgICAg
Ly8gYnVnIDcyMzkwIGZvciBtb3JlIGRldGFpbHMgb24gdGhpcyBjaGFuZ2UuCisgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyMzkwCisgICAgQXRrT2JqZWN0
KiByb290T2JqZWN0ID0gZ3RrX3dpZGdldF9nZXRfYWNjZXNzaWJsZShmaXh0dXJlLT53ZWJWaWV3
KTsKKyAgICBmaXh0dXJlLT5kb2N1bWVudCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hp
bGQocm9vdE9iamVjdCwgMCk7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+ZG9jdW1lbnQpOworCisg
ICAgLy8gUmVtb3ZlIHRoZSByZWZlcmVuY2UgYWRkZWQgYnkgcmVmX2FjY2Vzc2libGVfY2hpbGQo
KSBhbmQKKyAgICAvLyByZXR1cm4sIHNpbmNlIHdlIGRvbid0IG5lZWQgdG8ga2VlcCB0aGF0IGV4
dHJhIHJlZiBhdCBhbGwuCisgICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+ZG9jdW1lbnQpOwor
ICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0
dXAoQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAg
Zml4dHVyZS0+bG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKKyAgICBmaXh0dXJl
LT5hbGxvYyA9IChHdGtBbGxvY2F0aW9uKSB7IDAsIDAsIDgwMCwgNjAwIH07CisgICAgZml4dHVy
ZS0+d2ViVmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKKyAgICBnX29iamVjdF9yZWZfc2lu
ayhmaXh0dXJlLT53ZWJWaWV3KTsKKworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShmaXh0
dXJlLT53ZWJWaWV3LCAmZml4dHVyZS0+YWxsb2MpOworCisgICAgaWYgKGRhdGEgIT0gTlVMTCkK
KyAgICAgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklFVyAoZml4
dHVyZS0+d2ViVmlldyksIChjb25zdCBjaGFyKikgZGF0YSwgTlVMTCwgTlVMTCwgTlVMTCk7CisK
KyAgICBnX2lkbGVfYWRkKChHU291cmNlRnVuYykgZmluaXNoX2xvYWRpbmcsIGZpeHR1cmUpOwor
ICAgIGdfbWFpbl9sb29wX3J1bihmaXh0dXJlLT5sb29wKTsKK30KKworc3RhdGljIHZvaWQgYXRr
X3JvbGVzX2ZpeHR1cmVfdGVhcmRvd24oQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rw
b2ludGVyIGRhdGEpCit7CisgICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+d2ViVmlldyk7Cisg
ICAgZ19tYWluX2xvb3BfdW5yZWYoZml4dHVyZS0+bG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIGdl
dF9jaGlsZF9hbmRfdGVzdF9yb2xlKEF0a09iamVjdCogb2JqLCBnaW50IHBvcywgQXRrUm9sZSBy
b2xlKQoreworICAgIEF0a09iamVjdCogY2hpbGQ7CisgICAgQXRrUm9sZSBjaGlsZF9yb2xlOwor
CisgICAgY2hpbGQgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iaiwgcG9zKTsK
KyAgICBnX2Fzc2VydChjaGlsZCk7CisgICAgY2hpbGRfcm9sZSA9IGF0a19vYmplY3RfZ2V0X3Jv
bGUoY2hpbGQpOworICAgIGdfYXNzZXJ0KGNoaWxkX3JvbGUgPT0gcm9sZSk7CisKKyAgICBnX29i
amVjdF91bnJlZihjaGlsZCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRf
cm9sZV9kb2N1bWVudF9mcmFtZShBdGtSb2xlc0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50
ZXIgZGF0YSkKK3sKKyAgICBmaXh0dXJlLT5yb2xlID0gYXRrX29iamVjdF9nZXRfcm9sZShmaXh0
dXJlLT5kb2N1bWVudCk7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+cm9sZSA9PSBBVEtfUk9MRV9E
T0NVTUVOVF9XRUIpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVf
aGVhZGluZyhBdGtSb2xlc0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sK
KyAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5kb2N1bWVudCwgMCwgQVRLX1JP
TEVfSEVBRElORyk7CisgICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+ZG9jdW1l
bnQsIDEsIEFUS19ST0xFX0hFQURJTkcpOworICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZp
eHR1cmUtPmRvY3VtZW50LCAyLCBBVEtfUk9MRV9IRUFESU5HKTsKKyAgICBnZXRfY2hpbGRfYW5k
X3Rlc3Rfcm9sZShmaXh0dXJlLT5kb2N1bWVudCwgMywgQVRLX1JPTEVfSEVBRElORyk7CisgICAg
Z2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+ZG9jdW1lbnQsIDQsIEFUS19ST0xFX0hF
QURJTkcpOworICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPmRvY3VtZW50LCA1
LCBBVEtfUk9MRV9IRUFESU5HKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dl
dF9yb2xlX2ltYWdlKEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRh
KQoreworICAgIC8vIFRoaXMgaXMgYW4gZXh0cmFuZW91cyBvYmplY3Qgb2YgQVRLX1JPTEVfUEFO
RUwgd2hpY2ggd2Ugc2hvdWxkIGdldCByaWQgb2YuCisgICAgZml4dHVyZS0+b2JqID0gYXRrX29i
amVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmaXh0dXJlLT5kb2N1bWVudCwgMCk7CisgICAgZ19h
c3NlcnQoZml4dHVyZS0+b2JqKTsKKworICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1
cmUtPm9iaiwgMCwgQVRLX1JPTEVfSU1BR0UpOworCisgICAgZ19vYmplY3RfdW5yZWYoZml4dHVy
ZS0+b2JqKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xpbmso
QXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgLy8g
VGhpcyBpcyBhbiBleHRyYW5lb3VzIG9iamVjdCBvZiBBVEtfUk9MRV9QQU5FTCB3aGljaCB3ZSBz
aG91bGQgZ2V0IHJpZCBvZi4KKyAgICBmaXh0dXJlLT5vYmogPSBhdGtfb2JqZWN0X3JlZl9hY2Nl
c3NpYmxlX2NoaWxkKGZpeHR1cmUtPmRvY3VtZW50LCAwKTsKKyAgICBnX2Fzc2VydChmaXh0dXJl
LT5vYmopOworCisgICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+b2JqLCAwLCBB
VEtfUk9MRV9MSU5LKTsKKworICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9iaik7Cit9CisK
K3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9saXN0X2FuZF9pdGVtKEF0a1Jv
bGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIEF0a09iamVj
dCogbGlzdE9iajsKKworICAgIGxpc3RPYmogPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2No
aWxkKGZpeHR1cmUtPmRvY3VtZW50LCAwKTsKKyAgICBnX2Fzc2VydChsaXN0T2JqKTsKKyAgICBm
aXh0dXJlLT5yb2xlID0gYXRrX29iamVjdF9nZXRfcm9sZShsaXN0T2JqKTsKKyAgICBnX2Fzc2Vy
dChmaXh0dXJlLT5yb2xlID09IEFUS19ST0xFX0xJU1QpOworCisgICAgZ2V0X2NoaWxkX2FuZF90
ZXN0X3JvbGUobGlzdE9iaiwgMCwgQVRLX1JPTEVfTElTVF9JVEVNKTsKKyAgICBnZXRfY2hpbGRf
YW5kX3Rlc3Rfcm9sZShsaXN0T2JqLCAxLCBBVEtfUk9MRV9MSVNUX0lURU0pOworICAgIGdfb2Jq
ZWN0X3VucmVmKGxpc3RPYmopOworCisgICAgbGlzdE9iaiA9IGF0a19vYmplY3RfcmVmX2FjY2Vz
c2libGVfY2hpbGQoZml4dHVyZS0+ZG9jdW1lbnQsIDEpOworICAgIGdfYXNzZXJ0KGxpc3RPYmop
OworICAgIGZpeHR1cmUtPnJvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKGxpc3RPYmopOworICAg
IGdfYXNzZXJ0KGZpeHR1cmUtPnJvbGUgPT0gQVRLX1JPTEVfTElTVCk7CisKKyAgICBnZXRfY2hp
bGRfYW5kX3Rlc3Rfcm9sZShsaXN0T2JqLCAwLCBBVEtfUk9MRV9MSVNUX0lURU0pOworICAgIGdl
dF9jaGlsZF9hbmRfdGVzdF9yb2xlKGxpc3RPYmosIDEsIEFUS19ST0xFX0xJU1RfSVRFTSk7Cisg
ICAgZ19vYmplY3RfdW5yZWYobGlzdE9iaik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0
X2F0a19nZXRfcm9sZV9wYXJhZ3JhcGgoQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rw
b2ludGVyIGRhdGEpCit7CisgICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+ZG9j
dW1lbnQsIDAsIEFUS19ST0xFX1BBUkFHUkFQSCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Vi
a2l0X2F0a19nZXRfcm9sZV9zZWN0aW9uKEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0
cG9pbnRlciBkYXRhKQoreworICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPmRv
Y3VtZW50LCAwLCBBVEtfUk9MRV9TRUNUSU9OKTsKK30KKworLy8gRG9lcyBub3QgeWV0IHRlc3Qg
dGFibGUgY2VsbHMgYmVjYXVzZSBvZiBidWcgMzA4OTUuCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtp
dF9hdGtfZ2V0X3JvbGVfdGFibGUoQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2lu
dGVyIGRhdGEpCit7CisgICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+ZG9jdW1l
bnQsIDAsIEFUS19ST0xFX1RBQkxFKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRr
X2dldF9yb2xlX3NlcGFyYXRvcihBdGtSb2xlc0ZpeHR1cmUgKmZpeHR1cmUsIGdjb25zdHBvaW50
ZXIgZGF0YSkKK3sKKyAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5kb2N1bWVu
dCwgMCwgQVRLX1JPTEVfU0VQQVJBVE9SKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRf
YXRrX2dldF9yb2xlX2NvbWJvYm94KEF0a1JvbGVzRml4dHVyZSAqZml4dHVyZSwgZ2NvbnN0cG9p
bnRlciBkYXRhKQoreworICAgIEF0a09iamVjdCogY29tYm9ib3hNZW51OworCisgICAgLy8gVGhp
cyBpcyBhbiBleHRyYW5lb3VzIG9iamVjdCBvZiBBVEtfUk9MRV9QQU5FTCB3aGljaCB3ZSBzaG91
bGQgZ2V0IHJpZCBvZi4KKyAgICBmaXh0dXJlLT5vYmogPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3Np
YmxlX2NoaWxkKGZpeHR1cmUtPmRvY3VtZW50LCAwKTsKKyAgICBnX2Fzc2VydChmaXh0dXJlLT5v
YmopOworCisgICAgZml4dHVyZS0+b2JqID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGls
ZChmaXh0dXJlLT5vYmosIDApOworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPm9iaik7CisgICAgZml4
dHVyZS0+cm9sZSA9IGF0a19vYmplY3RfZ2V0X3JvbGUoZml4dHVyZS0+b2JqKTsKKyAgICBnX2Fz
c2VydChmaXh0dXJlLT5yb2xlID09IEFUS19ST0xFX0NPTUJPX0JPWCk7CisKKyAgICBjb21ib2Jv
eE1lbnUgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZpeHR1cmUtPm9iaiwgMCk7
CisgICAgZ19hc3NlcnQoY29tYm9ib3hNZW51KTsKKyAgICBmaXh0dXJlLT5yb2xlID0gYXRrX29i
amVjdF9nZXRfcm9sZShjb21ib2JveE1lbnUpOworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPnJvbGUg
PT0gQVRLX1JPTEVfTUVOVSk7CisKKyAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShjb21ib2Jv
eE1lbnUsIDAsIEFUS19ST0xFX01FTlVfSVRFTSk7CisgICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3Jv
bGUoY29tYm9ib3hNZW51LCAxLCBBVEtfUk9MRV9NRU5VX0lURU0pOworICAgIGdldF9jaGlsZF9h
bmRfdGVzdF9yb2xlKGNvbWJvYm94TWVudSwgMiwgQVRLX1JPTEVfTUVOVV9JVEVNKTsKKworICAg
IGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9iaik7CisgICAgZ19vYmplY3RfdW5yZWYoY29tYm9i
b3hNZW51KTsKK30KKworLyogRm9ybSByb2xlcyAqLworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRf
YXRrX2dldF9yb2xlX2Zvcm0oQXRrUm9sZXNGaXh0dXJlICpmaXh0dXJlLCBnY29uc3Rwb2ludGVy
IGRhdGEpCit7CisgICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+ZG9jdW1lbnQs
IDAsIEFUS19ST0xFX0ZPUk0pOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0
X3JvbGVfY2hlY2tfYm94KEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBk
YXRhKQoreworICAgIC8vIFRoaXMgaXMgYW4gZXh0cmFuZW91cyBvYmplY3Qgb2YgQVRLX1JPTEVf
UEFORUwgd2hpY2ggd2Ugc2hvdWxkIGdldCByaWQgb2YuCisgICAgZml4dHVyZS0+b2JqID0gYXRr
X29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmaXh0dXJlLT5kb2N1bWVudCwgMCk7CisgICAg
Z19hc3NlcnQoZml4dHVyZS0+b2JqKTsKKworICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZp
eHR1cmUtPm9iaiwgMCwgQVRLX1JPTEVfQ0hFQ0tfQk9YKTsKKworICAgIGdfb2JqZWN0X3VucmVm
KGZpeHR1cmUtPm9iaik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9s
ZV9lbnRyeShBdGtSb2xlc0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sK
KyAgICAvLyBUaGlzIGlzIGFuIGV4dHJhbmVvdXMgb2JqZWN0IG9mIEFUS19ST0xFX1BBTkVMIHdo
aWNoIHdlIHNob3VsZCBnZXQgcmlkIG9mLgorICAgIGZpeHR1cmUtPm9iaiA9IGF0a19vYmplY3Rf
cmVmX2FjY2Vzc2libGVfY2hpbGQoZml4dHVyZS0+ZG9jdW1lbnQsIDApOworICAgIGdfYXNzZXJ0
KGZpeHR1cmUtPm9iaik7CisKKyAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5v
YmosIDEsIEFUS19ST0xFX0VOVFJZKTsKKworICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9i
aik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9sYWJlbChBdGtS
b2xlc0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICAvLyBUaGlz
IGlzIGFuIGV4dHJhbmVvdXMgb2JqZWN0IG9mIEFUS19ST0xFX1BBTkVMIHdoaWNoIHdlIHNob3Vs
ZCBnZXQgcmlkIG9mLgorICAgIGZpeHR1cmUtPm9iaiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2li
bGVfY2hpbGQoZml4dHVyZS0+ZG9jdW1lbnQsIDApOworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPm9i
aik7CisKKyAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5vYmosIDAsIEFUS19S
T0xFX0xBQkVMKTsKKworICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9iaik7Cit9CisKK3N0
YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9saXN0Ym94KEF0a1JvbGVzRml4dHVy
ZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIEF0a09iamVjdCogbGlzdGJv
eE9iajsKKyAgICAvLyBUaGlzIGlzIGFuIGV4dHJhbmVvdXMgb2JqZWN0IG9mIEFUS19ST0xFX1BB
TkVMIHdoaWNoIHdlIHNob3VsZCBnZXQgcmlkIG9mLgorICAgIGZpeHR1cmUtPm9iaiA9IGF0a19v
YmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoZml4dHVyZS0+ZG9jdW1lbnQsIDApOworICAgIGdf
YXNzZXJ0KGZpeHR1cmUtPm9iaik7CisKKyAgICBsaXN0Ym94T2JqID0gYXRrX29iamVjdF9yZWZf
YWNjZXNzaWJsZV9jaGlsZChmaXh0dXJlLT5vYmosIDApOworICAgIGdfYXNzZXJ0KGxpc3Rib3hP
YmopOworICAgIGZpeHR1cmUtPnJvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKGxpc3Rib3hPYmop
OworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPnJvbGUgPT0gQVRLX1JPTEVfTElTVCk7CisKKyAgICBn
ZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShsaXN0Ym94T2JqLCAwLCBBVEtfUk9MRV9MSVNUX0lURU0p
OworICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGxpc3Rib3hPYmosIDEsIEFUS19ST0xFX0xJ
U1RfSVRFTSk7CisgICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUobGlzdGJveE9iaiwgMiwgQVRL
X1JPTEVfTElTVF9JVEVNKTsKKworICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9iaik7Cisg
ICAgZ19vYmplY3RfdW5yZWYobGlzdGJveE9iaik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Vi
a2l0X2F0a19nZXRfcm9sZV9wYXNzd29yZF90ZXh0KEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwg
Z2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIC8vIFRoaXMgaXMgYW4gZXh0cmFuZW91cyBvYmpl
Y3Qgb2YgQVRLX1JPTEVfUEFORUwgd2hpY2ggd2Ugc2hvdWxkIGdldCByaWQgb2YuCisgICAgZml4
dHVyZS0+b2JqID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmaXh0dXJlLT5kb2N1
bWVudCwgMCk7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+b2JqKTsKKworICAgIGdldF9jaGlsZF9h
bmRfdGVzdF9yb2xlKGZpeHR1cmUtPm9iaiwgMCwgQVRLX1JPTEVfUEFTU1dPUkRfVEVYVCk7CisK
KyAgICBnX29iamVjdF91bnJlZihmaXh0dXJlLT5vYmopOworfQorCitzdGF0aWMgdm9pZCB0ZXN0
X3dlYmtpdF9hdGtfZ2V0X3JvbGVfcHVzaF9idXR0b24oQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJl
LCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgLy8gVGhpcyBpcyBhbiBleHRyYW5lb3VzIG9i
amVjdCBvZiBBVEtfUk9MRV9QQU5FTCB3aGljaCB3ZSBzaG91bGQgZ2V0IHJpZCBvZi4KKyAgICBm
aXh0dXJlLT5vYmogPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZpeHR1cmUtPmRv
Y3VtZW50LCAwKTsKKyAgICBnX2Fzc2VydChmaXh0dXJlLT5vYmopOworCisgICAgZ2V0X2NoaWxk
X2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+b2JqLCAwLCBBVEtfUk9MRV9QVVNIX0JVVFRPTik7CisK
KyAgICBnX29iamVjdF91bnJlZihmaXh0dXJlLT5vYmopOworfQorCitzdGF0aWMgdm9pZCB0ZXN0
X3dlYmtpdF9hdGtfZ2V0X3JvbGVfcmFkaW9fYnV0dG9uKEF0a1JvbGVzRml4dHVyZSogZml4dHVy
ZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIC8vIFRoaXMgaXMgYW4gZXh0cmFuZW91cyBv
YmplY3Qgb2YgQVRLX1JPTEVfUEFORUwgd2hpY2ggd2Ugc2hvdWxkIGdldCByaWQgb2YuCisgICAg
Zml4dHVyZS0+b2JqID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmaXh0dXJlLT5k
b2N1bWVudCwgMCk7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+b2JqKTsKKworICAgIGdldF9jaGls
ZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPm9iaiwgMCwgQVRLX1JPTEVfUkFESU9fQlVUVE9OKTsK
KworICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9iaik7Cit9CisKK2ludCBtYWluKGludCBh
cmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVM
TCk7CisKKyAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwor
CisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9hdGsvdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2Rv
Y3VtZW50X2ZyYW1lIiwKKyAgICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVyZSwgSFRNTF9ET0NV
TUVOVF9GUkFNRSwKKyAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAorICAg
ICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2RvY3VtZW50X2ZyYW1lLAorICAg
ICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfdGVhcmRvd24pOworCisgICAgZ190ZXN0X2Fk
ZCgiL3dlYmtpdC9hdGsvdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2hlYWRpbmciLAorICAgICAg
ICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX0hFQURJTkcsCisgICAgICAgICAgICAgICBh
dGtfcm9sZXNfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X2F0a19n
ZXRfcm9sZV9oZWFkaW5nLAorICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfdGVhcmRv
d24pOworCisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9hdGsvdGVzdF93ZWJraXRfYXRrX2dldF9y
b2xlX2ltYWdlIiwKKyAgICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVyZSwgSFRNTF9JTUFHRSwK
KyAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAg
dGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2ltYWdlLAorICAgICAgICAgICAgICAgYXRrX3JvbGVz
X2ZpeHR1cmVfdGVhcmRvd24pOworCisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9hdGsvdGVzdF93
ZWJraXRfYXRrX2dldF9yb2xlX2xpbmsiLAorICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJl
LCBIVE1MX0xJTktfVEVYVCwKKyAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVw
LAorICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xpbmssCisgICAgICAg
ICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICBnX3Rlc3RfYWRkKCIv
d2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfbGlzdF9hbmRfaXRlbSIsCisgICAg
ICAgICAgICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhUTUxfTElTVCwKKyAgICAgICAgICAgICAgIGF0
a19yb2xlc19maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dl
dF9yb2xlX2xpc3RfYW5kX2l0ZW0sCisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90
ZWFyZG93bik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtf
Z2V0X3JvbGVfcGFyYWdyYXBoIiwKKyAgICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVyZSwgSFRN
TF9QQVJBR1JBUEgsCisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV9zZXR1cCwKKyAg
ICAgICAgICAgICAgIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9wYXJhZ3JhcGgsCisgICAgICAg
ICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICBnX3Rlc3RfYWRkKCIv
d2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfc2VjdGlvbiIsCisgICAgICAgICAg
ICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhUTUxfU0VDVElPTiwKKyAgICAgICAgICAgICAgIGF0a19y
b2xlc19maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9y
b2xlX3NlY3Rpb24sCisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7
CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVf
dGFibGUiLAorICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX1RBQkxFLAorICAg
ICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0
X3dlYmtpdF9hdGtfZ2V0X3JvbGVfdGFibGUsCisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4
dHVyZV90ZWFyZG93bik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtp
dF9hdGtfZ2V0X3JvbGVfc2VwYXJhdG9yIiwKKyAgICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVy
ZSwgSFRNTF9TRVBBUkFUT1IsCisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV9zZXR1
cCwKKyAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9zZXBhcmF0b3IsCisg
ICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICBnX3Rlc3Rf
YWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfY29tYm9ib3giLAorICAg
ICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX0NPTUJPQk9YLAorICAgICAgICAgICAg
ICAgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF9h
dGtfZ2V0X3JvbGVfY29tYm9ib3gsCisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90
ZWFyZG93bik7CisKKyAgICAvKiBGb3JtIHJvbGVzICovCisgICAgZ190ZXN0X2FkZCgiL3dlYmtp
dC9hdGsvdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2Zvcm0iLAorICAgICAgICAgICAgICAgQXRr
Um9sZXNGaXh0dXJlLCBIVE1MX0ZPUk0sCisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVy
ZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9mb3JtLAor
ICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfdGVhcmRvd24pOworICAgIGdfdGVzdF9h
ZGQoIi93ZWJraXQvYXRrL3Rlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9jaGVja19ib3giLAorICAg
ICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX0NIRUNLX0JPWCwKKyAgICAgICAgICAg
ICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF93ZWJraXRf
YXRrX2dldF9yb2xlX2NoZWNrX2JveCwKKyAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJl
X3RlYXJkb3duKTsKKworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvYXRrL3Rlc3Rfd2Via2l0X2F0
a19nZXRfcm9sZV9lbnRyeSIsCisgICAgICAgICAgICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhUTUxf
TEFCRUxFRF9FTlRSWSwKKyAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAor
ICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2VudHJ5LAorICAgICAgICAg
ICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfdGVhcmRvd24pOworCisgICAgZ190ZXN0X2FkZCgiL3dl
YmtpdC9hdGsvdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xhYmVsIiwKKyAgICAgICAgICAgICAg
IEF0a1JvbGVzRml4dHVyZSwgSFRNTF9MQUJFTEVEX0VOVFJZLAorICAgICAgICAgICAgICAgYXRr
X3JvbGVzX2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF9hdGtfZ2V0
X3JvbGVfbGFiZWwsCisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7
CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVf
bGlzdGJveCIsCisgICAgICAgICAgICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhUTUxfTElTVEJPWCwK
KyAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAg
dGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xpc3Rib3gsCisgICAgICAgICAgICAgICBhdGtfcm9s
ZXNfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0
X3dlYmtpdF9hdGtfZ2V0X3JvbGVfcGFzc3dvcmRfdGV4dCIsCisgICAgICAgICAgICAgICBBdGtS
b2xlc0ZpeHR1cmUsIEhUTUxfUEFTU1dPUkRfVEVYVCwKKyAgICAgICAgICAgICAgIGF0a19yb2xl
c19maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xl
X3Bhc3N3b3JkX3RleHQsCisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93
bik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3Jv
bGVfcHVzaF9idXR0b24iLAorICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX1BV
U0hfQlVUVE9OLAorICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAsCisgICAg
ICAgICAgICAgICB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfcHVzaF9idXR0b24sCisgICAgICAg
ICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICBnX3Rlc3RfYWRkKCIv
d2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfcmFkaW9fYnV0dG9uIiwKKyAgICAg
ICAgICAgICAgIEF0a1JvbGVzRml4dHVyZSwgSFRNTF9SQURJT19CVVRUT04sCisgICAgICAgICAg
ICAgICBhdGtfcm9sZXNfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0
X2F0a19nZXRfcm9sZV9yYWRpb19idXR0b24sCisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4
dHVyZV90ZWFyZG93bik7CisKKyAgICByZXR1cm4gZ190ZXN0X3J1bigpOworfQpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGNvbnRleHRtZW51LmMg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0Y29udGV4dG1lbnUuYwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGFhYTU3Ci0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGNvbnRleHRtZW51
LmMKQEAgLTAsMCArMSwzMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMu
TC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+CisKK3R5
cGVkZWYgc3RydWN0IHsKKyAgICBjaGFyICpkYXRhOworICAgIGd1aW50IGZsYWc7Cit9IFRlc3RJ
bmZvOworCitzdGF0aWMgR01haW5Mb29wICpsb29wOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAg
V2ViS2l0V2ViVmlldyAqd2ViVmlldzsKKyAgICBUZXN0SW5mbyAqaW5mbzsKK30gQ29udGV4dE1l
bnVGaXh0dXJlOworCitzdGF0aWMgVGVzdEluZm8gKnRlc3RJbmZvTmV3KGNvbnN0IGNoYXIgKmRh
dGEsIGd1aW50IGZsYWcpCit7CisgICAgVGVzdEluZm8gKmluZm8gPSBnX3NsaWNlX25ldyhUZXN0
SW5mbyk7CisgICAgaW5mby0+ZGF0YSA9IGdfc3RyZHVwKGRhdGEpOworICAgIGluZm8tPmZsYWcg
PSBmbGFnOworCisgICAgcmV0dXJuIGluZm87Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RJbmZvRGVz
dHJveShUZXN0SW5mbyAqaW5mbykKK3sKKyAgICBnX2ZyZWUoaW5mby0+ZGF0YSk7CisgICAgZ19z
bGljZV9mcmVlKFRlc3RJbmZvLCBpbmZvKTsKK30KKworc3RhdGljIHZvaWQgY29udGV4dE1lbnVG
aXh0dXJlU2V0dXAoQ29udGV4dE1lbnVGaXh0dXJlICpmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRh
dGEpCit7CisgICAgZml4dHVyZS0+d2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2Vi
X3ZpZXdfbmV3KCkpOworICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7Cisg
ICAgZml4dHVyZS0+aW5mbyA9IChUZXN0SW5mbyAqKWRhdGE7Cit9CisKK3N0YXRpYyB2b2lkIGNv
bnRleHRNZW51Rml4dHVyZVRlYXJkb3duKENvbnRleHRNZW51Rml4dHVyZSAqZml4dHVyZSwgZ2Nv
bnN0cG9pbnRlciBkYXRhKQoreworICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPndlYlZpZXcp
OworICAgIGdfbWFpbl9sb29wX3VucmVmKGxvb3ApOworICAgIHRlc3RJbmZvRGVzdHJveShmaXh0
dXJlLT5pbmZvKTsKK30KKworc3RhdGljIEdMaXN0ICpjaGVja0FjdGlvbihHTGlzdCAqaXRlciwg
V2ViS2l0Q29udGV4dE1lbnVBY3Rpb24gYWN0aW9uKQoreworICAgIEd0a01lbnVJdGVtICppdGVt
ID0gKEd0a01lbnVJdGVtICopaXRlci0+ZGF0YTsKKworICAgIGdfYXNzZXJ0KEdUS19JU19NRU5V
X0lURU0oaXRlbSkpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRf
YWN0aW9uKGl0ZW0pID09IGFjdGlvbik7CisKKyAgICByZXR1cm4gaXRlci0+bmV4dDsKK30KKwor
c3RhdGljIEdMaXN0ICpjaGVja0FjdGlvbldpdGhTdWJtZW51KEdMaXN0ICppdGVyLCBXZWJLaXRD
b250ZXh0TWVudUFjdGlvbiBhY3Rpb24pCit7CisgICAgR3RrTWVudUl0ZW0gKml0ZW0gPSAoR3Rr
TWVudUl0ZW0gKilpdGVyLT5kYXRhOworCisgICAgZ19hc3NlcnQoR1RLX0lTX01FTlVfSVRFTShp
dGVtKSk7CisgICAgZ19hc3NlcnQod2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9hY3Rpb24o
aXRlbSkgPT0gYWN0aW9uKTsKKyAgICBnX2Fzc2VydChHVEtfSVNfTUVOVShndGtfbWVudV9pdGVt
X2dldF9zdWJtZW51KGl0ZW0pKSk7CisKKyAgICByZXR1cm4gaXRlci0+bmV4dDsKK30KKworc3Rh
dGljIEdMaXN0ICpjaGVja1NlcGFyYXRvcihHTGlzdCAqaXRlcikKK3sKKyAgICBHdGtNZW51SXRl
bSAqaXRlbSA9IChHdGtNZW51SXRlbSAqKWl0ZXItPmRhdGE7CisKKyAgICBnX2Fzc2VydChHVEtf
SVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSk7CisKKyAgICByZXR1cm4gaXRlci0+bmV4dDsK
K30KKworc3RhdGljIGdib29sZWFuIGNvbnRleHRNZW51Q2FsbGJhY2soV2ViS2l0V2ViVmlldyAq
d2ViVmlldywgR3RrV2lkZ2V0ICpkZWZhdWx0TWVudSwgV2ViS2l0SGl0VGVzdFJlc3VsdCAqaGl0
VGVzdFJlc3VsdCwgZ2Jvb2xlYW4ga2V5Ym9hcmRNb2RlLCBncG9pbnRlciB1c2VyRGF0YSkKK3sK
KyAgICBUZXN0SW5mbyAqaW5mbyA9IChUZXN0SW5mbyAqKXVzZXJEYXRhOworICAgIGd1aW50IGNv
bnRleHQ7CisgICAgR0xpc3QgKml0ZW1zOworICAgIEdMaXN0ICppdGVyOworCisgICAgLyogQ2hl
Y2sgc2lnbmFsIHBhcmFtZXRlcnMgKi8KKyAgICBnX2Fzc2VydChXRUJLSVRfSVNfV0VCX1ZJRVco
d2ViVmlldykpOworICAgIGdfYXNzZXJ0KEdUS19JU19NRU5VKGRlZmF1bHRNZW51KSk7CisgICAg
Z19hc3NlcnQoV0VCS0lUX0lTX0hJVF9URVNUX1JFU1VMVChoaXRUZXN0UmVzdWx0KSk7CisgICAg
Z19hc3NlcnQoIWtleWJvYXJkTW9kZSk7CisKKyAgICBnX29iamVjdF9nZXQoaGl0VGVzdFJlc3Vs
dCwgImNvbnRleHQiLCAmY29udGV4dCwgTlVMTCk7CisgICAgZ19hc3NlcnQoY29udGV4dCAmIGlu
Zm8tPmZsYWcpOworCisgICAgaXRlbXMgPSBndGtfY29udGFpbmVyX2dldF9jaGlsZHJlbihHVEtf
Q09OVEFJTkVSKGRlZmF1bHRNZW51KSk7CisgICAgc3dpdGNoIChpbmZvLT5mbGFnKSB7CisgICAg
Y2FzZSBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfRE9DVU1FTlQ6CisgICAgICAgIGl0
ZXIgPSBpdGVtczsKKyAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05U
RVhUX01FTlVfQUNUSU9OX0dPX0JBQ0spOworICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRl
ciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fR09fRk9SV0FSRCk7CisgICAgICAgIGl0ZXIg
PSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9TVE9QKTsKKyAg
ICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9O
X1JFTE9BRCk7CisgICAgICAgIGdfYXNzZXJ0KCFpdGVyKTsKKworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9JTUFHRToKKyAgICAgICAgaXRl
ciA9IGl0ZW1zOworICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fT1BFTl9JTUFHRV9JTl9ORVdfV0lORE9XKTsKKyAgICAgICAgaXRlciA9
IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0RPV05MT0FEX0lN
QUdFX1RPX0RJU0spOworICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NP
TlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9JTUFHRV9UT19DTElQQk9BUkQpOworICAgICAgICBpdGVy
ID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9JTUFH
RV9VUkxfVE9fQ0xJUEJPQVJEKTsKKyAgICAgICAgZ19hc3NlcnQoIWl0ZXIpOworCisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0VESVRBQkxF
OgorICAgICAgICBpdGVyID0gaXRlbXM7CisgICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVy
LCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DVVQpOworICAgICAgICBpdGVyID0gY2hlY2tB
Y3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWSk7CisgICAgICAgIGl0
ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9QQVNURSk7
CisgICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FD
VElPTl9ERUxFVEUpOworICAgICAgICBpdGVyID0gY2hlY2tTZXBhcmF0b3IoaXRlcik7CisgICAg
ICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9T
RUxFQ1RfQUxMKTsKKyAgICAgICAgaXRlciA9IGNoZWNrU2VwYXJhdG9yKGl0ZXIpOworICAgICAg
ICBpdGVyID0gY2hlY2tBY3Rpb25XaXRoU3VibWVudShpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5V
X0FDVElPTl9JTlBVVF9NRVRIT0RTKTsKKyAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uV2l0aFN1
Ym1lbnUoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fVU5JQ09ERSk7CisgICAgICAg
IGdfYXNzZXJ0KCFpdGVyKTsKKworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9ISVRf
VEVTVF9SRVNVTFRfQ09OVEVYVF9MSU5LOgorICAgICAgICBpdGVyID0gaXRlbXM7CisgICAgICAg
IGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVO
X0xJTkspOworICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRf
TUVOVV9BQ1RJT05fT1BFTl9MSU5LX0lOX05FV19XSU5ET1cpOworICAgICAgICBpdGVyID0gY2hl
Y2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRE9XTkxPQURfTElOS19U
T19ESVNLKTsKKyAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhU
X01FTlVfQUNUSU9OX0NPUFlfTElOS19UT19DTElQQk9BUkQpOworICAgICAgICBnX2Fzc2VydCgh
aXRlcik7CisKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgZ19hc3NlcnRf
bm90X3JlYWNoZWQoKTsKKyAgICB9CisKKyAgICBnX2xpc3RfZnJlZShpdGVtcyk7CisgICAgZ19t
YWluX2xvb3BfcXVpdChsb29wKTsKKworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9p
ZCBwdXNoRXZlbnQoV2ViS2l0V2ViVmlldyAqd2ViVmlldykKK3sKKyAgICBHZGtFdmVudCAqZXZl
bnQgPSBnZGtfZXZlbnRfbmV3KEdES19CVVRUT05fUFJFU1MpOworI2lmIEdUS19DSEVDS19WRVJT
SU9OKDMsIDAsIDApCisgICAgR2RrRGV2aWNlTWFuYWdlciAqZGV2aWNlTWFuYWdlcjsKKyNlbmRp
ZgorCisgICAgZXZlbnQtPmFueS53aW5kb3cgPSBnX29iamVjdF9yZWYoZ3RrX3dpZGdldF9nZXRf
d2luZG93KEdUS19XSURHRVQod2ViVmlldykpKTsKKyAgICBldmVudC0+YW55LnNlbmRfZXZlbnQg
PSBGQUxTRTsKKyAgICBldmVudC0+YnV0dG9uLnRpbWUgPSBHREtfQ1VSUkVOVF9USU1FOworICAg
IGV2ZW50LT5idXR0b24uYnV0dG9uID0gMzsKKyAgICBldmVudC0+YnV0dG9uLnggPSBldmVudC0+
YnV0dG9uLnkgPSA1OworICAgIGV2ZW50LT5idXR0b24ueF9yb290ID0gZXZlbnQtPmJ1dHRvbi54
OworICAgIGV2ZW50LT5idXR0b24ueV9yb290ID0gZXZlbnQtPmJ1dHRvbi55OworI2lmIEdUS19D
SEVDS19WRVJTSU9OKDMsIDAsIDApCisgICAgZGV2aWNlTWFuYWdlciA9IGdka19kaXNwbGF5X2dl
dF9kZXZpY2VfbWFuYWdlcihnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsKKyAgICBldmVudC0+
YnV0dG9uLmRldmljZSA9IGdka19kZXZpY2VfbWFuYWdlcl9nZXRfY2xpZW50X3BvaW50ZXIoZGV2
aWNlTWFuYWdlcik7CisjZW5kaWYKKworICAgIGdka19ldmVudF9wdXQoZXZlbnQpOworICAgIGdk
a19ldmVudF9mcmVlKGV2ZW50KTsKK30KKworc3RhdGljIHZvaWQgbG9hZFN0YXR1c0NhbGxiYWNr
KFdlYktpdFdlYlZpZXcgKndlYlZpZXcsIEdQYXJhbVNwZWMgKnNwZWMsIGdwb2ludGVyIGRhdGEp
Cit7CisgICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xv
YWRfc3RhdHVzKHdlYlZpZXcpOworICAgIFRlc3RJbmZvICppbmZvID0gKFRlc3RJbmZvICopZGF0
YTsKKworICAgIGdfYXNzZXJ0KHN0YXR1cyAhPSBXRUJLSVRfTE9BRF9GQUlMRUQpOworCisgICAg
aWYgKHN0YXR1cyAhPSBXRUJLSVRfTE9BRF9GSU5JU0hFRCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAiY29udGV4dC1tZW51IiwgR19DQUxMQkFDSyhj
b250ZXh0TWVudUNhbGxiYWNrKSwgaW5mbyk7CisgICAgcHVzaEV2ZW50KHdlYlZpZXcpOworfQor
CitzdGF0aWMgZ2Jvb2xlYW4gbWFwRXZlbnRDYWxsYmFjayhHdGtXaWRnZXQgKndpZGdldCwgR2Rr
RXZlbnQgKmV2ZW50LCBncG9pbnRlciBkYXRhKQoreworICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1
cyh3aWRnZXQpOworICAgIENvbnRleHRNZW51Rml4dHVyZSAqZml4dHVyZSA9IChDb250ZXh0TWVu
dUZpeHR1cmUgKilkYXRhOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhmaXh0dXJl
LT53ZWJWaWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXh0dXJlLT5pbmZv
LT5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGV4dC9odG1sIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInV0Zi04IiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImZpbGU6Ly8iKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUt
PndlYlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhsb2FkU3RhdHVzQ2Fs
bGJhY2spLCBmaXh0dXJlLT5pbmZvKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2
b2lkIHRlc3RDb250ZXh0TWVudShDb250ZXh0TWVudUZpeHR1cmUgKmZpeHR1cmUsIGdjb25zdHBv
aW50ZXIgZGF0YSkKK3sKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDUw
LCA1MCB9OworICAgIEd0a1dpZGdldCAqd2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRP
V19QT1BVUCk7CisKKyAgICBndGtfd2luZG93X3Jlc2l6ZShHVEtfV0lORE9XKHdpbmRvdyksIDUw
LCA1MCk7CisgICAgZ3RrX3dpbmRvd19tb3ZlKEdUS19XSU5ET1cod2luZG93KSwgMCwgMCk7Cisg
ICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldyks
ICZhbGxvY2F0aW9uKTsKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRv
dyksIEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldykpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
d2luZG93LCAibWFwLWV2ZW50IiwgR19DQUxMQkFDSyhtYXBFdmVudENhbGxiYWNrKSwgZml4dHVy
ZSk7CisgICAgZ3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpOworCisgICAgZ19tYWluX2xvb3Bf
cnVuKGxvb3ApOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gY29udGV4dE1lbnVDdXN0b21JdGVtQ2Fs
bGJhY2soV2ViS2l0V2ViVmlldyAqd2ViVmlldywgR3RrV2lkZ2V0ICpkZWZhdWx0TWVudSwgV2Vi
S2l0SGl0VGVzdFJlc3VsdCAqaGl0VGVzdFJlc3VsdCwgZ2Jvb2xlYW4ga2V5Ym9hcmRNb2RlLCBn
cG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBUZXN0SW5mbyAqaW5mbyA9IChUZXN0SW5mbyAqKXVz
ZXJEYXRhOworICAgIGd1aW50IGNvbnRleHQ7CisgICAgR0xpc3QgKml0ZW1zOworICAgIEdMaXN0
ICppdGVyOworICAgIEd0a1dpZGdldCAqbWVudUl0ZW07CisgICAgR3RrQWN0aW9uICphY3Rpb247
CisKKyAgICAvKiBDaGVjayBzaWduYWwgcGFyYW1ldGVycyAqLworICAgIGdfYXNzZXJ0KFdFQktJ
VF9JU19XRUJfVklFVyh3ZWJWaWV3KSk7CisgICAgZ19hc3NlcnQoR1RLX0lTX01FTlUoZGVmYXVs
dE1lbnUpKTsKKyAgICBnX2Fzc2VydChXRUJLSVRfSVNfSElUX1RFU1RfUkVTVUxUKGhpdFRlc3RS
ZXN1bHQpKTsKKyAgICBnX2Fzc2VydCgha2V5Ym9hcmRNb2RlKTsKKworICAgIGdfb2JqZWN0X2dl
dChoaXRUZXN0UmVzdWx0LCAiY29udGV4dCIsICZjb250ZXh0LCBOVUxMKTsKKyAgICBnX2Fzc2Vy
dChjb250ZXh0ICYgaW5mby0+ZmxhZyk7CisKKyAgICBhY3Rpb24gPSBndGtfYWN0aW9uX25ldygi
VGVzdEFjdGlvbiIsICJDdXN0b20gQWN0aW9uIiwgIkN1c3RvbSBBY3Rpb24gVG9vbHRpcCIsIE5V
TEwpOworICAgIG1lbnVJdGVtID0gZ3RrX2FjdGlvbl9jcmVhdGVfbWVudV9pdGVtKGFjdGlvbik7
CisgICAgZ19vYmplY3RfdW5yZWYoYWN0aW9uKTsKKworICAgIGd0a19tZW51X3NoZWxsX2FwcGVu
ZChHVEtfTUVOVV9TSEVMTChkZWZhdWx0TWVudSksIG1lbnVJdGVtKTsKKyAgICBndGtfd2lkZ2V0
X3Nob3cobWVudUl0ZW0pOworCisgICAgaXRlbXMgPSBndGtfY29udGFpbmVyX2dldF9jaGlsZHJl
bihHVEtfQ09OVEFJTkVSKGRlZmF1bHRNZW51KSk7CisgICAgaXRlciA9IGl0ZW1zOworICAgIGl0
ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9HT19CQUNL
KTsKKyAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T05fR09fRk9SV0FSRCk7CisgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05U
RVhUX01FTlVfQUNUSU9OX1NUT1ApOworICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9SRUxPQUQpOworICAgIGl0ZXIgPSBjaGVja0FjdGlvbihp
dGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9OT19BQ1RJT04pOworICAgIGdfYXNzZXJ0
KCFpdGVyKTsKKworICAgIGdfbGlzdF9mcmVlKGl0ZW1zKTsKKyAgICBnX21haW5fbG9vcF9xdWl0
KGxvb3ApOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RDb250ZXh0
TWVudUN1c3RvbUl0ZW0oQ29udGV4dE1lbnVGaXh0dXJlICpmaXh0dXJlLCBnY29uc3Rwb2ludGVy
IGRhdGEpCit7CisgICAgR3RrV2lkZ2V0ICp3aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lO
RE9XX1BPUFVQKTsKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyks
IEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldykpOworICAgIGd0a193aWRnZXRfc2hvd19hbGwo
d2luZG93KTsKKyAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMoR1RLX1dJREdFVChmaXh0dXJlLT53
ZWJWaWV3KSk7CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoZml4dHVyZS0+d2Vi
VmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4dHVyZS0+aW5mby0+ZGF0
YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRleHQvaHRtbCIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJ1dGYtOCIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJmaWxlOi8vIik7CisgICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53ZWJW
aWV3LCAiY29udGV4dC1tZW51IiwgR19DQUxMQkFDSyhjb250ZXh0TWVudUN1c3RvbUl0ZW1DYWxs
YmFjayksIGZpeHR1cmUtPmluZm8pOworICAgIHB1c2hFdmVudChmaXh0dXJlLT53ZWJWaWV3KTsK
K30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIGd0a190ZXN0X2lu
aXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKKworICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvIik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L3Rlc3Rjb250ZXh0
bWVudS9kb2N1bWVudCIsIENvbnRleHRNZW51Rml4dHVyZSwKKyAgICAgICAgICAgICAgIHRlc3RJ
bmZvTmV3KCI8aHRtbD48Ym9keT48aDE+V2ViS2l0R1RLKyE8L2gxPjwvYm9keT48L2h0bWw+IiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVY
VF9ET0NVTUVOVCksCisgICAgICAgICAgICAgICBjb250ZXh0TWVudUZpeHR1cmVTZXR1cCwgdGVz
dENvbnRleHRNZW51LCBjb250ZXh0TWVudUZpeHR1cmVUZWFyZG93bik7CisgICAgLyogV2UgaGFy
ZGNvZGUgYWxsIGVsZW1lbnRzIHRvIGJlIGF0IDAsMCBzbyB0aGF0IHdlIGtub3cgd2hlcmUgdG8g
Z2VuZXJhdGUgdGhlIGJ1dHRvbiBldmVudHMgKi8KKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L3Rl
c3Rjb250ZXh0bWVudS9pbWFnZSIsIENvbnRleHRNZW51Rml4dHVyZSwKKyAgICAgICAgICAgICAg
IHRlc3RJbmZvTmV3KCI8aHRtbD48Ym9keT48aW1nIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsg
bGVmdDowOyB0b3A6MCcgc3JjPScweGRlYWRiZWVmJyB3aWR0aD01MCBoZWlnaHQ9NTA+PC9pbWc+
PC9ib2R5PjwvaHRtbD4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX0hJVF9U
RVNUX1JFU1VMVF9DT05URVhUX0lNQUdFKSwKKyAgICAgICAgICAgICAgIGNvbnRleHRNZW51Rml4
dHVyZVNldHVwLCB0ZXN0Q29udGV4dE1lbnUsIGNvbnRleHRNZW51Rml4dHVyZVRlYXJkb3duKTsK
KyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L3Rlc3Rjb250ZXh0bWVudS9lZGl0YWJsZSIsIENvbnRl
eHRNZW51Rml4dHVyZSwKKyAgICAgICAgICAgICAgIHRlc3RJbmZvTmV3KCI8aHRtbD48Ym9keT48
aW5wdXQgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjA7IHRvcDowJyBzaXplPSczNSc+
PC9pbnB1dD4+PC9ib2R5PjwvaHRtbD4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VC
S0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0VESVRBQkxFKSwKKyAgICAgICAgICAgICAgIGNv
bnRleHRNZW51Rml4dHVyZVNldHVwLCB0ZXN0Q29udGV4dE1lbnUsIGNvbnRleHRNZW51Rml4dHVy
ZVRlYXJkb3duKTsKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L3Rlc3Rjb250ZXh0bWVudS9saW5r
IiwgQ29udGV4dE1lbnVGaXh0dXJlLAorICAgICAgICAgICAgICAgdGVzdEluZm9OZXcoIjxodG1s
Pjxib2R5PjxhIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDowOyB0b3A6MCcgaHJlZj0n
aHR0cDovL3d3dy5leGFtcGxlLmNvbSc+SEVMTE8gV09STEQ8L2E+PC9ib2R5PjwvaHRtbD4iLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhU
X0xJTkspLAorICAgICAgICAgICAgICAgY29udGV4dE1lbnVGaXh0dXJlU2V0dXAsIHRlc3RDb250
ZXh0TWVudSwgY29udGV4dE1lbnVGaXh0dXJlVGVhcmRvd24pOworICAgIGdfdGVzdF9hZGQoIi93
ZWJraXQvdGVzdGNvbnRleHRtZW51L2N1c3RvbWl0ZW0iLCBDb250ZXh0TWVudUZpeHR1cmUsCisg
ICAgICAgICAgICAgICB0ZXN0SW5mb05ldygiPGh0bWw+PGJvZHk+PGgxPldlYktpdEdUSyshPC9o
MT48L2JvZHk+PC9odG1sPiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfSElU
X1RFU1RfUkVTVUxUX0NPTlRFWFRfRE9DVU1FTlQpLAorICAgICAgICAgICAgICAgY29udGV4dE1l
bnVGaXh0dXJlU2V0dXAsIHRlc3RDb250ZXh0TWVudUN1c3RvbUl0ZW0sIGNvbnRleHRNZW51Rml4
dHVyZVRlYXJkb3duKTsKKworICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7Cit9CisKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3Rjb3B5YW5kcGFzdGUu
YyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3Rjb3B5YW5kcGFzdGUu
YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjM4ZWE2Ci0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGNvcHlhbmRw
YXN0ZS5jCkBAIC0wLDAgKzEsMjY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxp
YSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRl
IDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxnbGliL2dzdGRpby5o
PgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9K
U1N0cmluZ1JlZi5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dFJlZi5oPgor
Cit0eXBlZGVmIHN0cnVjdCB7CisgICAgY2hhciogcGFnZTsKKyAgICBjaGFyKiBleHBlY3RlZENv
bnRlbnQ7Cit9IFRlc3RJbmZvOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgR3RrV2lkZ2V0KiB3
aW5kb3c7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldzsKKyAgICBHTWFpbkxvb3AqIGxvb3A7
CisgICAgVGVzdEluZm8qIGluZm87Cit9IENvcHlBbmRQYXN0ZUZpeHR1cmU7CisKK1Rlc3RJbmZv
KgordGVzdF9pbmZvX25ldyhjb25zdCBjaGFyKiBwYWdlLCBjb25zdCBjaGFyKiBleHBlY3RlZENv
bnRlbnQpCit7CisgICAgVGVzdEluZm8qIGluZm87CisgICAgaW5mbyA9IGdfc2xpY2VfbmV3MChU
ZXN0SW5mbyk7CisgICAgaW5mby0+cGFnZSA9IGdfc3RyZHVwKHBhZ2UpOworICAgIGlmIChleHBl
Y3RlZENvbnRlbnQpCisgICAgICAgIGluZm8tPmV4cGVjdGVkQ29udGVudCA9IGdfc3RyZHVwKGV4
cGVjdGVkQ29udGVudCk7CisgICAgcmV0dXJuIGluZm87Cit9CisKK3ZvaWQKK3Rlc3RfaW5mb19k
ZXN0cm95KFRlc3RJbmZvKiBpbmZvKQoreworICAgIGdfZnJlZShpbmZvLT5wYWdlKTsKKyAgICBn
X2ZyZWUoaW5mby0+ZXhwZWN0ZWRDb250ZW50KTsKKyAgICBnX3NsaWNlX2ZyZWUoVGVzdEluZm8s
IGluZm8pOworfQorCitzdGF0aWMgdm9pZCBjb3B5X2FuZF9wYXN0ZV9maXh0dXJlX3NldHVwKENv
cHlBbmRQYXN0ZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBm
aXh0dXJlLT5sb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworCisgICAgZml4dHVy
ZS0+d2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7CisgICAgZml4
dHVyZS0+d2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwor
CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihmaXh0dXJlLT53aW5kb3cpLCBH
VEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpKTsKK30KKworc3RhdGljIHZvaWQgY29weV9hbmRf
cGFzdGVfZml4dHVyZV90ZWFyZG93bihDb3B5QW5kUGFzdGVGaXh0dXJlKiBmaXh0dXJlLCBnY29u
c3Rwb2ludGVyIGRhdGEpCit7CisgICAgZ3RrX3dpZGdldF9kZXN0cm95KGZpeHR1cmUtPndpbmRv
dyk7CisgICAgZ19tYWluX2xvb3BfdW5yZWYoZml4dHVyZS0+bG9vcCk7CisgICAgdGVzdF9pbmZv
X2Rlc3Ryb3koZml4dHVyZS0+aW5mbyk7Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRfc3RhdHVzX2Ni
KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEdQYXJhbVNwZWMqIHNwZWMsIGdwb2ludGVyIGRhdGEp
Cit7CisgICAgQ29weUFuZFBhc3RlRml4dHVyZSogZml4dHVyZSA9IChDb3B5QW5kUGFzdGVGaXh0
dXJlKilkYXRhOworICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3
X2dldF9sb2FkX3N0YXR1cyh3ZWJWaWV3KTsKKyAgICBpZiAoc3RhdHVzICE9IFdFQktJVF9MT0FE
X0ZJTklTSEVEKQorICAgICAgICByZXR1cm47CisKKyAgICBHdGtDbGlwYm9hcmQqIGNsaXBib2Fy
ZCA9IGd0a19jbGlwYm9hcmRfZ2V0KEdES19TRUxFQ1RJT05fQ0xJUEJPQVJEKTsKKyAgICBndGtf
Y2xpcGJvYXJkX2NsZWFyKGNsaXBib2FyZCk7CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfY29weV9j
bGlwYm9hcmQod2ViVmlldyk7CisKKyAgICBnY2hhciogdGV4dCA9IGd0a19jbGlwYm9hcmRfd2Fp
dF9mb3JfdGV4dChjbGlwYm9hcmQpOworICAgIGdfYXNzZXJ0KHRleHQgfHwgIWZpeHR1cmUtPmlu
Zm8tPmV4cGVjdGVkQ29udGVudCk7CisgICAgZ19hc3NlcnQoIXRleHQgfHwgIXN0cmNtcCh0ZXh0
LCBmaXh0dXJlLT5pbmZvLT5leHBlY3RlZENvbnRlbnQpKTsKKyAgICBnX2ZyZWUodGV4dCk7CisK
KyAgICAvLyBWZXJpZnkgdGhhdCB0aGUgbWFya3VwIHN0YXJ0cyB3aXRoIHRoZSBwcm9wZXIgY29u
dGVudC10eXBlIG1ldGEgdGFnIHByZWZpeC4KKyAgICBHdGtTZWxlY3Rpb25EYXRhKiBzZWxlY3Rp
b25EYXRhID0gZ3RrX2NsaXBib2FyZF93YWl0X2Zvcl9jb250ZW50cyhjbGlwYm9hcmQsIGdka19h
dG9tX2ludGVybigidGV4dC9odG1sIiwgRkFMU0UpKTsKKyAgICBpZiAoc2VsZWN0aW9uRGF0YSkg
eworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogbWFya3VwUHJlZml4ID0gIjxtZXRhIGh0dHAt
ZXF1aXY9XCJjb250ZW50LXR5cGVcIiBjb250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04
XCI+IjsKKyAgICAgICAgY2hhciogbWFya3VwID0gZ19zdHJuZHVwKChjb25zdCBjaGFyKikgZ3Rr
X3NlbGVjdGlvbl9kYXRhX2dldF9kYXRhKHNlbGVjdGlvbkRhdGEpLAorICAgICAgICAgICAgZ3Rr
X3NlbGVjdGlvbl9kYXRhX2dldF9sZW5ndGgoc2VsZWN0aW9uRGF0YSkpOworICAgICAgICBnX2Fz
c2VydChzdHJsZW4obWFya3VwUHJlZml4KSA8PSBzdHJsZW4obWFya3VwKSk7CisgICAgICAgIGdf
YXNzZXJ0KCFzdHJuY21wKG1hcmt1cFByZWZpeCwgbWFya3VwLCBzdHJsZW4obWFya3VwUHJlZml4
KSkpOworICAgICAgICBnX2ZyZWUobWFya3VwKTsKKyAgICB9CisKKyAgICBnX2Fzc2VydCghZ3Rr
X2NsaXBib2FyZF93YWl0X2lzX3VyaXNfYXZhaWxhYmxlKGNsaXBib2FyZCkpOworICAgIGdfYXNz
ZXJ0KCFndGtfY2xpcGJvYXJkX3dhaXRfaXNfaW1hZ2VfYXZhaWxhYmxlKGNsaXBib2FyZCkpOwor
CisgICAgZ19tYWluX2xvb3BfcXVpdChmaXh0dXJlLT5sb29wKTsKK30KKworZ2Jvb2xlYW4gbWFw
X2V2ZW50X2NiKEd0a1dpZGdldCAqd2lkZ2V0LCBHZGtFdmVudCogZXZlbnQsIGdwb2ludGVyIGRh
dGEpCit7CisgICAgQ29weUFuZFBhc3RlRml4dHVyZSogZml4dHVyZSA9IChDb3B5QW5kUGFzdGVG
aXh0dXJlKilkYXRhOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhmaXh0dXJlLT53
ZWJWaWV3LCBmaXh0dXJlLT5pbmZvLT5wYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAidGV4dC9odG1sIiwgInV0Zi04IiwgImZpbGU6Ly8iKTsKKyAgICByZXR1cm4gRkFMU0U7
Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfY29weV9hbmRfcGFzdGUoQ29weUFuZFBhc3RlRml4dHVy
ZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGZpeHR1cmUtPmluZm8gPSAo
VGVzdEluZm8qKWRhdGE7CisgICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53aW5kb3csICJt
YXAtZXZlbnQiLAorICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhtYXBfZXZlbnRfY2Ip
LCBmaXh0dXJlKTsKKworICAgIGd0a193aWRnZXRfc2hvdyhmaXh0dXJlLT53aW5kb3cpOworICAg
IGd0a193aWRnZXRfc2hvdyhHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpKTsKKyAgICBndGtf
d2luZG93X3ByZXNlbnQoR1RLX1dJTkRPVyhmaXh0dXJlLT53aW5kb3cpKTsKKyAgICBndGtfd2lk
Z2V0X2dyYWJfZm9jdXMoR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSk7CisKKyAgICBnX3Np
Z25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwKKyAg
ICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sobG9hZF9zdGF0dXNfY2IpLCBmaXh0dXJlKTsK
KworICAgIGdfbWFpbl9sb29wX3J1bihmaXh0dXJlLT5sb29wKTsKK30KKworc3RhdGljIENvcHlB
bmRQYXN0ZUZpeHR1cmUqIGN1cnJlbnRGaXh0dXJlOworc3RhdGljIEpTVmFsdWVSZWYgcnVuUGFz
dGVUZXN0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9u
LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNW
YWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGd0a193
aWRnZXRfZ3JhYl9mb2N1cyhHVEtfV0lER0VUKGN1cnJlbnRGaXh0dXJlLT53ZWJWaWV3KSk7CisK
KyAgICAvLyBTaW11bGF0ZSBhIHBhc3RlIGtleWJvYXJkIHNlcXVlbmNlLgorICAgIEdka0V2ZW50
KiBldmVudCA9IGdka19ldmVudF9uZXcoR0RLX0tFWV9QUkVTUyk7CisgICAgZXZlbnQtPmtleS5r
ZXl2YWwgPSBnZGtfdW5pY29kZV90b19rZXl2YWwoJ3YnKTsKKyAgICBldmVudC0+a2V5LnN0YXRl
ID0gR0RLX0NPTlRST0xfTUFTSzsKKyAgICBldmVudC0+a2V5LndpbmRvdyA9IGd0a193aWRnZXRf
Z2V0X3dpbmRvdyhHVEtfV0lER0VUKGN1cnJlbnRGaXh0dXJlLT53ZWJWaWV3KSk7CisgICAgZ19v
YmplY3RfcmVmKGV2ZW50LT5rZXkud2luZG93KTsKKyNpZm5kZWYgR1RLX0FQSV9WRVJTSU9OXzIK
KyAgICBHZGtEZXZpY2VNYW5hZ2VyKiBtYW5hZ2VyID0gIGdka19kaXNwbGF5X2dldF9kZXZpY2Vf
bWFuYWdlcihnZGtfd2luZG93X2dldF9kaXNwbGF5KGV2ZW50LT5rZXkud2luZG93KSk7CisgICAg
Z2RrX2V2ZW50X3NldF9kZXZpY2UoZXZlbnQsIGdka19kZXZpY2VfbWFuYWdlcl9nZXRfY2xpZW50
X3BvaW50ZXIobWFuYWdlcikpOworI2VuZGlmCisKKyAgICBHZGtLZXltYXBLZXkqIGtleXM7Cisg
ICAgZ2ludCBuX2tleXM7CisgICAgaWYgKGdka19rZXltYXBfZ2V0X2VudHJpZXNfZm9yX2tleXZh
bChnZGtfa2V5bWFwX2dldF9kZWZhdWx0KCksIGV2ZW50LT5rZXkua2V5dmFsLCAma2V5cywgJm5f
a2V5cykpIHsKKyAgICAgICAgZXZlbnQtPmtleS5oYXJkd2FyZV9rZXljb2RlID0ga2V5c1swXS5r
ZXljb2RlOworICAgICAgICBnX2ZyZWUoa2V5cyk7CisgICAgfQorCisgICAgZ3RrX21haW5fZG9f
ZXZlbnQoZXZlbnQpOworICAgIGV2ZW50LT5rZXkudHlwZSA9IEdES19LRVlfUkVMRUFTRTsKKyAg
ICBndGtfbWFpbl9kb19ldmVudChldmVudCk7CisgICAgZ2RrX2V2ZW50X2ZyZWUoZXZlbnQpOwor
CisgICAgSlNTdHJpbmdSZWYgc2NyaXB0U3RyaW5nID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoImRvY3VtZW50LmJvZHkuaW5uZXJIVE1MOyIpOworICAgIEpTVmFsdWVSZWYgdmFsdWUg
PSBKU0V2YWx1YXRlU2NyaXB0KGNvbnRleHQsIHNjcmlwdFN0cmluZywgMCwgMCwgMCwgMCk7Cisg
ICAgSlNTdHJpbmdSZWxlYXNlKHNjcmlwdFN0cmluZyk7CisKKyAgICBnX2Fzc2VydChKU1ZhbHVl
SXNTdHJpbmcoY29udGV4dCwgdmFsdWUpKTsKKyAgICBKU1N0cmluZ1JlZiBhY3R1YWwgPSBKU1Zh
bHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIHZhbHVlLCBleGNlcHRpb24pOworICAgIGdfYXNzZXJ0
KCFleGNlcHRpb24gfHwgISpleGNlcHRpb24pOworICAgIGdfYXNzZXJ0KGN1cnJlbnRGaXh0dXJl
LT5pbmZvLT5leHBlY3RlZENvbnRlbnQpOworICAgIEpTU3RyaW5nUmVmIGV4cGVjdGVkID0gSlNT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoY3VycmVudEZpeHR1cmUtPmluZm8tPmV4cGVjdGVk
Q29udGVudCk7CisgICAgZ19hc3NlcnQoSlNTdHJpbmdJc0VxdWFsKGV4cGVjdGVkLCBhY3R1YWwp
KTsKKworICAgIEpTU3RyaW5nUmVsZWFzZShleHBlY3RlZCk7CisgICAgSlNTdHJpbmdSZWxlYXNl
KGFjdHVhbCk7CisgICAgZ19tYWluX2xvb3BfcXVpdChjdXJyZW50Rml4dHVyZS0+bG9vcCk7Cisg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgdm9p
ZCB3aW5kb3dfb2JqZWN0X2NsZWFyZWRfY2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcs
IFdlYktpdFdlYkZyYW1lKiB3ZWJfZnJhbWUsIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0LCBK
U09iamVjdFJlZiB3aW5kb3dfb2JqZWN0LCBncG9pbnRlciBkYXRhKQoreworICAgIEpTU3RyaW5n
UmVmIG5hbWUgPSBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicnVuVGVzdCIpOworICAg
IEpTT2JqZWN0UmVmIHRlc3RDb21wbGV0ZSA9IEpTT2JqZWN0TWFrZUZ1bmN0aW9uV2l0aENhbGxi
YWNrKGNvbnRleHQsIG5hbWUsIHJ1blBhc3RlVGVzdENhbGxiYWNrKTsKKyAgICBKU09iamVjdFNl
dFByb3BlcnR5KGNvbnRleHQsIHdpbmRvd19vYmplY3QsIG5hbWUsIHRlc3RDb21wbGV0ZSwga0pT
UHJvcGVydHlBdHRyaWJ1dGVOb25lLCAwKTsKKyAgICBKU1N0cmluZ1JlbGVhc2UobmFtZSk7Cit9
CisKK3N0YXRpYyB2b2lkIHBhc3RpbmdfdGVzdF9nZXRfZGF0YV9jYWxsYmFjayhHdGtDbGlwYm9h
cmQqIGNsaXBib2FyZCwgR3RrU2VsZWN0aW9uRGF0YSogc2VsZWN0aW9uX2RhdGEsIGd1aW50IGlu
Zm8sIGdwb2ludGVyIGRhdGEpCit7CisgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX3NldChzZWxlY3Rp
b25fZGF0YSwgZ2RrX2F0b21faW50ZXJuKCJ0ZXh0L2h0bWwiLCBGQUxTRSksIDgsIChjb25zdCBn
dWNoYXIqKSBkYXRhLCBzdHJsZW4oKGNoYXIqKWRhdGEpICsgMSk7Cit9CisKK3N0YXRpYyB2b2lk
IHBhc3RpbmdfdGVzdF9jbGVhcl9kYXRhX2NhbGxiYWNrKEd0a0NsaXBib2FyZCogY2xpcGJvYXJk
LCBncG9pbnRlciBkYXRhKQoreworICAgIGdfZnJlZShkYXRhKTsKK30KKworc3RhdGljIHZvaWQg
dGVzdF9wYXN0aW5nX21hcmt1cChDb3B5QW5kUGFzdGVGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rw
b2ludGVyIGRhdGEpCit7CisgICAgZml4dHVyZS0+aW5mbyA9IChUZXN0SW5mbyopZGF0YTsKKyAg
ICBjdXJyZW50Rml4dHVyZSA9IGZpeHR1cmU7CisKKyAgICBHdGtUYXJnZXRMaXN0KiB0YXJnZXRM
aXN0ID0gZ3RrX3RhcmdldF9saXN0X25ldygwLCAwKTsKKyAgICBndGtfdGFyZ2V0X2xpc3RfYWRk
KHRhcmdldExpc3QsIGdka19hdG9tX2ludGVybigidGV4dC9odG1sIiwgRkFMU0UpLCAwLCAwKTsK
KworICAgIGludCBudW1iZXJPZlRhcmdldHMgPSAxOworICAgIEd0a1RhcmdldEVudHJ5KiB0YXJn
ZXRUYWJsZSA9IGd0a190YXJnZXRfdGFibGVfbmV3X2Zyb21fbGlzdCh0YXJnZXRMaXN0LCAmbnVt
YmVyT2ZUYXJnZXRzKTsKKyAgICBndGtfY2xpcGJvYXJkX3NldF93aXRoX2RhdGEoZ3RrX2NsaXBi
b2FyZF9nZXQoR0RLX1NFTEVDVElPTl9DTElQQk9BUkQpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0YXJnZXRUYWJsZSwgbnVtYmVyT2ZUYXJnZXRzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwYXN0aW5nX3Rlc3RfZ2V0X2RhdGFfY2FsbGJhY2ssCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RpbmdfdGVzdF9jbGVhcl9kYXRhX2NhbGxiYWNr
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3N0cmR1cChmaXh0dXJlLT5pbmZv
LT5leHBlY3RlZENvbnRlbnQpKTsKKyAgICBndGtfdGFyZ2V0X2xpc3RfdW5yZWYodGFyZ2V0TGlz
dCk7CisgICAgZ3RrX3RhcmdldF90YWJsZV9mcmVlKHRhcmdldFRhYmxlLCBudW1iZXJPZlRhcmdl
dHMpOworCisgICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53aW5kb3csICJtYXAtZXZlbnQi
LAorICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhtYXBfZXZlbnRfY2IpLCBmaXh0dXJl
KTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJ3aW5kb3ctb2JqZWN0
LWNsZWFyZWQiLAorICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyh3aW5kb3dfb2JqZWN0
X2NsZWFyZWRfY2FsbGJhY2spLCBmaXh0dXJlKTsKKworICAgIGd0a193aWRnZXRfc2hvdyhmaXh0
dXJlLT53aW5kb3cpOworICAgIGd0a193aWRnZXRfc2hvdyhHVEtfV0lER0VUKGZpeHR1cmUtPndl
YlZpZXcpKTsKKyAgICBndGtfd2luZG93X3ByZXNlbnQoR1RLX1dJTkRPVyhmaXh0dXJlLT53aW5k
b3cpKTsKKworICAgIGdfbWFpbl9sb29wX3J1bihmaXh0dXJlLT5sb29wKTsKK30KKworCitpbnQg
bWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywg
JmFyZ3YsIE5VTEwpOworCisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy8iKTsKKyAgICBjb25zdCBjaGFyKiBzZWxlY3RlZF9zcGFuX2h0bWwgPSAiPGh0bWw+PGJv
ZHk+IgorICAgICAgICAiPHNwYW4gaWQ9XCJtYWluc3BhblwiPkFsbCB3b3JrIGFuZCBubyBwbGF5
IDxzcGFuPm1ha2UgSmFjayBhIGR1bGw8L3NwYW4+IGJveS48L3NwYW4+IgorICAgICAgICAiPHNj
cmlwdD5kb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5jb2xsYXBzZSgpO1xuIgorICAgICAgICAiZG9j
dW1lbnQuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0QWxsQ2hpbGRyZW4oZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ21haW5zcGFuJykpO1xuIgorICAgICAgICAiPC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4i
OworICAgIGNvbnN0IGNoYXIqIG5vX3NlbGVjdGlvbl9odG1sID0gIjxodG1sPjxib2R5PiIKKyAg
ICAgICAgIjxzcGFuIGlkPVwibWFpbnNwYW5cIj5BbGwgd29yayBhbmQgbm8gcGxheSA8c3Bhbj5t
YWtlIEphY2sgYSBkdWxsPC9zcGFuPiBib3k8L3NwYW4+IgorICAgICAgICAiPHNjcmlwdD5kb2N1
bWVudC5nZXRTZWxlY3Rpb24oKS5jb2xsYXBzZSgpO1xuIgorICAgICAgICAiPC9zY3JpcHQ+PC9i
b2R5PjwvaHRtbD4iOworCisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9jb3B5YW5kcGFzdGUvc2Vs
ZWN0aW9uIiwgQ29weUFuZFBhc3RlRml4dHVyZSwKKyAgICAgICAgICAgICAgIHRlc3RfaW5mb19u
ZXcoc2VsZWN0ZWRfc3Bhbl9odG1sLCAiQWxsIHdvcmsgYW5kIG5vIHBsYXkgbWFrZSBKYWNrIGEg
ZHVsbCBib3kuIiksCisgICAgICAgICAgICAgICBjb3B5X2FuZF9wYXN0ZV9maXh0dXJlX3NldHVw
LAorICAgICAgICAgICAgICAgdGVzdF9jb3B5X2FuZF9wYXN0ZSwKKyAgICAgICAgICAgICAgIGNv
cHlfYW5kX3Bhc3RlX2ZpeHR1cmVfdGVhcmRvd24pOworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQv
Y29weWFuZHBhc3RlL25vLXNlbGVjdGlvbiIsIENvcHlBbmRQYXN0ZUZpeHR1cmUsCisgICAgICAg
ICAgICAgICB0ZXN0X2luZm9fbmV3KG5vX3NlbGVjdGlvbl9odG1sLCAwKSwKKyAgICAgICAgICAg
ICAgIGNvcHlfYW5kX3Bhc3RlX2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0X2Nv
cHlfYW5kX3Bhc3RlLAorICAgICAgICAgICAgICAgY29weV9hbmRfcGFzdGVfZml4dHVyZV90ZWFy
ZG93bik7CisKKyAgICBjb25zdCBjaGFyKiBwYXN0ZV90ZXN0X2h0bWwgPSAiPGh0bWw+IgorICAg
ICAgICAiPGJvZHkgb25Mb2FkPVwiZG9jdW1lbnQuYm9keS5mb2N1cygpOyBydW5UZXN0KCk7XCIg
Y29udGVudEVkaXRhYmxlPVwidHJ1ZVwiPiIKKyAgICAgICAgIjwvYm9keT48L2h0bWw+IjsKKyAg
ICBnX3Rlc3RfYWRkKCIvd2Via2l0L2NvcHlhbmRwYXN0ZS9wYXN0ZS1tYXJrdXAiLCBDb3B5QW5k
UGFzdGVGaXh0dXJlLAorICAgICAgICAgICAgICAgdGVzdF9pbmZvX25ldyhwYXN0ZV90ZXN0X2h0
bWwsICJib2JieSIpLAorICAgICAgICAgICAgICAgY29weV9hbmRfcGFzdGVfZml4dHVyZV9zZXR1
cCwKKyAgICAgICAgICAgICAgIHRlc3RfcGFzdGluZ19tYXJrdXAsCisgICAgICAgICAgICAgICBj
b3B5X2FuZF9wYXN0ZV9maXh0dXJlX3RlYXJkb3duKTsKKworICAgIHJldHVybiBnX3Rlc3RfcnVu
KCk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90
ZXN0ZG9tZG9jdW1lbnQuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rl
c3Rkb21kb2N1bWVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjOTk3
ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0
ay90ZXN0ZG9tZG9jdW1lbnQuYwpAQCAtMCwwICsxLDQyOCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAidGVzdF91
dGlscy5oIgorCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Cisj
aW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKworI2RlZmlu
ZSBIVE1MX0RPQ1VNRU5UX1RJVExFICI8aHRtbD48aGVhZD48dGl0bGU+VGhpcyBpcyB0aGUgdGl0
bGU8L3RpdGxlPjwvaGVhZD48Ym9keT48L2JvZHk+PC9odG1sPiIKKyNkZWZpbmUgSFRNTF9ET0NV
TUVOVF9FTEVNRU5UUyAiPGh0bWw+PGJvZHk+PHVsPjxsaT4xPC9saT48bGk+MjwvbGk+PGxpPjM8
L2xpPjwvdWw+PC9ib2R5PjwvaHRtbD4iCisjZGVmaW5lIEhUTUxfRE9DVU1FTlRfRUxFTUVOVFNf
Q0xBU1MgIjxodG1sPjxib2R5PjxkaXYgY2xhc3M9XCJ0ZXN0XCI+PC9kaXY+PGRpdiBjbGFzcz1c
InN0cmFuZ2VcIj48L2Rpdj48ZGl2IGNsYXNzPVwidGVzdFwiPjwvZGl2PjwvYm9keT48L2h0bWw+
IgorI2RlZmluZSBIVE1MX0RPQ1VNRU5UX0VMRU1FTlRTX0lEICI8aHRtbD48Ym9keT48ZGl2IGlk
PVwidGVzdG9rXCI+PC9kaXY+PGRpdiBpZD1cInRlc3RiYWRcIj5maXJzdDwvZGl2PjxkaXYgaWQ9
XCJ0ZXN0YmFkXCI+c2Vjb25kPC9kaXY+PC9ib2R5PjwvaHRtbD4iCisjZGVmaW5lIEhUTUxfRE9D
VU1FTlRfTElOS1MgIjxodG1sPjxoZWFkPjx0aXRsZT5UaXRsZTwvdGl0bGU+PC9oZWFkPjxib2R5
PjxhIGhyZWY9XCJhYm91dDpibGFua1wiPmJsYW5rPC9hPjxhIGhyZWY9XCJodHRwOi8vd3d3Lmdv
b2dsZS5jb21cIj5nb29nbGU8L2E+PGEgaHJlZj1cImh0dHA6Ly93d3cud2Via2l0Lm9yZ1wiPndl
YmtpdDwvYT48L2JvZHk+PC9odG1sPiIKKyNkZWZpbmUgSFRNTF9ET0NVTUVOVF9JRlJBTUUgIjxo
dG1sPjxoZWFkPjx0aXRsZT5JRnJhbWU8L3RpdGxlPjwvaGVhZD48Ym9keT48aWZyYW1lIGlkPSdp
ZnJhbWUnPjwvaWZyYW1lPjxkaXYgaWQ9J3Rlc3QnPjwvZGl2PjwvYm9keT48L2h0bWw+IgorI2Rl
ZmluZSBIVE1MX0RPQ1VNRU5UX1RBQkxFICI8aHRtbD48Ym9keT48dGFibGUgaWQ9XCJ0YWJsZVwi
PjwvdGFibGU+PC9ib2R5PjwvaHRtbD4iCisjZGVmaW5lIEhUTUxfRE9DVU1FTlRfRVZBTFVBVEUg
IjxodG1sPjxoZWFkPjx0aXRsZT48L3RpdGxlPjwvaGVhZD48Ym9keT48ZGl2PkZpcnN0IGRpdjwv
ZGl2PjxkaXY+U2Vjb25kIGRpdjwvZGl2PjwvYm9keT48L2h0bWw+IgorCit0eXBlZGVmIHN0cnVj
dCB7CisgICAgR3RrV2lkZ2V0KiB3ZWJWaWV3OworICAgIEdNYWluTG9vcCogbG9vcDsKK30gRG9t
RG9jdW1lbnRGaXh0dXJlOworCitzdGF0aWMgZ2Jvb2xlYW4gZmluaXNoX2xvYWRpbmcoRG9tRG9j
dW1lbnRGaXh0dXJlKiBmaXh0dXJlKQoreworICAgIGlmIChnX21haW5fbG9vcF9pc19ydW5uaW5n
KGZpeHR1cmUtPmxvb3ApKQorICAgICAgICBnX21haW5fbG9vcF9xdWl0KGZpeHR1cmUtPmxvb3Ap
OworCisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZCBkb21fZG9jdW1lbnRfZml4
dHVyZV9zZXR1cChEb21Eb2N1bWVudEZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0
YSkKK3sKKyAgICBmaXh0dXJlLT5sb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwor
ICAgIGZpeHR1cmUtPndlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7CisgICAgZ19vYmpl
Y3RfcmVmX3NpbmsoZml4dHVyZS0+d2ViVmlldyk7CisKKyAgICBpZiAoZGF0YSAhPSBOVUxMKQor
ICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVXIChmaXh0
dXJlLT53ZWJWaWV3KSwgKGNvbnN0IGNoYXIqKSBkYXRhLCBOVUxMLCBOVUxMLCBOVUxMKTsKKwor
ICAgIGdfaWRsZV9hZGQoKEdTb3VyY2VGdW5jKWZpbmlzaF9sb2FkaW5nLCBmaXh0dXJlKTsKKyAg
ICBnX21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIGRvbV9k
b2N1bWVudF9maXh0dXJlX3RlYXJkb3duKERvbURvY3VtZW50Rml4dHVyZSogZml4dHVyZSwgZ2Nv
bnN0cG9pbnRlciBkYXRhKQoreworICAgIGlmIChmaXh0dXJlLT53ZWJWaWV3KQorICAgICAgICBn
X29iamVjdF91bnJlZihmaXh0dXJlLT53ZWJWaWV3KTsKKyAgICBnX21haW5fbG9vcF91bnJlZihm
aXh0dXJlLT5sb29wKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9kb21fZG9jdW1lbnRfdGl0bGUo
RG9tRG9jdW1lbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAg
Z19hc3NlcnQoZml4dHVyZSk7CisgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IChXZWJLaXRXZWJW
aWV3KilmaXh0dXJlLT53ZWJWaWV3OworICAgIGdfYXNzZXJ0KHZpZXcpOworICAgIFdlYktpdERP
TURvY3VtZW50KiBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50KHZp
ZXcpOworICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsKKyAgICBnY2hhciogdGl0bGUgPSB3ZWJraXRf
ZG9tX2RvY3VtZW50X2dldF90aXRsZShkb2N1bWVudCk7CisgICAgZ19hc3NlcnQodGl0bGUpOwor
ICAgIGdfYXNzZXJ0X2NtcHN0cih0aXRsZSwgPT0sICJUaGlzIGlzIHRoZSB0aXRsZSIpOworICAg
IGdfZnJlZSh0aXRsZSk7CisgICAgd2Via2l0X2RvbV9kb2N1bWVudF9zZXRfdGl0bGUoZG9jdW1l
bnQsICJUaGlzIGlzIHRoZSBzZWNvbmQgdGl0bGUiKTsKKyAgICB0aXRsZSA9IHdlYmtpdF9kb21f
ZG9jdW1lbnRfZ2V0X3RpdGxlKGRvY3VtZW50KTsKKyAgICBnX2Fzc2VydCh0aXRsZSk7CisgICAg
Z19hc3NlcnRfY21wc3RyKHRpdGxlLCA9PSwgIlRoaXMgaXMgdGhlIHNlY29uZCB0aXRsZSIpOwor
ICAgIGdfZnJlZSh0aXRsZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfZG9tX2RvY3VtZW50X2dl
dF9lbGVtZW50c19ieV90YWdfbmFtZShEb21Eb2N1bWVudEZpeHR1cmUqIGZpeHR1cmUsIGdjb25z
dHBvaW50ZXIgZGF0YSkKK3sKKyAgICBnX2Fzc2VydChmaXh0dXJlKTsKKyAgICBXZWJLaXRXZWJW
aWV3KiB2aWV3ID0gKFdlYktpdFdlYlZpZXcqKWZpeHR1cmUtPndlYlZpZXc7CisgICAgZ19hc3Nl
cnQodmlldyk7CisgICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50ID0gd2Via2l0X3dlYl92
aWV3X2dldF9kb21fZG9jdW1lbnQodmlldyk7CisgICAgZ19hc3NlcnQoZG9jdW1lbnQpOworICAg
IFdlYktpdERPTU5vZGVMaXN0KiBsaXN0ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVu
dHNfYnlfdGFnX25hbWUoZG9jdW1lbnQsICJsaSIpOworICAgIGdfYXNzZXJ0KGxpc3QpOworICAg
IGd1bG9uZyBsZW5ndGggPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QpOwor
ICAgIGdfYXNzZXJ0X2NtcGludChsZW5ndGgsID09LCAzKTsKKworICAgIGd1aW50IGk7CisKKyAg
ICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgV2ViS2l0RE9NTm9kZSog
aXRlbSA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdCwgaSk7CisgICAgICAgIGdfYXNz
ZXJ0KGl0ZW0pOworICAgICAgICBXZWJLaXRET01FbGVtZW50KiBlbGVtZW50ID0gKFdlYktpdERP
TUVsZW1lbnQqKWl0ZW07CisgICAgICAgIGdfYXNzZXJ0KGVsZW1lbnQpOworICAgICAgICBnX2Fz
c2VydF9jbXBzdHIod2Via2l0X2RvbV9lbGVtZW50X2dldF90YWdfbmFtZShlbGVtZW50KSwgPT0s
ICJMSSIpOworICAgICAgICBXZWJLaXRET01IVE1MRWxlbWVudCogaHRtbEVsZW1lbnQgPSAoV2Vi
S2l0RE9NSFRNTEVsZW1lbnQqKWVsZW1lbnQ7CisgICAgICAgIGNoYXIqIG4gPSBnX3N0cmR1cF9w
cmludGYoIiVkIiwgaSsxKTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9kb21faHRt
bF9lbGVtZW50X2dldF9pbm5lcl90ZXh0KGh0bWxFbGVtZW50KSwgPT0sIG4pOworICAgICAgICBn
X2ZyZWUobik7CisgICAgfQorCisgICAgZ19vYmplY3RfdW5yZWYobGlzdCk7Cit9CisKK3N0YXRp
YyB2b2lkIHRlc3RfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19ieV9jbGFzc19uYW1lKERvbURv
Y3VtZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGdfYXNz
ZXJ0KGZpeHR1cmUpOworICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSAoV2ViS2l0V2ViVmlldyop
Zml4dHVyZS0+d2ViVmlldzsKKyAgICBnX2Fzc2VydCh2aWV3KTsKKyAgICBXZWJLaXRET01Eb2N1
bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsK
KyAgICBnX2Fzc2VydChkb2N1bWVudCk7CisgICAgV2ViS2l0RE9NTm9kZUxpc3QqIGxpc3QgPSB3
ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19ieV9jbGFzc19uYW1lKGRvY3VtZW50LCAi
dGVzdCIpOworICAgIGdfYXNzZXJ0KGxpc3QpOworICAgIGd1bG9uZyBsZW5ndGggPSB3ZWJraXRf
ZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QpOworICAgIGdfYXNzZXJ0X2NtcGludChsZW5n
dGgsID09LCAyKTsKKworICAgIGd1aW50IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgV2ViS2l0RE9NTm9kZSogaXRlbSA9IHdlYmtpdF9kb21fbm9kZV9s
aXN0X2l0ZW0obGlzdCwgaSk7CisgICAgICAgIGdfYXNzZXJ0KGl0ZW0pOworICAgICAgICBXZWJL
aXRET01FbGVtZW50KiBlbGVtZW50ID0gKFdlYktpdERPTUVsZW1lbnQqKWl0ZW07CisgICAgICAg
IGdfYXNzZXJ0KGVsZW1lbnQpOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2RvbV9l
bGVtZW50X2dldF90YWdfbmFtZShlbGVtZW50KSwgPT0sICJESVYiKTsKKyAgICB9CisKKyAgICBn
X29iamVjdF91bnJlZihsaXN0KTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9kb21fZG9jdW1lbnRf
Z2V0X2VsZW1lbnRfYnlfaWQoRG9tRG9jdW1lbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2lu
dGVyIGRhdGEpCit7CisgICAgZ19hc3NlcnQoZml4dHVyZSk7CisgICAgV2ViS2l0V2ViVmlldyog
dmlldyA9IChXZWJLaXRXZWJWaWV3KilmaXh0dXJlLT53ZWJWaWV3OworICAgIGdfYXNzZXJ0KHZp
ZXcpOworICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmlld19n
ZXRfZG9tX2RvY3VtZW50KHZpZXcpOworICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsKKyAgICBXZWJL
aXRET01FbGVtZW50KiBlbGVtZW50ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudF9i
eV9pZChkb2N1bWVudCwgInRlc3RvayIpOworICAgIGdfYXNzZXJ0KGVsZW1lbnQpOworICAgIGVs
ZW1lbnQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50X2J5X2lkKGRvY3VtZW50LCAi
dGhpcy1pZC1kb2VzLW5vdC1leGlzdCIpOworICAgIGdfYXNzZXJ0KGVsZW1lbnQgPT0gMCk7Cisg
ICAgLyogVGhlIERPTSBzcGVjIHNheXMgdGhlIHJldHVybiB2YWx1ZSBpcyB1bmRlZmluZWQgd2hl
biB0aGVyZSdzCisgICAgICogbW9yZSB0aGFuIG9uZSBlbGVtZW50IHdpdGggdGhlIHNhbWUgaWQ7
IGluIG91ciBjYXNlIHRoZSBmaXJzdAorICAgICAqIG9uZSB3aWxsIGJlIHJldHVybmVkICovCisg
ICAgZWxlbWVudCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRfYnlfaWQoZG9jdW1l
bnQsICJ0ZXN0YmFkIik7CisgICAgZ19hc3NlcnQoZWxlbWVudCk7CisgICAgV2ViS2l0RE9NSFRN
TEVsZW1lbnQqIGh0bWxFbGVtZW50ID0gKFdlYktpdERPTUhUTUxFbGVtZW50KillbGVtZW50Owor
ICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfaW5uZXJfdGV4
dChodG1sRWxlbWVudCksID09LCAiZmlyc3QiKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9kb21f
ZG9jdW1lbnRfZ2V0X2xpbmtzKERvbURvY3VtZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9p
bnRlciBkYXRhKQoreworICAgIGdfYXNzZXJ0KGZpeHR1cmUpOworICAgIFdlYktpdFdlYlZpZXcq
IHZpZXcgPSAoV2ViS2l0V2ViVmlldyopZml4dHVyZS0+d2ViVmlldzsKKyAgICBnX2Fzc2VydCh2
aWV3KTsKKyAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKKyAgICBnX2Fzc2VydChkb2N1bWVudCk7CisgICAgV2Vi
S2l0RE9NSFRNTENvbGxlY3Rpb24gKmNvbGxlY3Rpb24gPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dl
dF9saW5rcyhkb2N1bWVudCk7CisgICAgZ19hc3NlcnQoY29sbGVjdGlvbik7CisgICAgZ3Vsb25n
IGxlbmd0aCA9IHdlYmtpdF9kb21faHRtbF9jb2xsZWN0aW9uX2dldF9sZW5ndGgoY29sbGVjdGlv
bik7CisgICAgZ19hc3NlcnRfY21waW50KGxlbmd0aCwgPT0sIDMpOworCisgICAgZ3VpbnQgaTsK
KworICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBzdGF0aWMgY29u
c3QgY2hhciogbmFtZXNbXSA9IHsgImJsYW5rIiwgImdvb2dsZSIsICJ3ZWJraXQiIH07CisgICAg
ICAgIHN0YXRpYyBjb25zdCBjaGFyKiB1cmlzW10gPSB7ICJhYm91dDpibGFuayIsICJodHRwOi8v
d3d3Lmdvb2dsZS5jb20vIiwgImh0dHA6Ly93d3cud2Via2l0Lm9yZy8iIH07CisgICAgICAgIFdl
YktpdERPTU5vZGUgKm5vZGUgPSB3ZWJraXRfZG9tX2h0bWxfY29sbGVjdGlvbl9pdGVtKGNvbGxl
Y3Rpb24sIGkpOworICAgICAgICBnX2Fzc2VydChub2RlKTsKKyAgICAgICAgV2ViS2l0RE9NRWxl
bWVudCogZWxlbWVudCA9IChXZWJLaXRET01FbGVtZW50Kilub2RlOworICAgICAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X2RvbV9lbGVtZW50X2dldF90YWdfbmFtZShlbGVtZW50KSwgPT0sICJB
Iik7CisgICAgICAgIFdlYktpdERPTUhUTUxFbGVtZW50ICpodG1sRWxlbWVudCA9IChXZWJLaXRE
T01IVE1MRWxlbWVudCopZWxlbWVudDsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9k
b21faHRtbF9lbGVtZW50X2dldF9pbm5lcl90ZXh0KGh0bWxFbGVtZW50KSwgPT0sIG5hbWVzW2ld
KTsKKyAgICAgICAgV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQgKmFuY2hvciA9IChXZWJLaXRE
T01IVE1MQW5jaG9yRWxlbWVudCopZWxlbWVudDsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdl
YmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfaHJlZihhbmNob3IpLCA9PSwgdXJpc1tp
XSk7CisgICAgfQorICAgIGdfb2JqZWN0X3VucmVmKGNvbGxlY3Rpb24pOworfQorCitzdGF0aWMg
dm9pZCB0ZXN0X2RvbV9kb2N1bWVudF9pbnNlcnRfcm93KERvbURvY3VtZW50Rml4dHVyZSogZml4
dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGdfYXNzZXJ0KGZpeHR1cmUpOworICAg
IFdlYktpdFdlYlZpZXcqIHZpZXcgPSAoV2ViS2l0V2ViVmlldyopZml4dHVyZS0+d2ViVmlldzsK
KyAgICBnX2Fzc2VydCh2aWV3KTsKKyAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQgPSB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKKyAgICBnX2Fzc2VydChXRUJL
SVRfRE9NX0lTX0RPQ1VNRU5UKGRvY3VtZW50KSk7CisgICAgV2ViS2l0RE9NRWxlbWVudCogdGFi
bGUgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50X2J5X2lkKGRvY3VtZW50LCAidGFi
bGUiKTsKKyAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVCh0YWJsZSkpOwor
ICAgIFdlYktpdERPTUhUTUxDb2xsZWN0aW9uKiByb3dzID0gd2Via2l0X2RvbV9odG1sX3RhYmxl
X2VsZW1lbnRfZ2V0X3Jvd3MoV0VCS0lUX0RPTV9IVE1MX1RBQkxFX0VMRU1FTlQodGFibGUpKTsK
KyAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfQ09MTEVDVElPTihyb3dzKSk7CisKKyAg
ICAvLyBUYWJsZSBpcyBpbml0aWFsbHkgZW1wdHkuCisgICAgZ19hc3NlcnRfY21waW50KHdlYmtp
dF9kb21faHRtbF9jb2xsZWN0aW9uX2dldF9sZW5ndGgocm93cyksID09LCAwKTsKKyAgICBXZWJL
aXRET01IVE1MRWxlbWVudCogcm93ID0gd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfaW5z
ZXJ0X3JvdyhXRUJLSVRfRE9NX0hUTUxfVEFCTEVfRUxFTUVOVCh0YWJsZSksIC0xLCBOVUxMKTsK
KyAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfUk9XX0VMRU1FTlQocm93KSk7
CisgICAgcm93cyA9IHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2dldF9yb3dzKFdFQktJ
VF9ET01fSFRNTF9UQUJMRV9FTEVNRU5UKHRhYmxlKSk7CisgICAgZ19hc3NlcnQoV0VCS0lUX0RP
TV9JU19IVE1MX0NPTExFQ1RJT04ocm93cykpOworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRf
ZG9tX2h0bWxfY29sbGVjdGlvbl9nZXRfbGVuZ3RoKHJvd3MpLCA9PSwgMSk7Cit9CisKK3N0YXRp
YyB2b2lkIHRlc3RfZG9tX2RvY3VtZW50X2V2YWx1YXRlKERvbURvY3VtZW50Rml4dHVyZSogZml4
dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGdfYXNzZXJ0KGZpeHR1cmUpOworICAg
IFdlYktpdFdlYlZpZXcqIHZpZXcgPSAoV2ViS2l0V2ViVmlldyopZml4dHVyZS0+d2ViVmlldzsK
KyAgICBnX2Fzc2VydCh2aWV3KTsKKyAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQgPSB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKKyAgICBnX2Fzc2VydChXRUJL
SVRfRE9NX0lTX0RPQ1VNRU5UKGRvY3VtZW50KSk7CisgICAgV2ViS2l0RE9NTm9kZUxpc3QqIGxp
c3QgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19ieV90YWdfbmFtZShkb2N1bWVu
dCwgImh0bWwiKTsKKyAgICBnX2Fzc2VydChsaXN0KTsKKyAgICBndWxvbmcgbGVuZ3RoID0gd2Vi
a2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChsaXN0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
bGVuZ3RoLCA9PSwgMSk7CisgICAgV2ViS2l0RE9NTm9kZSogaHRtbCA9IHdlYmtpdF9kb21fbm9k
ZV9saXN0X2l0ZW0obGlzdCwgMCk7CisgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19OT0RFKGh0
bWwpKTsKKworICAgIFdlYktpdERPTVhQYXRoUmVzdWx0KiByZXN1bHQgPSB3ZWJraXRfZG9tX2Rv
Y3VtZW50X2V2YWx1YXRlKGRvY3VtZW50LCAiLy9kaXYiLCBodG1sLCBOVUxMLCAwLCBOVUxMLCBO
VUxMKTsKKyAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX1hQQVRIX1JFU1VMVChyZXN1bHQpKTsK
KworICAgIGludCBpID0gMDsKKyAgICBXZWJLaXRET01Ob2RlKiBub2RlOworICAgIHdoaWxlICgg
KG5vZGUgPSB3ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9pdGVyYXRlX25leHQocmVzdWx0LCBOVUxM
KSkgIT0gTlVMTCkgeworICAgICAgICBnX2Fzc2VydChub2RlKTsKKyAgICAgICAgV2ViS2l0RE9N
RWxlbWVudCogZWxlbWVudCA9IChXZWJLaXRET01FbGVtZW50Kilub2RlOworICAgICAgICBnX2Fz
c2VydF9jbXBzdHIod2Via2l0X2RvbV9lbGVtZW50X2dldF90YWdfbmFtZShlbGVtZW50KSwgPT0s
ICJESVYiKTsKKyAgICAgICAgaSsrOworICAgIH0KKyAgICBnX2Fzc2VydF9jbXBpbnQoaSwgPT0s
IDIpOworCisgICAgZ19vYmplY3RfdW5yZWYobGlzdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYWtf
bm90aWZ5KGdwb2ludGVyIGRhdGEsIEdPYmplY3QqIHpvbWJpZSkKK3sKKyAgICBndWludCogY291
bnQgPSAoZ3VpbnQqKWRhdGE7CisgICAgKCpjb3VudCkrKzsKK30KKworc3RhdGljIHZvaWQgdGVz
dF9kb21fZG9jdW1lbnRfZ2FyYmFnZV9jb2xsZWN0aW9uKERvbURvY3VtZW50Rml4dHVyZSogZml4
dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGd1aW50IGNvdW50ID0gMDsKKyAgICBn
X2Fzc2VydChmaXh0dXJlKTsKKyAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gKFdlYktpdFdlYlZp
ZXcqKWZpeHR1cmUtPndlYlZpZXc7CisgICAgZ19hc3NlcnQodmlldyk7CisgICAgV2ViS2l0RE9N
RG9jdW1lbnQqIGRvY3VtZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQodmll
dyk7CisgICAgZ19hc3NlcnQoZG9jdW1lbnQpOworICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JK
RUNUKGRvY3VtZW50KSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOworICAgIFdl
YktpdERPTUhUTUxIZWFkRWxlbWVudCogaGVhZCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2hl
YWQoZG9jdW1lbnQpOworICAgIGdfYXNzZXJ0KGhlYWQpOworICAgIGdfb2JqZWN0X3dlYWtfcmVm
KEdfT0JKRUNUKGhlYWQpLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7CisgICAg
V2ViS2l0RE9NSFRNTEVsZW1lbnQqIGJvZHkgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9ib2R5
KGRvY3VtZW50KTsKKyAgICBnX2Fzc2VydChib2R5KTsKKyAgICBnX29iamVjdF93ZWFrX3JlZihH
X09CSkVDVChib2R5KSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOworICAgIFdl
YktpdERPTUhUTUxDb2xsZWN0aW9uICpjb2xsZWN0aW9uID0gd2Via2l0X2RvbV9kb2N1bWVudF9n
ZXRfbGlua3MoZG9jdW1lbnQpOworICAgIGdfYXNzZXJ0KGNvbGxlY3Rpb24pOworICAgIGdfb2Jq
ZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGNvbGxlY3Rpb24pLCAoR1dlYWtOb3RpZnkpd2Vha19ub3Rp
ZnksICZjb3VudCk7CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoV0VCS0lUX1dF
Ql9WSUVXKHZpZXcpLCBIVE1MX0RPQ1VNRU5UX0xJTktTLCBOVUxMLCBOVUxMLCBOVUxMKTsKKwor
ICAgIHdoaWxlIChnX21haW5fY29udGV4dF9wZW5kaW5nKE5VTEwpKQorICAgICAgICBnX21haW5f
Y29udGV4dF9pdGVyYXRpb24oTlVMTCwgRkFMU0UpOworCisgICAgZ19hc3NlcnRfY21wdWludChj
b3VudCwgPT0sIDMpOworCisgICAgZ19vYmplY3RfdW5yZWYoY29sbGVjdGlvbik7CisgICAgZ19h
c3NlcnRfY21wdWludChjb3VudCwgPT0sIDQpOworCisgICAgY291bnQgPSAwOworCisgICAgZG9j
dW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKKyAgICBnX2Fz
c2VydChkb2N1bWVudCk7CisgICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1QoZG9jdW1lbnQp
LCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7CisgICAgaGVhZCA9IHdlYmtpdF9k
b21fZG9jdW1lbnRfZ2V0X2hlYWQoZG9jdW1lbnQpOworICAgIGdfYXNzZXJ0KGhlYWQpOworICAg
IGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGhlYWQpLCAoR1dlYWtOb3RpZnkpd2Vha19ub3Rp
ZnksICZjb3VudCk7CisgICAgYm9keSA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2JvZHkoZG9j
dW1lbnQpOworICAgIGdfYXNzZXJ0KGJvZHkpOworICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JK
RUNUKGJvZHkpLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7CisgICAgY29sbGVj
dGlvbiA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2xpbmtzKGRvY3VtZW50KTsKKyAgICBnX2Fz
c2VydChjb2xsZWN0aW9uKTsKKyAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVDVChjb2xsZWN0
aW9uKSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOworICAgIC8qIEFzayB0d2lj
ZSBmb3IgdGhlIHNhbWUgb2JqZWN0ICovCisgICAgV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24qIGNv
bGxlY3Rpb24yID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfbGlua3MoZG9jdW1lbnQpOworICAg
IGdfYXNzZXJ0KGNvbGxlY3Rpb24yKTsKKyAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVDVChj
b2xsZWN0aW9uMiksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKKworICAgIGdf
b2JqZWN0X3VucmVmKGRvY3VtZW50KTsKKyAgICBnX29iamVjdF91bnJlZihoZWFkKTsKKyAgICBn
X29iamVjdF91bnJlZihib2R5KTsKKyAgICBnX29iamVjdF91bnJlZihjb2xsZWN0aW9uKTsKKyAg
ICBnX29iamVjdF91bnJlZihjb2xsZWN0aW9uMik7CisKKyAgICBnX2Fzc2VydF9jbXB1aW50KGNv
dW50LCA9PSwgNSk7CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoV0VCS0lUX1dF
Ql9WSUVXKHZpZXcpLCBIVE1MX0RPQ1VNRU5UX0lGUkFNRSwgTlVMTCwgTlVMTCwgTlVMTCk7CisK
KyAgICB3aGlsZSAoZ19tYWluX2NvbnRleHRfcGVuZGluZyhOVUxMKSkKKyAgICAgICAgZ19tYWlu
X2NvbnRleHRfaXRlcmF0aW9uKE5VTEwsIEZBTFNFKTsKKworICAgIGNvdW50ID0gMDsKKworICAg
IGRvY3VtZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQodmlldyk7CisgICAg
V2ViS2l0RE9NRWxlbWVudCogZGl2ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudF9i
eV9pZChkb2N1bWVudCwgInRlc3QiKTsKKyAgICBnX2Fzc2VydChkaXYpOworICAgIGdfb2JqZWN0
X3dlYWtfcmVmKEdfT0JKRUNUKGRpdiksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50
KTsKKyAgICBXZWJLaXRET01FbGVtZW50KiBpZnJhbWUgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dl
dF9lbGVtZW50X2J5X2lkKGRvY3VtZW50LCAiaWZyYW1lIik7CisgICAgZ19hc3NlcnQoaWZyYW1l
KTsKKworICAgIHdlYmtpdF9kb21fZWxlbWVudF9zZXRfYXR0cmlidXRlKGlmcmFtZSwgInNyYyIs
ICJkYXRhOjxodG1sPjxoZWFkPjwvaGVhZD48L2h0bWw+IiwgTlVMTCk7CisKKyAgICB3aGlsZSAo
Z19tYWluX2NvbnRleHRfcGVuZGluZyhOVUxMKSkKKyAgICAgICAgZ19tYWluX2NvbnRleHRfaXRl
cmF0aW9uKE5VTEwsIEZBTFNFKTsKKworICAgIFdlYktpdERPTURvY3VtZW50KiBpZnJhbWVEb2N1
bWVudCA9IHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfY29udGVudF9kb2N1bWVu
dChXRUJLSVRfRE9NX0hUTUxfSUZSQU1FX0VMRU1FTlQoaWZyYW1lKSk7CisgICAgZ19hc3NlcnQo
aWZyYW1lRG9jdW1lbnQpOworICAgIGhlYWQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9oZWFk
KGlmcmFtZURvY3VtZW50KTsKKyAgICBnX2Fzc2VydChoZWFkKTsKKyAgICBnX29iamVjdF93ZWFr
X3JlZihHX09CSkVDVChoZWFkKSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOwor
CisgICAgd2Via2l0X2RvbV9lbGVtZW50X3NldF9hdHRyaWJ1dGUoaWZyYW1lLCAic3JjIiwgImFi
b3V0OmJsYW5rIiwgTlVMTCk7CisKKyAgICB3aGlsZSAoZ19tYWluX2NvbnRleHRfcGVuZGluZyhO
VUxMKSkKKyAgICAgICAgZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uKE5VTEwsIEZBTFNFKTsKKwor
ICAgIGdfYXNzZXJ0X2NtcHVpbnQoY291bnQsID09LCAxKTsKKworICAgIHdlYmtpdF93ZWJfdmll
d19sb2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcodmlldyksIEhUTUxfRE9DVU1FTlRfTElOS1Ms
IE5VTEwsIE5VTEwsIE5VTEwpOworCisgICAgd2hpbGUgKGdfbWFpbl9jb250ZXh0X3BlbmRpbmco
TlVMTCkpCisgICAgICAgIGdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbihOVUxMLCBGQUxTRSk7CisK
KyAgICBnX2Fzc2VydF9jbXB1aW50KGNvdW50LCA9PSwgMik7CisKKyAgICBjb3VudCA9IDA7CisK
KyAgICBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50KHZpZXcpOwor
ICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsKKyAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVDVChk
b2N1bWVudCksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKKyAgICAvKiBBc2sg
dHdpY2UgZm9yIHRoZSBEb2N1bWVudCAqLworICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1bWVu
dDIgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKKyAgICBnX2Fzc2Vy
dChkb2N1bWVudDIpOworICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGRvY3VtZW50Miks
IChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKKyAgICBoZWFkID0gd2Via2l0X2Rv
bV9kb2N1bWVudF9nZXRfaGVhZChkb2N1bWVudCk7CisgICAgZ19hc3NlcnQoaGVhZCk7CisgICAg
Z19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1QoaGVhZCksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlm
eSwgJmNvdW50KTsKKyAgICBib2R5ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfYm9keShkb2N1
bWVudCk7CisgICAgZ19hc3NlcnQoYm9keSk7CisgICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpF
Q1QoYm9keSksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKKyAgICBjb2xsZWN0
aW9uID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfbGlua3MoZG9jdW1lbnQpOworICAgIGdfYXNz
ZXJ0KGNvbGxlY3Rpb24pOworICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGNvbGxlY3Rp
b24pLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7CisKKyAgICBndGtfd2lkZ2V0
X2Rlc3Ryb3koZml4dHVyZS0+d2ViVmlldyk7CisgICAgZml4dHVyZS0+d2ViVmlldyA9IE5VTEw7
CisKKyAgICBnX2Fzc2VydF9jbXB1aW50KGNvdW50LCA9PSwgNCk7CisKKyAgICBnX29iamVjdF91
bnJlZihjb2xsZWN0aW9uKTsKKworICAgIGdfYXNzZXJ0X2NtcHVpbnQoY291bnQsID09LCA1KTsK
K30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIGd0a190ZXN0X2lu
aXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKKworICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvIik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2RvbWRvY3VtZW50
L3Rlc3RfdGl0bGUiLAorICAgICAgICAgICAgICAgRG9tRG9jdW1lbnRGaXh0dXJlLCBIVE1MX0RP
Q1VNRU5UX1RJVExFLAorICAgICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfc2V0dXAs
CisgICAgICAgICAgICAgICB0ZXN0X2RvbV9kb2N1bWVudF90aXRsZSwKKyAgICAgICAgICAgICAg
IGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKTsKKworICAgIGdfdGVzdF9hZGQoIi93ZWJr
aXQvZG9tZG9jdW1lbnQvdGVzdF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWUiLAorICAgICAgICAg
ICAgICAgRG9tRG9jdW1lbnRGaXh0dXJlLCBIVE1MX0RPQ1VNRU5UX0VMRU1FTlRTLAorICAgICAg
ICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0
X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWUsCisgICAgICAgICAgICAgICBk
b21fZG9jdW1lbnRfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0
L2RvbWRvY3VtZW50L3Rlc3RfZ2V0X2VsZW1lbnRzX2J5X2NsYXNzX25hbWUiLAorICAgICAgICAg
ICAgICAgRG9tRG9jdW1lbnRGaXh0dXJlLCBIVE1MX0RPQ1VNRU5UX0VMRU1FTlRTX0NMQVNTLAor
ICAgICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAg
ICB0ZXN0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfY2xhc3NfbmFtZSwKKyAgICAgICAg
ICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKTsKKworICAgIGdfdGVzdF9hZGQo
Ii93ZWJraXQvZG9tZG9jdW1lbnQvdGVzdF9nZXRfZWxlbWVudF9ieV9pZCIsCisgICAgICAgICAg
ICAgICBEb21Eb2N1bWVudEZpeHR1cmUsIEhUTUxfRE9DVU1FTlRfRUxFTUVOVFNfSUQsCisgICAg
ICAgICAgICAgICBkb21fZG9jdW1lbnRfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRl
c3RfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50X2J5X2lkLAorICAgICAgICAgICAgICAgZG9tX2Rv
Y3VtZW50X2ZpeHR1cmVfdGVhcmRvd24pOworCisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9kb21k
b2N1bWVudC90ZXN0X2dldF9saW5rcyIsCisgICAgICAgICAgICAgICBEb21Eb2N1bWVudEZpeHR1
cmUsIEhUTUxfRE9DVU1FTlRfTElOS1MsCisgICAgICAgICAgICAgICBkb21fZG9jdW1lbnRfZml4
dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3RfZG9tX2RvY3VtZW50X2dldF9saW5rcywK
KyAgICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKTsKKworICAgIGdf
dGVzdF9hZGQoIi93ZWJraXQvZG9tZG9jdW1lbnQvdGVzdF90YWJsZV9pbnNlcnRfcm93IiwKKyAg
ICAgICAgICAgICAgIERvbURvY3VtZW50Rml4dHVyZSwgSFRNTF9ET0NVTUVOVF9UQUJMRSwKKyAg
ICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAg
dGVzdF9kb21fZG9jdW1lbnRfaW5zZXJ0X3JvdywKKyAgICAgICAgICAgICAgIGRvbV9kb2N1bWVu
dF9maXh0dXJlX3RlYXJkb3duKTsKKworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvZG9tZG9jdW1l
bnQvdGVzdF9kb2N1bWVudF9ldmFsdWF0ZSIsCisgICAgICAgICAgICAgICBEb21Eb2N1bWVudEZp
eHR1cmUsIEhUTUxfRE9DVU1FTlRfRVZBTFVBVEUsCisgICAgICAgICAgICAgICBkb21fZG9jdW1l
bnRfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3RfZG9tX2RvY3VtZW50X2V2YWx1
YXRlLAorICAgICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfdGVhcmRvd24pOworCisg
ICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9kb21kb2N1bWVudC90ZXN0X2dhcmJhZ2VfY29sbGVjdGlv
biIsCisgICAgICAgICAgICAgICBEb21Eb2N1bWVudEZpeHR1cmUsIEhUTUxfRE9DVU1FTlRfTElO
S1MsCisgICAgICAgICAgICAgICBkb21fZG9jdW1lbnRfZml4dHVyZV9zZXR1cCwKKyAgICAgICAg
ICAgICAgIHRlc3RfZG9tX2RvY3VtZW50X2dhcmJhZ2VfY29sbGVjdGlvbiwKKyAgICAgICAgICAg
ICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKTsKKworICAgIHJldHVybiBnX3Rlc3Rf
cnVuKCk7Cit9CisKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
R3RrL3Rlc3Rkb21kb213aW5kb3cuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
R3RrL3Rlc3Rkb21kb213aW5kb3cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4xNGZjZDE4Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRHdGsvdGVzdGRvbWRvbXdpbmRvdy5jCkBAIC0wLDAgKzEsMjU4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJ0ZXN0X3V0aWxzLmgiCisKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z2xpYi9nc3Rk
aW8uaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgor
CisjZGVmaW5lIEhUTUxfRE9DVU1FTlQgIjxodG1sPjxoZWFkPjx0aXRsZT48L3RpdGxlPjwvaGVh
ZD48c3R5bGUgdHlwZT0ndGV4dC9jc3MnPiN0ZXN0IHsgZm9udC1zaXplOiAxNnB4OyB9PC9zdHls
ZT48Ym9keT48cCBpZD0ndGVzdCc+dGVzdDwvcD48L2JvZHk+PC9odG1sPiIKKwordHlwZWRlZiBz
dHJ1Y3QgeworICAgIEd0a1dpZGdldCogd2ViVmlldzsKKyAgICBHdGtXaWRnZXQqIHdpbmRvdzsK
KyAgICBXZWJLaXRET01ET01XaW5kb3cqIGRvbVdpbmRvdzsKKyAgICBHTWFpbkxvb3AqIGxvb3A7
CisKKyAgICBnYm9vbGVhbiBsb2FkZWQ7CisgICAgZ2Jvb2xlYW4gY2xpY2tlZDsKKyAgICBnY29u
c3Rwb2ludGVyIGRhdGE7Cit9IERvbURvbXZpZXdGaXh0dXJlOworCitzdGF0aWMgZ2Jvb2xlYW4g
ZmluaXNoX2xvYWRpbmcoRG9tRG9tdmlld0ZpeHR1cmUqIGZpeHR1cmUpCit7CisgICAgaWYgKGdf
bWFpbl9sb29wX2lzX3J1bm5pbmcoZml4dHVyZS0+bG9vcCkpCisgICAgICAgIGdfbWFpbl9sb29w
X3F1aXQoZml4dHVyZS0+bG9vcCk7CisKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2
b2lkIGRvbV9kb212aWV3X2ZpeHR1cmVfc2V0dXAoRG9tRG9tdmlld0ZpeHR1cmUqIGZpeHR1cmUs
IGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBmaXh0dXJlLT5sb29wID0gZ19tYWluX2xvb3Bf
bmV3KE5VTEwsIFRSVUUpOworICAgIGZpeHR1cmUtPndpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdU
S19XSU5ET1dfVE9QTEVWRUwpOworICAgIGZpeHR1cmUtPndlYlZpZXcgPSB3ZWJraXRfd2ViX3Zp
ZXdfbmV3KCk7CisgICAgZml4dHVyZS0+ZGF0YSA9IGRhdGE7CisKKyAgICBndGtfY29udGFpbmVy
X2FkZChHVEtfQ09OVEFJTkVSKGZpeHR1cmUtPndpbmRvdyksIEdUS19XSURHRVQoZml4dHVyZS0+
d2ViVmlldykpOworfQorCitzdGF0aWMgdm9pZCBkb21fZG9tdmlld19maXh0dXJlX3RlYXJkb3du
KERvbURvbXZpZXdGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAg
Z3RrX3dpZGdldF9kZXN0cm95KGZpeHR1cmUtPndpbmRvdyk7CisgICAgZ19tYWluX2xvb3BfdW5y
ZWYoZml4dHVyZS0+bG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIGRvbV9kb21fd2luZG93X2ZpeHR1
cmVfc2V0dXAoRG9tRG9tdmlld0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkK
K3sKKyAgICBmaXh0dXJlLT5sb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworICAg
IGZpeHR1cmUtPndlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7CisgICAgZ19vYmplY3Rf
cmVmX3NpbmsoZml4dHVyZS0+d2ViVmlldyk7CisKKyAgICBpZiAoZGF0YSAhPSBOVUxMKQorICAg
ICAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVXIChmaXh0dXJl
LT53ZWJWaWV3KSwgKGNvbnN0IGNoYXIqKSBkYXRhLCBOVUxMLCBOVUxMLCBOVUxMKTsKKworICAg
IGdfaWRsZV9hZGQoKEdTb3VyY2VGdW5jKWZpbmlzaF9sb2FkaW5nLCBmaXh0dXJlKTsKKyAgICBn
X21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIGRvbV9kb21f
d2luZG93X2ZpeHR1cmVfdGVhcmRvd24oRG9tRG9tdmlld0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25z
dHBvaW50ZXIgZGF0YSkKK3sKKyAgICBpZiAoZml4dHVyZS0+d2ViVmlldykKKyAgICAgICAgZ19v
YmplY3RfdW5yZWYoZml4dHVyZS0+d2ViVmlldyk7CisgICAgZ19tYWluX2xvb3BfdW5yZWYoZml4
dHVyZS0+bG9vcCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBsb2FkZWRDYWxsYmFjayhXZWJLaXRE
T01ET01XaW5kb3cqIHZpZXcsIFdlYktpdERPTUV2ZW50KiBldmVudCwgRG9tRG9tdmlld0ZpeHR1
cmUqIGZpeHR1cmUpCit7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+bG9hZGVkID09IEZBTFNFKTsK
KyAgICBmaXh0dXJlLT5sb2FkZWQgPSBUUlVFOworCisgICAgcmV0dXJuIEZBTFNFOworfQorCitz
dGF0aWMgZ2Jvb2xlYW4gY2xpY2tlZENhbGxiYWNrKFdlYktpdERPTURPTVdpbmRvdyogdmlldywg
V2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBEb21Eb212aWV3Rml4dHVyZSogZml4dHVyZSkKK3sKKyAg
ICBXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0OworICAgIGd1c2hvcnQgcGhhc2U7CisKKyAg
ICBnX2Fzc2VydChldmVudCk7CisgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19FVkVOVChldmVu
dCkpOworCisgICAgLy8gV2Ugc2hvdWxkIGNhdGNoIHRoaXMgaW4gdGhlIGJ1YmJsaW5nIHVwIHBo
YXNlLCBzaW5jZSB3ZSBhcmUgY29ubmVjdGluZyB0byB0aGUgdG9wbGV2ZWwgb2JqZWN0CisgICAg
cGhhc2UgPSB3ZWJraXRfZG9tX2V2ZW50X2dldF9ldmVudF9waGFzZShldmVudCk7CisgICAgZ19h
c3NlcnRfY21waW50KHBoYXNlLCA9PSwgMyk7CisKKyAgICB0YXJnZXQgPSB3ZWJraXRfZG9tX2V2
ZW50X2dldF9jdXJyZW50X3RhcmdldChldmVudCk7CisgICAgZ19hc3NlcnQodGFyZ2V0ID09IFdF
QktJVF9ET01fRVZFTlRfVEFSR0VUKHZpZXcpKTsKKworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmNs
aWNrZWQgPT0gRkFMU0UpOworICAgIGZpeHR1cmUtPmNsaWNrZWQgPSBUUlVFOworCisgICAgZmlu
aXNoX2xvYWRpbmcoZml4dHVyZSk7CisKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK2dib29sZWFu
IG1hcF9ldmVudF9jYihHdGtXaWRnZXQgKndpZGdldCwgR2RrRXZlbnQqIGV2ZW50LCBEb21Eb212
aWV3Rml4dHVyZSogZml4dHVyZSkKK3sKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmco
V0VCS0lUX1dFQl9WSUVXIChmaXh0dXJlLT53ZWJWaWV3KSwgKGNvbnN0IGNoYXIqKWZpeHR1cmUt
PmRhdGEsIE5VTEwsIE5VTEwsIE5VTEwpOworCisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0
aWMgdm9pZCBsb2FkX2V2ZW50X2NhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEdQYXJh
bVNwZWMqIHNwZWMsIERvbURvbXZpZXdGaXh0dXJlKiBmaXh0dXJlKQoreworICAgIFdlYktpdExv
YWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJWaWV3
KTsKKyAgICBpZiAoc3RhdHVzID09IFdFQktJVF9MT0FEX0ZJTklTSEVEKSB7CisgICAgICAgIHdl
YmtpdF9kb21fZXZlbnRfdGFyZ2V0X2FkZF9ldmVudF9saXN0ZW5lcihXRUJLSVRfRE9NX0VWRU5U
X1RBUkdFVChmaXh0dXJlLT5kb21XaW5kb3cpLCAiY2xpY2siLCBHX0NBTExCQUNLKGNsaWNrZWRD
YWxsYmFjayksIGZhbHNlLCBmaXh0dXJlKTsKKworICAgICAgICBnX2Fzc2VydChmaXh0dXJlLT5j
bGlja2VkID09IEZBTFNFKTsKKyAgICAgICAgZ3RrX3Rlc3Rfd2lkZ2V0X2NsaWNrKEdUS19XSURH
RVQoZml4dHVyZS0+d2ViVmlldyksIDEsIDApOworICAgIH0KKworfQorCitzdGF0aWMgdm9pZCB0
ZXN0X2RvbV9kb212aWV3X3NpZ25hbHMoRG9tRG9tdmlld0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25z
dHBvaW50ZXIgZGF0YSkKK3sKKyAgICBnX2Fzc2VydChmaXh0dXJlKTsKKyAgICBXZWJLaXRXZWJW
aWV3KiB2aWV3ID0gKFdlYktpdFdlYlZpZXcqKWZpeHR1cmUtPndlYlZpZXc7CisgICAgZ19hc3Nl
cnQodmlldyk7CisgICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50ID0gd2Via2l0X3dlYl92
aWV3X2dldF9kb21fZG9jdW1lbnQodmlldyk7CisgICAgZ19hc3NlcnQoZG9jdW1lbnQpOworICAg
IFdlYktpdERPTURPTVdpbmRvdyogZG9tV2luZG93ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRf
ZGVmYXVsdF92aWV3KGRvY3VtZW50KTsKKyAgICBnX2Fzc2VydChkb21XaW5kb3cpOworCisgICAg
Zml4dHVyZS0+ZG9tV2luZG93ID0gZG9tV2luZG93OworCisgICAgd2Via2l0X2RvbV9ldmVudF90
YXJnZXRfYWRkX2V2ZW50X2xpc3RlbmVyKFdFQktJVF9ET01fRVZFTlRfVEFSR0VUKGZpeHR1cmUt
PmRvbVdpbmRvdyksICJsb2FkIiwgR19DQUxMQkFDSyhsb2FkZWRDYWxsYmFjayksIGZhbHNlLCBm
aXh0dXJlKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndpbmRvdywgIm1hcC1ldmVu
dCIsIEdfQ0FMTEJBQ0sobWFwX2V2ZW50X2NiKSwgZml4dHVyZSk7CisgICAgZ19zaWduYWxfY29u
bmVjdChmaXh0dXJlLT53ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0so
bG9hZF9ldmVudF9jYWxsYmFjayksIGZpeHR1cmUpOworCisgICAgZ3RrX3dpZGdldF9zaG93X2Fs
bChmaXh0dXJlLT53aW5kb3cpOworICAgIGd0a193aW5kb3dfcHJlc2VudChHVEtfV0lORE9XKGZp
eHR1cmUtPndpbmRvdykpOworCisgICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1cmUtPmxvb3ApOwor
CisgICAgZ19hc3NlcnQoZml4dHVyZS0+bG9hZGVkKTsKKyAgICBnX2Fzc2VydChmaXh0dXJlLT5j
bGlja2VkKTsKK30KKworc3RhdGljIGdib29sZWFuCitjbGlja2VkX2NiKFdlYktpdERPTUV2ZW50
VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgRG9tRG9tdmlld0ZpeHR1cmUq
IGZpeHR1cmUpCit7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+Y2xpY2tlZCA9PSBGQUxTRSk7Cisg
ICAgZml4dHVyZS0+Y2xpY2tlZCA9IFRSVUU7CisgICAgZmluaXNoX2xvYWRpbmcoZml4dHVyZSk7
CisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZCBsb2FkX3N0YXR1c19jYWxsYmFj
ayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHUGFyYW1TcGVjKiBzcGVjLCBEb21Eb212aWV3Rml4
dHVyZSogZml4dHVyZSkKK3sKKyAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93
ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMod2ViVmlldyk7CisgICAgaWYgKHN0YXR1cyA9PSBXRUJL
SVRfTE9BRF9GSU5JU0hFRCkgeworICAgICAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQ7
CisgICAgICAgIFdlYktpdERPTURPTVdpbmRvdyogZG9tV2luZG93OworICAgICAgICBXZWJLaXRE
T01FbGVtZW50KiBlbGVtZW50OworICAgICAgICBXZWJLaXRET01FdmVudCogZXZlbnQ7CisgICAg
ICAgIGdsb25nIGNsaWVudFgsIGNsaWVudFk7CisKKyAgICAgICAgZG9jdW1lbnQgPSB3ZWJraXRf
d2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudChXRUJLSVRfV0VCX1ZJRVcoZml4dHVyZS0+d2ViVmll
dykpOworICAgICAgICBnX2Fzc2VydChkb2N1bWVudCk7CisgICAgICAgIGRvbVdpbmRvdyA9IHdl
YmtpdF9kb21fZG9jdW1lbnRfZ2V0X2RlZmF1bHRfdmlldyhkb2N1bWVudCk7CisgICAgICAgIGdf
YXNzZXJ0KGRvbVdpbmRvdyk7CisgICAgICAgIGZpeHR1cmUtPmRvbVdpbmRvdyA9IGRvbVdpbmRv
dzsKKworICAgICAgICBlbGVtZW50ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudF9i
eV9pZChkb2N1bWVudCwgInRlc3QiKTsKKyAgICAgICAgZ19hc3NlcnQoZWxlbWVudCk7CisgICAg
ICAgIGV2ZW50ID0gd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZXZlbnQoZG9jdW1lbnQsICJN
b3VzZUV2ZW50IiwgTlVMTCk7CisgICAgICAgIGdfYXNzZXJ0KGV2ZW50KTsKKyAgICAgICAgZ19h
c3NlcnQoV0VCS0lUX0RPTV9JU19FVkVOVChldmVudCkpOworICAgICAgICBnX2Fzc2VydChXRUJL
SVRfRE9NX0lTX01PVVNFX0VWRU5UKGV2ZW50KSk7CisgICAgICAgIGNsaWVudFggPSB3ZWJraXRf
ZG9tX2VsZW1lbnRfZ2V0X2NsaWVudF9sZWZ0KGVsZW1lbnQpOworICAgICAgICBjbGllbnRZID0g
d2Via2l0X2RvbV9lbGVtZW50X2dldF9jbGllbnRfdG9wKGVsZW1lbnQpOworICAgICAgICB3ZWJr
aXRfZG9tX21vdXNlX2V2ZW50X2luaXRfbW91c2VfZXZlbnQoV0VCS0lUX0RPTV9NT1VTRV9FVkVO
VChldmVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiY2xpY2siLCBUUlVFLCBUUlVFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZml4dHVyZS0+ZG9tV2luZG93LCAwLCAwLCAwLCBjbGllbnRYLCBjbGll
bnRZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFM
U0UsIEZBTFNFLCBGQUxTRSwgRkFMU0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAxLCBXRUJLSVRfRE9NX0VWRU5UX1RBUkdFVChlbGVtZW50KSk7Cisg
ICAgICAgIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2FkZF9ldmVudF9saXN0ZW5lcihXRUJLSVRf
RE9NX0VWRU5UX1RBUkdFVChlbGVtZW50KSwgImNsaWNrIiwgR19DQUxMQkFDSyhjbGlja2VkX2Ni
KSwgZmFsc2UsIGZpeHR1cmUpOworICAgICAgICBnX2Fzc2VydChmaXh0dXJlLT5jbGlja2VkID09
IEZBTFNFKTsKKyAgICAgICAgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfZGlzcGF0Y2hfZXZlbnQo
V0VCS0lUX0RPTV9FVkVOVF9UQVJHRVQoZWxlbWVudCksIGV2ZW50LCBOVUxMKTsKKyAgICB9CisK
K30KKworc3RhdGljIHZvaWQgdGVzdF9kb21fZG9tdmlld19kaXNwYXRjaF9ldmVudChEb21Eb212
aWV3Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGdfc2lnbmFs
X2Nvbm5lY3QoZml4dHVyZS0+d2luZG93LCAibWFwLWV2ZW50IiwgR19DQUxMQkFDSyhtYXBfZXZl
bnRfY2IpLCBmaXh0dXJlKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcs
ICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhsb2FkX3N0YXR1c19jYWxsYmFjayks
IGZpeHR1cmUpOworCisgICAgZ3RrX3dpZGdldF9zaG93X2FsbChmaXh0dXJlLT53aW5kb3cpOwor
ICAgIGd0a193aW5kb3dfcHJlc2VudChHVEtfV0lORE9XKGZpeHR1cmUtPndpbmRvdykpOworCisg
ICAgZ19tYWluX2xvb3BfcnVuIChmaXh0dXJlLT5sb29wKTsKKyAgICBnX2Fzc2VydChmaXh0dXJl
LT5jbGlja2VkKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9kb21fZG9tX3dpbmRvd19nZXRfY29t
cHV0ZWRfc3R5bGUoRG9tRG9tdmlld0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0
YSkKK3sKKyAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X2RvbV9kb2N1bWVudChXRUJLSVRfV0VCX1ZJRVcoZml4dHVyZS0+d2ViVmlldykpOworICAg
IGdfYXNzZXJ0KGRvY3VtZW50KTsKKyAgICBXZWJLaXRET01ET01XaW5kb3cqIGRvbVdpbmRvdyA9
IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2RlZmF1bHRfdmlldyhkb2N1bWVudCk7CisgICAgZ19h
c3NlcnQoZG9tV2luZG93KTsKKworICAgIFdlYktpdERPTUVsZW1lbnQqICBlbGVtZW50ID0gd2Vi
a2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudF9ieV9pZChkb2N1bWVudCwgInRlc3QiKTsKKyAg
ICBnX2Fzc2VydChlbGVtZW50KTsKKyAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0VMRU1FTlQo
ZWxlbWVudCkpOworICAgIFdlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24qIGNzc1N0eWxlID0g
d2Via2l0X2RvbV9kb21fd2luZG93X2dldF9jb21wdXRlZF9zdHlsZShkb21XaW5kb3csIGVsZW1l
bnQsIE5VTEwpOworICAgIGdjaGFyKiBmb250U2l6ZSA9IHdlYmtpdF9kb21fY3NzX3N0eWxlX2Rl
Y2xhcmF0aW9uX2dldF9wcm9wZXJ0eV92YWx1ZShjc3NTdHlsZSwgImZvbnQtc2l6ZSIpOworICAg
IGdfYXNzZXJ0X2NtcHN0cihmb250U2l6ZSwgPT0sICIxNnB4Iik7Cit9CisKK2ludCBtYWluKGlu
dCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwg
TlVMTCk7CisKKyAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIp
OworCisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9kb21kb212aWV3L3NpZ25hbHMiLAorICAgICAg
ICAgICAgICAgRG9tRG9tdmlld0ZpeHR1cmUsIEhUTUxfRE9DVU1FTlQsCisgICAgICAgICAgICAg
ICBkb21fZG9tdmlld19maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF9kb21fZG9t
dmlld19zaWduYWxzLAorICAgICAgICAgICAgICAgZG9tX2RvbXZpZXdfZml4dHVyZV90ZWFyZG93
bik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2RvbWRvbXZpZXcvZGlzcGF0Y2hfZXZlbnQi
LAorICAgICAgICAgICAgICAgRG9tRG9tdmlld0ZpeHR1cmUsIEhUTUxfRE9DVU1FTlQsCisgICAg
ICAgICAgICAgICBkb21fZG9tdmlld19maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVz
dF9kb21fZG9tdmlld19kaXNwYXRjaF9ldmVudCwKKyAgICAgICAgICAgICAgIGRvbV9kb212aWV3
X2ZpeHR1cmVfdGVhcmRvd24pOworCisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9kb21kb213aW5k
b3cvZ2V0X2NvbXB1dGVkX3N0eWxlIiwKKyAgICAgICAgICAgICAgIERvbURvbXZpZXdGaXh0dXJl
LCBIVE1MX0RPQ1VNRU5ULAorICAgICAgICAgICAgICAgZG9tX2RvbV93aW5kb3dfZml4dHVyZV9z
ZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3RfZG9tX2RvbV93aW5kb3dfZ2V0X2NvbXB1dGVkX3N0
eWxlLAorICAgICAgICAgICAgICAgZG9tX2RvbV93aW5kb3dfZml4dHVyZV90ZWFyZG93bik7CisK
KyAgICByZXR1cm4gZ190ZXN0X3J1bigpOworfQorCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0ZG9tbm9kZS5jIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRHdGsvdGVzdGRvbW5vZGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5lZDRiY2JkCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRHdGsvdGVzdGRvbW5vZGUuYwpAQCAtMCwwICsxLDIxOSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAidGVzdF91dGlscy5oIgorCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGdsaWIv
Z3N0ZGlvLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQu
aD4KKworI2RlZmluZSBIVE1MX0RPQ1VNRU5UX0hJRVJBUkNIWV9OQVZJR0FUSU9OICI8aHRtbD48
aGVhZD48dGl0bGU+VGhpcyBpcyB0aGUgdGl0bGU8L3RpdGxlPjwvaGVhZD48Ym9keT48cD4xPC9w
PjxwPjI8L3A+PHA+MzwvcD48L2JvZHk+PC9odG1sPiIKKyNkZWZpbmUgSFRNTF9ET0NVTUVOVF9O
T0RFX0lOU0VSVElPTiAiPGh0bWw+PGJvZHk+PC9ib2R5PjwvaHRtbD4iCisKK3R5cGVkZWYgc3Ry
dWN0IHsKKyAgICBHdGtXaWRnZXQqIHdlYlZpZXc7CisgICAgR01haW5Mb29wKiBsb29wOworfSBE
b21Ob2RlRml4dHVyZTsKKworc3RhdGljIGdib29sZWFuIGZpbmlzaF9sb2FkaW5nKERvbU5vZGVG
aXh0dXJlKiBmaXh0dXJlKQoreworICAgIGlmIChnX21haW5fbG9vcF9pc19ydW5uaW5nKGZpeHR1
cmUtPmxvb3ApKQorICAgICAgICBnX21haW5fbG9vcF9xdWl0KGZpeHR1cmUtPmxvb3ApOworCisg
ICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZCBkb21fbm9kZV9maXh0dXJlX3NldHVw
KERvbU5vZGVGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgZml4
dHVyZS0+bG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKKyAgICBmaXh0dXJlLT53
ZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKGZp
eHR1cmUtPndlYlZpZXcpOworCisgICAgaWYgKGRhdGEgIT0gTlVMTCkKKyAgICAgICAgd2Via2l0
X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklFVyhmaXh0dXJlLT53ZWJWaWV3KSwg
KGNvbnN0IGNoYXIqKWRhdGEsIE5VTEwsIE5VTEwsIE5VTEwpOworCisgICAgZ19pZGxlX2FkZCgo
R1NvdXJjZUZ1bmMpZmluaXNoX2xvYWRpbmcsIGZpeHR1cmUpOworICAgIGdfbWFpbl9sb29wX3J1
bihmaXh0dXJlLT5sb29wKTsKK30KKworc3RhdGljIHZvaWQgZG9tX25vZGVfZml4dHVyZV90ZWFy
ZG93bihEb21Ob2RlRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAg
IGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPndlYlZpZXcpOworICAgIGdfbWFpbl9sb29wX3VucmVm
KGZpeHR1cmUtPmxvb3ApOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2RvbV9ub2RlX2hpZXJhcmNo
eV9uYXZpZ2F0aW9uKERvbU5vZGVGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEp
Cit7CisgICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50OworICAgIFdlYktpdERPTUhUTUxI
ZWFkRWxlbWVudCogaGVhZDsKKyAgICBXZWJLaXRET01IVE1MQm9keUVsZW1lbnQqIGJvZHk7Cisg
ICAgV2ViS2l0RE9NTm9kZUxpc3QqIGxpc3Q7CisgICAgV2ViS2l0RE9NTm9kZSogcHRyOworICAg
IGd1bG9uZyBpLCBsZW5ndGg7CisKKyAgICBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRf
ZG9tX2RvY3VtZW50KFdFQktJVF9XRUJfVklFVyhmaXh0dXJlLT53ZWJWaWV3KSk7CisgICAgZ19h
c3NlcnQoZG9jdW1lbnQpOworICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfRE9DVU1FTlQoZG9j
dW1lbnQpKTsKKyAgICBoZWFkID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfaGVhZChkb2N1bWVu
dCk7CisgICAgZ19hc3NlcnQoaGVhZCk7CisgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1M
X0hFQURfRUxFTUVOVChoZWFkKSk7CisKKyAgICAvKiBUaXRsZSwgaGVhZCdzIGNoaWxkICovCisg
ICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2hhc19jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05P
REUoaGVhZCkpKTsKKyAgICBsaXN0ID0gd2Via2l0X2RvbV9ub2RlX2dldF9jaGlsZF9ub2RlcyhX
RUJLSVRfRE9NX05PREUoaGVhZCkpOworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfZG9tX25v
ZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QpLCA9PSwgMSk7CisgICAgcHRyID0gd2Via2l0X2RvbV9u
b2RlX2xpc3RfaXRlbShsaXN0LCAwKTsKKyAgICBnX2Fzc2VydChwdHIpOworICAgIGdfYXNzZXJ0
KFdFQktJVF9ET01fSVNfSFRNTF9USVRMRV9FTEVNRU5UKHB0cikpOworICAgIGdfb2JqZWN0X3Vu
cmVmKGxpc3QpOworCisgICAgLyogQm9keSwgSGVhZCBzaWJsaW5nICovCisgICAgcHRyID0gd2Vi
a2l0X2RvbV9ub2RlX2dldF9uZXh0X3NpYmxpbmcoV0VCS0lUX0RPTV9OT0RFKGhlYWQpKTsKKyAg
ICBnX2Fzc2VydChwdHIpOworICAgIGJvZHkgPSBXRUJLSVRfRE9NX0hUTUxfQk9EWV9FTEVNRU5U
KHB0cik7CisgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0JPRFlfRUxFTUVOVChib2R5
KSk7CisKKyAgICAvKiBUaGVyZSBpcyBubyB0aGlyZCBzaWJsaW5nICovCisgICAgcHRyID0gd2Vi
a2l0X2RvbV9ub2RlX2dldF9uZXh0X3NpYmxpbmcocHRyKTsKKyAgICBnX2Fzc2VydChwdHIgPT0g
TlVMTCk7CisKKyAgICAvKiBCb2R5J3MgcHJldmlvdXMgc2libGluZyBpcyBIZWFkICovCisgICAg
cHRyID0gd2Via2l0X2RvbV9ub2RlX2dldF9wcmV2aW91c19zaWJsaW5nKFdFQktJVF9ET01fTk9E
RShib2R5KSk7CisgICAgZ19hc3NlcnQocHRyKTsKKyAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lT
X0hUTUxfSEVBRF9FTEVNRU5UKHB0cikpOworCisgICAgLyogQm9keSBoYXMgMyBjaGlsZHJlbiAq
LworICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9oYXNfY2hpbGRfbm9kZXMoV0VCS0lUX0RP
TV9OT0RFKGJvZHkpKSk7CisgICAgbGlzdCA9IHdlYmtpdF9kb21fbm9kZV9nZXRfY2hpbGRfbm9k
ZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKTsKKyAgICBsZW5ndGggPSB3ZWJraXRfZG9tX25vZGVf
bGlzdF9nZXRfbGVuZ3RoKGxpc3QpOworICAgIGdfYXNzZXJ0X2NtcGludChsZW5ndGgsID09LCAz
KTsKKworICAgIC8qIFRoZSB0aHJlZSBvZiB0aGVtIGFyZSBQIHRhZ3MgKi8KKyAgICBmb3IgKGkg
PSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgcHRyID0gd2Via2l0X2RvbV9ub2RlX2xp
c3RfaXRlbShsaXN0LCBpKTsKKyAgICAgICAgZ19hc3NlcnQocHRyKTsKKyAgICAgICAgZ19hc3Nl
cnQoV0VCS0lUX0RPTV9JU19IVE1MX1BBUkFHUkFQSF9FTEVNRU5UKHB0cikpOworICAgIH0KKwor
ICAgIC8qIEdvIGJhY2t3YXJkcyAqLworICAgIGZvciAoaSA9IDA7IHB0cjsgcHRyID0gd2Via2l0
X2RvbV9ub2RlX2dldF9wcmV2aW91c19zaWJsaW5nKHB0ciksIGkrKykKKyAgICAgICAgLyogTm90
aGluZyAqLzsKKworICAgIGdfYXNzZXJ0X2NtcGludChpLCA9PSwgMyk7CisgICAgZ19vYmplY3Rf
dW5yZWYobGlzdCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfZG9tX25vZGVfaW5zZXJ0aW9uKERv
bU5vZGVGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgV2ViS2l0
RE9NRG9jdW1lbnQqIGRvY3VtZW50OworICAgIFdlYktpdERPTUhUTUxFbGVtZW50KiBib2R5Owor
ICAgIFdlYktpdERPTUVsZW1lbnQqIHAsICpkaXY7CisgICAgV2ViS2l0RE9NTm9kZUxpc3QqIGxp
c3Q7CisgICAgV2ViS2l0RE9NTm9kZSogbm9kZTsKKworICAgIGRvY3VtZW50ID0gd2Via2l0X3dl
Yl92aWV3X2dldF9kb21fZG9jdW1lbnQoV0VCS0lUX1dFQl9WSUVXKGZpeHR1cmUtPndlYlZpZXcp
KTsKKyAgICBnX2Fzc2VydChkb2N1bWVudCk7CisgICAgYm9keSA9IHdlYmtpdF9kb21fZG9jdW1l
bnRfZ2V0X2JvZHkoZG9jdW1lbnQpOworICAgIGdfYXNzZXJ0KGJvZHkpOworICAgIGdfYXNzZXJ0
KFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKGJvZHkpKTsKKworICAgIC8qIEJvZHkgc2hvdWxk
bid0IGhhdmUgYW55IGNoaWxkcmVuIGF0IHRoaXMgcG9pbnQgKi8KKyAgICBnX2Fzc2VydCh3ZWJr
aXRfZG9tX25vZGVfaGFzX2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSkgPT0gRkFM
U0UpOworCisgICAgLyogSW5zZXJ0IG9uZSBQIGVsZW1lbnQgKi8KKyAgICBwID0gd2Via2l0X2Rv
bV9kb2N1bWVudF9jcmVhdGVfZWxlbWVudChkb2N1bWVudCwgIlAiLCBOVUxMKTsKKyAgICB3ZWJr
aXRfZG9tX25vZGVfYXBwZW5kX2NoaWxkKFdFQktJVF9ET01fTk9ERShib2R5KSwgV0VCS0lUX0RP
TV9OT0RFKHApLCBOVUxMKTsKKworICAgIC8qIE5vdyBpdCBzaG91bGQgaGF2ZSBvbmUsIHRoZSBz
YW1lIHRoYXQgd2UgaW5zZXJ0ZWQgKi8KKyAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaGFz
X2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSkpOworICAgIGxpc3QgPSB3ZWJraXRf
ZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSk7CisgICAgZ19h
c3NlcnRfY21waW50KHdlYmtpdF9kb21fbm9kZV9saXN0X2dldF9sZW5ndGgobGlzdCksID09LCAx
KTsKKyAgICBub2RlID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0LCAwKTsKKyAgICBn
X2Fzc2VydChub2RlKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaXNfc2FtZV9ub2Rl
KFdFQktJVF9ET01fTk9ERShwKSwgbm9kZSkpOworICAgIGdfb2JqZWN0X3VucmVmKGxpc3QpOwor
CisgICAgLyogUmVwbGFjZSB0aGUgUCB0YWcgd2l0aCBhIERJViB0YWcgKi8KKyAgICBkaXYgPSB3
ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9lbGVtZW50KGRvY3VtZW50LCAiRElWIiwgTlVMTCk7
CisgICAgd2Via2l0X2RvbV9ub2RlX3JlcGxhY2VfY2hpbGQoV0VCS0lUX0RPTV9OT0RFKGJvZHkp
LCBXRUJLSVRfRE9NX05PREUoZGl2KSwgV0VCS0lUX0RPTV9OT0RFKHApLCBOVUxMKTsKKyAgICBn
X2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaGFzX2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShi
b2R5KSkpOworICAgIGxpc3QgPSB3ZWJraXRfZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVzKFdFQktJ
VF9ET01fTk9ERShib2R5KSk7CisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9kb21fbm9kZV9s
aXN0X2dldF9sZW5ndGgobGlzdCksID09LCAxKTsKKyAgICBub2RlID0gd2Via2l0X2RvbV9ub2Rl
X2xpc3RfaXRlbShsaXN0LCAwKTsKKyAgICBnX2Fzc2VydChub2RlKTsKKyAgICBnX2Fzc2VydCh3
ZWJraXRfZG9tX25vZGVfaXNfc2FtZV9ub2RlKFdFQktJVF9ET01fTk9ERShkaXYpLCBub2RlKSk7
CisgICAgZ19vYmplY3RfdW5yZWYobGlzdCk7CisKKyAgICAvKiBOb3cgcmVtb3ZlIHRoZSB0YWcg
Ki8KKyAgICB3ZWJraXRfZG9tX25vZGVfcmVtb3ZlX2NoaWxkKFdFQktJVF9ET01fTk9ERShib2R5
KSwgbm9kZSwgTlVMTCk7CisgICAgbGlzdCA9IHdlYmtpdF9kb21fbm9kZV9nZXRfY2hpbGRfbm9k
ZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X2Rv
bV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChsaXN0KSwgPT0sIDApOworICAgIGdfb2JqZWN0X3VucmVm
KGxpc3QpOworCisgICAgLyogVGVzdCBpbnNlcnRfYmVmb3JlICovCisKKyAgICAvKiBJZiByZWZD
aGlsZCBpcyBudWxsLCBpbnNlcnQgbmV3Q2hpbGQgYXMgbGFzdCBlbGVtZW50IG9mIHBhcmVudCAq
LworICAgIGRpdiA9IHdlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2VsZW1lbnQoZG9jdW1lbnQs
ICJESVYiLCBOVUxMKTsKKyAgICB3ZWJraXRfZG9tX25vZGVfaW5zZXJ0X2JlZm9yZShXRUJLSVRf
RE9NX05PREUoYm9keSksIFdFQktJVF9ET01fTk9ERShkaXYpLCBOVUxMLCBOVUxMKTsKKyAgICBn
X2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaGFzX2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShi
b2R5KSkpOworICAgIGxpc3QgPSB3ZWJraXRfZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVzKFdFQktJ
VF9ET01fTk9ERShib2R5KSk7CisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9kb21fbm9kZV9s
aXN0X2dldF9sZW5ndGgobGlzdCksID09LCAxKTsKKyAgICBub2RlID0gd2Via2l0X2RvbV9ub2Rl
X2xpc3RfaXRlbShsaXN0LCAwKTsKKyAgICBnX2Fzc2VydChub2RlKTsKKyAgICBnX2Fzc2VydCh3
ZWJraXRfZG9tX25vZGVfaXNfc2FtZV9ub2RlKFdFQktJVF9ET01fTk9ERShkaXYpLCBub2RlKSk7
CisgICAgZ19vYmplY3RfdW5yZWYobGlzdCk7CisKKyAgICAvKiBOb3cgaW5zZXJ0IGEgJ3AnIGJl
Zm9yZSAnZGl2JyAqLworICAgIHAgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9lbGVtZW50
KGRvY3VtZW50LCAiUCIsIE5VTEwpOworICAgIHdlYmtpdF9kb21fbm9kZV9pbnNlcnRfYmVmb3Jl
KFdFQktJVF9ET01fTk9ERShib2R5KSwgV0VCS0lUX0RPTV9OT0RFKHApLCBXRUJLSVRfRE9NX05P
REUoZGl2KSwgTlVMTCk7CisgICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2hhc19jaGlsZF9u
b2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpKTsKKyAgICBsaXN0ID0gd2Via2l0X2RvbV9ub2Rl
X2dldF9jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpOworICAgIGdfYXNzZXJ0X2Nt
cGludCh3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QpLCA9PSwgMik7CisgICAg
bm9kZSA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdCwgMCk7CisgICAgZ19hc3NlcnQo
bm9kZSk7CisgICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2lzX3NhbWVfbm9kZShXRUJLSVRf
RE9NX05PREUocCksIG5vZGUpKTsKKyAgICBub2RlID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRl
bShsaXN0LCAxKTsKKyAgICBnX2Fzc2VydChub2RlKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfZG9t
X25vZGVfaXNfc2FtZV9ub2RlKFdFQktJVF9ET01fTk9ERShkaXYpLCBub2RlKSk7CisgICAgZ19v
YmplY3RfdW5yZWYobGlzdCk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikK
K3sKKyAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7CisKKyAgICBnX3Rlc3Rf
YnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOworCisgICAgZ190ZXN0X2FkZCgi
L3dlYmtpdC9kb21ub2RlL3Rlc3RfaGllcmFyY2h5X25hdmlnYXRpb24iLAorICAgICAgICAgICAg
ICAgRG9tTm9kZUZpeHR1cmUsIEhUTUxfRE9DVU1FTlRfSElFUkFSQ0hZX05BVklHQVRJT04sCisg
ICAgICAgICAgICAgICBkb21fbm9kZV9maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVz
dF9kb21fbm9kZV9oaWVyYXJjaHlfbmF2aWdhdGlvbiwKKyAgICAgICAgICAgICAgIGRvbV9ub2Rl
X2ZpeHR1cmVfdGVhcmRvd24pOworCisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9kb21ub2RlL3Rl
c3RfaW5zZXJ0aW9uIiwKKyAgICAgICAgICAgICAgIERvbU5vZGVGaXh0dXJlLCBIVE1MX0RPQ1VN
RU5UX05PREVfSU5TRVJUSU9OLAorICAgICAgICAgICAgICAgZG9tX25vZGVfZml4dHVyZV9zZXR1
cCwKKyAgICAgICAgICAgICAgIHRlc3RfZG9tX25vZGVfaW5zZXJ0aW9uLAorICAgICAgICAgICAg
ICAgZG9tX25vZGVfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICByZXR1cm4gZ190ZXN0X3J1bigp
OworfQorCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90
ZXN0ZG93bmxvYWQuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3Rk
b3dubG9hZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ZThkZWQKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0
ZG93bmxvYWQuYwpAQCAtMCwwICsxLDMyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBD
aHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkB0d290b2FzdHMuZGU+CisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxn
bGliL2dzdGRpby5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKworR01haW5Mb29wKiBs
b29wOworY2hhciogdGVtcG9yYXJ5RmlsZW5hbWUgPSBOVUxMOworV2ViS2l0RG93bmxvYWQqIHRo
ZURvd25sb2FkID0gTlVMTDsKKworc3RhdGljIHZvaWQKK3Rlc3Rfd2Via2l0X2Rvd25sb2FkX2Ny
ZWF0ZSh2b2lkKQoreworICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0OworICAgIFdl
YktpdERvd25sb2FkKiBkb3dubG9hZDsKKyAgICBjb25zdCBnY2hhciogdXJpID0gImh0dHA6Ly9l
eGFtcGxlLmNvbSI7CisgICAgZ2NoYXIqIHRtcERpcjsKKworICAgIHJlcXVlc3QgPSB3ZWJraXRf
bmV0d29ya19yZXF1ZXN0X25ldyh1cmkpOworICAgIGRvd25sb2FkID0gd2Via2l0X2Rvd25sb2Fk
X25ldyhyZXF1ZXN0KTsKKyAgICBnX29iamVjdF91bnJlZihyZXF1ZXN0KTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X2Rvd25sb2FkX2dldF91cmkoZG93bmxvYWQpLCA9PSwgdXJpKTsKKyAg
ICBnX2Fzc2VydCh3ZWJraXRfZG93bmxvYWRfZ2V0X25ldHdvcmtfcmVxdWVzdChkb3dubG9hZCkg
PT0gcmVxdWVzdCk7CisgICAgZ19hc3NlcnQoZ19zdHJyc3RyKHVyaSwgd2Via2l0X2Rvd25sb2Fk
X2dldF9zdWdnZXN0ZWRfZmlsZW5hbWUoZG93bmxvYWQpKSk7CisgICAgZ19hc3NlcnQod2Via2l0
X2Rvd25sb2FkX2dldF9zdGF0dXMoZG93bmxvYWQpID09IFdFQktJVF9ET1dOTE9BRF9TVEFUVVNf
Q1JFQVRFRCk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9kb3dubG9hZF9nZXRfdG90YWxfc2l6ZShk
b3dubG9hZCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG93bmxvYWRfZ2V0X2N1cnJlbnRfc2l6
ZShkb3dubG9hZCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG93bmxvYWRfZ2V0X3Byb2dyZXNz
KGRvd25sb2FkKSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9kb3dubG9hZF9nZXRfZWxhcHNlZF90
aW1lKGRvd25sb2FkKSk7CisgICAgdG1wRGlyID0gZ19maWxlbmFtZV90b191cmkoZ19nZXRfdG1w
X2RpcigpLCBOVUxMLCBOVUxMKTsKKyAgICB3ZWJraXRfZG93bmxvYWRfc2V0X2Rlc3RpbmF0aW9u
X3VyaShkb3dubG9hZCwgdG1wRGlyKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodG1wRGlyLCA9PSwg
d2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbl91cmkoZG93bmxvYWQpKTs7CisgICAgZ19m
cmVlKHRtcERpcik7CisgICAgZ19vYmplY3RfdW5yZWYoZG93bmxvYWQpOworfQorCitzdGF0aWMg
Z2Jvb2xlYW4KK25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX3JlcXVlc3RlZF9jYihXZWJLaXRX
ZWJWaWV3KiB3ZWJfdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXZWJLaXRXZWJGcmFtZSogd2ViX2ZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFdlYk5hdmlnYXRpb25BY3Rpb24qIGFj
dGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRXZWJQ
b2xpY3lEZWNpc2lvbiogZGVjaXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICB3ZWJraXRfd2ViX3BvbGljeV9kZWNpc2lv
bl9kb3dubG9hZChkZWNpc2lvbik7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lk
Citub3RpZnlfc3RhdHVzX2NiKEdPYmplY3QqIG9iamVjdCwgR1BhcmFtU3BlYyogcHNwZWMsIGdw
b2ludGVyIGRhdGEpCit7CisgICAgV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkID0gV0VCS0lUX0RP
V05MT0FEKG9iamVjdCk7CisgICAgc3dpdGNoICh3ZWJraXRfZG93bmxvYWRfZ2V0X3N0YXR1cyhk
b3dubG9hZCkpIHsKKyAgICBjYXNlIFdFQktJVF9ET1dOTE9BRF9TVEFUVVNfRklOSVNIRUQ6Cisg
ICAgY2FzZSBXRUJLSVRfRE9XTkxPQURfU1RBVFVTX0VSUk9SOgorICAgICAgICBnX21haW5fbG9v
cF9xdWl0KGxvb3ApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9ET1dOTE9BRF9T
VEFUVVNfQ0FOQ0VMTEVEOgorICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRp
YyBnYm9vbGVhbgorc2V0X2ZpbGVuYW1lKGdjaGFyKiBmaWxlbmFtZSkKK3sKKyAgICBnY2hhciAq
dXJpID0gZ19maWxlbmFtZV90b191cmkoZmlsZW5hbWUsIE5VTEwsIE5VTEwpOworCisgICAgd2Vi
a2l0X2Rvd25sb2FkX3NldF9kZXN0aW5hdGlvbl91cmkodGhlRG93bmxvYWQsIHVyaSk7CisgICAg
Z19mcmVlKHVyaSk7CisKKyAgICB3ZWJraXRfZG93bmxvYWRfc3RhcnQodGhlRG93bmxvYWQpOwor
ICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQKK2hhbmRsZV9kb3dubG9hZF9yZXF1
ZXN0ZWRfY2IoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnYm9vbGVhbiogYmVlblRoZXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnYm9vbGVhbiBhc3luY2gpCit7CisgICAgdGhlRG93bmxvYWQgPSBkb3dubG9hZDsKKyAgICAq
YmVlblRoZXJlID0gVFJVRTsKKworICAgIGlmICh0ZW1wb3JhcnlGaWxlbmFtZSkgeworICAgICAg
ICBpZiAoYXN5bmNoKSB7CisgICAgICAgICAgICBnX2lkbGVfYWRkKChHU291cmNlRnVuYylzZXRf
ZmlsZW5hbWUsIHRlbXBvcmFyeUZpbGVuYW1lKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGdjaGFyICp1cmkgPSBnX2ZpbGVuYW1lX3RvX3VyaSh0ZW1wb3JhcnlGaWxlbmFtZSwgTlVM
TCwgTlVMTCk7CisgICAgICAgICAgICBpZiAodXJpKQorICAgICAgICAgICAgICAgIHdlYmtpdF9k
b3dubG9hZF9zZXRfZGVzdGluYXRpb25fdXJpKGRvd25sb2FkLCB1cmkpOworICAgICAgICAgICAg
Z19mcmVlKHVyaSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KGRv
d25sb2FkLCAibm90aWZ5OjpzdGF0dXMiLAorICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFD
Syhub3RpZnlfc3RhdHVzX2NiKSwgTlVMTCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZG93bmxv
YWRfcmVxdWVzdGVkX2NiKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LAorICAgICAgICAgICAgICAg
ICAgICAgIFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICBn
Ym9vbGVhbiogYmVlblRoZXJlKQoreworICAgIGhhbmRsZV9kb3dubG9hZF9yZXF1ZXN0ZWRfY2Io
ZG93bmxvYWQsIGJlZW5UaGVyZSwgRkFMU0UpOworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0
aWMgZ2Jvb2xlYW4KK2Rvd25sb2FkX3JlcXVlc3RlZF9hc3luY2hfY2IoV2ViS2l0V2ViVmlldyog
d2ViX3ZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdERvd25sb2FkKiBk
b3dubG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4qIGJlZW5UaGVy
ZSkKK3sKKyAgICBoYW5kbGVfZG93bmxvYWRfcmVxdWVzdGVkX2NiKGRvd25sb2FkLCBiZWVuVGhl
cmUsIFRSVUUpOworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZAordGVzdF93ZWJr
aXRfZG93bmxvYWRfcGVyZm9ybShnYm9vbGVhbiBhc3luY2gpCit7CisgICAgV2ViS2l0V2ViVmll
dyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAg
IEdDYWxsYmFjayBkb3dubG9hZFJlcXVlc3RDYWxsYmFjayA9IE5VTEw7CisKKyAgICBnX29iamVj
dF9yZWZfc2luayhHX09CSkVDVCh3ZWJWaWV3KSk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdl
YlZpZXcsICJuYXZpZ2F0aW9uLXBvbGljeS1kZWNpc2lvbi1yZXF1ZXN0ZWQiLAorICAgICAgICAg
ICAgICAgICAgICAgR19DQUxMQkFDSyhuYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9yZXF1ZXN0
ZWRfY2IpLAorICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICBpZiAoYXN5bmNoKQor
ICAgICAgICBkb3dubG9hZFJlcXVlc3RDYWxsYmFjayA9IEdfQ0FMTEJBQ0soZG93bmxvYWRfcmVx
dWVzdGVkX2FzeW5jaF9jYik7CisgICAgZWxzZQorICAgICAgICBkb3dubG9hZFJlcXVlc3RDYWxs
YmFjayA9IEdfQ0FMTEJBQ0soZG93bmxvYWRfcmVxdWVzdGVkX2NiKTsKKworICAgIGdib29sZWFu
IGJlZW5UaGVyZSA9IEZBTFNFOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgImRvd25s
b2FkLXJlcXVlc3RlZCIsCisgICAgICAgICAgICAgICAgICAgICBkb3dubG9hZFJlcXVlc3RDYWxs
YmFjaywgJmJlZW5UaGVyZSk7CisKKyAgICAvKiBQcmVwYXJhdGlvbjsgRklYTUU6IHdlIHNob3Vs
ZCBtb3ZlIHRoaXMgY29kZSB0byBhIHRlc3QKKyAgICAgKiB1dGlsaXRpZXMgZmlsZSwgYmVjYXVz
ZSB3ZSBoYXZlIGEgdmVyeSBzaW1pbGFyIG9uZSBpbgorICAgICAqIHRlc3R3ZWJmcmFtZS5jICov
CisgICAgR0Vycm9yICplcnJvciA9IE5VTEw7CisgICAgZ2NoYXIqIGZpbGVuYW1lOworICAgIGlu
dCBmZCA9IGdfZmlsZV9vcGVuX3RtcCgid2Via2l0LXRlc3R3ZWJkb3dubG9hZC1YWFhYWFgiLCAm
ZmlsZW5hbWUsICZlcnJvcik7CisgICAgY2xvc2UoZmQpOworCisgICAgaWYgKGVycm9yKQorICAg
ICAgICBnX2NyaXRpY2FsKCJGYWlsZWQgdG8gb3BlbiBhIHRlbXBvcmFyeSBmaWxlIGZvciB3cml0
aW5nOiAlcy4iLCBlcnJvci0+bWVzc2FnZSk7CisKKyAgICBpZiAoZ191bmxpbmsoZmlsZW5hbWUp
ID09IC0xKQorICAgICAgICBnX2NyaXRpY2FsKCJGYWlsZWQgdG8gZGVsZXRlIHRoZSB0ZW1wb3Jh
cnkgZmlsZTogJXMuIiwgZ19zdHJlcnJvcihlcnJubykpOworCisgICAgdGhlRG93bmxvYWQgPSBO
VUxMOworICAgIHRlbXBvcmFyeUZpbGVuYW1lID0gZmlsZW5hbWU7CisKKyAgICBsb29wID0gZ19t
YWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh3
ZWJWaWV3LCAiaHR0cDovL2dub21lLm9yZy8iKTsKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7
CisKKyAgICBnX2Fzc2VydF9jbXBpbnQoYmVlblRoZXJlLCA9PSwgVFJVRSk7CisKKyAgICBnX2Fz
c2VydF9jbXBpbnQoZ19maWxlX3Rlc3QodGVtcG9yYXJ5RmlsZW5hbWUsIEdfRklMRV9URVNUX0lT
X1JFR1VMQVIpLCA9PSwgVFJVRSk7CisKKyAgICBnX3VubGluayh0ZW1wb3JhcnlGaWxlbmFtZSk7
CisgICAgZ19mcmVlKHRlbXBvcmFyeUZpbGVuYW1lKTsKKyAgICB0ZW1wb3JhcnlGaWxlbmFtZSA9
IE5VTEw7CisKKyAgICBnX21haW5fbG9vcF91bnJlZihsb29wKTsKKyAgICBnX29iamVjdF91bnJl
Zih3ZWJWaWV3KTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3Rfd2Via2l0X2Rvd25sb2FkX3N5bmNo
KHZvaWQpCit7CisgICAgdGVzdF93ZWJraXRfZG93bmxvYWRfcGVyZm9ybShGQUxTRSk7Cit9CisK
K3N0YXRpYyB2b2lkCit0ZXN0X3dlYmtpdF9kb3dubG9hZF9hc3luY2godm9pZCkKK3sKKyAgICB0
ZXN0X3dlYmtpdF9kb3dubG9hZF9wZXJmb3JtKFRSVUUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4g
bWltZV90eXBlX3BvbGljeV9kZWNpc2lvbl9yZXF1ZXN0ZWRfY2IoV2ViS2l0V2ViVmlldyogdmll
dywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0LCBj
b25zdCBjaGFyKiBtaW1lX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV2ViS2l0V2ViUG9saWN5RGVjaXNpb24qIGRlY2lzaW9uLCBn
cG9pbnRlciBkYXRhKQoreworICAgIHdlYmtpdF93ZWJfcG9saWN5X2RlY2lzaW9uX2Rvd25sb2Fk
KGRlY2lzaW9uKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQgaWRsZV9xdWl0
X2xvb3BfY2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIEdQYXJhbVNwZWMqIHBzcGVjLCBncG9p
bnRlciBkYXRhKQoreworICAgIGlmICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdl
Yl92aWV3KSA9PSBXRUJLSVRfTE9BRF9GSU5JU0hFRCB8fAorICAgICAgICB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYl92aWV3KSA9PSBXRUJLSVRfTE9BRF9GQUlMRUQpCisgICAg
ICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3dlYmtp
dF9kb3dubG9hZF9kYXRhKHZvaWQpCit7CisgICAgZ2Jvb2xlYW4gYmVlblRoZXJlID0gRkFMU0U7
CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2Vi
X3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOworCisgICAgZ19z
aWduYWxfY29ubmVjdCh3ZWJWaWV3LCAiZG93bmxvYWQtcmVxdWVzdGVkIiwKKyAgICAgICAgICAg
ICAgICAgICAgIEdfQ0FMTEJBQ0soZG93bmxvYWRfcmVxdWVzdGVkX2NiKSwKKyAgICAgICAgICAg
ICAgICAgICAgICZiZWVuVGhlcmUpOworCisgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAi
bm90aWZ5Ojpsb2FkLXN0YXR1cyIsCisgICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKGlk
bGVfcXVpdF9sb29wX2NiKSwKKyAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgZ19z
aWduYWxfY29ubmVjdCh3ZWJWaWV3LCAibWltZS10eXBlLXBvbGljeS1kZWNpc2lvbi1yZXF1ZXN0
ZWQiLAorICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhtaW1lX3R5cGVfcG9saWN5X2Rl
Y2lzaW9uX3JlcXVlc3RlZF9jYiksCisgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKworICAg
IGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisKKyAgICAvKiBXZSdyZSB0ZXN0
aW5nIGZvciBhIGNyYXNoLCBzbyBqdXN0IG5vdCBjcmFzaGluZyBpcyBhIHBhc3MgKi8KKyAgICB3
ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkod2ViVmlldywgImRhdGE6YXBwbGljYXRpb24vb2N0ZWN0
LXN0cmVhbSwiKTsKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICBnX2Fzc2VydF9j
bXBpbnQoYmVlblRoZXJlLCA9PSwgVFJVRSk7CisKKyAgICBnX21haW5fbG9vcF91bnJlZihsb29w
KTsKKyAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKK30KKworc3RhdGljIHZvaWQgbm90aWZ5
RG93bmxvYWRTdGF0dXNDYWxsYmFjayhHT2JqZWN0ICpvYmplY3QsIEdQYXJhbVNwZWMgKnBzcGVj
LCBncG9pbnRlciBkYXRhKQoreworICAgIFdlYktpdERvd25sb2FkICpkb3dubG9hZCA9IFdFQktJ
VF9ET1dOTE9BRChvYmplY3QpOworICAgIFdlYktpdE5ldHdvcmtSZXNwb25zZSAqcmVzcG9uc2Ug
PSB3ZWJraXRfZG93bmxvYWRfZ2V0X25ldHdvcmtfcmVzcG9uc2UoZG93bmxvYWQpOworICAgIFNv
dXBNZXNzYWdlICptZXNzYWdlID0gd2Via2l0X25ldHdvcmtfcmVzcG9uc2VfZ2V0X21lc3NhZ2Uo
cmVzcG9uc2UpOworCisgICAgc3dpdGNoICh3ZWJraXRfZG93bmxvYWRfZ2V0X3N0YXR1cyhkb3du
bG9hZCkpIHsKKyAgICBjYXNlIFdFQktJVF9ET1dOTE9BRF9TVEFUVVNfRVJST1I6CisgICAgICAg
IGdfYXNzZXJ0X2NtcGludChtZXNzYWdlLT5zdGF0dXNfY29kZSwgPT0sIDQwNCk7CisgICAgICAg
IGdfbWFpbl9sb29wX3F1aXQobG9vcCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VCS0lU
X0RPV05MT0FEX1NUQVRVU19GSU5JU0hFRDoKKyAgICBjYXNlIFdFQktJVF9ET1dOTE9BRF9TVEFU
VVNfQ0FOQ0VMTEVEOgorICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2
b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIgKnNlcnZlciwgU291cE1lc3NhZ2UgKm1lc3Nh
Z2UsIGNvbnN0IGNoYXIgKnBhdGgsIEdIYXNoVGFibGUgKnF1ZXJ5LCBTb3VwQ2xpZW50Q29udGV4
dCAqY29udGV4dCwgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgaWYgKG1lc3NhZ2UtPm1ldGhv
ZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMo
bWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVT
X05PVF9GT1VORCk7CisgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVz
cG9uc2VfYm9keSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2Rvd25sb2FkX25vdF9m
b3VuZCh2b2lkKQoreworICAgIFNvdXBTZXJ2ZXIgKnNlcnZlciA9IHNvdXBfc2VydmVyX25ldyhT
T1VQX1NFUlZFUl9QT1JULCAwLCBOVUxMKTsKKyAgICBzb3VwX3NlcnZlcl9ydW5fYXN5bmMoc2Vy
dmVyKTsKKyAgICBzb3VwX3NlcnZlcl9hZGRfaGFuZGxlcihzZXJ2ZXIsIE5VTEwsIHNlcnZlckNh
bGxiYWNrLCBOVUxMLCBOVUxMKTsKKyAgICBTb3VwVVJJICpiYXNlVVJJID0gc291cF91cmlfbmV3
KCJodHRwOi8vMTI3LjAuMC4xLyIpOworICAgIHNvdXBfdXJpX3NldF9wb3J0KGJhc2VVUkksIHNv
dXBfc2VydmVyX2dldF9wb3J0KHNlcnZlcikpOworCisgICAgU291cFVSSSAqdXJpID0gc291cF91
cmlfbmV3X3dpdGhfYmFzZShiYXNlVVJJLCAiL2ZvbyIpOworICAgIGNoYXIgKnVyaVN0cmluZyA9
IHNvdXBfdXJpX3RvX3N0cmluZyh1cmksIEZBTFNFKTsKKyAgICBzb3VwX3VyaV9mcmVlKHVyaSk7
CisKKyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworICAgIFdlYktpdE5l
dHdvcmtSZXF1ZXN0ICpyZXF1ZXN0ID0gd2Via2l0X25ldHdvcmtfcmVxdWVzdF9uZXcodXJpU3Ry
aW5nKTsKKyAgICBnX2ZyZWUgKHVyaVN0cmluZyk7CisgICAgV2ViS2l0RG93bmxvYWQgKmRvd25s
b2FkID0gd2Via2l0X2Rvd25sb2FkX25ldyhyZXF1ZXN0KTsKKyAgICBnX29iamVjdF91bnJlZihy
ZXF1ZXN0KTsKKworICAgIHdlYmtpdF9kb3dubG9hZF9zZXRfZGVzdGluYXRpb25fdXJpKGRvd25s
b2FkLCAiZmlsZTovLy90bXAvZm9vIik7CisgICAgZ19zaWduYWxfY29ubmVjdChkb3dubG9hZCwg
Im5vdGlmeTo6c3RhdHVzIiwgR19DQUxMQkFDSyhub3RpZnlEb3dubG9hZFN0YXR1c0NhbGxiYWNr
KSwgTlVMTCk7CisKKyAgICB3ZWJraXRfZG93bmxvYWRfc3RhcnQoZG93bmxvYWQpOworICAgIGdf
bWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIGdfb2JqZWN0X3VucmVmKGRvd25sb2FkKTsKKyAg
ICBnX21haW5fbG9vcF91bnJlZihsb29wKTsKKyAgICBzb3VwX3VyaV9mcmVlKGJhc2VVUkkpOwor
ICAgIGdfb2JqZWN0X3VucmVmKHNlcnZlcik7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFy
KiogYXJndikKK3sKKyAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7CisKKyAg
ICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOworICAgIGdfdGVz
dF9hZGRfZnVuYygiL3dlYmtpdC9kb3dubG9hZC9jcmVhdGUiLCB0ZXN0X3dlYmtpdF9kb3dubG9h
ZF9jcmVhdGUpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9kb3dubG9hZC9zeW5jaCIs
IHRlc3Rfd2Via2l0X2Rvd25sb2FkX3N5bmNoKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJr
aXQvZG93bmxvYWQvYXN5bmNoIiwgdGVzdF93ZWJraXRfZG93bmxvYWRfYXN5bmNoKTsKKyAgICBn
X3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvZG93bmxvYWQvZGF0YSIsIHRlc3Rfd2Via2l0X2Rvd25s
b2FkX2RhdGEpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9kb3dubG9hZC9ub3QtZm91
bmQiLCB0ZXN0X3dlYmtpdF9kb3dubG9hZF9ub3RfZm91bmQpOworICAgIHJldHVybiBnX3Rlc3Rf
cnVuICgpOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRH
dGsvdGVzdGZhdmljb25kYXRhYmFzZS5jIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRHdGsvdGVzdGZhdmljb25kYXRhYmFzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjQ3MmRhNDkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdEd0ay90ZXN0ZmF2aWNvbmRhdGFiYXNlLmMKQEAgLTAsMCArMSwyNzYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgInRlc3RfdXRpbHMuaCIKKyNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgorI2luY2x1
ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Vi
a2l0Lmg+CisKK2NvbnN0IGludCBnSWNvblNpemUgPSAxNjsKKworR01haW5Mb29wICpsb29wOwor
Y2hhciAqYmFzZVVSSTsKKworc3RhdGljIHZvaWQKK3NlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIg
KnNlcnZlciwgU291cE1lc3NhZ2UgKm1lc3NhZ2UsIGNvbnN0IGNoYXIgKnBhdGgsIEdIYXNoVGFi
bGUgKnF1ZXJ5LCBTb3VwQ2xpZW50Q29udGV4dCAqY29udGV4dCwgdm9pZCAqZGF0YSkKK3sKKyAg
ICBpZiAobWVzc2FnZS0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgeworICAgICAgICBzb3Vw
X21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMo
bWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOworCisgICAgY2hhciAqY29udGVudHM7CisgICAgZ3Np
emUgbGVuZ3RoOworICAgIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2Zhdmljb24uaWNvIikpIHsK
KyAgICAgICAgR0Vycm9yICplcnJvciA9IE5VTEw7CisKKyAgICAgICAgZ19maWxlX2dldF9jb250
ZW50cygiYmxhbmsuaWNvIiwgJmNvbnRlbnRzLCAmbGVuZ3RoLCAmZXJyb3IpOworICAgICAgICBn
X2Fzc2VydCghZXJyb3IpOworICAgIH0gZWxzZSB7CisgICAgICAgIGNvbnRlbnRzID0gZ19zdHJk
dXAoIjxodG1sPjxib2R5PnRlc3Q8L2JvZHk+PC9odG1sPiIpOworICAgICAgICBsZW5ndGggPSBz
dHJsZW4oY29udGVudHMpOworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZCht
ZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBjb250ZW50cywgbGVuZ3Ro
KTsKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5
KTsKK30KKworc3RhdGljIHZvaWQgZGVsZXRlRGF0YWJhc2VGaWxlSWZFeGlzdHMoY29uc3QgY2hh
ciAqZGF0YWJhc2VQYXRoKQoreworICAgIGlmICghZ19maWxlX3Rlc3QoZGF0YWJhc2VQYXRoLCBH
X0ZJTEVfVEVTVF9JU19ESVIpKQorICAgICAgICByZXR1cm47CisKKyAgICBjaGFyICpkYXRhYmFz
ZUZpbGVuYW1lID0gZ19idWlsZF9maWxlbmFtZShkYXRhYmFzZVBhdGgsICJXZWJwYWdlSWNvbnMu
ZGIiLCBOVUxMKTsKKyAgICBpZiAoZ191bmxpbmsoZGF0YWJhc2VGaWxlbmFtZSkgPT0gLTEpIHsK
KyAgICAgICAgZ19mcmVlKGRhdGFiYXNlRmlsZW5hbWUpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgZ19mcmVlKGRhdGFiYXNlRmlsZW5hbWUpOworICAgIGdfcm1kaXIoZGF0YWJhc2VQ
YXRoKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYktpdEZhdmljb25EYXRhYmFzZVNldFBhdGgo
KQoreworICAgIGNoYXIgKmRhdGFiYXNlUGF0aCA9IGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfdG1w
X2RpcigpLCAid2Via2l0LXRlc3RmYXZpY29uZGF0YWJhc2UiLCBOVUxMKTsKKyAgICBkZWxldGVE
YXRhYmFzZUZpbGVJZkV4aXN0cyhkYXRhYmFzZVBhdGgpOworCisgICAgV2ViS2l0RmF2aWNvbkRh
dGFiYXNlICpkYXRhYmFzZSA9IHdlYmtpdF9nZXRfZmF2aWNvbl9kYXRhYmFzZSgpOworICAgIHdl
YmtpdF9mYXZpY29uX2RhdGFiYXNlX3NldF9wYXRoKGRhdGFiYXNlLCBkYXRhYmFzZVBhdGgpOwor
CisgICAgZ19hc3NlcnRfY21wc3RyKGRhdGFiYXNlUGF0aCwgPT0sIHdlYmtpdF9mYXZpY29uX2Rh
dGFiYXNlX2dldF9wYXRoKGRhdGFiYXNlKSk7CisKKyAgICBnX2ZyZWUoZGF0YWJhc2VQYXRoKTsK
K30KKworLy8gU2VlIHRoZSBjb21tZW50IGluIG1haW4oKSBmdW5jdGlvbiB0aGF0IGdvZXMgd2l0
aCB0aGlzIHNhbWUgZ3VhcmQuCisjaWZkZWYgTkRFQlVHCisKK3N0YXRpYyB2b2lkIGZhdmljb25E
YXRhYmFzZUdldFZhbGlkRmF2aWNvbkNhbGxiYWNrKEdPYmplY3QgKnNvdXJjZU9iamVjdCwgR0Fz
eW5jUmVzdWx0ICpyZXN1bHQsIHZvaWQgKnVzZXJEYXRhKQoreworICAgIGdib29sZWFuICpiZWVu
SGVyZSA9IChnYm9vbGVhbiopdXNlckRhdGE7CisgICAgR0Vycm9yICplcnJvciA9IE5VTEw7Cisg
ICAgR2RrUGl4YnVmICppY29uID0gd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25f
cGl4YnVmX2ZpbmlzaChXRUJLSVRfRkFWSUNPTl9EQVRBQkFTRShzb3VyY2VPYmplY3QpLCByZXN1
bHQsICZlcnJvcik7CisgICAgZ19hc3NlcnQoaWNvbik7CisgICAgZ19vYmplY3RfdW5yZWYoaWNv
bik7CisKKyAgICAqYmVlbkhlcmUgPSBUUlVFOworCisgICAgZ19tYWluX2xvb3BfcXVpdChsb29w
KTsKK30KKworc3RhdGljIHZvaWQgZmF2aWNvbkRhdGFiYXNlR2V0SW52YWxpZEZhdmljb25DYWxs
YmFjayhHT2JqZWN0ICpzb3VyY2VPYmplY3QsIEdBc3luY1Jlc3VsdCAqcmVzdWx0LCB2b2lkICp1
c2VyRGF0YSkKK3sKKyAgICBnYm9vbGVhbiAqYmVlbkhlcmUgPSAoZ2Jvb2xlYW4qKXVzZXJEYXRh
OworICAgIEdFcnJvciAqZXJyb3IgPSBOVUxMOworICAgIEdka1BpeGJ1ZiAqaWNvbiA9IHdlYmtp
dF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX3BpeGJ1Zl9maW5pc2goV0VCS0lUX0ZBVklD
T05fREFUQUJBU0Uoc291cmNlT2JqZWN0KSwgcmVzdWx0LCAmZXJyb3IpOworICAgIGdfYXNzZXJ0
KCFpY29uKTsKKworICAgICpiZWVuSGVyZSA9IFRSVUU7CisKKyAgICBnX21haW5fbG9vcF9xdWl0
KGxvb3ApOworfQorCitzdGF0aWMgdm9pZCBmYXZpY29uRGF0YWJhc2VHZXRGYXZpY29uQ2FuY2Vs
bGVkQ2FsbGJhY2soR09iamVjdCAqc291cmNlT2JqZWN0LCBHQXN5bmNSZXN1bHQgKnJlc3VsdCwg
dm9pZCAqdXNlckRhdGEpCit7CisgICAgZ2Jvb2xlYW4gKmJlZW5IZXJlID0gKGdib29sZWFuKil1
c2VyRGF0YTsKKyAgICBHRXJyb3IgKmVycm9yID0gTlVMTDsKKyAgICBHZGtQaXhidWYgKmljb24g
PSB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl9waXhidWZfZmluaXNoKFdFQktJ
VF9GQVZJQ09OX0RBVEFCQVNFKHNvdXJjZU9iamVjdCksIHJlc3VsdCwgJmVycm9yKTsKKyAgICBn
X2Fzc2VydCghaWNvbik7CisgICAgZ19hc3NlcnQoZXJyb3IgJiYgZ19lcnJvcl9tYXRjaGVzKGVy
cm9yLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX0NBTkNFTExFRCkpOworCisgICAgKmJlZW5IZXJl
ID0gVFJVRTsKKworICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Cit9CisKK3N0YXRpYyBpbmxp
bmUgdm9pZCBxdWl0TWFpbkxvb3BJZkxvYWRDb21wbGV0ZWQoZ2Jvb2xlYW4gKmljb25PclBhZ2VM
b2FkZWQpCit7CisgICAgaWYgKCppY29uT3JQYWdlTG9hZGVkKQorICAgICAgICBnX21haW5fbG9v
cF9xdWl0KGxvb3ApOworICAgIGVsc2UKKyAgICAgICAgKmljb25PclBhZ2VMb2FkZWQgPSBUUlVF
OworfQorCitzdGF0aWMgdm9pZCBpZGxlUXVpdExvb3BDYWxsYmFjayhXZWJLaXRXZWJWaWV3ICp3
ZWJWaWV3LCBHUGFyYW1TcGVjICpwYXJhbVNwZWMsIGdib29sZWFuICppY29uT3JQYWdlTG9hZGVk
KQoreworICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9s
b2FkX3N0YXR1cyh3ZWJWaWV3KTsKKworICAgIGlmIChzdGF0dXMgPT0gV0VCS0lUX0xPQURfRklO
SVNIRUQgfHwgc3RhdHVzID09IFdFQktJVF9MT0FEX0ZBSUxFRCkKKyAgICAgICAgcXVpdE1haW5M
b29wSWZMb2FkQ29tcGxldGVkKGljb25PclBhZ2VMb2FkZWQpOworfQorCitzdGF0aWMgdm9pZCB3
ZWJraXRXZWJWaWV3SWNvbkxvYWRlZChXZWJLaXRGYXZpY29uRGF0YWJhc2UgKmRhdGFiYXNlLCBj
b25zdCBjaGFyICpmcmFtZVVSSSwgZ2Jvb2xlYW4gKmljb25PclBhZ2VMb2FkZWQpCit7CisgICAg
cXVpdE1haW5Mb29wSWZMb2FkQ29tcGxldGVkKGljb25PclBhZ2VMb2FkZWQpOworfQorCitzdGF0
aWMgdm9pZCBsb2FkVVJJKGNvbnN0IGNoYXIgKnVyaSkKK3sKKyAgICBXZWJLaXRXZWJWaWV3ICp2
aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ2Jvb2xl
YW4gaWNvbk9yUGFnZUxvYWRlZCA9IEZBTFNFOworCisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRf
dXJpKHZpZXcsIHVyaSk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHZpZXcsICJub3RpZnk6Omxv
YWQtc3RhdHVzIiwgR19DQUxMQkFDSyhpZGxlUXVpdExvb3BDYWxsYmFjayksICZpY29uT3JQYWdl
TG9hZGVkKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KHZpZXcsICJpY29uLWxvYWRlZCIsIEdfQ0FM
TEJBQ0sod2Via2l0V2ViVmlld0ljb25Mb2FkZWQpLCAmaWNvbk9yUGFnZUxvYWRlZCk7CisKKyAg
ICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25u
ZWN0X21hdGNoZWQodmlldywgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgJmljb25P
clBhZ2VMb2FkZWQpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gZmF2aWNvbkRhdGFiYXNlR2V0VmFs
aWRGYXZpY29uSWRsZSh2b2lkICp1c2VyRGF0YSkKK3sKKyAgICB3ZWJraXRfZmF2aWNvbl9kYXRh
YmFzZV9nZXRfZmF2aWNvbl9waXhidWYod2Via2l0X2dldF9mYXZpY29uX2RhdGFiYXNlKCksIGJh
c2VVUkksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdJ
Y29uU2l6ZSwgZ0ljb25TaXplLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmYXZpY29uRGF0YWJhc2VHZXRWYWxpZEZhdmljb25DYWxsYmFjaywg
dXNlckRhdGEpOworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGdib29sZWFuIGZhdmlj
b25EYXRhYmFzZUdldEludmFsaWRGYXZpY29uSWRsZSh2b2lkICp1c2VyRGF0YSkKK3sKKyAgICB3
ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl9waXhidWYod2Via2l0X2dldF9mYXZp
Y29uX2RhdGFiYXNlKCksICJodHRwOi8vd3d3LndlYmtpdGd0ay5vcmcvIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ0ljb25TaXplLCBnSWNvblNpemUs
IE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZh
dmljb25EYXRhYmFzZUdldEludmFsaWRGYXZpY29uQ2FsbGJhY2ssIHVzZXJEYXRhKTsKKyAgICBy
ZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBmYXZpY29uRGF0YWJhc2VHZXRGYXZp
Y29uQ2FuY2VsbGVkSWRsZSh2b2lkICp1c2VyRGF0YSkKK3sKKyAgICBHQ2FuY2VsbGFibGUgKmNh
bmNlbGxhYmxlID0gZ19jYW5jZWxsYWJsZV9uZXcoKTsKKyAgICB3ZWJraXRfZmF2aWNvbl9kYXRh
YmFzZV9nZXRfZmF2aWNvbl9waXhidWYod2Via2l0X2dldF9mYXZpY29uX2RhdGFiYXNlKCksIGJh
c2VVUkksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdJ
Y29uU2l6ZSwgZ0ljb25TaXplLCBjYW5jZWxsYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNvbkNhbmNlbGxl
ZENhbGxiYWNrLCB1c2VyRGF0YSk7CisgICAgZ19jYW5jZWxsYWJsZV9jYW5jZWwoY2FuY2VsbGFi
bGUpOworICAgIGdfb2JqZWN0X3VucmVmKGNhbmNlbGxhYmxlKTsKKyAgICByZXR1cm4gRkFMU0U7
Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VHZXRGYXZpY29uKCkK
K3sKKyAgICBnYm9vbGVhbiBiZWVuVG9JY29uQ2FsbGJhY2s7CisKKyAgICBsb29wID0gZ19tYWlu
X2xvb3BfbmV3KE5VTEwsIFRSVUUpOworCisgICAgLyogTG9hZCB1cmkgdG8gbWFrZSBzdXJlIGZh
dmljb24gaXMgYWRkZWQgdG8gZGF0YWJhc2UuICovCisgICAgbG9hZFVSSShiYXNlVVJJKTsKKwor
ICAgIGJlZW5Ub0ljb25DYWxsYmFjayA9IEZBTFNFOworICAgIGdfaWRsZV9hZGQoKEdTb3VyY2VG
dW5jKWZhdmljb25EYXRhYmFzZUdldFZhbGlkRmF2aWNvbklkbGUsICZiZWVuVG9JY29uQ2FsbGJh
Y2spOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKyAgICBnX2Fzc2VydChiZWVuVG9JY29u
Q2FsbGJhY2spOworCisgICAgYmVlblRvSWNvbkNhbGxiYWNrID0gRkFMU0U7CisgICAgZ19pZGxl
X2FkZCgoR1NvdXJjZUZ1bmMpZmF2aWNvbkRhdGFiYXNlR2V0SW52YWxpZEZhdmljb25JZGxlLCAm
YmVlblRvSWNvbkNhbGxiYWNrKTsKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisgICAgZ19h
c3NlcnQoYmVlblRvSWNvbkNhbGxiYWNrKTsKKworICAgIGJlZW5Ub0ljb25DYWxsYmFjayA9IEZB
TFNFOworICAgIGdfaWRsZV9hZGQoKEdTb3VyY2VGdW5jKWZhdmljb25EYXRhYmFzZUdldEZhdmlj
b25DYW5jZWxsZWRJZGxlLCAmYmVlblRvSWNvbkNhbGxiYWNrKTsKKyAgICBnX21haW5fbG9vcF9y
dW4obG9vcCk7CisgICAgZ19hc3NlcnQoYmVlblRvSWNvbkNhbGxiYWNrKTsKK30KKworc3RhdGlj
IHZvaWQgdGVzdFdlYktpdEZhdmljb25EYXRhYmFzZUdldEZhdmljb25VUkkoKQoreworICAgIGNo
YXIgKmljb25VUkkgPSB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl91cmkod2Vi
a2l0X2dldF9mYXZpY29uX2RhdGFiYXNlKCksIGJhc2VVUkkpOworICAgIGNoYXIgKmV4cGVjdGVk
VVJJID0gZ19zdHJkdXBfcHJpbnRmKCIlc2Zhdmljb24uaWNvIiwgYmFzZVVSSSk7CisgICAgZ19h
c3NlcnRfY21wc3RyKGljb25VUkksID09LCBleHBlY3RlZFVSSSk7CisgICAgZ19mcmVlKGV4cGVj
dGVkVVJJKTsKKyAgICBnX2ZyZWUoaWNvblVSSSk7Cit9CisKKyNlbmRpZgorCitzdGF0aWMgdm9p
ZCB0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlUmVtb3ZlQWxsKHZvaWQpCit7CisgICAgV2ViS2l0
RmF2aWNvbkRhdGFiYXNlICpkYXRhYmFzZSA9IHdlYmtpdF9nZXRfZmF2aWNvbl9kYXRhYmFzZSgp
OworICAgIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2NsZWFyKGRhdGFiYXNlKTsKKyAgICBjaGFy
ICppY29uVVJJID0gd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fdXJpKGRhdGFi
YXNlLCBiYXNlVVJJKTsKKyAgICBnX2Fzc2VydCghaWNvblVSSSk7CisgICAgZ19mcmVlKGljb25V
UkkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlQ2xvc2VEYXRh
YmFzZSh2b2lkKQoreworICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSAqZGF0YWJhc2UgPSB3ZWJr
aXRfZ2V0X2Zhdmljb25fZGF0YWJhc2UoKTsKKyAgICBjaGFyICpkYXRhYmFzZVBhdGggPSBnX3N0
cmR1cCh3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfcGF0aChkYXRhYmFzZSkpOworICAgIHdl
YmtpdF9mYXZpY29uX2RhdGFiYXNlX3NldF9wYXRoKGRhdGFiYXNlLCAwKTsKKyAgICBkZWxldGVE
YXRhYmFzZUZpbGVJZkV4aXN0cyhkYXRhYmFzZVBhdGgpOworICAgIGdfZnJlZShkYXRhYmFzZVBh
dGgpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgZ3RrX3Rl
c3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAgLyogVGhpcyBob3BlZnVsbHkgbWFr
ZXMgdGhlIHRlc3QgaW5kZXBlbmRlbnQgb2YgdGhlIHBhdGggaXQncyBjYWxsZWQgZnJvbS4gKi8K
KyAgICB0ZXN0dXRpbHNfcmVsYXRpdmVfY2hkaXIoIlRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0R3RrL3Jlc291cmNlcy90ZXN0Lmh0bWwiLCBhcmd2WzBdKTsKKworICAgIFNvdXBTZXJ2
ZXIgKnNlcnZlciA9IHNvdXBfc2VydmVyX25ldyhTT1VQX1NFUlZFUl9QT1JULCAwLCBOVUxMKTsK
KyAgICBzb3VwX3NlcnZlcl9ydW5fYXN5bmMoc2VydmVyKTsKKworICAgIHNvdXBfc2VydmVyX2Fk
ZF9oYW5kbGVyKHNlcnZlciwgTlVMTCwgc2VydmVyQ2FsbGJhY2ssIE5VTEwsIE5VTEwpOworCisg
ICAgU291cFVSSSAqc291cFVSSSA9IHNvdXBfdXJpX25ldygiaHR0cDovLzEyNy4wLjAuMS8iKTsK
KyAgICBzb3VwX3VyaV9zZXRfcG9ydChzb3VwVVJJLCBzb3VwX3NlcnZlcl9nZXRfcG9ydChzZXJ2
ZXIpKTsKKworICAgIGJhc2VVUkkgPSBzb3VwX3VyaV90b19zdHJpbmcoc291cFVSSSwgRkFMU0Up
OworICAgIHNvdXBfdXJpX2ZyZWUoc291cFVSSSk7CisKKyAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0
dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9m
YXZpY29uZGF0YWJhc2Uvc2V0LXBhdGgiLCB0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlU2V0UGF0
aCk7CisKKyAgICAvLyBUaGVzZSB0d28gdGVzdHMgd2lsbCB0cmlnZ2VyIGFuIEFTU0VSVElPTiBv
biBkZWJ1ZyBidWlsZHMgZHVlCisgICAgLy8gdG8gaHR0cDovL3dlYmtpdC5vcmcvYi82NzU4Mi4g
UmVtb3ZlIHRoZSBndWFyZHMgb25jZSB0aGUgYnVnIGlzIGZpeGVkLgorI2lmZGVmIE5ERUJVRwor
ICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9mYXZpY29uZGF0YWJhc2UvZ2V0LWZhdmljb24i
LCB0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNvbik7CisgICAgZ190ZXN0X2FkZF9m
dW5jKCIvd2Via2l0L2Zhdmljb25kYXRhYmFzZS9nZXQtZmF2aWNvbi11cmkiLCB0ZXN0V2ViS2l0
RmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNvblVSSSk7CisjZW5kaWYKKworICAgIGdfdGVzdF9hZGRf
ZnVuYygiL3dlYmtpdC9mYXZpY29uZGF0YWJhc2UvcmVtb3ZlLWFsbCIsIHRlc3RXZWJLaXRGYXZp
Y29uRGF0YWJhc2VSZW1vdmVBbGwpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9mYXZp
Y29uZGF0YWJhc2UvY2xvc2UtZGIiLCB0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlQ2xvc2VEYXRh
YmFzZSk7CisKKyAgICByZXR1cm4gZ190ZXN0X3J1bigpOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGdsb2JhbHMuYyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RnbG9iYWxzLmMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNGI5ZWM0ZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RnbG9iYWxzLmMKQEAgLTAsMCArMSwxMTAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQ29sbGFib3JhIEx0ZC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKyNp
bmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+CisKKy8vIE1ha2Ugc3VyZSB0aGUgc2Vzc2lvbiBpcyBp
bml0aWFsaXplZCBwcm9wZXJseSB3aGVuIHdlYmtpdF9nZXRfZGVmYXVsdF9zZXNzaW9uKCkgaXMg
Y2FsbGVkLgorc3RhdGljIHZvaWQgdGVzdF9nbG9iYWxzX2RlZmF1bHRfc2Vzc2lvbigpCit7Cisg
ICAgZ190ZXN0X2J1ZygiMzY3NTQiKTsKKworICAgIFNvdXBTZXNzaW9uKiBzZXNzaW9uID0gd2Vi
a2l0X2dldF9kZWZhdWx0X3Nlc3Npb24oKTsKKyAgICBzb3VwX3Nlc3Npb25fcmVtb3ZlX2ZlYXR1
cmVfYnlfdHlwZShzZXNzaW9uLCBXRUJLSVRfVFlQRV9TT1VQX0FVVEhfRElBTE9HKTsKKworICAg
IC8vIFRoaXMgbWFrZXMgc3VyZSBvdXIgaW5pdGlhbGl6YXRpb24gcmFuLgorICAgIGdfYXNzZXJ0
KHNvdXBfc2Vzc2lvbl9nZXRfZmVhdHVyZShzZXNzaW9uLCBTT1VQX1RZUEVfQ09OVEVOVF9ERUNP
REVSKSAhPSBOVUxMKTsKKworICAgIC8vIENyZWF0aW5nIGEgV2ViVmlldyBzaG91bGQgbWFrZSBz
dXJlIHRoZSBzZXNzaW9uIGlzCisgICAgLy8gaW5pdGlhbGl6ZWQsIGFuZCBub3QgbWVzcyB3aXRo
IG91ciBjaGFuZ2VzLgorICAgIFdlYktpdFdlYlZpZXcqIHdlYl92aWV3ID0gV0VCS0lUX1dFQl9W
SUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmplY3RfcmVmX3Npbmsod2ViX3Zp
ZXcpOworICAgIGdfb2JqZWN0X3VucmVmKHdlYl92aWV3KTsKKworICAgIC8vIFRoZXNlIG1ha2Vz
IHN1cmUgb3VyIG1vZGlmaWNhdGlvbiB3YXMga2VwdC4KKyAgICBnX2Fzc2VydChzb3VwX3Nlc3Np
b25fZ2V0X2ZlYXR1cmUoc2Vzc2lvbiwgU09VUF9UWVBFX0NPTlRFTlRfREVDT0RFUikgIT0gTlVM
TCk7CisgICAgZ19hc3NlcnQoc291cF9zZXNzaW9uX2dldF9mZWF0dXJlKHNlc3Npb24sIFdFQktJ
VF9UWVBFX1NPVVBfQVVUSF9ESUFMT0cpID09IE5VTEwpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0
X2dsb2JhbHNfc2VjdXJpdHlfcG9saWN5KCkKK3sKKyAgICAvLyBDaGVjayBkZWZhdWx0IHBvbGlj
eSBmb3Igd2VsbCBrbm93biBzY2hlbWVzLgorICAgIFdlYktpdFNlY3VyaXR5UG9saWN5IHBvbGlj
eSA9IHdlYmtpdF9nZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJodHRwIik7Cisg
ICAgZ3VpbnQgbWFzayA9IFdFQktJVF9TRUNVUklUWV9QT0xJQ1lfQ09SU19FTkFCTEVEOworICAg
IGdfYXNzZXJ0X2NtcHVpbnQocG9saWN5ICYgbWFzaywgPT0sIG1hc2spOworCisgICAgcG9saWN5
ID0gd2Via2l0X2dldF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUoImh0dHBzIik7Cisg
ICAgbWFzayA9IFdFQktJVF9TRUNVUklUWV9QT0xJQ1lfU0VDVVJFIHwgV0VCS0lUX1NFQ1VSSVRZ
X1BPTElDWV9DT1JTX0VOQUJMRUQ7CisgICAgZ19hc3NlcnRfY21wdWludChwb2xpY3kgJiBtYXNr
LCA9PSwgbWFzayk7CisKKyAgICBwb2xpY3kgPSB3ZWJraXRfZ2V0X3NlY3VyaXR5X3BvbGljeV9m
b3JfdXJpX3NjaGVtZSgiZmlsZSIpOworICAgIG1hc2sgPSBXRUJLSVRfU0VDVVJJVFlfUE9MSUNZ
X0xPQ0FMOworICAgIGdfYXNzZXJ0X2NtcHVpbnQocG9saWN5ICYgbWFzaywgPT0sIG1hc2spOwor
CisgICAgcG9saWN5ID0gd2Via2l0X2dldF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUo
ImRhdGEiKTsKKyAgICBtYXNrID0gV0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9OT19BQ0NFU1NfVE9f
T1RIRVJfU0NIRU1FIHwgV0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9TRUNVUkU7CisgICAgZ19hc3Nl
cnRfY21wdWludChwb2xpY3kgJiBtYXNrLCA9PSwgbWFzayk7CisKKyAgICBwb2xpY3kgPSB3ZWJr
aXRfZ2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiYWJvdXQiKTsKKyAgICBtYXNr
ID0gV0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9OT19BQ0NFU1NfVE9fT1RIRVJfU0NIRU1FIHwgV0VC
S0lUX1NFQ1VSSVRZX1BPTElDWV9TRUNVUkUgfCBXRUJLSVRfU0VDVVJJVFlfUE9MSUNZX0VNUFRZ
X0RPQ1VNRU5UOworICAgIGdfYXNzZXJ0X2NtcHVpbnQocG9saWN5ICYgbWFzaywgPT0sIG1hc2sp
OworCisgICAgLy8gQ3VzdG9tIHNjaGVtZS4KKyAgICBwb2xpY3kgPSB3ZWJraXRfZ2V0X3NlY3Vy
aXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiZm9vIik7CisgICAgZ19hc3NlcnQoIXBvbGljeSk7
CisKKyAgICBwb2xpY3kgfD0gV0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9MT0NBTDsKKyAgICB3ZWJr
aXRfc2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiZm9vIiwgcG9saWN5KTsKKyAg
ICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9nZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2No
ZW1lKCJmb28iKSwgPT0sIHBvbGljeSk7CisKKyAgICBwb2xpY3kgfD0gV0VCS0lUX1NFQ1VSSVRZ
X1BPTElDWV9OT19BQ0NFU1NfVE9fT1RIRVJfU0NIRU1FOworICAgIHdlYmtpdF9zZXRfc2VjdXJp
dHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJmb28iLCBwb2xpY3kpOworICAgIGdfYXNzZXJ0X2Nt
cHVpbnQod2Via2l0X2dldF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUoImZvbyIpLCA9
PSwgcG9saWN5KTsKKworICAgIHBvbGljeSB8PSBXRUJLSVRfU0VDVVJJVFlfUE9MSUNZX0RJU1BM
QVlfSVNPTEFURUQ7CisgICAgd2Via2l0X3NldF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hl
bWUoImZvbyIsIHBvbGljeSk7CisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfZ2V0X3NlY3Vy
aXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiZm9vIiksID09LCBwb2xpY3kpOworCisgICAgcG9s
aWN5IHw9IFdFQktJVF9TRUNVUklUWV9QT0xJQ1lfU0VDVVJFOworICAgIHdlYmtpdF9zZXRfc2Vj
dXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJmb28iLCBwb2xpY3kpOworICAgIGdfYXNzZXJ0
X2NtcHVpbnQod2Via2l0X2dldF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUoImZvbyIp
LCA9PSwgcG9saWN5KTsKKworICAgIHBvbGljeSB8PSBXRUJLSVRfU0VDVVJJVFlfUE9MSUNZX0NP
UlNfRU5BQkxFRDsKKyAgICB3ZWJraXRfc2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVt
ZSgiZm9vIiwgcG9saWN5KTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9nZXRfc2VjdXJp
dHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJmb28iKSwgPT0sIHBvbGljeSk7CisKKyAgICBwb2xp
Y3kgfD0gV0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9FTVBUWV9ET0NVTUVOVDsKKyAgICB3ZWJraXRf
c2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiZm9vIiwgcG9saWN5KTsKKyAgICBn
X2Fzc2VydF9jbXB1aW50KHdlYmtpdF9nZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1l
KCJmb28iKSwgPT0sIHBvbGljeSk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJn
dikKK3sKKyAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7CisKKyAgICBnX3Rl
c3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOworICAgIGdfdGVzdF9hZGRf
ZnVuYygiL3dlYmtpdC9nbG9iYWxzL2RlZmF1bHRfc2Vzc2lvbiIsCisgICAgICAgICAgICAgICAg
ICAgIHRlc3RfZ2xvYmFsc19kZWZhdWx0X3Nlc3Npb24pOworICAgIGdfdGVzdF9hZGRfZnVuYygi
L3dlYmtpdC9nbG9iYWxzL3NlY3VyaXR5LXBvbGljeSIsCisgICAgICAgICAgICAgICAgICAgIHRl
c3RfZ2xvYmFsc19zZWN1cml0eV9wb2xpY3kpOworICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7Cit9
CisKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3Ro
aXR0ZXN0cmVzdWx0LmMgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0
aGl0dGVzdHJlc3VsdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiZjAx
MTAKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0
ay90ZXN0aGl0dGVzdHJlc3VsdC5jCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA5IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8ZXJy
bm8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgorI2lu
Y2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKwordHlwZWRlZiBzdHJ1Y3QgeworICBjaGFyKiBkYXRh
OworICBndWludCBmbGFnOworfSBUZXN0SW5mbzsKKworc3RhdGljIEdNYWluTG9vcCogbG9vcDsK
KwordHlwZWRlZiBzdHJ1Y3QgeworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXc7CisgICAgVGVz
dEluZm8qIGluZm87Cit9IEhpdFRlc3RSZXN1bHRGaXh0dXJlOworCitUZXN0SW5mbyoKK3Rlc3Rf
aW5mb19uZXcoY29uc3QgY2hhciogZGF0YSwgZ3VpbnQgZmxhZykKK3sKKyAgICBUZXN0SW5mbyog
aW5mbzsKKworICAgIGluZm8gPSBnX3NsaWNlX25ldyhUZXN0SW5mbyk7CisgICAgaW5mby0+ZGF0
YSA9IGdfc3RyZHVwKGRhdGEpOworICAgIGluZm8tPmZsYWcgPSBmbGFnOworCisgICAgcmV0dXJu
IGluZm87Cit9CisKK3ZvaWQKK3Rlc3RfaW5mb19kZXN0cm95KFRlc3RJbmZvKiBpbmZvKQorewor
ICAgIGdfZnJlZShpbmZvLT5kYXRhKTsKKyAgICBnX3NsaWNlX2ZyZWUoVGVzdEluZm8sIGluZm8p
OworfQorCitzdGF0aWMgdm9pZCBoaXRfdGVzdF9yZXN1bHRfZml4dHVyZV9zZXR1cChIaXRUZXN0
UmVzdWx0Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGZpeHR1
cmUtPndlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAg
ICBnX29iamVjdF9yZWZfc2luayhmaXh0dXJlLT53ZWJWaWV3KTsKKyAgICBsb29wID0gZ19tYWlu
X2xvb3BfbmV3KE5VTEwsIFRSVUUpOworICAgIGZpeHR1cmUtPmluZm8gPSAoVGVzdEluZm8qKWRh
dGE7Cit9CisKK3N0YXRpYyB2b2lkIGhpdF90ZXN0X3Jlc3VsdF9maXh0dXJlX3RlYXJkb3duKEhp
dFRlc3RSZXN1bHRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAg
Z19vYmplY3RfdW5yZWYoZml4dHVyZS0+d2ViVmlldyk7CisgICAgZ19tYWluX2xvb3BfdW5yZWYo
bG9vcCk7CisgICAgdGVzdF9pbmZvX2Rlc3Ryb3koZml4dHVyZS0+aW5mbyk7Cit9CisKK3N0YXRp
YyB2b2lkCitsb2FkX3N0YXR1c19jYihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LAorICAgICAgICAg
ICAgICAgR1BhcmFtU3BlYyogc3BlYywKKyAgICAgICAgICAgICAgIGdwb2ludGVyIGRhdGEpCit7
CisgICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRf
c3RhdHVzKHdlYlZpZXcpOworICAgIFRlc3RJbmZvKiBpbmZvID0gKFRlc3RJbmZvKilkYXRhOwor
CisgICAgaWYgKHN0YXR1cyA9PSBXRUJLSVRfTE9BRF9GSU5JU0hFRCkgeworICAgICAgICBXZWJL
aXRIaXRUZXN0UmVzdWx0KiByZXN1bHQ7CisgICAgICAgIGd1aW50IGNvbnRleHQ7CisgICAgICAg
IEdka0V2ZW50KiBldmVudCA9IGdka19ldmVudF9uZXcoR0RLX0JVVFRPTl9QUkVTUyk7CisgICAg
ICAgIFdlYktpdERPTU5vZGUqIG5vZGU7CisgICAgICAgIGdpbnQgeCwgeTsKKworICAgICAgICAv
KiBDbG9zZSBlbm91Z2ggdG8gMCwwICovCisgICAgICAgIGV2ZW50LT5idXR0b24ueCA9IDU7Cisg
ICAgICAgIGV2ZW50LT5idXR0b24ueSA9IDU7CisKKyAgICAgICAgcmVzdWx0ID0gd2Via2l0X3dl
Yl92aWV3X2dldF9oaXRfdGVzdF9yZXN1bHQod2ViVmlldywgKEdka0V2ZW50QnV0dG9uKikgZXZl
bnQpOworICAgICAgICBnZGtfZXZlbnRfZnJlZShldmVudCk7CisgICAgICAgIGdfYXNzZXJ0KHJl
c3VsdCk7CisKKyAgICAgICAgZ19vYmplY3RfZ2V0KHJlc3VsdCwgImNvbnRleHQiLCAmY29udGV4
dCwgTlVMTCk7CisgICAgICAgIGdfYXNzZXJ0KGNvbnRleHQgJiBpbmZvLT5mbGFnKTsKKworICAg
ICAgICBnX29iamVjdF9nZXQocmVzdWx0LCAiaW5uZXItbm9kZSIsICZub2RlLCBOVUxMKTsKKyAg
ICAgICAgZ19hc3NlcnQobm9kZSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfTk9E
RShub2RlKSk7CisKKyAgICAgICAgZ19vYmplY3RfZ2V0KHJlc3VsdCwgIngiLCAmeCwgInkiLCAm
eSwgTlVMTCk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludCh4LCA9PSwgNSk7CisgICAgICAgIGdf
YXNzZXJ0X2NtcGludCh5LCA9PSwgNSk7CisKKyAgICAgICAgLyogV2UgY2FuIG9ubHkgdGVzdCB0
aGVzZSBub2RlIHR5cGVzIGF0IHRoZSBtb21lbnQuIEluIHRoZQorICAgICAgICAgKiBpbnB1dCBj
YXNlIHRoZXJlIHNlZW1zIHRvIGJlIGFuIGV4dHJhIGxheWVyIHdpdGggYSBESVYgb24KKyAgICAg
ICAgICogdG9wIG9mIHRoZSBpbnB1dCwgd2hpY2ggZ2V0cyBhc3NpZ25lZCB0byB0aGUgaW5uZXIt
bm9kZS4KKyAgICAgICAgICogdGFnICovCisgICAgICAgIGlmIChpbmZvLT5mbGFnID09IFdFQktJ
VF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9ET0NVTUVOVCkKKyAgICAgICAgICAgIGdfYXNzZXJ0
KFdFQktJVF9ET01fSVNfSFRNTF9IVE1MX0VMRU1FTlQobm9kZSkpOworICAgICAgICBlbHNlIGlm
IChpbmZvLT5mbGFnID09IFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9JTUFHRSkKKyAg
ICAgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9JTUFHRV9FTEVNRU5UKG5vZGUp
KTsKKyAgICAgICAgZWxzZSBpZiAoaW5mby0+ZmxhZyA9PSBXRUJLSVRfSElUX1RFU1RfUkVTVUxU
X0NPTlRFWFRfTElOSykgeworICAgICAgICAgICAgLyogVGhlIGhpdCB0ZXN0IHdpbGwgZ2l2ZSB1
cyB0aGUgaW5uZXIgdGV4dCBub2RlLCB3ZSB3YW50CisgICAgICAgICAgICAgKiB0aGUgQSB0YWcg
Ki8KKyAgICAgICAgICAgIFdlYktpdERPTU5vZGUqIHBhcmVudCA9IHdlYmtpdF9kb21fbm9kZV9n
ZXRfcGFyZW50X25vZGUobm9kZSk7CisgICAgICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lT
X0hUTUxfQU5DSE9SX0VMRU1FTlQocGFyZW50KSk7CisgICAgICAgIH0KKworICAgICAgICBnX29i
amVjdF91bnJlZihyZXN1bHQpOworICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworICAg
IH0KK30KKworc3RhdGljIHZvaWQKK3Rlc3Rfd2Via2l0X2hpdF90ZXN0X3Jlc3VsdChIaXRUZXN0
UmVzdWx0Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIFRlc3RJ
bmZvKiBpbmZvID0gKFRlc3RJbmZvKilkYXRhOworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlv
biA9IHsgMCwgMCwgNTAsIDUwIH07CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmco
Zml4dHVyZS0+d2ViVmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby0+
ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRleHQvaHRtbCIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1dGYtOCIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJmaWxlOi8vIik7CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdU
S19XSURHRVQoZml4dHVyZS0+d2ViVmlldyksICZhbGxvY2F0aW9uKTsKKyAgICBnX3NpZ25hbF9j
b25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFD
Syhsb2FkX3N0YXR1c19jYiksIGluZm8pOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKK30K
KworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIGd0a190ZXN0X2luaXQo
JmFyZ2MsICZhcmd2LCBOVUxMKTsKKworICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvIik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2hpdHRlc3RyZXN1bHQv
ZG9jdW1lbnQiLCBIaXRUZXN0UmVzdWx0Rml4dHVyZSwgCisgICAgICAgICAgICAgICB0ZXN0X2lu
Zm9fbmV3KCI8aHRtbD48Ym9keT48aDE+V2ViS2l0R1RLKyE8L2gxPjwvYm9keT48L2h0bWw+IiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05U
RVhUX0RPQ1VNRU5UKSwKKyAgICAgICAgICAgICAgIGhpdF90ZXN0X3Jlc3VsdF9maXh0dXJlX3Nl
dHVwLCB0ZXN0X3dlYmtpdF9oaXRfdGVzdF9yZXN1bHQsIGhpdF90ZXN0X3Jlc3VsdF9maXh0dXJl
X3RlYXJkb3duKTsKKyAgICAvKiBXZSBoYXJkY29kZSBhbGwgZWxlbWVudHMgdG8gYmUgYXQgMCww
IHNvIHRoYXQgd2Uga25vdyB3aGVyZSB0bworICAgICAqIGdlbmVyYXRlIHRoZSBidXR0b24gZXZl
bnRzICovCisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9oaXR0ZXN0cmVzdWx0L2ltYWdlIiwgSGl0
VGVzdFJlc3VsdEZpeHR1cmUsCisgICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KCI8aHRtbD48
Ym9keT48aW1nIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDowOyB0b3A6MCdzcmM9JzB4
ZGVhZGJlZWYnIHdpZHRoPTUwIGhlaWdodD01MD48L2ltZz48L2JvZHk+PC9odG1sPiIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9J
TUFHRSksCisgICAgICAgICAgICAgICBoaXRfdGVzdF9yZXN1bHRfZml4dHVyZV9zZXR1cCwgdGVz
dF93ZWJraXRfaGl0X3Rlc3RfcmVzdWx0LCBoaXRfdGVzdF9yZXN1bHRfZml4dHVyZV90ZWFyZG93
bik7CisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9oaXR0ZXN0cmVzdWx0L2VkaXRhYmxlIiwgSGl0
VGVzdFJlc3VsdEZpeHR1cmUsCisgICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KCI8aHRtbD48
Ym9keT48aW5wdXQgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjA7IHRvcDowJyBzaXpl
PSczNSc+PC9pbnB1dD4+PC9ib2R5PjwvaHRtbD4iLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfRURJVEFCTEUpLAorICAgICAgICAg
ICAgICAgaGl0X3Rlc3RfcmVzdWx0X2ZpeHR1cmVfc2V0dXAsIHRlc3Rfd2Via2l0X2hpdF90ZXN0
X3Jlc3VsdCwgaGl0X3Rlc3RfcmVzdWx0X2ZpeHR1cmVfdGVhcmRvd24pOworICAgIGdfdGVzdF9h
ZGQoIi93ZWJraXQvaGl0dGVzdHJlc3VsdC9saW5rIiwgSGl0VGVzdFJlc3VsdEZpeHR1cmUsCisg
ICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KCI8aHRtbD48Ym9keT48YSBzdHlsZT0ncG9zaXRp
b246YWJzb2x1dGU7IGxlZnQ6MDsgdG9wOjAnIGhyZWY9J2h0dHA6Ly93d3cuZXhhbXBsZS5jb20n
PkhFTExPIFdPUkxEPC9hPjwvYm9keT48L2h0bWw+IiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0xJTkspLAorICAgICAgICAgICAg
ICAgaGl0X3Rlc3RfcmVzdWx0X2ZpeHR1cmVfc2V0dXAsIHRlc3Rfd2Via2l0X2hpdF90ZXN0X3Jl
c3VsdCwgaGl0X3Rlc3RfcmVzdWx0X2ZpeHR1cmVfdGVhcmRvd24pOworICAgICAgICAgICAgICAg
CisgICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7Cit9CisKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RodHRwYmFja2VuZC5jIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGh0dHBiYWNrZW5kLmMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uOTM3NzY4NwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RodHRwYmFja2VuZC5jCkBAIC0wLDAgKzEs
NzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR3VzdGF2byBOb3JvbmhhIFNpbHZhCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5o
PgorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgorI2luY2x1ZGUg
PGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+CisKKy8vIE5vdCB5ZXQgcHVi
bGljIEFQSQorU291cE1lc3NhZ2UqIHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfZ2V0X21lc3NhZ2Uo
V2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QpOworCitzdGF0aWMgZ2Jvb2xlYW4gbmF2aWdh
dGlvbl9wb2xpY3lfZGVjaXNpb25fcmVxdWVzdGVkX2NiKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXZWJLaXRXZWJGcmFtZSogd2ViX2ZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXROZXR3b3JrUmVxdWVzdCogcmVxdWVz
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV2ViS2l0V2ViTmF2aWdhdGlvbkFjdGlvbiogYWN0aW9uLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRXZWJQb2xpY3lEZWNp
c2lvbiogZGVjaXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdwb2ludGVyIGRhdGEpCit7CisgICAgU291cE1lc3NhZ2UqIG1lc3Nh
Z2UgPSB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X2dldF9tZXNzYWdlKHJlcXVlc3QpOworCisgICAg
LyogMSAtPiB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X3dpdGhfY29yZV9yZXF1ZXN0CisgICAgICoK
KyAgICAgKiBUaGUgU291cE1lc3NhZ2UgaXMgY3JlYXRlZCBleGNsdXNpdmVseSBmb3IgdGhlIGVt
aXNzaW9uIG9mIHRoaXMKKyAgICAgKiBzaWduYWwuCisgICAgICovCisgICAgZ19hc3NlcnRfY21w
aW50KEdfT0JKRUNUKG1lc3NhZ2UpLT5yZWZfY291bnQsID09LCAxKTsKKworICAgIHJldHVybiBG
QUxTRTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9zb3VwX21lc3NhZ2VfbGlmZXRpbWUoKQorewor
ICAgIFdlYktpdFdlYlZpZXcqIHdlYl92aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJf
dmlld19uZXcoKSk7CisKKyAgICBnX29iamVjdF9yZWZfc2luayh3ZWJfdmlldyk7CisKKyAgICBn
X3NpZ25hbF9jb25uZWN0KHdlYl92aWV3LCAibmF2aWdhdGlvbi1wb2xpY3ktZGVjaXNpb24tcmVx
dWVzdGVkIiwKKyAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sobmF2aWdhdGlvbl9wb2xp
Y3lfZGVjaXNpb25fcmVxdWVzdGVkX2NiKSwKKyAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwor
CisgICAgLyogbG9hZF91cmkgd2lsbCB0cmlnZ2VyIHRoZSBuYXZpZ2F0aW9uLXBvbGljeS1kZWNp
c2lvbi1yZXF1ZXN0ZWQKKyAgICAgKiBzaWduYWwgZW1pc3Npb247CisgICAgICovCisgICAgd2Vi
a2l0X3dlYl92aWV3X2xvYWRfdXJpKHdlYl92aWV3LCAiaHR0cDovLzEyNy4wLjAuMS8iKTsKKwor
ICAgIGdfb2JqZWN0X3VucmVmKHdlYl92aWV3KTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNo
YXIqKiBhcmd2KQoreworICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKKwor
ICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7CisgICAgZ190
ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3NvdXBtZXNzYWdlL2xpZmV0aW1lIiwgdGVzdF9zb3VwX21l
c3NhZ2VfbGlmZXRpbWUpOworICAgIHJldHVybiBnX3Rlc3RfcnVuICgpOworfQpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGtleWV2ZW50cy5jIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGtleWV2ZW50cy5jCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjZDAxZjMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0a2V5ZXZlbnRzLmMKQEAg
LTAsMCArMSwzOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgTWFydGluIFJv
Ymluc29uIDxtcm9iaW5zb25Ad2Via2l0Lm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgor
I2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNDb250ZXh0UmVmLmg+CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjaGFyKiBwYWdl
OworICAgIGNoYXIqIHRleHQ7CisgICAgZ2Jvb2xlYW4gc2hvdWxkQmVIYW5kbGVkOworfSBUZXN0
SW5mbzsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIEd0a1dpZGdldCogd2luZG93OworICAgIFdl
YktpdFdlYlZpZXcqIHdlYlZpZXc7CisgICAgR01haW5Mb29wKiBsb29wOworICAgIFRlc3RJbmZv
KiBpbmZvOworfSBLZXlFdmVudEZpeHR1cmU7CisKK1Rlc3RJbmZvKgordGVzdF9pbmZvX25ldyhj
b25zdCBjaGFyKiBwYWdlLCBnYm9vbGVhbiBzaG91bGRCZUhhbmRsZWQpCit7CisgICAgVGVzdElu
Zm8qIGluZm87CisKKyAgICBpbmZvID0gZ19zbGljZV9uZXcoVGVzdEluZm8pOworICAgIGluZm8t
PnBhZ2UgPSBnX3N0cmR1cChwYWdlKTsKKyAgICBpbmZvLT5zaG91bGRCZUhhbmRsZWQgPSBzaG91
bGRCZUhhbmRsZWQ7CisgICAgaW5mby0+dGV4dCA9IDA7CisKKyAgICByZXR1cm4gaW5mbzsKK30K
Kwordm9pZAordGVzdF9pbmZvX2Rlc3Ryb3koVGVzdEluZm8qIGluZm8pCit7CisgICAgZ19mcmVl
KGluZm8tPnBhZ2UpOworICAgIGdfZnJlZShpbmZvLT50ZXh0KTsKKyAgICBnX3NsaWNlX2ZyZWUo
VGVzdEluZm8sIGluZm8pOworfQorCitzdGF0aWMgdm9pZCBrZXlfZXZlbnRfZml4dHVyZV9zZXR1
cChLZXlFdmVudEZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBm
aXh0dXJlLT5sb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworCisgICAgZml4dHVy
ZS0+d2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7CisgICAgZml4
dHVyZS0+d2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwor
CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihmaXh0dXJlLT53aW5kb3cpLCBH
VEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpKTsKK30KKworc3RhdGljIHZvaWQga2V5X2V2ZW50
X2ZpeHR1cmVfdGVhcmRvd24oS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVy
IGRhdGEpCit7CisgICAgZ3RrX3dpZGdldF9kZXN0cm95KGZpeHR1cmUtPndpbmRvdyk7CisgICAg
Z19tYWluX2xvb3BfdW5yZWYoZml4dHVyZS0+bG9vcCk7CisgICAgdGVzdF9pbmZvX2Rlc3Ryb3ko
Zml4dHVyZS0+aW5mbyk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBrZXlfcHJlc3NfZXZlbnRfY2Io
V2ViS2l0V2ViVmlldyogd2ViVmlldywgR2RrRXZlbnQqIGV2ZW50LCBncG9pbnRlciBkYXRhKQor
eworICAgIEtleUV2ZW50Rml4dHVyZSogZml4dHVyZSA9IChLZXlFdmVudEZpeHR1cmUqKWRhdGE7
CisgICAgZ2Jvb2xlYW4gaGFuZGxlZCA9IEdUS19XSURHRVRfR0VUX0NMQVNTKGZpeHR1cmUtPndl
YlZpZXcpLT5rZXlfcHJlc3NfZXZlbnQoR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSwgJmV2
ZW50LT5rZXkpOworICAgIGdfYXNzZXJ0X2NtcGludChoYW5kbGVkLCA9PSwgZml4dHVyZS0+aW5m
by0+c2hvdWxkQmVIYW5kbGVkKTsKKworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGdi
b29sZWFuIGtleV9yZWxlYXNlX2V2ZW50X2NiKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEdka0V2
ZW50KiBldmVudCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICAvLyBXZWJDb3JlIG5ldmVyIHNlZW1z
IHRvIG1hcmsga2V5dXAgZXZlbnRzIGFzIGhhbmRsZWQuCisgICAgS2V5RXZlbnRGaXh0dXJlKiBm
aXh0dXJlID0gKEtleUV2ZW50Rml4dHVyZSopZGF0YTsKKyAgICBnYm9vbGVhbiBoYW5kbGVkID0g
R1RLX1dJREdFVF9HRVRfQ0xBU1MoZml4dHVyZS0+d2ViVmlldyktPmtleV9wcmVzc19ldmVudChH
VEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpLCAmZXZlbnQtPmtleSk7CisgICAgZ19hc3NlcnQo
IWhhbmRsZWQpOworCisgICAgZ19tYWluX2xvb3BfcXVpdChmaXh0dXJlLT5sb29wKTsKKworICAg
IHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9rZXlwcmVzc19ldmVudHNfbG9h
ZF9zdGF0dXNfY2IoV2ViS2l0V2ViVmlldyogd2ViVmlldywgR1BhcmFtU3BlYyogc3BlYywgZ3Bv
aW50ZXIgZGF0YSkKK3sKKyAgICBLZXlFdmVudEZpeHR1cmUqIGZpeHR1cmUgPSAoS2V5RXZlbnRG
aXh0dXJlKilkYXRhOworICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92
aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJWaWV3KTsKKyAgICBpZiAoc3RhdHVzID09IFdFQktJVF9M
T0FEX0ZJTklTSEVEKSB7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2ViVmll
dywgImtleS1wcmVzcy1ldmVudCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFD
SyhrZXlfcHJlc3NfZXZlbnRfY2IpLCBmaXh0dXJlKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVj
dChmaXh0dXJlLT53ZWJWaWV3LCAia2V5LXJlbGVhc2UtZXZlbnQiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIEdfQ0FMTEJBQ0soa2V5X3JlbGVhc2VfZXZlbnRfY2IpLCBmaXh0dXJlKTsKKyAg
ICAgICAgaWYgKCFndGtfdGVzdF93aWRnZXRfc2VuZF9rZXkoR1RLX1dJREdFVChmaXh0dXJlLT53
ZWJWaWV3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RrX3VuaWNv
ZGVfdG9fa2V5dmFsKCdhJyksIDApKQorICAgICAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQo
KTsKKyAgICB9CisKK30KKworZ2Jvb2xlYW4gbWFwX2V2ZW50X2NiKEd0a1dpZGdldCAqd2lkZ2V0
LCBHZGtFdmVudCogZXZlbnQsIGdwb2ludGVyIGRhdGEpCit7CisgICAgS2V5RXZlbnRGaXh0dXJl
KiBmaXh0dXJlID0gKEtleUV2ZW50Rml4dHVyZSopZGF0YTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdf
bG9hZF9zdHJpbmcoZml4dHVyZS0+d2ViVmlldywgZml4dHVyZS0+aW5mby0+cGFnZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgInRleHQvaHRtbCIsICJ1dGYtOCIsICJmaWxlOi8v
Iik7CisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZCBzZXR1cF9rZXlldmVudF90
ZXN0KEtleUV2ZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhLCBHQ2FsbGJh
Y2sgbG9hZF9ldmVudF9jYWxsYmFjaykKK3sKKyAgICBmaXh0dXJlLT5pbmZvID0gKFRlc3RJbmZv
KilkYXRhOworICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2luZG93LCAibWFwLWV2ZW50
IiwKKyAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sobWFwX2V2ZW50X2NiKSwgZml4dHVy
ZSk7CisKKyAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMoR1RLX1dJREdFVChmaXh0dXJlLT53ZWJW
aWV3KSk7CisgICAgZ3RrX3dpZGdldF9zaG93KGZpeHR1cmUtPndpbmRvdyk7CisgICAgZ3RrX3dp
ZGdldF9zaG93KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldykpOworICAgIGd0a193aW5kb3df
cHJlc2VudChHVEtfV0lORE9XKGZpeHR1cmUtPndpbmRvdykpOworCisgICAgZ19zaWduYWxfY29u
bmVjdChmaXh0dXJlLT53ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsCisgICAgICAgICAg
ICAgICAgICAgICBsb2FkX2V2ZW50X2NhbGxiYWNrLCBmaXh0dXJlKTsKKworICAgIGdfbWFpbl9s
b29wX3J1bihmaXh0dXJlLT5sb29wKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9rZXlwcmVzc19l
dmVudHMoS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7Cisg
ICAgc2V0dXBfa2V5ZXZlbnRfdGVzdChmaXh0dXJlLCBkYXRhLCBHX0NBTExCQUNLKHRlc3Rfa2V5
cHJlc3NfZXZlbnRzX2xvYWRfc3RhdHVzX2NiKSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBlbGVt
ZW50X3RleHRfZXF1YWxfdG8oSlNDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IGdjaGFyKiB0ZXh0
KQoreworICAgIEpTU3RyaW5nUmVmIHNjcmlwdFN0cmluZyA9IEpTU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKAorICAgICAgIndpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImluXCIp
LnZhbHVlOyIpOworICAgIEpTVmFsdWVSZWYgdmFsdWUgPSBKU0V2YWx1YXRlU2NyaXB0KGNvbnRl
eHQsIHNjcmlwdFN0cmluZywgMCwgMCwgMCwgMCk7CisgICAgSlNTdHJpbmdSZWxlYXNlKHNjcmlw
dFN0cmluZyk7CisKKyAgICAvLyBJZiB0aGUgdmFsdWUgaXNuJ3QgYSBzdHJpbmcsIHRoZSBlbGVt
ZW50IGlzIHByb2JhYmx5IGEgZGl2CisgICAgLy8gc28gZ3JhYiB0aGUgaW5uZXJUZXh0IGluc3Rl
YWQuCisgICAgaWYgKCFKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgdmFsdWUpKSB7CisgICAgICAg
IEpTU3RyaW5nUmVmIHNjcmlwdFN0cmluZyA9IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KAorICAgICAgICAgICJ3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJpblwiKS5pbm5l
clRleHQ7Iik7CisgICAgICAgIHZhbHVlID0gSlNFdmFsdWF0ZVNjcmlwdChjb250ZXh0LCBzY3Jp
cHRTdHJpbmcsIDAsIDAsIDAsIDApOworICAgICAgICBKU1N0cmluZ1JlbGVhc2Uoc2NyaXB0U3Ry
aW5nKTsKKyAgICB9CisKKyAgICBnX2Fzc2VydChKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgdmFs
dWUpKTsKKyAgICBKU1N0cmluZ1JlZiBpbnB1dFN0cmluZyA9IEpTVmFsdWVUb1N0cmluZ0NvcHko
Y29udGV4dCwgdmFsdWUsIDApOworICAgIGdfYXNzZXJ0KGlucHV0U3RyaW5nKTsKKworICAgIGdp
bnQgc2l6ZSA9IEpTU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShpbnB1dFN0cmluZyk7
CisgICAgZ2NoYXIqIGNTdHJpbmcgPSBnX21hbGxvYyhzaXplKTsKKyAgICBKU1N0cmluZ0dldFVU
RjhDU3RyaW5nKGlucHV0U3RyaW5nLCBjU3RyaW5nLCBzaXplKTsKKyAgICBKU1N0cmluZ1JlbGVh
c2UoaW5wdXRTdHJpbmcpOworCisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gZ191dGY4X2NvbGxhdGUo
Y1N0cmluZywgdGV4dCkgPT0gMDsKKyAgICBnX2ZyZWUoY1N0cmluZyk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworc3RhdGljIHZvaWQgdGVzdF9pbWVfbG9hZF9zdGF0dXNfY2IoV2ViS2l0V2Vi
Vmlldyogd2ViVmlldywgR1BhcmFtU3BlYyogc3BlYywgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBL
ZXlFdmVudEZpeHR1cmUqIGZpeHR1cmUgPSAoS2V5RXZlbnRGaXh0dXJlKilkYXRhOworICAgIFdl
YktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh3
ZWJWaWV3KTsKKyAgICBpZiAoc3RhdHVzICE9IFdFQktJVF9MT0FEX0ZJTklTSEVEKQorICAgICAg
ICByZXR1cm47CisKKyAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCA9IHdlYmtpdF93ZWJf
ZnJhbWVfZ2V0X2dsb2JhbF9jb250ZXh0KAorICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21h
aW5fZnJhbWUod2ViVmlldykpOworICAgIGdfYXNzZXJ0KGNvbnRleHQpOworCisgICAgR3RrSU1D
b250ZXh0KiBpbUNvbnRleHQgPSAwOworICAgIGdfb2JqZWN0X2dldCh3ZWJWaWV3LCAiaW0tY29u
dGV4dCIsICZpbUNvbnRleHQsIE5VTEwpOworICAgIGdfYXNzZXJ0KGltQ29udGV4dCk7CisKKyAg
ICAvLyBUZXN0IHRoYXQgY29tbWl0cyB0aGF0IGhhcHBlbiBvdXRzaWRlIG9mIGtleSBldmVudHMK
KyAgICAvLyBjaGFuZ2UgdGhlIHRleHQgZmllbGQgaW1tZWRpYXRlbHkuIFRoaXMgY2xvc2VseSBy
ZXBsaWNhdGVzCisgICAgLy8gdGhlIGJlaGF2aW9yIG9mIFNDSU0uCisgICAgZ19hc3NlcnQoZWxl
bWVudF90ZXh0X2VxdWFsX3RvKGNvbnRleHQsICIiKSk7CisgICAgZ19zaWduYWxfZW1pdF9ieV9u
YW1lKGltQ29udGV4dCwgImNvbW1pdCIsICJhIik7CisgICAgZ19hc3NlcnQoZWxlbWVudF90ZXh0
X2VxdWFsX3RvKGNvbnRleHQsICJhIikpOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShpbUNv
bnRleHQsICJjb21taXQiLCAiYiIpOworICAgIGdfYXNzZXJ0KGVsZW1lbnRfdGV4dF9lcXVhbF90
byhjb250ZXh0LCAiYWIiKSk7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKGltQ29udGV4dCwg
ImNvbW1pdCIsICJjIik7CisgICAgZ19hc3NlcnQoZWxlbWVudF90ZXh0X2VxdWFsX3RvKGNvbnRl
eHQsICJhYmMiKSk7CisKKyAgICBnX29iamVjdF91bnJlZihpbUNvbnRleHQpOworICAgIGdfbWFp
bl9sb29wX3F1aXQoZml4dHVyZS0+bG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfaW1lKEtl
eUV2ZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIHNldHVw
X2tleWV2ZW50X3Rlc3QoZml4dHVyZSwgZGF0YSwgR19DQUxMQkFDSyh0ZXN0X2ltZV9sb2FkX3N0
YXR1c19jYikpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gdmVyaWZ5X2NvbnRlbnRzKGdwb2ludGVy
IGRhdGEpCit7CisgICAgS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJlID0gKEtleUV2ZW50Rml4dHVy
ZSopZGF0YTsKKyAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCA9IHdlYmtpdF93ZWJfZnJh
bWVfZ2V0X2dsb2JhbF9jb250ZXh0KAorICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5f
ZnJhbWUoZml4dHVyZS0+d2ViVmlldykpOworICAgIGdfYXNzZXJ0KGNvbnRleHQpOworCisgICAg
Z19hc3NlcnQoZWxlbWVudF90ZXh0X2VxdWFsX3RvKGNvbnRleHQsIGZpeHR1cmUtPmluZm8tPnRl
eHQpKTsKKyAgICBnX21haW5fbG9vcF9xdWl0KGZpeHR1cmUtPmxvb3ApOworICAgIHJldHVybiBG
QUxTRTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9ibG9ja2luZ19sb2FkX3N0YXR1c19jYihXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3LCBHUGFyYW1TcGVjKiBzcGVjLCBncG9pbnRlciBkYXRhKQorewor
ICAgIEtleUV2ZW50Rml4dHVyZSogZml4dHVyZSA9IChLZXlFdmVudEZpeHR1cmUqKWRhdGE7Cisg
ICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3Rh
dHVzKHdlYlZpZXcpOworICAgIGlmIChzdGF0dXMgIT0gV0VCS0lUX0xPQURfRklOSVNIRUQpCisg
ICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSBmaXJzdCBrZXlwcmVzcyBldmVudCBzaG91bGQg
bm90IG1vZGlmeSB0aGUgZmllbGQuCisgICAgZml4dHVyZS0+aW5mby0+dGV4dCA9IGdfc3RyZHVw
KCJiYyIpOworICAgIGlmICghZ3RrX3Rlc3Rfd2lkZ2V0X3NlbmRfa2V5KEdUS19XSURHRVQoZml4
dHVyZS0+d2ViVmlldyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGtfdW5p
Y29kZV90b19rZXl2YWwoJ2EnKSwgMCkpCisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7
CisgICAgaWYgKCFndGtfdGVzdF93aWRnZXRfc2VuZF9rZXkoR1RLX1dJREdFVChmaXh0dXJlLT53
ZWJWaWV3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGtfdW5pY29kZV90
b19rZXl2YWwoJ2InKSwgMCkpCisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAg
aWYgKCFndGtfdGVzdF93aWRnZXRfc2VuZF9rZXkoR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGtfdW5pY29kZV90b19rZXl2
YWwoJ2MnKSwgMCkpCisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisKKyAgICBnX2lk
bGVfYWRkKHZlcmlmeV9jb250ZW50cywgZml4dHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rf
YmxvY2tpbmcoS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7
CisgICAgc2V0dXBfa2V5ZXZlbnRfdGVzdChmaXh0dXJlLCBkYXRhLCBHX0NBTExCQUNLKHRlc3Rf
YmxvY2tpbmdfbG9hZF9zdGF0dXNfY2IpKTsKK30KKworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lO
R19YMTEpCitzdGF0aWMgdm9pZCB0ZXN0X3hpbV9sb2FkX3N0YXR1c19jYihXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3LCBHUGFyYW1TcGVjKiBzcGVjLCBncG9pbnRlciBkYXRhKQoreworICAgIEtleUV2
ZW50Rml4dHVyZSogZml4dHVyZSA9IChLZXlFdmVudEZpeHR1cmUqKWRhdGE7CisgICAgV2ViS2l0
TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYlZp
ZXcpOworICAgIGlmIChzdGF0dXMgIT0gV0VCS0lUX0xPQURfRklOSVNIRUQpCisgICAgICAgIHJl
dHVybjsKKworICAgIEd0a0lNQ29udGV4dCogaW1Db250ZXh0ID0gMDsKKyAgICBnX29iamVjdF9n
ZXQod2ViVmlldywgImltLWNvbnRleHQiLCAmaW1Db250ZXh0LCBOVUxMKTsKKyAgICBnX2Fzc2Vy
dChpbUNvbnRleHQpOworCisgICAgZ2NoYXIqIG9yaWdpbmFsSWQgPSBnX3N0cmR1cChndGtfaW1f
bXVsdGljb250ZXh0X2dldF9jb250ZXh0X2lkKEdUS19JTV9NVUxUSUNPTlRFWFQoaW1Db250ZXh0
KSkpOworICAgIGd0a19pbV9tdWx0aWNvbnRleHRfc2V0X2NvbnRleHRfaWQoR1RLX0lNX01VTFRJ
Q09OVEVYVChpbUNvbnRleHQpLCAieGltIik7CisKKyAgICAvLyBUZXN0IHRoYXQgY29tbWl0cyB0
aGF0IGhhcHBlbiBvdXRzaWRlIG9mIGtleSBldmVudHMKKyAgICAvLyBjaGFuZ2UgdGhlIHRleHQg
ZmllbGQgaW1tZWRpYXRlbHkuIFRoaXMgY2xvc2VseSByZXBsaWNhdGVzCisgICAgLy8gdGhlIGJl
aGF2aW9yIG9mIFNDSU0uCisgICAgZml4dHVyZS0+aW5mby0+dGV4dCA9IGdfc3RyZHVwKCJkZWJp
YW4iKTsKKyAgICBpZiAoIWd0a190ZXN0X3dpZGdldF9zZW5kX2tleShHVEtfV0lER0VUKGZpeHR1
cmUtPndlYlZpZXcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RrX3VuaWNv
ZGVfdG9fa2V5dmFsKCdkJyksIDApKQorICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwor
ICAgIGlmICghZ3RrX3Rlc3Rfd2lkZ2V0X3NlbmRfa2V5KEdUS19XSURHRVQoZml4dHVyZS0+d2Vi
VmlldyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdka191bmljb2RlX3RvX2tleXZh
bCgnZScpLCAwKSkKKyAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICBpZiAoIWd0
a190ZXN0X3dpZGdldF9zZW5kX2tleShHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnZGtfdW5pY29kZV90b19rZXl2YWwoJ2InKSwgMCkp
CisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgaWYgKCFndGtfdGVzdF93aWRn
ZXRfc2VuZF9rZXkoR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2RrX3VuaWNvZGVfdG9fa2V5dmFsKCdpJyksIDApKQorICAgICAgICBn
X2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgIGlmICghZ3RrX3Rlc3Rfd2lkZ2V0X3NlbmRfa2V5
KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldyksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdka191bmljb2RlX3RvX2tleXZhbCgnYScpLCAwKSkKKyAgICAgICAgZ19hc3NlcnRfbm90
X3JlYWNoZWQoKTsKKyAgICBpZiAoIWd0a190ZXN0X3dpZGdldF9zZW5kX2tleShHVEtfV0lER0VU
KGZpeHR1cmUtPndlYlZpZXcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGtfdW5p
Y29kZV90b19rZXl2YWwoJ24nKSwgMCkpCisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7
CisKKyAgICBndGtfaW1fbXVsdGljb250ZXh0X3NldF9jb250ZXh0X2lkKEdUS19JTV9NVUxUSUNP
TlRFWFQoaW1Db250ZXh0KSwgb3JpZ2luYWxJZCk7CisgICAgZ19mcmVlKG9yaWdpbmFsSWQpOwor
ICAgIGdfb2JqZWN0X3VucmVmKGltQ29udGV4dCk7CisKKyAgICBnX2lkbGVfYWRkKHZlcmlmeV9j
b250ZW50cywgZml4dHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfeGltKEtleUV2ZW50Rml4
dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIHNldHVwX2tleWV2ZW50
X3Rlc3QoZml4dHVyZSwgZGF0YSwgR19DQUxMQkFDSyh0ZXN0X3hpbV9sb2FkX3N0YXR1c19jYikp
OworfQorI2VuZGlmCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBn
dGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7CisKKyAgICBnX3Rlc3RfYnVnX2Jhc2Uo
Imh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOworCisKKyAgICAvLyBXZSdsbCB0ZXN0IGlucHV0
IG9uIGEgc2xldyBvZiBkaWZmZXJlbnQgbm9kZSB0eXBlcy4gS2V5IGV2ZW50cyB0bworICAgIC8v
IHRleHQgaW5wdXRzIGFuZCBlZGl0YWJsZSBkaXZzIHNob3VsZCBiZSBtYXJrZWQgYXMgaGFuZGxl
ZC4gS2V5IGV2ZW50cworICAgIC8vIHRvIGJ1dHRvbnMgYW5kIGxpbmtzIHNob3VsZCBub3QuCisg
ICAgY29uc3QgY2hhciogdGV4dGlucHV0X2h0bWwgPSAiPGh0bWw+PGJvZHk+PGlucHV0IGlkPVwi
aW5cIiB0eXBlPVwidGV4dFwiPiIKKyAgICAgICAgIjxzY3JpcHQ+ZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2luJykuZm9jdXMoKTs8L3NjcmlwdD48L2JvZHk+PC9odG1sPiI7CisgICAgY29uc3Qg
Y2hhciogYnV0dG9uX2h0bWwgPSAiPGh0bWw+PGJvZHk+PGlucHV0IGlkPVwiaW5cIiB0eXBlPVwi
YnV0dG9uXCI+IgorICAgICAgICAiPHNjcmlwdD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW4n
KS5mb2N1cygpOzwvc2NyaXB0PjwvYm9keT48L2h0bWw+IjsKKyAgICBjb25zdCBjaGFyKiBsaW5r
X2h0bWwgPSAiPGh0bWw+PGJvZHk+PGEgaHJlZj1cImh0dHA6Ly93d3cuZ25vbWUub3JnXCIgaWQ9
XCJpblwiPiIKKyAgICAgICAgIkxJTktZIE1DTElOS0VSU09OPC9hPjxzY3JpcHQ+ZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2luJykuZm9jdXMoKTs8L3NjcmlwdD4iCisgICAgICAgICI8L2JvZHk+
PC9odG1sPiI7CisgICAgY29uc3QgY2hhciogZGl2X2h0bWwgPSAiPGh0bWw+PGJvZHk+PGRpdiBp
ZD1cImluXCIgY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiPiIKKyAgICAgICAgIjxzY3JpcHQ+ZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2luJykuZm9jdXMoKTs8L3NjcmlwdD48L2JvZHk+PC9odG1s
PiI7CisKKyAgICAvLyBUaGVzZSBhcmUgc2ltaWxhciB0byB0aGUgYmxvY2tzIGFib3ZlLCBidXQg
dGhleSBzaG91bGQgYmxvY2sgdGhlIGZpcnN0CisgICAgLy8ga2V5cHJlc3MgbW9kaWZ5aW5nIHRo
ZSBlZGl0YWJsZSBub2RlLgorICAgIGNvbnN0IGNoYXIqIHRleHRpbnB1dF9odG1sX2Jsb2NraW5n
ID0gIjxodG1sPjxib2R5PiIKKyAgICAgICAgIjxpbnB1dCBpZD1cImluXCIgdHlwZT1cInRleHRc
IiAiCisgICAgICAgICJvbmtleXByZXNzPVwiaWYgKGZpcnN0KSB7ZXZlbnQucHJldmVudERlZmF1
bHQoKTtmaXJzdD1mYWxzZTt9XCI+IgorICAgICAgICAiPHNjcmlwdD5maXJzdCA9IHRydWU7XG5k
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW4nKS5mb2N1cygpOzwvc2NyaXB0PlxuIgorICAgICAg
ICAiPC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4iOworICAgIGNvbnN0IGNoYXIqIGRpdl9odG1sX2Js
b2NraW5nID0gIjxodG1sPjxib2R5PiIKKyAgICAgICAgIjxkaXYgaWQ9XCJpblwiIGNvbnRlbnRl
ZGl0YWJsZT1cInRydWVcIiAiCisgICAgICAgICJvbmtleXByZXNzPVwiaWYgKGZpcnN0KSB7ZXZl
bnQucHJldmVudERlZmF1bHQoKTtmaXJzdD1mYWxzZTt9XCI+IgorICAgICAgICAiPHNjcmlwdD5m
aXJzdCA9IHRydWU7IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbicpLmZvY3VzKCk7PC9zY3Jp
cHQ+XG4iCisgICAgICAgICI8L3NjcmlwdD48L2JvZHk+PC9odG1sPiI7CisKKyAgICBnX3Rlc3Rf
YWRkKCIvd2Via2l0L2tleWV2ZW50cy9ldmVudC10ZXh0aW5wdXQiLCBLZXlFdmVudEZpeHR1cmUs
CisgICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KHRleHRpbnB1dF9odG1sLCBUUlVFKSwKKyAg
ICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVz
dF9rZXlwcmVzc19ldmVudHMsCisgICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV90ZWFy
ZG93bik7CisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9rZXlldmVudHMvZXZlbnQtYnV0dG9ucyIs
IEtleUV2ZW50Rml4dHVyZSwKKyAgICAgICAgICAgICAgIHRlc3RfaW5mb19uZXcoYnV0dG9uX2h0
bWwsIEZBTFNFKSwKKyAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3NldHVwLAorICAg
ICAgICAgICAgICAgdGVzdF9rZXlwcmVzc19ldmVudHMsCisgICAgICAgICAgICAgICBrZXlfZXZl
bnRfZml4dHVyZV90ZWFyZG93bik7CisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9rZXlldmVudHMv
ZXZlbnQtbGluayIsIEtleUV2ZW50Rml4dHVyZSwKKyAgICAgICAgICAgICAgIHRlc3RfaW5mb19u
ZXcobGlua19odG1sLCBGQUxTRSksCisgICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV9z
ZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3Rfa2V5cHJlc3NfZXZlbnRzLAorICAgICAgICAgICAg
ICAga2V5X2V2ZW50X2ZpeHR1cmVfdGVhcmRvd24pOworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQv
a2V5ZXZlbnQvZXZlbnQtZGl2IiwgS2V5RXZlbnRGaXh0dXJlLAorICAgICAgICAgICAgICAgdGVz
dF9pbmZvX25ldyhkaXZfaHRtbCwgVFJVRSksCisgICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4
dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3Rfa2V5cHJlc3NfZXZlbnRzLAorICAgICAg
ICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfdGVhcmRvd24pOworICAgIGdfdGVzdF9hZGQoIi93
ZWJraXQva2V5ZXZlbnQvaW1lLXRleHRpbnB1dCIsIEtleUV2ZW50Rml4dHVyZSwKKyAgICAgICAg
ICAgICAgIHRlc3RfaW5mb19uZXcodGV4dGlucHV0X2h0bWwsIFRSVUUpLAorICAgICAgICAgICAg
ICAga2V5X2V2ZW50X2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0X2ltZSwKKyAg
ICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3RlYXJkb3duKTsKKyAgICBnX3Rlc3RfYWRk
KCIvd2Via2l0L2tleWV2ZW50L2ltZS1kaXYiLCBLZXlFdmVudEZpeHR1cmUsCisgICAgICAgICAg
ICAgICB0ZXN0X2luZm9fbmV3KGRpdl9odG1sLCBUUlVFKSwKKyAgICAgICAgICAgICAgIGtleV9l
dmVudF9maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF9pbWUsCisgICAgICAgICAg
ICAgICBrZXlfZXZlbnRfZml4dHVyZV90ZWFyZG93bik7CisgICAgZ190ZXN0X2FkZCgiL3dlYmtp
dC9rZXlldmVudC9ibG9jay10ZXh0aW5wdXQiLCBLZXlFdmVudEZpeHR1cmUsCisgICAgICAgICAg
ICAgICB0ZXN0X2luZm9fbmV3KHRleHRpbnB1dF9odG1sX2Jsb2NraW5nLCBUUlVFKSwKKyAgICAg
ICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF9i
bG9ja2luZywKKyAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3RlYXJkb3duKTsKKyAg
ICBnX3Rlc3RfYWRkKCIvd2Via2l0L2tleWV2ZW50L2Jsb2NrLWRpdiIsIEtleUV2ZW50Rml4dHVy
ZSwKKyAgICAgICAgICAgICAgIHRlc3RfaW5mb19uZXcoZGl2X2h0bWxfYmxvY2tpbmcsIFRSVUUp
LAorICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAg
ICB0ZXN0X2Jsb2NraW5nLAorICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfdGVhcmRv
d24pOworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpCisgICAgZ190ZXN0X2FkZCgiL3dl
YmtpdC9rZXlldmVudC94aW0tdGV4dGlucHV0IiwgS2V5RXZlbnRGaXh0dXJlLAorICAgICAgICAg
ICAgICAgdGVzdF9pbmZvX25ldyh0ZXh0aW5wdXRfaHRtbCwgVFJVRSksCisgICAgICAgICAgICAg
ICBrZXlfZXZlbnRfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3RfeGltLAorICAg
ICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfdGVhcmRvd24pOworICAgIGdfdGVzdF9hZGQo
Ii93ZWJraXQva2V5ZXZlbnQveGltLWRpdiIsIEtleUV2ZW50Rml4dHVyZSwKKyAgICAgICAgICAg
ICAgIHRlc3RfaW5mb19uZXcoZGl2X2h0bWwsIFRSVUUpLAorICAgICAgICAgICAgICAga2V5X2V2
ZW50X2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0X3hpbSwKKyAgICAgICAgICAg
ICAgIGtleV9ldmVudF9maXh0dXJlX3RlYXJkb3duKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIGdf
dGVzdF9ydW4oKTsKK30KKwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRHdGsvdGVzdGxvYWRpbmcuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
R3RrL3Rlc3Rsb2FkaW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBh
OTIwZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
R3RrL3Rlc3Rsb2FkaW5nLmMKQEAgLTAsMCArMSw0MzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDksIDIwMTAgR3VzdGF2byBOb3JvbmhhIFNpbHZhCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
SWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNp
bmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx3
ZWJraXQvd2Via2l0Lmg+CisKKy8qIFRoaXMgc3RyaW5nIGhhcyB0byBiZSByYXRoZXIgYmlnIGJl
Y2F1c2Ugb2YgdGhlIGNhbmNlbGxlZCB0ZXN0IC0gaXQKKyAqIGxvb2tzIGxpa2Ugc291cCByZWZ1
c2VzIHRvIHNlbmQgb3IgcmVjZWl2ZSBhIHRvbyBzbWFsbCBjaHVuayAqLworI2RlZmluZSBIVE1M
X1NUUklORyAiPGh0bWw+PGJvZHk+VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nITwvYm9keT48L2h0bWw+IgorCitTb3VwVVJJKiBiYXNl
X3VyaTsKKworLyogRm9yIHJlYWwgcmVxdWVzdCB0ZXN0aW5nICovCitzdGF0aWMgdm9pZAorc2Vy
dmVyX2NhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1zZywKKyAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiBxdWVyeSwKKyAgICAgICAg
ICAgICAgICBTb3VwQ2xpZW50Q29udGV4dCogY29udGV4dCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAg
ICBpZiAobXNnLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7CisgICAgICAgIHNvdXBfbWVz
c2FnZV9zZXRfc3RhdHVzKG1zZywgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1zZywgU09V
UF9TVEFUVVNfT0spOworCisgICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvdGVzdF9sb2FkaW5n
X3N0YXR1cyIpIHx8IGdfc3RyX2VxdWFsKHBhdGgsICIvdGVzdF9sb2FkaW5nX3N0YXR1czIiKSkK
KyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1zZy0+cmVzcG9uc2VfYm9keSwgU09V
UF9NRU1PUllfU1RBVElDLCBIVE1MX1NUUklORywgc3RybGVuKEhUTUxfU1RSSU5HKSk7CisgICAg
ZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi90ZXN0X2xvYWRfZXJyb3IiKSkgeworICAgICAg
ICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX0NBTlRfQ09OTkVDVCk7
CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3Rlc3RfbG9hZGluZ19jYW5jZWxs
ZWQiKSkgeworICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19zZXRfZW5jb2RpbmcobXNnLT5y
ZXNwb25zZV9oZWFkZXJzLCBTT1VQX0VOQ09ESU5HX0NIVU5LRUQpOworICAgICAgICBzb3VwX21l
c3NhZ2VfYm9keV9hcHBlbmQobXNnLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMs
IEhUTUxfU1RSSU5HLCBzdHJsZW4oSFRNTF9TVFJJTkcpKTsKKyAgICAgICAgc291cF9zZXJ2ZXJf
dW5wYXVzZV9tZXNzYWdlKHNlcnZlciwgbXNnKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1zZy0+cmVzcG9uc2VfYm9keSk7Cit9CisK
K3R5cGVkZWYgc3RydWN0IHsKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OworICAgIEdNYWlu
TG9vcCAqbG9vcDsKKyAgICBnYm9vbGVhbiBoYXNfYmVlbl9wcm92aXNpb25hbDsKKyAgICBnYm9v
bGVhbiBoYXNfYmVlbl9jb21taXR0ZWQ7CisgICAgZ2Jvb2xlYW4gaGFzX2JlZW5fZmlyc3Rfdmlz
dWFsbHlfbm9uX2VtcHR5X2xheW91dDsKKyAgICBnYm9vbGVhbiBoYXNfYmVlbl9maW5pc2hlZDsK
KyAgICBnYm9vbGVhbiBoYXNfYmVlbl9mYWlsZWQ7CisgICAgZ2Jvb2xlYW4gaGFzX2JlZW5fbG9h
ZF9lcnJvcjsKK30gV2ViTG9hZGluZ0ZpeHR1cmU7CisKK3N0YXRpYyB2b2lkIHdlYl9sb2FkaW5n
X2ZpeHR1cmVfc2V0dXAoV2ViTG9hZGluZ0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIg
ZGF0YSkKK3sKKyAgICBmaXh0dXJlLT53ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93
ZWJfdmlld19uZXcoKSk7CisgICAgZml4dHVyZS0+bG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxM
LCBUUlVFKTsKKyAgICBnX29iamVjdF9yZWZfc2luayhmaXh0dXJlLT53ZWJWaWV3KTsKKyAgICBm
aXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCA9IEZBTFNFOworICAgIGZpeHR1cmUtPmhhc19i
ZWVuX2NvbW1pdHRlZCA9IEZBTFNFOworICAgIGZpeHR1cmUtPmhhc19iZWVuX2ZpcnN0X3Zpc3Vh
bGx5X25vbl9lbXB0eV9sYXlvdXQgPSBGQUxTRTsKKyAgICBmaXh0dXJlLT5oYXNfYmVlbl9maW5p
c2hlZCA9IEZBTFNFOworICAgIGZpeHR1cmUtPmhhc19iZWVuX2ZhaWxlZCA9IEZBTFNFOworICAg
IGZpeHR1cmUtPmhhc19iZWVuX2xvYWRfZXJyb3IgPSBGQUxTRTsKK30KKworc3RhdGljIHZvaWQg
d2ViX2xvYWRpbmdfZml4dHVyZV90ZWFyZG93bihXZWJMb2FkaW5nRml4dHVyZSogZml4dHVyZSwg
Z2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPndlYlZp
ZXcpOworICAgIGdfbWFpbl9sb29wX3VucmVmKGZpeHR1cmUtPmxvb3ApOworfQorCitzdGF0aWMg
Y2hhciogZ2V0X3VyaV9mb3JfcGF0aChjb25zdCBjaGFyKiBwYXRoKQoreworICAgIFNvdXBVUkkq
IHVyaTsKKyAgICBjaGFyKiB1cmlfc3RyaW5nOworCisgICAgdXJpID0gc291cF91cmlfbmV3X3dp
dGhfYmFzZShiYXNlX3VyaSwgcGF0aCk7CisgICAgdXJpX3N0cmluZyA9IHNvdXBfdXJpX3RvX3N0
cmluZyh1cmksIEZBTFNFKTsKKyAgICBzb3VwX3VyaV9mcmVlICh1cmkpOworCisgICAgcmV0dXJu
IHVyaV9zdHJpbmc7Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRfZmluaXNoZWRfY2IoV2ViS2l0V2Vi
Vmlldyogd2ViX3ZpZXcsIFdlYktpdFdlYkZyYW1lKiB3ZWJfZnJhbWUsIFdlYkxvYWRpbmdGaXh0
dXJlKiBmaXh0dXJlKQoreworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lv
bmFsKTsKKyAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9jb21taXR0ZWQpOworICAgIGdf
YXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX2ZpcnN0X3Zpc3VhbGx5X25vbl9lbXB0eV9sYXlvdXQp
OworCisgICAgZ19tYWluX2xvb3BfcXVpdChmaXh0dXJlLT5sb29wKTsKK30KKworCitzdGF0aWMg
dm9pZCBzdGF0dXNfY2hhbmdlZF9jYihHT2JqZWN0KiBvYmplY3QsIEdQYXJhbVNwZWMqIHBzcGVj
LCBXZWJMb2FkaW5nRml4dHVyZSogZml4dHVyZSkKK3sKKyAgICBXZWJLaXRMb2FkU3RhdHVzIHN0
YXR1cyA9IHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMoV0VCS0lUX1dFQl9WSUVXKG9i
amVjdCkpOworCisgICAgc3dpdGNoIChzdGF0dXMpIHsKKyAgICBjYXNlIFdFQktJVF9MT0FEX1BS
T1ZJU0lPTkFMOgorICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9u
YWwpOworICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fY29tbWl0dGVkKTsKKyAg
ICAgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX2ZpcnN0X3Zpc3VhbGx5X25vbl9lbXB0
eV9sYXlvdXQpOworICAgICAgICBmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCA9IFRSVUU7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0xPQURfQ09NTUlUVEVEOgorICAgICAg
ICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCk7CisgICAgICAgIGdfYXNz
ZXJ0KCFmaXh0dXJlLT5oYXNfYmVlbl9jb21taXR0ZWQpOworICAgICAgICBnX2Fzc2VydCghZml4
dHVyZS0+aGFzX2JlZW5fZmlyc3RfdmlzdWFsbHlfbm9uX2VtcHR5X2xheW91dCk7CisgICAgICAg
IGZpeHR1cmUtPmhhc19iZWVuX2NvbW1pdHRlZCA9IFRSVUU7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgV0VCS0lUX0xPQURfRklSU1RfVklTVUFMTFlfTk9OX0VNUFRZX0xBWU9VVDoKKyAgICAg
ICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwpOworICAgICAgICBnX2Fz
c2VydChmaXh0dXJlLT5oYXNfYmVlbl9jb21taXR0ZWQpOworICAgICAgICBnX2Fzc2VydCghZml4
dHVyZS0+aGFzX2JlZW5fZmlyc3RfdmlzdWFsbHlfbm9uX2VtcHR5X2xheW91dCk7CisgICAgICAg
IGZpeHR1cmUtPmhhc19iZWVuX2ZpcnN0X3Zpc3VhbGx5X25vbl9lbXB0eV9sYXlvdXQgPSBUUlVF
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9MT0FEX0ZJTklTSEVEOgorICAgICAg
ICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCk7CisgICAgICAgIGdfYXNz
ZXJ0KGZpeHR1cmUtPmhhc19iZWVuX2NvbW1pdHRlZCk7CisgICAgICAgIGdfYXNzZXJ0KGZpeHR1
cmUtPmhhc19iZWVuX2ZpcnN0X3Zpc3VhbGx5X25vbl9lbXB0eV9sYXlvdXQpOworICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAg
IH0KK30KKworc3RhdGljIHZvaWQgdGVzdF9sb2FkaW5nX3N0YXR1cyhXZWJMb2FkaW5nRml4dHVy
ZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGNoYXIqIHVyaV9zdHJpbmc7
CisKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyhm
aXh0dXJlLT53ZWJWaWV3KSwgPT0sIFdFQktJVF9MT0FEX1BST1ZJU0lPTkFMKTsKKworICAgIGdf
b2JqZWN0X2Nvbm5lY3QoR19PQkpFQ1QoZml4dHVyZS0+d2ViVmlldyksCisgICAgICAgICAgICAg
ICAgICAgICAic2lnbmFsOjpub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhzdGF0dXNf
Y2hhbmdlZF9jYiksIGZpeHR1cmUsCisgICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjpsb2Fk
LWZpbmlzaGVkIiwgR19DQUxMQkFDSyhsb2FkX2ZpbmlzaGVkX2NiKSwgZml4dHVyZSwKKyAgICAg
ICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgdXJpX3N0cmluZyA9IGdldF91cmlfZm9yX3Bh
dGgoIi90ZXN0X2xvYWRpbmdfc3RhdHVzIik7CisKKyAgICAvKiBsb2FkX3VyaSB3aWxsIHRyaWdn
ZXIgdGhlIG5hdmlnYXRpb24tcG9saWN5LWRlY2lzaW9uLXJlcXVlc3RlZAorICAgICAqIHNpZ25h
bCBlbWlzc2lvbjsKKyAgICAgKi8KKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkoZml4dHVy
ZS0+d2ViVmlldywgdXJpX3N0cmluZyk7CisgICAgZ19mcmVlKHVyaV9zdHJpbmcpOworCisgICAg
Z19tYWluX2xvb3BfcnVuKGZpeHR1cmUtPmxvb3ApOworfQorCitzdGF0aWMgdm9pZCBsb2FkX2Vy
cm9yX3N0YXR1c19jaGFuZ2VkX2NiKEdPYmplY3QqIG9iamVjdCwgR1BhcmFtU3BlYyogcHNwZWMs
IFdlYkxvYWRpbmdGaXh0dXJlKiBmaXh0dXJlKQoreworICAgIFdlYktpdExvYWRTdGF0dXMgc3Rh
dHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyhXRUJLSVRfV0VCX1ZJRVcob2Jq
ZWN0KSk7CisKKyAgICBzd2l0Y2goc3RhdHVzKSB7CisgICAgY2FzZSBXRUJLSVRfTE9BRF9QUk9W
SVNJT05BTDoKKyAgICAgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFs
KTsKKyAgICAgICAgZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwgPSBUUlVFOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9MT0FEX0NPTU1JVFRFRDoKKyAgICAgICAgZ19hc3Nl
cnQoIWZpeHR1cmUtPmhhc19iZWVuX2NvbW1pdHRlZCk7CisgICAgICAgIGZpeHR1cmUtPmhhc19i
ZWVuX2NvbW1pdHRlZCA9IFRSVUU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0xP
QURfRklOSVNIRUQ6CisgICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lv
bmFsKTsKKyAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fbG9hZF9lcnJvcik7Cisg
ICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX2ZhaWxlZCk7CisgICAgICAgIGdfYXNz
ZXJ0KCFmaXh0dXJlLT5oYXNfYmVlbl9maW5pc2hlZCk7CisgICAgICAgIGZpeHR1cmUtPmhhc19i
ZWVuX2ZpbmlzaGVkID0gVFJVRTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXRUJLSVRfTE9B
RF9GQUlMRUQ6CisgICAgICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNfYmVlbl9mYWlsZWQpOwor
ICAgICAgICBmaXh0dXJlLT5oYXNfYmVlbl9mYWlsZWQgPSBUUlVFOworICAgICAgICBnX21haW5f
bG9vcF9xdWl0KGZpeHR1cmUtPmxvb3ApOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBsb2FkX2Vycm9yX2Ni
KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgY2hh
ciogdXJpLCBHRXJyb3IgKmVycm9yLCBXZWJMb2FkaW5nRml4dHVyZSogZml4dHVyZSkKK3sKKyAg
ICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCk7CisgICAgZ19hc3NlcnQo
IWZpeHR1cmUtPmhhc19iZWVuX2xvYWRfZXJyb3IpOworICAgIGZpeHR1cmUtPmhhc19iZWVuX2xv
YWRfZXJyb3IgPSBUUlVFOworCisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZCB0
ZXN0X2xvYWRpbmdfZXJyb3IoV2ViTG9hZGluZ0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50
ZXIgZGF0YSkKK3sKKyAgICBjaGFyKiB1cmlfc3RyaW5nOworCisgICAgZ190ZXN0X2J1ZygiMjg4
NDIiKTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2ViVmlldywgImxvYWQtZXJy
b3IiLCBHX0NBTExCQUNLKGxvYWRfZXJyb3JfY2IpLCBmaXh0dXJlKTsKKyAgICBnX3NpZ25hbF9j
b25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFD
Syhsb2FkX2Vycm9yX3N0YXR1c19jaGFuZ2VkX2NiKSwgZml4dHVyZSk7CisKKyAgICB1cmlfc3Ry
aW5nID0gZ2V0X3VyaV9mb3JfcGF0aCgiL3Rlc3RfbG9hZF9lcnJvciIpOworICAgIHdlYmtpdF93
ZWJfdmlld19sb2FkX3VyaShmaXh0dXJlLT53ZWJWaWV3LCB1cmlfc3RyaW5nKTsKKyAgICBnX2Zy
ZWUodXJpX3N0cmluZyk7CisKKyAgICBnX21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7CisK
KyAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCk7CisgICAgZ19hc3Nl
cnQoIWZpeHR1cmUtPmhhc19iZWVuX2NvbW1pdHRlZCk7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+
aGFzX2JlZW5fbG9hZF9lcnJvcik7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fZmFp
bGVkKTsKKyAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fZmluaXNoZWQpOworfQorCisv
KiBDYW5jZWxsZWQgbG9hZCAqLworCitzdGF0aWMgZ2Jvb2xlYW4gbG9hZF9jYW5jZWxsZWRfY2Io
V2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLCBjb25zdCBjaGFy
KiB1cmksIEdFcnJvciAqZXJyb3IsIFdlYkxvYWRpbmdGaXh0dXJlKiBmaXh0dXJlKQoreworICAg
IGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsKTsKKyAgICBnX2Fzc2VydChm
aXh0dXJlLT5oYXNfYmVlbl9mYWlsZWQpOworICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNfYmVl
bl9sb2FkX2Vycm9yKTsKKyAgICBnX2Fzc2VydChlcnJvci0+Y29kZSA9PSBXRUJLSVRfTkVUV09S
S19FUlJPUl9DQU5DRUxMRUQpOworICAgIGZpeHR1cmUtPmhhc19iZWVuX2xvYWRfZXJyb3IgPSBU
UlVFOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBzdG9wX2xvYWQg
KGdwb2ludGVyIGRhdGEpCit7CisgICAgd2Via2l0X3dlYl92aWV3X3N0b3BfbG9hZGluZyhXRUJL
SVRfV0VCX1ZJRVcoZGF0YSkpOworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQg
bG9hZF9jYW5jZWxsZWRfc3RhdHVzX2NoYW5nZWRfY2IoR09iamVjdCogb2JqZWN0LCBHUGFyYW1T
cGVjKiBwc3BlYywgV2ViTG9hZGluZ0ZpeHR1cmUqIGZpeHR1cmUpCit7CisgICAgV2ViS2l0TG9h
ZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKFdFQktJVF9X
RUJfVklFVyhvYmplY3QpKTsKKworICAgIHN3aXRjaChzdGF0dXMpIHsKKyAgICBjYXNlIFdFQktJ
VF9MT0FEX1BST1ZJU0lPTkFMOgorICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5f
cHJvdmlzaW9uYWwpOworICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fZmFpbGVk
KTsKKyAgICAgICAgZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwgPSBUUlVFOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9MT0FEX0NPTU1JVFRFRDoKKyAgICAgICAgZ19pZGxl
X2FkZCAoc3RvcF9sb2FkLCBvYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdFQktJ
VF9MT0FEX0ZBSUxFRDoKKyAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlz
aW9uYWwpOworICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fZmFpbGVkKTsKKyAg
ICAgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX2xvYWRfZXJyb3IpOworICAgICAgICBm
aXh0dXJlLT5oYXNfYmVlbl9mYWlsZWQgPSBUUlVFOworICAgICAgICBnX21haW5fbG9vcF9xdWl0
KGZpeHR1cmUtPmxvb3ApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9MT0FEX0ZJ
TklTSEVEOgorICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHRl
c3RfbG9hZGluZ19jYW5jZWxsZWQoV2ViTG9hZGluZ0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBv
aW50ZXIgZGF0YSkKK3sKKyAgICBjaGFyKiB1cmlfc3RyaW5nOworCisgICAgZ190ZXN0X2J1Zygi
Mjk2NDQiKTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2ViVmlldywgImxvYWQt
ZXJyb3IiLCBHX0NBTExCQUNLKGxvYWRfY2FuY2VsbGVkX2NiKSwgZml4dHVyZSk7CisgICAgZ19z
aWduYWxfY29ubmVjdChmaXh0dXJlLT53ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdf
Q0FMTEJBQ0sobG9hZF9jYW5jZWxsZWRfc3RhdHVzX2NoYW5nZWRfY2IpLCBmaXh0dXJlKTsKKwor
ICAgIHVyaV9zdHJpbmcgPSBnZXRfdXJpX2Zvcl9wYXRoKCIvdGVzdF9sb2FkaW5nX2NhbmNlbGxl
ZCIpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaShmaXh0dXJlLT53ZWJWaWV3LCB1cmlf
c3RyaW5nKTsKKyAgICBnX2ZyZWUodXJpX3N0cmluZyk7CisKKyAgICBnX21haW5fbG9vcF9ydW4o
Zml4dHVyZS0+bG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRfZ29iYWNrX3N0YXR1c19jaGFu
Z2VkX2NiKEdPYmplY3QqIG9iamVjdCwgR1BhcmFtU3BlYyogcHNwZWMsIFdlYkxvYWRpbmdGaXh0
dXJlKiBmaXh0dXJlKQoreworICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dl
Yl92aWV3X2dldF9sb2FkX3N0YXR1cyhXRUJLSVRfV0VCX1ZJRVcob2JqZWN0KSk7CisKKyAgICBz
d2l0Y2goc3RhdHVzKSB7CisgICAgY2FzZSBXRUJLSVRfTE9BRF9QUk9WSVNJT05BTDoKKyAgICAg
ICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsKTsKKyAgICAgICAgZml4
dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwgPSBUUlVFOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFdFQktJVF9MT0FEX0NPTU1JVFRFRDoKKyAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFz
X2JlZW5fcHJvdmlzaW9uYWwpOworICAgICAgICBmaXh0dXJlLT5oYXNfYmVlbl9jb21taXR0ZWQg
PSBUUlVFOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9MT0FEX0ZBSUxFRDoKKyAg
ICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBX
RUJLSVRfTE9BRF9GSU5JU0hFRDoKKyAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5f
cHJvdmlzaW9uYWwpOworICAgICAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9jb21taXR0
ZWQpOworICAgICAgICBmaXh0dXJlLT5oYXNfYmVlbl9maW5pc2hlZCA9IFRSVUU7CisgICAgICAg
IGdfbWFpbl9sb29wX3F1aXQoZml4dHVyZS0+bG9vcCk7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgbG9hZF93ZW50
YmFja19zdGF0dXNfY2hhbmdlZF9jYihHT2JqZWN0KiBvYmplY3QsIEdQYXJhbVNwZWMqIHBzcGVj
LCBXZWJMb2FkaW5nRml4dHVyZSogZml4dHVyZSkKK3sKKyAgICBXZWJLaXRMb2FkU3RhdHVzIHN0
YXR1cyA9IHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMoV0VCS0lUX1dFQl9WSUVXKG9i
amVjdCkpOworICAgIGNoYXIqIHVyaV9zdHJpbmc7CisgICAgY2hhciogdXJpX3N0cmluZzI7CisK
KyAgICB1cmlfc3RyaW5nID0gZ2V0X3VyaV9mb3JfcGF0aCgiL3Rlc3RfbG9hZGluZ19zdGF0dXMi
KTsKKyAgICB1cmlfc3RyaW5nMiA9IGdldF91cmlfZm9yX3BhdGgoIi90ZXN0X2xvYWRpbmdfc3Rh
dHVzMiIpOworCisgICAgc3dpdGNoKHN0YXR1cykgeworICAgIGNhc2UgV0VCS0lUX0xPQURfUFJP
VklTSU9OQUw6CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3Vy
aShmaXh0dXJlLT53ZWJWaWV3KSwgPT0sIHVyaV9zdHJpbmcyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBXRUJLSVRfTE9BRF9DT01NSVRURUQ6CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3
ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaShmaXh0dXJlLT53ZWJWaWV3KSwgPT0sIHVyaV9zdHJpbmcp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9MT0FEX0ZBSUxFRDoKKyAgICAgICAg
Z19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXRUJLSVRf
TE9BRF9GSU5JU0hFRDoKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19n
ZXRfdXJpKGZpeHR1cmUtPndlYlZpZXcpLCA9PSwgdXJpX3N0cmluZyk7CisgICAgICAgIGdfbWFp
bl9sb29wX3F1aXQoZml4dHVyZS0+bG9vcCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGdfZnJlZSh1cmlfc3RyaW5nKTsKKyAgICBn
X2ZyZWUodXJpX3N0cmluZzIpOworfQorCitzdGF0aWMgdm9pZCBsb2FkX2Vycm9yX3Rlc3QoV2Vi
S2l0V2ViVmlldyogd2VidmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLCBjb25zdCBjaGFyKiB1
cmksIEdFcnJvciogZXJyb3IpCit7CisgICAgZ19kZWJ1ZygiRXJyb3I6ICVzIiwgZXJyb3ItPm1l
c3NhZ2UpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2xvYWRpbmdfZ29iYWNrKFdlYkxvYWRpbmdG
aXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgY2hhciogdXJpX3N0
cmluZzsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2ViVmlldywgIm5vdGlmeTo6
bG9hZC1zdGF0dXMiLCBHX0NBTExCQUNLKGxvYWRfZ29iYWNrX3N0YXR1c19jaGFuZ2VkX2NiKSwg
Zml4dHVyZSk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJsb2Fk
LWVycm9yIiwgR19DQUxMQkFDSyhsb2FkX2Vycm9yX3Rlc3QpLCBmaXh0dXJlKTsKKworICAgIHVy
aV9zdHJpbmcgPSBnZXRfdXJpX2Zvcl9wYXRoKCIvdGVzdF9sb2FkaW5nX3N0YXR1cyIpOworICAg
IHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaShmaXh0dXJlLT53ZWJWaWV3LCB1cmlfc3RyaW5nKTsK
KyAgICBnX2ZyZWUodXJpX3N0cmluZyk7CisKKyAgICBnX21haW5fbG9vcF9ydW4oZml4dHVyZS0+
bG9vcCk7CisKKyAgICBmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCA9IEZBTFNFOworICAg
IGZpeHR1cmUtPmhhc19iZWVuX2NvbW1pdHRlZCA9IEZBTFNFOworICAgIGZpeHR1cmUtPmhhc19i
ZWVuX2ZpcnN0X3Zpc3VhbGx5X25vbl9lbXB0eV9sYXlvdXQgPSBGQUxTRTsKKyAgICBmaXh0dXJl
LT5oYXNfYmVlbl9maW5pc2hlZCA9IEZBTFNFOworICAgIGZpeHR1cmUtPmhhc19iZWVuX2ZhaWxl
ZCA9IEZBTFNFOworICAgIGZpeHR1cmUtPmhhc19iZWVuX2xvYWRfZXJyb3IgPSBGQUxTRTsKKwor
ICAgIHVyaV9zdHJpbmcgPSBnZXRfdXJpX2Zvcl9wYXRoKCIvdGVzdF9sb2FkaW5nX3N0YXR1czIi
KTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkoZml4dHVyZS0+d2ViVmlldywgdXJpX3N0
cmluZyk7CisgICAgZ19mcmVlKHVyaV9zdHJpbmcpOworCisgICAgZ19tYWluX2xvb3BfcnVuKGZp
eHR1cmUtPmxvb3ApOworCisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5j
KGZpeHR1cmUtPndlYlZpZXcsIGxvYWRfZ29iYWNrX3N0YXR1c19jaGFuZ2VkX2NiLCBmaXh0dXJl
KTsKKworICAgIGZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsID0gRkFMU0U7CisgICAgZml4
dHVyZS0+aGFzX2JlZW5fY29tbWl0dGVkID0gRkFMU0U7CisgICAgZml4dHVyZS0+aGFzX2JlZW5f
Zmlyc3RfdmlzdWFsbHlfbm9uX2VtcHR5X2xheW91dCA9IEZBTFNFOworICAgIGZpeHR1cmUtPmhh
c19iZWVuX2ZpbmlzaGVkID0gRkFMU0U7CisgICAgZml4dHVyZS0+aGFzX2JlZW5fZmFpbGVkID0g
RkFMU0U7CisgICAgZml4dHVyZS0+aGFzX2JlZW5fbG9hZF9lcnJvciA9IEZBTFNFOworCisgICAg
Z19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIs
IEdfQ0FMTEJBQ0sobG9hZF93ZW50YmFja19zdGF0dXNfY2hhbmdlZF9jYiksIGZpeHR1cmUpOwor
ICAgIHdlYmtpdF93ZWJfdmlld19nb19iYWNrKGZpeHR1cmUtPndlYlZpZXcpOworCisgICAgZ19t
YWluX2xvb3BfcnVuKGZpeHR1cmUtPmxvb3ApOworCisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlz
Y29ubmVjdF9ieV9mdW5jKGZpeHR1cmUtPndlYlZpZXcsIGxvYWRfd2VudGJhY2tfc3RhdHVzX2No
YW5nZWRfY2IsIGZpeHR1cmUpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3Yp
Cit7CisgICAgU291cFNlcnZlciogc2VydmVyOworCisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywg
JmFyZ3YsIE5VTEwpOworCisgICAgc2VydmVyID0gc291cF9zZXJ2ZXJfbmV3KFNPVVBfU0VSVkVS
X1BPUlQsIDAsIE5VTEwpOworICAgIHNvdXBfc2VydmVyX3J1bl9hc3luYyhzZXJ2ZXIpOworCisg
ICAgc291cF9zZXJ2ZXJfYWRkX2hhbmRsZXIoc2VydmVyLCBOVUxMLCBzZXJ2ZXJfY2FsbGJhY2ss
IE5VTEwsIE5VTEwpOworCisgICAgYmFzZV91cmkgPSBzb3VwX3VyaV9uZXcoImh0dHA6Ly8xMjcu
MC4wLjEvIik7CisgICAgc291cF91cmlfc2V0X3BvcnQoYmFzZV91cmksIHNvdXBfc2VydmVyX2dl
dF9wb3J0KHNlcnZlcikpOworCisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2xvYWRpbmcvc3RhdHVzIiwKKyAg
ICAgICAgICAgICAgIFdlYkxvYWRpbmdGaXh0dXJlLCBOVUxMLAorICAgICAgICAgICAgICAgd2Vi
X2xvYWRpbmdfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3RfbG9hZGluZ19zdGF0
dXMsCisgICAgICAgICAgICAgICB3ZWJfbG9hZGluZ19maXh0dXJlX3RlYXJkb3duKTsKKyAgICBn
X3Rlc3RfYWRkKCIvd2Via2l0L2xvYWRpbmcvZXJyb3IiLAorICAgICAgICAgICAgICAgV2ViTG9h
ZGluZ0ZpeHR1cmUsIE5VTEwsCisgICAgICAgICAgICAgICB3ZWJfbG9hZGluZ19maXh0dXJlX3Nl
dHVwLAorICAgICAgICAgICAgICAgdGVzdF9sb2FkaW5nX2Vycm9yLAorICAgICAgICAgICAgICAg
d2ViX2xvYWRpbmdfZml4dHVyZV90ZWFyZG93bik7CisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9s
b2FkaW5nL2NhbmNlbGxlZCIsCisgICAgICAgICAgICAgICBXZWJMb2FkaW5nRml4dHVyZSwgTlVM
TCwKKyAgICAgICAgICAgICAgIHdlYl9sb2FkaW5nX2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAg
ICAgICB0ZXN0X2xvYWRpbmdfY2FuY2VsbGVkLAorICAgICAgICAgICAgICAgd2ViX2xvYWRpbmdf
Zml4dHVyZV90ZWFyZG93bik7CisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9sb2FkaW5nL2dvYmFj
ayIsCisgICAgICAgICAgICAgICBXZWJMb2FkaW5nRml4dHVyZSwgTlVMTCwKKyAgICAgICAgICAg
ICAgIHdlYl9sb2FkaW5nX2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0X2xvYWRp
bmdfZ29iYWNrLAorICAgICAgICAgICAgICAgd2ViX2xvYWRpbmdfZml4dHVyZV90ZWFyZG93bik7
CisgICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsKK30KKwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdG1pbWVoYW5kbGluZy5jIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdG1pbWVoYW5kbGluZy5jCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjOTA2OTEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0bWltZWhhbmRsaW5nLmMKQEAgLTAsMCAr
MSwyMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIE1pY2hhZWwgQWxvbnpvCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgR3VzdGF2byBOb3JvbmhhIFNpbHZhCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJ0ZXN0X3V0aWxzLmgiCisKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5j
bHVkZSA8Z2xpYi9nc3RkaW8uaD4KKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKyNpbmNsdWRl
IDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+CisjaW5jbHVkZSA8dW5pc3Rk
Lmg+CisKK0dNYWluTG9vcCogbG9vcDsKK1NvdXBTZXNzaW9uICpzZXNzaW9uOworY2hhciogYmFz
ZV91cmk7CisKKy8qIEZvciByZWFsIHJlcXVlc3QgdGVzdGluZyAqLworc3RhdGljIHZvaWQKK3Nl
cnZlcl9jYWxsYmFjayhTb3VwU2VydmVyICpzZXJ2ZXIsIFNvdXBNZXNzYWdlICptc2csCisgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsIEdIYXNoVGFibGUgKnF1ZXJ5LAorICAgICAg
ICAgICAgICAgICBTb3VwQ2xpZW50Q29udGV4dCAqY29udGV4dCwgZ3BvaW50ZXIgZGF0YSkKK3sK
KyAgICBpZiAobXNnLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7CisgICAgICAgIHNvdXBf
bWVzc2FnZV9zZXRfc3RhdHVzKG1zZywgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1zZywg
U09VUF9TVEFUVVNfT0spOworCisgICAgLyogUERGICovCisgICAgaWYgKGdfc3RyX2VxdWFsKHBh
dGgsICIvcGRmIikpIHsKKyAgICAgICAgY2hhciogY29udGVudHM7CisgICAgICAgIGdzaXplIGxl
bmd0aDsKKyAgICAgICAgR0Vycm9yKiBlcnJvciA9IE5VTEw7CisKKyAgICAgICAgZ19maWxlX2dl
dF9jb250ZW50cygidGVzdC5wZGYiLCAmY29udGVudHMsICZsZW5ndGgsICZlcnJvcik7CisgICAg
ICAgIGdfYXNzZXJ0KCFlcnJvcik7CisKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5k
KG1zZy0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgY29udGVudHMsIGxlbmd0aCk7
CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2h0bWwiKSkgeworICAgICAgICBj
aGFyKiBjb250ZW50czsKKyAgICAgICAgZ3NpemUgbGVuZ3RoOworICAgICAgICBHRXJyb3IqIGVy
cm9yID0gTlVMTDsKKworICAgICAgICBnX2ZpbGVfZ2V0X2NvbnRlbnRzKCJ0ZXN0Lmh0bWwiLCAm
Y29udGVudHMsICZsZW5ndGgsICZlcnJvcik7CisgICAgICAgIGdfYXNzZXJ0KCFlcnJvcik7CisK
KyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1zZy0+cmVzcG9uc2VfYm9keSwgU09V
UF9NRU1PUllfVEFLRSwgY29udGVudHMsIGxlbmd0aCk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9l
cXVhbChwYXRoLCAiL3RleHQiKSkgeworICAgICAgICBjaGFyKiBjb250ZW50czsKKyAgICAgICAg
Z3NpemUgbGVuZ3RoOworICAgICAgICBHRXJyb3IqIGVycm9yID0gTlVMTDsKKworICAgICAgICBz
b3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobXNnLT5yZXNwb25zZV9oZWFkZXJzLCAiQ29udGVu
dC1EaXNwb3NpdGlvbiIsICJhdHRhY2htZW50OyBmaWxlbmFtZT10ZXN0LnR4dCIpOworCisgICAg
ICAgIGdfZmlsZV9nZXRfY29udGVudHMoInRlc3QudHh0IiwgJmNvbnRlbnRzLCAmbGVuZ3RoLCAm
ZXJyb3IpOworICAgICAgICBnX2Fzc2VydCghZXJyb3IpOworCisgICAgICAgIHNvdXBfbWVzc2Fn
ZV9ib2R5X2FwcGVuZChtc2ctPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGNvbnRl
bnRzLCBsZW5ndGgpOworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1z
Zy0+cmVzcG9uc2VfYm9keSk7Cit9CisKK3N0YXRpYyB2b2lkIGlkbGVfcXVpdF9sb29wX2NiKFdl
YktpdFdlYlZpZXcqIHdlYl92aWV3LCBHUGFyYW1TcGVjKiBwc3BlYywgZ3BvaW50ZXIgZGF0YSkK
K3sKKyAgICBpZiAod2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJfdmlldykgPT0g
V0VCS0lUX0xPQURfRklOSVNIRUQgfHwKKyAgICAgICAgd2Via2l0X3dlYl92aWV3X2dldF9sb2Fk
X3N0YXR1cyh3ZWJfdmlldykgPT0gV0VCS0lUX0xPQURfRkFJTEVEKQorICAgICAgICBnX21haW5f
bG9vcF9xdWl0KGxvb3ApOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gbWltZV90eXBlX3BvbGljeV9k
ZWNpc2lvbl9yZXF1ZXN0ZWRfY2IoV2ViS2l0V2ViVmlldyogdmlldywgV2ViS2l0V2ViRnJhbWUq
IGZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0LCBjb25zdCBjaGFyKiBtaW1lX3R5
cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV2ViS2l0V2ViUG9saWN5RGVjaXNpb24qIGRlY2lzaW9uLCBncG9pbnRlciBkYXRhKQorewor
ICAgIGNoYXIqIHR5cGUgPSAoY2hhciopZGF0YTsKKworICAgIGlmIChnX3N0cl9lcXVhbCh0eXBl
LCAicGRmIikpIHsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKG1pbWVfdHlwZSwgPT0sICJhcHBs
aWNhdGlvbi9wZGYiKTsKKyAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fc2hv
d19taW1lX3R5cGUodmlldywgbWltZV90eXBlKSk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVh
bCh0eXBlLCAiaHRtbCIpKSB7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cihtaW1lX3R5cGUsID09
LCAidGV4dC9odG1sIik7CisgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19jYW5fc2hv
d19taW1lX3R5cGUodmlldywgbWltZV90eXBlKSk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVh
bCh0eXBlLCAidGV4dCIpKSB7CisgICAgICAgIFdlYktpdE5ldHdvcmtSZXNwb25zZSogcmVzcG9u
c2UgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9uZXR3b3JrX3Jlc3BvbnNlKGZyYW1lKTsKKyAgICAg
ICAgU291cE1lc3NhZ2UqIG1lc3NhZ2UgPSB3ZWJraXRfbmV0d29ya19yZXNwb25zZV9nZXRfbWVz
c2FnZShyZXNwb25zZSk7CisgICAgICAgIGNoYXIqIGRpc3Bvc2l0aW9uOworCisgICAgICAgIGdf
YXNzZXJ0KG1lc3NhZ2UpOworICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfY29udGVu
dF9kaXNwb3NpdGlvbihtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGlzcG9zaXRpb24sIE5VTEwp
OworICAgICAgICBnX29iamVjdF91bnJlZihyZXNwb25zZSk7CisKKyAgICAgICAgZ19hc3NlcnRf
Y21wc3RyKGRpc3Bvc2l0aW9uLCA9PSwgImF0dGFjaG1lbnQiKTsKKyAgICAgICAgZ19mcmVlKGRp
c3Bvc2l0aW9uKTsKKworICAgICAgICBnX2Fzc2VydF9jbXBzdHIobWltZV90eXBlLCA9PSwgInRl
eHQvcGxhaW4iKTsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2Nhbl9zaG93X21p
bWVfdHlwZSh2aWV3LCBtaW1lX3R5cGUpKTsKKyAgICB9CisKKyAgICBnX2ZyZWUodHlwZSk7CisK
KyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RSZW1vdGVNaW1lVHlwZShj
b25zdCB2b2lkKiBkYXRhKQoreworICAgIGNvbnN0IGNoYXIqIG5hbWUgPSAoY29uc3QgY2hhciop
IGRhdGE7CisgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRf
d2ViX3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKEdfT0JKRUNUKHZpZXcpKTsK
KworICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisKKyAgICBnX29iamVj
dF9jb25uZWN0KEdfT0JKRUNUKHZpZXcpLAorICAgICAgICAgICAgICAgICAgICAgInNpZ25hbDo6
bm90aWZ5Ojpsb2FkLXN0YXR1cyIsIGlkbGVfcXVpdF9sb29wX2NiLCBOVUxMLAorICAgICAgICAg
ICAgICAgICAgICAgInNpZ25hbDo6bWltZS10eXBlLXBvbGljeS1kZWNpc2lvbi1yZXF1ZXN0ZWQi
LCBtaW1lX3R5cGVfcG9saWN5X2RlY2lzaW9uX3JlcXVlc3RlZF9jYiwgZ19zdHJkdXAobmFtZSks
CisgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKworICAgIGNoYXIqIGVmZmVjdGl2ZV91cmkg
PSBnX3N0cmR1cF9wcmludGYoIiVzJXMiLCBiYXNlX3VyaSwgbmFtZSk7CisgICAgd2Via2l0X3dl
Yl92aWV3X2xvYWRfdXJpKHZpZXcsIGVmZmVjdGl2ZV91cmkpOworICAgIGdfZnJlZShlZmZlY3Rp
dmVfdXJpKTsKKworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIGdfb2JqZWN0X3Vu
cmVmKHZpZXcpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0TG9jYWxNaW1lVHlwZShjb25zdCB2b2lk
KiBkYXRhKQoreworICAgICBjb25zdCBjaGFyKiB0eXBlTmFtZSA9IChjb25zdCBjaGFyKikgZGF0
YTsKKyAgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2Vi
X3ZpZXdfbmV3KCkpOworICAgICBnX29iamVjdF9yZWZfc2luayhHX09CSkVDVCh2aWV3KSk7CisK
KyAgICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKKworICAgICBnX29iamVj
dF9jb25uZWN0KEdfT0JKRUNUKHZpZXcpLAorICAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6
Om5vdGlmeTo6bG9hZC1zdGF0dXMiLCBpZGxlX3F1aXRfbG9vcF9jYiwgTlVMTCwKKyAgICAgICAg
ICAgICAgICAgICAgICAic2lnbmFsOjptaW1lLXR5cGUtcG9saWN5LWRlY2lzaW9uLXJlcXVlc3Rl
ZCIsIG1pbWVfdHlwZV9wb2xpY3lfZGVjaXNpb25fcmVxdWVzdGVkX2NiLCBnX3N0cmR1cCh0eXBl
TmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICAgZ2NoYXIqIGZpbGVu
YW1lID0gZ19zdHJkdXBfcHJpbnRmKCJ0ZXN0LiVzIiwgdHlwZU5hbWUpOworICAgICBHRmlsZSog
ZmlsZSA9IGdfZmlsZV9uZXdfZm9yX3BhdGgoZmlsZW5hbWUpOworICAgICBnX2ZyZWUoZmlsZW5h
bWUpOworCisgICAgIGdjaGFyKiBmaWxlVVJJID0gZ19maWxlX2dldF91cmkoZmlsZSk7CisgICAg
IGdfb2JqZWN0X3VucmVmKGZpbGUpOworCisgICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh2
aWV3LCBmaWxlVVJJKTsKKyAgICAgZ19mcmVlKGZpbGVVUkkpOworIAorICAgICBnX21haW5fbG9v
cF9ydW4obG9vcCk7CisgICAgIGdfb2JqZWN0X3VucmVmKHZpZXcpOworfQorCitpbnQgbWFpbihp
bnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgU291cFNlcnZlciogc2VydmVyOworICAgIFNv
dXBVUkkqIHNvdXBfdXJpOworCisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwp
OworCisgICAgLyogSG9wZWZ1bGx5IG1ha2UgdGVzdCBpbmRlcGVuZGVudCBvZiB0aGUgcGF0aCBp
dCdzIGNhbGxlZCBmcm9tLiAqLworICAgIHRlc3R1dGlsc19yZWxhdGl2ZV9jaGRpcigiVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvcmVzb3VyY2VzL3Rlc3QuaHRtbCIsIGFyZ3Zb
MF0pOworCisgICAgc2VydmVyID0gc291cF9zZXJ2ZXJfbmV3KFNPVVBfU0VSVkVSX1BPUlQsIDAs
IE5VTEwpOworICAgIHNvdXBfc2VydmVyX3J1bl9hc3luYyhzZXJ2ZXIpOworCisgICAgc291cF9z
ZXJ2ZXJfYWRkX2hhbmRsZXIoc2VydmVyLCBOVUxMLCBzZXJ2ZXJfY2FsbGJhY2ssIE5VTEwsIE5V
TEwpOworCisgICAgc291cF91cmkgPSBzb3VwX3VyaV9uZXcoImh0dHA6Ly8xMjcuMC4wLjEvIik7
CisgICAgc291cF91cmlfc2V0X3BvcnQoc291cF91cmksIHNvdXBfc2VydmVyX2dldF9wb3J0KHNl
cnZlcikpOworCisgICAgYmFzZV91cmkgPSBzb3VwX3VyaV90b19zdHJpbmcoc291cF91cmksIEZB
TFNFKTsKKyAgICBzb3VwX3VyaV9mcmVlKHNvdXBfdXJpKTsKKworICAgIGdfdGVzdF9idWdfYmFz
ZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7CisgICAgZ190ZXN0X2FkZF9kYXRhX2Z1bmMo
Ii93ZWJraXQvbWltZS9yZW1vdGUtUERGIiwgInBkZiIsIHRlc3RSZW1vdGVNaW1lVHlwZSk7Cisg
ICAgZ190ZXN0X2FkZF9kYXRhX2Z1bmMoIi93ZWJraXQvbWltZS9yZW1vdGUtSFRNTCIsICJodG1s
IiwgdGVzdFJlbW90ZU1pbWVUeXBlKTsKKyAgICBnX3Rlc3RfYWRkX2RhdGFfZnVuYygiL3dlYmtp
dC9taW1lL3JlbW90ZS1URVhUIiwgInRleHQiLCB0ZXN0UmVtb3RlTWltZVR5cGUpOworICAgIGdf
dGVzdF9hZGRfZGF0YV9mdW5jKCIvd2Via2l0L21pbWUvbG9jYWwtUERGIiwgInBkZiIsIHRlc3RM
b2NhbE1pbWVUeXBlKTsKKyAgICBnX3Rlc3RfYWRkX2RhdGFfZnVuYygiL3dlYmtpdC9taW1lL2xv
Y2FsLUhUTUwiLCAiaHRtbCIsIHRlc3RMb2NhbE1pbWVUeXBlKTsKKyAgICBnX3Rlc3RfYWRkX2Rh
dGFfZnVuYygiL3dlYmtpdC9taW1lL2xvY2FsLVRFWFQiLCAidGV4dCIsIHRlc3RMb2NhbE1pbWVU
eXBlKTsKKworICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0bmV0d29ya3JlcXVlc3QuYyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RuZXR3b3JrcmVxdWVzdC5jCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMmM5MGYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0bmV0d29ya3JlcXVlc3Qu
YwpAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEd1c3Rhdm8gTm9y
b25oYSBTaWx2YQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNs
dWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z2xpYi9nc3RkaW8u
aD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8
d2Via2l0L3dlYmtpdC5oPgorCitzdGF0aWMgdm9pZCB0ZXN0X25ldHdvcmtfcmVxdWVzdF9jcmVh
dGVfZGVzdHJveSgpCit7CisgICAgV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3Q7CisgICAg
U291cE1lc3NhZ2UqIG1lc3NhZ2U7CisKKyAgICAvKiBUZXN0IGNyZWF0aW9uIHdpdGggVVJJICov
CisgICAgcmVxdWVzdCA9IFdFQktJVF9ORVRXT1JLX1JFUVVFU1QoZ19vYmplY3RfbmV3KFdFQktJ
VF9UWVBFX05FVFdPUktfUkVRVUVTVCwgInVyaSIsICJodHRwOi8vZGViaWFuLm9yZy8iLCBOVUxM
KSk7CisgICAgZ19hc3NlcnQoV0VCS0lUX0lTX05FVFdPUktfUkVRVUVTVChyZXF1ZXN0KSk7Cisg
ICAgbWVzc2FnZSA9IHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfZ2V0X21lc3NhZ2UocmVxdWVzdCk7
CisgICAgZ19hc3NlcnQoIW1lc3NhZ2UpOworICAgIGdfb2JqZWN0X3VucmVmKHJlcXVlc3QpOwor
CisgICAgLyogVGVzdCBjcmVhdGlvbiB3aXRoIFNvdXBNZXNzYWdlICovCisgICAgbWVzc2FnZSA9
IHNvdXBfbWVzc2FnZV9uZXcoIkdFVCIsICJodHRwOi8vZGViaWFuLm9yZy8iKTsKKyAgICByZXF1
ZXN0ID0gV0VCS0lUX05FVFdPUktfUkVRVUVTVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfTkVU
V09SS19SRVFVRVNULCAibWVzc2FnZSIsIG1lc3NhZ2UsIE5VTEwpKTsKKyAgICBnX2Fzc2VydChX
RUJLSVRfSVNfTkVUV09SS19SRVFVRVNUKHJlcXVlc3QpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
R19PQkpFQ1QobWVzc2FnZSktPnJlZl9jb3VudCwgPT0sIDIpOworICAgIGdfb2JqZWN0X3VucmVm
KHJlcXVlc3QpOworICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChtZXNzYWdlKS0+cmVmX2Nv
dW50LCA9PSwgMSk7CisgICAgZ19vYmplY3RfdW5yZWYobWVzc2FnZSk7CisKKyAgICAvKiBUZXN0
IGNyZWF0aW9uIHdpdGggYm90aCBTb3VwTWVzc2FnZSBhbmQgVVJJICovCisgICAgbWVzc2FnZSA9
IHNvdXBfbWVzc2FnZV9uZXcoIkdFVCIsICJodHRwOi8vZGViaWFuLm9yZy8iKTsKKyAgICByZXF1
ZXN0ID0gV0VCS0lUX05FVFdPUktfUkVRVUVTVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfTkVU
V09SS19SRVFVRVNULCAibWVzc2FnZSIsIG1lc3NhZ2UsICJ1cmkiLCAiaHR0cDovL2dub21lLm9y
Zy8iLCBOVUxMKSk7CisgICAgZ19hc3NlcnQoV0VCS0lUX0lTX05FVFdPUktfUkVRVUVTVChyZXF1
ZXN0KSk7CisgICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKG1lc3NhZ2UpLT5yZWZfY291bnQs
ID09LCAyKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X25ldHdvcmtfcmVxdWVzdF9nZXRf
dXJpKHJlcXVlc3QpLCA9PSwgImh0dHA6Ly9nbm9tZS5vcmcvIik7CisgICAgZ19vYmplY3RfdW5y
ZWYocmVxdWVzdCk7CisgICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKG1lc3NhZ2UpLT5yZWZf
Y291bnQsID09LCAxKTsKKyAgICBnX29iamVjdF91bnJlZihtZXNzYWdlKTsKK30KKworc3RhdGlj
IHZvaWQgdGVzdF9uZXR3b3JrX3JlcXVlc3RfcHJvcGVydGllcygpCit7CisgICAgV2ViS2l0TmV0
d29ya1JlcXVlc3QqIHJlcXVlc3Q7CisgICAgU291cE1lc3NhZ2UqIG1lc3NhZ2U7CisgICAgZ2No
YXIqIHNvdXBVUkk7CisKKyAgICAvKiBUZXN0IFVSSSBpcyBzZXQgY29ycmVjdGx5IHdoZW4gY3Jl
YXRpbmcgd2l0aCBVUkkgKi8KKyAgICByZXF1ZXN0ID0gd2Via2l0X25ldHdvcmtfcmVxdWVzdF9u
ZXcoImh0dHA6Ly9kZWJpYW4ub3JnLyIpOworICAgIGdfYXNzZXJ0KFdFQktJVF9JU19ORVRXT1JL
X1JFUVVFU1QocmVxdWVzdCkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfbmV0d29ya19y
ZXF1ZXN0X2dldF91cmkocmVxdWVzdCksID09LCAiaHR0cDovL2RlYmlhbi5vcmcvIik7CisgICAg
Z19vYmplY3RfdW5yZWYocmVxdWVzdCk7CisKKyAgICAvKiBUZXN0IFVSSSBpcyBzZXQgY29ycmVj
dGx5IHdoZW4gY3JlYXRpbmcgd2l0aCBNZXNzYWdlICovCisgICAgbWVzc2FnZSA9IHNvdXBfbWVz
c2FnZV9uZXcoIkdFVCIsICJodHRwOi8vZGViaWFuLm9yZy8iKTsKKyAgICByZXF1ZXN0ID0gV0VC
S0lUX05FVFdPUktfUkVRVUVTVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfTkVUV09SS19SRVFV
RVNULCAibWVzc2FnZSIsIG1lc3NhZ2UsIE5VTEwpKTsKKyAgICBnX2Fzc2VydChXRUJLSVRfSVNf
TkVUV09SS19SRVFVRVNUKHJlcXVlc3QpKTsKKyAgICBnX29iamVjdF91bnJlZihtZXNzYWdlKTsK
KworICAgIG1lc3NhZ2UgPSB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X2dldF9tZXNzYWdlKHJlcXVl
c3QpOworICAgIHNvdXBVUkkgPSBzb3VwX3VyaV90b19zdHJpbmcoc291cF9tZXNzYWdlX2dldF91
cmkobWVzc2FnZSksIEZBTFNFKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc291cFVSSSwgPT0sICJo
dHRwOi8vZGViaWFuLm9yZy8iKTsKKyAgICBnX2ZyZWUoc291cFVSSSk7CisKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X25ldHdvcmtfcmVxdWVzdF9nZXRfdXJpKHJlcXVlc3QpLCA9PSwgImh0
dHA6Ly9kZWJpYW4ub3JnLyIpOworICAgIGdfb2JqZWN0X3VucmVmKHJlcXVlc3QpOworfQorCitp
bnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJn
YywgJmFyZ3YsIE5VTEwpOworCisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvbmV0d29ya3JlcXVlc3Qv
Y3JlYXRlZGVzdHJveSIsIHRlc3RfbmV0d29ya19yZXF1ZXN0X2NyZWF0ZV9kZXN0cm95KTsKKyAg
ICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvbmV0d29ya3JlcXVlc3QvcHJvcGVydGllcyIsIHRl
c3RfbmV0d29ya19yZXF1ZXN0X3Byb3BlcnRpZXMpOworICAgIHJldHVybiBnX3Rlc3RfcnVuICgp
OworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVz
dG5ldHdvcmtyZXNwb25zZS5jIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsv
dGVzdG5ldHdvcmtyZXNwb25zZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmI4MDZhYTEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdEd0ay90ZXN0bmV0d29ya3Jlc3BvbnNlLmMKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSBHdXN0YXZvIE5vcm9uaGEgU2lsdmEKKyAqIENvcHlyaWdodCAoQykg
MjAwOSBDb2xsYWJvcmEgTHRkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8ZXJybm8u
aD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z2xp
Yi9nc3RkaW8uaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+Cisj
aW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgorCitzdGF0aWMgdm9pZCB0ZXN0X25ldHdvcmtfcmVz
cG9uc2VfY3JlYXRlX2Rlc3Ryb3koKQoreworICAgIFdlYktpdE5ldHdvcmtSZXNwb25zZSogcmVz
cG9uc2U7CisgICAgU291cE1lc3NhZ2UqIG1lc3NhZ2U7CisKKyAgICAvKiBUZXN0IGNyZWF0aW9u
IHdpdGggVVJJICovCisgICAgcmVzcG9uc2UgPSBXRUJLSVRfTkVUV09SS19SRVNQT05TRShnX29i
amVjdF9uZXcoV0VCS0lUX1RZUEVfTkVUV09SS19SRVNQT05TRSwgInVyaSIsICJodHRwOi8vZGVi
aWFuLm9yZy8iLCBOVUxMKSk7CisgICAgZ19hc3NlcnQoV0VCS0lUX0lTX05FVFdPUktfUkVTUE9O
U0UocmVzcG9uc2UpKTsKKyAgICBtZXNzYWdlID0gd2Via2l0X25ldHdvcmtfcmVzcG9uc2VfZ2V0
X21lc3NhZ2UocmVzcG9uc2UpOworICAgIGdfYXNzZXJ0KCFtZXNzYWdlKTsKKyAgICBnX29iamVj
dF91bnJlZihyZXNwb25zZSk7CisKKyAgICAvKiBUZXN0IGNyZWF0aW9uIHdpdGggU291cE1lc3Nh
Z2UgKi8KKyAgICBtZXNzYWdlID0gc291cF9tZXNzYWdlX25ldygiR0VUIiwgImh0dHA6Ly9kZWJp
YW4ub3JnLyIpOworICAgIHJlc3BvbnNlID0gV0VCS0lUX05FVFdPUktfUkVTUE9OU0UoZ19vYmpl
Y3RfbmV3KFdFQktJVF9UWVBFX05FVFdPUktfUkVTUE9OU0UsICJtZXNzYWdlIiwgbWVzc2FnZSwg
TlVMTCkpOworICAgIGdfYXNzZXJ0KFdFQktJVF9JU19ORVRXT1JLX1JFU1BPTlNFKHJlc3BvbnNl
KSk7CisgICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKG1lc3NhZ2UpLT5yZWZfY291bnQsID09
LCAyKTsKKyAgICBnX29iamVjdF91bnJlZihyZXNwb25zZSk7CisgICAgZ19hc3NlcnRfY21waW50
KEdfT0JKRUNUKG1lc3NhZ2UpLT5yZWZfY291bnQsID09LCAxKTsKKyAgICBnX29iamVjdF91bnJl
ZihtZXNzYWdlKTsKKworICAgIC8qIFRlc3QgY3JlYXRpb24gd2l0aCBib3RoIFNvdXBNZXNzYWdl
IGFuZCBVUkkgKi8KKyAgICBtZXNzYWdlID0gc291cF9tZXNzYWdlX25ldygiR0VUIiwgImh0dHA6
Ly9kZWJpYW4ub3JnLyIpOworICAgIHJlc3BvbnNlID0gV0VCS0lUX05FVFdPUktfUkVTUE9OU0Uo
Z19vYmplY3RfbmV3KFdFQktJVF9UWVBFX05FVFdPUktfUkVTUE9OU0UsICJtZXNzYWdlIiwgbWVz
c2FnZSwgInVyaSIsICJodHRwOi8vZ25vbWUub3JnLyIsIE5VTEwpKTsKKyAgICBnX2Fzc2VydChX
RUJLSVRfSVNfTkVUV09SS19SRVNQT05TRShyZXNwb25zZSkpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChHX09CSkVDVChtZXNzYWdlKS0+cmVmX2NvdW50LCA9PSwgMik7CisgICAgZ19hc3NlcnRfY21w
c3RyKHdlYmtpdF9uZXR3b3JrX3Jlc3BvbnNlX2dldF91cmkocmVzcG9uc2UpLCA9PSwgImh0dHA6
Ly9nbm9tZS5vcmcvIik7CisgICAgZ19vYmplY3RfdW5yZWYocmVzcG9uc2UpOworICAgIGdfYXNz
ZXJ0X2NtcGludChHX09CSkVDVChtZXNzYWdlKS0+cmVmX2NvdW50LCA9PSwgMSk7CisgICAgZ19v
YmplY3RfdW5yZWYobWVzc2FnZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfbmV0d29ya19yZXNw
b25zZV9wcm9wZXJ0aWVzKCkKK3sKKyAgICBXZWJLaXROZXR3b3JrUmVzcG9uc2UqIHJlc3BvbnNl
OworICAgIFNvdXBNZXNzYWdlKiBtZXNzYWdlOworICAgIGdjaGFyKiBzb3VwVVJJOworCisgICAg
LyogVGVzdCBVUkkgaXMgc2V0IGNvcnJlY3RseSB3aGVuIGNyZWF0aW5nIHdpdGggVVJJICovCisg
ICAgcmVzcG9uc2UgPSB3ZWJraXRfbmV0d29ya19yZXNwb25zZV9uZXcoImh0dHA6Ly9kZWJpYW4u
b3JnLyIpOworICAgIGdfYXNzZXJ0KFdFQktJVF9JU19ORVRXT1JLX1JFU1BPTlNFKHJlc3BvbnNl
KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9uZXR3b3JrX3Jlc3BvbnNlX2dldF91cmko
cmVzcG9uc2UpLCA9PSwgImh0dHA6Ly9kZWJpYW4ub3JnLyIpOworICAgIGdfb2JqZWN0X3VucmVm
KHJlc3BvbnNlKTsKKworICAgIC8qIFRlc3QgVVJJIGlzIHNldCBjb3JyZWN0bHkgd2hlbiBjcmVh
dGluZyB3aXRoIE1lc3NhZ2UgKi8KKyAgICBtZXNzYWdlID0gc291cF9tZXNzYWdlX25ldygiR0VU
IiwgImh0dHA6Ly9kZWJpYW4ub3JnLyIpOworICAgIHJlc3BvbnNlID0gV0VCS0lUX05FVFdPUktf
UkVTUE9OU0UoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX05FVFdPUktfUkVTUE9OU0UsICJtZXNz
YWdlIiwgbWVzc2FnZSwgTlVMTCkpOworICAgIGdfYXNzZXJ0KFdFQktJVF9JU19ORVRXT1JLX1JF
U1BPTlNFKHJlc3BvbnNlKSk7CisgICAgZ19vYmplY3RfdW5yZWYobWVzc2FnZSk7CisKKyAgICBt
ZXNzYWdlID0gd2Via2l0X25ldHdvcmtfcmVzcG9uc2VfZ2V0X21lc3NhZ2UocmVzcG9uc2UpOwor
ICAgIHNvdXBVUkkgPSBzb3VwX3VyaV90b19zdHJpbmcoc291cF9tZXNzYWdlX2dldF91cmkobWVz
c2FnZSksIEZBTFNFKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc291cFVSSSwgPT0sICJodHRwOi8v
ZGViaWFuLm9yZy8iKTsKKyAgICBnX2ZyZWUoc291cFVSSSk7CisKKyAgICBnX2Fzc2VydF9jbXBz
dHIod2Via2l0X25ldHdvcmtfcmVzcG9uc2VfZ2V0X3VyaShyZXNwb25zZSksID09LCAiaHR0cDov
L2RlYmlhbi5vcmcvIik7CisgICAgZ19vYmplY3RfdW5yZWYocmVzcG9uc2UpOworfQorCitpbnQg
bWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywg
JmFyZ3YsIE5VTEwpOworCisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvbmV0d29ya3Jlc3BvbnNlL2Ny
ZWF0ZWRlc3Ryb3kiLCB0ZXN0X25ldHdvcmtfcmVzcG9uc2VfY3JlYXRlX2Rlc3Ryb3kpOworICAg
IGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9uZXR3b3JrcmVzcG9uc2UvcHJvcGVydGllcyIsIHRl
c3RfbmV0d29ya19yZXNwb25zZV9wcm9wZXJ0aWVzKTsKKyAgICByZXR1cm4gZ190ZXN0X3J1biAo
KTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rl
c3R3ZWJiYWNrZm9yd2FyZGxpc3QuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
R3RrL3Rlc3R3ZWJiYWNrZm9yd2FyZGxpc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi43NzgyZDQwCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRHdGsvdGVzdHdlYmJhY2tmb3J3YXJkbGlzdC5jCkBAIC0wLDAgKzEsMzI2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5o
PgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRf
d2ViX2hpc3RvcnlfaXRlbV9saWZldGltZSh2b2lkKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdl
YlZpZXc7CisgICAgV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3Q7Cisg
ICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGN1cnJlbnRJdGVtOworICAgIFdlYktpdFdlYkhpc3Rv
cnlJdGVtKiBmb3J3YXJkSXRlbTsKKyAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogYmFja0l0ZW07
CisgICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIG50aEl0ZW07CisgICAgV2ViS2l0V2ViSGlzdG9y
eUl0ZW0qIGl0ZW0xOworICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBpdGVtMjsKKyAgICBXZWJL
aXRXZWJIaXN0b3J5SXRlbSogaXRlbTM7CisgICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGl0ZW00
OworICAgIEdMaXN0KiBiYWNrTGlzdCA9IE5VTEw7CisgICAgR0xpc3QqIGZvcndhcmRMaXN0ID0g
TlVMTDsKKyAgICBnX3Rlc3RfYnVnKCIxOTg5OCIpOworCisgICAgd2ViVmlldyA9IFdFQktJVF9X
RUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdl
YlZpZXcpOworICAgIGJhY2tGb3J3YXJkTGlzdCA9IHdlYmtpdF93ZWJfdmlld19nZXRfYmFja19m
b3J3YXJkX2xpc3Qod2ViVmlldyk7CisgICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKGJhY2tG
b3J3YXJkTGlzdCktPnJlZl9jb3VudCwgPT0sIDEpOworCisgICAgLyogYWRkIHRlc3QgaXRlbXMg
Ki8KKyAgICBpdGVtMSA9IHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX25ld193aXRoX2RhdGEoImh0
dHA6Ly9leGFtcGxlLmNvbS8xLyIsICJTaXRlIDEiKTsKKyAgICB3ZWJraXRfd2ViX2JhY2tfZm9y
d2FyZF9saXN0X2FkZF9pdGVtKGJhY2tGb3J3YXJkTGlzdCwgaXRlbTEpOworICAgIGdfb2JqZWN0
X3VucmVmKGl0ZW0xKTsKKworICAgIGl0ZW0yID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3
X3dpdGhfZGF0YSgiaHR0cDovL2V4YW1wbGUuY29tLzIvIiwgIlNpdGUgMiIpOworICAgIHdlYmtp
dF93ZWJfYmFja19mb3J3YXJkX2xpc3RfYWRkX2l0ZW0oYmFja0ZvcndhcmRMaXN0LCBpdGVtMik7
CisgICAgZ19vYmplY3RfdW5yZWYoaXRlbTIpOworCisgICAgaXRlbTMgPSB3ZWJraXRfd2ViX2hp
c3RvcnlfaXRlbV9uZXdfd2l0aF9kYXRhKCJodHRwOi8vZXhhbXBsZS5jb20vMy8iLCAiU2l0ZSAz
Iik7CisgICAgd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9hZGRfaXRlbShiYWNrRm9yd2Fy
ZExpc3QsIGl0ZW0zKTsKKyAgICBnX29iamVjdF91bnJlZihpdGVtMyk7CisKKyAgICBpdGVtNCA9
IHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX25ld193aXRoX2RhdGEoImh0dHA6Ly9leGFtcGxlLmNv
bS80LyIsICJTaXRlIDQiKTsKKyAgICB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2FkZF9p
dGVtKGJhY2tGb3J3YXJkTGlzdCwgaXRlbTQpOworICAgIGdfb2JqZWN0X3VucmVmKGl0ZW00KTsK
KworICAgIC8qIG1ha2Ugc3VyZSB0aGVzZSBmdW5jdGlvbnMgZG9uJ3QgYWRkIHVubmVjZXNzYXJ5
IHJlZiB0byB0aGUgaGlzdG9yeSBpdGVtICovCisgICAgYmFja0l0ZW0gPSB3ZWJraXRfd2ViX2Jh
Y2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2l0ZW0oYmFja0ZvcndhcmRMaXN0KTsKKyAgICBnX29i
amVjdF9yZWYoYmFja0l0ZW0pOworICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChiYWNrSXRl
bSktPnJlZl9jb3VudCwgPT0sIDIpOworICAgIGdfb2JqZWN0X3VucmVmKGJhY2tJdGVtKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoYmFja0l0ZW0pLT5yZWZfY291bnQsID09LCAxKTsK
KworICAgIGN1cnJlbnRJdGVtID0gd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3Vy
cmVudF9pdGVtKGJhY2tGb3J3YXJkTGlzdCk7CisgICAgZ19vYmplY3RfcmVmKGN1cnJlbnRJdGVt
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoY3VycmVudEl0ZW0pLT5yZWZfY291bnQs
ID09LCAyKTsKKyAgICBnX29iamVjdF91bnJlZihjdXJyZW50SXRlbSk7CisgICAgZ19hc3NlcnRf
Y21waW50KEdfT0JKRUNUKGN1cnJlbnRJdGVtKS0+cmVmX2NvdW50LCA9PSwgMSk7CisKKyAgICB3
ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dvX3RvX2l0ZW0oYmFja0ZvcndhcmRMaXN0LCBp
dGVtMik7CisgICAgZm9yd2FyZEl0ZW0gPSB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dl
dF9mb3J3YXJkX2l0ZW0oYmFja0ZvcndhcmRMaXN0KTsKKyAgICBnX29iamVjdF9yZWYoZm9yd2Fy
ZEl0ZW0pOworICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChmb3J3YXJkSXRlbSktPnJlZl9j
b3VudCwgPT0sIDIpOworICAgIGdfb2JqZWN0X3VucmVmKGZvcndhcmRJdGVtKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoR19PQkpFQ1QoZm9yd2FyZEl0ZW0pLT5yZWZfY291bnQsID09LCAxKTsKKwor
ICAgIG50aEl0ZW0gPSB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9udGhfaXRlbShi
YWNrRm9yd2FyZExpc3QsIDEpOworICAgIGdfb2JqZWN0X3JlZihudGhJdGVtKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoR19PQkpFQ1QobnRoSXRlbSktPnJlZl9jb3VudCwgPT0sIDIpOworICAgIGdf
b2JqZWN0X3VucmVmKG50aEl0ZW0pOworICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChudGhJ
dGVtKS0+cmVmX2NvdW50LCA9PSwgMSk7CisKKyAgICBiYWNrTGlzdCA9IHdlYmtpdF93ZWJfYmFj
a19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGlzdF93aXRoX2xpbWl0KGJhY2tGb3J3YXJkTGlzdCwg
NSk7CisgICAgZm9yICg7IGJhY2tMaXN0OyBiYWNrTGlzdCA9IGJhY2tMaXN0LT5uZXh0KQorICAg
ICAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoYmFja0xpc3QtPmRhdGEpLT5yZWZfY291bnQs
ID09LCAxKTsKKworICAgIGZvcndhcmRMaXN0ID0gd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlz
dF9nZXRfZm9yd2FyZF9saXN0X3dpdGhfbGltaXQoYmFja0ZvcndhcmRMaXN0LCA1KTsKKyAgICBm
b3IgKDsgZm9yd2FyZExpc3Q7IGZvcndhcmRMaXN0ID0gZm9yd2FyZExpc3QtPm5leHQpCisgICAg
ICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChmb3J3YXJkTGlzdC0+ZGF0YSktPnJlZl9jb3Vu
dCwgPT0sIDEpOworCisgICAgZ19saXN0X2ZyZWUoZm9yd2FyZExpc3QpOworICAgIGdfbGlzdF9m
cmVlKGJhY2tMaXN0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoaXRlbTEpLT5yZWZf
Y291bnQsID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoaXRlbTIpLT5yZWZf
Y291bnQsID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoaXRlbTMpLT5yZWZf
Y291bnQsID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoaXRlbTQpLT5yZWZf
Y291bnQsID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoYmFja0ZvcndhcmRM
aXN0KS0+cmVmX2NvdW50LCA9PSwgMSk7CisgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Cit9
CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9vcmRlcih2
b2lkKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXc7CisgICAgV2ViS2l0V2ViQmFja0Zv
cndhcmRMaXN0KiB3ZWJCYWNrRm9yd2FyZExpc3Q7CisgICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0q
IGl0ZW0xOworICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBpdGVtMjsKKyAgICBXZWJLaXRXZWJI
aXN0b3J5SXRlbSogaXRlbTM7CisgICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGl0ZW00OworICAg
IFdlYktpdFdlYkhpc3RvcnlJdGVtKiBjdXJyZW50SXRlbTsKKyAgICBHTGlzdCogYmFja0xpc3Qg
PSBOVUxMOworICAgIEdMaXN0KiBmb3J3YXJkTGlzdCA9IE5VTEw7CisgICAgZ190ZXN0X2J1Zygi
MjI2OTQiKTsKKworICAgIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3
X25ldygpKTsKKyAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKKworICAgIHdlYmtpdF93
ZWJfdmlld19zZXRfbWFpbnRhaW5zX2JhY2tfZm9yd2FyZF9saXN0KHdlYlZpZXcsIFRSVUUpOwor
ICAgIHdlYkJhY2tGb3J3YXJkTGlzdCA9IHdlYmtpdF93ZWJfdmlld19nZXRfYmFja19mb3J3YXJk
X2xpc3Qod2ViVmlldyk7CisgICAgZ19hc3NlcnQod2ViQmFja0ZvcndhcmRMaXN0KTsKKworICAg
IC8vIENoZWNrIHRoYXQgdGhlcmUgaXMgbm8gaXRlbS4KKyAgICBnX2Fzc2VydCghd2Via2l0X3dl
Yl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCkp
OworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9m
b3J3YXJkX2xlbmd0aCh3ZWJCYWNrRm9yd2FyZExpc3QpLCA9PSwgMCk7CisgICAgZ19hc3NlcnRf
Y21waW50KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGVuZ3RoKHdlYkJh
Y2tGb3J3YXJkTGlzdCksID09LCAwKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nh
bl9nb19mb3J3YXJkKHdlYlZpZXcpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nh
bl9nb19iYWNrKHdlYlZpZXcpKTsKKworICAgIC8vIEFkZCBhIG5ldyBpdGVtcworICAgIGl0ZW0x
ID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dpdGhfZGF0YSgiaHR0cDovL2V4YW1wbGUu
Y29tLzEvIiwgIlNpdGUgMSIpOworICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfYWRk
X2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0LCBpdGVtMSk7CisgICAgZ19vYmplY3RfdW5yZWYoaXRl
bTEpOworICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY29udGFpbnNf
aXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QsIGl0ZW0xKSk7CisKKyAgICBpdGVtMiA9IHdlYmtpdF93
ZWJfaGlzdG9yeV9pdGVtX25ld193aXRoX2RhdGEoImh0dHA6Ly9leGFtcGxlLmNvbS8yLyIsICJT
aXRlIDIiKTsKKyAgICB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2FkZF9pdGVtKHdlYkJh
Y2tGb3J3YXJkTGlzdCwgaXRlbTIpOworICAgIGdfb2JqZWN0X3VucmVmKGl0ZW0yKTsKKyAgICBn
X2Fzc2VydCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2NvbnRhaW5zX2l0ZW0od2ViQmFj
a0ZvcndhcmRMaXN0LCBpdGVtMikpOworCisgICAgaXRlbTMgPSB3ZWJraXRfd2ViX2hpc3Rvcnlf
aXRlbV9uZXdfd2l0aF9kYXRhKCJodHRwOi8vZXhhbXBsZS5jb20vMy8iLCAiU2l0ZSAzIik7Cisg
ICAgd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9hZGRfaXRlbSh3ZWJCYWNrRm9yd2FyZExp
c3QsIGl0ZW0zKTsKKyAgICBnX29iamVjdF91bnJlZihpdGVtMyk7CisgICAgZ19hc3NlcnQod2Vi
a2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9jb250YWluc19pdGVtKHdlYkJhY2tGb3J3YXJkTGlz
dCwgaXRlbTMpKTsKKworICAgIGl0ZW00ID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dp
dGhfZGF0YSgiaHR0cDovL2V4YW1wbGUuY29tLzQvIiwgIlNpdGUgNCIpOworICAgIHdlYmtpdF93
ZWJfYmFja19mb3J3YXJkX2xpc3RfYWRkX2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0LCBpdGVtNCk7
CisgICAgZ19vYmplY3RfdW5yZWYoaXRlbTQpOworICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfYmFj
a19mb3J3YXJkX2xpc3RfY29udGFpbnNfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QsIGl0ZW00KSk7
CisKKyAgICAvLyBjaGVjayB0aGUgYmFjayBsaXN0IG9yZGVyCisgICAgYmFja0xpc3QgPSB3ZWJr
aXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3Rfd2l0aF9saW1pdCh3ZWJCYWNr
Rm9yd2FyZExpc3QsIDUpOworICAgIGdfYXNzZXJ0KGJhY2tMaXN0KTsKKworICAgIGN1cnJlbnRJ
dGVtID0gV0VCS0lUX1dFQl9ISVNUT1JZX0lURU0oYmFja0xpc3QtPmRhdGEpOworICAgIGdfYXNz
ZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdXJpKGN1cnJlbnRJdGVtKSwg
PT0sICJodHRwOi8vZXhhbXBsZS5jb20vMy8iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0
X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3RpdGxlKGN1cnJlbnRJdGVtKSwgPT0sICJTaXRlIDMiKTsK
KyAgICBiYWNrTGlzdCA9IGJhY2tMaXN0LT5uZXh0OworCisgICAgY3VycmVudEl0ZW0gPSBXRUJL
SVRfV0VCX0hJU1RPUllfSVRFTShiYWNrTGlzdC0+ZGF0YSk7CisgICAgZ19hc3NlcnRfY21wc3Ry
KHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF91cmkoY3VycmVudEl0ZW0pLCA9PSwgImh0dHA6
Ly9leGFtcGxlLmNvbS8yLyIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3Rv
cnlfaXRlbV9nZXRfdGl0bGUoY3VycmVudEl0ZW0pLCA9PSwgIlNpdGUgMiIpOworICAgIGJhY2tM
aXN0ID0gYmFja0xpc3QtPm5leHQ7CisKKyAgICBjdXJyZW50SXRlbSA9IFdFQktJVF9XRUJfSElT
VE9SWV9JVEVNKGJhY2tMaXN0LT5kYXRhKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dl
Yl9oaXN0b3J5X2l0ZW1fZ2V0X3VyaShjdXJyZW50SXRlbSksID09LCAiaHR0cDovL2V4YW1wbGUu
Y29tLzEvIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dl
dF90aXRsZShjdXJyZW50SXRlbSksID09LCAiU2l0ZSAxIik7CisgICAgZ19saXN0X2ZyZWUoYmFj
a0xpc3QpOworCisgICAgLy8gY2hlY2sgdGhlIGZvcndhcmQgbGlzdCBvcmRlcgorICAgIGdfYXNz
ZXJ0KHdlYmtpdF93ZWJfdmlld19nb190b19iYWNrX2ZvcndhcmRfaXRlbSh3ZWJWaWV3LCBpdGVt
MSkpOworICAgIGZvcndhcmRMaXN0ID0gd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRf
Zm9yd2FyZF9saXN0X3dpdGhfbGltaXQod2ViQmFja0ZvcndhcmRMaXN0LDUpOworICAgIGdfYXNz
ZXJ0KGZvcndhcmRMaXN0KTsKKworICAgIGN1cnJlbnRJdGVtID0gV0VCS0lUX1dFQl9ISVNUT1JZ
X0lURU0oZm9yd2FyZExpc3QtPmRhdGEpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2Vi
X2hpc3RvcnlfaXRlbV9nZXRfdXJpKGN1cnJlbnRJdGVtKSwgPT0sICJodHRwOi8vZXhhbXBsZS5j
b20vNC8iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0
X3RpdGxlKGN1cnJlbnRJdGVtKSwgPT0sICJTaXRlIDQiKTsKKyAgICBmb3J3YXJkTGlzdCA9IGZv
cndhcmRMaXN0LT5uZXh0OworCisgICAgY3VycmVudEl0ZW0gPSBXRUJLSVRfV0VCX0hJU1RPUllf
SVRFTShmb3J3YXJkTGlzdC0+ZGF0YSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJf
aGlzdG9yeV9pdGVtX2dldF91cmkoY3VycmVudEl0ZW0pLCA9PSwgImh0dHA6Ly9leGFtcGxlLmNv
bS8zLyIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRf
dGl0bGUoY3VycmVudEl0ZW0pLCA9PSwgIlNpdGUgMyIpOworICAgIGZvcndhcmRMaXN0ID0gZm9y
d2FyZExpc3QtPm5leHQ7CisKKyAgICBjdXJyZW50SXRlbSA9IFdFQktJVF9XRUJfSElTVE9SWV9J
VEVNKGZvcndhcmRMaXN0LT5kYXRhKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9o
aXN0b3J5X2l0ZW1fZ2V0X3VyaShjdXJyZW50SXRlbSksID09LCAiaHR0cDovL2V4YW1wbGUuY29t
LzIvIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF90
aXRsZShjdXJyZW50SXRlbSksID09LCAiU2l0ZSAyIik7CisKKyAgICBnX2xpc3RfZnJlZShmb3J3
YXJkTGlzdCk7CisgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Cit9CisKK3N0YXRpYyB2b2lk
IHRlc3Rfd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9hZGRfaXRlbSh2b2lkKQoreworICAg
IFdlYktpdFdlYlZpZXcqIHdlYlZpZXc7CisgICAgV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3
ZWJCYWNrRm9yd2FyZExpc3Q7CisgICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGFkZEl0ZW0xOwor
ICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBhZGRJdGVtMjsKKyAgICBXZWJLaXRXZWJIaXN0b3J5
SXRlbSogYmFja0l0ZW07CisgICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGN1cnJlbnRJdGVtOwor
ICAgIGdfdGVzdF9idWcoIjIyOTg4Iik7CisKKyAgICB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVX
KHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7
CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X21haW50YWluc19iYWNrX2ZvcndhcmRfbGlzdCh3
ZWJWaWV3LCBUUlVFKTsKKyAgICB3ZWJCYWNrRm9yd2FyZExpc3QgPSB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X2JhY2tfZm9yd2FyZF9saXN0KHdlYlZpZXcpOworICAgIGdfYXNzZXJ0KHdlYkJhY2tGb3J3
YXJkTGlzdCk7CisKKyAgICAvLyBDaGVjayB0aGF0IHRoZXJlIGlzIG5vIGl0ZW0uCisgICAgZ19h
c3NlcnQoIXdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh3ZWJC
YWNrRm9yd2FyZExpc3QpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2Zv
cndhcmRfbGlzdF9nZXRfZm9yd2FyZF9sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDAp
OworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9i
YWNrX2xlbmd0aCh3ZWJCYWNrRm9yd2FyZExpc3QpLCA9PSwgMCk7CisgICAgZ19hc3NlcnQoIXdl
YmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh3ZWJWaWV3KSk7CisgICAgZ19hc3NlcnQoIXdl
YmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayh3ZWJWaWV3KSk7CisKKyAgICAvLyBBZGQgYSBuZXcg
aXRlbQorICAgIGFkZEl0ZW0xID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dpdGhfZGF0
YSgiaHR0cDovL2V4YW1wbGUuY29tLyIsICJBZGRlZCBzaXRlIik7CisgICAgd2Via2l0X3dlYl9i
YWNrX2ZvcndhcmRfbGlzdF9hZGRfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QsIGFkZEl0ZW0xKTsK
KyAgICBnX29iamVjdF91bnJlZihhZGRJdGVtMSk7CisgICAgZ19hc3NlcnQod2Via2l0X3dlYl9i
YWNrX2ZvcndhcmRfbGlzdF9jb250YWluc19pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCwgYWRkSXRl
bTEpKTsKKworICAgIC8vIENoZWNrIHRoYXQgdGhlIGFkZGVkIGl0ZW0gaXMgdGhlIGN1cnJlbnQg
aXRlbS4KKyAgICBjdXJyZW50SXRlbSA9IHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0
X2N1cnJlbnRfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QpOworICAgIGdfYXNzZXJ0KGN1cnJlbnRJ
dGVtKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9n
ZXRfZm9yd2FyZF9sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDApOworICAgIGdfYXNz
ZXJ0X2NtcGludCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xlbmd0aCh3
ZWJCYWNrRm9yd2FyZExpc3QpLCA9PSwgMCk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmll
d19jYW5fZ29fZm9yd2FyZCh3ZWJWaWV3KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmll
d19jYW5fZ29fYmFjayh3ZWJWaWV3KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJf
aGlzdG9yeV9pdGVtX2dldF91cmkoY3VycmVudEl0ZW0pLCA9PSwgImh0dHA6Ly9leGFtcGxlLmNv
bS8iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3Rp
dGxlKGN1cnJlbnRJdGVtKSwgPT0sICJBZGRlZCBzaXRlIik7CisKKyAgICAvLyBBZGQgYW5vdGhl
ciBpdGVtLgorICAgIGFkZEl0ZW0yID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dpdGhf
ZGF0YSgiaHR0cDovL2V4YW1wbGUuY29tLzIvIiwgIkFkZGVkIHNpdGUgMiIpOworICAgIHdlYmtp
dF93ZWJfYmFja19mb3J3YXJkX2xpc3RfYWRkX2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0LCBhZGRJ
dGVtMik7CisgICAgZ19vYmplY3RfdW5yZWYoYWRkSXRlbTIpOworICAgIGdfYXNzZXJ0KHdlYmtp
dF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY29udGFpbnNfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3Qs
IGFkZEl0ZW0yKSk7CisKKyAgICAvLyBDaGVjayB0aGF0IHRoZSBhZGRlZCBpdGVtIGlzIG5ldyBj
dXJyZW50IGl0ZW0uCisgICAgY3VycmVudEl0ZW0gPSB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9s
aXN0X2dldF9jdXJyZW50X2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0KTsKKyAgICBnX2Fzc2VydChj
dXJyZW50SXRlbSk7CisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJfYmFja19mb3J3YXJk
X2xpc3RfZ2V0X2ZvcndhcmRfbGVuZ3RoKHdlYkJhY2tGb3J3YXJkTGlzdCksID09LCAwKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19s
ZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDEpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRf
d2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQod2ViVmlldykpOworICAgIGdfYXNzZXJ0KHdlYmtpdF93
ZWJfdmlld19jYW5fZ29fYmFjayh3ZWJWaWV3KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtp
dF93ZWJfaGlzdG9yeV9pdGVtX2dldF91cmkoY3VycmVudEl0ZW0pLCA9PSwgImh0dHA6Ly9leGFt
cGxlLmNvbS8yLyIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRl
bV9nZXRfdGl0bGUoY3VycmVudEl0ZW0pLCA9PSwgIkFkZGVkIHNpdGUgMiIpOworCisgICAgYmFj
a0l0ZW0gPSB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2l0ZW0od2ViQmFj
a0ZvcndhcmRMaXN0KTsKKyAgICBnX2Fzc2VydChiYWNrSXRlbSk7CisgICAgZ19hc3NlcnRfY21w
c3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF91cmkoYmFja0l0ZW0pLCA9PSwgImh0dHA6
Ly9leGFtcGxlLmNvbS8iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5
X2l0ZW1fZ2V0X3RpdGxlKGJhY2tJdGVtKSwgPT0sICJBZGRlZCBzaXRlIik7CisKKyAgICAvLyBH
byB0byB0aGUgZmlyc3QgYWRkZWQgaXRlbS4KKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdf
Z29fdG9fYmFja19mb3J3YXJkX2l0ZW0od2ViVmlldywgYWRkSXRlbTEpKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9sZW5ndGgo
d2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRf
d2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xlbmd0aCh3ZWJCYWNrRm9yd2FyZExpc3Qp
LCA9PSwgMCk7CisgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHdl
YlZpZXcpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrKHdlYlZp
ZXcpKTsKKworICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOworfQorCitzdGF0aWMgdm9pZCB0
ZXN0X3dlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY2xlYXIodm9pZCkKK3sKKyAgICBXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3OworICAgIFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViQmFj
a0ZvcndhcmRMaXN0OworICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBhZGRJdGVtOworICAgIGdf
dGVzdF9idWcoIjM2MTczIik7CisKKyAgICB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtp
dF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7CisKKyAg
ICB3ZWJCYWNrRm9yd2FyZExpc3QgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2JhY2tfZm9yd2FyZF9s
aXN0KHdlYlZpZXcpOworICAgIGdfYXNzZXJ0KHdlYkJhY2tGb3J3YXJkTGlzdCk7CisKKyAgICAv
LyBDaGVjayB0aGF0IHRoZXJlIGlzIG5vIGl0ZW0uCisgICAgZ19hc3NlcnRfY21waW50KHdlYmtp
dF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGVuZ3RoKHdlYkJhY2tGb3J3YXJk
TGlzdCksID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2Zvcndh
cmRfbGlzdF9nZXRfYmFja19sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDApOworICAg
IGdfYXNzZXJ0KCF3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0o
d2ViQmFja0ZvcndhcmRMaXN0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5f
Z29fZm9yd2FyZCh3ZWJWaWV3KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5f
Z29fYmFjayh3ZWJWaWV3KSk7CisKKyAgICAvLyBDaGVjayB0aGF0IGNsZWFyaW5nIHRoZSBlbXB0
eSBsaXN0IGRvZXMgbm90IG1vZGlmeSBjb3VudGVycworICAgIHdlYmtpdF93ZWJfYmFja19mb3J3
YXJkX2xpc3RfY2xlYXIod2ViQmFja0ZvcndhcmRMaXN0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
d2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9sZW5ndGgod2ViQmFja0Zv
cndhcmRMaXN0KSwgPT0sIDApOworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2ViX2JhY2tf
Zm9yd2FyZF9saXN0X2dldF9iYWNrX2xlbmd0aCh3ZWJCYWNrRm9yd2FyZExpc3QpLCA9PSwgMCk7
CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRf
aXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3
X2Nhbl9nb19mb3J3YXJkKHdlYlZpZXcpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3
X2Nhbl9nb19iYWNrKHdlYlZpZXcpKTsKKworICAgIC8vIEFkZCBhIG5ldyBpdGVtCisgICAgYWRk
SXRlbSA9IHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX25ld193aXRoX2RhdGEoImh0dHA6Ly9leGFt
cGxlLmNvbS8iLCAiQWRkZWQgc2l0ZSIpOworICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xp
c3RfYWRkX2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0LCBhZGRJdGVtKTsKKyAgICBnX29iamVjdF91
bnJlZihhZGRJdGVtKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0
X2NvbnRhaW5zX2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0LCBhZGRJdGVtKSk7CisKKyAgICAvLyBD
aGVjayB0aGF0IGFmdGVyIGNsZWFyaW5nIHRoZSBsaXN0IHRoZSBhZGRlZCBpdGVtIGlzIG5vIGxv
bmdlciBpbiB0aGUgbGlzdAorICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY2xlYXIo
d2ViQmFja0ZvcndhcmRMaXN0KTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl9iYWNrX2Zvcndh
cmRfbGlzdF9jb250YWluc19pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCwgYWRkSXRlbSkpOworCisg
ICAgLy8gQ2hlY2sgdGhhdCBhZnRlciBjbGVhcmluZyBpdCwgdGhlIGxpc3QgaXMgZW1wdHkKKyAg
ICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2Fy
ZF9sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDApOworICAgIGdfYXNzZXJ0X2NtcGlu
dCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xlbmd0aCh3ZWJCYWNrRm9y
d2FyZExpc3QpLCA9PSwgMCk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfYmFja19mb3J3YXJk
X2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QpKTsKKyAgICBnX2Fzc2Vy
dCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHdlYlZpZXcpKTsKKyAgICBnX2Fzc2Vy
dCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrKHdlYlZpZXcpKTsKKworICAgIGdfb2JqZWN0
X3VucmVmKHdlYlZpZXcpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7
CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAgZ190ZXN0X2J1
Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMo
Ii93ZWJraXQvd2ViYmFja2ZvcndhcmRsaXN0L2FkZF9pdGVtIiwgdGVzdF93ZWJraXRfd2ViX2Jh
Y2tfZm9yd2FyZF9saXN0X2FkZF9pdGVtKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQv
d2ViYmFja2ZvcndhcmRsaXN0L2xpc3Rfb3JkZXIiLCB0ZXN0X3dlYmtpdF93ZWJfYmFja19mb3J3
YXJkX2xpc3Rfb3JkZXIpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJoaXN0b3J5
aXRlbS9saWZldGltZSIsIHRlc3Rfd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbGlmZXRpbWUpOwor
ICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJiYWNrZm9yd2FyZGxpc3QvY2xlYXIiLCB0
ZXN0X3dlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY2xlYXIpOworICAgIHJldHVybiBnX3Rl
c3RfcnVuICgpOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRHdGsvdGVzdHdlYmRhdGFzb3VyY2UuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0R3RrL3Rlc3R3ZWJkYXRhc291cmNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMDU2NjI1NwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0R3RrL3Rlc3R3ZWJkYXRhc291cmNlLmMKQEAgLTAsMCArMSwyNDIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIE1pY2hhZWwgQWxvbnpvCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdl
YmtpdC93ZWJraXQuaD4KKworc3RhdGljIGNvbnN0IGdzaG9ydCBkZWZhdWx0VGltZW91dCA9IDEw
OworZ3VpbnQgd2FpdFRpbWVyOworZ2Jvb2xlYW4gc2hvdWxkV2FpdDsKKwordHlwZWRlZiBzdHJ1
Y3QgeworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXc7CisgICAgV2ViS2l0V2ViRnJhbWUqIG1h
aW5GcmFtZTsKK30gV2ViRGF0YVNvdXJjZUZpeHR1cmU7CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Vi
a2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfaW5pdGlhbF9yZXF1ZXN0KCkKK3sKKyAgICBXZWJLaXRX
ZWJWaWV3KiB2aWV3OworICAgIFdlYktpdFdlYkZyYW1lKiBmcmFtZTsKKyAgICBXZWJLaXRXZWJE
YXRhU291cmNlKiBkYXRhU291cmNlOworICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiBpbml0aWFs
UmVxdWVzdDsKKworICAgIHZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25l
dygpKTsKKyAgICBnX29iamVjdF9yZWZfc2luayh2aWV3KTsKKyAgICBmcmFtZSA9IHdlYmtpdF93
ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh2aWV3KTsKKworICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0
KiByZXF1ZXN0ID0gd2Via2l0X25ldHdvcmtfcmVxdWVzdF9uZXcoImh0dHA6Ly93d3cuZ29vZ2xl
LmNvbSIpOworICAgIHdlYmtpdF93ZWJfZnJhbWVfbG9hZF9yZXF1ZXN0KGZyYW1lLCByZXF1ZXN0
KTsKKyAgICBnX29iamVjdF91bnJlZihyZXF1ZXN0KTsKKworICAgIGRhdGFTb3VyY2UgPSB3ZWJr
aXRfd2ViX2ZyYW1lX2dldF9wcm92aXNpb25hbF9kYXRhX3NvdXJjZShmcmFtZSk7CisgICAgZ19h
c3NlcnQoZGF0YVNvdXJjZSk7CisgICAgaW5pdGlhbFJlcXVlc3QgPSB3ZWJraXRfd2ViX2RhdGFf
c291cmNlX2dldF9pbml0aWFsX3JlcXVlc3QoZGF0YVNvdXJjZSk7CisgICAgZ19hc3NlcnRfY21w
c3RyKHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfZ2V0X3VyaShpbml0aWFsUmVxdWVzdCksID09LCAi
aHR0cDovL3d3dy5nb29nbGUuY29tLyIpOworCisgICAgZ19vYmplY3RfdW5yZWYodmlldyk7Cit9
CisKK3N0YXRpYyB2b2lkIG5vdGlmeV9sb2FkX3N0YXR1c191bnJlYWNoYWJsZV9jYihXZWJLaXRX
ZWJWaWV3KiB2aWV3LCBHUGFyYW1TcGVjKiBwc3BlYywgR01haW5Mb29wKiBsb29wKQoreworICAg
IFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1
cyAodmlldyk7CisgICAgV2ViS2l0V2ViRnJhbWUqIGZyYW1lID0gd2Via2l0X3dlYl92aWV3X2dl
dF9tYWluX2ZyYW1lKHZpZXcpOworCisgICAgZ19hc3NlcnQoc3RhdHVzICE9IFdFQktJVF9MT0FE
X0ZJTklTSEVEKTsKKworICAgIGlmIChzdGF0dXMgIT0gV0VCS0lUX0xPQURfRkFJTEVEKQorICAg
ICAgICByZXR1cm47CisKKyAgICBXZWJLaXRXZWJEYXRhU291cmNlKiBkYXRhc291cmNlID0gd2Vi
a2l0X3dlYl9mcmFtZV9nZXRfZGF0YV9zb3VyY2UoZnJhbWUpOworCisgICAgZ19hc3NlcnRfY21w
c3RyKCJodHRwOi8vdGhpcy5ob3N0LmRvZXMubm90LmV4aXN0L2RvaXJlYWxseWV4aXN0Lmh0bWwi
LCA9PSwKKyAgICAgICAgICAgICAgICAgICAgd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfdW5y
ZWFjaGFibGVfdXJpKGRhdGFzb3VyY2UpKTsKKworICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7
Cit9CisKK3N0YXRpYyB2b2lkIG5vdGlmeV9sb2FkX3N0YXR1c19jYihXZWJLaXRXZWJWaWV3KiB2
aWV3LCBHUGFyYW1TcGVjKiBwc3BlYywgR01haW5Mb29wKiBsb29wKQoreworICAgIFdlYktpdExv
YWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyAodmlldyk7
CisgICAgV2ViS2l0V2ViRnJhbWUqIGZyYW1lID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX2Zy
YW1lKHZpZXcpOworICAgIFdlYktpdFdlYkRhdGFTb3VyY2UqIGRhdGFTb3VyY2UgPSB3ZWJraXRf
d2ViX2ZyYW1lX2dldF9kYXRhX3NvdXJjZShmcmFtZSk7CisKKyAgICBpZiAoc3RhdHVzID09IFdF
QktJVF9MT0FEX0NPTU1JVFRFRCkgeworICAgICAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2RhdGFf
c291cmNlX2lzX2xvYWRpbmcoZGF0YVNvdXJjZSkpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGVsc2UgaWYgKHN0YXR1cyAhPSBXRUJLSVRfTE9BRF9GSU5JU0hFRCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgLyogVGVzdCBnZXRfcmVxdWVzdCAqLworICAgIGdfdGVzdF9tZXNzYWdlKCJU
ZXN0aW5nIHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X3JlcXVlc3QiKTsKKyAgICBXZWJLaXRO
ZXR3b3JrUmVxdWVzdCogcmVxdWVzdCA9IHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X3JlcXVl
c3QoZGF0YVNvdXJjZSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9uZXR3b3JrX3JlcXVl
c3RfZ2V0X3VyaShyZXF1ZXN0KSwgPT0sICJodHRwOi8vd3d3LndlYmtpdC5vcmcvIik7CisKKyAg
ICAvKiBUZXN0IGdldF9tYWluX3Jlc291cmNlICovCisgICAgZ190ZXN0X21lc3NhZ2UoIlRlc3Rp
bmcgd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfbWFpbl9yZXNvdXJjZSIpOworICAgIFdlYktp
dFdlYlJlc291cmNlKiByZXNvdXJjZSA9IHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X21haW5f
cmVzb3VyY2UoZGF0YVNvdXJjZSk7CisgICAgZ19hc3NlcnRfY21wc3RyKCJ0ZXh0L2h0bWwiLCA9
PSwgd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfbWltZV90eXBlKHJlc291cmNlKSk7CisgICAgZ19h
c3NlcnRfY21wc3RyKCJodHRwOi8vd3d3LndlYmtpdC5vcmcvIiwgPT0sIHdlYmtpdF93ZWJfcmVz
b3VyY2VfZ2V0X3VyaShyZXNvdXJjZSkpOworCisgICAgLyogVGVzdCBnZXRfZGF0YS4gV2UganVz
dCB0ZXN0IGlmIGRhdGEgaGFzIGNlcnRhaW4gc2l6ZSBmb3IgdGhlIG1lYW4gdGltZSAqLworICAg
IGdfdGVzdF9tZXNzYWdlKCJUZXN0aW5nIHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X2RhdGEg
aGFzIGNlcnRhaW4gc2l6ZSIpOworICAgIEdTdHJpbmcqIGRhdGEgPSB3ZWJraXRfd2ViX2RhdGFf
c291cmNlX2dldF9kYXRhKGRhdGFTb3VyY2UpOworICAgIGdfYXNzZXJ0KGRhdGEtPmxlbiA+IDEw
MCk7CisKKyAgICAvKiBGSVhNRTogQWRkIHRlc3QgZm9yIGdldF9lbmNvZGluZyAqLworCisgICAg
Z19tYWluX2xvb3BfcXVpdChsb29wKTsKK30KKworc3RhdGljIGdib29sZWFuIHdhaXRfdGltZXJf
ZmlyZWQoR01haW5Mb29wKiBsb29wKQoreworICAgIHdhaXRUaW1lciA9IDA7CisgICAgZ19tYWlu
X2xvb3BfcXVpdChsb29wKTsKKworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQg
dGVzdF93ZWJraXRfd2ViX2RhdGFfc291cmNlKCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB2aWV3
OworICAgIEdNYWluTG9vcCogbG9vcDsKKworICAgIHZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Vi
a2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBnX29iamVjdF9yZWZfc2luayh2aWV3KTsKKyAgICBs
b29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
dmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLCBHX0NBTExCQUNLKG5vdGlmeV9sb2FkX3N0YXR1
c19jYiksIGxvb3ApOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh2aWV3LCAiaHR0cDov
L3d3dy53ZWJraXQub3JnIik7CisKKyAgICB3YWl0VGltZXIgPSBnX3RpbWVvdXRfYWRkX3NlY29u
ZHMoZGVmYXVsdFRpbWVvdXQsIChHU291cmNlRnVuYyl3YWl0X3RpbWVyX2ZpcmVkLCBsb29wKTsK
KworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIGlmICh3YWl0VGltZXIpCisgICAg
ICAgIGdfc291cmNlX3JlbW92ZSh3YWl0VGltZXIpOworCisgICAgd2FpdFRpbWVyID0gMDsKKwor
ICAgIGdfbWFpbl9sb29wX3VucmVmKGxvb3ApOworICAgIGdfb2JqZWN0X3VucmVmKHZpZXcpOwor
fQorCitzdGF0aWMgdm9pZCBub3RpZnlfbG9hZF9zdGF0dXNfbGlmZXRpbWVfY2IoV2ViS2l0V2Vi
VmlldyogdmlldywgR1BhcmFtU3BlYyogcHNwZWMsIEdNYWluTG9vcCogbG9vcCkKK3sKKyAgICBX
ZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMg
KHZpZXcpOworICAgIFdlYktpdFdlYkZyYW1lKiBmcmFtZSA9IHdlYmtpdF93ZWJfdmlld19nZXRf
bWFpbl9mcmFtZSh2aWV3KTsKKyAgICBXZWJLaXRXZWJEYXRhU291cmNlKiBkYXRhU291cmNlID0g
d2Via2l0X3dlYl9mcmFtZV9nZXRfZGF0YV9zb3VyY2UoZnJhbWUpOworCisgICAgaWYgKHN0YXR1
cyA9PSBXRUJLSVRfTE9BRF9DT01NSVRURUQpIHsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X3dl
Yl9kYXRhX3NvdXJjZV9pc19sb2FkaW5nKGRhdGFTb3VyY2UpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9IFdFQktJVF9MT0FEX0ZJTklTSEVEKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworfQorCitzdGF0aWMgdm9pZCB0
ZXN0X3dlYmtpdF93ZWJfZGF0YV9zb3VyY2VfbGlmZXRpbWUoKQoreworICAgIFdlYktpdFdlYlZp
ZXcqIHZpZXc7CisgICAgR01haW5Mb29wKiBsb29wOworCisgICAgdmlldyA9IFdFQktJVF9XRUJf
VklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKHZpZXcp
OworICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisgICAgZ19zaWduYWxf
Y29ubmVjdCh2aWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0sobm90aWZ5X2xv
YWRfc3RhdHVzX2xpZmV0aW1lX2NiKSwgbG9vcCk7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRf
dXJpKHZpZXcsICJodHRwOi8vd3d3LndlYmtpdC5vcmciKTsKKworICAgIHdhaXRUaW1lciA9IGdf
dGltZW91dF9hZGRfc2Vjb25kcyhkZWZhdWx0VGltZW91dCwgKEdTb3VyY2VGdW5jKXdhaXRfdGlt
ZXJfZmlyZWQsIGxvb3ApOworCisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgV2Vi
S2l0V2ViRGF0YVNvdXJjZSogZGF0YVNvdXJjZSA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X2RhdGFf
c291cmNlKHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh2aWV3KSk7CisgICAgR0xpc3Qq
IHN1YlJlc291cmNlcyA9IHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X3N1YnJlc291cmNlcyhk
YXRhU291cmNlKTsKKyAgICBnaW50IG51bWJlck9mUmVzb3VyY2VzID0gZ19saXN0X2xlbmd0aChz
dWJSZXNvdXJjZXMpOworICAgIGdfbGlzdF9mcmVlKHN1YlJlc291cmNlcyk7CisKKyAgICBnX2Fz
c2VydF9jbXBpbnQod2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh2aWV3KSwgPT0sIFdF
QktJVF9MT0FEX0ZJTklTSEVEKTsKKworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh2aWV3
LCAiaHR0cDovL2dub21lLm9yZyIpOworCisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJf
dmlld19nZXRfbG9hZF9zdGF0dXModmlldyksID09LCBXRUJLSVRfTE9BRF9QUk9WSVNJT05BTCk7
CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfc3RvcF9sb2FkaW5nKHZpZXcpOworCisgICAgZ19hc3Nl
cnRfY21waW50KHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXModmlldyksID09LCBXRUJL
SVRfTE9BRF9GQUlMRUQpOworCisgICAgc3ViUmVzb3VyY2VzID0gd2Via2l0X3dlYl9kYXRhX3Nv
dXJjZV9nZXRfc3VicmVzb3VyY2VzKGRhdGFTb3VyY2UpOworICAgIGdfYXNzZXJ0X2NtcGludChu
dW1iZXJPZlJlc291cmNlcywgPT0sIGdfbGlzdF9sZW5ndGgoc3ViUmVzb3VyY2VzKSk7CisgICAg
Z19saXN0X2ZyZWUoc3ViUmVzb3VyY2VzKTsKKworICAgIGlmICh3YWl0VGltZXIpCisgICAgICAg
IGdfc291cmNlX3JlbW92ZSh3YWl0VGltZXIpOworCisgICAgd2FpdFRpbWVyID0gMDsKKworICAg
IGdfbWFpbl9sb29wX3VucmVmKGxvb3ApOworICAgIGdfb2JqZWN0X3VucmVmKHZpZXcpOworfQor
CitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfZGF0YV9zb3VyY2VfdW5yZWFjaGFibGVfdXJp
KCkKK3sKKyAgICAvKiBGSVhNRTogdGhpcyB0ZXN0IGZhaWxzIGN1cnJlbnRseS4gKi8KKyAgICBy
ZXR1cm47CisKKyAgICBXZWJLaXRXZWJWaWV3KiB2aWV3OworICAgIEdNYWluTG9vcCogbG9vcDsK
KworICAgIHZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAg
ICBnX29iamVjdF9yZWZfc2luayh2aWV3KTsKKyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5V
TEwsIFRSVUUpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QodmlldywgIm5vdGlmeTo6bG9hZC1zdGF0
dXMiLCBHX0NBTExCQUNLKG5vdGlmeV9sb2FkX3N0YXR1c191bnJlYWNoYWJsZV9jYiksIGxvb3Ap
OworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh2aWV3LCAiaHR0cDovL3RoaXMuaG9zdC5k
b2VzLm5vdC5leGlzdC9kb2lyZWFsbHlleGlzdC5odG1sIik7CisKKyAgICB3YWl0VGltZXIgPSBn
X3RpbWVvdXRfYWRkX3NlY29uZHMoZGVmYXVsdFRpbWVvdXQsIChHU291cmNlRnVuYyl3YWl0X3Rp
bWVyX2ZpcmVkLCBsb29wKTsKKworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIGlm
ICh3YWl0VGltZXIpCisgICAgICAgIGdfc291cmNlX3JlbW92ZSh3YWl0VGltZXIpOworCisgICAg
d2FpdFRpbWVyID0gMDsKKworICAgIGdfbWFpbl9sb29wX3VucmVmKGxvb3ApOworICAgIGdfb2Jq
ZWN0X3VucmVmKHZpZXcpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7
CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAgZ190ZXN0X2J1
Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYnVnKCIyNDc1
OCIpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJkYXRhc291cmNlL2dldF9pbml0
aWFsX3JlcXVlc3QiLAorICAgICAgICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF93ZWJfZGF0YV9z
b3VyY2VfZ2V0X2luaXRpYWxfcmVxdWVzdCk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0
L3dlYmRhdGFzb3VyY2UvYXBpIiwKKyAgICAgICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfd2Vi
X2RhdGFfc291cmNlKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2ViZGF0YXNvdXJj
ZS91bnJlYWNoYWJsZV91cmkiLAorICAgICAgICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF93ZWJf
ZGF0YV9zb3VyY2VfdW5yZWFjaGFibGVfdXJpKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJr
aXQvd2ViZGF0YXNvdXJjZS9saWZldGltZSIsCisgICAgICAgICAgICAgICAgICAgIHRlc3Rfd2Vi
a2l0X3dlYl9kYXRhX3NvdXJjZV9saWZldGltZSk7CisKKyAgICByZXR1cm4gZ190ZXN0X3J1biAo
KTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rl
c3R3ZWJmcmFtZS5jIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdl
YmZyYW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEzMTg3MwotLS0g
L2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3
ZWJmcmFtZS5jCkBAIC0wLDAgKzEsMjIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEhv
bGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQ29sbGFib3Jh
IEx0ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8
dW5pc3RkLmg+CisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Cisj
aW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKworc3RhdGlj
IGludCBudW1iZXJPZkZyYW1lc0NyZWF0ZWQgPSAwOworCitzdGF0aWMgdm9pZCBjcmVhdGVGcmFt
ZVNpZ25hbFRlc3RGcmFtZUNyZWF0ZWRDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBX
ZWJLaXRXZWJGcmFtZSogZnJhbWUsIGdwb2ludGVyIGRhdGEpCit7CisgICAgbnVtYmVyT2ZGcmFt
ZXNDcmVhdGVkKys7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBjcmVhdGVGcmFtZVNpZ25hbFRlc3RU
aW1lb3V0KGdwb2ludGVyIGRhdGEpCit7CisgICAgZ19hc3NlcnRfY21waW50KG51bWJlck9mRnJh
bWVzQ3JlYXRlZCwgPT0sIDIpOworICAgIGdfbWFpbl9sb29wX3F1aXQoKEdNYWluTG9vcCopIGRh
dGEpOworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2Vi
X2ZyYW1lX2NyZWF0ZWRfc2lnbmFsKHZvaWQpCit7CisgICAgR3RrV2lkZ2V0KiB3ZWJWaWV3Owor
ICAgIEd0a1dpZGdldCogd2luZG93OworICAgIEdNYWluTG9vcCogbG9vcCA9IGdfbWFpbl9sb29w
X25ldyhOVUxMLCBUUlVFKTsKKworICAgIHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5E
T1dfVE9QTEVWRUwpOworCisgICAgd2ViVmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKKyAg
ICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJmcmFtZS1jcmVhdGVkIiwgR19DQUxMQkFDSyhj
cmVhdGVGcmFtZVNpZ25hbFRlc3RGcmFtZUNyZWF0ZWRDYWxsYmFjayksIGxvb3ApOworCisgICAg
Ly8gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCBleGFjdGx5IHR3byBjcmVhdGUtZnJhbWUgc2lnbmFs
cyBhcmUKKyAgICAvLyBmaXJlZCBhbmQgbm8gbW9yZSwgc28gd2Ugc2V0IGEgdGltZW91dCBoZXJl
LiBUaGVyZSBkb2VzIG5vdCBhcHBlYXIKKyAgICAvLyB0byBiZSBhIHNpbXBsZSB3YXkgdmlhIHRo
ZSBBUEkgdG8gZmlndXJlIG91dCB3aGVuIGFsbCBmcmFtZXMgaGF2ZQorICAgIC8vIGxvYWRlZC4K
KyAgICBnX3RpbWVvdXRfYWRkKDUwMCwgY3JlYXRlRnJhbWVTaWduYWxUZXN0VGltZW91dCwgbG9v
cCk7CisKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHdlYlZp
ZXcpOworICAgIGd0a193aWRnZXRfc2hvdyh3aW5kb3cpOworICAgIGd0a193aWRnZXRfc2hvdyh3
ZWJWaWV3KTsKKworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJ
RVcod2ViVmlldyksCisgICAgICAgICI8aHRtbD48Ym9keT5GcmFtZXMhIgorICAgICAgICAiPGlm
cmFtZT48L2lmcmFtZT4iCisgICAgICAgICI8aWZyYW1lPjwvaWZyYW1lPiIKKyAgICAgICAgIjwv
Ym9keT48L2h0bWw+IiwKKyAgICAgICAgInRleHQvaHRtbCIsICJ1dGYtOCIsICJmaWxlOi8vIik7
CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtp
dF93ZWJfZnJhbWVfY3JlYXRlX2Rlc3Ryb3kodm9pZCkKK3sKKyAgICBHdGtXaWRnZXQgKndlYlZp
ZXc7CisgICAgR3RrV2lkZ2V0ICp3aW5kb3c7CisKKyAgICBnX3Rlc3RfYnVnKCIyMTgzNyIpOwor
ICAgIHdlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7CisgICAgZ19vYmplY3RfcmVmX3Np
bmsod2ViVmlldyk7CisgICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKHdlYlZpZXcpLT5yZWZf
Y291bnQsID09LCAxKTsKKyAgICAvLyBUaGlzIGNyYXNoZWQgd2l0aCB0aGUgb3JpZ2luYWwgdmVy
c2lvbgorICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOworCisgICAgZ190ZXN0X2J1ZygiMjUw
NDIiKTsKKyAgICB3aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsK
KyAgICB3ZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygpOworICAgIGd0a19jb250YWluZXJf
YWRkKEdUS19DT05UQUlORVIod2luZG93KSwgd2ViVmlldyk7CisgICAgZ3RrX3dpZGdldF9zaG93
KHdpbmRvdyk7CisgICAgZ3RrX3dpZGdldF9zaG93KHdlYlZpZXcpOworICAgIGd0a193aWRnZXRf
ZGVzdHJveSh3ZWJWaWV3KTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX2ZyYW1l
X2xpZmV0aW1lKHZvaWQpCit7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldzsKKyAgICBXZWJL
aXRXZWJGcmFtZSogd2ViRnJhbWU7CisgICAgZ190ZXN0X2J1ZygiMjE4MzciKTsKKworICAgIHdl
YlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBnX29i
amVjdF9yZWZfc2luayh3ZWJWaWV3KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1Qod2Vi
VmlldyktPnJlZl9jb3VudCwgPT0sIDEpOworICAgIHdlYkZyYW1lID0gd2Via2l0X3dlYl92aWV3
X2dldF9tYWluX2ZyYW1lKHdlYlZpZXcpOworICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVCh3
ZWJGcmFtZSktPnJlZl9jb3VudCwgPT0sIDEpOworCisgICAgLy8gQWRkIGR1bW15IHJlZmVyZW5j
ZSBvbiB0aGUgV2ViS2l0V2ViRnJhbWUgdG8ga2VlcCBpdCBhbGl2ZQorICAgIGdfb2JqZWN0X3Jl
Zih3ZWJGcmFtZSk7CisgICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKHdlYkZyYW1lKS0+cmVm
X2NvdW50LCA9PSwgMik7CisKKyAgICAvLyBUaGlzIGNyYXNoZWQgd2l0aCB0aGUgb3JpZ2luYWwg
dmVyc2lvbgorICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOworCisgICAgLy8gTWFrZSBzdXJl
IHRoYXQgdGhlIGZyYW1lIGdvdCBkZWxldGVkIGFzIHdlbGwuIFdlIGRpZCB0aGlzCisgICAgLy8g
YnkgYWRkaW5nIGFuIGV4dHJhIHJlZiBvbiB0aGUgV2ViS2l0V2ViRnJhbWUgYW5kIHdlIHNob3Vs
ZAorICAgIC8vIGJlIHRoZSBvbmUgaG9sZGluZyB0aGUgbGFzdCByZWZlcmVuY2UuCisgICAgZ19h
c3NlcnRfY21waW50KEdfT0JKRUNUKHdlYkZyYW1lKS0+cmVmX2NvdW50LCA9PSwgMSk7CisgICAg
Z19vYmplY3RfdW5yZWYod2ViRnJhbWUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gcHJpbnRfcmVx
dWVzdGVkX2NiKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFdlYkZyYW1lKiB3ZWJGcmFt
ZSwgR01haW5Mb29wKiBsb29wKQoreworICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKHdl
YlZpZXcpLCAic2lnbmFsLWhhbmRsZWQiLCBHSU5UX1RPX1BPSU5URVIoVFJVRSkpOworICAgIGdf
bWFpbl9sb29wX3F1aXQobG9vcCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lk
IHByaW50X3RpbWVvdXQoR01haW5Mb29wKiBsb29wKQoreworICAgIGlmIChnX21haW5fbG9vcF9p
c19ydW5uaW5nKGxvb3ApKQorICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworfQorCitz
dGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfcHJpbnRpbmcodm9pZCkKK3sKKyAgICBX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OworCisgICAgd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3
ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOwor
ICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVCh3ZWJWaWV3KS0+cmVmX2NvdW50LCA9PSwgMSk7
CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIjxodG1sPjxib2R5PjxoMT5XZWJLaXRHVEsrITwvaDE+PC9i
b2R5PjwvaHRtbD4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGV4dC9odG1s
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInV0Zi04IiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImZpbGU6Ly8iKTsKKworICAgIEdNYWluTG9vcCogbG9vcCA9
IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKKworICAgIC8vIERvZXMgamF2YXNjcmlwdCBw
cmludCgpIHdvcmsgY29ycmVjdGx5PworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgInBy
aW50LXJlcXVlc3RlZCIsCisgICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKHByaW50X3Jl
cXVlc3RlZF9jYiksCisgICAgICAgICAgICAgICAgICAgICBsb29wKTsKKworICAgIGdfb2JqZWN0
X3NldF9kYXRhKEdfT0JKRUNUKHdlYlZpZXcpLCAic2lnbmFsLWhhbmRsZWQiLCBHSU5UX1RPX1BP
SU5URVIoRkFMU0UpKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfZXhlY3V0ZV9zY3JpcHQgKHdlYlZp
ZXcsICJwcmludCgpOyIpOworCisgICAgLy8gR2l2ZSBqYXZhc2NyaXB0Y29yZSBzb21lIHRpbWUg
dG8gcHJvY2VzcyB0aGUgcHJpbnQgcmVxdWVzdCwgYnV0CisgICAgLy8gcHJlcGFyZSBhIHRpbWVv
dXQgdG8gYXZvaWQgaXQgcnVubmluZyBmb3JldmVyIGluIGNhc2UgdGhlIHNpZ25hbCBpcworICAg
IC8vIG5ldmVyIGVtaXR0ZWQuCisgICAgZ190aW1lb3V0X2FkZCgxMDAwLCAoR1NvdXJjZUZ1bmMp
cHJpbnRfdGltZW91dCwgbG9vcCk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAg
Z19hc3NlcnRfY21waW50KEdQT0lOVEVSX1RPX0lOVChnX29iamVjdF9nZXRfZGF0YShHX09CSkVD
VCh3ZWJWaWV3KSwgInNpZ25hbC1oYW5kbGVkIikpLCA9PSwgVFJVRSk7CisKKyAgICAvLyBEb2Vz
IHByaW50aW5nIGRpcmVjdGx5IHRvIGEgZmlsZT8KKyAgICBHRXJyb3IgKmVycm9yID0gTlVMTDsK
KyAgICBnY2hhciogdGVtcG9yYXJ5RmlsZW5hbWUgPSBOVUxMOworICAgIGdpbnQgZmQgPSBnX2Zp
bGVfb3Blbl90bXAgKCJ3ZWJraXQtdGVzdHdlYmZyYW1lLVhYWFhYWCIsICZ0ZW1wb3JhcnlGaWxl
bmFtZSwgJmVycm9yKTsKKyAgICBjbG9zZShmZCk7CisKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAg
ICAgZ19jcml0aWNhbCgiRmFpbGVkIHRvIG9wZW4gYSB0ZW1wb3JhcnkgZmlsZSBmb3Igd3JpdGlu
ZzogJXMuIiwgZXJyb3ItPm1lc3NhZ2UpOworICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyb3IpOwor
ICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgICAgLy8gV2UgZGVsZXRlIHRoZSBmaWxl
LCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgZmlndXJlIG91dCB0aGF0IHRoZQorICAgIC8vIGZpbGUg
Z290IHByaW50ZWQ7CisgICAgaWYgKGdfdW5saW5rKHRlbXBvcmFyeUZpbGVuYW1lKSA9PSAtMSkg
eworICAgICAgICBnX3dhcm5pbmcoIkZhaWxlZCB0byBkZWxldGUgdGhlIHRlbXBvcmFyeSBmaWxl
OiAlcy5cblRoaXMgbWF5IGNhdXNlIHRoZSB0ZXN0IHRvIGJlIGJvZ3VzLiIsIGdfc3RyZXJyb3Io
ZXJybm8pKTsKKyAgICB9CisKKyAgICBXZWJLaXRXZWJGcmFtZSogd2ViRnJhbWUgPSB3ZWJraXRf
d2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUod2ViVmlldyk7CisgICAgR3RrUHJpbnRPcGVyYXRpb24q
IG9wZXJhdGlvbiA9IGd0a19wcmludF9vcGVyYXRpb25fbmV3KCk7CisgICAgR3RrUHJpbnRPcGVy
YXRpb25BY3Rpb24gYWN0aW9uID0gR1RLX1BSSU5UX09QRVJBVElPTl9BQ1RJT05fRVhQT1JUOwor
ICAgIEd0a1ByaW50T3BlcmF0aW9uUmVzdWx0IHJlc3VsdDsKKworICAgIGd0a19wcmludF9vcGVy
YXRpb25fc2V0X2V4cG9ydF9maWxlbmFtZShvcGVyYXRpb24sIHRlbXBvcmFyeUZpbGVuYW1lKTsK
KyAgICByZXN1bHQgPSB3ZWJraXRfd2ViX2ZyYW1lX3ByaW50X2Z1bGwgKHdlYkZyYW1lLCBvcGVy
YXRpb24sIGFjdGlvbiwgTlVMTCk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQocmVzdWx0LCA9PSwg
R1RLX1BSSU5UX09QRVJBVElPTl9SRVNVTFRfQVBQTFkpOworICAgIGdfYXNzZXJ0X2NtcGludChn
X2ZpbGVfdGVzdCh0ZW1wb3JhcnlGaWxlbmFtZSwgR19GSUxFX1RFU1RfSVNfUkVHVUxBUiksID09
LCBUUlVFKTsKKworICAgIGdfdW5saW5rKHRlbXBvcmFyeUZpbGVuYW1lKTsKKyAgICBnX29iamVj
dF91bnJlZihvcGVyYXRpb24pOworY2xlYW51cDoKKyAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3
KTsKKyAgICBnX2ZyZWUodGVtcG9yYXJ5RmlsZW5hbWUpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0
X3dlYmtpdF93ZWJfZnJhbWVfcmVzcG9uc2UoKQoreworICAgIFdlYktpdFdlYkZyYW1lKiBmcmFt
ZSA9IGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfRlJBTUUsIE5VTEwpOworICAgIFdlYktp
dE5ldHdvcmtSZXNwb25zZSogcmVzcG9uc2UgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9uZXR3b3Jr
X3Jlc3BvbnNlKGZyYW1lKTsKKyAgICBnX2Fzc2VydCghcmVzcG9uc2UpOworICAgIGdfb2JqZWN0
X3VucmVmKGZyYW1lKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQorewor
ICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKKworICAgIGdfdGVzdF9idWdf
YmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIv
d2Via2l0L3dlYnZpZXcvY3JlYXRlX2Rlc3Ryb3kiLCB0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfY3Jl
YXRlX2Rlc3Ryb3kpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJ2aWV3L2ZyYW1l
LWNyZWF0ZWRfc2lnbmFsIiwgdGVzdF93ZWJraXRfd2ViX2ZyYW1lX2NyZWF0ZWRfc2lnbmFsKTsK
KyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2ViZnJhbWUvbGlmZXRpbWUiLCB0ZXN0X3dl
YmtpdF93ZWJfZnJhbWVfbGlmZXRpbWUpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93
ZWJ2aWV3L3ByaW50aW5nIiwgdGVzdF93ZWJraXRfd2ViX2ZyYW1lX3ByaW50aW5nKTsKKyAgICBn
X3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vidmlldy9yZXNwb25zZSIsIHRlc3Rfd2Via2l0X3dl
Yl9mcmFtZV9yZXNwb25zZSk7CisgICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7Cit9CmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2ViaGlzdG9yeWl0
ZW0uYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJoaXN0b3J5
aXRlbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyZTE5MWMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2Vi
aGlzdG9yeWl0ZW0uYwpAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5
IEphbiBNaWNoYWVsIEFsb256bworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8Z2xpYi5o
PgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+CisKK3R5
cGVkZWYgc3RydWN0IHsKKyAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogaXRlbTsKK30gV2ViSGlz
dG9yeUl0ZW1GaXh0dXJlOworCitzdGF0aWMgdm9pZCB3ZWJfaGlzdG9yeV9pdGVtX2ZpeHR1cmVf
c2V0dXAoV2ViSGlzdG9yeUl0ZW1GaXh0dXJlKiBmaXh0dXJlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBmaXh0
dXJlLT5pdGVtID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dpdGhfZGF0YSgiaHR0cDov
L2V4YW1wbGUuY29tLyIsICJFeGFtcGxlMSIpOworICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVD
VChmaXh0dXJlLT5pdGVtKS0+cmVmX2NvdW50LCA9PSAsIDEpOworICAgIGdfYXNzZXJ0KGZpeHR1
cmUtPml0ZW0gIT0gTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYl9oaXN0b3J5X2l0ZW1fZml4
dHVyZV90ZWFyZG93bihXZWJIaXN0b3J5SXRlbUZpeHR1cmUqIGZpeHR1cmUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NvbnN0cG9pbnRlciBkYXRhKQor
eworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPml0ZW0gIT0gTlVMTCk7CisgICAgZ19hc3NlcnRfY21w
aW50KEdfT0JKRUNUKGZpeHR1cmUtPml0ZW0pLT5yZWZfY291bnQsID09LCAxKTsKK30KKworc3Rh
dGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfZGF0YShXZWJIaXN0b3J5
SXRlbUZpeHR1cmUqIGZpeHR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBnX2Fzc2VydF9jbXBz
dHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3RpdGxlKGZpeHR1cmUtPml0ZW0pLCA9PSwg
IkV4YW1wbGUxIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVt
X2dldF91cmkoZml4dHVyZS0+aXRlbSksID09LCAiaHR0cDovL2V4YW1wbGUuY29tLyIpOworfQor
CitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2FsdGVybmF0ZV90aXRs
ZShXZWJIaXN0b3J5SXRlbUZpeHR1cmUqIGZpeHR1cmUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY29uc3Rwb2ludGVyIGRhdGEpCit7
CisgICAgd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fc2V0X2FsdGVybmF0ZV90aXRsZShmaXh0dXJl
LT5pdGVtLCAiQWx0ZXJuYXRlIHRpdGxlIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93
ZWJfaGlzdG9yeV9pdGVtX2dldF9hbHRlcm5hdGVfdGl0bGUoZml4dHVyZS0+aXRlbSksID09LCAi
QWx0ZXJuYXRlIHRpdGxlIik7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikK
K3sKKyAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7CisKKyAgICBnX3Rlc3Rf
YnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOworICAgIGdfdGVzdF9hZGQoIi93
ZWJraXQvd2ViaGlzdG9yeWl0ZW0vZ2V0X2RhdGEiLAorICAgICAgICAgICAgICAgV2ViSGlzdG9y
eUl0ZW1GaXh0dXJlLCAwLCB3ZWJfaGlzdG9yeV9pdGVtX2ZpeHR1cmVfc2V0dXAsCisgICAgICAg
ICAgICAgICB0ZXN0X3dlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF9kYXRhLCB3ZWJfaGlzdG9y
eV9pdGVtX2ZpeHR1cmVfdGVhcmRvd24pOworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvd2ViaGlz
dG9yeWl0ZW0vYWx0ZXJuYXRlX3RpdGxlIiwKKyAgICAgICAgICAgICAgIFdlYkhpc3RvcnlJdGVt
Rml4dHVyZSwgMCwgd2ViX2hpc3RvcnlfaXRlbV9maXh0dXJlX3NldHVwLAorICAgICAgICAgICAg
ICAgdGVzdF93ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9hbHRlcm5hdGVfdGl0bGUsIHdlYl9oaXN0
b3J5X2l0ZW1fZml4dHVyZV90ZWFyZG93bik7CisgICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7Cit9
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2Vi
aW5zcGVjdG9yLmMgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2Vi
aW5zcGVjdG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc0MzgyZgot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rl
c3R3ZWJpbnNwZWN0b3IuYwpAQCAtMCwwICsxLDE3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9tZS5vcmc+CisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJ0ZXN0X3V0aWxzLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNp
bmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdC93
ZWJraXQuaD4KKworR01haW5Mb29wICpsb29wOworR3RrV2lkZ2V0ICp3aW5kb3c7CisKK3N0YXRp
YyBnYm9vbGVhbiBxdWl0TG9vcChncG9pbnRlciBkYXRhKQoreworICAgIGdfbWFpbl9sb29wX3F1
aXQobG9vcCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKKy8qIElnbm9yZSBzaW1wbGUgdHJhbnNs
YXRpb24tcmVsYXRlZCBtZXNzYWdlcyBhbmQgdXBncmFkZSBvdGhlcgorICogbWVzc2FnZXMgdG8g
d2FybmluZ3MuCisgKi8KK3N0YXRpYyBnYm9vbGVhbiBjb25zb2xlTWVzc2FnZUNhbGxiYWNrKFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcsIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIHVuc2lnbmVkIGludCBs
aW5lLCBjb25zdCBjaGFyKiBzb3VyY2VJZCkKK3sKKyAgICBpZiAoc3Ryc3RyKG1lc3NhZ2UsICJM
b2NhbGl6ZWQgc3RyaW5nIikgfHwgc3Ryc3RyKG1lc3NhZ2UsICJQcm90b2NvbCBFcnJvcjogdGhl
IG1lc3NhZ2UgaXMgZm9yIG5vbi1leGlzdGluZyBkb21haW4gJ1Byb2ZpbGVyJyIpIHx8CisgICAg
ICAgIHN0cnN0cihtZXNzYWdlLCAiRGlkbid0IGZpbmQgYSBUcmVlRWxlbWVudCBmb3IgYSByZXBy
ZXNlbnRlZE9iamVjdCIpKQorICAgICAgICByZXR1cm4gVFJVRTsKKworICAgIGdfd2FybmluZygi
Q29uc29sZTogJXMgQCVkOiAlc1xuIiwgc291cmNlSWQsIGxpbmUsIG1lc3NhZ2UpOworICAgIHJl
dHVybiBUUlVFOworfQorCitzdGF0aWMgV2ViS2l0V2ViVmlldyogaW5zcGVjdEVsZW1lbnRDYWxs
YmFjayhXZWJLaXRXZWJJbnNwZWN0b3IgKmluc3BlY3RvciwgV2ViS2l0V2ViVmlldyAqaW5zcGVj
dGVkV2ViVmlldywgaW50ICp0aW1lc0VsZW1lbnRJbnNwZWN0ZWQpCit7CisgICAgKnRpbWVzRWxl
bWVudEluc3BlY3RlZCA9ICp0aW1lc0VsZW1lbnRJbnNwZWN0ZWQgKyAxOworCisgICAgd2luZG93
ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7CisKKyAgICBHdGtXaWRnZXQg
Km5ld1dlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7CisgICAgZ3RrX2NvbnRhaW5lcl9h
ZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCBuZXdXZWJWaWV3KTsKKworICAgIGdfc2lnbmFsX2Nv
bm5lY3QobmV3V2ViVmlldywgImNvbnNvbGUtbWVzc2FnZSIsCisgICAgICAgICAgICAgICAgICAg
ICBHX0NBTExCQUNLKGNvbnNvbGVNZXNzYWdlQ2FsbGJhY2spLCBOVUxMKTsKKworICAgIHJldHVy
biBXRUJLSVRfV0VCX1ZJRVcobmV3V2ViVmlldyk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBjbG9z
ZUluc3BlY3RvcihXZWJLaXRXZWJJbnNwZWN0b3IgKmluc3BlY3RvciwgaW50ICp0aW1lc0Nsb3Nl
ZCkKK3sKKyAgICAqdGltZXNDbG9zZWQgPSAqdGltZXNDbG9zZWQgKyAxOworCisgICAgZ3RrX3dp
ZGdldF9kZXN0cm95KHdpbmRvdyk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9v
bGVhbiBzaG93SW5zcGVjdG9yKFdlYktpdFdlYkluc3BlY3RvciAqaW5zcGVjdG9yLCBncG9pbnRl
ciBkYXRhKQoreworICAgIGdfaWRsZV9hZGQocXVpdExvb3AsIE5VTEwpOworICAgIHJldHVybiBU
UlVFOworfQorCitzdGF0aWMgdm9pZCBsb2FkRmluaXNoZWQoV2ViS2l0V2ViVmlldyAqd2ViVmll
dywgV2ViS2l0V2ViRnJhbWUgKmZyYW1lLCBnYm9vbGVhbiAqaXNMb2FkRmluaXNoZWQpCit7Cisg
ICAgKmlzTG9hZEZpbmlzaGVkID0gVFJVRTsKKyAgICBpZiAoZ19tYWluX2xvb3BfaXNfcnVubmlu
Zyhsb29wKSkKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKK30KKworc3RhdGljIHZv
aWQgdGVzdF93ZWJraXRfd2ViX2luc3BlY3Rvcl9jbG9zZV9hbmRfaW5zcGVjdCgpCit7CisgICAg
V2ViS2l0V2ViVmlldyAqd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdf
bmV3KCkpOworICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisKKyAgICBn
Ym9vbGVhbiBpc0xvYWRGaW5pc2hlZCA9IEZBTFNFOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2Vi
VmlldywgImxvYWQtZmluaXNoZWQiLCBHX0NBTExCQUNLKGxvYWRGaW5pc2hlZCksICZpc0xvYWRG
aW5pc2hlZCk7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8aHRtbD48Ym9keT48cD53b29ob288L3A+PC9i
b2R5PjwvaHRtbD4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGV4dC9odG1s
IiwgIlVURi04IiwgImZpbGU6Ly8iKTsKKyAgICBpZiAoIWlzTG9hZEZpbmlzaGVkKQorICAgICAg
ICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICBnX29iamVjdF9zZXQod2Via2l0X3dlYl92
aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3KSwgImVuYWJsZS1kZXZlbG9wZXItZXh0cmFzIiwgVFJV
RSwgTlVMTCk7CisgICAgV2ViS2l0V2ViSW5zcGVjdG9yICppbnNwZWN0b3IgPSB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X2luc3BlY3Rvcih3ZWJWaWV3KTsKKworICAgIGludCB0aW1lc0VsZW1lbnRJbnNw
ZWN0ZWQgPSAwOworICAgIGludCB0aW1lc0Nsb3NlZCA9IDA7CisgICAgZ19vYmplY3RfY29ubmVj
dChpbnNwZWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjppbnNwZWN0LXdlYi12
aWV3IiwgR19DQUxMQkFDSyhpbnNwZWN0RWxlbWVudENhbGxiYWNrKSwgJnRpbWVzRWxlbWVudElu
c3BlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6OnNob3ctd2luZG93IiwgR19D
QUxMQkFDSyhzaG93SW5zcGVjdG9yKSwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICJzaWdu
YWw6OmNsb3NlLXdpbmRvdyIsIEdfQ0FMTEJBQ0soY2xvc2VJbnNwZWN0b3IpLCAmdGltZXNDbG9z
ZWQsCisgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKworICAgIHdlYmtpdF93ZWJfaW5zcGVj
dG9yX2luc3BlY3RfY29vcmRpbmF0ZXMoaW5zcGVjdG9yLCAwLjAsIDAuMCk7CisgICAgZ19hc3Nl
cnRfY21waW50KHRpbWVzRWxlbWVudEluc3BlY3RlZCwgPT0sIDEpOworCisgICAgZ19tYWluX2xv
b3BfcnVuKGxvb3ApOworCisgICAgd2Via2l0X3dlYl9pbnNwZWN0b3JfY2xvc2UoaW5zcGVjdG9y
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGltZXNDbG9zZWQsID09LCAxKTsKKworICAgIHdlYmtp
dF93ZWJfaW5zcGVjdG9yX2luc3BlY3RfY29vcmRpbmF0ZXMoaW5zcGVjdG9yLCAwLjAsIDAuMCk7
CisgICAgZ19hc3NlcnRfY21waW50KHRpbWVzRWxlbWVudEluc3BlY3RlZCwgPT0sIDIpOworCisg
ICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgZ3RrX3dpZGdldF9kZXN0cm95KEdUS19X
SURHRVQod2ViVmlldykpOworICAgIGdfYXNzZXJ0X2NtcGludCh0aW1lc0Nsb3NlZCwgPT0sIDIp
OworCisgICAgZ19tYWluX2xvb3BfdW5yZWYobG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rf
d2Via2l0X3dlYl9pbnNwZWN0b3JfZGVzdHJveV9pbnNwZWN0ZWRfd2ViX3ZpZXcoKQoreworICAg
IFdlYktpdFdlYlZpZXcgKndlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3
X25ldygpKTsKKyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworCisgICAg
Z2Jvb2xlYW4gaXNMb2FkRmluaXNoZWQgPSBGQUxTRTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdl
YlZpZXcsICJsb2FkLWZpbmlzaGVkIiwgR19DQUxMQkFDSyhsb2FkRmluaXNoZWQpLCAmaXNMb2Fk
RmluaXNoZWQpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGh0bWw+PGJvZHk+PHA+d29vaG9vPC9wPjwv
Ym9keT48L2h0bWw+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRleHQvaHRt
bCIsICJVVEYtOCIsICJmaWxlOi8vIik7CisgICAgaWYgKCFpc0xvYWRGaW5pc2hlZCkKKyAgICAg
ICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgZ19vYmplY3Rfc2V0KHdlYmtpdF93ZWJf
dmlld19nZXRfc2V0dGluZ3Mod2ViVmlldyksICJlbmFibGUtZGV2ZWxvcGVyLWV4dHJhcyIsIFRS
VUUsIE5VTEwpOworICAgIFdlYktpdFdlYkluc3BlY3RvciAqaW5zcGVjdG9yID0gd2Via2l0X3dl
Yl92aWV3X2dldF9pbnNwZWN0b3Iod2ViVmlldyk7CisKKyAgICBpbnQgdGltZXNFbGVtZW50SW5z
cGVjdGVkID0gMDsKKyAgICBpbnQgdGltZXNDbG9zZWQgPSAwOworICAgIGdfb2JqZWN0X2Nvbm5l
Y3QoaW5zcGVjdG9yLAorICAgICAgICAgICAgICAgICAgICAgInNpZ25hbDo6aW5zcGVjdC13ZWIt
dmlldyIsIEdfQ0FMTEJBQ0soaW5zcGVjdEVsZW1lbnRDYWxsYmFjayksICZ0aW1lc0VsZW1lbnRJ
bnNwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjpzaG93LXdpbmRvdyIsIEdf
Q0FMTEJBQ0soc2hvd0luc3BlY3RvciksIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAic2ln
bmFsOjpjbG9zZS13aW5kb3ciLCBHX0NBTExCQUNLKGNsb3NlSW5zcGVjdG9yKSwgJnRpbWVzQ2xv
c2VkLAorICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICB3ZWJraXRfd2ViX2luc3Bl
Y3Rvcl9pbnNwZWN0X2Nvb3JkaW5hdGVzKGluc3BlY3RvciwgMC4wLCAwLjApOworICAgIGdfYXNz
ZXJ0X2NtcGludCh0aW1lc0VsZW1lbnRJbnNwZWN0ZWQsID09LCAxKTsKKworICAgIGdfbWFpbl9s
b29wX3J1bihsb29wKTsKKworICAgIGd0a193aWRnZXRfZGVzdHJveShHVEtfV0lER0VUKHdlYlZp
ZXcpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGltZXNDbG9zZWQsID09LCAxKTsKKworICAgIGdf
bWFpbl9sb29wX3VucmVmKGxvb3ApOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFy
Z3YpCit7CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAgZ190
ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYWRk
X2Z1bmMoIi93ZWJraXQvd2ViaW5zcGVjdG9yL2Rlc3Ryb3ktaW5zcGVjdGVkLXdlYi12aWV3Iiwg
dGVzdF93ZWJraXRfd2ViX2luc3BlY3Rvcl9kZXN0cm95X2luc3BlY3RlZF93ZWJfdmlldyk7Cisg
ICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYmluc3BlY3Rvci9jbG9zZS1hbmQtaW5zcGVj
dCIsIHRlc3Rfd2Via2l0X3dlYl9pbnNwZWN0b3JfY2xvc2VfYW5kX2luc3BlY3QpOworCisgICAg
cmV0dXJuIGdfdGVzdF9ydW4oKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJwbHVnaW5kYXRhYmFzZS5jIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYnBsdWdpbmRhdGFiYXNlLmMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUyODExYgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJwbHVnaW5kYXRhYmFzZS5jCkBA
IC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8Z2xpYi5oPgor
I2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUg
PHdlYmtpdC93ZWJraXQuaD4KKworLyogVGhpcyBmdW5jdGlvbiBpcyBub3QgcHVibGljLCBzbyB3
ZSBuZWVkIGFuIGV4dGVybiBkZWNsYXJhdGlvbiAqLworZXh0ZXJuIHZvaWQgd2Via2l0X3dlYl9z
ZXR0aW5nc19hZGRfZXh0cmFfcGx1Z2luX2RpcmVjdG9yeShXZWJLaXRXZWJWaWV3KiB2aWV3LCBj
b25zdCBnY2hhciogZGlyZWN0b3J5KTsKKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3Bs
dWdpbl9kYXRhYmFzZV9nZXRfcGx1Z2lucygpCit7CisgICAgV2ViS2l0V2ViVmlldyogdmlldyA9
IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIFdlYktpdFdlYlBs
dWdpbkRhdGFiYXNlKiBkYXRhYmFzZTsKKyAgICBHU0xpc3QqIHBsdWdpbkxpc3QsICpwOworICAg
IGdib29sZWFuIGZvdW5kID0gRkFMU0U7CisgICAgZ2Jvb2xlYW4gZW5hYmxlZCA9IEZBTFNFOwor
CisgICAgd2Via2l0X3dlYl9zZXR0aW5nc19hZGRfZXh0cmFfcGx1Z2luX2RpcmVjdG9yeSh2aWV3
LCBURVNUX1BMVUdJTl9ESVIpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKEdfT0JKRUNUKHZpZXcp
KTsKKworICAgIGRhdGFiYXNlID0gd2Via2l0X2dldF93ZWJfcGx1Z2luX2RhdGFiYXNlKCk7Cisg
ICAgcGx1Z2luTGlzdCA9IHdlYmtpdF93ZWJfcGx1Z2luX2RhdGFiYXNlX2dldF9wbHVnaW5zKGRh
dGFiYXNlKTsKKyAgICBmb3IgKHAgPSBwbHVnaW5MaXN0OyBwOyBwID0gcC0+bmV4dCkgeworICAg
ICAgICBXZWJLaXRXZWJQbHVnaW4qIHBsdWdpbiA9IChXZWJLaXRXZWJQbHVnaW4qKXAtPmRhdGE7
CisgICAgICAgIGlmICghZ19zdHJjbXAwKHdlYmtpdF93ZWJfcGx1Z2luX2dldF9uYW1lKHBsdWdp
biksICJXZWJLaXQgVGVzdCBQbHVnSW4iKSAmJgorICAgICAgICAgICAgIWdfc3RyY21wMCh3ZWJr
aXRfd2ViX3BsdWdpbl9nZXRfZGVzY3JpcHRpb24ocGx1Z2luKSwgIlNpbXBsZSBOZXRzY2FwZcKu
IHBsdWctaW4gdGhhdCBoYW5kbGVzIHRlc3QgY29udGVudCBmb3IgV2ViS2l0IikpIHsKKyAgICAg
ICAgICAgIGZvdW5kID0gVFJVRTsKKyAgICAgICAgICAgIGVuYWJsZWQgPSB3ZWJraXRfd2ViX3Bs
dWdpbl9nZXRfZW5hYmxlZChwbHVnaW4pOworICAgICAgICAgICAgd2Via2l0X3dlYl9wbHVnaW5f
c2V0X2VuYWJsZWQocGx1Z2luLCBGQUxTRSk7CisgICAgICAgIH0KKyAgICB9CisgICAgd2Via2l0
X3dlYl9wbHVnaW5fZGF0YWJhc2VfcGx1Z2luc19saXN0X2ZyZWUocGx1Z2luTGlzdCk7CisgICAg
Z19hc3NlcnQoZm91bmQpOworICAgIGdfYXNzZXJ0KGVuYWJsZWQpOworCisgICAgd2Via2l0X3dl
Yl9wbHVnaW5fZGF0YWJhc2VfcmVmcmVzaChkYXRhYmFzZSk7CisgICAgcGx1Z2luTGlzdCA9IHdl
YmtpdF93ZWJfcGx1Z2luX2RhdGFiYXNlX2dldF9wbHVnaW5zKGRhdGFiYXNlKTsKKworICAgIGZv
ciAocCA9IHBsdWdpbkxpc3Q7IHA7IHAgPSBwLT5uZXh0KSB7CisgICAgICAgIFdlYktpdFdlYlBs
dWdpbiogcGx1Z2luID0gKFdlYktpdFdlYlBsdWdpbiopcC0+ZGF0YTsKKyAgICAgICAgaWYgKCFn
X3N0cmNtcDAod2Via2l0X3dlYl9wbHVnaW5fZ2V0X25hbWUocGx1Z2luKSwgIldlYktpdCBUZXN0
IFBsdWdJbiIpICYmCisgICAgICAgICAgICAhZ19zdHJjbXAwKHdlYmtpdF93ZWJfcGx1Z2luX2dl
dF9kZXNjcmlwdGlvbihwbHVnaW4pLCAiU2ltcGxlIE5ldHNjYXBlwq4gcGx1Zy1pbiB0aGF0IGhh
bmRsZXMgdGVzdCBjb250ZW50IGZvciBXZWJLaXQiKSkKKyAgICAgICAgICAgIGVuYWJsZWQgPSB3
ZWJraXRfd2ViX3BsdWdpbl9nZXRfZW5hYmxlZChwbHVnaW4pOworICAgIH0KKyAgICB3ZWJraXRf
d2ViX3BsdWdpbl9kYXRhYmFzZV9wbHVnaW5zX2xpc3RfZnJlZShwbHVnaW5MaXN0KTsKKyAgICBn
X2Fzc2VydCghZW5hYmxlZCk7CisKKyAgICBnX29iamVjdF91bnJlZih2aWV3KTsKK30KKworaW50
IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIGd0a190ZXN0X2luaXQoJmFyZ2Ms
ICZhcmd2LCBOVUxMKTsKKworICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvIik7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnBsdWdpbmRhdGFiYXNl
L2dldHBsdWdpbnMiLCB0ZXN0X3dlYmtpdF93ZWJfcGx1Z2luX2RhdGFiYXNlX2dldF9wbHVnaW5z
KTsKKyAgICByZXR1cm4gZ190ZXN0X3J1biAoKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJyZXNvdXJjZS5jIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYnJlc291cmNlLmMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uZmM1OGI3YQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJyZXNvdXJjZS5jCkBAIC0wLDAgKzEs
MzMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEphbiBNaWNoYWVsIEFsb256bworICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4K
KyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRl
IDx3ZWJraXQvd2Via2l0Lmg+CisKKyNkZWZpbmUgSU5ERVhfSFRNTCAiPGh0bWw+PC9odG1sPiIK
KyNkZWZpbmUgTUFJTl9IVE1MICI8aHRtbD48aGVhZD48c2NyaXB0IGxhbmd1YWdlPVwiamF2YXNj
cmlwdFwiIHNyYz1cIi9qYXZhc2NyaXB0LmpzXCI+PC9zY3JpcHQ+PC9oZWFkPjxib2R5PjxoMT5o
YWg8L2gxPjwvaHRtbD4iCisjZGVmaW5lIEpBVkFTQ1JJUFQgImZ1bmN0aW9uIGJsYWggKCkgeyB2
YXIgYSA9IDE7IH0iCisKK0dNYWluTG9vcCogbG9vcDsKK1NvdXBTZXNzaW9uICpzZXNzaW9uOwor
Y2hhciAqYmFzZV91cmk7CitXZWJLaXRXZWJSZXNvdXJjZSogbWFpbl9yZXNvdXJjZTsKK1dlYktp
dFdlYlJlc291cmNlKiBzdWJfcmVzb3VyY2U7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBXZWJL
aXRXZWJSZXNvdXJjZSogd2ViUmVzb3VyY2U7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldzsK
K30gV2ViUmVzb3VyY2VGaXh0dXJlOworCisvKiBGb3IgcmVhbCByZXF1ZXN0IHRlc3RpbmcgKi8K
K3N0YXRpYyB2b2lkCitzZXJ2ZXJfY2FsbGJhY2sgKFNvdXBTZXJ2ZXIgKnNlcnZlciwgU291cE1l
c3NhZ2UgKm1zZywKKyAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwgR0hhc2hUYWJs
ZSAqcXVlcnksCisgICAgICAgICAgICAgICAgIFNvdXBDbGllbnRDb250ZXh0ICpjb250ZXh0LCBn
cG9pbnRlciBkYXRhKQoreworICAgIGlmIChtc2ctPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQp
IHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMgKG1zZywgU09VUF9TVEFUVVNfTk9U
X0lNUExFTUVOVEVEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNvdXBfbWVzc2Fn
ZV9zZXRfc3RhdHVzIChtc2csIFNPVVBfU1RBVFVTX09LKTsKKworICAgIC8qIFJlZGlyZWN0ICov
CisgICAgaWYgKGdfc3RyX2VxdWFsIChwYXRoLCAiLyIpKSB7CisgICAgICAgIHNvdXBfbWVzc2Fn
ZV9zZXRfc3RhdHVzIChtc2csIFNPVVBfU1RBVFVTX01PVkVEX1BFUk1BTkVOVExZKTsKKworICAg
ICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQgKG1zZy0+cmVzcG9uc2VfaGVhZGVycywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTG9jYXRpb24iLCAiL2luZGV4
Lmh0bWwiKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsIChwYXRoLCAiL2luZGV4Lmh0bWwi
KSkgeworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQgKG1zZy0+cmVzcG9uc2VfYm9k
eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT1VQX01FTU9SWV9DT1BZLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOREVYX0hUTUwsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuIChJTkRFWF9IVE1MKSk7CisgICAgfSBlbHNl
IGlmIChnX3N0cl9lcXVhbCAocGF0aCwgIi9tYWluLmh0bWwiKSkgeworICAgICAgICBzb3VwX21l
c3NhZ2VfYm9keV9hcHBlbmQgKG1zZy0+cmVzcG9uc2VfYm9keSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTT1VQX01FTU9SWV9DT1BZLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE1BSU5fSFRNTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHJsZW4gKE1BSU5fSFRNTCkpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwgKHBhdGgs
ICIvamF2YXNjcmlwdC5qcyIpKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZCAo
bXNnLT5yZXNwb25zZV9ib2R5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNP
VVBfTUVNT1JZX0NPUFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkFWQVND
UklQVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4gKEpBVkFTQ1JJ
UFQpKTsKKyAgICB9CisKKworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlIChtc2ctPnJl
c3BvbnNlX2JvZHkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJfcmVzb3VyY2VfZml4dHVyZV9zZXR1
cChXZWJSZXNvdXJjZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAg
ICBmaXh0dXJlLT53ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXco
KSk7CisgICAgZ19vYmplY3RfcmVmX3NpbmsoZml4dHVyZS0+d2ViVmlldyk7CisgICAgY29uc3Qg
Z2NoYXIqIHdlYkRhdGEgPSAiPGh0bWw+PC9odG1sPiI7CisgICAgZml4dHVyZS0+d2ViUmVzb3Vy
Y2UgPSB3ZWJraXRfd2ViX3Jlc291cmNlX25ldyh3ZWJEYXRhLCBzdHJsZW4od2ViRGF0YSksICJo
dHRwOi8vZXhhbXBsZS5jb20vIiwgInRleHQvaHRtbCIsICJ1dGY4IiwgIkV4YW1wbGUuY29tIik7
CisgICAgZ19hc3NlcnQoZml4dHVyZS0+d2ViUmVzb3VyY2UpOworfQorCitzdGF0aWMgdm9pZCB3
ZWJfcmVzb3VyY2VfZml4dHVyZV90ZWFyZG93bihXZWJSZXNvdXJjZUZpeHR1cmUqIGZpeHR1cmUs
IGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBnX2Fzc2VydChmaXh0dXJlLT53ZWJSZXNvdXJj
ZSk7CisgICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+d2ViUmVzb3VyY2UpOworICAgIGdfb2Jq
ZWN0X3VucmVmKGZpeHR1cmUtPndlYlZpZXcpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtp
dF93ZWJfcmVzb3VyY2VfZ2V0X3VybChXZWJSZXNvdXJjZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25z
dHBvaW50ZXIgZGF0YSkKK3sKKyAgICBnY2hhciogdXJsOworICAgIGdfb2JqZWN0X2dldChHX09C
SkVDVChmaXh0dXJlLT53ZWJSZXNvdXJjZSksICJ1cmkiLCAmdXJsLCBOVUxMKTsKKyAgICBnX2Fz
c2VydF9jbXBzdHIodXJsLCA9PSwgImh0dHA6Ly9leGFtcGxlLmNvbS8iKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJpKGZpeHR1cmUtPndlYlJlc291cmNl
KSAsPT0sImh0dHA6Ly9leGFtcGxlLmNvbS8iKTsKKyAgICBnX2ZyZWUodXJsKTsKK30KKworc3Rh
dGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3Jlc291cmNlX2dldF9kYXRhKFdlYlJlc291cmNlRml4
dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIEdTdHJpbmcqIGNoYXJE
YXRhID0gd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZGF0YShmaXh0dXJlLT53ZWJSZXNvdXJjZSk7
CisgICAgZ19hc3NlcnRfY21wc3RyKGNoYXJEYXRhLT5zdHIsID09LCAiPGh0bWw+PC9odG1sPiIp
OworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X21pbWVfdHlw
ZShXZWJSZXNvdXJjZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAg
ICBnY2hhciogbWltZV90eXBlOworICAgIGdfb2JqZWN0X2dldChHX09CSkVDVChmaXh0dXJlLT53
ZWJSZXNvdXJjZSksICJtaW1lLXR5cGUiLCAmbWltZV90eXBlLCBOVUxMKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIobWltZV90eXBlLCA9PSwgInRleHQvaHRtbCIpOworICAgIGdfYXNzZXJ0X2NtcHN0
cih3ZWJraXRfd2ViX3Jlc291cmNlX2dldF9taW1lX3R5cGUoZml4dHVyZS0+d2ViUmVzb3VyY2Up
LD09LCJ0ZXh0L2h0bWwiKTsKKyAgICBnX2ZyZWUobWltZV90eXBlKTsKK30KKworc3RhdGljIHZv
aWQgdGVzdF93ZWJraXRfd2ViX3Jlc291cmNlX2dldF9lbmNvZGluZyhXZWJSZXNvdXJjZUZpeHR1
cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBnY2hhciogdGV4dF9lbmNv
ZGluZzsKKyAgICBnX29iamVjdF9nZXQoR19PQkpFQ1QoZml4dHVyZS0+d2ViUmVzb3VyY2UpLCAi
ZW5jb2RpbmciLCAmdGV4dF9lbmNvZGluZywgTlVMTCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRl
eHRfZW5jb2RpbmcsID09LCAidXRmOCIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2Vi
X3Jlc291cmNlX2dldF9lbmNvZGluZyhmaXh0dXJlLT53ZWJSZXNvdXJjZSksPT0sInV0ZjgiKTsK
KyAgICBnX2ZyZWUodGV4dF9lbmNvZGluZyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0
X3dlYl9yZXNvdXJjZV9nZXRfZnJhbWVfbmFtZShXZWJSZXNvdXJjZUZpeHR1cmUqIGZpeHR1cmUs
IGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBnY2hhciogZnJhbWVfbmFtZTsKKyAgICBnX29i
amVjdF9nZXQoR19PQkpFQ1QoZml4dHVyZS0+d2ViUmVzb3VyY2UpLCAiZnJhbWUtbmFtZSIsICZm
cmFtZV9uYW1lLCBOVUxMKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoZnJhbWVfbmFtZSwgPT0sICJF
eGFtcGxlLmNvbSIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3Jlc291cmNlX2dl
dF9mcmFtZV9uYW1lKGZpeHR1cmUtPndlYlJlc291cmNlKSw9PSwiRXhhbXBsZS5jb20iKTsKKyAg
ICBnX2ZyZWUoZnJhbWVfbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIHJlc291cmNlX3JlcXVlc3Rf
c3RhcnRpbmdfY2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIFdlYktpdFdlYkZyYW1lKiB3ZWJf
ZnJhbWUsIFdlYktpdFdlYlJlc291cmNlKiB3ZWJfcmVzb3VyY2UsIFdlYktpdE5ldHdvcmtSZXF1
ZXN0KiByZXF1ZXN0LCBXZWJLaXROZXR3b3JrUmVzcG9uc2UqIHJlc3BvbnNlLCBncG9pbnRlciBk
YXRhKQoreworICAgIGdpbnQqIGJlZW5fdGhlcmUgPSBkYXRhOworICAgICpiZWVuX3RoZXJlID0g
KmJlZW5fdGhlcmUgKyAxOworCisgICAgaWYgKCpiZWVuX3RoZXJlID09IDEpIHsKKyAgICAgICAg
Z19hc3NlcnQoIW1haW5fcmVzb3VyY2UpOworICAgICAgICBtYWluX3Jlc291cmNlID0gZ19vYmpl
Y3RfcmVmKHdlYl9yZXNvdXJjZSk7CisKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93
ZWJfcmVzb3VyY2VfZ2V0X3VyaSh3ZWJfcmVzb3VyY2UpLCA9PSwgYmFzZV91cmkpOworCisgICAg
ICAgIC8qIFRoaXMgc2hvdWxkIGJlIGEgcmVkaXJlY3QsIHNvIHRoZSByZXNwb25zZSBtdXN0IGJl
IE5VTEwgKi8KKyAgICAgICAgZ19hc3NlcnQoIXJlc3BvbnNlKTsKKyAgICB9IGVsc2UgaWYgKCpi
ZWVuX3RoZXJlID09IDIpIHsKKyAgICAgICAgY2hhciogdXJpID0gZ19zdHJkdXBfcHJpbnRmKCIl
c2luZGV4Lmh0bWwiLCBiYXNlX3VyaSk7CisKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtp
dF93ZWJfcmVzb3VyY2VfZ2V0X3VyaSh3ZWJfcmVzb3VyY2UpLCA9PSwgdXJpKTsKKworICAgICAg
ICAvKiBDYW5jZWwgdGhlIHJlcXVlc3QuICovCisgICAgICAgIHdlYmtpdF9uZXR3b3JrX3JlcXVl
c3Rfc2V0X3VyaShyZXF1ZXN0LCAiYWJvdXQ6YmxhbmsiKTsKKworICAgICAgICBnX2ZyZWUodXJp
KTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIG5vdGlmeV9sb2FkX3N0YXR1c19jYihXZWJLaXRX
ZWJWaWV3KiB3ZWJfdmlldywgR1BhcmFtU3BlYyogcHNwZWMsIGdwb2ludGVyIGRhdGEpCit7Cisg
ICAgaWYgKHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMod2ViX3ZpZXcpID09IFdFQktJ
VF9MT0FEX0ZJTklTSEVEKSB7CisgICAgICAgIGdib29sZWFuKiBiZWVuX3RoZXJlID0gZGF0YTsK
KyAgICAgICAgKmJlZW5fdGhlcmUgPSBUUlVFOworCisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3
ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSh3ZWJfdmlldyksID09LCAiYWJvdXQ6YmxhbmsiKTsKKwor
ICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworICAgIH0KK30KKworc3RhdGljIHZvaWQg
dGVzdF93ZWJfcmVzb3VyY2VfbG9hZGluZygpCit7CisgICAgV2ViS2l0V2ViVmlldyogd2ViX3Zp
ZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBnaW50IGJl
ZW5fdG9fcmVzb3VyY2VfcmVxdWVzdF9zdGFydGluZyA9IDA7CisgICAgZ2Jvb2xlYW4gYmVlbl90
b19sb2FkX2ZpbmlzaGVkID0gRkFMU0U7CisgICAgV2ViS2l0V2ViRnJhbWUqIHdlYl9mcmFtZTsK
KyAgICBXZWJLaXRXZWJEYXRhU291cmNlKiBkYXRhX3NvdXJjZTsKKworICAgIGxvb3AgPSBnX21h
aW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisKKyAgICBnX29iamVjdF9yZWZfc2luayh3ZWJfdmll
dyk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdlYl92aWV3LCAicmVzb3VyY2UtcmVxdWVzdC1z
dGFydGluZyIsCisgICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKHJlc291cmNlX3JlcXVl
c3Rfc3RhcnRpbmdfY2IpLAorICAgICAgICAgICAgICAgICAgICAgJmJlZW5fdG9fcmVzb3VyY2Vf
cmVxdWVzdF9zdGFydGluZyk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdlYl92aWV3LCAibm90
aWZ5Ojpsb2FkLXN0YXR1cyIsCisgICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKG5vdGlm
eV9sb2FkX3N0YXR1c19jYiksCisgICAgICAgICAgICAgICAgICAgICAmYmVlbl90b19sb2FkX2Zp
bmlzaGVkKTsKKworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh3ZWJfdmlldywgYmFzZV91
cmkpOworCisgICAgLyogV2Ugd29uJ3QgZ2V0IGZpbmlzaGVkIGltbWVkaWF0ZWx5LCBiZWNhdXNl
IG9mIHRoZSByZWRpcmVjdCAqLworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKyAgICAKKyAg
ICB3ZWJfZnJhbWUgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUod2ViX3ZpZXcpOwor
ICAgIGRhdGFfc291cmNlID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfZGF0YV9zb3VyY2Uod2ViX2Zy
YW1lKTsKKworICAgIGdfYXNzZXJ0KG1haW5fcmVzb3VyY2UpOworICAgIGdfYXNzZXJ0KHdlYmtp
dF93ZWJfZGF0YV9zb3VyY2VfZ2V0X21haW5fcmVzb3VyY2UoZGF0YV9zb3VyY2UpID09IG1haW5f
cmVzb3VyY2UpOworICAgIGdfb2JqZWN0X3VucmVmKG1haW5fcmVzb3VyY2UpOworICAgIAorICAg
IGdfYXNzZXJ0X2NtcGludChiZWVuX3RvX3Jlc291cmNlX3JlcXVlc3Rfc3RhcnRpbmcsID09LCAy
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYmVlbl90b19sb2FkX2ZpbmlzaGVkLCA9PSwgVFJVRSk7
CisKKyAgICBnX29iamVjdF91bnJlZih3ZWJfdmlldyk7CisgICAgZ19tYWluX2xvb3BfdW5yZWYo
bG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlc291cmNlX3JlcXVlc3Rfc3RhcnRpbmdfc3ViX2Ni
KFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBXZWJLaXRXZWJGcmFtZSogd2ViX2ZyYW1lLCBXZWJL
aXRXZWJSZXNvdXJjZSogd2ViX3Jlc291cmNlLCBXZWJLaXROZXR3b3JrUmVxdWVzdCogcmVxdWVz
dCwgV2ViS2l0TmV0d29ya1Jlc3BvbnNlKiByZXNwb25zZSwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAg
ICBpZiAoIW1haW5fcmVzb3VyY2UpCisgICAgICAgIG1haW5fcmVzb3VyY2UgPSBnX29iamVjdF9y
ZWYod2ViX3Jlc291cmNlKTsKKyAgICBlbHNlIGlmICghc3ViX3Jlc291cmNlKQorICAgICAgc3Vi
X3Jlc291cmNlID0gZ19vYmplY3RfcmVmKHdlYl9yZXNvdXJjZSk7Cit9CisKK3N0YXRpYyB2b2lk
IG5vdGlmeV9sb2FkX3N0YXR1c19zdWJfY2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIEdQYXJh
bVNwZWMqIHBzcGVjLCBncG9pbnRlciBkYXRhKQoreworICAgIGlmICh3ZWJraXRfd2ViX3ZpZXdf
Z2V0X2xvYWRfc3RhdHVzKHdlYl92aWV3KSA9PSBXRUJLSVRfTE9BRF9GSU5JU0hFRCkKKyAgICAg
ICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKK30KKworc3RhdGljIGdib29sZWFuIGlkbGVfcXVp
dF9sb29wX2NiKGdwb2ludGVyIGRhdGEpCit7CisgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsK
KyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2ViX3Jlc291cmNlX3N1
Yl9yZXNvdXJjZV9sb2FkaW5nKCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldyA9IFdF
QktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIFdlYktpdFdlYkZyYW1l
KiB3ZWJfZnJhbWU7CisgICAgV2ViS2l0V2ViRGF0YVNvdXJjZSogZGF0YV9zb3VyY2U7CisgICAg
R0xpc3QqIHN1Yl9yZXNvdXJjZXM7CisgICAgY2hhciogdXJpID0gZ19zdHJkdXBfcHJpbnRmKCIl
c21haW4uaHRtbCIsIGJhc2VfdXJpKTsKKworICAgIG1haW5fcmVzb3VyY2UgPSBOVUxMOworICAg
IAorICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisKKyAgICBnX29iamVj
dF9yZWZfc2luayh3ZWJfdmlldyk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdlYl92aWV3LCAi
cmVzb3VyY2UtcmVxdWVzdC1zdGFydGluZyIsCisgICAgICAgICAgICAgICAgICAgICBHX0NBTExC
QUNLKHJlc291cmNlX3JlcXVlc3Rfc3RhcnRpbmdfc3ViX2NiKSwKKyAgICAgICAgICAgICAgICAg
ICAgIE5VTEwpOworCisgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJfdmlldywgIm5vdGlmeTo6bG9h
ZC1zdGF0dXMiLAorICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhub3RpZnlfbG9hZF9z
dGF0dXNfc3ViX2NiKSwKKyAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgd2Via2l0
X3dlYl92aWV3X2xvYWRfdXJpKHdlYl92aWV3LCB1cmkpOworCisgICAgZ19tYWluX2xvb3BfcnVu
KGxvb3ApOworCisgICAgLyogVGhlIG1haW4gcmVzb3VyY2Ugc2hvdWxkIGJlIGxvYWRlZDsgbm93
IGxldCdzIHdhaXQgZm9yIHRoZSBzdWItcmVzb3VyY2UgdG8gbG9hZCAqLworICAgIGdfaWRsZV9h
ZGQoaWRsZV9xdWl0X2xvb3BfY2IsIE5VTEwpOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsK
KyAgICAKKyAgICBnX2Fzc2VydChtYWluX3Jlc291cmNlICYmIHN1Yl9yZXNvdXJjZSk7CisgICAg
Z19hc3NlcnQobWFpbl9yZXNvdXJjZSAhPSBzdWJfcmVzb3VyY2UpOworCisgICAgd2ViX2ZyYW1l
ID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKHdlYl92aWV3KTsKKyAgICBkYXRhX3Nv
dXJjZSA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X2RhdGFfc291cmNlKHdlYl9mcmFtZSk7CisKKyAg
ICBnX2Fzc2VydCh3ZWJraXRfd2ViX2RhdGFfc291cmNlX2dldF9tYWluX3Jlc291cmNlKGRhdGFf
c291cmNlKSA9PSBtYWluX3Jlc291cmNlKTsKKyAgICBnX29iamVjdF91bnJlZihtYWluX3Jlc291
cmNlKTsKKworICAgIHN1Yl9yZXNvdXJjZXMgPSB3ZWJraXRfd2ViX2RhdGFfc291cmNlX2dldF9z
dWJyZXNvdXJjZXMoZGF0YV9zb3VyY2UpOworICAgIC8vIEV4cGVjdGVkIHJlc291cmNlczogamF2
YXNjcmlwdHMuanMsIGZhdmljb24uaWNvCisgICAgZ19hc3NlcnQoc3ViX3Jlc291cmNlcyk7Cisg
ICAgZ19hc3NlcnQoc3ViX3Jlc291cmNlcy0+bmV4dCk7CisgICAgZ19hc3NlcnQoIXN1Yl9yZXNv
dXJjZXMtPm5leHQtPm5leHQpOworCisgICAgLy8gVGVzdCB0aGF0IHRoZSBvYmplY3Qgd2UgZ290
IGZyb20gdGhlIGRhdGEgc291cmNlIGlzIHRoZSBzYW1lCisgICAgLy8gdGhhdCB3ZW50IHRocm91
Z2ggcmVzb3VyY2UtcmVxdWVzdC1zdGFydGluZy4gTm90ZSB0aGF0IHRoZSBvcmRlciBpcworICAg
IC8vIG5vdCBpbXBvcnRhbnQgKGFuZCBub3QgZ3VhcmFudGVlZCBzaW5jZSB0aGUgcmVzb3VyY2Vz
IGFyZSBzdG9yZWQgaW4gYQorICAgIC8vIGhhc2h0YWJsZSkuCisgICAgZ19hc3NlcnQoV0VCS0lU
X1dFQl9SRVNPVVJDRShzdWJfcmVzb3VyY2VzLT5kYXRhKSA9PSBzdWJfcmVzb3VyY2UKKyAgICAg
ICAgICAgICB8fCBXRUJLSVRfV0VCX1JFU09VUkNFKHN1Yl9yZXNvdXJjZXMtPm5leHQtPmRhdGEp
ID09IHN1Yl9yZXNvdXJjZSk7CisKKyAgICBnX29iamVjdF91bnJlZih3ZWJfdmlldyk7CisgICAg
Z19tYWluX2xvb3BfdW5yZWYobG9vcCk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiog
YXJndikKK3sKKyAgICBTb3VwU2VydmVyKiBzZXJ2ZXI7CisgICAgU291cFVSSSogc291cF91cmk7
CisKKyAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7CisKKyAgICBzZXJ2ZXIg
PSBzb3VwX3NlcnZlcl9uZXcoU09VUF9TRVJWRVJfUE9SVCwgMCwgTlVMTCk7CisgICAgc291cF9z
ZXJ2ZXJfcnVuX2FzeW5jKHNlcnZlcik7CisKKyAgICBzb3VwX3NlcnZlcl9hZGRfaGFuZGxlcihz
ZXJ2ZXIsIE5VTEwsIHNlcnZlcl9jYWxsYmFjaywgTlVMTCwgTlVMTCk7CisKKyAgICBzb3VwX3Vy
aSA9IHNvdXBfdXJpX25ldygiaHR0cDovLzEyNy4wLjAuMS8iKTsKKyAgICBzb3VwX3VyaV9zZXRf
cG9ydChzb3VwX3VyaSwgc291cF9zZXJ2ZXJfZ2V0X3BvcnQoc2VydmVyKSk7CisKKyAgICBiYXNl
X3VyaSA9IHNvdXBfdXJpX3RvX3N0cmluZyhzb3VwX3VyaSwgRkFMU0UpOworICAgIHNvdXBfdXJp
X2ZyZWUoc291cF91cmkpOworCisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L3dlYnJlc291cmNlL2dldF91cmwi
LAorICAgICAgICAgICAgICAgV2ViUmVzb3VyY2VGaXh0dXJlLCAwLCB3ZWJfcmVzb3VyY2VfZml4
dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRf
dXJsLCB3ZWJfcmVzb3VyY2VfZml4dHVyZV90ZWFyZG93bik7CisgICAgZ190ZXN0X2FkZCgiL3dl
YmtpdC93ZWJyZXNvdXJjZS9nZXRfbWltZV90eXBlIiwKKyAgICAgICAgICAgICAgIFdlYlJlc291
cmNlRml4dHVyZSwgMCwgd2ViX3Jlc291cmNlX2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAg
ICB0ZXN0X3dlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X21pbWVfdHlwZSwgd2ViX3Jlc291cmNlX2Zp
eHR1cmVfdGVhcmRvd24pOworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvd2VicmVzb3VyY2UvZ2V0
X3RleHRfZW5jb2RpbmdfbmFtZSIsCisgICAgICAgICAgICAgICBXZWJSZXNvdXJjZUZpeHR1cmUs
IDAsIHdlYl9yZXNvdXJjZV9maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF93ZWJr
aXRfd2ViX3Jlc291cmNlX2dldF9lbmNvZGluZywgd2ViX3Jlc291cmNlX2ZpeHR1cmVfdGVhcmRv
d24pOworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvd2VicmVzb3VyY2UvZ2V0X2ZyYW1lX25hbWUi
LAorICAgICAgICAgICAgICAgV2ViUmVzb3VyY2VGaXh0dXJlLCAwLCB3ZWJfcmVzb3VyY2VfZml4
dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRf
ZnJhbWVfbmFtZSwgd2ViX3Jlc291cmNlX2ZpeHR1cmVfdGVhcmRvd24pOworICAgIGdfdGVzdF9h
ZGQoIi93ZWJraXQvd2VicmVzb3VyY2UvZ2V0X2RhdGEiLAorICAgICAgICAgICAgICAgV2ViUmVz
b3VyY2VGaXh0dXJlLCAwLCB3ZWJfcmVzb3VyY2VfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAg
ICAgIHRlc3Rfd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZGF0YSwgd2ViX3Jlc291cmNlX2ZpeHR1
cmVfdGVhcmRvd24pOworCisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnJlc291cmNl
L2xvYWRpbmciLCB0ZXN0X3dlYl9yZXNvdXJjZV9sb2FkaW5nKTsKKyAgICBnX3Rlc3RfYWRkX2Z1
bmMoIi93ZWJraXQvd2VicmVzb3VyY2Uvc3ViX3Jlc291cmNlX2xvYWRpbmciLCB0ZXN0X3dlYl9y
ZXNvdXJjZV9zdWJfcmVzb3VyY2VfbG9hZGluZyk7CisKKyAgICByZXR1cm4gZ190ZXN0X3J1biAo
KTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rl
c3R3ZWJzZXR0aW5ncy5jIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVz
dHdlYnNldHRpbmdzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU0ODlj
ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3Rr
L3Rlc3R3ZWJzZXR0aW5ncy5jCkBAIC0wLDAgKzEsMTU5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA5IEphbiBNaWNoYWVsIEFsb256bworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8
Z2xpYi5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+
CisKKy8qIFByaXZhdGUgQVBJICovCitjaGFyKiB3ZWJraXRXZWJTZXR0aW5nc1VzZXJBZ2VudEZv
clVSSShXZWJLaXRXZWJTZXR0aW5ncyAqc2V0dGluZ3MsIGNvbnN0IGNoYXIgKnVyaSk7CisKK3N0
YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9zZXR0aW5nc19jb3B5KHZvaWQpCit7CisgICAgV2Vi
S2l0V2ViU2V0dGluZ3MgKnNldHRpbmdzID0gd2Via2l0X3dlYl9zZXR0aW5nc19uZXcoKTsKKwor
ICAgIC8vIFNldCBzb21lIG5vbi1kZWZhdWx0IHNldHRpbmdzIHRvIHZlcmlmeSB0aGF0IHNldHRp
bmdzIGFyZSBwcm9wZXJseSBjb3BpZWQuCisgICAgZ19vYmplY3Rfc2V0KHNldHRpbmdzLAorICAg
ICAgICAgICAgICAgICAiZW5hYmxlLXdlYmdsIiwgVFJVRSwKKyAgICAgICAgICAgICAgICAgImVu
YWJsZS1mdWxsc2NyZWVuIiwgVFJVRSwKKyAgICAgICAgICAgICAgICAgImF1dG8tbG9hZC1pbWFn
ZXMiLCBGQUxTRSwKKyAgICAgICAgICAgICAgICAgImRlZmF1bHQtZW5jb2RpbmciLCAidXRmLTgi
LAorICAgICAgICAgICAgICAgICAiZW5hYmxlLW1lZGlhc291cmNlIiwgVFJVRSwKKyAgICAgICAg
ICAgICAgICAgTlVMTCk7CisKKyAgICBXZWJLaXRXZWJTZXR0aW5ncyAqY29weSA9IHdlYmtpdF93
ZWJfc2V0dGluZ3NfY29weShzZXR0aW5ncyk7CisKKyAgICBnYm9vbGVhbiBlbmFibGVXZWJHTCA9
IEZBTFNFOworICAgIGdib29sZWFuIGVuYWJsZUZ1bGxzY3JlZW4gPSBGQUxTRTsKKyAgICBnYm9v
bGVhbiBhdXRvTG9hZEltYWdlcyA9IEZBTFNFOworICAgIGdib29sZWFuIGVuYWJsZU1lZGlhU291
cmNlID0gRkFMU0U7CisgICAgY2hhciAqZGVmYXVsdEVuY29kaW5nID0gMDsKKyAgICBnX29iamVj
dF9nZXQoY29weSwKKyAgICAgICAgICAgICAgICAgImVuYWJsZS1mdWxsc2NyZWVuIiwgJmVuYWJs
ZUZ1bGxzY3JlZW4sCisgICAgICAgICAgICAgICAgICJlbmFibGUtd2ViZ2wiLCAmZW5hYmxlV2Vi
R0wsCisgICAgICAgICAgICAgICAgICJhdXRvLWxvYWQtaW1hZ2VzIiwgJmF1dG9Mb2FkSW1hZ2Vz
LAorICAgICAgICAgICAgICAgICAiZGVmYXVsdC1lbmNvZGluZyIsICZkZWZhdWx0RW5jb2Rpbmcs
CisgICAgICAgICAgICAgICAgICJlbmFibGUtbWVkaWFzb3VyY2UiLCAmZW5hYmxlTWVkaWFTb3Vy
Y2UsCisgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgZ19hc3NlcnQoZW5hYmxlV2ViR0wp
OworICAgIGdfYXNzZXJ0KGVuYWJsZUZ1bGxzY3JlZW4pOworICAgIGdfYXNzZXJ0KCFhdXRvTG9h
ZEltYWdlcyk7CisgICAgZ19hc3NlcnRfY21wc3RyKGRlZmF1bHRFbmNvZGluZywgPT0sICJ1dGYt
OCIpOworICAgIGdfYXNzZXJ0KGVuYWJsZU1lZGlhU291cmNlKTsKKyAgICBnX2ZyZWUoZGVmYXVs
dEVuY29kaW5nKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9ub25fcXVpcmt5X3VzZXJfYWdlbnRz
KFdlYktpdFdlYlNldHRpbmdzICpzZXR0aW5ncywgY29uc3QgY2hhciAqZGVmYXVsdFVzZXJBZ2Vu
dCkKK3sKKyAgICBjaGFyICp1c2VyQWdlbnQgPSAwOworCisgICAgLy8gdGVzdCBhIGN1c3RvbSBV
QSBzdHJpbmcKKyAgICB1c2VyQWdlbnQgPSAwOworICAgIGdfb2JqZWN0X3NldChzZXR0aW5ncywg
InVzZXItYWdlbnQiLCAidGVzdHdlYnNldHRpbmdzLzAuMSIsIE5VTEwpOworICAgIGdfb2JqZWN0
X2dldChzZXR0aW5ncywidXNlci1hZ2VudCIsICZ1c2VyQWdlbnQsIE5VTEwpOworICAgIGdfYXNz
ZXJ0X2NtcHN0cih1c2VyQWdlbnQsID09LCAidGVzdHdlYnNldHRpbmdzLzAuMSIpOworICAgIGdf
ZnJlZSh1c2VyQWdlbnQpOworCisgICAgLy8gc2V0dGluZyBpdCB0byBOVUxMIG9yIGFuIGVtcHR5
IHZhbHVlIHNob3VsZCBnaXZlIHVzIHRoZSBkZWZhdWx0IFVBIHN0cmluZworICAgIHVzZXJBZ2Vu
dCA9IDA7CisgICAgZ19vYmplY3Rfc2V0KHNldHRpbmdzLCAidXNlci1hZ2VudCIsIDAsIE5VTEwp
OworICAgIGdfb2JqZWN0X2dldChzZXR0aW5ncywidXNlci1hZ2VudCIsICZ1c2VyQWdlbnQsIE5V
TEwpOworICAgIGdfYXNzZXJ0X2NtcHN0cih1c2VyQWdlbnQsID09LCBkZWZhdWx0VXNlckFnZW50
KTsKKyAgICBnX2ZyZWUodXNlckFnZW50KTsKKworICAgIHVzZXJBZ2VudCA9IDA7CisgICAgZ19v
YmplY3Rfc2V0KHNldHRpbmdzLCAidXNlci1hZ2VudCIsICIiLCBOVUxMKTsKKyAgICBnX29iamVj
dF9nZXQoc2V0dGluZ3MsInVzZXItYWdlbnQiLCAmdXNlckFnZW50LCBOVUxMKTsKKyAgICBnX2Fz
c2VydF9jbXBzdHIodXNlckFnZW50LCA9PSwgZGVmYXVsdFVzZXJBZ2VudCk7CisgICAgZ19mcmVl
KHVzZXJBZ2VudCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9zZXR0aW5nc191
c2VyX2FnZW50KHZvaWQpCit7CisgICAgV2ViS2l0V2ViU2V0dGluZ3MgKnNldHRpbmdzOworICAg
IEd0a1dpZGdldCAqd2ViVmlldzsKKyAgICBjaGFyICpkZWZhdWx0VXNlckFnZW50OworICAgIGNo
YXIgKnVzZXJBZ2VudCA9IDA7CisgICAgZ190ZXN0X2J1ZygiMTczNzUiKTsKKworICAgIHdlYlZp
ZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7CisgICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmll
dyk7CisKKyAgICBzZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3MoV0VCS0lU
X1dFQl9WSUVXKHdlYlZpZXcpKTsKKyAgICBkZWZhdWx0VXNlckFnZW50ID0gZ19zdHJkdXAod2Vi
a2l0X3dlYl9zZXR0aW5nc19nZXRfdXNlcl9hZ2VudChzZXR0aW5ncykpOworCisgICAgdGVzdF9u
b25fcXVpcmt5X3VzZXJfYWdlbnRzKHNldHRpbmdzLCBkZWZhdWx0VXNlckFnZW50KTsKKworICAg
IC8qIFRlc3QgcXVpcmt5IGdvb2dsZSBkb21haW5zICovCisgICAgZ19vYmplY3Rfc2V0KHNldHRp
bmdzLCAidXNlci1hZ2VudCIsICJ0ZXN0d2Vic2V0dGluZ3MvMC4xIiwgTlVMTCk7CisKKyAgICB1
c2VyQWdlbnQgPSB3ZWJraXRXZWJTZXR0aW5nc1VzZXJBZ2VudEZvclVSSShzZXR0aW5ncywgImh0
dHA6Ly93d3cuZ29vZ2xlLmNvbS8iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodXNlckFnZW50LCA9
PSwgInRlc3R3ZWJzZXR0aW5ncy8wLjEiKTsKKyAgICBnX2ZyZWUodXNlckFnZW50KTsKKworICAg
IHVzZXJBZ2VudCA9IHdlYmtpdFdlYlNldHRpbmdzVXNlckFnZW50Rm9yVVJJKHNldHRpbmdzLCAi
aHR0cDovL2dtYWlsLmNvbS8iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodXNlckFnZW50LCA9PSwg
InRlc3R3ZWJzZXR0aW5ncy8wLjEiKTsKKyAgICBnX2ZyZWUodXNlckFnZW50KTsKKworICAgIHVz
ZXJBZ2VudCA9IHdlYmtpdFdlYlNldHRpbmdzVXNlckFnZW50Rm9yVVJJKHNldHRpbmdzLCAiaHR0
cDovL3d3dy5nb29nbGUuY29tLmJyLyIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih1c2VyQWdlbnQs
ID09LCAidGVzdHdlYnNldHRpbmdzLzAuMSIpOworICAgIGdfZnJlZSh1c2VyQWdlbnQpOworCisg
ICAgdXNlckFnZW50ID0gd2Via2l0V2ViU2V0dGluZ3NVc2VyQWdlbnRGb3JVUkkoc2V0dGluZ3Ms
ICJodHRwOi8vY2FsZW5kYXIuZ29vZ2xlLmNvbS8iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodXNl
ckFnZW50LCA9PSwgInRlc3R3ZWJzZXR0aW5ncy8wLjEiKTsKKyAgICBnX2ZyZWUodXNlckFnZW50
KTsKKworICAgIC8qIE5vdyBlbmFibGUgcXVpcmtzIGhhbmRsaW5nICovCisgICAgZ19vYmplY3Rf
c2V0KHNldHRpbmdzLCAiZW5hYmxlLXNpdGUtc3BlY2lmaWMtcXVpcmtzIiwgVFJVRSwgTlVMTCk7
CisKKyAgICB0ZXN0X25vbl9xdWlya3lfdXNlcl9hZ2VudHMoc2V0dGluZ3MsIGRlZmF1bHRVc2Vy
QWdlbnQpOworCisgICAgZ19vYmplY3Rfc2V0KHNldHRpbmdzLCAidXNlci1hZ2VudCIsICJ0ZXN0
d2Vic2V0dGluZ3MvMC4xIiwgTlVMTCk7CisKKyAgICB1c2VyQWdlbnQgPSB3ZWJraXRXZWJTZXR0
aW5nc1VzZXJBZ2VudEZvclVSSShzZXR0aW5ncywgImh0dHA6Ly93d3cuZ29vZ2xlLmNvbS8iKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIodXNlckFnZW50LCA9PSwgZGVmYXVsdFVzZXJBZ2VudCk7Cisg
ICAgZ19mcmVlKHVzZXJBZ2VudCk7CisKKyAgICB1c2VyQWdlbnQgPSB3ZWJraXRXZWJTZXR0aW5n
c1VzZXJBZ2VudEZvclVSSShzZXR0aW5ncywgImh0dHA6Ly9nbWFpbC5jb20vIik7CisgICAgZ19h
c3NlcnRfY21wc3RyKHVzZXJBZ2VudCwgPT0sIGRlZmF1bHRVc2VyQWdlbnQpOworICAgIGdfZnJl
ZSh1c2VyQWdlbnQpOworCisgICAgdXNlckFnZW50ID0gd2Via2l0V2ViU2V0dGluZ3NVc2VyQWdl
bnRGb3JVUkkoc2V0dGluZ3MsICJodHRwOi8vd3d3Lmdvb2dsZS5jb20uYnIvIik7CisgICAgZ19h
c3NlcnRfY21wc3RyKHVzZXJBZ2VudCwgPT0sIGRlZmF1bHRVc2VyQWdlbnQpOworICAgIGdfZnJl
ZSh1c2VyQWdlbnQpOworCisgICAgdXNlckFnZW50ID0gd2Via2l0V2ViU2V0dGluZ3NVc2VyQWdl
bnRGb3JVUkkoc2V0dGluZ3MsICJodHRwOi8vd3d3Lmdvb2dsZS51ay5ub3QuY29tLmJyLyIpOwor
ICAgIGdfYXNzZXJ0X2NtcHN0cih1c2VyQWdlbnQsID09LCAidGVzdHdlYnNldHRpbmdzLzAuMSIp
OworICAgIGdfZnJlZSh1c2VyQWdlbnQpOworCisgICAgZ19mcmVlKGRlZmF1bHRVc2VyQWdlbnQp
OworICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywg
Y2hhciAqKmFyZ3YpCit7CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOwor
CisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBn
X3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vic2V0dGluZ3MvdXNlcl9hZ2VudCIsIHRlc3Rfd2Vi
a2l0X3dlYl9zZXR0aW5nc191c2VyX2FnZW50KTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJr
aXQvd2Vic2V0dGluZ3MvY29weSIsIHRlc3Rfd2Via2l0X3dlYl9zZXR0aW5nc19jb3B5KTsKKyAg
ICByZXR1cm4gZ190ZXN0X3J1biAoKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJ2aWV3LmMgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdEd0ay90ZXN0d2Vidmlldy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjY0ZDkyYTIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdEd0ay90ZXN0d2Vidmlldy5jCkBAIC0wLDAgKzEsNzQ2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDksIDIwMTAgQ29sbGFib3JhIEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2Fs
aWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAidGVzdF91dGlscy5oIgorCisj
aW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdHJpbmcu
aD4KKworI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgorI2luY2x1
ZGUgPGdkay9nZGsuaD4KKyNpbmNsdWRlIDxnZGsvZ2Rra2V5c3ltcy5oPgorI2luY2x1ZGUgPGd0
ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+CisKK0dNYWluTG9vcCogbG9vcDsK
K1NvdXBTZXNzaW9uICpzZXNzaW9uOworY2hhciogYmFzZV91cmk7CisKKy8qIEZvciByZWFsIHJl
cXVlc3QgdGVzdGluZyAqLworc3RhdGljIHZvaWQKK3NlcnZlcl9jYWxsYmFjayhTb3VwU2VydmVy
KiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtc2csCisgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIq
IHBhdGgsIEdIYXNoVGFibGUqIHF1ZXJ5LAorICAgICAgICAgICAgICAgICBTb3VwQ2xpZW50Q29u
dGV4dCogY29udGV4dCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBpZiAobXNnLT5tZXRob2QgIT0g
U09VUF9NRVRIT0RfR0VUKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1zZywg
U09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1zZywgU09VUF9TVEFUVVNfT0spOworCisgICAg
aWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvZmF2aWNvbi5pY28iKSkgeworICAgICAgICBjaGFyKiBj
b250ZW50czsKKyAgICAgICAgZ3NpemUgbGVuZ3RoOworICAgICAgICBHRXJyb3IqIGVycm9yID0g
TlVMTDsKKworICAgICAgICBnX2ZpbGVfZ2V0X2NvbnRlbnRzKCJibGFuay5pY28iLCAmY29udGVu
dHMsICZsZW5ndGgsICZlcnJvcik7CisgICAgICAgIGdfYXNzZXJ0KCFlcnJvcik7CisKKyAgICAg
ICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1zZy0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1P
UllfVEFLRSwgY29udGVudHMsIGxlbmd0aCk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChw
YXRoLCAiL2JpZ2Rpdi5odG1sIikpIHsKKyAgICAgICAgY2hhciogY29udGVudHMgPSBnX3N0cmR1
cCgiPGh0bWw+PGJvZHk+PGEgaWQ9XCJsaW5rXCIgaHJlZj1cImh0dHA6Ly9hYmMuZGVmXCI+dGVz
dDwvYT48ZGl2IHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogZ3JlZW47IGhlaWdodDogMTIwMHB4
O1wiPjwvZGl2PjwvYm9keT48L2h0bWw+Iik7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2Fw
cGVuZChtc2ctPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGNvbnRlbnRzLCBzdHJs
ZW4oY29udGVudHMpKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvaWZyYW1l
Lmh0bWwiKSkgeworICAgICAgICBjaGFyKiBjb250ZW50cyA9IGdfc3RyZHVwKCI8aHRtbD48Ym9k
eSBpZD1cInNvbWUtY29udGVudFwiPjxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiBncmVl
bjsgaGVpZ2h0OiA1MHB4O1wiPjwvZGl2PjxpZnJhbWUgc3JjPVwiYmlnZGl2Lmh0bWxcIj48L2lm
cmFtZT48L2JvZHk+PC9odG1sPiIpOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQo
bXNnLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBjb250ZW50cywgc3RybGVuKGNv
bnRlbnRzKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2hhciogY29udGVudHMgPSBnX3N0cmR1
cCgiPGh0bWw+PGJvZHk+dGVzdDwvYm9keT48L2h0bWw+Iik7CisgICAgICAgIHNvdXBfbWVzc2Fn
ZV9ib2R5X2FwcGVuZChtc2ctPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGNvbnRl
bnRzLCBzdHJsZW4oY29udGVudHMpKTsKKyAgICB9CisKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9j
b21wbGV0ZShtc2ctPnJlc3BvbnNlX2JvZHkpOworfQorCitzdGF0aWMgdm9pZCBpZGxlX3F1aXRf
bG9vcF9jYihXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgR1BhcmFtU3BlYyogcHNwZWMsIGdwb2lu
dGVyIGRhdGEpCit7CisgICAgaWYgKHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMod2Vi
X3ZpZXcpID09IFdFQktJVF9MT0FEX0ZJTklTSEVEIHx8CisgICAgICAgIHdlYmtpdF93ZWJfdmll
d19nZXRfbG9hZF9zdGF0dXMod2ViX3ZpZXcpID09IFdFQktJVF9MT0FEX0ZBSUxFRCkKKyAgICAg
ICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKK30KKworc3RhdGljIGdib29sZWFuIHRpbWVvdXRf
Y2IoZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBnX2Vycm9yKCJEaWRuJ3QgZ2V0IGljb24tdXJpIGJl
Zm9yZSB0aW1pbmcgb3V0LiIpOworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQg
aWNvbl91cmlfY2hhbmdlZF9jYihXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgR1BhcmFtU3BlYyog
cHNwZWMsIGdwb2ludGVyIGRhdGEpCit7CisgICAgY2hhciogZXhwZWN0ZWRfdXJpOworCisgICAg
Z19hc3NlcnRfY21wc3RyKGdfcGFyYW1fc3BlY19nZXRfbmFtZShwc3BlYyksID09LCAiaWNvbi11
cmkiKTsKKworICAgIGV4cGVjdGVkX3VyaSA9IGdfc3RyZHVwX3ByaW50ZigiJXNmYXZpY29uLmlj
byIsIGJhc2VfdXJpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dldF9p
Y29uX3VyaSh3ZWJfdmlldyksID09LCBleHBlY3RlZF91cmkpOworICAgIGdfZnJlZShleHBlY3Rl
ZF91cmkpOworCisgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKK30KKworc3RhdGljIHZvaWQg
aWNvbl9sb2FkZWRfY2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIGNoYXIqIGljb25fdXJpLCBn
cG9pbnRlciBkYXRhKQoreworICAgIGdib29sZWFuKiBiZWVuX2hlcmUgPSAoZ2Jvb2xlYW4qKWRh
dGE7CisgICAgY2hhciogZXhwZWN0ZWRfdXJpID0gZ19zdHJkdXBfcHJpbnRmKCIlc2Zhdmljb24u
aWNvIiwgYmFzZV91cmkpOworICAgIGdfYXNzZXJ0X2NtcHN0cihpY29uX3VyaSwgPT0sIGV4cGVj
dGVkX3VyaSk7CisgICAgZ19mcmVlKGV4cGVjdGVkX3VyaSk7CisKKyAgICBnX2Fzc2VydF9jbXBz
dHIoaWNvbl91cmksID09LCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fdXJpKHdlYl92aWV3KSk7
CisKKyAgICAqYmVlbl9oZXJlID0gVFJVRTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRf
d2ViX3ZpZXdfaWNvbl91cmkoKQoreworICAgIGdib29sZWFuIGJlZW5fdG9faWNvbl9sb2FkZWQg
PSBGQUxTRTsKKyAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtp
dF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmplY3RfcmVmX3NpbmsoR19PQkpFQ1Qodmlldykp
OworCisgICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKKworICAgIGdfb2Jq
ZWN0X2Nvbm5lY3QoR19PQkpFQ1QodmlldyksCisgICAgICAgICAgICAgICAgICAgICAic2lnbmFs
Ojpub3RpZnk6Omljb24tdXJpIiwgaWNvbl91cmlfY2hhbmdlZF9jYiwgTlVMTCwKKyAgICAgICAg
ICAgICAgICAgICAgICJzaWduYWw6Omljb24tbG9hZGVkIiwgaWNvbl9sb2FkZWRfY2IsICZiZWVu
X3RvX2ljb25fbG9hZGVkLAorICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICB3ZWJr
aXRfd2ViX3ZpZXdfbG9hZF91cmkodmlldywgYmFzZV91cmkpOworCisgICAgZ3VpbnQgdGltZW91
dF9pZCA9IGdfdGltZW91dF9hZGQoNTAwLCB0aW1lb3V0X2NiLCAwKTsKKworICAgIGdfbWFpbl9s
b29wX3J1bihsb29wKTsKKworICAgIGdfc291cmNlX3JlbW92ZSh0aW1lb3V0X2lkKTsKKworICAg
IGdfYXNzZXJ0KGJlZW5fdG9faWNvbl9sb2FkZWQpOworCisgICAgZ19vYmplY3RfdW5yZWYodmll
dyk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBtYXBfZXZlbnRfY2IoR3RrV2lkZ2V0ICp3aWRnZXQs
IEdka0V2ZW50KiBldmVudCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBHTWFpbkxvb3AqIGxvb3Ag
PSAoR01haW5Mb29wKilkYXRhOworICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7CisKKyAgICBy
ZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBxdWl0X2FmdGVyX3Nob3J0X2RlbGF5
X2NiKGdwb2ludGVyIGRhdGEpCit7CisgICAgZ19tYWluX2xvb3BfcXVpdCgoR01haW5Mb29wKilk
YXRhKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dl
Yl92aWV3X2dyYWJfZm9jdXMoKQoreworICAgIGNoYXIqIHVyaSA9IGdfc3RyY29uY2F0KGJhc2Vf
dXJpLCAiaWZyYW1lLmh0bWwiLCBOVUxMKTsKKyAgICBHdGtXaWRnZXQqIHdpbmRvdyA9IGd0a193
aW5kb3dfbmV3KEdUS19XSU5ET1dfUE9QVVApOworICAgIEd0a1dpZGdldCogc2Nyb2xsZWRfd2lu
ZG93ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19uZXcoTlVMTCwgTlVMTCk7CisgICAgV2ViS2l0V2Vi
VmlldyogdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAg
IEd0a0FkanVzdG1lbnQqIGFkanVzdG1lbnQ7CisKKyAgICBndGtfd2luZG93X3NldF9kZWZhdWx0
X3NpemUoR1RLX1dJTkRPVyh3aW5kb3cpLCA0MDAsIDIwMCk7CisKKyAgICBndGtfY29udGFpbmVy
X2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHNjcm9sbGVkX3dpbmRvdyk7CisgICAgZ3RrX2Nv
bnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihzY3JvbGxlZF93aW5kb3cpLCBHVEtfV0lER0VUKHZp
ZXcpKTsKKworICAgIGd0a19zY3JvbGxlZF93aW5kb3dfc2V0X3BvbGljeShHVEtfU0NST0xMRURf
V0lORE9XKHNjcm9sbGVkX3dpbmRvdyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdUS19QT0xJQ1lfQVVUT01BVElDLCBHVEtfUE9MSUNZX0FVVE9NQVRJQyk7CisKKyAgICBs
b29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworCisgICAgZ19zaWduYWxfY29ubmVj
dCh2aWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0soaWRsZV9xdWl0X2xvb3Bf
Y2IpLCBOVUxMKTsKKworICAgIC8qIFdhaXQgZm9yIHdpbmRvdyB0byBzaG93IHVwICovCisgICAg
Z3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2luZG93
LCAibWFwLWV2ZW50IiwKKyAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sobWFwX2V2ZW50
X2NiKSwgbG9vcCk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgLyogTG9hZCBh
IHBhZ2Ugd2l0aCBhIGJpZyBkaXYgdGhhdCB3aWxsIGNhdXNlIHNjcm9sbGJhcnMgdG8gYXBwZWFy
ICovCisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHZpZXcsIHVyaSk7CisgICAgZ19tYWlu
X2xvb3BfcnVuKGxvb3ApOworCisgICAgYWRqdXN0bWVudCA9IGd0a19zY3JvbGxlZF93aW5kb3df
Z2V0X3ZhZGp1c3RtZW50KEdUS19TQ1JPTExFRF9XSU5ET1coc2Nyb2xsZWRfd2luZG93KSk7Cisg
ICAgZ19hc3NlcnRfY21wZmxvYXQoZ3RrX2FkanVzdG1lbnRfZ2V0X3ZhbHVlKGFkanVzdG1lbnQp
LCA9PSwgMC4wKTsKKworICAgIC8qIFNpbmNlIHdlYmtpdF93ZWJfdmlld19leGVjdXRlX3Njcmlw
dCBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZSwKKyAgICAgICBpdCBpcyBpbXBvc3NpYmxlIHRvIGtu
b3cgaWYgYW4gaW5uZXIgZG9jdW1lbnQgaGFzIGZvY3VzIGFmdGVyCisgICAgICAgYSBub2RlIG9m
IGl0IHdhcyBmb2N1c2VkIHZpYSAuZm9jdXMoKSBtZXRob2QuCisgICAgICAgVGhlIGNvZGUgYmVs
b3cgaXMgYW4gd29ya2Fyb3VuZDogaWYgdGhlIG5vZGUgaGFzIGZvY3VzLCBhIHNjcm9sbAorICAg
ICAgIGFjdGlvbiBpcyBwZXJmb3JtZWQgYW5kIGFmdGVyd2FyZCBpdCBpcyBjaGVja2VkIGlmIHRo
ZSBhZGp1c3RtZW50CisgICAgICAgaGFzIHRvIGJlIGRpZmZlcmVudCBmcm9tIDAuCisgICAgKi8K
KyAgICBjaGFyIHNjcmlwdFtdID0gInZhciBpbm5lckRvYyA9IGRvY3VtZW50LmRlZmF1bHRWaWV3
LmZyYW1lc1swXS5kb2N1bWVudDsgXAorICAgICAgICAgICAgICAgICAgICAgaW5uZXJEb2MuZ2V0
RWxlbWVudEJ5SWQoXCJsaW5rXCIpLmZvY3VzKCk7ICAgICAgICAgICAgICBcCisgICAgICAgICAg
ICAgICAgICAgICBpZiAoaW5uZXJEb2MuaGFzRm9jdXMoKSkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxCeSgwLCAx
MDApOyI7CisKKyAgICAvKiBGb2N1cyBhbiBlbGVtZW50IHVzaW5nIEphdmFTY3JpcHQgKi8KKyAg
ICB3ZWJraXRfd2ViX3ZpZXdfZXhlY3V0ZV9zY3JpcHQodmlldywgc2NyaXB0KTsKKworICAgIC8q
IEFkanVzdG1lbnRzIHVwZGF0ZSBhc3luY2hyb25vdXNseSwgc28gd2UgbXVzdCB3YWl0IGEgYml0
LiAqLworICAgIGdfdGltZW91dF9hZGQoMTAwLCBxdWl0X2FmdGVyX3Nob3J0X2RlbGF5X2NiLCBs
b29wKTsKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICAvKiBNYWtlIHN1cmUgdGhl
IFNjcm9sbGVkV2luZG93IG5vdGljZWQgdGhlIHNjcm9sbCAqLworICAgIGdfYXNzZXJ0X2NtcGZs
b2F0KGd0a19hZGp1c3RtZW50X2dldF92YWx1ZShhZGp1c3RtZW50KSwgIT0sIDAuMCk7CisKKyAg
ICBnX2ZyZWUodXJpKTsKKyAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kod2luZG93KTsKK30KKworc3Rh
dGljIHZvaWQgZG9fdGVzdF93ZWJraXRfd2ViX3ZpZXdfYWRqdXN0bWVudHMoZ2Jvb2xlYW4gd2l0
aF9wYWdlX2NhY2hlKQoreworICAgIGNoYXIqIGVmZmVjdGl2ZV91cmkgPSBnX3N0cmNvbmNhdChi
YXNlX3VyaSwgImJpZ2Rpdi5odG1sIiwgTlVMTCk7CisgICAgY2hhciogc2Vjb25kX3VyaSA9IGdf
c3RyY29uY2F0KGJhc2VfdXJpLCAiaWZyYW1lLmh0bWwiLCBOVUxMKTsKKyAgICBHdGtXaWRnZXQq
IHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOworICAgIEd0a1dp
ZGdldCogc2Nyb2xsZWRfd2luZG93ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19uZXcoTlVMTCwgTlVM
TCk7CisgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2Vi
X3ZpZXdfbmV3KCkpOworICAgIEd0a0FkanVzdG1lbnQqIGFkanVzdG1lbnQ7CisgICAgZG91Ymxl
IGxvd2VyOworICAgIGRvdWJsZSB1cHBlcjsKKworICAgIGlmICh3aXRoX3BhZ2VfY2FjaGUpIHsK
KyAgICAgICAgV2ViS2l0V2ViU2V0dGluZ3MqIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dl
dF9zZXR0aW5ncyh2aWV3KTsKKyAgICAgICAgZ19vYmplY3Rfc2V0KHNldHRpbmdzLCAiZW5hYmxl
LXBhZ2UtY2FjaGUiLCBUUlVFLCBOVUxMKTsKKyAgICB9CisKKyAgICBndGtfd2luZG93X3NldF9k
ZWZhdWx0X3NpemUoR1RLX1dJTkRPVyh3aW5kb3cpLCA0MDAsIDIwMCk7CisKKyAgICBndGtfY29u
dGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHNjcm9sbGVkX3dpbmRvdyk7CisgICAg
Z3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihzY3JvbGxlZF93aW5kb3cpLCBHVEtfV0lE
R0VUKHZpZXcpKTsKKworICAgIGd0a19zY3JvbGxlZF93aW5kb3dfc2V0X3BvbGljeShHVEtfU0NS
T0xMRURfV0lORE9XKHNjcm9sbGVkX3dpbmRvdyksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdUS19QT0xJQ1lfQVVUT01BVElDLCBHVEtfUE9MSUNZX0FVVE9NQVRJQyk7CisK
KyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworCisgICAgZ19vYmplY3Rf
Y29ubmVjdChHX09CSkVDVCh2aWV3KSwKKyAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6Om5v
dGlmeTo6bG9hZC1zdGF0dXMiLCBpZGxlX3F1aXRfbG9vcF9jYiwgTlVMTCwKKyAgICAgICAgICAg
ICAgICAgICAgIE5VTEwpOworCisgICAgLyogV2FpdCBmb3Igd2luZG93IHRvIHNob3cgdXAgKi8K
KyAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7CisgICAgZ19zaWduYWxfY29ubmVjdCh3
aW5kb3csICJtYXAtZXZlbnQiLAorICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhtYXBf
ZXZlbnRfY2IpLCBsb29wKTsKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICAvKiBM
b2FkIGEgcGFnZSB3aXRoIGEgYmlnIGRpdiB0aGF0IHdpbGwgY2F1c2Ugc2Nyb2xsYmFycyB0byBh
cHBlYXIgKi8KKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkodmlldywgZWZmZWN0aXZlX3Vy
aSk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgLyogQWRqdXN0bWVudHMgdXBk
YXRlIGFzeW5jaHJvbm91c2x5LCBzbyB3ZSBtdXN0IHdhaXQgYSBiaXQuICovCisgICAgZ190aW1l
b3V0X2FkZCgxMDAsIHF1aXRfYWZ0ZXJfc2hvcnRfZGVsYXlfY2IsIGxvb3ApOworICAgIGdfbWFp
bl9sb29wX3J1bihsb29wKTsKKworICAgIGFkanVzdG1lbnQgPSBndGtfc2Nyb2xsZWRfd2luZG93
X2dldF92YWRqdXN0bWVudChHVEtfU0NST0xMRURfV0lORE9XKHNjcm9sbGVkX3dpbmRvdykpOwor
ICAgIGdfYXNzZXJ0X2NtcGZsb2F0KGd0a19hZGp1c3RtZW50X2dldF92YWx1ZShhZGp1c3RtZW50
KSwgPT0sIDAuMCk7CisKKyAgICBsb3dlciA9IGd0a19hZGp1c3RtZW50X2dldF9sb3dlcihhZGp1
c3RtZW50KTsKKyAgICB1cHBlciA9IGd0a19hZGp1c3RtZW50X2dldF91cHBlcihhZGp1c3RtZW50
KTsKKworICAgIC8qIFNjcm9sbCB0aGUgdmlldyB1c2luZyBKYXZhU2NyaXB0ICovCisgICAgd2Vi
a2l0X3dlYl92aWV3X2V4ZWN1dGVfc2NyaXB0KHZpZXcsICJ3aW5kb3cuc2Nyb2xsQnkoMCwgMTAw
KSIpOworCisgICAgLyogQWRqdXN0bWVudHMgdXBkYXRlIGFzeW5jaHJvbm91c2x5LCBzbyB3ZSBt
dXN0IHdhaXQgYSBiaXQuICovCisgICAgZ190aW1lb3V0X2FkZCgxMDAsIHF1aXRfYWZ0ZXJfc2hv
cnRfZGVsYXlfY2IsIGxvb3ApOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIC8q
IE1ha2Ugc3VyZSB0aGUgU2Nyb2xsZWRXaW5kb3cgbm90aWNlZCB0aGUgc2Nyb2xsICovCisgICAg
Z19hc3NlcnRfY21wZmxvYXQoZ3RrX2FkanVzdG1lbnRfZ2V0X3ZhbHVlKGFkanVzdG1lbnQpLCA9
PSwgMTAwLjApOworCisgICAgLyogTG9hZCBhIHNlY29uZCBVUkkgKi8KKyAgICB3ZWJraXRfd2Vi
X3ZpZXdfbG9hZF91cmkodmlldywgc2Vjb25kX3VyaSk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxv
b3ApOworCisgICAgLyogVGhlIHBhZ2UgbG9hZGVkIGJ1dCB0aGUgYWRqdXN0bWVudHMgbWF5IG5v
dCBiZSB1cGRhdGVkIHlldC4gV2FpdCBhIGJpdC4gKi8KKyAgICBnX3RpbWVvdXRfYWRkKDEwMCwg
cXVpdF9hZnRlcl9zaG9ydF9kZWxheV9jYiwgbG9vcCk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxv
b3ApOworCisgICAgLyogTWFrZSBzdXJlIHRoZSBzY3JvbGxiYXIgaGFzIGJlZW4gcmVzZXQgKi8K
KyAgICBnX2Fzc2VydF9jbXBmbG9hdChndGtfYWRqdXN0bWVudF9nZXRfdmFsdWUoYWRqdXN0bWVu
dCksID09LCAwLjApOworCisgICAgLyogR28gYmFjayAqLworICAgIHdlYmtpdF93ZWJfdmlld19n
b19iYWNrKHZpZXcpOworCisgICAgLyogV2hlbiB1c2luZyBwYWdlIGNhY2hlLCBnb19iYWNrIHdp
bGwgcmV0dXJuIHN5bmNyb25vdXNseSAqLworICAgIGlmICghd2l0aF9wYWdlX2NhY2hlKQorICAg
ICAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICAvKiBNYWtlIHN1cmUgR1RLKyBoYXMg
dGltZSB0byBwcm9jZXNzIHRoZSBjaGFuZ2VzIGluIHNpemUsIGZvciB0aGUgYWRqdXNtZW50cyAq
LworICAgIHdoaWxlIChndGtfZXZlbnRzX3BlbmRpbmcoKSkKKyAgICAgICAgZ3RrX21haW5faXRl
cmF0aW9uKCk7CisKKyAgICAvKiBNYWtlIHN1cmUgdXBwZXIgYW5kIGxvd2VyIGJvdW5kcyBoYXZl
IGJlZW4gcmVzdG9yZWQgY29ycmVjdGx5ICovCisgICAgZ19hc3NlcnRfY21wZmxvYXQobG93ZXIs
ID09LCBndGtfYWRqdXN0bWVudF9nZXRfbG93ZXIoYWRqdXN0bWVudCkpOworICAgIGdfYXNzZXJ0
X2NtcGZsb2F0KHVwcGVyLCA9PSwgZ3RrX2FkanVzdG1lbnRfZ2V0X3VwcGVyKGFkanVzdG1lbnQp
KTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdChndGtfYWRqdXN0bWVudF9nZXRfdmFsdWUoYWRqdXN0
bWVudCksID09LCAxMDAuMCk7CisKKyAgICBnX2ZyZWUoZWZmZWN0aXZlX3VyaSk7CisgICAgZ19m
cmVlKHNlY29uZF91cmkpOworCisgICAgZ3RrX3dpZGdldF9kZXN0cm95KHdpbmRvdyk7Cit9CisK
K3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl92aWV3X2FkanVzdG1lbnRzKCkKK3sKKyAgICAv
KiBUZXN0IHRoaXMgd2l0aCBwYWdlIGNhY2hlIGRpc2FibGVkLCBhbmQgZW5hYmxlZC4gKi8KKyAg
ICBkb190ZXN0X3dlYmtpdF93ZWJfdmlld19hZGp1c3RtZW50cyhGQUxTRSk7CisgICAgZG9fdGVz
dF93ZWJraXRfd2ViX3ZpZXdfYWRqdXN0bWVudHMoVFJVRSk7Cit9CisKK2dib29sZWFuIGRlbGF5
ZWRfZGVzdHJveShncG9pbnRlciBkYXRhKQoreworICAgIGd0a193aWRnZXRfZGVzdHJveShHVEtf
V0lER0VUKGRhdGEpKTsKKyAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworICAgIHJldHVybiBG
QUxTRTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3ZpZXdfZGVzdHJveSgpCit7
CisgICAgR3RrV2lkZ2V0KiB3aW5kb3c7CisgICAgR3RrV2lkZ2V0KiB3ZWJfdmlldzsKKworICAg
IHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOworICAgIHdlYl92
aWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygpOworCisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RL
X0NPTlRBSU5FUih3aW5kb3cpLCB3ZWJfdmlldyk7CisKKyAgICBndGtfd2lkZ2V0X3Nob3dfYWxs
KHdpbmRvdyk7CisKKyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworCisg
ICAgZ19zaWduYWxfY29ubmVjdCh3aW5kb3csICJtYXAtZXZlbnQiLAorICAgICAgICAgICAgICAg
ICAgICAgR19DQUxMQkFDSyhtYXBfZXZlbnRfY2IpLCBsb29wKTsKKyAgICBnX21haW5fbG9vcF9y
dW4obG9vcCk7CisKKyAgICBnX2lkbGVfYWRkKGRlbGF5ZWRfZGVzdHJveSwgd2ViX3ZpZXcpOwor
ICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIGd0a193aWRnZXRfZGVzdHJveSh3aW5k
b3cpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfdmlld193aW5kb3dfZmVhdHVy
ZXMoKQoreworICAgIEd0a1dpZGdldCogd2luZG93OworICAgIEd0a1dpZGdldCogd2ViX3ZpZXc7
CisgICAgCisgICAgd2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7
CisgICAgd2ViX3ZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7CisgICAgCisgICAgZ3RrX2Nv
bnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB3ZWJfdmlldyk7CisgICAgCisgICAg
Z3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpOworICAgIAorICAgIGxvb3AgPSBnX21haW5fbG9v
cF9uZXcoTlVMTCwgVFJVRSk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdpbmRvdywgIm1hcC1l
dmVudCIsCisgICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKG1hcF9ldmVudF9jYiksIGxv
b3ApOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKyAgICAKKyAgICAvKiBCdWcgIzM2MTQ0
ICovCisgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKHdlYl92aWV3KSwgIndpbmRvdy1mZWF0dXJl
cyIsIE5VTEwsIE5VTEwpOworICAgIAorICAgIGd0a193aWRnZXRfZGVzdHJveSh3aW5kb3cpOwor
fSAgICAKKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3ZpZXdfaW5fb2Zmc2NyZWVuX3dp
bmRvd19kb2VzX25vdF9jcmFzaCgpCit7CisgICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxM
LCBUUlVFKTsKKworICAgIEd0a1dpZGdldCAqd2luZG93ID0gZ3RrX29mZnNjcmVlbl93aW5kb3df
bmV3KCk7CisgICAgR3RrV2lkZ2V0ICp3ZWJfdmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsK
KworICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgd2ViX3ZpZXcp
OworICAgIGd0a193aWRnZXRfc2hvd19hbGwod2luZG93KTsKKyAgICBnX3NpZ25hbF9jb25uZWN0
KHdlYl92aWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0soaWRsZV9xdWl0X2xv
b3BfY2IpLCBOVUxMKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkoV0VCS0lUX1dFQl9W
SUVXKHdlYl92aWV3KSwgYmFzZV91cmkpOworCisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwor
CisgICAgZ3RrX3dpZGdldF9kZXN0cm95KHdpbmRvdyk7CisgICAgZ19tYWluX2xvb3BfdW5yZWYo
bG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl92aWV3X2RvZXNfbm90X3N0
ZWFsX2ZvY3VzKCkKK3sKKyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwor
CisgICAgR3RrV2lkZ2V0ICp3aW5kb3cgPSBndGtfb2Zmc2NyZWVuX3dpbmRvd19uZXcoKTsKKyAg
ICBHdGtXaWRnZXQgKndlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7CisgICAgR3RrV2lk
Z2V0ICplbnRyeSA9IGd0a19lbnRyeV9uZXcoKTsKKworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8y
CisgICAgR3RrV2lkZ2V0ICpib3ggPSBndGtfaGJveF9uZXcoRkFMU0UsIDApOworI2Vsc2UKKyAg
ICBHdGtXaWRnZXQgKmJveCA9IGd0a19ib3hfbmV3KEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFM
LCAwKTsKKyNlbmRpZgorCisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihib3gp
LCB3ZWJWaWV3KTsKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGJveCksIGVu
dHJ5KTsKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIGJveCk7
CisgICAgZ3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpOworCisgICAgZ3RrX3dpZGdldF9ncmFi
X2ZvY3VzKGVudHJ5KTsKKyAgICBnX2Fzc2VydChndGtfd2lkZ2V0X2lzX2ZvY3VzKGVudHJ5KSk7
CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwg
R19DQUxMQkFDSyhpZGxlX3F1aXRfbG9vcF9jYiksIE5VTEwpOworICAgIHdlYmtpdF93ZWJfdmll
d19sb2FkX2h0bWxfc3RyaW5nKFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3KSwKKyAgICAgICAgIjxo
dG1sPjxib2R5PiIKKyAgICAgICAgIiAgICA8aW5wdXQgaWQ9XCJlbnRyeVwiIHR5cGU9XCJ0ZXh0
XCIvPiIKKyAgICAgICAgIiAgICA8c2NyaXB0PiIKKyAgICAgICAgIiAgICAgICAgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoXCJlbnRyeVwiKS5mb2N1cygpOyIKKyAgICAgICAgIiAgICA8L3Njcmlw
dD4iCisgICAgICAgICI8L2JvZHk+PC9odG1sPiIsICJmaWxlOi8vIik7CisKKyAgICBnX21haW5f
bG9vcF9ydW4obG9vcCk7CisKKyAgICBnX2Fzc2VydChndGtfd2lkZ2V0X2lzX2ZvY3VzKGVudHJ5
KSk7CisKKyAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kod2luZG93KTsKKyAgICBnX21haW5fbG9vcF91
bnJlZihsb29wKTsKK30KKworc3RhdGljIGdib29sZWFuIGVtaXRLZXlTdHJva2UoV2ViS2l0V2Vi
Vmlldyogd2ViVmlldykKK3sKKyAgICBHZGtFdmVudCogcHJlc3NFdmVudCA9IGdka19ldmVudF9u
ZXcoR0RLX0tFWV9QUkVTUyk7CisgICAgcHJlc3NFdmVudC0+a2V5LmtleXZhbCA9IEdES19LRVlf
ZjsKKyAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyhHVEtfV0lE
R0VUKHdlYlZpZXcpKTsKKyAgICBwcmVzc0V2ZW50LT5rZXkud2luZG93ID0gd2luZG93OworICAg
IGdfb2JqZWN0X3JlZihwcmVzc0V2ZW50LT5rZXkud2luZG93KTsKKworI2lmbmRlZiBHVEtfQVBJ
X1ZFUlNJT05fMgorICAgIEdka0RldmljZU1hbmFnZXIqIG1hbmFnZXIgPSBnZGtfZGlzcGxheV9n
ZXRfZGV2aWNlX21hbmFnZXIoZ2RrX3dpbmRvd19nZXRfZGlzcGxheSh3aW5kb3cpKTsKKyAgICBn
ZGtfZXZlbnRfc2V0X2RldmljZShwcmVzc0V2ZW50LCBnZGtfZGV2aWNlX21hbmFnZXJfZ2V0X2Ns
aWVudF9wb2ludGVyKG1hbmFnZXIpKTsKKyNlbmRpZgorCisgICAgLy8gV2hlbiBzeW50aGVzaXpp
bmcgYW4gZXZlbnQsIGFuIGludmFsaWQgaGFyZHdhcmVfa2V5Y29kZSB2YWx1ZQorICAgIC8vIGNh
biBjYXVzZSBpdCB0byBiZSBiYWRseSBwcm9jZXNzZWQgYnkgR3RrKy4KKyAgICBHZGtLZXltYXBL
ZXkqIGtleXM7CisgICAgZ2ludCBuX2tleXM7CisgICAgaWYgKGdka19rZXltYXBfZ2V0X2VudHJp
ZXNfZm9yX2tleXZhbChnZGtfa2V5bWFwX2dldF9kZWZhdWx0KCksIEdES19LRVlfZiwgJmtleXMs
ICZuX2tleXMpKSB7CisgICAgICAgIHByZXNzRXZlbnQtPmtleS5oYXJkd2FyZV9rZXljb2RlID0g
a2V5c1swXS5rZXljb2RlOworICAgICAgICBnX2ZyZWUoa2V5cyk7CisgICAgfQorCisgICAgR2Rr
RXZlbnQqIHJlbGVhc2VFdmVudCA9IGdka19ldmVudF9jb3B5KHByZXNzRXZlbnQpOworICAgIGd0
a19tYWluX2RvX2V2ZW50KHByZXNzRXZlbnQpOworICAgIGdka19ldmVudF9mcmVlKHByZXNzRXZl
bnQpOworICAgIHJlbGVhc2VFdmVudC0+a2V5LnR5cGUgPSBHREtfS0VZX1JFTEVBU0U7CisgICAg
Z3RrX21haW5fZG9fZXZlbnQocmVsZWFzZUV2ZW50KTsKKyAgICBnZGtfZXZlbnRfZnJlZShyZWxl
YXNlRXZlbnQpOworCisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gZW50
ZXJpbmdfZnVsbHNjcmVlbl9jYihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHT2JqZWN0KiBlbGVt
ZW50LCBnYm9vbGVhbiBibG9ja2VkKQoreworICAgIGlmIChibG9ja2VkKQorICAgICAgICBnX21h
aW5fbG9vcF9xdWl0KGxvb3ApOworICAgIGVsc2UKKyAgICAgICAgZ190aW1lb3V0X2FkZCgyMDAs
IChHU291cmNlRnVuYykgZW1pdEtleVN0cm9rZSwgd2ViVmlldyk7CisgICAgcmV0dXJuIGJsb2Nr
ZWQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBsZWF2aW5nX2Z1bGxzY3JlZW5fY2IoV2ViS2l0V2Vi
Vmlldyogd2ViVmlldywgR09iamVjdCogZWxlbWVudCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBn
X21haW5fbG9vcF9xdWl0KGxvb3ApOworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZv
aWQgdGVzdF93ZWJraXRfd2ViX3ZpZXdfZnVsbHNjcmVlbihnY29uc3Rwb2ludGVyIGJsb2NrZWQp
Cit7CisgICAgR3RrV2lkZ2V0KiB3aW5kb3c7CisgICAgR3RrV2lkZ2V0KiB3ZWJfdmlldzsKKyAg
ICBXZWJLaXRXZWJTZXR0aW5ncyAqc2V0dGluZ3M7CisKKyAgICB3aW5kb3cgPSBndGtfd2luZG93
X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKKyAgICB3ZWJfdmlldyA9IHdlYmtpdF93ZWJfdmll
d19uZXcoKTsKKworICAgIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyhX
RUJLSVRfV0VCX1ZJRVcod2ViX3ZpZXcpKTsKKyAgICBnX29iamVjdF9zZXQoc2V0dGluZ3MsICJl
bmFibGUtZnVsbHNjcmVlbiIsIFRSVUUsIE5VTEwpOworICAgIHdlYmtpdF93ZWJfdmlld19zZXRf
c2V0dGluZ3MoV0VCS0lUX1dFQl9WSUVXKHdlYl92aWV3KSwgc2V0dGluZ3MpOworCisgICAgZ3Rr
X2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB3ZWJfdmlldyk7CisKKyAgICBn
dGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7CisKKyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3
KE5VTEwsIFRSVUUpOworCisgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJfdmlldywgImVudGVyaW5n
LWZ1bGxzY3JlZW4iLCBHX0NBTExCQUNLKGVudGVyaW5nX2Z1bGxzY3JlZW5fY2IpLCAoZ3BvaW50
ZXIpIGJsb2NrZWQpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViX3ZpZXcsICJsZWF2aW5nLWZ1
bGxzY3JlZW4iLCBHX0NBTExCQUNLKGxlYXZpbmdfZnVsbHNjcmVlbl9jYiksIE5VTEwpOworCisg
ICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklFVyh3ZWJfdmlldyks
ICI8aHRtbD48Ym9keT4iCisgICAgICAgICAgICAgICAgICAgIjxzY3JpcHQ+IgorICAgICAgICAg
ICAgICAgICAgICJ2YXIgZXZlbnROYW1lID0gJ2tleXByZXNzJzsiCisgICAgICAgICAgICAgICAg
ICAgImRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBmdW5jdGlvbiAoKSB7Igor
ICAgICAgICAgICAgICAgICAgICIgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LndlYmtpdFJl
cXVlc3RGdWxsU2NyZWVuKCk7IgorICAgICAgICAgICAgICAgICAgICJ9LCBmYWxzZSk7IgorICAg
ICAgICAgICAgICAgICAgICI8L3NjcmlwdD48L2JvZHk+PC9odG1sPiIsIE5VTEwsIE5VTEwsIE5V
TEwpOworCisgICAgZ190aW1lb3V0X2FkZCgxMDAsIChHU291cmNlRnVuYykgZW1pdEtleVN0cm9r
ZSwgV0VCS0lUX1dFQl9WSUVXKHdlYl92aWV3KSk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3Ap
OworCisgICAgZ3RrX3dpZGdldF9kZXN0cm95KHdpbmRvdyk7Cit9CisKK3N0YXRpYyBnYm9vbGVh
biBjaGVja01pbWVUeXBlRm9yRmlsdGVyKEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciwgY29uc3QgZ2No
YXIqIG1pbWVUeXBlKQoreworICAgIEd0a0ZpbGVGaWx0ZXJJbmZvIGZpbHRlcl9pbmZvOworICAg
IGZpbHRlcl9pbmZvLmNvbnRhaW5zID0gR1RLX0ZJTEVfRklMVEVSX01JTUVfVFlQRTsKKyAgICBm
aWx0ZXJfaW5mby5taW1lX3R5cGUgPSBtaW1lVHlwZTsKKyAgICByZXR1cm4gZ3RrX2ZpbGVfZmls
dGVyX2ZpbHRlcihmaWx0ZXIsICZmaWx0ZXJfaW5mbyk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBy
dW5GaWxlQ2hvb3NlckNiTm9NdWx0aXNlbE5vTWltZShXZWJLaXRXZWJWaWV3KiB3ZWJ2aWV3LCBX
ZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QsIGdwb2ludGVyIGRhdGEpCit7CisgICAg
Z19hc3NlcnQoIXdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxl
KHJlcXVlc3QpKTsKKworICAgIGNvbnN0IGdjaGFyKiBjb25zdCogbWltZVR5cGVzID0gd2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKHJlcXVlc3QpOworICAgIGdfYXNz
ZXJ0KCFtaW1lVHlwZXMpOworICAgIEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciA9IHdlYmtpdF9maWxl
X2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIocmVxdWVzdCk7CisgICAgZ19h
c3NlcnQoIWZpbHRlcik7CisKKyAgICBjb25zdCBnY2hhciogY29uc3QqIHNlbGVjdGVkRmlsZXMg
PSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKHJlcXVlc3Qp
OworICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZpbGVzKTsKKworICAgIGdfbWFpbl9sb29wX3F1aXQo
bG9vcCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBydW5GaWxlQ2hv
b3NlckNiTXVsdGlzZWxOb01pbWUoV2ViS2l0V2ViVmlldyogd2VidmlldywgV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0KiByZXF1ZXN0LCBncG9pbnRlciBkYXRhKQoreworICAgIGdfYXNzZXJ0KHdl
YmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxlKHJlcXVlc3QpKTsK
KworICAgIGNvbnN0IGdjaGFyKiBjb25zdCogbWltZVR5cGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKHJlcXVlc3QpOworICAgIGdfYXNzZXJ0KCFtaW1lVHlw
ZXMpOworICAgIEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVx
dWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIocmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIWZpbHRl
cik7CisgICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2ZpbGVf
Y2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0KTsKKyAgICBnX2Fzc2Vy
dCghc2VsZWN0ZWRGaWxlcyk7CisKKyAgICAvLyBTZWxlY3Qgc29tZSBmaWxlcy4KKyAgICBjb25z
dCBnY2hhciogZmlsZXNUb1NlbGVjdFs0XSA9IHsgIi9mb28iLCAiL2Zvby9iYXIiLCAiL2Zvby9i
YXIvYmF6IiwgMCB9OworICAgIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9zZWxlY3RfZmls
ZXMocmVxdWVzdCwgZmlsZXNUb1NlbGVjdCk7CisKKyAgICAvLyBDaGVjayB0aGUgZmlsZXMgdGhh
dCBoYXZlIGJlZW4ganVzdCBzZWxlY3RlZC4KKyAgICBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2Zp
bGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0KTsKKyAgICBnX2Fz
c2VydChzZWxlY3RlZEZpbGVzKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1sw
XSwgPT0sICIvZm9vIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMV0sID09
LCAiL2Zvby9iYXIiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1syXSwgPT0s
ICIvZm9vL2Jhci9iYXoiKTsKKyAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxlc1szXSk7CisKKyAg
ICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMg
Z2Jvb2xlYW4gcnVuRmlsZUNob29zZXJDYlNlbGVjdGlvblJldGFpbmVkKFdlYktpdFdlYlZpZXcq
IHdlYnZpZXcsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCwgZ3BvaW50ZXIgZGF0
YSkKK3sKKyAgICBjb25zdCBnY2hhciogY29uc3QqIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRfZmls
ZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKHJlcXVlc3QpOworICAgIGdfYXNz
ZXJ0KHNlbGVjdGVkRmlsZXMpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzBd
LCA9PSwgIi9mb28iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1sxXSwgPT0s
ICIvZm9vL2JhciIpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzJdLCA9PSwg
Ii9mb28vYmFyL2JheiIpOworICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZpbGVzWzNdKTsKKworICAg
IGdfbWFpbl9sb29wX3F1aXQobG9vcCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBn
Ym9vbGVhbiBydW5GaWxlQ2hvb3NlckNiTm9NdWx0aXNlbEFjY2VwdFR5cGVzKFdlYktpdFdlYlZp
ZXcqIHdlYnZpZXcsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCwgZ3BvaW50ZXIg
ZGF0YSkKK3sKKyAgICBnX2Fzc2VydCghd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9z
ZWxlY3RfbXVsdGlwbGUocmVxdWVzdCkpOworCisgICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBtaW1l
VHlwZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMocmVxdWVz
dCk7CisgICAgZ19hc3NlcnQobWltZVR5cGVzKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIobWltZVR5
cGVzWzBdLCA9PSwgImF1ZGlvLyoiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIobWltZVR5cGVzWzFd
LCA9PSwgInZpZGVvLyoiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIobWltZVR5cGVzWzJdLCA9PSwg
ImltYWdlLyoiKTsKKyAgICBnX2Fzc2VydCghbWltZVR5cGVzWzNdKTsKKworICAgIEd0a0ZpbGVG
aWx0ZXIqIGZpbHRlciA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBl
c19maWx0ZXIocmVxdWVzdCk7CisgICAgZ19hc3NlcnQoR1RLX0lTX0ZJTEVfRklMVEVSKGZpbHRl
cikpOworICAgIGdfYXNzZXJ0KGNoZWNrTWltZVR5cGVGb3JGaWx0ZXIoZmlsdGVyLCAiYXVkaW8v
KiIpKTsKKyAgICBnX2Fzc2VydChjaGVja01pbWVUeXBlRm9yRmlsdGVyKGZpbHRlciwgInZpZGVv
LyoiKSk7CisgICAgZ19hc3NlcnQoY2hlY2tNaW1lVHlwZUZvckZpbHRlcihmaWx0ZXIsICJpbWFn
ZS8qIikpOworCisgICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBzZWxlY3RlZEZpbGVzID0gd2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0KTsKKyAgICBn
X2Fzc2VydCghc2VsZWN0ZWRGaWxlcyk7CisKKyAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwor
ICAgIHJldHVybiBUUlVFOworfQorCit2b2lkIGRvTW91c2VCdXR0b25FdmVudChHdGtXaWRnZXQq
IHdpZGdldCwgR2RrRXZlbnRUeXBlIGV2ZW50VHlwZSwgaW50IHgsIGludCB5LCB1bnNpZ25lZCBp
bnQgYnV0dG9uLCB1bnNpZ25lZCBpbnQgbW9kaWZpZXJzKQoreworICAgIGdfYXNzZXJ0KGd0a193
aWRnZXRfZ2V0X3JlYWxpemVkKHdpZGdldCkpOworCisgICAgR2RrRXZlbnQqIGV2ZW50ID0gZ2Rr
X2V2ZW50X25ldyhldmVudFR5cGUpOworICAgIGV2ZW50LT5idXR0b24ud2luZG93ID0gZ3RrX3dp
ZGdldF9nZXRfd2luZG93KHdpZGdldCk7CisgICAgZ19vYmplY3RfcmVmKGV2ZW50LT5idXR0b24u
d2luZG93KTsKKworICAgIGV2ZW50LT5idXR0b24udGltZSA9IEdES19DVVJSRU5UX1RJTUU7Cisg
ICAgZXZlbnQtPmJ1dHRvbi54ID0geDsKKyAgICBldmVudC0+YnV0dG9uLnkgPSB5OworICAgIGV2
ZW50LT5idXR0b24uYXhlcyA9IDA7CisgICAgZXZlbnQtPmJ1dHRvbi5zdGF0ZSA9IG1vZGlmaWVy
czsKKyAgICBldmVudC0+YnV0dG9uLmJ1dHRvbiA9IGJ1dHRvbjsKKworI2lmbmRlZiBHVEtfQVBJ
X1ZFUlNJT05fMgorICAgIGV2ZW50LT5idXR0b24uZGV2aWNlID0gZ2RrX2RldmljZV9tYW5hZ2Vy
X2dldF9jbGllbnRfcG9pbnRlcihnZGtfZGlzcGxheV9nZXRfZGV2aWNlX21hbmFnZXIoZ3RrX3dp
ZGdldF9nZXRfZGlzcGxheSh3aWRnZXQpKSk7CisjZW5kaWYKKworICAgIGludCB4Um9vdCwgeVJv
b3Q7CisgICAgZ2RrX3dpbmRvd19nZXRfcm9vdF9jb29yZHMoZ3RrX3dpZGdldF9nZXRfd2luZG93
KHdpZGdldCksIHgsIHksICZ4Um9vdCwgJnlSb290KTsKKyAgICBldmVudC0+YnV0dG9uLnhfcm9v
dCA9IHhSb290OworICAgIGV2ZW50LT5idXR0b24ueV9yb290ID0geVJvb3Q7CisgICAgZ3RrX21h
aW5fZG9fZXZlbnQoZXZlbnQpOworfQorCitzdGF0aWMgdm9pZCBjbGlja01vdXNlQnV0dG9uKEd0
a1dpZGdldCogd2lkZ2V0LCBpbnQgeCwgaW50IHksIHVuc2lnbmVkIGludCBidXR0b24sIHVuc2ln
bmVkIGludCBtb2RpZmllcnMpCit7CisgICAgZG9Nb3VzZUJ1dHRvbkV2ZW50KHdpZGdldCwgR0RL
X0JVVFRPTl9QUkVTUywgeCwgeSwgYnV0dG9uLCBtb2RpZmllcnMpOworICAgIGRvTW91c2VCdXR0
b25FdmVudCh3aWRnZXQsIEdES19CVVRUT05fUkVMRUFTRSwgeCwgeSwgYnV0dG9uLCBtb2RpZmll
cnMpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gY2xpY2tNb3VzZUJ1dHRvbkFuZFdhaXRGb3JGaWxl
Q2hvb3NlclJlcXVlc3QoV2ViS2l0V2ViVmlldyogd2ViVmlldykKK3sKKyAgICBjbGlja01vdXNl
QnV0dG9uKEdUS19XSURHRVQod2ViVmlldyksIDUsIDUsIDEsIDApOworICAgIHJldHVybiBUUlVF
OworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfdmlld19maWxlX2Nob29zZXIoKQor
eworICAgIGNvbnN0IGdjaGFyKiBodG1sRm9ybWF0QmFzZSA9ICI8aHRtbD48Ym9keT4iCisgICAg
ICAgICAgICAiPGlucHV0IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjA7bWFy
Z2luOjA7cGFkZGluZzowJyB0eXBlPSdmaWxlJyAlcy8+IgorICAgICAgICAgICAgIjwvYm9keT48
L2h0bWw+IjsKKworICAgIEd0a1dpZGdldCogd2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJ
TkRPV19UT1BMRVZFTCk7CisgICAgR3RrV2lkZ2V0KiB3ZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3
X25ldygpOworICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgd2Vi
Vmlldyk7CisgICAgZ3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpOworCisgICAgbG9vcCA9IGdf
bWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKKworICAgIC8vIE11bHRpcGxlIHNlbGVjdGlvbnMg
bm90IGFsbG93ZWQsIG5vIE1JTUUgZmlsdGVyaW5nLgorICAgIGd1bG9uZyBoYW5kbGVyID0gZ19z
aWduYWxfY29ubmVjdCh3ZWJWaWV3LCAicnVuLWZpbGUtY2hvb3NlciIsIEdfQ0FMTEJBQ0socnVu
RmlsZUNob29zZXJDYk5vTXVsdGlzZWxOb01pbWUpLCBOVUxMKTsKKyAgICBnY2hhciogaHRtbEZv
cm1hdCA9IGdfc3RyZHVwX3ByaW50ZihodG1sRm9ybWF0QmFzZSwgIiIpOworICAgIHdlYmtpdF93
ZWJfdmlld19sb2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldyksIGh0bWxGb3JtYXQs
IE5VTEwsIE5VTEwsIE5VTEwpOworICAgIGdfZnJlZShodG1sRm9ybWF0KTsKKworICAgIGdfdGlt
ZW91dF9hZGQoMTAwLCAoR1NvdXJjZUZ1bmMpIGNsaWNrTW91c2VCdXR0b25BbmRXYWl0Rm9yRmls
ZUNob29zZXJSZXF1ZXN0LCBXRUJLSVRfV0VCX1ZJRVcod2ViVmlldykpOworICAgIGdfbWFpbl9s
b29wX3J1bihsb29wKTsKKworICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdCh3ZWJWaWV3
LCBoYW5kbGVyKTsKKworICAgIC8vIE11bHRpcGxlIHNlbGVjdGlvbnMgYWxsb3dlZCwgbm8gTUlN
RSBmaWx0ZXJpbmcsIHNvbWUgcHJlLXNlbGVjdGVkIGZpbGVzLgorICAgIGhhbmRsZXIgPSBnX3Np
Z25hbF9jb25uZWN0KHdlYlZpZXcsICJydW4tZmlsZS1jaG9vc2VyIiwgR19DQUxMQkFDSyhydW5G
aWxlQ2hvb3NlckNiTXVsdGlzZWxOb01pbWUpLCBOVUxMKTsKKyAgICBodG1sRm9ybWF0ID0gZ19z
dHJkdXBfcHJpbnRmKGh0bWxGb3JtYXRCYXNlLCAibXVsdGlwbGUiKTsKKyAgICB3ZWJraXRfd2Vi
X3ZpZXdfbG9hZF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpLCBodG1sRm9ybWF0LCBO
VUxMLCBOVUxMLCBOVUxMKTsKKyAgICBnX2ZyZWUoaHRtbEZvcm1hdCk7CisKKyAgICBnX3RpbWVv
dXRfYWRkKDEwMCwgKEdTb3VyY2VGdW5jKSBjbGlja01vdXNlQnV0dG9uQW5kV2FpdEZvckZpbGVD
aG9vc2VyUmVxdWVzdCwgV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpKTsKKyAgICBnX21haW5fbG9v
cF9ydW4obG9vcCk7CisKKyAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3Qod2ViVmlldywg
aGFuZGxlcik7CisKKyAgICAvLyBQZXJmb3JtIGFub3RoZXIgcmVxdWVzdCB0byBjaGVjayBpZiB0
aGUgbGlzdCBvZiBmaWxlcyBzZWxlY3RlZAorICAgIC8vIGluIHRoZSBwcmV2aW91cyBzdGVwIGFw
cGVhcnMgbm93IGFzIHBhcnQgb2YgdGhlIG5ldyByZXF1ZXN0LgorICAgIGhhbmRsZXIgPSBnX3Np
Z25hbF9jb25uZWN0KHdlYlZpZXcsICJydW4tZmlsZS1jaG9vc2VyIiwgR19DQUxMQkFDSyhydW5G
aWxlQ2hvb3NlckNiU2VsZWN0aW9uUmV0YWluZWQpLCBOVUxMKTsKKyAgICBnX3RpbWVvdXRfYWRk
KDEwMCwgKEdTb3VyY2VGdW5jKSBjbGlja01vdXNlQnV0dG9uQW5kV2FpdEZvckZpbGVDaG9vc2Vy
UmVxdWVzdCwgV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpKTsKKyAgICBnX21haW5fbG9vcF9ydW4o
bG9vcCk7CisKKyAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3Qod2ViVmlldywgaGFuZGxl
cik7CisKKyAgICAvLyBNdWx0aXBsZSBzZWxlY3Rpb25zIG5vdCBhbGxvd2VkLCBvbmx5IGFjY2Vw
dCBpbWFnZXMsIGF1ZGlvIGFuZCB2aWRlbyBmaWxlcy4KKyAgICBoYW5kbGVyID0gZ19zaWduYWxf
Y29ubmVjdCh3ZWJWaWV3LCAicnVuLWZpbGUtY2hvb3NlciIsIEdfQ0FMTEJBQ0socnVuRmlsZUNo
b29zZXJDYk5vTXVsdGlzZWxBY2NlcHRUeXBlcyksIE5VTEwpOworICAgIGh0bWxGb3JtYXQgPSBn
X3N0cmR1cF9wcmludGYoaHRtbEZvcm1hdEJhc2UsICJhY2NlcHQ9J2F1ZGlvLyosdmlkZW8vKixp
bWFnZS8qJyIpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJ
RVcod2ViVmlldyksIGh0bWxGb3JtYXQsIE5VTEwsIE5VTEwsIE5VTEwpOworICAgIGdfZnJlZSho
dG1sRm9ybWF0KTsKKworICAgIGdfdGltZW91dF9hZGQoMTAwLCAoR1NvdXJjZUZ1bmMpIGNsaWNr
TW91c2VCdXR0b25BbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0LCBXRUJLSVRfV0VCX1ZJRVco
d2ViVmlldykpOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIGdfc2lnbmFsX2hh
bmRsZXJfZGlzY29ubmVjdCh3ZWJWaWV3LCBoYW5kbGVyKTsKKyAgICBndGtfd2lkZ2V0X2Rlc3Ry
b3kod2luZG93KTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3ZpZXdfc291cmNl
X21vZGUoKQoreworICAgIEd0a1dpZGdldCogd2ViX3ZpZXc7CisKKyAgICB3ZWJfdmlldyA9IHdl
YmtpdF93ZWJfdmlld19uZXcoKTsKKworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhX
RUJLSVRfV0VCX1ZJRVcod2ViX3ZpZXcpLCAiPGh0bWw+PGJvZHk+PC9ib2R5PjwvaHRtbD4iLCBO
VUxMLCBOVUxMLCBOVUxMKTsKKworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfZ2V0X3Zp
ZXdfc291cmNlX21vZGUoV0VCS0lUX1dFQl9WSUVXKHdlYl92aWV3KSkpOworCisgICAgd2Via2l0
X3dlYl92aWV3X3NldF92aWV3X3NvdXJjZV9tb2RlKFdFQktJVF9XRUJfVklFVyh3ZWJfdmlldyks
IFRSVUUpOworCisgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dldF92aWV3X3NvdXJjZV9t
b2RlKFdFQktJVF9XRUJfVklFVyh3ZWJfdmlldykpKTsKKworICAgIHdlYmtpdF93ZWJfdmlld19z
ZXRfdmlld19zb3VyY2VfbW9kZShXRUJLSVRfV0VCX1ZJRVcod2ViX3ZpZXcpLCBGQUxTRSk7CisK
KyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2dldF92aWV3X3NvdXJjZV9tb2RlKFdFQktJ
VF9XRUJfVklFVyh3ZWJfdmlldykpKTsKKworICAgIGd0a193aWRnZXRfZGVzdHJveSh3ZWJfdmll
dyk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBTb3VwU2Vy
dmVyKiBzZXJ2ZXI7CisgICAgU291cFVSSSogc291cF91cmk7CisKKyAgICBndGtfdGVzdF9pbml0
KCZhcmdjLCAmYXJndiwgTlVMTCk7CisKKyAgICAvKiBIb3BlZnVsbHkgbWFrZSB0ZXN0IGluZGVw
ZW5kZW50IG9mIHRoZSBwYXRoIGl0J3MgY2FsbGVkIGZyb20uICovCisgICAgdGVzdHV0aWxzX3Jl
bGF0aXZlX2NoZGlyKCJUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9yZXNvdXJj
ZXMvdGVzdC5odG1sIiwgYXJndlswXSk7CisKKyAgICBzZXJ2ZXIgPSBzb3VwX3NlcnZlcl9uZXco
U09VUF9TRVJWRVJfUE9SVCwgMCwgTlVMTCk7CisgICAgc291cF9zZXJ2ZXJfcnVuX2FzeW5jKHNl
cnZlcik7CisKKyAgICBzb3VwX3NlcnZlcl9hZGRfaGFuZGxlcihzZXJ2ZXIsIE5VTEwsIHNlcnZl
cl9jYWxsYmFjaywgTlVMTCwgTlVMTCk7CisKKyAgICBzb3VwX3VyaSA9IHNvdXBfdXJpX25ldygi
aHR0cDovLzEyNy4wLjAuMS8iKTsKKyAgICBzb3VwX3VyaV9zZXRfcG9ydChzb3VwX3VyaSwgc291
cF9zZXJ2ZXJfZ2V0X3BvcnQoc2VydmVyKSk7CisKKyAgICBiYXNlX3VyaSA9IHNvdXBfdXJpX3Rv
X3N0cmluZyhzb3VwX3VyaSwgRkFMU0UpOworICAgIHNvdXBfdXJpX2ZyZWUoc291cF91cmkpOwor
CisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBn
X3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vidmlldy9pY29uLXVyaSIsIHRlc3Rfd2Via2l0X3dl
Yl92aWV3X2ljb25fdXJpKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vidmlldy9h
ZGp1c3RtZW50cyIsIHRlc3Rfd2Via2l0X3dlYl92aWV3X2FkanVzdG1lbnRzKTsKKyAgICBnX3Rl
c3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vidmlldy9kZXN0cm95IiwgdGVzdF93ZWJraXRfd2ViX3Zp
ZXdfZGVzdHJveSk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnZpZXcvZ3JhYl9m
b2N1cyIsIHRlc3Rfd2Via2l0X3dlYl92aWV3X2dyYWJfZm9jdXMpOworICAgIGdfdGVzdF9hZGRf
ZnVuYygiL3dlYmtpdC93ZWJ2aWV3L3dpbmRvdy1mZWF0dXJlcyIsIHRlc3Rfd2Via2l0X3dlYl92
aWV3X3dpbmRvd19mZWF0dXJlcyk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnZp
ZXcvd2Vidmlldy1pbi1vZmZzY3JlZW4td2luZG93LWRvZXMtbm90LWNyYXNoIiwgdGVzdF93ZWJr
aXRfd2ViX3ZpZXdfaW5fb2Zmc2NyZWVuX3dpbmRvd19kb2VzX25vdF9jcmFzaCk7CisgICAgZ190
ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnZpZXcvd2Vidmlldy1kb2VzLW5vdC1zdGVhbC1mb2N1
cyIsIHRlc3Rfd2Via2l0X3dlYl92aWV3X2RvZXNfbm90X3N0ZWFsX2ZvY3VzKTsKKyAgICBnX3Rl
c3RfYWRkX2RhdGFfZnVuYygiL3dlYmtpdC93ZWJ2aWV3L2Z1bGxzY3JlZW4iLCBHSU5UX1RPX1BP
SU5URVIoRkFMU0UpLCB0ZXN0X3dlYmtpdF93ZWJfdmlld19mdWxsc2NyZWVuKTsKKyAgICBnX3Rl
c3RfYWRkX2RhdGFfZnVuYygiL3dlYmtpdC93ZWJ2aWV3L2Z1bGxzY3JlZW4tYmxvY2tlZCIsIEdJ
TlRfVE9fUE9JTlRFUihUUlVFKSwgdGVzdF93ZWJraXRfd2ViX3ZpZXdfZnVsbHNjcmVlbik7Cisg
ICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnZpZXcvZmlsZS1jaG9vc2VyIiwgdGVzdF93
ZWJraXRfd2ViX3ZpZXdfZmlsZV9jaG9vc2VyKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJr
aXQvd2Vidmlldy9zb3VyY2UtbW9kZSIsIHRlc3Rfd2Via2l0X3dlYl92aWV3X3NvdXJjZV9tb2Rl
KTsKKworICAgIHJldHVybiBnX3Rlc3RfcnVuICgpOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdpbmRvdy5jIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdpbmRvdy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjVlZGE0N2IKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2luZG93LmMKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgQ29sbGFib3JhIEx0ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+CisKK3N0YXRp
YyB2b2lkIG5vdGlmeV9sb2FkX3N0YXR1c19jYihXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgR1Bh
cmFtU3BlYyogcHNwZWMsIGdwb2ludGVyIGRhdGEpCit7CisgICAgaWYgKHdlYmtpdF93ZWJfdmll
d19nZXRfbG9hZF9zdGF0dXMod2ViX3ZpZXcpID09IFdFQktJVF9MT0FEX0ZJTklTSEVEKSB7Cisg
ICAgICAgIEdNYWluTG9vcCogbG9vcCA9IChHTWFpbkxvb3AqKWRhdGE7CisKKyAgICAgICAgZ19t
YWluX2xvb3BfcXVpdChsb29wKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0
X3dpbmRvd19zY3JvbGxiYXJfcG9saWN5KHZvaWQpCit7CisgICAgR01haW5Mb29wKiBsb29wOwor
ICAgIEd0a1dpZGdldCogc2Nyb2xsZWRXaW5kb3c7CisgICAgR3RrV2lkZ2V0KiB3ZWJWaWV3Owor
ICAgIFdlYktpdFdlYkZyYW1lKiBtYWluRnJhbWU7CisgICAgR3RrUG9saWN5VHlwZSBob3Jpem9u
dGFsUG9saWN5OworICAgIEd0a1BvbGljeVR5cGUgdmVydGljYWxQb2xpY3k7CisKKyAgICBsb29w
ID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworCisgICAgc2Nyb2xsZWRXaW5kb3cgPSBn
dGtfc2Nyb2xsZWRfd2luZG93X25ldyhOVUxMLCBOVUxMKTsKKyAgICBndGtfc2Nyb2xsZWRfd2lu
ZG93X3NldF9wb2xpY3koR1RLX1NDUk9MTEVEX1dJTkRPVyhzY3JvbGxlZFdpbmRvdyksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19QT0xJQ1lfQVVUT01BVElDLCBHVEtf
UE9MSUNZX0FVVE9NQVRJQyk7CisKKyAgICB3ZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygp
OworICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOworCisgICAgZ19zaWduYWxfY29ubmVj
dCh3ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsCisgICAgICAgICAgICAgICAgICAgICBH
X0NBTExCQUNLKG5vdGlmeV9sb2FkX3N0YXR1c19jYiksIGxvb3ApOworCisgICAgZ3RrX2NvbnRh
aW5lcl9hZGQoR1RLX0NPTlRBSU5FUihzY3JvbGxlZFdpbmRvdyksIHdlYlZpZXcpOworCisgICAg
bWFpbkZyYW1lID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKFdFQktJVF9XRUJfVklF
Vyh3ZWJWaWV3KSk7CisKKyAgICAvKiBUZXN0IHdlIGNvcnJlY3RseSBhcHBseSBwb2xpY3kgZm9y
IG5vdCBoYXZpbmcgc2Nyb2xsYmFyczsgVGhpcworICAgICAqIGNhc2UgaXMgc3BlY2lhbCwgYmVj
YXVzZSB3ZSB0dXJuIHRoZSBwb2xpY3kgZnJvbSBORVZFUiB0bworICAgICAqIEFVVE9NQVRJQywg
c2luY2Ugd2UgY2Fubm90IGVhc2lseSByZXByZXNlbnQgdGhlIHNhbWUgdGhpbmcKKyAgICAgKiB1
c2luZyBHdGtTY3JvbGxlZFdpbmRvdyAqLworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX2h0bWxf
c3RyaW5nKFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3KSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiPGh0bWw+PGJvZHk+V2ViS2l0ITwvYm9keT48c2NyaXB0PmRvY3VtZW50
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0uc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVu
Jzs8L3NjcmlwdD48L2h0bWw+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiZmlsZTovLyIpOworCisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgZ3RrX3Nj
cm9sbGVkX3dpbmRvd19nZXRfcG9saWN5KEdUS19TQ1JPTExFRF9XSU5ET1coc2Nyb2xsZWRXaW5k
b3cpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaG9yaXpvbnRhbFBvbGlj
eSwgJnZlcnRpY2FsUG9saWN5KTsKKworICAgIGdfYXNzZXJ0KGhvcml6b250YWxQb2xpY3kgPT0g
R1RLX1BPTElDWV9BVVRPTUFUSUMpOworICAgIGdfYXNzZXJ0KHZlcnRpY2FsUG9saWN5ID09IEdU
S19QT0xJQ1lfQVVUT01BVElDKTsKKworICAgIGdfYXNzZXJ0KEdUS19QT0xJQ1lfTkVWRVIgPT0g
d2Via2l0X3dlYl9mcmFtZV9nZXRfaG9yaXpvbnRhbF9zY3JvbGxiYXJfcG9saWN5KG1haW5GcmFt
ZSkpOworICAgIGdfYXNzZXJ0KEdUS19QT0xJQ1lfTkVWRVIgPT0gd2Via2l0X3dlYl9mcmFtZV9n
ZXRfdmVydGljYWxfc2Nyb2xsYmFyX3BvbGljeShtYWluRnJhbWUpKTsKKworICAgIC8qIFRlc3Qg
d2UgY29ycmVjdGx5IGFwcGx5IHBvbGljeSBmb3IgYWx3YXlzIGhhdmluZyBzY3JvbGxiYXJzICov
CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfaHRtbF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVXKHdl
YlZpZXcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8aHRtbD48Ym9k
eT5XZWJLaXQhPC9ib2R5PjxzY3JpcHQ+ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2Jv
ZHknKVswXS5zdHlsZS5vdmVyZmxvdyA9ICdzY3JvbGwnOzwvc2NyaXB0PjwvaHRtbD4iLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlOi8vIik7CisKKyAgICBnX21h
aW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICBndGtfc2Nyb2xsZWRfd2luZG93X2dldF9wb2xpY3ko
R1RLX1NDUk9MTEVEX1dJTkRPVyhzY3JvbGxlZFdpbmRvdyksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZob3Jpem9udGFsUG9saWN5LCAmdmVydGljYWxQb2xpY3kpOworCisg
ICAgZ19hc3NlcnQoaG9yaXpvbnRhbFBvbGljeSA9PSBHVEtfUE9MSUNZX0FMV0FZUyk7CisgICAg
Z19hc3NlcnQodmVydGljYWxQb2xpY3kgPT0gR1RLX1BPTElDWV9BTFdBWVMpOworCisgICAgZ19h
c3NlcnQoaG9yaXpvbnRhbFBvbGljeSA9PSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9ob3Jpem9udGFs
X3Njcm9sbGJhcl9wb2xpY3kobWFpbkZyYW1lKSk7CisgICAgZ19hc3NlcnQodmVydGljYWxQb2xp
Y3kgPT0gd2Via2l0X3dlYl9mcmFtZV9nZXRfdmVydGljYWxfc2Nyb2xsYmFyX3BvbGljeShtYWlu
RnJhbWUpKTsKKworICAgIC8qIFRlc3Qgd2UgY29ycmVjdGx5IGFwcGx5IHBvbGljeSBmb3IgaGF2
aW5nIHNjcm9sbGJhcnMgd2hlbiBuZWVkZWQgKi8KKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9o
dG1sX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldyksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIjxodG1sPjxib2R5PldlYktpdCE8L2JvZHk+PHNjcmlwdD5kb2N1
bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdLnN0eWxlLm92ZXJmbG93ID0gJ2F1
dG8nOzwvc2NyaXB0PjwvaHRtbD4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJmaWxlOi8vIik7CisKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICBndGtf
c2Nyb2xsZWRfd2luZG93X2dldF9wb2xpY3koR1RLX1NDUk9MTEVEX1dJTkRPVyhzY3JvbGxlZFdp
bmRvdyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZob3Jpem9udGFsUG9s
aWN5LCAmdmVydGljYWxQb2xpY3kpOworCisgICAgZ19hc3NlcnQoaG9yaXpvbnRhbFBvbGljeSA9
PSBHVEtfUE9MSUNZX0FVVE9NQVRJQyk7CisgICAgZ19hc3NlcnQodmVydGljYWxQb2xpY3kgPT0g
R1RLX1BPTElDWV9BVVRPTUFUSUMpOworCisgICAgZ19hc3NlcnQoaG9yaXpvbnRhbFBvbGljeSA9
PSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9ob3Jpem9udGFsX3Njcm9sbGJhcl9wb2xpY3kobWFpbkZy
YW1lKSk7CisgICAgZ19hc3NlcnQodmVydGljYWxQb2xpY3kgPT0gd2Via2l0X3dlYl9mcmFtZV9n
ZXRfdmVydGljYWxfc2Nyb2xsYmFyX3BvbGljeShtYWluRnJhbWUpKTsKKworICAgIGdfb2JqZWN0
X3VucmVmKHdlYlZpZXcpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7
CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAgZ190ZXN0X2J1
Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMo
Ii93ZWJraXQvd2luZG93L3Njcm9sbGJhcl9wb2xpY3kiLCB0ZXN0X3dlYmtpdF93aW5kb3dfc2Ny
b2xsYmFyX3BvbGljeSk7CisgICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7Cit9CmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL0xvYWRUcmFja2luZ1Rlc3QuY3Bw
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9Mb2FkVHJhY2tpbmdUZXN0LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjM0MjA0Ci0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9Mb2FkVHJhY2tpbmdU
ZXN0LmNwcApAQCAtMCwwICsxLDIwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2Fs
aWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTG9hZFRyYWNraW5nVGVzdC5o
IgorCisjaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+CisKK3N0YXRpYyB2b2lkIGxvYWRDaGFu
Z2VkQ2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0TG9hZEV2ZW50IGxvYWRF
dmVudCwgTG9hZFRyYWNraW5nVGVzdCogdGVzdCkKK3sKKyAgICBzd2l0Y2ggKGxvYWRFdmVudCkg
eworICAgIGNhc2UgV0VCS0lUX0xPQURfU1RBUlRFRDoKKyAgICAgICAgZ19hc3NlcnQod2Via2l0
X3dlYl92aWV3X2lzX2xvYWRpbmcod2ViVmlldykpOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIo
dGVzdC0+bV9hY3RpdmVVUkkuZGF0YSgpLCA9PSwgd2Via2l0X3dlYl92aWV3X2dldF91cmkod2Vi
VmlldykpOworICAgICAgICB0ZXN0LT5wcm92aXNpb25hbExvYWRTdGFydGVkKCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0xPQURfUkVESVJFQ1RFRDoKKyAgICAgICAgZ19hc3Nl
cnQod2Via2l0X3dlYl92aWV3X2lzX2xvYWRpbmcod2ViVmlldykpOworICAgICAgICB0ZXN0LT5t
X2FjdGl2ZVVSSSA9IHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKHdlYlZpZXcpOworICAgICAgICBp
ZiAoIXRlc3QtPm1fcmVkaXJlY3RVUkkuaXNOdWxsKCkpCisgICAgICAgICAgICBnX2Fzc2VydF9j
bXBzdHIodGVzdC0+bV9yZWRpcmVjdFVSSS5kYXRhKCksID09LCB0ZXN0LT5tX2FjdGl2ZVVSSS5k
YXRhKCkpOworICAgICAgICB0ZXN0LT5wcm92aXNpb25hbExvYWRSZWNlaXZlZFNlcnZlclJlZGly
ZWN0KCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0xPQURfQ09NTUlUVEVEOiB7
CisgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19pc19sb2FkaW5nKHdlYlZpZXcpKTsK
KyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPm1fYWN0aXZlVVJJLmRhdGEoKSwgPT0sIHdl
YmtpdF93ZWJfdmlld19nZXRfdXJpKHdlYlZpZXcpKTsKKworICAgICAgICAvLyBDaGVjayB0aGF0
IG9uIGNvbW1pdHRlZCB3ZSBhbHdheXMgaGF2ZSBhIG1haW4gcmVzb3VyY2Ugd2l0aCBhIHJlc3Bv
bnNlLgorICAgICAgICBXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UgPSB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X21haW5fcmVzb3VyY2Uod2ViVmlldyk7CisgICAgICAgIGdfYXNzZXJ0KHJlc291cmNl
KTsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfcmVzcG9uc2UocmVz
b3VyY2UpKTsKKworICAgICAgICB0ZXN0LT5sb2FkQ29tbWl0dGVkKCk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICBjYXNlIFdFQktJVF9MT0FEX0ZJTklTSEVEOgorICAgICAgICBnX2Fzc2Vy
dCghd2Via2l0X3dlYl92aWV3X2lzX2xvYWRpbmcod2ViVmlldykpOworICAgICAgICBpZiAoIXRl
c3QtPm1fbG9hZEZhaWxlZCkKKyAgICAgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXN0LT5tX2Fj
dGl2ZVVSSS5kYXRhKCksID09LCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSh3ZWJWaWV3KSk7Cisg
ICAgICAgIHRlc3QtPmxvYWRGaW5pc2hlZCgpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgIH0KK30KKworc3RhdGljIHZv
aWQgbG9hZEZhaWxlZENhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdExvYWRF
dmVudCBsb2FkRXZlbnQsIGNvbnN0IGNoYXIqIGZhaWxpbmdVUkksIEdFcnJvciogZXJyb3IsIExv
YWRUcmFja2luZ1Rlc3QqIHRlc3QpCit7CisgICAgdGVzdC0+bV9sb2FkRmFpbGVkID0gdHJ1ZTsK
KyAgICB0ZXN0LT5tX2Vycm9yLnNldChnX2Vycm9yX2NvcHkoZXJyb3IpKTsKKworICAgIHN3aXRj
aCAobG9hZEV2ZW50KSB7CisgICAgY2FzZSBXRUJLSVRfTE9BRF9TVEFSVEVEOgorICAgICAgICBn
X2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2lzX2xvYWRpbmcod2ViVmlldykpOworICAgICAgICBn
X2Fzc2VydF9jbXBzdHIodGVzdC0+bV9hY3RpdmVVUkkuZGF0YSgpLCA9PSwgd2Via2l0X3dlYl92
aWV3X2dldF91cmkod2ViVmlldykpOworICAgICAgICBnX2Fzc2VydChlcnJvcik7CisgICAgICAg
IHRlc3QtPnByb3Zpc2lvbmFsTG9hZEZhaWxlZChmYWlsaW5nVVJJLCBlcnJvcik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0xPQURfQ09NTUlUVEVEOgorICAgICAgICBnX2Fzc2Vy
dCghd2Via2l0X3dlYl92aWV3X2lzX2xvYWRpbmcod2ViVmlldykpOworICAgICAgICBnX2Fzc2Vy
dF9jbXBzdHIodGVzdC0+bV9hY3RpdmVVUkkuZGF0YSgpLCA9PSwgd2Via2l0X3dlYl92aWV3X2dl
dF91cmkod2ViVmlldykpOworICAgICAgICBnX2Fzc2VydChlcnJvcik7CisgICAgICAgIHRlc3Qt
PmxvYWRGYWlsZWQoZmFpbGluZ1VSSSwgZXJyb3IpOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgIH0KK30KKworc3RhdGlj
IHZvaWQgZXN0aW1hdGVkUHJvZ3Jlc3NDaGFuZ2VkQ2FsbGJhY2soR09iamVjdCosIEdQYXJhbVNw
ZWMqLCBMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0KQoreworICAgIHRlc3QtPmVzdGltYXRlZFByb2dy
ZXNzQ2hhbmdlZCgpOworfQorCitMb2FkVHJhY2tpbmdUZXN0OjpMb2FkVHJhY2tpbmdUZXN0KCkK
KyAgICA6IG1fcnVuTG9hZFVudGlsQ29tcGxldGlvbihmYWxzZSkKKyAgICAsIG1fbG9hZEZhaWxl
ZChmYWxzZSkKK3sKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImxvYWQtY2hhbmdl
ZCIsIEdfQ0FMTEJBQ0sobG9hZENoYW5nZWRDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFs
X2Nvbm5lY3QobV93ZWJWaWV3LCAibG9hZC1mYWlsZWQiLCBHX0NBTExCQUNLKGxvYWRGYWlsZWRD
YWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAibm90aWZ5
Ojplc3RpbWF0ZWQtbG9hZC1wcm9ncmVzcyIsIEdfQ0FMTEJBQ0soZXN0aW1hdGVkUHJvZ3Jlc3ND
aGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKKworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdf
Z2V0X3VyaShtX3dlYlZpZXcpKTsKK30KKworTG9hZFRyYWNraW5nVGVzdDo6fkxvYWRUcmFja2lu
Z1Rlc3QoKQoreworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3dl
YlZpZXcsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOworfQorCit2b2lk
IExvYWRUcmFja2luZ1Rlc3Q6OndhaXRVbnRpbExvYWRGaW5pc2hlZCgpCit7CisgICAgbV9lc3Rp
bWF0ZWRQcm9ncmVzcyA9IDA7CisgICAgbV9ydW5Mb2FkVW50aWxDb21wbGV0aW9uID0gdHJ1ZTsK
KyAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Cit9CisKK3ZvaWQgTG9hZFRyYWNraW5n
VGVzdDo6cHJvdmlzaW9uYWxMb2FkU3RhcnRlZCgpCit7CisgICAgbV9sb2FkRXZlbnRzLmFwcGVu
ZChQcm92aXNpb25hbExvYWRTdGFydGVkKTsKK30KKwordm9pZCBMb2FkVHJhY2tpbmdUZXN0Ojpw
cm92aXNpb25hbExvYWRSZWNlaXZlZFNlcnZlclJlZGlyZWN0KCkKK3sKKyAgICBtX2xvYWRFdmVu
dHMuYXBwZW5kKFByb3Zpc2lvbmFsTG9hZFJlY2VpdmVkU2VydmVyUmVkaXJlY3QpOworfQorCit2
b2lkIExvYWRUcmFja2luZ1Rlc3Q6OnByb3Zpc2lvbmFsTG9hZEZhaWxlZChjb25zdCBnY2hhciog
ZmFpbGluZ1VSSSwgR0Vycm9yKiBlcnJvcikKK3sKKyAgICBtX2xvYWRFdmVudHMuYXBwZW5kKFBy
b3Zpc2lvbmFsTG9hZEZhaWxlZCk7Cit9CisKK3ZvaWQgTG9hZFRyYWNraW5nVGVzdDo6bG9hZENv
bW1pdHRlZCgpCit7CisgICAgbV9sb2FkRXZlbnRzLmFwcGVuZChMb2FkQ29tbWl0dGVkKTsKK30K
Kwordm9pZCBMb2FkVHJhY2tpbmdUZXN0Ojpsb2FkRmluaXNoZWQoKQoreworICAgIG1fbG9hZEV2
ZW50cy5hcHBlbmQoTG9hZEZpbmlzaGVkKTsKKyAgICBpZiAobV9ydW5Mb2FkVW50aWxDb21wbGV0
aW9uKQorICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3ApOworfQorCit2b2lkIExv
YWRUcmFja2luZ1Rlc3Q6OmxvYWRGYWlsZWQoY29uc3QgZ2NoYXIqIGZhaWxpbmdVUkksIEdFcnJv
ciogZXJyb3IpCit7CisgICAgbV9sb2FkRXZlbnRzLmFwcGVuZChMb2FkRmFpbGVkKTsKK30KKwor
dm9pZCBMb2FkVHJhY2tpbmdUZXN0Ojplc3RpbWF0ZWRQcm9ncmVzc0NoYW5nZWQoKQoreworICAg
IGRvdWJsZSBwcm9ncmVzcyA9IHdlYmtpdF93ZWJfdmlld19nZXRfZXN0aW1hdGVkX2xvYWRfcHJv
Z3Jlc3MobV93ZWJWaWV3KTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdChtX2VzdGltYXRlZFByb2dy
ZXNzLCA8LCBwcm9ncmVzcyk7CisgICAgbV9lc3RpbWF0ZWRQcm9ncmVzcyA9IHByb2dyZXNzOwor
fQorCit2b2lkIExvYWRUcmFja2luZ1Rlc3Q6OmxvYWRVUkkoY29uc3QgY2hhciogdXJpKQorewor
ICAgIG1fbG9hZEV2ZW50cy5jbGVhcigpOworICAgIG1fZXN0aW1hdGVkUHJvZ3Jlc3MgPSAwOwor
ICAgIG1fZXJyb3IuY2xlYXIoKTsKKyAgICBXZWJWaWV3VGVzdDo6bG9hZFVSSSh1cmkpOworfQor
Cit2b2lkIExvYWRUcmFja2luZ1Rlc3Q6OmxvYWRIdG1sKGNvbnN0IGNoYXIqIGh0bWwsIGNvbnN0
IGNoYXIqIGJhc2VVUkkpCit7CisgICAgbV9sb2FkRXZlbnRzLmNsZWFyKCk7CisgICAgbV9lc3Rp
bWF0ZWRQcm9ncmVzcyA9IDA7CisgICAgbV9lcnJvci5jbGVhcigpOworICAgIFdlYlZpZXdUZXN0
Ojpsb2FkSHRtbChodG1sLCBiYXNlVVJJKTsKK30KKwordm9pZCBMb2FkVHJhY2tpbmdUZXN0Ojps
b2FkUGxhaW5UZXh0KGNvbnN0IGNoYXIqIHBsYWluVGV4dCkKK3sKKyAgICBtX2xvYWRFdmVudHMu
Y2xlYXIoKTsKKyAgICBtX2VzdGltYXRlZFByb2dyZXNzID0gMDsKKyAgICBtX2Vycm9yLmNsZWFy
KCk7CisgICAgV2ViVmlld1Rlc3Q6OmxvYWRQbGFpblRleHQocGxhaW5UZXh0KTsKK30KKwordm9p
ZCBMb2FkVHJhY2tpbmdUZXN0Ojpsb2FkUmVxdWVzdChXZWJLaXRVUklSZXF1ZXN0KiByZXF1ZXN0
KQoreworICAgIG1fbG9hZEV2ZW50cy5jbGVhcigpOworICAgIG1fZXN0aW1hdGVkUHJvZ3Jlc3Mg
PSAwOworICAgIG1fZXJyb3IuY2xlYXIoKTsKKyAgICBXZWJWaWV3VGVzdDo6bG9hZFJlcXVlc3Qo
cmVxdWVzdCk7Cit9CisKK3ZvaWQgTG9hZFRyYWNraW5nVGVzdDo6cmVsb2FkKCkKK3sKKyAgICBt
X2xvYWRFdmVudHMuY2xlYXIoKTsKKyAgICBtX2VzdGltYXRlZFByb2dyZXNzID0gMDsKKyAgICBt
X2Vycm9yLmNsZWFyKCk7CisgICAgd2Via2l0X3dlYl92aWV3X3JlbG9hZChtX3dlYlZpZXcpOwor
fQorCit2b2lkIExvYWRUcmFja2luZ1Rlc3Q6OmdvQmFjaygpCit7CisgICAgbV9sb2FkRXZlbnRz
LmNsZWFyKCk7CisgICAgbV9lc3RpbWF0ZWRQcm9ncmVzcyA9IDA7CisgICAgbV9lcnJvci5jbGVh
cigpOworICAgIFdlYlZpZXdUZXN0Ojpnb0JhY2soKTsKK30KKwordm9pZCBMb2FkVHJhY2tpbmdU
ZXN0Ojpnb0ZvcndhcmQoKQoreworICAgIG1fbG9hZEV2ZW50cy5jbGVhcigpOworICAgIG1fZXN0
aW1hdGVkUHJvZ3Jlc3MgPSAwOworICAgIG1fZXJyb3IuY2xlYXIoKTsKKyAgICBXZWJWaWV3VGVz
dDo6Z29Gb3J3YXJkKCk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9X
ZWJLaXQyR3RrL0xvYWRUcmFja2luZ1Rlc3QuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1dl
YktpdDJHdGsvTG9hZFRyYWNraW5nVGVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmEzY2Y3ODQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2d0
ay9XZWJLaXQyR3RrL0xvYWRUcmFja2luZ1Rlc3QuaApAQCAtMCwwICsxLDY4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgTG9hZFRyYWNraW5nVGVzdF9o
CisjZGVmaW5lIExvYWRUcmFja2luZ1Rlc3RfaAorCisjaW5jbHVkZSAiVGVzdE1haW4uaCIKKyNp
bmNsdWRlICJXZWJWaWV3VGVzdC5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworY2xhc3Mg
TG9hZFRyYWNraW5nVGVzdCA6IHB1YmxpYyBXZWJWaWV3VGVzdCB7CitwdWJsaWM6CisgICAgTUFL
RV9HTElCX1RFU1RfRklYVFVSRShMb2FkVHJhY2tpbmdUZXN0KTsKKyAgICBMb2FkVHJhY2tpbmdU
ZXN0KCk7CisgICAgdmlydHVhbCB+TG9hZFRyYWNraW5nVGVzdCgpOworICAgIHZvaWQgd2FpdFVu
dGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcHJvdmlzaW9uYWxMb2FkU3Rh
cnRlZCgpOworICAgIHZpcnR1YWwgdm9pZCBwcm92aXNpb25hbExvYWRSZWNlaXZlZFNlcnZlclJl
ZGlyZWN0KCk7CisgICAgdmlydHVhbCB2b2lkIHByb3Zpc2lvbmFsTG9hZEZhaWxlZChjb25zdCBn
Y2hhciogZmFpbGluZ1VSSSwgR0Vycm9yKik7CisgICAgdmlydHVhbCB2b2lkIGxvYWRDb21taXR0
ZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZEZpbmlzaGVkKCk7CisgICAgdmlydHVhbCB2b2lk
IGxvYWRGYWlsZWQoY29uc3QgY2hhciogZmFpbGluZ1VSSSwgR0Vycm9yKik7CisgICAgdmlydHVh
bCB2b2lkIGVzdGltYXRlZFByb2dyZXNzQ2hhbmdlZCgpOworCisgICAgdm9pZCBsb2FkVVJJKGNv
bnN0IGNoYXIqIHVyaSk7CisgICAgdm9pZCBsb2FkSHRtbChjb25zdCBjaGFyKiBodG1sLCBjb25z
dCBjaGFyKiBiYXNlVVJJKTsKKyAgICB2b2lkIGxvYWRQbGFpblRleHQoY29uc3QgY2hhciogcGxh
aW5UZXh0KTsKKyAgICB2b2lkIGxvYWRSZXF1ZXN0KFdlYktpdFVSSVJlcXVlc3QqKTsKKyAgICB2
b2lkIHJlbG9hZCgpOworICAgIHZvaWQgZ29CYWNrKCk7CisgICAgdm9pZCBnb0ZvcndhcmQoKTsK
KworICAgIHZvaWQgc2V0UmVkaXJlY3RVUkkoY29uc3QgY2hhciogdXJpKSB7IG1fcmVkaXJlY3RV
UkkgPSB1cmk7IH0KKworICAgIGVudW0gTG9hZEV2ZW50cyB7CisgICAgICAgIFByb3Zpc2lvbmFs
TG9hZFN0YXJ0ZWQsCisgICAgICAgIFByb3Zpc2lvbmFsTG9hZFJlY2VpdmVkU2VydmVyUmVkaXJl
Y3QsCisgICAgICAgIFByb3Zpc2lvbmFsTG9hZEZhaWxlZCwKKyAgICAgICAgTG9hZENvbW1pdHRl
ZCwKKyAgICAgICAgTG9hZEZpbmlzaGVkLAorICAgICAgICBMb2FkRmFpbGVkCisgICAgfTsKKyAg
ICBib29sIG1fcnVuTG9hZFVudGlsQ29tcGxldGlvbjsKKyAgICBib29sIG1fbG9hZEZhaWxlZDsK
KyAgICBHT3duUHRyPEdFcnJvcj4gbV9lcnJvcjsKKyAgICBWZWN0b3I8TG9hZEV2ZW50cz4gbV9s
b2FkRXZlbnRzOworICAgIGZsb2F0IG1fZXN0aW1hdGVkUHJvZ3Jlc3M7CisgICAgQ1N0cmluZyBt
X3JlZGlyZWN0VVJJOworfTsKKworI2VuZGlmIC8vIExvYWRUcmFja2luZ1Rlc3RfaApkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9UZXN0TWFpbi5jcHAgYi9U
b29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1Rlc3RNYWluLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjFmZmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9UZXN0TWFpbi5jcHAKQEAgLTAsMCArMSw3
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVGVzdE1haW4uaCIKKworI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+
CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgorI2lu
Y2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKwordm9pZCBiZWZvcmVBbGwoKTsKK3ZvaWQg
YWZ0ZXJBbGwoKTsKKworc3RhdGljIHZvaWQgcmVnaXN0ZXJHUmVzb3VyY2Uodm9pZCkKK3sKKyAg
ICBHT3duUHRyPGNoYXI+IHJlc291cmNlc1BhdGgoZ19idWlsZF9maWxlbmFtZShXRUJLSVRfRVhF
Q19QQVRILCAiVGVzdFdlYktpdEFQSSIsICJXZWJLaXQyR3RrIiwgInJlc291cmNlcyIsICJ3ZWJr
aXQyZ3RrLXRlc3RzLXJlc291cmNlcy5ncmVzb3VyY2UiLCBOVUxMKSk7CisgICAgR1Jlc291cmNl
KiByZXNvdXJjZSA9IGdfcmVzb3VyY2VfbG9hZChyZXNvdXJjZXNQYXRoLmdldCgpLCAwKTsKKyAg
ICBnX2Fzc2VydChyZXNvdXJjZSk7CisKKyAgICBnX3Jlc291cmNlc19yZWdpc3RlcihyZXNvdXJj
ZSk7CisgICAgZ19yZXNvdXJjZV91bnJlZihyZXNvdXJjZSk7Cit9CisKK3N0YXRpYyB2b2lkIHJl
bW92ZU5vbkVtcHR5RGlyZWN0b3J5KGNvbnN0IGNoYXIqIGRpcmVjdG9yeVBhdGgpCit7CisgICAg
R0RpciogZGlyZWN0b3J5ID0gZ19kaXJfb3BlbihkaXJlY3RvcnlQYXRoLCAwLCAwKTsKKyAgICBn
X2Fzc2VydChkaXJlY3RvcnkpOworICAgIGNvbnN0IGNoYXIqIGZpbGVOYW1lOworICAgIHdoaWxl
ICgoZmlsZU5hbWUgPSBnX2Rpcl9yZWFkX25hbWUoZGlyZWN0b3J5KSkpIHsKKyAgICAgICAgR093
blB0cjxjaGFyPiBmaWxlUGF0aChnX2J1aWxkX2ZpbGVuYW1lKGRpcmVjdG9yeVBhdGgsIGZpbGVO
YW1lLCBOVUxMKSk7CisgICAgICAgIGdfdW5saW5rKGZpbGVQYXRoLmdldCgpKTsKKyAgICB9Cisg
ICAgZ19kaXJfY2xvc2UoZGlyZWN0b3J5KTsKKyAgICBnX3JtZGlyKGRpcmVjdG9yeVBhdGgpOwor
fQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgZ191bnNldGVudigi
REJVU19TRVNTSU9OX0JVU19BRERSRVNTIik7CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFy
Z3YsIDApOworICAgIGdfc2V0ZW52KCJXRUJLSVRfRVhFQ19QQVRIIiwgV0VCS0lUX0VYRUNfUEFU
SCwgRkFMU0UpOworICAgIGdfc2V0ZW52KCJXRUJLSVRfSU5KRUNURURfQlVORExFX1BBVEgiLCBX
RUJLSVRfSU5KRUNURURfQlVORExFX1BBVEgsIEZBTFNFKTsKKyAgICBnX3NldGVudigiTENfQUxM
IiwgIkMiLCBUUlVFKTsKKyAgICBnX3NldGVudigiR0lPX1VTRV9WRlMiLCAibG9jYWwiLCBUUlVF
KTsKKyAgICBnX3NldGVudigiR1NFVFRJTkdTX0JBQ0tFTkQiLCAibWVtb3J5IiwgVFJVRSk7Cisg
ICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKKworICAgIHJl
Z2lzdGVyR1Jlc291cmNlKCk7CisKKyAgICBHT3duUHRyPGNoYXI+IGRpc2tDYWNoZVRlbXBEaXJl
Y3RvcnkoZ19kaXJfbWFrZV90bXAoIldlYktpdDJUZXN0c0Rpc2tDYWNoZS1YWFhYWFgiLCAwKSk7
CisgICAgZ19hc3NlcnQoZGlza0NhY2hlVGVtcERpcmVjdG9yeS5nZXQoKSk7CisgICAgd2Via2l0
X3dlYl9jb250ZXh0X3NldF9kaXNrX2NhY2hlX2RpcmVjdG9yeSh3ZWJraXRfd2ViX2NvbnRleHRf
Z2V0X2RlZmF1bHQoKSwgZGlza0NhY2hlVGVtcERpcmVjdG9yeS5nZXQoKSk7CisKKyAgICBiZWZv
cmVBbGwoKTsKKyAgICBpbnQgcmV0dXJuVmFsdWUgPSBnX3Rlc3RfcnVuKCk7CisgICAgYWZ0ZXJB
bGwoKTsKKworICAgIHJlbW92ZU5vbkVtcHR5RGlyZWN0b3J5KGRpc2tDYWNoZVRlbXBEaXJlY3Rv
cnkuZ2V0KCkpOworCisgICAgcmV0dXJuIHJldHVyblZhbHVlOworfQpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9UZXN0TWFpbi5oIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9UZXN0TWFpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjNhM2E0ODQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL2d0ay9XZWJLaXQyR3RrL1Rlc3RNYWluLmgKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBUZXN0TWFpbl9oCisjZGVmaW5l
IFRlc3RNYWluX2gKKworI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8Z2xpYi1vYmplY3Qu
aD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25Q
dHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNkZWZpbmUgTUFLRV9HTElC
X1RFU1RfRklYVFVSRShDbGFzc05hbWUpIFwKKyAgICBzdGF0aWMgdm9pZCBzZXRVcChDbGFzc05h
bWUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkgXAorICAgIHsgXAorICAgICAgICBuZXcg
KGZpeHR1cmUpIENsYXNzTmFtZTsgXAorICAgIH0gXAorICAgIHN0YXRpYyB2b2lkIHRlYXJEb3du
KENsYXNzTmFtZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKSBcCisgICAgeyBcCisgICAg
ICAgIGZpeHR1cmUtPn5DbGFzc05hbWUoKTsgXAorICAgIH0gXAorICAgIHN0YXRpYyB2b2lkIGFk
ZChjb25zdCBjaGFyKiBzdWl0ZU5hbWUsIGNvbnN0IGNoYXIqIHRlc3ROYW1lLCB2b2lkICgqdGVz
dEZ1bmMpKENsYXNzTmFtZSosIGNvbnN0IHZvaWQqKSkgXAorICAgIHsgXAorICAgICAgICBHT3du
UHRyPGdjaGFyPiB0ZXN0UGF0aChnX3N0cmR1cF9wcmludGYoIi93ZWJraXQyLyVzLyVzIiwgc3Vp
dGVOYW1lLCB0ZXN0TmFtZSkpOyBcCisgICAgICAgIGdfdGVzdF9hZGQodGVzdFBhdGguZ2V0KCks
IENsYXNzTmFtZSwgMCwgQ2xhc3NOYW1lOjpzZXRVcCwgdGVzdEZ1bmMsIENsYXNzTmFtZTo6dGVh
ckRvd24pOyBcCisgICAgfQorCisjZGVmaW5lIEFTU0VSVF9DTVBfQ1NUUklORyhzMSwgY21wLCBz
MikgXAorICAgIGRvIHsgQ1N0cmluZyBfX3MxID0gKHMxKTsgQ1N0cmluZyBfX3MyID0gKHMyKTsg
XAorICAgICAgICBpZiAoZ19zdHJjbXAwKF9fczEuZGF0YSgpLCBfX3MyLmRhdGEoKSkgY21wIDAp
IDsgZWxzZSBcCisgICAgICAgICAgICBnX2Fzc2VydGlvbl9tZXNzYWdlX2NtcHN0cihHX0xPR19E
T01BSU4sIF9fRklMRV9fLCBfX0xJTkVfXywgR19TVFJGVU5DLCBcCisgICAgICAgICAgICAgICAg
I3MxICIgIiAjY21wICIgIiAjczIsIF9fczEuZGF0YSgpLCAjY21wLCBfX3MyLmRhdGEoKSk7IH0g
d2hpbGUgKDApCisKK2NsYXNzIFRlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJ
WFRVUkUoVGVzdCk7CisKKyAgICB+VGVzdCgpCisgICAgeworICAgICAgICBpZiAobV93YXRjaGVk
T2JqZWN0cy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgZ19wcmlu
dCgiTGVha2VkIG9iamVjdHM6Iik7CisgICAgICAgIEhhc2hTZXQ8R09iamVjdCo+Ojpjb25zdF9p
dGVyYXRvciBlbmQgPSBtX3dhdGNoZWRPYmplY3RzLmVuZCgpOworICAgICAgICBmb3IgKEhhc2hT
ZXQ8R09iamVjdCo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fd2F0Y2hlZE9iamVjdHMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgZ19wcmludCgiICVzKCVwKSIsIGdfdHlw
ZV9uYW1lX2Zyb21faW5zdGFuY2UocmVpbnRlcnByZXRfY2FzdDxHVHlwZUluc3RhbmNlKj4oKml0
KSksICppdCk7CisgICAgICAgIGdfcHJpbnQoIlxuIik7CisKKyAgICAgICAgZ19hc3NlcnQobV93
YXRjaGVkT2JqZWN0cy5pc0VtcHR5KCkpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIG9iamVj
dEZpbmFsaXplZChUZXN0KiB0ZXN0LCBHT2JqZWN0KiBmaW5hbGl6ZWRPYmplY3QpCisgICAgewor
ICAgICAgICB0ZXN0LT5tX3dhdGNoZWRPYmplY3RzLnJlbW92ZShmaW5hbGl6ZWRPYmplY3QpOwor
ICAgIH0KKworICAgIHZvaWQgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhH
T2JqZWN0KiBvYmplY3QpCisgICAgeworICAgICAgICBtX3dhdGNoZWRPYmplY3RzLmFkZChvYmpl
Y3QpOworICAgICAgICBnX29iamVjdF93ZWFrX3JlZihvYmplY3QsIHJlaW50ZXJwcmV0X2Nhc3Q8
R1dlYWtOb3RpZnk+KG9iamVjdEZpbmFsaXplZCksIHRoaXMpOworICAgIH0KKworICAgIHN0YXRp
YyBDU3RyaW5nIGdldFdlYktpdDFUZXN0UmVzb3VjZXNEaXIoKQorICAgIHsKKyAgICAgICAgR093
blB0cjxjaGFyPiByZXNvdXJjZXNEaXIoZ19idWlsZF9maWxlbmFtZShXRUJLSVRfU1JDX0RJUiwg
IlRvb2xzIiwgIlRlc3RXZWJLaXRBUEkiLCAiVGVzdHMiLCAiV2ViS2l0R3RrIiwgInJlc291cmNl
cyIsIE5VTEwpKTsKKyAgICAgICAgcmV0dXJuIHJlc291cmNlc0Rpci5nZXQoKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgQ1N0cmluZyBnZXRSZXNvdXJjZXNEaXIoKQorICAgIHsKKyAgICAgICAgR093
blB0cjxjaGFyPiByZXNvdXJjZXNEaXIoZ19idWlsZF9maWxlbmFtZShXRUJLSVRfU1JDX0RJUiwg
IlRvb2xzIiwgIlRlc3RXZWJLaXRBUEkiLCAiVGVzdHMiLCAiV2ViS2l0Mkd0ayIsICJyZXNvdXJj
ZXMiLCBOVUxMKSk7CisgICAgICAgIHJldHVybiByZXNvdXJjZXNEaXIuZ2V0KCk7CisgICAgfQor
CisgICAgdm9pZCBhZGRMb2dGYXRhbEZsYWcodW5zaWduZWQgZmxhZykKKyAgICB7CisgICAgICAg
IHVuc2lnbmVkIGZhdGFsTWFzayA9IGdfbG9nX3NldF9hbHdheXNfZmF0YWwoc3RhdGljX2Nhc3Q8
R0xvZ0xldmVsRmxhZ3M+KEdfTE9HX0ZBVEFMX01BU0spKTsKKyAgICAgICAgZmF0YWxNYXNrIHw9
IGZsYWc7CisgICAgICAgIGdfbG9nX3NldF9hbHdheXNfZmF0YWwoc3RhdGljX2Nhc3Q8R0xvZ0xl
dmVsRmxhZ3M+KGZhdGFsTWFzaykpOworICAgIH0KKworICAgIHZvaWQgcmVtb3ZlTG9nRmF0YWxG
bGFnKHVuc2lnbmVkIGZsYWcpCisgICAgeworICAgICAgICB1bnNpZ25lZCBmYXRhbE1hc2sgPSBn
X2xvZ19zZXRfYWx3YXlzX2ZhdGFsKHN0YXRpY19jYXN0PEdMb2dMZXZlbEZsYWdzPihHX0xPR19G
QVRBTF9NQVNLKSk7CisgICAgICAgIGZhdGFsTWFzayAmPSB+ZmxhZzsKKyAgICAgICAgZ19sb2df
c2V0X2Fsd2F5c19mYXRhbChzdGF0aWNfY2FzdDxHTG9nTGV2ZWxGbGFncz4oZmF0YWxNYXNrKSk7
CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgY2Fpcm9TdXJmYWNlc0VxdWFsKGNhaXJvX3N1cmZh
Y2VfdCogczEsIGNhaXJvX3N1cmZhY2VfdCogczIpCisgICAgeworICAgICAgICByZXR1cm4gKGNh
aXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2Zvcm1hdChzMSkgPT0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfZm9ybWF0KHMyKQorICAgICAgICAgICAgJiYgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lk
dGgoczEpID09IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHMyKQorICAgICAgICAgICAg
JiYgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHMxKSA9PSBjYWlyb19pbWFnZV9zdXJm
YWNlX2dldF9oZWlnaHQoczIpCisgICAgICAgICAgICAmJiBjYWlyb19pbWFnZV9zdXJmYWNlX2dl
dF9zdHJpZGUoczEpID09IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShzMikKKyAgICAg
ICAgICAgICYmICFtZW1jbXAoY29uc3RfY2FzdDxjb25zdCB2b2lkKj4ocmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzMSkpKSwKKyAgICAgICAgICAg
ICAgICBjb25zdF9jYXN0PGNvbnN0IHZvaWQqPihyZWludGVycHJldF9jYXN0PHZvaWQqPihjYWly
b19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHMyKSkpLAorICAgICAgICAgICAgICAgIGNhaXJvX2lt
YWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzMSkqY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRl
KHMxKSkpOworICAgIH0KKworICAgIEhhc2hTZXQ8R09iamVjdCo+IG1fd2F0Y2hlZE9iamVjdHM7
Cit9OworCisjZW5kaWYgLy8gVGVzdE1haW5faApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9ndGsvV2ViS2l0Mkd0ay9XZWJLaXRUZXN0QnVzLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvZ3RrL1dlYktpdDJHdGsvV2ViS2l0VGVzdEJ1cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uOGMyZDNmNgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViS2l0VGVzdEJ1cy5jcHAKQEAgLTAsMCArMSwxMDYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldlYktpdFRlc3RCdXMuaCIKKworI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dP
d25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworV2ViS2l0VGVzdEJ1
czo6V2ViS2l0VGVzdEJ1cygpCisgICAgOiBtX3BpZCgtMSkKK3sKK30KKworYm9vbCBXZWJLaXRU
ZXN0QnVzOjpydW4oKQoreworICAgIC8vIEZJWE1FOiBVc2UgR1Rlc3REQnVzIHdoZW4gd2UgYnVt
cCBnbGliIHRvIDIuMzQuCisgICAgR093blB0cjxjaGFyPiBkYnVzTGF1bmNoKGdfZmluZF9wcm9n
cmFtX2luX3BhdGgoImRidXMtbGF1bmNoIikpOworICAgIGlmICghZGJ1c0xhdW5jaCkgeworICAg
ICAgICBnX3dhcm5pbmcoIkVycm9yIHN0YXJ0aW5nIERCVVMgZGFlbW9uOiBkYnVzLWxhdW5jaCBu
b3QgZm91bmQgaW4gcGF0aCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
R093blB0cjxjaGFyPiBvdXRwdXQ7CisgICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAgIGlm
ICghZ19zcGF3bl9jb21tYW5kX2xpbmVfc3luYyhkYnVzTGF1bmNoLmdldCgpLCAmb3V0cHV0Lm91
dFB0cigpLCAwLCAwLCAmZXJyb3Iub3V0UHRyKCkpKSB7CisgICAgICAgIGdfd2FybmluZygiRXJy
b3Igc3RhcnRpbmcgREJVUyBkYWVtb246ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgU3RyaW5nIG91dHB1dFN0cmluZyA9IFN0cmluZzo6
ZnJvbVVURjgob3V0cHV0LmdldCgpKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBsaW5lczsKKyAgICBv
dXRwdXRTdHJpbmcuc3BsaXQoVUNoYXIoJ1xuJyksIC8qIGFsbG93RW1wdHlFbnRyaWVzICovIGZh
bHNlLCBsaW5lcyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaW5lcy5zaXplKCk7ICsr
aSkgeworICAgICAgICBjaGFyKioga2V5VmFsdWUgPSBnX3N0cnNwbGl0KGxpbmVzW2ldLnV0Zjgo
KS5kYXRhKCksICI9IiwgMik7CisgICAgICAgIGdfYXNzZXJ0X2NtcHVpbnQoZ19zdHJ2X2xlbmd0
aChrZXlWYWx1ZSksID09LCAyKTsKKyAgICAgICAgaWYgKCFnX3N0cmNtcDAoa2V5VmFsdWVbMF0s
ICJEQlVTX1NFU1NJT05fQlVTX0FERFJFU1MiKSkgeworICAgICAgICAgICAgbV9hZGRyZXNzID0g
a2V5VmFsdWVbMV07CisgICAgICAgICAgICBnX3NldGVudigiREJVU19TRVNTSU9OX0JVU19BRERS
RVNTIiwga2V5VmFsdWVbMV0sIFRSVUUpOworICAgICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAo
a2V5VmFsdWVbMF0sICJEQlVTX1NFU1NJT05fQlVTX1BJRCIpKQorICAgICAgICAgICAgbV9waWQg
PSBnX2FzY2lpX3N0cnRvbGwoa2V5VmFsdWVbMV0sIDAsIDEwKTsKKyAgICAgICAgZ19zdHJmcmVl
dihrZXlWYWx1ZSk7CisgICAgfQorCisgICAgcmV0dXJuIG1fcGlkID4gMDsKK30KKworV2ViS2l0
VGVzdEJ1czo6fldlYktpdFRlc3RCdXMoKQoreworICAgIGdfdW5zZXRlbnYoIkRCVVNfU0VTU0lP
Tl9CVVNfQUREUkVTUyIpOworCisgICAgaWYgKG1fcGlkICE9IC0xKQorICAgICAgICBraWxsKG1f
cGlkLCBTSUdURVJNKTsKK30KKworR0RCdXNDb25uZWN0aW9uKiBXZWJLaXRUZXN0QnVzOjpnZXRP
ckNyZWF0ZUNvbm5lY3Rpb24oKQoreworICAgIGlmIChtX2Nvbm5lY3Rpb24pCisgICAgICAgIHJl
dHVybiBtX2Nvbm5lY3Rpb24uZ2V0KCk7CisKKyAgICBnX2Fzc2VydCghbV9hZGRyZXNzLmlzTnVs
bCgpKTsKKyAgICBtX2Nvbm5lY3Rpb24gPSBhZG9wdEdSZWYoZ19kYnVzX2Nvbm5lY3Rpb25fbmV3
X2Zvcl9hZGRyZXNzX3N5bmMobV9hZGRyZXNzLmRhdGEoKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8
R0RCdXNDb25uZWN0aW9uRmxhZ3M+KEdfREJVU19DT05ORUNUSU9OX0ZMQUdTX0FVVEhFTlRJQ0FU
SU9OX0NMSUVOVCB8IEdfREJVU19DT05ORUNUSU9OX0ZMQUdTX01FU1NBR0VfQlVTX0NPTk5FQ1RJ
T04pLAorICAgICAgICAwLCAwLCAwKSk7CisgICAgcmV0dXJuIG1fY29ubmVjdGlvbi5nZXQoKTsK
K30KKworc3RhdGljIHZvaWQgb25OYW1lQXBwZWFyZWQoR0RCdXNDb25uZWN0aW9uKiwgY29uc3Qg
Y2hhciosIGNvbnN0IGNoYXIqLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBnX21haW5fbG9v
cF9xdWl0KHN0YXRpY19jYXN0PEdNYWluTG9vcCo+KHVzZXJEYXRhKSk7Cit9CisKK0dEQnVzUHJv
eHkqIFdlYktpdFRlc3RCdXM6OmNyZWF0ZVByb3h5KGNvbnN0IGNoYXIqIHNlcnZpY2VOYW1lLCBj
b25zdCBjaGFyKiBvYmplY3RQYXRoLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBHTWFpbkxv
b3AqIG1haW5Mb29wKQoreworICAgIHVuc2lnbmVkIHdhdGNoZXJJRCA9IGdfYnVzX3dhdGNoX25h
bWVfb25fY29ubmVjdGlvbihnZXRPckNyZWF0ZUNvbm5lY3Rpb24oKSwgc2VydmljZU5hbWUsIEdf
QlVTX05BTUVfV0FUQ0hFUl9GTEFHU19OT05FLCBvbk5hbWVBcHBlYXJlZCwgMCwgbWFpbkxvb3As
IDApOworICAgIGdfbWFpbl9sb29wX3J1bihtYWluTG9vcCk7CisgICAgZ19idXNfdW53YXRjaF9u
YW1lKHdhdGNoZXJJRCk7CisKKyAgICBHREJ1c1Byb3h5KiBwcm94eSA9IGdfZGJ1c19wcm94eV9u
ZXdfc3luYygKKyAgICAgICAgY29ubmVjdGlvbigpLAorICAgICAgICBHX0RCVVNfUFJPWFlfRkxB
R1NfRE9fTk9UX0FVVE9fU1RBUlQsCisgICAgICAgIDAsIC8vIEdEQnVzSW50ZXJmYWNlSW5mbwor
ICAgICAgICBzZXJ2aWNlTmFtZSwKKyAgICAgICAgb2JqZWN0UGF0aCwKKyAgICAgICAgaW50ZXJm
YWNlTmFtZSwKKyAgICAgICAgMCwgLy8gR0NhbmNlbGxhYmxlCisgICAgICAgIDApOworICAgIGdf
YXNzZXJ0KHByb3h5KTsKKyAgICByZXR1cm4gcHJveHk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYktpdFRlc3RCdXMuaCBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViS2l0VGVzdEJ1cy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmI5Zjg1NmIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYktpdFRlc3RCdXMuaApAQCAtMCwwICsxLDQ0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0VGVz
dEJ1c19oCisjZGVmaW5lIFdlYktpdFRlc3RCdXNfaAorCisjaW5jbHVkZSA8Z2lvL2dpby5oPgor
I2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CisKK2NsYXNzIFdlYktpdFRlc3RCdXMgeworcHVibGljOgorICAgIFdlYktpdFRlc3RC
dXMoKTsKKyAgICB2aXJ0dWFsIH5XZWJLaXRUZXN0QnVzKCk7CisKKyAgICBib29sIHJ1bigpOwor
ICAgIEdEQnVzUHJveHkqIGNyZWF0ZVByb3h5KGNvbnN0IGNoYXIqIHNlcnZpY2VOYW1lLCBjb25z
dCBjaGFyKiBvYmplY3RQYXRoLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBHTWFpbkxvb3Aq
KTsKKyAgICBHREJ1c0Nvbm5lY3Rpb24qIGNvbm5lY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2Nv
bm5lY3Rpb24uZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBHREJ1c0Nvbm5lY3Rpb24qIGdldE9y
Q3JlYXRlQ29ubmVjdGlvbigpOworCisgICAgcGlkX3QgbV9waWQ7CisgICAgQ1N0cmluZyBtX2Fk
ZHJlc3M7CisgICAgR1JlZlB0cjxHREJ1c0Nvbm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKK307CisK
KyNlbmRpZiAvLyBXZWJLaXRUZXN0QnVzX2gKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvZ3RrL1dlYktpdDJHdGsvV2ViS2l0VGVzdFNlcnZlci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL2d0ay9XZWJLaXQyR3RrL1dlYktpdFRlc3RTZXJ2ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjk4YjRhOWEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYktpdFRlc3RTZXJ2ZXIuY3BwCkBAIC0wLDAgKzEs
NjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKKworI2luY2x1ZGUgIlRlc3RN
YWluLmgiCisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorCitXZWJLaXRUZXN0U2Vy
dmVyOjpXZWJLaXRUZXN0U2VydmVyKFNlcnZlclR5cGUgdHlwZSkKK3sKKyAgICBHT3duUHRyPGNo
YXI+IHNzbENlcnRpZmljYXRlRmlsZTsKKyAgICBHT3duUHRyPGNoYXI+IHNzbEtleUZpbGU7Cisg
ICAgaWYgKHR5cGUgPT0gU2VydmVySFRUUFMpIHsKKyAgICAgICAgQ1N0cmluZyByZXNvdXJjZXNE
aXIgPSBUZXN0OjpnZXRSZXNvdXJjZXNEaXIoKTsKKyAgICAgICAgc3NsQ2VydGlmaWNhdGVGaWxl
LnNldChnX2J1aWxkX2ZpbGVuYW1lKHJlc291cmNlc0Rpci5kYXRhKCksICJ0ZXN0LWNlcnQucGVt
IiwgTlVMTCkpOworICAgICAgICBzc2xLZXlGaWxlLnNldChnX2J1aWxkX2ZpbGVuYW1lKHJlc291
cmNlc0Rpci5kYXRhKCksICJ0ZXN0LWtleS5wZW0iLCBOVUxMKSk7CisgICAgfQorCisgICAgR1Jl
ZlB0cjxTb3VwQWRkcmVzcz4gYWRkcmVzcyA9IGFkb3B0R1JlZihzb3VwX2FkZHJlc3NfbmV3KCIx
MjcuMC4wLjEiLCBTT1VQX0FERFJFU1NfQU5ZX1BPUlQpKTsKKyAgICBzb3VwX2FkZHJlc3NfcmVz
b2x2ZV9zeW5jKGFkZHJlc3MuZ2V0KCksIDApOworCisgICAgbV9zb3VwU2VydmVyID0gYWRvcHRH
UmVmKHNvdXBfc2VydmVyX25ldyhTT1VQX1NFUlZFUl9JTlRFUkZBQ0UsIGFkZHJlc3MuZ2V0KCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT1VQX1NFUlZF
Ul9TU0xfQ0VSVF9GSUxFLCBzc2xDZXJ0aWZpY2F0ZUZpbGUuZ2V0KCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT1VQX1NFUlZFUl9TU0xfS0VZX0ZJTEUs
IHNzbEtleUZpbGUuZ2V0KCksIE5VTEwpKTsKKyAgICBtX2Jhc2VVUkkgPSB0eXBlID09IFNlcnZl
ckhUVFBTID8gc291cF91cmlfbmV3KCJodHRwczovLzEyNy4wLjAuMS8iKSA6IHNvdXBfdXJpX25l
dygiaHR0cDovLzEyNy4wLjAuMS8iKTsKKyAgICBzb3VwX3VyaV9zZXRfcG9ydChtX2Jhc2VVUkks
IHNvdXBfc2VydmVyX2dldF9wb3J0KG1fc291cFNlcnZlci5nZXQoKSkpOworfQorCitXZWJLaXRU
ZXN0U2VydmVyOjp+V2ViS2l0VGVzdFNlcnZlcigpCit7CisgICAgc291cF91cmlfZnJlZShtX2Jh
c2VVUkkpOworfQorCit2b2lkIFdlYktpdFRlc3RTZXJ2ZXI6OnJ1bihTb3VwU2VydmVyQ2FsbGJh
Y2sgc2VydmVyQ2FsbGJhY2spCit7CisgICAgc291cF9zZXJ2ZXJfcnVuX2FzeW5jKG1fc291cFNl
cnZlci5nZXQoKSk7CisgICAgc291cF9zZXJ2ZXJfYWRkX2hhbmRsZXIobV9zb3VwU2VydmVyLmdl
dCgpLCAwLCBzZXJ2ZXJDYWxsYmFjaywgMCwgMCk7Cit9CisKK0NTdHJpbmcgV2ViS2l0VGVzdFNl
cnZlcjo6Z2V0VVJJRm9yUGF0aChjb25zdCBjaGFyKiBwYXRoKQoreworICAgIFNvdXBVUkkqIHVy
aSA9IHNvdXBfdXJpX25ld193aXRoX2Jhc2UobV9iYXNlVVJJLCBwYXRoKTsKKyAgICBHT3duUHRy
PGdjaGFyPiB1cmlTdHJpbmcoc291cF91cmlfdG9fc3RyaW5nKHVyaSwgRkFMU0UpKTsKKyAgICBz
b3VwX3VyaV9mcmVlKHVyaSk7CisgICAgcmV0dXJuIHVyaVN0cmluZy5nZXQoKTsKK30KKwpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9XZWJLaXRUZXN0U2Vy
dmVyLmggYi9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYktpdFRlc3RTZXJ2
ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDYyNmY2Ci0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9XZWJLaXRUZXN0
U2VydmVyLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2Fs
aWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaWZuZGVmIFdlYktpdFRlc3RTZXJ2ZXJfaAorI2RlZmluZSBXZWJLaXRUZXN0U2Vy
dmVyX2gKKworI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Vi
a2l0Mi5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisKK2NsYXNzIFdlYktpdFRlc3RTZXJ2ZXIgeworcHVibGljOgorCisg
ICAgZW51bSBTZXJ2ZXJUeXBlIHsKKyAgICAgICAgU2VydmVySFRUUCwKKyAgICAgICAgU2VydmVy
SFRUUFMKKyAgICB9OworCisgICAgV2ViS2l0VGVzdFNlcnZlcihTZXJ2ZXJUeXBlIHR5cGUgPSBT
ZXJ2ZXJIVFRQKTsKKyAgICB2aXJ0dWFsIH5XZWJLaXRUZXN0U2VydmVyKCk7CisKKyAgICBTb3Vw
VVJJKiBiYXNlVVJJKCkgeyByZXR1cm4gbV9iYXNlVVJJOyB9CisKKyAgICBDU3RyaW5nIGdldFVS
SUZvclBhdGgoY29uc3QgY2hhciogcGF0aCk7CisgICAgdm9pZCBydW4oU291cFNlcnZlckNhbGxi
YWNrKTsKKworcHJpdmF0ZToKKyAgICBHUmVmUHRyPFNvdXBTZXJ2ZXI+IG1fc291cFNlcnZlcjsK
KyAgICBTb3VwVVJJKiBtX2Jhc2VVUkk7Cit9OworCisjZW5kaWYgLy8gV2ViS2l0VGVzdFNlcnZl
cl9oCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYlBy
b2Nlc3NUZXN0UnVubmVyLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsv
V2ViUHJvY2Vzc1Rlc3RSdW5uZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjRhM2NkOTYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9X
ZWJLaXQyR3RrL1dlYlByb2Nlc3NUZXN0UnVubmVyLmNwcApAQCAtMCwwICsxLDExNSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV2ViUHJvY2Vzc1Rlc3RSdW5uZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9nb2JqZWN0
L0dPd25QdHIuaD4KKworV2ViUHJvY2Vzc1Rlc3RSdW5uZXI6OldlYlByb2Nlc3NUZXN0UnVubmVy
KCkKKyAgICA6IG1fbWFpbkxvb3AoZ19tYWluX2xvb3BfbmV3KDAsIFRSVUUpKQorICAgICwgbV9i
dXMoYWRvcHRHUmVmKGdfdGVzdF9kYnVzX25ldyhHX1RFU1RfREJVU19OT05FKSkpCit7CisgICAg
Ly8gU2F2ZSB0aGUgRElTUExBWSBlbnYgdmFyIHRvIHJlc3RvcmUgaXQgYWZ0ZXIgY2FsbGluZyBn
X3Rlc3RfZGJ1c191cCgpIHRoYXQgdW5zZXRzIGl0LgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI1NjIxLgorICAgIGNvbnN0IGNoYXIqIGRpc3Bs
YXkgPSBnX2dldGVudigiRElTUExBWSIpOworICAgIGdfdGVzdF9kYnVzX3VwKG1fYnVzLmdldCgp
KTsKKyAgICBnX3NldGVudigiRElTUExBWSIsIGRpc3BsYXksIEZBTFNFKTsKKyAgICBtX2Nvbm5l
Y3Rpb24gPSBhZG9wdEdSZWYoZ19idXNfZ2V0X3N5bmMoR19CVVNfVFlQRV9TRVNTSU9OLCAwLCAw
KSk7Cit9CisKK1dlYlByb2Nlc3NUZXN0UnVubmVyOjp+V2ViUHJvY2Vzc1Rlc3RSdW5uZXIoKQor
eworICAgIGdfbWFpbl9sb29wX3VucmVmKG1fbWFpbkxvb3ApOworCisgICAgLy8gZ190ZXN0X2Ri
dXNfZG93biB3YWl0cyB1bnRpbCB0aGUgY29ubmVjdGlvbiBpcyBmcmVlZCwgc28gcmVsZWFzZSBv
dXIgcmVmcyBleHBsaWNpdGx5IGJlZm9yZSBjYWxsaW5nIGl0LgorICAgIG1fY29ubmVjdGlvbiA9
IDA7CisgICAgbV9wcm94eSA9IDA7CisgICAgZ190ZXN0X2RidXNfZG93bihtX2J1cy5nZXQoKSk7
Cit9CisKK3ZvaWQgV2ViUHJvY2Vzc1Rlc3RSdW5uZXI6OnByb3h5Q3JlYXRlZENhbGxiYWNrKEdP
YmplY3QqLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgV2ViUHJvY2Vzc1Rlc3RSdW5uZXIqIHRlc3RS
dW5uZXIpCit7CisgICAgdGVzdFJ1bm5lci0+bV9wcm94eSA9IGFkb3B0R1JlZihnX2RidXNfcHJv
eHlfbmV3X2ZpbmlzaChyZXN1bHQsIDApKTsKKyAgICBnX21haW5fbG9vcF9xdWl0KHRlc3RSdW5u
ZXItPm1fbWFpbkxvb3ApOworfQorCitHREJ1c1Byb3h5KiBXZWJQcm9jZXNzVGVzdFJ1bm5lcjo6
cHJveHkoKQoreworICAgIGlmIChtX3Byb3h5KQorICAgICAgICByZXR1cm4gbV9wcm94eS5nZXQo
KTsKKworICAgIGdfZGJ1c19wcm94eV9uZXcobV9jb25uZWN0aW9uLmdldCgpLCBHX0RCVVNfUFJP
WFlfRkxBR1NfRE9fTk9UX0FVVE9fU1RBUlQsIDAsCisgICAgICAgICJvcmcud2Via2l0Lmd0ay5X
ZWJQcm9jZXNzVGVzdCIsICIvb3JnL3dlYmtpdC9ndGsvV2ViUHJvY2Vzc1Rlc3QiLCAib3JnLndl
YmtpdC5ndGsuV2ViUHJvY2Vzc1Rlc3QiLAorICAgICAgICAwLCByZWludGVycHJldF9jYXN0PEdB
c3luY1JlYWR5Q2FsbGJhY2s+KFdlYlByb2Nlc3NUZXN0UnVubmVyOjpwcm94eUNyZWF0ZWRDYWxs
YmFjayksIHRoaXMpOworICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICBnX2Fz
c2VydChtX3Byb3h5LmdldCgpKTsKKworICAgIHJldHVybiBtX3Byb3h5LmdldCgpOworfQorCit2
b2lkIFdlYlByb2Nlc3NUZXN0UnVubmVyOjpvbk5hbWVBcHBlYXJlZChHREJ1c0Nvbm5lY3Rpb24q
LCBjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIFdl
YlByb2Nlc3NUZXN0UnVubmVyKiB0ZXN0UnVubmVyID0gc3RhdGljX2Nhc3Q8V2ViUHJvY2Vzc1Rl
c3RSdW5uZXIqPih1c2VyRGF0YSk7CisgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0UnVubmVyLT5t
X21haW5Mb29wKTsKK30KKwordm9pZCBXZWJQcm9jZXNzVGVzdFJ1bm5lcjo6b25OYW1lVmFuaXNo
ZWQoR0RCdXNDb25uZWN0aW9uKiwgY29uc3QgY2hhciogbmFtZSwgZ3BvaW50ZXIgdXNlckRhdGEp
Cit7CisgICAgX2V4aXQoMSk7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzc1Rlc3RSdW5uZXI6OnRlc3RG
aW5pc2hlZENhbGxiYWNrKEdEQnVzUHJveHkqIHByb3h5LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwg
V2ViUHJvY2Vzc1Rlc3RSdW5uZXIqIHRlc3RSdW5uZXIpCit7CisgICAgR1JlZlB0cjxHVmFyaWFu
dD4gcmV0dXJuVmFsdWUgPSBhZG9wdEdSZWYoZ19kYnVzX3Byb3h5X2NhbGxfZmluaXNoKHByb3h5
LCByZXN1bHQsIDApKTsKKyAgICBnX2Fzc2VydChyZXR1cm5WYWx1ZS5nZXQoKSk7CisgICAgZ2Jv
b2xlYW4gdGVzdFJlc3VsdDsKKyAgICBnX3ZhcmlhbnRfZ2V0KHJldHVyblZhbHVlLmdldCgpLCAi
KGIpIiwgJnRlc3RSZXN1bHQpOworICAgIHRlc3RSdW5uZXItPmZpbmlzaFRlc3QodGVzdFJlc3Vs
dCk7Cit9CisKK2Jvb2wgV2ViUHJvY2Vzc1Rlc3RSdW5uZXI6OnJ1blRlc3QoY29uc3QgY2hhciog
c3VpdGVOYW1lLCBjb25zdCBjaGFyKiB0ZXN0TmFtZSwgR1ZhcmlhbnQqIGFyZ3MpCit7CisgICAg
Z19hc3NlcnQoZ192YXJpYW50X2lzX29mX3R5cGUoYXJncywgR19WQVJJQU5UX1RZUEVfVkFSRElD
VCkpOworCisgICAgdW5zaWduZWQgd2F0Y2hlcklEID0gZ19idXNfd2F0Y2hfbmFtZV9vbl9jb25u
ZWN0aW9uKG1fY29ubmVjdGlvbi5nZXQoKSwgIm9yZy53ZWJraXQuZ3RrLldlYlByb2Nlc3NUZXN0
IiwgR19CVVNfTkFNRV9XQVRDSEVSX0ZMQUdTX05PTkUsCisgICAgICAgIFdlYlByb2Nlc3NUZXN0
UnVubmVyOjpvbk5hbWVBcHBlYXJlZCwgV2ViUHJvY2Vzc1Rlc3RSdW5uZXI6Om9uTmFtZVZhbmlz
aGVkLCB0aGlzLCAwKTsKKyAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisKKyAgICBt
X3Rlc3RSZXN1bHQgPSBmYWxzZTsKKyAgICBHT3duUHRyPGNoYXI+IHRlc3RQYXRoKGdfc3RyZHVw
X3ByaW50ZigiJXMvJXMiLCBzdWl0ZU5hbWUsIHRlc3ROYW1lKSk7CisgICAgZ19kYnVzX3Byb3h5
X2NhbGwoCisgICAgICAgIHByb3h5KCksCisgICAgICAgICJSdW5UZXN0IiwKKyAgICAgICAgZ192
YXJpYW50X25ldygiKHNAYXtzdn0pIiwgdGVzdFBhdGguZ2V0KCksIGFyZ3MpLAorICAgICAgICBH
X0RCVVNfQ0FMTF9GTEFHU19OT05FLAorICAgICAgICAtMSwgMCwKKyAgICAgICAgcmVpbnRlcnBy
ZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihXZWJQcm9jZXNzVGVzdFJ1bm5lcjo6dGVzdEZp
bmlzaGVkQ2FsbGJhY2spLAorICAgICAgICB0aGlzKTsKKyAgICBnX21haW5fbG9vcF9ydW4obV9t
YWluTG9vcCk7CisgICAgZ19idXNfdW53YXRjaF9uYW1lKHdhdGNoZXJJRCk7CisKKyAgICByZXR1
cm4gbV90ZXN0UmVzdWx0OworfQorCit2b2lkIFdlYlByb2Nlc3NUZXN0UnVubmVyOjpmaW5pc2hU
ZXN0KGJvb2wgcmVzdWx0KQoreworICAgIG1fdGVzdFJlc3VsdCA9IHJlc3VsdDsKKyAgICBnX21h
aW5fbG9vcF9xdWl0KG1fbWFpbkxvb3ApOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9ndGsvV2ViS2l0Mkd0ay9XZWJQcm9jZXNzVGVzdFJ1bm5lci5oIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9XZWJQcm9jZXNzVGVzdFJ1bm5lci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MGZhOTYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYlByb2Nlc3NUZXN0UnVubmVyLmgKQEAg
LTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJZ2FsaWEgUy5MLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZu
ZGVmIFdlYlByb2Nlc3NUZXN0UnVubmVyX2gKKyNkZWZpbmUgV2ViUHJvY2Vzc1Rlc3RSdW5uZXJf
aAorCisjaW5jbHVkZSA8Z2lvL2dpby5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgor
I2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKworY2xhc3MgV2ViUHJvY2Vzc1Rlc3RS
dW5uZXIgeworcHVibGljOgorICAgIFdlYlByb2Nlc3NUZXN0UnVubmVyKCk7CisgICAgfldlYlBy
b2Nlc3NUZXN0UnVubmVyKCk7CisKKyAgICBib29sIHJ1blRlc3QoY29uc3QgY2hhciogc3VpdGVO
YW1lLCBjb25zdCBjaGFyKiB0ZXN0TmFtZSwgR1ZhcmlhbnQqIGFyZ3MpOworCitwcml2YXRlOgor
ICAgIHN0YXRpYyB2b2lkIHByb3h5Q3JlYXRlZENhbGxiYWNrKEdPYmplY3QqLCBHQXN5bmNSZXN1
bHQqLCBXZWJQcm9jZXNzVGVzdFJ1bm5lciopOworICAgIHN0YXRpYyB2b2lkIG9uTmFtZUFwcGVh
cmVkKEdEQnVzQ29ubmVjdGlvbiosIGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgZ3BvaW50ZXIp
OworICAgIHN0YXRpYyB2b2lkIG9uTmFtZVZhbmlzaGVkKEdEQnVzQ29ubmVjdGlvbiosIGNvbnN0
IGNoYXIqLCBncG9pbnRlcik7CisgICAgc3RhdGljIHZvaWQgdGVzdEZpbmlzaGVkQ2FsbGJhY2so
R0RCdXNQcm94eSosIEdBc3luY1Jlc3VsdCosIFdlYlByb2Nlc3NUZXN0UnVubmVyKik7CisKKyAg
ICBHREJ1c1Byb3h5KiBwcm94eSgpOworICAgIHZvaWQgZmluaXNoVGVzdChib29sIHJlc3VsdCk7
CisKKyAgICBHTWFpbkxvb3AqIG1fbWFpbkxvb3A7CisgICAgR1JlZlB0cjxHVGVzdERCdXM+IG1f
YnVzOworICAgIEdSZWZQdHI8R0RCdXNDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247CisgICAgR1Jl
ZlB0cjxHREJ1c1Byb3h5PiBtX3Byb3h5OworICAgIGJvb2wgbV90ZXN0UmVzdWx0OworfTsKKwor
I2VuZGlmIC8vIFdlYlByb2Nlc3NUZXN0UnVubmVyX2gKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViVmlld1Rlc3QuY3BwIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9ndGsvV2ViS2l0Mkd0ay9XZWJWaWV3VGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZTZjODQzNAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViVmlld1Rlc3QuY3BwCkBAIC0wLDAgKzEsNDQ0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKiBQb3J0aW9ucyBDb3B5cmln
aHQgKGMpIDIwMTEgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgorCisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dPd25Q
dHJHdGsuaD4KKworV2ViVmlld1Rlc3Q6OldlYlZpZXdUZXN0KCkKKyAgICA6IG1fd2ViVmlldyhX
RUJLSVRfV0VCX1ZJRVcoZ19vYmplY3RfcmVmX3Npbmsod2Via2l0X3dlYl92aWV3X25ldygpKSkp
CisgICAgLCBtX21haW5Mb29wKGdfbWFpbl9sb29wX25ldygwLCBUUlVFKSkKKyAgICAsIG1fcGFy
ZW50V2luZG93KDApCisgICAgLCBtX2phdmFzY3JpcHRSZXN1bHQoMCkKKyAgICAsIG1fcmVzb3Vy
Y2VEYXRhU2l6ZSgwKQorICAgICwgbV9zdXJmYWNlKDApCit7CisgICAgYXNzZXJ0T2JqZWN0SXNE
ZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChtX3dlYlZpZXcpKTsKK30KKworV2ViVmll
d1Rlc3Q6On5XZWJWaWV3VGVzdCgpCit7CisgICAgaWYgKG1fcGFyZW50V2luZG93KQorICAgICAg
ICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV9wYXJlbnRXaW5kb3cpOworICAgIGlmIChtX2phdmFzY3Jp
cHRSZXN1bHQpCisgICAgICAgIHdlYmtpdF9qYXZhc2NyaXB0X3Jlc3VsdF91bnJlZihtX2phdmFz
Y3JpcHRSZXN1bHQpOworICAgIGlmIChtX3N1cmZhY2UpCisgICAgICAgIGNhaXJvX3N1cmZhY2Vf
ZGVzdHJveShtX3N1cmZhY2UpOworICAgIGdfb2JqZWN0X3VucmVmKG1fd2ViVmlldyk7CisgICAg
Z19tYWluX2xvb3BfdW5yZWYobV9tYWluTG9vcCk7Cit9CisKK3ZvaWQgV2ViVmlld1Rlc3Q6Omxv
YWRVUkkoY29uc3QgY2hhciogdXJpKQoreworICAgIG1fYWN0aXZlVVJJID0gdXJpOworICAgIHdl
YmtpdF93ZWJfdmlld19sb2FkX3VyaShtX3dlYlZpZXcsIHVyaSk7Cit9CisKK3ZvaWQgV2ViVmll
d1Rlc3Q6OmxvYWRIdG1sKGNvbnN0IGNoYXIqIGh0bWwsIGNvbnN0IGNoYXIqIGJhc2VVUkkpCit7
CisgICAgaWYgKCFiYXNlVVJJKQorICAgICAgICBtX2FjdGl2ZVVSSSA9ICJhYm91dDpibGFuayI7
CisgICAgZWxzZQorICAgICAgICBtX2FjdGl2ZVVSSSA9IGJhc2VVUkk7CisgICAgd2Via2l0X3dl
Yl92aWV3X2xvYWRfaHRtbChtX3dlYlZpZXcsIGh0bWwsIGJhc2VVUkkpOworfQorCit2b2lkIFdl
YlZpZXdUZXN0Ojpsb2FkUGxhaW5UZXh0KGNvbnN0IGNoYXIqIHBsYWluVGV4dCkKK3sKKyAgICBt
X2FjdGl2ZVVSSSA9ICJhYm91dDpibGFuayI7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfcGxh
aW5fdGV4dChtX3dlYlZpZXcsIHBsYWluVGV4dCk7Cit9CisKK3ZvaWQgV2ViVmlld1Rlc3Q6Omxv
YWRSZXF1ZXN0KFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgbV9hY3RpdmVVUkkg
PSB3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KTsKKyAgICB3ZWJraXRfd2ViX3Zp
ZXdfbG9hZF9yZXF1ZXN0KG1fd2ViVmlldywgcmVxdWVzdCk7Cit9CisKK3ZvaWQgV2ViVmlld1Rl
c3Q6OmxvYWRBbHRlcm5hdGVIVE1MKGNvbnN0IGNoYXIqIGh0bWwsIGNvbnN0IGNoYXIqIGNvbnRl
bnRVUkksIGNvbnN0IGNoYXIqIGJhc2VVUkkpCit7CisgICAgbV9hY3RpdmVVUkkgPSBjb250ZW50
VVJJOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX2FsdGVybmF0ZV9odG1sKG1fd2ViVmlldywg
aHRtbCwgY29udGVudFVSSSwgYmFzZVVSSSk7Cit9CisKK3ZvaWQgV2ViVmlld1Rlc3Q6OmdvQmFj
aygpCit7CisgICAgaWYgKHdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayhtX3dlYlZpZXcpKSB7
CisgICAgICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdCogbGlzdCA9IHdlYmtpdF93ZWJfdmlld19n
ZXRfYmFja19mb3J3YXJkX2xpc3QobV93ZWJWaWV3KTsKKyAgICAgICAgV2ViS2l0QmFja0Zvcndh
cmRMaXN0SXRlbSogaXRlbSA9IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbnRoX2l0ZW0o
bGlzdCwgLTEpOworICAgICAgICBtX2FjdGl2ZVVSSSA9IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlz
dF9pdGVtX2dldF9vcmlnaW5hbF91cmkoaXRlbSk7CisgICAgfQorCisgICAgLy8gQ2FsbCBnb19i
YWNrIGV2ZW4gd2hlbiBjYW5fZ29fYmFjayByZXR1cm5zIEZBTFNFIHRvIGNoZWNrIG5vdGhpbmcg
aGFwcGVucy4KKyAgICB3ZWJraXRfd2ViX3ZpZXdfZ29fYmFjayhtX3dlYlZpZXcpOworfQorCit2
b2lkIFdlYlZpZXdUZXN0Ojpnb0ZvcndhcmQoKQoreworICAgIGlmICh3ZWJraXRfd2ViX3ZpZXdf
Y2FuX2dvX2ZvcndhcmQobV93ZWJWaWV3KSkgeworICAgICAgICBXZWJLaXRCYWNrRm9yd2FyZExp
c3QqIGxpc3QgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2JhY2tfZm9yd2FyZF9saXN0KG1fd2ViVmll
dyk7CisgICAgICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW0gPSB3ZWJraXRfYmFj
a19mb3J3YXJkX2xpc3RfZ2V0X250aF9pdGVtKGxpc3QsIDEpOworICAgICAgICBtX2FjdGl2ZVVS
SSA9IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dldF9vcmlnaW5hbF91cmkoaXRlbSk7
CisgICAgfQorCisgICAgLy8gQ2FsbCBnb19mb3J3YXJkIGV2ZW4gd2hlbiBjYW5fZ29fZm9yd2Fy
ZCByZXR1cm5zIEZBTFNFIHRvIGNoZWNrIG5vdGhpbmcgaGFwcGVucy4KKyAgICB3ZWJraXRfd2Vi
X3ZpZXdfZ29fZm9yd2FyZChtX3dlYlZpZXcpOworfQorCit2b2lkIFdlYlZpZXdUZXN0Ojpnb1Rv
QmFja0ZvcndhcmRMaXN0SXRlbShXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiBpdGVtKQorewor
ICAgIG1fYWN0aXZlVVJJID0gd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0X29yaWdp
bmFsX3VyaShpdGVtKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfZ29fdG9fYmFja19mb3J3YXJkX2xp
c3RfaXRlbShtX3dlYlZpZXcsIGl0ZW0pOworfQorCit2b2lkIFdlYlZpZXdUZXN0OjpxdWl0TWFp
bkxvb3AoKQoreworICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7Cit9CisKK3ZvaWQg
V2ViVmlld1Rlc3Q6OnF1aXRNYWluTG9vcEFmdGVyUHJvY2Vzc2luZ1BlbmRpbmdFdmVudHMoKQor
eworICAgIHdoaWxlIChndGtfZXZlbnRzX3BlbmRpbmcoKSkKKyAgICAgICAgZ3RrX21haW5faXRl
cmF0aW9uKCk7CisgICAgcXVpdE1haW5Mb29wKCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBxdWl0
TWFpbkxvb3BJZGxlQ2FsbGJhY2soV2ViVmlld1Rlc3QqIHRlc3QpCit7CisgICAgdGVzdC0+cXVp
dE1haW5Mb29wKCk7CisgICAgcmV0dXJuIEZBTFNFOworfQorCit2b2lkIFdlYlZpZXdUZXN0Ojp3
YWl0KGRvdWJsZSBzZWNvbmRzKQoreworICAgIGdfdGltZW91dF9hZGRfc2Vjb25kcyhzZWNvbmRz
LCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihxdWl0TWFpbkxvb3BJZGxlQ2FsbGJhY2sp
LCB0aGlzKTsKKyAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Cit9CisKK3N0YXRpYyB2
b2lkIGxvYWRDaGFuZ2VkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdExvYWRFdmVudCBs
b2FkRXZlbnQsIFdlYlZpZXdUZXN0KiB0ZXN0KQoreworICAgIGlmIChsb2FkRXZlbnQgIT0gV0VC
S0lUX0xPQURfRklOSVNIRUQpCisgICAgICAgIHJldHVybjsKKyAgICBnX3NpZ25hbF9oYW5kbGVy
c19kaXNjb25uZWN0X2J5X2Z1bmMod2ViVmlldywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obG9h
ZENoYW5nZWQpLCB0ZXN0KTsKKyAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3Ap
OworfQorCit2b2lkIFdlYlZpZXdUZXN0Ojp3YWl0VW50aWxMb2FkRmluaXNoZWQoKQoreworICAg
IGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAibG9hZC1jaGFuZ2VkIiwgR19DQUxMQkFDSyhs
b2FkQ2hhbmdlZCksIHRoaXMpOworICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKK30K
Kworc3RhdGljIHZvaWQgdGl0bGVDaGFuZ2VkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEdQYXJh
bVNwZWMqLCBXZWJWaWV3VGVzdCogdGVzdCkKK3sKKyAgICBpZiAoIXRlc3QtPm1fZXhwZWN0ZWRU
aXRsZS5pc051bGwoKSAmJiB0ZXN0LT5tX2V4cGVjdGVkVGl0bGUgIT0gd2Via2l0X3dlYl92aWV3
X2dldF90aXRsZSh3ZWJWaWV3KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ19zaWduYWxfaGFu
ZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKHdlYlZpZXcsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KHRpdGxlQ2hhbmdlZCksIHRlc3QpOworICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWlu
TG9vcCk7Cit9CisKK3ZvaWQgV2ViVmlld1Rlc3Q6OndhaXRVbnRpbFRpdGxlQ2hhbmdlZFRvKGNv
bnN0IGNoYXIqIGV4cGVjdGVkVGl0bGUpCit7CisgICAgbV9leHBlY3RlZFRpdGxlID0gZXhwZWN0
ZWRUaXRsZTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgIm5vdGlmeTo6dGl0bGUi
LCBHX0NBTExCQUNLKHRpdGxlQ2hhbmdlZCksIHRoaXMpOworICAgIGdfbWFpbl9sb29wX3J1biht
X21haW5Mb29wKTsKKyAgICBtX2V4cGVjdGVkVGl0bGUgPSBDU3RyaW5nKCk7Cit9CisKK3ZvaWQg
V2ViVmlld1Rlc3Q6OndhaXRVbnRpbFRpdGxlQ2hhbmdlZCgpCit7CisgICAgd2FpdFVudGlsVGl0
bGVDaGFuZ2VkVG8oMCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBwYXJlbnRXaW5kb3dNYXBwZWQo
R3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50KiwgV2ViVmlld1Rlc3QqIHRlc3QpCit7CisgICAg
Z19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKHdpZGdldCwgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4ocGFyZW50V2luZG93TWFwcGVkKSwgdGVzdCk7CisgICAgZ19tYWluX2xvb3Bf
cXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKworICAgIHJldHVybiBGQUxTRTsKK30KKwordm9pZCBX
ZWJWaWV3VGVzdDo6c2hvd0luV2luZG93KEd0a1dpbmRvd1R5cGUgd2luZG93VHlwZSkKK3sKKyAg
ICBnX2Fzc2VydCghbV9wYXJlbnRXaW5kb3cpOworICAgIG1fcGFyZW50V2luZG93ID0gZ3RrX3dp
bmRvd19uZXcod2luZG93VHlwZSk7CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5F
UihtX3BhcmVudFdpbmRvdyksIEdUS19XSURHRVQobV93ZWJWaWV3KSk7CisgICAgZ3RrX3dpZGdl
dF9zaG93KEdUS19XSURHRVQobV93ZWJWaWV3KSk7CisgICAgZ3RrX3dpZGdldF9zaG93KG1fcGFy
ZW50V2luZG93KTsKK30KKwordm9pZCBXZWJWaWV3VGVzdDo6c2hvd0luV2luZG93QW5kV2FpdFVu
dGlsTWFwcGVkKEd0a1dpbmRvd1R5cGUgd2luZG93VHlwZSkKK3sKKyAgICBnX2Fzc2VydCghbV9w
YXJlbnRXaW5kb3cpOworICAgIG1fcGFyZW50V2luZG93ID0gZ3RrX3dpbmRvd19uZXcod2luZG93
VHlwZSk7CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihtX3BhcmVudFdpbmRv
dyksIEdUS19XSURHRVQobV93ZWJWaWV3KSk7CisgICAgZ3RrX3dpZGdldF9zaG93KEdUS19XSURH
RVQobV93ZWJWaWV3KSk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fcGFyZW50V2luZG93LCAi
bWFwLWV2ZW50IiwgR19DQUxMQkFDSyhwYXJlbnRXaW5kb3dNYXBwZWQpLCB0aGlzKTsKKyAgICBn
dGtfd2lkZ2V0X3Nob3cobV9wYXJlbnRXaW5kb3cpOworICAgIGdfbWFpbl9sb29wX3J1bihtX21h
aW5Mb29wKTsKK30KKwordm9pZCBXZWJWaWV3VGVzdDo6cmVzaXplVmlldyhpbnQgd2lkdGgsIGlu
dCBoZWlnaHQpCit7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uOworICAgIGd0a193aWRn
ZXRfZ2V0X2FsbG9jYXRpb24oR1RLX1dJREdFVChtX3dlYlZpZXcpLCAmYWxsb2NhdGlvbik7Cisg
ICAgaWYgKHdpZHRoICE9IC0xKQorICAgICAgICBhbGxvY2F0aW9uLndpZHRoID0gd2lkdGg7Cisg
ICAgaWYgKGhlaWdodCAhPSAtMSkKKyAgICAgICAgYWxsb2NhdGlvbi5oZWlnaHQgPSBoZWlnaHQ7
CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQobV93ZWJWaWV3KSwgJmFs
bG9jYXRpb24pOworfQorCit2b2lkIFdlYlZpZXdUZXN0OjpzZWxlY3RBbGwoKQoreworICAgIHdl
YmtpdF93ZWJfdmlld19leGVjdXRlX2VkaXRpbmdfY29tbWFuZChtX3dlYlZpZXcsICJTZWxlY3RB
bGwiKTsKK30KKworc3RhdGljIHZvaWQgcmVzb3VyY2VHZXREYXRhQ2FsbGJhY2soR09iamVjdCog
b2JqZWN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAg
c2l6ZV90IGRhdGFTaXplOworICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICB1bnNpZ25l
ZCBjaGFyKiBkYXRhID0gd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZGF0YV9maW5pc2goV0VCS0lU
X1dFQl9SRVNPVVJDRShvYmplY3QpLCByZXN1bHQsICZkYXRhU2l6ZSwgJmVycm9yLm91dFB0cigp
KTsKKyAgICBnX2Fzc2VydChkYXRhKTsKKworICAgIFdlYlZpZXdUZXN0KiB0ZXN0ID0gc3RhdGlj
X2Nhc3Q8V2ViVmlld1Rlc3QqPih1c2VyRGF0YSk7CisgICAgdGVzdC0+bV9yZXNvdXJjZURhdGEu
c2V0KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGRhdGEpKTsKKyAgICB0ZXN0LT5tX3Jlc291cmNl
RGF0YVNpemUgPSBkYXRhU2l6ZTsKKyAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxv
b3ApOworfQorCitjb25zdCBjaGFyKiBXZWJWaWV3VGVzdDo6bWFpblJlc291cmNlRGF0YShzaXpl
X3QmIG1haW5SZXNvdXJjZURhdGFTaXplKQoreworICAgIG1fcmVzb3VyY2VEYXRhU2l6ZSA9IDA7
CisgICAgbV9yZXNvdXJjZURhdGEuY2xlYXIoKTsKKyAgICBXZWJLaXRXZWJSZXNvdXJjZSogcmVz
b3VyY2UgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2UobV93ZWJWaWV3KTsKKyAg
ICBnX2Fzc2VydChyZXNvdXJjZSk7CisKKyAgICB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF9kYXRh
KHJlc291cmNlLCAwLCByZXNvdXJjZUdldERhdGFDYWxsYmFjaywgdGhpcyk7CisgICAgZ19tYWlu
X2xvb3BfcnVuKG1fbWFpbkxvb3ApOworCisgICAgbWFpblJlc291cmNlRGF0YVNpemUgPSBtX3Jl
c291cmNlRGF0YVNpemU7CisgICAgcmV0dXJuIG1fcmVzb3VyY2VEYXRhLmdldCgpOworfQorCit2
b2lkIFdlYlZpZXdUZXN0Ojptb3VzZU1vdmVUbyhpbnQgeCwgaW50IHksIHVuc2lnbmVkIGludCBt
b3VzZU1vZGlmaWVycykKK3sKKyAgICBnX2Fzc2VydChtX3BhcmVudFdpbmRvdyk7CisgICAgR3Rr
V2lkZ2V0KiB2aWV3V2lkZ2V0ID0gR1RLX1dJREdFVChtX3dlYlZpZXcpOworICAgIGdfYXNzZXJ0
KGd0a193aWRnZXRfZ2V0X3JlYWxpemVkKHZpZXdXaWRnZXQpKTsKKworICAgIEdPd25QdHI8R2Rr
RXZlbnQ+IGV2ZW50KGdka19ldmVudF9uZXcoR0RLX01PVElPTl9OT1RJRlkpKTsKKyAgICBldmVu
dC0+bW90aW9uLnggPSB4OworICAgIGV2ZW50LT5tb3Rpb24ueSA9IHk7CisKKyAgICBldmVudC0+
bW90aW9uLnRpbWUgPSBHREtfQ1VSUkVOVF9USU1FOworICAgIGV2ZW50LT5tb3Rpb24ud2luZG93
ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KHZpZXdXaWRnZXQpOworICAgIGdfb2JqZWN0X3JlZihl
dmVudC0+bW90aW9uLndpbmRvdyk7CisgICAgZXZlbnQtPm1vdGlvbi5kZXZpY2UgPSBnZGtfZGV2
aWNlX21hbmFnZXJfZ2V0X2NsaWVudF9wb2ludGVyKGdka19kaXNwbGF5X2dldF9kZXZpY2VfbWFu
YWdlcihndGtfd2lkZ2V0X2dldF9kaXNwbGF5KHZpZXdXaWRnZXQpKSk7CisgICAgZXZlbnQtPm1v
dGlvbi5zdGF0ZSA9IG1vdXNlTW9kaWZpZXJzOworICAgIGV2ZW50LT5tb3Rpb24uYXhlcyA9IDA7
CisKKyAgICBpbnQgeFJvb3QsIHlSb290OworICAgIGdka193aW5kb3dfZ2V0X3Jvb3RfY29vcmRz
KGd0a193aWRnZXRfZ2V0X3dpbmRvdyh2aWV3V2lkZ2V0KSwgeCwgeSwgJnhSb290LCAmeVJvb3Qp
OworICAgIGV2ZW50LT5tb3Rpb24ueF9yb290ID0geFJvb3Q7CisgICAgZXZlbnQtPm1vdGlvbi55
X3Jvb3QgPSB5Um9vdDsKKyAgICBndGtfbWFpbl9kb19ldmVudChldmVudC5nZXQoKSk7Cit9CisK
K3ZvaWQgV2ViVmlld1Rlc3Q6OmNsaWNrTW91c2VCdXR0b24oaW50IHgsIGludCB5LCB1bnNpZ25l
ZCBpbnQgYnV0dG9uLCB1bnNpZ25lZCBpbnQgbW91c2VNb2RpZmllcnMpCit7CisgICAgZG9Nb3Vz
ZUJ1dHRvbkV2ZW50KEdES19CVVRUT05fUFJFU1MsIHgsIHksIGJ1dHRvbiwgbW91c2VNb2RpZmll
cnMpOworICAgIGRvTW91c2VCdXR0b25FdmVudChHREtfQlVUVE9OX1JFTEVBU0UsIHgsIHksIGJ1
dHRvbiwgbW91c2VNb2RpZmllcnMpOworfQorCit2b2lkIFdlYlZpZXdUZXN0OjprZXlTdHJva2Uo
dW5zaWduZWQgaW50IGtleVZhbCwgdW5zaWduZWQgaW50IGtleU1vZGlmaWVycykKK3sKKyAgICBn
X2Fzc2VydChtX3BhcmVudFdpbmRvdyk7CisgICAgR3RrV2lkZ2V0KiB2aWV3V2lkZ2V0ID0gR1RL
X1dJREdFVChtX3dlYlZpZXcpOworICAgIGdfYXNzZXJ0KGd0a193aWRnZXRfZ2V0X3JlYWxpemVk
KHZpZXdXaWRnZXQpKTsKKworICAgIEdPd25QdHI8R2RrRXZlbnQ+IGV2ZW50KGdka19ldmVudF9u
ZXcoR0RLX0tFWV9QUkVTUykpOworICAgIGV2ZW50LT5rZXkua2V5dmFsID0ga2V5VmFsOworCisg
ICAgZXZlbnQtPmtleS50aW1lID0gR0RLX0NVUlJFTlRfVElNRTsKKyAgICBldmVudC0+a2V5Lndp
bmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyh2aWV3V2lkZ2V0KTsKKyAgICBnX29iamVjdF9y
ZWYoZXZlbnQtPmtleS53aW5kb3cpOworICAgIGdka19ldmVudF9zZXRfZGV2aWNlKGV2ZW50Lmdl
dCgpLCBnZGtfZGV2aWNlX21hbmFnZXJfZ2V0X2NsaWVudF9wb2ludGVyKGdka19kaXNwbGF5X2dl
dF9kZXZpY2VfbWFuYWdlcihndGtfd2lkZ2V0X2dldF9kaXNwbGF5KHZpZXdXaWRnZXQpKSkpOwor
ICAgIGV2ZW50LT5rZXkuc3RhdGUgPSBrZXlNb2RpZmllcnM7CisKKyAgICAvLyBXaGVuIHN5bnRo
ZXNpemluZyBhbiBldmVudCwgYW4gaW52YWxpZCBoYXJkd2FyZV9rZXljb2RlIHZhbHVlIGNhbiBj
YXVzZSBpdCB0byBiZSBiYWRseSBwcm9jZXNzZWQgYnkgR1RLKy4KKyAgICBHT3duUHRyPEdka0tl
eW1hcEtleT4ga2V5czsKKyAgICBpbnQga2V5c0NvdW50OworICAgIGlmIChnZGtfa2V5bWFwX2dl
dF9lbnRyaWVzX2Zvcl9rZXl2YWwoZ2RrX2tleW1hcF9nZXRfZGVmYXVsdCgpLCBrZXlWYWwsICZr
ZXlzLm91dFB0cigpLCAma2V5c0NvdW50KSkKKyAgICAgICAgZXZlbnQtPmtleS5oYXJkd2FyZV9r
ZXljb2RlID0ga2V5cy5nZXQoKVswXS5rZXljb2RlOworCisgICAgZ3RrX21haW5fZG9fZXZlbnQo
ZXZlbnQuZ2V0KCkpOworICAgIGV2ZW50LT5rZXkudHlwZSA9IEdES19LRVlfUkVMRUFTRTsKKyAg
ICBndGtfbWFpbl9kb19ldmVudChldmVudC5nZXQoKSk7Cit9CisKK3ZvaWQgV2ViVmlld1Rlc3Q6
OmRvTW91c2VCdXR0b25FdmVudChHZGtFdmVudFR5cGUgZXZlbnRUeXBlLCBpbnQgeCwgaW50IHks
IHVuc2lnbmVkIGludCBidXR0b24sIHVuc2lnbmVkIGludCBtb3VzZU1vZGlmaWVycykKK3sKKyAg
ICBnX2Fzc2VydChtX3BhcmVudFdpbmRvdyk7CisgICAgR3RrV2lkZ2V0KiB2aWV3V2lkZ2V0ID0g
R1RLX1dJREdFVChtX3dlYlZpZXcpOworICAgIGdfYXNzZXJ0KGd0a193aWRnZXRfZ2V0X3JlYWxp
emVkKHZpZXdXaWRnZXQpKTsKKworICAgIEdPd25QdHI8R2RrRXZlbnQ+IGV2ZW50KGdka19ldmVu
dF9uZXcoZXZlbnRUeXBlKSk7CisgICAgZXZlbnQtPmJ1dHRvbi53aW5kb3cgPSBndGtfd2lkZ2V0
X2dldF93aW5kb3codmlld1dpZGdldCk7CisgICAgZ19vYmplY3RfcmVmKGV2ZW50LT5idXR0b24u
d2luZG93KTsKKworICAgIGV2ZW50LT5idXR0b24udGltZSA9IEdES19DVVJSRU5UX1RJTUU7Cisg
ICAgZXZlbnQtPmJ1dHRvbi54ID0geDsKKyAgICBldmVudC0+YnV0dG9uLnkgPSB5OworICAgIGV2
ZW50LT5idXR0b24uYXhlcyA9IDA7CisgICAgZXZlbnQtPmJ1dHRvbi5zdGF0ZSA9IG1vdXNlTW9k
aWZpZXJzOworICAgIGV2ZW50LT5idXR0b24uYnV0dG9uID0gYnV0dG9uOworCisgICAgZXZlbnQt
PmJ1dHRvbi5kZXZpY2UgPSBnZGtfZGV2aWNlX21hbmFnZXJfZ2V0X2NsaWVudF9wb2ludGVyKGdk
a19kaXNwbGF5X2dldF9kZXZpY2VfbWFuYWdlcihndGtfd2lkZ2V0X2dldF9kaXNwbGF5KHZpZXdX
aWRnZXQpKSk7CisKKyAgICBpbnQgeFJvb3QsIHlSb290OworICAgIGdka193aW5kb3dfZ2V0X3Jv
b3RfY29vcmRzKGd0a193aWRnZXRfZ2V0X3dpbmRvdyh2aWV3V2lkZ2V0KSwgeCwgeSwgJnhSb290
LCAmeVJvb3QpOworICAgIGV2ZW50LT5idXR0b24ueF9yb290ID0geFJvb3Q7CisgICAgZXZlbnQt
PmJ1dHRvbi55X3Jvb3QgPSB5Um9vdDsKKyAgICBndGtfbWFpbl9kb19ldmVudChldmVudC5nZXQo
KSk7Cit9CisKK3N0YXRpYyB2b2lkIHJ1bkphdmFTY3JpcHRSZWFkeUNhbGxiYWNrKEdPYmplY3Qq
LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgV2ViVmlld1Rlc3QqIHRlc3QpCit7CisgICAgdGVzdC0+
bV9qYXZhc2NyaXB0UmVzdWx0ID0gd2Via2l0X3dlYl92aWV3X3J1bl9qYXZhc2NyaXB0X2Zpbmlz
aCh0ZXN0LT5tX3dlYlZpZXcsIHJlc3VsdCwgdGVzdC0+bV9qYXZhc2NyaXB0RXJyb3IpOworICAg
IGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIHJ1
bkphdmFTY3JpcHRGcm9tR1Jlc291cmNlUmVhZHlDYWxsYmFjayhHT2JqZWN0KiwgR0FzeW5jUmVz
dWx0KiByZXN1bHQsIFdlYlZpZXdUZXN0KiB0ZXN0KQoreworICAgIHRlc3QtPm1famF2YXNjcmlw
dFJlc3VsdCA9IHdlYmtpdF93ZWJfdmlld19ydW5famF2YXNjcmlwdF9mcm9tX2dyZXNvdXJjZV9m
aW5pc2godGVzdC0+bV93ZWJWaWV3LCByZXN1bHQsIHRlc3QtPm1famF2YXNjcmlwdEVycm9yKTsK
KyAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworfQorCitXZWJLaXRKYXZh
c2NyaXB0UmVzdWx0KiBXZWJWaWV3VGVzdDo6cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlz
aGVkKGNvbnN0IGNoYXIqIGphdmFzY3JpcHQsIEdFcnJvcioqIGVycm9yKQoreworICAgIGlmICht
X2phdmFzY3JpcHRSZXN1bHQpCisgICAgICAgIHdlYmtpdF9qYXZhc2NyaXB0X3Jlc3VsdF91bnJl
ZihtX2phdmFzY3JpcHRSZXN1bHQpOworICAgIG1famF2YXNjcmlwdFJlc3VsdCA9IDA7CisgICAg
bV9qYXZhc2NyaXB0RXJyb3IgPSBlcnJvcjsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfcnVuX2phdmFz
Y3JpcHQobV93ZWJWaWV3LCBqYXZhc2NyaXB0LCAwLCByZWludGVycHJldF9jYXN0PEdBc3luY1Jl
YWR5Q2FsbGJhY2s+KHJ1bkphdmFTY3JpcHRSZWFkeUNhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19t
YWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworCisgICAgcmV0dXJuIG1famF2YXNjcmlwdFJlc3Vs
dDsKK30KKworV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCogV2ViVmlld1Rlc3Q6OnJ1bkphdmFTY3Jp
cHRGcm9tR1Jlc291cmNlQW5kV2FpdFVudGlsRmluaXNoZWQoY29uc3QgY2hhciogcmVzb3VyY2Us
IEdFcnJvcioqIGVycm9yKQoreworICAgIGlmIChtX2phdmFzY3JpcHRSZXN1bHQpCisgICAgICAg
IHdlYmtpdF9qYXZhc2NyaXB0X3Jlc3VsdF91bnJlZihtX2phdmFzY3JpcHRSZXN1bHQpOworICAg
IG1famF2YXNjcmlwdFJlc3VsdCA9IDA7CisgICAgbV9qYXZhc2NyaXB0RXJyb3IgPSBlcnJvcjsK
KyAgICB3ZWJraXRfd2ViX3ZpZXdfcnVuX2phdmFzY3JpcHRfZnJvbV9ncmVzb3VyY2UobV93ZWJW
aWV3LCByZXNvdXJjZSwgMCwgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihy
dW5KYXZhU2NyaXB0RnJvbUdSZXNvdXJjZVJlYWR5Q2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX21h
aW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisKKyAgICByZXR1cm4gbV9qYXZhc2NyaXB0UmVzdWx0
OworfQorCitzdGF0aWMgY2hhcioganNWYWx1ZVRvQ1N0cmluZyhKU0dsb2JhbENvbnRleHRSZWYg
Y29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKK3sKKyAgICBnX2Fzc2VydCh2YWx1ZSk7CisgICAg
Z19hc3NlcnQoSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIHZhbHVlKSk7CisKKyAgICBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gc3RyaW5nVmFsdWUoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHko
Y29udGV4dCwgdmFsdWUsIDApKTsKKyAgICBnX2Fzc2VydChzdHJpbmdWYWx1ZSk7CisKKyAgICBz
aXplX3QgY1N0cmluZ0xlbmd0aCA9IEpTU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShz
dHJpbmdWYWx1ZS5nZXQoKSk7CisgICAgY2hhciogY1N0cmluZyA9IHN0YXRpY19jYXN0PGNoYXIq
PihnX21hbGxvYyhjU3RyaW5nTGVuZ3RoKSk7CisgICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhz
dHJpbmdWYWx1ZS5nZXQoKSwgY1N0cmluZywgY1N0cmluZ0xlbmd0aCk7CisgICAgcmV0dXJuIGNT
dHJpbmc7Cit9CisKK2NoYXIqIFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5n
KFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQpCit7CisgICAgSlNHbG9i
YWxDb250ZXh0UmVmIGNvbnRleHQgPSB3ZWJraXRfamF2YXNjcmlwdF9yZXN1bHRfZ2V0X2dsb2Jh
bF9jb250ZXh0KGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KGNvbnRleHQpOworICAg
IHJldHVybiBqc1ZhbHVlVG9DU3RyaW5nKGNvbnRleHQsIHdlYmtpdF9qYXZhc2NyaXB0X3Jlc3Vs
dF9nZXRfdmFsdWUoamF2YXNjcmlwdFJlc3VsdCkpOworfQorCitkb3VibGUgV2ViVmlld1Rlc3Q6
OmphdmFzY3JpcHRSZXN1bHRUb051bWJlcihXZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBqYXZhc2Ny
aXB0UmVzdWx0KQoreworICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0ID0gd2Via2l0X2ph
dmFzY3JpcHRfcmVzdWx0X2dldF9nbG9iYWxfY29udGV4dChqYXZhc2NyaXB0UmVzdWx0KTsKKyAg
ICBnX2Fzc2VydChjb250ZXh0KTsKKyAgICBKU1ZhbHVlUmVmIHZhbHVlID0gd2Via2l0X2phdmFz
Y3JpcHRfcmVzdWx0X2dldF92YWx1ZShqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydCh2
YWx1ZSk7CisgICAgZ19hc3NlcnQoSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIHZhbHVlKSk7CisK
KyAgICByZXR1cm4gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIHZhbHVlLCAwKTsKK30KKworYm9v
bCBXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQm9vbGVhbihXZWJLaXRKYXZhc2NyaXB0
UmVzdWx0KiBqYXZhc2NyaXB0UmVzdWx0KQoreworICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250
ZXh0ID0gd2Via2l0X2phdmFzY3JpcHRfcmVzdWx0X2dldF9nbG9iYWxfY29udGV4dChqYXZhc2Ny
aXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydChjb250ZXh0KTsKKyAgICBKU1ZhbHVlUmVmIHZhbHVl
ID0gd2Via2l0X2phdmFzY3JpcHRfcmVzdWx0X2dldF92YWx1ZShqYXZhc2NyaXB0UmVzdWx0KTsK
KyAgICBnX2Fzc2VydCh2YWx1ZSk7CisgICAgZ19hc3NlcnQoSlNWYWx1ZUlzQm9vbGVhbihjb250
ZXh0LCB2YWx1ZSkpOworCisgICAgcmV0dXJuIEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgdmFs
dWUpOworfQorCitib29sIFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0SXNOdWxsKFdlYktp
dEphdmFzY3JpcHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQpCit7CisgICAgSlNHbG9iYWxDb250
ZXh0UmVmIGNvbnRleHQgPSB3ZWJraXRfamF2YXNjcmlwdF9yZXN1bHRfZ2V0X2dsb2JhbF9jb250
ZXh0KGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KGNvbnRleHQpOworICAgIEpTVmFs
dWVSZWYgdmFsdWUgPSB3ZWJraXRfamF2YXNjcmlwdF9yZXN1bHRfZ2V0X3ZhbHVlKGphdmFzY3Jp
cHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KHZhbHVlKTsKKworICAgIHJldHVybiBKU1ZhbHVlSXNO
dWxsKGNvbnRleHQsIHZhbHVlKTsKK30KKworYm9vbCBXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJl
c3VsdElzVW5kZWZpbmVkKFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQp
Cit7CisgICAgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQgPSB3ZWJraXRfamF2YXNjcmlwdF9y
ZXN1bHRfZ2V0X2dsb2JhbF9jb250ZXh0KGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0
KGNvbnRleHQpOworICAgIEpTVmFsdWVSZWYgdmFsdWUgPSB3ZWJraXRfamF2YXNjcmlwdF9yZXN1
bHRfZ2V0X3ZhbHVlKGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KHZhbHVlKTsKKwor
ICAgIHJldHVybiBKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwgdmFsdWUpOworfQorCitzdGF0
aWMgdm9pZCBvblNuYXBzaG90UmVhZHkoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIEdBc3luY1Jl
c3VsdCogcmVzLCBXZWJWaWV3VGVzdCogdGVzdCkKK3sKKyAgICBHT3duUHRyPEdFcnJvcj4gZXJy
b3I7CisgICAgdGVzdC0+bV9zdXJmYWNlID0gd2Via2l0X3dlYl92aWV3X2dldF9zbmFwc2hvdF9m
aW5pc2god2ViX3ZpZXcsIHJlcywgJmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fzc2VydCghdGVz
dC0+bV9zdXJmYWNlIHx8ICFlcnJvci5nZXQoKSk7CisgICAgaWYgKGVycm9yKQorICAgICAgICBn
X2Fzc2VydF9lcnJvcihlcnJvci5nZXQoKSwgV0VCS0lUX1NOQVBTSE9UX0VSUk9SLCBXRUJLSVRf
U05BUFNIT1RfRVJST1JfRkFJTEVEX1RPX0NSRUFURSk7CisgICAgdGVzdC0+cXVpdE1haW5Mb29w
KCk7Cit9CisKK2NhaXJvX3N1cmZhY2VfdCogV2ViVmlld1Rlc3Q6OmdldFNuYXBzaG90QW5kV2Fp
dFVudGlsUmVhZHkoV2ViS2l0U25hcHNob3RSZWdpb24gcmVnaW9uLCBXZWJLaXRTbmFwc2hvdE9w
dGlvbnMgb3B0aW9ucykKK3sKKyAgICBpZiAobV9zdXJmYWNlKQorICAgICAgICBjYWlyb19zdXJm
YWNlX2Rlc3Ryb3kobV9zdXJmYWNlKTsKKyAgICBtX3N1cmZhY2UgPSAwOworICAgIHdlYmtpdF93
ZWJfdmlld19nZXRfc25hcHNob3QobV93ZWJWaWV3LCByZWdpb24sIG9wdGlvbnMsIDAsIHJlaW50
ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4ob25TbmFwc2hvdFJlYWR5KSwgdGhpcyk7
CisgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgIHJldHVybiBtX3N1cmZhY2U7
Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYlZp
ZXdUZXN0LmggYi9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYlZpZXdUZXN0
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ2MGUyMgotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViVmlld1Rlc3Qu
aApAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwu
CisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTEgTW90b3JvbGEgTW9iaWxpdHksIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViVmlld1Rlc3RfaAorI2RlZmluZSBXZWJW
aWV3VGVzdF9oCisKKyNpbmNsdWRlICJUZXN0TWFpbi5oIgorI2luY2x1ZGUgPHdlYmtpdDIvd2Vi
a2l0Mi5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworY2xhc3MgV2ViVmlld1Rl
c3Q6IHB1YmxpYyBUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFdl
YlZpZXdUZXN0KTsKKyAgICBXZWJWaWV3VGVzdCgpOworICAgIHZpcnR1YWwgfldlYlZpZXdUZXN0
KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFVSSShjb25zdCBjaGFyKiB1cmkpOworICAgIHZp
cnR1YWwgdm9pZCBsb2FkSHRtbChjb25zdCBjaGFyKiBodG1sLCBjb25zdCBjaGFyKiBiYXNlVVJJ
KTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFBsYWluVGV4dChjb25zdCBjaGFyKiBwbGFpblRleHQp
OworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVxdWVzdChXZWJLaXRVUklSZXF1ZXN0Kik7CisgICAg
dm9pZCBsb2FkQWx0ZXJuYXRlSFRNTChjb25zdCBjaGFyKiBodG1sLCBjb25zdCBjaGFyKiBjb250
ZW50VVJJLCBjb25zdCBjaGFyKiBiYXNlVVJJKTsKKyAgICB2b2lkIGdvQmFjaygpOworICAgIHZv
aWQgZ29Gb3J3YXJkKCk7CisgICAgdm9pZCBnb1RvQmFja0ZvcndhcmRMaXN0SXRlbShXZWJLaXRC
YWNrRm9yd2FyZExpc3RJdGVtKik7CisKKyAgICB2b2lkIHF1aXRNYWluTG9vcCgpOworICAgIHZv
aWQgcXVpdE1haW5Mb29wQWZ0ZXJQcm9jZXNzaW5nUGVuZGluZ0V2ZW50cygpOworICAgIHZvaWQg
d2FpdChkb3VibGUgc2Vjb25kcyk7CisgICAgdm9pZCB3YWl0VW50aWxMb2FkRmluaXNoZWQoKTsK
KyAgICB2b2lkIHdhaXRVbnRpbFRpdGxlQ2hhbmdlZFRvKGNvbnN0IGNoYXIqIGV4cGVjdGVkVGl0
bGUpOworICAgIHZvaWQgd2FpdFVudGlsVGl0bGVDaGFuZ2VkKCk7CisgICAgdm9pZCBzaG93SW5X
aW5kb3coR3RrV2luZG93VHlwZSA9IEdUS19XSU5ET1dfUE9QVVApOworICAgIHZvaWQgc2hvd0lu
V2luZG93QW5kV2FpdFVudGlsTWFwcGVkKEd0a1dpbmRvd1R5cGUgPSBHVEtfV0lORE9XX1BPUFVQ
KTsKKyAgICB2b2lkIHJlc2l6ZVZpZXcoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKyAgICB2b2lk
IHNlbGVjdEFsbCgpOworICAgIGNvbnN0IGNoYXIqIG1haW5SZXNvdXJjZURhdGEoc2l6ZV90JiBt
YWluUmVzb3VyY2VEYXRhU2l6ZSk7CisKKyAgICB2b2lkIG1vdXNlTW92ZVRvKGludCB4LCBpbnQg
eSwgdW5zaWduZWQgaW50IG1vdXNlTW9kaWZpZXJzID0gMCk7CisgICAgdm9pZCBjbGlja01vdXNl
QnV0dG9uKGludCB4LCBpbnQgeSwgdW5zaWduZWQgaW50IGJ1dHRvbiA9IDEsIHVuc2lnbmVkIGlu
dCBtb3VzZU1vZGlmaWVycyA9IDApOworICAgIHZvaWQga2V5U3Ryb2tlKHVuc2lnbmVkIGludCBr
ZXlWYWwsIHVuc2lnbmVkIGludCBrZXlNb2RpZmllcnMgPSAwKTsKKworICAgIFdlYktpdEphdmFz
Y3JpcHRSZXN1bHQqIHJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZChjb25zdCBjaGFy
KiBqYXZhc2NyaXB0LCBHRXJyb3IqKik7CisgICAgV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCogcnVu
SmF2YVNjcmlwdEZyb21HUmVzb3VyY2VBbmRXYWl0VW50aWxGaW5pc2hlZChjb25zdCBjaGFyKiBy
ZXNvdXJjZSwgR0Vycm9yKiopOworCisgICAgLy8gSmF2YXNjcmlwdCByZXN1bHQgaGVscGVycy4K
KyAgICBzdGF0aWMgY2hhciogamF2YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhXZWJLaXRKYXZhc2Ny
aXB0UmVzdWx0Kik7CisgICAgc3RhdGljIGRvdWJsZSBqYXZhc2NyaXB0UmVzdWx0VG9OdW1iZXIo
V2ViS2l0SmF2YXNjcmlwdFJlc3VsdCopOworICAgIHN0YXRpYyBib29sIGphdmFzY3JpcHRSZXN1
bHRUb0Jvb2xlYW4oV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCopOworICAgIHN0YXRpYyBib29sIGph
dmFzY3JpcHRSZXN1bHRJc051bGwoV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCopOworICAgIHN0YXRp
YyBib29sIGphdmFzY3JpcHRSZXN1bHRJc1VuZGVmaW5lZChXZWJLaXRKYXZhc2NyaXB0UmVzdWx0
Kik7CisKKyAgICBjYWlyb19zdXJmYWNlX3QqIGdldFNuYXBzaG90QW5kV2FpdFVudGlsUmVhZHko
V2ViS2l0U25hcHNob3RSZWdpb24sIFdlYktpdFNuYXBzaG90T3B0aW9ucyk7CisKKyAgICBXZWJL
aXRXZWJWaWV3KiBtX3dlYlZpZXc7CisgICAgR01haW5Mb29wKiBtX21haW5Mb29wOworICAgIENT
dHJpbmcgbV9hY3RpdmVVUkk7CisgICAgR3RrV2lkZ2V0KiBtX3BhcmVudFdpbmRvdzsKKyAgICBD
U3RyaW5nIG1fZXhwZWN0ZWRUaXRsZTsKKyAgICBXZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBtX2ph
dmFzY3JpcHRSZXN1bHQ7CisgICAgR0Vycm9yKiogbV9qYXZhc2NyaXB0RXJyb3I7CisgICAgR093
blB0cjxjaGFyPiBtX3Jlc291cmNlRGF0YTsKKyAgICBzaXplX3QgbV9yZXNvdXJjZURhdGFTaXpl
OworICAgIGNhaXJvX3N1cmZhY2VfdCogbV9zdXJmYWNlOworCitwcml2YXRlOgorICAgIHZvaWQg
ZG9Nb3VzZUJ1dHRvbkV2ZW50KEdka0V2ZW50VHlwZSwgaW50LCBpbnQsIHVuc2lnbmVkIGludCwg
dW5zaWduZWQgaW50KTsKK307CisKKyNlbmRpZiAvLyBXZWJWaWV3VGVzdF9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220306</attachid>
            <date>2014-01-03 09:13:55 -0800</date>
            <delta_ts>2014-01-03 09:16:58 -0800</delta_ts>
            <desc>Updated patch to fix the build with autotools</desc>
            <filename>wk-test-webkit-api.diff</filename>
            <type>text/plain</type>
            <size>1742734</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAzZGMwYjliLi5kNDFkZDc2
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAK
KzIwMTQtMDEtMDMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgor
CisgICAgICAgIFtHVEtdIE1vdmUgYWxsIEdUSy9HT2JqZWN0IHVuaXQgdGVzdHMgdG8gVG9vbHMv
VGVzdFdlYktpdEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTI2MzQyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBHTlVtYWtlZmlsZS5hbTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZS4KKwogMjAxNC0w
MS0wMyAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CiAKICAgICAgICAg
W0NNYWtlXSBUaGUgZm9yd2FyZGluZyBoZWFkZXJzIGdlbmVyYXRlZCBieSBXZWJLaXRNYWNyb3Mu
bTQgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoZSBoZWFkZXJzIGdlbmVyYXRlZCBieSBnZW5lcmF0
ZS1mb3J3YXJkaW5nLWhlYWRlcnMucGwKZGlmZiAtLWdpdCBhL0dOVW1ha2VmaWxlLmFtIGIvR05V
bWFrZWZpbGUuYW0KaW5kZXggYjNmMGEwNC4uNTRkYTJiMSAxMDA2NDQKLS0tIGEvR05VbWFrZWZp
bGUuYW0KKysrIGIvR05VbWFrZWZpbGUuYW0KQEAgLTU5LDcgKzU5LDYgQEAgbm9pbnN0X0hFQURF
UlMgOj0KIG5vaW5zdF9MVExJQlJBUklFUyA6PQogbGliX0xUTElCUkFSSUVTIDo9CiBJRExfQklO
RElOR1MgOj0KLVRFU1RfUFJPR1MgOj0KIFBPRklMRVMgOj0KIFBPX0xJTkdVQVMgOj0KIFVTRVJf
TElOR1VBUyA6PQpAQCAtMjE0LDggKzIxMyw2IEBAIGluY2x1ZGUgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvR05VbWFrZWZpbGUuYW0KIGluY2x1ZGUgU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9H
TlVtYWtlZmlsZS5hbQogCiBpZiBFTkFCTEVfREVWRUxPUEVSX01PREUKLWluY2x1ZGUgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KLWluY2x1ZGUg
U291cmNlL1dlYktpdC9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KIGluY2x1ZGUgU291cmNlL1Ro
aXJkUGFydHkvZ3Rlc3QvR05VbWFrZWZpbGUuYW0KIGluY2x1ZGUgVG9vbHMvR05VbWFrZWZpbGUu
YW0KIGluY2x1ZGUgVG9vbHMvVGVzdFdlYktpdEFQSS9HTlVtYWtlZmlsZS5hbQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdl
TG9nCmluZGV4IGI0OTBhNjUuLmZjOTdkNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3Rr
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
MyBAQAorMjAxNC0wMS0wMyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5j
b20+CisKKyAgICAgICAgW0dUS10gTW92ZSBhbGwgR1RLL0dPYmplY3QgdW5pdCB0ZXN0cyB0byBU
b29scy9UZXN0V2ViS2l0QVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjYzNDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIHRlc3RzL0NNYWtlTGlzdHMudHh0OiBSZW1vdmVkLgorICAgICAgICAqIHRl
c3RzL0dOVW1ha2VmaWxlLmFtOiBSZW1vdmVkLgorCiAyMDE0LTAxLTAyICBDYXJsb3MgR2FyY2lh
IENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIxNjAz
MDQpOiBbR1RLXSBEaXNhYmxlIGxpYnRvb2wgZmFzdCBpbnN0YWxsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay90ZXN0cy9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rl
c3RzL0NNYWtlTGlzdHMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTFhOTlm
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL0NNYWtlTGlzdHMudHh0Cisr
KyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotYWRkX2RlZmluaXRpb25zKC1EVEVTVF9QTFVH
SU5fRElSPSIke0NNQUtFX0xJQlJBUllfT1VUUFVUX0RJUkVDVE9SWX0iKQotaW5jbHVkZV9kaXJl
Y3RvcmllcygKLSAgICAke0NNQUtFX0JJTkFSWV9ESVJ9Ci0gICAgJHtDTUFLRV9TT1VSQ0VfRElS
fS9Tb3VyY2UKLSAgICAke0NNQUtFX1NPVVJDRV9ESVJ9L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9G
b3J3YXJkaW5nSGVhZGVycwotICAgICR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNlL1dlYktpdC9n
dGsKLSAgICAke0NNQUtFX1NPVVJDRV9ESVJ9L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0awot
ICAgICR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNlL1dlYkNvcmUvcGxhdGZvcm0KLSAgICAke0NN
QUtFX1NPVVJDRV9ESVJ9L1NvdXJjZS9XVEYKLSAgICAke0RFUklWRURfU09VUkNFU19ESVJ9Ci0g
ICAgJHtERVJJVkVEX1NPVVJDRVNfV0VCS0lUR1RLX0RJUn0KLSAgICAke0dMSUJfSU5DTFVERV9E
SVJTfQotICAgICR7R1RLM19JTkNMVURFX0RJUlN9Ci0gICAgJHtMSUJTT1VQX0lOQ0xVREVfRElS
U30KLSkKLQotbWFjcm8oQUREX1dLMV9URVNUIHRlc3RfbmFtZSkKLSAgICBhZGRfZXhlY3V0YWJs
ZSgke3Rlc3RfbmFtZX0gJHtBUkdOfSkKLSAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoJHt0ZXN0
X25hbWV9Ci0gICAgICAgIEphdmFTY3JpcHRDb3JlCi0gICAgICAgIFdlYktpdAotICAgICAgICAk
e0dMSUJfTElCUkFSSUVTfQotICAgICAgICAke0dUSzNfTElCUkFSSUVTfQotICAgICAgICAke0xJ
QlNPVVBfTElCUkFSSUVTfQotICAgICkKLSAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoJHt0ZXN0
X25hbWV9IFBST1BFUlRJRVMKLSAgICAgICAgUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZICR7Q01B
S0VfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZfS9XZWJLaXQxR09iamVjdEFQSVRlc3RzCi0gICAg
KQotZW5kbWFjcm8oKQotCi1BRERfV0sxX1RFU1QodGVzdGFwcGxpY2F0aW9uY2FjaGUgdGVzdGFw
cGxpY2F0aW9uY2FjaGUuYykKLUFERF9XSzFfVEVTVCh0ZXN0YXRrcm9sZXMgdGVzdGF0a3JvbGVz
LmMpCi1BRERfV0sxX1RFU1QodGVzdGF0ayB0ZXN0YXRrLmMpCi1BRERfV0sxX1RFU1QodGVzdGNv
bnRleHRtZW51IHRlc3Rjb250ZXh0bWVudS5jKQotQUREX1dLMV9URVNUKHRlc3Rjb3B5YW5kcGFz
dGUgdGVzdGNvcHlhbmRwYXN0ZS5jICR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2d0ay9HdGtWZXJz
aW9uaW5nLmMpCi1BRERfV0sxX1RFU1QodGVzdGRvbWRvY3VtZW50IHRlc3Rkb21kb2N1bWVudC5j
KQotQUREX1dLMV9URVNUKHRlc3Rkb21kb213aW5kb3cgdGVzdGRvbWRvbXdpbmRvdy5jKQotQURE
X1dLMV9URVNUKHRlc3Rkb21ub2RlIHRlc3Rkb21ub2RlLmMpCi1BRERfV0sxX1RFU1QodGVzdGRv
d25sb2FkIHRlc3Rkb3dubG9hZC5jKQotQUREX1dLMV9URVNUKHRlc3RmYXZpY29uZGF0YWJhc2Ug
dGVzdGZhdmljb25kYXRhYmFzZS5jIHRlc3RfdXRpbHMuYykKLUFERF9XSzFfVEVTVCh0ZXN0Z2xv
YmFscyB0ZXN0Z2xvYmFscy5jKQotQUREX1dLMV9URVNUKHRlc3RoaXR0ZXN0cmVzdWx0IHRlc3Ro
aXR0ZXN0cmVzdWx0LmMpCi1BRERfV0sxX1RFU1QodGVzdGh0dHBiYWNrZW5kIHRlc3RodHRwYmFj
a2VuZC5jKQotQUREX1dLMV9URVNUKHRlc3RrZXlldmVudHMgdGVzdGtleWV2ZW50cy5jKQotQURE
X1dLMV9URVNUKHRlc3Rsb2FkaW5nIHRlc3Rsb2FkaW5nLmMpCi1BRERfV0sxX1RFU1QodGVzdG1p
bWVoYW5kbGluZyB0ZXN0bWltZWhhbmRsaW5nLmMgdGVzdF91dGlscy5jKQotQUREX1dLMV9URVNU
KHRlc3RuZXR3b3JrcmVxdWVzdCB0ZXN0bmV0d29ya3JlcXVlc3QuYykKLUFERF9XSzFfVEVTVCh0
ZXN0bmV0d29ya3Jlc3BvbnNlIHRlc3RuZXR3b3JrcmVzcG9uc2UuYykKLUFERF9XSzFfVEVTVCh0
ZXN0d2ViYmFja2ZvcndhcmRsaXN0IHRlc3R3ZWJiYWNrZm9yd2FyZGxpc3QuYykKLUFERF9XSzFf
VEVTVCh0ZXN0d2ViZGF0YXNvdXJjZSB0ZXN0d2ViZGF0YXNvdXJjZS5jKQotQUREX1dLMV9URVNU
KHRlc3R3ZWJmcmFtZSB0ZXN0d2ViZnJhbWUuYykKLUFERF9XSzFfVEVTVCh0ZXN0d2ViaGlzdG9y
eWl0ZW0gdGVzdHdlYmhpc3RvcnlpdGVtLmMpCi1BRERfV0sxX1RFU1QodGVzdHdlYmluc3BlY3Rv
ciB0ZXN0d2ViaW5zcGVjdG9yLmMgdGVzdF91dGlscy5jKQotQUREX1dLMV9URVNUKHRlc3R3ZWJw
bHVnaW5kYXRhYmFzZSB0ZXN0d2VicGx1Z2luZGF0YWJhc2UuYykKLUFERF9XSzFfVEVTVCh0ZXN0
d2VicmVzb3VyY2UgdGVzdHdlYnJlc291cmNlLmMpCi1BRERfV0sxX1RFU1QodGVzdHdlYnNldHRp
bmdzIHRlc3R3ZWJzZXR0aW5ncy5jKQotQUREX1dLMV9URVNUKHRlc3R3ZWJ2aWV3IHRlc3R3ZWJ2
aWV3LmMgdGVzdF91dGlscy5jKQotQUREX1dLMV9URVNUKHRlc3R3aW5kb3cgdGVzdHdpbmRvdy5j
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0gYi9T
b3VyY2UvV2ViS2l0L2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggOGI4NmE3My4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0
cy9HTlVtYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDIwOCArMCwwIEBACi0jIEJ1aWxk
IHVuaXQgdGVzdHMKLXdlYmtpdF90ZXN0c19jZmxhZ3MgPSBcCi0JLWZuby1zdHJpY3QtYWxpYXNp
bmcgXAotCS1JJChzcmNkaXIpL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Gb3J3YXJkaW5nSGVhZGVy
cyBcCi0JLUkkKFdlYktpdCkgXAotCS1JJChHRU5TT1VSQ0VTKSBcCi0JLUkkKHRvcF9idWlsZGRp
cikvU291cmNlL1dlYktpdC9ndGsgXAotCS1JJCh0b3Bfc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncyBcCi0JLUkkKHRvcF9zcmNkaXIpL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmpl
Y3QgXAotCSQoZ2xvYmFsX2NwcGZsYWdzKSBcCi0JJChnbG9iYWxfY2ZsYWdzKSBcCi0JJChqYXZh
c2NyaXB0Y29yZV9jcHBmbGFncykgXAotCSQoRlJFRVRZUEVfQ0ZMQUdTKSBcCi0JJChHTElCX0NG
TEFHUykgXAotCSQoR1RLX0NGTEFHUykgXAotCSQoTElCU09VUF9DRkxBR1MpIFwKLQkkKFhSRU5E
RVJfQ0ZMQUdTKSBcCi0JJChYVF9DRkxBR1MpCi0KLXdlYmtpdF90ZXN0c19sZGFkZCA9IFwKLQls
aWJqYXZhc2NyaXB0Y29yZWd0ay1AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQC5AV0VCS0lU
R1RLX0FQSV9NSU5PUl9WRVJTSU9OQC5sYSBcCi0JbGlid2Via2l0Z3RrLUBXRUJLSVRHVEtfQVBJ
X01BSk9SX1ZFUlNJT05ALkBXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05ALmxhIFwKLQkkKEZS
RUVUWVBFX0xJQlMpIFwKLQkkKEdUS19MSUJTKSBcCi0JJChHTElCX0xJQlMpIFwKLQkkKExJQlNP
VVBfTElCUykgXAotCSQoWFJFTkRFUl9MSUJTKQotCi13ZWJraXRfdGVzdHNfbGRmbGFncyA9IFwK
LQktbm8taW5zdGFsbAotCi1pZiBFTkFCTEVfV0VCS0lUMQotbm9pbnN0X1BST0dSQU1TICs9IFwK
LQlQcm9ncmFtcy9XZWJLaXQxR09iamVjdEFQSVRlc3RzL3Rlc3RhcHBsaWNhdGlvbmNhY2hlIFwK
LQlQcm9ncmFtcy9XZWJLaXQxR09iamVjdEFQSVRlc3RzL3Rlc3Rjb250ZXh0bWVudSBcCi0JUHJv
Z3JhbXMvV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0ZG9tZG9jdW1lbnQgXAotCVByb2dyYW1z
L1dlYktpdDFHT2JqZWN0QVBJVGVzdHMvdGVzdGRvbWRvbXdpbmRvdyBcCi0JUHJvZ3JhbXMvV2Vi
S2l0MUdPYmplY3RBUElUZXN0cy90ZXN0ZG9tbm9kZSBcCi0JUHJvZ3JhbXMvV2ViS2l0MUdPYmpl
Y3RBUElUZXN0cy90ZXN0aHR0cGJhY2tlbmQgXAotCVByb2dyYW1zL1dlYktpdDFHT2JqZWN0QVBJ
VGVzdHMvdGVzdGZhdmljb25kYXRhYmFzZSBcCi0JUHJvZ3JhbXMvV2ViS2l0MUdPYmplY3RBUElU
ZXN0cy90ZXN0bG9hZGluZyBcCi0JUHJvZ3JhbXMvV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0
Z2xvYmFscyBcCi0JUHJvZ3JhbXMvV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0bWltZWhhbmRs
aW5nIFwKLQlQcm9ncmFtcy9XZWJLaXQxR09iamVjdEFQSVRlc3RzL3Rlc3RuZXR3b3JrcmVxdWVz
dCBcCi0JUHJvZ3JhbXMvV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0bmV0d29ya3Jlc3BvbnNl
IFwKLQlQcm9ncmFtcy9XZWJLaXQxR09iamVjdEFQSVRlc3RzL3Rlc3R3ZWJmcmFtZSBcCi0JUHJv
Z3JhbXMvV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0d2ViYmFja2ZvcndhcmRsaXN0IFwKLQlQ
cm9ncmFtcy9XZWJLaXQxR09iamVjdEFQSVRlc3RzL3Rlc3R3ZWJoaXN0b3J5aXRlbSBcCi0JUHJv
Z3JhbXMvV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0d2luZG93IFwKLQlQcm9ncmFtcy9XZWJL
aXQxR09iamVjdEFQSVRlc3RzL3Rlc3Rkb3dubG9hZCBcCi0JUHJvZ3JhbXMvV2ViS2l0MUdPYmpl
Y3RBUElUZXN0cy90ZXN0YXRrIFwKLQlQcm9ncmFtcy9XZWJLaXQxR09iamVjdEFQSVRlc3RzL3Rl
c3RhdGtyb2xlcyBcCi0JUHJvZ3JhbXMvV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0aGl0dGVz
dHJlc3VsdCBcCi0JUHJvZ3JhbXMvV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0d2ViaW5zcGVj
dG9yIFwKLQlQcm9ncmFtcy9XZWJLaXQxR09iamVjdEFQSVRlc3RzL3Rlc3R3ZWJzZXR0aW5ncyBc
Ci0JUHJvZ3JhbXMvV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0d2VicmVzb3VyY2UgXAotCVBy
b2dyYW1zL1dlYktpdDFHT2JqZWN0QVBJVGVzdHMvdGVzdHdlYmRhdGFzb3VyY2UgXAotCVByb2dy
YW1zL1dlYktpdDFHT2JqZWN0QVBJVGVzdHMvdGVzdHdlYnBsdWdpbmRhdGFiYXNlIFwKLQlQcm9n
cmFtcy9XZWJLaXQxR09iamVjdEFQSVRlc3RzL3Rlc3R3ZWJ2aWV3IFwKLQlQcm9ncmFtcy9XZWJL
aXQxR09iamVjdEFQSVRlc3RzL3Rlc3RrZXlldmVudHMgXAotCVByb2dyYW1zL1dlYktpdDFHT2Jq
ZWN0QVBJVGVzdHMvdGVzdGNvcHlhbmRwYXN0ZQotZW5kaWYKLQotIyBBZGQgYWRkaXRpb25hbCB0
ZXN0cyBoZXJlCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RhcHBsaWNhdGlv
bmNhY2hlX1NPVVJDRVMgPSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXBwbGljYXRpb25j
YWNoZS5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RhcHBsaWNhdGlvbmNh
Y2hlX0NGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykKLVByb2dyYW1zX1dlYktpdDFHT2Jq
ZWN0QVBJVGVzdHNfdGVzdGFwcGxpY2F0aW9uY2FjaGVfTERBREQgPSAkKHdlYmtpdF90ZXN0c19s
ZGFkZCkKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGFwcGxpY2F0aW9uY2Fj
aGVfTERGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDFH
T2JqZWN0QVBJVGVzdHNfdGVzdGNvbnRleHRtZW51X1NPVVJDRVMgPSBTb3VyY2UvV2ViS2l0L2d0
ay90ZXN0cy90ZXN0Y29udGV4dG1lbnUuYwotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0
c190ZXN0Y29udGV4dG1lbnVfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQotUHJvZ3Jh
bXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0Y29udGV4dG1lbnVfTERBREQgPSAkKHdlYmtp
dF90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGNvbnRl
eHRtZW51X0xERkxBR1MgPSAkKHdlYmtpdF90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJL
aXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rkb21kb2N1bWVudF9TT1VSQ0VTID0gU291cmNlL1dlYktp
dC9ndGsvdGVzdHMvdGVzdGRvbWRvY3VtZW50LmMKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJ
VGVzdHNfdGVzdGRvbWRvY3VtZW50X0NGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykKLVBy
b2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGRvbWRvY3VtZW50X0xEQUREID0gJCh3
ZWJraXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rk
b21kb2N1bWVudF9MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNf
V2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0ZG9tZG9td2luZG93X1NPVVJDRVMgPSBTb3VyY2Uv
V2ViS2l0L2d0ay90ZXN0cy90ZXN0ZG9tZG9td2luZG93LmMKLVByb2dyYW1zX1dlYktpdDFHT2Jq
ZWN0QVBJVGVzdHNfdGVzdGRvbWRvbXdpbmRvd19DRkxBR1MgPSAkKHdlYmtpdF90ZXN0c19jZmxh
Z3MpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rkb21kb213aW5kb3dfTERB
REQgPSAkKHdlYmtpdF90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVz
dHNfdGVzdGRvbWRvbXdpbmRvd19MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFncykKLQot
UHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0ZG9tbm9kZV9TT1VSQ0VTID0gU291
cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvbW5vZGUuYwotUHJvZ3JhbXNfV2ViS2l0MUdPYmpl
Y3RBUElUZXN0c190ZXN0ZG9tbm9kZV9DRkxBR1MgPSAkKHdlYmtpdF90ZXN0c19jZmxhZ3MpCi1Q
cm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rkb21ub2RlX0xEQUREID0gJCh3ZWJr
aXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rkb21u
b2RlX0xERkxBR1MgPSAkKHdlYmtpdF90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQx
R09iamVjdEFQSVRlc3RzX3Rlc3RodHRwYmFja2VuZF9TT1VSQ0VTID0gU291cmNlL1dlYktpdC9n
dGsvdGVzdHMvdGVzdGh0dHBiYWNrZW5kLmMKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVz
dHNfdGVzdGh0dHBiYWNrZW5kX0NGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykKLVByb2dy
YW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGh0dHBiYWNrZW5kX0xEQUREID0gJCh3ZWJr
aXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RodHRw
YmFja2VuZF9MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2Vi
S2l0MUdPYmplY3RBUElUZXN0c190ZXN0ZmF2aWNvbmRhdGFiYXNlX1NPVVJDRVMgPSBTb3VyY2Uv
V2ViS2l0L2d0ay90ZXN0cy90ZXN0ZmF2aWNvbmRhdGFiYXNlLmMgU291cmNlL1dlYktpdC9ndGsv
dGVzdHMvdGVzdF91dGlscy5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rm
YXZpY29uZGF0YWJhc2VfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQotUHJvZ3JhbXNf
V2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0ZmF2aWNvbmRhdGFiYXNlX0xEQUREID0gJCh3ZWJr
aXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RmYXZp
Y29uZGF0YWJhc2VfTERGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1z
X1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGdsb2JhbHNfU09VUkNFUyA9IFNvdXJjZS9XZWJL
aXQvZ3RrL3Rlc3RzL3Rlc3RnbG9iYWxzLmMKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVz
dHNfdGVzdGdsb2JhbHNfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQotUHJvZ3JhbXNf
V2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0Z2xvYmFsc19MREFERCA9ICQod2Via2l0X3Rlc3Rz
X2xkYWRkKQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0Z2xvYmFsc19MREZM
QUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RB
UElUZXN0c190ZXN0bG9hZGluZ19TT1VSQ0VTID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVz
dGxvYWRpbmcuYwotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0bG9hZGluZ19D
RkxBR1MgPSAkKHdlYmtpdF90ZXN0c19jZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQ
SVRlc3RzX3Rlc3Rsb2FkaW5nX0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFt
c19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rsb2FkaW5nX0xERkxBR1MgPSAkKHdlYmtpdF90
ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RtaW1l
aGFuZGxpbmdfU09VUkNFUyA9IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RtaW1laGFuZGxp
bmcuYyBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0X3V0aWxzLmMKLVByb2dyYW1zX1dlYktp
dDFHT2JqZWN0QVBJVGVzdHNfdGVzdG1pbWVoYW5kbGluZ19DRkxBR1MgPSAkKHdlYmtpdF90ZXN0
c19jZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RtaW1laGFuZGxp
bmdfTERBREQgPSAkKHdlYmtpdF90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0
QVBJVGVzdHNfdGVzdG1pbWVoYW5kbGluZ19MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFn
cykKLQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0bmV0d29ya3JlcXVlc3Rf
U09VUkNFUyA9IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RuZXR3b3JrcmVxdWVzdC5jCi1Q
cm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RuZXR3b3JrcmVxdWVzdF9DRkxBR1Mg
PSAkKHdlYmtpdF90ZXN0c19jZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3Rz
X3Rlc3RuZXR3b3JrcmVxdWVzdF9MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQotUHJvZ3Jh
bXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0bmV0d29ya3JlcXVlc3RfTERGTEFHUyA9ICQo
d2Via2l0X3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNf
dGVzdG5ldHdvcmtyZXNwb25zZV9TT1VSQ0VTID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVz
dG5ldHdvcmtyZXNwb25zZS5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Ru
ZXR3b3JrcmVzcG9uc2VfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQotUHJvZ3JhbXNf
V2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0bmV0d29ya3Jlc3BvbnNlX0xEQUREID0gJCh3ZWJr
aXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RuZXR3
b3JrcmVzcG9uc2VfTERGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1z
X1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYmZyYW1lX1NPVVJDRVMgPSBTb3VyY2UvV2Vi
S2l0L2d0ay90ZXN0cy90ZXN0d2ViZnJhbWUuYwotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElU
ZXN0c190ZXN0d2ViZnJhbWVfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQotUHJvZ3Jh
bXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0d2ViZnJhbWVfTERBREQgPSAkKHdlYmtpdF90
ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYmZyYW1l
X0xERkxBR1MgPSAkKHdlYmtpdF90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQxR09i
amVjdEFQSVRlc3RzX3Rlc3R3ZWJwbHVnaW5kYXRhYmFzZV9TT1VSQ0VTID0gU291cmNlL1dlYktp
dC9ndGsvdGVzdHMvdGVzdHdlYnBsdWdpbmRhdGFiYXNlLmMKLVByb2dyYW1zX1dlYktpdDFHT2Jq
ZWN0QVBJVGVzdHNfdGVzdHdlYnBsdWdpbmRhdGFiYXNlX0NGTEFHUyA9IC1EVEVTVF9QTFVHSU5f
RElSPVwiJHtzaGVsbCBwd2R9LyR7dG9wX2J1aWxkZGlyfS9UZXN0TmV0c2NhcGVQbHVnaW4vLmxp
YnNcIiAkKHdlYmtpdF90ZXN0c19jZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRl
c3RzX3Rlc3R3ZWJwbHVnaW5kYXRhYmFzZV9MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQot
UHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0d2VicGx1Z2luZGF0YWJhc2VfTERG
TEFHUyA9ICQod2Via2l0X3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0
QVBJVGVzdHNfdGVzdHdlYmJhY2tmb3J3YXJkbGlzdF9TT1VSQ0VTID0gU291cmNlL1dlYktpdC9n
dGsvdGVzdHMvdGVzdHdlYmJhY2tmb3J3YXJkbGlzdC5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVj
dEFQSVRlc3RzX3Rlc3R3ZWJiYWNrZm9yd2FyZGxpc3RfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNf
Y2ZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0d2ViYmFja2Zvcndh
cmRsaXN0X0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQxR09i
amVjdEFQSVRlc3RzX3Rlc3R3ZWJiYWNrZm9yd2FyZGxpc3RfTERGTEFHUyA9ICQod2Via2l0X3Rl
c3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYmhp
c3RvcnlpdGVtX1NPVVJDRVMgPSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2ViaGlzdG9y
eWl0ZW0uYwotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0d2ViaGlzdG9yeWl0
ZW1fQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0MUdPYmpl
Y3RBUElUZXN0c190ZXN0d2ViaGlzdG9yeWl0ZW1fTERBREQgPSAkKHdlYmtpdF90ZXN0c19sZGFk
ZCkKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYmhpc3RvcnlpdGVtX0xE
RkxBR1MgPSAkKHdlYmtpdF90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQxR09iamVj
dEFQSVRlc3RzX3Rlc3R3aW5kb3dfU09VUkNFUyA9IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rl
c3R3aW5kb3cuYwotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0d2luZG93X0NG
TEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJ
VGVzdHNfdGVzdHdpbmRvd19MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNf
V2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0d2luZG93X0xERkxBR1MgPSAkKHdlYmtpdF90ZXN0
c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rkb3dubG9h
ZF9TT1VSQ0VTID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvd25sb2FkLmMKLVByb2dy
YW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGRvd25sb2FkX0NGTEFHUyA9ICQod2Via2l0
X3Rlc3RzX2NmbGFncykKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGRvd25s
b2FkX0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVj
dEFQSVRlc3RzX3Rlc3Rkb3dubG9hZF9MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFncykK
LQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0YXRrX1NPVVJDRVMgPSBTb3Vy
Y2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXRrLmMKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJ
VGVzdHNfdGVzdGF0a19DRkxBR1MgPSAkKHdlYmtpdF90ZXN0c19jZmxhZ3MpCi1Qcm9ncmFtc19X
ZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RhdGtfTERBREQgPSAkKHdlYmtpdF90ZXN0c19sZGFk
ZCkKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGF0a19MREZMQUdTID0gJCh3
ZWJraXRfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190
ZXN0YXRrcm9sZXNfU09VUkNFUyA9IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhdGtyb2xl
cy5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RhdGtyb2xlc19DRkxBR1Mg
PSAkKHdlYmtpdF90ZXN0c19jZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3Rz
X3Rlc3RhdGtyb2xlc19MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfV2Vi
S2l0MUdPYmplY3RBUElUZXN0c190ZXN0YXRrcm9sZXNfTERGTEFHUyA9ICQod2Via2l0X3Rlc3Rz
X2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYmluc3Bl
Y3Rvcl9TT1VSQ0VTID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYmluc3BlY3Rvci5j
IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RfdXRpbHMuYwotUHJvZ3JhbXNfV2ViS2l0MUdP
YmplY3RBUElUZXN0c190ZXN0d2ViaW5zcGVjdG9yX0NGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2Nm
bGFncykKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYmluc3BlY3Rvcl9M
REFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElU
ZXN0c190ZXN0d2ViaW5zcGVjdG9yX0xERkxBR1MgPSAkKHdlYmtpdF90ZXN0c19sZGZsYWdzKQot
Ci1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3R3ZWJzZXR0aW5nc19TT1VSQ0VT
ID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYnNldHRpbmdzLmMKLVByb2dyYW1zX1dl
YktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYnNldHRpbmdzX0NGTEFHUyA9ICQod2Via2l0X3Rl
c3RzX2NmbGFncykKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYnNldHRp
bmdzX0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVj
dEFQSVRlc3RzX3Rlc3R3ZWJzZXR0aW5nc19MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFn
cykKLQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0d2VicmVzb3VyY2VfU09V
UkNFUyA9IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJyZXNvdXJjZS5jCi1Qcm9ncmFt
c19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3R3ZWJyZXNvdXJjZV9DRkxBR1MgPSAkKHdlYmtp
dF90ZXN0c19jZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3R3ZWJy
ZXNvdXJjZV9MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQotCi1Qcm9ncmFtc19XZWJLaXQx
R09iamVjdEFQSVRlc3RzX3Rlc3R3ZWJkYXRhc291cmNlX1NPVVJDRVMgPSBTb3VyY2UvV2ViS2l0
L2d0ay90ZXN0cy90ZXN0d2ViZGF0YXNvdXJjZS5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQ
SVRlc3RzX3Rlc3R3ZWJkYXRhc291cmNlX0NGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykK
LVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYmRhdGFzb3VyY2VfTERBREQg
PSAkKHdlYmtpdF90ZXN0c19sZGFkZCkKLQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0
c190ZXN0d2Vidmlld19TT1VSQ0VTID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYnZp
ZXcuYyBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0X3V0aWxzLmMKLVByb2dyYW1zX1dlYktp
dDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYnZpZXdfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2Zs
YWdzKQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0d2Vidmlld19MREFERCA9
ICQod2Via2l0X3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190
ZXN0d2Vidmlld19MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNf
V2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0aGl0dGVzdHJlc3VsdF9TT1VSQ0VTID0gU291cmNl
L1dlYktpdC9ndGsvdGVzdHMvdGVzdGhpdHRlc3RyZXN1bHQuYwotUHJvZ3JhbXNfV2ViS2l0MUdP
YmplY3RBUElUZXN0c190ZXN0aGl0dGVzdHJlc3VsdF9DRkxBR1MgPSAkKHdlYmtpdF90ZXN0c19j
ZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RoaXR0ZXN0cmVzdWx0
X0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQpCi0KLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0
QVBJVGVzdHNfdGVzdGtleWV2ZW50c19TT1VSQ0VTID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMv
dGVzdGtleWV2ZW50cy5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RrZXll
dmVudHNfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0MUdP
YmplY3RBUElUZXN0c190ZXN0a2V5ZXZlbnRzX0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQp
Ci1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RrZXlldmVudHNfTERGTEFHUyA9
ICQod2Via2l0X3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVz
dHNfdGVzdGNvcHlhbmRwYXN0ZV9TT1VSQ0VTID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVz
dGNvcHlhbmRwYXN0ZS5jIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVmVyc2lv
bmluZy5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rjb3B5YW5kcGFzdGVf
Q0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKSBcCi0JLUkkKHNyY2RpcikvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrIFwKLQktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZQotUHJvZ3Jh
bXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0Y29weWFuZHBhc3RlX0xEQUREID0gJCh3ZWJr
aXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rjb3B5
YW5kcGFzdGVfTERGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2xkZmxhZ3MpCi0KLUVYVFJBX0RJU1Qg
Kz0gIFwKLQkkKFdlYktpdCkvdGVzdHMvcmVzb3VyY2VzLyogXAotCSQoV2ViS2l0KS90ZXN0cy90
ZXN0X3V0aWxzLmgKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvcmVzb3Vy
Y2VzL2JsYW5rLmljbyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Jlc291cmNlcy9ibGFuay5p
Y28KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhODQ4YjkuLjAwMDAwMDAKQmluYXJ5
IGZpbGVzIGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvcmVzb3VyY2VzL2JsYW5rLmljbyBhbmQg
L2Rldi9udWxsIGRpZmZlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvcmVz
b3VyY2VzL3Rlc3QuaHRtbCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Jlc291cmNlcy90ZXN0
Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4ZjdkNGYuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3QuaHRtbAorKysgL2Rldi9u
dWxsCkBAIC0xLDYgKzAsMCBAQAotPGh0bWw+Ci08aGVhZD48dGl0bGU+dGVzdDwvdGl0bGU+PC9o
ZWFkPgotPGJvZHk+dGVzdDwvYm9keT4KLTwvaHRtbD4+PC9oZWFkPgotPGJvZHk+dGVzdDwvYm9k
eT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Jlc291cmNl
cy90ZXN0Lm9nZyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Jlc291cmNlcy90ZXN0Lm9nZwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2YzYTNiOS4uMDAwMDAwMApCaW5hcnkgZmls
ZXMgYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy9yZXNvdXJjZXMvdGVzdC5vZ2cgYW5kIC9kZXYv
bnVsbCBkaWZmZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Jlc291cmNl
cy90ZXN0LnBkZiBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Jlc291cmNlcy90ZXN0LnBkZgpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQyNGMxOS4uMDAwMDAwMApCaW5hcnkgZmls
ZXMgYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy9yZXNvdXJjZXMvdGVzdC5wZGYgYW5kIC9kZXYv
bnVsbCBkaWZmZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Jlc291cmNl
cy90ZXN0LnR4dCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Jlc291cmNlcy90ZXN0LnR4dApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWRhZWFmYi4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay90ZXN0cy9yZXNvdXJjZXMvdGVzdC50eHQKKysrIC9kZXYvbnVsbApAQCAt
MSArMCwwIEBACi10ZXN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0
X3V0aWxzLmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0X3V0aWxzLmMKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiYjY0NWQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dC9ndGsvdGVzdHMvdGVzdF91dGlscy5jCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcm5vIFJlbmV2aWVyCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJ0ZXN0X3V0
aWxzLmgiCi0KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KLQot
aW50IHRlc3R1dGlsc19yZWxhdGl2ZV9jaGRpcihjb25zdCBnY2hhciAqdGFyZ2V0RmlsZW5hbWUs
IGNvbnN0IGdjaGFyICpleGVjdXRhYmxlUGF0aCkKLXsKLSAgICAvKiB1c2VyIGNhbiBzZXQgbG9j
YXRpb24gb2YgdGhlIHdlYmtpdCByZXBvc2l0b3J5IGRpcmVjdG9yeSBpZiBpdCBkaWZmZXJzIGZy
b20gYnVpbGQgZGlyZWN0b3J5ICovCi0gICAgY29uc3QgZ2NoYXIgKnJlcG9QYXRoID0gZ19nZXRl
bnYoIldFQktJVFJFUE9ESVIiKTsKLSAgICBpZiAocmVwb1BhdGgpIHsKLSAgICAgICAgaWYgKGdf
Y2hkaXIocmVwb1BhdGgpKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgIH0gZWxzZSBpZiAo
Z19jaGRpcihnX3BhdGhfZ2V0X2Rpcm5hbWUoZXhlY3V0YWJsZVBhdGgpKSkKLSAgICAgICAgICAg
IHJldHVybiAtMTsKLQotICAgIHdoaWxlICghZ19maWxlX3Rlc3QodGFyZ2V0RmlsZW5hbWUsIEdf
RklMRV9URVNUX0VYSVNUUykpIHsKLSAgICAgICAgZ2NoYXIgKnBhdGhOYW1lOwotICAgICAgICBp
ZiAoZ19jaGRpcigiLi4iKSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgZ19hc3Nl
cnQoIWdfc3RyX2VxdWFsKChwYXRoTmFtZSA9IGdfZ2V0X2N1cnJlbnRfZGlyKCkpLCAiLyIpKTsK
LSAgICAgICAgZ19mcmVlKHBhdGhOYW1lKTsKLSAgICB9Ci0KLSAgICBnY2hhciAqZGlyTmFtZSA9
IGdfcGF0aF9nZXRfZGlybmFtZSh0YXJnZXRGaWxlbmFtZSk7Ci0gICAgaWYgKGdfY2hkaXIoZGly
TmFtZSkpIHsKLSAgICAgICAgZ19mcmVlKGRpck5hbWUpOwotICAgICAgICByZXR1cm4gLTE7Ci0g
ICAgfQotCi0gICAgZ19mcmVlKGRpck5hbWUpOwotICAgIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdF91dGlscy5oIGIvU291cmNlL1dlYktpdC9n
dGsvdGVzdHMvdGVzdF91dGlscy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzYw
ZGEzLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RfdXRpbHMuaAor
KysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI2luY2x1ZGUgPGdsaWIuaD4KLQotaW50IHRl
c3R1dGlsc19yZWxhdGl2ZV9jaGRpcihjb25zdCBnY2hhciAqdGFyZ2V0RmlsZW5hbWUsIGNvbnN0
IGdjaGFyICpleGVjdXRhYmxlUGF0aCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay90
ZXN0cy90ZXN0YXBwbGljYXRpb25jYWNoZS5jIGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVz
dGFwcGxpY2F0aW9uY2FjaGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzE4ZjQw
MS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXBwbGljYXRpb25j
YWNoZS5jCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSBMdWthc3ogU2xhY2hjaWFrCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2
ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8
Z2xpYi5oPgotI2luY2x1ZGUgPGdsaWIvZ3ByaW50Zi5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4K
LSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+Ci0KLXN0YXRpYyB2b2lkIHRlc3RfYXBwbGljYXRp
b25fY2FjaGVfbWF4aW11bV9zaXplKCkKLXsKLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgbWF4U2l6
ZSA9IDgxOTI7Ci0gICAgd2Via2l0X2FwcGxpY2F0aW9uX2NhY2hlX3NldF9tYXhpbXVtX3NpemUo
bWF4U2l6ZSk7Ci0KLSAgICAvLyBDcmVhdGluZyBhIFdlYlZpZXcgLSBtYWtlIHN1cmUgdGhhdCBp
dCBkaWRuJ3QgY2hhbmdlIGFueXRoaW5nCi0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdF
QktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0X3JlZl9z
aW5rKHdlYlZpZXcpOwotICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwotCi0gICAgZ19hc3Nl
cnQobWF4U2l6ZSA9PSB3ZWJraXRfYXBwbGljYXRpb25fY2FjaGVfZ2V0X21heGltdW1fc2l6ZSgp
KTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotewotICAgIGd0a190ZXN0
X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLQotICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2FwcGxp
Y2F0aW9uX2NhY2hlL21heGltdW1fc2l6ZSIsCi0gICAgICAgICAgICAgICAgICAgIHRlc3RfYXBw
bGljYXRpb25fY2FjaGVfbWF4aW11bV9zaXplKTsKLQotICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7
Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhdGsuYyBiL1Nv
dXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhdGsuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMmEyZGI2MS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0
YXRrLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDkgSWdhbGlhIFMuTC4KLSAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0
cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4K
LSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8bG9jYWxlLmg+Ci0jaW5jbHVkZSA8dW5p
c3RkLmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgotCi1zdGF0aWMgY29uc3QgY2hhciog
Y2VudGVyZWRDb250ZW50cyA9ICI8aHRtbD48Ym9keT48cCBzdHlsZT0ndGV4dC1hbGlnbjogY2Vu
dGVyOyc+U2hvcnQgbGluZTwvcD48cCBzdHlsZT0ndGV4dC1hbGlnbjogY2VudGVyOyc+TG9uZy1z
aXplIGxpbmUgd2l0aCBzb21lIGZvbyBiYXIgYmF6IGNvbnRlbnQ8L3A+PHAgc3R5bGU9J3RleHQt
YWxpZ246IGNlbnRlcjsnPlNob3J0IGxpbmU8L3A+PHAgc3R5bGU9J3RleHQtYWxpZ246IGNlbnRl
cjsnPlRoaXMgaXMgYSBtdWx0aS1saW5lIHBhcmFncmFwaDxiciAvPndoZXJlIHRoZSBmaXJzdCBs
aW5lPGJyIC8+aXMgdGhlIGJpZ2dlc3Qgb25lPC9wPjwvYm9keT48L2h0bWw+IjsKLQotc3RhdGlj
IGNvbnN0IGNoYXIqIGNvbnRlbnRzID0gIjxodG1sPjxib2R5PjxwPlRoaXMgaXMgYSB0ZXN0LiBU
aGlzIGlzIHRoZSBzZWNvbmQgc2VudGVuY2UuIEFuZCB0aGlzIHRoZSB0aGlyZC48L3A+PC9ib2R5
PjwvaHRtbD4iOwotCi1zdGF0aWMgY29uc3QgY2hhciogY29udGVudHNJblRhYmxlV2l0aEhlYWRl
cnMgPSAiPGh0bWw+PGJvZHk+PHRhYmxlPjx0cj48dGg+Zm9vPC90aD48dGg+YmFyPC90aD48dGgg
Y29sc3Bhbj0nMic+YmF6PC90aD48L3RyPjx0cj48dGg+cXV4PC90aD48dGQ+MTwvdGQ+PHRkPjI8
L3RkPjx0ZD4zPC90ZD48L3RyPjx0cj48dGggcm93c3Bhbj0nMic+cXV1eDwvdGg+PHRkPjQ8L3Rk
Pjx0ZD41PC90ZD48dGQ+NjwvdGQ+PC90cj48dHI+PHRkPjY8L3RkPjx0ZD43PC90ZD48dGQ+ODwv
dGQ+PC90cj48dHI+PHRoPmNvcmdlPC90aD48dGQ+OTwvdGQ+PHRkPjEwPC90ZD48dGQ+MTE8L3Rk
PjwvdHI+PC90YWJsZT48dGFibGU+PHRyPjx0ZD4xPC90ZD48dGQ+MjwvdGQ+PC90cj48dHI+PHRk
PjM8L3RkPjx0ZD40PC90ZD48L3RyPjwvdGFibGU+PC9ib2R5PjwvaHRtbD4iOwotCi1zdGF0aWMg
Y29uc3QgY2hhciogY29udGVudHNXaXRoRXh0cmFuZW91c1doaXRlU3BhY2VzID0gIjxodG1sPjxo
ZWFkPjxib2R5PjxwPlRoaXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYWdyYXBoXG4g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1xu
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvcmtlZCE8L3A+PC9ib2R5PjwvaHRtbD4iOwotCi1zdGF0
aWMgY29uc3QgY2hhciogY29tYm9Cb3hTZWxlY3RvciA9ICI8aHRtbD48Ym9keT48c2VsZWN0Pjxv
cHRpb24gc2VsZWN0ZWQgdmFsdWU9J2Zvbyc+Zm9vPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nYmFy
Jz5iYXI8L29wdGlvbj48L3NlbGVjdD48L2JvZHk+PC9odG1sPiI7Ci0KLXN0YXRpYyBjb25zdCBj
aGFyKiBlbWJlZGRlZE9iamVjdHMgPSAiPGh0bWw+PGJvZHk+PHA+Q2hvb3NlOiA8aW5wdXQgdmFs
dWU9J2ZvbycgdHlwZT0nY2hlY2tib3gnLz5mb28gPGlucHV0IHZhbHVlPSdiYXInIHR5cGU9J2No
ZWNrYm94Jy8+YmFyIChwaWNrIG9uZSk8L3A+PHA+Q2hvb3NlOiA8c2VsZWN0IG5hbWU9J2Zvbyc+
PG9wdGlvbj5iYXI8L29wdGlvbj48b3B0aW9uPmJhejwvb3B0aW9uPjwvc2VsZWN0PiAocGljayBv
bmUpPC9wPjxwPjxpbnB1dCBuYW1lPSdmb29iYXJidXR0b24nIHZhbHVlPSdmb29iYXInIHR5cGU9
J2J1dHRvbicvPjwvcD48L2JvZHk+PC9odG1sPiI7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBmb3Jt
V2l0aFRleHRJbnB1dHMgPSAiPGh0bWw+PGJvZHk+PGZvcm0+PGlucHV0IHR5cGU9J3RleHQnIG5h
bWU9J2VudHJ5JyAvPjxpbnB1dCB0eXBlPSdwYXNzd29yZCcgbmFtZT0ncGFzc3dvcmRFbnRyeScg
Lz48L2Zvcm0+PC9ib2R5PjwvaHRtbD4iOwotCi1zdGF0aWMgY29uc3QgY2hhciogaHlwZXJ0ZXh0
QW5kSHlwZXJsaW5rcyA9ICI8aHRtbD48Ym9keT48cD5BIHBhcmFncmFwaCB3aXRoIG5vIGxpbmtz
IGF0IGFsbDwvcD48cD48YSBocmVmPSdodHRwOi8vZm9vLmJhci5iYXovJz5BIGxpbmU8L2E+IHdp
dGggPGEgaHJlZj0naHR0cDovL2Jhci5iYXouZm9vLyc+YSBsaW5rIGluIHRoZSBtaWRkbGU8L2E+
IGFzIHdlbGwgYXMgYXQgdGhlIGJlZ2lubmluZyBhbmQgPGEgaHJlZj0naHR0cDovL2Jhei5mb28u
YmFyLyc+YXQgdGhlIGVuZDwvYT48L3A+PG9sPjxsaT5MaXN0IGl0ZW0gd2l0aCBhIDxzcGFuPjxh
IGhyZWY9J2h0dHA6Ly9mb28uYmFyLmJhei8nPmxpbmsgaW5zaWRlIGEgc3BhbiBub2RlPC9hPjwv
c3Bhbj48L2xpPjwvb2w+PC9ib2R5PjwvaHRtbD4iOwotCi1zdGF0aWMgY29uc3QgY2hhciogbGF5
b3V0QW5kRGF0YVRhYmxlcyA9ICI8aHRtbD48Ym9keT48dGFibGU+PHRyPjx0aD5PZGQ8L3RoPjx0
aD5FdmVuPC90aD48L3RyPjx0cj48dGQ+MTwvdGQ+PHRkPjI8L3RkPjwvdHI+PC90YWJsZT48dGFi
bGU+PHRyPjx0ZD5mb288L3RkPjx0ZD5iYXI8L3RkPjwvdHI+PC90YWJsZT48L2JvZHk+PC9odG1s
PiI7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBsaW5rc1dpdGhJbmxpbmVJbWFnZXMgPSAiPGh0bWw+
PGhlYWQ+PHN0eWxlPmEuaHR0cDpiZWZvcmUge2NvbnRlbnQ6IHVybChuby1pbWFnZS5wbmcpO308
L3N0eWxlPjxib2R5PjxwPjxhIGNsYXNzPSdodHRwJyBocmVmPSdmb28nPmZvbzwvYT4gYmFyIGJh
ejwvcD48cD5mb28gPGEgY2xhc3M9J2h0dHAnIGhyZWY9J2Jhcic+YmFyPC9hPiBiYXo8L3A+PHA+
Zm9vIGJhciA8YSBjbGFzcz0naHR0cCcgaHJlZj0nYmF6Jz5iYXo8L2E+PC9wPjwvYm9keT48L2h0
bWw+IjsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGxpc3RzT2ZJdGVtcyA9ICI8aHRtbD48Ym9keT48
dWw+PGxpPnRleHQgb25seTwvbGk+PGxpPjxhIGhyZWY9J2Zvbyc+bGluayBvbmx5PC9hPjwvbGk+
PGxpPnRleHQgYW5kIGEgPGEgaHJlZj0nYmFyJz5saW5rPC9hPjwvbGk+PC91bD48b2w+PGxpPnRl
eHQgb25seTwvbGk+PGxpPjxhIGhyZWY9J2Zvbyc+bGluayBvbmx5PC9hPjwvbGk+PGxpPnRleHQg
YW5kIGEgPGEgaHJlZj0nYmFyJz5saW5rPC9hPjwvbGk+PC9vbD48L2JvZHk+PC9odG1sPiI7Ci0K
LXN0YXRpYyBjb25zdCBjaGFyKiB0ZXh0Rm9yQ2FyZXRCcm93c2luZyA9ICI8aHRtbD48Ym9keT48
aDE+QSB0ZXh0IGhlYWRlcjwvaDE+PHA+QSBwYXJhZ3JhcGggPGEgaHJlZj0naHR0cDovL2Zvby5i
YXIuYmF6Lyc+d2l0aCBhIGxpbms8L2E+IGluIHRoZSBtaWRkbGU8L3A+PG9sPjxsaT5BIGxpc3Qg
aXRlbTwvbGk+PGxpPjxzcGFuIHN0eWxlPSdkaXNwbGF5OmJsb2NrOyc+QmxvY2sgc3BhbiBpbiBh
IGxpc3QgaXRlbTwvc3Bhbj48c3Bhbj5JbmxpbmUgc3BhbiBpbiBhIGxpc3QgaXRlbTwvc3Bhbj48
L2xpPjxsaT48YSBocmVmPSdmb28nPjxzcGFuIHN0eWxlPSdkaXNwbGF5OmJsb2NrOyc+QmxvY2sg
c3BhbiBpbiBhIGxpbmsgaW4gYSBsaXN0IGl0ZW08L3NwYW4+PHNwYW4+SW5saW5lIHNwYW4gaW4g
YSBsaW5rIGluIGEgbGlzdCBpdGVtPC9zcGFuPjwvYT48L2xpPjwvb2w+PHNlbGVjdD48b3B0aW9u
IHNlbGVjdGVkIHZhbHVlPSdmb28nPkFuIG9wdGlvbiBpbiBhIGNvbWJvIGJveDwvb3B0aW9uPjwv
c2VsZWN0PjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdmb28nIHZhbHVlPSdmb28gYmFyIGJheicg
Lz48dGFibGU+PHRyPjx0ZD5hIHRhYmxlIGNlbGw8L3RkPjx0ZD48L3RkPjx0ZD48YSBocmVmPSdm
b28nPjxzcGFuIHN0eWxlPSdkaXNwbGF5OmJsb2NrOyc+QmxvY2sgc3BhbiBpbiBhIGxpbmsgaW4g
YSB0YWJsZSBjZWxsPC9zcGFuPjxzcGFuPklubGluZSBzcGFuIGluIGEgbGluayBpbiBhIHRhYmxl
IGNlbGw8L3NwYW4+PC9hPjwvdGQ+PHRkPjxzcGFuIHN0eWxlPSdkaXNwbGF5OmJsb2NrOyc+Qmxv
Y2sgc3BhbiBpbiBhIHRhYmxlIGNlbGw8L3NwYW4+PHNwYW4+SW5saW5lIHNwYW4gaW4gYSB0YWJs
ZSBjZWxsPC9zcGFuPjwvdGQ+PC90cj48L3RhYmxlPjxoND48YSBocmVmPSdmb28nPjxzcGFuIHN0
eWxlPSdkaXNwbGF5OmJsb2NrOyc+QmxvY2sgc3BhbiBpbiBhIGxpbmsgaW4gYSBoZWFkaW5nPC9z
cGFuPjxzcGFuPklubGluZSBzcGFuIGluIGEgbGluayBpbiBhIGhlYWRpbmc8L3NwYW4+PC9oND48
aDQ+PHNwYW4gc3R5bGU9J2Rpc3BsYXk6YmxvY2s7Jz5CbG9jayBzcGFuIGluIGEgaGVhZGluZzwv
c3Bhbj48c3Bhbj5JbmxpbmUgc3BhbiBpbiBhIGhlYWRpbmc8L3NwYW4+PC9oND48L2JvZHk+PC9o
dG1sPiI7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiB0ZXh0Rm9yU2VsZWN0aW9ucyA9ICI8aHRtbD48
Ym9keT48cD5BIHBhcmFncmFwaCB3aXRoIHBsYWluIHRleHQ8L3A+PHA+QSBwYXJhZ3JhcGggd2l0
aCA8YSBocmVmPSdodHRwOi8vd2Via2l0Lm9yZyc+YSBsaW5rPC9hPiBpbiB0aGUgbWlkZGxlPC9w
PjxvbD48bGk+QSBsaXN0IGl0ZW08L2xpPjwvb2w+PHNlbGVjdD48L2JvZHk+PC9odG1sPiI7Ci0K
LXN0YXRpYyBjb25zdCBjaGFyKiB0ZXh0V2l0aEF0dHJpYnV0ZXMgPSAiPGh0bWw+PGhlYWQ+PHN0
eWxlPi5zdDEge2ZvbnQtZmFtaWx5OiBtb25vc3BhY2U7IGNvbG9yOnJnYigxMjAsMTIxLDEyMik7
fSAuc3QyIHt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOyBiYWNrZ3JvdW5kLWNvbG9yOnJnYig4
MCw4MSw4Mik7fTwvc3R5bGU+PC9oZWFkPjxib2R5PjxwIHN0eWxlPVwiZm9udC1zaXplOjE0OyB0
ZXh0LWFsaWduOnJpZ2h0O1wiPlRoaXMgaXMgdGhlIDxpPmZpcnN0PC9pPjxiPiBzZW50ZW5jZSBv
ZiB0aGlzIHRleHQuPC9iPjwvcD48cCBjbGFzcz1cInN0MVwiPlRoaXMgc2VudGVuY2Ugc2hvdWxk
IGhhdmUgYW4gc3R5bGUgYXBwbGllZCA8c3BhbiBjbGFzcz1cInN0MlwiPmFuZCB0aGlzIHBhcnQg
c2hvdWxkIGhhdmUgYW5vdGhlciBvbmU8L3NwYW4+LjwvcD48cD54PHN1Yj4xPC9zdWI+PHN1cD4y
PC9zdXA+PXg8c3ViPjI8L3N1Yj48c3VwPjM8L3N1cD48L3A+PHAgc3R5bGU9XCJ0ZXh0LWFsaWdu
OmNlbnRlcjtcIj5UaGlzIHNlbnRlbmNlIGlzIHRoZSA8c3RyaWtlPmxhc3Q8L3N0cmlrZT4gb25l
LjwvcD48L2JvZHk+PC9odG1sPiI7Ci0KLXN0YXRpYyBBdGtPYmplY3QqIGdldFdlYkFyZWFPYmpl
Y3QoV2ViS2l0V2ViVmlldyogd2ViVmlldykKLXsKLSAgICAvKiBNYW51YWxseSBzcGluIHRoZSBt
YWluIGNvbnRleHQgdG8gbWFrZSBzdXJlIHRoZSBhY2Nlc3NpYmxlCi0gICAgICAgb2JqZWN0cyBh
cmUgcHJvcGVybHkgY3JlYXRlZCBiZWZvcmUgY29udGludWluZy4gKi8KLSAgICB3aGlsZSAoZ19t
YWluX2NvbnRleHRfcGVuZGluZygwKSkKLSAgICAgICAgZ19tYWluX2NvbnRleHRfaXRlcmF0aW9u
KDAsIFRSVUUpOwotCi0gICAgQXRrT2JqZWN0KiByb290T2JqZWN0ID0gZ3RrX3dpZGdldF9nZXRf
YWNjZXNzaWJsZShHVEtfV0lER0VUKHdlYlZpZXcpKTsKLSAgICBpZiAoIXJvb3RPYmplY3QpCi0g
ICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgQXRrT2JqZWN0KiB3ZWJBcmVhT2JqZWN0ID0gYXRr
X29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChyb290T2JqZWN0LCAwKTsKLSAgICBpZiAoIXdl
YkFyZWFPYmplY3QpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgLyogV2UgZG9uJ3QgbmVl
ZCB0aGUgZXh0cmEgcmVmIGhlcmUuICovCi0gICAgZ19vYmplY3RfdW5yZWYod2ViQXJlYU9iamVj
dCk7Ci0KLSAgICByZXR1cm4gd2ViQXJlYU9iamVjdDsKLX0KLQotc3RhdGljIGdjaGFyKiB0ZXh0
Q2FyZXRNb3ZlZFJlc3VsdCA9IDA7Ci0KLXN0YXRpYyB2b2lkIHRleHRDYXJldE1vdmVkQ2FsbGJh
Y2soQXRrVGV4dCogdGV4dCwgZ2ludCBwb3MsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19hc3Nl
cnQoQVRLX0lTX1RFWFQodGV4dCkpOwotCi0gICAgZ19mcmVlKHRleHRDYXJldE1vdmVkUmVzdWx0
KTsKLSAgICBBdGtSb2xlIHJvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKEFUS19PQkpFQ1QodGV4
dCkpOwotICAgIHRleHRDYXJldE1vdmVkUmVzdWx0ID0gZ19zdHJkdXBfcHJpbnRmKCJ8JXN8JWR8
IiwgYXRrX3JvbGVfZ2V0X25hbWUocm9sZSksIHBvcyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RX
ZWJraXRBdGtDYXJldE9mZnNldHMoKQotewotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBX
RUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBnX29iamVjdF9yZWZf
c2luayh3ZWJWaWV3KTsKLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDgw
MCwgNjAwIH07Ci0gICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQod2ViVmll
dyksICZhbGxvY2F0aW9uKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmll
dywgdGV4dEZvckNhcmV0QnJvd3NpbmcsIDAsIDAsIDApOwotCi0gICAgQXRrT2JqZWN0KiBvYmpl
Y3QgPSBnZXRXZWJBcmVhT2JqZWN0KHdlYlZpZXcpOwotICAgIGdfYXNzZXJ0KG9iamVjdCk7Ci0K
LSAgICBBdGtPYmplY3QqIGhlYWRlciA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQo
b2JqZWN0LCAwKTsKLSAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChoZWFkZXIpKTsKLSAgICBnX3Np
Z25hbF9jb25uZWN0KGhlYWRlciwgInRleHQtY2FyZXQtbW92ZWQiLCBHX0NBTExCQUNLKHRleHRD
YXJldE1vdmVkQ2FsbGJhY2spLCAwKTsKLQotICAgIC8qIEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0
byBwbGFjZSB0aGUgY2FyZXQgaW5zaWRlIGEgaGVhZGVyLiAqLwotICAgIGdib29sZWFuIHJlc3Vs
dCA9IGF0a190ZXh0X3NldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQoaGVhZGVyKSwgNSk7Ci0gICAg
Z19hc3NlcnRfY21waW50KHJlc3VsdCwgPT0sIFRSVUUpOwotICAgIGdpbnQgb2Zmc2V0ID0gYXRr
X3RleHRfZ2V0X2NhcmV0X29mZnNldChBVEtfVEVYVChoZWFkZXIpKTsKLSAgICBnX2Fzc2VydF9j
bXBpbnQob2Zmc2V0LCA9PSwgNSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRleHRDYXJldE1vdmVk
UmVzdWx0LCA9PSwgInxoZWFkaW5nfDV8Iik7Ci0KLSAgICBBdGtPYmplY3QqIHBhcmFncmFwaCA9
IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAxKTsKLSAgICBnX2Fzc2Vy
dChBVEtfSVNfVEVYVChwYXJhZ3JhcGgpKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHBhcmFncmFw
aCwgInRleHQtY2FyZXQtbW92ZWQiLCBHX0NBTExCQUNLKHRleHRDYXJldE1vdmVkQ2FsbGJhY2sp
LCAwKTsKLQotICAgIC8qIEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBwbGFjZSB0aGUgY2FyZXQg
aW5zaWRlIGEgcGFyYWdyYXBoIGFuZCBhIGxpbmsuICovCi0gICAgcmVzdWx0ID0gYXRrX3RleHRf
c2V0X2NhcmV0X29mZnNldChBVEtfVEVYVChwYXJhZ3JhcGgpLCA1KTsKLSAgICBnX2Fzc2VydF9j
bXBpbnQocmVzdWx0LCA9PSwgVFJVRSk7Ci0gICAgb2Zmc2V0ID0gYXRrX3RleHRfZ2V0X2NhcmV0
X29mZnNldChBVEtfVEVYVChwYXJhZ3JhcGgpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQob2Zmc2V0
LCA9PSwgNSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRleHRDYXJldE1vdmVkUmVzdWx0LCA9PSwg
InxwYXJhZ3JhcGh8NXwiKTsKLQotICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9jYXJldF9vZmZz
ZXQoQVRLX1RFWFQocGFyYWdyYXBoKSwgMjApOwotICAgIGdfYXNzZXJ0X2NtcGludChyZXN1bHQs
ID09LCBUUlVFKTsKLSAgICBvZmZzZXQgPSBhdGtfdGV4dF9nZXRfY2FyZXRfb2Zmc2V0KEFUS19U
RVhUKHBhcmFncmFwaCkpOwotICAgIGdfYXNzZXJ0X2NtcGludChvZmZzZXQsID09LCAyMCk7Ci0g
ICAgZ19hc3NlcnRfY21wc3RyKHRleHRDYXJldE1vdmVkUmVzdWx0LCA9PSwgInxwYXJhZ3JhcGh8
MjB8Iik7Ci0KLSAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhU
KHBhcmFncmFwaCksIDMwKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQocmVzdWx0LCA9PSwgVFJVRSk7
Ci0gICAgb2Zmc2V0ID0gYXRrX3RleHRfZ2V0X2NhcmV0X29mZnNldChBVEtfVEVYVChwYXJhZ3Jh
cGgpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQob2Zmc2V0LCA9PSwgMzApOwotICAgIGdfYXNzZXJ0
X2NtcHN0cih0ZXh0Q2FyZXRNb3ZlZFJlc3VsdCwgPT0sICJ8cGFyYWdyYXBofDMwfCIpOwotCi0g
ICAgQXRrT2JqZWN0KiBsaW5rID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChwYXJh
Z3JhcGgsIDApOwotICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKGxpbmspKTsKLQotICAgIHJlc3Vs
dCA9IGF0a190ZXh0X3NldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQobGluayksIDUpOwotICAgIGdf
YXNzZXJ0X2NtcGludChyZXN1bHQsID09LCBUUlVFKTsKLSAgICBvZmZzZXQgPSBhdGtfdGV4dF9n
ZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhUKGxpbmspKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQob2Zm
c2V0LCA9PSwgNSk7Ci0gICAgLyogUG9zaXRpb25zIGluc2lkZSBsaW5rcyBhcmUgcmVwb3J0ZWQg
cmVsYXRpdmUgdG8gdGhlIHBhcmFncmFwaC4gKi8KLSAgICBnX2Fzc2VydF9jbXBzdHIodGV4dENh
cmV0TW92ZWRSZXN1bHQsID09LCAifHBhcmFncmFwaHwxN3wiKTsKLQotICAgIEF0a09iamVjdCog
bGlzdCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAyKTsKLSAgICBn
X2Fzc2VydChBVEtfT0JKRUNUKGxpc3QpKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9y
b2xlKGxpc3QpID09IEFUS19ST0xFX0xJU1QpOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfb2Jq
ZWN0X2dldF9uX2FjY2Vzc2libGVfY2hpbGRyZW4obGlzdCksID09LCAzKTsKLQotICAgIEF0a09i
amVjdCogbGlzdEl0ZW0gPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGxpc3QsIDAp
OwotICAgIGxpc3RJdGVtID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChsaXN0LCAy
KTsKLSAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChsaXN0SXRlbSkpOwotCi0gICAgLyogSXQncyBu
b3QgcG9zc2libGUgdG8gcGxhY2UgdGhlIGNhcmV0IGluc2lkZSBhbiBpdGVtJ3MgbWFya2VyLiAq
LwotICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQobGlzdEl0
ZW0pLCAxKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQocmVzdWx0LCA9PSwgRkFMU0UpOwotCi0gICAg
LyogSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHBsYWNlIHRoZSBjYXJldCBpbnNpZGUgYW4gaXRl
bSdzIHRleHQuICovCi0gICAgcmVzdWx0ID0gYXRrX3RleHRfc2V0X2NhcmV0X29mZnNldChBVEtf
VEVYVChsaXN0SXRlbSksIDUpOwotICAgIGdfYXNzZXJ0X2NtcGludChyZXN1bHQsID09LCBUUlVF
KTsKLSAgICBvZmZzZXQgPSBhdGtfdGV4dF9nZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhUKGxpc3RJ
dGVtKSk7Ci0gICAgZ19hc3NlcnRfY21waW50KG9mZnNldCwgPT0sIDUpOwotCi0gICAgQXRrT2Jq
ZWN0KiBwYW5lbCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAzKTsK
LSAgICBnX2Fzc2VydChBVEtfSVNfT0JKRUNUKHBhbmVsKSk7Ci0gICAgZ19hc3NlcnQoYXRrX29i
amVjdF9nZXRfcm9sZShwYW5lbCkgPT0gQVRLX1JPTEVfUEFORUwpOwotCi0gICAgQXRrT2JqZWN0
KiBjb21ib0JveCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQocGFuZWwsIDApOwot
ICAgIGdfYXNzZXJ0KEFUS19JU19PQkpFQ1QoY29tYm9Cb3gpKTsKLSAgICBnX2Fzc2VydChhdGtf
b2JqZWN0X2dldF9yb2xlKGNvbWJvQm94KSA9PSBBVEtfUk9MRV9DT01CT19CT1gpOwotCi0gICAg
QXRrT2JqZWN0KiBtZW51UG9wdXAgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGNv
bWJvQm94LCAwKTsKLSAgICBnX2Fzc2VydChBVEtfSVNfT0JKRUNUKG1lbnVQb3B1cCkpOwotICAg
IGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUobWVudVBvcHVwKSA9PSBBVEtfUk9MRV9NRU5V
KTsKLQotICAgIEF0a09iamVjdCogY29tYm9Cb3hPcHRpb24gPSBhdGtfb2JqZWN0X3JlZl9hY2Nl
c3NpYmxlX2NoaWxkKG1lbnVQb3B1cCwgMCk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX09CSkVDVChj
b21ib0JveE9wdGlvbikpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoY29tYm9C
b3hPcHRpb24pID09IEFUS19ST0xFX01FTlVfSVRFTSk7Ci0KLSAgICAvKiBJdCdzIG5vdCBwb3Nz
aWJsZSB0byBwbGFjZSB0aGUgY2FyZXQgaW5zaWRlIGFuIG9wdGlvbiBmb3IgYSBjb21ib2JveC4g
Ki8KLSAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhUKGNvbWJv
Qm94T3B0aW9uKSwgMSk7Ci0gICAgZ19hc3NlcnRfY21waW50KHJlc3VsdCwgPT0sIEZBTFNFKTsK
LQotICAgIEF0a09iamVjdCogdGV4dEVudHJ5ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9j
aGlsZChwYW5lbCwgMSk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX09CSkVDVCh0ZXh0RW50cnkpKTsK
LSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKHRleHRFbnRyeSkgPT0gQVRLX1JPTEVf
RU5UUlkpOwotCi0gICAgcmVzdWx0ID0gYXRrX3RleHRfc2V0X2NhcmV0X29mZnNldChBVEtfVEVY
VCh0ZXh0RW50cnkpLCA1KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQocmVzdWx0LCA9PSwgVFJVRSk7
Ci0gICAgb2Zmc2V0ID0gYXRrX3RleHRfZ2V0X2NhcmV0X29mZnNldChBVEtfVEVYVCh0ZXh0RW50
cnkpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQob2Zmc2V0LCA9PSwgNSk7Ci0KLSAgICBBdGtPYmpl
Y3QqIHRhYmxlID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDQpOwot
ICAgIGdfYXNzZXJ0KEFUS19JU19PQkpFQ1QodGFibGUpKTsKLSAgICBnX2Fzc2VydChhdGtfb2Jq
ZWN0X2dldF9yb2xlKHRhYmxlKSA9PSBBVEtfUk9MRV9UQUJMRSk7Ci0gICAgZ19hc3NlcnRfY21w
aW50KGF0a19vYmplY3RfZ2V0X25fYWNjZXNzaWJsZV9jaGlsZHJlbih0YWJsZSksID09LCA0KTsK
LQotICAgIEF0a09iamVjdCogdGFibGVDZWxsID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9j
aGlsZCh0YWJsZSwgMCk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZSh0YWJsZUNl
bGwpID09IEFUS19ST0xFX1RBQkxFX0NFTEwpOwotICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9j
YXJldF9vZmZzZXQoQVRLX1RFWFQodGFibGVDZWxsKSwgMik7Ci0gICAgZ19hc3NlcnRfY21waW50
KHJlc3VsdCwgPT0sIFRSVUUpOwotICAgIG9mZnNldCA9IGF0a190ZXh0X2dldF9jYXJldF9vZmZz
ZXQoQVRLX1RFWFQodGFibGVDZWxsKSk7Ci0gICAgZ19hc3NlcnRfY21waW50KG9mZnNldCwgPT0s
IDIpOwotCi0gICAgZ19mcmVlKHRleHRDYXJldE1vdmVkUmVzdWx0KTsKLQotICAgIGdfb2JqZWN0
X3VucmVmKHBhcmFncmFwaCk7Ci0gICAgZ19vYmplY3RfdW5yZWYobGluayk7Ci0gICAgZ19vYmpl
Y3RfdW5yZWYobGlzdCk7Ci0gICAgZ19vYmplY3RfdW5yZWYobGlzdEl0ZW0pOwotICAgIGdfb2Jq
ZWN0X3VucmVmKHBhbmVsKTsKLSAgICBnX29iamVjdF91bnJlZihjb21ib0JveCk7Ci0gICAgZ19v
YmplY3RfdW5yZWYobWVudVBvcHVwKTsKLSAgICBnX29iamVjdF91bnJlZihjb21ib0JveE9wdGlv
bik7Ci0gICAgZ19vYmplY3RfdW5yZWYodGV4dEVudHJ5KTsKLSAgICBnX29iamVjdF91bnJlZih0
YWJsZSk7Ci0gICAgZ19vYmplY3RfdW5yZWYodGFibGVDZWxsKTsKLSAgICBnX29iamVjdF91bnJl
Zih3ZWJWaWV3KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0NhcmV0T2Zmc2V0c0Fu
ZEV4dHJhbm91c1doaXRlU3BhY2VzKCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0g
V0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVm
X3Npbmsod2ViVmlldyk7Ci0gICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA4
MDAsIDYwMCB9OwotICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdlYlZp
ZXcpLCAmYWxsb2NhdGlvbik7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZp
ZXcsIGNvbnRlbnRzV2l0aEV4dHJhbmVvdXNXaGl0ZVNwYWNlcywgMCwgMCwgMCk7Ci0KLSAgICAv
KiBFbmFibGUgY2FyZXQgYnJvd3NpbmcuICovCi0gICAgV2ViS2l0V2ViU2V0dGluZ3MqIHNldHRp
bmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3KTsKLSAgICBnX29iamVj
dF9zZXQoR19PQkpFQ1Qoc2V0dGluZ3MpLCAiZW5hYmxlLWNhcmV0LWJyb3dzaW5nIiwgVFJVRSwg
TlVMTCk7Ci0KLSAgICAvKiBHZXQgdG8gdGhlIGlubmVyIEF0a1RleHQgb2JqZWN0LiAqLwotICAg
IEF0a09iamVjdCogb2JqZWN0ID0gZ2V0V2ViQXJlYU9iamVjdCh3ZWJWaWV3KTsKLSAgICBnX2Fz
c2VydChvYmplY3QpOwotICAgIG9iamVjdCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hp
bGQob2JqZWN0LCAwKTsKLSAgICBnX2Fzc2VydChvYmplY3QpOwotCi0gICAgQXRrVGV4dCogdGV4
dE9iamVjdCA9IEFUS19URVhUKG9iamVjdCk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQodGV4
dE9iamVjdCkpOwotCi0gICAgZ2ludCBjaGFyYWN0ZXJDb3VudCA9IGF0a190ZXh0X2dldF9jaGFy
YWN0ZXJfY291bnQodGV4dE9iamVjdCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGNoYXJhY3RlckNv
dW50LCA9PSwgMjUpOwotCi0gICAgZ2Jvb2xlYW4gcmVzdWx0ID0gYXRrX3RleHRfc2V0X2NhcmV0
X29mZnNldCh0ZXh0T2JqZWN0LCBjaGFyYWN0ZXJDb3VudCAtIDEpOwotICAgIGdfYXNzZXJ0X2Nt
cGludChyZXN1bHQsID09LCBUUlVFKTsKLQotICAgIGdpbnQgY2FyZXRPZmZzZXQgPSBhdGtfdGV4
dF9nZXRfY2FyZXRfb2Zmc2V0KHRleHRPYmplY3QpOwotICAgIGdfYXNzZXJ0X2NtcGludChjYXJl
dE9mZnNldCwgPT0sIGNoYXJhY3RlckNvdW50IC0gMSk7Ci0KLSAgICByZXN1bHQgPSBhdGtfdGV4
dF9zZXRfY2FyZXRfb2Zmc2V0KHRleHRPYmplY3QsIGNoYXJhY3RlckNvdW50KTsKLSAgICBnX2Fz
c2VydF9jbXBpbnQocmVzdWx0LCA9PSwgVFJVRSk7Ci0KLSAgICBjYXJldE9mZnNldCA9IGF0a190
ZXh0X2dldF9jYXJldF9vZmZzZXQodGV4dE9iamVjdCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGNh
cmV0T2Zmc2V0LCA9PSwgY2hhcmFjdGVyQ291bnQpOwotCi0gICAgZ19vYmplY3RfdW5yZWYob2Jq
ZWN0KTsKLSAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKLX0KLQotc3RhdGljIHZvaWQgdGVz
dFdlYmtpdEF0a0NvbWJvQm94KCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VC
S0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3Np
bmsod2ViVmlldyk7Ci0gICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA4MDAs
IDYwMCB9OwotICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdlYlZpZXcp
LCAmYWxsb2NhdGlvbik7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcs
IGNvbWJvQm94U2VsZWN0b3IsIDAsIDAsIDApOwotCi0gICAgQXRrT2JqZWN0KiBvYmplY3QgPSBn
ZXRXZWJBcmVhT2JqZWN0KHdlYlZpZXcpOwotICAgIGdfYXNzZXJ0KG9iamVjdCk7Ci0KLSAgICBB
dGtPYmplY3QqIGZvcm1PYmplY3QgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9i
amVjdCwgMCk7Ci0gICAgZ19hc3NlcnQoZm9ybU9iamVjdCk7Ci0KLSAgICBBdGtPYmplY3QqIGNv
bWJvQm94ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmb3JtT2JqZWN0LCAwKTsK
LSAgICBnX2Fzc2VydChBVEtfSVNfT0JKRUNUKGNvbWJvQm94KSk7Ci0KLSAgICBBdGtPYmplY3Qq
IG1lbnVQb3B1cCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoY29tYm9Cb3gsIDAp
OwotICAgIGdfYXNzZXJ0KEFUS19JU19PQkpFQ1QobWVudVBvcHVwKSk7Ci0KLSAgICBBdGtPYmpl
Y3QqIGl0ZW0xID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChtZW51UG9wdXAsIDAp
OwotICAgIGdfYXNzZXJ0KEFUS19JU19PQkpFQ1QoaXRlbTEpKTsKLQotICAgIEF0a09iamVjdCog
aXRlbTIgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG1lbnVQb3B1cCwgMSk7Ci0g
ICAgZ19hc3NlcnQoQVRLX0lTX09CSkVDVChpdGVtMikpOwotCi0gICAgLyogQ2hlY2sgcm9sZXMu
ICovCi0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShjb21ib0JveCkgPT0gQVRLX1JP
TEVfQ09NQk9fQk9YKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKG1lbnVQb3B1
cCkgPT0gQVRLX1JPTEVfTUVOVSk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShp
dGVtMSkgPT0gQVRLX1JPTEVfTUVOVV9JVEVNKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dl
dF9yb2xlKGl0ZW0yKSA9PSBBVEtfUk9MRV9NRU5VX0lURU0pOwotCi0gICAgLyogQ2hlY2sgdGhl
IGltcGxlbWVudGF0aW9uIG9mIHRoZSBBdGtTZWxlY3Rpb24gaW50ZXJmYWNlLiAqLwotICAgIGdf
YXNzZXJ0KEFUS19JU19TRUxFQ1RJT04oY29tYm9Cb3gpKTsKLSAgICBBdGtTZWxlY3Rpb24qIGF0
a1NlbGVjdGlvbiA9IEFUS19TRUxFQ1RJT04oY29tYm9Cb3gpOwotICAgIGdfYXNzZXJ0X2NtcGlu
dChhdGtfc2VsZWN0aW9uX2dldF9zZWxlY3Rpb25fY291bnQoYXRrU2VsZWN0aW9uKSwgPT0sIDEp
OwotICAgIGdfYXNzZXJ0KGF0a19zZWxlY3Rpb25faXNfY2hpbGRfc2VsZWN0ZWQoYXRrU2VsZWN0
aW9uLCAwKSk7Ci0gICAgZ19hc3NlcnQoIWF0a19zZWxlY3Rpb25faXNfY2hpbGRfc2VsZWN0ZWQo
YXRrU2VsZWN0aW9uLCAxKSk7Ci0gICAgQXRrT2JqZWN0KiBzZWxlY3RlZEl0ZW0gPSBhdGtfc2Vs
ZWN0aW9uX3JlZl9zZWxlY3Rpb24oYXRrU2VsZWN0aW9uLCAwKTsKLSAgICBnX2Fzc2VydChzZWxl
Y3RlZEl0ZW0gPT0gaXRlbTEpOwotICAgIGdfb2JqZWN0X3VucmVmKHNlbGVjdGVkSXRlbSk7Ci0K
LSAgICAvKiBDaGVjayB0aGF0IHRoZSBtZW51IHBvcHVwIGhhcyAwIGxpbmtzIGFuZCBkb2Vzbid0
IGNyYXNoIGZyb20gY2hlY2tpbmcuICovCi0gICAgZ2ludCBuTGlua3MgPSBhdGtfaHlwZXJ0ZXh0
X2dldF9uX2xpbmtzKEFUS19IWVBFUlRFWFQobWVudVBvcHVwKSk7Ci0gICAgZ19hc3NlcnRfY21w
aW50KG5MaW5rcywgPT0sIDApOwotCi0gICAgLyogQ2hlY2sgdGhlIGltcGxlbWVudGF0aW9ucyBv
ZiB0aGUgQXRrQWN0aW9uIGludGVyZmFjZS4gKi8KLSAgICBnX2Fzc2VydChBVEtfSVNfQUNUSU9O
KGNvbWJvQm94KSk7Ci0gICAgQXRrQWN0aW9uKiBhdGtBY3Rpb24gPSBBVEtfQUNUSU9OKGNvbWJv
Qm94KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2FjdGlvbl9nZXRfbl9hY3Rpb25zKGF0a0Fj
dGlvbiksID09LCAxKTsKLSAgICBnX2Fzc2VydChhdGtfYWN0aW9uX2RvX2FjdGlvbihhdGtBY3Rp
b24sIDApKTsKLQotICAgIGdfYXNzZXJ0KEFUS19JU19BQ1RJT04obWVudVBvcHVwKSk7Ci0gICAg
YXRrQWN0aW9uID0gQVRLX0FDVElPTihtZW51UG9wdXApOwotICAgIGdfYXNzZXJ0X2NtcGludChh
dGtfYWN0aW9uX2dldF9uX2FjdGlvbnMoYXRrQWN0aW9uKSwgPT0sIDEpOwotICAgIGdfYXNzZXJ0
KGF0a19hY3Rpb25fZG9fYWN0aW9uKGF0a0FjdGlvbiwgMCkpOwotCi0gICAgZ19hc3NlcnQoQVRL
X0lTX0FDVElPTihpdGVtMSkpOwotICAgIGF0a0FjdGlvbiA9IEFUS19BQ1RJT04oaXRlbTEpOwot
ICAgIGdfYXNzZXJ0X2NtcGludChhdGtfYWN0aW9uX2dldF9uX2FjdGlvbnMoYXRrQWN0aW9uKSwg
PT0sIDEpOwotICAgIGdfYXNzZXJ0KGF0a19hY3Rpb25fZG9fYWN0aW9uKGF0a0FjdGlvbiwgMCkp
OwotCi0gICAgZ19hc3NlcnQoQVRLX0lTX0FDVElPTihpdGVtMikpOwotICAgIGF0a0FjdGlvbiA9
IEFUS19BQ1RJT04oaXRlbTIpOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfYWN0aW9uX2dldF9u
X2FjdGlvbnMoYXRrQWN0aW9uKSwgPT0sIDEpOwotICAgIGdfYXNzZXJ0KGF0a19hY3Rpb25fZG9f
YWN0aW9uKGF0a0FjdGlvbiwgMCkpOwotCi0gICAgLyogQWZ0ZXIgc2VsZWN0aW5nIHRoZSBzZWNv
bmQgaXRlbSwgc2VsZWN0aW9uIHNob3VsZCBoYXZlIGNoYW5nZWQuICovCi0gICAgZ19hc3NlcnRf
Y21waW50KGF0a19zZWxlY3Rpb25fZ2V0X3NlbGVjdGlvbl9jb3VudChhdGtTZWxlY3Rpb24pLCA9
PSwgMSk7Ci0gICAgZ19hc3NlcnQoIWF0a19zZWxlY3Rpb25faXNfY2hpbGRfc2VsZWN0ZWQoYXRr
U2VsZWN0aW9uLCAwKSk7Ci0gICAgZ19hc3NlcnQoYXRrX3NlbGVjdGlvbl9pc19jaGlsZF9zZWxl
Y3RlZChhdGtTZWxlY3Rpb24sIDEpKTsKLSAgICBzZWxlY3RlZEl0ZW0gPSBhdGtfc2VsZWN0aW9u
X3JlZl9zZWxlY3Rpb24oYXRrU2VsZWN0aW9uLCAwKTsKLSAgICBnX2Fzc2VydChzZWxlY3RlZEl0
ZW0gPT0gaXRlbTIpOwotICAgIGdfb2JqZWN0X3VucmVmKHNlbGVjdGVkSXRlbSk7Ci0KLSAgICBn
X29iamVjdF91bnJlZihmb3JtT2JqZWN0KTsKLSAgICBnX29iamVjdF91bnJlZihjb21ib0JveCk7
Ci0gICAgZ19vYmplY3RfdW5yZWYobWVudVBvcHVwKTsKLSAgICBnX29iamVjdF91bnJlZihpdGVt
MSk7Ci0gICAgZ19vYmplY3RfdW5yZWYoaXRlbTIpOwotICAgIGdfb2JqZWN0X3VucmVmKHdlYlZp
ZXcpOwotfQotCi1zdGF0aWMgZ2NoYXIqIGxvYWRpbmdFdmVudHNSZXN1bHQgPSAwOwotCi1zdGF0
aWMgdm9pZCB1cGRhdGVMb2FkaW5nRXZlbnRzUmVzdWx0KGNvbnN0IGdjaGFyKiBzaWduYWxOYW1l
KQotewotICAgIGdfYXNzZXJ0KHNpZ25hbE5hbWUpOwotCi0gICAgZ2NoYXIqIHByZXZpb3VzUmVz
dWx0ID0gbG9hZGluZ0V2ZW50c1Jlc3VsdDsKLSAgICBsb2FkaW5nRXZlbnRzUmVzdWx0ID0gZ19z
dHJkdXBfcHJpbnRmKCIlc3wlcyIsIHByZXZpb3VzUmVzdWx0LCBzaWduYWxOYW1lKTsKLSAgICBn
X2ZyZWUocHJldmlvdXNSZXN1bHQpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gZG9jdW1lbnRMb2Fk
aW5nRXZlbnRDYWxsYmFjayhHU2lnbmFsSW52b2NhdGlvbkhpbnQgKnNpZ25hbEhpbnQsIGd1aW50
IG51bVBhcmFtVmFsdWVzLCBjb25zdCBHVmFsdWUgKnBhcmFtVmFsdWVzLCBncG9pbnRlciBkYXRh
KQotewotICAgIC8vIEF0IGxlYXN0IHdlIHNob3VsZCByZWNlaXZlIHRoZSBpbnN0YW5jZSBlbWl0
dGluZyB0aGUgc2lnbmFsLgotICAgIGlmIChudW1QYXJhbVZhbHVlcyA8IDEpCi0gICAgICAgIHJl
dHVybiBUUlVFOwotCi0gICAgR1NpZ25hbFF1ZXJ5IHNpZ25hbF9xdWVyeTsKLSAgICBnX3NpZ25h
bF9xdWVyeShzaWduYWxIaW50LT5zaWduYWxfaWQsICZzaWduYWxfcXVlcnkpOwotCi0gICAgdXBk
YXRlTG9hZGluZ0V2ZW50c1Jlc3VsdChzaWduYWxfcXVlcnkuc2lnbmFsX25hbWUpOwotICAgIHJl
dHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrRG9jdW1lbnRMb2FkaW5n
RXZlbnRzKCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVX
KHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7
Ci0gICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9OwotICAg
IGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlv
bik7Ci0KLSAgICAvKiBDb25uZWN0IGdsb2JhbGx5IHRvIHNlZSB0aG9zZSBldmVudHMgZHVyaW5n
IGEgZnV0dXJlIGxvYWQuICovCi0gICAgZ3VpbnQgbG9hZENvbXBsZXRlTGlzdGVuZXJJZCA9IGF0
a19hZGRfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGRvY3VtZW50TG9hZGluZ0V2ZW50Q2FsbGJhY2ss
ICJBVEs6QXRrRG9jdW1lbnQ6bG9hZC1jb21wbGV0ZSIpOwotCi0gICAgLyogRG8gdGhlIGxvYWQs
IHNvIHdlIGNhbiBzZWUgdGhvc2UgZXZlbnRzIGhhcHBlbmluZy4gKi8KLSAgICBsb2FkaW5nRXZl
bnRzUmVzdWx0ID0gZ19zdHJkdXAoIiIpOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmlu
Zyh3ZWJWaWV3LCBjb250ZW50cywgMCwgMCwgMCk7Ci0KLSAgICAvKiBUcmlnZ2VyIHRoZSBjcmVh
dGlvbiBvZiB0aGUgZnVsbCBhY2Nlc3NpYmlsaXR5IGhpZXJhcmNoeSBieQotICAgICAgIGFza2lu
ZyBmb3IgdGhlIHdlYkFyZWEgb2JqZWN0LCBzbyB3ZSBjYW4gbGlzdGVuIHRvIGV2ZW50cy4gKi8K
LSAgICBnZXRXZWJBcmVhT2JqZWN0KHdlYlZpZXcpOwotCi0gICAgYXRrX3JlbW92ZV9nbG9iYWxf
ZXZlbnRfbGlzdGVuZXIobG9hZENvbXBsZXRlTGlzdGVuZXJJZCk7Ci0KLSAgICBnX2Fzc2VydF9j
bXBzdHIobG9hZGluZ0V2ZW50c1Jlc3VsdCwgPT0sICJ8bG9hZC1jb21wbGV0ZSIpOwotCi0gICAg
Z19mcmVlKGxvYWRpbmdFdmVudHNSZXN1bHQpOwotICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcp
OwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrRW1iZWRkZWRPYmplY3RzKCkKLXsKLSAg
ICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmll
d19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7Ci0gICAgR3RrQWxsb2Nh
dGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9OwotICAgIGd0a193aWRnZXRfc2l6
ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7Ci0gICAgd2Via2l0
X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIGVtYmVkZGVkT2JqZWN0cywgMCwgMCwgMCk7
Ci0KLSAgICBBdGtPYmplY3QqIG9iamVjdCA9IGdldFdlYkFyZWFPYmplY3Qod2ViVmlldyk7Ci0g
ICAgZ19hc3NlcnQob2JqZWN0KTsKLQotICAgIEF0a1RleHQqIHBhcmFncmFwaDEgPSBBVEtfVEVY
VChhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMCkpOwotICAgIGdfYXNz
ZXJ0KEFUS19JU19URVhUKHBhcmFncmFwaDEpKTsKLSAgICBnX2Fzc2VydChBVEtfSVNfSFlQRVJU
RVhUKHBhcmFncmFwaDEpKTsKLQotICAgIGdpbnQgbkxpbmtzID0gYXRrX2h5cGVydGV4dF9nZXRf
bl9saW5rcyhBVEtfSFlQRVJURVhUKHBhcmFncmFwaDEpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
bkxpbmtzLCA9PSwgMik7Ci0KLSAgICBBdGtIeXBlcmxpbmsqIGhMaW5rID0gYXRrX2h5cGVydGV4
dF9nZXRfbGluayhBVEtfSFlQRVJURVhUKHBhcmFncmFwaDEpLCAwKTsKLSAgICBnX2Fzc2VydChB
VEtfSFlQRVJMSU5LKGhMaW5rKSk7Ci0gICAgQXRrT2JqZWN0KiBoTGlua09iamVjdCA9IGF0a19o
eXBlcmxpbmtfZ2V0X29iamVjdChoTGluaywgMCk7Ci0gICAgZ19hc3NlcnQoQVRLX09CSkVDVCho
TGlua09iamVjdCkpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoaExpbmtPYmpl
Y3QpID09IEFUS19ST0xFX0NIRUNLX0JPWCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBl
cmxpbmtfZ2V0X3N0YXJ0X2luZGV4KGhMaW5rKSwgPT0sIDgpOwotICAgIGdfYXNzZXJ0X2NtcGlu
dChhdGtfaHlwZXJsaW5rX2dldF9lbmRfaW5kZXgoaExpbmspLCA9PSwgOSk7Ci0gICAgZ19hc3Nl
cnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0X25fYW5jaG9ycyhoTGluayksID09LCAxKTsKLSAg
ICBnX2Fzc2VydF9jbXBzdHIoYXRrX2h5cGVybGlua19nZXRfdXJpKGhMaW5rLCAwKSwgPT0sIDAp
OwotCi0gICAgQXRrVGV4dCogcGFyYWdyYXBoMiA9IEFUS19URVhUKGF0a19vYmplY3RfcmVmX2Fj
Y2Vzc2libGVfY2hpbGQob2JqZWN0LCAxKSk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX0hZUEVSVEVY
VChwYXJhZ3JhcGgyKSk7Ci0KLSAgICBuTGlua3MgPSBhdGtfaHlwZXJ0ZXh0X2dldF9uX2xpbmtz
KEFUS19IWVBFUlRFWFQocGFyYWdyYXBoMikpOwotICAgIGdfYXNzZXJ0X2NtcGludChuTGlua3Ms
ID09LCAxKTsKLQotICAgIGhMaW5rID0gYXRrX2h5cGVydGV4dF9nZXRfbGluayhBVEtfSFlQRVJU
RVhUKHBhcmFncmFwaDIpLCAwKTsKLSAgICBnX2Fzc2VydChBVEtfSFlQRVJMSU5LKGhMaW5rKSk7
Ci0gICAgaExpbmtPYmplY3QgPSBhdGtfaHlwZXJsaW5rX2dldF9vYmplY3QoaExpbmssIDApOwot
ICAgIGdfYXNzZXJ0KEFUS19PQkpFQ1QoaExpbmtPYmplY3QpKTsKLSAgICBnX2Fzc2VydChhdGtf
b2JqZWN0X2dldF9yb2xlKGhMaW5rT2JqZWN0KSA9PSBBVEtfUk9MRV9DT01CT19CT1gpOwotICAg
IGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9zdGFydF9pbmRleChoTGluayksID09
LCA4KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfZW5kX2luZGV4KGhM
aW5rKSwgPT0sIDkpOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9uX2Fu
Y2hvcnMoaExpbmspLCA9PSwgMSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKGF0a19oeXBlcmxpbmtf
Z2V0X3VyaShoTGluaywgMCksID09LCAwKTsKLQotICAgIEF0a1RleHQqIHBhcmFncmFwaDMgPSBB
VEtfVEVYVChhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMikpOwotICAg
IGdfYXNzZXJ0KEFUS19JU19IWVBFUlRFWFQocGFyYWdyYXBoMykpOwotCi0gICAgbkxpbmtzID0g
YXRrX2h5cGVydGV4dF9nZXRfbl9saW5rcyhBVEtfSFlQRVJURVhUKHBhcmFncmFwaDMpKTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQobkxpbmtzLCA9PSwgMSk7Ci0KLSAgICBoTGluayA9IGF0a19oeXBl
cnRleHRfZ2V0X2xpbmsoQVRLX0hZUEVSVEVYVChwYXJhZ3JhcGgzKSwgMCk7Ci0gICAgZ19hc3Nl
cnQoQVRLX0hZUEVSTElOSyhoTGluaykpOwotICAgIGhMaW5rT2JqZWN0ID0gYXRrX2h5cGVybGlu
a19nZXRfb2JqZWN0KGhMaW5rLCAwKTsKLSAgICBnX2Fzc2VydChBVEtfT0JKRUNUKGhMaW5rT2Jq
ZWN0KSk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShoTGlua09iamVjdCkgPT0g
QVRLX1JPTEVfUFVTSF9CVVRUT04pOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5r
X2dldF9zdGFydF9pbmRleChoTGluayksID09LCAwKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRr
X2h5cGVybGlua19nZXRfZW5kX2luZGV4KGhMaW5rKSwgPT0sIDEpOwotICAgIGdfYXNzZXJ0X2Nt
cGludChhdGtfaHlwZXJsaW5rX2dldF9uX2FuY2hvcnMoaExpbmspLCA9PSwgMSk7Ci0gICAgZ19h
c3NlcnRfY21wc3RyKGF0a19oeXBlcmxpbmtfZ2V0X3VyaShoTGluaywgMCksID09LCAwKTsKLQot
ICAgIGdfb2JqZWN0X3VucmVmKHBhcmFncmFwaDEpOwotICAgIGdfb2JqZWN0X3VucmVmKHBhcmFn
cmFwaDIpOwotICAgIGdfb2JqZWN0X3VucmVmKHBhcmFncmFwaDMpOwotICAgIGdfb2JqZWN0X3Vu
cmVmKHdlYlZpZXcpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrR2V0SGVhZGVyc0lu
VGFibGUoKQotewotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVco
d2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsK
LSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDgwMCwgNjAwIH07Ci0gICAg
Z3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQod2ViVmlldyksICZhbGxvY2F0aW9u
KTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgY29udGVudHNJblRh
YmxlV2l0aEhlYWRlcnMsIDAsIDAsIDApOwotCi0gICAgQXRrT2JqZWN0KiBheFdlYlZpZXcgPSBn
ZXRXZWJBcmVhT2JqZWN0KHdlYlZpZXcpOwotICAgIGdfYXNzZXJ0KGF4V2ViVmlldyk7Ci0KLSAg
ICAvKiBDaGVjayB0YWJsZSB3aXRoIGJvdGggY29sdW1uIGFuZCByb3cgaGVhZGVycy4gKi8KLSAg
ICBBdGtPYmplY3QqIHRhYmxlID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChheFdl
YlZpZXcsIDApOwotICAgIGdfYXNzZXJ0KHRhYmxlKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0
X2dldF9yb2xlKHRhYmxlKSA9PSBBVEtfUk9MRV9UQUJMRSk7Ci0KLSAgICBBdGtPYmplY3QqIGNv
bEhlYWRlciA9IGF0a190YWJsZV9nZXRfY29sdW1uX2hlYWRlcihBVEtfVEFCTEUodGFibGUpLCAw
KTsKLSAgICBnX2Fzc2VydChjb2xIZWFkZXIpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0
X3JvbGUoY29sSGVhZGVyKSA9PSBBVEtfUk9MRV9UQUJMRV9DRUxMKTsKLSAgICBnX2Fzc2VydChh
dGtfb2JqZWN0X2dldF9pbmRleF9pbl9wYXJlbnQoY29sSGVhZGVyKSA9PSAwKTsKLQotICAgIGNv
bEhlYWRlciA9IGF0a190YWJsZV9nZXRfY29sdW1uX2hlYWRlcihBVEtfVEFCTEUodGFibGUpLCAx
KTsKLSAgICBnX2Fzc2VydChjb2xIZWFkZXIpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0
X3JvbGUoY29sSGVhZGVyKSA9PSBBVEtfUk9MRV9UQUJMRV9DRUxMKTsKLSAgICBnX2Fzc2VydChh
dGtfb2JqZWN0X2dldF9pbmRleF9pbl9wYXJlbnQoY29sSGVhZGVyKSA9PSAxKTsKLQotICAgIGNv
bEhlYWRlciA9IGF0a190YWJsZV9nZXRfY29sdW1uX2hlYWRlcihBVEtfVEFCTEUodGFibGUpLCAy
KTsKLSAgICBnX2Fzc2VydChjb2xIZWFkZXIpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0
X3JvbGUoY29sSGVhZGVyKSA9PSBBVEtfUk9MRV9UQUJMRV9DRUxMKTsKLSAgICBnX2Fzc2VydChh
dGtfb2JqZWN0X2dldF9pbmRleF9pbl9wYXJlbnQoY29sSGVhZGVyKSA9PSAyKTsKLQotICAgIGNv
bEhlYWRlciA9IGF0a190YWJsZV9nZXRfY29sdW1uX2hlYWRlcihBVEtfVEFCTEUodGFibGUpLCAz
KTsKLSAgICBnX2Fzc2VydChjb2xIZWFkZXIpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0
X3JvbGUoY29sSGVhZGVyKSA9PSBBVEtfUk9MRV9UQUJMRV9DRUxMKTsKLSAgICBnX2Fzc2VydChh
dGtfb2JqZWN0X2dldF9pbmRleF9pbl9wYXJlbnQoY29sSGVhZGVyKSA9PSAyKTsKLQotICAgIEF0
a09iamVjdCogcm93SGVhZGVyID0gYXRrX3RhYmxlX2dldF9yb3dfaGVhZGVyKEFUS19UQUJMRSh0
YWJsZSksIDApOwotICAgIGdfYXNzZXJ0KHJvd0hlYWRlcik7Ci0gICAgZ19hc3NlcnQoYXRrX29i
amVjdF9nZXRfcm9sZShyb3dIZWFkZXIpID09IEFUS19ST0xFX1RBQkxFX0NFTEwpOwotICAgIGdf
YXNzZXJ0KGF0a19vYmplY3RfZ2V0X2luZGV4X2luX3BhcmVudChyb3dIZWFkZXIpID09IDApOwot
Ci0gICAgcm93SGVhZGVyID0gYXRrX3RhYmxlX2dldF9yb3dfaGVhZGVyKEFUS19UQUJMRSh0YWJs
ZSksIDEpOwotICAgIGdfYXNzZXJ0KHJvd0hlYWRlcik7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVj
dF9nZXRfcm9sZShyb3dIZWFkZXIpID09IEFUS19ST0xFX1RBQkxFX0NFTEwpOwotICAgIGdfYXNz
ZXJ0KGF0a19vYmplY3RfZ2V0X2luZGV4X2luX3BhcmVudChyb3dIZWFkZXIpID09IDMpOwotCi0g
ICAgcm93SGVhZGVyID0gYXRrX3RhYmxlX2dldF9yb3dfaGVhZGVyKEFUS19UQUJMRSh0YWJsZSks
IDIpOwotICAgIGdfYXNzZXJ0KHJvd0hlYWRlcik7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9n
ZXRfcm9sZShyb3dIZWFkZXIpID09IEFUS19ST0xFX1RBQkxFX0NFTEwpOwotICAgIGdfYXNzZXJ0
KGF0a19vYmplY3RfZ2V0X2luZGV4X2luX3BhcmVudChyb3dIZWFkZXIpID09IDcpOwotCi0gICAg
cm93SGVhZGVyID0gYXRrX3RhYmxlX2dldF9yb3dfaGVhZGVyKEFUS19UQUJMRSh0YWJsZSksIDMp
OwotICAgIGdfYXNzZXJ0KHJvd0hlYWRlcik7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRf
cm9sZShyb3dIZWFkZXIpID09IEFUS19ST0xFX1RBQkxFX0NFTEwpOwotICAgIGdfYXNzZXJ0KGF0
a19vYmplY3RfZ2V0X2luZGV4X2luX3BhcmVudChyb3dIZWFkZXIpID09IDcpOwotCi0gICAgZ19v
YmplY3RfdW5yZWYodGFibGUpOwotCi0gICAgLyogQ2hlY2sgdGFibGUgd2l0aCBubyBoZWFkZXJz
IGF0IGFsbC4gKi8KLSAgICB0YWJsZSA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQo
YXhXZWJWaWV3LCAxKTsKLSAgICBnX2Fzc2VydCh0YWJsZSk7Ci0gICAgZ19hc3NlcnQoYXRrX29i
amVjdF9nZXRfcm9sZSh0YWJsZSkgPT0gQVRLX1JPTEVfVEFCTEUpOwotCi0gICAgY29sSGVhZGVy
ID0gYXRrX3RhYmxlX2dldF9jb2x1bW5faGVhZGVyKEFUS19UQUJMRSh0YWJsZSksIDApOwotICAg
IGdfYXNzZXJ0KGNvbEhlYWRlciA9PSAwKTsKLQotICAgIGNvbEhlYWRlciA9IGF0a190YWJsZV9n
ZXRfY29sdW1uX2hlYWRlcihBVEtfVEFCTEUodGFibGUpLCAxKTsKLSAgICBnX2Fzc2VydChjb2xI
ZWFkZXIgPT0gMCk7Ci0KLSAgICByb3dIZWFkZXIgPSBhdGtfdGFibGVfZ2V0X3Jvd19oZWFkZXIo
QVRLX1RBQkxFKHRhYmxlKSwgMCk7Ci0gICAgZ19hc3NlcnQocm93SGVhZGVyID09IDApOwotCi0g
ICAgcm93SGVhZGVyID0gYXRrX3RhYmxlX2dldF9yb3dfaGVhZGVyKEFUS19UQUJMRSh0YWJsZSks
IDEpOwotICAgIGdfYXNzZXJ0KHJvd0hlYWRlciA9PSAwKTsKLQotICAgIGdfb2JqZWN0X3VucmVm
KHRhYmxlKTsKLSAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKLX0KLQotc3RhdGljIGdpbnQg
Y29tcEF0a0F0dHJpYnV0ZShBdGtBdHRyaWJ1dGUqIGExLCBBdGtBdHRyaWJ1dGUqIGEyKQotewot
ICAgIGdpbnQgc3RyY21wVmFsID0gZ19zdHJjbXAwKGExLT5uYW1lLCBhMi0+bmFtZSk7Ci0gICAg
aWYgKHN0cmNtcFZhbCkKLSAgICAgICAgcmV0dXJuIHN0cmNtcFZhbDsKLSAgICByZXR1cm4gZ19z
dHJjbXAwKGExLT52YWx1ZSwgYTItPnZhbHVlKTsKLX0KLQotc3RhdGljIGdpbnQgY29tcEF0a0F0
dHJpYnV0ZU5hbWUoQXRrQXR0cmlidXRlKiBhMSwgQXRrQXR0cmlidXRlKiBhMikKLXsKLSAgICBy
ZXR1cm4gZ19zdHJjbXAwKGExLT5uYW1lLCBhMi0+bmFtZSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVh
biBhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVOYW1lSGFzVmFsdWUoQXRrQXR0cmlidXRlU2V0KiBz
ZXQsIGNvbnN0IGdjaGFyKiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBnY2hhciogdmFsdWUpCi17Ci0g
ICAgQXRrQXR0cmlidXRlIGF0OwotICAgIGF0Lm5hbWUgPSAoZ2NoYXIqKWF0dHJpYnV0ZU5hbWU7
Ci0gICAgR1NMaXN0KiBlbGVtZW50ID0gZ19zbGlzdF9maW5kX2N1c3RvbShzZXQsICZhdCwgKEdD
b21wYXJlRnVuYyljb21wQXRrQXR0cmlidXRlTmFtZSk7Ci0gICAgcmV0dXJuIGVsZW1lbnQgJiYg
IWdfc3RyY21wMCgoKEF0a0F0dHJpYnV0ZSopKGVsZW1lbnQtPmRhdGEpKS0+dmFsdWUsIHZhbHVl
KTsKLX0KLQotc3RhdGljIGdib29sZWFuIGF0a0F0dHJpYnV0ZVNldENvbnRhaW5zQXR0cmlidXRl
TmFtZShBdGtBdHRyaWJ1dGVTZXQqIHNldCwgY29uc3QgZ2NoYXIqIGF0dHJpYnV0ZU5hbWUpCi17
Ci0gICAgQXRrQXR0cmlidXRlIGF0OwotICAgIGF0Lm5hbWUgPSAoZ2NoYXIqKWF0dHJpYnV0ZU5h
bWU7Ci0gICAgcmV0dXJuIGdfc2xpc3RfZmluZF9jdXN0b20oc2V0LCAmYXQsIChHQ29tcGFyZUZ1
bmMpY29tcEF0a0F0dHJpYnV0ZU5hbWUpID8gdHJ1ZSA6IGZhbHNlOwotfQotCi1zdGF0aWMgZ2Jv
b2xlYW4gYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlSGFzVmFsdWUoQXRrQXR0cmlidXRlU2V0KiBz
ZXQsIEF0a1RleHRBdHRyaWJ1dGUgYXR0cmlidXRlLCBjb25zdCBnY2hhciogdmFsdWUpCi17Ci0g
ICAgcmV0dXJuIGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZU5hbWVIYXNWYWx1ZShzZXQsIGF0a190
ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShhdHRyaWJ1dGUpLCB2YWx1ZSk7Ci19Ci0KLXN0YXRpYyBn
Ym9vbGVhbiBhdGtBdHRyaWJ1dGVTZXRBcmVFcXVhbChBdGtBdHRyaWJ1dGVTZXQqIHNldDEsIEF0
a0F0dHJpYnV0ZVNldCogc2V0MikKLXsKLSAgICBpZiAoIXNldDEpCi0gICAgICAgIHJldHVybiAh
c2V0MjsKLQotICAgIHNldDEgPSBnX3NsaXN0X3NvcnQoc2V0MSwgKEdDb21wYXJlRnVuYyljb21w
QXRrQXR0cmlidXRlKTsKLSAgICBzZXQyID0gZ19zbGlzdF9zb3J0KHNldDIsIChHQ29tcGFyZUZ1
bmMpY29tcEF0a0F0dHJpYnV0ZSk7Ci0KLSAgICB3aGlsZSAoc2V0MSkgewotICAgICAgICBpZiAo
IXNldDIgfHwgY29tcEF0a0F0dHJpYnV0ZShzZXQxLT5kYXRhLCBzZXQyLT5kYXRhKSkKLSAgICAg
ICAgICAgIHJldHVybiBGQUxTRTsKLQotICAgICAgICBzZXQxID0gc2V0MS0+bmV4dDsKLSAgICAg
ICAgc2V0MiA9IHNldDItPm5leHQ7Ci0gICAgfQotCi0gICAgcmV0dXJuICghc2V0Mik7Ci19Ci0K
LXN0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtUZXh0QXR0cmlidXRlcygpCi17Ci0gICAgV2ViS2l0
V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkp
OwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOwotICAgIEd0a0FsbG9jYXRpb24gYWxs
b2NhdGlvbiA9IHsgMCwgMCwgODAwLCA2MDAgfTsKLSAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2Nh
dGUoR1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOwotICAgIHdlYmtpdF93ZWJfdmll
d19sb2FkX3N0cmluZyh3ZWJWaWV3LCB0ZXh0V2l0aEF0dHJpYnV0ZXMsIDAsIDAsIDApOwotCi0g
ICAgQXRrT2JqZWN0KiBvYmplY3QgPSBnZXRXZWJBcmVhT2JqZWN0KHdlYlZpZXcpOwotICAgIGdf
YXNzZXJ0KG9iamVjdCk7Ci0KLSAgICBBdGtPYmplY3QqIGNoaWxkID0gYXRrX29iamVjdF9yZWZf
YWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDApOwotICAgIGdfYXNzZXJ0KGNoaWxkICYmIEFUS19J
U19URVhUKGNoaWxkKSk7Ci0gICAgQXRrVGV4dCogY2hpbGRUZXh0ID0gQVRLX1RFWFQoY2hpbGQp
OwotCi0gICAgZ2ludCBzdGFydE9mZnNldDsKLSAgICBnaW50IGVuZE9mZnNldDsKLSAgICBBdGtB
dHRyaWJ1dGVTZXQqIHNldDEgPSBhdGtfdGV4dF9nZXRfcnVuX2F0dHJpYnV0ZXMoY2hpbGRUZXh0
LCAwLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOwotICAgIGdfYXNzZXJ0X2NtcGludChzdGFy
dE9mZnNldCwgPT0sIDApOwotICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCAxMik7
Ci0gICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0QXJlRXF1YWwoc2V0MSwgMCkpOwotCi0gICAg
QXRrQXR0cmlidXRlU2V0KiBzZXQyID0gYXRrX3RleHRfZ2V0X3J1bl9hdHRyaWJ1dGVzKGNoaWxk
VGV4dCwgMTUsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7Ci0gICAgZ19hc3NlcnRfY21waW50
KHN0YXJ0T2Zmc2V0LCA9PSwgMTIpOwotICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09
LCAxNyk7Ci0gICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlSGFzVmFsdWUoc2V0
MiwgQVRLX1RFWFRfQVRUUl9TVFlMRSwgIml0YWxpYyIpKTsKLQotICAgIEF0a0F0dHJpYnV0ZVNl
dCogc2V0MyA9IGF0a190ZXh0X2dldF9ydW5fYXR0cmlidXRlcyhjaGlsZFRleHQsIDE3LCAmc3Rh
cnRPZmZzZXQsICZlbmRPZmZzZXQpOwotICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwg
PT0sIDE3KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgNDApOwotICAgIGdf
YXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDMsIEFUS19URVhUX0FU
VFJfV0VJR0hULCAiNzAwIikpOwotCi0gICAgQXRrQXR0cmlidXRlU2V0KiBzZXQ0ID0gYXRrX3Rl
eHRfZ2V0X2RlZmF1bHRfYXR0cmlidXRlcyhjaGlsZFRleHQpOwotICAgIGdfYXNzZXJ0KGF0a0F0
dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDQsIEFUS19URVhUX0FUVFJfU1RZTEUsICJu
b3JtYWwiKSk7Ci0gICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlSGFzVmFsdWUo
c2V0NCwgQVRLX1RFWFRfQVRUUl9KVVNUSUZJQ0FUSU9OLCAicmlnaHQiKSk7Ci0gICAgZ19hc3Nl
cnQoYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlSGFzVmFsdWUoc2V0NCwgQVRLX1RFWFRfQVRUUl9T
SVpFLCAiMTQiKSk7Ci0gICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJlZShzZXQxKTsKLSAgICBhdGtf
YXR0cmlidXRlX3NldF9mcmVlKHNldDIpOwotICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0
Myk7Ci0gICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJlZShzZXQ0KTsKLQotICAgIGdfb2JqZWN0X3Vu
cmVmKGNoaWxkKTsKLSAgICBjaGlsZCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQo
b2JqZWN0LCAxKTsKLSAgICBnX2Fzc2VydChjaGlsZCAmJiBBVEtfSVNfVEVYVChjaGlsZCkpOwot
ICAgIGNoaWxkVGV4dCA9IEFUS19URVhUKGNoaWxkKTsKLQotICAgIHNldDEgPSBhdGtfdGV4dF9n
ZXRfZGVmYXVsdF9hdHRyaWJ1dGVzKGNoaWxkVGV4dCk7Ci0gICAgZ19hc3NlcnQoYXRrQXR0cmli
dXRlU2V0QXR0cmlidXRlSGFzVmFsdWUoc2V0MSwgQVRLX1RFWFRfQVRUUl9GQU1JTFlfTkFNRSwg
Im1vbm9zcGFjZSIpKTsKLSAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVIYXNW
YWx1ZShzZXQxLCBBVEtfVEVYVF9BVFRSX1NUWUxFLCAibm9ybWFsIikpOwotICAgIGdfYXNzZXJ0
KGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDEsIEFUS19URVhUX0FUVFJfU1RS
SUtFVEhST1VHSCwgImZhbHNlIikpOwotICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEF0dHJp
YnV0ZUhhc1ZhbHVlKHNldDEsIEFUS19URVhUX0FUVFJfV0VJR0hULCAiNDAwIikpOwotICAgIGdf
YXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDEsIEFUS19URVhUX0FU
VFJfRkdfQ09MT1IsICIxMjAsMTIxLDEyMiIpKTsKLQotICAgIHNldDIgPSBhdGtfdGV4dF9nZXRf
cnVuX2F0dHJpYnV0ZXMoY2hpbGRUZXh0LCA0MywgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsK
LSAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCA0Myk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KGVuZE9mZnNldCwgPT0sIDgwKTsKLSAgICAvKiBDaGVja3MgdGhhdCBkZWZhdWx0IGF0
dHJpYnV0ZXMgb2YgdGV4dCBhcmUgbm90IHJldHVybmVkIHdoZW4gY2FsbGVkIHRvIGF0a190ZXh0
X2dldF9ydW5fYXR0cmlidXRlcy4gKi8KLSAgICBnX2Fzc2VydCghYXRrQXR0cmlidXRlU2V0QXR0
cmlidXRlSGFzVmFsdWUoc2V0MiwgQVRLX1RFWFRfQVRUUl9GR19DT0xPUiwgIjEyMCwxMjEsMTIy
IikpOwotICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDIs
IEFUS19URVhUX0FUVFJfVU5ERVJMSU5FLCAic2luZ2xlIikpOwotICAgIGdfYXNzZXJ0KGF0a0F0
dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDIsIEFUS19URVhUX0FUVFJfQkdfQ09MT1Is
ICI4MCw4MSw4MiIpKTsKLSAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHNldDEpOwotICAgIGF0
a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0Mik7Ci0gICAgZ19vYmplY3RfdW5yZWYoY2hpbGQpOwot
Ci0gICAgY2hpbGQgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMik7
Ci0gICAgZ19hc3NlcnQoY2hpbGQgJiYgQVRLX0lTX1RFWFQoY2hpbGQpKTsKLSAgICBjaGlsZFRl
eHQgPSBBVEtfVEVYVChjaGlsZCk7Ci0KLSAgICBzZXQxID0gYXRrX3RleHRfZ2V0X3J1bl9hdHRy
aWJ1dGVzKGNoaWxkVGV4dCwgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAgICBzZXQy
ID0gYXRrX3RleHRfZ2V0X3J1bl9hdHRyaWJ1dGVzKGNoaWxkVGV4dCwgMywgJnN0YXJ0T2Zmc2V0
LCAmZW5kT2Zmc2V0KTsKLSAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBcmVFcXVhbChzZXQx
LCBzZXQyKSk7Ci0gICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJlZShzZXQyKTsKLQotICAgIHNldDIg
PSBhdGtfdGV4dF9nZXRfcnVuX2F0dHJpYnV0ZXMoY2hpbGRUZXh0LCAxLCAmc3RhcnRPZmZzZXQs
ICZlbmRPZmZzZXQpOwotICAgIHNldDMgPSBhdGtfdGV4dF9nZXRfcnVuX2F0dHJpYnV0ZXMoY2hp
bGRUZXh0LCA1LCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOwotICAgIGdfYXNzZXJ0KGF0a0F0
dHJpYnV0ZVNldEFyZUVxdWFsKHNldDIsIHNldDMpKTsKLSAgICBnX2Fzc2VydCghYXRrQXR0cmli
dXRlU2V0QXJlRXF1YWwoc2V0MSwgc2V0MikpOwotICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUo
c2V0Myk7Ci0KLSAgICBzZXQzID0gYXRrX3RleHRfZ2V0X3J1bl9hdHRyaWJ1dGVzKGNoaWxkVGV4
dCwgMiwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAgICBzZXQ0ID0gYXRrX3RleHRfZ2V0
X3J1bl9hdHRyaWJ1dGVzKGNoaWxkVGV4dCwgNiwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsK
LSAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBcmVFcXVhbChzZXQzLCBzZXQ0KSk7Ci0gICAg
Z19hc3NlcnQoIWF0a0F0dHJpYnV0ZVNldEFyZUVxdWFsKHNldDEsIHNldDMpKTsKLSAgICBnX2Fz
c2VydCghYXRrQXR0cmlidXRlU2V0QXJlRXF1YWwoc2V0Miwgc2V0MykpOwotICAgIGF0a19hdHRy
aWJ1dGVfc2V0X2ZyZWUoc2V0MSk7Ci0gICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJlZShzZXQyKTsK
LSAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHNldDMpOwotICAgIGF0a19hdHRyaWJ1dGVfc2V0
X2ZyZWUoc2V0NCk7Ci0gICAgZ19vYmplY3RfdW5yZWYoY2hpbGQpOwotCi0gICAgY2hpbGQgPSBh
dGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMyk7Ci0gICAgZ19hc3NlcnQo
Y2hpbGQgJiYgQVRLX0lTX1RFWFQoY2hpbGQpKTsKLSAgICBjaGlsZFRleHQgPSBBVEtfVEVYVChj
aGlsZCk7Ci0gICAgc2V0MSA9IGF0a190ZXh0X2dldF9ydW5fYXR0cmlidXRlcyhjaGlsZFRleHQs
IDI0LCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOwotICAgIGdfYXNzZXJ0X2NtcGludChzdGFy
dE9mZnNldCwgPT0sIDIxKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMjUp
OwotICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDEsIEFU
S19URVhUX0FUVFJfU1RSSUtFVEhST1VHSCwgInRydWUiKSk7Ci0KLSAgICBzZXQyID0gYXRrX3Rl
eHRfZ2V0X3J1bl9hdHRyaWJ1dGVzKGNoaWxkVGV4dCwgMjUsICZzdGFydE9mZnNldCwgJmVuZE9m
ZnNldCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMjUpOwotICAgIGdf
YXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCAzMCk7Ci0gICAgZ19hc3NlcnQoYXRrQXR0cmli
dXRlU2V0QXJlRXF1YWwoc2V0MiwgMCkpOwotCi0gICAgc2V0MyA9IGF0a190ZXh0X2dldF9kZWZh
dWx0X2F0dHJpYnV0ZXMoY2hpbGRUZXh0KTsKLSAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRB
dHRyaWJ1dGVIYXNWYWx1ZShzZXQzLCBBVEtfVEVYVF9BVFRSX0pVU1RJRklDQVRJT04sICJjZW50
ZXIiKSk7Ci0gICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJlZShzZXQxKTsKLSAgICBhdGtfYXR0cmli
dXRlX3NldF9mcmVlKHNldDIpOwotICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0Myk7Ci0K
LSAgICBnX29iamVjdF91bnJlZihjaGlsZCk7Ci19Ci0KLXN0YXRpYyBnY2hhciogdGV4dFNlbGVj
dGlvbkNoYW5nZWRSZXN1bHQgPSAwOwotCi1zdGF0aWMgdm9pZCB0ZXh0U2VsZWN0aW9uQ2hhbmdl
ZENhbGxiYWNrKEF0a1RleHQqIHRleHQsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19hc3NlcnQo
QVRLX0lTX1RFWFQodGV4dCkpOwotCi0gICAgZ19mcmVlKHRleHRTZWxlY3Rpb25DaGFuZ2VkUmVz
dWx0KTsKLSAgICBBdGtSb2xlIHJvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKEFUS19PQkpFQ1Qo
dGV4dCkpOwotICAgIGludCBzdGFydE9mZnNldCA9IDA7Ci0gICAgaW50IGVuZE9mZnNldCA9IDA7
Ci0gICAgYXRrX3RleHRfZ2V0X3NlbGVjdGlvbihBVEtfVEVYVCh0ZXh0KSwgMCwgJnN0YXJ0T2Zm
c2V0LCAmZW5kT2Zmc2V0KTsKLSAgICB0ZXh0U2VsZWN0aW9uQ2hhbmdlZFJlc3VsdCA9IGdfc3Ry
ZHVwX3ByaW50ZigifCVzfCVkfCVkfCIsIGF0a19yb2xlX2dldF9uYW1lKHJvbGUpLCBzdGFydE9m
ZnNldCwgZW5kT2Zmc2V0KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a1RleHRTZWxl
Y3Rpb25zKCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVX
KHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7
Ci0gICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9OwotICAg
IGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlv
bik7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIHRleHRGb3JTZWxl
Y3Rpb25zLCAwLCAwLCAwKTsKLQotICAgIEF0a09iamVjdCogb2JqZWN0ID0gZ2V0V2ViQXJlYU9i
amVjdCh3ZWJWaWV3KTsKLSAgICBnX2Fzc2VydChvYmplY3QpOwotCi0gICAgQXRrVGV4dCogcGFy
YWdyYXBoMSA9IEFUS19URVhUKGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0
LCAwKSk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQocGFyYWdyYXBoMSkpOwotICAgIGdfc2ln
bmFsX2Nvbm5lY3QocGFyYWdyYXBoMSwgInRleHQtc2VsZWN0aW9uLWNoYW5nZWQiLCBHX0NBTExC
QUNLKHRleHRTZWxlY3Rpb25DaGFuZ2VkQ2FsbGJhY2spLCAwKTsKLQotICAgIEF0a1RleHQqIHBh
cmFncmFwaDIgPSBBVEtfVEVYVChhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVj
dCwgMSkpOwotICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHBhcmFncmFwaDIpKTsKLSAgICBnX3Np
Z25hbF9jb25uZWN0KHBhcmFncmFwaDIsICJ0ZXh0LXNlbGVjdGlvbi1jaGFuZ2VkIiwgR19DQUxM
QkFDSyh0ZXh0U2VsZWN0aW9uQ2hhbmdlZENhbGxiYWNrKSwgMCk7Ci0KLSAgICBBdGtUZXh0KiBs
aW5rID0gQVRLX1RFWFQoYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChBVEtfT0JKRUNU
KHBhcmFncmFwaDIpLCAwKSk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQobGluaykpOwotCi0g
ICAgQXRrT2JqZWN0KiBsaXN0ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmpl
Y3QsIDIpOwotICAgIGdfYXNzZXJ0KEFUS19PQkpFQ1QobGlzdCkpOwotCi0gICAgQXRrVGV4dCog
bGlzdEl0ZW0gPSBBVEtfVEVYVChhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGxpc3Qs
IDApKTsKLSAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChsaXN0SXRlbSkpOwotCi0gICAgLyogRmly
c3QgcGFyYWdyYXBoIChzaW1wbGUgdGV4dCkuICovCi0KLSAgICAvKiBCYXNpYyBpbml0aWFsIGNo
ZWNrcy4gKi8KLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX3RleHRfZ2V0X25fc2VsZWN0aW9ucyhw
YXJhZ3JhcGgxKSwgPT0sIDApOwotCi0gICAgZ2ludCBzdGFydE9mZnNldDsKLSAgICBnaW50IGVu
ZE9mZnNldDsKLSAgICBnY2hhciogc2VsZWN0ZWRUZXh0ID0gYXRrX3RleHRfZ2V0X3NlbGVjdGlv
bihwYXJhZ3JhcGgxLCAwLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOwotICAgIGdfYXNzZXJ0
X2NtcGludChzdGFydE9mZnNldCwgPT0sIDApOwotICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZz
ZXQsID09LCAwKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRUZXh0LCA9PSwgMCk7Ci0g
ICAgZ19mcmVlIChzZWxlY3RlZFRleHQpOwotCi0gICAgLyogVHJ5IHJlbW92aW5nIGEgbm9uIGV4
aXN0aW5nICh5ZXQpIHNlbGVjdGlvbi4gKi8KLSAgICBnYm9vbGVhbiByZXN1bHQgPSBhdGtfdGV4
dF9yZW1vdmVfc2VsZWN0aW9uKHBhcmFncmFwaDEsIDApOwotICAgIGdfYXNzZXJ0KCFyZXN1bHQp
OwotCi0gICAgLyogVHJ5IHNldHRpbmcgYSAwLWNoYXIgc2VsZWN0aW9uLiAqLwotICAgIHJlc3Vs
dCA9IGF0a190ZXh0X3NldF9zZWxlY3Rpb24ocGFyYWdyYXBoMSwgMCwgNSwgNSk7Ci0gICAgZ19h
c3NlcnQocmVzdWx0KTsKLQotICAgIC8qIE1ha2UgYSBzZWxlY3Rpb24gYW5kIHRlc3QgaXQuICov
Ci0gICAgcmVzdWx0ID0gYXRrX3RleHRfc2V0X3NlbGVjdGlvbihwYXJhZ3JhcGgxLCAwLCA1LCAy
NSk7Ci0gICAgZ19hc3NlcnQocmVzdWx0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX3RleHRf
Z2V0X25fc2VsZWN0aW9ucyhwYXJhZ3JhcGgxKSwgPT0sIDEpOwotICAgIGdfYXNzZXJ0X2NtcHN0
cih0ZXh0U2VsZWN0aW9uQ2hhbmdlZFJlc3VsdCwgPT0sICJ8cGFyYWdyYXBofDV8MjV8Iik7Ci0g
ICAgc2VsZWN0ZWRUZXh0ID0gYXRrX3RleHRfZ2V0X3NlbGVjdGlvbihwYXJhZ3JhcGgxLCAwLCAm
c3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOwotICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNl
dCwgPT0sIDUpOwotICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCAyNSk7Ci0gICAg
Z19hc3NlcnRfY21wc3RyKHNlbGVjdGVkVGV4dCwgPT0sICJhZ3JhcGggd2l0aCBwbGFpbiB0ZSIp
OwotICAgIGdfZnJlZSAoc2VsZWN0ZWRUZXh0KTsKLQotICAgIC8qIFRyeSByZW1vdmluZyB0aGUg
c2VsZWN0aW9uIGZyb20gb3RoZXIgQXRrVGV4dCBvYmplY3QgKHNob3VsZCBmYWlsKS4gKi8KLSAg
ICByZXN1bHQgPSBhdGtfdGV4dF9yZW1vdmVfc2VsZWN0aW9uKHBhcmFncmFwaDIsIDApOwotICAg
IGdfYXNzZXJ0KCFyZXN1bHQpOwotCi0gICAgLyogUmVtb3ZlIHRoZSBzZWxlY3Rpb24gYW5kIHRl
c3QgZXZlcnl0aGluZyBhZ2Fpbi4gKi8KLSAgICByZXN1bHQgPSBhdGtfdGV4dF9yZW1vdmVfc2Vs
ZWN0aW9uKHBhcmFncmFwaDEsIDApOwotICAgIGdfYXNzZXJ0KHJlc3VsdCk7Ci0gICAgZ19hc3Nl
cnRfY21waW50KGF0a190ZXh0X2dldF9uX3NlbGVjdGlvbnMocGFyYWdyYXBoMSksID09LCAwKTsK
LSAgICBzZWxlY3RlZFRleHQgPSBhdGtfdGV4dF9nZXRfc2VsZWN0aW9uKHBhcmFncmFwaDEsIDAs
ICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7Ci0gICAgLyogTm93IG9mZnNldHMgc2hvdWxkIGJl
IHRoZSBzYW1lLCBzZXQgdG8gdGhlIGxhc3QgcG9zaXRpb24gb2YgdGhlIGNhcmV0LiAqLwotICAg
IGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIGVuZE9mZnNldCk7Ci0gICAgZ19hc3Nl
cnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMjUpOwotICAgIGdfYXNzZXJ0X2NtcGludChlbmRP
ZmZzZXQsID09LCAyNSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkVGV4dCwgPT0sIDAp
OwotICAgIGdfZnJlZSAoc2VsZWN0ZWRUZXh0KTsKLQotICAgIC8qIFNlY29uZCBwYXJhZ3JhcGgg
KHRleHQgKyBsaW5rICsgdGV4dCkuICovCi0KLSAgICAvKiBTZXQgYSBzZWxlY3Rpb24gcGFydGlh
bGx5IGNvdmVyaW5nIHRoZSBsaW5rIGFuZCB0ZXN0IGl0LiAqLwotICAgIHJlc3VsdCA9IGF0a190
ZXh0X3NldF9zZWxlY3Rpb24ocGFyYWdyYXBoMiwgMCwgNywgMjEpOwotICAgIGdfYXNzZXJ0KHJl
c3VsdCk7Ci0KLSAgICAvKiBUZXN0IHRoZSBwYXJhZ3JhcGggZmlyc3QuICovCi0gICAgZ19hc3Nl
cnRfY21waW50KGF0a190ZXh0X2dldF9uX3NlbGVjdGlvbnMocGFyYWdyYXBoMiksID09LCAxKTsK
LSAgICBzZWxlY3RlZFRleHQgPSBhdGtfdGV4dF9nZXRfc2VsZWN0aW9uKHBhcmFncmFwaDIsIDAs
ICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zm
c2V0LCA9PSwgNyk7Ci0gICAgZ19hc3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0sIDIxKTsKLSAg
ICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRUZXh0LCA9PSwgInJhcGggd2l0aCBhIGxpIik7Ci0g
ICAgZ19mcmVlIChzZWxlY3RlZFRleHQpOwotCi0gICAgLyogTm93IHRlc3QganVzdCB0aGUgbGlu
ay4gKi8KLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX3RleHRfZ2V0X25fc2VsZWN0aW9ucyhsaW5r
KSwgPT0sIDEpOwotICAgIHNlbGVjdGVkVGV4dCA9IGF0a190ZXh0X2dldF9zZWxlY3Rpb24obGlu
aywgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoc3Rh
cnRPZmZzZXQsID09LCAwKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgNCk7
Ci0gICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkVGV4dCwgPT0sICJhIGxpIik7Ci0gICAgZ19m
cmVlIChzZWxlY3RlZFRleHQpOwotCi0gICAgLyogTWFrZSBhIHNlbGVjdGlvbiBhZnRlciB0aGUg
bGluayBhbmQgY2hlY2sgc2VsZWN0aW9uIGZvciB0aGUgd2hvbGUgcGFyYWdyYXBoLiAqLwotICAg
IHJlc3VsdCA9IGF0a190ZXh0X3NldF9zZWxlY3Rpb24ocGFyYWdyYXBoMiwgMCwgMjcsIDM3KTsK
LSAgICBnX2Fzc2VydChyZXN1bHQpOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfdGV4dF9nZXRf
bl9zZWxlY3Rpb25zKHBhcmFncmFwaDIpLCA9PSwgMSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRl
eHRTZWxlY3Rpb25DaGFuZ2VkUmVzdWx0LCA9PSwgInxwYXJhZ3JhcGh8Mjd8Mzd8Iik7Ci0gICAg
c2VsZWN0ZWRUZXh0ID0gYXRrX3RleHRfZ2V0X3NlbGVjdGlvbihwYXJhZ3JhcGgyLCAwLCAmc3Rh
cnRPZmZzZXQsICZlbmRPZmZzZXQpOwotICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwg
PT0sIDI3KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMzcpOwotICAgIGdf
YXNzZXJ0X2NtcHN0cihzZWxlY3RlZFRleHQsID09LCAidGhlIG1pZGRsZSIpOwotICAgIGdfZnJl
ZSAoc2VsZWN0ZWRUZXh0KTsKLQotICAgIC8qIFJlbW92ZSBzZWxlY3Rpb25zIGFuZCB0ZXh0IGV2
ZXJ5dGhpbmcgYWdhaW4uICovCi0gICAgcmVzdWx0ID0gYXRrX3RleHRfcmVtb3ZlX3NlbGVjdGlv
bihwYXJhZ3JhcGgyLCAwKTsKLSAgICBnX2Fzc2VydChyZXN1bHQpOwotICAgIGdfYXNzZXJ0X2Nt
cGludChhdGtfdGV4dF9nZXRfbl9zZWxlY3Rpb25zKHBhcmFncmFwaDIpLCA9PSwgMCk7Ci0gICAg
c2VsZWN0ZWRUZXh0ID0gYXRrX3RleHRfZ2V0X3NlbGVjdGlvbihwYXJhZ3JhcGgyLCAwLCAmc3Rh
cnRPZmZzZXQsICZlbmRPZmZzZXQpOwotICAgIC8qIE5vdyBvZmZzZXRzIHNob3VsZCBiZSB0aGUg
c2FtZSAobm8gc2VsZWN0aW9uKS4gKi8KLSAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQs
ID09LCBlbmRPZmZzZXQpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZFRleHQsID09LCAw
KTsKLSAgICBnX2ZyZWUgKHNlbGVjdGVkVGV4dCk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRr
X3RleHRfZ2V0X25fc2VsZWN0aW9ucyhsaW5rKSwgPT0sIDApOwotICAgIHNlbGVjdGVkVGV4dCA9
IGF0a190ZXh0X2dldF9zZWxlY3Rpb24obGluaywgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0
KTsKLSAgICAvKiBOb3cgb2Zmc2V0cyBzaG91bGQgYmUgdGhlIHNhbWUgKG5vIHNlbGVjdGlvbiku
ICovCi0gICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgZW5kT2Zmc2V0KTsKLSAg
ICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRUZXh0LCA9PSwgMCk7Ci0gICAgZ19mcmVlIChzZWxl
Y3RlZFRleHQpOwotCi0gICAgLyogTGlzdCBpdGVtICovCi0KLSAgICBnX2Fzc2VydChhdGtfb2Jq
ZWN0X2dldF9yb2xlKGxpc3QpID09IEFUS19ST0xFX0xJU1QpOwotICAgIGdfYXNzZXJ0X2NtcGlu
dChhdGtfb2JqZWN0X2dldF9uX2FjY2Vzc2libGVfY2hpbGRyZW4obGlzdCksID09LCAxKTsKLQot
ICAgIC8qIEl0J3Mgbm90IHBvc3NpYmxlIHRvIHNlbGVjdCB0ZXh0IGluc2lkZSBhbiBpdGVtJ3Mg
bWFya2VyLiAqLwotICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9zZWxlY3Rpb24gKGxpc3RJdGVt
LCAwLCAwLCA5KTsKLSAgICBnX2Fzc2VydCghcmVzdWx0KTsKLSAgICByZXN1bHQgPSBhdGtfdGV4
dF9zZXRfc2VsZWN0aW9uIChsaXN0SXRlbSwgMCwgOSwgMSk7Ci0gICAgZ19hc3NlcnQoIXJlc3Vs
dCk7Ci0KLSAgICAvKiBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8gc2VsZWN0IHRleHQgaW5zaWRl
IGFuIGl0ZW0ncyB0ZXh0LiAqLwotICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9zZWxlY3Rpb24g
KGxpc3RJdGVtLCAwLCAzLCA5KTsKLSAgICBnX2Fzc2VydChyZXN1bHQpOwotCi0gICAgZ19hc3Nl
cnRfY21waW50KGF0a190ZXh0X2dldF9uX3NlbGVjdGlvbnMobGlzdEl0ZW0pLCA9PSwgMSk7Ci0g
ICAgc2VsZWN0ZWRUZXh0ID0gYXRrX3RleHRfZ2V0X3NlbGVjdGlvbihsaXN0SXRlbSwgMCwgJnN0
YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQs
ID09LCAzKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgOSk7Ci0gICAgZ19h
c3NlcnRfY21wc3RyKHNlbGVjdGVkVGV4dCwgPT0sICJBIGxpc3QiKTsKLSAgICBnX2ZyZWUgKHNl
bGVjdGVkVGV4dCk7Ci0KLSAgICBnX2ZyZWUodGV4dFNlbGVjdGlvbkNoYW5nZWRSZXN1bHQpOwot
Ci0gICAgZ19vYmplY3RfdW5yZWYocGFyYWdyYXBoMSk7Ci0gICAgZ19vYmplY3RfdW5yZWYocGFy
YWdyYXBoMik7Ci0gICAgZ19vYmplY3RfdW5yZWYobGluayk7Ci0gICAgZ19vYmplY3RfdW5yZWYo
bGlzdCk7Ci0gICAgZ19vYmplY3RfdW5yZWYobGlzdEl0ZW0pOwotICAgIGdfb2JqZWN0X3VucmVm
KHdlYlZpZXcpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrR2V0RXh0ZW50cygpCi17
Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2Vi
X3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOwotICAgIEd0a0Fs
bG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgODAwLCA2MDAgfTsKLSAgICBndGtfd2lkZ2V0
X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOwotICAgIHdl
YmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LCBjZW50ZXJlZENvbnRlbnRzLCAwLCAw
LCAwKTsKLQotICAgIEF0a09iamVjdCogb2JqZWN0ID0gZ2V0V2ViQXJlYU9iamVjdCh3ZWJWaWV3
KTsKLSAgICBnX2Fzc2VydChvYmplY3QpOwotCi0gICAgQXRrVGV4dCogc2hvcnRUZXh0MSA9IEFU
S19URVhUKGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAwKSk7Ci0gICAg
Z19hc3NlcnQoQVRLX0lTX1RFWFQoc2hvcnRUZXh0MSkpOwotICAgIEF0a1RleHQqIGxvbmdUZXh0
ID0gQVRLX1RFWFQoYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDEpKTsK
LSAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChsb25nVGV4dCkpOwotICAgIEF0a1RleHQqIHNob3J0
VGV4dDIgPSBBVEtfVEVYVChhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwg
MikpOwotICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHNob3J0VGV4dDIpKTsKLSAgICBBdGtUZXh0
KiBtdWx0aWxpbmVUZXh0ID0gQVRLX1RFWFQoYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGls
ZChvYmplY3QsIDMpKTsKLSAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChtdWx0aWxpbmVUZXh0KSk7
Ci0KLSAgICAvKiBTdGFydCB3aXRoIHdpbmRvdyBleHRlbnRzLiAqLwotICAgIEF0a1RleHRSZWN0
YW5nbGUgc2xpbmVfd2luZG93MSwgc2xpbmVfd2luZG93MiwgbGxpbmVfd2luZG93LCBtbGluZV93
aW5kb3c7Ci0gICAgYXRrX3RleHRfZ2V0X3JhbmdlX2V4dGVudHMoc2hvcnRUZXh0MSwgMCwgMTAs
IEFUS19YWV9XSU5ET1csICZzbGluZV93aW5kb3cxKTsKLSAgICBhdGtfdGV4dF9nZXRfcmFuZ2Vf
ZXh0ZW50cyhsb25nVGV4dCwgMCwgNDQsIEFUS19YWV9XSU5ET1csICZsbGluZV93aW5kb3cpOwot
ICAgIGF0a190ZXh0X2dldF9yYW5nZV9leHRlbnRzKHNob3J0VGV4dDIsIDAsIDEwLCBBVEtfWFlf
V0lORE9XLCAmc2xpbmVfd2luZG93Mik7Ci0gICAgYXRrX3RleHRfZ2V0X3JhbmdlX2V4dGVudHMo
bXVsdGlsaW5lVGV4dCwgMCwgNjAsIEFUS19YWV9XSU5ET1csICZtbGluZV93aW5kb3cpOwotCi0g
ICAgLyogQ2hlY2sgdmVydGljYWwgbGluZSBwb3NpdGlvbi4gKi8KLSAgICBnX2Fzc2VydF9jbXBp
bnQoc2xpbmVfd2luZG93MS55ICsgc2xpbmVfd2luZG93MS5oZWlnaHQsIDw9LCBsbGluZV93aW5k
b3cueSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGxsaW5lX3dpbmRvdy55ICsgbGxpbmVfd2luZG93
LmhlaWdodCArIHNsaW5lX3dpbmRvdzIuaGVpZ2h0LCA8PSwgbWxpbmVfd2luZG93LnkpOwotCi0g
ICAgLyogUGFyYWdyYXBocyAxIGFuZCAzIGhhdmUgaWRlbnRpY2FsIHRleHQgYW5kIGFsaWdubWVu
dC4gKi8KLSAgICBnX2Fzc2VydF9jbXBpbnQoc2xpbmVfd2luZG93MS54LCA9PSwgc2xpbmVfd2lu
ZG93Mi54KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoc2xpbmVfd2luZG93MS53aWR0aCwgPT0sIHNs
aW5lX3dpbmRvdzIud2lkdGgpOwotICAgIGdfYXNzZXJ0X2NtcGludChzbGluZV93aW5kb3cxLmhl
aWdodCwgPT0sIHNsaW5lX3dpbmRvdzIuaGVpZ2h0KTsKLQotICAgIC8qIEFsbCBsaW5lcyBzaG91
bGQgYmUgdGhlIHNhbWUgaGVpZ2h0OyBsaW5lIDIgaXMgdGhlIHdpZGVzdCBsaW5lLiAqLwotICAg
IGdfYXNzZXJ0X2NtcGludChzbGluZV93aW5kb3cxLmhlaWdodCwgPT0sIGxsaW5lX3dpbmRvdy5o
ZWlnaHQpOwotICAgIGdfYXNzZXJ0X2NtcGludChzbGluZV93aW5kb3cxLndpZHRoLCA8LCBsbGlu
ZV93aW5kb3cud2lkdGgpOwotCi0gICAgLyogTWFrZSBzdXJlIHRoZSBjaGFyYWN0ZXIgZXh0ZW50
cyBqaXZlIHdpdGggdGhlIHJhbmdlIGV4dGVudHMuICovCi0gICAgZ2ludCB4OwotICAgIGdpbnQg
eTsKLSAgICBnaW50IHdpZHRoOwotICAgIGdpbnQgaGVpZ2h0OwotCi0gICAgLyogRmlyc3QgcGFy
YWdyYXBoIChzaG9ydCB0ZXh0KS4gKi8KLSAgICBhdGtfdGV4dF9nZXRfY2hhcmFjdGVyX2V4dGVu
dHMoc2hvcnRUZXh0MSwgMCwgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQsIEFUS19YWV9XSU5ET1cp
OwotICAgIGdfYXNzZXJ0X2NtcGludCh4LCA9PSwgc2xpbmVfd2luZG93MS54KTsKLSAgICBnX2Fz
c2VydF9jbXBpbnQoeSwgPT0sIHNsaW5lX3dpbmRvdzEueSk7Ci0gICAgZ19hc3NlcnRfY21waW50
KGhlaWdodCwgPT0sIHNsaW5lX3dpbmRvdzEuaGVpZ2h0KTsKLQotICAgIGF0a190ZXh0X2dldF9j
aGFyYWN0ZXJfZXh0ZW50cyhzaG9ydFRleHQxLCA5LCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCwg
QVRLX1hZX1dJTkRPVyk7Ci0gICAgZ19hc3NlcnRfY21waW50KHgsID09LCBzbGluZV93aW5kb3cx
LnggKyBzbGluZV93aW5kb3cxLndpZHRoIC0gd2lkdGgpOwotICAgIGdfYXNzZXJ0X2NtcGludCh5
LCA9PSwgc2xpbmVfd2luZG93MS55KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoaGVpZ2h0LCA9PSwg
c2xpbmVfd2luZG93MS5oZWlnaHQpOwotCi0gICAgLyogU2Vjb25kIHBhcmFncmFwaCAobG9uZyB0
ZXh0KS4gKi8KLSAgICBhdGtfdGV4dF9nZXRfY2hhcmFjdGVyX2V4dGVudHMobG9uZ1RleHQsIDAs
ICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0LCBBVEtfWFlfV0lORE9XKTsKLSAgICBnX2Fzc2VydF9j
bXBpbnQoeCwgPT0sIGxsaW5lX3dpbmRvdy54KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoeSwgPT0s
IGxsaW5lX3dpbmRvdy55KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoaGVpZ2h0LCA9PSwgbGxpbmVf
d2luZG93LmhlaWdodCk7Ci0KLSAgICBhdGtfdGV4dF9nZXRfY2hhcmFjdGVyX2V4dGVudHMobG9u
Z1RleHQsIDQzLCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCwgQVRLX1hZX1dJTkRPVyk7Ci0gICAg
Z19hc3NlcnRfY21waW50KHgsID09LCBsbGluZV93aW5kb3cueCArIGxsaW5lX3dpbmRvdy53aWR0
aCAtIHdpZHRoKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoeSwgPT0sIGxsaW5lX3dpbmRvdy55KTsK
LSAgICBnX2Fzc2VydF9jbXBpbnQoaGVpZ2h0LCA9PSwgbGxpbmVfd2luZG93LmhlaWdodCk7Ci0K
LSAgICAvKiBUaGlyZCBwYXJhZ3JhcGggKHNob3J0IHRleHQpLiAqLwotICAgIGF0a190ZXh0X2dl
dF9jaGFyYWN0ZXJfZXh0ZW50cyhzaG9ydFRleHQyLCAwLCAmeCwgJnksICZ3aWR0aCwgJmhlaWdo
dCwgQVRLX1hZX1dJTkRPVyk7Ci0gICAgZ19hc3NlcnRfY21waW50KHgsID09LCBzbGluZV93aW5k
b3cyLngpOwotICAgIGdfYXNzZXJ0X2NtcGludCh5LCA9PSwgc2xpbmVfd2luZG93Mi55KTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQoaGVpZ2h0LCA9PSwgc2xpbmVfd2luZG93Mi5oZWlnaHQpOwotCi0g
ICAgYXRrX3RleHRfZ2V0X2NoYXJhY3Rlcl9leHRlbnRzKHNob3J0VGV4dDIsIDksICZ4LCAmeSwg
JndpZHRoLCAmaGVpZ2h0LCBBVEtfWFlfV0lORE9XKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoeCwg
PT0sIHNsaW5lX3dpbmRvdzIueCArIHNsaW5lX3dpbmRvdzIud2lkdGggLSB3aWR0aCk7Ci0gICAg
Z19hc3NlcnRfY21waW50KHksID09LCBzbGluZV93aW5kb3cyLnkpOwotICAgIGdfYXNzZXJ0X2Nt
cGludChoZWlnaHQsID09LCBzbGluZV93aW5kb3cyLmhlaWdodCk7Ci0KLSAgICAvKiBGb3VyIHBh
cmFncmFwaCAoMyBsaW5lcyBtdWx0aS1saW5lIHRleHQpLiAqLwotICAgIGF0a190ZXh0X2dldF9j
aGFyYWN0ZXJfZXh0ZW50cyhtdWx0aWxpbmVUZXh0LCAwLCAmeCwgJnksICZ3aWR0aCwgJmhlaWdo
dCwgQVRLX1hZX1dJTkRPVyk7Ci0gICAgZ19hc3NlcnRfY21waW50KHgsID09LCBtbGluZV93aW5k
b3cueCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHksID09LCBtbGluZV93aW5kb3cueSk7Ci0gICAg
Z19hc3NlcnRfY21waW50KDMgKiBoZWlnaHQsID09LCBtbGluZV93aW5kb3cuaGVpZ2h0KTsKLQot
ICAgIGF0a190ZXh0X2dldF9jaGFyYWN0ZXJfZXh0ZW50cyhtdWx0aWxpbmVUZXh0LCA1OSwgJngs
ICZ5LCAmd2lkdGgsICZoZWlnaHQsIEFUS19YWV9XSU5ET1cpOwotICAgIC8qIExhc3QgbGluZSB3
b24ndCBmaWxsIHRoZSB3aG9sZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlLiAqLwotICAgIGdfYXNz
ZXJ0X2NtcGludCh4LCA8PSwgbWxpbmVfd2luZG93LnggKyBtbGluZV93aW5kb3cud2lkdGggLSB3
aWR0aCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHksID09LCBtbGluZV93aW5kb3cueSArIG1saW5l
X3dpbmRvdy5oZWlnaHQgLSBoZWlnaHQpOwotICAgIGdfYXNzZXJ0X2NtcGludChoZWlnaHQsIDw9
LCBtbGluZV93aW5kb3cuaGVpZ2h0KTsKLQotICAgIC8qIENoZWNrIHRoYXQgZXh0ZW50IGZvciBh
IGZ1bGwgbGluZSBhcmUgdGhlIHNhbWUgaGVpZ2h0IHRoYW4gZm9yCi0gICAgICAgYSBwYXJ0aWFs
IHNlY3Rpb24gb2YgdGhlIHNhbWUgbGluZSAqLwotICAgIGdpbnQgc3RhcnRPZmZzZXQ7Ci0gICAg
Z2ludCBlbmRPZmZzZXQ7Ci0KLSNpZiAhQVRLX0NIRUNLX1ZFUlNJT04oMiwgMTAsIDApCi0gICAg
Z2NoYXIqIHRleHQgPSBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQobXVsdGlsaW5lVGV4dCwg
MCwgQVRLX1RFWFRfQk9VTkRBUllfTElORV9TVEFSVCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0
KTsKLSAgICBnX2ZyZWUodGV4dCk7Ci0jZWxzZQotICAgIGdjaGFyKiB0ZXh0ID0gYXRrX3RleHRf
Z2V0X3N0cmluZ19hdF9vZmZzZXQobXVsdGlsaW5lVGV4dCwgMCwgQVRLX1RFWFRfR1JBTlVMQVJJ
VFlfTElORSwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAgICBnX2ZyZWUodGV4dCk7Ci0j
ZW5kaWYKLQotICAgIEF0a1RleHRSZWN0YW5nbGUgZmxpbmVfd2luZG93OwotICAgIEF0a1RleHRS
ZWN0YW5nbGUgYWZsaW5lX3dpbmRvdzsKLSAgICBhdGtfdGV4dF9nZXRfcmFuZ2VfZXh0ZW50cyht
dWx0aWxpbmVUZXh0LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBBVEtfWFlfV0lORE9XLCAmZmxp
bmVfd2luZG93KTsKLSAgICBhdGtfdGV4dF9nZXRfcmFuZ2VfZXh0ZW50cyhtdWx0aWxpbmVUZXh0
LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0IC0gMSwgQVRLX1hZX1dJTkRPVywgJmFmbGluZV93aW5k
b3cpOwotICAgIGdfYXNzZXJ0X2NtcGludChmbGluZV93aW5kb3cueCwgPT0sIGFmbGluZV93aW5k
b3cueCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGZsaW5lX3dpbmRvdy55LCA9PSwgYWZsaW5lX3dp
bmRvdy55KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZmxpbmVfd2luZG93LmhlaWdodCwgPT0sIGFm
bGluZV93aW5kb3cuaGVpZ2h0KTsKLQotICAgIGdfb2JqZWN0X3VucmVmKHNob3J0VGV4dDEpOwot
ICAgIGdfb2JqZWN0X3VucmVmKHNob3J0VGV4dDIpOwotICAgIGdfb2JqZWN0X3VucmVmKGxvbmdU
ZXh0KTsKLSAgICBnX29iamVjdF91bnJlZihtdWx0aWxpbmVUZXh0KTsKLSAgICBnX29iamVjdF91
bnJlZih3ZWJWaWV3KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0xheW91dEFuZERh
dGFUYWJsZXMoKQotewotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJ
RVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3
KTsKLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDgwMCwgNjAwIH07Ci0g
ICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQod2ViVmlldyksICZhbGxvY2F0
aW9uKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgbGF5b3V0QW5k
RGF0YVRhYmxlcywgMCwgMCwgMCk7Ci0KLSAgICBBdGtPYmplY3QqIG9iamVjdCA9IGdldFdlYkFy
ZWFPYmplY3Qod2ViVmlldyk7Ci0gICAgZ19hc3NlcnQob2JqZWN0KTsKLQotICAgIC8qIENoZWNr
IHRoZSBub24tbGF5b3V0IHRhYmxlIChkYXRhIHRhYmxlKS4gKi8KLQotICAgIEF0a09iamVjdCog
dGFibGUxID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDApOwotICAg
IGdfYXNzZXJ0KEFUS19JU19UQUJMRSh0YWJsZTEpKTsKLSAgICBBdGtBdHRyaWJ1dGVTZXQqIHNl
dDEgPSBhdGtfb2JqZWN0X2dldF9hdHRyaWJ1dGVzKHRhYmxlMSk7Ci0gICAgZ19hc3NlcnQoc2V0
MSk7Ci0gICAgZ19hc3NlcnQoIWF0a0F0dHJpYnV0ZVNldENvbnRhaW5zQXR0cmlidXRlTmFtZShz
ZXQxLCAibGF5b3V0LWd1ZXNzIikpOwotICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0MSk7
Ci0KLSAgICAvKiBDaGVjayB0aGUgbGF5b3V0IHRhYmxlLiAqLwotCi0gICAgQXRrT2JqZWN0KiB0
YWJsZTIgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMSk7Ci0gICAg
Z19hc3NlcnQoQVRLX0lTX1RBQkxFKHRhYmxlMikpOwotICAgIEF0a0F0dHJpYnV0ZVNldCogc2V0
MiA9IGF0a19vYmplY3RfZ2V0X2F0dHJpYnV0ZXModGFibGUyKTsKLSAgICBnX2Fzc2VydChzZXQy
KTsKLSAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRDb250YWluc0F0dHJpYnV0ZU5hbWUoc2V0
MiwgImxheW91dC1ndWVzcyIpKTsKLSAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1
dGVOYW1lSGFzVmFsdWUoc2V0MiwgImxheW91dC1ndWVzcyIsICJ0cnVlIikpOwotICAgIGF0a19h
dHRyaWJ1dGVfc2V0X2ZyZWUoc2V0Mik7Ci0KLSAgICBnX29iamVjdF91bnJlZih0YWJsZTEpOwot
ICAgIGdfb2JqZWN0X3VucmVmKHRhYmxlMik7Ci0gICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7
Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtMaW5rc1dpdGhJbmxpbmVJbWFnZXMoKQot
ewotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dl
Yl92aWV3X25ldygpKTsKLSAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKLSAgICBHdGtB
bGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDgwMCwgNjAwIH07Ci0gICAgZ3RrX3dpZGdl
dF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQod2ViVmlldyksICZhbGxvY2F0aW9uKTsKLSAgICB3
ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgbGlua3NXaXRoSW5saW5lSW1hZ2Vz
LCAwLCAwLCAwKTsKLQotICAgIEF0a09iamVjdCogb2JqZWN0ID0gZ2V0V2ViQXJlYU9iamVjdCh3
ZWJWaWV3KTsKLSAgICBnX2Fzc2VydChvYmplY3QpOwotCi0gICAgLyogRmlyc3QgcGFyYWdyYXBo
IChsaW5rIGF0IHRoZSBiZWdpbm5pbmcpLiAqLwotICAgIEF0a09iamVjdCogcGFyYWdyYXBoID0g
YXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDApOwotICAgIGdfYXNzZXJ0
KEFUS19JU19URVhUKHBhcmFncmFwaCkpOwotICAgIGdpbnQgc3RhcnRPZmZzZXQ7Ci0gICAgZ2lu
dCBlbmRPZmZzZXQ7Ci0KLSNpZiAhQVRLX0NIRUNLX1ZFUlNJT04oMiwgMTAsIDApCi0gICAgZ2No
YXIqIHRleHQgPSBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQoQVRLX1RFWFQocGFyYWdyYXBo
KSwgMCwgQVRLX1RFWFRfQk9VTkRBUllfTElORV9TVEFSVCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zm
c2V0KTsKLSAgICBnX2Fzc2VydCh0ZXh0KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGV4dCwgPT0s
ICJmb28gYmFyIGJheiIpOwotICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDAp
OwotICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCAxMSk7Ci0gICAgZ19mcmVlKHRl
eHQpOwotI2Vsc2UKLSAgICBnY2hhciogdGV4dCA9IGF0a190ZXh0X2dldF9zdHJpbmdfYXRfb2Zm
c2V0KEFUS19URVhUKHBhcmFncmFwaCksIDAsIEFUS19URVhUX0dSQU5VTEFSSVRZX0xJTkUsICZz
dGFydE9mZnNldCwgJmVuZE9mZnNldCk7Ci0gICAgZ19hc3NlcnQodGV4dCk7Ci0gICAgZ19hc3Nl
cnRfY21wc3RyKHRleHQsID09LCAiZm9vIGJhciBiYXoiKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
c3RhcnRPZmZzZXQsID09LCAwKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwg
MTEpOwotICAgIGdfZnJlZSh0ZXh0KTsKLSNlbmRpZgotCi0gICAgZ19vYmplY3RfdW5yZWYocGFy
YWdyYXBoKTsKLQotICAgIC8qIFNlY29uZCBwYXJhZ3JhcGggKGxpbmsgaW4gdGhlIG1pZGRsZSku
ICovCi0gICAgcGFyYWdyYXBoID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmpl
Y3QsIDEpOwotICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHBhcmFncmFwaCkpOwotCi0jaWYgIUFU
S19DSEVDS19WRVJTSU9OKDIsIDEwLCAwKQotICAgIHRleHQgPSBhdGtfdGV4dF9nZXRfdGV4dF9h
dF9vZmZzZXQoQVRLX1RFWFQocGFyYWdyYXBoKSwgMCwgQVRLX1RFWFRfQk9VTkRBUllfTElORV9T
VEFSVCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAgICBnX2Fzc2VydCh0ZXh0KTsKLSAg
ICBnX2Fzc2VydF9jbXBzdHIodGV4dCwgPT0sICJmb28gYmFyIGJheiIpOwotICAgIGdfYXNzZXJ0
X2NtcGludChzdGFydE9mZnNldCwgPT0sIDApOwotICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZz
ZXQsID09LCAxMSk7Ci0gICAgZ19mcmVlKHRleHQpOwotI2Vsc2UKLSAgICB0ZXh0ID0gYXRrX3Rl
eHRfZ2V0X3N0cmluZ19hdF9vZmZzZXQoQVRLX1RFWFQocGFyYWdyYXBoKSwgMCwgQVRLX1RFWFRf
R1JBTlVMQVJJVFlfTElORSwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAgICBnX2Fzc2Vy
dCh0ZXh0KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGV4dCwgPT0sICJmb28gYmFyIGJheiIpOwot
ICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDApOwotICAgIGdfYXNzZXJ0X2Nt
cGludChlbmRPZmZzZXQsID09LCAxMSk7Ci0gICAgZ19mcmVlKHRleHQpOwotI2VuZGlmCi0KLSAg
ICBnX29iamVjdF91bnJlZihwYXJhZ3JhcGgpOwotCi0gICAgLyogVGhpcmQgcGFyYWdyYXBoIChs
aW5rIGF0IHRoZSBlbmQpLiAqLwotICAgIHBhcmFncmFwaCA9IGF0a19vYmplY3RfcmVmX2FjY2Vz
c2libGVfY2hpbGQob2JqZWN0LCAyKTsKLSAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChwYXJhZ3Jh
cGgpKTsKLQotI2lmICFBVEtfQ0hFQ0tfVkVSU0lPTigyLCAxMCwgMCkKLSAgICB0ZXh0ID0gYXRr
X3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0KEFUS19URVhUKHBhcmFncmFwaCksIDAsIEFUS19URVhU
X0JPVU5EQVJZX0xJTkVfU1RBUlQsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7Ci0gICAgZ19h
c3NlcnQodGV4dCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09LCAiZm9vIGJhciBiYXoi
KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAwKTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMTEpOwotICAgIGdfZnJlZSh0ZXh0KTsKLSNlbHNlCi0g
ICAgdGV4dCA9IGF0a190ZXh0X2dldF9zdHJpbmdfYXRfb2Zmc2V0KEFUS19URVhUKHBhcmFncmFw
aCksIDAsIEFUS19URVhUX0dSQU5VTEFSSVRZX0xJTkUsICZzdGFydE9mZnNldCwgJmVuZE9mZnNl
dCk7Ci0gICAgZ19hc3NlcnQodGV4dCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09LCAi
Zm9vIGJhciBiYXoiKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAwKTsK
LSAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMTEpOwotICAgIGdfZnJlZSh0ZXh0
KTsKLSNlbmRpZgotCi0gICAgZ19vYmplY3RfdW5yZWYocGFyYWdyYXBoKTsKLSAgICBnX29iamVj
dF91bnJlZih3ZWJWaWV3KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0h5cGVydGV4
dEFuZEh5cGVybGlua3MoKQotewotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRf
V0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBnX29iamVjdF9yZWZfc2luayh3
ZWJWaWV3KTsKLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDgwMCwgNjAw
IH07Ci0gICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQod2ViVmlldyksICZh
bGxvY2F0aW9uKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgaHlw
ZXJ0ZXh0QW5kSHlwZXJsaW5rcywgMCwgMCwgMCk7Ci0KLSAgICBBdGtPYmplY3QqIG9iamVjdCA9
IGdldFdlYkFyZWFPYmplY3Qod2ViVmlldyk7Ci0gICAgZ19hc3NlcnQob2JqZWN0KTsKLQotICAg
IEF0a09iamVjdCogcGFyYWdyYXBoMSA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQo
b2JqZWN0LCAwKTsKLSAgICBnX2Fzc2VydChBVEtfT0JKRUNUKHBhcmFncmFwaDEpKTsKLSAgICBn
X2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKHBhcmFncmFwaDEpID09IEFUS19ST0xFX1BBUkFH
UkFQSCk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX0hZUEVSVEVYVChwYXJhZ3JhcGgxKSk7Ci0KLSAg
ICAvKiBObyBsaW5rcyBpbiB0aGUgZmlyc3QgcGFyYWdyYXBoLiAqLwotICAgIGdpbnQgbkxpbmtz
ID0gYXRrX2h5cGVydGV4dF9nZXRfbl9saW5rcyhBVEtfSFlQRVJURVhUKHBhcmFncmFwaDEpKTsK
LSAgICBnX2Fzc2VydF9jbXBpbnQobkxpbmtzLCA9PSwgMCk7Ci0KLSAgICBBdGtPYmplY3QqIHBh
cmFncmFwaDIgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMSk7Ci0g
ICAgZ19hc3NlcnQoQVRLX09CSkVDVChwYXJhZ3JhcGgyKSk7Ci0gICAgZ19hc3NlcnQoYXRrX29i
amVjdF9nZXRfcm9sZShwYXJhZ3JhcGgyKSA9PSBBVEtfUk9MRV9QQVJBR1JBUEgpOwotICAgIGdf
YXNzZXJ0KEFUS19JU19IWVBFUlRFWFQocGFyYWdyYXBoMikpOwotCi0gICAgLyogQ2hlY2sgbGlu
a3MgaW4gdGhlIHNlY29uZCBwYXJhZ3JhcGguCi0gICAgICAgbkxpbmtzID0gYXRrX2h5cGVydGV4
dF9nZXRfbl9saW5rcyhBVEtfSFlQRVJURVhUKHBhcmFncmFwaDIpKTsKLSAgICAgICBnX2Fzc2Vy
dF9jbXBpbnQobkxpbmtzLCA9PSwgMyk7ICovCi0KLSAgICBBdGtIeXBlcmxpbmsqIGhMaW5rMSA9
IGF0a19oeXBlcnRleHRfZ2V0X2xpbmsoQVRLX0hZUEVSVEVYVChwYXJhZ3JhcGgyKSwgMCk7Ci0g
ICAgZ19hc3NlcnQoQVRLX0hZUEVSTElOSyhoTGluazEpKTsKLSAgICBBdGtPYmplY3QqIGhMaW5r
T2JqZWN0MSA9IGF0a19oeXBlcmxpbmtfZ2V0X29iamVjdChoTGluazEsIDApOwotICAgIGdfYXNz
ZXJ0KEFUS19PQkpFQ1QoaExpbmtPYmplY3QxKSk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9n
ZXRfcm9sZShoTGlua09iamVjdDEpID09IEFUS19ST0xFX0xJTkspOwotICAgIGdfYXNzZXJ0X2Nt
cGludChhdGtfaHlwZXJsaW5rX2dldF9zdGFydF9pbmRleChoTGluazEpLCA9PSwgMCk7Ci0gICAg
Z19hc3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0X2VuZF9pbmRleChoTGluazEpLCA9PSwg
Nik7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0X25fYW5jaG9ycyhoTGlu
azEpLCA9PSwgMSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKGF0a19oeXBlcmxpbmtfZ2V0X3VyaSho
TGluazEsIDApLCA9PSwgImh0dHA6Ly9mb28uYmFyLmJhei8iKTsKLQotICAgIEF0a0h5cGVybGlu
ayogaExpbmsyID0gYXRrX2h5cGVydGV4dF9nZXRfbGluayhBVEtfSFlQRVJURVhUKHBhcmFncmFw
aDIpLCAxKTsKLSAgICBnX2Fzc2VydChBVEtfSFlQRVJMSU5LKGhMaW5rMikpOwotICAgIEF0a09i
amVjdCogaExpbmtPYmplY3QyID0gYXRrX2h5cGVybGlua19nZXRfb2JqZWN0KGhMaW5rMiwgMCk7
Ci0gICAgZ19hc3NlcnQoQVRLX09CSkVDVChoTGlua09iamVjdDIpKTsKLSAgICBnX2Fzc2VydChh
dGtfb2JqZWN0X2dldF9yb2xlKGhMaW5rT2JqZWN0MikgPT0gQVRLX1JPTEVfTElOSyk7Ci0gICAg
Z19hc3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0X3N0YXJ0X2luZGV4KGhMaW5rMiksID09
LCAxMik7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0X2VuZF9pbmRleCho
TGluazIpLCA9PSwgMzIpOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9u
X2FuY2hvcnMoaExpbmsyKSwgPT0sIDEpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihhdGtfaHlwZXJs
aW5rX2dldF91cmkoaExpbmsyLCAwKSwgPT0sICJodHRwOi8vYmFyLmJhei5mb28vIik7Ci0KLSAg
ICBBdGtIeXBlcmxpbmsqIGhMaW5rMyA9IGF0a19oeXBlcnRleHRfZ2V0X2xpbmsoQVRLX0hZUEVS
VEVYVChwYXJhZ3JhcGgyKSwgMik7Ci0gICAgZ19hc3NlcnQoQVRLX0hZUEVSTElOSyhoTGluazMp
KTsKLSAgICBBdGtPYmplY3QqIGhMaW5rT2JqZWN0MyA9IGF0a19oeXBlcmxpbmtfZ2V0X29iamVj
dChoTGluazMsIDApOwotICAgIGdfYXNzZXJ0KEFUS19PQkpFQ1QoaExpbmtPYmplY3QzKSk7Ci0g
ICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShoTGlua09iamVjdDMpID09IEFUS19ST0xF
X0xJTkspOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9zdGFydF9pbmRl
eChoTGluazMpLCA9PSwgNjUpOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dl
dF9lbmRfaW5kZXgoaExpbmszKSwgPT0sIDc1KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5
cGVybGlua19nZXRfbl9hbmNob3JzKGhMaW5rMyksID09LCAxKTsKLSAgICBnX2Fzc2VydF9jbXBz
dHIoYXRrX2h5cGVybGlua19nZXRfdXJpKGhMaW5rMywgMCksID09LCAiaHR0cDovL2Jhei5mb28u
YmFyLyIpOwotCi0gICAgQXRrT2JqZWN0KiBsaXN0ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJs
ZV9jaGlsZChvYmplY3QsIDIpOwotICAgIGdfYXNzZXJ0KEFUS19PQkpFQ1QobGlzdCkpOwotICAg
IGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUobGlzdCkgPT0gQVRLX1JPTEVfTElTVCk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KGF0a19vYmplY3RfZ2V0X25fYWNjZXNzaWJsZV9jaGlsZHJlbihs
aXN0KSwgPT0sIDEpOwotCi0gICAgQXRrT2JqZWN0KiBsaXN0SXRlbSA9IGF0a19vYmplY3RfcmVm
X2FjY2Vzc2libGVfY2hpbGQobGlzdCwgMCk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQobGlz
dEl0ZW0pKTsKLSAgICBnX2Fzc2VydChBVEtfSVNfSFlQRVJURVhUKGxpc3RJdGVtKSk7Ci0KLSAg
ICBBdGtIeXBlcmxpbmsqIGhMaW5rSW5MaXN0SXRlbSA9IGF0a19oeXBlcnRleHRfZ2V0X2xpbmso
QVRLX0hZUEVSVEVYVChsaXN0SXRlbSksIDApOwotICAgIGdfYXNzZXJ0KEFUS19IWVBFUkxJTkso
aExpbmtJbkxpc3RJdGVtKSk7Ci0gICAgQXRrT2JqZWN0KiBoTGlua09iamVjdCA9IGF0a19oeXBl
cmxpbmtfZ2V0X29iamVjdChoTGlua0luTGlzdEl0ZW0sIDApOwotICAgIGdfYXNzZXJ0KEFUS19P
QkpFQ1QoaExpbmtPYmplY3QpKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGhM
aW5rT2JqZWN0KSA9PSBBVEtfUk9MRV9MSU5LKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5
cGVybGlua19nZXRfc3RhcnRfaW5kZXgoaExpbmtJbkxpc3RJdGVtKSwgPT0sIDIwKTsKLSAgICBn
X2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfZW5kX2luZGV4KGhMaW5rSW5MaXN0SXRl
bSksID09LCA0Myk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0X25fYW5j
aG9ycyhoTGlua0luTGlzdEl0ZW0pLCA9PSwgMSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKGF0a19o
eXBlcmxpbmtfZ2V0X3VyaShoTGlua0luTGlzdEl0ZW0sIDApLCA9PSwgImh0dHA6Ly9mb28uYmFy
LmJhei8iKTsKLQotICAgIC8qIEZpbmFsbHkgY2hlY2sgdGhlIEF0a0FjdGlvbiBpbnRlcmZhY2Ug
Zm9yIGEgZ2l2ZW4gQXRrSHlwZXJsaW5rLiAqLwotICAgIGdfYXNzZXJ0KEFUS19JU19BQ1RJT04o
aExpbmsxKSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a19hY3Rpb25fZ2V0X25fYWN0aW9ucyhB
VEtfQUNUSU9OKGhMaW5rMSkpLCA9PSwgMSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKGF0a19hY3Rp
b25fZ2V0X2tleWJpbmRpbmcoQVRLX0FDVElPTihoTGluazEpLCAwKSwgPT0sICIiKTsKLSAgICBn
X2Fzc2VydF9jbXBzdHIoYXRrX2FjdGlvbl9nZXRfbmFtZShBVEtfQUNUSU9OKGhMaW5rMSksIDAp
LCA9PSwgImp1bXAiKTsKLSAgICBnX2Fzc2VydChhdGtfYWN0aW9uX2RvX2FjdGlvbihBVEtfQUNU
SU9OKGhMaW5rMSksIDApKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKHBhcmFncmFwaDEpOwotICAg
IGdfb2JqZWN0X3VucmVmKHBhcmFncmFwaDIpOwotICAgIGdfb2JqZWN0X3VucmVmKGxpc3QpOwot
ICAgIGdfb2JqZWN0X3VucmVmKGxpc3RJdGVtKTsKLSAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3
KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0xpc3RzT2ZJdGVtcygpCi17Ci0gICAg
V2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdf
bmV3KCkpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOwotICAgIEd0a0FsbG9jYXRp
b24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgODAwLCA2MDAgfTsKLSAgICBndGtfd2lkZ2V0X3NpemVf
YWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOwotICAgIHdlYmtpdF93
ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LCBsaXN0c09mSXRlbXMsIDAsIDAsIDApOwotCi0g
ICAgQXRrT2JqZWN0KiBvYmplY3QgPSBnZXRXZWJBcmVhT2JqZWN0KHdlYlZpZXcpOwotICAgIGdf
YXNzZXJ0KG9iamVjdCk7Ci0KLSAgICAvKiBVbm9yZGVyZWQgbGlzdC4gKi8KLQotICAgIEF0a09i
amVjdCogdUxpc3QgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMCk7
Ci0gICAgZ19hc3NlcnQoQVRLX09CSkVDVCh1TGlzdCkpOwotICAgIGdfYXNzZXJ0KGF0a19vYmpl
Y3RfZ2V0X3JvbGUodUxpc3QpID09IEFUS19ST0xFX0xJU1QpOwotICAgIGdfYXNzZXJ0X2NtcGlu
dChhdGtfb2JqZWN0X2dldF9uX2FjY2Vzc2libGVfY2hpbGRyZW4odUxpc3QpLCA9PSwgMyk7Ci0K
LSAgICBBdGtPYmplY3QqIGl0ZW0xID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZCh1
TGlzdCwgMCk7Ci0gICAgQXRrT2JqZWN0KiBpdGVtMiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2li
bGVfY2hpbGQodUxpc3QsIDEpOwotICAgIEF0a09iamVjdCogaXRlbTMgPSBhdGtfb2JqZWN0X3Jl
Zl9hY2Nlc3NpYmxlX2NoaWxkKHVMaXN0LCAyKTsKLQotICAgIGdfYXNzZXJ0X2NtcGludChhdGtf
b2JqZWN0X2dldF9uX2FjY2Vzc2libGVfY2hpbGRyZW4oaXRlbTEpLCA9PSwgMCk7Ci0gICAgZ19h
c3NlcnRfY21waW50KGF0a19vYmplY3RfZ2V0X25fYWNjZXNzaWJsZV9jaGlsZHJlbihpdGVtMiks
ID09LCAxKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX29iamVjdF9nZXRfbl9hY2Nlc3NpYmxl
X2NoaWxkcmVuKGl0ZW0zKSwgPT0sIDEpOwotCi0gICAgZ19vYmplY3RfdW5yZWYoaXRlbTEpOwot
ICAgIGdfb2JqZWN0X3VucmVmKGl0ZW0yKTsKLSAgICBnX29iamVjdF91bnJlZihpdGVtMyk7Ci0K
LSAgICAvKiBPcmRlcmVkIGxpc3QuICovCi0KLSAgICBBdGtPYmplY3QqIG9MaXN0ID0gYXRrX29i
amVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDEpOwotICAgIGdfYXNzZXJ0KEFUS19P
QkpFQ1Qob0xpc3QpKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKG9MaXN0KSA9
PSBBVEtfUk9MRV9MSVNUKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX29iamVjdF9nZXRfbl9h
Y2Nlc3NpYmxlX2NoaWxkcmVuKG9MaXN0KSwgPT0sIDMpOwotCi0gICAgaXRlbTEgPSBhdGtfb2Jq
ZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9MaXN0LCAwKTsKLSAgICBpdGVtMiA9IGF0a19vYmpl
Y3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob0xpc3QsIDEpOwotICAgIGl0ZW0zID0gYXRrX29iamVj
dF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvTGlzdCwgMik7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQo
YXRrX29iamVjdF9nZXRfbl9hY2Nlc3NpYmxlX2NoaWxkcmVuKGl0ZW0xKSwgPT0sIDApOwotICAg
IGdfYXNzZXJ0X2NtcGludChhdGtfb2JqZWN0X2dldF9uX2FjY2Vzc2libGVfY2hpbGRyZW4oaXRl
bTIpLCA9PSwgMSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a19vYmplY3RfZ2V0X25fYWNjZXNz
aWJsZV9jaGlsZHJlbihpdGVtMyksID09LCAxKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGl0ZW0x
KTsKLSAgICBnX29iamVjdF91bnJlZihpdGVtMik7Ci0gICAgZ19vYmplY3RfdW5yZWYoaXRlbTMp
OwotCi0gICAgZ19vYmplY3RfdW5yZWYodUxpc3QpOwotICAgIGdfb2JqZWN0X3VucmVmKG9MaXN0
KTsKLSAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKLX0KLQotdHlwZWRlZiBlbnVtIHsKLSAg
VEVYVF9DSEFOR0VfSU5TRVJUID0gMSwKLSAgVEVYVF9DSEFOR0VfUkVNT1ZFID0gMgotfSBUZXh0
Q2hhbmdlVHlwZTsKLQotc3RhdGljIGdjaGFyKiB0ZXh0Q2hhbmdlZFJlc3VsdCA9IDA7Ci0KLXN0
YXRpYyB2b2lkIHRleHRDaGFuZ2VkQ2IoQXRrVGV4dCogdGV4dCwgZ2ludCBwb3MsIGdpbnQgbGVu
LCBnY2hhciogbW9kaWZpZWRUZXh0LCBncG9pbnRlciBkYXRhKQotewotICAgIGdfYXNzZXJ0KHRl
eHQgJiYgQVRLX0lTX09CSkVDVCh0ZXh0KSk7Ci0KLSAgICBUZXh0Q2hhbmdlVHlwZSB0eXBlID0g
R1BPSU5URVJfVE9fSU5UKGRhdGEpOwotICAgIGdfZnJlZSh0ZXh0Q2hhbmdlZFJlc3VsdCk7Ci0g
ICAgdGV4dENoYW5nZWRSZXN1bHQgPSBnX3N0cmR1cF9wcmludGYoInwlZHwlZHwlZHwnJXMnfCIs
IHR5cGUsIHBvcywgbGVuLCBtb2RpZmllZFRleHQpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2Vi
a2l0QXRrVGV4dENoYW5nZWROb3RpZmljYXRpb25zKCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19v
YmplY3RfcmVmX3Npbmsod2ViVmlldyk7Ci0gICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0g
eyAwLCAwLCA4MDAsIDYwMCB9OwotICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lE
R0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3Ry
aW5nKHdlYlZpZXcsIGZvcm1XaXRoVGV4dElucHV0cywgMCwgMCwgMCk7Ci0KLSAgICBBdGtPYmpl
Y3QqIG9iamVjdCA9IGdldFdlYkFyZWFPYmplY3Qod2ViVmlldyk7Ci0gICAgZ19hc3NlcnQob2Jq
ZWN0KTsKLQotICAgIEF0a09iamVjdCogZm9ybSA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVf
Y2hpbGQob2JqZWN0LCAwKTsKLSAgICBnX2Fzc2VydChBVEtfSVNfT0JKRUNUKGZvcm0pKTsKLQot
ICAgIC8qIEZpcnN0IGNoZWNrIG5vcm1hbCB0ZXh0IGVudHJpZXMuICovCi0gICAgQXRrT2JqZWN0
KiB0ZXh0RW50cnkgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZvcm0sIDApOwot
ICAgIGdfYXNzZXJ0KEFUS19JU19FRElUQUJMRV9URVhUKHRleHRFbnRyeSkpOwotICAgIGdfYXNz
ZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoQVRLX09CSkVDVCh0ZXh0RW50cnkpKSA9PSBBVEtfUk9M
RV9FTlRSWSk7Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KHRleHRFbnRyeSwgInRleHQtaW5zZXJ0
IiwKLSAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sodGV4dENoYW5nZWRDYiksCi0gICAg
ICAgICAgICAgICAgICAgICBHSU5UX1RPX1BPSU5URVIoVEVYVF9DSEFOR0VfSU5TRVJUKSk7Ci0g
ICAgZ19zaWduYWxfY29ubmVjdCh0ZXh0RW50cnksICJ0ZXh0LXJlbW92ZSIsCi0gICAgICAgICAg
ICAgICAgICAgICBHX0NBTExCQUNLKHRleHRDaGFuZ2VkQ2IpLAotICAgICAgICAgICAgICAgICAg
ICAgR0lOVF9UT19QT0lOVEVSKFRFWFRfQ0hBTkdFX1JFTU9WRSkpOwotCi0gICAgZ2ludCBwb3Mg
PSAwOwotICAgIGF0a19lZGl0YWJsZV90ZXh0X2luc2VydF90ZXh0KEFUS19FRElUQUJMRV9URVhU
KHRleHRFbnRyeSksICJmb28gYmFyIGJheiIsIDExLCAmcG9zKTsKLSAgICBjaGFyKiB0ZXh0ID0g
YXRrX3RleHRfZ2V0X3RleHQoQVRLX1RFWFQodGV4dEVudHJ5KSwgMCwgLTEpOwotICAgIGdfYXNz
ZXJ0X2NtcHN0cih0ZXh0LCA9PSwgImZvbyBiYXIgYmF6Iik7Ci0gICAgZ19hc3NlcnRfY21wc3Ry
KHRleHRDaGFuZ2VkUmVzdWx0LCA9PSwgInwxfDB8MTF8J2ZvbyBiYXIgYmF6J3wiKTsKLSAgICBn
X2ZyZWUodGV4dCk7Ci0KLSAgICBhdGtfZWRpdGFibGVfdGV4dF9kZWxldGVfdGV4dChBVEtfRURJ
VEFCTEVfVEVYVCh0ZXh0RW50cnkpLCA0LCA3KTsKLSAgICB0ZXh0ID0gYXRrX3RleHRfZ2V0X3Rl
eHQoQVRLX1RFWFQodGV4dEVudHJ5KSwgMCwgLTEpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0
LCA9PSwgImZvbyAgYmF6Iik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRleHRDaGFuZ2VkUmVzdWx0
LCA9PSwgInwyfDR8M3wnYmFyJ3wiKTsKLSAgICBnX2ZyZWUodGV4dCk7Ci0KLSAgICBwb3MgPSA0
OwotICAgIGF0a19lZGl0YWJsZV90ZXh0X2luc2VydF90ZXh0KEFUS19FRElUQUJMRV9URVhUKHRl
eHRFbnRyeSksICJxdXggcXV1eCB0b2JlaWdub3JlZCIsIDgsICZwb3MpOwotICAgIHRleHQgPSBh
dGtfdGV4dF9nZXRfdGV4dChBVEtfVEVYVCh0ZXh0RW50cnkpLCAwLCAtMSk7Ci0gICAgZ19hc3Nl
cnRfY21wc3RyKHRleHQsID09LCAiZm9vIHF1eCBxdXV4IGJheiIpOwotICAgIGdfYXNzZXJ0X2Nt
cHN0cih0ZXh0Q2hhbmdlZFJlc3VsdCwgPT0sICJ8MXw0fDh8J3F1eCBxdXV4J3wiKTsKLSAgICBn
X2ZyZWUodGV4dCk7Ci0KLSAgICAvKiBOb3cgY2hlY2sgZm9yIHBhc3N3b3JkIGVudHJpZXMuICov
Ci0gICAgQXRrT2JqZWN0KiBwYXNzd29yZEVudHJ5ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJs
ZV9jaGlsZChmb3JtLCAxKTsKLSAgICBnX2Fzc2VydChBVEtfSVNfRURJVEFCTEVfVEVYVChwYXNz
d29yZEVudHJ5KSk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShBVEtfT0JKRUNU
KHBhc3N3b3JkRW50cnkpKSA9PSBBVEtfUk9MRV9QQVNTV09SRF9URVhUKTsKLQotICAgIGdfc2ln
bmFsX2Nvbm5lY3QocGFzc3dvcmRFbnRyeSwgInRleHQtaW5zZXJ0IiwKLSAgICAgICAgICAgICAg
ICAgICAgIEdfQ0FMTEJBQ0sodGV4dENoYW5nZWRDYiksCi0gICAgICAgICAgICAgICAgICAgICBH
SU5UX1RPX1BPSU5URVIoVEVYVF9DSEFOR0VfSU5TRVJUKSk7Ci0gICAgZ19zaWduYWxfY29ubmVj
dChwYXNzd29yZEVudHJ5LCAidGV4dC1yZW1vdmUiLAotICAgICAgICAgICAgICAgICAgICAgR19D
QUxMQkFDSyh0ZXh0Q2hhbmdlZENiKSwKLSAgICAgICAgICAgICAgICAgICAgIEdJTlRfVE9fUE9J
TlRFUihURVhUX0NIQU5HRV9SRU1PVkUpKTsKLQotICAgIHBvcyA9IDA7Ci0gICAgLyogQSBzaW5n
bGUgYnVsbGV0IGNoYXJhY3RlciBpcyAnXDM0MlwyMDBcMjQyJyAqLwotICAgIGF0a19lZGl0YWJs
ZV90ZXh0X2luc2VydF90ZXh0KEFUS19FRElUQUJMRV9URVhUKHBhc3N3b3JkRW50cnkpLCAiZm9v
YmFyIiwgNiwgJnBvcyk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRleHRDaGFuZ2VkUmVzdWx0LCA9
PSwgInwxfDB8NnwnXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBc
MjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyJ3wiKTsKLSAgICB0ZXh0ID0gYXRrX3RleHRfZ2V0
X3RleHQoQVRLX1RFWFQocGFzc3dvcmRFbnRyeSksIDAsIC0xKTsKLSAgICBnX2Fzc2VydF9jbXBz
dHIodGV4dCwgPT0sICJcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDJcMzQyXDIw
MFwyNDJcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDIiKTsKLSAgICBnX2ZyZWUodGV4dCk7Ci0KLSAg
ICBhdGtfZWRpdGFibGVfdGV4dF9kZWxldGVfdGV4dChBVEtfRURJVEFCTEVfVEVYVChwYXNzd29y
ZEVudHJ5KSwgMiwgNCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRleHRDaGFuZ2VkUmVzdWx0LCA9
PSwgInwyfDJ8MnwnXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyJ3wiKTsKLQotICAgIHRleHQgPSBh
dGtfdGV4dF9nZXRfdGV4dChBVEtfVEVYVChwYXNzd29yZEVudHJ5KSwgMCwgLTEpOwotICAgIGdf
YXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwgIlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAw
XDI0MlwzNDJcMjAwXDI0MiIpOwotICAgIGdfZnJlZSh0ZXh0KTsKLQotICAgIHBvcyA9IDM7Ci0g
ICAgYXRrX2VkaXRhYmxlX3RleHRfaW5zZXJ0X3RleHQoQVRLX0VESVRBQkxFX1RFWFQocGFzc3dv
cmRFbnRyeSksICJxdXggdG9iZWlnbm9yZWQiLCAzLCAmcG9zKTsKLSAgICBnX2Fzc2VydF9jbXBz
dHIodGV4dENoYW5nZWRSZXN1bHQsID09LCAifDF8M3wzfCdcMzQyXDIwMFwyNDJcMzQyXDIwMFwy
NDJcMzQyXDIwMFwyNDInfCIpOwotCi0gICAgdGV4dCA9IGF0a190ZXh0X2dldF90ZXh0KEFUS19U
RVhUKHBhc3N3b3JkRW50cnkpLCAwLCAtMSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09
LCAiXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0Mlwy
MDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyIik7Ci0gICAgZ19mcmVlKHRleHQpOwotCi0g
ICAgZ19mcmVlKHRleHRDaGFuZ2VkUmVzdWx0KTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGZvcm0p
OwotICAgIGdfb2JqZWN0X3VucmVmKHRleHRFbnRyeSk7Ci0gICAgZ19vYmplY3RfdW5yZWYocGFz
c3dvcmRFbnRyeSk7Ci0gICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Ci19Ci0KLXN0YXRpYyB2
b2lkIHRlc3RXZWJraXRBdGtQYXJlbnRGb3JSb290T2JqZWN0KCkKLXsKLSAgICBXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0g
ICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9OwotICAgIGd0
a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7
Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIGNvbnRlbnRzLCAwLCAw
LCAwKTsKLQotICAgIC8qIFdlIG5lZWQgYSBwYXJlbnQgY29udGFpbmVyIHdpZGdldCBmb3IgdGhl
IHdlYnZpZXcuICovCi0gICAgR3RrV2lkZ2V0KiBwYXJlbnRDb250YWluZXIgPSBndGtfd2luZG93
X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKLSAgICBnX29iamVjdF9yZWZfc2luayhwYXJlbnRD
b250YWluZXIpOwotICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIocGFyZW50Q29u
dGFpbmVyKSwgR1RLX1dJREdFVCh3ZWJWaWV3KSk7Ci0KLSAgICBBdGtPYmplY3QqIGF4UGFyZW50
ID0gZ3RrX3dpZGdldF9nZXRfYWNjZXNzaWJsZShwYXJlbnRDb250YWluZXIpOwotICAgIGdfYXNz
ZXJ0KEFUS19JU19PQkpFQ1QoYXhQYXJlbnQpKTsKLQotICAgIEF0a09iamVjdCogYXhSb290ID0g
Z3RrX3dpZGdldF9nZXRfYWNjZXNzaWJsZShHVEtfV0lER0VUKHdlYlZpZXcpKTsKLSAgICBnX2Fz
c2VydChBVEtfSVNfT0JKRUNUKGF4Um9vdCkpOwotCi0gICAgLyogVGhlIGNoaWxkIGZvciB0aGUg
cGFyZW50IGNvbnRhaW5lcidzIGFjY2Vzc2liaWxpdHkgb2JqZWN0Ci0gICAgICAgc2hvdWxkIGJl
IHRoZSBhY2Nlc3NpYmlsaXR5IG9iamVjdCBmb3IgdGhlIFdlYlZpZXcncyByb290LiAqLwotICAg
IEF0a09iamVjdCogYXhQYXJlbnRDaGlsZCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hp
bGQoYXhQYXJlbnQsIDApOwotICAgIGdfYXNzZXJ0KGF4UGFyZW50Q2hpbGQgPT0gYXhSb290KTsK
LQotICAgIC8qIEJvdHRvbS11cCBuYXZpZ2F0aW9uIHNob3VsZCBtYXRjaCB0b3AtZG93biBvbmUu
ICovCi0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcGFyZW50KGF4UGFyZW50Q2hpbGQpID09
IGF4UGFyZW50KTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGF4UGFyZW50Q2hpbGQpOwotICAgIGdf
b2JqZWN0X3VucmVmKHBhcmVudENvbnRhaW5lcik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJr
aXRBdGtTZXRQYXJlbnRGb3JPYmplY3QoKQotewotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcg
PSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBHdGtBbGxvY2F0
aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDgwMCwgNjAwIH07Ci0gICAgZ3RrX3dpZGdldF9zaXpl
X2FsbG9jYXRlKEdUS19XSURHRVQod2ViVmlldyksICZhbGxvY2F0aW9uKTsKLSAgICB3ZWJraXRf
d2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgY29udGVudHMsIDAsIDAsIDApOwotCi0gICAg
LyogUHV0IHRoZSB3ZWJ2aWV3IGluIGEgcGFyZW50IGNvbnRhaW5lciB3aWRnZXQgdG8gY2hlY2sg
dGhhdCB0aGUKLSAgICAgICBub3JtYWwgYmVoYXZpb3VyIGtlZXBzIHdvcmtpbmcgYXMgZXhwZWN0
ZWQgYnkgZGVmYXVsdC4gKi8KLSAgICBHdGtXaWRnZXQqIHBhcmVudENvbnRhaW5lciA9IGd0a193
aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKHBh
cmVudENvbnRhaW5lcik7Ci0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihwYXJl
bnRDb250YWluZXIpLCBHVEtfV0lER0VUKHdlYlZpZXcpKTsKLQotICAgIEF0a09iamVjdCogYXhS
b290ID0gZ3RrX3dpZGdldF9nZXRfYWNjZXNzaWJsZShHVEtfV0lER0VUKHdlYlZpZXcpKTsKLSAg
ICBnX2Fzc2VydChBVEtfSVNfT0JKRUNUKGF4Um9vdCkpOwotCi0gICAgQXRrT2JqZWN0KiBheFBh
cmVudCA9IGd0a193aWRnZXRfZ2V0X2FjY2Vzc2libGUocGFyZW50Q29udGFpbmVyKTsKLSAgICBn
X2Fzc2VydChBVEtfSVNfT0JKRUNUKGF4UGFyZW50KSk7Ci0KLSAgICAvKiBUaGUgcGFyZW50IG9m
IHRoZSByb290IG9iamVjdCBpcyB0aGUgcGFyZW50IGNvbnRhaW5lcidzIGExMXkgb2JqZWN0LiAq
LwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3BhcmVudChheFJvb3QpID09IGF4UGFyZW50
KTsKLQotICAgIC8qIFdlIG5vdyBuZWVkIHRvIHVzZSBzb21ldGhpbmcgYXMgYSBhbiBhbHRlcm5h
dGl2ZSBwYXJlbnQgZm9yCi0gICAgICAgdGhlIGExMXkgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0
aGUgcm9vdCBvZiB0aGUgRE9NIHRyZWUuICovCi0gICAgR3RrV2lkZ2V0KiBhbHRlcm5hdGl2ZVBh
cmVudCA9IGd0a19idXR0b25fbmV3KCk7Ci0gICAgZ19vYmplY3RfcmVmX3NpbmsoYWx0ZXJuYXRp
dmVQYXJlbnQpOwotCi0gICAgQXRrT2JqZWN0KiBheEFsdGVybmF0aXZlUGFyZW50ID0gZ3RrX3dp
ZGdldF9nZXRfYWNjZXNzaWJsZShhbHRlcm5hdGl2ZVBhcmVudCk7Ci0gICAgZ19hc3NlcnQoQVRL
X0lTX09CSkVDVChheEFsdGVybmF0aXZlUGFyZW50KSk7Ci0KLSAgICAvKiBNYW51YWxseSBzZXQg
dGhlIGFsdGVybmF0aXZlIHBhcmVudCdzIGFjY2Vzc2liaWxpdHkgb2JqZWN0IGFzCi0gICAgICAg
dGhlIHBhcmVudCBmb3IgdGhlIFdlYktpdCBhY2Nlc3NpYmlsaXR5IHJvb3Qgb2JqZWN0IGFuZCBj
aGVjay4gKi8KLSAgICBhdGtfb2JqZWN0X3NldF9wYXJlbnQoYXhSb290LCBheEFsdGVybmF0aXZl
UGFyZW50KTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9wYXJlbnQoYXhSb290KSA9PSBh
eEFsdGVybmF0aXZlUGFyZW50KTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGFsdGVybmF0aXZlUGFy
ZW50KTsKLSAgICBnX29iamVjdF91bnJlZihwYXJlbnRDb250YWluZXIpOwotfQotCi0jaWZkZWYg
R1RLX0FQSV9WRVJTSU9OXzIKLXN0YXRpYyB2b2lkIGluaXRpYWxpemVUZXN0aW5nRnJhbWV3b3Jr
KGludCBhcmdjLCBjaGFyKiogYXJndikKLXsKLSAgICAvKiBFbnN1cmUgR0FJTCBpcyB0aGUgb25s
eSBtb2R1bGUgbG9hZGVkLiAqLwotICAgIGdfc2V0ZW52KCJHVEtfTU9EVUxFUyIsICJnYWlsIiwg
VFJVRSk7Ci0KLSAgICAvKiBGb2xsb3dpbmcgbGluZXMgd2VyZSB0YWtlbiBmcm9tIGd0a190ZXN0
X2luaXQoKS4gKi8KLSAgICBnX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIDApOwotICAgIGd0a19k
aXNhYmxlX3NldGxvY2FsZSgpOwotICAgIHNldGxvY2FsZShMQ19BTEwsICJDIik7Ci0KLSAgICBn
dGtfaW5pdCgmYXJnYywgJmFyZ3YpOwotfQotI2VuZGlmCi0KLWludCBtYWluKGludCBhcmdjLCBj
aGFyKiogYXJndikKLXsKLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotICAgIC8qIFdlIGNhbid0
IGp1c3QgY2FsbCB0byBndGtfdGVzdF9pbml0KCkgaW4gdGhpcyBjYXNlIGJlY2F1c2UgaXRzCi0g
ICAgICAgaW1wbGVtZW50YXRpb24gbWFrZXMgc3VyZSB0aGF0IG5vIEdUSysgbW9kdWxlIHdpbGwg
YmUgbG9hZGVkLCBhbmQKLSAgICAgICB3ZSB3aWxsIG5lZWQgdG8gbG9hZCBHQUlMIGZvciB0ZXN0
cyB0aGF0IG5lZWQgdG8gdXNlIEF0a09iamVjdHMKLSAgICAgICBmcm9tIG5vbi1XZWJLaXQgR3Rr
V2lkZ2V0cyAoZS5nIHBhcmVudEZvclJvb3RPYmplY3QpLiovCi0gICAgaW5pdGlhbGl6ZVRlc3Rp
bmdGcmFtZXdvcmsoYXJnYywgYXJndik7Ci0jZWxzZQotICAgIGd0a190ZXN0X2luaXQoJmFyZ2Ms
ICZhcmd2LCBOVUxMKTsKLSNlbmRpZgotCi0gICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy8iKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2NhcmV0
T2Zmc2V0cyIsIHRlc3RXZWJraXRBdGtDYXJldE9mZnNldHMpOwotICAgIGdfdGVzdF9hZGRfZnVu
YygiL3dlYmtpdC9hdGsvY2FyZXRPZmZzZXRzQW5kRXh0cmFub3VzV2hpdGVTcGFjZXMiLCB0ZXN0
V2Via2l0QXRrQ2FyZXRPZmZzZXRzQW5kRXh0cmFub3VzV2hpdGVTcGFjZXMpOwotICAgIGdfdGVz
dF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvY29tYm9Cb3giLCB0ZXN0V2Via2l0QXRrQ29tYm9Cb3gp
OwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvZG9jdW1lbnRMb2FkaW5nRXZlbnRz
IiwgdGVzdFdlYmtpdEF0a0RvY3VtZW50TG9hZGluZ0V2ZW50cyk7Ci0gICAgZ190ZXN0X2FkZF9m
dW5jKCIvd2Via2l0L2F0ay9lbWJlZGRlZE9iamVjdHMiLCB0ZXN0V2Via2l0QXRrRW1iZWRkZWRP
YmplY3RzKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2dldEhlYWRlcnNJblRh
YmxlIiwgdGVzdFdlYmtpdEF0a0dldEhlYWRlcnNJblRhYmxlKTsKLSAgICBnX3Rlc3RfYWRkX2Z1
bmMoIi93ZWJraXQvYXRrL3RleHRBdHRyaWJ1dGVzIiwgdGVzdFdlYmtpdEF0a1RleHRBdHRyaWJ1
dGVzKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL3RleHRTZWxlY3Rpb25zIiwg
dGVzdFdlYmtpdEF0a1RleHRTZWxlY3Rpb25zKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJr
aXQvYXRrL2dldEV4dGVudHMiLCB0ZXN0V2Via2l0QXRrR2V0RXh0ZW50cyk7Ci0gICAgZ190ZXN0
X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9oeXBlcnRleHRBbmRIeXBlcmxpbmtzIiwgdGVzdFdlYmtp
dEF0a0h5cGVydGV4dEFuZEh5cGVybGlua3MpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtp
dC9hdGsvbGF5b3V0QW5kRGF0YVRhYmxlcyIsIHRlc3RXZWJraXRBdGtMYXlvdXRBbmREYXRhVGFi
bGVzKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2xpbmtzV2l0aElubGluZUlt
YWdlcyIsIHRlc3RXZWJraXRBdGtMaW5rc1dpdGhJbmxpbmVJbWFnZXMpOwotICAgIGdfdGVzdF9h
ZGRfZnVuYygiL3dlYmtpdC9hdGsvbGlzdHNPZkl0ZW1zIiwgdGVzdFdlYmtpdEF0a0xpc3RzT2ZJ
dGVtcyk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay90ZXh0Q2hhbmdlZE5vdGlm
aWNhdGlvbnMiLCB0ZXN0V2Via2l0QXRrVGV4dENoYW5nZWROb3RpZmljYXRpb25zKTsKLSAgICBn
X3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL3BhcmVudEZvclJvb3RPYmplY3QiLCB0ZXN0V2Vi
a2l0QXRrUGFyZW50Rm9yUm9vdE9iamVjdCk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0
L2F0ay9zZXRQYXJlbnRGb3JPYmplY3QiLCB0ZXN0V2Via2l0QXRrU2V0UGFyZW50Rm9yT2JqZWN0
KTsKLSAgICByZXR1cm4gZ190ZXN0X3J1biAoKTsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9ndGsvdGVzdHMvdGVzdGF0a3JvbGVzLmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90
ZXN0YXRrcm9sZXMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODg4MTdjZi4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXRrcm9sZXMuYworKysgL2Rl
di9udWxsCkBAIC0xLDQyNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IMKpIDIwMTAgSm9hbm1h
cmllIERpZ2dzCi0gKiBDb3B5cmlnaHQgwqkgMjAxMCBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0jaW5j
bHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KLQotLyogTm9uIGZv
cm0gcm9sZXMgKi8KLSNkZWZpbmUgSFRNTF9ET0NVTUVOVF9GUkFNRSAiPGh0bWw+PGJvZHk+VGhp
cyBpcyBhIHRlc3QuPC9ib2R5PjwvaHRtbD4iCi0jZGVmaW5lIEhUTUxfSEVBRElORyAiPGh0bWw+
PGJvZHk+PGgxPjE8L2gxPjxoMj4yPC9oMj48aDM+MzwvaDM+PGg0PjQ8L2g0PjxoNT41PC9oNT48
aDY+NjwvaDY+PC9ib2R5PjwvaHRtbD4iCi0jZGVmaW5lIEhUTUxfSU1BR0UgIjxodG1sPjxib2R5
PjxpbWcgc3JjPSdmb29iYXIucG5nJyBhbHQ9J1RoaXMgaXMgYSB0ZXN0LicvPjwvYm9keT48L2h0
bWw+IgotI2RlZmluZSBIVE1MX0xJTktfVEVYVCAiPGh0bWw+PGJvZHk+PGEgaHJlZj0nZm9vYmFy
Lmh0bWwnPlRoaXMgaXMgYSB0ZXN0LjwvYT48L2JvZHk+PC9odG1sPiIKLSNkZWZpbmUgSFRNTF9M
SVNUICI8aHRtbD48Ym9keT48dWw+PGxpPjE8L2xpPjxsaT4yPC9saT48L3VsPjxvbD48bGk+MTwv
bGk+PGxpPjI8L2xpPjwvb2w+PC9ib2R5PjwvaHRtbD4iCi0jZGVmaW5lIEhUTUxfUEFSQUdSQVBI
ICI8aHRtbD48Ym9keT48cD5UaGlzIGlzIGEgdGVzdC48L3A+PC9ib2R5PjwvaHRtbD4iCi0jZGVm
aW5lIEhUTUxfU0VDVElPTiAiPGh0bWw+PGJvZHk+PGRpdj5UaGlzIGlzIGEgdGVzdC48L2Rpdj48
L2JvZHk+PC9odG1sPiIKLSNkZWZpbmUgSFRNTF9UQUJMRSAiPGh0bWw+PGJvZHk+PHRhYmxlIGJv
cmRlcj0nMSc+PHRyPjx0ZD5UaGlzIGlzPC90ZD48dGQ+YSB0ZXN0LjwvdGQ+PC90cj48L3RhYmxl
PjwvYm9keT48L2h0bWw+IgotI2RlZmluZSBIVE1MX1NFUEFSQVRPUiAiPGh0bWw+PGJvZHk+PGhy
Lz48L2JvZHk+PC9odG1sPiIKLSNkZWZpbmUgSFRNTF9DT01CT0JPWCAiPGh0bWw+PGJvZHk+PHNl
bGVjdCBzaXplPScxJz48b3B0aW9uPm9uZTwvb3B0aW9uPjxvcHRpb24+dHdvPC9vcHRpb24+PG9w
dGlvbj50aHJlZTwvb3B0aW9uPjwvc2VsZWN0PjwvYm9keT48L2h0bWw+IgotLyogRm9ybSByb2xl
cyAqLwotI2RlZmluZSBIVE1MX0ZPUk0gIjxodG1sPjxib2R5Pjxmb3JtPlRoaXMgaXMgYSB0ZXN0
LjwvZm9ybT48L2JvZHk+PC9odG1sPiIKLSNkZWZpbmUgSFRNTF9DSEVDS19CT1ggIjxodG1sPjxi
b2R5PjxpbnB1dCB0eXBlPSdjaGVja2JveCcgLz5UaGlzIGlzIGEgdGVzdC48L2JvZHk+PC9odG1s
PiIKLSNkZWZpbmUgSFRNTF9MQUJFTEVEX0VOVFJZICI8aHRtbD48Ym9keT48bGFiZWwgZm9yPSdm
b28nPk5hbWU6PC9sYWJlbD48aW5wdXQgdHlwZT0ndGV4dCcgaWQ9J2ZvbycgLz48L2JvZHk+PC9o
dG1sPiIKLSNkZWZpbmUgSFRNTF9MSVNUQk9YICI8aHRtbD48Ym9keT48c2VsZWN0IHNpemU9JzMn
PjxvcHRpb24+b25lPC9vcHRpb24+PG9wdGlvbj50d288L29wdGlvbj48b3B0aW9uPnRocmVlPC9v
cHRpb24+PC9zZWxlY3Q+PC9ib2R5PjwvaHRtbD4iCi0jZGVmaW5lIEhUTUxfUEFTU1dPUkRfVEVY
VCAiPGh0bWw+PGJvZHk+PGlucHV0IHR5cGU9J3Bhc3N3b3JkJyAvPjwvYm9keT48L2h0bWw+Igot
I2RlZmluZSBIVE1MX1BVU0hfQlVUVE9OICI8aHRtbD48Ym9keT48aW5wdXQgdHlwZT0nc3VibWl0
JyB2YWx1ZT0nb2snIC8+VGhpcyBpcyBhIHRlc3QuPC9ib2R5PjwvaHRtbD4iCi0jZGVmaW5lIEhU
TUxfUkFESU9fQlVUVE9OICI8aHRtbD48Ym9keT48aW5wdXQgdHlwZT0ncmFkaW8nIC8+VGhpcyBp
cyBhIHRlc3QuPC9ib2R5PjwvaHRtbD4iCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBBdGtPYmpl
Y3QqIGRvY3VtZW50OwotICAgIEF0a09iamVjdCogb2JqOwotICAgIEF0a1JvbGUgcm9sZTsKLSAg
ICBHdGtXaWRnZXQqIHdlYlZpZXc7Ci0gICAgR3RrQWxsb2NhdGlvbiBhbGxvYzsKLSAgICBHTWFp
bkxvb3AqIGxvb3A7Ci19IEF0a1JvbGVzRml4dHVyZTsKLQotc3RhdGljIGdib29sZWFuIGZpbmlz
aF9sb2FkaW5nKEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSkKLXsKLSAgICBpZiAoZ19tYWluX2xv
b3BfaXNfcnVubmluZyhmaXh0dXJlLT5sb29wKSkKLSAgICAgICAgZ19tYWluX2xvb3BfcXVpdChm
aXh0dXJlLT5sb29wKTsKLQotICAgIC8vIFdpdGggdGhlIGNoYW5nZSB0byBzdXBwb3J0IFdLMiBh
Y2Nlc3NpYmlsaXR5LCB0aGUgcm9vdCBvYmplY3QKLSAgICAvLyBoYXMgY2hhbmdlZCBhbmQgaXQn
cyBubyBsb25nZXIgdGhlIGRvY3VtZW50IGZyYW1lLCBidXQgYSBzY3JvbGwKLSAgICAvLyBwYW5l
IGNvbnRhaW5pbmcgdGhlIGRvY3VtZW50IGZyYW1lIGFzIGl0cyBvbmx5IGNoaWxkLiBTZWUgdGhl
Ci0gICAgLy8gYnVnIDcyMzkwIGZvciBtb3JlIGRldGFpbHMgb24gdGhpcyBjaGFuZ2UuCi0gICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyMzkwCi0gICAgQXRr
T2JqZWN0KiByb290T2JqZWN0ID0gZ3RrX3dpZGdldF9nZXRfYWNjZXNzaWJsZShmaXh0dXJlLT53
ZWJWaWV3KTsKLSAgICBmaXh0dXJlLT5kb2N1bWVudCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2li
bGVfY2hpbGQocm9vdE9iamVjdCwgMCk7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+ZG9jdW1lbnQp
OwotCi0gICAgLy8gUmVtb3ZlIHRoZSByZWZlcmVuY2UgYWRkZWQgYnkgcmVmX2FjY2Vzc2libGVf
Y2hpbGQoKSBhbmQKLSAgICAvLyByZXR1cm4sIHNpbmNlIHdlIGRvbid0IG5lZWQgdG8ga2VlcCB0
aGF0IGV4dHJhIHJlZiBhdCBhbGwuCi0gICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+ZG9jdW1l
bnQpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQgYXRrX3JvbGVzX2ZpeHR1
cmVfc2V0dXAoQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17
Ci0gICAgZml4dHVyZS0+bG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLSAgICBm
aXh0dXJlLT5hbGxvYyA9IChHdGtBbGxvY2F0aW9uKSB7IDAsIDAsIDgwMCwgNjAwIH07Ci0gICAg
Zml4dHVyZS0+d2ViVmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKLSAgICBnX29iamVjdF9y
ZWZfc2luayhmaXh0dXJlLT53ZWJWaWV3KTsKLQotICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0
ZShmaXh0dXJlLT53ZWJWaWV3LCAmZml4dHVyZS0+YWxsb2MpOwotCi0gICAgaWYgKGRhdGEgIT0g
TlVMTCkKLSAgICAgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklF
VyAoZml4dHVyZS0+d2ViVmlldyksIChjb25zdCBjaGFyKikgZGF0YSwgTlVMTCwgTlVMTCwgTlVM
TCk7Ci0KLSAgICBnX2lkbGVfYWRkKChHU291cmNlRnVuYykgZmluaXNoX2xvYWRpbmcsIGZpeHR1
cmUpOwotICAgIGdfbWFpbl9sb29wX3J1bihmaXh0dXJlLT5sb29wKTsKLX0KLQotc3RhdGljIHZv
aWQgYXRrX3JvbGVzX2ZpeHR1cmVfdGVhcmRvd24oQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBn
Y29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+d2ViVmll
dyk7Ci0gICAgZ19tYWluX2xvb3BfdW5yZWYoZml4dHVyZS0+bG9vcCk7Ci19Ci0KLXN0YXRpYyB2
b2lkIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKEF0a09iamVjdCogb2JqLCBnaW50IHBvcywgQXRr
Um9sZSByb2xlKQotewotICAgIEF0a09iamVjdCogY2hpbGQ7Ci0gICAgQXRrUm9sZSBjaGlsZF9y
b2xlOwotCi0gICAgY2hpbGQgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iaiwg
cG9zKTsKLSAgICBnX2Fzc2VydChjaGlsZCk7Ci0gICAgY2hpbGRfcm9sZSA9IGF0a19vYmplY3Rf
Z2V0X3JvbGUoY2hpbGQpOwotICAgIGdfYXNzZXJ0KGNoaWxkX3JvbGUgPT0gcm9sZSk7Ci0KLSAg
ICBnX29iamVjdF91bnJlZihjaGlsZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0
a19nZXRfcm9sZV9kb2N1bWVudF9mcmFtZShBdGtSb2xlc0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25z
dHBvaW50ZXIgZGF0YSkKLXsKLSAgICBmaXh0dXJlLT5yb2xlID0gYXRrX29iamVjdF9nZXRfcm9s
ZShmaXh0dXJlLT5kb2N1bWVudCk7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+cm9sZSA9PSBBVEtf
Uk9MRV9ET0NVTUVOVF9XRUIpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0
X3JvbGVfaGVhZGluZyhBdGtSb2xlc0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0
YSkKLXsKLSAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5kb2N1bWVudCwgMCwg
QVRLX1JPTEVfSEVBRElORyk7Ci0gICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+
ZG9jdW1lbnQsIDEsIEFUS19ST0xFX0hFQURJTkcpOwotICAgIGdldF9jaGlsZF9hbmRfdGVzdF9y
b2xlKGZpeHR1cmUtPmRvY3VtZW50LCAyLCBBVEtfUk9MRV9IRUFESU5HKTsKLSAgICBnZXRfY2hp
bGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5kb2N1bWVudCwgMywgQVRLX1JPTEVfSEVBRElORyk7
Ci0gICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+ZG9jdW1lbnQsIDQsIEFUS19S
T0xFX0hFQURJTkcpOwotICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPmRvY3Vt
ZW50LCA1LCBBVEtfUk9MRV9IRUFESU5HKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRf
YXRrX2dldF9yb2xlX2ltYWdlKEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRl
ciBkYXRhKQotewotICAgIC8vIFRoaXMgaXMgYW4gZXh0cmFuZW91cyBvYmplY3Qgb2YgQVRLX1JP
TEVfUEFORUwgd2hpY2ggd2Ugc2hvdWxkIGdldCByaWQgb2YuCi0gICAgZml4dHVyZS0+b2JqID0g
YXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmaXh0dXJlLT5kb2N1bWVudCwgMCk7Ci0g
ICAgZ19hc3NlcnQoZml4dHVyZS0+b2JqKTsKLQotICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xl
KGZpeHR1cmUtPm9iaiwgMCwgQVRLX1JPTEVfSU1BR0UpOwotCi0gICAgZ19vYmplY3RfdW5yZWYo
Zml4dHVyZS0+b2JqKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xl
X2xpbmsoQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0g
ICAgLy8gVGhpcyBpcyBhbiBleHRyYW5lb3VzIG9iamVjdCBvZiBBVEtfUk9MRV9QQU5FTCB3aGlj
aCB3ZSBzaG91bGQgZ2V0IHJpZCBvZi4KLSAgICBmaXh0dXJlLT5vYmogPSBhdGtfb2JqZWN0X3Jl
Zl9hY2Nlc3NpYmxlX2NoaWxkKGZpeHR1cmUtPmRvY3VtZW50LCAwKTsKLSAgICBnX2Fzc2VydChm
aXh0dXJlLT5vYmopOwotCi0gICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+b2Jq
LCAwLCBBVEtfUk9MRV9MSU5LKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9iaik7
Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9saXN0X2FuZF9pdGVt
KEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIEF0
a09iamVjdCogbGlzdE9iajsKLQotICAgIGxpc3RPYmogPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3Np
YmxlX2NoaWxkKGZpeHR1cmUtPmRvY3VtZW50LCAwKTsKLSAgICBnX2Fzc2VydChsaXN0T2JqKTsK
LSAgICBmaXh0dXJlLT5yb2xlID0gYXRrX29iamVjdF9nZXRfcm9sZShsaXN0T2JqKTsKLSAgICBn
X2Fzc2VydChmaXh0dXJlLT5yb2xlID09IEFUS19ST0xFX0xJU1QpOwotCi0gICAgZ2V0X2NoaWxk
X2FuZF90ZXN0X3JvbGUobGlzdE9iaiwgMCwgQVRLX1JPTEVfTElTVF9JVEVNKTsKLSAgICBnZXRf
Y2hpbGRfYW5kX3Rlc3Rfcm9sZShsaXN0T2JqLCAxLCBBVEtfUk9MRV9MSVNUX0lURU0pOwotICAg
IGdfb2JqZWN0X3VucmVmKGxpc3RPYmopOwotCi0gICAgbGlzdE9iaiA9IGF0a19vYmplY3RfcmVm
X2FjY2Vzc2libGVfY2hpbGQoZml4dHVyZS0+ZG9jdW1lbnQsIDEpOwotICAgIGdfYXNzZXJ0KGxp
c3RPYmopOwotICAgIGZpeHR1cmUtPnJvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKGxpc3RPYmop
OwotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPnJvbGUgPT0gQVRLX1JPTEVfTElTVCk7Ci0KLSAgICBn
ZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShsaXN0T2JqLCAwLCBBVEtfUk9MRV9MSVNUX0lURU0pOwot
ICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGxpc3RPYmosIDEsIEFUS19ST0xFX0xJU1RfSVRF
TSk7Ci0gICAgZ19vYmplY3RfdW5yZWYobGlzdE9iaik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rf
d2Via2l0X2F0a19nZXRfcm9sZV9wYXJhZ3JhcGgoQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBn
Y29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVy
ZS0+ZG9jdW1lbnQsIDAsIEFUS19ST0xFX1BBUkFHUkFQSCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRl
c3Rfd2Via2l0X2F0a19nZXRfcm9sZV9zZWN0aW9uKEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwg
Z2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1
cmUtPmRvY3VtZW50LCAwLCBBVEtfUk9MRV9TRUNUSU9OKTsKLX0KLQotLy8gRG9lcyBub3QgeWV0
IHRlc3QgdGFibGUgY2VsbHMgYmVjYXVzZSBvZiBidWcgMzA4OTUuCi1zdGF0aWMgdm9pZCB0ZXN0
X3dlYmtpdF9hdGtfZ2V0X3JvbGVfdGFibGUoQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29u
c3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+
ZG9jdW1lbnQsIDAsIEFUS19ST0xFX1RBQkxFKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJr
aXRfYXRrX2dldF9yb2xlX3NlcGFyYXRvcihBdGtSb2xlc0ZpeHR1cmUgKmZpeHR1cmUsIGdjb25z
dHBvaW50ZXIgZGF0YSkKLXsKLSAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5k
b2N1bWVudCwgMCwgQVRLX1JPTEVfU0VQQVJBVE9SKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93
ZWJraXRfYXRrX2dldF9yb2xlX2NvbWJvYm94KEF0a1JvbGVzRml4dHVyZSAqZml4dHVyZSwgZ2Nv
bnN0cG9pbnRlciBkYXRhKQotewotICAgIEF0a09iamVjdCogY29tYm9ib3hNZW51OwotCi0gICAg
Ly8gVGhpcyBpcyBhbiBleHRyYW5lb3VzIG9iamVjdCBvZiBBVEtfUk9MRV9QQU5FTCB3aGljaCB3
ZSBzaG91bGQgZ2V0IHJpZCBvZi4KLSAgICBmaXh0dXJlLT5vYmogPSBhdGtfb2JqZWN0X3JlZl9h
Y2Nlc3NpYmxlX2NoaWxkKGZpeHR1cmUtPmRvY3VtZW50LCAwKTsKLSAgICBnX2Fzc2VydChmaXh0
dXJlLT5vYmopOwotCi0gICAgZml4dHVyZS0+b2JqID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJs
ZV9jaGlsZChmaXh0dXJlLT5vYmosIDApOwotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPm9iaik7Ci0g
ICAgZml4dHVyZS0+cm9sZSA9IGF0a19vYmplY3RfZ2V0X3JvbGUoZml4dHVyZS0+b2JqKTsKLSAg
ICBnX2Fzc2VydChmaXh0dXJlLT5yb2xlID09IEFUS19ST0xFX0NPTUJPX0JPWCk7Ci0KLSAgICBj
b21ib2JveE1lbnUgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZpeHR1cmUtPm9i
aiwgMCk7Ci0gICAgZ19hc3NlcnQoY29tYm9ib3hNZW51KTsKLSAgICBmaXh0dXJlLT5yb2xlID0g
YXRrX29iamVjdF9nZXRfcm9sZShjb21ib2JveE1lbnUpOwotICAgIGdfYXNzZXJ0KGZpeHR1cmUt
PnJvbGUgPT0gQVRLX1JPTEVfTUVOVSk7Ci0KLSAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShj
b21ib2JveE1lbnUsIDAsIEFUS19ST0xFX01FTlVfSVRFTSk7Ci0gICAgZ2V0X2NoaWxkX2FuZF90
ZXN0X3JvbGUoY29tYm9ib3hNZW51LCAxLCBBVEtfUk9MRV9NRU5VX0lURU0pOwotICAgIGdldF9j
aGlsZF9hbmRfdGVzdF9yb2xlKGNvbWJvYm94TWVudSwgMiwgQVRLX1JPTEVfTUVOVV9JVEVNKTsK
LQotICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9iaik7Ci0gICAgZ19vYmplY3RfdW5yZWYo
Y29tYm9ib3hNZW51KTsKLX0KLQotLyogRm9ybSByb2xlcyAqLwotc3RhdGljIHZvaWQgdGVzdF93
ZWJraXRfYXRrX2dldF9yb2xlX2Zvcm0oQXRrUm9sZXNGaXh0dXJlICpmaXh0dXJlLCBnY29uc3Rw
b2ludGVyIGRhdGEpCi17Ci0gICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+ZG9j
dW1lbnQsIDAsIEFUS19ST0xFX0ZPUk0pOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9h
dGtfZ2V0X3JvbGVfY2hlY2tfYm94KEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9p
bnRlciBkYXRhKQotewotICAgIC8vIFRoaXMgaXMgYW4gZXh0cmFuZW91cyBvYmplY3Qgb2YgQVRL
X1JPTEVfUEFORUwgd2hpY2ggd2Ugc2hvdWxkIGdldCByaWQgb2YuCi0gICAgZml4dHVyZS0+b2Jq
ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmaXh0dXJlLT5kb2N1bWVudCwgMCk7
Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+b2JqKTsKLQotICAgIGdldF9jaGlsZF9hbmRfdGVzdF9y
b2xlKGZpeHR1cmUtPm9iaiwgMCwgQVRLX1JPTEVfQ0hFQ0tfQk9YKTsKLQotICAgIGdfb2JqZWN0
X3VucmVmKGZpeHR1cmUtPm9iaik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19n
ZXRfcm9sZV9lbnRyeShBdGtSb2xlc0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0
YSkKLXsKLSAgICAvLyBUaGlzIGlzIGFuIGV4dHJhbmVvdXMgb2JqZWN0IG9mIEFUS19ST0xFX1BB
TkVMIHdoaWNoIHdlIHNob3VsZCBnZXQgcmlkIG9mLgotICAgIGZpeHR1cmUtPm9iaiA9IGF0a19v
YmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoZml4dHVyZS0+ZG9jdW1lbnQsIDApOwotICAgIGdf
YXNzZXJ0KGZpeHR1cmUtPm9iaik7Ci0KLSAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0
dXJlLT5vYmosIDEsIEFUS19ST0xFX0VOVFJZKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1
cmUtPm9iaik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9sYWJl
bChBdGtSb2xlc0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICAv
LyBUaGlzIGlzIGFuIGV4dHJhbmVvdXMgb2JqZWN0IG9mIEFUS19ST0xFX1BBTkVMIHdoaWNoIHdl
IHNob3VsZCBnZXQgcmlkIG9mLgotICAgIGZpeHR1cmUtPm9iaiA9IGF0a19vYmplY3RfcmVmX2Fj
Y2Vzc2libGVfY2hpbGQoZml4dHVyZS0+ZG9jdW1lbnQsIDApOwotICAgIGdfYXNzZXJ0KGZpeHR1
cmUtPm9iaik7Ci0KLSAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5vYmosIDAs
IEFUS19ST0xFX0xBQkVMKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9iaik7Ci19
Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9saXN0Ym94KEF0a1JvbGVz
Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIEF0a09iamVjdCog
bGlzdGJveE9iajsKLSAgICAvLyBUaGlzIGlzIGFuIGV4dHJhbmVvdXMgb2JqZWN0IG9mIEFUS19S
T0xFX1BBTkVMIHdoaWNoIHdlIHNob3VsZCBnZXQgcmlkIG9mLgotICAgIGZpeHR1cmUtPm9iaiA9
IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoZml4dHVyZS0+ZG9jdW1lbnQsIDApOwot
ICAgIGdfYXNzZXJ0KGZpeHR1cmUtPm9iaik7Ci0KLSAgICBsaXN0Ym94T2JqID0gYXRrX29iamVj
dF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmaXh0dXJlLT5vYmosIDApOwotICAgIGdfYXNzZXJ0KGxp
c3Rib3hPYmopOwotICAgIGZpeHR1cmUtPnJvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKGxpc3Ri
b3hPYmopOwotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPnJvbGUgPT0gQVRLX1JPTEVfTElTVCk7Ci0K
LSAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShsaXN0Ym94T2JqLCAwLCBBVEtfUk9MRV9MSVNU
X0lURU0pOwotICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGxpc3Rib3hPYmosIDEsIEFUS19S
T0xFX0xJU1RfSVRFTSk7Ci0gICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUobGlzdGJveE9iaiwg
MiwgQVRLX1JPTEVfTElTVF9JVEVNKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9i
aik7Ci0gICAgZ19vYmplY3RfdW5yZWYobGlzdGJveE9iaik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRl
c3Rfd2Via2l0X2F0a19nZXRfcm9sZV9wYXNzd29yZF90ZXh0KEF0a1JvbGVzRml4dHVyZSogZml4
dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIC8vIFRoaXMgaXMgYW4gZXh0cmFuZW91
cyBvYmplY3Qgb2YgQVRLX1JPTEVfUEFORUwgd2hpY2ggd2Ugc2hvdWxkIGdldCByaWQgb2YuCi0g
ICAgZml4dHVyZS0+b2JqID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmaXh0dXJl
LT5kb2N1bWVudCwgMCk7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+b2JqKTsKLQotICAgIGdldF9j
aGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPm9iaiwgMCwgQVRLX1JPTEVfUEFTU1dPUkRfVEVY
VCk7Ci0KLSAgICBnX29iamVjdF91bnJlZihmaXh0dXJlLT5vYmopOwotfQotCi1zdGF0aWMgdm9p
ZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfcHVzaF9idXR0b24oQXRrUm9sZXNGaXh0dXJlKiBm
aXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgLy8gVGhpcyBpcyBhbiBleHRyYW5l
b3VzIG9iamVjdCBvZiBBVEtfUk9MRV9QQU5FTCB3aGljaCB3ZSBzaG91bGQgZ2V0IHJpZCBvZi4K
LSAgICBmaXh0dXJlLT5vYmogPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZpeHR1
cmUtPmRvY3VtZW50LCAwKTsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT5vYmopOwotCi0gICAgZ2V0
X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+b2JqLCAwLCBBVEtfUk9MRV9QVVNIX0JVVFRP
Tik7Ci0KLSAgICBnX29iamVjdF91bnJlZihmaXh0dXJlLT5vYmopOwotfQotCi1zdGF0aWMgdm9p
ZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfcmFkaW9fYnV0dG9uKEF0a1JvbGVzRml4dHVyZSog
Zml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIC8vIFRoaXMgaXMgYW4gZXh0cmFu
ZW91cyBvYmplY3Qgb2YgQVRLX1JPTEVfUEFORUwgd2hpY2ggd2Ugc2hvdWxkIGdldCByaWQgb2Yu
Ci0gICAgZml4dHVyZS0+b2JqID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmaXh0
dXJlLT5kb2N1bWVudCwgMCk7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+b2JqKTsKLQotICAgIGdl
dF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPm9iaiwgMCwgQVRLX1JPTEVfUkFESU9fQlVU
VE9OKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9iaik7Ci19Ci0KLWludCBtYWlu
KGludCBhcmdjLCBjaGFyKiogYXJndikKLXsKLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJn
diwgTlVMTCk7Ci0KLSAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3Jn
LyIpOwotCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9hdGsvdGVzdF93ZWJraXRfYXRrX2dldF9y
b2xlX2RvY3VtZW50X2ZyYW1lIiwKLSAgICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVyZSwgSFRN
TF9ET0NVTUVOVF9GUkFNRSwKLSAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVw
LAotICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2RvY3VtZW50X2ZyYW1l
LAotICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAgZ190
ZXN0X2FkZCgiL3dlYmtpdC9hdGsvdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2hlYWRpbmciLAot
ICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX0hFQURJTkcsCi0gICAgICAgICAg
ICAgICBhdGtfcm9sZXNfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0
X2F0a19nZXRfcm9sZV9oZWFkaW5nLAotICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVf
dGVhcmRvd24pOwotCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9hdGsvdGVzdF93ZWJraXRfYXRr
X2dldF9yb2xlX2ltYWdlIiwKLSAgICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVyZSwgSFRNTF9J
TUFHRSwKLSAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAotICAgICAgICAg
ICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2ltYWdlLAotICAgICAgICAgICAgICAgYXRr
X3JvbGVzX2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9hdGsv
dGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xpbmsiLAotICAgICAgICAgICAgICAgQXRrUm9sZXNG
aXh0dXJlLCBIVE1MX0xJTktfVEVYVCwKLSAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJl
X3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xpbmssCi0g
ICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAgICBnX3Rlc3Rf
YWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfbGlzdF9hbmRfaXRlbSIs
Ci0gICAgICAgICAgICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhUTUxfTElTVCwKLSAgICAgICAgICAg
ICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF93ZWJraXRf
YXRrX2dldF9yb2xlX2xpc3RfYW5kX2l0ZW0sCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4
dHVyZV90ZWFyZG93bik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtp
dF9hdGtfZ2V0X3JvbGVfcGFyYWdyYXBoIiwKLSAgICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVy
ZSwgSFRNTF9QQVJBR1JBUEgsCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV9zZXR1
cCwKLSAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9wYXJhZ3JhcGgsCi0g
ICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAgICBnX3Rlc3Rf
YWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfc2VjdGlvbiIsCi0gICAg
ICAgICAgICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhUTUxfU0VDVElPTiwKLSAgICAgICAgICAgICAg
IGF0a19yb2xlc19maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRr
X2dldF9yb2xlX3NlY3Rpb24sCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFy
ZG93bik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0
X3JvbGVfdGFibGUiLAotICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX1RBQkxF
LAotICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAg
ICB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfdGFibGUsCi0gICAgICAgICAgICAgICBhdGtfcm9s
ZXNfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0
X3dlYmtpdF9hdGtfZ2V0X3JvbGVfc2VwYXJhdG9yIiwKLSAgICAgICAgICAgICAgIEF0a1JvbGVz
Rml4dHVyZSwgSFRNTF9TRVBBUkFUT1IsCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVy
ZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9zZXBhcmF0
b3IsCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAgICBn
X3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfY29tYm9ib3gi
LAotICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX0NPTUJPQk9YLAotICAgICAg
ICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X3dl
YmtpdF9hdGtfZ2V0X3JvbGVfY29tYm9ib3gsCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4
dHVyZV90ZWFyZG93bik7Ci0KLSAgICAvKiBGb3JtIHJvbGVzICovCi0gICAgZ190ZXN0X2FkZCgi
L3dlYmtpdC9hdGsvdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2Zvcm0iLAotICAgICAgICAgICAg
ICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX0ZPUk0sCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNf
Zml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9m
b3JtLAotICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfdGVhcmRvd24pOwotICAgIGdf
dGVzdF9hZGQoIi93ZWJraXQvYXRrL3Rlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9jaGVja19ib3gi
LAotICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX0NIRUNLX0JPWCwKLSAgICAg
ICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF93
ZWJraXRfYXRrX2dldF9yb2xlX2NoZWNrX2JveCwKLSAgICAgICAgICAgICAgIGF0a19yb2xlc19m
aXh0dXJlX3RlYXJkb3duKTsKLQotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvYXRrL3Rlc3Rfd2Vi
a2l0X2F0a19nZXRfcm9sZV9lbnRyeSIsCi0gICAgICAgICAgICAgICBBdGtSb2xlc0ZpeHR1cmUs
IEhUTUxfTEFCRUxFRF9FTlRSWSwKLSAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3Nl
dHVwLAotICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2VudHJ5LAotICAg
ICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAgZ190ZXN0X2Fk
ZCgiL3dlYmtpdC9hdGsvdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xhYmVsIiwKLSAgICAgICAg
ICAgICAgIEF0a1JvbGVzRml4dHVyZSwgSFRNTF9MQUJFTEVEX0VOVFJZLAotICAgICAgICAgICAg
ICAgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF9h
dGtfZ2V0X3JvbGVfbGFiZWwsCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFy
ZG93bik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0
X3JvbGVfbGlzdGJveCIsCi0gICAgICAgICAgICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhUTUxfTElT
VEJPWCwKLSAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAotICAgICAgICAg
ICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xpc3Rib3gsCi0gICAgICAgICAgICAgICBh
dGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0
ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfcGFzc3dvcmRfdGV4dCIsCi0gICAgICAgICAgICAg
ICBBdGtSb2xlc0ZpeHR1cmUsIEhUTUxfUEFTU1dPUkRfVEVYVCwKLSAgICAgICAgICAgICAgIGF0
a19yb2xlc19maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dl
dF9yb2xlX3Bhc3N3b3JkX3RleHQsCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90
ZWFyZG93bik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtf
Z2V0X3JvbGVfcHVzaF9idXR0b24iLAotICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBI
VE1MX1BVU0hfQlVUVE9OLAotICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAs
Ci0gICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfcHVzaF9idXR0b24sCi0g
ICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAgICBnX3Rlc3Rf
YWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfcmFkaW9fYnV0dG9uIiwK
LSAgICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVyZSwgSFRNTF9SQURJT19CVVRUT04sCi0gICAg
ICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3Rf
d2Via2l0X2F0a19nZXRfcm9sZV9yYWRpb19idXR0b24sCi0gICAgICAgICAgICAgICBhdGtfcm9s
ZXNfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAgICByZXR1cm4gZ190ZXN0X3J1bigpOwotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGNvbnRleHRtZW51LmMgYi9Tb3Vy
Y2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0Y29udGV4dG1lbnUuYwpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNTRhYWE1Ny4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0
cy90ZXN0Y29udGV4dG1lbnUuYworKysgL2Rldi9udWxsCkBAIC0xLDMxNCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgot
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgY2hhciAq
ZGF0YTsKLSAgICBndWludCBmbGFnOwotfSBUZXN0SW5mbzsKLQotc3RhdGljIEdNYWluTG9vcCAq
bG9vcDsKLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIFdlYktpdFdlYlZpZXcgKndlYlZpZXc7Ci0g
ICAgVGVzdEluZm8gKmluZm87Ci19IENvbnRleHRNZW51Rml4dHVyZTsKLQotc3RhdGljIFRlc3RJ
bmZvICp0ZXN0SW5mb05ldyhjb25zdCBjaGFyICpkYXRhLCBndWludCBmbGFnKQotewotICAgIFRl
c3RJbmZvICppbmZvID0gZ19zbGljZV9uZXcoVGVzdEluZm8pOwotICAgIGluZm8tPmRhdGEgPSBn
X3N0cmR1cChkYXRhKTsKLSAgICBpbmZvLT5mbGFnID0gZmxhZzsKLQotICAgIHJldHVybiBpbmZv
OwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0SW5mb0Rlc3Ryb3koVGVzdEluZm8gKmluZm8pCi17Ci0g
ICAgZ19mcmVlKGluZm8tPmRhdGEpOwotICAgIGdfc2xpY2VfZnJlZShUZXN0SW5mbywgaW5mbyk7
Ci19Ci0KLXN0YXRpYyB2b2lkIGNvbnRleHRNZW51Rml4dHVyZVNldHVwKENvbnRleHRNZW51Rml4
dHVyZSAqZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGZpeHR1cmUtPndlYlZp
ZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBsb29wID0g
Z19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotICAgIGZpeHR1cmUtPmluZm8gPSAoVGVzdElu
Zm8gKilkYXRhOwotfQotCi1zdGF0aWMgdm9pZCBjb250ZXh0TWVudUZpeHR1cmVUZWFyZG93bihD
b250ZXh0TWVudUZpeHR1cmUgKmZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBn
X29iamVjdF91bnJlZihmaXh0dXJlLT53ZWJWaWV3KTsKLSAgICBnX21haW5fbG9vcF91bnJlZihs
b29wKTsKLSAgICB0ZXN0SW5mb0Rlc3Ryb3koZml4dHVyZS0+aW5mbyk7Ci19Ci0KLXN0YXRpYyBH
TGlzdCAqY2hlY2tBY3Rpb24oR0xpc3QgKml0ZXIsIFdlYktpdENvbnRleHRNZW51QWN0aW9uIGFj
dGlvbikKLXsKLSAgICBHdGtNZW51SXRlbSAqaXRlbSA9IChHdGtNZW51SXRlbSAqKWl0ZXItPmRh
dGE7Ci0KLSAgICBnX2Fzc2VydChHVEtfSVNfTUVOVV9JVEVNKGl0ZW0pKTsKLSAgICBnX2Fzc2Vy
dCh3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X2FjdGlvbihpdGVtKSA9PSBhY3Rpb24pOwot
Ci0gICAgcmV0dXJuIGl0ZXItPm5leHQ7Ci19Ci0KLXN0YXRpYyBHTGlzdCAqY2hlY2tBY3Rpb25X
aXRoU3VibWVudShHTGlzdCAqaXRlciwgV2ViS2l0Q29udGV4dE1lbnVBY3Rpb24gYWN0aW9uKQot
ewotICAgIEd0a01lbnVJdGVtICppdGVtID0gKEd0a01lbnVJdGVtICopaXRlci0+ZGF0YTsKLQot
ICAgIGdfYXNzZXJ0KEdUS19JU19NRU5VX0lURU0oaXRlbSkpOwotICAgIGdfYXNzZXJ0KHdlYmtp
dF9jb250ZXh0X21lbnVfaXRlbV9nZXRfYWN0aW9uKGl0ZW0pID09IGFjdGlvbik7Ci0gICAgZ19h
c3NlcnQoR1RLX0lTX01FTlUoZ3RrX21lbnVfaXRlbV9nZXRfc3VibWVudShpdGVtKSkpOwotCi0g
ICAgcmV0dXJuIGl0ZXItPm5leHQ7Ci19Ci0KLXN0YXRpYyBHTGlzdCAqY2hlY2tTZXBhcmF0b3Io
R0xpc3QgKml0ZXIpCi17Ci0gICAgR3RrTWVudUl0ZW0gKml0ZW0gPSAoR3RrTWVudUl0ZW0gKilp
dGVyLT5kYXRhOwotCi0gICAgZ19hc3NlcnQoR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRl
bSkpOwotCi0gICAgcmV0dXJuIGl0ZXItPm5leHQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBjb250
ZXh0TWVudUNhbGxiYWNrKFdlYktpdFdlYlZpZXcgKndlYlZpZXcsIEd0a1dpZGdldCAqZGVmYXVs
dE1lbnUsIFdlYktpdEhpdFRlc3RSZXN1bHQgKmhpdFRlc3RSZXN1bHQsIGdib29sZWFuIGtleWJv
YXJkTW9kZSwgZ3BvaW50ZXIgdXNlckRhdGEpCi17Ci0gICAgVGVzdEluZm8gKmluZm8gPSAoVGVz
dEluZm8gKil1c2VyRGF0YTsKLSAgICBndWludCBjb250ZXh0OwotICAgIEdMaXN0ICppdGVtczsK
LSAgICBHTGlzdCAqaXRlcjsKLQotICAgIC8qIENoZWNrIHNpZ25hbCBwYXJhbWV0ZXJzICovCi0g
ICAgZ19hc3NlcnQoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpKTsKLSAgICBnX2Fzc2VydChH
VEtfSVNfTUVOVShkZWZhdWx0TWVudSkpOwotICAgIGdfYXNzZXJ0KFdFQktJVF9JU19ISVRfVEVT
VF9SRVNVTFQoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0KCFrZXlib2FyZE1vZGUpOwot
Ci0gICAgZ19vYmplY3RfZ2V0KGhpdFRlc3RSZXN1bHQsICJjb250ZXh0IiwgJmNvbnRleHQsIE5V
TEwpOwotICAgIGdfYXNzZXJ0KGNvbnRleHQgJiBpbmZvLT5mbGFnKTsKLQotICAgIGl0ZW1zID0g
Z3RrX2NvbnRhaW5lcl9nZXRfY2hpbGRyZW4oR1RLX0NPTlRBSU5FUihkZWZhdWx0TWVudSkpOwot
ICAgIHN3aXRjaCAoaW5mby0+ZmxhZykgewotICAgIGNhc2UgV0VCS0lUX0hJVF9URVNUX1JFU1VM
VF9DT05URVhUX0RPQ1VNRU5UOgotICAgICAgICBpdGVyID0gaXRlbXM7Ci0gICAgICAgIGl0ZXIg
PSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9HT19CQUNLKTsK
LSAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNU
SU9OX0dPX0ZPUldBUkQpOwotICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lU
X0NPTlRFWFRfTUVOVV9BQ1RJT05fU1RPUCk7Ci0gICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihp
dGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9SRUxPQUQpOwotICAgICAgICBnX2Fzc2Vy
dCghaXRlcik7Ci0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXRUJLSVRfSElUX1RFU1RfUkVT
VUxUX0NPTlRFWFRfSU1BR0U6Ci0gICAgICAgIGl0ZXIgPSBpdGVtczsKLSAgICAgICAgaXRlciA9
IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5fSU1BR0Vf
SU5fTkVXX1dJTkRPVyk7Ci0gICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRf
Q09OVEVYVF9NRU5VX0FDVElPTl9ET1dOTE9BRF9JTUFHRV9UT19ESVNLKTsKLSAgICAgICAgaXRl
ciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFlfSU1B
R0VfVE9fQ0xJUEJPQVJEKTsKLSAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJ
VF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFlfSU1BR0VfVVJMX1RPX0NMSVBCT0FSRCk7Ci0gICAg
ICAgIGdfYXNzZXJ0KCFpdGVyKTsKLQotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdFQktJVF9I
SVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9FRElUQUJMRToKLSAgICAgICAgaXRlciA9IGl0ZW1zOwot
ICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T05fQ1VUKTsKLSAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhU
X01FTlVfQUNUSU9OX0NPUFkpOwotICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VC
S0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fUEFTVEUpOwotICAgICAgICBpdGVyID0gY2hlY2tBY3Rp
b24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fREVMRVRFKTsKLSAgICAgICAgaXRl
ciA9IGNoZWNrU2VwYXJhdG9yKGl0ZXIpOwotICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRl
ciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fU0VMRUNUX0FMTCk7Ci0gICAgICAgIGl0ZXIg
PSBjaGVja1NlcGFyYXRvcihpdGVyKTsKLSAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uV2l0aFN1
Ym1lbnUoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fSU5QVVRfTUVUSE9EUyk7Ci0g
ICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbldpdGhTdWJtZW51KGl0ZXIsIFdFQktJVF9DT05URVhU
X01FTlVfQUNUSU9OX1VOSUNPREUpOwotICAgICAgICBnX2Fzc2VydCghaXRlcik7Ci0KLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfTElOSzoK
LSAgICAgICAgaXRlciA9IGl0ZW1zOwotICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwg
V0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9MSU5LKTsKLSAgICAgICAgaXRlciA9IGNo
ZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5fTElOS19JTl9O
RVdfV0lORE9XKTsKLSAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05U
RVhUX01FTlVfQUNUSU9OX0RPV05MT0FEX0xJTktfVE9fRElTSyk7Ci0gICAgICAgIGl0ZXIgPSBj
aGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX0xJTktfVE9f
Q0xJUEJPQVJEKTsKLSAgICAgICAgZ19hc3NlcnQoIWl0ZXIpOwotCi0gICAgICAgIGJyZWFrOwot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0gICAgfQotCi0g
ICAgZ19saXN0X2ZyZWUoaXRlbXMpOwotICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci0KLSAg
ICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQgcHVzaEV2ZW50KFdlYktpdFdlYlZpZXcg
KndlYlZpZXcpCi17Ci0gICAgR2RrRXZlbnQgKmV2ZW50ID0gZ2RrX2V2ZW50X25ldyhHREtfQlVU
VE9OX1BSRVNTKTsKLSNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAwLCAwKQotICAgIEdka0Rldmlj
ZU1hbmFnZXIgKmRldmljZU1hbmFnZXI7Ci0jZW5kaWYKLQotICAgIGV2ZW50LT5hbnkud2luZG93
ID0gZ19vYmplY3RfcmVmKGd0a193aWRnZXRfZ2V0X3dpbmRvdyhHVEtfV0lER0VUKHdlYlZpZXcp
KSk7Ci0gICAgZXZlbnQtPmFueS5zZW5kX2V2ZW50ID0gRkFMU0U7Ci0gICAgZXZlbnQtPmJ1dHRv
bi50aW1lID0gR0RLX0NVUlJFTlRfVElNRTsKLSAgICBldmVudC0+YnV0dG9uLmJ1dHRvbiA9IDM7
Ci0gICAgZXZlbnQtPmJ1dHRvbi54ID0gZXZlbnQtPmJ1dHRvbi55ID0gNTsKLSAgICBldmVudC0+
YnV0dG9uLnhfcm9vdCA9IGV2ZW50LT5idXR0b24ueDsKLSAgICBldmVudC0+YnV0dG9uLnlfcm9v
dCA9IGV2ZW50LT5idXR0b24ueTsKLSNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAwLCAwKQotICAg
IGRldmljZU1hbmFnZXIgPSBnZGtfZGlzcGxheV9nZXRfZGV2aWNlX21hbmFnZXIoZ2RrX2Rpc3Bs
YXlfZ2V0X2RlZmF1bHQoKSk7Ci0gICAgZXZlbnQtPmJ1dHRvbi5kZXZpY2UgPSBnZGtfZGV2aWNl
X21hbmFnZXJfZ2V0X2NsaWVudF9wb2ludGVyKGRldmljZU1hbmFnZXIpOwotI2VuZGlmCi0KLSAg
ICBnZGtfZXZlbnRfcHV0KGV2ZW50KTsKLSAgICBnZGtfZXZlbnRfZnJlZShldmVudCk7Ci19Ci0K
LXN0YXRpYyB2b2lkIGxvYWRTdGF0dXNDYWxsYmFjayhXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3LCBH
UGFyYW1TcGVjICpzcGVjLCBncG9pbnRlciBkYXRhKQotewotICAgIFdlYktpdExvYWRTdGF0dXMg
c3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJWaWV3KTsKLSAgICBU
ZXN0SW5mbyAqaW5mbyA9IChUZXN0SW5mbyAqKWRhdGE7Ci0KLSAgICBnX2Fzc2VydChzdGF0dXMg
IT0gV0VCS0lUX0xPQURfRkFJTEVEKTsKLQotICAgIGlmIChzdGF0dXMgIT0gV0VCS0lUX0xPQURf
RklOSVNIRUQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmll
dywgImNvbnRleHQtbWVudSIsIEdfQ0FMTEJBQ0soY29udGV4dE1lbnVDYWxsYmFjayksIGluZm8p
OwotICAgIHB1c2hFdmVudCh3ZWJWaWV3KTsKLX0KLQotc3RhdGljIGdib29sZWFuIG1hcEV2ZW50
Q2FsbGJhY2soR3RrV2lkZ2V0ICp3aWRnZXQsIEdka0V2ZW50ICpldmVudCwgZ3BvaW50ZXIgZGF0
YSkKLXsKLSAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMod2lkZ2V0KTsKLSAgICBDb250ZXh0TWVu
dUZpeHR1cmUgKmZpeHR1cmUgPSAoQ29udGV4dE1lbnVGaXh0dXJlICopZGF0YTsKLSAgICB3ZWJr
aXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoZml4dHVyZS0+d2ViVmlldywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZml4dHVyZS0+aW5mby0+ZGF0YSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgInRleHQvaHRtbCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJ1dGYtOCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlOi8vIik7
Ci0gICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0
YXR1cyIsIEdfQ0FMTEJBQ0sobG9hZFN0YXR1c0NhbGxiYWNrKSwgZml4dHVyZS0+aW5mbyk7Ci0g
ICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0Q29udGV4dE1lbnUoQ29udGV4
dE1lbnVGaXh0dXJlICpmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgR3RrQWxs
b2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA1MCwgNTAgfTsKLSAgICBHdGtXaWRnZXQgKndp
bmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfUE9QVVApOwotCi0gICAgZ3RrX3dpbmRv
d19yZXNpemUoR1RLX1dJTkRPVyh3aW5kb3cpLCA1MCwgNTApOwotICAgIGd0a193aW5kb3dfbW92
ZShHVEtfV0lORE9XKHdpbmRvdyksIDAsIDApOwotICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0
ZShHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpLCAmYWxsb2NhdGlvbik7Ci0gICAgZ3RrX2Nv
bnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCBHVEtfV0lER0VUKGZpeHR1cmUtPndl
YlZpZXcpKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHdpbmRvdywgIm1hcC1ldmVudCIsIEdfQ0FM
TEJBQ0sobWFwRXZlbnRDYWxsYmFjayksIGZpeHR1cmUpOwotICAgIGd0a193aWRnZXRfc2hvd19h
bGwod2luZG93KTsKLQotICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLX0KLQotc3RhdGljIGdi
b29sZWFuIGNvbnRleHRNZW51Q3VzdG9tSXRlbUNhbGxiYWNrKFdlYktpdFdlYlZpZXcgKndlYlZp
ZXcsIEd0a1dpZGdldCAqZGVmYXVsdE1lbnUsIFdlYktpdEhpdFRlc3RSZXN1bHQgKmhpdFRlc3RS
ZXN1bHQsIGdib29sZWFuIGtleWJvYXJkTW9kZSwgZ3BvaW50ZXIgdXNlckRhdGEpCi17Ci0gICAg
VGVzdEluZm8gKmluZm8gPSAoVGVzdEluZm8gKil1c2VyRGF0YTsKLSAgICBndWludCBjb250ZXh0
OwotICAgIEdMaXN0ICppdGVtczsKLSAgICBHTGlzdCAqaXRlcjsKLSAgICBHdGtXaWRnZXQgKm1l
bnVJdGVtOwotICAgIEd0a0FjdGlvbiAqYWN0aW9uOwotCi0gICAgLyogQ2hlY2sgc2lnbmFsIHBh
cmFtZXRlcnMgKi8KLSAgICBnX2Fzc2VydChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldykpOwot
ICAgIGdfYXNzZXJ0KEdUS19JU19NRU5VKGRlZmF1bHRNZW51KSk7Ci0gICAgZ19hc3NlcnQoV0VC
S0lUX0lTX0hJVF9URVNUX1JFU1VMVChoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIWtl
eWJvYXJkTW9kZSk7Ci0KLSAgICBnX29iamVjdF9nZXQoaGl0VGVzdFJlc3VsdCwgImNvbnRleHQi
LCAmY29udGV4dCwgTlVMTCk7Ci0gICAgZ19hc3NlcnQoY29udGV4dCAmIGluZm8tPmZsYWcpOwot
Ci0gICAgYWN0aW9uID0gZ3RrX2FjdGlvbl9uZXcoIlRlc3RBY3Rpb24iLCAiQ3VzdG9tIEFjdGlv
biIsICJDdXN0b20gQWN0aW9uIFRvb2x0aXAiLCBOVUxMKTsKLSAgICBtZW51SXRlbSA9IGd0a19h
Y3Rpb25fY3JlYXRlX21lbnVfaXRlbShhY3Rpb24pOwotICAgIGdfb2JqZWN0X3VucmVmKGFjdGlv
bik7Ci0KLSAgICBndGtfbWVudV9zaGVsbF9hcHBlbmQoR1RLX01FTlVfU0hFTEwoZGVmYXVsdE1l
bnUpLCBtZW51SXRlbSk7Ci0gICAgZ3RrX3dpZGdldF9zaG93KG1lbnVJdGVtKTsKLQotICAgIGl0
ZW1zID0gZ3RrX2NvbnRhaW5lcl9nZXRfY2hpbGRyZW4oR1RLX0NPTlRBSU5FUihkZWZhdWx0TWVu
dSkpOwotICAgIGl0ZXIgPSBpdGVtczsKLSAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VC
S0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fR09fQkFDSyk7Ci0gICAgaXRlciA9IGNoZWNrQWN0aW9u
KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0dPX0ZPUldBUkQpOwotICAgIGl0ZXIg
PSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9TVE9QKTsKLSAg
ICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fUkVM
T0FEKTsKLSAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9B
Q1RJT05fTk9fQUNUSU9OKTsKLSAgICBnX2Fzc2VydCghaXRlcik7Ci0KLSAgICBnX2xpc3RfZnJl
ZShpdGVtcyk7Ci0gICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKLQotICAgIHJldHVybiBUUlVF
OwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0Q29udGV4dE1lbnVDdXN0b21JdGVtKENvbnRleHRNZW51
Rml4dHVyZSAqZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIEd0a1dpZGdldCAq
d2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19QT1BVUCk7Ci0gICAgZ3RrX2NvbnRh
aW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCBHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZp
ZXcpKTsKLSAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7Ci0gICAgZ3RrX3dpZGdldF9n
cmFiX2ZvY3VzKEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldykpOwotCi0gICAgd2Via2l0X3dl
Yl92aWV3X2xvYWRfc3RyaW5nKGZpeHR1cmUtPndlYlZpZXcsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZpeHR1cmUtPmluZm8tPmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJ0ZXh0L2h0bWwiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
dXRmLTgiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZTovLyIpOwotICAg
IGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2ViVmlldywgImNvbnRleHQtbWVudSIsIEdfQ0FM
TEJBQ0soY29udGV4dE1lbnVDdXN0b21JdGVtQ2FsbGJhY2spLCBmaXh0dXJlLT5pbmZvKTsKLSAg
ICBwdXNoRXZlbnQoZml4dHVyZS0+d2ViVmlldyk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBj
aGFyICoqYXJndikKLXsKLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0K
LSAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwotCi0gICAg
Z190ZXN0X2FkZCgiL3dlYmtpdC90ZXN0Y29udGV4dG1lbnUvZG9jdW1lbnQiLCBDb250ZXh0TWVu
dUZpeHR1cmUsCi0gICAgICAgICAgICAgICB0ZXN0SW5mb05ldygiPGh0bWw+PGJvZHk+PGgxPldl
YktpdEdUSyshPC9oMT48L2JvZHk+PC9odG1sPiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfRE9DVU1FTlQpLAotICAgICAgICAgICAg
ICAgY29udGV4dE1lbnVGaXh0dXJlU2V0dXAsIHRlc3RDb250ZXh0TWVudSwgY29udGV4dE1lbnVG
aXh0dXJlVGVhcmRvd24pOwotICAgIC8qIFdlIGhhcmRjb2RlIGFsbCBlbGVtZW50cyB0byBiZSBh
dCAwLDAgc28gdGhhdCB3ZSBrbm93IHdoZXJlIHRvIGdlbmVyYXRlIHRoZSBidXR0b24gZXZlbnRz
ICovCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC90ZXN0Y29udGV4dG1lbnUvaW1hZ2UiLCBDb250
ZXh0TWVudUZpeHR1cmUsCi0gICAgICAgICAgICAgICB0ZXN0SW5mb05ldygiPGh0bWw+PGJvZHk+
PGltZyBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MDsgdG9wOjAnIHNyYz0nMHhkZWFk
YmVlZicgd2lkdGg9NTAgaGVpZ2h0PTUwPjwvaW1nPjwvYm9keT48L2h0bWw+IiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9JTUFHRSks
Ci0gICAgICAgICAgICAgICBjb250ZXh0TWVudUZpeHR1cmVTZXR1cCwgdGVzdENvbnRleHRNZW51
LCBjb250ZXh0TWVudUZpeHR1cmVUZWFyZG93bik7Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC90
ZXN0Y29udGV4dG1lbnUvZWRpdGFibGUiLCBDb250ZXh0TWVudUZpeHR1cmUsCi0gICAgICAgICAg
ICAgICB0ZXN0SW5mb05ldygiPGh0bWw+PGJvZHk+PGlucHV0IHN0eWxlPSdwb3NpdGlvbjphYnNv
bHV0ZTsgbGVmdDowOyB0b3A6MCcgc2l6ZT0nMzUnPjwvaW5wdXQ+PjwvYm9keT48L2h0bWw+IiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVY
VF9FRElUQUJMRSksCi0gICAgICAgICAgICAgICBjb250ZXh0TWVudUZpeHR1cmVTZXR1cCwgdGVz
dENvbnRleHRNZW51LCBjb250ZXh0TWVudUZpeHR1cmVUZWFyZG93bik7Ci0gICAgZ190ZXN0X2Fk
ZCgiL3dlYmtpdC90ZXN0Y29udGV4dG1lbnUvbGluayIsIENvbnRleHRNZW51Rml4dHVyZSwKLSAg
ICAgICAgICAgICAgIHRlc3RJbmZvTmV3KCI8aHRtbD48Ym9keT48YSBzdHlsZT0ncG9zaXRpb246
YWJzb2x1dGU7IGxlZnQ6MDsgdG9wOjAnIGhyZWY9J2h0dHA6Ly93d3cuZXhhbXBsZS5jb20nPkhF
TExPIFdPUkxEPC9hPjwvYm9keT48L2h0bWw+IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
IFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9MSU5LKSwKLSAgICAgICAgICAgICAgIGNv
bnRleHRNZW51Rml4dHVyZVNldHVwLCB0ZXN0Q29udGV4dE1lbnUsIGNvbnRleHRNZW51Rml4dHVy
ZVRlYXJkb3duKTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L3Rlc3Rjb250ZXh0bWVudS9jdXN0
b21pdGVtIiwgQ29udGV4dE1lbnVGaXh0dXJlLAotICAgICAgICAgICAgICAgdGVzdEluZm9OZXco
IjxodG1sPjxib2R5PjxoMT5XZWJLaXRHVEsrITwvaDE+PC9ib2R5PjwvaHRtbD4iLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0RPQ1VN
RU5UKSwKLSAgICAgICAgICAgICAgIGNvbnRleHRNZW51Rml4dHVyZVNldHVwLCB0ZXN0Q29udGV4
dE1lbnVDdXN0b21JdGVtLCBjb250ZXh0TWVudUZpeHR1cmVUZWFyZG93bik7Ci0KLSAgICByZXR1
cm4gZ190ZXN0X3J1bigpOwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0
cy90ZXN0Y29weWFuZHBhc3RlLmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0Y29weWFu
ZHBhc3RlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiMzhlYTYuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGNvcHlhbmRwYXN0ZS5jCisrKyAvZGV2
L251bGwKQEAgLTEsMjY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlh
IFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiwxIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUg
PHVuaXN0ZC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+
Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
U3RyaW5nUmVmLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0UmVmLmg+Ci0K
LXR5cGVkZWYgc3RydWN0IHsKLSAgICBjaGFyKiBwYWdlOwotICAgIGNoYXIqIGV4cGVjdGVkQ29u
dGVudDsKLX0gVGVzdEluZm87Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBHdGtXaWRnZXQqIHdp
bmRvdzsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OwotICAgIEdNYWluTG9vcCogbG9vcDsK
LSAgICBUZXN0SW5mbyogaW5mbzsKLX0gQ29weUFuZFBhc3RlRml4dHVyZTsKLQotVGVzdEluZm8q
Ci10ZXN0X2luZm9fbmV3KGNvbnN0IGNoYXIqIHBhZ2UsIGNvbnN0IGNoYXIqIGV4cGVjdGVkQ29u
dGVudCkKLXsKLSAgICBUZXN0SW5mbyogaW5mbzsKLSAgICBpbmZvID0gZ19zbGljZV9uZXcwKFRl
c3RJbmZvKTsKLSAgICBpbmZvLT5wYWdlID0gZ19zdHJkdXAocGFnZSk7Ci0gICAgaWYgKGV4cGVj
dGVkQ29udGVudCkKLSAgICAgICAgaW5mby0+ZXhwZWN0ZWRDb250ZW50ID0gZ19zdHJkdXAoZXhw
ZWN0ZWRDb250ZW50KTsKLSAgICByZXR1cm4gaW5mbzsKLX0KLQotdm9pZAotdGVzdF9pbmZvX2Rl
c3Ryb3koVGVzdEluZm8qIGluZm8pCi17Ci0gICAgZ19mcmVlKGluZm8tPnBhZ2UpOwotICAgIGdf
ZnJlZShpbmZvLT5leHBlY3RlZENvbnRlbnQpOwotICAgIGdfc2xpY2VfZnJlZShUZXN0SW5mbywg
aW5mbyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNvcHlfYW5kX3Bhc3RlX2ZpeHR1cmVfc2V0dXAoQ29w
eUFuZFBhc3RlRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGZp
eHR1cmUtPmxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7Ci0KLSAgICBmaXh0dXJl
LT53aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKLSAgICBmaXh0
dXJlLT53ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0K
LSAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGZpeHR1cmUtPndpbmRvdyksIEdU
S19XSURHRVQoZml4dHVyZS0+d2ViVmlldykpOwotfQotCi1zdGF0aWMgdm9pZCBjb3B5X2FuZF9w
YXN0ZV9maXh0dXJlX3RlYXJkb3duKENvcHlBbmRQYXN0ZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25z
dHBvaW50ZXIgZGF0YSkKLXsKLSAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koZml4dHVyZS0+d2luZG93
KTsKLSAgICBnX21haW5fbG9vcF91bnJlZihmaXh0dXJlLT5sb29wKTsKLSAgICB0ZXN0X2luZm9f
ZGVzdHJveShmaXh0dXJlLT5pbmZvKTsKLX0KLQotc3RhdGljIHZvaWQgbG9hZF9zdGF0dXNfY2Io
V2ViS2l0V2ViVmlldyogd2ViVmlldywgR1BhcmFtU3BlYyogc3BlYywgZ3BvaW50ZXIgZGF0YSkK
LXsKLSAgICBDb3B5QW5kUGFzdGVGaXh0dXJlKiBmaXh0dXJlID0gKENvcHlBbmRQYXN0ZUZpeHR1
cmUqKWRhdGE7Ci0gICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X2xvYWRfc3RhdHVzKHdlYlZpZXcpOwotICAgIGlmIChzdGF0dXMgIT0gV0VCS0lUX0xPQURf
RklOSVNIRUQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEd0a0NsaXBib2FyZCogY2xpcGJvYXJk
ID0gZ3RrX2NsaXBib2FyZF9nZXQoR0RLX1NFTEVDVElPTl9DTElQQk9BUkQpOwotICAgIGd0a19j
bGlwYm9hcmRfY2xlYXIoY2xpcGJvYXJkKTsKLQotICAgIHdlYmtpdF93ZWJfdmlld19jb3B5X2Ns
aXBib2FyZCh3ZWJWaWV3KTsKLQotICAgIGdjaGFyKiB0ZXh0ID0gZ3RrX2NsaXBib2FyZF93YWl0
X2Zvcl90ZXh0KGNsaXBib2FyZCk7Ci0gICAgZ19hc3NlcnQodGV4dCB8fCAhZml4dHVyZS0+aW5m
by0+ZXhwZWN0ZWRDb250ZW50KTsKLSAgICBnX2Fzc2VydCghdGV4dCB8fCAhc3RyY21wKHRleHQs
IGZpeHR1cmUtPmluZm8tPmV4cGVjdGVkQ29udGVudCkpOwotICAgIGdfZnJlZSh0ZXh0KTsKLQot
ICAgIC8vIFZlcmlmeSB0aGF0IHRoZSBtYXJrdXAgc3RhcnRzIHdpdGggdGhlIHByb3BlciBjb250
ZW50LXR5cGUgbWV0YSB0YWcgcHJlZml4LgotICAgIEd0a1NlbGVjdGlvbkRhdGEqIHNlbGVjdGlv
bkRhdGEgPSBndGtfY2xpcGJvYXJkX3dhaXRfZm9yX2NvbnRlbnRzKGNsaXBib2FyZCwgZ2RrX2F0
b21faW50ZXJuKCJ0ZXh0L2h0bWwiLCBGQUxTRSkpOwotICAgIGlmIChzZWxlY3Rpb25EYXRhKSB7
Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBtYXJrdXBQcmVmaXggPSAiPG1ldGEgaHR0cC1l
cXVpdj1cImNvbnRlbnQtdHlwZVwiIGNvbnRlbnQ9XCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLThc
Ij4iOwotICAgICAgICBjaGFyKiBtYXJrdXAgPSBnX3N0cm5kdXAoKGNvbnN0IGNoYXIqKSBndGtf
c2VsZWN0aW9uX2RhdGFfZ2V0X2RhdGEoc2VsZWN0aW9uRGF0YSksCi0gICAgICAgICAgICBndGtf
c2VsZWN0aW9uX2RhdGFfZ2V0X2xlbmd0aChzZWxlY3Rpb25EYXRhKSk7Ci0gICAgICAgIGdfYXNz
ZXJ0KHN0cmxlbihtYXJrdXBQcmVmaXgpIDw9IHN0cmxlbihtYXJrdXApKTsKLSAgICAgICAgZ19h
c3NlcnQoIXN0cm5jbXAobWFya3VwUHJlZml4LCBtYXJrdXAsIHN0cmxlbihtYXJrdXBQcmVmaXgp
KSk7Ci0gICAgICAgIGdfZnJlZShtYXJrdXApOwotICAgIH0KLQotICAgIGdfYXNzZXJ0KCFndGtf
Y2xpcGJvYXJkX3dhaXRfaXNfdXJpc19hdmFpbGFibGUoY2xpcGJvYXJkKSk7Ci0gICAgZ19hc3Nl
cnQoIWd0a19jbGlwYm9hcmRfd2FpdF9pc19pbWFnZV9hdmFpbGFibGUoY2xpcGJvYXJkKSk7Ci0K
LSAgICBnX21haW5fbG9vcF9xdWl0KGZpeHR1cmUtPmxvb3ApOwotfQotCi1nYm9vbGVhbiBtYXBf
ZXZlbnRfY2IoR3RrV2lkZ2V0ICp3aWRnZXQsIEdka0V2ZW50KiBldmVudCwgZ3BvaW50ZXIgZGF0
YSkKLXsKLSAgICBDb3B5QW5kUGFzdGVGaXh0dXJlKiBmaXh0dXJlID0gKENvcHlBbmRQYXN0ZUZp
eHR1cmUqKWRhdGE7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKGZpeHR1cmUtPndl
YlZpZXcsIGZpeHR1cmUtPmluZm8tPnBhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJ0ZXh0L2h0bWwiLCAidXRmLTgiLCAiZmlsZTovLyIpOwotICAgIHJldHVybiBGQUxTRTsK
LX0KLQotc3RhdGljIHZvaWQgdGVzdF9jb3B5X2FuZF9wYXN0ZShDb3B5QW5kUGFzdGVGaXh0dXJl
KiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZml4dHVyZS0+aW5mbyA9IChU
ZXN0SW5mbyopZGF0YTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndpbmRvdywgIm1h
cC1ldmVudCIsCi0gICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKG1hcF9ldmVudF9jYiks
IGZpeHR1cmUpOwotCi0gICAgZ3RrX3dpZGdldF9zaG93KGZpeHR1cmUtPndpbmRvdyk7Ci0gICAg
Z3RrX3dpZGdldF9zaG93KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldykpOwotICAgIGd0a193
aW5kb3dfcHJlc2VudChHVEtfV0lORE9XKGZpeHR1cmUtPndpbmRvdykpOwotICAgIGd0a193aWRn
ZXRfZ3JhYl9mb2N1cyhHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpKTsKLQotICAgIGdfc2ln
bmFsX2Nvbm5lY3QoZml4dHVyZS0+d2ViVmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLAotICAg
ICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhsb2FkX3N0YXR1c19jYiksIGZpeHR1cmUpOwot
Ci0gICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1cmUtPmxvb3ApOwotfQotCi1zdGF0aWMgQ29weUFu
ZFBhc3RlRml4dHVyZSogY3VycmVudEZpeHR1cmU7Ci1zdGF0aWMgSlNWYWx1ZVJlZiBydW5QYXN0
ZVRlc3RDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24s
IEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1Zh
bHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgZ3RrX3dp
ZGdldF9ncmFiX2ZvY3VzKEdUS19XSURHRVQoY3VycmVudEZpeHR1cmUtPndlYlZpZXcpKTsKLQot
ICAgIC8vIFNpbXVsYXRlIGEgcGFzdGUga2V5Ym9hcmQgc2VxdWVuY2UuCi0gICAgR2RrRXZlbnQq
IGV2ZW50ID0gZ2RrX2V2ZW50X25ldyhHREtfS0VZX1BSRVNTKTsKLSAgICBldmVudC0+a2V5Lmtl
eXZhbCA9IGdka191bmljb2RlX3RvX2tleXZhbCgndicpOwotICAgIGV2ZW50LT5rZXkuc3RhdGUg
PSBHREtfQ09OVFJPTF9NQVNLOwotICAgIGV2ZW50LT5rZXkud2luZG93ID0gZ3RrX3dpZGdldF9n
ZXRfd2luZG93KEdUS19XSURHRVQoY3VycmVudEZpeHR1cmUtPndlYlZpZXcpKTsKLSAgICBnX29i
amVjdF9yZWYoZXZlbnQtPmtleS53aW5kb3cpOwotI2lmbmRlZiBHVEtfQVBJX1ZFUlNJT05fMgot
ICAgIEdka0RldmljZU1hbmFnZXIqIG1hbmFnZXIgPSAgZ2RrX2Rpc3BsYXlfZ2V0X2RldmljZV9t
YW5hZ2VyKGdka193aW5kb3dfZ2V0X2Rpc3BsYXkoZXZlbnQtPmtleS53aW5kb3cpKTsKLSAgICBn
ZGtfZXZlbnRfc2V0X2RldmljZShldmVudCwgZ2RrX2RldmljZV9tYW5hZ2VyX2dldF9jbGllbnRf
cG9pbnRlcihtYW5hZ2VyKSk7Ci0jZW5kaWYKLQotICAgIEdka0tleW1hcEtleSoga2V5czsKLSAg
ICBnaW50IG5fa2V5czsKLSAgICBpZiAoZ2RrX2tleW1hcF9nZXRfZW50cmllc19mb3Jfa2V5dmFs
KGdka19rZXltYXBfZ2V0X2RlZmF1bHQoKSwgZXZlbnQtPmtleS5rZXl2YWwsICZrZXlzLCAmbl9r
ZXlzKSkgewotICAgICAgICBldmVudC0+a2V5LmhhcmR3YXJlX2tleWNvZGUgPSBrZXlzWzBdLmtl
eWNvZGU7Ci0gICAgICAgIGdfZnJlZShrZXlzKTsKLSAgICB9Ci0KLSAgICBndGtfbWFpbl9kb19l
dmVudChldmVudCk7Ci0gICAgZXZlbnQtPmtleS50eXBlID0gR0RLX0tFWV9SRUxFQVNFOwotICAg
IGd0a19tYWluX2RvX2V2ZW50KGV2ZW50KTsKLSAgICBnZGtfZXZlbnRfZnJlZShldmVudCk7Ci0K
LSAgICBKU1N0cmluZ1JlZiBzY3JpcHRTdHJpbmcgPSBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiZG9jdW1lbnQuYm9keS5pbm5lckhUTUw7Iik7Ci0gICAgSlNWYWx1ZVJlZiB2YWx1ZSA9
IEpTRXZhbHVhdGVTY3JpcHQoY29udGV4dCwgc2NyaXB0U3RyaW5nLCAwLCAwLCAwLCAwKTsKLSAg
ICBKU1N0cmluZ1JlbGVhc2Uoc2NyaXB0U3RyaW5nKTsKLQotICAgIGdfYXNzZXJ0KEpTVmFsdWVJ
c1N0cmluZyhjb250ZXh0LCB2YWx1ZSkpOwotICAgIEpTU3RyaW5nUmVmIGFjdHVhbCA9IEpTVmFs
dWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsIGV4Y2VwdGlvbik7Ci0gICAgZ19hc3NlcnQo
IWV4Y2VwdGlvbiB8fCAhKmV4Y2VwdGlvbik7Ci0gICAgZ19hc3NlcnQoY3VycmVudEZpeHR1cmUt
PmluZm8tPmV4cGVjdGVkQ29udGVudCk7Ci0gICAgSlNTdHJpbmdSZWYgZXhwZWN0ZWQgPSBKU1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhjdXJyZW50Rml4dHVyZS0+aW5mby0+ZXhwZWN0ZWRD
b250ZW50KTsKLSAgICBnX2Fzc2VydChKU1N0cmluZ0lzRXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCkp
OwotCi0gICAgSlNTdHJpbmdSZWxlYXNlKGV4cGVjdGVkKTsKLSAgICBKU1N0cmluZ1JlbGVhc2Uo
YWN0dWFsKTsKLSAgICBnX21haW5fbG9vcF9xdWl0KGN1cnJlbnRGaXh0dXJlLT5sb29wKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyB2b2lk
IHdpbmRvd19vYmplY3RfY2xlYXJlZF9jYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywg
V2ViS2l0V2ViRnJhbWUqIHdlYl9mcmFtZSwgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQsIEpT
T2JqZWN0UmVmIHdpbmRvd19vYmplY3QsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgSlNTdHJpbmdS
ZWYgbmFtZSA9IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJydW5UZXN0Iik7Ci0gICAg
SlNPYmplY3RSZWYgdGVzdENvbXBsZXRlID0gSlNPYmplY3RNYWtlRnVuY3Rpb25XaXRoQ2FsbGJh
Y2soY29udGV4dCwgbmFtZSwgcnVuUGFzdGVUZXN0Q2FsbGJhY2spOwotICAgIEpTT2JqZWN0U2V0
UHJvcGVydHkoY29udGV4dCwgd2luZG93X29iamVjdCwgbmFtZSwgdGVzdENvbXBsZXRlLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZU5vbmUsIDApOwotICAgIEpTU3RyaW5nUmVsZWFzZShuYW1lKTsKLX0K
LQotc3RhdGljIHZvaWQgcGFzdGluZ190ZXN0X2dldF9kYXRhX2NhbGxiYWNrKEd0a0NsaXBib2Fy
ZCogY2xpcGJvYXJkLCBHdGtTZWxlY3Rpb25EYXRhKiBzZWxlY3Rpb25fZGF0YSwgZ3VpbnQgaW5m
bywgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBndGtfc2VsZWN0aW9uX2RhdGFfc2V0KHNlbGVjdGlv
bl9kYXRhLCBnZGtfYXRvbV9pbnRlcm4oInRleHQvaHRtbCIsIEZBTFNFKSwgOCwgKGNvbnN0IGd1
Y2hhciopIGRhdGEsIHN0cmxlbigoY2hhciopZGF0YSkgKyAxKTsKLX0KLQotc3RhdGljIHZvaWQg
cGFzdGluZ190ZXN0X2NsZWFyX2RhdGFfY2FsbGJhY2soR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQs
IGdwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19mcmVlKGRhdGEpOwotfQotCi1zdGF0aWMgdm9pZCB0
ZXN0X3Bhc3RpbmdfbWFya3VwKENvcHlBbmRQYXN0ZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBv
aW50ZXIgZGF0YSkKLXsKLSAgICBmaXh0dXJlLT5pbmZvID0gKFRlc3RJbmZvKilkYXRhOwotICAg
IGN1cnJlbnRGaXh0dXJlID0gZml4dHVyZTsKLQotICAgIEd0a1RhcmdldExpc3QqIHRhcmdldExp
c3QgPSBndGtfdGFyZ2V0X2xpc3RfbmV3KDAsIDApOwotICAgIGd0a190YXJnZXRfbGlzdF9hZGQo
dGFyZ2V0TGlzdCwgZ2RrX2F0b21faW50ZXJuKCJ0ZXh0L2h0bWwiLCBGQUxTRSksIDAsIDApOwot
Ci0gICAgaW50IG51bWJlck9mVGFyZ2V0cyA9IDE7Ci0gICAgR3RrVGFyZ2V0RW50cnkqIHRhcmdl
dFRhYmxlID0gZ3RrX3RhcmdldF90YWJsZV9uZXdfZnJvbV9saXN0KHRhcmdldExpc3QsICZudW1i
ZXJPZlRhcmdldHMpOwotICAgIGd0a19jbGlwYm9hcmRfc2V0X3dpdGhfZGF0YShndGtfY2xpcGJv
YXJkX2dldChHREtfU0VMRUNUSU9OX0NMSVBCT0FSRCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRhcmdldFRhYmxlLCBudW1iZXJPZlRhcmdldHMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhc3RpbmdfdGVzdF9nZXRfZGF0YV9jYWxsYmFjaywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGFzdGluZ190ZXN0X2NsZWFyX2RhdGFfY2FsbGJhY2ss
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfc3RyZHVwKGZpeHR1cmUtPmluZm8t
PmV4cGVjdGVkQ29udGVudCkpOwotICAgIGd0a190YXJnZXRfbGlzdF91bnJlZih0YXJnZXRMaXN0
KTsKLSAgICBndGtfdGFyZ2V0X3RhYmxlX2ZyZWUodGFyZ2V0VGFibGUsIG51bWJlck9mVGFyZ2V0
cyk7Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndpbmRvdywgIm1hcC1ldmVudCIs
Ci0gICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKG1hcF9ldmVudF9jYiksIGZpeHR1cmUp
OwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2ViVmlldywgIndpbmRvdy1vYmplY3Qt
Y2xlYXJlZCIsCi0gICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKHdpbmRvd19vYmplY3Rf
Y2xlYXJlZF9jYWxsYmFjayksIGZpeHR1cmUpOwotCi0gICAgZ3RrX3dpZGdldF9zaG93KGZpeHR1
cmUtPndpbmRvdyk7Ci0gICAgZ3RrX3dpZGdldF9zaG93KEdUS19XSURHRVQoZml4dHVyZS0+d2Vi
VmlldykpOwotICAgIGd0a193aW5kb3dfcHJlc2VudChHVEtfV0lORE9XKGZpeHR1cmUtPndpbmRv
dykpOwotCi0gICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1cmUtPmxvb3ApOwotfQotCi0KLWludCBt
YWluKGludCBhcmdjLCBjaGFyKiogYXJndikKLXsKLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAm
YXJndiwgTlVMTCk7Ci0KLSAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQu
b3JnLyIpOwotICAgIGNvbnN0IGNoYXIqIHNlbGVjdGVkX3NwYW5faHRtbCA9ICI8aHRtbD48Ym9k
eT4iCi0gICAgICAgICI8c3BhbiBpZD1cIm1haW5zcGFuXCI+QWxsIHdvcmsgYW5kIG5vIHBsYXkg
PHNwYW4+bWFrZSBKYWNrIGEgZHVsbDwvc3Bhbj4gYm95Ljwvc3Bhbj4iCi0gICAgICAgICI8c2Ny
aXB0PmRvY3VtZW50LmdldFNlbGVjdGlvbigpLmNvbGxhcHNlKCk7XG4iCi0gICAgICAgICJkb2N1
bWVudC5nZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJlbihkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnbWFpbnNwYW4nKSk7XG4iCi0gICAgICAgICI8L3NjcmlwdD48L2JvZHk+PC9odG1sPiI7
Ci0gICAgY29uc3QgY2hhciogbm9fc2VsZWN0aW9uX2h0bWwgPSAiPGh0bWw+PGJvZHk+IgotICAg
ICAgICAiPHNwYW4gaWQ9XCJtYWluc3BhblwiPkFsbCB3b3JrIGFuZCBubyBwbGF5IDxzcGFuPm1h
a2UgSmFjayBhIGR1bGw8L3NwYW4+IGJveTwvc3Bhbj4iCi0gICAgICAgICI8c2NyaXB0PmRvY3Vt
ZW50LmdldFNlbGVjdGlvbigpLmNvbGxhcHNlKCk7XG4iCi0gICAgICAgICI8L3NjcmlwdD48L2Jv
ZHk+PC9odG1sPiI7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2NvcHlhbmRwYXN0ZS9zZWxl
Y3Rpb24iLCBDb3B5QW5kUGFzdGVGaXh0dXJlLAotICAgICAgICAgICAgICAgdGVzdF9pbmZvX25l
dyhzZWxlY3RlZF9zcGFuX2h0bWwsICJBbGwgd29yayBhbmQgbm8gcGxheSBtYWtlIEphY2sgYSBk
dWxsIGJveS4iKSwKLSAgICAgICAgICAgICAgIGNvcHlfYW5kX3Bhc3RlX2ZpeHR1cmVfc2V0dXAs
Ci0gICAgICAgICAgICAgICB0ZXN0X2NvcHlfYW5kX3Bhc3RlLAotICAgICAgICAgICAgICAgY29w
eV9hbmRfcGFzdGVfZml4dHVyZV90ZWFyZG93bik7Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9j
b3B5YW5kcGFzdGUvbm8tc2VsZWN0aW9uIiwgQ29weUFuZFBhc3RlRml4dHVyZSwKLSAgICAgICAg
ICAgICAgIHRlc3RfaW5mb19uZXcobm9fc2VsZWN0aW9uX2h0bWwsIDApLAotICAgICAgICAgICAg
ICAgY29weV9hbmRfcGFzdGVfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3RfY29w
eV9hbmRfcGFzdGUsCi0gICAgICAgICAgICAgICBjb3B5X2FuZF9wYXN0ZV9maXh0dXJlX3RlYXJk
b3duKTsKLQotICAgIGNvbnN0IGNoYXIqIHBhc3RlX3Rlc3RfaHRtbCA9ICI8aHRtbD4iCi0gICAg
ICAgICI8Ym9keSBvbkxvYWQ9XCJkb2N1bWVudC5ib2R5LmZvY3VzKCk7IHJ1blRlc3QoKTtcIiBj
b250ZW50RWRpdGFibGU9XCJ0cnVlXCI+IgotICAgICAgICAiPC9ib2R5PjwvaHRtbD4iOwotICAg
IGdfdGVzdF9hZGQoIi93ZWJraXQvY29weWFuZHBhc3RlL3Bhc3RlLW1hcmt1cCIsIENvcHlBbmRQ
YXN0ZUZpeHR1cmUsCi0gICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KHBhc3RlX3Rlc3RfaHRt
bCwgImJvYmJ5IiksCi0gICAgICAgICAgICAgICBjb3B5X2FuZF9wYXN0ZV9maXh0dXJlX3NldHVw
LAotICAgICAgICAgICAgICAgdGVzdF9wYXN0aW5nX21hcmt1cCwKLSAgICAgICAgICAgICAgIGNv
cHlfYW5kX3Bhc3RlX2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAgcmV0dXJuIGdfdGVzdF9ydW4o
KTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rkb21kb2N1bWVu
dC5jIGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvbWRvY3VtZW50LmMKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjOTk3ZGQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dC9ndGsvdGVzdHMvdGVzdGRvbWRvY3VtZW50LmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MjggKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAidGVzdF91dGlscy5oIgotCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2lu
Y2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHdl
YmtpdC93ZWJraXQuaD4KLQotI2RlZmluZSBIVE1MX0RPQ1VNRU5UX1RJVExFICI8aHRtbD48aGVh
ZD48dGl0bGU+VGhpcyBpcyB0aGUgdGl0bGU8L3RpdGxlPjwvaGVhZD48Ym9keT48L2JvZHk+PC9o
dG1sPiIKLSNkZWZpbmUgSFRNTF9ET0NVTUVOVF9FTEVNRU5UUyAiPGh0bWw+PGJvZHk+PHVsPjxs
aT4xPC9saT48bGk+MjwvbGk+PGxpPjM8L2xpPjwvdWw+PC9ib2R5PjwvaHRtbD4iCi0jZGVmaW5l
IEhUTUxfRE9DVU1FTlRfRUxFTUVOVFNfQ0xBU1MgIjxodG1sPjxib2R5PjxkaXYgY2xhc3M9XCJ0
ZXN0XCI+PC9kaXY+PGRpdiBjbGFzcz1cInN0cmFuZ2VcIj48L2Rpdj48ZGl2IGNsYXNzPVwidGVz
dFwiPjwvZGl2PjwvYm9keT48L2h0bWw+IgotI2RlZmluZSBIVE1MX0RPQ1VNRU5UX0VMRU1FTlRT
X0lEICI8aHRtbD48Ym9keT48ZGl2IGlkPVwidGVzdG9rXCI+PC9kaXY+PGRpdiBpZD1cInRlc3Ri
YWRcIj5maXJzdDwvZGl2PjxkaXYgaWQ9XCJ0ZXN0YmFkXCI+c2Vjb25kPC9kaXY+PC9ib2R5Pjwv
aHRtbD4iCi0jZGVmaW5lIEhUTUxfRE9DVU1FTlRfTElOS1MgIjxodG1sPjxoZWFkPjx0aXRsZT5U
aXRsZTwvdGl0bGU+PC9oZWFkPjxib2R5PjxhIGhyZWY9XCJhYm91dDpibGFua1wiPmJsYW5rPC9h
PjxhIGhyZWY9XCJodHRwOi8vd3d3Lmdvb2dsZS5jb21cIj5nb29nbGU8L2E+PGEgaHJlZj1cImh0
dHA6Ly93d3cud2Via2l0Lm9yZ1wiPndlYmtpdDwvYT48L2JvZHk+PC9odG1sPiIKLSNkZWZpbmUg
SFRNTF9ET0NVTUVOVF9JRlJBTUUgIjxodG1sPjxoZWFkPjx0aXRsZT5JRnJhbWU8L3RpdGxlPjwv
aGVhZD48Ym9keT48aWZyYW1lIGlkPSdpZnJhbWUnPjwvaWZyYW1lPjxkaXYgaWQ9J3Rlc3QnPjwv
ZGl2PjwvYm9keT48L2h0bWw+IgotI2RlZmluZSBIVE1MX0RPQ1VNRU5UX1RBQkxFICI8aHRtbD48
Ym9keT48dGFibGUgaWQ9XCJ0YWJsZVwiPjwvdGFibGU+PC9ib2R5PjwvaHRtbD4iCi0jZGVmaW5l
IEhUTUxfRE9DVU1FTlRfRVZBTFVBVEUgIjxodG1sPjxoZWFkPjx0aXRsZT48L3RpdGxlPjwvaGVh
ZD48Ym9keT48ZGl2PkZpcnN0IGRpdjwvZGl2PjxkaXY+U2Vjb25kIGRpdjwvZGl2PjwvYm9keT48
L2h0bWw+IgotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgR3RrV2lkZ2V0KiB3ZWJWaWV3OwotICAg
IEdNYWluTG9vcCogbG9vcDsKLX0gRG9tRG9jdW1lbnRGaXh0dXJlOwotCi1zdGF0aWMgZ2Jvb2xl
YW4gZmluaXNoX2xvYWRpbmcoRG9tRG9jdW1lbnRGaXh0dXJlKiBmaXh0dXJlKQotewotICAgIGlm
IChnX21haW5fbG9vcF9pc19ydW5uaW5nKGZpeHR1cmUtPmxvb3ApKQotICAgICAgICBnX21haW5f
bG9vcF9xdWl0KGZpeHR1cmUtPmxvb3ApOwotCi0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0
aWMgdm9pZCBkb21fZG9jdW1lbnRfZml4dHVyZV9zZXR1cChEb21Eb2N1bWVudEZpeHR1cmUqIGZp
eHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBmaXh0dXJlLT5sb29wID0gZ19tYWlu
X2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotICAgIGZpeHR1cmUtPndlYlZpZXcgPSB3ZWJraXRfd2Vi
X3ZpZXdfbmV3KCk7Ci0gICAgZ19vYmplY3RfcmVmX3NpbmsoZml4dHVyZS0+d2ViVmlldyk7Ci0K
LSAgICBpZiAoZGF0YSAhPSBOVUxMKQotICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJp
bmcoV0VCS0lUX1dFQl9WSUVXIChmaXh0dXJlLT53ZWJWaWV3KSwgKGNvbnN0IGNoYXIqKSBkYXRh
LCBOVUxMLCBOVUxMLCBOVUxMKTsKLQotICAgIGdfaWRsZV9hZGQoKEdTb3VyY2VGdW5jKWZpbmlz
aF9sb2FkaW5nLCBmaXh0dXJlKTsKLSAgICBnX21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7
Ci19Ci0KLXN0YXRpYyB2b2lkIGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKERvbURvY3Vt
ZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGlmIChmaXh0
dXJlLT53ZWJWaWV3KQotICAgICAgICBnX29iamVjdF91bnJlZihmaXh0dXJlLT53ZWJWaWV3KTsK
LSAgICBnX21haW5fbG9vcF91bnJlZihmaXh0dXJlLT5sb29wKTsKLX0KLQotc3RhdGljIHZvaWQg
dGVzdF9kb21fZG9jdW1lbnRfdGl0bGUoRG9tRG9jdW1lbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29u
c3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19hc3NlcnQoZml4dHVyZSk7Ci0gICAgV2ViS2l0V2Vi
VmlldyogdmlldyA9IChXZWJLaXRXZWJWaWV3KilmaXh0dXJlLT53ZWJWaWV3OwotICAgIGdfYXNz
ZXJ0KHZpZXcpOwotICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1bWVudCA9IHdlYmtpdF93ZWJf
dmlld19nZXRfZG9tX2RvY3VtZW50KHZpZXcpOwotICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsKLSAg
ICBnY2hhciogdGl0bGUgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF90aXRsZShkb2N1bWVudCk7
Ci0gICAgZ19hc3NlcnQodGl0bGUpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih0aXRsZSwgPT0sICJU
aGlzIGlzIHRoZSB0aXRsZSIpOwotICAgIGdfZnJlZSh0aXRsZSk7Ci0gICAgd2Via2l0X2RvbV9k
b2N1bWVudF9zZXRfdGl0bGUoZG9jdW1lbnQsICJUaGlzIGlzIHRoZSBzZWNvbmQgdGl0bGUiKTsK
LSAgICB0aXRsZSA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3RpdGxlKGRvY3VtZW50KTsKLSAg
ICBnX2Fzc2VydCh0aXRsZSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRpdGxlLCA9PSwgIlRoaXMg
aXMgdGhlIHNlY29uZCB0aXRsZSIpOwotICAgIGdfZnJlZSh0aXRsZSk7Ci19Ci0KLXN0YXRpYyB2
b2lkIHRlc3RfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19ieV90YWdfbmFtZShEb21Eb2N1bWVu
dEZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBnX2Fzc2VydChm
aXh0dXJlKTsKLSAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gKFdlYktpdFdlYlZpZXcqKWZpeHR1
cmUtPndlYlZpZXc7Ci0gICAgZ19hc3NlcnQodmlldyk7Ci0gICAgV2ViS2l0RE9NRG9jdW1lbnQq
IGRvY3VtZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQodmlldyk7Ci0gICAg
Z19hc3NlcnQoZG9jdW1lbnQpOwotICAgIFdlYktpdERPTU5vZGVMaXN0KiBsaXN0ID0gd2Via2l0
X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWUoZG9jdW1lbnQsICJsaSIpOwot
ICAgIGdfYXNzZXJ0KGxpc3QpOwotICAgIGd1bG9uZyBsZW5ndGggPSB3ZWJraXRfZG9tX25vZGVf
bGlzdF9nZXRfbGVuZ3RoKGxpc3QpOwotICAgIGdfYXNzZXJ0X2NtcGludChsZW5ndGgsID09LCAz
KTsKLQotICAgIGd1aW50IGk7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsK
LSAgICAgICAgV2ViS2l0RE9NTm9kZSogaXRlbSA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0o
bGlzdCwgaSk7Ci0gICAgICAgIGdfYXNzZXJ0KGl0ZW0pOwotICAgICAgICBXZWJLaXRET01FbGVt
ZW50KiBlbGVtZW50ID0gKFdlYktpdERPTUVsZW1lbnQqKWl0ZW07Ci0gICAgICAgIGdfYXNzZXJ0
KGVsZW1lbnQpOwotICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2RvbV9lbGVtZW50X2dl
dF90YWdfbmFtZShlbGVtZW50KSwgPT0sICJMSSIpOwotICAgICAgICBXZWJLaXRET01IVE1MRWxl
bWVudCogaHRtbEVsZW1lbnQgPSAoV2ViS2l0RE9NSFRNTEVsZW1lbnQqKWVsZW1lbnQ7Ci0gICAg
ICAgIGNoYXIqIG4gPSBnX3N0cmR1cF9wcmludGYoIiVkIiwgaSsxKTsKLSAgICAgICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF9pbm5lcl90ZXh0KGh0bWxFbGVt
ZW50KSwgPT0sIG4pOwotICAgICAgICBnX2ZyZWUobik7Ci0gICAgfQotCi0gICAgZ19vYmplY3Rf
dW5yZWYobGlzdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RfZG9tX2RvY3VtZW50X2dldF9lbGVt
ZW50c19ieV9jbGFzc19uYW1lKERvbURvY3VtZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9p
bnRlciBkYXRhKQotewotICAgIGdfYXNzZXJ0KGZpeHR1cmUpOwotICAgIFdlYktpdFdlYlZpZXcq
IHZpZXcgPSAoV2ViS2l0V2ViVmlldyopZml4dHVyZS0+d2ViVmlldzsKLSAgICBnX2Fzc2VydCh2
aWV3KTsKLSAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKLSAgICBnX2Fzc2VydChkb2N1bWVudCk7Ci0gICAgV2Vi
S2l0RE9NTm9kZUxpc3QqIGxpc3QgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19i
eV9jbGFzc19uYW1lKGRvY3VtZW50LCAidGVzdCIpOwotICAgIGdfYXNzZXJ0KGxpc3QpOwotICAg
IGd1bG9uZyBsZW5ndGggPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QpOwot
ICAgIGdfYXNzZXJ0X2NtcGludChsZW5ndGgsID09LCAyKTsKLQotICAgIGd1aW50IGk7Ci0KLSAg
ICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgV2ViS2l0RE9NTm9kZSog
aXRlbSA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdCwgaSk7Ci0gICAgICAgIGdfYXNz
ZXJ0KGl0ZW0pOwotICAgICAgICBXZWJLaXRET01FbGVtZW50KiBlbGVtZW50ID0gKFdlYktpdERP
TUVsZW1lbnQqKWl0ZW07Ci0gICAgICAgIGdfYXNzZXJ0KGVsZW1lbnQpOwotICAgICAgICBnX2Fz
c2VydF9jbXBzdHIod2Via2l0X2RvbV9lbGVtZW50X2dldF90YWdfbmFtZShlbGVtZW50KSwgPT0s
ICJESVYiKTsKLSAgICB9Ci0KLSAgICBnX29iamVjdF91bnJlZihsaXN0KTsKLX0KLQotc3RhdGlj
IHZvaWQgdGVzdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRfYnlfaWQoRG9tRG9jdW1lbnRGaXh0
dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19hc3NlcnQoZml4dHVy
ZSk7Ci0gICAgV2ViS2l0V2ViVmlldyogdmlldyA9IChXZWJLaXRXZWJWaWV3KilmaXh0dXJlLT53
ZWJWaWV3OwotICAgIGdfYXNzZXJ0KHZpZXcpOwotICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1
bWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50KHZpZXcpOwotICAgIGdfYXNz
ZXJ0KGRvY3VtZW50KTsKLSAgICBXZWJLaXRET01FbGVtZW50KiBlbGVtZW50ID0gd2Via2l0X2Rv
bV9kb2N1bWVudF9nZXRfZWxlbWVudF9ieV9pZChkb2N1bWVudCwgInRlc3RvayIpOwotICAgIGdf
YXNzZXJ0KGVsZW1lbnQpOwotICAgIGVsZW1lbnQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9l
bGVtZW50X2J5X2lkKGRvY3VtZW50LCAidGhpcy1pZC1kb2VzLW5vdC1leGlzdCIpOwotICAgIGdf
YXNzZXJ0KGVsZW1lbnQgPT0gMCk7Ci0gICAgLyogVGhlIERPTSBzcGVjIHNheXMgdGhlIHJldHVy
biB2YWx1ZSBpcyB1bmRlZmluZWQgd2hlbiB0aGVyZSdzCi0gICAgICogbW9yZSB0aGFuIG9uZSBl
bGVtZW50IHdpdGggdGhlIHNhbWUgaWQ7IGluIG91ciBjYXNlIHRoZSBmaXJzdAotICAgICAqIG9u
ZSB3aWxsIGJlIHJldHVybmVkICovCi0gICAgZWxlbWVudCA9IHdlYmtpdF9kb21fZG9jdW1lbnRf
Z2V0X2VsZW1lbnRfYnlfaWQoZG9jdW1lbnQsICJ0ZXN0YmFkIik7Ci0gICAgZ19hc3NlcnQoZWxl
bWVudCk7Ci0gICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQqIGh0bWxFbGVtZW50ID0gKFdlYktpdERP
TUhUTUxFbGVtZW50KillbGVtZW50OwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfZG9tX2h0
bWxfZWxlbWVudF9nZXRfaW5uZXJfdGV4dChodG1sRWxlbWVudCksID09LCAiZmlyc3QiKTsKLX0K
LQotc3RhdGljIHZvaWQgdGVzdF9kb21fZG9jdW1lbnRfZ2V0X2xpbmtzKERvbURvY3VtZW50Rml4
dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGdfYXNzZXJ0KGZpeHR1
cmUpOwotICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSAoV2ViS2l0V2ViVmlldyopZml4dHVyZS0+
d2ViVmlldzsKLSAgICBnX2Fzc2VydCh2aWV3KTsKLSAgICBXZWJLaXRET01Eb2N1bWVudCogZG9j
dW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKLSAgICBnX2Fz
c2VydChkb2N1bWVudCk7Ci0gICAgV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24gKmNvbGxlY3Rpb24g
PSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9saW5rcyhkb2N1bWVudCk7Ci0gICAgZ19hc3NlcnQo
Y29sbGVjdGlvbik7Ci0gICAgZ3Vsb25nIGxlbmd0aCA9IHdlYmtpdF9kb21faHRtbF9jb2xsZWN0
aW9uX2dldF9sZW5ndGgoY29sbGVjdGlvbik7Ci0gICAgZ19hc3NlcnRfY21waW50KGxlbmd0aCwg
PT0sIDMpOwotCi0gICAgZ3VpbnQgaTsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkr
KykgewotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogbmFtZXNbXSA9IHsgImJsYW5rIiwgImdv
b2dsZSIsICJ3ZWJraXQiIH07Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiB1cmlzW10gPSB7
ICJhYm91dDpibGFuayIsICJodHRwOi8vd3d3Lmdvb2dsZS5jb20vIiwgImh0dHA6Ly93d3cud2Vi
a2l0Lm9yZy8iIH07Ci0gICAgICAgIFdlYktpdERPTU5vZGUgKm5vZGUgPSB3ZWJraXRfZG9tX2h0
bWxfY29sbGVjdGlvbl9pdGVtKGNvbGxlY3Rpb24sIGkpOwotICAgICAgICBnX2Fzc2VydChub2Rl
KTsKLSAgICAgICAgV2ViS2l0RE9NRWxlbWVudCogZWxlbWVudCA9IChXZWJLaXRET01FbGVtZW50
Kilub2RlOwotICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2RvbV9lbGVtZW50X2dldF90
YWdfbmFtZShlbGVtZW50KSwgPT0sICJBIik7Ci0gICAgICAgIFdlYktpdERPTUhUTUxFbGVtZW50
ICpodG1sRWxlbWVudCA9IChXZWJLaXRET01IVE1MRWxlbWVudCopZWxlbWVudDsKLSAgICAgICAg
Z19hc3NlcnRfY21wc3RyKHdlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF9pbm5lcl90ZXh0KGh0
bWxFbGVtZW50KSwgPT0sIG5hbWVzW2ldKTsKLSAgICAgICAgV2ViS2l0RE9NSFRNTEFuY2hvckVs
ZW1lbnQgKmFuY2hvciA9IChXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCopZWxlbWVudDsKLSAg
ICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRf
aHJlZihhbmNob3IpLCA9PSwgdXJpc1tpXSk7Ci0gICAgfQotICAgIGdfb2JqZWN0X3VucmVmKGNv
bGxlY3Rpb24pOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X2RvbV9kb2N1bWVudF9pbnNlcnRfcm93
KERvbURvY3VtZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAg
IGdfYXNzZXJ0KGZpeHR1cmUpOwotICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSAoV2ViS2l0V2Vi
VmlldyopZml4dHVyZS0+d2ViVmlldzsKLSAgICBnX2Fzc2VydCh2aWV3KTsKLSAgICBXZWJLaXRE
T01Eb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2
aWV3KTsKLSAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKGRvY3VtZW50KSk7Ci0g
ICAgV2ViS2l0RE9NRWxlbWVudCogdGFibGUgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVt
ZW50X2J5X2lkKGRvY3VtZW50LCAidGFibGUiKTsKLSAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lT
X0hUTUxfRUxFTUVOVCh0YWJsZSkpOwotICAgIFdlYktpdERPTUhUTUxDb2xsZWN0aW9uKiByb3dz
ID0gd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X3Jvd3MoV0VCS0lUX0RPTV9IVE1M
X1RBQkxFX0VMRU1FTlQodGFibGUpKTsKLSAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxf
Q09MTEVDVElPTihyb3dzKSk7Ci0KLSAgICAvLyBUYWJsZSBpcyBpbml0aWFsbHkgZW1wdHkuCi0g
ICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9kb21faHRtbF9jb2xsZWN0aW9uX2dldF9sZW5ndGgo
cm93cyksID09LCAwKTsKLSAgICBXZWJLaXRET01IVE1MRWxlbWVudCogcm93ID0gd2Via2l0X2Rv
bV9odG1sX3RhYmxlX2VsZW1lbnRfaW5zZXJ0X3JvdyhXRUJLSVRfRE9NX0hUTUxfVEFCTEVfRUxF
TUVOVCh0YWJsZSksIC0xLCBOVUxMKTsKLSAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxf
VEFCTEVfUk9XX0VMRU1FTlQocm93KSk7Ci0gICAgcm93cyA9IHdlYmtpdF9kb21faHRtbF90YWJs
ZV9lbGVtZW50X2dldF9yb3dzKFdFQktJVF9ET01fSFRNTF9UQUJMRV9FTEVNRU5UKHRhYmxlKSk7
Ci0gICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0NPTExFQ1RJT04ocm93cykpOwotICAg
IGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfZG9tX2h0bWxfY29sbGVjdGlvbl9nZXRfbGVuZ3RoKHJv
d3MpLCA9PSwgMSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RfZG9tX2RvY3VtZW50X2V2YWx1YXRl
KERvbURvY3VtZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAg
IGdfYXNzZXJ0KGZpeHR1cmUpOwotICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSAoV2ViS2l0V2Vi
VmlldyopZml4dHVyZS0+d2ViVmlldzsKLSAgICBnX2Fzc2VydCh2aWV3KTsKLSAgICBXZWJLaXRE
T01Eb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2
aWV3KTsKLSAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKGRvY3VtZW50KSk7Ci0g
ICAgV2ViS2l0RE9NTm9kZUxpc3QqIGxpc3QgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVt
ZW50c19ieV90YWdfbmFtZShkb2N1bWVudCwgImh0bWwiKTsKLSAgICBnX2Fzc2VydChsaXN0KTsK
LSAgICBndWxvbmcgbGVuZ3RoID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChsaXN0
KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQobGVuZ3RoLCA9PSwgMSk7Ci0gICAgV2ViS2l0RE9NTm9k
ZSogaHRtbCA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdCwgMCk7Ci0gICAgZ19hc3Nl
cnQoV0VCS0lUX0RPTV9JU19OT0RFKGh0bWwpKTsKLQotICAgIFdlYktpdERPTVhQYXRoUmVzdWx0
KiByZXN1bHQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2V2YWx1YXRlKGRvY3VtZW50LCAiLy9kaXYi
LCBodG1sLCBOVUxMLCAwLCBOVUxMLCBOVUxMKTsKLSAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lT
X1hQQVRIX1JFU1VMVChyZXN1bHQpKTsKLQotICAgIGludCBpID0gMDsKLSAgICBXZWJLaXRET01O
b2RlKiBub2RlOwotICAgIHdoaWxlICggKG5vZGUgPSB3ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9p
dGVyYXRlX25leHQocmVzdWx0LCBOVUxMKSkgIT0gTlVMTCkgewotICAgICAgICBnX2Fzc2VydChu
b2RlKTsKLSAgICAgICAgV2ViS2l0RE9NRWxlbWVudCogZWxlbWVudCA9IChXZWJLaXRET01FbGVt
ZW50Kilub2RlOwotICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2RvbV9lbGVtZW50X2dl
dF90YWdfbmFtZShlbGVtZW50KSwgPT0sICJESVYiKTsKLSAgICAgICAgaSsrOwotICAgIH0KLSAg
ICBnX2Fzc2VydF9jbXBpbnQoaSwgPT0sIDIpOwotCi0gICAgZ19vYmplY3RfdW5yZWYobGlzdCk7
Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYWtfbm90aWZ5KGdwb2ludGVyIGRhdGEsIEdPYmplY3QqIHpv
bWJpZSkKLXsKLSAgICBndWludCogY291bnQgPSAoZ3VpbnQqKWRhdGE7Ci0gICAgKCpjb3VudCkr
KzsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF9kb21fZG9jdW1lbnRfZ2FyYmFnZV9jb2xsZWN0aW9u
KERvbURvY3VtZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAg
IGd1aW50IGNvdW50ID0gMDsKLSAgICBnX2Fzc2VydChmaXh0dXJlKTsKLSAgICBXZWJLaXRXZWJW
aWV3KiB2aWV3ID0gKFdlYktpdFdlYlZpZXcqKWZpeHR1cmUtPndlYlZpZXc7Ci0gICAgZ19hc3Nl
cnQodmlldyk7Ci0gICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50ID0gd2Via2l0X3dlYl92
aWV3X2dldF9kb21fZG9jdW1lbnQodmlldyk7Ci0gICAgZ19hc3NlcnQoZG9jdW1lbnQpOwotICAg
IGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGRvY3VtZW50KSwgKEdXZWFrTm90aWZ5KXdlYWtf
bm90aWZ5LCAmY291bnQpOwotICAgIFdlYktpdERPTUhUTUxIZWFkRWxlbWVudCogaGVhZCA9IHdl
YmtpdF9kb21fZG9jdW1lbnRfZ2V0X2hlYWQoZG9jdW1lbnQpOwotICAgIGdfYXNzZXJ0KGhlYWQp
OwotICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGhlYWQpLCAoR1dlYWtOb3RpZnkpd2Vh
a19ub3RpZnksICZjb3VudCk7Ci0gICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQqIGJvZHkgPSB3ZWJr
aXRfZG9tX2RvY3VtZW50X2dldF9ib2R5KGRvY3VtZW50KTsKLSAgICBnX2Fzc2VydChib2R5KTsK
LSAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVDVChib2R5KSwgKEdXZWFrTm90aWZ5KXdlYWtf
bm90aWZ5LCAmY291bnQpOwotICAgIFdlYktpdERPTUhUTUxDb2xsZWN0aW9uICpjb2xsZWN0aW9u
ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfbGlua3MoZG9jdW1lbnQpOwotICAgIGdfYXNzZXJ0
KGNvbGxlY3Rpb24pOwotICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGNvbGxlY3Rpb24p
LCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7Ci0KLSAgICB3ZWJraXRfd2ViX3Zp
ZXdfbG9hZF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVXKHZpZXcpLCBIVE1MX0RPQ1VNRU5UX0xJTktT
LCBOVUxMLCBOVUxMLCBOVUxMKTsKLQotICAgIHdoaWxlIChnX21haW5fY29udGV4dF9wZW5kaW5n
KE5VTEwpKQotICAgICAgICBnX21haW5fY29udGV4dF9pdGVyYXRpb24oTlVMTCwgRkFMU0UpOwot
Ci0gICAgZ19hc3NlcnRfY21wdWludChjb3VudCwgPT0sIDMpOwotCi0gICAgZ19vYmplY3RfdW5y
ZWYoY29sbGVjdGlvbik7Ci0gICAgZ19hc3NlcnRfY21wdWludChjb3VudCwgPT0sIDQpOwotCi0g
ICAgY291bnQgPSAwOwotCi0gICAgZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9k
b2N1bWVudCh2aWV3KTsKLSAgICBnX2Fzc2VydChkb2N1bWVudCk7Ci0gICAgZ19vYmplY3Rfd2Vh
a19yZWYoR19PQkpFQ1QoZG9jdW1lbnQpLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3Vu
dCk7Ci0gICAgaGVhZCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2hlYWQoZG9jdW1lbnQpOwot
ICAgIGdfYXNzZXJ0KGhlYWQpOwotICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGhlYWQp
LCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7Ci0gICAgYm9keSA9IHdlYmtpdF9k
b21fZG9jdW1lbnRfZ2V0X2JvZHkoZG9jdW1lbnQpOwotICAgIGdfYXNzZXJ0KGJvZHkpOwotICAg
IGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGJvZHkpLCAoR1dlYWtOb3RpZnkpd2Vha19ub3Rp
ZnksICZjb3VudCk7Ci0gICAgY29sbGVjdGlvbiA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2xp
bmtzKGRvY3VtZW50KTsKLSAgICBnX2Fzc2VydChjb2xsZWN0aW9uKTsKLSAgICBnX29iamVjdF93
ZWFrX3JlZihHX09CSkVDVChjb2xsZWN0aW9uKSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAm
Y291bnQpOwotICAgIC8qIEFzayB0d2ljZSBmb3IgdGhlIHNhbWUgb2JqZWN0ICovCi0gICAgV2Vi
S2l0RE9NSFRNTENvbGxlY3Rpb24qIGNvbGxlY3Rpb24yID0gd2Via2l0X2RvbV9kb2N1bWVudF9n
ZXRfbGlua3MoZG9jdW1lbnQpOwotICAgIGdfYXNzZXJ0KGNvbGxlY3Rpb24yKTsKLSAgICBnX29i
amVjdF93ZWFrX3JlZihHX09CSkVDVChjb2xsZWN0aW9uMiksIChHV2Vha05vdGlmeSl3ZWFrX25v
dGlmeSwgJmNvdW50KTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGRvY3VtZW50KTsKLSAgICBnX29i
amVjdF91bnJlZihoZWFkKTsKLSAgICBnX29iamVjdF91bnJlZihib2R5KTsKLSAgICBnX29iamVj
dF91bnJlZihjb2xsZWN0aW9uKTsKLSAgICBnX29iamVjdF91bnJlZihjb2xsZWN0aW9uMik7Ci0K
LSAgICBnX2Fzc2VydF9jbXB1aW50KGNvdW50LCA9PSwgNSk7Ci0KLSAgICB3ZWJraXRfd2ViX3Zp
ZXdfbG9hZF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVXKHZpZXcpLCBIVE1MX0RPQ1VNRU5UX0lGUkFN
RSwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0KLSAgICB3aGlsZSAoZ19tYWluX2NvbnRleHRfcGVuZGlu
ZyhOVUxMKSkKLSAgICAgICAgZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uKE5VTEwsIEZBTFNFKTsK
LQotICAgIGNvdW50ID0gMDsKLQotICAgIGRvY3VtZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9k
b21fZG9jdW1lbnQodmlldyk7Ci0gICAgV2ViS2l0RE9NRWxlbWVudCogZGl2ID0gd2Via2l0X2Rv
bV9kb2N1bWVudF9nZXRfZWxlbWVudF9ieV9pZChkb2N1bWVudCwgInRlc3QiKTsKLSAgICBnX2Fz
c2VydChkaXYpOwotICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGRpdiksIChHV2Vha05v
dGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKLSAgICBXZWJLaXRET01FbGVtZW50KiBpZnJhbWUg
PSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50X2J5X2lkKGRvY3VtZW50LCAiaWZyYW1l
Iik7Ci0gICAgZ19hc3NlcnQoaWZyYW1lKTsKLQotICAgIHdlYmtpdF9kb21fZWxlbWVudF9zZXRf
YXR0cmlidXRlKGlmcmFtZSwgInNyYyIsICJkYXRhOjxodG1sPjxoZWFkPjwvaGVhZD48L2h0bWw+
IiwgTlVMTCk7Ci0KLSAgICB3aGlsZSAoZ19tYWluX2NvbnRleHRfcGVuZGluZyhOVUxMKSkKLSAg
ICAgICAgZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uKE5VTEwsIEZBTFNFKTsKLQotICAgIFdlYktp
dERPTURvY3VtZW50KiBpZnJhbWVEb2N1bWVudCA9IHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxl
bWVudF9nZXRfY29udGVudF9kb2N1bWVudChXRUJLSVRfRE9NX0hUTUxfSUZSQU1FX0VMRU1FTlQo
aWZyYW1lKSk7Ci0gICAgZ19hc3NlcnQoaWZyYW1lRG9jdW1lbnQpOwotICAgIGhlYWQgPSB3ZWJr
aXRfZG9tX2RvY3VtZW50X2dldF9oZWFkKGlmcmFtZURvY3VtZW50KTsKLSAgICBnX2Fzc2VydCho
ZWFkKTsKLSAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVDVChoZWFkKSwgKEdXZWFrTm90aWZ5
KXdlYWtfbm90aWZ5LCAmY291bnQpOwotCi0gICAgd2Via2l0X2RvbV9lbGVtZW50X3NldF9hdHRy
aWJ1dGUoaWZyYW1lLCAic3JjIiwgImFib3V0OmJsYW5rIiwgTlVMTCk7Ci0KLSAgICB3aGlsZSAo
Z19tYWluX2NvbnRleHRfcGVuZGluZyhOVUxMKSkKLSAgICAgICAgZ19tYWluX2NvbnRleHRfaXRl
cmF0aW9uKE5VTEwsIEZBTFNFKTsKLQotICAgIGdfYXNzZXJ0X2NtcHVpbnQoY291bnQsID09LCAx
KTsKLQotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcodmll
dyksIEhUTUxfRE9DVU1FTlRfTElOS1MsIE5VTEwsIE5VTEwsIE5VTEwpOwotCi0gICAgd2hpbGUg
KGdfbWFpbl9jb250ZXh0X3BlbmRpbmcoTlVMTCkpCi0gICAgICAgIGdfbWFpbl9jb250ZXh0X2l0
ZXJhdGlvbihOVUxMLCBGQUxTRSk7Ci0KLSAgICBnX2Fzc2VydF9jbXB1aW50KGNvdW50LCA9PSwg
Mik7Ci0KLSAgICBjb3VudCA9IDA7Ci0KLSAgICBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmlld19n
ZXRfZG9tX2RvY3VtZW50KHZpZXcpOwotICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsKLSAgICBnX29i
amVjdF93ZWFrX3JlZihHX09CSkVDVChkb2N1bWVudCksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlm
eSwgJmNvdW50KTsKLSAgICAvKiBBc2sgdHdpY2UgZm9yIHRoZSBEb2N1bWVudCAqLwotICAgIFdl
YktpdERPTURvY3VtZW50KiBkb2N1bWVudDIgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1
bWVudCh2aWV3KTsKLSAgICBnX2Fzc2VydChkb2N1bWVudDIpOwotICAgIGdfb2JqZWN0X3dlYWtf
cmVmKEdfT0JKRUNUKGRvY3VtZW50MiksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50
KTsKLSAgICBoZWFkID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfaGVhZChkb2N1bWVudCk7Ci0g
ICAgZ19hc3NlcnQoaGVhZCk7Ci0gICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1QoaGVhZCks
IChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKLSAgICBib2R5ID0gd2Via2l0X2Rv
bV9kb2N1bWVudF9nZXRfYm9keShkb2N1bWVudCk7Ci0gICAgZ19hc3NlcnQoYm9keSk7Ci0gICAg
Z19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1QoYm9keSksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlm
eSwgJmNvdW50KTsKLSAgICBjb2xsZWN0aW9uID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfbGlu
a3MoZG9jdW1lbnQpOwotICAgIGdfYXNzZXJ0KGNvbGxlY3Rpb24pOwotICAgIGdfb2JqZWN0X3dl
YWtfcmVmKEdfT0JKRUNUKGNvbGxlY3Rpb24pLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZj
b3VudCk7Ci0KLSAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koZml4dHVyZS0+d2ViVmlldyk7Ci0gICAg
Zml4dHVyZS0+d2ViVmlldyA9IE5VTEw7Ci0KLSAgICBnX2Fzc2VydF9jbXB1aW50KGNvdW50LCA9
PSwgNCk7Ci0KLSAgICBnX29iamVjdF91bnJlZihjb2xsZWN0aW9uKTsKLQotICAgIGdfYXNzZXJ0
X2NtcHVpbnQoY291bnQsID09LCA1KTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBh
cmd2KQotewotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLQotICAgIGdf
dGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0KLSAgICBnX3Rlc3Rf
YWRkKCIvd2Via2l0L2RvbWRvY3VtZW50L3Rlc3RfdGl0bGUiLAotICAgICAgICAgICAgICAgRG9t
RG9jdW1lbnRGaXh0dXJlLCBIVE1MX0RPQ1VNRU5UX1RJVExFLAotICAgICAgICAgICAgICAgZG9t
X2RvY3VtZW50X2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X2RvbV9kb2N1bWVu
dF90aXRsZSwKLSAgICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKTsK
LQotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvZG9tZG9jdW1lbnQvdGVzdF9nZXRfZWxlbWVudHNf
YnlfdGFnX25hbWUiLAotICAgICAgICAgICAgICAgRG9tRG9jdW1lbnRGaXh0dXJlLCBIVE1MX0RP
Q1VNRU5UX0VMRU1FTlRTLAotICAgICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfc2V0
dXAsCi0gICAgICAgICAgICAgICB0ZXN0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfdGFn
X25hbWUsCi0gICAgICAgICAgICAgICBkb21fZG9jdW1lbnRfZml4dHVyZV90ZWFyZG93bik7Ci0K
LSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2RvbWRvY3VtZW50L3Rlc3RfZ2V0X2VsZW1lbnRzX2J5
X2NsYXNzX25hbWUiLAotICAgICAgICAgICAgICAgRG9tRG9jdW1lbnRGaXh0dXJlLCBIVE1MX0RP
Q1VNRU5UX0VMRU1FTlRTX0NMQVNTLAotICAgICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1
cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNf
YnlfY2xhc3NfbmFtZSwKLSAgICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJk
b3duKTsKLQotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvZG9tZG9jdW1lbnQvdGVzdF9nZXRfZWxl
bWVudF9ieV9pZCIsCi0gICAgICAgICAgICAgICBEb21Eb2N1bWVudEZpeHR1cmUsIEhUTUxfRE9D
VU1FTlRfRUxFTUVOVFNfSUQsCi0gICAgICAgICAgICAgICBkb21fZG9jdW1lbnRfZml4dHVyZV9z
ZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3RfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50X2J5X2lk
LAotICAgICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAg
Z190ZXN0X2FkZCgiL3dlYmtpdC9kb21kb2N1bWVudC90ZXN0X2dldF9saW5rcyIsCi0gICAgICAg
ICAgICAgICBEb21Eb2N1bWVudEZpeHR1cmUsIEhUTUxfRE9DVU1FTlRfTElOS1MsCi0gICAgICAg
ICAgICAgICBkb21fZG9jdW1lbnRfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3Rf
ZG9tX2RvY3VtZW50X2dldF9saW5rcywKLSAgICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0
dXJlX3RlYXJkb3duKTsKLQotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvZG9tZG9jdW1lbnQvdGVz
dF90YWJsZV9pbnNlcnRfcm93IiwKLSAgICAgICAgICAgICAgIERvbURvY3VtZW50Rml4dHVyZSwg
SFRNTF9ET0NVTUVOVF9UQUJMRSwKLSAgICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJl
X3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF9kb21fZG9jdW1lbnRfaW5zZXJ0X3JvdywKLSAg
ICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKTsKLQotICAgIGdfdGVz
dF9hZGQoIi93ZWJraXQvZG9tZG9jdW1lbnQvdGVzdF9kb2N1bWVudF9ldmFsdWF0ZSIsCi0gICAg
ICAgICAgICAgICBEb21Eb2N1bWVudEZpeHR1cmUsIEhUTUxfRE9DVU1FTlRfRVZBTFVBVEUsCi0g
ICAgICAgICAgICAgICBkb21fZG9jdW1lbnRfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAg
IHRlc3RfZG9tX2RvY3VtZW50X2V2YWx1YXRlLAotICAgICAgICAgICAgICAgZG9tX2RvY3VtZW50
X2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9kb21kb2N1bWVu
dC90ZXN0X2dhcmJhZ2VfY29sbGVjdGlvbiIsCi0gICAgICAgICAgICAgICBEb21Eb2N1bWVudEZp
eHR1cmUsIEhUTUxfRE9DVU1FTlRfTElOS1MsCi0gICAgICAgICAgICAgICBkb21fZG9jdW1lbnRf
Zml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3RfZG9tX2RvY3VtZW50X2dhcmJhZ2Vf
Y29sbGVjdGlvbiwKLSAgICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3du
KTsKLQotICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rkb21kb213aW5kb3cuYyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rl
c3RzL3Rlc3Rkb21kb213aW5kb3cuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRm
Y2QxOC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0ZG9tZG9td2lu
ZG93LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAidGVzdF91
dGlscy5oIgotCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0j
aW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KLQotI2RlZmlu
ZSBIVE1MX0RPQ1VNRU5UICI8aHRtbD48aGVhZD48dGl0bGU+PC90aXRsZT48L2hlYWQ+PHN0eWxl
IHR5cGU9J3RleHQvY3NzJz4jdGVzdCB7IGZvbnQtc2l6ZTogMTZweDsgfTwvc3R5bGU+PGJvZHk+
PHAgaWQ9J3Rlc3QnPnRlc3Q8L3A+PC9ib2R5PjwvaHRtbD4iCi0KLXR5cGVkZWYgc3RydWN0IHsK
LSAgICBHdGtXaWRnZXQqIHdlYlZpZXc7Ci0gICAgR3RrV2lkZ2V0KiB3aW5kb3c7Ci0gICAgV2Vi
S2l0RE9NRE9NV2luZG93KiBkb21XaW5kb3c7Ci0gICAgR01haW5Mb29wKiBsb29wOwotCi0gICAg
Z2Jvb2xlYW4gbG9hZGVkOwotICAgIGdib29sZWFuIGNsaWNrZWQ7Ci0gICAgZ2NvbnN0cG9pbnRl
ciBkYXRhOwotfSBEb21Eb212aWV3Rml4dHVyZTsKLQotc3RhdGljIGdib29sZWFuIGZpbmlzaF9s
b2FkaW5nKERvbURvbXZpZXdGaXh0dXJlKiBmaXh0dXJlKQotewotICAgIGlmIChnX21haW5fbG9v
cF9pc19ydW5uaW5nKGZpeHR1cmUtPmxvb3ApKQotICAgICAgICBnX21haW5fbG9vcF9xdWl0KGZp
eHR1cmUtPmxvb3ApOwotCi0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCBkb21f
ZG9tdmlld19maXh0dXJlX3NldHVwKERvbURvbXZpZXdGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rw
b2ludGVyIGRhdGEpCi17Ci0gICAgZml4dHVyZS0+bG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxM
LCBUUlVFKTsKLSAgICBmaXh0dXJlLT53aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9X
X1RPUExFVkVMKTsKLSAgICBmaXh0dXJlLT53ZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygp
OwotICAgIGZpeHR1cmUtPmRhdGEgPSBkYXRhOwotCi0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RL
X0NPTlRBSU5FUihmaXh0dXJlLT53aW5kb3cpLCBHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcp
KTsKLX0KLQotc3RhdGljIHZvaWQgZG9tX2RvbXZpZXdfZml4dHVyZV90ZWFyZG93bihEb21Eb212
aWV3Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGd0a193aWRn
ZXRfZGVzdHJveShmaXh0dXJlLT53aW5kb3cpOwotICAgIGdfbWFpbl9sb29wX3VucmVmKGZpeHR1
cmUtPmxvb3ApOwotfQotCi1zdGF0aWMgdm9pZCBkb21fZG9tX3dpbmRvd19maXh0dXJlX3NldHVw
KERvbURvbXZpZXdGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAg
Zml4dHVyZS0+bG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLSAgICBmaXh0dXJl
LT53ZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5r
KGZpeHR1cmUtPndlYlZpZXcpOwotCi0gICAgaWYgKGRhdGEgIT0gTlVMTCkKLSAgICAgICAgd2Vi
a2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklFVyAoZml4dHVyZS0+d2ViVmll
dyksIChjb25zdCBjaGFyKikgZGF0YSwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0KLSAgICBnX2lkbGVf
YWRkKChHU291cmNlRnVuYylmaW5pc2hfbG9hZGluZywgZml4dHVyZSk7Ci0gICAgZ19tYWluX2xv
b3BfcnVuKGZpeHR1cmUtPmxvb3ApOwotfQotCi1zdGF0aWMgdm9pZCBkb21fZG9tX3dpbmRvd19m
aXh0dXJlX3RlYXJkb3duKERvbURvbXZpZXdGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVy
IGRhdGEpCi17Ci0gICAgaWYgKGZpeHR1cmUtPndlYlZpZXcpCi0gICAgICAgIGdfb2JqZWN0X3Vu
cmVmKGZpeHR1cmUtPndlYlZpZXcpOwotICAgIGdfbWFpbl9sb29wX3VucmVmKGZpeHR1cmUtPmxv
b3ApOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gbG9hZGVkQ2FsbGJhY2soV2ViS2l0RE9NRE9NV2lu
ZG93KiB2aWV3LCBXZWJLaXRET01FdmVudCogZXZlbnQsIERvbURvbXZpZXdGaXh0dXJlKiBmaXh0
dXJlKQotewotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmxvYWRlZCA9PSBGQUxTRSk7Ci0gICAgZml4
dHVyZS0+bG9hZGVkID0gVFJVRTsKLQotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGdi
b29sZWFuIGNsaWNrZWRDYWxsYmFjayhXZWJLaXRET01ET01XaW5kb3cqIHZpZXcsIFdlYktpdERP
TUV2ZW50KiBldmVudCwgRG9tRG9tdmlld0ZpeHR1cmUqIGZpeHR1cmUpCi17Ci0gICAgV2ViS2l0
RE9NRXZlbnRUYXJnZXQqIHRhcmdldDsKLSAgICBndXNob3J0IHBoYXNlOwotCi0gICAgZ19hc3Nl
cnQoZXZlbnQpOwotICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfRVZFTlQoZXZlbnQpKTsKLQot
ICAgIC8vIFdlIHNob3VsZCBjYXRjaCB0aGlzIGluIHRoZSBidWJibGluZyB1cCBwaGFzZSwgc2lu
Y2Ugd2UgYXJlIGNvbm5lY3RpbmcgdG8gdGhlIHRvcGxldmVsIG9iamVjdAotICAgIHBoYXNlID0g
d2Via2l0X2RvbV9ldmVudF9nZXRfZXZlbnRfcGhhc2UoZXZlbnQpOwotICAgIGdfYXNzZXJ0X2Nt
cGludChwaGFzZSwgPT0sIDMpOwotCi0gICAgdGFyZ2V0ID0gd2Via2l0X2RvbV9ldmVudF9nZXRf
Y3VycmVudF90YXJnZXQoZXZlbnQpOwotICAgIGdfYXNzZXJ0KHRhcmdldCA9PSBXRUJLSVRfRE9N
X0VWRU5UX1RBUkdFVCh2aWV3KSk7Ci0KLSAgICBnX2Fzc2VydChmaXh0dXJlLT5jbGlja2VkID09
IEZBTFNFKTsKLSAgICBmaXh0dXJlLT5jbGlja2VkID0gVFJVRTsKLQotICAgIGZpbmlzaF9sb2Fk
aW5nKGZpeHR1cmUpOwotCi0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1nYm9vbGVhbiBtYXBfZXZl
bnRfY2IoR3RrV2lkZ2V0ICp3aWRnZXQsIEdka0V2ZW50KiBldmVudCwgRG9tRG9tdmlld0ZpeHR1
cmUqIGZpeHR1cmUpCi17Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9X
RUJfVklFVyAoZml4dHVyZS0+d2ViVmlldyksIChjb25zdCBjaGFyKilmaXh0dXJlLT5kYXRhLCBO
VUxMLCBOVUxMLCBOVUxMKTsKLQotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQg
bG9hZF9ldmVudF9jYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHUGFyYW1TcGVjKiBz
cGVjLCBEb21Eb212aWV3Rml4dHVyZSogZml4dHVyZSkKLXsKLSAgICBXZWJLaXRMb2FkU3RhdHVz
IHN0YXR1cyA9IHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMod2ViVmlldyk7Ci0gICAg
aWYgKHN0YXR1cyA9PSBXRUJLSVRfTE9BRF9GSU5JU0hFRCkgewotICAgICAgICB3ZWJraXRfZG9t
X2V2ZW50X3RhcmdldF9hZGRfZXZlbnRfbGlzdGVuZXIoV0VCS0lUX0RPTV9FVkVOVF9UQVJHRVQo
Zml4dHVyZS0+ZG9tV2luZG93KSwgImNsaWNrIiwgR19DQUxMQkFDSyhjbGlja2VkQ2FsbGJhY2sp
LCBmYWxzZSwgZml4dHVyZSk7Ci0KLSAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+Y2xpY2tlZCA9
PSBGQUxTRSk7Ci0gICAgICAgIGd0a190ZXN0X3dpZGdldF9jbGljayhHVEtfV0lER0VUKGZpeHR1
cmUtPndlYlZpZXcpLCAxLCAwKTsKLSAgICB9Ci0KLX0KLQotc3RhdGljIHZvaWQgdGVzdF9kb21f
ZG9tdmlld19zaWduYWxzKERvbURvbXZpZXdGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVy
IGRhdGEpCi17Ci0gICAgZ19hc3NlcnQoZml4dHVyZSk7Ci0gICAgV2ViS2l0V2ViVmlldyogdmll
dyA9IChXZWJLaXRXZWJWaWV3KilmaXh0dXJlLT53ZWJWaWV3OwotICAgIGdfYXNzZXJ0KHZpZXcp
OwotICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRf
ZG9tX2RvY3VtZW50KHZpZXcpOwotICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsKLSAgICBXZWJLaXRE
T01ET01XaW5kb3cqIGRvbVdpbmRvdyA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2RlZmF1bHRf
dmlldyhkb2N1bWVudCk7Ci0gICAgZ19hc3NlcnQoZG9tV2luZG93KTsKLQotICAgIGZpeHR1cmUt
PmRvbVdpbmRvdyA9IGRvbVdpbmRvdzsKLQotICAgIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2Fk
ZF9ldmVudF9saXN0ZW5lcihXRUJLSVRfRE9NX0VWRU5UX1RBUkdFVChmaXh0dXJlLT5kb21XaW5k
b3cpLCAibG9hZCIsIEdfQ0FMTEJBQ0sobG9hZGVkQ2FsbGJhY2spLCBmYWxzZSwgZml4dHVyZSk7
Ci0gICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53aW5kb3csICJtYXAtZXZlbnQiLCBHX0NB
TExCQUNLKG1hcF9ldmVudF9jYiksIGZpeHR1cmUpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4
dHVyZS0+d2ViVmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLCBHX0NBTExCQUNLKGxvYWRfZXZl
bnRfY2FsbGJhY2spLCBmaXh0dXJlKTsKLQotICAgIGd0a193aWRnZXRfc2hvd19hbGwoZml4dHVy
ZS0+d2luZG93KTsKLSAgICBndGtfd2luZG93X3ByZXNlbnQoR1RLX1dJTkRPVyhmaXh0dXJlLT53
aW5kb3cpKTsKLQotICAgIGdfbWFpbl9sb29wX3J1bihmaXh0dXJlLT5sb29wKTsKLQotICAgIGdf
YXNzZXJ0KGZpeHR1cmUtPmxvYWRlZCk7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+Y2xpY2tlZCk7
Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotY2xpY2tlZF9jYihXZWJLaXRET01FdmVudFRhcmdldCog
dGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIERvbURvbXZpZXdGaXh0dXJlKiBmaXh0dXJl
KQotewotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmNsaWNrZWQgPT0gRkFMU0UpOwotICAgIGZpeHR1
cmUtPmNsaWNrZWQgPSBUUlVFOwotICAgIGZpbmlzaF9sb2FkaW5nKGZpeHR1cmUpOwotICAgIHJl
dHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQgbG9hZF9zdGF0dXNfY2FsbGJhY2soV2ViS2l0
V2ViVmlldyogd2ViVmlldywgR1BhcmFtU3BlYyogc3BlYywgRG9tRG9tdmlld0ZpeHR1cmUqIGZp
eHR1cmUpCi17Ci0gICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X2xvYWRfc3RhdHVzKHdlYlZpZXcpOwotICAgIGlmIChzdGF0dXMgPT0gV0VCS0lUX0xPQURf
RklOSVNIRUQpIHsKLSAgICAgICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50OwotICAgICAg
ICBXZWJLaXRET01ET01XaW5kb3cqIGRvbVdpbmRvdzsKLSAgICAgICAgV2ViS2l0RE9NRWxlbWVu
dCogZWxlbWVudDsKLSAgICAgICAgV2ViS2l0RE9NRXZlbnQqIGV2ZW50OwotICAgICAgICBnbG9u
ZyBjbGllbnRYLCBjbGllbnRZOwotCi0gICAgICAgIGRvY3VtZW50ID0gd2Via2l0X3dlYl92aWV3
X2dldF9kb21fZG9jdW1lbnQoV0VCS0lUX1dFQl9WSUVXKGZpeHR1cmUtPndlYlZpZXcpKTsKLSAg
ICAgICAgZ19hc3NlcnQoZG9jdW1lbnQpOwotICAgICAgICBkb21XaW5kb3cgPSB3ZWJraXRfZG9t
X2RvY3VtZW50X2dldF9kZWZhdWx0X3ZpZXcoZG9jdW1lbnQpOwotICAgICAgICBnX2Fzc2VydChk
b21XaW5kb3cpOwotICAgICAgICBmaXh0dXJlLT5kb21XaW5kb3cgPSBkb21XaW5kb3c7Ci0KLSAg
ICAgICAgZWxlbWVudCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRfYnlfaWQoZG9j
dW1lbnQsICJ0ZXN0Iik7Ci0gICAgICAgIGdfYXNzZXJ0KGVsZW1lbnQpOwotICAgICAgICBldmVu
dCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2V2ZW50KGRvY3VtZW50LCAiTW91c2VFdmVu
dCIsIE5VTEwpOwotICAgICAgICBnX2Fzc2VydChldmVudCk7Ci0gICAgICAgIGdfYXNzZXJ0KFdF
QktJVF9ET01fSVNfRVZFTlQoZXZlbnQpKTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9J
U19NT1VTRV9FVkVOVChldmVudCkpOwotICAgICAgICBjbGllbnRYID0gd2Via2l0X2RvbV9lbGVt
ZW50X2dldF9jbGllbnRfbGVmdChlbGVtZW50KTsKLSAgICAgICAgY2xpZW50WSA9IHdlYmtpdF9k
b21fZWxlbWVudF9nZXRfY2xpZW50X3RvcChlbGVtZW50KTsKLSAgICAgICAgd2Via2l0X2RvbV9t
b3VzZV9ldmVudF9pbml0X21vdXNlX2V2ZW50KFdFQktJVF9ET01fTU9VU0VfRVZFTlQoZXZlbnQp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNsaWNr
IiwgVFJVRSwgVFJVRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZpeHR1cmUtPmRvbVdpbmRvdywgMCwgMCwgMCwgY2xpZW50WCwgY2xpZW50WSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLCBGQUxT
RSwgRkFMU0UsIEZBTFNFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMSwgV0VCS0lUX0RPTV9FVkVOVF9UQVJHRVQoZWxlbWVudCkpOwotICAgICAgICB3
ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9hZGRfZXZlbnRfbGlzdGVuZXIoV0VCS0lUX0RPTV9FVkVO
VF9UQVJHRVQoZWxlbWVudCksICJjbGljayIsIEdfQ0FMTEJBQ0soY2xpY2tlZF9jYiksIGZhbHNl
LCBmaXh0dXJlKTsKLSAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+Y2xpY2tlZCA9PSBGQUxTRSk7
Ci0gICAgICAgIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2Rpc3BhdGNoX2V2ZW50KFdFQktJVF9E
T01fRVZFTlRfVEFSR0VUKGVsZW1lbnQpLCBldmVudCwgTlVMTCk7Ci0gICAgfQotCi19Ci0KLXN0
YXRpYyB2b2lkIHRlc3RfZG9tX2RvbXZpZXdfZGlzcGF0Y2hfZXZlbnQoRG9tRG9tdmlld0ZpeHR1
cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBnX3NpZ25hbF9jb25uZWN0
KGZpeHR1cmUtPndpbmRvdywgIm1hcC1ldmVudCIsIEdfQ0FMTEJBQ0sobWFwX2V2ZW50X2NiKSwg
Zml4dHVyZSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53ZWJWaWV3LCAibm90aWZ5
Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0sobG9hZF9zdGF0dXNfY2FsbGJhY2spLCBmaXh0dXJl
KTsKLQotICAgIGd0a193aWRnZXRfc2hvd19hbGwoZml4dHVyZS0+d2luZG93KTsKLSAgICBndGtf
d2luZG93X3ByZXNlbnQoR1RLX1dJTkRPVyhmaXh0dXJlLT53aW5kb3cpKTsKLQotICAgIGdfbWFp
bl9sb29wX3J1biAoZml4dHVyZS0+bG9vcCk7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+Y2xpY2tl
ZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RfZG9tX2RvbV93aW5kb3dfZ2V0X2NvbXB1dGVkX3N0
eWxlKERvbURvbXZpZXdGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0g
ICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9kb21f
ZG9jdW1lbnQoV0VCS0lUX1dFQl9WSUVXKGZpeHR1cmUtPndlYlZpZXcpKTsKLSAgICBnX2Fzc2Vy
dChkb2N1bWVudCk7Ci0gICAgV2ViS2l0RE9NRE9NV2luZG93KiBkb21XaW5kb3cgPSB3ZWJraXRf
ZG9tX2RvY3VtZW50X2dldF9kZWZhdWx0X3ZpZXcoZG9jdW1lbnQpOwotICAgIGdfYXNzZXJ0KGRv
bVdpbmRvdyk7Ci0KLSAgICBXZWJLaXRET01FbGVtZW50KiAgZWxlbWVudCA9IHdlYmtpdF9kb21f
ZG9jdW1lbnRfZ2V0X2VsZW1lbnRfYnlfaWQoZG9jdW1lbnQsICJ0ZXN0Iik7Ci0gICAgZ19hc3Nl
cnQoZWxlbWVudCk7Ci0gICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19FTEVNRU5UKGVsZW1lbnQp
KTsKLSAgICBXZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uKiBjc3NTdHlsZSA9IHdlYmtpdF9k
b21fZG9tX3dpbmRvd19nZXRfY29tcHV0ZWRfc3R5bGUoZG9tV2luZG93LCBlbGVtZW50LCBOVUxM
KTsKLSAgICBnY2hhciogZm9udFNpemUgPSB3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlv
bl9nZXRfcHJvcGVydHlfdmFsdWUoY3NzU3R5bGUsICJmb250LXNpemUiKTsKLSAgICBnX2Fzc2Vy
dF9jbXBzdHIoZm9udFNpemUsID09LCAiMTZweCIpOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywg
Y2hhcioqIGFyZ3YpCi17Ci0gICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOwot
Ci0gICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKLQotICAg
IGdfdGVzdF9hZGQoIi93ZWJraXQvZG9tZG9tdmlldy9zaWduYWxzIiwKLSAgICAgICAgICAgICAg
IERvbURvbXZpZXdGaXh0dXJlLCBIVE1MX0RPQ1VNRU5ULAotICAgICAgICAgICAgICAgZG9tX2Rv
bXZpZXdfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3RfZG9tX2RvbXZpZXdfc2ln
bmFscywKLSAgICAgICAgICAgICAgIGRvbV9kb212aWV3X2ZpeHR1cmVfdGVhcmRvd24pOwotCi0g
ICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9kb21kb212aWV3L2Rpc3BhdGNoX2V2ZW50IiwKLSAgICAg
ICAgICAgICAgIERvbURvbXZpZXdGaXh0dXJlLCBIVE1MX0RPQ1VNRU5ULAotICAgICAgICAgICAg
ICAgZG9tX2RvbXZpZXdfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3RfZG9tX2Rv
bXZpZXdfZGlzcGF0Y2hfZXZlbnQsCi0gICAgICAgICAgICAgICBkb21fZG9tdmlld19maXh0dXJl
X3RlYXJkb3duKTsKLQotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvZG9tZG9td2luZG93L2dldF9j
b21wdXRlZF9zdHlsZSIsCi0gICAgICAgICAgICAgICBEb21Eb212aWV3Rml4dHVyZSwgSFRNTF9E
T0NVTUVOVCwKLSAgICAgICAgICAgICAgIGRvbV9kb21fd2luZG93X2ZpeHR1cmVfc2V0dXAsCi0g
ICAgICAgICAgICAgICB0ZXN0X2RvbV9kb21fd2luZG93X2dldF9jb21wdXRlZF9zdHlsZSwKLSAg
ICAgICAgICAgICAgIGRvbV9kb21fd2luZG93X2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAgcmV0
dXJuIGdfdGVzdF9ydW4oKTsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVz
dHMvdGVzdGRvbW5vZGUuYyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rkb21ub2RlLmMK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNGJjYmQuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvbW5vZGUuYworKysgL2Rldi9udWxsCkBAIC0xLDIx
OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJ0ZXN0X3V0aWxzLmgiCi0KLSNpbmNsdWRlIDxnbGliLmg+
Ci0jaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVk
ZSA8d2Via2l0L3dlYmtpdC5oPgotCi0jZGVmaW5lIEhUTUxfRE9DVU1FTlRfSElFUkFSQ0hZX05B
VklHQVRJT04gIjxodG1sPjxoZWFkPjx0aXRsZT5UaGlzIGlzIHRoZSB0aXRsZTwvdGl0bGU+PC9o
ZWFkPjxib2R5PjxwPjE8L3A+PHA+MjwvcD48cD4zPC9wPjwvYm9keT48L2h0bWw+IgotI2RlZmlu
ZSBIVE1MX0RPQ1VNRU5UX05PREVfSU5TRVJUSU9OICI8aHRtbD48Ym9keT48L2JvZHk+PC9odG1s
PiIKLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIEd0a1dpZGdldCogd2ViVmlldzsKLSAgICBHTWFp
bkxvb3AqIGxvb3A7Ci19IERvbU5vZGVGaXh0dXJlOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZmluaXNo
X2xvYWRpbmcoRG9tTm9kZUZpeHR1cmUqIGZpeHR1cmUpCi17Ci0gICAgaWYgKGdfbWFpbl9sb29w
X2lzX3J1bm5pbmcoZml4dHVyZS0+bG9vcCkpCi0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQoZml4
dHVyZS0+bG9vcCk7Ci0KLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lkIGRvbV9u
b2RlX2ZpeHR1cmVfc2V0dXAoRG9tTm9kZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIg
ZGF0YSkKLXsKLSAgICBmaXh0dXJlLT5sb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUp
OwotICAgIGZpeHR1cmUtPndlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7Ci0gICAgZ19v
YmplY3RfcmVmX3NpbmsoZml4dHVyZS0+d2ViVmlldyk7Ci0KLSAgICBpZiAoZGF0YSAhPSBOVUxM
KQotICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVXKGZp
eHR1cmUtPndlYlZpZXcpLCAoY29uc3QgY2hhciopZGF0YSwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0K
LSAgICBnX2lkbGVfYWRkKChHU291cmNlRnVuYylmaW5pc2hfbG9hZGluZywgZml4dHVyZSk7Ci0g
ICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1cmUtPmxvb3ApOwotfQotCi1zdGF0aWMgdm9pZCBkb21f
bm9kZV9maXh0dXJlX3RlYXJkb3duKERvbU5vZGVGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2lu
dGVyIGRhdGEpCi17Ci0gICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+d2ViVmlldyk7Ci0gICAg
Z19tYWluX2xvb3BfdW5yZWYoZml4dHVyZS0+bG9vcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rf
ZG9tX25vZGVfaGllcmFyY2h5X25hdmlnYXRpb24oRG9tTm9kZUZpeHR1cmUqIGZpeHR1cmUsIGdj
b25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQ7Ci0g
ICAgV2ViS2l0RE9NSFRNTEhlYWRFbGVtZW50KiBoZWFkOwotICAgIFdlYktpdERPTUhUTUxCb2R5
RWxlbWVudCogYm9keTsKLSAgICBXZWJLaXRET01Ob2RlTGlzdCogbGlzdDsKLSAgICBXZWJLaXRE
T01Ob2RlKiBwdHI7Ci0gICAgZ3Vsb25nIGksIGxlbmd0aDsKLQotICAgIGRvY3VtZW50ID0gd2Vi
a2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQoV0VCS0lUX1dFQl9WSUVXKGZpeHR1cmUtPndl
YlZpZXcpKTsKLSAgICBnX2Fzc2VydChkb2N1bWVudCk7Ci0gICAgZ19hc3NlcnQoV0VCS0lUX0RP
TV9JU19ET0NVTUVOVChkb2N1bWVudCkpOwotICAgIGhlYWQgPSB3ZWJraXRfZG9tX2RvY3VtZW50
X2dldF9oZWFkKGRvY3VtZW50KTsKLSAgICBnX2Fzc2VydChoZWFkKTsKLSAgICBnX2Fzc2VydChX
RUJLSVRfRE9NX0lTX0hUTUxfSEVBRF9FTEVNRU5UKGhlYWQpKTsKLQotICAgIC8qIFRpdGxlLCBo
ZWFkJ3MgY2hpbGQgKi8KLSAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaGFzX2NoaWxkX25v
ZGVzKFdFQktJVF9ET01fTk9ERShoZWFkKSkpOwotICAgIGxpc3QgPSB3ZWJraXRfZG9tX25vZGVf
Z2V0X2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShoZWFkKSk7Ci0gICAgZ19hc3NlcnRfY21w
aW50KHdlYmtpdF9kb21fbm9kZV9saXN0X2dldF9sZW5ndGgobGlzdCksID09LCAxKTsKLSAgICBw
dHIgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtKGxpc3QsIDApOwotICAgIGdfYXNzZXJ0KHB0
cik7Ci0gICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX1RJVExFX0VMRU1FTlQocHRyKSk7
Ci0gICAgZ19vYmplY3RfdW5yZWYobGlzdCk7Ci0KLSAgICAvKiBCb2R5LCBIZWFkIHNpYmxpbmcg
Ki8KLSAgICBwdHIgPSB3ZWJraXRfZG9tX25vZGVfZ2V0X25leHRfc2libGluZyhXRUJLSVRfRE9N
X05PREUoaGVhZCkpOwotICAgIGdfYXNzZXJ0KHB0cik7Ci0gICAgYm9keSA9IFdFQktJVF9ET01f
SFRNTF9CT0RZX0VMRU1FTlQocHRyKTsKLSAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxf
Qk9EWV9FTEVNRU5UKGJvZHkpKTsKLQotICAgIC8qIFRoZXJlIGlzIG5vIHRoaXJkIHNpYmxpbmcg
Ki8KLSAgICBwdHIgPSB3ZWJraXRfZG9tX25vZGVfZ2V0X25leHRfc2libGluZyhwdHIpOwotICAg
IGdfYXNzZXJ0KHB0ciA9PSBOVUxMKTsKLQotICAgIC8qIEJvZHkncyBwcmV2aW91cyBzaWJsaW5n
IGlzIEhlYWQgKi8KLSAgICBwdHIgPSB3ZWJraXRfZG9tX25vZGVfZ2V0X3ByZXZpb3VzX3NpYmxp
bmcoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKTsKLSAgICBnX2Fzc2VydChwdHIpOwotICAgIGdfYXNz
ZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9IRUFEX0VMRU1FTlQocHRyKSk7Ci0KLSAgICAvKiBCb2R5
IGhhcyAzIGNoaWxkcmVuICovCi0gICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2hhc19jaGls
ZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpKTsKLSAgICBsaXN0ID0gd2Via2l0X2RvbV9u
b2RlX2dldF9jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpOwotICAgIGxlbmd0aCA9
IHdlYmtpdF9kb21fbm9kZV9saXN0X2dldF9sZW5ndGgobGlzdCk7Ci0gICAgZ19hc3NlcnRfY21w
aW50KGxlbmd0aCwgPT0sIDMpOwotCi0gICAgLyogVGhlIHRocmVlIG9mIHRoZW0gYXJlIFAgdGFn
cyAqLwotICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBwdHIgPSB3
ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtKGxpc3QsIGkpOwotICAgICAgICBnX2Fzc2VydChwdHIp
OwotICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfUEFSQUdSQVBIX0VMRU1FTlQo
cHRyKSk7Ci0gICAgfQotCi0gICAgLyogR28gYmFja3dhcmRzICovCi0gICAgZm9yIChpID0gMDsg
cHRyOyBwdHIgPSB3ZWJraXRfZG9tX25vZGVfZ2V0X3ByZXZpb3VzX3NpYmxpbmcocHRyKSwgaSsr
KQotICAgICAgICAvKiBOb3RoaW5nICovOwotCi0gICAgZ19hc3NlcnRfY21waW50KGksID09LCAz
KTsKLSAgICBnX29iamVjdF91bnJlZihsaXN0KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF9kb21f
bm9kZV9pbnNlcnRpb24oRG9tTm9kZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0
YSkKLXsKLSAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQ7Ci0gICAgV2ViS2l0RE9NSFRN
TEVsZW1lbnQqIGJvZHk7Ci0gICAgV2ViS2l0RE9NRWxlbWVudCogcCwgKmRpdjsKLSAgICBXZWJL
aXRET01Ob2RlTGlzdCogbGlzdDsKLSAgICBXZWJLaXRET01Ob2RlKiBub2RlOwotCi0gICAgZG9j
dW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudChXRUJLSVRfV0VCX1ZJRVco
Zml4dHVyZS0+d2ViVmlldykpOwotICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsKLSAgICBib2R5ID0g
d2Via2l0X2RvbV9kb2N1bWVudF9nZXRfYm9keShkb2N1bWVudCk7Ci0gICAgZ19hc3NlcnQoYm9k
eSk7Ci0gICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0VMRU1FTlQoYm9keSkpOwotCi0g
ICAgLyogQm9keSBzaG91bGRuJ3QgaGF2ZSBhbnkgY2hpbGRyZW4gYXQgdGhpcyBwb2ludCAqLwot
ICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9oYXNfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9O
T0RFKGJvZHkpKSA9PSBGQUxTRSk7Ci0KLSAgICAvKiBJbnNlcnQgb25lIFAgZWxlbWVudCAqLwot
ICAgIHAgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9lbGVtZW50KGRvY3VtZW50LCAiUCIs
IE5VTEwpOwotICAgIHdlYmtpdF9kb21fbm9kZV9hcHBlbmRfY2hpbGQoV0VCS0lUX0RPTV9OT0RF
KGJvZHkpLCBXRUJLSVRfRE9NX05PREUocCksIE5VTEwpOwotCi0gICAgLyogTm93IGl0IHNob3Vs
ZCBoYXZlIG9uZSwgdGhlIHNhbWUgdGhhdCB3ZSBpbnNlcnRlZCAqLwotICAgIGdfYXNzZXJ0KHdl
YmtpdF9kb21fbm9kZV9oYXNfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKSk7Ci0g
ICAgbGlzdCA9IHdlYmtpdF9kb21fbm9kZV9nZXRfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RF
KGJvZHkpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xl
bmd0aChsaXN0KSwgPT0sIDEpOwotICAgIG5vZGUgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVt
KGxpc3QsIDApOwotICAgIGdfYXNzZXJ0KG5vZGUpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21f
bm9kZV9pc19zYW1lX25vZGUoV0VCS0lUX0RPTV9OT0RFKHApLCBub2RlKSk7Ci0gICAgZ19vYmpl
Y3RfdW5yZWYobGlzdCk7Ci0KLSAgICAvKiBSZXBsYWNlIHRoZSBQIHRhZyB3aXRoIGEgRElWIHRh
ZyAqLwotICAgIGRpdiA9IHdlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2VsZW1lbnQoZG9jdW1l
bnQsICJESVYiLCBOVUxMKTsKLSAgICB3ZWJraXRfZG9tX25vZGVfcmVwbGFjZV9jaGlsZChXRUJL
SVRfRE9NX05PREUoYm9keSksIFdFQktJVF9ET01fTk9ERShkaXYpLCBXRUJLSVRfRE9NX05PREUo
cCksIE5VTEwpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9oYXNfY2hpbGRfbm9kZXMo
V0VCS0lUX0RPTV9OT0RFKGJvZHkpKSk7Ci0gICAgbGlzdCA9IHdlYmtpdF9kb21fbm9kZV9nZXRf
Y2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
d2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChsaXN0KSwgPT0sIDEpOwotICAgIG5vZGUg
PSB3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtKGxpc3QsIDApOwotICAgIGdfYXNzZXJ0KG5vZGUp
OwotICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9pc19zYW1lX25vZGUoV0VCS0lUX0RPTV9O
T0RFKGRpdiksIG5vZGUpKTsKLSAgICBnX29iamVjdF91bnJlZihsaXN0KTsKLQotICAgIC8qIE5v
dyByZW1vdmUgdGhlIHRhZyAqLwotICAgIHdlYmtpdF9kb21fbm9kZV9yZW1vdmVfY2hpbGQoV0VC
S0lUX0RPTV9OT0RFKGJvZHkpLCBub2RlLCBOVUxMKTsKLSAgICBsaXN0ID0gd2Via2l0X2RvbV9u
b2RlX2dldF9jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpOwotICAgIGdfYXNzZXJ0
X2NtcGludCh3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QpLCA9PSwgMCk7Ci0g
ICAgZ19vYmplY3RfdW5yZWYobGlzdCk7Ci0KLSAgICAvKiBUZXN0IGluc2VydF9iZWZvcmUgKi8K
LQotICAgIC8qIElmIHJlZkNoaWxkIGlzIG51bGwsIGluc2VydCBuZXdDaGlsZCBhcyBsYXN0IGVs
ZW1lbnQgb2YgcGFyZW50ICovCi0gICAgZGl2ID0gd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVf
ZWxlbWVudChkb2N1bWVudCwgIkRJViIsIE5VTEwpOwotICAgIHdlYmtpdF9kb21fbm9kZV9pbnNl
cnRfYmVmb3JlKFdFQktJVF9ET01fTk9ERShib2R5KSwgV0VCS0lUX0RPTV9OT0RFKGRpdiksIE5V
TEwsIE5VTEwpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9oYXNfY2hpbGRfbm9kZXMo
V0VCS0lUX0RPTV9OT0RFKGJvZHkpKSk7Ci0gICAgbGlzdCA9IHdlYmtpdF9kb21fbm9kZV9nZXRf
Y2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
d2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChsaXN0KSwgPT0sIDEpOwotICAgIG5vZGUg
PSB3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtKGxpc3QsIDApOwotICAgIGdfYXNzZXJ0KG5vZGUp
OwotICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9pc19zYW1lX25vZGUoV0VCS0lUX0RPTV9O
T0RFKGRpdiksIG5vZGUpKTsKLSAgICBnX29iamVjdF91bnJlZihsaXN0KTsKLQotICAgIC8qIE5v
dyBpbnNlcnQgYSAncCcgYmVmb3JlICdkaXYnICovCi0gICAgcCA9IHdlYmtpdF9kb21fZG9jdW1l
bnRfY3JlYXRlX2VsZW1lbnQoZG9jdW1lbnQsICJQIiwgTlVMTCk7Ci0gICAgd2Via2l0X2RvbV9u
b2RlX2luc2VydF9iZWZvcmUoV0VCS0lUX0RPTV9OT0RFKGJvZHkpLCBXRUJLSVRfRE9NX05PREUo
cCksIFdFQktJVF9ET01fTk9ERShkaXYpLCBOVUxMKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfZG9t
X25vZGVfaGFzX2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSkpOwotICAgIGxpc3Qg
PSB3ZWJraXRfZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSk7
Ci0gICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9kb21fbm9kZV9saXN0X2dldF9sZW5ndGgobGlz
dCksID09LCAyKTsKLSAgICBub2RlID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0LCAw
KTsKLSAgICBnX2Fzc2VydChub2RlKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaXNf
c2FtZV9ub2RlKFdFQktJVF9ET01fTk9ERShwKSwgbm9kZSkpOwotICAgIG5vZGUgPSB3ZWJraXRf
ZG9tX25vZGVfbGlzdF9pdGVtKGxpc3QsIDEpOwotICAgIGdfYXNzZXJ0KG5vZGUpOwotICAgIGdf
YXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9pc19zYW1lX25vZGUoV0VCS0lUX0RPTV9OT0RFKGRpdiks
IG5vZGUpKTsKLSAgICBnX29iamVjdF91bnJlZihsaXN0KTsKLX0KLQotaW50IG1haW4oaW50IGFy
Z2MsIGNoYXIqKiBhcmd2KQotewotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxM
KTsKLQotICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0K
LSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2RvbW5vZGUvdGVzdF9oaWVyYXJjaHlfbmF2aWdhdGlv
biIsCi0gICAgICAgICAgICAgICBEb21Ob2RlRml4dHVyZSwgSFRNTF9ET0NVTUVOVF9ISUVSQVJD
SFlfTkFWSUdBVElPTiwKLSAgICAgICAgICAgICAgIGRvbV9ub2RlX2ZpeHR1cmVfc2V0dXAsCi0g
ICAgICAgICAgICAgICB0ZXN0X2RvbV9ub2RlX2hpZXJhcmNoeV9uYXZpZ2F0aW9uLAotICAgICAg
ICAgICAgICAgZG9tX25vZGVfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIv
d2Via2l0L2RvbW5vZGUvdGVzdF9pbnNlcnRpb24iLAotICAgICAgICAgICAgICAgRG9tTm9kZUZp
eHR1cmUsIEhUTUxfRE9DVU1FTlRfTk9ERV9JTlNFUlRJT04sCi0gICAgICAgICAgICAgICBkb21f
bm9kZV9maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF9kb21fbm9kZV9pbnNlcnRp
b24sCi0gICAgICAgICAgICAgICBkb21fbm9kZV9maXh0dXJlX3RlYXJkb3duKTsKLQotICAgIHJl
dHVybiBnX3Rlc3RfcnVuKCk7Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rl
c3RzL3Rlc3Rkb3dubG9hZC5jIGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvd25sb2Fk
LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4ZThkZWQuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvd25sb2FkLmMKKysrIC9kZXYvbnVsbApAQCAt
MSwzMjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBDaHJpc3RpYW4gRHl3YW4g
PGNocmlzdGlhbkB0d290b2FzdHMuZGU+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2
ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8
ZXJybm8uaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgot
I2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KLQotR01haW5Mb29wKiBsb29wOwotY2hhciogdGVt
cG9yYXJ5RmlsZW5hbWUgPSBOVUxMOwotV2ViS2l0RG93bmxvYWQqIHRoZURvd25sb2FkID0gTlVM
TDsKLQotc3RhdGljIHZvaWQKLXRlc3Rfd2Via2l0X2Rvd25sb2FkX2NyZWF0ZSh2b2lkKQotewot
ICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0OwotICAgIFdlYktpdERvd25sb2FkKiBk
b3dubG9hZDsKLSAgICBjb25zdCBnY2hhciogdXJpID0gImh0dHA6Ly9leGFtcGxlLmNvbSI7Ci0g
ICAgZ2NoYXIqIHRtcERpcjsKLQotICAgIHJlcXVlc3QgPSB3ZWJraXRfbmV0d29ya19yZXF1ZXN0
X25ldyh1cmkpOwotICAgIGRvd25sb2FkID0gd2Via2l0X2Rvd25sb2FkX25ldyhyZXF1ZXN0KTsK
LSAgICBnX29iamVjdF91bnJlZihyZXF1ZXN0KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0
X2Rvd25sb2FkX2dldF91cmkoZG93bmxvYWQpLCA9PSwgdXJpKTsKLSAgICBnX2Fzc2VydCh3ZWJr
aXRfZG93bmxvYWRfZ2V0X25ldHdvcmtfcmVxdWVzdChkb3dubG9hZCkgPT0gcmVxdWVzdCk7Ci0g
ICAgZ19hc3NlcnQoZ19zdHJyc3RyKHVyaSwgd2Via2l0X2Rvd25sb2FkX2dldF9zdWdnZXN0ZWRf
ZmlsZW5hbWUoZG93bmxvYWQpKSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X2Rvd25sb2FkX2dldF9z
dGF0dXMoZG93bmxvYWQpID09IFdFQktJVF9ET1dOTE9BRF9TVEFUVVNfQ1JFQVRFRCk7Ci0gICAg
Z19hc3NlcnQoIXdlYmtpdF9kb3dubG9hZF9nZXRfdG90YWxfc2l6ZShkb3dubG9hZCkpOwotICAg
IGdfYXNzZXJ0KCF3ZWJraXRfZG93bmxvYWRfZ2V0X2N1cnJlbnRfc2l6ZShkb3dubG9hZCkpOwot
ICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG93bmxvYWRfZ2V0X3Byb2dyZXNzKGRvd25sb2FkKSk7Ci0g
ICAgZ19hc3NlcnQoIXdlYmtpdF9kb3dubG9hZF9nZXRfZWxhcHNlZF90aW1lKGRvd25sb2FkKSk7
Ci0gICAgdG1wRGlyID0gZ19maWxlbmFtZV90b191cmkoZ19nZXRfdG1wX2RpcigpLCBOVUxMLCBO
VUxMKTsKLSAgICB3ZWJraXRfZG93bmxvYWRfc2V0X2Rlc3RpbmF0aW9uX3VyaShkb3dubG9hZCwg
dG1wRGlyKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodG1wRGlyLCA9PSwgd2Via2l0X2Rvd25sb2Fk
X2dldF9kZXN0aW5hdGlvbl91cmkoZG93bmxvYWQpKTs7Ci0gICAgZ19mcmVlKHRtcERpcik7Ci0g
ICAgZ19vYmplY3RfdW5yZWYoZG93bmxvYWQpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLW5hdmln
YXRpb25fcG9saWN5X2RlY2lzaW9uX3JlcXVlc3RlZF9jYihXZWJLaXRXZWJWaWV3KiB3ZWJfdmll
dywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRXZWJGcmFt
ZSogd2ViX2ZyYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdl
YktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFdlYktpdFdlYk5hdmlnYXRpb25BY3Rpb24qIGFjdGlvbiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRXZWJQb2xpY3lEZWNpc2lvbiog
ZGVjaXNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50
ZXIgZGF0YSkKLXsKLSAgICB3ZWJraXRfd2ViX3BvbGljeV9kZWNpc2lvbl9kb3dubG9hZChkZWNp
c2lvbik7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1ub3RpZnlfc3RhdHVz
X2NiKEdPYmplY3QqIG9iamVjdCwgR1BhcmFtU3BlYyogcHNwZWMsIGdwb2ludGVyIGRhdGEpCi17
Ci0gICAgV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkID0gV0VCS0lUX0RPV05MT0FEKG9iamVjdCk7
Ci0gICAgc3dpdGNoICh3ZWJraXRfZG93bmxvYWRfZ2V0X3N0YXR1cyhkb3dubG9hZCkpIHsKLSAg
ICBjYXNlIFdFQktJVF9ET1dOTE9BRF9TVEFUVVNfRklOSVNIRUQ6Ci0gICAgY2FzZSBXRUJLSVRf
RE9XTkxPQURfU1RBVFVTX0VSUk9SOgotICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIFdFQktJVF9ET1dOTE9BRF9TVEFUVVNfQ0FOQ0VMTEVE
OgotICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAgICAgICBicmVhazsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotc2V0
X2ZpbGVuYW1lKGdjaGFyKiBmaWxlbmFtZSkKLXsKLSAgICBnY2hhciAqdXJpID0gZ19maWxlbmFt
ZV90b191cmkoZmlsZW5hbWUsIE5VTEwsIE5VTEwpOwotCi0gICAgd2Via2l0X2Rvd25sb2FkX3Nl
dF9kZXN0aW5hdGlvbl91cmkodGhlRG93bmxvYWQsIHVyaSk7Ci0gICAgZ19mcmVlKHVyaSk7Ci0K
LSAgICB3ZWJraXRfZG93bmxvYWRfc3RhcnQodGhlRG93bmxvYWQpOwotICAgIHJldHVybiBGQUxT
RTsKLX0KLQotc3RhdGljIHZvaWQKLWhhbmRsZV9kb3dubG9hZF9yZXF1ZXN0ZWRfY2IoV2ViS2l0
RG93bmxvYWQqIGRvd25sb2FkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVh
biogYmVlblRoZXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiBhc3lu
Y2gpCi17Ci0gICAgdGhlRG93bmxvYWQgPSBkb3dubG9hZDsKLSAgICAqYmVlblRoZXJlID0gVFJV
RTsKLQotICAgIGlmICh0ZW1wb3JhcnlGaWxlbmFtZSkgewotICAgICAgICBpZiAoYXN5bmNoKSB7
Ci0gICAgICAgICAgICBnX2lkbGVfYWRkKChHU291cmNlRnVuYylzZXRfZmlsZW5hbWUsIHRlbXBv
cmFyeUZpbGVuYW1lKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGdjaGFyICp1cmkg
PSBnX2ZpbGVuYW1lX3RvX3VyaSh0ZW1wb3JhcnlGaWxlbmFtZSwgTlVMTCwgTlVMTCk7Ci0gICAg
ICAgICAgICBpZiAodXJpKQotICAgICAgICAgICAgICAgIHdlYmtpdF9kb3dubG9hZF9zZXRfZGVz
dGluYXRpb25fdXJpKGRvd25sb2FkLCB1cmkpOwotICAgICAgICAgICAgZ19mcmVlKHVyaSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KGRvd25sb2FkLCAibm90aWZ5
OjpzdGF0dXMiLAotICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhub3RpZnlfc3RhdHVz
X2NiKSwgTlVMTCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZG93bmxvYWRfcmVxdWVzdGVkX2Ni
KFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LAotICAgICAgICAgICAgICAgICAgICAgIFdlYktpdERv
d25sb2FkKiBkb3dubG9hZCwKLSAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiogYmVlblRo
ZXJlKQotewotICAgIGhhbmRsZV9kb3dubG9hZF9yZXF1ZXN0ZWRfY2IoZG93bmxvYWQsIGJlZW5U
aGVyZSwgRkFMU0UpOwotICAgIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWRv
d25sb2FkX3JlcXVlc3RlZF9hc3luY2hfY2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4qIGJlZW5UaGVyZSkKLXsKLSAgICBoYW5k
bGVfZG93bmxvYWRfcmVxdWVzdGVkX2NiKGRvd25sb2FkLCBiZWVuVGhlcmUsIFRSVUUpOwotICAg
IHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZAotdGVzdF93ZWJraXRfZG93bmxvYWRfcGVy
Zm9ybShnYm9vbGVhbiBhc3luY2gpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdF
QktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIEdDYWxsYmFjayBkb3du
bG9hZFJlcXVlc3RDYWxsYmFjayA9IE5VTEw7Ci0KLSAgICBnX29iamVjdF9yZWZfc2luayhHX09C
SkVDVCh3ZWJWaWV3KSk7Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJuYXZpZ2F0
aW9uLXBvbGljeS1kZWNpc2lvbi1yZXF1ZXN0ZWQiLAotICAgICAgICAgICAgICAgICAgICAgR19D
QUxMQkFDSyhuYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9yZXF1ZXN0ZWRfY2IpLAotICAgICAg
ICAgICAgICAgICAgICAgTlVMTCk7Ci0KLSAgICBpZiAoYXN5bmNoKQotICAgICAgICBkb3dubG9h
ZFJlcXVlc3RDYWxsYmFjayA9IEdfQ0FMTEJBQ0soZG93bmxvYWRfcmVxdWVzdGVkX2FzeW5jaF9j
Yik7Ci0gICAgZWxzZQotICAgICAgICBkb3dubG9hZFJlcXVlc3RDYWxsYmFjayA9IEdfQ0FMTEJB
Q0soZG93bmxvYWRfcmVxdWVzdGVkX2NiKTsKLQotICAgIGdib29sZWFuIGJlZW5UaGVyZSA9IEZB
TFNFOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgImRvd25sb2FkLXJlcXVlc3RlZCIs
Ci0gICAgICAgICAgICAgICAgICAgICBkb3dubG9hZFJlcXVlc3RDYWxsYmFjaywgJmJlZW5UaGVy
ZSk7Ci0KLSAgICAvKiBQcmVwYXJhdGlvbjsgRklYTUU6IHdlIHNob3VsZCBtb3ZlIHRoaXMgY29k
ZSB0byBhIHRlc3QKLSAgICAgKiB1dGlsaXRpZXMgZmlsZSwgYmVjYXVzZSB3ZSBoYXZlIGEgdmVy
eSBzaW1pbGFyIG9uZSBpbgotICAgICAqIHRlc3R3ZWJmcmFtZS5jICovCi0gICAgR0Vycm9yICpl
cnJvciA9IE5VTEw7Ci0gICAgZ2NoYXIqIGZpbGVuYW1lOwotICAgIGludCBmZCA9IGdfZmlsZV9v
cGVuX3RtcCgid2Via2l0LXRlc3R3ZWJkb3dubG9hZC1YWFhYWFgiLCAmZmlsZW5hbWUsICZlcnJv
cik7Ci0gICAgY2xvc2UoZmQpOwotCi0gICAgaWYgKGVycm9yKQotICAgICAgICBnX2NyaXRpY2Fs
KCJGYWlsZWQgdG8gb3BlbiBhIHRlbXBvcmFyeSBmaWxlIGZvciB3cml0aW5nOiAlcy4iLCBlcnJv
ci0+bWVzc2FnZSk7Ci0KLSAgICBpZiAoZ191bmxpbmsoZmlsZW5hbWUpID09IC0xKQotICAgICAg
ICBnX2NyaXRpY2FsKCJGYWlsZWQgdG8gZGVsZXRlIHRoZSB0ZW1wb3JhcnkgZmlsZTogJXMuIiwg
Z19zdHJlcnJvcihlcnJubykpOwotCi0gICAgdGhlRG93bmxvYWQgPSBOVUxMOwotICAgIHRlbXBv
cmFyeUZpbGVuYW1lID0gZmlsZW5hbWU7Ci0KLSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5V
TEwsIFRSVUUpOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh3ZWJWaWV3LCAiaHR0cDov
L2dub21lLm9yZy8iKTsKLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoYmVlblRoZXJlLCA9PSwgVFJVRSk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQoZ19m
aWxlX3Rlc3QodGVtcG9yYXJ5RmlsZW5hbWUsIEdfRklMRV9URVNUX0lTX1JFR1VMQVIpLCA9PSwg
VFJVRSk7Ci0KLSAgICBnX3VubGluayh0ZW1wb3JhcnlGaWxlbmFtZSk7Ci0gICAgZ19mcmVlKHRl
bXBvcmFyeUZpbGVuYW1lKTsKLSAgICB0ZW1wb3JhcnlGaWxlbmFtZSA9IE5VTEw7Ci0KLSAgICBn
X21haW5fbG9vcF91bnJlZihsb29wKTsKLSAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKLX0K
LQotc3RhdGljIHZvaWQKLXRlc3Rfd2Via2l0X2Rvd25sb2FkX3N5bmNoKHZvaWQpCi17Ci0gICAg
dGVzdF93ZWJraXRfZG93bmxvYWRfcGVyZm9ybShGQUxTRSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi10
ZXN0X3dlYmtpdF9kb3dubG9hZF9hc3luY2godm9pZCkKLXsKLSAgICB0ZXN0X3dlYmtpdF9kb3du
bG9hZF9wZXJmb3JtKFRSVUUpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gbWltZV90eXBlX3BvbGlj
eV9kZWNpc2lvbl9yZXF1ZXN0ZWRfY2IoV2ViS2l0V2ViVmlldyogdmlldywgV2ViS2l0V2ViRnJh
bWUqIGZyYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0LCBjb25zdCBjaGFyKiBtaW1l
X3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV2ViS2l0V2ViUG9saWN5RGVjaXNpb24qIGRlY2lzaW9uLCBncG9pbnRlciBkYXRhKQot
ewotICAgIHdlYmtpdF93ZWJfcG9saWN5X2RlY2lzaW9uX2Rvd25sb2FkKGRlY2lzaW9uKTsKLSAg
ICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQgaWRsZV9xdWl0X2xvb3BfY2IoV2ViS2l0
V2ViVmlldyogd2ViX3ZpZXcsIEdQYXJhbVNwZWMqIHBzcGVjLCBncG9pbnRlciBkYXRhKQotewot
ICAgIGlmICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYl92aWV3KSA9PSBXRUJL
SVRfTE9BRF9GSU5JU0hFRCB8fAotICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3Rh
dHVzKHdlYl92aWV3KSA9PSBXRUJLSVRfTE9BRF9GQUlMRUQpCi0gICAgICAgIGdfbWFpbl9sb29w
X3F1aXQobG9vcCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi10ZXN0X3dlYmtpdF9kb3dubG9hZF9kYXRh
KHZvaWQpCi17Ci0gICAgZ2Jvb2xlYW4gYmVlblRoZXJlID0gRkFMU0U7Ci0gICAgV2ViS2l0V2Vi
Vmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwot
ICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh3
ZWJWaWV3LCAiZG93bmxvYWQtcmVxdWVzdGVkIiwKLSAgICAgICAgICAgICAgICAgICAgIEdfQ0FM
TEJBQ0soZG93bmxvYWRfcmVxdWVzdGVkX2NiKSwKLSAgICAgICAgICAgICAgICAgICAgICZiZWVu
VGhlcmUpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0
YXR1cyIsCi0gICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKGlkbGVfcXVpdF9sb29wX2Ni
KSwKLSAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh3
ZWJWaWV3LCAibWltZS10eXBlLXBvbGljeS1kZWNpc2lvbi1yZXF1ZXN0ZWQiLAotICAgICAgICAg
ICAgICAgICAgICAgR19DQUxMQkFDSyhtaW1lX3R5cGVfcG9saWN5X2RlY2lzaW9uX3JlcXVlc3Rl
ZF9jYiksCi0gICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLQotICAgIGxvb3AgPSBnX21haW5f
bG9vcF9uZXcoTlVMTCwgVFJVRSk7Ci0KLSAgICAvKiBXZSdyZSB0ZXN0aW5nIGZvciBhIGNyYXNo
LCBzbyBqdXN0IG5vdCBjcmFzaGluZyBpcyBhIHBhc3MgKi8KLSAgICB3ZWJraXRfd2ViX3ZpZXdf
bG9hZF91cmkod2ViVmlldywgImRhdGE6YXBwbGljYXRpb24vb2N0ZWN0LXN0cmVhbSwiKTsKLSAg
ICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQoYmVlblRoZXJl
LCA9PSwgVFJVRSk7Ci0KLSAgICBnX21haW5fbG9vcF91bnJlZihsb29wKTsKLSAgICBnX29iamVj
dF91bnJlZih3ZWJWaWV3KTsKLX0KLQotc3RhdGljIHZvaWQgbm90aWZ5RG93bmxvYWRTdGF0dXND
YWxsYmFjayhHT2JqZWN0ICpvYmplY3QsIEdQYXJhbVNwZWMgKnBzcGVjLCBncG9pbnRlciBkYXRh
KQotewotICAgIFdlYktpdERvd25sb2FkICpkb3dubG9hZCA9IFdFQktJVF9ET1dOTE9BRChvYmpl
Y3QpOwotICAgIFdlYktpdE5ldHdvcmtSZXNwb25zZSAqcmVzcG9uc2UgPSB3ZWJraXRfZG93bmxv
YWRfZ2V0X25ldHdvcmtfcmVzcG9uc2UoZG93bmxvYWQpOwotICAgIFNvdXBNZXNzYWdlICptZXNz
YWdlID0gd2Via2l0X25ldHdvcmtfcmVzcG9uc2VfZ2V0X21lc3NhZ2UocmVzcG9uc2UpOwotCi0g
ICAgc3dpdGNoICh3ZWJraXRfZG93bmxvYWRfZ2V0X3N0YXR1cyhkb3dubG9hZCkpIHsKLSAgICBj
YXNlIFdFQktJVF9ET1dOTE9BRF9TVEFUVVNfRVJST1I6Ci0gICAgICAgIGdfYXNzZXJ0X2NtcGlu
dChtZXNzYWdlLT5zdGF0dXNfY29kZSwgPT0sIDQwNCk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1
aXQobG9vcCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV0VCS0lUX0RPV05MT0FEX1NUQVRV
U19GSU5JU0hFRDoKLSAgICBjYXNlIFdFQktJVF9ET1dOTE9BRF9TVEFUVVNfQ0FOQ0VMTEVEOgot
ICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAgICAgICBicmVhazsKLSAgICBkZWZh
dWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHNlcnZlckNhbGxi
YWNrKFNvdXBTZXJ2ZXIgKnNlcnZlciwgU291cE1lc3NhZ2UgKm1lc3NhZ2UsIGNvbnN0IGNoYXIg
KnBhdGgsIEdIYXNoVGFibGUgKnF1ZXJ5LCBTb3VwQ2xpZW50Q29udGV4dCAqY29udGV4dCwgZ3Bv
aW50ZXIgdXNlckRhdGEpCi17Ci0gICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01FVEhP
RF9HRVQpIHsKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9T
VEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNv
dXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7Ci0g
ICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7Ci19
Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2Rvd25sb2FkX25vdF9mb3VuZCh2b2lkKQotewot
ICAgIFNvdXBTZXJ2ZXIgKnNlcnZlciA9IHNvdXBfc2VydmVyX25ldyhTT1VQX1NFUlZFUl9QT1JU
LCAwLCBOVUxMKTsKLSAgICBzb3VwX3NlcnZlcl9ydW5fYXN5bmMoc2VydmVyKTsKLSAgICBzb3Vw
X3NlcnZlcl9hZGRfaGFuZGxlcihzZXJ2ZXIsIE5VTEwsIHNlcnZlckNhbGxiYWNrLCBOVUxMLCBO
VUxMKTsKLSAgICBTb3VwVVJJICpiYXNlVVJJID0gc291cF91cmlfbmV3KCJodHRwOi8vMTI3LjAu
MC4xLyIpOwotICAgIHNvdXBfdXJpX3NldF9wb3J0KGJhc2VVUkksIHNvdXBfc2VydmVyX2dldF9w
b3J0KHNlcnZlcikpOwotCi0gICAgU291cFVSSSAqdXJpID0gc291cF91cmlfbmV3X3dpdGhfYmFz
ZShiYXNlVVJJLCAiL2ZvbyIpOwotICAgIGNoYXIgKnVyaVN0cmluZyA9IHNvdXBfdXJpX3RvX3N0
cmluZyh1cmksIEZBTFNFKTsKLSAgICBzb3VwX3VyaV9mcmVlKHVyaSk7Ci0KLSAgICBsb29wID0g
Z19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0ICpy
ZXF1ZXN0ID0gd2Via2l0X25ldHdvcmtfcmVxdWVzdF9uZXcodXJpU3RyaW5nKTsKLSAgICBnX2Zy
ZWUgKHVyaVN0cmluZyk7Ci0gICAgV2ViS2l0RG93bmxvYWQgKmRvd25sb2FkID0gd2Via2l0X2Rv
d25sb2FkX25ldyhyZXF1ZXN0KTsKLSAgICBnX29iamVjdF91bnJlZihyZXF1ZXN0KTsKLQotICAg
IHdlYmtpdF9kb3dubG9hZF9zZXRfZGVzdGluYXRpb25fdXJpKGRvd25sb2FkLCAiZmlsZTovLy90
bXAvZm9vIik7Ci0gICAgZ19zaWduYWxfY29ubmVjdChkb3dubG9hZCwgIm5vdGlmeTo6c3RhdHVz
IiwgR19DQUxMQkFDSyhub3RpZnlEb3dubG9hZFN0YXR1c0NhbGxiYWNrKSwgTlVMTCk7Ci0KLSAg
ICB3ZWJraXRfZG93bmxvYWRfc3RhcnQoZG93bmxvYWQpOwotICAgIGdfbWFpbl9sb29wX3J1bihs
b29wKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGRvd25sb2FkKTsKLSAgICBnX21haW5fbG9vcF91
bnJlZihsb29wKTsKLSAgICBzb3VwX3VyaV9mcmVlKGJhc2VVUkkpOwotICAgIGdfb2JqZWN0X3Vu
cmVmKHNlcnZlcik7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKLXsKLSAg
ICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAgICBnX3Rlc3RfYnVnX2Jh
c2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dl
YmtpdC9kb3dubG9hZC9jcmVhdGUiLCB0ZXN0X3dlYmtpdF9kb3dubG9hZF9jcmVhdGUpOwotICAg
IGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9kb3dubG9hZC9zeW5jaCIsIHRlc3Rfd2Via2l0X2Rv
d25sb2FkX3N5bmNoKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvZG93bmxvYWQvYXN5
bmNoIiwgdGVzdF93ZWJraXRfZG93bmxvYWRfYXN5bmNoKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMo
Ii93ZWJraXQvZG93bmxvYWQvZGF0YSIsIHRlc3Rfd2Via2l0X2Rvd25sb2FkX2RhdGEpOwotICAg
IGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9kb3dubG9hZC9ub3QtZm91bmQiLCB0ZXN0X3dlYmtp
dF9kb3dubG9hZF9ub3RfZm91bmQpOwotICAgIHJldHVybiBnX3Rlc3RfcnVuICgpOwotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGZhdmljb25kYXRhYmFzZS5jIGIv
U291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGZhdmljb25kYXRhYmFzZS5jCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAyYmM2MDZhLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQv
Z3RrL3Rlc3RzL3Rlc3RmYXZpY29uZGF0YWJhc2UuYworKysgL2Rldi9udWxsCkBAIC0xLDI3NiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJ0ZXN0X3V0aWxzLmgiCi0jaW5jbHVkZSA8Z2xpYi9nc3RkaW8u
aD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8
d2Via2l0L3dlYmtpdC5oPgotCi1jb25zdCBpbnQgZ0ljb25TaXplID0gMTY7Ci0KLUdNYWluTG9v
cCAqbG9vcDsKLWNoYXIgKmJhc2VVUkk7Ci0KLXN0YXRpYyB2b2lkCi1zZXJ2ZXJDYWxsYmFjayhT
b3VwU2VydmVyICpzZXJ2ZXIsIFNvdXBNZXNzYWdlICptZXNzYWdlLCBjb25zdCBjaGFyICpwYXRo
LCBHSGFzaFRhYmxlICpxdWVyeSwgU291cENsaWVudENvbnRleHQgKmNvbnRleHQsIHZvaWQgKmRh
dGEpCi17Ci0gICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKLSAg
ICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0lN
UExFTUVOVEVEKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNvdXBfbWVzc2FnZV9z
ZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKLQotICAgIGNoYXIgKmNvbnRlbnRz
OwotICAgIGdzaXplIGxlbmd0aDsKLSAgICBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9mYXZpY29u
LmljbyIpKSB7Ci0gICAgICAgIEdFcnJvciAqZXJyb3IgPSBOVUxMOwotCi0gICAgICAgIGdfZmls
ZV9nZXRfY29udGVudHMoImJsYW5rLmljbyIsICZjb250ZW50cywgJmxlbmd0aCwgJmVycm9yKTsK
LSAgICAgICAgZ19hc3NlcnQoIWVycm9yKTsKLSAgICB9IGVsc2UgewotICAgICAgICBjb250ZW50
cyA9IGdfc3RyZHVwKCI8aHRtbD48Ym9keT50ZXN0PC9ib2R5PjwvaHRtbD4iKTsKLSAgICAgICAg
bGVuZ3RoID0gc3RybGVuKGNvbnRlbnRzKTsKLSAgICB9Ci0KLSAgICBzb3VwX21lc3NhZ2VfYm9k
eV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgY29udGVu
dHMsIGxlbmd0aCk7Ci0gICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVz
cG9uc2VfYm9keSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRlbGV0ZURhdGFiYXNlRmlsZUlmRXhpc3Rz
KGNvbnN0IGNoYXIgKmRhdGFiYXNlUGF0aCkKLXsKLSAgICBpZiAoIWdfZmlsZV90ZXN0KGRhdGFi
YXNlUGF0aCwgR19GSUxFX1RFU1RfSVNfRElSKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2hh
ciAqZGF0YWJhc2VGaWxlbmFtZSA9IGdfYnVpbGRfZmlsZW5hbWUoZGF0YWJhc2VQYXRoLCAiV2Vi
cGFnZUljb25zLmRiIiwgTlVMTCk7Ci0gICAgaWYgKGdfdW5saW5rKGRhdGFiYXNlRmlsZW5hbWUp
ID09IC0xKSB7Ci0gICAgICAgIGdfZnJlZShkYXRhYmFzZUZpbGVuYW1lKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGdfZnJlZShkYXRhYmFzZUZpbGVuYW1lKTsKLSAgICBnX3JtZGly
KGRhdGFiYXNlUGF0aCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJLaXRGYXZpY29uRGF0YWJh
c2VTZXRQYXRoKCkKLXsKLSAgICBjaGFyICpkYXRhYmFzZVBhdGggPSBnX2J1aWxkX2ZpbGVuYW1l
KGdfZ2V0X3RtcF9kaXIoKSwgIndlYmtpdC10ZXN0ZmF2aWNvbmRhdGFiYXNlIiwgTlVMTCk7Ci0g
ICAgZGVsZXRlRGF0YWJhc2VGaWxlSWZFeGlzdHMoZGF0YWJhc2VQYXRoKTsKLQotICAgIFdlYktp
dEZhdmljb25EYXRhYmFzZSAqZGF0YWJhc2UgPSB3ZWJraXRfZ2V0X2Zhdmljb25fZGF0YWJhc2Uo
KTsKLSAgICB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9zZXRfcGF0aChkYXRhYmFzZSwgZGF0YWJh
c2VQYXRoKTsKLQotICAgIGdfYXNzZXJ0X2NtcHN0cihkYXRhYmFzZVBhdGgsID09LCB3ZWJraXRf
ZmF2aWNvbl9kYXRhYmFzZV9nZXRfcGF0aChkYXRhYmFzZSkpOwotCi0gICAgZ19mcmVlKGRhdGFi
YXNlUGF0aCk7Ci19Ci0KLS8vIFNlZSB0aGUgY29tbWVudCBpbiBtYWluKCkgZnVuY3Rpb24gdGhh
dCBnb2VzIHdpdGggdGhpcyBzYW1lIGd1YXJkLgotI2lmZGVmIE5ERUJVRwotCi1zdGF0aWMgdm9p
ZCBmYXZpY29uRGF0YWJhc2VHZXRWYWxpZEZhdmljb25DYWxsYmFjayhHT2JqZWN0ICpzb3VyY2VP
YmplY3QsIEdBc3luY1Jlc3VsdCAqcmVzdWx0LCB2b2lkICp1c2VyRGF0YSkKLXsKLSAgICBnYm9v
bGVhbiAqYmVlbkhlcmUgPSAoZ2Jvb2xlYW4qKXVzZXJEYXRhOwotICAgIEdFcnJvciAqZXJyb3Ig
PSBOVUxMOwotICAgIEdka1BpeGJ1ZiAqaWNvbiA9IHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dl
dF9mYXZpY29uX3BpeGJ1Zl9maW5pc2goV0VCS0lUX0ZBVklDT05fREFUQUJBU0Uoc291cmNlT2Jq
ZWN0KSwgcmVzdWx0LCAmZXJyb3IpOwotICAgIGdfYXNzZXJ0KGljb24pOwotICAgIGdfb2JqZWN0
X3VucmVmKGljb24pOwotCi0gICAgKmJlZW5IZXJlID0gVFJVRTsKLQotICAgIGdfbWFpbl9sb29w
X3F1aXQobG9vcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGZhdmljb25EYXRhYmFzZUdldEludmFsaWRG
YXZpY29uQ2FsbGJhY2soR09iamVjdCAqc291cmNlT2JqZWN0LCBHQXN5bmNSZXN1bHQgKnJlc3Vs
dCwgdm9pZCAqdXNlckRhdGEpCi17Ci0gICAgZ2Jvb2xlYW4gKmJlZW5IZXJlID0gKGdib29sZWFu
Kil1c2VyRGF0YTsKLSAgICBHRXJyb3IgKmVycm9yID0gTlVMTDsKLSAgICBHZGtQaXhidWYgKmlj
b24gPSB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl9waXhidWZfZmluaXNoKFdF
QktJVF9GQVZJQ09OX0RBVEFCQVNFKHNvdXJjZU9iamVjdCksIHJlc3VsdCwgJmVycm9yKTsKLSAg
ICBnX2Fzc2VydCghaWNvbik7Ci0KLSAgICAqYmVlbkhlcmUgPSBUUlVFOwotCi0gICAgZ19tYWlu
X2xvb3BfcXVpdChsb29wKTsKLX0KLQotc3RhdGljIHZvaWQgZmF2aWNvbkRhdGFiYXNlR2V0RmF2
aWNvbkNhbmNlbGxlZENhbGxiYWNrKEdPYmplY3QgKnNvdXJjZU9iamVjdCwgR0FzeW5jUmVzdWx0
ICpyZXN1bHQsIHZvaWQgKnVzZXJEYXRhKQotewotICAgIGdib29sZWFuICpiZWVuSGVyZSA9IChn
Ym9vbGVhbiopdXNlckRhdGE7Ci0gICAgR0Vycm9yICplcnJvciA9IE5VTEw7Ci0gICAgR2RrUGl4
YnVmICppY29uID0gd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fcGl4YnVmX2Zp
bmlzaChXRUJLSVRfRkFWSUNPTl9EQVRBQkFTRShzb3VyY2VPYmplY3QpLCByZXN1bHQsICZlcnJv
cik7Ci0gICAgZ19hc3NlcnQoIWljb24pOwotICAgIGdfYXNzZXJ0KGVycm9yICYmIGdfZXJyb3Jf
bWF0Y2hlcyhlcnJvciwgR19JT19FUlJPUiwgR19JT19FUlJPUl9DQU5DRUxMRUQpKTsKLQotICAg
ICpiZWVuSGVyZSA9IFRSVUU7Ci0KLSAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwotfQotCi1z
dGF0aWMgaW5saW5lIHZvaWQgcXVpdE1haW5Mb29wSWZMb2FkQ29tcGxldGVkKGdib29sZWFuICpp
Y29uT3JQYWdlTG9hZGVkKQotewotICAgIGlmICgqaWNvbk9yUGFnZUxvYWRlZCkKLSAgICAgICAg
Z19tYWluX2xvb3BfcXVpdChsb29wKTsKLSAgICBlbHNlCi0gICAgICAgICppY29uT3JQYWdlTG9h
ZGVkID0gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQgaWRsZVF1aXRMb29wQ2FsbGJhY2soV2ViS2l0
V2ViVmlldyAqd2ViVmlldywgR1BhcmFtU3BlYyAqcGFyYW1TcGVjLCBnYm9vbGVhbiAqaWNvbk9y
UGFnZUxvYWRlZCkKLXsKLSAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJf
dmlld19nZXRfbG9hZF9zdGF0dXMod2ViVmlldyk7Ci0KLSAgICBpZiAoc3RhdHVzID09IFdFQktJ
VF9MT0FEX0ZJTklTSEVEIHx8IHN0YXR1cyA9PSBXRUJLSVRfTE9BRF9GQUlMRUQpCi0gICAgICAg
IHF1aXRNYWluTG9vcElmTG9hZENvbXBsZXRlZChpY29uT3JQYWdlTG9hZGVkKTsKLX0KLQotc3Rh
dGljIHZvaWQgd2Via2l0V2ViVmlld0ljb25Mb2FkZWQoV2ViS2l0RmF2aWNvbkRhdGFiYXNlICpk
YXRhYmFzZSwgY29uc3QgY2hhciAqZnJhbWVVUkksIGdib29sZWFuICppY29uT3JQYWdlTG9hZGVk
KQotewotICAgIHF1aXRNYWluTG9vcElmTG9hZENvbXBsZXRlZChpY29uT3JQYWdlTG9hZGVkKTsK
LX0KLQotc3RhdGljIHZvaWQgbG9hZFVSSShjb25zdCBjaGFyICp1cmkpCi17Ci0gICAgV2ViS2l0
V2ViVmlldyAqdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwot
ICAgIGdib29sZWFuIGljb25PclBhZ2VMb2FkZWQgPSBGQUxTRTsKLQotICAgIHdlYmtpdF93ZWJf
dmlld19sb2FkX3VyaSh2aWV3LCB1cmkpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh2aWV3LCAi
bm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0soaWRsZVF1aXRMb29wQ2FsbGJhY2spLCAm
aWNvbk9yUGFnZUxvYWRlZCk7Ci0gICAgZ19zaWduYWxfY29ubmVjdCh2aWV3LCAiaWNvbi1sb2Fk
ZWQiLCBHX0NBTExCQUNLKHdlYmtpdFdlYlZpZXdJY29uTG9hZGVkKSwgJmljb25PclBhZ2VMb2Fk
ZWQpOwotCi0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAgZ19zaWduYWxfaGFuZGxl
cnNfZGlzY29ubmVjdF9tYXRjaGVkKHZpZXcsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAs
IDAsICZpY29uT3JQYWdlTG9hZGVkKTsKLX0KLQotc3RhdGljIGdib29sZWFuIGZhdmljb25EYXRh
YmFzZUdldFZhbGlkRmF2aWNvbklkbGUodm9pZCAqdXNlckRhdGEpCi17Ci0gICAgd2Via2l0X2Zh
dmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fcGl4YnVmKHdlYmtpdF9nZXRfZmF2aWNvbl9kYXRh
YmFzZSgpLCBiYXNlVVJJLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnSWNvblNpemUsIGdJY29uU2l6ZSwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmF2aWNvbkRhdGFiYXNlR2V0VmFsaWRGYXZpY29u
Q2FsbGJhY2ssIHVzZXJEYXRhKTsKLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBnYm9v
bGVhbiBmYXZpY29uRGF0YWJhc2VHZXRJbnZhbGlkRmF2aWNvbklkbGUodm9pZCAqdXNlckRhdGEp
Ci17Ci0gICAgd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fcGl4YnVmKHdlYmtp
dF9nZXRfZmF2aWNvbl9kYXRhYmFzZSgpLCAiaHR0cDovL3d3dy53ZWJraXRndGsub3JnLyIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdJY29uU2l6ZSwg
Z0ljb25TaXplLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmYXZpY29uRGF0YWJhc2VHZXRJbnZhbGlkRmF2aWNvbkNhbGxiYWNrLCB1c2VyRGF0
YSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gZmF2aWNvbkRhdGFi
YXNlR2V0RmF2aWNvbkNhbmNlbGxlZElkbGUodm9pZCAqdXNlckRhdGEpCi17Ci0gICAgR0NhbmNl
bGxhYmxlICpjYW5jZWxsYWJsZSA9IGdfY2FuY2VsbGFibGVfbmV3KCk7Ci0gICAgd2Via2l0X2Zh
dmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fcGl4YnVmKHdlYmtpdF9nZXRfZmF2aWNvbl9kYXRh
YmFzZSgpLCBiYXNlVVJJLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnSWNvblNpemUsIGdJY29uU2l6ZSwgY2FuY2VsbGFibGUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhdmljb25EYXRhYmFzZUdldEZhdmlj
b25DYW5jZWxsZWRDYWxsYmFjaywgdXNlckRhdGEpOwotICAgIGdfY2FuY2VsbGFibGVfY2FuY2Vs
KGNhbmNlbGxhYmxlKTsKLSAgICBnX29iamVjdF91bnJlZihjYW5jZWxsYWJsZSk7Ci0gICAgcmV0
dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlR2V0
RmF2aWNvbigpCi17Ci0gICAgZ2Jvb2xlYW4gYmVlblRvSWNvbkNhbGxiYWNrOwotCi0gICAgbG9v
cCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLQotICAgIC8qIExvYWQgdXJpIHRvIG1h
a2Ugc3VyZSBmYXZpY29uIGlzIGFkZGVkIHRvIGRhdGFiYXNlLiAqLwotICAgIGxvYWRVUkkoYmFz
ZVVSSSk7Ci0KLSAgICBiZWVuVG9JY29uQ2FsbGJhY2sgPSBGQUxTRTsKLSAgICBnX2lkbGVfYWRk
KChHU291cmNlRnVuYylmYXZpY29uRGF0YWJhc2VHZXRWYWxpZEZhdmljb25JZGxlLCAmYmVlblRv
SWNvbkNhbGxiYWNrKTsKLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0gICAgZ19hc3NlcnQo
YmVlblRvSWNvbkNhbGxiYWNrKTsKLQotICAgIGJlZW5Ub0ljb25DYWxsYmFjayA9IEZBTFNFOwot
ICAgIGdfaWRsZV9hZGQoKEdTb3VyY2VGdW5jKWZhdmljb25EYXRhYmFzZUdldEludmFsaWRGYXZp
Y29uSWRsZSwgJmJlZW5Ub0ljb25DYWxsYmFjayk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3Ap
OwotICAgIGdfYXNzZXJ0KGJlZW5Ub0ljb25DYWxsYmFjayk7Ci0KLSAgICBiZWVuVG9JY29uQ2Fs
bGJhY2sgPSBGQUxTRTsKLSAgICBnX2lkbGVfYWRkKChHU291cmNlRnVuYylmYXZpY29uRGF0YWJh
c2VHZXRGYXZpY29uQ2FuY2VsbGVkSWRsZSwgJmJlZW5Ub0ljb25DYWxsYmFjayk7Ci0gICAgZ19t
YWluX2xvb3BfcnVuKGxvb3ApOwotICAgIGdfYXNzZXJ0KGJlZW5Ub0ljb25DYWxsYmFjayk7Ci19
Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VHZXRGYXZpY29uVVJJKCkK
LXsKLSAgICBjaGFyICppY29uVVJJID0gd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmlj
b25fdXJpKHdlYmtpdF9nZXRfZmF2aWNvbl9kYXRhYmFzZSgpLCBiYXNlVVJJKTsKLSAgICBjaGFy
ICpleHBlY3RlZFVSSSA9IGdfc3RyZHVwX3ByaW50ZigiJXNmYXZpY29uLmljbyIsIGJhc2VVUkkp
OwotICAgIGdfYXNzZXJ0X2NtcHN0cihpY29uVVJJLCA9PSwgZXhwZWN0ZWRVUkkpOwotICAgIGdf
ZnJlZShleHBlY3RlZFVSSSk7Ci0gICAgZ19mcmVlKGljb25VUkkpOwotfQotCi0jZW5kaWYKLQot
c3RhdGljIHZvaWQgdGVzdFdlYktpdEZhdmljb25EYXRhYmFzZVJlbW92ZUFsbCh2b2lkKQotewot
ICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSAqZGF0YWJhc2UgPSB3ZWJraXRfZ2V0X2Zhdmljb25f
ZGF0YWJhc2UoKTsKLSAgICB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9jbGVhcihkYXRhYmFzZSk7
Ci0gICAgY2hhciAqaWNvblVSSSA9IHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29u
X3VyaShkYXRhYmFzZSwgYmFzZVVSSSk7Ci0gICAgZ19hc3NlcnQoIWljb25VUkkpOwotICAgIGdf
ZnJlZShpY29uVVJJKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYktpdEZhdmljb25EYXRhYmFz
ZUNsb3NlRGF0YWJhc2Uodm9pZCkKLXsKLSAgICBXZWJLaXRGYXZpY29uRGF0YWJhc2UgKmRhdGFi
YXNlID0gd2Via2l0X2dldF9mYXZpY29uX2RhdGFiYXNlKCk7Ci0gICAgY2hhciAqZGF0YWJhc2VQ
YXRoID0gZ19zdHJkdXAod2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X3BhdGgoZGF0YWJhc2Up
KTsKLSAgICB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9zZXRfcGF0aChkYXRhYmFzZSwgMCk7Ci0g
ICAgZGVsZXRlRGF0YWJhc2VGaWxlSWZFeGlzdHMoZGF0YWJhc2VQYXRoKTsKLSAgICBnX2ZyZWUo
ZGF0YWJhc2VQYXRoKTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewot
ICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLQotICAgIC8qIFRoaXMgaG9w
ZWZ1bGx5IG1ha2VzIHRoZSB0ZXN0IGluZGVwZW5kZW50IG9mIHRoZSBwYXRoIGl0J3MgY2FsbGVk
IGZyb20uICovCi0gICAgdGVzdHV0aWxzX3JlbGF0aXZlX2NoZGlyKCJTb3VyY2UvV2ViS2l0L2d0
ay90ZXN0cy9yZXNvdXJjZXMvdGVzdC5odG1sIiwgYXJndlswXSk7Ci0KLSAgICBTb3VwU2VydmVy
ICpzZXJ2ZXIgPSBzb3VwX3NlcnZlcl9uZXcoU09VUF9TRVJWRVJfUE9SVCwgMCwgTlVMTCk7Ci0g
ICAgc291cF9zZXJ2ZXJfcnVuX2FzeW5jKHNlcnZlcik7Ci0KLSAgICBzb3VwX3NlcnZlcl9hZGRf
aGFuZGxlcihzZXJ2ZXIsIE5VTEwsIHNlcnZlckNhbGxiYWNrLCBOVUxMLCBOVUxMKTsKLQotICAg
IFNvdXBVUkkgKnNvdXBVUkkgPSBzb3VwX3VyaV9uZXcoImh0dHA6Ly8xMjcuMC4wLjEvIik7Ci0g
ICAgc291cF91cmlfc2V0X3BvcnQoc291cFVSSSwgc291cF9zZXJ2ZXJfZ2V0X3BvcnQoc2VydmVy
KSk7Ci0KLSAgICBiYXNlVVJJID0gc291cF91cmlfdG9fc3RyaW5nKHNvdXBVUkksIEZBTFNFKTsK
LSAgICBzb3VwX3VyaV9mcmVlKHNvdXBVUkkpOwotCi0gICAgZ190ZXN0X2J1Z19iYXNlKCJodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvZmF2
aWNvbmRhdGFiYXNlL3NldC1wYXRoIiwgdGVzdFdlYktpdEZhdmljb25EYXRhYmFzZVNldFBhdGgp
OwotCi0gICAgLy8gVGhlc2UgdHdvIHRlc3RzIHdpbGwgdHJpZ2dlciBhbiBBU1NFUlRJT04gb24g
ZGVidWcgYnVpbGRzIGR1ZQotICAgIC8vIHRvIGh0dHA6Ly93ZWJraXQub3JnL2IvNjc1ODIuIFJl
bW92ZSB0aGUgZ3VhcmRzIG9uY2UgdGhlIGJ1ZyBpcyBmaXhlZC4KLSNpZmRlZiBOREVCVUcKLSAg
ICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvZmF2aWNvbmRhdGFiYXNlL2dldC1mYXZpY29uIiwg
dGVzdFdlYktpdEZhdmljb25EYXRhYmFzZUdldEZhdmljb24pOwotICAgIGdfdGVzdF9hZGRfZnVu
YygiL3dlYmtpdC9mYXZpY29uZGF0YWJhc2UvZ2V0LWZhdmljb24tdXJpIiwgdGVzdFdlYktpdEZh
dmljb25EYXRhYmFzZUdldEZhdmljb25VUkkpOwotI2VuZGlmCi0KLSAgICBnX3Rlc3RfYWRkX2Z1
bmMoIi93ZWJraXQvZmF2aWNvbmRhdGFiYXNlL3JlbW92ZS1hbGwiLCB0ZXN0V2ViS2l0RmF2aWNv
bkRhdGFiYXNlUmVtb3ZlQWxsKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvZmF2aWNv
bmRhdGFiYXNlL2Nsb3NlLWRiIiwgdGVzdFdlYktpdEZhdmljb25EYXRhYmFzZUNsb3NlRGF0YWJh
c2UpOwotCi0gICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RnbG9iYWxzLmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90
ZXN0Z2xvYmFscy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjllYzRmLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RnbG9iYWxzLmMKKysrIC9kZXYv
bnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBDb2xsYWJv
cmEgTHRkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1
ZGUgPGxpYnNvdXAvc291cC5oPgotI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KLQotLy8gTWFr
ZSBzdXJlIHRoZSBzZXNzaW9uIGlzIGluaXRpYWxpemVkIHByb3Blcmx5IHdoZW4gd2Via2l0X2dl
dF9kZWZhdWx0X3Nlc3Npb24oKSBpcyBjYWxsZWQuCi1zdGF0aWMgdm9pZCB0ZXN0X2dsb2JhbHNf
ZGVmYXVsdF9zZXNzaW9uKCkKLXsKLSAgICBnX3Rlc3RfYnVnKCIzNjc1NCIpOwotCi0gICAgU291
cFNlc3Npb24qIHNlc3Npb24gPSB3ZWJraXRfZ2V0X2RlZmF1bHRfc2Vzc2lvbigpOwotICAgIHNv
dXBfc2Vzc2lvbl9yZW1vdmVfZmVhdHVyZV9ieV90eXBlKHNlc3Npb24sIFdFQktJVF9UWVBFX1NP
VVBfQVVUSF9ESUFMT0cpOwotCi0gICAgLy8gVGhpcyBtYWtlcyBzdXJlIG91ciBpbml0aWFsaXph
dGlvbiByYW4uCi0gICAgZ19hc3NlcnQoc291cF9zZXNzaW9uX2dldF9mZWF0dXJlKHNlc3Npb24s
IFNPVVBfVFlQRV9DT05URU5UX0RFQ09ERVIpICE9IE5VTEwpOwotCi0gICAgLy8gQ3JlYXRpbmcg
YSBXZWJWaWV3IHNob3VsZCBtYWtlIHN1cmUgdGhlIHNlc3Npb24gaXMKLSAgICAvLyBpbml0aWFs
aXplZCwgYW5kIG5vdCBtZXNzIHdpdGggb3VyIGNoYW5nZXMuCi0gICAgV2ViS2l0V2ViVmlldyog
d2ViX3ZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBn
X29iamVjdF9yZWZfc2luayh3ZWJfdmlldyk7Ci0gICAgZ19vYmplY3RfdW5yZWYod2ViX3ZpZXcp
OwotCi0gICAgLy8gVGhlc2UgbWFrZXMgc3VyZSBvdXIgbW9kaWZpY2F0aW9uIHdhcyBrZXB0Lgot
ICAgIGdfYXNzZXJ0KHNvdXBfc2Vzc2lvbl9nZXRfZmVhdHVyZShzZXNzaW9uLCBTT1VQX1RZUEVf
Q09OVEVOVF9ERUNPREVSKSAhPSBOVUxMKTsKLSAgICBnX2Fzc2VydChzb3VwX3Nlc3Npb25fZ2V0
X2ZlYXR1cmUoc2Vzc2lvbiwgV0VCS0lUX1RZUEVfU09VUF9BVVRIX0RJQUxPRykgPT0gTlVMTCk7
Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RfZ2xvYmFsc19zZWN1cml0eV9wb2xpY3koKQotewotICAg
IC8vIENoZWNrIGRlZmF1bHQgcG9saWN5IGZvciB3ZWxsIGtub3duIHNjaGVtZXMuCi0gICAgV2Vi
S2l0U2VjdXJpdHlQb2xpY3kgcG9saWN5ID0gd2Via2l0X2dldF9zZWN1cml0eV9wb2xpY3lfZm9y
X3VyaV9zY2hlbWUoImh0dHAiKTsKLSAgICBndWludCBtYXNrID0gV0VCS0lUX1NFQ1VSSVRZX1BP
TElDWV9DT1JTX0VOQUJMRUQ7Ci0gICAgZ19hc3NlcnRfY21wdWludChwb2xpY3kgJiBtYXNrLCA9
PSwgbWFzayk7Ci0KLSAgICBwb2xpY3kgPSB3ZWJraXRfZ2V0X3NlY3VyaXR5X3BvbGljeV9mb3Jf
dXJpX3NjaGVtZSgiaHR0cHMiKTsKLSAgICBtYXNrID0gV0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9T
RUNVUkUgfCBXRUJLSVRfU0VDVVJJVFlfUE9MSUNZX0NPUlNfRU5BQkxFRDsKLSAgICBnX2Fzc2Vy
dF9jbXB1aW50KHBvbGljeSAmIG1hc2ssID09LCBtYXNrKTsKLQotICAgIHBvbGljeSA9IHdlYmtp
dF9nZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJmaWxlIik7Ci0gICAgbWFzayA9
IFdFQktJVF9TRUNVUklUWV9QT0xJQ1lfTE9DQUw7Ci0gICAgZ19hc3NlcnRfY21wdWludChwb2xp
Y3kgJiBtYXNrLCA9PSwgbWFzayk7Ci0KLSAgICBwb2xpY3kgPSB3ZWJraXRfZ2V0X3NlY3VyaXR5
X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiZGF0YSIpOwotICAgIG1hc2sgPSBXRUJLSVRfU0VDVVJJ
VFlfUE9MSUNZX05PX0FDQ0VTU19UT19PVEhFUl9TQ0hFTUUgfCBXRUJLSVRfU0VDVVJJVFlfUE9M
SUNZX1NFQ1VSRTsKLSAgICBnX2Fzc2VydF9jbXB1aW50KHBvbGljeSAmIG1hc2ssID09LCBtYXNr
KTsKLQotICAgIHBvbGljeSA9IHdlYmtpdF9nZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2No
ZW1lKCJhYm91dCIpOwotICAgIG1hc2sgPSBXRUJLSVRfU0VDVVJJVFlfUE9MSUNZX05PX0FDQ0VT
U19UT19PVEhFUl9TQ0hFTUUgfCBXRUJLSVRfU0VDVVJJVFlfUE9MSUNZX1NFQ1VSRSB8IFdFQktJ
VF9TRUNVUklUWV9QT0xJQ1lfRU1QVFlfRE9DVU1FTlQ7Ci0gICAgZ19hc3NlcnRfY21wdWludChw
b2xpY3kgJiBtYXNrLCA9PSwgbWFzayk7Ci0KLSAgICAvLyBDdXN0b20gc2NoZW1lLgotICAgIHBv
bGljeSA9IHdlYmtpdF9nZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJmb28iKTsK
LSAgICBnX2Fzc2VydCghcG9saWN5KTsKLQotICAgIHBvbGljeSB8PSBXRUJLSVRfU0VDVVJJVFlf
UE9MSUNZX0xPQ0FMOwotICAgIHdlYmtpdF9zZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2No
ZW1lKCJmb28iLCBwb2xpY3kpOwotICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2dldF9zZWN1
cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUoImZvbyIpLCA9PSwgcG9saWN5KTsKLQotICAgIHBv
bGljeSB8PSBXRUJLSVRfU0VDVVJJVFlfUE9MSUNZX05PX0FDQ0VTU19UT19PVEhFUl9TQ0hFTUU7
Ci0gICAgd2Via2l0X3NldF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUoImZvbyIsIHBv
bGljeSk7Ci0gICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfZ2V0X3NlY3VyaXR5X3BvbGljeV9m
b3JfdXJpX3NjaGVtZSgiZm9vIiksID09LCBwb2xpY3kpOwotCi0gICAgcG9saWN5IHw9IFdFQktJ
VF9TRUNVUklUWV9QT0xJQ1lfRElTUExBWV9JU09MQVRFRDsKLSAgICB3ZWJraXRfc2V0X3NlY3Vy
aXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiZm9vIiwgcG9saWN5KTsKLSAgICBnX2Fzc2VydF9j
bXB1aW50KHdlYmtpdF9nZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJmb28iKSwg
PT0sIHBvbGljeSk7Ci0KLSAgICBwb2xpY3kgfD0gV0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9TRUNV
UkU7Ci0gICAgd2Via2l0X3NldF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUoImZvbyIs
IHBvbGljeSk7Ci0gICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfZ2V0X3NlY3VyaXR5X3BvbGlj
eV9mb3JfdXJpX3NjaGVtZSgiZm9vIiksID09LCBwb2xpY3kpOwotCi0gICAgcG9saWN5IHw9IFdF
QktJVF9TRUNVUklUWV9QT0xJQ1lfQ09SU19FTkFCTEVEOwotICAgIHdlYmtpdF9zZXRfc2VjdXJp
dHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJmb28iLCBwb2xpY3kpOwotICAgIGdfYXNzZXJ0X2Nt
cHVpbnQod2Via2l0X2dldF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUoImZvbyIpLCA9
PSwgcG9saWN5KTsKLQotICAgIHBvbGljeSB8PSBXRUJLSVRfU0VDVVJJVFlfUE9MSUNZX0VNUFRZ
X0RPQ1VNRU5UOwotICAgIHdlYmtpdF9zZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1l
KCJmb28iLCBwb2xpY3kpOwotICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2dldF9zZWN1cml0
eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUoImZvbyIpLCA9PSwgcG9saWN5KTsKLX0KLQotaW50IG1h
aW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotewotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZh
cmd2LCBOVUxMKTsKLQotICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvIik7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2dsb2JhbHMvZGVmYXVsdF9zZXNz
aW9uIiwKLSAgICAgICAgICAgICAgICAgICAgdGVzdF9nbG9iYWxzX2RlZmF1bHRfc2Vzc2lvbik7
Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2dsb2JhbHMvc2VjdXJpdHktcG9saWN5IiwK
LSAgICAgICAgICAgICAgICAgICAgdGVzdF9nbG9iYWxzX3NlY3VyaXR5X3BvbGljeSk7Ci0gICAg
cmV0dXJuIGdfdGVzdF9ydW4oKTsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsv
dGVzdHMvdGVzdGhpdHRlc3RyZXN1bHQuYyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Ro
aXR0ZXN0cmVzdWx0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiZjAxMTAuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGhpdHRlc3RyZXN1bHQuYwor
KysgL2Rldi9udWxsCkBAIC0xLDE2OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5
IElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIsMSBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNp
bmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgotI2luY2x1ZGUgPHdl
YmtpdC93ZWJraXQuaD4KLQotdHlwZWRlZiBzdHJ1Y3QgewotICBjaGFyKiBkYXRhOwotICBndWlu
dCBmbGFnOwotfSBUZXN0SW5mbzsKLQotc3RhdGljIEdNYWluTG9vcCogbG9vcDsKLQotdHlwZWRl
ZiBzdHJ1Y3QgewotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXc7Ci0gICAgVGVzdEluZm8qIGlu
Zm87Ci19IEhpdFRlc3RSZXN1bHRGaXh0dXJlOwotCi1UZXN0SW5mbyoKLXRlc3RfaW5mb19uZXco
Y29uc3QgY2hhciogZGF0YSwgZ3VpbnQgZmxhZykKLXsKLSAgICBUZXN0SW5mbyogaW5mbzsKLQot
ICAgIGluZm8gPSBnX3NsaWNlX25ldyhUZXN0SW5mbyk7Ci0gICAgaW5mby0+ZGF0YSA9IGdfc3Ry
ZHVwKGRhdGEpOwotICAgIGluZm8tPmZsYWcgPSBmbGFnOwotCi0gICAgcmV0dXJuIGluZm87Ci19
Ci0KLXZvaWQKLXRlc3RfaW5mb19kZXN0cm95KFRlc3RJbmZvKiBpbmZvKQotewotICAgIGdfZnJl
ZShpbmZvLT5kYXRhKTsKLSAgICBnX3NsaWNlX2ZyZWUoVGVzdEluZm8sIGluZm8pOwotfQotCi1z
dGF0aWMgdm9pZCBoaXRfdGVzdF9yZXN1bHRfZml4dHVyZV9zZXR1cChIaXRUZXN0UmVzdWx0Rml4
dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGZpeHR1cmUtPndlYlZp
ZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBnX29iamVj
dF9yZWZfc2luayhmaXh0dXJlLT53ZWJWaWV3KTsKLSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3
KE5VTEwsIFRSVUUpOwotICAgIGZpeHR1cmUtPmluZm8gPSAoVGVzdEluZm8qKWRhdGE7Ci19Ci0K
LXN0YXRpYyB2b2lkIGhpdF90ZXN0X3Jlc3VsdF9maXh0dXJlX3RlYXJkb3duKEhpdFRlc3RSZXN1
bHRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19vYmplY3Rf
dW5yZWYoZml4dHVyZS0+d2ViVmlldyk7Ci0gICAgZ19tYWluX2xvb3BfdW5yZWYobG9vcCk7Ci0g
ICAgdGVzdF9pbmZvX2Rlc3Ryb3koZml4dHVyZS0+aW5mbyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1s
b2FkX3N0YXR1c19jYihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LAotICAgICAgICAgICAgICAgR1Bh
cmFtU3BlYyogc3BlYywKLSAgICAgICAgICAgICAgIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgV2Vi
S2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdl
YlZpZXcpOwotICAgIFRlc3RJbmZvKiBpbmZvID0gKFRlc3RJbmZvKilkYXRhOwotCi0gICAgaWYg
KHN0YXR1cyA9PSBXRUJLSVRfTE9BRF9GSU5JU0hFRCkgewotICAgICAgICBXZWJLaXRIaXRUZXN0
UmVzdWx0KiByZXN1bHQ7Ci0gICAgICAgIGd1aW50IGNvbnRleHQ7Ci0gICAgICAgIEdka0V2ZW50
KiBldmVudCA9IGdka19ldmVudF9uZXcoR0RLX0JVVFRPTl9QUkVTUyk7Ci0gICAgICAgIFdlYktp
dERPTU5vZGUqIG5vZGU7Ci0gICAgICAgIGdpbnQgeCwgeTsKLQotICAgICAgICAvKiBDbG9zZSBl
bm91Z2ggdG8gMCwwICovCi0gICAgICAgIGV2ZW50LT5idXR0b24ueCA9IDU7Ci0gICAgICAgIGV2
ZW50LT5idXR0b24ueSA9IDU7Ci0KLSAgICAgICAgcmVzdWx0ID0gd2Via2l0X3dlYl92aWV3X2dl
dF9oaXRfdGVzdF9yZXN1bHQod2ViVmlldywgKEdka0V2ZW50QnV0dG9uKikgZXZlbnQpOwotICAg
ICAgICBnZGtfZXZlbnRfZnJlZShldmVudCk7Ci0gICAgICAgIGdfYXNzZXJ0KHJlc3VsdCk7Ci0K
LSAgICAgICAgZ19vYmplY3RfZ2V0KHJlc3VsdCwgImNvbnRleHQiLCAmY29udGV4dCwgTlVMTCk7
Ci0gICAgICAgIGdfYXNzZXJ0KGNvbnRleHQgJiBpbmZvLT5mbGFnKTsKLQotICAgICAgICBnX29i
amVjdF9nZXQocmVzdWx0LCAiaW5uZXItbm9kZSIsICZub2RlLCBOVUxMKTsKLSAgICAgICAgZ19h
c3NlcnQobm9kZSk7Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfTk9ERShub2RlKSk7
Ci0KLSAgICAgICAgZ19vYmplY3RfZ2V0KHJlc3VsdCwgIngiLCAmeCwgInkiLCAmeSwgTlVMTCk7
Ci0gICAgICAgIGdfYXNzZXJ0X2NtcGludCh4LCA9PSwgNSk7Ci0gICAgICAgIGdfYXNzZXJ0X2Nt
cGludCh5LCA9PSwgNSk7Ci0KLSAgICAgICAgLyogV2UgY2FuIG9ubHkgdGVzdCB0aGVzZSBub2Rl
IHR5cGVzIGF0IHRoZSBtb21lbnQuIEluIHRoZQotICAgICAgICAgKiBpbnB1dCBjYXNlIHRoZXJl
IHNlZW1zIHRvIGJlIGFuIGV4dHJhIGxheWVyIHdpdGggYSBESVYgb24KLSAgICAgICAgICogdG9w
IG9mIHRoZSBpbnB1dCwgd2hpY2ggZ2V0cyBhc3NpZ25lZCB0byB0aGUgaW5uZXItbm9kZS4KLSAg
ICAgICAgICogdGFnICovCi0gICAgICAgIGlmIChpbmZvLT5mbGFnID09IFdFQktJVF9ISVRfVEVT
VF9SRVNVTFRfQ09OVEVYVF9ET0NVTUVOVCkKLSAgICAgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9E
T01fSVNfSFRNTF9IVE1MX0VMRU1FTlQobm9kZSkpOwotICAgICAgICBlbHNlIGlmIChpbmZvLT5m
bGFnID09IFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9JTUFHRSkKLSAgICAgICAgICAg
IGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9JTUFHRV9FTEVNRU5UKG5vZGUpKTsKLSAgICAg
ICAgZWxzZSBpZiAoaW5mby0+ZmxhZyA9PSBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRf
TElOSykgewotICAgICAgICAgICAgLyogVGhlIGhpdCB0ZXN0IHdpbGwgZ2l2ZSB1cyB0aGUgaW5u
ZXIgdGV4dCBub2RlLCB3ZSB3YW50Ci0gICAgICAgICAgICAgKiB0aGUgQSB0YWcgKi8KLSAgICAg
ICAgICAgIFdlYktpdERPTU5vZGUqIHBhcmVudCA9IHdlYmtpdF9kb21fbm9kZV9nZXRfcGFyZW50
X25vZGUobm9kZSk7Ci0gICAgICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfQU5D
SE9SX0VMRU1FTlQocGFyZW50KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnX29iamVjdF91bnJl
ZihyZXN1bHQpOwotICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwotICAgIH0KLX0KLQot
c3RhdGljIHZvaWQKLXRlc3Rfd2Via2l0X2hpdF90ZXN0X3Jlc3VsdChIaXRUZXN0UmVzdWx0Rml4
dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIFRlc3RJbmZvKiBpbmZv
ID0gKFRlc3RJbmZvKilkYXRhOwotICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwg
MCwgNTAsIDUwIH07Ci0KLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoZml4dHVyZS0+
d2ViVmlldywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby0+ZGF0YSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRleHQvaHRtbCIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJ1dGYtOCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJmaWxlOi8vIik7Ci0gICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQo
Zml4dHVyZS0+d2ViVmlldyksICZhbGxvY2F0aW9uKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGZp
eHR1cmUtPndlYlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhsb2FkX3N0
YXR1c19jYiksIGluZm8pOwotICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLX0KLQotaW50IG1h
aW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotewotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZh
cmd2LCBOVUxMKTsKLQotICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvIik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2hpdHRlc3RyZXN1bHQvZG9jdW1lbnQi
LCBIaXRUZXN0UmVzdWx0Rml4dHVyZSwgCi0gICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KCI8
aHRtbD48Ym9keT48aDE+V2ViS2l0R1RLKyE8L2gxPjwvYm9keT48L2h0bWw+IiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0RPQ1VN
RU5UKSwKLSAgICAgICAgICAgICAgIGhpdF90ZXN0X3Jlc3VsdF9maXh0dXJlX3NldHVwLCB0ZXN0
X3dlYmtpdF9oaXRfdGVzdF9yZXN1bHQsIGhpdF90ZXN0X3Jlc3VsdF9maXh0dXJlX3RlYXJkb3du
KTsKLSAgICAvKiBXZSBoYXJkY29kZSBhbGwgZWxlbWVudHMgdG8gYmUgYXQgMCwwIHNvIHRoYXQg
d2Uga25vdyB3aGVyZSB0bwotICAgICAqIGdlbmVyYXRlIHRoZSBidXR0b24gZXZlbnRzICovCi0g
ICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9oaXR0ZXN0cmVzdWx0L2ltYWdlIiwgSGl0VGVzdFJlc3Vs
dEZpeHR1cmUsCi0gICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KCI8aHRtbD48Ym9keT48aW1n
IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDowOyB0b3A6MCdzcmM9JzB4ZGVhZGJlZWYn
IHdpZHRoPTUwIGhlaWdodD01MD48L2ltZz48L2JvZHk+PC9odG1sPiIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9JTUFHRSksCi0g
ICAgICAgICAgICAgICBoaXRfdGVzdF9yZXN1bHRfZml4dHVyZV9zZXR1cCwgdGVzdF93ZWJraXRf
aGl0X3Rlc3RfcmVzdWx0LCBoaXRfdGVzdF9yZXN1bHRfZml4dHVyZV90ZWFyZG93bik7Ci0gICAg
Z190ZXN0X2FkZCgiL3dlYmtpdC9oaXR0ZXN0cmVzdWx0L2VkaXRhYmxlIiwgSGl0VGVzdFJlc3Vs
dEZpeHR1cmUsCi0gICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KCI8aHRtbD48Ym9keT48aW5w
dXQgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjA7IHRvcDowJyBzaXplPSczNSc+PC9p
bnB1dD4+PC9ib2R5PjwvaHRtbD4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJL
SVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfRURJVEFCTEUpLAotICAgICAgICAgICAgICAgaGl0
X3Rlc3RfcmVzdWx0X2ZpeHR1cmVfc2V0dXAsIHRlc3Rfd2Via2l0X2hpdF90ZXN0X3Jlc3VsdCwg
aGl0X3Rlc3RfcmVzdWx0X2ZpeHR1cmVfdGVhcmRvd24pOwotICAgIGdfdGVzdF9hZGQoIi93ZWJr
aXQvaGl0dGVzdHJlc3VsdC9saW5rIiwgSGl0VGVzdFJlc3VsdEZpeHR1cmUsCi0gICAgICAgICAg
ICAgICB0ZXN0X2luZm9fbmV3KCI8aHRtbD48Ym9keT48YSBzdHlsZT0ncG9zaXRpb246YWJzb2x1
dGU7IGxlZnQ6MDsgdG9wOjAnIGhyZWY9J2h0dHA6Ly93d3cuZXhhbXBsZS5jb20nPkhFTExPIFdP
UkxEPC9hPjwvYm9keT48L2h0bWw+IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VC
S0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0xJTkspLAotICAgICAgICAgICAgICAgaGl0X3Rl
c3RfcmVzdWx0X2ZpeHR1cmVfc2V0dXAsIHRlc3Rfd2Via2l0X2hpdF90ZXN0X3Jlc3VsdCwgaGl0
X3Rlc3RfcmVzdWx0X2ZpeHR1cmVfdGVhcmRvd24pOwotICAgICAgICAgICAgICAgCi0gICAgcmV0
dXJuIGdfdGVzdF9ydW4gKCk7Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rl
c3RzL3Rlc3RodHRwYmFja2VuZC5jIGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGh0dHBi
YWNrZW5kLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzNzc2ODcuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGh0dHBiYWNrZW5kLmMKKysrIC9kZXYv
bnVsbApAQCAtMSw3NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEd1c3Rhdm8g
Tm9yb25oYSBTaWx2YQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNp
bmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z2xpYi9nc3Rk
aW8uaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgot
Ci0vLyBOb3QgeWV0IHB1YmxpYyBBUEkKLVNvdXBNZXNzYWdlKiB3ZWJraXRfbmV0d29ya19yZXF1
ZXN0X2dldF9tZXNzYWdlKFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0KTsKLQotc3RhdGlj
IGdib29sZWFuIG5hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX3JlcXVlc3RlZF9jYihXZWJLaXRX
ZWJWaWV3KiB3ZWJfdmlldywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV2ViS2l0V2ViRnJhbWUqIHdlYl9mcmFtZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0TmV0d29y
a1JlcXVlc3QqIHJlcXVlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFdlYktpdFdlYk5hdmlnYXRpb25BY3Rpb24qIGFjdGlvbiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2Vi
S2l0V2ViUG9saWN5RGVjaXNpb24qIGRlY2lzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciBkYXRhKQotewotICAgIFNv
dXBNZXNzYWdlKiBtZXNzYWdlID0gd2Via2l0X25ldHdvcmtfcmVxdWVzdF9nZXRfbWVzc2FnZShy
ZXF1ZXN0KTsKLQotICAgIC8qIDEgLT4gd2Via2l0X25ldHdvcmtfcmVxdWVzdF93aXRoX2NvcmVf
cmVxdWVzdAotICAgICAqCi0gICAgICogVGhlIFNvdXBNZXNzYWdlIGlzIGNyZWF0ZWQgZXhjbHVz
aXZlbHkgZm9yIHRoZSBlbWlzc2lvbiBvZiB0aGlzCi0gICAgICogc2lnbmFsLgotICAgICAqLwot
ICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChtZXNzYWdlKS0+cmVmX2NvdW50LCA9PSwgMSk7
Ci0KLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfc291cF9tZXNzYWdl
X2xpZmV0aW1lKCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldyA9IFdFQktJVF9XRUJf
VklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotCi0gICAgZ19vYmplY3RfcmVmX3Npbmsod2Vi
X3ZpZXcpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh3ZWJfdmlldywgIm5hdmlnYXRpb24tcG9s
aWN5LWRlY2lzaW9uLXJlcXVlc3RlZCIsCi0gICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNL
KG5hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX3JlcXVlc3RlZF9jYiksCi0gICAgICAgICAgICAg
ICAgICAgICBOVUxMKTsKLQotICAgIC8qIGxvYWRfdXJpIHdpbGwgdHJpZ2dlciB0aGUgbmF2aWdh
dGlvbi1wb2xpY3ktZGVjaXNpb24tcmVxdWVzdGVkCi0gICAgICogc2lnbmFsIGVtaXNzaW9uOwot
ICAgICAqLwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh3ZWJfdmlldywgImh0dHA6Ly8x
MjcuMC4wLjEvIik7Ci0KLSAgICBnX29iamVjdF91bnJlZih3ZWJfdmlldyk7Ci19Ci0KLWludCBt
YWluKGludCBhcmdjLCBjaGFyKiogYXJndikKLXsKLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAm
YXJndiwgTlVMTCk7Ci0KLSAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQu
b3JnLyIpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9zb3VwbWVzc2FnZS9saWZldGlt
ZSIsIHRlc3Rfc291cF9tZXNzYWdlX2xpZmV0aW1lKTsKLSAgICByZXR1cm4gZ190ZXN0X3J1biAo
KTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RrZXlldmVudHMu
YyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RrZXlldmVudHMuYwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYWNkMDFmMy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0
ay90ZXN0cy90ZXN0a2V5ZXZlbnRzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzOTAgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBNYXJ0aW4gUm9iaW5zb24gPG1yb2JpbnNv
bkB3ZWJraXQub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLDEg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgPGVycm5vLmg+Ci0j
aW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8Z2xpYi9n
c3RkaW8uaD4KLSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNTdHJpbmdSZWYuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NvbnRleHRS
ZWYuaD4KLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIGNoYXIqIHBhZ2U7Ci0gICAgY2hhciogdGV4
dDsKLSAgICBnYm9vbGVhbiBzaG91bGRCZUhhbmRsZWQ7Ci19IFRlc3RJbmZvOwotCi10eXBlZGVm
IHN0cnVjdCB7Ci0gICAgR3RrV2lkZ2V0KiB3aW5kb3c7Ci0gICAgV2ViS2l0V2ViVmlldyogd2Vi
VmlldzsKLSAgICBHTWFpbkxvb3AqIGxvb3A7Ci0gICAgVGVzdEluZm8qIGluZm87Ci19IEtleUV2
ZW50Rml4dHVyZTsKLQotVGVzdEluZm8qCi10ZXN0X2luZm9fbmV3KGNvbnN0IGNoYXIqIHBhZ2Us
IGdib29sZWFuIHNob3VsZEJlSGFuZGxlZCkKLXsKLSAgICBUZXN0SW5mbyogaW5mbzsKLQotICAg
IGluZm8gPSBnX3NsaWNlX25ldyhUZXN0SW5mbyk7Ci0gICAgaW5mby0+cGFnZSA9IGdfc3RyZHVw
KHBhZ2UpOwotICAgIGluZm8tPnNob3VsZEJlSGFuZGxlZCA9IHNob3VsZEJlSGFuZGxlZDsKLSAg
ICBpbmZvLT50ZXh0ID0gMDsKLQotICAgIHJldHVybiBpbmZvOwotfQotCi12b2lkCi10ZXN0X2lu
Zm9fZGVzdHJveShUZXN0SW5mbyogaW5mbykKLXsKLSAgICBnX2ZyZWUoaW5mby0+cGFnZSk7Ci0g
ICAgZ19mcmVlKGluZm8tPnRleHQpOwotICAgIGdfc2xpY2VfZnJlZShUZXN0SW5mbywgaW5mbyk7
Ci19Ci0KLXN0YXRpYyB2b2lkIGtleV9ldmVudF9maXh0dXJlX3NldHVwKEtleUV2ZW50Rml4dHVy
ZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGZpeHR1cmUtPmxvb3AgPSBn
X21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7Ci0KLSAgICBmaXh0dXJlLT53aW5kb3cgPSBndGtf
d2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKLSAgICBmaXh0dXJlLT53ZWJWaWV3ID0g
V0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0KLSAgICBndGtfY29udGFp
bmVyX2FkZChHVEtfQ09OVEFJTkVSKGZpeHR1cmUtPndpbmRvdyksIEdUS19XSURHRVQoZml4dHVy
ZS0+d2ViVmlldykpOwotfQotCi1zdGF0aWMgdm9pZCBrZXlfZXZlbnRfZml4dHVyZV90ZWFyZG93
bihLZXlFdmVudEZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBn
dGtfd2lkZ2V0X2Rlc3Ryb3koZml4dHVyZS0+d2luZG93KTsKLSAgICBnX21haW5fbG9vcF91bnJl
ZihmaXh0dXJlLT5sb29wKTsKLSAgICB0ZXN0X2luZm9fZGVzdHJveShmaXh0dXJlLT5pbmZvKTsK
LX0KLQotc3RhdGljIGdib29sZWFuIGtleV9wcmVzc19ldmVudF9jYihXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3LCBHZGtFdmVudCogZXZlbnQsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgS2V5RXZlbnRG
aXh0dXJlKiBmaXh0dXJlID0gKEtleUV2ZW50Rml4dHVyZSopZGF0YTsKLSAgICBnYm9vbGVhbiBo
YW5kbGVkID0gR1RLX1dJREdFVF9HRVRfQ0xBU1MoZml4dHVyZS0+d2ViVmlldyktPmtleV9wcmVz
c19ldmVudChHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpLCAmZXZlbnQtPmtleSk7Ci0gICAg
Z19hc3NlcnRfY21waW50KGhhbmRsZWQsID09LCBmaXh0dXJlLT5pbmZvLT5zaG91bGRCZUhhbmRs
ZWQpOwotCi0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4ga2V5X3JlbGVh
c2VfZXZlbnRfY2IoV2ViS2l0V2ViVmlldyogd2ViVmlldywgR2RrRXZlbnQqIGV2ZW50LCBncG9p
bnRlciBkYXRhKQotewotICAgIC8vIFdlYkNvcmUgbmV2ZXIgc2VlbXMgdG8gbWFyayBrZXl1cCBl
dmVudHMgYXMgaGFuZGxlZC4KLSAgICBLZXlFdmVudEZpeHR1cmUqIGZpeHR1cmUgPSAoS2V5RXZl
bnRGaXh0dXJlKilkYXRhOwotICAgIGdib29sZWFuIGhhbmRsZWQgPSBHVEtfV0lER0VUX0dFVF9D
TEFTUyhmaXh0dXJlLT53ZWJWaWV3KS0+a2V5X3ByZXNzX2V2ZW50KEdUS19XSURHRVQoZml4dHVy
ZS0+d2ViVmlldyksICZldmVudC0+a2V5KTsKLSAgICBnX2Fzc2VydCghaGFuZGxlZCk7Ci0KLSAg
ICBnX21haW5fbG9vcF9xdWl0KGZpeHR1cmUtPmxvb3ApOwotCi0gICAgcmV0dXJuIEZBTFNFOwot
fQotCi1zdGF0aWMgdm9pZCB0ZXN0X2tleXByZXNzX2V2ZW50c19sb2FkX3N0YXR1c19jYihXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3LCBHUGFyYW1TcGVjKiBzcGVjLCBncG9pbnRlciBkYXRhKQotewot
ICAgIEtleUV2ZW50Rml4dHVyZSogZml4dHVyZSA9IChLZXlFdmVudEZpeHR1cmUqKWRhdGE7Ci0g
ICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3Rh
dHVzKHdlYlZpZXcpOwotICAgIGlmIChzdGF0dXMgPT0gV0VCS0lUX0xPQURfRklOSVNIRUQpIHsK
LSAgICAgICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53ZWJWaWV3LCAia2V5LXByZXNzLWV2
ZW50IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKGtleV9wcmVzc19ldmVu
dF9jYiksIGZpeHR1cmUpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZp
ZXcsICJrZXktcmVsZWFzZS1ldmVudCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgR19DQUxM
QkFDSyhrZXlfcmVsZWFzZV9ldmVudF9jYiksIGZpeHR1cmUpOwotICAgICAgICBpZiAoIWd0a190
ZXN0X3dpZGdldF9zZW5kX2tleShHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGtfdW5pY29kZV90b19rZXl2YWwoJ2En
KSwgMCkpCi0gICAgICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAgIH0KLQotfQot
Ci1nYm9vbGVhbiBtYXBfZXZlbnRfY2IoR3RrV2lkZ2V0ICp3aWRnZXQsIEdka0V2ZW50KiBldmVu
dCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBLZXlFdmVudEZpeHR1cmUqIGZpeHR1cmUgPSAoS2V5
RXZlbnRGaXh0dXJlKilkYXRhOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhmaXh0
dXJlLT53ZWJWaWV3LCBmaXh0dXJlLT5pbmZvLT5wYWdlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAidGV4dC9odG1sIiwgInV0Zi04IiwgImZpbGU6Ly8iKTsKLSAgICByZXR1cm4g
RkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldHVwX2tleWV2ZW50X3Rlc3QoS2V5RXZlbnRGaXh0
dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEsIEdDYWxsYmFjayBsb2FkX2V2ZW50X2Nh
bGxiYWNrKQotewotICAgIGZpeHR1cmUtPmluZm8gPSAoVGVzdEluZm8qKWRhdGE7Ci0gICAgZ19z
aWduYWxfY29ubmVjdChmaXh0dXJlLT53aW5kb3csICJtYXAtZXZlbnQiLAotICAgICAgICAgICAg
ICAgICAgICAgR19DQUxMQkFDSyhtYXBfZXZlbnRfY2IpLCBmaXh0dXJlKTsKLQotICAgIGd0a193
aWRnZXRfZ3JhYl9mb2N1cyhHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpKTsKLSAgICBndGtf
d2lkZ2V0X3Nob3coZml4dHVyZS0+d2luZG93KTsKLSAgICBndGtfd2lkZ2V0X3Nob3coR1RLX1dJ
REdFVChmaXh0dXJlLT53ZWJWaWV3KSk7Ci0gICAgZ3RrX3dpbmRvd19wcmVzZW50KEdUS19XSU5E
T1coZml4dHVyZS0+d2luZG93KSk7Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndl
YlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwKLSAgICAgICAgICAgICAgICAgICAgIGxvYWRf
ZXZlbnRfY2FsbGJhY2ssIGZpeHR1cmUpOwotCi0gICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1cmUt
Pmxvb3ApOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X2tleXByZXNzX2V2ZW50cyhLZXlFdmVudEZp
eHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBzZXR1cF9rZXlldmVu
dF90ZXN0KGZpeHR1cmUsIGRhdGEsIEdfQ0FMTEJBQ0sodGVzdF9rZXlwcmVzc19ldmVudHNfbG9h
ZF9zdGF0dXNfY2IpKTsKLX0KLQotc3RhdGljIGdib29sZWFuIGVsZW1lbnRfdGV4dF9lcXVhbF90
byhKU0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgZ2NoYXIqIHRleHQpCi17Ci0gICAgSlNTdHJp
bmdSZWYgc2NyaXB0U3RyaW5nID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoCi0gICAg
ICAid2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaW5cIikudmFsdWU7Iik7Ci0gICAg
SlNWYWx1ZVJlZiB2YWx1ZSA9IEpTRXZhbHVhdGVTY3JpcHQoY29udGV4dCwgc2NyaXB0U3RyaW5n
LCAwLCAwLCAwLCAwKTsKLSAgICBKU1N0cmluZ1JlbGVhc2Uoc2NyaXB0U3RyaW5nKTsKLQotICAg
IC8vIElmIHRoZSB2YWx1ZSBpc24ndCBhIHN0cmluZywgdGhlIGVsZW1lbnQgaXMgcHJvYmFibHkg
YSBkaXYKLSAgICAvLyBzbyBncmFiIHRoZSBpbm5lclRleHQgaW5zdGVhZC4KLSAgICBpZiAoIUpT
VmFsdWVJc1N0cmluZyhjb250ZXh0LCB2YWx1ZSkpIHsKLSAgICAgICAgSlNTdHJpbmdSZWYgc2Ny
aXB0U3RyaW5nID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoCi0gICAgICAgICAgIndp
bmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImluXCIpLmlubmVyVGV4dDsiKTsKLSAgICAg
ICAgdmFsdWUgPSBKU0V2YWx1YXRlU2NyaXB0KGNvbnRleHQsIHNjcmlwdFN0cmluZywgMCwgMCwg
MCwgMCk7Ci0gICAgICAgIEpTU3RyaW5nUmVsZWFzZShzY3JpcHRTdHJpbmcpOwotICAgIH0KLQot
ICAgIGdfYXNzZXJ0KEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCB2YWx1ZSkpOwotICAgIEpTU3Ry
aW5nUmVmIGlucHV0U3RyaW5nID0gSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCB2YWx1ZSwg
MCk7Ci0gICAgZ19hc3NlcnQoaW5wdXRTdHJpbmcpOwotCi0gICAgZ2ludCBzaXplID0gSlNTdHJp
bmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKGlucHV0U3RyaW5nKTsKLSAgICBnY2hhciogY1N0
cmluZyA9IGdfbWFsbG9jKHNpemUpOwotICAgIEpTU3RyaW5nR2V0VVRGOENTdHJpbmcoaW5wdXRT
dHJpbmcsIGNTdHJpbmcsIHNpemUpOwotICAgIEpTU3RyaW5nUmVsZWFzZShpbnB1dFN0cmluZyk7
Ci0KLSAgICBnYm9vbGVhbiByZXN1bHQgPSBnX3V0ZjhfY29sbGF0ZShjU3RyaW5nLCB0ZXh0KSA9
PSAwOwotICAgIGdfZnJlZShjU3RyaW5nKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0
aWMgdm9pZCB0ZXN0X2ltZV9sb2FkX3N0YXR1c19jYihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBH
UGFyYW1TcGVjKiBzcGVjLCBncG9pbnRlciBkYXRhKQotewotICAgIEtleUV2ZW50Rml4dHVyZSog
Zml4dHVyZSA9IChLZXlFdmVudEZpeHR1cmUqKWRhdGE7Ci0gICAgV2ViS2l0TG9hZFN0YXR1cyBz
dGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYlZpZXcpOwotICAgIGlm
IChzdGF0dXMgIT0gV0VCS0lUX0xPQURfRklOSVNIRUQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfZ2xvYmFs
X2NvbnRleHQoCi0gICAgICAgIHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh3ZWJWaWV3
KSk7Ci0gICAgZ19hc3NlcnQoY29udGV4dCk7Ci0KLSAgICBHdGtJTUNvbnRleHQqIGltQ29udGV4
dCA9IDA7Ci0gICAgZ19vYmplY3RfZ2V0KHdlYlZpZXcsICJpbS1jb250ZXh0IiwgJmltQ29udGV4
dCwgTlVMTCk7Ci0gICAgZ19hc3NlcnQoaW1Db250ZXh0KTsKLQotICAgIC8vIFRlc3QgdGhhdCBj
b21taXRzIHRoYXQgaGFwcGVuIG91dHNpZGUgb2Yga2V5IGV2ZW50cwotICAgIC8vIGNoYW5nZSB0
aGUgdGV4dCBmaWVsZCBpbW1lZGlhdGVseS4gVGhpcyBjbG9zZWx5IHJlcGxpY2F0ZXMKLSAgICAv
LyB0aGUgYmVoYXZpb3Igb2YgU0NJTS4KLSAgICBnX2Fzc2VydChlbGVtZW50X3RleHRfZXF1YWxf
dG8oY29udGV4dCwgIiIpKTsKLSAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoaW1Db250ZXh0LCAi
Y29tbWl0IiwgImEiKTsKLSAgICBnX2Fzc2VydChlbGVtZW50X3RleHRfZXF1YWxfdG8oY29udGV4
dCwgImEiKSk7Ci0gICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKGltQ29udGV4dCwgImNvbW1pdCIs
ICJiIik7Ci0gICAgZ19hc3NlcnQoZWxlbWVudF90ZXh0X2VxdWFsX3RvKGNvbnRleHQsICJhYiIp
KTsKLSAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoaW1Db250ZXh0LCAiY29tbWl0IiwgImMiKTsK
LSAgICBnX2Fzc2VydChlbGVtZW50X3RleHRfZXF1YWxfdG8oY29udGV4dCwgImFiYyIpKTsKLQot
ICAgIGdfb2JqZWN0X3VucmVmKGltQ29udGV4dCk7Ci0gICAgZ19tYWluX2xvb3BfcXVpdChmaXh0
dXJlLT5sb29wKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF9pbWUoS2V5RXZlbnRGaXh0dXJlKiBm
aXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgc2V0dXBfa2V5ZXZlbnRfdGVzdChm
aXh0dXJlLCBkYXRhLCBHX0NBTExCQUNLKHRlc3RfaW1lX2xvYWRfc3RhdHVzX2NiKSk7Ci19Ci0K
LXN0YXRpYyBnYm9vbGVhbiB2ZXJpZnlfY29udGVudHMoZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBL
ZXlFdmVudEZpeHR1cmUqIGZpeHR1cmUgPSAoS2V5RXZlbnRGaXh0dXJlKilkYXRhOwotICAgIEpT
R2xvYmFsQ29udGV4dFJlZiBjb250ZXh0ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfZ2xvYmFsX2Nv
bnRleHQoCi0gICAgICAgIHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZShmaXh0dXJlLT53
ZWJWaWV3KSk7Ci0gICAgZ19hc3NlcnQoY29udGV4dCk7Ci0KLSAgICBnX2Fzc2VydChlbGVtZW50
X3RleHRfZXF1YWxfdG8oY29udGV4dCwgZml4dHVyZS0+aW5mby0+dGV4dCkpOwotICAgIGdfbWFp
bl9sb29wX3F1aXQoZml4dHVyZS0+bG9vcCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0
aWMgdm9pZCB0ZXN0X2Jsb2NraW5nX2xvYWRfc3RhdHVzX2NiKFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcsIEdQYXJhbVNwZWMqIHNwZWMsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgS2V5RXZlbnRGaXh0
dXJlKiBmaXh0dXJlID0gKEtleUV2ZW50Rml4dHVyZSopZGF0YTsKLSAgICBXZWJLaXRMb2FkU3Rh
dHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMod2ViVmlldyk7Ci0g
ICAgaWYgKHN0YXR1cyAhPSBXRUJLSVRfTE9BRF9GSU5JU0hFRCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gVGhlIGZpcnN0IGtleXByZXNzIGV2ZW50IHNob3VsZCBub3QgbW9kaWZ5IHRoZSBm
aWVsZC4KLSAgICBmaXh0dXJlLT5pbmZvLT50ZXh0ID0gZ19zdHJkdXAoImJjIik7Ci0gICAgaWYg
KCFndGtfdGVzdF93aWRnZXRfc2VuZF9rZXkoR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdka191bmljb2RlX3RvX2tleXZhbCgn
YScpLCAwKSkKLSAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICBpZiAoIWd0a190
ZXN0X3dpZGdldF9zZW5kX2tleShHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdka191bmljb2RlX3RvX2tleXZhbCgnYicpLCAw
KSkKLSAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICBpZiAoIWd0a190ZXN0X3dp
ZGdldF9zZW5kX2tleShHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdka191bmljb2RlX3RvX2tleXZhbCgnYycpLCAwKSkKLSAg
ICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKLQotICAgIGdfaWRsZV9hZGQodmVyaWZ5X2Nv
bnRlbnRzLCBmaXh0dXJlKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF9ibG9ja2luZyhLZXlFdmVu
dEZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBzZXR1cF9rZXll
dmVudF90ZXN0KGZpeHR1cmUsIGRhdGEsIEdfQ0FMTEJBQ0sodGVzdF9ibG9ja2luZ19sb2FkX3N0
YXR1c19jYikpOwotfQotCi0jaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkKLXN0YXRpYyB2
b2lkIHRlc3RfeGltX2xvYWRfc3RhdHVzX2NiKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEdQYXJh
bVNwZWMqIHNwZWMsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgS2V5RXZlbnRGaXh0dXJlKiBmaXh0
dXJlID0gKEtleUV2ZW50Rml4dHVyZSopZGF0YTsKLSAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1
cyA9IHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMod2ViVmlldyk7Ci0gICAgaWYgKHN0
YXR1cyAhPSBXRUJLSVRfTE9BRF9GSU5JU0hFRCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3Rr
SU1Db250ZXh0KiBpbUNvbnRleHQgPSAwOwotICAgIGdfb2JqZWN0X2dldCh3ZWJWaWV3LCAiaW0t
Y29udGV4dCIsICZpbUNvbnRleHQsIE5VTEwpOwotICAgIGdfYXNzZXJ0KGltQ29udGV4dCk7Ci0K
LSAgICBnY2hhciogb3JpZ2luYWxJZCA9IGdfc3RyZHVwKGd0a19pbV9tdWx0aWNvbnRleHRfZ2V0
X2NvbnRleHRfaWQoR1RLX0lNX01VTFRJQ09OVEVYVChpbUNvbnRleHQpKSk7Ci0gICAgZ3RrX2lt
X211bHRpY29udGV4dF9zZXRfY29udGV4dF9pZChHVEtfSU1fTVVMVElDT05URVhUKGltQ29udGV4
dCksICJ4aW0iKTsKLQotICAgIC8vIFRlc3QgdGhhdCBjb21taXRzIHRoYXQgaGFwcGVuIG91dHNp
ZGUgb2Yga2V5IGV2ZW50cwotICAgIC8vIGNoYW5nZSB0aGUgdGV4dCBmaWVsZCBpbW1lZGlhdGVs
eS4gVGhpcyBjbG9zZWx5IHJlcGxpY2F0ZXMKLSAgICAvLyB0aGUgYmVoYXZpb3Igb2YgU0NJTS4K
LSAgICBmaXh0dXJlLT5pbmZvLT50ZXh0ID0gZ19zdHJkdXAoImRlYmlhbiIpOwotICAgIGlmICgh
Z3RrX3Rlc3Rfd2lkZ2V0X3NlbmRfa2V5KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldyksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGtfdW5pY29kZV90b19rZXl2YWwoJ2Qn
KSwgMCkpCi0gICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0gICAgaWYgKCFndGtfdGVz
dF93aWRnZXRfc2VuZF9rZXkoR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2RrX3VuaWNvZGVfdG9fa2V5dmFsKCdlJyksIDApKQotICAg
ICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAgIGlmICghZ3RrX3Rlc3Rfd2lkZ2V0X3Nl
bmRfa2V5KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldyksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdka191bmljb2RlX3RvX2tleXZhbCgnYicpLCAwKSkKLSAgICAgICAgZ19hc3Nl
cnRfbm90X3JlYWNoZWQoKTsKLSAgICBpZiAoIWd0a190ZXN0X3dpZGdldF9zZW5kX2tleShHVEtf
V0lER0VUKGZpeHR1cmUtPndlYlZpZXcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
ZGtfdW5pY29kZV90b19rZXl2YWwoJ2knKSwgMCkpCi0gICAgICAgIGdfYXNzZXJ0X25vdF9yZWFj
aGVkKCk7Ci0gICAgaWYgKCFndGtfdGVzdF93aWRnZXRfc2VuZF9rZXkoR1RLX1dJREdFVChmaXh0
dXJlLT53ZWJWaWV3KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RrX3VuaWNvZGVf
dG9fa2V5dmFsKCdhJyksIDApKQotICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAg
IGlmICghZ3RrX3Rlc3Rfd2lkZ2V0X3NlbmRfa2V5KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmll
dyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdka191bmljb2RlX3RvX2tleXZhbCgn
bicpLCAwKSkKLSAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKLQotICAgIGd0a19pbV9t
dWx0aWNvbnRleHRfc2V0X2NvbnRleHRfaWQoR1RLX0lNX01VTFRJQ09OVEVYVChpbUNvbnRleHQp
LCBvcmlnaW5hbElkKTsKLSAgICBnX2ZyZWUob3JpZ2luYWxJZCk7Ci0gICAgZ19vYmplY3RfdW5y
ZWYoaW1Db250ZXh0KTsKLQotICAgIGdfaWRsZV9hZGQodmVyaWZ5X2NvbnRlbnRzLCBmaXh0dXJl
KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF94aW0oS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJlLCBn
Y29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgc2V0dXBfa2V5ZXZlbnRfdGVzdChmaXh0dXJlLCBk
YXRhLCBHX0NBTExCQUNLKHRlc3RfeGltX2xvYWRfc3RhdHVzX2NiKSk7Ci19Ci0jZW5kaWYKLQot
aW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotewotICAgIGd0a190ZXN0X2luaXQoJmFy
Z2MsICZhcmd2LCBOVUxMKTsKLQotICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvIik7Ci0KLQotICAgIC8vIFdlJ2xsIHRlc3QgaW5wdXQgb24gYSBzbGV3IG9mIGRp
ZmZlcmVudCBub2RlIHR5cGVzLiBLZXkgZXZlbnRzIHRvCi0gICAgLy8gdGV4dCBpbnB1dHMgYW5k
IGVkaXRhYmxlIGRpdnMgc2hvdWxkIGJlIG1hcmtlZCBhcyBoYW5kbGVkLiBLZXkgZXZlbnRzCi0g
ICAgLy8gdG8gYnV0dG9ucyBhbmQgbGlua3Mgc2hvdWxkIG5vdC4KLSAgICBjb25zdCBjaGFyKiB0
ZXh0aW5wdXRfaHRtbCA9ICI8aHRtbD48Ym9keT48aW5wdXQgaWQ9XCJpblwiIHR5cGU9XCJ0ZXh0
XCI+IgotICAgICAgICAiPHNjcmlwdD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW4nKS5mb2N1
cygpOzwvc2NyaXB0PjwvYm9keT48L2h0bWw+IjsKLSAgICBjb25zdCBjaGFyKiBidXR0b25faHRt
bCA9ICI8aHRtbD48Ym9keT48aW5wdXQgaWQ9XCJpblwiIHR5cGU9XCJidXR0b25cIj4iCi0gICAg
ICAgICI8c2NyaXB0PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbicpLmZvY3VzKCk7PC9zY3Jp
cHQ+PC9ib2R5PjwvaHRtbD4iOwotICAgIGNvbnN0IGNoYXIqIGxpbmtfaHRtbCA9ICI8aHRtbD48
Ym9keT48YSBocmVmPVwiaHR0cDovL3d3dy5nbm9tZS5vcmdcIiBpZD1cImluXCI+IgotICAgICAg
ICAiTElOS1kgTUNMSU5LRVJTT048L2E+PHNjcmlwdD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
aW4nKS5mb2N1cygpOzwvc2NyaXB0PiIKLSAgICAgICAgIjwvYm9keT48L2h0bWw+IjsKLSAgICBj
b25zdCBjaGFyKiBkaXZfaHRtbCA9ICI8aHRtbD48Ym9keT48ZGl2IGlkPVwiaW5cIiBjb250ZW50
ZWRpdGFibGU9XCJ0cnVlXCI+IgotICAgICAgICAiPHNjcmlwdD5kb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnaW4nKS5mb2N1cygpOzwvc2NyaXB0PjwvYm9keT48L2h0bWw+IjsKLQotICAgIC8vIFRo
ZXNlIGFyZSBzaW1pbGFyIHRvIHRoZSBibG9ja3MgYWJvdmUsIGJ1dCB0aGV5IHNob3VsZCBibG9j
ayB0aGUgZmlyc3QKLSAgICAvLyBrZXlwcmVzcyBtb2RpZnlpbmcgdGhlIGVkaXRhYmxlIG5vZGUu
Ci0gICAgY29uc3QgY2hhciogdGV4dGlucHV0X2h0bWxfYmxvY2tpbmcgPSAiPGh0bWw+PGJvZHk+
IgotICAgICAgICAiPGlucHV0IGlkPVwiaW5cIiB0eXBlPVwidGV4dFwiICIKLSAgICAgICAgIm9u
a2V5cHJlc3M9XCJpZiAoZmlyc3QpIHtldmVudC5wcmV2ZW50RGVmYXVsdCgpO2ZpcnN0PWZhbHNl
O31cIj4iCi0gICAgICAgICI8c2NyaXB0PmZpcnN0ID0gdHJ1ZTtcbmRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdpbicpLmZvY3VzKCk7PC9zY3JpcHQ+XG4iCi0gICAgICAgICI8L3NjcmlwdD48L2Jv
ZHk+PC9odG1sPiI7Ci0gICAgY29uc3QgY2hhciogZGl2X2h0bWxfYmxvY2tpbmcgPSAiPGh0bWw+
PGJvZHk+IgotICAgICAgICAiPGRpdiBpZD1cImluXCIgY29udGVudGVkaXRhYmxlPVwidHJ1ZVwi
ICIKLSAgICAgICAgIm9ua2V5cHJlc3M9XCJpZiAoZmlyc3QpIHtldmVudC5wcmV2ZW50RGVmYXVs
dCgpO2ZpcnN0PWZhbHNlO31cIj4iCi0gICAgICAgICI8c2NyaXB0PmZpcnN0ID0gdHJ1ZTsgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2luJykuZm9jdXMoKTs8L3NjcmlwdD5cbiIKLSAgICAgICAg
Ijwvc2NyaXB0PjwvYm9keT48L2h0bWw+IjsKLQotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQva2V5
ZXZlbnRzL2V2ZW50LXRleHRpbnB1dCIsIEtleUV2ZW50Rml4dHVyZSwKLSAgICAgICAgICAgICAg
IHRlc3RfaW5mb19uZXcodGV4dGlucHV0X2h0bWwsIFRSVUUpLAotICAgICAgICAgICAgICAga2V5
X2V2ZW50X2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X2tleXByZXNzX2V2ZW50
cywKLSAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3RlYXJkb3duKTsKLSAgICBnX3Rl
c3RfYWRkKCIvd2Via2l0L2tleWV2ZW50cy9ldmVudC1idXR0b25zIiwgS2V5RXZlbnRGaXh0dXJl
LAotICAgICAgICAgICAgICAgdGVzdF9pbmZvX25ldyhidXR0b25faHRtbCwgRkFMU0UpLAotICAg
ICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0
X2tleXByZXNzX2V2ZW50cywKLSAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3RlYXJk
b3duKTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2tleWV2ZW50cy9ldmVudC1saW5rIiwgS2V5
RXZlbnRGaXh0dXJlLAotICAgICAgICAgICAgICAgdGVzdF9pbmZvX25ldyhsaW5rX2h0bWwsIEZB
TFNFKSwKLSAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3NldHVwLAotICAgICAgICAg
ICAgICAgdGVzdF9rZXlwcmVzc19ldmVudHMsCi0gICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4
dHVyZV90ZWFyZG93bik7Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9rZXlldmVudC9ldmVudC1k
aXYiLCBLZXlFdmVudEZpeHR1cmUsCi0gICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KGRpdl9o
dG1sLCBUUlVFKSwKLSAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3NldHVwLAotICAg
ICAgICAgICAgICAgdGVzdF9rZXlwcmVzc19ldmVudHMsCi0gICAgICAgICAgICAgICBrZXlfZXZl
bnRfZml4dHVyZV90ZWFyZG93bik7Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9rZXlldmVudC9p
bWUtdGV4dGlucHV0IiwgS2V5RXZlbnRGaXh0dXJlLAotICAgICAgICAgICAgICAgdGVzdF9pbmZv
X25ldyh0ZXh0aW5wdXRfaHRtbCwgVFJVRSksCi0gICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4
dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3RfaW1lLAotICAgICAgICAgICAgICAga2V5
X2V2ZW50X2ZpeHR1cmVfdGVhcmRvd24pOwotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQva2V5ZXZl
bnQvaW1lLWRpdiIsIEtleUV2ZW50Rml4dHVyZSwKLSAgICAgICAgICAgICAgIHRlc3RfaW5mb19u
ZXcoZGl2X2h0bWwsIFRSVUUpLAotICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfc2V0
dXAsCi0gICAgICAgICAgICAgICB0ZXN0X2ltZSwKLSAgICAgICAgICAgICAgIGtleV9ldmVudF9m
aXh0dXJlX3RlYXJkb3duKTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2tleWV2ZW50L2Jsb2Nr
LXRleHRpbnB1dCIsIEtleUV2ZW50Rml4dHVyZSwKLSAgICAgICAgICAgICAgIHRlc3RfaW5mb19u
ZXcodGV4dGlucHV0X2h0bWxfYmxvY2tpbmcsIFRSVUUpLAotICAgICAgICAgICAgICAga2V5X2V2
ZW50X2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X2Jsb2NraW5nLAotICAgICAg
ICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfdGVhcmRvd24pOwotICAgIGdfdGVzdF9hZGQoIi93
ZWJraXQva2V5ZXZlbnQvYmxvY2stZGl2IiwgS2V5RXZlbnRGaXh0dXJlLAotICAgICAgICAgICAg
ICAgdGVzdF9pbmZvX25ldyhkaXZfaHRtbF9ibG9ja2luZywgVFJVRSksCi0gICAgICAgICAgICAg
ICBrZXlfZXZlbnRfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3RfYmxvY2tpbmcs
Ci0gICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV90ZWFyZG93bik7Ci0jaWYgZGVmaW5l
ZChHREtfV0lORE9XSU5HX1gxMSkKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2tleWV2ZW50L3hp
bS10ZXh0aW5wdXQiLCBLZXlFdmVudEZpeHR1cmUsCi0gICAgICAgICAgICAgICB0ZXN0X2luZm9f
bmV3KHRleHRpbnB1dF9odG1sLCBUUlVFKSwKLSAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0
dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF94aW0sCi0gICAgICAgICAgICAgICBrZXlf
ZXZlbnRfZml4dHVyZV90ZWFyZG93bik7Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9rZXlldmVu
dC94aW0tZGl2IiwgS2V5RXZlbnRGaXh0dXJlLAotICAgICAgICAgICAgICAgdGVzdF9pbmZvX25l
dyhkaXZfaHRtbCwgVFJVRSksCi0gICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV9zZXR1
cCwKLSAgICAgICAgICAgICAgIHRlc3RfeGltLAotICAgICAgICAgICAgICAga2V5X2V2ZW50X2Zp
eHR1cmVfdGVhcmRvd24pOwotI2VuZGlmCi0KLSAgICByZXR1cm4gZ190ZXN0X3J1bigpOwotfQot
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0bG9hZGluZy5jIGIvU291
cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGxvYWRpbmcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYTBhOTIwZi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90
ZXN0bG9hZGluZy5jCisrKyAvZGV2L251bGwKQEAgLTEsNDM1ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDksIDIwMTAgR3VzdGF2byBOb3JvbmhhIFNpbHZhCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDkgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgPGd0ay9n
dGsuaD4KLSNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNp
bmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+Ci0KLS8qIFRoaXMgc3RyaW5nIGhhcyB0byBiZSByYXRo
ZXIgYmlnIGJlY2F1c2Ugb2YgdGhlIGNhbmNlbGxlZCB0ZXN0IC0gaXQKLSAqIGxvb2tzIGxpa2Ug
c291cCByZWZ1c2VzIHRvIHNlbmQgb3IgcmVjZWl2ZSBhIHRvbyBzbWFsbCBjaHVuayAqLwotI2Rl
ZmluZSBIVE1MX1NUUklORyAiPGh0bWw+PGJvZHk+VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nITwvYm9keT48L2h0bWw+IgotCi1Tb3Vw
VVJJKiBiYXNlX3VyaTsKLQotLyogRm9yIHJlYWwgcmVxdWVzdCB0ZXN0aW5nICovCi1zdGF0aWMg
dm9pZAotc2VydmVyX2NhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1z
ZywKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiBxdWVyeSwK
LSAgICAgICAgICAgICAgICBTb3VwQ2xpZW50Q29udGV4dCogY29udGV4dCwgZ3BvaW50ZXIgZGF0
YSkKLXsKLSAgICBpZiAobXNnLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7Ci0gICAgICAg
IHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1zZywgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVE
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVz
KG1zZywgU09VUF9TVEFUVVNfT0spOwotCi0gICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvdGVz
dF9sb2FkaW5nX3N0YXR1cyIpIHx8IGdfc3RyX2VxdWFsKHBhdGgsICIvdGVzdF9sb2FkaW5nX3N0
YXR1czIiKSkKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1zZy0+cmVzcG9uc2Vf
Ym9keSwgU09VUF9NRU1PUllfU1RBVElDLCBIVE1MX1NUUklORywgc3RybGVuKEhUTUxfU1RSSU5H
KSk7Ci0gICAgZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi90ZXN0X2xvYWRfZXJyb3IiKSkg
ewotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX0NBTlRf
Q09OTkVDVCk7Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3Rlc3RfbG9hZGlu
Z19jYW5jZWxsZWQiKSkgewotICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19zZXRfZW5jb2Rp
bmcobXNnLT5yZXNwb25zZV9oZWFkZXJzLCBTT1VQX0VOQ09ESU5HX0NIVU5LRUQpOwotICAgICAg
ICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobXNnLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9S
WV9TVEFUSUMsIEhUTUxfU1RSSU5HLCBzdHJsZW4oSFRNTF9TVFJJTkcpKTsKLSAgICAgICAgc291
cF9zZXJ2ZXJfdW5wYXVzZV9tZXNzYWdlKHNlcnZlciwgbXNnKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1zZy0+cmVzcG9uc2VfYm9k
eSk7Ci19Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3Owot
ICAgIEdNYWluTG9vcCAqbG9vcDsKLSAgICBnYm9vbGVhbiBoYXNfYmVlbl9wcm92aXNpb25hbDsK
LSAgICBnYm9vbGVhbiBoYXNfYmVlbl9jb21taXR0ZWQ7Ci0gICAgZ2Jvb2xlYW4gaGFzX2JlZW5f
Zmlyc3RfdmlzdWFsbHlfbm9uX2VtcHR5X2xheW91dDsKLSAgICBnYm9vbGVhbiBoYXNfYmVlbl9m
aW5pc2hlZDsKLSAgICBnYm9vbGVhbiBoYXNfYmVlbl9mYWlsZWQ7Ci0gICAgZ2Jvb2xlYW4gaGFz
X2JlZW5fbG9hZF9lcnJvcjsKLX0gV2ViTG9hZGluZ0ZpeHR1cmU7Ci0KLXN0YXRpYyB2b2lkIHdl
Yl9sb2FkaW5nX2ZpeHR1cmVfc2V0dXAoV2ViTG9hZGluZ0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25z
dHBvaW50ZXIgZGF0YSkKLXsKLSAgICBmaXh0dXJlLT53ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVX
KHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZml4dHVyZS0+bG9vcCA9IGdfbWFpbl9sb29w
X25ldyhOVUxMLCBUUlVFKTsKLSAgICBnX29iamVjdF9yZWZfc2luayhmaXh0dXJlLT53ZWJWaWV3
KTsKLSAgICBmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCA9IEZBTFNFOwotICAgIGZpeHR1
cmUtPmhhc19iZWVuX2NvbW1pdHRlZCA9IEZBTFNFOwotICAgIGZpeHR1cmUtPmhhc19iZWVuX2Zp
cnN0X3Zpc3VhbGx5X25vbl9lbXB0eV9sYXlvdXQgPSBGQUxTRTsKLSAgICBmaXh0dXJlLT5oYXNf
YmVlbl9maW5pc2hlZCA9IEZBTFNFOwotICAgIGZpeHR1cmUtPmhhc19iZWVuX2ZhaWxlZCA9IEZB
TFNFOwotICAgIGZpeHR1cmUtPmhhc19iZWVuX2xvYWRfZXJyb3IgPSBGQUxTRTsKLX0KLQotc3Rh
dGljIHZvaWQgd2ViX2xvYWRpbmdfZml4dHVyZV90ZWFyZG93bihXZWJMb2FkaW5nRml4dHVyZSog
Zml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1
cmUtPndlYlZpZXcpOwotICAgIGdfbWFpbl9sb29wX3VucmVmKGZpeHR1cmUtPmxvb3ApOwotfQot
Ci1zdGF0aWMgY2hhciogZ2V0X3VyaV9mb3JfcGF0aChjb25zdCBjaGFyKiBwYXRoKQotewotICAg
IFNvdXBVUkkqIHVyaTsKLSAgICBjaGFyKiB1cmlfc3RyaW5nOwotCi0gICAgdXJpID0gc291cF91
cmlfbmV3X3dpdGhfYmFzZShiYXNlX3VyaSwgcGF0aCk7Ci0gICAgdXJpX3N0cmluZyA9IHNvdXBf
dXJpX3RvX3N0cmluZyh1cmksIEZBTFNFKTsKLSAgICBzb3VwX3VyaV9mcmVlICh1cmkpOwotCi0g
ICAgcmV0dXJuIHVyaV9zdHJpbmc7Ci19Ci0KLXN0YXRpYyB2b2lkIGxvYWRfZmluaXNoZWRfY2Io
V2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIFdlYktpdFdlYkZyYW1lKiB3ZWJfZnJhbWUsIFdlYkxv
YWRpbmdGaXh0dXJlKiBmaXh0dXJlKQotewotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVu
X3Byb3Zpc2lvbmFsKTsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9jb21taXR0ZWQp
OwotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX2ZpcnN0X3Zpc3VhbGx5X25vbl9lbXB0
eV9sYXlvdXQpOwotCi0gICAgZ19tYWluX2xvb3BfcXVpdChmaXh0dXJlLT5sb29wKTsKLX0KLQot
Ci1zdGF0aWMgdm9pZCBzdGF0dXNfY2hhbmdlZF9jYihHT2JqZWN0KiBvYmplY3QsIEdQYXJhbVNw
ZWMqIHBzcGVjLCBXZWJMb2FkaW5nRml4dHVyZSogZml4dHVyZSkKLXsKLSAgICBXZWJLaXRMb2Fk
U3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMoV0VCS0lUX1dF
Ql9WSUVXKG9iamVjdCkpOwotCi0gICAgc3dpdGNoIChzdGF0dXMpIHsKLSAgICBjYXNlIFdFQktJ
VF9MT0FEX1BST1ZJU0lPTkFMOgotICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5f
cHJvdmlzaW9uYWwpOwotICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fY29tbWl0
dGVkKTsKLSAgICAgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX2ZpcnN0X3Zpc3VhbGx5
X25vbl9lbXB0eV9sYXlvdXQpOwotICAgICAgICBmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25h
bCA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV0VCS0lUX0xPQURfQ09NTUlUVEVE
OgotICAgICAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCk7Ci0gICAg
ICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNfYmVlbl9jb21taXR0ZWQpOwotICAgICAgICBnX2Fz
c2VydCghZml4dHVyZS0+aGFzX2JlZW5fZmlyc3RfdmlzdWFsbHlfbm9uX2VtcHR5X2xheW91dCk7
Ci0gICAgICAgIGZpeHR1cmUtPmhhc19iZWVuX2NvbW1pdHRlZCA9IFRSVUU7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgV0VCS0lUX0xPQURfRklSU1RfVklTVUFMTFlfTk9OX0VNUFRZX0xBWU9V
VDoKLSAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwpOwotICAg
ICAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9jb21taXR0ZWQpOwotICAgICAgICBnX2Fz
c2VydCghZml4dHVyZS0+aGFzX2JlZW5fZmlyc3RfdmlzdWFsbHlfbm9uX2VtcHR5X2xheW91dCk7
Ci0gICAgICAgIGZpeHR1cmUtPmhhc19iZWVuX2ZpcnN0X3Zpc3VhbGx5X25vbl9lbXB0eV9sYXlv
dXQgPSBUUlVFOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdFQktJVF9MT0FEX0ZJTklTSEVE
OgotICAgICAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCk7Ci0gICAg
ICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX2NvbW1pdHRlZCk7Ci0gICAgICAgIGdfYXNz
ZXJ0KGZpeHR1cmUtPmhhc19iZWVuX2ZpcnN0X3Zpc3VhbGx5X25vbl9lbXB0eV9sYXlvdXQpOwot
ICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hl
ZCgpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgdGVzdF9sb2FkaW5nX3N0YXR1cyhXZWJMb2Fk
aW5nRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGNoYXIqIHVy
aV9zdHJpbmc7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl92aWV3X2dldF9sb2Fk
X3N0YXR1cyhmaXh0dXJlLT53ZWJWaWV3KSwgPT0sIFdFQktJVF9MT0FEX1BST1ZJU0lPTkFMKTsK
LQotICAgIGdfb2JqZWN0X2Nvbm5lY3QoR19PQkpFQ1QoZml4dHVyZS0+d2ViVmlldyksCi0gICAg
ICAgICAgICAgICAgICAgICAic2lnbmFsOjpub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFD
SyhzdGF0dXNfY2hhbmdlZF9jYiksIGZpeHR1cmUsCi0gICAgICAgICAgICAgICAgICAgICAic2ln
bmFsOjpsb2FkLWZpbmlzaGVkIiwgR19DQUxMQkFDSyhsb2FkX2ZpbmlzaGVkX2NiKSwgZml4dHVy
ZSwKLSAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotCi0gICAgdXJpX3N0cmluZyA9IGdldF91
cmlfZm9yX3BhdGgoIi90ZXN0X2xvYWRpbmdfc3RhdHVzIik7Ci0KLSAgICAvKiBsb2FkX3VyaSB3
aWxsIHRyaWdnZXIgdGhlIG5hdmlnYXRpb24tcG9saWN5LWRlY2lzaW9uLXJlcXVlc3RlZAotICAg
ICAqIHNpZ25hbCBlbWlzc2lvbjsKLSAgICAgKi8KLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91
cmkoZml4dHVyZS0+d2ViVmlldywgdXJpX3N0cmluZyk7Ci0gICAgZ19mcmVlKHVyaV9zdHJpbmcp
OwotCi0gICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1cmUtPmxvb3ApOwotfQotCi1zdGF0aWMgdm9p
ZCBsb2FkX2Vycm9yX3N0YXR1c19jaGFuZ2VkX2NiKEdPYmplY3QqIG9iamVjdCwgR1BhcmFtU3Bl
YyogcHNwZWMsIFdlYkxvYWRpbmdGaXh0dXJlKiBmaXh0dXJlKQotewotICAgIFdlYktpdExvYWRT
dGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyhXRUJLSVRfV0VC
X1ZJRVcob2JqZWN0KSk7Ci0KLSAgICBzd2l0Y2goc3RhdHVzKSB7Ci0gICAgY2FzZSBXRUJLSVRf
TE9BRF9QUk9WSVNJT05BTDoKLSAgICAgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX3By
b3Zpc2lvbmFsKTsKLSAgICAgICAgZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwgPSBUUlVF
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdFQktJVF9MT0FEX0NPTU1JVFRFRDoKLSAgICAg
ICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX2NvbW1pdHRlZCk7Ci0gICAgICAgIGZpeHR1
cmUtPmhhc19iZWVuX2NvbW1pdHRlZCA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
V0VCS0lUX0xPQURfRklOSVNIRUQ6Ci0gICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVu
X3Byb3Zpc2lvbmFsKTsKLSAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fbG9hZF9l
cnJvcik7Ci0gICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX2ZhaWxlZCk7Ci0gICAg
ICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNfYmVlbl9maW5pc2hlZCk7Ci0gICAgICAgIGZpeHR1
cmUtPmhhc19iZWVuX2ZpbmlzaGVkID0gVFJVRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBX
RUJLSVRfTE9BRF9GQUlMRUQ6Ci0gICAgICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNfYmVlbl9m
YWlsZWQpOwotICAgICAgICBmaXh0dXJlLT5oYXNfYmVlbl9mYWlsZWQgPSBUUlVFOwotICAgICAg
ICBnX21haW5fbG9vcF9xdWl0KGZpeHR1cmUtPmxvb3ApOwotICAgICAgICBicmVhazsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBsb2Fk
X2Vycm9yX2NiKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFdlYkZyYW1lKiBmcmFtZSwg
Y29uc3QgY2hhciogdXJpLCBHRXJyb3IgKmVycm9yLCBXZWJMb2FkaW5nRml4dHVyZSogZml4dHVy
ZSkKLXsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCk7Ci0gICAg
Z19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX2xvYWRfZXJyb3IpOwotICAgIGZpeHR1cmUtPmhh
c19iZWVuX2xvYWRfZXJyb3IgPSBUUlVFOwotCi0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0
aWMgdm9pZCB0ZXN0X2xvYWRpbmdfZXJyb3IoV2ViTG9hZGluZ0ZpeHR1cmUqIGZpeHR1cmUsIGdj
b25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBjaGFyKiB1cmlfc3RyaW5nOwotCi0gICAgZ190ZXN0
X2J1ZygiMjg4NDIiKTsKLQotICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2ViVmlldywg
ImxvYWQtZXJyb3IiLCBHX0NBTExCQUNLKGxvYWRfZXJyb3JfY2IpLCBmaXh0dXJlKTsKLSAgICBn
X3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwg
R19DQUxMQkFDSyhsb2FkX2Vycm9yX3N0YXR1c19jaGFuZ2VkX2NiKSwgZml4dHVyZSk7Ci0KLSAg
ICB1cmlfc3RyaW5nID0gZ2V0X3VyaV9mb3JfcGF0aCgiL3Rlc3RfbG9hZF9lcnJvciIpOwotICAg
IHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaShmaXh0dXJlLT53ZWJWaWV3LCB1cmlfc3RyaW5nKTsK
LSAgICBnX2ZyZWUodXJpX3N0cmluZyk7Ci0KLSAgICBnX21haW5fbG9vcF9ydW4oZml4dHVyZS0+
bG9vcCk7Ci0KLSAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCk7Ci0g
ICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX2NvbW1pdHRlZCk7Ci0gICAgZ19hc3NlcnQo
Zml4dHVyZS0+aGFzX2JlZW5fbG9hZF9lcnJvcik7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+aGFz
X2JlZW5fZmFpbGVkKTsKLSAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fZmluaXNoZWQp
OwotfQotCi0vKiBDYW5jZWxsZWQgbG9hZCAqLwotCi1zdGF0aWMgZ2Jvb2xlYW4gbG9hZF9jYW5j
ZWxsZWRfY2IoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLCBj
b25zdCBjaGFyKiB1cmksIEdFcnJvciAqZXJyb3IsIFdlYkxvYWRpbmdGaXh0dXJlKiBmaXh0dXJl
KQotewotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsKTsKLSAgICBn
X2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9mYWlsZWQpOwotICAgIGdfYXNzZXJ0KCFmaXh0dXJl
LT5oYXNfYmVlbl9sb2FkX2Vycm9yKTsKLSAgICBnX2Fzc2VydChlcnJvci0+Y29kZSA9PSBXRUJL
SVRfTkVUV09SS19FUlJPUl9DQU5DRUxMRUQpOwotICAgIGZpeHR1cmUtPmhhc19iZWVuX2xvYWRf
ZXJyb3IgPSBUUlVFOwotCi0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBz
dG9wX2xvYWQgKGdwb2ludGVyIGRhdGEpCi17Ci0gICAgd2Via2l0X3dlYl92aWV3X3N0b3BfbG9h
ZGluZyhXRUJLSVRfV0VCX1ZJRVcoZGF0YSkpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3Rh
dGljIHZvaWQgbG9hZF9jYW5jZWxsZWRfc3RhdHVzX2NoYW5nZWRfY2IoR09iamVjdCogb2JqZWN0
LCBHUGFyYW1TcGVjKiBwc3BlYywgV2ViTG9hZGluZ0ZpeHR1cmUqIGZpeHR1cmUpCi17Ci0gICAg
V2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVz
KFdFQktJVF9XRUJfVklFVyhvYmplY3QpKTsKLQotICAgIHN3aXRjaChzdGF0dXMpIHsKLSAgICBj
YXNlIFdFQktJVF9MT0FEX1BST1ZJU0lPTkFMOgotICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+
aGFzX2JlZW5fcHJvdmlzaW9uYWwpOwotICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2Jl
ZW5fZmFpbGVkKTsKLSAgICAgICAgZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwgPSBUUlVF
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdFQktJVF9MT0FEX0NPTU1JVFRFRDoKLSAgICAg
ICAgZ19pZGxlX2FkZCAoc3RvcF9sb2FkLCBvYmplY3QpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIFdFQktJVF9MT0FEX0ZBSUxFRDoKLSAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2Jl
ZW5fcHJvdmlzaW9uYWwpOwotICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fZmFp
bGVkKTsKLSAgICAgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX2xvYWRfZXJyb3IpOwot
ICAgICAgICBmaXh0dXJlLT5oYXNfYmVlbl9mYWlsZWQgPSBUUlVFOwotICAgICAgICBnX21haW5f
bG9vcF9xdWl0KGZpeHR1cmUtPmxvb3ApOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdFQktJ
VF9MT0FEX0ZJTklTSEVEOgotICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAgICAg
ICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXN0YXRp
YyB2b2lkIHRlc3RfbG9hZGluZ19jYW5jZWxsZWQoV2ViTG9hZGluZ0ZpeHR1cmUqIGZpeHR1cmUs
IGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBjaGFyKiB1cmlfc3RyaW5nOwotCi0gICAgZ190
ZXN0X2J1ZygiMjk2NDQiKTsKLQotICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2ViVmll
dywgImxvYWQtZXJyb3IiLCBHX0NBTExCQUNLKGxvYWRfY2FuY2VsbGVkX2NiKSwgZml4dHVyZSk7
Ci0gICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0
YXR1cyIsIEdfQ0FMTEJBQ0sobG9hZF9jYW5jZWxsZWRfc3RhdHVzX2NoYW5nZWRfY2IpLCBmaXh0
dXJlKTsKLQotICAgIHVyaV9zdHJpbmcgPSBnZXRfdXJpX2Zvcl9wYXRoKCIvdGVzdF9sb2FkaW5n
X2NhbmNlbGxlZCIpOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaShmaXh0dXJlLT53ZWJW
aWV3LCB1cmlfc3RyaW5nKTsKLSAgICBnX2ZyZWUodXJpX3N0cmluZyk7Ci0KLSAgICBnX21haW5f
bG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGxvYWRfZ29iYWNrX3N0
YXR1c19jaGFuZ2VkX2NiKEdPYmplY3QqIG9iamVjdCwgR1BhcmFtU3BlYyogcHNwZWMsIFdlYkxv
YWRpbmdGaXh0dXJlKiBmaXh0dXJlKQotewotICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0g
d2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyhXRUJLSVRfV0VCX1ZJRVcob2JqZWN0KSk7
Ci0KLSAgICBzd2l0Y2goc3RhdHVzKSB7Ci0gICAgY2FzZSBXRUJLSVRfTE9BRF9QUk9WSVNJT05B
TDoKLSAgICAgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsKTsKLSAg
ICAgICAgZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwgPSBUUlVFOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIFdFQktJVF9MT0FEX0NPTU1JVFRFRDoKLSAgICAgICAgZ19hc3NlcnQoZml4
dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwpOwotICAgICAgICBmaXh0dXJlLT5oYXNfYmVlbl9j
b21taXR0ZWQgPSBUUlVFOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdFQktJVF9MT0FEX0ZB
SUxFRDoKLSAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBXRUJLSVRfTE9BRF9GSU5JU0hFRDoKLSAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+
aGFzX2JlZW5fcHJvdmlzaW9uYWwpOwotICAgICAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVl
bl9jb21taXR0ZWQpOwotICAgICAgICBmaXh0dXJlLT5oYXNfYmVlbl9maW5pc2hlZCA9IFRSVUU7
Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQoZml4dHVyZS0+bG9vcCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQg
bG9hZF93ZW50YmFja19zdGF0dXNfY2hhbmdlZF9jYihHT2JqZWN0KiBvYmplY3QsIEdQYXJhbVNw
ZWMqIHBzcGVjLCBXZWJMb2FkaW5nRml4dHVyZSogZml4dHVyZSkKLXsKLSAgICBXZWJLaXRMb2Fk
U3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMoV0VCS0lUX1dF
Ql9WSUVXKG9iamVjdCkpOwotICAgIGNoYXIqIHVyaV9zdHJpbmc7Ci0gICAgY2hhciogdXJpX3N0
cmluZzI7Ci0KLSAgICB1cmlfc3RyaW5nID0gZ2V0X3VyaV9mb3JfcGF0aCgiL3Rlc3RfbG9hZGlu
Z19zdGF0dXMiKTsKLSAgICB1cmlfc3RyaW5nMiA9IGdldF91cmlfZm9yX3BhdGgoIi90ZXN0X2xv
YWRpbmdfc3RhdHVzMiIpOwotCi0gICAgc3dpdGNoKHN0YXR1cykgewotICAgIGNhc2UgV0VCS0lU
X0xPQURfUFJPVklTSU9OQUw6Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X3VyaShmaXh0dXJlLT53ZWJWaWV3KSwgPT0sIHVyaV9zdHJpbmcyKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBXRUJLSVRfTE9BRF9DT01NSVRURUQ6Ci0gICAgICAgIGdfYXNzZXJ0
X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaShmaXh0dXJlLT53ZWJWaWV3KSwgPT0sIHVy
aV9zdHJpbmcpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdFQktJVF9MT0FEX0ZBSUxFRDoK
LSAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBXRUJLSVRfTE9BRF9GSU5JU0hFRDoKLSAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93
ZWJfdmlld19nZXRfdXJpKGZpeHR1cmUtPndlYlZpZXcpLCA9PSwgdXJpX3N0cmluZyk7Ci0gICAg
ICAgIGdfbWFpbl9sb29wX3F1aXQoZml4dHVyZS0+bG9vcCk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGdfZnJlZSh1cmlfc3RyaW5n
KTsKLSAgICBnX2ZyZWUodXJpX3N0cmluZzIpOwotfQotCi1zdGF0aWMgdm9pZCBsb2FkX2Vycm9y
X3Rlc3QoV2ViS2l0V2ViVmlldyogd2VidmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLCBjb25z
dCBjaGFyKiB1cmksIEdFcnJvciogZXJyb3IpCi17Ci0gICAgZ19kZWJ1ZygiRXJyb3I6ICVzIiwg
ZXJyb3ItPm1lc3NhZ2UpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X2xvYWRpbmdfZ29iYWNrKFdl
YkxvYWRpbmdGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgY2hh
ciogdXJpX3N0cmluZzsKLQotICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2ViVmlldywg
Im5vdGlmeTo6bG9hZC1zdGF0dXMiLCBHX0NBTExCQUNLKGxvYWRfZ29iYWNrX3N0YXR1c19jaGFu
Z2VkX2NiKSwgZml4dHVyZSk7Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZp
ZXcsICJsb2FkLWVycm9yIiwgR19DQUxMQkFDSyhsb2FkX2Vycm9yX3Rlc3QpLCBmaXh0dXJlKTsK
LQotICAgIHVyaV9zdHJpbmcgPSBnZXRfdXJpX2Zvcl9wYXRoKCIvdGVzdF9sb2FkaW5nX3N0YXR1
cyIpOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaShmaXh0dXJlLT53ZWJWaWV3LCB1cmlf
c3RyaW5nKTsKLSAgICBnX2ZyZWUodXJpX3N0cmluZyk7Ci0KLSAgICBnX21haW5fbG9vcF9ydW4o
Zml4dHVyZS0+bG9vcCk7Ci0KLSAgICBmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCA9IEZB
TFNFOwotICAgIGZpeHR1cmUtPmhhc19iZWVuX2NvbW1pdHRlZCA9IEZBTFNFOwotICAgIGZpeHR1
cmUtPmhhc19iZWVuX2ZpcnN0X3Zpc3VhbGx5X25vbl9lbXB0eV9sYXlvdXQgPSBGQUxTRTsKLSAg
ICBmaXh0dXJlLT5oYXNfYmVlbl9maW5pc2hlZCA9IEZBTFNFOwotICAgIGZpeHR1cmUtPmhhc19i
ZWVuX2ZhaWxlZCA9IEZBTFNFOwotICAgIGZpeHR1cmUtPmhhc19iZWVuX2xvYWRfZXJyb3IgPSBG
QUxTRTsKLQotICAgIHVyaV9zdHJpbmcgPSBnZXRfdXJpX2Zvcl9wYXRoKCIvdGVzdF9sb2FkaW5n
X3N0YXR1czIiKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkoZml4dHVyZS0+d2ViVmll
dywgdXJpX3N0cmluZyk7Ci0gICAgZ19mcmVlKHVyaV9zdHJpbmcpOwotCi0gICAgZ19tYWluX2xv
b3BfcnVuKGZpeHR1cmUtPmxvb3ApOwotCi0gICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVj
dF9ieV9mdW5jKGZpeHR1cmUtPndlYlZpZXcsIGxvYWRfZ29iYWNrX3N0YXR1c19jaGFuZ2VkX2Ni
LCBmaXh0dXJlKTsKLQotICAgIGZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsID0gRkFMU0U7
Ci0gICAgZml4dHVyZS0+aGFzX2JlZW5fY29tbWl0dGVkID0gRkFMU0U7Ci0gICAgZml4dHVyZS0+
aGFzX2JlZW5fZmlyc3RfdmlzdWFsbHlfbm9uX2VtcHR5X2xheW91dCA9IEZBTFNFOwotICAgIGZp
eHR1cmUtPmhhc19iZWVuX2ZpbmlzaGVkID0gRkFMU0U7Ci0gICAgZml4dHVyZS0+aGFzX2JlZW5f
ZmFpbGVkID0gRkFMU0U7Ci0gICAgZml4dHVyZS0+aGFzX2JlZW5fbG9hZF9lcnJvciA9IEZBTFNF
OwotCi0gICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53ZWJWaWV3LCAibm90aWZ5Ojpsb2Fk
LXN0YXR1cyIsIEdfQ0FMTEJBQ0sobG9hZF93ZW50YmFja19zdGF0dXNfY2hhbmdlZF9jYiksIGZp
eHR1cmUpOwotICAgIHdlYmtpdF93ZWJfdmlld19nb19iYWNrKGZpeHR1cmUtPndlYlZpZXcpOwot
Ci0gICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1cmUtPmxvb3ApOwotCi0gICAgZ19zaWduYWxfaGFu
ZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKGZpeHR1cmUtPndlYlZpZXcsIGxvYWRfd2VudGJhY2tf
c3RhdHVzX2NoYW5nZWRfY2IsIGZpeHR1cmUpOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hh
cioqIGFyZ3YpCi17Ci0gICAgU291cFNlcnZlciogc2VydmVyOwotCi0gICAgZ3RrX3Rlc3RfaW5p
dCgmYXJnYywgJmFyZ3YsIE5VTEwpOwotCi0gICAgc2VydmVyID0gc291cF9zZXJ2ZXJfbmV3KFNP
VVBfU0VSVkVSX1BPUlQsIDAsIE5VTEwpOwotICAgIHNvdXBfc2VydmVyX3J1bl9hc3luYyhzZXJ2
ZXIpOwotCi0gICAgc291cF9zZXJ2ZXJfYWRkX2hhbmRsZXIoc2VydmVyLCBOVUxMLCBzZXJ2ZXJf
Y2FsbGJhY2ssIE5VTEwsIE5VTEwpOwotCi0gICAgYmFzZV91cmkgPSBzb3VwX3VyaV9uZXcoImh0
dHA6Ly8xMjcuMC4wLjEvIik7Ci0gICAgc291cF91cmlfc2V0X3BvcnQoYmFzZV91cmksIHNvdXBf
c2VydmVyX2dldF9wb3J0KHNlcnZlcikpOwotCi0gICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy8iKTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2xvYWRpbmcvc3Rh
dHVzIiwKLSAgICAgICAgICAgICAgIFdlYkxvYWRpbmdGaXh0dXJlLCBOVUxMLAotICAgICAgICAg
ICAgICAgd2ViX2xvYWRpbmdfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3RfbG9h
ZGluZ19zdGF0dXMsCi0gICAgICAgICAgICAgICB3ZWJfbG9hZGluZ19maXh0dXJlX3RlYXJkb3du
KTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2xvYWRpbmcvZXJyb3IiLAotICAgICAgICAgICAg
ICAgV2ViTG9hZGluZ0ZpeHR1cmUsIE5VTEwsCi0gICAgICAgICAgICAgICB3ZWJfbG9hZGluZ19m
aXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF9sb2FkaW5nX2Vycm9yLAotICAgICAg
ICAgICAgICAgd2ViX2xvYWRpbmdfZml4dHVyZV90ZWFyZG93bik7Ci0gICAgZ190ZXN0X2FkZCgi
L3dlYmtpdC9sb2FkaW5nL2NhbmNlbGxlZCIsCi0gICAgICAgICAgICAgICBXZWJMb2FkaW5nRml4
dHVyZSwgTlVMTCwKLSAgICAgICAgICAgICAgIHdlYl9sb2FkaW5nX2ZpeHR1cmVfc2V0dXAsCi0g
ICAgICAgICAgICAgICB0ZXN0X2xvYWRpbmdfY2FuY2VsbGVkLAotICAgICAgICAgICAgICAgd2Vi
X2xvYWRpbmdfZml4dHVyZV90ZWFyZG93bik7Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9sb2Fk
aW5nL2dvYmFjayIsCi0gICAgICAgICAgICAgICBXZWJMb2FkaW5nRml4dHVyZSwgTlVMTCwKLSAg
ICAgICAgICAgICAgIHdlYl9sb2FkaW5nX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0
ZXN0X2xvYWRpbmdfZ29iYWNrLAotICAgICAgICAgICAgICAgd2ViX2xvYWRpbmdfZml4dHVyZV90
ZWFyZG93bik7Ci0gICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsKLX0KLQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdG1pbWVoYW5kbGluZy5jIGIvU291cmNlL1dlYktpdC9n
dGsvdGVzdHMvdGVzdG1pbWVoYW5kbGluZy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBiZDhlMWM2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RtaW1l
aGFuZGxpbmcuYworKysgL2Rldi9udWxsCkBAIC0xLDIwMyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA5IEphbiBNaWNoYWVsIEFsb256bwotICogQ29weXJpZ2h0IChDKSAyMDA5IEd1
c3Rhdm8gTm9yb25oYSBTaWx2YQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAidGVzdF91
dGlscy5oIgotCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0j
aW5jbHVkZSA8bGlic291cC9zb3VwLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8
d2Via2l0L3dlYmtpdC5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi1HTWFpbkxvb3AqIGxvb3A7
Ci1Tb3VwU2Vzc2lvbiAqc2Vzc2lvbjsKLWNoYXIqIGJhc2VfdXJpOwotCi0vKiBGb3IgcmVhbCBy
ZXF1ZXN0IHRlc3RpbmcgKi8KLXN0YXRpYyB2b2lkCi1zZXJ2ZXJfY2FsbGJhY2soU291cFNlcnZl
ciAqc2VydmVyLCBTb3VwTWVzc2FnZSAqbXNnLAotICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
ICpwYXRoLCBHSGFzaFRhYmxlICpxdWVyeSwKLSAgICAgICAgICAgICAgICAgU291cENsaWVudENv
bnRleHQgKmNvbnRleHQsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgaWYgKG1zZy0+bWV0aG9kICE9
IFNPVVBfTUVUSE9EX0dFVCkgewotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2cs
IFNPVVBfU1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX09LKTsKLQotICAg
IC8qIFBERiAqLwotICAgIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3BkZiIpKSB7Ci0gICAgICAg
IGNoYXIqIGNvbnRlbnRzOwotICAgICAgICBnc2l6ZSBsZW5ndGg7Ci0gICAgICAgIEdFcnJvciog
ZXJyb3IgPSBOVUxMOwotCi0gICAgICAgIGdfZmlsZV9nZXRfY29udGVudHMoInRlc3QucGRmIiwg
JmNvbnRlbnRzLCAmbGVuZ3RoLCAmZXJyb3IpOwotICAgICAgICBnX2Fzc2VydCghZXJyb3IpOwot
Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtc2ctPnJlc3BvbnNlX2JvZHksIFNP
VVBfTUVNT1JZX1RBS0UsIGNvbnRlbnRzLCBsZW5ndGgpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJf
ZXF1YWwocGF0aCwgIi9odG1sIikpIHsKLSAgICAgICAgY2hhciogY29udGVudHM7Ci0gICAgICAg
IGdzaXplIGxlbmd0aDsKLSAgICAgICAgR0Vycm9yKiBlcnJvciA9IE5VTEw7Ci0KLSAgICAgICAg
Z19maWxlX2dldF9jb250ZW50cygidGVzdC5odG1sIiwgJmNvbnRlbnRzLCAmbGVuZ3RoLCAmZXJy
b3IpOwotICAgICAgICBnX2Fzc2VydCghZXJyb3IpOwotCi0gICAgICAgIHNvdXBfbWVzc2FnZV9i
b2R5X2FwcGVuZChtc2ctPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGNvbnRlbnRz
LCBsZW5ndGgpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi90ZXh0IikpIHsK
LSAgICAgICAgY2hhciogY29udGVudHM7Ci0gICAgICAgIGdzaXplIGxlbmd0aDsKLSAgICAgICAg
R0Vycm9yKiBlcnJvciA9IE5VTEw7Ci0KLSAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBw
ZW5kKG1zZy0+cmVzcG9uc2VfaGVhZGVycywgIkNvbnRlbnQtRGlzcG9zaXRpb24iLCAiYXR0YWNo
bWVudDsgZmlsZW5hbWU9dGVzdC50eHQiKTsKLQotICAgICAgICBnX2ZpbGVfZ2V0X2NvbnRlbnRz
KCJ0ZXN0LnR4dCIsICZjb250ZW50cywgJmxlbmd0aCwgJmVycm9yKTsKLSAgICAgICAgZ19hc3Nl
cnQoIWVycm9yKTsKLQotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobXNnLT5yZXNw
b25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBjb250ZW50cywgbGVuZ3RoKTsKLSAgICB9Ci0K
LSAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtc2ctPnJlc3BvbnNlX2JvZHkpOwotfQot
Ci1zdGF0aWMgdm9pZCBpZGxlX3F1aXRfbG9vcF9jYihXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywg
R1BhcmFtU3BlYyogcHNwZWMsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgaWYgKHdlYmtpdF93ZWJf
dmlld19nZXRfbG9hZF9zdGF0dXMod2ViX3ZpZXcpID09IFdFQktJVF9MT0FEX0ZJTklTSEVEIHx8
Ci0gICAgICAgIHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMod2ViX3ZpZXcpID09IFdF
QktJVF9MT0FEX0ZBSUxFRCkKLSAgICAgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKLX0KLQot
c3RhdGljIGdib29sZWFuIG1pbWVfdHlwZV9wb2xpY3lfZGVjaXNpb25fcmVxdWVzdGVkX2NiKFdl
YktpdFdlYlZpZXcqIHZpZXcsIFdlYktpdFdlYkZyYW1lKiBmcmFtZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXROZXR3b3JrUmVx
dWVzdCogcmVxdWVzdCwgY29uc3QgY2hhciogbWltZV90eXBlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFdlYlBvbGljeURlY2lz
aW9uKiBkZWNpc2lvbiwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBjaGFyKiB0eXBlID0gKGNoYXIq
KWRhdGE7Ci0KLSAgICBpZiAoZ19zdHJfZXF1YWwodHlwZSwgInBkZiIpKSB7Ci0gICAgICAgIGdf
YXNzZXJ0X2NtcHN0cihtaW1lX3R5cGUsID09LCAiYXBwbGljYXRpb24vcGRmIik7Ci0gICAgICAg
IGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX3Nob3dfbWltZV90eXBlKHZpZXcsIG1pbWVf
dHlwZSkpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwodHlwZSwgImh0bWwiKSkgewotICAg
ICAgICBnX2Fzc2VydF9jbXBzdHIobWltZV90eXBlLCA9PSwgInRleHQvaHRtbCIpOwotICAgICAg
ICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfY2FuX3Nob3dfbWltZV90eXBlKHZpZXcsIG1pbWVf
dHlwZSkpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwodHlwZSwgInRleHQiKSkgewotICAg
ICAgICBXZWJLaXROZXR3b3JrUmVzcG9uc2UqIHJlc3BvbnNlID0gd2Via2l0X3dlYl9mcmFtZV9n
ZXRfbmV0d29ya19yZXNwb25zZShmcmFtZSk7Ci0gICAgICAgIFNvdXBNZXNzYWdlKiBtZXNzYWdl
ID0gd2Via2l0X25ldHdvcmtfcmVzcG9uc2VfZ2V0X21lc3NhZ2UocmVzcG9uc2UpOwotICAgICAg
ICBjaGFyKiBkaXNwb3NpdGlvbjsKLQotICAgICAgICBnX2Fzc2VydChtZXNzYWdlKTsKLSAgICAg
ICAgc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X2NvbnRlbnRfZGlzcG9zaXRpb24obWVzc2FnZS0+
cmVzcG9uc2VfaGVhZGVycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJmRpc3Bvc2l0aW9uLCBOVUxMKTsKLSAgICAgICAgZ19vYmplY3RfdW5y
ZWYocmVzcG9uc2UpOwotCi0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cihkaXNwb3NpdGlvbiwgPT0s
ICJhdHRhY2htZW50Iik7Ci0gICAgICAgIGdfZnJlZShkaXNwb3NpdGlvbik7Ci0KLSAgICAgICAg
Z19hc3NlcnRfY21wc3RyKG1pbWVfdHlwZSwgPT0sICJ0ZXh0L3BsYWluIik7Ci0gICAgICAgIGdf
YXNzZXJ0KHdlYmtpdF93ZWJfdmlld19jYW5fc2hvd19taW1lX3R5cGUodmlldywgbWltZV90eXBl
KSk7Ci0gICAgfQotCi0gICAgZ19mcmVlKHR5cGUpOwotCi0gICAgcmV0dXJuIEZBTFNFOwotfQot
Ci1zdGF0aWMgdm9pZCB0ZXN0UmVtb3RlTWltZVR5cGUoY29uc3Qgdm9pZCogZGF0YSkKLXsKLSAg
ICBjb25zdCBjaGFyKiBuYW1lID0gKGNvbnN0IGNoYXIqKSBkYXRhOwotICAgIFdlYktpdFdlYlZp
ZXcqIHZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBn
X29iamVjdF9yZWZfc2luayhHX09CSkVDVCh2aWV3KSk7Ci0KLSAgICBsb29wID0gZ19tYWluX2xv
b3BfbmV3KE5VTEwsIFRSVUUpOwotCi0gICAgZ19vYmplY3RfY29ubmVjdChHX09CSkVDVCh2aWV3
KSwKLSAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6Om5vdGlmeTo6bG9hZC1zdGF0dXMiLCBp
ZGxlX3F1aXRfbG9vcF9jYiwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6Om1p
bWUtdHlwZS1wb2xpY3ktZGVjaXNpb24tcmVxdWVzdGVkIiwgbWltZV90eXBlX3BvbGljeV9kZWNp
c2lvbl9yZXF1ZXN0ZWRfY2IsIGdfc3RyZHVwKG5hbWUpLAotICAgICAgICAgICAgICAgICAgICAg
TlVMTCk7Ci0KLSAgICBjaGFyKiBlZmZlY3RpdmVfdXJpID0gZ19zdHJkdXBfcHJpbnRmKCIlcyVz
IiwgYmFzZV91cmksIG5hbWUpOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh2aWV3LCBl
ZmZlY3RpdmVfdXJpKTsKLSAgICBnX2ZyZWUoZWZmZWN0aXZlX3VyaSk7Ci0KLSAgICBnX21haW5f
bG9vcF9ydW4obG9vcCk7Ci0KLSAgICBnX29iamVjdF91bnJlZih2aWV3KTsKLX0KLQotc3RhdGlj
IHZvaWQgdGVzdExvY2FsTWltZVR5cGUoY29uc3Qgdm9pZCogZGF0YSkKLXsKLSAgICAgY29uc3Qg
Y2hhciogdHlwZU5hbWUgPSAoY29uc3QgY2hhciopIGRhdGE7Ci0gICAgIFdlYktpdFdlYlZpZXcq
IHZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICAgZ19v
YmplY3RfcmVmX3NpbmsoR19PQkpFQ1QodmlldykpOwotCi0gICAgIGxvb3AgPSBnX21haW5fbG9v
cF9uZXcoTlVMTCwgVFJVRSk7Ci0KLSAgICAgZ19vYmplY3RfY29ubmVjdChHX09CSkVDVCh2aWV3
KSwKLSAgICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjpub3RpZnk6OmxvYWQtc3RhdHVzIiwg
aWRsZV9xdWl0X2xvb3BfY2IsIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgInNpZ25hbDo6
bWltZS10eXBlLXBvbGljeS1kZWNpc2lvbi1yZXF1ZXN0ZWQiLCBtaW1lX3R5cGVfcG9saWN5X2Rl
Y2lzaW9uX3JlcXVlc3RlZF9jYiwgZ19zdHJkdXAodHlwZU5hbWUpLAotICAgICAgICAgICAgICAg
ICAgICAgIE5VTEwpOwotCi0gICAgIGdjaGFyKiBmaWxlbmFtZSA9IGdfc3RyZHVwX3ByaW50Zigi
dGVzdC4lcyIsIHR5cGVOYW1lKTsKLSAgICAgR0ZpbGUqIGZpbGUgPSBnX2ZpbGVfbmV3X2Zvcl9w
YXRoKGZpbGVuYW1lKTsKLSAgICAgZ19mcmVlKGZpbGVuYW1lKTsKLQotICAgICBnY2hhciogZmls
ZVVSSSA9IGdfZmlsZV9nZXRfdXJpKGZpbGUpOwotICAgICBnX29iamVjdF91bnJlZihmaWxlKTsK
LQotICAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkodmlldywgZmlsZVVSSSk7Ci0gICAgIGdf
ZnJlZShmaWxlVVJJKTsKLSAKLSAgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotICAgICBnX29i
amVjdF91bnJlZih2aWV3KTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQot
ewotICAgIFNvdXBTZXJ2ZXIqIHNlcnZlcjsKLSAgICBTb3VwVVJJKiBzb3VwX3VyaTsKLQotICAg
IGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLQotICAgIC8qIEhvcGVmdWxseSBt
YWtlIHRlc3QgaW5kZXBlbmRlbnQgb2YgdGhlIHBhdGggaXQncyBjYWxsZWQgZnJvbS4gKi8KLSAg
ICB0ZXN0dXRpbHNfcmVsYXRpdmVfY2hkaXIoIlNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Jlc291
cmNlcy90ZXN0Lmh0bWwiLCBhcmd2WzBdKTsKLQotICAgIHNlcnZlciA9IHNvdXBfc2VydmVyX25l
dyhTT1VQX1NFUlZFUl9QT1JULCAwLCBOVUxMKTsKLSAgICBzb3VwX3NlcnZlcl9ydW5fYXN5bmMo
c2VydmVyKTsKLQotICAgIHNvdXBfc2VydmVyX2FkZF9oYW5kbGVyKHNlcnZlciwgTlVMTCwgc2Vy
dmVyX2NhbGxiYWNrLCBOVUxMLCBOVUxMKTsKLQotICAgIHNvdXBfdXJpID0gc291cF91cmlfbmV3
KCJodHRwOi8vMTI3LjAuMC4xLyIpOwotICAgIHNvdXBfdXJpX3NldF9wb3J0KHNvdXBfdXJpLCBz
b3VwX3NlcnZlcl9nZXRfcG9ydChzZXJ2ZXIpKTsKLQotICAgIGJhc2VfdXJpID0gc291cF91cmlf
dG9fc3RyaW5nKHNvdXBfdXJpLCBGQUxTRSk7Ci0gICAgc291cF91cmlfZnJlZShzb3VwX3VyaSk7
Ci0KLSAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwotICAg
IGdfdGVzdF9hZGRfZGF0YV9mdW5jKCIvd2Via2l0L21pbWUvcmVtb3RlLVBERiIsICJwZGYiLCB0
ZXN0UmVtb3RlTWltZVR5cGUpOwotICAgIGdfdGVzdF9hZGRfZGF0YV9mdW5jKCIvd2Via2l0L21p
bWUvcmVtb3RlLUhUTUwiLCAiaHRtbCIsIHRlc3RSZW1vdGVNaW1lVHlwZSk7Ci0gICAgZ190ZXN0
X2FkZF9kYXRhX2Z1bmMoIi93ZWJraXQvbWltZS9yZW1vdGUtVEVYVCIsICJ0ZXh0IiwgdGVzdFJl
bW90ZU1pbWVUeXBlKTsKLSAgICBnX3Rlc3RfYWRkX2RhdGFfZnVuYygiL3dlYmtpdC9taW1lL2xv
Y2FsLVBERiIsICJwZGYiLCB0ZXN0TG9jYWxNaW1lVHlwZSk7Ci0gICAgZ190ZXN0X2FkZF9kYXRh
X2Z1bmMoIi93ZWJraXQvbWltZS9sb2NhbC1IVE1MIiwgImh0bWwiLCB0ZXN0TG9jYWxNaW1lVHlw
ZSk7Ci0gICAgZ190ZXN0X2FkZF9kYXRhX2Z1bmMoIi93ZWJraXQvbWltZS9sb2NhbC1URVhUIiwg
InRleHQiLCB0ZXN0TG9jYWxNaW1lVHlwZSk7Ci0KLSAgICByZXR1cm4gZ190ZXN0X3J1bigpOwot
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdG5ldHdvcmtyZXF1ZXN0
LmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0bmV0d29ya3JlcXVlc3QuYwpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWIyYzkwZi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2d0ay90ZXN0cy90ZXN0bmV0d29ya3JlcXVlc3QuYworKysgL2Rldi9udWxsCkBAIC0xLDk2
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR3VzdGF2byBOb3JvbmhhIFNpbHZh
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHVuaXN0
ZC5oPgotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgotI2luY2x1
ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDx3ZWJraXQvd2Vi
a2l0Lmg+Ci0KLXN0YXRpYyB2b2lkIHRlc3RfbmV0d29ya19yZXF1ZXN0X2NyZWF0ZV9kZXN0cm95
KCkKLXsKLSAgICBXZWJLaXROZXR3b3JrUmVxdWVzdCogcmVxdWVzdDsKLSAgICBTb3VwTWVzc2Fn
ZSogbWVzc2FnZTsKLQotICAgIC8qIFRlc3QgY3JlYXRpb24gd2l0aCBVUkkgKi8KLSAgICByZXF1
ZXN0ID0gV0VCS0lUX05FVFdPUktfUkVRVUVTVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfTkVU
V09SS19SRVFVRVNULCAidXJpIiwgImh0dHA6Ly9kZWJpYW4ub3JnLyIsIE5VTEwpKTsKLSAgICBn
X2Fzc2VydChXRUJLSVRfSVNfTkVUV09SS19SRVFVRVNUKHJlcXVlc3QpKTsKLSAgICBtZXNzYWdl
ID0gd2Via2l0X25ldHdvcmtfcmVxdWVzdF9nZXRfbWVzc2FnZShyZXF1ZXN0KTsKLSAgICBnX2Fz
c2VydCghbWVzc2FnZSk7Ci0gICAgZ19vYmplY3RfdW5yZWYocmVxdWVzdCk7Ci0KLSAgICAvKiBU
ZXN0IGNyZWF0aW9uIHdpdGggU291cE1lc3NhZ2UgKi8KLSAgICBtZXNzYWdlID0gc291cF9tZXNz
YWdlX25ldygiR0VUIiwgImh0dHA6Ly9kZWJpYW4ub3JnLyIpOwotICAgIHJlcXVlc3QgPSBXRUJL
SVRfTkVUV09SS19SRVFVRVNUKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9ORVRXT1JLX1JFUVVF
U1QsICJtZXNzYWdlIiwgbWVzc2FnZSwgTlVMTCkpOwotICAgIGdfYXNzZXJ0KFdFQktJVF9JU19O
RVRXT1JLX1JFUVVFU1QocmVxdWVzdCkpOwotICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVCht
ZXNzYWdlKS0+cmVmX2NvdW50LCA9PSwgMik7Ci0gICAgZ19vYmplY3RfdW5yZWYocmVxdWVzdCk7
Ci0gICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKG1lc3NhZ2UpLT5yZWZfY291bnQsID09LCAx
KTsKLSAgICBnX29iamVjdF91bnJlZihtZXNzYWdlKTsKLQotICAgIC8qIFRlc3QgY3JlYXRpb24g
d2l0aCBib3RoIFNvdXBNZXNzYWdlIGFuZCBVUkkgKi8KLSAgICBtZXNzYWdlID0gc291cF9tZXNz
YWdlX25ldygiR0VUIiwgImh0dHA6Ly9kZWJpYW4ub3JnLyIpOwotICAgIHJlcXVlc3QgPSBXRUJL
SVRfTkVUV09SS19SRVFVRVNUKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9ORVRXT1JLX1JFUVVF
U1QsICJtZXNzYWdlIiwgbWVzc2FnZSwgInVyaSIsICJodHRwOi8vZ25vbWUub3JnLyIsIE5VTEwp
KTsKLSAgICBnX2Fzc2VydChXRUJLSVRfSVNfTkVUV09SS19SRVFVRVNUKHJlcXVlc3QpKTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QobWVzc2FnZSktPnJlZl9jb3VudCwgPT0sIDIpOwot
ICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfbmV0d29ya19yZXF1ZXN0X2dldF91cmkocmVxdWVz
dCksID09LCAiaHR0cDovL2dub21lLm9yZy8iKTsKLSAgICBnX29iamVjdF91bnJlZihyZXF1ZXN0
KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QobWVzc2FnZSktPnJlZl9jb3VudCwgPT0s
IDEpOwotICAgIGdfb2JqZWN0X3VucmVmKG1lc3NhZ2UpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0
X25ldHdvcmtfcmVxdWVzdF9wcm9wZXJ0aWVzKCkKLXsKLSAgICBXZWJLaXROZXR3b3JrUmVxdWVz
dCogcmVxdWVzdDsKLSAgICBTb3VwTWVzc2FnZSogbWVzc2FnZTsKLSAgICBnY2hhciogc291cFVS
STsKLQotICAgIC8qIFRlc3QgVVJJIGlzIHNldCBjb3JyZWN0bHkgd2hlbiBjcmVhdGluZyB3aXRo
IFVSSSAqLwotICAgIHJlcXVlc3QgPSB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X25ldygiaHR0cDov
L2RlYmlhbi5vcmcvIik7Ci0gICAgZ19hc3NlcnQoV0VCS0lUX0lTX05FVFdPUktfUkVRVUVTVChy
ZXF1ZXN0KSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfZ2V0
X3VyaShyZXF1ZXN0KSwgPT0sICJodHRwOi8vZGViaWFuLm9yZy8iKTsKLSAgICBnX29iamVjdF91
bnJlZihyZXF1ZXN0KTsKLQotICAgIC8qIFRlc3QgVVJJIGlzIHNldCBjb3JyZWN0bHkgd2hlbiBj
cmVhdGluZyB3aXRoIE1lc3NhZ2UgKi8KLSAgICBtZXNzYWdlID0gc291cF9tZXNzYWdlX25ldygi
R0VUIiwgImh0dHA6Ly9kZWJpYW4ub3JnLyIpOwotICAgIHJlcXVlc3QgPSBXRUJLSVRfTkVUV09S
S19SRVFVRVNUKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9ORVRXT1JLX1JFUVVFU1QsICJtZXNz
YWdlIiwgbWVzc2FnZSwgTlVMTCkpOwotICAgIGdfYXNzZXJ0KFdFQktJVF9JU19ORVRXT1JLX1JF
UVVFU1QocmVxdWVzdCkpOwotICAgIGdfb2JqZWN0X3VucmVmKG1lc3NhZ2UpOwotCi0gICAgbWVz
c2FnZSA9IHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfZ2V0X21lc3NhZ2UocmVxdWVzdCk7Ci0gICAg
c291cFVSSSA9IHNvdXBfdXJpX3RvX3N0cmluZyhzb3VwX21lc3NhZ2VfZ2V0X3VyaShtZXNzYWdl
KSwgRkFMU0UpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihzb3VwVVJJLCA9PSwgImh0dHA6Ly9kZWJp
YW4ub3JnLyIpOwotICAgIGdfZnJlZShzb3VwVVJJKTsKLQotICAgIGdfYXNzZXJ0X2NtcHN0cih3
ZWJraXRfbmV0d29ya19yZXF1ZXN0X2dldF91cmkocmVxdWVzdCksID09LCAiaHR0cDovL2RlYmlh
bi5vcmcvIik7Ci0gICAgZ19vYmplY3RfdW5yZWYocmVxdWVzdCk7Ci19Ci0KLWludCBtYWluKGlu
dCBhcmdjLCBjaGFyKiogYXJndikKLXsKLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwg
TlVMTCk7Ci0KLSAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIp
OwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9uZXR3b3JrcmVxdWVzdC9jcmVhdGVkZXN0
cm95IiwgdGVzdF9uZXR3b3JrX3JlcXVlc3RfY3JlYXRlX2Rlc3Ryb3kpOwotICAgIGdfdGVzdF9h
ZGRfZnVuYygiL3dlYmtpdC9uZXR3b3JrcmVxdWVzdC9wcm9wZXJ0aWVzIiwgdGVzdF9uZXR3b3Jr
X3JlcXVlc3RfcHJvcGVydGllcyk7Ci0gICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0bmV0d29ya3Jlc3BvbnNlLmMgYi9T
b3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0bmV0d29ya3Jlc3BvbnNlLmMKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGI4MDZhYTEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9n
dGsvdGVzdHMvdGVzdG5ldHdvcmtyZXNwb25zZS5jCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHdXN0YXZvIE5vcm9uaGEgU2lsdmEKLSAq
IENvcHlyaWdodCAoQykgMjAwOSBDb2xsYWJvcmEgTHRkLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgot
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxnbGliLmg+
Ci0jaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVk
ZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgotCi1zdGF0aWMgdm9pZCB0
ZXN0X25ldHdvcmtfcmVzcG9uc2VfY3JlYXRlX2Rlc3Ryb3koKQotewotICAgIFdlYktpdE5ldHdv
cmtSZXNwb25zZSogcmVzcG9uc2U7Ci0gICAgU291cE1lc3NhZ2UqIG1lc3NhZ2U7Ci0KLSAgICAv
KiBUZXN0IGNyZWF0aW9uIHdpdGggVVJJICovCi0gICAgcmVzcG9uc2UgPSBXRUJLSVRfTkVUV09S
S19SRVNQT05TRShnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfTkVUV09SS19SRVNQT05TRSwgInVy
aSIsICJodHRwOi8vZGViaWFuLm9yZy8iLCBOVUxMKSk7Ci0gICAgZ19hc3NlcnQoV0VCS0lUX0lT
X05FVFdPUktfUkVTUE9OU0UocmVzcG9uc2UpKTsKLSAgICBtZXNzYWdlID0gd2Via2l0X25ldHdv
cmtfcmVzcG9uc2VfZ2V0X21lc3NhZ2UocmVzcG9uc2UpOwotICAgIGdfYXNzZXJ0KCFtZXNzYWdl
KTsKLSAgICBnX29iamVjdF91bnJlZihyZXNwb25zZSk7Ci0KLSAgICAvKiBUZXN0IGNyZWF0aW9u
IHdpdGggU291cE1lc3NhZ2UgKi8KLSAgICBtZXNzYWdlID0gc291cF9tZXNzYWdlX25ldygiR0VU
IiwgImh0dHA6Ly9kZWJpYW4ub3JnLyIpOwotICAgIHJlc3BvbnNlID0gV0VCS0lUX05FVFdPUktf
UkVTUE9OU0UoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX05FVFdPUktfUkVTUE9OU0UsICJtZXNz
YWdlIiwgbWVzc2FnZSwgTlVMTCkpOwotICAgIGdfYXNzZXJ0KFdFQktJVF9JU19ORVRXT1JLX1JF
U1BPTlNFKHJlc3BvbnNlKSk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKG1lc3NhZ2Up
LT5yZWZfY291bnQsID09LCAyKTsKLSAgICBnX29iamVjdF91bnJlZihyZXNwb25zZSk7Ci0gICAg
Z19hc3NlcnRfY21waW50KEdfT0JKRUNUKG1lc3NhZ2UpLT5yZWZfY291bnQsID09LCAxKTsKLSAg
ICBnX29iamVjdF91bnJlZihtZXNzYWdlKTsKLQotICAgIC8qIFRlc3QgY3JlYXRpb24gd2l0aCBi
b3RoIFNvdXBNZXNzYWdlIGFuZCBVUkkgKi8KLSAgICBtZXNzYWdlID0gc291cF9tZXNzYWdlX25l
dygiR0VUIiwgImh0dHA6Ly9kZWJpYW4ub3JnLyIpOwotICAgIHJlc3BvbnNlID0gV0VCS0lUX05F
VFdPUktfUkVTUE9OU0UoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX05FVFdPUktfUkVTUE9OU0Us
ICJtZXNzYWdlIiwgbWVzc2FnZSwgInVyaSIsICJodHRwOi8vZ25vbWUub3JnLyIsIE5VTEwpKTsK
LSAgICBnX2Fzc2VydChXRUJLSVRfSVNfTkVUV09SS19SRVNQT05TRShyZXNwb25zZSkpOwotICAg
IGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChtZXNzYWdlKS0+cmVmX2NvdW50LCA9PSwgMik7Ci0g
ICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9uZXR3b3JrX3Jlc3BvbnNlX2dldF91cmkocmVzcG9u
c2UpLCA9PSwgImh0dHA6Ly9nbm9tZS5vcmcvIik7Ci0gICAgZ19vYmplY3RfdW5yZWYocmVzcG9u
c2UpOwotICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChtZXNzYWdlKS0+cmVmX2NvdW50LCA9
PSwgMSk7Ci0gICAgZ19vYmplY3RfdW5yZWYobWVzc2FnZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRl
c3RfbmV0d29ya19yZXNwb25zZV9wcm9wZXJ0aWVzKCkKLXsKLSAgICBXZWJLaXROZXR3b3JrUmVz
cG9uc2UqIHJlc3BvbnNlOwotICAgIFNvdXBNZXNzYWdlKiBtZXNzYWdlOwotICAgIGdjaGFyKiBz
b3VwVVJJOwotCi0gICAgLyogVGVzdCBVUkkgaXMgc2V0IGNvcnJlY3RseSB3aGVuIGNyZWF0aW5n
IHdpdGggVVJJICovCi0gICAgcmVzcG9uc2UgPSB3ZWJraXRfbmV0d29ya19yZXNwb25zZV9uZXco
Imh0dHA6Ly9kZWJpYW4ub3JnLyIpOwotICAgIGdfYXNzZXJ0KFdFQktJVF9JU19ORVRXT1JLX1JF
U1BPTlNFKHJlc3BvbnNlKSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9uZXR3b3JrX3Jl
c3BvbnNlX2dldF91cmkocmVzcG9uc2UpLCA9PSwgImh0dHA6Ly9kZWJpYW4ub3JnLyIpOwotICAg
IGdfb2JqZWN0X3VucmVmKHJlc3BvbnNlKTsKLQotICAgIC8qIFRlc3QgVVJJIGlzIHNldCBjb3Jy
ZWN0bHkgd2hlbiBjcmVhdGluZyB3aXRoIE1lc3NhZ2UgKi8KLSAgICBtZXNzYWdlID0gc291cF9t
ZXNzYWdlX25ldygiR0VUIiwgImh0dHA6Ly9kZWJpYW4ub3JnLyIpOwotICAgIHJlc3BvbnNlID0g
V0VCS0lUX05FVFdPUktfUkVTUE9OU0UoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX05FVFdPUktf
UkVTUE9OU0UsICJtZXNzYWdlIiwgbWVzc2FnZSwgTlVMTCkpOwotICAgIGdfYXNzZXJ0KFdFQktJ
VF9JU19ORVRXT1JLX1JFU1BPTlNFKHJlc3BvbnNlKSk7Ci0gICAgZ19vYmplY3RfdW5yZWYobWVz
c2FnZSk7Ci0KLSAgICBtZXNzYWdlID0gd2Via2l0X25ldHdvcmtfcmVzcG9uc2VfZ2V0X21lc3Nh
Z2UocmVzcG9uc2UpOwotICAgIHNvdXBVUkkgPSBzb3VwX3VyaV90b19zdHJpbmcoc291cF9tZXNz
YWdlX2dldF91cmkobWVzc2FnZSksIEZBTFNFKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc291cFVS
SSwgPT0sICJodHRwOi8vZGViaWFuLm9yZy8iKTsKLSAgICBnX2ZyZWUoc291cFVSSSk7Ci0KLSAg
ICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X25ldHdvcmtfcmVzcG9uc2VfZ2V0X3VyaShyZXNwb25z
ZSksID09LCAiaHR0cDovL2RlYmlhbi5vcmcvIik7Ci0gICAgZ19vYmplY3RfdW5yZWYocmVzcG9u
c2UpOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCi17Ci0gICAgZ3RrX3Rl
c3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOwotCi0gICAgZ190ZXN0X2J1Z19iYXNlKCJodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvbmV0
d29ya3Jlc3BvbnNlL2NyZWF0ZWRlc3Ryb3kiLCB0ZXN0X25ldHdvcmtfcmVzcG9uc2VfY3JlYXRl
X2Rlc3Ryb3kpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9uZXR3b3JrcmVzcG9uc2Uv
cHJvcGVydGllcyIsIHRlc3RfbmV0d29ya19yZXNwb25zZV9wcm9wZXJ0aWVzKTsKLSAgICByZXR1
cm4gZ190ZXN0X3J1biAoKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3Rz
L3Rlc3R3ZWJiYWNrZm9yd2FyZGxpc3QuYyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3
ZWJiYWNrZm9yd2FyZGxpc3QuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzc4MmQ0
MC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2ViYmFja2Zvcndh
cmRsaXN0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0g
KgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0g
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3ZWJr
aXQvd2Via2l0Lmg+Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1f
bGlmZXRpbWUodm9pZCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OwotICAgIFdlYktp
dFdlYkJhY2tGb3J3YXJkTGlzdCogYmFja0ZvcndhcmRMaXN0OwotICAgIFdlYktpdFdlYkhpc3Rv
cnlJdGVtKiBjdXJyZW50SXRlbTsKLSAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogZm9yd2FyZEl0
ZW07Ci0gICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGJhY2tJdGVtOwotICAgIFdlYktpdFdlYkhp
c3RvcnlJdGVtKiBudGhJdGVtOwotICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBpdGVtMTsKLSAg
ICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogaXRlbTI7Ci0gICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0q
IGl0ZW0zOwotICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBpdGVtNDsKLSAgICBHTGlzdCogYmFj
a0xpc3QgPSBOVUxMOwotICAgIEdMaXN0KiBmb3J3YXJkTGlzdCA9IE5VTEw7Ci0gICAgZ190ZXN0
X2J1ZygiMTk4OTgiKTsKLQotICAgIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dl
Yl92aWV3X25ldygpKTsKLSAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKLSAgICBiYWNr
Rm9yd2FyZExpc3QgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2JhY2tfZm9yd2FyZF9saXN0KHdlYlZp
ZXcpOwotICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChiYWNrRm9yd2FyZExpc3QpLT5yZWZf
Y291bnQsID09LCAxKTsKLQotICAgIC8qIGFkZCB0ZXN0IGl0ZW1zICovCi0gICAgaXRlbTEgPSB3
ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9uZXdfd2l0aF9kYXRhKCJodHRwOi8vZXhhbXBsZS5jb20v
MS8iLCAiU2l0ZSAxIik7Ci0gICAgd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9hZGRfaXRl
bShiYWNrRm9yd2FyZExpc3QsIGl0ZW0xKTsKLSAgICBnX29iamVjdF91bnJlZihpdGVtMSk7Ci0K
LSAgICBpdGVtMiA9IHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX25ld193aXRoX2RhdGEoImh0dHA6
Ly9leGFtcGxlLmNvbS8yLyIsICJTaXRlIDIiKTsKLSAgICB3ZWJraXRfd2ViX2JhY2tfZm9yd2Fy
ZF9saXN0X2FkZF9pdGVtKGJhY2tGb3J3YXJkTGlzdCwgaXRlbTIpOwotICAgIGdfb2JqZWN0X3Vu
cmVmKGl0ZW0yKTsKLQotICAgIGl0ZW0zID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dp
dGhfZGF0YSgiaHR0cDovL2V4YW1wbGUuY29tLzMvIiwgIlNpdGUgMyIpOwotICAgIHdlYmtpdF93
ZWJfYmFja19mb3J3YXJkX2xpc3RfYWRkX2l0ZW0oYmFja0ZvcndhcmRMaXN0LCBpdGVtMyk7Ci0g
ICAgZ19vYmplY3RfdW5yZWYoaXRlbTMpOwotCi0gICAgaXRlbTQgPSB3ZWJraXRfd2ViX2hpc3Rv
cnlfaXRlbV9uZXdfd2l0aF9kYXRhKCJodHRwOi8vZXhhbXBsZS5jb20vNC8iLCAiU2l0ZSA0Iik7
Ci0gICAgd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9hZGRfaXRlbShiYWNrRm9yd2FyZExp
c3QsIGl0ZW00KTsKLSAgICBnX29iamVjdF91bnJlZihpdGVtNCk7Ci0KLSAgICAvKiBtYWtlIHN1
cmUgdGhlc2UgZnVuY3Rpb25zIGRvbid0IGFkZCB1bm5lY2Vzc2FyeSByZWYgdG8gdGhlIGhpc3Rv
cnkgaXRlbSAqLwotICAgIGJhY2tJdGVtID0gd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9n
ZXRfYmFja19pdGVtKGJhY2tGb3J3YXJkTGlzdCk7Ci0gICAgZ19vYmplY3RfcmVmKGJhY2tJdGVt
KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoYmFja0l0ZW0pLT5yZWZfY291bnQsID09
LCAyKTsKLSAgICBnX29iamVjdF91bnJlZihiYWNrSXRlbSk7Ci0gICAgZ19hc3NlcnRfY21waW50
KEdfT0JKRUNUKGJhY2tJdGVtKS0+cmVmX2NvdW50LCA9PSwgMSk7Ci0KLSAgICBjdXJyZW50SXRl
bSA9IHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbShiYWNrRm9y
d2FyZExpc3QpOwotICAgIGdfb2JqZWN0X3JlZihjdXJyZW50SXRlbSk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KEdfT0JKRUNUKGN1cnJlbnRJdGVtKS0+cmVmX2NvdW50LCA9PSwgMik7Ci0gICAgZ19v
YmplY3RfdW5yZWYoY3VycmVudEl0ZW0pOwotICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChj
dXJyZW50SXRlbSktPnJlZl9jb3VudCwgPT0sIDEpOwotCi0gICAgd2Via2l0X3dlYl9iYWNrX2Zv
cndhcmRfbGlzdF9nb190b19pdGVtKGJhY2tGb3J3YXJkTGlzdCwgaXRlbTIpOwotICAgIGZvcndh
cmRJdGVtID0gd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9pdGVtKGJh
Y2tGb3J3YXJkTGlzdCk7Ci0gICAgZ19vYmplY3RfcmVmKGZvcndhcmRJdGVtKTsKLSAgICBnX2Fz
c2VydF9jbXBpbnQoR19PQkpFQ1QoZm9yd2FyZEl0ZW0pLT5yZWZfY291bnQsID09LCAyKTsKLSAg
ICBnX29iamVjdF91bnJlZihmb3J3YXJkSXRlbSk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdfT0JK
RUNUKGZvcndhcmRJdGVtKS0+cmVmX2NvdW50LCA9PSwgMSk7Ci0KLSAgICBudGhJdGVtID0gd2Vi
a2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbnRoX2l0ZW0oYmFja0ZvcndhcmRMaXN0LCAx
KTsKLSAgICBnX29iamVjdF9yZWYobnRoSXRlbSk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdfT0JK
RUNUKG50aEl0ZW0pLT5yZWZfY291bnQsID09LCAyKTsKLSAgICBnX29iamVjdF91bnJlZihudGhJ
dGVtKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QobnRoSXRlbSktPnJlZl9jb3VudCwg
PT0sIDEpOwotCi0gICAgYmFja0xpc3QgPSB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dl
dF9iYWNrX2xpc3Rfd2l0aF9saW1pdChiYWNrRm9yd2FyZExpc3QsIDUpOwotICAgIGZvciAoOyBi
YWNrTGlzdDsgYmFja0xpc3QgPSBiYWNrTGlzdC0+bmV4dCkKLSAgICAgICAgZ19hc3NlcnRfY21w
aW50KEdfT0JKRUNUKGJhY2tMaXN0LT5kYXRhKS0+cmVmX2NvdW50LCA9PSwgMSk7Ci0KLSAgICBm
b3J3YXJkTGlzdCA9IHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlz
dF93aXRoX2xpbWl0KGJhY2tGb3J3YXJkTGlzdCwgNSk7Ci0gICAgZm9yICg7IGZvcndhcmRMaXN0
OyBmb3J3YXJkTGlzdCA9IGZvcndhcmRMaXN0LT5uZXh0KQotICAgICAgICBnX2Fzc2VydF9jbXBp
bnQoR19PQkpFQ1QoZm9yd2FyZExpc3QtPmRhdGEpLT5yZWZfY291bnQsID09LCAxKTsKLQotICAg
IGdfbGlzdF9mcmVlKGZvcndhcmRMaXN0KTsKLSAgICBnX2xpc3RfZnJlZShiYWNrTGlzdCk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKGl0ZW0xKS0+cmVmX2NvdW50LCA9PSwgMSk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKGl0ZW0yKS0+cmVmX2NvdW50LCA9PSwgMSk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKGl0ZW0zKS0+cmVmX2NvdW50LCA9PSwgMSk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKGl0ZW00KS0+cmVmX2NvdW50LCA9PSwgMSk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKGJhY2tGb3J3YXJkTGlzdCktPnJlZl9jb3VudCwg
PT0sIDEpOwotICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwotfQotCi1zdGF0aWMgdm9pZCB0
ZXN0X3dlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3Rfb3JkZXIodm9pZCkKLXsKLSAgICBXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3OwotICAgIFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViQmFj
a0ZvcndhcmRMaXN0OwotICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBpdGVtMTsKLSAgICBXZWJL
aXRXZWJIaXN0b3J5SXRlbSogaXRlbTI7Ci0gICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGl0ZW0z
OwotICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBpdGVtNDsKLSAgICBXZWJLaXRXZWJIaXN0b3J5
SXRlbSogY3VycmVudEl0ZW07Ci0gICAgR0xpc3QqIGJhY2tMaXN0ID0gTlVMTDsKLSAgICBHTGlz
dCogZm9yd2FyZExpc3QgPSBOVUxMOwotICAgIGdfdGVzdF9idWcoIjIyNjk0Iik7Ci0KLSAgICB3
ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19v
YmplY3RfcmVmX3Npbmsod2ViVmlldyk7Ci0KLSAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X21haW50
YWluc19iYWNrX2ZvcndhcmRfbGlzdCh3ZWJWaWV3LCBUUlVFKTsKLSAgICB3ZWJCYWNrRm9yd2Fy
ZExpc3QgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2JhY2tfZm9yd2FyZF9saXN0KHdlYlZpZXcpOwot
ICAgIGdfYXNzZXJ0KHdlYkJhY2tGb3J3YXJkTGlzdCk7Ci0KLSAgICAvLyBDaGVjayB0aGF0IHRo
ZXJlIGlzIG5vIGl0ZW0uCi0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xp
c3RfZ2V0X2N1cnJlbnRfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QpKTsKLSAgICBnX2Fzc2VydF9j
bXBpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9sZW5ndGgod2Vi
QmFja0ZvcndhcmRMaXN0KSwgPT0sIDApOwotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2Vi
X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xlbmd0aCh3ZWJCYWNrRm9yd2FyZExpc3QpLCA9
PSwgMCk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh3ZWJW
aWV3KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayh3ZWJWaWV3
KSk7Ci0KLSAgICAvLyBBZGQgYSBuZXcgaXRlbXMKLSAgICBpdGVtMSA9IHdlYmtpdF93ZWJfaGlz
dG9yeV9pdGVtX25ld193aXRoX2RhdGEoImh0dHA6Ly9leGFtcGxlLmNvbS8xLyIsICJTaXRlIDEi
KTsKLSAgICB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2FkZF9pdGVtKHdlYkJhY2tGb3J3
YXJkTGlzdCwgaXRlbTEpOwotICAgIGdfb2JqZWN0X3VucmVmKGl0ZW0xKTsKLSAgICBnX2Fzc2Vy
dCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2NvbnRhaW5zX2l0ZW0od2ViQmFja0Zvcndh
cmRMaXN0LCBpdGVtMSkpOwotCi0gICAgaXRlbTIgPSB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9u
ZXdfd2l0aF9kYXRhKCJodHRwOi8vZXhhbXBsZS5jb20vMi8iLCAiU2l0ZSAyIik7Ci0gICAgd2Vi
a2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9hZGRfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QsIGl0
ZW0yKTsKLSAgICBnX29iamVjdF91bnJlZihpdGVtMik7Ci0gICAgZ19hc3NlcnQod2Via2l0X3dl
Yl9iYWNrX2ZvcndhcmRfbGlzdF9jb250YWluc19pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCwgaXRl
bTIpKTsKLQotICAgIGl0ZW0zID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dpdGhfZGF0
YSgiaHR0cDovL2V4YW1wbGUuY29tLzMvIiwgIlNpdGUgMyIpOwotICAgIHdlYmtpdF93ZWJfYmFj
a19mb3J3YXJkX2xpc3RfYWRkX2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0LCBpdGVtMyk7Ci0gICAg
Z19vYmplY3RfdW5yZWYoaXRlbTMpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfYmFja19mb3J3
YXJkX2xpc3RfY29udGFpbnNfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QsIGl0ZW0zKSk7Ci0KLSAg
ICBpdGVtNCA9IHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX25ld193aXRoX2RhdGEoImh0dHA6Ly9l
eGFtcGxlLmNvbS80LyIsICJTaXRlIDQiKTsKLSAgICB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9s
aXN0X2FkZF9pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCwgaXRlbTQpOwotICAgIGdfb2JqZWN0X3Vu
cmVmKGl0ZW00KTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2Nv
bnRhaW5zX2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0LCBpdGVtNCkpOwotCi0gICAgLy8gY2hlY2sg
dGhlIGJhY2sgbGlzdCBvcmRlcgotICAgIGJhY2tMaXN0ID0gd2Via2l0X3dlYl9iYWNrX2Zvcndh
cmRfbGlzdF9nZXRfYmFja19saXN0X3dpdGhfbGltaXQod2ViQmFja0ZvcndhcmRMaXN0LCA1KTsK
LSAgICBnX2Fzc2VydChiYWNrTGlzdCk7Ci0KLSAgICBjdXJyZW50SXRlbSA9IFdFQktJVF9XRUJf
SElTVE9SWV9JVEVNKGJhY2tMaXN0LT5kYXRhKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0
X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3VyaShjdXJyZW50SXRlbSksID09LCAiaHR0cDovL2V4YW1w
bGUuY29tLzMvIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVt
X2dldF90aXRsZShjdXJyZW50SXRlbSksID09LCAiU2l0ZSAzIik7Ci0gICAgYmFja0xpc3QgPSBi
YWNrTGlzdC0+bmV4dDsKLQotICAgIGN1cnJlbnRJdGVtID0gV0VCS0lUX1dFQl9ISVNUT1JZX0lU
RU0oYmFja0xpc3QtPmRhdGEpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3Rv
cnlfaXRlbV9nZXRfdXJpKGN1cnJlbnRJdGVtKSwgPT0sICJodHRwOi8vZXhhbXBsZS5jb20vMi8i
KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3RpdGxl
KGN1cnJlbnRJdGVtKSwgPT0sICJTaXRlIDIiKTsKLSAgICBiYWNrTGlzdCA9IGJhY2tMaXN0LT5u
ZXh0OwotCi0gICAgY3VycmVudEl0ZW0gPSBXRUJLSVRfV0VCX0hJU1RPUllfSVRFTShiYWNrTGlz
dC0+ZGF0YSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dl
dF91cmkoY3VycmVudEl0ZW0pLCA9PSwgImh0dHA6Ly9leGFtcGxlLmNvbS8xLyIpOwotICAgIGdf
YXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdGl0bGUoY3VycmVudEl0
ZW0pLCA9PSwgIlNpdGUgMSIpOwotICAgIGdfbGlzdF9mcmVlKGJhY2tMaXN0KTsKLQotICAgIC8v
IGNoZWNrIHRoZSBmb3J3YXJkIGxpc3Qgb3JkZXIKLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3Zp
ZXdfZ29fdG9fYmFja19mb3J3YXJkX2l0ZW0od2ViVmlldywgaXRlbTEpKTsKLSAgICBmb3J3YXJk
TGlzdCA9IHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlzdF93aXRo
X2xpbWl0KHdlYkJhY2tGb3J3YXJkTGlzdCw1KTsKLSAgICBnX2Fzc2VydChmb3J3YXJkTGlzdCk7
Ci0KLSAgICBjdXJyZW50SXRlbSA9IFdFQktJVF9XRUJfSElTVE9SWV9JVEVNKGZvcndhcmRMaXN0
LT5kYXRhKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0
X3VyaShjdXJyZW50SXRlbSksID09LCAiaHR0cDovL2V4YW1wbGUuY29tLzQvIik7Ci0gICAgZ19h
c3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF90aXRsZShjdXJyZW50SXRl
bSksID09LCAiU2l0ZSA0Iik7Ci0gICAgZm9yd2FyZExpc3QgPSBmb3J3YXJkTGlzdC0+bmV4dDsK
LQotICAgIGN1cnJlbnRJdGVtID0gV0VCS0lUX1dFQl9ISVNUT1JZX0lURU0oZm9yd2FyZExpc3Qt
PmRhdGEpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRf
dXJpKGN1cnJlbnRJdGVtKSwgPT0sICJodHRwOi8vZXhhbXBsZS5jb20vMy8iKTsKLSAgICBnX2Fz
c2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3RpdGxlKGN1cnJlbnRJdGVt
KSwgPT0sICJTaXRlIDMiKTsKLSAgICBmb3J3YXJkTGlzdCA9IGZvcndhcmRMaXN0LT5uZXh0Owot
Ci0gICAgY3VycmVudEl0ZW0gPSBXRUJLSVRfV0VCX0hJU1RPUllfSVRFTShmb3J3YXJkTGlzdC0+
ZGF0YSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF91
cmkoY3VycmVudEl0ZW0pLCA9PSwgImh0dHA6Ly9leGFtcGxlLmNvbS8yLyIpOwotICAgIGdfYXNz
ZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdGl0bGUoY3VycmVudEl0ZW0p
LCA9PSwgIlNpdGUgMiIpOwotCi0gICAgZ19saXN0X2ZyZWUoZm9yd2FyZExpc3QpOwotICAgIGdf
b2JqZWN0X3VucmVmKHdlYlZpZXcpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJf
YmFja19mb3J3YXJkX2xpc3RfYWRkX2l0ZW0odm9pZCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3OwotICAgIFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViQmFja0ZvcndhcmRMaXN0
OwotICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBhZGRJdGVtMTsKLSAgICBXZWJLaXRXZWJIaXN0
b3J5SXRlbSogYWRkSXRlbTI7Ci0gICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGJhY2tJdGVtOwot
ICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBjdXJyZW50SXRlbTsKLSAgICBnX3Rlc3RfYnVnKCIy
Mjk4OCIpOwotCi0gICAgd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdf
bmV3KCkpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOwotCi0gICAgd2Via2l0X3dl
Yl92aWV3X3NldF9tYWludGFpbnNfYmFja19mb3J3YXJkX2xpc3Qod2ViVmlldywgVFJVRSk7Ci0g
ICAgd2ViQmFja0ZvcndhcmRMaXN0ID0gd2Via2l0X3dlYl92aWV3X2dldF9iYWNrX2ZvcndhcmRf
bGlzdCh3ZWJWaWV3KTsKLSAgICBnX2Fzc2VydCh3ZWJCYWNrRm9yd2FyZExpc3QpOwotCi0gICAg
Ly8gQ2hlY2sgdGhhdCB0aGVyZSBpcyBubyBpdGVtLgotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2Vi
X2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0KSk7
Ci0gICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2Zv
cndhcmRfbGVuZ3RoKHdlYkJhY2tGb3J3YXJkTGlzdCksID09LCAwKTsKLSAgICBnX2Fzc2VydF9j
bXBpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19sZW5ndGgod2ViQmFj
a0ZvcndhcmRMaXN0KSwgPT0sIDApOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2Fu
X2dvX2ZvcndhcmQod2ViVmlldykpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2Fu
X2dvX2JhY2sod2ViVmlldykpOwotCi0gICAgLy8gQWRkIGEgbmV3IGl0ZW0KLSAgICBhZGRJdGVt
MSA9IHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX25ld193aXRoX2RhdGEoImh0dHA6Ly9leGFtcGxl
LmNvbS8iLCAiQWRkZWQgc2l0ZSIpOwotICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3Rf
YWRkX2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0LCBhZGRJdGVtMSk7Ci0gICAgZ19vYmplY3RfdW5y
ZWYoYWRkSXRlbTEpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3Rf
Y29udGFpbnNfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QsIGFkZEl0ZW0xKSk7Ci0KLSAgICAvLyBD
aGVjayB0aGF0IHRoZSBhZGRlZCBpdGVtIGlzIHRoZSBjdXJyZW50IGl0ZW0uCi0gICAgY3VycmVu
dEl0ZW0gPSB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0od2Vi
QmFja0ZvcndhcmRMaXN0KTsKLSAgICBnX2Fzc2VydChjdXJyZW50SXRlbSk7Ci0gICAgZ19hc3Nl
cnRfY21waW50KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGVuZ3Ro
KHdlYkJhY2tGb3J3YXJkTGlzdCksID09LCAwKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0
X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0
KSwgPT0sIDApOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQo
d2ViVmlldykpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2sod2Vi
VmlldykpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRf
dXJpKGN1cnJlbnRJdGVtKSwgPT0sICJodHRwOi8vZXhhbXBsZS5jb20vIik7Ci0gICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF90aXRsZShjdXJyZW50SXRlbSks
ID09LCAiQWRkZWQgc2l0ZSIpOwotCi0gICAgLy8gQWRkIGFub3RoZXIgaXRlbS4KLSAgICBhZGRJ
dGVtMiA9IHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX25ld193aXRoX2RhdGEoImh0dHA6Ly9leGFt
cGxlLmNvbS8yLyIsICJBZGRlZCBzaXRlIDIiKTsKLSAgICB3ZWJraXRfd2ViX2JhY2tfZm9yd2Fy
ZF9saXN0X2FkZF9pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCwgYWRkSXRlbTIpOwotICAgIGdfb2Jq
ZWN0X3VucmVmKGFkZEl0ZW0yKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2JhY2tfZm9yd2Fy
ZF9saXN0X2NvbnRhaW5zX2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0LCBhZGRJdGVtMikpOwotCi0g
ICAgLy8gQ2hlY2sgdGhhdCB0aGUgYWRkZWQgaXRlbSBpcyBuZXcgY3VycmVudCBpdGVtLgotICAg
IGN1cnJlbnRJdGVtID0gd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9p
dGVtKHdlYkJhY2tGb3J3YXJkTGlzdCk7Ci0gICAgZ19hc3NlcnQoY3VycmVudEl0ZW0pOwotICAg
IGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJk
X2xlbmd0aCh3ZWJCYWNrRm9yd2FyZExpc3QpLCA9PSwgMCk7Ci0gICAgZ19hc3NlcnRfY21waW50
KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGVuZ3RoKHdlYkJhY2tGb3J3
YXJkTGlzdCksID09LCAxKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19m
b3J3YXJkKHdlYlZpZXcpKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2Jh
Y2sod2ViVmlldykpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRl
bV9nZXRfdXJpKGN1cnJlbnRJdGVtKSwgPT0sICJodHRwOi8vZXhhbXBsZS5jb20vMi8iKTsKLSAg
ICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3RpdGxlKGN1cnJl
bnRJdGVtKSwgPT0sICJBZGRlZCBzaXRlIDIiKTsKLQotICAgIGJhY2tJdGVtID0gd2Via2l0X3dl
Yl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCk7Ci0g
ICAgZ19hc3NlcnQoYmFja0l0ZW0pOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hp
c3RvcnlfaXRlbV9nZXRfdXJpKGJhY2tJdGVtKSwgPT0sICJodHRwOi8vZXhhbXBsZS5jb20vIik7
Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF90aXRsZShi
YWNrSXRlbSksID09LCAiQWRkZWQgc2l0ZSIpOwotCi0gICAgLy8gR28gdG8gdGhlIGZpcnN0IGFk
ZGVkIGl0ZW0uCi0gICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dvX3RvX2JhY2tfZm9yd2Fy
ZF9pdGVtKHdlYlZpZXcsIGFkZEl0ZW0xKSk7Ci0gICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93
ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGVuZ3RoKHdlYkJhY2tGb3J3YXJkTGlz
dCksID09LCAxKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRf
bGlzdF9nZXRfYmFja19sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDApOwotICAgIGdf
YXNzZXJ0KHdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh3ZWJWaWV3KSk7Ci0gICAgZ19h
c3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayh3ZWJWaWV3KSk7Ci0KLSAgICBnX29i
amVjdF91bnJlZih3ZWJWaWV3KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX2Jh
Y2tfZm9yd2FyZF9saXN0X2NsZWFyKHZvaWQpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmll
dzsKLSAgICBXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYkJhY2tGb3J3YXJkTGlzdDsKLSAg
ICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogYWRkSXRlbTsKLSAgICBnX3Rlc3RfYnVnKCIzNjE3MyIp
OwotCi0gICAgd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkp
OwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOwotCi0gICAgd2ViQmFja0ZvcndhcmRM
aXN0ID0gd2Via2l0X3dlYl92aWV3X2dldF9iYWNrX2ZvcndhcmRfbGlzdCh3ZWJWaWV3KTsKLSAg
ICBnX2Fzc2VydCh3ZWJCYWNrRm9yd2FyZExpc3QpOwotCi0gICAgLy8gQ2hlY2sgdGhhdCB0aGVy
ZSBpcyBubyBpdGVtLgotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2ViX2JhY2tfZm9yd2Fy
ZF9saXN0X2dldF9mb3J3YXJkX2xlbmd0aCh3ZWJCYWNrRm9yd2FyZExpc3QpLCA9PSwgMCk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tf
bGVuZ3RoKHdlYkJhY2tGb3J3YXJkTGlzdCksID09LCAwKTsKLSAgICBnX2Fzc2VydCghd2Via2l0
X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKHdlYkJhY2tGb3J3YXJkTGlz
dCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQod2ViVmll
dykpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2sod2ViVmlldykp
OwotCi0gICAgLy8gQ2hlY2sgdGhhdCBjbGVhcmluZyB0aGUgZW1wdHkgbGlzdCBkb2VzIG5vdCBt
b2RpZnkgY291bnRlcnMKLSAgICB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2NsZWFyKHdl
YkJhY2tGb3J3YXJkTGlzdCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJfYmFja19m
b3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGVuZ3RoKHdlYkJhY2tGb3J3YXJkTGlzdCksID09LCAw
KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRf
YmFja19sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDApOwotICAgIGdfYXNzZXJ0KCF3
ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0od2ViQmFja0Zvcndh
cmRMaXN0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh3
ZWJWaWV3KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayh3ZWJW
aWV3KSk7Ci0KLSAgICAvLyBBZGQgYSBuZXcgaXRlbQotICAgIGFkZEl0ZW0gPSB3ZWJraXRfd2Vi
X2hpc3RvcnlfaXRlbV9uZXdfd2l0aF9kYXRhKCJodHRwOi8vZXhhbXBsZS5jb20vIiwgIkFkZGVk
IHNpdGUiKTsKLSAgICB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2FkZF9pdGVtKHdlYkJh
Y2tGb3J3YXJkTGlzdCwgYWRkSXRlbSk7Ci0gICAgZ19vYmplY3RfdW5yZWYoYWRkSXRlbSk7Ci0g
ICAgZ19hc3NlcnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9jb250YWluc19pdGVtKHdl
YkJhY2tGb3J3YXJkTGlzdCwgYWRkSXRlbSkpOwotCi0gICAgLy8gQ2hlY2sgdGhhdCBhZnRlciBj
bGVhcmluZyB0aGUgbGlzdCB0aGUgYWRkZWQgaXRlbSBpcyBubyBsb25nZXIgaW4gdGhlIGxpc3QK
LSAgICB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2NsZWFyKHdlYkJhY2tGb3J3YXJkTGlz
dCk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY29udGFpbnNf
aXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QsIGFkZEl0ZW0pKTsKLQotICAgIC8vIENoZWNrIHRoYXQg
YWZ0ZXIgY2xlYXJpbmcgaXQsIHRoZSBsaXN0IGlzIGVtcHR5Ci0gICAgZ19hc3NlcnRfY21waW50
KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGVuZ3RoKHdlYkJhY2tG
b3J3YXJkTGlzdCksID09LCAwKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNr
X2ZvcndhcmRfbGlzdF9nZXRfYmFja19sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDAp
OwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50
X2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmll
d19jYW5fZ29fZm9yd2FyZCh3ZWJWaWV3KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmll
d19jYW5fZ29fYmFjayh3ZWJWaWV3KSk7Ci0KLSAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsK
LX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotewotICAgIGd0a190ZXN0X2lu
aXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLQotICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvIik7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYmJhY2tm
b3J3YXJkbGlzdC9hZGRfaXRlbSIsIHRlc3Rfd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9h
ZGRfaXRlbSk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYmJhY2tmb3J3YXJkbGlz
dC9saXN0X29yZGVyIiwgdGVzdF93ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X29yZGVyKTsK
LSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2ViaGlzdG9yeWl0ZW0vbGlmZXRpbWUiLCB0
ZXN0X3dlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2xpZmV0aW1lKTsKLSAgICBnX3Rlc3RfYWRkX2Z1
bmMoIi93ZWJraXQvd2ViYmFja2ZvcndhcmRsaXN0L2NsZWFyIiwgdGVzdF93ZWJraXRfd2ViX2Jh
Y2tfZm9yd2FyZF9saXN0X2NsZWFyKTsKLSAgICByZXR1cm4gZ190ZXN0X3J1biAoKTsKLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJkYXRhc291cmNlLmMgYi9T
b3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2ViZGF0YXNvdXJjZS5jCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwNTY2MjU3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvZ3Rr
L3Rlc3RzL3Rlc3R3ZWJkYXRhc291cmNlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNDIgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4gTWljaGFlbCBBbG9uem8KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5j
bHVkZSA8d2Via2l0L3dlYmtpdC5oPgotCi1zdGF0aWMgY29uc3QgZ3Nob3J0IGRlZmF1bHRUaW1l
b3V0ID0gMTA7Ci1ndWludCB3YWl0VGltZXI7Ci1nYm9vbGVhbiBzaG91bGRXYWl0OwotCi10eXBl
ZGVmIHN0cnVjdCB7Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldzsKLSAgICBXZWJLaXRXZWJG
cmFtZSogbWFpbkZyYW1lOwotfSBXZWJEYXRhU291cmNlRml4dHVyZTsKLQotc3RhdGljIHZvaWQg
dGVzdF93ZWJraXRfd2ViX2RhdGFfc291cmNlX2dldF9pbml0aWFsX3JlcXVlc3QoKQotewotICAg
IFdlYktpdFdlYlZpZXcqIHZpZXc7Ci0gICAgV2ViS2l0V2ViRnJhbWUqIGZyYW1lOwotICAgIFdl
YktpdFdlYkRhdGFTb3VyY2UqIGRhdGFTb3VyY2U7Ci0gICAgV2ViS2l0TmV0d29ya1JlcXVlc3Qq
IGluaXRpYWxSZXF1ZXN0OwotCi0gICAgdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2Vi
X3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKHZpZXcpOwotICAgIGZyYW1lID0g
d2Via2l0X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKHZpZXcpOwotCi0gICAgV2ViS2l0TmV0d29y
a1JlcXVlc3QqIHJlcXVlc3QgPSB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X25ldygiaHR0cDovL3d3
dy5nb29nbGUuY29tIik7Ci0gICAgd2Via2l0X3dlYl9mcmFtZV9sb2FkX3JlcXVlc3QoZnJhbWUs
IHJlcXVlc3QpOwotICAgIGdfb2JqZWN0X3VucmVmKHJlcXVlc3QpOwotCi0gICAgZGF0YVNvdXJj
ZSA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3Byb3Zpc2lvbmFsX2RhdGFfc291cmNlKGZyYW1lKTsK
LSAgICBnX2Fzc2VydChkYXRhU291cmNlKTsKLSAgICBpbml0aWFsUmVxdWVzdCA9IHdlYmtpdF93
ZWJfZGF0YV9zb3VyY2VfZ2V0X2luaXRpYWxfcmVxdWVzdChkYXRhU291cmNlKTsKLSAgICBnX2Fz
c2VydF9jbXBzdHIod2Via2l0X25ldHdvcmtfcmVxdWVzdF9nZXRfdXJpKGluaXRpYWxSZXF1ZXN0
KSwgPT0sICJodHRwOi8vd3d3Lmdvb2dsZS5jb20vIik7Ci0KLSAgICBnX29iamVjdF91bnJlZih2
aWV3KTsKLX0KLQotc3RhdGljIHZvaWQgbm90aWZ5X2xvYWRfc3RhdHVzX3VucmVhY2hhYmxlX2Ni
KFdlYktpdFdlYlZpZXcqIHZpZXcsIEdQYXJhbVNwZWMqIHBzcGVjLCBHTWFpbkxvb3AqIGxvb3Ap
Ci17Ci0gICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xv
YWRfc3RhdHVzICh2aWV3KTsKLSAgICBXZWJLaXRXZWJGcmFtZSogZnJhbWUgPSB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X21haW5fZnJhbWUodmlldyk7Ci0KLSAgICBnX2Fzc2VydChzdGF0dXMgIT0gV0VC
S0lUX0xPQURfRklOSVNIRUQpOwotCi0gICAgaWYgKHN0YXR1cyAhPSBXRUJLSVRfTE9BRF9GQUlM
RUQpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYktpdFdlYkRhdGFTb3VyY2UqIGRhdGFzb3Vy
Y2UgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9kYXRhX3NvdXJjZShmcmFtZSk7Ci0KLSAgICBnX2Fz
c2VydF9jbXBzdHIoImh0dHA6Ly90aGlzLmhvc3QuZG9lcy5ub3QuZXhpc3QvZG9pcmVhbGx5ZXhp
c3QuaHRtbCIsID09LAotICAgICAgICAgICAgICAgICAgICB3ZWJraXRfd2ViX2RhdGFfc291cmNl
X2dldF91bnJlYWNoYWJsZV91cmkoZGF0YXNvdXJjZSkpOwotCi0gICAgZ19tYWluX2xvb3BfcXVp
dChsb29wKTsKLX0KLQotc3RhdGljIHZvaWQgbm90aWZ5X2xvYWRfc3RhdHVzX2NiKFdlYktpdFdl
YlZpZXcqIHZpZXcsIEdQYXJhbVNwZWMqIHBzcGVjLCBHTWFpbkxvb3AqIGxvb3ApCi17Ci0gICAg
V2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVz
ICh2aWV3KTsKLSAgICBXZWJLaXRXZWJGcmFtZSogZnJhbWUgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X21haW5fZnJhbWUodmlldyk7Ci0gICAgV2ViS2l0V2ViRGF0YVNvdXJjZSogZGF0YVNvdXJjZSA9
IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X2RhdGFfc291cmNlKGZyYW1lKTsKLQotICAgIGlmIChzdGF0
dXMgPT0gV0VCS0lUX0xPQURfQ09NTUlUVEVEKSB7Ci0gICAgICAgIGdfYXNzZXJ0KHdlYmtpdF93
ZWJfZGF0YV9zb3VyY2VfaXNfbG9hZGluZyhkYXRhU291cmNlKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgZWxzZSBpZiAoc3RhdHVzICE9IFdFQktJVF9MT0FEX0ZJTklTSEVEKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvKiBUZXN0IGdldF9yZXF1ZXN0ICovCi0gICAgZ190ZXN0X21l
c3NhZ2UoIlRlc3Rpbmcgd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfcmVxdWVzdCIpOwotICAg
IFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0ID0gd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9n
ZXRfcmVxdWVzdChkYXRhU291cmNlKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X25ldHdv
cmtfcmVxdWVzdF9nZXRfdXJpKHJlcXVlc3QpLCA9PSwgImh0dHA6Ly93d3cud2Via2l0Lm9yZy8i
KTsKLQotICAgIC8qIFRlc3QgZ2V0X21haW5fcmVzb3VyY2UgKi8KLSAgICBnX3Rlc3RfbWVzc2Fn
ZSgiVGVzdGluZyB3ZWJraXRfd2ViX2RhdGFfc291cmNlX2dldF9tYWluX3Jlc291cmNlIik7Ci0g
ICAgV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlID0gd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9n
ZXRfbWFpbl9yZXNvdXJjZShkYXRhU291cmNlKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoInRleHQv
aHRtbCIsID09LCB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF9taW1lX3R5cGUocmVzb3VyY2UpKTsK
LSAgICBnX2Fzc2VydF9jbXBzdHIoImh0dHA6Ly93d3cud2Via2l0Lm9yZy8iLCA9PSwgd2Via2l0
X3dlYl9yZXNvdXJjZV9nZXRfdXJpKHJlc291cmNlKSk7Ci0KLSAgICAvKiBUZXN0IGdldF9kYXRh
LiBXZSBqdXN0IHRlc3QgaWYgZGF0YSBoYXMgY2VydGFpbiBzaXplIGZvciB0aGUgbWVhbiB0aW1l
ICovCi0gICAgZ190ZXN0X21lc3NhZ2UoIlRlc3Rpbmcgd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9n
ZXRfZGF0YSBoYXMgY2VydGFpbiBzaXplIik7Ci0gICAgR1N0cmluZyogZGF0YSA9IHdlYmtpdF93
ZWJfZGF0YV9zb3VyY2VfZ2V0X2RhdGEoZGF0YVNvdXJjZSk7Ci0gICAgZ19hc3NlcnQoZGF0YS0+
bGVuID4gMTAwKTsKLQotICAgIC8qIEZJWE1FOiBBZGQgdGVzdCBmb3IgZ2V0X2VuY29kaW5nICov
Ci0KLSAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gd2Fp
dF90aW1lcl9maXJlZChHTWFpbkxvb3AqIGxvb3ApCi17Ci0gICAgd2FpdFRpbWVyID0gMDsKLSAg
ICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwotCi0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0
aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfZGF0YV9zb3VyY2UoKQotewotICAgIFdlYktpdFdlYlZp
ZXcqIHZpZXc7Ci0gICAgR01haW5Mb29wKiBsb29wOwotCi0gICAgdmlldyA9IFdFQktJVF9XRUJf
VklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKHZpZXcp
OwotICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7Ci0gICAgZ19zaWduYWxf
Y29ubmVjdCh2aWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0sobm90aWZ5X2xv
YWRfc3RhdHVzX2NiKSwgbG9vcCk7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHZpZXcs
ICJodHRwOi8vd3d3LndlYmtpdC5vcmciKTsKLQotICAgIHdhaXRUaW1lciA9IGdfdGltZW91dF9h
ZGRfc2Vjb25kcyhkZWZhdWx0VGltZW91dCwgKEdTb3VyY2VGdW5jKXdhaXRfdGltZXJfZmlyZWQs
IGxvb3ApOwotCi0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAgaWYgKHdhaXRUaW1l
cikKLSAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKHdhaXRUaW1lcik7Ci0KLSAgICB3YWl0VGltZXIg
PSAwOwotCi0gICAgZ19tYWluX2xvb3BfdW5yZWYobG9vcCk7Ci0gICAgZ19vYmplY3RfdW5yZWYo
dmlldyk7Ci19Ci0KLXN0YXRpYyB2b2lkIG5vdGlmeV9sb2FkX3N0YXR1c19saWZldGltZV9jYihX
ZWJLaXRXZWJWaWV3KiB2aWV3LCBHUGFyYW1TcGVjKiBwc3BlYywgR01haW5Mb29wKiBsb29wKQot
ewotICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2Fk
X3N0YXR1cyAodmlldyk7Ci0gICAgV2ViS2l0V2ViRnJhbWUqIGZyYW1lID0gd2Via2l0X3dlYl92
aWV3X2dldF9tYWluX2ZyYW1lKHZpZXcpOwotICAgIFdlYktpdFdlYkRhdGFTb3VyY2UqIGRhdGFT
b3VyY2UgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9kYXRhX3NvdXJjZShmcmFtZSk7Ci0KLSAgICBp
ZiAoc3RhdHVzID09IFdFQktJVF9MT0FEX0NPTU1JVFRFRCkgewotICAgICAgICBnX2Fzc2VydCh3
ZWJraXRfd2ViX2RhdGFfc291cmNlX2lzX2xvYWRpbmcoZGF0YVNvdXJjZSkpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfSBlbHNlIGlmIChzdGF0dXMgIT0gV0VCS0lUX0xPQURfRklOSVNIRUQpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci19Ci0KLXN0YXRp
YyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9saWZldGltZSgpCi17Ci0gICAgV2Vi
S2l0V2ViVmlldyogdmlldzsKLSAgICBHTWFpbkxvb3AqIGxvb3A7Ci0KLSAgICB2aWV3ID0gV0VC
S0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3Np
bmsodmlldyk7Ci0gICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLSAgICBn
X3NpZ25hbF9jb25uZWN0KHZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhu
b3RpZnlfbG9hZF9zdGF0dXNfbGlmZXRpbWVfY2IpLCBsb29wKTsKLSAgICB3ZWJraXRfd2ViX3Zp
ZXdfbG9hZF91cmkodmlldywgImh0dHA6Ly93d3cud2Via2l0Lm9yZyIpOwotCi0gICAgd2FpdFRp
bWVyID0gZ190aW1lb3V0X2FkZF9zZWNvbmRzKGRlZmF1bHRUaW1lb3V0LCAoR1NvdXJjZUZ1bmMp
d2FpdF90aW1lcl9maXJlZCwgbG9vcCk7Ci0KLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0K
LSAgICBXZWJLaXRXZWJEYXRhU291cmNlKiBkYXRhU291cmNlID0gd2Via2l0X3dlYl9mcmFtZV9n
ZXRfZGF0YV9zb3VyY2Uod2Via2l0X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKHZpZXcpKTsKLSAg
ICBHTGlzdCogc3ViUmVzb3VyY2VzID0gd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfc3VicmVz
b3VyY2VzKGRhdGFTb3VyY2UpOwotICAgIGdpbnQgbnVtYmVyT2ZSZXNvdXJjZXMgPSBnX2xpc3Rf
bGVuZ3RoKHN1YlJlc291cmNlcyk7Ci0gICAgZ19saXN0X2ZyZWUoc3ViUmVzb3VyY2VzKTsKLQot
ICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHZpZXcp
LCA9PSwgV0VCS0lUX0xPQURfRklOSVNIRUQpOwotCi0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRf
dXJpKHZpZXcsICJodHRwOi8vZ25vbWUub3JnIik7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQod2Vi
a2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh2aWV3KSwgPT0sIFdFQktJVF9MT0FEX1BST1ZJ
U0lPTkFMKTsKLQotICAgIHdlYmtpdF93ZWJfdmlld19zdG9wX2xvYWRpbmcodmlldyk7Ci0KLSAg
ICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh2aWV3KSwg
PT0sIFdFQktJVF9MT0FEX0ZBSUxFRCk7Ci0KLSAgICBzdWJSZXNvdXJjZXMgPSB3ZWJraXRfd2Vi
X2RhdGFfc291cmNlX2dldF9zdWJyZXNvdXJjZXMoZGF0YVNvdXJjZSk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KG51bWJlck9mUmVzb3VyY2VzLCA9PSwgZ19saXN0X2xlbmd0aChzdWJSZXNvdXJjZXMp
KTsKLSAgICBnX2xpc3RfZnJlZShzdWJSZXNvdXJjZXMpOwotCi0gICAgaWYgKHdhaXRUaW1lcikK
LSAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKHdhaXRUaW1lcik7Ci0KLSAgICB3YWl0VGltZXIgPSAw
OwotCi0gICAgZ19tYWluX2xvb3BfdW5yZWYobG9vcCk7Ci0gICAgZ19vYmplY3RfdW5yZWYodmll
dyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9kYXRhX3NvdXJjZV91bnJlYWNo
YWJsZV91cmkoKQotewotICAgIC8qIEZJWE1FOiB0aGlzIHRlc3QgZmFpbHMgY3VycmVudGx5LiAq
LwotICAgIHJldHVybjsKLQotICAgIFdlYktpdFdlYlZpZXcqIHZpZXc7Ci0gICAgR01haW5Mb29w
KiBsb29wOwotCi0gICAgdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3
KCkpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKHZpZXcpOwotICAgIGxvb3AgPSBnX21haW5fbG9v
cF9uZXcoTlVMTCwgVFJVRSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdCh2aWV3LCAibm90aWZ5Ojps
b2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0sobm90aWZ5X2xvYWRfc3RhdHVzX3VucmVhY2hhYmxlX2Ni
KSwgbG9vcCk7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHZpZXcsICJodHRwOi8vdGhp
cy5ob3N0LmRvZXMubm90LmV4aXN0L2RvaXJlYWxseWV4aXN0Lmh0bWwiKTsKLQotICAgIHdhaXRU
aW1lciA9IGdfdGltZW91dF9hZGRfc2Vjb25kcyhkZWZhdWx0VGltZW91dCwgKEdTb3VyY2VGdW5j
KXdhaXRfdGltZXJfZmlyZWQsIGxvb3ApOwotCi0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwot
Ci0gICAgaWYgKHdhaXRUaW1lcikKLSAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKHdhaXRUaW1lcik7
Ci0KLSAgICB3YWl0VGltZXIgPSAwOwotCi0gICAgZ19tYWluX2xvb3BfdW5yZWYobG9vcCk7Ci0g
ICAgZ19vYmplY3RfdW5yZWYodmlldyk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiog
YXJndikKLXsKLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAgICBn
X3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwotICAgIGdfdGVzdF9i
dWcoIjI0NzU4Iik7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYmRhdGFzb3VyY2Uv
Z2V0X2luaXRpYWxfcmVxdWVzdCIsCi0gICAgICAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X3dl
Yl9kYXRhX3NvdXJjZV9nZXRfaW5pdGlhbF9yZXF1ZXN0KTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMo
Ii93ZWJraXQvd2ViZGF0YXNvdXJjZS9hcGkiLAotICAgICAgICAgICAgICAgICAgICB0ZXN0X3dl
YmtpdF93ZWJfZGF0YV9zb3VyY2UpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJk
YXRhc291cmNlL3VucmVhY2hhYmxlX3VyaSIsCi0gICAgICAgICAgICAgICAgICAgIHRlc3Rfd2Vi
a2l0X3dlYl9kYXRhX3NvdXJjZV91bnJlYWNoYWJsZV91cmkpOwotICAgIGdfdGVzdF9hZGRfZnVu
YygiL3dlYmtpdC93ZWJkYXRhc291cmNlL2xpZmV0aW1lIiwKLSAgICAgICAgICAgICAgICAgICAg
dGVzdF93ZWJraXRfd2ViX2RhdGFfc291cmNlX2xpZmV0aW1lKTsKLQotICAgIHJldHVybiBnX3Rl
c3RfcnVuICgpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdl
YmZyYW1lLmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2ViZnJhbWUuYwpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTEzMTg3My4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2d0ay90ZXN0cy90ZXN0d2ViZnJhbWUuYworKysgL2Rldi9udWxsCkBAIC0xLDIyMCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVy
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQ29sbGFib3JhIEx0ZC4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8Z2xp
Yi5oPgotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2lu
Y2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KLQotc3RhdGljIGludCBudW1iZXJPZkZyYW1lc0NyZWF0
ZWQgPSAwOwotCi1zdGF0aWMgdm9pZCBjcmVhdGVGcmFtZVNpZ25hbFRlc3RGcmFtZUNyZWF0ZWRD
YWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRXZWJGcmFtZSogZnJhbWUsIGdw
b2ludGVyIGRhdGEpCi17Ci0gICAgbnVtYmVyT2ZGcmFtZXNDcmVhdGVkKys7Ci19Ci0KLXN0YXRp
YyBnYm9vbGVhbiBjcmVhdGVGcmFtZVNpZ25hbFRlc3RUaW1lb3V0KGdwb2ludGVyIGRhdGEpCi17
Ci0gICAgZ19hc3NlcnRfY21waW50KG51bWJlck9mRnJhbWVzQ3JlYXRlZCwgPT0sIDIpOwotICAg
IGdfbWFpbl9sb29wX3F1aXQoKEdNYWluTG9vcCopIGRhdGEpOwotICAgIHJldHVybiBGQUxTRTsK
LX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX2ZyYW1lX2NyZWF0ZWRfc2lnbmFsKHZv
aWQpCi17Ci0gICAgR3RrV2lkZ2V0KiB3ZWJWaWV3OwotICAgIEd0a1dpZGdldCogd2luZG93Owot
ICAgIEdNYWluTG9vcCogbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLQotICAg
IHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOwotCi0gICAgd2Vi
VmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZp
ZXcsICJmcmFtZS1jcmVhdGVkIiwgR19DQUxMQkFDSyhjcmVhdGVGcmFtZVNpZ25hbFRlc3RGcmFt
ZUNyZWF0ZWRDYWxsYmFjayksIGxvb3ApOwotCi0gICAgLy8gV2Ugd2FudCB0byBlbnN1cmUgdGhh
dCBleGFjdGx5IHR3byBjcmVhdGUtZnJhbWUgc2lnbmFscyBhcmUKLSAgICAvLyBmaXJlZCBhbmQg
bm8gbW9yZSwgc28gd2Ugc2V0IGEgdGltZW91dCBoZXJlLiBUaGVyZSBkb2VzIG5vdCBhcHBlYXIK
LSAgICAvLyB0byBiZSBhIHNpbXBsZSB3YXkgdmlhIHRoZSBBUEkgdG8gZmlndXJlIG91dCB3aGVu
IGFsbCBmcmFtZXMgaGF2ZQotICAgIC8vIGxvYWRlZC4KLSAgICBnX3RpbWVvdXRfYWRkKDUwMCwg
Y3JlYXRlRnJhbWVTaWduYWxUZXN0VGltZW91dCwgbG9vcCk7Ci0KLSAgICBndGtfY29udGFpbmVy
X2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHdlYlZpZXcpOwotICAgIGd0a193aWRnZXRfc2hv
dyh3aW5kb3cpOwotICAgIGd0a193aWRnZXRfc2hvdyh3ZWJWaWV3KTsKLQotICAgIHdlYmtpdF93
ZWJfdmlld19sb2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldyksCi0gICAgICAgICI8
aHRtbD48Ym9keT5GcmFtZXMhIgotICAgICAgICAiPGlmcmFtZT48L2lmcmFtZT4iCi0gICAgICAg
ICI8aWZyYW1lPjwvaWZyYW1lPiIKLSAgICAgICAgIjwvYm9keT48L2h0bWw+IiwKLSAgICAgICAg
InRleHQvaHRtbCIsICJ1dGYtOCIsICJmaWxlOi8vIik7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGxv
b3ApOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfY3JlYXRlX2Rlc3Ry
b3kodm9pZCkKLXsKLSAgICBHdGtXaWRnZXQgKndlYlZpZXc7Ci0gICAgR3RrV2lkZ2V0ICp3aW5k
b3c7Ci0KLSAgICBnX3Rlc3RfYnVnKCIyMTgzNyIpOwotICAgIHdlYlZpZXcgPSB3ZWJraXRfd2Vi
X3ZpZXdfbmV3KCk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7Ci0gICAgZ19hc3Nl
cnRfY21waW50KEdfT0JKRUNUKHdlYlZpZXcpLT5yZWZfY291bnQsID09LCAxKTsKLSAgICAvLyBU
aGlzIGNyYXNoZWQgd2l0aCB0aGUgb3JpZ2luYWwgdmVyc2lvbgotICAgIGdfb2JqZWN0X3VucmVm
KHdlYlZpZXcpOwotCi0gICAgZ190ZXN0X2J1ZygiMjUwNDIiKTsKLSAgICB3aW5kb3cgPSBndGtf
d2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKLSAgICB3ZWJWaWV3ID0gd2Via2l0X3dl
Yl92aWV3X25ldygpOwotICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93
KSwgd2ViVmlldyk7Ci0gICAgZ3RrX3dpZGdldF9zaG93KHdpbmRvdyk7Ci0gICAgZ3RrX3dpZGdl
dF9zaG93KHdlYlZpZXcpOwotICAgIGd0a193aWRnZXRfZGVzdHJveSh3ZWJWaWV3KTsKLX0KLQot
c3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX2ZyYW1lX2xpZmV0aW1lKHZvaWQpCi17Ci0gICAg
V2ViS2l0V2ViVmlldyogd2ViVmlldzsKLSAgICBXZWJLaXRXZWJGcmFtZSogd2ViRnJhbWU7Ci0g
ICAgZ190ZXN0X2J1ZygiMjE4MzciKTsKLQotICAgIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVco
d2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsK
LSAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1Qod2ViVmlldyktPnJlZl9jb3VudCwgPT0sIDEp
OwotICAgIHdlYkZyYW1lID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKHdlYlZpZXcp
OwotICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVCh3ZWJGcmFtZSktPnJlZl9jb3VudCwgPT0s
IDEpOwotCi0gICAgLy8gQWRkIGR1bW15IHJlZmVyZW5jZSBvbiB0aGUgV2ViS2l0V2ViRnJhbWUg
dG8ga2VlcCBpdCBhbGl2ZQotICAgIGdfb2JqZWN0X3JlZih3ZWJGcmFtZSk7Ci0gICAgZ19hc3Nl
cnRfY21waW50KEdfT0JKRUNUKHdlYkZyYW1lKS0+cmVmX2NvdW50LCA9PSwgMik7Ci0KLSAgICAv
LyBUaGlzIGNyYXNoZWQgd2l0aCB0aGUgb3JpZ2luYWwgdmVyc2lvbgotICAgIGdfb2JqZWN0X3Vu
cmVmKHdlYlZpZXcpOwotCi0gICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGZyYW1lIGdvdCBkZWxl
dGVkIGFzIHdlbGwuIFdlIGRpZCB0aGlzCi0gICAgLy8gYnkgYWRkaW5nIGFuIGV4dHJhIHJlZiBv
biB0aGUgV2ViS2l0V2ViRnJhbWUgYW5kIHdlIHNob3VsZAotICAgIC8vIGJlIHRoZSBvbmUgaG9s
ZGluZyB0aGUgbGFzdCByZWZlcmVuY2UuCi0gICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKHdl
YkZyYW1lKS0+cmVmX2NvdW50LCA9PSwgMSk7Ci0gICAgZ19vYmplY3RfdW5yZWYod2ViRnJhbWUp
OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gcHJpbnRfcmVxdWVzdGVkX2NiKFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcsIFdlYktpdFdlYkZyYW1lKiB3ZWJGcmFtZSwgR01haW5Mb29wKiBsb29wKQotewot
ICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKHdlYlZpZXcpLCAic2lnbmFsLWhhbmRsZWQi
LCBHSU5UX1RPX1BPSU5URVIoVFJVRSkpOwotICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci0g
ICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkIHByaW50X3RpbWVvdXQoR01haW5Mb29w
KiBsb29wKQotewotICAgIGlmIChnX21haW5fbG9vcF9pc19ydW5uaW5nKGxvb3ApKQotICAgICAg
ICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93
ZWJfZnJhbWVfcHJpbnRpbmcodm9pZCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3Owot
Ci0gICAgd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwot
ICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOwotICAgIGdfYXNzZXJ0X2NtcGludChHX09C
SkVDVCh3ZWJWaWV3KS0+cmVmX2NvdW50LCA9PSwgMSk7Ci0KLSAgICB3ZWJraXRfd2ViX3ZpZXdf
bG9hZF9zdHJpbmcod2ViVmlldywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxo
dG1sPjxib2R5PjxoMT5XZWJLaXRHVEsrITwvaDE+PC9ib2R5PjwvaHRtbD4iLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAidGV4dC9odG1sIiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgInV0Zi04IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZp
bGU6Ly8iKTsKLQotICAgIEdNYWluTG9vcCogbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBU
UlVFKTsKLQotICAgIC8vIERvZXMgamF2YXNjcmlwdCBwcmludCgpIHdvcmsgY29ycmVjdGx5Pwot
ICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgInByaW50LXJlcXVlc3RlZCIsCi0gICAgICAg
ICAgICAgICAgICAgICBHX0NBTExCQUNLKHByaW50X3JlcXVlc3RlZF9jYiksCi0gICAgICAgICAg
ICAgICAgICAgICBsb29wKTsKLQotICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKHdlYlZp
ZXcpLCAic2lnbmFsLWhhbmRsZWQiLCBHSU5UX1RPX1BPSU5URVIoRkFMU0UpKTsKLSAgICB3ZWJr
aXRfd2ViX3ZpZXdfZXhlY3V0ZV9zY3JpcHQgKHdlYlZpZXcsICJwcmludCgpOyIpOwotCi0gICAg
Ly8gR2l2ZSBqYXZhc2NyaXB0Y29yZSBzb21lIHRpbWUgdG8gcHJvY2VzcyB0aGUgcHJpbnQgcmVx
dWVzdCwgYnV0Ci0gICAgLy8gcHJlcGFyZSBhIHRpbWVvdXQgdG8gYXZvaWQgaXQgcnVubmluZyBm
b3JldmVyIGluIGNhc2UgdGhlIHNpZ25hbCBpcwotICAgIC8vIG5ldmVyIGVtaXR0ZWQuCi0gICAg
Z190aW1lb3V0X2FkZCgxMDAwLCAoR1NvdXJjZUZ1bmMpcHJpbnRfdGltZW91dCwgbG9vcCk7Ci0g
ICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAgZ19hc3NlcnRfY21waW50KEdQT0lOVEVS
X1RPX0lOVChnX29iamVjdF9nZXRfZGF0YShHX09CSkVDVCh3ZWJWaWV3KSwgInNpZ25hbC1oYW5k
bGVkIikpLCA9PSwgVFJVRSk7Ci0KLSAgICAvLyBEb2VzIHByaW50aW5nIGRpcmVjdGx5IHRvIGEg
ZmlsZT8KLSAgICBHRXJyb3IgKmVycm9yID0gTlVMTDsKLSAgICBnY2hhciogdGVtcG9yYXJ5Rmls
ZW5hbWUgPSBOVUxMOwotICAgIGdpbnQgZmQgPSBnX2ZpbGVfb3Blbl90bXAgKCJ3ZWJraXQtdGVz
dHdlYmZyYW1lLVhYWFhYWCIsICZ0ZW1wb3JhcnlGaWxlbmFtZSwgJmVycm9yKTsKLSAgICBjbG9z
ZShmZCk7Ci0KLSAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgZ19jcml0aWNhbCgiRmFpbGVkIHRv
IG9wZW4gYSB0ZW1wb3JhcnkgZmlsZSBmb3Igd3JpdGluZzogJXMuIiwgZXJyb3ItPm1lc3NhZ2Up
OwotICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyb3IpOwotICAgICAgICBnb3RvIGNsZWFudXA7Ci0g
ICAgfQotCi0gICAgLy8gV2UgZGVsZXRlIHRoZSBmaWxlLCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkg
ZmlndXJlIG91dCB0aGF0IHRoZQotICAgIC8vIGZpbGUgZ290IHByaW50ZWQ7Ci0gICAgaWYgKGdf
dW5saW5rKHRlbXBvcmFyeUZpbGVuYW1lKSA9PSAtMSkgewotICAgICAgICBnX3dhcm5pbmcoIkZh
aWxlZCB0byBkZWxldGUgdGhlIHRlbXBvcmFyeSBmaWxlOiAlcy5cblRoaXMgbWF5IGNhdXNlIHRo
ZSB0ZXN0IHRvIGJlIGJvZ3VzLiIsIGdfc3RyZXJyb3IoZXJybm8pKTsKLSAgICB9Ci0KLSAgICBX
ZWJLaXRXZWJGcmFtZSogd2ViRnJhbWUgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUo
d2ViVmlldyk7Ci0gICAgR3RrUHJpbnRPcGVyYXRpb24qIG9wZXJhdGlvbiA9IGd0a19wcmludF9v
cGVyYXRpb25fbmV3KCk7Ci0gICAgR3RrUHJpbnRPcGVyYXRpb25BY3Rpb24gYWN0aW9uID0gR1RL
X1BSSU5UX09QRVJBVElPTl9BQ1RJT05fRVhQT1JUOwotICAgIEd0a1ByaW50T3BlcmF0aW9uUmVz
dWx0IHJlc3VsdDsKLQotICAgIGd0a19wcmludF9vcGVyYXRpb25fc2V0X2V4cG9ydF9maWxlbmFt
ZShvcGVyYXRpb24sIHRlbXBvcmFyeUZpbGVuYW1lKTsKLSAgICByZXN1bHQgPSB3ZWJraXRfd2Vi
X2ZyYW1lX3ByaW50X2Z1bGwgKHdlYkZyYW1lLCBvcGVyYXRpb24sIGFjdGlvbiwgTlVMTCk7Ci0K
LSAgICBnX2Fzc2VydF9jbXBpbnQocmVzdWx0LCA9PSwgR1RLX1BSSU5UX09QRVJBVElPTl9SRVNV
TFRfQVBQTFkpOwotICAgIGdfYXNzZXJ0X2NtcGludChnX2ZpbGVfdGVzdCh0ZW1wb3JhcnlGaWxl
bmFtZSwgR19GSUxFX1RFU1RfSVNfUkVHVUxBUiksID09LCBUUlVFKTsKLQotICAgIGdfdW5saW5r
KHRlbXBvcmFyeUZpbGVuYW1lKTsKLSAgICBnX29iamVjdF91bnJlZihvcGVyYXRpb24pOwotY2xl
YW51cDoKLSAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKLSAgICBnX2ZyZWUodGVtcG9yYXJ5
RmlsZW5hbWUpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfcmVzcG9u
c2UoKQotewotICAgIFdlYktpdFdlYkZyYW1lKiBmcmFtZSA9IGdfb2JqZWN0X25ldyhXRUJLSVRf
VFlQRV9XRUJfRlJBTUUsIE5VTEwpOwotICAgIFdlYktpdE5ldHdvcmtSZXNwb25zZSogcmVzcG9u
c2UgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9uZXR3b3JrX3Jlc3BvbnNlKGZyYW1lKTsKLSAgICBn
X2Fzc2VydCghcmVzcG9uc2UpOwotICAgIGdfb2JqZWN0X3VucmVmKGZyYW1lKTsKLX0KLQotaW50
IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotewotICAgIGd0a190ZXN0X2luaXQoJmFyZ2Ms
ICZhcmd2LCBOVUxMKTsKLQotICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvIik7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnZpZXcvY3JlYXRlX2Rl
c3Ryb3kiLCB0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfY3JlYXRlX2Rlc3Ryb3kpOwotICAgIGdfdGVz
dF9hZGRfZnVuYygiL3dlYmtpdC93ZWJ2aWV3L2ZyYW1lLWNyZWF0ZWRfc2lnbmFsIiwgdGVzdF93
ZWJraXRfd2ViX2ZyYW1lX2NyZWF0ZWRfc2lnbmFsKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93
ZWJraXQvd2ViZnJhbWUvbGlmZXRpbWUiLCB0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfbGlmZXRpbWUp
OwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJ2aWV3L3ByaW50aW5nIiwgdGVzdF93
ZWJraXRfd2ViX2ZyYW1lX3ByaW50aW5nKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQv
d2Vidmlldy9yZXNwb25zZSIsIHRlc3Rfd2Via2l0X3dlYl9mcmFtZV9yZXNwb25zZSk7Ci0gICAg
cmV0dXJuIGdfdGVzdF9ydW4gKCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay90
ZXN0cy90ZXN0d2ViaGlzdG9yeWl0ZW0uYyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3
ZWJoaXN0b3J5aXRlbS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmUxOTFjLi4w
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJoaXN0b3J5aXRlbS5j
CisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OSBKYW4gTWljaGFlbCBBbG9uem8KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgPGdsaWIu
aD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgotCi10
eXBlZGVmIHN0cnVjdCB7Ci0gICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGl0ZW07Ci19IFdlYkhp
c3RvcnlJdGVtRml4dHVyZTsKLQotc3RhdGljIHZvaWQgd2ViX2hpc3RvcnlfaXRlbV9maXh0dXJl
X3NldHVwKFdlYkhpc3RvcnlJdGVtRml4dHVyZSogZml4dHVyZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZml4
dHVyZS0+aXRlbSA9IHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX25ld193aXRoX2RhdGEoImh0dHA6
Ly9leGFtcGxlLmNvbS8iLCAiRXhhbXBsZTEiKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpF
Q1QoZml4dHVyZS0+aXRlbSktPnJlZl9jb3VudCwgPT0gLCAxKTsKLSAgICBnX2Fzc2VydChmaXh0
dXJlLT5pdGVtICE9IE5VTEwpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJfaGlzdG9yeV9pdGVtX2Zp
eHR1cmVfdGVhcmRvd24oV2ViSGlzdG9yeUl0ZW1GaXh0dXJlKiBmaXh0dXJlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjb25zdHBvaW50ZXIgZGF0YSkK
LXsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT5pdGVtICE9IE5VTEwpOwotICAgIGdfYXNzZXJ0X2Nt
cGludChHX09CSkVDVChmaXh0dXJlLT5pdGVtKS0+cmVmX2NvdW50LCA9PSwgMSk7Ci19Ci0KLXN0
YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X2RhdGEoV2ViSGlzdG9y
eUl0ZW1GaXh0dXJlKiBmaXh0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19hc3NlcnRfY21w
c3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF90aXRsZShmaXh0dXJlLT5pdGVtKSwgPT0s
ICJFeGFtcGxlMSIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRl
bV9nZXRfdXJpKGZpeHR1cmUtPml0ZW0pLCA9PSwgImh0dHA6Ly9leGFtcGxlLmNvbS8iKTsKLX0K
LQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9hbHRlcm5hdGVfdGl0
bGUoV2ViSGlzdG9yeUl0ZW1GaXh0dXJlKiBmaXh0dXJlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NvbnN0cG9pbnRlciBkYXRhKQot
ewotICAgIHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX3NldF9hbHRlcm5hdGVfdGl0bGUoZml4dHVy
ZS0+aXRlbSwgIkFsdGVybmF0ZSB0aXRsZSIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRf
d2ViX2hpc3RvcnlfaXRlbV9nZXRfYWx0ZXJuYXRlX3RpdGxlKGZpeHR1cmUtPml0ZW0pLCA9PSwg
IkFsdGVybmF0ZSB0aXRsZSIpOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3Yp
Ci17Ci0gICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOwotCi0gICAgZ190ZXN0
X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKLSAgICBnX3Rlc3RfYWRkKCIv
d2Via2l0L3dlYmhpc3RvcnlpdGVtL2dldF9kYXRhIiwKLSAgICAgICAgICAgICAgIFdlYkhpc3Rv
cnlJdGVtRml4dHVyZSwgMCwgd2ViX2hpc3RvcnlfaXRlbV9maXh0dXJlX3NldHVwLAotICAgICAg
ICAgICAgICAgdGVzdF93ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfZGF0YSwgd2ViX2hpc3Rv
cnlfaXRlbV9maXh0dXJlX3RlYXJkb3duKTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L3dlYmhp
c3RvcnlpdGVtL2FsdGVybmF0ZV90aXRsZSIsCi0gICAgICAgICAgICAgICBXZWJIaXN0b3J5SXRl
bUZpeHR1cmUsIDAsIHdlYl9oaXN0b3J5X2l0ZW1fZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAg
ICAgIHRlc3Rfd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fYWx0ZXJuYXRlX3RpdGxlLCB3ZWJfaGlz
dG9yeV9pdGVtX2ZpeHR1cmVfdGVhcmRvd24pOwotICAgIHJldHVybiBnX3Rlc3RfcnVuICgpOwot
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYmluc3BlY3Rvci5j
IGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYmluc3BlY3Rvci5jCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBhNzQzODJmLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQv
Z3RrL3Rlc3RzL3Rlc3R3ZWJpbnNwZWN0b3IuYworKysgL2Rldi9udWxsCkBAIC0xLDE3MyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSA8Z25z
QGdub21lLm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgInRlc3RfdXRpbHMuaCIK
LQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxndGsv
Z3RrLmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgotCi1HTWFpbkxvb3AgKmxvb3A7Ci1H
dGtXaWRnZXQgKndpbmRvdzsKLQotc3RhdGljIGdib29sZWFuIHF1aXRMb29wKGdwb2ludGVyIGRh
dGEpCi17Ci0gICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKLSAgICByZXR1cm4gVFJVRTsKLX0K
LQotLyogSWdub3JlIHNpbXBsZSB0cmFuc2xhdGlvbi1yZWxhdGVkIG1lc3NhZ2VzIGFuZCB1cGdy
YWRlIG90aGVyCi0gKiBtZXNzYWdlcyB0byB3YXJuaW5ncy4KLSAqLwotc3RhdGljIGdib29sZWFu
IGNvbnNvbGVNZXNzYWdlQ2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgY29uc3QgY2hh
ciogbWVzc2FnZSwgdW5zaWduZWQgaW50IGxpbmUsIGNvbnN0IGNoYXIqIHNvdXJjZUlkKQotewot
ICAgIGlmIChzdHJzdHIobWVzc2FnZSwgIkxvY2FsaXplZCBzdHJpbmciKSB8fCBzdHJzdHIobWVz
c2FnZSwgIlByb3RvY29sIEVycm9yOiB0aGUgbWVzc2FnZSBpcyBmb3Igbm9uLWV4aXN0aW5nIGRv
bWFpbiAnUHJvZmlsZXInIikgfHwKLSAgICAgICAgc3Ryc3RyKG1lc3NhZ2UsICJEaWRuJ3QgZmlu
ZCBhIFRyZWVFbGVtZW50IGZvciBhIHJlcHJlc2VudGVkT2JqZWN0IikpCi0gICAgICAgIHJldHVy
biBUUlVFOwotCi0gICAgZ193YXJuaW5nKCJDb25zb2xlOiAlcyBAJWQ6ICVzXG4iLCBzb3VyY2VJ
ZCwgbGluZSwgbWVzc2FnZSk7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBXZWJLaXRX
ZWJWaWV3KiBpbnNwZWN0RWxlbWVudENhbGxiYWNrKFdlYktpdFdlYkluc3BlY3RvciAqaW5zcGVj
dG9yLCBXZWJLaXRXZWJWaWV3ICppbnNwZWN0ZWRXZWJWaWV3LCBpbnQgKnRpbWVzRWxlbWVudElu
c3BlY3RlZCkKLXsKLSAgICAqdGltZXNFbGVtZW50SW5zcGVjdGVkID0gKnRpbWVzRWxlbWVudElu
c3BlY3RlZCArIDE7Ci0KLSAgICB3aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RP
UExFVkVMKTsKLQotICAgIEd0a1dpZGdldCAqbmV3V2ViVmlldyA9IHdlYmtpdF93ZWJfdmlld19u
ZXcoKTsKLSAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIG5ld1dl
YlZpZXcpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdChuZXdXZWJWaWV3LCAiY29uc29sZS1tZXNz
YWdlIiwKLSAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0soY29uc29sZU1lc3NhZ2VDYWxs
YmFjayksIE5VTEwpOwotCi0gICAgcmV0dXJuIFdFQktJVF9XRUJfVklFVyhuZXdXZWJWaWV3KTsK
LX0KLQotc3RhdGljIGdib29sZWFuIGNsb3NlSW5zcGVjdG9yKFdlYktpdFdlYkluc3BlY3RvciAq
aW5zcGVjdG9yLCBpbnQgKnRpbWVzQ2xvc2VkKQotewotICAgICp0aW1lc0Nsb3NlZCA9ICp0aW1l
c0Nsb3NlZCArIDE7Ci0KLSAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kod2luZG93KTsKLSAgICByZXR1
cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuIHNob3dJbnNwZWN0b3IoV2ViS2l0V2ViSW5z
cGVjdG9yICppbnNwZWN0b3IsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19pZGxlX2FkZChxdWl0
TG9vcCwgTlVMTCk7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkIGxvYWRGaW5p
c2hlZChXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3LCBXZWJLaXRXZWJGcmFtZSAqZnJhbWUsIGdib29s
ZWFuICppc0xvYWRGaW5pc2hlZCkKLXsKLSAgICAqaXNMb2FkRmluaXNoZWQgPSBUUlVFOwotICAg
IGlmIChnX21haW5fbG9vcF9pc19ydW5uaW5nKGxvb3ApKQotICAgICAgICBnX21haW5fbG9vcF9x
dWl0KGxvb3ApOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfaW5zcGVjdG9yX2Ns
b3NlX2FuZF9pbnNwZWN0KCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3ID0gV0VCS0lU
X1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgbG9vcCA9IGdfbWFpbl9sb29w
X25ldyhOVUxMLCBUUlVFKTsKLQotICAgIGdib29sZWFuIGlzTG9hZEZpbmlzaGVkID0gRkFMU0U7
Ci0gICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAibG9hZC1maW5pc2hlZCIsIEdfQ0FMTEJB
Q0sobG9hZEZpbmlzaGVkKSwgJmlzTG9hZEZpbmlzaGVkKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdf
bG9hZF9zdHJpbmcod2ViVmlldywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxo
dG1sPjxib2R5PjxwPndvb2hvbzwvcD48L2JvZHk+PC9odG1sPiIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJ0ZXh0L2h0bWwiLCAiVVRGLTgiLCAiZmlsZTovLyIpOwotICAgIGlm
ICghaXNMb2FkRmluaXNoZWQpCi0gICAgICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLQotICAg
IGdfb2JqZWN0X3NldCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdlYlZpZXcpLCAiZW5h
YmxlLWRldmVsb3Blci1leHRyYXMiLCBUUlVFLCBOVUxMKTsKLSAgICBXZWJLaXRXZWJJbnNwZWN0
b3IgKmluc3BlY3RvciA9IHdlYmtpdF93ZWJfdmlld19nZXRfaW5zcGVjdG9yKHdlYlZpZXcpOwot
Ci0gICAgaW50IHRpbWVzRWxlbWVudEluc3BlY3RlZCA9IDA7Ci0gICAgaW50IHRpbWVzQ2xvc2Vk
ID0gMDsKLSAgICBnX29iamVjdF9jb25uZWN0KGluc3BlY3RvciwKLSAgICAgICAgICAgICAgICAg
ICAgICJzaWduYWw6Omluc3BlY3Qtd2ViLXZpZXciLCBHX0NBTExCQUNLKGluc3BlY3RFbGVtZW50
Q2FsbGJhY2spLCAmdGltZXNFbGVtZW50SW5zcGVjdGVkLAotICAgICAgICAgICAgICAgICAgICAg
InNpZ25hbDo6c2hvdy13aW5kb3ciLCBHX0NBTExCQUNLKHNob3dJbnNwZWN0b3IpLCBOVUxMLAot
ICAgICAgICAgICAgICAgICAgICAgInNpZ25hbDo6Y2xvc2Utd2luZG93IiwgR19DQUxMQkFDSyhj
bG9zZUluc3BlY3RvciksICZ0aW1lc0Nsb3NlZCwKLSAgICAgICAgICAgICAgICAgICAgIE5VTEwp
OwotCi0gICAgd2Via2l0X3dlYl9pbnNwZWN0b3JfaW5zcGVjdF9jb29yZGluYXRlcyhpbnNwZWN0
b3IsIDAuMCwgMC4wKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGltZXNFbGVtZW50SW5zcGVjdGVk
LCA9PSwgMSk7Ci0KLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICB3ZWJraXRfd2Vi
X2luc3BlY3Rvcl9jbG9zZShpbnNwZWN0b3IpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0aW1lc0Ns
b3NlZCwgPT0sIDEpOwotCi0gICAgd2Via2l0X3dlYl9pbnNwZWN0b3JfaW5zcGVjdF9jb29yZGlu
YXRlcyhpbnNwZWN0b3IsIDAuMCwgMC4wKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGltZXNFbGVt
ZW50SW5zcGVjdGVkLCA9PSwgMik7Ci0KLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAg
ICBndGtfd2lkZ2V0X2Rlc3Ryb3koR1RLX1dJREdFVCh3ZWJWaWV3KSk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KHRpbWVzQ2xvc2VkLCA9PSwgMik7Ci0KLSAgICBnX21haW5fbG9vcF91bnJlZihsb29w
KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX2luc3BlY3Rvcl9kZXN0cm95X2lu
c3BlY3RlZF93ZWJfdmlldygpCi17Ci0gICAgV2ViS2l0V2ViVmlldyAqd2ViVmlldyA9IFdFQktJ
VF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGxvb3AgPSBnX21haW5fbG9v
cF9uZXcoTlVMTCwgVFJVRSk7Ci0KLSAgICBnYm9vbGVhbiBpc0xvYWRGaW5pc2hlZCA9IEZBTFNF
OwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgImxvYWQtZmluaXNoZWQiLCBHX0NBTExC
QUNLKGxvYWRGaW5pc2hlZCksICZpc0xvYWRGaW5pc2hlZCk7Ci0gICAgd2Via2l0X3dlYl92aWV3
X2xvYWRfc3RyaW5nKHdlYlZpZXcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8
aHRtbD48Ym9keT48cD53b29ob288L3A+PC9ib2R5PjwvaHRtbD4iLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAidGV4dC9odG1sIiwgIlVURi04IiwgImZpbGU6Ly8iKTsKLSAgICBp
ZiAoIWlzTG9hZEZpbmlzaGVkKQotICAgICAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAg
ICBnX29iamVjdF9zZXQod2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3KSwgImVu
YWJsZS1kZXZlbG9wZXItZXh0cmFzIiwgVFJVRSwgTlVMTCk7Ci0gICAgV2ViS2l0V2ViSW5zcGVj
dG9yICppbnNwZWN0b3IgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2luc3BlY3Rvcih3ZWJWaWV3KTsK
LQotICAgIGludCB0aW1lc0VsZW1lbnRJbnNwZWN0ZWQgPSAwOwotICAgIGludCB0aW1lc0Nsb3Nl
ZCA9IDA7Ci0gICAgZ19vYmplY3RfY29ubmVjdChpbnNwZWN0b3IsCi0gICAgICAgICAgICAgICAg
ICAgICAic2lnbmFsOjppbnNwZWN0LXdlYi12aWV3IiwgR19DQUxMQkFDSyhpbnNwZWN0RWxlbWVu
dENhbGxiYWNrKSwgJnRpbWVzRWxlbWVudEluc3BlY3RlZCwKLSAgICAgICAgICAgICAgICAgICAg
ICJzaWduYWw6OnNob3ctd2luZG93IiwgR19DQUxMQkFDSyhzaG93SW5zcGVjdG9yKSwgTlVMTCwK
LSAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6OmNsb3NlLXdpbmRvdyIsIEdfQ0FMTEJBQ0so
Y2xvc2VJbnNwZWN0b3IpLCAmdGltZXNDbG9zZWQsCi0gICAgICAgICAgICAgICAgICAgICBOVUxM
KTsKLQotICAgIHdlYmtpdF93ZWJfaW5zcGVjdG9yX2luc3BlY3RfY29vcmRpbmF0ZXMoaW5zcGVj
dG9yLCAwLjAsIDAuMCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHRpbWVzRWxlbWVudEluc3BlY3Rl
ZCwgPT0sIDEpOwotCi0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAgZ3RrX3dpZGdl
dF9kZXN0cm95KEdUS19XSURHRVQod2ViVmlldykpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0aW1l
c0Nsb3NlZCwgPT0sIDEpOwotCi0gICAgZ19tYWluX2xvb3BfdW5yZWYobG9vcCk7Ci19Ci0KLWlu
dCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKLXsKLSAgICBndGtfdGVzdF9pbml0KCZhcmdj
LCAmYXJndiwgTlVMTCk7Ci0KLSAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJr
aXQub3JnLyIpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJpbnNwZWN0b3IvZGVz
dHJveS1pbnNwZWN0ZWQtd2ViLXZpZXciLCB0ZXN0X3dlYmtpdF93ZWJfaW5zcGVjdG9yX2Rlc3Ry
b3lfaW5zcGVjdGVkX3dlYl92aWV3KTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vi
aW5zcGVjdG9yL2Nsb3NlLWFuZC1pbnNwZWN0IiwgdGVzdF93ZWJraXRfd2ViX2luc3BlY3Rvcl9j
bG9zZV9hbmRfaW5zcGVjdCk7Ci0KLSAgICByZXR1cm4gZ190ZXN0X3J1bigpOwotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYnBsdWdpbmRhdGFiYXNlLmMgYi9T
b3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2VicGx1Z2luZGF0YWJhc2UuYwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNjUyODExYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2d0ay90ZXN0cy90ZXN0d2VicGx1Z2luZGF0YWJhc2UuYworKysgL2Rldi9udWxsCkBAIC0xLDc4
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1
ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHdlYmtp
dC93ZWJraXQuaD4KLQotLyogVGhpcyBmdW5jdGlvbiBpcyBub3QgcHVibGljLCBzbyB3ZSBuZWVk
IGFuIGV4dGVybiBkZWNsYXJhdGlvbiAqLwotZXh0ZXJuIHZvaWQgd2Via2l0X3dlYl9zZXR0aW5n
c19hZGRfZXh0cmFfcGx1Z2luX2RpcmVjdG9yeShXZWJLaXRXZWJWaWV3KiB2aWV3LCBjb25zdCBn
Y2hhciogZGlyZWN0b3J5KTsKLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3BsdWdpbl9k
YXRhYmFzZV9nZXRfcGx1Z2lucygpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogdmlldyA9IFdFQktJ
VF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIFdlYktpdFdlYlBsdWdpbkRh
dGFiYXNlKiBkYXRhYmFzZTsKLSAgICBHU0xpc3QqIHBsdWdpbkxpc3QsICpwOwotICAgIGdib29s
ZWFuIGZvdW5kID0gRkFMU0U7Ci0gICAgZ2Jvb2xlYW4gZW5hYmxlZCA9IEZBTFNFOwotCi0gICAg
d2Via2l0X3dlYl9zZXR0aW5nc19hZGRfZXh0cmFfcGx1Z2luX2RpcmVjdG9yeSh2aWV3LCBURVNU
X1BMVUdJTl9ESVIpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKEdfT0JKRUNUKHZpZXcpKTsKLQot
ICAgIGRhdGFiYXNlID0gd2Via2l0X2dldF93ZWJfcGx1Z2luX2RhdGFiYXNlKCk7Ci0gICAgcGx1
Z2luTGlzdCA9IHdlYmtpdF93ZWJfcGx1Z2luX2RhdGFiYXNlX2dldF9wbHVnaW5zKGRhdGFiYXNl
KTsKLSAgICBmb3IgKHAgPSBwbHVnaW5MaXN0OyBwOyBwID0gcC0+bmV4dCkgewotICAgICAgICBX
ZWJLaXRXZWJQbHVnaW4qIHBsdWdpbiA9IChXZWJLaXRXZWJQbHVnaW4qKXAtPmRhdGE7Ci0gICAg
ICAgIGlmICghZ19zdHJjbXAwKHdlYmtpdF93ZWJfcGx1Z2luX2dldF9uYW1lKHBsdWdpbiksICJX
ZWJLaXQgVGVzdCBQbHVnSW4iKSAmJgotICAgICAgICAgICAgIWdfc3RyY21wMCh3ZWJraXRfd2Vi
X3BsdWdpbl9nZXRfZGVzY3JpcHRpb24ocGx1Z2luKSwgIlNpbXBsZSBOZXRzY2FwZcKuIHBsdWct
aW4gdGhhdCBoYW5kbGVzIHRlc3QgY29udGVudCBmb3IgV2ViS2l0IikpIHsKLSAgICAgICAgICAg
IGZvdW5kID0gVFJVRTsKLSAgICAgICAgICAgIGVuYWJsZWQgPSB3ZWJraXRfd2ViX3BsdWdpbl9n
ZXRfZW5hYmxlZChwbHVnaW4pOwotICAgICAgICAgICAgd2Via2l0X3dlYl9wbHVnaW5fc2V0X2Vu
YWJsZWQocGx1Z2luLCBGQUxTRSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgd2Via2l0X3dlYl9w
bHVnaW5fZGF0YWJhc2VfcGx1Z2luc19saXN0X2ZyZWUocGx1Z2luTGlzdCk7Ci0gICAgZ19hc3Nl
cnQoZm91bmQpOwotICAgIGdfYXNzZXJ0KGVuYWJsZWQpOwotCi0gICAgd2Via2l0X3dlYl9wbHVn
aW5fZGF0YWJhc2VfcmVmcmVzaChkYXRhYmFzZSk7Ci0gICAgcGx1Z2luTGlzdCA9IHdlYmtpdF93
ZWJfcGx1Z2luX2RhdGFiYXNlX2dldF9wbHVnaW5zKGRhdGFiYXNlKTsKLQotICAgIGZvciAocCA9
IHBsdWdpbkxpc3Q7IHA7IHAgPSBwLT5uZXh0KSB7Ci0gICAgICAgIFdlYktpdFdlYlBsdWdpbiog
cGx1Z2luID0gKFdlYktpdFdlYlBsdWdpbiopcC0+ZGF0YTsKLSAgICAgICAgaWYgKCFnX3N0cmNt
cDAod2Via2l0X3dlYl9wbHVnaW5fZ2V0X25hbWUocGx1Z2luKSwgIldlYktpdCBUZXN0IFBsdWdJ
biIpICYmCi0gICAgICAgICAgICAhZ19zdHJjbXAwKHdlYmtpdF93ZWJfcGx1Z2luX2dldF9kZXNj
cmlwdGlvbihwbHVnaW4pLCAiU2ltcGxlIE5ldHNjYXBlwq4gcGx1Zy1pbiB0aGF0IGhhbmRsZXMg
dGVzdCBjb250ZW50IGZvciBXZWJLaXQiKSkKLSAgICAgICAgICAgIGVuYWJsZWQgPSB3ZWJraXRf
d2ViX3BsdWdpbl9nZXRfZW5hYmxlZChwbHVnaW4pOwotICAgIH0KLSAgICB3ZWJraXRfd2ViX3Bs
dWdpbl9kYXRhYmFzZV9wbHVnaW5zX2xpc3RfZnJlZShwbHVnaW5MaXN0KTsKLSAgICBnX2Fzc2Vy
dCghZW5hYmxlZCk7Ci0KLSAgICBnX29iamVjdF91bnJlZih2aWV3KTsKLX0KLQotaW50IG1haW4o
aW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotewotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2
LCBOVUxMKTsKLQotICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
Iik7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnBsdWdpbmRhdGFiYXNlL2dldHBs
dWdpbnMiLCB0ZXN0X3dlYmtpdF93ZWJfcGx1Z2luX2RhdGFiYXNlX2dldF9wbHVnaW5zKTsKLSAg
ICByZXR1cm4gZ190ZXN0X3J1biAoKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3Rr
L3Rlc3RzL3Rlc3R3ZWJyZXNvdXJjZS5jIGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdl
YnJlc291cmNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjNThiN2EuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYnJlc291cmNlLmMKKysrIC9k
ZXYvbnVsbApAQCAtMSwzMzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4g
TWljaGFlbCBBbG9uem8KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgPGdsaWIuaD4KLSNp
bmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8bGlic291cC9zb3VwLmg+Ci0jaW5jbHVkZSA8
c3RyaW5nLmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgotCi0jZGVmaW5lIElOREVYX0hU
TUwgIjxodG1sPjwvaHRtbD4iCi0jZGVmaW5lIE1BSU5fSFRNTCAiPGh0bWw+PGhlYWQ+PHNjcmlw
dCBsYW5ndWFnZT1cImphdmFzY3JpcHRcIiBzcmM9XCIvamF2YXNjcmlwdC5qc1wiPjwvc2NyaXB0
PjwvaGVhZD48Ym9keT48aDE+aGFoPC9oMT48L2h0bWw+IgotI2RlZmluZSBKQVZBU0NSSVBUICJm
dW5jdGlvbiBibGFoICgpIHsgdmFyIGEgPSAxOyB9IgotCi1HTWFpbkxvb3AqIGxvb3A7Ci1Tb3Vw
U2Vzc2lvbiAqc2Vzc2lvbjsKLWNoYXIgKmJhc2VfdXJpOwotV2ViS2l0V2ViUmVzb3VyY2UqIG1h
aW5fcmVzb3VyY2U7Ci1XZWJLaXRXZWJSZXNvdXJjZSogc3ViX3Jlc291cmNlOwotCi10eXBlZGVm
IHN0cnVjdCB7Ci0gICAgV2ViS2l0V2ViUmVzb3VyY2UqIHdlYlJlc291cmNlOwotICAgIFdlYktp
dFdlYlZpZXcqIHdlYlZpZXc7Ci19IFdlYlJlc291cmNlRml4dHVyZTsKLQotLyogRm9yIHJlYWwg
cmVxdWVzdCB0ZXN0aW5nICovCi1zdGF0aWMgdm9pZAotc2VydmVyX2NhbGxiYWNrIChTb3VwU2Vy
dmVyICpzZXJ2ZXIsIFNvdXBNZXNzYWdlICptc2csCi0gICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIgKnBhdGgsIEdIYXNoVGFibGUgKnF1ZXJ5LAotICAgICAgICAgICAgICAgICBTb3VwQ2xpZW50
Q29udGV4dCAqY29udGV4dCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBpZiAobXNnLT5tZXRob2Qg
IT0gU09VUF9NRVRIT0RfR0VUKSB7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzICht
c2csIFNPVVBfU1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyAobXNnLCBTT1VQX1NUQVRVU19PSyk7Ci0K
LSAgICAvKiBSZWRpcmVjdCAqLwotICAgIGlmIChnX3N0cl9lcXVhbCAocGF0aCwgIi8iKSkgewot
ICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyAobXNnLCBTT1VQX1NUQVRVU19NT1ZFRF9Q
RVJNQU5FTlRMWSk7Ci0KLSAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kIChtc2ct
PnJlc3BvbnNlX2hlYWRlcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IkxvY2F0aW9uIiwgIi9pbmRleC5odG1sIik7Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbCAo
cGF0aCwgIi9pbmRleC5odG1sIikpIHsKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5k
IChtc2ctPnJlc3BvbnNlX2JvZHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U09VUF9NRU1PUllfQ09QWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkRF
WF9IVE1MLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiAoSU5ERVhf
SFRNTCkpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwgKHBhdGgsICIvbWFpbi5odG1sIikp
IHsKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kIChtc2ctPnJlc3BvbnNlX2JvZHks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU09VUF9NRU1PUllfQ09QWSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQUlOX0hUTUwsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RybGVuIChNQUlOX0hUTUwpKTsKLSAgICB9IGVsc2UgaWYg
KGdfc3RyX2VxdWFsIChwYXRoLCAiL2phdmFzY3JpcHQuanMiKSkgewotICAgICAgICBzb3VwX21l
c3NhZ2VfYm9keV9hcHBlbmQgKG1zZy0+cmVzcG9uc2VfYm9keSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTT1VQX01FTU9SWV9DT1BZLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEpBVkFTQ1JJUFQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RybGVuIChKQVZBU0NSSVBUKSk7Ci0gICAgfQotCi0KLSAgICBzb3VwX21lc3NhZ2VfYm9k
eV9jb21wbGV0ZSAobXNnLT5yZXNwb25zZV9ib2R5KTsKLX0KLQotc3RhdGljIHZvaWQgd2ViX3Jl
c291cmNlX2ZpeHR1cmVfc2V0dXAoV2ViUmVzb3VyY2VGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rw
b2ludGVyIGRhdGEpCi17Ci0gICAgZml4dHVyZS0+d2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3
ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKGZpeHR1cmUtPndl
YlZpZXcpOwotICAgIGNvbnN0IGdjaGFyKiB3ZWJEYXRhID0gIjxodG1sPjwvaHRtbD4iOwotICAg
IGZpeHR1cmUtPndlYlJlc291cmNlID0gd2Via2l0X3dlYl9yZXNvdXJjZV9uZXcod2ViRGF0YSwg
c3RybGVuKHdlYkRhdGEpLCAiaHR0cDovL2V4YW1wbGUuY29tLyIsICJ0ZXh0L2h0bWwiLCAidXRm
OCIsICJFeGFtcGxlLmNvbSIpOwotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPndlYlJlc291cmNlKTsK
LX0KLQotc3RhdGljIHZvaWQgd2ViX3Jlc291cmNlX2ZpeHR1cmVfdGVhcmRvd24oV2ViUmVzb3Vy
Y2VGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19hc3NlcnQo
Zml4dHVyZS0+d2ViUmVzb3VyY2UpOwotICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPndlYlJl
c291cmNlKTsKLSAgICBnX29iamVjdF91bnJlZihmaXh0dXJlLT53ZWJWaWV3KTsKLX0KLQotc3Rh
dGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3Jlc291cmNlX2dldF91cmwoV2ViUmVzb3VyY2VGaXh0
dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ2NoYXIqIHVybDsKLSAg
ICBnX29iamVjdF9nZXQoR19PQkpFQ1QoZml4dHVyZS0+d2ViUmVzb3VyY2UpLCAidXJpIiwgJnVy
bCwgTlVMTCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHVybCwgPT0sICJodHRwOi8vZXhhbXBsZS5j
b20vIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaShm
aXh0dXJlLT53ZWJSZXNvdXJjZSkgLD09LCJodHRwOi8vZXhhbXBsZS5jb20vIik7Ci0gICAgZ19m
cmVlKHVybCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRf
ZGF0YShXZWJSZXNvdXJjZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsK
LSAgICBHU3RyaW5nKiBjaGFyRGF0YSA9IHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X2RhdGEoZml4
dHVyZS0+d2ViUmVzb3VyY2UpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihjaGFyRGF0YS0+c3RyLCA9
PSwgIjxodG1sPjwvaHRtbD4iKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3Jl
c291cmNlX2dldF9taW1lX3R5cGUoV2ViUmVzb3VyY2VGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rw
b2ludGVyIGRhdGEpCi17Ci0gICAgZ2NoYXIqIG1pbWVfdHlwZTsKLSAgICBnX29iamVjdF9nZXQo
R19PQkpFQ1QoZml4dHVyZS0+d2ViUmVzb3VyY2UpLCAibWltZS10eXBlIiwgJm1pbWVfdHlwZSwg
TlVMTCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKG1pbWVfdHlwZSwgPT0sICJ0ZXh0L2h0bWwiKTsK
LSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfbWltZV90eXBlKGZp
eHR1cmUtPndlYlJlc291cmNlKSw9PSwidGV4dC9odG1sIik7Ci0gICAgZ19mcmVlKG1pbWVfdHlw
ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZW5jb2Rp
bmcoV2ViUmVzb3VyY2VGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0g
ICAgZ2NoYXIqIHRleHRfZW5jb2Rpbmc7Ci0gICAgZ19vYmplY3RfZ2V0KEdfT0JKRUNUKGZpeHR1
cmUtPndlYlJlc291cmNlKSwgImVuY29kaW5nIiwgJnRleHRfZW5jb2RpbmcsIE5VTEwpOwotICAg
IGdfYXNzZXJ0X2NtcHN0cih0ZXh0X2VuY29kaW5nLCA9PSwgInV0ZjgiKTsKLSAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZW5jb2RpbmcoZml4dHVyZS0+d2ViUmVz
b3VyY2UpLD09LCJ1dGY4Iik7Ci0gICAgZ19mcmVlKHRleHRfZW5jb2RpbmcpOwotfQotCi1zdGF0
aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X2ZyYW1lX25hbWUoV2ViUmVzb3Vy
Y2VGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ2NoYXIqIGZy
YW1lX25hbWU7Ci0gICAgZ19vYmplY3RfZ2V0KEdfT0JKRUNUKGZpeHR1cmUtPndlYlJlc291cmNl
KSwgImZyYW1lLW5hbWUiLCAmZnJhbWVfbmFtZSwgTlVMTCk7Ci0gICAgZ19hc3NlcnRfY21wc3Ry
KGZyYW1lX25hbWUsID09LCAiRXhhbXBsZS5jb20iKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Vi
a2l0X3dlYl9yZXNvdXJjZV9nZXRfZnJhbWVfbmFtZShmaXh0dXJlLT53ZWJSZXNvdXJjZSksPT0s
IkV4YW1wbGUuY29tIik7Ci0gICAgZ19mcmVlKGZyYW1lX25hbWUpOwotfQotCi1zdGF0aWMgdm9p
ZCByZXNvdXJjZV9yZXF1ZXN0X3N0YXJ0aW5nX2NiKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBX
ZWJLaXRXZWJGcmFtZSogd2ViX2ZyYW1lLCBXZWJLaXRXZWJSZXNvdXJjZSogd2ViX3Jlc291cmNl
LCBXZWJLaXROZXR3b3JrUmVxdWVzdCogcmVxdWVzdCwgV2ViS2l0TmV0d29ya1Jlc3BvbnNlKiBy
ZXNwb25zZSwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBnaW50KiBiZWVuX3RoZXJlID0gZGF0YTsK
LSAgICAqYmVlbl90aGVyZSA9ICpiZWVuX3RoZXJlICsgMTsKLQotICAgIGlmICgqYmVlbl90aGVy
ZSA9PSAxKSB7Ci0gICAgICAgIGdfYXNzZXJ0KCFtYWluX3Jlc291cmNlKTsKLSAgICAgICAgbWFp
bl9yZXNvdXJjZSA9IGdfb2JqZWN0X3JlZih3ZWJfcmVzb3VyY2UpOwotCi0gICAgICAgIGdfYXNz
ZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3Jlc291cmNlX2dldF91cmkod2ViX3Jlc291cmNlKSwgPT0s
IGJhc2VfdXJpKTsKLQotICAgICAgICAvKiBUaGlzIHNob3VsZCBiZSBhIHJlZGlyZWN0LCBzbyB0
aGUgcmVzcG9uc2UgbXVzdCBiZSBOVUxMICovCi0gICAgICAgIGdfYXNzZXJ0KCFyZXNwb25zZSk7
Ci0gICAgfSBlbHNlIGlmICgqYmVlbl90aGVyZSA9PSAyKSB7Ci0gICAgICAgIGNoYXIqIHVyaSA9
IGdfc3RyZHVwX3ByaW50ZigiJXNpbmRleC5odG1sIiwgYmFzZV91cmkpOwotCi0gICAgICAgIGdf
YXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3Jlc291cmNlX2dldF91cmkod2ViX3Jlc291cmNlKSwg
PT0sIHVyaSk7Ci0KLSAgICAgICAgLyogQ2FuY2VsIHRoZSByZXF1ZXN0LiAqLwotICAgICAgICB3
ZWJraXRfbmV0d29ya19yZXF1ZXN0X3NldF91cmkocmVxdWVzdCwgImFib3V0OmJsYW5rIik7Ci0K
LSAgICAgICAgZ19mcmVlKHVyaSk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBub3RpZnlfbG9h
ZF9zdGF0dXNfY2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIEdQYXJhbVNwZWMqIHBzcGVjLCBn
cG9pbnRlciBkYXRhKQotewotICAgIGlmICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVz
KHdlYl92aWV3KSA9PSBXRUJLSVRfTE9BRF9GSU5JU0hFRCkgewotICAgICAgICBnYm9vbGVhbiog
YmVlbl90aGVyZSA9IGRhdGE7Ci0gICAgICAgICpiZWVuX3RoZXJlID0gVFJVRTsKLQotICAgICAg
ICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dldF91cmkod2ViX3ZpZXcpLCA9PSwg
ImFib3V0OmJsYW5rIik7Ci0KLSAgICAgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKLSAgICB9
Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2ViX3Jlc291cmNlX2xvYWRpbmcoKQotewotICAgIFdl
YktpdFdlYlZpZXcqIHdlYl92aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19u
ZXcoKSk7Ci0gICAgZ2ludCBiZWVuX3RvX3Jlc291cmNlX3JlcXVlc3Rfc3RhcnRpbmcgPSAwOwot
ICAgIGdib29sZWFuIGJlZW5fdG9fbG9hZF9maW5pc2hlZCA9IEZBTFNFOwotICAgIFdlYktpdFdl
YkZyYW1lKiB3ZWJfZnJhbWU7Ci0gICAgV2ViS2l0V2ViRGF0YVNvdXJjZSogZGF0YV9zb3VyY2U7
Ci0KLSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotCi0gICAgZ19vYmpl
Y3RfcmVmX3Npbmsod2ViX3ZpZXcpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh3ZWJfdmlldywg
InJlc291cmNlLXJlcXVlc3Qtc3RhcnRpbmciLAotICAgICAgICAgICAgICAgICAgICAgR19DQUxM
QkFDSyhyZXNvdXJjZV9yZXF1ZXN0X3N0YXJ0aW5nX2NiKSwKLSAgICAgICAgICAgICAgICAgICAg
ICZiZWVuX3RvX3Jlc291cmNlX3JlcXVlc3Rfc3RhcnRpbmcpOwotCi0gICAgZ19zaWduYWxfY29u
bmVjdCh3ZWJfdmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLAotICAgICAgICAgICAgICAgICAg
ICAgR19DQUxMQkFDSyhub3RpZnlfbG9hZF9zdGF0dXNfY2IpLAotICAgICAgICAgICAgICAgICAg
ICAgJmJlZW5fdG9fbG9hZF9maW5pc2hlZCk7Ci0KLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91
cmkod2ViX3ZpZXcsIGJhc2VfdXJpKTsKLQotICAgIC8qIFdlIHdvbid0IGdldCBmaW5pc2hlZCBp
bW1lZGlhdGVseSwgYmVjYXVzZSBvZiB0aGUgcmVkaXJlY3QgKi8KLSAgICBnX21haW5fbG9vcF9y
dW4obG9vcCk7Ci0gICAgCi0gICAgd2ViX2ZyYW1lID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWlu
X2ZyYW1lKHdlYl92aWV3KTsKLSAgICBkYXRhX3NvdXJjZSA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0
X2RhdGFfc291cmNlKHdlYl9mcmFtZSk7Ci0KLSAgICBnX2Fzc2VydChtYWluX3Jlc291cmNlKTsK
LSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2RhdGFfc291cmNlX2dldF9tYWluX3Jlc291cmNlKGRh
dGFfc291cmNlKSA9PSBtYWluX3Jlc291cmNlKTsKLSAgICBnX29iamVjdF91bnJlZihtYWluX3Jl
c291cmNlKTsKLSAgICAKLSAgICBnX2Fzc2VydF9jbXBpbnQoYmVlbl90b19yZXNvdXJjZV9yZXF1
ZXN0X3N0YXJ0aW5nLCA9PSwgMik7Ci0gICAgZ19hc3NlcnRfY21waW50KGJlZW5fdG9fbG9hZF9m
aW5pc2hlZCwgPT0sIFRSVUUpOwotCi0gICAgZ19vYmplY3RfdW5yZWYod2ViX3ZpZXcpOwotICAg
IGdfbWFpbl9sb29wX3VucmVmKGxvb3ApOwotfQotCi1zdGF0aWMgdm9pZCByZXNvdXJjZV9yZXF1
ZXN0X3N0YXJ0aW5nX3N1Yl9jYihXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgV2ViS2l0V2ViRnJh
bWUqIHdlYl9mcmFtZSwgV2ViS2l0V2ViUmVzb3VyY2UqIHdlYl9yZXNvdXJjZSwgV2ViS2l0TmV0
d29ya1JlcXVlc3QqIHJlcXVlc3QsIFdlYktpdE5ldHdvcmtSZXNwb25zZSogcmVzcG9uc2UsIGdw
b2ludGVyIGRhdGEpCi17Ci0gICAgaWYgKCFtYWluX3Jlc291cmNlKQotICAgICAgICBtYWluX3Jl
c291cmNlID0gZ19vYmplY3RfcmVmKHdlYl9yZXNvdXJjZSk7Ci0gICAgZWxzZSBpZiAoIXN1Yl9y
ZXNvdXJjZSkKLSAgICAgIHN1Yl9yZXNvdXJjZSA9IGdfb2JqZWN0X3JlZih3ZWJfcmVzb3VyY2Up
OwotfQotCi1zdGF0aWMgdm9pZCBub3RpZnlfbG9hZF9zdGF0dXNfc3ViX2NiKFdlYktpdFdlYlZp
ZXcqIHdlYl92aWV3LCBHUGFyYW1TcGVjKiBwc3BlYywgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBp
ZiAod2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJfdmlldykgPT0gV0VCS0lUX0xP
QURfRklOSVNIRUQpCi0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci19Ci0KLXN0YXRp
YyBnYm9vbGVhbiBpZGxlX3F1aXRfbG9vcF9jYihncG9pbnRlciBkYXRhKQotewotICAgIGdfbWFp
bl9sb29wX3F1aXQobG9vcCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCB0
ZXN0X3dlYl9yZXNvdXJjZV9zdWJfcmVzb3VyY2VfbG9hZGluZygpCi17Ci0gICAgV2ViS2l0V2Vi
Vmlldyogd2ViX3ZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsK
LSAgICBXZWJLaXRXZWJGcmFtZSogd2ViX2ZyYW1lOwotICAgIFdlYktpdFdlYkRhdGFTb3VyY2Uq
IGRhdGFfc291cmNlOwotICAgIEdMaXN0KiBzdWJfcmVzb3VyY2VzOwotICAgIGNoYXIqIHVyaSA9
IGdfc3RyZHVwX3ByaW50ZigiJXNtYWluLmh0bWwiLCBiYXNlX3VyaSk7Ci0KLSAgICBtYWluX3Jl
c291cmNlID0gTlVMTDsKLSAgICAKLSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRS
VUUpOwotCi0gICAgZ19vYmplY3RfcmVmX3Npbmsod2ViX3ZpZXcpOwotCi0gICAgZ19zaWduYWxf
Y29ubmVjdCh3ZWJfdmlldywgInJlc291cmNlLXJlcXVlc3Qtc3RhcnRpbmciLAotICAgICAgICAg
ICAgICAgICAgICAgR19DQUxMQkFDSyhyZXNvdXJjZV9yZXF1ZXN0X3N0YXJ0aW5nX3N1Yl9jYiks
Ci0gICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLQotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2Vi
X3ZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwKLSAgICAgICAgICAgICAgICAgICAgIEdfQ0FM
TEJBQ0sobm90aWZ5X2xvYWRfc3RhdHVzX3N1Yl9jYiksCi0gICAgICAgICAgICAgICAgICAgICBO
VUxMKTsKLQotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh3ZWJfdmlldywgdXJpKTsKLQot
ICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLQotICAgIC8qIFRoZSBtYWluIHJlc291cmNlIHNo
b3VsZCBiZSBsb2FkZWQ7IG5vdyBsZXQncyB3YWl0IGZvciB0aGUgc3ViLXJlc291cmNlIHRvIGxv
YWQgKi8KLSAgICBnX2lkbGVfYWRkKGlkbGVfcXVpdF9sb29wX2NiLCBOVUxMKTsKLSAgICBnX21h
aW5fbG9vcF9ydW4obG9vcCk7Ci0gICAgCi0gICAgZ19hc3NlcnQobWFpbl9yZXNvdXJjZSAmJiBz
dWJfcmVzb3VyY2UpOwotICAgIGdfYXNzZXJ0KG1haW5fcmVzb3VyY2UgIT0gc3ViX3Jlc291cmNl
KTsKLQotICAgIHdlYl9mcmFtZSA9IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh3ZWJf
dmlldyk7Ci0gICAgZGF0YV9zb3VyY2UgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9kYXRhX3NvdXJj
ZSh3ZWJfZnJhbWUpOwotCi0gICAgZ19hc3NlcnQod2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRf
bWFpbl9yZXNvdXJjZShkYXRhX3NvdXJjZSkgPT0gbWFpbl9yZXNvdXJjZSk7Ci0gICAgZ19vYmpl
Y3RfdW5yZWYobWFpbl9yZXNvdXJjZSk7Ci0KLSAgICBzdWJfcmVzb3VyY2VzID0gd2Via2l0X3dl
Yl9kYXRhX3NvdXJjZV9nZXRfc3VicmVzb3VyY2VzKGRhdGFfc291cmNlKTsKLSAgICAvLyBFeHBl
Y3RlZCByZXNvdXJjZXM6IGphdmFzY3JpcHRzLmpzLCBmYXZpY29uLmljbwotICAgIGdfYXNzZXJ0
KHN1Yl9yZXNvdXJjZXMpOwotICAgIGdfYXNzZXJ0KHN1Yl9yZXNvdXJjZXMtPm5leHQpOwotICAg
IGdfYXNzZXJ0KCFzdWJfcmVzb3VyY2VzLT5uZXh0LT5uZXh0KTsKLQotICAgIC8vIFRlc3QgdGhh
dCB0aGUgb2JqZWN0IHdlIGdvdCBmcm9tIHRoZSBkYXRhIHNvdXJjZSBpcyB0aGUgc2FtZQotICAg
IC8vIHRoYXQgd2VudCB0aHJvdWdoIHJlc291cmNlLXJlcXVlc3Qtc3RhcnRpbmcuIE5vdGUgdGhh
dCB0aGUgb3JkZXIgaXMKLSAgICAvLyBub3QgaW1wb3J0YW50IChhbmQgbm90IGd1YXJhbnRlZWQg
c2luY2UgdGhlIHJlc291cmNlcyBhcmUgc3RvcmVkIGluIGEKLSAgICAvLyBoYXNodGFibGUpLgot
ICAgIGdfYXNzZXJ0KFdFQktJVF9XRUJfUkVTT1VSQ0Uoc3ViX3Jlc291cmNlcy0+ZGF0YSkgPT0g
c3ViX3Jlc291cmNlCi0gICAgICAgICAgICAgfHwgV0VCS0lUX1dFQl9SRVNPVVJDRShzdWJfcmVz
b3VyY2VzLT5uZXh0LT5kYXRhKSA9PSBzdWJfcmVzb3VyY2UpOwotCi0gICAgZ19vYmplY3RfdW5y
ZWYod2ViX3ZpZXcpOwotICAgIGdfbWFpbl9sb29wX3VucmVmKGxvb3ApOwotfQotCi1pbnQgbWFp
bihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCi17Ci0gICAgU291cFNlcnZlciogc2VydmVyOwotICAg
IFNvdXBVUkkqIHNvdXBfdXJpOwotCi0gICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5V
TEwpOwotCi0gICAgc2VydmVyID0gc291cF9zZXJ2ZXJfbmV3KFNPVVBfU0VSVkVSX1BPUlQsIDAs
IE5VTEwpOwotICAgIHNvdXBfc2VydmVyX3J1bl9hc3luYyhzZXJ2ZXIpOwotCi0gICAgc291cF9z
ZXJ2ZXJfYWRkX2hhbmRsZXIoc2VydmVyLCBOVUxMLCBzZXJ2ZXJfY2FsbGJhY2ssIE5VTEwsIE5V
TEwpOwotCi0gICAgc291cF91cmkgPSBzb3VwX3VyaV9uZXcoImh0dHA6Ly8xMjcuMC4wLjEvIik7
Ci0gICAgc291cF91cmlfc2V0X3BvcnQoc291cF91cmksIHNvdXBfc2VydmVyX2dldF9wb3J0KHNl
cnZlcikpOwotCi0gICAgYmFzZV91cmkgPSBzb3VwX3VyaV90b19zdHJpbmcoc291cF91cmksIEZB
TFNFKTsKLSAgICBzb3VwX3VyaV9mcmVlKHNvdXBfdXJpKTsKLQotICAgIGdfdGVzdF9idWdfYmFz
ZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC93
ZWJyZXNvdXJjZS9nZXRfdXJsIiwKLSAgICAgICAgICAgICAgIFdlYlJlc291cmNlRml4dHVyZSwg
MCwgd2ViX3Jlc291cmNlX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X3dlYmtp
dF93ZWJfcmVzb3VyY2VfZ2V0X3VybCwgd2ViX3Jlc291cmNlX2ZpeHR1cmVfdGVhcmRvd24pOwot
ICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvd2VicmVzb3VyY2UvZ2V0X21pbWVfdHlwZSIsCi0gICAg
ICAgICAgICAgICBXZWJSZXNvdXJjZUZpeHR1cmUsIDAsIHdlYl9yZXNvdXJjZV9maXh0dXJlX3Nl
dHVwLAotICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfd2ViX3Jlc291cmNlX2dldF9taW1lX3R5
cGUsIHdlYl9yZXNvdXJjZV9maXh0dXJlX3RlYXJkb3duKTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Vi
a2l0L3dlYnJlc291cmNlL2dldF90ZXh0X2VuY29kaW5nX25hbWUiLAotICAgICAgICAgICAgICAg
V2ViUmVzb3VyY2VGaXh0dXJlLCAwLCB3ZWJfcmVzb3VyY2VfZml4dHVyZV9zZXR1cCwKLSAgICAg
ICAgICAgICAgIHRlc3Rfd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZW5jb2RpbmcsIHdlYl9yZXNv
dXJjZV9maXh0dXJlX3RlYXJkb3duKTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L3dlYnJlc291
cmNlL2dldF9mcmFtZV9uYW1lIiwKLSAgICAgICAgICAgICAgIFdlYlJlc291cmNlRml4dHVyZSwg
MCwgd2ViX3Jlc291cmNlX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X3dlYmtp
dF93ZWJfcmVzb3VyY2VfZ2V0X2ZyYW1lX25hbWUsIHdlYl9yZXNvdXJjZV9maXh0dXJlX3RlYXJk
b3duKTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L3dlYnJlc291cmNlL2dldF9kYXRhIiwKLSAg
ICAgICAgICAgICAgIFdlYlJlc291cmNlRml4dHVyZSwgMCwgd2ViX3Jlc291cmNlX2ZpeHR1cmVf
c2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X2RhdGEs
IHdlYl9yZXNvdXJjZV9maXh0dXJlX3RlYXJkb3duKTsKLQotICAgIGdfdGVzdF9hZGRfZnVuYygi
L3dlYmtpdC93ZWJyZXNvdXJjZS9sb2FkaW5nIiwgdGVzdF93ZWJfcmVzb3VyY2VfbG9hZGluZyk7
Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnJlc291cmNlL3N1Yl9yZXNvdXJjZV9s
b2FkaW5nIiwgdGVzdF93ZWJfcmVzb3VyY2Vfc3ViX3Jlc291cmNlX2xvYWRpbmcpOwotCi0gICAg
cmV0dXJuIGdfdGVzdF9ydW4gKCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay90
ZXN0cy90ZXN0d2Vic2V0dGluZ3MuYyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJz
ZXR0aW5ncy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTQ4OWNkLi4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJzZXR0aW5ncy5jCisrKyAvZGV2
L251bGwKQEAgLTEsMTU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIE1p
Y2hhZWwgQWxvbnpvCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5j
bHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KLQotLyogUHJpdmF0
ZSBBUEkgKi8KLWNoYXIqIHdlYmtpdFdlYlNldHRpbmdzVXNlckFnZW50Rm9yVVJJKFdlYktpdFdl
YlNldHRpbmdzICpzZXR0aW5ncywgY29uc3QgY2hhciAqdXJpKTsKLQotc3RhdGljIHZvaWQgdGVz
dF93ZWJraXRfd2ViX3NldHRpbmdzX2NvcHkodm9pZCkKLXsKLSAgICBXZWJLaXRXZWJTZXR0aW5n
cyAqc2V0dGluZ3MgPSB3ZWJraXRfd2ViX3NldHRpbmdzX25ldygpOwotCi0gICAgLy8gU2V0IHNv
bWUgbm9uLWRlZmF1bHQgc2V0dGluZ3MgdG8gdmVyaWZ5IHRoYXQgc2V0dGluZ3MgYXJlIHByb3Bl
cmx5IGNvcGllZC4KLSAgICBnX29iamVjdF9zZXQoc2V0dGluZ3MsCi0gICAgICAgICAgICAgICAg
ICJlbmFibGUtd2ViZ2wiLCBUUlVFLAotICAgICAgICAgICAgICAgICAiZW5hYmxlLWZ1bGxzY3Jl
ZW4iLCBUUlVFLAotICAgICAgICAgICAgICAgICAiYXV0by1sb2FkLWltYWdlcyIsIEZBTFNFLAot
ICAgICAgICAgICAgICAgICAiZGVmYXVsdC1lbmNvZGluZyIsICJ1dGYtOCIsCi0gICAgICAgICAg
ICAgICAgICJlbmFibGUtbWVkaWFzb3VyY2UiLCBUUlVFLAotICAgICAgICAgICAgICAgICBOVUxM
KTsKLQotICAgIFdlYktpdFdlYlNldHRpbmdzICpjb3B5ID0gd2Via2l0X3dlYl9zZXR0aW5nc19j
b3B5KHNldHRpbmdzKTsKLQotICAgIGdib29sZWFuIGVuYWJsZVdlYkdMID0gRkFMU0U7Ci0gICAg
Z2Jvb2xlYW4gZW5hYmxlRnVsbHNjcmVlbiA9IEZBTFNFOwotICAgIGdib29sZWFuIGF1dG9Mb2Fk
SW1hZ2VzID0gRkFMU0U7Ci0gICAgZ2Jvb2xlYW4gZW5hYmxlTWVkaWFTb3VyY2UgPSBGQUxTRTsK
LSAgICBjaGFyICpkZWZhdWx0RW5jb2RpbmcgPSAwOwotICAgIGdfb2JqZWN0X2dldChjb3B5LAot
ICAgICAgICAgICAgICAgICAiZW5hYmxlLWZ1bGxzY3JlZW4iLCAmZW5hYmxlRnVsbHNjcmVlbiwK
LSAgICAgICAgICAgICAgICAgImVuYWJsZS13ZWJnbCIsICZlbmFibGVXZWJHTCwKLSAgICAgICAg
ICAgICAgICAgImF1dG8tbG9hZC1pbWFnZXMiLCAmYXV0b0xvYWRJbWFnZXMsCi0gICAgICAgICAg
ICAgICAgICJkZWZhdWx0LWVuY29kaW5nIiwgJmRlZmF1bHRFbmNvZGluZywKLSAgICAgICAgICAg
ICAgICAgImVuYWJsZS1tZWRpYXNvdXJjZSIsICZlbmFibGVNZWRpYVNvdXJjZSwKLSAgICAgICAg
ICAgICAgICAgTlVMTCk7Ci0KLSAgICBnX2Fzc2VydChlbmFibGVXZWJHTCk7Ci0gICAgZ19hc3Nl
cnQoZW5hYmxlRnVsbHNjcmVlbik7Ci0gICAgZ19hc3NlcnQoIWF1dG9Mb2FkSW1hZ2VzKTsKLSAg
ICBnX2Fzc2VydF9jbXBzdHIoZGVmYXVsdEVuY29kaW5nLCA9PSwgInV0Zi04Iik7Ci0gICAgZ19h
c3NlcnQoZW5hYmxlTWVkaWFTb3VyY2UpOwotICAgIGdfZnJlZShkZWZhdWx0RW5jb2RpbmcpOwot
fQotCi1zdGF0aWMgdm9pZCB0ZXN0X25vbl9xdWlya3lfdXNlcl9hZ2VudHMoV2ViS2l0V2ViU2V0
dGluZ3MgKnNldHRpbmdzLCBjb25zdCBjaGFyICpkZWZhdWx0VXNlckFnZW50KQotewotICAgIGNo
YXIgKnVzZXJBZ2VudCA9IDA7Ci0KLSAgICAvLyB0ZXN0IGEgY3VzdG9tIFVBIHN0cmluZwotICAg
IHVzZXJBZ2VudCA9IDA7Ci0gICAgZ19vYmplY3Rfc2V0KHNldHRpbmdzLCAidXNlci1hZ2VudCIs
ICJ0ZXN0d2Vic2V0dGluZ3MvMC4xIiwgTlVMTCk7Ci0gICAgZ19vYmplY3RfZ2V0KHNldHRpbmdz
LCJ1c2VyLWFnZW50IiwgJnVzZXJBZ2VudCwgTlVMTCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHVz
ZXJBZ2VudCwgPT0sICJ0ZXN0d2Vic2V0dGluZ3MvMC4xIik7Ci0gICAgZ19mcmVlKHVzZXJBZ2Vu
dCk7Ci0KLSAgICAvLyBzZXR0aW5nIGl0IHRvIE5VTEwgb3IgYW4gZW1wdHkgdmFsdWUgc2hvdWxk
IGdpdmUgdXMgdGhlIGRlZmF1bHQgVUEgc3RyaW5nCi0gICAgdXNlckFnZW50ID0gMDsKLSAgICBn
X29iamVjdF9zZXQoc2V0dGluZ3MsICJ1c2VyLWFnZW50IiwgMCwgTlVMTCk7Ci0gICAgZ19vYmpl
Y3RfZ2V0KHNldHRpbmdzLCJ1c2VyLWFnZW50IiwgJnVzZXJBZ2VudCwgTlVMTCk7Ci0gICAgZ19h
c3NlcnRfY21wc3RyKHVzZXJBZ2VudCwgPT0sIGRlZmF1bHRVc2VyQWdlbnQpOwotICAgIGdfZnJl
ZSh1c2VyQWdlbnQpOwotCi0gICAgdXNlckFnZW50ID0gMDsKLSAgICBnX29iamVjdF9zZXQoc2V0
dGluZ3MsICJ1c2VyLWFnZW50IiwgIiIsIE5VTEwpOwotICAgIGdfb2JqZWN0X2dldChzZXR0aW5n
cywidXNlci1hZ2VudCIsICZ1c2VyQWdlbnQsIE5VTEwpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih1
c2VyQWdlbnQsID09LCBkZWZhdWx0VXNlckFnZW50KTsKLSAgICBnX2ZyZWUodXNlckFnZW50KTsK
LX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3NldHRpbmdzX3VzZXJfYWdlbnQodm9p
ZCkKLXsKLSAgICBXZWJLaXRXZWJTZXR0aW5ncyAqc2V0dGluZ3M7Ci0gICAgR3RrV2lkZ2V0ICp3
ZWJWaWV3OwotICAgIGNoYXIgKmRlZmF1bHRVc2VyQWdlbnQ7Ci0gICAgY2hhciAqdXNlckFnZW50
ID0gMDsKLSAgICBnX3Rlc3RfYnVnKCIxNzM3NSIpOwotCi0gICAgd2ViVmlldyA9IHdlYmtpdF93
ZWJfdmlld19uZXcoKTsKLSAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKLQotICAgIHNl
dHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyhXRUJLSVRfV0VCX1ZJRVcod2Vi
VmlldykpOwotICAgIGRlZmF1bHRVc2VyQWdlbnQgPSBnX3N0cmR1cCh3ZWJraXRfd2ViX3NldHRp
bmdzX2dldF91c2VyX2FnZW50KHNldHRpbmdzKSk7Ci0KLSAgICB0ZXN0X25vbl9xdWlya3lfdXNl
cl9hZ2VudHMoc2V0dGluZ3MsIGRlZmF1bHRVc2VyQWdlbnQpOwotCi0gICAgLyogVGVzdCBxdWly
a3kgZ29vZ2xlIGRvbWFpbnMgKi8KLSAgICBnX29iamVjdF9zZXQoc2V0dGluZ3MsICJ1c2VyLWFn
ZW50IiwgInRlc3R3ZWJzZXR0aW5ncy8wLjEiLCBOVUxMKTsKLQotICAgIHVzZXJBZ2VudCA9IHdl
YmtpdFdlYlNldHRpbmdzVXNlckFnZW50Rm9yVVJJKHNldHRpbmdzLCAiaHR0cDovL3d3dy5nb29n
bGUuY29tLyIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih1c2VyQWdlbnQsID09LCAidGVzdHdlYnNl
dHRpbmdzLzAuMSIpOwotICAgIGdfZnJlZSh1c2VyQWdlbnQpOwotCi0gICAgdXNlckFnZW50ID0g
d2Via2l0V2ViU2V0dGluZ3NVc2VyQWdlbnRGb3JVUkkoc2V0dGluZ3MsICJodHRwOi8vZ21haWwu
Y29tLyIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih1c2VyQWdlbnQsID09LCAidGVzdHdlYnNldHRp
bmdzLzAuMSIpOwotICAgIGdfZnJlZSh1c2VyQWdlbnQpOwotCi0gICAgdXNlckFnZW50ID0gd2Vi
a2l0V2ViU2V0dGluZ3NVc2VyQWdlbnRGb3JVUkkoc2V0dGluZ3MsICJodHRwOi8vd3d3Lmdvb2ds
ZS5jb20uYnIvIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHVzZXJBZ2VudCwgPT0sICJ0ZXN0d2Vi
c2V0dGluZ3MvMC4xIik7Ci0gICAgZ19mcmVlKHVzZXJBZ2VudCk7Ci0KLSAgICB1c2VyQWdlbnQg
PSB3ZWJraXRXZWJTZXR0aW5nc1VzZXJBZ2VudEZvclVSSShzZXR0aW5ncywgImh0dHA6Ly9jYWxl
bmRhci5nb29nbGUuY29tLyIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih1c2VyQWdlbnQsID09LCAi
dGVzdHdlYnNldHRpbmdzLzAuMSIpOwotICAgIGdfZnJlZSh1c2VyQWdlbnQpOwotCi0gICAgLyog
Tm93IGVuYWJsZSBxdWlya3MgaGFuZGxpbmcgKi8KLSAgICBnX29iamVjdF9zZXQoc2V0dGluZ3Ms
ICJlbmFibGUtc2l0ZS1zcGVjaWZpYy1xdWlya3MiLCBUUlVFLCBOVUxMKTsKLQotICAgIHRlc3Rf
bm9uX3F1aXJreV91c2VyX2FnZW50cyhzZXR0aW5ncywgZGVmYXVsdFVzZXJBZ2VudCk7Ci0KLSAg
ICBnX29iamVjdF9zZXQoc2V0dGluZ3MsICJ1c2VyLWFnZW50IiwgInRlc3R3ZWJzZXR0aW5ncy8w
LjEiLCBOVUxMKTsKLQotICAgIHVzZXJBZ2VudCA9IHdlYmtpdFdlYlNldHRpbmdzVXNlckFnZW50
Rm9yVVJJKHNldHRpbmdzLCAiaHR0cDovL3d3dy5nb29nbGUuY29tLyIpOwotICAgIGdfYXNzZXJ0
X2NtcHN0cih1c2VyQWdlbnQsID09LCBkZWZhdWx0VXNlckFnZW50KTsKLSAgICBnX2ZyZWUodXNl
ckFnZW50KTsKLQotICAgIHVzZXJBZ2VudCA9IHdlYmtpdFdlYlNldHRpbmdzVXNlckFnZW50Rm9y
VVJJKHNldHRpbmdzLCAiaHR0cDovL2dtYWlsLmNvbS8iKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIo
dXNlckFnZW50LCA9PSwgZGVmYXVsdFVzZXJBZ2VudCk7Ci0gICAgZ19mcmVlKHVzZXJBZ2VudCk7
Ci0KLSAgICB1c2VyQWdlbnQgPSB3ZWJraXRXZWJTZXR0aW5nc1VzZXJBZ2VudEZvclVSSShzZXR0
aW5ncywgImh0dHA6Ly93d3cuZ29vZ2xlLmNvbS5ici8iKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIo
dXNlckFnZW50LCA9PSwgZGVmYXVsdFVzZXJBZ2VudCk7Ci0gICAgZ19mcmVlKHVzZXJBZ2VudCk7
Ci0KLSAgICB1c2VyQWdlbnQgPSB3ZWJraXRXZWJTZXR0aW5nc1VzZXJBZ2VudEZvclVSSShzZXR0
aW5ncywgImh0dHA6Ly93d3cuZ29vZ2xlLnVrLm5vdC5jb20uYnIvIik7Ci0gICAgZ19hc3NlcnRf
Y21wc3RyKHVzZXJBZ2VudCwgPT0sICJ0ZXN0d2Vic2V0dGluZ3MvMC4xIik7Ci0gICAgZ19mcmVl
KHVzZXJBZ2VudCk7Ci0KLSAgICBnX2ZyZWUoZGVmYXVsdFVzZXJBZ2VudCk7Ci0gICAgZ19vYmpl
Y3RfdW5yZWYod2ViVmlldyk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikK
LXsKLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAgICBnX3Rlc3Rf
YnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwotICAgIGdfdGVzdF9hZGRfZnVu
YygiL3dlYmtpdC93ZWJzZXR0aW5ncy91c2VyX2FnZW50IiwgdGVzdF93ZWJraXRfd2ViX3NldHRp
bmdzX3VzZXJfYWdlbnQpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJzZXR0aW5n
cy9jb3B5IiwgdGVzdF93ZWJraXRfd2ViX3NldHRpbmdzX2NvcHkpOwotICAgIHJldHVybiBnX3Rl
c3RfcnVuICgpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdl
YnZpZXcuYyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJ2aWV3LmMKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3MDM3MmMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dC9ndGsvdGVzdHMvdGVzdHdlYnZpZXcuYworKysgL2Rldi9udWxsCkBAIC0xLDc0NiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgQ29sbGFib3JhIEx0ZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAidGVzdF91
dGlscy5oIgotCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNs
dWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxnbGliL2dzdGRp
by5oPgotI2luY2x1ZGUgPGdkay9nZGsuaD4KLSNpbmNsdWRlIDxnZGsvZ2Rra2V5c3ltcy5oPgot
I2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+Ci0KLUdNYWlu
TG9vcCogbG9vcDsKLVNvdXBTZXNzaW9uICpzZXNzaW9uOwotY2hhciogYmFzZV91cmk7Ci0KLS8q
IEZvciByZWFsIHJlcXVlc3QgdGVzdGluZyAqLwotc3RhdGljIHZvaWQKLXNlcnZlcl9jYWxsYmFj
ayhTb3VwU2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtc2csCi0gICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqIHF1ZXJ5LAotICAgICAgICAgICAgICAgICBT
b3VwQ2xpZW50Q29udGV4dCogY29udGV4dCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBpZiAobXNn
LT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRf
c3RhdHVzKG1zZywgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1zZywgU09VUF9TVEFUVVNf
T0spOwotCi0gICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvZmF2aWNvbi5pY28iKSkgewotICAg
ICAgICBjaGFyKiBjb250ZW50czsKLSAgICAgICAgZ3NpemUgbGVuZ3RoOwotICAgICAgICBHRXJy
b3IqIGVycm9yID0gTlVMTDsKLQotICAgICAgICBnX2ZpbGVfZ2V0X2NvbnRlbnRzKCJibGFuay5p
Y28iLCAmY29udGVudHMsICZsZW5ndGgsICZlcnJvcik7Ci0gICAgICAgIGdfYXNzZXJ0KCFlcnJv
cik7Ci0KLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1zZy0+cmVzcG9uc2VfYm9k
eSwgU09VUF9NRU1PUllfVEFLRSwgY29udGVudHMsIGxlbmd0aCk7Ci0gICAgfSBlbHNlIGlmIChn
X3N0cl9lcXVhbChwYXRoLCAiL2JpZ2Rpdi5odG1sIikpIHsKLSAgICAgICAgY2hhciogY29udGVu
dHMgPSBnX3N0cmR1cCgiPGh0bWw+PGJvZHk+PGEgaWQ9XCJsaW5rXCIgaHJlZj1cImh0dHA6Ly9h
YmMuZGVmXCI+dGVzdDwvYT48ZGl2IHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogZ3JlZW47IGhl
aWdodDogMTIwMHB4O1wiPjwvZGl2PjwvYm9keT48L2h0bWw+Iik7Ci0gICAgICAgIHNvdXBfbWVz
c2FnZV9ib2R5X2FwcGVuZChtc2ctPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGNv
bnRlbnRzLCBzdHJsZW4oY29udGVudHMpKTsKLSAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBh
dGgsICIvaWZyYW1lLmh0bWwiKSkgewotICAgICAgICBjaGFyKiBjb250ZW50cyA9IGdfc3RyZHVw
KCI8aHRtbD48Ym9keSBpZD1cInNvbWUtY29udGVudFwiPjxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5k
LWNvbG9yOiBncmVlbjsgaGVpZ2h0OiA1MHB4O1wiPjwvZGl2PjxpZnJhbWUgc3JjPVwiYmlnZGl2
Lmh0bWxcIj48L2lmcmFtZT48L2JvZHk+PC9odG1sPiIpOwotICAgICAgICBzb3VwX21lc3NhZ2Vf
Ym9keV9hcHBlbmQobXNnLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBjb250ZW50
cywgc3RybGVuKGNvbnRlbnRzKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY2hhciogY29udGVu
dHMgPSBnX3N0cmR1cCgiPGh0bWw+PGJvZHk+dGVzdDwvYm9keT48L2h0bWw+Iik7Ci0gICAgICAg
IHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtc2ctPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZ
X1RBS0UsIGNvbnRlbnRzLCBzdHJsZW4oY29udGVudHMpKTsKLSAgICB9Ci0KLSAgICBzb3VwX21l
c3NhZ2VfYm9keV9jb21wbGV0ZShtc2ctPnJlc3BvbnNlX2JvZHkpOwotfQotCi1zdGF0aWMgdm9p
ZCBpZGxlX3F1aXRfbG9vcF9jYihXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgR1BhcmFtU3BlYyog
cHNwZWMsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgaWYgKHdlYmtpdF93ZWJfdmlld19nZXRfbG9h
ZF9zdGF0dXMod2ViX3ZpZXcpID09IFdFQktJVF9MT0FEX0ZJTklTSEVEIHx8Ci0gICAgICAgIHdl
YmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMod2ViX3ZpZXcpID09IFdFQktJVF9MT0FEX0ZB
SUxFRCkKLSAgICAgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKLX0KLQotc3RhdGljIGdib29s
ZWFuIHRpbWVvdXRfY2IoZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBnX2Vycm9yKCJEaWRuJ3QgZ2V0
IGljb24tdXJpIGJlZm9yZSB0aW1pbmcgb3V0LiIpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQot
c3RhdGljIHZvaWQgaWNvbl91cmlfY2hhbmdlZF9jYihXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywg
R1BhcmFtU3BlYyogcHNwZWMsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgY2hhciogZXhwZWN0ZWRf
dXJpOwotCi0gICAgZ19hc3NlcnRfY21wc3RyKGdfcGFyYW1fc3BlY19nZXRfbmFtZShwc3BlYyks
ID09LCAiaWNvbi11cmkiKTsKLQotICAgIGV4cGVjdGVkX3VyaSA9IGdfc3RyZHVwX3ByaW50Zigi
JXNmYXZpY29uLmljbyIsIGJhc2VfdXJpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dl
Yl92aWV3X2dldF9pY29uX3VyaSh3ZWJfdmlldyksID09LCBleHBlY3RlZF91cmkpOwotICAgIGdf
ZnJlZShleHBlY3RlZF91cmkpOwotCi0gICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKLX0KLQot
c3RhdGljIHZvaWQgaWNvbl9sb2FkZWRfY2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIGNoYXIq
IGljb25fdXJpLCBncG9pbnRlciBkYXRhKQotewotICAgIGdib29sZWFuKiBiZWVuX2hlcmUgPSAo
Z2Jvb2xlYW4qKWRhdGE7Ci0gICAgY2hhciogZXhwZWN0ZWRfdXJpID0gZ19zdHJkdXBfcHJpbnRm
KCIlc2Zhdmljb24uaWNvIiwgYmFzZV91cmkpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihpY29uX3Vy
aSwgPT0sIGV4cGVjdGVkX3VyaSk7Ci0gICAgZ19mcmVlKGV4cGVjdGVkX3VyaSk7Ci0KLSAgICBn
X2Fzc2VydF9jbXBzdHIoaWNvbl91cmksID09LCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fdXJp
KHdlYl92aWV3KSk7Ci0KLSAgICAqYmVlbl9oZXJlID0gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQg
dGVzdF93ZWJraXRfd2ViX3ZpZXdfaWNvbl91cmkoKQotewotICAgIGdib29sZWFuIGJlZW5fdG9f
aWNvbl9sb2FkZWQgPSBGQUxTRTsKLSAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gV0VCS0lUX1dF
Ql9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3NpbmsoR19P
QkpFQ1QodmlldykpOwotCi0gICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsK
LQotICAgIGdfb2JqZWN0X2Nvbm5lY3QoR19PQkpFQ1QodmlldyksCi0gICAgICAgICAgICAgICAg
ICAgICAic2lnbmFsOjpub3RpZnk6Omljb24tdXJpIiwgaWNvbl91cmlfY2hhbmdlZF9jYiwgTlVM
TCwKLSAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6Omljb24tbG9hZGVkIiwgaWNvbl9sb2Fk
ZWRfY2IsICZiZWVuX3RvX2ljb25fbG9hZGVkLAotICAgICAgICAgICAgICAgICAgICAgTlVMTCk7
Ci0KLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkodmlldywgYmFzZV91cmkpOwotCi0gICAg
Z3VpbnQgdGltZW91dF9pZCA9IGdfdGltZW91dF9hZGQoNTAwLCB0aW1lb3V0X2NiLCAwKTsKLQot
ICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLQotICAgIGdfc291cmNlX3JlbW92ZSh0aW1lb3V0
X2lkKTsKLQotICAgIGdfYXNzZXJ0KGJlZW5fdG9faWNvbl9sb2FkZWQpOwotCi0gICAgZ19vYmpl
Y3RfdW5yZWYodmlldyk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBtYXBfZXZlbnRfY2IoR3RrV2lk
Z2V0ICp3aWRnZXQsIEdka0V2ZW50KiBldmVudCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBHTWFp
bkxvb3AqIGxvb3AgPSAoR01haW5Mb29wKilkYXRhOwotICAgIGdfbWFpbl9sb29wX3F1aXQobG9v
cCk7Ci0KLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBxdWl0X2FmdGVy
X3Nob3J0X2RlbGF5X2NiKGdwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19tYWluX2xvb3BfcXVpdCgo
R01haW5Mb29wKilkYXRhKTsKLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lkIHRl
c3Rfd2Via2l0X3dlYl92aWV3X2dyYWJfZm9jdXMoKQotewotICAgIGNoYXIqIHVyaSA9IGdfc3Ry
Y29uY2F0KGJhc2VfdXJpLCAiaWZyYW1lLmh0bWwiLCBOVUxMKTsKLSAgICBHdGtXaWRnZXQqIHdp
bmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfUE9QVVApOwotICAgIEd0a1dpZGdldCog
c2Nyb2xsZWRfd2luZG93ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19uZXcoTlVMTCwgTlVMTCk7Ci0g
ICAgV2ViS2l0V2ViVmlldyogdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdf
bmV3KCkpOwotICAgIEd0a0FkanVzdG1lbnQqIGFkanVzdG1lbnQ7Ci0KLSAgICBndGtfd2luZG93
X3NldF9kZWZhdWx0X3NpemUoR1RLX1dJTkRPVyh3aW5kb3cpLCA0MDAsIDIwMCk7Ci0KLSAgICBn
dGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHNjcm9sbGVkX3dpbmRvdyk7
Ci0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihzY3JvbGxlZF93aW5kb3cpLCBH
VEtfV0lER0VUKHZpZXcpKTsKLQotICAgIGd0a19zY3JvbGxlZF93aW5kb3dfc2V0X3BvbGljeShH
VEtfU0NST0xMRURfV0lORE9XKHNjcm9sbGVkX3dpbmRvdyksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdUS19QT0xJQ1lfQVVUT01BVElDLCBHVEtfUE9MSUNZX0FVVE9NQVRJ
Qyk7Ci0KLSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotCi0gICAgZ19z
aWduYWxfY29ubmVjdCh2aWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0soaWRs
ZV9xdWl0X2xvb3BfY2IpLCBOVUxMKTsKLQotICAgIC8qIFdhaXQgZm9yIHdpbmRvdyB0byBzaG93
IHVwICovCi0gICAgZ3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpOwotICAgIGdfc2lnbmFsX2Nv
bm5lY3Qod2luZG93LCAibWFwLWV2ZW50IiwKLSAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJB
Q0sobWFwX2V2ZW50X2NiKSwgbG9vcCk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0g
ICAgLyogTG9hZCBhIHBhZ2Ugd2l0aCBhIGJpZyBkaXYgdGhhdCB3aWxsIGNhdXNlIHNjcm9sbGJh
cnMgdG8gYXBwZWFyICovCi0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHZpZXcsIHVyaSk7
Ci0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAgYWRqdXN0bWVudCA9IGd0a19zY3Jv
bGxlZF93aW5kb3dfZ2V0X3ZhZGp1c3RtZW50KEdUS19TQ1JPTExFRF9XSU5ET1coc2Nyb2xsZWRf
d2luZG93KSk7Ci0gICAgZ19hc3NlcnRfY21wZmxvYXQoZ3RrX2FkanVzdG1lbnRfZ2V0X3ZhbHVl
KGFkanVzdG1lbnQpLCA9PSwgMC4wKTsKLQotICAgIC8qIFNpbmNlIHdlYmtpdF93ZWJfdmlld19l
eGVjdXRlX3NjcmlwdCBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZSwKLSAgICAgICBpdCBpcyBpbXBv
c3NpYmxlIHRvIGtub3cgaWYgYW4gaW5uZXIgZG9jdW1lbnQgaGFzIGZvY3VzIGFmdGVyCi0gICAg
ICAgYSBub2RlIG9mIGl0IHdhcyBmb2N1c2VkIHZpYSAuZm9jdXMoKSBtZXRob2QuCi0gICAgICAg
VGhlIGNvZGUgYmVsb3cgaXMgYW4gd29ya2Fyb3VuZDogaWYgdGhlIG5vZGUgaGFzIGZvY3VzLCBh
IHNjcm9sbAotICAgICAgIGFjdGlvbiBpcyBwZXJmb3JtZWQgYW5kIGFmdGVyd2FyZCBpdCBpcyBj
aGVja2VkIGlmIHRoZSBhZGp1c3RtZW50Ci0gICAgICAgaGFzIHRvIGJlIGRpZmZlcmVudCBmcm9t
IDAuCi0gICAgKi8KLSAgICBjaGFyIHNjcmlwdFtdID0gInZhciBpbm5lckRvYyA9IGRvY3VtZW50
LmRlZmF1bHRWaWV3LmZyYW1lc1swXS5kb2N1bWVudDsgXAotICAgICAgICAgICAgICAgICAgICAg
aW5uZXJEb2MuZ2V0RWxlbWVudEJ5SWQoXCJsaW5rXCIpLmZvY3VzKCk7ICAgICAgICAgICAgICBc
Ci0gICAgICAgICAgICAgICAgICAgICBpZiAoaW5uZXJEb2MuaGFzRm9jdXMoKSkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5z
Y3JvbGxCeSgwLCAxMDApOyI7Ci0KLSAgICAvKiBGb2N1cyBhbiBlbGVtZW50IHVzaW5nIEphdmFT
Y3JpcHQgKi8KLSAgICB3ZWJraXRfd2ViX3ZpZXdfZXhlY3V0ZV9zY3JpcHQodmlldywgc2NyaXB0
KTsKLQotICAgIC8qIEFkanVzdG1lbnRzIHVwZGF0ZSBhc3luY2hyb25vdXNseSwgc28gd2UgbXVz
dCB3YWl0IGEgYml0LiAqLwotICAgIGdfdGltZW91dF9hZGQoMTAwLCBxdWl0X2FmdGVyX3Nob3J0
X2RlbGF5X2NiLCBsb29wKTsKLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICAvKiBN
YWtlIHN1cmUgdGhlIFNjcm9sbGVkV2luZG93IG5vdGljZWQgdGhlIHNjcm9sbCAqLwotICAgIGdf
YXNzZXJ0X2NtcGZsb2F0KGd0a19hZGp1c3RtZW50X2dldF92YWx1ZShhZGp1c3RtZW50KSwgIT0s
IDAuMCk7Ci0KLSAgICBnX2ZyZWUodXJpKTsKLSAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kod2luZG93
KTsKLX0KLQotc3RhdGljIHZvaWQgZG9fdGVzdF93ZWJraXRfd2ViX3ZpZXdfYWRqdXN0bWVudHMo
Z2Jvb2xlYW4gd2l0aF9wYWdlX2NhY2hlKQotewotICAgIGNoYXIqIGVmZmVjdGl2ZV91cmkgPSBn
X3N0cmNvbmNhdChiYXNlX3VyaSwgImJpZ2Rpdi5odG1sIiwgTlVMTCk7Ci0gICAgY2hhciogc2Vj
b25kX3VyaSA9IGdfc3RyY29uY2F0KGJhc2VfdXJpLCAiaWZyYW1lLmh0bWwiLCBOVUxMKTsKLSAg
ICBHdGtXaWRnZXQqIHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwp
OwotICAgIEd0a1dpZGdldCogc2Nyb2xsZWRfd2luZG93ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19u
ZXcoTlVMTCwgTlVMTCk7Ci0gICAgV2ViS2l0V2ViVmlldyogdmlldyA9IFdFQktJVF9XRUJfVklF
Vyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIEd0a0FkanVzdG1lbnQqIGFkanVzdG1lbnQ7
Ci0gICAgZG91YmxlIGxvd2VyOwotICAgIGRvdWJsZSB1cHBlcjsKLQotICAgIGlmICh3aXRoX3Bh
Z2VfY2FjaGUpIHsKLSAgICAgICAgV2ViS2l0V2ViU2V0dGluZ3MqIHNldHRpbmdzID0gd2Via2l0
X3dlYl92aWV3X2dldF9zZXR0aW5ncyh2aWV3KTsKLSAgICAgICAgZ19vYmplY3Rfc2V0KHNldHRp
bmdzLCAiZW5hYmxlLXBhZ2UtY2FjaGUiLCBUUlVFLCBOVUxMKTsKLSAgICB9Ci0KLSAgICBndGtf
d2luZG93X3NldF9kZWZhdWx0X3NpemUoR1RLX1dJTkRPVyh3aW5kb3cpLCA0MDAsIDIwMCk7Ci0K
LSAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHNjcm9sbGVkX3dp
bmRvdyk7Ci0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihzY3JvbGxlZF93aW5k
b3cpLCBHVEtfV0lER0VUKHZpZXcpKTsKLQotICAgIGd0a19zY3JvbGxlZF93aW5kb3dfc2V0X3Bv
bGljeShHVEtfU0NST0xMRURfV0lORE9XKHNjcm9sbGVkX3dpbmRvdyksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdUS19QT0xJQ1lfQVVUT01BVElDLCBHVEtfUE9MSUNZX0FV
VE9NQVRJQyk7Ci0KLSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotCi0g
ICAgZ19vYmplY3RfY29ubmVjdChHX09CSkVDVCh2aWV3KSwKLSAgICAgICAgICAgICAgICAgICAg
ICJzaWduYWw6Om5vdGlmeTo6bG9hZC1zdGF0dXMiLCBpZGxlX3F1aXRfbG9vcF9jYiwgTlVMTCwK
LSAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotCi0gICAgLyogV2FpdCBmb3Igd2luZG93IHRv
IHNob3cgdXAgKi8KLSAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7Ci0gICAgZ19zaWdu
YWxfY29ubmVjdCh3aW5kb3csICJtYXAtZXZlbnQiLAotICAgICAgICAgICAgICAgICAgICAgR19D
QUxMQkFDSyhtYXBfZXZlbnRfY2IpLCBsb29wKTsKLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7
Ci0KLSAgICAvKiBMb2FkIGEgcGFnZSB3aXRoIGEgYmlnIGRpdiB0aGF0IHdpbGwgY2F1c2Ugc2Ny
b2xsYmFycyB0byBhcHBlYXIgKi8KLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkodmlldywg
ZWZmZWN0aXZlX3VyaSk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAgLyogQWRq
dXN0bWVudHMgdXBkYXRlIGFzeW5jaHJvbm91c2x5LCBzbyB3ZSBtdXN0IHdhaXQgYSBiaXQuICov
Ci0gICAgZ190aW1lb3V0X2FkZCgxMDAsIHF1aXRfYWZ0ZXJfc2hvcnRfZGVsYXlfY2IsIGxvb3Ap
OwotICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLQotICAgIGFkanVzdG1lbnQgPSBndGtfc2Ny
b2xsZWRfd2luZG93X2dldF92YWRqdXN0bWVudChHVEtfU0NST0xMRURfV0lORE9XKHNjcm9sbGVk
X3dpbmRvdykpOwotICAgIGdfYXNzZXJ0X2NtcGZsb2F0KGd0a19hZGp1c3RtZW50X2dldF92YWx1
ZShhZGp1c3RtZW50KSwgPT0sIDAuMCk7Ci0KLSAgICBsb3dlciA9IGd0a19hZGp1c3RtZW50X2dl
dF9sb3dlcihhZGp1c3RtZW50KTsKLSAgICB1cHBlciA9IGd0a19hZGp1c3RtZW50X2dldF91cHBl
cihhZGp1c3RtZW50KTsKLQotICAgIC8qIFNjcm9sbCB0aGUgdmlldyB1c2luZyBKYXZhU2NyaXB0
ICovCi0gICAgd2Via2l0X3dlYl92aWV3X2V4ZWN1dGVfc2NyaXB0KHZpZXcsICJ3aW5kb3cuc2Ny
b2xsQnkoMCwgMTAwKSIpOwotCi0gICAgLyogQWRqdXN0bWVudHMgdXBkYXRlIGFzeW5jaHJvbm91
c2x5LCBzbyB3ZSBtdXN0IHdhaXQgYSBiaXQuICovCi0gICAgZ190aW1lb3V0X2FkZCgxMDAsIHF1
aXRfYWZ0ZXJfc2hvcnRfZGVsYXlfY2IsIGxvb3ApOwotICAgIGdfbWFpbl9sb29wX3J1bihsb29w
KTsKLQotICAgIC8qIE1ha2Ugc3VyZSB0aGUgU2Nyb2xsZWRXaW5kb3cgbm90aWNlZCB0aGUgc2Ny
b2xsICovCi0gICAgZ19hc3NlcnRfY21wZmxvYXQoZ3RrX2FkanVzdG1lbnRfZ2V0X3ZhbHVlKGFk
anVzdG1lbnQpLCA9PSwgMTAwLjApOwotCi0gICAgLyogTG9hZCBhIHNlY29uZCBVUkkgKi8KLSAg
ICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkodmlldywgc2Vjb25kX3VyaSk7Ci0gICAgZ19tYWlu
X2xvb3BfcnVuKGxvb3ApOwotCi0gICAgLyogVGhlIHBhZ2UgbG9hZGVkIGJ1dCB0aGUgYWRqdXN0
bWVudHMgbWF5IG5vdCBiZSB1cGRhdGVkIHlldC4gV2FpdCBhIGJpdC4gKi8KLSAgICBnX3RpbWVv
dXRfYWRkKDEwMCwgcXVpdF9hZnRlcl9zaG9ydF9kZWxheV9jYiwgbG9vcCk7Ci0gICAgZ19tYWlu
X2xvb3BfcnVuKGxvb3ApOwotCi0gICAgLyogTWFrZSBzdXJlIHRoZSBzY3JvbGxiYXIgaGFzIGJl
ZW4gcmVzZXQgKi8KLSAgICBnX2Fzc2VydF9jbXBmbG9hdChndGtfYWRqdXN0bWVudF9nZXRfdmFs
dWUoYWRqdXN0bWVudCksID09LCAwLjApOwotCi0gICAgLyogR28gYmFjayAqLwotICAgIHdlYmtp
dF93ZWJfdmlld19nb19iYWNrKHZpZXcpOwotCi0gICAgLyogV2hlbiB1c2luZyBwYWdlIGNhY2hl
LCBnb19iYWNrIHdpbGwgcmV0dXJuIHN5bmNyb25vdXNseSAqLwotICAgIGlmICghd2l0aF9wYWdl
X2NhY2hlKQotICAgICAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICAvKiBNYWtlIHN1
cmUgR1RLKyBoYXMgdGltZSB0byBwcm9jZXNzIHRoZSBjaGFuZ2VzIGluIHNpemUsIGZvciB0aGUg
YWRqdXNtZW50cyAqLwotICAgIHdoaWxlIChndGtfZXZlbnRzX3BlbmRpbmcoKSkKLSAgICAgICAg
Z3RrX21haW5faXRlcmF0aW9uKCk7Ci0KLSAgICAvKiBNYWtlIHN1cmUgdXBwZXIgYW5kIGxvd2Vy
IGJvdW5kcyBoYXZlIGJlZW4gcmVzdG9yZWQgY29ycmVjdGx5ICovCi0gICAgZ19hc3NlcnRfY21w
ZmxvYXQobG93ZXIsID09LCBndGtfYWRqdXN0bWVudF9nZXRfbG93ZXIoYWRqdXN0bWVudCkpOwot
ICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHVwcGVyLCA9PSwgZ3RrX2FkanVzdG1lbnRfZ2V0X3VwcGVy
KGFkanVzdG1lbnQpKTsKLSAgICBnX2Fzc2VydF9jbXBmbG9hdChndGtfYWRqdXN0bWVudF9nZXRf
dmFsdWUoYWRqdXN0bWVudCksID09LCAxMDAuMCk7Ci0KLSAgICBnX2ZyZWUoZWZmZWN0aXZlX3Vy
aSk7Ci0gICAgZ19mcmVlKHNlY29uZF91cmkpOwotCi0gICAgZ3RrX3dpZGdldF9kZXN0cm95KHdp
bmRvdyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl92aWV3X2FkanVzdG1lbnRz
KCkKLXsKLSAgICAvKiBUZXN0IHRoaXMgd2l0aCBwYWdlIGNhY2hlIGRpc2FibGVkLCBhbmQgZW5h
YmxlZC4gKi8KLSAgICBkb190ZXN0X3dlYmtpdF93ZWJfdmlld19hZGp1c3RtZW50cyhGQUxTRSk7
Ci0gICAgZG9fdGVzdF93ZWJraXRfd2ViX3ZpZXdfYWRqdXN0bWVudHMoVFJVRSk7Ci19Ci0KLWdi
b29sZWFuIGRlbGF5ZWRfZGVzdHJveShncG9pbnRlciBkYXRhKQotewotICAgIGd0a193aWRnZXRf
ZGVzdHJveShHVEtfV0lER0VUKGRhdGEpKTsKLSAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwot
ICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3ZpZXdf
ZGVzdHJveSgpCi17Ci0gICAgR3RrV2lkZ2V0KiB3aW5kb3c7Ci0gICAgR3RrV2lkZ2V0KiB3ZWJf
dmlldzsKLQotICAgIHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwp
OwotICAgIHdlYl92aWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygpOwotCi0gICAgZ3RrX2NvbnRh
aW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB3ZWJfdmlldyk7Ci0KLSAgICBndGtfd2lk
Z2V0X3Nob3dfYWxsKHdpbmRvdyk7Ci0KLSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEws
IFRSVUUpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh3aW5kb3csICJtYXAtZXZlbnQiLAotICAg
ICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhtYXBfZXZlbnRfY2IpLCBsb29wKTsKLSAgICBn
X21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICBnX2lkbGVfYWRkKGRlbGF5ZWRfZGVzdHJveSwg
d2ViX3ZpZXcpOwotICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLQotICAgIGd0a193aWRnZXRf
ZGVzdHJveSh3aW5kb3cpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfdmlld193
aW5kb3dfZmVhdHVyZXMoKQotewotICAgIEd0a1dpZGdldCogd2luZG93OwotICAgIEd0a1dpZGdl
dCogd2ViX3ZpZXc7Ci0gICAgCi0gICAgd2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRP
V19UT1BMRVZFTCk7Ci0gICAgd2ViX3ZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7Ci0gICAg
Ci0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB3ZWJfdmlldyk7
Ci0gICAgCi0gICAgZ3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpOwotICAgIAotICAgIGxvb3Ag
PSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KHdp
bmRvdywgIm1hcC1ldmVudCIsCi0gICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKG1hcF9l
dmVudF9jYiksIGxvb3ApOwotICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLSAgICAKLSAgICAv
KiBCdWcgIzM2MTQ0ICovCi0gICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKHdlYl92aWV3KSwgIndp
bmRvdy1mZWF0dXJlcyIsIE5VTEwsIE5VTEwpOwotICAgIAotICAgIGd0a193aWRnZXRfZGVzdHJv
eSh3aW5kb3cpOwotfSAgICAKLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3ZpZXdfaW5f
b2Zmc2NyZWVuX3dpbmRvd19kb2VzX25vdF9jcmFzaCgpCi17Ci0gICAgbG9vcCA9IGdfbWFpbl9s
b29wX25ldyhOVUxMLCBUUlVFKTsKLQotICAgIEd0a1dpZGdldCAqd2luZG93ID0gZ3RrX29mZnNj
cmVlbl93aW5kb3dfbmV3KCk7Ci0gICAgR3RrV2lkZ2V0ICp3ZWJfdmlldyA9IHdlYmtpdF93ZWJf
dmlld19uZXcoKTsKLQotICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93
KSwgd2ViX3ZpZXcpOwotICAgIGd0a193aWRnZXRfc2hvd19hbGwod2luZG93KTsKLSAgICBnX3Np
Z25hbF9jb25uZWN0KHdlYl92aWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0so
aWRsZV9xdWl0X2xvb3BfY2IpLCBOVUxMKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmko
V0VCS0lUX1dFQl9WSUVXKHdlYl92aWV3KSwgYmFzZV91cmkpOwotCi0gICAgZ19tYWluX2xvb3Bf
cnVuKGxvb3ApOwotCi0gICAgZ3RrX3dpZGdldF9kZXN0cm95KHdpbmRvdyk7Ci0gICAgZ19tYWlu
X2xvb3BfdW5yZWYobG9vcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl92aWV3
X2RvZXNfbm90X3N0ZWFsX2ZvY3VzKCkKLXsKLSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5V
TEwsIFRSVUUpOwotCi0gICAgR3RrV2lkZ2V0ICp3aW5kb3cgPSBndGtfb2Zmc2NyZWVuX3dpbmRv
d19uZXcoKTsKLSAgICBHdGtXaWRnZXQgKndlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7
Ci0gICAgR3RrV2lkZ2V0ICplbnRyeSA9IGd0a19lbnRyeV9uZXcoKTsKLQotI2lmZGVmIEdUS19B
UElfVkVSU0lPTl8yCi0gICAgR3RrV2lkZ2V0ICpib3ggPSBndGtfaGJveF9uZXcoRkFMU0UsIDAp
OwotI2Vsc2UKLSAgICBHdGtXaWRnZXQgKmJveCA9IGd0a19ib3hfbmV3KEdUS19PUklFTlRBVElP
Tl9IT1JJWk9OVEFMLCAwKTsKLSNlbmRpZgotCi0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NP
TlRBSU5FUihib3gpLCB3ZWJWaWV3KTsKLSAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJ
TkVSKGJveCksIGVudHJ5KTsKLSAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdp
bmRvdyksIGJveCk7Ci0gICAgZ3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpOwotCi0gICAgZ3Rr
X3dpZGdldF9ncmFiX2ZvY3VzKGVudHJ5KTsKLSAgICBnX2Fzc2VydChndGtfd2lkZ2V0X2lzX2Zv
Y3VzKGVudHJ5KSk7Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJub3RpZnk6Omxv
YWQtc3RhdHVzIiwgR19DQUxMQkFDSyhpZGxlX3F1aXRfbG9vcF9jYiksIE5VTEwpOwotICAgIHdl
YmtpdF93ZWJfdmlld19sb2FkX2h0bWxfc3RyaW5nKFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3KSwK
LSAgICAgICAgIjxodG1sPjxib2R5PiIKLSAgICAgICAgIiAgICA8aW5wdXQgaWQ9XCJlbnRyeVwi
IHR5cGU9XCJ0ZXh0XCIvPiIKLSAgICAgICAgIiAgICA8c2NyaXB0PiIKLSAgICAgICAgIiAgICAg
ICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJlbnRyeVwiKS5mb2N1cygpOyIKLSAgICAgICAg
IiAgICA8L3NjcmlwdD4iCi0gICAgICAgICI8L2JvZHk+PC9odG1sPiIsICJmaWxlOi8vIik7Ci0K
LSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICBnX2Fzc2VydChndGtfd2lkZ2V0X2lz
X2ZvY3VzKGVudHJ5KSk7Ci0KLSAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kod2luZG93KTsKLSAgICBn
X21haW5fbG9vcF91bnJlZihsb29wKTsKLX0KLQotc3RhdGljIGdib29sZWFuIGVtaXRLZXlTdHJv
a2UoV2ViS2l0V2ViVmlldyogd2ViVmlldykKLXsKLSAgICBHZGtFdmVudCogcHJlc3NFdmVudCA9
IGdka19ldmVudF9uZXcoR0RLX0tFWV9QUkVTUyk7Ci0gICAgcHJlc3NFdmVudC0+a2V5LmtleXZh
bCA9IEdES19LRVlfZjsKLSAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dp
bmRvdyhHVEtfV0lER0VUKHdlYlZpZXcpKTsKLSAgICBwcmVzc0V2ZW50LT5rZXkud2luZG93ID0g
d2luZG93OwotICAgIGdfb2JqZWN0X3JlZihwcmVzc0V2ZW50LT5rZXkud2luZG93KTsKLQotI2lm
bmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotICAgIEdka0RldmljZU1hbmFnZXIqIG1hbmFnZXIgPSBn
ZGtfZGlzcGxheV9nZXRfZGV2aWNlX21hbmFnZXIoZ2RrX3dpbmRvd19nZXRfZGlzcGxheSh3aW5k
b3cpKTsKLSAgICBnZGtfZXZlbnRfc2V0X2RldmljZShwcmVzc0V2ZW50LCBnZGtfZGV2aWNlX21h
bmFnZXJfZ2V0X2NsaWVudF9wb2ludGVyKG1hbmFnZXIpKTsKLSNlbmRpZgotCi0gICAgLy8gV2hl
biBzeW50aGVzaXppbmcgYW4gZXZlbnQsIGFuIGludmFsaWQgaGFyZHdhcmVfa2V5Y29kZSB2YWx1
ZQotICAgIC8vIGNhbiBjYXVzZSBpdCB0byBiZSBiYWRseSBwcm9jZXNzZWQgYnkgR3RrKy4KLSAg
ICBHZGtLZXltYXBLZXkqIGtleXM7Ci0gICAgZ2ludCBuX2tleXM7Ci0gICAgaWYgKGdka19rZXlt
YXBfZ2V0X2VudHJpZXNfZm9yX2tleXZhbChnZGtfa2V5bWFwX2dldF9kZWZhdWx0KCksIEdES19L
RVlfZiwgJmtleXMsICZuX2tleXMpKSB7Ci0gICAgICAgIHByZXNzRXZlbnQtPmtleS5oYXJkd2Fy
ZV9rZXljb2RlID0ga2V5c1swXS5rZXljb2RlOwotICAgICAgICBnX2ZyZWUoa2V5cyk7Ci0gICAg
fQotCi0gICAgR2RrRXZlbnQqIHJlbGVhc2VFdmVudCA9IGdka19ldmVudF9jb3B5KHByZXNzRXZl
bnQpOwotICAgIGd0a19tYWluX2RvX2V2ZW50KHByZXNzRXZlbnQpOwotICAgIGdka19ldmVudF9m
cmVlKHByZXNzRXZlbnQpOwotICAgIHJlbGVhc2VFdmVudC0+a2V5LnR5cGUgPSBHREtfS0VZX1JF
TEVBU0U7Ci0gICAgZ3RrX21haW5fZG9fZXZlbnQocmVsZWFzZUV2ZW50KTsKLSAgICBnZGtfZXZl
bnRfZnJlZShyZWxlYXNlRXZlbnQpOwotCi0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMg
Z2Jvb2xlYW4gZW50ZXJpbmdfZnVsbHNjcmVlbl9jYihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBH
T2JqZWN0KiBlbGVtZW50LCBnYm9vbGVhbiBibG9ja2VkKQotewotICAgIGlmIChibG9ja2VkKQot
ICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwotICAgIGVsc2UKLSAgICAgICAgZ190aW1l
b3V0X2FkZCgyMDAsIChHU291cmNlRnVuYykgZW1pdEtleVN0cm9rZSwgd2ViVmlldyk7Ci0gICAg
cmV0dXJuIGJsb2NrZWQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBsZWF2aW5nX2Z1bGxzY3JlZW5f
Y2IoV2ViS2l0V2ViVmlldyogd2ViVmlldywgR09iamVjdCogZWxlbWVudCwgZ3BvaW50ZXIgZGF0
YSkKLXsKLSAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwotICAgIHJldHVybiBGQUxTRTsKLX0K
LQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3ZpZXdfZnVsbHNjcmVlbihnY29uc3Rwb2lu
dGVyIGJsb2NrZWQpCi17Ci0gICAgR3RrV2lkZ2V0KiB3aW5kb3c7Ci0gICAgR3RrV2lkZ2V0KiB3
ZWJfdmlldzsKLSAgICBXZWJLaXRXZWJTZXR0aW5ncyAqc2V0dGluZ3M7Ci0KLSAgICB3aW5kb3cg
PSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKLSAgICB3ZWJfdmlldyA9IHdl
YmtpdF93ZWJfdmlld19uZXcoKTsKLQotICAgIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dl
dF9zZXR0aW5ncyhXRUJLSVRfV0VCX1ZJRVcod2ViX3ZpZXcpKTsKLSAgICBnX29iamVjdF9zZXQo
c2V0dGluZ3MsICJlbmFibGUtZnVsbHNjcmVlbiIsIFRSVUUsIE5VTEwpOwotICAgIHdlYmtpdF93
ZWJfdmlld19zZXRfc2V0dGluZ3MoV0VCS0lUX1dFQl9WSUVXKHdlYl92aWV3KSwgc2V0dGluZ3Mp
OwotCi0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB3ZWJfdmll
dyk7Ci0KLSAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7Ci0KLSAgICBsb29wID0gZ19t
YWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh3ZWJfdmll
dywgImVudGVyaW5nLWZ1bGxzY3JlZW4iLCBHX0NBTExCQUNLKGVudGVyaW5nX2Z1bGxzY3JlZW5f
Y2IpLCAoZ3BvaW50ZXIpIGJsb2NrZWQpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViX3ZpZXcs
ICJsZWF2aW5nLWZ1bGxzY3JlZW4iLCBHX0NBTExCQUNLKGxlYXZpbmdfZnVsbHNjcmVlbl9jYiks
IE5VTEwpOwotCi0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklF
Vyh3ZWJfdmlldyksICI8aHRtbD48Ym9keT4iCi0gICAgICAgICAgICAgICAgICAgIjxzY3JpcHQ+
IgotICAgICAgICAgICAgICAgICAgICJ2YXIgZXZlbnROYW1lID0gJ2tleXByZXNzJzsiCi0gICAg
ICAgICAgICAgICAgICAgImRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBmdW5j
dGlvbiAoKSB7IgotICAgICAgICAgICAgICAgICAgICIgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVt
ZW50LndlYmtpdFJlcXVlc3RGdWxsU2NyZWVuKCk7IgotICAgICAgICAgICAgICAgICAgICJ9LCBm
YWxzZSk7IgotICAgICAgICAgICAgICAgICAgICI8L3NjcmlwdD48L2JvZHk+PC9odG1sPiIsIE5V
TEwsIE5VTEwsIE5VTEwpOwotCi0gICAgZ190aW1lb3V0X2FkZCgxMDAsIChHU291cmNlRnVuYykg
ZW1pdEtleVN0cm9rZSwgV0VCS0lUX1dFQl9WSUVXKHdlYl92aWV3KSk7Ci0gICAgZ19tYWluX2xv
b3BfcnVuKGxvb3ApOwotCi0gICAgZ3RrX3dpZGdldF9kZXN0cm95KHdpbmRvdyk7Ci19Ci0KLXN0
YXRpYyBnYm9vbGVhbiBjaGVja01pbWVUeXBlRm9yRmlsdGVyKEd0a0ZpbGVGaWx0ZXIqIGZpbHRl
ciwgY29uc3QgZ2NoYXIqIG1pbWVUeXBlKQotewotICAgIEd0a0ZpbGVGaWx0ZXJJbmZvIGZpbHRl
cl9pbmZvOwotICAgIGZpbHRlcl9pbmZvLmNvbnRhaW5zID0gR1RLX0ZJTEVfRklMVEVSX01JTUVf
VFlQRTsKLSAgICBmaWx0ZXJfaW5mby5taW1lX3R5cGUgPSBtaW1lVHlwZTsKLSAgICByZXR1cm4g
Z3RrX2ZpbGVfZmlsdGVyX2ZpbHRlcihmaWx0ZXIsICZmaWx0ZXJfaW5mbyk7Ci19Ci0KLXN0YXRp
YyBnYm9vbGVhbiBydW5GaWxlQ2hvb3NlckNiTm9NdWx0aXNlbE5vTWltZShXZWJLaXRXZWJWaWV3
KiB3ZWJ2aWV3LCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QsIGdwb2ludGVyIGRh
dGEpCi17Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2Vs
ZWN0X211bHRpcGxlKHJlcXVlc3QpKTsKLQotICAgIGNvbnN0IGdjaGFyKiBjb25zdCogbWltZVR5
cGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKHJlcXVlc3Qp
OwotICAgIGdfYXNzZXJ0KCFtaW1lVHlwZXMpOwotICAgIEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciA9
IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIocmVxdWVz
dCk7Ci0gICAgZ19hc3NlcnQoIWZpbHRlcik7Ci0KLSAgICBjb25zdCBnY2hhciogY29uc3QqIHNl
bGVjdGVkRmlsZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2Zp
bGVzKHJlcXVlc3QpOwotICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZpbGVzKTsKLQotICAgIGdfbWFp
bl9sb29wX3F1aXQobG9vcCk7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVh
biBydW5GaWxlQ2hvb3NlckNiTXVsdGlzZWxOb01pbWUoV2ViS2l0V2ViVmlldyogd2Vidmlldywg
V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0LCBncG9pbnRlciBkYXRhKQotewotICAg
IGdfYXNzZXJ0KHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxl
KHJlcXVlc3QpKTsKLQotICAgIGNvbnN0IGdjaGFyKiBjb25zdCogbWltZVR5cGVzID0gd2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKHJlcXVlc3QpOwotICAgIGdfYXNz
ZXJ0KCFtaW1lVHlwZXMpOwotICAgIEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciA9IHdlYmtpdF9maWxl
X2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIocmVxdWVzdCk7Ci0gICAgZ19h
c3NlcnQoIWZpbHRlcik7Ci0gICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBzZWxlY3RlZEZpbGVzID0g
d2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0KTsK
LSAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxlcyk7Ci0KLSAgICAvLyBTZWxlY3Qgc29tZSBmaWxl
cy4KLSAgICBjb25zdCBnY2hhciogZmlsZXNUb1NlbGVjdFs0XSA9IHsgIi9mb28iLCAiL2Zvby9i
YXIiLCAiL2Zvby9iYXIvYmF6IiwgMCB9OwotICAgIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVz
dF9zZWxlY3RfZmlsZXMocmVxdWVzdCwgZmlsZXNUb1NlbGVjdCk7Ci0KLSAgICAvLyBDaGVjayB0
aGUgZmlsZXMgdGhhdCBoYXZlIGJlZW4ganVzdCBzZWxlY3RlZC4KLSAgICBzZWxlY3RlZEZpbGVz
ID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0
KTsKLSAgICBnX2Fzc2VydChzZWxlY3RlZEZpbGVzKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc2Vs
ZWN0ZWRGaWxlc1swXSwgPT0sICIvZm9vIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVk
RmlsZXNbMV0sID09LCAiL2Zvby9iYXIiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRG
aWxlc1syXSwgPT0sICIvZm9vL2Jhci9iYXoiKTsKLSAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxl
c1szXSk7Ci0KLSAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwotICAgIHJldHVybiBUUlVFOwot
fQotCi1zdGF0aWMgZ2Jvb2xlYW4gcnVuRmlsZUNob29zZXJDYlNlbGVjdGlvblJldGFpbmVkKFdl
YktpdFdlYlZpZXcqIHdlYnZpZXcsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCwg
Z3BvaW50ZXIgZGF0YSkKLXsKLSAgICBjb25zdCBnY2hhciogY29uc3QqIHNlbGVjdGVkRmlsZXMg
PSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKHJlcXVlc3Qp
OwotICAgIGdfYXNzZXJ0KHNlbGVjdGVkRmlsZXMpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxl
Y3RlZEZpbGVzWzBdLCA9PSwgIi9mb28iKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRG
aWxlc1sxXSwgPT0sICIvZm9vL2JhciIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZp
bGVzWzJdLCA9PSwgIi9mb28vYmFyL2JheiIpOwotICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZpbGVz
WzNdKTsKLQotICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci0gICAgcmV0dXJuIFRSVUU7Ci19
Ci0KLXN0YXRpYyBnYm9vbGVhbiBydW5GaWxlQ2hvb3NlckNiTm9NdWx0aXNlbEFjY2VwdFR5cGVz
KFdlYktpdFdlYlZpZXcqIHdlYnZpZXcsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVz
dCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBnX2Fzc2VydCghd2Via2l0X2ZpbGVfY2hvb3Nlcl9y
ZXF1ZXN0X2dldF9zZWxlY3RfbXVsdGlwbGUocmVxdWVzdCkpOwotCi0gICAgY29uc3QgZ2NoYXIq
IGNvbnN0KiBtaW1lVHlwZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVf
dHlwZXMocmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQobWltZVR5cGVzKTsKLSAgICBnX2Fzc2VydF9j
bXBzdHIobWltZVR5cGVzWzBdLCA9PSwgImF1ZGlvLyoiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIo
bWltZVR5cGVzWzFdLCA9PSwgInZpZGVvLyoiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIobWltZVR5
cGVzWzJdLCA9PSwgImltYWdlLyoiKTsKLSAgICBnX2Fzc2VydCghbWltZVR5cGVzWzNdKTsKLQot
ICAgIEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9n
ZXRfbWltZV90eXBlc19maWx0ZXIocmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQoR1RLX0lTX0ZJTEVf
RklMVEVSKGZpbHRlcikpOwotICAgIGdfYXNzZXJ0KGNoZWNrTWltZVR5cGVGb3JGaWx0ZXIoZmls
dGVyLCAiYXVkaW8vKiIpKTsKLSAgICBnX2Fzc2VydChjaGVja01pbWVUeXBlRm9yRmlsdGVyKGZp
bHRlciwgInZpZGVvLyoiKSk7Ci0gICAgZ19hc3NlcnQoY2hlY2tNaW1lVHlwZUZvckZpbHRlcihm
aWx0ZXIsICJpbWFnZS8qIikpOwotCi0gICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBzZWxlY3RlZEZp
bGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1
ZXN0KTsKLSAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxlcyk7Ci0KLSAgICBnX21haW5fbG9vcF9x
dWl0KGxvb3ApOwotICAgIHJldHVybiBUUlVFOwotfQotCi12b2lkIGRvTW91c2VCdXR0b25FdmVu
dChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRUeXBlIGV2ZW50VHlwZSwgaW50IHgsIGludCB5
LCB1bnNpZ25lZCBpbnQgYnV0dG9uLCB1bnNpZ25lZCBpbnQgbW9kaWZpZXJzKQotewotICAgIGdf
YXNzZXJ0KGd0a193aWRnZXRfZ2V0X3JlYWxpemVkKHdpZGdldCkpOwotCi0gICAgR2RrRXZlbnQq
IGV2ZW50ID0gZ2RrX2V2ZW50X25ldyhldmVudFR5cGUpOwotICAgIGV2ZW50LT5idXR0b24ud2lu
ZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KHdpZGdldCk7Ci0gICAgZ19vYmplY3RfcmVmKGV2
ZW50LT5idXR0b24ud2luZG93KTsKLQotICAgIGV2ZW50LT5idXR0b24udGltZSA9IEdES19DVVJS
RU5UX1RJTUU7Ci0gICAgZXZlbnQtPmJ1dHRvbi54ID0geDsKLSAgICBldmVudC0+YnV0dG9uLnkg
PSB5OwotICAgIGV2ZW50LT5idXR0b24uYXhlcyA9IDA7Ci0gICAgZXZlbnQtPmJ1dHRvbi5zdGF0
ZSA9IG1vZGlmaWVyczsKLSAgICBldmVudC0+YnV0dG9uLmJ1dHRvbiA9IGJ1dHRvbjsKLQotI2lm
bmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotICAgIGV2ZW50LT5idXR0b24uZGV2aWNlID0gZ2RrX2Rl
dmljZV9tYW5hZ2VyX2dldF9jbGllbnRfcG9pbnRlcihnZGtfZGlzcGxheV9nZXRfZGV2aWNlX21h
bmFnZXIoZ3RrX3dpZGdldF9nZXRfZGlzcGxheSh3aWRnZXQpKSk7Ci0jZW5kaWYKLQotICAgIGlu
dCB4Um9vdCwgeVJvb3Q7Ci0gICAgZ2RrX3dpbmRvd19nZXRfcm9vdF9jb29yZHMoZ3RrX3dpZGdl
dF9nZXRfd2luZG93KHdpZGdldCksIHgsIHksICZ4Um9vdCwgJnlSb290KTsKLSAgICBldmVudC0+
YnV0dG9uLnhfcm9vdCA9IHhSb290OwotICAgIGV2ZW50LT5idXR0b24ueV9yb290ID0geVJvb3Q7
Ci0gICAgZ3RrX21haW5fZG9fZXZlbnQoZXZlbnQpOwotfQotCi1zdGF0aWMgdm9pZCBjbGlja01v
dXNlQnV0dG9uKEd0a1dpZGdldCogd2lkZ2V0LCBpbnQgeCwgaW50IHksIHVuc2lnbmVkIGludCBi
dXR0b24sIHVuc2lnbmVkIGludCBtb2RpZmllcnMpCi17Ci0gICAgZG9Nb3VzZUJ1dHRvbkV2ZW50
KHdpZGdldCwgR0RLX0JVVFRPTl9QUkVTUywgeCwgeSwgYnV0dG9uLCBtb2RpZmllcnMpOwotICAg
IGRvTW91c2VCdXR0b25FdmVudCh3aWRnZXQsIEdES19CVVRUT05fUkVMRUFTRSwgeCwgeSwgYnV0
dG9uLCBtb2RpZmllcnMpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gY2xpY2tNb3VzZUJ1dHRvbkFu
ZFdhaXRGb3JGaWxlQ2hvb3NlclJlcXVlc3QoV2ViS2l0V2ViVmlldyogd2ViVmlldykKLXsKLSAg
ICBjbGlja01vdXNlQnV0dG9uKEdUS19XSURHRVQod2ViVmlldyksIDUsIDUsIDEsIDApOwotICAg
IHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfdmlld19maWxl
X2Nob29zZXIoKQotewotICAgIGNvbnN0IGdjaGFyKiBodG1sRm9ybWF0QmFzZSA9ICI8aHRtbD48
Ym9keT4iCi0gICAgICAgICAgICAiPGlucHV0IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0
OjA7dG9wOjA7bWFyZ2luOjA7cGFkZGluZzowJyB0eXBlPSdmaWxlJyAlcy8+IgotICAgICAgICAg
ICAgIjwvYm9keT48L2h0bWw+IjsKLQotICAgIEd0a1dpZGdldCogd2luZG93ID0gZ3RrX3dpbmRv
d19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7Ci0gICAgR3RrV2lkZ2V0KiB3ZWJWaWV3ID0gd2Vi
a2l0X3dlYl92aWV3X25ldygpOwotICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIo
d2luZG93KSwgd2ViVmlldyk7Ci0gICAgZ3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpOwotCi0g
ICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLQotICAgIC8vIE11bHRpcGxl
IHNlbGVjdGlvbnMgbm90IGFsbG93ZWQsIG5vIE1JTUUgZmlsdGVyaW5nLgotICAgIGd1bG9uZyBo
YW5kbGVyID0gZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAicnVuLWZpbGUtY2hvb3NlciIsIEdf
Q0FMTEJBQ0socnVuRmlsZUNob29zZXJDYk5vTXVsdGlzZWxOb01pbWUpLCBOVUxMKTsKLSAgICBn
Y2hhciogaHRtbEZvcm1hdCA9IGdfc3RyZHVwX3ByaW50ZihodG1sRm9ybWF0QmFzZSwgIiIpOwot
ICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldyks
IGh0bWxGb3JtYXQsIE5VTEwsIE5VTEwsIE5VTEwpOwotICAgIGdfZnJlZShodG1sRm9ybWF0KTsK
LQotICAgIGdfdGltZW91dF9hZGQoMTAwLCAoR1NvdXJjZUZ1bmMpIGNsaWNrTW91c2VCdXR0b25B
bmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0LCBXRUJLSVRfV0VCX1ZJRVcod2ViVmlldykpOwot
ICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLQotICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29u
bmVjdCh3ZWJWaWV3LCBoYW5kbGVyKTsKLQotICAgIC8vIE11bHRpcGxlIHNlbGVjdGlvbnMgYWxs
b3dlZCwgbm8gTUlNRSBmaWx0ZXJpbmcsIHNvbWUgcHJlLXNlbGVjdGVkIGZpbGVzLgotICAgIGhh
bmRsZXIgPSBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJydW4tZmlsZS1jaG9vc2VyIiwgR19D
QUxMQkFDSyhydW5GaWxlQ2hvb3NlckNiTXVsdGlzZWxOb01pbWUpLCBOVUxMKTsKLSAgICBodG1s
Rm9ybWF0ID0gZ19zdHJkdXBfcHJpbnRmKGh0bWxGb3JtYXRCYXNlLCAibXVsdGlwbGUiKTsKLSAg
ICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpLCBo
dG1sRm9ybWF0LCBOVUxMLCBOVUxMLCBOVUxMKTsKLSAgICBnX2ZyZWUoaHRtbEZvcm1hdCk7Ci0K
LSAgICBnX3RpbWVvdXRfYWRkKDEwMCwgKEdTb3VyY2VGdW5jKSBjbGlja01vdXNlQnV0dG9uQW5k
V2FpdEZvckZpbGVDaG9vc2VyUmVxdWVzdCwgV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpKTsKLSAg
ICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5l
Y3Qod2ViVmlldywgaGFuZGxlcik7Ci0KLSAgICAvLyBQZXJmb3JtIGFub3RoZXIgcmVxdWVzdCB0
byBjaGVjayBpZiB0aGUgbGlzdCBvZiBmaWxlcyBzZWxlY3RlZAotICAgIC8vIGluIHRoZSBwcmV2
aW91cyBzdGVwIGFwcGVhcnMgbm93IGFzIHBhcnQgb2YgdGhlIG5ldyByZXF1ZXN0LgotICAgIGhh
bmRsZXIgPSBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJydW4tZmlsZS1jaG9vc2VyIiwgR19D
QUxMQkFDSyhydW5GaWxlQ2hvb3NlckNiU2VsZWN0aW9uUmV0YWluZWQpLCBOVUxMKTsKLSAgICBn
X3RpbWVvdXRfYWRkKDEwMCwgKEdTb3VyY2VGdW5jKSBjbGlja01vdXNlQnV0dG9uQW5kV2FpdEZv
ckZpbGVDaG9vc2VyUmVxdWVzdCwgV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpKTsKLSAgICBnX21h
aW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3Qod2Vi
VmlldywgaGFuZGxlcik7Ci0KLSAgICAvLyBNdWx0aXBsZSBzZWxlY3Rpb25zIG5vdCBhbGxvd2Vk
LCBvbmx5IGFjY2VwdCBpbWFnZXMsIGF1ZGlvIGFuZCB2aWRlbyBmaWxlcy4KLSAgICBoYW5kbGVy
ID0gZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAicnVuLWZpbGUtY2hvb3NlciIsIEdfQ0FMTEJB
Q0socnVuRmlsZUNob29zZXJDYk5vTXVsdGlzZWxBY2NlcHRUeXBlcyksIE5VTEwpOwotICAgIGh0
bWxGb3JtYXQgPSBnX3N0cmR1cF9wcmludGYoaHRtbEZvcm1hdEJhc2UsICJhY2NlcHQ9J2F1ZGlv
LyosdmlkZW8vKixpbWFnZS8qJyIpOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhX
RUJLSVRfV0VCX1ZJRVcod2ViVmlldyksIGh0bWxGb3JtYXQsIE5VTEwsIE5VTEwsIE5VTEwpOwot
ICAgIGdfZnJlZShodG1sRm9ybWF0KTsKLQotICAgIGdfdGltZW91dF9hZGQoMTAwLCAoR1NvdXJj
ZUZ1bmMpIGNsaWNrTW91c2VCdXR0b25BbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0LCBXRUJL
SVRfV0VCX1ZJRVcod2ViVmlldykpOwotICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLQotICAg
IGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdCh3ZWJWaWV3LCBoYW5kbGVyKTsKLSAgICBndGtf
d2lkZ2V0X2Rlc3Ryb3kod2luZG93KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2Vi
X3ZpZXdfc291cmNlX21vZGUoKQotewotICAgIEd0a1dpZGdldCogd2ViX3ZpZXc7Ci0KLSAgICB3
ZWJfdmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKLQotICAgIHdlYmtpdF93ZWJfdmlld19s
b2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcod2ViX3ZpZXcpLCAiPGh0bWw+PGJvZHk+PC9ib2R5
PjwvaHRtbD4iLCBOVUxMLCBOVUxMLCBOVUxMKTsKLQotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X3ZpZXdfc291cmNlX21vZGUoV0VCS0lUX1dFQl9WSUVXKHdlYl92aWV3KSkpOwot
Ci0gICAgd2Via2l0X3dlYl92aWV3X3NldF92aWV3X3NvdXJjZV9tb2RlKFdFQktJVF9XRUJfVklF
Vyh3ZWJfdmlldyksIFRSVUUpOwotCi0gICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dldF92
aWV3X3NvdXJjZV9tb2RlKFdFQktJVF9XRUJfVklFVyh3ZWJfdmlldykpKTsKLQotICAgIHdlYmtp
dF93ZWJfdmlld19zZXRfdmlld19zb3VyY2VfbW9kZShXRUJLSVRfV0VCX1ZJRVcod2ViX3ZpZXcp
LCBGQUxTRSk7Ci0KLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2dldF92aWV3X3NvdXJj
ZV9tb2RlKFdFQktJVF9XRUJfVklFVyh3ZWJfdmlldykpKTsKLQotICAgIGd0a193aWRnZXRfZGVz
dHJveSh3ZWJfdmlldyk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKLXsK
LSAgICBTb3VwU2VydmVyKiBzZXJ2ZXI7Ci0gICAgU291cFVSSSogc291cF91cmk7Ci0KLSAgICBn
dGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAgICAvKiBIb3BlZnVsbHkgbWFr
ZSB0ZXN0IGluZGVwZW5kZW50IG9mIHRoZSBwYXRoIGl0J3MgY2FsbGVkIGZyb20uICovCi0gICAg
dGVzdHV0aWxzX3JlbGF0aXZlX2NoZGlyKCJTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy9yZXNvdXJj
ZXMvdGVzdC5odG1sIiwgYXJndlswXSk7Ci0KLSAgICBzZXJ2ZXIgPSBzb3VwX3NlcnZlcl9uZXco
U09VUF9TRVJWRVJfUE9SVCwgMCwgTlVMTCk7Ci0gICAgc291cF9zZXJ2ZXJfcnVuX2FzeW5jKHNl
cnZlcik7Ci0KLSAgICBzb3VwX3NlcnZlcl9hZGRfaGFuZGxlcihzZXJ2ZXIsIE5VTEwsIHNlcnZl
cl9jYWxsYmFjaywgTlVMTCwgTlVMTCk7Ci0KLSAgICBzb3VwX3VyaSA9IHNvdXBfdXJpX25ldygi
aHR0cDovLzEyNy4wLjAuMS8iKTsKLSAgICBzb3VwX3VyaV9zZXRfcG9ydChzb3VwX3VyaSwgc291
cF9zZXJ2ZXJfZ2V0X3BvcnQoc2VydmVyKSk7Ci0KLSAgICBiYXNlX3VyaSA9IHNvdXBfdXJpX3Rv
X3N0cmluZyhzb3VwX3VyaSwgRkFMU0UpOwotICAgIHNvdXBfdXJpX2ZyZWUoc291cF91cmkpOwot
Ci0gICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKLSAgICBn
X3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vidmlldy9pY29uLXVyaSIsIHRlc3Rfd2Via2l0X3dl
Yl92aWV3X2ljb25fdXJpKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vidmlldy9h
ZGp1c3RtZW50cyIsIHRlc3Rfd2Via2l0X3dlYl92aWV3X2FkanVzdG1lbnRzKTsKLSAgICBnX3Rl
c3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vidmlldy9kZXN0cm95IiwgdGVzdF93ZWJraXRfd2ViX3Zp
ZXdfZGVzdHJveSk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnZpZXcvZ3JhYl9m
b2N1cyIsIHRlc3Rfd2Via2l0X3dlYl92aWV3X2dyYWJfZm9jdXMpOwotICAgIGdfdGVzdF9hZGRf
ZnVuYygiL3dlYmtpdC93ZWJ2aWV3L3dpbmRvdy1mZWF0dXJlcyIsIHRlc3Rfd2Via2l0X3dlYl92
aWV3X3dpbmRvd19mZWF0dXJlcyk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnZp
ZXcvd2Vidmlldy1pbi1vZmZzY3JlZW4td2luZG93LWRvZXMtbm90LWNyYXNoIiwgdGVzdF93ZWJr
aXRfd2ViX3ZpZXdfaW5fb2Zmc2NyZWVuX3dpbmRvd19kb2VzX25vdF9jcmFzaCk7Ci0gICAgZ190
ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnZpZXcvd2Vidmlldy1kb2VzLW5vdC1zdGVhbC1mb2N1
cyIsIHRlc3Rfd2Via2l0X3dlYl92aWV3X2RvZXNfbm90X3N0ZWFsX2ZvY3VzKTsKLSAgICBnX3Rl
c3RfYWRkX2RhdGFfZnVuYygiL3dlYmtpdC93ZWJ2aWV3L2Z1bGxzY3JlZW4iLCBHSU5UX1RPX1BP
SU5URVIoRkFMU0UpLCB0ZXN0X3dlYmtpdF93ZWJfdmlld19mdWxsc2NyZWVuKTsKLSAgICBnX3Rl
c3RfYWRkX2RhdGFfZnVuYygiL3dlYmtpdC93ZWJ2aWV3L2Z1bGxzY3JlZW4tYmxvY2tlZCIsIEdJ
TlRfVE9fUE9JTlRFUihUUlVFKSwgdGVzdF93ZWJraXRfd2ViX3ZpZXdfZnVsbHNjcmVlbik7Ci0g
ICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnZpZXcvZmlsZS1jaG9vc2VyIiwgdGVzdF93
ZWJraXRfd2ViX3ZpZXdfZmlsZV9jaG9vc2VyKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJr
aXQvd2Vidmlldy9zb3VyY2UtbW9kZSIsIHRlc3Rfd2Via2l0X3dlYl92aWV3X3NvdXJjZV9tb2Rl
KTsKLQotICAgIHJldHVybiBnX3Rlc3RfcnVuICgpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9ndGsvdGVzdHMvdGVzdHdpbmRvdy5jIGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVz
dHdpbmRvdy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWRhNDdiLi4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3aW5kb3cuYworKysgL2Rldi9udWxs
CkBAIC0xLDExOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IENvbGxhYm9yYSBM
dGQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8
d2Via2l0L3dlYmtpdC5oPgotCi1zdGF0aWMgdm9pZCBub3RpZnlfbG9hZF9zdGF0dXNfY2IoV2Vi
S2l0V2ViVmlldyogd2ViX3ZpZXcsIEdQYXJhbVNwZWMqIHBzcGVjLCBncG9pbnRlciBkYXRhKQot
ewotICAgIGlmICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYl92aWV3KSA9PSBX
RUJLSVRfTE9BRF9GSU5JU0hFRCkgewotICAgICAgICBHTWFpbkxvb3AqIGxvb3AgPSAoR01haW5M
b29wKilkYXRhOwotCi0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci0gICAgfQotfQot
Ci1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93aW5kb3dfc2Nyb2xsYmFyX3BvbGljeSh2b2lkKQot
ewotICAgIEdNYWluTG9vcCogbG9vcDsKLSAgICBHdGtXaWRnZXQqIHNjcm9sbGVkV2luZG93Owot
ICAgIEd0a1dpZGdldCogd2ViVmlldzsKLSAgICBXZWJLaXRXZWJGcmFtZSogbWFpbkZyYW1lOwot
ICAgIEd0a1BvbGljeVR5cGUgaG9yaXpvbnRhbFBvbGljeTsKLSAgICBHdGtQb2xpY3lUeXBlIHZl
cnRpY2FsUG9saWN5OwotCi0gICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsK
LQotICAgIHNjcm9sbGVkV2luZG93ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19uZXcoTlVMTCwgTlVM
TCk7Ci0gICAgZ3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfcG9saWN5KEdUS19TQ1JPTExFRF9XSU5E
T1coc2Nyb2xsZWRXaW5kb3cpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
VEtfUE9MSUNZX0FVVE9NQVRJQywgR1RLX1BPTElDWV9BVVRPTUFUSUMpOwotCi0gICAgd2ViVmll
dyA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKLSAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3
KTsKLQotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMi
LAotICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhub3RpZnlfbG9hZF9zdGF0dXNfY2Ip
LCBsb29wKTsKLQotICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIoc2Nyb2xsZWRX
aW5kb3cpLCB3ZWJWaWV3KTsKLQotICAgIG1haW5GcmFtZSA9IHdlYmtpdF93ZWJfdmlld19nZXRf
bWFpbl9mcmFtZShXRUJLSVRfV0VCX1ZJRVcod2ViVmlldykpOwotCi0gICAgLyogVGVzdCB3ZSBj
b3JyZWN0bHkgYXBwbHkgcG9saWN5IGZvciBub3QgaGF2aW5nIHNjcm9sbGJhcnM7IFRoaXMKLSAg
ICAgKiBjYXNlIGlzIHNwZWNpYWwsIGJlY2F1c2Ugd2UgdHVybiB0aGUgcG9saWN5IGZyb20gTkVW
RVIgdG8KLSAgICAgKiBBVVRPTUFUSUMsIHNpbmNlIHdlIGNhbm5vdCBlYXNpbHkgcmVwcmVzZW50
IHRoZSBzYW1lIHRoaW5nCi0gICAgICogdXNpbmcgR3RrU2Nyb2xsZWRXaW5kb3cgKi8KLSAgICB3
ZWJraXRfd2ViX3ZpZXdfbG9hZF9odG1sX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldyks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxodG1sPjxib2R5PldlYktp
dCE8L2JvZHk+PHNjcmlwdD5kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBd
LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7PC9zY3JpcHQ+PC9odG1sPiIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGU6Ly8iKTsKLQotICAgIGdfbWFpbl9sb29w
X3J1bihsb29wKTsKLQotICAgIGd0a19zY3JvbGxlZF93aW5kb3dfZ2V0X3BvbGljeShHVEtfU0NS
T0xMRURfV0lORE9XKHNjcm9sbGVkV2luZG93KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJmhvcml6b250YWxQb2xpY3ksICZ2ZXJ0aWNhbFBvbGljeSk7Ci0KLSAgICBnX2Fz
c2VydChob3Jpem9udGFsUG9saWN5ID09IEdUS19QT0xJQ1lfQVVUT01BVElDKTsKLSAgICBnX2Fz
c2VydCh2ZXJ0aWNhbFBvbGljeSA9PSBHVEtfUE9MSUNZX0FVVE9NQVRJQyk7Ci0KLSAgICBnX2Fz
c2VydChHVEtfUE9MSUNZX05FVkVSID09IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X2hvcml6b250YWxf
c2Nyb2xsYmFyX3BvbGljeShtYWluRnJhbWUpKTsKLSAgICBnX2Fzc2VydChHVEtfUE9MSUNZX05F
VkVSID09IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3ZlcnRpY2FsX3Njcm9sbGJhcl9wb2xpY3kobWFp
bkZyYW1lKSk7Ci0KLSAgICAvKiBUZXN0IHdlIGNvcnJlY3RseSBhcHBseSBwb2xpY3kgZm9yIGFs
d2F5cyBoYXZpbmcgc2Nyb2xsYmFycyAqLwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX2h0bWxf
c3RyaW5nKFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3KSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiPGh0bWw+PGJvZHk+V2ViS2l0ITwvYm9keT48c2NyaXB0PmRvY3VtZW50
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0uc3R5bGUub3ZlcmZsb3cgPSAnc2Nyb2xs
Jzs8L3NjcmlwdD48L2h0bWw+IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiZmlsZTovLyIpOwotCi0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAgZ3RrX3Nj
cm9sbGVkX3dpbmRvd19nZXRfcG9saWN5KEdUS19TQ1JPTExFRF9XSU5ET1coc2Nyb2xsZWRXaW5k
b3cpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaG9yaXpvbnRhbFBvbGlj
eSwgJnZlcnRpY2FsUG9saWN5KTsKLQotICAgIGdfYXNzZXJ0KGhvcml6b250YWxQb2xpY3kgPT0g
R1RLX1BPTElDWV9BTFdBWVMpOwotICAgIGdfYXNzZXJ0KHZlcnRpY2FsUG9saWN5ID09IEdUS19Q
T0xJQ1lfQUxXQVlTKTsKLQotICAgIGdfYXNzZXJ0KGhvcml6b250YWxQb2xpY3kgPT0gd2Via2l0
X3dlYl9mcmFtZV9nZXRfaG9yaXpvbnRhbF9zY3JvbGxiYXJfcG9saWN5KG1haW5GcmFtZSkpOwot
ICAgIGdfYXNzZXJ0KHZlcnRpY2FsUG9saWN5ID09IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3ZlcnRp
Y2FsX3Njcm9sbGJhcl9wb2xpY3kobWFpbkZyYW1lKSk7Ci0KLSAgICAvKiBUZXN0IHdlIGNvcnJl
Y3RseSBhcHBseSBwb2xpY3kgZm9yIGhhdmluZyBzY3JvbGxiYXJzIHdoZW4gbmVlZGVkICovCi0g
ICAgd2Via2l0X3dlYl92aWV3X2xvYWRfaHRtbF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVXKHdlYlZp
ZXcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8aHRtbD48Ym9keT5X
ZWJLaXQhPC9ib2R5PjxzY3JpcHQ+ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHkn
KVswXS5zdHlsZS5vdmVyZmxvdyA9ICdhdXRvJzs8L3NjcmlwdD48L2h0bWw+IiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZTovLyIpOwotCi0gICAgZ19tYWluX2xv
b3BfcnVuKGxvb3ApOwotCi0gICAgZ3RrX3Njcm9sbGVkX3dpbmRvd19nZXRfcG9saWN5KEdUS19T
Q1JPTExFRF9XSU5ET1coc2Nyb2xsZWRXaW5kb3cpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmaG9yaXpvbnRhbFBvbGljeSwgJnZlcnRpY2FsUG9saWN5KTsKLQotICAgIGdf
YXNzZXJ0KGhvcml6b250YWxQb2xpY3kgPT0gR1RLX1BPTElDWV9BVVRPTUFUSUMpOwotICAgIGdf
YXNzZXJ0KHZlcnRpY2FsUG9saWN5ID09IEdUS19QT0xJQ1lfQVVUT01BVElDKTsKLQotICAgIGdf
YXNzZXJ0KGhvcml6b250YWxQb2xpY3kgPT0gd2Via2l0X3dlYl9mcmFtZV9nZXRfaG9yaXpvbnRh
bF9zY3JvbGxiYXJfcG9saWN5KG1haW5GcmFtZSkpOwotICAgIGdfYXNzZXJ0KHZlcnRpY2FsUG9s
aWN5ID09IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3ZlcnRpY2FsX3Njcm9sbGJhcl9wb2xpY3kobWFp
bkZyYW1lKSk7Ci0KLSAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKLX0KLQotaW50IG1haW4o
aW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotewotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2
LCBOVUxMKTsKLQotICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
Iik7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dpbmRvdy9zY3JvbGxiYXJfcG9saWN5
IiwgdGVzdF93ZWJraXRfd2luZG93X3Njcm9sbGJhcl9wb2xpY3kpOwotICAgIHJldHVybiBnX3Rl
c3RfcnVuICgpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGExZTc4ZmUuLjQ0OWRhNTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxMyBAQAorMjAxNC0wMS0wMyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2Fy
Y2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gTW92ZSBhbGwgR1RLL0dPYmplY3QgdW5p
dCB0ZXN0cyB0byBUb29scy9UZXN0V2ViS2l0QVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjYzNDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0NNYWtlTGlz
dHMudHh0OiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1h
a2VmaWxlLmFtOiBSZW1vdmVkLgorCiAyMDE0LTAxLTAzICBKaW53b28gU29uZyAgPGppbndvbzcu
c29uZ0BzYW1zdW5nLmNvbT4KIAogICAgICAgICBWaWJyYXRpb25QYXR0ZXJuIHNob3VsZCBhbGxv
Y2F0ZSBhbiBzaW5nbGUgdmVjdG9yIGluc3RhbmNlIGZvciBzaW5nbGUgaW50ZWdlciBpbnB1dApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvQWNjZXNz
aWJpbGl0eVRlc3RTZXJ2ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvQWNjZXNzaWJpbGl0eVRlc3RTZXJ2ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBiNTUwMDUwLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3ZWJr
aXQyL3dlYmtpdDIuaD4KLQotc3RhdGljIHZvaWQgbG9hZENoYW5nZWRDYWxsYmFjayhXZWJLaXRX
ZWJWaWV3KiwgV2ViS2l0TG9hZEV2ZW50IGxvYWRFdmVudCwgZ3BvaW50ZXIpCi17Ci0gICAgLy8g
U2VuZCBhIG1lc3NhZ2UgdG8gdGhlIHBhcmVudCBwcm9jZXNzIHdoZW4gd2UncmUgcmVhZHkuCi0g
ICAgaWYgKGxvYWRFdmVudCA9PSBXRUJLSVRfTE9BRF9GSU5JU0hFRCkKLSAgICAgICAgZ19wcmlu
dCgiT0siKTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotewotICAgIC8v
IE1ha2Ugc3VyZSB0aGF0IHRoZSBBVEsgYnJpZGdlIGlzIGxvYWRlZC4KLSAgICBnX3NldGVudigi
R1RLX01PRFVMRVMiLCAiYXRrLWJyaWRnZSIsIFRSVUUpOwotCi0gICAgZ3RrX2luaXQoJmFyZ2Ms
ICZhcmd2KTsKLQotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVco
d2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9odG1sKHdl
YlZpZXcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGh0bWw+IgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIiAgPGJvZHk+IgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIiAgIDxoMT5UaGlzIGlzIGEgdGVzdDwvaDE+IgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIiAgIDxwPlRoaXMgaXMgYSBwYXJhZ3JhcGggd2l0aCBzb21lIHBsYWluIHRleHQu
PC9wPiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICA8cD5UaGlzIHBhcmFncmFw
aCBjb250YWlucyA8YSBocmVmPVwiaHR0cDovL3d3dy53ZWJraXRndGsub3JnXCI+YSBsaW5rPC9h
PiBpbiB0aGUgbWlkZGxlLjwvcD4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICA8
L2JvZHk+IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjwvaHRtbD4iLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMCk7Ci0KLSAgICBHdGtXaWRnZXQqIHdpbmRvdyA9IGd0
a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOwotICAgIGd0a19jb250YWluZXJfYWRk
KEdUS19DT05UQUlORVIod2luZG93KSwgR1RLX1dJREdFVCh3ZWJWaWV3KSk7Ci0gICAgZ3RrX3dp
ZGdldF9zaG93X2FsbCh3aW5kb3cpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh3aW5kb3csICJk
ZWxldGUtZXZlbnQiLCBHX0NBTExCQUNLKGd0a19tYWluX3F1aXQpLCAwKTsKLSAgICBnX3NpZ25h
bF9jb25uZWN0KHdlYlZpZXcsICJsb2FkLWNoYW5nZWQiLCBHX0NBTExCQUNLKGxvYWRDaGFuZ2Vk
Q2FsbGJhY2spLCAwKTsKLQotICAgIGd0a19tYWluKCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0NNYWtlTGlzdHMudHh0CmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBiY2IwY2ZkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0NNYWtlTGlzdHMudHh0CisrKyAvZGV2L251bGwKQEAg
LTEsMTAyICswLDAgQEAKLXNldChURVNUX0xJQlJBUllfRElSICR7Q01BS0VfTElCUkFSWV9PVVRQ
VVRfRElSRUNUT1JZfS9XZWJLaXQyR09iamVjdEFQSVRlc3RzKQotc2V0KFRFU1RfUkVTT1VSQ0VT
X0RJUiAke0NNQUtFX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWX0vcmVzb3VyY2VzKQotZmlsZShN
QUtFX0RJUkVDVE9SWSAke1RFU1RfUkVTT1VSQ0VTX0RJUn0pCi0KLWFkZF9kZWZpbml0aW9ucygK
LSAgICAtRFdFQktJVF9URVNUX1BMVUdJTl9ESVI9IiR7Q01BS0VfTElCUkFSWV9PVVRQVVRfRElS
RUNUT1JZfSIKLSAgICAtRFdFQktJVF9FWEVDX1BBVEg9IiR7Q01BS0VfUlVOVElNRV9PVVRQVVRf
RElSRUNUT1JZfSIKLSAgICAtRFdFQktJVF9TUkNfRElSPSIke0NNQUtFX1NPVVJDRV9ESVJ9Igot
ICAgIC1EV0VCS0lUX1RFU1RfV0VCX0VYVEVOU0lPTlNfRElSPSIke1RFU1RfTElCUkFSWV9ESVJ9
IgotICAgIC1EV0VCS0lUX0lOSkVDVEVEX0JVTkRMRV9QQVRIPSIke0NNQUtFX0xJQlJBUllfT1VU
UFVUX0RJUkVDVE9SWX0iCi0pCi0KLWluY2x1ZGVfZGlyZWN0b3JpZXMoCi0gICAgJHtDTUFLRV9C
SU5BUllfRElSfQotICAgICR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNlCi0gICAgJHtDTUFLRV9T
T1VSQ0VfRElSfS9Tb3VyY2UvV1RGCi0gICAgJHtERVJJVkVEX1NPVVJDRVNfRElSfQotICAgICR7
REVSSVZFRF9TT1VSQ0VTX1dFQktJVDJHVEtfRElSfQotICAgICR7Rk9SV0FSRElOR19IRUFERVJT
X0RJUn0KLSAgICAke0ZPUldBUkRJTkdfSEVBREVSU19XRUJLSVQyR1RLX0RJUn0KLSAgICAke0ZP
UldBUkRJTkdfSEVBREVSU19XRUJLSVQyR1RLX0VYVEVOU0lPTl9ESVJ9Ci0gICAgJHtBVFNQSV9J
TkNMVURFX0RJUlN9Ci0gICAgJHtHTElCX0lOQ0xVREVfRElSU30KLSAgICAke0dUSzNfSU5DTFVE
RV9ESVJTfQotICAgICR7TElCU09VUF9JTkNMVURFX0RJUlN9Ci0pCi0KLWFkZF9saWJyYXJ5KFdl
YktpdDJBUElUZXN0Q29yZSBTVEFUSUMKLSAgICBMb2FkVHJhY2tpbmdUZXN0LmNwcAotICAgIFdl
YktpdFRlc3RCdXMuY3BwCi0gICAgV2ViS2l0VGVzdFNlcnZlci5jcHAKLSAgICBXZWJQcm9jZXNz
VGVzdFJ1bm5lci5jcHAKLSAgICBUZXN0TWFpbi5jcHAKLSAgICBXZWJWaWV3VGVzdC5jcHAKLSkK
LWFkZF9kZXBlbmRlbmNpZXMoV2ViS2l0MkFQSVRlc3RDb3JlIFdlYktpdDIpCi0KLWFkZF9jdXN0
b21fdGFyZ2V0KHRlc3QtZ3Jlc291cmNlLWJ1bmRsZQotICAgIERFUEVORFMgcmVzb3VyY2VzL3dl
YmtpdDJndGstdGVzdHMuZ3Jlc291cmNlLnhtbAotICAgICAgICAgICAgcmVzb3VyY2VzL2xpbmst
dGl0bGUuanMKLSAgICBDT01NQU5EIGdsaWItY29tcGlsZS1yZXNvdXJjZXMgLS10YXJnZXQ9JHtU
RVNUX1JFU09VUkNFU19ESVJ9L3dlYmtpdDJndGstdGVzdHMtcmVzb3VyY2VzLmdyZXNvdXJjZSAt
LXNvdXJjZWRpcj0ke0NNQUtFX1NPVVJDRV9ESVJ9ICR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvcmVzb3VyY2VzL3dlYmtpdDJndGstdGVz
dHMuZ3Jlc291cmNlLnhtbAotKQotCi1tYWNybyhBRERfV0syX1RFU1RfV0VCX0VYVEVOU0lPTiBl
eHRlbnNpb25fbmFtZSkKLSAgICBhZGRfbGlicmFyeSgke2V4dGVuc2lvbl9uYW1lfSBNT0RVTEUg
JHtBUkdOfSkKLSAgICBzZXRfcHJvcGVydHkoCi0gICAgICAgIFRBUkdFVCAke2V4dGVuc2lvbl9u
YW1lfQotICAgICAgICBBUFBFTkQKLSAgICAgICAgUFJPUEVSVFkgQ09NUElMRV9ERUZJTklUSU9O
UyBXRUJLSVQyX0NPTVBJTEFUSU9OCi0gICAgKQotICAgIHNldF90YXJnZXRfcHJvcGVydGllcygk
e2V4dGVuc2lvbl9uYW1lfSBQUk9QRVJUSUVTCi0gICAgICAgIExJQlJBUllfT1VUUFVUX0RJUkVD
VE9SWSAke1RFU1RfTElCUkFSWV9ESVJ9Ci0gICAgKQotZW5kbWFjcm8oKQotCi1tYWNybyhBRERf
V0syX1RFU1QgdGVzdF9uYW1lKQotICAgIGFkZF9leGVjdXRhYmxlKCR7dGVzdF9uYW1lfSAke0FS
R059KQotICAgIGFkZF9kZXBlbmRlbmNpZXMoJHt0ZXN0X25hbWV9Ci0gICAgICAgIHRlc3QtZ3Jl
c291cmNlLWJ1bmRsZQotICAgICAgICBXZWJFeHRlbnNpb25UZXN0Ci0gICAgKQotICAgIHRhcmdl
dF9saW5rX2xpYnJhcmllcygke3Rlc3RfbmFtZX0KLSAgICAgICAgSmF2YVNjcmlwdENvcmUKLSAg
ICAgICAgV2ViS2l0MgotICAgICAgICBXZWJLaXQyQVBJVGVzdENvcmUKLSAgICAgICAgJHtBVFNQ
SV9MSUJSQVJJRVN9Ci0gICAgICAgICR7R0xJQl9MSUJSQVJJRVN9Ci0gICAgICAgICR7R1RLM19M
SUJSQVJJRVN9Ci0gICAgICAgICR7TElCU09VUF9MSUJSQVJJRVN9Ci0gICAgKQotICAgIHNldF90
YXJnZXRfcHJvcGVydGllcygke3Rlc3RfbmFtZX0gUFJPUEVSVElFUwotICAgICAgICBSVU5USU1F
X09VVFBVVF9ESVJFQ1RPUlkgJHtDTUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUll9L1dlYktp
dDJHT2JqZWN0QVBJVGVzdHMKLSAgICApCi1lbmRtYWNybygpCi0KLUFERF9XSzJfVEVTVF9XRUJf
RVhURU5TSU9OKFdlYkV4dGVuc2lvblRlc3QgV2ViRXh0ZW5zaW9uVGVzdC5jcHApCi1BRERfV0sy
X1RFU1RfV0VCX0VYVEVOU0lPTihXZWJQcm9jZXNzVGVzdCBET01Ob2RlVGVzdC5jcHAgRnJhbWVU
ZXN0LmNwcCBXZWJQcm9jZXNzVGVzdC5jcHApCi0KLUFERF9XSzJfVEVTVChJbnNwZWN0b3JUZXN0
U2VydmVyIEluc3BlY3RvclRlc3RTZXJ2ZXIuY3BwKQotQUREX1dLMl9URVNUKFRlc3RCYWNrRm9y
d2FyZExpc3QgVGVzdEJhY2tGb3J3YXJkTGlzdC5jcHApCi1BRERfV0syX1RFU1QoVGVzdENvbnRl
eHRNZW51IFRlc3RDb250ZXh0TWVudS5jcHApCi1BRERfV0syX1RFU1QoVGVzdENvb2tpZU1hbmFn
ZXIgVGVzdENvb2tpZU1hbmFnZXIuY3BwKQotQUREX1dLMl9URVNUKFRlc3RET01Ob2RlIFRlc3RE
T01Ob2RlLmNwcCkKLUFERF9XSzJfVEVTVChUZXN0RG93bmxvYWRzIFRlc3REb3dubG9hZHMuY3Bw
KQotQUREX1dLMl9URVNUKFRlc3RGcmFtZSBUZXN0RnJhbWUuY3BwKQotQUREX1dLMl9URVNUKFRl
c3RJbnNwZWN0b3IgVGVzdEluc3BlY3Rvci5jcHApCi1BRERfV0syX1RFU1QoVGVzdEluc3BlY3Rv
clNlcnZlciBUZXN0SW5zcGVjdG9yU2VydmVyLmNwcCkKLUFERF9XSzJfVEVTVChUZXN0TG9hZGVy
Q2xpZW50IFRlc3RMb2FkZXJDbGllbnQuY3BwKQotQUREX1dLMl9URVNUKFRlc3RQcmludGluZyBU
ZXN0UHJpbnRpbmcuY3BwKQotQUREX1dLMl9URVNUKFRlc3RTU0wgVGVzdFNTTC5jcHApCi1BRERf
V0syX1RFU1QoVGVzdFdlYkV4dGVuc2lvbnMgVGVzdFdlYkV4dGVuc2lvbnMuY3BwKQotQUREX1dL
Ml9URVNUKFRlc3RXZWJLaXRQb2xpY3lDbGllbnQgVGVzdFdlYktpdFBvbGljeUNsaWVudC5jcHAp
Ci1BRERfV0syX1RFU1QoVGVzdFdlYktpdFNldHRpbmdzIFRlc3RXZWJLaXRTZXR0aW5ncy5jcHAp
Ci1BRERfV0syX1RFU1QoVGVzdFdlYktpdFZlcnNpb24gVGVzdFdlYktpdFZlcnNpb24uY3BwKQot
QUREX1dLMl9URVNUKFRlc3RXZWJLaXRXZWJWaWV3R3JvdXAgVGVzdFdlYktpdFdlYlZpZXdHcm91
cC5jcHApCi1BRERfV0syX1RFU1QoVGVzdFdlYktpdFdlYkNvbnRleHQgVGVzdFdlYktpdFdlYkNv
bnRleHQuY3BwKQotQUREX1dLMl9URVNUKFRlc3RXZWJLaXRXZWJWaWV3IFRlc3RXZWJLaXRXZWJW
aWV3LmNwcCkKLQotaWYgKEFUU1BJX0ZPVU5EKQotICAgIEFERF9XSzJfVEVTVChBY2Nlc3NpYmls
aXR5VGVzdFNlcnZlciBBY2Nlc3NpYmlsaXR5VGVzdFNlcnZlci5jcHApCi0gICAgQUREX1dLMl9U
RVNUKFRlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5IFRlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5LmNwcCkK
LWVuZGlmICgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9ET01Ob2RlVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9ET01Ob2RlVGVzdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxNzU0
Y2YuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
RE9NTm9kZVRlc3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjE2ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5j
bHVkZSAiV2ViUHJvY2Vzc1Rlc3QuaCIKLSNpbmNsdWRlIDxnaW8vZ2lvLmg+Ci0jaW5jbHVkZSA8
d2Via2l0Mi93ZWJraXQtd2ViLWV4dGVuc2lvbi5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dP
d25QdHIuaD4KLQotY2xhc3MgV2ViS2l0RE9NTm9kZVRlc3QgOiBwdWJsaWMgV2ViUHJvY2Vzc1Rl
c3QgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFdlYlByb2Nlc3NUZXN0PiBjcmVh
dGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgV2ViS2l0RE9NTm9kZVRlc3QoKSk7IH0KLQotcHJp
dmF0ZToKLSAgICBndWludDY0IHdlYlBhZ2VGcm9tQXJncyhHVmFyaWFudCogYXJncykKLSAgICB7
Ci0gICAgICAgIEdWYXJpYW50SXRlciBpdGVyOwotICAgICAgICBnX3ZhcmlhbnRfaXRlcl9pbml0
KCZpdGVyLCBhcmdzKTsKLQotICAgICAgICBjb25zdCBjaGFyKiBrZXk7Ci0gICAgICAgIEdWYXJp
YW50KiB2YWx1ZTsKLSAgICAgICAgd2hpbGUgKGdfdmFyaWFudF9pdGVyX2xvb3AoJml0ZXIsICJ7
JnN2fSIsICZrZXksICZ2YWx1ZSkpIHsKLSAgICAgICAgICAgIGlmICghc3RyY21wKGtleSwgInBh
Z2VJRCIpICYmIGdfdmFyaWFudF9jbGFzc2lmeSh2YWx1ZSkgPT0gR19WQVJJQU5UX0NMQVNTX1VJ
TlQ2NCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZ192YXJpYW50X2dldF91aW50NjQodmFsdWUp
OwotICAgICAgICB9Ci0KLSAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfQotCi0gICAgYm9vbCB0ZXN0SGllcmFyY2h5TmF2aWdhdGlvbihXZWJL
aXRXZWJFeHRlbnNpb24qIGV4dGVuc2lvbiwgR1ZhcmlhbnQqIGFyZ3MpCi0gICAgewotICAgICAg
ICBXZWJLaXRXZWJQYWdlKiBwYWdlID0gd2Via2l0X3dlYl9leHRlbnNpb25fZ2V0X3BhZ2UoZXh0
ZW5zaW9uLCB3ZWJQYWdlRnJvbUFyZ3MoYXJncykpOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRf
SVNfV0VCX1BBR0UocGFnZSkpOwotICAgICAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQg
PSB3ZWJraXRfd2ViX3BhZ2VfZ2V0X2RvbV9kb2N1bWVudChwYWdlKTsKLSAgICAgICAgZ19hc3Nl
cnQoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChkb2N1bWVudCkpOwotCi0gICAgICAgIFdlYktpdERP
TUhUTUxIZWFkRWxlbWVudCogaGVhZCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2hlYWQoZG9j
dW1lbnQpOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfSEVBRF9FTEVNRU5U
KGhlYWQpKTsKLQotICAgICAgICAvLyBUaXRsZSwgaGVhZCdzIGNoaWxkLgotICAgICAgICBnX2Fz
c2VydCh3ZWJraXRfZG9tX25vZGVfaGFzX2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShoZWFk
KSkpOwotICAgICAgICBHUmVmUHRyPFdlYktpdERPTU5vZGVMaXN0PiBsaXN0ID0gYWRvcHRHUmVm
KHdlYmtpdF9kb21fbm9kZV9nZXRfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGhlYWQpKSk7
Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfTk9ERV9MSVNUKGxpc3QuZ2V0KCkpKTsK
LSAgICAgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9kb21fbm9kZV9saXN0X2dldF9sZW5ndGgo
bGlzdC5nZXQoKSksID09LCAxKTsKLSAgICAgICAgV2ViS2l0RE9NTm9kZSogbm9kZSA9IHdlYmtp
dF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdC5nZXQoKSwgMCk7Ci0gICAgICAgIGdfYXNzZXJ0KFdF
QktJVF9ET01fSVNfSFRNTF9USVRMRV9FTEVNRU5UKG5vZGUpKTsKLQotICAgICAgICAvLyBCb2R5
LCBIZWFkIHNpYmxpbmcuCi0gICAgICAgIG5vZGUgPSB3ZWJraXRfZG9tX25vZGVfZ2V0X25leHRf
c2libGluZyhXRUJLSVRfRE9NX05PREUoaGVhZCkpOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRf
RE9NX0lTX0hUTUxfQk9EWV9FTEVNRU5UKG5vZGUpKTsKLSAgICAgICAgV2ViS2l0RE9NSFRNTEJv
ZHlFbGVtZW50KiBib2R5ID0gV0VCS0lUX0RPTV9IVE1MX0JPRFlfRUxFTUVOVChub2RlKTsKLQot
ICAgICAgICAvLyBUaGVyZSBpcyBubyB0aGlyZCBzaWJsaW5nCi0gICAgICAgIGdfYXNzZXJ0KCF3
ZWJraXRfZG9tX25vZGVfZ2V0X25leHRfc2libGluZyhub2RlKSk7Ci0KLSAgICAgICAgLy8gQm9k
eSdzIHByZXZpb3VzIHNpYmxpbmcgaXMgSGVhZC4KLSAgICAgICAgbm9kZSA9IHdlYmtpdF9kb21f
bm9kZV9nZXRfcHJldmlvdXNfc2libGluZyhXRUJLSVRfRE9NX05PREUoYm9keSkpOwotICAgICAg
ICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfSEVBRF9FTEVNRU5UKG5vZGUpKTsKLQotICAg
ICAgICAvLyBCb2R5IGhhcyAzIGNoaWxkcmVuLgotICAgICAgICBnX2Fzc2VydCh3ZWJraXRfZG9t
X25vZGVfaGFzX2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSkpOwotICAgICAgICBs
aXN0ID0gYWRvcHRHUmVmKHdlYmtpdF9kb21fbm9kZV9nZXRfY2hpbGRfbm9kZXMoV0VCS0lUX0RP
TV9OT0RFKGJvZHkpKSk7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuZ3RoID0gd2Via2l0X2Rv
bV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChsaXN0LmdldCgpKTsKLSAgICAgICAgZ19hc3NlcnRfY21w
aW50KGxlbmd0aCwgPT0sIDMpOwotCi0gICAgICAgIC8vIFRoZSB0aHJlZSBvZiB0aGVtIGFyZSBQ
IHRhZ3MuCi0gICAgICAgIGZvciAodW5zaWduZWQgbG9uZyBpID0gMDsgaSA8IGxlbmd0aDsgaSsr
KSB7Ci0gICAgICAgICAgICBub2RlID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0Lmdl
dCgpLCBpKTsKLSAgICAgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9QQVJBR1JB
UEhfRUxFTUVOVChub2RlKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBHbyBiYWNrd2FyZHMK
LSAgICAgICAgdW5zaWduZWQgaTsKLSAgICAgICAgZm9yIChpID0gMDsgbm9kZTsgbm9kZSA9IHdl
YmtpdF9kb21fbm9kZV9nZXRfcHJldmlvdXNfc2libGluZyhub2RlKSwgaSsrKSB7IH0KLSAgICAg
ICAgZ19hc3NlcnRfY21waW50KGksID09LCAzKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBib29sIHRlc3RJbnNlcnRpb24oV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNp
b24sIEdWYXJpYW50KiBhcmdzKQotICAgIHsKLSAgICAgICAgV2ViS2l0V2ViUGFnZSogcGFnZSA9
IHdlYmtpdF93ZWJfZXh0ZW5zaW9uX2dldF9wYWdlKGV4dGVuc2lvbiwgd2ViUGFnZUZyb21Bcmdz
KGFyZ3MpKTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX1dFQl9QQUdFKHBhZ2UpKTsKLSAg
ICAgICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50ID0gd2Via2l0X3dlYl9wYWdlX2dldF9k
b21fZG9jdW1lbnQocGFnZSk7Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfRE9DVU1F
TlQoZG9jdW1lbnQpKTsKLQotICAgICAgICBXZWJLaXRET01IVE1MRWxlbWVudCogYm9keSA9IHdl
YmtpdF9kb21fZG9jdW1lbnRfZ2V0X2JvZHkoZG9jdW1lbnQpOwotICAgICAgICBnX2Fzc2VydChX
RUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChib2R5KSk7Ci0KLSAgICAgICAgLy8gQm9keSBzaG91
bGRuJ3QgaGF2ZSBhbnkgY2hpbGRyZW4gYXQgdGhpcyBwb2ludC4KLSAgICAgICAgZ19hc3NlcnQo
IXdlYmtpdF9kb21fbm9kZV9oYXNfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKSk7
Ci0KLSAgICAgICAgLy8gSW5zZXJ0IG9uZSBQIGVsZW1lbnQuCi0gICAgICAgIFdlYktpdERPTUVs
ZW1lbnQqIHAgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9lbGVtZW50KGRvY3VtZW50LCAi
UCIsIDApOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChwKSk7
Ci0gICAgICAgIHdlYmtpdF9kb21fbm9kZV9hcHBlbmRfY2hpbGQoV0VCS0lUX0RPTV9OT0RFKGJv
ZHkpLCBXRUJLSVRfRE9NX05PREUocCksIDApOwotCi0gICAgICAgIC8vIE5vdyBpdCBzaG91bGQg
aGF2ZSBvbmUsIHRoZSBzYW1lIHRoYXQgd2UgaW5zZXJ0ZWQuCi0gICAgICAgIGdfYXNzZXJ0KHdl
YmtpdF9kb21fbm9kZV9oYXNfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKSk7Ci0g
ICAgICAgIEdSZWZQdHI8V2ViS2l0RE9NTm9kZUxpc3Q+IGxpc3QgPSBhZG9wdEdSZWYod2Via2l0
X2RvbV9ub2RlX2dldF9jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpKTsKLSAgICAg
ICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19OT0RFX0xJU1QobGlzdC5nZXQoKSkpOwotICAgICAg
ICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChsaXN0Lmdl
dCgpKSwgPT0sIDEpOwotICAgICAgICBXZWJLaXRET01Ob2RlKiBub2RlID0gd2Via2l0X2RvbV9u
b2RlX2xpc3RfaXRlbShsaXN0LmdldCgpLCAwKTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RP
TV9JU19IVE1MX0VMRU1FTlQobm9kZSkpOwotICAgICAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25v
ZGVfaXNfc2FtZV9ub2RlKFdFQktJVF9ET01fTk9ERShwKSwgbm9kZSkpOwotCi0gICAgICAgIC8v
IFJlcGxhY2UgdGhlIFAgdGFnIHdpdGggYSBESVYgdGFnLgotICAgICAgICBXZWJLaXRET01FbGVt
ZW50KiBkaXYgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9lbGVtZW50KGRvY3VtZW50LCAi
RElWIiwgMCk7Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKGRp
dikpOwotICAgICAgICB3ZWJraXRfZG9tX25vZGVfcmVwbGFjZV9jaGlsZChXRUJLSVRfRE9NX05P
REUoYm9keSksIFdFQktJVF9ET01fTk9ERShkaXYpLCBXRUJLSVRfRE9NX05PREUocCksIDApOwot
ICAgICAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaGFzX2NoaWxkX25vZGVzKFdFQktJVF9E
T01fTk9ERShib2R5KSkpOwotICAgICAgICBsaXN0ID0gYWRvcHRHUmVmKHdlYmtpdF9kb21fbm9k
ZV9nZXRfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKSk7Ci0gICAgICAgIGdfYXNz
ZXJ0KFdFQktJVF9ET01fSVNfTk9ERV9MSVNUKGxpc3QuZ2V0KCkpKTsKLSAgICAgICAgZ19hc3Nl
cnRfY21waW50KHdlYmtpdF9kb21fbm9kZV9saXN0X2dldF9sZW5ndGgobGlzdC5nZXQoKSksID09
LCAxKTsKLSAgICAgICAgbm9kZSA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdC5nZXQo
KSwgMCk7Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKG5vZGUp
KTsKLSAgICAgICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2lzX3NhbWVfbm9kZShXRUJLSVRf
RE9NX05PREUoZGl2KSwgbm9kZSkpOwotCi0gICAgICAgIC8vIE5vdyByZW1vdmUgdGhlIHRhZy4K
LSAgICAgICAgd2Via2l0X2RvbV9ub2RlX3JlbW92ZV9jaGlsZChXRUJLSVRfRE9NX05PREUoYm9k
eSksIG5vZGUsIDApOwotICAgICAgICBsaXN0ID0gYWRvcHRHUmVmKHdlYmtpdF9kb21fbm9kZV9n
ZXRfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKSk7Ci0gICAgICAgIGdfYXNzZXJ0
KFdFQktJVF9ET01fSVNfTk9ERV9MSVNUKGxpc3QuZ2V0KCkpKTsKLSAgICAgICAgZ19hc3NlcnRf
Y21waW50KHdlYmtpdF9kb21fbm9kZV9saXN0X2dldF9sZW5ndGgobGlzdC5nZXQoKSksID09LCAw
KTsKLQotICAgICAgICAvLyBUZXN0IGluc2VydCBiZWZvcmUuIElmIHJlZkNoaWxkIGlzIG51bGws
IGluc2VydCBuZXdDaGlsZCBhcyBsYXN0IGVsZW1lbnQgb2YgcGFyZW50LgotICAgICAgICBkaXYg
PSB3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9lbGVtZW50KGRvY3VtZW50LCAiRElWIiwgMCk7
Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKGRpdikpOwotICAg
ICAgICB3ZWJraXRfZG9tX25vZGVfaW5zZXJ0X2JlZm9yZShXRUJLSVRfRE9NX05PREUoYm9keSks
IFdFQktJVF9ET01fTk9ERShkaXYpLCAwLCAwKTsKLSAgICAgICAgZ19hc3NlcnQod2Via2l0X2Rv
bV9ub2RlX2hhc19jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpKTsKLSAgICAgICAg
bGlzdCA9IGFkb3B0R1JlZih3ZWJraXRfZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVzKFdFQktJVF9E
T01fTk9ERShib2R5KSkpOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX05PREVfTElT
VChsaXN0LmdldCgpKSk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfZG9tX25vZGVf
bGlzdF9nZXRfbGVuZ3RoKGxpc3QuZ2V0KCkpLCA9PSwgMSk7Ci0gICAgICAgIG5vZGUgPSB3ZWJr
aXRfZG9tX25vZGVfbGlzdF9pdGVtKGxpc3QuZ2V0KCksIDApOwotICAgICAgICBnX2Fzc2VydChX
RUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChub2RlKSk7Ci0gICAgICAgIGdfYXNzZXJ0KHdlYmtp
dF9kb21fbm9kZV9pc19zYW1lX25vZGUoV0VCS0lUX0RPTV9OT0RFKGRpdiksIG5vZGUpKTsKLQot
ICAgICAgICAvLyBOb3cgaW5zZXJ0IGEgJ3AnIGJlZm9yZSAnZGl2Jy4KLSAgICAgICAgcCA9IHdl
YmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2VsZW1lbnQoZG9jdW1lbnQsICJQIiwgMCk7Ci0gICAg
ICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKHApKTsKLSAgICAgICAgd2Vi
a2l0X2RvbV9ub2RlX2luc2VydF9iZWZvcmUoV0VCS0lUX0RPTV9OT0RFKGJvZHkpLCBXRUJLSVRf
RE9NX05PREUocCksIFdFQktJVF9ET01fTk9ERShkaXYpLCAwKTsKLSAgICAgICAgZ19hc3NlcnQo
d2Via2l0X2RvbV9ub2RlX2hhc19jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpKTsK
LSAgICAgICAgbGlzdCA9IGFkb3B0R1JlZih3ZWJraXRfZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVz
KFdFQktJVF9ET01fTk9ERShib2R5KSkpOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lT
X05PREVfTElTVChsaXN0LmdldCgpKSk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRf
ZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QuZ2V0KCkpLCA9PSwgMik7Ci0gICAgICAgIG5v
ZGUgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtKGxpc3QuZ2V0KCksIDApOwotICAgICAgICBn
X2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChub2RlKSk7Ci0gICAgICAgIGdfYXNz
ZXJ0KHdlYmtpdF9kb21fbm9kZV9pc19zYW1lX25vZGUoV0VCS0lUX0RPTV9OT0RFKHApLCBub2Rl
KSk7Ci0gICAgICAgIG5vZGUgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtKGxpc3QuZ2V0KCks
IDEpOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChub2RlKSk7
Ci0gICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9pc19zYW1lX25vZGUoV0VCS0lUX0RP
TV9OT0RFKGRpdiksIG5vZGUpKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICBib29sIHRlc3RUYWdOYW1lcyhXZWJLaXRXZWJFeHRlbnNpb24qIGV4dGVuc2lvbiwgR1Zhcmlh
bnQqIGFyZ3MpCi0gICAgewotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogZXhwZWN0ZWRUYWdO
YW1lc1tdID0geyAiSFRNTCIsICJIRUFEIiwgIkJPRFkiLCAiVklERU8iLCAiU09VUkNFIiwgIlZJ
REVPIiwgIlNPVVJDRSIsICJJTlBVVCIgfTsKLQotICAgICAgICBXZWJLaXRXZWJQYWdlKiBwYWdl
ID0gd2Via2l0X3dlYl9leHRlbnNpb25fZ2V0X3BhZ2UoZXh0ZW5zaW9uLCB3ZWJQYWdlRnJvbUFy
Z3MoYXJncykpOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfV0VCX1BBR0UocGFnZSkpOwot
ICAgICAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3BhZ2VfZ2V0
X2RvbV9kb2N1bWVudChwYWdlKTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19ET0NV
TUVOVChkb2N1bWVudCkpOwotCi0gICAgICAgIFdlYktpdERPTU5vZGVMaXN0KiBsaXN0ID0gd2Vi
a2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWUoZG9jdW1lbnQsICIqIik7
Ci0gICAgICAgIGd1bG9uZyBub2RlQ291bnQgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVu
Z3RoKGxpc3QpOwotICAgICAgICBnX2Fzc2VydF9jbXB1aW50KG5vZGVDb3VudCwgPT0sIEdfTl9F
TEVNRU5UUyhleHBlY3RlZFRhZ05hbWVzKSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBub2RlQ291bnQ7IGkrKykgewotICAgICAgICAgICAgV2ViS2l0RE9NTm9kZSogbm9kZSA9
IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdCwgaSk7Ci0gICAgICAgICAgICBnX2Fzc2Vy
dChXRUJLSVRfRE9NX0lTX05PREUobm9kZSkpOwotICAgICAgICAgICAgR093blB0cjxjaGFyPiB0
YWdOYW1lKHdlYmtpdF9kb21fbm9kZV9nZXRfbm9kZV9uYW1lKG5vZGUpKTsKLSAgICAgICAgICAg
IGdfYXNzZXJ0X2NtcHN0cih0YWdOYW1lLmdldCgpLCA9PSwgZXhwZWN0ZWRUYWdOYW1lc1tpXSk7
Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFs
IGJvb2wgcnVuVGVzdChjb25zdCBjaGFyKiB0ZXN0TmFtZSwgV2ViS2l0V2ViRXh0ZW5zaW9uKiBl
eHRlbnNpb24sIEdWYXJpYW50KiBhcmdzKQotICAgIHsKLSAgICAgICAgaWYgKCFzdHJjbXAodGVz
dE5hbWUsICJoaWVyYXJjaHktbmF2aWdhdGlvbiIpKQotICAgICAgICAgICAgcmV0dXJuIHRlc3RI
aWVyYXJjaHlOYXZpZ2F0aW9uKGV4dGVuc2lvbiwgYXJncyk7Ci0gICAgICAgIGlmICghc3RyY21w
KHRlc3ROYW1lLCAiaW5zZXJ0aW9uIikpCi0gICAgICAgICAgICByZXR1cm4gdGVzdEluc2VydGlv
bihleHRlbnNpb24sIGFyZ3MpOwotICAgICAgICBpZiAoIXN0cmNtcCh0ZXN0TmFtZSwgInRhZy1u
YW1lcyIpKQotICAgICAgICAgICAgcmV0dXJuIHRlc3RUYWdOYW1lcyhleHRlbnNpb24sIGFyZ3Mp
OwotCi0gICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci19OwotCi1zdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChjb25zdHJ1Y3Rvcikp
IHJlZ2lzdGVyVGVzdHMoKQotewotICAgIFJFR0lTVEVSX1RFU1QoV2ViS2l0RE9NTm9kZVRlc3Qs
ICJXZWJLaXRET01Ob2RlL2hpZXJhcmNoeS1uYXZpZ2F0aW9uIik7Ci0gICAgUkVHSVNURVJfVEVT
VChXZWJLaXRET01Ob2RlVGVzdCwgIldlYktpdERPTU5vZGUvaW5zZXJ0aW9uIik7Ci0gICAgUkVH
SVNURVJfVEVTVChXZWJLaXRET01Ob2RlVGVzdCwgIldlYktpdERPTU5vZGUvdGFnLW5hbWVzIik7
Ci19Ci0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvRnJhbWVUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L0ZyYW1lVGVzdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkNDg1MGYuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvRnJhbWVU
ZXN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIldl
YlByb2Nlc3NUZXN0LmgiCi0jaW5jbHVkZSA8Z2lvL2dpby5oPgotI2luY2x1ZGUgPHdlYmtpdDIv
d2Via2l0LXdlYi1leHRlbnNpb24uaD4KLQotY2xhc3MgV2ViS2l0RnJhbWVUZXN0IDogcHVibGlj
IFdlYlByb2Nlc3NUZXN0IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxXZWJQcm9j
ZXNzVGVzdD4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IFdlYktpdEZyYW1lVGVzdCgp
KTsgfQotCi1wcml2YXRlOgotICAgIGd1aW50NjQgd2ViUGFnZUZyb21BcmdzKEdWYXJpYW50KiBh
cmdzKQotICAgIHsKLSAgICAgICAgR1ZhcmlhbnRJdGVyIGl0ZXI7Ci0gICAgICAgIGdfdmFyaWFu
dF9pdGVyX2luaXQoJml0ZXIsIGFyZ3MpOwotCi0gICAgICAgIGNvbnN0IGNoYXIqIGtleTsKLSAg
ICAgICAgR1ZhcmlhbnQqIHZhbHVlOwotICAgICAgICB3aGlsZSAoZ192YXJpYW50X2l0ZXJfbG9v
cCgmaXRlciwgInsmc3Z9IiwgJmtleSwgJnZhbHVlKSkgewotICAgICAgICAgICAgaWYgKCFzdHJj
bXAoa2V5LCAicGFnZUlEIikgJiYgZ192YXJpYW50X2NsYXNzaWZ5KHZhbHVlKSA9PSBHX1ZBUklB
TlRfQ0xBU1NfVUlOVDY0KQotICAgICAgICAgICAgICAgIHJldHVybiBnX3ZhcmlhbnRfZ2V0X3Vp
bnQ2NCh2YWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgp
OwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBib29sIHRlc3RNYWluRnJhbWUoV2Vi
S2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24sIEdWYXJpYW50KiBhcmdzKQotICAgIHsKLSAgICAg
ICAgV2ViS2l0V2ViUGFnZSogcGFnZSA9IHdlYmtpdF93ZWJfZXh0ZW5zaW9uX2dldF9wYWdlKGV4
dGVuc2lvbiwgd2ViUGFnZUZyb21BcmdzKGFyZ3MpKTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lU
X0lTX1dFQl9QQUdFKHBhZ2UpKTsKLQotICAgICAgICBXZWJLaXRGcmFtZSogZnJhbWUgPSB3ZWJr
aXRfd2ViX3BhZ2VfZ2V0X21haW5fZnJhbWUocGFnZSk7Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJ
VF9JU19GUkFNRShmcmFtZSkpOwotICAgICAgICBnX2Fzc2VydCh3ZWJraXRfZnJhbWVfaXNfbWFp
bl9mcmFtZShmcmFtZSkpOwotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGJv
b2wgdGVzdFVSSShXZWJLaXRXZWJFeHRlbnNpb24qIGV4dGVuc2lvbiwgR1ZhcmlhbnQqIGFyZ3Mp
Ci0gICAgewotICAgICAgICBXZWJLaXRXZWJQYWdlKiBwYWdlID0gd2Via2l0X3dlYl9leHRlbnNp
b25fZ2V0X3BhZ2UoZXh0ZW5zaW9uLCB3ZWJQYWdlRnJvbUFyZ3MoYXJncykpOwotICAgICAgICBn
X2Fzc2VydChXRUJLSVRfSVNfV0VCX1BBR0UocGFnZSkpOwotCi0gICAgICAgIFdlYktpdEZyYW1l
KiBmcmFtZSA9IHdlYmtpdF93ZWJfcGFnZV9nZXRfbWFpbl9mcmFtZShwYWdlKTsKLSAgICAgICAg
Z19hc3NlcnQoV0VCS0lUX0lTX0ZSQU1FKGZyYW1lKSk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0
cih3ZWJraXRfd2ViX3BhZ2VfZ2V0X3VyaShwYWdlKSwgPT0sIHdlYmtpdF9mcmFtZV9nZXRfdXJp
KGZyYW1lKSk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgYm9vbCB0ZXN0
SmF2YVNjcmlwdENvbnRleHQoV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24sIEdWYXJpYW50
KiBhcmdzKQotICAgIHsKLSAgICAgICAgV2ViS2l0V2ViUGFnZSogcGFnZSA9IHdlYmtpdF93ZWJf
ZXh0ZW5zaW9uX2dldF9wYWdlKGV4dGVuc2lvbiwgd2ViUGFnZUZyb21BcmdzKGFyZ3MpKTsKLSAg
ICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX1dFQl9QQUdFKHBhZ2UpKTsKLQotICAgICAgICBXZWJL
aXRGcmFtZSogZnJhbWUgPSB3ZWJraXRfd2ViX3BhZ2VfZ2V0X21haW5fZnJhbWUocGFnZSk7Ci0g
ICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19GUkFNRShmcmFtZSkpOwotICAgICAgICBnX2Fzc2Vy
dCh3ZWJraXRfZnJhbWVfZ2V0X2phdmFzY3JpcHRfZ2xvYmFsX2NvbnRleHQoZnJhbWUpKTsKLQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcnVuVGVzdChj
b25zdCBjaGFyKiB0ZXN0TmFtZSwgV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24sIEdWYXJp
YW50KiBhcmdzKQotICAgIHsKLSAgICAgICAgaWYgKCFzdHJjbXAodGVzdE5hbWUsICJtYWluLWZy
YW1lIikpCi0gICAgICAgICAgICByZXR1cm4gdGVzdE1haW5GcmFtZShleHRlbnNpb24sIGFyZ3Mp
OwotICAgICAgICBpZiAoIXN0cmNtcCh0ZXN0TmFtZSwgInVyaSIpKQotICAgICAgICAgICAgcmV0
dXJuIHRlc3RVUkkoZXh0ZW5zaW9uLCBhcmdzKTsKLSAgICAgICAgaWYgKCFzdHJjbXAodGVzdE5h
bWUsICJqYXZhc2NyaXB0LWNvbnRleHQiKSkKLSAgICAgICAgICAgIHJldHVybiB0ZXN0SmF2YVNj
cmlwdENvbnRleHQoZXh0ZW5zaW9uLCBhcmdzKTsKLQotICAgICAgICBnX2Fzc2VydF9ub3RfcmVh
Y2hlZCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfTsKLQotc3RhdGljIHZvaWQg
X19hdHRyaWJ1dGVfXygoY29uc3RydWN0b3IpKSByZWdpc3RlclRlc3RzKCkKLXsKLSAgICBSRUdJ
U1RFUl9URVNUKFdlYktpdEZyYW1lVGVzdCwgIldlYktpdEZyYW1lL21haW4tZnJhbWUiKTsKLSAg
ICBSRUdJU1RFUl9URVNUKFdlYktpdEZyYW1lVGVzdCwgIldlYktpdEZyYW1lL3VyaSIpOwotICAg
IFJFR0lTVEVSX1RFU1QoV2ViS2l0RnJhbWVUZXN0LCAiV2ViS2l0RnJhbWUvamF2YXNjcmlwdC1j
b250ZXh0Iik7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL0dOVW1ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNWVj
N2QxLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L0dOVW1ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsMzI2ICswLDAgQEAKLWlmIEVOQUJM
RV9XRUJLSVQyCi0KLVRFU1RfUFJPR1MgKz0gXAotCVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJ
VGVzdHMvSW5zcGVjdG9yVGVzdFNlcnZlciBcCi0JUHJvZ3JhbXMvV2ViS2l0MkdPYmplY3RBUElU
ZXN0cy9UZXN0QXV0aGVudGljYXRpb24gXAotCVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVz
dHMvVGVzdEJhY2tGb3J3YXJkTGlzdCBcCi0JUHJvZ3JhbXMvV2ViS2l0MkdPYmplY3RBUElUZXN0
cy9UZXN0Q29udGV4dE1lbnUgXAotCVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVz
dENvb2tpZU1hbmFnZXIgXAotCVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdERP
TU5vZGUgXAotCVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdERvd25sb2FkcyBc
Ci0JUHJvZ3JhbXMvV2ViS2l0MkdPYmplY3RBUElUZXN0cy9UZXN0RnJhbWUgXAotCVByb2dyYW1z
L1dlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdEluc3BlY3RvciBcCi0JUHJvZ3JhbXMvV2ViS2l0
MkdPYmplY3RBUElUZXN0cy9UZXN0SW5zcGVjdG9yU2VydmVyIFwKLQlQcm9ncmFtcy9XZWJLaXQy
R09iamVjdEFQSVRlc3RzL1Rlc3RMb2FkZXJDbGllbnQgXAotCVByb2dyYW1zL1dlYktpdDJHT2Jq
ZWN0QVBJVGVzdHMvVGVzdFByaW50aW5nIFwKLQlQcm9ncmFtcy9XZWJLaXQyR09iamVjdEFQSVRl
c3RzL1Rlc3RSZXNvdXJjZXMgXAotCVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVz
dFNTTCBcCi0JUHJvZ3JhbXMvV2ViS2l0MkdPYmplY3RBUElUZXN0cy9UZXN0VUlDbGllbnQgXAot
CVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdFdlYkV4dGVuc2lvbnMgXAotCVBy
b2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdFdlYktpdFZlcnNpb24gXAotCVByb2dy
YW1zL1dlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdFdlYktpdEZhdmljb25EYXRhYmFzZSBcCi0J
UHJvZ3JhbXMvV2ViS2l0MkdPYmplY3RBUElUZXN0cy9UZXN0V2ViS2l0RmluZENvbnRyb2xsZXIg
XAotCVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdFdlYktpdFBvbGljeUNsaWVu
dCBcCi0JUHJvZ3JhbXMvV2ViS2l0MkdPYmplY3RBUElUZXN0cy9UZXN0V2ViS2l0U2V0dGluZ3Mg
XAotCVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdFdlYktpdFdlYkNvbnRleHQg
XAotCVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdFdlYktpdFdlYlZpZXcgXAot
CVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdFdlYktpdFdlYlZpZXdHcm91cCBc
Ci0JUHJvZ3JhbXMvV2ViS2l0MkdPYmplY3RBUElUZXN0cy9UZXN0V2ViVmlld0VkaXRvcgotCi1u
b2luc3RfUFJPR1JBTVMgKz0gJChURVNUX1BST0dTKQotCi1pZiBIQVZFX0FUU1BJMgotVEVTVF9Q
Uk9HUyArPSBQcm9ncmFtcy9XZWJLaXQyR09iamVjdEFQSVRlc3RzL1Rlc3RXZWJLaXRBY2Nlc3Np
YmlsaXR5Ci0KLW5vaW5zdF9QUk9HUkFNUyArPSBQcm9ncmFtcy9XZWJLaXQyR09iamVjdEFQSVRl
c3RzL0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyCi1lbmRpZgotCi13ZWJraXQyX3Rlc3RzX2NwcGZs
YWdzID0gXAotCS1EV0VCS0lUX0VYRUNfUEFUSD1cIiR7c2hlbGwgcHdkfS8kKHRvcF9idWlsZGRp
cikvUHJvZ3JhbXNcIiBcCi0JLURXRUJLSVRfU1JDX0RJUj1cIiR7c2hlbGwgcHdkfS8ke3NyY2Rp
cn1cIiBcCi0JLURXRUJLSVRfREVSSVZFRF9TUkNfRElSPVwiJHtzaGVsbCBwd2R9LyR7dG9wX2J1
aWxkZGlyfS9EZXJpdmVkU291cmNlc1wiIFwKLQktRFdFQktJVF9URVNUX1BMVUdJTl9ESVI9XCIk
e3NoZWxsIHB3ZH0vJHt0b3BfYnVpbGRkaXJ9L1Rlc3ROZXRzY2FwZVBsdWdpbi8ubGlic1wiIFwK
LQktRFdFQktJVF9URVNUX1dFQl9FWFRFTlNJT05TX0RJUj1cIiR7c2hlbGwgcHdkfS8ke3RvcF9i
dWlsZGRpcn0vTGlicmFyaWVzL1dlYkV4dGVuc2lvbnMvLmxpYnNcIiBcCi0JLURXRUJLSVRfSU5K
RUNURURfQlVORExFX1BBVEg9XCIke3NoZWxsIHB3ZH0vJCh0b3BfYnVpbGRkaXIpLy5saWJzXCIg
XAotCSQoamF2YXNjcmlwdGNvcmVfY3BwZmxhZ3MpIFwKLQktSSQoc3JjZGlyKS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUgXAotCS1JJChzcmNkaXIpL1NvdXJjZSBcCi0JLUkkKHNyY2RpcikvU291cmNl
L1dlYktpdDIgXAotCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvaW5j
bHVkZSBcCi0JLUkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi93ZWJraXQy
Z3RrIFwKLQktSSQodG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL3dlYmtpdDJn
dGsvaW5jbHVkZSBcCi0JLUkkKHNyY2RpcikvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsgXAotCSQoZ2xvYmFsX2NwcGZsYWdzKSBcCi0JJChGUkVFVFlQRV9DRkxBR1MpIFwKLQkkKEdM
SUJfQ0ZMQUdTKSBcCi0JJChHVEtfQ0ZMQUdTKSBcCi0JJChMSUJTT1VQX0NGTEFHUykKLQotd2Vi
a2l0Ml90ZXN0c19sZGFkZCA9IFwKLQlMaWJyYXJpZXMvbGliV2ViS2l0MkFQSVRlc3RDb3JlLmxh
IFwKLQlsaWJqYXZhc2NyaXB0Y29yZWd0ay1AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQC5A
V0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQC5sYSBcCi0JbGlid2Via2l0Mmd0ay1AV0VCS0lU
R1RLX0FQSV9NQUpPUl9WRVJTSU9OQC5AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQC5sYSBc
Ci0JJChGUkVFVFlQRV9MSUJTKSBcCi0JJChHRU9DTFVFX0xJQlMpIFwKLQkkKEdMSUJfTElCUykg
XAotCSQoR1RLX0xJQlMpIFwKLQkkKExJQlNPVVBfTElCUykKLQotd2Via2l0Ml90ZXN0c19sZGZs
YWdzID0gXAotCS1uby1pbnN0YWxsCi0KLVByb2dyYW1zL3Jlc291cmNlcy93ZWJraXQyZ3RrLXRl
c3RzLXJlc291cmNlcy5ncmVzb3VyY2U6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL3Jlc291cmNlcy93ZWJraXQyZ3RrLXRlc3RzLmdyZXNvdXJjZS54bWwgJChzaGVsbCAk
KEdMSUJfQ09NUElMRV9SRVNPVVJDRVMpIC0tc291cmNlZGlyPSQoc3JjZGlyKSAtLWdlbmVyYXRl
LWRlcGVuZGVuY2llcyAkKHNyY2RpcikvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvcmVzb3VyY2VzL3dlYmtpdDJndGstdGVzdHMuZ3Jlc291cmNlLnhtbCkKLQkkKEFNX1Zf
YXQpbWtkaXIgLXAgJHtHRU5QUk9HUkFNU30vcmVzb3VyY2VzCi0JJChBTV9WX0dFTikgJChHTElC
X0NPTVBJTEVfUkVTT1VSQ0VTKSAtLXRhcmdldD0kQCAtLXNvdXJjZWRpcj0kKHNyY2RpcikgJDwK
LQotUHJvZ3JhbXMvcmVzb3VyY2VzL2luc3BlY3Rvci9pbnNwZWN0b3JQYWdlSW5kZXguaHRtbDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9mcm9udC1lbmQvaW5zcGVj
dG9yUGFnZUluZGV4Lmh0bWwKLQkkKEFNX1ZfYXQpbWtkaXIgLXAgJHtHRU5QUk9HUkFNU30vcmVz
b3VyY2VzL2luc3BlY3RvcgotCSQoQU1fVl9HRU4pY3AgJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvZnJvbnQtZW5kL2luc3BlY3RvclBhZ2VJbmRleC5o
dG1sICR7R0VOUFJPR1JBTVN9L3Jlc291cmNlcy9pbnNwZWN0b3IKLQotRElTVENMRUFORklMRVMg
Kz0gXAotCVByb2dyYW1zL3Jlc291cmNlcy93ZWJraXQyZ3RrLXRlc3RzLXJlc291cmNlcy5ncmVz
b3VyY2UgXAotCVByb2dyYW1zL3Jlc291cmNlcy9pbnNwZWN0b3IvaW5zcGVjdG9yUGFnZUluZGV4
Lmh0bWwKLQotbm9pbnN0X0RBVEEgKz0gXAotCVByb2dyYW1zL3Jlc291cmNlcy93ZWJraXQyZ3Rr
LXRlc3RzLXJlc291cmNlcy5ncmVzb3VyY2UgXAotCVByb2dyYW1zL3Jlc291cmNlcy9pbnNwZWN0
b3IvaW5zcGVjdG9yUGFnZUluZGV4Lmh0bWwKLQotbm9pbnN0X0xUTElCUkFSSUVTICs9IExpYnJh
cmllcy9saWJXZWJLaXQyQVBJVGVzdENvcmUubGEKLUxpYnJhcmllc19saWJXZWJLaXQyQVBJVGVz
dENvcmVfbGFfU09VUkNFUyA9IFwKLQlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9Mb2FkVHJhY2tpbmdUZXN0LmNwcCBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvTG9hZFRyYWNraW5nVGVzdC5oIFwKLQlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9XZWJLaXRUZXN0QnVzLmNwcCBcCi0JU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViS2l0VGVzdEJ1cy5oIFwKLQlTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJLaXRUZXN0U2VydmVyLmNwcCBcCi0JU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViS2l0VGVzdFNlcnZlci5oIFwKLQlTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJQcm9jZXNzVGVzdFJ1bm5lci5j
cHAgXAotCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlByb2Nlc3NU
ZXN0UnVubmVyLmggXAotCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rl
c3RNYWluLmNwcCBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVz
dE1haW4uaCBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmll
d1Rlc3QuY3BwIFwKLQlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJW
aWV3VGVzdC5oCi1MaWJyYXJpZXNfbGliV2ViS2l0MkFQSVRlc3RDb3JlX2xhX0NQUEZMQUdTID0g
JCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKQotCi1ub2luc3RfTFRMSUJSQVJJRVMgKz0gTGlicmFy
aWVzL1dlYkV4dGVuc2lvbnMvbGliV2ViRXh0ZW5zaW9uVGVzdC5sYQotTGlicmFyaWVzX1dlYkV4
dGVuc2lvbnNfbGliV2ViRXh0ZW5zaW9uVGVzdF9sYV9TT1VSQ0VTID0gXAotCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYkV4dGVuc2lvblRlc3QuY3BwCi0KLUxpYnJh
cmllc19XZWJFeHRlbnNpb25zX2xpYldlYkV4dGVuc2lvblRlc3RfbGFfTERGTEFHUyA9IFwKLQkt
cnBhdGggJHtzaGVsbCBwd2R9LyQodG9wX2J1aWxkZGlyKS9MaWJyYXJpZXMvV2ViRXh0ZW5zaW9u
cy8ubGlicyBcCi0JJChub191bmRlZmluZWQpIFwKLQktYXZvaWQtdmVyc2lvbiBcCi0JLW1vZHVs
ZQotCi1MaWJyYXJpZXNfV2ViRXh0ZW5zaW9uc19saWJXZWJFeHRlbnNpb25UZXN0X2xhX0NQUEZM
QUdTID0gXAotCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ayBcCi0JLUkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJjZXMgXAotCS1J
JCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvd2Via2l0MmV4dGVuc2lvbi9p
bmNsdWRlIFwKLQktRFdFQktJVDJfQ09NUElMQVRJT04gXAotCSQod2Via2l0Ml90ZXN0c19jcHBm
bGFncykKLQotTGlicmFyaWVzX1dlYkV4dGVuc2lvbnNfbGliV2ViRXh0ZW5zaW9uVGVzdF9sYV9D
WFhGTEFHUyA9IFwKLSAgICAgICAgJChnbG9iYWxfY3h4ZmxhZ3MpCi0KLUxpYnJhcmllc19XZWJF
eHRlbnNpb25zX2xpYldlYkV4dGVuc2lvblRlc3RfbGFfQ0ZMQUdTID0gXAotICAgICAgICAkKGds
b2JhbF9jZmxhZ3MpCi0KLQotbm9pbnN0X0xUTElCUkFSSUVTICs9IExpYnJhcmllcy9XZWJFeHRl
bnNpb25zL2xpYldlYlByb2Nlc3NUZXN0LmxhCi1MaWJyYXJpZXNfV2ViRXh0ZW5zaW9uc19saWJX
ZWJQcm9jZXNzVGVzdF9sYV9TT1VSQ0VTID0gXAotCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL0RPTU5vZGVUZXN0LmNwcCBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvRnJhbWVUZXN0LmNwcCBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvV2ViUHJvY2Vzc1Rlc3QuY3BwIFwKLQlTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJQcm9jZXNzVGVzdC5oCi0KLUxpYnJhcmllc19XZWJFeHRl
bnNpb25zX2xpYldlYlByb2Nlc3NUZXN0X2xhX0xERkxBR1MgPSBcCi0JLXJwYXRoICR7c2hlbGwg
cHdkfS8kKHRvcF9idWlsZGRpcikvTGlicmFyaWVzL1dlYkV4dGVuc2lvbnMvLmxpYnMgXAotCSQo
bm9fdW5kZWZpbmVkKSBcCi0JLWF2b2lkLXZlcnNpb24gXAotCS1tb2R1bGUKLQotTGlicmFyaWVz
X1dlYkV4dGVuc2lvbnNfbGliV2ViUHJvY2Vzc1Rlc3RfbGFfQ1BQRkxBR1MgPSBcCi0JLUkkKHNy
Y2RpcikvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrIFwK
LQktSSQodG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcyBcCi0JLUkkKHRvcF9idWlsZGRpcikv
RGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi93ZWJraXQyZXh0ZW5zaW9uL2luY2x1ZGUgXAotCS1EV0VC
S0lUMl9DT01QSUxBVElPTiBcCi0JJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKQotCi1MaWJyYXJp
ZXNfV2ViRXh0ZW5zaW9uc19saWJXZWJQcm9jZXNzVGVzdF9sYV9DWFhGTEFHUyA9IFwKLQkkKGds
b2JhbF9jeHhmbGFncykKLQotTGlicmFyaWVzX1dlYkV4dGVuc2lvbnNfbGliV2ViUHJvY2Vzc1Rl
c3RfbGFfQ0ZMQUdTID0gXAotCSQoZ2xvYmFsX2NmbGFncykKLQotCi1FWFRSQV9ESVNUICs9IFwK
LQlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9yZXNvdXJjZXMvdGVzdC1j
ZXJ0LnBlbSBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvcmVzb3Vy
Y2VzL3Rlc3Qta2V5LnBlbSBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvcmVzb3VyY2VzL3dlYmtpdDJndGstdGVzdHMuZ3Jlc291cmNlLnhtbCBcCi0JU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvcmVzb3VyY2VzL2xpbmstdGl0bGUuanMKLQot
UHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2ViS2l0V2ViQ29udGV4dF9TT1VS
Q0VTID0gXAotCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJL
aXRXZWJDb250ZXh0LmNwcAotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2Vi
S2l0V2ViQ29udGV4dF9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKLVByb2dy
YW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktpdFdlYkNvbnRleHRfTERBREQgPSAk
KHdlYmtpdDJfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rl
c3RXZWJLaXRXZWJDb250ZXh0X0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKLQot
UHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2ViS2l0V2ViVmlld19TT1VSQ0VT
ID0gXAotCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRX
ZWJWaWV3LmNwcAotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2ViS2l0V2Vi
Vmlld19DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKLVByb2dyYW1zX1dlYktp
dDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktpdFdlYlZpZXdfTERBREQgPSAkKHdlYmtpdDJfdGVz
dHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJLaXRXZWJW
aWV3X0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0
MkdPYmplY3RBUElUZXN0c19UZXN0TG9hZGVyQ2xpZW50X1NPVVJDRVMgPSBcCi0JU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdExvYWRlckNsaWVudC5jcHAKLVByb2dy
YW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdExvYWRlckNsaWVudF9DUFBGTEFHUyA9ICQo
d2Via2l0Ml90ZXN0c19jcHBmbGFncykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNf
VGVzdExvYWRlckNsaWVudF9MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKLVByb2dyYW1z
X1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdExvYWRlckNsaWVudF9MREZMQUdTID0gJCh3ZWJr
aXQyX3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVz
dFdlYktpdFNldHRpbmdzX1NPVVJDRVMgPSBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvVGVzdFdlYktpdFNldHRpbmdzLmNwcAotUHJvZ3JhbXNfV2ViS2l0MkdPYmpl
Y3RBUElUZXN0c19UZXN0V2ViS2l0U2V0dGluZ3NfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNf
Y3BwZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJLaXRTZXR0
aW5nc19MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDJHT2Jq
ZWN0QVBJVGVzdHNfVGVzdFdlYktpdFNldHRpbmdzX0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNf
bGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19JbnNwZWN0b3JUZXN0
U2VydmVyX1NPVVJDRVMgPSBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvSW5zcGVjdG9yVGVzdFNlcnZlci5jcHAKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVz
dHNfSW5zcGVjdG9yVGVzdFNlcnZlcl9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFn
cykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfSW5zcGVjdG9yVGVzdFNlcnZlcl9M
REFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJ
VGVzdHNfSW5zcGVjdG9yVGVzdFNlcnZlcl9MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxh
Z3MpCi0KLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdEJhY2tGb3J3YXJkTGlz
dF9TT1VSQ0VTID0gXAotICAgICAgICBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9UZXN0QmFja0ZvcndhcmRMaXN0LmNwcAotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElU
ZXN0c19UZXN0QmFja0ZvcndhcmRMaXN0X0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZs
YWdzKQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0QmFja0ZvcndhcmRMaXN0
X0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RB
UElUZXN0c19UZXN0QmFja0ZvcndhcmRMaXN0X0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRm
bGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2ViS2l0UG9saWN5
Q2xpZW50X1NPVVJDRVMgPSBcCi0gICAgICAgIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL1Rlc3RXZWJLaXRQb2xpY3lDbGllbnQuY3BwCi1Qcm9ncmFtc19XZWJLaXQyR09i
amVjdEFQSVRlc3RzX1Rlc3RXZWJLaXRQb2xpY3lDbGllbnRfQ1BQRkxBR1MgPSAkKHdlYmtpdDJf
dGVzdHNfY3BwZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJL
aXRQb2xpY3lDbGllbnRfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19X
ZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJLaXRQb2xpY3lDbGllbnRfTERGTEFHUyA9ICQo
d2Via2l0Ml90ZXN0c19sZGZsYWdzKQotCi1pZiBIQVZFX0FUU1BJMgotUHJvZ3JhbXNfV2ViS2l0
MkdPYmplY3RBUElUZXN0c19BY2Nlc3NpYmlsaXR5VGVzdFNlcnZlcl9TT1VSQ0VTID0gXAotCVNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0FjY2Vzc2liaWxpdHlUZXN0U2Vy
dmVyLmNwcAotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19BY2Nlc3NpYmlsaXR5VGVz
dFNlcnZlcl9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKLVByb2dyYW1zX1dl
YktpdDJHT2JqZWN0QVBJVGVzdHNfQWNjZXNzaWJpbGl0eVRlc3RTZXJ2ZXJfTERBREQgPSAkKHdl
YmtpdDJfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX0FjY2Vz
c2liaWxpdHlUZXN0U2VydmVyX0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKLQot
UHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2ViS2l0QWNjZXNzaWJpbGl0eV9T
T1VSQ0VTID0gXAotCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RX
ZWJLaXRBY2Nlc3NpYmlsaXR5LmNwcAotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19U
ZXN0V2ViS2l0QWNjZXNzaWJpbGl0eV9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFn
cykgJChBVFNQSTJfQ0ZMQUdTKQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0
V2ViS2l0QWNjZXNzaWJpbGl0eV9MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkgJChBVFNQ
STJfTElCUykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktpdEFjY2Vz
c2liaWxpdHlfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQotZW5kaWYKLQotUHJv
Z3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0RG93bmxvYWRzX1NPVVJDRVMgPSBcCi0g
ICAgICAgIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3REb3dubG9h
ZHMuY3BwCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3REb3dubG9hZHNfQ1BQ
RkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVj
dEFQSVRlc3RzX1Rlc3REb3dubG9hZHNfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCi1Q
cm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3REb3dubG9hZHNfTERGTEFHUyA9ICQo
d2Via2l0Ml90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3Rz
X1Rlc3RXZWJWaWV3RWRpdG9yX1NPVVJDRVMgPSBcCi0gICAgICAgIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJWaWV3RWRpdG9yLmNwcAotUHJvZ3JhbXNfV2Vi
S2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2ViVmlld0VkaXRvcl9DUFBGTEFHUyA9ICQod2Via2l0
Ml90ZXN0c19jcHBmbGFncykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdl
YlZpZXdFZGl0b3JfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJL
aXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJWaWV3RWRpdG9yX0xERkxBR1MgPSAkKHdlYmtpdDJf
dGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0UHJp
bnRpbmdfU09VUkNFUyA9IFwKLSAgICAgICAgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvVGVzdFByaW50aW5nLmNwcAotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0
c19UZXN0UHJpbnRpbmdfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MpICQoR1RL
X1VOSVhfUFJJTlRJTkdfQ0ZMQUdTKQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19U
ZXN0UHJpbnRpbmdfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpICQoR1RLX1VOSVhfUFJJ
TlRJTkdfTElCUykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFByaW50aW5n
X0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MkdP
YmplY3RBUElUZXN0c19UZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlX1NPVVJDRVMgPSBcCi0JU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdEZhdmljb25EYXRh
YmFzZS5jcHAKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktpdEZhdmlj
b25EYXRhYmFzZV9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKLVByb2dyYW1z
X1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktpdEZhdmljb25EYXRhYmFzZV9MREFERCA9
ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNf
VGVzdFdlYktpdEZhdmljb25EYXRhYmFzZV9MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxh
Z3MpCi0KLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktpdEZpbmRDb250
cm9sbGVyX1NPVVJDRVMgPSBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvVGVzdFdlYktpdEZpbmRDb250cm9sbGVyLmNwcAotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RB
UElUZXN0c19UZXN0V2ViS2l0RmluZENvbnRyb2xsZXJfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVz
dHNfY3BwZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJLaXRG
aW5kQ29udHJvbGxlcl9MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dl
YktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktpdEZpbmRDb250cm9sbGVyX0xERkxBR1MgPSAk
KHdlYmtpdDJfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0
c19UZXN0UmVzb3VyY2VzX1NPVVJDRVMgPSBcCi0gICAgICAgIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RSZXNvdXJjZXMuY3BwCi1Qcm9ncmFtc19XZWJLaXQyR09i
amVjdEFQSVRlc3RzX1Rlc3RSZXNvdXJjZXNfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3Bw
ZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RSZXNvdXJjZXNfTERB
REQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRl
c3RzX1Rlc3RSZXNvdXJjZXNfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQotCi1Q
cm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RDb29raWVNYW5hZ2VyX1NPVVJDRVMg
PSBcCi0gICAgICAgIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RD
b29raWVNYW5hZ2VyLmNwcAotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0Q29v
a2llTWFuYWdlcl9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKLVByb2dyYW1z
X1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdENvb2tpZU1hbmFnZXJfTERBREQgPSAkKHdlYmtp
dDJfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RDb29r
aWVNYW5hZ2VyX0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNf
V2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0SW5zcGVjdG9yX1NPVVJDRVMgPSBcCi0gICAgICAg
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RJbnNwZWN0b3IuY3Bw
Ci1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RJbnNwZWN0b3JfQ1BQRkxBR1Mg
PSBcCi0JJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RB
UElUZXN0c19UZXN0SW5zcGVjdG9yX0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQotUHJv
Z3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0SW5zcGVjdG9yX0xERkxBR1MgPSAkKHdl
YmtpdDJfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19U
ZXN0SW5zcGVjdG9yU2VydmVyX1NPVVJDRVMgPSBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvVGVzdEluc3BlY3RvclNlcnZlci5jcHAKLVByb2dyYW1zX1dlYktpdDJH
T2JqZWN0QVBJVGVzdHNfVGVzdEluc3BlY3RvclNlcnZlcl9DUFBGTEFHUyA9ICQod2Via2l0Ml90
ZXN0c19jcHBmbGFncykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdEluc3Bl
Y3RvclNlcnZlcl9MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktp
dDJHT2JqZWN0QVBJVGVzdHNfVGVzdEluc3BlY3RvclNlcnZlcl9MREZMQUdTID0gJCh3ZWJraXQy
X3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdl
YktpdFZlcnNpb25fU09VUkNFUyA9IFwKLSAgICAgICAgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFZlcnNpb24uY3BwCi1Qcm9ncmFtc19XZWJLaXQyR09i
amVjdEFQSVRlc3RzX1Rlc3RXZWJLaXRWZXJzaW9uX0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3Rz
X2NwcGZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2ViS2l0VmVy
c2lvbl9MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDJHT2Jq
ZWN0QVBJVGVzdHNfVGVzdFdlYktpdFZlcnNpb25fTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19s
ZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RDb250ZXh0TWVu
dV9TT1VSQ0VTID0gXAotICAgICAgICBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9UZXN0Q29udGV4dE1lbnUuY3BwCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3Rz
X1Rlc3RDb250ZXh0TWVudV9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKLVBy
b2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdENvbnRleHRNZW51X0xEQUREID0gJCh3
ZWJraXQyX3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0
Q29udGV4dE1lbnVfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFt
c19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RTU0xfU09VUkNFUyA9IFwKLSAgICAgICAgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFNTTC5jcHAKLVByb2dyYW1z
X1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFNTTF9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0
c19jcHBmbGFncykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFNTTF9MREFE
RCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVz
dHNfVGVzdFNTTF9MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1z
X1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYkV4dGVuc2lvbnNfU09VUkNFUyA9IFwKLSAg
ICAgICAgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYkV4dGVu
c2lvbnMuY3BwCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJFeHRlbnNp
b25zX0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0
MkdPYmplY3RBUElUZXN0c19UZXN0V2ViRXh0ZW5zaW9uc19MREFERCA9ICQod2Via2l0Ml90ZXN0
c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYkV4dGVuc2lv
bnNfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQy
R09iamVjdEFQSVRlc3RzX1Rlc3RXZWJLaXRXZWJWaWV3R3JvdXBfU09VUkNFUyA9IFwKLSAgICAg
ICAgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZp
ZXdHcm91cC5jcHAKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktpdFdl
YlZpZXdHcm91cF9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKLVByb2dyYW1z
X1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktpdFdlYlZpZXdHcm91cF9MREFERCA9ICQo
d2Via2l0Ml90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVz
dFdlYktpdFdlYlZpZXdHcm91cF9MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCi0K
LVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdERPTU5vZGVfU09VUkNFUyA9IFwK
LSAgICAgICAgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdERPTU5v
ZGUuY3BwCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RET01Ob2RlX0NQUEZM
QUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RB
UElUZXN0c19UZXN0RE9NTm9kZV9MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKLVByb2dy
YW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdERPTU5vZGVfTERGTEFHUyA9ICQod2Via2l0
Ml90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RG
cmFtZV9TT1VSQ0VTID0gXAotICAgICAgICBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9UZXN0RnJhbWUuY3BwCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rl
c3RGcmFtZV9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKLVByb2dyYW1zX1dl
YktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdEZyYW1lX0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xk
YWRkKQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0RnJhbWVfTERGTEFHUyA9
ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRl
c3RzX1Rlc3RBdXRoZW50aWNhdGlvbl9TT1VSQ0VTID0gXAotICAgICAgICBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0QXV0aGVudGljYXRpb24uY3BwCi1Qcm9ncmFt
c19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RBdXRoZW50aWNhdGlvbl9DUFBGTEFHUyA9ICQo
d2Via2l0Ml90ZXN0c19jcHBmbGFncykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNf
VGVzdEF1dGhlbnRpY2F0aW9uX0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQotUHJvZ3Jh
bXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0QXV0aGVudGljYXRpb25fTERGTEFHUyA9ICQo
d2Via2l0Ml90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3Rz
X1Rlc3RVSUNsaWVudF9TT1VSQ0VTID0gXAotICAgICAgICBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9UZXN0VUlDbGllbnQuY3BwCi1Qcm9ncmFtc19XZWJLaXQyR09iamVj
dEFQSVRlc3RzX1Rlc3RVSUNsaWVudF9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFn
cykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFVJQ2xpZW50X0xEQUREID0g
JCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19U
ZXN0VUlDbGllbnRfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQotCi1lbmRpZiAj
IEVOQUJMRV9XRUJLSVQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9JbnNwZWN0b3JUZXN0U2VydmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL0luc3BlY3RvclRlc3RTZXJ2ZXIuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBmMTNiMDQzLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0luc3BlY3RvclRlc3RTZXJ2ZXIuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVs
ZWN0cm9uaWNzIEx0ZC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotICogQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHdlYmtp
dDIvd2Via2l0Mi5oPgotCi1zdGF0aWMgdm9pZCBsb2FkQ2hhbmdlZENhbGxiYWNrKFdlYktpdFdl
YlZpZXcqLCBXZWJLaXRMb2FkRXZlbnQgbG9hZEV2ZW50LCBncG9pbnRlcikKLXsKLSAgICAvLyBT
ZW5kIGEgbWVzc2FnZSB0byB0aGUgcGFyZW50IHByb2Nlc3Mgd2hlbiB3ZSdyZSByZWFkeS4KLSAg
ICBpZiAobG9hZEV2ZW50ID09IFdFQktJVF9MT0FEX0ZJTklTSEVEKQotICAgICAgICBnX3ByaW50
KCJPSyIpOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCi17Ci0gICAgZ3Rr
X2luaXQoJmFyZ2MsICZhcmd2KTsKLQotICAgIC8vIE92ZXJ3cml0ZSBXRUJLSVRfSU5TUEVDVE9S
X1NFUlZFUiB2YXJpYWJsZSB3aXRoIGRlZmF1bHQgdmFsdWUuCi0gICAgZ19zZXRlbnYoIldFQktJ
VF9JTlNQRUNUT1JfU0VSVkVSIiwgIjEyNy4wLjAuMToyOTk5IiwgVFJVRSk7Ci0KLSAgICBXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXco
KSk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfZGV2ZWxvcGVyX2V4dHJhcyh3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdlYlZpZXcpLCBUUlVFKTsKLSAgICB3ZWJraXRfd2Vi
X3ZpZXdfbG9hZF9odG1sKHdlYlZpZXcsCi0gICAgICAgICI8aHRtbD48Ym9keT48cD5XZWJLaXRH
VEsrIEluc3BlY3RvciBUZXN0IFNlcnZlcjwvcD48L2JvZHk+PC9odG1sPiIsCi0gICAgICAgICJo
dHRwOi8vMTI3LjAuMC4xOjI5OTkvIik7Ci0KLSAgICBHdGtXaWRnZXQqIHdpbmRvdyA9IGd0a193
aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOwotICAgIGd0a19jb250YWluZXJfYWRkKEdU
S19DT05UQUlORVIod2luZG93KSwgR1RLX1dJREdFVCh3ZWJWaWV3KSk7Ci0gICAgZ3RrX3dpZGdl
dF9zaG93X2FsbCh3aW5kb3cpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh3aW5kb3csICJkZWxl
dGUtZXZlbnQiLCBHX0NBTExCQUNLKGd0a19tYWluX3F1aXQpLCAwKTsKLSAgICBnX3NpZ25hbF9j
b25uZWN0KHdlYlZpZXcsICJsb2FkLWNoYW5nZWQiLCBHX0NBTExCQUNLKGxvYWRDaGFuZ2VkQ2Fs
bGJhY2spLCAwKTsKLQotICAgIGd0a19tYWluKCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9Mb2FkVHJhY2tpbmdUZXN0LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0xvYWRUcmFja2luZ1Rlc3QuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjM0MjA0Li4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0xvYWRUcmFja2luZ1Rlc3QuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsMjA3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
SWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkxvYWRUcmFja2luZ1Rl
c3QuaCIKLQotI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgotCi1zdGF0aWMgdm9pZCBsb2Fk
Q2hhbmdlZENhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdExvYWRFdmVudCBs
b2FkRXZlbnQsIExvYWRUcmFja2luZ1Rlc3QqIHRlc3QpCi17Ci0gICAgc3dpdGNoIChsb2FkRXZl
bnQpIHsKLSAgICBjYXNlIFdFQktJVF9MT0FEX1NUQVJURUQ6Ci0gICAgICAgIGdfYXNzZXJ0KHdl
YmtpdF93ZWJfdmlld19pc19sb2FkaW5nKHdlYlZpZXcpKTsKLSAgICAgICAgZ19hc3NlcnRfY21w
c3RyKHRlc3QtPm1fYWN0aXZlVVJJLmRhdGEoKSwgPT0sIHdlYmtpdF93ZWJfdmlld19nZXRfdXJp
KHdlYlZpZXcpKTsKLSAgICAgICAgdGVzdC0+cHJvdmlzaW9uYWxMb2FkU3RhcnRlZCgpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIFdFQktJVF9MT0FEX1JFRElSRUNURUQ6Ci0gICAgICAgIGdf
YXNzZXJ0KHdlYmtpdF93ZWJfdmlld19pc19sb2FkaW5nKHdlYlZpZXcpKTsKLSAgICAgICAgdGVz
dC0+bV9hY3RpdmVVUkkgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSh3ZWJWaWV3KTsKLSAgICAg
ICAgaWYgKCF0ZXN0LT5tX3JlZGlyZWN0VVJJLmlzTnVsbCgpKQotICAgICAgICAgICAgZ19hc3Nl
cnRfY21wc3RyKHRlc3QtPm1fcmVkaXJlY3RVUkkuZGF0YSgpLCA9PSwgdGVzdC0+bV9hY3RpdmVV
UkkuZGF0YSgpKTsKLSAgICAgICAgdGVzdC0+cHJvdmlzaW9uYWxMb2FkUmVjZWl2ZWRTZXJ2ZXJS
ZWRpcmVjdCgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdFQktJVF9MT0FEX0NPTU1JVFRF
RDogewotICAgICAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfaXNfbG9hZGluZyh3ZWJWaWV3
KSk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXN0LT5tX2FjdGl2ZVVSSS5kYXRhKCksID09
LCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSh3ZWJWaWV3KSk7Ci0KLSAgICAgICAgLy8gQ2hlY2sg
dGhhdCBvbiBjb21taXR0ZWQgd2UgYWx3YXlzIGhhdmUgYSBtYWluIHJlc291cmNlIHdpdGggYSBy
ZXNwb25zZS4KLSAgICAgICAgV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlID0gd2Via2l0X3dl
Yl92aWV3X2dldF9tYWluX3Jlc291cmNlKHdlYlZpZXcpOwotICAgICAgICBnX2Fzc2VydChyZXNv
dXJjZSk7Ci0gICAgICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3Jlc3BvbnNl
KHJlc291cmNlKSk7Ci0KLSAgICAgICAgdGVzdC0+bG9hZENvbW1pdHRlZCgpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgY2FzZSBXRUJLSVRfTE9BRF9GSU5JU0hFRDoKLSAgICAgICAgZ19h
c3NlcnQoIXdlYmtpdF93ZWJfdmlld19pc19sb2FkaW5nKHdlYlZpZXcpKTsKLSAgICAgICAgaWYg
KCF0ZXN0LT5tX2xvYWRGYWlsZWQpCi0gICAgICAgICAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+
bV9hY3RpdmVVUkkuZGF0YSgpLCA9PSwgd2Via2l0X3dlYl92aWV3X2dldF91cmkod2ViVmlldykp
OwotICAgICAgICB0ZXN0LT5sb2FkRmluaXNoZWQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICB9Ci19Ci0KLXN0YXRp
YyB2b2lkIGxvYWRGYWlsZWRDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRM
b2FkRXZlbnQgbG9hZEV2ZW50LCBjb25zdCBjaGFyKiBmYWlsaW5nVVJJLCBHRXJyb3IqIGVycm9y
LCBMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0KQotewotICAgIHRlc3QtPm1fbG9hZEZhaWxlZCA9IHRy
dWU7Ci0gICAgdGVzdC0+bV9lcnJvci5zZXQoZ19lcnJvcl9jb3B5KGVycm9yKSk7Ci0KLSAgICBz
d2l0Y2ggKGxvYWRFdmVudCkgewotICAgIGNhc2UgV0VCS0lUX0xPQURfU1RBUlRFRDoKLSAgICAg
ICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19pc19sb2FkaW5nKHdlYlZpZXcpKTsKLSAgICAg
ICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPm1fYWN0aXZlVVJJLmRhdGEoKSwgPT0sIHdlYmtpdF93
ZWJfdmlld19nZXRfdXJpKHdlYlZpZXcpKTsKLSAgICAgICAgZ19hc3NlcnQoZXJyb3IpOwotICAg
ICAgICB0ZXN0LT5wcm92aXNpb25hbExvYWRGYWlsZWQoZmFpbGluZ1VSSSwgZXJyb3IpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIFdFQktJVF9MT0FEX0NPTU1JVFRFRDoKLSAgICAgICAgZ19h
c3NlcnQoIXdlYmtpdF93ZWJfdmlld19pc19sb2FkaW5nKHdlYlZpZXcpKTsKLSAgICAgICAgZ19h
c3NlcnRfY21wc3RyKHRlc3QtPm1fYWN0aXZlVVJJLmRhdGEoKSwgPT0sIHdlYmtpdF93ZWJfdmll
d19nZXRfdXJpKHdlYlZpZXcpKTsKLSAgICAgICAgZ19hc3NlcnQoZXJyb3IpOwotICAgICAgICB0
ZXN0LT5sb2FkRmFpbGVkKGZhaWxpbmdVUkksIGVycm9yKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICB9Ci19Ci0KLXN0
YXRpYyB2b2lkIGVzdGltYXRlZFByb2dyZXNzQ2hhbmdlZENhbGxiYWNrKEdPYmplY3QqLCBHUGFy
YW1TcGVjKiwgTG9hZFRyYWNraW5nVGVzdCogdGVzdCkKLXsKLSAgICB0ZXN0LT5lc3RpbWF0ZWRQ
cm9ncmVzc0NoYW5nZWQoKTsKLX0KLQotTG9hZFRyYWNraW5nVGVzdDo6TG9hZFRyYWNraW5nVGVz
dCgpCi0gICAgOiBtX3J1bkxvYWRVbnRpbENvbXBsZXRpb24oZmFsc2UpCi0gICAgLCBtX2xvYWRG
YWlsZWQoZmFsc2UpCi17Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJsb2FkLWNo
YW5nZWQiLCBHX0NBTExCQUNLKGxvYWRDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX3Np
Z25hbF9jb25uZWN0KG1fd2ViVmlldywgImxvYWQtZmFpbGVkIiwgR19DQUxMQkFDSyhsb2FkRmFp
bGVkQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgIm5v
dGlmeTo6ZXN0aW1hdGVkLWxvYWQtcHJvZ3Jlc3MiLCBHX0NBTExCQUNLKGVzdGltYXRlZFByb2dy
ZXNzQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7Ci0KLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92
aWV3X2dldF91cmkobV93ZWJWaWV3KSk7Ci19Ci0KLUxvYWRUcmFja2luZ1Rlc3Q6On5Mb2FkVHJh
Y2tpbmdUZXN0KCkKLXsKLSAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQo
bV93ZWJWaWV3LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKLX0KLQot
dm9pZCBMb2FkVHJhY2tpbmdUZXN0Ojp3YWl0VW50aWxMb2FkRmluaXNoZWQoKQotewotICAgIG1f
ZXN0aW1hdGVkUHJvZ3Jlc3MgPSAwOwotICAgIG1fcnVuTG9hZFVudGlsQ29tcGxldGlvbiA9IHRy
dWU7Ci0gICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotfQotCi12b2lkIExvYWRUcmFj
a2luZ1Rlc3Q6OnByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQoKQotewotICAgIG1fbG9hZEV2ZW50cy5h
cHBlbmQoUHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7Ci19Ci0KLXZvaWQgTG9hZFRyYWNraW5nVGVz
dDo6cHJvdmlzaW9uYWxMb2FkUmVjZWl2ZWRTZXJ2ZXJSZWRpcmVjdCgpCi17Ci0gICAgbV9sb2Fk
RXZlbnRzLmFwcGVuZChQcm92aXNpb25hbExvYWRSZWNlaXZlZFNlcnZlclJlZGlyZWN0KTsKLX0K
LQotdm9pZCBMb2FkVHJhY2tpbmdUZXN0Ojpwcm92aXNpb25hbExvYWRGYWlsZWQoY29uc3QgZ2No
YXIqIGZhaWxpbmdVUkksIEdFcnJvciogZXJyb3IpCi17Ci0gICAgbV9sb2FkRXZlbnRzLmFwcGVu
ZChQcm92aXNpb25hbExvYWRGYWlsZWQpOwotfQotCi12b2lkIExvYWRUcmFja2luZ1Rlc3Q6Omxv
YWRDb21taXR0ZWQoKQotewotICAgIG1fbG9hZEV2ZW50cy5hcHBlbmQoTG9hZENvbW1pdHRlZCk7
Ci19Ci0KLXZvaWQgTG9hZFRyYWNraW5nVGVzdDo6bG9hZEZpbmlzaGVkKCkKLXsKLSAgICBtX2xv
YWRFdmVudHMuYXBwZW5kKExvYWRGaW5pc2hlZCk7Ci0gICAgaWYgKG1fcnVuTG9hZFVudGlsQ29t
cGxldGlvbikKLSAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX21haW5Mb29wKTsKLX0KLQotdm9p
ZCBMb2FkVHJhY2tpbmdUZXN0Ojpsb2FkRmFpbGVkKGNvbnN0IGdjaGFyKiBmYWlsaW5nVVJJLCBH
RXJyb3IqIGVycm9yKQotewotICAgIG1fbG9hZEV2ZW50cy5hcHBlbmQoTG9hZEZhaWxlZCk7Ci19
Ci0KLXZvaWQgTG9hZFRyYWNraW5nVGVzdDo6ZXN0aW1hdGVkUHJvZ3Jlc3NDaGFuZ2VkKCkKLXsK
LSAgICBkb3VibGUgcHJvZ3Jlc3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2VzdGltYXRlZF9sb2Fk
X3Byb2dyZXNzKG1fd2ViVmlldyk7Ci0gICAgZ19hc3NlcnRfY21wZmxvYXQobV9lc3RpbWF0ZWRQ
cm9ncmVzcywgPCwgcHJvZ3Jlc3MpOwotICAgIG1fZXN0aW1hdGVkUHJvZ3Jlc3MgPSBwcm9ncmVz
czsKLX0KLQotdm9pZCBMb2FkVHJhY2tpbmdUZXN0Ojpsb2FkVVJJKGNvbnN0IGNoYXIqIHVyaSkK
LXsKLSAgICBtX2xvYWRFdmVudHMuY2xlYXIoKTsKLSAgICBtX2VzdGltYXRlZFByb2dyZXNzID0g
MDsKLSAgICBtX2Vycm9yLmNsZWFyKCk7Ci0gICAgV2ViVmlld1Rlc3Q6OmxvYWRVUkkodXJpKTsK
LX0KLQotdm9pZCBMb2FkVHJhY2tpbmdUZXN0Ojpsb2FkSHRtbChjb25zdCBjaGFyKiBodG1sLCBj
b25zdCBjaGFyKiBiYXNlVVJJKQotewotICAgIG1fbG9hZEV2ZW50cy5jbGVhcigpOwotICAgIG1f
ZXN0aW1hdGVkUHJvZ3Jlc3MgPSAwOwotICAgIG1fZXJyb3IuY2xlYXIoKTsKLSAgICBXZWJWaWV3
VGVzdDo6bG9hZEh0bWwoaHRtbCwgYmFzZVVSSSk7Ci19Ci0KLXZvaWQgTG9hZFRyYWNraW5nVGVz
dDo6bG9hZFBsYWluVGV4dChjb25zdCBjaGFyKiBwbGFpblRleHQpCi17Ci0gICAgbV9sb2FkRXZl
bnRzLmNsZWFyKCk7Ci0gICAgbV9lc3RpbWF0ZWRQcm9ncmVzcyA9IDA7Ci0gICAgbV9lcnJvci5j
bGVhcigpOwotICAgIFdlYlZpZXdUZXN0Ojpsb2FkUGxhaW5UZXh0KHBsYWluVGV4dCk7Ci19Ci0K
LXZvaWQgTG9hZFRyYWNraW5nVGVzdDo6bG9hZFJlcXVlc3QoV2ViS2l0VVJJUmVxdWVzdCogcmVx
dWVzdCkKLXsKLSAgICBtX2xvYWRFdmVudHMuY2xlYXIoKTsKLSAgICBtX2VzdGltYXRlZFByb2dy
ZXNzID0gMDsKLSAgICBtX2Vycm9yLmNsZWFyKCk7Ci0gICAgV2ViVmlld1Rlc3Q6OmxvYWRSZXF1
ZXN0KHJlcXVlc3QpOwotfQotCi12b2lkIExvYWRUcmFja2luZ1Rlc3Q6OnJlbG9hZCgpCi17Ci0g
ICAgbV9sb2FkRXZlbnRzLmNsZWFyKCk7Ci0gICAgbV9lc3RpbWF0ZWRQcm9ncmVzcyA9IDA7Ci0g
ICAgbV9lcnJvci5jbGVhcigpOwotICAgIHdlYmtpdF93ZWJfdmlld19yZWxvYWQobV93ZWJWaWV3
KTsKLX0KLQotdm9pZCBMb2FkVHJhY2tpbmdUZXN0Ojpnb0JhY2soKQotewotICAgIG1fbG9hZEV2
ZW50cy5jbGVhcigpOwotICAgIG1fZXN0aW1hdGVkUHJvZ3Jlc3MgPSAwOwotICAgIG1fZXJyb3Iu
Y2xlYXIoKTsKLSAgICBXZWJWaWV3VGVzdDo6Z29CYWNrKCk7Ci19Ci0KLXZvaWQgTG9hZFRyYWNr
aW5nVGVzdDo6Z29Gb3J3YXJkKCkKLXsKLSAgICBtX2xvYWRFdmVudHMuY2xlYXIoKTsKLSAgICBt
X2VzdGltYXRlZFByb2dyZXNzID0gMDsKLSAgICBtX2Vycm9yLmNsZWFyKCk7Ci0gICAgV2ViVmll
d1Rlc3Q6OmdvRm9yd2FyZCgpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvTG9hZFRyYWNraW5nVGVzdC5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvdGVzdHMvTG9hZFRyYWNraW5nVGVzdC5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBhM2NmNzg0Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL0xvYWRUcmFja2luZ1Rlc3QuaAorKysgL2Rldi9udWxsCkBAIC0x
LDY4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRl
ZiBMb2FkVHJhY2tpbmdUZXN0X2gKLSNkZWZpbmUgTG9hZFRyYWNraW5nVGVzdF9oCi0KLSNpbmNs
dWRlICJUZXN0TWFpbi5oIgotI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCi0jaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgotCi1jbGFzcyBMb2FkVHJhY2tpbmdUZXN0IDogcHVibGljIFdlYlZpZXdUZXN0
IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKExvYWRUcmFja2luZ1Rlc3Qp
OwotICAgIExvYWRUcmFja2luZ1Rlc3QoKTsKLSAgICB2aXJ0dWFsIH5Mb2FkVHJhY2tpbmdUZXN0
KCk7Ci0gICAgdm9pZCB3YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIHZpcnR1YWwgdm9p
ZCBwcm92aXNpb25hbExvYWRTdGFydGVkKCk7Ci0gICAgdmlydHVhbCB2b2lkIHByb3Zpc2lvbmFs
TG9hZFJlY2VpdmVkU2VydmVyUmVkaXJlY3QoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcHJvdmlzaW9u
YWxMb2FkRmFpbGVkKGNvbnN0IGdjaGFyKiBmYWlsaW5nVVJJLCBHRXJyb3IqKTsKLSAgICB2aXJ0
dWFsIHZvaWQgbG9hZENvbW1pdHRlZCgpOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkRmluaXNoZWQo
KTsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZEZhaWxlZChjb25zdCBjaGFyKiBmYWlsaW5nVVJJLCBH
RXJyb3IqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZXN0aW1hdGVkUHJvZ3Jlc3NDaGFuZ2VkKCk7Ci0K
LSAgICB2b2lkIGxvYWRVUkkoY29uc3QgY2hhciogdXJpKTsKLSAgICB2b2lkIGxvYWRIdG1sKGNv
bnN0IGNoYXIqIGh0bWwsIGNvbnN0IGNoYXIqIGJhc2VVUkkpOwotICAgIHZvaWQgbG9hZFBsYWlu
VGV4dChjb25zdCBjaGFyKiBwbGFpblRleHQpOwotICAgIHZvaWQgbG9hZFJlcXVlc3QoV2ViS2l0
VVJJUmVxdWVzdCopOwotICAgIHZvaWQgcmVsb2FkKCk7Ci0gICAgdm9pZCBnb0JhY2soKTsKLSAg
ICB2b2lkIGdvRm9yd2FyZCgpOwotCi0gICAgdm9pZCBzZXRSZWRpcmVjdFVSSShjb25zdCBjaGFy
KiB1cmkpIHsgbV9yZWRpcmVjdFVSSSA9IHVyaTsgfQotCi0gICAgZW51bSBMb2FkRXZlbnRzIHsK
LSAgICAgICAgUHJvdmlzaW9uYWxMb2FkU3RhcnRlZCwKLSAgICAgICAgUHJvdmlzaW9uYWxMb2Fk
UmVjZWl2ZWRTZXJ2ZXJSZWRpcmVjdCwKLSAgICAgICAgUHJvdmlzaW9uYWxMb2FkRmFpbGVkLAot
ICAgICAgICBMb2FkQ29tbWl0dGVkLAotICAgICAgICBMb2FkRmluaXNoZWQsCi0gICAgICAgIExv
YWRGYWlsZWQKLSAgICB9OwotICAgIGJvb2wgbV9ydW5Mb2FkVW50aWxDb21wbGV0aW9uOwotICAg
IGJvb2wgbV9sb2FkRmFpbGVkOwotICAgIEdPd25QdHI8R0Vycm9yPiBtX2Vycm9yOwotICAgIFZl
Y3RvcjxMb2FkRXZlbnRzPiBtX2xvYWRFdmVudHM7Ci0gICAgZmxvYXQgbV9lc3RpbWF0ZWRQcm9n
cmVzczsKLSAgICBDU3RyaW5nIG1fcmVkaXJlY3RVUkk7Ci19OwotCi0jZW5kaWYgLy8gTG9hZFRy
YWNraW5nVGVzdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9UZXN0QXV0aGVudGljYXRpb24uY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvVGVzdEF1dGhlbnRpY2F0aW9uLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZWRlNDIyNS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9UZXN0QXV0aGVudGljYXRpb24uY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMjg2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJMb2FkVHJhY2tpbmdUZXN0LmgiCi0jaW5jbHVk
ZSAiV2ViS2l0VGVzdFNlcnZlci5oIgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4K
LQotc3RhdGljIFdlYktpdFRlc3RTZXJ2ZXIqIGtTZXJ2ZXI7Ci0KLWNsYXNzIEF1dGhlbnRpY2F0
aW9uVGVzdDogcHVibGljIExvYWRUcmFja2luZ1Rlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJ
Ql9URVNUX0ZJWFRVUkUoQXV0aGVudGljYXRpb25UZXN0KTsKLQotICAgIEF1dGhlbnRpY2F0aW9u
VGVzdCgpCi0gICAgewotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImF1dGhl
bnRpY2F0ZSIsIEdfQ0FMTEJBQ0socnVuQXV0aGVudGljYXRpb25DYWxsYmFjayksIHRoaXMpOwot
ICAgIH0KLQotICAgIH5BdXRoZW50aWNhdGlvblRlc3QoKQotICAgIHsKLSAgICAgICAgZ19zaWdu
YWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fd2ViVmlldywgR19TSUdOQUxfTUFUQ0hf
REFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7Ci0gICAgfQotCi0gICAgc3RhdGljIGludCBhdXRoZW50
aWNhdGlvblJldHJpZXM7Ci0gICAgc3RhdGljIGJvb2wgYXV0aGVudGljYXRpb25DYW5jZWxsZWRS
ZWNlaXZlZDsKLQotICAgIHZvaWQgbG9hZFVSSShjb25zdCBjaGFyKiB1cmkpCi0gICAgewotICAg
ICAgICAvLyBSZXNldCB0aGUgcmV0cnkgY291bnQgb2YgdGhlIGZha2Ugc2VydmVyIHdoZW4gYSBw
YWdlIGlzIGxvYWRlZC4KLSAgICAgICAgYXV0aGVudGljYXRpb25SZXRyaWVzID0gMDsKLSAgICAg
ICAgYXV0aGVudGljYXRpb25DYW5jZWxsZWRSZWNlaXZlZCA9IGZhbHNlOwotICAgICAgICBMb2Fk
VHJhY2tpbmdUZXN0Ojpsb2FkVVJJKHVyaSk7Ci0gICAgfQotCi0gICAgc3RhdGljIGdib29sZWFu
IHJ1bkF1dGhlbnRpY2F0aW9uQ2FsbGJhY2soV2ViS2l0V2ViVmlldyosIFdlYktpdEF1dGhlbnRp
Y2F0aW9uUmVxdWVzdCogcmVxdWVzdCwgQXV0aGVudGljYXRpb25UZXN0KiB0ZXN0KQotICAgIHsK
LSAgICAgICAgZ19zaWduYWxfY29ubmVjdChyZXF1ZXN0LCAiY2FuY2VsbGVkIiwgR19DQUxMQkFD
SyhhdXRoZW50aWNhdGlvbkNhbmNlbGxlZENhbGxiYWNrKSwgdGVzdCk7Ci0gICAgICAgIHRlc3Qt
PnJ1bkF1dGhlbnRpY2F0aW9uKHJlcXVlc3QpOwotICAgICAgICByZXR1cm4gVFJVRTsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgdm9pZCBhdXRoZW50aWNhdGlvbkNhbmNlbGxlZENhbGxiYWNrKFdlYktp
dEF1dGhlbnRpY2F0aW9uUmVxdWVzdCosIEF1dGhlbnRpY2F0aW9uVGVzdCopCi0gICAgewotICAg
ICAgICBhdXRoZW50aWNhdGlvbkNhbmNlbGxlZFJlY2VpdmVkID0gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICB2b2lkIHJ1bkF1dGhlbnRpY2F0aW9uKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVx
dWVzdCkKLSAgICB7Ci0gICAgICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNo
ZXMoR19PQkpFQ1QocmVxdWVzdCkpOwotICAgICAgICBtX2F1dGhlbnRpY2F0aW9uUmVxdWVzdCA9
IHJlcXVlc3Q7Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7Ci0gICAgfQot
Ci0gICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiB3YWl0Rm9yQXV0aGVudGljYXRpb25S
ZXF1ZXN0KCkKLSAgICB7Ci0gICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAg
ICAgICAgcmV0dXJuIG1fYXV0aGVudGljYXRpb25SZXF1ZXN0LmdldCgpOwotICAgIH0KLQotcHJp
dmF0ZToKLSAgICBHUmVmUHRyPFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdD4gbV9hdXRoZW50
aWNhdGlvblJlcXVlc3Q7Ci19OwotCi1pbnQgQXV0aGVudGljYXRpb25UZXN0OjphdXRoZW50aWNh
dGlvblJldHJpZXMgPSAwOwotYm9vbCBBdXRoZW50aWNhdGlvblRlc3Q6OmF1dGhlbnRpY2F0aW9u
Q2FuY2VsbGVkUmVjZWl2ZWQgPSBmYWxzZTsKLQotc3RhdGljIGNvbnN0IGNoYXIgYXV0aFRlc3RV
c2VybmFtZVtdID0gInVzZXJuYW1lIjsKLXN0YXRpYyBjb25zdCBjaGFyIGF1dGhUZXN0UGFzc3dv
cmRbXSA9ICJwYXNzd29yZCI7Ci1zdGF0aWMgY29uc3QgY2hhciBhdXRoRXhwZWN0ZWRTdWNjZXNz
VGl0bGVbXSA9ICJXZWJLaXQyR3RrKyBBdXRoZW50aWNhdGlvbiB0ZXN0IjsKLXN0YXRpYyBjb25z
dCBjaGFyIGF1dGhFeHBlY3RlZEZhaWx1cmVUaXRsZVtdID0gIjQwMSBBdXRob3JpemF0aW9uIFJl
cXVpcmVkIjsKLXN0YXRpYyBjb25zdCBjaGFyIGF1dGhFeHBlY3RlZEF1dGhvcml6YXRpb25bXSA9
ICJCYXNpYyBkWE5sY201aGJXVTZjR0Z6YzNkdmNtUT0iOyAvLyBCYXNlNjQgZW5jb2Rpbmcgb2Yg
InVzZXJuYW1lOnBhc3N3b3JkIi4KLXN0YXRpYyBjb25zdCBjaGFyIGF1dGhTdWNjZXNzSFRNTFN0
cmluZ1tdID0KLSAgICAiPGh0bWw+IgotICAgICI8aGVhZD48dGl0bGU+V2ViS2l0Mkd0aysgQXV0
aGVudGljYXRpb24gdGVzdDwvdGl0bGU+PC9oZWFkPiIKLSAgICAiPGJvZHk+PC9ib2R5PjwvaHRt
bD4iOwotc3RhdGljIGNvbnN0IGNoYXIgYXV0aEZhaWx1cmVIVE1MU3RyaW5nW10gPQotICAgICI8
aHRtbD4iCi0gICAgIjxoZWFkPjx0aXRsZT40MDEgQXV0aG9yaXphdGlvbiBSZXF1aXJlZDwvdGl0
bGU+PC9oZWFkPiIKLSAgICAiPGJvZHk+PC9ib2R5PjwvaHRtbD4iOwotCi1zdGF0aWMgdm9pZCB0
ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uUmVxdWVzdChBdXRoZW50aWNhdGlvblRlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIpCi17Ci0gICAgLy8gVGVzdCBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IGdl
dHRlcnMgbWF0Y2ggc291cCBhdXRoZW50aWNhdGlvbiBoZWFkZXIuCi0gICAgdGVzdC0+bG9hZFVS
SShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvYXV0aC10ZXN0Lmh0bWwiKS5kYXRhKCkpOwotICAg
IFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCA9IHRlc3QtPndhaXRGb3JBdXRo
ZW50aWNhdGlvblJlcXVlc3QoKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2F1dGhlbnRp
Y2F0aW9uX3JlcXVlc3RfZ2V0X2hvc3QocmVxdWVzdCksID09LCBzb3VwX3VyaV9nZXRfaG9zdChr
U2VydmVyLT5iYXNlVVJJKCkpKTsKLSAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9hdXRoZW50
aWNhdGlvbl9yZXF1ZXN0X2dldF9wb3J0KHJlcXVlc3QpLCA9PSwgc291cF91cmlfZ2V0X3BvcnQo
a1NlcnZlci0+YmFzZVVSSSgpKSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9hdXRoZW50
aWNhdGlvbl9yZXF1ZXN0X2dldF9yZWFsbShyZXF1ZXN0KSwgPT0sICJteSByZWFsbSIpOwotICAg
IGdfYXNzZXJ0KHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9zY2hlbWUocmVxdWVz
dCkgPT0gV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1NDSEVNRV9IVFRQX0JBU0lDKTsKLSAgICBnX2Fz
c2VydCghd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfaXNfZm9yX3Byb3h5KHJlcXVlc3Qp
KTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfaXNfcmV0cnko
cmVxdWVzdCkpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uQ2Fu
Y2VsKEF1dGhlbnRpY2F0aW9uVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICAvLyBU
ZXN0IGNhbmNlbC4KLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9h
dXRoLXRlc3QuaHRtbCIpLmRhdGEoKSk7Ci0gICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0
KiByZXF1ZXN0ID0gdGVzdC0+d2FpdEZvckF1dGhlbnRpY2F0aW9uUmVxdWVzdCgpOwotICAgIHdl
YmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2NhbmNlbChyZXF1ZXN0KTsKLSAgICAvLyBTZXJ2
ZXIgZG9lc24ndCBhc2sgZm9yIG5ldyBjcmVkZW50aWFscy4KLSAgICB0ZXN0LT53YWl0VW50aWxM
b2FkRmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHMu
c2l6ZSgpLCA9PSwgMyk7Ci0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1sw
XSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOwotICAgIGdf
YXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0
OjpQcm92aXNpb25hbExvYWRGYWlsZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xv
YWRFdmVudHNbMl0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOwotCi0gICAg
Z19hc3NlcnRfZXJyb3IodGVzdC0+bV9lcnJvci5nZXQoKSwgV0VCS0lUX05FVFdPUktfRVJST1Is
IFdFQktJVF9ORVRXT1JLX0VSUk9SX0NBTkNFTExFRCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RX
ZWJWaWV3QXV0aGVudGljYXRpb25Mb2FkQ2FuY2VsbGVkKEF1dGhlbnRpY2F0aW9uVGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZv
clBhdGgoIi9hdXRoLXRlc3QuaHRtbCIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdEZvckF1dGhl
bnRpY2F0aW9uUmVxdWVzdCgpOwotICAgIHdlYmtpdF93ZWJfdmlld19zdG9wX2xvYWRpbmcodGVz
dC0+bV93ZWJWaWV3KTsKLSAgICAvLyBFeHBlY3QgZW1wdHkgcGFnZS4KLSAgICB0ZXN0LT53YWl0
VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5hdXRoZW50aWNhdGlvbkNh
bmNlbGxlZFJlY2VpdmVkKTsKLQotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVu
dHMuc2l6ZSgpLCA9PSwgMyk7Ci0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50
c1swXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOwotICAg
IGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdU
ZXN0OjpQcm92aXNpb25hbExvYWRGYWlsZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5t
X2xvYWRFdmVudHNbMl0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOwotCi0g
ICAgZ19hc3NlcnRfZXJyb3IodGVzdC0+bV9lcnJvci5nZXQoKSwgV0VCS0lUX05FVFdPUktfRVJS
T1IsIFdFQktJVF9ORVRXT1JLX0VSUk9SX0NBTkNFTExFRCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRl
c3RXZWJWaWV3QXV0aGVudGljYXRpb25GYWlsdXJlKEF1dGhlbnRpY2F0aW9uVGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKLXsKLSAgICAvLyBUZXN0IGF1dGhlbnRpY2F0aW9uIGZhaWx1cmVzLgot
ICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2F1dGgtdGVzdC5odG1s
IikuZGF0YSgpKTsKLSAgICBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QgPSB0
ZXN0LT53YWl0Rm9yQXV0aGVudGljYXRpb25SZXF1ZXN0KCk7Ci0gICAgZ19hc3NlcnQoIXdlYmtp
dF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2lzX3JldHJ5KHJlcXVlc3QpKTsKLSAgICBXZWJLaXRD
cmVkZW50aWFsKiBjcmVkZW50aWFsID0gd2Via2l0X2NyZWRlbnRpYWxfbmV3KGF1dGhUZXN0VXNl
cm5hbWUsICJ3cm9uZ3Bhc3N3b3JkIiwgV0VCS0lUX0NSRURFTlRJQUxfUEVSU0lTVEVOQ0VfTk9O
RSk7Ci0gICAgd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfYXV0aGVudGljYXRlKHJlcXVl
c3QsIGNyZWRlbnRpYWwpOwotICAgIHdlYmtpdF9jcmVkZW50aWFsX2ZyZWUoY3JlZGVudGlhbCk7
Ci0gICAgLy8gRXhwZWN0IGEgc2Vjb25kIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QuCi0gICAgcmVx
dWVzdCA9IHRlc3QtPndhaXRGb3JBdXRoZW50aWNhdGlvblJlcXVlc3QoKTsKLSAgICBnX2Fzc2Vy
dCh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9pc19yZXRyeShyZXF1ZXN0KSk7Ci0gICAg
Ly8gVGVzdCBzZWNvbmQgZmFpbHVyZS4KLSAgICBjcmVkZW50aWFsID0gd2Via2l0X2NyZWRlbnRp
YWxfbmV3KGF1dGhUZXN0VXNlcm5hbWUsICJ3cm9uZ3Bhc3N3b3JkMiIsIFdFQktJVF9DUkVERU5U
SUFMX1BFUlNJU1RFTkNFX05PTkUpOwotICAgIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0
X2F1dGhlbnRpY2F0ZShyZXF1ZXN0LCBjcmVkZW50aWFsKTsKLSAgICB3ZWJraXRfY3JlZGVudGlh
bF9mcmVlKGNyZWRlbnRpYWwpOwotICAgIC8vIEV4cGVjdCBhdXRoZW50aWNhdGlvbiBmYWlsZWQg
cGFnZS4KLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0
X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHMuc2l6ZSgpLCA9PSwgMyk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1swXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zp
c2lvbmFsTG9hZFN0YXJ0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVu
dHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkQ29tbWl0dGVkKTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9h
ZEZpbmlzaGVkKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dldF90aXRs
ZSh0ZXN0LT5tX3dlYlZpZXcpLCA9PSwgYXV0aEV4cGVjdGVkRmFpbHVyZVRpdGxlKTsKLX0KLQot
c3RhdGljIHZvaWQgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvbk5vQ3JlZGVudGlhbChBdXRoZW50
aWNhdGlvblRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgLy8gVGVzdCBjb250aW51
ZSB3aXRob3V0IGNyZWRlbnRpYWxzLgotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJ
Rm9yUGF0aCgiL2F1dGgtdGVzdC5odG1sIikuZGF0YSgpKTsKLSAgICBXZWJLaXRBdXRoZW50aWNh
dGlvblJlcXVlc3QqIHJlcXVlc3QgPSB0ZXN0LT53YWl0Rm9yQXV0aGVudGljYXRpb25SZXF1ZXN0
KCk7Ci0gICAgd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfYXV0aGVudGljYXRlKHJlcXVl
c3QsIDApOwotICAgIC8vIFNlcnZlciBkb2Vzbid0IGFzayBmb3IgbmV3IGNyZWRlbnRpYWxzLgot
ICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3NlcnRfY21waW50
KHRlc3QtPm1fbG9hZEV2ZW50cy5zaXplKCksID09LCAzKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
dGVzdC0+bV9sb2FkRXZlbnRzWzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxM
b2FkU3RhcnRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1sxXSwg
PT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRDb21taXR0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGlu
dCh0ZXN0LT5tX2xvYWRFdmVudHNbMl0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNo
ZWQpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3RpdGxlKHRlc3Qt
Pm1fd2ViVmlldyksID09LCBhdXRoRXhwZWN0ZWRGYWlsdXJlVGl0bGUpOwotfQotCi1zdGF0aWMg
dm9pZCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uU3RvcmFnZShBdXRoZW50aWNhdGlvblRlc3Qq
IHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgLy8gRW5hYmxlIHByaXZhdGUgYnJvd3Npbmcg
YmVmb3JlIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QgdG8gdGVzdCB0aGF0IGNyZWRlbnRpYWxzIGNh
bid0IGJlIHNhdmVkLgotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX3ByaXZhdGVfYnJv
d3Npbmcod2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh0ZXN0LT5tX3dlYlZpZXcpLCBUUlVF
KTsKLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9hdXRoLXRlc3Qu
aHRtbCIpLmRhdGEoKSk7Ci0gICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0
ID0gdGVzdC0+d2FpdEZvckF1dGhlbnRpY2F0aW9uUmVxdWVzdCgpOwotICAgIGdfYXNzZXJ0KCF3
ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcHJvcG9zZWRfY3JlZGVudGlhbChyZXF1
ZXN0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2Nhbl9z
YXZlX2NyZWRlbnRpYWxzKHJlcXVlc3QpKTsKLQotICAgIC8vIElmIFdlYktpdCBoYXMgYmVlbiBj
b21waWxlZCB3aXRoIGxpYnNlY3JldCwgYW5kIHByaXZhdGUgYnJvd3NpbmcgaXMgZGlzYWJsZWQK
LSAgICAvLyB0aGVuIGNoZWNrIHRoYXQgY3JlZGVudGlhbHMgY2FuIGJlIHNhdmVkLgotI2lmIEVO
QUJMRShDUkVERU5USUFMX1NUT1JBR0UpCi0gICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVf
cHJpdmF0ZV9icm93c2luZyh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHRlc3QtPm1fd2Vi
VmlldyksIEZBTFNFKTsKLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgo
Ii9hdXRoLXRlc3QuaHRtbCIpLmRhdGEoKSk7Ci0gICAgcmVxdWVzdCA9IHRlc3QtPndhaXRGb3JB
dXRoZW50aWNhdGlvblJlcXVlc3QoKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2F1dGhlbnRpY2F0
aW9uX3JlcXVlc3RfZ2V0X3Byb3Bvc2VkX2NyZWRlbnRpYWwocmVxdWVzdCkpOwotICAgIGdfYXNz
ZXJ0KHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2Nhbl9zYXZlX2NyZWRlbnRpYWxzKHJl
cXVlc3QpKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0
aW9uU3VjY2VzcyhBdXRoZW50aWNhdGlvblRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0g
ICAgLy8gVGVzdCBjb3JyZWN0IGF1dGhlbnRpY2F0aW9uLgotICAgIHRlc3QtPmxvYWRVUkkoa1Nl
cnZlci0+Z2V0VVJJRm9yUGF0aCgiL2F1dGgtdGVzdC5odG1sIikuZGF0YSgpKTsKLSAgICBXZWJL
aXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QgPSB0ZXN0LT53YWl0Rm9yQXV0aGVudGlj
YXRpb25SZXF1ZXN0KCk7Ci0gICAgV2ViS2l0Q3JlZGVudGlhbCogY3JlZGVudGlhbCA9IHdlYmtp
dF9jcmVkZW50aWFsX25ldyhhdXRoVGVzdFVzZXJuYW1lLCBhdXRoVGVzdFBhc3N3b3JkLCBXRUJL
SVRfQ1JFREVOVElBTF9QRVJTSVNURU5DRV9GT1JfU0VTU0lPTik7Ci0gICAgd2Via2l0X2F1dGhl
bnRpY2F0aW9uX3JlcXVlc3RfYXV0aGVudGljYXRlKHJlcXVlc3QsIGNyZWRlbnRpYWwpOwotICAg
IHdlYmtpdF9jcmVkZW50aWFsX2ZyZWUoY3JlZGVudGlhbCk7Ci0gICAgdGVzdC0+d2FpdFVudGls
TG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRz
LnNpemUoKSwgPT0sIDMpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNb
MF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsKLSAgICBn
X2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVz
dDo6TG9hZENvbW1pdHRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50
c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7Ci0gICAgZ19hc3NlcnRf
Y21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRfdGl0bGUodGVzdC0+bV93ZWJWaWV3KSwgPT0sIGF1
dGhFeHBlY3RlZFN1Y2Nlc3NUaXRsZSk7Ci0KLSAgICAvLyBUZXN0IGxvYWRpbmcgdGhlIHNhbWUg
KGF1dGhvcml6ZWQpIHBhZ2UgYWdhaW4uCi0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRV
UklGb3JQYXRoKCIvYXV0aC10ZXN0Lmh0bWwiKS5kYXRhKCkpOwotICAgIC8vIFRoZXJlIGlzIG5v
IGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZS4KLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNo
ZWQoKTsKLQotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHMuc2l6ZSgpLCA9
PSwgMyk7Ci0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1swXSwgPT0sIExv
YWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOwotICAgIGdfYXNzZXJ0X2Nt
cGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkQ29t
bWl0dGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzJdLCA9PSwg
TG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Vi
a2l0X3dlYl92aWV3X2dldF90aXRsZSh0ZXN0LT5tX3dlYlZpZXcpLCA9PSwgYXV0aEV4cGVjdGVk
U3VjY2Vzc1RpdGxlKTsKLX0KLQotc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZl
ciosIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiwg
U291cENsaWVudENvbnRleHQqLCB2b2lkKikKLXsKLSAgICBpZiAobWVzc2FnZS0+bWV0aG9kICE9
IFNPVVBfTUVUSE9EX0dFVCkgewotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNz
YWdlLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgaWYgKCFzdHJjbXAocGF0aCwgIi9hdXRoLXRlc3QuaHRtbCIpKSB7Ci0gICAgICAg
IGNvbnN0IGNoYXIqIGF1dGhvcml6YXRpb24gPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfb25l
KG1lc3NhZ2UtPnJlcXVlc3RfaGVhZGVycywgIkF1dGhvcml6YXRpb24iKTsKLSAgICAgICAgLy8g
UmVxdWlyZSBhdXRoZW50aWNhdGlvbi4KLSAgICAgICAgaWYgKCFnX3N0cmNtcDAoYXV0aG9yaXph
dGlvbiwgYXV0aEV4cGVjdGVkQXV0aG9yaXphdGlvbikpIHsKLSAgICAgICAgICAgIC8vIFN1Y2Nl
c3NmdWwgYXV0aGVudGljYXRpb24uCi0gICAgICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1
cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7Ci0gICAgICAgICAgICBzb3VwX21lc3NhZ2VfYm9k
eV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBhdXRo
U3VjY2Vzc0hUTUxTdHJpbmcsIHN0cmxlbihhdXRoU3VjY2Vzc0hUTUxTdHJpbmcpKTsKLSAgICAg
ICAgICAgIEF1dGhlbnRpY2F0aW9uVGVzdDo6YXV0aGVudGljYXRpb25SZXRyaWVzID0gMDsKLSAg
ICAgICAgfSBlbHNlIGlmICgrK0F1dGhlbnRpY2F0aW9uVGVzdDo6YXV0aGVudGljYXRpb25SZXRy
aWVzIDwgMykgewotICAgICAgICAgICAgLy8gTm8gb3IgaW52YWxpZCBhdXRob3JpemF0aW9uIGhl
YWRlciBwcm92aWRlZCBieSB0aGUgY2xpZW50LCByZXF1ZXN0IGF1dGhlbnRpY2F0aW9uIHR3aWNl
IHRoZW4gZmFpbC4KLSAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2Us
IFNPVVBfU1RBVFVTX1VOQVVUSE9SSVpFRCk7Ci0gICAgICAgICAgICBzb3VwX21lc3NhZ2VfaGVh
ZGVyc19hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIldXVy1BdXRoZW50aWNhdGUi
LCAiQmFzaWMgcmVhbG09XCJteSByZWFsbVwiIik7Ci0gICAgICAgICAgICAvLyBJbmNsdWRlIGEg
ZmFpbHVyZSBtZXNzYWdlIGluIGNhc2UgdGhlIHVzZXIgYXR0ZW1wdHMgdG8gcHJvY2VlZCB3aXRo
b3V0IGF1dGhlbnRpY2F0aW9uLgotICAgICAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5k
KG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgYXV0aEZhaWx1cmVI
VE1MU3RyaW5nLCBzdHJsZW4oYXV0aEZhaWx1cmVIVE1MU3RyaW5nKSk7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAvLyBBdXRoZW50aWNhdGlvbiBub3Qgc3VjY2Vzc2Z1bCwgZGlzcGxh
eSBhICI0MDEgQXV0aG9yaXphdGlvbiBSZXF1aXJlZCIgcGFnZS4KLSAgICAgICAgICAgIHNvdXBf
bWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKLSAgICAgICAgICAg
IHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01F
TU9SWV9TVEFUSUMsIGF1dGhGYWlsdXJlSFRNTFN0cmluZywgc3RybGVuKGF1dGhGYWlsdXJlSFRN
TFN0cmluZykpOwotICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIHNvdXBfbWVzc2FnZV9z
ZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7Ci0KLSAgICBzb3VwX21l
c3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKLX0KLQotdm9pZCBi
ZWZvcmVBbGwoKQotewotICAgIGtTZXJ2ZXIgPSBuZXcgV2ViS2l0VGVzdFNlcnZlcigpOwotICAg
IGtTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFjayk7Ci0KLSAgICBBdXRoZW50aWNhdGlvblRlc3Q6
OmFkZCgiV2ViS2l0V2ViVmlldyIsICJhdXRoZW50aWNhdGlvbi1yZXF1ZXN0IiwgdGVzdFdlYlZp
ZXdBdXRoZW50aWNhdGlvblJlcXVlc3QpOwotICAgIEF1dGhlbnRpY2F0aW9uVGVzdDo6YWRkKCJX
ZWJLaXRXZWJWaWV3IiwgImF1dGhlbnRpY2F0aW9uLWNhbmNlbCIsIHRlc3RXZWJWaWV3QXV0aGVu
dGljYXRpb25DYW5jZWwpOwotICAgIEF1dGhlbnRpY2F0aW9uVGVzdDo6YWRkKCJXZWJLaXRXZWJW
aWV3IiwgImF1dGhlbnRpY2F0aW9uLWxvYWQtY2FuY2VsbGVkIiwgdGVzdFdlYlZpZXdBdXRoZW50
aWNhdGlvbkxvYWRDYW5jZWxsZWQpOwotICAgIEF1dGhlbnRpY2F0aW9uVGVzdDo6YWRkKCJXZWJL
aXRXZWJWaWV3IiwgImF1dGhlbnRpY2F0aW9uLWZhaWx1cmUiLCB0ZXN0V2ViVmlld0F1dGhlbnRp
Y2F0aW9uRmFpbHVyZSk7Ci0gICAgQXV0aGVudGljYXRpb25UZXN0OjphZGQoIldlYktpdFdlYlZp
ZXciLCAiYXV0aGVudGljYXRpb24tbm8tY3JlZGVudGlhbCIsIHRlc3RXZWJWaWV3QXV0aGVudGlj
YXRpb25Ob0NyZWRlbnRpYWwpOwotICAgIEF1dGhlbnRpY2F0aW9uVGVzdDo6YWRkKCJXZWJLaXRX
ZWJWaWV3IiwgImF1dGhlbnRpY2F0aW9uLXN0b3JhZ2UiLCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0
aW9uU3RvcmFnZSk7Ci0gICAgLy8gVGVzdGluZyBhdXRoZW50aWNhdGlvbiBzdWNjZXNzIG11c3Qg
YmUgZG9uZSBsYXN0IGJlY2F1c2UgbGlic291cCB3aWxsIG5ldmVyIGZpcmUKLSAgICAvLyB0aGUg
YXV0aGVudGljYXRlIHNpZ25hbCBhZ2FpbiBvbmNlIGF1dGhlbnRpY2F0aW9uIGlzIHN1Y2Nlc3Nm
dWwuCi0gICAgQXV0aGVudGljYXRpb25UZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiYXV0aGVu
dGljYXRpb24tc3VjY2VzcyIsIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25TdWNjZXNzKTsKLX0K
LQotdm9pZCBhZnRlckFsbCgpCi17Ci0gICAgZGVsZXRlIGtTZXJ2ZXI7Ci19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0QmFja0ZvcndhcmRM
aXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RCYWNr
Rm9yd2FyZExpc3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDc5MzY2Li4w
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RC
YWNrRm9yd2FyZExpc3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjgwICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0j
aW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5oIgotI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCi0j
aW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgotI2luY2x1ZGUg
PHN0cmluZy5oPgotI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgotCi0vLyBCYWNrIGZvcndh
cmQgbGlzdCBsaW1pdCBpcyAxMDAgYnkgZGVmYXVsdC4KLXN0YXRpYyBjb25zdCBpbnQga0JhY2tG
b3J3YXJkTGlzdExpbWl0ID0gMTAwOwotCi1zdGF0aWMgV2ViS2l0VGVzdFNlcnZlcioga1NlcnZl
cjsKLQotc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3Vw
TWVzc2FnZSogbXNnLCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiBxdWVyeSwgU291cENs
aWVudENvbnRleHQqIGNvbnRleHQsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgaWYgKG1zZy0+bWV0
aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgewotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1
cyhtc2csIFNPVVBfU1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBpZiAoZ19zdHJfaGFzX3N1ZmZpeChwYXRoLCAiZmF2aWNvbi5pY28iKSkgewot
ICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX05PVF9GT1VO
RCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1
cyhtc2csIFNPVVBfU1RBVFVTX09LKTsKLQotICAgIGNoYXIqIGJvZHkgPSBnX3N0cmR1cF9wcmlu
dGYoIjxodG1sPjx0aXRsZT4lczwvdGl0bGU+PGJvZHk+JXM8L2JvZHk+PC9odG1sPiIsIHBhdGgg
KyAxLCBwYXRoICsgMSk7Ci0gICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1zZy0+cmVzcG9u
c2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgYm9keSwgc3RybGVuKGJvZHkpKTsKLQotICAgIHNv
dXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1zZy0+cmVzcG9uc2VfYm9keSk7Ci19Ci0KLWNsYXNz
IEJhY2tGb3J3YXJkTGlzdFRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7Ci1wdWJsaWM6Ci0gICAg
TUFLRV9HTElCX1RFU1RfRklYVFVSRShCYWNrRm9yd2FyZExpc3RUZXN0KTsKLQotICAgIGVudW0g
ewotICAgICAgICBCYWNrd2FyZCwKLSAgICAgICAgRm9yd2FyZAotICAgIH07Ci0KLSAgICBlbnVt
IHsKLSAgICAgICAgQ3VycmVudEl0ZW0gID0gMSA8PCAwLAotICAgICAgICBBZGRlZEl0ZW0gICAg
PSAxIDw8IDEsCi0gICAgICAgIFJlbW92ZWRJdGVtcyA9IDEgPDwgMgotICAgIH07Ci0KLSAgICBz
dGF0aWMgdm9pZCBjaGVja0l0ZW0oV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSogaXRlbSwgY29u
c3QgY2hhciogdGl0bGUsIGNvbnN0IGNoYXIqIHVyaSwgY29uc3QgY2hhciogb3JpZ2luYWxVUkkp
Ci0gICAgewotICAgICAgICBnX2Fzc2VydChpdGVtKTsKLSAgICAgICAgZ19hc3NlcnRfY21wc3Ry
KHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dldF91cmkoaXRlbSksID09LCB1cmkpOwot
ICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0
X3RpdGxlKGl0ZW0pLCA9PSAsIHRpdGxlKTsKLSAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtp
dF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dldF9vcmlnaW5hbF91cmkoaXRlbSksID09LCBvcmln
aW5hbFVSSSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgY2hlY2tJdGVtSW5kZXgoV2ViS2l0
QmFja0ZvcndhcmRMaXN0KiBsaXN0KQotICAgIHsKLSAgICAgICAgZ19hc3NlcnQod2Via2l0X2Jh
Y2tfZm9yd2FyZF9saXN0X2dldF9udGhfaXRlbShsaXN0LCAtMSkgPT0gd2Via2l0X2JhY2tfZm9y
d2FyZF9saXN0X2dldF9iYWNrX2l0ZW0obGlzdCkpOwotICAgICAgICBnX2Fzc2VydCh3ZWJraXRf
YmFja19mb3J3YXJkX2xpc3RfZ2V0X250aF9pdGVtKGxpc3QsIDApID09IHdlYmtpdF9iYWNrX2Zv
cndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKGxpc3QpKTsKLSAgICAgICAgZ19hc3NlcnQod2Vi
a2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9udGhfaXRlbShsaXN0LCAxKSA9PSB3ZWJraXRfYmFj
a19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRlbShsaXN0KSk7Ci0gICAgfQotCi0gICAgc3Rh
dGljIHZvaWQgY2hlY2tMaXN0KFdlYktpdEJhY2tGb3J3YXJkTGlzdCogbGlzdCwgdW5zaWduZWQg
dHlwZSwgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSoqIGl0ZW1zLCB1bnNpZ25lZCBuSXRlbXMp
Ci0gICAgewotICAgICAgICBHTGlzdCogbGlzdEl0ZW1zID0gdHlwZSA9PSBCYWNrRm9yd2FyZExp
c3RUZXN0OjpCYWNrd2FyZCA/IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19saXN0
KGxpc3QpIDoKLSAgICAgICAgICAgIHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2Fy
ZF9saXN0KGxpc3QpOwotICAgICAgICBnX2Fzc2VydChsaXN0SXRlbXMpOwotCi0gICAgICAgIHVu
c2lnbmVkIGkgPSAwOwotICAgICAgICBmb3IgKEdMaXN0KiBsaXN0SXRlbSA9IGxpc3RJdGVtczsg
bGlzdEl0ZW07IGxpc3RJdGVtID0gZ19saXN0X25leHQobGlzdEl0ZW0pLCBpKyspIHsKLSAgICAg
ICAgICAgIGdfYXNzZXJ0X2NtcHVpbnQoaSwgPCwgbkl0ZW1zKTsKLSAgICAgICAgICAgIGdfYXNz
ZXJ0KGxpc3RJdGVtLT5kYXRhID09IGl0ZW1zW2ldKTsKLSAgICAgICAgfQotICAgICAgICBnX2xp
c3RfZnJlZShsaXN0SXRlbXMpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGJhY2tGb3J3YXJk
TGlzdENoYW5nZWQoV2ViS2l0QmFja0ZvcndhcmRMaXN0KiBsaXN0LCBXZWJLaXRCYWNrRm9yd2Fy
ZExpc3RJdGVtKiBhZGRlZEl0ZW0sIEdMaXN0KiByZW1vdmVkSXRlbXMsIEJhY2tGb3J3YXJkTGlz
dFRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICB0ZXN0LT5tX2hhc0NoYW5nZWQgPSB0cnVlOwot
Ci0gICAgICAgIGlmICh0ZXN0LT5tX2NoYW5nZWRGbGFncyAmIEJhY2tGb3J3YXJkTGlzdFRlc3Q6
OkFkZGVkSXRlbSkgewotICAgICAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX0JBQ0tfRk9SV0FS
RF9MSVNUX0lURU0oYWRkZWRJdGVtKSk7Ci0gICAgICAgICAgICB0ZXN0LT5hc3NlcnRPYmplY3RJ
c0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKGFkZGVkSXRlbSkpOwotICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIGdfYXNzZXJ0KCFhZGRlZEl0ZW0pOwotCi0gICAgICAgIGlmICh0
ZXN0LT5tX2NoYW5nZWRGbGFncyAmIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OlJlbW92ZWRJdGVtcykg
ewotICAgICAgICAgICAgZ19hc3NlcnQocmVtb3ZlZEl0ZW1zKTsKLSAgICAgICAgICAgIGZvciAo
R0xpc3QqIGl0ZXIgPSByZW1vdmVkSXRlbXM7IGl0ZXI7IGl0ZXIgPSBpdGVyLT5uZXh0KSB7Ci0g
ICAgICAgICAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX0JBQ0tfRk9SV0FSRF9MSVNUX0lURU0o
aXRlci0+ZGF0YSkpOwotICAgICAgICAgICAgICAgIGlmICh0ZXN0LT5tX2V4cGVjdGVkUmVtb3Zl
ZEl0ZW1zKQotICAgICAgICAgICAgICAgICAgICBnX2Fzc2VydChnX2xpc3RfZmluZCh0ZXN0LT5t
X2V4cGVjdGVkUmVtb3ZlZEl0ZW1zLCBpdGVyLT5kYXRhKSk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICBnX2Fzc2VydCghcmVtb3ZlZEl0ZW1zKTsKLSAgICB9
Ci0KLSAgICBCYWNrRm9yd2FyZExpc3RUZXN0KCkKLSAgICAgICAgOiBtX2xpc3Qod2Via2l0X3dl
Yl92aWV3X2dldF9iYWNrX2ZvcndhcmRfbGlzdChtX3dlYlZpZXcpKQotICAgICAgICAsIG1fY2hh
bmdlZEZsYWdzKDApCi0gICAgICAgICwgbV9oYXNDaGFuZ2VkKGZhbHNlKQotICAgICAgICAsIG1f
ZXhwZWN0ZWRSZW1vdmVkSXRlbXMoMCkKLSAgICB7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
bV9saXN0LCAiY2hhbmdlZCIsIEdfQ0FMTEJBQ0soYmFja0ZvcndhcmRMaXN0Q2hhbmdlZCksIHRo
aXMpOwotICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JK
RUNUKG1fbGlzdCkpOwotICAgIH0KLQotICAgIH5CYWNrRm9yd2FyZExpc3RUZXN0KCkKLSAgICB7
Ci0gICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX2xpc3QsIEdf
U0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOwotICAgIH0KLQotICAgIHZvaWQg
d2FpdFVudGlsTG9hZEZpbmlzaGVkKCkKLSAgICB7Ci0gICAgICAgIG1faGFzQ2hhbmdlZCA9IGZh
bHNlOwotICAgICAgICBXZWJWaWV3VGVzdDo6d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAg
ICAgIGdfYXNzZXJ0KG1faGFzQ2hhbmdlZCk7Ci0gICAgfQotCi0gICAgdm9pZCB3YWl0VW50aWxM
b2FkRmluaXNoZWRBbmRDaGVja1JlbW92ZWRJdGVtcyhHTGlzdCogcmVtb3ZlZEl0ZW1zKQotICAg
IHsKLSAgICAgICAgbV9leHBlY3RlZFJlbW92ZWRJdGVtcyA9IHJlbW92ZWRJdGVtczsKLSAgICAg
ICAgd2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgICAgIG1fZXhwZWN0ZWRSZW1vdmVkSXRl
bXMgPSAwOwotICAgIH0KLQotICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdCogbV9saXN0OwotICAg
IHVuc2lnbmVkIGxvbmcgbV9jaGFuZ2VkRmxhZ3M7Ci0gICAgYm9vbCBtX2hhc0NoYW5nZWQ7Ci0g
ICAgR0xpc3QqIG1fZXhwZWN0ZWRSZW1vdmVkSXRlbXM7Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0
QmFja0ZvcndhcmRMaXN0TmF2aWdhdGlvbihCYWNrRm9yd2FyZExpc3RUZXN0KiB0ZXN0LCBnY29u
c3Rwb2ludGVyKQotewotICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW1zWzFdOwot
Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayh0ZXN0LT5tX3dlYlZp
ZXcpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHRlc3Qt
Pm1fd2ViVmlldykpOwotCi0gICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfYmFja19mb3J3YXJk
X2xpc3RfZ2V0X2xlbmd0aCh0ZXN0LT5tX2xpc3QpLCA9PSwgMCk7Ci0gICAgZ19hc3NlcnQoIXdl
YmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKHRlc3QtPm1fbGlzdCkpOwot
ICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfaXRlbSh0ZXN0
LT5tX2xpc3QpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9m
b3J3YXJkX2l0ZW0odGVzdC0+bV9saXN0KSk7Ci0gICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hl
Y2tJdGVtSW5kZXgodGVzdC0+bV9saXN0KTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9y
d2FyZF9saXN0X2dldF9iYWNrX2xpc3QodGVzdC0+bV9saXN0KSk7Ci0gICAgZ19hc3NlcnQoIXdl
YmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0KHRlc3QtPm1fbGlzdCkpOwot
Ci0gICAgQ1N0cmluZyB1cmlQYWdlMSA9IGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9QYWdlMSIp
OwotICAgIHRlc3QtPm1fY2hhbmdlZEZsYWdzID0gQmFja0ZvcndhcmRMaXN0VGVzdDo6Q3VycmVu
dEl0ZW0gfCBCYWNrRm9yd2FyZExpc3RUZXN0OjpBZGRlZEl0ZW07Ci0gICAgdGVzdC0+bG9hZFVS
SSh1cmlQYWdlMS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwot
Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayh0ZXN0LT5tX3dlYlZp
ZXcpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHRlc3Qt
Pm1fd2ViVmlldykpOwotCi0gICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfYmFja19mb3J3YXJk
X2xpc3RfZ2V0X2xlbmd0aCh0ZXN0LT5tX2xpc3QpLCA9PSwgMSk7Ci0gICAgV2ViS2l0QmFja0Zv
cndhcmRMaXN0SXRlbSogaXRlbVBhZ2UxID0gd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9j
dXJyZW50X2l0ZW0odGVzdC0+bV9saXN0KTsKLSAgICBCYWNrRm9yd2FyZExpc3RUZXN0OjpjaGVj
a0l0ZW0oaXRlbVBhZ2UxLCAiUGFnZTEiLCB1cmlQYWdlMS5kYXRhKCksIHVyaVBhZ2UxLmRhdGEo
KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19pdGVt
KHRlc3QtPm1fbGlzdCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3Rf
Z2V0X2ZvcndhcmRfaXRlbSh0ZXN0LT5tX2xpc3QpKTsKLSAgICBCYWNrRm9yd2FyZExpc3RUZXN0
OjpjaGVja0l0ZW1JbmRleCh0ZXN0LT5tX2xpc3QpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFj
a19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGlzdCh0ZXN0LT5tX2xpc3QpKTsKLSAgICBnX2Fzc2Vy
dCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xpc3QodGVzdC0+bV9saXN0
KSk7Ci0KLSAgICBDU3RyaW5nIHVyaVBhZ2UyID0ga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL1Bh
Z2UyIik7Ci0gICAgdGVzdC0+bV9jaGFuZ2VkRmxhZ3MgPSBCYWNrRm9yd2FyZExpc3RUZXN0OjpD
dXJyZW50SXRlbSB8IEJhY2tGb3J3YXJkTGlzdFRlc3Q6OkFkZGVkSXRlbTsKLSAgICB0ZXN0LT5s
b2FkVVJJKHVyaVBhZ2UyLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVk
KCk7Ci0KLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2sodGVzdC0+bV93
ZWJWaWV3KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh0
ZXN0LT5tX3dlYlZpZXcpKTsKLQotICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2JhY2tfZm9y
d2FyZF9saXN0X2dldF9sZW5ndGgodGVzdC0+bV9saXN0KSwgPT0sIDIpOwotICAgIFdlYktpdEJh
Y2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW1QYWdlMiA9IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9n
ZXRfY3VycmVudF9pdGVtKHRlc3QtPm1fbGlzdCk7Ci0gICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6
Y2hlY2tJdGVtKGl0ZW1QYWdlMiwgIlBhZ2UyIiwgdXJpUGFnZTIuZGF0YSgpLCB1cmlQYWdlMi5k
YXRhKCkpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19p
dGVtKHRlc3QtPm1fbGlzdCkgPT0gaXRlbVBhZ2UxKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2Jh
Y2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2l0ZW0odGVzdC0+bV9saXN0KSk7Ci0gICAgQmFj
a0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tJdGVtSW5kZXgodGVzdC0+bV9saXN0KTsKLSAgICBpdGVt
c1swXSA9IGl0ZW1QYWdlMTsKLSAgICBCYWNrRm9yd2FyZExpc3RUZXN0OjpjaGVja0xpc3QodGVz
dC0+bV9saXN0LCBCYWNrRm9yd2FyZExpc3RUZXN0OjpCYWNrd2FyZCwgaXRlbXMsIDEpOwotICAg
IGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlzdCh0ZXN0
LT5tX2xpc3QpKTsKLQotICAgIHRlc3QtPm1fY2hhbmdlZEZsYWdzID0gQmFja0ZvcndhcmRMaXN0
VGVzdDo6Q3VycmVudEl0ZW07Ci0gICAgdGVzdC0+Z29CYWNrKCk7Ci0gICAgdGVzdC0+d2FpdFVu
dGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9n
b19iYWNrKHRlc3QtPm1fd2ViVmlldykpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19j
YW5fZ29fZm9yd2FyZCh0ZXN0LT5tX3dlYlZpZXcpKTsKLQotICAgIGdfYXNzZXJ0X2NtcHVpbnQo
d2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9sZW5ndGgodGVzdC0+bV9saXN0KSwgPT0sIDIp
OwotICAgIGdfYXNzZXJ0KGl0ZW1QYWdlMSA9PSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0
X2N1cnJlbnRfaXRlbSh0ZXN0LT5tX2xpc3QpKTsKLSAgICBCYWNrRm9yd2FyZExpc3RUZXN0Ojpj
aGVja0l0ZW0od2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0odGVzdC0+
bV9saXN0KSwgIlBhZ2UxIiwgdXJpUGFnZTEuZGF0YSgpLCB1cmlQYWdlMS5kYXRhKCkpOwotICAg
IGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfaXRlbSh0ZXN0LT5t
X2xpc3QpKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2Zvcndh
cmRfaXRlbSh0ZXN0LT5tX2xpc3QpID09IGl0ZW1QYWdlMik7Ci0gICAgQmFja0ZvcndhcmRMaXN0
VGVzdDo6Y2hlY2tJdGVtSW5kZXgodGVzdC0+bV9saXN0KTsKLSAgICBnX2Fzc2VydCghd2Via2l0
X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3QodGVzdC0+bV9saXN0KSk7Ci0gICAgaXRl
bXNbMF0gPSBpdGVtUGFnZTI7Ci0gICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tMaXN0KHRl
c3QtPm1fbGlzdCwgQmFja0ZvcndhcmRMaXN0VGVzdDo6Rm9yd2FyZCwgaXRlbXMsIDEpOwotCi0g
ICAgdGVzdC0+bV9jaGFuZ2VkRmxhZ3MgPSBCYWNrRm9yd2FyZExpc3RUZXN0OjpDdXJyZW50SXRl
bTsKLSAgICB0ZXN0LT5nb0ZvcndhcmQoKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNo
ZWQoKTsKLQotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayh0ZXN0LT5t
X3dlYlZpZXcpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJk
KHRlc3QtPm1fd2ViVmlldykpOwotCi0gICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfYmFja19m
b3J3YXJkX2xpc3RfZ2V0X2xlbmd0aCh0ZXN0LT5tX2xpc3QpLCA9PSwgMik7Ci0gICAgZ19hc3Nl
cnQoaXRlbVBhZ2UyID09IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVt
KHRlc3QtPm1fbGlzdCkpOwotICAgIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OmNoZWNrSXRlbSh3ZWJr
aXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh0ZXN0LT5tX2xpc3QpLCAiUGFn
ZTIiLCB1cmlQYWdlMi5kYXRhKCksIHVyaVBhZ2UyLmRhdGEoKSk7Ci0gICAgZ19hc3NlcnQod2Vi
a2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2l0ZW0odGVzdC0+bV9saXN0KSA9PSBpdGVt
UGFnZTEpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2Zvcndh
cmRfaXRlbSh0ZXN0LT5tX2xpc3QpKTsKLSAgICBCYWNrRm9yd2FyZExpc3RUZXN0OjpjaGVja0l0
ZW1JbmRleCh0ZXN0LT5tX2xpc3QpOwotICAgIGl0ZW1zWzBdID0gaXRlbVBhZ2UxOwotICAgIEJh
Y2tGb3J3YXJkTGlzdFRlc3Q6OmNoZWNrTGlzdCh0ZXN0LT5tX2xpc3QsIEJhY2tGb3J3YXJkTGlz
dFRlc3Q6OkJhY2t3YXJkLCBpdGVtcywgMSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNrX2Zv
cndhcmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0KHRlc3QtPm1fbGlzdCkpOwotCi0gICAgdGVzdC0+
bV9jaGFuZ2VkRmxhZ3MgPSBCYWNrRm9yd2FyZExpc3RUZXN0OjpDdXJyZW50SXRlbTsKLSAgICB0
ZXN0LT5nb1RvQmFja0ZvcndhcmRMaXN0SXRlbShpdGVtUGFnZTEpOwotICAgIHRlc3QtPndhaXRV
bnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3NlcnQoaXRlbVBhZ2UxID09IHdlYmtpdF9i
YWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKHRlc3QtPm1fbGlzdCkpOwotfQotCi1z
dGF0aWMgdm9pZCB0ZXN0QmFja0ZvcndhcmRMaXN0TGltaXRBbmRDYWNoZShCYWNrRm9yd2FyZExp
c3RUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
a0JhY2tGb3J3YXJkTGlzdExpbWl0OyBpKyspIHsKLSAgICAgICAgR093blB0cjxjaGFyPiBwYXRo
KGdfc3RyZHVwX3ByaW50ZigiL1BhZ2UlZCIsIGkpKTsKLSAgICAgICAgdGVzdC0+bV9jaGFuZ2Vk
RmxhZ3MgPSBCYWNrRm9yd2FyZExpc3RUZXN0OjpDdXJyZW50SXRlbSB8IEJhY2tGb3J3YXJkTGlz
dFRlc3Q6OkFkZGVkSXRlbTsKLSAgICAgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklG
b3JQYXRoKHBhdGguZ2V0KCkpLmRhdGEoKSk7Ci0gICAgICAgIHRlc3QtPndhaXRVbnRpbExvYWRG
aW5pc2hlZCgpOwotICAgIH0KLQotICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2JhY2tfZm9y
d2FyZF9saXN0X2dldF9sZW5ndGgodGVzdC0+bV9saXN0KSwgPT0sIGtCYWNrRm9yd2FyZExpc3RM
aW1pdCk7Ci0gICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSogaXRlbVBhZ2VGaXJzdCA9IHdl
YmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbnRoX2l0ZW0odGVzdC0+bV9saXN0LCAtKGtCYWNr
Rm9yd2FyZExpc3RMaW1pdCAtIDEpKTsKLSAgICBHT3duUHRyPEdMaXN0PiByZW1vdmVkSXRlbXMo
Z19saXN0X3ByZXBlbmQoMCwgaXRlbVBhZ2VGaXJzdCkpOwotCi0gICAgR093blB0cjxjaGFyPiBw
YXRoKGdfc3RyZHVwX3ByaW50ZigiL1BhZ2UlZCIsIGtCYWNrRm9yd2FyZExpc3RMaW1pdCkpOwot
ICAgIHRlc3QtPm1fY2hhbmdlZEZsYWdzID0gQmFja0ZvcndhcmRMaXN0VGVzdDo6Q3VycmVudEl0
ZW0gfCBCYWNrRm9yd2FyZExpc3RUZXN0OjpBZGRlZEl0ZW0gfCBCYWNrRm9yd2FyZExpc3RUZXN0
OjpSZW1vdmVkSXRlbXM7Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRo
KHBhdGguZ2V0KCkpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkQW5k
Q2hlY2tSZW1vdmVkSXRlbXMocmVtb3ZlZEl0ZW1zLmdldCgpKTsKLQotICAgIGdfYXNzZXJ0X2Nt
cHVpbnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9sZW5ndGgodGVzdC0+bV9saXN0KSwg
PT0sIGtCYWNrRm9yd2FyZExpc3RMaW1pdCk7Ci19Ci0KLXZvaWQgYmVmb3JlQWxsKCkKLXsKLSAg
ICBrU2VydmVyID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIoKTsKLSAgICBrU2VydmVyLT5ydW4oc2Vy
dmVyQ2FsbGJhY2spOwotCi0gICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6YWRkKCJCYWNrRm9yd2Fy
ZExpc3QiLCAibmF2aWdhdGlvbiIsIHRlc3RCYWNrRm9yd2FyZExpc3ROYXZpZ2F0aW9uKTsKLSAg
ICBCYWNrRm9yd2FyZExpc3RUZXN0OjphZGQoIkJhY2tGb3J3YXJkTGlzdCIsICJsaXN0LWxpbWl0
LWFuZC1jYWNoZSIsIHRlc3RCYWNrRm9yd2FyZExpc3RMaW1pdEFuZENhY2hlKTsKLX0KLQotdm9p
ZCBhZnRlckFsbCgpCi17Ci0gICAgZGVsZXRlIGtTZXJ2ZXI7Ci19Ci0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RDb250ZXh0TWVudS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0Q29udGV4dE1lbnUu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjMyOWI5Li4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RDb250ZXh0TWVudS5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw4NjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAy
LDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYlZpZXdU
ZXN0LmgiCi0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgotCi1jbGFzcyBDb250ZXh0
TWVudVRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7Ci1wdWJsaWM6Ci0gICAgZW51bSBDb250ZXh0
TWVudUl0ZW1TdGF0ZUZsYWdzIHsKLSAgICAgICAgVmlzaWJsZSA9IDEgPDwgMCwKLSAgICAgICAg
RW5hYmxlZCA9IDEgPDwgMSwKLSAgICAgICAgQ2hlY2tlZCA9IDEgPDwgMgotICAgIH07Ci0KLSAg
ICB2b2lkIGNoZWNrQ29udGV4dE1lbnVFdmVudChHZGtFdmVudCogZXZlbnQpCi0gICAgewotICAg
ICAgICBnX2Fzc2VydChldmVudCk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcGludChldmVudC0+dHlw
ZSwgPT0sIEdES19CVVRUT05fUFJFU1MpOwotICAgICAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnQt
PmJ1dHRvbi5idXR0b24sID09LCAzKTsKLSAgICAgICAgZ19hc3NlcnRfY21waW50KGV2ZW50LT5i
dXR0b24ueCwgPT0sIG1fbWVudVBvc2l0aW9uWCk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudC0+YnV0dG9uLnksID09LCBtX21lbnVQb3NpdGlvblkpOwotICAgIH0KLQotICAgIHN0YXRp
YyBnYm9vbGVhbiBjb250ZXh0TWVudUNhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdl
YktpdENvbnRleHRNZW51KiBjb250ZXh0TWVudSwgR2RrRXZlbnQqIGV2ZW50LCBXZWJLaXRIaXRU
ZXN0UmVzdWx0KiBoaXRUZXN0UmVzdWx0LCBDb250ZXh0TWVudVRlc3QqIHRlc3QpCi0gICAgewot
ICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfQ09OVEVYVF9NRU5VKGNvbnRleHRNZW51KSk7Ci0g
ICAgICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpF
Q1QoY29udGV4dE1lbnUpKTsKLSAgICAgICAgdGVzdC0+Y2hlY2tDb250ZXh0TWVudUV2ZW50KGV2
ZW50KTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX0hJVF9URVNUX1JFU1VMVChoaXRUZXN0
UmVzdWx0KSk7Ci0gICAgICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0Rmlu
aXNoZXMoR19PQkpFQ1QoaGl0VGVzdFJlc3VsdCkpOwotCi0gICAgICAgIHJldHVybiB0ZXN0LT5j
b250ZXh0TWVudShjb250ZXh0TWVudSwgZXZlbnQsIGhpdFRlc3RSZXN1bHQpOwotICAgIH0KLQot
ICAgIHN0YXRpYyB2b2lkIGNvbnRleHRNZW51RGlzbWlzc2VkQ2FsbGJhY2soV2ViS2l0V2ViVmll
dyosIENvbnRleHRNZW51VGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHRlc3QtPmNvbnRleHRN
ZW51RGlzbWlzc2VkKCk7Ci0gICAgfQotCi0gICAgQ29udGV4dE1lbnVUZXN0KCkKLSAgICAgICAg
OiBtX21lbnVQb3NpdGlvblgoMCkKLSAgICAgICAgLCBtX21lbnVQb3NpdGlvblkoMCkKLSAgICB7
Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAiY29udGV4dC1tZW51IiwgR19D
QUxMQkFDSyhjb250ZXh0TWVudUNhbGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIGdfc2lnbmFsX2Nv
bm5lY3QobV93ZWJWaWV3LCAiY29udGV4dC1tZW51LWRpc21pc3NlZCIsIEdfQ0FMTEJBQ0soY29u
dGV4dE1lbnVEaXNtaXNzZWRDYWxsYmFjayksIHRoaXMpOwotICAgIH0KLQotICAgIH5Db250ZXh0
TWVudVRlc3QoKQotICAgIHsKLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9t
YXRjaGVkKG1fd2ViVmlldywgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7
Ci0gICAgfQotCi0gICAgdmlydHVhbCBib29sIGNvbnRleHRNZW51KFdlYktpdENvbnRleHRNZW51
KiwgR2RrRXZlbnQqLCBXZWJLaXRIaXRUZXN0UmVzdWx0KikgPSAwOwotCi0gICAgdmlydHVhbCB2
b2lkIGNvbnRleHRNZW51RGlzbWlzc2VkKCkKLSAgICB7Ci0gICAgICAgIHF1aXRNYWluTG9vcCgp
OwotICAgIH0KLQotICAgIEd0a01lbnUqIGdldFBvcHVwTWVudSgpCi0gICAgewotICAgICAgICBH
T3duUHRyPEdMaXN0PiB0b3BsZXZlbHMoZ3RrX3dpbmRvd19saXN0X3RvcGxldmVscygpKTsKLSAg
ICAgICAgZm9yIChHTGlzdCogaXRlciA9IHRvcGxldmVscy5nZXQoKTsgaXRlcjsgaXRlciA9IGdf
bGlzdF9uZXh0KGl0ZXIpKSB7Ci0gICAgICAgICAgICBpZiAoIUdUS19JU19XSU5ET1coaXRlci0+
ZGF0YSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIEd0a1dpZGdl
dCogY2hpbGQgPSBndGtfYmluX2dldF9jaGlsZChHVEtfQklOKGl0ZXItPmRhdGEpKTsKLSAgICAg
ICAgICAgIGlmICghR1RLX0lTX01FTlUoY2hpbGQpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgICAgICBpZiAoZ3RrX21lbnVfZ2V0X2F0dGFjaF93aWRnZXQoR1RLX01FTlUo
Y2hpbGQpKSA9PSBHVEtfV0lER0VUKG1fd2ViVmlldykpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IEdUS19NRU5VKGNoaWxkKTsKLSAgICAgICAgfQotICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hl
ZCgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBib29sIHNob3VsZFNob3dJbnB1
dE1ldGhvZHNNZW51KCkKLSAgICB7Ci0gICAgICAgIEd0a1NldHRpbmdzKiBzZXR0aW5ncyA9IGd0
a193aWRnZXRfZ2V0X3NldHRpbmdzKEdUS19XSURHRVQobV93ZWJWaWV3KSk7Ci0gICAgICAgIGlm
ICghc2V0dGluZ3MpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICBnYm9vbGVh
biBzaG93SW5wdXRNZXRob2RNZW51OwotICAgICAgICBnX29iamVjdF9nZXQoc2V0dGluZ3MsICJn
dGstc2hvdy1pbnB1dC1tZXRob2QtbWVudSIsICZzaG93SW5wdXRNZXRob2RNZW51LCBOVUxMKTsK
LSAgICAgICAgcmV0dXJuIHNob3dJbnB1dE1ldGhvZE1lbnU7Ci0gICAgfQotCi0gICAgdm9pZCBj
aGVja0FjdGlvblN0YXRlKEd0a0FjdGlvbiogYWN0aW9uLCB1bnNpZ25lZCBzdGF0ZSkKLSAgICB7
Ci0gICAgICAgIGlmIChzdGF0ZSAmIFZpc2libGUpCi0gICAgICAgICAgICBnX2Fzc2VydChndGtf
YWN0aW9uX2dldF92aXNpYmxlKGFjdGlvbikpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBn
X2Fzc2VydCghZ3RrX2FjdGlvbl9nZXRfdmlzaWJsZShhY3Rpb24pKTsKLQotICAgICAgICBpZiAo
c3RhdGUgJiBFbmFibGVkKQotICAgICAgICAgICAgZ19hc3NlcnQoZ3RrX2FjdGlvbl9nZXRfc2Vu
c2l0aXZlKGFjdGlvbikpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBnX2Fzc2VydCghZ3Rr
X2FjdGlvbl9nZXRfc2Vuc2l0aXZlKGFjdGlvbikpOwotCi0gICAgICAgIGlmIChHVEtfSVNfVE9H
R0xFX0FDVElPTihhY3Rpb24pKSB7Ci0gICAgICAgICAgICBpZiAoc3RhdGUgJiBDaGVja2VkKQot
ICAgICAgICAgICAgICAgIGdfYXNzZXJ0KGd0a190b2dnbGVfYWN0aW9uX2dldF9hY3RpdmUoR1RL
X1RPR0dMRV9BQ1RJT04oYWN0aW9uKSkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIGdfYXNzZXJ0KCFndGtfdG9nZ2xlX2FjdGlvbl9nZXRfYWN0aXZlKEdUS19UT0dHTEVfQUNU
SU9OKGFjdGlvbikpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEdMaXN0KiBjaGVja0N1cnJl
bnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoR0xpc3QqIGl0ZW1zLCBXZWJLaXRDb250ZXh0
TWVudUFjdGlvbiBzdG9ja0FjdGlvbiwgdW5zaWduZWQgc3RhdGUpCi0gICAgewotICAgICAgICBn
X2Fzc2VydChpdGVtcyk7Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19DT05URVhUX01FTlVf
SVRFTShpdGVtcy0+ZGF0YSkpOwotCi0gICAgICAgIFdlYktpdENvbnRleHRNZW51SXRlbSogaXRl
bSA9IFdFQktJVF9DT05URVhUX01FTlVfSVRFTShpdGVtcy0+ZGF0YSk7Ci0gICAgICAgIGFzc2Vy
dE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QoaXRlbSkpOwotCi0gICAg
ICAgIEd0a0FjdGlvbiogYWN0aW9uID0gd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9hY3Rp
b24oaXRlbSk7Ci0gICAgICAgIGdfYXNzZXJ0KEdUS19JU19BQ1RJT04oYWN0aW9uKSk7Ci0KLSAg
ICAgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRfc3RvY2tf
YWN0aW9uKGl0ZW0pLCA9PSwgc3RvY2tBY3Rpb24pOwotCi0gICAgICAgIGNoZWNrQWN0aW9uU3Rh
dGUoYWN0aW9uLCBzdGF0ZSk7Ci0KLSAgICAgICAgcmV0dXJuIGdfbGlzdF9uZXh0KGl0ZW1zKTsK
LSAgICB9Ci0KLSAgICBHTGlzdCogY2hlY2tDdXJyZW50SXRlbUlzQ3VzdG9tQWN0aW9uQW5kR2V0
TmV4dChHTGlzdCogaXRlbXMsIGNvbnN0IGNoYXIqIGxhYmVsLCB1bnNpZ25lZCBzdGF0ZSkKLSAg
ICB7Ci0gICAgICAgIGdfYXNzZXJ0KGl0ZW1zKTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lT
X0NPTlRFWFRfTUVOVV9JVEVNKGl0ZW1zLT5kYXRhKSk7Ci0KLSAgICAgICAgV2ViS2l0Q29udGV4
dE1lbnVJdGVtKiBpdGVtID0gV0VCS0lUX0NPTlRFWFRfTUVOVV9JVEVNKGl0ZW1zLT5kYXRhKTsK
LSAgICAgICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChp
dGVtKSk7Ci0KLSAgICAgICAgR3RrQWN0aW9uKiBhY3Rpb24gPSB3ZWJraXRfY29udGV4dF9tZW51
X2l0ZW1fZ2V0X2FjdGlvbihpdGVtKTsKLSAgICAgICAgZ19hc3NlcnQoR1RLX0lTX0FDVElPTihh
Y3Rpb24pKTsKLQotICAgICAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X2NvbnRleHRfbWVudV9p
dGVtX2dldF9zdG9ja19hY3Rpb24oaXRlbSksID09LCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
Tl9DVVNUT00pOwotICAgICAgICBnX2Fzc2VydF9jbXBzdHIoZ3RrX2FjdGlvbl9nZXRfbGFiZWwo
YWN0aW9uKSwgPT0sIGxhYmVsKTsKLQotICAgICAgICBjaGVja0FjdGlvblN0YXRlKGFjdGlvbiwg
c3RhdGUpOwotCi0gICAgICAgIHJldHVybiBnX2xpc3RfbmV4dChpdGVtcyk7Ci0gICAgfQotCi0g
ICAgR0xpc3QqIGNoZWNrQ3VycmVudEl0ZW1Jc1N1Yk1lbnVBbmRHZXROZXh0KEdMaXN0KiBpdGVt
cywgY29uc3QgY2hhciogbGFiZWwsIHVuc2lnbmVkIHN0YXRlLCBHTGlzdCoqIHN1Yk1lbnVJdGVy
KQotICAgIHsKLSAgICAgICAgZ19hc3NlcnQoaXRlbXMpOwotICAgICAgICBnX2Fzc2VydChXRUJL
SVRfSVNfQ09OVEVYVF9NRU5VX0lURU0oaXRlbXMtPmRhdGEpKTsKLQotICAgICAgICBXZWJLaXRD
b250ZXh0TWVudUl0ZW0qIGl0ZW0gPSBXRUJLSVRfQ09OVEVYVF9NRU5VX0lURU0oaXRlbXMtPmRh
dGEpOwotICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JK
RUNUKGl0ZW0pKTsKLQotICAgICAgICBHdGtBY3Rpb24qIGFjdGlvbiA9IHdlYmtpdF9jb250ZXh0
X21lbnVfaXRlbV9nZXRfYWN0aW9uKGl0ZW0pOwotICAgICAgICBnX2Fzc2VydChHVEtfSVNfQUNU
SU9OKGFjdGlvbikpOwotCi0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cihndGtfYWN0aW9uX2dldF9s
YWJlbChhY3Rpb24pLCA9PSwgbGFiZWwpOwotICAgICAgICBjaGVja0FjdGlvblN0YXRlKGFjdGlv
biwgc3RhdGUpOwotCi0gICAgICAgIFdlYktpdENvbnRleHRNZW51KiBzdWJNZW51ID0gd2Via2l0
X2NvbnRleHRfbWVudV9pdGVtX2dldF9zdWJtZW51KGl0ZW0pOwotICAgICAgICBnX2Fzc2VydChX
RUJLSVRfSVNfQ09OVEVYVF9NRU5VKHN1Yk1lbnUpKTsKLSAgICAgICAgaWYgKHN1Yk1lbnVJdGVy
KQotICAgICAgICAgICAgKnN1Yk1lbnVJdGVyID0gd2Via2l0X2NvbnRleHRfbWVudV9nZXRfaXRl
bXMoc3ViTWVudSk7Ci0KLSAgICAgICAgcmV0dXJuIGdfbGlzdF9uZXh0KGl0ZW1zKTsKLSAgICB9
Ci0KLSAgICBHTGlzdCogY2hlY2tDdXJyZW50SXRlbUlzU2VwYXJhdG9yQW5kR2V0TmV4dChHTGlz
dCogaXRlbXMpCi0gICAgewotICAgICAgICBnX2Fzc2VydChpdGVtcyk7Ci0gICAgICAgIGdfYXNz
ZXJ0KFdFQktJVF9JU19DT05URVhUX01FTlVfSVRFTShpdGVtcy0+ZGF0YSkpOwotCi0gICAgICAg
IFdlYktpdENvbnRleHRNZW51SXRlbSogaXRlbSA9IFdFQktJVF9DT05URVhUX01FTlVfSVRFTShp
dGVtcy0+ZGF0YSk7Ci0gICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9p
c19zZXBhcmF0b3IoaXRlbSkpOwotCi0gICAgICAgIHJldHVybiBnX2xpc3RfbmV4dChpdGVtcyk7
Ci0gICAgfQotCi0gICAgc3RhdGljIGdib29sZWFuIGRvUmlnaHRDbGlja0lkbGVDYWxsYmFjayhD
b250ZXh0TWVudVRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICB0ZXN0LT5jbGlja01vdXNlQnV0
dG9uKHRlc3QtPm1fbWVudVBvc2l0aW9uWCwgdGVzdC0+bV9tZW51UG9zaXRpb25ZLCAzKTsKLSAg
ICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQotICAgIHZvaWQgc2hvd0NvbnRleHRNZW51QXRQ
b3NpdGlvbkFuZFdhaXRVbnRpbEZpbmlzaGVkKGludCB4LCBpbnQgeSkKLSAgICB7Ci0gICAgICAg
IG1fbWVudVBvc2l0aW9uWCA9IHg7Ci0gICAgICAgIG1fbWVudVBvc2l0aW9uWSA9IHk7Ci0gICAg
ICAgIGdfaWRsZV9hZGQocmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oZG9SaWdodENsaWNr
SWRsZUNhbGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29w
KTsKLSAgICB9Ci0KLSAgICB2b2lkIHNob3dDb250ZXh0TWVudUFuZFdhaXRVbnRpbEZpbmlzaGVk
KCkKLSAgICB7Ci0gICAgICAgIHNob3dDb250ZXh0TWVudUF0UG9zaXRpb25BbmRXYWl0VW50aWxG
aW5pc2hlZCgwLCAwKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZ2Jvb2xlYW4gc2ltdWxhdGVFc2NL
ZXlJZGxlQ2FsbGJhY2soQ29udGV4dE1lbnVUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVz
dC0+a2V5U3Ryb2tlKEdES19LRVlfRXNjYXBlKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAg
IH0KLQotICAgIHZvaWQgZGlzbWlzc0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmluaXNoZWQoKQot
ICAgIHsKLSAgICAgICAgZ19pZGxlX2FkZChyZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihz
aW11bGF0ZUVzY0tleUlkbGVDYWxsYmFjayksIHRoaXMpOwotICAgICAgICBnX21haW5fbG9vcF9y
dW4obV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgZG91YmxlIG1fbWVudVBvc2l0aW9uWDsKLSAg
ICBkb3VibGUgbV9tZW51UG9zaXRpb25ZOwotfTsKLQotY2xhc3MgQ29udGV4dE1lbnVEZWZhdWx0
VGVzdDogcHVibGljIENvbnRleHRNZW51VGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RF
U1RfRklYVFVSRShDb250ZXh0TWVudURlZmF1bHRUZXN0KTsKLQotICAgIGVudW0gRGVmYXVsdE1l
bnVUeXBlIHsKLSAgICAgICAgTmF2aWdhdGlvbiwKLSAgICAgICAgTGluaywKLSAgICAgICAgSW1h
Z2UsCi0gICAgICAgIExpbmtJbWFnZSwKLSAgICAgICAgVmlkZW8sCi0gICAgICAgIEF1ZGlvLAot
ICAgICAgICBFZGl0YWJsZQotICAgIH07Ci0KLSAgICBDb250ZXh0TWVudURlZmF1bHRUZXN0KCkK
LSAgICAgICAgOiBtX2V4cGVjdGVkTWVudVR5cGUoTmF2aWdhdGlvbikKLSAgICB7Ci0gICAgfQot
Ci0gICAgYm9vbCBjb250ZXh0TWVudShXZWJLaXRDb250ZXh0TWVudSogY29udGV4dE1lbnUsIEdk
a0V2ZW50KiBldmVudCwgV2ViS2l0SGl0VGVzdFJlc3VsdCogaGl0VGVzdFJlc3VsdCkKLSAgICB7
Ci0gICAgICAgIEdMaXN0KiBpdGVyID0gd2Via2l0X2NvbnRleHRfbWVudV9nZXRfaXRlbXMoY29u
dGV4dE1lbnUpOwotCi0gICAgICAgIHN3aXRjaCAobV9leHBlY3RlZE1lbnVUeXBlKSB7Ci0gICAg
ICAgIGNhc2UgTmF2aWdhdGlvbjoKLSAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rl
c3RfcmVzdWx0X2NvbnRleHRfaXNfbGluayhoaXRUZXN0UmVzdWx0KSk7Ci0gICAgICAgICAgICBn
X2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdlKGhpdFRlc3RS
ZXN1bHQpKTsKLSAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2Nv
bnRleHRfaXNfbWVkaWEoaGl0VGVzdFJlc3VsdCkpOwotICAgICAgICAgICAgZ19hc3NlcnQoIXdl
YmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0UmVzdWx0KSk7
Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXRO
ZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0dPX0JBQ0ssIFZpc2libGUpOwot
ICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4
dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9HT19GT1JXQVJELCBWaXNpYmxlKTsK
LSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5l
eHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fU1RPUCwgVmlzaWJsZSk7Ci0gICAg
ICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0
ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1JFTE9BRCwgVmlzaWJsZSB8IEVuYWJsZWQp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTGluazoKLSAgICAgICAgICAgIGdf
YXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RSZXN1
bHQpKTsKLSAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRl
eHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkpOwotICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtp
dF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7Ci0gICAg
ICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRh
YmxlKGhpdFRlc3RSZXN1bHQpKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVt
SXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05f
T1BFTl9MSU5LLCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tD
dXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01F
TlVfQUNUSU9OX09QRU5fTElOS19JTl9ORVdfV0lORE9XLCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0g
ICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0
KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0RPV05MT0FEX0xJTktfVE9fRElTSywg
VmlzaWJsZSB8IEVuYWJsZWQpOwotICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1J
c1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9D
T1BZX0xJTktfVE9fQ0xJUEJPQVJELCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBJbWFnZToKLSAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRf
aGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluayhoaXRUZXN0UmVzdWx0KSk7Ci0gICAgICAg
ICAgICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0
VGVzdFJlc3VsdCkpOwotICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1
bHRfY29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgICAgICAgICBnX2Fzc2Vy
dCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1
bHQpKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFu
ZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9JTUFHRV9JTl9O
RVdfV0lORE9XLCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tD
dXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01F
TlVfQUNUSU9OX0RPV05MT0FEX0lNQUdFX1RPX0RJU0ssIFZpc2libGUgfCBFbmFibGVkKTsKLSAg
ICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQo
aXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9JTUFHRV9UT19DTElQQk9BUkQs
IFZpc2libGUgfCBFbmFibGVkKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVt
SXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05f
Q09QWV9JTUFHRV9VUkxfVE9fQ0xJUEJPQVJELCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBMaW5rSW1hZ2U6Ci0gICAgICAgICAgICBnX2Fzc2Vy
dCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluayhoaXRUZXN0UmVzdWx0KSk7
Ci0gICAgICAgICAgICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNf
aW1hZ2UoaGl0VGVzdFJlc3VsdCkpOwotICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRf
dGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgICAgICAg
ICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRhYmxlKGhp
dFRlc3RSZXN1bHQpKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9j
a0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9M
SU5LLCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50
SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNU
SU9OX09QRU5fTElOS19JTl9ORVdfV0lORE9XLCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAg
ICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIs
IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0RPV05MT0FEX0xJTktfVE9fRElTSywgVmlzaWJs
ZSB8IEVuYWJsZWQpOwotICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2Nr
QWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX0xJ
TktfVE9fQ0xJUEJPQVJELCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgICAgICBpdGVyID0g
Y2hlY2tDdXJyZW50SXRlbUlzU2VwYXJhdG9yQW5kR2V0TmV4dChpdGVyKTsKLSAgICAgICAgICAg
IGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VC
S0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9JTUFHRV9JTl9ORVdfV0lORE9XLCBWaXNpYmxl
IHwgRW5hYmxlZCk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tB
Y3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0RPV05MT0FE
X0lNQUdFX1RPX0RJU0ssIFZpc2libGUgfCBFbmFibGVkKTsKLSAgICAgICAgICAgIGl0ZXIgPSBj
aGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fQ09QWV9JTUFHRV9UT19DTElQQk9BUkQsIFZpc2libGUgfCBFbmFibGVk
KTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdl
dE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9JTUFHRV9VUkxfVE9f
Q0xJUEJPQVJELCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBWaWRlbzoKLSAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVz
dWx0X2NvbnRleHRfaXNfbGluayhoaXRUZXN0UmVzdWx0KSk7Ci0gICAgICAgICAgICBnX2Fzc2Vy
dCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQp
KTsKLSAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9p
c19tZWRpYShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hp
dF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKLSAgICAg
ICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRl
ciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fTUVESUFfUExBWSwgVmlzaWJsZSB8IEVuYWJs
ZWQpOwotICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5k
R2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9NRURJQV9NVVRFLCBWaXNp
YmxlKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFu
ZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fVE9HR0xFX01FRElBX0NP
TlRST0xTLCBWaXNpYmxlIHwgRW5hYmxlZCB8IENoZWNrZWQpOwotICAgICAgICAgICAgaXRlciA9
IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09O
VEVYVF9NRU5VX0FDVElPTl9UT0dHTEVfTUVESUFfTE9PUCwgVmlzaWJsZSB8IEVuYWJsZWQpOwot
ICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4
dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9FTlRFUl9WSURFT19GVUxMU0NSRUVO
LCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRl
bUlzU2VwYXJhdG9yQW5kR2V0TmV4dChpdGVyKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1
cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVO
VV9BQ1RJT05fQ09QWV9WSURFT19MSU5LX1RPX0NMSVBCT0FSRCwgVmlzaWJsZSB8IEVuYWJsZWQp
OwotICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0
TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX1ZJREVPX0lOX05FV19X
SU5ET1csIFZpc2libGUgfCBFbmFibGVkKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJl
bnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9B
Q1RJT05fRE9XTkxPQURfVklERU9fVE9fRElTSywgVmlzaWJsZSB8IEVuYWJsZWQpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXVkaW86Ci0gICAgICAgICAgICBnX2Fzc2VydCgh
d2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xpbmsoaGl0VGVzdFJlc3VsdCkpOwot
ICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19p
bWFnZShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgICAgICAgICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rl
c3RfcmVzdWx0X2NvbnRleHRfaXNfbWVkaWEoaGl0VGVzdFJlc3VsdCkpOwotICAgICAgICAgICAg
Z19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19lZGl0YWJsZShoaXRU
ZXN0UmVzdWx0KSk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tB
Y3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX01FRElBX1BM
QVksIFZpc2libGUgfCBFbmFibGVkKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJ
dGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T05fTUVESUFfTVVURSwgVmlzaWJsZSk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50
SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNU
SU9OX1RPR0dMRV9NRURJQV9DT05UUk9MUywgVmlzaWJsZSB8IEVuYWJsZWQgfCBDaGVja2VkKTsK
LSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5l
eHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fVE9HR0xFX01FRElBX0xPT1AsIFZp
c2libGUgfCBFbmFibGVkKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNT
dG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRU5U
RVJfVklERU9fRlVMTFNDUkVFTiwgVmlzaWJsZSk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tD
dXJyZW50SXRlbUlzU2VwYXJhdG9yQW5kR2V0TmV4dChpdGVyKTsKLSAgICAgICAgICAgIGl0ZXIg
PSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NP
TlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9BVURJT19MSU5LX1RPX0NMSVBCT0FSRCwgVmlzaWJsZSB8
IEVuYWJsZWQpOwotICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0
aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0FVRElP
X0lOX05FV19XSU5ET1csIFZpc2libGUgfCBFbmFibGVkKTsKLSAgICAgICAgICAgIGl0ZXIgPSBj
aGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fRE9XTkxPQURfQVVESU9fVE9fRElTSywgVmlzaWJsZSB8IEVuYWJsZWQp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRWRpdGFibGU6Ci0gICAgICAgICAg
ICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xpbmsoaGl0VGVz
dFJlc3VsdCkpOwotICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRf
Y29udGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgICAgICAgICBnX2Fzc2VydCgh
d2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQpKTsK
LSAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19l
ZGl0YWJsZShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50
SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNU
SU9OX0NVVCwgVmlzaWJsZSk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlz
U3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NP
UFksIFZpc2libGUpOwotICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2Nr
QWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9QQVNURSwg
VmlzaWJsZSB8IEVuYWJsZWQpOwotICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1J
c1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9E
RUxFVEUsIFZpc2libGUpOwotICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1Nl
cGFyYXRvckFuZEdldE5leHQoaXRlcik7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50
SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNU
SU9OX1NFTEVDVF9BTEwsIFZpc2libGUgfCBFbmFibGVkKTsKLSAgICAgICAgICAgIGl0ZXIgPSBj
aGVja0N1cnJlbnRJdGVtSXNTZXBhcmF0b3JBbmRHZXROZXh0KGl0ZXIpOwotICAgICAgICAgICAg
aWYgKHNob3VsZFNob3dJbnB1dE1ldGhvZHNNZW51KCkpCi0gICAgICAgICAgICAgICAgaXRlciA9
IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09O
VEVYVF9NRU5VX0FDVElPTl9JTlBVVF9NRVRIT0RTLCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAg
ICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0
ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1VOSUNPREUsIFZpc2libGUgfCBFbmFibGVk
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZ19h
c3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh3ZWJraXRfc2V0
dGluZ3NfZ2V0X2VuYWJsZV9kZXZlbG9wZXJfZXh0cmFzKHdlYmtpdF93ZWJfdmlld19nZXRfc2V0
dGluZ3MobV93ZWJWaWV3KSkpIHsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVt
SXNTZXBhcmF0b3JBbmRHZXROZXh0KGl0ZXIpOwotICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3Vy
cmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5V
X0FDVElPTl9JTlNQRUNUX0VMRU1FTlQsIFZpc2libGUgfCBFbmFibGVkKTsKLSAgICAgICAgfQot
ICAgICAgICBnX2Fzc2VydCghaXRlcik7Ci0KLSAgICAgICAgcXVpdE1haW5Mb29wKCk7Ci0KLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgRGVmYXVsdE1lbnVUeXBlIG1fZXhwZWN0
ZWRNZW51VHlwZTsKLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RDb250ZXh0TWVudURlZmF1bHRNZW51
KENvbnRleHRNZW51RGVmYXVsdFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVz
dC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7Ci0KLSAgICBjb25zdCBjaGFyKiBs
aW5rc0hUTUwgPQotICAgICAgICAiPGh0bWw+PGJvZHk+IgotICAgICAgICAiIDxhIHN0eWxlPSdw
b3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6MScgaHJlZj0naHR0cDovL3d3dy53ZWJraXRn
dGsub3JnJyB0aXRsZT0nV2ViS2l0R1RLKyBUaXRsZSc+V2ViS2l0R1RLKyBXZWJzaXRlPC9hPiIK
LSAgICAgICAgIiA8aW1nIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6MTAn
IHNyYz0nMHhkZWFkYmVlZicgd2lkdGg9NSBoZWlnaHQ9NT48L2ltZz4iCi0gICAgICAgICIgPGEg
c3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRvcDoyMCcgaHJlZj0naHR0cDovL3d3
dy53ZWJraXRndGsub3JnL2xvZ28nIHRpdGxlPSdXZWJLaXRHVEsrIExvZ28nPjxpbWcgc3JjPScw
eGRlYWRiZWVmJyB3aWR0aD01IGhlaWdodD01PjwvaW1nPjwvYT4iCi0gICAgICAgICIgPGlucHV0
IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6MzAnIHNpemU9JzEwJz48L2lu
cHV0PiIKLSAgICAgICAgIiA8dmlkZW8gc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7
IHRvcDo1MCcgd2lkdGg9JzMwMCcgaGVpZ2h0PSczMDAnIGNvbnRyb2xzPSdjb250cm9scycgcHJl
bG9hZD0nbm9uZSc+PHNvdXJjZSBzcmM9J21vdmllLm9nZycgdHlwZT0ndmlkZW8vb2dnJyAvPjwv
dmlkZW8+IgotICAgICAgICAiIDxhdWRpbyBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6
MTsgdG9wOjYwJyB3aWR0aD0nNTAnIGhlaWdodD0nMjAnIGNvbnRyb2xzPSdjb250cm9scycgcHJl
bG9hZD0nbm9uZSc+PHNvdXJjZSBzcmM9J3RyYWNrLm1wMycgdHlwZT0nYXVkaW8vbXAzJyAvPjwv
YXVkaW8+IgotICAgICAgICAiPC9ib2R5PjwvaHRtbD4iOwotICAgIHRlc3QtPmxvYWRIdG1sKGxp
bmtzSFRNTCwgImZpbGU6Ly8vIik7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7
Ci0KLSAgICAvLyBDb250ZXh0IG1lbnUgZm9yIGRvY3VtZW50LgotICAgIHRlc3QtPm1fZXhwZWN0
ZWRNZW51VHlwZSA9IENvbnRleHRNZW51RGVmYXVsdFRlc3Q6Ok5hdmlnYXRpb247Ci0gICAgdGVz
dC0+c2hvd0NvbnRleHRNZW51QXRQb3NpdGlvbkFuZFdhaXRVbnRpbEZpbmlzaGVkKDAsIDApOwot
Ci0gICAgLy8gQ29udGV4dCBtZW51IGZvciBsaW5rLgotICAgIHRlc3QtPm1fZXhwZWN0ZWRNZW51
VHlwZSA9IENvbnRleHRNZW51RGVmYXVsdFRlc3Q6Okxpbms7Ci0gICAgdGVzdC0+c2hvd0NvbnRl
eHRNZW51QXRQb3NpdGlvbkFuZFdhaXRVbnRpbEZpbmlzaGVkKDEsIDEpOwotCi0gICAgLy8gQ29u
dGV4dCBtZW51IGZvciBpbWFnZS4KLSAgICB0ZXN0LT5tX2V4cGVjdGVkTWVudVR5cGUgPSBDb250
ZXh0TWVudURlZmF1bHRUZXN0OjpJbWFnZTsKLSAgICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBdFBv
c2l0aW9uQW5kV2FpdFVudGlsRmluaXNoZWQoMSwgMTApOwotCi0gICAgLy8gRW5hYmxlIGRldmVs
b3BlciBleHRyYXMgbm93LCBzbyB0aGF0IGluc3BlY3RvciBlbGVtZW50Ci0gICAgLy8gd2lsbCBi
ZSBzaG93biBpbiB0aGUgZGVmYXVsdCBjb250ZXh0IG1lbnUuCi0gICAgd2Via2l0X3NldHRpbmdz
X3NldF9lbmFibGVfZGV2ZWxvcGVyX2V4dHJhcyh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdz
KHRlc3QtPm1fd2ViVmlldyksIFRSVUUpOwotCi0gICAgLy8gQ29udGV4dCBtZW51IGZvciBpbWFn
ZSBsaW5rLgotICAgIHRlc3QtPm1fZXhwZWN0ZWRNZW51VHlwZSA9IENvbnRleHRNZW51RGVmYXVs
dFRlc3Q6OkxpbmtJbWFnZTsKLSAgICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBdFBvc2l0aW9uQW5k
V2FpdFVudGlsRmluaXNoZWQoMSwgMjApOwotCi0gICAgLy8gQ29udGV4dCBtZW51IGZvciB2aWRl
by4KLSAgICB0ZXN0LT5tX2V4cGVjdGVkTWVudVR5cGUgPSBDb250ZXh0TWVudURlZmF1bHRUZXN0
OjpWaWRlbzsKLSAgICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBdFBvc2l0aW9uQW5kV2FpdFVudGls
RmluaXNoZWQoMSwgNTApOwotCi0gICAgLy8gQ29udGV4dCBtZW51IGZvciBhdWRpby4KLSAgICB0
ZXN0LT5tX2V4cGVjdGVkTWVudVR5cGUgPSBDb250ZXh0TWVudURlZmF1bHRUZXN0OjpBdWRpbzsK
LSAgICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBdFBvc2l0aW9uQW5kV2FpdFVudGlsRmluaXNoZWQo
MSwgNjApOwotCi0gICAgLy8gQ29udGV4dCBtZW51IGZvciBlZGl0YWJsZS4KLSAgICB0ZXN0LT5t
X2V4cGVjdGVkTWVudVR5cGUgPSBDb250ZXh0TWVudURlZmF1bHRUZXN0OjpFZGl0YWJsZTsKLSAg
ICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBdFBvc2l0aW9uQW5kV2FpdFVudGlsRmluaXNoZWQoNSwg
MzUpOwotfQotCi1jbGFzcyBDb250ZXh0TWVudUN1c3RvbVRlc3Q6IHB1YmxpYyBDb250ZXh0TWVu
dVRlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoQ29udGV4dE1lbnVD
dXN0b21UZXN0KTsKLQotICAgIENvbnRleHRNZW51Q3VzdG9tVGVzdCgpCi0gICAgICAgIDogbV9p
dGVtVG9BY3RpdmF0ZUxhYmVsKDApCi0gICAgICAgICwgbV9hY3RpdmF0ZWQoZmFsc2UpCi0gICAg
ICAgICwgbV90b2dnbGVkKGZhbHNlKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGNvbnRleHRN
ZW51KFdlYktpdENvbnRleHRNZW51KiBjb250ZXh0TWVudSwgR2RrRXZlbnQqLCBXZWJLaXRIaXRU
ZXN0UmVzdWx0KiBoaXRUZXN0UmVzdWx0KQotICAgIHsKLSAgICAgICAgLy8gQXBwZW5kIG91ciBj
dXN0b20gaXRlbSB0byB0aGUgZGVmYXVsdCBtZW51LgotICAgICAgICB3ZWJraXRfY29udGV4dF9t
ZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ldyhtX2Fj
dGlvbi5nZXQoKSkpOwotICAgICAgICBxdWl0TWFpbkxvb3AoKTsKLQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgR3RrTWVudUl0ZW0qIGdldE1lbnVJdGVtKEd0a01lbnUqIG1l
bnUsIGNvbnN0IGdjaGFyKiBpdGVtTGFiZWwpCi0gICAgewotICAgICAgICBHT3duUHRyPEdMaXN0
PiBpdGVtcyhndGtfY29udGFpbmVyX2dldF9jaGlsZHJlbihHVEtfQ09OVEFJTkVSKG1lbnUpKSk7
Ci0gICAgICAgIGZvciAoR0xpc3QqIGl0ZXIgPSBpdGVtcy5nZXQoKTsgaXRlcjsgaXRlciA9IGdf
bGlzdF9uZXh0KGl0ZXIpKSB7Ci0gICAgICAgICAgICBHdGtNZW51SXRlbSogY2hpbGQgPSBHVEtf
TUVOVV9JVEVNKGl0ZXItPmRhdGEpOwotICAgICAgICAgICAgaWYgKGdfc3RyX2VxdWFsKGl0ZW1M
YWJlbCwgZ3RrX21lbnVfaXRlbV9nZXRfbGFiZWwoY2hpbGQpKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gY2hpbGQ7Ci0gICAgICAgIH0KLSAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgdm9pZCBhY3RpdmF0ZU1lbnVJdGVtKCkK
LSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0KG1faXRlbVRvQWN0aXZhdGVMYWJlbCk7Ci0gICAgICAg
IEd0a01lbnUqIG1lbnUgPSBnZXRQb3B1cE1lbnUoKTsKLSAgICAgICAgR3RrTWVudUl0ZW0qIGl0
ZW0gPSBnZXRNZW51SXRlbShtZW51LCBtX2l0ZW1Ub0FjdGl2YXRlTGFiZWwpOwotICAgICAgICBn
dGtfbWVudV9zaGVsbF9hY3RpdmF0ZV9pdGVtKEdUS19NRU5VX1NIRUxMKG1lbnUpLCBHVEtfV0lE
R0VUKGl0ZW0pLCBUUlVFKTsKLSAgICAgICAgbV9pdGVtVG9BY3RpdmF0ZUxhYmVsID0gMDsKLSAg
ICB9Ci0KLSAgICBzdGF0aWMgZ2Jvb2xlYW4gYWN0aXZhdGVNZW51SXRlbUlkbGVDYWxsYmFjayhn
cG9pbnRlciB1c2VyRGF0YSkKLSAgICB7Ci0gICAgICAgIENvbnRleHRNZW51Q3VzdG9tVGVzdCog
dGVzdCA9IHN0YXRpY19jYXN0PENvbnRleHRNZW51Q3VzdG9tVGVzdCo+KHVzZXJEYXRhKTsKLSAg
ICAgICAgdGVzdC0+YWN0aXZhdGVNZW51SXRlbSgpOwotICAgICAgICByZXR1cm4gRkFMU0U7Ci0g
ICAgfQotCi0gICAgdm9pZCBhY3RpdmF0ZUN1c3RvbU1lbnVJdGVtQW5kV2FpdFVudGlsQWN0aXZh
dGVkKGNvbnN0IGNoYXIqIGFjdGlvbkxhYmVsKQotICAgIHsKLSAgICAgICAgbV9hY3RpdmF0ZWQg
PSBtX3RvZ2dsZWQgPSBmYWxzZTsKLSAgICAgICAgbV9pdGVtVG9BY3RpdmF0ZUxhYmVsID0gYWN0
aW9uTGFiZWw7Ci0gICAgICAgIGdfaWRsZV9hZGQoYWN0aXZhdGVNZW51SXRlbUlkbGVDYWxsYmFj
aywgdGhpcyk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAgICB9Ci0K
LSAgICB2b2lkIHRvZ2dsZUN1c3RvbU1lbnVJdGVtQW5kV2FpdFVudGlsVG9nZ2xlZChjb25zdCBj
aGFyKiBhY3Rpb25MYWJlbCkKLSAgICB7Ci0gICAgICAgIGFjdGl2YXRlQ3VzdG9tTWVudUl0ZW1B
bmRXYWl0VW50aWxBY3RpdmF0ZWQoYWN0aW9uTGFiZWwpOwotICAgIH0KLQotICAgIHN0YXRpYyB2
b2lkIGFjdGlvbkFjdGl2YXRlZENhbGxiYWNrKEd0a0FjdGlvbiosIENvbnRleHRNZW51Q3VzdG9t
VGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHRlc3QtPm1fYWN0aXZhdGVkID0gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBhY3Rpb25Ub2dnbGVkQ2FsbGJhY2soR3RrQWN0aW9uKiwg
Q29udGV4dE1lbnVDdXN0b21UZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+bV90b2dn
bGVkID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldEFjdGlvbihHdGtBY3Rpb24qIGFjdGlv
bikKLSAgICB7Ci0gICAgICAgIG1fYWN0aW9uID0gYWN0aW9uOwotICAgICAgICBpZiAoR1RLX0lT
X1RPR0dMRV9BQ1RJT04oYWN0aW9uKSkKLSAgICAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoYWN0
aW9uLCAidG9nZ2xlZCIsIEdfQ0FMTEJBQ0soYWN0aW9uVG9nZ2xlZENhbGxiYWNrKSwgdGhpcyk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoYWN0aW9uLCAiYWN0
aXZhdGUiLCBHX0NBTExCQUNLKGFjdGlvbkFjdGl2YXRlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAg
fQotCi0gICAgR1JlZlB0cjxHdGtBY3Rpb24+IG1fYWN0aW9uOwotICAgIGNvbnN0IGNoYXIqIG1f
aXRlbVRvQWN0aXZhdGVMYWJlbDsKLSAgICBib29sIG1fYWN0aXZhdGVkOwotICAgIGJvb2wgbV90
b2dnbGVkOwotfTsKLQotc3RhdGljIHZvaWQgdGVzdENvbnRleHRNZW51UG9wdWxhdGVNZW51KENv
bnRleHRNZW51Q3VzdG9tVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5z
aG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKLQotICAgIHRlc3QtPmxvYWRIdG1sKCI8
aHRtbD48Ym9keT5XZWJLaXRHVEsrIENvbnRleHQgbWVudSB0ZXN0czwvYm9keT48L2h0bWw+Iiwg
ImZpbGU6Ly8vIik7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICAv
LyBDcmVhdGUgYSBjdXN0b20gbWVudSBpdGVtLgotICAgIEdSZWZQdHI8R3RrQWN0aW9uPiBhY3Rp
b24gPSBhZG9wdEdSZWYoZ3RrX2FjdGlvbl9uZXcoIldlYktpdEdUSytDdXN0b21BY3Rpb24iLCAi
Q3VzdG9tIF9BY3Rpb24iLCAwLCAwKSk7Ci0gICAgdGVzdC0+c2V0QWN0aW9uKGFjdGlvbi5nZXQo
KSk7Ci0gICAgdGVzdC0+c2hvd0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmluaXNoZWQoKTsKLSAg
ICB0ZXN0LT5hY3RpdmF0ZUN1c3RvbU1lbnVJdGVtQW5kV2FpdFVudGlsQWN0aXZhdGVkKGd0a19h
Y3Rpb25fZ2V0X2xhYmVsKGFjdGlvbi5nZXQoKSkpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fYWN0
aXZhdGVkKTsKLSAgICBnX2Fzc2VydCghdGVzdC0+bV90b2dnbGVkKTsKLQotICAgIC8vIENyZWF0
ZSBhIGN1c3RvbSB0b2dnbGUgbWVudSBpdGVtLgotICAgIEdSZWZQdHI8R3RrQWN0aW9uPiB0b2dn
bGVBY3Rpb24gPSBhZG9wdEdSZWYoR1RLX0FDVElPTihndGtfdG9nZ2xlX2FjdGlvbl9uZXcoIldl
YktpdEdUSytDdXN0b21Ub2dnbGVBY3Rpb24iLCAiQ3VzdG9tIF9Ub2dnbGUgQWN0aW9uIiwgMCwg
MCkpKTsKLSAgICB0ZXN0LT5zZXRBY3Rpb24odG9nZ2xlQWN0aW9uLmdldCgpKTsKLSAgICB0ZXN0
LT5zaG93Q29udGV4dE1lbnVBbmRXYWl0VW50aWxGaW5pc2hlZCgpOwotICAgIHRlc3QtPnRvZ2ds
ZUN1c3RvbU1lbnVJdGVtQW5kV2FpdFVudGlsVG9nZ2xlZChndGtfYWN0aW9uX2dldF9sYWJlbCh0
b2dnbGVBY3Rpb24uZ2V0KCkpKTsKLSAgICBnX2Fzc2VydCghdGVzdC0+bV9hY3RpdmF0ZWQpOwot
ICAgIGdfYXNzZXJ0KHRlc3QtPm1fdG9nZ2xlZCk7Ci19Ci0KLWNsYXNzIENvbnRleHRNZW51Q3Vz
dG9tRnVsbFRlc3Q6IHB1YmxpYyBDb250ZXh0TWVudVRlc3QgewotcHVibGljOgotICAgIE1BS0Vf
R0xJQl9URVNUX0ZJWFRVUkUoQ29udGV4dE1lbnVDdXN0b21GdWxsVGVzdCk7Ci0KLSAgICBib29s
IGNvbnRleHRNZW51KFdlYktpdENvbnRleHRNZW51KiBjb250ZXh0TWVudSwgR2RrRXZlbnQqLCBX
ZWJLaXRIaXRUZXN0UmVzdWx0KikKLSAgICB7Ci0gICAgICAgIC8vIENsZWFyIHByb3Bvc2VkIG1l
bnUgYW5kIGJ1aWxkIG91ciBvd24uCi0gICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfcmVtb3Zl
X2FsbChjb250ZXh0TWVudSk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfY29udGV4
dF9tZW51X2dldF9uX2l0ZW1zKGNvbnRleHRNZW51KSwgPT0sIDApOwotCi0gICAgICAgIC8vIEFk
ZCBhY3Rpb25zIGZyb20gc3RvY2suCi0gICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfcHJlcGVu
ZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19mcm9tX3N0b2NrX2Fj
dGlvbihXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9HT19CQUNLKSk7Ci0gICAgICAgIHdlYmtp
dF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0
ZW1fbmV3X2Zyb21fc3RvY2tfYWN0aW9uKFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0dPX0ZP
UldBUkQpKTsKLSAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9pbnNlcnQoY29udGV4dE1lbnUs
IHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfc2VwYXJhdG9yKCksIDIpOwotCi0gICAgICAg
IC8vIEFkZCBjdXN0b20gYWN0aW9ucy4KLSAgICAgICAgR1JlZlB0cjxHdGtBY3Rpb24+IGFjdGlv
biA9IGFkb3B0R1JlZihndGtfYWN0aW9uX25ldygiV2ViS2l0R1RLK0N1c3RvbUFjdGlvbiIsICJD
dXN0b20gX0FjdGlvbiIsIDAsIDApKTsKLSAgICAgICAgZ3RrX2FjdGlvbl9zZXRfc2Vuc2l0aXZl
KGFjdGlvbi5nZXQoKSwgRkFMU0UpOwotICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2luc2Vy
dChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ldyhhY3Rpb24uZ2V0KCkp
LCAtMSk7Ci0gICAgICAgIEdSZWZQdHI8R3RrQWN0aW9uPiB0b2dnbGVBY3Rpb24gPSBhZG9wdEdS
ZWYoR1RLX0FDVElPTihndGtfdG9nZ2xlX2FjdGlvbl9uZXcoIldlYktpdEdUSytDdXN0b21Ub2dn
bGVBY3Rpb24iLCAiQ3VzdG9tIF9Ub2dnbGUgQWN0aW9uIiwgMCwgMCkpKTsKLSAgICAgICAgZ3Rr
X3RvZ2dsZV9hY3Rpb25fc2V0X2FjdGl2ZShHVEtfVE9HR0xFX0FDVElPTih0b2dnbGVBY3Rpb24u
Z2V0KCkpLCBUUlVFKTsKLSAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBlbmQoY29udGV4
dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXcodG9nZ2xlQWN0aW9uLmdldCgpKSk7
Ci0gICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRf
Y29udGV4dF9tZW51X2l0ZW1fbmV3X3NlcGFyYXRvcigpKTsKLQotICAgICAgICAvLyBBZGQgYSBz
dWJtZW51LgotICAgICAgICBHUmVmUHRyPFdlYktpdENvbnRleHRNZW51PiBzdWJNZW51ID0gYWRv
cHRHUmVmKHdlYmtpdF9jb250ZXh0X21lbnVfbmV3KCkpOwotICAgICAgICBhc3NlcnRPYmplY3RJ
c0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHN1Yk1lbnUuZ2V0KCkpKTsKLSAgICAg
ICAgd2Via2l0X2NvbnRleHRfbWVudV9pbnNlcnQoc3ViTWVudS5nZXQoKSwgd2Via2l0X2NvbnRl
eHRfbWVudV9pdGVtX25ld19mcm9tX3N0b2NrX2FjdGlvbl93aXRoX2xhYmVsKFdFQktJVF9DT05U
RVhUX01FTlVfQUNUSU9OX1NUT1AsICJTdG9wIExvYWQiKSwgMCk7Ci0gICAgICAgIHdlYmtpdF9j
b250ZXh0X21lbnVfaW5zZXJ0KHN1Yk1lbnUuZ2V0KCksIHdlYmtpdF9jb250ZXh0X21lbnVfaXRl
bV9uZXdfZnJvbV9zdG9ja19hY3Rpb24oV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fUkVMT0FE
KSwgLTEpOwotICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwg
d2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld193aXRoX3N1Ym1lbnUoIkxvYWQgb3B0aW9ucyIs
IHN1Yk1lbnUuZ2V0KCkpKTsKLSAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBlbmQoY29u
dGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfc2VwYXJhdG9yKCkpOwotCi0g
ICAgICAgIC8vIE1vdmUgTG9hZCBzdWJtZW51IGJlZm9yZSBjdXN0b20gYWN0aW9ucy4KLSAgICAg
ICAgd2Via2l0X2NvbnRleHRfbWVudV9tb3ZlX2l0ZW0oY29udGV4dE1lbnUsIHdlYmtpdF9jb250
ZXh0X21lbnVfbGFzdChjb250ZXh0TWVudSksIDMpOwotICAgICAgICB3ZWJraXRfY29udGV4dF9t
ZW51X21vdmVfaXRlbShjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9sYXN0KGNvbnRl
eHRNZW51KSwgMyk7Ci0KLSAgICAgICAgLy8gSWYgbGFzdCBpdGVtIGlzIGEgc2VwYXJhdG9yLCBy
ZW1vdmUgaXQuCi0gICAgICAgIGlmICh3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1faXNfc2VwYXJh
dG9yKHdlYmtpdF9jb250ZXh0X21lbnVfbGFzdChjb250ZXh0TWVudSkpKQotICAgICAgICAgICAg
d2Via2l0X2NvbnRleHRfbWVudV9yZW1vdmUoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21l
bnVfbGFzdChjb250ZXh0TWVudSkpOwotCi0gICAgICAgIC8vIENoZWNrIHRoZSBtZW51LgotICAg
ICAgICBHTGlzdCogaXRlciA9IHdlYmtpdF9jb250ZXh0X21lbnVfZ2V0X2l0ZW1zKGNvbnRleHRN
ZW51KTsKLQotICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRH
ZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0dPX0JBQ0ssIFZpc2libGUg
fCBFbmFibGVkKTsKLSAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9u
QW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9HT19GT1JXQVJELCBW
aXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTZXBh
cmF0b3JBbmRHZXROZXh0KGl0ZXIpOwotCi0gICAgICAgIEdMaXN0KiBzdWJNZW51SXRlciA9IDA7
Ci0gICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdWJNZW51QW5kR2V0TmV4dChpdGVy
LCAiTG9hZCBvcHRpb25zIiwgVmlzaWJsZSB8IEVuYWJsZWQsICZzdWJNZW51SXRlcik7Ci0gICAg
ICAgIHN1Yk1lbnVJdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0
KHN1Yk1lbnVJdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9TVE9QLCBWaXNpYmxlIHwg
RW5hYmxlZCk7Ci0gICAgICAgIHN1Yk1lbnVJdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tB
Y3Rpb25BbmRHZXROZXh0KHN1Yk1lbnVJdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9S
RUxPQUQsIFZpc2libGUgfCBFbmFibGVkKTsKLSAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0
ZW1Jc1NlcGFyYXRvckFuZEdldE5leHQoaXRlcik7Ci0KLSAgICAgICAgaXRlciA9IGNoZWNrQ3Vy
cmVudEl0ZW1Jc0N1c3RvbUFjdGlvbkFuZEdldE5leHQoaXRlciwgIkN1c3RvbSBfQWN0aW9uIiwg
VmlzaWJsZSk7Ci0gICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNDdXN0b21BY3Rpb25B
bmRHZXROZXh0KGl0ZXIsICJDdXN0b20gX1RvZ2dsZSBBY3Rpb24iLCBWaXNpYmxlIHwgRW5hYmxl
ZCB8IENoZWNrZWQpOwotICAgICAgICBnX2Fzc2VydCghaXRlcik7Ci0KLSAgICAgICAgcXVpdE1h
aW5Mb29wKCk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotfTsKLQotc3RhdGljIHZv
aWQgdGVzdENvbnRleHRNZW51Q3VzdG9tTWVudShDb250ZXh0TWVudUN1c3RvbUZ1bGxUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRp
bE1hcHBlZCgpOwotCi0gICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxib2R5PldlYktpdEdUSysg
Q29udGV4dCBtZW51IHRlc3RzPC9ib2R5PjwvaHRtbD4iLCAiZmlsZTovLy8iKTsKLSAgICB0ZXN0
LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIHRlc3QtPnNob3dDb250ZXh0TWVudUFu
ZFdhaXRVbnRpbEZpbmlzaGVkKCk7Ci19Ci0KLWNsYXNzIENvbnRleHRNZW51RGlzYWJsZWRUZXN0
OiBwdWJsaWMgQ29udGV4dE1lbnVUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9G
SVhUVVJFKENvbnRleHRNZW51RGlzYWJsZWRUZXN0KTsKLQotICAgIGVudW0gRGlzYWJsZU1vZGUg
ewotICAgICAgICBJZ25vcmVDbGlja3MsCi0gICAgICAgIElnbm9yZURlZmF1bHRNZW51Ci0gICAg
fTsKLQotICAgIHN0YXRpYyBnYm9vbGVhbiBidXR0b25QcmVzc0V2ZW50Q2FsbGJhY2soR3RrV2lk
Z2V0KiwgR2RrRXZlbnQqIGV2ZW50LCBDb250ZXh0TWVudURpc2FibGVkVGVzdCogdGVzdCkKLSAg
ICB7Ci0gICAgICAgIGlmIChldmVudC0+YnV0dG9uLmJ1dHRvbiAhPSAzKQotICAgICAgICAgICAg
cmV0dXJuIEZBTFNFOwotICAgICAgICByZXR1cm4gdGVzdC0+cmlnaHRCdXR0b25QcmVzc2VkKCk7
Ci0gICAgfQotCi0gICAgQ29udGV4dE1lbnVEaXNhYmxlZFRlc3QoKQotICAgICAgICA6IG1fZGlz
YWJsZU1vZGUoSWdub3JlQ2xpY2tzKQotICAgIHsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdCht
X3dlYlZpZXcsICJidXR0b24tcHJlc3MtZXZlbnQiLCBHX0NBTExCQUNLKGJ1dHRvblByZXNzRXZl
bnRDYWxsYmFjayksIHRoaXMpOwotICAgIH0KLQotICAgIGJvb2wgY29udGV4dE1lbnUoV2ViS2l0
Q29udGV4dE1lbnUqIGNvbnRleHRNZW51LCBHZGtFdmVudCosIFdlYktpdEhpdFRlc3RSZXN1bHQq
KQotICAgIHsKLSAgICAgICAgaWYgKG1fZGlzYWJsZU1vZGUgPT0gSWdub3JlQ2xpY2tzKQotICAg
ICAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgcXVpdE1haW5Mb29wKCk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAg
Ym9vbCByaWdodEJ1dHRvblByZXNzZWQoKQotICAgIHsKLSAgICAgICAgaWYgKG1fZGlzYWJsZU1v
ZGUgPT0gSWdub3JlQ2xpY2tzKSB7Ci0gICAgICAgICAgICBxdWl0TWFpbkxvb3BBZnRlclByb2Nl
c3NpbmdQZW5kaW5nRXZlbnRzKCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgRGlzYWJsZU1vZGUgbV9kaXNh
YmxlTW9kZTsKLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RDb250ZXh0TWVudURpc2FibGVNZW51KENv
bnRleHRNZW51RGlzYWJsZWRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3Qt
PnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOwotCi0gICAgdGVzdC0+bG9hZEh0bWwo
IjxodG1sPjxib2R5PldlYktpdEdUSysgQ29udGV4dCBtZW51IHRlc3RzPC9ib2R5PjwvaHRtbD4i
LCAiZmlsZTovLy8iKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAg
IHRlc3QtPm1fZGlzYWJsZU1vZGUgPSBDb250ZXh0TWVudURpc2FibGVkVGVzdDo6SWdub3JlRGVm
YXVsdE1lbnU7Ci0gICAgdGVzdC0+c2hvd0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmluaXNoZWQo
KTsKLQotICAgIHRlc3QtPm1fZGlzYWJsZU1vZGUgPSBDb250ZXh0TWVudURpc2FibGVkVGVzdDo6
SWdub3JlQ2xpY2tzOwotICAgIHRlc3QtPnNob3dDb250ZXh0TWVudUFuZFdhaXRVbnRpbEZpbmlz
aGVkKCk7Ci19Ci0KLWNsYXNzIENvbnRleHRNZW51U3VibWVudVRlc3Q6IHB1YmxpYyBDb250ZXh0
TWVudVRlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoQ29udGV4dE1l
bnVTdWJtZW51VGVzdCk7Ci0KLSAgICBib29sIGNvbnRleHRNZW51KFdlYktpdENvbnRleHRNZW51
KiBjb250ZXh0TWVudSwgR2RrRXZlbnQqLCBXZWJLaXRIaXRUZXN0UmVzdWx0KikKLSAgICB7Ci0g
ICAgICAgIHNpemVfdCBtZW51U2l6ZSA9IHdlYmtpdF9jb250ZXh0X21lbnVfZ2V0X25faXRlbXMo
Y29udGV4dE1lbnUpOwotICAgICAgICBHUmVmUHRyPFdlYktpdENvbnRleHRNZW51PiBzdWJNZW51
ID0gYWRvcHRHUmVmKHdlYmtpdF9jb250ZXh0X21lbnVfbmV3KCkpOwotICAgICAgICB3ZWJraXRf
Y29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVt
X25ld193aXRoX3N1Ym1lbnUoIlN1Yk1lbnVJdGVtIiwgc3ViTWVudS5nZXQoKSkpOwotICAgICAg
ICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9jb250ZXh0X21lbnVfZ2V0X25faXRlbXMoY29udGV4
dE1lbnUpLCA9PSwgbWVudVNpemUgKyAxKTsKLQotICAgICAgICBHUmVmUHRyPFdlYktpdENvbnRl
eHRNZW51PiBzdWJNZW51MiA9IGFkb3B0R1JlZih3ZWJraXRfY29udGV4dF9tZW51X25ldygpKTsK
LSAgICAgICAgR1JlZlB0cjxXZWJLaXRDb250ZXh0TWVudUl0ZW0+IGl0ZW0gPSB3ZWJraXRfY29u
dGV4dF9tZW51X2l0ZW1fbmV3X2Zyb21fc3RvY2tfYWN0aW9uKFdFQktJVF9DT05URVhUX01FTlVf
QUNUSU9OX09QRU5fTElOSyk7Ci0KLSAgICAgICAgLy8gQWRkIHN1Ym1lbnUgdG8gbmV3bHkgY3Jl
YXRlZCBpdGVtLgotICAgICAgICBnX2Fzc2VydCghd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dl
dF9zdWJtZW51KGl0ZW0uZ2V0KCkpKTsKLSAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9pdGVt
X3NldF9zdWJtZW51KGl0ZW0uZ2V0KCksIHN1Yk1lbnUyLmdldCgpKTsKLSAgICAgICAgZ19hc3Nl
cnQod2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9zdWJtZW51KGl0ZW0uZ2V0KCkpID09IHN1
Yk1lbnUyLmdldCgpKTsKLQotICAgICAgICAvLyBSZXBsYWNlIHRoZSBzdWJtZW51LgotICAgICAg
ICB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fc2V0X3N1Ym1lbnUoaXRlbS5nZXQoKSwgMCk7Ci0g
ICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X3N1Ym1lbnUoaXRl
bS5nZXQoKSkpOwotCi0gICAgICAgIC8vIFRyeSB0byBhZGQgYSBzdWJtZW51IGFscmVhZHkgYWRk
ZWQgdG8gYW5vdGhlciBpdGVtLgotICAgICAgICByZW1vdmVMb2dGYXRhbEZsYWcoR19MT0dfTEVW
RUxfV0FSTklORyk7Ci0gICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9zZXRfc3VibWVu
dShpdGVtLmdldCgpLCBzdWJNZW51LmdldCgpKTsKLSAgICAgICAgYWRkTG9nRmF0YWxGbGFnKEdf
TE9HX0xFVkVMX1dBUk5JTkcpOwotICAgICAgICBnX2Fzc2VydCghd2Via2l0X2NvbnRleHRfbWVu
dV9pdGVtX2dldF9zdWJtZW51KGl0ZW0uZ2V0KCkpKTsKLQotICAgICAgICAvLyBBIHJlbW92ZWQg
c3VibWVudSBzaG91bGRuJ3QgaGF2ZSBhIHBhcmVudC4KLSAgICAgICAgd2Via2l0X2NvbnRleHRf
bWVudV9pdGVtX3NldF9zdWJtZW51KGl0ZW0uZ2V0KCksIHN1Yk1lbnUyLmdldCgpKTsKLSAgICAg
ICAgZ19hc3NlcnQod2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9zdWJtZW51KGl0ZW0uZ2V0
KCkpID09IHN1Yk1lbnUyLmdldCgpKTsKLQotICAgICAgICBxdWl0TWFpbkxvb3AoKTsKLQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0Q29udGV4dE1l
bnVTdWJNZW51KENvbnRleHRNZW51U3VibWVudVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17
Ci0gICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7Ci0KLSAgICB0ZXN0
LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHk+V2ViS2l0R1RLKyBDb250ZXh0IG1lbnUgdGVzdHM8L2Jv
ZHk+PC9odG1sPiIsICJmaWxlOi8vLyIpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hl
ZCgpOwotCi0gICAgdGVzdC0+c2hvd0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmluaXNoZWQoKTsK
LX0KLQotY2xhc3MgQ29udGV4dE1lbnVEaXNtaXNzZWRUZXN0OiBwdWJsaWMgQ29udGV4dE1lbnVU
ZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKENvbnRleHRNZW51RGlz
bWlzc2VkVGVzdCk7Ci0KLSAgICBDb250ZXh0TWVudURpc21pc3NlZFRlc3QoKQotICAgICAgICA6
IG1fZGlzbWlzc2VkKGZhbHNlKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGNvbnRleHRNZW51
KFdlYktpdENvbnRleHRNZW51KiBjb250ZXh0TWVudSwgR2RrRXZlbnQqLCBXZWJLaXRIaXRUZXN0
UmVzdWx0KikKLSAgICB7Ci0gICAgICAgIHF1aXRNYWluTG9vcCgpOwotICAgICAgICAvLyBTaG93
IHRoZSBkZWZhdWx0IGNvbnRleHQgbWVudS4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIHZvaWQgY29udGV4dE1lbnVEaXNtaXNzZWQoKQotICAgIHsKLSAgICAgICAgbV9kaXNt
aXNzZWQgPSB0cnVlOwotICAgICAgICBDb250ZXh0TWVudVRlc3Q6OmNvbnRleHRNZW51RGlzbWlz
c2VkKCk7Ci0gICAgfQotCi0gICAgdm9pZCBzaG93Q29udGV4dE1lbnVBbmRXYWl0VW50aWxEaXNt
aXNzZWQoKQotICAgIHsKLSAgICAgICAgc2hvd0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmluaXNo
ZWQoKTsKLSAgICAgICAgZGlzbWlzc0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmluaXNoZWQoKTsK
LSAgICB9Ci0KLSAgICBib29sIG1fZGlzbWlzc2VkOwotfTsKLQotc3RhdGljIHZvaWQgdGVzdENv
bnRleHRNZW51RGlzbWlzc2VkKENvbnRleHRNZW51RGlzbWlzc2VkVGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsK
LQotICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keT5XZWJLaXRHVEsrIENvbnRleHQgbWVu
dSB0ZXN0czwvYm9keT48L2h0bWw+IiwgImZpbGU6Ly8vIik7Ci0gICAgdGVzdC0+d2FpdFVudGls
TG9hZEZpbmlzaGVkKCk7Ci0KLSAgICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBbmRXYWl0VW50aWxE
aXNtaXNzZWQoKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX2Rpc21pc3NlZCk7Ci19Ci0KLWNsYXNz
IENvbnRleHRNZW51U21hcnRTZXBhcmF0b3JzVGVzdDogcHVibGljIENvbnRleHRNZW51VGVzdCB7
Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShDb250ZXh0TWVudVNtYXJ0U2Vw
YXJhdG9yc1Rlc3QpOwotCi0gICAgYm9vbCBjb250ZXh0TWVudShXZWJLaXRDb250ZXh0TWVudSog
Y29udGV4dE1lbnUsIEdka0V2ZW50KiwgV2ViS2l0SGl0VGVzdFJlc3VsdCopCi0gICAgewotICAg
ICAgICB3ZWJraXRfY29udGV4dF9tZW51X3JlbW92ZV9hbGwoY29udGV4dE1lbnUpOwotCi0gICAg
ICAgIHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4
dF9tZW51X2l0ZW1fbmV3X3NlcGFyYXRvcigpKTsKLSAgICAgICAgd2Via2l0X2NvbnRleHRfbWVu
dV9hcHBlbmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfc2VwYXJh
dG9yKCkpOwotICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwg
d2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19mcm9tX3N0b2NrX2FjdGlvbihXRUJLSVRfQ09O
VEVYVF9NRU5VX0FDVElPTl9HT19CQUNLKSk7Ci0gICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVf
YXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X2Zyb21fc3Rv
Y2tfYWN0aW9uKFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0dPX0ZPUldBUkQpKTsKLSAgICAg
ICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBlbmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0
X21lbnVfaXRlbV9uZXdfc2VwYXJhdG9yKCkpOwotICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51
X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19zZXBhcmF0
b3IoKSk7Ci0gICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3
ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X2Zyb21fc3RvY2tfYWN0aW9uKFdFQktJVF9DT05U
RVhUX01FTlVfQUNUSU9OX0NPUFkpKTsKLSAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBl
bmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfc2VwYXJhdG9yKCkp
OwotICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0
X2NvbnRleHRfbWVudV9pdGVtX25ld19mcm9tX3N0b2NrX2FjdGlvbihXRUJLSVRfQ09OVEVYVF9N
RU5VX0FDVElPTl9JTlNQRUNUX0VMRU1FTlQpKTsKLSAgICAgICAgd2Via2l0X2NvbnRleHRfbWVu
dV9hcHBlbmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfc2VwYXJh
dG9yKCkpOwotICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwg
d2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19zZXBhcmF0b3IoKSk7Ci0KLSAgICAgICAgcXVp
dE1haW5Mb29wKCk7Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEd0a01l
bnUqIHNob3dDb250ZXh0TWVudUFuZEdldEd0a01lbnUoKQotICAgIHsKLSAgICAgICAgc2hvd0Nv
bnRleHRNZW51QW5kV2FpdFVudGlsRmluaXNoZWQoKTsKLSAgICAgICAgcmV0dXJuIGdldFBvcHVw
TWVudSgpOwotICAgIH0KLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RDb250ZXh0TWVudVNtYXJ0U2Vw
YXJhdG9ycyhDb250ZXh0TWVudVNtYXJ0U2VwYXJhdG9yc1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCi17Ci0gICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7Ci0KLSAg
ICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHk+V2ViS2l0R1RLKyBDb250ZXh0IG1lbnUgdGVz
dHM8L2JvZHk+PC9odG1sPiIsICJmaWxlOi8vLyIpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRG
aW5pc2hlZCgpOwotCi0gICAgR3RrTWVudSogbWVudSA9IHRlc3QtPnNob3dDb250ZXh0TWVudUFu
ZEdldEd0a01lbnUoKTsKLSAgICBnX2Fzc2VydChtZW51KTsKLQotICAgIC8vIExlYWRpbmcgYW5k
IHRyYWlsaW5nIHNlcGFyYXRvcnMgYXJlIG5vdCBhZGRlZCB0byB0aGUgY29udGV4dCBtZW51Lgot
ICAgIEdPd25QdHI8R0xpc3Q+IG1lbnVJdGVtcyhndGtfY29udGFpbmVyX2dldF9jaGlsZHJlbihH
VEtfQ09OVEFJTkVSKG1lbnUpKSk7Ci0gICAgZ19hc3NlcnRfY21wdWludChnX2xpc3RfbGVuZ3Ro
KG1lbnVJdGVtcy5nZXQoKSksID09LCA2KTsKLSAgICBHdGtXaWRnZXQqIGl0ZW0gPSBHVEtfV0lE
R0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDApKTsKLSAgICBnX2Fzc2VydCgh
R1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJs
ZShpdGVtKSk7Ci0gICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVt
cy5nZXQoKSwgMSkpOwotICAgIGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShp
dGVtKSAmJiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKLSAgICBpdGVtID0gR1RLX1dJ
REdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCAyKSk7Ci0gICAgZ19hc3NlcnQo
R1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJs
ZShpdGVtKSk7Ci0gICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVt
cy5nZXQoKSwgMykpOwotICAgIGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShp
dGVtKSAmJiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKLSAgICBpdGVtID0gR1RLX1dJ
REdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCA0KSk7Ci0gICAgZ19hc3NlcnQo
R1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJs
ZShpdGVtKSk7Ci0gICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVt
cy5nZXQoKSwgNSkpOwotICAgIGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShp
dGVtKSAmJiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKLQotICAgIC8vIEhpZGluZyBh
IG1lbnUgaXRlbSBiZXR3ZWVuIHR3byBzZXBhcmF0b3JzIGhpZGVzIHRoZSBmb2xsb3dpbmcgc2Vw
YXJhdG9yLgotICAgIEd0a0FjdGlvbiogYWN0aW9uID0gZ3RrX2FjdGl2YXRhYmxlX2dldF9yZWxh
dGVkX2FjdGlvbihHVEtfQUNUSVZBVEFCTEUoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQo
KSwgMykpKTsKLSAgICBndGtfYWN0aW9uX3NldF92aXNpYmxlKGFjdGlvbiwgRkFMU0UpOwotICAg
IG1lbnVJdGVtcy5zZXQoZ3RrX2NvbnRhaW5lcl9nZXRfY2hpbGRyZW4oR1RLX0NPTlRBSU5FUiht
ZW51KSkpOwotICAgIGdfYXNzZXJ0X2NtcHVpbnQoZ19saXN0X2xlbmd0aChtZW51SXRlbXMuZ2V0
KCkpLCA9PSwgNik7Ci0gICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJ
dGVtcy5nZXQoKSwgMCkpOwotICAgIGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRF
TShpdGVtKSAmJiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKLSAgICBpdGVtID0gR1RL
X1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCAxKSk7Ci0gICAgZ19hc3Nl
cnQoIUdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zp
c2libGUoaXRlbSkpOwotICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51
SXRlbXMuZ2V0KCksIDIpKTsKLSAgICBnX2Fzc2VydChHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRF
TShpdGVtKSAmJiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKLSAgICBpdGVtID0gR1RL
X1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCAzKSk7Ci0gICAgZ19hc3Nl
cnQoIUdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmICFndGtfd2lkZ2V0X2dldF92
aXNpYmxlKGl0ZW0pKTsKLSAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVu
dUl0ZW1zLmdldCgpLCA0KSk7Ci0gICAgZ19hc3NlcnQoR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lU
RU0oaXRlbSkgJiYgIWd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOwotICAgIGl0ZW0gPSBH
VEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDUpKTsKLSAgICBnX2Fz
c2VydCghR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRf
dmlzaWJsZShpdGVtKSk7Ci0gICAgZ3RrX2FjdGlvbl9zZXRfdmlzaWJsZShhY3Rpb24sIFRSVUUp
OwotCi0gICAgLy8gU2hvd2luZyBhbiBhY3Rpb24gYmV0d2VlbiB0d28gc2VwYXJhdG9ycyBzaG93
cyB0aGUgaGlkZGVuIHNlcGFyYXRvci4KLSAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRo
X2RhdGEobWVudUl0ZW1zLmdldCgpLCAwKSk7Ci0gICAgZ19hc3NlcnQoIUdUS19JU19TRVBBUkFU
T1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOwotICAg
IGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDEpKTsK
LSAgICBnX2Fzc2VydCghR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dp
ZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7Ci0gICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250
aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgMikpOwotICAgIGdfYXNzZXJ0KEdUS19JU19TRVBBUkFU
T1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOwotICAg
IGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDMpKTsK
LSAgICBnX2Fzc2VydCghR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dp
ZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7Ci0gICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250
aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgNCkpOwotICAgIGdfYXNzZXJ0KEdUS19JU19TRVBBUkFU
T1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOwotICAg
IGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDUpKTsK
LSAgICBnX2Fzc2VydCghR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dp
ZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7Ci0KLSAgICAvLyBUcmFpbGluZyBzZXBhcmF0b3JzIGFy
ZSBoaWRkZW4gdG9vLgotICAgIGFjdGlvbiA9IGd0a19hY3RpdmF0YWJsZV9nZXRfcmVsYXRlZF9h
Y3Rpb24oR1RLX0FDVElWQVRBQkxFKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDUp
KSk7Ci0gICAgZ3RrX2FjdGlvbl9zZXRfdmlzaWJsZShhY3Rpb24sIEZBTFNFKTsKLSAgICBtZW51
SXRlbXMuc2V0KGd0a19jb250YWluZXJfZ2V0X2NoaWxkcmVuKEdUS19DT05UQUlORVIobWVudSkp
KTsKLSAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgp
LCAwKSk7Ci0gICAgZ19hc3NlcnQoIUdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYm
IGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOwotICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdf
bGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDEpKTsKLSAgICBnX2Fzc2VydCghR1RLX0lT
X1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVt
KSk7Ci0gICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQo
KSwgMikpOwotICAgIGdfYXNzZXJ0KEdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYm
IGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOwotICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdf
bGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDMpKTsKLSAgICBnX2Fzc2VydCghR1RLX0lT
X1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVt
KSk7Ci0gICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQo
KSwgNCkpOwotICAgIGdfYXNzZXJ0KEdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYm
ICFndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKLSAgICBpdGVtID0gR1RLX1dJREdFVChn
X2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCA1KSk7Ci0gICAgZ19hc3NlcnQoIUdUS19J
U19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmICFndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0
ZW0pKTsKLX0KLQotdm9pZCBiZWZvcmVBbGwoKQotewotICAgIENvbnRleHRNZW51RGVmYXVsdFRl
c3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJkZWZhdWx0LW1lbnUiLCB0ZXN0Q29udGV4dE1lbnVE
ZWZhdWx0TWVudSk7Ci0gICAgQ29udGV4dE1lbnVDdXN0b21UZXN0OjphZGQoIldlYktpdFdlYlZp
ZXciLCAicG9wdWxhdGUtbWVudSIsIHRlc3RDb250ZXh0TWVudVBvcHVsYXRlTWVudSk7Ci0gICAg
Q29udGV4dE1lbnVDdXN0b21GdWxsVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImN1c3RvbS1t
ZW51IiwgdGVzdENvbnRleHRNZW51Q3VzdG9tTWVudSk7Ci0gICAgQ29udGV4dE1lbnVEaXNhYmxl
ZFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJkaXNhYmxlLW1lbnUiLCB0ZXN0Q29udGV4dE1l
bnVEaXNhYmxlTWVudSk7Ci0gICAgQ29udGV4dE1lbnVTdWJtZW51VGVzdDo6YWRkKCJXZWJLaXRX
ZWJWaWV3IiwgInN1Ym1lbnUiLCB0ZXN0Q29udGV4dE1lbnVTdWJNZW51KTsKLSAgICBDb250ZXh0
TWVudURpc21pc3NlZFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJtZW51LWRpc21pc3NlZCIs
IHRlc3RDb250ZXh0TWVudURpc21pc3NlZCk7Ci0gICAgQ29udGV4dE1lbnVTbWFydFNlcGFyYXRv
cnNUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAic21hcnQtc2VwYXJhdG9ycyIsIHRlc3RDb250
ZXh0TWVudVNtYXJ0U2VwYXJhdG9ycyk7Ci19Ci0KLXZvaWQgYWZ0ZXJBbGwoKQotewotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdENvb2tp
ZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVz
dENvb2tpZU1hbmFnZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZGM2YjVi
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rl
c3RDb29raWVNYW5hZ2VyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMzMSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQot
I2luY2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKLSNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgot
I2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0KLXN0YXRpYyBXZWJLaXRUZXN0U2VydmVyKiBrU2Vy
dmVyOwotc3RhdGljIGNoYXIqIGtUZW1wRGlyZWN0b3J5OwotCi1zdGF0aWMgY29uc3QgY2hhciog
a0ZpcnN0UGFydHlEb21haW4gPSAiMTI3LjAuMC4xIjsKLXN0YXRpYyBjb25zdCBjaGFyKiBrVGhp
cmRQYXJ0eURvbWFpbiA9ICJsb2NhbGhvc3QiOwotc3RhdGljIGNvbnN0IGNoYXIqIGtJbmRleEh0
bWxGb3JtYXQgPQotICAgICI8aHRtbD48Ym9keT4iCi0gICAgIiA8cD5XZWJLaXRHVEsrIENvb2tp
ZSBNYW5hZ2VyIHRlc3Q8L3A+IgotICAgICIgPGltZyBzcmM9J2h0dHA6Ly9sb2NhbGhvc3Q6JXUv
aW1hZ2UucG5nJyB3aWR0aD01IGhlaWdodD01PjwvaW1nPiIKLSAgICAiPC9ib2R5PjwvaHRtbD4i
OwotCi1jbGFzcyBDb29raWVNYW5hZ2VyVGVzdDogcHVibGljIFdlYlZpZXdUZXN0IHsKLXB1Ymxp
YzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKENvb2tpZU1hbmFnZXJUZXN0KTsKLQotICAg
IHN0YXRpYyB2b2lkIGNvb2tpZXNDaGFuZ2VkQ2FsbGJhY2soV2ViS2l0Q29va2llTWFuYWdlcios
IENvb2tpZU1hbmFnZXJUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+bV9jb29raWVz
Q2hhbmdlZCA9IHRydWU7Ci0gICAgICAgIGlmICh0ZXN0LT5tX2ZpbmlzaExvb3BXaGVuQ29va2ll
c0NoYW5nZSkKLSAgICAgICAgICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7
Ci0gICAgfQotCi0gICAgQ29va2llTWFuYWdlclRlc3QoKQotICAgICAgICA6IFdlYlZpZXdUZXN0
KCkKLSAgICAgICAgLCBtX2Nvb2tpZU1hbmFnZXIod2Via2l0X3dlYl9jb250ZXh0X2dldF9jb29r
aWVfbWFuYWdlcih3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQobV93ZWJWaWV3KSkpCi0gICAg
ICAgICwgbV9hY2NlcHRQb2xpY3koV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX05PX1RISVJE
X1BBUlRZKQotICAgICAgICAsIG1fZG9tYWlucygwKQotICAgICAgICAsIG1fY29va2llc0NoYW5n
ZWQoZmFsc2UpCi0gICAgICAgICwgbV9maW5pc2hMb29wV2hlbkNvb2tpZXNDaGFuZ2UoZmFsc2Up
Ci0gICAgewotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fY29va2llTWFuYWdlciwgImNoYW5n
ZWQiLCBHX0NBTExCQUNLKGNvb2tpZXNDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKLSAgICB9Ci0K
LSAgICB+Q29va2llTWFuYWdlclRlc3QoKQotICAgIHsKLSAgICAgICAgZ19zdHJmcmVldihtX2Rv
bWFpbnMpOwotICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9j
b29raWVNYW5hZ2VyLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKLSAg
ICAgICAgaWYgKG1fY29va2llc1RleHRGaWxlKQotICAgICAgICAgICAgZ191bmxpbmsobV9jb29r
aWVzVGV4dEZpbGUuZ2V0KCkpOwotICAgICAgICBpZiAobV9jb29raWVzU1FMaXRlRmlsZSkKLSAg
ICAgICAgICAgIGdfdW5saW5rKG1fY29va2llc1NRTGl0ZUZpbGUuZ2V0KCkpOwotICAgIH0KLQot
ICAgIHZvaWQgc2V0UGVyc2lzdGVudFN0b3JhZ2UoV2ViS2l0Q29va2llUGVyc2lzdGVudFN0b3Jh
Z2Ugc3RvcmFnZSkKLSAgICB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGZpbGVuYW1lID0gMDsKLSAg
ICAgICAgc3dpdGNoIChzdG9yYWdlKSB7Ci0gICAgICAgIGNhc2UgV0VCS0lUX0NPT0tJRV9QRVJT
SVNURU5UX1NUT1JBR0VfVEVYVDoKLSAgICAgICAgICAgIGlmICghbV9jb29raWVzVGV4dEZpbGUp
Ci0gICAgICAgICAgICAgICAgbV9jb29raWVzVGV4dEZpbGUuc2V0KGdfYnVpbGRfZmlsZW5hbWUo
a1RlbXBEaXJlY3RvcnksICJjb29raWVzLnR4dCIsIE5VTEwpKTsKLSAgICAgICAgICAgIGZpbGVu
YW1lID0gbV9jb29raWVzVGV4dEZpbGUuZ2V0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBXRUJLSVRfQ09PS0lFX1BFUlNJU1RFTlRfU1RPUkFHRV9TUUxJVEU6Ci0gICAgICAg
ICAgICBpZiAoIW1fY29va2llc1NRTGl0ZUZpbGUpCi0gICAgICAgICAgICAgICAgbV9jb29raWVz
U1FMaXRlRmlsZS5zZXQoZ19idWlsZF9maWxlbmFtZShrVGVtcERpcmVjdG9yeSwgImNvb2tpZXMu
ZGIiLCBOVUxMKSk7Ci0gICAgICAgICAgICBmaWxlbmFtZSA9IG1fY29va2llc1NRTGl0ZUZpbGUu
Z2V0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0gICAgICAgIH0KLSAgICAgICAgd2Via2l0X2Nvb2tp
ZV9tYW5hZ2VyX3NldF9wZXJzaXN0ZW50X3N0b3JhZ2UobV9jb29raWVNYW5hZ2VyLCBmaWxlbmFt
ZSwgc3RvcmFnZSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgZ2V0QWNjZXB0UG9saWN5UmVh
ZHlDYWxsYmFjayhHT2JqZWN0KiBvYmplY3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRl
ciB1c2VyRGF0YSkKLSAgICB7Ci0gICAgICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKLSAgICAg
ICAgV2ViS2l0Q29va2llQWNjZXB0UG9saWN5IHBvbGljeSA9IHdlYmtpdF9jb29raWVfbWFuYWdl
cl9nZXRfYWNjZXB0X3BvbGljeV9maW5pc2goV0VCS0lUX0NPT0tJRV9NQU5BR0VSKG9iamVjdCks
IHJlc3VsdCwgJmVycm9yLm91dFB0cigpKTsKLSAgICAgICAgZ19hc3NlcnQoIWVycm9yLmdldCgp
KTsKLQotICAgICAgICBDb29raWVNYW5hZ2VyVGVzdCogdGVzdCA9IHN0YXRpY19jYXN0PENvb2tp
ZU1hbmFnZXJUZXN0Kj4odXNlckRhdGEpOwotICAgICAgICB0ZXN0LT5tX2FjY2VwdFBvbGljeSA9
IHBvbGljeTsKLSAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKLSAg
ICB9Ci0KLSAgICBXZWJLaXRDb29raWVBY2NlcHRQb2xpY3kgZ2V0QWNjZXB0UG9saWN5KCkKLSAg
ICB7Ci0gICAgICAgIG1fYWNjZXB0UG9saWN5ID0gV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBU
X05PX1RISVJEX1BBUlRZOwotICAgICAgICB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2FjY2Vw
dF9wb2xpY3kobV9jb29raWVNYW5hZ2VyLCAwLCBnZXRBY2NlcHRQb2xpY3lSZWFkeUNhbGxiYWNr
LCB0aGlzKTsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotCi0gICAgICAg
IHJldHVybiBtX2FjY2VwdFBvbGljeTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldEFjY2VwdFBvbGlj
eShXZWJLaXRDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KQotICAgIHsKLSAgICAgICAgd2Via2l0
X2Nvb2tpZV9tYW5hZ2VyX3NldF9hY2NlcHRfcG9saWN5KG1fY29va2llTWFuYWdlciwgcG9saWN5
KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBnZXREb21haW5zUmVhZHlDYWxsYmFjayhHT2Jq
ZWN0KiBvYmplY3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkKLSAg
ICB7Ci0gICAgICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKLSAgICAgICAgY2hhcioqIGRvbWFp
bnMgPSB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2RvbWFpbnNfd2l0aF9jb29raWVzX2Zpbmlz
aChXRUJLSVRfQ09PS0lFX01BTkFHRVIob2JqZWN0KSwgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkp
OwotICAgICAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOwotCi0gICAgICAgIENvb2tpZU1hbmFn
ZXJUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8Q29va2llTWFuYWdlclRlc3QqPih1c2VyRGF0YSk7
Ci0gICAgICAgIHRlc3QtPm1fZG9tYWlucyA9IGRvbWFpbnM7Ci0gICAgICAgIGdfbWFpbl9sb29w
X3F1aXQodGVzdC0+bV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgY2hhcioqIGdldERvbWFpbnMo
KQotICAgIHsKLSAgICAgICAgZ19zdHJmcmVldihtX2RvbWFpbnMpOwotICAgICAgICBtX2RvbWFp
bnMgPSAwOwotICAgICAgICB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2RvbWFpbnNfd2l0aF9j
b29raWVzKG1fY29va2llTWFuYWdlciwgMCwgZ2V0RG9tYWluc1JlYWR5Q2FsbGJhY2ssIHRoaXMp
OwotICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Ci0KLSAgICAgICAgcmV0dXJu
IG1fZG9tYWluczsKLSAgICB9Ci0KLSAgICBib29sIGhhc0RvbWFpbihjb25zdCBjaGFyKiBkb21h
aW4pCi0gICAgewotICAgICAgICBpZiAoIW1fZG9tYWlucykKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgbV9kb21haW5zW2ldOyArK2kpCi0g
ICAgICAgICAgICBpZiAoZ19zdHJfZXF1YWwobV9kb21haW5zW2ldLCBkb21haW4pKQotICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgdm9pZCBkZWxldGVDb29raWVzRm9yRG9tYWluKGNvbnN0IGNoYXIqIGRvbWFpbikKLSAgICB7
Ci0gICAgICAgIHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29va2llc19mb3JfZG9tYWlu
KG1fY29va2llTWFuYWdlciwgZG9tYWluKTsKLSAgICB9Ci0KLSAgICB2b2lkIGRlbGV0ZUFsbENv
b2tpZXMoKQotICAgIHsKLSAgICAgICAgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9hbGxf
Y29va2llcyhtX2Nvb2tpZU1hbmFnZXIpOwotICAgIH0KLQotICAgIHZvaWQgd2FpdFVudGlsQ29v
a2llc0NoYW5nZWQoKQotICAgIHsKLSAgICAgICAgbV9jb29raWVzQ2hhbmdlZCA9IGZhbHNlOwot
ICAgICAgICBtX2ZpbmlzaExvb3BXaGVuQ29va2llc0NoYW5nZSA9IHRydWU7Ci0gICAgICAgIGdf
bWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAgICAgICAgbV9maW5pc2hMb29wV2hlbkNvb2tp
ZXNDaGFuZ2UgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBXZWJLaXRDb29raWVNYW5hZ2VyKiBtX2Nv
b2tpZU1hbmFnZXI7Ci0gICAgV2ViS2l0Q29va2llQWNjZXB0UG9saWN5IG1fYWNjZXB0UG9saWN5
OwotICAgIGNoYXIqKiBtX2RvbWFpbnM7Ci0gICAgYm9vbCBtX2Nvb2tpZXNDaGFuZ2VkOwotICAg
IGJvb2wgbV9maW5pc2hMb29wV2hlbkNvb2tpZXNDaGFuZ2U7Ci0gICAgR093blB0cjxjaGFyPiBt
X2Nvb2tpZXNUZXh0RmlsZTsKLSAgICBHT3duUHRyPGNoYXI+IG1fY29va2llc1NRTGl0ZUZpbGU7
Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0Q29va2llTWFuYWdlckFjY2VwdFBvbGljeShDb29raWVN
YW5hZ2VyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICAvLyBEZWZhdWx0IHBvbGlj
eSBpcyBOT19USElSRF9QQVJUWS4KLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+Z2V0QWNjZXB0
UG9saWN5KCksID09LCBXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfTk9fVEhJUkRfUEFSVFkp
OwotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2luZGV4Lmh0bWwi
KS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGNoYXIq
KiBkb21haW5zID0gdGVzdC0+Z2V0RG9tYWlucygpOwotICAgIGdfYXNzZXJ0KGRvbWFpbnMpOwot
ICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKGRvbWFpbnMpLCA9PSwgMSk7Ci0gICAg
Z19hc3NlcnRfY21wc3RyKGRvbWFpbnNbMF0sID09LCBrRmlyc3RQYXJ0eURvbWFpbik7Ci0gICAg
dGVzdC0+ZGVsZXRlQWxsQ29va2llcygpOwotCi0gICAgdGVzdC0+c2V0QWNjZXB0UG9saWN5KFdF
QktJVF9DT09LSUVfUE9MSUNZX0FDQ0VQVF9BTFdBWVMpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0
ZXN0LT5nZXRBY2NlcHRQb2xpY3koKSwgPT0sIFdFQktJVF9DT09LSUVfUE9MSUNZX0FDQ0VQVF9B
TFdBWVMpOwotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2luZGV4
Lmh0bWwiKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAg
IGRvbWFpbnMgPSB0ZXN0LT5nZXREb21haW5zKCk7Ci0gICAgZ19hc3NlcnQoZG9tYWlucyk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgoZG9tYWlucyksID09LCAyKTsKLSAgICBn
X2Fzc2VydCh0ZXN0LT5oYXNEb21haW4oa0ZpcnN0UGFydHlEb21haW4pKTsKLSAgICBnX2Fzc2Vy
dCh0ZXN0LT5oYXNEb21haW4oa1RoaXJkUGFydHlEb21haW4pKTsKLSAgICB0ZXN0LT5kZWxldGVB
bGxDb29raWVzKCk7Ci0KLSAgICB0ZXN0LT5zZXRBY2NlcHRQb2xpY3koV0VCS0lUX0NPT0tJRV9Q
T0xJQ1lfQUNDRVBUX05FVkVSKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+Z2V0QWNjZXB0
UG9saWN5KCksID09LCBXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfTkVWRVIpOwotICAgIHRl
c3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2luZGV4Lmh0bWwiKS5kYXRhKCkp
OwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGRvbWFpbnMgPSB0ZXN0
LT5nZXREb21haW5zKCk7Ci0gICAgZ19hc3NlcnQoZG9tYWlucyk7Ci0gICAgZ19hc3NlcnRfY21w
aW50KGdfc3Rydl9sZW5ndGgoZG9tYWlucyksID09LCAwKTsKLX0KLQotc3RhdGljIHZvaWQgdGVz
dENvb2tpZU1hbmFnZXJEZWxldGVDb29raWVzKENvb2tpZU1hbmFnZXJUZXN0KiB0ZXN0LCBnY29u
c3Rwb2ludGVyKQotewotICAgIHRlc3QtPnNldEFjY2VwdFBvbGljeShXRUJLSVRfQ09PS0lFX1BP
TElDWV9BQ0NFUFRfQUxXQVlTKTsKLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZv
clBhdGgoIi9pbmRleC5odG1sIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmlu
aXNoZWQoKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0LT5nZXREb21h
aW5zKCkpLCA9PSwgMik7Ci0KLSAgICAvLyBEZWxldGUgZmlyc3QgcGFydHkgY29va2llcy4KLSAg
ICB0ZXN0LT5kZWxldGVDb29raWVzRm9yRG9tYWluKGtGaXJzdFBhcnR5RG9tYWluKTsKLSAgICBn
X2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0LT5nZXREb21haW5zKCkpLCA9PSwgMSk7
Ci0KLSAgICAvLyBEZWxldGUgdGhpcmQgcGFydHkgY29va2llcy4KLSAgICB0ZXN0LT5kZWxldGVD
b29raWVzRm9yRG9tYWluKGtUaGlyZFBhcnR5RG9tYWluKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
Z19zdHJ2X2xlbmd0aCh0ZXN0LT5nZXREb21haW5zKCkpLCA9PSwgMCk7Ci0KLSAgICB0ZXN0LT5s
b2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbmRleC5odG1sIikuZGF0YSgpKTsKLSAg
ICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZ19z
dHJ2X2xlbmd0aCh0ZXN0LT5nZXREb21haW5zKCkpLCA9PSwgMik7Ci0KLSAgICAvLyBEZWxldGUg
YWxsIGNvb2tpZXMuCi0gICAgdGVzdC0+ZGVsZXRlQWxsQ29va2llcygpOwotICAgIGdfYXNzZXJ0
X2NtcGludChnX3N0cnZfbGVuZ3RoKHRlc3QtPmdldERvbWFpbnMoKSksID09LCAwKTsKLX0KLQot
c3RhdGljIHZvaWQgdGVzdENvb2tpZU1hbmFnZXJDb29raWVzQ2hhbmdlZChDb29raWVNYW5hZ2Vy
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBnX2Fzc2VydCghdGVzdC0+bV9jb29r
aWVzQ2hhbmdlZCk7Ci0gICAgdGVzdC0+c2V0QWNjZXB0UG9saWN5KFdFQktJVF9DT09LSUVfUE9M
SUNZX0FDQ0VQVF9BTFdBWVMpOwotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9y
UGF0aCgiL2luZGV4Lmh0bWwiKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5p
c2hlZCgpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fY29va2llc0NoYW5nZWQpOwotCi0gICAgdGVz
dC0+ZGVsZXRlQ29va2llc0ZvckRvbWFpbihrRmlyc3RQYXJ0eURvbWFpbik7Ci0gICAgdGVzdC0+
d2FpdFVudGlsQ29va2llc0NoYW5nZWQoKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX2Nvb2tpZXND
aGFuZ2VkKTsKLQotICAgIHRlc3QtPmRlbGV0ZUFsbENvb2tpZXMoKTsKLSAgICB0ZXN0LT53YWl0
VW50aWxDb29raWVzQ2hhbmdlZCgpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fY29va2llc0NoYW5n
ZWQpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0Q29va2llTWFuYWdlclBlcnNpc3RlbnRTdG9yYWdl
KENvb2tpZU1hbmFnZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPnNl
dEFjY2VwdFBvbGljeShXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfQUxXQVlTKTsKLQotICAg
IC8vIFRleHQgc3RvcmFnZSB1c2luZyBhIG5ldyBmaWxlLgotICAgIHRlc3QtPnNldFBlcnNpc3Rl
bnRTdG9yYWdlKFdFQktJVF9DT09LSUVfUEVSU0lTVEVOVF9TVE9SQUdFX1RFWFQpOwotICAgIGNo
YXIqKiBkb21haW5zID0gdGVzdC0+Z2V0RG9tYWlucygpOwotICAgIGdfYXNzZXJ0KGRvbWFpbnMp
OwotICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKGRvbWFpbnMpLCA9PSwgMCk7Ci0K
LSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbmRleC5odG1sIiku
ZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBnX2Fzc2Vy
dCh0ZXN0LT5tX2Nvb2tpZXNDaGFuZ2VkKTsKLSAgICBkb21haW5zID0gdGVzdC0+Z2V0RG9tYWlu
cygpOwotICAgIGdfYXNzZXJ0KGRvbWFpbnMpOwotICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZf
bGVuZ3RoKGRvbWFpbnMpLCA9PSwgMik7Ci0KLQotICAgIC8vIFNRTGl0ZSBzdG9yYWdlIHVzaW5n
IGEgbmV3IGZpbGUuCi0gICAgdGVzdC0+c2V0UGVyc2lzdGVudFN0b3JhZ2UoV0VCS0lUX0NPT0tJ
RV9QRVJTSVNURU5UX1NUT1JBR0VfU1FMSVRFKTsKLSAgICBkb21haW5zID0gdGVzdC0+Z2V0RG9t
YWlucygpOwotICAgIGdfYXNzZXJ0KGRvbWFpbnMpOwotICAgIGdfYXNzZXJ0X2NtcGludChnX3N0
cnZfbGVuZ3RoKGRvbWFpbnMpLCA9PSwgMCk7Ci0KLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXIt
PmdldFVSSUZvclBhdGgoIi9pbmRleC5odG1sIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50
aWxMb2FkRmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX2Nvb2tpZXNDaGFuZ2VkKTsK
LSAgICBkb21haW5zID0gdGVzdC0+Z2V0RG9tYWlucygpOwotICAgIGdfYXNzZXJ0KGRvbWFpbnMp
OwotICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKGRvbWFpbnMpLCA9PSwgMik7Ci0K
LSAgICAvLyBUZXh0IHN0b3JhZ2UgdXNpbmcgYW4gZXhpc3RpbmcgZmlsZS4KLSAgICB0ZXN0LT5z
ZXRQZXJzaXN0ZW50U3RvcmFnZShXRUJLSVRfQ09PS0lFX1BFUlNJU1RFTlRfU1RPUkFHRV9URVhU
KTsKLSAgICBkb21haW5zID0gdGVzdC0+Z2V0RG9tYWlucygpOwotICAgIGdfYXNzZXJ0KGRvbWFp
bnMpOwotICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKGRvbWFpbnMpLCA9PSwgMik7
Ci0gICAgdGVzdC0+ZGVsZXRlQWxsQ29va2llcygpOwotICAgIGdfYXNzZXJ0X2NtcGludChnX3N0
cnZfbGVuZ3RoKHRlc3QtPmdldERvbWFpbnMoKSksID09LCAwKTsKLQotICAgIC8vIFNRTGl0ZSBz
dG9yYWdlIHdpdGggYW4gZXhpc3RpbmcgZmlsZS4KLSAgICB0ZXN0LT5zZXRQZXJzaXN0ZW50U3Rv
cmFnZShXRUJLSVRfQ09PS0lFX1BFUlNJU1RFTlRfU1RPUkFHRV9TUUxJVEUpOwotICAgIGRvbWFp
bnMgPSB0ZXN0LT5nZXREb21haW5zKCk7Ci0gICAgZ19hc3NlcnQoZG9tYWlucyk7Ci0gICAgZ19h
c3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgoZG9tYWlucyksID09LCAyKTsKLSAgICB0ZXN0LT5k
ZWxldGVBbGxDb29raWVzKCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgodGVz
dC0+Z2V0RG9tYWlucygpKSwgPT0sIDApOwotfQotCi1zdGF0aWMgdm9pZCBzZXJ2ZXJDYWxsYmFj
ayhTb3VwU2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBjaGFyKiBw
YXRoLCBHSGFzaFRhYmxlKiwgU291cENsaWVudENvbnRleHQqLCBncG9pbnRlcikKLXsKLSAgICBp
ZiAobWVzc2FnZS0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgewotICAgICAgICBzb3VwX21l
c3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVz
c2FnZSwgU09VUF9TVEFUVVNfT0spOwotICAgIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2luZGV4
Lmh0bWwiKSkgewotICAgICAgICBjaGFyKiBpbmRleEh0bWwgPSBnX3N0cmR1cF9wcmludGYoa0lu
ZGV4SHRtbEZvcm1hdCwgc291cF9zZXJ2ZXJfZ2V0X3BvcnQoc2VydmVyKSk7Ci0gICAgICAgIHNv
dXBfbWVzc2FnZV9oZWFkZXJzX3JlcGxhY2UobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIlNl
dC1Db29raWUiLCAiZm9vPWJhcjsgTWF4LUFnZT02MCIpOwotICAgICAgICBzb3VwX21lc3NhZ2Vf
Ym9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgaW5k
ZXhIdG1sLCBzdHJsZW4oaW5kZXhIdG1sKSk7Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChw
YXRoLCAiL2ltYWdlLnBuZyIpKQotICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19yZXBsYWNl
KG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJTZXQtQ29va2llIiwgImJhej1xdXg7IE1heC1B
Z2U9NjAiKTsKLSAgICBlbHNlCi0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3Nh
Z2UsIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7Ci0gICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxl
dGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7Ci19Ci0KLXZvaWQgYmVmb3JlQWxsKCkKLXsKLSAg
ICBrU2VydmVyID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIoKTsKLSAgICBrU2VydmVyLT5ydW4oc2Vy
dmVyQ2FsbGJhY2spOwotCi0gICAga1RlbXBEaXJlY3RvcnkgPSBnX2Rpcl9tYWtlX3RtcCgiV2Vi
S2l0MlRlc3RzLVhYWFhYWCIsIDApOwotICAgIGdfYXNzZXJ0KGtUZW1wRGlyZWN0b3J5KTsKLQot
ICAgIENvb2tpZU1hbmFnZXJUZXN0OjphZGQoIldlYktpdENvb2tpZU1hbmFnZXIiLCAiYWNjZXB0
LXBvbGljeSIsIHRlc3RDb29raWVNYW5hZ2VyQWNjZXB0UG9saWN5KTsKLSAgICBDb29raWVNYW5h
Z2VyVGVzdDo6YWRkKCJXZWJLaXRDb29raWVNYW5hZ2VyIiwgImRlbGV0ZS1jb29raWVzIiwgdGVz
dENvb2tpZU1hbmFnZXJEZWxldGVDb29raWVzKTsKLSAgICBDb29raWVNYW5hZ2VyVGVzdDo6YWRk
KCJXZWJLaXRDb29raWVNYW5hZ2VyIiwgImNvb2tpZXMtY2hhbmdlZCIsIHRlc3RDb29raWVNYW5h
Z2VyQ29va2llc0NoYW5nZWQpOwotICAgIENvb2tpZU1hbmFnZXJUZXN0OjphZGQoIldlYktpdENv
b2tpZU1hbmFnZXIiLCAicGVyc2lzdGVudC1zdG9yYWdlIiwgdGVzdENvb2tpZU1hbmFnZXJQZXJz
aXN0ZW50U3RvcmFnZSk7Ci19Ci0KLXZvaWQgYWZ0ZXJBbGwoKQotewotICAgIGRlbGV0ZSBrU2Vy
dmVyOwotICAgIGdfcm1kaXIoa1RlbXBEaXJlY3RvcnkpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdERPTU5vZGUuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdERPTU5vZGUuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDMyMDc3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RET01Ob2RlLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDg3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgSWdhbGlhIFMuTC4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIldlYlByb2Nlc3NUZXN0UnVubmVyLmgi
Ci0jaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVk
ZSA8d2Via2l0Mi93ZWJraXQyLmg+Ci0KLXN0YXRpYyBXZWJQcm9jZXNzVGVzdFJ1bm5lciogdGVz
dFJ1bm5lcjsKLQotc3RhdGljIHZvaWQgdGVzdFdlYktpdERPTU5vZGVIaWVyYXJjaHlOYXZpZ2F0
aW9uKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHN0YXRpYyBjb25z
dCBjaGFyKiB0ZXN0SFRNTCA9ICI8aHRtbD48aGVhZD48dGl0bGU+VGhpcyBpcyB0aGUgdGl0bGU8
L3RpdGxlPjwvaGVhZD48Ym9keT48cD4xPC9wPjxwPjI8L3A+PHA+MzwvcD48L2JvZHk+PC9odG1s
PiI7Ci0gICAgdGVzdC0+bG9hZEh0bWwodGVzdEhUTUwsIDApOwotICAgIHRlc3QtPndhaXRVbnRp
bExvYWRGaW5pc2hlZCgpOwotCi0gICAgR1ZhcmlhbnRCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgZ192
YXJpYW50X2J1aWxkZXJfaW5pdCgmYnVpbGRlciwgR19WQVJJQU5UX1RZUEVfVkFSRElDVCk7Ci0g
ICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKCZidWlsZGVyLCAie3N2fSIsICJwYWdlSUQiLCBnX3Zh
cmlhbnRfbmV3X3VpbnQ2NCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3BhZ2VfaWQodGVzdC0+bV93ZWJW
aWV3KSkpOwotICAgIGdfYXNzZXJ0KHRlc3RSdW5uZXItPnJ1blRlc3QoIldlYktpdERPTU5vZGUi
LCAiaGllcmFyY2h5LW5hdmlnYXRpb24iLCBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQoJmJ1aWxkZXIp
KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJLaXRET01Ob2RlSW5zZXJ0aW9uKFdlYlZpZXdU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHN0YXRpYyBjb25zdCBjaGFyKiB0ZXN0
SFRNTCA9ICI8aHRtbD48Ym9keT48L2JvZHk+PC9odG1sPiI7Ci0gICAgdGVzdC0+bG9hZEh0bWwo
dGVzdEhUTUwsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAg
R1ZhcmlhbnRCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgZ192YXJpYW50X2J1aWxkZXJfaW5pdCgmYnVp
bGRlciwgR19WQVJJQU5UX1RZUEVfVkFSRElDVCk7Ci0gICAgZ192YXJpYW50X2J1aWxkZXJfYWRk
KCZidWlsZGVyLCAie3N2fSIsICJwYWdlSUQiLCBnX3ZhcmlhbnRfbmV3X3VpbnQ2NCh3ZWJraXRf
d2ViX3ZpZXdfZ2V0X3BhZ2VfaWQodGVzdC0+bV93ZWJWaWV3KSkpOwotICAgIGdfYXNzZXJ0KHRl
c3RSdW5uZXItPnJ1blRlc3QoIldlYktpdERPTU5vZGUiLCAiaW5zZXJ0aW9uIiwgZ192YXJpYW50
X2J1aWxkZXJfZW5kKCZidWlsZGVyKSkpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViS2l0RE9N
Tm9kZVRhZ05hbWVzKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHN0
YXRpYyBjb25zdCBjaGFyKiB0ZXN0SFRNTCA9ICI8aHRtbD48aGVhZD48L2hlYWQ+PGJvZHk+Igot
ICAgICAgICAiPHZpZGVvIGlkPSd2aWRlbycgcHJlbG9hZD0nbm9uZSc+IgotICAgICAgICAiICAg
IDxzb3VyY2Ugc3JjPSdtb3ZpZS5vZ2cnIHR5cGU9J3ZpZGVvL29nZyc+IgotICAgICAgICAiICAg
ICAgICBZb3VyIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgdmlkZW8gdGFnLiIKLSAgICAg
ICAgIjwvdmlkZW8+IgotICAgICAgICAiPHZpZGVvIGlkPSd2aWRlbzInIHByZWxvYWQ9J25vbmUn
PiIKLSAgICAgICAgIiAgICAgPHNvdXJjZSBzcmM9J21vdmllLm9nZycgdHlwZT0ndmlkZW8vb2dn
Jz4iCi0gICAgICAgICIgICAgICAgIFlvdXIgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSB2
aWRlbyB0YWcuIgotICAgICAgICAiPC92aWRlbz4iCi0gICAgICAgICI8aW5wdXQgdHlwZT0naGlk
ZGVuJyBpZD0ndGVzdCcgbmFtZT0nZmluaXNoJyB2YWx1ZT0nZmFsc2UnPjwvYm9keT48L2h0bWw+
IjsKLSAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0SFRNTCwgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGls
TG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBHVmFyaWFudEJ1aWxkZXIgYnVpbGRlcjsKLSAgICBnX3Zh
cmlhbnRfYnVpbGRlcl9pbml0KCZidWlsZGVyLCBHX1ZBUklBTlRfVFlQRV9WQVJESUNUKTsKLSAg
ICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoJmJ1aWxkZXIsICJ7c3Z9IiwgInBhZ2VJRCIsIGdfdmFy
aWFudF9uZXdfdWludDY0KHdlYmtpdF93ZWJfdmlld19nZXRfcGFnZV9pZCh0ZXN0LT5tX3dlYlZp
ZXcpKSk7Ci0gICAgZ19hc3NlcnQodGVzdFJ1bm5lci0+cnVuVGVzdCgiV2ViS2l0RE9NTm9kZSIs
ICJ0YWctbmFtZXMiLCBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQoJmJ1aWxkZXIpKSk7Ci19Ci0KLXZv
aWQgYmVmb3JlQWxsKCkKLXsKLSAgICB0ZXN0UnVubmVyID0gbmV3IFdlYlByb2Nlc3NUZXN0UnVu
bmVyKCk7Ci0gICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF93ZWJfZXh0ZW5zaW9uc19kaXJlY3Rv
cnkod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCksIFdFQktJVF9URVNUX1dFQl9FWFRF
TlNJT05TX0RJUik7Ci0KLSAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRET01Ob2RlIiwgImhp
ZXJhcmNoeS1uYXZpZ2F0aW9uIiwgdGVzdFdlYktpdERPTU5vZGVIaWVyYXJjaHlOYXZpZ2F0aW9u
KTsKLSAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRET01Ob2RlIiwgImluc2VydGlvbiIsIHRl
c3RXZWJLaXRET01Ob2RlSW5zZXJ0aW9uKTsKLSAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRE
T01Ob2RlIiwgInRhZy1uYW1lcyIsIHRlc3RXZWJLaXRET01Ob2RlVGFnTmFtZXMpOwotfQotCi12
b2lkIGFmdGVyQWxsKCkKLXsKLSAgICBkZWxldGUgdGVzdFJ1bm5lcjsKLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3REb3dubG9hZHMuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdERvd25sb2Fkcy5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlMTU5OTAuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdERvd25sb2Fkcy5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSw1MjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MiBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJXZWJLaXRUZXN0
U2VydmVyLmgiCi0jaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKLSNpbmNsdWRlIDxnbGliL2dzdGRp
by5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KLSNp
bmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdDIuaD4KLSNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgotI2luY2x1
ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
Ci0KLXN0YXRpYyBjaGFyKiBrVGVtcERpcmVjdG9yeTsKLQotY2xhc3MgRG93bmxvYWRUZXN0OiBw
dWJsaWMgVGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShEb3dubG9h
ZFRlc3QpOwotCi0gICAgZW51bSBEb3dubG9hZEV2ZW50IHsKLSAgICAgICAgU3RhcnRlZCwKLSAg
ICAgICAgUmVjZWl2ZWRSZXNwb25zZSwKLSAgICAgICAgQ3JlYXRlZERlc3RpbmF0aW9uLAotICAg
ICAgICBSZWNlaXZlZERhdGEsCi0gICAgICAgIEZhaWxlZCwKLSAgICAgICAgRmluaXNoZWQKLSAg
ICB9OwotCi0gICAgc3RhdGljIHZvaWQgcmVjZWl2ZWRSZXNwb25zZUNhbGxiYWNrKFdlYktpdERv
d25sb2FkKiBkb3dubG9hZCwgR1BhcmFtU3BlYyosIERvd25sb2FkVGVzdCogdGVzdCkKLSAgICB7
Ci0gICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9kb3dubG9hZF9nZXRfcmVzcG9uc2UoZG93bmxvYWQp
KTsKLSAgICAgICAgdGVzdC0+cmVjZWl2ZWRSZXNwb25zZShkb3dubG9hZCk7Ci0gICAgfQotCi0g
ICAgc3RhdGljIGdib29sZWFuIGNyZWF0ZWREZXN0aW5hdGlvbkNhbGxiYWNrKFdlYktpdERvd25s
b2FkKiBkb3dubG9hZCwgY29uc3QgZ2NoYXIqIGRlc3RpbmF0aW9uLCBEb3dubG9hZFRlc3QqIHRl
c3QpCi0gICAgewotICAgICAgICBnX2Fzc2VydCh3ZWJraXRfZG93bmxvYWRfZ2V0X2Rlc3RpbmF0
aW9uKGRvd25sb2FkKSk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfZG93bmxvYWRf
Z2V0X2Rlc3RpbmF0aW9uKGRvd25sb2FkKSwgPT0sIGRlc3RpbmF0aW9uKTsKLSAgICAgICAgdGVz
dC0+Y3JlYXRlZERlc3RpbmF0aW9uKGRvd25sb2FkLCBkZXN0aW5hdGlvbik7Ci0gICAgICAgIHJl
dHVybiBUUlVFOwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiByZWNlaXZlZERhdGFDYWxs
YmFjayhXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGd1aW50NjQgZGF0YUxlbmd0aCwgRG93bmxv
YWRUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+cmVjZWl2ZWREYXRhKGRvd25sb2Fk
LCBkYXRhTGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgfQotCi0gICAgc3RhdGlj
IGdib29sZWFuIGZpbmlzaGVkQ2FsbGJhY2soV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBEb3du
bG9hZFRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICB0ZXN0LT5maW5pc2hlZChkb3dubG9hZCk7
Ci0gICAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiBmYWls
ZWRDYWxsYmFjayhXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIEdFcnJvciogZXJyb3IsIERvd25s
b2FkVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0KGVycm9yKTsKLSAgICAgICAg
dGVzdC0+ZmFpbGVkKGRvd25sb2FkLCBlcnJvcik7Ci0gICAgICAgIHJldHVybiBUUlVFOwotICAg
IH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiBkZWNpZGVEZXN0aW5hdGlvbkNhbGxiYWNrKFdlYktp
dERvd25sb2FkKiBkb3dubG9hZCwgY29uc3QgZ2NoYXIqIHN1Z2dlc3RlZEZpbGVuYW1lLCBEb3du
bG9hZFRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICBnX2Fzc2VydChzdWdnZXN0ZWRGaWxlbmFt
ZSk7Ci0gICAgICAgIHRlc3QtPmRlY2lkZURlc3RpbmF0aW9uKGRvd25sb2FkLCBzdWdnZXN0ZWRG
aWxlbmFtZSk7Ci0gICAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lk
IGRvd25sb2FkU3RhcnRlZENhbGxiYWNrKFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYktp
dERvd25sb2FkKiBkb3dubG9hZCwgRG93bmxvYWRUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAg
Z19hc3NlcnQod2Via2l0X2Rvd25sb2FkX2dldF9yZXF1ZXN0KGRvd25sb2FkKSk7Ci0gICAgICAg
IHRlc3QtPnN0YXJ0ZWQoZG93bmxvYWQpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGRvd25s
b2FkLCAibm90aWZ5OjpyZXNwb25zZSIsIEdfQ0FMTEJBQ0socmVjZWl2ZWRSZXNwb25zZUNhbGxi
YWNrKSwgdGVzdCk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoZG93bmxvYWQsICJjcmVhdGVk
LWRlc3RpbmF0aW9uIiwgR19DQUxMQkFDSyhjcmVhdGVkRGVzdGluYXRpb25DYWxsYmFjayksIHRl
c3QpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGRvd25sb2FkLCAicmVjZWl2ZWQtZGF0YSIs
IEdfQ0FMTEJBQ0socmVjZWl2ZWREYXRhQ2FsbGJhY2spLCB0ZXN0KTsKLSAgICAgICAgZ19zaWdu
YWxfY29ubmVjdChkb3dubG9hZCwgImZpbmlzaGVkIiwgR19DQUxMQkFDSyhmaW5pc2hlZENhbGxi
YWNrKSwgdGVzdCk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoZG93bmxvYWQsICJmYWlsZWQi
LCBHX0NBTExCQUNLKGZhaWxlZENhbGxiYWNrKSwgdGVzdCk7Ci0gICAgICAgIGdfc2lnbmFsX2Nv
bm5lY3QoZG93bmxvYWQsICJkZWNpZGUtZGVzdGluYXRpb24iLCBHX0NBTExCQUNLKGRlY2lkZURl
c3RpbmF0aW9uQ2FsbGJhY2spLCB0ZXN0KTsKLSAgICB9Ci0KLSAgICBEb3dubG9hZFRlc3QoKQot
ICAgICAgICA6IG1fd2ViQ29udGV4dCh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSkK
LSAgICAgICAgLCBtX21haW5Mb29wKGdfbWFpbl9sb29wX25ldygwLCBUUlVFKSkKLSAgICAgICAg
LCBtX2Rvd25sb2FkU2l6ZSgwKQotICAgIHsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dl
YkNvbnRleHQsICJkb3dubG9hZC1zdGFydGVkIiwgR19DQUxMQkFDSyhkb3dubG9hZFN0YXJ0ZWRD
YWxsYmFjayksIHRoaXMpOwotICAgIH0KLQotICAgIH5Eb3dubG9hZFRlc3QoKQotICAgIHsKLSAg
ICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fd2ViQ29udGV4dCwg
R19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7Ci0gICAgICAgIGdfbWFpbl9s
b29wX3VucmVmKG1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBzdGFydGVk
KFdlYktpdERvd25sb2FkKiBkb3dubG9hZCkKLSAgICB7Ci0gICAgICAgIG1fZG93bmxvYWRFdmVu
dHMuYXBwZW5kKFN0YXJ0ZWQpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlZFJl
c3BvbnNlKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCkKLSAgICB7Ci0gICAgICAgIG1fZG93bmxv
YWRFdmVudHMuYXBwZW5kKFJlY2VpdmVkUmVzcG9uc2UpOwotICAgIH0KLQotICAgIHZpcnR1YWwg
dm9pZCBjcmVhdGVkRGVzdGluYXRpb24oV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBjb25zdCBj
aGFyKiBkZXN0aW5hdGlvbikKLSAgICB7Ci0gICAgICAgIG1fZG93bmxvYWRFdmVudHMuYXBwZW5k
KENyZWF0ZWREZXN0aW5hdGlvbik7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHJlY2VpdmVk
RGF0YShXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGd1aW50NjQgZGF0YUxlbmd0aCkKLSAgICB7
Ci0gICAgICAgIG1fZG93bmxvYWRTaXplICs9IGRhdGFMZW5ndGg7Ci0gICAgICAgIGlmICghbV9k
b3dubG9hZEV2ZW50cy5jb250YWlucyhSZWNlaXZlZERhdGEpKQotICAgICAgICAgICAgbV9kb3du
bG9hZEV2ZW50cy5hcHBlbmQoUmVjZWl2ZWREYXRhKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgZmluaXNoZWQoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQotICAgIHsKLSAgICAgICAgZ19h
c3NlcnRfY21wdWludChtX2Rvd25sb2FkU2l6ZSwgPT0sIHdlYmtpdF9kb3dubG9hZF9nZXRfcmVj
ZWl2ZWRfZGF0YV9sZW5ndGgoZG93bmxvYWQpKTsKLSAgICAgICAgbV9kb3dubG9hZEV2ZW50cy5h
cHBlbmQoRmluaXNoZWQpOwotICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3ApOwot
ICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBmYWlsZWQoV2ViS2l0RG93bmxvYWQqIGRvd25sb2Fk
LCBHRXJyb3IqIGVycm9yKQotICAgIHsKLSAgICAgICAgbV9kb3dubG9hZEV2ZW50cy5hcHBlbmQo
RmFpbGVkKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGVjaWRlRGVzdGluYXRpb24oV2Vi
S2l0RG93bmxvYWQqIGRvd25sb2FkLCBjb25zdCBnY2hhciogc3VnZ2VzdGVkRmlsZW5hbWUpCi0g
ICAgewotICAgICAgICBHT3duUHRyPGNoYXI+IGRlc3RpbmF0aW9uKGdfYnVpbGRfZmlsZW5hbWUo
a1RlbXBEaXJlY3RvcnksIHN1Z2dlc3RlZEZpbGVuYW1lLCBOVUxMKSk7Ci0gICAgICAgIEdPd25Q
dHI8Y2hhcj4gZGVzdGluYXRpb25VUkkoZ19maWxlbmFtZV90b191cmkoZGVzdGluYXRpb24uZ2V0
KCksIDAsIDApKTsKLSAgICAgICAgd2Via2l0X2Rvd25sb2FkX3NldF9kZXN0aW5hdGlvbihkb3du
bG9hZCwgZGVzdGluYXRpb25VUkkuZ2V0KCkpOwotICAgIH0KLQotICAgIFdlYktpdERvd25sb2Fk
KiBkb3dubG9hZFVSSUFuZFdhaXRVbnRpbEZpbmlzaGVzKGNvbnN0IENTdHJpbmcmIHJlcXVlc3RV
UkkpCi0gICAgewotICAgICAgICBXZWJLaXREb3dubG9hZCogZG93bmxvYWQgPSB3ZWJraXRfd2Vi
X2NvbnRleHRfZG93bmxvYWRfdXJpKG1fd2ViQ29udGV4dCwgcmVxdWVzdFVSSS5kYXRhKCkpOwot
ICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKGRv
d25sb2FkKSk7Ci0KLSAgICAgICAgV2ViS2l0VVJJUmVxdWVzdCogcmVxdWVzdCA9IHdlYmtpdF9k
b3dubG9hZF9nZXRfcmVxdWVzdChkb3dubG9hZCk7Ci0gICAgICAgIGdfYXNzZXJ0KHJlcXVlc3Qp
OwotICAgICAgICBBU1NFUlRfQ01QX0NTVFJJTkcod2Via2l0X3VyaV9yZXF1ZXN0X2dldF91cmko
cmVxdWVzdCksID09LCByZXF1ZXN0VVJJKTsKLQotICAgICAgICBnX21haW5fbG9vcF9ydW4obV9t
YWluTG9vcCk7Ci0KLSAgICAgICAgcmV0dXJuIGRvd25sb2FkOwotICAgIH0KLQotICAgIHZvaWQg
Y2hlY2tEZXN0aW5hdGlvbkFuZERlbGV0ZUZpbGUoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBj
b25zdCBjaGFyKiBleHBlY3RlZE5hbWUpCi0gICAgewotICAgICAgICBpZiAoIXdlYmtpdF9kb3du
bG9hZF9nZXRfZGVzdGluYXRpb24oZG93bmxvYWQpKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBHUmVmUHRyPEdGaWxlPiBkZXN0RmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl91
cmkod2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbihkb3dubG9hZCkpKTsKLSAgICAgICAg
R093blB0cjxjaGFyPiBkZXN0QmFzZW5hbWUoZ19maWxlX2dldF9iYXNlbmFtZShkZXN0RmlsZS5n
ZXQoKSkpOwotICAgICAgICBnX2Fzc2VydF9jbXBzdHIoZGVzdEJhc2VuYW1lLmdldCgpLCA9PSwg
ZXhwZWN0ZWROYW1lKTsKLQotICAgICAgICBnX2ZpbGVfZGVsZXRlKGRlc3RGaWxlLmdldCgpLCAw
LCAwKTsKLSAgICB9Ci0KLSAgICBXZWJLaXRXZWJDb250ZXh0KiBtX3dlYkNvbnRleHQ7Ci0gICAg
R01haW5Mb29wKiBtX21haW5Mb29wOwotICAgIFZlY3RvcjxEb3dubG9hZEV2ZW50PiBtX2Rvd25s
b2FkRXZlbnRzOwotICAgIGd1aW50NjQgbV9kb3dubG9hZFNpemU7Ci19OwotCi1zdGF0aWMgdm9p
ZCB0ZXN0RG93bmxvYWRMb2NhbEZpbGUoRG93bmxvYWRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVy
KQotewotICAgIEdPd25QdHI8Y2hhcj4gc291cmNlUGF0aChnX2J1aWxkX2ZpbGVuYW1lKFRlc3Q6
OmdldFdlYktpdDFUZXN0UmVzb3VjZXNEaXIoKS5kYXRhKCksICJ0ZXN0LnBkZiIsIE5VTEwpKTsK
LSAgICBHUmVmUHRyPEdGaWxlPiBzb3VyY2UgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0
aChzb3VyY2VQYXRoLmdldCgpKSk7Ci0gICAgR1JlZlB0cjxHRmlsZUluZm8+IHNvdXJjZUluZm8g
PSBhZG9wdEdSZWYoZ19maWxlX3F1ZXJ5X2luZm8oc291cmNlLmdldCgpLCBHX0ZJTEVfQVRUUklC
VVRFX1NUQU5EQVJEX1NJWkUsIHN0YXRpY19jYXN0PEdGaWxlUXVlcnlJbmZvRmxhZ3M+KDApLCAw
LCAwKSk7Ci0gICAgR093blB0cjxjaGFyPiBzb3VyY2VVUkkoZ19maWxlX2dldF91cmkoc291cmNl
LmdldCgpKSk7Ci0gICAgR1JlZlB0cjxXZWJLaXREb3dubG9hZD4gZG93bmxvYWQgPSBhZG9wdEdS
ZWYodGVzdC0+ZG93bmxvYWRVUklBbmRXYWl0VW50aWxGaW5pc2hlcyhzb3VyY2VVUkkuZ2V0KCkp
KTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2Rvd25sb2FkX2dldF93ZWJfdmlldyhkb3dubG9hZC5n
ZXQoKSkpOwotCi0gICAgVmVjdG9yPERvd25sb2FkVGVzdDo6RG93bmxvYWRFdmVudD4mIGV2ZW50
cyA9IHRlc3QtPm1fZG93bmxvYWRFdmVudHM7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5z
aXplKCksID09LCA1KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgRG93bmxv
YWRUZXN0OjpTdGFydGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgRG93
bmxvYWRUZXN0OjpSZWNlaXZlZFJlc3BvbnNlKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRz
WzJdLCA9PSwgRG93bmxvYWRUZXN0OjpDcmVhdGVkRGVzdGluYXRpb24pOwotICAgIGdfYXNzZXJ0
X2NtcGludChldmVudHNbM10sID09LCBEb3dubG9hZFRlc3Q6OlJlY2VpdmVkRGF0YSk7Ci0gICAg
Z19hc3NlcnRfY21waW50KGV2ZW50c1s0XSwgPT0sIERvd25sb2FkVGVzdDo6RmluaXNoZWQpOwot
Ci0gICAgV2ViS2l0VVJJUmVxdWVzdCogcmVxdWVzdCA9IHdlYmtpdF9kb3dubG9hZF9nZXRfcmVx
dWVzdChkb3dubG9hZC5nZXQoKSk7Ci0gICAgZ19hc3NlcnQocmVxdWVzdCk7Ci0gICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfdXJpKHJlcXVlc3QpLCA9PSwgc291cmNl
VVJJLmdldCgpKTsKLQotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2Rvd25sb2FkU2l6ZSwg
PT0sIGdfZmlsZV9pbmZvX2dldF9zaXplKHNvdXJjZUluZm8uZ2V0KCkpKTsKLSAgICBnX2Fzc2Vy
dCh3ZWJraXRfZG93bmxvYWRfZ2V0X2Rlc3RpbmF0aW9uKGRvd25sb2FkLmdldCgpKSk7Ci0gICAg
Z19hc3NlcnRfY21wZmxvYXQod2Via2l0X2Rvd25sb2FkX2dldF9lc3RpbWF0ZWRfcHJvZ3Jlc3Mo
ZG93bmxvYWQuZ2V0KCkpLCA9PSwgMSk7Ci0gICAgdGVzdC0+Y2hlY2tEZXN0aW5hdGlvbkFuZERl
bGV0ZUZpbGUoZG93bmxvYWQuZ2V0KCksICJ0ZXN0LnBkZiIpOwotfQotCi1jbGFzcyBEb3dubG9h
ZEVycm9yVGVzdDogcHVibGljIERvd25sb2FkVGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElC
X1RFU1RfRklYVFVSRShEb3dubG9hZEVycm9yVGVzdCk7Ci0KLSAgICBEb3dubG9hZEVycm9yVGVz
dCgpCi0gICAgICAgIDogbV9leHBlY3RlZEVycm9yKFdFQktJVF9ET1dOTE9BRF9FUlJPUl9ORVRX
T1JLKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIHJlY2VpdmVkUmVzcG9uc2UoV2ViS2l0RG93
bmxvYWQqIGRvd25sb2FkKQotICAgIHsKLSAgICAgICAgRG93bmxvYWRUZXN0OjpyZWNlaXZlZFJl
c3BvbnNlKGRvd25sb2FkKTsKLSAgICAgICAgaWYgKG1fZXhwZWN0ZWRFcnJvciA9PSBXRUJLSVRf
RE9XTkxPQURfRVJST1JfQ0FOQ0VMTEVEX0JZX1VTRVIpCi0gICAgICAgICAgICB3ZWJraXRfZG93
bmxvYWRfY2FuY2VsKGRvd25sb2FkKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNyZWF0ZWREZXN0aW5h
dGlvbihXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IGNoYXIqIGRlc3RpbmF0aW9uKQot
ICAgIHsKLSAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICB9Ci0KLSAgICB2b2lk
IGZhaWxlZChXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIEdFcnJvciogZXJyb3IpCi0gICAgewot
ICAgICAgICBnX2Fzc2VydChnX2Vycm9yX21hdGNoZXMoZXJyb3IsIFdFQktJVF9ET1dOTE9BRF9F
UlJPUiwgbV9leHBlY3RlZEVycm9yKSk7Ci0gICAgICAgIERvd25sb2FkVGVzdDo6ZmFpbGVkKGRv
d25sb2FkLCBlcnJvcik7Ci0gICAgfQotCi0gICAgdm9pZCBkZWNpZGVEZXN0aW5hdGlvbihXZWJL
aXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IGdjaGFyKiBzdWdnZXN0ZWRGaWxlbmFtZSkKLSAg
ICB7Ci0gICAgICAgIGlmIChtX2V4cGVjdGVkRXJyb3IgIT0gV0VCS0lUX0RPV05MT0FEX0VSUk9S
X0RFU1RJTkFUSU9OKSB7Ci0gICAgICAgICAgICBEb3dubG9hZFRlc3Q6OmRlY2lkZURlc3RpbmF0
aW9uKGRvd25sb2FkLCBzdWdnZXN0ZWRGaWxlbmFtZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgd2Via2l0X2Rvd25sb2FkX3NldF9kZXN0aW5hdGlvbihkb3dubG9h
ZCwgImZpbGU6Ly8vZm9vL2JhciIpOwotICAgIH0KLQotICAgIFdlYktpdERvd25sb2FkRXJyb3Ig
bV9leHBlY3RlZEVycm9yOwotfTsKLQotc3RhdGljIHZvaWQgdGVzdERvd25sb2FkTG9jYWxGaWxl
RXJyb3IoRG93bmxvYWRFcnJvclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVz
dC0+bV9leHBlY3RlZEVycm9yID0gV0VCS0lUX0RPV05MT0FEX0VSUk9SX05FVFdPUks7Ci0gICAg
R1JlZlB0cjxXZWJLaXREb3dubG9hZD4gZG93bmxvYWQgPSBhZG9wdEdSZWYodGVzdC0+ZG93bmxv
YWRVUklBbmRXYWl0VW50aWxGaW5pc2hlcygiZmlsZTovLy9mb28vYmFyIikpOwotICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfZG93bmxvYWRfZ2V0X3dlYl92aWV3KGRvd25sb2FkLmdldCgpKSk7Ci0KLSAg
ICBWZWN0b3I8RG93bmxvYWRUZXN0OjpEb3dubG9hZEV2ZW50PiYgZXZlbnRzID0gdGVzdC0+bV9k
b3dubG9hZEV2ZW50czsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDMp
OwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBEb3dubG9hZFRlc3Q6OlN0YXJ0
ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBEb3dubG9hZFRlc3Q6OkZh
aWxlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIERvd25sb2FkVGVzdDo6
RmluaXNoZWQpOwotICAgIGV2ZW50cy5jbGVhcigpOwotICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHdl
YmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNzKGRvd25sb2FkLmdldCgpKSwgPCwg
MSk7Ci0KLSAgICB0ZXN0LT5tX2V4cGVjdGVkRXJyb3IgPSBXRUJLSVRfRE9XTkxPQURfRVJST1Jf
REVTVElOQVRJT047Ci0gICAgR093blB0cjxjaGFyPiBwYXRoKGdfYnVpbGRfZmlsZW5hbWUoVGVz
dDo6Z2V0V2ViS2l0MVRlc3RSZXNvdWNlc0RpcigpLmRhdGEoKSwgInRlc3QucGRmIiwgTlVMTCkp
OwotICAgIEdSZWZQdHI8R0ZpbGU+IGZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0
aChwYXRoLmdldCgpKSk7Ci0gICAgR093blB0cjxjaGFyPiB1cmkoZ19maWxlX2dldF91cmkoZmls
ZS5nZXQoKSkpOwotICAgIGRvd25sb2FkID0gYWRvcHRHUmVmKHRlc3QtPmRvd25sb2FkVVJJQW5k
V2FpdFVudGlsRmluaXNoZXModXJpLmdldCgpKSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9kb3du
bG9hZF9nZXRfd2ViX3ZpZXcoZG93bmxvYWQuZ2V0KCkpKTsKLQotICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHMuc2l6ZSgpLCA9PSwgNCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwg
PT0sIERvd25sb2FkVGVzdDo6U3RhcnRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sx
XSwgPT0sIERvd25sb2FkVGVzdDo6UmVjZWl2ZWRSZXNwb25zZSk7Ci0gICAgZ19hc3NlcnRfY21w
aW50KGV2ZW50c1syXSwgPT0sIERvd25sb2FkVGVzdDo6RmFpbGVkKTsKLSAgICBnX2Fzc2VydF9j
bXBpbnQoZXZlbnRzWzNdLCA9PSwgRG93bmxvYWRUZXN0OjpGaW5pc2hlZCk7Ci0gICAgZXZlbnRz
LmNsZWFyKCk7Ci0gICAgZ19hc3NlcnRfY21wZmxvYXQod2Via2l0X2Rvd25sb2FkX2dldF9lc3Rp
bWF0ZWRfcHJvZ3Jlc3MoZG93bmxvYWQuZ2V0KCkpLCA8LCAxKTsKLSAgICB0ZXN0LT5jaGVja0Rl
c3RpbmF0aW9uQW5kRGVsZXRlRmlsZShkb3dubG9hZC5nZXQoKSwgImJhciIpOwotCi0gICAgdGVz
dC0+bV9leHBlY3RlZEVycm9yID0gV0VCS0lUX0RPV05MT0FEX0VSUk9SX0NBTkNFTExFRF9CWV9V
U0VSOwotICAgIGRvd25sb2FkID0gYWRvcHRHUmVmKHRlc3QtPmRvd25sb2FkVVJJQW5kV2FpdFVu
dGlsRmluaXNoZXModXJpLmdldCgpKSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9kb3dubG9hZF9n
ZXRfd2ViX3ZpZXcoZG93bmxvYWQuZ2V0KCkpKTsKLQotICAgIGdfYXNzZXJ0X2NtcGludChldmVu
dHMuc2l6ZSgpLCA9PSwgNCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIERv
d25sb2FkVGVzdDo6U3RhcnRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0s
IERvd25sb2FkVGVzdDo6UmVjZWl2ZWRSZXNwb25zZSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2
ZW50c1syXSwgPT0sIERvd25sb2FkVGVzdDo6RmFpbGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
ZXZlbnRzWzNdLCA9PSwgRG93bmxvYWRUZXN0OjpGaW5pc2hlZCk7Ci0gICAgZXZlbnRzLmNsZWFy
KCk7Ci0gICAgZ19hc3NlcnRfY21wZmxvYXQod2Via2l0X2Rvd25sb2FkX2dldF9lc3RpbWF0ZWRf
cHJvZ3Jlc3MoZG93bmxvYWQuZ2V0KCkpLCA8LCAxKTsKLSAgICB0ZXN0LT5jaGVja0Rlc3RpbmF0
aW9uQW5kRGVsZXRlRmlsZShkb3dubG9hZC5nZXQoKSwgInRlc3QucGRmIik7Ci19Ci0KLXN0YXRp
YyBXZWJLaXRUZXN0U2VydmVyKiBrU2VydmVyOwotc3RhdGljIGNvbnN0IGNoYXIqIGtTZXJ2ZXJT
dWdnZXN0ZWRGaWxlbmFtZSA9ICJ3ZWJraXQtZG93bmxvYWRlZC1maWxlIjsKLQotc3RhdGljIHZv
aWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbWVzc2Fn
ZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSosIFNvdXBDbGllbnRDb250ZXh0KiwgZ3Bv
aW50ZXIpCi17Ci0gICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsK
LSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9U
X0lNUExFTUVOVEVEKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEdPd25QdHI8Y2hh
cj4gZmlsZVBhdGgoZ19idWlsZF9maWxlbmFtZShUZXN0OjpnZXRXZWJLaXQxVGVzdFJlc291Y2Vz
RGlyKCkuZGF0YSgpLCBwYXRoLCBOVUxMKSk7Ci0gICAgY2hhciogY29udGVudHM7Ci0gICAgZ3Np
emUgY29udGVudHNMZW5ndGg7Ci0gICAgaWYgKCFnX2ZpbGVfZ2V0X2NvbnRlbnRzKGZpbGVQYXRo
LmdldCgpLCAmY29udGVudHMsICZjb250ZW50c0xlbmd0aCwgMCkpIHsKLSAgICAgICAgc291cF9t
ZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0ZPVU5EKTsKLSAgICAg
ICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNz
YWdlLCBTT1VQX1NUQVRVU19PSyk7Ci0KLSAgICBHT3duUHRyPGNoYXI+IGNvbnRlbnREaXNwb3Np
dGlvbihnX3N0cmR1cF9wcmludGYoImZpbGVuYW1lPSVzIiwga1NlcnZlclN1Z2dlc3RlZEZpbGVu
YW1lKSk7Ci0gICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNl
X2hlYWRlcnMsICJDb250ZW50LURpc3Bvc2l0aW9uIiwgY29udGVudERpc3Bvc2l0aW9uLmdldCgp
KTsKLSAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwg
U09VUF9NRU1PUllfVEFLRSwgY29udGVudHMsIGNvbnRlbnRzTGVuZ3RoKTsKLQotICAgIHNvdXBf
bWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOwotfQotCi1zdGF0
aWMgdm9pZCB0ZXN0RG93bmxvYWRSZW1vdGVGaWxlKERvd25sb2FkVGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKLXsKLSAgICBHUmVmUHRyPFdlYktpdERvd25sb2FkPiBkb3dubG9hZCA9IGFkb3B0
R1JlZih0ZXN0LT5kb3dubG9hZFVSSUFuZFdhaXRVbnRpbEZpbmlzaGVzKGtTZXJ2ZXItPmdldFVS
SUZvclBhdGgoIi90ZXN0LnBkZiIpKSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9kb3dubG9hZF9n
ZXRfd2ViX3ZpZXcoZG93bmxvYWQuZ2V0KCkpKTsKLQotICAgIFZlY3RvcjxEb3dubG9hZFRlc3Q6
OkRvd25sb2FkRXZlbnQ+JiBldmVudHMgPSB0ZXN0LT5tX2Rvd25sb2FkRXZlbnRzOwotICAgIGdf
YXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgNSk7Ci0gICAgZ19hc3NlcnRfY21waW50
KGV2ZW50c1swXSwgPT0sIERvd25sb2FkVGVzdDo6U3RhcnRlZCk7Ci0gICAgZ19hc3NlcnRfY21w
aW50KGV2ZW50c1sxXSwgPT0sIERvd25sb2FkVGVzdDo6UmVjZWl2ZWRSZXNwb25zZSk7Ci0gICAg
Z19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIERvd25sb2FkVGVzdDo6Q3JlYXRlZERlc3Rp
bmF0aW9uKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzNdLCA9PSwgRG93bmxvYWRUZXN0
OjpSZWNlaXZlZERhdGEpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbNF0sID09LCBEb3du
bG9hZFRlc3Q6OkZpbmlzaGVkKTsKLSAgICBldmVudHMuY2xlYXIoKTsKLQotICAgIFdlYktpdFVS
SVJlcXVlc3QqIHJlcXVlc3QgPSB3ZWJraXRfZG93bmxvYWRfZ2V0X3JlcXVlc3QoZG93bmxvYWQu
Z2V0KCkpOwotICAgIGdfYXNzZXJ0KHJlcXVlc3QpOwotICAgIEFTU0VSVF9DTVBfQ1NUUklORyh3
ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KSwgPT0sIGtTZXJ2ZXItPmdldFVSSUZv
clBhdGgoIi90ZXN0LnBkZiIpKTsKLQotICAgIGdfYXNzZXJ0KHdlYmtpdF9kb3dubG9hZF9nZXRf
ZGVzdGluYXRpb24oZG93bmxvYWQuZ2V0KCkpKTsKLSAgICBnX2Fzc2VydF9jbXBmbG9hdCh3ZWJr
aXRfZG93bmxvYWRfZ2V0X2VzdGltYXRlZF9wcm9ncmVzcyhkb3dubG9hZC5nZXQoKSksID09LCAx
KTsKLSAgICB0ZXN0LT5jaGVja0Rlc3RpbmF0aW9uQW5kRGVsZXRlRmlsZShkb3dubG9hZC5nZXQo
KSwga1NlcnZlclN1Z2dlc3RlZEZpbGVuYW1lKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdERvd25s
b2FkUmVtb3RlRmlsZUVycm9yKERvd25sb2FkRXJyb3JUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVy
KQotewotICAgIHRlc3QtPm1fZXhwZWN0ZWRFcnJvciA9IFdFQktJVF9ET1dOTE9BRF9FUlJPUl9O
RVRXT1JLOwotICAgIEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkID0gYWRvcHRHUmVm
KHRlc3QtPmRvd25sb2FkVVJJQW5kV2FpdFVudGlsRmluaXNoZXMoa1NlcnZlci0+Z2V0VVJJRm9y
UGF0aCgiL2ZvbyIpKSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9kb3dubG9hZF9nZXRfd2ViX3Zp
ZXcoZG93bmxvYWQuZ2V0KCkpKTsKLQotICAgIFZlY3RvcjxEb3dubG9hZFRlc3Q6OkRvd25sb2Fk
RXZlbnQ+JiBldmVudHMgPSB0ZXN0LT5tX2Rvd25sb2FkRXZlbnRzOwotICAgIGdfYXNzZXJ0X2Nt
cGludChldmVudHMuc2l6ZSgpLCA9PSwgNCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sw
XSwgPT0sIERvd25sb2FkVGVzdDo6U3RhcnRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50
c1sxXSwgPT0sIERvd25sb2FkVGVzdDo6UmVjZWl2ZWRSZXNwb25zZSk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KGV2ZW50c1syXSwgPT0sIERvd25sb2FkVGVzdDo6RmFpbGVkKTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoZXZlbnRzWzNdLCA9PSwgRG93bmxvYWRUZXN0OjpGaW5pc2hlZCk7Ci0gICAgZXZl
bnRzLmNsZWFyKCk7Ci0gICAgV2ViS2l0VVJJUmVzcG9uc2UqIHJlc3BvbnNlID0gd2Via2l0X2Rv
d25sb2FkX2dldF9yZXNwb25zZShkb3dubG9hZC5nZXQoKSk7Ci0gICAgZ19hc3NlcnRfY21wdWlu
dCh3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF9zdGF0dXNfY29kZShyZXNwb25zZSksID09LCA0MDQp
OwotICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3By
b2dyZXNzKGRvd25sb2FkLmdldCgpKSwgPCwgMSk7Ci0KLSAgICB0ZXN0LT5tX2V4cGVjdGVkRXJy
b3IgPSBXRUJLSVRfRE9XTkxPQURfRVJST1JfREVTVElOQVRJT047Ci0gICAgZG93bmxvYWQgPSBh
ZG9wdEdSZWYodGVzdC0+ZG93bmxvYWRVUklBbmRXYWl0VW50aWxGaW5pc2hlcyhrU2VydmVyLT5n
ZXRVUklGb3JQYXRoKCIvdGVzdC5wZGYiKSkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG93bmxv
YWRfZ2V0X3dlYl92aWV3KGRvd25sb2FkLmdldCgpKSk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQo
ZXZlbnRzLnNpemUoKSwgPT0sIDQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09
LCBEb3dubG9hZFRlc3Q6OlN0YXJ0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0s
ID09LCBEb3dubG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOwotICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHNbMl0sID09LCBEb3dubG9hZFRlc3Q6OkZhaWxlZCk7Ci0gICAgZ19hc3NlcnRfY21w
aW50KGV2ZW50c1szXSwgPT0sIERvd25sb2FkVGVzdDo6RmluaXNoZWQpOwotICAgIGV2ZW50cy5j
bGVhcigpOwotICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1h
dGVkX3Byb2dyZXNzKGRvd25sb2FkLmdldCgpKSwgPCwgMSk7Ci0gICAgdGVzdC0+Y2hlY2tEZXN0
aW5hdGlvbkFuZERlbGV0ZUZpbGUoZG93bmxvYWQuZ2V0KCksICJiYXIiKTsKLQotICAgIHRlc3Qt
Pm1fZXhwZWN0ZWRFcnJvciA9IFdFQktJVF9ET1dOTE9BRF9FUlJPUl9DQU5DRUxMRURfQllfVVNF
UjsKLSAgICBkb3dubG9hZCA9IGFkb3B0R1JlZih0ZXN0LT5kb3dubG9hZFVSSUFuZFdhaXRVbnRp
bEZpbmlzaGVzKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi90ZXN0LnBkZiIpKSk7Ci0gICAgZ19h
c3NlcnQoIXdlYmtpdF9kb3dubG9hZF9nZXRfd2ViX3ZpZXcoZG93bmxvYWQuZ2V0KCkpKTsKLQot
ICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgNCk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KGV2ZW50c1swXSwgPT0sIERvd25sb2FkVGVzdDo6U3RhcnRlZCk7Ci0gICAgZ19hc3Nl
cnRfY21waW50KGV2ZW50c1sxXSwgPT0sIERvd25sb2FkVGVzdDo6UmVjZWl2ZWRSZXNwb25zZSk7
Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIERvd25sb2FkVGVzdDo6RmFpbGVk
KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzNdLCA9PSwgRG93bmxvYWRUZXN0OjpGaW5p
c2hlZCk7Ci0gICAgZXZlbnRzLmNsZWFyKCk7Ci0gICAgZ19hc3NlcnRfY21wZmxvYXQod2Via2l0
X2Rvd25sb2FkX2dldF9lc3RpbWF0ZWRfcHJvZ3Jlc3MoZG93bmxvYWQuZ2V0KCkpLCA8LCAxKTsK
LSAgICB0ZXN0LT5jaGVja0Rlc3RpbmF0aW9uQW5kRGVsZXRlRmlsZShkb3dubG9hZC5nZXQoKSwg
a1NlcnZlclN1Z2dlc3RlZEZpbGVuYW1lKTsKLX0KLQotY2xhc3MgV2ViVmlld0Rvd25sb2FkVGVz
dDogcHVibGljIFdlYlZpZXdUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhU
VVJFKFdlYlZpZXdEb3dubG9hZFRlc3QpOwotCi0gICAgc3RhdGljIHZvaWQgZG93bmxvYWRTdGFy
dGVkQ2FsbGJhY2soV2ViS2l0V2ViQ29udGV4dCogY29udGV4dCwgV2ViS2l0RG93bmxvYWQqIGRv
d25sb2FkLCBXZWJWaWV3RG93bmxvYWRUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+
bV9kb3dubG9hZCA9IGRvd25sb2FkOwotICAgICAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0
ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKGRvd25sb2FkKSk7Ci0gICAgICAgIHRlc3QtPnF1
aXRNYWluTG9vcCgpOwotICAgIH0KLQotICAgIFdlYlZpZXdEb3dubG9hZFRlc3QoKQotICAgIHsK
LSAgICAgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQobV93
ZWJWaWV3KSwgImRvd25sb2FkLXN0YXJ0ZWQiLCBHX0NBTExCQUNLKGRvd25sb2FkU3RhcnRlZENh
bGxiYWNrKSwgdGhpcyk7Ci0gICAgfQotCi0gICAgfldlYlZpZXdEb3dubG9hZFRlc3QoKQotICAg
IHsKLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKHdlYmtpdF93
ZWJfdmlld19nZXRfY29udGV4dChtX3dlYlZpZXcpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAw
LCAwLCAwLCB0aGlzKTsKLSAgICB9Ci0KLSAgICB2b2lkIHdhaXRVbnRpbERvd25sb2FkU3RhcnRl
ZCgpCi0gICAgewotICAgICAgICBtX2Rvd25sb2FkID0gMDsKLSAgICAgICAgZ19tYWluX2xvb3Bf
cnVuKG1fbWFpbkxvb3ApOwotICAgICAgICBnX2Fzc2VydChtX2Rvd25sb2FkLmdldCgpKTsKLSAg
ICB9Ci0KLSAgICBzdGF0aWMgZ2Jvb2xlYW4gZG93bmxvYWREZWNpZGVEZXN0aW5hdGlvbkNhbGxi
YWNrKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgY29uc3QgZ2NoYXIqIHN1Z2dlc3RlZEZpbGVu
YW1lLCBXZWJWaWV3RG93bmxvYWRUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgR093blB0cjxj
aGFyPiBkZXN0aW5hdGlvbihnX2J1aWxkX2ZpbGVuYW1lKGtUZW1wRGlyZWN0b3J5LCBzdWdnZXN0
ZWRGaWxlbmFtZSwgTlVMTCkpOwotICAgICAgICBHT3duUHRyPGNoYXI+IGRlc3RpbmF0aW9uVVJJ
KGdfZmlsZW5hbWVfdG9fdXJpKGRlc3RpbmF0aW9uLmdldCgpLCAwLCAwKSk7Ci0gICAgICAgIHdl
YmtpdF9kb3dubG9hZF9zZXRfZGVzdGluYXRpb24oZG93bmxvYWQsIGRlc3RpbmF0aW9uVVJJLmdl
dCgpKTsKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgZG93
bmxvYWRGaW5pc2hlZENhbGxiYWNrKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgV2ViVmlld0Rv
d25sb2FkVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHRlc3QtPnF1aXRNYWluTG9vcCgpOwot
ICAgIH0KLQotICAgIHZvaWQgd2FpdFVudGlsRG93bmxvYWRGaW5pc2hlZCgpCi0gICAgewotICAg
ICAgICBnX3NpZ25hbF9jb25uZWN0KG1fZG93bmxvYWQuZ2V0KCksICJkZWNpZGUtZGVzdGluYXRp
b24iLCBHX0NBTExCQUNLKGRvd25sb2FkRGVjaWRlRGVzdGluYXRpb25DYWxsYmFjayksIHRoaXMp
OwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fZG93bmxvYWQuZ2V0KCksICJmaW5pc2hlZCIs
IEdfQ0FMTEJBQ0soZG93bmxvYWRGaW5pc2hlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIGdf
bWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAgICB9Ci0KLSAgICBHUmVmUHRyPFdlYktpdERv
d25sb2FkPiBtX2Rvd25sb2FkOwotfTsKLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdEb3dubG9h
ZFVSSShXZWJWaWV3RG93bmxvYWRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIEdS
ZWZQdHI8V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJfdmll
d19kb3dubG9hZF91cmkodGVzdC0+bV93ZWJWaWV3LCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIv
dGVzdC5wZGYiKS5kYXRhKCkpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxEb3dubG9hZFN0YXJ0ZWQo
KTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX3dlYlZpZXcgPT0gd2Via2l0X2Rvd25sb2FkX2dldF93
ZWJfdmlldyhkb3dubG9hZC5nZXQoKSkpOwotICAgIHRlc3QtPndhaXRVbnRpbERvd25sb2FkRmlu
aXNoZWQoKTsKLQotICAgIEdSZWZQdHI8R0ZpbGU+IGRvd25sb2FkRmlsZSA9IGFkb3B0R1JlZihn
X2ZpbGVfbmV3X2Zvcl91cmkod2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbihkb3dubG9h
ZC5nZXQoKSkpKTsKLSAgICBHUmVmUHRyPEdGaWxlSW5mbz4gZG93bmxvYWRGaWxlSW5mbyA9IGFk
b3B0R1JlZihnX2ZpbGVfcXVlcnlfaW5mbyhkb3dubG9hZEZpbGUuZ2V0KCksIEdfRklMRV9BVFRS
SUJVVEVfU1RBTkRBUkRfU0laRSwgc3RhdGljX2Nhc3Q8R0ZpbGVRdWVyeUluZm9GbGFncz4oMCks
IDAsIDApKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZ19maWxlX2luZm9fZ2V0X3NpemUoZG93bmxv
YWRGaWxlSW5mby5nZXQoKSksID4sIDApOwotICAgIGdfZmlsZV9kZWxldGUoZG93bmxvYWRGaWxl
LmdldCgpLCAwLCAwKTsKLX0KLQotY2xhc3MgUG9saWN5UmVzcG9uc2VEb3dubG9hZFRlc3Q6IHB1
YmxpYyBXZWJWaWV3RG93bmxvYWRUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9G
SVhUVVJFKFBvbGljeVJlc3BvbnNlRG93bmxvYWRUZXN0KTsKLQotICAgIHN0YXRpYyBnYm9vbGVh
biBkZWNpZGVQb2xpY3lDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRQb2xp
Y3lEZWNpc2lvbiogZGVjaXNpb24sIFdlYktpdFBvbGljeURlY2lzaW9uVHlwZSB0eXBlLCBQb2xp
Y3lSZXNwb25zZURvd25sb2FkVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIGlmICh0eXBlICE9
IFdFQktJVF9QT0xJQ1lfREVDSVNJT05fVFlQRV9SRVNQT05TRSkKLSAgICAgICAgICAgIHJldHVy
biBGQUxTRTsKLQotICAgICAgICB3ZWJraXRfcG9saWN5X2RlY2lzaW9uX2Rvd25sb2FkKGRlY2lz
aW9uKTsKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgfQotCi0gICAgUG9saWN5UmVzcG9uc2VE
b3dubG9hZFRlc3QoKQotICAgIHsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcs
ICJkZWNpZGUtcG9saWN5IiwgR19DQUxMQkFDSyhkZWNpZGVQb2xpY3lDYWxsYmFjayksIHRoaXMp
OwotICAgIH0KLQotICAgIH5Qb2xpY3lSZXNwb25zZURvd25sb2FkVGVzdCgpCi0gICAgewotICAg
ICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV93ZWJWaWV3LCBHX1NJ
R05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNh
bmNlbERvd25sb2FkQW5kV2FpdFVudGlsRmluaXNoZWQoKQotICAgIHsKLSAgICAgICAgd2Via2l0
X2Rvd25sb2FkX2NhbmNlbChtX2Rvd25sb2FkLmdldCgpKTsKLSAgICAgICAgd2FpdFVudGlsRG93
bmxvYWRGaW5pc2hlZCgpOwotICAgICAgICBtX2Rvd25sb2FkID0gMDsKLSAgICB9Ci19OwotCi1z
dGF0aWMgdm9pZCB0ZXN0UG9saWN5UmVzcG9uc2VEb3dubG9hZChQb2xpY3lSZXNwb25zZURvd25s
b2FkVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICAvLyBUZXN0IHRoYXQgYSBkb3du
bG9hZCBzdGFydGVkIGJ5IHRoZSB0aGUgcG9saWN5IGNoZWNrZXIgY29udGFpbnMgdGhlIHdlYiB2
aWV3LgotICAgIENTdHJpbmcgcmVxdWVzdFVSSSA9IGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi90
ZXN0LnBkZiIpLmRhdGEoKTsKLSAgICB0ZXN0LT5sb2FkVVJJKHJlcXVlc3RVUkkuZGF0YSgpKTsK
LSAgICB0ZXN0LT53YWl0VW50aWxEb3dubG9hZFN0YXJ0ZWQoKTsKLQotICAgIFdlYktpdFVSSVJl
cXVlc3QqIHJlcXVlc3QgPSB3ZWJraXRfZG93bmxvYWRfZ2V0X3JlcXVlc3QodGVzdC0+bV9kb3du
bG9hZC5nZXQoKSk7Ci0gICAgZ19hc3NlcnQocmVxdWVzdCk7Ci0gICAgQVNTRVJUX0NNUF9DU1RS
SU5HKHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfdXJpKHJlcXVlc3QpLCA9PSwgcmVxdWVzdFVSSSk7
Ci0KLSAgICBnX2Fzc2VydCh0ZXN0LT5tX3dlYlZpZXcgPT0gd2Via2l0X2Rvd25sb2FkX2dldF93
ZWJfdmlldyh0ZXN0LT5tX2Rvd25sb2FkLmdldCgpKSk7Ci0gICAgdGVzdC0+Y2FuY2VsRG93bmxv
YWRBbmRXYWl0VW50aWxGaW5pc2hlZCgpOwotfQotCi12b2lkIGJlZm9yZUFsbCgpCi17Ci0gICAg
a1NlcnZlciA9IG5ldyBXZWJLaXRUZXN0U2VydmVyKCk7Ci0gICAga1NlcnZlci0+cnVuKHNlcnZl
ckNhbGxiYWNrKTsKLQotICAgIGtUZW1wRGlyZWN0b3J5ID0gZ19kaXJfbWFrZV90bXAoIldlYktp
dDJUZXN0cy1YWFhYWFgiLCAwKTsKLSAgICBnX2Fzc2VydChrVGVtcERpcmVjdG9yeSk7Ci0KLSAg
ICBEb3dubG9hZFRlc3Q6OmFkZCgiRG93bmxvYWRzIiwgImxvY2FsLWZpbGUiLCB0ZXN0RG93bmxv
YWRMb2NhbEZpbGUpOwotICAgIERvd25sb2FkRXJyb3JUZXN0OjphZGQoIkRvd25sb2FkcyIsICJs
b2NhbC1maWxlLWVycm9yIiwgdGVzdERvd25sb2FkTG9jYWxGaWxlRXJyb3IpOwotICAgIERvd25s
b2FkVGVzdDo6YWRkKCJEb3dubG9hZHMiLCAicmVtb3RlLWZpbGUiLCB0ZXN0RG93bmxvYWRSZW1v
dGVGaWxlKTsKLSAgICBEb3dubG9hZEVycm9yVGVzdDo6YWRkKCJEb3dubG9hZHMiLCAicmVtb3Rl
LWZpbGUtZXJyb3IiLCB0ZXN0RG93bmxvYWRSZW1vdGVGaWxlRXJyb3IpOwotICAgIFdlYlZpZXdE
b3dubG9hZFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJkb3dubG9hZC11cmkiLCB0ZXN0V2Vi
Vmlld0Rvd25sb2FkVVJJKTsKLSAgICBQb2xpY3lSZXNwb25zZURvd25sb2FkVGVzdDo6YWRkKCJE
b3dubG9hZHMiLCAicG9saWN5LWRlY2lzaW9uLWRvd25sb2FkIiwgdGVzdFBvbGljeVJlc3BvbnNl
RG93bmxvYWQpOwotfQotCi12b2lkIGFmdGVyQWxsKCkKLXsKLSAgICBkZWxldGUga1NlcnZlcjsK
LSAgICBnX3JtZGlyKGtUZW1wRGlyZWN0b3J5KTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RGcmFtZS5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0RnJhbWUuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBhNjNiMDc5Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RGcmFtZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2OSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwuCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0KLSNpbmNsdWRlICJXZWJQcm9jZXNzVGVzdFJ1bm5lci5oIgotI2luY2x1ZGUg
IldlYlZpZXdUZXN0LmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHdlYmtpdDIv
d2Via2l0Mi5oPgotCi1zdGF0aWMgV2ViUHJvY2Vzc1Rlc3RSdW5uZXIqIHRlc3RSdW5uZXI7Ci0K
LXN0YXRpYyB2b2lkIHdlYmtpdEZyYW1lVGVzdFJ1bihXZWJWaWV3VGVzdCogdGVzdCwgY29uc3Qg
Y2hhciogdGVzdE5hbWUpCi17Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHRlc3RIVE1MID0gIjxo
dG1sPjxib2R5PjwvYm9keT48L2h0bWw+IjsKLSAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0SFRNTCwg
MCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBHVmFyaWFudEJ1
aWxkZXIgYnVpbGRlcjsKLSAgICBnX3ZhcmlhbnRfYnVpbGRlcl9pbml0KCZidWlsZGVyLCBHX1ZB
UklBTlRfVFlQRV9WQVJESUNUKTsKLSAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoJmJ1aWxkZXIs
ICJ7c3Z9IiwgInBhZ2VJRCIsIGdfdmFyaWFudF9uZXdfdWludDY0KHdlYmtpdF93ZWJfdmlld19n
ZXRfcGFnZV9pZCh0ZXN0LT5tX3dlYlZpZXcpKSk7Ci0gICAgZ19hc3NlcnQodGVzdFJ1bm5lci0+
cnVuVGVzdCgiV2ViS2l0RnJhbWUiLCB0ZXN0TmFtZSwgZ192YXJpYW50X2J1aWxkZXJfZW5kKCZi
dWlsZGVyKSkpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViS2l0RnJhbWVNYWluRnJhbWUoV2Vi
Vmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgd2Via2l0RnJhbWVUZXN0UnVu
KHRlc3QsICJtYWluLWZyYW1lIik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJLaXRGcmFtZVVS
SShXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB3ZWJraXRGcmFtZVRl
c3RSdW4odGVzdCwgInVyaSIpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViS2l0RnJhbWVKYXZh
U2NyaXB0Q29udGV4dChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB3
ZWJraXRGcmFtZVRlc3RSdW4odGVzdCwgImphdmFzY3JpcHQtY29udGV4dCIpOwotfQotCi12b2lk
IGJlZm9yZUFsbCgpCi17Ci0gICAgdGVzdFJ1bm5lciA9IG5ldyBXZWJQcm9jZXNzVGVzdFJ1bm5l
cigpOwotICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfd2ViX2V4dGVuc2lvbnNfZGlyZWN0b3J5
KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpLCBXRUJLSVRfVEVTVF9XRUJfRVhURU5T
SU9OU19ESVIpOwotCi0gICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0RnJhbWUiLCAibWFpbi1m
cmFtZSIsIHRlc3RXZWJLaXRGcmFtZU1haW5GcmFtZSk7Ci0gICAgV2ViVmlld1Rlc3Q6OmFkZCgi
V2ViS2l0RnJhbWUiLCAidXJpIiwgdGVzdFdlYktpdEZyYW1lVVJJKTsKLSAgICBXZWJWaWV3VGVz
dDo6YWRkKCJXZWJLaXRGcmFtZSIsICJqYXZhc2NyaXB0LWNvbnRleHQiLCB0ZXN0V2ViS2l0RnJh
bWVKYXZhU2NyaXB0Q29udGV4dCk7Ci19Ci0KLXZvaWQgYWZ0ZXJBbGwoKQotewotICAgIGRlbGV0
ZSB0ZXN0UnVubmVyOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvVGVzdEluc3BlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9UZXN0SW5zcGVjdG9yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMWYwNDMwMy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9UZXN0SW5zcGVjdG9yLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM1NiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLQotI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLQotY2xhc3MgSW5zcGVjdG9yVGVz
dDogcHVibGljIFdlYlZpZXdUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhU
VVJFKEluc3BlY3RvclRlc3QpOwotCi0gICAgZW51bSBJbnNwZWN0b3JFdmVudHMgewotICAgICAg
ICBPcGVuV2luZG93LAotICAgICAgICBCcmluZ1RvRnJvbnQsCi0gICAgICAgIENsb3NlZCwKLSAg
ICAgICAgQXR0YWNoLAotICAgICAgICBEZXRhY2gKLSAgICB9OwotCi0gICAgc3RhdGljIGdib29s
ZWFuIG9wZW5XaW5kb3dDYWxsYmFjayhXZWJLaXRXZWJJbnNwZWN0b3IqLCBJbnNwZWN0b3JUZXN0
KiB0ZXN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRlc3QtPm9wZW5XaW5kb3coKTsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgZ2Jvb2xlYW4gYnJpbmdUb0Zyb250Q2FsbGJhY2soV2ViS2l0V2ViSW5z
cGVjdG9yKiwgSW5zcGVjdG9yVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0ZXN0
LT5icmluZ1RvRnJvbnQoKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBjbG9zZWRDYWxsYmFj
ayhXZWJLaXRXZWJJbnNwZWN0b3IqLCBJbnNwZWN0b3JUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRlc3QtPmNsb3NlZCgpOwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiBh
dHRhY2hDYWxsYmFjayhXZWJLaXRXZWJJbnNwZWN0b3IqLCBJbnNwZWN0b3JUZXN0KiB0ZXN0KQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHRlc3QtPmF0dGFjaCgpOwotICAgIH0KLQotICAgIHN0YXRp
YyBnYm9vbGVhbiBkZXRhY2hDYWxsYmFjayhXZWJLaXRXZWJJbnNwZWN0b3IqLCBJbnNwZWN0b3JU
ZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRlc3QtPmRldGFjaCgpOwotICAgIH0K
LQotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBnTWluaW11bUF0dGFjaGVkSW5zcGVjdG9yV2lk
dGggPSA3NTA7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGdNaW5pbXVtQXR0YWNoZWRJbnNw
ZWN0b3JIZWlnaHQgPSAyNTA7Ci0KLSAgICBJbnNwZWN0b3JUZXN0KCkKLSAgICAgICAgOiBXZWJW
aWV3VGVzdCgpCi0gICAgICAgICwgbV9pbnNwZWN0b3Iod2Via2l0X3dlYl92aWV3X2dldF9pbnNw
ZWN0b3IobV93ZWJWaWV3KSkKLSAgICB7Ci0gICAgICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5h
YmxlX2RldmVsb3Blcl9leHRyYXMod2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyhtX3dlYlZp
ZXcpLCBUUlVFKTsKLSAgICAgICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hl
cyhHX09CSkVDVChtX2luc3BlY3RvcikpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1faW5z
cGVjdG9yLCAib3Blbi13aW5kb3ciLCBHX0NBTExCQUNLKG9wZW5XaW5kb3dDYWxsYmFjayksIHRo
aXMpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1faW5zcGVjdG9yLCAiYnJpbmctdG8tZnJv
bnQiLCBHX0NBTExCQUNLKGJyaW5nVG9Gcm9udENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIGdf
c2lnbmFsX2Nvbm5lY3QobV9pbnNwZWN0b3IsICJjbG9zZWQiLCBHX0NBTExCQUNLKGNsb3NlZENh
bGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9pbnNwZWN0b3IsICJh
dHRhY2giLCBHX0NBTExCQUNLKGF0dGFjaENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIGdfc2ln
bmFsX2Nvbm5lY3QobV9pbnNwZWN0b3IsICJkZXRhY2giLCBHX0NBTExCQUNLKGRldGFjaENhbGxi
YWNrKSwgdGhpcyk7Ci0gICAgfQotCi0gICAgfkluc3BlY3RvclRlc3QoKQotICAgIHsKLSAgICAg
ICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1faW5zcGVjdG9yLCBHX1NJ
R05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFs
IGJvb2wgb3BlbldpbmRvdygpCi0gICAgewotICAgICAgICBtX2V2ZW50cy5hcHBlbmQoT3Blbldp
bmRvdyk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7Ci0gICAgICAgIHJl
dHVybiBUUlVFOwotICAgIH0KLQotICAgIHZpcnR1YWwgYm9vbCBicmluZ1RvRnJvbnQoKQotICAg
IHsKLSAgICAgICAgbV9ldmVudHMuYXBwZW5kKEJyaW5nVG9Gcm9udCk7Ci0gICAgICAgIGdfbWFp
bl9sb29wX3F1aXQobV9tYWluTG9vcCk7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgY2xvc2VkKCkKLSAgICB7Ci0gICAgICAgIG1fZXZlbnRzLmFwcGVu
ZChDbG9zZWQpOwotICAgIH0KLQotICAgIHZpcnR1YWwgYm9vbCBhdHRhY2goKQotICAgIHsKLSAg
ICAgICAgbV9ldmVudHMuYXBwZW5kKEF0dGFjaCk7Ci0gICAgICAgIHJldHVybiBUUlVFOwotICAg
IH0KLQotICAgIHZpcnR1YWwgYm9vbCBkZXRhY2goKQotICAgIHsKLSAgICAgICAgbV9ldmVudHMu
YXBwZW5kKERldGFjaCk7Ci0gICAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQotCi0gICAgc3Rh
dGljIGdib29sZWFuIHNob3dJZGxlKEluc3BlY3RvclRlc3QqIHRlc3QpCi0gICAgewotICAgICAg
ICB3ZWJraXRfd2ViX2luc3BlY3Rvcl9zaG93KHRlc3QtPm1faW5zcGVjdG9yKTsKLSAgICAgICAg
cmV0dXJuIEZBTFNFOwotICAgIH0KLQotICAgIHZvaWQgc2hvdygpCi0gICAgewotICAgICAgICBn
X2lkbGVfYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHNob3dJZGxlKSwgdGhpcyk7
Ci0gICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAgICB9Ci0KLSAgICB2b2lk
IHJlc2l6ZVZpZXdBbmRBdHRhY2goKQotICAgIHsKLSAgICAgICAgLy8gUmVzaXplIHRoZSB2aWV3
IHRvIG1ha2Ugcm9vbSBmb3IgdGhlIGluc3BlY3Rvci4KLSAgICAgICAgcmVzaXplVmlldyhnTWlu
aW11bUF0dGFjaGVkSW5zcGVjdG9yV2lkdGgsIChnTWluaW11bUF0dGFjaGVkSW5zcGVjdG9ySGVp
Z2h0ICsgMSkgKiA0IC8gMyk7Ci0gICAgICAgIHdlYmtpdF93ZWJfaW5zcGVjdG9yX2F0dGFjaCht
X2luc3BlY3Rvcik7Ci0gICAgfQotCi0gICAgc3RhdGljIGdib29sZWFuIGRldGFjaElkbGUoSW5z
cGVjdG9yVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHdlYmtpdF93ZWJfaW5zcGVjdG9yX2Rl
dGFjaCh0ZXN0LT5tX2luc3BlY3Rvcik7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0K
LSAgICB2b2lkIGRldGFjaEFuZFdhaXRVbnRpbFdpbmRvd09wZW5lZCgpCi0gICAgewotICAgICAg
ICBnX2lkbGVfYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KGRldGFjaElkbGUpLCB0
aGlzKTsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotICAgIH0KLQotICAg
IHZvaWQgY2xvc2UoKQotICAgIHsKLSAgICAgICAgd2Via2l0X3dlYl9pbnNwZWN0b3JfY2xvc2Uo
bV9pbnNwZWN0b3IpOwotICAgIH0KLQotICAgIFdlYktpdFdlYkluc3BlY3RvciogbV9pbnNwZWN0
b3I7Ci0gICAgVmVjdG9yPEluc3BlY3RvckV2ZW50cz4gbV9ldmVudHM7Ci19OwotCi1zdGF0aWMg
dm9pZCB0ZXN0SW5zcGVjdG9yRGVmYXVsdChJbnNwZWN0b3JUZXN0KiB0ZXN0LCBnY29uc3Rwb2lu
dGVyKQotewotICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZChHVEtfV0lO
RE9XX1RPUExFVkVMKTsKLSAgICB0ZXN0LT5yZXNpemVWaWV3KDIwMCwgMjAwKTsKLSAgICB0ZXN0
LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHk+PHA+V2ViS2l0R1RLKyBJbnNwZWN0b3IgdGVzdDwvcD48
L2JvZHk+PC9odG1sPiIsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwot
Ci0gICAgdGVzdC0+c2hvdygpOwotICAgIC8vIFdlIGRvbid0IGFkZCB0aGUgdmlldyB0byBhIGNv
bnRhaW5lciwgc28gY29uc3VtZSB0aGUgd2VhayByZWYgd2l0aCBHUmVmUHRyLgotICAgIEdSZWZQ
dHI8V2ViS2l0V2ViVmlld0Jhc2U+IGluc3BlY3RvclZpZXcgPSB3ZWJraXRfd2ViX2luc3BlY3Rv
cl9nZXRfd2ViX3ZpZXcodGVzdC0+bV9pbnNwZWN0b3IpOwotICAgIGdfYXNzZXJ0KGluc3BlY3Rv
clZpZXcuZ2V0KCkpOwotICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0Rmlu
aXNoZXMoR19PQkpFQ1QoaW5zcGVjdG9yVmlldy5nZXQoKSkpOwotICAgIGdfYXNzZXJ0KCF3ZWJr
aXRfd2ViX2luc3BlY3Rvcl9pc19hdHRhY2hlZCh0ZXN0LT5tX2luc3BlY3RvcikpOwotICAgIGdf
YXNzZXJ0X2NtcHVpbnQod2Via2l0X3dlYl9pbnNwZWN0b3JfZ2V0X2F0dGFjaGVkX2hlaWdodCh0
ZXN0LT5tX2luc3BlY3RvciksID09LCAwKTsKLSAgICBWZWN0b3I8SW5zcGVjdG9yVGVzdDo6SW5z
cGVjdG9yRXZlbnRzPiYgZXZlbnRzID0gdGVzdC0+bV9ldmVudHM7Ci0gICAgZ19hc3NlcnRfY21w
aW50KGV2ZW50cy5zaXplKCksID09LCAxKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBd
LCA9PSwgSW5zcGVjdG9yVGVzdDo6T3BlbldpbmRvdyk7Ci0gICAgdGVzdC0+bV9ldmVudHMuY2xl
YXIoKTsKLQotICAgIHRlc3QtPnNob3coKTsKLSAgICBldmVudHMgPSB0ZXN0LT5tX2V2ZW50czsK
LSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDEpOwotICAgIGdfYXNzZXJ0
X2NtcGludChldmVudHNbMF0sID09LCBJbnNwZWN0b3JUZXN0OjpCcmluZ1RvRnJvbnQpOwotICAg
IHRlc3QtPm1fZXZlbnRzLmNsZWFyKCk7Ci0KLSAgICB0ZXN0LT5yZXNpemVWaWV3QW5kQXR0YWNo
KCk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3dlYl9pbnNwZWN0b3JfaXNfYXR0YWNoZWQodGVzdC0+
bV9pbnNwZWN0b3IpKTsKLSAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF93ZWJfaW5zcGVjdG9y
X2dldF9hdHRhY2hlZF9oZWlnaHQodGVzdC0+bV9pbnNwZWN0b3IpLCA+PSwgSW5zcGVjdG9yVGVz
dDo6Z01pbmltdW1BdHRhY2hlZEluc3BlY3RvckhlaWdodCk7Ci0gICAgZXZlbnRzID0gdGVzdC0+
bV9ldmVudHM7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAxKTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgSW5zcGVjdG9yVGVzdDo6QXR0YWNoKTsK
LSAgICB0ZXN0LT5tX2V2ZW50cy5jbGVhcigpOwotCi0gICAgdGVzdC0+ZGV0YWNoQW5kV2FpdFVu
dGlsV2luZG93T3BlbmVkKCk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfaW5zcGVjdG9yX2lz
X2F0dGFjaGVkKHRlc3QtPm1faW5zcGVjdG9yKSk7Ci0gICAgZXZlbnRzID0gdGVzdC0+bV9ldmVu
dHM7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAyKTsKLSAgICBnX2Fz
c2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgSW5zcGVjdG9yVGVzdDo6RGV0YWNoKTsKLSAgICBn
X2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgSW5zcGVjdG9yVGVzdDo6T3BlbldpbmRvdyk7
Ci0gICAgdGVzdC0+bV9ldmVudHMuY2xlYXIoKTsKLQotICAgIHRlc3QtPmNsb3NlKCk7Ci0gICAg
ZXZlbnRzID0gdGVzdC0+bV9ldmVudHM7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXpl
KCksID09LCAxKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgSW5zcGVjdG9y
VGVzdDo6Q2xvc2VkKTsKLSAgICB0ZXN0LT5tX2V2ZW50cy5jbGVhcigpOwotfQotCi1jbGFzcyBD
dXN0b21JbnNwZWN0b3JUZXN0OiBwdWJsaWMgSW5zcGVjdG9yVGVzdCB7Ci1wdWJsaWM6Ci0gICAg
TUFLRV9HTElCX1RFU1RfRklYVFVSRShDdXN0b21JbnNwZWN0b3JUZXN0KTsKLQotICAgIEN1c3Rv
bUluc3BlY3RvclRlc3QoKQotICAgICAgICA6IEluc3BlY3RvclRlc3QoKQotICAgICAgICAsIG1f
aW5zcGVjdG9yV2luZG93KDApCi0gICAgewotICAgIH0KLQotICAgIH5DdXN0b21JbnNwZWN0b3JU
ZXN0KCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2luc3BlY3RvcldpbmRvdykKLSAgICAgICAgICAg
IGd0a193aWRnZXRfZGVzdHJveShtX2luc3BlY3RvcldpbmRvdyk7Ci0gICAgfQotCi0gICAgYm9v
bCBvcGVuV2luZG93KCkKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0KCFtX2luc3BlY3RvcldpbmRv
dyk7Ci0gICAgICAgIG1faW5zcGVjdG9yV2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRP
V19UT1BMRVZFTCk7Ci0gICAgICAgIFdlYktpdFdlYlZpZXdCYXNlKiBpbnNwZWN0b3JWaWV3ID0g
d2Via2l0X3dlYl9pbnNwZWN0b3JfZ2V0X3dlYl92aWV3KG1faW5zcGVjdG9yKTsKLSAgICAgICAg
Z19hc3NlcnQoaW5zcGVjdG9yVmlldyk7Ci0gICAgICAgIGd0a19jb250YWluZXJfYWRkKEdUS19D
T05UQUlORVIobV9pbnNwZWN0b3JXaW5kb3cpLCBHVEtfV0lER0VUKGluc3BlY3RvclZpZXcpKTsK
LSAgICAgICAgZ3RrX3dpZGdldF9zaG93X2FsbChtX2luc3BlY3RvcldpbmRvdyk7Ci0KLSAgICAg
ICAgcmV0dXJuIEluc3BlY3RvclRlc3Q6Om9wZW5XaW5kb3coKTsKLSAgICB9Ci0KLSAgICB2b2lk
IGNsb3NlZCgpCi0gICAgewotICAgICAgICBpZiAobV9pbnNwZWN0b3JXaW5kb3cpIHsKLSAgICAg
ICAgICAgIGd0a193aWRnZXRfZGVzdHJveShtX2luc3BlY3RvcldpbmRvdyk7Ci0gICAgICAgICAg
ICBtX2luc3BlY3RvcldpbmRvdyA9IDA7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gSW5z
cGVjdG9yVGVzdDo6Y2xvc2VkKCk7Ci0gICAgfQotCi0gICAgYm9vbCBhdHRhY2goKQotICAgIHsK
LSAgICAgICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3QmFzZT4gaW5zcGVjdG9yVmlldyA9IHdlYmtp
dF93ZWJfaW5zcGVjdG9yX2dldF93ZWJfdmlldyhtX2luc3BlY3Rvcik7Ci0gICAgICAgIGlmICht
X2luc3BlY3RvcldpbmRvdykgewotICAgICAgICAgICAgZ3RrX2NvbnRhaW5lcl9yZW1vdmUoR1RL
X0NPTlRBSU5FUihtX2luc3BlY3RvcldpbmRvdyksIEdUS19XSURHRVQoaW5zcGVjdG9yVmlldy5n
ZXQoKSkpOwotICAgICAgICAgICAgZ3RrX3dpZGdldF9kZXN0cm95KG1faW5zcGVjdG9yV2luZG93
KTsKLSAgICAgICAgICAgIG1faW5zcGVjdG9yV2luZG93ID0gMDsKLSAgICAgICAgfQotCi0gICAg
ICAgIEd0a1dpZGdldCogcGFuZTsKLSAgICAgICAgaWYgKGd0a19iaW5fZ2V0X2NoaWxkKEdUS19C
SU4obV9wYXJlbnRXaW5kb3cpKSA9PSBHVEtfV0lER0VUKG1fd2ViVmlldykpIHsKLSAgICAgICAg
ICAgIEdSZWZQdHI8V2ViS2l0V2ViVmlldz4gaW5zcGVjdGVkVmlldyA9IG1fd2ViVmlldzsKLSAg
ICAgICAgICAgIGd0a19jb250YWluZXJfcmVtb3ZlKEdUS19DT05UQUlORVIobV9wYXJlbnRXaW5k
b3cpLCBHVEtfV0lER0VUKG1fd2ViVmlldykpOwotICAgICAgICAgICAgcGFuZSA9IGd0a19wYW5l
ZF9uZXcoR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMKTsKLSAgICAgICAgICAgIGd0a19wYW5lZF9h
ZGQxKEdUS19QQU5FRChwYW5lKSwgR1RLX1dJREdFVChtX3dlYlZpZXcpKTsKLSAgICAgICAgICAg
IGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIobV9wYXJlbnRXaW5kb3cpLCBwYW5lKTsK
LSAgICAgICAgICAgIGd0a193aWRnZXRfc2hvd19hbGwocGFuZSk7Ci0gICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgcGFuZSA9IGd0a19iaW5fZ2V0X2NoaWxkKEdUS19CSU4obV9wYXJlbnRXaW5k
b3cpKTsKLSAgICAgICAgZ3RrX3BhbmVkX3NldF9wb3NpdGlvbihHVEtfUEFORUQocGFuZSksIHdl
YmtpdF93ZWJfaW5zcGVjdG9yX2dldF9hdHRhY2hlZF9oZWlnaHQobV9pbnNwZWN0b3IpKTsKLSAg
ICAgICAgZ3RrX3BhbmVkX2FkZDIoR1RLX1BBTkVEKHBhbmUpLCBHVEtfV0lER0VUKGluc3BlY3Rv
clZpZXcuZ2V0KCkpKTsKLQotICAgICAgICByZXR1cm4gSW5zcGVjdG9yVGVzdDo6YXR0YWNoKCk7
Ci0gICAgfQotCi0gICAgYm9vbCBkZXRhY2goKQotICAgIHsKLSAgICAgICAgR1JlZlB0cjxXZWJL
aXRXZWJWaWV3QmFzZT4gaW5zcGVjdG9yVmlldyA9IHdlYmtpdF93ZWJfaW5zcGVjdG9yX2dldF93
ZWJfdmlldyhtX2luc3BlY3Rvcik7Ci0gICAgICAgIEd0a1dpZGdldCogcGFuZSA9IGd0a19iaW5f
Z2V0X2NoaWxkKEdUS19CSU4obV9wYXJlbnRXaW5kb3cpKTsKLSAgICAgICAgZ19hc3NlcnQoR1RL
X0lTX1BBTkVEKHBhbmUpKTsKLSAgICAgICAgZ3RrX2NvbnRhaW5lcl9yZW1vdmUoR1RLX0NPTlRB
SU5FUihwYW5lKSwgR1RLX1dJREdFVChpbnNwZWN0b3JWaWV3LmdldCgpKSk7Ci0gICAgICAgIHJl
dHVybiBJbnNwZWN0b3JUZXN0OjpkZXRhY2goKTsKLSAgICB9Ci0KLSAgICB2b2lkIGRlc3Ryb3lX
aW5kb3coKQotICAgIHsKLSAgICAgICAgZ19hc3NlcnQobV9pbnNwZWN0b3JXaW5kb3cpOwotICAg
ICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV9pbnNwZWN0b3JXaW5kb3cpOwotICAgICAgICBtX2lu
c3BlY3RvcldpbmRvdyA9IDA7Ci0gICAgfQotCi0gICAgR3RrV2lkZ2V0KiBtX2luc3BlY3Rvcldp
bmRvdzsKLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RJbnNwZWN0b3JNYW51YWxBdHRhY2hEZXRhY2go
Q3VzdG9tSW5zcGVjdG9yVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5z
aG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoR1RLX1dJTkRPV19UT1BMRVZFTCk7Ci0gICAg
dGVzdC0+cmVzaXplVmlldygyMDAsIDIwMCk7Ci0gICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxi
b2R5PjxwPldlYktpdEdUSysgSW5zcGVjdG9yIHRlc3Q8L3A+PC9ib2R5PjwvaHRtbD4iLCAwKTsK
LSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIHRlc3QtPnNob3coKTsK
LSAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNU
KHdlYmtpdF93ZWJfaW5zcGVjdG9yX2dldF93ZWJfdmlldyh0ZXN0LT5tX2luc3BlY3RvcikpKTsK
LSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl9pbnNwZWN0b3JfaXNfYXR0YWNoZWQodGVzdC0+bV9p
bnNwZWN0b3IpKTsKLSAgICBWZWN0b3I8SW5zcGVjdG9yVGVzdDo6SW5zcGVjdG9yRXZlbnRzPiYg
ZXZlbnRzID0gdGVzdC0+bV9ldmVudHM7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXpl
KCksID09LCAxKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgSW5zcGVjdG9y
VGVzdDo6T3BlbldpbmRvdyk7Ci0gICAgdGVzdC0+bV9ldmVudHMuY2xlYXIoKTsKLQotICAgIHRl
c3QtPnJlc2l6ZVZpZXdBbmRBdHRhY2goKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2luc3Bl
Y3Rvcl9pc19hdHRhY2hlZCh0ZXN0LT5tX2luc3BlY3RvcikpOwotICAgIGdfYXNzZXJ0X2NtcHVp
bnQod2Via2l0X3dlYl9pbnNwZWN0b3JfZ2V0X2F0dGFjaGVkX2hlaWdodCh0ZXN0LT5tX2luc3Bl
Y3RvciksID49LCBJbnNwZWN0b3JUZXN0OjpnTWluaW11bUF0dGFjaGVkSW5zcGVjdG9ySGVpZ2h0
KTsKLSAgICBldmVudHMgPSB0ZXN0LT5tX2V2ZW50czsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZl
bnRzLnNpemUoKSwgPT0sIDEpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBJ
bnNwZWN0b3JUZXN0OjpBdHRhY2gpOwotICAgIHRlc3QtPm1fZXZlbnRzLmNsZWFyKCk7Ci0KLSAg
ICB0ZXN0LT5kZXRhY2hBbmRXYWl0VW50aWxXaW5kb3dPcGVuZWQoKTsKLSAgICBnX2Fzc2VydCgh
d2Via2l0X3dlYl9pbnNwZWN0b3JfaXNfYXR0YWNoZWQodGVzdC0+bV9pbnNwZWN0b3IpKTsKLSAg
ICBldmVudHMgPSB0ZXN0LT5tX2V2ZW50czsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNp
emUoKSwgPT0sIDIpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBJbnNwZWN0
b3JUZXN0OjpEZXRhY2gpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBJbnNw
ZWN0b3JUZXN0OjpPcGVuV2luZG93KTsKLSAgICB0ZXN0LT5tX2V2ZW50cy5jbGVhcigpOwotCi0g
ICAgdGVzdC0+cmVzaXplVmlld0FuZEF0dGFjaCgpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJf
aW5zcGVjdG9yX2lzX2F0dGFjaGVkKHRlc3QtPm1faW5zcGVjdG9yKSk7Ci0gICAgdGVzdC0+bV9l
dmVudHMuY2xlYXIoKTsKLSAgICB0ZXN0LT5jbG9zZSgpOwotICAgIGV2ZW50cyA9IHRlc3QtPm1f
ZXZlbnRzOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgMik7Ci0gICAg
Z19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIEluc3BlY3RvclRlc3Q6OkRldGFjaCk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIEluc3BlY3RvclRlc3Q6OkNsb3NlZCk7
Ci0gICAgdGVzdC0+bV9ldmVudHMuY2xlYXIoKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdEluc3Bl
Y3RvckN1c3RvbUNvbnRhaW5lckRlc3Ryb3llZChDdXN0b21JbnNwZWN0b3JUZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBl
ZChHVEtfV0lORE9XX1RPUExFVkVMKTsKLSAgICB0ZXN0LT5yZXNpemVWaWV3KDIwMCwgMjAwKTsK
LSAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHk+PHA+V2ViS2l0R1RLKyBJbnNwZWN0b3Ig
dGVzdDwvcD48L2JvZHk+PC9odG1sPiIsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5p
c2hlZCgpOwotCi0gICAgdGVzdC0+c2hvdygpOwotICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVs
ZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1Qod2Via2l0X3dlYl9pbnNwZWN0b3JfZ2V0X3dl
Yl92aWV3KHRlc3QtPm1faW5zcGVjdG9yKSkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX2lu
c3BlY3Rvcl9pc19hdHRhY2hlZCh0ZXN0LT5tX2luc3BlY3RvcikpOwotCi0gICAgdGVzdC0+bV9l
dmVudHMuY2xlYXIoKTsKLSAgICB0ZXN0LT5kZXN0cm95V2luZG93KCk7Ci0gICAgVmVjdG9yPElu
c3BlY3RvclRlc3Q6Okluc3BlY3RvckV2ZW50cz4mIGV2ZW50cyA9IHRlc3QtPm1fZXZlbnRzOwot
ICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgMSk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KGV2ZW50c1swXSwgPT0sIEluc3BlY3RvclRlc3Q6OkNsb3NlZCk7Ci0gICAgdGVzdC0+
bV9ldmVudHMuY2xlYXIoKTsKLX0KLQotdm9pZCBiZWZvcmVBbGwoKQotewotICAgIEluc3BlY3Rv
clRlc3Q6OmFkZCgiV2ViS2l0V2ViSW5zcGVjdG9yIiwgImRlZmF1bHQiLCB0ZXN0SW5zcGVjdG9y
RGVmYXVsdCk7Ci0gICAgQ3VzdG9tSW5zcGVjdG9yVGVzdDo6YWRkKCJXZWJLaXRXZWJJbnNwZWN0
b3IiLCAibWFudWFsLWF0dGFjaC1kZXRhY2giLCB0ZXN0SW5zcGVjdG9yTWFudWFsQXR0YWNoRGV0
YWNoKTsKLSAgICBDdXN0b21JbnNwZWN0b3JUZXN0OjphZGQoIldlYktpdFdlYkluc3BlY3RvciIs
ICJjdXN0b20tY29udGFpbmVyLWRlc3Ryb3llZCIsIHRlc3RJbnNwZWN0b3JDdXN0b21Db250YWlu
ZXJEZXN0cm95ZWQpOwotfQotCi12b2lkIGFmdGVyQWxsKCkKLXsKLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RJbnNwZWN0b3JTZXJ2ZXIu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdEluc3BlY3Rv
clNlcnZlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmNGJmNTQuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdEluc3Bl
Y3RvclNlcnZlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyOTQgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzIEx0ZC4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECi0gKiBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UgotICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAi
V2ViVmlld1Rlc3QuaCIKLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLS8vIE5hbWUgb2YgdGhlIHRlc3Qgc2VydmVyIGFw
cGxpY2F0aW9uIGNyZWF0aW5nIHRoZSB3ZWJWaWV3IG9iamVjdC4KLXN0YXRpYyBjb25zdCBjaGFy
KiBnVGVzdFNlcnZlckFwcE5hbWUgPSAiSW5zcGVjdG9yVGVzdFNlcnZlciI7Ci0KLS8vIE1heCBz
ZWNvbmRzIHRvIHdhaXQgZm9yIHRoZSB0ZXN0IHNlcnZlciBiZWZvcmUgaW5zcGVjdGluZyBpdC4K
LXN0YXRpYyBjb25zdCBpbnQgZ01heFdhaXRGb3JDaGlsZCA9IDU7Ci0KLS8vIFRoZSBQSUQgZm9y
IHRoZSB0ZXN0IHNlcnZlciBydW5uaW5nLCBzbyB3ZSBjYW4ga2lsbCBpdCBpZiBuZWVkZWQuCi1z
dGF0aWMgR1BpZCBnQ2hpbGRQcm9jZXNzUGlkID0gMDsKLQotLy8gV2hldGhlciB0aGUgY2hpbGQg
aGFzIHJlcGxpZWQgYW5kIGl0J3MgcmVhZHkuCi1zdGF0aWMgYm9vbCBnQ2hpbGRJc1JlYWR5ID0g
ZmFsc2U7Ci0KLXN0YXRpYyB2b2lkIHN0b3BUZXN0U2VydmVyKCkKLXsKLSAgICAvLyBEbyBub3Ro
aW5nIGlmIHRoZXJlJ3Mgbm8gc2VydmVyIHJ1bm5pbmcuCi0gICAgaWYgKCFnQ2hpbGRQcm9jZXNz
UGlkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBnX3NwYXduX2Nsb3NlX3BpZChnQ2hpbGRQcm9j
ZXNzUGlkKTsKLSAgICBraWxsKGdDaGlsZFByb2Nlc3NQaWQsIFNJR1RFUk0pOwotICAgIGdDaGls
ZFByb2Nlc3NQaWQgPSAwOwotfQotCi1zdGF0aWMgdm9pZCBzaWdBYm9ydEhhbmRsZXIoaW50IHNp
Z051bSkKLXsKLSAgICAvLyBKdXN0IHN0b3AgdGhlIHRlc3Qgc2VydmVyIGlmIFNJR0FCUlQgd2Fz
IHJlY2VpdmVkLgotICAgIHN0b3BUZXN0U2VydmVyKCk7Ci19Ci0KLXN0YXRpYyBncG9pbnRlciB0
ZXN0U2VydmVyTW9uaXRvclRocmVhZEZ1bmMoZ3BvaW50ZXIpCi17Ci0gICAgLy8gV2FpdCBmb3Ig
dGhlIHNwZWNpZmllZCB0aW1lb3V0IHRvIGhhcHBlbi4KLSAgICBnX3VzbGVlcChnTWF4V2FpdEZv
ckNoaWxkICogR19VU0VDX1BFUl9TRUMpOwotCi0gICAgLy8gS2lsbCB0aGUgY2hpbGQgcHJvY2Vz
cyBpZiBub3QgcmVhZHkgeWV0LgotICAgIGlmICghZ0NoaWxkSXNSZWFkeSkKLSAgICAgICAgc3Rv
cFRlc3RTZXJ2ZXIoKTsKLQotICAgIGdfdGhyZWFkX2V4aXQoMCk7Ci0gICAgcmV0dXJuIDA7Ci19
Ci0KLXN0YXRpYyB2b2lkIHN0YXJ0VGVzdFNlcnZlck1vbml0b3IoKQotewotICAgIGdDaGlsZElz
UmVhZHkgPSBmYWxzZTsKLSAgICBnX3RocmVhZF9uZXcoIlRlc3RTZXJ2ZXJNb25pdG9yIiwgdGVz
dFNlcnZlck1vbml0b3JUaHJlYWRGdW5jLCAwKTsKLX0KLQotc3RhdGljIHZvaWQgc3RhcnRUZXN0
U2VydmVyKCkKLXsKLSAgICAvLyBQcmVwYXJlIGFyZ3ZbXSBmb3Igc3Bhd25pbmcgdGhlIHNlcnZl
ciBwcm9jZXNzLgotICAgIEdPd25QdHI8Y2hhcj4gdGVzdFNlcnZlclBhdGgoZ19idWlsZF9maWxl
bmFtZShXRUJLSVRfRVhFQ19QQVRILCAiV2ViS2l0MkdPYmplY3RBUElUZXN0cyIsIGdUZXN0U2Vy
dmVyQXBwTmFtZSwgTlVMTCkpOwotCi0gICAgLy8gV2UgaW5zdGFsbCBhIGhhbmRsZXIgdG8gZW5z
dXJlIHRoYXQgd2Uga2lsbCB0aGUgY2hpbGQgcHJvY2VzcwotICAgIC8vIGlmIHRoZSBwYXJlbnQg
ZGllcyBiZWNhdXNlIG9mIHdoYXRldmVyIHRoZSByZWFzb24gaXMuCi0gICAgc2lnbmFsKFNJR0FC
UlQsIHNpZ0Fib3J0SGFuZGxlcik7Ci0KLSAgICBjaGFyKiB0ZXN0U2VydmVyQXJndlsyXTsKLSAg
ICB0ZXN0U2VydmVyQXJndlswXSA9IHRlc3RTZXJ2ZXJQYXRoLmdldCgpOwotICAgIHRlc3RTZXJ2
ZXJBcmd2WzFdID0gMDsKLQotICAgIC8vIFNwYXduIHRoZSBzZXJ2ZXIsIGdldHRpbmcgaXRzIHN0
ZG91dCBmaWxlIGRlc2NyaXB0b3IgdG8gc2V0IGEKLSAgICAvLyBjb21tdW5pY2F0aW9uIGNoYW5u
ZWwsIHNvIHdlIGtub3cgd2hlbiBpdCdzIHJlYWR5LgotICAgIGludCBjaGlsZFN0ZG91dCA9IDA7
Ci0gICAgZ19hc3NlcnQoZ19zcGF3bl9hc3luY193aXRoX3BpcGVzKDAsIHRlc3RTZXJ2ZXJBcmd2
LCAwLCBzdGF0aWNfY2FzdDxHU3Bhd25GbGFncz4oMCksIDAsIDAsCi0gICAgICAgICZnQ2hpbGRQ
cm9jZXNzUGlkLCAwLCAmY2hpbGRTdGRvdXQsIDAsIDApKTsKLQotICAgIC8vIFN0YXJ0IG1vbml0
b3JpbmcgdGhlIHRlc3Qgc2VydmVyIChpbiBhIHNlcGFyYXRlIHRocmVhZCkgdG8KLSAgICAvLyBl
bnN1cmUgd2UgZG9uJ3QgYmxvY2sgb24gdGhlIGNoaWxkIHByb2Nlc3MgbW9yZSB0aGFuIGEgdGlt
ZW91dC4KLSAgICBzdGFydFRlc3RTZXJ2ZXJNb25pdG9yKCk7Ci0KLSAgICBjaGFyIG1zZ1syXTsK
LSAgICBHSU9DaGFubmVsKiBpb0NoYW5uZWwgPSBnX2lvX2NoYW5uZWxfdW5peF9uZXcoY2hpbGRT
dGRvdXQpOwotICAgIGlmIChnX2lvX2NoYW5uZWxfcmVhZF9jaGFycyhpb0NoYW5uZWwsIG1zZywg
MiwgMCwgMCkgPT0gR19JT19TVEFUVVNfTk9STUFMKSB7Ci0gICAgICAgIC8vIENoZWNrIHdoZXRo
ZXIgdGhlIHNlcnZlciBzZW50IGEgbWVzc2FnZSBzYXlpbmcgaXQncyByZWFkeQotICAgICAgICAv
LyBhbmQgc3RvcmUgdGhlIHJlc3VsdCBnbG9iYWxseSwgc28gdGhlIG1vbml0b3IgY2FuIHNlZSBp
dC4KLSAgICAgICAgZ0NoaWxkSXNSZWFkeSA9IG1zZ1swXSA9PSAnTycgJiYgbXNnWzFdID09ICdL
JzsKLSAgICB9Ci0gICAgZ19pb19jaGFubmVsX3VucmVmKGlvQ2hhbm5lbCk7Ci0gICAgY2xvc2Uo
Y2hpbGRTdGRvdXQpOwotCi0gICAgLy8gVGhlIHRpbWVvdXQgd2FzIHJlYWNoZWQgYW5kIHRoZSBz
ZXJ2ZXIgaXMgbm90IHJlYWR5IHlldCwgc28KLSAgICAvLyBzdG9wIGl0IGlubWVkaWF0ZWx5LCBh
bmQgbGV0IHRoZSB1bml0IHRlc3RzIGZhaWwuCi0gICAgaWYgKCFnQ2hpbGRJc1JlYWR5KQotICAg
ICAgICBzdG9wVGVzdFNlcnZlcigpOwotfQotCi1jbGFzcyBJbnNwZWN0b3JTZXJ2ZXJUZXN0OiBw
dWJsaWMgV2ViVmlld1Rlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUo
SW5zcGVjdG9yU2VydmVyVGVzdCk7Ci0KLSAgICBJbnNwZWN0b3JTZXJ2ZXJUZXN0KCkKLSAgICAg
ICAgOiBXZWJWaWV3VGVzdCgpCi0gICAgewotICAgIH0KLQotICAgIGJvb2wgZ2V0UGFnZUxpc3Qo
KQotICAgIHsKLSAgICAgICAgbG9hZEh0bWwoIjxzY3JpcHQgdHlwZT1cInRleHQvamF2YXNjcmlw
dFwiPlxuIgotICAgICAgICAgICAgInZhciBwYWdlcztcbiIKLSAgICAgICAgICAgICJ2YXIgeGhy
ID0gbmV3IFhNTEh0dHBSZXF1ZXN0O1xuIgotICAgICAgICAgICAgInhoci5vcGVuKFwiR0VUXCIs
IFwiL3BhZ2VsaXN0Lmpzb25cIik7XG4iCi0gICAgICAgICAgICAieGhyLm9ubG9hZCA9IGZ1bmN0
aW9uKGUpIHtcbiIKLSAgICAgICAgICAgICAgICAiaWYgKHhoci5zdGF0dXMgPT0gMjAwKSB7XG4i
Ci0gICAgICAgICAgICAgICAgICAgICJwYWdlcyA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4
dCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICJkb2N1bWVudC50aXRsZSA9IFwiT0tcIjtcbiIK
LSAgICAgICAgICAgICAgICAifSBlbHNlIFxuIgotICAgICAgICAgICAgICAgICAgICAiZG9jdW1l
bnQudGl0bGUgPSBcIkZBSUxcIjtcbiIKLSAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAg
ICAgInhoci5zZW5kKCk7XG4iCi0gICAgICAgICAgICAiPC9zY3JpcHQ+XG4iLAotICAgICAgICAg
ICAgImh0dHA6Ly8xMjcuMC4wLjE6Mjk5OS8iKTsKLQotICAgICAgICB3YWl0VW50aWxUaXRsZUNo
YW5nZWQoKTsKLQotICAgICAgICBpZiAoIXN0cmNtcCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3RpdGxl
KG1fd2ViVmlldyksICJPSyIpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIH5JbnNwZWN0b3JTZXJ2ZXJUZXN0KCkKLSAgICB7
Ci0gICAgfQotfTsKLQotLy8gVGVzdCB0byBnZXQgaW5zcGVjdG9yIHNlcnZlciBwYWdlIGxpc3Qg
ZnJvbSB0aGUgdGVzdCBzZXJ2ZXIuCi0vLyBTaG91bGQgY29udGFpbiBvbmx5IG9uZSBlbnRyeSBw
b2ludGluZyB0byBodHRwOi8vMTI3LjAuMC4xOjI5OTkvd2ViaW5zcGVjdG9yL01haW4uaHRtbD9w
YWdlPTEKLXN0YXRpYyB2b2lkIHRlc3RJbnNwZWN0b3JTZXJ2ZXJQYWdlTGlzdChJbnNwZWN0b3JT
ZXJ2ZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIEdPd25QdHI8R0Vycm9yPiBl
cnJvcjsKLQotICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZChHVEtfV0lO
RE9XX1RPUExFVkVMKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5nZXRQYWdlTGlzdCgpKTsKLQotICAg
IFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZh
U2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoInBhZ2VzLmxlbmd0aDsiLCAmZXJyb3Iub3V0UHRy
KCkpOwotICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOwotICAgIGdfYXNzZXJ0KCFlcnJv
ci5nZXQoKSk7Ci0gICAgZ19hc3NlcnRfY21waW50KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVz
dWx0VG9OdW1iZXIoamF2YXNjcmlwdFJlc3VsdCksID09LCAxKTsKLQotICAgIGphdmFzY3JpcHRS
ZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoInBhZ2VzWzBd
LmlkOyIsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7
Ci0gICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKLSAgICBpbnQgcGFnZUlkID0gV2ViVmlld1Rl
c3Q6OmphdmFzY3JpcHRSZXN1bHRUb051bWJlcihqYXZhc2NyaXB0UmVzdWx0KTsKLQotICAgIEdP
d25QdHI8Y2hhcj4gdmFsdWVTdHJpbmc7Ci0gICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1
bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgicGFnZXNbMF0udXJsOyIsICZlcnJvci5v
dXRQdHIoKSk7Ci0gICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAgZ19hc3NlcnQo
IWVycm9yLmdldCgpKTsKLSAgICB2YWx1ZVN0cmluZy5zZXQoV2ViVmlld1Rlc3Q6OmphdmFzY3Jp
cHRSZXN1bHRUb0NTdHJpbmcoamF2YXNjcmlwdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0X2NtcHN0
cih2YWx1ZVN0cmluZy5nZXQoKSwgPT0sICJodHRwOi8vMTI3LjAuMC4xOjI5OTkvIik7Ci0KLSAg
ICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlz
aGVkKCJwYWdlc1swXS5pbnNwZWN0b3JVcmw7IiwgJmVycm9yLm91dFB0cigpKTsKLSAgICBnX2Fz
c2VydChqYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOwotICAg
IHZhbHVlU3RyaW5nLnNldChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhq
YXZhc2NyaXB0UmVzdWx0KSk7Ci0gICAgU3RyaW5nIHZhbGlkSW5zcGVjdG9yVVJMID0gU3RyaW5n
KCIvTWFpbi5odG1sP3BhZ2U9IikgKyBTdHJpbmc6Om51bWJlcihwYWdlSWQpOwotICAgIEFTU0VS
VF9DTVBfQ1NUUklORyh2YWx1ZVN0cmluZy5nZXQoKSwgPT0sIHZhbGlkSW5zcGVjdG9yVVJMLnV0
ZjgoKSk7Ci19Ci0KLS8vIFRlc3Qgc2VuZGluZyBhIHJhdyByZW1vdGUgZGVidWdnaW5nIG1lc3Nh
Z2UgdGhyb3VnaCBvdXIgd2ViIHNvY2tldCBzZXJ2ZXIuCi0vLyBGb3IgdGhpcyBzcGVjaWZpYyBt
ZXNzYWdlIHNlZTogaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9jaHJvbWUvZGV2dG9vbHMvZG9jcy9w
cm90b2NvbC90b3QvcnVudGltZS5odG1sI2NvbW1hbmQtZXZhbHVhdGUKLXN0YXRpYyB2b2lkIHRl
c3RSZW1vdGVEZWJ1Z2dpbmdNZXNzYWdlKEluc3BlY3RvclNlcnZlclRlc3QqIHRlc3QsIGdjb25z
dHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKEdU
S19XSU5ET1dfVE9QTEVWRUwpOwotCi0gICAgdGVzdC0+bG9hZEh0bWwoIjxzY3JpcHQgdHlwZT1c
InRleHQvamF2YXNjcmlwdFwiPlxuIgotICAgICAgICAidmFyIHNvY2tldCA9IG5ldyBXZWJTb2Nr
ZXQoJ3dzOi8vMTI3LjAuMC4xOjI5OTkvZGV2dG9vbHMvcGFnZS8xJyk7XG4iCi0gICAgICAgICJz
b2NrZXQub25tZXNzYWdlID0gZnVuY3Rpb24obWVzc2FnZSkge1xuIgotICAgICAgICAgICAgInZh
ciByZXNwb25zZSA9IEpTT04ucGFyc2UobWVzc2FnZS5kYXRhKTtcbiIKLSAgICAgICAgICAgICJp
ZiAocmVzcG9uc2UuaWQgPT09IDEpXG4iCi0gICAgICAgICAgICAgICAgImRvY3VtZW50LnRpdGxl
ID0gcmVzcG9uc2UucmVzdWx0LnJlc3VsdC52YWx1ZTtcbiIKLSAgICAgICAgICAgICJlbHNlXG4i
Ci0gICAgICAgICAgICAgICAgImRvY3VtZW50LnRpdGxlID0gXCJGQUlMXCI7XG4iCi0gICAgICAg
ICAgICAifVxuIgotICAgICAgICAgICAgInNvY2tldC5vbm9wZW4gPSBmdW5jdGlvbigpIHtcbiIK
LSAgICAgICAgICAgICJzb2NrZXQuc2VuZCgne1wiaWRcIjogMSwgXCJtZXRob2RcIjogXCJSdW50
aW1lLmV2YWx1YXRlXCIsIFwicGFyYW1zXCI6IHtcImV4cHJlc3Npb25cIjogXCIyICsgMlwiIH0g
fScpO1xuIgotICAgICAgICAifVxuIgotICAgICAgICAiPC9zY3JpcHQ+IiwKLSAgICAgICAgImh0
dHA6Ly8xMjcuMC4wLjE6Mjk5OS8iKTsKLSAgICB0ZXN0LT53YWl0VW50aWxUaXRsZUNoYW5nZWQo
KTsKLQotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3RpdGxlKHRlc3Qt
Pm1fd2ViVmlldyksID09LCAiNCIpOwotfQotCi1zdGF0aWMgdm9pZCBvcGVuUmVtb3RlRGVidWdn
aW5nU2Vzc2lvbihJbnNwZWN0b3JTZXJ2ZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewot
ICAgIC8vIFRvIHRlc3QgdGhlIHdob2xlIHBpcGVsaW5lIHRoaXMgZXhwbG9pdHMgYSBiZWhhdmlv
ciBvZiB0aGUgaW5zcGVjdG9yIGZyb250LWVuZCB3aGljaCB3b24ndCBwcm92aWRlIHRoZSBwYWdl
IGFkZHJlc3MgYXMgdGl0bGUgdW5sZXNzIHRoZQotICAgIC8vIGRlYnVnZ2luZyBzZXNzaW9uIHdh
cyBlc3RhYmxpc2hlZCBjb3JyZWN0bHkgdGhyb3VnaCB3ZWIgc29ja2V0LgotICAgIC8vIEluIG91
ciBjYXNlIHBhZ2UgVVJMIHNob3VsZCBiZSBodHRwOi8vMTI3LjAuMC4xOjI5OTkvCi0gICAgLy8g
U28gdGhpcyB0ZXN0IGNhc2Ugd2lsbCBmYWlsIGlmOgotICAgIC8vIC0gVGhlIHBhZ2UgbGlzdCBk
aWRuJ3QgcmV0dXJuIGEgdmFsaWQgaW5zcGVjdG9yIFVSTAotICAgIC8vIC0gT3IgdGhlIGZyb250
LWVuZCBjb3VsZG4ndCBiZSBsb2FkZWQgdGhyb3VnaCB0aGUgaW5zcGVjdG9yIEhUVFAgc2VydmVy
Ci0gICAgLy8gLSBPciB0aGUgd2ViIHNvY2tldCBjb25uZWN0aW9uIGNvdWxkbid0IGJlIGVzdGFi
bGlzaGVkIGJldHdlZW4gdGhlIGZyb250LWVuZCBhbmQgdGhlIHBhZ2UgdGhyb3VnaCB0aGUgaW5z
cGVjdG9yIHNlcnZlcgotICAgIC8vIExldCdzIHNlZSBpZiB0aGlzIHRlc3QgaXNuJ3QgcmFpc2lu
ZyB0b28gbWFueSBmYWxzZSBwb3NpdGl2ZXMsIGluIHdoaWNoIGNhc2Ugd2Ugc2hvdWxkIHVzZSBh
IGJldHRlciBwcmVkaWNhdGUgaWYgYXZhaWxhYmxlLgotCi0gICAgdGVzdC0+c2hvd0luV2luZG93
QW5kV2FpdFVudGlsTWFwcGVkKEdUS19XSU5ET1dfVE9QTEVWRUwpOwotCi0gICAgZ19hc3NlcnQo
dGVzdC0+Z2V0UGFnZUxpc3QoKSk7Ci0KLSAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAg
V2ViS2l0SmF2YXNjcmlwdFJlc3VsdCogamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFT
Y3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgicGFnZXNbMF0uaW5zcGVjdG9yVXJsOyIsICZlcnJv
ci5vdXRQdHIoKSk7Ci0gICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAgZ19hc3Nl
cnQoIWVycm9yLmdldCgpKTsKLQotICAgIFN0cmluZyByZXNvbHZlZFVSTCA9IFN0cmluZygiaHR0
cDovLzEyNy4wLjAuMToyOTk5LyIpICsgU3RyaW5nOjpmcm9tVVRGOChXZWJWaWV3VGVzdDo6amF2
YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7Ci0gICAgdGVzdC0+bG9h
ZFVSSShyZXNvbHZlZFVSTC51dGY4KCkuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2Fk
RmluaXNoZWQoKTsKLQotICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0
QW5kV2FpdFVudGlsRmluaXNoZWQoIndpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFt
ZSgnbGknKVswXS50aXRsZSIsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgZ19hc3NlcnQoamF2YXNj
cmlwdFJlc3VsdCk7Ci0gICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKLQotICAgIEdPd25QdHI8
Y2hhcj4gdGl0bGUoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0NTdHJpbmcoamF2YXNj
cmlwdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih0aXRsZS5nZXQoKSwgPT0sICJodHRw
Oi8vMTI3LjAuMC4xOjI5OTkvIik7Ci19Ci0KLXN0YXRpYyB2b2lkIHNlbmRJbmNvbXBsZXRlUmVx
dWVzdChJbnNwZWN0b3JTZXJ2ZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIEdP
d25QdHI8R0Vycm9yPiBlcnJvcjsKLQotICAgIC8vIENvbm5lY3QgdG8gdGhlIGluc3BlY3RvciBz
ZXJ2ZXIuCi0gICAgR1JlZlB0cjxHU29ja2V0Q2xpZW50PiBjbGllbnQgPSBhZG9wdEdSZWYoZ19z
b2NrZXRfY2xpZW50X25ldygpKTsKLSAgICBHUmVmUHRyPEdTb2NrZXRDb25uZWN0aW9uPiBjb25u
ZWN0aW9uID0gYWRvcHRHUmVmKGdfc29ja2V0X2NsaWVudF9jb25uZWN0X3RvX2hvc3QoY2xpZW50
LmdldCgpLCAiMTI3LjAuMC4xIiwgMjk5OSwgMCwgJmVycm9yLm91dFB0cigpKSk7Ci0gICAgZ19h
c3NlcnRfbm9fZXJyb3IoZXJyb3IuZ2V0KCkpOwotCi0gICAgLy8gU2VuZCBpbmNvbXBsZXRlIHJl
cXVlc3QgKG1pc3NpbmcgYmxhbmsgbGluZSBhZnRlciBoZWFkZXJzKSBhbmQgY2hlY2sgaWYgaW5z
cGVjdG9yIHNlcnZlcgotICAgIC8vIHJlcGxpZXMuIFRoZSBzZXJ2ZXIgc2hvdWxkIG5vdCByZXBs
eSB0byBhbiBpbmNvbXBsZXRlIHJlcXVlc3QgYW5kIHRoZSB0ZXN0IHNob3VsZCB0aW1lb3V0Ci0g
ICAgLy8gb24gcmVhZC4KLSAgICBHT3V0cHV0U3RyZWFtKiBvc3RyZWFtID0gZ19pb19zdHJlYW1f
Z2V0X291dHB1dF9zdHJlYW0oR19JT19TVFJFQU0oY29ubmVjdGlvbi5nZXQoKSkpOwotICAgIC8v
IFJlcXVlc3QgbWlzc2luZyBibGFuayBsaW5lIGFmdGVyIGhlYWRlcnMuCi0gICAgY29uc3QgZ2No
YXIqIGluY29tcGxldGVSZXF1ZXN0ID0gIkdFVCAvZGV2dG9vbHMvcGFnZS8xIEhUVFAvMS4xXHJc
bkhvc3Q6IExvY2FsaG9zdFxyXG4iOwotICAgIGdfb3V0cHV0X3N0cmVhbV93cml0ZShvc3RyZWFt
LCBpbmNvbXBsZXRlUmVxdWVzdCwgc3RybGVuKGluY29tcGxldGVSZXF1ZXN0KSwgMCwgJmVycm9y
Lm91dFB0cigpKTsKLSAgICBnX2Fzc2VydF9ub19lcnJvcihlcnJvci5nZXQoKSk7Ci0KLSAgICBH
SW5wdXRTdHJlYW0qIGlzdHJlYW0gPSBnX2lvX3N0cmVhbV9nZXRfaW5wdXRfc3RyZWFtKEdfSU9f
U1RSRUFNKGNvbm5lY3Rpb24uZ2V0KCkpKTsKLSAgICBjaGFyIHJlc3BvbnNlWzE2XTsKLSAgICBt
ZW1zZXQocmVzcG9uc2UsIDAsIHNpemVvZihyZXNwb25zZSkpOwotICAgIEdSZWZQdHI8R0NhbmNl
bGxhYmxlPiBjYW5jZWwgPSBhZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSk7Ci0gICAgZ19p
bnB1dF9zdHJlYW1fcmVhZF9hc3luYyhpc3RyZWFtLCByZXNwb25zZSwgc2l6ZW9mKHJlc3BvbnNl
KSAtIDEsIEdfUFJJT1JJVFlfREVGQVVMVCwgY2FuY2VsLmdldCgpLCAwLCAwKTsKLSAgICAvLyBH
aXZlIGEgY2hhbmNlIGZvciB0aGUgc2VydmVyIHRvIHJlcGx5LgotICAgIHRlc3QtPndhaXQoMSk7
Ci0gICAgZ19jYW5jZWxsYWJsZV9jYW5jZWwoY2FuY2VsLmdldCgpKTsKLSAgICAvLyBJZiB3ZSBn
b3QgYW55IGFuc3dlciBpdCBtZWFucyB0aGUgc2VydmVyIHJlcGxpZWQgdG8gYW4gaW5jb21wbGV0
ZSByZXF1ZXN0LCBsZXRzIGZhaWwuCi0gICAgZ19hc3NlcnQocmVzcG9uc2VbMF0gPT0gJ1wwJyk7
Ci19Ci0KLXZvaWQgYmVmb3JlQWxsKCkKLXsKLSAgICAvLyBPdmVyd3JpdGUgV0VCS0lUX0lOU1BF
Q1RPUl9TRVJWRVIgdmFyaWFibGUgd2l0aCBkZWZhdWx0IElQIGFkZHJlc3MgYnV0IGRpZmZlcmVu
dCBwb3J0IHRvIGF2b2lkIGNvbmZsaWN0IHdpdGggdGhlIHRlc3QgaW5zcGVjdG9yIHNlcnZlciBw
YWdlLgotICAgIGdfc2V0ZW52KCJXRUJLSVRfSU5TUEVDVE9SX1NFUlZFUiIsICIxMjcuMC4wLjE6
Mjk5OCIsIFRSVUUpOwotCi0gICAgc3RhcnRUZXN0U2VydmVyKCk7Ci0gICAgSW5zcGVjdG9yU2Vy
dmVyVGVzdDo6YWRkKCJXZWJLaXRXZWJJbnNwZWN0b3JTZXJ2ZXIiLCAidGVzdC1wYWdlLWxpc3Qi
LCB0ZXN0SW5zcGVjdG9yU2VydmVyUGFnZUxpc3QpOwotICAgIEluc3BlY3RvclNlcnZlclRlc3Q6
OmFkZCgiV2ViS2l0V2ViSW5zcGVjdG9yU2VydmVyIiwgInRlc3QtcmVtb3RlLWRlYnVnZ2luZy1t
ZXNzYWdlIiwgdGVzdFJlbW90ZURlYnVnZ2luZ01lc3NhZ2UpOwotICAgIEluc3BlY3RvclNlcnZl
clRlc3Q6OmFkZCgiV2ViS2l0V2ViSW5zcGVjdG9yU2VydmVyIiwgInRlc3Qtb3Blbi1kZWJ1Z2dp
bmctc2Vzc2lvbiIsIG9wZW5SZW1vdGVEZWJ1Z2dpbmdTZXNzaW9uKTsKLSAgICBJbnNwZWN0b3JT
ZXJ2ZXJUZXN0OjphZGQoIldlYktpdFdlYkluc3BlY3RvclNlcnZlciIsICJ0ZXN0LWluY29tcGxl
dGUtcmVxdWVzdCIsIHNlbmRJbmNvbXBsZXRlUmVxdWVzdCk7Ci0KLX0KLQotdm9pZCBhZnRlckFs
bCgpCi17Ci0gICAgc3RvcFRlc3RTZXJ2ZXIoKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RMb2FkZXJDbGllbnQuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdExvYWRlckNsaWVudC5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzMTkxNWUuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdExvYWRlckNsaWVudC5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSw0NjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwg
MjAxMCBHdXN0YXZvIE5vcm9uaGEgU2lsdmEKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBJ
Z2FsaWEgUy5MLgotICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDExIE1vdG9yb2xhIE1vYmls
aXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNp
bmNsdWRlICJMb2FkVHJhY2tpbmdUZXN0LmgiCi0jaW5jbHVkZSAiV2ViS2l0VGVzdEJ1cy5oIgot
I2luY2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKLSNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgot
I2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLXN0YXRpYyBXZWJLaXRUZXN0QnVzKiBidXM7Ci1zdGF0
aWMgV2ViS2l0VGVzdFNlcnZlcioga1NlcnZlcjsKLQotY29uc3QgY2hhcioga0ROVEhlYWRlck5v
dFByZXNlbnQgPSAiRE5UIGhlYWRlciBub3QgcHJlc2VudCI7Ci0KLXN0YXRpYyB2b2lkIHRlc3RM
b2FkaW5nU3RhdHVzKExvYWRUcmFja2luZ1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIgZGF0YSkK
LXsKLSAgICB0ZXN0LT5zZXRSZWRpcmVjdFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvbm9y
bWFsIikuZGF0YSgpKTsKLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgo
Ii9yZWRpcmVjdCIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7
Ci0KLSAgICBWZWN0b3I8TG9hZFRyYWNraW5nVGVzdDo6TG9hZEV2ZW50cz4mIGV2ZW50cyA9IHRl
c3QtPm1fbG9hZEV2ZW50czsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0s
IDQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0
OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFd
LCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkUmVjZWl2ZWRTZXJ2ZXJSZWRp
cmVjdCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rl
c3Q6OkxvYWRDb21taXR0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbM10sID09LCBM
b2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0TG9h
ZGluZ0Vycm9yKExvYWRUcmFja2luZ1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAg
dGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvZXJyb3IiKS5kYXRhKCkpOwot
ICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgVmVjdG9yPExvYWRUcmFj
a2luZ1Rlc3Q6OkxvYWRFdmVudHM+JiBldmVudHMgPSB0ZXN0LT5tX2xvYWRFdmVudHM7Ci0gICAg
Z19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAzKTsKLSAgICBnX2Fzc2VydF9jbXBp
bnQoZXZlbnRzWzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRl
ZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6
OlByb3Zpc2lvbmFsTG9hZEZhaWxlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwg
PT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFz
c2VydE5vcm1hbExvYWRIYXBwZW5lZChWZWN0b3I8TG9hZFRyYWNraW5nVGVzdDo6TG9hZEV2ZW50
cz4mIGV2ZW50cykKLXsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDMp
OwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQ
cm92aXNpb25hbExvYWRTdGFydGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9
PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZENvbW1pdHRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50
KGV2ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7Ci19Ci0KLXN0
YXRpYyB2b2lkIHRlc3RMb2FkSHRtbChMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0LCBnY29uc3Rwb2lu
dGVyKQotewotICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keT5IZWxsbyBXZWJLaXQtR1RL
KzwvYm9keT48L2h0bWw+IiwgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7
Ci0gICAgYXNzZXJ0Tm9ybWFsTG9hZEhhcHBlbmVkKHRlc3QtPm1fbG9hZEV2ZW50cyk7Ci19Ci0K
LXN0YXRpYyB2b2lkIHRlc3RMb2FkQWx0ZXJuYXRlSFRNTChMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxvYWRBbHRlcm5hdGVIVE1MKCI8aHRtbD48
Ym9keT5BbHRlcm5hdGUgcGFnZTwvYm9keT48L2h0bWw+IiwgImh0dHA6Ly9lcnJvci1wYWdlLmZv
by8iLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBhc3NlcnRO
b3JtYWxMb2FkSGFwcGVuZWQodGVzdC0+bV9sb2FkRXZlbnRzKTsKLX0KLQotc3RhdGljIHZvaWQg
dGVzdExvYWRQbGFpblRleHQoTG9hZFRyYWNraW5nVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikK
LXsKLSAgICB0ZXN0LT5sb2FkUGxhaW5UZXh0KCJIZWxsbyBXZWJLaXQtR1RLKyIpOwotICAgIHRl
c3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGFzc2VydE5vcm1hbExvYWRIYXBwZW5l
ZCh0ZXN0LT5tX2xvYWRFdmVudHMpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0TG9hZFJlcXVlc3Qo
TG9hZFRyYWNraW5nVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBHUmVmUHRyPFdl
YktpdFVSSVJlcXVlc3Q+IHJlcXVlc3Qod2Via2l0X3VyaV9yZXF1ZXN0X25ldyhrU2VydmVyLT5n
ZXRVUklGb3JQYXRoKCIvbm9ybWFsIikuZGF0YSgpKSk7Ci0gICAgdGVzdC0+bG9hZFJlcXVlc3Qo
cmVxdWVzdC5nZXQoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAg
YXNzZXJ0Tm9ybWFsTG9hZEhhcHBlbmVkKHRlc3QtPm1fbG9hZEV2ZW50cyk7Ci19Ci0KLWNsYXNz
IExvYWRTdG9wVHJhY2tpbmdUZXN0IDogcHVibGljIExvYWRUcmFja2luZ1Rlc3QgewotcHVibGlj
OgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoTG9hZFN0b3BUcmFja2luZ1Rlc3QpOwotCi0g
ICAgdmlydHVhbCB2b2lkIGxvYWRDb21taXR0ZWQoKQotICAgIHsKLSAgICAgICAgTG9hZFRyYWNr
aW5nVGVzdDo6bG9hZENvbW1pdHRlZCgpOwotICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfc3RvcF9s
b2FkaW5nKG1fd2ViVmlldyk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBsb2FkRmFpbGVkKGNv
bnN0IGdjaGFyKiBmYWlsaW5nVVJJLCBHRXJyb3IqIGVycm9yKQotICAgIHsKLSAgICAgICAgZ19h
c3NlcnQoZ19lcnJvcl9tYXRjaGVzKGVycm9yLCBXRUJLSVRfTkVUV09SS19FUlJPUiwgV0VCS0lU
X05FVFdPUktfRVJST1JfQ0FOQ0VMTEVEKSk7Ci0gICAgICAgIExvYWRUcmFja2luZ1Rlc3Q6Omxv
YWRGYWlsZWQoZmFpbGluZ1VSSSwgZXJyb3IpOwotICAgIH0KLX07Ci0KLXN0YXRpYyB2b2lkIHRl
c3RMb2FkQ2FuY2VsbGVkKExvYWRTdG9wVHJhY2tpbmdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVy
KQotewotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2NhbmNlbGxl
ZCIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBW
ZWN0b3I8TG9hZFRyYWNraW5nVGVzdDo6TG9hZEV2ZW50cz4mIGV2ZW50cyA9IHRlc3QtPm1fbG9h
ZEV2ZW50czsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDQpOwotICAg
IGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNp
b25hbExvYWRTdGFydGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgTG9h
ZFRyYWNraW5nVGVzdDo6TG9hZENvbW1pdHRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50
c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGYWlsZWQpOwotICAgIGdfYXNzZXJ0X2Nt
cGludChldmVudHNbM10sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOwotfQot
Ci1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1RpdGxlKExvYWRUcmFja2luZ1Rlc3QqIHRlc3QsIGdj
b25zdHBvaW50ZXIpCi17Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19nZXRfdGl0bGUo
dGVzdC0+bV93ZWJWaWV3KSk7Ci0gICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxoZWFkPjx0aXRs
ZT5XZWxjb21lIHRvIFdlYktpdC1HVEsrITwvdGl0bGU+PC9oZWFkPjwvaHRtbD4iLCAwKTsKLSAg
ICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Vi
a2l0X3dlYl92aWV3X2dldF90aXRsZSh0ZXN0LT5tX3dlYlZpZXcpLCA9PSwgIldlbGNvbWUgdG8g
V2ViS2l0LUdUSyshIik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3UmVsb2FkKExvYWRU
cmFja2luZ1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgLy8gQ2hlY2sgdGhhdCBu
b3RoaW5nIGhhcHBlbnMgd2hlbiB0aGVyZSdzIG5vdGhpbmcgdG8gcmVsb2FkLgotICAgIHRlc3Qt
PnJlbG9hZCgpOwotICAgIHRlc3QtPndhaXQoMC4yNSk7IC8vIFdhaXQgZm9yIGEgcXVhcnRlciBv
ZiBhIHNlY29uZC4KLQotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgi
L25vcm1hbCIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0g
ICAgYXNzZXJ0Tm9ybWFsTG9hZEhhcHBlbmVkKHRlc3QtPm1fbG9hZEV2ZW50cyk7Ci0KLSAgICB0
ZXN0LT5yZWxvYWQoKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBh
c3NlcnROb3JtYWxMb2FkSGFwcGVuZWQodGVzdC0+bV9sb2FkRXZlbnRzKTsKLX0KLQotc3RhdGlj
IHZvaWQgdGVzdExvYWRQcm9ncmVzcyhMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0LCBnY29uc3Rwb2lu
dGVyKQotewotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL25vcm1h
bCIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgZ19h
c3NlcnRfY21wZmxvYXQodGVzdC0+bV9lc3RpbWF0ZWRQcm9ncmVzcywgPT0sIDEpOwotfQotCi1z
dGF0aWMgdm9pZCB0ZXN0V2ViVmlld0hpc3RvcnlMb2FkKExvYWRUcmFja2luZ1Rlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQ
YXRoKCIvbm9ybWFsIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQo
KTsKLSAgICBhc3NlcnROb3JtYWxMb2FkSGFwcGVuZWQodGVzdC0+bV9sb2FkRXZlbnRzKTsKLQot
ICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL25vcm1hbDIiKS5kYXRh
KCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGFzc2VydE5vcm1h
bExvYWRIYXBwZW5lZCh0ZXN0LT5tX2xvYWRFdmVudHMpOwotCi0gICAgLy8gQ2hlY2sgdGhhdCBs
b2FkIHByb2Nlc3MgaXMgdGhlIHNhbWUgZm9yIHBhZ2VzIGxvYWRlZCBmcm9tIGhpc3RvcnkgY2Fj
aGUuCi0gICAgdGVzdC0+Z29CYWNrKCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVk
KCk7Ci0gICAgYXNzZXJ0Tm9ybWFsTG9hZEhhcHBlbmVkKHRlc3QtPm1fbG9hZEV2ZW50cyk7Ci0K
LSAgICB0ZXN0LT5nb0ZvcndhcmQoKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQo
KTsKLSAgICBhc3NlcnROb3JtYWxMb2FkSGFwcGVuZWQodGVzdC0+bV9sb2FkRXZlbnRzKTsKLX0K
LQotY2xhc3MgVmlld1VSSVRyYWNraW5nVGVzdDogcHVibGljIExvYWRUcmFja2luZ1Rlc3Qgewot
cHVibGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoVmlld1VSSVRyYWNraW5nVGVzdCk7
Ci0KLSAgICBzdGF0aWMgdm9pZCB1cmlDaGFuZ2VkKEdPYmplY3QqLCBHUGFyYW1TcGVjKiwgVmll
d1VSSVRyYWNraW5nVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cih0
ZXN0LT5tX2FjdGl2ZVVSSS5kYXRhKCksICE9LCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSh0ZXN0
LT5tX3dlYlZpZXcpKTsKLSAgICAgICAgdGVzdC0+bV9hY3RpdmVVUkkgPSB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X3VyaSh0ZXN0LT5tX3dlYlZpZXcpOwotICAgIH0KLQotICAgIFZpZXdVUklUcmFja2lu
Z1Rlc3QoKQotICAgICAgICA6IG1fYWN0aXZlVVJJKHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKG1f
d2ViVmlldykpCi0gICAgewotICAgICAgICBnX2Fzc2VydChtX2FjdGl2ZVVSSS5pc051bGwoKSk7
Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAibm90aWZ5Ojp1cmkiLCBHX0NB
TExCQUNLKHVyaUNoYW5nZWQpLCB0aGlzKTsKLSAgICB9Ci0KLSAgICB2b2lkIHByb3Zpc2lvbmFs
TG9hZFN0YXJ0ZWQoKQotICAgIHsKLSAgICAgICAgY2hlY2tBY3RpdmVVUkkoIi9yZWRpcmVjdCIp
OwotICAgIH0KLQotICAgIHZvaWQgcHJvdmlzaW9uYWxMb2FkUmVjZWl2ZWRTZXJ2ZXJSZWRpcmVj
dCgpCi0gICAgewotICAgICAgICBjaGVja0FjdGl2ZVVSSSgiL25vcm1hbCIpOwotICAgIH0KLQot
ICAgIHZvaWQgbG9hZENvbW1pdHRlZCgpCi0gICAgewotICAgICAgICBjaGVja0FjdGl2ZVVSSSgi
L25vcm1hbCIpOwotICAgIH0KLQotICAgIHZvaWQgbG9hZEZpbmlzaGVkKCkKLSAgICB7Ci0gICAg
ICAgIGNoZWNrQWN0aXZlVVJJKCIvbm9ybWFsIik7Ci0gICAgICAgIExvYWRUcmFja2luZ1Rlc3Q6
OmxvYWRGaW5pc2hlZCgpOwotICAgIH0KLQotICAgIENTdHJpbmcgbV9hY3RpdmVVUkk7Ci0KLXBy
aXZhdGU6Ci0gICAgdm9pZCBjaGVja0FjdGl2ZVVSSShjb25zdCBjaGFyKiB1cmkpCi0gICAgewot
ICAgICAgICBBU1NFUlRfQ01QX0NTVFJJTkcobV9hY3RpdmVVUkksID09LCBrU2VydmVyLT5nZXRV
UklGb3JQYXRoKHVyaSkpOwotICAgIH0KLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3QWN0
aXZlVVJJKFZpZXdVUklUcmFja2luZ1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAg
dGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvcmVkaXJlY3QiKS5kYXRhKCkp
OwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotfQotCi1jbGFzcyBWaWV3SXNM
b2FkaW5nVGVzdDogcHVibGljIExvYWRUcmFja2luZ1Rlc3QgewotcHVibGljOgotICAgIE1BS0Vf
R0xJQl9URVNUX0ZJWFRVUkUoVmlld0lzTG9hZGluZ1Rlc3QpOwotCi0gICAgc3RhdGljIHZvaWQg
aXNMb2FkaW5nQ2hhbmdlZChHT2JqZWN0KiwgR1BhcmFtU3BlYyosIFZpZXdJc0xvYWRpbmdUZXN0
KiB0ZXN0KQotICAgIHsKLSAgICAgICAgaWYgKHdlYmtpdF93ZWJfdmlld19pc19sb2FkaW5nKHRl
c3QtPm1fd2ViVmlldykpCi0gICAgICAgICAgICB0ZXN0LT5iZWdpbkxvYWQoKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgdGVzdC0+ZW5kTG9hZCgpOwotICAgIH0KLQotICAgIFZpZXdJc0xv
YWRpbmdUZXN0KCkKLSAgICB7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAi
bm90aWZ5Ojppcy1sb2FkaW5nIiwgR19DQUxMQkFDSyhpc0xvYWRpbmdDaGFuZ2VkKSwgdGhpcyk7
Ci0gICAgfQotCi0gICAgdm9pZCBiZWdpbkxvYWQoKQotICAgIHsKLSAgICAgICAgLy8gTmV3IGxv
YWQsIGxvYWQtc3RhcnRlZCBoYXNuJ3QgYmVlbiBlbWl0dGVkIHlldC4KLSAgICAgICAgZ19hc3Nl
cnQobV9sb2FkRXZlbnRzLmlzRW1wdHkoKSk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X3VyaShtX3dlYlZpZXcpLCA9PSwgbV9hY3RpdmVVUkkuZGF0YSgpKTsK
LSAgICB9Ci0KLSAgICB2b2lkIGVuZExvYWQoKQotICAgIHsKLSAgICAgICAgLy8gTG9hZCBmaW5p
c2gsIGxvYWQtZmluaXNoZWQgYW5kIGxvYWQtZmFpbGVkIGhhdmVuJ3QgYmVlbiBlbWl0dGVkIHll
dC4KLSAgICAgICAgZ19hc3NlcnQoIW1fbG9hZEV2ZW50cy5pc0VtcHR5KCkpOwotICAgICAgICBn
X2Fzc2VydCghbV9sb2FkRXZlbnRzLmNvbnRhaW5zKExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5p
c2hlZCkpOwotICAgICAgICBnX2Fzc2VydCghbV9sb2FkRXZlbnRzLmNvbnRhaW5zKExvYWRUcmFj
a2luZ1Rlc3Q6OkxvYWRGYWlsZWQpKTsKLSAgICB9Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0V2Vi
Vmlld0lzTG9hZGluZyhWaWV3SXNMb2FkaW5nVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsK
LSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9ub3JtYWwiKS5kYXRh
KCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgdGVzdC0+cmVs
b2FkKCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICB0ZXN0LT5s
b2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9lcnJvciIpLmRhdGEoKSk7Ci0gICAgdGVz
dC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXIt
PmdldFVSSUZvclBhdGgoIi9ub3JtYWwiKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExv
YWRGaW5pc2hlZCgpOwotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgi
L25vcm1hbDIiKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwot
Ci0gICAgdGVzdC0+Z29CYWNrKCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7
Ci0KLSAgICB0ZXN0LT5nb0ZvcndhcmQoKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNo
ZWQoKTsKLX0KLQotY2xhc3MgV2ViUGFnZVVSSVRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7Ci1w
dWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShXZWJQYWdlVVJJVGVzdCk7Ci0KLSAg
ICBzdGF0aWMgdm9pZCB3ZWJQYWdlVVJJQ2hhbmdlZENhbGxiYWNrKEdEQnVzQ29ubmVjdGlvbios
IGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBHVmFy
aWFudCogcmVzdWx0LCBXZWJQYWdlVVJJVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIGNvbnN0
IGNoYXIqIHVyaTsKLSAgICAgICAgZ192YXJpYW50X2dldChyZXN1bHQsICIoJnMpIiwgJnVyaSk7
Ci0gICAgICAgIHRlc3QtPm1fd2ViUGFnZVVSSXMuYXBwZW5kKHVyaSk7Ci0gICAgfQotCi0gICAg
c3RhdGljIHZvaWQgd2ViVmlld1VSSUNoYW5nZWQoR09iamVjdCosIEdQYXJhbVNwZWMqLCBXZWJQ
YWdlVVJJVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHRlc3QtPm1fd2ViVmlld1VSSXMuYXBw
ZW5kKHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKHRlc3QtPm1fd2ViVmlldykpOwotICAgIH0KLQot
ICAgIFdlYlBhZ2VVUklUZXN0KCkKLSAgICB7Ci0gICAgICAgIEdSZWZQdHI8R0RCdXNQcm94eT4g
cHJveHkgPSBhZG9wdEdSZWYoYnVzLT5jcmVhdGVQcm94eSgib3JnLndlYmtpdC5ndGsuV2ViRXh0
ZW5zaW9uVGVzdCIsCi0gICAgICAgICAgICAiL29yZy93ZWJraXQvZ3RrL1dlYkV4dGVuc2lvblRl
c3QiLCAib3JnLndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9uVGVzdCIsIG1fbWFpbkxvb3ApKTsKLSAg
ICAgICAgbV91cmlDaGFuZ2VkU2lnbmFsSUQgPSBnX2RidXNfY29ubmVjdGlvbl9zaWduYWxfc3Vi
c2NyaWJlKAotICAgICAgICAgICAgZ19kYnVzX3Byb3h5X2dldF9jb25uZWN0aW9uKHByb3h5Lmdl
dCgpKSwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAib3JnLndlYmtpdC5ndGsuV2ViRXh0
ZW5zaW9uVGVzdCIsCi0gICAgICAgICAgICAiVVJJQ2hhbmdlZCIsCi0gICAgICAgICAgICAiL29y
Zy93ZWJraXQvZ3RrL1dlYkV4dGVuc2lvblRlc3QiLAotICAgICAgICAgICAgMCwKLSAgICAgICAg
ICAgIEdfREJVU19TSUdOQUxfRkxBR1NfTk9ORSwKLSAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nh
c3Q8R0RCdXNTaWduYWxDYWxsYmFjaz4od2ViUGFnZVVSSUNoYW5nZWRDYWxsYmFjayksCi0gICAg
ICAgICAgICB0aGlzLAotICAgICAgICAgICAgMCk7Ci0gICAgICAgIGdfYXNzZXJ0KG1fdXJpQ2hh
bmdlZFNpZ25hbElEKTsKLQotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgIm5v
dGlmeTo6dXJpIiwgR19DQUxMQkFDSyh3ZWJWaWV3VVJJQ2hhbmdlZCksIHRoaXMpOwotICAgIH0K
LQotICAgIH5XZWJQYWdlVVJJVGVzdCgpCi0gICAgewotICAgICAgICBnX3NpZ25hbF9oYW5kbGVy
c19kaXNjb25uZWN0X21hdGNoZWQobV93ZWJWaWV3LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAw
LCAwLCAwLCB0aGlzKTsKLSAgICAgICAgZ19kYnVzX2Nvbm5lY3Rpb25fc2lnbmFsX3Vuc3Vic2Ny
aWJlKGJ1cy0+Y29ubmVjdGlvbigpLCBtX3VyaUNoYW5nZWRTaWduYWxJRCk7Ci0gICAgfQotCi0g
ICAgdW5zaWduZWQgbV91cmlDaGFuZ2VkU2lnbmFsSUQ7Ci0gICAgVmVjdG9yPENTdHJpbmc+IG1f
d2ViUGFnZVVSSXM7Ci0gICAgVmVjdG9yPENTdHJpbmc+IG1fd2ViVmlld1VSSXM7Ci19OwotCi1z
dGF0aWMgdm9pZCB0ZXN0V2ViUGFnZVVSSShXZWJQYWdlVVJJVGVzdCogdGVzdCwgZ2NvbnN0cG9p
bnRlcikKLXsKLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9yZWRp
cmVjdCIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAg
ICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV93ZWJQYWdlVVJJcy5zaXplKCksID09LCB0ZXN0LT5t
X3dlYlZpZXdVUklzLnNpemUoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0ZXN0LT5t
X3dlYlBhZ2VVUklzLnNpemUoKTsgKytpKQotICAgICAgICBBU1NFUlRfQ01QX0NTVFJJTkcodGVz
dC0+bV93ZWJQYWdlVVJJc1tpXSwgPT0sIHRlc3QtPm1fd2ViVmlld1VSSXNbaV0pOwotCi0gICAg
Z19hc3NlcnRfY21waW50KHRlc3QtPm1fd2ViUGFnZVVSSXMuc2l6ZSgpLCA9PSwgMik7Ci0gICAg
QVNTRVJUX0NNUF9DU1RSSU5HKHRlc3QtPm1fd2ViUGFnZVVSSXNbMF0sID09LCBrU2VydmVyLT5n
ZXRVUklGb3JQYXRoKCIvcmVkaXJlY3QiKSk7Ci0gICAgQVNTRVJUX0NNUF9DU1RSSU5HKHRlc3Qt
Pm1fd2ViUGFnZVVSSXNbMV0sID09LCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvbm9ybWFsIikp
OwotCi19Ci0KLXN0YXRpYyB2b2lkIHRlc3RVUklSZXF1ZXN0SFRUUEhlYWRlcnMoV2ViVmlld1Rl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgR1JlZlB0cjxXZWJLaXRVUklSZXF1ZXN0
PiB1cmlSZXF1ZXN0ID0gYWRvcHRHUmVmKHdlYmtpdF91cmlfcmVxdWVzdF9uZXcoImZpbGU6Ly8v
Zm9vL2JhciIpKTsKLSAgICBnX2Fzc2VydCh1cmlSZXF1ZXN0LmdldCgpKTsKLSAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X3VyaV9yZXF1ZXN0X2dldF91cmkodXJpUmVxdWVzdC5nZXQoKSksID09
LCAiZmlsZTovLy9mb28vYmFyIik7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF91cmlfcmVxdWVzdF9n
ZXRfaHR0cF9oZWFkZXJzKHVyaVJlcXVlc3QuZ2V0KCkpKTsKLQotICAgIC8vIExvYWQgYSByZXF1
ZXN0IHdpdGggbm8gRG8gTm90IFRyYWNrIGhlYWRlci4KLSAgICB3ZWJraXRfdXJpX3JlcXVlc3Rf
c2V0X3VyaSh1cmlSZXF1ZXN0LmdldCgpLCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvZG8tbm90
LXRyYWNrLWhlYWRlciIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+bG9hZFJlcXVlc3QodXJpUmVxdWVz
dC5nZXQoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBzaXpl
X3QgbWFpblJlc291cmNlRGF0YVNpemUgPSAwOwotICAgIGNvbnN0IGNoYXIqIG1haW5SZXNvdXJj
ZURhdGEgPSB0ZXN0LT5tYWluUmVzb3VyY2VEYXRhKG1haW5SZXNvdXJjZURhdGFTaXplKTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQobWFpblJlc291cmNlRGF0YVNpemUsID09LCBzdHJsZW4oa0ROVEhl
YWRlck5vdFByZXNlbnQpKTsKLSAgICBnX2Fzc2VydCghc3RybmNtcChtYWluUmVzb3VyY2VEYXRh
LCBrRE5USGVhZGVyTm90UHJlc2VudCwgbWFpblJlc291cmNlRGF0YVNpemUpKTsKLQotICAgIC8v
IEFkZCB0aGUgRG8gTm90IFRyYWNrIGhlYWRlciBhbmQgbG9hZCB0aGUgcmVxdWVzdCBhZ2Fpbi4K
LSAgICBTb3VwTWVzc2FnZUhlYWRlcnMqIGhlYWRlcnMgPSB3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0
X2h0dHBfaGVhZGVycyh1cmlSZXF1ZXN0LmdldCgpKTsKLSAgICBnX2Fzc2VydChoZWFkZXJzKTsK
LSAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQoaGVhZGVycywgIkROVCIsICIxIik7Ci0g
ICAgdGVzdC0+bG9hZFJlcXVlc3QodXJpUmVxdWVzdC5nZXQoKSk7Ci0gICAgdGVzdC0+d2FpdFVu
dGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBtYWluUmVzb3VyY2VEYXRhID0gdGVzdC0+bWFpblJl
c291cmNlRGF0YShtYWluUmVzb3VyY2VEYXRhU2l6ZSk7Ci0gICAgZ19hc3NlcnRfY21waW50KG1h
aW5SZXNvdXJjZURhdGFTaXplLCA9PSwgMSk7Ci0gICAgZ19hc3NlcnQoIXN0cm5jbXAobWFpblJl
c291cmNlRGF0YSwgIjEiLCBtYWluUmVzb3VyY2VEYXRhU2l6ZSkpOwotCi0gICAgLy8gTG9hZCBh
IFVSSSBmb3Igd2hpY2ggdGhlIHdlYiBleHRlbnNpb24gd2lsbCBhZGQgdGhlIERvIE5vdCBUcmFj
ayBoZWFkZXIuCi0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvYWRk
LWRvLW5vdC10cmFjay1oZWFkZXIiKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRG
aW5pc2hlZCgpOwotCi0gICAgbWFpblJlc291cmNlRGF0YSA9IHRlc3QtPm1haW5SZXNvdXJjZURh
dGEobWFpblJlc291cmNlRGF0YVNpemUpOwotICAgIGdfYXNzZXJ0X2NtcGludChtYWluUmVzb3Vy
Y2VEYXRhU2l6ZSwgPT0sIDEpOwotICAgIGdfYXNzZXJ0KCFzdHJuY21wKG1haW5SZXNvdXJjZURh
dGEsICIxIiwgbWFpblJlc291cmNlRGF0YVNpemUpKTsKLX0KLQotc3RhdGljIHZvaWQgc2VydmVy
Q2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3Qg
Y2hhciogcGF0aCwgR0hhc2hUYWJsZSosIFNvdXBDbGllbnRDb250ZXh0KiwgZ3BvaW50ZXIpCi17
Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHJlc3BvbnNlU3RyaW5nID0gIjxodG1sPjxib2R5PlRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchIgot
ICAgICAgICAiVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchIgotICAgICAg
ICAiVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchIgotICAgICAgICAiVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchIgotICAgICAgICAiVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchIgotICAgICAgICAiVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchIgotICAgICAgICAiVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchIgotICAgICAgICAiVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchPC9ib2R5PjwvaHRtbD4iOwotCi0gICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAh
PSBTT1VQX01FVEhPRF9HRVQpIHsKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVz
c2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09L
KTsKLQotICAgIGlmIChnX3N0cl9oYXNfcHJlZml4KHBhdGgsICIvbm9ybWFsIikpCi0gICAgICAg
IHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01F
TU9SWV9TVEFUSUMsIHJlc3BvbnNlU3RyaW5nLCBzdHJsZW4ocmVzcG9uc2VTdHJpbmcpKTsKLSAg
ICBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2Vycm9yIikpCi0gICAgICAgIHNvdXBfbWVz
c2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX0NBTlRfQ09OTkVDVCk7Ci0gICAg
ZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9yZWRpcmVjdCIpKSB7Ci0gICAgICAgIHNvdXBf
bWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX01PVkVEX1BFUk1BTkVOVExZ
KTsKLSAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNl
X2hlYWRlcnMsICJMb2NhdGlvbiIsICIvbm9ybWFsIik7Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9l
cXVhbChwYXRoLCAiL2NhbmNlbGxlZCIpKSB7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJz
X3NldF9lbmNvZGluZyhtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCBTT1VQX0VOQ09ESU5HX0NI
VU5LRUQpOwotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9u
c2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCByZXNwb25zZVN0cmluZywgc3RybGVuKHJlc3Bv
bnNlU3RyaW5nKSk7Ci0gICAgICAgIHNvdXBfc2VydmVyX3VucGF1c2VfbWVzc2FnZShzZXJ2ZXIs
IG1lc3NhZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChw
YXRoLCAiL2RvLW5vdC10cmFjay1oZWFkZXIiKSB8fCBnX3N0cl9lcXVhbChwYXRoLCAiL2FkZC1k
by1ub3QtdHJhY2staGVhZGVyIikpIHsKLSAgICAgICAgY29uc3QgY2hhciogZG9Ob3RUcmFjayA9
IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9vbmUobWVzc2FnZS0+cmVxdWVzdF9oZWFkZXJzLCAi
RE5UIik7Ci0gICAgICAgIGlmIChkb05vdFRyYWNrKQotICAgICAgICAgICAgc291cF9tZXNzYWdl
X2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX0NPUFksIGRv
Tm90VHJhY2ssIHN0cmxlbihkb05vdFRyYWNrKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01F
TU9SWV9TVEFUSUMsIGtETlRIZWFkZXJOb3RQcmVzZW50LCBzdHJsZW4oa0ROVEhlYWRlck5vdFBy
ZXNlbnQpKTsKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9T
VEFUVVNfT0spOwotICAgIH0gZWxzZQotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyht
ZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfRk9VTkQpOwotCi0gICAgc291cF9tZXNzYWdlX2JvZHlf
Y29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7Ci19Ci0KLXZvaWQgYmVmb3JlQWxsKCkK
LXsKLSAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3dlYl9leHRlbnNpb25zX2RpcmVjdG9yeSh3
ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSwgV0VCS0lUX1RFU1RfV0VCX0VYVEVOU0lP
TlNfRElSKTsKLSAgICBidXMgPSBuZXcgV2ViS2l0VGVzdEJ1cygpOwotICAgIGlmICghYnVzLT5y
dW4oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAga1NlcnZlciA9IG5ldyBXZWJLaXRUZXN0U2Vy
dmVyKCk7Ci0gICAga1NlcnZlci0+cnVuKHNlcnZlckNhbGxiYWNrKTsKLQotICAgIExvYWRUcmFj
a2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJsb2FkaW5nLXN0YXR1cyIsIHRlc3RMb2Fk
aW5nU3RhdHVzKTsKLSAgICBMb2FkVHJhY2tpbmdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAi
bG9hZGluZy1lcnJvciIsIHRlc3RMb2FkaW5nRXJyb3IpOwotICAgIExvYWRUcmFja2luZ1Rlc3Q6
OmFkZCgiV2ViS2l0V2ViVmlldyIsICJsb2FkLWh0bWwiLCB0ZXN0TG9hZEh0bWwpOwotICAgIExv
YWRUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJsb2FkLWFsdGVybmF0ZS1odG1s
IiwgdGVzdExvYWRBbHRlcm5hdGVIVE1MKTsKLSAgICBMb2FkVHJhY2tpbmdUZXN0OjphZGQoIldl
YktpdFdlYlZpZXciLCAibG9hZC1wbGFpbi10ZXh0IiwgdGVzdExvYWRQbGFpblRleHQpOwotICAg
IExvYWRUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJsb2FkLXJlcXVlc3QiLCB0
ZXN0TG9hZFJlcXVlc3QpOwotICAgIExvYWRTdG9wVHJhY2tpbmdUZXN0OjphZGQoIldlYktpdFdl
YlZpZXciLCAic3RvcC1sb2FkaW5nIiwgdGVzdExvYWRDYW5jZWxsZWQpOwotICAgIExvYWRUcmFj
a2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJ0aXRsZSIsIHRlc3RXZWJWaWV3VGl0bGUp
OwotICAgIExvYWRUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJwcm9ncmVzcyIs
IHRlc3RMb2FkUHJvZ3Jlc3MpOwotICAgIExvYWRUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2Vi
VmlldyIsICJyZWxvYWQiLCB0ZXN0V2ViVmlld1JlbG9hZCk7Ci0gICAgTG9hZFRyYWNraW5nVGVz
dDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImhpc3RvcnktbG9hZCIsIHRlc3RXZWJWaWV3SGlzdG9y
eUxvYWQpOwotCi0gICAgLy8gVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IHdlYiB2aWV3IG5vdGlmeTo6
dXJpIHNpZ25hbCBpcyBjb3JyZWN0bHkgZW1pdHRlZAotICAgIC8vIGFuZCB0aGUgdXJpIGlzIGFs
cmVhZHkgdXBkYXRlZCB3aGVuIGxvYWRlciBjbGllbnQgc2lnbmFscyBhcmUgZW1pdHRlZC4KLSAg
ICBWaWV3VVJJVHJhY2tpbmdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiYWN0aXZlLXVyaSIs
IHRlc3RXZWJWaWV3QWN0aXZlVVJJKTsKLQotICAgIFZpZXdJc0xvYWRpbmdUZXN0OjphZGQoIldl
YktpdFdlYlZpZXciLCAiaXMtbG9hZGluZyIsIHRlc3RXZWJWaWV3SXNMb2FkaW5nKTsKLSAgICBX
ZWJQYWdlVVJJVGVzdDo6YWRkKCJXZWJLaXRXZWJQYWdlIiwgImdldC11cmkiLCB0ZXN0V2ViUGFn
ZVVSSSk7Ci0gICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0VVJJUmVxdWVzdCIsICJodHRwLWhl
YWRlcnMiLCB0ZXN0VVJJUmVxdWVzdEhUVFBIZWFkZXJzKTsKLX0KLQotdm9pZCBhZnRlckFsbCgp
Ci17Ci0gICAgZGVsZXRlIGJ1czsKLSAgICBkZWxldGUga1NlcnZlcjsKLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RNYWluLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RNYWluLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDc4MTljZi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0TWFpbi5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSw3OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0TWFpbi5oIgotCi0jaW5jbHVkZSA8Z2xp
Yi9nc3RkaW8uaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d2Via2l0Mi93ZWJr
aXQyLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgotCi12b2lkIGJlZm9yZUFs
bCgpOwotdm9pZCBhZnRlckFsbCgpOwotCi1zdGF0aWMgdm9pZCByZWdpc3RlckdSZXNvdXJjZSh2
b2lkKQotewotICAgIEdPd25QdHI8Y2hhcj4gcmVzb3VyY2VzUGF0aChnX2J1aWxkX2ZpbGVuYW1l
KFdFQktJVF9FWEVDX1BBVEgsICJyZXNvdXJjZXMiLCAid2Via2l0Mmd0ay10ZXN0cy1yZXNvdXJj
ZXMuZ3Jlc291cmNlIiwgTlVMTCkpOwotICAgIEdSZXNvdXJjZSogcmVzb3VyY2UgPSBnX3Jlc291
cmNlX2xvYWQocmVzb3VyY2VzUGF0aC5nZXQoKSwgMCk7Ci0gICAgZ19hc3NlcnQocmVzb3VyY2Up
OwotCi0gICAgZ19yZXNvdXJjZXNfcmVnaXN0ZXIocmVzb3VyY2UpOwotICAgIGdfcmVzb3VyY2Vf
dW5yZWYocmVzb3VyY2UpOwotfQotCi1zdGF0aWMgdm9pZCByZW1vdmVOb25FbXB0eURpcmVjdG9y
eShjb25zdCBjaGFyKiBkaXJlY3RvcnlQYXRoKQotewotICAgIEdEaXIqIGRpcmVjdG9yeSA9IGdf
ZGlyX29wZW4oZGlyZWN0b3J5UGF0aCwgMCwgMCk7Ci0gICAgZ19hc3NlcnQoZGlyZWN0b3J5KTsK
LSAgICBjb25zdCBjaGFyKiBmaWxlTmFtZTsKLSAgICB3aGlsZSAoKGZpbGVOYW1lID0gZ19kaXJf
cmVhZF9uYW1lKGRpcmVjdG9yeSkpKSB7Ci0gICAgICAgIEdPd25QdHI8Y2hhcj4gZmlsZVBhdGgo
Z19idWlsZF9maWxlbmFtZShkaXJlY3RvcnlQYXRoLCBmaWxlTmFtZSwgTlVMTCkpOwotICAgICAg
ICBnX3VubGluayhmaWxlUGF0aC5nZXQoKSk7Ci0gICAgfQotICAgIGdfZGlyX2Nsb3NlKGRpcmVj
dG9yeSk7Ci0gICAgZ19ybWRpcihkaXJlY3RvcnlQYXRoKTsKLX0KLQotaW50IG1haW4oaW50IGFy
Z2MsIGNoYXIqKiBhcmd2KQotewotICAgIGdfdW5zZXRlbnYoIkRCVVNfU0VTU0lPTl9CVVNfQURE
UkVTUyIpOwotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCAwKTsKLSAgICBnX3NldGVu
digiV0VCS0lUX0VYRUNfUEFUSCIsIFdFQktJVF9FWEVDX1BBVEgsIEZBTFNFKTsKLSAgICBnX3Nl
dGVudigiV0VCS0lUX0lOSkVDVEVEX0JVTkRMRV9QQVRIIiwgV0VCS0lUX0lOSkVDVEVEX0JVTkRM
RV9QQVRILCBGQUxTRSk7Ci0gICAgZ19zZXRlbnYoIkxDX0FMTCIsICJDIiwgVFJVRSk7Ci0gICAg
Z19zZXRlbnYoIkdJT19VU0VfVkZTIiwgImxvY2FsIiwgVFJVRSk7Ci0gICAgZ19zZXRlbnYoIkdT
RVRUSU5HU19CQUNLRU5EIiwgIm1lbW9yeSIsIFRSVUUpOwotICAgIGdfdGVzdF9idWdfYmFzZSgi
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0KLSAgICByZWdpc3RlckdSZXNvdXJjZSgpOwot
Ci0gICAgR093blB0cjxjaGFyPiBkaXNrQ2FjaGVUZW1wRGlyZWN0b3J5KGdfZGlyX21ha2VfdG1w
KCJXZWJLaXQyVGVzdHNEaXNrQ2FjaGUtWFhYWFhYIiwgMCkpOwotICAgIGdfYXNzZXJ0KGRpc2tD
YWNoZVRlbXBEaXJlY3RvcnkuZ2V0KCkpOwotICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfZGlz
a19jYWNoZV9kaXJlY3Rvcnkod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCksIGRpc2tD
YWNoZVRlbXBEaXJlY3RvcnkuZ2V0KCkpOwotCi0gICAgYmVmb3JlQWxsKCk7Ci0gICAgaW50IHJl
dHVyblZhbHVlID0gZ190ZXN0X3J1bigpOwotICAgIGFmdGVyQWxsKCk7Ci0KLSAgICByZW1vdmVO
b25FbXB0eURpcmVjdG9yeShkaXNrQ2FjaGVUZW1wRGlyZWN0b3J5LmdldCgpKTsKLQotICAgIHJl
dHVybiByZXR1cm5WYWx1ZTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL1Rlc3RNYWluLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9UZXN0TWFpbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMmM5
MDcwLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L1Rlc3RNYWluLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFRlc3RNYWluX2gKLSNkZWZpbmUgVGVz
dE1haW5faAotCi0jaW5jbHVkZSA8Y2Fpcm8uaD4KLSNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgot
I2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2RlZmluZSBNQUtFX0dMSUJfVEVT
VF9GSVhUVVJFKENsYXNzTmFtZSkgXAotICAgIHN0YXRpYyB2b2lkIHNldFVwKENsYXNzTmFtZSog
Zml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKSBcCi0gICAgeyBcCi0gICAgICAgIG5ldyAoZml4
dHVyZSkgQ2xhc3NOYW1lOyBcCi0gICAgfSBcCi0gICAgc3RhdGljIHZvaWQgdGVhckRvd24oQ2xh
c3NOYW1lKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpIFwKLSAgICB7IFwKLSAgICAgICAg
Zml4dHVyZS0+fkNsYXNzTmFtZSgpOyBcCi0gICAgfSBcCi0gICAgc3RhdGljIHZvaWQgYWRkKGNv
bnN0IGNoYXIqIHN1aXRlTmFtZSwgY29uc3QgY2hhciogdGVzdE5hbWUsIHZvaWQgKCp0ZXN0RnVu
YykoQ2xhc3NOYW1lKiwgY29uc3Qgdm9pZCopKSBcCi0gICAgeyBcCi0gICAgICAgIEdPd25QdHI8
Z2NoYXI+IHRlc3RQYXRoKGdfc3RyZHVwX3ByaW50ZigiL3dlYmtpdDIvJXMvJXMiLCBzdWl0ZU5h
bWUsIHRlc3ROYW1lKSk7IFwKLSAgICAgICAgZ190ZXN0X2FkZCh0ZXN0UGF0aC5nZXQoKSwgQ2xh
c3NOYW1lLCAwLCBDbGFzc05hbWU6OnNldFVwLCB0ZXN0RnVuYywgQ2xhc3NOYW1lOjp0ZWFyRG93
bik7IFwKLSAgICB9Ci0KLSNkZWZpbmUgQVNTRVJUX0NNUF9DU1RSSU5HKHMxLCBjbXAsIHMyKSBc
Ci0gICAgZG8geyBDU3RyaW5nIF9fczEgPSAoczEpOyBDU3RyaW5nIF9fczIgPSAoczIpOyBcCi0g
ICAgICAgIGlmIChnX3N0cmNtcDAoX19zMS5kYXRhKCksIF9fczIuZGF0YSgpKSBjbXAgMCkgOyBl
bHNlIFwKLSAgICAgICAgICAgIGdfYXNzZXJ0aW9uX21lc3NhZ2VfY21wc3RyKEdfTE9HX0RPTUFJ
TiwgX19GSUxFX18sIF9fTElORV9fLCBHX1NUUkZVTkMsIFwKLSAgICAgICAgICAgICAgICAjczEg
IiAiICNjbXAgIiAiICNzMiwgX19zMS5kYXRhKCksICNjbXAsIF9fczIuZGF0YSgpKTsgfSB3aGls
ZSAoMCkKLQotY2xhc3MgVGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVS
RShUZXN0KTsKLQotICAgIH5UZXN0KCkKLSAgICB7Ci0gICAgICAgIGlmIChtX3dhdGNoZWRPYmpl
Y3RzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBnX3ByaW50KCJM
ZWFrZWQgb2JqZWN0czoiKTsKLSAgICAgICAgSGFzaFNldDxHT2JqZWN0Kj46OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG1fd2F0Y2hlZE9iamVjdHMuZW5kKCk7Ci0gICAgICAgIGZvciAoSGFzaFNldDxH
T2JqZWN0Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV93YXRjaGVkT2JqZWN0cy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBnX3ByaW50KCIgJXMoJXApIiwgZ190eXBlX25h
bWVfZnJvbV9pbnN0YW5jZShyZWludGVycHJldF9jYXN0PEdUeXBlSW5zdGFuY2UqPigqaXQpKSwg
Kml0KTsKLSAgICAgICAgZ19wcmludCgiXG4iKTsKLQotICAgICAgICBnX2Fzc2VydChtX3dhdGNo
ZWRPYmplY3RzLmlzRW1wdHkoKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgb2JqZWN0Rmlu
YWxpemVkKFRlc3QqIHRlc3QsIEdPYmplY3QqIGZpbmFsaXplZE9iamVjdCkKLSAgICB7Ci0gICAg
ICAgIHRlc3QtPm1fd2F0Y2hlZE9iamVjdHMucmVtb3ZlKGZpbmFsaXplZE9iamVjdCk7Ci0gICAg
fQotCi0gICAgdm9pZCBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdPYmpl
Y3QqIG9iamVjdCkKLSAgICB7Ci0gICAgICAgIG1fd2F0Y2hlZE9iamVjdHMuYWRkKG9iamVjdCk7
Ci0gICAgICAgIGdfb2JqZWN0X3dlYWtfcmVmKG9iamVjdCwgcmVpbnRlcnByZXRfY2FzdDxHV2Vh
a05vdGlmeT4ob2JqZWN0RmluYWxpemVkKSwgdGhpcyk7Ci0gICAgfQotCi0gICAgc3RhdGljIENT
dHJpbmcgZ2V0V2ViS2l0MVRlc3RSZXNvdWNlc0RpcigpCi0gICAgewotICAgICAgICBHT3duUHRy
PGNoYXI+IHJlc291cmNlc0RpcihnX2J1aWxkX2ZpbGVuYW1lKFdFQktJVF9TUkNfRElSLCAiU291
cmNlIiwgIldlYktpdCIsICJndGsiLCAidGVzdHMiLCAicmVzb3VyY2VzIiwgTlVMTCkpOwotICAg
ICAgICByZXR1cm4gcmVzb3VyY2VzRGlyLmdldCgpOwotICAgIH0KLQotICAgIHN0YXRpYyBDU3Ry
aW5nIGdldFJlc291cmNlc0RpcigpCi0gICAgewotICAgICAgICBHT3duUHRyPGNoYXI+IHJlc291
cmNlc0RpcihnX2J1aWxkX2ZpbGVuYW1lKFdFQktJVF9TUkNfRElSLCAiU291cmNlIiwgIldlYktp
dDIiLCAiVUlQcm9jZXNzIiwgIkFQSSIsICJndGsiLCAidGVzdHMiLCAicmVzb3VyY2VzIiwgTlVM
TCkpOwotICAgICAgICByZXR1cm4gcmVzb3VyY2VzRGlyLmdldCgpOwotICAgIH0KLQotICAgIHZv
aWQgYWRkTG9nRmF0YWxGbGFnKHVuc2lnbmVkIGZsYWcpCi0gICAgewotICAgICAgICB1bnNpZ25l
ZCBmYXRhbE1hc2sgPSBnX2xvZ19zZXRfYWx3YXlzX2ZhdGFsKHN0YXRpY19jYXN0PEdMb2dMZXZl
bEZsYWdzPihHX0xPR19GQVRBTF9NQVNLKSk7Ci0gICAgICAgIGZhdGFsTWFzayB8PSBmbGFnOwot
ICAgICAgICBnX2xvZ19zZXRfYWx3YXlzX2ZhdGFsKHN0YXRpY19jYXN0PEdMb2dMZXZlbEZsYWdz
PihmYXRhbE1hc2spKTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlbW92ZUxvZ0ZhdGFsRmxhZyh1bnNp
Z25lZCBmbGFnKQotICAgIHsKLSAgICAgICAgdW5zaWduZWQgZmF0YWxNYXNrID0gZ19sb2dfc2V0
X2Fsd2F5c19mYXRhbChzdGF0aWNfY2FzdDxHTG9nTGV2ZWxGbGFncz4oR19MT0dfRkFUQUxfTUFT
SykpOwotICAgICAgICBmYXRhbE1hc2sgJj0gfmZsYWc7Ci0gICAgICAgIGdfbG9nX3NldF9hbHdh
eXNfZmF0YWwoc3RhdGljX2Nhc3Q8R0xvZ0xldmVsRmxhZ3M+KGZhdGFsTWFzaykpOwotICAgIH0K
LQotICAgIHN0YXRpYyBib29sIGNhaXJvU3VyZmFjZXNFcXVhbChjYWlyb19zdXJmYWNlX3QqIHMx
LCBjYWlyb19zdXJmYWNlX3QqIHMyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIChjYWlyb19pbWFn
ZV9zdXJmYWNlX2dldF9mb3JtYXQoczEpID09IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2Zvcm1h
dChzMikKLSAgICAgICAgICAgICYmIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHMxKSA9
PSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChzMikKLSAgICAgICAgICAgICYmIGNhaXJv
X2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzMSkgPT0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRf
aGVpZ2h0KHMyKQotICAgICAgICAgICAgJiYgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRl
KHMxKSA9PSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoczIpCi0gICAgICAgICAgICAm
JiAhbWVtY21wKGNvbnN0X2Nhc3Q8Y29uc3Qgdm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoczEpKSksCi0gICAgICAgICAgICAgICAgY29u
c3RfY2FzdDxjb25zdCB2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2Fpcm9faW1hZ2Vf
c3VyZmFjZV9nZXRfZGF0YShzMikpKSwKLSAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJm
YWNlX2dldF9oZWlnaHQoczEpKmNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShzMSkpKTsK
LSAgICB9Ci0KLSAgICBIYXNoU2V0PEdPYmplY3QqPiBtX3dhdGNoZWRPYmplY3RzOwotfTsKLQot
I2VuZGlmIC8vIFRlc3RNYWluX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL1Rlc3RQcmludGluZy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9UZXN0UHJpbnRpbmcuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA3MmMyY2ZiLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL1Rlc3RQcmludGluZy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMDkgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCi0jaW5jbHVkZSA8Z2xpYi9nc3RkaW8u
aD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Ci0KLSNpZmRlZiBIQVZFX0dUS19V
TklYX1BSSU5USU5HCi0jaW5jbHVkZSA8Z3RrL2d0a3VuaXhwcmludC5oPgotI2VuZGlmCi0KLXN0
YXRpYyBjaGFyKiBrVGVtcERpcmVjdG9yeTsKLQotc3RhdGljIHZvaWQgdGVzdFByaW50T3BlcmF0
aW9uUHJpbnRTZXR0aW5ncyhXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAg
ICBHUmVmUHRyPFdlYktpdFByaW50T3BlcmF0aW9uPiBwcmludE9wZXJhdGlvbiA9IGFkb3B0R1Jl
Zih3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX25ldyh0ZXN0LT5tX3dlYlZpZXcpKTsKLSAgICB0ZXN0
LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHByaW50T3Bl
cmF0aW9uLmdldCgpKSk7Ci0KLSAgICBnX2Fzc2VydCghd2Via2l0X3ByaW50X29wZXJhdGlvbl9n
ZXRfcHJpbnRfc2V0dGluZ3MocHJpbnRPcGVyYXRpb24uZ2V0KCkpKTsKLSAgICBnX2Fzc2VydCgh
d2Via2l0X3ByaW50X29wZXJhdGlvbl9nZXRfcGFnZV9zZXR1cChwcmludE9wZXJhdGlvbi5nZXQo
KSkpOwotCi0gICAgR1JlZlB0cjxHdGtQcmludFNldHRpbmdzPiBwcmludFNldHRpbmdzID0gYWRv
cHRHUmVmKGd0a19wcmludF9zZXR0aW5nc19uZXcoKSk7Ci0gICAgdGVzdC0+YXNzZXJ0T2JqZWN0
SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChwcmludFNldHRpbmdzLmdldCgpKSk7
Ci0KLSAgICBHUmVmUHRyPEd0a1BhZ2VTZXR1cD4gcGFnZVNldHVwID0gYWRvcHRHUmVmKGd0a19w
YWdlX3NldHVwX25ldygpKTsKLSAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVz
dEZpbmlzaGVzKEdfT0JKRUNUKHBhZ2VTZXR1cC5nZXQoKSkpOwotCi0gICAgd2Via2l0X3ByaW50
X29wZXJhdGlvbl9zZXRfcHJpbnRfc2V0dGluZ3MocHJpbnRPcGVyYXRpb24uZ2V0KCksIHByaW50
U2V0dGluZ3MuZ2V0KCkpOwotICAgIHdlYmtpdF9wcmludF9vcGVyYXRpb25fc2V0X3BhZ2Vfc2V0
dXAocHJpbnRPcGVyYXRpb24uZ2V0KCksIHBhZ2VTZXR1cC5nZXQoKSk7Ci0KLSAgICBnX2Fzc2Vy
dCh3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX2dldF9wcmludF9zZXR0aW5ncyhwcmludE9wZXJhdGlv
bi5nZXQoKSkgPT0gcHJpbnRTZXR0aW5ncy5nZXQoKSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3By
aW50X29wZXJhdGlvbl9nZXRfcGFnZV9zZXR1cChwcmludE9wZXJhdGlvbi5nZXQoKSkgPT0gcGFn
ZVNldHVwLmdldCgpKTsKLX0KLQotc3RhdGljIGdib29sZWFuIHdlYlZpZXdQcmludENhbGxiYWNr
KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFByaW50T3BlcmF0aW9uKiBwcmludE9wZXJh
dGlvbiwgV2ViVmlld1Rlc3QqIHRlc3QpCi17Ci0gICAgZ19hc3NlcnQod2ViVmlldyA9PSB0ZXN0
LT5tX3dlYlZpZXcpOwotCi0gICAgZ19hc3NlcnQoV0VCS0lUX0lTX1BSSU5UX09QRVJBVElPTihw
cmludE9wZXJhdGlvbikpOwotICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0
RmluaXNoZXMoR19PQkpFQ1QocHJpbnRPcGVyYXRpb24pKTsKLQotICAgIGdfYXNzZXJ0KCF3ZWJr
aXRfcHJpbnRfb3BlcmF0aW9uX2dldF9wcmludF9zZXR0aW5ncyhwcmludE9wZXJhdGlvbikpOwot
ICAgIGdfYXNzZXJ0KCF3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX2dldF9wYWdlX3NldHVwKHByaW50
T3BlcmF0aW9uKSk7Ci0KLSAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOwot
Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3UHJpbnQoV2Vi
Vmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgZ19zaWduYWxfY29ubmVjdCh0
ZXN0LT5tX3dlYlZpZXcsICJwcmludCIsIEdfQ0FMTEJBQ0sod2ViVmlld1ByaW50Q2FsbGJhY2sp
LCB0ZXN0KTsKLSAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHkgb25Mb2FkPVwicHJpbnQo
KTtcIj5XZWJLaXRHVEsrIHByaW50aW5nIHRlc3Q8L2JvZHk+PC9odG1sPiIsIDApOwotICAgIGdf
bWFpbl9sb29wX3J1bih0ZXN0LT5tX21haW5Mb29wKTsKLX0KLQotI2lmZGVmIEhBVkVfR1RLX1VO
SVhfUFJJTlRJTkcKLWNsYXNzIFByaW50VGVzdDogcHVibGljIFdlYlZpZXdUZXN0IHsKLXB1Ymxp
YzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFByaW50VGVzdCk7Ci0KLSAgICBzdGF0aWMg
dm9pZCBwcmludEZpbmlzaGVkQ2FsbGJhY2soV2ViS2l0UHJpbnRPcGVyYXRpb24qLCBQcmludFRl
c3QqIHRlc3QpCi0gICAgewotICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxv
b3ApOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHByaW50RmFpbGVkQ2FsbGJhY2soV2ViS2l0
UHJpbnRPcGVyYXRpb24qLCBHRXJyb3IqIGVycm9yLCBQcmludFRlc3QqIHRlc3QpCi0gICAgewot
ICAgICAgICBnX2Fzc2VydCh0ZXN0LT5tX2V4cGVjdGVkRXJyb3IpOwotICAgICAgICBnX2Fzc2Vy
dChlcnJvcik7Ci0gICAgICAgIGdfYXNzZXJ0KGdfZXJyb3JfbWF0Y2hlcyhlcnJvciwgV0VCS0lU
X1BSSU5UX0VSUk9SLCB0ZXN0LT5tX2V4cGVjdGVkRXJyb3IpKTsKLSAgICB9Ci0KLSAgICBQcmlu
dFRlc3QoKQotICAgICAgICA6IG1fZXhwZWN0ZWRFcnJvcigwKQotICAgIHsKLSAgICAgICAgbV9w
cmludE9wZXJhdGlvbiA9IGFkb3B0R1JlZih3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX25ldyhtX3dl
YlZpZXcpKTsKLSAgICAgICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhH
X09CSkVDVChtX3ByaW50T3BlcmF0aW9uLmdldCgpKSk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5l
Y3QobV9wcmludE9wZXJhdGlvbi5nZXQoKSwgImZpbmlzaGVkIiwgR19DQUxMQkFDSyhwcmludEZp
bmlzaGVkQ2FsbGJhY2spLCB0aGlzKTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3ByaW50
T3BlcmF0aW9uLmdldCgpLCAiZmFpbGVkIiwgR19DQUxMQkFDSyhwcmludEZhaWxlZENhbGxiYWNr
KSwgdGhpcyk7Ci0gICAgfQotCi0gICAgc3RhdGljIGdib29sZWFuIHRlc3RQcmludE9wZXJhdGlv
blByaW50UHJpbnRlcihHdGtQcmludGVyKiBwcmludGVyLCBncG9pbnRlciB1c2VyRGF0YSkKLSAg
ICB7Ci0gICAgICAgIGlmIChzdHJjbXAoZ3RrX3ByaW50ZXJfZ2V0X25hbWUocHJpbnRlciksICJQ
cmludCB0byBGaWxlIikpCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICAgICAgR3Rr
UHJpbnRlcioqIGZvdW5kUHJpbnRlciA9IHN0YXRpY19jYXN0PEd0a1ByaW50ZXIqKj4odXNlckRh
dGEpOwotICAgICAgICAqZm91bmRQcmludGVyID0gc3RhdGljX2Nhc3Q8R3RrUHJpbnRlcio+KGdf
b2JqZWN0X3JlZihwcmludGVyKSk7Ci0gICAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQotICAg
IEd0a1ByaW50ZXIqIGZpbmRQcmludFRvRmlsZVByaW50ZXIoKQotICAgIHsKLSAgICAgICAgR3Rr
UHJpbnRlciogcHJpbnRlciA9IDA7Ci0gICAgICAgIGd0a19lbnVtZXJhdGVfcHJpbnRlcnModGVz
dFByaW50T3BlcmF0aW9uUHJpbnRQcmludGVyLCAmcHJpbnRlciwgMCwgVFJVRSk7Ci0gICAgICAg
IHJldHVybiBwcmludGVyOwotICAgIH0KLQotICAgIHZvaWQgd2FpdFVudGlsUHJpbnRGaW5pc2hl
ZCgpCi0gICAgewotICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Ci0gICAgfQot
Ci0gICAgR1JlZlB0cjxXZWJLaXRQcmludE9wZXJhdGlvbj4gbV9wcmludE9wZXJhdGlvbjsKLSAg
ICB1bnNpZ25lZCBpbnQgbV9leHBlY3RlZEVycm9yOwotfTsKLQotc3RhdGljIHZvaWQgdGVzdFBy
aW50T3BlcmF0aW9uUHJpbnQoUHJpbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAg
IHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keT5XZWJLaXRHVEsrIHByaW50aW5nIHRlc3Q8L2Jv
ZHk+PC9odG1sPiIsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0g
ICAgR1JlZlB0cjxHdGtQcmludGVyPiBwcmludGVyID0gYWRvcHRHUmVmKHRlc3QtPmZpbmRQcmlu
dFRvRmlsZVByaW50ZXIoKSk7Ci0gICAgaWYgKCFwcmludGVyKSB7Ci0gICAgICAgIGdfbWVzc2Fn
ZSgiJXMiLCAiQ2Fubm90IHRlc3QgV2ViS2l0UHJpbnRPcGVyYXRpb24vcHJpbnQ6IG5vIHN1aXRh
YmxlIHByaW50ZXIgZm91bmQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEdPd25Q
dHI8Y2hhcj4gb3V0cHV0RmlsZW5hbWUoZ19idWlsZF9maWxlbmFtZShrVGVtcERpcmVjdG9yeSwg
IndlYmtpdC1wcmludC5wZGYiLCBOVUxMKSk7Ci0gICAgR1JlZlB0cjxHRmlsZT4gb3V0cHV0Rmls
ZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKG91dHB1dEZpbGVuYW1lLmdldCgpKSk7
Ci0gICAgR093blB0cjxjaGFyPiBvdXRwdXRVUkkoZ19maWxlX2dldF91cmkob3V0cHV0RmlsZS5n
ZXQoKSkpOwotCi0gICAgR1JlZlB0cjxHdGtQcmludFNldHRpbmdzPiBwcmludFNldHRpbmdzID0g
YWRvcHRHUmVmKGd0a19wcmludF9zZXR0aW5nc19uZXcoKSk7Ci0gICAgZ3RrX3ByaW50X3NldHRp
bmdzX3NldF9wcmludGVyKHByaW50U2V0dGluZ3MuZ2V0KCksIGd0a19wcmludGVyX2dldF9uYW1l
KHByaW50ZXIuZ2V0KCkpKTsKLSAgICBndGtfcHJpbnRfc2V0dGluZ3Nfc2V0KHByaW50U2V0dGlu
Z3MuZ2V0KCksIEdUS19QUklOVF9TRVRUSU5HU19PVVRQVVRfVVJJLCBvdXRwdXRVUkkuZ2V0KCkp
OwotCi0gICAgd2Via2l0X3ByaW50X29wZXJhdGlvbl9zZXRfcHJpbnRfc2V0dGluZ3ModGVzdC0+
bV9wcmludE9wZXJhdGlvbi5nZXQoKSwgcHJpbnRTZXR0aW5ncy5nZXQoKSk7Ci0gICAgd2Via2l0
X3ByaW50X29wZXJhdGlvbl9wcmludCh0ZXN0LT5tX3ByaW50T3BlcmF0aW9uLmdldCgpKTsKLSAg
ICB0ZXN0LT53YWl0VW50aWxQcmludEZpbmlzaGVkKCk7Ci0KLSAgICBHUmVmUHRyPEdGaWxlSW5m
bz4gZmlsZUluZm8gPSBhZG9wdEdSZWYoZ19maWxlX3F1ZXJ5X2luZm8ob3V0cHV0RmlsZS5nZXQo
KSwgR19GSUxFX0FUVFJJQlVURV9TVEFOREFSRF9TSVpFICIsIiBHX0ZJTEVfQVRUUklCVVRFX1NU
QU5EQVJEX0NPTlRFTlRfVFlQRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R0ZpbGVRdWVyeUluZm9GbGFn
cz4oMCksIDAsIDApKTsKLSAgICBnX2Fzc2VydChmaWxlSW5mby5nZXQoKSk7Ci0gICAgZ19hc3Nl
cnRfY21waW50KGdfZmlsZV9pbmZvX2dldF9zaXplKGZpbGVJbmZvLmdldCgpKSwgPiwgMCk7Ci0g
ICAgZ19hc3NlcnRfY21wc3RyKGdfZmlsZV9pbmZvX2dldF9jb250ZW50X3R5cGUoZmlsZUluZm8u
Z2V0KCkpLCA9PSwgImFwcGxpY2F0aW9uL3BkZiIpOwotCi0gICAgZ19maWxlX2RlbGV0ZShvdXRw
dXRGaWxlLmdldCgpLCAwLCAwKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFByaW50T3BlcmF0aW9u
RXJyb3JzKFByaW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5sb2Fk
SHRtbCgiPGh0bWw+PGJvZHk+V2ViS2l0R1RLKyBwcmludGluZyBlcnJvcnMgdGVzdDwvYm9keT48
L2h0bWw+IiwgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBH
UmVmUHRyPEd0a1ByaW50ZXI+IHByaW50ZXIgPSBhZG9wdEdSZWYodGVzdC0+ZmluZFByaW50VG9G
aWxlUHJpbnRlcigpKTsKLSAgICBpZiAoIXByaW50ZXIpIHsKLSAgICAgICAgZ19tZXNzYWdlKCIl
cyIsICJDYW5ub3QgdGVzdCBXZWJLaXRQcmludE9wZXJhdGlvbi9wcmludDogbm8gc3VpdGFibGUg
cHJpbnRlciBmb3VuZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gR2VuZXJh
bCBFcnJvcjogaW52YWxpZCBmaWxlbmFtZS4KLSAgICB0ZXN0LT5tX2V4cGVjdGVkRXJyb3IgPSBX
RUJLSVRfUFJJTlRfRVJST1JfR0VORVJBTDsKLSAgICBHUmVmUHRyPEd0a1ByaW50U2V0dGluZ3M+
IHByaW50U2V0dGluZ3MgPSBhZG9wdEdSZWYoZ3RrX3ByaW50X3NldHRpbmdzX25ldygpKTsKLSAg
ICBndGtfcHJpbnRfc2V0dGluZ3Nfc2V0X3ByaW50ZXIocHJpbnRTZXR0aW5ncy5nZXQoKSwgZ3Rr
X3ByaW50ZXJfZ2V0X25hbWUocHJpbnRlci5nZXQoKSkpOwotICAgIGd0a19wcmludF9zZXR0aW5n
c19zZXQocHJpbnRTZXR0aW5ncy5nZXQoKSwgR1RLX1BSSU5UX1NFVFRJTkdTX09VVFBVVF9VUkks
ICJmaWxlOi8vL2Zvby9iYXIiKTsKLSAgICB3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX3NldF9wcmlu
dF9zZXR0aW5ncyh0ZXN0LT5tX3ByaW50T3BlcmF0aW9uLmdldCgpLCBwcmludFNldHRpbmdzLmdl
dCgpKTsKLSAgICB3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX3ByaW50KHRlc3QtPm1fcHJpbnRPcGVy
YXRpb24uZ2V0KCkpOwotICAgIHRlc3QtPndhaXRVbnRpbFByaW50RmluaXNoZWQoKTsKLQotICAg
IC8vIFByaW50ZXIgbm90IGZvdW5kIGVycm9yLgotICAgIHRlc3QtPm1fZXhwZWN0ZWRFcnJvciA9
IFdFQktJVF9QUklOVF9FUlJPUl9QUklOVEVSX05PVF9GT1VORDsKLSAgICBndGtfcHJpbnRfc2V0
dGluZ3Nfc2V0X3ByaW50ZXIocHJpbnRTZXR0aW5ncy5nZXQoKSwgIlRoZSBmYWtlIFdlYktpdCBw
cmludGVyIik7Ci0gICAgd2Via2l0X3ByaW50X29wZXJhdGlvbl9wcmludCh0ZXN0LT5tX3ByaW50
T3BlcmF0aW9uLmdldCgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxQcmludEZpbmlzaGVkKCk7Ci0K
LSAgICAvLyBObyBwYWdlcyB0byBwcmludDogcHJpbnQgZXZlbiBwYWdlcyBmb3IgYSBzaW5nbGUg
cGFnZSBkb2N1bWVudC4KLSAgICB0ZXN0LT5tX2V4cGVjdGVkRXJyb3IgPSBXRUJLSVRfUFJJTlRf
RVJST1JfSU5WQUxJRF9QQUdFX1JBTkdFOwotICAgIGd0a19wcmludF9zZXR0aW5nc19zZXRfcHJp
bnRlcihwcmludFNldHRpbmdzLmdldCgpLCBndGtfcHJpbnRlcl9nZXRfbmFtZShwcmludGVyLmdl
dCgpKSk7Ci0gICAgZ3RrX3ByaW50X3NldHRpbmdzX3NldF9wYWdlX3NldChwcmludFNldHRpbmdz
LmdldCgpLCBHVEtfUEFHRV9TRVRfRVZFTik7Ci0gICAgd2Via2l0X3ByaW50X29wZXJhdGlvbl9w
cmludCh0ZXN0LT5tX3ByaW50T3BlcmF0aW9uLmdldCgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxQ
cmludEZpbmlzaGVkKCk7Ci19Ci0jZW5kaWYgLy8gSEFWRV9HVEtfVU5JWF9QUklOVElORwotCi12
b2lkIGJlZm9yZUFsbCgpCi17Ci0gICAga1RlbXBEaXJlY3RvcnkgPSBnX2Rpcl9tYWtlX3RtcCgi
V2ViS2l0MlRlc3RzLVhYWFhYWCIsIDApOwotICAgIGdfYXNzZXJ0KGtUZW1wRGlyZWN0b3J5KTsK
LQotICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFByaW50T3BlcmF0aW9uIiwgInByaW50aW5n
LXNldHRpbmdzIiwgdGVzdFByaW50T3BlcmF0aW9uUHJpbnRTZXR0aW5ncyk7Ci0gICAgV2ViVmll
d1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJwcmludCIsIHRlc3RXZWJWaWV3UHJpbnQpOwot
I2lmZGVmIEhBVkVfR1RLX1VOSVhfUFJJTlRJTkcKLSAgICBQcmludFRlc3Q6OmFkZCgiV2ViS2l0
UHJpbnRPcGVyYXRpb24iLCAicHJpbnQiLCB0ZXN0UHJpbnRPcGVyYXRpb25QcmludCk7Ci0gICAg
UHJpbnRUZXN0OjphZGQoIldlYktpdFByaW50T3BlcmF0aW9uIiwgInByaW50LWVycm9ycyIsIHRl
c3RQcmludE9wZXJhdGlvbkVycm9ycyk7Ci0jZW5kaWYKLX0KLQotdm9pZCBhZnRlckFsbCgpCi17
Ci0gICAgZ19ybWRpcihrVGVtcERpcmVjdG9yeSk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0UmVzb3VyY2VzLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RSZXNvdXJjZXMuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1N2YxODJjLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RSZXNvdXJjZXMuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsNzg5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMu
TC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5oIgot
I2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1
ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLQotc3RhdGljIFdlYktpdFRlc3RTZXJ2ZXIqIGtT
ZXJ2ZXI7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBrSW5kZXhIdG1sID0KLSAgICAiPGh0bWw+PGhl
YWQ+IgotICAgICIgPGxpbmsgcmVsPSdzdHlsZXNoZWV0JyBocmVmPScvc3R5bGUuY3NzJyB0eXBl
PSd0ZXh0L2Nzcyc+IgotICAgICIgPHNjcmlwdCBsYW5ndWFnZT0namF2YXNjcmlwdCcgc3JjPScv
amF2YXNjcmlwdC5qcyc+PC9zY3JpcHQ+IgotICAgICI8L2hlYWQ+PGJvZHk+V2ViS2l0R1RLKyBy
ZXNvdXJjZXMgdGVzdDwvYm9keT48L2h0bWw+IjsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGtTdHls
ZUNTUyA9Ci0gICAgImJvZHkgeyIKLSAgICAiICAgIG1hcmdpbjogMHB4OyIKLSAgICAiICAgIHBh
ZGRpbmc6IDBweDsiCi0gICAgIiAgICBmb250LWZhbWlseTogc2Fucy1zZXJpZjsiCi0gICAgIiAg
ICBiYWNrZ3JvdW5kOiB1cmwoL2JsYW5rLmljbykgMCAwIG5vLXJlcGVhdDsiCi0gICAgIiAgICBj
b2xvcjogYmxhY2s7IgotICAgICJ9IjsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGtKYXZhc2NyaXB0
ID0gImZ1bmN0aW9uIGZvbyAoKSB7IHZhciBhID0gMTsgfSI7Ci0KLWNsYXNzIFJlc291cmNlc1Rl
c3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklY
VFVSRShSZXNvdXJjZXNUZXN0KTsKLQotICAgIHN0YXRpYyB2b2lkIHJlc291cmNlU2VudFJlcXVl
c3RDYWxsYmFjayhXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIFdlYktpdFVSSVJlcXVlc3Qq
IHJlcXVlc3QsIFdlYktpdFVSSVJlc3BvbnNlKiByZWRpcmVjdFJlc3BvbnNlLCBSZXNvdXJjZXNU
ZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hl
blRlc3RGaW5pc2hlcyhHX09CSkVDVChyZXF1ZXN0KSk7Ci0gICAgICAgIGlmIChyZWRpcmVjdFJl
c3BvbnNlKQotICAgICAgICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RG
aW5pc2hlcyhHX09CSkVDVChyZWRpcmVjdFJlc3BvbnNlKSk7Ci0gICAgICAgIHRlc3QtPnJlc291
cmNlU2VudFJlcXVlc3QocmVzb3VyY2UsIHJlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpOwotICAg
IH0KLQotICAgIHN0YXRpYyB2b2lkIHJlc291cmNlUmVjZWl2ZWRSZXNwb25zZUNhbGxiYWNrKFdl
YktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgR1BhcmFtU3BlYyosIFJlc291cmNlc1Rlc3QqIHRl
c3QpCi0gICAgewotICAgICAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3Jlc291cmNlX2dldF9yZXNw
b25zZShyZXNvdXJjZSkpOwotICAgICAgICB0ZXN0LT5yZXNvdXJjZVJlY2VpdmVkUmVzcG9uc2Uo
cmVzb3VyY2UpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHJlc291cmNlUmVjZWl2ZWREYXRh
Q2FsbGJhY2soV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBndWludDY0IGJ5dGVzUmVjZWl2
ZWQsIFJlc291cmNlc1Rlc3QqIHRlc3QpCi0gICAgewotICAgICAgICB0ZXN0LT5yZXNvdXJjZVJl
Y2VpdmVkRGF0YShyZXNvdXJjZSwgYnl0ZXNSZWNlaXZlZCk7Ci0gICAgfQotCi0gICAgc3RhdGlj
IHZvaWQgcmVzb3VyY2VGaW5pc2hlZENhbGxiYWNrKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJj
ZSwgUmVzb3VyY2VzVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHRlc3QtPnJlc291cmNlRmlu
aXNoZWQocmVzb3VyY2UpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHJlc291cmNlRmFpbGVk
Q2FsbGJhY2soV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBHRXJyb3IqIGVycm9yLCBSZXNv
dXJjZXNUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgZ19hc3NlcnQoZXJyb3IpOwotICAgICAg
ICB0ZXN0LT5yZXNvdXJjZUZhaWxlZChyZXNvdXJjZSwgZXJyb3IpOwotICAgIH0KLQotICAgIHN0
YXRpYyB2b2lkIHJlc291cmNlTG9hZFN0YXJ0ZWRDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3LCBXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVl
c3QsIFJlc291cmNlc1Rlc3QqIHRlc3QpCi0gICAgewotICAgICAgICB0ZXN0LT5hc3NlcnRPYmpl
Y3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHJlc291cmNlKSk7Ci0gICAgICAg
IHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QocmVx
dWVzdCkpOwotCi0gICAgICAgIC8vIElnbm9yZSBmYXZpY29ucy4KLSAgICAgICAgaWYgKGdfc3Ry
X2hhc19zdWZmaXgod2Via2l0X3VyaV9yZXF1ZXN0X2dldF91cmkocmVxdWVzdCksICJmYXZpY29u
LmljbyIpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRlc3QtPnJlc291cmNlTG9h
ZFN0YXJ0ZWQocmVzb3VyY2UsIHJlcXVlc3QpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KHJl
c291cmNlLCAic2VudC1yZXF1ZXN0IiwgR19DQUxMQkFDSyhyZXNvdXJjZVNlbnRSZXF1ZXN0Q2Fs
bGJhY2spLCB0ZXN0KTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChyZXNvdXJjZSwgIm5vdGlm
eTo6cmVzcG9uc2UiLCBHX0NBTExCQUNLKHJlc291cmNlUmVjZWl2ZWRSZXNwb25zZUNhbGxiYWNr
KSwgdGVzdCk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QocmVzb3VyY2UsICJyZWNlaXZlZC1k
YXRhIiwgR19DQUxMQkFDSyhyZXNvdXJjZVJlY2VpdmVkRGF0YUNhbGxiYWNrKSwgdGVzdCk7Ci0g
ICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QocmVzb3VyY2UsICJmaW5pc2hlZCIsIEdfQ0FMTEJBQ0so
cmVzb3VyY2VGaW5pc2hlZENhbGxiYWNrKSwgdGVzdCk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5l
Y3QocmVzb3VyY2UsICJmYWlsZWQiLCBHX0NBTExCQUNLKHJlc291cmNlRmFpbGVkQ2FsbGJhY2sp
LCB0ZXN0KTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyU3VicmVzb3VyY2VzKCkKLSAgICB7Ci0g
ICAgICAgIGdfbGlzdF9mcmVlX2Z1bGwobV9zdWJyZXNvdXJjZXMsIHJlaW50ZXJwcmV0X2Nhc3Q8
R0Rlc3Ryb3lOb3RpZnk+KGdfb2JqZWN0X3VucmVmKSk7Ci0gICAgICAgIG1fc3VicmVzb3VyY2Vz
ID0gMDsKLSAgICB9Ci0KLSAgICBSZXNvdXJjZXNUZXN0KCkKLSAgICAgICAgOiBXZWJWaWV3VGVz
dCgpCi0gICAgICAgICwgbV9yZXNvdXJjZXNMb2FkZWQoMCkKLSAgICAgICAgLCBtX3Jlc291cmNl
c1RvTG9hZCgwKQotICAgICAgICAsIG1fcmVzb3VyY2VEYXRhU2l6ZSgwKQotICAgICAgICAsIG1f
c3VicmVzb3VyY2VzKDApCi0gICAgewotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmll
dywgInJlc291cmNlLWxvYWQtc3RhcnRlZCIsIEdfQ0FMTEJBQ0socmVzb3VyY2VMb2FkU3RhcnRl
ZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgfQotCi0gICAgflJlc291cmNlc1Rlc3QoKQotICAgIHsK
LSAgICAgICAgY2xlYXJTdWJyZXNvdXJjZXMoKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
cmVzb3VyY2VMb2FkU3RhcnRlZChXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIFdlYktpdFVS
SVJlcXVlc3QqIHJlcXVlc3QpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCByZXNv
dXJjZVNlbnRSZXF1ZXN0KFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgV2ViS2l0VVJJUmVx
dWVzdCogcmVxdWVzdCwgV2ViS2l0VVJJUmVzcG9uc2UqIHJlZGlyZWN0UmVzcG9uc2UpCi0gICAg
ewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCByZXNvdXJjZVJlY2VpdmVkUmVzcG9uc2UoV2Vi
S2l0V2ViUmVzb3VyY2UqIHJlc291cmNlKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgcmVzb3VyY2VSZWNlaXZlZERhdGEoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBndWlu
dDY0IGJ5dGVzUmVjZWl2ZWQpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCByZXNv
dXJjZUZpbmlzaGVkKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSkKLSAgICB7Ci0gICAgICAg
IGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChyZXNvdXJjZSwgR19TSUdOQUxf
TUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7Ci0gICAgICAgIGlmICh3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X21haW5fcmVzb3VyY2UobV93ZWJWaWV3KSAhPSByZXNvdXJjZSkKLSAgICAgICAgICAg
IG1fc3VicmVzb3VyY2VzID0gZ19saXN0X3ByZXBlbmQobV9zdWJyZXNvdXJjZXMsIGdfb2JqZWN0
X3JlZihyZXNvdXJjZSkpOwotICAgICAgICBpZiAoKyttX3Jlc291cmNlc0xvYWRlZCA9PSBtX3Jl
c291cmNlc1RvTG9hZCkKLSAgICAgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7
Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHJlc291cmNlRmFpbGVkKFdlYktpdFdlYlJlc291
cmNlKiByZXNvdXJjZSwgR0Vycm9yKiBlcnJvcikKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0X25v
dF9yZWFjaGVkKCk7Ci0gICAgfQotCi0gICAgdm9pZCB3YWl0VW50aWxSZXNvdXJjZXNMb2FkZWQo
c2l6ZV90IHJlc291cmNlc0NvdW50KQotICAgIHsKLSAgICAgICAgbV9yZXNvdXJjZXNMb2FkZWQg
PSAwOwotICAgICAgICBtX3Jlc291cmNlc1RvTG9hZCA9IHJlc291cmNlc0NvdW50OwotICAgICAg
ICBjbGVhclN1YnJlc291cmNlcygpOwotICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9v
cCk7Ci0gICAgfQotCi0gICAgR0xpc3QqIHN1YnJlc291cmNlcygpCi0gICAgewotICAgICAgICBy
ZXR1cm4gbV9zdWJyZXNvdXJjZXM7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgcmVzb3VyY2VH
ZXREYXRhQ2FsbGJhY2soR09iamVjdCogb2JqZWN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3Bv
aW50ZXIgdXNlckRhdGEpCi0gICAgewotICAgICAgICBzaXplX3QgZGF0YVNpemU7Ci0gICAgICAg
IEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKLSAgICAgICAgdW5zaWduZWQgY2hhciogZGF0YSA9IHdl
YmtpdF93ZWJfcmVzb3VyY2VfZ2V0X2RhdGFfZmluaXNoKFdFQktJVF9XRUJfUkVTT1VSQ0Uob2Jq
ZWN0KSwgcmVzdWx0LCAmZGF0YVNpemUsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgICAgIGdfYXNz
ZXJ0KCFlcnJvci5nZXQoKSk7Ci0gICAgICAgIGdfYXNzZXJ0KGRhdGEpOwotICAgICAgICBnX2Fz
c2VydF9jbXBpbnQoZGF0YVNpemUsID4sIDApOwotCi0gICAgICAgIFJlc291cmNlc1Rlc3QqIHRl
c3QgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZXNUZXN0Kj4odXNlckRhdGEpOwotICAgICAgICB0ZXN0
LT5tX3Jlc291cmNlRGF0YS5zZXQocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZGF0YSkpOwotICAg
ICAgICB0ZXN0LT5tX3Jlc291cmNlRGF0YVNpemUgPSBkYXRhU2l6ZTsKLSAgICAgICAgZ19tYWlu
X2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNoZWNrUmVz
b3VyY2VEYXRhKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSkKLSAgICB7Ci0gICAgICAgIG1f
cmVzb3VyY2VEYXRhU2l6ZSA9IDA7Ci0gICAgICAgIHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X2Rh
dGEocmVzb3VyY2UsIDAsIHJlc291cmNlR2V0RGF0YUNhbGxiYWNrLCB0aGlzKTsKLSAgICAgICAg
Z19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotCi0gICAgICAgIGNvbnN0IGNoYXIqIHVyaSA9
IHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaShyZXNvdXJjZSk7Ci0gICAgICAgIGlmICh1cmkg
PT0ga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpKSB7Ci0gICAgICAgICAgICBnX2Fzc2VydF9j
bXBpbnQobV9yZXNvdXJjZURhdGFTaXplLCA9PSwgc3RybGVuKGtJbmRleEh0bWwpKTsKLSAgICAg
ICAgICAgIGdfYXNzZXJ0KCFzdHJuY21wKG1fcmVzb3VyY2VEYXRhLmdldCgpLCBrSW5kZXhIdG1s
LCBtX3Jlc291cmNlRGF0YVNpemUpKTsKLSAgICAgICAgfSBlbHNlIGlmICh1cmkgPT0ga1NlcnZl
ci0+Z2V0VVJJRm9yUGF0aCgiL3N0eWxlLmNzcyIpKSB7Ci0gICAgICAgICAgICBnX2Fzc2VydF9j
bXBpbnQobV9yZXNvdXJjZURhdGFTaXplLCA9PSwgc3RybGVuKGtTdHlsZUNTUykpOwotICAgICAg
ICAgICAgZ19hc3NlcnQoIXN0cm5jbXAobV9yZXNvdXJjZURhdGEuZ2V0KCksIGtTdHlsZUNTUywg
bV9yZXNvdXJjZURhdGFTaXplKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAodXJpID09IGtTZXJ2ZXIt
PmdldFVSSUZvclBhdGgoIi9qYXZhc2NyaXB0LmpzIikpIHsKLSAgICAgICAgICAgIGdfYXNzZXJ0
X2NtcGludChtX3Jlc291cmNlRGF0YVNpemUsID09LCBzdHJsZW4oa0phdmFzY3JpcHQpKTsKLSAg
ICAgICAgICAgIGdfYXNzZXJ0KCFzdHJuY21wKG1fcmVzb3VyY2VEYXRhLmdldCgpLCBrSmF2YXNj
cmlwdCwgbV9yZXNvdXJjZURhdGFTaXplKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
Z19hc3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICAgICAgbV9yZXNvdXJjZURhdGEuY2xlYXIoKTsK
LSAgICB9Ci0KLSAgICBzaXplX3QgbV9yZXNvdXJjZXNMb2FkZWQ7Ci0gICAgc2l6ZV90IG1fcmVz
b3VyY2VzVG9Mb2FkOwotICAgIEdPd25QdHI8Y2hhcj4gbV9yZXNvdXJjZURhdGE7Ci0gICAgc2l6
ZV90IG1fcmVzb3VyY2VEYXRhU2l6ZTsKLSAgICBHTGlzdCogbV9zdWJyZXNvdXJjZXM7Ci19Owot
Ci1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1Jlc291cmNlcyhSZXNvdXJjZXNUZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQotewotICAgIC8vIE5vdGhpbmcgbG9hZGVkIHlldCwgdGhlcmUgc2hvdWxu
ZCd0IGJlIHJlc291cmNlcy4KLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2dldF9tYWlu
X3Jlc291cmNlKHRlc3QtPm1fd2ViVmlldykpOwotICAgIGdfYXNzZXJ0KCF0ZXN0LT5zdWJyZXNv
dXJjZXMoKSk7Ci0KLSAgICAvLyBMb2FkIHNpbXBsZSBwYWdlIHdpdGhvdXQgc3VicmVzb3VyY2Vz
LgotICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keT5UZXN0aW5nIFdlYktpdEdUSys8L2Jv
ZHk+PC9odG1sPiIsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAg
IFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSA9IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9y
ZXNvdXJjZSh0ZXN0LT5tX3dlYlZpZXcpOwotICAgIGdfYXNzZXJ0KHJlc291cmNlKTsKLSAgICBn
X2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dldF91cmkodGVzdC0+bV93ZWJWaWV3KSwg
PT0sIHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaShyZXNvdXJjZSkpOwotICAgIGdfYXNzZXJ0
KCF0ZXN0LT5zdWJyZXNvdXJjZXMoKSk7Ci0KLSAgICAvLyBMb2FkIHNpbXBsZSBwYWdlIHdpdGgg
c3VicmVzb3VyY2VzLgotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgi
LyIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VzTG9hZGVkKDQpOwotCi0g
ICAgcmVzb3VyY2UgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2UodGVzdC0+bV93
ZWJWaWV3KTsKLSAgICBnX2Fzc2VydChyZXNvdXJjZSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdl
YmtpdF93ZWJfdmlld19nZXRfdXJpKHRlc3QtPm1fd2ViVmlldyksID09LCB3ZWJraXRfd2ViX3Jl
c291cmNlX2dldF91cmkocmVzb3VyY2UpKTsKLSAgICBHTGlzdCogc3VicmVzb3VyY2VzID0gdGVz
dC0+c3VicmVzb3VyY2VzKCk7Ci0gICAgZ19hc3NlcnQoc3VicmVzb3VyY2VzKTsKLSAgICBnX2Fz
c2VydF9jbXBpbnQoZ19saXN0X2xlbmd0aChzdWJyZXNvdXJjZXMpLCA9PSwgMyk7Ci0KLSNpZiAw
Ci0gICAgLy8gTG9hZCB0aGUgc2FtZSBVUkkgYWdhaW4uCi0gICAgLy8gRklYTUU6IHdlIG5lZWQg
YSB3b3JrYXJvdW5kIGZvciBidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTc4NTEwLgotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIp
LmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VzTG9hZGVkKDQpOwotI2VuZGlm
Ci0KLSAgICAvLyBSZWxvYWQuCi0gICAgd2Via2l0X3dlYl92aWV3X3JlbG9hZF9ieXBhc3NfY2Fj
aGUodGVzdC0+bV93ZWJWaWV3KTsKLSAgICB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZXNMb2FkZWQo
NCk7Ci19Ci0KLWNsYXNzIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6IHB1YmxpYyBSZXNvdXJjZXNU
ZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFNpbmdsZVJlc291cmNl
TG9hZFRlc3QpOwotCi0gICAgZW51bSBMb2FkRXZlbnRzIHsKLSAgICAgICAgU3RhcnRlZCwKLSAg
ICAgICAgU2VudFJlcXVlc3QsCi0gICAgICAgIFJlZGlyZWN0ZWQsCi0gICAgICAgIFJlY2VpdmVk
UmVzcG9uc2UsCi0gICAgICAgIFJlY2VpdmVkRGF0YSwKLSAgICAgICAgRmluaXNoZWQsCi0gICAg
ICAgIEZhaWxlZAotICAgIH07Ci0KLSAgICBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0KCkKLSAgICAg
ICAgOiBSZXNvdXJjZXNUZXN0KCkKLSAgICAgICAgLCBtX3Jlc291cmNlRGF0YVJlY2VpdmVkKDAp
Ci0gICAgewotICAgICAgICAgbV9yZXNvdXJjZXNUb0xvYWQgPSAyOwotICAgIH0KLQotICAgIHZv
aWQgcmVzb3VyY2VMb2FkU3RhcnRlZChXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIFdlYktp
dFVSSVJlcXVlc3QqIHJlcXVlc3QpCi0gICAgewotICAgICAgICBpZiAocmVzb3VyY2UgPT0gd2Vi
a2l0X3dlYl92aWV3X2dldF9tYWluX3Jlc291cmNlKG1fd2ViVmlldykpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgbV9yZXNvdXJjZURhdGFSZWNlaXZlZCA9IDA7Ci0gICAgICAgIG1f
cmVzb3VyY2UgPSByZXNvdXJjZTsKLSAgICAgICAgbV9sb2FkRXZlbnRzLmFwcGVuZChTdGFydGVk
KTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlc291cmNlU2VudFJlcXVlc3QoV2ViS2l0V2ViUmVzb3Vy
Y2UqIHJlc291cmNlLCBXZWJLaXRVUklSZXF1ZXN0KiByZXF1ZXN0LCBXZWJLaXRVUklSZXNwb25z
ZSogcmVkaXJlY3RSZXNwb25zZSkKLSAgICB7Ci0gICAgICAgIGlmIChyZXNvdXJjZSAhPSBtX3Jl
c291cmNlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChyZWRpcmVjdFJlc3Bv
bnNlKQotICAgICAgICAgICAgbV9sb2FkRXZlbnRzLmFwcGVuZChSZWRpcmVjdGVkKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgbV9sb2FkRXZlbnRzLmFwcGVuZChTZW50UmVxdWVzdCk7Ci0g
ICAgfQotCi0gICAgdm9pZCByZXNvdXJjZVJlY2VpdmVkUmVzcG9uc2UoV2ViS2l0V2ViUmVzb3Vy
Y2UqIHJlc291cmNlKQotICAgIHsKLSAgICAgICAgaWYgKHJlc291cmNlICE9IG1fcmVzb3VyY2Up
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9sb2FkRXZlbnRzLmFwcGVuZChSZWNl
aXZlZFJlc3BvbnNlKTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlc291cmNlUmVjZWl2ZWREYXRhKFdl
YktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgZ3VpbnQ2NCBieXRlc1JlY2VpdmVkKQotICAgIHsK
LSAgICAgICAgaWYgKHJlc291cmNlICE9IG1fcmVzb3VyY2UpCi0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgbV9yZXNvdXJjZURhdGFSZWNlaXZlZCArPSBieXRlc1JlY2VpdmVkOwotICAg
ICAgICBpZiAoIW1fbG9hZEV2ZW50cy5jb250YWlucyhSZWNlaXZlZERhdGEpKQotICAgICAgICAg
ICAgbV9sb2FkRXZlbnRzLmFwcGVuZChSZWNlaXZlZERhdGEpOwotICAgIH0KLQotICAgIHZvaWQg
cmVzb3VyY2VGaW5pc2hlZChXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UpCi0gICAgewotICAg
ICAgICBpZiAocmVzb3VyY2UgIT0gbV9yZXNvdXJjZSkgewotICAgICAgICAgICAgUmVzb3VyY2Vz
VGVzdDo6cmVzb3VyY2VGaW5pc2hlZChyZXNvdXJjZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoIW1fbG9hZEV2ZW50cy5jb250YWlucyhGYWlsZWQpKSB7
Ci0gICAgICAgICAgICBXZWJLaXRVUklSZXNwb25zZSogcmVzcG9uc2UgPSB3ZWJraXRfd2ViX3Jl
c291cmNlX2dldF9yZXNwb25zZShtX3Jlc291cmNlLmdldCgpKTsKLSAgICAgICAgICAgIGdfYXNz
ZXJ0KHJlc3BvbnNlKTsKLSAgICAgICAgICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfdXJpX3Jl
c3BvbnNlX2dldF9jb250ZW50X2xlbmd0aChyZXNwb25zZSksID09LCBtX3Jlc291cmNlRGF0YVJl
Y2VpdmVkKTsKLSAgICAgICAgfQotICAgICAgICBtX2xvYWRFdmVudHMuYXBwZW5kKEZpbmlzaGVk
KTsKLSAgICAgICAgUmVzb3VyY2VzVGVzdDo6cmVzb3VyY2VGaW5pc2hlZChyZXNvdXJjZSk7Ci0g
ICAgfQotCi0gICAgdm9pZCByZXNvdXJjZUZhaWxlZChXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3Vy
Y2UsIEdFcnJvciogZXJyb3IpCi0gICAgewotICAgICAgICBpZiAocmVzb3VyY2UgPT0gbV9yZXNv
dXJjZSkKLSAgICAgICAgICAgIG1fbG9hZEV2ZW50cy5hcHBlbmQoRmFpbGVkKTsKLSAgICB9Ci0K
LSAgICB2b2lkIHdhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlzaGVkKCkKLSAgICB7Ci0gICAgICAg
IG1fcmVzb3VyY2UgPSAwOwotICAgICAgICBtX3Jlc291cmNlc0xvYWRlZCA9IDA7Ci0gICAgICAg
IGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAgICB9Ci0KLSAgICBXZWJLaXRVUklSZXNw
b25zZSogd2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWRBbmRSZXR1cm5VUklSZXNwb25zZSgp
Ci0gICAgewotICAgICAgICB3YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZCgpOwotICAgICAg
ICBnX2Fzc2VydChtX3Jlc291cmNlKTsKLSAgICAgICAgcmV0dXJuIHdlYmtpdF93ZWJfcmVzb3Vy
Y2VfZ2V0X3Jlc3BvbnNlKG1fcmVzb3VyY2UuZ2V0KCkpOwotICAgIH0KLQotICAgIEdSZWZQdHI8
V2ViS2l0V2ViUmVzb3VyY2U+IG1fcmVzb3VyY2U7Ci0gICAgVmVjdG9yPExvYWRFdmVudHM+IG1f
bG9hZEV2ZW50czsKLSAgICBndWludDY0IG1fcmVzb3VyY2VEYXRhUmVjZWl2ZWQ7Ci19OwotCi1z
dGF0aWMgdm9pZCB0ZXN0V2ViUmVzb3VyY2VMb2FkaW5nKFNpbmdsZVJlc291cmNlTG9hZFRlc3Qq
IHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRV
UklGb3JQYXRoKCIvamF2YXNjcmlwdC5odG1sIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50
aWxSZXNvdXJjZUxvYWRGaW5pc2hlZCgpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fcmVzb3VyY2Up
OwotICAgIFZlY3RvcjxTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpMb2FkRXZlbnRzPiYgZXZlbnRz
ID0gdGVzdC0+bV9sb2FkRXZlbnRzOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgp
LCA9PSwgNSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIFNpbmdsZVJlc291
cmNlTG9hZFRlc3Q6OlN0YXJ0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09
LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpTZW50UmVxdWVzdCk7Ci0gICAgZ19hc3NlcnRfY21w
aW50KGV2ZW50c1syXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9u
c2UpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbM10sID09LCBTaW5nbGVSZXNvdXJjZUxv
YWRUZXN0OjpSZWNlaXZlZERhdGEpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbNF0sID09
LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpGaW5pc2hlZCk7Ci0gICAgZXZlbnRzLmNsZWFyKCk7
Ci0KLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9yZWRpcmVjdGVk
LWNzcy5odG1sIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5p
c2hlZCgpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fcmVzb3VyY2UpOwotICAgIGdfYXNzZXJ0X2Nt
cGludChldmVudHMuc2l6ZSgpLCA9PSwgNik7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sw
XSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlN0YXJ0ZWQpOwotICAgIGdfYXNzZXJ0X2Nt
cGludChldmVudHNbMV0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpTZW50UmVxdWVzdCk7
Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRl
c3Q6OlJlZGlyZWN0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbM10sID09LCBTaW5n
bGVSZXNvdXJjZUxvYWRUZXN0OjpSZWNlaXZlZFJlc3BvbnNlKTsKLSAgICBnX2Fzc2VydF9jbXBp
bnQoZXZlbnRzWzRdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6UmVjZWl2ZWREYXRhKTsK
LSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzVdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVz
dDo6RmluaXNoZWQpOwotICAgIGV2ZW50cy5jbGVhcigpOwotCi0gICAgdGVzdC0+bG9hZFVSSShr
U2VydmVyLT5nZXRVUklGb3JQYXRoKCIvaW52YWxpZC1jc3MuaHRtbCIpLmRhdGEoKSk7Ci0gICAg
dGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydCh0ZXN0
LT5tX3Jlc291cmNlKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDQp
OwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRU
ZXN0OjpTdGFydGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgU2luZ2xl
UmVzb3VyY2VMb2FkVGVzdDo6U2VudFJlcXVlc3QpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVu
dHNbMl0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpGYWlsZWQpOwotICAgIGdfYXNzZXJ0
X2NtcGludChldmVudHNbM10sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpGaW5pc2hlZCk7
Ci0gICAgZXZlbnRzLmNsZWFyKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJSZXNvdXJjZVJl
c3BvbnNlKFNpbmdsZVJlc291cmNlTG9hZFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0g
ICAgLy8gTm8gY2FjaGVkIHJlc291cmNlOiBGaXJzdCBsb2FkLgotICAgIHRlc3QtPmxvYWRVUkko
a1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2phdmFzY3JpcHQuaHRtbCIpLmRhdGEoKSk7Ci0gICAg
V2ViS2l0VVJJUmVzcG9uc2UqIHJlc3BvbnNlID0gdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2Fk
RmluaXNoZWRBbmRSZXR1cm5VUklSZXNwb25zZSgpOwotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJr
aXRfdXJpX3Jlc3BvbnNlX2dldF9zdGF0dXNfY29kZShyZXNwb25zZSksID09LCBTT1VQX1NUQVRV
U19PSyk7Ci0KLSAgICAvLyBObyBjYWNoZWQgcmVzb3VyY2U6IFNlY29uZCBsb2FkLgotICAgIHRl
c3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2phdmFzY3JpcHQuaHRtbCIpLmRh
dGEoKSk7Ci0gICAgcmVzcG9uc2UgPSB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hl
ZEFuZFJldHVyblVSSVJlc3BvbnNlKCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF91cmlf
cmVzcG9uc2VfZ2V0X3N0YXR1c19jb2RlKHJlc3BvbnNlKSwgPT0sIFNPVVBfU1RBVFVTX09LKTsK
LQotICAgIC8vIE5vIGNhY2hlZCByZXNvdXJjZTogUmVsb2FkLgotICAgIHdlYmtpdF93ZWJfdmll
d19yZWxvYWQodGVzdC0+bV93ZWJWaWV3KTsKLSAgICByZXNwb25zZSA9IHRlc3QtPndhaXRVbnRp
bFJlc291cmNlTG9hZEZpbmlzaGVkQW5kUmV0dXJuVVJJUmVzcG9uc2UoKTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQod2Via2l0X3VyaV9yZXNwb25zZV9nZXRfc3RhdHVzX2NvZGUocmVzcG9uc2UpLCA9
PSwgU09VUF9TVEFUVVNfT0spOwotCi0gICAgLy8gQ2FjaGVkIHJlc291cmNlOiBGaXJzdCBsb2Fk
LgotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2ltYWdlLmh0bWwi
KS5kYXRhKCkpOwotICAgIHJlc3BvbnNlID0gdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmlu
aXNoZWRBbmRSZXR1cm5VUklSZXNwb25zZSgpOwotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRf
dXJpX3Jlc3BvbnNlX2dldF9zdGF0dXNfY29kZShyZXNwb25zZSksID09LCBTT1VQX1NUQVRVU19P
Syk7Ci0KLSAgICAvLyBDYWNoZWQgcmVzb3VyY2U6IFNlY29uZCBsb2FkLgotICAgIHRlc3QtPmxv
YWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2ltYWdlLmh0bWwiKS5kYXRhKCkpOwotICAg
IHJlc3BvbnNlID0gdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWRBbmRSZXR1cm5V
UklSZXNwb25zZSgpOwotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfdXJpX3Jlc3BvbnNlX2dl
dF9zdGF0dXNfY29kZShyZXNwb25zZSksID09LCBTT1VQX1NUQVRVU19PSyk7Ci0KLSAgICAvLyBD
YWNoZWQgcmVzb3VyY2U6IFJlbG9hZC4KLSAgICB3ZWJraXRfd2ViX3ZpZXdfcmVsb2FkKHRlc3Qt
Pm1fd2ViVmlldyk7Ci0gICAgcmVzcG9uc2UgPSB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRG
aW5pc2hlZEFuZFJldHVyblVSSVJlc3BvbnNlKCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHdlYmtp
dF91cmlfcmVzcG9uc2VfZ2V0X3N0YXR1c19jb2RlKHJlc3BvbnNlKSwgPT0sIFNPVVBfU1RBVFVT
X05PVF9NT0RJRklFRCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJSZXNvdXJjZU1pbWVUeXBl
KFNpbmdsZVJlc291cmNlTG9hZFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVz
dC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvamF2YXNjcmlwdC5odG1sIikuZGF0
YSgpKTsKLSAgICBXZWJLaXRVUklSZXNwb25zZSogcmVzcG9uc2UgPSB0ZXN0LT53YWl0VW50aWxS
ZXNvdXJjZUxvYWRGaW5pc2hlZEFuZFJldHVyblVSSVJlc3BvbnNlKCk7Ci0gICAgZ19hc3NlcnRf
Y21wc3RyKHdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0X21pbWVfdHlwZShyZXNwb25zZSksID09LCAi
dGV4dC9qYXZhc2NyaXB0Iik7Ci0KLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZv
clBhdGgoIi9pbWFnZS5odG1sIikuZGF0YSgpKTsKLSAgICByZXNwb25zZSA9IHRlc3QtPndhaXRV
bnRpbFJlc291cmNlTG9hZEZpbmlzaGVkQW5kUmV0dXJuVVJJUmVzcG9uc2UoKTsKLSAgICBnX2Fz
c2VydF9jbXBzdHIod2Via2l0X3VyaV9yZXNwb25zZV9nZXRfbWltZV90eXBlKHJlc3BvbnNlKSwg
PT0sICJpbWFnZS92bmQubWljcm9zb2Z0Lmljb24iKTsKLQotICAgIHRlc3QtPmxvYWRVUkkoa1Nl
cnZlci0+Z2V0VVJJRm9yUGF0aCgiL3JlZGlyZWN0ZWQtY3NzLmh0bWwiKS5kYXRhKCkpOwotICAg
IHJlc3BvbnNlID0gdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWRBbmRSZXR1cm5V
UklSZXNwb25zZSgpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfdXJpX3Jlc3BvbnNlX2dl
dF9taW1lX3R5cGUocmVzcG9uc2UpLCA9PSwgInRleHQvY3NzIik7Ci19Ci0KLXN0YXRpYyB2b2lk
IHRlc3RXZWJSZXNvdXJjZVN1Z2dlc3RlZEZpbGVuYW1lKFNpbmdsZVJlc291cmNlTG9hZFRlc3Qq
IHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRV
UklGb3JQYXRoKCIvamF2YXNjcmlwdC5odG1sIikuZGF0YSgpKTsKLSAgICBXZWJLaXRVUklSZXNw
b25zZSogcmVzcG9uc2UgPSB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZEFuZFJl
dHVyblVSSVJlc3BvbnNlKCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF91cmlfcmVzcG9u
c2VfZ2V0X3N1Z2dlc3RlZF9maWxlbmFtZShyZXNwb25zZSksID09LCAiSmF2YVNjcmlwdC5qcyIp
OwotCi0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvaW1hZ2UuaHRt
bCIpLmRhdGEoKSk7Ci0gICAgcmVzcG9uc2UgPSB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRG
aW5pc2hlZEFuZFJldHVyblVSSVJlc3BvbnNlKCk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF91cmlf
cmVzcG9uc2VfZ2V0X3N1Z2dlc3RlZF9maWxlbmFtZShyZXNwb25zZSkpOwotfQotCi1jbGFzcyBS
ZXNvdXJjZVVSSVRyYWNraW5nVGVzdDogcHVibGljIFNpbmdsZVJlc291cmNlTG9hZFRlc3Qgewot
cHVibGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoUmVzb3VyY2VVUklUcmFja2luZ1Rl
c3QpOwotCi0gICAgUmVzb3VyY2VVUklUcmFja2luZ1Rlc3QoKQotICAgICAgICA6IFNpbmdsZVJl
c291cmNlTG9hZFRlc3QoKQotICAgIHsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCB1cmlDaGFu
Z2VkKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgR1BhcmFtU3BlYyosIFJlc291cmNlVVJJ
VHJhY2tpbmdUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgZ19hc3NlcnQocmVzb3VyY2UgPT0g
dGVzdC0+bV9yZXNvdXJjZS5nZXQoKSk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXN0LT5t
X2FjdGl2ZVVSSS5kYXRhKCksICE9LCB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF91cmkodGVzdC0+
bV9yZXNvdXJjZS5nZXQoKSkpOwotICAgICAgICB0ZXN0LT5tX2FjdGl2ZVVSSSA9IHdlYmtpdF93
ZWJfcmVzb3VyY2VfZ2V0X3VyaSh0ZXN0LT5tX3Jlc291cmNlLmdldCgpKTsKLSAgICB9Ci0KLSAg
ICB2b2lkIHJlc291cmNlTG9hZFN0YXJ0ZWQoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBX
ZWJLaXRVUklSZXF1ZXN0KiByZXF1ZXN0KQotICAgIHsKLSAgICAgICAgaWYgKHJlc291cmNlID09
IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9yZXNvdXJjZShtX3dlYlZpZXcpKQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIG1fcmVzb3VyY2UgPSByZXNvdXJjZTsKLSAgICAgICAgbV9h
Y3RpdmVVUkkgPSB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF91cmkocmVzb3VyY2UpOwotICAgICAg
ICBjaGVja0FjdGl2ZVVSSSgiL3JlZGlyZWN0ZWQuY3NzIik7Ci0gICAgICAgIGdfYXNzZXJ0X2Nt
cHN0cihtX2FjdGl2ZVVSSS5kYXRhKCksID09LCB3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3VyaShy
ZXF1ZXN0KSk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QocmVzb3VyY2UsICJub3RpZnk6OnVy
aSIsIEdfQ0FMTEJBQ0sodXJpQ2hhbmdlZCksIHRoaXMpOwotICAgIH0KLQotICAgIHZvaWQgcmVz
b3VyY2VTZW50UmVxdWVzdChXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIFdlYktpdFVSSVJl
cXVlc3QqIHJlcXVlc3QsIFdlYktpdFVSSVJlc3BvbnNlKiByZWRpcmVjdFJlc3BvbnNlKQotICAg
IHsKLSAgICAgICAgaWYgKHJlc291cmNlICE9IG1fcmVzb3VyY2UpCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgaWYgKHJlZGlyZWN0UmVzcG9uc2UpCi0gICAgICAgICAgICBjaGVja0Fj
dGl2ZVVSSSgiL3NpbXBsZS1zdHlsZS5jc3MiKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
Y2hlY2tBY3RpdmVVUkkoIi9yZWRpcmVjdGVkLmNzcyIpOwotICAgICAgICBnX2Fzc2VydF9jbXBz
dHIobV9hY3RpdmVVUkkuZGF0YSgpLCA9PSwgd2Via2l0X3VyaV9yZXF1ZXN0X2dldF91cmkocmVx
dWVzdCkpOwotICAgIH0KLQotICAgIHZvaWQgcmVzb3VyY2VSZWNlaXZlZFJlc3BvbnNlKFdlYktp
dFdlYlJlc291cmNlKiByZXNvdXJjZSkKLSAgICB7Ci0gICAgICAgIGlmIChyZXNvdXJjZSAhPSBt
X3Jlc291cmNlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGNoZWNrQWN0aXZlVVJJ
KCIvc2ltcGxlLXN0eWxlLmNzcyIpOwotICAgIH0KLQotICAgIHZvaWQgcmVzb3VyY2VSZWNlaXZl
ZERhdGEoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBndWludDY0IGJ5dGVzUmVjZWl2ZWQp
Ci0gICAgewotICAgIH0KLQotICAgIHZvaWQgcmVzb3VyY2VGaW5pc2hlZChXZWJLaXRXZWJSZXNv
dXJjZSogcmVzb3VyY2UpCi0gICAgewotICAgICAgICBpZiAocmVzb3VyY2UgPT0gbV9yZXNvdXJj
ZSkKLSAgICAgICAgICAgIGNoZWNrQWN0aXZlVVJJKCIvc2ltcGxlLXN0eWxlLmNzcyIpOwotICAg
ICAgICBSZXNvdXJjZXNUZXN0OjpyZXNvdXJjZUZpbmlzaGVkKHJlc291cmNlKTsKLSAgICB9Ci0K
LSAgICB2b2lkIHJlc291cmNlRmFpbGVkKFdlYktpdFdlYlJlc291cmNlKiwgR0Vycm9yKikKLSAg
ICB7Ci0gICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0gICAgfQotCi0gICAgQ1N0cmlu
ZyBtX2FjdGl2ZVVSSTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGNoZWNrQWN0aXZlVVJJKGNvbnN0
IGNoYXIqIHVyaSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVF9DTVBfQ1NUUklORyhtX2FjdGl2ZVVS
SSwgPT0sIGtTZXJ2ZXItPmdldFVSSUZvclBhdGgodXJpKSk7Ci0gICAgfQotfTsKLQotc3RhdGlj
IHZvaWQgdGVzdFdlYlJlc291cmNlQWN0aXZlVVJJKFJlc291cmNlVVJJVHJhY2tpbmdUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJ
Rm9yUGF0aCgiL3JlZGlyZWN0ZWQtY3NzLmh0bWwiKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRV
bnRpbFJlc291cmNlTG9hZEZpbmlzaGVkKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJSZXNv
dXJjZUdldERhdGEoUmVzb3VyY2VzVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0
ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi8iKS5kYXRhKCkpOwotICAgIC8v
IEZJWE1FOiB0aGlzIHNob3VsZCBiZSA0IGluc3RlYWQgb2YgMywgYnV0IHdlIGRvbid0IGdldCB0
aGUgY3NzIGltYWdlIHJlc291cmNlCi0gICAgLy8gZHVlIHRvIGJ1ZyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg1MTAuCi0gICAgdGVzdC0+d2FpdFVudGlsUmVzb3Vy
Y2VzTG9hZGVkKDMpOwotCi0gICAgV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlID0gd2Via2l0
X3dlYl92aWV3X2dldF9tYWluX3Jlc291cmNlKHRlc3QtPm1fd2ViVmlldyk7Ci0gICAgZ19hc3Nl
cnQocmVzb3VyY2UpOwotICAgIHRlc3QtPmNoZWNrUmVzb3VyY2VEYXRhKHJlc291cmNlKTsKLQot
ICAgIEdMaXN0KiBzdWJyZXNvdXJjZXMgPSB0ZXN0LT5zdWJyZXNvdXJjZXMoKTsKLSAgICBmb3Ig
KEdMaXN0KiBpdGVtID0gc3VicmVzb3VyY2VzOyBpdGVtOyBpdGVtID0gZ19saXN0X25leHQoaXRl
bSkpCi0gICAgICAgIHRlc3QtPmNoZWNrUmVzb3VyY2VEYXRhKFdFQktJVF9XRUJfUkVTT1VSQ0Uo
aXRlbS0+ZGF0YSkpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1Jlc291cmNlc0hpc3Rv
cnlDYWNoZShTaW5nbGVSZXNvdXJjZUxvYWRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewot
ICAgIENTdHJpbmcgamF2YXNjcmlwdFVSSSA9IGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9qYXZh
c2NyaXB0Lmh0bWwiKTsKLSAgICB0ZXN0LT5sb2FkVVJJKGphdmFzY3JpcHRVUkkuZGF0YSgpKTsK
LSAgICB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZCgpOwotICAgIFdlYktpdFdl
YlJlc291cmNlKiByZXNvdXJjZSA9IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9yZXNvdXJjZSh0
ZXN0LT5tX3dlYlZpZXcpOwotICAgIGdfYXNzZXJ0KHJlc291cmNlKTsKLSAgICBnX2Fzc2VydF9j
bXBzdHIod2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJpKHJlc291cmNlKSwgPT0sIGphdmFzY3Jp
cHRVUkkuZGF0YSgpKTsKLQotICAgIENTdHJpbmcgc2ltcGxlU3R5bGVDU1NVUkkgPSBrU2VydmVy
LT5nZXRVUklGb3JQYXRoKCIvc2ltcGxlLXN0eWxlLWNzcy5odG1sIik7Ci0gICAgdGVzdC0+bG9h
ZFVSSShzaW1wbGVTdHlsZUNTU1VSSS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbFJlc291
cmNlTG9hZEZpbmlzaGVkKCk7Ci0gICAgcmVzb3VyY2UgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21h
aW5fcmVzb3VyY2UodGVzdC0+bV93ZWJWaWV3KTsKLSAgICBnX2Fzc2VydChyZXNvdXJjZSk7Ci0g
ICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaShyZXNvdXJjZSks
ID09LCBzaW1wbGVTdHlsZUNTU1VSSS5kYXRhKCkpOwotCi0gICAgdGVzdC0+Z29CYWNrKCk7Ci0g
ICAgdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWQoKTsKLSAgICByZXNvdXJjZSA9
IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9yZXNvdXJjZSh0ZXN0LT5tX3dlYlZpZXcpOwotICAg
IGdfYXNzZXJ0KHJlc291cmNlKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9yZXNv
dXJjZV9nZXRfdXJpKHJlc291cmNlKSwgPT0sIGphdmFzY3JpcHRVUkkuZGF0YSgpKTsKLQotICAg
IHRlc3QtPmdvRm9yd2FyZCgpOwotICAgIHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlz
aGVkKCk7Ci0gICAgcmVzb3VyY2UgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2Uo
dGVzdC0+bV93ZWJWaWV3KTsKLSAgICBnX2Fzc2VydChyZXNvdXJjZSk7Ci0gICAgZ19hc3NlcnRf
Y21wc3RyKHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaShyZXNvdXJjZSksID09LCBzaW1wbGVT
dHlsZUNTU1VSSS5kYXRhKCkpOwotfQotCi1jbGFzcyBTZW5kUmVxdWVzdFRlc3Q6IHB1YmxpYyBT
aW5nbGVSZXNvdXJjZUxvYWRUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhU
VVJFKFNlbmRSZXF1ZXN0VGVzdCk7Ci0KLSAgICB2b2lkIHJlc291cmNlU2VudFJlcXVlc3QoV2Vi
S2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBXZWJLaXRVUklSZXF1ZXN0KiByZXF1ZXN0LCBXZWJL
aXRVUklSZXNwb25zZSogcmVkaXJlY3RSZXNwb25zZSkKLSAgICB7Ci0gICAgICAgIGlmIChyZXNv
dXJjZSAhPSBtX3Jlc291cmNlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChy
ZWRpcmVjdFJlc3BvbnNlKQotICAgICAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF91cmlf
cmVxdWVzdF9nZXRfdXJpKHJlcXVlc3QpLCA9PSwgbV9leHBlY3RlZE5ld1Jlc291cmNlVVJJQWZ0
ZXJSZWRpcmVjdGlvbi5kYXRhKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X3VyaV9yZXF1ZXN0X2dldF91cmkocmVxdWVzdCksID09LCBtX2V4cGVj
dGVkTmV3UmVzb3VyY2VVUkkuZGF0YSgpKTsKLSAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtp
dF91cmlfcmVxdWVzdF9nZXRfdXJpKHJlcXVlc3QpLCA9PSwgd2Via2l0X3dlYl9yZXNvdXJjZV9n
ZXRfdXJpKHJlc291cmNlKSk7Ci0KLSAgICAgICAgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6cmVz
b3VyY2VTZW50UmVxdWVzdChyZXNvdXJjZSwgcmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7Ci0g
ICAgfQotCi0gICAgdm9pZCByZXNvdXJjZUZhaWxlZChXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3Vy
Y2UsIEdFcnJvciogZXJyb3IpCi0gICAgewotICAgICAgICBpZiAocmVzb3VyY2UgIT0gbV9yZXNv
dXJjZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Vi
a2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJpKHJlc291cmNlKSwgPT0sIG1fZXhwZWN0ZWRDYW5jZWxs
ZWRSZXNvdXJjZVVSSS5kYXRhKCkpOwotICAgICAgICBnX2Fzc2VydF9lcnJvcihlcnJvciwgV0VC
S0lUX05FVFdPUktfRVJST1IsIFdFQktJVF9ORVRXT1JLX0VSUk9SX0NBTkNFTExFRCk7Ci0KLSAg
ICAgICAgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6cmVzb3VyY2VGYWlsZWQocmVzb3VyY2UsIGVy
cm9yKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldEV4cGVjdGVkTmV3UmVzb3VyY2VVUkkoY29uc3Qg
Q1N0cmluZyYgdXJpKQotICAgIHsKLSAgICAgICAgbV9leHBlY3RlZE5ld1Jlc291cmNlVVJJID0g
dXJpOwotICAgIH0KLQotICAgIHZvaWQgc2V0RXhwZWN0ZWRDYW5jZWxsZWRSZXNvdXJjZVVSSShj
b25zdCBDU3RyaW5nJiB1cmkpCi0gICAgewotICAgICAgICBtX2V4cGVjdGVkQ2FuY2VsbGVkUmVz
b3VyY2VVUkkgPSB1cmk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRFeHBlY3RlZE5ld1Jlc291cmNl
VVJJQWZ0ZXJSZWRpcmVjdGlvbihjb25zdCBDU3RyaW5nJiB1cmkpCi0gICAgewotICAgICAgICBt
X2V4cGVjdGVkTmV3UmVzb3VyY2VVUklBZnRlclJlZGlyZWN0aW9uID0gdXJpOwotICAgIH0KLQot
ICAgIENTdHJpbmcgbV9leHBlY3RlZE5ld1Jlc291cmNlVVJJOwotICAgIENTdHJpbmcgbV9leHBl
Y3RlZENhbmNlbGxlZFJlc291cmNlVVJJOwotICAgIENTdHJpbmcgbV9leHBlY3RlZE5ld1Jlc291
cmNlVVJJQWZ0ZXJSZWRpcmVjdGlvbjsKLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJSZXNvdXJj
ZVNlbmRSZXF1ZXN0KFNlbmRSZXF1ZXN0VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAg
ICB0ZXN0LT5zZXRFeHBlY3RlZE5ld1Jlc291cmNlVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgo
Ii9qYXZhc2NyaXB0LmpzIikpOwotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9y
UGF0aCgicmVsYXRpdmUtamF2YXNjcmlwdC5odG1sIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0
VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZCgpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fcmVzb3Vy
Y2UpOwotCi0gICAgVmVjdG9yPFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OkxvYWRFdmVudHM+JiBl
dmVudHMgPSB0ZXN0LT5tX2xvYWRFdmVudHM7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5z
aXplKCksID09LCA1KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgU2luZ2xl
UmVzb3VyY2VMb2FkVGVzdDo6U3RhcnRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sx
XSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlNlbnRSZXF1ZXN0KTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6UmVjZWl2ZWRS
ZXNwb25zZSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1szXSwgPT0sIFNpbmdsZVJlc291
cmNlTG9hZFRlc3Q6OlJlY2VpdmVkRGF0YSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1s0
XSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OkZpbmlzaGVkKTsKLSAgICBldmVudHMuY2xl
YXIoKTsKLQotICAgIC8vIENhbmNlbCByZXF1ZXN0LgotICAgIHRlc3QtPnNldEV4cGVjdGVkQ2Fu
Y2VsbGVkUmVzb3VyY2VVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2NhbmNlbC10aGlzLmpz
IikpOwotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3Jlc291cmNl
LXRvLWNhbmNlbC5odG1sIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxv
YWRGaW5pc2hlZCgpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fcmVzb3VyY2UpOwotCi0gICAgZ19h
c3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAzKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
ZXZlbnRzWzBdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6U3RhcnRlZCk7Ci0gICAgZ19h
c3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OkZhaWxl
ZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIFNpbmdsZVJlc291cmNlTG9h
ZFRlc3Q6OkZpbmlzaGVkKTsKLSAgICBldmVudHMuY2xlYXIoKTsKLQotICAgIC8vIFVSSSBjaGFu
Z2VkIGFmdGVyIGEgcmVkaXJlY3QuCi0gICAgdGVzdC0+c2V0RXhwZWN0ZWROZXdSZXNvdXJjZVVS
SShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvcmVkaXJlY3RlZC5qcyIpKTsKLSAgICB0ZXN0LT5z
ZXRFeHBlY3RlZE5ld1Jlc291cmNlVVJJQWZ0ZXJSZWRpcmVjdGlvbihrU2VydmVyLT5nZXRVUklG
b3JQYXRoKCIvamF2YXNjcmlwdC5qcyIpKTsKLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdl
dFVSSUZvclBhdGgoInJlZGlyZWN0ZWQtamF2YXNjcmlwdC5odG1sIikuZGF0YSgpKTsKLSAgICB0
ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZCgpOwotICAgIGdfYXNzZXJ0KHRlc3Qt
Pm1fcmVzb3VyY2UpOwotCi0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCA2
KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2Fk
VGVzdDo6U3RhcnRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIFNpbmds
ZVJlc291cmNlTG9hZFRlc3Q6OlNlbnRSZXF1ZXN0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZl
bnRzWzJdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6UmVkaXJlY3RlZCk7Ci0gICAgZ19h
c3NlcnRfY21waW50KGV2ZW50c1szXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlJlY2Vp
dmVkUmVzcG9uc2UpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbNF0sID09LCBTaW5nbGVS
ZXNvdXJjZUxvYWRUZXN0OjpSZWNlaXZlZERhdGEpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVu
dHNbNV0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpGaW5pc2hlZCk7Ci0gICAgZXZlbnRz
LmNsZWFyKCk7Ci0KLSAgICAvLyBDYW5jZWwgYWZ0ZXIgYSByZWRpcmVjdC4KLSAgICB0ZXN0LT5z
ZXRFeHBlY3RlZE5ld1Jlc291cmNlVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9yZWRpcmVj
dGVkLXRvLWNhbmNlbC5qcyIpKTsKLSAgICB0ZXN0LT5zZXRFeHBlY3RlZENhbmNlbGxlZFJlc291
cmNlVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9yZWRpcmVjdGVkLXRvLWNhbmNlbC5qcyIp
KTsKLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9yZWRpcmVjdGVk
LXRvLWNhbmNlbC5odG1sIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxv
YWRGaW5pc2hlZCgpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fcmVzb3VyY2UpOwotCi0gICAgZ19h
c3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCA0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
ZXZlbnRzWzBdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6U3RhcnRlZCk7Ci0gICAgZ19h
c3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlNlbnRS
ZXF1ZXN0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgU2luZ2xlUmVzb3Vy
Y2VMb2FkVGVzdDo6RmFpbGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzNdLCA9PSwg
U2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6RmluaXNoZWQpOwotICAgIGV2ZW50cy5jbGVhcigpOwot
fQotCi1zdGF0aWMgdm9pZCBhZGRDYWNoZUhUVFBIZWFkZXJzVG9SZXNwb25zZShTb3VwTWVzc2Fn
ZSogbWVzc2FnZSkKLXsKLSAgICAvLyBUaGUgYWN0dWFsIGRhdGUgZG9lc24ndCByZWFsbHkgbWF0
dGVyLgotICAgIFNvdXBEYXRlKiBzb3VwRGF0ZSA9IHNvdXBfZGF0ZV9uZXdfZnJvbV9ub3coMCk7
Ci0gICAgR093blB0cjxjaGFyPiBkYXRlKHNvdXBfZGF0ZV90b19zdHJpbmcoc291cERhdGUsIFNP
VVBfREFURV9IVFRQKSk7Ci0gICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1lc3NhZ2Ut
PnJlc3BvbnNlX2hlYWRlcnMsICJMYXN0LU1vZGlmaWVkIiwgZGF0ZS5nZXQoKSk7Ci0gICAgc291
cF9kYXRlX2ZyZWUoc291cERhdGUpOwotICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZCht
ZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiQ2FjaGUtY29udHJvbCIsICJwdWJsaWMsIG1heC1h
Z2U9MzE1MzYwMDAiKTsKLSAgICBzb3VwRGF0ZSA9IHNvdXBfZGF0ZV9uZXdfZnJvbV9ub3coMzYw
MCk7Ci0gICAgZGF0ZS5zZXQoc291cF9kYXRlX3RvX3N0cmluZyhzb3VwRGF0ZSwgU09VUF9EQVRF
X0hUVFApKTsKLSAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobWVzc2FnZS0+cmVzcG9u
c2VfaGVhZGVycywgIkV4cGlyZXMiLCBkYXRlLmdldCgpKTsKLSAgICBzb3VwX2RhdGVfZnJlZShz
b3VwRGF0ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNl
cnZlciwgU291cE1lc3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUq
LCBTb3VwQ2xpZW50Q29udGV4dCosIGdwb2ludGVyKQotewotICAgIGlmIChtZXNzYWdlLT5tZXRo
b2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVz
KG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRV
U19PSyk7Ci0KLSAgICBpZiAoc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X29uZShtZXNzYWdlLT5y
ZXF1ZXN0X2hlYWRlcnMsICJJZi1Nb2RpZmllZC1TaW5jZSIpKSB7Ci0gICAgICAgIHNvdXBfbWVz
c2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9NT0RJRklFRCk7Ci0gICAg
ICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvIikp
IHsKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2Jv
ZHksIFNPVVBfTUVNT1JZX1NUQVRJQywga0luZGV4SHRtbCwgc3RybGVuKGtJbmRleEh0bWwpKTsK
LSAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvamF2YXNjcmlwdC5odG1sIikpIHsK
LSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGphdmFzY3JpcHRIdG1sID0gIjxodG1sPjxoZWFk
PjxzY3JpcHQgbGFuZ3VhZ2U9J2phdmFzY3JpcHQnIHNyYz0nL2phdmFzY3JpcHQuanMnPjwvc2Ny
aXB0PjwvaGVhZD48Ym9keT48L2JvZHk+PC9odG1sPiI7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9i
b2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGph
dmFzY3JpcHRIdG1sLCBzdHJsZW4oamF2YXNjcmlwdEh0bWwpKTsKLSAgICB9IGVsc2UgaWYgKGdf
c3RyX2VxdWFsKHBhdGgsICIvaW1hZ2UuaHRtbCIpKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBpbWFnZUhUTUwgPSAiPGh0bWw+PGJvZHk+PGltZyBzcmM9Jy9ibGFuay5pY28nPjwvaW1n
PjwvYm9keT48L2h0bWw+IjsKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3Nh
Z2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgaW1hZ2VIVE1MLCBzdHJsZW4o
aW1hZ2VIVE1MKSk7Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3JlZGlyZWN0
ZWQtY3NzLmh0bWwiKSkgewotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogcmVkaXJlY3RlZENT
U0h0bWwgPSAiPGh0bWw+PGhlYWQ+PGxpbmsgcmVsPSdzdHlsZXNoZWV0JyBocmVmPScvcmVkaXJl
Y3RlZC5jc3MnIHR5cGU9J3RleHQvY3NzJz48L2hlYWQ+PGJvZHk+PC9odG1sPiI7Ci0gICAgICAg
IHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01F
TU9SWV9TVEFUSUMsIHJlZGlyZWN0ZWRDU1NIdG1sLCBzdHJsZW4ocmVkaXJlY3RlZENTU0h0bWwp
KTsKLSAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvaW52YWxpZC1jc3MuaHRtbCIp
KSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBpbnZhbGlkQ1NTSHRtbCA9ICI8aHRtbD48
aGVhZD48bGluayByZWw9J3N0eWxlc2hlZXQnIGhyZWY9Jy9pbnZhbGlkLmNzcycgdHlwZT0ndGV4
dC9jc3MnPjwvaGVhZD48Ym9keT48L2h0bWw+IjsKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlf
YXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgaW52YWxp
ZENTU0h0bWwsIHN0cmxlbihpbnZhbGlkQ1NTSHRtbCkpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJf
ZXF1YWwocGF0aCwgIi9zaW1wbGUtc3R5bGUtY3NzLmh0bWwiKSkgewotICAgICAgICBzdGF0aWMg
Y29uc3QgY2hhciogc2ltcGxlU3R5bGVDU1NIdG1sID0gIjxodG1sPjxoZWFkPjxsaW5rIHJlbD0n
c3R5bGVzaGVldCcgaHJlZj0nL3NpbXBsZS1zdHlsZS5jc3MnIHR5cGU9J3RleHQvY3NzJz48L2hl
YWQ+PGJvZHk+PC9odG1sPiI7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNz
YWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIHNpbXBsZVN0eWxlQ1NTSHRt
bCwgc3RybGVuKHNpbXBsZVN0eWxlQ1NTSHRtbCkpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1
YWwocGF0aCwgIi9zdHlsZS5jc3MiKSkgewotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBl
bmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBrU3R5bGVDU1Ms
IHN0cmxlbihrU3R5bGVDU1MpKTsKLSAgICAgICAgYWRkQ2FjaGVIVFRQSGVhZGVyc1RvUmVzcG9u
c2UobWVzc2FnZSk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChtZXNzYWdl
LT5yZXNwb25zZV9oZWFkZXJzLCAiQ29udGVudC1UeXBlIiwgInRleHQvY3NzIik7Ci0gICAgfSBl
bHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2phdmFzY3JpcHQuanMiKSkgewotICAgICAgICBz
b3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1P
UllfU1RBVElDLCBrSmF2YXNjcmlwdCwgc3RybGVuKGtKYXZhc2NyaXB0KSk7Ci0gICAgICAgIHNv
dXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiQ29u
dGVudC1UeXBlIiwgInRleHQvamF2YXNjcmlwdCIpOwotICAgICAgICBzb3VwX21lc3NhZ2VfaGVh
ZGVyc19hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIkNvbnRlbnQtRGlzcG9zaXRp
b24iLCAiZmlsZW5hbWU9SmF2YVNjcmlwdC5qcyIpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1
YWwocGF0aCwgIi9yZWxhdGl2ZS1qYXZhc2NyaXB0Lmh0bWwiKSkgewotICAgICAgICBzdGF0aWMg
Y29uc3QgY2hhciogamF2YXNjcmlwdFJlbGF0aXZlSFRNTCA9ICI8aHRtbD48aGVhZD48c2NyaXB0
IGxhbmd1YWdlPSdqYXZhc2NyaXB0JyBzcmM9J3JlbW92ZS10aGlzL2phdmFzY3JpcHQuanMnPjwv
c2NyaXB0PjwvaGVhZD48Ym9keT48L2JvZHk+PC9odG1sPiI7Ci0gICAgICAgIHNvdXBfbWVzc2Fn
ZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMs
IGphdmFzY3JpcHRSZWxhdGl2ZUhUTUwsIHN0cmxlbihqYXZhc2NyaXB0UmVsYXRpdmVIVE1MKSk7
Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3Jlc291cmNlLXRvLWNhbmNlbC5o
dG1sIikpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHJlc291cmNlVG9DYW5jZWxIVE1M
ID0gIjxodG1sPjxoZWFkPjxzY3JpcHQgbGFuZ3VhZ2U9J2phdmFzY3JpcHQnIHNyYz0nY2FuY2Vs
LXRoaXMuanMnPjwvc2NyaXB0PjwvaGVhZD48Ym9keT48L2JvZHk+PC9odG1sPiI7Ci0gICAgICAg
IHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01F
TU9SWV9TVEFUSUMsIHJlc291cmNlVG9DYW5jZWxIVE1MLCBzdHJsZW4ocmVzb3VyY2VUb0NhbmNl
bEhUTUwpKTsKLSAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvcmVkaXJlY3RlZC1q
YXZhc2NyaXB0Lmh0bWwiKSkgewotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogamF2YXNjcmlw
dFJlbGF0aXZlSFRNTCA9ICI8aHRtbD48aGVhZD48c2NyaXB0IGxhbmd1YWdlPSdqYXZhc2NyaXB0
JyBzcmM9Jy9yZWRpcmVjdGVkLmpzJz48L3NjcmlwdD48L2hlYWQ+PGJvZHk+PC9ib2R5PjwvaHRt
bD4iOwotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2Vf
Ym9keSwgU09VUF9NRU1PUllfU1RBVElDLCBqYXZhc2NyaXB0UmVsYXRpdmVIVE1MLCBzdHJsZW4o
amF2YXNjcmlwdFJlbGF0aXZlSFRNTCkpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0
aCwgIi9yZWRpcmVjdGVkLXRvLWNhbmNlbC5odG1sIikpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0
IGNoYXIqIGphdmFzY3JpcHRSZWxhdGl2ZUhUTUwgPSAiPGh0bWw+PGhlYWQ+PHNjcmlwdCBsYW5n
dWFnZT0namF2YXNjcmlwdCcgc3JjPScvcmVkaXJlY3RlZC10by1jYW5jZWwuanMnPjwvc2NyaXB0
PjwvaGVhZD48Ym9keT48L2JvZHk+PC9odG1sPiI7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5
X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGphdmFz
Y3JpcHRSZWxhdGl2ZUhUTUwsIHN0cmxlbihqYXZhc2NyaXB0UmVsYXRpdmVIVE1MKSk7Ci0gICAg
fSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2JsYW5rLmljbyIpKSB7Ci0gICAgICAgIEdP
d25QdHI8Y2hhcj4gZmlsZVBhdGgoZ19idWlsZF9maWxlbmFtZShUZXN0OjpnZXRXZWJLaXQxVGVz
dFJlc291Y2VzRGlyKCkuZGF0YSgpLCBwYXRoLCBOVUxMKSk7Ci0gICAgICAgIGNoYXIqIGNvbnRl
bnRzOwotICAgICAgICBnc2l6ZSBjb250ZW50c0xlbmd0aDsKLSAgICAgICAgZ19maWxlX2dldF9j
b250ZW50cyhmaWxlUGF0aC5nZXQoKSwgJmNvbnRlbnRzLCAmY29udGVudHNMZW5ndGgsIDApOwot
ICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwg
U09VUF9NRU1PUllfVEFLRSwgY29udGVudHMsIGNvbnRlbnRzTGVuZ3RoKTsKLSAgICAgICAgYWRk
Q2FjaGVIVFRQSGVhZGVyc1RvUmVzcG9uc2UobWVzc2FnZSk7Ci0gICAgICAgIHNvdXBfbWVzc2Fn
ZV9oZWFkZXJzX2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiQ29udGVudC1UeXBl
IiwgImltYWdlL3ZuZC5taWNyb3NvZnQuaWNvbiIpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1
YWwocGF0aCwgIi9zaW1wbGUtc3R5bGUuY3NzIikpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNo
YXIqIHNpbXBsZUNTUyA9Ci0gICAgICAgICAgICAiYm9keSB7IgotICAgICAgICAgICAgIiAgICBt
YXJnaW46IDBweDsiCi0gICAgICAgICAgICAiICAgIHBhZGRpbmc6IDBweDsiCi0gICAgICAgICAg
ICAifSI7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25z
ZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIHNpbXBsZUNTUywgc3RybGVuKHNpbXBsZUNTUykp
OwotICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2Vf
aGVhZGVycywgIkNvbnRlbnQtVHlwZSIsICJ0ZXh0L2NzcyIpOwotICAgIH0gZWxzZSBpZiAoZ19z
dHJfZXF1YWwocGF0aCwgIi9yZWRpcmVjdGVkLmNzcyIpKSB7Ci0gICAgICAgIHNvdXBfbWVzc2Fn
ZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX01PVkVEX1BFUk1BTkVOVExZKTsKLSAg
ICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRl
cnMsICJMb2NhdGlvbiIsICIvc2ltcGxlLXN0eWxlLmNzcyIpOwotICAgIH0gZWxzZSBpZiAoZ19z
dHJfZXF1YWwocGF0aCwgIi9yZWRpcmVjdGVkLmpzIikpIHsKLSAgICAgICAgc291cF9tZXNzYWdl
X3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTU9WRURfUEVSTUFORU5UTFkpOwotICAg
ICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVy
cywgIkxvY2F0aW9uIiwgIi9yZW1vdmUtdGhpcy9qYXZhc2NyaXB0LmpzIik7Ci0gICAgfSBlbHNl
IGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3JlZGlyZWN0ZWQtdG8tY2FuY2VsLmpzIikpIHsKLSAg
ICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTU9WRURf
UEVSTUFORU5UTFkpOwotICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobWVzc2Fn
ZS0+cmVzcG9uc2VfaGVhZGVycywgIkxvY2F0aW9uIiwgIi9jYW5jZWwtdGhpcy5qcyIpOwotICAg
IH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9pbnZhbGlkLmNzcyIpKQotICAgICAgICBz
b3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19DQU5UX0NPTk5FQ1Qp
OwotICAgIGVsc2UKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09V
UF9TVEFUVVNfTk9UX0ZPVU5EKTsKLSAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNz
YWdlLT5yZXNwb25zZV9ib2R5KTsKLX0KLQotdm9pZCBiZWZvcmVBbGwoKQotewotICAgIGtTZXJ2
ZXIgPSBuZXcgV2ViS2l0VGVzdFNlcnZlcigpOwotICAgIGtTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxs
YmFjayk7Ci0KLSAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3dlYl9leHRlbnNpb25zX2RpcmVj
dG9yeSh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSwgV0VCS0lUX1RFU1RfV0VCX0VY
VEVOU0lPTlNfRElSKTsKLQotICAgIFJlc291cmNlc1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIs
ICJyZXNvdXJjZXMiLCB0ZXN0V2ViVmlld1Jlc291cmNlcyk7Ci0gICAgU2luZ2xlUmVzb3VyY2VM
b2FkVGVzdDo6YWRkKCJXZWJLaXRXZWJSZXNvdXJjZSIsICJsb2FkaW5nIiwgdGVzdFdlYlJlc291
cmNlTG9hZGluZyk7Ci0gICAgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6YWRkKCJXZWJLaXRXZWJS
ZXNvdXJjZSIsICJyZXNwb25zZSIsIHRlc3RXZWJSZXNvdXJjZVJlc3BvbnNlKTsKLSAgICBTaW5n
bGVSZXNvdXJjZUxvYWRUZXN0OjphZGQoIldlYktpdFdlYlJlc291cmNlIiwgIm1pbWUtdHlwZSIs
IHRlc3RXZWJSZXNvdXJjZU1pbWVUeXBlKTsKLSAgICBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0Ojph
ZGQoIldlYktpdFdlYlJlc291cmNlIiwgInN1Z2dlc3RlZC1maWxlbmFtZSIsIHRlc3RXZWJSZXNv
dXJjZVN1Z2dlc3RlZEZpbGVuYW1lKTsKLSAgICBSZXNvdXJjZVVSSVRyYWNraW5nVGVzdDo6YWRk
KCJXZWJLaXRXZWJSZXNvdXJjZSIsICJhY3RpdmUtdXJpIiwgdGVzdFdlYlJlc291cmNlQWN0aXZl
VVJJKTsKLSAgICBSZXNvdXJjZXNUZXN0OjphZGQoIldlYktpdFdlYlJlc291cmNlIiwgImdldC1k
YXRhIiwgdGVzdFdlYlJlc291cmNlR2V0RGF0YSk7Ci0gICAgU2luZ2xlUmVzb3VyY2VMb2FkVGVz
dDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImhpc3RvcnktY2FjaGUiLCB0ZXN0V2ViVmlld1Jlc291
cmNlc0hpc3RvcnlDYWNoZSk7Ci0gICAgU2VuZFJlcXVlc3RUZXN0OjphZGQoIldlYktpdFdlYlBh
Z2UiLCAic2VuZC1yZXF1ZXN0IiwgdGVzdFdlYlJlc291cmNlU2VuZFJlcXVlc3QpOwotfQotCi12
b2lkIGFmdGVyQWxsKCkKLXsKLSAgICBkZWxldGUga1NlcnZlcjsKLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RTU0wuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFNTTC5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGUzMTgwYzUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFNTTC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwy
OTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJMb2FkVHJhY2tpbmdUZXN0LmgiCi0jaW5jbHVkZSAi
V2ViS2l0VGVzdFNlcnZlci5oIgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLQotc3RhdGljIFdlYktp
dFRlc3RTZXJ2ZXIqIGtIdHRwc1NlcnZlcjsKLXN0YXRpYyBXZWJLaXRUZXN0U2VydmVyKiBrSHR0
cFNlcnZlcjsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGluZGV4SFRNTCA9ICI8aHRtbD48Ym9keT5U
ZXN0aW5nIFdlYktpdDJHVEsrIFNTTDwvYm9keT48L2h0bWxsPiI7Ci1zdGF0aWMgY29uc3QgY2hh
ciogaW5zZWN1cmVDb250ZW50SFRNTCA9ICI8aHRtbD48c2NyaXB0IHNyYz1cIiVzXCI+PC9zY3Jp
cHQ+PGJvZHk+PHA+VGV4dCArIGltYWdlIDxpbWcgc3JjPVwiJXNcIiBhbGlnbj1cInJpZ2h0XCIv
PjwvcD48L2JvZHk+PC9odG1sPiI7Ci1zdGF0aWMgY29uc3QgY2hhciBUTFNFeHBlY3RlZFN1Y2Nl
c3NUaXRsZVtdID0gIldlYktpdDJHdGsrIFRMUyBwZXJtaXNzaW9uIHRlc3QiOwotc3RhdGljIGNv
bnN0IGNoYXIgVExTU3VjY2Vzc0hUTUxTdHJpbmdbXSA9ICI8aHRtbD48aGVhZD48dGl0bGU+V2Vi
S2l0Mkd0aysgVExTIHBlcm1pc3Npb24gdGVzdDwvdGl0bGU+PC9oZWFkPjxib2R5PjwvYm9keT48
L2h0bWw+IjsKLQotY2xhc3MgU1NMVGVzdDogcHVibGljIExvYWRUcmFja2luZ1Rlc3QgewotcHVi
bGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoU1NMVGVzdCk7Ci0KLSAgICBTU0xUZXN0
KCkKLSAgICAgICAgOiBtX3Rsc0Vycm9ycyhzdGF0aWNfY2FzdDxHVGxzQ2VydGlmaWNhdGVGbGFn
cz4oMCkpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBwcm92aXNpb25hbExvYWRG
YWlsZWQoY29uc3QgZ2NoYXIqIGZhaWxpbmdVUkksIEdFcnJvciogZXJyb3IpCi0gICAgewotICAg
ICAgICBnX2Fzc2VydF9lcnJvcihlcnJvciwgU09VUF9IVFRQX0VSUk9SLCBTT1VQX1NUQVRVU19T
U0xfRkFJTEVEKTsKLSAgICAgICAgTG9hZFRyYWNraW5nVGVzdDo6cHJvdmlzaW9uYWxMb2FkRmFp
bGVkKGZhaWxpbmdVUkksIGVycm9yKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgbG9hZENv
bW1pdHRlZCgpCi0gICAgewotICAgICAgICBHVGxzQ2VydGlmaWNhdGUqIGNlcnRpZmljYXRlID0g
MDsKLSAgICAgICAgd2Via2l0X3dlYl92aWV3X2dldF90bHNfaW5mbyhtX3dlYlZpZXcsICZjZXJ0
aWZpY2F0ZSwgJm1fdGxzRXJyb3JzKTsKLSAgICAgICAgbV9jZXJ0aWZpY2F0ZSA9IGNlcnRpZmlj
YXRlOwotICAgICAgICBMb2FkVHJhY2tpbmdUZXN0Ojpsb2FkQ29tbWl0dGVkKCk7Ci0gICAgfQot
Ci0gICAgdm9pZCB3YWl0VW50aWxMb2FkRmluaXNoZWQoKQotICAgIHsKLSAgICAgICAgbV9jZXJ0
aWZpY2F0ZSA9IDA7Ci0gICAgICAgIG1fdGxzRXJyb3JzID0gc3RhdGljX2Nhc3Q8R1Rsc0NlcnRp
ZmljYXRlRmxhZ3M+KDApOwotICAgICAgICBMb2FkVHJhY2tpbmdUZXN0Ojp3YWl0VW50aWxMb2Fk
RmluaXNoZWQoKTsKLSAgICB9Ci0KLSAgICBHUmVmUHRyPEdUbHNDZXJ0aWZpY2F0ZT4gbV9jZXJ0
aWZpY2F0ZTsKLSAgICBHVGxzQ2VydGlmaWNhdGVGbGFncyBtX3Rsc0Vycm9yczsKLX07Ci0KLXN0
YXRpYyB2b2lkIHRlc3RTU0woU1NMVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0
ZXN0LT5sb2FkVVJJKGtIdHRwc1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7Ci0g
ICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV9j
ZXJ0aWZpY2F0ZSk7Ci0gICAgLy8gV2UgYWx3YXlzIGV4cGVjdCBlcnJvcnMgYmVjYXVzZSB3ZSBh
cmUgdXNpbmcgYSBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZSwKLSAgICAvLyBidXQgb25seSBHX1RM
U19DRVJUSUZJQ0FURV9VTktOT1dOX0NBIGZsYWdzIHNob3VsZCBiZSBwcmVzZW50LgotICAgIGdf
YXNzZXJ0KHRlc3QtPm1fdGxzRXJyb3JzKTsKLSAgICBnX2Fzc2VydF9jbXB1aW50KHRlc3QtPm1f
dGxzRXJyb3JzLCA9PSwgR19UTFNfQ0VSVElGSUNBVEVfVU5LTk9XTl9DQSk7Ci0KLSAgICAvLyBO
b24gSFRUUFMgbG9hZHMgc2hvdWxkbid0IGhhdmUgYSBjZXJ0aWZpY2F0ZSBub3IgZXJyb3JzLgot
ICAgIHRlc3QtPmxvYWRIdG1sKGluZGV4SFRNTCwgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9h
ZEZpbmlzaGVkKCk7Ci0gICAgZ19hc3NlcnQoIXRlc3QtPm1fY2VydGlmaWNhdGUpOwotICAgIGdf
YXNzZXJ0KCF0ZXN0LT5tX3Rsc0Vycm9ycyk7Ci19Ci0KLWNsYXNzIEluc2VjdXJlQ29udGVudFRl
c3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklY
VFVSRShJbnNlY3VyZUNvbnRlbnRUZXN0KTsKLQotICAgIEluc2VjdXJlQ29udGVudFRlc3QoKQot
ICAgICAgICA6IG1faW5zZWN1cmVDb250ZW50UnVuKGZhbHNlKQotICAgICAgICAsIG1faW5zZWN1
cmVDb250ZW50RGlzcGxheWVkKGZhbHNlKQotICAgIHsKLSAgICAgICAgZ19zaWduYWxfY29ubmVj
dChtX3dlYlZpZXcsICJpbnNlY3VyZS1jb250ZW50LWRldGVjdGVkIiwgR19DQUxMQkFDSyhpbnNl
Y3VyZUNvbnRlbnREZXRlY3RlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgfQotCi0gICAgc3RhdGlj
IHZvaWQgaW5zZWN1cmVDb250ZW50RGV0ZWN0ZWRDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3LCBXZWJLaXRJbnNlY3VyZUNvbnRlbnRFdmVudCBldmVudCwgSW5zZWN1cmVDb250ZW50VGVz
dCogdGVzdCkKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0KHdlYlZpZXcgPT0gdGVzdC0+bV93ZWJW
aWV3KTsKLQotICAgICAgICBpZiAoZXZlbnQgPT0gV0VCS0lUX0lOU0VDVVJFX0NPTlRFTlRfUlVO
KQotICAgICAgICAgICAgdGVzdC0+bV9pbnNlY3VyZUNvbnRlbnRSdW4gPSB0cnVlOwotCi0gICAg
ICAgIGlmIChldmVudCA9PSBXRUJLSVRfSU5TRUNVUkVfQ09OVEVOVF9ESVNQTEFZRUQpCi0gICAg
ICAgICAgICB0ZXN0LT5tX2luc2VjdXJlQ29udGVudERpc3BsYXllZCA9IHRydWU7Ci0gICAgfQot
Ci0gICAgYm9vbCBtX2luc2VjdXJlQ29udGVudFJ1bjsKLSAgICBib29sIG1faW5zZWN1cmVDb250
ZW50RGlzcGxheWVkOwotfTsKLQotc3RhdGljIHZvaWQgdGVzdEluc2VjdXJlQ29udGVudChJbnNl
Y3VyZUNvbnRlbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxvYWRV
Ukkoa0h0dHBzU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvaW5zZWN1cmUtY29udGVudC8iKS5kYXRh
KCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3NlcnQo
dGVzdC0+bV9pbnNlY3VyZUNvbnRlbnRSdW4pOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1faW5zZWN1
cmVDb250ZW50RGlzcGxheWVkKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFRMU0Vycm9yc1BvbGlj
eShTU0xUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIFdlYktpdFdlYkNvbnRleHQq
IGNvbnRleHQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQodGVzdC0+bV93ZWJWaWV3KTsK
LSAgICAvLyBUTFMgZXJyb3JzIGFyZSBpZ25vcmVkIGJ5IGRlZmF1bHQuCi0gICAgZ19hc3NlcnQo
d2Via2l0X3dlYl9jb250ZXh0X2dldF90bHNfZXJyb3JzX3BvbGljeShjb250ZXh0KSA9PSBXRUJL
SVRfVExTX0VSUk9SU19QT0xJQ1lfSUdOT1JFKTsKLSAgICB0ZXN0LT5sb2FkVVJJKGtIdHRwc1Nl
cnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9h
ZEZpbmlzaGVkKCk7Ci0gICAgZ19hc3NlcnQoIXRlc3QtPm1fbG9hZEZhaWxlZCk7Ci0KLSAgICB3
ZWJraXRfd2ViX2NvbnRleHRfc2V0X3Rsc19lcnJvcnNfcG9saWN5KGNvbnRleHQsIFdFQktJVF9U
TFNfRVJST1JTX1BPTElDWV9GQUlMKTsKLSAgICB0ZXN0LT5sb2FkVVJJKGtIdHRwc1NlcnZlci0+
Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlz
aGVkKCk7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV9sb2FkRmFpbGVkKTsKLSAgICBnX2Fzc2VydCh0
ZXN0LT5tX2xvYWRFdmVudHMuY29udGFpbnMoTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxM
b2FkRmFpbGVkKSk7Ci0gICAgZ19hc3NlcnQoIXRlc3QtPm1fbG9hZEV2ZW50cy5jb250YWlucyhM
b2FkVHJhY2tpbmdUZXN0OjpMb2FkQ29tbWl0dGVkKSk7Ci19Ci0KLWNsYXNzIFRMU0Vycm9yc1Rl
c3Q6IHB1YmxpYyBTU0xUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJF
KFRMU0Vycm9yc1Rlc3QpOwotCi0gICAgVExTRXJyb3JzVGVzdCgpCi0gICAgewotICAgICAgICBn
X3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImxvYWQtZmFpbGVkLXdpdGgtdGxzLWVycm9ycyIs
IEdfQ0FMTEJBQ0socnVuTG9hZEZhaWxlZFdpdGhUTFNFcnJvcnNDYWxsYmFjayksIHRoaXMpOwot
ICAgIH0KLQotICAgIH5UTFNFcnJvcnNUZXN0KCkKLSAgICB7Ci0gICAgICAgIGdfc2lnbmFsX2hh
bmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3dlYlZpZXcsIEdfU0lHTkFMX01BVENIX0RBVEEs
IDAsIDAsIDAsIDAsIHRoaXMpOwotICAgICAgICBpZiAobV9jZXJ0aWZpY2F0ZUluZm8pCi0gICAg
ICAgICAgICB3ZWJraXRfY2VydGlmaWNhdGVfaW5mb19mcmVlKG1fY2VydGlmaWNhdGVJbmZvKTsK
LSAgICB9Ci0KLSAgICBzdGF0aWMgZ2Jvb2xlYW4gcnVuTG9hZEZhaWxlZFdpdGhUTFNFcnJvcnND
YWxsYmFjayhXZWJLaXRXZWJWaWV3KiwgV2ViS2l0Q2VydGlmaWNhdGVJbmZvKiBpbmZvLCBjb25z
dCBjaGFyKiBob3N0LCBUTFNFcnJvcnNUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+
cnVuTG9hZEZhaWxlZFdpdGhUTFNFcnJvcnMoaW5mbywgaG9zdCk7Ci0gICAgICAgIHJldHVybiBU
UlVFOwotICAgIH0KLQotICAgIHZvaWQgcnVuTG9hZEZhaWxlZFdpdGhUTFNFcnJvcnMoV2ViS2l0
Q2VydGlmaWNhdGVJbmZvKiBpbmZvLCBjb25zdCBjaGFyKiBob3N0KQotICAgIHsKLSAgICAgICAg
aWYgKG1fY2VydGlmaWNhdGVJbmZvKQotICAgICAgICAgICAgd2Via2l0X2NlcnRpZmljYXRlX2lu
Zm9fZnJlZShtX2NlcnRpZmljYXRlSW5mbyk7Ci0gICAgICAgIG1fY2VydGlmaWNhdGVJbmZvID0g
d2Via2l0X2NlcnRpZmljYXRlX2luZm9fY29weShpbmZvKTsKLSAgICAgICAgbV9ob3N0LnNldChn
X3N0cmR1cChob3N0KSk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7Ci0g
ICAgfQotCi0gICAgdm9pZCB3YWl0VW50aWxMb2FkRmFpbGVkV2l0aFRMU0Vycm9ycygpCi0gICAg
ewotICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgV2Vi
S2l0Q2VydGlmaWNhdGVJbmZvKiBjZXJ0aWZpY2F0ZUluZm8oKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fY2VydGlmaWNhdGVJbmZvOwotICAgIH0KLQotICAgIGNvbnN0IGNoYXIqIGhvc3QoKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1faG9zdC5nZXQoKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgV2ViS2l0Q2VydGlmaWNhdGVJbmZvKiBtX2NlcnRpZmljYXRlSW5mbzsKLSAgICBHT3duUHRy
PGNoYXI+IG1faG9zdDsKLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RMb2FkRmFpbGVkV2l0aFRMU0Vy
cm9ycyhUTFNFcnJvcnNUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIFdlYktpdFdl
YkNvbnRleHQqIGNvbnRleHQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQodGVzdC0+bV93
ZWJWaWV3KTsKLSAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3Rsc19lcnJvcnNfcG9saWN5KGNv
bnRleHQsIFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9GQUlMKTsKLQotICAgIC8vIFRoZSBsb2Fk
LWZhaWxlZC13aXRoLXRscy1lcnJvcnMgc2lnbmFsIHNob3VsZCBiZSBlbWl0dGVkIHdoZW4gdGhl
cmUgaXMgYSBUTFMgZmFpbHVyZS4KLSAgICB0ZXN0LT5sb2FkVVJJKGtIdHRwc1NlcnZlci0+Z2V0
VVJJRm9yUGF0aCgiL3Rlc3QtdGxzLyIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9h
ZEZhaWxlZFdpdGhUTFNFcnJvcnMoKTsKLSAgICAvLyBUZXN0IHRoZSBXZWJLaXRDZXJ0aWZpY2F0
ZUluZm8gQVBJLgotICAgIGdfYXNzZXJ0KEdfSVNfVExTX0NFUlRJRklDQVRFKHdlYmtpdF9jZXJ0
aWZpY2F0ZV9pbmZvX2dldF90bHNfY2VydGlmaWNhdGUodGVzdC0+Y2VydGlmaWNhdGVJbmZvKCkp
KSk7Ci0gICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfY2VydGlmaWNhdGVfaW5mb19nZXRfdGxz
X2Vycm9ycyh0ZXN0LT5jZXJ0aWZpY2F0ZUluZm8oKSksID09LCBHX1RMU19DRVJUSUZJQ0FURV9V
TktOT1dOX0NBKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+aG9zdCgpLCA9PSwgc291cF91
cmlfZ2V0X2hvc3Qoa0h0dHBzU2VydmVyLT5iYXNlVVJJKCkpKTsKLSAgICBnX2Fzc2VydF9jbXBp
bnQodGVzdC0+bV9sb2FkRXZlbnRzWzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9u
YWxMb2FkU3RhcnRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1sx
XSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7Ci0KLSAgICAvLyBUZXN0IGFs
bG93aW5nIGFuIGV4Y2VwdGlvbiBmb3IgdGhpcyBjZXJ0aWZpY2F0ZSBvbiB0aGlzIGhvc3QuCi0g
ICAgd2Via2l0X3dlYl9jb250ZXh0X2FsbG93X3Rsc19jZXJ0aWZpY2F0ZV9mb3JfaG9zdChjb250
ZXh0LCB0ZXN0LT5jZXJ0aWZpY2F0ZUluZm8oKSwgdGVzdC0+aG9zdCgpKTsKLSAgICAvLyBUaGUg
cGFnZSBzaG91bGQgbm93IGxvYWQgd2l0aG91dCBlcnJvcnMuCi0gICAgdGVzdC0+bG9hZFVSSShr
SHR0cHNTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi90ZXN0LXRscy8iKS5kYXRhKCkpOwotICAgIHRl
c3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3NlcnRfY21waW50KHRlc3Qt
Pm1fbG9hZEV2ZW50c1swXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0
YXJ0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMV0sID09LCBM
b2FkVHJhY2tpbmdUZXN0OjpMb2FkQ29tbWl0dGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVz
dC0+bV9sb2FkRXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsK
LSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dldF90aXRsZSh0ZXN0LT5tX3dl
YlZpZXcpLCA9PSwgVExTRXhwZWN0ZWRTdWNjZXNzVGl0bGUpOwotfQotCi0KLXN0YXRpYyB2b2lk
IGh0dHBzU2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbWVz
c2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSosIFNvdXBDbGllbnRDb250ZXh0Kiwg
Z3BvaW50ZXIpCi17Ci0gICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQp
IHsKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNf
Tk9UX0lNUExFTUVOVEVEKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChnX3N0
cl9lcXVhbChwYXRoLCAiLyIpKSB7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1l
c3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5k
KG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgaW5kZXhIVE1MLCBz
dHJsZW4oaW5kZXhIVE1MKSk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1l
c3NhZ2UtPnJlc3BvbnNlX2JvZHkpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwg
Ii9pbnNlY3VyZS1jb250ZW50LyIpKSB7Ci0gICAgICAgIEdPd25QdHI8Y2hhcj4gcmVzcG9uc2VI
VE1MKGdfc3RyZHVwX3ByaW50ZihpbnNlY3VyZUNvbnRlbnRIVE1MLCBrSHR0cFNlcnZlci0+Z2V0
VVJJRm9yUGF0aCgiL3Rlc3Qtc2NyaXB0IikuZGF0YSgpLCBrSHR0cFNlcnZlci0+Z2V0VVJJRm9y
UGF0aCgiL3Rlc3QtaW1hZ2UiKS5kYXRhKCkpKTsKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlf
YXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX0NPUFksIHJlc3BvbnNl
SFRNTC5nZXQoKSwgc3RybGVuKHJlc3BvbnNlSFRNTC5nZXQoKSkpOwotICAgICAgICBzb3VwX21l
c3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7Ci0gICAgICAgIHNvdXBf
bWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOwotICAgIH0gZWxz
ZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi90ZXN0LXRscy8iKSkgewotICAgICAgICBzb3VwX21l
c3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7Ci0gICAgICAgIHNvdXBf
bWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9T
VEFUSUMsIFRMU1N1Y2Nlc3NIVE1MU3RyaW5nLCBzdHJsZW4oVExTU3VjY2Vzc0hUTUxTdHJpbmcp
KTsKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2Vf
Ym9keSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3Nh
Z2UsIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGh0dHBTZXJ2ZXJD
YWxsYmFjayhTb3VwU2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBj
aGFyKiBwYXRoLCBHSGFzaFRhYmxlKiwgU291cENsaWVudENvbnRleHQqLCBncG9pbnRlcikKLXsK
LSAgICBpZiAobWVzc2FnZS0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgewotICAgICAgICBz
b3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5U
RUQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgs
ICIvdGVzdC1zY3JpcHQiKSkgewotICAgICAgICBHT3duUHRyPGNoYXI+IHBhdGhUb0ZpbGUoZ19i
dWlsZF9maWxlbmFtZShUZXN0OjpnZXRSZXNvdXJjZXNEaXIoKS5kYXRhKCksICJsaW5rLXRpdGxl
LmpzIiwgTlVMTCkpOwotICAgICAgICBjaGFyKiBjb250ZW50czsKLSAgICAgICAgZ3NpemUgbGVu
Z3RoOwotICAgICAgICBnX2ZpbGVfZ2V0X2NvbnRlbnRzKHBhdGhUb0ZpbGUuZ2V0KCksICZjb250
ZW50cywgJmxlbmd0aCwgMCk7Ci0KLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1l
c3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGNvbnRlbnRzLCBsZW5ndGgp
OwotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19P
Syk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNl
X2JvZHkpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi90ZXN0LWltYWdlIikp
IHsKLSAgICAgICAgR093blB0cjxjaGFyPiBwYXRoVG9GaWxlKGdfYnVpbGRfZmlsZW5hbWUoVGVz
dDo6Z2V0V2ViS2l0MVRlc3RSZXNvdWNlc0RpcigpLmRhdGEoKSwgImJsYW5rLmljbyIsIE5VTEwp
KTsKLSAgICAgICAgY2hhciogY29udGVudHM7Ci0gICAgICAgIGdzaXplIGxlbmd0aDsKLSAgICAg
ICAgZ19maWxlX2dldF9jb250ZW50cyhwYXRoVG9GaWxlLmdldCgpLCAmY29udGVudHMsICZsZW5n
dGgsIDApOwotCi0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNw
b25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBjb250ZW50cywgbGVuZ3RoKTsKLSAgICAgICAg
c291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOwotICAgICAg
ICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKLSAg
ICB9IGVsc2UKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9T
VEFUVVNfTk9UX0ZPVU5EKTsKLX0KLQotdm9pZCBiZWZvcmVBbGwoKQotewotICAgIGtIdHRwc1Nl
cnZlciA9IG5ldyBXZWJLaXRUZXN0U2VydmVyKFdlYktpdFRlc3RTZXJ2ZXI6OlNlcnZlckhUVFBT
KTsKLSAgICBrSHR0cHNTZXJ2ZXItPnJ1bihodHRwc1NlcnZlckNhbGxiYWNrKTsKLQotICAgIGtI
dHRwU2VydmVyID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIoV2ViS2l0VGVzdFNlcnZlcjo6U2VydmVy
SFRUUCk7Ci0gICAga0h0dHBTZXJ2ZXItPnJ1bihodHRwU2VydmVyQ2FsbGJhY2spOwotCi0gICAg
U1NMVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInNzbCIsIHRlc3RTU0wpOwotICAgIEluc2Vj
dXJlQ29udGVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJpbnNlY3VyZS1jb250ZW50Iiwg
dGVzdEluc2VjdXJlQ29udGVudCk7Ci0gICAgLy8gSW4gdGhpcyBjYXNlIHRoZSBvcmRlciBvZiB0
aGUgdGVzdHMgZG9lcyBtYXR0ZXIgYmVjYXVzZSB0bHMtZXJyb3JzLXBvbGljeSB0ZXN0cyB0aGUg
ZGVmYXVsdCBwb2xpY3ksCi0gICAgLy8gYW5kIGV4cGVjdHMgdGhhdCBubyBleGNlcHRpb24gd2ls
bCBoYXZlIGJlZW4gYWRkZWQgZm9yIHRoaXMgY2VydGlmaWNhdGUgYW5kIGhvc3QgcGFpciBhcyBp
cwotICAgIC8vIGRvbmUgaW4gdGhlIHRscy1wZXJtaXNzaW9uLXJlcXVlc3QgdGVzdC4KLSAgICBT
U0xUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAidGxzLWVycm9ycy1wb2xpY3kiLCB0ZXN0VExT
RXJyb3JzUG9saWN5KTsKLSAgICBUTFNFcnJvcnNUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAi
bG9hZC1mYWlsZWQtd2l0aC10bHMtZXJyb3JzIiwgdGVzdExvYWRGYWlsZWRXaXRoVExTRXJyb3Jz
KTsKLX0KLQotdm9pZCBhZnRlckFsbCgpCi17Ci0gICAgZGVsZXRlIGtIdHRwc1NlcnZlcjsKLSAg
ICBkZWxldGUga0h0dHBTZXJ2ZXI7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0VUlDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFVJQ2xpZW50LmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYmMzMGQ2ZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9UZXN0VUlDbGllbnQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjc5
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgotI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0hhc2guaD4KLQotc3RhdGljIGNvbnN0IGNoYXIqIGtBbGVydERpYWxvZ01lc3Nh
Z2UgPSAiV2ViS2l0R1RLKyBhbGVydCBkaWFsb2cgbWVzc2FnZSI7Ci1zdGF0aWMgY29uc3QgY2hh
cioga0NvbmZpcm1EaWFsb2dNZXNzYWdlID0gIldlYktpdEdUSysgY29uZmlybSBkaWFsb2cgbWVz
c2FnZSI7Ci1zdGF0aWMgY29uc3QgY2hhcioga1Byb21wdERpYWxvZ01lc3NhZ2UgPSAiV2ViS2l0
R1RLKyBwcm9tcHQgZGlhbG9nIG1lc3NhZ2UiOwotc3RhdGljIGNvbnN0IGNoYXIqIGtQcm9tcHRE
aWFsb2dSZXR1cm5lZFRleHQgPSAiV2ViS2l0R1RLKyBwcm9tcHQgZGlhbG9nIHJldHVybmVkIHRl
eHQiOwotCi1jbGFzcyBVSUNsaWVudFRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7Ci1wdWJsaWM6
Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShVSUNsaWVudFRlc3QpOwotCi0gICAgZW51bSBX
ZWJWaWV3RXZlbnRzIHsKLSAgICAgICAgQ3JlYXRlLAotICAgICAgICBSZWFkeVRvU2hvdywKLSAg
ICAgICAgUnVuQXNNb2RhbCwKLSAgICAgICAgQ2xvc2UKLSAgICB9OwotCi0gICAgY2xhc3MgV2lu
ZG93UHJvcGVydGllcyB7Ci0gICAgcHVibGljOgotICAgICAgICBXaW5kb3dQcm9wZXJ0aWVzKCkK
LSAgICAgICAgICAgIDogbV9pc051bGwodHJ1ZSkKLSAgICAgICAgICAgICwgbV90b29sYmFyVmlz
aWJsZSh0cnVlKQotICAgICAgICAgICAgLCBtX3N0YXR1c2JhclZpc2libGUodHJ1ZSkKLSAgICAg
ICAgICAgICwgbV9zY3JvbGxiYXJzVmlzaWJsZSh0cnVlKQotICAgICAgICAgICAgLCBtX21lbnVi
YXJWaXNpYmxlKHRydWUpCi0gICAgICAgICAgICAsIG1fbG9jYXRpb25iYXJWaXNpYmxlKHRydWUp
Ci0gICAgICAgICAgICAsIG1fcmVzaXphYmxlKHRydWUpCi0gICAgICAgICAgICAsIG1fZnVsbHNj
cmVlbihmYWxzZSkKLSAgICAgICAgewotICAgICAgICAgICAgbWVtc2V0KCZtX2dlb21ldHJ5LCAw
LCBzaXplb2YoR2RrUmVjdGFuZ2xlKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBXaW5kb3dQcm9w
ZXJ0aWVzKFdlYktpdFdpbmRvd1Byb3BlcnRpZXMqIHdpbmRvd1Byb3BlcnRpZXMpCi0gICAgICAg
ICAgICA6IG1faXNOdWxsKGZhbHNlKQotICAgICAgICAgICAgLCBtX3Rvb2xiYXJWaXNpYmxlKHdl
YmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRfdG9vbGJhcl92aXNpYmxlKHdpbmRvd1Byb3BlcnRp
ZXMpKQotICAgICAgICAgICAgLCBtX3N0YXR1c2JhclZpc2libGUod2Via2l0X3dpbmRvd19wcm9w
ZXJ0aWVzX2dldF9zdGF0dXNiYXJfdmlzaWJsZSh3aW5kb3dQcm9wZXJ0aWVzKSkKLSAgICAgICAg
ICAgICwgbV9zY3JvbGxiYXJzVmlzaWJsZSh3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X3Nj
cm9sbGJhcnNfdmlzaWJsZSh3aW5kb3dQcm9wZXJ0aWVzKSkKLSAgICAgICAgICAgICwgbV9tZW51
YmFyVmlzaWJsZSh3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X21lbnViYXJfdmlzaWJsZSh3
aW5kb3dQcm9wZXJ0aWVzKSkKLSAgICAgICAgICAgICwgbV9sb2NhdGlvbmJhclZpc2libGUod2Vi
a2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF9sb2NhdGlvbmJhcl92aXNpYmxlKHdpbmRvd1Byb3Bl
cnRpZXMpKQotICAgICAgICAgICAgLCBtX3Jlc2l6YWJsZSh3ZWJraXRfd2luZG93X3Byb3BlcnRp
ZXNfZ2V0X3Jlc2l6YWJsZSh3aW5kb3dQcm9wZXJ0aWVzKSkKLSAgICAgICAgICAgICwgbV9mdWxs
c2NyZWVuKHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRfZnVsbHNjcmVlbih3aW5kb3dQcm9w
ZXJ0aWVzKSkKLSAgICAgICAgewotICAgICAgICAgICAgd2Via2l0X3dpbmRvd19wcm9wZXJ0aWVz
X2dldF9nZW9tZXRyeSh3aW5kb3dQcm9wZXJ0aWVzLCAmbV9nZW9tZXRyeSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBXaW5kb3dQcm9wZXJ0aWVzKEdka1JlY3RhbmdsZSogZ2VvbWV0cnksIGJvb2wg
dG9vbGJhclZpc2libGUsIGJvb2wgc3RhdHVzYmFyVmlzaWJsZSwgYm9vbCBzY3JvbGxiYXJzVmlz
aWJsZSwgYm9vbCBtZW51YmFyVmlzaWJsZSwgYm9vbCBsb2NhdGlvbmJhclZpc2libGUsIGJvb2wg
cmVzaXphYmxlLCBib29sIGZ1bGxzY3JlZW4pCi0gICAgICAgICAgICA6IG1faXNOdWxsKGZhbHNl
KQotICAgICAgICAgICAgLCBtX2dlb21ldHJ5KCpnZW9tZXRyeSkKLSAgICAgICAgICAgICwgbV90
b29sYmFyVmlzaWJsZSh0b29sYmFyVmlzaWJsZSkKLSAgICAgICAgICAgICwgbV9zdGF0dXNiYXJW
aXNpYmxlKHN0YXR1c2JhclZpc2libGUpCi0gICAgICAgICAgICAsIG1fc2Nyb2xsYmFyc1Zpc2li
bGUoc2Nyb2xsYmFyc1Zpc2libGUpCi0gICAgICAgICAgICAsIG1fbWVudWJhclZpc2libGUobWVu
dWJhclZpc2libGUpCi0gICAgICAgICAgICAsIG1fbG9jYXRpb25iYXJWaXNpYmxlKGxvY2F0aW9u
YmFyVmlzaWJsZSkKLSAgICAgICAgICAgICwgbV9yZXNpemFibGUocmVzaXphYmxlKQotICAgICAg
ICAgICAgLCBtX2Z1bGxzY3JlZW4oZnVsbHNjcmVlbikKLSAgICAgICAgewotICAgICAgICB9Ci0K
LSAgICAgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBtX2lzTnVsbDsgfQotCi0gICAg
ICAgIHZvaWQgYXNzZXJ0RXF1YWwoY29uc3QgV2luZG93UHJvcGVydGllcyYgb3RoZXIpIGNvbnN0
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGdfYXNzZXJ0X2NtcGludChtX2dlb21ldHJ5LngsID09
LCBvdGhlci5tX2dlb21ldHJ5LngpOwotICAgICAgICAgICAgZ19hc3NlcnRfY21waW50KG1fZ2Vv
bWV0cnkueSwgPT0sIG90aGVyLm1fZ2VvbWV0cnkueSk7Ci0gICAgICAgICAgICBnX2Fzc2VydF9j
bXBpbnQobV9nZW9tZXRyeS53aWR0aCwgPT0sIG90aGVyLm1fZ2VvbWV0cnkud2lkdGgpOwotICAg
ICAgICAgICAgZ19hc3NlcnRfY21waW50KG1fZ2VvbWV0cnkuaGVpZ2h0LCA9PSwgb3RoZXIubV9n
ZW9tZXRyeS5oZWlnaHQpOwotICAgICAgICAgICAgZ19hc3NlcnRfY21waW50KHN0YXRpY19jYXN0
PGludD4obV90b29sYmFyVmlzaWJsZSksID09LCBzdGF0aWNfY2FzdDxpbnQ+KG90aGVyLm1fdG9v
bGJhclZpc2libGUpKTsKLSAgICAgICAgICAgIGdfYXNzZXJ0X2NtcGludChzdGF0aWNfY2FzdDxp
bnQ+KG1fc3RhdHVzYmFyVmlzaWJsZSksID09LCBzdGF0aWNfY2FzdDxpbnQ+KG90aGVyLm1fc3Rh
dHVzYmFyVmlzaWJsZSkpOwotICAgICAgICAgICAgZ19hc3NlcnRfY21waW50KHN0YXRpY19jYXN0
PGludD4obV9zY3JvbGxiYXJzVmlzaWJsZSksID09LCBzdGF0aWNfY2FzdDxpbnQ+KG90aGVyLm1f
c2Nyb2xsYmFyc1Zpc2libGUpKTsKLSAgICAgICAgICAgIGdfYXNzZXJ0X2NtcGludChzdGF0aWNf
Y2FzdDxpbnQ+KG1fbWVudWJhclZpc2libGUpLCA9PSwgc3RhdGljX2Nhc3Q8aW50PihvdGhlci5t
X21lbnViYXJWaXNpYmxlKSk7Ci0gICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQoc3RhdGljX2Nh
c3Q8aW50PihtX2xvY2F0aW9uYmFyVmlzaWJsZSksID09LCBzdGF0aWNfY2FzdDxpbnQ+KG90aGVy
Lm1fbG9jYXRpb25iYXJWaXNpYmxlKSk7Ci0gICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQoc3Rh
dGljX2Nhc3Q8aW50PihtX3Jlc2l6YWJsZSksID09LCBzdGF0aWNfY2FzdDxpbnQ+KG90aGVyLm1f
cmVzaXphYmxlKSk7Ci0gICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQoc3RhdGljX2Nhc3Q8aW50
PihtX2Z1bGxzY3JlZW4pLCA9PSwgc3RhdGljX2Nhc3Q8aW50PihvdGhlci5tX2Z1bGxzY3JlZW4p
KTsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgYm9vbCBtX2lzTnVsbDsKLQot
ICAgICAgICBHZGtSZWN0YW5nbGUgbV9nZW9tZXRyeTsKLQotICAgICAgICBib29sIG1fdG9vbGJh
clZpc2libGU7Ci0gICAgICAgIGJvb2wgbV9zdGF0dXNiYXJWaXNpYmxlOwotICAgICAgICBib29s
IG1fc2Nyb2xsYmFyc1Zpc2libGU7Ci0gICAgICAgIGJvb2wgbV9tZW51YmFyVmlzaWJsZTsKLSAg
ICAgICAgYm9vbCBtX2xvY2F0aW9uYmFyVmlzaWJsZTsKLQotICAgICAgICBib29sIG1fcmVzaXph
YmxlOwotICAgICAgICBib29sIG1fZnVsbHNjcmVlbjsKLSAgICB9OwotCi0gICAgc3RhdGljIHZv
aWQgd2luZG93UHJvcGVydGllc05vdGlmeUNhbGxiYWNrKEdPYmplY3QqLCBHUGFyYW1TcGVjKiBw
YXJhbVNwZWMsIFVJQ2xpZW50VGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHRlc3QtPm1fd2lu
ZG93UHJvcGVydGllc0NoYW5nZWQuYWRkKGdfcGFyYW1fc3BlY19nZXRfbmFtZShwYXJhbVNwZWMp
KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgR3RrV2lkZ2V0KiB2aWV3Q3JlYXRlQ2FsbGJhY2soV2Vi
S2l0V2ViVmlldyogd2ViVmlldywgVUlDbGllbnRUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHRlc3QtPnZpZXdDcmVhdGUod2ViVmlldyk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZv
aWQgdmlld1JlYWR5VG9TaG93Q2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgVUlDbGll
bnRUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+dmlld1JlYWR5VG9TaG93KHdlYlZp
ZXcpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHZpZXdDbG9zZUNhbGxiYWNrKFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcsIFVJQ2xpZW50VGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHRlc3Qt
PnZpZXdDbG9zZSh3ZWJWaWV3KTsKLSAgICB9Ci0KLSAgICB2b2lkIHNjcmlwdEFsZXJ0KFdlYktp
dFNjcmlwdERpYWxvZyogZGlhbG9nKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChtX3NjcmlwdERp
YWxvZ1R5cGUpIHsKLSAgICAgICAgY2FzZSBXRUJLSVRfU0NSSVBUX0RJQUxPR19BTEVSVDoKLSAg
ICAgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2NyaXB0X2RpYWxvZ19nZXRfbWVzc2Fn
ZShkaWFsb2cpLCA9PSwga0FsZXJ0RGlhbG9nTWVzc2FnZSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBXRUJLSVRfU0NSSVBUX0RJQUxPR19DT05GSVJNOgotICAgICAgICAgICAg
Z19hc3NlcnQobV9zY3JpcHREaWFsb2dDb25maXJtZWQpOwotICAgICAgICAgICAgZ19hc3NlcnRf
Y21wc3RyKHdlYmtpdF9zY3JpcHRfZGlhbG9nX2dldF9tZXNzYWdlKGRpYWxvZyksID09LCAiY29u
ZmlybWVkIik7Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdFQktJVF9TQ1JJ
UFRfRElBTE9HX1BST01QVDoKLSAgICAgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2Ny
aXB0X2RpYWxvZ19nZXRfbWVzc2FnZShkaWFsb2cpLCA9PSwga1Byb21wdERpYWxvZ1JldHVybmVk
VGV4dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGdfbWFpbl9s
b29wX3F1aXQobV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgdm9pZCBzY3JpcHRDb25maXJtKFdl
YktpdFNjcmlwdERpYWxvZyogZGlhbG9nKQotICAgIHsKLSAgICAgICAgZ19hc3NlcnRfY21wc3Ry
KHdlYmtpdF9zY3JpcHRfZGlhbG9nX2dldF9tZXNzYWdlKGRpYWxvZyksID09LCBrQ29uZmlybURp
YWxvZ01lc3NhZ2UpOwotICAgICAgICBtX3NjcmlwdERpYWxvZ0NvbmZpcm1lZCA9ICFtX3Njcmlw
dERpYWxvZ0NvbmZpcm1lZDsKLSAgICAgICAgd2Via2l0X3NjcmlwdF9kaWFsb2dfY29uZmlybV9z
ZXRfY29uZmlybWVkKGRpYWxvZywgbV9zY3JpcHREaWFsb2dDb25maXJtZWQpOwotICAgIH0KLQot
ICAgIHZvaWQgc2NyaXB0UHJvbXB0KFdlYktpdFNjcmlwdERpYWxvZyogZGlhbG9nKQotICAgIHsK
LSAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zY3JpcHRfZGlhbG9nX2dldF9tZXNzYWdl
KGRpYWxvZyksID09LCBrUHJvbXB0RGlhbG9nTWVzc2FnZSk7Ci0gICAgICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfc2NyaXB0X2RpYWxvZ19wcm9tcHRfZ2V0X2RlZmF1bHRfdGV4dChkaWFsb2cp
LCA9PSwgImRlZmF1bHQiKTsKLSAgICAgICAgd2Via2l0X3NjcmlwdF9kaWFsb2dfcHJvbXB0X3Nl
dF90ZXh0KGRpYWxvZywga1Byb21wdERpYWxvZ1JldHVybmVkVGV4dCk7Ci0gICAgfQotCi0gICAg
c3RhdGljIGdib29sZWFuIHNjcmlwdERpYWxvZyhXZWJLaXRXZWJWaWV3KiwgV2ViS2l0U2NyaXB0
RGlhbG9nKiBkaWFsb2csIFVJQ2xpZW50VGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHN3aXRj
aCAod2Via2l0X3NjcmlwdF9kaWFsb2dfZ2V0X2RpYWxvZ190eXBlKGRpYWxvZykpIHsKLSAgICAg
ICAgY2FzZSBXRUJLSVRfU0NSSVBUX0RJQUxPR19BTEVSVDoKLSAgICAgICAgICAgIHRlc3QtPnNj
cmlwdEFsZXJ0KGRpYWxvZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXRUJL
SVRfU0NSSVBUX0RJQUxPR19DT05GSVJNOgotICAgICAgICAgICAgdGVzdC0+c2NyaXB0Q29uZmly
bShkaWFsb2cpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV0VCS0lUX1NDUklQ
VF9ESUFMT0dfUFJPTVBUOgotICAgICAgICAgICAgdGVzdC0+c2NyaXB0UHJvbXB0KGRpYWxvZyk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBUUlVFOwot
ICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIG1vdXNlVGFyZ2V0Q2hhbmdlZChXZWJLaXRXZWJWaWV3
KiwgV2ViS2l0SGl0VGVzdFJlc3VsdCogaGl0VGVzdFJlc3VsdCwgZ3VpbnQgbW9kaWZpZXJzLCBV
SUNsaWVudFRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfSElU
X1RFU1RfUkVTVUxUKGhpdFRlc3RSZXN1bHQpKTsKLSAgICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0
SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChoaXRUZXN0UmVzdWx0KSk7Ci0KLSAg
ICAgICAgdGVzdC0+bV9tb3VzZVRhcmdldEhpdFRlc3RSZXN1bHQgPSBoaXRUZXN0UmVzdWx0Owot
ICAgICAgICB0ZXN0LT5tX21vdXNlVGFyZ2V0TW9kaWZpZXJzID0gbW9kaWZpZXJzOwotICAgICAg
ICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIHN0YXRp
YyBnYm9vbGVhbiBwZXJtaXNzaW9uUmVxdWVzdGVkKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRQZXJt
aXNzaW9uUmVxdWVzdCogcmVxdWVzdCwgVUlDbGllbnRUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAg
ICAgZ19hc3NlcnQoV0VCS0lUX0lTX1BFUk1JU1NJT05fUkVRVUVTVChyZXF1ZXN0KSk7Ci0gICAg
ICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1Qo
cmVxdWVzdCkpOwotCi0gICAgICAgIGlmICh0ZXN0LT5tX2FsbG93UGVybWlzc2lvblJlcXVlc3Rz
KQotICAgICAgICAgICAgd2Via2l0X3Blcm1pc3Npb25fcmVxdWVzdF9hbGxvdyhyZXF1ZXN0KTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgd2Via2l0X3Blcm1pc3Npb25fcmVxdWVzdF9kZW55
KHJlcXVlc3QpOwotCi0gICAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQotICAgIFVJQ2xpZW50
VGVzdCgpCi0gICAgICAgIDogbV9zY3JpcHREaWFsb2dUeXBlKFdFQktJVF9TQ1JJUFRfRElBTE9H
X0FMRVJUKQotICAgICAgICAsIG1fc2NyaXB0RGlhbG9nQ29uZmlybWVkKHRydWUpCi0gICAgICAg
ICwgbV9hbGxvd1Blcm1pc3Npb25SZXF1ZXN0cyhmYWxzZSkKLSAgICAgICAgLCBtX21vdXNlVGFy
Z2V0TW9kaWZpZXJzKDApCi0gICAgewotICAgICAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2phdmFz
Y3JpcHRfY2FuX29wZW5fd2luZG93c19hdXRvbWF0aWNhbGx5KHdlYmtpdF93ZWJfdmlld19nZXRf
c2V0dGluZ3MobV93ZWJWaWV3KSwgVFJVRSk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93
ZWJWaWV3LCAiY3JlYXRlIiwgR19DQUxMQkFDSyh2aWV3Q3JlYXRlQ2FsbGJhY2spLCB0aGlzKTsK
LSAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJzY3JpcHQtZGlhbG9nIiwgR19D
QUxMQkFDSyhzY3JpcHREaWFsb2cpLCB0aGlzKTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdCht
X3dlYlZpZXcsICJtb3VzZS10YXJnZXQtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sobW91c2VUYXJnZXRD
aGFuZ2VkKSwgdGhpcyk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAicGVy
bWlzc2lvbi1yZXF1ZXN0IiwgR19DQUxMQkFDSyhwZXJtaXNzaW9uUmVxdWVzdGVkKSwgdGhpcyk7
Ci0gICAgfQotCi0gICAgflVJQ2xpZW50VGVzdCgpCi0gICAgewotICAgICAgICBnX3NpZ25hbF9o
YW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV93ZWJWaWV3LCBHX1NJR05BTF9NQVRDSF9EQVRB
LCAwLCAwLCAwLCAwLCB0aGlzKTsKLSAgICB9Ci0KLSAgICB2b2lkIHdhaXRVbnRpbE1haW5Mb29w
RmluaXNoZXMoKQotICAgIHsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwot
ICAgIH0KLQotICAgIHZvaWQgc2V0RXhwZWN0ZWRXaW5kb3dQcm9wZXJ0aWVzKGNvbnN0IFdpbmRv
d1Byb3BlcnRpZXMmIHdpbmRvd1Byb3BlcnRpZXMpCi0gICAgewotICAgICAgICBtX3dpbmRvd1By
b3BlcnRpZXMgPSB3aW5kb3dQcm9wZXJ0aWVzOwotICAgIH0KLQotICAgIFdlYktpdEhpdFRlc3RS
ZXN1bHQqIG1vdmVNb3VzZUFuZFdhaXRVbnRpbE1vdXNlVGFyZ2V0Q2hhbmdlZChpbnQgeCwgaW50
IHksIHVuc2lnbmVkIG1vdXNlTW9kaWZpZXJzID0gMCkKLSAgICB7Ci0gICAgICAgIG1vdXNlTW92
ZVRvKHgsIHksIG1vdXNlTW9kaWZpZXJzKTsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFp
bkxvb3ApOwotICAgICAgICByZXR1cm4gbV9tb3VzZVRhcmdldEhpdFRlc3RSZXN1bHQuZ2V0KCk7
Ci0gICAgfQotCi0gICAgdmlydHVhbCBHdGtXaWRnZXQqIHZpZXdDcmVhdGUoV2ViS2l0V2ViVmll
dyogd2ViVmlldykKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0KHdlYlZpZXcgPT0gbV93ZWJWaWV3
KTsKLQotICAgICAgICBHdGtXaWRnZXQqIG5ld1dlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3
X3dpdGhfY29udGV4dCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQod2ViVmlldykpOwotICAg
ICAgICBnX29iamVjdF9yZWZfc2luayhuZXdXZWJWaWV3KTsKLQotICAgICAgICBtX3dlYlZpZXdF
dmVudHMuYXBwZW5kKENyZWF0ZSk7Ci0KLSAgICAgICAgV2ViS2l0V2luZG93UHJvcGVydGllcyog
d2luZG93UHJvcGVydGllcyA9IHdlYmtpdF93ZWJfdmlld19nZXRfd2luZG93X3Byb3BlcnRpZXMo
V0VCS0lUX1dFQl9WSUVXKG5ld1dlYlZpZXcpKTsKLSAgICAgICAgZ19hc3NlcnQod2luZG93UHJv
cGVydGllcyk7Ci0gICAgICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMo
R19PQkpFQ1Qod2luZG93UHJvcGVydGllcykpOwotICAgICAgICBtX3dpbmRvd1Byb3BlcnRpZXND
aGFuZ2VkLmNsZWFyKCk7Ci0KLSAgICAgICAgZ19zaWduYWxfY29ubmVjdCh3aW5kb3dQcm9wZXJ0
aWVzLCAibm90aWZ5IiwgR19DQUxMQkFDSyh3aW5kb3dQcm9wZXJ0aWVzTm90aWZ5Q2FsbGJhY2sp
LCB0aGlzKTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChuZXdXZWJWaWV3LCAicmVhZHktdG8t
c2hvdyIsIEdfQ0FMTEJBQ0sodmlld1JlYWR5VG9TaG93Q2FsbGJhY2spLCB0aGlzKTsKLSAgICAg
ICAgZ19zaWduYWxfY29ubmVjdChuZXdXZWJWaWV3LCAiY2xvc2UiLCBHX0NBTExCQUNLKHZpZXdD
bG9zZUNhbGxiYWNrKSwgdGhpcyk7Ci0KLSAgICAgICAgcmV0dXJuIG5ld1dlYlZpZXc7Ci0gICAg
fQotCi0gICAgdmlydHVhbCB2b2lkIHZpZXdSZWFkeVRvU2hvdyhXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3KQotICAgIHsKLSAgICAgICAgZ19hc3NlcnQod2ViVmlldyAhPSBtX3dlYlZpZXcpOwotCi0g
ICAgICAgIFdlYktpdFdpbmRvd1Byb3BlcnRpZXMqIHdpbmRvd1Byb3BlcnRpZXMgPSB3ZWJraXRf
d2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9wZXJ0aWVzKHdlYlZpZXcpOwotICAgICAgICBnX2Fzc2Vy
dCh3aW5kb3dQcm9wZXJ0aWVzKTsKLSAgICAgICAgaWYgKCFtX3dpbmRvd1Byb3BlcnRpZXMuaXNO
dWxsKCkpCi0gICAgICAgICAgICBXaW5kb3dQcm9wZXJ0aWVzKHdpbmRvd1Byb3BlcnRpZXMpLmFz
c2VydEVxdWFsKG1fd2luZG93UHJvcGVydGllcyk7Ci0KLSAgICAgICAgbV93ZWJWaWV3RXZlbnRz
LmFwcGVuZChSZWFkeVRvU2hvdyk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpZXdDbG9z
ZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQotICAgIHsKLSAgICAgICAgZ19hc3NlcnQod2ViVmll
dyAhPSBtX3dlYlZpZXcpOwotCi0gICAgICAgIG1fd2ViVmlld0V2ZW50cy5hcHBlbmQoQ2xvc2Up
OwotICAgICAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKLQotICAgICAgICBnX21haW5fbG9v
cF9xdWl0KG1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIFZlY3RvcjxXZWJWaWV3RXZlbnRzPiBt
X3dlYlZpZXdFdmVudHM7Ci0gICAgV2ViS2l0U2NyaXB0RGlhbG9nVHlwZSBtX3NjcmlwdERpYWxv
Z1R5cGU7Ci0gICAgYm9vbCBtX3NjcmlwdERpYWxvZ0NvbmZpcm1lZDsKLSAgICBib29sIG1fYWxs
b3dQZXJtaXNzaW9uUmVxdWVzdHM7Ci0gICAgV2luZG93UHJvcGVydGllcyBtX3dpbmRvd1Byb3Bl
cnRpZXM7Ci0gICAgSGFzaFNldDxXVEY6OlN0cmluZz4gbV93aW5kb3dQcm9wZXJ0aWVzQ2hhbmdl
ZDsKLSAgICBHUmVmUHRyPFdlYktpdEhpdFRlc3RSZXN1bHQ+IG1fbW91c2VUYXJnZXRIaXRUZXN0
UmVzdWx0OwotICAgIHVuc2lnbmVkIG1fbW91c2VUYXJnZXRNb2RpZmllcnM7Ci19OwotCi1zdGF0
aWMgdm9pZCB0ZXN0V2ViVmlld0NyZWF0ZVJlYWR5Q2xvc2UoVUlDbGllbnRUZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keSBvbkxvYWQ9
XCJ3aW5kb3cub3BlbigpLmNsb3NlKCk7XCI+PC9odG1sPiIsIDApOwotICAgIHRlc3QtPndhaXRV
bnRpbE1haW5Mb29wRmluaXNoZXMoKTsKLQotICAgIFZlY3RvcjxVSUNsaWVudFRlc3Q6OldlYlZp
ZXdFdmVudHM+JiBldmVudHMgPSB0ZXN0LT5tX3dlYlZpZXdFdmVudHM7Ci0gICAgZ19hc3NlcnRf
Y21waW50KGV2ZW50cy5zaXplKCksID09LCAzKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRz
WzBdLCA9PSwgVUlDbGllbnRUZXN0OjpDcmVhdGUpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVu
dHNbMV0sID09LCBVSUNsaWVudFRlc3Q6OlJlYWR5VG9TaG93KTsKLSAgICBnX2Fzc2VydF9jbXBp
bnQoZXZlbnRzWzJdLCA9PSwgVUlDbGllbnRUZXN0OjpDbG9zZSk7Ci19Ci0KLXN0YXRpYyBnYm9v
bGVhbiBjaGVja01pbWVUeXBlRm9yRmlsdGVyKEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciwgY29uc3Qg
Z2NoYXIqIG1pbWVUeXBlKQotewotICAgIEd0a0ZpbGVGaWx0ZXJJbmZvIGZpbHRlckluZm87Ci0g
ICAgZmlsdGVySW5mby5jb250YWlucyA9IEdUS19GSUxFX0ZJTFRFUl9NSU1FX1RZUEU7Ci0gICAg
ZmlsdGVySW5mby5taW1lX3R5cGUgPSBtaW1lVHlwZTsKLSAgICByZXR1cm4gZ3RrX2ZpbGVfZmls
dGVyX2ZpbHRlcihmaWx0ZXIsICZmaWx0ZXJJbmZvKTsKLX0KLQotY2xhc3MgTW9kYWxEaWFsb2dz
VGVzdDogcHVibGljIFVJQ2xpZW50VGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1Rf
RklYVFVSRShNb2RhbERpYWxvZ3NUZXN0KTsKLQotICAgIHN0YXRpYyB2b2lkIGRpYWxvZ1J1bkFz
TW9kYWxDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBNb2RhbERpYWxvZ3NUZXN0KiB0
ZXN0KQotICAgIHsKLSAgICAgICAgZ19hc3NlcnQod2ViVmlldyAhPSB0ZXN0LT5tX3dlYlZpZXcp
OwotICAgICAgICB0ZXN0LT5tX3dlYlZpZXdFdmVudHMuYXBwZW5kKFJ1bkFzTW9kYWwpOwotICAg
IH0KLQotICAgIEd0a1dpZGdldCogdmlld0NyZWF0ZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQot
ICAgIHsKLSAgICAgICAgZ19hc3NlcnQod2ViVmlldyA9PSBtX3dlYlZpZXcpOwotCi0gICAgICAg
IEd0a1dpZGdldCogbmV3V2ViVmlldyA9IFVJQ2xpZW50VGVzdDo6dmlld0NyZWF0ZSh3ZWJWaWV3
KTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChuZXdXZWJWaWV3LCAicnVuLWFzLW1vZGFsIiwg
R19DQUxMQkFDSyhkaWFsb2dSdW5Bc01vZGFsQ2FsbGJhY2spLCB0aGlzKTsKLSAgICAgICAgcmV0
dXJuIG5ld1dlYlZpZXc7Ci0gICAgfQotCi0gICAgdm9pZCB2aWV3UmVhZHlUb1Nob3coV2ViS2l0
V2ViVmlldyogd2ViVmlldykKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0KHdlYlZpZXcgIT0gbV93
ZWJWaWV3KTsKLSAgICAgICAgbV93ZWJWaWV3RXZlbnRzLmFwcGVuZChSZWFkeVRvU2hvdyk7Ci0g
ICAgfQotfTsKLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdBbGxvd01vZGFsRGlhbG9ncyhNb2Rh
bERpYWxvZ3NUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIFdlYktpdFNldHRpbmdz
KiBzZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3ModGVzdC0+bV93ZWJWaWV3
KTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2FsbG93X21vZGFsX2RpYWxvZ3Moc2V0dGluZ3Ms
IFRSVUUpOwotCi0gICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxib2R5IG9ubG9hZD1cIndpbmRv
dy5zaG93TW9kYWxEaWFsb2coJ2RhdGE6dGV4dC9odG1sLDxodG1sPjxib2R5Lz48c2NyaXB0Pndp
bmRvdy5jbG9zZSgpOzwvc2NyaXB0PjwvaHRtbD4nKVwiPjwvYm9keT48L2h0bWw+IiwgMCk7Ci0g
ICAgdGVzdC0+d2FpdFVudGlsTWFpbkxvb3BGaW5pc2hlcygpOwotCi0gICAgVmVjdG9yPFVJQ2xp
ZW50VGVzdDo6V2ViVmlld0V2ZW50cz4mIGV2ZW50cyA9IHRlc3QtPm1fd2ViVmlld0V2ZW50czsK
LSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDQpOwotICAgIGdfYXNzZXJ0
X2NtcGludChldmVudHNbMF0sID09LCBVSUNsaWVudFRlc3Q6OkNyZWF0ZSk7Ci0gICAgZ19hc3Nl
cnRfY21waW50KGV2ZW50c1sxXSwgPT0sIFVJQ2xpZW50VGVzdDo6UmVhZHlUb1Nob3cpOwotICAg
IGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBVSUNsaWVudFRlc3Q6OlJ1bkFzTW9kYWwp
OwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbM10sID09LCBVSUNsaWVudFRlc3Q6OkNsb3Nl
KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdEaXNhbGxvd01vZGFsRGlhbG9ncyhNb2Rh
bERpYWxvZ3NUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIFdlYktpdFNldHRpbmdz
KiBzZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3ModGVzdC0+bV93ZWJWaWV3
KTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2FsbG93X21vZGFsX2RpYWxvZ3Moc2V0dGluZ3Ms
IEZBTFNFKTsKLQotICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keSBvbmxvYWQ9XCJ3aW5k
b3cuc2hvd01vZGFsRGlhbG9nKCdkYXRhOnRleHQvaHRtbCw8aHRtbD48Ym9keS8+PHNjcmlwdD53
aW5kb3cuY2xvc2UoKTs8L3NjcmlwdD48L2h0bWw+JylcIj48L2JvZHk+PC9odG1sPiIsIDApOwot
ICAgIC8vIFdlIG5lZWQgdG8gdXNlIGEgdGltZW91dCBoZXJlIGJlY2F1c2UgdGhlIHZpZXdDbG9z
ZSgpIGZ1bmN0aW9uCi0gICAgLy8gd29uJ3QgZXZlciBiZSBjYWxsZWQgYXMgdGhlIGRpYWxvZyB3
b24ndCBiZSBjcmVhdGVkLgotICAgIHRlc3QtPndhaXQoMSk7Ci0KLSAgICBWZWN0b3I8VUlDbGll
bnRUZXN0OjpXZWJWaWV3RXZlbnRzPiYgZXZlbnRzID0gdGVzdC0+bV93ZWJWaWV3RXZlbnRzOwot
ICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgMCk7Ci19Ci0KLXN0YXRpYyB2
b2lkIHRlc3RXZWJWaWV3SmF2YVNjcmlwdERpYWxvZ3MoVUlDbGllbnRUZXN0KiB0ZXN0LCBnY29u
c3Rwb2ludGVyKQotewotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBodG1sT25Mb2FkRm9ybWF0ID0g
IjxodG1sPjxib2R5IG9uTG9hZD1cIiVzXCI+PC9ib2R5PjwvaHRtbD4iOwotICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBqc0FsZXJ0Rm9ybWF0ID0gImFsZXJ0KCclcycpIjsKLSAgICBzdGF0aWMgY29u
c3QgY2hhcioganNDb25maXJtRm9ybWF0ID0gImRvIHsgY29uZmlybWVkID0gY29uZmlybSgnJXMn
KTsgfSB3aGlsZSAoIWNvbmZpcm1lZCk7IGFsZXJ0KCdjb25maXJtZWQnKTsiOwotICAgIHN0YXRp
YyBjb25zdCBjaGFyKiBqc1Byb21wdEZvcm1hdCA9ICJhbGVydChwcm9tcHQoJyVzJywgJ2RlZmF1
bHQnKSk7IjsKLQotICAgIHRlc3QtPm1fc2NyaXB0RGlhbG9nVHlwZSA9IFdFQktJVF9TQ1JJUFRf
RElBTE9HX0FMRVJUOwotICAgIEdPd25QdHI8Y2hhcj4gYWxlcnREaWFsb2dNZXNzYWdlKGdfc3Ry
ZHVwX3ByaW50Zihqc0FsZXJ0Rm9ybWF0LCBrQWxlcnREaWFsb2dNZXNzYWdlKSk7Ci0gICAgR093
blB0cjxjaGFyPiBhbGVydEhUTUwoZ19zdHJkdXBfcHJpbnRmKGh0bWxPbkxvYWRGb3JtYXQsIGFs
ZXJ0RGlhbG9nTWVzc2FnZS5nZXQoKSkpOwotICAgIHRlc3QtPmxvYWRIdG1sKGFsZXJ0SFRNTC5n
ZXQoKSwgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTWFpbkxvb3BGaW5pc2hlcygpOwotCi0gICAg
dGVzdC0+bV9zY3JpcHREaWFsb2dUeXBlID0gV0VCS0lUX1NDUklQVF9ESUFMT0dfQ09ORklSTTsK
LSAgICBHT3duUHRyPGNoYXI+IGNvbmZpcm1EaWFsb2dNZXNzYWdlKGdfc3RyZHVwX3ByaW50Zihq
c0NvbmZpcm1Gb3JtYXQsIGtDb25maXJtRGlhbG9nTWVzc2FnZSkpOwotICAgIEdPd25QdHI8Y2hh
cj4gY29uZmlybUhUTUwoZ19zdHJkdXBfcHJpbnRmKGh0bWxPbkxvYWRGb3JtYXQsIGNvbmZpcm1E
aWFsb2dNZXNzYWdlLmdldCgpKSk7Ci0gICAgdGVzdC0+bG9hZEh0bWwoY29uZmlybUhUTUwuZ2V0
KCksIDApOwotICAgIHRlc3QtPndhaXRVbnRpbE1haW5Mb29wRmluaXNoZXMoKTsKLQotICAgIHRl
c3QtPm1fc2NyaXB0RGlhbG9nVHlwZSA9IFdFQktJVF9TQ1JJUFRfRElBTE9HX1BST01QVDsKLSAg
ICBHT3duUHRyPGNoYXI+IHByb21wdERpYWxvZ01lc3NhZ2UoZ19zdHJkdXBfcHJpbnRmKGpzUHJv
bXB0Rm9ybWF0LCBrUHJvbXB0RGlhbG9nTWVzc2FnZSkpOwotICAgIEdPd25QdHI8Y2hhcj4gcHJv
bXB0SFRNTChnX3N0cmR1cF9wcmludGYoaHRtbE9uTG9hZEZvcm1hdCwgcHJvbXB0RGlhbG9nTWVz
c2FnZS5nZXQoKSkpOwotICAgIHRlc3QtPmxvYWRIdG1sKHByb21wdEhUTUwuZ2V0KCksIDApOwot
ICAgIHRlc3QtPndhaXRVbnRpbE1haW5Mb29wRmluaXNoZXMoKTsKLX0KLQotc3RhdGljIHZvaWQg
dGVzdFdlYlZpZXdXaW5kb3dQcm9wZXJ0aWVzKFVJQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9p
bnRlcikKLXsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogd2luZG93UHJvcnBlcnRpZXNTdHJpbmcg
PSAibGVmdD0xMDAsdG9wPTE1MCx3aWR0aD00MDAsaGVpZ2h0PTQwMCxsb2NhdGlvbj1ubyxtZW51
YmFyPW5vLHN0YXR1cz1ubyx0b29sYmFyPW5vLHNjcm9sbGJhcnM9bm8iOwotICAgIEdka1JlY3Rh
bmdsZSBnZW9tZXRyeSA9IHsgMTAwLCAxNTAsIDQwMCwgNDAwIH07Ci0gICAgdGVzdC0+c2V0RXhw
ZWN0ZWRXaW5kb3dQcm9wZXJ0aWVzKFVJQ2xpZW50VGVzdDo6V2luZG93UHJvcGVydGllcygmZ2Vv
bWV0cnksIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UpKTsK
LQotICAgIEdPd25QdHI8Y2hhcj4gaHRtbFN0cmluZyhnX3N0cmR1cF9wcmludGYoIjxodG1sPjxi
b2R5IG9uTG9hZD1cIndpbmRvdy5vcGVuKCcnLCAnJywgJyVzJykuY2xvc2UoKTtcIj48L2JvZHk+
PC9odG1sPiIsIHdpbmRvd1Byb3JwZXJ0aWVzU3RyaW5nKSk7Ci0gICAgdGVzdC0+bG9hZEh0bWwo
aHRtbFN0cmluZy5nZXQoKSwgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTWFpbkxvb3BGaW5pc2hl
cygpOwotCi0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHByb3BlcnRpZXNDaGFuZ2VkW10gPSB7Ci0g
ICAgICAgICJnZW9tZXRyeSIsICJsb2NhdGlvbmJhci12aXNpYmxlIiwgIm1lbnViYXItdmlzaWJs
ZSIsICJzdGF0dXNiYXItdmlzaWJsZSIsICJ0b29sYmFyLXZpc2libGUiLCAic2Nyb2xsYmFycy12
aXNpYmxlIgotICAgIH07Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMo
cHJvcGVydGllc0NoYW5nZWQpOyArK2kpCi0gICAgICAgIGdfYXNzZXJ0KHRlc3QtPm1fd2luZG93
UHJvcGVydGllc0NoYW5nZWQuY29udGFpbnMocHJvcGVydGllc0NoYW5nZWRbaV0pKTsKLQotICAg
IFZlY3RvcjxVSUNsaWVudFRlc3Q6OldlYlZpZXdFdmVudHM+JiBldmVudHMgPSB0ZXN0LT5tX3dl
YlZpZXdFdmVudHM7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAzKTsK
LSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgVUlDbGllbnRUZXN0OjpDcmVhdGUp
OwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBVSUNsaWVudFRlc3Q6OlJlYWR5
VG9TaG93KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgVUlDbGllbnRUZXN0
OjpDbG9zZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3TW91c2VUYXJnZXQoVUlDbGll
bnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPnNob3dJbldpbmRvd0Fu
ZFdhaXRVbnRpbE1hcHBlZChHVEtfV0lORE9XX1RPUExFVkVMKTsKLQotICAgIGNvbnN0IGNoYXIq
IGxpbmtzSG92ZXJlZEhUTUwgPQotICAgICAgICAiPGh0bWw+PGJvZHk+IgotICAgICAgICAiIDxh
IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6MScgaHJlZj0naHR0cDovL3d3
dy53ZWJraXRndGsub3JnJyB0aXRsZT0nV2ViS2l0R1RLKyBUaXRsZSc+V2ViS2l0R1RLKyBXZWJz
aXRlPC9hPiIKLSAgICAgICAgIiA8aW1nIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDox
OyB0b3A6MTAnIHNyYz0nMHhkZWFkYmVlZicgd2lkdGg9NSBoZWlnaHQ9NT48L2ltZz4iCi0gICAg
ICAgICIgPGEgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRvcDoyMCcgaHJlZj0n
aHR0cDovL3d3dy53ZWJraXRndGsub3JnL2xvZ28nIHRpdGxlPSdXZWJLaXRHVEsrIExvZ28nPjxp
bWcgc3JjPScweGRlYWRiZWVmJyB3aWR0aD01IGhlaWdodD01PjwvaW1nPjwvYT4iCi0gICAgICAg
ICIgPGlucHV0IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6MzAnIHNpemU9
JzEwJz48L2lucHV0PiIKLSAgICAgICAgIiA8ZGl2IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsg
bGVmdDoxOyB0b3A6NTA7IHdpZHRoOjMwOyBoZWlnaHQ6MzA7IG92ZXJmbG93OnNjcm9sbCc+Jm5i
c3A7PC9kaXY+IgotICAgICAgICAiIDx2aWRlbyBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxl
ZnQ6MTsgdG9wOjEwMCcgd2lkdGg9JzMwMCcgaGVpZ2h0PSczMDAnIGNvbnRyb2xzPSdjb250cm9s
cycgcHJlbG9hZD0nbm9uZSc+PHNvdXJjZSBzcmM9J21vdmllLm9nZycgdHlwZT0ndmlkZW8vb2dn
JyAvPjwvdmlkZW8+IgotICAgICAgICAiPC9ib2R5PjwvaHRtbD4iOwotCi0gICAgdGVzdC0+bG9h
ZEh0bWwobGlua3NIb3ZlcmVkSFRNTCwgImZpbGU6Ly8vIik7Ci0gICAgdGVzdC0+d2FpdFVudGls
TG9hZEZpbmlzaGVkKCk7Ci0KLSAgICAvLyBNb3ZlIG92ZXIgbGluay4KLSAgICBXZWJLaXRIaXRU
ZXN0UmVzdWx0KiBoaXRUZXN0UmVzdWx0ID0gdGVzdC0+bW92ZU1vdXNlQW5kV2FpdFVudGlsTW91
c2VUYXJnZXRDaGFuZ2VkKDEsIDEpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1
bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0
X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBn
X2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RS
ZXN1bHQpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lz
X2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2hp
dF90ZXN0X3Jlc3VsdF9nZXRfbGlua191cmkoaGl0VGVzdFJlc3VsdCksID09LCAiaHR0cDovL3d3
dy53ZWJraXRndGsub3JnLyIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfaGl0X3Rlc3Rf
cmVzdWx0X2dldF9saW5rX3RpdGxlKGhpdFRlc3RSZXN1bHQpLCA9PSwgIldlYktpdEdUSysgVGl0
bGUiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfbGlu
a19sYWJlbChoaXRUZXN0UmVzdWx0KSwgPT0sICJXZWJLaXRHVEsrIFdlYnNpdGUiKTsKLSAgICBn
X2Fzc2VydCghdGVzdC0+bV9tb3VzZVRhcmdldE1vZGlmaWVycyk7Ci0KLSAgICAvLyBNb3ZlIG91
dCBvZiB0aGUgbGluay4KLSAgICBoaXRUZXN0UmVzdWx0ID0gdGVzdC0+bW92ZU1vdXNlQW5kV2Fp
dFVudGlsTW91c2VUYXJnZXRDaGFuZ2VkKDAsIDApOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0
X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluayhoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3Nl
cnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0
KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRp
YShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRf
Y29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIXRlc3Qt
Pm1fbW91c2VUYXJnZXRNb2RpZmllcnMpOwotCi0gICAgLy8gTW92ZSBvdmVyIGltYWdlIHdpdGgg
R0RLX0NPTlRST0xfTUFTSy4KLSAgICBoaXRUZXN0UmVzdWx0ID0gdGVzdC0+bW92ZU1vdXNlQW5k
V2FpdFVudGlsTW91c2VUYXJnZXRDaGFuZ2VkKDEsIDEwLCBHREtfQ09OVFJPTF9NQVNLKTsKLSAg
ICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xpbmsoaGl0VGVz
dFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9p
c19pbWFnZShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9y
ZXN1bHRfY29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIXdl
YmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0UmVzdWx0KSk7
Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19zY3JvbGxi
YXIoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfaGl0X3Rlc3Rf
cmVzdWx0X2dldF9pbWFnZV91cmkoaGl0VGVzdFJlc3VsdCksID09LCAiZmlsZTovLy8weGRlYWRi
ZWVmIik7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV9tb3VzZVRhcmdldE1vZGlmaWVycyAmIEdES19D
T05UUk9MX01BU0spOwotCi0gICAgLy8gTW92ZSBvdmVyIGltYWdlIGxpbmsuCi0gICAgaGl0VGVz
dFJlc3VsdCA9IHRlc3QtPm1vdmVNb3VzZUFuZFdhaXRVbnRpbE1vdXNlVGFyZ2V0Q2hhbmdlZCgx
LCAyMCk7Ci0gICAgZ19hc3NlcnQod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xp
bmsoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRf
Y29udGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9o
aXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19h
c3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0
UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9p
c19zY3JvbGxiYXIoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRf
aGl0X3Rlc3RfcmVzdWx0X2dldF9saW5rX3VyaShoaXRUZXN0UmVzdWx0KSwgPT0sICJodHRwOi8v
d3d3LndlYmtpdGd0ay5vcmcvbG9nbyIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfaGl0
X3Rlc3RfcmVzdWx0X2dldF9pbWFnZV91cmkoaGl0VGVzdFJlc3VsdCksID09LCAiZmlsZTovLy8w
eGRlYWRiZWVmIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRf
Z2V0X2xpbmtfdGl0bGUoaGl0VGVzdFJlc3VsdCksID09LCAiV2ViS2l0R1RLKyBMb2dvIik7Ci0g
ICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2xpbmtfbGFiZWwoaGl0VGVz
dFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX21vdXNlVGFyZ2V0TW9kaWZpZXJzKTsK
LQotICAgIC8vIE1vdmUgb3ZlciBtZWRpYS4KLSAgICBoaXRUZXN0UmVzdWx0ID0gdGVzdC0+bW92
ZU1vdXNlQW5kV2FpdFVudGlsTW91c2VUYXJnZXRDaGFuZ2VkKDEsIDEwMCk7Ci0gICAgZ19hc3Nl
cnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RSZXN1bHQp
KTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdl
KGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2Nv
bnRleHRfaXNfbWVkaWEoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0
X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdf
YXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfc2Nyb2xsYmFyKGhpdFRl
c3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9n
ZXRfbWVkaWFfdXJpKGhpdFRlc3RSZXN1bHQpLCA9PSwgImZpbGU6Ly8vbW92aWUub2dnIik7Ci0g
ICAgZ19hc3NlcnQoIXRlc3QtPm1fbW91c2VUYXJnZXRNb2RpZmllcnMpOwotCi0gICAgLy8gTW92
ZXIgb3ZlciBpbnB1dC4KLSAgICBoaXRUZXN0UmVzdWx0ID0gdGVzdC0+bW92ZU1vdXNlQW5kV2Fp
dFVudGlsTW91c2VUYXJnZXRDaGFuZ2VkKDUsIDM1KTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2hp
dF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xpbmsoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3Vs
dCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbWVk
aWEoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0
X2NvbnRleHRfaXNfc2Nyb2xsYmFyKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCh3ZWJr
aXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkpOwot
ICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX21vdXNlVGFyZ2V0TW9kaWZpZXJzKTsKLQotICAgIC8vIE1v
dmUgb3ZlciBzY3JvbGxiYXIuCi0gICAgaGl0VGVzdFJlc3VsdCA9IHRlc3QtPm1vdmVNb3VzZUFu
ZFdhaXRVbnRpbE1vdXNlVGFyZ2V0Q2hhbmdlZCg1LCA3NSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtp
dF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBn
X2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdlKGhpdFRlc3RS
ZXN1bHQpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lz
X21lZGlhKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jl
c3VsdF9jb250ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCh3
ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfc2Nyb2xsYmFyKGhpdFRlc3RSZXN1bHQp
KTsKLSAgICBnX2Fzc2VydCghdGVzdC0+bV9tb3VzZVRhcmdldE1vZGlmaWVycyk7Ci19Ci0KLXN0
YXRpYyB2b2lkIHRlc3RXZWJWaWV3UGVybWlzc2lvblJlcXVlc3RzKFVJQ2xpZW50VGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICAvLyBTb21lIHZlcnNpb25zIG9mIGdlb2NsdWUgZ2l2
ZSBhIHJ1bnRpbWUgd2FybmluZyBiZWNhdXNlIGl0IHRyaWVzCi0gICAgLy8gdG8gcmVnaXN0ZXIg
dGhlIGVycm9yIHF1YXJrIHR3aWNlLiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTg5ODU4LgotICAgIC8vIE1ha2Ugd2FybmluZ3Mgbm9uLWZhdGFsIGZvciB0aGlz
IHRlc3QgdG8gbWFrZSBpdCBwYXNzLgotICAgIHRlc3QtPnJlbW92ZUxvZ0ZhdGFsRmxhZyhHX0xP
R19MRVZFTF9XQVJOSU5HKTsKLSAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBw
ZWQoKTsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogZ2VvbG9jYXRpb25SZXF1ZXN0SFRNTCA9Ci0g
ICAgICAgICI8aHRtbD4iCi0gICAgICAgICIgIDxzY3JpcHQ+IgotICAgICAgICAiICBmdW5jdGlv
biBydW5UZXN0KCkiCi0gICAgICAgICIgIHsiCi0gICAgICAgICIgICAgbmF2aWdhdG9yLmdlb2xv
Y2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihmdW5jdGlvbihwKSB7IGRvY3VtZW50LnRpdGxlID0g
XCJPS1wiIH0sIgotICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZnVuY3Rpb24oZSkgeyBkb2N1bWVudC50aXRsZSA9IGUuY29kZSB9KTsiCi0gICAg
ICAgICIgIH0iCi0gICAgICAgICIgIDwvc2NyaXB0PiIKLSAgICAgICAgIiAgPGJvZHkgb25sb2Fk
PSdydW5UZXN0KCk7Jz48L2JvZHk+IgotICAgICAgICAiPC9odG1sPiI7Ci0KLSAgICAvLyBUZXN0
IGRlbnlpbmcgYSBwZXJtaXNzaW9uIHJlcXVlc3QuCi0gICAgdGVzdC0+bV9hbGxvd1Blcm1pc3Np
b25SZXF1ZXN0cyA9IGZhbHNlOwotICAgIHRlc3QtPmxvYWRIdG1sKGdlb2xvY2F0aW9uUmVxdWVz
dEhUTUwsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbFRpdGxlQ2hhbmdlZCgpOwotCi0gICAgLy8g
QWNjb3JkaW5nIHRvIHRoZSBHZW9sb2NhdGlvbiBBUEkgc3BlY2lmaWNhdGlvbiwgJzEnIGlzIHRo
ZQotICAgIC8vIGVycm9yIGNvZGUgcmV0dXJuZWQgZm9yIHRoZSBQRVJNSVNTSU9OX0RFTklFRCBl
cnJvci4KLSAgICAvLyBodHRwOi8vZGV2LnczLm9yZy9nZW8vYXBpL3NwZWMtc291cmNlLmh0bWwj
cG9zaXRpb25fZXJyb3JfaW50ZXJmYWNlCi0gICAgY29uc3QgZ2NoYXIqIHJlc3VsdCA9IHdlYmtp
dF93ZWJfdmlld19nZXRfdGl0bGUodGVzdC0+bV93ZWJWaWV3KTsKLSAgICBnX2Fzc2VydF9jbXBz
dHIocmVzdWx0LCA9PSwgIjEiKTsKLQotICAgIC8vIFRlc3QgYWxsb3dpbmcgYSBwZXJtaXNzaW9u
IHJlcXVlc3QuCi0gICAgdGVzdC0+bV9hbGxvd1Blcm1pc3Npb25SZXF1ZXN0cyA9IHRydWU7Ci0g
ICAgdGVzdC0+bG9hZEh0bWwoZ2VvbG9jYXRpb25SZXF1ZXN0SFRNTCwgMCk7Ci0gICAgdGVzdC0+
d2FpdFVudGlsVGl0bGVDaGFuZ2VkKCk7Ci0KLSAgICAvLyBDaGVjayB0aGF0IHdlIGRpZCBub3Qg
Z2V0IHRoZSBQRVJNSVNTSU9OX0RFTklFRCBlcnJvciBub3cuCi0gICAgcmVzdWx0ID0gd2Via2l0
X3dlYl92aWV3X2dldF90aXRsZSh0ZXN0LT5tX3dlYlZpZXcpOwotICAgIGdfYXNzZXJ0X2NtcHN0
cihyZXN1bHQsICE9LCAiMSIpOwotICAgIHRlc3QtPmFkZExvZ0ZhdGFsRmxhZyhHX0xPR19MRVZF
TF9XQVJOSU5HKTsKLX0KLQotY2xhc3MgRmlsZUNob29zZXJUZXN0OiBwdWJsaWMgVUlDbGllbnRU
ZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKEZpbGVDaG9vc2VyVGVz
dCk7Ci0KLSAgICBGaWxlQ2hvb3NlclRlc3QoKQotICAgIHsKLSAgICAgICAgZ19zaWduYWxfY29u
bmVjdChtX3dlYlZpZXcsICJydW4tZmlsZS1jaG9vc2VyIiwgR19DQUxMQkFDSyhydW5GaWxlQ2hv
b3NlckNhbGxiYWNrKSwgdGhpcyk7Ci0gICAgfQotCi0gICAgc3RhdGljIGdib29sZWFuIHJ1bkZp
bGVDaG9vc2VyQ2FsbGJhY2soV2ViS2l0V2ViVmlldyosIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVz
dCogcmVxdWVzdCwgRmlsZUNob29zZXJUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+
cnVuRmlsZUNob29zZXIocmVxdWVzdCk7Ci0gICAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQot
ICAgIHZvaWQgcnVuRmlsZUNob29zZXIoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0
KQotICAgIHsKLSAgICAgICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhH
X09CSkVDVChyZXF1ZXN0KSk7Ci0gICAgICAgIG1fZmlsZUNob29zZXJSZXF1ZXN0ID0gcmVxdWVz
dDsKLSAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX21haW5Mb29wKTsKLSAgICB9Ci0KLSAgICBX
ZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIGNsaWNrTW91c2VCdXR0b25BbmRXYWl0Rm9yRmlsZUNo
b29zZXJSZXF1ZXN0KGludCB4LCBpbnQgeSkKLSAgICB7Ci0gICAgICAgIGNsaWNrTW91c2VCdXR0
b24oeCwgeSk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAgICAgICAg
cmV0dXJuIG1fZmlsZUNob29zZXJSZXF1ZXN0LmdldCgpOwotICAgIH0KLQotcHJpdmF0ZToKLSAg
ICBHUmVmUHRyPFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdD4gbV9maWxlQ2hvb3NlclJlcXVlc3Q7
Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0ZpbGVDaG9vc2VyUmVxdWVzdChGaWxlQ2hv
b3NlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+c2hvd0luV2luZG93
QW5kV2FpdFVudGlsTWFwcGVkKCk7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGZpbGVDaG9vc2Vy
SFRNTEZvcm1hdCA9ICI8aHRtbD48Ym9keT48aW5wdXQgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRl
O2xlZnQ6MDt0b3A6MDttYXJnaW46MDtwYWRkaW5nOjAnIHR5cGU9J2ZpbGUnICVzLz48L2JvZHk+
PC9odG1sPiI7Ci0KLSAgICAvLyBNdWx0aXBsZSBzZWxlY3Rpb25zIG5vdCBhbGxvd2VkLCBubyBN
SU1FIGZpbHRlcmluZy4KLSAgICBHT3duUHRyPGNoYXI+IHNpbXBsZUZpbGVVcGxvYWRIVE1MKGdf
c3RyZHVwX3ByaW50ZihmaWxlQ2hvb3NlckhUTUxGb3JtYXQsICIiKSk7Ci0gICAgdGVzdC0+bG9h
ZEh0bWwoc2ltcGxlRmlsZVVwbG9hZEhUTUwuZ2V0KCksIDApOwotICAgIHRlc3QtPndhaXRVbnRp
bExvYWRGaW5pc2hlZCgpOwotICAgIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogZmlsZUNob29z
ZXJSZXF1ZXN0ID0gdGVzdC0+Y2xpY2tNb3VzZUJ1dHRvbkFuZFdhaXRGb3JGaWxlQ2hvb3NlclJl
cXVlc3QoNSwgNSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9n
ZXRfc2VsZWN0X211bHRpcGxlKGZpbGVDaG9vc2VyUmVxdWVzdCkpOwotCi0gICAgY29uc3QgZ2No
YXIqIGNvbnN0KiBtaW1lVHlwZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21p
bWVfdHlwZXMoZmlsZUNob29zZXJSZXF1ZXN0KTsKLSAgICBnX2Fzc2VydCghbWltZVR5cGVzKTsK
LSAgICBHdGtGaWxlRmlsdGVyKiBmaWx0ZXIgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rf
Z2V0X21pbWVfdHlwZXNfZmlsdGVyKGZpbGVDaG9vc2VyUmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQo
IWZpbHRlcik7Ci0gICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBzZWxlY3RlZEZpbGVzID0gd2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhmaWxlQ2hvb3NlclJlcXVl
c3QpOwotICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZpbGVzKTsKLSAgICB3ZWJraXRfZmlsZV9jaG9v
c2VyX3JlcXVlc3RfY2FuY2VsKGZpbGVDaG9vc2VyUmVxdWVzdCk7Ci0KLSAgICAvLyBNdWx0aXBs
ZSBzZWxlY3Rpb25zIGFsbG93ZWQsIG5vIE1JTUUgZmlsdGVyaW5nLCBzb21lIHByZS1zZWxlY3Rl
ZCBmaWxlcy4KLSAgICBHT3duUHRyPGNoYXI+IG11bHRpcGxlU2VsZWN0aW9uRmlsZVVwbG9hZEhU
TUwoZ19zdHJkdXBfcHJpbnRmKGZpbGVDaG9vc2VySFRNTEZvcm1hdCwgIm11bHRpcGxlIikpOwot
ICAgIHRlc3QtPmxvYWRIdG1sKG11bHRpcGxlU2VsZWN0aW9uRmlsZVVwbG9hZEhUTUwuZ2V0KCks
IDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGZpbGVDaG9vc2Vy
UmVxdWVzdCA9IHRlc3QtPmNsaWNrTW91c2VCdXR0b25BbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1
ZXN0KDUsIDUpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRf
c2VsZWN0X211bHRpcGxlKGZpbGVDaG9vc2VyUmVxdWVzdCkpOwotCi0gICAgbWltZVR5cGVzID0g
d2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKGZpbGVDaG9vc2VyUmVx
dWVzdCk7Ci0gICAgZ19hc3NlcnQoIW1pbWVUeXBlcyk7Ci0gICAgZmlsdGVyID0gd2Via2l0X2Zp
bGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcihmaWxlQ2hvb3NlclJlcXVl
c3QpOwotICAgIGdfYXNzZXJ0KCFmaWx0ZXIpOwotICAgIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRf
ZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKGZpbGVDaG9vc2VyUmVxdWVz
dCk7Ci0gICAgZ19hc3NlcnQoIXNlbGVjdGVkRmlsZXMpOwotCi0gICAgLy8gU2VsZWN0IHNvbWUg
ZmlsZXMuCi0gICAgY29uc3QgZ2NoYXIqIGZpbGVzVG9TZWxlY3RbNF0gPSB7ICIvZm9vIiwgIi9m
b28vYmFyIiwgIi9mb28vYmFyL2JheiIsIDAgfTsKLSAgICB3ZWJraXRfZmlsZV9jaG9vc2VyX3Jl
cXVlc3Rfc2VsZWN0X2ZpbGVzKGZpbGVDaG9vc2VyUmVxdWVzdCwgZmlsZXNUb1NlbGVjdCk7Ci0K
LSAgICAvLyBDaGVjayB0aGUgZmlsZXMgdGhhdCBoYXZlIGJlZW4ganVzdCBzZWxlY3RlZC4KLSAg
ICBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3Rl
ZF9maWxlcyhmaWxlQ2hvb3NlclJlcXVlc3QpOwotICAgIGdfYXNzZXJ0KHNlbGVjdGVkRmlsZXMp
OwotICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzBdLCA9PSwgIi9mb28iKTsKLSAg
ICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1sxXSwgPT0sICIvZm9vL2JhciIpOwotICAg
IGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzJdLCA9PSwgIi9mb28vYmFyL2JheiIpOwot
ICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZpbGVzWzNdKTsKLQotICAgIC8vIFBlcmZvcm0gYW5vdGhl
ciByZXF1ZXN0IHRvIGNoZWNrIGlmIHRoZSBsaXN0IG9mIGZpbGVzIHNlbGVjdGVkCi0gICAgLy8g
aW4gdGhlIHByZXZpb3VzIHN0ZXAgYXBwZWFycyBub3cgYXMgcGFydCBvZiB0aGUgbmV3IHJlcXVl
c3QuCi0gICAgZmlsZUNob29zZXJSZXF1ZXN0ID0gdGVzdC0+Y2xpY2tNb3VzZUJ1dHRvbkFuZFdh
aXRGb3JGaWxlQ2hvb3NlclJlcXVlc3QoNSwgNSk7Ci0gICAgc2VsZWN0ZWRGaWxlcyA9IHdlYmtp
dF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMoZmlsZUNob29zZXJSZXF1
ZXN0KTsKLSAgICBnX2Fzc2VydChzZWxlY3RlZEZpbGVzKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIo
c2VsZWN0ZWRGaWxlc1swXSwgPT0sICIvZm9vIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHNlbGVj
dGVkRmlsZXNbMV0sID09LCAiL2Zvby9iYXIiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0
ZWRGaWxlc1syXSwgPT0sICIvZm9vL2Jhci9iYXoiKTsKLSAgICBnX2Fzc2VydCghc2VsZWN0ZWRG
aWxlc1szXSk7Ci0gICAgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNlbChmaWxlQ2hv
b3NlclJlcXVlc3QpOwotCi0gICAgLy8gTXVsdGlwbGUgc2VsZWN0aW9ucyBub3QgYWxsb3dlZCwg
b25seSBhY2NlcHQgaW1hZ2VzLCBhdWRpbyBhbmQgdmlkZW8gZmlsZXMuLgotICAgIEdPd25QdHI8
Y2hhcj4gbWltZUZpbHRlcmVkRmlsZVVwbG9hZEhUTUwoZ19zdHJkdXBfcHJpbnRmKGZpbGVDaG9v
c2VySFRNTEZvcm1hdCwgImFjY2VwdD0nYXVkaW8vKix2aWRlby8qLGltYWdlLyonIikpOwotICAg
IHRlc3QtPmxvYWRIdG1sKG1pbWVGaWx0ZXJlZEZpbGVVcGxvYWRIVE1MLmdldCgpLCAwKTsKLSAg
ICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBmaWxlQ2hvb3NlclJlcXVlc3Qg
PSB0ZXN0LT5jbGlja01vdXNlQnV0dG9uQW5kV2FpdEZvckZpbGVDaG9vc2VyUmVxdWVzdCg1LCA1
KTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3Rf
bXVsdGlwbGUoZmlsZUNob29zZXJSZXF1ZXN0KSk7Ci0KLSAgICBtaW1lVHlwZXMgPSB3ZWJraXRf
ZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMoZmlsZUNob29zZXJSZXF1ZXN0KTsK
LSAgICBnX2Fzc2VydChtaW1lVHlwZXMpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihtaW1lVHlwZXNb
MF0sID09LCAiYXVkaW8vKiIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihtaW1lVHlwZXNbMV0sID09
LCAidmlkZW8vKiIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihtaW1lVHlwZXNbMl0sID09LCAiaW1h
Z2UvKiIpOwotICAgIGdfYXNzZXJ0KCFtaW1lVHlwZXNbM10pOwotCi0gICAgZmlsdGVyID0gd2Vi
a2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcihmaWxlQ2hvb3Nl
clJlcXVlc3QpOwotICAgIGdfYXNzZXJ0KEdUS19JU19GSUxFX0ZJTFRFUihmaWx0ZXIpKTsKLSAg
ICBnX2Fzc2VydChjaGVja01pbWVUeXBlRm9yRmlsdGVyKGZpbHRlciwgImF1ZGlvLyoiKSk7Ci0g
ICAgZ19hc3NlcnQoY2hlY2tNaW1lVHlwZUZvckZpbHRlcihmaWx0ZXIsICJ2aWRlby8qIikpOwot
ICAgIGdfYXNzZXJ0KGNoZWNrTWltZVR5cGVGb3JGaWx0ZXIoZmlsdGVyLCAiaW1hZ2UvKiIpKTsK
LQotICAgIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3Nl
bGVjdGVkX2ZpbGVzKGZpbGVDaG9vc2VyUmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQoIXNlbGVjdGVk
RmlsZXMpOwotICAgIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9jYW5jZWwoZmlsZUNob29z
ZXJSZXF1ZXN0KTsKLX0KLQotdm9pZCBiZWZvcmVBbGwoKQotewotICAgIFVJQ2xpZW50VGVzdDo6
YWRkKCJXZWJLaXRXZWJWaWV3IiwgImNyZWF0ZS1yZWFkeS1jbG9zZSIsIHRlc3RXZWJWaWV3Q3Jl
YXRlUmVhZHlDbG9zZSk7Ci0gICAgTW9kYWxEaWFsb2dzVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3
IiwgImFsbG93LW1vZGFsLWRpYWxvZ3MiLCB0ZXN0V2ViVmlld0FsbG93TW9kYWxEaWFsb2dzKTsK
LSAgICBNb2RhbERpYWxvZ3NUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiZGlzYWxsb3ctbW9k
YWwtZGlhbG9ncyIsIHRlc3RXZWJWaWV3RGlzYWxsb3dNb2RhbERpYWxvZ3MpOwotICAgIFVJQ2xp
ZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImphdmFzY3JpcHQtZGlhbG9ncyIsIHRlc3RX
ZWJWaWV3SmF2YVNjcmlwdERpYWxvZ3MpOwotICAgIFVJQ2xpZW50VGVzdDo6YWRkKCJXZWJLaXRX
ZWJWaWV3IiwgIndpbmRvdy1wcm9wZXJ0aWVzIiwgdGVzdFdlYlZpZXdXaW5kb3dQcm9wZXJ0aWVz
KTsKLSAgICBVSUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJtb3VzZS10YXJnZXQi
LCB0ZXN0V2ViVmlld01vdXNlVGFyZ2V0KTsKLSAgICBVSUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0
V2ViVmlldyIsICJwZXJtaXNzaW9uLXJlcXVlc3RzIiwgdGVzdFdlYlZpZXdQZXJtaXNzaW9uUmVx
dWVzdHMpOwotICAgIEZpbGVDaG9vc2VyVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImZpbGUt
Y2hvb3Nlci1yZXF1ZXN0IiwgdGVzdFdlYlZpZXdGaWxlQ2hvb3NlclJlcXVlc3QpOwotfQotCi12
b2lkIGFmdGVyQWxsKCkKLXsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJFeHRlbnNpb25zLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJFeHRlbnNpb25zLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggOTFjYjdhYS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViRXh0ZW5zaW9ucy5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwxOTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5M
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiV2ViS2l0VGVzdEJ1cy5oIgotI2lu
Y2x1ZGUgIldlYlZpZXdUZXN0LmgiCi0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgot
Ci1zdGF0aWMgV2ViS2l0VGVzdEJ1cyogYnVzOwotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViRXh0ZW5z
aW9uR2V0VGl0bGUoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVz
dC0+bG9hZEh0bWwoIjxodG1sPjxoZWFkPjx0aXRsZT5XZWJLaXRHVEsrIFdlYiBFeHRlbnNpb25z
IFRlc3Q8L3RpdGxlPjwvaGVhZD48Ym9keT48L2JvZHk+PC9odG1sPiIsIDApOwotICAgIHRlc3Qt
PndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgR1JlZlB0cjxHREJ1c1Byb3h5PiBwcm94
eSA9IGFkb3B0R1JlZihidXMtPmNyZWF0ZVByb3h5KCJvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNp
b25UZXN0IiwKLSAgICAgICAgIi9vcmcvd2Via2l0L2d0ay9XZWJFeHRlbnNpb25UZXN0IiAsICJv
cmcud2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwgdGVzdC0+bV9tYWluTG9vcCkpOwotICAg
IEdSZWZQdHI8R1ZhcmlhbnQ+IHJlc3VsdCA9IGFkb3B0R1JlZihnX2RidXNfcHJveHlfY2FsbF9z
eW5jKAotICAgICAgICBwcm94eS5nZXQoKSwKLSAgICAgICAgIkdldFRpdGxlIiwKLSAgICAgICAg
Z192YXJpYW50X25ldygiKHQpIiwgd2Via2l0X3dlYl92aWV3X2dldF9wYWdlX2lkKHRlc3QtPm1f
d2ViVmlldykpLAotICAgICAgICBHX0RCVVNfQ0FMTF9GTEFHU19OT05FLAotICAgICAgICAtMSwg
MCwgMCkpOwotICAgIGdfYXNzZXJ0KHJlc3VsdCk7Ci0KLSAgICBjb25zdCBjaGFyKiB0aXRsZTsK
LSAgICBnX3ZhcmlhbnRfZ2V0KHJlc3VsdC5nZXQoKSwgIigmcykiLCAmdGl0bGUpOwotICAgIGdf
YXNzZXJ0X2NtcHN0cih0aXRsZSwgPT0sICJXZWJLaXRHVEsrIFdlYiBFeHRlbnNpb25zIFRlc3Qi
KTsKLX0KLQotc3RhdGljIHZvaWQgZG9jdW1lbnRMb2FkZWRDYWxsYmFjayhHREJ1c0Nvbm5lY3Rp
b24qLCBjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwg
R1ZhcmlhbnQqLCBXZWJWaWV3VGVzdCogdGVzdCkKLXsKLSAgICBnX21haW5fbG9vcF9xdWl0KHRl
c3QtPm1fbWFpbkxvb3ApOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0RG9jdW1lbnRMb2FkZWRTaWdu
YWwoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgR1JlZlB0cjxHREJ1
c1Byb3h5PiBwcm94eSA9IGFkb3B0R1JlZihidXMtPmNyZWF0ZVByb3h5KCJvcmcud2Via2l0Lmd0
ay5XZWJFeHRlbnNpb25UZXN0IiwKLSAgICAgICAgIi9vcmcvd2Via2l0L2d0ay9XZWJFeHRlbnNp
b25UZXN0IiwgIm9yZy53ZWJraXQuZ3RrLldlYkV4dGVuc2lvblRlc3QiLCB0ZXN0LT5tX21haW5M
b29wKSk7Ci0gICAgR0RCdXNDb25uZWN0aW9uKiBjb25uZWN0aW9uID0gZ19kYnVzX3Byb3h5X2dl
dF9jb25uZWN0aW9uKHByb3h5LmdldCgpKTsKLSAgICBndWludCBpZCA9IGdfZGJ1c19jb25uZWN0
aW9uX3NpZ25hbF9zdWJzY3JpYmUoY29ubmVjdGlvbiwKLSAgICAgICAgMCwKLSAgICAgICAgIm9y
Zy53ZWJraXQuZ3RrLldlYkV4dGVuc2lvblRlc3QiLAotICAgICAgICAiRG9jdW1lbnRMb2FkZWQi
LAotICAgICAgICAiL29yZy93ZWJraXQvZ3RrL1dlYkV4dGVuc2lvblRlc3QiLAotICAgICAgICAw
LAotICAgICAgICBHX0RCVVNfU0lHTkFMX0ZMQUdTX05PTkUsCi0gICAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8R0RCdXNTaWduYWxDYWxsYmFjaz4oZG9jdW1lbnRMb2FkZWRDYWxsYmFjayksCi0gICAg
ICAgIHRlc3QsCi0gICAgICAgIDApOwotICAgIGdfYXNzZXJ0KGlkKTsKLQotICAgIHRlc3QtPmxv
YWRIdG1sKCI8aHRtbD48aGVhZD48dGl0bGU+V2ViS2l0R1RLKyBXZWIgRXh0ZW5zaW9ucyBUZXN0
PC90aXRsZT48L2hlYWQ+PGJvZHk+PC9ib2R5PjwvaHRtbD4iLCAwKTsKLSAgICBnX21haW5fbG9v
cF9ydW4odGVzdC0+bV9tYWluTG9vcCk7Ci0gICAgZ19kYnVzX2Nvbm5lY3Rpb25fc2lnbmFsX3Vu
c3Vic2NyaWJlKGNvbm5lY3Rpb24sIGlkKTsKLX0KLQotc3RhdGljIGdib29sZWFuIHdlYlByb2Nl
c3NDcmFzaGVkQ2FsbGJhY2soV2ViS2l0V2ViVmlldyosIFdlYlZpZXdUZXN0KiB0ZXN0KQotewot
ICAgIHRlc3QtPnF1aXRNYWluTG9vcCgpOwotCi0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0
aWMgdm9pZCB0ZXN0V2ViS2l0V2ViVmlld1Byb2Nlc3NDcmFzaGVkKFdlYlZpZXdUZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48L2h0bWw+Iiwg
MCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBnX3NpZ25hbF9j
b25uZWN0KHRlc3QtPm1fd2ViVmlldywgIndlYi1wcm9jZXNzLWNyYXNoZWQiLAotICAgICAgICBH
X0NBTExCQUNLKHdlYlByb2Nlc3NDcmFzaGVkQ2FsbGJhY2spLCB0ZXN0KTsKLQotICAgIEdSZWZQ
dHI8R0RCdXNQcm94eT4gcHJveHkgPSBhZG9wdEdSZWYoYnVzLT5jcmVhdGVQcm94eSgib3JnLndl
YmtpdC5ndGsuV2ViRXh0ZW5zaW9uVGVzdCIsCi0gICAgICAgICIvb3JnL3dlYmtpdC9ndGsvV2Vi
RXh0ZW5zaW9uVGVzdCIsICJvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwgdGVzdC0+
bV9tYWluTG9vcCkpOwotCi0gICAgR1JlZlB0cjxHVmFyaWFudD4gcmVzdWx0ID0gYWRvcHRHUmVm
KGdfZGJ1c19wcm94eV9jYWxsX3N5bmMoCi0gICAgICAgIHByb3h5LmdldCgpLAotICAgICAgICAi
QWJvcnRQcm9jZXNzIiwKLSAgICAgICAgMCwKLSAgICAgICAgR19EQlVTX0NBTExfRkxBR1NfTk9O
RSwKLSAgICAgICAgLTEsIDAsIDApKTsKLSAgICBnX2Fzc2VydCghcmVzdWx0KTsKLSAgICBnX21h
aW5fbG9vcF9ydW4odGVzdC0+bV9tYWluTG9vcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJF
eHRlbnNpb25XaW5kb3dPYmplY3RDbGVhcmVkKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2lu
dGVyKQotewotICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48aGVhZGVyPjwvaGVhZGVyPjxib2R5
PjwvYm9keT48L2h0bWw+IiwgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7
Ci0KLSAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgV2ViS2l0SmF2YXNjcmlwdFJlc3Vs
dCogamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5p
c2hlZCgid2luZG93LmVjaG8oJ0ZvbycpOyIsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgZ19hc3Nl
cnQoamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKLSAgICBH
T3duUHRyPGNoYXI+IHZhbHVlU3RyaW5nKFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9D
U3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJp
bmcuZ2V0KCksID09LCAiRm9vIik7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBzY3JpcHREaWFsb2dD
YWxsYmFjayhXZWJLaXRXZWJWaWV3KiwgV2ViS2l0U2NyaXB0RGlhbG9nKiBkaWFsb2csIGNoYXIq
KiByZXN1bHQpCi17Ci0gICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfc2NyaXB0X2RpYWxvZ19n
ZXRfZGlhbG9nX3R5cGUoZGlhbG9nKSwgPT0sIFdFQktJVF9TQ1JJUFRfRElBTE9HX0FMRVJUKTsK
LSAgICBnX2Fzc2VydCghKnJlc3VsdCk7Ci0gICAgKnJlc3VsdCA9IGdfc3RyZHVwKHdlYmtpdF9z
Y3JpcHRfZGlhbG9nX2dldF9tZXNzYWdlKGRpYWxvZykpOwotICAgIHJldHVybiBUUlVFOwotfQot
Ci1zdGF0aWMgdm9pZCBydW5KYXZhU2NyaXB0SW5Jc29sYXRlZFdvcmxkRmluaXNoZWRDYWxsYmFj
ayhHREJ1c1Byb3h5KiBwcm94eSwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIFdlYlZpZXdUZXN0KiB0
ZXN0KQotewotICAgIGdfZGJ1c19wcm94eV9jYWxsX2ZpbmlzaChwcm94eSwgcmVzdWx0LCAwKTsK
LSAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOwotfQotCi1zdGF0aWMgdm9p
ZCB0ZXN0V2ViRXh0ZW5zaW9uSXNvbGF0ZWRXb3JsZChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGhlYWRlcj48L2hlYWRlcj48
Ym9keT48ZGl2IGlkPSdjb25zb2xlJz48L2Rpdj48L2JvZHk+PC9odG1sPiIsIDApOwotICAgIHRl
c3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgR093blB0cjxjaGFyPiByZXN1bHQ7
Ci0gICAgZ3Vsb25nIHNjcmlwdERpYWxvZ0lEID0gZ19zaWduYWxfY29ubmVjdCh0ZXN0LT5tX3dl
YlZpZXcsICJzY3JpcHQtZGlhbG9nIiwgR19DQUxMQkFDSyhzY3JpcHREaWFsb2dDYWxsYmFjayks
ICZyZXN1bHQub3V0UHRyKCkpOwotCi0gICAgc3RhdGljIGNvbnN0IGNoYXIgKm1haW5Xb3JsZFNj
cmlwdCA9Ci0gICAgICAgICJ0b3AuZm9vID0gJ0Zvbyc7XG4iCi0gICAgICAgICJkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmlubmVySFRNTCA9IHRvcC5mb287XG4iCi0gICAgICAg
ICJ3aW5kb3cub3BlbiA9IGZ1bmN0aW9uICgpIHsgYWxlcnQoJ01haW4gV29ybGQnKTsgfVxuIgot
ICAgICAgICAiZG9jdW1lbnQub3BlbigxLCAyLCAzKTsiOwotICAgIHRlc3QtPnJ1bkphdmFTY3Jp
cHRBbmRXYWl0VW50aWxGaW5pc2hlZChtYWluV29ybGRTY3JpcHQsIDApOwotICAgIGdfYXNzZXJ0
X2NtcHN0cihyZXN1bHQuZ2V0KCksID09LCAiTWFpbiBXb3JsZCIpOwotICAgIHJlc3VsdC5jbGVh
cigpOwotCi0gICAgV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCogamF2YXNjcmlwdFJlc3VsdCA9IHRl
c3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2NvbnNvbGUnKS5pbm5lckhUTUwiLCAwKTsKLSAgICBnX2Fzc2VydChqYXZhc2NyaXB0
UmVzdWx0KTsKLSAgICBHT3duUHRyPGNoYXI+IHZhbHVlU3RyaW5nKFdlYlZpZXdUZXN0OjpqYXZh
c2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKLSAgICBnX2Fzc2VydF9j
bXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAiRm9vIik7Ci0KLSAgICBzdGF0aWMgY29uc3Qg
Y2hhciAqaXNvbGF0ZWRXb3JsZFNjcmlwdCA9Ci0gICAgICAgICJkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnY29uc29sZScpLmlubmVySFRNTCA9IHRvcC5mb287XG4iCi0gICAgICAgICJ3aW5kb3cu
b3BlbiA9IGZ1bmN0aW9uICgpIHsgYWxlcnQoJ0lzb2xhdGVkIFdvcmxkJyk7IH1cbiIKLSAgICAg
ICAgImRvY3VtZW50Lm9wZW4oMSwgMiwgMyk7IjsKLSAgICBHUmVmUHRyPEdEQnVzUHJveHk+IHBy
b3h5ID0gYWRvcHRHUmVmKGJ1cy0+Y3JlYXRlUHJveHkoIm9yZy53ZWJraXQuZ3RrLldlYkV4dGVu
c2lvblRlc3QiLAotICAgICAgICAiL29yZy93ZWJraXQvZ3RrL1dlYkV4dGVuc2lvblRlc3QiICwg
Im9yZy53ZWJraXQuZ3RrLldlYkV4dGVuc2lvblRlc3QiLCB0ZXN0LT5tX21haW5Mb29wKSk7Ci0g
ICAgZ19kYnVzX3Byb3h5X2NhbGwocHJveHkuZ2V0KCksCi0gICAgICAgICJSdW5KYXZhU2NyaXB0
SW5Jc29sYXRlZFdvcmxkIiwKLSAgICAgICAgZ192YXJpYW50X25ldygiKHQmcykiLCB3ZWJraXRf
d2ViX3ZpZXdfZ2V0X3BhZ2VfaWQodGVzdC0+bV93ZWJWaWV3KSwgaXNvbGF0ZWRXb3JsZFNjcmlw
dCksCi0gICAgICAgIEdfREJVU19DQUxMX0ZMQUdTX05PTkUsCi0gICAgICAgIC0xLCAwLAotICAg
ICAgICByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KHJ1bkphdmFTY3JpcHRJ
bklzb2xhdGVkV29ybGRGaW5pc2hlZENhbGxiYWNrKSwKLSAgICAgICAgdGVzdCk7Ci0gICAgZ19t
YWluX2xvb3BfcnVuKHRlc3QtPm1fbWFpbkxvb3ApOwotICAgIGdfYXNzZXJ0X2NtcHN0cihyZXN1
bHQuZ2V0KCksID09LCAiSXNvbGF0ZWQgV29ybGQiKTsKLSAgICByZXN1bHQuY2xlYXIoKTsKLQot
ICAgIC8vIENoZWNrIHRoYXQgJ3RvcC5mb28nIGRlZmluZWQgaW4gbWFpbiB3b3JsZCBpcyBub3Qg
dmlzaWJsZSBpbiBpc29sYXRlZCB3b3JsZC4KLSAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+
cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnY29uc29sZScpLmlubmVySFRNTCIsIDApOwotICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1
bHQpOwotICAgIHZhbHVlU3RyaW5nLnNldChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRv
Q1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3Ry
aW5nLmdldCgpLCA9PSwgInVuZGVmaW5lZCIpOwotCi0gICAgZ19zaWduYWxfaGFuZGxlcl9kaXNj
b25uZWN0KHRlc3QtPm1fd2ViVmlldywgc2NyaXB0RGlhbG9nSUQpOwotfQotCi12b2lkIGJlZm9y
ZUFsbCgpCi17Ci0gICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF93ZWJfZXh0ZW5zaW9uc19kaXJl
Y3Rvcnkod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCksIFdFQktJVF9URVNUX1dFQl9F
WFRFTlNJT05TX0RJUik7Ci0gICAgYnVzID0gbmV3IFdlYktpdFRlc3RCdXMoKTsKLSAgICBpZiAo
IWJ1cy0+cnVuKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYlZpZXdUZXN0OjphZGQoIldl
YktpdFdlYkV4dGVuc2lvbiIsICJkb20tZG9jdW1lbnQtdGl0bGUiLCB0ZXN0V2ViRXh0ZW5zaW9u
R2V0VGl0bGUpOwotICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYkV4dGVuc2lvbiIsICJk
b2N1bWVudC1sb2FkZWQtc2lnbmFsIiwgdGVzdERvY3VtZW50TG9hZGVkU2lnbmFsKTsKLSAgICBX
ZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgIndlYi1wcm9jZXNzLWNyYXNoZWQiLCB0
ZXN0V2ViS2l0V2ViVmlld1Byb2Nlc3NDcmFzaGVkKTsKLSAgICBXZWJWaWV3VGVzdDo6YWRkKCJX
ZWJLaXRXZWJFeHRlbnNpb24iLCAid2luZG93LW9iamVjdC1jbGVhcmVkIiwgdGVzdFdlYkV4dGVu
c2lvbldpbmRvd09iamVjdENsZWFyZWQpOwotICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdl
YkV4dGVuc2lvbiIsICJpc29sYXRlZC13b3JsZCIsIHRlc3RXZWJFeHRlbnNpb25Jc29sYXRlZFdv
cmxkKTsKLX0KLQotdm9pZCBhZnRlckFsbCgpCi17Ci0gICAgZGVsZXRlIGJ1czsKLX0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRB
Y2Nlc3NpYmlsaXR5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZTFiZDM4My4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9UZXN0V2ViS2l0QWNjZXNzaWJpbGl0eS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwy
MjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiVGVzdE1haW4uaCIKLSNpbmNsdWRlICJXZWJWaWV3
VGVzdC5oIgotCi0vLyBUaGUgbGliYXRzcGkgaGVhZGVycyBkb24ndCB1c2UgR19CRUdJTl9ERUNM
UwotZXh0ZXJuICJDIiB7Ci0jaW5jbHVkZSA8YXRzcGkvYXRzcGkuaD4KLX0KLQotI2luY2x1ZGUg
PGVycm5vLmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVk
ZSA8c2lnbmFsLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL2dv
YmplY3QvR1JlZlB0ci5oPgotCi0vLyBOYW1lIG9mIHRoZSB0ZXN0IHNlcnZlciBhcHBsaWNhdGlv
biBjcmVhdGluZyB0aGUgd2ViVmlldyBvYmplY3QuCi1zdGF0aWMgY29uc3QgY2hhcioga1Rlc3RT
ZXJ2ZXJBcHBOYW1lID0gIkFjY2Vzc2liaWxpdHlUZXN0U2VydmVyIjsKLQotLy8gTWF4IHNlY29u
ZHMgdG8gd2FpdCBmb3IgdGhlIHRlc3Qgc2VydmVyIGJlZm9yZSBpbnNwZWN0aW5nIGl0Lgotc3Rh
dGljIGNvbnN0IGludCBrTWF4V2FpdEZvckNoaWxkID0gNTsKLQotLy8gVGhlIFBJRCBmb3IgdGhl
IHRlc3Qgc2VydmVyIHJ1bm5pbmcsIHNvIHdlIGNhbiBraWxsIGl0IGlmIG5lZWRlZC4KLXN0YXRp
YyBHUGlkIGtDaGlsZFByb2Nlc3NQaWQgPSAwOwotCi0vLyBXaGV0aGVyIHRoZSBjaGlsZCBoYXMg
cmVwbGllZCBhbmQgaXQncyByZWFkeS4KLXN0YXRpYyBib29sIGtDaGlsZElzUmVhZHkgPSBmYWxz
ZTsKLQotc3RhdGljIHZvaWQgc3RvcFRlc3RTZXJ2ZXIoKQotewotICAgIC8vIERvIG5vdGhpbmcg
aWYgdGhlcmUncyBubyBzZXJ2ZXIgcnVubmluZy4KLSAgICBpZiAoIWtDaGlsZFByb2Nlc3NQaWQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGdfc3Bhd25fY2xvc2VfcGlkKGtDaGlsZFByb2Nlc3NQ
aWQpOwotICAgIGtpbGwoa0NoaWxkUHJvY2Vzc1BpZCwgU0lHVEVSTSk7Ci0gICAga0NoaWxkUHJv
Y2Vzc1BpZCA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHNpZ0Fib3J0SGFuZGxlcihpbnQgc2lnTnVt
KQotewotICAgIC8vIEp1c3Qgc3RvcCB0aGUgdGVzdCBzZXJ2ZXIgaWYgU0lHQUJSVCB3YXMgcmVj
ZWl2ZWQuCi0gICAgc3RvcFRlc3RTZXJ2ZXIoKTsKLX0KLQotc3RhdGljIGdwb2ludGVyIHRlc3RT
ZXJ2ZXJNb25pdG9yVGhyZWFkRnVuYyhncG9pbnRlcikKLXsKLSAgICAvLyBXYWl0IGZvciB0aGUg
c3BlY2lmaWVkIHRpbWVvdXQgdG8gaGFwcGVuLgotICAgIGdfdXNsZWVwKGtNYXhXYWl0Rm9yQ2hp
bGQgKiBHX1VTRUNfUEVSX1NFQyk7Ci0KLSAgICAvLyBLaWxsIHRoZSBjaGlsZCBwcm9jZXNzIGlm
IG5vdCByZWFkeSB5ZXQuCi0gICAgaWYgKCFrQ2hpbGRJc1JlYWR5KQotICAgICAgICBzdG9wVGVz
dFNlcnZlcigpOwotCi0gICAgZ190aHJlYWRfZXhpdCgwKTsKLSAgICByZXR1cm4gMDsKLX0KLQot
c3RhdGljIHZvaWQgc3RhcnRUZXN0U2VydmVyTW9uaXRvcigpCi17Ci0gICAga0NoaWxkSXNSZWFk
eSA9IGZhbHNlOwotICAgIGdfdGhyZWFkX25ldygiVGVzdFNlcnZlck1vbml0b3IiLCB0ZXN0U2Vy
dmVyTW9uaXRvclRocmVhZEZ1bmMsIDApOwotfQotCi1zdGF0aWMgdm9pZCBzdGFydFRlc3RTZXJ2
ZXIoKQotewotICAgIC8vIFByZXBhcmUgYXJndltdIGZvciBzcGF3bmluZyB0aGUgc2VydmVyIHBy
b2Nlc3MuCi0gICAgR093blB0cjxjaGFyPiB0ZXN0U2VydmVyUGF0aChnX2J1aWxkX2ZpbGVuYW1l
KFdFQktJVF9FWEVDX1BBVEgsICJXZWJLaXQyR09iamVjdEFQSVRlc3RzIiwga1Rlc3RTZXJ2ZXJB
cHBOYW1lLCBOVUxMKSk7Ci0KLSAgICBjaGFyKiB0ZXN0U2VydmVyQXJndlsyXTsKLSAgICB0ZXN0
U2VydmVyQXJndlswXSA9IHRlc3RTZXJ2ZXJQYXRoLmdldCgpOwotICAgIHRlc3RTZXJ2ZXJBcmd2
WzFdID0gMDsKLQotICAgIC8vIFNwYXduIHRoZSBzZXJ2ZXIsIGdldHRpbmcgaXRzIHN0ZG91dCBm
aWxlIGRlc2NyaXB0b3IgdG8gc2V0IGEKLSAgICAvLyBjb21tdW5pY2F0aW9uIGNoYW5uZWwsIHNv
IHdlIGtub3cgd2hlbiBpdCdzIHJlYWR5LgotICAgIGludCBjaGlsZFN0ZG91dCA9IDA7Ci0gICAg
aWYgKCFnX3NwYXduX2FzeW5jX3dpdGhfcGlwZXMoMCwgdGVzdFNlcnZlckFyZ3YsIDAsIHN0YXRp
Y19jYXN0PEdTcGF3bkZsYWdzPigwKSwgMCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAma0NoaWxkUHJvY2Vzc1BpZCwgMCwgJmNoaWxkU3Rkb3V0LCAwLCAwKSkgewotICAg
ICAgICBjbG9zZShjaGlsZFN0ZG91dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAv
LyBTdGFydCBtb25pdG9yaW5nIHRoZSB0ZXN0IHNlcnZlciAoaW4gYSBzZXBhcmF0ZSB0aHJlYWQp
IHRvCi0gICAgLy8gZW5zdXJlIHdlIGRvbid0IGJsb2NrIG9uIHRoZSBjaGlsZCBwcm9jZXNzIG1v
cmUgdGhhbiBhIHRpbWVvdXQuCi0gICAgc3RhcnRUZXN0U2VydmVyTW9uaXRvcigpOwotCi0gICAg
Y2hhciBtc2dbMl07Ci0gICAgR0lPQ2hhbm5lbCogaW9DaGFubmVsID0gZ19pb19jaGFubmVsX3Vu
aXhfbmV3KGNoaWxkU3Rkb3V0KTsKLSAgICBpZiAoZ19pb19jaGFubmVsX3JlYWRfY2hhcnMoaW9D
aGFubmVsLCBtc2csIDIsIDAsIDApID09IEdfSU9fU1RBVFVTX05PUk1BTCkgewotICAgICAgICAv
LyBDaGVjayB3aGV0aGVyIHRoZSBzZXJ2ZXIgc2VudCBhIG1lc3NhZ2Ugc2F5aW5nIGl0J3MgcmVh
ZHkKLSAgICAgICAgLy8gYW5kIHN0b3JlIHRoZSByZXN1bHQgZ2xvYmFsbHksIHNvIHRoZSBtb25p
dG9yIGNhbiBzZWUgaXQuCi0gICAgICAgIGtDaGlsZElzUmVhZHkgPSBtc2dbMF0gPT0gJ08nICYm
IG1zZ1sxXSA9PSAnSyc7Ci0gICAgfQotICAgIGdfaW9fY2hhbm5lbF91bnJlZihpb0NoYW5uZWwp
OwotICAgIGNsb3NlKGNoaWxkU3Rkb3V0KTsKLQotICAgIC8vIFRoZSB0aW1lb3V0IHdhcyByZWFj
aGVkIGFuZCB0aGUgc2VydmVyIGlzIG5vdCByZWFkeSB5ZXQsIHNvCi0gICAgLy8gc3RvcCBpdCBp
bm1lZGlhdGVseSwgYW5kIGxldCB0aGUgdW5pdCB0ZXN0cyBmYWlsLgotICAgIGlmICgha0NoaWxk
SXNSZWFkeSkKLSAgICAgICAgc3RvcFRlc3RTZXJ2ZXIoKTsKLX0KLQotc3RhdGljIHZvaWQgY2hl
Y2tBdHNwaUFjY2Vzc2libGUoQXRzcGlBY2Nlc3NpYmxlKiBhY2Nlc3NpYmxlLCBjb25zdCBjaGFy
KiB0YXJnZXROYW1lLCBBdHNwaVJvbGUgdGFyZ2V0Um9sZSkKLXsKLSAgICBnX2Fzc2VydChBVFNQ
SV9JU19BQ0NFU1NJQkxFKGFjY2Vzc2libGUpKTsKLQotICAgIEdPd25QdHI8Y2hhcj4gbmFtZShh
dHNwaV9hY2Nlc3NpYmxlX2dldF9uYW1lKGFjY2Vzc2libGUsIDApKTsKLSAgICBnX2Fzc2VydF9j
bXBzdHIodGFyZ2V0TmFtZSwgPT0sIG5hbWUuZ2V0KCkpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0
YXJnZXRSb2xlLCA9PSwgYXRzcGlfYWNjZXNzaWJsZV9nZXRfcm9sZShhY2Nlc3NpYmxlLCAwKSk7
Ci19Ci0KLXN0YXRpYyBHUmVmUHRyPEF0c3BpQWNjZXNzaWJsZT4gZmluZFRlc3RTZXJ2ZXJBcHBs
aWNhdGlvbigpCi17Ci0gICAgLy8gT25seSBvbmUgZGVza3RvcCBpcyBzdXBwb3J0ZWQgYnkgQVRT
UEkgYXQgdGhlIG1vbWVudC4KLSAgICBHUmVmUHRyPEF0c3BpQWNjZXNzaWJsZT4gZGVza3RvcCA9
IGFkb3B0R1JlZihhdHNwaV9nZXRfZGVza3RvcCgwKSk7Ci0KLSAgICAvLyBMb29rIGZvciB0aGUg
c2VydmVyIGFwcGxpY2F0aW9uIGluIHRoZSBsaXN0IG9mIGFwcHMuCi0gICAgR1JlZlB0cjxBdHNw
aUFjY2Vzc2libGU+IGN1cnJlbnQ7Ci0gICAgaW50IGNoaWxkQ291bnQgPSBhdHNwaV9hY2Nlc3Np
YmxlX2dldF9jaGlsZF9jb3VudChkZXNrdG9wLmdldCgpLCAwKTsKLSAgICBmb3IgKGludCBpID0g
MDsgaSA8IGNoaWxkQ291bnQ7IGkrKykgewotICAgICAgICBjdXJyZW50ID0gYWRvcHRHUmVmKGF0
c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGRlc2t0b3AuZ2V0KCksIGksIDApKTsK
LSAgICAgICAgaWYgKCFnX3N0cmNtcDAoYXRzcGlfYWNjZXNzaWJsZV9nZXRfbmFtZShjdXJyZW50
LmdldCgpLCAwKSwga1Rlc3RTZXJ2ZXJBcHBOYW1lKSkKLSAgICAgICAgICAgIHJldHVybiBjdXJy
ZW50OwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0QXRzcGlC
YXNpY0hpZXJhcmNoeShXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICAv
LyBUaGUgdGVzdCBzZXJ2ZXIncyBhY2Nlc3NpYmlsaXR5IG9iamVjdCAoVUkgUHJvY2VzcykuCi0g
ICAgR1JlZlB0cjxBdHNwaUFjY2Vzc2libGU+IHRlc3RTZXJ2ZXJBcHAgPSBmaW5kVGVzdFNlcnZl
ckFwcGxpY2F0aW9uKCk7Ci0gICAgZ19hc3NlcnQoQVRTUElfSVNfQUNDRVNTSUJMRSh0ZXN0U2Vy
dmVyQXBwLmdldCgpKSk7Ci0gICAgY2hlY2tBdHNwaUFjY2Vzc2libGUodGVzdFNlcnZlckFwcC5n
ZXQoKSwgIkFjY2Vzc2liaWxpdHlUZXN0U2VydmVyIiwgQVRTUElfUk9MRV9BUFBMSUNBVElPTik7
Ci0KLSAgICAvLyBUaGUgbWFpbiB3aW5kb3cncyBhY2Nlc3NpYmlsaXR5IG9iamVjdCAoVUkgUHJv
Y2VzcykuCi0gICAgR1JlZlB0cjxBdHNwaUFjY2Vzc2libGU+IGN1cnJlbnRQYXJlbnQgPSB0ZXN0
U2VydmVyQXBwOwotICAgIEdSZWZQdHI8QXRzcGlBY2Nlc3NpYmxlPiBjdXJyZW50Q2hpbGQgPSBh
ZG9wdEdSZWYoYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoY3VycmVudFBhcmVu
dC5nZXQoKSwgMCwgMCkpOwotICAgIGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY3VycmVu
dENoaWxkLmdldCgpKSk7Ci0gICAgY2hlY2tBdHNwaUFjY2Vzc2libGUoY3VycmVudENoaWxkLmdl
dCgpLCAiIiwgQVRTUElfUk9MRV9GUkFNRSk7Ci0KLSAgICAvLyBUaGUgV2ViVmlldydzIGFjY2Vz
c2liaWxpdHkgb2JqZWN0IChVSSBQcm9jZXNzKS4KLSAgICBjdXJyZW50UGFyZW50ID0gY3VycmVu
dENoaWxkOwotICAgIGN1cnJlbnRDaGlsZCA9IGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0
X2luZGV4KGN1cnJlbnRQYXJlbnQuZ2V0KCksIDAsIDApOwotICAgIGdfYXNzZXJ0KEFUU1BJX0lT
X0FDQ0VTU0lCTEUoY3VycmVudENoaWxkLmdldCgpKSk7Ci0gICAgY2hlY2tBdHNwaUFjY2Vzc2li
bGUoY3VycmVudENoaWxkLmdldCgpLCAiIiwgQVRTUElfUk9MRV9GSUxMRVIpOwotCi0gICAgLy8g
VGhlIFdlYlBhZ2UncyBhY2Nlc3NpYmlsaXR5IG9iamVjdCAoV2ViIFByb2Nlc3MpLgotICAgIGN1
cnJlbnRQYXJlbnQgPSBjdXJyZW50Q2hpbGQ7Ci0gICAgY3VycmVudENoaWxkID0gYXRzcGlfYWNj
ZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoY3VycmVudFBhcmVudC5nZXQoKSwgMCwgMCk7Ci0g
ICAgZ19hc3NlcnQoQVRTUElfSVNfQUNDRVNTSUJMRShjdXJyZW50Q2hpbGQuZ2V0KCkpKTsKLSAg
ICBjaGVja0F0c3BpQWNjZXNzaWJsZShjdXJyZW50Q2hpbGQuZ2V0KCksICIiLCBBVFNQSV9ST0xF
X0ZJTExFUik7Ci0KLSAgICAvLyBIVE1MIHJvb3QgZWxlbWVudCdzIGFjY2Vzc2libGUgZWxlbWVu
dCAoV2ViIFByb2Nlc3MpLgotICAgIGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50Q2hpbGQ7Ci0gICAg
Y3VycmVudENoaWxkID0gYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoY3VycmVu
dFBhcmVudC5nZXQoKSwgMCwgMCk7Ci0gICAgZ19hc3NlcnQoQVRTUElfSVNfQUNDRVNTSUJMRShj
dXJyZW50Q2hpbGQuZ2V0KCkpKTsKLQotICAgIC8vIEhUTUwgYm9keSdzIGFjY2Vzc2libGUgZWxl
bWVudCAoV2ViIFByb2Nlc3MpLgotICAgIGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50Q2hpbGQ7Ci0g
ICAgY3VycmVudENoaWxkID0gYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoY3Vy
cmVudFBhcmVudC5nZXQoKSwgMCwgMCk7Ci0gICAgZ19hc3NlcnQoQVRTUElfSVNfQUNDRVNTSUJM
RShjdXJyZW50Q2hpbGQuZ2V0KCkpKTsKLSAgICBjaGVja0F0c3BpQWNjZXNzaWJsZShjdXJyZW50
Q2hpbGQuZ2V0KCksICIiLCBBVFNQSV9ST0xFX0RPQ1VNRU5UX1dFQik7Ci0KLSAgICAvLyBIVE1M
IEgxJ3MgYWNjZXNzaWJsZSBlbGVtZW50IChXZWIgUHJvY2VzcykuCi0gICAgY3VycmVudFBhcmVu
dCA9IGN1cnJlbnRDaGlsZDsKLSAgICBjdXJyZW50Q2hpbGQgPSBhdHNwaV9hY2Nlc3NpYmxlX2dl
dF9jaGlsZF9hdF9pbmRleChjdXJyZW50UGFyZW50LmdldCgpLCAwLCAwKTsKLSAgICBnX2Fzc2Vy
dChBVFNQSV9JU19BQ0NFU1NJQkxFKGN1cnJlbnRDaGlsZC5nZXQoKSkpOwotICAgIGNoZWNrQXRz
cGlBY2Nlc3NpYmxlKGN1cnJlbnRDaGlsZC5nZXQoKSwgIlRoaXMgaXMgYSB0ZXN0IiwgQVRTUElf
Uk9MRV9IRUFESU5HKTsKLQotICAgIC8vIEhUTUwgZmlyc3QgcGFyYWdyYXBoJ3MgYWNjZXNzaWJs
ZSBlbGVtZW50IChXZWIgUHJvY2VzcykuCi0gICAgY3VycmVudENoaWxkID0gYXRzcGlfYWNjZXNz
aWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoY3VycmVudFBhcmVudC5nZXQoKSwgMSwgMCk7Ci0gICAg
Z19hc3NlcnQoQVRTUElfSVNfQUNDRVNTSUJMRShjdXJyZW50Q2hpbGQuZ2V0KCkpKTsKLSAgICBj
aGVja0F0c3BpQWNjZXNzaWJsZShjdXJyZW50Q2hpbGQuZ2V0KCksICIiLCBBVFNQSV9ST0xFX1BB
UkFHUkFQSCk7Ci0KLSAgICAvLyBIVE1MIHNlY29uZCBwYXJhZ3JhcGgncyBhY2Nlc3NpYmxlIGVs
ZW1lbnQgKFdlYiBQcm9jZXNzKS4KLSAgICBjdXJyZW50Q2hpbGQgPSBhdHNwaV9hY2Nlc3NpYmxl
X2dldF9jaGlsZF9hdF9pbmRleChjdXJyZW50UGFyZW50LmdldCgpLCAyLCAwKTsKLSAgICBnX2Fz
c2VydChBVFNQSV9JU19BQ0NFU1NJQkxFKGN1cnJlbnRDaGlsZC5nZXQoKSkpOwotICAgIGNoZWNr
QXRzcGlBY2Nlc3NpYmxlKGN1cnJlbnRDaGlsZC5nZXQoKSwgIiIsIEFUU1BJX1JPTEVfUEFSQUdS
QVBIKTsKLQotICAgIC8vIEhUTUwgbGluaydzIGFjY2Vzc2libGUgZWxlbWVudCAoV2ViIFByb2Nl
c3MpLgotICAgIGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50Q2hpbGQ7Ci0gICAgY3VycmVudENoaWxk
ID0gYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoY3VycmVudFBhcmVudC5nZXQo
KSwgMCwgMCk7Ci0gICAgZ19hc3NlcnQoQVRTUElfSVNfQUNDRVNTSUJMRShjdXJyZW50Q2hpbGQu
Z2V0KCkpKTsKLSAgICBjaGVja0F0c3BpQWNjZXNzaWJsZShjdXJyZW50Q2hpbGQuZ2V0KCksICJh
IGxpbmsiLCBBVFNQSV9ST0xFX0xJTkspOwotfQotCi12b2lkIGJlZm9yZUFsbCgpCi17Ci0gICAg
Ly8gV2UgaW5zdGFsbCBhIGhhbmRsZXIgdG8gZW5zdXJlIHRoYXQgd2Uga2lsbCB0aGUgY2hpbGQg
cHJvY2VzcwotICAgIC8vIGlmIHRoZSBwYXJlbnQgZGllcyBiZWNhdXNlIG9mIHdoYXRldmVyIHRo
ZSByZWFzb24gaXMuCi0gICAgc2lnbmFsKFNJR0FCUlQsIHNpZ0Fib3J0SGFuZGxlcik7Ci0KLSAg
ICAvLyBTdGFydCB0aGUgYWNjZXNzaWJpbGl0eSB0ZXN0IHNlcnZlciBhbmQgbG9hZCB0aGUgdGVz
dHMuCi0gICAgc3RhcnRUZXN0U2VydmVyKCk7Ci0gICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0
QWNjZXNzaWJpbGl0eSIsICJhdHNwaS1iYXNpYy1oaWVyYXJjaHkiLCB0ZXN0QXRzcGlCYXNpY0hp
ZXJhcmNoeSk7Ci19Ci0KLXZvaWQgYWZ0ZXJBbGwoKQotewotICAgIC8vIEVuc3VyZSB3ZSBzdG9w
IHRoZSBzZXJ2ZXIuCi0gICAgc3RvcFRlc3RTZXJ2ZXIoKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRGYXZpY29uRGF0YWJh
c2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktp
dEZhdmljb25EYXRhYmFzZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhMDZm
NzQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
VGVzdFdlYktpdEZhdmljb25EYXRhYmFzZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNzQgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotCi0jaW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5oIgotI2luY2x1ZGUgIldlYlZp
ZXdUZXN0LmgiCi0jaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRlIDxsaWJzb3VwL3Nv
dXAuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0KLXN0YXRpYyBXZWJLaXRU
ZXN0U2VydmVyKiBrU2VydmVyOwotc3RhdGljIGNoYXIqIGtUZW1wRGlyZWN0b3J5OwotCi1jbGFz
cyBGYXZpY29uRGF0YWJhc2VUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3QgewotcHVibGljOgotICAg
IE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoRmF2aWNvbkRhdGFiYXNlVGVzdCk7Ci0KLSAgICBGYXZp
Y29uRGF0YWJhc2VUZXN0KCkKLSAgICAgICAgOiBtX3dlYkNvbnRleHQod2Via2l0X3dlYl9jb250
ZXh0X2dldF9kZWZhdWx0KCkpCi0gICAgICAgICwgbV9mYXZpY29uKDApCi0gICAgICAgICwgbV9l
cnJvcigwKQotICAgICAgICAsIG1fZmF2aWNvbk5vdGlmaWNhdGlvblJlY2VpdmVkKGZhbHNlKQot
ICAgIHsKLSAgICAgICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF93
ZWJfY29udGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFzZShtX3dlYkNvbnRleHQpOwotICAgICAgICBn
X3NpZ25hbF9jb25uZWN0KGRhdGFiYXNlLCAiZmF2aWNvbi1jaGFuZ2VkIiwgR19DQUxMQkFDSyhm
YXZpY29uQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgfQotCi0gICAgfkZhdmljb25EYXRh
YmFzZVRlc3QoKQotICAgIHsKLSAgICAgICAgaWYgKG1fZmF2aWNvbikKLSAgICAgICAgICAgIGNh
aXJvX3N1cmZhY2VfZGVzdHJveShtX2Zhdmljb24pOwotCi0gICAgICAgIFdlYktpdEZhdmljb25E
YXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJh
c2UobV93ZWJDb250ZXh0KTsKLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9t
YXRjaGVkKGRhdGFiYXNlLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsK
LSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBmYXZpY29uQ2hhbmdlZENhbGxiYWNrKFdlYktpdEZh
dmljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IGNoYXIqIHBhZ2VVUkksIGNvbnN0IGNoYXIq
IGZhdmljb25VUkksIEZhdmljb25EYXRhYmFzZVRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICBp
ZiAoIWdfc3RyY21wMCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSh0ZXN0LT5tX3dlYlZpZXcpLCBw
YWdlVVJJKSkKLSAgICAgICAgICAgIHRlc3QtPm1fZmF2aWNvblVSSSA9IGZhdmljb25VUkk7Ci0g
ICAgfQotCi0gICAgc3RhdGljIHZvaWQgdmlld0Zhdmljb25DaGFuZ2VkQ2FsbGJhY2soV2ViS2l0
V2ViVmlldyogd2ViVmlldywgR1BhcmFtU3BlYyogcHNwZWMsIGdwb2ludGVyIGRhdGEpCi0gICAg
ewotICAgICAgICBGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8RmF2aWNv
bkRhdGFiYXNlVGVzdCo+KGRhdGEpOwotICAgICAgICBnX2Fzc2VydCh0ZXN0LT5tX3dlYlZpZXcg
PT0gd2ViVmlldyk7Ci0gICAgICAgIHRlc3QtPm1fZmF2aWNvbk5vdGlmaWNhdGlvblJlY2VpdmVk
ID0gdHJ1ZTsKLSAgICAgICAgdGVzdC0+cXVpdE1haW5Mb29wKCk7Ci0gICAgfQotCi0gICAgc3Rh
dGljIHZvaWQgZ2V0RmF2aWNvbkNhbGxiYWNrKEdPYmplY3QqIHNvdXJjZU9iamVjdCwgR0FzeW5j
UmVzdWx0KiByZXN1bHQsIHZvaWQqIGRhdGEpCi0gICAgewotICAgICAgICBGYXZpY29uRGF0YWJh
c2VUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8RmF2aWNvbkRhdGFiYXNlVGVzdCo+KGRhdGEpOwot
ICAgICAgICBXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X3dlYl9jb250
ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNlKHRlc3QtPm1fd2ViQ29udGV4dCk7Ci0gICAgICAgIHRl
c3QtPm1fZmF2aWNvbiA9IHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX2Zpbmlz
aChkYXRhYmFzZSwgcmVzdWx0LCAmdGVzdC0+bV9lcnJvci5vdXRQdHIoKSk7Ci0gICAgICAgIHRl
c3QtPnF1aXRNYWluTG9vcCgpOwotICAgIH0KLQotICAgIHZvaWQgd2FpdFVudGlsRmF2aWNvbkNo
YW5nZWQoKQotICAgIHsKLSAgICAgICAgbV9mYXZpY29uTm90aWZpY2F0aW9uUmVjZWl2ZWQgPSBm
YWxzZTsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBoYW5kbGVySUQgPSBnX3NpZ25hbF9jb25uZWN0
KG1fd2ViVmlldywgIm5vdGlmeTo6ZmF2aWNvbiIsIEdfQ0FMTEJBQ0sodmlld0Zhdmljb25DaGFu
Z2VkQ2FsbGJhY2spLCB0aGlzKTsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3Ap
OwotICAgICAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QobV93ZWJWaWV3LCBoYW5kbGVy
SUQpOwotICAgIH0KLQotICAgIHZvaWQgZ2V0RmF2aWNvbkZvclBhZ2VVUklBbmRXYWl0VW50aWxS
ZWFkeShjb25zdCBjaGFyKiBwYWdlVVJJKQotICAgIHsKLSAgICAgICAgbV9lcnJvci5jbGVhcigp
OwotICAgICAgICBpZiAobV9mYXZpY29uKSB7Ci0gICAgICAgICAgICBjYWlyb19zdXJmYWNlX2Rl
c3Ryb3kobV9mYXZpY29uKTsKLSAgICAgICAgICAgIG1fZmF2aWNvbiA9IDA7Ci0gICAgICAgIH0K
LQotICAgICAgICBXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X3dlYl9j
b250ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNlKG1fd2ViQ29udGV4dCk7Ci0gICAgICAgIHdlYmtp
dF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uKGRhdGFiYXNlLCBwYWdlVVJJLCAwLCBnZXRG
YXZpY29uQ2FsbGJhY2ssIHRoaXMpOwotICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9v
cCk7Ci0gICAgfQotCi0gICAgV2ViS2l0V2ViQ29udGV4dCogbV93ZWJDb250ZXh0OwotICAgIGNh
aXJvX3N1cmZhY2VfdCogbV9mYXZpY29uOwotICAgIENTdHJpbmcgbV9mYXZpY29uVVJJOwotICAg
IEdPd25QdHI8R0Vycm9yPiBtX2Vycm9yOwotICAgIGJvb2wgbV9mYXZpY29uTm90aWZpY2F0aW9u
UmVjZWl2ZWQ7Ci19OwotCi1zdGF0aWMgdm9pZAotc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciog
c2VydmVyLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJs
ZSogcXVlcnksIFNvdXBDbGllbnRDb250ZXh0KiBjb250ZXh0LCB2b2lkKiBkYXRhKQotewotICAg
IGlmIChtZXNzYWdlLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7Ci0gICAgICAgIHNvdXBf
bWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9m
YXZpY29uLmljbyIpKSB7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2Us
IFNPVVBfU1RBVFVTX05PVF9GT1VORCk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBs
ZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgY2hhciogY29udGVudHM7Ci0gICAgZ3NpemUgbGVuZ3RoOwotICAgIGlmIChnX3N0cl9lcXVh
bChwYXRoLCAiL2ljb24vZmF2aWNvbi5pY28iKSkgewotICAgICAgICBHT3duUHRyPGNoYXI+IHBh
dGhUb0Zhdmljb24oZ19idWlsZF9maWxlbmFtZShUZXN0OjpnZXRXZWJLaXQxVGVzdFJlc291Y2Vz
RGlyKCkuZGF0YSgpLCAiYmxhbmsuaWNvIiwgTlVMTCkpOwotICAgICAgICBnX2ZpbGVfZ2V0X2Nv
bnRlbnRzKHBhdGhUb0Zhdmljb24uZ2V0KCksICZjb250ZW50cywgJmxlbmd0aCwgMCk7Ci0gICAg
ICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQ
X01FTU9SWV9UQUtFLCBjb250ZW50cywgbGVuZ3RoKTsKLSAgICB9IGVsc2UgaWYgKGdfc3RyX2Vx
dWFsKHBhdGgsICIvbm9mYXZpY29uIikpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIG5v
RmF2aWNvbkhUTUwgPSAiPGh0bWw+PGhlYWQ+PGJvZHk+dGVzdDwvYm9keT48L2h0bWw+IjsKLSAg
ICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNP
VVBfTUVNT1JZX1NUQVRJQywgbm9GYXZpY29uSFRNTCwgc3RybGVuKG5vRmF2aWNvbkhUTUwpKTsK
LSAgICB9IGVsc2UgewotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogY29udGVudHNIVE1MID0g
IjxodG1sPjxoZWFkPjxsaW5rIHJlbD0naWNvbicgaHJlZj0nL2ljb24vZmF2aWNvbi5pY28nIHR5
cGU9J2ltYWdlL3gtaWNvOyBjaGFyc2V0PWJpbmFyeSc+PC9oZWFkPjxib2R5PnRlc3Q8L2JvZHk+
PC9odG1sPiI7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNw
b25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGNvbnRlbnRzSFRNTCwgc3RybGVuKGNvbnRl
bnRzSFRNTCkpOwotICAgIH0KLQotICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2Us
IFNPVVBfU1RBVFVTX09LKTsKLSAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdl
LT5yZXNwb25zZV9ib2R5KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdE5vdEluaXRpYWxpemVkKEZh
dmljb25EYXRhYmFzZVRlc3QqIHRlc3QpCi17Ci0gICAgLy8gVHJ5IHRvIHJldHJpZXZlIGEgdmFs
aWQgZmF2aWNvbiBmcm9tIGEgbm90IGluaXRpYWxpemVkIGRhdGFiYXNlLgotICAgIHRlc3QtPmdl
dEZhdmljb25Gb3JQYWdlVVJJQW5kV2FpdFVudGlsUmVhZHkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0
aCgiL2ZvbyIpLmRhdGEoKSk7Ci0gICAgZ19hc3NlcnQoIXRlc3QtPm1fZmF2aWNvbik7Ci0gICAg
Z19hc3NlcnQodGVzdC0+bV9lcnJvcik7Ci0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fZXJy
b3ItPmNvZGUsID09LCBXRUJLSVRfRkFWSUNPTl9EQVRBQkFTRV9FUlJPUl9OT1RfSU5JVElBTEla
RUQpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0U2V0RGlyZWN0b3J5KEZhdmljb25EYXRhYmFzZVRl
c3QqIHRlc3QpCi17Ci0gICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF9mYXZpY29uX2RhdGFiYXNl
X2RpcmVjdG9yeSh0ZXN0LT5tX3dlYkNvbnRleHQsIGtUZW1wRGlyZWN0b3J5KTsKLSAgICBnX2Fz
c2VydF9jbXBzdHIoa1RlbXBEaXJlY3RvcnksID09LCB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zh
dmljb25fZGF0YWJhc2VfZGlyZWN0b3J5KHRlc3QtPm1fd2ViQ29udGV4dCkpOwotfQotCi1zdGF0
aWMgdm9pZCB0ZXN0Q2xlYXJEYXRhYmFzZShGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0KQotewot
ICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfd2ViX2NvbnRleHRf
Z2V0X2Zhdmljb25fZGF0YWJhc2UodGVzdC0+bV93ZWJDb250ZXh0KTsKLSAgICB3ZWJraXRfZmF2
aWNvbl9kYXRhYmFzZV9jbGVhcihkYXRhYmFzZSk7Ci0KLSAgICBHT3duUHRyPGNoYXI+IGljb25V
Ukkod2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fdXJpKGRhdGFiYXNlLCBrU2Vy
dmVyLT5nZXRVUklGb3JQYXRoKCIvZm9vIikuZGF0YSgpKSk7Ci0gICAgZ19hc3NlcnQoIWljb25V
UkkpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0R2V0RmF2aWNvbihGYXZpY29uRGF0YWJhc2VUZXN0
KiB0ZXN0KQotewotICAgIC8vIFdlIG5lZWQgdG8gbG9hZCB0aGUgcGFnZSBmaXJzdCB0byBlbnN1
cmUgdGhlIGljb24gZGF0YSB3aWxsIGJlCi0gICAgLy8gaW4gdGhlIGRhdGFiYXNlIGluIGNhc2Ug
dGhlcmUncyBhbiBhc3NvY2lhdGVkIGZhdmljb24uCi0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVy
LT5nZXRVUklGb3JQYXRoKCIvZm9vIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxGYXZp
Y29uQ2hhbmdlZCgpOwotICAgIENTdHJpbmcgZmF2aWNvblVSSSA9IGtTZXJ2ZXItPmdldFVSSUZv
clBhdGgoIi9pY29uL2Zhdmljb24uaWNvIik7Ci0KLSAgICAvLyBDaGVjayB0aGUgQVBJIHJldHJp
ZXZpbmcgYSB2YWxpZCBmYXZpY29uLgotICAgIHRlc3QtPmdldEZhdmljb25Gb3JQYWdlVVJJQW5k
V2FpdFVudGlsUmVhZHkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2ZvbyIpLmRhdGEoKSk7Ci0g
ICAgZ19hc3NlcnQodGVzdC0+bV9mYXZpY29uKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+
bV9mYXZpY29uVVJJLmRhdGEoKSwgPT0sIGZhdmljb25VUkkuZGF0YSgpKTsKLSAgICBnX2Fzc2Vy
dCghdGVzdC0+bV9lcnJvcik7Ci0KLSAgICAvLyBDaGVjayB0aGF0IHdpZHRoIGFuZCBoZWlnaHQg
bWF0Y2ggdGhvc2UgZnJvbSBibGFuay5pY28gKDE2eDE2IGZhdmljb24pLgotICAgIGdfYXNzZXJ0
X2NtcGludChjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aCh0ZXN0LT5tX2Zhdmljb24pLCA9
PSwgMTYpOwotICAgIGdfYXNzZXJ0X2NtcGludChjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWln
aHQodGVzdC0+bV9mYXZpY29uKSwgPT0sIDE2KTsKLQotICAgIC8vIENoZWNrIHRoYXQgYW5vdGhl
ciBwYWdlIHdpdGggdGhlIHNhbWUgZmF2aWNvbiByZXR1cm4gdGhlIHNhbWUgaWNvbi4KLSAgICBj
YWlyb19zdXJmYWNlX3QqIGZhdmljb24gPSBjYWlyb19zdXJmYWNlX3JlZmVyZW5jZSh0ZXN0LT5t
X2Zhdmljb24pOwotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2Jh
ciIpLmRhdGEoKSk7Ci0gICAgLy8gSXQncyBhIG5ldyBwYWdlIGluIHRoZSBkYXRhYmFzZSwgc28g
ZmF2aWNvbiB3aWxsIGNoYW5nZSB0d2ljZSwgZmlyc3QgdG8gcmVzZXQgaXQKLSAgICAvLyBhbmQg
dGhlbiB3aGVuIHRoZSBpY29uIGlzIGxvYWRlZC4KLSAgICB0ZXN0LT53YWl0VW50aWxGYXZpY29u
Q2hhbmdlZCgpOwotICAgIHRlc3QtPndhaXRVbnRpbEZhdmljb25DaGFuZ2VkKCk7Ci0gICAgdGVz
dC0+Z2V0RmF2aWNvbkZvclBhZ2VVUklBbmRXYWl0VW50aWxSZWFkeShrU2VydmVyLT5nZXRVUklG
b3JQYXRoKCIvYmFyIikuZGF0YSgpKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX2Zhdmljb24pOwot
ICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXN0LT5tX2Zhdmljb25VUkkuZGF0YSgpLCA9PSwgZmF2aWNv
blVSSS5kYXRhKCkpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fZmF2aWNvbiA9PSBmYXZpY29uKTsK
LSAgICBnX2Fzc2VydCghdGVzdC0+bV9lcnJvcik7Ci0gICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95
KGZhdmljb24pOwotCi0gICAgLy8gQ2hlY2sgdGhlIEFQSSByZXRyaWV2aW5nIGFuIGludmFsaWQg
ZmF2aWNvbi4KLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9ub2Zh
dmljb24iKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbEZhdmljb25DaGFuZ2VkKCk7Ci0K
LSAgICB0ZXN0LT5nZXRGYXZpY29uRm9yUGFnZVVSSUFuZFdhaXRVbnRpbFJlYWR5KGtTZXJ2ZXIt
PmdldFVSSUZvclBhdGgoIi9ub2Zhdmljb24iKS5kYXRhKCkpOwotICAgIGdfYXNzZXJ0KCF0ZXN0
LT5tX2Zhdmljb24pOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fZXJyb3IpOwotfQotCi1zdGF0aWMg
dm9pZCB0ZXN0R2V0RmF2aWNvblVSSShGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0KQotewotICAg
IFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0
X2Zhdmljb25fZGF0YWJhc2UodGVzdC0+bV93ZWJDb250ZXh0KTsKLQotICAgIENTdHJpbmcgYmFz
ZVVSSSA9IGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9mb28iKTsKLSAgICBHT3duUHRyPGNoYXI+
IGljb25VUkkod2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fdXJpKGRhdGFiYXNl
LCBiYXNlVVJJLmRhdGEoKSkpOwotICAgIEFTU0VSVF9DTVBfQ1NUUklORyhpY29uVVJJLmdldCgp
LCA9PSwga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2ljb24vZmF2aWNvbi5pY28iKSk7Ci19Ci0K
LXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3RmF2aWNvbihGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0
KQotewotICAgIHRlc3QtPm1fZmF2aWNvblVSSSA9IENTdHJpbmcoKTsKLQotICAgIGNhaXJvX3N1
cmZhY2VfdCogaWNvbkZyb21XZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X2dldF9mYXZpY29uKHRl
c3QtPm1fd2ViVmlldyk7Ci0gICAgZ19hc3NlcnQoIWljb25Gcm9tV2ViVmlldyk7Ci0KLSAgICB0
ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9mb28iKS5kYXRhKCkpOwotICAg
IHRlc3QtPndhaXRVbnRpbEZhdmljb25DaGFuZ2VkKCk7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV9m
YXZpY29uTm90aWZpY2F0aW9uUmVjZWl2ZWQpOwotICAgIC8vIFRoZSBpY29uIGlzIGtub3duIGFu
ZCBoYXNuJ3QgY2hhbmdlZCBpbiB0aGUgZGF0YWJhc2UsIHNvIG5vdGlmeTo6ZmF2aWNvbiBpcyBl
bWl0dGVkCi0gICAgLy8gYnV0IFdlYktpdEZhdmljb25EYXRhYmFzZTo6aWNvbi1jaGFuZ2VkIGlz
bid0LgotICAgIGdfYXNzZXJ0KHRlc3QtPm1fZmF2aWNvblVSSS5pc051bGwoKSk7Ci0KLSAgICBp
Y29uRnJvbVdlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2Zhdmljb24odGVzdC0+bV93ZWJW
aWV3KTsKLSAgICBnX2Fzc2VydChpY29uRnJvbVdlYlZpZXcpOwotICAgIGdfYXNzZXJ0X2NtcHVp
bnQoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoaWNvbkZyb21XZWJWaWV3KSwgPT0sIDE2
KTsKLSAgICBnX2Fzc2VydF9jbXB1aW50KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChp
Y29uRnJvbVdlYlZpZXcpLCA9PSwgMTYpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0RmF2aWNvbkRh
dGFiYXNlKEZhdmljb25EYXRhYmFzZVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAg
Ly8gVGhlc2UgdGVzdHMgZGVwZW5kIG9uIHRoaXMgb3JkZXIgdG8gcnVuIHByb3Blcmx5IHNvIHdl
IGRlY2xhcmUgdGhlbSBpbiBhIHNpbmdsZSBvbmUuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTE0MzQuCi0gICAgdGVzdE5vdEluaXRpYWxpemVk
KHRlc3QpOwotICAgIHRlc3RTZXREaXJlY3RvcnkodGVzdCk7Ci0gICAgdGVzdEdldEZhdmljb24o
dGVzdCk7Ci0gICAgdGVzdEdldEZhdmljb25VUkkodGVzdCk7Ci0gICAgdGVzdFdlYlZpZXdGYXZp
Y29uKHRlc3QpOwotICAgIHRlc3RDbGVhckRhdGFiYXNlKHRlc3QpOwotfQotCi12b2lkIGJlZm9y
ZUFsbCgpCi17Ci0gICAgLy8gU3RhcnQgYSBzb3VwIHNlcnZlciBmb3IgdGVzdGluZy4KLSAgICBr
U2VydmVyID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIoKTsKLSAgICBrU2VydmVyLT5ydW4oc2VydmVy
Q2FsbGJhY2spOwotCi0gICAga1RlbXBEaXJlY3RvcnkgPSBnX2Rpcl9tYWtlX3RtcCgiV2ViS2l0
MlRlc3RzLVhYWFhYWCIsIDApOwotICAgIGdfYXNzZXJ0KGtUZW1wRGlyZWN0b3J5KTsKLQotICAg
IC8vIEFkZCB0ZXN0cyB0byB0aGUgc3VpdGUuCi0gICAgRmF2aWNvbkRhdGFiYXNlVGVzdDo6YWRk
KCJXZWJLaXRGYXZpY29uRGF0YWJhc2UiLCAiZmF2aWNvbi1kYXRhYmFzZS10ZXN0IiwgdGVzdEZh
dmljb25EYXRhYmFzZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdEZhdmljb25EYXRhYmFzZUZp
bmFsaXplZENhbGxiYWNrKGdwb2ludGVyLCBHT2JqZWN0KikKLXsKLSAgICBpZiAoIWdfZmlsZV90
ZXN0KGtUZW1wRGlyZWN0b3J5LCBHX0ZJTEVfVEVTVF9JU19ESVIpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBHT3duUHRyPGNoYXI+IGZpbGVuYW1lKGdfYnVpbGRfZmlsZW5hbWUoa1RlbXBEaXJl
Y3RvcnksICJXZWJwYWdlSWNvbnMuZGIiLCBOVUxMKSk7Ci0gICAgZ191bmxpbmsoZmlsZW5hbWUu
Z2V0KCkpOwotCi0gICAgZ19ybWRpcihrVGVtcERpcmVjdG9yeSk7Ci19Ci0KLXZvaWQgYWZ0ZXJB
bGwoKQotewotICAgIGRlbGV0ZSBrU2VydmVyOwotCi0gICAgLy8gRGVsZXRlIHRoZSB0ZW1wb3Jh
cnkgZmlsZXMgYWZ0ZXIgdGhlIEljb25EYXRhYmFzZSBoYXMgYmVlbgotICAgIC8vIGNsb3NlZCwg
dGhhdCBpcywgb25jZSBXZWJLaXRGYXZpY29uRGF0YWJhc2UgaXMgYmVpbmcgZGVzdHJveWVkLgot
ICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfd2ViX2NvbnRleHRf
Z2V0X2Zhdmljb25fZGF0YWJhc2Uod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCkpOwot
ICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGRhdGFiYXNlKSwgd2Via2l0RmF2aWNvbkRh
dGFiYXNlRmluYWxpemVkQ2FsbGJhY2ssIDApOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdEZpbmRDb250cm9sbGVyLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRGaW5kQ29u
dHJvbGxlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyZWVmNGMuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktp
dEZpbmRDb250cm9sbGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMzNSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgot
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0K
LSNpbmNsdWRlICJMb2FkVHJhY2tpbmdUZXN0LmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2lu
Y2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIu
aD4KLQotc3RhdGljIGNvbnN0IGNoYXIqIHRlc3RTdHJpbmcgPSAiPGh0bWw+PGJvZHk+Zmlyc3Qg
dGVzdGluZyBzZWNvbmQgdGVzdGluZyBzZWNvbmRIYWxmPC9ib2R5PjwvaHRtbD4iOwotCi1jbGFz
cyBGaW5kQ29udHJvbGxlclRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7Ci1wdWJsaWM6Ci0gICAg
TUFLRV9HTElCX1RFU1RfRklYVFVSRShGaW5kQ29udHJvbGxlclRlc3QpOwotCi0gICAgRmluZENv
bnRyb2xsZXJUZXN0KCkKLSAgICAgICAgOiBtX2ZpbmRDb250cm9sbGVyKHdlYmtpdF93ZWJfdmll
d19nZXRfZmluZF9jb250cm9sbGVyKG1fd2ViVmlldykpCi0gICAgICAgICwgbV9ydW5GaW5kVW50
aWxDb21wbGV0aW9uKGZhbHNlKQotICAgIHsKLSAgICAgICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVk
V2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChtX2ZpbmRDb250cm9sbGVyLmdldCgpKSk7Ci0gICAg
fQotCi0gICAgfkZpbmRDb250cm9sbGVyVGVzdCgpCi0gICAgewotICAgICAgICBpZiAobV9maW5k
Q29udHJvbGxlcikKLSAgICAgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0
Y2hlZChtX2ZpbmRDb250cm9sbGVyLmdldCgpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAw
LCAwLCB0aGlzKTsKLSAgICB9Ci0KLSAgICB2b2lkIGZpbmQoY29uc3QgY2hhciogc2VhcmNoVGV4
dCwgZ3VpbnQzMiBmaW5kT3B0aW9ucywgZ3VpbnQgbWF4TWF0Y2hDb3VudCkKLSAgICB7Ci0gICAg
ICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9maW5kQ29udHJvbGxlci5nZXQoKSwgImZvdW5kLXRleHQi
LCBHX0NBTExCQUNLKGZvdW5kVGV4dENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIGdfc2lnbmFs
X2Nvbm5lY3QobV9maW5kQ29udHJvbGxlci5nZXQoKSwgImZhaWxlZC10by1maW5kLXRleHQiLCBH
X0NBTExCQUNLKGZhaWxlZFRvRmluZFRleHRDYWxsYmFjayksIHRoaXMpOwotICAgICAgICB3ZWJr
aXRfZmluZF9jb250cm9sbGVyX3NlYXJjaChtX2ZpbmRDb250cm9sbGVyLmdldCgpLCBzZWFyY2hU
ZXh0LCBmaW5kT3B0aW9ucywgbWF4TWF0Y2hDb3VudCk7Ci0gICAgfQotCi0gICAgdm9pZCBjb3Vu
dChjb25zdCBjaGFyKiBzZWFyY2hUZXh0LCBndWludDMyIGZpbmRPcHRpb25zLCBndWludCBtYXhN
YXRjaENvdW50KQotICAgIHsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX2ZpbmRDb250cm9s
bGVyLmdldCgpLCAiY291bnRlZC1tYXRjaGVzIiwgR19DQUxMQkFDSyhjb3VudGVkTWF0Y2hlc0Nh
bGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfY291bnRfbWF0
Y2hlcyhtX2ZpbmRDb250cm9sbGVyLmdldCgpLCBzZWFyY2hUZXh0LCBmaW5kT3B0aW9ucywgbWF4
TWF0Y2hDb3VudCk7Ci0gICAgfQotCi0gICAgdm9pZCB3YWl0VW50aWxGaW5kRmluaXNoZWQoKQot
ICAgIHsKLSAgICAgICAgbV9ydW5GaW5kVW50aWxDb21wbGV0aW9uID0gdHJ1ZTsKLSAgICAgICAg
Z19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIEdSZWZQdHI8V2ViS2l0
RmluZENvbnRyb2xsZXI+IG1fZmluZENvbnRyb2xsZXI7Ci0gICAgYm9vbCBtX3RleHRGb3VuZDsK
LSAgICB1bnNpZ25lZCBtX21hdGNoQ291bnQ7Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBtX3J1bkZp
bmRVbnRpbENvbXBsZXRpb247Ci0KLSAgICBzdGF0aWMgdm9pZCBmb3VuZFRleHRDYWxsYmFjayhX
ZWJLaXRGaW5kQ29udHJvbGxlciosIGd1aW50IG1hdGNoQ291bnQsIEZpbmRDb250cm9sbGVyVGVz
dCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHRlc3QtPm1fdGV4dEZvdW5kID0gdHJ1ZTsKLSAgICAg
ICAgdGVzdC0+bV9tYXRjaENvdW50ID0gbWF0Y2hDb3VudDsKLSAgICAgICAgaWYgKHRlc3QtPm1f
cnVuRmluZFVudGlsQ29tcGxldGlvbikKLSAgICAgICAgICAgIGdfbWFpbl9sb29wX3F1aXQodGVz
dC0+bV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgZmFpbGVkVG9GaW5kVGV4
dENhbGxiYWNrKFdlYktpdEZpbmRDb250cm9sbGVyKiwgRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0
KQotICAgIHsKLSAgICAgICAgdGVzdC0+bV90ZXh0Rm91bmQgPSBmYWxzZTsKLSAgICAgICAgaWYg
KHRlc3QtPm1fcnVuRmluZFVudGlsQ29tcGxldGlvbikKLSAgICAgICAgICAgIGdfbWFpbl9sb29w
X3F1aXQodGVzdC0+bV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgY291bnRl
ZE1hdGNoZXNDYWxsYmFjayhXZWJLaXRGaW5kQ29udHJvbGxlciosIGd1aW50IG1hdGNoQ291bnQs
IEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHRlc3QtPm1fbWF0Y2hD
b3VudCA9IG1hdGNoQ291bnQ7Ci0gICAgICAgIGlmICh0ZXN0LT5tX3J1bkZpbmRVbnRpbENvbXBs
ZXRpb24pCi0gICAgICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOwot
ICAgIH0KLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RGaW5kQ29udHJvbGxlclRleHRGb3VuZChGaW5k
Q29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+bG9hZEh0
bWwodGVzdFN0cmluZywgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0K
LSAgICB0ZXN0LT5maW5kKCJ0ZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAxKTsK
LSAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0KHRlc3Qt
Pm1fdGV4dEZvdW5kKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVyVGV4dE5v
dEZvdW5kKEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0
ZXN0LT5sb2FkSHRtbCh0ZXN0U3RyaW5nLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmlu
aXNoZWQoKTsKLQotICAgIHRlc3QtPmZpbmQoIm5vdEZvdW5kIiwgV0VCS0lUX0ZJTkRfT1BUSU9O
U19OT05FLCAxKTsKLSAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKLQotICAgIGdf
YXNzZXJ0KCF0ZXN0LT5tX3RleHRGb3VuZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RGaW5kQ29u
dHJvbGxlck1hdGNoQ291bnQoRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVy
KQotewotICAgIHRlc3QtPmxvYWRIdG1sKHRlc3RTdHJpbmcsIDApOwotICAgIHRlc3QtPndhaXRV
bnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgdGVzdC0+ZmluZCgidGVzdGluZyIsIFdFQktJVF9G
SU5EX09QVElPTlNfTk9ORSwgMik7Ci0gICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7
Ci0KLSAgICBnX2Fzc2VydCh0ZXN0LT5tX21hdGNoQ291bnQgPT0gMik7Ci0gICAgZ19hc3NlcnQo
dGVzdC0+bV90ZXh0Rm91bmQpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xsZXJN
YXhNYXRjaENvdW50KEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsK
LSAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0U3RyaW5nLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxM
b2FkRmluaXNoZWQoKTsKLQotICAgIHRlc3QtPmZpbmQoInRlc3RpbmciLCBXRUJLSVRfRklORF9P
UFRJT05TX05PTkUsIDEpOwotICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOwotCi0g
ICAgZ19hc3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09IEdfTUFYVUlOVCk7Ci0gICAgZ19hc3Nl
cnQodGVzdC0+bV90ZXh0Rm91bmQpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xs
ZXJOZXh0KEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0
ZXN0LT5sb2FkSHRtbCh0ZXN0U3RyaW5nLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmlu
aXNoZWQoKTsKLQotICAgIHRlc3QtPmZpbmQoInRlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05T
X05PTkUsIDIpOwotICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOwotCi0gICAgZ19h
c3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fbWF0Y2hDb3Vu
dCA9PSAyKTsKLQotICAgIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX25leHQodGVzdC0+
bV9maW5kQ29udHJvbGxlci5nZXQoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVk
KCk7Ci0KLSAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7Ci0gICAgZ19hc3NlcnQodGVz
dC0+bV9tYXRjaENvdW50ID09IDEpOwotICAgIGdfYXNzZXJ0KCEod2Via2l0X2ZpbmRfY29udHJv
bGxlcl9nZXRfb3B0aW9ucyh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKSAmIFdFQktJVF9G
SU5EX09QVElPTlNfQkFDS1dBUkRTKSk7Ci0KLSAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX3Nl
YXJjaF9uZXh0KHRlc3QtPm1fZmluZENvbnRyb2xsZXIuZ2V0KCkpOwotICAgIHRlc3QtPndhaXRV
bnRpbEZpbmRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3NlcnQoIXRlc3QtPm1fdGV4dEZvdW5kKTsK
LSAgICBnX2Fzc2VydCh0ZXN0LT5tX21hdGNoQ291bnQgPT0gMSk7Ci0gICAgZ19hc3NlcnQoISh3
ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9vcHRpb25zKHRlc3QtPm1fZmluZENvbnRyb2xsZXIu
Z2V0KCkpICYgV0VCS0lUX0ZJTkRfT1BUSU9OU19CQUNLV0FSRFMpKTsKLX0KLQotc3RhdGljIHZv
aWQgdGVzdEZpbmRDb250cm9sbGVyUHJldmlvdXMoRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxvYWRIdG1sKHRlc3RTdHJpbmcsIDApOwotICAg
IHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgdGVzdC0+ZmluZCgidGVzdGlu
ZyIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwgMik7Ci0gICAgdGVzdC0+d2FpdFVudGlsRmlu
ZEZpbmlzaGVkKCk7Ci0KLSAgICBnX2Fzc2VydCh0ZXN0LT5tX21hdGNoQ291bnQgPT0gMik7Ci0g
ICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOwotCi0gICAgd2Via2l0X2ZpbmRfY29udHJv
bGxlcl9zZWFyY2hfbmV4dCh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKTsKLSAgICB0ZXN0
LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZv
dW5kKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX21hdGNoQ291bnQgPT0gMSk7Ci0gICAgZ19hc3Nl
cnQoISh3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9vcHRpb25zKHRlc3QtPm1fZmluZENvbnRy
b2xsZXIuZ2V0KCkpICYgV0VCS0lUX0ZJTkRfT1BUSU9OU19CQUNLV0FSRFMpKTsKLQotICAgIHdl
YmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX3ByZXZpb3VzKHRlc3QtPm1fZmluZENvbnRyb2xs
ZXIuZ2V0KCkpOwotICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOwotCi0gICAgZ19h
c3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fbWF0Y2hDb3Vu
dCA9PSAxKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9vcHRpb25z
KHRlc3QtPm1fZmluZENvbnRyb2xsZXIuZ2V0KCkpICYgV0VCS0lUX0ZJTkRfT1BUSU9OU19CQUNL
V0FSRFMpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xsZXJDb3VudGVkTWF0Y2hl
cyhGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+
bG9hZEh0bWwodGVzdFN0cmluZywgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVk
KCk7Ci0KLSAgICB0ZXN0LT5jb3VudCgidGVzdGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9O
RSwgMik7Ci0gICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7Ci0KLSAgICBnX2Fzc2Vy
dCh0ZXN0LT5tX21hdGNoQ291bnQgPT0gMik7Ci0KLSAgICB0ZXN0LT5jb3VudCgiZmlyc3QiLCBX
RUJLSVRfRklORF9PUFRJT05TX05PTkUsIDIpOwotICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5p
c2hlZCgpOwotCi0gICAgZ19hc3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09IDEpOwotCi0gICAg
dGVzdC0+Y291bnQoIm5vdEZvdW5kIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAyKTsKLSAg
ICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0KCF0ZXN0LT5t
X21hdGNoQ291bnQpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xsZXJPcHRpb25z
KEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5s
b2FkSHRtbCh0ZXN0U3RyaW5nLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQo
KTsKLQotICAgIHRlc3QtPmZpbmQoIlRlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUs
IDIpOwotICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3NlcnQo
IXRlc3QtPm1fdGV4dEZvdW5kKTsKLQotICAgIHRlc3QtPmZpbmQoIlRlc3RpbmciLCBXRUJLSVRf
RklORF9PUFRJT05TX0NBU0VfSU5TRU5TSVRJVkUsIDIpOwotICAgIHRlc3QtPndhaXRVbnRpbEZp
bmRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOwotCi0gICAg
dGVzdC0+ZmluZCgiZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAyKTsKLSAgICB0
ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4
dEZvdW5kKTsKLQotICAgIHRlc3QtPmZpbmQoImVzdGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNf
QVRfV09SRF9TVEFSVFMsIDIpOwotICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOwot
Ci0gICAgZ19hc3NlcnQoIXRlc3QtPm1fdGV4dEZvdW5kKTsKLQotICAgIHRlc3QtPmZpbmQoIkhh
bGYiLCBXRUJLSVRfRklORF9PUFRJT05TX0FUX1dPUkRfU1RBUlRTLCAyKTsKLSAgICB0ZXN0LT53
YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX3RleHRGb3Vu
ZCk7Ci0KLSAgICB0ZXN0LT5maW5kKCJIYWxmIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19BVF9XT1JE
X1NUQVJUUyB8IFdFQktJVF9GSU5EX09QVElPTlNfVFJFQVRfTUVESUFMX0NBUElUQUxfQVNfV09S
RF9TVEFSVCwgMik7Ci0gICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7Ci0KLSAgICBn
X2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7Ci0KLSAgICB0ZXN0LT5maW5kKCJ0ZXN0aW5nIiwg
V0VCS0lUX0ZJTkRfT1BUSU9OU19XUkFQX0FST1VORCwgMyk7Ci0gICAgdGVzdC0+d2FpdFVudGls
RmluZEZpbmlzaGVkKCk7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOwotCi0gICAg
d2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfbmV4dCh0ZXN0LT5tX2ZpbmRDb250cm9sbGVy
LmdldCgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKLSAgICBnX2Fzc2Vy
dCh0ZXN0LT5tX3RleHRGb3VuZCk7Ci0KLSAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJj
aF9uZXh0KHRlc3QtPm1fZmluZENvbnRyb2xsZXIuZ2V0KCkpOwotICAgIHRlc3QtPndhaXRVbnRp
bEZpbmRGaW5pc2hlZCgpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKLX0KLQot
c3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVySGlkZShGaW5kQ29udHJvbGxlclRlc3QqIHRl
c3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+bG9hZEh0bWwodGVzdFN0cmluZywgMCk7
Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICB0ZXN0LT5zaG93SW5X
aW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKLQotICAgIGNhaXJvX3N1cmZhY2VfdCogb3JpZ2lu
YWxTdXJmYWNlID0gY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2UoCi0gICAgICAgIHRlc3QtPmdldFNu
YXBzaG90QW5kV2FpdFVudGlsUmVhZHkoV0VCS0lUX1NOQVBTSE9UX1JFR0lPTl9GVUxMX0RPQ1VN
RU5ULCBXRUJLSVRfU05BUFNIT1RfT1BUSU9OU19OT05FKSk7Ci0gICAgZ19hc3NlcnQob3JpZ2lu
YWxTdXJmYWNlKTsKLQotICAgIHRlc3QtPmZpbmQoInRlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJ
T05TX05PTkUsIDEpOwotICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOwotICAgIGdf
YXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKLQotICAgIGNhaXJvX3N1cmZhY2VfdCogaGlnaGxp
Z2h0U3VyZmFjZSA9IGNhaXJvX3N1cmZhY2VfcmVmZXJlbmNlKAotICAgICAgICB0ZXN0LT5nZXRT
bmFwc2hvdEFuZFdhaXRVbnRpbFJlYWR5KFdFQktJVF9TTkFQU0hPVF9SRUdJT05fRlVMTF9ET0NV
TUVOVCwgV0VCS0lUX1NOQVBTSE9UX09QVElPTlNfTk9ORSkpOwotICAgIGdfYXNzZXJ0KGhpZ2hs
aWdodFN1cmZhY2UpOwotICAgIGdfYXNzZXJ0KCFUZXN0OjpjYWlyb1N1cmZhY2VzRXF1YWwob3Jp
Z2luYWxTdXJmYWNlLCBoaWdobGlnaHRTdXJmYWNlKSk7Ci0KLSAgICBXZWJLaXRGaW5kQ29udHJv
bGxlciogZmluZENvbnRyb2xsZXIgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ZpbmRfY29udHJvbGxl
cih0ZXN0LT5tX3dlYlZpZXcpOwotICAgIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX2Zp
bmlzaChmaW5kQ29udHJvbGxlcik7Ci0gICAgd2Via2l0X3dlYl92aWV3X2V4ZWN1dGVfZWRpdGlu
Z19jb21tYW5kKHRlc3QtPm1fd2ViVmlldywgIlVuc2VsZWN0Iik7Ci0KLSAgICBjYWlyb19zdXJm
YWNlX3QqIHVuaGlnaGxpZ2h0U3VyZmFjZSA9IGNhaXJvX3N1cmZhY2VfcmVmZXJlbmNlKAotICAg
ICAgICB0ZXN0LT5nZXRTbmFwc2hvdEFuZFdhaXRVbnRpbFJlYWR5KFdFQktJVF9TTkFQU0hPVF9S
RUdJT05fRlVMTF9ET0NVTUVOVCwgV0VCS0lUX1NOQVBTSE9UX09QVElPTlNfTk9ORSkpOwotICAg
IGdfYXNzZXJ0KHVuaGlnaGxpZ2h0U3VyZmFjZSk7Ci0gICAgZ19hc3NlcnQoVGVzdDo6Y2Fpcm9T
dXJmYWNlc0VxdWFsKG9yaWdpbmFsU3VyZmFjZSwgdW5oaWdobGlnaHRTdXJmYWNlKSk7Ci0KLSAg
ICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3kob3JpZ2luYWxTdXJmYWNlKTsKLSAgICBjYWlyb19zdXJm
YWNlX2Rlc3Ryb3koaGlnaGxpZ2h0U3VyZmFjZSk7Ci0gICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95
KHVuaGlnaGxpZ2h0U3VyZmFjZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RGaW5kQ29udHJvbGxl
ckluc3RhbmNlKEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAg
ICBXZWJLaXRGaW5kQ29udHJvbGxlciogZmluZENvbnRyb2xsZXIxID0gd2Via2l0X3dlYl92aWV3
X2dldF9maW5kX2NvbnRyb2xsZXIodGVzdC0+bV93ZWJWaWV3KTsKLSAgICBXZWJLaXRGaW5kQ29u
dHJvbGxlciogZmluZENvbnRyb2xsZXIyID0gd2Via2l0X3dlYl92aWV3X2dldF9maW5kX2NvbnRy
b2xsZXIodGVzdC0+bV93ZWJWaWV3KTsKLQotICAgIGdfYXNzZXJ0KGZpbmRDb250cm9sbGVyMSA9
PSBmaW5kQ29udHJvbGxlcjIpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xsZXJH
ZXR0ZXJzKEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBj
b25zdCBjaGFyKiBzZWFyY2hUZXh0ID0gInRlc3RpbmciOwotICAgIGd1aW50IG1heE1hdGNoQ291
bnQgPSAxOwotICAgIGd1aW50MzIgZmluZE9wdGlvbnMgPSBXRUJLSVRfRklORF9PUFRJT05TX1dS
QVBfQVJPVU5EIHwgV0VCS0lUX0ZJTkRfT1BUSU9OU19BVF9XT1JEX1NUQVJUUzsKLSAgICBXZWJL
aXRGaW5kQ29udHJvbGxlciogZmluZENvbnRyb2xsZXIgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2Zp
bmRfY29udHJvbGxlcih0ZXN0LT5tX3dlYlZpZXcpOwotCi0gICAgd2Via2l0X2ZpbmRfY29udHJv
bGxlcl9zZWFyY2goZmluZENvbnRyb2xsZXIsIHNlYXJjaFRleHQsIGZpbmRPcHRpb25zLCBtYXhN
YXRjaENvdW50KTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF93ZWJf
dmlldyhmaW5kQ29udHJvbGxlcikgPT0gdGVzdC0+bV93ZWJWaWV3KTsKLSAgICBnX2Fzc2VydCgh
Z19zdHJjbXAwKHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X3NlYXJjaF90ZXh0KGZpbmRDb250
cm9sbGVyKSwgc2VhcmNoVGV4dCkpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9maW5kX2NvbnRyb2xs
ZXJfZ2V0X21heF9tYXRjaF9jb3VudChmaW5kQ29udHJvbGxlcikgPT0gbWF4TWF0Y2hDb3VudCk7
Ci0gICAgZ19hc3NlcnQod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfb3B0aW9ucyhmaW5kQ29u
dHJvbGxlcikgPT0gZmluZE9wdGlvbnMpOwotfQotCi12b2lkIGJlZm9yZUFsbCgpCi17Ci0gICAg
RmluZENvbnRyb2xsZXJUZXN0OjphZGQoIldlYktpdEZpbmRDb250cm9sbGVyIiwgImdldHRlcnMi
LCB0ZXN0RmluZENvbnRyb2xsZXJHZXR0ZXJzKTsKLSAgICBGaW5kQ29udHJvbGxlclRlc3Q6OmFk
ZCgiV2ViS2l0RmluZENvbnRyb2xsZXIiLCAiaW5zdGFuY2UiLCB0ZXN0RmluZENvbnRyb2xsZXJJ
bnN0YW5jZSk7Ci0gICAgRmluZENvbnRyb2xsZXJUZXN0OjphZGQoIldlYktpdEZpbmRDb250cm9s
bGVyIiwgInRleHQtZm91bmQiLCB0ZXN0RmluZENvbnRyb2xsZXJUZXh0Rm91bmQpOwotICAgIEZp
bmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udHJvbGxlciIsICJ0ZXh0LW5vdC1m
b3VuZCIsIHRlc3RGaW5kQ29udHJvbGxlclRleHROb3RGb3VuZCk7Ci0gICAgRmluZENvbnRyb2xs
ZXJUZXN0OjphZGQoIldlYktpdEZpbmRDb250cm9sbGVyIiwgIm1hdGNoLWNvdW50IiwgdGVzdEZp
bmRDb250cm9sbGVyTWF0Y2hDb3VudCk7Ci0gICAgRmluZENvbnRyb2xsZXJUZXN0OjphZGQoIldl
YktpdEZpbmRDb250cm9sbGVyIiwgIm1heC1tYXRjaC1jb3VudCIsIHRlc3RGaW5kQ29udHJvbGxl
ck1heE1hdGNoQ291bnQpOwotICAgIEZpbmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5k
Q29udHJvbGxlciIsICJuZXh0IiwgdGVzdEZpbmRDb250cm9sbGVyTmV4dCk7Ci0gICAgRmluZENv
bnRyb2xsZXJUZXN0OjphZGQoIldlYktpdEZpbmRDb250cm9sbGVyIiwgInByZXZpb3VzIiwgdGVz
dEZpbmRDb250cm9sbGVyUHJldmlvdXMpOwotICAgIEZpbmRDb250cm9sbGVyVGVzdDo6YWRkKCJX
ZWJLaXRGaW5kQ29udHJvbGxlciIsICJjb3VudGVkLW1hdGNoZXMiLCB0ZXN0RmluZENvbnRyb2xs
ZXJDb3VudGVkTWF0Y2hlcyk7Ci0gICAgRmluZENvbnRyb2xsZXJUZXN0OjphZGQoIldlYktpdEZp
bmRDb250cm9sbGVyIiwgIm9wdGlvbnMiLCB0ZXN0RmluZENvbnRyb2xsZXJPcHRpb25zKTsKLSAg
ICBGaW5kQ29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIiLCAiaGlkZSIs
IHRlc3RGaW5kQ29udHJvbGxlckhpZGUpOwotfQotCi12b2lkIGFmdGVyQWxsKCkKLXsKLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJL
aXRQb2xpY3lDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvVGVzdFdlYktpdFBvbGljeUNsaWVudC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDIwOWVhMDQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvVGVzdFdlYktpdFBvbGljeUNsaWVudC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwy
NjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJMb2FkVHJhY2tpbmdUZXN0LmgiCi0jaW5jbHVkZSAi
V2ViS2l0VGVzdFNlcnZlci5oIgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLXN0YXRpYyBXZWJLaXRUZXN0U2VydmVyKiBr
U2VydmVyOwotCi1jbGFzcyBQb2xpY3lDbGllbnRUZXN0OiBwdWJsaWMgTG9hZFRyYWNraW5nVGVz
dCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShQb2xpY3lDbGllbnRUZXN0
KTsKLQotICAgIGVudW0gUG9saWN5RGVjaXNpb25SZXNwb25zZSB7Ci0gICAgICAgIFVzZSwKLSAg
ICAgICAgSWdub3JlLAotICAgICAgICBEb3dubG9hZCwKLSAgICAgICAgTm9uZQotICAgIH07Ci0K
LSAgICBQb2xpY3lDbGllbnRUZXN0KCkKLSAgICAgICAgOiBMb2FkVHJhY2tpbmdUZXN0KCkKLSAg
ICAgICAgLCBtX3BvbGljeURlY2lzaW9uUmVzcG9uc2UoTm9uZSkKLSAgICAgICAgLCBtX3BvbGlj
eURlY2lzaW9uVHlwZUZpbHRlcigwKQotICAgICAgICAsIG1fcmVzcG9uZFRvUG9saWN5RGVjaXNp
b25Bc3luY2hyb25vdXNseShmYWxzZSkKLSAgICAgICAgLCBtX2hhbHRNYWluTG9vcEFmdGVyTWFr
aW5nRGVjaXNpb24oZmFsc2UpCi0gICAgewotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2Vi
VmlldywgImRlY2lkZS1wb2xpY3kiLCBHX0NBTExCQUNLKGRlY2lkZVBvbGljeUNhbGxiYWNrKSwg
dGhpcyk7Ci0gICAgfQotCi0gICAgc3RhdGljIGdib29sZWFuIHF1aXRNYWluTG9vcExhdGVyKEdN
YWluTG9vcCogbG9vcCkKLSAgICB7Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci0g
ICAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCByZXNwb25kVG9Q
b2xpY3lEZWNpc2lvbihQb2xpY3lDbGllbnRUZXN0KiB0ZXN0LCBXZWJLaXRQb2xpY3lEZWNpc2lv
biogZGVjaXNpb24pCi0gICAgewotICAgICAgICBzd2l0Y2ggKHRlc3QtPm1fcG9saWN5RGVjaXNp
b25SZXNwb25zZSkgewotICAgICAgICBjYXNlIFVzZToKLSAgICAgICAgICAgIHdlYmtpdF9wb2xp
Y3lfZGVjaXNpb25fdXNlKGRlY2lzaW9uKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIElnbm9yZToKLSAgICAgICAgICAgIHdlYmtpdF9wb2xpY3lfZGVjaXNpb25faWdub3JlKGRl
Y2lzaW9uKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERvd25sb2FkOgotICAg
ICAgICAgICAgd2Via2l0X3BvbGljeV9kZWNpc2lvbl9kb3dubG9hZChkZWNpc2lvbik7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBOb25lOgotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAodGVzdC0+bV9oYWx0TWFpbkxvb3BBZnRlck1ha2luZ0Rl
Y2lzaW9uKQotICAgICAgICAgICAgZ19pZGxlX2FkZChyZWludGVycHJldF9jYXN0PEdTb3VyY2VG
dW5jPihxdWl0TWFpbkxvb3BMYXRlciksIHRlc3QtPm1fbWFpbkxvb3ApOwotICAgIH0KLQotICAg
IHN0YXRpYyBnYm9vbGVhbiByZXNwb25kVG9Qb2xpY3lEZWNpc2lvbkxhdGVyKFBvbGljeUNsaWVu
dFRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICByZXNwb25kVG9Qb2xpY3lEZWNpc2lvbih0ZXN0
LCB0ZXN0LT5tX3ByZXZpb3VzUG9saWN5RGVjaXNpb24uZ2V0KCkpOwotICAgICAgICB0ZXN0LT5t
X3ByZXZpb3VzUG9saWN5RGVjaXNpb24gPSAwOwotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAg
fQotCi0gICAgc3RhdGljIGdib29sZWFuIGRlY2lkZVBvbGljeUNhbGxiYWNrKFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcsIFdlYktpdFBvbGljeURlY2lzaW9uKiBkZWNpc2lvbiwgV2ViS2l0UG9saWN5
RGVjaXNpb25UeXBlIHR5cGUsIFBvbGljeUNsaWVudFRlc3QqIHRlc3QpCi0gICAgewotICAgICAg
ICBpZiAodGVzdC0+bV9wb2xpY3lEZWNpc2lvblR5cGVGaWx0ZXIgIT0gdHlwZSkKLSAgICAgICAg
ICAgIHJldHVybiBGQUxTRTsKLQotICAgICAgICB0ZXN0LT5tX3ByZXZpb3VzUG9saWN5RGVjaXNp
b24gPSBkZWNpc2lvbjsKLSAgICAgICAgaWYgKHRlc3QtPm1fcmVzcG9uZFRvUG9saWN5RGVjaXNp
b25Bc3luY2hyb25vdXNseSkgewotICAgICAgICAgICAgZ19pZGxlX2FkZChyZWludGVycHJldF9j
YXN0PEdTb3VyY2VGdW5jPihyZXNwb25kVG9Qb2xpY3lEZWNpc2lvbkxhdGVyKSwgdGVzdCk7Ci0g
ICAgICAgICAgICByZXR1cm4gVFJVRTsKLSAgICAgICAgfQotCi0gICAgICAgIHJlc3BvbmRUb1Bv
bGljeURlY2lzaW9uKHRlc3QsIGRlY2lzaW9uKTsKLQotICAgICAgICAvLyBXZSByZXR1cm4gRkFM
U0UgaGVyZSB0byBlbnN1cmUgdGhhdCB0aGUgZGVmYXVsdCBwb2xpY3kgZGVjaXNpb24KLSAgICAg
ICAgLy8gaGFuZGxlciBkb2Vzbid0IG92ZXJyaWRlIHdoYXRldmVyIHdlIHVzZSBoZXJlLgotICAg
ICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gICAgUG9saWN5RGVjaXNpb25SZXNwb25zZSBt
X3BvbGljeURlY2lzaW9uUmVzcG9uc2U7Ci0gICAgaW50IG1fcG9saWN5RGVjaXNpb25UeXBlRmls
dGVyOwotICAgIGJvb2wgbV9yZXNwb25kVG9Qb2xpY3lEZWNpc2lvbkFzeW5jaHJvbm91c2x5Owot
ICAgIGJvb2wgbV9oYWx0TWFpbkxvb3BBZnRlck1ha2luZ0RlY2lzaW9uOwotICAgIEdSZWZQdHI8
V2ViS2l0UG9saWN5RGVjaXNpb24+IG1fcHJldmlvdXNQb2xpY3lEZWNpc2lvbjsKLX07Ci0KLXN0
YXRpYyB2b2lkIHRlc3ROYXZpZ2F0aW9uUG9saWN5KFBvbGljeUNsaWVudFRlc3QqIHRlc3QsIGdj
b25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+bV9wb2xpY3lEZWNpc2lvblR5cGVGaWx0ZXIgPSBX
RUJLSVRfUE9MSUNZX0RFQ0lTSU9OX1RZUEVfTkFWSUdBVElPTl9BQ1RJT047Ci0KLSAgICB0ZXN0
LT5tX3BvbGljeURlY2lzaW9uUmVzcG9uc2UgPSBQb2xpY3lDbGllbnRUZXN0OjpVc2U7Ci0gICAg
dGVzdC0+bG9hZEh0bWwoIjxodG1sLz4iLCAiaHR0cDovL3dlYmtpdGd0ay5vcmcvIik7Ci0gICAg
dGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHRlc3Qt
Pm1fbG9hZEV2ZW50cy5zaXplKCksID09LCAzKTsKLQotICAgIC8vIElkZWFsbHkgd2UnZCBsaWtl
IHRvIGhhdmUgYSBtb3JlIGludGVuc2l2ZSB0ZXN0IGhlcmUsIGJ1dCBpdCdzIHN0aWxsIHByZXR0
eSB0cmlja3kKLSAgICAvLyB0byB0cmlnZ2VyIGRpZmZlcmVudCB0eXBlcyBvZiBuYXZpZ2F0aW9u
cyB3aXRoIHRoZSBHVEsrIFdlYktpdDIgQVBJLgotICAgIFdlYktpdE5hdmlnYXRpb25Qb2xpY3lE
ZWNpc2lvbiogZGVjaXNpb24gPSBXRUJLSVRfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJT04odGVz
dC0+bV9wcmV2aW91c1BvbGljeURlY2lzaW9uLmdldCgpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
d2Via2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF9uYXZpZ2F0aW9uX3R5cGUoZGVj
aXNpb24pLCA9PSwgV0VCS0lUX05BVklHQVRJT05fVFlQRV9PVEhFUik7Ci0gICAgZ19hc3NlcnRf
Y21waW50KHdlYmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRfbW91c2VfYnV0dG9u
KGRlY2lzaW9uKSwgPT0sIDApOwotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfbmF2aWdhdGlv
bl9wb2xpY3lfZGVjaXNpb25fZ2V0X21vZGlmaWVycyhkZWNpc2lvbiksID09LCAwKTsKLSAgICBn
X2Fzc2VydF9jbXBzdHIod2Via2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF9mcmFt
ZV9uYW1lKGRlY2lzaW9uKSwgPT0sIDApOwotICAgIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3Qg
PSB3ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0X3JlcXVlc3QoZGVjaXNpb24p
OwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0
KSwgPT0sICJodHRwOi8vd2Via2l0Z3RrLm9yZy8iKTsKLQotICAgIHRlc3QtPm1fcG9saWN5RGVj
aXNpb25SZXNwb25zZSA9IFBvbGljeUNsaWVudFRlc3Q6OlVzZTsKLSAgICB0ZXN0LT5tX3Jlc3Bv
bmRUb1BvbGljeURlY2lzaW9uQXN5bmNocm9ub3VzbHkgPSB0cnVlOwotICAgIHRlc3QtPmxvYWRI
dG1sKCI8aHRtbC8+IiwgImh0dHA6Ly93ZWJraXRndGsub3JnLyIpOwotICAgIHRlc3QtPndhaXRV
bnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVu
dHMuc2l6ZSgpLCA9PSwgMyk7Ci0KLSAgICAvLyBJZiB3ZSBhcmUgd2FpdGluZyB1bnRpbCBsb2Fk
IGNvbXBsZXRpb24sIGl0IHdpbGwgbmV2ZXIgY29tcGxldGUgaWYgd2UgaWdub3JlIHRoZQotICAg
IC8vIG5hdmlnYXRpb24uIFNvIHdlIHRlbGwgdGhlIG1haW4gbG9vcCB0byBxdWl0IHNvbWV0aW1l
IGxhdGVyLgotICAgIHRlc3QtPm1fcG9saWN5RGVjaXNpb25SZXNwb25zZSA9IFBvbGljeUNsaWVu
dFRlc3Q6Oklnbm9yZTsKLSAgICB0ZXN0LT5tX3Jlc3BvbmRUb1BvbGljeURlY2lzaW9uQXN5bmNo
cm9ub3VzbHkgPSBmYWxzZTsKLSAgICB0ZXN0LT5tX2hhbHRNYWluTG9vcEFmdGVyTWFraW5nRGVj
aXNpb24gPSB0cnVlOwotICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbC8+IiwgImh0dHA6Ly93ZWJr
aXRndGsub3JnLyIpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGdf
YXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHMuc2l6ZSgpLCA9PSwgMCk7Ci0KLSAgICB0
ZXN0LT5tX3BvbGljeURlY2lzaW9uUmVzcG9uc2UgPSBQb2xpY3lDbGllbnRUZXN0OjpJZ25vcmU7
Ci0gICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sLz4iLCAiaHR0cDovL3dlYmtpdGd0ay5vcmcvIik7
Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgZ19hc3NlcnRfY21waW50
KHRlc3QtPm1fbG9hZEV2ZW50cy5zaXplKCksID09LCAwKTsKLX0KLQotc3RhdGljIHZvaWQgdGVz
dFJlc3BvbnNlUG9saWN5KFBvbGljeUNsaWVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17
Ci0gICAgdGVzdC0+bV9wb2xpY3lEZWNpc2lvblR5cGVGaWx0ZXIgPSBXRUJLSVRfUE9MSUNZX0RF
Q0lTSU9OX1RZUEVfUkVTUE9OU0U7Ci0KLSAgICB0ZXN0LT5tX3BvbGljeURlY2lzaW9uUmVzcG9u
c2UgPSBQb2xpY3lDbGllbnRUZXN0OjpVc2U7Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5n
ZXRVUklGb3JQYXRoKCIvIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNo
ZWQoKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0s
IDMpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMF0sID09LCBMb2Fk
VHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsKLSAgICBnX2Fzc2VydF9jbXBp
bnQodGVzdC0+bV9sb2FkRXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZENvbW1p
dHRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1syXSwgPT0sIExv
YWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7Ci0KLSAgICBXZWJLaXRSZXNwb25zZVBvbGlj
eURlY2lzaW9uKiBkZWNpc2lvbiA9IFdFQktJVF9SRVNQT05TRV9QT0xJQ1lfREVDSVNJT04odGVz
dC0+bV9wcmV2aW91c1BvbGljeURlY2lzaW9uLmdldCgpKTsKLSAgICBXZWJLaXRVUklSZXF1ZXN0
KiByZXF1ZXN0ID0gd2Via2l0X3Jlc3BvbnNlX3BvbGljeV9kZWNpc2lvbl9nZXRfcmVxdWVzdChk
ZWNpc2lvbik7Ci0gICAgZ19hc3NlcnQoV0VCS0lUX0lTX1VSSV9SRVFVRVNUKHJlcXVlc3QpKTsK
LSAgICBBU1NFUlRfQ01QX0NTVFJJTkcod2Via2l0X3VyaV9yZXF1ZXN0X2dldF91cmkocmVxdWVz
dCksID09LCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIikpOwotICAgIFdlYktpdFVSSVJlc3Bv
bnNlKiByZXNwb25zZSA9IHdlYmtpdF9yZXNwb25zZV9wb2xpY3lfZGVjaXNpb25fZ2V0X3Jlc3Bv
bnNlKGRlY2lzaW9uKTsKLSAgICBnX2Fzc2VydChXRUJLSVRfSVNfVVJJX1JFU1BPTlNFKHJlc3Bv
bnNlKSk7Ci0gICAgQVNTRVJUX0NNUF9DU1RSSU5HKHdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0X3Vy
aShyZXNwb25zZSksID09LCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIikpOwotICAgIGdfYXNz
ZXJ0KHdlYmtpdF93ZWJfdmlld19jYW5fc2hvd19taW1lX3R5cGUodGVzdC0+bV93ZWJWaWV3LCB3
ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF9taW1lX3R5cGUocmVzcG9uc2UpKSA9PQotICAgICAgICB3
ZWJraXRfcmVzcG9uc2VfcG9saWN5X2RlY2lzaW9uX2lzX21pbWVfdHlwZV9zdXBwb3J0ZWQoZGVj
aXNpb24pKTsKLQotICAgIHRlc3QtPm1fcmVzcG9uZFRvUG9saWN5RGVjaXNpb25Bc3luY2hyb25v
dXNseSA9IHRydWU7Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIv
IikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBnX2Fz
c2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0sIDMpOwotICAgIGdfYXNz
ZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQ
cm92aXNpb25hbExvYWRTdGFydGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2Fk
RXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZENvbW1pdHRlZCk7Ci0gICAgZ19h
c3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6
OkxvYWRGaW5pc2hlZCk7Ci0KLSAgICB0ZXN0LT5tX3Jlc3BvbmRUb1BvbGljeURlY2lzaW9uQXN5
bmNocm9ub3VzbHkgPSBmYWxzZTsKLSAgICB0ZXN0LT5tX3BvbGljeURlY2lzaW9uUmVzcG9uc2Ug
PSBQb2xpY3lDbGllbnRUZXN0OjpJZ25vcmU7Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5n
ZXRVUklGb3JQYXRoKCIvIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNo
ZWQoKTsKLQotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHMuc2l6ZSgpLCA9
PSwgMyk7Ci0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1swXSwgPT0sIExv
YWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOwotICAgIGdfYXNzZXJ0X2Nt
cGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNp
b25hbExvYWRGYWlsZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNb
Ml0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOwotfQotCi1zdHJ1Y3QgQ3Jl
YXRlQ2FsbGJhY2tEYXRhIHsKLSAgICBib29sIHRyaWVkVG9PcGVuV2luZG93OwotICAgIEdNYWlu
TG9vcCogbWFpbkxvb3A7Ci19OwotCi1zdGF0aWMgV2ViS2l0V2ViVmlldyogY3JlYXRlQ2FsbGJh
Y2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgQ3JlYXRlQ2FsbGJhY2tEYXRhKiBkYXRhKQotewot
ICAgIGRhdGEtPnRyaWVkVG9PcGVuV2luZG93ID0gdHJ1ZTsKLSAgICBnX21haW5fbG9vcF9xdWl0
KGRhdGEtPm1haW5Mb29wKTsKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgdGVzdE5l
d1dpbmRvd1BvbGljeShQb2xpY3lDbGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewot
ICAgIHN0YXRpYyBjb25zdCBjaGFyKiB3aW5kb3dPcGVuaW5nSFRNTCA9Ci0gICAgICAgICI8aHRt
bD48Ym9keT4iCi0gICAgICAgICIgICAgPGEgaWQ9XCJsaW5rXCIgaHJlZj1cImh0dHA6Ly93d3cu
Z29vZ2xlLmNvbVwiIHRhcmdldD1cIl9ibGFua1wiPkxpbms8L2E+IgotICAgICAgICAiICAgIDxz
Y3JpcHQ+IgotICAgICAgICAiICAgICAgICB2YXIgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVu
dCgnTW91c2VFdmVudHMnKTsiCi0gICAgICAgICIgICAgICAgIGV2ZW50LmluaXRFdmVudCgnY2xp
Y2snLCB0cnVlLCBmYWxzZSk7IgotICAgICAgICAiICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnbGluaycpLmRpc3BhdGNoRXZlbnQoZXZlbnQpOyIKLSAgICAgICAgIiAgICA8L3Njcmlw
dD4iCi0gICAgICAgICI8L2JvZHk+PC9odG1sPiI7Ci0gICAgdGVzdC0+bV9wb2xpY3lEZWNpc2lv
blR5cGVGaWx0ZXIgPSBXRUJLSVRfUE9MSUNZX0RFQ0lTSU9OX1RZUEVfTkVXX1dJTkRPV19BQ1RJ
T047Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9qYXZhc2NyaXB0X2Nhbl9vcGVuX3dpbmRvd3Nf
YXV0b21hdGljYWxseSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHRlc3QtPm1fd2ViVmll
dyksIFRSVUUpOwotCi0gICAgQ3JlYXRlQ2FsbGJhY2tEYXRhIGRhdGE7Ci0gICAgZGF0YS50cmll
ZFRvT3BlbldpbmRvdyA9IGZhbHNlOwotICAgIGRhdGEubWFpbkxvb3AgPSB0ZXN0LT5tX21haW5M
b29wOwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh0ZXN0LT5tX3dlYlZpZXcsICJjcmVhdGUiLCBH
X0NBTExCQUNLKGNyZWF0ZUNhbGxiYWNrKSwgJmRhdGEpOwotICAgIHRlc3QtPm1fcG9saWN5RGVj
aXNpb25SZXNwb25zZSA9IFBvbGljeUNsaWVudFRlc3Q6OlVzZTsKLSAgICB0ZXN0LT5sb2FkSHRt
bCh3aW5kb3dPcGVuaW5nSFRNTCwgImh0dHA6Ly93ZWJraXRndGsub3JnLyIpOwotICAgIHRlc3Qt
PndhaXQoMSk7Ci0gICAgZ19hc3NlcnQoZGF0YS50cmllZFRvT3BlbldpbmRvdyk7Ci0KLSAgICBX
ZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24qIGRlY2lzaW9uID0gV0VCS0lUX05BVklHQVRJ
T05fUE9MSUNZX0RFQ0lTSU9OKHRlc3QtPm1fcHJldmlvdXNQb2xpY3lEZWNpc2lvbi5nZXQoKSk7
Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9n
ZXRfZnJhbWVfbmFtZShkZWNpc2lvbiksID09LCAiX2JsYW5rIik7Ci0KLSAgICAvLyBVc2luZyBh
IHNob3J0IHRpbWVvdXQgaXMgYSBiaXQgdWdseSBoZXJlLCBidXQgaXQncyBoYXJkIHRvIGdldCBh
cm91bmQgYmVjYXVzZSBpZiB3ZSBibG9jawotICAgIC8vIHRoZSBuZXcgd2luZG93IHNpZ25hbCB3
ZSBjYW5ub3QgaGFsdCB0aGUgbWFpbiBsb29wIGluIHRoZSBjcmVhdGUgY2FsbGJhY2suIElmIHdl
Ci0gICAgLy8gaGFsdCB0aGUgbWFpbiBsb29wIGluIHRoZSBwb2xpY3kgZGVjaXNpb24sIHRoZSBj
cmVhdGUgY2FsbGJhY2sgbmV2ZXIgZXhlY3V0ZXMuCi0gICAgZGF0YS50cmllZFRvT3BlbldpbmRv
dyA9IGZhbHNlOwotICAgIHRlc3QtPm1fcG9saWN5RGVjaXNpb25SZXNwb25zZSA9IFBvbGljeUNs
aWVudFRlc3Q6Oklnbm9yZTsKLSAgICB0ZXN0LT5sb2FkSHRtbCh3aW5kb3dPcGVuaW5nSFRNTCwg
Imh0dHA6Ly93ZWJraXRndGsub3JnLyIpOwotICAgIHRlc3QtPndhaXQoLjIpOwotICAgIGdfYXNz
ZXJ0KCFkYXRhLnRyaWVkVG9PcGVuV2luZG93KTsKLX0KLQotc3RhdGljIHZvaWQgc2VydmVyQ2Fs
bGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hh
ciogcGF0aCwgR0hhc2hUYWJsZSosIFNvdXBDbGllbnRDb250ZXh0KiwgZ3BvaW50ZXIpCi17Ci0g
ICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKLSAgICAgICAgc291
cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVE
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChnX3N0cl9lcXVhbChwYXRoLCAi
LyIpKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiByZXNwb25zZVN0cmluZyA9ICI8aHRt
bD48Ym9keT5UZXN0aW5nITwvYm9keT48L2h0bWw+IjsKLSAgICAgICAgc291cF9tZXNzYWdlX3Nl
dF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOwotICAgICAgICBzb3VwX21lc3NhZ2Vf
Ym9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBy
ZXNwb25zZVN0cmluZywgc3RybGVuKHJlc3BvbnNlU3RyaW5nKSk7Ci0gICAgICAgIHNvdXBfbWVz
c2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOwotICAgIH0gZWxzZQot
ICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1Rf
Rk9VTkQpOwotfQotCi12b2lkIGJlZm9yZUFsbCgpCi17Ci0gICAga1NlcnZlciA9IG5ldyBXZWJL
aXRUZXN0U2VydmVyKCk7Ci0gICAga1NlcnZlci0+cnVuKHNlcnZlckNhbGxiYWNrKTsKLQotICAg
IFBvbGljeUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0UG9saWN5Q2xpZW50IiwgIm5hdmlnYXRpb24t
cG9saWN5IiwgdGVzdE5hdmlnYXRpb25Qb2xpY3kpOwotICAgIFBvbGljeUNsaWVudFRlc3Q6OmFk
ZCgiV2ViS2l0UG9saWN5Q2xpZW50IiwgInJlc3BvbnNlLXBvbGljeSIsIHRlc3RSZXNwb25zZVBv
bGljeSk7Ci0gICAgUG9saWN5Q2xpZW50VGVzdDo6YWRkKCJXZWJLaXRQb2xpY3lDbGllbnQiLCAi
bmV3LXdpbmRvdy1wb2xpY3kiLCB0ZXN0TmV3V2luZG93UG9saWN5KTsKLX0KLQotdm9pZCBhZnRl
ckFsbCgpCi17Ci0gICAgZGVsZXRlIGtTZXJ2ZXI7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0U2V0dGluZ3MuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFNldHRpbmdzLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzFkMzAxOC4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0U2V0dGluZ3Mu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMp
IDIwMTEgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgCi0gKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0gKgotICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl
LCAKLSAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKgotICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKLSAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IAotICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBOZWl0aGVyIHRoZSBuYW1lIG9mIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgCi0gKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IAotICog
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgCi0g
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCAKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1Ig
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIAotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSAKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIAotICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIAotICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiVGVzdE1haW4uaCIKLSNpbmNsdWRl
ICJXZWJWaWV3VGVzdC5oIgotI2luY2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKLSNpbmNsdWRl
IDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+Ci0jaW5jbHVkZSA8d3Rm
L2dvYmplY3QvR1JlZlB0ci5oPgotCi1zdGF0aWMgV2ViS2l0VGVzdFNlcnZlciogZ1NlcnZlcjsK
LQotc3RhdGljIHZvaWQgdGVzdFdlYktpdFNldHRpbmdzKFRlc3QqLCBnY29uc3Rwb2ludGVyKQot
ewotICAgIFdlYktpdFNldHRpbmdzKiBzZXR0aW5ncyA9IHdlYmtpdF9zZXR0aW5nc19uZXcoKTsK
LQotICAgIC8vIEphdmFTY3JpcHQgaXMgZW5hYmxlZCBieSBkZWZhdWx0LgotICAgIGdfYXNzZXJ0
KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2phdmFzY3JpcHQoc2V0dGluZ3MpKTsKLSAgICB3
ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9qYXZhc2NyaXB0KHNldHRpbmdzLCBGQUxTRSk7Ci0g
ICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2phdmFzY3JpcHQoc2V0dGlu
Z3MpKTsKLQotICAgIC8vIEJ5IGRlZmF1bHQgYXV0by1sb2FkLWltYWdlIGlzIHRydWUuCi0gICAg
Z19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9hdXRvX2xvYWRfaW1hZ2VzKHNldHRpbmdzKSk7
Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9hdXRvX2xvYWRfaW1hZ2VzKHNldHRpbmdzLCBGQUxT
RSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfYXV0b19sb2FkX2ltYWdlcyhz
ZXR0aW5ncykpOwotCi0gICAgLy8gbG9hZC1pY29ucy1pZ25vcmluZy1pbWFnZS1sb2FkLXNldHRp
bmcgaXMgZmFsc2UgYnkgZGVmYXVsdC4KLSAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dl
dF9sb2FkX2ljb25zX2lnbm9yaW5nX2ltYWdlX2xvYWRfc2V0dGluZyhzZXR0aW5ncykpOwotICAg
IHdlYmtpdF9zZXR0aW5nc19zZXRfbG9hZF9pY29uc19pZ25vcmluZ19pbWFnZV9sb2FkX3NldHRp
bmcoc2V0dGluZ3MsIFRSVUUpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfbG9h
ZF9pY29uc19pZ25vcmluZ19pbWFnZV9sb2FkX3NldHRpbmcoc2V0dGluZ3MpKTsKLSAgICAKLSAg
ICAvLyBPZmZsaW5lIGFwcGxpY2F0aW9uIGNhY2hlIGlzIHRydWUgYnkgZGVmYXVsdC4KLSAgICBn
X2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9vZmZsaW5lX3dlYl9hcHBsaWNhdGlv
bl9jYWNoZShzZXR0aW5ncykpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX29mZmxp
bmVfd2ViX2FwcGxpY2F0aW9uX2NhY2hlKHNldHRpbmdzLCBGQUxTRSk7Ci0gICAgZ19hc3NlcnQo
IXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX29mZmxpbmVfd2ViX2FwcGxpY2F0aW9uX2NhY2hl
KHNldHRpbmdzKSk7Ci0KLSAgICAvLyBMb2NhbCBzdG9yYWdlIGlzIGVuYWJsZSBieSBkZWZhdWx0
LgotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2h0bWw1X2xvY2FsX3N0
b3JhZ2Uoc2V0dGluZ3MpKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9odG1sNV9s
b2NhbF9zdG9yYWdlKHNldHRpbmdzLCBGQUxTRSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0
aW5nc19nZXRfZW5hYmxlX2h0bWw1X2xvY2FsX3N0b3JhZ2Uoc2V0dGluZ3MpKTsKLQotICAgIC8v
IEhUTUw1IGRhdGFiYXNlIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4KLSAgICBnX2Fzc2VydCh3ZWJr
aXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9odG1sNV9kYXRhYmFzZShzZXR0aW5ncykpOwotICAgIHdl
YmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX2h0bWw1X2RhdGFiYXNlKHNldHRpbmdzLCBGQUxTRSk7
Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2h0bWw1X2RhdGFiYXNl
KHNldHRpbmdzKSk7Ci0KLSAgICAvLyBYU1MgQXVkaXRvciBpcyBlbmFibGVkIGJ5IGRlZmF1bHQu
Ci0gICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfeHNzX2F1ZGl0b3Ioc2V0
dGluZ3MpKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV94c3NfYXVkaXRvcihzZXR0
aW5ncywgRkFMU0UpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV94
c3NfYXVkaXRvcihzZXR0aW5ncykpOwotCi0gICAgLy8gRnJhbWUgZmxhdHRlbmluZyBpcyBkaXNh
YmxlZCBieSBkZWZhdWx0LgotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJs
ZV9mcmFtZV9mbGF0dGVuaW5nKHNldHRpbmdzKSk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9l
bmFibGVfZnJhbWVfZmxhdHRlbmluZyhzZXR0aW5ncywgVFJVRSk7Ci0gICAgZ19hc3NlcnQod2Vi
a2l0X3NldHRpbmdzX2dldF9lbmFibGVfZnJhbWVfZmxhdHRlbmluZyhzZXR0aW5ncykpOwotCi0g
ICAgLy8gUGx1Z2lucyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0LgotICAgIGdfYXNzZXJ0KHdlYmtp
dF9zZXR0aW5nc19nZXRfZW5hYmxlX3BsdWdpbnMoc2V0dGluZ3MpKTsKLSAgICB3ZWJraXRfc2V0
dGluZ3Nfc2V0X2VuYWJsZV9wbHVnaW5zKHNldHRpbmdzLCBGQUxTRSk7Ci0gICAgZ19hc3NlcnQo
IXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3BsdWdpbnMoc2V0dGluZ3MpKTsKLQotICAgIC8v
IEphdmEgaXMgZW5hYmxlZCBieSBkZWZhdWx0LgotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5n
c19nZXRfZW5hYmxlX2phdmEoc2V0dGluZ3MpKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2Vu
YWJsZV9qYXZhKHNldHRpbmdzLCBGQUxTRSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5n
c19nZXRfZW5hYmxlX2phdmEoc2V0dGluZ3MpKTsKLQotICAgIC8vIEJ5IGRlZmF1bHQsIEphdmFT
Y3JpcHQgY2FuIG9wZW4gd2luZG93cyBhdXRvbWF0aWNhbGx5IGlzIGRpc2FibGVkLgotICAgIGdf
YXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2phdmFzY3JpcHRfY2FuX29wZW5fd2luZG93c19h
dXRvbWF0aWNhbGx5KHNldHRpbmdzKSk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9qYXZhc2Ny
aXB0X2Nhbl9vcGVuX3dpbmRvd3NfYXV0b21hdGljYWxseShzZXR0aW5ncywgVFJVRSk7Ci0gICAg
Z19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9qYXZhc2NyaXB0X2Nhbl9vcGVuX3dpbmRvd3Nf
YXV0b21hdGljYWxseShzZXR0aW5ncykpOwotCi0gICAgLy8gQnkgZGVmYXVsdCBoeXBlciBsaW5r
IGF1ZGl0aW5nIGlzIGRpc2FibGVkLgotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0
X2VuYWJsZV9oeXBlcmxpbmtfYXVkaXRpbmcoc2V0dGluZ3MpKTsKLSAgICB3ZWJraXRfc2V0dGlu
Z3Nfc2V0X2VuYWJsZV9oeXBlcmxpbmtfYXVkaXRpbmcoc2V0dGluZ3MsIFRSVUUpOwotICAgIGdf
YXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2h5cGVybGlua19hdWRpdGluZyhzZXR0
aW5ncykpOwotCi0gICAgLy8gRGVmYXVsdCBmb250IGZhbWlseSBpcyAic2Fucy1zZXJpZiIuCi0g
ICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zZXR0aW5nc19nZXRfZGVmYXVsdF9mb250X2ZhbWls
eShzZXR0aW5ncyksID09LCAic2Fucy1zZXJpZiIpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRf
ZGVmYXVsdF9mb250X2ZhbWlseShzZXR0aW5ncywgIm1vbm9zcGFjZSIpOwotICAgIGdfYXNzZXJ0
X2NtcHN0cih3ZWJraXRfc2V0dGluZ3NfZ2V0X2RlZmF1bHRfZm9udF9mYW1pbHkoc2V0dGluZ3Mp
LCA9PSwgIm1vbm9zcGFjZSIpOwotCi0gICAgLy8gRGVmYXVsdCBtb25vc3BhY2UgZm9udCBmYW1p
bHkgZm9udCBmYW1pbHkgaXMgIm1vbm9zcGFjZSIuCi0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtp
dF9zZXR0aW5nc19nZXRfbW9ub3NwYWNlX2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJtb25v
c3BhY2UiKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X21vbm9zcGFjZV9mb250X2ZhbWlseShz
ZXR0aW5ncywgInNhbnMtc2VyaWYiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NldHRp
bmdzX2dldF9tb25vc3BhY2VfZm9udF9mYW1pbHkoc2V0dGluZ3MpLCA9PSwgInNhbnMtc2VyaWYi
KTsKLQotICAgIC8vIERlZmF1bHQgc2VyaWYgZm9udCBmYW1pbHkgaXMgInNlcmlmIi4KLSAgICBn
X2Fzc2VydF9jbXBzdHIod2Via2l0X3NldHRpbmdzX2dldF9zZXJpZl9mb250X2ZhbWlseShzZXR0
aW5ncyksID09LCAic2VyaWYiKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X3NlcmlmX2ZvbnRf
ZmFtaWx5KHNldHRpbmdzLCAic2Fucy1zZXJpZiIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJr
aXRfc2V0dGluZ3NfZ2V0X3NlcmlmX2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJzYW5zLXNl
cmlmIik7Ci0KLSAgICAvLyBEZWZhdWx0IHNhbnMgc2VyaWYgZm9udCBmYW1pbHkgaXMgInNhbnMt
c2VyaWYiLgotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2V0dGluZ3NfZ2V0X3NhbnNfc2Vy
aWZfZm9udF9mYW1pbHkoc2V0dGluZ3MpLCA9PSwgInNhbnMtc2VyaWYiKTsKLSAgICB3ZWJraXRf
c2V0dGluZ3Nfc2V0X3NhbnNfc2VyaWZfZm9udF9mYW1pbHkoc2V0dGluZ3MsICJzZXJpZiIpOwot
ICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2V0dGluZ3NfZ2V0X3NhbnNfc2VyaWZfZm9udF9m
YW1pbHkoc2V0dGluZ3MpLCA9PSwgInNlcmlmIik7Ci0KLSAgICAvLyBEZWZhdWx0IGN1cnNpdmUg
Zm9udCBmYW1pbHkgInNlcmlmIi4KLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NldHRpbmdz
X2dldF9jdXJzaXZlX2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJzZXJpZiIpOwotICAgIHdl
YmtpdF9zZXR0aW5nc19zZXRfY3Vyc2l2ZV9mb250X2ZhbWlseShzZXR0aW5ncywgInNhbnMtc2Vy
aWYiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NldHRpbmdzX2dldF9jdXJzaXZlX2Zv
bnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJzYW5zLXNlcmlmIik7Ci0KLSAgICAvLyBEZWZhdWx0
IGZhbnRhc3kgZm9udCBmYW1pbHkgaXMgInNlcmlmIi4KLSAgICBnX2Fzc2VydF9jbXBzdHIod2Vi
a2l0X3NldHRpbmdzX2dldF9mYW50YXN5X2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJzZXJp
ZiIpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZmFudGFzeV9mb250X2ZhbWlseShzZXR0aW5n
cywgInNhbnMtc2VyaWYiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NldHRpbmdzX2dl
dF9mYW50YXN5X2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJzYW5zLXNlcmlmIik7Ci0KLSAg
ICAvLyBEZWZhdWx0IHBpY3RvZ3JhcGggZm9udCBmYW1pbHkgaXMgInNlcmlmIi4KLSAgICBnX2Fz
c2VydF9jbXBzdHIod2Via2l0X3NldHRpbmdzX2dldF9waWN0b2dyYXBoX2ZvbnRfZmFtaWx5KHNl
dHRpbmdzKSwgPT0sICJzZXJpZiIpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfcGljdG9ncmFw
aF9mb250X2ZhbWlseShzZXR0aW5ncywgInNhbnMtc2VyaWYiKTsKLSAgICBnX2Fzc2VydF9jbXBz
dHIod2Via2l0X3NldHRpbmdzX2dldF9waWN0b2dyYXBoX2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwg
PT0sICJzYW5zLXNlcmlmIik7Ci0KLSAgICAvLyBEZWZhdWx0IGZvbnQgc2l6ZSBpcyAxNi4KLSAg
ICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9zZXR0aW5nc19nZXRfZGVmYXVsdF9mb250X3NpemUo
c2V0dGluZ3MpLCA9PSwgMTYpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZGVmYXVsdF9mb250
X3NpemUoc2V0dGluZ3MsIDE0KTsKLSAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9zZXR0aW5n
c19nZXRfZGVmYXVsdF9mb250X3NpemUoc2V0dGluZ3MpLCA9PSwgMTQpOwotCi0gICAgLy8gRGVm
YXVsdCBtb25vc3BhY2UgZm9udCBzaXplIGlzIDEzLgotICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Vi
a2l0X3NldHRpbmdzX2dldF9kZWZhdWx0X21vbm9zcGFjZV9mb250X3NpemUoc2V0dGluZ3MpLCA9
PSwgMTMpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZGVmYXVsdF9tb25vc3BhY2VfZm9udF9z
aXplKHNldHRpbmdzLCAxMCk7Ci0gICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfc2V0dGluZ3Nf
Z2V0X2RlZmF1bHRfbW9ub3NwYWNlX2ZvbnRfc2l6ZShzZXR0aW5ncyksID09LCAxMCk7Ci0KLSAg
ICAvLyBEZWZhdWx0IG1pbmltdW0gZm9udCBzaXplIGlzIDAuCi0gICAgZ19hc3NlcnRfY21wdWlu
dCh3ZWJraXRfc2V0dGluZ3NfZ2V0X21pbmltdW1fZm9udF9zaXplKHNldHRpbmdzKSwgPT0sIDAp
OwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfbWluaW11bV9mb250X3NpemUoc2V0dGluZ3MsIDcp
OwotICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X3NldHRpbmdzX2dldF9taW5pbXVtX2ZvbnRf
c2l6ZShzZXR0aW5ncyksID09LCA3KTsKLQotICAgIC8vIERlZmF1bHQgY2hhcnNldCBpcyAiaXNv
LTg4NTktMSIuCi0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zZXR0aW5nc19nZXRfZGVmYXVs
dF9jaGFyc2V0KHNldHRpbmdzKSwgPT0sICJpc28tODg1OS0xIik7Ci0gICAgd2Via2l0X3NldHRp
bmdzX3NldF9kZWZhdWx0X2NoYXJzZXQoc2V0dGluZ3MsICJ1dGY4Iik7Ci0gICAgZ19hc3NlcnRf
Y21wc3RyKHdlYmtpdF9zZXR0aW5nc19nZXRfZGVmYXVsdF9jaGFyc2V0KHNldHRpbmdzKSwgPT0s
ICJ1dGY4Iik7Ci0KLSAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfcHJp
dmF0ZV9icm93c2luZyhzZXR0aW5ncykpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxl
X3ByaXZhdGVfYnJvd3Npbmcoc2V0dGluZ3MsIFRSVUUpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9z
ZXR0aW5nc19nZXRfZW5hYmxlX3ByaXZhdGVfYnJvd3Npbmcoc2V0dGluZ3MpKTsKLQotICAgIGdf
YXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9kZXZlbG9wZXJfZXh0cmFzKHNldHRp
bmdzKSk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfZGV2ZWxvcGVyX2V4dHJhcyhz
ZXR0aW5ncywgVFJVRSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVf
ZGV2ZWxvcGVyX2V4dHJhcyhzZXR0aW5ncykpOwotCi0gICAgZ19hc3NlcnQod2Via2l0X3NldHRp
bmdzX2dldF9lbmFibGVfcmVzaXphYmxlX3RleHRfYXJlYXMoc2V0dGluZ3MpKTsKLSAgICB3ZWJr
aXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9yZXNpemFibGVfdGV4dF9hcmVhcyhzZXR0aW5ncywgRkFM
U0UpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9yZXNpemFibGVf
dGV4dF9hcmVhcyhzZXR0aW5ncykpOwotCi0gICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dl
dF9lbmFibGVfdGFic190b19saW5rcyhzZXR0aW5ncykpOwotICAgIHdlYmtpdF9zZXR0aW5nc19z
ZXRfZW5hYmxlX3RhYnNfdG9fbGlua3Moc2V0dGluZ3MsIEZBTFNFKTsKLSAgICBnX2Fzc2VydCgh
d2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfdGFic190b19saW5rcyhzZXR0aW5ncykpOwotCi0g
ICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2Ruc19wcmVmZXRjaGluZyhz
ZXR0aW5ncykpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX2Ruc19wcmVmZXRjaGlu
ZyhzZXR0aW5ncywgVFJVRSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFi
bGVfZG5zX3ByZWZldGNoaW5nKHNldHRpbmdzKSk7Ci0KLSAgICAvLyBDYXJldCBicm93c2luZyBp
cyBkaXNhYmxlZCBieSBkZWZhdWx0LgotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0
X2VuYWJsZV9jYXJldF9icm93c2luZyhzZXR0aW5ncykpOwotICAgIHdlYmtpdF9zZXR0aW5nc19z
ZXRfZW5hYmxlX2NhcmV0X2Jyb3dzaW5nKHNldHRpbmdzLCBUUlVFKTsKLSAgICBnX2Fzc2VydCh3
ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9jYXJldF9icm93c2luZyhzZXR0aW5ncykpOwotCi0g
ICAgLy8gRnVsbHNjcmVlbiBKYXZhU2NyaXB0IEFQSSBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCi0g
ICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfZnVsbHNjcmVlbihzZXR0aW5n
cykpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX2Z1bGxzY3JlZW4oc2V0dGluZ3Ms
IEZBTFNFKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfZnVsbHNj
cmVlbihzZXR0aW5ncykpOwotCi0gICAgLy8gUHJpbnQgYmFja2dyb3VuZHMgaXMgZW5hYmxlZCBi
eSBkZWZhdWx0Ci0gICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9wcmludF9iYWNrZ3Jv
dW5kcyhzZXR0aW5ncykpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfcHJpbnRfYmFja2dyb3Vu
ZHMoc2V0dGluZ3MsIEZBTFNFKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9w
cmludF9iYWNrZ3JvdW5kcyhzZXR0aW5ncykpOwotCi0gICAgLy8gV2ViQXVkaW8gaXMgZGlzYWJs
ZWQgYnkgZGVmYXVsdC4KLSAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVf
d2ViYXVkaW8oc2V0dGluZ3MpKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV93ZWJh
dWRpbyhzZXR0aW5ncywgVFJVRSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9l
bmFibGVfd2ViYXVkaW8oc2V0dGluZ3MpKTsKLQotICAgIC8vIFdlYkdMIGlzIGRpc2FibGVkIGJ5
IGRlZmF1bHQuCi0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3dlYmds
KHNldHRpbmdzKSk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfd2ViZ2woc2V0dGlu
Z3MsIFRSVUUpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3dlYmds
KHNldHRpbmdzKSk7Ci0KLSAgICAvLyBBbGxvdyBNb2RhbCBEaWFsb2dzIGlzIGRpc2FibGVkIGJ5
IGRlZmF1bHQuCi0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfYWxsb3dfbW9kYWxf
ZGlhbG9ncyhzZXR0aW5ncykpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfYWxsb3dfbW9kYWxf
ZGlhbG9ncyhzZXR0aW5ncywgVFJVRSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dl
dF9hbGxvd19tb2RhbF9kaWFsb2dzKHNldHRpbmdzKSk7Ci0KLSAgICAvLyBab29tIHRleHQgb25s
eSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3Nf
Z2V0X3pvb21fdGV4dF9vbmx5KHNldHRpbmdzKSk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF96
b29tX3RleHRfb25seShzZXR0aW5ncywgVFJVRSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3NldHRp
bmdzX2dldF96b29tX3RleHRfb25seShzZXR0aW5ncykpOwotCi0gICAgLy8gQnkgZGVmYXVsdCwg
SmF2YVNjcmlwdCBjYW5ub3QgYWNjZXNzIHRoZSBjbGlwYm9hcmQuCi0gICAgZ19hc3NlcnQoIXdl
YmtpdF9zZXR0aW5nc19nZXRfamF2YXNjcmlwdF9jYW5fYWNjZXNzX2NsaXBib2FyZChzZXR0aW5n
cykpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfamF2YXNjcmlwdF9jYW5fYWNjZXNzX2NsaXBi
b2FyZChzZXR0aW5ncywgVFJVRSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9q
YXZhc2NyaXB0X2Nhbl9hY2Nlc3NfY2xpcGJvYXJkKHNldHRpbmdzKSk7Ci0KLSAgICAvLyBCeSBk
ZWZhdWx0LCBtZWRpYSBwbGF5YmFjayBkb2Vzbid0IHJlcXVpcmUgdXNlciBnZXN0dXJlcy4KLSAg
ICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9tZWRpYV9wbGF5YmFja19yZXF1aXJlc191
c2VyX2dlc3R1cmUoc2V0dGluZ3MpKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X21lZGlhX3Bs
YXliYWNrX3JlcXVpcmVzX3VzZXJfZ2VzdHVyZShzZXR0aW5ncywgVFJVRSk7Ci0gICAgZ19hc3Nl
cnQod2Via2l0X3NldHRpbmdzX2dldF9tZWRpYV9wbGF5YmFja19yZXF1aXJlc191c2VyX2dlc3R1
cmUoc2V0dGluZ3MpKTsKLQotICAgIC8vIEJ5IGRlZmF1bHQsIGlubGluZSBtZWRpYSBwbGF5YmFj
ayBpcyBhbGxvd2VkCi0gICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9tZWRpYV9wbGF5
YmFja19hbGxvd3NfaW5saW5lKHNldHRpbmdzKSk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9t
ZWRpYV9wbGF5YmFja19hbGxvd3NfaW5saW5lKHNldHRpbmdzLCBGQUxTRSk7Ci0gICAgZ19hc3Nl
cnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfbWVkaWFfcGxheWJhY2tfYWxsb3dzX2lubGluZShzZXR0
aW5ncykpOwotCi0gICAgLy8gQnkgZGVmYXVsdCwgZGVidWcgaW5kaWNhdG9ycyBhcmUgZGlzYWJs
ZWQuCi0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZHJhd19jb21wb3NpdGluZ19p
bmRpY2F0b3JzKHNldHRpbmdzKSk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9kcmF3X2NvbXBv
c2l0aW5nX2luZGljYXRvcnMoc2V0dGluZ3MsIFRSVUUpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9z
ZXR0aW5nc19nZXRfZHJhd19jb21wb3NpdGluZ19pbmRpY2F0b3JzKHNldHRpbmdzKSk7Ci0KLSAg
ICAvLyBCeSBkZWZhdWx0LCBzaXRlIHNwZWNpZmljIHF1aXJrcyBhcmUgZGlzYWJsZWQuCi0gICAg
Z19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3NpdGVfc3BlY2lmaWNfcXVpcmtz
KHNldHRpbmdzKSk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfc2l0ZV9zcGVjaWZp
Y19xdWlya3Moc2V0dGluZ3MsIFRSVUUpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19n
ZXRfZW5hYmxlX3NpdGVfc3BlY2lmaWNfcXVpcmtzKHNldHRpbmdzKSk7Ci0KLSAgICAvLyBCeSBk
ZWZhdWx0LCBwYWdlIGNhY2hlIGlzIGVuYWJsZWQuCi0gICAgZ19hc3NlcnQod2Via2l0X3NldHRp
bmdzX2dldF9lbmFibGVfcGFnZV9jYWNoZShzZXR0aW5ncykpOwotICAgIHdlYmtpdF9zZXR0aW5n
c19zZXRfZW5hYmxlX3BhZ2VfY2FjaGUoc2V0dGluZ3MsIEZBTFNFKTsKLSAgICBnX2Fzc2VydCgh
d2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfcGFnZV9jYWNoZShzZXR0aW5ncykpOwotCi0gICAg
Ly8gQnkgZGVmYXVsdCwgc21vb3RoIHNjcm9sbGluZyBpcyBkaXNhYmxlZC4KLSAgICBnX2Fzc2Vy
dCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfc21vb3RoX3Njcm9sbGluZyhzZXR0aW5ncykp
OwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX3Ntb290aF9zY3JvbGxpbmcoc2V0dGlu
Z3MsIFRSVUUpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3Ntb290
aF9zY3JvbGxpbmcoc2V0dGluZ3MpKTsKLQotICAgIC8vIEJ5IGRlZmF1bHQsIGFjY2VsZXJhdGVk
IDJEIGNhbnZhcyBpcyBkaXNhYmxlZC4KLSAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dl
dF9lbmFibGVfYWNjZWxlcmF0ZWRfMmRfY2FudmFzKHNldHRpbmdzKSk7Ci0gICAgd2Via2l0X3Nl
dHRpbmdzX3NldF9lbmFibGVfYWNjZWxlcmF0ZWRfMmRfY2FudmFzKHNldHRpbmdzLCBUUlVFKTsK
LSAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9hY2NlbGVyYXRlZF8yZF9j
YW52YXMoc2V0dGluZ3MpKTsKLQotICAgIC8vIEJ5IGRlZmF1bHQsIHdyaXRpbmcgb2YgY29uc29s
ZSBtZXNzYWdlcyB0byBzdGRvdXQgaXMgZGlzYWJsZWQuCi0gICAgZ19hc3NlcnQoIXdlYmtpdF9z
ZXR0aW5nc19nZXRfZW5hYmxlX3dyaXRlX2NvbnNvbGVfbWVzc2FnZXNfdG9fc3Rkb3V0KHNldHRp
bmdzKSk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfd3JpdGVfY29uc29sZV9tZXNz
YWdlc190b19zdGRvdXQoc2V0dGluZ3MsIFRSVUUpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0
aW5nc19nZXRfZW5hYmxlX3dyaXRlX2NvbnNvbGVfbWVzc2FnZXNfdG9fc3Rkb3V0KHNldHRpbmdz
KSk7Ci0KLSAgICAvLyBNZWRpYVN0cmVhbSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgotICAgIGdf
YXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9tZWRpYV9zdHJlYW0oc2V0dGluZ3Mp
KTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9tZWRpYV9zdHJlYW0oc2V0dGluZ3Ms
IFRSVUUpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX21lZGlhX3N0
cmVhbShzZXR0aW5ncykpOwotCi0gICAgLy8gQnkgZGVmYXVsdCwgU3BhdGlhbE5hdmlnYXRpb24g
aXMgZGlzYWJsZWQKLSAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfc3Bh
dGlhbF9uYXZpZ2F0aW9uKHNldHRpbmdzKSk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFi
bGVfc3BhdGlhbF9uYXZpZ2F0aW9uKHNldHRpbmdzLCBUUlVFKTsKLSAgICBnX2Fzc2VydCh3ZWJr
aXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9zcGF0aWFsX25hdmlnYXRpb24oc2V0dGluZ3MpKTsKLQot
ICAgIC8vIE1lZGlhU291cmNlIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQKLSAgICBnX2Fzc2VydCgh
d2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfbWVkaWFzb3VyY2Uoc2V0dGluZ3MpKTsKLSAgICB3
ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9tZWRpYXNvdXJjZShzZXR0aW5ncywgVFJVRSk7Ci0g
ICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfbWVkaWFzb3VyY2Uoc2V0dGlu
Z3MpKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKEdfT0JKRUNUKHNldHRpbmdzKSk7Ci19Ci0KLXZv
aWQgdGVzdFdlYktpdFNldHRpbmdzTmV3V2l0aFNldHRpbmdzKFRlc3QqIHRlc3QsIGdjb25zdHBv
aW50ZXIpCi17Ci0gICAgR1JlZlB0cjxXZWJLaXRTZXR0aW5ncz4gc2V0dGluZ3MgPSBhZG9wdEdS
ZWYod2Via2l0X3NldHRpbmdzX25ld193aXRoX3NldHRpbmdzKCJlbmFibGUtamF2YXNjcmlwdCIs
IEZBTFNFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXV0by1sb2FkLWltYWdlcyIsIEZB
TFNFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibG9hZC1pY29ucy1pZ25vcmluZy1pbWFn
ZS1sb2FkLXNldHRpbmciLCBUUlVFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKSk7
Ci0gICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVD
VChzZXR0aW5ncy5nZXQoKSkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2Vu
YWJsZV9qYXZhc2NyaXB0KHNldHRpbmdzLmdldCgpKSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9z
ZXR0aW5nc19nZXRfYXV0b19sb2FkX2ltYWdlcyhzZXR0aW5ncy5nZXQoKSkpOwotICAgIGdfYXNz
ZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfbG9hZF9pY29uc19pZ25vcmluZ19pbWFnZV9sb2FkX3Nl
dHRpbmcoc2V0dGluZ3MuZ2V0KCkpKTsKLX0KLQotc3RhdGljIENTdHJpbmcgY29udmVydFdlYlZp
ZXdNYWluUmVzb3VyY2VEYXRhVG9DU3RyaW5nKFdlYlZpZXdUZXN0KiB0ZXN0KQotewotICAgIHNp
emVfdCBtYWluUmVzb3VyY2VEYXRhU2l6ZSA9IDA7Ci0gICAgY29uc3QgY2hhciogbWFpblJlc291
cmNlRGF0YSA9IHRlc3QtPm1haW5SZXNvdXJjZURhdGEobWFpblJlc291cmNlRGF0YVNpemUpOwot
ICAgIHJldHVybiBDU3RyaW5nKG1haW5SZXNvdXJjZURhdGEsIG1haW5SZXNvdXJjZURhdGFTaXpl
KTsKLX0KLQotc3RhdGljIHZvaWQgYXNzZXJ0VGhhdFVzZXJBZ2VudElzU2VudEluSGVhZGVycyhX
ZWJWaWV3VGVzdCogdGVzdCwgY29uc3QgQ1N0cmluZyYgdXNlckFnZW50KQotewotICAgIHRlc3Qt
PmxvYWRVUkkoZ1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+
d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgQVNTRVJUX0NNUF9DU1RSSU5HKGNvbnZlcnRX
ZWJWaWV3TWFpblJlc291cmNlRGF0YVRvQ1N0cmluZyh0ZXN0KSwgPT0sIHVzZXJBZ2VudCk7Ci19
Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJLaXRTZXR0aW5nc1VzZXJBZ2VudChXZWJWaWV3VGVzdCog
dGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBHUmVmUHRyPFdlYktpdFNldHRpbmdzPiBzZXR0
aW5ncyA9IGFkb3B0R1JlZih3ZWJraXRfc2V0dGluZ3NfbmV3KCkpOwotICAgIENTdHJpbmcgZGVm
YXVsdFVzZXJBZ2VudCA9IHdlYmtpdF9zZXR0aW5nc19nZXRfdXNlcl9hZ2VudChzZXR0aW5ncy5n
ZXQoKSk7Ci0gICAgd2Via2l0X3dlYl92aWV3X3NldF9zZXR0aW5ncyh0ZXN0LT5tX3dlYlZpZXcs
IHNldHRpbmdzLmdldCgpKTsKLQotICAgIGdfYXNzZXJ0KGdfc3Ryc3RyX2xlbihkZWZhdWx0VXNl
ckFnZW50LmRhdGEoKSwgLTEsICJBcHBsZVdlYktpdCIpKTsKLSAgICBnX2Fzc2VydChnX3N0cnN0
cl9sZW4oZGVmYXVsdFVzZXJBZ2VudC5kYXRhKCksIC0xLCAiU2FmYXJpIikpOwotCi0gICAgd2Vi
a2l0X3NldHRpbmdzX3NldF91c2VyX2FnZW50KHNldHRpbmdzLmdldCgpLCAwKTsKLSAgICBnX2Fz
c2VydF9jbXBzdHIoZGVmYXVsdFVzZXJBZ2VudC5kYXRhKCksID09LCB3ZWJraXRfc2V0dGluZ3Nf
Z2V0X3VzZXJfYWdlbnQoc2V0dGluZ3MuZ2V0KCkpKTsKLSAgICBhc3NlcnRUaGF0VXNlckFnZW50
SXNTZW50SW5IZWFkZXJzKHRlc3QsIGRlZmF1bHRVc2VyQWdlbnQuZGF0YSgpKTsKLQotICAgIHdl
YmtpdF9zZXR0aW5nc19zZXRfdXNlcl9hZ2VudChzZXR0aW5ncy5nZXQoKSwgIiIpOwotICAgIGdf
YXNzZXJ0X2NtcHN0cihkZWZhdWx0VXNlckFnZW50LmRhdGEoKSwgPT0sIHdlYmtpdF9zZXR0aW5n
c19nZXRfdXNlcl9hZ2VudChzZXR0aW5ncy5nZXQoKSkpOwotCi0gICAgY29uc3QgY2hhciogZnVu
a3lVc2VyQWdlbnQgPSAiRnVua3khIjsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X3VzZXJfYWdl
bnQoc2V0dGluZ3MuZ2V0KCksIGZ1bmt5VXNlckFnZW50KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIo
ZnVua3lVc2VyQWdlbnQsID09LCB3ZWJraXRfc2V0dGluZ3NfZ2V0X3VzZXJfYWdlbnQoc2V0dGlu
Z3MuZ2V0KCkpKTsKLSAgICBhc3NlcnRUaGF0VXNlckFnZW50SXNTZW50SW5IZWFkZXJzKHRlc3Qs
IGZ1bmt5VXNlckFnZW50KTsKLQotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfdXNlcl9hZ2VudF93
aXRoX2FwcGxpY2F0aW9uX2RldGFpbHMoc2V0dGluZ3MuZ2V0KCksICJXZWJLaXRHVEsrIiwgMCk7
Ci0gICAgY29uc3QgY2hhciogdXNlckFnZW50V2l0aE51bGxWZXJzaW9uID0gd2Via2l0X3NldHRp
bmdzX2dldF91c2VyX2FnZW50KHNldHRpbmdzLmdldCgpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIo
Z19zdHJzdHJfbGVuKHVzZXJBZ2VudFdpdGhOdWxsVmVyc2lvbiwgLTEsIGRlZmF1bHRVc2VyQWdl
bnQuZGF0YSgpKSwgPT0sIHVzZXJBZ2VudFdpdGhOdWxsVmVyc2lvbik7Ci0gICAgZ19hc3NlcnQo
Z19zdHJzdHJfbGVuKHVzZXJBZ2VudFdpdGhOdWxsVmVyc2lvbiwgLTEsICJXZWJLaXRHVEsrIikp
OwotCi0gICAgd2Via2l0X3NldHRpbmdzX3NldF91c2VyX2FnZW50X3dpdGhfYXBwbGljYXRpb25f
ZGV0YWlscyhzZXR0aW5ncy5nZXQoKSwgIldlYktpdEdUSysiLCAiIik7Ci0gICAgZ19hc3NlcnRf
Y21wc3RyKHdlYmtpdF9zZXR0aW5nc19nZXRfdXNlcl9hZ2VudChzZXR0aW5ncy5nZXQoKSksID09
LCB1c2VyQWdlbnRXaXRoTnVsbFZlcnNpb24pOwotCi0gICAgd2Via2l0X3NldHRpbmdzX3NldF91
c2VyX2FnZW50X3dpdGhfYXBwbGljYXRpb25fZGV0YWlscyhzZXR0aW5ncy5nZXQoKSwgIldlYkNh
dEdUSysiLCAiMy40LjUiKTsKLSAgICBjb25zdCBjaGFyKiBuZXdVc2VyQWdlbnQgPSB3ZWJraXRf
c2V0dGluZ3NfZ2V0X3VzZXJfYWdlbnQoc2V0dGluZ3MuZ2V0KCkpOwotICAgIGdfYXNzZXJ0KGdf
c3Ryc3RyX2xlbihuZXdVc2VyQWdlbnQsIC0xLCAiMy40LjUiKSk7Ci0gICAgZ19hc3NlcnQoZ19z
dHJzdHJfbGVuKG5ld1VzZXJBZ2VudCwgLTEsICJXZWJDYXRHVEsrIikpOwotfQotCi1zdGF0aWMg
dm9pZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtZXNz
YWdlLCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiwgU291cENsaWVudENvbnRleHQqLCBn
cG9pbnRlcikKLXsKLSAgICBpZiAobWVzc2FnZS0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkg
ewotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19O
T1RfSU1QTEVNRU5URUQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGdfc3Ry
X2VxdWFsKHBhdGgsICIvIikpIHsKLSAgICAgICAgY29uc3QgY2hhciogdXNlckFnZW50ID0gc291
cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X29uZShtZXNzYWdlLT5yZXF1ZXN0X2hlYWRlcnMsICJVc2Vy
LUFnZW50Iik7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBf
U1RBVFVTX09LKTsKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJl
c3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX0NPUFksIHVzZXJBZ2VudCwgc3RybGVuKHVzZXJBZ2Vu
dCkpOwotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25z
ZV9ib2R5KTsKLSAgICB9IGVsc2UKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVz
c2FnZSwgU09VUF9TVEFUVVNfTk9UX0ZPVU5EKTsKLX0KLQotdm9pZCBiZWZvcmVBbGwoKQotewot
ICAgIGdTZXJ2ZXIgPSBuZXcgV2ViS2l0VGVzdFNlcnZlcigpOwotICAgIGdTZXJ2ZXItPnJ1bihz
ZXJ2ZXJDYWxsYmFjayk7Ci0KLSAgICBUZXN0OjphZGQoIldlYktpdFNldHRpbmdzIiwgIndlYmtp
dC1zZXR0aW5ncyIsIHRlc3RXZWJLaXRTZXR0aW5ncyk7Ci0gICAgVGVzdDo6YWRkKCJXZWJLaXRT
ZXR0aW5ncyIsICJuZXctd2l0aC1zZXR0aW5ncyIsIHRlc3RXZWJLaXRTZXR0aW5nc05ld1dpdGhT
ZXR0aW5ncyk7Ci0gICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0U2V0dGluZ3MiLCAidXNlci1h
Z2VudCIsIHRlc3RXZWJLaXRTZXR0aW5nc1VzZXJBZ2VudCk7Ci19Ci0KLXZvaWQgYWZ0ZXJBbGwo
KQotewotICAgIGRlbGV0ZSBnU2VydmVyOwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0VmVyc2lvbi5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0VmVyc2lvbi5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3NDdmZjkuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFZlcnNpb24uY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJ
Z2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLDEgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiVGVzdE1haW4uaCIK
LSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+Ci0KLQot
c3RhdGljIHZvaWQgdGVzdFdlYktpdFZlcnNpb24oVGVzdCosIGdjb25zdHBvaW50ZXIpCi17Ci0g
ICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfZ2V0X21ham9yX3ZlcnNpb24oKSwgPT0sIFdFQktJ
VF9NQUpPUl9WRVJTSU9OKTsKLSAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9nZXRfbWlub3Jf
dmVyc2lvbigpLCA9PSwgV0VCS0lUX01JTk9SX1ZFUlNJT04pOwotICAgIGdfYXNzZXJ0X2NtcHVp
bnQod2Via2l0X2dldF9taWNyb192ZXJzaW9uKCksID09LCBXRUJLSVRfTUlDUk9fVkVSU0lPTik7
Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJLaXRDaGVja1ZlcnNpb24oVGVzdCosIGdjb25zdHBv
aW50ZXIpCi17Ci0gICAgZ19hc3NlcnQoV0VCS0lUX0NIRUNLX1ZFUlNJT04oV0VCS0lUX01BSk9S
X1ZFUlNJT04sIFdFQktJVF9NSU5PUl9WRVJTSU9OLCBXRUJLSVRfTUlDUk9fVkVSU0lPTikpOwot
ICAgIGdfYXNzZXJ0KCFXRUJLSVRfQ0hFQ0tfVkVSU0lPTihXRUJLSVRfTUFKT1JfVkVSU0lPTiAr
IDEsIFdFQktJVF9NSU5PUl9WRVJTSU9OLCBXRUJLSVRfTUlDUk9fVkVSU0lPTikpOwotICAgIGdf
YXNzZXJ0KCFXRUJLSVRfQ0hFQ0tfVkVSU0lPTihXRUJLSVRfTUFKT1JfVkVSU0lPTiwgV0VCS0lU
X01JTk9SX1ZFUlNJT04gKyAxLCBXRUJLSVRfTUlDUk9fVkVSU0lPTikpOwotICAgIGdfYXNzZXJ0
KCFXRUJLSVRfQ0hFQ0tfVkVSU0lPTihXRUJLSVRfTUFKT1JfVkVSU0lPTiwgV0VCS0lUX01JTk9S
X1ZFUlNJT04sIFdFQktJVF9NSUNST19WRVJTSU9OICsgMSkpOwotfQotCi12b2lkIGJlZm9yZUFs
bCgpCi17Ci0gICAgVGVzdDo6YWRkKCJXZWJLaXRWZXJzaW9uIiwgInZlcnNpb24iLCB0ZXN0V2Vi
S2l0VmVyc2lvbik7Ci0gICAgVGVzdDo6YWRkKCJXZWJLaXRWZXJzaW9uIiwgImNoZWNrLXZlcnNp
b24iLCB0ZXN0V2ViS2l0Q2hlY2tWZXJzaW9uKTsKLX0KLQotdm9pZCBhZnRlckFsbCgpCi17Ci19
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0
V2ViS2l0V2ViQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9UZXN0V2ViS2l0V2ViQ29udGV4dC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDkzMGY0MDYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvVGVzdFdlYktpdFdlYkNvbnRleHQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDI1
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLQotI2luY2x1ZGUgIkxvYWRUcmFja2luZ1Rlc3QuaCIKLSNpbmNsdWRlICJX
ZWJLaXRUZXN0U2VydmVyLmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHdlYmtp
dDIvd2Via2l0Mi5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL2dv
YmplY3QvR093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0KLXN0YXRpYyBXZWJLaXRUZXN0U2VydmVyKiBr
U2VydmVyOwotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViQ29udGV4dERlZmF1bHQoVGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKLXsKLSAgICAvLyBDaGVjayB0aGVyZSdzIGEgc2luZ2xlIGluc3RhbmNl
IG9mIHRoZSBkZWZhdWx0IHdlYiBjb250ZXh0LgotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfY29u
dGV4dF9nZXRfZGVmYXVsdCgpID09IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpKTsK
LX0KLQotY2xhc3MgUGx1Z2luc1Rlc3Q6IHB1YmxpYyBUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtF
X0dMSUJfVEVTVF9GSVhUVVJFKFBsdWdpbnNUZXN0KTsKLQotICAgIFBsdWdpbnNUZXN0KCkKLSAg
ICAgICAgOiBtX2NvbnRleHQod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCkpCi0gICAg
ICAgICwgbV9tYWluTG9vcChnX21haW5fbG9vcF9uZXcoMCwgVFJVRSkpCi0gICAgICAgICwgbV9w
bHVnaW5zKDApCi0gICAgewotICAgICAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X2FkZGl0aW9u
YWxfcGx1Z2luc19kaXJlY3RvcnkobV9jb250ZXh0LCBXRUJLSVRfVEVTVF9QTFVHSU5fRElSKTsK
LSAgICB9Ci0KLSAgICB+UGx1Z2luc1Rlc3QoKQotICAgIHsKLSAgICAgICAgZ19tYWluX2xvb3Bf
dW5yZWYobV9tYWluTG9vcCk7Ci0gICAgICAgIGdfbGlzdF9mcmVlX2Z1bGwobV9wbHVnaW5zLCBn
X29iamVjdF91bnJlZik7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgZ2V0UGx1Z2luc0FzeW5j
UmVhZHlDYWxsYmFjayhHT2JqZWN0KiwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIFBsdWdpbnNUZXN0
KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+bV9wbHVnaW5zID0gd2Via2l0X3dlYl9jb250
ZXh0X2dldF9wbHVnaW5zX2ZpbmlzaCh0ZXN0LT5tX2NvbnRleHQsIHJlc3VsdCwgMCk7Ci0gICAg
ICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgR0xp
c3QqIGdldFBsdWdpbnMoKQotICAgIHsKLSAgICAgICAgZ19saXN0X2ZyZWVfZnVsbChtX3BsdWdp
bnMsIGdfb2JqZWN0X3VucmVmKTsKLSAgICAgICAgd2Via2l0X3dlYl9jb250ZXh0X2dldF9wbHVn
aW5zKG1fY29udGV4dCwgMCwgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihn
ZXRQbHVnaW5zQXN5bmNSZWFkeUNhbGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIGdfbWFpbl9sb29w
X3J1bihtX21haW5Mb29wKTsKLSAgICAgICAgcmV0dXJuIG1fcGx1Z2luczsKLSAgICB9Ci0KLSAg
ICBXZWJLaXRXZWJDb250ZXh0KiBtX2NvbnRleHQ7Ci0gICAgR01haW5Mb29wKiBtX21haW5Mb29w
OwotICAgIEdMaXN0KiBtX3BsdWdpbnM7Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViQ29udGV4
dEdldFBsdWdpbnMoUGx1Z2luc1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgR0xp
c3QqIHBsdWdpbnMgPSB0ZXN0LT5nZXRQbHVnaW5zKCk7Ci0gICAgZ19hc3NlcnQocGx1Z2lucyk7
Ci0KLSAgICBHUmVmUHRyPFdlYktpdFBsdWdpbj4gdGVzdFBsdWdpbjsKLSAgICBmb3IgKEdMaXN0
KiBpdGVtID0gcGx1Z2luczsgaXRlbTsgaXRlbSA9IGdfbGlzdF9uZXh0KGl0ZW0pKSB7Ci0gICAg
ICAgIFdlYktpdFBsdWdpbiogcGx1Z2luID0gV0VCS0lUX1BMVUdJTihpdGVtLT5kYXRhKTsKLSAg
ICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVD
VChwbHVnaW4pKTsKLSAgICAgICAgaWYgKCFnX3N0cmNtcDAod2Via2l0X3BsdWdpbl9nZXRfbmFt
ZShwbHVnaW4pLCAiV2ViS2l0IFRlc3QgUGx1Z0luIikpIHsKLSAgICAgICAgICAgIHRlc3RQbHVn
aW4gPSBwbHVnaW47Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBn
X2Fzc2VydChXRUJLSVRfSVNfUExVR0lOKHRlc3RQbHVnaW4uZ2V0KCkpKTsKLQotICAgIEdPd25Q
dHI8Y2hhcj4gcGx1Z2luUGF0aChnX2J1aWxkX2ZpbGVuYW1lKFdFQktJVF9URVNUX1BMVUdJTl9E
SVIsICJsaWJUZXN0TmV0c2NhcGVQbHVnaW4uc28iLCBOVUxMKSk7Ci0gICAgZ19hc3NlcnRfY21w
c3RyKHdlYmtpdF9wbHVnaW5fZ2V0X3BhdGgodGVzdFBsdWdpbi5nZXQoKSksID09LCBwbHVnaW5Q
YXRoLmdldCgpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3BsdWdpbl9nZXRfZGVzY3Jp
cHRpb24odGVzdFBsdWdpbi5nZXQoKSksID09LCAiU2ltcGxlIE5ldHNjYXBlwq4gcGx1Zy1pbiB0
aGF0IGhhbmRsZXMgdGVzdCBjb250ZW50IGZvciBXZWJLaXQiKTsKLSAgICBHTGlzdCogbWltZUlu
Zm9MaXN0ID0gd2Via2l0X3BsdWdpbl9nZXRfbWltZV9pbmZvX2xpc3QodGVzdFBsdWdpbi5nZXQo
KSk7Ci0gICAgZ19hc3NlcnQobWltZUluZm9MaXN0KTsKLSAgICBnX2Fzc2VydF9jbXB1aW50KGdf
bGlzdF9sZW5ndGgobWltZUluZm9MaXN0KSwgPT0sIDIpOwotCi0gICAgV2ViS2l0TWltZUluZm8q
IG1pbWVJbmZvID0gc3RhdGljX2Nhc3Q8V2ViS2l0TWltZUluZm8qPihtaW1lSW5mb0xpc3QtPmRh
dGEpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfbWltZV9pbmZvX2dldF9taW1lX3R5cGUo
bWltZUluZm8pLCA9PSwgImltYWdlL3BuZyIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRf
bWltZV9pbmZvX2dldF9kZXNjcmlwdGlvbihtaW1lSW5mbyksID09LCAicG5nIGltYWdlIik7Ci0g
ICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBleHRlbnNpb25zID0gd2Via2l0X21pbWVfaW5mb19nZXRf
ZXh0ZW5zaW9ucyhtaW1lSW5mbyk7Ci0gICAgZ19hc3NlcnQoZXh0ZW5zaW9ucyk7Ci0gICAgZ19h
c3NlcnRfY21wc3RyKGV4dGVuc2lvbnNbMF0sID09LCAicG5nIik7Ci0KLSAgICBtaW1lSW5mb0xp
c3QgPSBnX2xpc3RfbmV4dChtaW1lSW5mb0xpc3QpOwotICAgIG1pbWVJbmZvID0gc3RhdGljX2Nh
c3Q8V2ViS2l0TWltZUluZm8qPihtaW1lSW5mb0xpc3QtPmRhdGEpOwotICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfbWltZV9pbmZvX2dldF9taW1lX3R5cGUobWltZUluZm8pLCA9PSwgImFwcGxp
Y2F0aW9uL3gtd2Via2l0LXRlc3QtbmV0c2NhcGUiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Vi
a2l0X21pbWVfaW5mb19nZXRfZGVzY3JpcHRpb24obWltZUluZm8pLCA9PSwgInRlc3QgbmV0c2Nh
cGUgY29udGVudCIpOwotICAgIGV4dGVuc2lvbnMgPSB3ZWJraXRfbWltZV9pbmZvX2dldF9leHRl
bnNpb25zKG1pbWVJbmZvKTsKLSAgICBnX2Fzc2VydChleHRlbnNpb25zKTsKLSAgICBnX2Fzc2Vy
dF9jbXBzdHIoZXh0ZW5zaW9uc1swXSwgPT0sICJ0ZXN0bmV0c2NhcGUiKTsKLX0KLQotc3RhdGlj
IGNvbnN0IGNoYXIqIGtCYXJIVE1MID0gIjxodG1sPjxib2R5PkJhcjwvYm9keT48L2h0bWw+IjsK
LXN0YXRpYyBjb25zdCBjaGFyKiBrRWNob0hUTUxGb3JtYXQgPSAiPGh0bWw+PGJvZHk+JXM8L2Jv
ZHk+PC9odG1sPiI7Ci1zdGF0aWMgY29uc3QgY2hhciogZXJyb3JEb21haW4gPSAidGVzdCI7Ci1z
dGF0aWMgY29uc3QgaW50IGVycm9yQ29kZSA9IDEwOwotc3RhdGljIGNvbnN0IGNoYXIqIGVycm9y
TWVzc2FnZSA9ICJFcnJvciBtZXNzYWdlLiI7Ci0KLWNsYXNzIFVSSVNjaGVtZVRlc3Q6IHB1Ymxp
YyBMb2FkVHJhY2tpbmdUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJF
KFVSSVNjaGVtZVRlc3QpOwotCi0gICAgc3RydWN0IFVSSVNjaGVtZUhhbmRsZXIgewotICAgICAg
ICBVUklTY2hlbWVIYW5kbGVyKCkKLSAgICAgICAgICAgIDogcmVwbHlMZW5ndGgoMCkKLSAgICAg
ICAgewotICAgICAgICB9Ci0KLSAgICAgICAgVVJJU2NoZW1lSGFuZGxlcihjb25zdCBjaGFyKiBy
ZXBseSwgaW50IHJlcGx5TGVuZ3RoLCBjb25zdCBjaGFyKiBtaW1lVHlwZSkKLSAgICAgICAgICAg
IDogcmVwbHkocmVwbHkpCi0gICAgICAgICAgICAsIHJlcGx5TGVuZ3RoKHJlcGx5TGVuZ3RoKQot
ICAgICAgICAgICAgLCBtaW1lVHlwZShtaW1lVHlwZSkKLSAgICAgICAgewotICAgICAgICB9Ci0K
LSAgICAgICAgQ1N0cmluZyByZXBseTsKLSAgICAgICAgaW50IHJlcGx5TGVuZ3RoOwotICAgICAg
ICBDU3RyaW5nIG1pbWVUeXBlOwotICAgIH07Ci0KLSAgICBzdGF0aWMgdm9pZCB1cmlTY2hlbWVS
ZXF1ZXN0Q2FsbGJhY2soV2ViS2l0VVJJU2NoZW1lUmVxdWVzdCogcmVxdWVzdCwgZ3BvaW50ZXIg
dXNlckRhdGEpCi0gICAgewotICAgICAgICBVUklTY2hlbWVUZXN0KiB0ZXN0ID0gc3RhdGljX2Nh
c3Q8VVJJU2NoZW1lVGVzdCo+KHVzZXJEYXRhKTsKLSAgICAgICAgdGVzdC0+bV91cmlTY2hlbWVS
ZXF1ZXN0ID0gcmVxdWVzdDsKLSAgICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hl
blRlc3RGaW5pc2hlcyhHX09CSkVDVChyZXF1ZXN0KSk7Ci0KLSAgICAgICAgZ19hc3NlcnQod2Vi
a2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9nZXRfd2ViX3ZpZXcocmVxdWVzdCkgPT0gdGVzdC0+bV93
ZWJWaWV3KTsKLQotICAgICAgICBHUmVmUHRyPEdJbnB1dFN0cmVhbT4gaW5wdXRTdHJlYW0gPSBh
ZG9wdEdSZWYoZ19tZW1vcnlfaW5wdXRfc3RyZWFtX25ldygpKTsKLSAgICAgICAgdGVzdC0+YXNz
ZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChpbnB1dFN0cmVhbS5n
ZXQoKSkpOwotCi0gICAgICAgIGNvbnN0IGNoYXIqIHNjaGVtZSA9IHdlYmtpdF91cmlfc2NoZW1l
X3JlcXVlc3RfZ2V0X3NjaGVtZShyZXF1ZXN0KTsKLSAgICAgICAgZ19hc3NlcnQoc2NoZW1lKTsK
LSAgICAgICAgZ19hc3NlcnQodGVzdC0+bV9oYW5kbGVyc01hcC5jb250YWlucyhTdHJpbmc6OmZy
b21VVEY4KHNjaGVtZSkpKTsKLQotICAgICAgICBpZiAoIWdfc3RyY21wMChzY2hlbWUsICJlcnJv
ciIpKSB7Ci0gICAgICAgICAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3IoZ19lcnJvcl9uZXdfbGl0
ZXJhbChnX3F1YXJrX2Zyb21fc3RyaW5nKGVycm9yRG9tYWluKSwgZXJyb3JDb2RlLCBlcnJvck1l
c3NhZ2UpKTsKLSAgICAgICAgICAgIHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZmluaXNoX2Vy
cm9yKHJlcXVlc3QsIGVycm9yLmdldCgpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotCi0gICAgICAgIGNvbnN0IFVSSVNjaGVtZUhhbmRsZXImIGhhbmRsZXIgPSB0ZXN0LT5tX2hh
bmRsZXJzTWFwLmdldChTdHJpbmc6OmZyb21VVEY4KHNjaGVtZSkpOwotCi0gICAgICAgIGlmICgh
Z19zdHJjbXAwKHNjaGVtZSwgImVjaG8iKSkgewotICAgICAgICAgICAgY2hhciogcmVwbHlIVE1M
ID0gZ19zdHJkdXBfcHJpbnRmKGhhbmRsZXIucmVwbHkuZGF0YSgpLCB3ZWJraXRfdXJpX3NjaGVt
ZV9yZXF1ZXN0X2dldF9wYXRoKHJlcXVlc3QpKTsKLSAgICAgICAgICAgIGdfbWVtb3J5X2lucHV0
X3N0cmVhbV9hZGRfZGF0YShHX01FTU9SWV9JTlBVVF9TVFJFQU0oaW5wdXRTdHJlYW0uZ2V0KCkp
LCByZXBseUhUTUwsIHN0cmxlbihyZXBseUhUTUwpLCBnX2ZyZWUpOwotICAgICAgICB9IGVsc2Ug
aWYgKCFnX3N0cmNtcDAoc2NoZW1lLCAiY2xvc2VkIikpCi0gICAgICAgICAgICBnX2lucHV0X3N0
cmVhbV9jbG9zZShpbnB1dFN0cmVhbS5nZXQoKSwgMCwgMCk7Ci0gICAgICAgIGVsc2UgaWYgKCFo
YW5kbGVyLnJlcGx5LmlzTnVsbCgpKQotICAgICAgICAgICAgZ19tZW1vcnlfaW5wdXRfc3RyZWFt
X2FkZF9kYXRhKEdfTUVNT1JZX0lOUFVUX1NUUkVBTShpbnB1dFN0cmVhbS5nZXQoKSksIGhhbmRs
ZXIucmVwbHkuZGF0YSgpLCBoYW5kbGVyLnJlcGx5Lmxlbmd0aCgpLCAwKTsKLQotICAgICAgICB3
ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2ZpbmlzaChyZXF1ZXN0LCBpbnB1dFN0cmVhbS5nZXQo
KSwgaGFuZGxlci5yZXBseUxlbmd0aCwgaGFuZGxlci5taW1lVHlwZS5kYXRhKCkpOwotICAgIH0K
LQotICAgIHZvaWQgcmVnaXN0ZXJVUklTY2hlbWVIYW5kbGVyKGNvbnN0IGNoYXIqIHNjaGVtZSwg
Y29uc3QgY2hhciogcmVwbHksIGludCByZXBseUxlbmd0aCwgY29uc3QgY2hhciogbWltZVR5cGUp
Ci0gICAgewotICAgICAgICBtX2hhbmRsZXJzTWFwLnNldChTdHJpbmc6OmZyb21VVEY4KHNjaGVt
ZSksIFVSSVNjaGVtZUhhbmRsZXIocmVwbHksIHJlcGx5TGVuZ3RoLCBtaW1lVHlwZSkpOwotICAg
ICAgICB3ZWJraXRfd2ViX2NvbnRleHRfcmVnaXN0ZXJfdXJpX3NjaGVtZSh3ZWJraXRfd2ViX2Nv
bnRleHRfZ2V0X2RlZmF1bHQoKSwgc2NoZW1lLCB1cmlTY2hlbWVSZXF1ZXN0Q2FsbGJhY2ssIHRo
aXMsIDApOwotICAgIH0KLQotICAgIEdSZWZQdHI8V2ViS2l0VVJJU2NoZW1lUmVxdWVzdD4gbV91
cmlTY2hlbWVSZXF1ZXN0OwotICAgIEhhc2hNYXA8U3RyaW5nLCBVUklTY2hlbWVIYW5kbGVyPiBt
X2hhbmRsZXJzTWFwOwotfTsKLQotc3RhdGljIHZvaWQgdGVzdFdlYkNvbnRleHRVUklTY2hlbWUo
VVJJU2NoZW1lVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5yZWdpc3Rl
clVSSVNjaGVtZUhhbmRsZXIoImZvbyIsIGtCYXJIVE1MLCBzdHJsZW4oa0JhckhUTUwpLCAidGV4
dC9odG1sIik7Ci0gICAgdGVzdC0+bG9hZFVSSSgiZm9vOmJsYW5rIik7Ci0gICAgdGVzdC0+d2Fp
dFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgc2l6ZV90IG1haW5SZXNvdXJjZURhdGFTaXplID0g
MDsKLSAgICBjb25zdCBjaGFyKiBtYWluUmVzb3VyY2VEYXRhID0gdGVzdC0+bWFpblJlc291cmNl
RGF0YShtYWluUmVzb3VyY2VEYXRhU2l6ZSk7Ci0gICAgZ19hc3NlcnRfY21waW50KG1haW5SZXNv
dXJjZURhdGFTaXplLCA9PSwgc3RybGVuKGtCYXJIVE1MKSk7Ci0gICAgZ19hc3NlcnQoIXN0cm5j
bXAobWFpblJlc291cmNlRGF0YSwga0JhckhUTUwsIG1haW5SZXNvdXJjZURhdGFTaXplKSk7Ci0K
LSAgICB0ZXN0LT5yZWdpc3RlclVSSVNjaGVtZUhhbmRsZXIoImVjaG8iLCBrRWNob0hUTUxGb3Jt
YXQsIC0xLCAidGV4dC9odG1sIik7Ci0gICAgdGVzdC0+bG9hZFVSSSgiZWNobzpoZWxsbyB3b3Js
ZCIpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIEdPd25QdHI8Y2hh
cj4gZWNob0hUTUwoZ19zdHJkdXBfcHJpbnRmKGtFY2hvSFRNTEZvcm1hdCwgd2Via2l0X3VyaV9z
Y2hlbWVfcmVxdWVzdF9nZXRfcGF0aCh0ZXN0LT5tX3VyaVNjaGVtZVJlcXVlc3QuZ2V0KCkpKSk7
Ci0gICAgbWFpblJlc291cmNlRGF0YVNpemUgPSAwOwotICAgIG1haW5SZXNvdXJjZURhdGEgPSB0
ZXN0LT5tYWluUmVzb3VyY2VEYXRhKG1haW5SZXNvdXJjZURhdGFTaXplKTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQobWFpblJlc291cmNlRGF0YVNpemUsID09LCBzdHJsZW4oZWNob0hUTUwuZ2V0KCkp
KTsKLSAgICBnX2Fzc2VydCghc3RybmNtcChtYWluUmVzb3VyY2VEYXRhLCBlY2hvSFRNTC5nZXQo
KSwgbWFpblJlc291cmNlRGF0YVNpemUpKTsKLQotICAgIHRlc3QtPnJlZ2lzdGVyVVJJU2NoZW1l
SGFuZGxlcigibm9taW1lIiwga0JhckhUTUwsIC0xLCAwKTsKLSAgICB0ZXN0LT5tX2xvYWRFdmVu
dHMuY2xlYXIoKTsKLSAgICB0ZXN0LT5sb2FkVVJJKCJub21pbWU6Zm9vIGJhciIpOwotICAgIHRl
c3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fbG9hZEV2
ZW50cy5jb250YWlucyhMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRGYWlsZWQpKTsK
LQotICAgIHRlc3QtPnJlZ2lzdGVyVVJJU2NoZW1lSGFuZGxlcigiZW1wdHkiLCAwLCAwLCAidGV4
dC9odG1sIik7Ci0gICAgdGVzdC0+bV9sb2FkRXZlbnRzLmNsZWFyKCk7Ci0gICAgdGVzdC0+bG9h
ZFVSSSgiZW1wdHk6bm90aGluZyIpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgp
OwotICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX2xvYWRFdmVudHMuY29udGFpbnMoTG9hZFRyYWNraW5n
VGVzdDo6UHJvdmlzaW9uYWxMb2FkRmFpbGVkKSk7Ci0gICAgZ19hc3NlcnQoIXRlc3QtPm1fbG9h
ZEV2ZW50cy5jb250YWlucyhMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmFpbGVkKSk7Ci0KLSAgICB0
ZXN0LT5yZWdpc3RlclVSSVNjaGVtZUhhbmRsZXIoImVycm9yIiwgMCwgMCwgMCk7Ci0gICAgdGVz
dC0+bV9sb2FkRXZlbnRzLmNsZWFyKCk7Ci0gICAgdGVzdC0+bG9hZFVSSSgiZXJyb3I6ZXJyb3Ii
KTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydCh0ZXN0
LT5tX2xvYWRFdmVudHMuY29udGFpbnMoTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2Fk
RmFpbGVkKSk7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV9sb2FkRmFpbGVkKTsKLSAgICBnX2Fzc2Vy
dF9lcnJvcih0ZXN0LT5tX2Vycm9yLmdldCgpLCBnX3F1YXJrX2Zyb21fc3RyaW5nKGVycm9yRG9t
YWluKSwgZXJyb3JDb2RlKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9lcnJvci0+bWVz
c2FnZSwgPT0sIGVycm9yTWVzc2FnZSk7Ci0KLSAgICB0ZXN0LT5yZWdpc3RlclVSSVNjaGVtZUhh
bmRsZXIoImNsb3NlZCIsIDAsIDAsIDApOwotICAgIHRlc3QtPm1fbG9hZEV2ZW50cy5jbGVhcigp
OwotICAgIHRlc3QtPmxvYWRVUkkoImNsb3NlZDppbnB1dC1zdHJlYW0iKTsKLSAgICB0ZXN0LT53
YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX2xvYWRFdmVudHMu
Y29udGFpbnMoTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkRmFpbGVkKSk7Ci0gICAg
Z19hc3NlcnQodGVzdC0+bV9sb2FkRmFpbGVkKTsKLSAgICBnX2Fzc2VydF9lcnJvcih0ZXN0LT5t
X2Vycm9yLmdldCgpLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX0NMT1NFRCk7Ci19Ci0KLXN0YXRp
YyB2b2lkIHRlc3RXZWJDb250ZXh0U3BlbGxDaGVja2VyKFRlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCi17Ci0gICAgV2ViS2l0V2ViQ29udGV4dCogd2ViQ29udGV4dCA9IHdlYmtpdF93ZWJfY29u
dGV4dF9nZXRfZGVmYXVsdCgpOwotCi0gICAgLy8gQ2hlY2sgd2hhdCBoYXBwZW5zIGlmIG5vIHNw
ZWxsIGNoZWNraW5nIGxhbmd1YWdlIGhhcyBiZWVuIHNldC4KLSAgICBjb25zdCBnY2hhciogY29u
c3QqIGN1cnJlbnRMYW5ndWFnZSA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hlY2tp
bmdfbGFuZ3VhZ2VzKHdlYkNvbnRleHQpOwotICAgIGdfYXNzZXJ0KCFjdXJyZW50TGFuZ3VhZ2Up
OwotCi0gICAgLy8gU2V0IHRoZSBsYW5ndWFnZSB0byBhIHNwZWNpZmljIG9uZS4KLSAgICBHUmVm
UHRyPEdQdHJBcnJheT4gbGFuZ3VhZ2VzID0gYWRvcHRHUmVmKGdfcHRyX2FycmF5X25ldygpKTsK
LSAgICBnX3B0cl9hcnJheV9hZGQobGFuZ3VhZ2VzLmdldCgpLCBjb25zdF9jYXN0PGdwb2ludGVy
PihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4oImVuX1VTIikpKTsKLSAgICBnX3B0cl9hcnJheV9h
ZGQobGFuZ3VhZ2VzLmdldCgpLCAwKTsKLSAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3NwZWxs
X2NoZWNraW5nX2xhbmd1YWdlcyh3ZWJDb250ZXh0LCByZWludGVycHJldF9jYXN0PGNvbnN0IGNo
YXIqIGNvbnN0Kj4obGFuZ3VhZ2VzLT5wZGF0YSkpOwotICAgIGN1cnJlbnRMYW5ndWFnZSA9IHdl
YmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKHdlYkNvbnRleHQp
OwotICAgIGdfYXNzZXJ0X2NtcHVpbnQoZ19zdHJ2X2xlbmd0aChjb25zdF9jYXN0PGNoYXIqKj4o
Y3VycmVudExhbmd1YWdlKSksID09LCAxKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoY3VycmVudExh
bmd1YWdlWzBdLCA9PSwgImVuX1VTIik7Ci0KLSAgICAvLyBTZXQgdGhlIGxhbmd1YWdlIHN0cmlu
ZyB0byBsaXN0IG9mIHZhbGlkIGxhbmd1YWdlcy4KLSAgICBnX3B0cl9hcnJheV9yZW1vdmVfaW5k
ZXhfZmFzdChsYW5ndWFnZXMuZ2V0KCksIGxhbmd1YWdlcy0+bGVuIC0gMSk7Ci0gICAgZ19wdHJf
YXJyYXlfYWRkKGxhbmd1YWdlcy5nZXQoKSwgY29uc3RfY2FzdDxncG9pbnRlcj4oc3RhdGljX2Nh
c3Q8Y29uc3Qgdm9pZCo+KCJlbl9HQiIpKSk7Ci0gICAgZ19wdHJfYXJyYXlfYWRkKGxhbmd1YWdl
cy5nZXQoKSwgMCk7Ci0gICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF9zcGVsbF9jaGVja2luZ19s
YW5ndWFnZXMod2ViQ29udGV4dCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKiBjb25zdCo+
KGxhbmd1YWdlcy0+cGRhdGEpKTsKLSAgICBjdXJyZW50TGFuZ3VhZ2UgPSB3ZWJraXRfd2ViX2Nv
bnRleHRfZ2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyh3ZWJDb250ZXh0KTsKLSAgICBnX2Fz
c2VydF9jbXB1aW50KGdfc3Rydl9sZW5ndGgoY29uc3RfY2FzdDxjaGFyKio+KGN1cnJlbnRMYW5n
dWFnZSkpLCA9PSwgMik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKGN1cnJlbnRMYW5ndWFnZVswXSwg
PT0sICJlbl9VUyIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihjdXJyZW50TGFuZ3VhZ2VbMV0sID09
LCAiZW5fR0IiKTsKLQotICAgIC8vIFRyeSBwYXNzaW5nIGEgd3JvbmcgbGFuZ3VhZ2UgYWxvbmcg
d2l0aCBnb29kIG9uZXMuCi0gICAgZ19wdHJfYXJyYXlfcmVtb3ZlX2luZGV4X2Zhc3QobGFuZ3Vh
Z2VzLmdldCgpLCBsYW5ndWFnZXMtPmxlbiAtIDEpOwotICAgIGdfcHRyX2FycmF5X2FkZChsYW5n
dWFnZXMuZ2V0KCksIGNvbnN0X2Nhc3Q8Z3BvaW50ZXI+KHN0YXRpY19jYXN0PGNvbnN0IHZvaWQq
PigiYmRfV1IiKSkpOwotICAgIGdfcHRyX2FycmF5X2FkZChsYW5ndWFnZXMuZ2V0KCksIDApOwot
ICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKHdlYkNv
bnRleHQsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhciogY29uc3QqPihsYW5ndWFnZXMtPnBk
YXRhKSk7Ci0gICAgY3VycmVudExhbmd1YWdlID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9zcGVs
bF9jaGVja2luZ19sYW5ndWFnZXMod2ViQ29udGV4dCk7Ci0gICAgZ19hc3NlcnRfY21wdWludChn
X3N0cnZfbGVuZ3RoKGNvbnN0X2Nhc3Q8Y2hhcioqPihjdXJyZW50TGFuZ3VhZ2UpKSwgPT0sIDIp
OwotICAgIGdfYXNzZXJ0X2NtcHN0cihjdXJyZW50TGFuZ3VhZ2VbMF0sID09LCAiZW5fVVMiKTsK
LSAgICBnX2Fzc2VydF9jbXBzdHIoY3VycmVudExhbmd1YWdlWzFdLCA9PSwgImVuX0dCIik7Ci0K
LSAgICAvLyBUcnkgcGFzc2luZyBhIGxpc3Qgd2l0aCBvbmx5IHdyb25nIGxhbmd1YWdlcy4KLSAg
ICBsYW5ndWFnZXMgPSBhZG9wdEdSZWYoZ19wdHJfYXJyYXlfbmV3KCkpOwotICAgIGdfcHRyX2Fy
cmF5X2FkZChsYW5ndWFnZXMuZ2V0KCksIGNvbnN0X2Nhc3Q8Z3BvaW50ZXI+KHN0YXRpY19jYXN0
PGNvbnN0IHZvaWQqPigiYmRfV1IiKSkpOwotICAgIGdfcHRyX2FycmF5X2FkZChsYW5ndWFnZXMu
Z2V0KCksIGNvbnN0X2Nhc3Q8Z3BvaW50ZXI+KHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqPigid3Jf
QkQiKSkpOwotICAgIGdfcHRyX2FycmF5X2FkZChsYW5ndWFnZXMuZ2V0KCksIDApOwotICAgIHdl
YmtpdF93ZWJfY29udGV4dF9zZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKHdlYkNvbnRleHQs
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhciogY29uc3QqPihsYW5ndWFnZXMtPnBkYXRhKSk7
Ci0gICAgY3VycmVudExhbmd1YWdlID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9zcGVsbF9jaGVj
a2luZ19sYW5ndWFnZXMod2ViQ29udGV4dCk7Ci0gICAgZ19hc3NlcnQoIWN1cnJlbnRMYW5ndWFn
ZSk7Ci0KLSAgICAvLyBDaGVjayBkaXNhYmxpbmcgYW5kIHJlLWVuYWJsaW5nIHNwZWxsIGNoZWNr
aW5nLgotICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZCh3
ZWJDb250ZXh0LCBGQUxTRSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfY29udGV4dF9nZXRf
c3BlbGxfY2hlY2tpbmdfZW5hYmxlZCh3ZWJDb250ZXh0KSk7Ci0gICAgd2Via2l0X3dlYl9jb250
ZXh0X3NldF9zcGVsbF9jaGVja2luZ19lbmFibGVkKHdlYkNvbnRleHQsIFRSVUUpOwotICAgIGdf
YXNzZXJ0KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZCh3ZWJD
b250ZXh0KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJDb250ZXh0TGFuZ3VhZ2VzKFdlYlZp
ZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBl
eHBlY3RlZERlZmF1bHRMYW5ndWFnZSA9ICJlbiI7Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVy
LT5nZXRVUklGb3JQYXRoKCIvIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmlu
aXNoZWQoKTsKLSAgICBzaXplX3QgbWFpblJlc291cmNlRGF0YVNpemUgPSAwOwotICAgIGNvbnN0
IGNoYXIqIG1haW5SZXNvdXJjZURhdGEgPSB0ZXN0LT5tYWluUmVzb3VyY2VEYXRhKG1haW5SZXNv
dXJjZURhdGFTaXplKTsKLSAgICBnX2Fzc2VydF9jbXB1aW50KG1haW5SZXNvdXJjZURhdGFTaXpl
LCA9PSwgc3RybGVuKGV4cGVjdGVkRGVmYXVsdExhbmd1YWdlKSk7Ci0gICAgZ19hc3NlcnQoIXN0
cm5jbXAobWFpblJlc291cmNlRGF0YSwgZXhwZWN0ZWREZWZhdWx0TGFuZ3VhZ2UsIG1haW5SZXNv
dXJjZURhdGFTaXplKSk7Ci0KLSAgICBHUmVmUHRyPEdQdHJBcnJheT4gbGFuZ3VhZ2VzID0gYWRv
cHRHUmVmKGdfcHRyX2FycmF5X25ldygpKTsKLSAgICBnX3B0cl9hcnJheV9hZGQobGFuZ3VhZ2Vz
LmdldCgpLCBjb25zdF9jYXN0PGdwb2ludGVyPihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4oImVu
IikpKTsKLSAgICBnX3B0cl9hcnJheV9hZGQobGFuZ3VhZ2VzLmdldCgpLCBjb25zdF9jYXN0PGdw
b2ludGVyPihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4oIkVTX2VzIikpKTsKLSAgICBnX3B0cl9h
cnJheV9hZGQobGFuZ3VhZ2VzLmdldCgpLCBjb25zdF9jYXN0PGdwb2ludGVyPihzdGF0aWNfY2Fz
dDxjb25zdCB2b2lkKj4oImRFIikpKTsKLSAgICBnX3B0cl9hcnJheV9hZGQobGFuZ3VhZ2VzLmdl
dCgpLCAwKTsKLSAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3ByZWZlcnJlZF9sYW5ndWFnZXMo
d2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
Y2hhciogY29uc3QqPihsYW5ndWFnZXMtPnBkYXRhKSk7Ci0KLSAgICBzdGF0aWMgY29uc3QgY2hh
ciogZXhwZWN0ZWRMYW5ndWFnZXMgPSAiZW4sIGVzLWVzO3E9MC45MCwgZGU7cT0wLjgwIjsKLSAg
ICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi8iKS5kYXRhKCkpOwotICAg
IHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIG1haW5SZXNvdXJjZURhdGFTaXpl
ID0gMDsKLSAgICBtYWluUmVzb3VyY2VEYXRhID0gdGVzdC0+bWFpblJlc291cmNlRGF0YShtYWlu
UmVzb3VyY2VEYXRhU2l6ZSk7Ci0gICAgZ19hc3NlcnRfY21wdWludChtYWluUmVzb3VyY2VEYXRh
U2l6ZSwgPT0sIHN0cmxlbihleHBlY3RlZExhbmd1YWdlcykpOwotICAgIGdfYXNzZXJ0KCFzdHJu
Y21wKG1haW5SZXNvdXJjZURhdGEsIGV4cGVjdGVkTGFuZ3VhZ2VzLCBtYWluUmVzb3VyY2VEYXRh
U2l6ZSkpOwotfQotCi1zdGF0aWMgdm9pZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBzZXJ2
ZXIsIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiwg
U291cENsaWVudENvbnRleHQqLCBncG9pbnRlcikKLXsKLSAgICBpZiAobWVzc2FnZS0+bWV0aG9k
ICE9IFNPVVBfTUVUSE9EX0dFVCkgewotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyht
ZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvIikpIHsKLSAgICAgICAgY29uc3Qg
Y2hhciogYWNjZXB0TGFuZ3VhZ2UgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfb25lKG1lc3Nh
Z2UtPnJlcXVlc3RfaGVhZGVycywgIkFjY2VwdC1MYW5ndWFnZSIpOwotICAgICAgICBzb3VwX21l
c3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7Ci0gICAgICAgIHNvdXBf
bWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9D
T1BZLCBhY2NlcHRMYW5ndWFnZSwgc3RybGVuKGFjY2VwdExhbmd1YWdlKSk7Ci0gICAgICAgIHNv
dXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOwotICAgIH0g
ZWxzZQotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRV
U19OT1RfRk9VTkQpOwotfQotCi1jbGFzcyBTZWN1cml0eVBvbGljeVRlc3Q6IHB1YmxpYyBUZXN0
IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFNlY3VyaXR5UG9saWN5VGVz
dCk7Ci0KLSAgICBlbnVtIFNlY3VyaXR5UG9saWN5IHsKLSAgICAgICAgTG9jYWwgPSAxIDw8IDEs
Ci0gICAgICAgIE5vQWNjZXNzID0gMSA8PCAyLAotICAgICAgICBEaXNwbGF5SXNvbGF0ZWQgPSAx
IDw8IDMsCi0gICAgICAgIFNlY3VyZSA9IDEgPDwgNCwKLSAgICAgICAgQ09SU0VuYWJsZWQgPSAx
IDw8IDUsCi0gICAgICAgIEVtcHR5RG9jdW1lbnQgPSAxIDw8IDYKLSAgICB9OwotCi0gICAgU2Vj
dXJpdHlQb2xpY3lUZXN0KCkKLSAgICAgICAgOiBtX21hbmFnZXIod2Via2l0X3dlYl9jb250ZXh0
X2dldF9zZWN1cml0eV9tYW5hZ2VyKHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpKSkK
LSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCB2ZXJpZnlUaGF0U2NoZW1lTWF0Y2hlc1BvbGljeShj
b25zdCBjaGFyKiBzY2hlbWUsIHVuc2lnbmVkIHBvbGljeSkKLSAgICB7Ci0gICAgICAgIGlmIChw
b2xpY3kgJiBMb2NhbCkKLSAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9zZWN1cml0eV9tYW5h
Z2VyX3VyaV9zY2hlbWVfaXNfbG9jYWwobV9tYW5hZ2VyLCBzY2hlbWUpKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9zZWN1cml0eV9tYW5hZ2VyX3VyaV9zY2hl
bWVfaXNfbG9jYWwobV9tYW5hZ2VyLCBzY2hlbWUpKTsKLSAgICAgICAgaWYgKHBvbGljeSAmIE5v
QWNjZXNzKQotICAgICAgICAgICAgZ19hc3NlcnQod2Via2l0X3NlY3VyaXR5X21hbmFnZXJfdXJp
X3NjaGVtZV9pc19ub19hY2Nlc3MobV9tYW5hZ2VyLCBzY2hlbWUpKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9zZWN1cml0eV9tYW5hZ2VyX3VyaV9zY2hlbWVf
aXNfbm9fYWNjZXNzKG1fbWFuYWdlciwgc2NoZW1lKSk7Ci0gICAgICAgIGlmIChwb2xpY3kgJiBE
aXNwbGF5SXNvbGF0ZWQpCi0gICAgICAgICAgICBnX2Fzc2VydCh3ZWJraXRfc2VjdXJpdHlfbWFu
YWdlcl91cmlfc2NoZW1lX2lzX2Rpc3BsYXlfaXNvbGF0ZWQobV9tYW5hZ2VyLCBzY2hlbWUpKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9zZWN1cml0eV9tYW5h
Z2VyX3VyaV9zY2hlbWVfaXNfZGlzcGxheV9pc29sYXRlZChtX21hbmFnZXIsIHNjaGVtZSkpOwot
ICAgICAgICBpZiAocG9saWN5ICYgU2VjdXJlKQotICAgICAgICAgICAgZ19hc3NlcnQod2Via2l0
X3NlY3VyaXR5X21hbmFnZXJfdXJpX3NjaGVtZV9pc19zZWN1cmUobV9tYW5hZ2VyLCBzY2hlbWUp
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9zZWN1cml0eV9t
YW5hZ2VyX3VyaV9zY2hlbWVfaXNfc2VjdXJlKG1fbWFuYWdlciwgc2NoZW1lKSk7Ci0gICAgICAg
IGlmIChwb2xpY3kgJiBDT1JTRW5hYmxlZCkKLSAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9z
ZWN1cml0eV9tYW5hZ2VyX3VyaV9zY2hlbWVfaXNfY29yc19lbmFibGVkKG1fbWFuYWdlciwgc2No
ZW1lKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2VjdXJp
dHlfbWFuYWdlcl91cmlfc2NoZW1lX2lzX2NvcnNfZW5hYmxlZChtX21hbmFnZXIsIHNjaGVtZSkp
OwotICAgICAgICBpZiAocG9saWN5ICYgRW1wdHlEb2N1bWVudCkKLSAgICAgICAgICAgIGdfYXNz
ZXJ0KHdlYmtpdF9zZWN1cml0eV9tYW5hZ2VyX3VyaV9zY2hlbWVfaXNfZW1wdHlfZG9jdW1lbnQo
bV9tYW5hZ2VyLCBzY2hlbWUpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZ19hc3NlcnQo
IXdlYmtpdF9zZWN1cml0eV9tYW5hZ2VyX3VyaV9zY2hlbWVfaXNfZW1wdHlfZG9jdW1lbnQobV9t
YW5hZ2VyLCBzY2hlbWUpKTsKLSAgICB9Ci0KLSAgICBXZWJLaXRTZWN1cml0eU1hbmFnZXIqIG1f
bWFuYWdlcjsKLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJDb250ZXh0U2VjdXJpdHlQb2xpY3ko
U2VjdXJpdHlQb2xpY3lUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIC8vIFZlcmlm
eVRoYXRTY2hlbWVNYXRjaGVzUG9saWN5IGRlZmF1bHQgcG9saWN5IGZvciB3ZWxsIGtub3duIHNj
aGVtZXMuCi0gICAgdGVzdC0+dmVyaWZ5VGhhdFNjaGVtZU1hdGNoZXNQb2xpY3koImh0dHAiLCBT
ZWN1cml0eVBvbGljeVRlc3Q6OkNPUlNFbmFibGVkKTsKLSAgICB0ZXN0LT52ZXJpZnlUaGF0U2No
ZW1lTWF0Y2hlc1BvbGljeSgiaHR0cHMiLCBTZWN1cml0eVBvbGljeVRlc3Q6OkNPUlNFbmFibGVk
IHwgU2VjdXJpdHlQb2xpY3lUZXN0OjpTZWN1cmUpOwotICAgIHRlc3QtPnZlcmlmeVRoYXRTY2hl
bWVNYXRjaGVzUG9saWN5KCJmaWxlIiwgU2VjdXJpdHlQb2xpY3lUZXN0OjpMb2NhbCk7Ci0gICAg
dGVzdC0+dmVyaWZ5VGhhdFNjaGVtZU1hdGNoZXNQb2xpY3koImRhdGEiLCBTZWN1cml0eVBvbGlj
eVRlc3Q6Ok5vQWNjZXNzIHwgU2VjdXJpdHlQb2xpY3lUZXN0OjpTZWN1cmUpOwotICAgIHRlc3Qt
PnZlcmlmeVRoYXRTY2hlbWVNYXRjaGVzUG9saWN5KCJhYm91dCIsIFNlY3VyaXR5UG9saWN5VGVz
dDo6Tm9BY2Nlc3MgfCBTZWN1cml0eVBvbGljeVRlc3Q6OlNlY3VyZSB8IFNlY3VyaXR5UG9saWN5
VGVzdDo6RW1wdHlEb2N1bWVudCk7Ci0KLSAgICAvLyBDdXN0b20gc2NoZW1lLgotICAgIHRlc3Qt
PnZlcmlmeVRoYXRTY2hlbWVNYXRjaGVzUG9saWN5KCJmb28iLCAwKTsKLQotICAgIHdlYmtpdF9z
ZWN1cml0eV9tYW5hZ2VyX3JlZ2lzdGVyX3VyaV9zY2hlbWVfYXNfbG9jYWwodGVzdC0+bV9tYW5h
Z2VyLCAiZm9vIik7Ci0gICAgdGVzdC0+dmVyaWZ5VGhhdFNjaGVtZU1hdGNoZXNQb2xpY3koImZv
byIsIFNlY3VyaXR5UG9saWN5VGVzdDo6TG9jYWwpOwotICAgIHdlYmtpdF9zZWN1cml0eV9tYW5h
Z2VyX3JlZ2lzdGVyX3VyaV9zY2hlbWVfYXNfbm9fYWNjZXNzKHRlc3QtPm1fbWFuYWdlciwgImZv
byIpOwotICAgIHRlc3QtPnZlcmlmeVRoYXRTY2hlbWVNYXRjaGVzUG9saWN5KCJmb28iLCBTZWN1
cml0eVBvbGljeVRlc3Q6OkxvY2FsIHwgU2VjdXJpdHlQb2xpY3lUZXN0OjpOb0FjY2Vzcyk7Ci0g
ICAgd2Via2l0X3NlY3VyaXR5X21hbmFnZXJfcmVnaXN0ZXJfdXJpX3NjaGVtZV9hc19kaXNwbGF5
X2lzb2xhdGVkKHRlc3QtPm1fbWFuYWdlciwgImZvbyIpOwotICAgIHRlc3QtPnZlcmlmeVRoYXRT
Y2hlbWVNYXRjaGVzUG9saWN5KCJmb28iLCBTZWN1cml0eVBvbGljeVRlc3Q6OkxvY2FsIHwgU2Vj
dXJpdHlQb2xpY3lUZXN0OjpOb0FjY2VzcyB8IFNlY3VyaXR5UG9saWN5VGVzdDo6RGlzcGxheUlz
b2xhdGVkKTsKLSAgICB3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl9yZWdpc3Rlcl91cmlfc2NoZW1l
X2FzX3NlY3VyZSh0ZXN0LT5tX21hbmFnZXIsICJmb28iKTsKLSAgICB0ZXN0LT52ZXJpZnlUaGF0
U2NoZW1lTWF0Y2hlc1BvbGljeSgiZm9vIiwgU2VjdXJpdHlQb2xpY3lUZXN0OjpMb2NhbCB8IFNl
Y3VyaXR5UG9saWN5VGVzdDo6Tm9BY2Nlc3MgfCBTZWN1cml0eVBvbGljeVRlc3Q6OkRpc3BsYXlJ
c29sYXRlZCB8IFNlY3VyaXR5UG9saWN5VGVzdDo6U2VjdXJlKTsKLSAgICB3ZWJraXRfc2VjdXJp
dHlfbWFuYWdlcl9yZWdpc3Rlcl91cmlfc2NoZW1lX2FzX2NvcnNfZW5hYmxlZCh0ZXN0LT5tX21h
bmFnZXIsICJmb28iKTsKLSAgICB0ZXN0LT52ZXJpZnlUaGF0U2NoZW1lTWF0Y2hlc1BvbGljeSgi
Zm9vIiwgU2VjdXJpdHlQb2xpY3lUZXN0OjpMb2NhbCB8IFNlY3VyaXR5UG9saWN5VGVzdDo6Tm9B
Y2Nlc3MgfCBTZWN1cml0eVBvbGljeVRlc3Q6OkRpc3BsYXlJc29sYXRlZCB8IFNlY3VyaXR5UG9s
aWN5VGVzdDo6U2VjdXJlCi0gICAgICAgICAgICAgICAgfCBTZWN1cml0eVBvbGljeVRlc3Q6OkNP
UlNFbmFibGVkKTsKLSAgICB3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl9yZWdpc3Rlcl91cmlfc2No
ZW1lX2FzX2VtcHR5X2RvY3VtZW50KHRlc3QtPm1fbWFuYWdlciwgImZvbyIpOwotICAgIHRlc3Qt
PnZlcmlmeVRoYXRTY2hlbWVNYXRjaGVzUG9saWN5KCJmb28iLCBTZWN1cml0eVBvbGljeVRlc3Q6
OkxvY2FsIHwgU2VjdXJpdHlQb2xpY3lUZXN0OjpOb0FjY2VzcyB8IFNlY3VyaXR5UG9saWN5VGVz
dDo6RGlzcGxheUlzb2xhdGVkIHwgU2VjdXJpdHlQb2xpY3lUZXN0OjpTZWN1cmUKLSAgICAgICAg
ICAgICAgICB8IFNlY3VyaXR5UG9saWN5VGVzdDo6Q09SU0VuYWJsZWQgfCBTZWN1cml0eVBvbGlj
eVRlc3Q6OkVtcHR5RG9jdW1lbnQpOwotfQotCi12b2lkIGJlZm9yZUFsbCgpCi17Ci0gICAga1Nl
cnZlciA9IG5ldyBXZWJLaXRUZXN0U2VydmVyKCk7Ci0gICAga1NlcnZlci0+cnVuKHNlcnZlckNh
bGxiYWNrKTsKLQotICAgIFRlc3Q6OmFkZCgiV2ViS2l0V2ViQ29udGV4dCIsICJkZWZhdWx0LWNv
bnRleHQiLCB0ZXN0V2ViQ29udGV4dERlZmF1bHQpOwotICAgIFBsdWdpbnNUZXN0OjphZGQoIldl
YktpdFdlYkNvbnRleHQiLCAiZ2V0LXBsdWdpbnMiLCB0ZXN0V2ViQ29udGV4dEdldFBsdWdpbnMp
OwotICAgIFVSSVNjaGVtZVRlc3Q6OmFkZCgiV2ViS2l0V2ViQ29udGV4dCIsICJ1cmktc2NoZW1l
IiwgdGVzdFdlYkNvbnRleHRVUklTY2hlbWUpOwotICAgIFRlc3Q6OmFkZCgiV2ViS2l0V2ViQ29u
dGV4dCIsICJzcGVsbC1jaGVja2VyIiwgdGVzdFdlYkNvbnRleHRTcGVsbENoZWNrZXIpOwotICAg
IFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYkNvbnRleHQiLCAibGFuZ3VhZ2VzIiwgdGVzdFdl
YkNvbnRleHRMYW5ndWFnZXMpOwotICAgIFNlY3VyaXR5UG9saWN5VGVzdDo6YWRkKCJXZWJLaXRT
ZWN1cml0eU1hbmFnZXIiLCAic2VjdXJpdHktcG9saWN5IiwgdGVzdFdlYkNvbnRleHRTZWN1cml0
eVBvbGljeSk7Ci19Ci0KLXZvaWQgYWZ0ZXJBbGwoKQotewotICAgIGRlbGV0ZSBrU2VydmVyOwot
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVz
dFdlYktpdFdlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBk
NzBiMGEyLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDYwOCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9K
U1N0cmluZ1JlZi5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTVmFsdWVSZWYuaD4KLSNp
bmNsdWRlIDxnbGliL2dzdGRpby5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4K
LQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdEZWZhdWx0Q29udGV4dChXZWJWaWV3VGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2Nv
bnRleHQodGVzdC0+bV93ZWJWaWV3KSA9PSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQo
KSk7Ci0KLSAgICAvLyBDaGVjayB0aGF0IGEgd2ViIHZpZXcgY3JlYXRlZCB3aXRoIGdfb2JqZWN0
X25ldyBoYXMgdGhlIGRlZmF1bHQgY29udGV4dC4KLSAgICBHUmVmUHRyPFdlYktpdFdlYlZpZXc+
IHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQl9W
SUVXLCBOVUxMKSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KHdl
YlZpZXcuZ2V0KCkpID09IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpKTsKLX0KLQot
c3RhdGljIHZvaWQgdGVzdFdlYlZpZXdDdXN0b21DaGFyc2V0KFdlYlZpZXdUZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQotewotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfZ2V0X2N1c3Rv
bV9jaGFyc2V0KHRlc3QtPm1fd2ViVmlldykpOwotICAgIHdlYmtpdF93ZWJfdmlld19zZXRfY3Vz
dG9tX2NoYXJzZXQodGVzdC0+bV93ZWJWaWV3LCAidXRmOCIpOwotICAgIGdfYXNzZXJ0X2NtcHN0
cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X2N1c3RvbV9jaGFyc2V0KHRlc3QtPm1fd2ViVmlldyksID09
LCAidXRmOCIpOwotICAgIC8vIEdvIGJhY2sgdG8gdGhlIGRlZmF1bHQgY2hhcnNldC4KLSAgICB3
ZWJraXRfd2ViX3ZpZXdfc2V0X2N1c3RvbV9jaGFyc2V0KHRlc3QtPm1fd2ViVmlldywgMCk7Ci0g
ICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19nZXRfY3VzdG9tX2NoYXJzZXQodGVzdC0+bV93
ZWJWaWV3KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3U2V0dGluZ3MoV2ViVmlld1Rl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgV2ViS2l0U2V0dGluZ3MqIGRlZmF1bHRT
ZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3ModGVzdC0+bV93ZWJWaWV3KTsK
LSAgICBnX2Fzc2VydChkZWZhdWx0U2V0dGluZ3MpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0
aW5nc19nZXRfZW5hYmxlX2phdmFzY3JpcHQoZGVmYXVsdFNldHRpbmdzKSk7Ci0KLSAgICBHUmVm
UHRyPFdlYktpdFNldHRpbmdzPiBuZXdTZXR0aW5ncyA9IGFkb3B0R1JlZih3ZWJraXRfc2V0dGlu
Z3NfbmV3KCkpOwotICAgIGdfb2JqZWN0X3NldChHX09CSkVDVChuZXdTZXR0aW5ncy5nZXQoKSks
ICJlbmFibGUtamF2YXNjcmlwdCIsIEZBTFNFLCBOVUxMKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdf
c2V0X3NldHRpbmdzKHRlc3QtPm1fd2ViVmlldywgbmV3U2V0dGluZ3MuZ2V0KCkpOwotCi0gICAg
V2ViS2l0U2V0dGluZ3MqIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh0
ZXN0LT5tX3dlYlZpZXcpOwotICAgIGdfYXNzZXJ0KHNldHRpbmdzICE9IGRlZmF1bHRTZXR0aW5n
cyk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2phdmFzY3JpcHQo
c2V0dGluZ3MpKTsKLQotICAgIEdSZWZQdHI8R3RrV2lkZ2V0PiB3ZWJWaWV3MiA9IHdlYmtpdF93
ZWJfdmlld19uZXcoKTsKLSAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZp
bmlzaGVzKEdfT0JKRUNUKHdlYlZpZXcyLmdldCgpKSk7Ci0gICAgd2Via2l0X3dlYl92aWV3X3Nl
dF9zZXR0aW5ncyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldzIuZ2V0KCkpLCBzZXR0aW5ncyk7Ci0g
ICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyhXRUJLSVRfV0VCX1ZJRVco
d2ViVmlldzIuZ2V0KCkpKSA9PSBzZXR0aW5ncyk7Ci0KLSAgICBHUmVmUHRyPFdlYktpdFNldHRp
bmdzPiBuZXdTZXR0aW5nczIgPSBhZG9wdEdSZWYod2Via2l0X3NldHRpbmdzX25ldygpKTsKLSAg
ICB3ZWJraXRfd2ViX3ZpZXdfc2V0X3NldHRpbmdzKFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3Mi5n
ZXQoKSksIG5ld1NldHRpbmdzMi5nZXQoKSk7Ci0gICAgc2V0dGluZ3MgPSB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X3NldHRpbmdzKFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3Mi5nZXQoKSkpOwotICAgIGdf
YXNzZXJ0KHNldHRpbmdzID09IG5ld1NldHRpbmdzMi5nZXQoKSk7Ci0gICAgZ19hc3NlcnQod2Vi
a2l0X3NldHRpbmdzX2dldF9lbmFibGVfamF2YXNjcmlwdChzZXR0aW5ncykpOwotfQotCi1zdGF0
aWMgdm9pZCB0ZXN0V2ViVmlld1pvb21MZXZlbChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9p
bnRlcikKLXsKLSAgICBnX2Fzc2VydF9jbXBmbG9hdCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3pvb21f
bGV2ZWwodGVzdC0+bV93ZWJWaWV3KSwgPT0sIDEpOwotICAgIHdlYmtpdF93ZWJfdmlld19zZXRf
em9vbV9sZXZlbCh0ZXN0LT5tX3dlYlZpZXcsIDIuNSk7Ci0gICAgZ19hc3NlcnRfY21wZmxvYXQo
d2Via2l0X3dlYl92aWV3X2dldF96b29tX2xldmVsKHRlc3QtPm1fd2ViVmlldyksID09LCAyLjUp
OwotCi0gICAgd2Via2l0X3NldHRpbmdzX3NldF96b29tX3RleHRfb25seSh3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X3NldHRpbmdzKHRlc3QtPm1fd2ViVmlldyksIFRSVUUpOwotICAgIC8vIFRoZSB6b29t
IGxldmVsIHNob3VsZG4ndCBjaGFuZ2Ugd2hlbiB6b29tLXRleHQtb25seSBzZXR0aW5nIGNoYW5n
ZXMuCi0gICAgZ19hc3NlcnRfY21wZmxvYXQod2Via2l0X3dlYl92aWV3X2dldF96b29tX2xldmVs
KHRlc3QtPm1fd2ViVmlldyksID09LCAyLjUpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmll
d1J1bkphdmFTY3JpcHQoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAg
c3RhdGljIGNvbnN0IGNoYXIqIGh0bWwgPSAiPGh0bWw+PGJvZHk+PGEgaWQ9J1dlYktpdExpbmsn
IGhyZWY9J2h0dHA6Ly93d3cud2Via2l0Z3RrLm9yZy8nIHRpdGxlPSdXZWJLaXRHVEsrIFRpdGxl
Jz5XZWJLaXRHVEsrIFdlYnNpdGU8L2E+PC9ib2R5PjwvaHRtbD4iOwotICAgIHRlc3QtPmxvYWRI
dG1sKGh0bWwsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAg
R093blB0cjxHRXJyb3I+IGVycm9yOwotICAgIFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFz
Y3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoIndp
bmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnV2ViS2l0TGluaycpLnRpdGxlOyIsICZlcnJv
ci5vdXRQdHIoKSk7Ci0gICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAgZ19hc3Nl
cnQoIWVycm9yLmdldCgpKTsKLSAgICBHT3duUHRyPGNoYXI+IHZhbHVlU3RyaW5nKFdlYlZpZXdU
ZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKLSAgICBn
X2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAiV2ViS2l0R1RLKyBUaXRsZSIp
OwotCi0gICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50
aWxGaW5pc2hlZCgid2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdXZWJLaXRMaW5rJyku
aHJlZjsiLCAmZXJyb3Iub3V0UHRyKCkpOwotICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQp
OwotICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7Ci0gICAgdmFsdWVTdHJpbmcuc2V0KFdlYlZp
ZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKLSAg
ICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAiaHR0cDovL3d3dy53ZWJr
aXRndGsub3JnLyIpOwotCi0gICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3Jp
cHRBbmRXYWl0VW50aWxGaW5pc2hlZCgid2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdX
ZWJLaXRMaW5rJykudGV4dENvbnRlbnQiLCAmZXJyb3Iub3V0UHRyKCkpOwotICAgIGdfYXNzZXJ0
KGphdmFzY3JpcHRSZXN1bHQpOwotICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7Ci0gICAgdmFs
dWVTdHJpbmcuc2V0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFz
Y3JpcHRSZXN1bHQpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09
LCAiV2ViS2l0R1RLKyBXZWJzaXRlIik7Ci0KLSAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+
cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJhID0gMjU7IiwgJmVycm9yLm91dFB0
cigpKTsKLSAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBnX2Fzc2VydCghZXJy
b3IuZ2V0KCkpOwotICAgIGdfYXNzZXJ0X2NtcGZsb2F0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0
UmVzdWx0VG9OdW1iZXIoamF2YXNjcmlwdFJlc3VsdCksID09LCAyNSk7Ci0KLSAgICBqYXZhc2Ny
aXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJhID0g
Mi41OyIsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7
Ci0gICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKLSAgICBnX2Fzc2VydF9jbXBmbG9hdChXZWJW
aWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvTnVtYmVyKGphdmFzY3JpcHRSZXN1bHQpLCA9PSwg
Mi41KTsKLQotICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2Fp
dFVudGlsRmluaXNoZWQoImEgPSB0cnVlIiwgJmVycm9yLm91dFB0cigpKTsKLSAgICBnX2Fzc2Vy
dChqYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOwotICAgIGdf
YXNzZXJ0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9Cb29sZWFuKGphdmFzY3JpcHRS
ZXN1bHQpKTsKLQotICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5k
V2FpdFVudGlsRmluaXNoZWQoImEgPSBmYWxzZSIsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgZ19h
c3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKLSAg
ICBnX2Fzc2VydCghV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0Jvb2xlYW4oamF2YXNj
cmlwdFJlc3VsdCkpOwotCi0gICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3Jp
cHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiYSA9IG51bGwiLCAmZXJyb3Iub3V0UHRyKCkpOwotICAg
IGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOwotICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7
Ci0gICAgZ19hc3NlcnQoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRJc051bGwoamF2YXNj
cmlwdFJlc3VsdCkpOwotCi0gICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3Jp
cHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZnVuY3Rpb24gRm9vKCkgeyBhID0gMjU7IH0gRm9vKCk7
IiwgJmVycm9yLm91dFB0cigpKTsKLSAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKLSAg
ICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOwotICAgIGdfYXNzZXJ0KFdlYlZpZXdUZXN0OjpqYXZh
c2NyaXB0UmVzdWx0SXNVbmRlZmluZWQoamF2YXNjcmlwdFJlc3VsdCkpOwotCi0gICAgamF2YXNj
cmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRGcm9tR1Jlc291cmNlQW5kV2FpdFVudGls
RmluaXNoZWQoIi9vcmcvd2Via2l0L3dlYmtpdDJndGsvdGVzdHMvbGluay10aXRsZS5qcyIsICZl
cnJvci5vdXRQdHIoKSk7Ci0gICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAgZ19h
c3NlcnQoIWVycm9yLmdldCgpKTsKLSAgICB2YWx1ZVN0cmluZy5zZXQoV2ViVmlld1Rlc3Q6Omph
dmFzY3JpcHRSZXN1bHRUb0NTdHJpbmcoamF2YXNjcmlwdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0
X2NtcHN0cih2YWx1ZVN0cmluZy5nZXQoKSwgPT0sICJXZWJLaXRHVEsrIFRpdGxlIik7Ci0KLSAg
ICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEZyb21HUmVzb3VyY2VBbmRX
YWl0VW50aWxGaW5pc2hlZCgiL3dyb25nL3BhdGgvdG8vcmVzb3VyY2UuanMiLCAmZXJyb3Iub3V0
UHRyKCkpOwotICAgIGdfYXNzZXJ0KCFqYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBnX2Fzc2VydF9l
cnJvcihlcnJvci5nZXQoKSwgR19SRVNPVVJDRV9FUlJPUiwgR19SRVNPVVJDRV9FUlJPUl9OT1Rf
Rk9VTkQpOwotICAgIGVycm9yLmNsZWFyKCk7Ci0KLSAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVz
dC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJmb28oKTsiLCAmZXJyb3Iub3V0
UHRyKCkpOwotICAgIGdfYXNzZXJ0KCFqYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBnX2Fzc2VydF9l
cnJvcihlcnJvci5nZXQoKSwgV0VCS0lUX0pBVkFTQ1JJUFRfRVJST1IsIFdFQktJVF9KQVZBU0NS
SVBUX0VSUk9SX1NDUklQVF9GQUlMRUQpOwotfQotCi1jbGFzcyBGdWxsU2NyZWVuQ2xpZW50VGVz
dDogcHVibGljIFdlYlZpZXdUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhU
VVJFKEZ1bGxTY3JlZW5DbGllbnRUZXN0KTsKLQotICAgIGVudW0gRnVsbFNjcmVlbkV2ZW50IHsK
LSAgICAgICAgTm9uZSwKLSAgICAgICAgRW50ZXIsCi0gICAgICAgIExlYXZlCi0gICAgfTsKLQot
ICAgIHN0YXRpYyBnYm9vbGVhbiB2aWV3RW50ZXJGdWxsU2NyZWVuQ2FsbGJhY2soV2ViS2l0V2Vi
VmlldyosIEZ1bGxTY3JlZW5DbGllbnRUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+
bV9ldmVudCA9IEVudGVyOwotICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxv
b3ApOwotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gICAgc3RhdGljIGdib29sZWFu
IHZpZXdMZWF2ZUZ1bGxTY3JlZW5DYWxsYmFjayhXZWJLaXRXZWJWaWV3KiwgRnVsbFNjcmVlbkNs
aWVudFRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICB0ZXN0LT5tX2V2ZW50ID0gTGVhdmU7Ci0g
ICAgICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7Ci0gICAgICAgIHJldHVy
biBGQUxTRTsKLSAgICB9Ci0KLSAgICBGdWxsU2NyZWVuQ2xpZW50VGVzdCgpCi0gICAgICAgIDog
bV9ldmVudChOb25lKQotICAgIHsKLSAgICAgICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVf
ZnVsbHNjcmVlbih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKG1fd2ViVmlldyksIFRSVUUp
OwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImVudGVyLWZ1bGxzY3JlZW4i
LCBHX0NBTExCQUNLKHZpZXdFbnRlckZ1bGxTY3JlZW5DYWxsYmFjayksIHRoaXMpOwotICAgICAg
ICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImxlYXZlLWZ1bGxzY3JlZW4iLCBHX0NBTExC
QUNLKHZpZXdMZWF2ZUZ1bGxTY3JlZW5DYWxsYmFjayksIHRoaXMpOwotICAgIH0KLQotICAgIH5G
dWxsU2NyZWVuQ2xpZW50VGVzdCgpCi0gICAgewotICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19k
aXNjb25uZWN0X21hdGNoZWQobV93ZWJWaWV3LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAw
LCAwLCB0aGlzKTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlcXVlc3RGdWxsU2NyZWVuQW5kV2FpdFVu
dGlsRW50ZXJlZEZ1bGxTY3JlZW4oKQotICAgIHsKLSAgICAgICAgbV9ldmVudCA9IE5vbmU7Ci0g
ICAgICAgIHdlYmtpdF93ZWJfdmlld19ydW5famF2YXNjcmlwdChtX3dlYlZpZXcsICJkb2N1bWVu
dC5kb2N1bWVudEVsZW1lbnQud2Via2l0UmVxdWVzdEZ1bGxTY3JlZW4oKTsiLCAwLCAwLCAwKTsK
LSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIHN0YXRp
YyBnYm9vbGVhbiBsZWF2ZUZ1bGxTY3JlZW5JZGxlKEZ1bGxTY3JlZW5DbGllbnRUZXN0KiB0ZXN0
KQotICAgIHsKLSAgICAgICAgdGVzdC0+a2V5U3Ryb2tlKEdES19LRVlfRXNjYXBlKTsKLSAgICAg
ICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQotICAgIHZvaWQgbGVhdmVGdWxsU2NyZWVuQW5kV2Fp
dFVudGlsTGVmdEZ1bGxTY3JlZW4oKQotICAgIHsKLSAgICAgICAgbV9ldmVudCA9IE5vbmU7Ci0g
ICAgICAgIGdfaWRsZV9hZGQocmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4obGVhdmVGdWxs
U2NyZWVuSWRsZSksIHRoaXMpOwotICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7
Ci0gICAgfQotCi0gICAgRnVsbFNjcmVlbkV2ZW50IG1fZXZlbnQ7Ci19OwotCi1zdGF0aWMgdm9p
ZCB0ZXN0V2ViVmlld0Z1bGxTY3JlZW4oRnVsbFNjcmVlbkNsaWVudFRlc3QqIHRlc3QsIGdjb25z
dHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7
Ci0gICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxib2R5PkZ1bGxTY3JlZW4gdGVzdDwvYm9keT48
L2h0bWw+IiwgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgdGVz
dC0+cmVxdWVzdEZ1bGxTY3JlZW5BbmRXYWl0VW50aWxFbnRlcmVkRnVsbFNjcmVlbigpOwotICAg
IGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2V2ZW50LCA9PSwgRnVsbFNjcmVlbkNsaWVudFRlc3Q6
OkVudGVyKTsKLSAgICB0ZXN0LT5sZWF2ZUZ1bGxTY3JlZW5BbmRXYWl0VW50aWxMZWZ0RnVsbFNj
cmVlbigpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2V2ZW50LCA9PSwgRnVsbFNjcmVl
bkNsaWVudFRlc3Q6OkxlYXZlKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdDYW5TaG93
TUlNRVR5cGUoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgLy8gU3Vw
cG9ydGVkIE1JTUUgdHlwZXMuCi0gICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2Nhbl9zaG93
X21pbWVfdHlwZSh0ZXN0LT5tX3dlYlZpZXcsICJ0ZXh0L2h0bWwiKSk7Ci0gICAgZ19hc3NlcnQo
d2Via2l0X3dlYl92aWV3X2Nhbl9zaG93X21pbWVfdHlwZSh0ZXN0LT5tX3dlYlZpZXcsICJ0ZXh0
L3BsYWluIikpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19jYW5fc2hvd19taW1lX3R5
cGUodGVzdC0+bV93ZWJWaWV3LCAiaW1hZ2UvanBlZyIpKTsKLQotICAgIC8vIFVuc3VwcG9ydGVk
IE1JTUUgdHlwZXMuCi0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fc2hvd19taW1l
X3R5cGUodGVzdC0+bV93ZWJWaWV3LCAidGV4dC92Y2FyZCIpKTsKLSAgICBnX2Fzc2VydCghd2Vi
a2l0X3dlYl92aWV3X2Nhbl9zaG93X21pbWVfdHlwZSh0ZXN0LT5tX3dlYlZpZXcsICJhcHBsaWNh
dGlvbi9wZGYiKSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fc2hvd19taW1l
X3R5cGUodGVzdC0+bV93ZWJWaWV3LCAiYXBwbGljYXRpb24vemlwIikpOwotICAgIGdfYXNzZXJ0
KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX3Nob3dfbWltZV90eXBlKHRlc3QtPm1fd2ViVmlldywgImFw
cGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpKTsKLQotICAgIC8vIFBsdWdpbnMgYXJlIG9ubHkgc3Vw
cG9ydGVkIHdoZW4gZW5hYmxlZC4KLSAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X2FkZGl0aW9u
YWxfcGx1Z2luc19kaXJlY3Rvcnkod2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KHRlc3QtPm1f
d2ViVmlldyksIFdFQktJVF9URVNUX1BMVUdJTl9ESVIpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF93
ZWJfdmlld19jYW5fc2hvd19taW1lX3R5cGUodGVzdC0+bV93ZWJWaWV3LCAiYXBwbGljYXRpb24v
eC13ZWJraXQtdGVzdC1uZXRzY2FwZSIpKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJs
ZV9wbHVnaW5zKHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3ModGVzdC0+bV93ZWJWaWV3KSwg
RkFMU0UpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX3Nob3dfbWltZV90eXBl
KHRlc3QtPm1fd2ViVmlldywgImFwcGxpY2F0aW9uL3gtd2Via2l0LXRlc3QtbmV0c2NhcGUiKSk7
Ci19Ci0KLWNsYXNzIEZvcm1DbGllbnRUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3QgewotcHVibGlj
OgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoRm9ybUNsaWVudFRlc3QpOwotCi0gICAgc3Rh
dGljIHZvaWQgc3VibWl0Rm9ybUNhbGxiYWNrKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRGb3JtU3Vi
bWlzc2lvblJlcXVlc3QqIHJlcXVlc3QsIEZvcm1DbGllbnRUZXN0KiB0ZXN0KQotICAgIHsKLSAg
ICAgICAgdGVzdC0+c3VibWl0Rm9ybShyZXF1ZXN0KTsKLSAgICB9Ci0KLSAgICBGb3JtQ2xpZW50
VGVzdCgpCi0gICAgICAgIDogbV9zdWJtaXRQb3NpdGlvblgoMCkKLSAgICAgICAgLCBtX3N1Ym1p
dFBvc2l0aW9uWSgwKQotICAgIHsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcs
ICJzdWJtaXQtZm9ybSIsIEdfQ0FMTEJBQ0soc3VibWl0Rm9ybUNhbGxiYWNrKSwgdGhpcyk7Ci0g
ICAgfQotCi0gICAgfkZvcm1DbGllbnRUZXN0KCkKLSAgICB7Ci0gICAgICAgIGdfc2lnbmFsX2hh
bmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3dlYlZpZXcsIEdfU0lHTkFMX01BVENIX0RBVEEs
IDAsIDAsIDAsIDAsIHRoaXMpOwotICAgIH0KLQotICAgIHZvaWQgc3VibWl0Rm9ybShXZWJLaXRG
b3JtU3VibWlzc2lvblJlcXVlc3QqIHJlcXVlc3QpCi0gICAgewotICAgICAgICBhc3NlcnRPYmpl
Y3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHJlcXVlc3QpKTsKLSAgICAgICAg
bV9yZXF1ZXN0ID0gcmVxdWVzdDsKLSAgICAgICAgd2Via2l0X2Zvcm1fc3VibWlzc2lvbl9yZXF1
ZXN0X3N1Ym1pdChyZXF1ZXN0KTsKLSAgICAgICAgcXVpdE1haW5Mb29wKCk7Ci0gICAgfQotCi0g
ICAgR0hhc2hUYWJsZSogd2FpdFVudGlsRm9ybVN1Ym1pdHRlZEFuZEdldFRleHRGaWVsZHMoKQot
ICAgIHsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotICAgICAgICByZXR1
cm4gd2Via2l0X2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0X2dldF90ZXh0X2ZpZWxkcyhtX3JlcXVl
c3QuZ2V0KCkpOwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiBkb0NsaWNrSWRsZUNhbGxi
YWNrKEZvcm1DbGllbnRUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+Y2xpY2tNb3Vz
ZUJ1dHRvbih0ZXN0LT5tX3N1Ym1pdFBvc2l0aW9uWCwgdGVzdC0+bV9zdWJtaXRQb3NpdGlvblks
IDEpOwotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gICAgdm9pZCBzdWJtaXRGb3Jt
QXRQb3NpdGlvbihpbnQgeCwgaW50IHkpCi0gICAgewotICAgICAgICBtX3N1Ym1pdFBvc2l0aW9u
WCA9IHg7Ci0gICAgICAgIG1fc3VibWl0UG9zaXRpb25ZID0geTsKLSAgICAgICAgZ19pZGxlX2Fk
ZChyZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihkb0NsaWNrSWRsZUNhbGxiYWNrKSwgdGhp
cyk7Ci0gICAgfQotCi0gICAgaW50IG1fc3VibWl0UG9zaXRpb25YOwotICAgIGludCBtX3N1Ym1p
dFBvc2l0aW9uWTsKLSAgICBHUmVmUHRyPFdlYktpdEZvcm1TdWJtaXNzaW9uUmVxdWVzdD4gbV9y
ZXF1ZXN0OwotfTsKLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdTdWJtaXRGb3JtKEZvcm1DbGll
bnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPnNob3dJbldpbmRvd0Fu
ZFdhaXRVbnRpbE1hcHBlZCgpOwotCi0gICAgY29uc3QgY2hhciogZm9ybUhUTUwgPQotICAgICAg
ICAiPGh0bWw+PGJvZHk+IgotICAgICAgICAiIDxmb3JtIGFjdGlvbj0nIyc+IgotICAgICAgICAi
ICA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0ndGV4dDEnIHZhbHVlPSd2YWx1ZTEnPiIKLSAgICAg
ICAgIiAgPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3RleHQyJyB2YWx1ZT0ndmFsdWUyJz4iCi0g
ICAgICAgICIgIDxpbnB1dCB0eXBlPSdwYXNzd29yZCcgbmFtZT0ncGFzc3dvcmQnIHZhbHVlPSdz
ZWNyZXQnPiIKLSAgICAgICAgIiAgPHRleHRhcmVhIGNvbHM9JzUnIHJvd3M9JzUnIG5hbWU9J3Rl
eHRhcmVhJz5UZXh0PC90ZXh0YXJlYT4iCi0gICAgICAgICIgIDxpbnB1dCB0eXBlPSdoaWRkZW4n
IG5hbWU9J2hpZGRlbjEnIHZhbHVlPSdoaWRkZW4xJz4iCi0gICAgICAgICIgIDxpbnB1dCB0eXBl
PSdzdWJtaXQnIHZhbHVlPSdTdWJtaXQnIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDox
OyB0b3A6MScgc2l6ZT0nMTAnPiIKLSAgICAgICAgIiA8L2Zvcm0+IgotICAgICAgICAiPC9ib2R5
PjwvaHRtbD4iOwotCi0gICAgdGVzdC0+bG9hZEh0bWwoZm9ybUhUTUwsICJmaWxlOi8vLyIpOwot
ICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgdGVzdC0+c3VibWl0Rm9y
bUF0UG9zaXRpb24oNSwgNSk7Ci0gICAgR0hhc2hUYWJsZSogdmFsdWVzID0gdGVzdC0+d2FpdFVu
dGlsRm9ybVN1Ym1pdHRlZEFuZEdldFRleHRGaWVsZHMoKTsKLSAgICBnX2Fzc2VydCh2YWx1ZXMp
OwotICAgIGdfYXNzZXJ0X2NtcHVpbnQoZ19oYXNoX3RhYmxlX3NpemUodmFsdWVzKSwgPT0sIDMp
OwotICAgIGdfYXNzZXJ0X2NtcHN0cihzdGF0aWNfY2FzdDxjaGFyKj4oZ19oYXNoX3RhYmxlX2xv
b2t1cCh2YWx1ZXMsICJ0ZXh0MSIpKSwgPT0sICJ2YWx1ZTEiKTsKLSAgICBnX2Fzc2VydF9jbXBz
dHIoc3RhdGljX2Nhc3Q8Y2hhcio+KGdfaGFzaF90YWJsZV9sb29rdXAodmFsdWVzLCAidGV4dDIi
KSksID09LCAidmFsdWUyIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHN0YXRpY19jYXN0PGNoYXIq
PihnX2hhc2hfdGFibGVfbG9va3VwKHZhbHVlcywgInBhc3N3b3JkIikpLCA9PSwgInNlY3JldCIp
OwotfQotCi1jbGFzcyBTYXZlV2ViVmlld1Rlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7Ci1wdWJs
aWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShTYXZlV2ViVmlld1Rlc3QpOwotCi0gICAg
U2F2ZVdlYlZpZXdUZXN0KCkKLSAgICAgICAgOiBtX3RlbXBEaXJlY3RvcnkoZ19kaXJfbWFrZV90
bXAoIldlYktpdDJTYXZlVmlld1Rlc3QtWFhYWFhYIiwgMCkpCi0gICAgewotICAgIH0KLQotICAg
IH5TYXZlV2ViVmlld1Rlc3QoKQotICAgIHsKLSAgICAgICAgaWYgKEdfSVNfRklMRShtX2ZpbGUu
Z2V0KCkpKQotICAgICAgICAgICAgZ19maWxlX2RlbGV0ZShtX2ZpbGUuZ2V0KCksIDAsIDApOwot
Ci0gICAgICAgIGlmIChHX0lTX0lOUFVUX1NUUkVBTShtX2lucHV0U3RyZWFtLmdldCgpKSkKLSAg
ICAgICAgICAgIGdfaW5wdXRfc3RyZWFtX2Nsb3NlKG1faW5wdXRTdHJlYW0uZ2V0KCksIDAsIDAp
OwotCi0gICAgICAgIGlmIChtX3RlbXBEaXJlY3RvcnkpCi0gICAgICAgICAgICBnX3JtZGlyKG1f
dGVtcERpcmVjdG9yeS5nZXQoKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgd2ViVmlld1Nh
dmVkVG9TdHJlYW1DYWxsYmFjayhHT2JqZWN0KiBvYmplY3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0
LCBTYXZlV2ViVmlld1Rlc3QqIHRlc3QpCi0gICAgewotICAgICAgICBHT3duUHRyPEdFcnJvcj4g
ZXJyb3I7Ci0gICAgICAgIHRlc3QtPm1faW5wdXRTdHJlYW0gPSBhZG9wdEdSZWYod2Via2l0X3dl
Yl92aWV3X3NhdmVfZmluaXNoKHRlc3QtPm1fd2ViVmlldywgcmVzdWx0LCAmZXJyb3Iub3V0UHRy
KCkpKTsKLSAgICAgICAgZ19hc3NlcnQoR19JU19JTlBVVF9TVFJFQU0odGVzdC0+bV9pbnB1dFN0
cmVhbS5nZXQoKSkpOwotICAgICAgICBnX2Fzc2VydCghZXJyb3IpOwotCi0gICAgICAgIHRlc3Qt
PnF1aXRNYWluTG9vcCgpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHdlYlZpZXdTYXZlZFRv
RmlsZUNhbGxiYWNrKEdPYmplY3QqIG9iamVjdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIFNhdmVX
ZWJWaWV3VGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsK
LSAgICAgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X3NhdmVfdG9fZmlsZV9maW5pc2godGVz
dC0+bV93ZWJWaWV3LCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSkpOwotICAgICAgICBnX2Fzc2Vy
dCghZXJyb3IpOwotCi0gICAgICAgIHRlc3QtPnF1aXRNYWluTG9vcCgpOwotICAgIH0KLQotICAg
IHZvaWQgc2F2ZUFuZFdhaXRGb3JTdHJlYW0oKQotICAgIHsKLSAgICAgICAgd2Via2l0X3dlYl92
aWV3X3NhdmUobV93ZWJWaWV3LCBXRUJLSVRfU0FWRV9NT0RFX01IVE1MLCAwLCByZWludGVycHJl
dF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KHdlYlZpZXdTYXZlZFRvU3RyZWFtQ2FsbGJhY2sp
LCB0aGlzKTsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotICAgIH0KLQot
ICAgIHZvaWQgc2F2ZUFuZFdhaXRGb3JGaWxlKCkKLSAgICB7Ci0gICAgICAgIG1fc2F2ZURlc3Rp
bmF0aW9uRmlsZVBhdGguc2V0KGdfYnVpbGRfZmlsZW5hbWUobV90ZW1wRGlyZWN0b3J5LmdldCgp
LCAidGVzdFdlYlZpZXdTYXZlUmVzdWx0Lm1odCIsIE5VTEwpKTsKLSAgICAgICAgbV9maWxlID0g
YWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgobV9zYXZlRGVzdGluYXRpb25GaWxlUGF0aC5n
ZXQoKSkpOwotICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfc2F2ZV90b19maWxlKG1fd2ViVmlldywg
bV9maWxlLmdldCgpLCBXRUJLSVRfU0FWRV9NT0RFX01IVE1MLCAwLCByZWludGVycHJldF9jYXN0
PEdBc3luY1JlYWR5Q2FsbGJhY2s+KHdlYlZpZXdTYXZlZFRvRmlsZUNhbGxiYWNrKSwgdGhpcyk7
Ci0gICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAgICB9Ci0KLSAgICBHT3du
UHRyPGNoYXI+IG1fdGVtcERpcmVjdG9yeTsKLSAgICBHT3duUHRyPGNoYXI+IG1fc2F2ZURlc3Rp
bmF0aW9uRmlsZVBhdGg7Ci0gICAgR1JlZlB0cjxHSW5wdXRTdHJlYW0+IG1faW5wdXRTdHJlYW07
Ci0gICAgR1JlZlB0cjxHRmlsZT4gbV9maWxlOwotfTsKLQotc3RhdGljIHZvaWQgdGVzdFdlYlZp
ZXdTYXZlKFNhdmVXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0
LT5sb2FkSHRtbCgiPGh0bWw+IgotICAgICAgICAgICAgICAgICAgICI8Ym9keT4iCi0gICAgICAg
ICAgICAgICAgICAgIiAgPHA+QSBwYXJhZ3JhcGggd2l0aCBwbGFpbiB0ZXh0PC9wPiIKLSAgICAg
ICAgICAgICAgICAgICAiICA8cD4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBBIHJlZCBib3g6
IDxpbWcgc3JjPSdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FB
QUFJQUFBQUNDQUlBQUFEOTFKcHpBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUIzUkpU
VVVIM0FZV0RUTVZ3blNabndBQUFCMXBWRmgwUTI5dGJXVnVkQUFBQUFBQVEzSmxZWFJsWkNCM2FY
Um9JRWRKVFZCa0xtVUhBQUFBRmtsRVFWUUkxMlA4ejhEQXdNREF4TURBd01EQUFBQU5IUUVESytt
bXlBQUFBQUJKUlU1RXJrSmdnZz09Jz48L2JyPiIKLSAgICAgICAgICAgICAgICAgICAiICAgIEEg
Ymx1ZSBib3g6IDxpbWcgc3JjPSdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFB
TlNVaEVVZ0FBQUFJQUFBQUNDQUlBQUFEOTFKcHpBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZ
QUFBQUIzUkpUVVVIM0FZV0RUTXZCSGhBTFFBQUFCMXBWRmgwUTI5dGJXVnVkQUFBQUFBQVEzSmxZ
WFJsWkNCM2FYUm9JRWRKVFZCa0xtVUhBQUFBRmtsRVFWUUkxMk5rNFBuUHdNREF4TURBd01EQUFB
QUxyd0VQUElzMXBnQUFBQUJKUlU1RXJrSmdnZz09Jz4iCi0gICAgICAgICAgICAgICAgICAgIiAg
PC9wPiIKLSAgICAgICAgICAgICAgICAgICAiPC9ib2R5PiIKLSAgICAgICAgICAgICAgICAgICAi
PC9odG1sPiIsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAg
Ly8gV3JpdGUgdG8gYSBmaWxlIGFuZCB0byBhbiBpbnB1dCBzdHJlYW0uCi0gICAgdGVzdC0+c2F2
ZUFuZFdhaXRGb3JGaWxlKCk7Ci0gICAgdGVzdC0+c2F2ZUFuZFdhaXRGb3JTdHJlYW0oKTsKLQot
ICAgIC8vIFdlIHNob3VsZCBoYXZlIGV4YWN0bHkgdGhlIHNhbWUgYW1vdW50IG9mIGJ5dGVzIGlu
IHRoZSBmaWxlCi0gICAgLy8gdGhhbiB0aG9zZSBjb21pbmcgZnJvbSB0aGUgR0lucHV0U3RyZWFt
LiBXZSBkb24ndCBjb21wYXJlIHRoZQotICAgIC8vIHN0cmluZ3MgcmVhZCBzaW5jZSB0aGUgJ0Rh
dGUnIGZpZWxkIGFuZCB0aGUgYm91bmRhcmllcyB3aWxsIGJlCi0gICAgLy8gZGlmZmVyZW50IG9u
IGVhY2ggY2FzZS4gTUhUTUwgZnVuY3Rpb25hbGl0eSB3aWxsIGJlIHRlc3RlZCBieQotICAgIC8v
IExheW91dCB0ZXN0cywgc28gY2hlY2tpbmcgdGhlIGFtb3VudCBvZiBieXRlcyBpcyBlbm91Z2gu
Ci0gICAgR093blB0cjxHRXJyb3I+IGVycm9yOwotICAgIGdjaGFyIGJ1ZmZlcls1MTJdID0geyAw
IH07Ci0gICAgZ3NzaXplIHJlYWRCeXRlcyA9IDA7Ci0gICAgZ3NzaXplIHRvdGFsQnl0ZXNGcm9t
U3RyZWFtID0gMDsKLSAgICB3aGlsZSAocmVhZEJ5dGVzID0gZ19pbnB1dF9zdHJlYW1fcmVhZCh0
ZXN0LT5tX2lucHV0U3RyZWFtLmdldCgpLCAmYnVmZmVyLCA1MTIsIDAsICZlcnJvci5vdXRQdHIo
KSkpIHsKLSAgICAgICAgZ19hc3NlcnQoIWVycm9yKTsKLSAgICAgICAgdG90YWxCeXRlc0Zyb21T
dHJlYW0gKz0gcmVhZEJ5dGVzOwotICAgIH0KLQotICAgIC8vIENoZWNrIHRoYXQgdGhlIGZpbGUg
ZXhpc3RzIGFuZCB0aGF0IGl0IGNvbnRhaW5zIHRoZSBzYW1lIGFtb3VudCBvZiBieXRlcy4KLSAg
ICBHUmVmUHRyPEdGaWxlSW5mbz4gZmlsZUluZm8gPSBhZG9wdEdSZWYoZ19maWxlX3F1ZXJ5X2lu
Zm8odGVzdC0+bV9maWxlLmdldCgpLCBHX0ZJTEVfQVRUUklCVVRFX1NUQU5EQVJEX1NJWkUsIHN0
YXRpY19jYXN0PEdGaWxlUXVlcnlJbmZvRmxhZ3M+KDApLCAwLCAwKSk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KGdfZmlsZV9pbmZvX2dldF9zaXplKGZpbGVJbmZvLmdldCgpKSwgPT0sIHRvdGFsQnl0
ZXNGcm9tU3RyZWFtKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdNb2RlKFdlYlZpZXdU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBpbmRl
eEhUTUwgPSAiPGh0bWw+PGJvZHk+PHA+VGVzdCBXZWIgVmlldyBNb2RlPC9wPjwvYm9keT48L2h0
bWw+IjsKLQotICAgIC8vIFdlYiBtb2RlLgotICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X3dl
Yl92aWV3X2dldF92aWV3X21vZGUodGVzdC0+bV93ZWJWaWV3KSwgPT0sIFdFQktJVF9WSUVXX01P
REVfV0VCKTsKLSAgICB0ZXN0LT5sb2FkSHRtbChpbmRleEhUTUwsIDApOwotICAgIHRlc3QtPndh
aXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFz
Y3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoIndp
bmRvdy5kb2N1bWVudC5ib2R5LnRleHRDb250ZW50OyIsIDApOwotICAgIEdPd25QdHI8Y2hhcj4g
dmFsdWVTdHJpbmcoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0NTdHJpbmcoamF2YXNj
cmlwdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih2YWx1ZVN0cmluZy5nZXQoKSwgPT0s
ICJUZXN0IFdlYiBWaWV3IE1vZGUiKTsKLQotICAgIC8vIFNvdXJjZSBtb2RlLgotICAgIHdlYmtp
dF93ZWJfdmlld19zZXRfdmlld19tb2RlKHRlc3QtPm1fd2ViVmlldywgV0VCS0lUX1ZJRVdfTU9E
RV9TT1VSQ0UpOwotICAgIHRlc3QtPmxvYWRIdG1sKGluZGV4SFRNTCwgMCk7Ci0gICAgdGVzdC0+
d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1
bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgid2luZG93LmRvY3VtZW50LmJvZHkudGV4
dENvbnRlbnQ7IiwgMCk7Ci0gICAgdmFsdWVTdHJpbmcuc2V0KFdlYlZpZXdUZXN0OjpqYXZhc2Ny
aXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKLSAgICBnX2Fzc2VydF9jbXBz
dHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCBpbmRleEhUTUwpOwotfQotCi0vLyBUbyB0ZXN0IHBh
Z2UgdmlzaWJpbGl0eSBBUEkuIEN1cnJlbnRseSBvbmx5ICd2aXNpYmxlJyBhbmQgJ2hpZGRlbicg
c3RhdGVzIGFyZSBpbXBsZW1lbnRlZCBmdWxseSBpbiBXZWJDb3JlLgotLy8gU2VlIGFsc28gaHR0
cDovL3d3dy53My5vcmcvVFIvMjAxMS9XRC1wYWdlLXZpc2liaWxpdHktMjAxMTA2MDIvIGFuZCBo
dHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9jaHJvbWUvd2hpdGVwYXBlcnMvcGFnZXZpc2li
aWxpdHkKLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3UGFnZVZpc2liaWxpdHkoV2ViVmlld1Rlc3Qq
IHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjx0aXRs
ZT48L3RpdGxlPiIKLSAgICAgICAgIjxib2R5PjxwPlRlc3QgV2ViIFBhZ2UgVmlzaWJpbGl0eTwv
cD4iCi0gICAgICAgICI8c2NyaXB0PiIKLSAgICAgICAgImRvY3VtZW50LmFkZEV2ZW50TGlzdGVu
ZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsIG9uVmlzaWJpbGl0eUNoYW5nZSwgZmFsc2UpOyIKLSAg
ICAgICAgImZ1bmN0aW9uIG9uVmlzaWJpbGl0eUNoYW5nZSgpIHsiCi0gICAgICAgICIgICAgZG9j
dW1lbnQudGl0bGUgPSBkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU7IgotICAgICAgICAifSIKLSAg
ICAgICAgIjwvc2NyaXB0PiIKLSAgICAgICAgIjwvYm9keT48L2h0bWw+IiwKLSAgICAgICAgMCk7
Ci0KLSAgICAvLyBXYWl0IHVudGlsbCB0aGUgcGFnZSBpcyBsb2FkZWQuIEluaXRpYWwgdmlzaWJp
bGl0eSBzaG91bGQgYmUgJ2hpZGRlbicuCi0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVk
KCk7Ci0KLSAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgV2ViS2l0SmF2YXNjcmlwdFJl
c3VsdCogamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxG
aW5pc2hlZCgiZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlOyIsICZlcnJvci5vdXRQdHIoKSk7Ci0g
ICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAgZ19hc3NlcnQoIWVycm9yLmdldCgp
KTsKLSAgICBHT3duUHRyPGNoYXI+IHZhbHVlU3RyaW5nKFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0
UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIo
dmFsdWVTdHJpbmcuZ2V0KCksID09LCAiaGlkZGVuIik7Ci0KLSAgICBqYXZhc2NyaXB0UmVzdWx0
ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVudC5oaWRk
ZW47IiwgJmVycm9yLm91dFB0cigpKTsKLSAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsK
LSAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOwotICAgIGdfYXNzZXJ0KFdlYlZpZXdUZXN0Ojpq
YXZhc2NyaXB0UmVzdWx0VG9Cb29sZWFuKGphdmFzY3JpcHRSZXN1bHQpKTsKLQotICAgIC8vIFNo
b3cgdGhlIHBhZ2UuIFRoZSB2aXNpYmlsaXR5IHNob3VsZCBiZSB1cGRhdGVkIHRvICd2aXNpYmxl
Jy4KLSAgICB0ZXN0LT5zaG93SW5XaW5kb3coKTsKLSAgICB0ZXN0LT53YWl0VW50aWxUaXRsZUNo
YW5nZWQoKTsKLQotICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5k
V2FpdFVudGlsRmluaXNoZWQoImRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZTsiLCAmZXJyb3Iub3V0
UHRyKCkpOwotICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOwotICAgIGdfYXNzZXJ0KCFl
cnJvci5nZXQoKSk7Ci0gICAgdmFsdWVTdHJpbmcuc2V0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0
UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIo
dmFsdWVTdHJpbmcuZ2V0KCksID09LCAidmlzaWJsZSIpOwotCi0gICAgamF2YXNjcmlwdFJlc3Vs
dCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQuaGlk
ZGVuOyIsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7
Ci0gICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKLSAgICBnX2Fzc2VydCghV2ViVmlld1Rlc3Q6
OmphdmFzY3JpcHRSZXN1bHRUb0Jvb2xlYW4oamF2YXNjcmlwdFJlc3VsdCkpOwotCi0gICAgLy8g
SGlkZSB0aGUgcGFnZS4gVGhlIHZpc2liaWxpdHkgc2hvdWxkIGJlIHVwZGF0ZWQgdG8gJ2hpZGRl
bicuCi0gICAgZ3RrX3dpZGdldF9oaWRlKEdUS19XSURHRVQodGVzdC0+bV93ZWJWaWV3KSk7Ci0g
ICAgdGVzdC0+d2FpdFVudGlsVGl0bGVDaGFuZ2VkKCk7Ci0KLSAgICBqYXZhc2NyaXB0UmVzdWx0
ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVudC52aXNp
YmlsaXR5U3RhdGU7IiwgJmVycm9yLm91dFB0cigpKTsKLSAgICBnX2Fzc2VydChqYXZhc2NyaXB0
UmVzdWx0KTsKLSAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOwotICAgIHZhbHVlU3RyaW5nLnNl
dChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0
KSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgImhpZGRlbiIp
OwotCi0gICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50
aWxGaW5pc2hlZCgiZG9jdW1lbnQuaGlkZGVuOyIsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgZ19h
c3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKLSAg
ICBnX2Fzc2VydChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQm9vbGVhbihqYXZhc2Ny
aXB0UmVzdWx0KSk7Ci19Ci0KLWNsYXNzIFNuYXBzaG90V2ViVmlld1Rlc3Q6IHB1YmxpYyBXZWJW
aWV3VGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShTbmFwc2hvdFdl
YlZpZXdUZXN0KTsKLQotICAgIHN0YXRpYyB2b2lkIG9uU25hcHNob3RDYW5jZWxsZWRSZWFkeShX
ZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgR0FzeW5jUmVzdWx0KiByZXMsIFNuYXBzaG90V2ViVmll
d1Rlc3QqIHRlc3QpCi0gICAgewotICAgICAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAg
ICAgIHRlc3QtPm1fc3VyZmFjZSA9IHdlYmtpdF93ZWJfdmlld19nZXRfc25hcHNob3RfZmluaXNo
KHdlYl92aWV3LCByZXMsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgICAgIGdfYXNzZXJ0KCF0ZXN0
LT5tX3N1cmZhY2UpOwotICAgICAgICBnX2Fzc2VydF9lcnJvcihlcnJvci5nZXQoKSwgR19JT19F
UlJPUiwgR19JT19FUlJPUl9DQU5DRUxMRUQpOwotICAgICAgICB0ZXN0LT5xdWl0TWFpbkxvb3Ao
KTsKLSAgICB9Ci0KLSAgICBnYm9vbGVhbiBnZXRTbmFwc2hvdEFuZENhbmNlbCgpCi0gICAgewot
ICAgICAgICBpZiAobV9zdXJmYWNlKQotICAgICAgICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95
KG1fc3VyZmFjZSk7Ci0gICAgICAgIG1fc3VyZmFjZSA9IDA7Ci0gICAgICAgIEdSZWZQdHI8R0Nh
bmNlbGxhYmxlPiBjYW5jZWxsYWJsZSA9IGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKTsK
LSAgICAgICAgd2Via2l0X3dlYl92aWV3X2dldF9zbmFwc2hvdChtX3dlYlZpZXcsIFdFQktJVF9T
TkFQU0hPVF9SRUdJT05fVklTSUJMRSwgV0VCS0lUX1NOQVBTSE9UX09QVElPTlNfTk9ORSwgY2Fu
Y2VsbGFibGUuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4ob25T
bmFwc2hvdENhbmNlbGxlZFJlYWR5KSwgdGhpcyk7Ci0gICAgICAgIGdfY2FuY2VsbGFibGVfY2Fu
Y2VsKGNhbmNlbGxhYmxlLmdldCgpKTsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxv
b3ApOwotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotfTsKLQotc3RhdGljIHZvaWQg
dGVzdFdlYlZpZXdTbmFwc2hvdChTbmFwc2hvdFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2lu
dGVyKQotewotICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keT48cD5XaGF0ZXZlcjwvcD48
L2JvZHk+PC9odG1sPiIsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwot
Ci0gICAgLy8gV2ViVmlldyBub3QgdmlzaWJsZS4KLSAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZh
Y2UxID0gdGVzdC0+Z2V0U25hcHNob3RBbmRXYWl0VW50aWxSZWFkeShXRUJLSVRfU05BUFNIT1Rf
UkVHSU9OX1ZJU0lCTEUsIFdFQktJVF9TTkFQU0hPVF9PUFRJT05TX05PTkUpOwotICAgIGdfYXNz
ZXJ0KCFzdXJmYWNlMSk7Ci0KLSAgICAvLyBTaG93IHN1cmZhY2UsIHJlc2l6ZSB0byA1MHg1MCwg
dHJ5IGFnYWluLgotICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOwot
ICAgIHRlc3QtPnJlc2l6ZVZpZXcoNTAsIDUwKTsKLSAgICBzdXJmYWNlMSA9IHRlc3QtPmdldFNu
YXBzaG90QW5kV2FpdFVudGlsUmVhZHkoV0VCS0lUX1NOQVBTSE9UX1JFR0lPTl9WSVNJQkxFLCBX
RUJLSVRfU05BUFNIT1RfT1BUSU9OU19OT05FKTsKLSAgICBnX2Fzc2VydChzdXJmYWNlMSk7Ci0K
LSAgICAvLyBvYnRhaW5lZCBzdXJmYWNlIHNob3VsZCBiZSBhdCB0aGUgbW9zdCA1MHg1MC4gU3Rv
cmUgdGhlIHNpemUKLSAgICAvLyBmb3IgY29tcGFyaXNvbiBsYXRlci4KLSAgICBpbnQgd2lkdGgg
PSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChzdXJmYWNlMSk7Ci0gICAgaW50IGhlaWdo
dCA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNlMSk7Ci0gICAgZ19hc3Nl
cnRfY21waW50KHdpZHRoLCA8PSwgNTApOwotICAgIGdfYXNzZXJ0X2NtcGludChoZWlnaHQsIDw9
LCA1MCk7Ci0KLSAgICAvLyBTZWxlY3QgYWxsIHRleHQgaW4gdGhlIFdlYlZpZXcsIHJlcXVlc3Qg
YSBzbmFwc2hvdCBpZ25vcmluZyBzZWxlY3Rpb24uCi0gICAgdGVzdC0+c2VsZWN0QWxsKCk7Ci0g
ICAgc3VyZmFjZTEgPSBjYWlyb19zdXJmYWNlX3JlZmVyZW5jZSh0ZXN0LT5nZXRTbmFwc2hvdEFu
ZFdhaXRVbnRpbFJlYWR5KFdFQktJVF9TTkFQU0hPVF9SRUdJT05fVklTSUJMRSwgV0VCS0lUX1NO
QVBTSE9UX09QVElPTlNfTk9ORSkpOwotICAgIGdfYXNzZXJ0KHN1cmZhY2UxKTsKLSAgICBnX2Fz
c2VydF9jbXBpbnQoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZTEpLCA9PSwg
d2lkdGgpOwotICAgIGdfYXNzZXJ0X2NtcGludChjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWln
aHQoc3VyZmFjZTEpLCA9PSwgaGVpZ2h0KTsKLQotICAgIC8vIENyZWF0ZSBpZGVudGljYWwgc3Vy
ZmFjZS4KLSAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UyID0gdGVzdC0+Z2V0U25hcHNob3RB
bmRXYWl0VW50aWxSZWFkeShXRUJLSVRfU05BUFNIT1RfUkVHSU9OX1ZJU0lCTEUsIFdFQktJVF9T
TkFQU0hPVF9PUFRJT05TX05PTkUpOwotICAgIGdfYXNzZXJ0KHN1cmZhY2UyKTsKLQotICAgIC8v
IENvbXBhcmUgdGhlc2UgdHdvLCB0aGV5IHNob3VsZCBiZSBpZGVudGljYWwuCi0gICAgZ19hc3Nl
cnQoVGVzdDo6Y2Fpcm9TdXJmYWNlc0VxdWFsKHN1cmZhY2UxLCBzdXJmYWNlMikpOwotCi0gICAg
Ly8gUmVxdWVzdCBhIG5ldyBzbmFwc2hvdCwgaW5jbHVkaW5nIHRoZSBzZWxlY3Rpb24gdGhpcyB0
aW1lLiBUaGUKLSAgICAvLyBzaXplIHNob3VsZCBiZSB0aGUgc2FtZSBidXQgdGhlIHJlc3VsdCBt
dXN0IGJlIGRpZmZlcmVudCB0byB0aGUKLSAgICAvLyBvbmUgcHJldmlvdXNseSBvYnRhaW5lZC4K
LSAgICBzdXJmYWNlMiA9IHRlc3QtPmdldFNuYXBzaG90QW5kV2FpdFVudGlsUmVhZHkoV0VCS0lU
X1NOQVBTSE9UX1JFR0lPTl9WSVNJQkxFLCBXRUJLSVRfU05BUFNIT1RfT1BUSU9OU19JTkNMVURF
X1NFTEVDVElPTl9ISUdITElHSFRJTkcpOwotICAgIGdfYXNzZXJ0KHN1cmZhY2UyKTsKLSAgICBn
X2Fzc2VydF9jbXBpbnQoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZTIpLCA9
PSwgd2lkdGgpOwotICAgIGdfYXNzZXJ0X2NtcGludChjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9o
ZWlnaHQoc3VyZmFjZTIpLCA9PSwgaGVpZ2h0KTsKLSAgICBnX2Fzc2VydCghVGVzdDo6Y2Fpcm9T
dXJmYWNlc0VxdWFsKHN1cmZhY2UxLCBzdXJmYWNlMikpOwotCi0gICAgLy8gUmVxdWVzdCBhIHNu
YXBzaG90IG9mIHRoZSB3aG9sZSBkb2N1bWVudCBpbiB0aGUgV2ViVmlldy4gVGhlCi0gICAgLy8g
cmVzdWx0IHNob3VsZCBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgc2l6ZSBvYnRhaW5lZCBwcmV2aW91
c2x5LgotICAgIHN1cmZhY2UyID0gdGVzdC0+Z2V0U25hcHNob3RBbmRXYWl0VW50aWxSZWFkeShX
RUJLSVRfU05BUFNIT1RfUkVHSU9OX0ZVTExfRE9DVU1FTlQsIFdFQktJVF9TTkFQU0hPVF9PUFRJ
T05TX05PTkUpOwotICAgIGdfYXNzZXJ0KHN1cmZhY2UyKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZTIpLCAgPiwgd2lkdGgpOwotICAg
IGdfYXNzZXJ0X2NtcGludChjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZTIp
LCA+LCBoZWlnaHQpOwotICAgIGdfYXNzZXJ0KCFUZXN0OjpjYWlyb1N1cmZhY2VzRXF1YWwoc3Vy
ZmFjZTEsIHN1cmZhY2UyKSk7Ci0KLSAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koc3VyZmFjZTEp
OwotCi0gICAgZ19hc3NlcnQodGVzdC0+Z2V0U25hcHNob3RBbmRDYW5jZWwoKSk7Ci19Ci0KLXZv
aWQgYmVmb3JlQWxsKCkKLXsKLSAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3Iiwg
ImRlZmF1bHQtY29udGV4dCIsIHRlc3RXZWJWaWV3RGVmYXVsdENvbnRleHQpOwotICAgIFdlYlZp
ZXdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiY3VzdG9tLWNoYXJzZXQiLCB0ZXN0V2ViVmll
d0N1c3RvbUNoYXJzZXQpOwotICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAi
c2V0dGluZ3MiLCB0ZXN0V2ViVmlld1NldHRpbmdzKTsKLSAgICBXZWJWaWV3VGVzdDo6YWRkKCJX
ZWJLaXRXZWJWaWV3IiwgInpvb20tbGV2ZWwiLCB0ZXN0V2ViVmlld1pvb21MZXZlbCk7Ci0gICAg
V2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJydW4tamF2YXNjcmlwdCIsIHRlc3RX
ZWJWaWV3UnVuSmF2YVNjcmlwdCk7Ci0gICAgRnVsbFNjcmVlbkNsaWVudFRlc3Q6OmFkZCgiV2Vi
S2l0V2ViVmlldyIsICJmdWxsc2NyZWVuIiwgdGVzdFdlYlZpZXdGdWxsU2NyZWVuKTsKLSAgICBX
ZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImNhbi1zaG93LW1pbWUtdHlwZSIsIHRl
c3RXZWJWaWV3Q2FuU2hvd01JTUVUeXBlKTsKLSAgICBGb3JtQ2xpZW50VGVzdDo6YWRkKCJXZWJL
aXRXZWJWaWV3IiwgInN1Ym1pdC1mb3JtIiwgdGVzdFdlYlZpZXdTdWJtaXRGb3JtKTsKLSAgICBT
YXZlV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJzYXZlIiwgdGVzdFdlYlZpZXdT
YXZlKTsKLSAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInZpZXctbW9kZSIs
IHRlc3RXZWJWaWV3TW9kZSk7Ci0gICAgU25hcHNob3RXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRX
ZWJWaWV3IiwgInNuYXBzaG90IiwgdGVzdFdlYlZpZXdTbmFwc2hvdCk7Ci0gICAgV2ViVmlld1Rl
c3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJwYWdlLXZpc2liaWxpdHkiLCB0ZXN0V2ViVmlld1Bh
Z2VWaXNpYmlsaXR5KTsKLX0KLQotdm9pZCBhZnRlckFsbCgpCi17Ci19CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlld0dy
b3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJL
aXRXZWJWaWV3R3JvdXAuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjZjNWM1
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rl
c3RXZWJLaXRXZWJWaWV3R3JvdXAuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjA2ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
Ci0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLQotI2luY2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKLSNpbmNsdWRlICJXZWJWaWV3VGVz
dC5oIgotI2luY2x1ZGUgPGNzdGRhcmc+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUg
PHdlYmtpdDIvd2Via2l0Mi5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLQot
c3RhdGljIFdlYktpdFRlc3RTZXJ2ZXIqIGtTZXJ2ZXI7Ci0KLS8vIFRoZXNlIGFyZSBhbGwgaGVy
ZSBzbyB0aGF0IHRoZXkgY2FuIGJlIGNoYW5nZWQgZWFzaWx5LCBpZiBuZWNlc3NhcnkuCi1zdGF0
aWMgY29uc3QgY2hhcioga1N0eWxlU2hlZXRIVE1MID0gIjxodG1sPjxkaXYgaWQ9XCJzdHlsZWRF
bGVtZW50XCI+U3dlZXQgc3R5bGV6ITwvZGl2PjwvaHRtbD4iOwotc3RhdGljIGNvbnN0IGNoYXIq
IGtJbmplY3RlZFN0eWxlU2hlZXQgPSAiI3N0eWxlZEVsZW1lbnQgeyBmb250LXdlaWdodDogYm9s
ZDsgfSI7Ci1zdGF0aWMgY29uc3QgY2hhcioga1N0eWxlU2hlZXRUZXN0U2NyaXB0ID0gImdldENv
bXB1dGVkU3R5bGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0eWxlZEVsZW1lbnQnKSlbJ2Zv
bnQtd2VpZ2h0J10iOwotc3RhdGljIGNvbnN0IGNoYXIqIGtTdHlsZVNoZWV0VGVzdFNjcmlwdFJl
c3VsdCA9ICJib2xkIjsKLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdHcm91cERlZmF1bHQoVGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICAvLyBEZWZhdWx0IGdyb3VwIGlzIHNoYXJl
ZCBieSBhbGwgV2ViVmlld3MgYnkgZGVmYXVsdC4KLSAgICBHUmVmUHRyPFdlYktpdFdlYlZpZXc+
IHdlYlZpZXcxID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAg
R1JlZlB0cjxXZWJLaXRXZWJWaWV3PiB3ZWJWaWV3MiA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRf
d2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19nZXRfZ3JvdXAo
d2ViVmlldzEuZ2V0KCkpID09IHdlYmtpdF93ZWJfdmlld19nZXRfZ3JvdXAod2ViVmlldzIuZ2V0
KCkpKTsKLQotICAgIC8vIFNldHRpbmdzIGFyZSBzaGFyZWQgYnkgYWxsIHdlYiB2aWV3IGluIHRo
ZSBzYW1lIGdyb3VwLgotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mo
d2ViVmlldzEuZ2V0KCkpID09IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmlldzIu
Z2V0KCkpKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdlYlZp
ZXcxLmdldCgpKSA9PSB3ZWJraXRfd2ViX3ZpZXdfZ3JvdXBfZ2V0X3NldHRpbmdzKHdlYmtpdF93
ZWJfdmlld19nZXRfZ3JvdXAod2ViVmlldzIuZ2V0KCkpKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRl
c3RXZWJWaWV3R3JvdXBOZXdHcm91cChUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAg
IC8vIFBhc3NpbmcgMCBhcyBncm91cCBuYW1lIGdlbmVyYXRlcyB0aGUgbmFtZSBhdXRvbWF0aWNh
bGx5LgotICAgIEdSZWZQdHI8V2ViS2l0V2ViVmlld0dyb3VwPiB2aWV3R3JvdXAxID0gYWRvcHRH
UmVmKHdlYmtpdF93ZWJfdmlld19ncm91cF9uZXcoMCkpOwotICAgIHRlc3QtPmFzc2VydE9iamVj
dElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1Qodmlld0dyb3VwMS5nZXQoKSkpOwot
ICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19ncm91cF9nZXRfbmFtZSh2aWV3R3JvdXAxLmdl
dCgpKSk7Ci0KLSAgICAvLyBOZXcgZ3JvdXAgd2l0aCBhIGdpdmVuIG5hbWUuCi0gICAgR1JlZlB0
cjxXZWJLaXRXZWJWaWV3R3JvdXA+IHZpZXdHcm91cDIgPSBhZG9wdEdSZWYod2Via2l0X3dlYl92
aWV3X2dyb3VwX25ldygiVGVzdEdyb3VwMiIpKTsKLSAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0Rl
bGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHZpZXdHcm91cDIuZ2V0KCkpKTsKLSAgICBn
X2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dyb3VwX2dldF9uYW1lKHZpZXdHcm91cDIu
Z2V0KCkpLCA9PSwgIlRlc3RHcm91cDIiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dl
Yl92aWV3X2dyb3VwX2dldF9uYW1lKHZpZXdHcm91cDIuZ2V0KCkpLCAhPSwgd2Via2l0X3dlYl92
aWV3X2dyb3VwX2dldF9uYW1lKHZpZXdHcm91cDEuZ2V0KCkpKTsKLQotICAgIC8vIEV2ZXJ5IGdy
b3VwIGhhcyBpdHMgb3duIHNldHRpbmdzLgotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19n
cm91cF9nZXRfc2V0dGluZ3Modmlld0dyb3VwMS5nZXQoKSkgIT0gd2Via2l0X3dlYl92aWV3X2dy
b3VwX2dldF9zZXR0aW5ncyh2aWV3R3JvdXAyLmdldCgpKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRl
c3RXZWJWaWV3TmV3V2l0aEdyb3VwKFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAg
R1JlZlB0cjxXZWJLaXRXZWJWaWV3R3JvdXA+IHZpZXdHcm91cDEgPSBhZG9wdEdSZWYod2Via2l0
X3dlYl92aWV3X2dyb3VwX25ldygiVGVzdEdyb3VwMSIpKTsKLSAgICB0ZXN0LT5hc3NlcnRPYmpl
Y3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHZpZXdHcm91cDEuZ2V0KCkpKTsK
LSAgICBHUmVmUHRyPFdlYktpdFdlYlZpZXc+IHdlYlZpZXcxID0gV0VCS0lUX1dFQl9WSUVXKHdl
YmtpdF93ZWJfdmlld19uZXdfd2l0aF9ncm91cCh2aWV3R3JvdXAxLmdldCgpKSk7Ci0gICAgZ19h
c3NlcnQod2Via2l0X3dlYl92aWV3X2dldF9ncm91cCh3ZWJWaWV3MS5nZXQoKSkgPT0gdmlld0dy
b3VwMS5nZXQoKSk7Ci0KLSAgICBHUmVmUHRyPFdlYktpdFdlYlZpZXc+IHdlYlZpZXcyID0gV0VC
S0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19hc3NlcnQod2Via2l0
X3dlYl92aWV3X2dldF9ncm91cCh3ZWJWaWV3Mi5nZXQoKSkgIT0gdmlld0dyb3VwMS5nZXQoKSk7
Ci0KLSAgICAvLyBTZXR0aW5ncyBzaG91bGQgYmUgZGlmZmVyZW50IGZvciB2aWV3cyBpbiBkaWZm
ZXJlbnQgZ3JvdXBzLgotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mo
d2ViVmlldzEuZ2V0KCkpICE9IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmlldzIu
Z2V0KCkpKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdHcm91cFNldHRpbmdzKFRlc3Qq
IHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3R3JvdXA+
IHZpZXdHcm91cDEgPSBhZG9wdEdSZWYod2Via2l0X3dlYl92aWV3X2dyb3VwX25ldygiVGVzdEdy
b3VwMSIpKTsKLSAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVz
KEdfT0JKRUNUKHZpZXdHcm91cDEuZ2V0KCkpKTsKLSAgICBHUmVmUHRyPFdlYktpdFNldHRpbmdz
PiBuZXdTZXR0aW5ncyA9IGFkb3B0R1JlZih3ZWJraXRfc2V0dGluZ3NfbmV3X3dpdGhfc2V0dGlu
Z3MoImVuYWJsZS1qYXZhc2NyaXB0IiwgRkFMU0UsIE5VTEwpKTsKLSAgICB0ZXN0LT5hc3NlcnRP
YmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKG5ld1NldHRpbmdzLmdldCgp
KSk7Ci0gICAgd2Via2l0X3dlYl92aWV3X2dyb3VwX3NldF9zZXR0aW5ncyh2aWV3R3JvdXAxLmdl
dCgpLCBuZXdTZXR0aW5ncy5nZXQoKSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dy
b3VwX2dldF9zZXR0aW5ncyh2aWV3R3JvdXAxLmdldCgpKSA9PSBuZXdTZXR0aW5ncy5nZXQoKSk7
Ci0KLSAgICBHUmVmUHRyPFdlYktpdFdlYlZpZXc+IHdlYlZpZXcxID0gV0VCS0lUX1dFQl9WSUVX
KHdlYmtpdF93ZWJfdmlld19uZXdfd2l0aF9ncm91cCh2aWV3R3JvdXAxLmdldCgpKSk7Ci0gICAg
R1JlZlB0cjxXZWJLaXRXZWJWaWV3PiB3ZWJWaWV3MiA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRf
d2ViX3ZpZXdfbmV3KCkpOwotICAgIFdlYktpdFNldHRpbmdzKiB3ZWJWaWV3MVNldHRpbmdzID0g
d2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3MS5nZXQoKSk7Ci0gICAgV2ViS2l0
U2V0dGluZ3MqIHdlYlZpZXcyU2V0dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdz
KHdlYlZpZXcyLmdldCgpKTsKLSAgICBnX2Fzc2VydCh3ZWJWaWV3MVNldHRpbmdzICE9IHdlYlZp
ZXcyU2V0dGluZ3MpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2ph
dmFzY3JpcHQod2ViVmlldzFTZXR0aW5ncykgIT0gd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVf
amF2YXNjcmlwdCh3ZWJWaWV3MlNldHRpbmdzKSk7Ci0KLSAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0
X3NldHRpbmdzKHdlYlZpZXcxLmdldCgpLCB3ZWJWaWV3MlNldHRpbmdzKTsKLSAgICBnX2Fzc2Vy
dCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdlYlZpZXcxLmdldCgpKSA9PSB3ZWJWaWV3
MlNldHRpbmdzKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ3JvdXBfZ2V0X3NldHRp
bmdzKHdlYmtpdF93ZWJfdmlld19nZXRfZ3JvdXAod2ViVmlldzEuZ2V0KCkpKSA9PSB3ZWJWaWV3
MlNldHRpbmdzKTsKLX0KLQotc3RhdGljIGJvb2wgaXNTdHlsZVNoZWV0SW5qZWN0ZWRGb3JVUkxB
dFBhdGgoV2ViVmlld1Rlc3QqIHRlc3QsIGNvbnN0IGNoYXIqIHBhdGgpCi17Ci0gICAgdGVzdC0+
bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKHBhdGgpLmRhdGEoKSk7Ci0gICAgdGVzdC0+
d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7Ci0g
ICAgV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCogamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkph
dmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZChrU3R5bGVTaGVldFRlc3RTY3JpcHQsICZlcnJv
ci5vdXRQdHIoKSk7Ci0gICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAgZ19hc3Nl
cnQoIWVycm9yLmdldCgpKTsKLQotICAgIEdPd25QdHI8Y2hhcj4gcmVzdWx0U3RyaW5nKFdlYlZp
ZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKLSAg
ICByZXR1cm4gIWdfc3RyY21wMChyZXN1bHRTdHJpbmcuZ2V0KCksIGtTdHlsZVNoZWV0VGVzdFNj
cmlwdFJlc3VsdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGZpbGxVUkxMaXN0RnJvbVBhdGhzKGNoYXIq
KiBsaXN0LCBjb25zdCBjaGFyKiBwYXRoLCAuLi4pCi17Ci0gICAgdmFfbGlzdCBhcmd1bWVudExp
c3Q7Ci0gICAgdmFfc3RhcnQoYXJndW1lbnRMaXN0LCBwYXRoKTsKLQotICAgIGludCBpID0gMDsK
LSAgICB3aGlsZSAocGF0aCkgewotICAgICAgICAvLyBGSVhNRTogV2UgbXVzdCB1c2UgYSB3aWxk
Y2FyZCBmb3IgdGhlIGhvc3QgaGVyZSB1bnRpbCBodHRwOi8vd2tidWcuY29tLzExMjQ3NiBpcyBm
aXhlZC4KLSAgICAgICAgLy8gVW50aWwgdGhhdCB0aW1lIHBhdHRlcm5zIHdpdGggcG9ydCBudW1i
ZXJzIGluIHRoZW0gd2lsbCBub3QgcHJvcGVybHkgbWF0Y2ggVVJMcyB3aXRoIHBvcnQgbnVtYmVy
cy4KLSAgICAgICAgbGlzdFtpKytdID0gZ19zdHJkdXBfcHJpbnRmKCJodHRwOi8vKi8lcyoiLCBw
YXRoKTsKLSAgICAgICAgcGF0aCA9IHZhX2FyZyhhcmd1bWVudExpc3QsIGNvbnN0IGNoYXIqKTsK
LSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHJlbW92ZU9sZEluamVjdGVkU3R5bGVTaGVldHNBbmRS
ZXNldExpc3RzKFdlYktpdFdlYlZpZXdHcm91cCogZ3JvdXAsIGNoYXIqKiB3aGl0ZWxpc3QsIGNo
YXIqKiBibGFja2xpc3QpCi17Ci0gICAgd2Via2l0X3dlYl92aWV3X2dyb3VwX3JlbW92ZV9hbGxf
dXNlcl9zdHlsZV9zaGVldHMoZ3JvdXApOwotCi0gICAgd2hpbGUgKCp3aGl0ZWxpc3QpIHsKLSAg
ICAgICAgZ19mcmVlKCp3aGl0ZWxpc3QpOwotICAgICAgICAqd2hpdGVsaXN0ID0gMDsKLSAgICAg
ICAgd2hpdGVsaXN0Kys7Ci0gICAgfQotCi0gICAgd2hpbGUgKCpibGFja2xpc3QpIHsKLSAgICAg
ICAgZ19mcmVlKCpibGFja2xpc3QpOwotICAgICAgICAqYmxhY2tsaXN0ID0gMDsKLSAgICAgICAg
YmxhY2tsaXN0Kys7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0dyb3VwSW5q
ZWN0ZWRTdHlsZVNoZWV0KFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAg
IFdlYktpdFdlYlZpZXdHcm91cCogZ3JvdXAgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2dyb3VwKHRl
c3QtPm1fd2ViVmlldyk7Ci0gICAgY2hhciogd2hpdGVsaXN0WzNdID0geyAwLCAwLCAwIH07Ci0g
ICAgY2hhciogYmxhY2tsaXN0WzNdID0geyAwLCAwLCAwIH07Ci0KLSAgICByZW1vdmVPbGRJbmpl
Y3RlZFN0eWxlU2hlZXRzQW5kUmVzZXRMaXN0cyhncm91cCwgd2hpdGVsaXN0LCBibGFja2xpc3Qp
OwotCi0gICAgLy8gV2l0aG91dCBhIHdoaXRlbGlzdCBvciBhIGJsYWNrbGlzdCBhbGwgVVJMcyBz
aG91bGQgaGF2ZSB0aGUgaW5qZWN0ZWQgc3R5bGUgc2hlZXQuCi0gICAgc3RhdGljIGNvbnN0IGNo
YXIqIHJhbmRvbVBhdGggPSAic29tZXJhbmRvbXBhdGgiOwotICAgIGdfYXNzZXJ0KCFpc1N0eWxl
U2hlZXRJbmplY3RlZEZvclVSTEF0UGF0aCh0ZXN0LCByYW5kb21QYXRoKSk7Ci0gICAgd2Via2l0
X3dlYl92aWV3X2dyb3VwX2FkZF91c2VyX3N0eWxlX3NoZWV0KGdyb3VwLCBrSW5qZWN0ZWRTdHls
ZVNoZWV0LCAwLCAwLCAwLCBXRUJLSVRfSU5KRUNURURfQ09OVEVOVF9GUkFNRVNfQUxMKTsKLSAg
ICBnX2Fzc2VydChpc1N0eWxlU2hlZXRJbmplY3RlZEZvclVSTEF0UGF0aCh0ZXN0LCByYW5kb21Q
YXRoKSk7Ci0KLSAgICByZW1vdmVPbGRJbmplY3RlZFN0eWxlU2hlZXRzQW5kUmVzZXRMaXN0cyhn
cm91cCwgd2hpdGVsaXN0LCBibGFja2xpc3QpOwotCi0gICAgZmlsbFVSTExpc3RGcm9tUGF0aHMo
YmxhY2tsaXN0LCByYW5kb21QYXRoLCAwKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfZ3JvdXBfYWRk
X3VzZXJfc3R5bGVfc2hlZXQoZ3JvdXAsIGtJbmplY3RlZFN0eWxlU2hlZXQsIDAsIDAsIGJsYWNr
bGlzdCwgV0VCS0lUX0lOSkVDVEVEX0NPTlRFTlRfRlJBTUVTX0FMTCk7Ci0gICAgZ19hc3NlcnQo
IWlzU3R5bGVTaGVldEluamVjdGVkRm9yVVJMQXRQYXRoKHRlc3QsIHJhbmRvbVBhdGgpKTsKLSAg
ICBnX2Fzc2VydChpc1N0eWxlU2hlZXRJbmplY3RlZEZvclVSTEF0UGF0aCh0ZXN0LCAic29tZW90
aGVycmFuZG9tcGF0aCIpKTsKLQotICAgIHJlbW92ZU9sZEluamVjdGVkU3R5bGVTaGVldHNBbmRS
ZXNldExpc3RzKGdyb3VwLCB3aGl0ZWxpc3QsIGJsYWNrbGlzdCk7Ci0KLSAgICBzdGF0aWMgY29u
c3QgY2hhciogaW5UaGVXaGl0ZUxpc3QgPSAiaW50aGV3aGl0ZWxpc3QiOwotICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBub3RJbldoaXRlbGlzdCA9ICJub3RpbnRoZXdoaXRlbGlzdCI7Ci0gICAgc3Rh
dGljIGNvbnN0IGNoYXIqIGluVGhlV2hpdGVMaXN0QW5kQmxhY2tMaXN0ID0gImludGhld2hpdGVs
aXN0YW5kYmxhY2tsaXN0IjsKLQotICAgIGZpbGxVUkxMaXN0RnJvbVBhdGhzKHdoaXRlbGlzdCwg
aW5UaGVXaGl0ZUxpc3QsIGluVGhlV2hpdGVMaXN0QW5kQmxhY2tMaXN0LCAwKTsKLSAgICBmaWxs
VVJMTGlzdEZyb21QYXRocyhibGFja2xpc3QsIGluVGhlV2hpdGVMaXN0QW5kQmxhY2tMaXN0LCAw
KTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfZ3JvdXBfYWRkX3VzZXJfc3R5bGVfc2hlZXQoZ3JvdXAs
IGtJbmplY3RlZFN0eWxlU2hlZXQsIDAsIHdoaXRlbGlzdCwgYmxhY2tsaXN0LCBXRUJLSVRfSU5K
RUNURURfQ09OVEVOVF9GUkFNRVNfQUxMKTsKLSAgICBnX2Fzc2VydChpc1N0eWxlU2hlZXRJbmpl
Y3RlZEZvclVSTEF0UGF0aCh0ZXN0LCBpblRoZVdoaXRlTGlzdCkpOwotICAgIGdfYXNzZXJ0KCFp
c1N0eWxlU2hlZXRJbmplY3RlZEZvclVSTEF0UGF0aCh0ZXN0LCBpblRoZVdoaXRlTGlzdEFuZEJs
YWNrTGlzdCkpOwotICAgIGdfYXNzZXJ0KCFpc1N0eWxlU2hlZXRJbmplY3RlZEZvclVSTEF0UGF0
aCh0ZXN0LCBub3RJbldoaXRlbGlzdCkpOwotCi0gICAgLy8gSXQncyBpbXBvcnRhbnQgdG8gY2xl
YW4gdXAgdGhlIGVudmlyb25tZW50IGJlZm9yZSBvdGhlciB0ZXN0cy4KLSAgICByZW1vdmVPbGRJ
bmplY3RlZFN0eWxlU2hlZXRzQW5kUmVzZXRMaXN0cyhncm91cCwgd2hpdGVsaXN0LCBibGFja2xp
c3QpOwotfQotCi1zdGF0aWMgdm9pZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBzZXJ2ZXIs
IFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiwgU291
cENsaWVudENvbnRleHQqLCBncG9pbnRlcikKLXsKLSAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1
cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7Ci0gICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5k
KG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywga1N0eWxlU2hlZXRI
VE1MLCBzdHJsZW4oa1N0eWxlU2hlZXRIVE1MKSk7Ci0gICAgc291cF9tZXNzYWdlX2JvZHlfY29t
cGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7Ci19Ci0KLXZvaWQgYmVmb3JlQWxsKCkKLXsK
LSAgICBrU2VydmVyID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIoKTsKLSAgICBrU2VydmVyLT5ydW4o
c2VydmVyQ2FsbGJhY2spOwotCi0gICAgVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3R3JvdXAiLCAi
ZGVmYXVsdC1ncm91cCIsIHRlc3RXZWJWaWV3R3JvdXBEZWZhdWx0KTsKLSAgICBUZXN0OjphZGQo
IldlYktpdFdlYlZpZXdHcm91cCIsICJuZXctZ3JvdXAiLCB0ZXN0V2ViVmlld0dyb3VwTmV3R3Jv
dXApOwotICAgIFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJuZXctd2l0aC1ncm91cCIsIHRl
c3RXZWJWaWV3TmV3V2l0aEdyb3VwKTsKLSAgICBUZXN0OjphZGQoIldlYktpdFdlYlZpZXdHcm91
cCIsICJzZXR0aW5ncyIsIHRlc3RXZWJWaWV3R3JvdXBTZXR0aW5ncyk7Ci0gICAgV2ViVmlld1Rl
c3Q6OmFkZCgiV2ViS2l0V2ViVmlld0dyb3VwIiwgImluamVjdGVkLXN0eWxlLXNoZWV0IiwgdGVz
dFdlYlZpZXdHcm91cEluamVjdGVkU3R5bGVTaGVldCk7Ci19Ci0KLXZvaWQgYWZ0ZXJBbGwoKQot
ewotICAgIGRlbGV0ZSBrU2VydmVyOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYlZpZXdFZGl0b3IuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYlZpZXdFZGl0b3IuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzMxNWRiLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJWaWV3RWRpdG9yLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDIwMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxp
YSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIsMSBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKLSNp
bmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Ci0KLWNsYXNzIEVkaXRvclRlc3Q6IHB1Ymxp
YyBXZWJWaWV3VGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShFZGl0
b3JUZXN0KTsKLQotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQga0NsaXBib2FyZFdhaXRU
aW1lb3V0ID0gNTA7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBrQ2xpcGJvYXJkV2Fp
dE1heFRyaWVzID0gMjsKLQotICAgIEVkaXRvclRlc3QoKQotICAgICAgICA6IG1fY2xpcGJvYXJk
KGd0a19jbGlwYm9hcmRfZ2V0KEdES19TRUxFQ1RJT05fQ0xJUEJPQVJEKSkKLSAgICAgICAgLCBt
X2NhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChmYWxzZSkKLSAgICAgICAgLCBtX3RyaWVzQ291bnQo
MCkKLSAgICB7Ci0gICAgICAgIGd0a19jbGlwYm9hcmRfY2xlYXIobV9jbGlwYm9hcmQpOwotICAg
IH0KLQotICAgIHN0YXRpYyB2b2lkIGNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZFJlYWR5Q2FsbGJh
Y2soR09iamVjdCosIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBFZGl0b3JUZXN0KiB0ZXN0KQotICAg
IHsKLSAgICAgICAgR093blB0cjxHRXJyb3I+IGVycm9yOwotICAgICAgICB0ZXN0LT5tX2NhbkV4
ZWN1dGVFZGl0aW5nQ29tbWFuZCA9IHdlYmtpdF93ZWJfdmlld19jYW5fZXhlY3V0ZV9lZGl0aW5n
X2NvbW1hbmRfZmluaXNoKHRlc3QtPm1fd2ViVmlldywgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkp
OwotICAgICAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOwotICAgICAgICBnX21haW5fbG9vcF9x
dWl0KHRlc3QtPm1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIGJvb2wgY2FuRXhlY3V0ZUVkaXRp
bmdDb21tYW5kKGNvbnN0IGNoYXIqIGNvbW1hbmQpCi0gICAgewotICAgICAgICBtX2NhbkV4ZWN1
dGVFZGl0aW5nQ29tbWFuZCA9IGZhbHNlOwotICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfY2FuX2V4
ZWN1dGVfZWRpdGluZ19jb21tYW5kKG1fd2ViVmlldywgY29tbWFuZCwgMCwgcmVpbnRlcnByZXRf
Y2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihjYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmRSZWFkeUNh
bGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAg
ICAgICAgcmV0dXJuIG1fY2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kOwotICAgIH0KLQotICAgIHN0
YXRpYyBnYm9vbGVhbiB3YWl0Rm9yQ2xpcGJvYXJkVGV4dChFZGl0b3JUZXN0KiB0ZXN0KQotICAg
IHsKLSAgICAgICAgdGVzdC0+bV90cmllc0NvdW50Kys7Ci0gICAgICAgIGlmIChndGtfY2xpcGJv
YXJkX3dhaXRfaXNfdGV4dF9hdmFpbGFibGUodGVzdC0+bV9jbGlwYm9hcmQpIHx8IHRlc3QtPm1f
dHJpZXNDb3VudCA+IGtDbGlwYm9hcmRXYWl0TWF4VHJpZXMpIHsKLSAgICAgICAgICAgIGdfbWFp
bl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7Ci0gICAgICAgICAgICByZXR1cm4gRkFMU0U7
Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gVFJVRTsKLSAgICB9Ci0KLSAgICB2b2lkIGNv
cHlDbGlwYm9hcmQoKQotICAgIHsKLSAgICAgICAgd2Via2l0X3dlYl92aWV3X2V4ZWN1dGVfZWRp
dGluZ19jb21tYW5kKG1fd2ViVmlldywgV0VCS0lUX0VESVRJTkdfQ09NTUFORF9DT1BZKTsKLSAg
ICAgICAgLy8gVGhlcmUncyBubyB3YXkgdG8ga25vdyB3aGVuIHRoZSBzZWxlY3Rpb24gaGFzIGJl
ZW4gY29waWVkIHRvCi0gICAgICAgIC8vIHRoZSBjbGlwYm9hcmQsIHNvIHVzZSBhIHRpbWVvdXQg
c291cmNlIHRvIHF1ZXJ5IHRoZSBjbGlwYm9hcmQuCi0gICAgICAgIG1fdHJpZXNDb3VudCA9IDA7
Ci0gICAgICAgIGdfdGltZW91dF9hZGQoa0NsaXBib2FyZFdhaXRUaW1lb3V0LCByZWludGVycHJl
dF9jYXN0PEdTb3VyY2VGdW5jPih3YWl0Rm9yQ2xpcGJvYXJkVGV4dCksIHRoaXMpOwotICAgICAg
ICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgR3RrQ2xpcGJvYXJk
KiBtX2NsaXBib2FyZDsKLSAgICBib29sIG1fY2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kOwotICAg
IHNpemVfdCBtX3RyaWVzQ291bnQ7Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0VkaXRv
ckN1dENvcHlQYXN0ZU5vbkVkaXRhYmxlKEVkaXRvclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIp
Ci17Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHNlbGVjdGVkU3BhbkhUTUwgPSAiPGh0bWw+PGJv
ZHkgY29udGVudEVkaXRhYmxlPVwiZmFsc2VcIj4iCi0gICAgICAgICI8c3BhbiBpZD1cIm1haW5z
cGFuXCI+QWxsIHdvcmsgYW5kIG5vIHBsYXkgPHNwYW4gaWQ9XCJzdWJzcGFuXCI+bWFrZSBKYWNr
IGEgZHVsbDwvc3Bhbj4gYm95Ljwvc3Bhbj4iCi0gICAgICAgICI8c2NyaXB0PmRvY3VtZW50Lmdl
dFNlbGVjdGlvbigpLmNvbGxhcHNlKCk7XG4iCi0gICAgICAgICJkb2N1bWVudC5nZXRTZWxlY3Rp
b24oKS5zZWxlY3RBbGxDaGlsZHJlbihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3Vic3Bhbicp
KTtcbiIKLSAgICAgICAgIjwvc2NyaXB0PjwvYm9keT48L2h0bWw+IjsKLQotICAgIC8vIE5vdGhp
bmcgbG9hZGVkIHlldC4KLSAgICBnX2Fzc2VydCghdGVzdC0+Y2FuRXhlY3V0ZUVkaXRpbmdDb21t
YW5kKFdFQktJVF9FRElUSU5HX0NPTU1BTkRfQ1VUKSk7Ci0gICAgZ19hc3NlcnQoIXRlc3QtPmNh
bkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElOR19DT01NQU5EX0NPUFkpKTsKLSAg
ICBnX2Fzc2VydCghdGVzdC0+Y2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kKFdFQktJVF9FRElUSU5H
X0NPTU1BTkRfUEFTVEUpKTsKLQotICAgIHRlc3QtPmxvYWRIdG1sKHNlbGVjdGVkU3BhbkhUTUws
IDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3NlcnQo
dGVzdC0+Y2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kKFdFQktJVF9FRElUSU5HX0NPTU1BTkRfQ09Q
WSkpOwotICAgIC8vIEl0J3Mgbm90IHBvc3NpYmxlIHRvIGN1dCBhbmQgcGFzdGUgd2hlbiBjb250
ZW50IGlzIG5vdCBlZGl0YWJsZQotICAgIC8vIGV2ZW4gaWYgdGhlcmUncyBhIHNlbGVjdGlvbi4K
LSAgICBnX2Fzc2VydCghdGVzdC0+Y2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kKFdFQktJVF9FRElU
SU5HX0NPTU1BTkRfQ1VUKSk7Ci0gICAgZ19hc3NlcnQoIXRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5n
Q29tbWFuZChXRUJLSVRfRURJVElOR19DT01NQU5EX1BBU1RFKSk7Ci0KLSAgICB0ZXN0LT5jb3B5
Q2xpcGJvYXJkKCk7Ci0gICAgR093blB0cjxjaGFyPiBjbGlwYm9hcmRUZXh0KGd0a19jbGlwYm9h
cmRfd2FpdF9mb3JfdGV4dCh0ZXN0LT5tX2NsaXBib2FyZCkpOwotICAgIGdfYXNzZXJ0X2NtcHN0
cihjbGlwYm9hcmRUZXh0LmdldCgpLCA9PSwgIm1ha2UgSmFjayBhIGR1bGwiKTsKLX0KLQotc3Rh
dGljIHZvaWQgdGVzdFdlYlZpZXdFZGl0b3JDdXRDb3B5UGFzdGVFZGl0YWJsZShFZGl0b3JUZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzZWxlY3Rl
ZFNwYW5IVE1MID0gIjxodG1sPjxib2R5IGNvbnRlbnRFZGl0YWJsZT1cInRydWVcIj4iCi0gICAg
ICAgICI8c3BhbiBpZD1cIm1haW5zcGFuXCI+QWxsIHdvcmsgYW5kIG5vIHBsYXkgPHNwYW4+bWFr
ZSBKYWNrIGEgZHVsbDwvc3Bhbj4gYm95Ljwvc3Bhbj4iCi0gICAgICAgICI8c2NyaXB0PmRvY3Vt
ZW50LmdldFNlbGVjdGlvbigpLmNvbGxhcHNlKCk7XG4iCi0gICAgICAgICJkb2N1bWVudC5nZXRT
ZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJlbihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFp
bnNwYW4nKSk7XG4iCi0gICAgICAgICI8L3NjcmlwdD48L2JvZHk+PC9odG1sPiI7Ci0KLSAgICAv
LyBOb3RoaW5nIGxvYWRlZCB5ZXQuCi0gICAgZ19hc3NlcnQoIXRlc3QtPmNhbkV4ZWN1dGVFZGl0
aW5nQ29tbWFuZChXRUJLSVRfRURJVElOR19DT01NQU5EX0NVVCkpOwotICAgIGdfYXNzZXJ0KCF0
ZXN0LT5jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQoV0VCS0lUX0VESVRJTkdfQ09NTUFORF9DT1BZ
KSk7Ci0gICAgZ19hc3NlcnQoIXRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRf
RURJVElOR19DT01NQU5EX1BBU1RFKSk7Ci0KLSAgICB0ZXN0LT5sb2FkSHRtbChzZWxlY3RlZFNw
YW5IVE1MLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIC8v
IFRoZXJlJ3MgYSBzZWxlY3Rpb24uCi0gICAgZ19hc3NlcnQodGVzdC0+Y2FuRXhlY3V0ZUVkaXRp
bmdDb21tYW5kKFdFQktJVF9FRElUSU5HX0NPTU1BTkRfQ1VUKSk7Ci0gICAgZ19hc3NlcnQodGVz
dC0+Y2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kKFdFQktJVF9FRElUSU5HX0NPTU1BTkRfQ09QWSkp
OwotICAgIGdfYXNzZXJ0KHRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJ
VElOR19DT01NQU5EX1BBU1RFKSk7Ci0KLSAgICB0ZXN0LT5jb3B5Q2xpcGJvYXJkKCk7Ci0gICAg
R093blB0cjxjaGFyPiBjbGlwYm9hcmRUZXh0KGd0a19jbGlwYm9hcmRfd2FpdF9mb3JfdGV4dCh0
ZXN0LT5tX2NsaXBib2FyZCkpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihjbGlwYm9hcmRUZXh0Lmdl
dCgpLCA9PSwgIkFsbCB3b3JrIGFuZCBubyBwbGF5IG1ha2UgSmFjayBhIGR1bGwgYm95LiIpOwot
fQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0VkaXRvclNlbGVjdEFsbE5vbkVkaXRhYmxlKEVk
aXRvclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIq
IHNlbGVjdGVkU3BhbkhUTUwgPSAiPGh0bWw+PGJvZHkgY29udGVudEVkaXRhYmxlPVwiZmFsc2Vc
Ij4iCi0gICAgICAgICI8c3BhbiBpZD1cIm1haW5zcGFuXCI+QWxsIHdvcmsgYW5kIG5vIHBsYXkg
PHNwYW4gaWQ9XCJzdWJzcGFuXCI+bWFrZSBKYWNrIGEgZHVsbDwvc3Bhbj4gYm95Ljwvc3Bhbj4i
Ci0gICAgICAgICI8c2NyaXB0PmRvY3VtZW50LmdldFNlbGVjdGlvbigpLmNvbGxhcHNlKCk7XG4i
Ci0gICAgICAgICJkb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJlbihkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnc3Vic3BhbicpKTtcbiIKLSAgICAgICAgIjwvc2NyaXB0Pjwv
Ym9keT48L2h0bWw+IjsKLQotICAgIGdfYXNzZXJ0KHRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29t
bWFuZChXRUJLSVRfRURJVElOR19DT01NQU5EX1NFTEVDVF9BTEwpKTsKLQotICAgIHRlc3QtPmxv
YWRIdG1sKHNlbGVjdGVkU3BhbkhUTUwsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5p
c2hlZCgpOwotCi0gICAgZ19hc3NlcnQodGVzdC0+Y2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kKFdF
QktJVF9FRElUSU5HX0NPTU1BTkRfU0VMRUNUX0FMTCkpOwotCi0gICAgdGVzdC0+Y29weUNsaXBi
b2FyZCgpOwotICAgIEdPd25QdHI8Y2hhcj4gY2xpcGJvYXJkVGV4dChndGtfY2xpcGJvYXJkX3dh
aXRfZm9yX3RleHQodGVzdC0+bV9jbGlwYm9hcmQpKTsKLQotICAgIC8vIEluaXRpYWxseSBvbmx5
IHRoZSBzdWJzcGFuIGlzIHNlbGVjdGVkLgotICAgIGdfYXNzZXJ0X2NtcHN0cihjbGlwYm9hcmRU
ZXh0LmdldCgpLCA9PSwgIm1ha2UgSmFjayBhIGR1bGwiKTsKLQotICAgIHdlYmtpdF93ZWJfdmll
d19leGVjdXRlX2VkaXRpbmdfY29tbWFuZCh0ZXN0LT5tX3dlYlZpZXcsIFdFQktJVF9FRElUSU5H
X0NPTU1BTkRfU0VMRUNUX0FMTCk7Ci0gICAgdGVzdC0+Y29weUNsaXBib2FyZCgpOwotICAgIGNs
aXBib2FyZFRleHQuc2V0KGd0a19jbGlwYm9hcmRfd2FpdF9mb3JfdGV4dCh0ZXN0LT5tX2NsaXBi
b2FyZCkpOwotCi0gICAgLy8gVGhlIG1haW5zcGFuIHNob3VsZCBiZSBzZWxlY3RlZCBhZnRlciBj
YWxsaW5nIFNFTEVDVF9BTEwuCi0gICAgZ19hc3NlcnRfY21wc3RyKGNsaXBib2FyZFRleHQuZ2V0
KCksID09LCAiQWxsIHdvcmsgYW5kIG5vIHBsYXkgbWFrZSBKYWNrIGEgZHVsbCBib3kuIik7Ci19
Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3RWRpdG9yU2VsZWN0QWxsRWRpdGFibGUoRWRpdG9y
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogc2Vs
ZWN0ZWRTcGFuSFRNTCA9ICI8aHRtbD48Ym9keSBjb250ZW50RWRpdGFibGU9XCJ0cnVlXCI+Igot
ICAgICAgICAiPHNwYW4gaWQ9XCJtYWluc3BhblwiPkFsbCB3b3JrIGFuZCBubyBwbGF5IDxzcGFu
IGlkPVwic3Vic3BhblwiPm1ha2UgSmFjayBhIGR1bGw8L3NwYW4+IGJveS48L3NwYW4+IgotICAg
ICAgICAiPHNjcmlwdD5kb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5jb2xsYXBzZSgpO1xuIgotICAg
ICAgICAiZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0QWxsQ2hpbGRyZW4oZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ3N1YnNwYW4nKSk7XG4iCi0gICAgICAgICI8L3NjcmlwdD48L2JvZHk+
PC9odG1sPiI7Ci0KLSAgICBnX2Fzc2VydCh0ZXN0LT5jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQo
V0VCS0lUX0VESVRJTkdfQ09NTUFORF9TRUxFQ1RfQUxMKSk7Ci0KLSAgICB0ZXN0LT5sb2FkSHRt
bChzZWxlY3RlZFNwYW5IVE1MLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQo
KTsKLQotICAgIGdfYXNzZXJ0KHRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRf
RURJVElOR19DT01NQU5EX1NFTEVDVF9BTEwpKTsKLQotICAgIHRlc3QtPmNvcHlDbGlwYm9hcmQo
KTsKLSAgICBHT3duUHRyPGNoYXI+IGNsaXBib2FyZFRleHQoZ3RrX2NsaXBib2FyZF93YWl0X2Zv
cl90ZXh0KHRlc3QtPm1fY2xpcGJvYXJkKSk7Ci0KLSAgICAvLyBJbml0aWFsbHkgb25seSB0aGUg
c3Vic3BhbiBpcyBzZWxlY3RlZC4KLSAgICBnX2Fzc2VydF9jbXBzdHIoY2xpcGJvYXJkVGV4dC5n
ZXQoKSwgPT0sICJtYWtlIEphY2sgYSBkdWxsIik7Ci0KLSAgICB3ZWJraXRfd2ViX3ZpZXdfZXhl
Y3V0ZV9lZGl0aW5nX2NvbW1hbmQodGVzdC0+bV93ZWJWaWV3LCBXRUJLSVRfRURJVElOR19DT01N
QU5EX1NFTEVDVF9BTEwpOwotICAgIHRlc3QtPmNvcHlDbGlwYm9hcmQoKTsKLSAgICBjbGlwYm9h
cmRUZXh0LnNldChndGtfY2xpcGJvYXJkX3dhaXRfZm9yX3RleHQodGVzdC0+bV9jbGlwYm9hcmQp
KTsKLQotICAgIC8vIFRoZSBtYWluc3BhbiBzaG91bGQgYmUgc2VsZWN0ZWQgYWZ0ZXIgY2FsbGlu
ZyBTRUxFQ1RfQUxMLgotICAgIGdfYXNzZXJ0X2NtcHN0cihjbGlwYm9hcmRUZXh0LmdldCgpLCA9
PSwgIkFsbCB3b3JrIGFuZCBubyBwbGF5IG1ha2UgSmFjayBhIGR1bGwgYm95LiIpOwotfQotCi12
b2lkIGJlZm9yZUFsbCgpCi17Ci0gICAgRWRpdG9yVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3Iiwg
ImN1dC1jb3B5LXBhc3RlL25vbi1lZGl0YWJsZSIsIHRlc3RXZWJWaWV3RWRpdG9yQ3V0Q29weVBh
c3RlTm9uRWRpdGFibGUpOwotICAgIEVkaXRvclRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJj
dXQtY29weS1wYXN0ZS9lZGl0YWJsZSIsIHRlc3RXZWJWaWV3RWRpdG9yQ3V0Q29weVBhc3RlRWRp
dGFibGUpOwotICAgIEVkaXRvclRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJzZWxlY3QtYWxs
L25vbi1lZGl0YWJsZSIsIHRlc3RXZWJWaWV3RWRpdG9yU2VsZWN0QWxsTm9uRWRpdGFibGUpOwot
ICAgIEVkaXRvclRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJzZWxlY3QtYWxsL2VkaXRhYmxl
IiwgdGVzdFdlYlZpZXdFZGl0b3JTZWxlY3RBbGxFZGl0YWJsZSk7Ci19Ci0KLXZvaWQgYWZ0ZXJB
bGwoKQotewotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvV2ViRXh0ZW5zaW9uVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9XZWJFeHRlbnNpb25UZXN0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDIxMmUyYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9XZWJFeHRlbnNpb25UZXN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI2NyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dFJlZi5oPgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8Z2lvL2dpby5o
PgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHdl
YmtpdDIvd2Via2l0LXdlYi1leHRlbnNpb24uaD4KLSNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KLSNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNs
dWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0
ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotc3RhdGljIGNvbnN0IGNoYXIg
aW50cm9zcGVjdGlvblhNTFtdID0KLSAgICAiPG5vZGU+IgotICAgICIgPGludGVyZmFjZSBuYW1l
PSdvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0Jz4iCi0gICAgIiAgPG1ldGhvZCBuYW1l
PSdHZXRUaXRsZSc+IgotICAgICIgICA8YXJnIHR5cGU9J3QnIG5hbWU9J3BhZ2VJRCcgZGlyZWN0
aW9uPSdpbicvPiIKLSAgICAiICAgPGFyZyB0eXBlPSdzJyBuYW1lPSd0aXRsZScgZGlyZWN0aW9u
PSdvdXQnLz4iCi0gICAgIiAgPC9tZXRob2Q+IgotICAgICIgIDxtZXRob2QgbmFtZT0nQWJvcnRQ
cm9jZXNzJz4iCi0gICAgIiAgPC9tZXRob2Q+IgotICAgICIgIDxtZXRob2QgbmFtZT0nUnVuSmF2
YVNjcmlwdEluSXNvbGF0ZWRXb3JsZCc+IgotICAgICIgICA8YXJnIHR5cGU9J3QnIG5hbWU9J3Bh
Z2VJRCcgZGlyZWN0aW9uPSdpbicvPiIKLSAgICAiICAgPGFyZyB0eXBlPSdzJyBuYW1lPSdzY3Jp
cHQnIGRpcmVjdGlvbj0naW4nLz4iCi0gICAgIiAgPC9tZXRob2Q+IgotICAgICIgIDxzaWduYWwg
bmFtZT0nRG9jdW1lbnRMb2FkZWQnLz4iCi0gICAgIiAgPHNpZ25hbCBuYW1lPSdVUklDaGFuZ2Vk
Jz4iCi0gICAgIiAgIDxhcmcgdHlwZT0ncycgbmFtZT0ndXJpJyBkaXJlY3Rpb249J291dCcvPiIK
LSAgICAiICA8L3NpZ25hbD4iCi0gICAgIiA8L2ludGVyZmFjZT4iCi0gICAgIjwvbm9kZT4iOwot
Ci10eXBlZGVmIGVudW0gewotICAgIERvY3VtZW50TG9hZGVkU2lnbmFsLAotICAgIFVSSUNoYW5n
ZWRTaWduYWwsCi19IERlbGF5ZWRTaWduYWxUeXBlOwotCi1zdHJ1Y3QgRGVsYXllZFNpZ25hbCB7
Ci0gICAgRGVsYXllZFNpZ25hbChEZWxheWVkU2lnbmFsVHlwZSB0eXBlKQotICAgICAgICA6IHR5
cGUodHlwZSkKLSAgICB7Ci0gICAgfQotCi0gICAgRGVsYXllZFNpZ25hbChEZWxheWVkU2lnbmFs
VHlwZSB0eXBlLCBjb25zdCBjaGFyKiB1cmkpCi0gICAgICAgIDogdHlwZSh0eXBlKQotICAgICAg
ICAsIHVyaSh1cmkpCi0gICAgewotICAgIH0KLQotICAgIERlbGF5ZWRTaWduYWxUeXBlIHR5cGU7
Ci0gICAgQ1N0cmluZyB1cmk7Ci19OwotCi1EZXF1ZTxPd25QdHI8RGVsYXllZFNpZ25hbD4+IGRl
bGF5ZWRTaWduYWxzUXVldWU7Ci0KLXN0YXRpYyB2b2lkIGVtaXREb2N1bWVudExvYWRlZChHREJ1
c0Nvbm5lY3Rpb24qIGNvbm5lY3Rpb24pCi17Ci0gICAgYm9vbCBvayA9IGdfZGJ1c19jb25uZWN0
aW9uX2VtaXRfc2lnbmFsKAotICAgICAgICBjb25uZWN0aW9uLAotICAgICAgICAwLAotICAgICAg
ICAiL29yZy93ZWJraXQvZ3RrL1dlYkV4dGVuc2lvblRlc3QiLAotICAgICAgICAib3JnLndlYmtp
dC5ndGsuV2ViRXh0ZW5zaW9uVGVzdCIsCi0gICAgICAgICJEb2N1bWVudExvYWRlZCIsCi0gICAg
ICAgIDAsCi0gICAgICAgIDApOwotICAgIGdfYXNzZXJ0KG9rKTsKLX0KLQotc3RhdGljIHZvaWQg
ZG9jdW1lbnRMb2FkZWRDYWxsYmFjayhXZWJLaXRXZWJQYWdlKiwgV2ViS2l0V2ViRXh0ZW5zaW9u
KiBleHRlbnNpb24pCi17Ci0gICAgZ3BvaW50ZXIgZGF0YSA9IGdfb2JqZWN0X2dldF9kYXRhKEdf
T0JKRUNUKGV4dGVuc2lvbiksICJkYnVzLWNvbm5lY3Rpb24iKTsKLSAgICBpZiAoZGF0YSkKLSAg
ICAgICAgZW1pdERvY3VtZW50TG9hZGVkKEdfREJVU19DT05ORUNUSU9OKGRhdGEpKTsKLSAgICBl
bHNlCi0gICAgICAgIGRlbGF5ZWRTaWduYWxzUXVldWUuYXBwZW5kKGFkb3B0UHRyKG5ldyBEZWxh
eWVkU2lnbmFsKERvY3VtZW50TG9hZGVkU2lnbmFsKSkpOwotfQotCi1zdGF0aWMgdm9pZCBlbWl0
VVJJQ2hhbmdlZChHREJ1c0Nvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIGNvbnN0IGNoYXIqIHVyaSkK
LXsKLSAgICBib29sIG9rID0gZ19kYnVzX2Nvbm5lY3Rpb25fZW1pdF9zaWduYWwoCi0gICAgICAg
IGNvbm5lY3Rpb24sCi0gICAgICAgIDAsCi0gICAgICAgICIvb3JnL3dlYmtpdC9ndGsvV2ViRXh0
ZW5zaW9uVGVzdCIsCi0gICAgICAgICJvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwK
LSAgICAgICAgIlVSSUNoYW5nZWQiLAotICAgICAgICBnX3ZhcmlhbnRfbmV3KCIocykiLCB1cmkp
LAotICAgICAgICAwKTsKLSAgICBnX2Fzc2VydChvayk7Ci19Ci0KLXN0YXRpYyB2b2lkIHVyaUNo
YW5nZWRDYWxsYmFjayhXZWJLaXRXZWJQYWdlKiB3ZWJQYWdlLCBHUGFyYW1TcGVjKiBwc3BlYywg
V2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24pCi17Ci0gICAgZ3BvaW50ZXIgZGF0YSA9IGdf
b2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKGV4dGVuc2lvbiksICJkYnVzLWNvbm5lY3Rpb24iKTsK
LSAgICBpZiAoZGF0YSkKLSAgICAgICAgZW1pdFVSSUNoYW5nZWQoR19EQlVTX0NPTk5FQ1RJT04o
ZGF0YSksIHdlYmtpdF93ZWJfcGFnZV9nZXRfdXJpKHdlYlBhZ2UpKTsKLSAgICBlbHNlCi0gICAg
ICAgIGRlbGF5ZWRTaWduYWxzUXVldWUuYXBwZW5kKGFkb3B0UHRyKG5ldyBEZWxheWVkU2lnbmFs
KFVSSUNoYW5nZWRTaWduYWwsIHdlYmtpdF93ZWJfcGFnZV9nZXRfdXJpKHdlYlBhZ2UpKSkpOwot
fQotCi1zdGF0aWMgZ2Jvb2xlYW4gc2VuZFJlcXVlc3RDYWxsYmFjayhXZWJLaXRXZWJQYWdlKiwg
V2ViS2l0VVJJUmVxdWVzdCogcmVxdWVzdCwgV2ViS2l0VVJJUmVzcG9uc2UqLCBncG9pbnRlcikK
LXsKLSAgICBjb25zdCBjaGFyKiByZXF1ZXN0VVJJID0gd2Via2l0X3VyaV9yZXF1ZXN0X2dldF91
cmkocmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQocmVxdWVzdFVSSSk7Ci0KLSAgICBpZiAoY29uc3Qg
Y2hhciogc3VmZml4ID0gZ19zdHJyc3RyKHJlcXVlc3RVUkksICIvcmVtb3ZlLXRoaXMvamF2YXNj
cmlwdC5qcyIpKSB7Ci0gICAgICAgIEdPd25QdHI8Y2hhcj4gcHJlZml4KGdfc3RybmR1cChyZXF1
ZXN0VVJJLCBzdHJsZW4ocmVxdWVzdFVSSSkgLSBzdHJsZW4oc3VmZml4KSkpOwotICAgICAgICBH
T3duUHRyPGNoYXI+IG5ld1VSSShnX3N0cmR1cF9wcmludGYoIiVzL2phdmFzY3JpcHQuanMiLCBw
cmVmaXguZ2V0KCkpKTsKLSAgICAgICAgd2Via2l0X3VyaV9yZXF1ZXN0X3NldF91cmkocmVxdWVz
dCwgbmV3VVJJLmdldCgpKTsKLSAgICB9IGVsc2UgaWYgKGdfc3RyX2hhc19zdWZmaXgocmVxdWVz
dFVSSSwgIi9hZGQtZG8tbm90LXRyYWNrLWhlYWRlciIpKSB7Ci0gICAgICAgIFNvdXBNZXNzYWdl
SGVhZGVycyogaGVhZGVycyA9IHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfaHR0cF9oZWFkZXJzKHJl
cXVlc3QpOwotICAgICAgICBnX2Fzc2VydChoZWFkZXJzKTsKLSAgICAgICAgc291cF9tZXNzYWdl
X2hlYWRlcnNfYXBwZW5kKGhlYWRlcnMsICJETlQiLCAiMSIpOwotICAgIH0gZWxzZSBpZiAoZ19z
dHJfaGFzX3N1ZmZpeChyZXF1ZXN0VVJJLCAiL2NhbmNlbC10aGlzLmpzIikpCi0gICAgICAgIHJl
dHVybiBUUlVFOwotCi0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCBwYWdlQ3Jl
YXRlZENhbGxiYWNrKFdlYktpdFdlYkV4dGVuc2lvbiogZXh0ZW5zaW9uLCBXZWJLaXRXZWJQYWdl
KiB3ZWJQYWdlLCBncG9pbnRlcikKLXsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlBhZ2UsICJk
b2N1bWVudC1sb2FkZWQiLCBHX0NBTExCQUNLKGRvY3VtZW50TG9hZGVkQ2FsbGJhY2spLCBleHRl
bnNpb24pOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViUGFnZSwgIm5vdGlmeTo6dXJpIiwgR19D
QUxMQkFDSyh1cmlDaGFuZ2VkQ2FsbGJhY2spLCBleHRlbnNpb24pOwotICAgIGdfc2lnbmFsX2Nv
bm5lY3Qod2ViUGFnZSwgInNlbmQtcmVxdWVzdCIsIEdfQ0FMTEJBQ0soc2VuZFJlcXVlc3RDYWxs
YmFjayksIDApOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBlY2hvQ2FsbGJhY2soSlNDb250ZXh0
UmVmIGpzQ29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmLCBzaXplX3QgYXJndW1lbnRD
b3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiopCi17Ci0gICAg
aWYgKGFyZ3VtZW50Q291bnQgPD0gMCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGpzQ29udGV4dCk7Ci0KLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gc3RyaW5nKEFk
b3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGpzQ29udGV4dCwgYXJndW1lbnRzWzBdLCAwKSk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWVNYWtlU3RyaW5nKGpzQ29udGV4dCwgc3RyaW5nLmdldCgpKTsKLX0K
LQotc3RhdGljIHZvaWQgd2luZG93T2JqZWN0Q2xlYXJlZChXZWJLaXRTY3JpcHRXb3JsZCogd29y
bGQsIFdlYktpdFdlYlBhZ2UqIHBhZ2UsIFdlYktpdEZyYW1lKiBmcmFtZSwgZ3BvaW50ZXIpCi17
Ci0gICAgSlNHbG9iYWxDb250ZXh0UmVmIGpzQ29udGV4dCA9IHdlYmtpdF9mcmFtZV9nZXRfamF2
YXNjcmlwdF9jb250ZXh0X2Zvcl9zY3JpcHRfd29ybGQoZnJhbWUsIHdvcmxkKTsKLSAgICBnX2Fz
c2VydChqc0NvbnRleHQpOwotICAgIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCA9IEpTQ29udGV4
dEdldEdsb2JhbE9iamVjdChqc0NvbnRleHQpOwotICAgIGdfYXNzZXJ0KGdsb2JhbE9iamVjdCk7
Ci0KLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gZnVuY3Rpb25OYW1lKEFkb3B0LCBKU1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZWNobyIpKTsKLSAgICBKU09iamVjdFJlZiBmdW5j
dGlvbiA9IEpTT2JqZWN0TWFrZUZ1bmN0aW9uV2l0aENhbGxiYWNrKGpzQ29udGV4dCwgZnVuY3Rp
b25OYW1lLmdldCgpLCBlY2hvQ2FsbGJhY2spOwotICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoanND
b250ZXh0LCBnbG9iYWxPYmplY3QsIGZ1bmN0aW9uTmFtZS5nZXQoKSwgZnVuY3Rpb24sIGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHks
IDApOwotfQotCi1zdGF0aWMgV2ViS2l0V2ViUGFnZSogZ2V0V2ViUGFnZShXZWJLaXRXZWJFeHRl
bnNpb24qIGV4dGVuc2lvbiwgdWludDY0X3QgcGFnZUlELCBHREJ1c01ldGhvZEludm9jYXRpb24q
IGludm9jYXRpb24pCi17Ci0gICAgV2ViS2l0V2ViUGFnZSogcGFnZSA9IHdlYmtpdF93ZWJfZXh0
ZW5zaW9uX2dldF9wYWdlKGV4dGVuc2lvbiwgcGFnZUlEKTsKLSAgICBpZiAoIXBhZ2UpIHsKLSAg
ICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVybl9lcnJvcigKLSAgICAgICAgICAg
IGludm9jYXRpb24sIEdfREJVU19FUlJPUiwgR19EQlVTX0VSUk9SX0lOVkFMSURfQVJHUywKLSAg
ICAgICAgICAgICJJbnZhbGlkIHBhZ2UgSUQ6ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIHBhZ2VJRCk7
Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0
X3dlYl9wYWdlX2dldF9pZChwYWdlKSwgPT0sIHBhZ2VJRCk7Ci0gICAgcmV0dXJuIHBhZ2U7Ci19
Ci0KLXN0YXRpYyB2b2lkIG1ldGhvZENhbGxDYWxsYmFjayhHREJ1c0Nvbm5lY3Rpb24qIGNvbm5l
Y3Rpb24sIGNvbnN0IGNoYXIqIHNlbmRlciwgY29uc3QgY2hhciogb2JqZWN0UGF0aCwgY29uc3Qg
Y2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogbWV0aG9kTmFtZSwgR1ZhcmlhbnQqIHBh
cmFtZXRlcnMsIEdEQnVzTWV0aG9kSW52b2NhdGlvbiogaW52b2NhdGlvbiwgZ3BvaW50ZXIgdXNl
ckRhdGEpCi17Ci0gICAgaWYgKGdfc3RyY21wMChpbnRlcmZhY2VOYW1lLCAib3JnLndlYmtpdC5n
dGsuV2ViRXh0ZW5zaW9uVGVzdCIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWdfc3Ry
Y21wMChtZXRob2ROYW1lLCAiR2V0VGl0bGUiKSkgewotICAgICAgICB1aW50NjRfdCBwYWdlSUQ7
Ci0gICAgICAgIGdfdmFyaWFudF9nZXQocGFyYW1ldGVycywgIih0KSIsICZwYWdlSUQpOwotICAg
ICAgICBXZWJLaXRXZWJQYWdlKiBwYWdlID0gZ2V0V2ViUGFnZShXRUJLSVRfV0VCX0VYVEVOU0lP
Tih1c2VyRGF0YSksIHBhZ2VJRCwgaW52b2NhdGlvbik7Ci0gICAgICAgIGlmICghcGFnZSkKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQg
PSB3ZWJraXRfd2ViX3BhZ2VfZ2V0X2RvbV9kb2N1bWVudChwYWdlKTsKLSAgICAgICAgR093blB0
cjxjaGFyPiB0aXRsZSh3ZWJraXRfZG9tX2RvY3VtZW50X2dldF90aXRsZShkb2N1bWVudCkpOwot
ICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9jYXRpb25fcmV0dXJuX3ZhbHVlKGludm9jYXRpb24s
IGdfdmFyaWFudF9uZXcoIihzKSIsIHRpdGxlLmdldCgpKSk7Ci0gICAgfSBlbHNlIGlmICghZ19z
dHJjbXAwKG1ldGhvZE5hbWUsICJSdW5KYXZhU2NyaXB0SW5Jc29sYXRlZFdvcmxkIikpIHsKLSAg
ICAgICAgdWludDY0X3QgcGFnZUlEOwotICAgICAgICBjb25zdCBjaGFyKiBzY3JpcHQ7Ci0gICAg
ICAgIGdfdmFyaWFudF9nZXQocGFyYW1ldGVycywgIih0JnMpIiwgJnBhZ2VJRCwgJnNjcmlwdCk7
Ci0gICAgICAgIFdlYktpdFdlYlBhZ2UqIHBhZ2UgPSBnZXRXZWJQYWdlKFdFQktJVF9XRUJfRVhU
RU5TSU9OKHVzZXJEYXRhKSwgcGFnZUlELCBpbnZvY2F0aW9uKTsKLSAgICAgICAgaWYgKCFwYWdl
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIEdSZWZQdHI8V2ViS2l0U2NyaXB0V29y
bGQ+IHdvcmxkID0gYWRvcHRHUmVmKHdlYmtpdF9zY3JpcHRfd29ybGRfbmV3KCkpOwotICAgICAg
ICBnX2Fzc2VydCh3ZWJraXRfc2NyaXB0X3dvcmxkX2dldF9kZWZhdWx0KCkgIT0gd29ybGQuZ2V0
KCkpOwotICAgICAgICBXZWJLaXRGcmFtZSogZnJhbWUgPSB3ZWJraXRfd2ViX3BhZ2VfZ2V0X21h
aW5fZnJhbWUocGFnZSk7Ci0gICAgICAgIEpTR2xvYmFsQ29udGV4dFJlZiBqc0NvbnRleHQgPSB3
ZWJraXRfZnJhbWVfZ2V0X2phdmFzY3JpcHRfY29udGV4dF9mb3Jfc2NyaXB0X3dvcmxkKGZyYW1l
LCB3b3JsZC5nZXQoKSk7Ci0gICAgICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBqc1Njcmlw
dChBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc2NyaXB0KSk7Ci0gICAgICAg
IEpTRXZhbHVhdGVTY3JpcHQoanNDb250ZXh0LCBqc1NjcmlwdC5nZXQoKSwgMCwgMCwgMCwgMCk7
Ci0gICAgICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUoaW52b2NhdGlv
biwgMCk7Ci0gICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJBYm9ydFByb2Nl
c3MiKSkgewotICAgICAgICBhYm9ydCgpOwotICAgIH0KLX0KLQotc3RhdGljIGNvbnN0IEdEQnVz
SW50ZXJmYWNlVlRhYmxlIGludGVyZmFjZVZpcnR1YWxUYWJsZSA9IHsKLSAgICBtZXRob2RDYWxs
Q2FsbGJhY2ssIDAsIDAsIHsgMCwgfQotfTsKLQotc3RhdGljIHZvaWQgYnVzQWNxdWlyZWRDYWxs
YmFjayhHREJ1c0Nvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIGNvbnN0IGNoYXIqIG5hbWUsIGdwb2lu
dGVyIHVzZXJEYXRhKQotewotICAgIHN0YXRpYyBHREJ1c05vZGVJbmZvICppbnRyb3NwZWN0aW9u
RGF0YSA9IDA7Ci0gICAgaWYgKCFpbnRyb3NwZWN0aW9uRGF0YSkKLSAgICAgICAgaW50cm9zcGVj
dGlvbkRhdGEgPSBnX2RidXNfbm9kZV9pbmZvX25ld19mb3JfeG1sKGludHJvc3BlY3Rpb25YTUws
IDApOwotCi0gICAgR093blB0cjxHRXJyb3I+IGVycm9yOwotICAgIHVuc2lnbmVkIHJlZ2lzdHJh
dGlvbklEID0gZ19kYnVzX2Nvbm5lY3Rpb25fcmVnaXN0ZXJfb2JqZWN0KAotICAgICAgICBjb25u
ZWN0aW9uLAotICAgICAgICAiL29yZy93ZWJraXQvZ3RrL1dlYkV4dGVuc2lvblRlc3QiLAotICAg
ICAgICBpbnRyb3NwZWN0aW9uRGF0YS0+aW50ZXJmYWNlc1swXSwKLSAgICAgICAgJmludGVyZmFj
ZVZpcnR1YWxUYWJsZSwKLSAgICAgICAgZ19vYmplY3RfcmVmKHVzZXJEYXRhKSwKLSAgICAgICAg
c3RhdGljX2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGdfb2JqZWN0X3VucmVmKSwKLSAgICAgICAgJmVy
cm9yLm91dFB0cigpKTsKLSAgICBpZiAoIXJlZ2lzdHJhdGlvbklEKQotICAgICAgICBnX3dhcm5p
bmcoIkZhaWxlZCB0byByZWdpc3RlciBvYmplY3Q6ICVzXG4iLCBlcnJvci0+bWVzc2FnZSk7Ci0K
LSAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVCh1c2VyRGF0YSksICJkYnVzLWNvbm5lY3Rp
b24iLCBjb25uZWN0aW9uKTsKLSAgICB3aGlsZSAoZGVsYXllZFNpZ25hbHNRdWV1ZS5zaXplKCkp
IHsKLSAgICAgICAgT3duUHRyPERlbGF5ZWRTaWduYWw+IGRlbGF5ZWRTaWduYWwgPSBkZWxheWVk
U2lnbmFsc1F1ZXVlLnRha2VGaXJzdCgpOwotICAgICAgICBzd2l0Y2ggKGRlbGF5ZWRTaWduYWwt
PnR5cGUpIHsKLSAgICAgICAgY2FzZSBEb2N1bWVudExvYWRlZFNpZ25hbDoKLSAgICAgICAgICAg
IGVtaXREb2N1bWVudExvYWRlZChjb25uZWN0aW9uKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIFVSSUNoYW5nZWRTaWduYWw6Ci0gICAgICAgICAgICBlbWl0VVJJQ2hhbmdlZChj
b25uZWN0aW9uLCBkZWxheWVkU2lnbmFsLT51cmkuZGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgfQotfQotCi1leHRlcm4gIkMiIHZvaWQgd2Via2l0X3dlYl9leHRl
bnNpb25faW5pdGlhbGl6ZShXZWJLaXRXZWJFeHRlbnNpb24qIGV4dGVuc2lvbikKLXsKLSAgICBn
X3NpZ25hbF9jb25uZWN0KGV4dGVuc2lvbiwgInBhZ2UtY3JlYXRlZCIsIEdfQ0FMTEJBQ0socGFn
ZUNyZWF0ZWRDYWxsYmFjayksIGV4dGVuc2lvbik7Ci0gICAgZ19zaWduYWxfY29ubmVjdCh3ZWJr
aXRfc2NyaXB0X3dvcmxkX2dldF9kZWZhdWx0KCksICJ3aW5kb3ctb2JqZWN0LWNsZWFyZWQiLCBH
X0NBTExCQUNLKHdpbmRvd09iamVjdENsZWFyZWQpLCAwKTsKLQotICAgIGdfYnVzX293bl9uYW1l
KAotICAgICAgICBHX0JVU19UWVBFX1NFU1NJT04sCi0gICAgICAgICJvcmcud2Via2l0Lmd0ay5X
ZWJFeHRlbnNpb25UZXN0IiwKLSAgICAgICAgR19CVVNfTkFNRV9PV05FUl9GTEFHU19OT05FLAot
ICAgICAgICBidXNBY3F1aXJlZENhbGxiYWNrLAotICAgICAgICAwLCAwLAotICAgICAgICBnX29i
amVjdF9yZWYoZXh0ZW5zaW9uKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+
KGdfb2JqZWN0X3VucmVmKSk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9XZWJLaXRUZXN0QnVzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYktpdFRlc3RCdXMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA4YzJkM2Y2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL1dlYktpdFRlc3RCdXMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTA2
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYktpdFRlc3RCdXMuaCIKLQotI2luY2x1ZGUgPHd0Zi9n
b2JqZWN0L0dPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotV2Vi
S2l0VGVzdEJ1czo6V2ViS2l0VGVzdEJ1cygpCi0gICAgOiBtX3BpZCgtMSkKLXsKLX0KLQotYm9v
bCBXZWJLaXRUZXN0QnVzOjpydW4oKQotewotICAgIC8vIEZJWE1FOiBVc2UgR1Rlc3REQnVzIHdo
ZW4gd2UgYnVtcCBnbGliIHRvIDIuMzQuCi0gICAgR093blB0cjxjaGFyPiBkYnVzTGF1bmNoKGdf
ZmluZF9wcm9ncmFtX2luX3BhdGgoImRidXMtbGF1bmNoIikpOwotICAgIGlmICghZGJ1c0xhdW5j
aCkgewotICAgICAgICBnX3dhcm5pbmcoIkVycm9yIHN0YXJ0aW5nIERCVVMgZGFlbW9uOiBkYnVz
LWxhdW5jaCBub3QgZm91bmQgaW4gcGF0aCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgR093blB0cjxjaGFyPiBvdXRwdXQ7Ci0gICAgR093blB0cjxHRXJyb3I+IGVycm9y
OwotICAgIGlmICghZ19zcGF3bl9jb21tYW5kX2xpbmVfc3luYyhkYnVzTGF1bmNoLmdldCgpLCAm
b3V0cHV0Lm91dFB0cigpLCAwLCAwLCAmZXJyb3Iub3V0UHRyKCkpKSB7Ci0gICAgICAgIGdfd2Fy
bmluZygiRXJyb3Igc3RhcnRpbmcgREJVUyBkYWVtb246ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgU3RyaW5nIG91dHB1dFN0cmluZyA9
IFN0cmluZzo6ZnJvbVVURjgob3V0cHV0LmdldCgpKTsKLSAgICBWZWN0b3I8U3RyaW5nPiBsaW5l
czsKLSAgICBvdXRwdXRTdHJpbmcuc3BsaXQoVUNoYXIoJ1xuJyksIC8qIGFsbG93RW1wdHlFbnRy
aWVzICovIGZhbHNlLCBsaW5lcyk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaW5lcy5z
aXplKCk7ICsraSkgewotICAgICAgICBjaGFyKioga2V5VmFsdWUgPSBnX3N0cnNwbGl0KGxpbmVz
W2ldLnV0ZjgoKS5kYXRhKCksICI9IiwgMik7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHVpbnQoZ19z
dHJ2X2xlbmd0aChrZXlWYWx1ZSksID09LCAyKTsKLSAgICAgICAgaWYgKCFnX3N0cmNtcDAoa2V5
VmFsdWVbMF0sICJEQlVTX1NFU1NJT05fQlVTX0FERFJFU1MiKSkgewotICAgICAgICAgICAgbV9h
ZGRyZXNzID0ga2V5VmFsdWVbMV07Ci0gICAgICAgICAgICBnX3NldGVudigiREJVU19TRVNTSU9O
X0JVU19BRERSRVNTIiwga2V5VmFsdWVbMV0sIFRSVUUpOwotICAgICAgICB9IGVsc2UgaWYgKCFn
X3N0cmNtcDAoa2V5VmFsdWVbMF0sICJEQlVTX1NFU1NJT05fQlVTX1BJRCIpKQotICAgICAgICAg
ICAgbV9waWQgPSBnX2FzY2lpX3N0cnRvbGwoa2V5VmFsdWVbMV0sIDAsIDEwKTsKLSAgICAgICAg
Z19zdHJmcmVldihrZXlWYWx1ZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1fcGlkID4gMDsKLX0K
LQotV2ViS2l0VGVzdEJ1czo6fldlYktpdFRlc3RCdXMoKQotewotICAgIGdfdW5zZXRlbnYoIkRC
VVNfU0VTU0lPTl9CVVNfQUREUkVTUyIpOwotCi0gICAgaWYgKG1fcGlkICE9IC0xKQotICAgICAg
ICBraWxsKG1fcGlkLCBTSUdURVJNKTsKLX0KLQotR0RCdXNDb25uZWN0aW9uKiBXZWJLaXRUZXN0
QnVzOjpnZXRPckNyZWF0ZUNvbm5lY3Rpb24oKQotewotICAgIGlmIChtX2Nvbm5lY3Rpb24pCi0g
ICAgICAgIHJldHVybiBtX2Nvbm5lY3Rpb24uZ2V0KCk7Ci0KLSAgICBnX2Fzc2VydCghbV9hZGRy
ZXNzLmlzTnVsbCgpKTsKLSAgICBtX2Nvbm5lY3Rpb24gPSBhZG9wdEdSZWYoZ19kYnVzX2Nvbm5l
Y3Rpb25fbmV3X2Zvcl9hZGRyZXNzX3N5bmMobV9hZGRyZXNzLmRhdGEoKSwKLSAgICAgICAgc3Rh
dGljX2Nhc3Q8R0RCdXNDb25uZWN0aW9uRmxhZ3M+KEdfREJVU19DT05ORUNUSU9OX0ZMQUdTX0FV
VEhFTlRJQ0FUSU9OX0NMSUVOVCB8IEdfREJVU19DT05ORUNUSU9OX0ZMQUdTX01FU1NBR0VfQlVT
X0NPTk5FQ1RJT04pLAotICAgICAgICAwLCAwLCAwKSk7Ci0gICAgcmV0dXJuIG1fY29ubmVjdGlv
bi5nZXQoKTsKLX0KLQotc3RhdGljIHZvaWQgb25OYW1lQXBwZWFyZWQoR0RCdXNDb25uZWN0aW9u
KiwgY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBncG9pbnRlciB1c2VyRGF0YSkKLXsKLSAgICBn
X21haW5fbG9vcF9xdWl0KHN0YXRpY19jYXN0PEdNYWluTG9vcCo+KHVzZXJEYXRhKSk7Ci19Ci0K
LUdEQnVzUHJveHkqIFdlYktpdFRlc3RCdXM6OmNyZWF0ZVByb3h5KGNvbnN0IGNoYXIqIHNlcnZp
Y2VOYW1lLCBjb25zdCBjaGFyKiBvYmplY3RQYXRoLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1l
LCBHTWFpbkxvb3AqIG1haW5Mb29wKQotewotICAgIHVuc2lnbmVkIHdhdGNoZXJJRCA9IGdfYnVz
X3dhdGNoX25hbWVfb25fY29ubmVjdGlvbihnZXRPckNyZWF0ZUNvbm5lY3Rpb24oKSwgc2Vydmlj
ZU5hbWUsIEdfQlVTX05BTUVfV0FUQ0hFUl9GTEFHU19OT05FLCBvbk5hbWVBcHBlYXJlZCwgMCwg
bWFpbkxvb3AsIDApOwotICAgIGdfbWFpbl9sb29wX3J1bihtYWluTG9vcCk7Ci0gICAgZ19idXNf
dW53YXRjaF9uYW1lKHdhdGNoZXJJRCk7Ci0KLSAgICBHREJ1c1Byb3h5KiBwcm94eSA9IGdfZGJ1
c19wcm94eV9uZXdfc3luYygKLSAgICAgICAgY29ubmVjdGlvbigpLAotICAgICAgICBHX0RCVVNf
UFJPWFlfRkxBR1NfRE9fTk9UX0FVVE9fU1RBUlQsCi0gICAgICAgIDAsIC8vIEdEQnVzSW50ZXJm
YWNlSW5mbwotICAgICAgICBzZXJ2aWNlTmFtZSwKLSAgICAgICAgb2JqZWN0UGF0aCwKLSAgICAg
ICAgaW50ZXJmYWNlTmFtZSwKLSAgICAgICAgMCwgLy8gR0NhbmNlbGxhYmxlCi0gICAgICAgIDAp
OwotICAgIGdfYXNzZXJ0KHByb3h5KTsKLSAgICByZXR1cm4gcHJveHk7Ci19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJLaXRUZXN0QnVzLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJLaXRUZXN0QnVzLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5Zjg1NmIuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViS2l0VGVzdEJ1cy5oCisrKyAv
ZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2Fs
aWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
LSAqLwotCi0jaWZuZGVmIFdlYktpdFRlc3RCdXNfaAotI2RlZmluZSBXZWJLaXRUZXN0QnVzX2gK
LQotI2luY2x1ZGUgPGdpby9naW8uaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1jbGFzcyBXZWJLaXRUZXN0QnVzIHsK
LXB1YmxpYzoKLSAgICBXZWJLaXRUZXN0QnVzKCk7Ci0gICAgdmlydHVhbCB+V2ViS2l0VGVzdEJ1
cygpOwotCi0gICAgYm9vbCBydW4oKTsKLSAgICBHREJ1c1Byb3h5KiBjcmVhdGVQcm94eShjb25z
dCBjaGFyKiBzZXJ2aWNlTmFtZSwgY29uc3QgY2hhciogb2JqZWN0UGF0aCwgY29uc3QgY2hhciog
aW50ZXJmYWNlTmFtZSwgR01haW5Mb29wKik7Ci0gICAgR0RCdXNDb25uZWN0aW9uKiBjb25uZWN0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb25uZWN0aW9uLmdldCgpOyB9Ci0KLXByaXZhdGU6Ci0g
ICAgR0RCdXNDb25uZWN0aW9uKiBnZXRPckNyZWF0ZUNvbm5lY3Rpb24oKTsKLQotICAgIHBpZF90
IG1fcGlkOwotICAgIENTdHJpbmcgbV9hZGRyZXNzOwotICAgIEdSZWZQdHI8R0RCdXNDb25uZWN0
aW9uPiBtX2Nvbm5lY3Rpb247Ci19OwotCi0jZW5kaWYgLy8gV2ViS2l0VGVzdEJ1c19oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJLaXRUZXN0
U2VydmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYktp
dFRlc3RTZXJ2ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGI0YTlhLi4w
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYktp
dFRlc3RTZXJ2ZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiV2ViS2l0VGVzdFNlcnZlci5oIgotCi0jaW5jbHVkZSAiVGVzdE1haW4uaCIKLSNpbmNsdWRl
IDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0KLVdlYktpdFRlc3RTZXJ2ZXI6OldlYktpdFRlc3RT
ZXJ2ZXIoU2VydmVyVHlwZSB0eXBlKQotewotICAgIEdPd25QdHI8Y2hhcj4gc3NsQ2VydGlmaWNh
dGVGaWxlOwotICAgIEdPd25QdHI8Y2hhcj4gc3NsS2V5RmlsZTsKLSAgICBpZiAodHlwZSA9PSBT
ZXJ2ZXJIVFRQUykgewotICAgICAgICBDU3RyaW5nIHJlc291cmNlc0RpciA9IFRlc3Q6OmdldFJl
c291cmNlc0RpcigpOwotICAgICAgICBzc2xDZXJ0aWZpY2F0ZUZpbGUuc2V0KGdfYnVpbGRfZmls
ZW5hbWUocmVzb3VyY2VzRGlyLmRhdGEoKSwgInRlc3QtY2VydC5wZW0iLCBOVUxMKSk7Ci0gICAg
ICAgIHNzbEtleUZpbGUuc2V0KGdfYnVpbGRfZmlsZW5hbWUocmVzb3VyY2VzRGlyLmRhdGEoKSwg
InRlc3Qta2V5LnBlbSIsIE5VTEwpKTsKLSAgICB9Ci0KLSAgICBHUmVmUHRyPFNvdXBBZGRyZXNz
PiBhZGRyZXNzID0gYWRvcHRHUmVmKHNvdXBfYWRkcmVzc19uZXcoIjEyNy4wLjAuMSIsIFNPVVBf
QUREUkVTU19BTllfUE9SVCkpOwotICAgIHNvdXBfYWRkcmVzc19yZXNvbHZlX3N5bmMoYWRkcmVz
cy5nZXQoKSwgMCk7Ci0KLSAgICBtX3NvdXBTZXJ2ZXIgPSBhZG9wdEdSZWYoc291cF9zZXJ2ZXJf
bmV3KFNPVVBfU0VSVkVSX0lOVEVSRkFDRSwgYWRkcmVzcy5nZXQoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPVVBfU0VSVkVSX1NTTF9DRVJUX0ZJTEUs
IHNzbENlcnRpZmljYXRlRmlsZS5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFNPVVBfU0VSVkVSX1NTTF9LRVlfRklMRSwgc3NsS2V5RmlsZS5nZXQo
KSwgTlVMTCkpOwotICAgIG1fYmFzZVVSSSA9IHR5cGUgPT0gU2VydmVySFRUUFMgPyBzb3VwX3Vy
aV9uZXcoImh0dHBzOi8vMTI3LjAuMC4xLyIpIDogc291cF91cmlfbmV3KCJodHRwOi8vMTI3LjAu
MC4xLyIpOwotICAgIHNvdXBfdXJpX3NldF9wb3J0KG1fYmFzZVVSSSwgc291cF9zZXJ2ZXJfZ2V0
X3BvcnQobV9zb3VwU2VydmVyLmdldCgpKSk7Ci19Ci0KLVdlYktpdFRlc3RTZXJ2ZXI6On5XZWJL
aXRUZXN0U2VydmVyKCkKLXsKLSAgICBzb3VwX3VyaV9mcmVlKG1fYmFzZVVSSSk7Ci19Ci0KLXZv
aWQgV2ViS2l0VGVzdFNlcnZlcjo6cnVuKFNvdXBTZXJ2ZXJDYWxsYmFjayBzZXJ2ZXJDYWxsYmFj
aykKLXsKLSAgICBzb3VwX3NlcnZlcl9ydW5fYXN5bmMobV9zb3VwU2VydmVyLmdldCgpKTsKLSAg
ICBzb3VwX3NlcnZlcl9hZGRfaGFuZGxlcihtX3NvdXBTZXJ2ZXIuZ2V0KCksIDAsIHNlcnZlckNh
bGxiYWNrLCAwLCAwKTsKLX0KLQotQ1N0cmluZyBXZWJLaXRUZXN0U2VydmVyOjpnZXRVUklGb3JQ
YXRoKGNvbnN0IGNoYXIqIHBhdGgpCi17Ci0gICAgU291cFVSSSogdXJpID0gc291cF91cmlfbmV3
X3dpdGhfYmFzZShtX2Jhc2VVUkksIHBhdGgpOwotICAgIEdPd25QdHI8Z2NoYXI+IHVyaVN0cmlu
Zyhzb3VwX3VyaV90b19zdHJpbmcodXJpLCBGQUxTRSkpOwotICAgIHNvdXBfdXJpX2ZyZWUodXJp
KTsKLSAgICByZXR1cm4gdXJpU3RyaW5nLmdldCgpOwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJLaXRUZXN0U2VydmVyLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJLaXRUZXN0U2VydmVyLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0NjI2ZjYuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViS2l0VGVzdFNlcnZlci5oCisrKyAv
ZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2Fs
aWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
LSAqLwotCi0jaWZuZGVmIFdlYktpdFRlc3RTZXJ2ZXJfaAotI2RlZmluZSBXZWJLaXRUZXN0U2Vy
dmVyX2gKLQotI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgotI2luY2x1ZGUgPHdlYmtpdDIvd2Vi
a2l0Mi5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+Ci0KLWNsYXNzIFdlYktpdFRlc3RTZXJ2ZXIgewotcHVibGljOgotCi0g
ICAgZW51bSBTZXJ2ZXJUeXBlIHsKLSAgICAgICAgU2VydmVySFRUUCwKLSAgICAgICAgU2VydmVy
SFRUUFMKLSAgICB9OwotCi0gICAgV2ViS2l0VGVzdFNlcnZlcihTZXJ2ZXJUeXBlIHR5cGUgPSBT
ZXJ2ZXJIVFRQKTsKLSAgICB2aXJ0dWFsIH5XZWJLaXRUZXN0U2VydmVyKCk7Ci0KLSAgICBTb3Vw
VVJJKiBiYXNlVVJJKCkgeyByZXR1cm4gbV9iYXNlVVJJOyB9Ci0KLSAgICBDU3RyaW5nIGdldFVS
SUZvclBhdGgoY29uc3QgY2hhciogcGF0aCk7Ci0gICAgdm9pZCBydW4oU291cFNlcnZlckNhbGxi
YWNrKTsKLQotcHJpdmF0ZToKLSAgICBHUmVmUHRyPFNvdXBTZXJ2ZXI+IG1fc291cFNlcnZlcjsK
LSAgICBTb3VwVVJJKiBtX2Jhc2VVUkk7Ci19OwotCi0jZW5kaWYgLy8gV2ViS2l0VGVzdFNlcnZl
cl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9X
ZWJQcm9jZXNzVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0
cy9XZWJQcm9jZXNzVGVzdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5MWE2
ZTcuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
V2ViUHJvY2Vzc1Rlc3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIldlYlByb2Nlc3NUZXN0LmgiCi0KLSNpbmNsdWRlIDxnaW8vZ2lvLmg+Ci0jaW5jbHVk
ZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgotCi10eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBzdGQ6
OmZ1bmN0aW9uPFBhc3NPd25QdHI8V2ViUHJvY2Vzc1Rlc3Q+ICgpPj4gVGVzdHNNYXA7Ci1zdGF0
aWMgVGVzdHNNYXAmIHRlc3RzTWFwKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFRlc3Rz
TWFwLCBzX3Rlc3RzTWFwLCAoKSk7Ci0gICAgcmV0dXJuIHNfdGVzdHNNYXA7Ci19Ci0KLXZvaWQg
V2ViUHJvY2Vzc1Rlc3Q6OmFkZChjb25zdCBTdHJpbmcmIHRlc3ROYW1lLCBzdGQ6OmZ1bmN0aW9u
PFBhc3NPd25QdHI8V2ViUHJvY2Vzc1Rlc3Q+ICgpPiBjbG9zdXJlKQotewotICAgIHRlc3RzTWFw
KCkuYWRkKHRlc3ROYW1lLCBzdGQ6OmZvcndhcmQ8c3RkOjpmdW5jdGlvbjxQYXNzT3duUHRyPFdl
YlByb2Nlc3NUZXN0PiAoKT4+KGNsb3N1cmUpKTsKLX0KLQotUGFzc093blB0cjxXZWJQcm9jZXNz
VGVzdD4gV2ViUHJvY2Vzc1Rlc3Q6OmNyZWF0ZShjb25zdCBTdHJpbmcmIHRlc3ROYW1lKQotewot
ICAgIGdfYXNzZXJ0KHRlc3RzTWFwKCkuY29udGFpbnModGVzdE5hbWUpKTsKLSAgICByZXR1cm4g
dGVzdHNNYXAoKS5nZXQodGVzdE5hbWUpKCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyIGludHJv
c3BlY3Rpb25YTUxbXSA9Ci0gICAgIjxub2RlPiIKLSAgICAiIDxpbnRlcmZhY2UgbmFtZT0nb3Jn
LndlYmtpdC5ndGsuV2ViUHJvY2Vzc1Rlc3QnPiIKLSAgICAiICA8bWV0aG9kIG5hbWU9J1J1blRl
c3QnPiIKLSAgICAiICAgPGFyZyB0eXBlPSdzJyBuYW1lPSdwYXRoJyBkaXJlY3Rpb249J2luJy8+
IgotICAgICIgICA8YXJnIHR5cGU9J2F7c3Z9JyBuYW1lPSdhcmdzJyBkaXJlY3Rpb249J2luJy8+
IgotICAgICIgICA8YXJnIHR5cGU9J2InIG5hbWU9J3Jlc3VsdCcgZGlyZWN0aW9uPSdvdXQnLz4i
Ci0gICAgIiAgPC9tZXRob2Q+IgotICAgICIgPC9pbnRlcmZhY2U+IgotICAgICI8L25vZGU+IjsK
LQotc3RhdGljIHZvaWQgbWV0aG9kQ2FsbENhbGxiYWNrKEdEQnVzQ29ubmVjdGlvbiogY29ubmVj
dGlvbiwgY29uc3QgY2hhciogc2VuZGVyLCBjb25zdCBjaGFyKiBvYmplY3RQYXRoLCBjb25zdCBj
aGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBtZXRob2ROYW1lLCBHVmFyaWFudCogcGFy
YW1ldGVycywgR0RCdXNNZXRob2RJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBncG9pbnRlciB1c2Vy
RGF0YSkKLXsKLSAgICBpZiAoZ19zdHJjbXAwKGludGVyZmFjZU5hbWUsICJvcmcud2Via2l0Lmd0
ay5XZWJQcm9jZXNzVGVzdCIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWdfc3RyY21w
MChtZXRob2ROYW1lLCAiUnVuVGVzdCIpKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIHRlc3RQYXRo
OwotICAgICAgICBHVmFyaWFudCogYXJnczsKLSAgICAgICAgZ192YXJpYW50X2dldChwYXJhbWV0
ZXJzLCAiKCZzQGF7c3Z9KSIsICZ0ZXN0UGF0aCwgJmFyZ3MpOwotICAgICAgICBPd25QdHI8V2Vi
UHJvY2Vzc1Rlc3Q+IHRlc3QgPSBXZWJQcm9jZXNzVGVzdDo6Y3JlYXRlKFN0cmluZzo6ZnJvbVVU
RjgodGVzdFBhdGgpKTsKLSAgICAgICAgYm9vbCByZXN1bHQgPSB0ZXN0LT5ydW5UZXN0KGdfc3Ry
cnN0cih0ZXN0UGF0aCwgIi8iKSArIDEsIFdFQktJVF9XRUJfRVhURU5TSU9OKHVzZXJEYXRhKSwg
YXJncyk7Ci0gICAgICAgIGdfdmFyaWFudF91bnJlZihhcmdzKTsKLQotICAgICAgICBnX2RidXNf
bWV0aG9kX2ludm9jYXRpb25fcmV0dXJuX3ZhbHVlKGludm9jYXRpb24sIGdfdmFyaWFudF9uZXco
IihiKSIsIHJlc3VsdCkpOwotICAgIH0gZWxzZQotICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hl
ZCgpOwotfQotCi1zdGF0aWMgY29uc3QgR0RCdXNJbnRlcmZhY2VWVGFibGUgaW50ZXJmYWNlVmly
dHVhbFRhYmxlID0gewotICAgIG1ldGhvZENhbGxDYWxsYmFjaywgMCwgMCwgeyAwLCB9Ci19Owot
Ci1zdGF0aWMgdm9pZCBidXNBY3F1aXJlZENhbGxiYWNrKEdEQnVzQ29ubmVjdGlvbiogY29ubmVj
dGlvbiwgY29uc3QgY2hhciogbmFtZSwgZ3BvaW50ZXIgdXNlckRhdGEpCi17Ci0gICAgc3RhdGlj
IEdEQnVzTm9kZUluZm8gKmludHJvc3BlY3Rpb25EYXRhID0gMDsKLSAgICBpZiAoIWludHJvc3Bl
Y3Rpb25EYXRhKQotICAgICAgICBpbnRyb3NwZWN0aW9uRGF0YSA9IGdfZGJ1c19ub2RlX2luZm9f
bmV3X2Zvcl94bWwoaW50cm9zcGVjdGlvblhNTCwgMCk7Ci0KLSAgICBHT3duUHRyPEdFcnJvcj4g
ZXJyb3I7Ci0gICAgdW5zaWduZWQgcmVnaXN0cmF0aW9uSUQgPSBnX2RidXNfY29ubmVjdGlvbl9y
ZWdpc3Rlcl9vYmplY3QoCi0gICAgICAgIGNvbm5lY3Rpb24sCi0gICAgICAgICIvb3JnL3dlYmtp
dC9ndGsvV2ViUHJvY2Vzc1Rlc3QiLAotICAgICAgICBpbnRyb3NwZWN0aW9uRGF0YS0+aW50ZXJm
YWNlc1swXSwKLSAgICAgICAgJmludGVyZmFjZVZpcnR1YWxUYWJsZSwKLSAgICAgICAgZ19vYmpl
Y3RfcmVmKHVzZXJEYXRhKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGdf
b2JqZWN0X3VucmVmKSwKLSAgICAgICAgJmVycm9yLm91dFB0cigpKTsKLSAgICBpZiAoIXJlZ2lz
dHJhdGlvbklEKQotICAgICAgICBnX3dhcm5pbmcoIkZhaWxlZCB0byByZWdpc3RlciBvYmplY3Q6
ICVzXG4iLCBlcnJvci0+bWVzc2FnZSk7Ci19Ci0KLWV4dGVybiAiQyIgdm9pZCB3ZWJraXRfd2Vi
X2V4dGVuc2lvbl9pbml0aWFsaXplKFdlYktpdFdlYkV4dGVuc2lvbiogZXh0ZW5zaW9uKQotewot
ICAgIGdfYnVzX293bl9uYW1lKAotICAgICAgICBHX0JVU19UWVBFX1NFU1NJT04sCi0gICAgICAg
ICJvcmcud2Via2l0Lmd0ay5XZWJQcm9jZXNzVGVzdCIsCi0gICAgICAgIEdfQlVTX05BTUVfT1dO
RVJfRkxBR1NfTk9ORSwKLSAgICAgICAgYnVzQWNxdWlyZWRDYWxsYmFjaywKLSAgICAgICAgMCwg
MCwKLSAgICAgICAgZ19vYmplY3RfcmVmKGV4dGVuc2lvbiksCi0gICAgICAgIHN0YXRpY19jYXN0
PEdEZXN0cm95Tm90aWZ5PihnX29iamVjdF91bnJlZikpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViUHJvY2Vzc1Rlc3QuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlByb2Nlc3NUZXN0LmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzZWVkZDAuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViUHJvY2Vzc1Rlc3QuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgSWdhbGlhIFMu
TC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8K
LQotI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0LXdlYi1leHRlbnNpb24uaD4KLSNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3Rm
L2dvYmplY3QvR1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotY2xhc3MgV2ViUHJvY2Vzc1Rlc3Qgewot
cHVibGljOgotICAgIHZpcnR1YWwgfldlYlByb2Nlc3NUZXN0KCkgeyB9Ci0gICAgdmlydHVhbCBi
b29sIHJ1blRlc3QoY29uc3QgY2hhciogdGVzdE5hbWUsIFdlYktpdFdlYkV4dGVuc2lvbiosIEdW
YXJpYW50KiBhcmdzKSA9IDA7Ci0KLSAgICBzdGF0aWMgdm9pZCBhZGQoY29uc3QgU3RyaW5nJiB0
ZXN0TmFtZSwgc3RkOjpmdW5jdGlvbjxQYXNzT3duUHRyPFdlYlByb2Nlc3NUZXN0PiAoKT4pOwot
ICAgIHN0YXRpYyBQYXNzT3duUHRyPFdlYlByb2Nlc3NUZXN0PiBjcmVhdGUoY29uc3QgU3RyaW5n
JiB0ZXN0TmFtZSk7Ci19OwotCi0jZGVmaW5lIFJFR0lTVEVSX1RFU1QoQ2xhc3NOYW1lLCBUZXN0
TmFtZSkgXAotICAgIFdlYlByb2Nlc3NUZXN0OjphZGQoU3RyaW5nOjpmcm9tVVRGOChUZXN0TmFt
ZSksIENsYXNzTmFtZTo6Y3JlYXRlKQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJQcm9jZXNzVGVzdFJ1bm5lci5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJQcm9jZXNzVGVzdFJ1bm5lci5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhM2NkOTYuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViUHJvY2Vzc1Rlc3RSdW5uZXIuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NU
ZXN0UnVubmVyLmgiCi0KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0KLVdlYlBy
b2Nlc3NUZXN0UnVubmVyOjpXZWJQcm9jZXNzVGVzdFJ1bm5lcigpCi0gICAgOiBtX21haW5Mb29w
KGdfbWFpbl9sb29wX25ldygwLCBUUlVFKSkKLSAgICAsIG1fYnVzKGFkb3B0R1JlZihnX3Rlc3Rf
ZGJ1c19uZXcoR19URVNUX0RCVVNfTk9ORSkpKQotewotICAgIC8vIFNhdmUgdGhlIERJU1BMQVkg
ZW52IHZhciB0byByZXN0b3JlIGl0IGFmdGVyIGNhbGxpbmcgZ190ZXN0X2RidXNfdXAoKSB0aGF0
IHVuc2V0cyBpdC4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEyNTYyMS4KLSAgICBjb25zdCBjaGFyKiBkaXNwbGF5ID0gZ19nZXRlbnYoIkRJU1BM
QVkiKTsKLSAgICBnX3Rlc3RfZGJ1c191cChtX2J1cy5nZXQoKSk7Ci0gICAgZ19zZXRlbnYoIkRJ
U1BMQVkiLCBkaXNwbGF5LCBGQUxTRSk7Ci0gICAgbV9jb25uZWN0aW9uID0gYWRvcHRHUmVmKGdf
YnVzX2dldF9zeW5jKEdfQlVTX1RZUEVfU0VTU0lPTiwgMCwgMCkpOwotfQotCi1XZWJQcm9jZXNz
VGVzdFJ1bm5lcjo6fldlYlByb2Nlc3NUZXN0UnVubmVyKCkKLXsKLSAgICBnX21haW5fbG9vcF91
bnJlZihtX21haW5Mb29wKTsKLQotICAgIC8vIGdfdGVzdF9kYnVzX2Rvd24gd2FpdHMgdW50aWwg
dGhlIGNvbm5lY3Rpb24gaXMgZnJlZWQsIHNvIHJlbGVhc2Ugb3VyIHJlZnMgZXhwbGljaXRseSBi
ZWZvcmUgY2FsbGluZyBpdC4KLSAgICBtX2Nvbm5lY3Rpb24gPSAwOwotICAgIG1fcHJveHkgPSAw
OwotICAgIGdfdGVzdF9kYnVzX2Rvd24obV9idXMuZ2V0KCkpOwotfQotCi12b2lkIFdlYlByb2Nl
c3NUZXN0UnVubmVyOjpwcm94eUNyZWF0ZWRDYWxsYmFjayhHT2JqZWN0KiwgR0FzeW5jUmVzdWx0
KiByZXN1bHQsIFdlYlByb2Nlc3NUZXN0UnVubmVyKiB0ZXN0UnVubmVyKQotewotICAgIHRlc3RS
dW5uZXItPm1fcHJveHkgPSBhZG9wdEdSZWYoZ19kYnVzX3Byb3h5X25ld19maW5pc2gocmVzdWx0
LCAwKSk7Ci0gICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0UnVubmVyLT5tX21haW5Mb29wKTsKLX0K
LQotR0RCdXNQcm94eSogV2ViUHJvY2Vzc1Rlc3RSdW5uZXI6OnByb3h5KCkKLXsKLSAgICBpZiAo
bV9wcm94eSkKLSAgICAgICAgcmV0dXJuIG1fcHJveHkuZ2V0KCk7Ci0KLSAgICBnX2RidXNfcHJv
eHlfbmV3KG1fY29ubmVjdGlvbi5nZXQoKSwgR19EQlVTX1BST1hZX0ZMQUdTX0RPX05PVF9BVVRP
X1NUQVJULCAwLAotICAgICAgICAib3JnLndlYmtpdC5ndGsuV2ViUHJvY2Vzc1Rlc3QiLCAiL29y
Zy93ZWJraXQvZ3RrL1dlYlByb2Nlc3NUZXN0IiwgIm9yZy53ZWJraXQuZ3RrLldlYlByb2Nlc3NU
ZXN0IiwKLSAgICAgICAgMCwgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihX
ZWJQcm9jZXNzVGVzdFJ1bm5lcjo6cHJveHlDcmVhdGVkQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBn
X21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Ci0gICAgZ19hc3NlcnQobV9wcm94eS5nZXQoKSk7
Ci0KLSAgICByZXR1cm4gbV9wcm94eS5nZXQoKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzVGVzdFJ1
bm5lcjo6b25OYW1lQXBwZWFyZWQoR0RCdXNDb25uZWN0aW9uKiwgY29uc3QgY2hhciosIGNvbnN0
IGNoYXIqLCBncG9pbnRlciB1c2VyRGF0YSkKLXsKLSAgICBXZWJQcm9jZXNzVGVzdFJ1bm5lciog
dGVzdFJ1bm5lciA9IHN0YXRpY19jYXN0PFdlYlByb2Nlc3NUZXN0UnVubmVyKj4odXNlckRhdGEp
OwotICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdFJ1bm5lci0+bV9tYWluTG9vcCk7Ci19Ci0KLXZv
aWQgV2ViUHJvY2Vzc1Rlc3RSdW5uZXI6Om9uTmFtZVZhbmlzaGVkKEdEQnVzQ29ubmVjdGlvbios
IGNvbnN0IGNoYXIqIG5hbWUsIGdwb2ludGVyIHVzZXJEYXRhKQotewotICAgIF9leGl0KDEpOwot
fQotCi12b2lkIFdlYlByb2Nlc3NUZXN0UnVubmVyOjp0ZXN0RmluaXNoZWRDYWxsYmFjayhHREJ1
c1Byb3h5KiBwcm94eSwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIFdlYlByb2Nlc3NUZXN0UnVubmVy
KiB0ZXN0UnVubmVyKQotewotICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHJldHVyblZhbHVlID0gYWRv
cHRHUmVmKGdfZGJ1c19wcm94eV9jYWxsX2ZpbmlzaChwcm94eSwgcmVzdWx0LCAwKSk7Ci0gICAg
Z19hc3NlcnQocmV0dXJuVmFsdWUuZ2V0KCkpOwotICAgIGdib29sZWFuIHRlc3RSZXN1bHQ7Ci0g
ICAgZ192YXJpYW50X2dldChyZXR1cm5WYWx1ZS5nZXQoKSwgIihiKSIsICZ0ZXN0UmVzdWx0KTsK
LSAgICB0ZXN0UnVubmVyLT5maW5pc2hUZXN0KHRlc3RSZXN1bHQpOwotfQotCi1ib29sIFdlYlBy
b2Nlc3NUZXN0UnVubmVyOjpydW5UZXN0KGNvbnN0IGNoYXIqIHN1aXRlTmFtZSwgY29uc3QgY2hh
ciogdGVzdE5hbWUsIEdWYXJpYW50KiBhcmdzKQotewotICAgIGdfYXNzZXJ0KGdfdmFyaWFudF9p
c19vZl90eXBlKGFyZ3MsIEdfVkFSSUFOVF9UWVBFX1ZBUkRJQ1QpKTsKLQotICAgIHVuc2lnbmVk
IHdhdGNoZXJJRCA9IGdfYnVzX3dhdGNoX25hbWVfb25fY29ubmVjdGlvbihtX2Nvbm5lY3Rpb24u
Z2V0KCksICJvcmcud2Via2l0Lmd0ay5XZWJQcm9jZXNzVGVzdCIsIEdfQlVTX05BTUVfV0FUQ0hF
Ul9GTEFHU19OT05FLAotICAgICAgICBXZWJQcm9jZXNzVGVzdFJ1bm5lcjo6b25OYW1lQXBwZWFy
ZWQsIFdlYlByb2Nlc3NUZXN0UnVubmVyOjpvbk5hbWVWYW5pc2hlZCwgdGhpcywgMCk7Ci0gICAg
Z19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotCi0gICAgbV90ZXN0UmVzdWx0ID0gZmFsc2U7
Ci0gICAgR093blB0cjxjaGFyPiB0ZXN0UGF0aChnX3N0cmR1cF9wcmludGYoIiVzLyVzIiwgc3Vp
dGVOYW1lLCB0ZXN0TmFtZSkpOwotICAgIGdfZGJ1c19wcm94eV9jYWxsKAotICAgICAgICBwcm94
eSgpLAotICAgICAgICAiUnVuVGVzdCIsCi0gICAgICAgIGdfdmFyaWFudF9uZXcoIihzQGF7c3Z9
KSIsIHRlc3RQYXRoLmdldCgpLCBhcmdzKSwKLSAgICAgICAgR19EQlVTX0NBTExfRkxBR1NfTk9O
RSwKLSAgICAgICAgLTEsIDAsCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlD
YWxsYmFjaz4oV2ViUHJvY2Vzc1Rlc3RSdW5uZXI6OnRlc3RGaW5pc2hlZENhbGxiYWNrKSwKLSAg
ICAgICAgdGhpcyk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotICAgIGdfYnVz
X3Vud2F0Y2hfbmFtZSh3YXRjaGVySUQpOwotCi0gICAgcmV0dXJuIG1fdGVzdFJlc3VsdDsKLX0K
LQotdm9pZCBXZWJQcm9jZXNzVGVzdFJ1bm5lcjo6ZmluaXNoVGVzdChib29sIHJlc3VsdCkKLXsK
LSAgICBtX3Rlc3RSZXN1bHQgPSByZXN1bHQ7Ci0gICAgZ19tYWluX2xvb3BfcXVpdChtX21haW5M
b29wKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL1dlYlByb2Nlc3NUZXN0UnVubmVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9XZWJQcm9jZXNzVGVzdFJ1bm5lci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBjNDBmYTk2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL1dlYlByb2Nlc3NUZXN0UnVubmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1
MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwuCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYg
V2ViUHJvY2Vzc1Rlc3RSdW5uZXJfaAotI2RlZmluZSBXZWJQcm9jZXNzVGVzdFJ1bm5lcl9oCi0K
LSNpbmNsdWRlIDxnaW8vZ2lvLmg+Ci0jaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+Ci0jaW5j
bHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgotCi1jbGFzcyBXZWJQcm9jZXNzVGVzdFJ1bm5l
ciB7Ci1wdWJsaWM6Ci0gICAgV2ViUHJvY2Vzc1Rlc3RSdW5uZXIoKTsKLSAgICB+V2ViUHJvY2Vz
c1Rlc3RSdW5uZXIoKTsKLQotICAgIGJvb2wgcnVuVGVzdChjb25zdCBjaGFyKiBzdWl0ZU5hbWUs
IGNvbnN0IGNoYXIqIHRlc3ROYW1lLCBHVmFyaWFudCogYXJncyk7Ci0KLXByaXZhdGU6Ci0gICAg
c3RhdGljIHZvaWQgcHJveHlDcmVhdGVkQ2FsbGJhY2soR09iamVjdCosIEdBc3luY1Jlc3VsdCos
IFdlYlByb2Nlc3NUZXN0UnVubmVyKik7Ci0gICAgc3RhdGljIHZvaWQgb25OYW1lQXBwZWFyZWQo
R0RCdXNDb25uZWN0aW9uKiwgY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBncG9pbnRlcik7Ci0g
ICAgc3RhdGljIHZvaWQgb25OYW1lVmFuaXNoZWQoR0RCdXNDb25uZWN0aW9uKiwgY29uc3QgY2hh
ciosIGdwb2ludGVyKTsKLSAgICBzdGF0aWMgdm9pZCB0ZXN0RmluaXNoZWRDYWxsYmFjayhHREJ1
c1Byb3h5KiwgR0FzeW5jUmVzdWx0KiwgV2ViUHJvY2Vzc1Rlc3RSdW5uZXIqKTsKLQotICAgIEdE
QnVzUHJveHkqIHByb3h5KCk7Ci0gICAgdm9pZCBmaW5pc2hUZXN0KGJvb2wgcmVzdWx0KTsKLQot
ICAgIEdNYWluTG9vcCogbV9tYWluTG9vcDsKLSAgICBHUmVmUHRyPEdUZXN0REJ1cz4gbV9idXM7
Ci0gICAgR1JlZlB0cjxHREJ1c0Nvbm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKLSAgICBHUmVmUHRy
PEdEQnVzUHJveHk+IG1fcHJveHk7Ci0gICAgYm9vbCBtX3Rlc3RSZXN1bHQ7Ci19OwotCi0jZW5k
aWYgLy8gV2ViUHJvY2Vzc1Rlc3RSdW5uZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBlNmM4NDM0Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ0
NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0gKiBQb3J0
aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTEgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJWaWV3VGVzdC5o
IgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL0dPd25QdHJHdGsuaD4KLQotV2ViVmlld1Rlc3Q6OldlYlZpZXdUZXN0KCkKLSAgICA6
IG1fd2ViVmlldyhXRUJLSVRfV0VCX1ZJRVcoZ19vYmplY3RfcmVmX3Npbmsod2Via2l0X3dlYl92
aWV3X25ldygpKSkpCi0gICAgLCBtX21haW5Mb29wKGdfbWFpbl9sb29wX25ldygwLCBUUlVFKSkK
LSAgICAsIG1fcGFyZW50V2luZG93KDApCi0gICAgLCBtX2phdmFzY3JpcHRSZXN1bHQoMCkKLSAg
ICAsIG1fcmVzb3VyY2VEYXRhU2l6ZSgwKQotICAgICwgbV9zdXJmYWNlKDApCi17Ci0gICAgYXNz
ZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChtX3dlYlZpZXcpKTsK
LX0KLQotV2ViVmlld1Rlc3Q6On5XZWJWaWV3VGVzdCgpCi17Ci0gICAgaWYgKG1fcGFyZW50V2lu
ZG93KQotICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV9wYXJlbnRXaW5kb3cpOwotICAgIGlm
IChtX2phdmFzY3JpcHRSZXN1bHQpCi0gICAgICAgIHdlYmtpdF9qYXZhc2NyaXB0X3Jlc3VsdF91
bnJlZihtX2phdmFzY3JpcHRSZXN1bHQpOwotICAgIGlmIChtX3N1cmZhY2UpCi0gICAgICAgIGNh
aXJvX3N1cmZhY2VfZGVzdHJveShtX3N1cmZhY2UpOwotICAgIGdfb2JqZWN0X3VucmVmKG1fd2Vi
Vmlldyk7Ci0gICAgZ19tYWluX2xvb3BfdW5yZWYobV9tYWluTG9vcCk7Ci19Ci0KLXZvaWQgV2Vi
Vmlld1Rlc3Q6OmxvYWRVUkkoY29uc3QgY2hhciogdXJpKQotewotICAgIG1fYWN0aXZlVVJJID0g
dXJpOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaShtX3dlYlZpZXcsIHVyaSk7Ci19Ci0K
LXZvaWQgV2ViVmlld1Rlc3Q6OmxvYWRIdG1sKGNvbnN0IGNoYXIqIGh0bWwsIGNvbnN0IGNoYXIq
IGJhc2VVUkkpCi17Ci0gICAgaWYgKCFiYXNlVVJJKQotICAgICAgICBtX2FjdGl2ZVVSSSA9ICJh
Ym91dDpibGFuayI7Ci0gICAgZWxzZQotICAgICAgICBtX2FjdGl2ZVVSSSA9IGJhc2VVUkk7Ci0g
ICAgd2Via2l0X3dlYl92aWV3X2xvYWRfaHRtbChtX3dlYlZpZXcsIGh0bWwsIGJhc2VVUkkpOwot
fQotCi12b2lkIFdlYlZpZXdUZXN0Ojpsb2FkUGxhaW5UZXh0KGNvbnN0IGNoYXIqIHBsYWluVGV4
dCkKLXsKLSAgICBtX2FjdGl2ZVVSSSA9ICJhYm91dDpibGFuayI7Ci0gICAgd2Via2l0X3dlYl92
aWV3X2xvYWRfcGxhaW5fdGV4dChtX3dlYlZpZXcsIHBsYWluVGV4dCk7Ci19Ci0KLXZvaWQgV2Vi
Vmlld1Rlc3Q6OmxvYWRSZXF1ZXN0KFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QpCi17Ci0gICAg
bV9hY3RpdmVVUkkgPSB3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KTsKLSAgICB3
ZWJraXRfd2ViX3ZpZXdfbG9hZF9yZXF1ZXN0KG1fd2ViVmlldywgcmVxdWVzdCk7Ci19Ci0KLXZv
aWQgV2ViVmlld1Rlc3Q6OmxvYWRBbHRlcm5hdGVIVE1MKGNvbnN0IGNoYXIqIGh0bWwsIGNvbnN0
IGNoYXIqIGNvbnRlbnRVUkksIGNvbnN0IGNoYXIqIGJhc2VVUkkpCi17Ci0gICAgbV9hY3RpdmVV
UkkgPSBjb250ZW50VVJJOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX2FsdGVybmF0ZV9odG1s
KG1fd2ViVmlldywgaHRtbCwgY29udGVudFVSSSwgYmFzZVVSSSk7Ci19Ci0KLXZvaWQgV2ViVmll
d1Rlc3Q6OmdvQmFjaygpCi17Ci0gICAgaWYgKHdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayht
X3dlYlZpZXcpKSB7Ci0gICAgICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdCogbGlzdCA9IHdlYmtp
dF93ZWJfdmlld19nZXRfYmFja19mb3J3YXJkX2xpc3QobV93ZWJWaWV3KTsKLSAgICAgICAgV2Vi
S2l0QmFja0ZvcndhcmRMaXN0SXRlbSogaXRlbSA9IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9n
ZXRfbnRoX2l0ZW0obGlzdCwgLTEpOwotICAgICAgICBtX2FjdGl2ZVVSSSA9IHdlYmtpdF9iYWNr
X2ZvcndhcmRfbGlzdF9pdGVtX2dldF9vcmlnaW5hbF91cmkoaXRlbSk7Ci0gICAgfQotCi0gICAg
Ly8gQ2FsbCBnb19iYWNrIGV2ZW4gd2hlbiBjYW5fZ29fYmFjayByZXR1cm5zIEZBTFNFIHRvIGNo
ZWNrIG5vdGhpbmcgaGFwcGVucy4KLSAgICB3ZWJraXRfd2ViX3ZpZXdfZ29fYmFjayhtX3dlYlZp
ZXcpOwotfQotCi12b2lkIFdlYlZpZXdUZXN0Ojpnb0ZvcndhcmQoKQotewotICAgIGlmICh3ZWJr
aXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQobV93ZWJWaWV3KSkgewotICAgICAgICBXZWJLaXRC
YWNrRm9yd2FyZExpc3QqIGxpc3QgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2JhY2tfZm9yd2FyZF9s
aXN0KG1fd2ViVmlldyk7Ci0gICAgICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW0g
PSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X250aF9pdGVtKGxpc3QsIDEpOwotICAgICAg
ICBtX2FjdGl2ZVVSSSA9IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dldF9vcmlnaW5h
bF91cmkoaXRlbSk7Ci0gICAgfQotCi0gICAgLy8gQ2FsbCBnb19mb3J3YXJkIGV2ZW4gd2hlbiBj
YW5fZ29fZm9yd2FyZCByZXR1cm5zIEZBTFNFIHRvIGNoZWNrIG5vdGhpbmcgaGFwcGVucy4KLSAg
ICB3ZWJraXRfd2ViX3ZpZXdfZ29fZm9yd2FyZChtX3dlYlZpZXcpOwotfQotCi12b2lkIFdlYlZp
ZXdUZXN0Ojpnb1RvQmFja0ZvcndhcmRMaXN0SXRlbShXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVt
KiBpdGVtKQotewotICAgIG1fYWN0aXZlVVJJID0gd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0
ZW1fZ2V0X29yaWdpbmFsX3VyaShpdGVtKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfZ29fdG9fYmFj
a19mb3J3YXJkX2xpc3RfaXRlbShtX3dlYlZpZXcsIGl0ZW0pOwotfQotCi12b2lkIFdlYlZpZXdU
ZXN0OjpxdWl0TWFpbkxvb3AoKQotewotICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7
Ci19Ci0KLXZvaWQgV2ViVmlld1Rlc3Q6OnF1aXRNYWluTG9vcEFmdGVyUHJvY2Vzc2luZ1BlbmRp
bmdFdmVudHMoKQotewotICAgIHdoaWxlIChndGtfZXZlbnRzX3BlbmRpbmcoKSkKLSAgICAgICAg
Z3RrX21haW5faXRlcmF0aW9uKCk7Ci0gICAgcXVpdE1haW5Mb29wKCk7Ci19Ci0KLXN0YXRpYyBn
Ym9vbGVhbiBxdWl0TWFpbkxvb3BJZGxlQ2FsbGJhY2soV2ViVmlld1Rlc3QqIHRlc3QpCi17Ci0g
ICAgdGVzdC0+cXVpdE1haW5Mb29wKCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCi12b2lkIFdl
YlZpZXdUZXN0Ojp3YWl0KGRvdWJsZSBzZWNvbmRzKQotewotICAgIGdfdGltZW91dF9hZGRfc2Vj
b25kcyhzZWNvbmRzLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihxdWl0TWFpbkxvb3BJ
ZGxlQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Ci19
Ci0KLXN0YXRpYyB2b2lkIGxvYWRDaGFuZ2VkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktp
dExvYWRFdmVudCBsb2FkRXZlbnQsIFdlYlZpZXdUZXN0KiB0ZXN0KQotewotICAgIGlmIChsb2Fk
RXZlbnQgIT0gV0VCS0lUX0xPQURfRklOSVNIRUQpCi0gICAgICAgIHJldHVybjsKLSAgICBnX3Np
Z25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMod2ViVmlldywgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4obG9hZENoYW5nZWQpLCB0ZXN0KTsKLSAgICBnX21haW5fbG9vcF9xdWl0KHRlc3Qt
Pm1fbWFpbkxvb3ApOwotfQotCi12b2lkIFdlYlZpZXdUZXN0Ojp3YWl0VW50aWxMb2FkRmluaXNo
ZWQoKQotewotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAibG9hZC1jaGFuZ2VkIiwg
R19DQUxMQkFDSyhsb2FkQ2hhbmdlZCksIHRoaXMpOwotICAgIGdfbWFpbl9sb29wX3J1bihtX21h
aW5Mb29wKTsKLX0KLQotc3RhdGljIHZvaWQgdGl0bGVDaGFuZ2VkKFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcsIEdQYXJhbVNwZWMqLCBXZWJWaWV3VGVzdCogdGVzdCkKLXsKLSAgICBpZiAoIXRlc3Qt
Pm1fZXhwZWN0ZWRUaXRsZS5pc051bGwoKSAmJiB0ZXN0LT5tX2V4cGVjdGVkVGl0bGUgIT0gd2Vi
a2l0X3dlYl92aWV3X2dldF90aXRsZSh3ZWJWaWV3KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Z19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKHdlYlZpZXcsIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KHRpdGxlQ2hhbmdlZCksIHRlc3QpOwotICAgIGdfbWFpbl9sb29wX3F1aXQo
dGVzdC0+bV9tYWluTG9vcCk7Ci19Ci0KLXZvaWQgV2ViVmlld1Rlc3Q6OndhaXRVbnRpbFRpdGxl
Q2hhbmdlZFRvKGNvbnN0IGNoYXIqIGV4cGVjdGVkVGl0bGUpCi17Ci0gICAgbV9leHBlY3RlZFRp
dGxlID0gZXhwZWN0ZWRUaXRsZTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgIm5v
dGlmeTo6dGl0bGUiLCBHX0NBTExCQUNLKHRpdGxlQ2hhbmdlZCksIHRoaXMpOwotICAgIGdfbWFp
bl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAgICBtX2V4cGVjdGVkVGl0bGUgPSBDU3RyaW5nKCk7
Ci19Ci0KLXZvaWQgV2ViVmlld1Rlc3Q6OndhaXRVbnRpbFRpdGxlQ2hhbmdlZCgpCi17Ci0gICAg
d2FpdFVudGlsVGl0bGVDaGFuZ2VkVG8oMCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBwYXJlbnRX
aW5kb3dNYXBwZWQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50KiwgV2ViVmlld1Rlc3QqIHRl
c3QpCi17Ci0gICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKHdpZGdldCwg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocGFyZW50V2luZG93TWFwcGVkKSwgdGVzdCk7Ci0gICAg
Z19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKLQotICAgIHJldHVybiBGQUxTRTsK
LX0KLQotdm9pZCBXZWJWaWV3VGVzdDo6c2hvd0luV2luZG93KEd0a1dpbmRvd1R5cGUgd2luZG93
VHlwZSkKLXsKLSAgICBnX2Fzc2VydCghbV9wYXJlbnRXaW5kb3cpOwotICAgIG1fcGFyZW50V2lu
ZG93ID0gZ3RrX3dpbmRvd19uZXcod2luZG93VHlwZSk7Ci0gICAgZ3RrX2NvbnRhaW5lcl9hZGQo
R1RLX0NPTlRBSU5FUihtX3BhcmVudFdpbmRvdyksIEdUS19XSURHRVQobV93ZWJWaWV3KSk7Ci0g
ICAgZ3RrX3dpZGdldF9zaG93KEdUS19XSURHRVQobV93ZWJWaWV3KSk7Ci0gICAgZ3RrX3dpZGdl
dF9zaG93KG1fcGFyZW50V2luZG93KTsKLX0KLQotdm9pZCBXZWJWaWV3VGVzdDo6c2hvd0luV2lu
ZG93QW5kV2FpdFVudGlsTWFwcGVkKEd0a1dpbmRvd1R5cGUgd2luZG93VHlwZSkKLXsKLSAgICBn
X2Fzc2VydCghbV9wYXJlbnRXaW5kb3cpOwotICAgIG1fcGFyZW50V2luZG93ID0gZ3RrX3dpbmRv
d19uZXcod2luZG93VHlwZSk7Ci0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUiht
X3BhcmVudFdpbmRvdyksIEdUS19XSURHRVQobV93ZWJWaWV3KSk7Ci0gICAgZ3RrX3dpZGdldF9z
aG93KEdUS19XSURHRVQobV93ZWJWaWV3KSk7Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fcGFy
ZW50V2luZG93LCAibWFwLWV2ZW50IiwgR19DQUxMQkFDSyhwYXJlbnRXaW5kb3dNYXBwZWQpLCB0
aGlzKTsKLSAgICBndGtfd2lkZ2V0X3Nob3cobV9wYXJlbnRXaW5kb3cpOwotICAgIGdfbWFpbl9s
b29wX3J1bihtX21haW5Mb29wKTsKLX0KLQotdm9pZCBXZWJWaWV3VGVzdDo6cmVzaXplVmlldyhp
bnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uOwot
ICAgIGd0a193aWRnZXRfZ2V0X2FsbG9jYXRpb24oR1RLX1dJREdFVChtX3dlYlZpZXcpLCAmYWxs
b2NhdGlvbik7Ci0gICAgaWYgKHdpZHRoICE9IC0xKQotICAgICAgICBhbGxvY2F0aW9uLndpZHRo
ID0gd2lkdGg7Ci0gICAgaWYgKGhlaWdodCAhPSAtMSkKLSAgICAgICAgYWxsb2NhdGlvbi5oZWln
aHQgPSBoZWlnaHQ7Ci0gICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQobV93
ZWJWaWV3KSwgJmFsbG9jYXRpb24pOwotfQotCi12b2lkIFdlYlZpZXdUZXN0OjpzZWxlY3RBbGwo
KQotewotICAgIHdlYmtpdF93ZWJfdmlld19leGVjdXRlX2VkaXRpbmdfY29tbWFuZChtX3dlYlZp
ZXcsICJTZWxlY3RBbGwiKTsKLX0KLQotc3RhdGljIHZvaWQgcmVzb3VyY2VHZXREYXRhQ2FsbGJh
Y2soR09iamVjdCogb2JqZWN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRh
dGEpCi17Ci0gICAgc2l6ZV90IGRhdGFTaXplOwotICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsK
LSAgICB1bnNpZ25lZCBjaGFyKiBkYXRhID0gd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZGF0YV9m
aW5pc2goV0VCS0lUX1dFQl9SRVNPVVJDRShvYmplY3QpLCByZXN1bHQsICZkYXRhU2l6ZSwgJmVy
cm9yLm91dFB0cigpKTsKLSAgICBnX2Fzc2VydChkYXRhKTsKLQotICAgIFdlYlZpZXdUZXN0KiB0
ZXN0ID0gc3RhdGljX2Nhc3Q8V2ViVmlld1Rlc3QqPih1c2VyRGF0YSk7Ci0gICAgdGVzdC0+bV9y
ZXNvdXJjZURhdGEuc2V0KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGRhdGEpKTsKLSAgICB0ZXN0
LT5tX3Jlc291cmNlRGF0YVNpemUgPSBkYXRhU2l6ZTsKLSAgICBnX21haW5fbG9vcF9xdWl0KHRl
c3QtPm1fbWFpbkxvb3ApOwotfQotCi1jb25zdCBjaGFyKiBXZWJWaWV3VGVzdDo6bWFpblJlc291
cmNlRGF0YShzaXplX3QmIG1haW5SZXNvdXJjZURhdGFTaXplKQotewotICAgIG1fcmVzb3VyY2VE
YXRhU2l6ZSA9IDA7Ci0gICAgbV9yZXNvdXJjZURhdGEuY2xlYXIoKTsKLSAgICBXZWJLaXRXZWJS
ZXNvdXJjZSogcmVzb3VyY2UgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2UobV93
ZWJWaWV3KTsKLSAgICBnX2Fzc2VydChyZXNvdXJjZSk7Ci0KLSAgICB3ZWJraXRfd2ViX3Jlc291
cmNlX2dldF9kYXRhKHJlc291cmNlLCAwLCByZXNvdXJjZUdldERhdGFDYWxsYmFjaywgdGhpcyk7
Ci0gICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotCi0gICAgbWFpblJlc291cmNlRGF0
YVNpemUgPSBtX3Jlc291cmNlRGF0YVNpemU7Ci0gICAgcmV0dXJuIG1fcmVzb3VyY2VEYXRhLmdl
dCgpOwotfQotCi12b2lkIFdlYlZpZXdUZXN0Ojptb3VzZU1vdmVUbyhpbnQgeCwgaW50IHksIHVu
c2lnbmVkIGludCBtb3VzZU1vZGlmaWVycykKLXsKLSAgICBnX2Fzc2VydChtX3BhcmVudFdpbmRv
dyk7Ci0gICAgR3RrV2lkZ2V0KiB2aWV3V2lkZ2V0ID0gR1RLX1dJREdFVChtX3dlYlZpZXcpOwot
ICAgIGdfYXNzZXJ0KGd0a193aWRnZXRfZ2V0X3JlYWxpemVkKHZpZXdXaWRnZXQpKTsKLQotICAg
IEdPd25QdHI8R2RrRXZlbnQ+IGV2ZW50KGdka19ldmVudF9uZXcoR0RLX01PVElPTl9OT1RJRlkp
KTsKLSAgICBldmVudC0+bW90aW9uLnggPSB4OwotICAgIGV2ZW50LT5tb3Rpb24ueSA9IHk7Ci0K
LSAgICBldmVudC0+bW90aW9uLnRpbWUgPSBHREtfQ1VSUkVOVF9USU1FOwotICAgIGV2ZW50LT5t
b3Rpb24ud2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KHZpZXdXaWRnZXQpOwotICAgIGdf
b2JqZWN0X3JlZihldmVudC0+bW90aW9uLndpbmRvdyk7Ci0gICAgZXZlbnQtPm1vdGlvbi5kZXZp
Y2UgPSBnZGtfZGV2aWNlX21hbmFnZXJfZ2V0X2NsaWVudF9wb2ludGVyKGdka19kaXNwbGF5X2dl
dF9kZXZpY2VfbWFuYWdlcihndGtfd2lkZ2V0X2dldF9kaXNwbGF5KHZpZXdXaWRnZXQpKSk7Ci0g
ICAgZXZlbnQtPm1vdGlvbi5zdGF0ZSA9IG1vdXNlTW9kaWZpZXJzOwotICAgIGV2ZW50LT5tb3Rp
b24uYXhlcyA9IDA7Ci0KLSAgICBpbnQgeFJvb3QsIHlSb290OwotICAgIGdka193aW5kb3dfZ2V0
X3Jvb3RfY29vcmRzKGd0a193aWRnZXRfZ2V0X3dpbmRvdyh2aWV3V2lkZ2V0KSwgeCwgeSwgJnhS
b290LCAmeVJvb3QpOwotICAgIGV2ZW50LT5tb3Rpb24ueF9yb290ID0geFJvb3Q7Ci0gICAgZXZl
bnQtPm1vdGlvbi55X3Jvb3QgPSB5Um9vdDsKLSAgICBndGtfbWFpbl9kb19ldmVudChldmVudC5n
ZXQoKSk7Ci19Ci0KLXZvaWQgV2ViVmlld1Rlc3Q6OmNsaWNrTW91c2VCdXR0b24oaW50IHgsIGlu
dCB5LCB1bnNpZ25lZCBpbnQgYnV0dG9uLCB1bnNpZ25lZCBpbnQgbW91c2VNb2RpZmllcnMpCi17
Ci0gICAgZG9Nb3VzZUJ1dHRvbkV2ZW50KEdES19CVVRUT05fUFJFU1MsIHgsIHksIGJ1dHRvbiwg
bW91c2VNb2RpZmllcnMpOwotICAgIGRvTW91c2VCdXR0b25FdmVudChHREtfQlVUVE9OX1JFTEVB
U0UsIHgsIHksIGJ1dHRvbiwgbW91c2VNb2RpZmllcnMpOwotfQotCi12b2lkIFdlYlZpZXdUZXN0
OjprZXlTdHJva2UodW5zaWduZWQgaW50IGtleVZhbCwgdW5zaWduZWQgaW50IGtleU1vZGlmaWVy
cykKLXsKLSAgICBnX2Fzc2VydChtX3BhcmVudFdpbmRvdyk7Ci0gICAgR3RrV2lkZ2V0KiB2aWV3
V2lkZ2V0ID0gR1RLX1dJREdFVChtX3dlYlZpZXcpOwotICAgIGdfYXNzZXJ0KGd0a193aWRnZXRf
Z2V0X3JlYWxpemVkKHZpZXdXaWRnZXQpKTsKLQotICAgIEdPd25QdHI8R2RrRXZlbnQ+IGV2ZW50
KGdka19ldmVudF9uZXcoR0RLX0tFWV9QUkVTUykpOwotICAgIGV2ZW50LT5rZXkua2V5dmFsID0g
a2V5VmFsOwotCi0gICAgZXZlbnQtPmtleS50aW1lID0gR0RLX0NVUlJFTlRfVElNRTsKLSAgICBl
dmVudC0+a2V5LndpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyh2aWV3V2lkZ2V0KTsKLSAg
ICBnX29iamVjdF9yZWYoZXZlbnQtPmtleS53aW5kb3cpOwotICAgIGdka19ldmVudF9zZXRfZGV2
aWNlKGV2ZW50LmdldCgpLCBnZGtfZGV2aWNlX21hbmFnZXJfZ2V0X2NsaWVudF9wb2ludGVyKGdk
a19kaXNwbGF5X2dldF9kZXZpY2VfbWFuYWdlcihndGtfd2lkZ2V0X2dldF9kaXNwbGF5KHZpZXdX
aWRnZXQpKSkpOwotICAgIGV2ZW50LT5rZXkuc3RhdGUgPSBrZXlNb2RpZmllcnM7Ci0KLSAgICAv
LyBXaGVuIHN5bnRoZXNpemluZyBhbiBldmVudCwgYW4gaW52YWxpZCBoYXJkd2FyZV9rZXljb2Rl
IHZhbHVlIGNhbiBjYXVzZSBpdCB0byBiZSBiYWRseSBwcm9jZXNzZWQgYnkgR1RLKy4KLSAgICBH
T3duUHRyPEdka0tleW1hcEtleT4ga2V5czsKLSAgICBpbnQga2V5c0NvdW50OwotICAgIGlmIChn
ZGtfa2V5bWFwX2dldF9lbnRyaWVzX2Zvcl9rZXl2YWwoZ2RrX2tleW1hcF9nZXRfZGVmYXVsdCgp
LCBrZXlWYWwsICZrZXlzLm91dFB0cigpLCAma2V5c0NvdW50KSkKLSAgICAgICAgZXZlbnQtPmtl
eS5oYXJkd2FyZV9rZXljb2RlID0ga2V5cy5nZXQoKVswXS5rZXljb2RlOwotCi0gICAgZ3RrX21h
aW5fZG9fZXZlbnQoZXZlbnQuZ2V0KCkpOwotICAgIGV2ZW50LT5rZXkudHlwZSA9IEdES19LRVlf
UkVMRUFTRTsKLSAgICBndGtfbWFpbl9kb19ldmVudChldmVudC5nZXQoKSk7Ci19Ci0KLXZvaWQg
V2ViVmlld1Rlc3Q6OmRvTW91c2VCdXR0b25FdmVudChHZGtFdmVudFR5cGUgZXZlbnRUeXBlLCBp
bnQgeCwgaW50IHksIHVuc2lnbmVkIGludCBidXR0b24sIHVuc2lnbmVkIGludCBtb3VzZU1vZGlm
aWVycykKLXsKLSAgICBnX2Fzc2VydChtX3BhcmVudFdpbmRvdyk7Ci0gICAgR3RrV2lkZ2V0KiB2
aWV3V2lkZ2V0ID0gR1RLX1dJREdFVChtX3dlYlZpZXcpOwotICAgIGdfYXNzZXJ0KGd0a193aWRn
ZXRfZ2V0X3JlYWxpemVkKHZpZXdXaWRnZXQpKTsKLQotICAgIEdPd25QdHI8R2RrRXZlbnQ+IGV2
ZW50KGdka19ldmVudF9uZXcoZXZlbnRUeXBlKSk7Ci0gICAgZXZlbnQtPmJ1dHRvbi53aW5kb3cg
PSBndGtfd2lkZ2V0X2dldF93aW5kb3codmlld1dpZGdldCk7Ci0gICAgZ19vYmplY3RfcmVmKGV2
ZW50LT5idXR0b24ud2luZG93KTsKLQotICAgIGV2ZW50LT5idXR0b24udGltZSA9IEdES19DVVJS
RU5UX1RJTUU7Ci0gICAgZXZlbnQtPmJ1dHRvbi54ID0geDsKLSAgICBldmVudC0+YnV0dG9uLnkg
PSB5OwotICAgIGV2ZW50LT5idXR0b24uYXhlcyA9IDA7Ci0gICAgZXZlbnQtPmJ1dHRvbi5zdGF0
ZSA9IG1vdXNlTW9kaWZpZXJzOwotICAgIGV2ZW50LT5idXR0b24uYnV0dG9uID0gYnV0dG9uOwot
Ci0gICAgZXZlbnQtPmJ1dHRvbi5kZXZpY2UgPSBnZGtfZGV2aWNlX21hbmFnZXJfZ2V0X2NsaWVu
dF9wb2ludGVyKGdka19kaXNwbGF5X2dldF9kZXZpY2VfbWFuYWdlcihndGtfd2lkZ2V0X2dldF9k
aXNwbGF5KHZpZXdXaWRnZXQpKSk7Ci0KLSAgICBpbnQgeFJvb3QsIHlSb290OwotICAgIGdka193
aW5kb3dfZ2V0X3Jvb3RfY29vcmRzKGd0a193aWRnZXRfZ2V0X3dpbmRvdyh2aWV3V2lkZ2V0KSwg
eCwgeSwgJnhSb290LCAmeVJvb3QpOwotICAgIGV2ZW50LT5idXR0b24ueF9yb290ID0geFJvb3Q7
Ci0gICAgZXZlbnQtPmJ1dHRvbi55X3Jvb3QgPSB5Um9vdDsKLSAgICBndGtfbWFpbl9kb19ldmVu
dChldmVudC5nZXQoKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ1bkphdmFTY3JpcHRSZWFkeUNhbGxi
YWNrKEdPYmplY3QqLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgV2ViVmlld1Rlc3QqIHRlc3QpCi17
Ci0gICAgdGVzdC0+bV9qYXZhc2NyaXB0UmVzdWx0ID0gd2Via2l0X3dlYl92aWV3X3J1bl9qYXZh
c2NyaXB0X2ZpbmlzaCh0ZXN0LT5tX3dlYlZpZXcsIHJlc3VsdCwgdGVzdC0+bV9qYXZhc2NyaXB0
RXJyb3IpOwotICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7Ci19Ci0KLXN0
YXRpYyB2b2lkIHJ1bkphdmFTY3JpcHRGcm9tR1Jlc291cmNlUmVhZHlDYWxsYmFjayhHT2JqZWN0
KiwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIFdlYlZpZXdUZXN0KiB0ZXN0KQotewotICAgIHRlc3Qt
Pm1famF2YXNjcmlwdFJlc3VsdCA9IHdlYmtpdF93ZWJfdmlld19ydW5famF2YXNjcmlwdF9mcm9t
X2dyZXNvdXJjZV9maW5pc2godGVzdC0+bV93ZWJWaWV3LCByZXN1bHQsIHRlc3QtPm1famF2YXNj
cmlwdEVycm9yKTsKLSAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOwotfQot
Ci1XZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBXZWJWaWV3VGVzdDo6cnVuSmF2YVNjcmlwdEFuZFdh
aXRVbnRpbEZpbmlzaGVkKGNvbnN0IGNoYXIqIGphdmFzY3JpcHQsIEdFcnJvcioqIGVycm9yKQot
ewotICAgIGlmIChtX2phdmFzY3JpcHRSZXN1bHQpCi0gICAgICAgIHdlYmtpdF9qYXZhc2NyaXB0
X3Jlc3VsdF91bnJlZihtX2phdmFzY3JpcHRSZXN1bHQpOwotICAgIG1famF2YXNjcmlwdFJlc3Vs
dCA9IDA7Ci0gICAgbV9qYXZhc2NyaXB0RXJyb3IgPSBlcnJvcjsKLSAgICB3ZWJraXRfd2ViX3Zp
ZXdfcnVuX2phdmFzY3JpcHQobV93ZWJWaWV3LCBqYXZhc2NyaXB0LCAwLCByZWludGVycHJldF9j
YXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KHJ1bkphdmFTY3JpcHRSZWFkeUNhbGxiYWNrKSwgdGhp
cyk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotCi0gICAgcmV0dXJuIG1famF2
YXNjcmlwdFJlc3VsdDsKLX0KLQotV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCogV2ViVmlld1Rlc3Q6
OnJ1bkphdmFTY3JpcHRGcm9tR1Jlc291cmNlQW5kV2FpdFVudGlsRmluaXNoZWQoY29uc3QgY2hh
ciogcmVzb3VyY2UsIEdFcnJvcioqIGVycm9yKQotewotICAgIGlmIChtX2phdmFzY3JpcHRSZXN1
bHQpCi0gICAgICAgIHdlYmtpdF9qYXZhc2NyaXB0X3Jlc3VsdF91bnJlZihtX2phdmFzY3JpcHRS
ZXN1bHQpOwotICAgIG1famF2YXNjcmlwdFJlc3VsdCA9IDA7Ci0gICAgbV9qYXZhc2NyaXB0RXJy
b3IgPSBlcnJvcjsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfcnVuX2phdmFzY3JpcHRfZnJvbV9ncmVz
b3VyY2UobV93ZWJWaWV3LCByZXNvdXJjZSwgMCwgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFk
eUNhbGxiYWNrPihydW5KYXZhU2NyaXB0RnJvbUdSZXNvdXJjZVJlYWR5Q2FsbGJhY2spLCB0aGlz
KTsKLSAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Ci0KLSAgICByZXR1cm4gbV9qYXZh
c2NyaXB0UmVzdWx0OwotfQotCi1zdGF0aWMgY2hhcioganNWYWx1ZVRvQ1N0cmluZyhKU0dsb2Jh
bENvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKLXsKLSAgICBnX2Fzc2VydCh2
YWx1ZSk7Ci0gICAgZ19hc3NlcnQoSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIHZhbHVlKSk7Ci0K
LSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gc3RyaW5nVmFsdWUoQWRvcHQsIEpTVmFsdWVU
b1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsIDApKTsKLSAgICBnX2Fzc2VydChzdHJpbmdWYWx1
ZSk7Ci0KLSAgICBzaXplX3QgY1N0cmluZ0xlbmd0aCA9IEpTU3RyaW5nR2V0TWF4aW11bVVURjhD
U3RyaW5nU2l6ZShzdHJpbmdWYWx1ZS5nZXQoKSk7Ci0gICAgY2hhciogY1N0cmluZyA9IHN0YXRp
Y19jYXN0PGNoYXIqPihnX21hbGxvYyhjU3RyaW5nTGVuZ3RoKSk7Ci0gICAgSlNTdHJpbmdHZXRV
VEY4Q1N0cmluZyhzdHJpbmdWYWx1ZS5nZXQoKSwgY1N0cmluZywgY1N0cmluZ0xlbmd0aCk7Ci0g
ICAgcmV0dXJuIGNTdHJpbmc7Ci19Ci0KLWNoYXIqIFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVz
dWx0VG9DU3RyaW5nKFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQpCi17
Ci0gICAgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQgPSB3ZWJraXRfamF2YXNjcmlwdF9yZXN1
bHRfZ2V0X2dsb2JhbF9jb250ZXh0KGphdmFzY3JpcHRSZXN1bHQpOwotICAgIGdfYXNzZXJ0KGNv
bnRleHQpOwotICAgIHJldHVybiBqc1ZhbHVlVG9DU3RyaW5nKGNvbnRleHQsIHdlYmtpdF9qYXZh
c2NyaXB0X3Jlc3VsdF9nZXRfdmFsdWUoamF2YXNjcmlwdFJlc3VsdCkpOwotfQotCi1kb3VibGUg
V2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb051bWJlcihXZWJLaXRKYXZhc2NyaXB0UmVz
dWx0KiBqYXZhc2NyaXB0UmVzdWx0KQotewotICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0
ID0gd2Via2l0X2phdmFzY3JpcHRfcmVzdWx0X2dldF9nbG9iYWxfY29udGV4dChqYXZhc2NyaXB0
UmVzdWx0KTsKLSAgICBnX2Fzc2VydChjb250ZXh0KTsKLSAgICBKU1ZhbHVlUmVmIHZhbHVlID0g
d2Via2l0X2phdmFzY3JpcHRfcmVzdWx0X2dldF92YWx1ZShqYXZhc2NyaXB0UmVzdWx0KTsKLSAg
ICBnX2Fzc2VydCh2YWx1ZSk7Ci0gICAgZ19hc3NlcnQoSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQs
IHZhbHVlKSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIHZhbHVlLCAw
KTsKLX0KLQotYm9vbCBXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQm9vbGVhbihXZWJL
aXRKYXZhc2NyaXB0UmVzdWx0KiBqYXZhc2NyaXB0UmVzdWx0KQotewotICAgIEpTR2xvYmFsQ29u
dGV4dFJlZiBjb250ZXh0ID0gd2Via2l0X2phdmFzY3JpcHRfcmVzdWx0X2dldF9nbG9iYWxfY29u
dGV4dChqYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBnX2Fzc2VydChjb250ZXh0KTsKLSAgICBKU1Zh
bHVlUmVmIHZhbHVlID0gd2Via2l0X2phdmFzY3JpcHRfcmVzdWx0X2dldF92YWx1ZShqYXZhc2Ny
aXB0UmVzdWx0KTsKLSAgICBnX2Fzc2VydCh2YWx1ZSk7Ci0gICAgZ19hc3NlcnQoSlNWYWx1ZUlz
Qm9vbGVhbihjb250ZXh0LCB2YWx1ZSkpOwotCi0gICAgcmV0dXJuIEpTVmFsdWVUb0Jvb2xlYW4o
Y29udGV4dCwgdmFsdWUpOwotfQotCi1ib29sIFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0
SXNOdWxsKFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQpCi17Ci0gICAg
SlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQgPSB3ZWJraXRfamF2YXNjcmlwdF9yZXN1bHRfZ2V0
X2dsb2JhbF9jb250ZXh0KGphdmFzY3JpcHRSZXN1bHQpOwotICAgIGdfYXNzZXJ0KGNvbnRleHQp
OwotICAgIEpTVmFsdWVSZWYgdmFsdWUgPSB3ZWJraXRfamF2YXNjcmlwdF9yZXN1bHRfZ2V0X3Zh
bHVlKGphdmFzY3JpcHRSZXN1bHQpOwotICAgIGdfYXNzZXJ0KHZhbHVlKTsKLQotICAgIHJldHVy
biBKU1ZhbHVlSXNOdWxsKGNvbnRleHQsIHZhbHVlKTsKLX0KLQotYm9vbCBXZWJWaWV3VGVzdDo6
amF2YXNjcmlwdFJlc3VsdElzVW5kZWZpbmVkKFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFz
Y3JpcHRSZXN1bHQpCi17Ci0gICAgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQgPSB3ZWJraXRf
amF2YXNjcmlwdF9yZXN1bHRfZ2V0X2dsb2JhbF9jb250ZXh0KGphdmFzY3JpcHRSZXN1bHQpOwot
ICAgIGdfYXNzZXJ0KGNvbnRleHQpOwotICAgIEpTVmFsdWVSZWYgdmFsdWUgPSB3ZWJraXRfamF2
YXNjcmlwdF9yZXN1bHRfZ2V0X3ZhbHVlKGphdmFzY3JpcHRSZXN1bHQpOwotICAgIGdfYXNzZXJ0
KHZhbHVlKTsKLQotICAgIHJldHVybiBKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwgdmFsdWUp
OwotfQotCi1zdGF0aWMgdm9pZCBvblNuYXBzaG90UmVhZHkoV2ViS2l0V2ViVmlldyogd2ViX3Zp
ZXcsIEdBc3luY1Jlc3VsdCogcmVzLCBXZWJWaWV3VGVzdCogdGVzdCkKLXsKLSAgICBHT3duUHRy
PEdFcnJvcj4gZXJyb3I7Ci0gICAgdGVzdC0+bV9zdXJmYWNlID0gd2Via2l0X3dlYl92aWV3X2dl
dF9zbmFwc2hvdF9maW5pc2god2ViX3ZpZXcsIHJlcywgJmVycm9yLm91dFB0cigpKTsKLSAgICBn
X2Fzc2VydCghdGVzdC0+bV9zdXJmYWNlIHx8ICFlcnJvci5nZXQoKSk7Ci0gICAgaWYgKGVycm9y
KQotICAgICAgICBnX2Fzc2VydF9lcnJvcihlcnJvci5nZXQoKSwgV0VCS0lUX1NOQVBTSE9UX0VS
Uk9SLCBXRUJLSVRfU05BUFNIT1RfRVJST1JfRkFJTEVEX1RPX0NSRUFURSk7Ci0gICAgdGVzdC0+
cXVpdE1haW5Mb29wKCk7Ci19Ci0KLWNhaXJvX3N1cmZhY2VfdCogV2ViVmlld1Rlc3Q6OmdldFNu
YXBzaG90QW5kV2FpdFVudGlsUmVhZHkoV2ViS2l0U25hcHNob3RSZWdpb24gcmVnaW9uLCBXZWJL
aXRTbmFwc2hvdE9wdGlvbnMgb3B0aW9ucykKLXsKLSAgICBpZiAobV9zdXJmYWNlKQotICAgICAg
ICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3kobV9zdXJmYWNlKTsKLSAgICBtX3N1cmZhY2UgPSAwOwot
ICAgIHdlYmtpdF93ZWJfdmlld19nZXRfc25hcHNob3QobV93ZWJWaWV3LCByZWdpb24sIG9wdGlv
bnMsIDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4ob25TbmFwc2hvdFJl
YWR5KSwgdGhpcyk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotICAgIHJldHVy
biBtX3N1cmZhY2U7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvV2ViVmlld1Rlc3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ2
MGUyMi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0
cy9XZWJWaWV3VGVzdC5oCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgotICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAy
MDExIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVm
IFdlYlZpZXdUZXN0X2gKLSNkZWZpbmUgV2ViVmlld1Rlc3RfaAotCi0jaW5jbHVkZSAiVGVzdE1h
aW4uaCIKLSNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdDIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+Ci0KLWNsYXNzIFdlYlZpZXdUZXN0OiBwdWJsaWMgVGVzdCB7Ci1wdWJsaWM6Ci0g
ICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShXZWJWaWV3VGVzdCk7Ci0gICAgV2ViVmlld1Rlc3Qo
KTsKLSAgICB2aXJ0dWFsIH5XZWJWaWV3VGVzdCgpOwotCi0gICAgdmlydHVhbCB2b2lkIGxvYWRV
UkkoY29uc3QgY2hhciogdXJpKTsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZEh0bWwoY29uc3QgY2hh
ciogaHRtbCwgY29uc3QgY2hhciogYmFzZVVSSSk7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRQbGFp
blRleHQoY29uc3QgY2hhciogcGxhaW5UZXh0KTsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlcXVl
c3QoV2ViS2l0VVJJUmVxdWVzdCopOwotICAgIHZvaWQgbG9hZEFsdGVybmF0ZUhUTUwoY29uc3Qg
Y2hhciogaHRtbCwgY29uc3QgY2hhciogY29udGVudFVSSSwgY29uc3QgY2hhciogYmFzZVVSSSk7
Ci0gICAgdm9pZCBnb0JhY2soKTsKLSAgICB2b2lkIGdvRm9yd2FyZCgpOwotICAgIHZvaWQgZ29U
b0JhY2tGb3J3YXJkTGlzdEl0ZW0oV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSopOwotCi0gICAg
dm9pZCBxdWl0TWFpbkxvb3AoKTsKLSAgICB2b2lkIHF1aXRNYWluTG9vcEFmdGVyUHJvY2Vzc2lu
Z1BlbmRpbmdFdmVudHMoKTsKLSAgICB2b2lkIHdhaXQoZG91YmxlIHNlY29uZHMpOwotICAgIHZv
aWQgd2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgdm9pZCB3YWl0VW50aWxUaXRsZUNoYW5n
ZWRUbyhjb25zdCBjaGFyKiBleHBlY3RlZFRpdGxlKTsKLSAgICB2b2lkIHdhaXRVbnRpbFRpdGxl
Q2hhbmdlZCgpOwotICAgIHZvaWQgc2hvd0luV2luZG93KEd0a1dpbmRvd1R5cGUgPSBHVEtfV0lO
RE9XX1BPUFVQKTsKLSAgICB2b2lkIHNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZChHdGtX
aW5kb3dUeXBlID0gR1RLX1dJTkRPV19QT1BVUCk7Ci0gICAgdm9pZCByZXNpemVWaWV3KGludCB3
aWR0aCwgaW50IGhlaWdodCk7Ci0gICAgdm9pZCBzZWxlY3RBbGwoKTsKLSAgICBjb25zdCBjaGFy
KiBtYWluUmVzb3VyY2VEYXRhKHNpemVfdCYgbWFpblJlc291cmNlRGF0YVNpemUpOwotCi0gICAg
dm9pZCBtb3VzZU1vdmVUbyhpbnQgeCwgaW50IHksIHVuc2lnbmVkIGludCBtb3VzZU1vZGlmaWVy
cyA9IDApOwotICAgIHZvaWQgY2xpY2tNb3VzZUJ1dHRvbihpbnQgeCwgaW50IHksIHVuc2lnbmVk
IGludCBidXR0b24gPSAxLCB1bnNpZ25lZCBpbnQgbW91c2VNb2RpZmllcnMgPSAwKTsKLSAgICB2
b2lkIGtleVN0cm9rZSh1bnNpZ25lZCBpbnQga2V5VmFsLCB1bnNpZ25lZCBpbnQga2V5TW9kaWZp
ZXJzID0gMCk7Ci0KLSAgICBXZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBydW5KYXZhU2NyaXB0QW5k
V2FpdFVudGlsRmluaXNoZWQoY29uc3QgY2hhciogamF2YXNjcmlwdCwgR0Vycm9yKiopOwotICAg
IFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIHJ1bkphdmFTY3JpcHRGcm9tR1Jlc291cmNlQW5kV2Fp
dFVudGlsRmluaXNoZWQoY29uc3QgY2hhciogcmVzb3VyY2UsIEdFcnJvcioqKTsKLQotICAgIC8v
IEphdmFzY3JpcHQgcmVzdWx0IGhlbHBlcnMuCi0gICAgc3RhdGljIGNoYXIqIGphdmFzY3JpcHRS
ZXN1bHRUb0NTdHJpbmcoV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCopOwotICAgIHN0YXRpYyBkb3Vi
bGUgamF2YXNjcmlwdFJlc3VsdFRvTnVtYmVyKFdlYktpdEphdmFzY3JpcHRSZXN1bHQqKTsKLSAg
ICBzdGF0aWMgYm9vbCBqYXZhc2NyaXB0UmVzdWx0VG9Cb29sZWFuKFdlYktpdEphdmFzY3JpcHRS
ZXN1bHQqKTsKLSAgICBzdGF0aWMgYm9vbCBqYXZhc2NyaXB0UmVzdWx0SXNOdWxsKFdlYktpdEph
dmFzY3JpcHRSZXN1bHQqKTsKLSAgICBzdGF0aWMgYm9vbCBqYXZhc2NyaXB0UmVzdWx0SXNVbmRl
ZmluZWQoV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCopOwotCi0gICAgY2Fpcm9fc3VyZmFjZV90KiBn
ZXRTbmFwc2hvdEFuZFdhaXRVbnRpbFJlYWR5KFdlYktpdFNuYXBzaG90UmVnaW9uLCBXZWJLaXRT
bmFwc2hvdE9wdGlvbnMpOwotCi0gICAgV2ViS2l0V2ViVmlldyogbV93ZWJWaWV3OwotICAgIEdN
YWluTG9vcCogbV9tYWluTG9vcDsKLSAgICBDU3RyaW5nIG1fYWN0aXZlVVJJOwotICAgIEd0a1dp
ZGdldCogbV9wYXJlbnRXaW5kb3c7Ci0gICAgQ1N0cmluZyBtX2V4cGVjdGVkVGl0bGU7Ci0gICAg
V2ViS2l0SmF2YXNjcmlwdFJlc3VsdCogbV9qYXZhc2NyaXB0UmVzdWx0OwotICAgIEdFcnJvcioq
IG1famF2YXNjcmlwdEVycm9yOwotICAgIEdPd25QdHI8Y2hhcj4gbV9yZXNvdXJjZURhdGE7Ci0g
ICAgc2l6ZV90IG1fcmVzb3VyY2VEYXRhU2l6ZTsKLSAgICBjYWlyb19zdXJmYWNlX3QqIG1fc3Vy
ZmFjZTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGRvTW91c2VCdXR0b25FdmVudChHZGtFdmVudFR5
cGUsIGludCwgaW50LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7Ci19OwotCi0jZW5kaWYg
Ly8gV2ViVmlld1Rlc3RfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvcmVzb3VyY2VzL2xpbmstdGl0bGUuanMgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9yZXNvdXJjZXMvbGluay10aXRsZS5qcwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMmM4MjRkYS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9yZXNvdXJjZXMvbGluay10aXRsZS5qcworKysgL2Rldi9u
dWxsCkBAIC0xICswLDAgQEAKLXdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnV2ViS2l0
TGluaycpLnRpdGxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3QtY2VydC5wZW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9yZXNvdXJjZXMvdGVzdC1jZXJ0LnBlbQpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYjM0MzAxZi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9yZXNvdXJjZXMvdGVzdC1jZXJ0LnBlbQorKysgL2Rldi9udWxs
CkBAIC0xLDEzICswLDAgQEAKLS0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQotTUlJQjlqQ0NB
VitnQXdJQkFnSUpBTGV1WEJvK3Z3ejlNQTBHQ1NxR1NJYjNEUUVCQlFVQU1CUXhFakFRQmdOVgot
QkFNTUNURXlOeTR3TGpBdU1UQWVGdzB4TWpBM01USXhNalE0TWpSYUZ3MHlNakEzTVRBeE1qUTRN
alJhTUJReAotRWpBUUJnTlZCQU1NQ1RFeU55NHdMakF1TVRDQm56QU5CZ2txaGtpRzl3MEJBUUVG
QUFPQmpRQXdnWWtDZ1lFQQotMFRVek9ReEhCSUtERDJta3VxK3RVOTJtUXZEWmc3M0IwRytOaHIy
VDJHNk1iY0xxSXdqZzFRWXRCWldKODN0WgoteE1NRWZpd2VITEY4NVo5b2hhdkFneEpsS0c3WW12
Wk83OUtrRnBtalYyVzVDVlJtMGVZTVBuem14TkNvYVlxbwotRExsMHpzSDZLWk9MUEt1L2ZYNGVE
WDlYcEFQMWY4M2hXQjFVRkJtSEtOOENBd0VBQWFOUU1FNHdIUVlEVlIwTwotQkJZRUZESHY1WlEx
QmRtaHpUc0RVRW9ZNTVFWHlVZEtNQjhHQTFVZEl3UVlNQmFBRkRIdjVaUTFCZG1oelRzRAotVUVv
WTU1RVh5VWRLTUF3R0ExVWRFd1FGTUFNQkFmOHdEUVlKS29aSWh2Y05BUUVGQlFBRGdZRUFoM3FN
Qng3dgotalNvZE1mM095VHFUTEU3ZGVMbm1uQ2VCVnBnenhSWkVvaXpjR3FZY2ppcU8yN2k1TjVa
NktWUXNuSVRuTGl5QwotbVV0dVI1S25GNjl1VEtVdzRtL3VnWmU1d2hqaWc1TXEybDQxMEtWSzZF
ZUc0dGRMbGZYUit3aTRVNUs0S2pQNgotcDRuY2hRVVhMYTJ6Y2JKbitWQmV4Sm42Lzl3ZGhyK0RV
R1k9Ci0tLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9yZXNvdXJjZXMvdGVzdC1rZXkucGVtIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3Qta2V5LnBlbQpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTAzNjIyMi4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9yZXNvdXJjZXMvdGVzdC1rZXkucGVt
CisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0t
LS0tCi1NSUlDZHdJQkFEQU5CZ2txaGtpRzl3MEJBUUVGQUFTQ0FtRXdnZ0pkQWdFQUFvR0JBTkUx
TXprTVJ3U0NndzlwCi1wTHF2clZQZHBrTHcyWU85d2RCdmpZYTlrOWh1akczQzZpTUk0TlVHTFFX
VmlmTjdXY1REQkg0c0hoeXhmT1dmCi1hSVdyd0lNU1pTaHUySnIyVHUvU3BCYVpvMWRsdVFsVVp0
SG1ERDU4NXNUUXFHbUtxQXk1ZE03QitpbVRpenlyCi12MzErSGcxL1Y2UUQ5WC9ONFZnZFZCUVpo
eWpmQWdNQkFBRUNnWUIyUXdPVXNSc0lNcHJSd0o5dEpOZnZPN0c3Ci16NWkxL3pPcmx4UEM0akhN
UEJuSUJsSUN3Z2NPaExJNG9PTGRyNUg4UjEybjBWcW9UN0RSd1AzOTZpd2xKaXBGCi1pTzFoZURN
bi84ejhMUEd3a0NLLytjazA0ck1Ea3N4V0lkTXdZS0JYdDlhaG5KL3hSTHpRMS8zQUppQUdub2U1
Ci0vUUxYUXdlb2ZkNG1tZnNqS1FKQkFPMkN3VDd1TVA2bk1qWGd0Vk1KcTVRUDhVYmVDUzFzRU9Q
SkpiSHVEeEpCCi0vSGVQUUhCanE0a3pHNkNMNG9PN1QrNWZEdjRnK2ZJSUh6dVhlclowaW1zQ1FR
RGhmbWlUSWM5T3VjRUlmZzYvCi1tczBKaUtTbVdjK3FvaU9DdHJJTHVRdkZvTndKUmNpUUFOcWVK
czZ3cGFEdmV2U1V2QkxHZkcvN2IzSHZhRTVYCi1pcUJkQWtCRVFJdnAycWNIdHVKTjYwb1FGN3BQ
clJrbnhVeWIyZThzbGpRWDRwSkFLK2d5TDE5VUxNQXhpQmRMCi1Wb2Q4VllxTnRKRnBZKzZQcDlm
WjF4anpiNkFMQWtFQTRKenJEQXcwbFFYQSszV2R1VXc0aXhPYWRyMmxkeUcwCi0zNktlYmNEd3Nm
Wk8xOG0wUTRVbVB6MEd5N3pnTjB3eHp1b2NoYXcwVzYraVBVaVlLT2xFWFFKQkFNV1FyUGx1Ci1y
cmlub1pTMmY4ZG9KOUJOTlVhK1JOcE11ZzZVWGM1NXFvVUpseWlYRWgrdHU0QWFNT3R4dUdJeUMw
c0FjdXc2Ci1YZEFQVlBYS2Q3TW5lNzA9Ci0tLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9yZXNvdXJjZXMv
d2Via2l0Mmd0ay10ZXN0cy5ncmVzb3VyY2UueG1sIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvcmVzb3VyY2VzL3dlYmtpdDJndGstdGVzdHMuZ3Jlc291cmNlLnhtbApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGYxZTVhNi4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9yZXNvdXJjZXMvd2Via2l0Mmd0ay10
ZXN0cy5ncmVzb3VyY2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi08P3htbCB2
ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGdyZXNvdXJjZXM+Ci0gIDxncmVzb3Vy
Y2UgcHJlZml4PSIvb3JnL3dlYmtpdC93ZWJraXQyZ3RrL3Rlc3RzLyI+Ci0gICAgPGZpbGUgYWxp
YXM9ImxpbmstdGl0bGUuanMiPlNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L3Jlc291cmNlcy9saW5rLXRpdGxlLmpzPC9maWxlPgotICA8L2dyZXNvdXJjZT4KLTwvZ3Jlc291
cmNlcz4KZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRl
eCAzOTNjNzBhLi5mMjhlMTQwIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9v
bHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNzc1IEBACiAyMDE0LTAxLTAzICBDYXJsb3MgR2FyY2lh
IENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAorICAgICAgICBbR1RLXSBNb3ZlIGFsbCBH
VEsvR09iamVjdCB1bml0IHRlc3RzIHRvIFRvb2xzL1Rlc3RXZWJLaXRBUEkKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNjM0MgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy9ydW4tZ3RrLXRl
c3RzOgorICAgICAgICAoVGVzdFJ1bm5lcik6CisgICAgICAgIChUZXN0UnVubmVyLl9faW5pdF9f
KToKKyAgICAgICAgKFRlc3RSdW5uZXIuX3Rlc3RfcHJvZ3JhbXNfYmFzZV9kaXIpOgorICAgICAg
ICAoVGVzdFJ1bm5lci5fZ2V0X3Rlc3RzKToKKyAgICAgICAgKFRlc3RSdW5uZXIuX3J1bl90ZXN0
KToKKyAgICAgICAgKFRlc3RSdW5uZXIucnVuX3Rlc3RzKToKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L3N0eWxlL2NoZWNrZXIucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdHls
ZS9jaGVja2VyX3VuaXR0ZXN0LnB5OgorICAgICAgICAoQ2hlY2tlckRpc3BhdGNoZXJTa2lwVGVz
dC50ZXN0X3Nob3VsZF9za2lwX3dpdGhfd2FybmluZyk6CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9HTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJH
dGsvQWNjZXNzaWJpbGl0eVRlc3RTZXJ2ZXIuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvQWNjZXNzaWJpbGl0eVRlc3RTZXJ2ZXIuY3BwLgor
ICAgICAgICAobG9hZENoYW5nZWRDYWxsYmFjayk6CisgICAgICAgIChtYWluKToKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvRE9NRE9NV2luZG93VGVzdC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0RE9NRE9NV2luZG93VGVzdDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYktpdERPTURPTVdpbmRvd1Rlc3Q6OndlYlBhZ2VGcm9tQXJncyk6CisgICAgICAgIChXZWJL
aXRET01ET01XaW5kb3dUZXN0Ojp0ZXN0U2lnbmFscyk6CisgICAgICAgIChXZWJLaXRET01ET01X
aW5kb3dUZXN0Ojp0ZXN0RGlzcGF0Y2hFdmVudCk6CisgICAgICAgIChXZWJLaXRET01ET01XaW5k
b3dUZXN0Ojp0ZXN0R2V0Q29tcHV0ZWRTdHlsZSk6CisgICAgICAgIChXZWJLaXRET01ET01XaW5k
b3dUZXN0OjpydW5UZXN0KToKKyAgICAgICAgKHJlZ2lzdGVyVGVzdHMpOgorICAgICAgICAobG9h
ZGVkQ2FsbGJhY2spOgorICAgICAgICAoY2xpY2tlZENhbGxiYWNrKToKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvRE9NTm9kZVRlc3QuY3BwOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvRE9NTm9kZVRlc3QuY3BwLgor
ICAgICAgICAoV2ViS2l0RE9NTm9kZVRlc3Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXRET01O
b2RlVGVzdDo6d2ViUGFnZUZyb21BcmdzKToKKyAgICAgICAgKFdlYktpdERPTU5vZGVUZXN0Ojp0
ZXN0SGllcmFyY2h5TmF2aWdhdGlvbik6CisgICAgICAgIChXZWJLaXRET01Ob2RlVGVzdDo6dGVz
dEluc2VydGlvbik6CisgICAgICAgIChXZWJLaXRET01Ob2RlVGVzdDo6dGVzdFRhZ05hbWVzKToK
KyAgICAgICAgKFdlYktpdERPTU5vZGVUZXN0OjpydW5UZXN0KToKKyAgICAgICAgKHJlZ2lzdGVy
VGVzdHMpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9GcmFtZVRl
c3QuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvRnJhbWVUZXN0LmNwcC4KKyAgICAgICAgKFdlYktpdEZyYW1lVGVzdDo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYktpdEZyYW1lVGVzdDo6d2ViUGFnZUZyb21BcmdzKToKKyAgICAgICAgKFdlYktp
dEZyYW1lVGVzdDo6dGVzdE1haW5GcmFtZSk6CisgICAgICAgIChXZWJLaXRGcmFtZVRlc3Q6OnRl
c3RVUkkpOgorICAgICAgICAoV2ViS2l0RnJhbWVUZXN0Ojp0ZXN0SmF2YVNjcmlwdENvbnRleHQp
OgorICAgICAgICAoV2ViS2l0RnJhbWVUZXN0OjpydW5UZXN0KToKKyAgICAgICAgKHJlZ2lzdGVy
VGVzdHMpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9JbnNwZWN0
b3JUZXN0U2VydmVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL0luc3BlY3RvclRlc3RTZXJ2ZXIuY3BwLgorICAgICAgICAobG9hZENoYW5n
ZWRDYWxsYmFjayk6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdDJHdGsvVGVzdEF1dGhlbnRpY2F0aW9uLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RBdXRoZW50aWNhdGlvbi5jcHAu
CisgICAgICAgICh0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uUmVxdWVzdCk6CisgICAgICAgICh0
ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uQ2FuY2VsKToKKyAgICAgICAgKHRlc3RXZWJWaWV3QXV0
aGVudGljYXRpb25Mb2FkQ2FuY2VsbGVkKToKKyAgICAgICAgKHRlc3RXZWJWaWV3QXV0aGVudGlj
YXRpb25GYWlsdXJlKToKKyAgICAgICAgKHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25Ob0NyZWRl
bnRpYWwpOgorICAgICAgICAodGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvblN0b3JhZ2UpOgorICAg
ICAgICAodGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvblN1Y2Nlc3MpOgorICAgICAgICAoc2VydmVy
Q2FsbGJhY2spOgorICAgICAgICAoYmVmb3JlQWxsKToKKyAgICAgICAgKGFmdGVyQWxsKToKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdEJhY2tGb3J3YXJkTGlz
dC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0
cy9UZXN0QmFja0ZvcndhcmRMaXN0LmNwcC4KKyAgICAgICAgKHNlcnZlckNhbGxiYWNrKToKKyAg
ICAgICAgKHRlc3RCYWNrRm9yd2FyZExpc3ROYXZpZ2F0aW9uKToKKyAgICAgICAgKHRlc3RCYWNr
Rm9yd2FyZExpc3RMaW1pdEFuZENhY2hlKToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAg
IChhZnRlckFsbCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rl
c3RDb250ZXh0TWVudS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9UZXN0Q29udGV4dE1lbnUuY3BwLgorICAgICAgICAodGVzdENvbnRleHRN
ZW51RGVmYXVsdE1lbnUpOgorICAgICAgICAodGVzdENvbnRleHRNZW51UG9wdWxhdGVNZW51KToK
KyAgICAgICAgKHRlc3RDb250ZXh0TWVudUN1c3RvbU1lbnUpOgorICAgICAgICAodGVzdENvbnRl
eHRNZW51RGlzYWJsZU1lbnUpOgorICAgICAgICAodGVzdENvbnRleHRNZW51U3ViTWVudSk6Cisg
ICAgICAgICh0ZXN0Q29udGV4dE1lbnVEaXNtaXNzZWQpOgorICAgICAgICAodGVzdENvbnRleHRN
ZW51U21hcnRTZXBhcmF0b3JzKToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAgIChhZnRl
ckFsbCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RDb29r
aWVNYW5hZ2VyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL1Rlc3RDb29raWVNYW5hZ2VyLmNwcC4KKyAgICAgICAgKHRlc3RDb29raWVNYW5h
Z2VyQWNjZXB0UG9saWN5KToKKyAgICAgICAgKHRlc3RDb29raWVNYW5hZ2VyRGVsZXRlQ29va2ll
cyk6CisgICAgICAgICh0ZXN0Q29va2llTWFuYWdlckNvb2tpZXNDaGFuZ2VkKToKKyAgICAgICAg
KHRlc3RDb29raWVNYW5hZ2VyUGVyc2lzdGVudFN0b3JhZ2UpOgorICAgICAgICAoc2VydmVyQ2Fs
bGJhY2spOgorICAgICAgICAoYmVmb3JlQWxsKToKKyAgICAgICAgKGFmdGVyQWxsKToKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdERPTURPTVdpbmRvdy5jcHA6
IEFkZGVkLgorICAgICAgICAoc2lnbmFsc05vdGlmeUNhbGxiYWNrKToKKyAgICAgICAgKGRpc3Bh
dGNoRXZlbnROb3RpZnlDYWxsYmFjayk6CisgICAgICAgICh0ZXN0V2ViS2l0RE9NRE9NV2luZG93
U2lnbmFscyk6CisgICAgICAgICh0ZXN0V2ViS2l0RE9NRE9NV2luZG93RGlzcGF0Y2hFdmVudCk6
CisgICAgICAgICh0ZXN0V2ViS2l0RE9NRE9NV2luZG93R2V0Q29tcHV0ZWRTdHlsZSk6CisgICAg
ICAgIChiZWZvcmVBbGwpOgorICAgICAgICAoYWZ0ZXJBbGwpOgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0RE9NTm9kZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0RE9NTm9kZS5jcHAuCisgICAg
ICAgICh0ZXN0V2ViS2l0RE9NTm9kZUhpZXJhcmNoeU5hdmlnYXRpb24pOgorICAgICAgICAodGVz
dFdlYktpdERPTU5vZGVJbnNlcnRpb24pOgorICAgICAgICAodGVzdFdlYktpdERPTU5vZGVUYWdO
YW1lcyk6CisgICAgICAgIChiZWZvcmVBbGwpOgorICAgICAgICAoYWZ0ZXJBbGwpOgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0RG93bmxvYWRzLmNwcDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3REb3du
bG9hZHMuY3BwLgorICAgICAgICAodGVzdERvd25sb2FkTG9jYWxGaWxlKToKKyAgICAgICAgKHRl
c3REb3dubG9hZExvY2FsRmlsZUVycm9yKToKKyAgICAgICAgKHNlcnZlckNhbGxiYWNrKToKKyAg
ICAgICAgKHRlc3REb3dubG9hZFJlbW90ZUZpbGUpOgorICAgICAgICAodGVzdERvd25sb2FkUmVt
b3RlRmlsZUVycm9yKToKKyAgICAgICAgKHRlc3RXZWJWaWV3RG93bmxvYWRVUkkpOgorICAgICAg
ICAodGVzdFBvbGljeVJlc3BvbnNlRG93bmxvYWQpOgorICAgICAgICAoYmVmb3JlQWxsKToKKyAg
ICAgICAgKGFmdGVyQWxsKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJH
dGsvVGVzdEZyYW1lLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL1Rlc3RGcmFtZS5jcHAuCisgICAgICAgICh3ZWJraXRGcmFtZVRlc3RSdW4p
OgorICAgICAgICAodGVzdFdlYktpdEZyYW1lTWFpbkZyYW1lKToKKyAgICAgICAgKHRlc3RXZWJL
aXRGcmFtZVVSSSk6CisgICAgICAgICh0ZXN0V2ViS2l0RnJhbWVKYXZhU2NyaXB0Q29udGV4dCk6
CisgICAgICAgIChiZWZvcmVBbGwpOgorICAgICAgICAoYWZ0ZXJBbGwpOgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0SW5zcGVjdG9yLmNwcDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RJbnNwZWN0b3Iu
Y3BwLgorICAgICAgICAodGVzdEluc3BlY3RvckRlZmF1bHQpOgorICAgICAgICAodGVzdEluc3Bl
Y3Rvck1hbnVhbEF0dGFjaERldGFjaCk6CisgICAgICAgICh0ZXN0SW5zcGVjdG9yQ3VzdG9tQ29u
dGFpbmVyRGVzdHJveWVkKToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAgIChhZnRlckFs
bCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RJbnNwZWN0
b3JTZXJ2ZXIuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvVGVzdEluc3BlY3RvclNlcnZlci5jcHAuCisgICAgICAgIChzdG9wVGVzdFNlcnZl
cik6CisgICAgICAgIChzaWdBYm9ydEhhbmRsZXIpOgorICAgICAgICAodGVzdFNlcnZlck1vbml0
b3JUaHJlYWRGdW5jKToKKyAgICAgICAgKHN0YXJ0VGVzdFNlcnZlck1vbml0b3IpOgorICAgICAg
ICAoc3RhcnRUZXN0U2VydmVyKToKKyAgICAgICAgKHRlc3RJbnNwZWN0b3JTZXJ2ZXJQYWdlTGlz
dCk6CisgICAgICAgICh0ZXN0UmVtb3RlRGVidWdnaW5nTWVzc2FnZSk6CisgICAgICAgIChvcGVu
UmVtb3RlRGVidWdnaW5nU2Vzc2lvbik6CisgICAgICAgIChzZW5kSW5jb21wbGV0ZVJlcXVlc3Qp
OgorICAgICAgICAoYmVmb3JlQWxsKToKKyAgICAgICAgKGFmdGVyQWxsKToKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdExvYWRlckNsaWVudC5jcHA6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0TG9hZGVy
Q2xpZW50LmNwcC4KKyAgICAgICAgKHRlc3RMb2FkaW5nU3RhdHVzKToKKyAgICAgICAgKHRlc3RM
b2FkaW5nRXJyb3IpOgorICAgICAgICAoYXNzZXJ0Tm9ybWFsTG9hZEhhcHBlbmVkKToKKyAgICAg
ICAgKHRlc3RMb2FkSHRtbCk6CisgICAgICAgICh0ZXN0TG9hZEFsdGVybmF0ZUhUTUwpOgorICAg
ICAgICAodGVzdExvYWRQbGFpblRleHQpOgorICAgICAgICAodGVzdExvYWRSZXF1ZXN0KToKKyAg
ICAgICAgKExvYWRTdG9wVHJhY2tpbmdUZXN0Ojpsb2FkQ29tbWl0dGVkKToKKyAgICAgICAgKExv
YWRTdG9wVHJhY2tpbmdUZXN0Ojpsb2FkRmFpbGVkKToKKyAgICAgICAgKHRlc3RMb2FkQ2FuY2Vs
bGVkKToKKyAgICAgICAgKHRlc3RXZWJWaWV3VGl0bGUpOgorICAgICAgICAodGVzdFdlYlZpZXdS
ZWxvYWQpOgorICAgICAgICAodGVzdExvYWRQcm9ncmVzcyk6CisgICAgICAgICh0ZXN0V2ViVmll
d0hpc3RvcnlMb2FkKToKKyAgICAgICAgKHRlc3RXZWJWaWV3QWN0aXZlVVJJKToKKyAgICAgICAg
KHRlc3RXZWJWaWV3SXNMb2FkaW5nKToKKyAgICAgICAgKHRlc3RXZWJQYWdlVVJJKToKKyAgICAg
ICAgKHRlc3RVUklSZXF1ZXN0SFRUUEhlYWRlcnMpOgorICAgICAgICAoc2VydmVyQ2FsbGJhY2sp
OgorICAgICAgICAoYmVmb3JlQWxsKToKKyAgICAgICAgKGFmdGVyQWxsKToKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFByaW50aW5nLmNwcDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RQcmludGluZy5j
cHAuCisgICAgICAgICh0ZXN0UHJpbnRPcGVyYXRpb25QcmludFNldHRpbmdzKToKKyAgICAgICAg
KHdlYlZpZXdQcmludENhbGxiYWNrKToKKyAgICAgICAgKHRlc3RXZWJWaWV3UHJpbnQpOgorICAg
ICAgICAodGVzdFByaW50T3BlcmF0aW9uUHJpbnQpOgorICAgICAgICAodGVzdFByaW50T3BlcmF0
aW9uRXJyb3JzKToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAgIChhZnRlckFsbCk6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RSZXNvdXJjZXMuY3Bw
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVz
dFJlc291cmNlcy5jcHAuCisgICAgICAgICh0ZXN0V2ViVmlld1Jlc291cmNlcyk6CisgICAgICAg
ICh0ZXN0V2ViUmVzb3VyY2VMb2FkaW5nKToKKyAgICAgICAgKHRlc3RXZWJSZXNvdXJjZVJlc3Bv
bnNlKToKKyAgICAgICAgKHRlc3RXZWJSZXNvdXJjZU1pbWVUeXBlKToKKyAgICAgICAgKHRlc3RX
ZWJSZXNvdXJjZVN1Z2dlc3RlZEZpbGVuYW1lKToKKyAgICAgICAgKHRlc3RXZWJSZXNvdXJjZUFj
dGl2ZVVSSSk6CisgICAgICAgICh0ZXN0V2ViUmVzb3VyY2VHZXREYXRhKToKKyAgICAgICAgKHRl
c3RXZWJWaWV3UmVzb3VyY2VzSGlzdG9yeUNhY2hlKToKKyAgICAgICAgKHRlc3RXZWJSZXNvdXJj
ZVNlbmRSZXF1ZXN0KToKKyAgICAgICAgKGFkZENhY2hlSFRUUEhlYWRlcnNUb1Jlc3BvbnNlKToK
KyAgICAgICAgKHNlcnZlckNhbGxiYWNrKToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAg
IChhZnRlckFsbCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rl
c3RTU0wuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvVGVzdFNTTC5jcHAuCisgICAgICAgICh0ZXN0U1NMKToKKyAgICAgICAgKHRlc3RJbnNl
Y3VyZUNvbnRlbnQpOgorICAgICAgICAodGVzdFRMU0Vycm9yc1BvbGljeSk6CisgICAgICAgICh0
ZXN0TG9hZEZhaWxlZFdpdGhUTFNFcnJvcnMpOgorICAgICAgICAoaHR0cHNTZXJ2ZXJDYWxsYmFj
ayk6CisgICAgICAgIChodHRwU2VydmVyQ2FsbGJhY2spOgorICAgICAgICAoYmVmb3JlQWxsKToK
KyAgICAgICAgKGFmdGVyQWxsKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dDJHdGsvVGVzdFVJQ2xpZW50LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RVSUNsaWVudC5jcHAuCisgICAgICAgICh0ZXN0V2ViVmll
d0NyZWF0ZVJlYWR5Q2xvc2UpOgorICAgICAgICAoY2hlY2tNaW1lVHlwZUZvckZpbHRlcik6Cisg
ICAgICAgICh0ZXN0V2ViVmlld0FsbG93TW9kYWxEaWFsb2dzKToKKyAgICAgICAgKHRlc3RXZWJW
aWV3RGlzYWxsb3dNb2RhbERpYWxvZ3MpOgorICAgICAgICAodGVzdFdlYlZpZXdKYXZhU2NyaXB0
RGlhbG9ncyk6CisgICAgICAgICh0ZXN0V2ViVmlld1dpbmRvd1Byb3BlcnRpZXMpOgorICAgICAg
ICAodGVzdFdlYlZpZXdNb3VzZVRhcmdldCk6CisgICAgICAgICh0ZXN0V2ViVmlld1Blcm1pc3Np
b25SZXF1ZXN0cyk6CisgICAgICAgICh0ZXN0V2ViVmlld0ZpbGVDaG9vc2VyUmVxdWVzdCk6Cisg
ICAgICAgIChiZWZvcmVBbGwpOgorICAgICAgICAoYWZ0ZXJBbGwpOgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViRXh0ZW5zaW9ucy5jcHA6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViRXh0ZW5z
aW9ucy5jcHAuCisgICAgICAgICh0ZXN0V2ViRXh0ZW5zaW9uR2V0VGl0bGUpOgorICAgICAgICAo
ZG9jdW1lbnRMb2FkZWRDYWxsYmFjayk6CisgICAgICAgICh0ZXN0RG9jdW1lbnRMb2FkZWRTaWdu
YWwpOgorICAgICAgICAod2ViUHJvY2Vzc0NyYXNoZWRDYWxsYmFjayk6CisgICAgICAgICh0ZXN0
V2ViS2l0V2ViVmlld1Byb2Nlc3NDcmFzaGVkKToKKyAgICAgICAgKHRlc3RXZWJFeHRlbnNpb25X
aW5kb3dPYmplY3RDbGVhcmVkKToKKyAgICAgICAgKHNjcmlwdERpYWxvZ0NhbGxiYWNrKToKKyAg
ICAgICAgKHJ1bkphdmFTY3JpcHRJbklzb2xhdGVkV29ybGRGaW5pc2hlZENhbGxiYWNrKToKKyAg
ICAgICAgKHRlc3RXZWJFeHRlbnNpb25Jc29sYXRlZFdvcmxkKToKKyAgICAgICAgKGJlZm9yZUFs
bCk6CisgICAgICAgIChhZnRlckFsbCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyR3RrL1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5
LmNwcC4KKyAgICAgICAgKHN0b3BUZXN0U2VydmVyKToKKyAgICAgICAgKHNpZ0Fib3J0SGFuZGxl
cik6CisgICAgICAgICh0ZXN0U2VydmVyTW9uaXRvclRocmVhZEZ1bmMpOgorICAgICAgICAoc3Rh
cnRUZXN0U2VydmVyTW9uaXRvcik6CisgICAgICAgIChzdGFydFRlc3RTZXJ2ZXIpOgorICAgICAg
ICAoY2hlY2tBdHNwaUFjY2Vzc2libGUpOgorICAgICAgICAoZmluZFRlc3RTZXJ2ZXJBcHBsaWNh
dGlvbik6CisgICAgICAgICh0ZXN0QXRzcGlCYXNpY0hpZXJhcmNoeSk6CisgICAgICAgIChiZWZv
cmVBbGwpOgorICAgICAgICAoYWZ0ZXJBbGwpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlLmNwcDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRGYXZpY29u
RGF0YWJhc2UuY3BwLgorICAgICAgICAoc2VydmVyQ2FsbGJhY2spOgorICAgICAgICAodGVzdE5v
dEluaXRpYWxpemVkKToKKyAgICAgICAgKHRlc3RTZXREaXJlY3RvcnkpOgorICAgICAgICAodGVz
dENsZWFyRGF0YWJhc2UpOgorICAgICAgICAodGVzdEdldEZhdmljb24pOgorICAgICAgICAodGVz
dEdldEZhdmljb25VUkkpOgorICAgICAgICAodGVzdFdlYlZpZXdGYXZpY29uKToKKyAgICAgICAg
KHRlc3RGYXZpY29uRGF0YWJhc2UpOgorICAgICAgICAoYmVmb3JlQWxsKToKKyAgICAgICAgKHdl
YmtpdEZhdmljb25EYXRhYmFzZUZpbmFsaXplZENhbGxiYWNrKToKKyAgICAgICAgKGFmdGVyQWxs
KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdEZp
bmRDb250cm9sbGVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxlci5jcHAuCisgICAgICAgICh0ZXN0
RmluZENvbnRyb2xsZXJUZXh0Rm91bmQpOgorICAgICAgICAodGVzdEZpbmRDb250cm9sbGVyVGV4
dE5vdEZvdW5kKToKKyAgICAgICAgKHRlc3RGaW5kQ29udHJvbGxlck1hdGNoQ291bnQpOgorICAg
ICAgICAodGVzdEZpbmRDb250cm9sbGVyTWF4TWF0Y2hDb3VudCk6CisgICAgICAgICh0ZXN0Rmlu
ZENvbnRyb2xsZXJOZXh0KToKKyAgICAgICAgKHRlc3RGaW5kQ29udHJvbGxlclByZXZpb3VzKToK
KyAgICAgICAgKHRlc3RGaW5kQ29udHJvbGxlckNvdW50ZWRNYXRjaGVzKToKKyAgICAgICAgKHRl
c3RGaW5kQ29udHJvbGxlck9wdGlvbnMpOgorICAgICAgICAodGVzdEZpbmRDb250cm9sbGVySGlk
ZSk6CisgICAgICAgICh0ZXN0RmluZENvbnRyb2xsZXJJbnN0YW5jZSk6CisgICAgICAgICh0ZXN0
RmluZENvbnRyb2xsZXJHZXR0ZXJzKToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAgIChh
ZnRlckFsbCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RX
ZWJLaXRQb2xpY3lDbGllbnQuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFBvbGljeUNsaWVudC5jcHAuCisgICAgICAgICh0
ZXN0TmF2aWdhdGlvblBvbGljeSk6CisgICAgICAgICh0ZXN0UmVzcG9uc2VQb2xpY3kpOgorICAg
ICAgICAoY3JlYXRlQ2FsbGJhY2spOgorICAgICAgICAodGVzdE5ld1dpbmRvd1BvbGljeSk6Cisg
ICAgICAgIChzZXJ2ZXJDYWxsYmFjayk6CisgICAgICAgIChiZWZvcmVBbGwpOgorICAgICAgICAo
YWZ0ZXJBbGwpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0
V2ViS2l0U2V0dGluZ3MuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFNldHRpbmdzLmNwcC4KKyAgICAgICAgKHRlc3RXZWJL
aXRTZXR0aW5ncyk6CisgICAgICAgICh0ZXN0V2ViS2l0U2V0dGluZ3NOZXdXaXRoU2V0dGluZ3Mp
OgorICAgICAgICAoY29udmVydFdlYlZpZXdNYWluUmVzb3VyY2VEYXRhVG9DU3RyaW5nKToKKyAg
ICAgICAgKGFzc2VydFRoYXRVc2VyQWdlbnRJc1NlbnRJbkhlYWRlcnMpOgorICAgICAgICAodGVz
dFdlYktpdFNldHRpbmdzVXNlckFnZW50KToKKyAgICAgICAgKHNlcnZlckNhbGxiYWNrKToKKyAg
ICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAgIChhZnRlckFsbCk6CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRWZXJzaW9uLmNwcDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRWZXJz
aW9uLmNwcC4KKyAgICAgICAgKHRlc3RXZWJLaXRWZXJzaW9uKToKKyAgICAgICAgKHRlc3RXZWJL
aXRDaGVja1ZlcnNpb24pOgorICAgICAgICAoYmVmb3JlQWxsKToKKyAgICAgICAgKGFmdGVyQWxs
KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFdl
YkNvbnRleHQuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvVGVzdFdlYktpdFdlYkNvbnRleHQuY3BwLgorICAgICAgICAodGVzdFdlYkNvbnRl
eHREZWZhdWx0KToKKyAgICAgICAgKHRlc3RXZWJDb250ZXh0R2V0UGx1Z2lucyk6CisgICAgICAg
ICh0ZXN0V2ViQ29udGV4dFVSSVNjaGVtZSk6CisgICAgICAgICh0ZXN0V2ViQ29udGV4dFNwZWxs
Q2hlY2tlcik6CisgICAgICAgICh0ZXN0V2ViQ29udGV4dExhbmd1YWdlcyk6CisgICAgICAgIChz
ZXJ2ZXJDYWxsYmFjayk6CisgICAgICAgICh0ZXN0V2ViQ29udGV4dFNlY3VyaXR5UG9saWN5KToK
KyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAgIChhZnRlckFsbCk6CisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRX
ZWJWaWV3LmNwcC4KKyAgICAgICAgKHRlc3RXZWJWaWV3RGVmYXVsdENvbnRleHQpOgorICAgICAg
ICAodGVzdFdlYlZpZXdDdXN0b21DaGFyc2V0KToKKyAgICAgICAgKHRlc3RXZWJWaWV3U2V0dGlu
Z3MpOgorICAgICAgICAodGVzdFdlYlZpZXdab29tTGV2ZWwpOgorICAgICAgICAodGVzdFdlYlZp
ZXdSdW5KYXZhU2NyaXB0KToKKyAgICAgICAgKHRlc3RXZWJWaWV3RnVsbFNjcmVlbik6CisgICAg
ICAgICh0ZXN0V2ViVmlld0NhblNob3dNSU1FVHlwZSk6CisgICAgICAgICh0ZXN0V2ViVmlld1N1
Ym1pdEZvcm0pOgorICAgICAgICAodGVzdFdlYlZpZXdTYXZlKToKKyAgICAgICAgKHRlc3RXZWJW
aWV3TW9kZSk6CisgICAgICAgICh0ZXN0V2ViVmlld1BhZ2VWaXNpYmlsaXR5KToKKyAgICAgICAg
KHRlc3RXZWJWaWV3U25hcHNob3QpOgorICAgICAgICAoYmVmb3JlQWxsKToKKyAgICAgICAgKGFm
dGVyQWxsKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdl
YktpdFdlYlZpZXdHcm91cC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlld0dyb3VwLmNwcC4KKyAgICAgICAgKHRl
c3RXZWJWaWV3R3JvdXBEZWZhdWx0KToKKyAgICAgICAgKHRlc3RXZWJWaWV3R3JvdXBOZXdHcm91
cCk6CisgICAgICAgICh0ZXN0V2ViVmlld05ld1dpdGhHcm91cCk6CisgICAgICAgICh0ZXN0V2Vi
Vmlld0dyb3VwU2V0dGluZ3MpOgorICAgICAgICAoaXNTdHlsZVNoZWV0SW5qZWN0ZWRGb3JVUkxB
dFBhdGgpOgorICAgICAgICAoZmlsbFVSTExpc3RGcm9tUGF0aHMpOgorICAgICAgICAocmVtb3Zl
T2xkSW5qZWN0ZWRTdHlsZVNoZWV0c0FuZFJlc2V0TGlzdHMpOgorICAgICAgICAodGVzdFdlYlZp
ZXdHcm91cEluamVjdGVkU3R5bGVTaGVldCk6CisgICAgICAgIChzZXJ2ZXJDYWxsYmFjayk6Cisg
ICAgICAgIChiZWZvcmVBbGwpOgorICAgICAgICAoYWZ0ZXJBbGwpOgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViVmlld0VkaXRvci5jcHA6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViVmlld0Vk
aXRvci5jcHAuCisgICAgICAgICh0ZXN0V2ViVmlld0VkaXRvckN1dENvcHlQYXN0ZU5vbkVkaXRh
YmxlKToKKyAgICAgICAgKHRlc3RXZWJWaWV3RWRpdG9yQ3V0Q29weVBhc3RlRWRpdGFibGUpOgor
ICAgICAgICAodGVzdFdlYlZpZXdFZGl0b3JTZWxlY3RBbGxOb25FZGl0YWJsZSk6CisgICAgICAg
ICh0ZXN0V2ViVmlld0VkaXRvclNlbGVjdEFsbEVkaXRhYmxlKToKKyAgICAgICAgKGJlZm9yZUFs
bCk6CisgICAgICAgIChhZnRlckFsbCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyR3RrL1dlYkV4dGVuc2lvblRlc3QuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViRXh0ZW5zaW9uVGVzdC5jcHAuCisgICAgICAg
IChEZWxheWVkU2lnbmFsOjpEZWxheWVkU2lnbmFsKToKKyAgICAgICAgKGVtaXREb2N1bWVudExv
YWRlZCk6CisgICAgICAgIChkb2N1bWVudExvYWRlZENhbGxiYWNrKToKKyAgICAgICAgKGVtaXRV
UklDaGFuZ2VkKToKKyAgICAgICAgKHVyaUNoYW5nZWRDYWxsYmFjayk6CisgICAgICAgIChzZW5k
UmVxdWVzdENhbGxiYWNrKToKKyAgICAgICAgKHBhZ2VDcmVhdGVkQ2FsbGJhY2spOgorICAgICAg
ICAoZWNob0NhbGxiYWNrKToKKyAgICAgICAgKHdpbmRvd09iamVjdENsZWFyZWQpOgorICAgICAg
ICAoZ2V0V2ViUGFnZSk6CisgICAgICAgIChtZXRob2RDYWxsQ2FsbGJhY2spOgorICAgICAgICAo
d2Via2l0X3dlYl9leHRlbnNpb25faW5pdGlhbGl6ZSk6CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXQyR3RrL1dlYlByb2Nlc3NUZXN0LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlByb2Nlc3NUZXN0LmNwcC4KKyAg
ICAgICAgKHRlc3RzTWFwKToKKyAgICAgICAgKFdlYlByb2Nlc3NUZXN0OjphZGQpOgorICAgICAg
ICAoV2ViUHJvY2Vzc1Rlc3Q6OmNyZWF0ZSk6CisgICAgICAgIChtZXRob2RDYWxsQ2FsbGJhY2sp
OgorICAgICAgICAod2Via2l0X3dlYl9leHRlbnNpb25faW5pdGlhbGl6ZSk6CisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1dlYlByb2Nlc3NUZXN0Lmg6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJQcm9jZXNzVGVz
dC5oLgorICAgICAgICAoV2ViUHJvY2Vzc1Rlc3Q6On5XZWJQcm9jZXNzVGVzdCk6CisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL3Jlc291cmNlcy9saW5rLXRpdGxlLmpz
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvcmVz
b3VyY2VzL2xpbmstdGl0bGUuanMuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXQyR3RrL3Jlc291cmNlcy90ZXN0LWNlcnQucGVtOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3QtY2VydC5wZW0uCisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL3Jlc291cmNlcy90ZXN0LWtleS5w
ZW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9y
ZXNvdXJjZXMvdGVzdC1rZXkucGVtLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Mkd0ay9yZXNvdXJjZXMvd2Via2l0Mmd0ay10ZXN0cy5ncmVzb3VyY2UueG1sOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvcmVzb3VyY2VzL3dl
YmtpdDJndGstdGVzdHMuZ3Jlc291cmNlLnhtbC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdEd0ay9yZXNvdXJjZXMvYmxhbmsuaWNvOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YktpdC9ndGsvdGVzdHMvcmVzb3VyY2VzL2JsYW5rLmljby4KKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdEd0ay9yZXNvdXJjZXMvdGVzdC5odG1sOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYktpdC9ndGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3QuaHRtbC4KKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9yZXNvdXJjZXMvdGVzdC5vZ2c6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy9yZXNvdXJjZXMvdGVzdC5vZ2cuCisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvcmVzb3VyY2VzL3Rlc3QucGRmOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3QucGRmLgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Jlc291cmNlcy90ZXN0LnR4dDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Jlc291cmNlcy90ZXN0LnR4dC4KKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0X3V0aWxzLmM6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0X3V0aWxzLmMuCisgICAgICAgICh0
ZXN0dXRpbHNfcmVsYXRpdmVfY2hkaXIpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0R3RrL3Rlc3RfdXRpbHMuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvZ3RrL3Rl
c3RzL3Rlc3RfdXRpbHMuaC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0
ay90ZXN0YXBwbGljYXRpb25jYWNoZS5jOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9ndGsv
dGVzdHMvdGVzdGFwcGxpY2F0aW9uY2FjaGUuYy4KKyAgICAgICAgKHRlc3RfYXBwbGljYXRpb25f
Y2FjaGVfbWF4aW11bV9zaXplKToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RhdGsuYzogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJL
aXQvZ3RrL3Rlc3RzL3Rlc3RhdGsuYy4KKyAgICAgICAgKGdldFdlYkFyZWFPYmplY3QpOgorICAg
ICAgICAodGV4dENhcmV0TW92ZWRDYWxsYmFjayk6CisgICAgICAgICh0ZXN0V2Via2l0QXRrQ2Fy
ZXRPZmZzZXRzKToKKyAgICAgICAgKHRlc3RXZWJraXRBdGtDYXJldE9mZnNldHNBbmRFeHRyYW5v
dXNXaGl0ZVNwYWNlcyk6CisgICAgICAgICh0ZXN0V2Via2l0QXRrQ29tYm9Cb3gpOgorICAgICAg
ICAodXBkYXRlTG9hZGluZ0V2ZW50c1Jlc3VsdCk6CisgICAgICAgIChkb2N1bWVudExvYWRpbmdF
dmVudENhbGxiYWNrKToKKyAgICAgICAgKHRlc3RXZWJraXRBdGtEb2N1bWVudExvYWRpbmdFdmVu
dHMpOgorICAgICAgICAodGVzdFdlYmtpdEF0a0VtYmVkZGVkT2JqZWN0cyk6CisgICAgICAgICh0
ZXN0V2Via2l0QXRrR2V0SGVhZGVyc0luVGFibGUpOgorICAgICAgICAoY29tcEF0a0F0dHJpYnV0
ZSk6CisgICAgICAgIChjb21wQXRrQXR0cmlidXRlTmFtZSk6CisgICAgICAgIChhdGtBdHRyaWJ1
dGVTZXRBdHRyaWJ1dGVOYW1lSGFzVmFsdWUpOgorICAgICAgICAoYXRrQXR0cmlidXRlU2V0Q29u
dGFpbnNBdHRyaWJ1dGVOYW1lKToKKyAgICAgICAgKGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhh
c1ZhbHVlKToKKyAgICAgICAgKGF0a0F0dHJpYnV0ZVNldEFyZUVxdWFsKToKKyAgICAgICAgKHRl
c3RXZWJraXRBdGtUZXh0QXR0cmlidXRlcyk6CisgICAgICAgICh0ZXh0U2VsZWN0aW9uQ2hhbmdl
ZENhbGxiYWNrKToKKyAgICAgICAgKHRlc3RXZWJraXRBdGtUZXh0U2VsZWN0aW9ucyk6CisgICAg
ICAgICh0ZXN0V2Via2l0QXRrR2V0RXh0ZW50cyk6CisgICAgICAgICh0ZXN0V2Via2l0QXRrTGF5
b3V0QW5kRGF0YVRhYmxlcyk6CisgICAgICAgICh0ZXN0V2Via2l0QXRrTGlua3NXaXRoSW5saW5l
SW1hZ2VzKToKKyAgICAgICAgKHRlc3RXZWJraXRBdGtIeXBlcnRleHRBbmRIeXBlcmxpbmtzKToK
KyAgICAgICAgKHRlc3RXZWJraXRBdGtMaXN0c09mSXRlbXMpOgorICAgICAgICAodGV4dENoYW5n
ZWRDYik6CisgICAgICAgICh0ZXN0V2Via2l0QXRrVGV4dENoYW5nZWROb3RpZmljYXRpb25zKToK
KyAgICAgICAgKHRlc3RXZWJraXRBdGtQYXJlbnRGb3JSb290T2JqZWN0KToKKyAgICAgICAgKHRl
c3RXZWJraXRBdGtTZXRQYXJlbnRGb3JPYmplY3QpOgorICAgICAgICAoaW5pdGlhbGl6ZVRlc3Rp
bmdGcmFtZXdvcmspOgorICAgICAgICAobWFpbik6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRHdGsvdGVzdGF0a3JvbGVzLmM6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
L2d0ay90ZXN0cy90ZXN0YXRrcm9sZXMuYy4KKyAgICAgICAgKGZpbmlzaF9sb2FkaW5nKToKKyAg
ICAgICAgKGF0a19yb2xlc19maXh0dXJlX3NldHVwKToKKyAgICAgICAgKGF0a19yb2xlc19maXh0
dXJlX3RlYXJkb3duKToKKyAgICAgICAgKGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKToKKyAgICAg
ICAgKHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9kb2N1bWVudF9mcmFtZSk6CisgICAgICAgICh0
ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfaGVhZGluZyk6CisgICAgICAgICh0ZXN0X3dlYmtpdF9h
dGtfZ2V0X3JvbGVfaW1hZ2UpOgorICAgICAgICAodGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xp
bmspOgorICAgICAgICAodGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xpc3RfYW5kX2l0ZW0pOgor
ICAgICAgICAodGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX3BhcmFncmFwaCk6CisgICAgICAgICh0
ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfc2VjdGlvbik6CisgICAgICAgICh0ZXN0X3dlYmtpdF9h
dGtfZ2V0X3JvbGVfdGFibGUpOgorICAgICAgICAodGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX3Nl
cGFyYXRvcik6CisgICAgICAgICh0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfY29tYm9ib3gpOgor
ICAgICAgICAodGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2Zvcm0pOgorICAgICAgICAodGVzdF93
ZWJraXRfYXRrX2dldF9yb2xlX2NoZWNrX2JveCk6CisgICAgICAgICh0ZXN0X3dlYmtpdF9hdGtf
Z2V0X3JvbGVfZW50cnkpOgorICAgICAgICAodGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xhYmVs
KToKKyAgICAgICAgKHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9saXN0Ym94KToKKyAgICAgICAg
KHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9wYXNzd29yZF90ZXh0KToKKyAgICAgICAgKHRlc3Rf
d2Via2l0X2F0a19nZXRfcm9sZV9wdXNoX2J1dHRvbik6CisgICAgICAgICh0ZXN0X3dlYmtpdF9h
dGtfZ2V0X3JvbGVfcmFkaW9fYnV0dG9uKToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3Rjb250ZXh0bWVudS5jOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGNvbnRleHRtZW51LmMuCisgICAgICAgICh0
ZXN0SW5mb05ldyk6CisgICAgICAgICh0ZXN0SW5mb0Rlc3Ryb3kpOgorICAgICAgICAoY29udGV4
dE1lbnVGaXh0dXJlU2V0dXApOgorICAgICAgICAoY29udGV4dE1lbnVGaXh0dXJlVGVhcmRvd24p
OgorICAgICAgICAoY2hlY2tBY3Rpb24pOgorICAgICAgICAoY2hlY2tBY3Rpb25XaXRoU3VibWVu
dSk6CisgICAgICAgIChjaGVja1NlcGFyYXRvcik6CisgICAgICAgIChjb250ZXh0TWVudUNhbGxi
YWNrKToKKyAgICAgICAgKHB1c2hFdmVudCk6CisgICAgICAgIChsb2FkU3RhdHVzQ2FsbGJhY2sp
OgorICAgICAgICAobWFwRXZlbnRDYWxsYmFjayk6CisgICAgICAgICh0ZXN0Q29udGV4dE1lbnUp
OgorICAgICAgICAoY29udGV4dE1lbnVDdXN0b21JdGVtQ2FsbGJhY2spOgorICAgICAgICAodGVz
dENvbnRleHRNZW51Q3VzdG9tSXRlbSk6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0Y29weWFuZHBhc3RlLmM6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0Y29weWFuZHBhc3RlLmMuCisgICAgICAgICh0
ZXN0X2luZm9fbmV3KToKKyAgICAgICAgKHRlc3RfaW5mb19kZXN0cm95KToKKyAgICAgICAgKGNv
cHlfYW5kX3Bhc3RlX2ZpeHR1cmVfc2V0dXApOgorICAgICAgICAoY29weV9hbmRfcGFzdGVfZml4
dHVyZV90ZWFyZG93bik6CisgICAgICAgIChsb2FkX3N0YXR1c19jYik6CisgICAgICAgIChtYXBf
ZXZlbnRfY2IpOgorICAgICAgICAodGVzdF9jb3B5X2FuZF9wYXN0ZSk6CisgICAgICAgIChydW5Q
YXN0ZVRlc3RDYWxsYmFjayk6CisgICAgICAgICh3aW5kb3dfb2JqZWN0X2NsZWFyZWRfY2FsbGJh
Y2spOgorICAgICAgICAocGFzdGluZ190ZXN0X2dldF9kYXRhX2NhbGxiYWNrKToKKyAgICAgICAg
KHBhc3RpbmdfdGVzdF9jbGVhcl9kYXRhX2NhbGxiYWNrKToKKyAgICAgICAgKHRlc3RfcGFzdGlu
Z19tYXJrdXApOgorICAgICAgICAobWFpbik6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRHdGsvdGVzdGRvbWRvY3VtZW50LmM6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
L2d0ay90ZXN0cy90ZXN0ZG9tZG9jdW1lbnQuYy4KKyAgICAgICAgKGZpbmlzaF9sb2FkaW5nKToK
KyAgICAgICAgKGRvbV9kb2N1bWVudF9maXh0dXJlX3NldHVwKToKKyAgICAgICAgKGRvbV9kb2N1
bWVudF9maXh0dXJlX3RlYXJkb3duKToKKyAgICAgICAgKHRlc3RfZG9tX2RvY3VtZW50X3RpdGxl
KToKKyAgICAgICAgKHRlc3RfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19ieV90YWdfbmFtZSk6
CisgICAgICAgICh0ZXN0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfY2xhc3NfbmFtZSk6
CisgICAgICAgICh0ZXN0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudF9ieV9pZCk6CisgICAgICAg
ICh0ZXN0X2RvbV9kb2N1bWVudF9nZXRfbGlua3MpOgorICAgICAgICAodGVzdF9kb21fZG9jdW1l
bnRfaW5zZXJ0X3Jvdyk6CisgICAgICAgICh0ZXN0X2RvbV9kb2N1bWVudF9ldmFsdWF0ZSk6Cisg
ICAgICAgICh3ZWFrX25vdGlmeSk6CisgICAgICAgICh0ZXN0X2RvbV9kb2N1bWVudF9nYXJiYWdl
X2NvbGxlY3Rpb24pOgorICAgICAgICAobWFpbik6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRHdGsvdGVzdGRvbWRvbXdpbmRvdy5jOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YktpdC9ndGsvdGVzdHMvdGVzdGRvbWRvbXdpbmRvdy5jLgorICAgICAgICAoZmluaXNoX2xvYWRp
bmcpOgorICAgICAgICAoZG9tX2RvbXZpZXdfZml4dHVyZV9zZXR1cCk6CisgICAgICAgIChkb21f
ZG9tdmlld19maXh0dXJlX3RlYXJkb3duKToKKyAgICAgICAgKGRvbV9kb21fd2luZG93X2ZpeHR1
cmVfc2V0dXApOgorICAgICAgICAoZG9tX2RvbV93aW5kb3dfZml4dHVyZV90ZWFyZG93bik6Cisg
ICAgICAgIChsb2FkZWRDYWxsYmFjayk6CisgICAgICAgIChjbGlja2VkQ2FsbGJhY2spOgorICAg
ICAgICAobWFwX2V2ZW50X2NiKToKKyAgICAgICAgKGxvYWRfZXZlbnRfY2FsbGJhY2spOgorICAg
ICAgICAodGVzdF9kb21fZG9tdmlld19zaWduYWxzKToKKyAgICAgICAgKGNsaWNrZWRfY2IpOgor
ICAgICAgICAobG9hZF9zdGF0dXNfY2FsbGJhY2spOgorICAgICAgICAodGVzdF9kb21fZG9tdmll
d19kaXNwYXRjaF9ldmVudCk6CisgICAgICAgICh0ZXN0X2RvbV9kb21fd2luZG93X2dldF9jb21w
dXRlZF9zdHlsZSk6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdEd0ay90ZXN0ZG9tbm9kZS5jOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9n
dGsvdGVzdHMvdGVzdGRvbW5vZGUuYy4KKyAgICAgICAgKGZpbmlzaF9sb2FkaW5nKToKKyAgICAg
ICAgKGRvbV9ub2RlX2ZpeHR1cmVfc2V0dXApOgorICAgICAgICAoZG9tX25vZGVfZml4dHVyZV90
ZWFyZG93bik6CisgICAgICAgICh0ZXN0X2RvbV9ub2RlX2hpZXJhcmNoeV9uYXZpZ2F0aW9uKToK
KyAgICAgICAgKHRlc3RfZG9tX25vZGVfaW5zZXJ0aW9uKToKKyAgICAgICAgKG1haW4pOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3Rkb3dubG9hZC5jOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvd25sb2FkLmMuCisgICAgICAg
ICh0ZXN0X3dlYmtpdF9kb3dubG9hZF9jcmVhdGUpOgorICAgICAgICAobmF2aWdhdGlvbl9wb2xp
Y3lfZGVjaXNpb25fcmVxdWVzdGVkX2NiKToKKyAgICAgICAgKG5vdGlmeV9zdGF0dXNfY2IpOgor
ICAgICAgICAoc2V0X2ZpbGVuYW1lKToKKyAgICAgICAgKGhhbmRsZV9kb3dubG9hZF9yZXF1ZXN0
ZWRfY2IpOgorICAgICAgICAoZG93bmxvYWRfcmVxdWVzdGVkX2NiKToKKyAgICAgICAgKGRvd25s
b2FkX3JlcXVlc3RlZF9hc3luY2hfY2IpOgorICAgICAgICAodGVzdF93ZWJraXRfZG93bmxvYWRf
cGVyZm9ybSk6CisgICAgICAgICh0ZXN0X3dlYmtpdF9kb3dubG9hZF9zeW5jaCk6CisgICAgICAg
ICh0ZXN0X3dlYmtpdF9kb3dubG9hZF9hc3luY2gpOgorICAgICAgICAobWltZV90eXBlX3BvbGlj
eV9kZWNpc2lvbl9yZXF1ZXN0ZWRfY2IpOgorICAgICAgICAoaWRsZV9xdWl0X2xvb3BfY2IpOgor
ICAgICAgICAodGVzdF93ZWJraXRfZG93bmxvYWRfZGF0YSk6CisgICAgICAgIChub3RpZnlEb3du
bG9hZFN0YXR1c0NhbGxiYWNrKToKKyAgICAgICAgKHNlcnZlckNhbGxiYWNrKToKKyAgICAgICAg
KHRlc3Rfd2Via2l0X2Rvd25sb2FkX25vdF9mb3VuZCk6CisgICAgICAgIChtYWluKToKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0ZmF2aWNvbmRhdGFiYXNlLmM6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0ZmF2aWNvbmRhdGFiYXNl
LmMuCisgICAgICAgIChzZXJ2ZXJDYWxsYmFjayk6CisgICAgICAgIChkZWxldGVEYXRhYmFzZUZp
bGVJZkV4aXN0cyk6CisgICAgICAgICh0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlU2V0UGF0aCk6
CisgICAgICAgIChmYXZpY29uRGF0YWJhc2VHZXRWYWxpZEZhdmljb25DYWxsYmFjayk6CisgICAg
ICAgIChmYXZpY29uRGF0YWJhc2VHZXRJbnZhbGlkRmF2aWNvbkNhbGxiYWNrKToKKyAgICAgICAg
KGZhdmljb25EYXRhYmFzZUdldEZhdmljb25DYW5jZWxsZWRDYWxsYmFjayk6CisgICAgICAgIChx
dWl0TWFpbkxvb3BJZkxvYWRDb21wbGV0ZWQpOgorICAgICAgICAoaWRsZVF1aXRMb29wQ2FsbGJh
Y2spOgorICAgICAgICAod2Via2l0V2ViVmlld0ljb25Mb2FkZWQpOgorICAgICAgICAobG9hZFVS
SSk6CisgICAgICAgIChmYXZpY29uRGF0YWJhc2VHZXRWYWxpZEZhdmljb25JZGxlKToKKyAgICAg
ICAgKGZhdmljb25EYXRhYmFzZUdldEludmFsaWRGYXZpY29uSWRsZSk6CisgICAgICAgIChmYXZp
Y29uRGF0YWJhc2VHZXRGYXZpY29uQ2FuY2VsbGVkSWRsZSk6CisgICAgICAgICh0ZXN0V2ViS2l0
RmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNvbik6CisgICAgICAgICh0ZXN0V2ViS2l0RmF2aWNvbkRh
dGFiYXNlR2V0RmF2aWNvblVSSSk6CisgICAgICAgICh0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNl
UmVtb3ZlQWxsKToKKyAgICAgICAgKHRlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VDbG9zZURhdGFi
YXNlKToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0R3RrL3Rlc3RnbG9iYWxzLmM6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0
cy90ZXN0Z2xvYmFscy5jLgorICAgICAgICAodGVzdF9nbG9iYWxzX2RlZmF1bHRfc2Vzc2lvbik6
CisgICAgICAgICh0ZXN0X2dsb2JhbHNfc2VjdXJpdHlfcG9saWN5KToKKyAgICAgICAgKG1haW4p
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RoaXR0ZXN0cmVz
dWx0LmM6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0aGl0dGVzdHJl
c3VsdC5jLgorICAgICAgICAodGVzdF9pbmZvX25ldyk6CisgICAgICAgICh0ZXN0X2luZm9fZGVz
dHJveSk6CisgICAgICAgIChoaXRfdGVzdF9yZXN1bHRfZml4dHVyZV9zZXR1cCk6CisgICAgICAg
IChoaXRfdGVzdF9yZXN1bHRfZml4dHVyZV90ZWFyZG93bik6CisgICAgICAgIChsb2FkX3N0YXR1
c19jYik6CisgICAgICAgICh0ZXN0X3dlYmtpdF9oaXRfdGVzdF9yZXN1bHQpOgorICAgICAgICAo
bWFpbik6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGh0dHBi
YWNrZW5kLmM6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0aHR0cGJh
Y2tlbmQuYy4KKyAgICAgICAgKG5hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX3JlcXVlc3RlZF9j
Yik6CisgICAgICAgICh0ZXN0X3NvdXBfbWVzc2FnZV9saWZldGltZSk6CisgICAgICAgIChtYWlu
KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0a2V5ZXZlbnRz
LmM6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0a2V5ZXZlbnRzLmMu
CisgICAgICAgICh0ZXN0X2luZm9fbmV3KToKKyAgICAgICAgKHRlc3RfaW5mb19kZXN0cm95KToK
KyAgICAgICAgKGtleV9ldmVudF9maXh0dXJlX3NldHVwKToKKyAgICAgICAgKGtleV9ldmVudF9m
aXh0dXJlX3RlYXJkb3duKToKKyAgICAgICAgKGtleV9wcmVzc19ldmVudF9jYik6CisgICAgICAg
IChrZXlfcmVsZWFzZV9ldmVudF9jYik6CisgICAgICAgICh0ZXN0X2tleXByZXNzX2V2ZW50c19s
b2FkX3N0YXR1c19jYik6CisgICAgICAgIChtYXBfZXZlbnRfY2IpOgorICAgICAgICAoc2V0dXBf
a2V5ZXZlbnRfdGVzdCk6CisgICAgICAgICh0ZXN0X2tleXByZXNzX2V2ZW50cyk6CisgICAgICAg
IChlbGVtZW50X3RleHRfZXF1YWxfdG8pOgorICAgICAgICAodGVzdF9pbWVfbG9hZF9zdGF0dXNf
Y2IpOgorICAgICAgICAodGVzdF9pbWUpOgorICAgICAgICAodmVyaWZ5X2NvbnRlbnRzKToKKyAg
ICAgICAgKHRlc3RfYmxvY2tpbmdfbG9hZF9zdGF0dXNfY2IpOgorICAgICAgICAodGVzdF9ibG9j
a2luZyk6CisgICAgICAgICh0ZXN0X3hpbV9sb2FkX3N0YXR1c19jYik6CisgICAgICAgICh0ZXN0
X3hpbSk6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdEd0ay90ZXN0bG9hZGluZy5jOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9ndGsvdGVz
dHMvdGVzdGxvYWRpbmcuYy4KKyAgICAgICAgKHNlcnZlcl9jYWxsYmFjayk6CisgICAgICAgICh3
ZWJfbG9hZGluZ19maXh0dXJlX3NldHVwKToKKyAgICAgICAgKHdlYl9sb2FkaW5nX2ZpeHR1cmVf
dGVhcmRvd24pOgorICAgICAgICAoZ2V0X3VyaV9mb3JfcGF0aCk6CisgICAgICAgIChsb2FkX2Zp
bmlzaGVkX2NiKToKKyAgICAgICAgKHN0YXR1c19jaGFuZ2VkX2NiKToKKyAgICAgICAgKHRlc3Rf
bG9hZGluZ19zdGF0dXMpOgorICAgICAgICAobG9hZF9lcnJvcl9zdGF0dXNfY2hhbmdlZF9jYik6
CisgICAgICAgIChsb2FkX2Vycm9yX2NiKToKKyAgICAgICAgKHRlc3RfbG9hZGluZ19lcnJvcik6
CisgICAgICAgIChsb2FkX2NhbmNlbGxlZF9jYik6CisgICAgICAgIChzdG9wX2xvYWQpOgorICAg
ICAgICAobG9hZF9jYW5jZWxsZWRfc3RhdHVzX2NoYW5nZWRfY2IpOgorICAgICAgICAodGVzdF9s
b2FkaW5nX2NhbmNlbGxlZCk6CisgICAgICAgIChsb2FkX2dvYmFja19zdGF0dXNfY2hhbmdlZF9j
Yik6CisgICAgICAgIChsb2FkX3dlbnRiYWNrX3N0YXR1c19jaGFuZ2VkX2NiKToKKyAgICAgICAg
KGxvYWRfZXJyb3JfdGVzdCk6CisgICAgICAgICh0ZXN0X2xvYWRpbmdfZ29iYWNrKToKKyAgICAg
ICAgKG1haW4pOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3Rt
aW1laGFuZGxpbmcuYzogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rt
aW1laGFuZGxpbmcuYy4KKyAgICAgICAgKHNlcnZlcl9jYWxsYmFjayk6CisgICAgICAgIChpZGxl
X3F1aXRfbG9vcF9jYik6CisgICAgICAgIChtaW1lX3R5cGVfcG9saWN5X2RlY2lzaW9uX3JlcXVl
c3RlZF9jYik6CisgICAgICAgICh0ZXN0UmVtb3RlTWltZVR5cGUpOgorICAgICAgICAodGVzdExv
Y2FsTWltZVR5cGUpOgorICAgICAgICAobWFpbik6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRHdGsvdGVzdG5ldHdvcmtyZXF1ZXN0LmM6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0L2d0ay90ZXN0cy90ZXN0bmV0d29ya3JlcXVlc3QuYy4KKyAgICAgICAgKHRlc3RfbmV0
d29ya19yZXF1ZXN0X2NyZWF0ZV9kZXN0cm95KToKKyAgICAgICAgKHRlc3RfbmV0d29ya19yZXF1
ZXN0X3Byb3BlcnRpZXMpOgorICAgICAgICAobWFpbik6CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRHdGsvdGVzdG5ldHdvcmtyZXNwb25zZS5jOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdG5ldHdvcmtyZXNwb25zZS5jLgorICAgICAgICAodGVz
dF9uZXR3b3JrX3Jlc3BvbnNlX2NyZWF0ZV9kZXN0cm95KToKKyAgICAgICAgKHRlc3RfbmV0d29y
a19yZXNwb25zZV9wcm9wZXJ0aWVzKToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJiYWNrZm9yd2FyZGxpc3QuYzogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJiYWNrZm9yd2FyZGxpc3QuYy4K
KyAgICAgICAgKHRlc3Rfd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbGlmZXRpbWUpOgorICAgICAg
ICAodGVzdF93ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X29yZGVyKToKKyAgICAgICAgKHRl
c3Rfd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9hZGRfaXRlbSk6CisgICAgICAgICh0ZXN0
X3dlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY2xlYXIpOgorICAgICAgICAobWFpbik6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYmRhdGFzb3VyY2Uu
YzogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJkYXRhc291cmNl
LmMuCisgICAgICAgICh0ZXN0X3dlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X2luaXRpYWxfcmVx
dWVzdCk6CisgICAgICAgIChub3RpZnlfbG9hZF9zdGF0dXNfdW5yZWFjaGFibGVfY2IpOgorICAg
ICAgICAobm90aWZ5X2xvYWRfc3RhdHVzX2NiKToKKyAgICAgICAgKHdhaXRfdGltZXJfZmlyZWQp
OgorICAgICAgICAodGVzdF93ZWJraXRfd2ViX2RhdGFfc291cmNlKToKKyAgICAgICAgKG5vdGlm
eV9sb2FkX3N0YXR1c19saWZldGltZV9jYik6CisgICAgICAgICh0ZXN0X3dlYmtpdF93ZWJfZGF0
YV9zb3VyY2VfbGlmZXRpbWUpOgorICAgICAgICAodGVzdF93ZWJraXRfd2ViX2RhdGFfc291cmNl
X3VucmVhY2hhYmxlX3VyaSk6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2ViZnJhbWUuYzogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJmcmFtZS5jLgorICAgICAgICAoY3JlYXRlRnJhbWVTaWdu
YWxUZXN0RnJhbWVDcmVhdGVkQ2FsbGJhY2spOgorICAgICAgICAoY3JlYXRlRnJhbWVTaWduYWxU
ZXN0VGltZW91dCk6CisgICAgICAgICh0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfY3JlYXRlZF9zaWdu
YWwpOgorICAgICAgICAodGVzdF93ZWJraXRfd2ViX2ZyYW1lX2NyZWF0ZV9kZXN0cm95KToKKyAg
ICAgICAgKHRlc3Rfd2Via2l0X3dlYl9mcmFtZV9saWZldGltZSk6CisgICAgICAgIChwcmludF9y
ZXF1ZXN0ZWRfY2IpOgorICAgICAgICAocHJpbnRfdGltZW91dCk6CisgICAgICAgICh0ZXN0X3dl
YmtpdF93ZWJfZnJhbWVfcHJpbnRpbmcpOgorICAgICAgICAodGVzdF93ZWJraXRfd2ViX2ZyYW1l
X3Jlc3BvbnNlKToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0R3RrL3Rlc3R3ZWJoaXN0b3J5aXRlbS5jOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YktpdC9ndGsvdGVzdHMvdGVzdHdlYmhpc3RvcnlpdGVtLmMuCisgICAgICAgICh3ZWJfaGlzdG9y
eV9pdGVtX2ZpeHR1cmVfc2V0dXApOgorICAgICAgICAod2ViX2hpc3RvcnlfaXRlbV9maXh0dXJl
X3RlYXJkb3duKToKKyAgICAgICAgKHRlc3Rfd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X2Rh
dGEpOgorICAgICAgICAodGVzdF93ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9hbHRlcm5hdGVfdGl0
bGUpOgorICAgICAgICAobWFpbik6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRHdGsvdGVzdHdlYmluc3BlY3Rvci5jOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9ndGsv
dGVzdHMvdGVzdHdlYmluc3BlY3Rvci5jLgorICAgICAgICAocXVpdExvb3ApOgorICAgICAgICAo
Y29uc29sZU1lc3NhZ2VDYWxsYmFjayk6CisgICAgICAgIChpbnNwZWN0RWxlbWVudENhbGxiYWNr
KToKKyAgICAgICAgKGNsb3NlSW5zcGVjdG9yKToKKyAgICAgICAgKHNob3dJbnNwZWN0b3IpOgor
ICAgICAgICAobG9hZEZpbmlzaGVkKToKKyAgICAgICAgKHRlc3Rfd2Via2l0X3dlYl9pbnNwZWN0
b3JfY2xvc2VfYW5kX2luc3BlY3QpOgorICAgICAgICAodGVzdF93ZWJraXRfd2ViX2luc3BlY3Rv
cl9kZXN0cm95X2luc3BlY3RlZF93ZWJfdmlldyk6CisgICAgICAgIChtYWluKToKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2VicGx1Z2luZGF0YWJhc2UuYzog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJwbHVnaW5kYXRhYmFz
ZS5jLgorICAgICAgICAodGVzdF93ZWJraXRfd2ViX3BsdWdpbl9kYXRhYmFzZV9nZXRfcGx1Z2lu
cyk6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dEd0ay90ZXN0d2VicmVzb3VyY2UuYzogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvZ3RrL3Rl
c3RzL3Rlc3R3ZWJyZXNvdXJjZS5jLgorICAgICAgICAoc2VydmVyX2NhbGxiYWNrKToKKyAgICAg
ICAgKHdlYl9yZXNvdXJjZV9maXh0dXJlX3NldHVwKToKKyAgICAgICAgKHdlYl9yZXNvdXJjZV9m
aXh0dXJlX3RlYXJkb3duKToKKyAgICAgICAgKHRlc3Rfd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRf
dXJsKToKKyAgICAgICAgKHRlc3Rfd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZGF0YSk6CisgICAg
ICAgICh0ZXN0X3dlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X21pbWVfdHlwZSk6CisgICAgICAgICh0
ZXN0X3dlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X2VuY29kaW5nKToKKyAgICAgICAgKHRlc3Rfd2Vi
a2l0X3dlYl9yZXNvdXJjZV9nZXRfZnJhbWVfbmFtZSk6CisgICAgICAgIChyZXNvdXJjZV9yZXF1
ZXN0X3N0YXJ0aW5nX2NiKToKKyAgICAgICAgKG5vdGlmeV9sb2FkX3N0YXR1c19jYik6CisgICAg
ICAgICh0ZXN0X3dlYl9yZXNvdXJjZV9sb2FkaW5nKToKKyAgICAgICAgKHJlc291cmNlX3JlcXVl
c3Rfc3RhcnRpbmdfc3ViX2NiKToKKyAgICAgICAgKG5vdGlmeV9sb2FkX3N0YXR1c19zdWJfY2Ip
OgorICAgICAgICAoaWRsZV9xdWl0X2xvb3BfY2IpOgorICAgICAgICAodGVzdF93ZWJfcmVzb3Vy
Y2Vfc3ViX3Jlc291cmNlX2xvYWRpbmcpOgorICAgICAgICAobWFpbik6CisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYnNldHRpbmdzLmM6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2Vic2V0dGluZ3MuYy4KKyAgICAgICAgKHRl
c3Rfd2Via2l0X3dlYl9zZXR0aW5nc19jb3B5KToKKyAgICAgICAgKHRlc3Rfbm9uX3F1aXJreV91
c2VyX2FnZW50cyk6CisgICAgICAgICh0ZXN0X3dlYmtpdF93ZWJfc2V0dGluZ3NfdXNlcl9hZ2Vu
dCk6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dEd0ay90ZXN0d2Vidmlldy5jOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9ndGsvdGVzdHMv
dGVzdHdlYnZpZXcuYy4KKyAgICAgICAgKHNlcnZlcl9jYWxsYmFjayk6CisgICAgICAgIChpZGxl
X3F1aXRfbG9vcF9jYik6CisgICAgICAgICh0aW1lb3V0X2NiKToKKyAgICAgICAgKGljb25fdXJp
X2NoYW5nZWRfY2IpOgorICAgICAgICAoaWNvbl9sb2FkZWRfY2IpOgorICAgICAgICAodGVzdF93
ZWJraXRfd2ViX3ZpZXdfaWNvbl91cmkpOgorICAgICAgICAobWFwX2V2ZW50X2NiKToKKyAgICAg
ICAgKHF1aXRfYWZ0ZXJfc2hvcnRfZGVsYXlfY2IpOgorICAgICAgICAodGVzdF93ZWJraXRfd2Vi
X3ZpZXdfZ3JhYl9mb2N1cyk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRH
dGsvdGVzdHdpbmRvdy5jOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVz
dHdpbmRvdy5jLgorICAgICAgICAobm90aWZ5X2xvYWRfc3RhdHVzX2NiKToKKyAgICAgICAgKHRl
c3Rfd2Via2l0X3dpbmRvd19zY3JvbGxiYXJfcG9saWN5KToKKyAgICAgICAgKG1haW4pOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvTG9hZFRyYWNraW5nVGVzdC5jcHA6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9Mb2Fk
VHJhY2tpbmdUZXN0LmNwcC4KKyAgICAgICAgKGxvYWRDaGFuZ2VkQ2FsbGJhY2spOgorICAgICAg
ICAobG9hZEZhaWxlZENhbGxiYWNrKToKKyAgICAgICAgKGVzdGltYXRlZFByb2dyZXNzQ2hhbmdl
ZENhbGxiYWNrKToKKyAgICAgICAgKExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRUcmFja2luZ1Rlc3Qp
OgorICAgICAgICAoTG9hZFRyYWNraW5nVGVzdDo6fkxvYWRUcmFja2luZ1Rlc3QpOgorICAgICAg
ICAoTG9hZFRyYWNraW5nVGVzdDo6d2FpdFVudGlsTG9hZEZpbmlzaGVkKToKKyAgICAgICAgKExv
YWRUcmFja2luZ1Rlc3Q6OnByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOgorICAgICAgICAoTG9hZFRy
YWNraW5nVGVzdDo6cHJvdmlzaW9uYWxMb2FkUmVjZWl2ZWRTZXJ2ZXJSZWRpcmVjdCk6CisgICAg
ICAgIChMb2FkVHJhY2tpbmdUZXN0Ojpwcm92aXNpb25hbExvYWRGYWlsZWQpOgorICAgICAgICAo
TG9hZFRyYWNraW5nVGVzdDo6bG9hZENvbW1pdHRlZCk6CisgICAgICAgIChMb2FkVHJhY2tpbmdU
ZXN0Ojpsb2FkRmluaXNoZWQpOgorICAgICAgICAoTG9hZFRyYWNraW5nVGVzdDo6bG9hZEZhaWxl
ZCk6CisgICAgICAgIChMb2FkVHJhY2tpbmdUZXN0Ojplc3RpbWF0ZWRQcm9ncmVzc0NoYW5nZWQp
OgorICAgICAgICAoTG9hZFRyYWNraW5nVGVzdDo6bG9hZFVSSSk6CisgICAgICAgIChMb2FkVHJh
Y2tpbmdUZXN0Ojpsb2FkSHRtbCk6CisgICAgICAgIChMb2FkVHJhY2tpbmdUZXN0Ojpsb2FkUGxh
aW5UZXh0KToKKyAgICAgICAgKExvYWRUcmFja2luZ1Rlc3Q6OmxvYWRSZXF1ZXN0KToKKyAgICAg
ICAgKExvYWRUcmFja2luZ1Rlc3Q6OnJlbG9hZCk6CisgICAgICAgIChMb2FkVHJhY2tpbmdUZXN0
Ojpnb0JhY2spOgorICAgICAgICAoTG9hZFRyYWNraW5nVGVzdDo6Z29Gb3J3YXJkKToKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL0xvYWRUcmFja2luZ1Rlc3QuaDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0xvYWRUcmFj
a2luZ1Rlc3QuaC4KKyAgICAgICAgKExvYWRUcmFja2luZ1Rlc3Q6OnNldFJlZGlyZWN0VVJJKToK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1Rlc3RNYWluLmNwcDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RNYWlu
LmNwcC4KKyAgICAgICAgKHJlZ2lzdGVyR1Jlc291cmNlKToKKyAgICAgICAgKHJlbW92ZU5vbkVt
cHR5RGlyZWN0b3J5KToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
Z3RrL1dlYktpdDJHdGsvVGVzdE1haW4uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RNYWluLmguCisgICAgICAgIChUZXN0Ojp+VGVzdCk6
CisgICAgICAgIChUZXN0OjpvYmplY3RGaW5hbGl6ZWQpOgorICAgICAgICAoVGVzdDo6YXNzZXJ0
T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyk6CisgICAgICAgIChUZXN0OjpnZXRXZWJL
aXQxVGVzdFJlc291Y2VzRGlyKToKKyAgICAgICAgKFRlc3Q6OmdldFJlc291cmNlc0Rpcik6Cisg
ICAgICAgIChUZXN0OjphZGRMb2dGYXRhbEZsYWcpOgorICAgICAgICAoVGVzdDo6cmVtb3ZlTG9n
RmF0YWxGbGFnKToKKyAgICAgICAgKFRlc3Q6OmNhaXJvU3VyZmFjZXNFcXVhbCk6CisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9XZWJLaXRUZXN0QnVzLmNwcDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYktpdFRlc3RC
dXMuY3BwLgorICAgICAgICAoV2ViS2l0VGVzdEJ1czo6V2ViS2l0VGVzdEJ1cyk6CisgICAgICAg
IChXZWJLaXRUZXN0QnVzOjpydW4pOgorICAgICAgICAoV2ViS2l0VGVzdEJ1czo6fldlYktpdFRl
c3RCdXMpOgorICAgICAgICAoV2ViS2l0VGVzdEJ1czo6Z2V0T3JDcmVhdGVDb25uZWN0aW9uKToK
KyAgICAgICAgKG9uTmFtZUFwcGVhcmVkKToKKyAgICAgICAgKFdlYktpdFRlc3RCdXM6OmNyZWF0
ZVByb3h5KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYktpdFRl
c3RCdXMuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL1dlYktpdFRlc3RCdXMuaC4KKyAgICAgICAgKFdlYktpdFRlc3RCdXM6OmNvbm5lY3Rpb24p
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViS2l0VGVzdFNlcnZl
ci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0
cy9XZWJLaXRUZXN0U2VydmVyLmNwcC4KKyAgICAgICAgKFdlYktpdFRlc3RTZXJ2ZXI6OldlYktp
dFRlc3RTZXJ2ZXIpOgorICAgICAgICAoV2ViS2l0VGVzdFNlcnZlcjo6fldlYktpdFRlc3RTZXJ2
ZXIpOgorICAgICAgICAoV2ViS2l0VGVzdFNlcnZlcjo6cnVuKToKKyAgICAgICAgKFdlYktpdFRl
c3RTZXJ2ZXI6OmdldFVSSUZvclBhdGgpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvZ3RrL1dl
YktpdDJHdGsvV2ViS2l0VGVzdFNlcnZlci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViS2l0VGVzdFNlcnZlci5oLgorICAgICAgICAoV2Vi
S2l0VGVzdFNlcnZlcjo6YmFzZVVSSSk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9ndGsvV2Vi
S2l0Mkd0ay9XZWJQcm9jZXNzVGVzdFJ1bm5lci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJQcm9jZXNzVGVzdFJ1bm5lci5jcHAuCisg
ICAgICAgIChXZWJQcm9jZXNzVGVzdFJ1bm5lcjo6V2ViUHJvY2Vzc1Rlc3RSdW5uZXIpOgorICAg
ICAgICAoV2ViUHJvY2Vzc1Rlc3RSdW5uZXI6On5XZWJQcm9jZXNzVGVzdFJ1bm5lcik6CisgICAg
ICAgIChXZWJQcm9jZXNzVGVzdFJ1bm5lcjo6cHJveHlDcmVhdGVkQ2FsbGJhY2spOgorICAgICAg
ICAoV2ViUHJvY2Vzc1Rlc3RSdW5uZXI6OnByb3h5KToKKyAgICAgICAgKFdlYlByb2Nlc3NUZXN0
UnVubmVyOjpvbk5hbWVBcHBlYXJlZCk6CisgICAgICAgIChXZWJQcm9jZXNzVGVzdFJ1bm5lcjo6
b25OYW1lVmFuaXNoZWQpOgorICAgICAgICAoV2ViUHJvY2Vzc1Rlc3RSdW5uZXI6OnRlc3RGaW5p
c2hlZENhbGxiYWNrKToKKyAgICAgICAgKFdlYlByb2Nlc3NUZXN0UnVubmVyOjpydW5UZXN0KToK
KyAgICAgICAgKFdlYlByb2Nlc3NUZXN0UnVubmVyOjpmaW5pc2hUZXN0KToKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYlByb2Nlc3NUZXN0UnVubmVyLmg6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJQcm9jZXNz
VGVzdFJ1bm5lci5oLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvV2Vi
Vmlld1Rlc3QuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwLgorICAgICAgICAoV2ViVmlld1Rlc3Q6OldlYlZpZXdU
ZXN0KToKKyAgICAgICAgKFdlYlZpZXdUZXN0Ojp+V2ViVmlld1Rlc3QpOgorICAgICAgICAoV2Vi
Vmlld1Rlc3Q6OmxvYWRVUkkpOgorICAgICAgICAoV2ViVmlld1Rlc3Q6OmxvYWRIdG1sKToKKyAg
ICAgICAgKFdlYlZpZXdUZXN0Ojpsb2FkUGxhaW5UZXh0KToKKyAgICAgICAgKFdlYlZpZXdUZXN0
Ojpsb2FkUmVxdWVzdCk6CisgICAgICAgIChXZWJWaWV3VGVzdDo6bG9hZEFsdGVybmF0ZUhUTUwp
OgorICAgICAgICAoV2ViVmlld1Rlc3Q6OmdvQmFjayk6CisgICAgICAgIChXZWJWaWV3VGVzdDo6
Z29Gb3J3YXJkKToKKyAgICAgICAgKFdlYlZpZXdUZXN0Ojpnb1RvQmFja0ZvcndhcmRMaXN0SXRl
bSk6CisgICAgICAgIChXZWJWaWV3VGVzdDo6cXVpdE1haW5Mb29wKToKKyAgICAgICAgKFdlYlZp
ZXdUZXN0OjpxdWl0TWFpbkxvb3BBZnRlclByb2Nlc3NpbmdQZW5kaW5nRXZlbnRzKToKKyAgICAg
ICAgKHF1aXRNYWluTG9vcElkbGVDYWxsYmFjayk6CisgICAgICAgIChXZWJWaWV3VGVzdDo6d2Fp
dCk6CisgICAgICAgIChsb2FkQ2hhbmdlZCk6CisgICAgICAgIChXZWJWaWV3VGVzdDo6d2FpdFVu
dGlsTG9hZEZpbmlzaGVkKToKKyAgICAgICAgKHRpdGxlQ2hhbmdlZCk6CisgICAgICAgIChXZWJW
aWV3VGVzdDo6d2FpdFVudGlsVGl0bGVDaGFuZ2VkVG8pOgorICAgICAgICAoV2ViVmlld1Rlc3Q6
OndhaXRVbnRpbFRpdGxlQ2hhbmdlZCk6CisgICAgICAgIChwYXJlbnRXaW5kb3dNYXBwZWQpOgor
ICAgICAgICAoV2ViVmlld1Rlc3Q6OnNob3dJbldpbmRvdyk6CisgICAgICAgIChXZWJWaWV3VGVz
dDo6c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKToKKyAgICAgICAgKFdlYlZpZXdUZXN0
OjpyZXNpemVWaWV3KToKKyAgICAgICAgKFdlYlZpZXdUZXN0OjpzZWxlY3RBbGwpOgorICAgICAg
ICAocmVzb3VyY2VHZXREYXRhQ2FsbGJhY2spOgorICAgICAgICAoV2ViVmlld1Rlc3Q6Om1haW5S
ZXNvdXJjZURhdGEpOgorICAgICAgICAoV2ViVmlld1Rlc3Q6Om1vdXNlTW92ZVRvKToKKyAgICAg
ICAgKFdlYlZpZXdUZXN0OjpjbGlja01vdXNlQnV0dG9uKToKKyAgICAgICAgKFdlYlZpZXdUZXN0
OjprZXlTdHJva2UpOgorICAgICAgICAoV2ViVmlld1Rlc3Q6OmRvTW91c2VCdXR0b25FdmVudCk6
CisgICAgICAgIChydW5KYXZhU2NyaXB0UmVhZHlDYWxsYmFjayk6CisgICAgICAgIChydW5KYXZh
U2NyaXB0RnJvbUdSZXNvdXJjZVJlYWR5Q2FsbGJhY2spOgorICAgICAgICAoV2ViVmlld1Rlc3Q6
OnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCk6CisgICAgICAgIChXZWJWaWV3VGVz
dDo6cnVuSmF2YVNjcmlwdEZyb21HUmVzb3VyY2VBbmRXYWl0VW50aWxGaW5pc2hlZCk6CisgICAg
ICAgIChqc1ZhbHVlVG9DU3RyaW5nKToKKyAgICAgICAgKFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0
UmVzdWx0VG9DU3RyaW5nKToKKyAgICAgICAgKFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0
VG9OdW1iZXIpOgorICAgICAgICAoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0Jvb2xl
YW4pOgorICAgICAgICAoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRJc051bGwpOgorICAg
ICAgICAoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRJc1VuZGVmaW5lZCk6CisgICAgICAg
IChvblNuYXBzaG90UmVhZHkpOgorICAgICAgICAoV2ViVmlld1Rlc3Q6OmdldFNuYXBzaG90QW5k
V2FpdFVudGlsUmVhZHkpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsv
V2ViVmlld1Rlc3QuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmguCisKKzIwMTQtMDEtMDMgIENhcmxvcyBHYXJjaWEgQ2Ft
cG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCiAgICAgICAgIFJFR1JFU1NJT04ocjE2MTIxNCk6
IFtHVEtdIFdlYktpdDIgQyBBUEkgdGVzdHMgZmFpbCB0byBydW4gYWZ0ZXIgcjE2MTIxNAogICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI2NDMwCiAKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvcnVuLWd0ay10ZXN0cyBiL1Rvb2xzL1NjcmlwdHMvcnVu
LWd0ay10ZXN0cwppbmRleCA1MjRlN2UzLi44MmZhMzZjIDEwMDc1NQotLS0gYS9Ub29scy9TY3Jp
cHRzL3J1bi1ndGstdGVzdHMKKysrIGIvVG9vbHMvU2NyaXB0cy9ydW4tZ3RrLXRlc3RzCkBAIC01
OCwzNSArNTgsMzUgQEAgY2xhc3MgVGVzdFRpbWVvdXQoRXhjZXB0aW9uKToKICAgICBwYXNzCiAK
IGNsYXNzIFRlc3RSdW5uZXI6Ci0gICAgVEVTVF9ESVJTID0gWyAiV2ViS2l0MUdPYmplY3RBUElU
ZXN0cyIsICJXZWJLaXQyR09iamVjdEFQSVRlc3RzIiwgIlRlc3RXZWJLaXRBUEkiIF0KKyAgICBU
RVNUX0RJUlMgPSBbICJXZWJLaXQyR3RrIiwgIldlYktpdEd0ayIsICJXZWJLaXQyIiwgIkphdmFT
Y3JpcHRDb3JlIiwgIldURiIsICJXZWJDb3JlIiwgICJXZWJDb3JlR3RrIiBdCiAKICAgICBTS0lQ
UEVEID0gWwotICAgICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0
ZG93bmxvYWQiLCAiL3dlYmtpdC9kb3dubG9hZC9ub3QtZm91bmQiLCAiVGVzdCBmYWlscyBpbiBH
VEsgTGludXggNjQtYml0IFJlbGVhc2UgYm90IiwgODIzMjkpLAotICAgICAgICBTa2lwcGVkVGVz
dCgiV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0d2ViaW5zcGVjdG9yIiwgIi93ZWJraXQvd2Vi
aW5zcGVjdG9yL2Nsb3NlLWFuZC1pbnNwZWN0IiwgIlRlc3QgaXMgZmxha3kgaW4gR1RLIExpbnV4
IDMyLWJpdCBSZWxlYXNlIGJvdCIsIDgyODY5KSwKLSAgICAgICAgU2tpcHBlZFRlc3QoIldlYktp
dDFHT2JqZWN0QVBJVGVzdHMvdGVzdHdlYnJlc291cmNlIiwgIi93ZWJraXQvd2VicmVzb3VyY2Uv
bG9hZGluZyIsICJUZXN0IGZhaWxzIiwgMTA0Njg5KSwKLSAgICAgICAgU2tpcHBlZFRlc3QoIldl
YktpdDFHT2JqZWN0QVBJVGVzdHMvdGVzdHdlYnJlc291cmNlIiwgIi93ZWJraXQvd2VicmVzb3Vy
Y2Uvc3ViX3Jlc291cmNlX2xvYWRpbmciLCAiVGVzdCBmYWlscyBpbiBHVEsgTGludXggNjQtYml0
IFJlbGVhc2UgYm90IiwgODIzMzApLAotICAgICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0MUdPYmpl
Y3RBUElUZXN0cy90ZXN0d2VidmlldyIsICIvd2Via2l0L3dlYnZpZXcvaWNvbi11cmkiLCAiVGVz
dCB0aW1lcyBvdXQgaW4gR1RLIExpbnV4IDY0LWJpdCBSZWxlYXNlIGJvdCIsIDgyMzI4KSwKLSAg
ICAgICAgU2tpcHBlZFRlc3QoIldlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdFJlc291cmNlcyIs
ICIvd2Via2l0Mi9XZWJLaXRXZWJWaWV3L3Jlc291cmNlcyIsICJUZXN0IGlzIGZsYWt5IGluIEdU
SyBMaW51eCAzMi1iaXQgUmVsZWFzZSBib3QiLCA4Mjg2OCksCi0gICAgICAgIFNraXBwZWRUZXN0
KCJXZWJLaXQyR09iamVjdEFQSVRlc3RzL1Rlc3RVSUNsaWVudCIsICIvd2Via2l0Mi9XZWJLaXRX
ZWJWaWV3L21vdXNlLXRhcmdldCIsICJUZXN0IHRpbWVzIG91dCBhZnRlciByMTUwODkwIiwgMTE3
Njg5KSwKLSAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdEF1
dGhlbnRpY2F0aW9uIiwgU2tpcHBlZFRlc3QuRU5USVJFX1NVSVRFLCAiVGVzdCB0aW1lcyBvdXQg
YWZ0ZXIgcjE1MDg5MCIsIDExNzY4OSksCi0gICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXQyR09i
amVjdEFQSVRlc3RzL1Rlc3RDb250ZXh0TWVudSIsIFNraXBwZWRUZXN0LkVOVElSRV9TVUlURSwg
IlRlc3QgdGltZXMgb3V0IGFmdGVyIHIxNTA4OTAiLCAxMTc2ODkpLAotICAgICAgICBTa2lwcGVk
VGVzdCgiVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0MiIsICJXZWJLaXQyLk1vdXNlTW92ZUFmdGVy
Q3Jhc2giLCAiVGVzdCBpcyBmbGFreSIsIDg1MDY2KSwKLSAgICAgICAgU2tpcHBlZFRlc3QoIlRl
c3RXZWJLaXRBUEkvVGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5OZXdGaXJzdFZpc3VhbGx5Tm9uRW1w
dHlMYXlvdXRGb3JJbWFnZXMiLCAiVGVzdCBpcyBmbGFreSIsIDg1MDY2KSwKLSAgICAgICAgU2tp
cHBlZFRlc3QoIlRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5OZXdGaXJzdFZp
c3VhbGx5Tm9uRW1wdHlMYXlvdXRGcmFtZXMiLCAiVGVzdCBmYWlscyIsIDg1MDM3KSwKLSAgICAg
ICAgU2tpcHBlZFRlc3QoIlRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5SZXN0
b3JlU2Vzc2lvblN0YXRlQ29udGFpbmluZ0Zvcm1EYXRhIiwgIlNlc3Npb24gU3RhdGUgaXMgbm90
IGltcGxlbWVudGVkIGluIEdUSysgcG9ydCIsIDg0OTYwKSwKLSAgICAgICAgU2tpcHBlZFRlc3Qo
IlRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5TcGFjZWJhclNjcm9sbGluZyIs
ICJUZXN0IGZhaWxzIiwgODQ5NjEpLAotICAgICAgICBTa2lwcGVkVGVzdCgiVGVzdFdlYktpdEFQ
SS9UZXN0V2ViS2l0MiIsICJXZWJLaXQyLldLQ29ubmVjdGlvbiIsICJUZXN0cyBmYWlsIGFuZCB0
aW1lIG91dCBvdXQiLCA4NDk1OSksCi0gICAgICAgIFNraXBwZWRUZXN0KCJUZXN0V2ViS2l0QVBJ
L1Rlc3RXZWJLaXQyIiwgIldlYktpdDIuV0tQYWdlR2V0U2NhbGVGYWN0b3JOb3RaZXJvIiwgIlRl
c3QgZmFpbHMgYW5kIHRpbWVzIG91dCIsIDg4NDU1KSwKLSAgICAgICAgU2tpcHBlZFRlc3QoIlRl
c3RXZWJLaXRBUEkvVGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5Gb3JjZVJlcGFpbnQiLCAiVGVzdCB0
aW1lcyBvdXQiLCAxMDU1MzIpLAotICAgICAgICBTa2lwcGVkVGVzdCgiVGVzdFdlYktpdEFQSS9U
ZXN0V2ViS2l0MiIsICJXZWJLaXQyLlJlbG9hZFBhZ2VBZnRlckNyYXNoIiwgIlRlc3QgZmxha2ls
eSB0aW1lcyBvdXQiLCAxMTAxMjkpLAotICAgICAgICBTa2lwcGVkVGVzdCgiVGVzdFdlYktpdEFQ
SS9UZXN0V2ViS2l0MiIsICJXZWJLaXQyLkRpZEFzc29jaWF0ZUZvcm1Db250cm9scyIsICJUZXN0
IHRpbWVzIG91dCIsIDEyMDMwMiksCi0gICAgICAgIFNraXBwZWRUZXN0KCJUZXN0V2ViS2l0QVBJ
L1Rlc3RXZWJLaXQyIiwgIldlYktpdDIuSW5qZWN0ZWRCdW5kbGVGcmFtZUhpdFRlc3QiLCAiVGVz
dCB0aW1lcyBvdXQiLCAxMjAzMDMpLAotICAgICAgICBTa2lwcGVkVGVzdCgiVGVzdFdlYktpdEFQ
SS9UZXN0V2ViS2l0MiIsICJXZWJLaXQyLlJlc2l6ZVJldmVyc2VQYWdpbmF0ZWRXZWJWaWV3Iiwg
IlRlc3QgZmFpbHMiLCAxMjAzMDUpLAotICAgICAgICBTa2lwcGVkVGVzdCgiVGVzdFdlYktpdEFQ
SS9UZXN0V2ViS2l0MiIsICJXZWJLaXQyLlNjcm9sbFBpbm5pbmdCZWhhdmlvcnMiLCAiVGVzdCBm
YWlscyIsIDEyMDMwNiksCi0gICAgICAgIFNraXBwZWRUZXN0KCJUZXN0V2ViS2l0QVBJL1Rlc3RX
ZWJLaXQyIiwgIldlYktpdDIuVGVybWluYXRlVHdpY2UiLCAiVGVzdCBjYXVzZXMgY3Jhc2ggb24g
dGhlIG5leHQgdGVzdCIsIDEyMTk3MCksCi0gICAgICAgIFNraXBwZWRUZXN0KCJUZXN0V2ViS2l0
QVBJL1Rlc3RXZWJLaXQyIiwgIldlYktpdDIuR2VvbG9jYXRpb25UcmFuc2l0aW9uVG9IaWdoQWNj
dXJhY3kiLCAiVGVzdCBjYXVzZXMgY3Jhc2ggb24gdGhlIG5leHQgdGVzdCIsIDEyNTA2OCksCi0g
ICAgICAgIFNraXBwZWRUZXN0KCJUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXQyIiwgIldlYktpdDIu
R2VvbG9jYXRpb25UcmFuc2l0aW9uVG9Mb3dBY2N1cmFjeSIsICJUZXN0IGNhdXNlcyBjcmFzaCBv
biB0aGUgbmV4dCB0ZXN0IiwgMTI1MDY4KSwKLSAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdDJH
T2JqZWN0QVBJVGVzdHMvVGVzdEluc3BlY3RvclNlcnZlciIsIFNraXBwZWRUZXN0LkVOVElSRV9T
VUlURSwgIlRpbWluZyBvdXQgb24gdGhlIGJvdCIsIDEyMjU3MSksCisgICAgICAgIFNraXBwZWRU
ZXN0KCJXZWJLaXRHdGsvdGVzdGRvd25sb2FkIiwgIi93ZWJraXQvZG93bmxvYWQvbm90LWZvdW5k
IiwgIlRlc3QgZmFpbHMgaW4gR1RLIExpbnV4IDY0LWJpdCBSZWxlYXNlIGJvdCIsIDgyMzI5KSwK
KyAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdEd0ay90ZXN0d2ViaW5zcGVjdG9yIiwgIi93ZWJr
aXQvd2ViaW5zcGVjdG9yL2Nsb3NlLWFuZC1pbnNwZWN0IiwgIlRlc3QgaXMgZmxha3kgaW4gR1RL
IExpbnV4IDMyLWJpdCBSZWxlYXNlIGJvdCIsIDgyODY5KSwKKyAgICAgICAgU2tpcHBlZFRlc3Qo
IldlYktpdEd0ay90ZXN0d2VicmVzb3VyY2UiLCAiL3dlYmtpdC93ZWJyZXNvdXJjZS9sb2FkaW5n
IiwgIlRlc3QgZmFpbHMiLCAxMDQ2ODkpLAorICAgICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0R3Rr
L3Rlc3R3ZWJyZXNvdXJjZSIsICIvd2Via2l0L3dlYnJlc291cmNlL3N1Yl9yZXNvdXJjZV9sb2Fk
aW5nIiwgIlRlc3QgZmFpbHMgaW4gR1RLIExpbnV4IDY0LWJpdCBSZWxlYXNlIGJvdCIsIDgyMzMw
KSwKKyAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdEd0ay90ZXN0d2VidmlldyIsICIvd2Via2l0
L3dlYnZpZXcvaWNvbi11cmkiLCAiVGVzdCB0aW1lcyBvdXQgaW4gR1RLIExpbnV4IDY0LWJpdCBS
ZWxlYXNlIGJvdCIsIDgyMzI4KSwKKyAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdDJHdGsvVGVz
dFJlc291cmNlcyIsICIvd2Via2l0Mi9XZWJLaXRXZWJWaWV3L3Jlc291cmNlcyIsICJUZXN0IGlz
IGZsYWt5IGluIEdUSyBMaW51eCAzMi1iaXQgUmVsZWFzZSBib3QiLCA4Mjg2OCksCisgICAgICAg
IFNraXBwZWRUZXN0KCJXZWJLaXQyR3RrL1Rlc3RVSUNsaWVudCIsICIvd2Via2l0Mi9XZWJLaXRX
ZWJWaWV3L21vdXNlLXRhcmdldCIsICJUZXN0IHRpbWVzIG91dCBhZnRlciByMTUwODkwIiwgMTE3
Njg5KSwKKyAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdDJHdGsvVGVzdEF1dGhlbnRpY2F0aW9u
IiwgU2tpcHBlZFRlc3QuRU5USVJFX1NVSVRFLCAiVGVzdCB0aW1lcyBvdXQgYWZ0ZXIgcjE1MDg5
MCIsIDExNzY4OSksCisgICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXQyR3RrL1Rlc3RDb250ZXh0
TWVudSIsIFNraXBwZWRUZXN0LkVOVElSRV9TVUlURSwgIlRlc3QgdGltZXMgb3V0IGFmdGVyIHIx
NTA4OTAiLCAxMTc2ODkpLAorICAgICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0Mi9UZXN0V2ViS2l0
MiIsICJXZWJLaXQyLk1vdXNlTW92ZUFmdGVyQ3Jhc2giLCAiVGVzdCBpcyBmbGFreSIsIDg1MDY2
KSwKKyAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdDIvVGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5O
ZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXMiLCAiVGVzdCBpcyBmbGFreSIs
IDg1MDY2KSwKKyAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdDIvVGVzdFdlYktpdDIiLCAiV2Vi
S2l0Mi5OZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGcmFtZXMiLCAiVGVzdCBmYWlscyIs
IDg1MDM3KSwKKyAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdDIvVGVzdFdlYktpdDIiLCAiV2Vi
S2l0Mi5SZXN0b3JlU2Vzc2lvblN0YXRlQ29udGFpbmluZ0Zvcm1EYXRhIiwgIlNlc3Npb24gU3Rh
dGUgaXMgbm90IGltcGxlbWVudGVkIGluIEdUSysgcG9ydCIsIDg0OTYwKSwKKyAgICAgICAgU2tp
cHBlZFRlc3QoIldlYktpdDIvVGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5TcGFjZWJhclNjcm9sbGlu
ZyIsICJUZXN0IGZhaWxzIiwgODQ5NjEpLAorICAgICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0Mi9U
ZXN0V2ViS2l0MiIsICJXZWJLaXQyLldLQ29ubmVjdGlvbiIsICJUZXN0cyBmYWlsIGFuZCB0aW1l
IG91dCBvdXQiLCA4NDk1OSksCisgICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXQyL1Rlc3RXZWJL
aXQyIiwgIldlYktpdDIuV0tQYWdlR2V0U2NhbGVGYWN0b3JOb3RaZXJvIiwgIlRlc3QgZmFpbHMg
YW5kIHRpbWVzIG91dCIsIDg4NDU1KSwKKyAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdDIvVGVz
dFdlYktpdDIiLCAiV2ViS2l0Mi5Gb3JjZVJlcGFpbnQiLCAiVGVzdCB0aW1lcyBvdXQiLCAxMDU1
MzIpLAorICAgICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0Mi9UZXN0V2ViS2l0MiIsICJXZWJLaXQy
LlJlbG9hZFBhZ2VBZnRlckNyYXNoIiwgIlRlc3QgZmxha2lseSB0aW1lcyBvdXQiLCAxMTAxMjkp
LAorICAgICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0Mi9UZXN0V2ViS2l0MiIsICJXZWJLaXQyLkRp
ZEFzc29jaWF0ZUZvcm1Db250cm9scyIsICJUZXN0IHRpbWVzIG91dCIsIDEyMDMwMiksCisgICAg
ICAgIFNraXBwZWRUZXN0KCJXZWJLaXQyL1Rlc3RXZWJLaXQyIiwgIldlYktpdDIuSW5qZWN0ZWRC
dW5kbGVGcmFtZUhpdFRlc3QiLCAiVGVzdCB0aW1lcyBvdXQiLCAxMjAzMDMpLAorICAgICAgICBT
a2lwcGVkVGVzdCgiV2ViS2l0Mi9UZXN0V2ViS2l0MiIsICJXZWJLaXQyLlJlc2l6ZVJldmVyc2VQ
YWdpbmF0ZWRXZWJWaWV3IiwgIlRlc3QgZmFpbHMiLCAxMjAzMDUpLAorICAgICAgICBTa2lwcGVk
VGVzdCgiV2ViS2l0Mi9UZXN0V2ViS2l0MiIsICJXZWJLaXQyLlNjcm9sbFBpbm5pbmdCZWhhdmlv
cnMiLCAiVGVzdCBmYWlscyIsIDEyMDMwNiksCisgICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXQy
L1Rlc3RXZWJLaXQyIiwgIldlYktpdDIuVGVybWluYXRlVHdpY2UiLCAiVGVzdCBjYXVzZXMgY3Jh
c2ggb24gdGhlIG5leHQgdGVzdCIsIDEyMTk3MCksCisgICAgICAgIFNraXBwZWRUZXN0KCJXZWJL
aXQyL1Rlc3RXZWJLaXQyIiwgIldlYktpdDIuR2VvbG9jYXRpb25UcmFuc2l0aW9uVG9IaWdoQWNj
dXJhY3kiLCAiVGVzdCBjYXVzZXMgY3Jhc2ggb24gdGhlIG5leHQgdGVzdCIsIDEyNTA2OCksCisg
ICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXQyL1Rlc3RXZWJLaXQyIiwgIldlYktpdDIuR2VvbG9j
YXRpb25UcmFuc2l0aW9uVG9Mb3dBY2N1cmFjeSIsICJUZXN0IGNhdXNlcyBjcmFzaCBvbiB0aGUg
bmV4dCB0ZXN0IiwgMTI1MDY4KSwKKyAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdDJHdGsvVGVz
dEluc3BlY3RvclNlcnZlciIsIFNraXBwZWRUZXN0LkVOVElSRV9TVUlURSwgIlRpbWluZyBvdXQg
b24gdGhlIGJvdCIsIDEyMjU3MSksCiAgICAgXQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9w
dGlvbnMsIHRlc3RzPVtdKToKQEAgLTEwNiw2ICsxMDYsOSBAQCBjbGFzcyBUZXN0UnVubmVyOgog
ICAgICAgICBzZWxmLl9zcGlfcmVnaXN0cnlkID0gTm9uZQogICAgICAgICBzZWxmLl9zcGlfYnVz
X2xhdW5jaGVyID0gTm9uZQogCisgICAgZGVmIF90ZXN0X3Byb2dyYW1zX2Jhc2VfZGlyKHNlbGYp
OgorICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuX3Byb2dyYW1zX3BhdGgsICJUZXN0
V2ViS2l0QVBJIikKKwogICAgIGRlZiBfZ2V0X3Rlc3RzX2Zyb21fZGlyKHNlbGYsIHRlc3RfZGly
KToKICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIodGVzdF9kaXIpOgogICAgICAgICAgICAg
cmV0dXJuIFtdCkBAIC0xMzEsNyArMTM0LDcgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKIAogICAgICAg
ICB0ZXN0cyA9IFtdCiAgICAgICAgIGZvciB0ZXN0X2RpciBpbiBzZWxmLlRFU1RfRElSUzoKLSAg
ICAgICAgICAgIGFic29sdXRlX3Rlc3RfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuX3Byb2dyYW1z
X3BhdGgsIHRlc3RfZGlyKQorICAgICAgICAgICAgYWJzb2x1dGVfdGVzdF9kaXIgPSBvcy5wYXRo
LmpvaW4oc2VsZi5fdGVzdF9wcm9ncmFtc19iYXNlX2RpcigpLCB0ZXN0X2RpcikKICAgICAgICAg
ICAgIHRlc3RzLmV4dGVuZChzZWxmLl9nZXRfdGVzdHNfZnJvbV9kaXIoYWJzb2x1dGVfdGVzdF9k
aXIpKQogICAgICAgICByZXR1cm4gdGVzdHMKIApAQCAtMzYxLDE3ICszNjQsMTggQEAgY2xhc3Mg
VGVzdFJ1bm5lcjoKICAgICAgICAgcmV0dXJuIDAKIAogICAgIGRlZiBfcnVuX3Rlc3Qoc2VsZiwg
dGVzdF9wcm9ncmFtKToKLSAgICAgICAgaWYgIkdPYmplY3RBUElUZXN0IiBpbiB0ZXN0X3Byb2dy
YW06CisgICAgICAgIGJhc2VkaXIgPSBvcy5wYXRoLmJhc2VuYW1lKG9zLnBhdGguZGlybmFtZSh0
ZXN0X3Byb2dyYW0pKQorICAgICAgICBpZiBiYXNlZGlyIGluIFsiV2ViS2l0Mkd0ayIsICJXZWJL
aXRHdGsiXToKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9ydW5fdGVzdF9nbGliKHRlc3RfcHJv
Z3JhbSkKIAotICAgICAgICBpZiAiVGVzdFdlYktpdEFQSSIgaW4gdGVzdF9wcm9ncmFtOgorICAg
ICAgICBpZiBiYXNlZGlyIGluIFsiV2ViS2l0MiIsICJKYXZhU2NyaXB0Q29yZSIsICJXVEYiLCAi
V2ViQ29yZSIsICAiV2ViQ29yZUd0ayJdOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9n
b29nbGVfdGVzdF9zdWl0ZSh0ZXN0X3Byb2dyYW0pCiAKICAgICAgICAgcmV0dXJuIDEKIAogICAg
IGRlZiBydW5fdGVzdHMoc2VsZik6CiAgICAgICAgIGlmIG5vdCBzZWxmLl90ZXN0czoKLSAgICAg
ICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkVSUk9SOiB0ZXN0cyBub3QgZm91bmQgaW4gJXMuXG4i
ICUgKHNlbGYuX3Byb2dyYW1zX3BhdGgpKQorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgi
RVJST1I6IHRlc3RzIG5vdCBmb3VuZCBpbiAlcy5cbiIgJSAoc2VsZi5fdGVzdF9wcm9ncmFtc19i
YXNlX2RpcigpKSkKICAgICAgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQogICAgICAgICAgICAg
cmV0dXJuIDEKIApAQCAtNDA1LDE3ICs0MDksMTcgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAg
ICAgICAgIHNlbGYuX3RlYXJfZG93bl90ZXN0aW5nX2Vudmlyb25tZW50KCkKIAogICAgICAgICBp
ZiBmYWlsZWRfdGVzdHM6Ci0gICAgICAgICAgICBuYW1lcyA9IFt0ZXN0LnJlcGxhY2Uoc2VsZi5f
cHJvZ3JhbXNfcGF0aCwgJycsIDEpIGZvciB0ZXN0IGluIGZhaWxlZF90ZXN0c10KKyAgICAgICAg
ICAgIG5hbWVzID0gW3Rlc3QucmVwbGFjZShzZWxmLl90ZXN0X3Byb2dyYW1zX2Jhc2VfZGlyKCks
ICcnLCAxKSBmb3IgdGVzdCBpbiBmYWlsZWRfdGVzdHNdCiAgICAgICAgICAgICBzeXMuc3Rkb3V0
LndyaXRlKCJUZXN0cyBmYWlsZWQgKCVkKTogJXNcbiIgJSAobGVuKG5hbWVzKSwgIiwgIi5qb2lu
KG5hbWVzKSkpCiAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKIAogICAgICAgICBpZiBj
cmFzaGVkX3Rlc3RzOgotICAgICAgICAgICAgbmFtZXMgPSBbdGVzdC5yZXBsYWNlKHNlbGYuX3By
b2dyYW1zX3BhdGgsICcnLCAxKSBmb3IgdGVzdCBpbiBjcmFzaGVkX3Rlc3RzXQorICAgICAgICAg
ICAgbmFtZXMgPSBbdGVzdC5yZXBsYWNlKHNlbGYuX3Rlc3RfcHJvZ3JhbXNfYmFzZV9kaXIoKSwg
JycsIDEpIGZvciB0ZXN0IGluIGNyYXNoZWRfdGVzdHNdCiAgICAgICAgICAgICBzeXMuc3Rkb3V0
LndyaXRlKCJUZXN0cyB0aGF0IGNyYXNoZWQgKCVkKTogJXNcbiIgJSAobGVuKG5hbWVzKSwgIiwg
Ii5qb2luKG5hbWVzKSkpCiAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKIAogICAgICAg
ICBpZiB0aW1lZF9vdXRfdGVzdHM6Ci0gICAgICAgICAgICBuYW1lcyA9IFt0ZXN0LnJlcGxhY2Uo
c2VsZi5fcHJvZ3JhbXNfcGF0aCwgJycsIDEpIGZvciB0ZXN0IGluIHRpbWVkX291dF90ZXN0c10K
KyAgICAgICAgICAgIG5hbWVzID0gW3Rlc3QucmVwbGFjZShzZWxmLl90ZXN0X3Byb2dyYW1zX2Jh
c2VfZGlyKCksICcnLCAxKSBmb3IgdGVzdCBpbiB0aW1lZF9vdXRfdGVzdHNdCiAgICAgICAgICAg
ICBzeXMuc3Rkb3V0LndyaXRlKCJUZXN0cyB0aGF0IHRpbWVkIG91dCAoJWQpOiAlc1xuIiAlIChs
ZW4obmFtZXMpLCAiLCAiLmpvaW4obmFtZXMpKSkKICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1
c2goKQogCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIu
cHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKaW5kZXggNDIxZWYy
Ny4uY2MzZGEyNSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVj
a2VyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQpAQCAt
MzE3LDcgKzMxNyw3IEBAIF9DTUFLRV9GSUxFX0VYVEVOU0lPTiA9ICdjbWFrZScKICMgV2ViS2l0
IG1haW50YWlucyBzb21lIGZpbGVzIGluIE1vemlsbGEgc3R5bGUgb24gcHVycG9zZSB0byBlYXNl
CiAjIGZ1dHVyZSBtZXJnZXMuCiBfU0tJUFBFRF9GSUxFU19XSVRIX1dBUk5JTkcgPSBbCi0gICAg
IlNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzLyIsCisgICAgIlRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0R3RrLyIsCiAgICAgIyBBbGwgV2ViS2l0Ki5oIGZpbGVzIGluIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrLAogICAgICMgZXhjZXB0IHRob3NlIGVuZGluZyBpbiAuLi5Q
cml2YXRlLmggYXJlIEdUSysgQVBJIGhlYWRlcnMsCiAgICAgIyB3aGljaCBkaWZmZXIgZ3JlYXRs
eSBmcm9tIFdlYktpdCBjb2Rpbmcgc3R5bGUuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L3N0eWxlL2NoZWNrZXJfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3N0eWxlL2NoZWNrZXJfdW5pdHRlc3QucHkKaW5kZXggOTQ1YWZmOS4uYjk1NGU2YiAxMDA2NDQK
LS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyX3VuaXR0ZXN0LnB5Cisr
KyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcl91bml0dGVzdC5weQpAQCAt
MjgwLDcgKzI4MCw3IEBAIGNsYXNzIENoZWNrZXJEaXNwYXRjaGVyU2tpcFRlc3QodW5pdHRlc3Qu
VGVzdENhc2UpOgogICAgICAgICAiIiJUZXN0IHNob3VsZF9za2lwX3dpdGhfd2FybmluZygpLiIi
IgogICAgICAgICAjIENoZWNrIHNraXBwZWQgZmlsZXMuCiAgICAgICAgIHBhdGhzX3RvX3NraXAg
PSBbCi0gICAgICAgICAgICJTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXRrLmMiLAorICAg
ICAgICAgICAiVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGF0ay5jIiwK
ICAgICAgICAgICAgIlNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaCIs
CiAgICAgICAgICAgICJTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJW
aWV3LmgiLAogICAgICAgICAgICAiU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0TG9hZGVyLmgiLApAQCAtMjk3LDggKzI5Nyw4IEBAIGNsYXNzIENoZWNrZXJEaXNwYXRjaGVy
U2tpcFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICAiU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvSGVscGVyQ2xhc3MuaCIsCiAgICAgICAgICAgICJTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcCIsCiAgICAgICAgICAgICJT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oIiwK
LSAgICAgICAgICAgIlNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZp
ZXdUZXN0LmNwcCIsCi0gICAgICAgICAgICJTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9XZWJWaWV3VGVzdC5oIiwKKyAgICAgICAgICAgIlRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Mkd0ay9XZWJWaWV3VGVzdC5jcHAiLAorICAgICAgICAgICAiVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1dlYlZpZXdUZXN0LmgiLAogICAgICAgICAgICAg
XQogCiAgICAgICAgIGZvciBwYXRoIGluIHBhdGhzX25vdF90b19za2lwOgpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9HTlVtYWtlZmlsZS5hbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
R05VbWFrZWZpbGUuYW0KaW5kZXggMmVhMTA0MC4uYjRjZWRhNCAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9HTlVtYWtlZmlsZS5hbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0dO
VW1ha2VmaWxlLmFtCkBAIC0xLDYgKzEsMTEgQEAKIG5vaW5zdF9MVExJQlJBUklFUyArPSBcCiAJ
TGlicmFyaWVzL2xpYlRlc3RXZWJLaXRBUElNYWluLmxhCiAKK2lmIEVOQUJMRV9XRUJLSVQyCitu
b2luc3RfTFRMSUJSQVJJRVMgKz0gXAorCUxpYnJhcmllcy9saWJUZXN0V2ViS2l0Mkd0a0FQSS5s
YQorZW5kaWYKKwogTGlicmFyaWVzX2xpYlRlc3RXZWJLaXRBUElNYWluX2xhX1NPVVJDRVMgPSBc
CiAJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0LmggXAogCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHNDb250cm9sbGVyLmNwcCBcCkBAIC0yMCwzNyArMjUsMTgwIEBAIExpYnJhcmllc19saWJUZXN0
V2ViS2l0QVBJTWFpbl9sYV9DUFBGTEFHUyA9IFwKIAkkKGphdmFzY3JpcHRjb3JlX2NwcGZsYWdz
KSBcCiAJJChHVEtfQ0ZMQUdTKQogCit3ZWJraXRndGtfdGVzdHNfY2ZsYWdzID0gXAorCS1mbm8t
c3RyaWN0LWFsaWFzaW5nIFwKKwktRFRFU1RfUExVR0lOX0RJUj1cIiR7c2hlbGwgcHdkfS8ke3Rv
cF9idWlsZGRpcn0vVGVzdE5ldHNjYXBlUGx1Z2luLy5saWJzXCIgXAorCS1JJChzcmNkaXIpL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9Gb3J3YXJkaW5nSGVhZGVycyBcCisJLUkkKFdlYktpdCkgXAor
CS1JJChHRU5TT1VSQ0VTKSBcCisJLUkkKHRvcF9idWlsZGRpcikvU291cmNlL1dlYktpdC9ndGsg
XAorCS1JJCh0b3Bfc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncyBcCisJLUkkKHRvcF9z
cmNkaXIpL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QgXAorCSQoZ2xvYmFsX2NwcGZs
YWdzKSBcCisJJChnbG9iYWxfY2ZsYWdzKSBcCisJJChqYXZhc2NyaXB0Y29yZV9jcHBmbGFncykg
XAorCSQoRlJFRVRZUEVfQ0ZMQUdTKSBcCisJJChHTElCX0NGTEFHUykgXAorCSQoR1RLX0NGTEFH
UykgXAorCSQoTElCU09VUF9DRkxBR1MpIFwKKwkkKFhSRU5ERVJfQ0ZMQUdTKSBcCisJJChYVF9D
RkxBR1MpCisKK3dlYmtpdGd0a190ZXN0c19sZGFkZCA9IFwKKwlsaWJqYXZhc2NyaXB0Y29yZWd0
ay1AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQC5AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJT
SU9OQC5sYSBcCisJbGlid2Via2l0Z3RrLUBXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05ALkBX
RUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05ALmxhIFwKKwkkKEZSRUVUWVBFX0xJQlMpIFwKKwkk
KEdUS19MSUJTKSBcCisJJChHTElCX0xJQlMpIFwKKwkkKExJQlNPVVBfTElCUykgXAorCSQoWFJF
TkRFUl9MSUJTKQorCit3ZWJraXRndGtfdGVzdHNfbGRmbGFncyA9IFwKKwktbm8taW5zdGFsbAor
CisKK3dlYmtpdDJndGtfdGVzdHNfY3BwZmxhZ3MgPSBcCisJLURXRUJLSVRfRVhFQ19QQVRIPVwi
JHtzaGVsbCBwd2R9LyQodG9wX2J1aWxkZGlyKS9Qcm9ncmFtc1wiIFwKKwktRFdFQktJVF9TUkNf
RElSPVwiJHtzaGVsbCBwd2R9LyR7c3JjZGlyfVwiIFwKKwktRFdFQktJVF9ERVJJVkVEX1NSQ19E
SVI9XCIke3NoZWxsIHB3ZH0vJHt0b3BfYnVpbGRkaXJ9L0Rlcml2ZWRTb3VyY2VzXCIgXAorCS1E
V0VCS0lUX1RFU1RfUExVR0lOX0RJUj1cIiR7c2hlbGwgcHdkfS8ke3RvcF9idWlsZGRpcn0vVGVz
dE5ldHNjYXBlUGx1Z2luLy5saWJzXCIgXAorCS1EV0VCS0lUX1RFU1RfV0VCX0VYVEVOU0lPTlNf
RElSPVwiJHtzaGVsbCBwd2R9LyR7dG9wX2J1aWxkZGlyfS9MaWJyYXJpZXMvV2ViRXh0ZW5zaW9u
cy8ubGlic1wiIFwKKwktRFdFQktJVF9JTkpFQ1RFRF9CVU5ETEVfUEFUSD1cIiR7c2hlbGwgcHdk
fS8kKHRvcF9idWlsZGRpcikvLmxpYnNcIiBcCisJJChqYXZhc2NyaXB0Y29yZV9jcHBmbGFncykg
XAorCS1JJChzcmNkaXIpL1NvdXJjZSBcCisJLUkkKHNyY2RpcikvU291cmNlL1dlYktpdDIgXAor
CS1JJChzcmNkaXIpL1NvdXJjZS9KYXZhU2NyaXB0Q29yZSBcCisJLUkkKHNyY2RpcikvVG9vbHMv
VGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ayBcCisJLUkkKHRvcF9idWlsZGRpcikvRGVyaXZl
ZFNvdXJjZXMvV2ViS2l0Mi9pbmNsdWRlIFwKKwktSSQodG9wX2J1aWxkZGlyKS9EZXJpdmVkU291
cmNlcy9XZWJLaXQyL3dlYmtpdDJndGsgXAorCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3Vy
Y2VzL1dlYktpdDIvd2Via2l0Mmd0ay9pbmNsdWRlIFwKKwktSSQoc3JjZGlyKS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ayBcCisJJChnbG9iYWxfY3BwZmxhZ3MpIFwKKwkkKEZSRUVU
WVBFX0NGTEFHUykgXAorCSQoR0xJQl9DRkxBR1MpIFwKKwkkKEdUS19DRkxBR1MpIFwKKwkkKExJ
QlNPVVBfQ0ZMQUdTKQorCit3ZWJraXQyZ3RrX3Rlc3RzX2xkYWRkID0gXAorCUxpYnJhcmllcy9s
aWJUZXN0V2ViS2l0Mkd0a0FQSS5sYSBcCisJbGliamF2YXNjcmlwdGNvcmVndGstQFdFQktJVEdU
S19BUElfTUFKT1JfVkVSU0lPTkAuQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkAubGEgXAor
CWxpYndlYmtpdDJndGstQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkAuQFdFQktJVEdUS19B
UElfTUlOT1JfVkVSU0lPTkAubGEgXAorCSQoRlJFRVRZUEVfTElCUykgXAorCSQoR0VPQ0xVRV9M
SUJTKSBcCisJJChHTElCX0xJQlMpIFwKKwkkKEdUS19MSUJTKSBcCisJJChMSUJTT1VQX0xJQlMp
CisKK3dlYmtpdDJndGtfdGVzdHNfbGRmbGFncyA9IFwKKwktbm8taW5zdGFsbAorCitMaWJyYXJp
ZXNfbGliVGVzdFdlYktpdDJHdGtBUElfbGFfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0
QVBJL2d0ay9XZWJLaXQyR3RrL0xvYWRUcmFja2luZ1Rlc3QuY3BwIFwKKwlUb29scy9UZXN0V2Vi
S2l0QVBJL2d0ay9XZWJLaXQyR3RrL0xvYWRUcmFja2luZ1Rlc3QuaCBcCisJVG9vbHMvVGVzdFdl
YktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9XZWJLaXRUZXN0QnVzLmNwcCBcCisJVG9vbHMvVGVzdFdl
YktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9XZWJLaXRUZXN0QnVzLmggXAorCVRvb2xzL1Rlc3RXZWJL
aXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViS2l0VGVzdFNlcnZlci5jcHAgXAorCVRvb2xzL1Rlc3RX
ZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViS2l0VGVzdFNlcnZlci5oIFwKKwlUb29scy9UZXN0
V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYlByb2Nlc3NUZXN0UnVubmVyLmNwcCBcCisJVG9v
bHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9XZWJQcm9jZXNzVGVzdFJ1bm5lci5oIFwK
KwlUb29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1Rlc3RNYWluLmNwcCBcCisJVG9v
bHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9UZXN0TWFpbi5oIFwKKwlUb29scy9UZXN0
V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYlZpZXdUZXN0LmNwcCBcCisJVG9vbHMvVGVzdFdl
YktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9XZWJWaWV3VGVzdC5oCisKK0xpYnJhcmllc19saWJUZXN0
V2ViS2l0Mkd0a0FQSV9sYV9DUFBGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19jcHBmbGFncykK
KworCiBub2luc3RfUFJPR1JBTVMgKz0gXAotCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvVGVzdFdU
RiBcCi0JUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9UZXN0SmF2YVNjcmlwdENvcmUgXAotCVByb2dy
YW1zL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYkNvcmUgXAotCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkv
VGVzdEd0aworCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV1RGL1Rlc3RXVEYgXAorCVByb2dyYW1z
L1Rlc3RXZWJLaXRBUEkvSmF2YVNjcmlwdENvcmUvVGVzdEphdmFTY3JpcHRDb3JlIFwKKwlQcm9n
cmFtcy9UZXN0V2ViS2l0QVBJL1dlYkNvcmUvVGVzdFdlYkNvcmUgXAorCVByb2dyYW1zL1Rlc3RX
ZWJLaXRBUEkvV2ViQ29yZUd0ay9UZXN0V2ViQ29yZUd0ayBcCisJUHJvZ3JhbXMvVGVzdFdlYktp
dEFQSS9XZWJLaXRHdGsvdGVzdGFwcGxpY2F0aW9uY2FjaGUgXAorCVByb2dyYW1zL1Rlc3RXZWJL
aXRBUEkvV2ViS2l0R3RrL3Rlc3Rjb250ZXh0bWVudSBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQ
SS9XZWJLaXRHdGsvdGVzdGRvbWRvY3VtZW50IFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dl
YktpdEd0ay90ZXN0ZG9tZG9td2luZG93IFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktp
dEd0ay90ZXN0ZG9tbm9kZSBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXRHdGsvdGVz
dGh0dHBiYWNrZW5kIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdEd0ay90ZXN0ZmF2
aWNvbmRhdGFiYXNlIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdEd0ay90ZXN0bG9h
ZGluZyBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXRHdGsvdGVzdGdsb2JhbHMgXAor
CVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0R3RrL3Rlc3RtaW1laGFuZGxpbmcgXAorCVBy
b2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0R3RrL3Rlc3RuZXR3b3JrcmVxdWVzdCBcCisJUHJv
Z3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXRHdGsvdGVzdG5ldHdvcmtyZXNwb25zZSBcCisJUHJv
Z3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXRHdGsvdGVzdHdlYmZyYW1lIFwKKwlQcm9ncmFtcy9U
ZXN0V2ViS2l0QVBJL1dlYktpdEd0ay90ZXN0d2ViYmFja2ZvcndhcmRsaXN0IFwKKwlQcm9ncmFt
cy9UZXN0V2ViS2l0QVBJL1dlYktpdEd0ay90ZXN0d2ViaGlzdG9yeWl0ZW0gXAorCVByb2dyYW1z
L1Rlc3RXZWJLaXRBUEkvV2ViS2l0R3RrL3Rlc3R3aW5kb3cgXAorCVByb2dyYW1zL1Rlc3RXZWJL
aXRBUEkvV2ViS2l0R3RrL3Rlc3Rkb3dubG9hZCBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9X
ZWJLaXRHdGsvdGVzdGF0ayBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXRHdGsvdGVz
dGF0a3JvbGVzIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdEd0ay90ZXN0aGl0dGVz
dHJlc3VsdCBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXRHdGsvdGVzdHdlYmluc3Bl
Y3RvciBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXRHdGsvdGVzdHdlYnNldHRpbmdz
IFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdEd0ay90ZXN0d2VicmVzb3VyY2UgXAor
CVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0R3RrL3Rlc3R3ZWJkYXRhc291cmNlIFwKKwlQ
cm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdEd0ay90ZXN0d2VicGx1Z2luZGF0YWJhc2UgXAor
CVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0R3RrL3Rlc3R3ZWJ2aWV3IFwKKwlQcm9ncmFt
cy9UZXN0V2ViS2l0QVBJL1dlYktpdEd0ay90ZXN0a2V5ZXZlbnRzIFwKKwlQcm9ncmFtcy9UZXN0
V2ViS2l0QVBJL1dlYktpdEd0ay90ZXN0Y29weWFuZHBhc3RlCiAKIGlmIEVOQUJMRV9XRUJLSVQy
CiBub2luc3RfUFJPR1JBTVMgKz0gXAotCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktp
dDIKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdDIvVGVzdFdlYktpdDIgXAorCVByb2dy
YW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0Mkd0ay9JbnNwZWN0b3JUZXN0U2VydmVyIFwKKwlQcm9n
cmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdDJHdGsvVGVzdEF1dGhlbnRpY2F0aW9uIFwKKwlQcm9n
cmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdDJHdGsvVGVzdEJhY2tGb3J3YXJkTGlzdCBcCisJUHJv
Z3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXQyR3RrL1Rlc3RDb250ZXh0TWVudSBcCisJUHJvZ3Jh
bXMvVGVzdFdlYktpdEFQSS9XZWJLaXQyR3RrL1Rlc3RDb29raWVNYW5hZ2VyIFwKKwlQcm9ncmFt
cy9UZXN0V2ViS2l0QVBJL1dlYktpdDJHdGsvVGVzdERPTU5vZGUgXAorCVByb2dyYW1zL1Rlc3RX
ZWJLaXRBUEkvV2ViS2l0Mkd0ay9UZXN0RG93bmxvYWRzIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0
QVBJL1dlYktpdDJHdGsvVGVzdEZyYW1lIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktp
dDJHdGsvVGVzdEluc3BlY3RvciBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXQyR3Rr
L1Rlc3RJbnNwZWN0b3JTZXJ2ZXIgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0Mkd0
ay9UZXN0TG9hZGVyQ2xpZW50IFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdDJHdGsv
VGVzdFByaW50aW5nIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdDJHdGsvVGVzdFJl
c291cmNlcyBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXQyR3RrL1Rlc3RTU0wgXAor
CVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0Mkd0ay9UZXN0VUlDbGllbnQgXAorCVByb2dy
YW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0Mkd0ay9UZXN0V2ViRXh0ZW5zaW9ucyBcCisJUHJvZ3Jh
bXMvVGVzdFdlYktpdEFQSS9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRWZXJzaW9uIFwKKwlQcm9ncmFt
cy9UZXN0V2ViS2l0QVBJL1dlYktpdDJHdGsvVGVzdFdlYktpdEZhdmljb25EYXRhYmFzZSBcCisJ
UHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxl
ciBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRQb2xpY3lD
bGllbnQgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0U2V0
dGluZ3MgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0V2Vi
Q29udGV4dCBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRX
ZWJWaWV3IFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdDJHdGsvVGVzdFdlYktpdFdl
YlZpZXdHcm91cCBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXQyR3RrL1Rlc3RXZWJW
aWV3RWRpdG9yCisKK2lmIEhBVkVfQVRTUEkyCitub2luc3RfUFJPR1JBTVMgKz0gXAorCVByb2dy
YW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0Mkd0ay9BY2Nlc3NpYmlsaXR5VGVzdFNlcnZlciBcCisJ
UHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5
CitlbmRpZgogZW5kaWYgIyBFTkFCTEVfV0VCS0lUMgogCi1Qcm9ncmFtc19UZXN0V2ViS2l0QVBJ
X1Rlc3RXVEZfQ1BQRkxBR1MgPSBcCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dURl9UZXN0V1RG
X0NQUEZMQUdTID0gXAogCSQoTGlicmFyaWVzX2xpYlRlc3RXZWJLaXRBUElNYWluX2xhX0NQUEZM
QUdTKSBcCiAJJChHTElCX0xJQlMpIFwKIAkkKENBSVJPX0NGTEFHUykKIAotUHJvZ3JhbXNfVGVz
dFdlYktpdEFQSV9UZXN0V1RGX0NYWEZMQUdTID0gXAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9X
VEZfVGVzdFdURl9DWFhGTEFHUyA9IFwKIAktREdURVNUX0hBU19SVFRJPTAgXAogCSQoZ2xvYmFs
X2N4eGZsYWdzKQogCi1Qcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RXVEZfTERBREQgPSBcCitQ
cm9ncmFtc19UZXN0V2ViS2l0QVBJX1dURl9UZXN0V1RGX0xEQUREID0gXAogCUxpYnJhcmllcy9s
aWJUZXN0V2ViS2l0QVBJTWFpbi5sYSBcCiAJTGlicmFyaWVzL2xpYmd0ZXN0LmxhIFwKIAlsaWJX
VEYubGEgXAogCSQoR1RLX0xJQlMpIFwKIAkkKEdMSUJfTElCUykKIAotUHJvZ3JhbXNfVGVzdFdl
YktpdEFQSV9UZXN0V1RGX0xERkxBR1MgPSBcCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dURl9U
ZXN0V1RGX0xERkxBR1MgPSBcCiAJLW5vLWluc3RhbGwKIAotUHJvZ3JhbXNfVGVzdFdlYktpdEFQ
SV9UZXN0V1RGX1NPVVJDRVMgPSBcCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dURl9UZXN0V1RG
X1NPVVJDRVMgPSBcCiAJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQXRvbWljU3RyaW5n
LmNwcCBcCiAJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ1N0cmluZy5jcHAgXAogCVRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NoZWNrZWRBcml0aG1ldGljT3BlcmF0aW9ucy5j
cHAgXApAQCAtNzgsMjMgKzIyNiwyMyBAQCBQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RXVEZf
U09VUkNFUyA9IFwKIAlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9WZWN0b3IuY3BwIFwK
IAlUb29scy9UZXN0V2ViS2l0QVBJL1dURlN0cmluZ1V0aWxpdGllcy5oCiAKLVByb2dyYW1zX1Rl
c3RXZWJLaXRBUElfVGVzdEphdmFTY3JpcHRDb3JlX0NQUEZMQUdTID0gXAorUHJvZ3JhbXNfVGVz
dFdlYktpdEFQSV9KYXZhU2NyaXB0Q29yZV9UZXN0SmF2YVNjcmlwdENvcmVfQ1BQRkxBR1MgPSBc
CiAJJChMaWJyYXJpZXNfbGliVGVzdFdlYktpdEFQSU1haW5fbGFfQ1BQRkxBR1MpCiAKLVByb2dy
YW1zX1Rlc3RXZWJLaXRBUElfVGVzdEphdmFTY3JpcHRDb3JlX0NYWEZMQUdTID0gXAorUHJvZ3Jh
bXNfVGVzdFdlYktpdEFQSV9KYXZhU2NyaXB0Q29yZV9UZXN0SmF2YVNjcmlwdENvcmVfQ1hYRkxB
R1MgPSBcCiAJLURHVEVTVF9IQVNfUlRUST0wIFwKIAkkKGdsb2JhbF9jeHhmbGFncykKIAotUHJv
Z3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0SmF2YVNjcmlwdENvcmVfTERBREQgPSBcCitQcm9ncmFt
c19UZXN0V2ViS2l0QVBJX0phdmFTY3JpcHRDb3JlX1Rlc3RKYXZhU2NyaXB0Q29yZV9MREFERCA9
IFwKIAlMaWJyYXJpZXMvbGliVGVzdFdlYktpdEFQSU1haW4ubGEgXAogCUxpYnJhcmllcy9saWJn
dGVzdC5sYSBcCiAJbGliV1RGLmxhIFwKIAkkKEdUS19MSUJTKQogCi1Qcm9ncmFtc19UZXN0V2Vi
S2l0QVBJX1Rlc3RKYXZhU2NyaXB0Q29yZV9MREZMQUdTID0gXAorUHJvZ3JhbXNfVGVzdFdlYktp
dEFQSV9KYXZhU2NyaXB0Q29yZV9UZXN0SmF2YVNjcmlwdENvcmVfTERGTEFHUyA9IFwKIAktbm8t
aW5zdGFsbAogCi1Qcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RKYXZhU2NyaXB0Q29yZV9TT1VS
Q0VTID0gXAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9KYXZhU2NyaXB0Q29yZV9UZXN0SmF2YVNj
cmlwdENvcmVfU09VUkNFUyA9IFwKIAlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL0phdmFTY3Jp
cHRDb3JlL1ZNSW5zcGVjdG9yLmNwcAogCiB3ZWJjb3JlX2xheWVyX2RlcHMgPSBcCkBAIC0xMjks
MTUgKzI3NywxNSBAQCBsaWJXZWJDb3JlTGF5ZXIuYTogJCh3ZWJjb3JlX2xheWVyX2RlcHMpCiBE
SVNUQ0xFQU5GSUxFUyArPSBcCiAJJCh0b3BfYnVpbGRkaXIpL2xpYldlYkNvcmVMYXllci5hCiAK
LVByb2dyYW1zX1Rlc3RXZWJLaXRBUElfVGVzdFdlYkNvcmVfQ1BQRkxBR1MgPSBcCitQcm9ncmFt
c19UZXN0V2ViS2l0QVBJX1dlYkNvcmVfVGVzdFdlYkNvcmVfQ1BQRkxBR1MgPSBcCiAJJChMaWJy
YXJpZXNfbGliVGVzdFdlYktpdEFQSU1haW5fbGFfQ1BQRkxBR1MpIFwKIAktSSQodG9wX2J1aWxk
ZGlyKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL2luY2x1ZGUKIAotUHJvZ3JhbXNfVGVzdFdlYktp
dEFQSV9UZXN0V2ViQ29yZV9DWFhGTEFHUyA9IFwKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2Vi
Q29yZV9UZXN0V2ViQ29yZV9DWFhGTEFHUyA9IFwKIAktREdURVNUX0hBU19SVFRJPTAgXAogCSQo
Z2xvYmFsX2N4eGZsYWdzKQogCi1Qcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RXZWJDb3JlX0xE
QUREID0gXAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJDb3JlX1Rlc3RXZWJDb3JlX0xEQURE
ID0gXAogCUxpYnJhcmllcy9saWJUZXN0V2ViS2l0QVBJTWFpbi5sYSBcCiAJTGlicmFyaWVzL2xp
Ymd0ZXN0LmxhIFwKIAlsaWJqYXZhc2NyaXB0Y29yZWd0ay1AV0VCS0lUR1RLX0FQSV9NQUpPUl9W
RVJTSU9OQC5AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQC5sYSBcCkBAIC0xNjQsMTUgKzMx
MiwxNSBAQCBQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RXZWJDb3JlX0xEQUREID0gXAogCSQo
WFRfTElCUykgXAogCSQoWkxJQl9MSUJTKQogCi1Qcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RX
ZWJDb3JlX0xERkxBR1MgPSBcCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYkNvcmVfVGVzdFdl
YkNvcmVfTERGTEFHUyA9IFwKIAktbm8taW5zdGFsbAogCi1Qcm9ncmFtc19UZXN0V2ViS2l0QVBJ
X1Rlc3RXZWJDb3JlX1NPVVJDRVMgPSBcCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYkNvcmVf
VGVzdFdlYkNvcmVfU09VUkNFUyA9IFwKIAlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvVVJMLmNwcCBcCiAJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0xheW91dFVu
aXQuY3BwCiAKLVByb2dyYW1zX1Rlc3RXZWJLaXRBUElfVGVzdEd0a19DUFBGTEFHUyA9IFwKLQkk
KFByb2dyYW1zX1Rlc3RXZWJLaXRBUElfVGVzdFdURl9DUFBGTEFHUykgXAorUHJvZ3JhbXNfVGVz
dFdlYktpdEFQSV9XZWJDb3JlR3RrX1Rlc3RXZWJDb3JlR3RrX0NQUEZMQUdTID0gXAorCSQoUHJv
Z3JhbXNfVGVzdFdlYktpdEFQSV9XVEZfVGVzdFdURl9DUFBGTEFHUykgXAogCSQocGxhdGZvcm1f
Y3BwZmxhZ3MpIFwKIAkkKHBsYXRmb3JtZ3RrX2NwcGZsYWdzKSBcCiAJJCh3ZWJjb3JlX2NwcGZs
YWdzKSBcCkBAIC0xODIsMTEgKzMzMCwxMSBAQCBQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RH
dGtfQ1BQRkxBR1MgPSBcCiAJJChHVEtfQ0ZMQUdTKSBcCiAJJChMSUJTT1VQX0NGTEFHUykKIAot
UHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0R3RrX0NYWEZMQUdTID0gXAorUHJvZ3JhbXNfVGVz
dFdlYktpdEFQSV9XZWJDb3JlR3RrX1Rlc3RXZWJDb3JlR3RrX0NYWEZMQUdTID0gXAogCS1ER1RF
U1RfSEFTX1JUVEk9MCBcCiAJJChnbG9iYWxfY3h4ZmxhZ3MpCiAKLVByb2dyYW1zX1Rlc3RXZWJL
aXRBUElfVGVzdEd0a19MREFERCA9IFwKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViQ29yZUd0
a19UZXN0V2ViQ29yZUd0a19MREFERCA9IFwKIAlMaWJyYXJpZXMvbGliVGVzdFdlYktpdEFQSU1h
aW4ubGEgXAogCUxpYnJhcmllcy9saWJndGVzdC5sYSBcCiAJbGliamF2YXNjcmlwdGNvcmVndGst
QFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkAuQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lP
TkAubGEgXApAQCAtMTk4LDEwICszNDYsMTAgQEAgUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0
R3RrX0xEQUREID0gXAogCSQoR1RLX0xJQlMpIFwKIAkkKExJQlNPVVBfTElCUykKIAotUHJvZ3Jh
bXNfVGVzdFdlYktpdEFQSV9UZXN0R3RrX0xERkxBR1MgPSBcCi0JJChQcm9ncmFtc19UZXN0V2Vi
S2l0QVBJX1Rlc3RXVEZfTERGTEFHUykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViQ29yZUd0
a19UZXN0V2ViQ29yZUd0a19MREZMQUdTID0gXAorCSQoUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9X
VEZfVGVzdFdURl9MREZMQUdTKQogCi1Qcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RHdGtfU09V
UkNFUyA9IFwKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViQ29yZUd0a19UZXN0V2ViQ29yZUd0
a19TT1VSQ0VTID0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50
LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHAgXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUuY3BwIFwKQEAgLTIxMSwx
OSArMzU5LDE5MiBAQCBQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RHdGtfU09VUkNFUyA9IFwK
IAlUb29scy9UZXN0V2ViS2l0QVBJL2NvbmZpZy5oIFwKIAlUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL2d0ay9JbnB1dE1ldGhvZEZpbHRlci5jcHAKIAotUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9U
ZXN0V2ViS2l0Ml9DUFBGTEFHUyA9IFwKLQkkKFByb2dyYW1zX1Rlc3RXZWJLaXRBUElfVGVzdFdU
Rl9DUFBGTEFHUykgXAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGFwcGxp
Y2F0aW9uY2FjaGVfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dEd0ay90ZXN0YXBwbGljYXRpb25jYWNoZS5jCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktp
dEd0a190ZXN0YXBwbGljYXRpb25jYWNoZV9DRkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19jZmxh
Z3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0YXBwbGljYXRpb25jYWNo
ZV9MREFERCA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQ
SV9XZWJLaXRHdGtfdGVzdGFwcGxpY2F0aW9uY2FjaGVfTERGTEFHUyA9ICQod2Via2l0Z3RrX3Rl
c3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3Rjb250
ZXh0bWVudV9TT1VSQ0VTID0gXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3Rr
L3Rlc3Rjb250ZXh0bWVudS5jCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0
Y29udGV4dG1lbnVfQ0ZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfY2ZsYWdzKQorUHJvZ3JhbXNf
VGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGNvbnRleHRtZW51X0xEQUREID0gJCh3ZWJraXRn
dGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0Y29u
dGV4dG1lbnVfTERGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1z
X1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3Rkb21kb2N1bWVudF9TT1VSQ0VTID0gXAorCVRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3Rkb21kb2N1bWVudC5jCitQcm9n
cmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0ZG9tZG9jdW1lbnRfQ0ZMQUdTID0gJCh3
ZWJraXRndGtfdGVzdHNfY2ZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtf
dGVzdGRvbWRvY3VtZW50X0xEQUREID0gJCh3ZWJraXRndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFt
c19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0ZG9tZG9jdW1lbnRfTERGTEFHUyA9ICQod2Vi
a2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3Rr
X3Rlc3Rkb21kb213aW5kb3dfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdEd0ay90ZXN0ZG9tZG9td2luZG93LmMKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2Vi
S2l0R3RrX3Rlc3Rkb21kb213aW5kb3dfQ0ZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfY2ZsYWdz
KQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGRvbWRvbXdpbmRvd19MREFE
RCA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJL
aXRHdGtfdGVzdGRvbWRvbXdpbmRvd19MREZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfbGRmbGFn
cykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGRvbW5vZGVfU09VUkNF
UyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0ZG9tbm9kZS5j
CitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0ZG9tbm9kZV9DRkxBR1MgPSAk
KHdlYmtpdGd0a190ZXN0c19jZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0
a190ZXN0ZG9tbm9kZV9MREFERCA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNf
VGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGRvbW5vZGVfTERGTEFHUyA9ICQod2Via2l0Z3Rr
X3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3Ro
dHRwYmFja2VuZF9TT1VSQ0VTID0gXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
R3RrL3Rlc3RodHRwYmFja2VuZC5jCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190
ZXN0aHR0cGJhY2tlbmRfQ0ZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfY2ZsYWdzKQorUHJvZ3Jh
bXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGh0dHBiYWNrZW5kX0xEQUREID0gJCh3ZWJr
aXRndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0
aHR0cGJhY2tlbmRfTERGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dy
YW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3RmYXZpY29uZGF0YWJhc2VfU09VUkNFUyA9
IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0ZmF2aWNvbmRhdGFi
YXNlLmMgXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RfdXRpbHMu
YworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGZhdmljb25kYXRhYmFzZV9D
RkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19jZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJ
X1dlYktpdEd0a190ZXN0ZmF2aWNvbmRhdGFiYXNlX0xEQUREID0gJCh3ZWJraXRndGtfdGVzdHNf
bGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0ZmF2aWNvbmRhdGFi
YXNlX0xERkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0
V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0Z2xvYmFsc19TT1VSQ0VTID0gXAorCVRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RnbG9iYWxzLmMKK1Byb2dyYW1zX1Rlc3RXZWJL
aXRBUElfV2ViS2l0R3RrX3Rlc3RnbG9iYWxzX0NGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2Nm
bGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3RnbG9iYWxzX0xEQURE
ID0gJCh3ZWJraXRndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktp
dEd0a190ZXN0Z2xvYmFsc19MREZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfbGRmbGFncykKKwor
UHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGxvYWRpbmdfU09VUkNFUyA9IFwK
KwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0bG9hZGluZy5jCitQcm9n
cmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0bG9hZGluZ19DRkxBR1MgPSAkKHdlYmtp
dGd0a190ZXN0c19jZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0
bG9hZGluZ19MREFERCA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdl
YktpdEFQSV9XZWJLaXRHdGtfdGVzdGxvYWRpbmdfTERGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3Rz
X2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3RtaW1laGFu
ZGxpbmdfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90
ZXN0bWltZWhhbmRsaW5nLmMgXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3Rr
L3Rlc3RfdXRpbHMuYworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdG1pbWVo
YW5kbGluZ19DRkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19jZmxhZ3MpCitQcm9ncmFtc19UZXN0
V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0bWltZWhhbmRsaW5nX0xEQUREID0gJCh3ZWJraXRndGtf
dGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0bWltZWhh
bmRsaW5nX0xERkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19U
ZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0bmV0d29ya3JlcXVlc3RfU09VUkNFUyA9IFwKKwlU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0bmV0d29ya3JlcXVlc3QuYwor
UHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdG5ldHdvcmtyZXF1ZXN0X0NGTEFH
UyA9ICQod2Via2l0Z3RrX3Rlc3RzX2NmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2Vi
S2l0R3RrX3Rlc3RuZXR3b3JrcmVxdWVzdF9MREFERCA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkYWRk
KQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdG5ldHdvcmtyZXF1ZXN0X0xE
RkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0
QVBJX1dlYktpdEd0a190ZXN0bmV0d29ya3Jlc3BvbnNlX1NPVVJDRVMgPSBcCisJVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdG5ldHdvcmtyZXNwb25zZS5jCitQcm9ncmFt
c19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0bmV0d29ya3Jlc3BvbnNlX0NGTEFHUyA9ICQo
d2Via2l0Z3RrX3Rlc3RzX2NmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3Rr
X3Rlc3RuZXR3b3JrcmVzcG9uc2VfTERBREQgPSAkKHdlYmtpdGd0a190ZXN0c19sZGFkZCkKK1By
b2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3RuZXR3b3JrcmVzcG9uc2VfTERGTEFH
UyA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElf
V2ViS2l0R3RrX3Rlc3R3ZWJmcmFtZV9TT1VSQ0VTID0gXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJmcmFtZS5jCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dl
YktpdEd0a190ZXN0d2ViZnJhbWVfQ0ZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfY2ZsYWdzKQor
UHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdHdlYmZyYW1lX0xEQUREID0gJCh3
ZWJraXRndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190
ZXN0d2ViZnJhbWVfTERGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dy
YW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3R3ZWJwbHVnaW5kYXRhYmFzZV9TT1VSQ0VT
ID0gXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJwbHVnaW5k
YXRhYmFzZS5jCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0d2VicGx1Z2lu
ZGF0YWJhc2VfQ0ZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfY2ZsYWdzKQorUHJvZ3JhbXNfVGVz
dFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdHdlYnBsdWdpbmRhdGFiYXNlX0xEQUREID0gJCh3ZWJr
aXRndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0
d2VicGx1Z2luZGF0YWJhc2VfTERGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisK
K1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3R3ZWJiYWNrZm9yd2FyZGxpc3Rf
U09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2Vi
YmFja2ZvcndhcmRsaXN0LmMKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3R3
ZWJiYWNrZm9yd2FyZGxpc3RfQ0ZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfY2ZsYWdzKQorUHJv
Z3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdHdlYmJhY2tmb3J3YXJkbGlzdF9MREFE
RCA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJL
aXRHdGtfdGVzdHdlYmJhY2tmb3J3YXJkbGlzdF9MREZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNf
bGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdHdlYmhpc3Rv
cnlpdGVtX1NPVVJDRVMgPSBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsv
dGVzdHdlYmhpc3RvcnlpdGVtLmMKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rl
c3R3ZWJoaXN0b3J5aXRlbV9DRkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19jZmxhZ3MpCitQcm9n
cmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0d2ViaGlzdG9yeWl0ZW1fTERBREQgPSAk
KHdlYmtpdGd0a190ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3Rr
X3Rlc3R3ZWJoaXN0b3J5aXRlbV9MREZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfbGRmbGFncykK
KworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdHdpbmRvd19TT1VSQ0VTID0g
XAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3aW5kb3cuYworUHJv
Z3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdHdpbmRvd19DRkxBR1MgPSAkKHdlYmtp
dGd0a190ZXN0c19jZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0
d2luZG93X0xEQUREID0gJCh3ZWJraXRndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2Vi
S2l0QVBJX1dlYktpdEd0a190ZXN0d2luZG93X0xERkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19s
ZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0ZG93bmxvYWRf
U09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0ZG93
bmxvYWQuYworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGRvd25sb2FkX0NG
TEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2NmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElf
V2ViS2l0R3RrX3Rlc3Rkb3dubG9hZF9MREFERCA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkYWRkKQor
UHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGRvd25sb2FkX0xERkxBR1MgPSAk
KHdlYmtpdGd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktp
dEd0a190ZXN0YXRrX1NPVVJDRVMgPSBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRHdGsvdGVzdGF0ay5jCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0YXRr
X0NGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2NmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRB
UElfV2ViS2l0R3RrX3Rlc3RhdGtfTERBREQgPSAkKHdlYmtpdGd0a190ZXN0c19sZGFkZCkKK1By
b2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3RhdGtfTERGTEFHUyA9ICQod2Via2l0
Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rl
c3RhdGtyb2xlc19TT1VSQ0VTID0gXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
R3RrL3Rlc3RhdGtyb2xlcy5jCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0
YXRrcm9sZXNfQ0ZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfY2ZsYWdzKQorUHJvZ3JhbXNfVGVz
dFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGF0a3JvbGVzX0xEQUREID0gJCh3ZWJraXRndGtfdGVz
dHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0YXRrcm9sZXNf
TERGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJL
aXRBUElfV2ViS2l0R3RrX3Rlc3R3ZWJpbnNwZWN0b3JfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2ViaW5zcGVjdG9yLmMgXAorCVRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RfdXRpbHMuYworUHJvZ3JhbXNfVGVzdFdl
YktpdEFQSV9XZWJLaXRHdGtfdGVzdHdlYmluc3BlY3Rvcl9DRkxBR1MgPSAkKHdlYmtpdGd0a190
ZXN0c19jZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0d2ViaW5z
cGVjdG9yX0xEQUREID0gJCh3ZWJraXRndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2Vi
S2l0QVBJX1dlYktpdEd0a190ZXN0d2ViaW5zcGVjdG9yX0xERkxBR1MgPSAkKHdlYmtpdGd0a190
ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0d2Vi
c2V0dGluZ3NfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0
ay90ZXN0d2Vic2V0dGluZ3MuYworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVz
dHdlYnNldHRpbmdzX0NGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2NmbGFncykKK1Byb2dyYW1z
X1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3R3ZWJzZXR0aW5nc19MREFERCA9ICQod2Via2l0
Z3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdHdl
YnNldHRpbmdzX0xERkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFt
c19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0d2VicmVzb3VyY2VfU09VUkNFUyA9IFwKKwlU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2VicmVzb3VyY2UuYworUHJv
Z3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdHdlYnJlc291cmNlX0NGTEFHUyA9ICQo
d2Via2l0Z3RrX3Rlc3RzX2NmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3Rr
X3Rlc3R3ZWJyZXNvdXJjZV9MREFERCA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkYWRkKQorCitQcm9n
cmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0d2ViZGF0YXNvdXJjZV9TT1VSQ0VTID0g
XAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJkYXRhc291cmNl
LmMKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3R3ZWJkYXRhc291cmNlX0NG
TEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2NmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElf
V2ViS2l0R3RrX3Rlc3R3ZWJkYXRhc291cmNlX0xEQUREID0gJCh3ZWJraXRndGtfdGVzdHNfbGRh
ZGQpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3R3ZWJ2aWV3X1NPVVJD
RVMgPSBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYnZpZXcu
YyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0X3V0aWxzLmMKK1Byb2dy
YW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3R3ZWJ2aWV3X0NGTEFHUyA9ICQod2Via2l0
Z3RrX3Rlc3RzX2NmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3R3
ZWJ2aWV3X0xEQUREID0gJCh3ZWJraXRndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2Vi
S2l0QVBJX1dlYktpdEd0a190ZXN0d2Vidmlld19MREZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNf
bGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGhpdHRlc3Ry
ZXN1bHRfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90
ZXN0aGl0dGVzdHJlc3VsdC5jCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0
aGl0dGVzdHJlc3VsdF9DRkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19jZmxhZ3MpCitQcm9ncmFt
c19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0aGl0dGVzdHJlc3VsdF9MREFERCA9ICQod2Vi
a2l0Z3RrX3Rlc3RzX2xkYWRkKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190
ZXN0a2V5ZXZlbnRzX1NPVVJDRVMgPSBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRHdGsvdGVzdGtleWV2ZW50cy5jCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190
ZXN0a2V5ZXZlbnRzX0NGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2NmbGFncykKK1Byb2dyYW1z
X1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3RrZXlldmVudHNfTERBREQgPSAkKHdlYmtpdGd0
a190ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3RrZXll
dmVudHNfTERGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rl
c3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3Rjb3B5YW5kcGFzdGVfU09VUkNFUyA9IFwKKwlUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0Y29weWFuZHBhc3RlLmMgXAorCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtWZXJzaW9uaW5nLmMKK1Byb2dyYW1zX1Rlc3RX
ZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3Rjb3B5YW5kcGFzdGVfQ0ZMQUdTID0gXAorCSQod2Via2l0
Z3RrX3Rlc3RzX2NmbGFncykgXAorCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ayBcCisJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUKK1Byb2dyYW1zX1Rlc3RXZWJLaXRB
UElfV2ViS2l0R3RrX3Rlc3Rjb3B5YW5kcGFzdGVfTERBREQgPSAkKHdlYmtpdGd0a190ZXN0c19s
ZGFkZCkKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3Rjb3B5YW5kcGFzdGVf
TERGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKKworUHJvZ3JhbXNfVGVzdFdl
YktpdEFQSV9XZWJLaXQyX1Rlc3RXZWJLaXQyX0NQUEZMQUdTID0gXAorCSQoUHJvZ3JhbXNfVGVz
dFdlYktpdEFQSV9XVEZfVGVzdFdURl9DUFBGTEFHUykgXAogCS1JJCh0b3BfYnVpbGRkaXIpL0Rl
cml2ZWRTb3VyY2VzL1dlYktpdDIvaW5jbHVkZSBcCiAJJChGUkVFVFlQRV9DRkxBR1MpIFwKIAkk
KEdMSUJfQ0ZMQUdTKSBcCiAJJChHVEtfQ0ZMQUdTKSBcCiAJJChMSUJTT1VQX0NGTEFHUykKIAot
UHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0V2ViS2l0Ml9DWFhGTEFHUyA9IFwKK1Byb2dyYW1z
X1Rlc3RXZWJLaXRBUElfV2ViS2l0Ml9UZXN0V2ViS2l0Ml9DWFhGTEFHUyA9IFwKIAktREdURVNU
X0hBU19SVFRJPTAgXAogCSQoZ2xvYmFsX2N4eGZsYWdzKQogCi1Qcm9ncmFtc19UZXN0V2ViS2l0
QVBJX1Rlc3RXZWJLaXQyX0xEQUREID0gXAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQy
X1Rlc3RXZWJLaXQyX0xEQUREID0gXAogCUxpYnJhcmllcy9saWJUZXN0V2ViS2l0QVBJTWFpbi5s
YSBcCiAJTGlicmFyaWVzL2xpYmd0ZXN0LmxhIFwKIAlsaWJqYXZhc2NyaXB0Y29yZWd0ay1AV0VC
S0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQC5AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQC5s
YSBcCkBAIC0yMzMsMTAgKzU1NCwxMCBAQCBQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RXZWJL
aXQyX0xEQUREID0gXAogCSQoR1RLX0xJQlMpIFwKIAkkKExJQlNPVVBfTElCUykKIAotUHJvZ3Jh
bXNfVGVzdFdlYktpdEFQSV9UZXN0V2ViS2l0Ml9MREZMQUdTID0gXAotCSQoUHJvZ3JhbXNfVGVz
dFdlYktpdEFQSV9UZXN0V1RGX0xERkxBR1MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktp
dDJfVGVzdFdlYktpdDJfTERGTEFHUyA9IFwKKwkkKFByb2dyYW1zX1Rlc3RXZWJLaXRBUElfV1RG
X1Rlc3RXVEZfTERGTEFHUykKIAotUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0V2ViS2l0Ml9T
T1VSQ0VTID0gXAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyX1Rlc3RXZWJLaXQyX1NP
VVJDRVMgPSBcCiAJVG9vbHMvVGVzdFdlYktpdEFQSS9jb25maWcuaCBcCiAJVG9vbHMvVGVzdFdl
YktpdEFQSS9ndGsvUGxhdGZvcm1VdGlsaXRpZXNHdGsuY3BwIFwKIAlUb29scy9UZXN0V2ViS2l0
QVBJL2d0ay9QbGF0Zm9ybVdlYlZpZXdHdGsuY3BwIFwKQEAgLTM1NywxMSArNjc4LDI0NSBAQCBM
aWJyYXJpZXNfbGliVGVzdFdlYktpdEFQSUluamVjdGVkQnVuZGxlX2xhX0NGTEFHUyA9IFwKIAkk
KGdsb2JhbF9jZmxhZ3MpCiAKIAotc3RhbXAtdGVzdHdlYmtpdGFwaS13ZWJjb3JlLWZvcndhcmRp
bmctaGVhZGVyczogJChXZWJLaXQyKS9TY3JpcHRzL2dlbmVyYXRlLWZvcndhcmRpbmctaGVhZGVy
cy5wbCAkKFByb2dyYW1zX1Rlc3RXZWJLaXRBUElfVGVzdFdlYkNvcmVfU09VUkNFUykKK2lmIEVO
QUJMRV9XRUJLSVQyCitub2luc3RfTFRMSUJSQVJJRVMgKz0gTGlicmFyaWVzL1dlYkV4dGVuc2lv
bnMvbGliV2ViRXh0ZW5zaW9uVGVzdC5sYQorZW5kaWYKKworTGlicmFyaWVzX1dlYkV4dGVuc2lv
bnNfbGliV2ViRXh0ZW5zaW9uVGVzdF9sYV9TT1VSQ0VTID0gXAorCVRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Mkd0ay9XZWJFeHRlbnNpb25UZXN0LmNwcAorCitMaWJyYXJpZXNfV2Vi
RXh0ZW5zaW9uc19saWJXZWJFeHRlbnNpb25UZXN0X2xhX0xERkxBR1MgPSBcCisJLXJwYXRoICR7
c2hlbGwgcHdkfS8kKHRvcF9idWlsZGRpcikvTGlicmFyaWVzL1dlYkV4dGVuc2lvbnMvLmxpYnMg
XAorCSQobm9fdW5kZWZpbmVkKSBcCisJLWF2b2lkLXZlcnNpb24gXAorCS1tb2R1bGUKKworTGli
cmFyaWVzX1dlYkV4dGVuc2lvbnNfbGliV2ViRXh0ZW5zaW9uVGVzdF9sYV9DUFBGTEFHUyA9IFwK
KwktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsgXAorCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2VzIFwKKwktSSQodG9wX2J1
aWxkZGlyKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL3dlYmtpdDJleHRlbnNpb24vaW5jbHVkZSBc
CisJLURXRUJLSVQyX0NPTVBJTEFUSU9OIFwKKwkkKHdlYmtpdDJndGtfdGVzdHNfY3BwZmxhZ3Mp
CisKK0xpYnJhcmllc19XZWJFeHRlbnNpb25zX2xpYldlYkV4dGVuc2lvblRlc3RfbGFfQ1hYRkxB
R1MgPSBcCisgICAgICAgICQoZ2xvYmFsX2N4eGZsYWdzKQorCitMaWJyYXJpZXNfV2ViRXh0ZW5z
aW9uc19saWJXZWJFeHRlbnNpb25UZXN0X2xhX0NGTEFHUyA9IFwKKyAgICAgICAgJChnbG9iYWxf
Y2ZsYWdzKQorCisKK2lmIEVOQUJMRV9XRUJLSVQyCitub2luc3RfTFRMSUJSQVJJRVMgKz0gTGli
cmFyaWVzL1dlYkV4dGVuc2lvbnMvbGliV2ViUHJvY2Vzc1Rlc3QubGEKK2VuZGlmCisKK0xpYnJh
cmllc19XZWJFeHRlbnNpb25zX2xpYldlYlByb2Nlc3NUZXN0X2xhX1NPVVJDRVMgPSBcCisJVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL0RPTU5vZGVUZXN0LmNwcCBcCisJVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL0ZyYW1lVGVzdC5jcHAgXAorCVRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9XZWJQcm9jZXNzVGVzdC5jcHAgXAorCVRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9XZWJQcm9jZXNzVGVzdC5oCisKK0xp
YnJhcmllc19XZWJFeHRlbnNpb25zX2xpYldlYlByb2Nlc3NUZXN0X2xhX0xERkxBR1MgPSBcCisJ
LXJwYXRoICR7c2hlbGwgcHdkfS8kKHRvcF9idWlsZGRpcikvTGlicmFyaWVzL1dlYkV4dGVuc2lv
bnMvLmxpYnMgXAorCSQobm9fdW5kZWZpbmVkKSBcCisJLWF2b2lkLXZlcnNpb24gXAorCS1tb2R1
bGUKKworTGlicmFyaWVzX1dlYkV4dGVuc2lvbnNfbGliV2ViUHJvY2Vzc1Rlc3RfbGFfQ1BQRkxB
R1MgPSBcCisJLUkkKHNyY2RpcikvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrIFwKKwktSSQodG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcyBcCisJLUkk
KHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi93ZWJraXQyZXh0ZW5zaW9uL2lu
Y2x1ZGUgXAorCS1EV0VCS0lUMl9DT01QSUxBVElPTiBcCisJJCh3ZWJraXQyZ3RrX3Rlc3RzX2Nw
cGZsYWdzKQorCitMaWJyYXJpZXNfV2ViRXh0ZW5zaW9uc19saWJXZWJQcm9jZXNzVGVzdF9sYV9D
WFhGTEFHUyA9IFwKKwkkKGdsb2JhbF9jeHhmbGFncykKKworTGlicmFyaWVzX1dlYkV4dGVuc2lv
bnNfbGliV2ViUHJvY2Vzc1Rlc3RfbGFfQ0ZMQUdTID0gXAorCSQoZ2xvYmFsX2NmbGFncykKKwor
CitQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdDJHdGsvcmVzb3VyY2VzL3dlYmtpdDJndGst
dGVzdHMtcmVzb3VyY2VzLmdyZXNvdXJjZTogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXQyR3RrL3Jlc291cmNlcy93ZWJraXQyZ3RrLXRlc3RzLmdyZXNvdXJjZS54bWwgJChzaGVsbCAk
KEdMSUJfQ09NUElMRV9SRVNPVVJDRVMpIC0tc291cmNlZGlyPSQoc3JjZGlyKSAtLWdlbmVyYXRl
LWRlcGVuZGVuY2llcyAkKHNyY2RpcikvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQy
R3RrL3Jlc291cmNlcy93ZWJraXQyZ3RrLXRlc3RzLmdyZXNvdXJjZS54bWwpCisJJChBTV9WX2F0
KW1rZGlyIC1wICR7R0VOUFJPR1JBTVN9L1Rlc3RXZWJLaXRBUEkvV2ViS2l0Mkd0ay9yZXNvdXJj
ZXMKKwkkKEFNX1ZfR0VOKSAkKEdMSUJfQ09NUElMRV9SRVNPVVJDRVMpIC0tdGFyZ2V0PSRAIC0t
c291cmNlZGlyPSQoc3JjZGlyKSAkPAorCitESVNUQ0xFQU5GSUxFUyArPSBcCisJUHJvZ3JhbXMv
VGVzdFdlYktpdEFQSS9XZWJLaXQyR3RrL3Jlc291cmNlcy93ZWJraXQyZ3RrLXRlc3RzLXJlc291
cmNlcy5ncmVzb3VyY2UKKworbm9pbnN0X0RBVEEgKz0gXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRB
UEkvV2ViS2l0Mkd0ay9yZXNvdXJjZXMvd2Via2l0Mmd0ay10ZXN0cy1yZXNvdXJjZXMuZ3Jlc291
cmNlCisKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRXZWJD
b250ZXh0X1NPVVJDRVMgPSBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3Rr
L1Rlc3RXZWJLaXRXZWJDb250ZXh0LmNwcAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQy
R3RrX1Rlc3RXZWJLaXRXZWJDb250ZXh0X0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2Nw
cGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRXZWJD
b250ZXh0X0xEQUREID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdl
YktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRXZWJDb250ZXh0X0xERkxBR1MgPSAkKHdlYmtp
dDJndGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3Rr
X1Rlc3RXZWJLaXRXZWJWaWV3X1NPVVJDRVMgPSBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQ
SV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRXZWJWaWV3X0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rl
c3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJL
aXRXZWJWaWV3X0xEQUREID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVz
dFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRXZWJWaWV3X0xERkxBR1MgPSAkKHdlYmtp
dDJndGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3Rr
X1Rlc3RMb2FkZXJDbGllbnRfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdDJHdGsvVGVzdExvYWRlckNsaWVudC5jcHAKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElf
V2ViS2l0Mkd0a19UZXN0TG9hZGVyQ2xpZW50X0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3Rz
X2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RMb2FkZXJD
bGllbnRfTERBREQgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2Vi
S2l0QVBJX1dlYktpdDJHdGtfVGVzdExvYWRlckNsaWVudF9MREZMQUdTID0gJCh3ZWJraXQyZ3Rr
X3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0
V2ViS2l0U2V0dGluZ3NfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdDJHdGsvVGVzdFdlYktpdFNldHRpbmdzLmNwcAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9X
ZWJLaXQyR3RrX1Rlc3RXZWJLaXRTZXR0aW5nc19DUFBGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0
c19jcHBmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0V2ViS2l0
U2V0dGluZ3NfTERBREQgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0
V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYktpdFNldHRpbmdzX0xERkxBR1MgPSAkKHdlYmtp
dDJndGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3Rr
X0luc3BlY3RvclRlc3RTZXJ2ZXJfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdDJHdGsvSW5zcGVjdG9yVGVzdFNlcnZlci5jcHAKK1Byb2dyYW1zX1Rlc3RXZWJL
aXRBUElfV2ViS2l0Mkd0a19JbnNwZWN0b3JUZXN0U2VydmVyX0NQUEZMQUdTID0gJCh3ZWJraXQy
Z3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX0lu
c3BlY3RvclRlc3RTZXJ2ZXJfTERBREQgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRhZGQpCitQcm9n
cmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfSW5zcGVjdG9yVGVzdFNlcnZlcl9MREZMQUdT
ID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElf
V2ViS2l0Mkd0a19UZXN0QmFja0ZvcndhcmRMaXN0X1NPVVJDRVMgPSBcCisgICAgICAgIFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0QmFja0ZvcndhcmRMaXN0LmNwcAor
UHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RCYWNrRm9yd2FyZExpc3RfQ1BQ
RkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfY3BwZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0
QVBJX1dlYktpdDJHdGtfVGVzdEJhY2tGb3J3YXJkTGlzdF9MREFERCA9ICQod2Via2l0Mmd0a190
ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0QmFja0Zv
cndhcmRMaXN0X0xERkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3Jh
bXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRQb2xpY3lDbGllbnRfU09VUkNF
UyA9IFwKKyAgICAgICAgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RX
ZWJLaXRQb2xpY3lDbGllbnQuY3BwCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtf
VGVzdFdlYktpdFBvbGljeUNsaWVudF9DUFBGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19jcHBm
bGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0V2ViS2l0UG9saWN5
Q2xpZW50X0xEQUREID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdl
YktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRQb2xpY3lDbGllbnRfTERGTEFHUyA9ICQod2Vi
a2l0Mmd0a190ZXN0c19sZGZsYWdzKQorCitpZiBIQVZFX0FUU1BJMgorUHJvZ3JhbXNfVGVzdFdl
YktpdEFQSV9XZWJLaXQyR3RrX0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyX1NPVVJDRVMgPSBcCisJ
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL0FjY2Vzc2liaWxpdHlUZXN0U2Vy
dmVyLmNwcAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX0FjY2Vzc2liaWxpdHlU
ZXN0U2VydmVyX0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3Jh
bXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyX0xEQURE
ID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJL
aXQyR3RrX0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyX0xERkxBR1MgPSAkKHdlYmtpdDJndGtfdGVz
dHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJL
aXRBY2Nlc3NpYmlsaXR5X1NPVVJDRVMgPSBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyR3RrL1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5LmNwcAorUHJvZ3JhbXNfVGVzdFdlYktp
dEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5X0NQUEZMQUdTID0gJCh3ZWJr
aXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKSAkKEFUU1BJMl9DRkxBR1MpCitQcm9ncmFtc19UZXN0V2Vi
S2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYktpdEFjY2Vzc2liaWxpdHlfTERBREQgPSAkKHdlYmtp
dDJndGtfdGVzdHNfbGRhZGQpICQoQVRTUEkyX0xJQlMpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJ
X1dlYktpdDJHdGtfVGVzdFdlYktpdEFjY2Vzc2liaWxpdHlfTERGTEFHUyA9ICQod2Via2l0Mmd0
a190ZXN0c19sZGZsYWdzKQorZW5kaWYKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQy
R3RrX1Rlc3REb3dubG9hZHNfU09VUkNFUyA9IFwKKyAgICAgICAgVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3REb3dubG9hZHMuY3BwCitQcm9ncmFtc19UZXN0V2ViS2l0
QVBJX1dlYktpdDJHdGtfVGVzdERvd25sb2Fkc19DUFBGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0
c19jcHBmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0RG93bmxv
YWRzX0xEQUREID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktp
dEFQSV9XZWJLaXQyR3RrX1Rlc3REb3dubG9hZHNfTERGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0
c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYlZp
ZXdFZGl0b3JfU09VUkNFUyA9IFwKKyAgICAgICAgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyR3RrL1Rlc3RXZWJWaWV3RWRpdG9yLmNwcAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9X
ZWJLaXQyR3RrX1Rlc3RXZWJWaWV3RWRpdG9yX0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3Rz
X2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJWaWV3
RWRpdG9yX0xEQUREID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdl
YktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJWaWV3RWRpdG9yX0xERkxBR1MgPSAkKHdlYmtpdDJn
dGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rl
c3RQcmludGluZ19TT1VSQ0VTID0gXAorICAgICAgICBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdDJHdGsvVGVzdFByaW50aW5nLmNwcAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJL
aXQyR3RrX1Rlc3RQcmludGluZ19DUFBGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19jcHBmbGFn
cykgJChHVEtfVU5JWF9QUklOVElOR19DRkxBR1MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dl
YktpdDJHdGtfVGVzdFByaW50aW5nX0xEQUREID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkYWRkKSAk
KEdUS19VTklYX1BSSU5USU5HX0xJQlMpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJH
dGtfVGVzdFByaW50aW5nX0xERkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRmbGFncykKKwor
UHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRGYXZpY29uRGF0YWJh
c2VfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVz
dFdlYktpdEZhdmljb25EYXRhYmFzZS5jcHAKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0
Mkd0a19UZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlX0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rl
c3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJL
aXRGYXZpY29uRGF0YWJhc2VfTERBREQgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRhZGQpCitQcm9n
cmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYktpdEZhdmljb25EYXRhYmFzZV9M
REZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJL
aXRBUElfV2ViS2l0Mkd0a19UZXN0V2ViS2l0RmluZENvbnRyb2xsZXJfU09VUkNFUyA9IFwKKwlU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdEZpbmRDb250cm9s
bGVyLmNwcAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRGaW5k
Q29udHJvbGxlcl9DUFBGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19jcHBmbGFncykKK1Byb2dy
YW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0V2ViS2l0RmluZENvbnRyb2xsZXJfTERB
REQgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dl
YktpdDJHdGtfVGVzdFdlYktpdEZpbmRDb250cm9sbGVyX0xERkxBR1MgPSAkKHdlYmtpdDJndGtf
dGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RS
ZXNvdXJjZXNfU09VUkNFUyA9IFwKKyAgICAgICAgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyR3RrL1Rlc3RSZXNvdXJjZXMuY3BwCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktp
dDJHdGtfVGVzdFJlc291cmNlc19DUFBGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19jcHBmbGFn
cykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0UmVzb3VyY2VzX0xEQURE
ID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJL
aXQyR3RrX1Rlc3RSZXNvdXJjZXNfTERGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19sZGZsYWdz
KQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdENvb2tpZU1hbmFnZXJf
U09VUkNFUyA9IFwKKyAgICAgICAgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3Rr
L1Rlc3RDb29raWVNYW5hZ2VyLmNwcAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3Rr
X1Rlc3RDb29raWVNYW5hZ2VyX0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdz
KQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RDb29raWVNYW5hZ2VyX0xE
QUREID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9X
ZWJLaXQyR3RrX1Rlc3RDb29raWVNYW5hZ2VyX0xERkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNf
bGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RJbnNwZWN0
b3JfU09VUkNFUyA9IFwKKyAgICAgICAgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQy
R3RrL1Rlc3RJbnNwZWN0b3IuY3BwCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtf
VGVzdEluc3BlY3Rvcl9DUFBGTEFHUyA9IFwKKwkkKHdlYmtpdDJndGtfdGVzdHNfY3BwZmxhZ3Mp
CitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdEluc3BlY3Rvcl9MREFERCA9
ICQod2Via2l0Mmd0a190ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0
Mkd0a19UZXN0SW5zcGVjdG9yX0xERkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRmbGFncykK
KworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RJbnNwZWN0b3JTZXJ2ZXJf
U09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdElu
c3BlY3RvclNlcnZlci5jcHAKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0
SW5zcGVjdG9yU2VydmVyX0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQor
UHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RJbnNwZWN0b3JTZXJ2ZXJfTERB
REQgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dl
YktpdDJHdGtfVGVzdEluc3BlY3RvclNlcnZlcl9MREZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3Rz
X2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0V2ViS2l0
VmVyc2lvbl9TT1VSQ0VTID0gXAorICAgICAgICBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdDJHdGsvVGVzdFdlYktpdFZlcnNpb24uY3BwCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dl
YktpdDJHdGtfVGVzdFdlYktpdFZlcnNpb25fQ1BQRkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNf
Y3BwZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYktpdFZl
cnNpb25fTERBREQgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2Vi
S2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYktpdFZlcnNpb25fTERGTEFHUyA9ICQod2Via2l0Mmd0
a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVz
dENvbnRleHRNZW51X1NPVVJDRVMgPSBcCisgICAgICAgIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Mkd0ay9UZXN0Q29udGV4dE1lbnUuY3BwCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJ
X1dlYktpdDJHdGtfVGVzdENvbnRleHRNZW51X0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3Rz
X2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RDb250ZXh0
TWVudV9MREFERCA9ICQod2Via2l0Mmd0a190ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1Rlc3RXZWJL
aXRBUElfV2ViS2l0Mkd0a19UZXN0Q29udGV4dE1lbnVfTERGTEFHUyA9ICQod2Via2l0Mmd0a190
ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFNT
TF9TT1VSQ0VTID0gXAorICAgICAgICBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJH
dGsvVGVzdFNTTC5jcHAKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0U1NM
X0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdl
YktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RTU0xfTERBREQgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRh
ZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFNTTF9MREZMQUdTID0g
JCh3ZWJraXQyZ3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2Vi
S2l0Mkd0a19UZXN0V2ViRXh0ZW5zaW9uc19TT1VSQ0VTID0gXAorICAgICAgICBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYkV4dGVuc2lvbnMuY3BwCitQcm9ncmFt
c19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYkV4dGVuc2lvbnNfQ1BQRkxBR1MgPSAk
KHdlYmtpdDJndGtfdGVzdHNfY3BwZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktp
dDJHdGtfVGVzdFdlYkV4dGVuc2lvbnNfTERBREQgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRhZGQp
CitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYkV4dGVuc2lvbnNfTERG
TEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0
QVBJX1dlYktpdDJHdGtfVGVzdFdlYktpdFdlYlZpZXdHcm91cF9TT1VSQ0VTID0gXAorICAgICAg
ICBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFdlYlZpZXdH
cm91cC5jcHAKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0V2ViS2l0V2Vi
Vmlld0dyb3VwX0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3Jh
bXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRXZWJWaWV3R3JvdXBfTERBREQg
PSAkKHdlYmtpdDJndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktp
dDJHdGtfVGVzdFdlYktpdFdlYlZpZXdHcm91cF9MREZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3Rz
X2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0RE9NTm9k
ZV9TT1VSQ0VTID0gXAorICAgICAgICBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJH
dGsvVGVzdERPTU5vZGUuY3BwCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVz
dERPTU5vZGVfQ1BQRkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfY3BwZmxhZ3MpCitQcm9ncmFt
c19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdERPTU5vZGVfTERBREQgPSAkKHdlYmtpdDJn
dGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdERP
TU5vZGVfTERGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19U
ZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdEZyYW1lX1NPVVJDRVMgPSBcCisgICAgICAgIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0RnJhbWUuY3BwCitQcm9ncmFt
c19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdEZyYW1lX0NQUEZMQUdTID0gJCh3ZWJraXQy
Z3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rl
c3RGcmFtZV9MREFERCA9ICQod2Via2l0Mmd0a190ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1Rlc3RX
ZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0RnJhbWVfTERGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0
c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdEF1dGhl
bnRpY2F0aW9uX1NPVVJDRVMgPSBcCisgICAgICAgIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Mkd0ay9UZXN0QXV0aGVudGljYXRpb24uY3BwCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJ
X1dlYktpdDJHdGtfVGVzdEF1dGhlbnRpY2F0aW9uX0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rl
c3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RBdXRo
ZW50aWNhdGlvbl9MREFERCA9ICQod2Via2l0Mmd0a190ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1Rl
c3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0QXV0aGVudGljYXRpb25fTERGTEFHUyA9ICQod2Vi
a2l0Mmd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJH
dGtfVGVzdFVJQ2xpZW50X1NPVVJDRVMgPSBcCisgICAgICAgIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Mkd0ay9UZXN0VUlDbGllbnQuY3BwCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJ
X1dlYktpdDJHdGtfVGVzdFVJQ2xpZW50X0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2Nw
cGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RVSUNsaWVudF9M
REFERCA9ICQod2Via2l0Mmd0a190ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElf
V2ViS2l0Mkd0a19UZXN0VUlDbGllbnRfTERGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19sZGZs
YWdzKQorCisKK3N0YW1wLXRlc3R3ZWJraXRhcGktd2ViY29yZS1mb3J3YXJkaW5nLWhlYWRlcnM6
ICQoV2ViS2l0MikvU2NyaXB0cy9nZW5lcmF0ZS1mb3J3YXJkaW5nLWhlYWRlcnMucGwgJChQcm9n
cmFtc19UZXN0V2ViS2l0QVBJX1dlYkNvcmVfVGVzdFdlYkNvcmVfU09VUkNFUykKIAkkKEFNX1Zf
R0VOKSQoUEVSTCkgJDwgJChzcmNkaXIpL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZSAkKEdFTlNPVVJDRVNfV0VCQ09SRSkvaW5jbHVkZSBndGsgXAogCSYmIGVjaG8gdGltZXN0YW1w
ID4gJChARikKIAotc3RhbXAtdGVzdHdlYmtpdGFwaS13ZWJraXQyLWZvcndhcmRpbmctaGVhZGVy
czogJChXZWJLaXQyKS9TY3JpcHRzL2dlbmVyYXRlLWZvcndhcmRpbmctaGVhZGVycy5wbCAkKFBy
b2dyYW1zX1Rlc3RXZWJLaXRBUElfVGVzdFdlYktpdDJfU09VUkNFUykgJChMaWJyYXJpZXNfbGli
VGVzdFdlYktpdEFQSUluamVjdGVkQnVuZGxlX2xhX1NPVVJDRVMpCitzdGFtcC10ZXN0d2Via2l0
YXBpLXdlYmtpdDItZm9yd2FyZGluZy1oZWFkZXJzOiAkKFdlYktpdDIpL1NjcmlwdHMvZ2VuZXJh
dGUtZm9yd2FyZGluZy1oZWFkZXJzLnBsICQoUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQy
X1Rlc3RXZWJLaXQyX1NPVVJDRVMpICQoTGlicmFyaWVzX2xpYlRlc3RXZWJLaXRBUElJbmplY3Rl
ZEJ1bmRsZV9sYV9TT1VSQ0VTKQogCSQoQU1fVl9HRU4pJChQRVJMKSAkPCAkKHNyY2RpcikvVG9v
bHMvVGVzdFdlYktpdEFQSSAkKEdFTlNPVVJDRVNfV0VCS0lUMikvaW5jbHVkZSBndGsgXAogCSYm
IGVjaG8gdGltZXN0YW1wID4gJChARikKIApAQCAtMzg2LDQgKzk0MSwxNCBAQCBFWFRSQV9ESVNU
ICs9IFwKIAlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvc2ltcGxlLmh0bWwgXAog
CVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9zaW1wbGUtaWZyYW1lLmh0bWwgXAog
CVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9zaW1wbGUtdGFsbC5odG1sIFwKLQlU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvc3BhY2ViYXItc2Nyb2xsaW5nLmh0bWwK
KwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvc3BhY2ViYXItc2Nyb2xsaW5nLmh0
bWwgXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9yZXNvdXJjZXMvdGVz
dC1jZXJ0LnBlbSBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL3Jlc291
cmNlcy90ZXN0LWtleS5wZW0gXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0
ay9yZXNvdXJjZXMvd2Via2l0Mmd0ay10ZXN0cy5ncmVzb3VyY2UueG1sIFwKKwlUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvcmVzb3VyY2VzL2xpbmstdGl0bGUuanMgXAorCVRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RfdXRpbHMuaCBcCisJVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvcmVzb3VyY2VzL2JsYW5rLmljbyBcCisJVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvcmVzb3VyY2VzL3Rlc3QuaHRtbCBcCisJ
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvcmVzb3VyY2VzL3Rlc3Qub2dnIFwK
KwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9yZXNvdXJjZXMvdGVzdC5wZGYg
XAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Jlc291cmNlcy90ZXN0LnR4
dApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL0FjY2Vz
c2liaWxpdHlUZXN0U2VydmVyLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Mkd0ay9BY2Nlc3NpYmlsaXR5VGVzdFNlcnZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYjU1MDA1MAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Mkd0ay9BY2Nlc3NpYmlsaXR5VGVzdFNlcnZlci5jcHAKQEAgLTAsMCAr
MSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Vi
a2l0Mi5oPgorCitzdGF0aWMgdm9pZCBsb2FkQ2hhbmdlZENhbGxiYWNrKFdlYktpdFdlYlZpZXcq
LCBXZWJLaXRMb2FkRXZlbnQgbG9hZEV2ZW50LCBncG9pbnRlcikKK3sKKyAgICAvLyBTZW5kIGEg
bWVzc2FnZSB0byB0aGUgcGFyZW50IHByb2Nlc3Mgd2hlbiB3ZSdyZSByZWFkeS4KKyAgICBpZiAo
bG9hZEV2ZW50ID09IFdFQktJVF9MT0FEX0ZJTklTSEVEKQorICAgICAgICBnX3ByaW50KCJPSyIp
OworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgLy8gTWFrZSBz
dXJlIHRoYXQgdGhlIEFUSyBicmlkZ2UgaXMgbG9hZGVkLgorICAgIGdfc2V0ZW52KCJHVEtfTU9E
VUxFUyIsICJhdGstYnJpZGdlIiwgVFJVRSk7CisKKyAgICBndGtfaW5pdCgmYXJnYywgJmFyZ3Yp
OworCisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRf
d2ViX3ZpZXdfbmV3KCkpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX2h0bWwod2ViVmlldywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8aHRtbD4iCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiICA8Ym9keT4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
ICAgPGgxPlRoaXMgaXMgYSB0ZXN0PC9oMT4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiICAgPHA+VGhpcyBpcyBhIHBhcmFncmFwaCB3aXRoIHNvbWUgcGxhaW4gdGV4dC48L3A+Igor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgIDxwPlRoaXMgcGFyYWdyYXBoIGNvbnRh
aW5zIDxhIGhyZWY9XCJodHRwOi8vd3d3LndlYmtpdGd0ay5vcmdcIj5hIGxpbms8L2E+IGluIHRo
ZSBtaWRkbGUuPC9wPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIDwvYm9keT4i
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPC9odG1sPiIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAwKTsKKworICAgIEd0a1dpZGdldCogd2luZG93ID0gZ3RrX3dpbmRv
d19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NP
TlRBSU5FUih3aW5kb3cpLCBHVEtfV0lER0VUKHdlYlZpZXcpKTsKKyAgICBndGtfd2lkZ2V0X3No
b3dfYWxsKHdpbmRvdyk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdpbmRvdywgImRlbGV0ZS1l
dmVudCIsIEdfQ0FMTEJBQ0soZ3RrX21haW5fcXVpdCksIDApOworICAgIGdfc2lnbmFsX2Nvbm5l
Y3Qod2ViVmlldywgImxvYWQtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sobG9hZENoYW5nZWRDYWxsYmFj
ayksIDApOworCisgICAgZ3RrX21haW4oKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9ET01ET01XaW5kb3dUZXN0LmNwcCBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9ET01ET01XaW5kb3dUZXN0LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2FhZDU0Ci0tLSAvZGV2L251bGwKKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL0RPTURPTVdpbmRvd1Rlc3QuY3BwCkBA
IC0wLDAgKzEsMjIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIldlYlByb2Nlc3NUZXN0LmgiCisjaW5jbHVk
ZSA8Z2lvL2dpby5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0LXdlYi1leHRlbnNpb24uaD4K
KyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgorCitjbGFzcyBXZWJLaXRET01ET01XaW5kb3dUZXN0
Oworc3RhdGljIGdib29sZWFuIGxvYWRlZENhbGxiYWNrKFdlYktpdERPTURPTVdpbmRvdyosIFdl
YktpdERPTUV2ZW50KiwgV2ViS2l0RE9NRE9NV2luZG93VGVzdCopOworc3RhdGljIGdib29sZWFu
IGNsaWNrZWRDYWxsYmFjayhXZWJLaXRET01ET01XaW5kb3cqLCBXZWJLaXRET01FdmVudCosIFdl
YktpdERPTURPTVdpbmRvd1Rlc3QqKTsKKworY2xhc3MgV2ViS2l0RE9NRE9NV2luZG93VGVzdCA6
IHB1YmxpYyBXZWJQcm9jZXNzVGVzdCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8
V2ViUHJvY2Vzc1Rlc3Q+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBXZWJLaXRET01E
T01XaW5kb3dUZXN0KCkpOyB9CisKK3ByaXZhdGU6CisgICAgZ3VpbnQ2NCB3ZWJQYWdlRnJvbUFy
Z3MoR1ZhcmlhbnQqIGFyZ3MpCisgICAgeworICAgICAgICBHVmFyaWFudEl0ZXIgaXRlcjsKKyAg
ICAgICAgZ192YXJpYW50X2l0ZXJfaW5pdCgmaXRlciwgYXJncyk7CisKKyAgICAgICAgY29uc3Qg
Y2hhcioga2V5OworICAgICAgICBHVmFyaWFudCogdmFsdWU7CisgICAgICAgIHdoaWxlIChnX3Zh
cmlhbnRfaXRlcl9sb29wKCZpdGVyLCAieyZzdn0iLCAma2V5LCAmdmFsdWUpKSB7CisgICAgICAg
ICAgICBpZiAoIXN0cmNtcChrZXksICJwYWdlSUQiKSAmJiBnX3ZhcmlhbnRfY2xhc3NpZnkodmFs
dWUpID09IEdfVkFSSUFOVF9DTEFTU19VSU5UNjQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGdf
dmFyaWFudF9nZXRfdWludDY0KHZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGdfYXNzZXJ0
X25vdF9yZWFjaGVkKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGJvb2wgdGVz
dFNpZ25hbHMoV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24sIEdWYXJpYW50KiBhcmdzKQor
ICAgIHsKKyAgICAgICAgbm90aWZ5KCJyZWFkeSIsICIiKTsKKworICAgICAgICBXZWJLaXRXZWJQ
YWdlKiBwYWdlID0gd2Via2l0X3dlYl9leHRlbnNpb25fZ2V0X3BhZ2UoZXh0ZW5zaW9uLCB3ZWJQ
YWdlRnJvbUFyZ3MoYXJncykpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfV0VCX1BBR0Uo
cGFnZSkpOworICAgICAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2Vi
X3BhZ2VfZ2V0X2RvbV9kb2N1bWVudChwYWdlKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RP
TV9JU19ET0NVTUVOVChkb2N1bWVudCkpOworCisgICAgICAgIFdlYktpdERPTURPTVdpbmRvdyog
ZG9tV2luZG93ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZGVmYXVsdF92aWV3KGRvY3VtZW50
KTsKKyAgICAgICAgZ19hc3NlcnQoZG9tV2luZG93KTsKKworICAgICAgICAvLyBUaGUgImxvYWQi
IFdlYktpdERPTURPTVdpbmRvdyBzaWduYWwgaXMgaXNzdWVkIGJlZm9yZSB0aGlzIHRlc3QgaXMK
KyAgICAgICAgLy8gY2FsbGVkLiBUaGVyZSdzIG5vIHdheSB0byBjYXB0dXJlIGl0IGhlcmUuIFdl
IHNpbXBseSBhc3N1bWUgdGhhdAorICAgICAgICAvLyB0aGUgZG9jdW1lbnQgaXMgbG9hZGVkIGFu
ZCBub3RpZnkgdGhlIHVpcHJvY2VzcyBhY2NvcmRpbmdseQorICAgICAgICAvLyBub3RpZnkoImxv
YWRlZCIsICIiKTsKKworICAgICAgICB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9hZGRfZXZlbnRf
bGlzdGVuZXIoCisgICAgICAgICAgICBXRUJLSVRfRE9NX0VWRU5UX1RBUkdFVChkb21XaW5kb3cp
LAorICAgICAgICAgICAgImxvYWQiLAorICAgICAgICAgICAgR19DQUxMQkFDSyhsb2FkZWRDYWxs
YmFjayksCisgICAgICAgICAgICBmYWxzZSwKKyAgICAgICAgICAgIHRoaXMpOworCisgICAgICAg
IC8vIGxvYWRlZENhbGxiYWNrKCkgd2lsbCBzdG9wIHRoaXMgbG9vcAorICAgICAgICBSdW5Mb29w
OjpydW4oKTsKKworICAgICAgICBkb2N1bWVudCA9IHdlYmtpdF93ZWJfcGFnZV9nZXRfZG9tX2Rv
Y3VtZW50KHBhZ2UpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKGRv
Y3VtZW50KSk7CisKKyAgICAgICAgV2ViS2l0RE9NRWxlbWVudCogZWxlbWVudCA9IHdlYmtpdF9k
b21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRfYnlfaWQoZG9jdW1lbnQsICJ0ZXN0Iik7CisgICAgICAg
IGdfYXNzZXJ0KGVsZW1lbnQpOworCisgICAgICAgIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2Fk
ZF9ldmVudF9saXN0ZW5lcigKKyAgICAgICAgICAgIFdFQktJVF9ET01fRVZFTlRfVEFSR0VUKGVs
ZW1lbnQpLAorICAgICAgICAgICAgImNsaWNrIiwKKyAgICAgICAgICAgIEdfQ0FMTEJBQ0soY2xp
Y2tlZENhbGxiYWNrKSwKKyAgICAgICAgICAgIGZhbHNlLAorICAgICAgICAgICAgdGhpcyk7CisK
KyAgICAgICAgLy8gVGhlICJjbGljayIgYWN0aW9uIHdpbGwgYmUgaXNzdWVkIGluIHRoZSB1aXBy
b2Nlc3MgYW5kIHRoYXQgd2lsbAorICAgICAgICAvLyB0cmlnZ2VyIHRoZSBkb20gZXZlbnQgaGVy
ZS4KKyAgICAgICAgLy8gY2xpY2tlZENhbGxiYWNrKCkgd2lsbCBzdG9wIHRoaXMgbG9vcAorICAg
ICAgICBSdW5Mb29wOjpydW4oKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICBib29sIHRlc3REaXNwYXRjaEV2ZW50KFdlYktpdFdlYkV4dGVuc2lvbiogZXh0ZW5zaW9uLCBH
VmFyaWFudCogYXJncykKKyAgICB7CisgICAgICAgIG5vdGlmeSgicmVhZHkiLCAiIik7CisKKyAg
ICAgICAgV2ViS2l0V2ViUGFnZSogcGFnZSA9IHdlYmtpdF93ZWJfZXh0ZW5zaW9uX2dldF9wYWdl
KGV4dGVuc2lvbiwgd2ViUGFnZUZyb21BcmdzKGFyZ3MpKTsKKyAgICAgICAgZ19hc3NlcnQoV0VC
S0lUX0lTX1dFQl9QQUdFKHBhZ2UpKTsKKyAgICAgICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gd2Via2l0X3dlYl9wYWdlX2dldF9kb21fZG9jdW1lbnQocGFnZSk7CisgICAgICAgIGdf
YXNzZXJ0KFdFQktJVF9ET01fSVNfRE9DVU1FTlQoZG9jdW1lbnQpKTsKKworICAgICAgICBXZWJL
aXRET01ET01XaW5kb3cqIGRvbVdpbmRvdyA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2RlZmF1
bHRfdmlldyhkb2N1bWVudCk7CisgICAgICAgIGdfYXNzZXJ0KGRvbVdpbmRvdyk7CisKKyAgICAg
ICAgLy8gVGhlICJsb2FkIiBXZWJLaXRET01ET01XaW5kb3cgc2lnbmFsIGlzIGlzc3VlZCBiZWZv
cmUgdGhpcyB0ZXN0IGlzCisgICAgICAgIC8vIGNhbGxlZC4gVGhlcmUncyBubyB3YXkgdG8gY2Fw
dHVyZSBpdCBoZXJlLiBXZSBzaW1wbHkgYXNzdW1lIHRoYXQKKyAgICAgICAgLy8gdGhlIGRvY3Vt
ZW50IGlzIGxvYWRlZCBhbmQgbm90aWZ5IHRoZSB1aXByb2Nlc3MgYWNjb3JkaW5nbHkKKyAgICAg
ICAgLy8gbm90aWZ5KCJsb2FkZWQiLCAiIik7CisKKyAgICAgICAgd2Via2l0X2RvbV9ldmVudF90
YXJnZXRfYWRkX2V2ZW50X2xpc3RlbmVyKAorICAgICAgICAgICAgV0VCS0lUX0RPTV9FVkVOVF9U
QVJHRVQoZG9tV2luZG93KSwKKyAgICAgICAgICAgICJsb2FkIiwKKyAgICAgICAgICAgIEdfQ0FM
TEJBQ0sobG9hZGVkQ2FsbGJhY2spLAorICAgICAgICAgICAgZmFsc2UsCisgICAgICAgICAgICB0
aGlzKTsKKworICAgICAgICAvLyBsb2FkZWRDYWxsYmFjaygpIHdpbGwgc3RvcCB0aGlzIGxvb3AK
KyAgICAgICAgUnVuTG9vcDo6cnVuKCk7CisKKyAgICAgICAgZG9jdW1lbnQgPSB3ZWJraXRfd2Vi
X3BhZ2VfZ2V0X2RvbV9kb2N1bWVudChwYWdlKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RP
TV9JU19ET0NVTUVOVChkb2N1bWVudCkpOworCisgICAgICAgIFdlYktpdERPTUVsZW1lbnQqIGVs
ZW1lbnQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50X2J5X2lkKGRvY3VtZW50LCAi
dGVzdCIpOworICAgICAgICBnX2Fzc2VydChlbGVtZW50KTsKKworICAgICAgICBXZWJLaXRET01F
dmVudCogZXZlbnQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9ldmVudChkb2N1bWVudCwg
Ik1vdXNlRXZlbnQiLCAwKTsKKyAgICAgICAgZ19hc3NlcnQoZXZlbnQpOworICAgICAgICBnX2Fz
c2VydChXRUJLSVRfRE9NX0lTX0VWRU5UKGV2ZW50KSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJ
VF9ET01fSVNfTU9VU0VfRVZFTlQoZXZlbnQpKTsKKworICAgICAgICBnbG9uZyBjbGllbnRYLCBj
bGllbnRZOworICAgICAgICBjbGllbnRYID0gd2Via2l0X2RvbV9lbGVtZW50X2dldF9jbGllbnRf
bGVmdChlbGVtZW50KTsKKyAgICAgICAgY2xpZW50WSA9IHdlYmtpdF9kb21fZWxlbWVudF9nZXRf
Y2xpZW50X3RvcChlbGVtZW50KTsKKworICAgICAgICB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9h
ZGRfZXZlbnRfbGlzdGVuZXIoCisgICAgICAgICAgICBXRUJLSVRfRE9NX0VWRU5UX1RBUkdFVChl
bGVtZW50KSwKKyAgICAgICAgICAgICJjbGljayIsCisgICAgICAgICAgICBHX0NBTExCQUNLKGNs
aWNrZWRDYWxsYmFjayksCisgICAgICAgICAgICBmYWxzZSwKKyAgICAgICAgICAgIHRoaXMpOwor
CisgICAgICAgIHdlYmtpdF9kb21fbW91c2VfZXZlbnRfaW5pdF9tb3VzZV9ldmVudChXRUJLSVRf
RE9NX01PVVNFX0VWRU5UKGV2ZW50KSwKKyAgICAgICAgICAgICJjbGljayIsIFRSVUUsIFRSVUUs
CisgICAgICAgICAgICBkb21XaW5kb3csIDAsIDAsIDAsIGNsaWVudFgsIGNsaWVudFksCisgICAg
ICAgICAgICBGQUxTRSwgRkFMU0UsIEZBTFNFLCBGQUxTRSwKKyAgICAgICAgICAgIDEsIFdFQktJ
VF9ET01fRVZFTlRfVEFSR0VUKGVsZW1lbnQpKTsKKworICAgICAgICB3ZWJraXRfZG9tX2V2ZW50
X3RhcmdldF9kaXNwYXRjaF9ldmVudChXRUJLSVRfRE9NX0VWRU5UX1RBUkdFVChlbGVtZW50KSwg
ZXZlbnQsIDApOworCisgICAgICAgIC8vIGNsaWNrZWRDYWxsYmFjaygpIHdpbGwgc3RvcCB0aGlz
IGxvb3AKKyAgICAgICAgUnVuTG9vcDo6cnVuKCk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgYm9vbCB0ZXN0R2V0Q29tcHV0ZWRTdHlsZShXZWJLaXRXZWJFeHRlbnNpb24q
IGV4dGVuc2lvbiwgR1ZhcmlhbnQqIGFyZ3MpCisgICAgeworICAgICAgICBXZWJLaXRXZWJQYWdl
KiBwYWdlID0gd2Via2l0X3dlYl9leHRlbnNpb25fZ2V0X3BhZ2UoZXh0ZW5zaW9uLCB3ZWJQYWdl
RnJvbUFyZ3MoYXJncykpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfV0VCX1BBR0UocGFn
ZSkpOworICAgICAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3Bh
Z2VfZ2V0X2RvbV9kb2N1bWVudChwYWdlKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9J
U19ET0NVTUVOVChkb2N1bWVudCkpOworICAgICAgICBXZWJLaXRET01ET01XaW5kb3cqIGRvbVdp
bmRvdyA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2RlZmF1bHRfdmlldyhkb2N1bWVudCk7Cisg
ICAgICAgIGdfYXNzZXJ0KGRvbVdpbmRvdyk7CisgICAgICAgIFdlYktpdERPTUVsZW1lbnQqIGVs
ZW1lbnQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50X2J5X2lkKGRvY3VtZW50LCAi
dGVzdCIpOworICAgICAgICBnX2Fzc2VydChlbGVtZW50KTsKKyAgICAgICAgZ19hc3NlcnQoV0VC
S0lUX0RPTV9JU19FTEVNRU5UKGVsZW1lbnQpKTsKKyAgICAgICAgV2ViS2l0RE9NQ1NTU3R5bGVE
ZWNsYXJhdGlvbiogY3NzU3R5bGUgPSB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X2NvbXB1dGVk
X3N0eWxlKGRvbVdpbmRvdywgZWxlbWVudCwgMCk7CisgICAgICAgIGdjaGFyKiBmb250U2l6ZSA9
IHdlYmtpdF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0aW9uX2dldF9wcm9wZXJ0eV92YWx1ZShjc3NT
dHlsZSwgImZvbnQtc2l6ZSIpOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIoZm9udFNpemUsID09
LCAiMTZweCIpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHZpcnR1YWwg
Ym9vbCBydW5UZXN0KGNvbnN0IGNoYXIqIHRlc3ROYW1lLCBXZWJLaXRXZWJFeHRlbnNpb24qIGV4
dGVuc2lvbiwgR1ZhcmlhbnQqIGFyZ3MpCisgICAgeworICAgICAgICBpZiAoIXN0cmNtcCh0ZXN0
TmFtZSwgInNpZ25hbHMiKSkKKyAgICAgICAgICAgIHJldHVybiB0ZXN0U2lnbmFscyhleHRlbnNp
b24sIGFyZ3MpOworICAgICAgICBpZiAoIXN0cmNtcCh0ZXN0TmFtZSwgImRpc3BhdGNoLWV2ZW50
IikpCisgICAgICAgICAgICByZXR1cm4gdGVzdERpc3BhdGNoRXZlbnQoZXh0ZW5zaW9uLCBhcmdz
KTsKKyAgICAgICAgaWYgKCFzdHJjbXAodGVzdE5hbWUsICJnZXQtY29tcHV0ZWQtc3R5bGUiKSkK
KyAgICAgICAgICAgIHJldHVybiB0ZXN0R2V0Q29tcHV0ZWRTdHlsZShleHRlbnNpb24sIGFyZ3Mp
OworCisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9Cit9OworCitzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChjb25zdHJ1Y3Rvcikp
IHJlZ2lzdGVyVGVzdHMoKQoreworICAgIFJFR0lTVEVSX1RFU1QoV2ViS2l0RE9NRE9NV2luZG93
VGVzdCwgIldlYktpdERPTURPTVdpbmRvdy9zaWduYWxzIik7CisgICAgUkVHSVNURVJfVEVTVChX
ZWJLaXRET01ET01XaW5kb3dUZXN0LCAiV2ViS2l0RE9NRE9NV2luZG93L2Rpc3BhdGNoLWV2ZW50
Iik7CisgICAgUkVHSVNURVJfVEVTVChXZWJLaXRET01ET01XaW5kb3dUZXN0LCAiV2ViS2l0RE9N
RE9NV2luZG93L2dldC1jb21wdXRlZC1zdHlsZSIpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gbG9h
ZGVkQ2FsbGJhY2soV2ViS2l0RE9NRE9NV2luZG93KiB2aWV3LCBXZWJLaXRET01FdmVudCogZXZl
bnQsIFdlYktpdERPTURPTVdpbmRvd1Rlc3QqIHRlc3QpCit7CisgICAgdGVzdC0+bm90aWZ5KCJs
b2FkZWQiLCAiIik7CisKKyAgICAvLyBTdG9wIHRoZSBsb29wIGFuZCBsZXQgdGVzdFNpZ25hbHMo
KSBvciB0ZXN0RGlzcGF0Y2hFdmVudCgpIGNvbnRpbnVlIGl0cyBjb3Vyc2UKKyAgICBSdW5Mb29w
OjpjdXJyZW50KCktPnN0b3AoKTsKKworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGdi
b29sZWFuIGNsaWNrZWRDYWxsYmFjayhXZWJLaXRET01ET01XaW5kb3cqIHZpZXcsIFdlYktpdERP
TUV2ZW50KiBldmVudCwgV2ViS2l0RE9NRE9NV2luZG93VGVzdCogdGVzdCkKK3sKKyAgICB0ZXN0
LT5ub3RpZnkoImNsaWNrZWQiLCAiIik7CisgICAgdGVzdC0+bm90aWZ5KCJmaW5pc2giLCAiIik7
CisKKyAgICAvLyBTdG9wIHRoZSBsb29wIGFuZCBsZXQgdGVzdFNpZ25hbHMoKSBvciB0ZXN0RGlz
cGF0Y2hFdmVudCgpIGNvbnRpbnVlIGl0cyBjb3Vyc2UKKyAgICBSdW5Mb29wOjpjdXJyZW50KCkt
PnN0b3AoKTsKKworICAgIHJldHVybiBGQUxTRTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9ET01Ob2RlVGVzdC5jcHAgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvRE9NTm9kZVRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmUxNzU0Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvRE9NTm9kZVRlc3QuY3BwCkBAIC0wLDAgKzEsMjE2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2luY2x1ZGUgIldlYlByb2Nlc3NUZXN0LmgiCisjaW5jbHVkZSA8Z2lvL2dpby5o
PgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0LXdlYi1leHRlbnNpb24uaD4KKyNpbmNsdWRlIDx3
dGYvZ29iamVjdC9HT3duUHRyLmg+CisKK2NsYXNzIFdlYktpdERPTU5vZGVUZXN0IDogcHVibGlj
IFdlYlByb2Nlc3NUZXN0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxXZWJQcm9j
ZXNzVGVzdD4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IFdlYktpdERPTU5vZGVUZXN0
KCkpOyB9CisKK3ByaXZhdGU6CisgICAgZ3VpbnQ2NCB3ZWJQYWdlRnJvbUFyZ3MoR1ZhcmlhbnQq
IGFyZ3MpCisgICAgeworICAgICAgICBHVmFyaWFudEl0ZXIgaXRlcjsKKyAgICAgICAgZ192YXJp
YW50X2l0ZXJfaW5pdCgmaXRlciwgYXJncyk7CisKKyAgICAgICAgY29uc3QgY2hhcioga2V5Owor
ICAgICAgICBHVmFyaWFudCogdmFsdWU7CisgICAgICAgIHdoaWxlIChnX3ZhcmlhbnRfaXRlcl9s
b29wKCZpdGVyLCAieyZzdn0iLCAma2V5LCAmdmFsdWUpKSB7CisgICAgICAgICAgICBpZiAoIXN0
cmNtcChrZXksICJwYWdlSUQiKSAmJiBnX3ZhcmlhbnRfY2xhc3NpZnkodmFsdWUpID09IEdfVkFS
SUFOVF9DTEFTU19VSU5UNjQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGdfdmFyaWFudF9nZXRf
dWludDY0KHZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVk
KCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGJvb2wgdGVzdEhpZXJhcmNoeU5h
dmlnYXRpb24oV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24sIEdWYXJpYW50KiBhcmdzKQor
ICAgIHsKKyAgICAgICAgV2ViS2l0V2ViUGFnZSogcGFnZSA9IHdlYmtpdF93ZWJfZXh0ZW5zaW9u
X2dldF9wYWdlKGV4dGVuc2lvbiwgd2ViUGFnZUZyb21BcmdzKGFyZ3MpKTsKKyAgICAgICAgZ19h
c3NlcnQoV0VCS0lUX0lTX1dFQl9QQUdFKHBhZ2UpKTsKKyAgICAgICAgV2ViS2l0RE9NRG9jdW1l
bnQqIGRvY3VtZW50ID0gd2Via2l0X3dlYl9wYWdlX2dldF9kb21fZG9jdW1lbnQocGFnZSk7Cisg
ICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfRE9DVU1FTlQoZG9jdW1lbnQpKTsKKworICAg
ICAgICBXZWJLaXRET01IVE1MSGVhZEVsZW1lbnQqIGhlYWQgPSB3ZWJraXRfZG9tX2RvY3VtZW50
X2dldF9oZWFkKGRvY3VtZW50KTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1M
X0hFQURfRUxFTUVOVChoZWFkKSk7CisKKyAgICAgICAgLy8gVGl0bGUsIGhlYWQncyBjaGlsZC4K
KyAgICAgICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2hhc19jaGlsZF9ub2RlcyhXRUJLSVRf
RE9NX05PREUoaGVhZCkpKTsKKyAgICAgICAgR1JlZlB0cjxXZWJLaXRET01Ob2RlTGlzdD4gbGlz
dCA9IGFkb3B0R1JlZih3ZWJraXRfZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVzKFdFQktJVF9ET01f
Tk9ERShoZWFkKSkpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX05PREVfTElTVChs
aXN0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfZG9tX25vZGVfbGlz
dF9nZXRfbGVuZ3RoKGxpc3QuZ2V0KCkpLCA9PSwgMSk7CisgICAgICAgIFdlYktpdERPTU5vZGUq
IG5vZGUgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtKGxpc3QuZ2V0KCksIDApOworICAgICAg
ICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfVElUTEVfRUxFTUVOVChub2RlKSk7CisKKyAg
ICAgICAgLy8gQm9keSwgSGVhZCBzaWJsaW5nLgorICAgICAgICBub2RlID0gd2Via2l0X2RvbV9u
b2RlX2dldF9uZXh0X3NpYmxpbmcoV0VCS0lUX0RPTV9OT0RFKGhlYWQpKTsKKyAgICAgICAgZ19h
c3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0JPRFlfRUxFTUVOVChub2RlKSk7CisgICAgICAgIFdl
YktpdERPTUhUTUxCb2R5RWxlbWVudCogYm9keSA9IFdFQktJVF9ET01fSFRNTF9CT0RZX0VMRU1F
TlQobm9kZSk7CisKKyAgICAgICAgLy8gVGhlcmUgaXMgbm8gdGhpcmQgc2libGluZworICAgICAg
ICBnX2Fzc2VydCghd2Via2l0X2RvbV9ub2RlX2dldF9uZXh0X3NpYmxpbmcobm9kZSkpOworCisg
ICAgICAgIC8vIEJvZHkncyBwcmV2aW91cyBzaWJsaW5nIGlzIEhlYWQuCisgICAgICAgIG5vZGUg
PSB3ZWJraXRfZG9tX25vZGVfZ2V0X3ByZXZpb3VzX3NpYmxpbmcoV0VCS0lUX0RPTV9OT0RFKGJv
ZHkpKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0hFQURfRUxFTUVOVChu
b2RlKSk7CisKKyAgICAgICAgLy8gQm9keSBoYXMgMyBjaGlsZHJlbi4KKyAgICAgICAgZ19hc3Nl
cnQod2Via2l0X2RvbV9ub2RlX2hhc19jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkp
KTsKKyAgICAgICAgbGlzdCA9IGFkb3B0R1JlZih3ZWJraXRfZG9tX25vZGVfZ2V0X2NoaWxkX25v
ZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSkpOworICAgICAgICB1bnNpZ25lZCBsb25nIGxlbmd0
aCA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2dldF9sZW5ndGgobGlzdC5nZXQoKSk7CisgICAgICAg
IGdfYXNzZXJ0X2NtcGludChsZW5ndGgsID09LCAzKTsKKworICAgICAgICAvLyBUaGUgdGhyZWUg
b2YgdGhlbSBhcmUgUCB0YWdzLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDA7IGkg
PCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgbm9kZSA9IHdlYmtpdF9kb21fbm9kZV9saXN0
X2l0ZW0obGlzdC5nZXQoKSwgaSk7CisgICAgICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lT
X0hUTUxfUEFSQUdSQVBIX0VMRU1FTlQobm9kZSkpOworICAgICAgICB9CisKKyAgICAgICAgLy8g
R28gYmFja3dhcmRzCisgICAgICAgIHVuc2lnbmVkIGk7CisgICAgICAgIGZvciAoaSA9IDA7IG5v
ZGU7IG5vZGUgPSB3ZWJraXRfZG9tX25vZGVfZ2V0X3ByZXZpb3VzX3NpYmxpbmcobm9kZSksIGkr
KykgeyB9CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChpLCA9PSwgMyk7CisKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCB0ZXN0SW5zZXJ0aW9uKFdlYktpdFdlYkV4dGVu
c2lvbiogZXh0ZW5zaW9uLCBHVmFyaWFudCogYXJncykKKyAgICB7CisgICAgICAgIFdlYktpdFdl
YlBhZ2UqIHBhZ2UgPSB3ZWJraXRfd2ViX2V4dGVuc2lvbl9nZXRfcGFnZShleHRlbnNpb24sIHdl
YlBhZ2VGcm9tQXJncyhhcmdzKSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19XRUJfUEFH
RShwYWdlKSk7CisgICAgICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1bWVudCA9IHdlYmtpdF93
ZWJfcGFnZV9nZXRfZG9tX2RvY3VtZW50KHBhZ2UpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRf
RE9NX0lTX0RPQ1VNRU5UKGRvY3VtZW50KSk7CisKKyAgICAgICAgV2ViS2l0RE9NSFRNTEVsZW1l
bnQqIGJvZHkgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9ib2R5KGRvY3VtZW50KTsKKyAgICAg
ICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0VMRU1FTlQoYm9keSkpOworCisgICAgICAg
IC8vIEJvZHkgc2hvdWxkbid0IGhhdmUgYW55IGNoaWxkcmVuIGF0IHRoaXMgcG9pbnQuCisgICAg
ICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG9tX25vZGVfaGFzX2NoaWxkX25vZGVzKFdFQktJVF9ET01f
Tk9ERShib2R5KSkpOworCisgICAgICAgIC8vIEluc2VydCBvbmUgUCBlbGVtZW50LgorICAgICAg
ICBXZWJLaXRET01FbGVtZW50KiBwID0gd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZWxlbWVu
dChkb2N1bWVudCwgIlAiLCAwKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1M
X0VMRU1FTlQocCkpOworICAgICAgICB3ZWJraXRfZG9tX25vZGVfYXBwZW5kX2NoaWxkKFdFQktJ
VF9ET01fTk9ERShib2R5KSwgV0VCS0lUX0RPTV9OT0RFKHApLCAwKTsKKworICAgICAgICAvLyBO
b3cgaXQgc2hvdWxkIGhhdmUgb25lLCB0aGUgc2FtZSB0aGF0IHdlIGluc2VydGVkLgorICAgICAg
ICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaGFzX2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9E
RShib2R5KSkpOworICAgICAgICBHUmVmUHRyPFdlYktpdERPTU5vZGVMaXN0PiBsaXN0ID0gYWRv
cHRHUmVmKHdlYmtpdF9kb21fbm9kZV9nZXRfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJv
ZHkpKSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfTk9ERV9MSVNUKGxpc3QuZ2V0
KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9kb21fbm9kZV9saXN0X2dldF9s
ZW5ndGgobGlzdC5nZXQoKSksID09LCAxKTsKKyAgICAgICAgV2ViS2l0RE9NTm9kZSogbm9kZSA9
IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdC5nZXQoKSwgMCk7CisgICAgICAgIGdfYXNz
ZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKG5vZGUpKTsKKyAgICAgICAgZ19hc3NlcnQo
d2Via2l0X2RvbV9ub2RlX2lzX3NhbWVfbm9kZShXRUJLSVRfRE9NX05PREUocCksIG5vZGUpKTsK
KworICAgICAgICAvLyBSZXBsYWNlIHRoZSBQIHRhZyB3aXRoIGEgRElWIHRhZy4KKyAgICAgICAg
V2ViS2l0RE9NRWxlbWVudCogZGl2ID0gd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZWxlbWVu
dChkb2N1bWVudCwgIkRJViIsIDApOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hU
TUxfRUxFTUVOVChkaXYpKTsKKyAgICAgICAgd2Via2l0X2RvbV9ub2RlX3JlcGxhY2VfY2hpbGQo
V0VCS0lUX0RPTV9OT0RFKGJvZHkpLCBXRUJLSVRfRE9NX05PREUoZGl2KSwgV0VCS0lUX0RPTV9O
T0RFKHApLCAwKTsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2hhc19jaGlsZF9u
b2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpKTsKKyAgICAgICAgbGlzdCA9IGFkb3B0R1JlZih3
ZWJraXRfZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSkpOwor
ICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX05PREVfTElTVChsaXN0LmdldCgpKSk7Cisg
ICAgICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxp
c3QuZ2V0KCkpLCA9PSwgMSk7CisgICAgICAgIG5vZGUgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9p
dGVtKGxpc3QuZ2V0KCksIDApOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxf
RUxFTUVOVChub2RlKSk7CisgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9pc19zYW1l
X25vZGUoV0VCS0lUX0RPTV9OT0RFKGRpdiksIG5vZGUpKTsKKworICAgICAgICAvLyBOb3cgcmVt
b3ZlIHRoZSB0YWcuCisgICAgICAgIHdlYmtpdF9kb21fbm9kZV9yZW1vdmVfY2hpbGQoV0VCS0lU
X0RPTV9OT0RFKGJvZHkpLCBub2RlLCAwKTsKKyAgICAgICAgbGlzdCA9IGFkb3B0R1JlZih3ZWJr
aXRfZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSkpOworICAg
ICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX05PREVfTElTVChsaXN0LmdldCgpKSk7CisgICAg
ICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3Qu
Z2V0KCkpLCA9PSwgMCk7CisKKyAgICAgICAgLy8gVGVzdCBpbnNlcnQgYmVmb3JlLiBJZiByZWZD
aGlsZCBpcyBudWxsLCBpbnNlcnQgbmV3Q2hpbGQgYXMgbGFzdCBlbGVtZW50IG9mIHBhcmVudC4K
KyAgICAgICAgZGl2ID0gd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZWxlbWVudChkb2N1bWVu
dCwgIkRJViIsIDApOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVO
VChkaXYpKTsKKyAgICAgICAgd2Via2l0X2RvbV9ub2RlX2luc2VydF9iZWZvcmUoV0VCS0lUX0RP
TV9OT0RFKGJvZHkpLCBXRUJLSVRfRE9NX05PREUoZGl2KSwgMCwgMCk7CisgICAgICAgIGdfYXNz
ZXJ0KHdlYmtpdF9kb21fbm9kZV9oYXNfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkp
KSk7CisgICAgICAgIGxpc3QgPSBhZG9wdEdSZWYod2Via2l0X2RvbV9ub2RlX2dldF9jaGlsZF9u
b2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RP
TV9JU19OT0RFX0xJU1QobGlzdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQod2Vi
a2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChsaXN0LmdldCgpKSwgPT0sIDEpOworICAgICAg
ICBub2RlID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0LmdldCgpLCAwKTsKKyAgICAg
ICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0VMRU1FTlQobm9kZSkpOworICAgICAgICBn
X2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaXNfc2FtZV9ub2RlKFdFQktJVF9ET01fTk9ERShkaXYp
LCBub2RlKSk7CisKKyAgICAgICAgLy8gTm93IGluc2VydCBhICdwJyBiZWZvcmUgJ2RpdicuCisg
ICAgICAgIHAgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9lbGVtZW50KGRvY3VtZW50LCAi
UCIsIDApOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChwKSk7
CisgICAgICAgIHdlYmtpdF9kb21fbm9kZV9pbnNlcnRfYmVmb3JlKFdFQktJVF9ET01fTk9ERShi
b2R5KSwgV0VCS0lUX0RPTV9OT0RFKHApLCBXRUJLSVRfRE9NX05PREUoZGl2KSwgMCk7CisgICAg
ICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9oYXNfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9O
T0RFKGJvZHkpKSk7CisgICAgICAgIGxpc3QgPSBhZG9wdEdSZWYod2Via2l0X2RvbV9ub2RlX2dl
dF9jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpKTsKKyAgICAgICAgZ19hc3NlcnQo
V0VCS0lUX0RPTV9JU19OT0RFX0xJU1QobGlzdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9j
bXBpbnQod2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChsaXN0LmdldCgpKSwgPT0sIDIp
OworICAgICAgICBub2RlID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0LmdldCgpLCAw
KTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0VMRU1FTlQobm9kZSkpOwor
ICAgICAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaXNfc2FtZV9ub2RlKFdFQktJVF9ET01f
Tk9ERShwKSwgbm9kZSkpOworICAgICAgICBub2RlID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRl
bShsaXN0LmdldCgpLCAxKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0VM
RU1FTlQobm9kZSkpOworICAgICAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaXNfc2FtZV9u
b2RlKFdFQktJVF9ET01fTk9ERShkaXYpLCBub2RlKSk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgYm9vbCB0ZXN0VGFnTmFtZXMoV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRl
bnNpb24sIEdWYXJpYW50KiBhcmdzKQorICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIq
IGV4cGVjdGVkVGFnTmFtZXNbXSA9IHsgIkhUTUwiLCAiSEVBRCIsICJCT0RZIiwgIlZJREVPIiwg
IlNPVVJDRSIsICJWSURFTyIsICJTT1VSQ0UiLCAiSU5QVVQiIH07CisKKyAgICAgICAgV2ViS2l0
V2ViUGFnZSogcGFnZSA9IHdlYmtpdF93ZWJfZXh0ZW5zaW9uX2dldF9wYWdlKGV4dGVuc2lvbiwg
d2ViUGFnZUZyb21BcmdzKGFyZ3MpKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX1dFQl9Q
QUdFKHBhZ2UpKTsKKyAgICAgICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50ID0gd2Via2l0
X3dlYl9wYWdlX2dldF9kb21fZG9jdW1lbnQocGFnZSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJ
VF9ET01fSVNfRE9DVU1FTlQoZG9jdW1lbnQpKTsKKworICAgICAgICBXZWJLaXRET01Ob2RlTGlz
dCogbGlzdCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRzX2J5X3RhZ19uYW1lKGRv
Y3VtZW50LCAiKiIpOworICAgICAgICBndWxvbmcgbm9kZUNvdW50ID0gd2Via2l0X2RvbV9ub2Rl
X2xpc3RfZ2V0X2xlbmd0aChsaXN0KTsKKyAgICAgICAgZ19hc3NlcnRfY21wdWludChub2RlQ291
bnQsID09LCBHX05fRUxFTUVOVFMoZXhwZWN0ZWRUYWdOYW1lcykpOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbm9kZUNvdW50OyBpKyspIHsKKyAgICAgICAgICAgIFdlYktpdERP
TU5vZGUqIG5vZGUgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtKGxpc3QsIGkpOworICAgICAg
ICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19OT0RFKG5vZGUpKTsKKyAgICAgICAgICAgIEdP
d25QdHI8Y2hhcj4gdGFnTmFtZSh3ZWJraXRfZG9tX25vZGVfZ2V0X25vZGVfbmFtZShub2RlKSk7
CisgICAgICAgICAgICBnX2Fzc2VydF9jbXBzdHIodGFnTmFtZS5nZXQoKSwgPT0sIGV4cGVjdGVk
VGFnTmFtZXNbaV0pOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgdmlydHVhbCBib29sIHJ1blRlc3QoY29uc3QgY2hhciogdGVzdE5hbWUsIFdlYktpdFdl
YkV4dGVuc2lvbiogZXh0ZW5zaW9uLCBHVmFyaWFudCogYXJncykKKyAgICB7CisgICAgICAgIGlm
ICghc3RyY21wKHRlc3ROYW1lLCAiaGllcmFyY2h5LW5hdmlnYXRpb24iKSkKKyAgICAgICAgICAg
IHJldHVybiB0ZXN0SGllcmFyY2h5TmF2aWdhdGlvbihleHRlbnNpb24sIGFyZ3MpOworICAgICAg
ICBpZiAoIXN0cmNtcCh0ZXN0TmFtZSwgImluc2VydGlvbiIpKQorICAgICAgICAgICAgcmV0dXJu
IHRlc3RJbnNlcnRpb24oZXh0ZW5zaW9uLCBhcmdzKTsKKyAgICAgICAgaWYgKCFzdHJjbXAodGVz
dE5hbWUsICJ0YWctbmFtZXMiKSkKKyAgICAgICAgICAgIHJldHVybiB0ZXN0VGFnTmFtZXMoZXh0
ZW5zaW9uLCBhcmdzKTsKKworICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorfTsKKworc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXygo
Y29uc3RydWN0b3IpKSByZWdpc3RlclRlc3RzKCkKK3sKKyAgICBSRUdJU1RFUl9URVNUKFdlYktp
dERPTU5vZGVUZXN0LCAiV2ViS2l0RE9NTm9kZS9oaWVyYXJjaHktbmF2aWdhdGlvbiIpOworICAg
IFJFR0lTVEVSX1RFU1QoV2ViS2l0RE9NTm9kZVRlc3QsICJXZWJLaXRET01Ob2RlL2luc2VydGlv
biIpOworICAgIFJFR0lTVEVSX1RFU1QoV2ViS2l0RE9NTm9kZVRlc3QsICJXZWJLaXRET01Ob2Rl
L3RhZy1uYW1lcyIpOworfQorCisKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Mkd0ay9GcmFtZVRlc3QuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyR3RrL0ZyYW1lVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNGQ0ODUwZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Mkd0ay9GcmFtZVRlc3QuY3BwCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUg
IldlYlByb2Nlc3NUZXN0LmgiCisjaW5jbHVkZSA8Z2lvL2dpby5oPgorI2luY2x1ZGUgPHdlYmtp
dDIvd2Via2l0LXdlYi1leHRlbnNpb24uaD4KKworY2xhc3MgV2ViS2l0RnJhbWVUZXN0IDogcHVi
bGljIFdlYlByb2Nlc3NUZXN0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxXZWJQ
cm9jZXNzVGVzdD4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IFdlYktpdEZyYW1lVGVz
dCgpKTsgfQorCitwcml2YXRlOgorICAgIGd1aW50NjQgd2ViUGFnZUZyb21BcmdzKEdWYXJpYW50
KiBhcmdzKQorICAgIHsKKyAgICAgICAgR1ZhcmlhbnRJdGVyIGl0ZXI7CisgICAgICAgIGdfdmFy
aWFudF9pdGVyX2luaXQoJml0ZXIsIGFyZ3MpOworCisgICAgICAgIGNvbnN0IGNoYXIqIGtleTsK
KyAgICAgICAgR1ZhcmlhbnQqIHZhbHVlOworICAgICAgICB3aGlsZSAoZ192YXJpYW50X2l0ZXJf
bG9vcCgmaXRlciwgInsmc3Z9IiwgJmtleSwgJnZhbHVlKSkgeworICAgICAgICAgICAgaWYgKCFz
dHJjbXAoa2V5LCAicGFnZUlEIikgJiYgZ192YXJpYW50X2NsYXNzaWZ5KHZhbHVlKSA9PSBHX1ZB
UklBTlRfQ0xBU1NfVUlOVDY0KQorICAgICAgICAgICAgICAgIHJldHVybiBnX3ZhcmlhbnRfZ2V0
X3VpbnQ2NCh2YWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hl
ZCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBib29sIHRlc3RNYWluRnJhbWUo
V2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24sIEdWYXJpYW50KiBhcmdzKQorICAgIHsKKyAg
ICAgICAgV2ViS2l0V2ViUGFnZSogcGFnZSA9IHdlYmtpdF93ZWJfZXh0ZW5zaW9uX2dldF9wYWdl
KGV4dGVuc2lvbiwgd2ViUGFnZUZyb21BcmdzKGFyZ3MpKTsKKyAgICAgICAgZ19hc3NlcnQoV0VC
S0lUX0lTX1dFQl9QQUdFKHBhZ2UpKTsKKworICAgICAgICBXZWJLaXRGcmFtZSogZnJhbWUgPSB3
ZWJraXRfd2ViX3BhZ2VfZ2V0X21haW5fZnJhbWUocGFnZSk7CisgICAgICAgIGdfYXNzZXJ0KFdF
QktJVF9JU19GUkFNRShmcmFtZSkpOworICAgICAgICBnX2Fzc2VydCh3ZWJraXRfZnJhbWVfaXNf
bWFpbl9mcmFtZShmcmFtZSkpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IGJvb2wgdGVzdFVSSShXZWJLaXRXZWJFeHRlbnNpb24qIGV4dGVuc2lvbiwgR1ZhcmlhbnQqIGFy
Z3MpCisgICAgeworICAgICAgICBXZWJLaXRXZWJQYWdlKiBwYWdlID0gd2Via2l0X3dlYl9leHRl
bnNpb25fZ2V0X3BhZ2UoZXh0ZW5zaW9uLCB3ZWJQYWdlRnJvbUFyZ3MoYXJncykpOworICAgICAg
ICBnX2Fzc2VydChXRUJLSVRfSVNfV0VCX1BBR0UocGFnZSkpOworCisgICAgICAgIFdlYktpdEZy
YW1lKiBmcmFtZSA9IHdlYmtpdF93ZWJfcGFnZV9nZXRfbWFpbl9mcmFtZShwYWdlKTsKKyAgICAg
ICAgZ19hc3NlcnQoV0VCS0lUX0lTX0ZSQU1FKGZyYW1lKSk7CisgICAgICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfd2ViX3BhZ2VfZ2V0X3VyaShwYWdlKSwgPT0sIHdlYmtpdF9mcmFtZV9nZXRf
dXJpKGZyYW1lKSk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCB0
ZXN0SmF2YVNjcmlwdENvbnRleHQoV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24sIEdWYXJp
YW50KiBhcmdzKQorICAgIHsKKyAgICAgICAgV2ViS2l0V2ViUGFnZSogcGFnZSA9IHdlYmtpdF93
ZWJfZXh0ZW5zaW9uX2dldF9wYWdlKGV4dGVuc2lvbiwgd2ViUGFnZUZyb21BcmdzKGFyZ3MpKTsK
KyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX1dFQl9QQUdFKHBhZ2UpKTsKKworICAgICAgICBX
ZWJLaXRGcmFtZSogZnJhbWUgPSB3ZWJraXRfd2ViX3BhZ2VfZ2V0X21haW5fZnJhbWUocGFnZSk7
CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19GUkFNRShmcmFtZSkpOworICAgICAgICBnX2Fz
c2VydCh3ZWJraXRfZnJhbWVfZ2V0X2phdmFzY3JpcHRfZ2xvYmFsX2NvbnRleHQoZnJhbWUpKTsK
KworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgcnVuVGVz
dChjb25zdCBjaGFyKiB0ZXN0TmFtZSwgV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24sIEdW
YXJpYW50KiBhcmdzKQorICAgIHsKKyAgICAgICAgaWYgKCFzdHJjbXAodGVzdE5hbWUsICJtYWlu
LWZyYW1lIikpCisgICAgICAgICAgICByZXR1cm4gdGVzdE1haW5GcmFtZShleHRlbnNpb24sIGFy
Z3MpOworICAgICAgICBpZiAoIXN0cmNtcCh0ZXN0TmFtZSwgInVyaSIpKQorICAgICAgICAgICAg
cmV0dXJuIHRlc3RVUkkoZXh0ZW5zaW9uLCBhcmdzKTsKKyAgICAgICAgaWYgKCFzdHJjbXAodGVz
dE5hbWUsICJqYXZhc2NyaXB0LWNvbnRleHQiKSkKKyAgICAgICAgICAgIHJldHVybiB0ZXN0SmF2
YVNjcmlwdENvbnRleHQoZXh0ZW5zaW9uLCBhcmdzKTsKKworICAgICAgICBnX2Fzc2VydF9ub3Rf
cmVhY2hlZCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfTsKKworc3RhdGljIHZv
aWQgX19hdHRyaWJ1dGVfXygoY29uc3RydWN0b3IpKSByZWdpc3RlclRlc3RzKCkKK3sKKyAgICBS
RUdJU1RFUl9URVNUKFdlYktpdEZyYW1lVGVzdCwgIldlYktpdEZyYW1lL21haW4tZnJhbWUiKTsK
KyAgICBSRUdJU1RFUl9URVNUKFdlYktpdEZyYW1lVGVzdCwgIldlYktpdEZyYW1lL3VyaSIpOwor
ICAgIFJFR0lTVEVSX1RFU1QoV2ViS2l0RnJhbWVUZXN0LCAiV2ViS2l0RnJhbWUvamF2YXNjcmlw
dC1jb250ZXh0Iik7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdDJHdGsvSW5zcGVjdG9yVGVzdFNlcnZlci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdDJHdGsvSW5zcGVjdG9yVGVzdFNlcnZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uZjEzYjA0MwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9JbnNwZWN0b3JUZXN0U2VydmVyLmNwcApAQCAtMCww
ICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3Mg
THRkLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQy
Lmg+CisKK3N0YXRpYyB2b2lkIGxvYWRDaGFuZ2VkQ2FsbGJhY2soV2ViS2l0V2ViVmlldyosIFdl
YktpdExvYWRFdmVudCBsb2FkRXZlbnQsIGdwb2ludGVyKQoreworICAgIC8vIFNlbmQgYSBtZXNz
YWdlIHRvIHRoZSBwYXJlbnQgcHJvY2VzcyB3aGVuIHdlJ3JlIHJlYWR5LgorICAgIGlmIChsb2Fk
RXZlbnQgPT0gV0VCS0lUX0xPQURfRklOSVNIRUQpCisgICAgICAgIGdfcHJpbnQoIk9LIik7Cit9
CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBndGtfaW5pdCgmYXJn
YywgJmFyZ3YpOworCisgICAgLy8gT3ZlcndyaXRlIFdFQktJVF9JTlNQRUNUT1JfU0VSVkVSIHZh
cmlhYmxlIHdpdGggZGVmYXVsdCB2YWx1ZS4KKyAgICBnX3NldGVudigiV0VCS0lUX0lOU1BFQ1RP
Ul9TRVJWRVIiLCAiMTI3LjAuMC4xOjI5OTkiLCBUUlVFKTsKKworICAgIFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICB3
ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9kZXZlbG9wZXJfZXh0cmFzKHdlYmtpdF93ZWJfdmll
d19nZXRfc2V0dGluZ3Mod2ViVmlldyksIFRSVUUpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2Fk
X2h0bWwod2ViVmlldywKKyAgICAgICAgIjxodG1sPjxib2R5PjxwPldlYktpdEdUSysgSW5zcGVj
dG9yIFRlc3QgU2VydmVyPC9wPjwvYm9keT48L2h0bWw+IiwKKyAgICAgICAgImh0dHA6Ly8xMjcu
MC4wLjE6Mjk5OS8iKTsKKworICAgIEd0a1dpZGdldCogd2luZG93ID0gZ3RrX3dpbmRvd19uZXco
R1RLX1dJTkRPV19UT1BMRVZFTCk7CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5F
Uih3aW5kb3cpLCBHVEtfV0lER0VUKHdlYlZpZXcpKTsKKyAgICBndGtfd2lkZ2V0X3Nob3dfYWxs
KHdpbmRvdyk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdpbmRvdywgImRlbGV0ZS1ldmVudCIs
IEdfQ0FMTEJBQ0soZ3RrX21haW5fcXVpdCksIDApOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2Vi
VmlldywgImxvYWQtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sobG9hZENoYW5nZWRDYWxsYmFjayksIDAp
OworCisgICAgZ3RrX21haW4oKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Mkd0ay9UZXN0QXV0aGVudGljYXRpb24uY3BwIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RBdXRoZW50aWNhdGlvbi5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRlNDIyNQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0QXV0aGVudGljYXRpb24uY3BwCkBA
IC0wLDAgKzEsMjg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTG9hZFRyYWNraW5nVGVzdC5oIgorI2luY2x1
ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+
CisKK3N0YXRpYyBXZWJLaXRUZXN0U2VydmVyKiBrU2VydmVyOworCitjbGFzcyBBdXRoZW50aWNh
dGlvblRlc3Q6IHB1YmxpYyBMb2FkVHJhY2tpbmdUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dM
SUJfVEVTVF9GSVhUVVJFKEF1dGhlbnRpY2F0aW9uVGVzdCk7CisKKyAgICBBdXRoZW50aWNhdGlv
blRlc3QoKQorICAgIHsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJhdXRo
ZW50aWNhdGUiLCBHX0NBTExCQUNLKHJ1bkF1dGhlbnRpY2F0aW9uQ2FsbGJhY2spLCB0aGlzKTsK
KyAgICB9CisKKyAgICB+QXV0aGVudGljYXRpb25UZXN0KCkKKyAgICB7CisgICAgICAgIGdfc2ln
bmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3dlYlZpZXcsIEdfU0lHTkFMX01BVENI
X0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOworICAgIH0KKworICAgIHN0YXRpYyBpbnQgYXV0aGVu
dGljYXRpb25SZXRyaWVzOworICAgIHN0YXRpYyBib29sIGF1dGhlbnRpY2F0aW9uQ2FuY2VsbGVk
UmVjZWl2ZWQ7CisKKyAgICB2b2lkIGxvYWRVUkkoY29uc3QgY2hhciogdXJpKQorICAgIHsKKyAg
ICAgICAgLy8gUmVzZXQgdGhlIHJldHJ5IGNvdW50IG9mIHRoZSBmYWtlIHNlcnZlciB3aGVuIGEg
cGFnZSBpcyBsb2FkZWQuCisgICAgICAgIGF1dGhlbnRpY2F0aW9uUmV0cmllcyA9IDA7CisgICAg
ICAgIGF1dGhlbnRpY2F0aW9uQ2FuY2VsbGVkUmVjZWl2ZWQgPSBmYWxzZTsKKyAgICAgICAgTG9h
ZFRyYWNraW5nVGVzdDo6bG9hZFVSSSh1cmkpOworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVh
biBydW5BdXRoZW50aWNhdGlvbkNhbGxiYWNrKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRBdXRoZW50
aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QsIEF1dGhlbnRpY2F0aW9uVGVzdCogdGVzdCkKKyAgICB7
CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QocmVxdWVzdCwgImNhbmNlbGxlZCIsIEdfQ0FMTEJB
Q0soYXV0aGVudGljYXRpb25DYW5jZWxsZWRDYWxsYmFjayksIHRlc3QpOworICAgICAgICB0ZXN0
LT5ydW5BdXRoZW50aWNhdGlvbihyZXF1ZXN0KTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAg
fQorCisgICAgc3RhdGljIHZvaWQgYXV0aGVudGljYXRpb25DYW5jZWxsZWRDYWxsYmFjayhXZWJL
aXRBdXRoZW50aWNhdGlvblJlcXVlc3QqLCBBdXRoZW50aWNhdGlvblRlc3QqKQorICAgIHsKKyAg
ICAgICAgYXV0aGVudGljYXRpb25DYW5jZWxsZWRSZWNlaXZlZCA9IHRydWU7CisgICAgfQorCisg
ICAgdm9pZCBydW5BdXRoZW50aWNhdGlvbihXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJl
cXVlc3QpCisgICAgeworICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlz
aGVzKEdfT0JKRUNUKHJlcXVlc3QpKTsKKyAgICAgICAgbV9hdXRoZW50aWNhdGlvblJlcXVlc3Qg
PSByZXF1ZXN0OworICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3ApOworICAgIH0K
KworICAgIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogd2FpdEZvckF1dGhlbnRpY2F0aW9u
UmVxdWVzdCgpCisgICAgeworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Cisg
ICAgICAgIHJldHVybiBtX2F1dGhlbnRpY2F0aW9uUmVxdWVzdC5nZXQoKTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgR1JlZlB0cjxXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3Q+IG1fYXV0aGVu
dGljYXRpb25SZXF1ZXN0OworfTsKKworaW50IEF1dGhlbnRpY2F0aW9uVGVzdDo6YXV0aGVudGlj
YXRpb25SZXRyaWVzID0gMDsKK2Jvb2wgQXV0aGVudGljYXRpb25UZXN0OjphdXRoZW50aWNhdGlv
bkNhbmNlbGxlZFJlY2VpdmVkID0gZmFsc2U7CisKK3N0YXRpYyBjb25zdCBjaGFyIGF1dGhUZXN0
VXNlcm5hbWVbXSA9ICJ1c2VybmFtZSI7CitzdGF0aWMgY29uc3QgY2hhciBhdXRoVGVzdFBhc3N3
b3JkW10gPSAicGFzc3dvcmQiOworc3RhdGljIGNvbnN0IGNoYXIgYXV0aEV4cGVjdGVkU3VjY2Vz
c1RpdGxlW10gPSAiV2ViS2l0Mkd0aysgQXV0aGVudGljYXRpb24gdGVzdCI7CitzdGF0aWMgY29u
c3QgY2hhciBhdXRoRXhwZWN0ZWRGYWlsdXJlVGl0bGVbXSA9ICI0MDEgQXV0aG9yaXphdGlvbiBS
ZXF1aXJlZCI7CitzdGF0aWMgY29uc3QgY2hhciBhdXRoRXhwZWN0ZWRBdXRob3JpemF0aW9uW10g
PSAiQmFzaWMgZFhObGNtNWhiV1U2Y0dGemMzZHZjbVE9IjsgLy8gQmFzZTY0IGVuY29kaW5nIG9m
ICJ1c2VybmFtZTpwYXNzd29yZCIuCitzdGF0aWMgY29uc3QgY2hhciBhdXRoU3VjY2Vzc0hUTUxT
dHJpbmdbXSA9CisgICAgIjxodG1sPiIKKyAgICAiPGhlYWQ+PHRpdGxlPldlYktpdDJHdGsrIEF1
dGhlbnRpY2F0aW9uIHRlc3Q8L3RpdGxlPjwvaGVhZD4iCisgICAgIjxib2R5PjwvYm9keT48L2h0
bWw+IjsKK3N0YXRpYyBjb25zdCBjaGFyIGF1dGhGYWlsdXJlSFRNTFN0cmluZ1tdID0KKyAgICAi
PGh0bWw+IgorICAgICI8aGVhZD48dGl0bGU+NDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQ8L3Rp
dGxlPjwvaGVhZD4iCisgICAgIjxib2R5PjwvYm9keT48L2h0bWw+IjsKKworc3RhdGljIHZvaWQg
dGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvblJlcXVlc3QoQXV0aGVudGljYXRpb25UZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQoreworICAgIC8vIFRlc3QgYXV0aGVudGljYXRpb24gcmVxdWVzdCBn
ZXR0ZXJzIG1hdGNoIHNvdXAgYXV0aGVudGljYXRpb24gaGVhZGVyLgorICAgIHRlc3QtPmxvYWRV
Ukkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2F1dGgtdGVzdC5odG1sIikuZGF0YSgpKTsKKyAg
ICBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QgPSB0ZXN0LT53YWl0Rm9yQXV0
aGVudGljYXRpb25SZXF1ZXN0KCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9hdXRoZW50
aWNhdGlvbl9yZXF1ZXN0X2dldF9ob3N0KHJlcXVlc3QpLCA9PSwgc291cF91cmlfZ2V0X2hvc3Qo
a1NlcnZlci0+YmFzZVVSSSgpKSk7CisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfYXV0aGVu
dGljYXRpb25fcmVxdWVzdF9nZXRfcG9ydChyZXF1ZXN0KSwgPT0sIHNvdXBfdXJpX2dldF9wb3J0
KGtTZXJ2ZXItPmJhc2VVUkkoKSkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfYXV0aGVu
dGljYXRpb25fcmVxdWVzdF9nZXRfcmVhbG0ocmVxdWVzdCksID09LCAibXkgcmVhbG0iKTsKKyAg
ICBnX2Fzc2VydCh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfc2NoZW1lKHJlcXVl
c3QpID09IFdFQktJVF9BVVRIRU5USUNBVElPTl9TQ0hFTUVfSFRUUF9CQVNJQyk7CisgICAgZ19h
c3NlcnQoIXdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2lzX2Zvcl9wcm94eShyZXF1ZXN0
KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2lzX3JldHJ5
KHJlcXVlc3QpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvbkNh
bmNlbChBdXRoZW50aWNhdGlvblRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8g
VGVzdCBjYW5jZWwuCisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIv
YXV0aC10ZXN0Lmh0bWwiKS5kYXRhKCkpOworICAgIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVz
dCogcmVxdWVzdCA9IHRlc3QtPndhaXRGb3JBdXRoZW50aWNhdGlvblJlcXVlc3QoKTsKKyAgICB3
ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jYW5jZWwocmVxdWVzdCk7CisgICAgLy8gU2Vy
dmVyIGRvZXNuJ3QgYXNrIGZvciBuZXcgY3JlZGVudGlhbHMuCisgICAgdGVzdC0+d2FpdFVudGls
TG9hZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRz
LnNpemUoKSwgPT0sIDMpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNb
MF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVz
dDo6UHJvdmlzaW9uYWxMb2FkRmFpbGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9s
b2FkRXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKKworICAg
IGdfYXNzZXJ0X2Vycm9yKHRlc3QtPm1fZXJyb3IuZ2V0KCksIFdFQktJVF9ORVRXT1JLX0VSUk9S
LCBXRUJLSVRfTkVUV09SS19FUlJPUl9DQU5DRUxMRUQpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0
V2ViVmlld0F1dGhlbnRpY2F0aW9uTG9hZENhbmNlbGxlZChBdXRoZW50aWNhdGlvblRlc3QqIHRl
c3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklG
b3JQYXRoKCIvYXV0aC10ZXN0Lmh0bWwiKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRGb3JBdXRo
ZW50aWNhdGlvblJlcXVlc3QoKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfc3RvcF9sb2FkaW5nKHRl
c3QtPm1fd2ViVmlldyk7CisgICAgLy8gRXhwZWN0IGVtcHR5IHBhZ2UuCisgICAgdGVzdC0+d2Fp
dFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnQodGVzdC0+YXV0aGVudGljYXRpb25D
YW5jZWxsZWRSZWNlaXZlZCk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZl
bnRzLnNpemUoKSwgPT0sIDMpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVu
dHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5n
VGVzdDo6UHJvdmlzaW9uYWxMb2FkRmFpbGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+
bV9sb2FkRXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKKwor
ICAgIGdfYXNzZXJ0X2Vycm9yKHRlc3QtPm1fZXJyb3IuZ2V0KCksIFdFQktJVF9ORVRXT1JLX0VS
Uk9SLCBXRUJLSVRfTkVUV09SS19FUlJPUl9DQU5DRUxMRUQpOworfQorCitzdGF0aWMgdm9pZCB0
ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uRmFpbHVyZShBdXRoZW50aWNhdGlvblRlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8gVGVzdCBhdXRoZW50aWNhdGlvbiBmYWlsdXJlcy4K
KyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9hdXRoLXRlc3QuaHRt
bCIpLmRhdGEoKSk7CisgICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0ID0g
dGVzdC0+d2FpdEZvckF1dGhlbnRpY2F0aW9uUmVxdWVzdCgpOworICAgIGdfYXNzZXJ0KCF3ZWJr
aXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9pc19yZXRyeShyZXF1ZXN0KSk7CisgICAgV2ViS2l0
Q3JlZGVudGlhbCogY3JlZGVudGlhbCA9IHdlYmtpdF9jcmVkZW50aWFsX25ldyhhdXRoVGVzdFVz
ZXJuYW1lLCAid3JvbmdwYXNzd29yZCIsIFdFQktJVF9DUkVERU5USUFMX1BFUlNJU1RFTkNFX05P
TkUpOworICAgIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2F1dGhlbnRpY2F0ZShyZXF1
ZXN0LCBjcmVkZW50aWFsKTsKKyAgICB3ZWJraXRfY3JlZGVudGlhbF9mcmVlKGNyZWRlbnRpYWwp
OworICAgIC8vIEV4cGVjdCBhIHNlY29uZCBhdXRoZW50aWNhdGlvbiByZXF1ZXN0LgorICAgIHJl
cXVlc3QgPSB0ZXN0LT53YWl0Rm9yQXV0aGVudGljYXRpb25SZXF1ZXN0KCk7CisgICAgZ19hc3Nl
cnQod2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfaXNfcmV0cnkocmVxdWVzdCkpOworICAg
IC8vIFRlc3Qgc2Vjb25kIGZhaWx1cmUuCisgICAgY3JlZGVudGlhbCA9IHdlYmtpdF9jcmVkZW50
aWFsX25ldyhhdXRoVGVzdFVzZXJuYW1lLCAid3JvbmdwYXNzd29yZDIiLCBXRUJLSVRfQ1JFREVO
VElBTF9QRVJTSVNURU5DRV9OT05FKTsKKyAgICB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVz
dF9hdXRoZW50aWNhdGUocmVxdWVzdCwgY3JlZGVudGlhbCk7CisgICAgd2Via2l0X2NyZWRlbnRp
YWxfZnJlZShjcmVkZW50aWFsKTsKKyAgICAvLyBFeHBlY3QgYXV0aGVudGljYXRpb24gZmFpbGVk
IHBhZ2UuCisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0sIDMpOworICAgIGdfYXNzZXJ0
X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92
aXNpb25hbExvYWRTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZl
bnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZENvbW1pdHRlZCk7CisgICAgZ19hc3Nl
cnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6Okxv
YWRGaW5pc2hlZCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRfdGl0
bGUodGVzdC0+bV93ZWJWaWV3KSwgPT0sIGF1dGhFeHBlY3RlZEZhaWx1cmVUaXRsZSk7Cit9CisK
K3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25Ob0NyZWRlbnRpYWwoQXV0aGVu
dGljYXRpb25UZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIC8vIFRlc3QgY29udGlu
dWUgd2l0aG91dCBjcmVkZW50aWFscy4KKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVS
SUZvclBhdGgoIi9hdXRoLXRlc3QuaHRtbCIpLmRhdGEoKSk7CisgICAgV2ViS2l0QXV0aGVudGlj
YXRpb25SZXF1ZXN0KiByZXF1ZXN0ID0gdGVzdC0+d2FpdEZvckF1dGhlbnRpY2F0aW9uUmVxdWVz
dCgpOworICAgIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2F1dGhlbnRpY2F0ZShyZXF1
ZXN0LCAwKTsKKyAgICAvLyBTZXJ2ZXIgZG9lc24ndCBhc2sgZm9yIG5ldyBjcmVkZW50aWFscy4K
KyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0X2NtcGlu
dCh0ZXN0LT5tX2xvYWRFdmVudHMuc2l6ZSgpLCA9PSwgMyk7CisgICAgZ19hc3NlcnRfY21waW50
KHRlc3QtPm1fbG9hZEV2ZW50c1swXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFs
TG9hZFN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMV0s
ID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkQ29tbWl0dGVkKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQodGVzdC0+bV9sb2FkRXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlz
aGVkKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dldF90aXRsZSh0ZXN0
LT5tX3dlYlZpZXcpLCA9PSwgYXV0aEV4cGVjdGVkRmFpbHVyZVRpdGxlKTsKK30KKworc3RhdGlj
IHZvaWQgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvblN0b3JhZ2UoQXV0aGVudGljYXRpb25UZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIC8vIEVuYWJsZSBwcml2YXRlIGJyb3dzaW5n
IGJlZm9yZSBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IHRvIHRlc3QgdGhhdCBjcmVkZW50aWFscyBj
YW4ndCBiZSBzYXZlZC4KKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9wcml2YXRlX2Jy
b3dzaW5nKHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3ModGVzdC0+bV93ZWJWaWV3KSwgVFJV
RSk7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvYXV0aC10ZXN0
Lmh0bWwiKS5kYXRhKCkpOworICAgIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVz
dCA9IHRlc3QtPndhaXRGb3JBdXRoZW50aWNhdGlvblJlcXVlc3QoKTsKKyAgICBnX2Fzc2VydCgh
d2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3Byb3Bvc2VkX2NyZWRlbnRpYWwocmVx
dWVzdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jYW5f
c2F2ZV9jcmVkZW50aWFscyhyZXF1ZXN0KSk7CisKKyAgICAvLyBJZiBXZWJLaXQgaGFzIGJlZW4g
Y29tcGlsZWQgd2l0aCBsaWJzZWNyZXQsIGFuZCBwcml2YXRlIGJyb3dzaW5nIGlzIGRpc2FibGVk
CisgICAgLy8gdGhlbiBjaGVjayB0aGF0IGNyZWRlbnRpYWxzIGNhbiBiZSBzYXZlZC4KKyNpZiBF
TkFCTEUoQ1JFREVOVElBTF9TVE9SQUdFKQorICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxl
X3ByaXZhdGVfYnJvd3Npbmcod2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh0ZXN0LT5tX3dl
YlZpZXcpLCBGQUxTRSk7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRo
KCIvYXV0aC10ZXN0Lmh0bWwiKS5kYXRhKCkpOworICAgIHJlcXVlc3QgPSB0ZXN0LT53YWl0Rm9y
QXV0aGVudGljYXRpb25SZXF1ZXN0KCk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9hdXRoZW50aWNh
dGlvbl9yZXF1ZXN0X2dldF9wcm9wb3NlZF9jcmVkZW50aWFsKHJlcXVlc3QpKTsKKyAgICBnX2Fz
c2VydCh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jYW5fc2F2ZV9jcmVkZW50aWFscyhy
ZXF1ZXN0KSk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdBdXRoZW50aWNh
dGlvblN1Y2Nlc3MoQXV0aGVudGljYXRpb25UZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQorewor
ICAgIC8vIFRlc3QgY29ycmVjdCBhdXRoZW50aWNhdGlvbi4KKyAgICB0ZXN0LT5sb2FkVVJJKGtT
ZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9hdXRoLXRlc3QuaHRtbCIpLmRhdGEoKSk7CisgICAgV2Vi
S2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0ID0gdGVzdC0+d2FpdEZvckF1dGhlbnRp
Y2F0aW9uUmVxdWVzdCgpOworICAgIFdlYktpdENyZWRlbnRpYWwqIGNyZWRlbnRpYWwgPSB3ZWJr
aXRfY3JlZGVudGlhbF9uZXcoYXV0aFRlc3RVc2VybmFtZSwgYXV0aFRlc3RQYXNzd29yZCwgV0VC
S0lUX0NSRURFTlRJQUxfUEVSU0lTVEVOQ0VfRk9SX1NFU1NJT04pOworICAgIHdlYmtpdF9hdXRo
ZW50aWNhdGlvbl9yZXF1ZXN0X2F1dGhlbnRpY2F0ZShyZXF1ZXN0LCBjcmVkZW50aWFsKTsKKyAg
ICB3ZWJraXRfY3JlZGVudGlhbF9mcmVlKGNyZWRlbnRpYWwpOworICAgIHRlc3QtPndhaXRVbnRp
bExvYWRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50
cy5zaXplKCksID09LCAzKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRz
WzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7CisgICAg
Z19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rl
c3Q6OkxvYWRDb21taXR0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVu
dHNbMl0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOworICAgIGdfYXNzZXJ0
X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3RpdGxlKHRlc3QtPm1fd2ViVmlldyksID09LCBh
dXRoRXhwZWN0ZWRTdWNjZXNzVGl0bGUpOworCisgICAgLy8gVGVzdCBsb2FkaW5nIHRoZSBzYW1l
IChhdXRob3JpemVkKSBwYWdlIGFnYWluLgorICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0
VVJJRm9yUGF0aCgiL2F1dGgtdGVzdC5odG1sIikuZGF0YSgpKTsKKyAgICAvLyBUaGVyZSBpcyBu
byBhdXRoZW50aWNhdGlvbiBjaGFsbGVuZ2UuCisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlz
aGVkKCk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzLnNpemUoKSwg
PT0sIDMpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMF0sID09LCBM
b2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZENv
bW1pdHRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1syXSwgPT0s
IExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdl
YmtpdF93ZWJfdmlld19nZXRfdGl0bGUodGVzdC0+bV93ZWJWaWV3KSwgPT0sIGF1dGhFeHBlY3Rl
ZFN1Y2Nlc3NUaXRsZSk7Cit9CisKK3N0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2
ZXIqLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSos
IFNvdXBDbGllbnRDb250ZXh0Kiwgdm9pZCopCit7CisgICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAh
PSBTT1VQX01FVEhPRF9HRVQpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVz
c2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmICghc3RyY21wKHBhdGgsICIvYXV0aC10ZXN0Lmh0bWwiKSkgeworICAgICAg
ICBjb25zdCBjaGFyKiBhdXRob3JpemF0aW9uID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X29u
ZShtZXNzYWdlLT5yZXF1ZXN0X2hlYWRlcnMsICJBdXRob3JpemF0aW9uIik7CisgICAgICAgIC8v
IFJlcXVpcmUgYXV0aGVudGljYXRpb24uCisgICAgICAgIGlmICghZ19zdHJjbXAwKGF1dGhvcml6
YXRpb24sIGF1dGhFeHBlY3RlZEF1dGhvcml6YXRpb24pKSB7CisgICAgICAgICAgICAvLyBTdWNj
ZXNzZnVsIGF1dGhlbnRpY2F0aW9uLgorICAgICAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0
dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOworICAgICAgICAgICAgc291cF9tZXNzYWdlX2Jv
ZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgYXV0
aFN1Y2Nlc3NIVE1MU3RyaW5nLCBzdHJsZW4oYXV0aFN1Y2Nlc3NIVE1MU3RyaW5nKSk7CisgICAg
ICAgICAgICBBdXRoZW50aWNhdGlvblRlc3Q6OmF1dGhlbnRpY2F0aW9uUmV0cmllcyA9IDA7Cisg
ICAgICAgIH0gZWxzZSBpZiAoKytBdXRoZW50aWNhdGlvblRlc3Q6OmF1dGhlbnRpY2F0aW9uUmV0
cmllcyA8IDMpIHsKKyAgICAgICAgICAgIC8vIE5vIG9yIGludmFsaWQgYXV0aG9yaXphdGlvbiBo
ZWFkZXIgcHJvdmlkZWQgYnkgdGhlIGNsaWVudCwgcmVxdWVzdCBhdXRoZW50aWNhdGlvbiB0d2lj
ZSB0aGVuIGZhaWwuCisgICAgICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdl
LCBTT1VQX1NUQVRVU19VTkFVVEhPUklaRUQpOworICAgICAgICAgICAgc291cF9tZXNzYWdlX2hl
YWRlcnNfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJXV1ctQXV0aGVudGljYXRl
IiwgIkJhc2ljIHJlYWxtPVwibXkgcmVhbG1cIiIpOworICAgICAgICAgICAgLy8gSW5jbHVkZSBh
IGZhaWx1cmUgbWVzc2FnZSBpbiBjYXNlIHRoZSB1c2VyIGF0dGVtcHRzIHRvIHByb2NlZWQgd2l0
aG91dCBhdXRoZW50aWNhdGlvbi4KKyAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVu
ZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGF1dGhGYWlsdXJl
SFRNTFN0cmluZywgc3RybGVuKGF1dGhGYWlsdXJlSFRNTFN0cmluZykpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgLy8gQXV0aGVudGljYXRpb24gbm90IHN1Y2Nlc3NmdWwsIGRpc3Bs
YXkgYSAiNDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQiIHBhZ2UuCisgICAgICAgICAgICBzb3Vw
X21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7CisgICAgICAgICAg
ICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9N
RU1PUllfU1RBVElDLCBhdXRoRmFpbHVyZUhUTUxTdHJpbmcsIHN0cmxlbihhdXRoRmFpbHVyZUhU
TUxTdHJpbmcpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBzb3VwX21lc3NhZ2Vf
c2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfRk9VTkQpOworCisgICAgc291cF9t
ZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7Cit9CisKK3ZvaWQg
YmVmb3JlQWxsKCkKK3sKKyAgICBrU2VydmVyID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIoKTsKKyAg
ICBrU2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2spOworCisgICAgQXV0aGVudGljYXRpb25UZXN0
OjphZGQoIldlYktpdFdlYlZpZXciLCAiYXV0aGVudGljYXRpb24tcmVxdWVzdCIsIHRlc3RXZWJW
aWV3QXV0aGVudGljYXRpb25SZXF1ZXN0KTsKKyAgICBBdXRoZW50aWNhdGlvblRlc3Q6OmFkZCgi
V2ViS2l0V2ViVmlldyIsICJhdXRoZW50aWNhdGlvbi1jYW5jZWwiLCB0ZXN0V2ViVmlld0F1dGhl
bnRpY2F0aW9uQ2FuY2VsKTsKKyAgICBBdXRoZW50aWNhdGlvblRlc3Q6OmFkZCgiV2ViS2l0V2Vi
VmlldyIsICJhdXRoZW50aWNhdGlvbi1sb2FkLWNhbmNlbGxlZCIsIHRlc3RXZWJWaWV3QXV0aGVu
dGljYXRpb25Mb2FkQ2FuY2VsbGVkKTsKKyAgICBBdXRoZW50aWNhdGlvblRlc3Q6OmFkZCgiV2Vi
S2l0V2ViVmlldyIsICJhdXRoZW50aWNhdGlvbi1mYWlsdXJlIiwgdGVzdFdlYlZpZXdBdXRoZW50
aWNhdGlvbkZhaWx1cmUpOworICAgIEF1dGhlbnRpY2F0aW9uVGVzdDo6YWRkKCJXZWJLaXRXZWJW
aWV3IiwgImF1dGhlbnRpY2F0aW9uLW5vLWNyZWRlbnRpYWwiLCB0ZXN0V2ViVmlld0F1dGhlbnRp
Y2F0aW9uTm9DcmVkZW50aWFsKTsKKyAgICBBdXRoZW50aWNhdGlvblRlc3Q6OmFkZCgiV2ViS2l0
V2ViVmlldyIsICJhdXRoZW50aWNhdGlvbi1zdG9yYWdlIiwgdGVzdFdlYlZpZXdBdXRoZW50aWNh
dGlvblN0b3JhZ2UpOworICAgIC8vIFRlc3RpbmcgYXV0aGVudGljYXRpb24gc3VjY2VzcyBtdXN0
IGJlIGRvbmUgbGFzdCBiZWNhdXNlIGxpYnNvdXAgd2lsbCBuZXZlciBmaXJlCisgICAgLy8gdGhl
IGF1dGhlbnRpY2F0ZSBzaWduYWwgYWdhaW4gb25jZSBhdXRoZW50aWNhdGlvbiBpcyBzdWNjZXNz
ZnVsLgorICAgIEF1dGhlbnRpY2F0aW9uVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImF1dGhl
bnRpY2F0aW9uLXN1Y2Nlc3MiLCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uU3VjY2Vzcyk7Cit9
CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworICAgIGRlbGV0ZSBrU2VydmVyOworfQpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RCYWNrRm9yd2FyZExp
c3QuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RCYWNrRm9y
d2FyZExpc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NzkzNjYK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsv
VGVzdEJhY2tGb3J3YXJkTGlzdC5jcHAKQEAgLTAsMCArMSwyODAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAi
V2ViS2l0VGVzdFNlcnZlci5oIgorI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCisjaW5jbHVkZSA8
Z3RrL2d0ay5oPgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgorI2luY2x1ZGUgPHN0cmluZy5o
PgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgorCisvLyBCYWNrIGZvcndhcmQgbGlzdCBs
aW1pdCBpcyAxMDAgYnkgZGVmYXVsdC4KK3N0YXRpYyBjb25zdCBpbnQga0JhY2tGb3J3YXJkTGlz
dExpbWl0ID0gMTAwOworCitzdGF0aWMgV2ViS2l0VGVzdFNlcnZlcioga1NlcnZlcjsKKworc3Rh
dGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSog
bXNnLCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiBxdWVyeSwgU291cENsaWVudENvbnRl
eHQqIGNvbnRleHQsIGdwb2ludGVyIGRhdGEpCit7CisgICAgaWYgKG1zZy0+bWV0aG9kICE9IFNP
VVBfTUVUSE9EX0dFVCkgeworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2csIFNP
VVBfU1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoZ19zdHJfaGFzX3N1ZmZpeChwYXRoLCAiZmF2aWNvbi5pY28iKSkgeworICAgICAgICBz
b3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2csIFNP
VVBfU1RBVFVTX09LKTsKKworICAgIGNoYXIqIGJvZHkgPSBnX3N0cmR1cF9wcmludGYoIjxodG1s
Pjx0aXRsZT4lczwvdGl0bGU+PGJvZHk+JXM8L2JvZHk+PC9odG1sPiIsIHBhdGggKyAxLCBwYXRo
ICsgMSk7CisgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1zZy0+cmVzcG9uc2VfYm9keSwg
U09VUF9NRU1PUllfVEFLRSwgYm9keSwgc3RybGVuKGJvZHkpKTsKKworICAgIHNvdXBfbWVzc2Fn
ZV9ib2R5X2NvbXBsZXRlKG1zZy0+cmVzcG9uc2VfYm9keSk7Cit9CisKK2NsYXNzIEJhY2tGb3J3
YXJkTGlzdFRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElC
X1RFU1RfRklYVFVSRShCYWNrRm9yd2FyZExpc3RUZXN0KTsKKworICAgIGVudW0geworICAgICAg
ICBCYWNrd2FyZCwKKyAgICAgICAgRm9yd2FyZAorICAgIH07CisKKyAgICBlbnVtIHsKKyAgICAg
ICAgQ3VycmVudEl0ZW0gID0gMSA8PCAwLAorICAgICAgICBBZGRlZEl0ZW0gICAgPSAxIDw8IDEs
CisgICAgICAgIFJlbW92ZWRJdGVtcyA9IDEgPDwgMgorICAgIH07CisKKyAgICBzdGF0aWMgdm9p
ZCBjaGVja0l0ZW0oV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSogaXRlbSwgY29uc3QgY2hhciog
dGl0bGUsIGNvbnN0IGNoYXIqIHVyaSwgY29uc3QgY2hhciogb3JpZ2luYWxVUkkpCisgICAgewor
ICAgICAgICBnX2Fzc2VydChpdGVtKTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9i
YWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dldF91cmkoaXRlbSksID09LCB1cmkpOworICAgICAgICBn
X2Fzc2VydF9jbXBzdHIod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0X3RpdGxlKGl0
ZW0pLCA9PSAsIHRpdGxlKTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9iYWNrX2Zv
cndhcmRfbGlzdF9pdGVtX2dldF9vcmlnaW5hbF91cmkoaXRlbSksID09LCBvcmlnaW5hbFVSSSk7
CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgY2hlY2tJdGVtSW5kZXgoV2ViS2l0QmFja0Zvcndh
cmRMaXN0KiBsaXN0KQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X2JhY2tfZm9yd2Fy
ZF9saXN0X2dldF9udGhfaXRlbShsaXN0LCAtMSkgPT0gd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0
X2dldF9iYWNrX2l0ZW0obGlzdCkpOworICAgICAgICBnX2Fzc2VydCh3ZWJraXRfYmFja19mb3J3
YXJkX2xpc3RfZ2V0X250aF9pdGVtKGxpc3QsIDApID09IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlz
dF9nZXRfY3VycmVudF9pdGVtKGxpc3QpKTsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X2JhY2tf
Zm9yd2FyZF9saXN0X2dldF9udGhfaXRlbShsaXN0LCAxKSA9PSB3ZWJraXRfYmFja19mb3J3YXJk
X2xpc3RfZ2V0X2ZvcndhcmRfaXRlbShsaXN0KSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQg
Y2hlY2tMaXN0KFdlYktpdEJhY2tGb3J3YXJkTGlzdCogbGlzdCwgdW5zaWduZWQgdHlwZSwgV2Vi
S2l0QmFja0ZvcndhcmRMaXN0SXRlbSoqIGl0ZW1zLCB1bnNpZ25lZCBuSXRlbXMpCisgICAgewor
ICAgICAgICBHTGlzdCogbGlzdEl0ZW1zID0gdHlwZSA9PSBCYWNrRm9yd2FyZExpc3RUZXN0OjpC
YWNrd2FyZCA/IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19saXN0KGxpc3QpIDoK
KyAgICAgICAgICAgIHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0KGxp
c3QpOworICAgICAgICBnX2Fzc2VydChsaXN0SXRlbXMpOworCisgICAgICAgIHVuc2lnbmVkIGkg
PSAwOworICAgICAgICBmb3IgKEdMaXN0KiBsaXN0SXRlbSA9IGxpc3RJdGVtczsgbGlzdEl0ZW07
IGxpc3RJdGVtID0gZ19saXN0X25leHQobGlzdEl0ZW0pLCBpKyspIHsKKyAgICAgICAgICAgIGdf
YXNzZXJ0X2NtcHVpbnQoaSwgPCwgbkl0ZW1zKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KGxpc3RJ
dGVtLT5kYXRhID09IGl0ZW1zW2ldKTsKKyAgICAgICAgfQorICAgICAgICBnX2xpc3RfZnJlZShs
aXN0SXRlbXMpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGJhY2tGb3J3YXJkTGlzdENoYW5n
ZWQoV2ViS2l0QmFja0ZvcndhcmRMaXN0KiBsaXN0LCBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVt
KiBhZGRlZEl0ZW0sIEdMaXN0KiByZW1vdmVkSXRlbXMsIEJhY2tGb3J3YXJkTGlzdFRlc3QqIHRl
c3QpCisgICAgeworICAgICAgICB0ZXN0LT5tX2hhc0NoYW5nZWQgPSB0cnVlOworCisgICAgICAg
IGlmICh0ZXN0LT5tX2NoYW5nZWRGbGFncyAmIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OkFkZGVkSXRl
bSkgeworICAgICAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX0JBQ0tfRk9SV0FSRF9MSVNUX0lU
RU0oYWRkZWRJdGVtKSk7CisgICAgICAgICAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRX
aGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKGFkZGVkSXRlbSkpOworICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgIGdfYXNzZXJ0KCFhZGRlZEl0ZW0pOworCisgICAgICAgIGlmICh0ZXN0LT5tX2No
YW5nZWRGbGFncyAmIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OlJlbW92ZWRJdGVtcykgeworICAgICAg
ICAgICAgZ19hc3NlcnQocmVtb3ZlZEl0ZW1zKTsKKyAgICAgICAgICAgIGZvciAoR0xpc3QqIGl0
ZXIgPSByZW1vdmVkSXRlbXM7IGl0ZXI7IGl0ZXIgPSBpdGVyLT5uZXh0KSB7CisgICAgICAgICAg
ICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX0JBQ0tfRk9SV0FSRF9MSVNUX0lURU0oaXRlci0+ZGF0
YSkpOworICAgICAgICAgICAgICAgIGlmICh0ZXN0LT5tX2V4cGVjdGVkUmVtb3ZlZEl0ZW1zKQor
ICAgICAgICAgICAgICAgICAgICBnX2Fzc2VydChnX2xpc3RfZmluZCh0ZXN0LT5tX2V4cGVjdGVk
UmVtb3ZlZEl0ZW1zLCBpdGVyLT5kYXRhKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICBnX2Fzc2VydCghcmVtb3ZlZEl0ZW1zKTsKKyAgICB9CisKKyAgICBC
YWNrRm9yd2FyZExpc3RUZXN0KCkKKyAgICAgICAgOiBtX2xpc3Qod2Via2l0X3dlYl92aWV3X2dl
dF9iYWNrX2ZvcndhcmRfbGlzdChtX3dlYlZpZXcpKQorICAgICAgICAsIG1fY2hhbmdlZEZsYWdz
KDApCisgICAgICAgICwgbV9oYXNDaGFuZ2VkKGZhbHNlKQorICAgICAgICAsIG1fZXhwZWN0ZWRS
ZW1vdmVkSXRlbXMoMCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9saXN0LCAi
Y2hhbmdlZCIsIEdfQ0FMTEJBQ0soYmFja0ZvcndhcmRMaXN0Q2hhbmdlZCksIHRoaXMpOworICAg
ICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKG1fbGlz
dCkpOworICAgIH0KKworICAgIH5CYWNrRm9yd2FyZExpc3RUZXN0KCkKKyAgICB7CisgICAgICAg
IGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX2xpc3QsIEdfU0lHTkFMX01B
VENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOworICAgIH0KKworICAgIHZvaWQgd2FpdFVudGls
TG9hZEZpbmlzaGVkKCkKKyAgICB7CisgICAgICAgIG1faGFzQ2hhbmdlZCA9IGZhbHNlOworICAg
ICAgICBXZWJWaWV3VGVzdDo6d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgICAgIGdfYXNz
ZXJ0KG1faGFzQ2hhbmdlZCk7CisgICAgfQorCisgICAgdm9pZCB3YWl0VW50aWxMb2FkRmluaXNo
ZWRBbmRDaGVja1JlbW92ZWRJdGVtcyhHTGlzdCogcmVtb3ZlZEl0ZW1zKQorICAgIHsKKyAgICAg
ICAgbV9leHBlY3RlZFJlbW92ZWRJdGVtcyA9IHJlbW92ZWRJdGVtczsKKyAgICAgICAgd2FpdFVu
dGlsTG9hZEZpbmlzaGVkKCk7CisgICAgICAgIG1fZXhwZWN0ZWRSZW1vdmVkSXRlbXMgPSAwOwor
ICAgIH0KKworICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdCogbV9saXN0OworICAgIHVuc2lnbmVk
IGxvbmcgbV9jaGFuZ2VkRmxhZ3M7CisgICAgYm9vbCBtX2hhc0NoYW5nZWQ7CisgICAgR0xpc3Qq
IG1fZXhwZWN0ZWRSZW1vdmVkSXRlbXM7Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0QmFja0Zvcndh
cmRMaXN0TmF2aWdhdGlvbihCYWNrRm9yd2FyZExpc3RUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVy
KQoreworICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW1zWzFdOworCisgICAgZ19h
c3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayh0ZXN0LT5tX3dlYlZpZXcpKTsKKyAg
ICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHRlc3QtPm1fd2ViVmll
dykpOworCisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0
X2xlbmd0aCh0ZXN0LT5tX2xpc3QpLCA9PSwgMCk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNr
X2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKHRlc3QtPm1fbGlzdCkpOworICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfaXRlbSh0ZXN0LT5tX2xpc3Qp
KTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2l0
ZW0odGVzdC0+bV9saXN0KSk7CisgICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tJdGVtSW5k
ZXgodGVzdC0+bV9saXN0KTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0
X2dldF9iYWNrX2xpc3QodGVzdC0+bV9saXN0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNr
X2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0KHRlc3QtPm1fbGlzdCkpOworCisgICAgQ1N0
cmluZyB1cmlQYWdlMSA9IGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9QYWdlMSIpOworICAgIHRl
c3QtPm1fY2hhbmdlZEZsYWdzID0gQmFja0ZvcndhcmRMaXN0VGVzdDo6Q3VycmVudEl0ZW0gfCBC
YWNrRm9yd2FyZExpc3RUZXN0OjpBZGRlZEl0ZW07CisgICAgdGVzdC0+bG9hZFVSSSh1cmlQYWdl
MS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgZ19h
c3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayh0ZXN0LT5tX3dlYlZpZXcpKTsKKyAg
ICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHRlc3QtPm1fd2ViVmll
dykpOworCisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0
X2xlbmd0aCh0ZXN0LT5tX2xpc3QpLCA9PSwgMSk7CisgICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0
SXRlbSogaXRlbVBhZ2UxID0gd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0
ZW0odGVzdC0+bV9saXN0KTsKKyAgICBCYWNrRm9yd2FyZExpc3RUZXN0OjpjaGVja0l0ZW0oaXRl
bVBhZ2UxLCAiUGFnZTEiLCB1cmlQYWdlMS5kYXRhKCksIHVyaVBhZ2UxLmRhdGEoKSk7CisgICAg
Z19hc3NlcnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19pdGVtKHRlc3QtPm1f
bGlzdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2Zvcndh
cmRfaXRlbSh0ZXN0LT5tX2xpc3QpKTsKKyAgICBCYWNrRm9yd2FyZExpc3RUZXN0OjpjaGVja0l0
ZW1JbmRleCh0ZXN0LT5tX2xpc3QpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJk
X2xpc3RfZ2V0X2JhY2tfbGlzdCh0ZXN0LT5tX2xpc3QpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0
X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xpc3QodGVzdC0+bV9saXN0KSk7CisKKyAg
ICBDU3RyaW5nIHVyaVBhZ2UyID0ga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL1BhZ2UyIik7Cisg
ICAgdGVzdC0+bV9jaGFuZ2VkRmxhZ3MgPSBCYWNrRm9yd2FyZExpc3RUZXN0OjpDdXJyZW50SXRl
bSB8IEJhY2tGb3J3YXJkTGlzdFRlc3Q6OkFkZGVkSXRlbTsKKyAgICB0ZXN0LT5sb2FkVVJJKHVy
aVBhZ2UyLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAg
ICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2sodGVzdC0+bV93ZWJWaWV3KSk7
CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh0ZXN0LT5tX3dl
YlZpZXcpKTsKKworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0
X2dldF9sZW5ndGgodGVzdC0+bV9saXN0KSwgPT0sIDIpOworICAgIFdlYktpdEJhY2tGb3J3YXJk
TGlzdEl0ZW0qIGl0ZW1QYWdlMiA9IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVu
dF9pdGVtKHRlc3QtPm1fbGlzdCk7CisgICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tJdGVt
KGl0ZW1QYWdlMiwgIlBhZ2UyIiwgdXJpUGFnZTIuZGF0YSgpLCB1cmlQYWdlMi5kYXRhKCkpOwor
ICAgIGdfYXNzZXJ0KHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19pdGVtKHRlc3Qt
Pm1fbGlzdCkgPT0gaXRlbVBhZ2UxKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2Fy
ZF9saXN0X2dldF9mb3J3YXJkX2l0ZW0odGVzdC0+bV9saXN0KSk7CisgICAgQmFja0ZvcndhcmRM
aXN0VGVzdDo6Y2hlY2tJdGVtSW5kZXgodGVzdC0+bV9saXN0KTsKKyAgICBpdGVtc1swXSA9IGl0
ZW1QYWdlMTsKKyAgICBCYWNrRm9yd2FyZExpc3RUZXN0OjpjaGVja0xpc3QodGVzdC0+bV9saXN0
LCBCYWNrRm9yd2FyZExpc3RUZXN0OjpCYWNrd2FyZCwgaXRlbXMsIDEpOworICAgIGdfYXNzZXJ0
KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlzdCh0ZXN0LT5tX2xpc3Qp
KTsKKworICAgIHRlc3QtPm1fY2hhbmdlZEZsYWdzID0gQmFja0ZvcndhcmRMaXN0VGVzdDo6Q3Vy
cmVudEl0ZW07CisgICAgdGVzdC0+Z29CYWNrKCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZp
bmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrKHRl
c3QtPm1fd2ViVmlldykpOworICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9y
d2FyZCh0ZXN0LT5tX3dlYlZpZXcpKTsKKworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2Jh
Y2tfZm9yd2FyZF9saXN0X2dldF9sZW5ndGgodGVzdC0+bV9saXN0KSwgPT0sIDIpOworICAgIGdf
YXNzZXJ0KGl0ZW1QYWdlMSA9PSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRf
aXRlbSh0ZXN0LT5tX2xpc3QpKTsKKyAgICBCYWNrRm9yd2FyZExpc3RUZXN0OjpjaGVja0l0ZW0o
d2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0odGVzdC0+bV9saXN0KSwg
IlBhZ2UxIiwgdXJpUGFnZTEuZGF0YSgpLCB1cmlQYWdlMS5kYXRhKCkpOworICAgIGdfYXNzZXJ0
KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfaXRlbSh0ZXN0LT5tX2xpc3QpKTsK
KyAgICBnX2Fzc2VydCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRlbSh0
ZXN0LT5tX2xpc3QpID09IGl0ZW1QYWdlMik7CisgICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hl
Y2tJdGVtSW5kZXgodGVzdC0+bV9saXN0KTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9y
d2FyZF9saXN0X2dldF9iYWNrX2xpc3QodGVzdC0+bV9saXN0KSk7CisgICAgaXRlbXNbMF0gPSBp
dGVtUGFnZTI7CisgICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tMaXN0KHRlc3QtPm1fbGlz
dCwgQmFja0ZvcndhcmRMaXN0VGVzdDo6Rm9yd2FyZCwgaXRlbXMsIDEpOworCisgICAgdGVzdC0+
bV9jaGFuZ2VkRmxhZ3MgPSBCYWNrRm9yd2FyZExpc3RUZXN0OjpDdXJyZW50SXRlbTsKKyAgICB0
ZXN0LT5nb0ZvcndhcmQoKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKwor
ICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayh0ZXN0LT5tX3dlYlZpZXcp
KTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHRlc3QtPm1f
d2ViVmlldykpOworCisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfYmFja19mb3J3YXJkX2xp
c3RfZ2V0X2xlbmd0aCh0ZXN0LT5tX2xpc3QpLCA9PSwgMik7CisgICAgZ19hc3NlcnQoaXRlbVBh
Z2UyID09IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKHRlc3QtPm1f
bGlzdCkpOworICAgIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OmNoZWNrSXRlbSh3ZWJraXRfYmFja19m
b3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh0ZXN0LT5tX2xpc3QpLCAiUGFnZTIiLCB1cmlQ
YWdlMi5kYXRhKCksIHVyaVBhZ2UyLmRhdGEoKSk7CisgICAgZ19hc3NlcnQod2Via2l0X2JhY2tf
Zm9yd2FyZF9saXN0X2dldF9iYWNrX2l0ZW0odGVzdC0+bV9saXN0KSA9PSBpdGVtUGFnZTEpOwor
ICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRlbSh0
ZXN0LT5tX2xpc3QpKTsKKyAgICBCYWNrRm9yd2FyZExpc3RUZXN0OjpjaGVja0l0ZW1JbmRleCh0
ZXN0LT5tX2xpc3QpOworICAgIGl0ZW1zWzBdID0gaXRlbVBhZ2UxOworICAgIEJhY2tGb3J3YXJk
TGlzdFRlc3Q6OmNoZWNrTGlzdCh0ZXN0LT5tX2xpc3QsIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OkJh
Y2t3YXJkLCBpdGVtcywgMSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlz
dF9nZXRfZm9yd2FyZF9saXN0KHRlc3QtPm1fbGlzdCkpOworCisgICAgdGVzdC0+bV9jaGFuZ2Vk
RmxhZ3MgPSBCYWNrRm9yd2FyZExpc3RUZXN0OjpDdXJyZW50SXRlbTsKKyAgICB0ZXN0LT5nb1Rv
QmFja0ZvcndhcmRMaXN0SXRlbShpdGVtUGFnZTEpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRG
aW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQoaXRlbVBhZ2UxID09IHdlYmtpdF9iYWNrX2Zvcndh
cmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKHRlc3QtPm1fbGlzdCkpOworfQorCitzdGF0aWMgdm9p
ZCB0ZXN0QmFja0ZvcndhcmRMaXN0TGltaXRBbmRDYWNoZShCYWNrRm9yd2FyZExpc3RUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwga0JhY2tGb3J3
YXJkTGlzdExpbWl0OyBpKyspIHsKKyAgICAgICAgR093blB0cjxjaGFyPiBwYXRoKGdfc3RyZHVw
X3ByaW50ZigiL1BhZ2UlZCIsIGkpKTsKKyAgICAgICAgdGVzdC0+bV9jaGFuZ2VkRmxhZ3MgPSBC
YWNrRm9yd2FyZExpc3RUZXN0OjpDdXJyZW50SXRlbSB8IEJhY2tGb3J3YXJkTGlzdFRlc3Q6OkFk
ZGVkSXRlbTsKKyAgICAgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKHBh
dGguZ2V0KCkpLmRhdGEoKSk7CisgICAgICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgp
OworICAgIH0KKworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0
X2dldF9sZW5ndGgodGVzdC0+bV9saXN0KSwgPT0sIGtCYWNrRm9yd2FyZExpc3RMaW1pdCk7Cisg
ICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSogaXRlbVBhZ2VGaXJzdCA9IHdlYmtpdF9iYWNr
X2ZvcndhcmRfbGlzdF9nZXRfbnRoX2l0ZW0odGVzdC0+bV9saXN0LCAtKGtCYWNrRm9yd2FyZExp
c3RMaW1pdCAtIDEpKTsKKyAgICBHT3duUHRyPEdMaXN0PiByZW1vdmVkSXRlbXMoZ19saXN0X3By
ZXBlbmQoMCwgaXRlbVBhZ2VGaXJzdCkpOworCisgICAgR093blB0cjxjaGFyPiBwYXRoKGdfc3Ry
ZHVwX3ByaW50ZigiL1BhZ2UlZCIsIGtCYWNrRm9yd2FyZExpc3RMaW1pdCkpOworICAgIHRlc3Qt
Pm1fY2hhbmdlZEZsYWdzID0gQmFja0ZvcndhcmRMaXN0VGVzdDo6Q3VycmVudEl0ZW0gfCBCYWNr
Rm9yd2FyZExpc3RUZXN0OjpBZGRlZEl0ZW0gfCBCYWNrRm9yd2FyZExpc3RUZXN0OjpSZW1vdmVk
SXRlbXM7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKHBhdGguZ2V0
KCkpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkQW5kQ2hlY2tSZW1v
dmVkSXRlbXMocmVtb3ZlZEl0ZW1zLmdldCgpKTsKKworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Vi
a2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9sZW5ndGgodGVzdC0+bV9saXN0KSwgPT0sIGtCYWNr
Rm9yd2FyZExpc3RMaW1pdCk7Cit9CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICBrU2VydmVy
ID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIoKTsKKyAgICBrU2VydmVyLT5ydW4oc2VydmVyQ2FsbGJh
Y2spOworCisgICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6YWRkKCJCYWNrRm9yd2FyZExpc3QiLCAi
bmF2aWdhdGlvbiIsIHRlc3RCYWNrRm9yd2FyZExpc3ROYXZpZ2F0aW9uKTsKKyAgICBCYWNrRm9y
d2FyZExpc3RUZXN0OjphZGQoIkJhY2tGb3J3YXJkTGlzdCIsICJsaXN0LWxpbWl0LWFuZC1jYWNo
ZSIsIHRlc3RCYWNrRm9yd2FyZExpc3RMaW1pdEFuZENhY2hlKTsKK30KKwordm9pZCBhZnRlckFs
bCgpCit7CisgICAgZGVsZXRlIGtTZXJ2ZXI7Cit9CisKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0Q29udGV4dE1lbnUuY3BwIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RDb250ZXh0TWVudS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIzMjliOQotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0Q29udGV4dE1lbnUuY3BwCkBA
IC0wLDAgKzEsODY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKKyNpbmNsdWRlIDx3
dGYvZ29iamVjdC9HUmVmUHRyLmg+CisKK2NsYXNzIENvbnRleHRNZW51VGVzdDogcHVibGljIFdl
YlZpZXdUZXN0IHsKK3B1YmxpYzoKKyAgICBlbnVtIENvbnRleHRNZW51SXRlbVN0YXRlRmxhZ3Mg
eworICAgICAgICBWaXNpYmxlID0gMSA8PCAwLAorICAgICAgICBFbmFibGVkID0gMSA8PCAxLAor
ICAgICAgICBDaGVja2VkID0gMSA8PCAyCisgICAgfTsKKworICAgIHZvaWQgY2hlY2tDb250ZXh0
TWVudUV2ZW50KEdka0V2ZW50KiBldmVudCkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KGV2ZW50
KTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGV2ZW50LT50eXBlLCA9PSwgR0RLX0JVVFRPTl9Q
UkVTUyk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChldmVudC0+YnV0dG9uLmJ1dHRvbiwgPT0s
IDMpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnQtPmJ1dHRvbi54LCA9PSwgbV9tZW51
UG9zaXRpb25YKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGV2ZW50LT5idXR0b24ueSwgPT0s
IG1fbWVudVBvc2l0aW9uWSk7CisgICAgfQorCisgICAgc3RhdGljIGdib29sZWFuIGNvbnRleHRN
ZW51Q2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0Q29udGV4dE1lbnUqIGNv
bnRleHRNZW51LCBHZGtFdmVudCogZXZlbnQsIFdlYktpdEhpdFRlc3RSZXN1bHQqIGhpdFRlc3RS
ZXN1bHQsIENvbnRleHRNZW51VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KFdF
QktJVF9JU19DT05URVhUX01FTlUoY29udGV4dE1lbnUpKTsKKyAgICAgICAgdGVzdC0+YXNzZXJ0
T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChjb250ZXh0TWVudSkpOwor
ICAgICAgICB0ZXN0LT5jaGVja0NvbnRleHRNZW51RXZlbnQoZXZlbnQpOworICAgICAgICBnX2Fz
c2VydChXRUJLSVRfSVNfSElUX1RFU1RfUkVTVUxUKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAg
dGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChoaXRU
ZXN0UmVzdWx0KSk7CisKKyAgICAgICAgcmV0dXJuIHRlc3QtPmNvbnRleHRNZW51KGNvbnRleHRN
ZW51LCBldmVudCwgaGl0VGVzdFJlc3VsdCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgY29u
dGV4dE1lbnVEaXNtaXNzZWRDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiwgQ29udGV4dE1lbnVUZXN0
KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+Y29udGV4dE1lbnVEaXNtaXNzZWQoKTsKKyAg
ICB9CisKKyAgICBDb250ZXh0TWVudVRlc3QoKQorICAgICAgICA6IG1fbWVudVBvc2l0aW9uWCgw
KQorICAgICAgICAsIG1fbWVudVBvc2l0aW9uWSgwKQorICAgIHsKKyAgICAgICAgZ19zaWduYWxf
Y29ubmVjdChtX3dlYlZpZXcsICJjb250ZXh0LW1lbnUiLCBHX0NBTExCQUNLKGNvbnRleHRNZW51
Q2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJj
b250ZXh0LW1lbnUtZGlzbWlzc2VkIiwgR19DQUxMQkFDSyhjb250ZXh0TWVudURpc21pc3NlZENh
bGxiYWNrKSwgdGhpcyk7CisgICAgfQorCisgICAgfkNvbnRleHRNZW51VGVzdCgpCisgICAgewor
ICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV93ZWJWaWV3LCBH
X1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIGJvb2wgY29udGV4dE1lbnUoV2ViS2l0Q29udGV4dE1lbnUqLCBHZGtFdmVudCosIFdlYktp
dEhpdFRlc3RSZXN1bHQqKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgY29udGV4dE1lbnVEaXNt
aXNzZWQoKQorICAgIHsKKyAgICAgICAgcXVpdE1haW5Mb29wKCk7CisgICAgfQorCisgICAgR3Rr
TWVudSogZ2V0UG9wdXBNZW51KCkKKyAgICB7CisgICAgICAgIEdPd25QdHI8R0xpc3Q+IHRvcGxl
dmVscyhndGtfd2luZG93X2xpc3RfdG9wbGV2ZWxzKCkpOworICAgICAgICBmb3IgKEdMaXN0KiBp
dGVyID0gdG9wbGV2ZWxzLmdldCgpOyBpdGVyOyBpdGVyID0gZ19saXN0X25leHQoaXRlcikpIHsK
KyAgICAgICAgICAgIGlmICghR1RLX0lTX1dJTkRPVyhpdGVyLT5kYXRhKSkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgR3RrV2lkZ2V0KiBjaGlsZCA9IGd0a19iaW5f
Z2V0X2NoaWxkKEdUS19CSU4oaXRlci0+ZGF0YSkpOworICAgICAgICAgICAgaWYgKCFHVEtfSVNf
TUVOVShjaGlsZCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlm
IChndGtfbWVudV9nZXRfYXR0YWNoX3dpZGdldChHVEtfTUVOVShjaGlsZCkpID09IEdUS19XSURH
RVQobV93ZWJWaWV3KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR1RLX01FTlUoY2hpbGQpOwor
ICAgICAgICB9CisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KKworICAgIGJvb2wgc2hvdWxkU2hvd0lucHV0TWV0aG9kc01lbnUoKQorICAg
IHsKKyAgICAgICAgR3RrU2V0dGluZ3MqIHNldHRpbmdzID0gZ3RrX3dpZGdldF9nZXRfc2V0dGlu
Z3MoR1RLX1dJREdFVChtX3dlYlZpZXcpKTsKKyAgICAgICAgaWYgKCFzZXR0aW5ncykKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIGdib29sZWFuIHNob3dJbnB1dE1ldGhvZE1l
bnU7CisgICAgICAgIGdfb2JqZWN0X2dldChzZXR0aW5ncywgImd0ay1zaG93LWlucHV0LW1ldGhv
ZC1tZW51IiwgJnNob3dJbnB1dE1ldGhvZE1lbnUsIE5VTEwpOworICAgICAgICByZXR1cm4gc2hv
d0lucHV0TWV0aG9kTWVudTsKKyAgICB9CisKKyAgICB2b2lkIGNoZWNrQWN0aW9uU3RhdGUoR3Rr
QWN0aW9uKiBhY3Rpb24sIHVuc2lnbmVkIHN0YXRlKQorICAgIHsKKyAgICAgICAgaWYgKHN0YXRl
ICYgVmlzaWJsZSkKKyAgICAgICAgICAgIGdfYXNzZXJ0KGd0a19hY3Rpb25fZ2V0X3Zpc2libGUo
YWN0aW9uKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdfYXNzZXJ0KCFndGtfYWN0aW9u
X2dldF92aXNpYmxlKGFjdGlvbikpOworCisgICAgICAgIGlmIChzdGF0ZSAmIEVuYWJsZWQpCisg
ICAgICAgICAgICBnX2Fzc2VydChndGtfYWN0aW9uX2dldF9zZW5zaXRpdmUoYWN0aW9uKSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdfYXNzZXJ0KCFndGtfYWN0aW9uX2dldF9zZW5zaXRp
dmUoYWN0aW9uKSk7CisKKyAgICAgICAgaWYgKEdUS19JU19UT0dHTEVfQUNUSU9OKGFjdGlvbikp
IHsKKyAgICAgICAgICAgIGlmIChzdGF0ZSAmIENoZWNrZWQpCisgICAgICAgICAgICAgICAgZ19h
c3NlcnQoZ3RrX3RvZ2dsZV9hY3Rpb25fZ2V0X2FjdGl2ZShHVEtfVE9HR0xFX0FDVElPTihhY3Rp
b24pKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZ19hc3NlcnQoIWd0a190
b2dnbGVfYWN0aW9uX2dldF9hY3RpdmUoR1RLX1RPR0dMRV9BQ1RJT04oYWN0aW9uKSkpOworICAg
ICAgICB9CisgICAgfQorCisgICAgR0xpc3QqIGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9u
QW5kR2V0TmV4dChHTGlzdCogaXRlbXMsIFdlYktpdENvbnRleHRNZW51QWN0aW9uIHN0b2NrQWN0
aW9uLCB1bnNpZ25lZCBzdGF0ZSkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KGl0ZW1zKTsKKyAg
ICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX0NPTlRFWFRfTUVOVV9JVEVNKGl0ZW1zLT5kYXRhKSk7
CisKKyAgICAgICAgV2ViS2l0Q29udGV4dE1lbnVJdGVtKiBpdGVtID0gV0VCS0lUX0NPTlRFWFRf
TUVOVV9JVEVNKGl0ZW1zLT5kYXRhKTsKKyAgICAgICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hl
blRlc3RGaW5pc2hlcyhHX09CSkVDVChpdGVtKSk7CisKKyAgICAgICAgR3RrQWN0aW9uKiBhY3Rp
b24gPSB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X2FjdGlvbihpdGVtKTsKKyAgICAgICAg
Z19hc3NlcnQoR1RLX0lTX0FDVElPTihhY3Rpb24pKTsKKworICAgICAgICBnX2Fzc2VydF9jbXBp
bnQod2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9zdG9ja19hY3Rpb24oaXRlbSksID09LCBz
dG9ja0FjdGlvbik7CisKKyAgICAgICAgY2hlY2tBY3Rpb25TdGF0ZShhY3Rpb24sIHN0YXRlKTsK
KworICAgICAgICByZXR1cm4gZ19saXN0X25leHQoaXRlbXMpOworICAgIH0KKworICAgIEdMaXN0
KiBjaGVja0N1cnJlbnRJdGVtSXNDdXN0b21BY3Rpb25BbmRHZXROZXh0KEdMaXN0KiBpdGVtcywg
Y29uc3QgY2hhciogbGFiZWwsIHVuc2lnbmVkIHN0YXRlKQorICAgIHsKKyAgICAgICAgZ19hc3Nl
cnQoaXRlbXMpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfQ09OVEVYVF9NRU5VX0lURU0o
aXRlbXMtPmRhdGEpKTsKKworICAgICAgICBXZWJLaXRDb250ZXh0TWVudUl0ZW0qIGl0ZW0gPSBX
RUJLSVRfQ09OVEVYVF9NRU5VX0lURU0oaXRlbXMtPmRhdGEpOworICAgICAgICBhc3NlcnRPYmpl
Y3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKGl0ZW0pKTsKKworICAgICAgICBH
dGtBY3Rpb24qIGFjdGlvbiA9IHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRfYWN0aW9uKGl0
ZW0pOworICAgICAgICBnX2Fzc2VydChHVEtfSVNfQUNUSU9OKGFjdGlvbikpOworCisgICAgICAg
IGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X3N0b2NrX2FjdGlv
bihpdGVtKSwgPT0sIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NVU1RPTSk7CisgICAgICAg
IGdfYXNzZXJ0X2NtcHN0cihndGtfYWN0aW9uX2dldF9sYWJlbChhY3Rpb24pLCA9PSwgbGFiZWwp
OworCisgICAgICAgIGNoZWNrQWN0aW9uU3RhdGUoYWN0aW9uLCBzdGF0ZSk7CisKKyAgICAgICAg
cmV0dXJuIGdfbGlzdF9uZXh0KGl0ZW1zKTsKKyAgICB9CisKKyAgICBHTGlzdCogY2hlY2tDdXJy
ZW50SXRlbUlzU3ViTWVudUFuZEdldE5leHQoR0xpc3QqIGl0ZW1zLCBjb25zdCBjaGFyKiBsYWJl
bCwgdW5zaWduZWQgc3RhdGUsIEdMaXN0Kiogc3ViTWVudUl0ZXIpCisgICAgeworICAgICAgICBn
X2Fzc2VydChpdGVtcyk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19DT05URVhUX01FTlVf
SVRFTShpdGVtcy0+ZGF0YSkpOworCisgICAgICAgIFdlYktpdENvbnRleHRNZW51SXRlbSogaXRl
bSA9IFdFQktJVF9DT05URVhUX01FTlVfSVRFTShpdGVtcy0+ZGF0YSk7CisgICAgICAgIGFzc2Vy
dE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QoaXRlbSkpOworCisgICAg
ICAgIEd0a0FjdGlvbiogYWN0aW9uID0gd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9hY3Rp
b24oaXRlbSk7CisgICAgICAgIGdfYXNzZXJ0KEdUS19JU19BQ1RJT04oYWN0aW9uKSk7CisKKyAg
ICAgICAgZ19hc3NlcnRfY21wc3RyKGd0a19hY3Rpb25fZ2V0X2xhYmVsKGFjdGlvbiksID09LCBs
YWJlbCk7CisgICAgICAgIGNoZWNrQWN0aW9uU3RhdGUoYWN0aW9uLCBzdGF0ZSk7CisKKyAgICAg
ICAgV2ViS2l0Q29udGV4dE1lbnUqIHN1Yk1lbnUgPSB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1f
Z2V0X3N1Ym1lbnUoaXRlbSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19DT05URVhUX01F
TlUoc3ViTWVudSkpOworICAgICAgICBpZiAoc3ViTWVudUl0ZXIpCisgICAgICAgICAgICAqc3Vi
TWVudUl0ZXIgPSB3ZWJraXRfY29udGV4dF9tZW51X2dldF9pdGVtcyhzdWJNZW51KTsKKworICAg
ICAgICByZXR1cm4gZ19saXN0X25leHQoaXRlbXMpOworICAgIH0KKworICAgIEdMaXN0KiBjaGVj
a0N1cnJlbnRJdGVtSXNTZXBhcmF0b3JBbmRHZXROZXh0KEdMaXN0KiBpdGVtcykKKyAgICB7Cisg
ICAgICAgIGdfYXNzZXJ0KGl0ZW1zKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX0NPTlRF
WFRfTUVOVV9JVEVNKGl0ZW1zLT5kYXRhKSk7CisKKyAgICAgICAgV2ViS2l0Q29udGV4dE1lbnVJ
dGVtKiBpdGVtID0gV0VCS0lUX0NPTlRFWFRfTUVOVV9JVEVNKGl0ZW1zLT5kYXRhKTsKKyAgICAg
ICAgZ19hc3NlcnQod2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2lzX3NlcGFyYXRvcihpdGVtKSk7
CisKKyAgICAgICAgcmV0dXJuIGdfbGlzdF9uZXh0KGl0ZW1zKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgZ2Jvb2xlYW4gZG9SaWdodENsaWNrSWRsZUNhbGxiYWNrKENvbnRleHRNZW51VGVzdCogdGVz
dCkKKyAgICB7CisgICAgICAgIHRlc3QtPmNsaWNrTW91c2VCdXR0b24odGVzdC0+bV9tZW51UG9z
aXRpb25YLCB0ZXN0LT5tX21lbnVQb3NpdGlvblksIDMpOworICAgICAgICByZXR1cm4gRkFMU0U7
CisgICAgfQorCisgICAgdm9pZCBzaG93Q29udGV4dE1lbnVBdFBvc2l0aW9uQW5kV2FpdFVudGls
RmluaXNoZWQoaW50IHgsIGludCB5KQorICAgIHsKKyAgICAgICAgbV9tZW51UG9zaXRpb25YID0g
eDsKKyAgICAgICAgbV9tZW51UG9zaXRpb25ZID0geTsKKyAgICAgICAgZ19pZGxlX2FkZChyZWlu
dGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihkb1JpZ2h0Q2xpY2tJZGxlQ2FsbGJhY2spLCB0aGlz
KTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIHZv
aWQgc2hvd0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmluaXNoZWQoKQorICAgIHsKKyAgICAgICAg
c2hvd0NvbnRleHRNZW51QXRQb3NpdGlvbkFuZFdhaXRVbnRpbEZpbmlzaGVkKDAsIDApOworICAg
IH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBzaW11bGF0ZUVzY0tleUlkbGVDYWxsYmFjayhDb250
ZXh0TWVudVRlc3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT5rZXlTdHJva2UoR0RLX0tF
WV9Fc2NhcGUpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgdm9pZCBkaXNt
aXNzQ29udGV4dE1lbnVBbmRXYWl0VW50aWxGaW5pc2hlZCgpCisgICAgeworICAgICAgICBnX2lk
bGVfYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHNpbXVsYXRlRXNjS2V5SWRsZUNh
bGxiYWNrKSwgdGhpcyk7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAg
ICB9CisKKyAgICBkb3VibGUgbV9tZW51UG9zaXRpb25YOworICAgIGRvdWJsZSBtX21lbnVQb3Np
dGlvblk7Cit9OworCitjbGFzcyBDb250ZXh0TWVudURlZmF1bHRUZXN0OiBwdWJsaWMgQ29udGV4
dE1lbnVUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKENvbnRleHRN
ZW51RGVmYXVsdFRlc3QpOworCisgICAgZW51bSBEZWZhdWx0TWVudVR5cGUgeworICAgICAgICBO
YXZpZ2F0aW9uLAorICAgICAgICBMaW5rLAorICAgICAgICBJbWFnZSwKKyAgICAgICAgTGlua0lt
YWdlLAorICAgICAgICBWaWRlbywKKyAgICAgICAgQXVkaW8sCisgICAgICAgIEVkaXRhYmxlCisg
ICAgfTsKKworICAgIENvbnRleHRNZW51RGVmYXVsdFRlc3QoKQorICAgICAgICA6IG1fZXhwZWN0
ZWRNZW51VHlwZShOYXZpZ2F0aW9uKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGNvbnRleHRN
ZW51KFdlYktpdENvbnRleHRNZW51KiBjb250ZXh0TWVudSwgR2RrRXZlbnQqIGV2ZW50LCBXZWJL
aXRIaXRUZXN0UmVzdWx0KiBoaXRUZXN0UmVzdWx0KQorICAgIHsKKyAgICAgICAgR0xpc3QqIGl0
ZXIgPSB3ZWJraXRfY29udGV4dF9tZW51X2dldF9pdGVtcyhjb250ZXh0TWVudSk7CisKKyAgICAg
ICAgc3dpdGNoIChtX2V4cGVjdGVkTWVudVR5cGUpIHsKKyAgICAgICAgY2FzZSBOYXZpZ2F0aW9u
OgorICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9p
c19saW5rKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0
X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkpOworICAgICAgICAg
ICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYShoaXRU
ZXN0UmVzdWx0KSk7CisgICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3Vs
dF9jb250ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGl0ZXIg
PSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NP
TlRFWFRfTUVOVV9BQ1RJT05fR09fQkFDSywgVmlzaWJsZSk7CisgICAgICAgICAgICBpdGVyID0g
Y2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05U
RVhUX01FTlVfQUNUSU9OX0dPX0ZPUldBUkQsIFZpc2libGUpOworICAgICAgICAgICAgaXRlciA9
IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09O
VEVYVF9NRU5VX0FDVElPTl9TVE9QLCBWaXNpYmxlKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVj
a0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRf
TUVOVV9BQ1RJT05fUkVMT0FELCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBMaW5rOgorICAgICAgICAgICAgZ19hc3NlcnQod2Via2l0X2hpdF90
ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xpbmsoaGl0VGVzdFJlc3VsdCkpOworICAgICAgICAgICAg
Z19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFnZShoaXRUZXN0
UmVzdWx0KSk7CisgICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9j
b250ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3
ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkp
OworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0
TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0xJTkssIFZpc2libGUg
fCBFbmFibGVkKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0Fj
dGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9MSU5L
X0lOX05FV19XSU5ET1csIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGl0ZXIgPSBj
aGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fRE9XTkxPQURfTElOS19UT19ESVNLLCBWaXNpYmxlIHwgRW5hYmxlZCk7
CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXRO
ZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFlfTElOS19UT19DTElQQk9B
UkQsIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEltYWdlOgorICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29u
dGV4dF9pc19saW5rKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtp
dF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0KSk7CisgICAg
ICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlh
KGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3Rf
cmVzdWx0X2NvbnRleHRfaXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkpOworICAgICAgICAgICAg
aXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0lNQUdFX0lOX05FV19XSU5ET1csIFZpc2libGUg
fCBFbmFibGVkKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0Fj
dGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRE9XTkxPQURf
SU1BR0VfVE9fRElTSywgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICAgICAgaXRlciA9IGNo
ZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVY
VF9NRU5VX0FDVElPTl9DT1BZX0lNQUdFX1RPX0NMSVBCT0FSRCwgVmlzaWJsZSB8IEVuYWJsZWQp
OworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0
TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX0lNQUdFX1VSTF9UT19D
TElQQk9BUkQsIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIExpbmtJbWFnZToKKyAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9y
ZXN1bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGdfYXNz
ZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0
KSk7CisgICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0
X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRf
aGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkpOworICAg
ICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChp
dGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0xJTkssIFZpc2libGUgfCBFbmFi
bGVkKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFu
ZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9MSU5LX0lOX05F
V19XSU5ET1csIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1
cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVO
VV9BQ1RJT05fRE9XTkxPQURfTElOS19UT19ESVNLLCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAg
ICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0
ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFlfTElOS19UT19DTElQQk9BUkQsIFZp
c2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNT
ZXBhcmF0b3JBbmRHZXROZXh0KGl0ZXIpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVu
dEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FD
VElPTl9PUEVOX0lNQUdFX0lOX05FV19XSU5ET1csIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAg
ICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRl
ciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRE9XTkxPQURfSU1BR0VfVE9fRElTSywgVmlz
aWJsZSB8IEVuYWJsZWQpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0
b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZ
X0lNQUdFX1RPX0NMSVBCT0FSRCwgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICAgICAgaXRl
ciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRf
Q09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX0lNQUdFX1VSTF9UT19DTElQQk9BUkQsIFZpc2libGUg
fCBFbmFibGVkKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZpZGVvOgorICAg
ICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5r
KGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3Rf
cmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkpOworICAgICAgICAgICAgZ19h
c3NlcnQod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1
bHQpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRl
eHRfaXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkpOworICAgICAgICAgICAgaXRlciA9IGNoZWNr
Q3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9N
RU5VX0FDVElPTl9NRURJQV9QTEFZLCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBp
dGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJ
VF9DT05URVhUX01FTlVfQUNUSU9OX01FRElBX01VVEUsIFZpc2libGUpOworICAgICAgICAgICAg
aXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9UT0dHTEVfTUVESUFfQ09OVFJPTFMsIFZpc2libGUgfCBF
bmFibGVkIHwgQ2hlY2tlZCk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlz
U3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1RP
R0dMRV9NRURJQV9MT09QLCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBpdGVyID0g
Y2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05U
RVhUX01FTlVfQUNUSU9OX0VOVEVSX1ZJREVPX0ZVTExTQ1JFRU4sIFZpc2libGUgfCBFbmFibGVk
KTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTZXBhcmF0b3JBbmRHZXRO
ZXh0KGl0ZXIpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0
aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX1ZJREVP
X0xJTktfVE9fQ0xJUEJPQVJELCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBpdGVy
ID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9D
T05URVhUX01FTlVfQUNUSU9OX09QRU5fVklERU9fSU5fTkVXX1dJTkRPVywgVmlzaWJsZSB8IEVu
YWJsZWQpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9u
QW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9ET1dOTE9BRF9WSURF
T19UT19ESVNLLCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBBdWRpbzoKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVz
dWx0X2NvbnRleHRfaXNfbGluayhoaXRUZXN0UmVzdWx0KSk7CisgICAgICAgICAgICBnX2Fzc2Vy
dCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQp
KTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9p
c19tZWRpYShoaXRUZXN0UmVzdWx0KSk7CisgICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hp
dF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAg
ICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRl
ciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fTUVESUFfUExBWSwgVmlzaWJsZSB8IEVuYWJs
ZWQpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5k
R2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9NRURJQV9NVVRFLCBWaXNp
YmxlKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFu
ZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fVE9HR0xFX01FRElBX0NP
TlRST0xTLCBWaXNpYmxlIHwgRW5hYmxlZCB8IENoZWNrZWQpOworICAgICAgICAgICAgaXRlciA9
IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09O
VEVYVF9NRU5VX0FDVElPTl9UT0dHTEVfTUVESUFfTE9PUCwgVmlzaWJsZSB8IEVuYWJsZWQpOwor
ICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4
dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9FTlRFUl9WSURFT19GVUxMU0NSRUVO
LCBWaXNpYmxlKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTZXBhcmF0
b3JBbmRHZXROZXh0KGl0ZXIpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1J
c1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9D
T1BZX0FVRElPX0xJTktfVE9fQ0xJUEJPQVJELCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAg
ICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIs
IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5fQVVESU9fSU5fTkVXX1dJTkRPVywgVmlz
aWJsZSB8IEVuYWJsZWQpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0
b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9ET1dO
TE9BRF9BVURJT19UT19ESVNLLCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBFZGl0YWJsZToKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRf
aGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluayhoaXRUZXN0UmVzdWx0KSk7CisgICAgICAg
ICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdlKGhp
dFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVz
dWx0X2NvbnRleHRfaXNfbWVkaWEoaGl0VGVzdFJlc3VsdCkpOworICAgICAgICAgICAgZ19hc3Nl
cnQod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1
bHQpKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFu
ZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ1VULCBWaXNpYmxlKTsK
KyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5l
eHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWSwgVmlzaWJsZSk7CisgICAg
ICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0
ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1BBU1RFLCBWaXNpYmxlIHwgRW5hYmxlZCk7
CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXRO
ZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0RFTEVURSwgVmlzaWJsZSk7Cisg
ICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU2VwYXJhdG9yQW5kR2V0TmV4dChp
dGVyKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFu
ZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fU0VMRUNUX0FMTCwgVmlz
aWJsZSB8IEVuYWJsZWQpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1Nl
cGFyYXRvckFuZEdldE5leHQoaXRlcik7CisgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd0lucHV0
TWV0aG9kc01lbnUoKSkKKyAgICAgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlz
U3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0lO
UFVUX01FVEhPRFMsIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVj
a0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRf
TUVOVV9BQ1RJT05fVU5JQ09ERSwgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2Rl
dmVsb3Blcl9leHRyYXMod2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyhtX3dlYlZpZXcpKSkg
eworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1NlcGFyYXRvckFuZEdldE5l
eHQoaXRlcik7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rp
b25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0lOU1BFQ1RfRUxF
TUVOVCwgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICB9CisgICAgICAgIGdfYXNzZXJ0KCFp
dGVyKTsKKworICAgICAgICBxdWl0TWFpbkxvb3AoKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICBEZWZhdWx0TWVudVR5cGUgbV9leHBlY3RlZE1lbnVUeXBlOworfTsKKwor
c3RhdGljIHZvaWQgdGVzdENvbnRleHRNZW51RGVmYXVsdE1lbnUoQ29udGV4dE1lbnVEZWZhdWx0
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRX
YWl0VW50aWxNYXBwZWQoKTsKKworICAgIGNvbnN0IGNoYXIqIGxpbmtzSFRNTCA9CisgICAgICAg
ICI8aHRtbD48Ym9keT4iCisgICAgICAgICIgPGEgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBs
ZWZ0OjE7IHRvcDoxJyBocmVmPSdodHRwOi8vd3d3LndlYmtpdGd0ay5vcmcnIHRpdGxlPSdXZWJL
aXRHVEsrIFRpdGxlJz5XZWJLaXRHVEsrIFdlYnNpdGU8L2E+IgorICAgICAgICAiIDxpbWcgc3R5
bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRvcDoxMCcgc3JjPScweGRlYWRiZWVmJyB3
aWR0aD01IGhlaWdodD01PjwvaW1nPiIKKyAgICAgICAgIiA8YSBzdHlsZT0ncG9zaXRpb246YWJz
b2x1dGU7IGxlZnQ6MTsgdG9wOjIwJyBocmVmPSdodHRwOi8vd3d3LndlYmtpdGd0ay5vcmcvbG9n
bycgdGl0bGU9J1dlYktpdEdUSysgTG9nbyc+PGltZyBzcmM9JzB4ZGVhZGJlZWYnIHdpZHRoPTUg
aGVpZ2h0PTU+PC9pbWc+PC9hPiIKKyAgICAgICAgIiA8aW5wdXQgc3R5bGU9J3Bvc2l0aW9uOmFi
c29sdXRlOyBsZWZ0OjE7IHRvcDozMCcgc2l6ZT0nMTAnPjwvaW5wdXQ+IgorICAgICAgICAiIDx2
aWRlbyBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjUwJyB3aWR0aD0nMzAw
JyBoZWlnaHQ9JzMwMCcgY29udHJvbHM9J2NvbnRyb2xzJyBwcmVsb2FkPSdub25lJz48c291cmNl
IHNyYz0nbW92aWUub2dnJyB0eXBlPSd2aWRlby9vZ2cnIC8+PC92aWRlbz4iCisgICAgICAgICIg
PGF1ZGlvIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6NjAnIHdpZHRoPSc1
MCcgaGVpZ2h0PScyMCcgY29udHJvbHM9J2NvbnRyb2xzJyBwcmVsb2FkPSdub25lJz48c291cmNl
IHNyYz0ndHJhY2subXAzJyB0eXBlPSdhdWRpby9tcDMnIC8+PC9hdWRpbz4iCisgICAgICAgICI8
L2JvZHk+PC9odG1sPiI7CisgICAgdGVzdC0+bG9hZEh0bWwobGlua3NIVE1MLCAiZmlsZTovLy8i
KTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIC8vIENvbnRleHQg
bWVudSBmb3IgZG9jdW1lbnQuCisgICAgdGVzdC0+bV9leHBlY3RlZE1lbnVUeXBlID0gQ29udGV4
dE1lbnVEZWZhdWx0VGVzdDo6TmF2aWdhdGlvbjsKKyAgICB0ZXN0LT5zaG93Q29udGV4dE1lbnVB
dFBvc2l0aW9uQW5kV2FpdFVudGlsRmluaXNoZWQoMCwgMCk7CisKKyAgICAvLyBDb250ZXh0IG1l
bnUgZm9yIGxpbmsuCisgICAgdGVzdC0+bV9leHBlY3RlZE1lbnVUeXBlID0gQ29udGV4dE1lbnVE
ZWZhdWx0VGVzdDo6TGluazsKKyAgICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBdFBvc2l0aW9uQW5k
V2FpdFVudGlsRmluaXNoZWQoMSwgMSk7CisKKyAgICAvLyBDb250ZXh0IG1lbnUgZm9yIGltYWdl
LgorICAgIHRlc3QtPm1fZXhwZWN0ZWRNZW51VHlwZSA9IENvbnRleHRNZW51RGVmYXVsdFRlc3Q6
OkltYWdlOworICAgIHRlc3QtPnNob3dDb250ZXh0TWVudUF0UG9zaXRpb25BbmRXYWl0VW50aWxG
aW5pc2hlZCgxLCAxMCk7CisKKyAgICAvLyBFbmFibGUgZGV2ZWxvcGVyIGV4dHJhcyBub3csIHNv
IHRoYXQgaW5zcGVjdG9yIGVsZW1lbnQKKyAgICAvLyB3aWxsIGJlIHNob3duIGluIHRoZSBkZWZh
dWx0IGNvbnRleHQgbWVudS4KKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9kZXZlbG9w
ZXJfZXh0cmFzKHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3ModGVzdC0+bV93ZWJWaWV3KSwg
VFJVRSk7CisKKyAgICAvLyBDb250ZXh0IG1lbnUgZm9yIGltYWdlIGxpbmsuCisgICAgdGVzdC0+
bV9leHBlY3RlZE1lbnVUeXBlID0gQ29udGV4dE1lbnVEZWZhdWx0VGVzdDo6TGlua0ltYWdlOwor
ICAgIHRlc3QtPnNob3dDb250ZXh0TWVudUF0UG9zaXRpb25BbmRXYWl0VW50aWxGaW5pc2hlZCgx
LCAyMCk7CisKKyAgICAvLyBDb250ZXh0IG1lbnUgZm9yIHZpZGVvLgorICAgIHRlc3QtPm1fZXhw
ZWN0ZWRNZW51VHlwZSA9IENvbnRleHRNZW51RGVmYXVsdFRlc3Q6OlZpZGVvOworICAgIHRlc3Qt
PnNob3dDb250ZXh0TWVudUF0UG9zaXRpb25BbmRXYWl0VW50aWxGaW5pc2hlZCgxLCA1MCk7CisK
KyAgICAvLyBDb250ZXh0IG1lbnUgZm9yIGF1ZGlvLgorICAgIHRlc3QtPm1fZXhwZWN0ZWRNZW51
VHlwZSA9IENvbnRleHRNZW51RGVmYXVsdFRlc3Q6OkF1ZGlvOworICAgIHRlc3QtPnNob3dDb250
ZXh0TWVudUF0UG9zaXRpb25BbmRXYWl0VW50aWxGaW5pc2hlZCgxLCA2MCk7CisKKyAgICAvLyBD
b250ZXh0IG1lbnUgZm9yIGVkaXRhYmxlLgorICAgIHRlc3QtPm1fZXhwZWN0ZWRNZW51VHlwZSA9
IENvbnRleHRNZW51RGVmYXVsdFRlc3Q6OkVkaXRhYmxlOworICAgIHRlc3QtPnNob3dDb250ZXh0
TWVudUF0UG9zaXRpb25BbmRXYWl0VW50aWxGaW5pc2hlZCg1LCAzNSk7Cit9CisKK2NsYXNzIENv
bnRleHRNZW51Q3VzdG9tVGVzdDogcHVibGljIENvbnRleHRNZW51VGVzdCB7CitwdWJsaWM6Cisg
ICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShDb250ZXh0TWVudUN1c3RvbVRlc3QpOworCisgICAg
Q29udGV4dE1lbnVDdXN0b21UZXN0KCkKKyAgICAgICAgOiBtX2l0ZW1Ub0FjdGl2YXRlTGFiZWwo
MCkKKyAgICAgICAgLCBtX2FjdGl2YXRlZChmYWxzZSkKKyAgICAgICAgLCBtX3RvZ2dsZWQoZmFs
c2UpCisgICAgeworICAgIH0KKworICAgIGJvb2wgY29udGV4dE1lbnUoV2ViS2l0Q29udGV4dE1l
bnUqIGNvbnRleHRNZW51LCBHZGtFdmVudCosIFdlYktpdEhpdFRlc3RSZXN1bHQqIGhpdFRlc3RS
ZXN1bHQpCisgICAgeworICAgICAgICAvLyBBcHBlbmQgb3VyIGN1c3RvbSBpdGVtIHRvIHRoZSBk
ZWZhdWx0IG1lbnUuCisgICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRN
ZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3KG1fYWN0aW9uLmdldCgpKSk7CisgICAg
ICAgIHF1aXRNYWluTG9vcCgpOworCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBHdGtNZW51SXRlbSogZ2V0TWVudUl0ZW0oR3RrTWVudSogbWVudSwgY29uc3QgZ2NoYXIqIGl0
ZW1MYWJlbCkKKyAgICB7CisgICAgICAgIEdPd25QdHI8R0xpc3Q+IGl0ZW1zKGd0a19jb250YWlu
ZXJfZ2V0X2NoaWxkcmVuKEdUS19DT05UQUlORVIobWVudSkpKTsKKyAgICAgICAgZm9yIChHTGlz
dCogaXRlciA9IGl0ZW1zLmdldCgpOyBpdGVyOyBpdGVyID0gZ19saXN0X25leHQoaXRlcikpIHsK
KyAgICAgICAgICAgIEd0a01lbnVJdGVtKiBjaGlsZCA9IEdUS19NRU5VX0lURU0oaXRlci0+ZGF0
YSk7CisgICAgICAgICAgICBpZiAoZ19zdHJfZXF1YWwoaXRlbUxhYmVsLCBndGtfbWVudV9pdGVt
X2dldF9sYWJlbChjaGlsZCkpKQorICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDsKKyAgICAg
ICAgfQorICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisKKyAgICB2b2lkIGFjdGl2YXRlTWVudUl0ZW0oKQorICAgIHsKKyAgICAgICAgZ19h
c3NlcnQobV9pdGVtVG9BY3RpdmF0ZUxhYmVsKTsKKyAgICAgICAgR3RrTWVudSogbWVudSA9IGdl
dFBvcHVwTWVudSgpOworICAgICAgICBHdGtNZW51SXRlbSogaXRlbSA9IGdldE1lbnVJdGVtKG1l
bnUsIG1faXRlbVRvQWN0aXZhdGVMYWJlbCk7CisgICAgICAgIGd0a19tZW51X3NoZWxsX2FjdGl2
YXRlX2l0ZW0oR1RLX01FTlVfU0hFTEwobWVudSksIEdUS19XSURHRVQoaXRlbSksIFRSVUUpOwor
ICAgICAgICBtX2l0ZW1Ub0FjdGl2YXRlTGFiZWwgPSAwOworICAgIH0KKworICAgIHN0YXRpYyBn
Ym9vbGVhbiBhY3RpdmF0ZU1lbnVJdGVtSWRsZUNhbGxiYWNrKGdwb2ludGVyIHVzZXJEYXRhKQor
ICAgIHsKKyAgICAgICAgQ29udGV4dE1lbnVDdXN0b21UZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8
Q29udGV4dE1lbnVDdXN0b21UZXN0Kj4odXNlckRhdGEpOworICAgICAgICB0ZXN0LT5hY3RpdmF0
ZU1lbnVJdGVtKCk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICB2b2lkIGFj
dGl2YXRlQ3VzdG9tTWVudUl0ZW1BbmRXYWl0VW50aWxBY3RpdmF0ZWQoY29uc3QgY2hhciogYWN0
aW9uTGFiZWwpCisgICAgeworICAgICAgICBtX2FjdGl2YXRlZCA9IG1fdG9nZ2xlZCA9IGZhbHNl
OworICAgICAgICBtX2l0ZW1Ub0FjdGl2YXRlTGFiZWwgPSBhY3Rpb25MYWJlbDsKKyAgICAgICAg
Z19pZGxlX2FkZChhY3RpdmF0ZU1lbnVJdGVtSWRsZUNhbGxiYWNrLCB0aGlzKTsKKyAgICAgICAg
Z19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIHZvaWQgdG9nZ2xlQ3Vz
dG9tTWVudUl0ZW1BbmRXYWl0VW50aWxUb2dnbGVkKGNvbnN0IGNoYXIqIGFjdGlvbkxhYmVsKQor
ICAgIHsKKyAgICAgICAgYWN0aXZhdGVDdXN0b21NZW51SXRlbUFuZFdhaXRVbnRpbEFjdGl2YXRl
ZChhY3Rpb25MYWJlbCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgYWN0aW9uQWN0aXZhdGVk
Q2FsbGJhY2soR3RrQWN0aW9uKiwgQ29udGV4dE1lbnVDdXN0b21UZXN0KiB0ZXN0KQorICAgIHsK
KyAgICAgICAgdGVzdC0+bV9hY3RpdmF0ZWQgPSB0cnVlOworICAgIH0KKworICAgIHN0YXRpYyB2
b2lkIGFjdGlvblRvZ2dsZWRDYWxsYmFjayhHdGtBY3Rpb24qLCBDb250ZXh0TWVudUN1c3RvbVRl
c3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT5tX3RvZ2dsZWQgPSB0cnVlOworICAgIH0K
KworICAgIHZvaWQgc2V0QWN0aW9uKEd0a0FjdGlvbiogYWN0aW9uKQorICAgIHsKKyAgICAgICAg
bV9hY3Rpb24gPSBhY3Rpb247CisgICAgICAgIGlmIChHVEtfSVNfVE9HR0xFX0FDVElPTihhY3Rp
b24pKQorICAgICAgICAgICAgZ19zaWduYWxfY29ubmVjdChhY3Rpb24sICJ0b2dnbGVkIiwgR19D
QUxMQkFDSyhhY3Rpb25Ub2dnbGVkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgZ19zaWduYWxfY29ubmVjdChhY3Rpb24sICJhY3RpdmF0ZSIsIEdfQ0FMTEJBQ0so
YWN0aW9uQWN0aXZhdGVkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICB9CisKKyAgICBHUmVmUHRyPEd0
a0FjdGlvbj4gbV9hY3Rpb247CisgICAgY29uc3QgY2hhciogbV9pdGVtVG9BY3RpdmF0ZUxhYmVs
OworICAgIGJvb2wgbV9hY3RpdmF0ZWQ7CisgICAgYm9vbCBtX3RvZ2dsZWQ7Cit9OworCitzdGF0
aWMgdm9pZCB0ZXN0Q29udGV4dE1lbnVQb3B1bGF0ZU1lbnUoQ29udGV4dE1lbnVDdXN0b21UZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRV
bnRpbE1hcHBlZCgpOworCisgICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxib2R5PldlYktpdEdU
SysgQ29udGV4dCBtZW51IHRlc3RzPC9ib2R5PjwvaHRtbD4iLCAiZmlsZTovLy8iKTsKKyAgICB0
ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIC8vIENyZWF0ZSBhIGN1c3RvbSBt
ZW51IGl0ZW0uCisgICAgR1JlZlB0cjxHdGtBY3Rpb24+IGFjdGlvbiA9IGFkb3B0R1JlZihndGtf
YWN0aW9uX25ldygiV2ViS2l0R1RLK0N1c3RvbUFjdGlvbiIsICJDdXN0b20gX0FjdGlvbiIsIDAs
IDApKTsKKyAgICB0ZXN0LT5zZXRBY3Rpb24oYWN0aW9uLmdldCgpKTsKKyAgICB0ZXN0LT5zaG93
Q29udGV4dE1lbnVBbmRXYWl0VW50aWxGaW5pc2hlZCgpOworICAgIHRlc3QtPmFjdGl2YXRlQ3Vz
dG9tTWVudUl0ZW1BbmRXYWl0VW50aWxBY3RpdmF0ZWQoZ3RrX2FjdGlvbl9nZXRfbGFiZWwoYWN0
aW9uLmdldCgpKSk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9hY3RpdmF0ZWQpOworICAgIGdfYXNz
ZXJ0KCF0ZXN0LT5tX3RvZ2dsZWQpOworCisgICAgLy8gQ3JlYXRlIGEgY3VzdG9tIHRvZ2dsZSBt
ZW51IGl0ZW0uCisgICAgR1JlZlB0cjxHdGtBY3Rpb24+IHRvZ2dsZUFjdGlvbiA9IGFkb3B0R1Jl
ZihHVEtfQUNUSU9OKGd0a190b2dnbGVfYWN0aW9uX25ldygiV2ViS2l0R1RLK0N1c3RvbVRvZ2ds
ZUFjdGlvbiIsICJDdXN0b20gX1RvZ2dsZSBBY3Rpb24iLCAwLCAwKSkpOworICAgIHRlc3QtPnNl
dEFjdGlvbih0b2dnbGVBY3Rpb24uZ2V0KCkpOworICAgIHRlc3QtPnNob3dDb250ZXh0TWVudUFu
ZFdhaXRVbnRpbEZpbmlzaGVkKCk7CisgICAgdGVzdC0+dG9nZ2xlQ3VzdG9tTWVudUl0ZW1BbmRX
YWl0VW50aWxUb2dnbGVkKGd0a19hY3Rpb25fZ2V0X2xhYmVsKHRvZ2dsZUFjdGlvbi5nZXQoKSkp
OworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX2FjdGl2YXRlZCk7CisgICAgZ19hc3NlcnQodGVzdC0+
bV90b2dnbGVkKTsKK30KKworY2xhc3MgQ29udGV4dE1lbnVDdXN0b21GdWxsVGVzdDogcHVibGlj
IENvbnRleHRNZW51VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShD
b250ZXh0TWVudUN1c3RvbUZ1bGxUZXN0KTsKKworICAgIGJvb2wgY29udGV4dE1lbnUoV2ViS2l0
Q29udGV4dE1lbnUqIGNvbnRleHRNZW51LCBHZGtFdmVudCosIFdlYktpdEhpdFRlc3RSZXN1bHQq
KQorICAgIHsKKyAgICAgICAgLy8gQ2xlYXIgcHJvcG9zZWQgbWVudSBhbmQgYnVpbGQgb3VyIG93
bi4KKyAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9yZW1vdmVfYWxsKGNvbnRleHRNZW51KTsK
KyAgICAgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9jb250ZXh0X21lbnVfZ2V0X25faXRlbXMo
Y29udGV4dE1lbnUpLCA9PSwgMCk7CisKKyAgICAgICAgLy8gQWRkIGFjdGlvbnMgZnJvbSBzdG9j
ay4KKyAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9wcmVwZW5kKGNvbnRleHRNZW51LCB3ZWJr
aXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X2Zyb21fc3RvY2tfYWN0aW9uKFdFQktJVF9DT05URVhU
X01FTlVfQUNUSU9OX0dPX0JBQ0spKTsKKyAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBl
bmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfZnJvbV9zdG9ja19h
Y3Rpb24oV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fR09fRk9SV0FSRCkpOworICAgICAgICB3
ZWJraXRfY29udGV4dF9tZW51X2luc2VydChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVu
dV9pdGVtX25ld19zZXBhcmF0b3IoKSwgMik7CisKKyAgICAgICAgLy8gQWRkIGN1c3RvbSBhY3Rp
b25zLgorICAgICAgICBHUmVmUHRyPEd0a0FjdGlvbj4gYWN0aW9uID0gYWRvcHRHUmVmKGd0a19h
Y3Rpb25fbmV3KCJXZWJLaXRHVEsrQ3VzdG9tQWN0aW9uIiwgIkN1c3RvbSBfQWN0aW9uIiwgMCwg
MCkpOworICAgICAgICBndGtfYWN0aW9uX3NldF9zZW5zaXRpdmUoYWN0aW9uLmdldCgpLCBGQUxT
RSk7CisgICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfaW5zZXJ0KGNvbnRleHRNZW51LCB3ZWJr
aXRfY29udGV4dF9tZW51X2l0ZW1fbmV3KGFjdGlvbi5nZXQoKSksIC0xKTsKKyAgICAgICAgR1Jl
ZlB0cjxHdGtBY3Rpb24+IHRvZ2dsZUFjdGlvbiA9IGFkb3B0R1JlZihHVEtfQUNUSU9OKGd0a190
b2dnbGVfYWN0aW9uX25ldygiV2ViS2l0R1RLK0N1c3RvbVRvZ2dsZUFjdGlvbiIsICJDdXN0b20g
X1RvZ2dsZSBBY3Rpb24iLCAwLCAwKSkpOworICAgICAgICBndGtfdG9nZ2xlX2FjdGlvbl9zZXRf
YWN0aXZlKEdUS19UT0dHTEVfQUNUSU9OKHRvZ2dsZUFjdGlvbi5nZXQoKSksIFRSVUUpOworICAg
ICAgICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRl
eHRfbWVudV9pdGVtX25ldyh0b2dnbGVBY3Rpb24uZ2V0KCkpKTsKKyAgICAgICAgd2Via2l0X2Nv
bnRleHRfbWVudV9hcHBlbmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9u
ZXdfc2VwYXJhdG9yKCkpOworCisgICAgICAgIC8vIEFkZCBhIHN1Ym1lbnUuCisgICAgICAgIEdS
ZWZQdHI8V2ViS2l0Q29udGV4dE1lbnU+IHN1Yk1lbnUgPSBhZG9wdEdSZWYod2Via2l0X2NvbnRl
eHRfbWVudV9uZXcoKSk7CisgICAgICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0Rmlu
aXNoZXMoR19PQkpFQ1Qoc3ViTWVudS5nZXQoKSkpOworICAgICAgICB3ZWJraXRfY29udGV4dF9t
ZW51X2luc2VydChzdWJNZW51LmdldCgpLCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X2Zy
b21fc3RvY2tfYWN0aW9uX3dpdGhfbGFiZWwoV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fU1RP
UCwgIlN0b3AgTG9hZCIpLCAwKTsKKyAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9pbnNlcnQo
c3ViTWVudS5nZXQoKSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19mcm9tX3N0b2NrX2Fj
dGlvbihXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9SRUxPQUQpLCAtMSk7CisgICAgICAgIHdl
YmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51
X2l0ZW1fbmV3X3dpdGhfc3VibWVudSgiTG9hZCBvcHRpb25zIiwgc3ViTWVudS5nZXQoKSkpOwor
ICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2Nv
bnRleHRfbWVudV9pdGVtX25ld19zZXBhcmF0b3IoKSk7CisKKyAgICAgICAgLy8gTW92ZSBMb2Fk
IHN1Ym1lbnUgYmVmb3JlIGN1c3RvbSBhY3Rpb25zLgorICAgICAgICB3ZWJraXRfY29udGV4dF9t
ZW51X21vdmVfaXRlbShjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9sYXN0KGNvbnRl
eHRNZW51KSwgMyk7CisgICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfbW92ZV9pdGVtKGNvbnRl
eHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2xhc3QoY29udGV4dE1lbnUpLCAzKTsKKworICAg
ICAgICAvLyBJZiBsYXN0IGl0ZW0gaXMgYSBzZXBhcmF0b3IsIHJlbW92ZSBpdC4KKyAgICAgICAg
aWYgKHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9pc19zZXBhcmF0b3Iod2Via2l0X2NvbnRleHRf
bWVudV9sYXN0KGNvbnRleHRNZW51KSkpCisgICAgICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51
X3JlbW92ZShjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9sYXN0KGNvbnRleHRNZW51
KSk7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhlIG1lbnUuCisgICAgICAgIEdMaXN0KiBpdGVyID0g
d2Via2l0X2NvbnRleHRfbWVudV9nZXRfaXRlbXMoY29udGV4dE1lbnUpOworCisgICAgICAgIGl0
ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lU
X0NPTlRFWFRfTUVOVV9BQ1RJT05fR09fQkFDSywgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAg
ICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdF
QktJVF9DT05URVhUX01FTlVfQUNUSU9OX0dPX0ZPUldBUkQsIFZpc2libGUgfCBFbmFibGVkKTsK
KyAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1NlcGFyYXRvckFuZEdldE5leHQoaXRl
cik7CisKKyAgICAgICAgR0xpc3QqIHN1Yk1lbnVJdGVyID0gMDsKKyAgICAgICAgaXRlciA9IGNo
ZWNrQ3VycmVudEl0ZW1Jc1N1Yk1lbnVBbmRHZXROZXh0KGl0ZXIsICJMb2FkIG9wdGlvbnMiLCBW
aXNpYmxlIHwgRW5hYmxlZCwgJnN1Yk1lbnVJdGVyKTsKKyAgICAgICAgc3ViTWVudUl0ZXIgPSBj
aGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoc3ViTWVudUl0ZXIsIFdFQktJ
VF9DT05URVhUX01FTlVfQUNUSU9OX1NUT1AsIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAg
c3ViTWVudUl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoc3Vi
TWVudUl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1JFTE9BRCwgVmlzaWJsZSB8IEVu
YWJsZWQpOworICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU2VwYXJhdG9yQW5kR2V0
TmV4dChpdGVyKTsKKworICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzQ3VzdG9tQWN0
aW9uQW5kR2V0TmV4dChpdGVyLCAiQ3VzdG9tIF9BY3Rpb24iLCBWaXNpYmxlKTsKKyAgICAgICAg
aXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc0N1c3RvbUFjdGlvbkFuZEdldE5leHQoaXRlciwgIkN1
c3RvbSBfVG9nZ2xlIEFjdGlvbiIsIFZpc2libGUgfCBFbmFibGVkIHwgQ2hlY2tlZCk7CisgICAg
ICAgIGdfYXNzZXJ0KCFpdGVyKTsKKworICAgICAgICBxdWl0TWFpbkxvb3AoKTsKKworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0Q29udGV4dE1lbnVD
dXN0b21NZW51KENvbnRleHRNZW51Q3VzdG9tRnVsbFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIp
Cit7CisgICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7CisKKyAgICB0
ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHk+V2ViS2l0R1RLKyBDb250ZXh0IG1lbnUgdGVzdHM8
L2JvZHk+PC9odG1sPiIsICJmaWxlOi8vLyIpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5p
c2hlZCgpOworCisgICAgdGVzdC0+c2hvd0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmluaXNoZWQo
KTsKK30KKworY2xhc3MgQ29udGV4dE1lbnVEaXNhYmxlZFRlc3Q6IHB1YmxpYyBDb250ZXh0TWVu
dVRlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoQ29udGV4dE1lbnVE
aXNhYmxlZFRlc3QpOworCisgICAgZW51bSBEaXNhYmxlTW9kZSB7CisgICAgICAgIElnbm9yZUNs
aWNrcywKKyAgICAgICAgSWdub3JlRGVmYXVsdE1lbnUKKyAgICB9OworCisgICAgc3RhdGljIGdi
b29sZWFuIGJ1dHRvblByZXNzRXZlbnRDYWxsYmFjayhHdGtXaWRnZXQqLCBHZGtFdmVudCogZXZl
bnQsIENvbnRleHRNZW51RGlzYWJsZWRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgaWYgKGV2
ZW50LT5idXR0b24uYnV0dG9uICE9IDMpCisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAg
ICAgIHJldHVybiB0ZXN0LT5yaWdodEJ1dHRvblByZXNzZWQoKTsKKyAgICB9CisKKyAgICBDb250
ZXh0TWVudURpc2FibGVkVGVzdCgpCisgICAgICAgIDogbV9kaXNhYmxlTW9kZShJZ25vcmVDbGlj
a3MpCisgICAgeworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImJ1dHRvbi1w
cmVzcy1ldmVudCIsIEdfQ0FMTEJBQ0soYnV0dG9uUHJlc3NFdmVudENhbGxiYWNrKSwgdGhpcyk7
CisgICAgfQorCisgICAgYm9vbCBjb250ZXh0TWVudShXZWJLaXRDb250ZXh0TWVudSogY29udGV4
dE1lbnUsIEdka0V2ZW50KiwgV2ViS2l0SGl0VGVzdFJlc3VsdCopCisgICAgeworICAgICAgICBp
ZiAobV9kaXNhYmxlTW9kZSA9PSBJZ25vcmVDbGlja3MpCisgICAgICAgICAgICBnX2Fzc2VydF9u
b3RfcmVhY2hlZCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBxdWl0TWFpbkxvb3AoKTsK
KworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIHJpZ2h0QnV0dG9uUHJl
c3NlZCgpCisgICAgeworICAgICAgICBpZiAobV9kaXNhYmxlTW9kZSA9PSBJZ25vcmVDbGlja3Mp
IHsKKyAgICAgICAgICAgIHF1aXRNYWluTG9vcEFmdGVyUHJvY2Vzc2luZ1BlbmRpbmdFdmVudHMo
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBEaXNhYmxlTW9kZSBtX2Rpc2FibGVNb2RlOworfTsKKworc3Rh
dGljIHZvaWQgdGVzdENvbnRleHRNZW51RGlzYWJsZU1lbnUoQ29udGV4dE1lbnVEaXNhYmxlZFRl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2Fp
dFVudGlsTWFwcGVkKCk7CisKKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHk+V2ViS2l0
R1RLKyBDb250ZXh0IG1lbnUgdGVzdHM8L2JvZHk+PC9odG1sPiIsICJmaWxlOi8vLyIpOworICAg
IHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+bV9kaXNhYmxlTW9k
ZSA9IENvbnRleHRNZW51RGlzYWJsZWRUZXN0OjpJZ25vcmVEZWZhdWx0TWVudTsKKyAgICB0ZXN0
LT5zaG93Q29udGV4dE1lbnVBbmRXYWl0VW50aWxGaW5pc2hlZCgpOworCisgICAgdGVzdC0+bV9k
aXNhYmxlTW9kZSA9IENvbnRleHRNZW51RGlzYWJsZWRUZXN0OjpJZ25vcmVDbGlja3M7CisgICAg
dGVzdC0+c2hvd0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmluaXNoZWQoKTsKK30KKworY2xhc3Mg
Q29udGV4dE1lbnVTdWJtZW51VGVzdDogcHVibGljIENvbnRleHRNZW51VGVzdCB7CitwdWJsaWM6
CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShDb250ZXh0TWVudVN1Ym1lbnVUZXN0KTsKKwor
ICAgIGJvb2wgY29udGV4dE1lbnUoV2ViS2l0Q29udGV4dE1lbnUqIGNvbnRleHRNZW51LCBHZGtF
dmVudCosIFdlYktpdEhpdFRlc3RSZXN1bHQqKQorICAgIHsKKyAgICAgICAgc2l6ZV90IG1lbnVT
aXplID0gd2Via2l0X2NvbnRleHRfbWVudV9nZXRfbl9pdGVtcyhjb250ZXh0TWVudSk7CisgICAg
ICAgIEdSZWZQdHI8V2ViS2l0Q29udGV4dE1lbnU+IHN1Yk1lbnUgPSBhZG9wdEdSZWYod2Via2l0
X2NvbnRleHRfbWVudV9uZXcoKSk7CisgICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5k
KGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X3dpdGhfc3VibWVudSgi
U3ViTWVudUl0ZW0iLCBzdWJNZW51LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcHVpbnQo
d2Via2l0X2NvbnRleHRfbWVudV9nZXRfbl9pdGVtcyhjb250ZXh0TWVudSksID09LCBtZW51U2l6
ZSArIDEpOworCisgICAgICAgIEdSZWZQdHI8V2ViS2l0Q29udGV4dE1lbnU+IHN1Yk1lbnUyID0g
YWRvcHRHUmVmKHdlYmtpdF9jb250ZXh0X21lbnVfbmV3KCkpOworICAgICAgICBHUmVmUHRyPFdl
YktpdENvbnRleHRNZW51SXRlbT4gaXRlbSA9IHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdf
ZnJvbV9zdG9ja19hY3Rpb24oV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9MSU5LKTsK
KworICAgICAgICAvLyBBZGQgc3VibWVudSB0byBuZXdseSBjcmVhdGVkIGl0ZW0uCisgICAgICAg
IGdfYXNzZXJ0KCF3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X3N1Ym1lbnUoaXRlbS5nZXQo
KSkpOworICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fc2V0X3N1Ym1lbnUoaXRlbS5n
ZXQoKSwgc3ViTWVudTIuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydCh3ZWJraXRfY29udGV4dF9t
ZW51X2l0ZW1fZ2V0X3N1Ym1lbnUoaXRlbS5nZXQoKSkgPT0gc3ViTWVudTIuZ2V0KCkpOworCisg
ICAgICAgIC8vIFJlcGxhY2UgdGhlIHN1Ym1lbnUuCisgICAgICAgIHdlYmtpdF9jb250ZXh0X21l
bnVfaXRlbV9zZXRfc3VibWVudShpdGVtLmdldCgpLCAwKTsKKyAgICAgICAgZ19hc3NlcnQoIXdl
YmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRfc3VibWVudShpdGVtLmdldCgpKSk7CisKKyAgICAg
ICAgLy8gVHJ5IHRvIGFkZCBhIHN1Ym1lbnUgYWxyZWFkeSBhZGRlZCB0byBhbm90aGVyIGl0ZW0u
CisgICAgICAgIHJlbW92ZUxvZ0ZhdGFsRmxhZyhHX0xPR19MRVZFTF9XQVJOSU5HKTsKKyAgICAg
ICAgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX3NldF9zdWJtZW51KGl0ZW0uZ2V0KCksIHN1Yk1l
bnUuZ2V0KCkpOworICAgICAgICBhZGRMb2dGYXRhbEZsYWcoR19MT0dfTEVWRUxfV0FSTklORyk7
CisgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X3N1Ym1lbnUo
aXRlbS5nZXQoKSkpOworCisgICAgICAgIC8vIEEgcmVtb3ZlZCBzdWJtZW51IHNob3VsZG4ndCBo
YXZlIGEgcGFyZW50LgorICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fc2V0X3N1Ym1l
bnUoaXRlbS5nZXQoKSwgc3ViTWVudTIuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydCh3ZWJraXRf
Y29udGV4dF9tZW51X2l0ZW1fZ2V0X3N1Ym1lbnUoaXRlbS5nZXQoKSkgPT0gc3ViTWVudTIuZ2V0
KCkpOworCisgICAgICAgIHF1aXRNYWluTG9vcCgpOworCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KK307CisKK3N0YXRpYyB2b2lkIHRlc3RDb250ZXh0TWVudVN1Yk1lbnUoQ29udGV4dE1l
bnVTdWJtZW51VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5zaG93SW5X
aW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKKworICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48
Ym9keT5XZWJLaXRHVEsrIENvbnRleHQgbWVudSB0ZXN0czwvYm9keT48L2h0bWw+IiwgImZpbGU6
Ly8vIik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5z
aG93Q29udGV4dE1lbnVBbmRXYWl0VW50aWxGaW5pc2hlZCgpOworfQorCitjbGFzcyBDb250ZXh0
TWVudURpc21pc3NlZFRlc3Q6IHB1YmxpYyBDb250ZXh0TWVudVRlc3QgeworcHVibGljOgorICAg
IE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoQ29udGV4dE1lbnVEaXNtaXNzZWRUZXN0KTsKKworICAg
IENvbnRleHRNZW51RGlzbWlzc2VkVGVzdCgpCisgICAgICAgIDogbV9kaXNtaXNzZWQoZmFsc2Up
CisgICAgeworICAgIH0KKworICAgIGJvb2wgY29udGV4dE1lbnUoV2ViS2l0Q29udGV4dE1lbnUq
IGNvbnRleHRNZW51LCBHZGtFdmVudCosIFdlYktpdEhpdFRlc3RSZXN1bHQqKQorICAgIHsKKyAg
ICAgICAgcXVpdE1haW5Mb29wKCk7CisgICAgICAgIC8vIFNob3cgdGhlIGRlZmF1bHQgY29udGV4
dCBtZW51LgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdm9pZCBjb250ZXh0
TWVudURpc21pc3NlZCgpCisgICAgeworICAgICAgICBtX2Rpc21pc3NlZCA9IHRydWU7CisgICAg
ICAgIENvbnRleHRNZW51VGVzdDo6Y29udGV4dE1lbnVEaXNtaXNzZWQoKTsKKyAgICB9CisKKyAg
ICB2b2lkIHNob3dDb250ZXh0TWVudUFuZFdhaXRVbnRpbERpc21pc3NlZCgpCisgICAgeworICAg
ICAgICBzaG93Q29udGV4dE1lbnVBbmRXYWl0VW50aWxGaW5pc2hlZCgpOworICAgICAgICBkaXNt
aXNzQ29udGV4dE1lbnVBbmRXYWl0VW50aWxGaW5pc2hlZCgpOworICAgIH0KKworICAgIGJvb2wg
bV9kaXNtaXNzZWQ7Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0Q29udGV4dE1lbnVEaXNtaXNzZWQo
Q29udGV4dE1lbnVEaXNtaXNzZWRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRl
c3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOworCisgICAgdGVzdC0+bG9hZEh0
bWwoIjxodG1sPjxib2R5PldlYktpdEdUSysgQ29udGV4dCBtZW51IHRlc3RzPC9ib2R5PjwvaHRt
bD4iLCAiZmlsZTovLy8iKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKwor
ICAgIHRlc3QtPnNob3dDb250ZXh0TWVudUFuZFdhaXRVbnRpbERpc21pc3NlZCgpOworICAgIGdf
YXNzZXJ0KHRlc3QtPm1fZGlzbWlzc2VkKTsKK30KKworY2xhc3MgQ29udGV4dE1lbnVTbWFydFNl
cGFyYXRvcnNUZXN0OiBwdWJsaWMgQ29udGV4dE1lbnVUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtF
X0dMSUJfVEVTVF9GSVhUVVJFKENvbnRleHRNZW51U21hcnRTZXBhcmF0b3JzVGVzdCk7CisKKyAg
ICBib29sIGNvbnRleHRNZW51KFdlYktpdENvbnRleHRNZW51KiBjb250ZXh0TWVudSwgR2RrRXZl
bnQqLCBXZWJLaXRIaXRUZXN0UmVzdWx0KikKKyAgICB7CisgICAgICAgIHdlYmtpdF9jb250ZXh0
X21lbnVfcmVtb3ZlX2FsbChjb250ZXh0TWVudSk7CisKKyAgICAgICAgd2Via2l0X2NvbnRleHRf
bWVudV9hcHBlbmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfc2Vw
YXJhdG9yKCkpOworICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVu
dSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19zZXBhcmF0b3IoKSk7CisgICAgICAgIHdl
YmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51
X2l0ZW1fbmV3X2Zyb21fc3RvY2tfYWN0aW9uKFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0dP
X0JBQ0spKTsKKyAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBlbmQoY29udGV4dE1lbnUs
IHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfZnJvbV9zdG9ja19hY3Rpb24oV0VCS0lUX0NP
TlRFWFRfTUVOVV9BQ1RJT05fR09fRk9SV0FSRCkpOworICAgICAgICB3ZWJraXRfY29udGV4dF9t
ZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19zZXBh
cmF0b3IoKSk7CisgICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51
LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X3NlcGFyYXRvcigpKTsKKyAgICAgICAgd2Vi
a2l0X2NvbnRleHRfbWVudV9hcHBlbmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVf
aXRlbV9uZXdfZnJvbV9zdG9ja19hY3Rpb24oV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09Q
WSkpOworICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Vi
a2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19zZXBhcmF0b3IoKSk7CisgICAgICAgIHdlYmtpdF9j
b250ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1f
bmV3X2Zyb21fc3RvY2tfYWN0aW9uKFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0lOU1BFQ1Rf
RUxFTUVOVCkpOworICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVu
dSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19zZXBhcmF0b3IoKSk7CisgICAgICAgIHdl
YmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51
X2l0ZW1fbmV3X3NlcGFyYXRvcigpKTsKKworICAgICAgICBxdWl0TWFpbkxvb3AoKTsKKworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgR3RrTWVudSogc2hvd0NvbnRleHRNZW51
QW5kR2V0R3RrTWVudSgpCisgICAgeworICAgICAgICBzaG93Q29udGV4dE1lbnVBbmRXYWl0VW50
aWxGaW5pc2hlZCgpOworICAgICAgICByZXR1cm4gZ2V0UG9wdXBNZW51KCk7CisgICAgfQorfTsK
Kworc3RhdGljIHZvaWQgdGVzdENvbnRleHRNZW51U21hcnRTZXBhcmF0b3JzKENvbnRleHRNZW51
U21hcnRTZXBhcmF0b3JzVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5z
aG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKKworICAgIHRlc3QtPmxvYWRIdG1sKCI8
aHRtbD48Ym9keT5XZWJLaXRHVEsrIENvbnRleHQgbWVudSB0ZXN0czwvYm9keT48L2h0bWw+Iiwg
ImZpbGU6Ly8vIik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBH
dGtNZW51KiBtZW51ID0gdGVzdC0+c2hvd0NvbnRleHRNZW51QW5kR2V0R3RrTWVudSgpOworICAg
IGdfYXNzZXJ0KG1lbnUpOworCisgICAgLy8gTGVhZGluZyBhbmQgdHJhaWxpbmcgc2VwYXJhdG9y
cyBhcmUgbm90IGFkZGVkIHRvIHRoZSBjb250ZXh0IG1lbnUuCisgICAgR093blB0cjxHTGlzdD4g
bWVudUl0ZW1zKGd0a19jb250YWluZXJfZ2V0X2NoaWxkcmVuKEdUS19DT05UQUlORVIobWVudSkp
KTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGdfbGlzdF9sZW5ndGgobWVudUl0ZW1zLmdldCgpKSwg
PT0sIDYpOworICAgIEd0a1dpZGdldCogaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRh
KG1lbnVJdGVtcy5nZXQoKSwgMCkpOworICAgIGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01F
TlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKKyAgICBpdGVt
ID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCAxKSk7CisgICAg
Z19hc3NlcnQoIUdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRf
Z2V0X3Zpc2libGUoaXRlbSkpOworICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0
YShtZW51SXRlbXMuZ2V0KCksIDIpKTsKKyAgICBnX2Fzc2VydChHVEtfSVNfU0VQQVJBVE9SX01F
TlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKKyAgICBpdGVt
ID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCAzKSk7CisgICAg
Z19hc3NlcnQoIUdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRf
Z2V0X3Zpc2libGUoaXRlbSkpOworICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0
YShtZW51SXRlbXMuZ2V0KCksIDQpKTsKKyAgICBnX2Fzc2VydChHVEtfSVNfU0VQQVJBVE9SX01F
TlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKKyAgICBpdGVt
ID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCA1KSk7CisgICAg
Z19hc3NlcnQoIUdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRf
Z2V0X3Zpc2libGUoaXRlbSkpOworCisgICAgLy8gSGlkaW5nIGEgbWVudSBpdGVtIGJldHdlZW4g
dHdvIHNlcGFyYXRvcnMgaGlkZXMgdGhlIGZvbGxvd2luZyBzZXBhcmF0b3IuCisgICAgR3RrQWN0
aW9uKiBhY3Rpb24gPSBndGtfYWN0aXZhdGFibGVfZ2V0X3JlbGF0ZWRfYWN0aW9uKEdUS19BQ1RJ
VkFUQUJMRShnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCAzKSkpOworICAgIGd0a19h
Y3Rpb25fc2V0X3Zpc2libGUoYWN0aW9uLCBGQUxTRSk7CisgICAgbWVudUl0ZW1zLnNldChndGtf
Y29udGFpbmVyX2dldF9jaGlsZHJlbihHVEtfQ09OVEFJTkVSKG1lbnUpKSk7CisgICAgZ19hc3Nl
cnRfY21wdWludChnX2xpc3RfbGVuZ3RoKG1lbnVJdGVtcy5nZXQoKSksID09LCA2KTsKKyAgICBp
dGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCAwKSk7Cisg
ICAgZ19hc3NlcnQoIUdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRn
ZXRfZ2V0X3Zpc2libGUoaXRlbSkpOworICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhf
ZGF0YShtZW51SXRlbXMuZ2V0KCksIDEpKTsKKyAgICBnX2Fzc2VydCghR1RLX0lTX1NFUEFSQVRP
Ul9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7CisgICAg
aXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgMikpOwor
ICAgIGdfYXNzZXJ0KEdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRn
ZXRfZ2V0X3Zpc2libGUoaXRlbSkpOworICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhf
ZGF0YShtZW51SXRlbXMuZ2V0KCksIDMpKTsKKyAgICBnX2Fzc2VydCghR1RLX0lTX1NFUEFSQVRP
Ul9NRU5VX0lURU0oaXRlbSkgJiYgIWd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOworICAg
IGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDQpKTsK
KyAgICBnX2Fzc2VydChHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAmJiAhZ3RrX3dp
ZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7CisgICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250
aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgNSkpOworICAgIGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJB
VE9SX01FTlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKKyAg
ICBndGtfYWN0aW9uX3NldF92aXNpYmxlKGFjdGlvbiwgVFJVRSk7CisKKyAgICAvLyBTaG93aW5n
IGFuIGFjdGlvbiBiZXR3ZWVuIHR3byBzZXBhcmF0b3JzIHNob3dzIHRoZSBoaWRkZW4gc2VwYXJh
dG9yLgorICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0
KCksIDApKTsKKyAgICBnX2Fzc2VydCghR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkg
JiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7CisgICAgaXRlbSA9IEdUS19XSURHRVQo
Z19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgMSkpOworICAgIGdfYXNzZXJ0KCFHVEtf
SVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0
ZW0pKTsKKyAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdl
dCgpLCAyKSk7CisgICAgZ19hc3NlcnQoR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkg
JiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7CisgICAgaXRlbSA9IEdUS19XSURHRVQo
Z19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgMykpOworICAgIGdfYXNzZXJ0KCFHVEtf
SVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0
ZW0pKTsKKyAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdl
dCgpLCA0KSk7CisgICAgZ19hc3NlcnQoR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkg
JiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7CisgICAgaXRlbSA9IEdUS19XSURHRVQo
Z19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgNSkpOworICAgIGdfYXNzZXJ0KCFHVEtf
SVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0
ZW0pKTsKKworICAgIC8vIFRyYWlsaW5nIHNlcGFyYXRvcnMgYXJlIGhpZGRlbiB0b28uCisgICAg
YWN0aW9uID0gZ3RrX2FjdGl2YXRhYmxlX2dldF9yZWxhdGVkX2FjdGlvbihHVEtfQUNUSVZBVEFC
TEUoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgNSkpKTsKKyAgICBndGtfYWN0aW9u
X3NldF92aXNpYmxlKGFjdGlvbiwgRkFMU0UpOworICAgIG1lbnVJdGVtcy5zZXQoZ3RrX2NvbnRh
aW5lcl9nZXRfY2hpbGRyZW4oR1RLX0NPTlRBSU5FUihtZW51KSkpOworICAgIGl0ZW0gPSBHVEtf
V0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDApKTsKKyAgICBnX2Fzc2Vy
dCghR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlz
aWJsZShpdGVtKSk7CisgICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJ
dGVtcy5nZXQoKSwgMSkpOworICAgIGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRF
TShpdGVtKSAmJiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKKyAgICBpdGVtID0gR1RL
X1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCAyKSk7CisgICAgZ19hc3Nl
cnQoR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlz
aWJsZShpdGVtKSk7CisgICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJ
dGVtcy5nZXQoKSwgMykpOworICAgIGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRF
TShpdGVtKSAmJiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKKyAgICBpdGVtID0gR1RL
X1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCA0KSk7CisgICAgZ19hc3Nl
cnQoR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgIWd0a193aWRnZXRfZ2V0X3Zp
c2libGUoaXRlbSkpOworICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51
SXRlbXMuZ2V0KCksIDUpKTsKKyAgICBnX2Fzc2VydCghR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lU
RU0oaXRlbSkgJiYgIWd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOworfQorCit2b2lkIGJl
Zm9yZUFsbCgpCit7CisgICAgQ29udGV4dE1lbnVEZWZhdWx0VGVzdDo6YWRkKCJXZWJLaXRXZWJW
aWV3IiwgImRlZmF1bHQtbWVudSIsIHRlc3RDb250ZXh0TWVudURlZmF1bHRNZW51KTsKKyAgICBD
b250ZXh0TWVudUN1c3RvbVRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJwb3B1bGF0ZS1tZW51
IiwgdGVzdENvbnRleHRNZW51UG9wdWxhdGVNZW51KTsKKyAgICBDb250ZXh0TWVudUN1c3RvbUZ1
bGxUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiY3VzdG9tLW1lbnUiLCB0ZXN0Q29udGV4dE1l
bnVDdXN0b21NZW51KTsKKyAgICBDb250ZXh0TWVudURpc2FibGVkVGVzdDo6YWRkKCJXZWJLaXRX
ZWJWaWV3IiwgImRpc2FibGUtbWVudSIsIHRlc3RDb250ZXh0TWVudURpc2FibGVNZW51KTsKKyAg
ICBDb250ZXh0TWVudVN1Ym1lbnVUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAic3VibWVudSIs
IHRlc3RDb250ZXh0TWVudVN1Yk1lbnUpOworICAgIENvbnRleHRNZW51RGlzbWlzc2VkVGVzdDo6
YWRkKCJXZWJLaXRXZWJWaWV3IiwgIm1lbnUtZGlzbWlzc2VkIiwgdGVzdENvbnRleHRNZW51RGlz
bWlzc2VkKTsKKyAgICBDb250ZXh0TWVudVNtYXJ0U2VwYXJhdG9yc1Rlc3Q6OmFkZCgiV2ViS2l0
V2ViVmlldyIsICJzbWFydC1zZXBhcmF0b3JzIiwgdGVzdENvbnRleHRNZW51U21hcnRTZXBhcmF0
b3JzKTsKK30KKwordm9pZCBhZnRlckFsbCgpCit7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdENvb2tpZU1hbmFnZXIuY3BwIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RDb29raWVNYW5hZ2VyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGM2YjViCi0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RDb29raWVNYW5hZ2Vy
LmNwcApAQCAtMCwwICsxLDMzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEg
Uy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJXZWJLaXRUZXN0U2VydmVyLmgi
CisjaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKKyNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgorCitz
dGF0aWMgV2ViS2l0VGVzdFNlcnZlcioga1NlcnZlcjsKK3N0YXRpYyBjaGFyKiBrVGVtcERpcmVj
dG9yeTsKKworc3RhdGljIGNvbnN0IGNoYXIqIGtGaXJzdFBhcnR5RG9tYWluID0gIjEyNy4wLjAu
MSI7CitzdGF0aWMgY29uc3QgY2hhcioga1RoaXJkUGFydHlEb21haW4gPSAibG9jYWxob3N0IjsK
K3N0YXRpYyBjb25zdCBjaGFyKiBrSW5kZXhIdG1sRm9ybWF0ID0KKyAgICAiPGh0bWw+PGJvZHk+
IgorICAgICIgPHA+V2ViS2l0R1RLKyBDb29raWUgTWFuYWdlciB0ZXN0PC9wPiIKKyAgICAiIDxp
bWcgc3JjPSdodHRwOi8vbG9jYWxob3N0OiV1L2ltYWdlLnBuZycgd2lkdGg9NSBoZWlnaHQ9NT48
L2ltZz4iCisgICAgIjwvYm9keT48L2h0bWw+IjsKKworY2xhc3MgQ29va2llTWFuYWdlclRlc3Q6
IHB1YmxpYyBXZWJWaWV3VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVS
RShDb29raWVNYW5hZ2VyVGVzdCk7CisKKyAgICBzdGF0aWMgdm9pZCBjb29raWVzQ2hhbmdlZENh
bGxiYWNrKFdlYktpdENvb2tpZU1hbmFnZXIqLCBDb29raWVNYW5hZ2VyVGVzdCogdGVzdCkKKyAg
ICB7CisgICAgICAgIHRlc3QtPm1fY29va2llc0NoYW5nZWQgPSB0cnVlOworICAgICAgICBpZiAo
dGVzdC0+bV9maW5pc2hMb29wV2hlbkNvb2tpZXNDaGFuZ2UpCisgICAgICAgICAgICBnX21haW5f
bG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworICAgIH0KKworICAgIENvb2tpZU1hbmFnZXJU
ZXN0KCkKKyAgICAgICAgOiBXZWJWaWV3VGVzdCgpCisgICAgICAgICwgbV9jb29raWVNYW5hZ2Vy
KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfY29va2llX21hbmFnZXIod2Via2l0X3dlYl92aWV3X2dl
dF9jb250ZXh0KG1fd2ViVmlldykpKQorICAgICAgICAsIG1fYWNjZXB0UG9saWN5KFdFQktJVF9D
T09LSUVfUE9MSUNZX0FDQ0VQVF9OT19USElSRF9QQVJUWSkKKyAgICAgICAgLCBtX2RvbWFpbnMo
MCkKKyAgICAgICAgLCBtX2Nvb2tpZXNDaGFuZ2VkKGZhbHNlKQorICAgICAgICAsIG1fZmluaXNo
TG9vcFdoZW5Db29raWVzQ2hhbmdlKGZhbHNlKQorICAgIHsKKyAgICAgICAgZ19zaWduYWxfY29u
bmVjdChtX2Nvb2tpZU1hbmFnZXIsICJjaGFuZ2VkIiwgR19DQUxMQkFDSyhjb29raWVzQ2hhbmdl
ZENhbGxiYWNrKSwgdGhpcyk7CisgICAgfQorCisgICAgfkNvb2tpZU1hbmFnZXJUZXN0KCkKKyAg
ICB7CisgICAgICAgIGdfc3RyZnJlZXYobV9kb21haW5zKTsKKyAgICAgICAgZ19zaWduYWxfaGFu
ZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fY29va2llTWFuYWdlciwgR19TSUdOQUxfTUFUQ0hf
REFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7CisgICAgICAgIGlmIChtX2Nvb2tpZXNUZXh0RmlsZSkK
KyAgICAgICAgICAgIGdfdW5saW5rKG1fY29va2llc1RleHRGaWxlLmdldCgpKTsKKyAgICAgICAg
aWYgKG1fY29va2llc1NRTGl0ZUZpbGUpCisgICAgICAgICAgICBnX3VubGluayhtX2Nvb2tpZXNT
UUxpdGVGaWxlLmdldCgpKTsKKyAgICB9CisKKyAgICB2b2lkIHNldFBlcnNpc3RlbnRTdG9yYWdl
KFdlYktpdENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlIHN0b3JhZ2UpCisgICAgeworICAgICAgICBj
b25zdCBjaGFyKiBmaWxlbmFtZSA9IDA7CisgICAgICAgIHN3aXRjaCAoc3RvcmFnZSkgeworICAg
ICAgICBjYXNlIFdFQktJVF9DT09LSUVfUEVSU0lTVEVOVF9TVE9SQUdFX1RFWFQ6CisgICAgICAg
ICAgICBpZiAoIW1fY29va2llc1RleHRGaWxlKQorICAgICAgICAgICAgICAgIG1fY29va2llc1Rl
eHRGaWxlLnNldChnX2J1aWxkX2ZpbGVuYW1lKGtUZW1wRGlyZWN0b3J5LCAiY29va2llcy50eHQi
LCBOVUxMKSk7CisgICAgICAgICAgICBmaWxlbmFtZSA9IG1fY29va2llc1RleHRGaWxlLmdldCgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0VCS0lUX0NPT0tJRV9QRVJTSVNU
RU5UX1NUT1JBR0VfU1FMSVRFOgorICAgICAgICAgICAgaWYgKCFtX2Nvb2tpZXNTUUxpdGVGaWxl
KQorICAgICAgICAgICAgICAgIG1fY29va2llc1NRTGl0ZUZpbGUuc2V0KGdfYnVpbGRfZmlsZW5h
bWUoa1RlbXBEaXJlY3RvcnksICJjb29raWVzLmRiIiwgTlVMTCkpOworICAgICAgICAgICAgZmls
ZW5hbWUgPSBtX2Nvb2tpZXNTUUxpdGVGaWxlLmdldCgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAg
ICAgICB9CisgICAgICAgIHdlYmtpdF9jb29raWVfbWFuYWdlcl9zZXRfcGVyc2lzdGVudF9zdG9y
YWdlKG1fY29va2llTWFuYWdlciwgZmlsZW5hbWUsIHN0b3JhZ2UpOworICAgIH0KKworICAgIHN0
YXRpYyB2b2lkIGdldEFjY2VwdFBvbGljeVJlYWR5Q2FsbGJhY2soR09iamVjdCogb2JqZWN0LCBH
QXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEpCisgICAgeworICAgICAgICBH
T3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgICAgIFdlYktpdENvb2tpZUFjY2VwdFBvbGljeSBw
b2xpY3kgPSB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2FjY2VwdF9wb2xpY3lfZmluaXNoKFdF
QktJVF9DT09LSUVfTUFOQUdFUihvYmplY3QpLCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSk7Cisg
ICAgICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7CisKKyAgICAgICAgQ29va2llTWFuYWdlclRl
c3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxDb29raWVNYW5hZ2VyVGVzdCo+KHVzZXJEYXRhKTsKKyAg
ICAgICAgdGVzdC0+bV9hY2NlcHRQb2xpY3kgPSBwb2xpY3k7CisgICAgICAgIGdfbWFpbl9sb29w
X3F1aXQodGVzdC0+bV9tYWluTG9vcCk7CisgICAgfQorCisgICAgV2ViS2l0Q29va2llQWNjZXB0
UG9saWN5IGdldEFjY2VwdFBvbGljeSgpCisgICAgeworICAgICAgICBtX2FjY2VwdFBvbGljeSA9
IFdFQktJVF9DT09LSUVfUE9MSUNZX0FDQ0VQVF9OT19USElSRF9QQVJUWTsKKyAgICAgICAgd2Vi
a2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5KG1fY29va2llTWFuYWdlciwgMCwg
Z2V0QWNjZXB0UG9saWN5UmVhZHlDYWxsYmFjaywgdGhpcyk7CisgICAgICAgIGdfbWFpbl9sb29w
X3J1bihtX21haW5Mb29wKTsKKworICAgICAgICByZXR1cm4gbV9hY2NlcHRQb2xpY3k7CisgICAg
fQorCisgICAgdm9pZCBzZXRBY2NlcHRQb2xpY3koV2ViS2l0Q29va2llQWNjZXB0UG9saWN5IHBv
bGljeSkKKyAgICB7CisgICAgICAgIHdlYmtpdF9jb29raWVfbWFuYWdlcl9zZXRfYWNjZXB0X3Bv
bGljeShtX2Nvb2tpZU1hbmFnZXIsIHBvbGljeSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQg
Z2V0RG9tYWluc1JlYWR5Q2FsbGJhY2soR09iamVjdCogb2JqZWN0LCBHQXN5bmNSZXN1bHQqIHJl
c3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEpCisgICAgeworICAgICAgICBHT3duUHRyPEdFcnJvcj4g
ZXJyb3I7CisgICAgICAgIGNoYXIqKiBkb21haW5zID0gd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dl
dF9kb21haW5zX3dpdGhfY29va2llc19maW5pc2goV0VCS0lUX0NPT0tJRV9NQU5BR0VSKG9iamVj
dCksIHJlc3VsdCwgJmVycm9yLm91dFB0cigpKTsKKyAgICAgICAgZ19hc3NlcnQoIWVycm9yLmdl
dCgpKTsKKworICAgICAgICBDb29raWVNYW5hZ2VyVGVzdCogdGVzdCA9IHN0YXRpY19jYXN0PENv
b2tpZU1hbmFnZXJUZXN0Kj4odXNlckRhdGEpOworICAgICAgICB0ZXN0LT5tX2RvbWFpbnMgPSBk
b21haW5zOworICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworICAg
IH0KKworICAgIGNoYXIqKiBnZXREb21haW5zKCkKKyAgICB7CisgICAgICAgIGdfc3RyZnJlZXYo
bV9kb21haW5zKTsKKyAgICAgICAgbV9kb21haW5zID0gMDsKKyAgICAgICAgd2Via2l0X2Nvb2tp
ZV9tYW5hZ2VyX2dldF9kb21haW5zX3dpdGhfY29va2llcyhtX2Nvb2tpZU1hbmFnZXIsIDAsIGdl
dERvbWFpbnNSZWFkeUNhbGxiYWNrLCB0aGlzKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1f
bWFpbkxvb3ApOworCisgICAgICAgIHJldHVybiBtX2RvbWFpbnM7CisgICAgfQorCisgICAgYm9v
bCBoYXNEb21haW4oY29uc3QgY2hhciogZG9tYWluKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2Rv
bWFpbnMpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IG1fZG9tYWluc1tpXTsgKytpKQorICAgICAgICAgICAgaWYgKGdfc3RyX2VxdWFsKG1f
ZG9tYWluc1tpXSwgZG9tYWluKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHZvaWQgZGVsZXRlQ29va2llc0ZvckRvbWFp
bihjb25zdCBjaGFyKiBkb21haW4pCisgICAgeworICAgICAgICB3ZWJraXRfY29va2llX21hbmFn
ZXJfZGVsZXRlX2Nvb2tpZXNfZm9yX2RvbWFpbihtX2Nvb2tpZU1hbmFnZXIsIGRvbWFpbik7Cisg
ICAgfQorCisgICAgdm9pZCBkZWxldGVBbGxDb29raWVzKCkKKyAgICB7CisgICAgICAgIHdlYmtp
dF9jb29raWVfbWFuYWdlcl9kZWxldGVfYWxsX2Nvb2tpZXMobV9jb29raWVNYW5hZ2VyKTsKKyAg
ICB9CisKKyAgICB2b2lkIHdhaXRVbnRpbENvb2tpZXNDaGFuZ2VkKCkKKyAgICB7CisgICAgICAg
IG1fY29va2llc0NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgbV9maW5pc2hMb29wV2hlbkNvb2tp
ZXNDaGFuZ2UgPSB0cnVlOworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Cisg
ICAgICAgIG1fZmluaXNoTG9vcFdoZW5Db29raWVzQ2hhbmdlID0gZmFsc2U7CisgICAgfQorCisg
ICAgV2ViS2l0Q29va2llTWFuYWdlciogbV9jb29raWVNYW5hZ2VyOworICAgIFdlYktpdENvb2tp
ZUFjY2VwdFBvbGljeSBtX2FjY2VwdFBvbGljeTsKKyAgICBjaGFyKiogbV9kb21haW5zOworICAg
IGJvb2wgbV9jb29raWVzQ2hhbmdlZDsKKyAgICBib29sIG1fZmluaXNoTG9vcFdoZW5Db29raWVz
Q2hhbmdlOworICAgIEdPd25QdHI8Y2hhcj4gbV9jb29raWVzVGV4dEZpbGU7CisgICAgR093blB0
cjxjaGFyPiBtX2Nvb2tpZXNTUUxpdGVGaWxlOworfTsKKworc3RhdGljIHZvaWQgdGVzdENvb2tp
ZU1hbmFnZXJBY2NlcHRQb2xpY3koQ29va2llTWFuYWdlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCit7CisgICAgLy8gRGVmYXVsdCBwb2xpY3kgaXMgTk9fVEhJUkRfUEFSVFkuCisgICAgZ19h
c3NlcnRfY21waW50KHRlc3QtPmdldEFjY2VwdFBvbGljeSgpLCA9PSwgV0VCS0lUX0NPT0tJRV9Q
T0xJQ1lfQUNDRVBUX05PX1RISVJEX1BBUlRZKTsKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXIt
PmdldFVSSUZvclBhdGgoIi9pbmRleC5odG1sIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50
aWxMb2FkRmluaXNoZWQoKTsKKyAgICBjaGFyKiogZG9tYWlucyA9IHRlc3QtPmdldERvbWFpbnMo
KTsKKyAgICBnX2Fzc2VydChkb21haW5zKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xl
bmd0aChkb21haW5zKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcHN0cihkb21haW5zWzBdLCA9
PSwga0ZpcnN0UGFydHlEb21haW4pOworICAgIHRlc3QtPmRlbGV0ZUFsbENvb2tpZXMoKTsKKwor
ICAgIHRlc3QtPnNldEFjY2VwdFBvbGljeShXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfQUxX
QVlTKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+Z2V0QWNjZXB0UG9saWN5KCksID09LCBX
RUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfQUxXQVlTKTsKKyAgICB0ZXN0LT5sb2FkVVJJKGtT
ZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbmRleC5odG1sIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53
YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBkb21haW5zID0gdGVzdC0+Z2V0RG9tYWlucygp
OworICAgIGdfYXNzZXJ0KGRvbWFpbnMpOworICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVu
Z3RoKGRvbWFpbnMpLCA9PSwgMik7CisgICAgZ19hc3NlcnQodGVzdC0+aGFzRG9tYWluKGtGaXJz
dFBhcnR5RG9tYWluKSk7CisgICAgZ19hc3NlcnQodGVzdC0+aGFzRG9tYWluKGtUaGlyZFBhcnR5
RG9tYWluKSk7CisgICAgdGVzdC0+ZGVsZXRlQWxsQ29va2llcygpOworCisgICAgdGVzdC0+c2V0
QWNjZXB0UG9saWN5KFdFQktJVF9DT09LSUVfUE9MSUNZX0FDQ0VQVF9ORVZFUik7CisgICAgZ19h
c3NlcnRfY21waW50KHRlc3QtPmdldEFjY2VwdFBvbGljeSgpLCA9PSwgV0VCS0lUX0NPT0tJRV9Q
T0xJQ1lfQUNDRVBUX05FVkVSKTsKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZv
clBhdGgoIi9pbmRleC5odG1sIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmlu
aXNoZWQoKTsKKyAgICBkb21haW5zID0gdGVzdC0+Z2V0RG9tYWlucygpOworICAgIGdfYXNzZXJ0
KGRvbWFpbnMpOworICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKGRvbWFpbnMpLCA9
PSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RDb29raWVNYW5hZ2VyRGVsZXRlQ29va2llcyhD
b29raWVNYW5hZ2VyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5zZXRB
Y2NlcHRQb2xpY3koV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX0FMV0FZUyk7CisgICAgdGVz
dC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvaW5kZXguaHRtbCIpLmRhdGEoKSk7
CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnRfY21waW50
KGdfc3Rydl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlucygpKSwgPT0sIDIpOworCisgICAgLy8gRGVs
ZXRlIGZpcnN0IHBhcnR5IGNvb2tpZXMuCisgICAgdGVzdC0+ZGVsZXRlQ29va2llc0ZvckRvbWFp
bihrRmlyc3RQYXJ0eURvbWFpbik7CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgo
dGVzdC0+Z2V0RG9tYWlucygpKSwgPT0sIDEpOworCisgICAgLy8gRGVsZXRlIHRoaXJkIHBhcnR5
IGNvb2tpZXMuCisgICAgdGVzdC0+ZGVsZXRlQ29va2llc0ZvckRvbWFpbihrVGhpcmRQYXJ0eURv
bWFpbik7CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlu
cygpKSwgPT0sIDApOworCisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRo
KCIvaW5kZXguaHRtbCIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVk
KCk7CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlucygp
KSwgPT0sIDIpOworCisgICAgLy8gRGVsZXRlIGFsbCBjb29raWVzLgorICAgIHRlc3QtPmRlbGV0
ZUFsbENvb2tpZXMoKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0LT5n
ZXREb21haW5zKCkpLCA9PSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RDb29raWVNYW5hZ2Vy
Q29va2llc0NoYW5nZWQoQ29va2llTWFuYWdlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7
CisgICAgZ19hc3NlcnQoIXRlc3QtPm1fY29va2llc0NoYW5nZWQpOworICAgIHRlc3QtPnNldEFj
Y2VwdFBvbGljeShXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfQUxXQVlTKTsKKyAgICB0ZXN0
LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbmRleC5odG1sIikuZGF0YSgpKTsK
KyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5t
X2Nvb2tpZXNDaGFuZ2VkKTsKKworICAgIHRlc3QtPmRlbGV0ZUNvb2tpZXNGb3JEb21haW4oa0Zp
cnN0UGFydHlEb21haW4pOworICAgIHRlc3QtPndhaXRVbnRpbENvb2tpZXNDaGFuZ2VkKCk7Cisg
ICAgZ19hc3NlcnQodGVzdC0+bV9jb29raWVzQ2hhbmdlZCk7CisKKyAgICB0ZXN0LT5kZWxldGVB
bGxDb29raWVzKCk7CisgICAgdGVzdC0+d2FpdFVudGlsQ29va2llc0NoYW5nZWQoKTsKKyAgICBn
X2Fzc2VydCh0ZXN0LT5tX2Nvb2tpZXNDaGFuZ2VkKTsKK30KKworc3RhdGljIHZvaWQgdGVzdENv
b2tpZU1hbmFnZXJQZXJzaXN0ZW50U3RvcmFnZShDb29raWVNYW5hZ2VyVGVzdCogdGVzdCwgZ2Nv
bnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5zZXRBY2NlcHRQb2xpY3koV0VCS0lUX0NPT0tJRV9Q
T0xJQ1lfQUNDRVBUX0FMV0FZUyk7CisKKyAgICAvLyBUZXh0IHN0b3JhZ2UgdXNpbmcgYSBuZXcg
ZmlsZS4KKyAgICB0ZXN0LT5zZXRQZXJzaXN0ZW50U3RvcmFnZShXRUJLSVRfQ09PS0lFX1BFUlNJ
U1RFTlRfU1RPUkFHRV9URVhUKTsKKyAgICBjaGFyKiogZG9tYWlucyA9IHRlc3QtPmdldERvbWFp
bnMoKTsKKyAgICBnX2Fzc2VydChkb21haW5zKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2
X2xlbmd0aChkb21haW5zKSwgPT0sIDApOworCisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5n
ZXRVUklGb3JQYXRoKCIvaW5kZXguaHRtbCIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGls
TG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9jb29raWVzQ2hhbmdlZCk7Cisg
ICAgZG9tYWlucyA9IHRlc3QtPmdldERvbWFpbnMoKTsKKyAgICBnX2Fzc2VydChkb21haW5zKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aChkb21haW5zKSwgPT0sIDIpOworCisK
KyAgICAvLyBTUUxpdGUgc3RvcmFnZSB1c2luZyBhIG5ldyBmaWxlLgorICAgIHRlc3QtPnNldFBl
cnNpc3RlbnRTdG9yYWdlKFdFQktJVF9DT09LSUVfUEVSU0lTVEVOVF9TVE9SQUdFX1NRTElURSk7
CisgICAgZG9tYWlucyA9IHRlc3QtPmdldERvbWFpbnMoKTsKKyAgICBnX2Fzc2VydChkb21haW5z
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aChkb21haW5zKSwgPT0sIDApOwor
CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvaW5kZXguaHRtbCIp
LmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3Nl
cnQodGVzdC0+bV9jb29raWVzQ2hhbmdlZCk7CisgICAgZG9tYWlucyA9IHRlc3QtPmdldERvbWFp
bnMoKTsKKyAgICBnX2Fzc2VydChkb21haW5zKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2
X2xlbmd0aChkb21haW5zKSwgPT0sIDIpOworCisgICAgLy8gVGV4dCBzdG9yYWdlIHVzaW5nIGFu
IGV4aXN0aW5nIGZpbGUuCisgICAgdGVzdC0+c2V0UGVyc2lzdGVudFN0b3JhZ2UoV0VCS0lUX0NP
T0tJRV9QRVJTSVNURU5UX1NUT1JBR0VfVEVYVCk7CisgICAgZG9tYWlucyA9IHRlc3QtPmdldERv
bWFpbnMoKTsKKyAgICBnX2Fzc2VydChkb21haW5zKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19z
dHJ2X2xlbmd0aChkb21haW5zKSwgPT0sIDIpOworICAgIHRlc3QtPmRlbGV0ZUFsbENvb2tpZXMo
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0LT5nZXREb21haW5zKCkp
LCA9PSwgMCk7CisKKyAgICAvLyBTUUxpdGUgc3RvcmFnZSB3aXRoIGFuIGV4aXN0aW5nIGZpbGUu
CisgICAgdGVzdC0+c2V0UGVyc2lzdGVudFN0b3JhZ2UoV0VCS0lUX0NPT0tJRV9QRVJTSVNURU5U
X1NUT1JBR0VfU1FMSVRFKTsKKyAgICBkb21haW5zID0gdGVzdC0+Z2V0RG9tYWlucygpOworICAg
IGdfYXNzZXJ0KGRvbWFpbnMpOworICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKGRv
bWFpbnMpLCA9PSwgMik7CisgICAgdGVzdC0+ZGVsZXRlQWxsQ29va2llcygpOworICAgIGdfYXNz
ZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKHRlc3QtPmdldERvbWFpbnMoKSksID09LCAwKTsKK30K
Kworc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVz
c2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSosIFNvdXBDbGllbnRD
b250ZXh0KiwgZ3BvaW50ZXIpCit7CisgICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01F
VEhPRF9HRVQpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09V
UF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKKyAgICBp
ZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9pbmRleC5odG1sIikpIHsKKyAgICAgICAgY2hhciogaW5k
ZXhIdG1sID0gZ19zdHJkdXBfcHJpbnRmKGtJbmRleEh0bWxGb3JtYXQsIHNvdXBfc2VydmVyX2dl
dF9wb3J0KHNlcnZlcikpOworICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19yZXBsYWNlKG1l
c3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJTZXQtQ29va2llIiwgImZvbz1iYXI7IE1heC1BZ2U9
NjAiKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNl
X2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGluZGV4SHRtbCwgc3RybGVuKGluZGV4SHRtbCkpOwor
ICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9pbWFnZS5wbmciKSkKKyAgICAgICAg
c291cF9tZXNzYWdlX2hlYWRlcnNfcmVwbGFjZShtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAi
U2V0LUNvb2tpZSIsICJiYXo9cXV4OyBNYXgtQWdlPTYwIik7CisgICAgZWxzZQorICAgICAgICBz
b3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfRk9VTkQpOwor
ICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOwor
fQorCit2b2lkIGJlZm9yZUFsbCgpCit7CisgICAga1NlcnZlciA9IG5ldyBXZWJLaXRUZXN0U2Vy
dmVyKCk7CisgICAga1NlcnZlci0+cnVuKHNlcnZlckNhbGxiYWNrKTsKKworICAgIGtUZW1wRGly
ZWN0b3J5ID0gZ19kaXJfbWFrZV90bXAoIldlYktpdDJUZXN0cy1YWFhYWFgiLCAwKTsKKyAgICBn
X2Fzc2VydChrVGVtcERpcmVjdG9yeSk7CisKKyAgICBDb29raWVNYW5hZ2VyVGVzdDo6YWRkKCJX
ZWJLaXRDb29raWVNYW5hZ2VyIiwgImFjY2VwdC1wb2xpY3kiLCB0ZXN0Q29va2llTWFuYWdlckFj
Y2VwdFBvbGljeSk7CisgICAgQ29va2llTWFuYWdlclRlc3Q6OmFkZCgiV2ViS2l0Q29va2llTWFu
YWdlciIsICJkZWxldGUtY29va2llcyIsIHRlc3RDb29raWVNYW5hZ2VyRGVsZXRlQ29va2llcyk7
CisgICAgQ29va2llTWFuYWdlclRlc3Q6OmFkZCgiV2ViS2l0Q29va2llTWFuYWdlciIsICJjb29r
aWVzLWNoYW5nZWQiLCB0ZXN0Q29va2llTWFuYWdlckNvb2tpZXNDaGFuZ2VkKTsKKyAgICBDb29r
aWVNYW5hZ2VyVGVzdDo6YWRkKCJXZWJLaXRDb29raWVNYW5hZ2VyIiwgInBlcnNpc3RlbnQtc3Rv
cmFnZSIsIHRlc3RDb29raWVNYW5hZ2VyUGVyc2lzdGVudFN0b3JhZ2UpOworfQorCit2b2lkIGFm
dGVyQWxsKCkKK3sKKyAgICBkZWxldGUga1NlcnZlcjsKKyAgICBnX3JtZGlyKGtUZW1wRGlyZWN0
b3J5KTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0
ay9UZXN0RE9NRE9NV2luZG93LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Mkd0ay9UZXN0RE9NRE9NV2luZG93LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi45OGM2ZTEwCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXQyR3RrL1Rlc3RET01ET01XaW5kb3cuY3BwCkBAIC0wLDAgKzEsMTUyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpbmNsdWRlICJXZWJQcm9jZXNzVGVzdFJ1bm5lci5oIgorI2luY2x1ZGUgIldlYlZpZXdUZXN0
LmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgor
CisjZGVmaW5lIEhUTUxfRE9DVU1FTlQgIjxodG1sPjxoZWFkPjx0aXRsZT48L3RpdGxlPjwvaGVh
ZD48c3R5bGUgdHlwZT0ndGV4dC9jc3MnPiN0ZXN0IHsgZm9udC1zaXplOiAxNnB4OyB9PC9zdHls
ZT48Ym9keT48cCBpZD0ndGVzdCc+dGVzdDwvcD48L2JvZHk+PC9odG1sPiIKKwordHlwZWRlZiBz
dHJ1Y3QgeworICAgIGdib29sZWFuIGxvYWRlZDsKKyAgICBnYm9vbGVhbiBjbGlja2VkOworICAg
IFdlYlByb2Nlc3NUZXN0UnVubmVyKiB0ZXN0UnVubmVyOworICAgIFdlYlZpZXdUZXN0KiB0ZXN0
OworfSBEb21Eb21XaW5kb3dUZXN0U3RhdHVzOworCitzdGF0aWMgRG9tRG9tV2luZG93VGVzdFN0
YXR1cyBzdGF0dXM7CisKK3N0YXRpYyB2b2lkIHNpZ25hbHNOb3RpZnlDYWxsYmFjayhjb25zdCBn
Y2hhciAqa2V5LCBjb25zdCBnY2hhciAqdmFsdWUsIGdjb25zdHBvaW50ZXIpCit7CisgICAgaWYg
KGdfc3RyX2VxdWFsKGtleSwgInJlYWR5IikpIHsKKyAgICAgICAgLy8gVGhlIGRvY3VtZW50IHdh
cyBhbHJlYWR5IGxvYWRlZCBpbiB0aGUgd2VicHJvY2VzcywgYW5kIGl0cyAibG9hZCIKKyAgICAg
ICAgLy8gc2lnbmFsIGNvdWxkbid0IGJlIGNhcHR1cmVkIG9uIHRpbWUgKHdhcyBpc3N1ZWQgYmVm
b3JlIHRoZSB0ZXN0CisgICAgICAgIC8vIHN0YXJ0ZWQpLiBXZSBsb2FkIGl0IGFnYWluIHRvIGZv
cmNlIGEgbmV3ICJsb2FkIiBzaWduYWwgaW4gdGhlCisgICAgICAgIC8vIHdlYnByb2Nlc3MsIHdo
aWNoIHdpbGwgYmUgY2FwdHVyZWQgdGhpcyB0aW1lCisgICAgICAgIHN0YXR1cy50ZXN0LT5sb2Fk
SHRtbChIVE1MX0RPQ1VNRU5ULCAwKTsKKyAgICB9CisKKyAgICBpZiAoZ19zdHJfZXF1YWwoa2V5
LCAibG9hZGVkIikpIHsKKyAgICAgICAgc3RhdHVzLmxvYWRlZCA9IFRSVUU7CisgICAgICAgIHN0
YXR1cy50ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKKworICAgICAgICAv
LyBDbGljayBpbiBhIGtub3duIGxvY2F0aW9uIHdoZXJlIHRoZSB0ZXh0IGlzCisgICAgICAgIHN0
YXR1cy50ZXN0LT5jbGlja01vdXNlQnV0dG9uKDIwLCAxOCwgMSwgMCk7CisgICAgfQorCisgICAg
aWYgKGdfc3RyX2VxdWFsKGtleSwgImNsaWNrZWQiKSkKKyAgICAgICAgc3RhdHVzLmNsaWNrZWQg
PSBUUlVFOworCisgICAgaWYgKGdfc3RyX2VxdWFsKGtleSwgImZpbmlzaCIpKSB7CisgICAgICAg
IHN0YXR1cy50ZXN0ID0gMDsKKyAgICAgICAgc3RhdHVzLnRlc3RSdW5uZXItPmZpbmlzaFRlc3Qo
c3RhdHVzLmxvYWRlZCAmJiBzdGF0dXMuY2xpY2tlZCk7CisgICAgfQorfQorCitzdGF0aWMgdm9p
ZCBkaXNwYXRjaEV2ZW50Tm90aWZ5Q2FsbGJhY2soY29uc3QgZ2NoYXIgKmtleSwgY29uc3QgZ2No
YXIgKnZhbHVlLCBnY29uc3Rwb2ludGVyKQoreworICAgIGlmIChnX3N0cl9lcXVhbChrZXksICJy
ZWFkeSIpKSB7CisgICAgICAgIC8vIFRoZSBkb2N1bWVudCB3YXMgYWxyZWFkeSBsb2FkZWQgaW4g
dGhlIHdlYnByb2Nlc3MsIGFuZCBpdHMgImxvYWQiCisgICAgICAgIC8vIHNpZ25hbCBjb3VsZG4n
dCBiZSBjYXB0dXJlZCBvbiB0aW1lICh3YXMgaXNzdWVkIGJlZm9yZSB0aGUgdGVzdAorICAgICAg
ICAvLyBzdGFydGVkKS4gV2UgbG9hZCBpdCBhZ2FpbiB0byBmb3JjZSBhIG5ldyAibG9hZCIgc2ln
bmFsIGluIHRoZQorICAgICAgICAvLyB3ZWJwcm9jZXNzLCB3aGljaCB3aWxsIGJlIGNhcHR1cmVk
IHRoaXMgdGltZQorICAgICAgICBzdGF0dXMudGVzdC0+bG9hZEh0bWwoSFRNTF9ET0NVTUVOVCwg
MCk7CisgICAgfQorCisgICAgaWYgKGdfc3RyX2VxdWFsKGtleSwgImxvYWRlZCIpKQorICAgICAg
ICBzdGF0dXMubG9hZGVkID0gVFJVRTsKKworICAgIGlmIChnX3N0cl9lcXVhbChrZXksICJjbGlj
a2VkIikpCisgICAgICAgIHN0YXR1cy5jbGlja2VkID0gVFJVRTsKKworICAgIGlmIChnX3N0cl9l
cXVhbChrZXksICJmaW5pc2giKSkgeworICAgICAgICBzdGF0dXMudGVzdCA9IDA7CisgICAgICAg
IHN0YXR1cy50ZXN0UnVubmVyLT5maW5pc2hUZXN0KHN0YXR1cy5sb2FkZWQgJiYgc3RhdHVzLmNs
aWNrZWQpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgdGVzdFdlYktpdERPTURPTVdpbmRvd1Np
Z25hbHMoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgc3RhdHVzLmxv
YWRlZCA9IEZBTFNFOworICAgIHN0YXR1cy5jbGlja2VkID0gRkFMU0U7CisgICAgc3RhdHVzLnRl
c3QgPSB0ZXN0OworCisgICAgc3RhdHVzLnRlc3RSdW5uZXItPnNldE5vdGlmeUNhbGxiYWNrKEdf
Q0FMTEJBQ0soc2lnbmFsc05vdGlmeUNhbGxiYWNrKSwgMCk7CisKKyAgICAvLyBUaGUgSFRNTCBk
b2N1bWVudCB3aWxsIHdlIGxvYWRlZCBsYXRlciwgd2hlbiB0aGUgdGVzdCBpcyAicmVhZHkiIGJl
Y2F1c2UKKyAgICAvLyB3ZSB3YW50IHRvIHRlc3QgdGhlICJsb2FkIiBzaWduYWwKKworICAgIEdW
YXJpYW50QnVpbGRlciBidWlsZGVyOworICAgIGdfdmFyaWFudF9idWlsZGVyX2luaXQoJmJ1aWxk
ZXIsIEdfVkFSSUFOVF9UWVBFX1ZBUkRJQ1QpOworICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZCgm
YnVpbGRlciwgIntzdn0iLCAicGFnZUlEIiwgZ192YXJpYW50X25ld191aW50NjQod2Via2l0X3dl
Yl92aWV3X2dldF9wYWdlX2lkKHN0YXR1cy50ZXN0LT5tX3dlYlZpZXcpKSk7CisgICAgc3RhdHVz
LnRlc3RSdW5uZXItPnJ1blRlc3RBbmRXYWl0KCJXZWJLaXRET01ET01XaW5kb3ciLCAic2lnbmFs
cyIsIGdfdmFyaWFudF9idWlsZGVyX2VuZCgmYnVpbGRlcikpOworICAgIGdfYXNzZXJ0KHN0YXR1
cy50ZXN0UnVubmVyLT5nZXRUZXN0UmVzdWx0KCkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2Vi
S2l0RE9NRE9NV2luZG93RGlzcGF0Y2hFdmVudChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9p
bnRlcikKK3sKKyAgICBzdGF0dXMubG9hZGVkID0gRkFMU0U7CisgICAgc3RhdHVzLmNsaWNrZWQg
PSBGQUxTRTsKKyAgICBzdGF0dXMudGVzdCA9IHRlc3Q7CisKKyAgICBzdGF0dXMudGVzdFJ1bm5l
ci0+c2V0Tm90aWZ5Q2FsbGJhY2soR19DQUxMQkFDSyhkaXNwYXRjaEV2ZW50Tm90aWZ5Q2FsbGJh
Y2spLCAwKTsKKworICAgIC8vIFRoZSBIVE1MIGRvY3VtZW50IHdpbGwgd2UgbG9hZGVkIGxhdGVy
LCB3aGVuIHRoZSB0ZXN0IGlzICJyZWFkeSIgYmVjYXVzZQorICAgIC8vIHdlIHdhbnQgdG8gdGVz
dCB0aGUgImxvYWQiIHNpZ25hbAorCisgICAgR1ZhcmlhbnRCdWlsZGVyIGJ1aWxkZXI7CisgICAg
Z192YXJpYW50X2J1aWxkZXJfaW5pdCgmYnVpbGRlciwgR19WQVJJQU5UX1RZUEVfVkFSRElDVCk7
CisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKCZidWlsZGVyLCAie3N2fSIsICJwYWdlSUQiLCBn
X3ZhcmlhbnRfbmV3X3VpbnQ2NCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3BhZ2VfaWQoc3RhdHVzLnRl
c3QtPm1fd2ViVmlldykpKTsKKyAgICBzdGF0dXMudGVzdFJ1bm5lci0+cnVuVGVzdEFuZFdhaXQo
IldlYktpdERPTURPTVdpbmRvdyIsICJkaXNwYXRjaC1ldmVudCIsIGdfdmFyaWFudF9idWlsZGVy
X2VuZCgmYnVpbGRlcikpOworICAgIGdfYXNzZXJ0KHN0YXR1cy50ZXN0UnVubmVyLT5nZXRUZXN0
UmVzdWx0KCkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViS2l0RE9NRE9NV2luZG93R2V0Q29t
cHV0ZWRTdHlsZShXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBzdGF0
dXMubG9hZGVkID0gRkFMU0U7CisgICAgc3RhdHVzLmNsaWNrZWQgPSBGQUxTRTsKKyAgICBzdGF0
dXMudGVzdCA9IHRlc3Q7CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogdGVzdEhUTUwgPSBIVE1M
X0RPQ1VNRU5UOworICAgIHN0YXR1cy50ZXN0LT5sb2FkSHRtbCh0ZXN0SFRNTCwgMCk7CisgICAg
c3RhdHVzLnRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgR1ZhcmlhbnRCdWls
ZGVyIGJ1aWxkZXI7CisgICAgZ192YXJpYW50X2J1aWxkZXJfaW5pdCgmYnVpbGRlciwgR19WQVJJ
QU5UX1RZUEVfVkFSRElDVCk7CisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKCZidWlsZGVyLCAi
e3N2fSIsICJwYWdlSUQiLCBnX3ZhcmlhbnRfbmV3X3VpbnQ2NCh3ZWJraXRfd2ViX3ZpZXdfZ2V0
X3BhZ2VfaWQoc3RhdHVzLnRlc3QtPm1fd2ViVmlldykpKTsKKyAgICBnX2Fzc2VydChzdGF0dXMu
dGVzdFJ1bm5lci0+cnVuVGVzdCgiV2ViS2l0RE9NRE9NV2luZG93IiwgImdldC1jb21wdXRlZC1z
dHlsZSIsIGdfdmFyaWFudF9idWlsZGVyX2VuZCgmYnVpbGRlcikpKTsKK30KKwordm9pZCBiZWZv
cmVBbGwoKQoreworICAgIHN0YXR1cy50ZXN0UnVubmVyID0gbmV3IFdlYlByb2Nlc3NUZXN0UnVu
bmVyKCk7CisgICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF93ZWJfZXh0ZW5zaW9uc19kaXJlY3Rv
cnkod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCksIFdFQktJVF9URVNUX1dFQl9FWFRF
TlNJT05TX0RJUik7CisKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRET01ET01XaW5kb3ci
LCAic2lnbmFscyIsIHRlc3RXZWJLaXRET01ET01XaW5kb3dTaWduYWxzKTsKKyAgICBXZWJWaWV3
VGVzdDo6YWRkKCJXZWJLaXRET01ET01XaW5kb3ciLCAiZGlzcGF0Y2gtZXZlbnQiLCB0ZXN0V2Vi
S2l0RE9NRE9NV2luZG93RGlzcGF0Y2hFdmVudCk7CisgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2Vi
S2l0RE9NRE9NV2luZG93IiwgImdldC1jb21wdXRlZC1zdHlsZSIsIHRlc3RXZWJLaXRET01ET01X
aW5kb3dHZXRDb21wdXRlZFN0eWxlKTsKK30KKwordm9pZCBhZnRlckFsbCgpCit7CisgICAgZGVs
ZXRlIHN0YXR1cy50ZXN0UnVubmVyOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RET01Ob2RlLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Mkd0ay9UZXN0RE9NTm9kZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYmQzMjA3NwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0RE9NTm9kZS5jcHAKQEAgLTAsMCArMSw4NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Rlc3RSdW5uZXIuaCIKKyNpbmNsdWRlICJXZWJWaWV3VGVz
dC5oIgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdDIuaD4K
Kworc3RhdGljIFdlYlByb2Nlc3NUZXN0UnVubmVyKiB0ZXN0UnVubmVyOworCitzdGF0aWMgdm9p
ZCB0ZXN0V2ViS2l0RE9NTm9kZUhpZXJhcmNoeU5hdmlnYXRpb24oV2ViVmlld1Rlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHRlc3RIVE1MID0gIjxo
dG1sPjxoZWFkPjx0aXRsZT5UaGlzIGlzIHRoZSB0aXRsZTwvdGl0bGU+PC9oZWFkPjxib2R5Pjxw
PjE8L3A+PHA+MjwvcD48cD4zPC9wPjwvYm9keT48L2h0bWw+IjsKKyAgICB0ZXN0LT5sb2FkSHRt
bCh0ZXN0SFRNTCwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAg
ICBHVmFyaWFudEJ1aWxkZXIgYnVpbGRlcjsKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9pbml0KCZi
dWlsZGVyLCBHX1ZBUklBTlRfVFlQRV9WQVJESUNUKTsKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9h
ZGQoJmJ1aWxkZXIsICJ7c3Z9IiwgInBhZ2VJRCIsIGdfdmFyaWFudF9uZXdfdWludDY0KHdlYmtp
dF93ZWJfdmlld19nZXRfcGFnZV9pZCh0ZXN0LT5tX3dlYlZpZXcpKSk7CisgICAgZ19hc3NlcnQo
dGVzdFJ1bm5lci0+cnVuVGVzdCgiV2ViS2l0RE9NTm9kZSIsICJoaWVyYXJjaHktbmF2aWdhdGlv
biIsIGdfdmFyaWFudF9idWlsZGVyX2VuZCgmYnVpbGRlcikpKTsKK30KKworc3RhdGljIHZvaWQg
dGVzdFdlYktpdERPTU5vZGVJbnNlcnRpb24oV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHRlc3RIVE1MID0gIjxodG1sPjxib2R5Pjwv
Ym9keT48L2h0bWw+IjsKKyAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0SFRNTCwgMCk7CisgICAgdGVz
dC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBHVmFyaWFudEJ1aWxkZXIgYnVpbGRl
cjsKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9pbml0KCZidWlsZGVyLCBHX1ZBUklBTlRfVFlQRV9W
QVJESUNUKTsKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoJmJ1aWxkZXIsICJ7c3Z9IiwgInBh
Z2VJRCIsIGdfdmFyaWFudF9uZXdfdWludDY0KHdlYmtpdF93ZWJfdmlld19nZXRfcGFnZV9pZCh0
ZXN0LT5tX3dlYlZpZXcpKSk7CisgICAgZ19hc3NlcnQodGVzdFJ1bm5lci0+cnVuVGVzdCgiV2Vi
S2l0RE9NTm9kZSIsICJpbnNlcnRpb24iLCBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQoJmJ1aWxkZXIp
KSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJLaXRET01Ob2RlVGFnTmFtZXMoV2ViVmlld1Rl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHRlc3RI
VE1MID0gIjxodG1sPjxoZWFkPjwvaGVhZD48Ym9keT4iCisgICAgICAgICI8dmlkZW8gaWQ9J3Zp
ZGVvJyBwcmVsb2FkPSdub25lJz4iCisgICAgICAgICIgICAgPHNvdXJjZSBzcmM9J21vdmllLm9n
ZycgdHlwZT0ndmlkZW8vb2dnJz4iCisgICAgICAgICIgICAgICAgIFlvdXIgYnJvd3NlciBkb2Vz
IG5vdCBzdXBwb3J0IHRoZSB2aWRlbyB0YWcuIgorICAgICAgICAiPC92aWRlbz4iCisgICAgICAg
ICI8dmlkZW8gaWQ9J3ZpZGVvMicgcHJlbG9hZD0nbm9uZSc+IgorICAgICAgICAiICAgICA8c291
cmNlIHNyYz0nbW92aWUub2dnJyB0eXBlPSd2aWRlby9vZ2cnPiIKKyAgICAgICAgIiAgICAgICAg
WW91ciBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgdGhlIHZpZGVvIHRhZy4iCisgICAgICAgICI8
L3ZpZGVvPiIKKyAgICAgICAgIjxpbnB1dCB0eXBlPSdoaWRkZW4nIGlkPSd0ZXN0JyBuYW1lPSdm
aW5pc2gnIHZhbHVlPSdmYWxzZSc+PC9ib2R5PjwvaHRtbD4iOworICAgIHRlc3QtPmxvYWRIdG1s
KHRlc3RIVE1MLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAg
IEdWYXJpYW50QnVpbGRlciBidWlsZGVyOworICAgIGdfdmFyaWFudF9idWlsZGVyX2luaXQoJmJ1
aWxkZXIsIEdfVkFSSUFOVF9UWVBFX1ZBUkRJQ1QpOworICAgIGdfdmFyaWFudF9idWlsZGVyX2Fk
ZCgmYnVpbGRlciwgIntzdn0iLCAicGFnZUlEIiwgZ192YXJpYW50X25ld191aW50NjQod2Via2l0
X3dlYl92aWV3X2dldF9wYWdlX2lkKHRlc3QtPm1fd2ViVmlldykpKTsKKyAgICBnX2Fzc2VydCh0
ZXN0UnVubmVyLT5ydW5UZXN0KCJXZWJLaXRET01Ob2RlIiwgInRhZy1uYW1lcyIsIGdfdmFyaWFu
dF9idWlsZGVyX2VuZCgmYnVpbGRlcikpKTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQoreworICAg
IHRlc3RSdW5uZXIgPSBuZXcgV2ViUHJvY2Vzc1Rlc3RSdW5uZXIoKTsKKyAgICB3ZWJraXRfd2Vi
X2NvbnRleHRfc2V0X3dlYl9leHRlbnNpb25zX2RpcmVjdG9yeSh3ZWJraXRfd2ViX2NvbnRleHRf
Z2V0X2RlZmF1bHQoKSwgV0VCS0lUX1RFU1RfV0VCX0VYVEVOU0lPTlNfRElSKTsKKworICAgIFdl
YlZpZXdUZXN0OjphZGQoIldlYktpdERPTU5vZGUiLCAiaGllcmFyY2h5LW5hdmlnYXRpb24iLCB0
ZXN0V2ViS2l0RE9NTm9kZUhpZXJhcmNoeU5hdmlnYXRpb24pOworICAgIFdlYlZpZXdUZXN0Ojph
ZGQoIldlYktpdERPTU5vZGUiLCAiaW5zZXJ0aW9uIiwgdGVzdFdlYktpdERPTU5vZGVJbnNlcnRp
b24pOworICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdERPTU5vZGUiLCAidGFnLW5hbWVzIiwg
dGVzdFdlYktpdERPTU5vZGVUYWdOYW1lcyk7Cit9CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworICAg
IGRlbGV0ZSB0ZXN0UnVubmVyOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXQyR3RrL1Rlc3REb3dubG9hZHMuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXQyR3RrL1Rlc3REb3dubG9hZHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmNlMTU5OTAKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdERvd25sb2Fkcy5jcHAKQEAgLTAsMCArMSw1MjIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5oIgorI2luY2x1ZGUgIldlYlZpZXdUZXN0
LmgiCisjaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5j
bHVkZSA8bGlic291cC9zb3VwLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8d2Vi
a2l0Mi93ZWJraXQyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9n
b2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCitzdGF0aWMgY2hhcioga1RlbXBEaXJlY3Rvcnk7
CisKK2NsYXNzIERvd25sb2FkVGVzdDogcHVibGljIFRlc3QgeworcHVibGljOgorICAgIE1BS0Vf
R0xJQl9URVNUX0ZJWFRVUkUoRG93bmxvYWRUZXN0KTsKKworICAgIGVudW0gRG93bmxvYWRFdmVu
dCB7CisgICAgICAgIFN0YXJ0ZWQsCisgICAgICAgIFJlY2VpdmVkUmVzcG9uc2UsCisgICAgICAg
IENyZWF0ZWREZXN0aW5hdGlvbiwKKyAgICAgICAgUmVjZWl2ZWREYXRhLAorICAgICAgICBGYWls
ZWQsCisgICAgICAgIEZpbmlzaGVkCisgICAgfTsKKworICAgIHN0YXRpYyB2b2lkIHJlY2VpdmVk
UmVzcG9uc2VDYWxsYmFjayhXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIEdQYXJhbVNwZWMqLCBE
b3dubG9hZFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICBnX2Fzc2VydCh3ZWJraXRfZG93bmxv
YWRfZ2V0X3Jlc3BvbnNlKGRvd25sb2FkKSk7CisgICAgICAgIHRlc3QtPnJlY2VpdmVkUmVzcG9u
c2UoZG93bmxvYWQpOworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBjcmVhdGVkRGVzdGlu
YXRpb25DYWxsYmFjayhXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IGdjaGFyKiBkZXN0
aW5hdGlvbiwgRG93bmxvYWRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQod2Vi
a2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbihkb3dubG9hZCkpOworICAgICAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbihkb3dubG9hZCksID09LCBk
ZXN0aW5hdGlvbik7CisgICAgICAgIHRlc3QtPmNyZWF0ZWREZXN0aW5hdGlvbihkb3dubG9hZCwg
ZGVzdGluYXRpb24pOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICBzdGF0aWMg
Z2Jvb2xlYW4gcmVjZWl2ZWREYXRhQ2FsbGJhY2soV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBn
dWludDY0IGRhdGFMZW5ndGgsIERvd25sb2FkVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRl
c3QtPnJlY2VpdmVkRGF0YShkb3dubG9hZCwgZGF0YUxlbmd0aCk7CisgICAgICAgIHJldHVybiBU
UlVFOworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBmaW5pc2hlZENhbGxiYWNrKFdlYktp
dERvd25sb2FkKiBkb3dubG9hZCwgRG93bmxvYWRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAg
dGVzdC0+ZmluaXNoZWQoZG93bmxvYWQpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisK
KyAgICBzdGF0aWMgZ2Jvb2xlYW4gZmFpbGVkQ2FsbGJhY2soV2ViS2l0RG93bmxvYWQqIGRvd25s
b2FkLCBHRXJyb3IqIGVycm9yLCBEb3dubG9hZFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICBn
X2Fzc2VydChlcnJvcik7CisgICAgICAgIHRlc3QtPmZhaWxlZChkb3dubG9hZCwgZXJyb3IpOwor
ICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gZGVjaWRl
RGVzdGluYXRpb25DYWxsYmFjayhXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IGdjaGFy
KiBzdWdnZXN0ZWRGaWxlbmFtZSwgRG93bmxvYWRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAg
Z19hc3NlcnQoc3VnZ2VzdGVkRmlsZW5hbWUpOworICAgICAgICB0ZXN0LT5kZWNpZGVEZXN0aW5h
dGlvbihkb3dubG9hZCwgc3VnZ2VzdGVkRmlsZW5hbWUpOworICAgICAgICByZXR1cm4gVFJVRTsK
KyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBkb3dubG9hZFN0YXJ0ZWRDYWxsYmFjayhXZWJLaXRX
ZWJDb250ZXh0KiBjb250ZXh0LCBXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIERvd25sb2FkVGVz
dCogdGVzdCkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9kb3dubG9hZF9nZXRfcmVx
dWVzdChkb3dubG9hZCkpOworICAgICAgICB0ZXN0LT5zdGFydGVkKGRvd25sb2FkKTsKKyAgICAg
ICAgZ19zaWduYWxfY29ubmVjdChkb3dubG9hZCwgIm5vdGlmeTo6cmVzcG9uc2UiLCBHX0NBTExC
QUNLKHJlY2VpdmVkUmVzcG9uc2VDYWxsYmFjayksIHRlc3QpOworICAgICAgICBnX3NpZ25hbF9j
b25uZWN0KGRvd25sb2FkLCAiY3JlYXRlZC1kZXN0aW5hdGlvbiIsIEdfQ0FMTEJBQ0soY3JlYXRl
ZERlc3RpbmF0aW9uQ2FsbGJhY2spLCB0ZXN0KTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChk
b3dubG9hZCwgInJlY2VpdmVkLWRhdGEiLCBHX0NBTExCQUNLKHJlY2VpdmVkRGF0YUNhbGxiYWNr
KSwgdGVzdCk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoZG93bmxvYWQsICJmaW5pc2hlZCIs
IEdfQ0FMTEJBQ0soZmluaXNoZWRDYWxsYmFjayksIHRlc3QpOworICAgICAgICBnX3NpZ25hbF9j
b25uZWN0KGRvd25sb2FkLCAiZmFpbGVkIiwgR19DQUxMQkFDSyhmYWlsZWRDYWxsYmFjayksIHRl
c3QpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGRvd25sb2FkLCAiZGVjaWRlLWRlc3RpbmF0
aW9uIiwgR19DQUxMQkFDSyhkZWNpZGVEZXN0aW5hdGlvbkNhbGxiYWNrKSwgdGVzdCk7CisgICAg
fQorCisgICAgRG93bmxvYWRUZXN0KCkKKyAgICAgICAgOiBtX3dlYkNvbnRleHQod2Via2l0X3dl
Yl9jb250ZXh0X2dldF9kZWZhdWx0KCkpCisgICAgICAgICwgbV9tYWluTG9vcChnX21haW5fbG9v
cF9uZXcoMCwgVFJVRSkpCisgICAgICAgICwgbV9kb3dubG9hZFNpemUoMCkKKyAgICB7CisgICAg
ICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJDb250ZXh0LCAiZG93bmxvYWQtc3RhcnRlZCIsIEdf
Q0FMTEJBQ0soZG93bmxvYWRTdGFydGVkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICB9CisKKyAgICB+
RG93bmxvYWRUZXN0KCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5l
Y3RfbWF0Y2hlZChtX3dlYkNvbnRleHQsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAs
IHRoaXMpOworICAgICAgICBnX21haW5fbG9vcF91bnJlZihtX21haW5Mb29wKTsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRlZChXZWJLaXREb3dubG9hZCogZG93bmxvYWQpCisgICAg
eworICAgICAgICBtX2Rvd25sb2FkRXZlbnRzLmFwcGVuZChTdGFydGVkKTsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRSZXNwb25zZShXZWJLaXREb3dubG9hZCogZG93bmxvYWQp
CisgICAgeworICAgICAgICBtX2Rvd25sb2FkRXZlbnRzLmFwcGVuZChSZWNlaXZlZFJlc3BvbnNl
KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlZERlc3RpbmF0aW9uKFdlYktpdERv
d25sb2FkKiBkb3dubG9hZCwgY29uc3QgY2hhciogZGVzdGluYXRpb24pCisgICAgeworICAgICAg
ICBtX2Rvd25sb2FkRXZlbnRzLmFwcGVuZChDcmVhdGVkRGVzdGluYXRpb24pOworICAgIH0KKwor
ICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlZERhdGEoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBn
dWludDY0IGRhdGFMZW5ndGgpCisgICAgeworICAgICAgICBtX2Rvd25sb2FkU2l6ZSArPSBkYXRh
TGVuZ3RoOworICAgICAgICBpZiAoIW1fZG93bmxvYWRFdmVudHMuY29udGFpbnMoUmVjZWl2ZWRE
YXRhKSkKKyAgICAgICAgICAgIG1fZG93bmxvYWRFdmVudHMuYXBwZW5kKFJlY2VpdmVkRGF0YSk7
CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGZpbmlzaGVkKFdlYktpdERvd25sb2FkKiBkb3du
bG9hZCkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0X2NtcHVpbnQobV9kb3dubG9hZFNpemUsID09
LCB3ZWJraXRfZG93bmxvYWRfZ2V0X3JlY2VpdmVkX2RhdGFfbGVuZ3RoKGRvd25sb2FkKSk7Cisg
ICAgICAgIG1fZG93bmxvYWRFdmVudHMuYXBwZW5kKEZpbmlzaGVkKTsKKyAgICAgICAgZ19tYWlu
X2xvb3BfcXVpdChtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZmFpbGVk
KFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgR0Vycm9yKiBlcnJvcikKKyAgICB7CisgICAgICAg
IG1fZG93bmxvYWRFdmVudHMuYXBwZW5kKEZhaWxlZCk7CisgICAgfQorCisgICAgdmlydHVhbCB2
b2lkIGRlY2lkZURlc3RpbmF0aW9uKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgY29uc3QgZ2No
YXIqIHN1Z2dlc3RlZEZpbGVuYW1lKQorICAgIHsKKyAgICAgICAgR093blB0cjxjaGFyPiBkZXN0
aW5hdGlvbihnX2J1aWxkX2ZpbGVuYW1lKGtUZW1wRGlyZWN0b3J5LCBzdWdnZXN0ZWRGaWxlbmFt
ZSwgTlVMTCkpOworICAgICAgICBHT3duUHRyPGNoYXI+IGRlc3RpbmF0aW9uVVJJKGdfZmlsZW5h
bWVfdG9fdXJpKGRlc3RpbmF0aW9uLmdldCgpLCAwLCAwKSk7CisgICAgICAgIHdlYmtpdF9kb3du
bG9hZF9zZXRfZGVzdGluYXRpb24oZG93bmxvYWQsIGRlc3RpbmF0aW9uVVJJLmdldCgpKTsKKyAg
ICB9CisKKyAgICBXZWJLaXREb3dubG9hZCogZG93bmxvYWRVUklBbmRXYWl0VW50aWxGaW5pc2hl
cyhjb25zdCBDU3RyaW5nJiByZXF1ZXN0VVJJKQorICAgIHsKKyAgICAgICAgV2ViS2l0RG93bmxv
YWQqIGRvd25sb2FkID0gd2Via2l0X3dlYl9jb250ZXh0X2Rvd25sb2FkX3VyaShtX3dlYkNvbnRl
eHQsIHJlcXVlc3RVUkkuZGF0YSgpKTsKKyAgICAgICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hl
blRlc3RGaW5pc2hlcyhHX09CSkVDVChkb3dubG9hZCkpOworCisgICAgICAgIFdlYktpdFVSSVJl
cXVlc3QqIHJlcXVlc3QgPSB3ZWJraXRfZG93bmxvYWRfZ2V0X3JlcXVlc3QoZG93bmxvYWQpOwor
ICAgICAgICBnX2Fzc2VydChyZXF1ZXN0KTsKKyAgICAgICAgQVNTRVJUX0NNUF9DU1RSSU5HKHdl
YmtpdF91cmlfcmVxdWVzdF9nZXRfdXJpKHJlcXVlc3QpLCA9PSwgcmVxdWVzdFVSSSk7CisKKyAg
ICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworCisgICAgICAgIHJldHVybiBkb3du
bG9hZDsKKyAgICB9CisKKyAgICB2b2lkIGNoZWNrRGVzdGluYXRpb25BbmREZWxldGVGaWxlKFdl
YktpdERvd25sb2FkKiBkb3dubG9hZCwgY29uc3QgY2hhciogZXhwZWN0ZWROYW1lKQorICAgIHsK
KyAgICAgICAgaWYgKCF3ZWJraXRfZG93bmxvYWRfZ2V0X2Rlc3RpbmF0aW9uKGRvd25sb2FkKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgR1JlZlB0cjxHRmlsZT4gZGVzdEZpbGUgPSBh
ZG9wdEdSZWYoZ19maWxlX25ld19mb3JfdXJpKHdlYmtpdF9kb3dubG9hZF9nZXRfZGVzdGluYXRp
b24oZG93bmxvYWQpKSk7CisgICAgICAgIEdPd25QdHI8Y2hhcj4gZGVzdEJhc2VuYW1lKGdfZmls
ZV9nZXRfYmFzZW5hbWUoZGVzdEZpbGUuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3Ry
KGRlc3RCYXNlbmFtZS5nZXQoKSwgPT0sIGV4cGVjdGVkTmFtZSk7CisKKyAgICAgICAgZ19maWxl
X2RlbGV0ZShkZXN0RmlsZS5nZXQoKSwgMCwgMCk7CisgICAgfQorCisgICAgV2ViS2l0V2ViQ29u
dGV4dCogbV93ZWJDb250ZXh0OworICAgIEdNYWluTG9vcCogbV9tYWluTG9vcDsKKyAgICBWZWN0
b3I8RG93bmxvYWRFdmVudD4gbV9kb3dubG9hZEV2ZW50czsKKyAgICBndWludDY0IG1fZG93bmxv
YWRTaXplOworfTsKKworc3RhdGljIHZvaWQgdGVzdERvd25sb2FkTG9jYWxGaWxlKERvd25sb2Fk
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBHT3duUHRyPGNoYXI+IHNvdXJjZVBh
dGgoZ19idWlsZF9maWxlbmFtZShUZXN0OjpnZXRXZWJLaXQxVGVzdFJlc291Y2VzRGlyKCkuZGF0
YSgpLCAidGVzdC5wZGYiLCBOVUxMKSk7CisgICAgR1JlZlB0cjxHRmlsZT4gc291cmNlID0gYWRv
cHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgoc291cmNlUGF0aC5nZXQoKSkpOworICAgIEdSZWZQ
dHI8R0ZpbGVJbmZvPiBzb3VyY2VJbmZvID0gYWRvcHRHUmVmKGdfZmlsZV9xdWVyeV9pbmZvKHNv
dXJjZS5nZXQoKSwgR19GSUxFX0FUVFJJQlVURV9TVEFOREFSRF9TSVpFLCBzdGF0aWNfY2FzdDxH
RmlsZVF1ZXJ5SW5mb0ZsYWdzPigwKSwgMCwgMCkpOworICAgIEdPd25QdHI8Y2hhcj4gc291cmNl
VVJJKGdfZmlsZV9nZXRfdXJpKHNvdXJjZS5nZXQoKSkpOworICAgIEdSZWZQdHI8V2ViS2l0RG93
bmxvYWQ+IGRvd25sb2FkID0gYWRvcHRHUmVmKHRlc3QtPmRvd25sb2FkVVJJQW5kV2FpdFVudGls
RmluaXNoZXMoc291cmNlVVJJLmdldCgpKSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9kb3dubG9h
ZF9nZXRfd2ViX3ZpZXcoZG93bmxvYWQuZ2V0KCkpKTsKKworICAgIFZlY3RvcjxEb3dubG9hZFRl
c3Q6OkRvd25sb2FkRXZlbnQ+JiBldmVudHMgPSB0ZXN0LT5tX2Rvd25sb2FkRXZlbnRzOworICAg
IGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgNSk7CisgICAgZ19hc3NlcnRfY21w
aW50KGV2ZW50c1swXSwgPT0sIERvd25sb2FkVGVzdDo6U3RhcnRlZCk7CisgICAgZ19hc3NlcnRf
Y21waW50KGV2ZW50c1sxXSwgPT0sIERvd25sb2FkVGVzdDo6UmVjZWl2ZWRSZXNwb25zZSk7Cisg
ICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIERvd25sb2FkVGVzdDo6Q3JlYXRlZERl
c3RpbmF0aW9uKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzNdLCA9PSwgRG93bmxvYWRU
ZXN0OjpSZWNlaXZlZERhdGEpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbNF0sID09LCBE
b3dubG9hZFRlc3Q6OkZpbmlzaGVkKTsKKworICAgIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3Qg
PSB3ZWJraXRfZG93bmxvYWRfZ2V0X3JlcXVlc3QoZG93bmxvYWQuZ2V0KCkpOworICAgIGdfYXNz
ZXJ0KHJlcXVlc3QpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0
X3VyaShyZXF1ZXN0KSwgPT0sIHNvdXJjZVVSSS5nZXQoKSk7CisKKyAgICBnX2Fzc2VydF9jbXBp
bnQodGVzdC0+bV9kb3dubG9hZFNpemUsID09LCBnX2ZpbGVfaW5mb19nZXRfc2l6ZShzb3VyY2VJ
bmZvLmdldCgpKSk7CisgICAgZ19hc3NlcnQod2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlv
bihkb3dubG9hZC5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHdlYmtpdF9kb3dubG9h
ZF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNzKGRvd25sb2FkLmdldCgpKSwgPT0sIDEpOworICAgIHRl
c3QtPmNoZWNrRGVzdGluYXRpb25BbmREZWxldGVGaWxlKGRvd25sb2FkLmdldCgpLCAidGVzdC5w
ZGYiKTsKK30KKworY2xhc3MgRG93bmxvYWRFcnJvclRlc3Q6IHB1YmxpYyBEb3dubG9hZFRlc3Qg
eworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoRG93bmxvYWRFcnJvclRlc3Qp
OworCisgICAgRG93bmxvYWRFcnJvclRlc3QoKQorICAgICAgICA6IG1fZXhwZWN0ZWRFcnJvcihX
RUJLSVRfRE9XTkxPQURfRVJST1JfTkVUV09SSykKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBy
ZWNlaXZlZFJlc3BvbnNlKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCkKKyAgICB7CisgICAgICAg
IERvd25sb2FkVGVzdDo6cmVjZWl2ZWRSZXNwb25zZShkb3dubG9hZCk7CisgICAgICAgIGlmICht
X2V4cGVjdGVkRXJyb3IgPT0gV0VCS0lUX0RPV05MT0FEX0VSUk9SX0NBTkNFTExFRF9CWV9VU0VS
KQorICAgICAgICAgICAgd2Via2l0X2Rvd25sb2FkX2NhbmNlbChkb3dubG9hZCk7CisgICAgfQor
CisgICAgdm9pZCBjcmVhdGVkRGVzdGluYXRpb24oV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBj
b25zdCBjaGFyKiBkZXN0aW5hdGlvbikKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFj
aGVkKCk7CisgICAgfQorCisgICAgdm9pZCBmYWlsZWQoV2ViS2l0RG93bmxvYWQqIGRvd25sb2Fk
LCBHRXJyb3IqIGVycm9yKQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQoZ19lcnJvcl9tYXRjaGVz
KGVycm9yLCBXRUJLSVRfRE9XTkxPQURfRVJST1IsIG1fZXhwZWN0ZWRFcnJvcikpOworICAgICAg
ICBEb3dubG9hZFRlc3Q6OmZhaWxlZChkb3dubG9hZCwgZXJyb3IpOworICAgIH0KKworICAgIHZv
aWQgZGVjaWRlRGVzdGluYXRpb24oV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBjb25zdCBnY2hh
ciogc3VnZ2VzdGVkRmlsZW5hbWUpCisgICAgeworICAgICAgICBpZiAobV9leHBlY3RlZEVycm9y
ICE9IFdFQktJVF9ET1dOTE9BRF9FUlJPUl9ERVNUSU5BVElPTikgeworICAgICAgICAgICAgRG93
bmxvYWRUZXN0OjpkZWNpZGVEZXN0aW5hdGlvbihkb3dubG9hZCwgc3VnZ2VzdGVkRmlsZW5hbWUp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHdlYmtpdF9kb3dubG9h
ZF9zZXRfZGVzdGluYXRpb24oZG93bmxvYWQsICJmaWxlOi8vL2Zvby9iYXIiKTsKKyAgICB9CisK
KyAgICBXZWJLaXREb3dubG9hZEVycm9yIG1fZXhwZWN0ZWRFcnJvcjsKK307CisKK3N0YXRpYyB2
b2lkIHRlc3REb3dubG9hZExvY2FsRmlsZUVycm9yKERvd25sb2FkRXJyb3JUZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPm1fZXhwZWN0ZWRFcnJvciA9IFdFQktJVF9ET1dO
TE9BRF9FUlJPUl9ORVRXT1JLOworICAgIEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+IGRvd25sb2Fk
ID0gYWRvcHRHUmVmKHRlc3QtPmRvd25sb2FkVVJJQW5kV2FpdFVudGlsRmluaXNoZXMoImZpbGU6
Ly8vZm9vL2JhciIpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2Rvd25sb2FkX2dldF93ZWJfdmll
dyhkb3dubG9hZC5nZXQoKSkpOworCisgICAgVmVjdG9yPERvd25sb2FkVGVzdDo6RG93bmxvYWRF
dmVudD4mIGV2ZW50cyA9IHRlc3QtPm1fZG93bmxvYWRFdmVudHM7CisgICAgZ19hc3NlcnRfY21w
aW50KGV2ZW50cy5zaXplKCksID09LCAzKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBd
LCA9PSwgRG93bmxvYWRUZXN0OjpTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRz
WzFdLCA9PSwgRG93bmxvYWRUZXN0OjpGYWlsZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVu
dHNbMl0sID09LCBEb3dubG9hZFRlc3Q6OkZpbmlzaGVkKTsKKyAgICBldmVudHMuY2xlYXIoKTsK
KyAgICBnX2Fzc2VydF9jbXBmbG9hdCh3ZWJraXRfZG93bmxvYWRfZ2V0X2VzdGltYXRlZF9wcm9n
cmVzcyhkb3dubG9hZC5nZXQoKSksIDwsIDEpOworCisgICAgdGVzdC0+bV9leHBlY3RlZEVycm9y
ID0gV0VCS0lUX0RPV05MT0FEX0VSUk9SX0RFU1RJTkFUSU9OOworICAgIEdPd25QdHI8Y2hhcj4g
cGF0aChnX2J1aWxkX2ZpbGVuYW1lKFRlc3Q6OmdldFdlYktpdDFUZXN0UmVzb3VjZXNEaXIoKS5k
YXRhKCksICJ0ZXN0LnBkZiIsIE5VTEwpKTsKKyAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRv
cHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgocGF0aC5nZXQoKSkpOworICAgIEdPd25QdHI8Y2hh
cj4gdXJpKGdfZmlsZV9nZXRfdXJpKGZpbGUuZ2V0KCkpKTsKKyAgICBkb3dubG9hZCA9IGFkb3B0
R1JlZih0ZXN0LT5kb3dubG9hZFVSSUFuZFdhaXRVbnRpbEZpbmlzaGVzKHVyaS5nZXQoKSkpOwor
ICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG93bmxvYWRfZ2V0X3dlYl92aWV3KGRvd25sb2FkLmdldCgp
KSk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDQpOworICAgIGdf
YXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBEb3dubG9hZFRlc3Q6OlN0YXJ0ZWQpOworICAg
IGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBEb3dubG9hZFRlc3Q6OlJlY2VpdmVkUmVz
cG9uc2UpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBEb3dubG9hZFRlc3Q6
OkZhaWxlZCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1szXSwgPT0sIERvd25sb2FkVGVz
dDo6RmluaXNoZWQpOworICAgIGV2ZW50cy5jbGVhcigpOworICAgIGdfYXNzZXJ0X2NtcGZsb2F0
KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNzKGRvd25sb2FkLmdldCgpKSwg
PCwgMSk7CisgICAgdGVzdC0+Y2hlY2tEZXN0aW5hdGlvbkFuZERlbGV0ZUZpbGUoZG93bmxvYWQu
Z2V0KCksICJiYXIiKTsKKworICAgIHRlc3QtPm1fZXhwZWN0ZWRFcnJvciA9IFdFQktJVF9ET1dO
TE9BRF9FUlJPUl9DQU5DRUxMRURfQllfVVNFUjsKKyAgICBkb3dubG9hZCA9IGFkb3B0R1JlZih0
ZXN0LT5kb3dubG9hZFVSSUFuZFdhaXRVbnRpbEZpbmlzaGVzKHVyaS5nZXQoKSkpOworICAgIGdf
YXNzZXJ0KCF3ZWJraXRfZG93bmxvYWRfZ2V0X3dlYl92aWV3KGRvd25sb2FkLmdldCgpKSk7CisK
KyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDQpOworICAgIGdfYXNzZXJ0
X2NtcGludChldmVudHNbMF0sID09LCBEb3dubG9hZFRlc3Q6OlN0YXJ0ZWQpOworICAgIGdfYXNz
ZXJ0X2NtcGludChldmVudHNbMV0sID09LCBEb3dubG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2Up
OworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBEb3dubG9hZFRlc3Q6OkZhaWxl
ZCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1szXSwgPT0sIERvd25sb2FkVGVzdDo6Rmlu
aXNoZWQpOworICAgIGV2ZW50cy5jbGVhcigpOworICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHdlYmtp
dF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNzKGRvd25sb2FkLmdldCgpKSwgPCwgMSk7
CisgICAgdGVzdC0+Y2hlY2tEZXN0aW5hdGlvbkFuZERlbGV0ZUZpbGUoZG93bmxvYWQuZ2V0KCks
ICJ0ZXN0LnBkZiIpOworfQorCitzdGF0aWMgV2ViS2l0VGVzdFNlcnZlcioga1NlcnZlcjsKK3N0
YXRpYyBjb25zdCBjaGFyKiBrU2VydmVyU3VnZ2VzdGVkRmlsZW5hbWUgPSAid2Via2l0LWRvd25s
b2FkZWQtZmlsZSI7CisKK3N0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNl
cnZlciwgU291cE1lc3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUq
LCBTb3VwQ2xpZW50Q29udGV4dCosIGdwb2ludGVyKQoreworICAgIGlmIChtZXNzYWdlLT5tZXRo
b2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVz
KG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBHT3duUHRyPGNoYXI+IGZpbGVQYXRoKGdfYnVpbGRfZmlsZW5hbWUoVGVz
dDo6Z2V0V2ViS2l0MVRlc3RSZXNvdWNlc0RpcigpLmRhdGEoKSwgcGF0aCwgTlVMTCkpOworICAg
IGNoYXIqIGNvbnRlbnRzOworICAgIGdzaXplIGNvbnRlbnRzTGVuZ3RoOworICAgIGlmICghZ19m
aWxlX2dldF9jb250ZW50cyhmaWxlUGF0aC5nZXQoKSwgJmNvbnRlbnRzLCAmY29udGVudHNMZW5n
dGgsIDApKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBf
U1RBVFVTX05PVF9GT1VORCk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1l
c3NhZ2UtPnJlc3BvbnNlX2JvZHkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc291
cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOworCisgICAgR093
blB0cjxjaGFyPiBjb250ZW50RGlzcG9zaXRpb24oZ19zdHJkdXBfcHJpbnRmKCJmaWxlbmFtZT0l
cyIsIGtTZXJ2ZXJTdWdnZXN0ZWRGaWxlbmFtZSkpOworICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJz
X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiQ29udGVudC1EaXNwb3NpdGlvbiIs
IGNvbnRlbnREaXNwb3NpdGlvbi5nZXQoKSk7CisgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5k
KG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGNvbnRlbnRzLCBjb250
ZW50c0xlbmd0aCk7CisKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5y
ZXNwb25zZV9ib2R5KTsKK30KKworc3RhdGljIHZvaWQgdGVzdERvd25sb2FkUmVtb3RlRmlsZShE
b3dubG9hZFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgR1JlZlB0cjxXZWJLaXRE
b3dubG9hZD4gZG93bmxvYWQgPSBhZG9wdEdSZWYodGVzdC0+ZG93bmxvYWRVUklBbmRXYWl0VW50
aWxGaW5pc2hlcyhrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvdGVzdC5wZGYiKSkpOworICAgIGdf
YXNzZXJ0KCF3ZWJraXRfZG93bmxvYWRfZ2V0X3dlYl92aWV3KGRvd25sb2FkLmdldCgpKSk7CisK
KyAgICBWZWN0b3I8RG93bmxvYWRUZXN0OjpEb3dubG9hZEV2ZW50PiYgZXZlbnRzID0gdGVzdC0+
bV9kb3dubG9hZEV2ZW50czsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0s
IDUpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBEb3dubG9hZFRlc3Q6OlN0
YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBEb3dubG9hZFRlc3Q6
OlJlY2VpdmVkUmVzcG9uc2UpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBE
b3dubG9hZFRlc3Q6OkNyZWF0ZWREZXN0aW5hdGlvbik7CisgICAgZ19hc3NlcnRfY21waW50KGV2
ZW50c1szXSwgPT0sIERvd25sb2FkVGVzdDo6UmVjZWl2ZWREYXRhKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoZXZlbnRzWzRdLCA9PSwgRG93bmxvYWRUZXN0OjpGaW5pc2hlZCk7CisgICAgZXZlbnRz
LmNsZWFyKCk7CisKKyAgICBXZWJLaXRVUklSZXF1ZXN0KiByZXF1ZXN0ID0gd2Via2l0X2Rvd25s
b2FkX2dldF9yZXF1ZXN0KGRvd25sb2FkLmdldCgpKTsKKyAgICBnX2Fzc2VydChyZXF1ZXN0KTsK
KyAgICBBU1NFUlRfQ01QX0NTVFJJTkcod2Via2l0X3VyaV9yZXF1ZXN0X2dldF91cmkocmVxdWVz
dCksID09LCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvdGVzdC5wZGYiKSk7CisKKyAgICBnX2Fz
c2VydCh3ZWJraXRfZG93bmxvYWRfZ2V0X2Rlc3RpbmF0aW9uKGRvd25sb2FkLmdldCgpKSk7Cisg
ICAgZ19hc3NlcnRfY21wZmxvYXQod2Via2l0X2Rvd25sb2FkX2dldF9lc3RpbWF0ZWRfcHJvZ3Jl
c3MoZG93bmxvYWQuZ2V0KCkpLCA9PSwgMSk7CisgICAgdGVzdC0+Y2hlY2tEZXN0aW5hdGlvbkFu
ZERlbGV0ZUZpbGUoZG93bmxvYWQuZ2V0KCksIGtTZXJ2ZXJTdWdnZXN0ZWRGaWxlbmFtZSk7Cit9
CisKK3N0YXRpYyB2b2lkIHRlc3REb3dubG9hZFJlbW90ZUZpbGVFcnJvcihEb3dubG9hZEVycm9y
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5tX2V4cGVjdGVkRXJyb3Ig
PSBXRUJLSVRfRE9XTkxPQURfRVJST1JfTkVUV09SSzsKKyAgICBHUmVmUHRyPFdlYktpdERvd25s
b2FkPiBkb3dubG9hZCA9IGFkb3B0R1JlZih0ZXN0LT5kb3dubG9hZFVSSUFuZFdhaXRVbnRpbEZp
bmlzaGVzKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9mb28iKSkpOworICAgIGdfYXNzZXJ0KCF3
ZWJraXRfZG93bmxvYWRfZ2V0X3dlYl92aWV3KGRvd25sb2FkLmdldCgpKSk7CisKKyAgICBWZWN0
b3I8RG93bmxvYWRUZXN0OjpEb3dubG9hZEV2ZW50PiYgZXZlbnRzID0gdGVzdC0+bV9kb3dubG9h
ZEV2ZW50czsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDQpOworICAg
IGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBEb3dubG9hZFRlc3Q6OlN0YXJ0ZWQpOwor
ICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBEb3dubG9hZFRlc3Q6OlJlY2VpdmVk
UmVzcG9uc2UpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBEb3dubG9hZFRl
c3Q6OkZhaWxlZCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1szXSwgPT0sIERvd25sb2Fk
VGVzdDo6RmluaXNoZWQpOworICAgIGV2ZW50cy5jbGVhcigpOworICAgIFdlYktpdFVSSVJlc3Bv
bnNlKiByZXNwb25zZSA9IHdlYmtpdF9kb3dubG9hZF9nZXRfcmVzcG9uc2UoZG93bmxvYWQuZ2V0
KCkpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X3VyaV9yZXNwb25zZV9nZXRfc3RhdHVz
X2NvZGUocmVzcG9uc2UpLCA9PSwgNDA0KTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdCh3ZWJraXRf
ZG93bmxvYWRfZ2V0X2VzdGltYXRlZF9wcm9ncmVzcyhkb3dubG9hZC5nZXQoKSksIDwsIDEpOwor
CisgICAgdGVzdC0+bV9leHBlY3RlZEVycm9yID0gV0VCS0lUX0RPV05MT0FEX0VSUk9SX0RFU1RJ
TkFUSU9OOworICAgIGRvd25sb2FkID0gYWRvcHRHUmVmKHRlc3QtPmRvd25sb2FkVVJJQW5kV2Fp
dFVudGlsRmluaXNoZXMoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3Rlc3QucGRmIikpKTsKKyAg
ICBnX2Fzc2VydCghd2Via2l0X2Rvd25sb2FkX2dldF93ZWJfdmlldyhkb3dubG9hZC5nZXQoKSkp
OworCisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCA0KTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgRG93bmxvYWRUZXN0OjpTdGFydGVkKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgRG93bmxvYWRUZXN0OjpSZWNlaXZlZFJlc3Bv
bnNlKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgRG93bmxvYWRUZXN0OjpG
YWlsZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbM10sID09LCBEb3dubG9hZFRlc3Q6
OkZpbmlzaGVkKTsKKyAgICBldmVudHMuY2xlYXIoKTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdCh3
ZWJraXRfZG93bmxvYWRfZ2V0X2VzdGltYXRlZF9wcm9ncmVzcyhkb3dubG9hZC5nZXQoKSksIDws
IDEpOworICAgIHRlc3QtPmNoZWNrRGVzdGluYXRpb25BbmREZWxldGVGaWxlKGRvd25sb2FkLmdl
dCgpLCAiYmFyIik7CisKKyAgICB0ZXN0LT5tX2V4cGVjdGVkRXJyb3IgPSBXRUJLSVRfRE9XTkxP
QURfRVJST1JfQ0FOQ0VMTEVEX0JZX1VTRVI7CisgICAgZG93bmxvYWQgPSBhZG9wdEdSZWYodGVz
dC0+ZG93bmxvYWRVUklBbmRXYWl0VW50aWxGaW5pc2hlcyhrU2VydmVyLT5nZXRVUklGb3JQYXRo
KCIvdGVzdC5wZGYiKSkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG93bmxvYWRfZ2V0X3dlYl92
aWV3KGRvd25sb2FkLmdldCgpKSk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUo
KSwgPT0sIDQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBEb3dubG9hZFRl
c3Q6OlN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBEb3dubG9h
ZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0s
ID09LCBEb3dubG9hZFRlc3Q6OkZhaWxlZCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sz
XSwgPT0sIERvd25sb2FkVGVzdDo6RmluaXNoZWQpOworICAgIGV2ZW50cy5jbGVhcigpOworICAg
IGdfYXNzZXJ0X2NtcGZsb2F0KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNz
KGRvd25sb2FkLmdldCgpKSwgPCwgMSk7CisgICAgdGVzdC0+Y2hlY2tEZXN0aW5hdGlvbkFuZERl
bGV0ZUZpbGUoZG93bmxvYWQuZ2V0KCksIGtTZXJ2ZXJTdWdnZXN0ZWRGaWxlbmFtZSk7Cit9CisK
K2NsYXNzIFdlYlZpZXdEb3dubG9hZFRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7CitwdWJsaWM6
CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShXZWJWaWV3RG93bmxvYWRUZXN0KTsKKworICAg
IHN0YXRpYyB2b2lkIGRvd25sb2FkU3RhcnRlZENhbGxiYWNrKFdlYktpdFdlYkNvbnRleHQqIGNv
bnRleHQsIFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgV2ViVmlld0Rvd25sb2FkVGVzdCogdGVz
dCkKKyAgICB7CisgICAgICAgIHRlc3QtPm1fZG93bmxvYWQgPSBkb3dubG9hZDsKKyAgICAgICAg
dGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChkb3du
bG9hZCkpOworICAgICAgICB0ZXN0LT5xdWl0TWFpbkxvb3AoKTsKKyAgICB9CisKKyAgICBXZWJW
aWV3RG93bmxvYWRUZXN0KCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2Via2l0
X3dlYl92aWV3X2dldF9jb250ZXh0KG1fd2ViVmlldyksICJkb3dubG9hZC1zdGFydGVkIiwgR19D
QUxMQkFDSyhkb3dubG9hZFN0YXJ0ZWRDYWxsYmFjayksIHRoaXMpOworICAgIH0KKworICAgIH5X
ZWJWaWV3RG93bmxvYWRUZXN0KCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rp
c2Nvbm5lY3RfbWF0Y2hlZCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQobV93ZWJWaWV3KSwg
R19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7CisgICAgfQorCisgICAgdm9p
ZCB3YWl0VW50aWxEb3dubG9hZFN0YXJ0ZWQoKQorICAgIHsKKyAgICAgICAgbV9kb3dubG9hZCA9
IDA7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICAgICAgZ19hc3Nl
cnQobV9kb3dubG9hZC5nZXQoKSk7CisgICAgfQorCisgICAgc3RhdGljIGdib29sZWFuIGRvd25s
b2FkRGVjaWRlRGVzdGluYXRpb25DYWxsYmFjayhXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNv
bnN0IGdjaGFyKiBzdWdnZXN0ZWRGaWxlbmFtZSwgV2ViVmlld0Rvd25sb2FkVGVzdCogdGVzdCkK
KyAgICB7CisgICAgICAgIEdPd25QdHI8Y2hhcj4gZGVzdGluYXRpb24oZ19idWlsZF9maWxlbmFt
ZShrVGVtcERpcmVjdG9yeSwgc3VnZ2VzdGVkRmlsZW5hbWUsIE5VTEwpKTsKKyAgICAgICAgR093
blB0cjxjaGFyPiBkZXN0aW5hdGlvblVSSShnX2ZpbGVuYW1lX3RvX3VyaShkZXN0aW5hdGlvbi5n
ZXQoKSwgMCwgMCkpOworICAgICAgICB3ZWJraXRfZG93bmxvYWRfc2V0X2Rlc3RpbmF0aW9uKGRv
d25sb2FkLCBkZXN0aW5hdGlvblVSSS5nZXQoKSk7CisgICAgICAgIHJldHVybiBUUlVFOworICAg
IH0KKworICAgIHN0YXRpYyB2b2lkIGRvd25sb2FkRmluaXNoZWRDYWxsYmFjayhXZWJLaXREb3du
bG9hZCogZG93bmxvYWQsIFdlYlZpZXdEb3dubG9hZFRlc3QqIHRlc3QpCisgICAgeworICAgICAg
ICB0ZXN0LT5xdWl0TWFpbkxvb3AoKTsKKyAgICB9CisKKyAgICB2b2lkIHdhaXRVbnRpbERvd25s
b2FkRmluaXNoZWQoKQorICAgIHsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX2Rvd25sb2Fk
LmdldCgpLCAiZGVjaWRlLWRlc3RpbmF0aW9uIiwgR19DQUxMQkFDSyhkb3dubG9hZERlY2lkZURl
c3RpbmF0aW9uQ2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX2Rv
d25sb2FkLmdldCgpLCAiZmluaXNoZWQiLCBHX0NBTExCQUNLKGRvd25sb2FkRmluaXNoZWRDYWxs
YmFjayksIHRoaXMpOworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAg
fQorCisgICAgR1JlZlB0cjxXZWJLaXREb3dubG9hZD4gbV9kb3dubG9hZDsKK307CisKK3N0YXRp
YyB2b2lkIHRlc3RXZWJWaWV3RG93bmxvYWRVUkkoV2ViVmlld0Rvd25sb2FkVGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKK3sKKyAgICBHUmVmUHRyPFdlYktpdERvd25sb2FkPiBkb3dubG9hZCA9
IGFkb3B0R1JlZih3ZWJraXRfd2ViX3ZpZXdfZG93bmxvYWRfdXJpKHRlc3QtPm1fd2ViVmlldywg
a1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3Rlc3QucGRmIikuZGF0YSgpKSk7CisgICAgdGVzdC0+
d2FpdFVudGlsRG93bmxvYWRTdGFydGVkKCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV93ZWJWaWV3
ID09IHdlYmtpdF9kb3dubG9hZF9nZXRfd2ViX3ZpZXcoZG93bmxvYWQuZ2V0KCkpKTsKKyAgICB0
ZXN0LT53YWl0VW50aWxEb3dubG9hZEZpbmlzaGVkKCk7CisKKyAgICBHUmVmUHRyPEdGaWxlPiBk
b3dubG9hZEZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfdXJpKHdlYmtpdF9kb3dubG9h
ZF9nZXRfZGVzdGluYXRpb24oZG93bmxvYWQuZ2V0KCkpKSk7CisgICAgR1JlZlB0cjxHRmlsZUlu
Zm8+IGRvd25sb2FkRmlsZUluZm8gPSBhZG9wdEdSZWYoZ19maWxlX3F1ZXJ5X2luZm8oZG93bmxv
YWRGaWxlLmdldCgpLCBHX0ZJTEVfQVRUUklCVVRFX1NUQU5EQVJEX1NJWkUsIHN0YXRpY19jYXN0
PEdGaWxlUXVlcnlJbmZvRmxhZ3M+KDApLCAwLCAwKSk7CisgICAgZ19hc3NlcnRfY21waW50KGdf
ZmlsZV9pbmZvX2dldF9zaXplKGRvd25sb2FkRmlsZUluZm8uZ2V0KCkpLCA+LCAwKTsKKyAgICBn
X2ZpbGVfZGVsZXRlKGRvd25sb2FkRmlsZS5nZXQoKSwgMCwgMCk7Cit9CisKK2NsYXNzIFBvbGlj
eVJlc3BvbnNlRG93bmxvYWRUZXN0OiBwdWJsaWMgV2ViVmlld0Rvd25sb2FkVGVzdCB7CitwdWJs
aWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShQb2xpY3lSZXNwb25zZURvd25sb2FkVGVz
dCk7CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gZGVjaWRlUG9saWN5Q2FsbGJhY2soV2ViS2l0V2Vi
Vmlldyogd2ViVmlldywgV2ViS2l0UG9saWN5RGVjaXNpb24qIGRlY2lzaW9uLCBXZWJLaXRQb2xp
Y3lEZWNpc2lvblR5cGUgdHlwZSwgUG9saWN5UmVzcG9uc2VEb3dubG9hZFRlc3QqIHRlc3QpCisg
ICAgeworICAgICAgICBpZiAodHlwZSAhPSBXRUJLSVRfUE9MSUNZX0RFQ0lTSU9OX1RZUEVfUkVT
UE9OU0UpCisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICAgICAgd2Via2l0X3BvbGlj
eV9kZWNpc2lvbl9kb3dubG9hZChkZWNpc2lvbik7CisgICAgICAgIHJldHVybiBUUlVFOworICAg
IH0KKworICAgIFBvbGljeVJlc3BvbnNlRG93bmxvYWRUZXN0KCkKKyAgICB7CisgICAgICAgIGdf
c2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAiZGVjaWRlLXBvbGljeSIsIEdfQ0FMTEJBQ0soZGVj
aWRlUG9saWN5Q2FsbGJhY2spLCB0aGlzKTsKKyAgICB9CisKKyAgICB+UG9saWN5UmVzcG9uc2VE
b3dubG9hZFRlc3QoKQorICAgIHsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVj
dF9tYXRjaGVkKG1fd2ViVmlldywgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhp
cyk7CisgICAgfQorCisgICAgdm9pZCBjYW5jZWxEb3dubG9hZEFuZFdhaXRVbnRpbEZpbmlzaGVk
KCkKKyAgICB7CisgICAgICAgIHdlYmtpdF9kb3dubG9hZF9jYW5jZWwobV9kb3dubG9hZC5nZXQo
KSk7CisgICAgICAgIHdhaXRVbnRpbERvd25sb2FkRmluaXNoZWQoKTsKKyAgICAgICAgbV9kb3du
bG9hZCA9IDA7CisgICAgfQorfTsKKworc3RhdGljIHZvaWQgdGVzdFBvbGljeVJlc3BvbnNlRG93
bmxvYWQoUG9saWN5UmVzcG9uc2VEb3dubG9hZFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7
CisgICAgLy8gVGVzdCB0aGF0IGEgZG93bmxvYWQgc3RhcnRlZCBieSB0aGUgdGhlIHBvbGljeSBj
aGVja2VyIGNvbnRhaW5zIHRoZSB3ZWIgdmlldy4KKyAgICBDU3RyaW5nIHJlcXVlc3RVUkkgPSBr
U2VydmVyLT5nZXRVUklGb3JQYXRoKCIvdGVzdC5wZGYiKS5kYXRhKCk7CisgICAgdGVzdC0+bG9h
ZFVSSShyZXF1ZXN0VVJJLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsRG93bmxvYWRTdGFy
dGVkKCk7CisKKyAgICBXZWJLaXRVUklSZXF1ZXN0KiByZXF1ZXN0ID0gd2Via2l0X2Rvd25sb2Fk
X2dldF9yZXF1ZXN0KHRlc3QtPm1fZG93bmxvYWQuZ2V0KCkpOworICAgIGdfYXNzZXJ0KHJlcXVl
c3QpOworICAgIEFTU0VSVF9DTVBfQ1NUUklORyh3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3VyaShy
ZXF1ZXN0KSwgPT0sIHJlcXVlc3RVUkkpOworCisgICAgZ19hc3NlcnQodGVzdC0+bV93ZWJWaWV3
ID09IHdlYmtpdF9kb3dubG9hZF9nZXRfd2ViX3ZpZXcodGVzdC0+bV9kb3dubG9hZC5nZXQoKSkp
OworICAgIHRlc3QtPmNhbmNlbERvd25sb2FkQW5kV2FpdFVudGlsRmluaXNoZWQoKTsKK30KKwor
dm9pZCBiZWZvcmVBbGwoKQoreworICAgIGtTZXJ2ZXIgPSBuZXcgV2ViS2l0VGVzdFNlcnZlcigp
OworICAgIGtTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFjayk7CisKKyAgICBrVGVtcERpcmVjdG9y
eSA9IGdfZGlyX21ha2VfdG1wKCJXZWJLaXQyVGVzdHMtWFhYWFhYIiwgMCk7CisgICAgZ19hc3Nl
cnQoa1RlbXBEaXJlY3RvcnkpOworCisgICAgRG93bmxvYWRUZXN0OjphZGQoIkRvd25sb2FkcyIs
ICJsb2NhbC1maWxlIiwgdGVzdERvd25sb2FkTG9jYWxGaWxlKTsKKyAgICBEb3dubG9hZEVycm9y
VGVzdDo6YWRkKCJEb3dubG9hZHMiLCAibG9jYWwtZmlsZS1lcnJvciIsIHRlc3REb3dubG9hZExv
Y2FsRmlsZUVycm9yKTsKKyAgICBEb3dubG9hZFRlc3Q6OmFkZCgiRG93bmxvYWRzIiwgInJlbW90
ZS1maWxlIiwgdGVzdERvd25sb2FkUmVtb3RlRmlsZSk7CisgICAgRG93bmxvYWRFcnJvclRlc3Q6
OmFkZCgiRG93bmxvYWRzIiwgInJlbW90ZS1maWxlLWVycm9yIiwgdGVzdERvd25sb2FkUmVtb3Rl
RmlsZUVycm9yKTsKKyAgICBXZWJWaWV3RG93bmxvYWRUZXN0OjphZGQoIldlYktpdFdlYlZpZXci
LCAiZG93bmxvYWQtdXJpIiwgdGVzdFdlYlZpZXdEb3dubG9hZFVSSSk7CisgICAgUG9saWN5UmVz
cG9uc2VEb3dubG9hZFRlc3Q6OmFkZCgiRG93bmxvYWRzIiwgInBvbGljeS1kZWNpc2lvbi1kb3du
bG9hZCIsIHRlc3RQb2xpY3lSZXNwb25zZURvd25sb2FkKTsKK30KKwordm9pZCBhZnRlckFsbCgp
Cit7CisgICAgZGVsZXRlIGtTZXJ2ZXI7CisgICAgZ19ybWRpcihrVGVtcERpcmVjdG9yeSk7Cit9
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdEZy
YW1lLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0RnJhbWUu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2M2IwNzkKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdEZyYW1l
LmNwcApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBT
LkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJXZWJQcm9jZXNzVGVzdFJ1bm5l
ci5oIgorI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2lu
Y2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgorCitzdGF0aWMgV2ViUHJvY2Vzc1Rlc3RSdW5uZXIq
IHRlc3RSdW5uZXI7CisKK3N0YXRpYyB2b2lkIHdlYmtpdEZyYW1lVGVzdFJ1bihXZWJWaWV3VGVz
dCogdGVzdCwgY29uc3QgY2hhciogdGVzdE5hbWUpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIq
IHRlc3RIVE1MID0gIjxodG1sPjxib2R5PjwvYm9keT48L2h0bWw+IjsKKyAgICB0ZXN0LT5sb2Fk
SHRtbCh0ZXN0SFRNTCwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisK
KyAgICBHVmFyaWFudEJ1aWxkZXIgYnVpbGRlcjsKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9pbml0
KCZidWlsZGVyLCBHX1ZBUklBTlRfVFlQRV9WQVJESUNUKTsKKyAgICBnX3ZhcmlhbnRfYnVpbGRl
cl9hZGQoJmJ1aWxkZXIsICJ7c3Z9IiwgInBhZ2VJRCIsIGdfdmFyaWFudF9uZXdfdWludDY0KHdl
YmtpdF93ZWJfdmlld19nZXRfcGFnZV9pZCh0ZXN0LT5tX3dlYlZpZXcpKSk7CisgICAgZ19hc3Nl
cnQodGVzdFJ1bm5lci0+cnVuVGVzdCgiV2ViS2l0RnJhbWUiLCB0ZXN0TmFtZSwgZ192YXJpYW50
X2J1aWxkZXJfZW5kKCZidWlsZGVyKSkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViS2l0RnJh
bWVNYWluRnJhbWUoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgd2Vi
a2l0RnJhbWVUZXN0UnVuKHRlc3QsICJtYWluLWZyYW1lIik7Cit9CisKK3N0YXRpYyB2b2lkIHRl
c3RXZWJLaXRGcmFtZVVSSShXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAg
ICB3ZWJraXRGcmFtZVRlc3RSdW4odGVzdCwgInVyaSIpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0
V2ViS2l0RnJhbWVKYXZhU2NyaXB0Q29udGV4dChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9p
bnRlcikKK3sKKyAgICB3ZWJraXRGcmFtZVRlc3RSdW4odGVzdCwgImphdmFzY3JpcHQtY29udGV4
dCIpOworfQorCit2b2lkIGJlZm9yZUFsbCgpCit7CisgICAgdGVzdFJ1bm5lciA9IG5ldyBXZWJQ
cm9jZXNzVGVzdFJ1bm5lcigpOworICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfd2ViX2V4dGVu
c2lvbnNfZGlyZWN0b3J5KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpLCBXRUJLSVRf
VEVTVF9XRUJfRVhURU5TSU9OU19ESVIpOworCisgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0
RnJhbWUiLCAibWFpbi1mcmFtZSIsIHRlc3RXZWJLaXRGcmFtZU1haW5GcmFtZSk7CisgICAgV2Vi
Vmlld1Rlc3Q6OmFkZCgiV2ViS2l0RnJhbWUiLCAidXJpIiwgdGVzdFdlYktpdEZyYW1lVVJJKTsK
KyAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRGcmFtZSIsICJqYXZhc2NyaXB0LWNvbnRleHQi
LCB0ZXN0V2ViS2l0RnJhbWVKYXZhU2NyaXB0Q29udGV4dCk7Cit9CisKK3ZvaWQgYWZ0ZXJBbGwo
KQoreworICAgIGRlbGV0ZSB0ZXN0UnVubmVyOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RJbnNwZWN0b3IuY3BwIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RJbnNwZWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMDQzMDMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdEluc3BlY3Rvci5jcHAKQEAgLTAsMCAr
MSwzNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCitjbGFzcyBJbnNwZWN0
b3JUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNU
X0ZJWFRVUkUoSW5zcGVjdG9yVGVzdCk7CisKKyAgICBlbnVtIEluc3BlY3RvckV2ZW50cyB7Cisg
ICAgICAgIE9wZW5XaW5kb3csCisgICAgICAgIEJyaW5nVG9Gcm9udCwKKyAgICAgICAgQ2xvc2Vk
LAorICAgICAgICBBdHRhY2gsCisgICAgICAgIERldGFjaAorICAgIH07CisKKyAgICBzdGF0aWMg
Z2Jvb2xlYW4gb3BlbldpbmRvd0NhbGxiYWNrKFdlYktpdFdlYkluc3BlY3RvciosIEluc3BlY3Rv
clRlc3QqIHRlc3QpCisgICAgeworICAgICAgICByZXR1cm4gdGVzdC0+b3BlbldpbmRvdygpOwor
ICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBicmluZ1RvRnJvbnRDYWxsYmFjayhXZWJLaXRX
ZWJJbnNwZWN0b3IqLCBJbnNwZWN0b3JUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRlc3QtPmJyaW5nVG9Gcm9udCgpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGNsb3NlZENh
bGxiYWNrKFdlYktpdFdlYkluc3BlY3RvciosIEluc3BlY3RvclRlc3QqIHRlc3QpCisgICAgewor
ICAgICAgICByZXR1cm4gdGVzdC0+Y2xvc2VkKCk7CisgICAgfQorCisgICAgc3RhdGljIGdib29s
ZWFuIGF0dGFjaENhbGxiYWNrKFdlYktpdFdlYkluc3BlY3RvciosIEluc3BlY3RvclRlc3QqIHRl
c3QpCisgICAgeworICAgICAgICByZXR1cm4gdGVzdC0+YXR0YWNoKCk7CisgICAgfQorCisgICAg
c3RhdGljIGdib29sZWFuIGRldGFjaENhbGxiYWNrKFdlYktpdFdlYkluc3BlY3RvciosIEluc3Bl
Y3RvclRlc3QqIHRlc3QpCisgICAgeworICAgICAgICByZXR1cm4gdGVzdC0+ZGV0YWNoKCk7Cisg
ICAgfQorCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGdNaW5pbXVtQXR0YWNoZWRJbnNwZWN0
b3JXaWR0aCA9IDc1MDsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZ01pbmltdW1BdHRhY2hl
ZEluc3BlY3RvckhlaWdodCA9IDI1MDsKKworICAgIEluc3BlY3RvclRlc3QoKQorICAgICAgICA6
IFdlYlZpZXdUZXN0KCkKKyAgICAgICAgLCBtX2luc3BlY3Rvcih3ZWJraXRfd2ViX3ZpZXdfZ2V0
X2luc3BlY3RvcihtX3dlYlZpZXcpKQorICAgIHsKKyAgICAgICAgd2Via2l0X3NldHRpbmdzX3Nl
dF9lbmFibGVfZGV2ZWxvcGVyX2V4dHJhcyh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKG1f
d2ViVmlldyksIFRSVUUpOworICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZp
bmlzaGVzKEdfT0JKRUNUKG1faW5zcGVjdG9yKSk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
bV9pbnNwZWN0b3IsICJvcGVuLXdpbmRvdyIsIEdfQ0FMTEJBQ0sob3BlbldpbmRvd0NhbGxiYWNr
KSwgdGhpcyk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9pbnNwZWN0b3IsICJicmluZy10
by1mcm9udCIsIEdfQ0FMTEJBQ0soYnJpbmdUb0Zyb250Q2FsbGJhY2spLCB0aGlzKTsKKyAgICAg
ICAgZ19zaWduYWxfY29ubmVjdChtX2luc3BlY3RvciwgImNsb3NlZCIsIEdfQ0FMTEJBQ0soY2xv
c2VkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX2luc3BlY3Rv
ciwgImF0dGFjaCIsIEdfQ0FMTEJBQ0soYXR0YWNoQ2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAg
Z19zaWduYWxfY29ubmVjdChtX2luc3BlY3RvciwgImRldGFjaCIsIEdfQ0FMTEJBQ0soZGV0YWNo
Q2FsbGJhY2spLCB0aGlzKTsKKyAgICB9CisKKyAgICB+SW5zcGVjdG9yVGVzdCgpCisgICAgewor
ICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9pbnNwZWN0b3Is
IEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOworICAgIH0KKworICAgIHZp
cnR1YWwgYm9vbCBvcGVuV2luZG93KCkKKyAgICB7CisgICAgICAgIG1fZXZlbnRzLmFwcGVuZChP
cGVuV2luZG93KTsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX21haW5Mb29wKTsKKyAgICAg
ICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIGJyaW5nVG9Gcm9udCgp
CisgICAgeworICAgICAgICBtX2V2ZW50cy5hcHBlbmQoQnJpbmdUb0Zyb250KTsKKyAgICAgICAg
Z19tYWluX2xvb3BfcXVpdChtX21haW5Mb29wKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAg
IH0KKworICAgIHZpcnR1YWwgdm9pZCBjbG9zZWQoKQorICAgIHsKKyAgICAgICAgbV9ldmVudHMu
YXBwZW5kKENsb3NlZCk7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIGF0dGFjaCgpCisgICAg
eworICAgICAgICBtX2V2ZW50cy5hcHBlbmQoQXR0YWNoKTsKKyAgICAgICAgcmV0dXJuIFRSVUU7
CisgICAgfQorCisgICAgdmlydHVhbCBib29sIGRldGFjaCgpCisgICAgeworICAgICAgICBtX2V2
ZW50cy5hcHBlbmQoRGV0YWNoKTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisKKyAg
ICBzdGF0aWMgZ2Jvb2xlYW4gc2hvd0lkbGUoSW5zcGVjdG9yVGVzdCogdGVzdCkKKyAgICB7Cisg
ICAgICAgIHdlYmtpdF93ZWJfaW5zcGVjdG9yX3Nob3codGVzdC0+bV9pbnNwZWN0b3IpOworICAg
ICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgdm9pZCBzaG93KCkKKyAgICB7CisgICAg
ICAgIGdfaWRsZV9hZGQocmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oc2hvd0lkbGUpLCB0
aGlzKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgIH0KKworICAg
IHZvaWQgcmVzaXplVmlld0FuZEF0dGFjaCgpCisgICAgeworICAgICAgICAvLyBSZXNpemUgdGhl
IHZpZXcgdG8gbWFrZSByb29tIGZvciB0aGUgaW5zcGVjdG9yLgorICAgICAgICByZXNpemVWaWV3
KGdNaW5pbXVtQXR0YWNoZWRJbnNwZWN0b3JXaWR0aCwgKGdNaW5pbXVtQXR0YWNoZWRJbnNwZWN0
b3JIZWlnaHQgKyAxKSAqIDQgLyAzKTsKKyAgICAgICAgd2Via2l0X3dlYl9pbnNwZWN0b3JfYXR0
YWNoKG1faW5zcGVjdG9yKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gZGV0YWNoSWRs
ZShJbnNwZWN0b3JUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgd2Via2l0X3dlYl9pbnNwZWN0
b3JfZGV0YWNoKHRlc3QtPm1faW5zcGVjdG9yKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAg
IH0KKworICAgIHZvaWQgZGV0YWNoQW5kV2FpdFVudGlsV2luZG93T3BlbmVkKCkKKyAgICB7Cisg
ICAgICAgIGdfaWRsZV9hZGQocmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oZGV0YWNoSWRs
ZSksIHRoaXMpOworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgfQor
CisgICAgdm9pZCBjbG9zZSgpCisgICAgeworICAgICAgICB3ZWJraXRfd2ViX2luc3BlY3Rvcl9j
bG9zZShtX2luc3BlY3Rvcik7CisgICAgfQorCisgICAgV2ViS2l0V2ViSW5zcGVjdG9yKiBtX2lu
c3BlY3RvcjsKKyAgICBWZWN0b3I8SW5zcGVjdG9yRXZlbnRzPiBtX2V2ZW50czsKK307CisKK3N0
YXRpYyB2b2lkIHRlc3RJbnNwZWN0b3JEZWZhdWx0KEluc3BlY3RvclRlc3QqIHRlc3QsIGdjb25z
dHBvaW50ZXIpCit7CisgICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKEdU
S19XSU5ET1dfVE9QTEVWRUwpOworICAgIHRlc3QtPnJlc2l6ZVZpZXcoMjAwLCAyMDApOworICAg
IHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keT48cD5XZWJLaXRHVEsrIEluc3BlY3RvciB0ZXN0
PC9wPjwvYm9keT48L2h0bWw+IiwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVk
KCk7CisKKyAgICB0ZXN0LT5zaG93KCk7CisgICAgLy8gV2UgZG9uJ3QgYWRkIHRoZSB2aWV3IHRv
IGEgY29udGFpbmVyLCBzbyBjb25zdW1lIHRoZSB3ZWFrIHJlZiB3aXRoIEdSZWZQdHIuCisgICAg
R1JlZlB0cjxXZWJLaXRXZWJWaWV3QmFzZT4gaW5zcGVjdG9yVmlldyA9IHdlYmtpdF93ZWJfaW5z
cGVjdG9yX2dldF93ZWJfdmlldyh0ZXN0LT5tX2luc3BlY3Rvcik7CisgICAgZ19hc3NlcnQoaW5z
cGVjdG9yVmlldy5nZXQoKSk7CisgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRl
c3RGaW5pc2hlcyhHX09CSkVDVChpbnNwZWN0b3JWaWV3LmdldCgpKSk7CisgICAgZ19hc3NlcnQo
IXdlYmtpdF93ZWJfaW5zcGVjdG9yX2lzX2F0dGFjaGVkKHRlc3QtPm1faW5zcGVjdG9yKSk7Cisg
ICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfd2ViX2luc3BlY3Rvcl9nZXRfYXR0YWNoZWRfaGVp
Z2h0KHRlc3QtPm1faW5zcGVjdG9yKSwgPT0sIDApOworICAgIFZlY3RvcjxJbnNwZWN0b3JUZXN0
OjpJbnNwZWN0b3JFdmVudHM+JiBldmVudHMgPSB0ZXN0LT5tX2V2ZW50czsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVu
dHNbMF0sID09LCBJbnNwZWN0b3JUZXN0OjpPcGVuV2luZG93KTsKKyAgICB0ZXN0LT5tX2V2ZW50
cy5jbGVhcigpOworCisgICAgdGVzdC0+c2hvdygpOworICAgIGV2ZW50cyA9IHRlc3QtPm1fZXZl
bnRzOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgMSk7CisgICAgZ19h
c3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIEluc3BlY3RvclRlc3Q6OkJyaW5nVG9Gcm9udCk7
CisgICAgdGVzdC0+bV9ldmVudHMuY2xlYXIoKTsKKworICAgIHRlc3QtPnJlc2l6ZVZpZXdBbmRB
dHRhY2goKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2luc3BlY3Rvcl9pc19hdHRhY2hlZCh0
ZXN0LT5tX2luc3BlY3RvcikpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X3dlYl9pbnNw
ZWN0b3JfZ2V0X2F0dGFjaGVkX2hlaWdodCh0ZXN0LT5tX2luc3BlY3RvciksID49LCBJbnNwZWN0
b3JUZXN0OjpnTWluaW11bUF0dGFjaGVkSW5zcGVjdG9ySGVpZ2h0KTsKKyAgICBldmVudHMgPSB0
ZXN0LT5tX2V2ZW50czsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDEp
OworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBJbnNwZWN0b3JUZXN0OjpBdHRh
Y2gpOworICAgIHRlc3QtPm1fZXZlbnRzLmNsZWFyKCk7CisKKyAgICB0ZXN0LT5kZXRhY2hBbmRX
YWl0VW50aWxXaW5kb3dPcGVuZWQoKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl9pbnNwZWN0
b3JfaXNfYXR0YWNoZWQodGVzdC0+bV9pbnNwZWN0b3IpKTsKKyAgICBldmVudHMgPSB0ZXN0LT5t
X2V2ZW50czsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDIpOworICAg
IGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBJbnNwZWN0b3JUZXN0OjpEZXRhY2gpOwor
ICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBJbnNwZWN0b3JUZXN0OjpPcGVuV2lu
ZG93KTsKKyAgICB0ZXN0LT5tX2V2ZW50cy5jbGVhcigpOworCisgICAgdGVzdC0+Y2xvc2UoKTsK
KyAgICBldmVudHMgPSB0ZXN0LT5tX2V2ZW50czsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRz
LnNpemUoKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBJbnNw
ZWN0b3JUZXN0OjpDbG9zZWQpOworICAgIHRlc3QtPm1fZXZlbnRzLmNsZWFyKCk7Cit9CisKK2Ns
YXNzIEN1c3RvbUluc3BlY3RvclRlc3Q6IHB1YmxpYyBJbnNwZWN0b3JUZXN0IHsKK3B1YmxpYzoK
KyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKEN1c3RvbUluc3BlY3RvclRlc3QpOworCisgICAg
Q3VzdG9tSW5zcGVjdG9yVGVzdCgpCisgICAgICAgIDogSW5zcGVjdG9yVGVzdCgpCisgICAgICAg
ICwgbV9pbnNwZWN0b3JXaW5kb3coMCkKKyAgICB7CisgICAgfQorCisgICAgfkN1c3RvbUluc3Bl
Y3RvclRlc3QoKQorICAgIHsKKyAgICAgICAgaWYgKG1faW5zcGVjdG9yV2luZG93KQorICAgICAg
ICAgICAgZ3RrX3dpZGdldF9kZXN0cm95KG1faW5zcGVjdG9yV2luZG93KTsKKyAgICB9CisKKyAg
ICBib29sIG9wZW5XaW5kb3coKQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQoIW1faW5zcGVjdG9y
V2luZG93KTsKKyAgICAgICAgbV9pbnNwZWN0b3JXaW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtf
V0lORE9XX1RPUExFVkVMKTsKKyAgICAgICAgV2ViS2l0V2ViVmlld0Jhc2UqIGluc3BlY3RvclZp
ZXcgPSB3ZWJraXRfd2ViX2luc3BlY3Rvcl9nZXRfd2ViX3ZpZXcobV9pbnNwZWN0b3IpOworICAg
ICAgICBnX2Fzc2VydChpbnNwZWN0b3JWaWV3KTsKKyAgICAgICAgZ3RrX2NvbnRhaW5lcl9hZGQo
R1RLX0NPTlRBSU5FUihtX2luc3BlY3RvcldpbmRvdyksIEdUS19XSURHRVQoaW5zcGVjdG9yVmll
dykpOworICAgICAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKG1faW5zcGVjdG9yV2luZG93KTsKKwor
ICAgICAgICByZXR1cm4gSW5zcGVjdG9yVGVzdDo6b3BlbldpbmRvdygpOworICAgIH0KKworICAg
IHZvaWQgY2xvc2VkKCkKKyAgICB7CisgICAgICAgIGlmIChtX2luc3BlY3RvcldpbmRvdykgewor
ICAgICAgICAgICAgZ3RrX3dpZGdldF9kZXN0cm95KG1faW5zcGVjdG9yV2luZG93KTsKKyAgICAg
ICAgICAgIG1faW5zcGVjdG9yV2luZG93ID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVy
biBJbnNwZWN0b3JUZXN0OjpjbG9zZWQoKTsKKyAgICB9CisKKyAgICBib29sIGF0dGFjaCgpCisg
ICAgeworICAgICAgICBHUmVmUHRyPFdlYktpdFdlYlZpZXdCYXNlPiBpbnNwZWN0b3JWaWV3ID0g
d2Via2l0X3dlYl9pbnNwZWN0b3JfZ2V0X3dlYl92aWV3KG1faW5zcGVjdG9yKTsKKyAgICAgICAg
aWYgKG1faW5zcGVjdG9yV2luZG93KSB7CisgICAgICAgICAgICBndGtfY29udGFpbmVyX3JlbW92
ZShHVEtfQ09OVEFJTkVSKG1faW5zcGVjdG9yV2luZG93KSwgR1RLX1dJREdFVChpbnNwZWN0b3JW
aWV3LmdldCgpKSk7CisgICAgICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV9pbnNwZWN0b3JX
aW5kb3cpOworICAgICAgICAgICAgbV9pbnNwZWN0b3JXaW5kb3cgPSAwOworICAgICAgICB9CisK
KyAgICAgICAgR3RrV2lkZ2V0KiBwYW5lOworICAgICAgICBpZiAoZ3RrX2Jpbl9nZXRfY2hpbGQo
R1RLX0JJTihtX3BhcmVudFdpbmRvdykpID09IEdUS19XSURHRVQobV93ZWJWaWV3KSkgeworICAg
ICAgICAgICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3PiBpbnNwZWN0ZWRWaWV3ID0gbV93ZWJWaWV3
OworICAgICAgICAgICAgZ3RrX2NvbnRhaW5lcl9yZW1vdmUoR1RLX0NPTlRBSU5FUihtX3BhcmVu
dFdpbmRvdyksIEdUS19XSURHRVQobV93ZWJWaWV3KSk7CisgICAgICAgICAgICBwYW5lID0gZ3Rr
X3BhbmVkX25ldyhHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwpOworICAgICAgICAgICAgZ3RrX3Bh
bmVkX2FkZDEoR1RLX1BBTkVEKHBhbmUpLCBHVEtfV0lER0VUKG1fd2ViVmlldykpOworICAgICAg
ICAgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihtX3BhcmVudFdpbmRvdyksIHBh
bmUpOworICAgICAgICAgICAgZ3RrX3dpZGdldF9zaG93X2FsbChwYW5lKTsKKyAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICBwYW5lID0gZ3RrX2Jpbl9nZXRfY2hpbGQoR1RLX0JJTihtX3BhcmVu
dFdpbmRvdykpOworICAgICAgICBndGtfcGFuZWRfc2V0X3Bvc2l0aW9uKEdUS19QQU5FRChwYW5l
KSwgd2Via2l0X3dlYl9pbnNwZWN0b3JfZ2V0X2F0dGFjaGVkX2hlaWdodChtX2luc3BlY3Rvcikp
OworICAgICAgICBndGtfcGFuZWRfYWRkMihHVEtfUEFORUQocGFuZSksIEdUS19XSURHRVQoaW5z
cGVjdG9yVmlldy5nZXQoKSkpOworCisgICAgICAgIHJldHVybiBJbnNwZWN0b3JUZXN0OjphdHRh
Y2goKTsKKyAgICB9CisKKyAgICBib29sIGRldGFjaCgpCisgICAgeworICAgICAgICBHUmVmUHRy
PFdlYktpdFdlYlZpZXdCYXNlPiBpbnNwZWN0b3JWaWV3ID0gd2Via2l0X3dlYl9pbnNwZWN0b3Jf
Z2V0X3dlYl92aWV3KG1faW5zcGVjdG9yKTsKKyAgICAgICAgR3RrV2lkZ2V0KiBwYW5lID0gZ3Rr
X2Jpbl9nZXRfY2hpbGQoR1RLX0JJTihtX3BhcmVudFdpbmRvdykpOworICAgICAgICBnX2Fzc2Vy
dChHVEtfSVNfUEFORUQocGFuZSkpOworICAgICAgICBndGtfY29udGFpbmVyX3JlbW92ZShHVEtf
Q09OVEFJTkVSKHBhbmUpLCBHVEtfV0lER0VUKGluc3BlY3RvclZpZXcuZ2V0KCkpKTsKKyAgICAg
ICAgcmV0dXJuIEluc3BlY3RvclRlc3Q6OmRldGFjaCgpOworICAgIH0KKworICAgIHZvaWQgZGVz
dHJveVdpbmRvdygpCisgICAgeworICAgICAgICBnX2Fzc2VydChtX2luc3BlY3RvcldpbmRvdyk7
CisgICAgICAgIGd0a193aWRnZXRfZGVzdHJveShtX2luc3BlY3RvcldpbmRvdyk7CisgICAgICAg
IG1faW5zcGVjdG9yV2luZG93ID0gMDsKKyAgICB9CisKKyAgICBHdGtXaWRnZXQqIG1faW5zcGVj
dG9yV2luZG93OworfTsKKworc3RhdGljIHZvaWQgdGVzdEluc3BlY3Rvck1hbnVhbEF0dGFjaERl
dGFjaChDdXN0b21JbnNwZWN0b3JUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRl
c3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZChHVEtfV0lORE9XX1RPUExFVkVMKTsK
KyAgICB0ZXN0LT5yZXNpemVWaWV3KDIwMCwgMjAwKTsKKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0
bWw+PGJvZHk+PHA+V2ViS2l0R1RLKyBJbnNwZWN0b3IgdGVzdDwvcD48L2JvZHk+PC9odG1sPiIs
IDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+c2hv
dygpOworICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19P
QkpFQ1Qod2Via2l0X3dlYl9pbnNwZWN0b3JfZ2V0X3dlYl92aWV3KHRlc3QtPm1faW5zcGVjdG9y
KSkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX2luc3BlY3Rvcl9pc19hdHRhY2hlZCh0ZXN0
LT5tX2luc3BlY3RvcikpOworICAgIFZlY3RvcjxJbnNwZWN0b3JUZXN0OjpJbnNwZWN0b3JFdmVu
dHM+JiBldmVudHMgPSB0ZXN0LT5tX2V2ZW50czsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRz
LnNpemUoKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBJbnNw
ZWN0b3JUZXN0OjpPcGVuV2luZG93KTsKKyAgICB0ZXN0LT5tX2V2ZW50cy5jbGVhcigpOworCisg
ICAgdGVzdC0+cmVzaXplVmlld0FuZEF0dGFjaCgpOworICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJf
aW5zcGVjdG9yX2lzX2F0dGFjaGVkKHRlc3QtPm1faW5zcGVjdG9yKSk7CisgICAgZ19hc3NlcnRf
Y21wdWludCh3ZWJraXRfd2ViX2luc3BlY3Rvcl9nZXRfYXR0YWNoZWRfaGVpZ2h0KHRlc3QtPm1f
aW5zcGVjdG9yKSwgPj0sIEluc3BlY3RvclRlc3Q6OmdNaW5pbXVtQXR0YWNoZWRJbnNwZWN0b3JI
ZWlnaHQpOworICAgIGV2ZW50cyA9IHRlc3QtPm1fZXZlbnRzOworICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHMuc2l6ZSgpLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwg
PT0sIEluc3BlY3RvclRlc3Q6OkF0dGFjaCk7CisgICAgdGVzdC0+bV9ldmVudHMuY2xlYXIoKTsK
KworICAgIHRlc3QtPmRldGFjaEFuZFdhaXRVbnRpbFdpbmRvd09wZW5lZCgpOworICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfd2ViX2luc3BlY3Rvcl9pc19hdHRhY2hlZCh0ZXN0LT5tX2luc3BlY3Rvcikp
OworICAgIGV2ZW50cyA9IHRlc3QtPm1fZXZlbnRzOworICAgIGdfYXNzZXJ0X2NtcGludChldmVu
dHMuc2l6ZSgpLCA9PSwgMik7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIElu
c3BlY3RvclRlc3Q6OkRldGFjaCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0s
IEluc3BlY3RvclRlc3Q6Ok9wZW5XaW5kb3cpOworICAgIHRlc3QtPm1fZXZlbnRzLmNsZWFyKCk7
CisKKyAgICB0ZXN0LT5yZXNpemVWaWV3QW5kQXR0YWNoKCk7CisgICAgZ19hc3NlcnQod2Via2l0
X3dlYl9pbnNwZWN0b3JfaXNfYXR0YWNoZWQodGVzdC0+bV9pbnNwZWN0b3IpKTsKKyAgICB0ZXN0
LT5tX2V2ZW50cy5jbGVhcigpOworICAgIHRlc3QtPmNsb3NlKCk7CisgICAgZXZlbnRzID0gdGVz
dC0+bV9ldmVudHM7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAyKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgSW5zcGVjdG9yVGVzdDo6RGV0YWNo
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgSW5zcGVjdG9yVGVzdDo6Q2xv
c2VkKTsKKyAgICB0ZXN0LT5tX2V2ZW50cy5jbGVhcigpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0
SW5zcGVjdG9yQ3VzdG9tQ29udGFpbmVyRGVzdHJveWVkKEN1c3RvbUluc3BlY3RvclRlc3QqIHRl
c3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGls
TWFwcGVkKEdUS19XSU5ET1dfVE9QTEVWRUwpOworICAgIHRlc3QtPnJlc2l6ZVZpZXcoMjAwLCAy
MDApOworICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keT48cD5XZWJLaXRHVEsrIEluc3Bl
Y3RvciB0ZXN0PC9wPjwvYm9keT48L2h0bWw+IiwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9h
ZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5zaG93KCk7CisgICAgdGVzdC0+YXNzZXJ0T2JqZWN0
SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVCh3ZWJraXRfd2ViX2luc3BlY3Rvcl9n
ZXRfd2ViX3ZpZXcodGVzdC0+bV9pbnNwZWN0b3IpKSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93
ZWJfaW5zcGVjdG9yX2lzX2F0dGFjaGVkKHRlc3QtPm1faW5zcGVjdG9yKSk7CisKKyAgICB0ZXN0
LT5tX2V2ZW50cy5jbGVhcigpOworICAgIHRlc3QtPmRlc3Ryb3lXaW5kb3coKTsKKyAgICBWZWN0
b3I8SW5zcGVjdG9yVGVzdDo6SW5zcGVjdG9yRXZlbnRzPiYgZXZlbnRzID0gdGVzdC0+bV9ldmVu
dHM7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAxKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgSW5zcGVjdG9yVGVzdDo6Q2xvc2VkKTsKKyAgICB0
ZXN0LT5tX2V2ZW50cy5jbGVhcigpOworfQorCit2b2lkIGJlZm9yZUFsbCgpCit7CisgICAgSW5z
cGVjdG9yVGVzdDo6YWRkKCJXZWJLaXRXZWJJbnNwZWN0b3IiLCAiZGVmYXVsdCIsIHRlc3RJbnNw
ZWN0b3JEZWZhdWx0KTsKKyAgICBDdXN0b21JbnNwZWN0b3JUZXN0OjphZGQoIldlYktpdFdlYklu
c3BlY3RvciIsICJtYW51YWwtYXR0YWNoLWRldGFjaCIsIHRlc3RJbnNwZWN0b3JNYW51YWxBdHRh
Y2hEZXRhY2gpOworICAgIEN1c3RvbUluc3BlY3RvclRlc3Q6OmFkZCgiV2ViS2l0V2ViSW5zcGVj
dG9yIiwgImN1c3RvbS1jb250YWluZXItZGVzdHJveWVkIiwgdGVzdEluc3BlY3RvckN1c3RvbUNv
bnRhaW5lckRlc3Ryb3llZCk7Cit9CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworfQpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RJbnNwZWN0b3JTZXJ2
ZXIuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RJbnNwZWN0
b3JTZXJ2ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiYjYyY2UK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsv
VGVzdEluc3BlY3RvclNlcnZlci5jcHAKQEAgLTAsMCArMSwyOTQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcyBMdGQuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAq
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIldlYlZp
ZXdUZXN0LmgiCisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorCisvLyBOYW1lIG9mIHRoZSB0ZXN0IHNlcnZlciBhcHBsaWNh
dGlvbiBjcmVhdGluZyB0aGUgd2ViVmlldyBvYmplY3QuCitzdGF0aWMgY29uc3QgY2hhciogZ1Rl
c3RTZXJ2ZXJBcHBOYW1lID0gIkluc3BlY3RvclRlc3RTZXJ2ZXIiOworCisvLyBNYXggc2Vjb25k
cyB0byB3YWl0IGZvciB0aGUgdGVzdCBzZXJ2ZXIgYmVmb3JlIGluc3BlY3RpbmcgaXQuCitzdGF0
aWMgY29uc3QgaW50IGdNYXhXYWl0Rm9yQ2hpbGQgPSA1OworCisvLyBUaGUgUElEIGZvciB0aGUg
dGVzdCBzZXJ2ZXIgcnVubmluZywgc28gd2UgY2FuIGtpbGwgaXQgaWYgbmVlZGVkLgorc3RhdGlj
IEdQaWQgZ0NoaWxkUHJvY2Vzc1BpZCA9IDA7CisKKy8vIFdoZXRoZXIgdGhlIGNoaWxkIGhhcyBy
ZXBsaWVkIGFuZCBpdCdzIHJlYWR5Lgorc3RhdGljIGJvb2wgZ0NoaWxkSXNSZWFkeSA9IGZhbHNl
OworCitzdGF0aWMgdm9pZCBzdG9wVGVzdFNlcnZlcigpCit7CisgICAgLy8gRG8gbm90aGluZyBp
ZiB0aGVyZSdzIG5vIHNlcnZlciBydW5uaW5nLgorICAgIGlmICghZ0NoaWxkUHJvY2Vzc1BpZCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgZ19zcGF3bl9jbG9zZV9waWQoZ0NoaWxkUHJvY2Vzc1Bp
ZCk7CisgICAga2lsbChnQ2hpbGRQcm9jZXNzUGlkLCBTSUdURVJNKTsKKyAgICBnQ2hpbGRQcm9j
ZXNzUGlkID0gMDsKK30KKworc3RhdGljIHZvaWQgc2lnQWJvcnRIYW5kbGVyKGludCBzaWdOdW0p
Cit7CisgICAgLy8gSnVzdCBzdG9wIHRoZSB0ZXN0IHNlcnZlciBpZiBTSUdBQlJUIHdhcyByZWNl
aXZlZC4KKyAgICBzdG9wVGVzdFNlcnZlcigpOworfQorCitzdGF0aWMgZ3BvaW50ZXIgdGVzdFNl
cnZlck1vbml0b3JUaHJlYWRGdW5jKGdwb2ludGVyKQoreworICAgIC8vIFdhaXQgZm9yIHRoZSBz
cGVjaWZpZWQgdGltZW91dCB0byBoYXBwZW4uCisgICAgZ191c2xlZXAoZ01heFdhaXRGb3JDaGls
ZCAqIEdfVVNFQ19QRVJfU0VDKTsKKworICAgIC8vIEtpbGwgdGhlIGNoaWxkIHByb2Nlc3MgaWYg
bm90IHJlYWR5IHlldC4KKyAgICBpZiAoIWdDaGlsZElzUmVhZHkpCisgICAgICAgIHN0b3BUZXN0
U2VydmVyKCk7CisKKyAgICBnX3RocmVhZF9leGl0KDApOworICAgIHJldHVybiAwOworfQorCitz
dGF0aWMgdm9pZCBzdGFydFRlc3RTZXJ2ZXJNb25pdG9yKCkKK3sKKyAgICBnQ2hpbGRJc1JlYWR5
ID0gZmFsc2U7CisgICAgZ190aHJlYWRfbmV3KCJUZXN0U2VydmVyTW9uaXRvciIsIHRlc3RTZXJ2
ZXJNb25pdG9yVGhyZWFkRnVuYywgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHN0YXJ0VGVzdFNlcnZl
cigpCit7CisgICAgLy8gUHJlcGFyZSBhcmd2W10gZm9yIHNwYXduaW5nIHRoZSBzZXJ2ZXIgcHJv
Y2Vzcy4KKyAgICBHT3duUHRyPGNoYXI+IHRlc3RTZXJ2ZXJQYXRoKGdfYnVpbGRfZmlsZW5hbWUo
V0VCS0lUX0VYRUNfUEFUSCwgIlRlc3RXZWJLaXRBUEkiLCAiV2ViS2l0Mkd0ayIsIGdUZXN0U2Vy
dmVyQXBwTmFtZSwgTlVMTCkpOworCisgICAgLy8gV2UgaW5zdGFsbCBhIGhhbmRsZXIgdG8gZW5z
dXJlIHRoYXQgd2Uga2lsbCB0aGUgY2hpbGQgcHJvY2VzcworICAgIC8vIGlmIHRoZSBwYXJlbnQg
ZGllcyBiZWNhdXNlIG9mIHdoYXRldmVyIHRoZSByZWFzb24gaXMuCisgICAgc2lnbmFsKFNJR0FC
UlQsIHNpZ0Fib3J0SGFuZGxlcik7CisKKyAgICBjaGFyKiB0ZXN0U2VydmVyQXJndlsyXTsKKyAg
ICB0ZXN0U2VydmVyQXJndlswXSA9IHRlc3RTZXJ2ZXJQYXRoLmdldCgpOworICAgIHRlc3RTZXJ2
ZXJBcmd2WzFdID0gMDsKKworICAgIC8vIFNwYXduIHRoZSBzZXJ2ZXIsIGdldHRpbmcgaXRzIHN0
ZG91dCBmaWxlIGRlc2NyaXB0b3IgdG8gc2V0IGEKKyAgICAvLyBjb21tdW5pY2F0aW9uIGNoYW5u
ZWwsIHNvIHdlIGtub3cgd2hlbiBpdCdzIHJlYWR5LgorICAgIGludCBjaGlsZFN0ZG91dCA9IDA7
CisgICAgZ19hc3NlcnQoZ19zcGF3bl9hc3luY193aXRoX3BpcGVzKDAsIHRlc3RTZXJ2ZXJBcmd2
LCAwLCBzdGF0aWNfY2FzdDxHU3Bhd25GbGFncz4oMCksIDAsIDAsCisgICAgICAgICZnQ2hpbGRQ
cm9jZXNzUGlkLCAwLCAmY2hpbGRTdGRvdXQsIDAsIDApKTsKKworICAgIC8vIFN0YXJ0IG1vbml0
b3JpbmcgdGhlIHRlc3Qgc2VydmVyIChpbiBhIHNlcGFyYXRlIHRocmVhZCkgdG8KKyAgICAvLyBl
bnN1cmUgd2UgZG9uJ3QgYmxvY2sgb24gdGhlIGNoaWxkIHByb2Nlc3MgbW9yZSB0aGFuIGEgdGlt
ZW91dC4KKyAgICBzdGFydFRlc3RTZXJ2ZXJNb25pdG9yKCk7CisKKyAgICBjaGFyIG1zZ1syXTsK
KyAgICBHSU9DaGFubmVsKiBpb0NoYW5uZWwgPSBnX2lvX2NoYW5uZWxfdW5peF9uZXcoY2hpbGRT
dGRvdXQpOworICAgIGlmIChnX2lvX2NoYW5uZWxfcmVhZF9jaGFycyhpb0NoYW5uZWwsIG1zZywg
MiwgMCwgMCkgPT0gR19JT19TVEFUVVNfTk9STUFMKSB7CisgICAgICAgIC8vIENoZWNrIHdoZXRo
ZXIgdGhlIHNlcnZlciBzZW50IGEgbWVzc2FnZSBzYXlpbmcgaXQncyByZWFkeQorICAgICAgICAv
LyBhbmQgc3RvcmUgdGhlIHJlc3VsdCBnbG9iYWxseSwgc28gdGhlIG1vbml0b3IgY2FuIHNlZSBp
dC4KKyAgICAgICAgZ0NoaWxkSXNSZWFkeSA9IG1zZ1swXSA9PSAnTycgJiYgbXNnWzFdID09ICdL
JzsKKyAgICB9CisgICAgZ19pb19jaGFubmVsX3VucmVmKGlvQ2hhbm5lbCk7CisgICAgY2xvc2Uo
Y2hpbGRTdGRvdXQpOworCisgICAgLy8gVGhlIHRpbWVvdXQgd2FzIHJlYWNoZWQgYW5kIHRoZSBz
ZXJ2ZXIgaXMgbm90IHJlYWR5IHlldCwgc28KKyAgICAvLyBzdG9wIGl0IGlubWVkaWF0ZWx5LCBh
bmQgbGV0IHRoZSB1bml0IHRlc3RzIGZhaWwuCisgICAgaWYgKCFnQ2hpbGRJc1JlYWR5KQorICAg
ICAgICBzdG9wVGVzdFNlcnZlcigpOworfQorCitjbGFzcyBJbnNwZWN0b3JTZXJ2ZXJUZXN0OiBw
dWJsaWMgV2ViVmlld1Rlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUo
SW5zcGVjdG9yU2VydmVyVGVzdCk7CisKKyAgICBJbnNwZWN0b3JTZXJ2ZXJUZXN0KCkKKyAgICAg
ICAgOiBXZWJWaWV3VGVzdCgpCisgICAgeworICAgIH0KKworICAgIGJvb2wgZ2V0UGFnZUxpc3Qo
KQorICAgIHsKKyAgICAgICAgbG9hZEh0bWwoIjxzY3JpcHQgdHlwZT1cInRleHQvamF2YXNjcmlw
dFwiPlxuIgorICAgICAgICAgICAgInZhciBwYWdlcztcbiIKKyAgICAgICAgICAgICJ2YXIgeGhy
ID0gbmV3IFhNTEh0dHBSZXF1ZXN0O1xuIgorICAgICAgICAgICAgInhoci5vcGVuKFwiR0VUXCIs
IFwiL3BhZ2VsaXN0Lmpzb25cIik7XG4iCisgICAgICAgICAgICAieGhyLm9ubG9hZCA9IGZ1bmN0
aW9uKGUpIHtcbiIKKyAgICAgICAgICAgICAgICAiaWYgKHhoci5zdGF0dXMgPT0gMjAwKSB7XG4i
CisgICAgICAgICAgICAgICAgICAgICJwYWdlcyA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4
dCk7XG4iCisgICAgICAgICAgICAgICAgICAgICJkb2N1bWVudC50aXRsZSA9IFwiT0tcIjtcbiIK
KyAgICAgICAgICAgICAgICAifSBlbHNlIFxuIgorICAgICAgICAgICAgICAgICAgICAiZG9jdW1l
bnQudGl0bGUgPSBcIkZBSUxcIjtcbiIKKyAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAg
ICAgInhoci5zZW5kKCk7XG4iCisgICAgICAgICAgICAiPC9zY3JpcHQ+XG4iLAorICAgICAgICAg
ICAgImh0dHA6Ly8xMjcuMC4wLjE6Mjk5OS8iKTsKKworICAgICAgICB3YWl0VW50aWxUaXRsZUNo
YW5nZWQoKTsKKworICAgICAgICBpZiAoIXN0cmNtcCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3RpdGxl
KG1fd2ViVmlldyksICJPSyIpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIH5JbnNwZWN0b3JTZXJ2ZXJUZXN0KCkKKyAgICB7
CisgICAgfQorfTsKKworLy8gVGVzdCB0byBnZXQgaW5zcGVjdG9yIHNlcnZlciBwYWdlIGxpc3Qg
ZnJvbSB0aGUgdGVzdCBzZXJ2ZXIuCisvLyBTaG91bGQgY29udGFpbiBvbmx5IG9uZSBlbnRyeSBw
b2ludGluZyB0byBodHRwOi8vMTI3LjAuMC4xOjI5OTkvd2ViaW5zcGVjdG9yL01haW4uaHRtbD9w
YWdlPTEKK3N0YXRpYyB2b2lkIHRlc3RJbnNwZWN0b3JTZXJ2ZXJQYWdlTGlzdChJbnNwZWN0b3JT
ZXJ2ZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIEdPd25QdHI8R0Vycm9yPiBl
cnJvcjsKKworICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZChHVEtfV0lO
RE9XX1RPUExFVkVMKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5nZXRQYWdlTGlzdCgpKTsKKworICAg
IFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZh
U2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoInBhZ2VzLmxlbmd0aDsiLCAmZXJyb3Iub3V0UHRy
KCkpOworICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KCFlcnJv
ci5nZXQoKSk7CisgICAgZ19hc3NlcnRfY21waW50KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVz
dWx0VG9OdW1iZXIoamF2YXNjcmlwdFJlc3VsdCksID09LCAxKTsKKworICAgIGphdmFzY3JpcHRS
ZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoInBhZ2VzWzBd
LmlkOyIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7
CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKyAgICBpbnQgcGFnZUlkID0gV2ViVmlld1Rl
c3Q6OmphdmFzY3JpcHRSZXN1bHRUb051bWJlcihqYXZhc2NyaXB0UmVzdWx0KTsKKworICAgIEdP
d25QdHI8Y2hhcj4gdmFsdWVTdHJpbmc7CisgICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1
bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgicGFnZXNbMF0udXJsOyIsICZlcnJvci5v
dXRQdHIoKSk7CisgICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQo
IWVycm9yLmdldCgpKTsKKyAgICB2YWx1ZVN0cmluZy5zZXQoV2ViVmlld1Rlc3Q6OmphdmFzY3Jp
cHRSZXN1bHRUb0NTdHJpbmcoamF2YXNjcmlwdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0X2NtcHN0
cih2YWx1ZVN0cmluZy5nZXQoKSwgPT0sICJodHRwOi8vMTI3LjAuMC4xOjI5OTkvIik7CisKKyAg
ICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlz
aGVkKCJwYWdlc1swXS5pbnNwZWN0b3JVcmw7IiwgJmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fz
c2VydChqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOworICAg
IHZhbHVlU3RyaW5nLnNldChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhq
YXZhc2NyaXB0UmVzdWx0KSk7CisgICAgU3RyaW5nIHZhbGlkSW5zcGVjdG9yVVJMID0gU3RyaW5n
KCIvTWFpbi5odG1sP3BhZ2U9IikgKyBTdHJpbmc6Om51bWJlcihwYWdlSWQpOworICAgIEFTU0VS
VF9DTVBfQ1NUUklORyh2YWx1ZVN0cmluZy5nZXQoKSwgPT0sIHZhbGlkSW5zcGVjdG9yVVJMLnV0
ZjgoKSk7Cit9CisKKy8vIFRlc3Qgc2VuZGluZyBhIHJhdyByZW1vdGUgZGVidWdnaW5nIG1lc3Nh
Z2UgdGhyb3VnaCBvdXIgd2ViIHNvY2tldCBzZXJ2ZXIuCisvLyBGb3IgdGhpcyBzcGVjaWZpYyBt
ZXNzYWdlIHNlZTogaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9jaHJvbWUvZGV2dG9vbHMvZG9jcy9w
cm90b2NvbC90b3QvcnVudGltZS5odG1sI2NvbW1hbmQtZXZhbHVhdGUKK3N0YXRpYyB2b2lkIHRl
c3RSZW1vdGVEZWJ1Z2dpbmdNZXNzYWdlKEluc3BlY3RvclNlcnZlclRlc3QqIHRlc3QsIGdjb25z
dHBvaW50ZXIpCit7CisgICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKEdU
S19XSU5ET1dfVE9QTEVWRUwpOworCisgICAgdGVzdC0+bG9hZEh0bWwoIjxzY3JpcHQgdHlwZT1c
InRleHQvamF2YXNjcmlwdFwiPlxuIgorICAgICAgICAidmFyIHNvY2tldCA9IG5ldyBXZWJTb2Nr
ZXQoJ3dzOi8vMTI3LjAuMC4xOjI5OTkvZGV2dG9vbHMvcGFnZS8xJyk7XG4iCisgICAgICAgICJz
b2NrZXQub25tZXNzYWdlID0gZnVuY3Rpb24obWVzc2FnZSkge1xuIgorICAgICAgICAgICAgInZh
ciByZXNwb25zZSA9IEpTT04ucGFyc2UobWVzc2FnZS5kYXRhKTtcbiIKKyAgICAgICAgICAgICJp
ZiAocmVzcG9uc2UuaWQgPT09IDEpXG4iCisgICAgICAgICAgICAgICAgImRvY3VtZW50LnRpdGxl
ID0gcmVzcG9uc2UucmVzdWx0LnJlc3VsdC52YWx1ZTtcbiIKKyAgICAgICAgICAgICJlbHNlXG4i
CisgICAgICAgICAgICAgICAgImRvY3VtZW50LnRpdGxlID0gXCJGQUlMXCI7XG4iCisgICAgICAg
ICAgICAifVxuIgorICAgICAgICAgICAgInNvY2tldC5vbm9wZW4gPSBmdW5jdGlvbigpIHtcbiIK
KyAgICAgICAgICAgICJzb2NrZXQuc2VuZCgne1wiaWRcIjogMSwgXCJtZXRob2RcIjogXCJSdW50
aW1lLmV2YWx1YXRlXCIsIFwicGFyYW1zXCI6IHtcImV4cHJlc3Npb25cIjogXCIyICsgMlwiIH0g
fScpO1xuIgorICAgICAgICAifVxuIgorICAgICAgICAiPC9zY3JpcHQ+IiwKKyAgICAgICAgImh0
dHA6Ly8xMjcuMC4wLjE6Mjk5OS8iKTsKKyAgICB0ZXN0LT53YWl0VW50aWxUaXRsZUNoYW5nZWQo
KTsKKworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3RpdGxlKHRlc3Qt
Pm1fd2ViVmlldyksID09LCAiNCIpOworfQorCitzdGF0aWMgdm9pZCBvcGVuUmVtb3RlRGVidWdn
aW5nU2Vzc2lvbihJbnNwZWN0b3JTZXJ2ZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQorewor
ICAgIC8vIFRvIHRlc3QgdGhlIHdob2xlIHBpcGVsaW5lIHRoaXMgZXhwbG9pdHMgYSBiZWhhdmlv
ciBvZiB0aGUgaW5zcGVjdG9yIGZyb250LWVuZCB3aGljaCB3b24ndCBwcm92aWRlIHRoZSBwYWdl
IGFkZHJlc3MgYXMgdGl0bGUgdW5sZXNzIHRoZQorICAgIC8vIGRlYnVnZ2luZyBzZXNzaW9uIHdh
cyBlc3RhYmxpc2hlZCBjb3JyZWN0bHkgdGhyb3VnaCB3ZWIgc29ja2V0LgorICAgIC8vIEluIG91
ciBjYXNlIHBhZ2UgVVJMIHNob3VsZCBiZSBodHRwOi8vMTI3LjAuMC4xOjI5OTkvCisgICAgLy8g
U28gdGhpcyB0ZXN0IGNhc2Ugd2lsbCBmYWlsIGlmOgorICAgIC8vIC0gVGhlIHBhZ2UgbGlzdCBk
aWRuJ3QgcmV0dXJuIGEgdmFsaWQgaW5zcGVjdG9yIFVSTAorICAgIC8vIC0gT3IgdGhlIGZyb250
LWVuZCBjb3VsZG4ndCBiZSBsb2FkZWQgdGhyb3VnaCB0aGUgaW5zcGVjdG9yIEhUVFAgc2VydmVy
CisgICAgLy8gLSBPciB0aGUgd2ViIHNvY2tldCBjb25uZWN0aW9uIGNvdWxkbid0IGJlIGVzdGFi
bGlzaGVkIGJldHdlZW4gdGhlIGZyb250LWVuZCBhbmQgdGhlIHBhZ2UgdGhyb3VnaCB0aGUgaW5z
cGVjdG9yIHNlcnZlcgorICAgIC8vIExldCdzIHNlZSBpZiB0aGlzIHRlc3QgaXNuJ3QgcmFpc2lu
ZyB0b28gbWFueSBmYWxzZSBwb3NpdGl2ZXMsIGluIHdoaWNoIGNhc2Ugd2Ugc2hvdWxkIHVzZSBh
IGJldHRlciBwcmVkaWNhdGUgaWYgYXZhaWxhYmxlLgorCisgICAgdGVzdC0+c2hvd0luV2luZG93
QW5kV2FpdFVudGlsTWFwcGVkKEdUS19XSU5ET1dfVE9QTEVWRUwpOworCisgICAgZ19hc3NlcnQo
dGVzdC0+Z2V0UGFnZUxpc3QoKSk7CisKKyAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAg
V2ViS2l0SmF2YXNjcmlwdFJlc3VsdCogamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFT
Y3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgicGFnZXNbMF0uaW5zcGVjdG9yVXJsOyIsICZlcnJv
ci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3Nl
cnQoIWVycm9yLmdldCgpKTsKKworICAgIFN0cmluZyByZXNvbHZlZFVSTCA9IFN0cmluZygiaHR0
cDovLzEyNy4wLjAuMToyOTk5LyIpICsgU3RyaW5nOjpmcm9tVVRGOChXZWJWaWV3VGVzdDo6amF2
YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7CisgICAgdGVzdC0+bG9h
ZFVSSShyZXNvbHZlZFVSTC51dGY4KCkuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2Fk
RmluaXNoZWQoKTsKKworICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0
QW5kV2FpdFVudGlsRmluaXNoZWQoIndpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFt
ZSgnbGknKVswXS50aXRsZSIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQoamF2YXNj
cmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKworICAgIEdPd25QdHI8
Y2hhcj4gdGl0bGUoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0NTdHJpbmcoamF2YXNj
cmlwdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0aXRsZS5nZXQoKSwgPT0sICJodHRw
Oi8vMTI3LjAuMC4xOjI5OTkvIik7Cit9CisKK3N0YXRpYyB2b2lkIHNlbmRJbmNvbXBsZXRlUmVx
dWVzdChJbnNwZWN0b3JTZXJ2ZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIEdP
d25QdHI8R0Vycm9yPiBlcnJvcjsKKworICAgIC8vIENvbm5lY3QgdG8gdGhlIGluc3BlY3RvciBz
ZXJ2ZXIuCisgICAgR1JlZlB0cjxHU29ja2V0Q2xpZW50PiBjbGllbnQgPSBhZG9wdEdSZWYoZ19z
b2NrZXRfY2xpZW50X25ldygpKTsKKyAgICBHUmVmUHRyPEdTb2NrZXRDb25uZWN0aW9uPiBjb25u
ZWN0aW9uID0gYWRvcHRHUmVmKGdfc29ja2V0X2NsaWVudF9jb25uZWN0X3RvX2hvc3QoY2xpZW50
LmdldCgpLCAiMTI3LjAuMC4xIiwgMjk5OSwgMCwgJmVycm9yLm91dFB0cigpKSk7CisgICAgZ19h
c3NlcnRfbm9fZXJyb3IoZXJyb3IuZ2V0KCkpOworCisgICAgLy8gU2VuZCBpbmNvbXBsZXRlIHJl
cXVlc3QgKG1pc3NpbmcgYmxhbmsgbGluZSBhZnRlciBoZWFkZXJzKSBhbmQgY2hlY2sgaWYgaW5z
cGVjdG9yIHNlcnZlcgorICAgIC8vIHJlcGxpZXMuIFRoZSBzZXJ2ZXIgc2hvdWxkIG5vdCByZXBs
eSB0byBhbiBpbmNvbXBsZXRlIHJlcXVlc3QgYW5kIHRoZSB0ZXN0IHNob3VsZCB0aW1lb3V0Cisg
ICAgLy8gb24gcmVhZC4KKyAgICBHT3V0cHV0U3RyZWFtKiBvc3RyZWFtID0gZ19pb19zdHJlYW1f
Z2V0X291dHB1dF9zdHJlYW0oR19JT19TVFJFQU0oY29ubmVjdGlvbi5nZXQoKSkpOworICAgIC8v
IFJlcXVlc3QgbWlzc2luZyBibGFuayBsaW5lIGFmdGVyIGhlYWRlcnMuCisgICAgY29uc3QgZ2No
YXIqIGluY29tcGxldGVSZXF1ZXN0ID0gIkdFVCAvZGV2dG9vbHMvcGFnZS8xIEhUVFAvMS4xXHJc
bkhvc3Q6IExvY2FsaG9zdFxyXG4iOworICAgIGdfb3V0cHV0X3N0cmVhbV93cml0ZShvc3RyZWFt
LCBpbmNvbXBsZXRlUmVxdWVzdCwgc3RybGVuKGluY29tcGxldGVSZXF1ZXN0KSwgMCwgJmVycm9y
Lm91dFB0cigpKTsKKyAgICBnX2Fzc2VydF9ub19lcnJvcihlcnJvci5nZXQoKSk7CisKKyAgICBH
SW5wdXRTdHJlYW0qIGlzdHJlYW0gPSBnX2lvX3N0cmVhbV9nZXRfaW5wdXRfc3RyZWFtKEdfSU9f
U1RSRUFNKGNvbm5lY3Rpb24uZ2V0KCkpKTsKKyAgICBjaGFyIHJlc3BvbnNlWzE2XTsKKyAgICBt
ZW1zZXQocmVzcG9uc2UsIDAsIHNpemVvZihyZXNwb25zZSkpOworICAgIEdSZWZQdHI8R0NhbmNl
bGxhYmxlPiBjYW5jZWwgPSBhZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSk7CisgICAgZ19p
bnB1dF9zdHJlYW1fcmVhZF9hc3luYyhpc3RyZWFtLCByZXNwb25zZSwgc2l6ZW9mKHJlc3BvbnNl
KSAtIDEsIEdfUFJJT1JJVFlfREVGQVVMVCwgY2FuY2VsLmdldCgpLCAwLCAwKTsKKyAgICAvLyBH
aXZlIGEgY2hhbmNlIGZvciB0aGUgc2VydmVyIHRvIHJlcGx5LgorICAgIHRlc3QtPndhaXQoMSk7
CisgICAgZ19jYW5jZWxsYWJsZV9jYW5jZWwoY2FuY2VsLmdldCgpKTsKKyAgICAvLyBJZiB3ZSBn
b3QgYW55IGFuc3dlciBpdCBtZWFucyB0aGUgc2VydmVyIHJlcGxpZWQgdG8gYW4gaW5jb21wbGV0
ZSByZXF1ZXN0LCBsZXRzIGZhaWwuCisgICAgZ19hc3NlcnQocmVzcG9uc2VbMF0gPT0gJ1wwJyk7
Cit9CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICAvLyBPdmVyd3JpdGUgV0VCS0lUX0lOU1BF
Q1RPUl9TRVJWRVIgdmFyaWFibGUgd2l0aCBkZWZhdWx0IElQIGFkZHJlc3MgYnV0IGRpZmZlcmVu
dCBwb3J0IHRvIGF2b2lkIGNvbmZsaWN0IHdpdGggdGhlIHRlc3QgaW5zcGVjdG9yIHNlcnZlciBw
YWdlLgorICAgIGdfc2V0ZW52KCJXRUJLSVRfSU5TUEVDVE9SX1NFUlZFUiIsICIxMjcuMC4wLjE6
Mjk5OCIsIFRSVUUpOworCisgICAgc3RhcnRUZXN0U2VydmVyKCk7CisgICAgSW5zcGVjdG9yU2Vy
dmVyVGVzdDo6YWRkKCJXZWJLaXRXZWJJbnNwZWN0b3JTZXJ2ZXIiLCAidGVzdC1wYWdlLWxpc3Qi
LCB0ZXN0SW5zcGVjdG9yU2VydmVyUGFnZUxpc3QpOworICAgIEluc3BlY3RvclNlcnZlclRlc3Q6
OmFkZCgiV2ViS2l0V2ViSW5zcGVjdG9yU2VydmVyIiwgInRlc3QtcmVtb3RlLWRlYnVnZ2luZy1t
ZXNzYWdlIiwgdGVzdFJlbW90ZURlYnVnZ2luZ01lc3NhZ2UpOworICAgIEluc3BlY3RvclNlcnZl
clRlc3Q6OmFkZCgiV2ViS2l0V2ViSW5zcGVjdG9yU2VydmVyIiwgInRlc3Qtb3Blbi1kZWJ1Z2dp
bmctc2Vzc2lvbiIsIG9wZW5SZW1vdGVEZWJ1Z2dpbmdTZXNzaW9uKTsKKyAgICBJbnNwZWN0b3JT
ZXJ2ZXJUZXN0OjphZGQoIldlYktpdFdlYkluc3BlY3RvclNlcnZlciIsICJ0ZXN0LWluY29tcGxl
dGUtcmVxdWVzdCIsIHNlbmRJbmNvbXBsZXRlUmVxdWVzdCk7CisKK30KKwordm9pZCBhZnRlckFs
bCgpCit7CisgICAgc3RvcFRlc3RTZXJ2ZXIoKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0TG9hZGVyQ2xpZW50LmNwcCBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0TG9hZGVyQ2xpZW50LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzE5MTVlCi0tLSAvZGV2L251bGwKKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RMb2FkZXJDbGllbnQuY3Bw
CkBAIC0wLDAgKzEsNDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIEd1c3Rh
dm8gTm9yb25oYSBTaWx2YQorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExIElnYWxpYSBTLkwu
CisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTEgTW90b3JvbGEgTW9iaWxpdHksIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkxv
YWRUcmFja2luZ1Rlc3QuaCIKKyNpbmNsdWRlICJXZWJLaXRUZXN0QnVzLmgiCisjaW5jbHVkZSAi
V2ViS2l0VGVzdFNlcnZlci5oIgorI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCisjaW5jbHVkZSA8
Z3RrL2d0ay5oPgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KKworc3RhdGljIFdlYktpdFRlc3RCdXMqIGJ1czsKK3N0YXRpYyBXZWJLaXRU
ZXN0U2VydmVyKiBrU2VydmVyOworCitjb25zdCBjaGFyKiBrRE5USGVhZGVyTm90UHJlc2VudCA9
ICJETlQgaGVhZGVyIG5vdCBwcmVzZW50IjsKKworc3RhdGljIHZvaWQgdGVzdExvYWRpbmdTdGF0
dXMoTG9hZFRyYWNraW5nVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIHRl
c3QtPnNldFJlZGlyZWN0VVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9ub3JtYWwiKS5kYXRh
KCkpOworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3JlZGlyZWN0
IikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIFZl
Y3RvcjxMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRXZlbnRzPiYgZXZlbnRzID0gdGVzdC0+bV9sb2Fk
RXZlbnRzOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgNCk7CisgICAg
Z19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lv
bmFsTG9hZFN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBMb2Fk
VHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRSZWNlaXZlZFNlcnZlclJlZGlyZWN0KTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZENv
bW1pdHRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1szXSwgPT0sIExvYWRUcmFja2lu
Z1Rlc3Q6OkxvYWRGaW5pc2hlZCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RMb2FkaW5nRXJyb3Io
TG9hZFRyYWNraW5nVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2Fk
VVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9lcnJvciIpLmRhdGEoKSk7CisgICAgdGVzdC0+
d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBWZWN0b3I8TG9hZFRyYWNraW5nVGVzdDo6
TG9hZEV2ZW50cz4mIGV2ZW50cyA9IHRlc3QtPm1fbG9hZEV2ZW50czsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDMpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNb
MF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9u
YWxMb2FkRmFpbGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgTG9hZFRy
YWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKK30KKworc3RhdGljIHZvaWQgYXNzZXJ0Tm9ybWFs
TG9hZEhhcHBlbmVkKFZlY3RvcjxMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRXZlbnRzPiYgZXZlbnRz
KQoreworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgMyk7CisgICAgZ19h
c3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFs
TG9hZFN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBMb2FkVHJh
Y2tpbmdUZXN0OjpMb2FkQ29tbWl0dGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJd
LCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKK30KKworc3RhdGljIHZvaWQg
dGVzdExvYWRIdG1sKExvYWRUcmFja2luZ1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7Cisg
ICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxib2R5PkhlbGxvIFdlYktpdC1HVEsrPC9ib2R5Pjwv
aHRtbD4iLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBhc3Nl
cnROb3JtYWxMb2FkSGFwcGVuZWQodGVzdC0+bV9sb2FkRXZlbnRzKTsKK30KKworc3RhdGljIHZv
aWQgdGVzdExvYWRBbHRlcm5hdGVIVE1MKExvYWRUcmFja2luZ1Rlc3QqIHRlc3QsIGdjb25zdHBv
aW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEFsdGVybmF0ZUhUTUwoIjxodG1sPjxib2R5PkFsdGVy
bmF0ZSBwYWdlPC9ib2R5PjwvaHRtbD4iLCAiaHR0cDovL2Vycm9yLXBhZ2UuZm9vLyIsIDApOwor
ICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIGFzc2VydE5vcm1hbExvYWRI
YXBwZW5lZCh0ZXN0LT5tX2xvYWRFdmVudHMpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0TG9hZFBs
YWluVGV4dChMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRl
c3QtPmxvYWRQbGFpblRleHQoIkhlbGxvIFdlYktpdC1HVEsrIik7CisgICAgdGVzdC0+d2FpdFVu
dGlsTG9hZEZpbmlzaGVkKCk7CisgICAgYXNzZXJ0Tm9ybWFsTG9hZEhhcHBlbmVkKHRlc3QtPm1f
bG9hZEV2ZW50cyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RMb2FkUmVxdWVzdChMb2FkVHJhY2tp
bmdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIEdSZWZQdHI8V2ViS2l0VVJJUmVx
dWVzdD4gcmVxdWVzdCh3ZWJraXRfdXJpX3JlcXVlc3RfbmV3KGtTZXJ2ZXItPmdldFVSSUZvclBh
dGgoIi9ub3JtYWwiKS5kYXRhKCkpKTsKKyAgICB0ZXN0LT5sb2FkUmVxdWVzdChyZXF1ZXN0Lmdl
dCgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBhc3NlcnROb3Jt
YWxMb2FkSGFwcGVuZWQodGVzdC0+bV9sb2FkRXZlbnRzKTsKK30KKworY2xhc3MgTG9hZFN0b3BU
cmFja2luZ1Rlc3QgOiBwdWJsaWMgTG9hZFRyYWNraW5nVGVzdCB7CitwdWJsaWM6CisgICAgTUFL
RV9HTElCX1RFU1RfRklYVFVSRShMb2FkU3RvcFRyYWNraW5nVGVzdCk7CisKKyAgICB2aXJ0dWFs
IHZvaWQgbG9hZENvbW1pdHRlZCgpCisgICAgeworICAgICAgICBMb2FkVHJhY2tpbmdUZXN0Ojps
b2FkQ29tbWl0dGVkKCk7CisgICAgICAgIHdlYmtpdF93ZWJfdmlld19zdG9wX2xvYWRpbmcobV93
ZWJWaWV3KTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIGxvYWRGYWlsZWQoY29uc3QgZ2NoYXIq
IGZhaWxpbmdVUkksIEdFcnJvciogZXJyb3IpCisgICAgeworICAgICAgICBnX2Fzc2VydChnX2Vy
cm9yX21hdGNoZXMoZXJyb3IsIFdFQktJVF9ORVRXT1JLX0VSUk9SLCBXRUJLSVRfTkVUV09SS19F
UlJPUl9DQU5DRUxMRUQpKTsKKyAgICAgICAgTG9hZFRyYWNraW5nVGVzdDo6bG9hZEZhaWxlZChm
YWlsaW5nVVJJLCBlcnJvcik7CisgICAgfQorfTsKKworc3RhdGljIHZvaWQgdGVzdExvYWRDYW5j
ZWxsZWQoTG9hZFN0b3BUcmFja2luZ1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAg
dGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvY2FuY2VsbGVkIikuZGF0YSgp
KTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIFZlY3RvcjxMb2Fk
VHJhY2tpbmdUZXN0OjpMb2FkRXZlbnRzPiYgZXZlbnRzID0gdGVzdC0+bV9sb2FkRXZlbnRzOwor
ICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgNCk7CisgICAgZ19hc3NlcnRf
Y21waW50KGV2ZW50c1swXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0
YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdU
ZXN0OjpMb2FkQ29tbWl0dGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwg
TG9hZFRyYWNraW5nVGVzdDo6TG9hZEZhaWxlZCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50
c1szXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7Cit9CisKK3N0YXRpYyB2
b2lkIHRlc3RXZWJWaWV3VGl0bGUoTG9hZFRyYWNraW5nVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRl
cikKK3sKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2dldF90aXRsZSh0ZXN0LT5tX3dl
YlZpZXcpKTsKKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGhlYWQ+PHRpdGxlPldlbGNvbWUg
dG8gV2ViS2l0LUdUSyshPC90aXRsZT48L2hlYWQ+PC9odG1sPiIsIDApOworICAgIHRlc3QtPndh
aXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X3RpdGxlKHRlc3QtPm1fd2ViVmlldyksID09LCAiV2VsY29tZSB0byBXZWJLaXQtR1RL
KyEiKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdSZWxvYWQoTG9hZFRyYWNraW5nVGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICAvLyBDaGVjayB0aGF0IG5vdGhpbmcgaGFw
cGVucyB3aGVuIHRoZXJlJ3Mgbm90aGluZyB0byByZWxvYWQuCisgICAgdGVzdC0+cmVsb2FkKCk7
CisgICAgdGVzdC0+d2FpdCgwLjI1KTsgLy8gV2FpdCBmb3IgYSBxdWFydGVyIG9mIGEgc2Vjb25k
LgorCisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvbm9ybWFsIiku
ZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBhc3NlcnRO
b3JtYWxMb2FkSGFwcGVuZWQodGVzdC0+bV9sb2FkRXZlbnRzKTsKKworICAgIHRlc3QtPnJlbG9h
ZCgpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIGFzc2VydE5vcm1h
bExvYWRIYXBwZW5lZCh0ZXN0LT5tX2xvYWRFdmVudHMpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0
TG9hZFByb2dyZXNzKExvYWRUcmFja2luZ1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7Cisg
ICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvbm9ybWFsIikuZGF0YSgp
KTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydF9jbXBm
bG9hdCh0ZXN0LT5tX2VzdGltYXRlZFByb2dyZXNzLCA9PSwgMSk7Cit9CisKK3N0YXRpYyB2b2lk
IHRlc3RXZWJWaWV3SGlzdG9yeUxvYWQoTG9hZFRyYWNraW5nVGVzdCogdGVzdCwgZ2NvbnN0cG9p
bnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9ub3Jt
YWwiKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIGFz
c2VydE5vcm1hbExvYWRIYXBwZW5lZCh0ZXN0LT5tX2xvYWRFdmVudHMpOworCisgICAgdGVzdC0+
bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvbm9ybWFsMiIpLmRhdGEoKSk7CisgICAg
dGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgYXNzZXJ0Tm9ybWFsTG9hZEhhcHBl
bmVkKHRlc3QtPm1fbG9hZEV2ZW50cyk7CisKKyAgICAvLyBDaGVjayB0aGF0IGxvYWQgcHJvY2Vz
cyBpcyB0aGUgc2FtZSBmb3IgcGFnZXMgbG9hZGVkIGZyb20gaGlzdG9yeSBjYWNoZS4KKyAgICB0
ZXN0LT5nb0JhY2soKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBh
c3NlcnROb3JtYWxMb2FkSGFwcGVuZWQodGVzdC0+bV9sb2FkRXZlbnRzKTsKKworICAgIHRlc3Qt
PmdvRm9yd2FyZCgpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIGFz
c2VydE5vcm1hbExvYWRIYXBwZW5lZCh0ZXN0LT5tX2xvYWRFdmVudHMpOworfQorCitjbGFzcyBW
aWV3VVJJVHJhY2tpbmdUZXN0OiBwdWJsaWMgTG9hZFRyYWNraW5nVGVzdCB7CitwdWJsaWM6Cisg
ICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShWaWV3VVJJVHJhY2tpbmdUZXN0KTsKKworICAgIHN0
YXRpYyB2b2lkIHVyaUNoYW5nZWQoR09iamVjdCosIEdQYXJhbVNwZWMqLCBWaWV3VVJJVHJhY2tp
bmdUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPm1fYWN0
aXZlVVJJLmRhdGEoKSwgIT0sIHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKHRlc3QtPm1fd2ViVmll
dykpOworICAgICAgICB0ZXN0LT5tX2FjdGl2ZVVSSSA9IHdlYmtpdF93ZWJfdmlld19nZXRfdXJp
KHRlc3QtPm1fd2ViVmlldyk7CisgICAgfQorCisgICAgVmlld1VSSVRyYWNraW5nVGVzdCgpCisg
ICAgICAgIDogbV9hY3RpdmVVUkkod2Via2l0X3dlYl92aWV3X2dldF91cmkobV93ZWJWaWV3KSkK
KyAgICB7CisgICAgICAgIGdfYXNzZXJ0KG1fYWN0aXZlVVJJLmlzTnVsbCgpKTsKKyAgICAgICAg
Z19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJub3RpZnk6OnVyaSIsIEdfQ0FMTEJBQ0sodXJp
Q2hhbmdlZCksIHRoaXMpOworICAgIH0KKworICAgIHZvaWQgcHJvdmlzaW9uYWxMb2FkU3RhcnRl
ZCgpCisgICAgeworICAgICAgICBjaGVja0FjdGl2ZVVSSSgiL3JlZGlyZWN0Iik7CisgICAgfQor
CisgICAgdm9pZCBwcm92aXNpb25hbExvYWRSZWNlaXZlZFNlcnZlclJlZGlyZWN0KCkKKyAgICB7
CisgICAgICAgIGNoZWNrQWN0aXZlVVJJKCIvbm9ybWFsIik7CisgICAgfQorCisgICAgdm9pZCBs
b2FkQ29tbWl0dGVkKCkKKyAgICB7CisgICAgICAgIGNoZWNrQWN0aXZlVVJJKCIvbm9ybWFsIik7
CisgICAgfQorCisgICAgdm9pZCBsb2FkRmluaXNoZWQoKQorICAgIHsKKyAgICAgICAgY2hlY2tB
Y3RpdmVVUkkoIi9ub3JtYWwiKTsKKyAgICAgICAgTG9hZFRyYWNraW5nVGVzdDo6bG9hZEZpbmlz
aGVkKCk7CisgICAgfQorCisgICAgQ1N0cmluZyBtX2FjdGl2ZVVSSTsKKworcHJpdmF0ZToKKyAg
ICB2b2lkIGNoZWNrQWN0aXZlVVJJKGNvbnN0IGNoYXIqIHVyaSkKKyAgICB7CisgICAgICAgIEFT
U0VSVF9DTVBfQ1NUUklORyhtX2FjdGl2ZVVSSSwgPT0sIGtTZXJ2ZXItPmdldFVSSUZvclBhdGgo
dXJpKSk7CisgICAgfQorfTsKKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdBY3RpdmVVUkkoVmll
d1VSSVRyYWNraW5nVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2Fk
VVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9yZWRpcmVjdCIpLmRhdGEoKSk7CisgICAgdGVz
dC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Cit9CisKK2NsYXNzIFZpZXdJc0xvYWRpbmdUZXN0
OiBwdWJsaWMgTG9hZFRyYWNraW5nVGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1Rf
RklYVFVSRShWaWV3SXNMb2FkaW5nVGVzdCk7CisKKyAgICBzdGF0aWMgdm9pZCBpc0xvYWRpbmdD
aGFuZ2VkKEdPYmplY3QqLCBHUGFyYW1TcGVjKiwgVmlld0lzTG9hZGluZ1Rlc3QqIHRlc3QpCisg
ICAgeworICAgICAgICBpZiAod2Via2l0X3dlYl92aWV3X2lzX2xvYWRpbmcodGVzdC0+bV93ZWJW
aWV3KSkKKyAgICAgICAgICAgIHRlc3QtPmJlZ2luTG9hZCgpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICB0ZXN0LT5lbmRMb2FkKCk7CisgICAgfQorCisgICAgVmlld0lzTG9hZGluZ1Rlc3Qo
KQorICAgIHsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJub3RpZnk6Omlz
LWxvYWRpbmciLCBHX0NBTExCQUNLKGlzTG9hZGluZ0NoYW5nZWQpLCB0aGlzKTsKKyAgICB9CisK
KyAgICB2b2lkIGJlZ2luTG9hZCgpCisgICAgeworICAgICAgICAvLyBOZXcgbG9hZCwgbG9hZC1z
dGFydGVkIGhhc24ndCBiZWVuIGVtaXR0ZWQgeWV0LgorICAgICAgICBnX2Fzc2VydChtX2xvYWRF
dmVudHMuaXNFbXB0eSgpKTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmll
d19nZXRfdXJpKG1fd2ViVmlldyksID09LCBtX2FjdGl2ZVVSSS5kYXRhKCkpOworICAgIH0KKwor
ICAgIHZvaWQgZW5kTG9hZCgpCisgICAgeworICAgICAgICAvLyBMb2FkIGZpbmlzaCwgbG9hZC1m
aW5pc2hlZCBhbmQgbG9hZC1mYWlsZWQgaGF2ZW4ndCBiZWVuIGVtaXR0ZWQgeWV0LgorICAgICAg
ICBnX2Fzc2VydCghbV9sb2FkRXZlbnRzLmlzRW1wdHkoKSk7CisgICAgICAgIGdfYXNzZXJ0KCFt
X2xvYWRFdmVudHMuY29udGFpbnMoTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKSk7Cisg
ICAgICAgIGdfYXNzZXJ0KCFtX2xvYWRFdmVudHMuY29udGFpbnMoTG9hZFRyYWNraW5nVGVzdDo6
TG9hZEZhaWxlZCkpOworICAgIH0KK307CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3SXNMb2Fk
aW5nKFZpZXdJc0xvYWRpbmdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3Qt
PmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL25vcm1hbCIpLmRhdGEoKSk7CisgICAg
dGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5yZWxvYWQoKTsKKyAg
ICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3QtPmxvYWRVUkkoa1Nl
cnZlci0+Z2V0VVJJRm9yUGF0aCgiL2Vycm9yIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50
aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9y
UGF0aCgiL25vcm1hbCIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVk
KCk7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvbm9ybWFsMiIp
LmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0
LT5nb0JhY2soKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRl
c3QtPmdvRm9yd2FyZCgpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworfQor
CitjbGFzcyBXZWJQYWdlVVJJVGVzdDogcHVibGljIFdlYlZpZXdUZXN0IHsKK3B1YmxpYzoKKyAg
ICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFdlYlBhZ2VVUklUZXN0KTsKKworICAgIHN0YXRpYyB2
b2lkIHdlYlBhZ2VVUklDaGFuZ2VkQ2FsbGJhY2soR0RCdXNDb25uZWN0aW9uKiwgY29uc3QgY2hh
ciosIGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIEdWYXJpYW50KiByZXN1
bHQsIFdlYlBhZ2VVUklUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgY29uc3QgY2hhciogdXJp
OworICAgICAgICBnX3ZhcmlhbnRfZ2V0KHJlc3VsdCwgIigmcykiLCAmdXJpKTsKKyAgICAgICAg
dGVzdC0+bV93ZWJQYWdlVVJJcy5hcHBlbmQodXJpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9p
ZCB3ZWJWaWV3VVJJQ2hhbmdlZChHT2JqZWN0KiwgR1BhcmFtU3BlYyosIFdlYlBhZ2VVUklUZXN0
KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+bV93ZWJWaWV3VVJJcy5hcHBlbmQod2Via2l0
X3dlYl92aWV3X2dldF91cmkodGVzdC0+bV93ZWJWaWV3KSk7CisgICAgfQorCisgICAgV2ViUGFn
ZVVSSVRlc3QoKQorICAgIHsKKyAgICAgICAgR1JlZlB0cjxHREJ1c1Byb3h5PiBwcm94eSA9IGFk
b3B0R1JlZihidXMtPmNyZWF0ZVByb3h5KCJvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0
IiwKKyAgICAgICAgICAgICIvb3JnL3dlYmtpdC9ndGsvV2ViRXh0ZW5zaW9uVGVzdCIsICJvcmcu
d2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwgbV9tYWluTG9vcCkpOworICAgICAgICBtX3Vy
aUNoYW5nZWRTaWduYWxJRCA9IGdfZGJ1c19jb25uZWN0aW9uX3NpZ25hbF9zdWJzY3JpYmUoCisg
ICAgICAgICAgICBnX2RidXNfcHJveHlfZ2V0X2Nvbm5lY3Rpb24ocHJveHkuZ2V0KCkpLAorICAg
ICAgICAgICAgMCwKKyAgICAgICAgICAgICJvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0
IiwKKyAgICAgICAgICAgICJVUklDaGFuZ2VkIiwKKyAgICAgICAgICAgICIvb3JnL3dlYmtpdC9n
dGsvV2ViRXh0ZW5zaW9uVGVzdCIsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgR19EQlVT
X1NJR05BTF9GTEFHU19OT05FLAorICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHREJ1c1Np
Z25hbENhbGxiYWNrPih3ZWJQYWdlVVJJQ2hhbmdlZENhbGxiYWNrKSwKKyAgICAgICAgICAgIHRo
aXMsCisgICAgICAgICAgICAwKTsKKyAgICAgICAgZ19hc3NlcnQobV91cmlDaGFuZ2VkU2lnbmFs
SUQpOworCisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAibm90aWZ5Ojp1cmki
LCBHX0NBTExCQUNLKHdlYlZpZXdVUklDaGFuZ2VkKSwgdGhpcyk7CisgICAgfQorCisgICAgfldl
YlBhZ2VVUklUZXN0KCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5l
Y3RfbWF0Y2hlZChtX3dlYlZpZXcsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRo
aXMpOworICAgICAgICBnX2RidXNfY29ubmVjdGlvbl9zaWduYWxfdW5zdWJzY3JpYmUoYnVzLT5j
b25uZWN0aW9uKCksIG1fdXJpQ2hhbmdlZFNpZ25hbElEKTsKKyAgICB9CisKKyAgICB1bnNpZ25l
ZCBtX3VyaUNoYW5nZWRTaWduYWxJRDsKKyAgICBWZWN0b3I8Q1N0cmluZz4gbV93ZWJQYWdlVVJJ
czsKKyAgICBWZWN0b3I8Q1N0cmluZz4gbV93ZWJWaWV3VVJJczsKK307CisKK3N0YXRpYyB2b2lk
IHRlc3RXZWJQYWdlVVJJKFdlYlBhZ2VVUklUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQorewor
ICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3JlZGlyZWN0IikuZGF0
YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0
X2NtcGludCh0ZXN0LT5tX3dlYlBhZ2VVUklzLnNpemUoKSwgPT0sIHRlc3QtPm1fd2ViVmlld1VS
SXMuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRlc3QtPm1fd2ViUGFnZVVS
SXMuc2l6ZSgpOyArK2kpCisgICAgICAgIEFTU0VSVF9DTVBfQ1NUUklORyh0ZXN0LT5tX3dlYlBh
Z2VVUklzW2ldLCA9PSwgdGVzdC0+bV93ZWJWaWV3VVJJc1tpXSk7CisKKyAgICBnX2Fzc2VydF9j
bXBpbnQodGVzdC0+bV93ZWJQYWdlVVJJcy5zaXplKCksID09LCAyKTsKKyAgICBBU1NFUlRfQ01Q
X0NTVFJJTkcodGVzdC0+bV93ZWJQYWdlVVJJc1swXSwgPT0sIGtTZXJ2ZXItPmdldFVSSUZvclBh
dGgoIi9yZWRpcmVjdCIpKTsKKyAgICBBU1NFUlRfQ01QX0NTVFJJTkcodGVzdC0+bV93ZWJQYWdl
VVJJc1sxXSwgPT0sIGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9ub3JtYWwiKSk7CisKK30KKwor
c3RhdGljIHZvaWQgdGVzdFVSSVJlcXVlc3RIVFRQSGVhZGVycyhXZWJWaWV3VGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKK3sKKyAgICBHUmVmUHRyPFdlYktpdFVSSVJlcXVlc3Q+IHVyaVJlcXVl
c3QgPSBhZG9wdEdSZWYod2Via2l0X3VyaV9yZXF1ZXN0X25ldygiZmlsZTovLy9mb28vYmFyIikp
OworICAgIGdfYXNzZXJ0KHVyaVJlcXVlc3QuZ2V0KCkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3
ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3VyaSh1cmlSZXF1ZXN0LmdldCgpKSwgPT0sICJmaWxlOi8v
L2Zvby9iYXIiKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3VyaV9yZXF1ZXN0X2dldF9odHRwX2hl
YWRlcnModXJpUmVxdWVzdC5nZXQoKSkpOworCisgICAgLy8gTG9hZCBhIHJlcXVlc3Qgd2l0aCBu
byBEbyBOb3QgVHJhY2sgaGVhZGVyLgorICAgIHdlYmtpdF91cmlfcmVxdWVzdF9zZXRfdXJpKHVy
aVJlcXVlc3QuZ2V0KCksIGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9kby1ub3QtdHJhY2staGVh
ZGVyIikuZGF0YSgpKTsKKyAgICB0ZXN0LT5sb2FkUmVxdWVzdCh1cmlSZXF1ZXN0LmdldCgpKTsK
KyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHNpemVfdCBtYWluUmVz
b3VyY2VEYXRhU2l6ZSA9IDA7CisgICAgY29uc3QgY2hhciogbWFpblJlc291cmNlRGF0YSA9IHRl
c3QtPm1haW5SZXNvdXJjZURhdGEobWFpblJlc291cmNlRGF0YVNpemUpOworICAgIGdfYXNzZXJ0
X2NtcGludChtYWluUmVzb3VyY2VEYXRhU2l6ZSwgPT0sIHN0cmxlbihrRE5USGVhZGVyTm90UHJl
c2VudCkpOworICAgIGdfYXNzZXJ0KCFzdHJuY21wKG1haW5SZXNvdXJjZURhdGEsIGtETlRIZWFk
ZXJOb3RQcmVzZW50LCBtYWluUmVzb3VyY2VEYXRhU2l6ZSkpOworCisgICAgLy8gQWRkIHRoZSBE
byBOb3QgVHJhY2sgaGVhZGVyIGFuZCBsb2FkIHRoZSByZXF1ZXN0IGFnYWluLgorICAgIFNvdXBN
ZXNzYWdlSGVhZGVycyogaGVhZGVycyA9IHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfaHR0cF9oZWFk
ZXJzKHVyaVJlcXVlc3QuZ2V0KCkpOworICAgIGdfYXNzZXJ0KGhlYWRlcnMpOworICAgIHNvdXBf
bWVzc2FnZV9oZWFkZXJzX2FwcGVuZChoZWFkZXJzLCAiRE5UIiwgIjEiKTsKKyAgICB0ZXN0LT5s
b2FkUmVxdWVzdCh1cmlSZXF1ZXN0LmdldCgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmlu
aXNoZWQoKTsKKworICAgIG1haW5SZXNvdXJjZURhdGEgPSB0ZXN0LT5tYWluUmVzb3VyY2VEYXRh
KG1haW5SZXNvdXJjZURhdGFTaXplKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQobWFpblJlc291cmNl
RGF0YVNpemUsID09LCAxKTsKKyAgICBnX2Fzc2VydCghc3RybmNtcChtYWluUmVzb3VyY2VEYXRh
LCAiMSIsIG1haW5SZXNvdXJjZURhdGFTaXplKSk7CisKKyAgICAvLyBMb2FkIGEgVVJJIGZvciB3
aGljaCB0aGUgd2ViIGV4dGVuc2lvbiB3aWxsIGFkZCB0aGUgRG8gTm90IFRyYWNrIGhlYWRlci4K
KyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9hZGQtZG8tbm90LXRy
YWNrLWhlYWRlciIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7
CisKKyAgICBtYWluUmVzb3VyY2VEYXRhID0gdGVzdC0+bWFpblJlc291cmNlRGF0YShtYWluUmVz
b3VyY2VEYXRhU2l6ZSk7CisgICAgZ19hc3NlcnRfY21waW50KG1haW5SZXNvdXJjZURhdGFTaXpl
LCA9PSwgMSk7CisgICAgZ19hc3NlcnQoIXN0cm5jbXAobWFpblJlc291cmNlRGF0YSwgIjEiLCBt
YWluUmVzb3VyY2VEYXRhU2l6ZSkpOworfQorCitzdGF0aWMgdm9pZCBzZXJ2ZXJDYWxsYmFjayhT
b3VwU2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBjaGFyKiBwYXRo
LCBHSGFzaFRhYmxlKiwgU291cENsaWVudENvbnRleHQqLCBncG9pbnRlcikKK3sKKyAgICBzdGF0
aWMgY29uc3QgY2hhciogcmVzcG9uc2VTdHJpbmcgPSAiPGh0bWw+PGJvZHk+VGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyEiCisgICAgICAgICJU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyEiCisgICAgICAgICJUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyEiCisgICAgICAgICJUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyEiCisgICAgICAgICJUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyEiCisgICAgICAgICJUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyEiCisgICAgICAgICJUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyEiCisgICAgICAgICJUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyE8L2JvZHk+PC9odG1sPiI7CisKKyAgICBpZiAobWVzc2FnZS0+bWV0aG9kICE9IFNPVVBfTUVU
SE9EX0dFVCkgeworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQ
X1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
c291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOworCisgICAg
aWYgKGdfc3RyX2hhc19wcmVmaXgocGF0aCwgIi9ub3JtYWwiKSkKKyAgICAgICAgc291cF9tZXNz
YWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJ
QywgcmVzcG9uc2VTdHJpbmcsIHN0cmxlbihyZXNwb25zZVN0cmluZykpOworICAgIGVsc2UgaWYg
KGdfc3RyX2VxdWFsKHBhdGgsICIvZXJyb3IiKSkKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9z
dGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfQ0FOVF9DT05ORUNUKTsKKyAgICBlbHNlIGlmIChn
X3N0cl9lcXVhbChwYXRoLCAiL3JlZGlyZWN0IikpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3Nl
dF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTU9WRURfUEVSTUFORU5UTFkpOworICAgICAg
ICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywg
IkxvY2F0aW9uIiwgIi9ub3JtYWwiKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgs
ICIvY2FuY2VsbGVkIikpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfc2V0X2VuY29k
aW5nKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsIFNPVVBfRU5DT0RJTkdfQ0hVTktFRCk7Cisg
ICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBT
T1VQX01FTU9SWV9TVEFUSUMsIHJlc3BvbnNlU3RyaW5nLCBzdHJsZW4ocmVzcG9uc2VTdHJpbmcp
KTsKKyAgICAgICAgc291cF9zZXJ2ZXJfdW5wYXVzZV9tZXNzYWdlKHNlcnZlciwgbWVzc2FnZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvZG8t
bm90LXRyYWNrLWhlYWRlciIpIHx8IGdfc3RyX2VxdWFsKHBhdGgsICIvYWRkLWRvLW5vdC10cmFj
ay1oZWFkZXIiKSkgeworICAgICAgICBjb25zdCBjaGFyKiBkb05vdFRyYWNrID0gc291cF9tZXNz
YWdlX2hlYWRlcnNfZ2V0X29uZShtZXNzYWdlLT5yZXF1ZXN0X2hlYWRlcnMsICJETlQiKTsKKyAg
ICAgICAgaWYgKGRvTm90VHJhY2spCisgICAgICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBl
bmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfQ09QWSwgZG9Ob3RUcmFjaywg
c3RybGVuKGRvTm90VHJhY2spKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc291cF9tZXNz
YWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJ
Qywga0ROVEhlYWRlck5vdFByZXNlbnQsIHN0cmxlbihrRE5USGVhZGVyTm90UHJlc2VudCkpOwor
ICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7
CisgICAgfSBlbHNlCisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNP
VVBfU1RBVFVTX05PVF9GT1VORCk7CisKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZSht
ZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQoreworICAgIHdl
YmtpdF93ZWJfY29udGV4dF9zZXRfd2ViX2V4dGVuc2lvbnNfZGlyZWN0b3J5KHdlYmtpdF93ZWJf
Y29udGV4dF9nZXRfZGVmYXVsdCgpLCBXRUJLSVRfVEVTVF9XRUJfRVhURU5TSU9OU19ESVIpOwor
ICAgIGJ1cyA9IG5ldyBXZWJLaXRUZXN0QnVzKCk7CisgICAgaWYgKCFidXMtPnJ1bigpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBrU2VydmVyID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIoKTsKKyAg
ICBrU2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2spOworCisgICAgTG9hZFRyYWNraW5nVGVzdDo6
YWRkKCJXZWJLaXRXZWJWaWV3IiwgImxvYWRpbmctc3RhdHVzIiwgdGVzdExvYWRpbmdTdGF0dXMp
OworICAgIExvYWRUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJsb2FkaW5nLWVy
cm9yIiwgdGVzdExvYWRpbmdFcnJvcik7CisgICAgTG9hZFRyYWNraW5nVGVzdDo6YWRkKCJXZWJL
aXRXZWJWaWV3IiwgImxvYWQtaHRtbCIsIHRlc3RMb2FkSHRtbCk7CisgICAgTG9hZFRyYWNraW5n
VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImxvYWQtYWx0ZXJuYXRlLWh0bWwiLCB0ZXN0TG9h
ZEFsdGVybmF0ZUhUTUwpOworICAgIExvYWRUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmll
dyIsICJsb2FkLXBsYWluLXRleHQiLCB0ZXN0TG9hZFBsYWluVGV4dCk7CisgICAgTG9hZFRyYWNr
aW5nVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImxvYWQtcmVxdWVzdCIsIHRlc3RMb2FkUmVx
dWVzdCk7CisgICAgTG9hZFN0b3BUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJz
dG9wLWxvYWRpbmciLCB0ZXN0TG9hZENhbmNlbGxlZCk7CisgICAgTG9hZFRyYWNraW5nVGVzdDo6
YWRkKCJXZWJLaXRXZWJWaWV3IiwgInRpdGxlIiwgdGVzdFdlYlZpZXdUaXRsZSk7CisgICAgTG9h
ZFRyYWNraW5nVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInByb2dyZXNzIiwgdGVzdExvYWRQ
cm9ncmVzcyk7CisgICAgTG9hZFRyYWNraW5nVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInJl
bG9hZCIsIHRlc3RXZWJWaWV3UmVsb2FkKTsKKyAgICBMb2FkVHJhY2tpbmdUZXN0OjphZGQoIldl
YktpdFdlYlZpZXciLCAiaGlzdG9yeS1sb2FkIiwgdGVzdFdlYlZpZXdIaXN0b3J5TG9hZCk7CisK
KyAgICAvLyBUaGlzIHRlc3QgY2hlY2tzIHRoYXQgd2ViIHZpZXcgbm90aWZ5Ojp1cmkgc2lnbmFs
IGlzIGNvcnJlY3RseSBlbWl0dGVkCisgICAgLy8gYW5kIHRoZSB1cmkgaXMgYWxyZWFkeSB1cGRh
dGVkIHdoZW4gbG9hZGVyIGNsaWVudCBzaWduYWxzIGFyZSBlbWl0dGVkLgorICAgIFZpZXdVUklU
cmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJhY3RpdmUtdXJpIiwgdGVzdFdlYlZp
ZXdBY3RpdmVVUkkpOworCisgICAgVmlld0lzTG9hZGluZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmll
dyIsICJpcy1sb2FkaW5nIiwgdGVzdFdlYlZpZXdJc0xvYWRpbmcpOworICAgIFdlYlBhZ2VVUklU
ZXN0OjphZGQoIldlYktpdFdlYlBhZ2UiLCAiZ2V0LXVyaSIsIHRlc3RXZWJQYWdlVVJJKTsKKyAg
ICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRVUklSZXF1ZXN0IiwgImh0dHAtaGVhZGVycyIsIHRl
c3RVUklSZXF1ZXN0SFRUUEhlYWRlcnMpOworfQorCit2b2lkIGFmdGVyQWxsKCkKK3sKKyAgICBk
ZWxldGUgYnVzOworICAgIGRlbGV0ZSBrU2VydmVyOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RQcmludGluZy5jcHAgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFByaW50aW5nLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmMyY2ZiCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RQcmludGluZy5jcHAKQEAgLTAsMCAr
MSwyMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgorI2luY2x1ZGUgPGdsaWIvZ3N0
ZGlvLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCisjaWZkZWYgSEFWRV9H
VEtfVU5JWF9QUklOVElORworI2luY2x1ZGUgPGd0ay9ndGt1bml4cHJpbnQuaD4KKyNlbmRpZgor
CitzdGF0aWMgY2hhcioga1RlbXBEaXJlY3Rvcnk7CisKK3N0YXRpYyB2b2lkIHRlc3RQcmludE9w
ZXJhdGlvblByaW50U2V0dGluZ3MoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7
CisgICAgR1JlZlB0cjxXZWJLaXRQcmludE9wZXJhdGlvbj4gcHJpbnRPcGVyYXRpb24gPSBhZG9w
dEdSZWYod2Via2l0X3ByaW50X29wZXJhdGlvbl9uZXcodGVzdC0+bV93ZWJWaWV3KSk7CisgICAg
dGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChwcmlu
dE9wZXJhdGlvbi5nZXQoKSkpOworCisgICAgZ19hc3NlcnQoIXdlYmtpdF9wcmludF9vcGVyYXRp
b25fZ2V0X3ByaW50X3NldHRpbmdzKHByaW50T3BlcmF0aW9uLmdldCgpKSk7CisgICAgZ19hc3Nl
cnQoIXdlYmtpdF9wcmludF9vcGVyYXRpb25fZ2V0X3BhZ2Vfc2V0dXAocHJpbnRPcGVyYXRpb24u
Z2V0KCkpKTsKKworICAgIEdSZWZQdHI8R3RrUHJpbnRTZXR0aW5ncz4gcHJpbnRTZXR0aW5ncyA9
IGFkb3B0R1JlZihndGtfcHJpbnRfc2V0dGluZ3NfbmV3KCkpOworICAgIHRlc3QtPmFzc2VydE9i
amVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QocHJpbnRTZXR0aW5ncy5nZXQo
KSkpOworCisgICAgR1JlZlB0cjxHdGtQYWdlU2V0dXA+IHBhZ2VTZXR1cCA9IGFkb3B0R1JlZihn
dGtfcGFnZV9zZXR1cF9uZXcoKSk7CisgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hl
blRlc3RGaW5pc2hlcyhHX09CSkVDVChwYWdlU2V0dXAuZ2V0KCkpKTsKKworICAgIHdlYmtpdF9w
cmludF9vcGVyYXRpb25fc2V0X3ByaW50X3NldHRpbmdzKHByaW50T3BlcmF0aW9uLmdldCgpLCBw
cmludFNldHRpbmdzLmdldCgpKTsKKyAgICB3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX3NldF9wYWdl
X3NldHVwKHByaW50T3BlcmF0aW9uLmdldCgpLCBwYWdlU2V0dXAuZ2V0KCkpOworCisgICAgZ19h
c3NlcnQod2Via2l0X3ByaW50X29wZXJhdGlvbl9nZXRfcHJpbnRfc2V0dGluZ3MocHJpbnRPcGVy
YXRpb24uZ2V0KCkpID09IHByaW50U2V0dGluZ3MuZ2V0KCkpOworICAgIGdfYXNzZXJ0KHdlYmtp
dF9wcmludF9vcGVyYXRpb25fZ2V0X3BhZ2Vfc2V0dXAocHJpbnRPcGVyYXRpb24uZ2V0KCkpID09
IHBhZ2VTZXR1cC5nZXQoKSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3UHJpbnRDYWxs
YmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRQcmludE9wZXJhdGlvbiogcHJpbnRP
cGVyYXRpb24sIFdlYlZpZXdUZXN0KiB0ZXN0KQoreworICAgIGdfYXNzZXJ0KHdlYlZpZXcgPT0g
dGVzdC0+bV93ZWJWaWV3KTsKKworICAgIGdfYXNzZXJ0KFdFQktJVF9JU19QUklOVF9PUEVSQVRJ
T04ocHJpbnRPcGVyYXRpb24pKTsKKyAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVu
VGVzdEZpbmlzaGVzKEdfT0JKRUNUKHByaW50T3BlcmF0aW9uKSk7CisKKyAgICBnX2Fzc2VydCgh
d2Via2l0X3ByaW50X29wZXJhdGlvbl9nZXRfcHJpbnRfc2V0dGluZ3MocHJpbnRPcGVyYXRpb24p
KTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3ByaW50X29wZXJhdGlvbl9nZXRfcGFnZV9zZXR1cChw
cmludE9wZXJhdGlvbikpOworCisgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29w
KTsKKworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1ByaW50
KFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIGdfc2lnbmFsX2Nvbm5l
Y3QodGVzdC0+bV93ZWJWaWV3LCAicHJpbnQiLCBHX0NBTExCQUNLKHdlYlZpZXdQcmludENhbGxi
YWNrKSwgdGVzdCk7CisgICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxib2R5IG9uTG9hZD1cInBy
aW50KCk7XCI+V2ViS2l0R1RLKyBwcmludGluZyB0ZXN0PC9ib2R5PjwvaHRtbD4iLCAwKTsKKyAg
ICBnX21haW5fbG9vcF9ydW4odGVzdC0+bV9tYWluTG9vcCk7Cit9CisKKyNpZmRlZiBIQVZFX0dU
S19VTklYX1BSSU5USU5HCitjbGFzcyBQcmludFRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7Citw
dWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShQcmludFRlc3QpOworCisgICAgc3Rh
dGljIHZvaWQgcHJpbnRGaW5pc2hlZENhbGxiYWNrKFdlYktpdFByaW50T3BlcmF0aW9uKiwgUHJp
bnRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21h
aW5Mb29wKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBwcmludEZhaWxlZENhbGxiYWNrKFdl
YktpdFByaW50T3BlcmF0aW9uKiwgR0Vycm9yKiBlcnJvciwgUHJpbnRUZXN0KiB0ZXN0KQorICAg
IHsKKyAgICAgICAgZ19hc3NlcnQodGVzdC0+bV9leHBlY3RlZEVycm9yKTsKKyAgICAgICAgZ19h
c3NlcnQoZXJyb3IpOworICAgICAgICBnX2Fzc2VydChnX2Vycm9yX21hdGNoZXMoZXJyb3IsIFdF
QktJVF9QUklOVF9FUlJPUiwgdGVzdC0+bV9leHBlY3RlZEVycm9yKSk7CisgICAgfQorCisgICAg
UHJpbnRUZXN0KCkKKyAgICAgICAgOiBtX2V4cGVjdGVkRXJyb3IoMCkKKyAgICB7CisgICAgICAg
IG1fcHJpbnRPcGVyYXRpb24gPSBhZG9wdEdSZWYod2Via2l0X3ByaW50X29wZXJhdGlvbl9uZXco
bV93ZWJWaWV3KSk7CisgICAgICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNo
ZXMoR19PQkpFQ1QobV9wcmludE9wZXJhdGlvbi5nZXQoKSkpOworICAgICAgICBnX3NpZ25hbF9j
b25uZWN0KG1fcHJpbnRPcGVyYXRpb24uZ2V0KCksICJmaW5pc2hlZCIsIEdfQ0FMTEJBQ0socHJp
bnRGaW5pc2hlZENhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9w
cmludE9wZXJhdGlvbi5nZXQoKSwgImZhaWxlZCIsIEdfQ0FMTEJBQ0socHJpbnRGYWlsZWRDYWxs
YmFjayksIHRoaXMpOworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiB0ZXN0UHJpbnRPcGVy
YXRpb25QcmludFByaW50ZXIoR3RrUHJpbnRlciogcHJpbnRlciwgZ3BvaW50ZXIgdXNlckRhdGEp
CisgICAgeworICAgICAgICBpZiAoc3RyY21wKGd0a19wcmludGVyX2dldF9uYW1lKHByaW50ZXIp
LCAiUHJpbnQgdG8gRmlsZSIpKQorICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgICAg
IEd0a1ByaW50ZXIqKiBmb3VuZFByaW50ZXIgPSBzdGF0aWNfY2FzdDxHdGtQcmludGVyKio+KHVz
ZXJEYXRhKTsKKyAgICAgICAgKmZvdW5kUHJpbnRlciA9IHN0YXRpY19jYXN0PEd0a1ByaW50ZXIq
PihnX29iamVjdF9yZWYocHJpbnRlcikpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisK
KyAgICBHdGtQcmludGVyKiBmaW5kUHJpbnRUb0ZpbGVQcmludGVyKCkKKyAgICB7CisgICAgICAg
IEd0a1ByaW50ZXIqIHByaW50ZXIgPSAwOworICAgICAgICBndGtfZW51bWVyYXRlX3ByaW50ZXJz
KHRlc3RQcmludE9wZXJhdGlvblByaW50UHJpbnRlciwgJnByaW50ZXIsIDAsIFRSVUUpOworICAg
ICAgICByZXR1cm4gcHJpbnRlcjsKKyAgICB9CisKKyAgICB2b2lkIHdhaXRVbnRpbFByaW50Rmlu
aXNoZWQoKQorICAgIHsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAg
IH0KKworICAgIEdSZWZQdHI8V2ViS2l0UHJpbnRPcGVyYXRpb24+IG1fcHJpbnRPcGVyYXRpb247
CisgICAgdW5zaWduZWQgaW50IG1fZXhwZWN0ZWRFcnJvcjsKK307CisKK3N0YXRpYyB2b2lkIHRl
c3RQcmludE9wZXJhdGlvblByaW50KFByaW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sK
KyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHk+V2ViS2l0R1RLKyBwcmludGluZyB0ZXN0
PC9ib2R5PjwvaHRtbD4iLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsK
KworICAgIEdSZWZQdHI8R3RrUHJpbnRlcj4gcHJpbnRlciA9IGFkb3B0R1JlZih0ZXN0LT5maW5k
UHJpbnRUb0ZpbGVQcmludGVyKCkpOworICAgIGlmICghcHJpbnRlcikgeworICAgICAgICBnX21l
c3NhZ2UoIiVzIiwgIkNhbm5vdCB0ZXN0IFdlYktpdFByaW50T3BlcmF0aW9uL3ByaW50OiBubyBz
dWl0YWJsZSBwcmludGVyIGZvdW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBH
T3duUHRyPGNoYXI+IG91dHB1dEZpbGVuYW1lKGdfYnVpbGRfZmlsZW5hbWUoa1RlbXBEaXJlY3Rv
cnksICJ3ZWJraXQtcHJpbnQucGRmIiwgTlVMTCkpOworICAgIEdSZWZQdHI8R0ZpbGU+IG91dHB1
dEZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0aChvdXRwdXRGaWxlbmFtZS5nZXQo
KSkpOworICAgIEdPd25QdHI8Y2hhcj4gb3V0cHV0VVJJKGdfZmlsZV9nZXRfdXJpKG91dHB1dEZp
bGUuZ2V0KCkpKTsKKworICAgIEdSZWZQdHI8R3RrUHJpbnRTZXR0aW5ncz4gcHJpbnRTZXR0aW5n
cyA9IGFkb3B0R1JlZihndGtfcHJpbnRfc2V0dGluZ3NfbmV3KCkpOworICAgIGd0a19wcmludF9z
ZXR0aW5nc19zZXRfcHJpbnRlcihwcmludFNldHRpbmdzLmdldCgpLCBndGtfcHJpbnRlcl9nZXRf
bmFtZShwcmludGVyLmdldCgpKSk7CisgICAgZ3RrX3ByaW50X3NldHRpbmdzX3NldChwcmludFNl
dHRpbmdzLmdldCgpLCBHVEtfUFJJTlRfU0VUVElOR1NfT1VUUFVUX1VSSSwgb3V0cHV0VVJJLmdl
dCgpKTsKKworICAgIHdlYmtpdF9wcmludF9vcGVyYXRpb25fc2V0X3ByaW50X3NldHRpbmdzKHRl
c3QtPm1fcHJpbnRPcGVyYXRpb24uZ2V0KCksIHByaW50U2V0dGluZ3MuZ2V0KCkpOworICAgIHdl
YmtpdF9wcmludF9vcGVyYXRpb25fcHJpbnQodGVzdC0+bV9wcmludE9wZXJhdGlvbi5nZXQoKSk7
CisgICAgdGVzdC0+d2FpdFVudGlsUHJpbnRGaW5pc2hlZCgpOworCisgICAgR1JlZlB0cjxHRmls
ZUluZm8+IGZpbGVJbmZvID0gYWRvcHRHUmVmKGdfZmlsZV9xdWVyeV9pbmZvKG91dHB1dEZpbGUu
Z2V0KCksIEdfRklMRV9BVFRSSUJVVEVfU1RBTkRBUkRfU0laRSAiLCIgR19GSUxFX0FUVFJJQlVU
RV9TVEFOREFSRF9DT05URU5UX1RZUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEdGaWxlUXVlcnlJbmZv
RmxhZ3M+KDApLCAwLCAwKSk7CisgICAgZ19hc3NlcnQoZmlsZUluZm8uZ2V0KCkpOworICAgIGdf
YXNzZXJ0X2NtcGludChnX2ZpbGVfaW5mb19nZXRfc2l6ZShmaWxlSW5mby5nZXQoKSksID4sIDAp
OworICAgIGdfYXNzZXJ0X2NtcHN0cihnX2ZpbGVfaW5mb19nZXRfY29udGVudF90eXBlKGZpbGVJ
bmZvLmdldCgpKSwgPT0sICJhcHBsaWNhdGlvbi9wZGYiKTsKKworICAgIGdfZmlsZV9kZWxldGUo
b3V0cHV0RmlsZS5nZXQoKSwgMCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RQcmludE9wZXJh
dGlvbkVycm9ycyhQcmludFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+
bG9hZEh0bWwoIjxodG1sPjxib2R5PldlYktpdEdUSysgcHJpbnRpbmcgZXJyb3JzIHRlc3Q8L2Jv
ZHk+PC9odG1sPiIsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisg
ICAgR1JlZlB0cjxHdGtQcmludGVyPiBwcmludGVyID0gYWRvcHRHUmVmKHRlc3QtPmZpbmRQcmlu
dFRvRmlsZVByaW50ZXIoKSk7CisgICAgaWYgKCFwcmludGVyKSB7CisgICAgICAgIGdfbWVzc2Fn
ZSgiJXMiLCAiQ2Fubm90IHRlc3QgV2ViS2l0UHJpbnRPcGVyYXRpb24vcHJpbnQ6IG5vIHN1aXRh
YmxlIHByaW50ZXIgZm91bmQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEdl
bmVyYWwgRXJyb3I6IGludmFsaWQgZmlsZW5hbWUuCisgICAgdGVzdC0+bV9leHBlY3RlZEVycm9y
ID0gV0VCS0lUX1BSSU5UX0VSUk9SX0dFTkVSQUw7CisgICAgR1JlZlB0cjxHdGtQcmludFNldHRp
bmdzPiBwcmludFNldHRpbmdzID0gYWRvcHRHUmVmKGd0a19wcmludF9zZXR0aW5nc19uZXcoKSk7
CisgICAgZ3RrX3ByaW50X3NldHRpbmdzX3NldF9wcmludGVyKHByaW50U2V0dGluZ3MuZ2V0KCks
IGd0a19wcmludGVyX2dldF9uYW1lKHByaW50ZXIuZ2V0KCkpKTsKKyAgICBndGtfcHJpbnRfc2V0
dGluZ3Nfc2V0KHByaW50U2V0dGluZ3MuZ2V0KCksIEdUS19QUklOVF9TRVRUSU5HU19PVVRQVVRf
VVJJLCAiZmlsZTovLy9mb28vYmFyIik7CisgICAgd2Via2l0X3ByaW50X29wZXJhdGlvbl9zZXRf
cHJpbnRfc2V0dGluZ3ModGVzdC0+bV9wcmludE9wZXJhdGlvbi5nZXQoKSwgcHJpbnRTZXR0aW5n
cy5nZXQoKSk7CisgICAgd2Via2l0X3ByaW50X29wZXJhdGlvbl9wcmludCh0ZXN0LT5tX3ByaW50
T3BlcmF0aW9uLmdldCgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxQcmludEZpbmlzaGVkKCk7CisK
KyAgICAvLyBQcmludGVyIG5vdCBmb3VuZCBlcnJvci4KKyAgICB0ZXN0LT5tX2V4cGVjdGVkRXJy
b3IgPSBXRUJLSVRfUFJJTlRfRVJST1JfUFJJTlRFUl9OT1RfRk9VTkQ7CisgICAgZ3RrX3ByaW50
X3NldHRpbmdzX3NldF9wcmludGVyKHByaW50U2V0dGluZ3MuZ2V0KCksICJUaGUgZmFrZSBXZWJL
aXQgcHJpbnRlciIpOworICAgIHdlYmtpdF9wcmludF9vcGVyYXRpb25fcHJpbnQodGVzdC0+bV9w
cmludE9wZXJhdGlvbi5nZXQoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsUHJpbnRGaW5pc2hlZCgp
OworCisgICAgLy8gTm8gcGFnZXMgdG8gcHJpbnQ6IHByaW50IGV2ZW4gcGFnZXMgZm9yIGEgc2lu
Z2xlIHBhZ2UgZG9jdW1lbnQuCisgICAgdGVzdC0+bV9leHBlY3RlZEVycm9yID0gV0VCS0lUX1BS
SU5UX0VSUk9SX0lOVkFMSURfUEFHRV9SQU5HRTsKKyAgICBndGtfcHJpbnRfc2V0dGluZ3Nfc2V0
X3ByaW50ZXIocHJpbnRTZXR0aW5ncy5nZXQoKSwgZ3RrX3ByaW50ZXJfZ2V0X25hbWUocHJpbnRl
ci5nZXQoKSkpOworICAgIGd0a19wcmludF9zZXR0aW5nc19zZXRfcGFnZV9zZXQocHJpbnRTZXR0
aW5ncy5nZXQoKSwgR1RLX1BBR0VfU0VUX0VWRU4pOworICAgIHdlYmtpdF9wcmludF9vcGVyYXRp
b25fcHJpbnQodGVzdC0+bV9wcmludE9wZXJhdGlvbi5nZXQoKSk7CisgICAgdGVzdC0+d2FpdFVu
dGlsUHJpbnRGaW5pc2hlZCgpOworfQorI2VuZGlmIC8vIEhBVkVfR1RLX1VOSVhfUFJJTlRJTkcK
Kwordm9pZCBiZWZvcmVBbGwoKQoreworICAgIGtUZW1wRGlyZWN0b3J5ID0gZ19kaXJfbWFrZV90
bXAoIldlYktpdDJUZXN0cy1YWFhYWFgiLCAwKTsKKyAgICBnX2Fzc2VydChrVGVtcERpcmVjdG9y
eSk7CisKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRQcmludE9wZXJhdGlvbiIsICJwcmlu
dGluZy1zZXR0aW5ncyIsIHRlc3RQcmludE9wZXJhdGlvblByaW50U2V0dGluZ3MpOworICAgIFdl
YlZpZXdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAicHJpbnQiLCB0ZXN0V2ViVmlld1ByaW50
KTsKKyNpZmRlZiBIQVZFX0dUS19VTklYX1BSSU5USU5HCisgICAgUHJpbnRUZXN0OjphZGQoIldl
YktpdFByaW50T3BlcmF0aW9uIiwgInByaW50IiwgdGVzdFByaW50T3BlcmF0aW9uUHJpbnQpOwor
ICAgIFByaW50VGVzdDo6YWRkKCJXZWJLaXRQcmludE9wZXJhdGlvbiIsICJwcmludC1lcnJvcnMi
LCB0ZXN0UHJpbnRPcGVyYXRpb25FcnJvcnMpOworI2VuZGlmCit9CisKK3ZvaWQgYWZ0ZXJBbGwo
KQoreworICAgIGdfcm1kaXIoa1RlbXBEaXJlY3RvcnkpOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RSZXNvdXJjZXMuY3BwIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RSZXNvdXJjZXMuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ZjE4MmMKLS0tIC9kZXYvbnVsbAorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFJlc291cmNlcy5jcHAKQEAg
LTAsMCArMSw3ODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5oIgorI2luY2x1
ZGUgIldlYlZpZXdUZXN0LmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0
Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKworc3RhdGljIFdlYktpdFRlc3RTZXJ2ZXIqIGtTZXJ2ZXI7
CisKK3N0YXRpYyBjb25zdCBjaGFyKiBrSW5kZXhIdG1sID0KKyAgICAiPGh0bWw+PGhlYWQ+Igor
ICAgICIgPGxpbmsgcmVsPSdzdHlsZXNoZWV0JyBocmVmPScvc3R5bGUuY3NzJyB0eXBlPSd0ZXh0
L2Nzcyc+IgorICAgICIgPHNjcmlwdCBsYW5ndWFnZT0namF2YXNjcmlwdCcgc3JjPScvamF2YXNj
cmlwdC5qcyc+PC9zY3JpcHQ+IgorICAgICI8L2hlYWQ+PGJvZHk+V2ViS2l0R1RLKyByZXNvdXJj
ZXMgdGVzdDwvYm9keT48L2h0bWw+IjsKKworc3RhdGljIGNvbnN0IGNoYXIqIGtTdHlsZUNTUyA9
CisgICAgImJvZHkgeyIKKyAgICAiICAgIG1hcmdpbjogMHB4OyIKKyAgICAiICAgIHBhZGRpbmc6
IDBweDsiCisgICAgIiAgICBmb250LWZhbWlseTogc2Fucy1zZXJpZjsiCisgICAgIiAgICBiYWNr
Z3JvdW5kOiB1cmwoL2JsYW5rLmljbykgMCAwIG5vLXJlcGVhdDsiCisgICAgIiAgICBjb2xvcjog
YmxhY2s7IgorICAgICJ9IjsKKworc3RhdGljIGNvbnN0IGNoYXIqIGtKYXZhc2NyaXB0ID0gImZ1
bmN0aW9uIGZvbyAoKSB7IHZhciBhID0gMTsgfSI7CisKK2NsYXNzIFJlc291cmNlc1Rlc3Q6IHB1
YmxpYyBXZWJWaWV3VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShS
ZXNvdXJjZXNUZXN0KTsKKworICAgIHN0YXRpYyB2b2lkIHJlc291cmNlU2VudFJlcXVlc3RDYWxs
YmFjayhXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVl
c3QsIFdlYktpdFVSSVJlc3BvbnNlKiByZWRpcmVjdFJlc3BvbnNlLCBSZXNvdXJjZXNUZXN0KiB0
ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RG
aW5pc2hlcyhHX09CSkVDVChyZXF1ZXN0KSk7CisgICAgICAgIGlmIChyZWRpcmVjdFJlc3BvbnNl
KQorICAgICAgICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hl
cyhHX09CSkVDVChyZWRpcmVjdFJlc3BvbnNlKSk7CisgICAgICAgIHRlc3QtPnJlc291cmNlU2Vu
dFJlcXVlc3QocmVzb3VyY2UsIHJlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpOworICAgIH0KKwor
ICAgIHN0YXRpYyB2b2lkIHJlc291cmNlUmVjZWl2ZWRSZXNwb25zZUNhbGxiYWNrKFdlYktpdFdl
YlJlc291cmNlKiByZXNvdXJjZSwgR1BhcmFtU3BlYyosIFJlc291cmNlc1Rlc3QqIHRlc3QpCisg
ICAgeworICAgICAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3Jlc291cmNlX2dldF9yZXNwb25zZShy
ZXNvdXJjZSkpOworICAgICAgICB0ZXN0LT5yZXNvdXJjZVJlY2VpdmVkUmVzcG9uc2UocmVzb3Vy
Y2UpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHJlc291cmNlUmVjZWl2ZWREYXRhQ2FsbGJh
Y2soV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBndWludDY0IGJ5dGVzUmVjZWl2ZWQsIFJl
c291cmNlc1Rlc3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT5yZXNvdXJjZVJlY2VpdmVk
RGF0YShyZXNvdXJjZSwgYnl0ZXNSZWNlaXZlZCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQg
cmVzb3VyY2VGaW5pc2hlZENhbGxiYWNrKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgUmVz
b3VyY2VzVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPnJlc291cmNlRmluaXNoZWQo
cmVzb3VyY2UpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHJlc291cmNlRmFpbGVkQ2FsbGJh
Y2soV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBHRXJyb3IqIGVycm9yLCBSZXNvdXJjZXNU
ZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQoZXJyb3IpOworICAgICAgICB0ZXN0
LT5yZXNvdXJjZUZhaWxlZChyZXNvdXJjZSwgZXJyb3IpOworICAgIH0KKworICAgIHN0YXRpYyB2
b2lkIHJlc291cmNlTG9hZFN0YXJ0ZWRDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBX
ZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QsIFJl
c291cmNlc1Rlc3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0Rl
bGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHJlc291cmNlKSk7CisgICAgICAgIHRlc3Qt
PmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QocmVxdWVzdCkp
OworCisgICAgICAgIC8vIElnbm9yZSBmYXZpY29ucy4KKyAgICAgICAgaWYgKGdfc3RyX2hhc19z
dWZmaXgod2Via2l0X3VyaV9yZXF1ZXN0X2dldF91cmkocmVxdWVzdCksICJmYXZpY29uLmljbyIp
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRlc3QtPnJlc291cmNlTG9hZFN0YXJ0
ZWQocmVzb3VyY2UsIHJlcXVlc3QpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KHJlc291cmNl
LCAic2VudC1yZXF1ZXN0IiwgR19DQUxMQkFDSyhyZXNvdXJjZVNlbnRSZXF1ZXN0Q2FsbGJhY2sp
LCB0ZXN0KTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChyZXNvdXJjZSwgIm5vdGlmeTo6cmVz
cG9uc2UiLCBHX0NBTExCQUNLKHJlc291cmNlUmVjZWl2ZWRSZXNwb25zZUNhbGxiYWNrKSwgdGVz
dCk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QocmVzb3VyY2UsICJyZWNlaXZlZC1kYXRhIiwg
R19DQUxMQkFDSyhyZXNvdXJjZVJlY2VpdmVkRGF0YUNhbGxiYWNrKSwgdGVzdCk7CisgICAgICAg
IGdfc2lnbmFsX2Nvbm5lY3QocmVzb3VyY2UsICJmaW5pc2hlZCIsIEdfQ0FMTEJBQ0socmVzb3Vy
Y2VGaW5pc2hlZENhbGxiYWNrKSwgdGVzdCk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QocmVz
b3VyY2UsICJmYWlsZWQiLCBHX0NBTExCQUNLKHJlc291cmNlRmFpbGVkQ2FsbGJhY2spLCB0ZXN0
KTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyU3VicmVzb3VyY2VzKCkKKyAgICB7CisgICAgICAg
IGdfbGlzdF9mcmVlX2Z1bGwobV9zdWJyZXNvdXJjZXMsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ry
b3lOb3RpZnk+KGdfb2JqZWN0X3VucmVmKSk7CisgICAgICAgIG1fc3VicmVzb3VyY2VzID0gMDsK
KyAgICB9CisKKyAgICBSZXNvdXJjZXNUZXN0KCkKKyAgICAgICAgOiBXZWJWaWV3VGVzdCgpCisg
ICAgICAgICwgbV9yZXNvdXJjZXNMb2FkZWQoMCkKKyAgICAgICAgLCBtX3Jlc291cmNlc1RvTG9h
ZCgwKQorICAgICAgICAsIG1fcmVzb3VyY2VEYXRhU2l6ZSgwKQorICAgICAgICAsIG1fc3VicmVz
b3VyY2VzKDApCisgICAgeworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgInJl
c291cmNlLWxvYWQtc3RhcnRlZCIsIEdfQ0FMTEJBQ0socmVzb3VyY2VMb2FkU3RhcnRlZENhbGxi
YWNrKSwgdGhpcyk7CisgICAgfQorCisgICAgflJlc291cmNlc1Rlc3QoKQorICAgIHsKKyAgICAg
ICAgY2xlYXJTdWJyZXNvdXJjZXMoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVzb3Vy
Y2VMb2FkU3RhcnRlZChXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIFdlYktpdFVSSVJlcXVl
c3QqIHJlcXVlc3QpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCByZXNvdXJjZVNl
bnRSZXF1ZXN0KFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgV2ViS2l0VVJJUmVxdWVzdCog
cmVxdWVzdCwgV2ViS2l0VVJJUmVzcG9uc2UqIHJlZGlyZWN0UmVzcG9uc2UpCisgICAgeworICAg
IH0KKworICAgIHZpcnR1YWwgdm9pZCByZXNvdXJjZVJlY2VpdmVkUmVzcG9uc2UoV2ViS2l0V2Vi
UmVzb3VyY2UqIHJlc291cmNlKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVz
b3VyY2VSZWNlaXZlZERhdGEoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBndWludDY0IGJ5
dGVzUmVjZWl2ZWQpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCByZXNvdXJjZUZp
bmlzaGVkKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSkKKyAgICB7CisgICAgICAgIGdfc2ln
bmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChyZXNvdXJjZSwgR19TSUdOQUxfTUFUQ0hf
REFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7CisgICAgICAgIGlmICh3ZWJraXRfd2ViX3ZpZXdfZ2V0
X21haW5fcmVzb3VyY2UobV93ZWJWaWV3KSAhPSByZXNvdXJjZSkKKyAgICAgICAgICAgIG1fc3Vi
cmVzb3VyY2VzID0gZ19saXN0X3ByZXBlbmQobV9zdWJyZXNvdXJjZXMsIGdfb2JqZWN0X3JlZihy
ZXNvdXJjZSkpOworICAgICAgICBpZiAoKyttX3Jlc291cmNlc0xvYWRlZCA9PSBtX3Jlc291cmNl
c1RvTG9hZCkKKyAgICAgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7CisgICAg
fQorCisgICAgdmlydHVhbCB2b2lkIHJlc291cmNlRmFpbGVkKFdlYktpdFdlYlJlc291cmNlKiBy
ZXNvdXJjZSwgR0Vycm9yKiBlcnJvcikKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFj
aGVkKCk7CisgICAgfQorCisgICAgdm9pZCB3YWl0VW50aWxSZXNvdXJjZXNMb2FkZWQoc2l6ZV90
IHJlc291cmNlc0NvdW50KQorICAgIHsKKyAgICAgICAgbV9yZXNvdXJjZXNMb2FkZWQgPSAwOwor
ICAgICAgICBtX3Jlc291cmNlc1RvTG9hZCA9IHJlc291cmNlc0NvdW50OworICAgICAgICBjbGVh
clN1YnJlc291cmNlcygpOworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Cisg
ICAgfQorCisgICAgR0xpc3QqIHN1YnJlc291cmNlcygpCisgICAgeworICAgICAgICByZXR1cm4g
bV9zdWJyZXNvdXJjZXM7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVzb3VyY2VHZXREYXRh
Q2FsbGJhY2soR09iamVjdCogb2JqZWN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIg
dXNlckRhdGEpCisgICAgeworICAgICAgICBzaXplX3QgZGF0YVNpemU7CisgICAgICAgIEdPd25Q
dHI8R0Vycm9yPiBlcnJvcjsKKyAgICAgICAgdW5zaWduZWQgY2hhciogZGF0YSA9IHdlYmtpdF93
ZWJfcmVzb3VyY2VfZ2V0X2RhdGFfZmluaXNoKFdFQktJVF9XRUJfUkVTT1VSQ0Uob2JqZWN0KSwg
cmVzdWx0LCAmZGF0YVNpemUsICZlcnJvci5vdXRQdHIoKSk7CisgICAgICAgIGdfYXNzZXJ0KCFl
cnJvci5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGRhdGEpOworICAgICAgICBnX2Fzc2VydF9j
bXBpbnQoZGF0YVNpemUsID4sIDApOworCisgICAgICAgIFJlc291cmNlc1Rlc3QqIHRlc3QgPSBz
dGF0aWNfY2FzdDxSZXNvdXJjZXNUZXN0Kj4odXNlckRhdGEpOworICAgICAgICB0ZXN0LT5tX3Jl
c291cmNlRGF0YS5zZXQocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZGF0YSkpOworICAgICAgICB0
ZXN0LT5tX3Jlc291cmNlRGF0YVNpemUgPSBkYXRhU2l6ZTsKKyAgICAgICAgZ19tYWluX2xvb3Bf
cXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9CisKKyAgICB2b2lkIGNoZWNrUmVzb3VyY2VE
YXRhKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSkKKyAgICB7CisgICAgICAgIG1fcmVzb3Vy
Y2VEYXRhU2l6ZSA9IDA7CisgICAgICAgIHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X2RhdGEocmVz
b3VyY2UsIDAsIHJlc291cmNlR2V0RGF0YUNhbGxiYWNrLCB0aGlzKTsKKyAgICAgICAgZ19tYWlu
X2xvb3BfcnVuKG1fbWFpbkxvb3ApOworCisgICAgICAgIGNvbnN0IGNoYXIqIHVyaSA9IHdlYmtp
dF93ZWJfcmVzb3VyY2VfZ2V0X3VyaShyZXNvdXJjZSk7CisgICAgICAgIGlmICh1cmkgPT0ga1Nl
cnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpKSB7CisgICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQo
bV9yZXNvdXJjZURhdGFTaXplLCA9PSwgc3RybGVuKGtJbmRleEh0bWwpKTsKKyAgICAgICAgICAg
IGdfYXNzZXJ0KCFzdHJuY21wKG1fcmVzb3VyY2VEYXRhLmdldCgpLCBrSW5kZXhIdG1sLCBtX3Jl
c291cmNlRGF0YVNpemUpKTsKKyAgICAgICAgfSBlbHNlIGlmICh1cmkgPT0ga1NlcnZlci0+Z2V0
VVJJRm9yUGF0aCgiL3N0eWxlLmNzcyIpKSB7CisgICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQo
bV9yZXNvdXJjZURhdGFTaXplLCA9PSwgc3RybGVuKGtTdHlsZUNTUykpOworICAgICAgICAgICAg
Z19hc3NlcnQoIXN0cm5jbXAobV9yZXNvdXJjZURhdGEuZ2V0KCksIGtTdHlsZUNTUywgbV9yZXNv
dXJjZURhdGFTaXplKSk7CisgICAgICAgIH0gZWxzZSBpZiAodXJpID09IGtTZXJ2ZXItPmdldFVS
SUZvclBhdGgoIi9qYXZhc2NyaXB0LmpzIikpIHsKKyAgICAgICAgICAgIGdfYXNzZXJ0X2NtcGlu
dChtX3Jlc291cmNlRGF0YVNpemUsID09LCBzdHJsZW4oa0phdmFzY3JpcHQpKTsKKyAgICAgICAg
ICAgIGdfYXNzZXJ0KCFzdHJuY21wKG1fcmVzb3VyY2VEYXRhLmdldCgpLCBrSmF2YXNjcmlwdCwg
bV9yZXNvdXJjZURhdGFTaXplKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZ19hc3Nl
cnRfbm90X3JlYWNoZWQoKTsKKyAgICAgICAgbV9yZXNvdXJjZURhdGEuY2xlYXIoKTsKKyAgICB9
CisKKyAgICBzaXplX3QgbV9yZXNvdXJjZXNMb2FkZWQ7CisgICAgc2l6ZV90IG1fcmVzb3VyY2Vz
VG9Mb2FkOworICAgIEdPd25QdHI8Y2hhcj4gbV9yZXNvdXJjZURhdGE7CisgICAgc2l6ZV90IG1f
cmVzb3VyY2VEYXRhU2l6ZTsKKyAgICBHTGlzdCogbV9zdWJyZXNvdXJjZXM7Cit9OworCitzdGF0
aWMgdm9pZCB0ZXN0V2ViVmlld1Jlc291cmNlcyhSZXNvdXJjZXNUZXN0KiB0ZXN0LCBnY29uc3Rw
b2ludGVyKQoreworICAgIC8vIE5vdGhpbmcgbG9hZGVkIHlldCwgdGhlcmUgc2hvdWxuZCd0IGJl
IHJlc291cmNlcy4KKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2dldF9tYWluX3Jlc291
cmNlKHRlc3QtPm1fd2ViVmlldykpOworICAgIGdfYXNzZXJ0KCF0ZXN0LT5zdWJyZXNvdXJjZXMo
KSk7CisKKyAgICAvLyBMb2FkIHNpbXBsZSBwYWdlIHdpdGhvdXQgc3VicmVzb3VyY2VzLgorICAg
IHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keT5UZXN0aW5nIFdlYktpdEdUSys8L2JvZHk+PC9o
dG1sPiIsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIFdlYktp
dFdlYlJlc291cmNlKiByZXNvdXJjZSA9IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9yZXNvdXJj
ZSh0ZXN0LT5tX3dlYlZpZXcpOworICAgIGdfYXNzZXJ0KHJlc291cmNlKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dldF91cmkodGVzdC0+bV93ZWJWaWV3KSwgPT0sIHdl
YmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaShyZXNvdXJjZSkpOworICAgIGdfYXNzZXJ0KCF0ZXN0
LT5zdWJyZXNvdXJjZXMoKSk7CisKKyAgICAvLyBMb2FkIHNpbXBsZSBwYWdlIHdpdGggc3VicmVz
b3VyY2VzLgorICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRh
dGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VzTG9hZGVkKDQpOworCisgICAgcmVz
b3VyY2UgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2UodGVzdC0+bV93ZWJWaWV3
KTsKKyAgICBnX2Fzc2VydChyZXNvdXJjZSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93
ZWJfdmlld19nZXRfdXJpKHRlc3QtPm1fd2ViVmlldyksID09LCB3ZWJraXRfd2ViX3Jlc291cmNl
X2dldF91cmkocmVzb3VyY2UpKTsKKyAgICBHTGlzdCogc3VicmVzb3VyY2VzID0gdGVzdC0+c3Vi
cmVzb3VyY2VzKCk7CisgICAgZ19hc3NlcnQoc3VicmVzb3VyY2VzKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoZ19saXN0X2xlbmd0aChzdWJyZXNvdXJjZXMpLCA9PSwgMyk7CisKKyNpZiAwCisgICAg
Ly8gTG9hZCB0aGUgc2FtZSBVUkkgYWdhaW4uCisgICAgLy8gRklYTUU6IHdlIG5lZWQgYSB3b3Jr
YXJvdW5kIGZvciBidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4
NTEwLgorICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEo
KSk7CisgICAgdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VzTG9hZGVkKDQpOworI2VuZGlmCisKKyAg
ICAvLyBSZWxvYWQuCisgICAgd2Via2l0X3dlYl92aWV3X3JlbG9hZF9ieXBhc3NfY2FjaGUodGVz
dC0+bV93ZWJWaWV3KTsKKyAgICB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZXNMb2FkZWQoNCk7Cit9
CisKK2NsYXNzIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6IHB1YmxpYyBSZXNvdXJjZXNUZXN0IHsK
K3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFNpbmdsZVJlc291cmNlTG9hZFRl
c3QpOworCisgICAgZW51bSBMb2FkRXZlbnRzIHsKKyAgICAgICAgU3RhcnRlZCwKKyAgICAgICAg
U2VudFJlcXVlc3QsCisgICAgICAgIFJlZGlyZWN0ZWQsCisgICAgICAgIFJlY2VpdmVkUmVzcG9u
c2UsCisgICAgICAgIFJlY2VpdmVkRGF0YSwKKyAgICAgICAgRmluaXNoZWQsCisgICAgICAgIEZh
aWxlZAorICAgIH07CisKKyAgICBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0KCkKKyAgICAgICAgOiBS
ZXNvdXJjZXNUZXN0KCkKKyAgICAgICAgLCBtX3Jlc291cmNlRGF0YVJlY2VpdmVkKDApCisgICAg
eworICAgICAgICAgbV9yZXNvdXJjZXNUb0xvYWQgPSAyOworICAgIH0KKworICAgIHZvaWQgcmVz
b3VyY2VMb2FkU3RhcnRlZChXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIFdlYktpdFVSSVJl
cXVlc3QqIHJlcXVlc3QpCisgICAgeworICAgICAgICBpZiAocmVzb3VyY2UgPT0gd2Via2l0X3dl
Yl92aWV3X2dldF9tYWluX3Jlc291cmNlKG1fd2ViVmlldykpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgbV9yZXNvdXJjZURhdGFSZWNlaXZlZCA9IDA7CisgICAgICAgIG1fcmVzb3Vy
Y2UgPSByZXNvdXJjZTsKKyAgICAgICAgbV9sb2FkRXZlbnRzLmFwcGVuZChTdGFydGVkKTsKKyAg
ICB9CisKKyAgICB2b2lkIHJlc291cmNlU2VudFJlcXVlc3QoV2ViS2l0V2ViUmVzb3VyY2UqIHJl
c291cmNlLCBXZWJLaXRVUklSZXF1ZXN0KiByZXF1ZXN0LCBXZWJLaXRVUklSZXNwb25zZSogcmVk
aXJlY3RSZXNwb25zZSkKKyAgICB7CisgICAgICAgIGlmIChyZXNvdXJjZSAhPSBtX3Jlc291cmNl
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChyZWRpcmVjdFJlc3BvbnNlKQor
ICAgICAgICAgICAgbV9sb2FkRXZlbnRzLmFwcGVuZChSZWRpcmVjdGVkKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgbV9sb2FkRXZlbnRzLmFwcGVuZChTZW50UmVxdWVzdCk7CisgICAgfQor
CisgICAgdm9pZCByZXNvdXJjZVJlY2VpdmVkUmVzcG9uc2UoV2ViS2l0V2ViUmVzb3VyY2UqIHJl
c291cmNlKQorICAgIHsKKyAgICAgICAgaWYgKHJlc291cmNlICE9IG1fcmVzb3VyY2UpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9sb2FkRXZlbnRzLmFwcGVuZChSZWNlaXZlZFJl
c3BvbnNlKTsKKyAgICB9CisKKyAgICB2b2lkIHJlc291cmNlUmVjZWl2ZWREYXRhKFdlYktpdFdl
YlJlc291cmNlKiByZXNvdXJjZSwgZ3VpbnQ2NCBieXRlc1JlY2VpdmVkKQorICAgIHsKKyAgICAg
ICAgaWYgKHJlc291cmNlICE9IG1fcmVzb3VyY2UpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgbV9yZXNvdXJjZURhdGFSZWNlaXZlZCArPSBieXRlc1JlY2VpdmVkOworICAgICAgICBp
ZiAoIW1fbG9hZEV2ZW50cy5jb250YWlucyhSZWNlaXZlZERhdGEpKQorICAgICAgICAgICAgbV9s
b2FkRXZlbnRzLmFwcGVuZChSZWNlaXZlZERhdGEpOworICAgIH0KKworICAgIHZvaWQgcmVzb3Vy
Y2VGaW5pc2hlZChXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UpCisgICAgeworICAgICAgICBp
ZiAocmVzb3VyY2UgIT0gbV9yZXNvdXJjZSkgeworICAgICAgICAgICAgUmVzb3VyY2VzVGVzdDo6
cmVzb3VyY2VGaW5pc2hlZChyZXNvdXJjZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBpZiAoIW1fbG9hZEV2ZW50cy5jb250YWlucyhGYWlsZWQpKSB7CisgICAg
ICAgICAgICBXZWJLaXRVUklSZXNwb25zZSogcmVzcG9uc2UgPSB3ZWJraXRfd2ViX3Jlc291cmNl
X2dldF9yZXNwb25zZShtX3Jlc291cmNlLmdldCgpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KHJl
c3BvbnNlKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfdXJpX3Jlc3BvbnNl
X2dldF9jb250ZW50X2xlbmd0aChyZXNwb25zZSksID09LCBtX3Jlc291cmNlRGF0YVJlY2VpdmVk
KTsKKyAgICAgICAgfQorICAgICAgICBtX2xvYWRFdmVudHMuYXBwZW5kKEZpbmlzaGVkKTsKKyAg
ICAgICAgUmVzb3VyY2VzVGVzdDo6cmVzb3VyY2VGaW5pc2hlZChyZXNvdXJjZSk7CisgICAgfQor
CisgICAgdm9pZCByZXNvdXJjZUZhaWxlZChXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIEdF
cnJvciogZXJyb3IpCisgICAgeworICAgICAgICBpZiAocmVzb3VyY2UgPT0gbV9yZXNvdXJjZSkK
KyAgICAgICAgICAgIG1fbG9hZEV2ZW50cy5hcHBlbmQoRmFpbGVkKTsKKyAgICB9CisKKyAgICB2
b2lkIHdhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlzaGVkKCkKKyAgICB7CisgICAgICAgIG1fcmVz
b3VyY2UgPSAwOworICAgICAgICBtX3Jlc291cmNlc0xvYWRlZCA9IDA7CisgICAgICAgIGdfbWFp
bl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBXZWJLaXRVUklSZXNwb25zZSog
d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWRBbmRSZXR1cm5VUklSZXNwb25zZSgpCisgICAg
eworICAgICAgICB3YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZCgpOworICAgICAgICBnX2Fz
c2VydChtX3Jlc291cmNlKTsKKyAgICAgICAgcmV0dXJuIHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0
X3Jlc3BvbnNlKG1fcmVzb3VyY2UuZ2V0KCkpOworICAgIH0KKworICAgIEdSZWZQdHI8V2ViS2l0
V2ViUmVzb3VyY2U+IG1fcmVzb3VyY2U7CisgICAgVmVjdG9yPExvYWRFdmVudHM+IG1fbG9hZEV2
ZW50czsKKyAgICBndWludDY0IG1fcmVzb3VyY2VEYXRhUmVjZWl2ZWQ7Cit9OworCitzdGF0aWMg
dm9pZCB0ZXN0V2ViUmVzb3VyY2VMb2FkaW5nKFNpbmdsZVJlc291cmNlTG9hZFRlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQ
YXRoKCIvamF2YXNjcmlwdC5odG1sIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxSZXNv
dXJjZUxvYWRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fcmVzb3VyY2UpOworICAg
IFZlY3RvcjxTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpMb2FkRXZlbnRzPiYgZXZlbnRzID0gdGVz
dC0+bV9sb2FkRXZlbnRzOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwg
NSk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIFNpbmdsZVJlc291cmNlTG9h
ZFRlc3Q6OlN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBTaW5n
bGVSZXNvdXJjZUxvYWRUZXN0OjpTZW50UmVxdWVzdCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2
ZW50c1syXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOwor
ICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbM10sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0
OjpSZWNlaXZlZERhdGEpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbNF0sID09LCBTaW5n
bGVSZXNvdXJjZUxvYWRUZXN0OjpGaW5pc2hlZCk7CisgICAgZXZlbnRzLmNsZWFyKCk7CisKKyAg
ICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9yZWRpcmVjdGVkLWNzcy5o
dG1sIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZCgp
OworICAgIGdfYXNzZXJ0KHRlc3QtPm1fcmVzb3VyY2UpOworICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHMuc2l6ZSgpLCA9PSwgNik7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0s
IFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHNbMV0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpTZW50UmVxdWVzdCk7CisgICAg
Z19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlJl
ZGlyZWN0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbM10sID09LCBTaW5nbGVSZXNv
dXJjZUxvYWRUZXN0OjpSZWNlaXZlZFJlc3BvbnNlKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZl
bnRzWzRdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6UmVjZWl2ZWREYXRhKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoZXZlbnRzWzVdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6Rmlu
aXNoZWQpOworICAgIGV2ZW50cy5jbGVhcigpOworCisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVy
LT5nZXRVUklGb3JQYXRoKCIvaW52YWxpZC1jc3MuaHRtbCIpLmRhdGEoKSk7CisgICAgdGVzdC0+
d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3Jl
c291cmNlKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDQpOworICAg
IGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpT
dGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgU2luZ2xlUmVzb3Vy
Y2VMb2FkVGVzdDo6U2VudFJlcXVlc3QpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0s
ID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpGYWlsZWQpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHNbM10sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpGaW5pc2hlZCk7CisgICAg
ZXZlbnRzLmNsZWFyKCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJSZXNvdXJjZVJlc3BvbnNl
KFNpbmdsZVJlc291cmNlTG9hZFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8g
Tm8gY2FjaGVkIHJlc291cmNlOiBGaXJzdCBsb2FkLgorICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZl
ci0+Z2V0VVJJRm9yUGF0aCgiL2phdmFzY3JpcHQuaHRtbCIpLmRhdGEoKSk7CisgICAgV2ViS2l0
VVJJUmVzcG9uc2UqIHJlc3BvbnNlID0gdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNo
ZWRBbmRSZXR1cm5VUklSZXNwb25zZSgpOworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfdXJp
X3Jlc3BvbnNlX2dldF9zdGF0dXNfY29kZShyZXNwb25zZSksID09LCBTT1VQX1NUQVRVU19PSyk7
CisKKyAgICAvLyBObyBjYWNoZWQgcmVzb3VyY2U6IFNlY29uZCBsb2FkLgorICAgIHRlc3QtPmxv
YWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2phdmFzY3JpcHQuaHRtbCIpLmRhdGEoKSk7
CisgICAgcmVzcG9uc2UgPSB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZEFuZFJl
dHVyblVSSVJlc3BvbnNlKCk7CisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF91cmlfcmVzcG9u
c2VfZ2V0X3N0YXR1c19jb2RlKHJlc3BvbnNlKSwgPT0sIFNPVVBfU1RBVFVTX09LKTsKKworICAg
IC8vIE5vIGNhY2hlZCByZXNvdXJjZTogUmVsb2FkLgorICAgIHdlYmtpdF93ZWJfdmlld19yZWxv
YWQodGVzdC0+bV93ZWJWaWV3KTsKKyAgICByZXNwb25zZSA9IHRlc3QtPndhaXRVbnRpbFJlc291
cmNlTG9hZEZpbmlzaGVkQW5kUmV0dXJuVVJJUmVzcG9uc2UoKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQod2Via2l0X3VyaV9yZXNwb25zZV9nZXRfc3RhdHVzX2NvZGUocmVzcG9uc2UpLCA9PSwgU09V
UF9TVEFUVVNfT0spOworCisgICAgLy8gQ2FjaGVkIHJlc291cmNlOiBGaXJzdCBsb2FkLgorICAg
IHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2ltYWdlLmh0bWwiKS5kYXRh
KCkpOworICAgIHJlc3BvbnNlID0gdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWRB
bmRSZXR1cm5VUklSZXNwb25zZSgpOworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfdXJpX3Jl
c3BvbnNlX2dldF9zdGF0dXNfY29kZShyZXNwb25zZSksID09LCBTT1VQX1NUQVRVU19PSyk7CisK
KyAgICAvLyBDYWNoZWQgcmVzb3VyY2U6IFNlY29uZCBsb2FkLgorICAgIHRlc3QtPmxvYWRVUkko
a1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2ltYWdlLmh0bWwiKS5kYXRhKCkpOworICAgIHJlc3Bv
bnNlID0gdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWRBbmRSZXR1cm5VUklSZXNw
b25zZSgpOworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF9zdGF0
dXNfY29kZShyZXNwb25zZSksID09LCBTT1VQX1NUQVRVU19PSyk7CisKKyAgICAvLyBDYWNoZWQg
cmVzb3VyY2U6IFJlbG9hZC4KKyAgICB3ZWJraXRfd2ViX3ZpZXdfcmVsb2FkKHRlc3QtPm1fd2Vi
Vmlldyk7CisgICAgcmVzcG9uc2UgPSB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hl
ZEFuZFJldHVyblVSSVJlc3BvbnNlKCk7CisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF91cmlf
cmVzcG9uc2VfZ2V0X3N0YXR1c19jb2RlKHJlc3BvbnNlKSwgPT0sIFNPVVBfU1RBVFVTX05PVF9N
T0RJRklFRCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJSZXNvdXJjZU1pbWVUeXBlKFNpbmds
ZVJlc291cmNlTG9hZFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9h
ZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvamF2YXNjcmlwdC5odG1sIikuZGF0YSgpKTsK
KyAgICBXZWJLaXRVUklSZXNwb25zZSogcmVzcG9uc2UgPSB0ZXN0LT53YWl0VW50aWxSZXNvdXJj
ZUxvYWRGaW5pc2hlZEFuZFJldHVyblVSSVJlc3BvbnNlKCk7CisgICAgZ19hc3NlcnRfY21wc3Ry
KHdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0X21pbWVfdHlwZShyZXNwb25zZSksID09LCAidGV4dC9q
YXZhc2NyaXB0Iik7CisKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgo
Ii9pbWFnZS5odG1sIikuZGF0YSgpKTsKKyAgICByZXNwb25zZSA9IHRlc3QtPndhaXRVbnRpbFJl
c291cmNlTG9hZEZpbmlzaGVkQW5kUmV0dXJuVVJJUmVzcG9uc2UoKTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIod2Via2l0X3VyaV9yZXNwb25zZV9nZXRfbWltZV90eXBlKHJlc3BvbnNlKSwgPT0sICJp
bWFnZS92bmQubWljcm9zb2Z0Lmljb24iKTsKKworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+
Z2V0VVJJRm9yUGF0aCgiL3JlZGlyZWN0ZWQtY3NzLmh0bWwiKS5kYXRhKCkpOworICAgIHJlc3Bv
bnNlID0gdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWRBbmRSZXR1cm5VUklSZXNw
b25zZSgpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF9taW1l
X3R5cGUocmVzcG9uc2UpLCA9PSwgInRleHQvY3NzIik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RX
ZWJSZXNvdXJjZVN1Z2dlc3RlZEZpbGVuYW1lKFNpbmdsZVJlc291cmNlTG9hZFRlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQ
YXRoKCIvamF2YXNjcmlwdC5odG1sIikuZGF0YSgpKTsKKyAgICBXZWJLaXRVUklSZXNwb25zZSog
cmVzcG9uc2UgPSB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZEFuZFJldHVyblVS
SVJlc3BvbnNlKCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0
X3N1Z2dlc3RlZF9maWxlbmFtZShyZXNwb25zZSksID09LCAiSmF2YVNjcmlwdC5qcyIpOworCisg
ICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvaW1hZ2UuaHRtbCIpLmRh
dGEoKSk7CisgICAgcmVzcG9uc2UgPSB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hl
ZEFuZFJldHVyblVSSVJlc3BvbnNlKCk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF91cmlfcmVzcG9u
c2VfZ2V0X3N1Z2dlc3RlZF9maWxlbmFtZShyZXNwb25zZSkpOworfQorCitjbGFzcyBSZXNvdXJj
ZVVSSVRyYWNraW5nVGVzdDogcHVibGljIFNpbmdsZVJlc291cmNlTG9hZFRlc3QgeworcHVibGlj
OgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoUmVzb3VyY2VVUklUcmFja2luZ1Rlc3QpOwor
CisgICAgUmVzb3VyY2VVUklUcmFja2luZ1Rlc3QoKQorICAgICAgICA6IFNpbmdsZVJlc291cmNl
TG9hZFRlc3QoKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCB1cmlDaGFuZ2VkKFdl
YktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgR1BhcmFtU3BlYyosIFJlc291cmNlVVJJVHJhY2tp
bmdUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQocmVzb3VyY2UgPT0gdGVzdC0+
bV9yZXNvdXJjZS5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXN0LT5tX2FjdGl2
ZVVSSS5kYXRhKCksICE9LCB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF91cmkodGVzdC0+bV9yZXNv
dXJjZS5nZXQoKSkpOworICAgICAgICB0ZXN0LT5tX2FjdGl2ZVVSSSA9IHdlYmtpdF93ZWJfcmVz
b3VyY2VfZ2V0X3VyaSh0ZXN0LT5tX3Jlc291cmNlLmdldCgpKTsKKyAgICB9CisKKyAgICB2b2lk
IHJlc291cmNlTG9hZFN0YXJ0ZWQoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBXZWJLaXRV
UklSZXF1ZXN0KiByZXF1ZXN0KQorICAgIHsKKyAgICAgICAgaWYgKHJlc291cmNlID09IHdlYmtp
dF93ZWJfdmlld19nZXRfbWFpbl9yZXNvdXJjZShtX3dlYlZpZXcpKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIG1fcmVzb3VyY2UgPSByZXNvdXJjZTsKKyAgICAgICAgbV9hY3RpdmVV
UkkgPSB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF91cmkocmVzb3VyY2UpOworICAgICAgICBjaGVj
a0FjdGl2ZVVSSSgiL3JlZGlyZWN0ZWQuY3NzIik7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0ciht
X2FjdGl2ZVVSSS5kYXRhKCksID09LCB3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0
KSk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QocmVzb3VyY2UsICJub3RpZnk6OnVyaSIsIEdf
Q0FMTEJBQ0sodXJpQ2hhbmdlZCksIHRoaXMpOworICAgIH0KKworICAgIHZvaWQgcmVzb3VyY2VT
ZW50UmVxdWVzdChXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIFdlYktpdFVSSVJlcXVlc3Qq
IHJlcXVlc3QsIFdlYktpdFVSSVJlc3BvbnNlKiByZWRpcmVjdFJlc3BvbnNlKQorICAgIHsKKyAg
ICAgICAgaWYgKHJlc291cmNlICE9IG1fcmVzb3VyY2UpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgaWYgKHJlZGlyZWN0UmVzcG9uc2UpCisgICAgICAgICAgICBjaGVja0FjdGl2ZVVS
SSgiL3NpbXBsZS1zdHlsZS5jc3MiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2hlY2tB
Y3RpdmVVUkkoIi9yZWRpcmVjdGVkLmNzcyIpOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIobV9h
Y3RpdmVVUkkuZGF0YSgpLCA9PSwgd2Via2l0X3VyaV9yZXF1ZXN0X2dldF91cmkocmVxdWVzdCkp
OworICAgIH0KKworICAgIHZvaWQgcmVzb3VyY2VSZWNlaXZlZFJlc3BvbnNlKFdlYktpdFdlYlJl
c291cmNlKiByZXNvdXJjZSkKKyAgICB7CisgICAgICAgIGlmIChyZXNvdXJjZSAhPSBtX3Jlc291
cmNlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNoZWNrQWN0aXZlVVJJKCIvc2lt
cGxlLXN0eWxlLmNzcyIpOworICAgIH0KKworICAgIHZvaWQgcmVzb3VyY2VSZWNlaXZlZERhdGEo
V2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBndWludDY0IGJ5dGVzUmVjZWl2ZWQpCisgICAg
eworICAgIH0KKworICAgIHZvaWQgcmVzb3VyY2VGaW5pc2hlZChXZWJLaXRXZWJSZXNvdXJjZSog
cmVzb3VyY2UpCisgICAgeworICAgICAgICBpZiAocmVzb3VyY2UgPT0gbV9yZXNvdXJjZSkKKyAg
ICAgICAgICAgIGNoZWNrQWN0aXZlVVJJKCIvc2ltcGxlLXN0eWxlLmNzcyIpOworICAgICAgICBS
ZXNvdXJjZXNUZXN0OjpyZXNvdXJjZUZpbmlzaGVkKHJlc291cmNlKTsKKyAgICB9CisKKyAgICB2
b2lkIHJlc291cmNlRmFpbGVkKFdlYktpdFdlYlJlc291cmNlKiwgR0Vycm9yKikKKyAgICB7Cisg
ICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgfQorCisgICAgQ1N0cmluZyBtX2Fj
dGl2ZVVSSTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGNoZWNrQWN0aXZlVVJJKGNvbnN0IGNoYXIq
IHVyaSkKKyAgICB7CisgICAgICAgIEFTU0VSVF9DTVBfQ1NUUklORyhtX2FjdGl2ZVVSSSwgPT0s
IGtTZXJ2ZXItPmdldFVSSUZvclBhdGgodXJpKSk7CisgICAgfQorfTsKKworc3RhdGljIHZvaWQg
dGVzdFdlYlJlc291cmNlQWN0aXZlVVJJKFJlc291cmNlVVJJVHJhY2tpbmdUZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0
aCgiL3JlZGlyZWN0ZWQtY3NzLmh0bWwiKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbFJl
c291cmNlTG9hZEZpbmlzaGVkKCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJSZXNvdXJjZUdl
dERhdGEoUmVzb3VyY2VzVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5s
b2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi8iKS5kYXRhKCkpOworICAgIC8vIEZJWE1F
OiB0aGlzIHNob3VsZCBiZSA0IGluc3RlYWQgb2YgMywgYnV0IHdlIGRvbid0IGdldCB0aGUgY3Nz
IGltYWdlIHJlc291cmNlCisgICAgLy8gZHVlIHRvIGJ1ZyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9Nzg1MTAuCisgICAgdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VzTG9h
ZGVkKDMpOworCisgICAgV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlID0gd2Via2l0X3dlYl92
aWV3X2dldF9tYWluX3Jlc291cmNlKHRlc3QtPm1fd2ViVmlldyk7CisgICAgZ19hc3NlcnQocmVz
b3VyY2UpOworICAgIHRlc3QtPmNoZWNrUmVzb3VyY2VEYXRhKHJlc291cmNlKTsKKworICAgIEdM
aXN0KiBzdWJyZXNvdXJjZXMgPSB0ZXN0LT5zdWJyZXNvdXJjZXMoKTsKKyAgICBmb3IgKEdMaXN0
KiBpdGVtID0gc3VicmVzb3VyY2VzOyBpdGVtOyBpdGVtID0gZ19saXN0X25leHQoaXRlbSkpCisg
ICAgICAgIHRlc3QtPmNoZWNrUmVzb3VyY2VEYXRhKFdFQktJVF9XRUJfUkVTT1VSQ0UoaXRlbS0+
ZGF0YSkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1Jlc291cmNlc0hpc3RvcnlDYWNo
ZShTaW5nbGVSZXNvdXJjZUxvYWRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIENT
dHJpbmcgamF2YXNjcmlwdFVSSSA9IGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9qYXZhc2NyaXB0
Lmh0bWwiKTsKKyAgICB0ZXN0LT5sb2FkVVJJKGphdmFzY3JpcHRVUkkuZGF0YSgpKTsKKyAgICB0
ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZCgpOworICAgIFdlYktpdFdlYlJlc291
cmNlKiByZXNvdXJjZSA9IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9yZXNvdXJjZSh0ZXN0LT5t
X3dlYlZpZXcpOworICAgIGdfYXNzZXJ0KHJlc291cmNlKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIo
d2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJpKHJlc291cmNlKSwgPT0sIGphdmFzY3JpcHRVUkku
ZGF0YSgpKTsKKworICAgIENTdHJpbmcgc2ltcGxlU3R5bGVDU1NVUkkgPSBrU2VydmVyLT5nZXRV
UklGb3JQYXRoKCIvc2ltcGxlLXN0eWxlLWNzcy5odG1sIik7CisgICAgdGVzdC0+bG9hZFVSSShz
aW1wbGVTdHlsZUNTU1VSSS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9h
ZEZpbmlzaGVkKCk7CisgICAgcmVzb3VyY2UgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVz
b3VyY2UodGVzdC0+bV93ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChyZXNvdXJjZSk7CisgICAgZ19h
c3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaShyZXNvdXJjZSksID09LCBz
aW1wbGVTdHlsZUNTU1VSSS5kYXRhKCkpOworCisgICAgdGVzdC0+Z29CYWNrKCk7CisgICAgdGVz
dC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWQoKTsKKyAgICByZXNvdXJjZSA9IHdlYmtp
dF93ZWJfdmlld19nZXRfbWFpbl9yZXNvdXJjZSh0ZXN0LT5tX3dlYlZpZXcpOworICAgIGdfYXNz
ZXJ0KHJlc291cmNlKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9yZXNvdXJjZV9n
ZXRfdXJpKHJlc291cmNlKSwgPT0sIGphdmFzY3JpcHRVUkkuZGF0YSgpKTsKKworICAgIHRlc3Qt
PmdvRm9yd2FyZCgpOworICAgIHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlzaGVkKCk7
CisgICAgcmVzb3VyY2UgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2UodGVzdC0+
bV93ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChyZXNvdXJjZSk7CisgICAgZ19hc3NlcnRfY21wc3Ry
KHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaShyZXNvdXJjZSksID09LCBzaW1wbGVTdHlsZUNT
U1VSSS5kYXRhKCkpOworfQorCitjbGFzcyBTZW5kUmVxdWVzdFRlc3Q6IHB1YmxpYyBTaW5nbGVS
ZXNvdXJjZUxvYWRUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFNl
bmRSZXF1ZXN0VGVzdCk7CisKKyAgICB2b2lkIHJlc291cmNlU2VudFJlcXVlc3QoV2ViS2l0V2Vi
UmVzb3VyY2UqIHJlc291cmNlLCBXZWJLaXRVUklSZXF1ZXN0KiByZXF1ZXN0LCBXZWJLaXRVUklS
ZXNwb25zZSogcmVkaXJlY3RSZXNwb25zZSkKKyAgICB7CisgICAgICAgIGlmIChyZXNvdXJjZSAh
PSBtX3Jlc291cmNlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChyZWRpcmVj
dFJlc3BvbnNlKQorICAgICAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF91cmlfcmVxdWVz
dF9nZXRfdXJpKHJlcXVlc3QpLCA9PSwgbV9leHBlY3RlZE5ld1Jlc291cmNlVVJJQWZ0ZXJSZWRp
cmVjdGlvbi5kYXRhKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBnX2Fzc2VydF9jbXBz
dHIod2Via2l0X3VyaV9yZXF1ZXN0X2dldF91cmkocmVxdWVzdCksID09LCBtX2V4cGVjdGVkTmV3
UmVzb3VyY2VVUkkuZGF0YSgpKTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF91cmlf
cmVxdWVzdF9nZXRfdXJpKHJlcXVlc3QpLCA9PSwgd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJp
KHJlc291cmNlKSk7CisKKyAgICAgICAgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6cmVzb3VyY2VT
ZW50UmVxdWVzdChyZXNvdXJjZSwgcmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7CisgICAgfQor
CisgICAgdm9pZCByZXNvdXJjZUZhaWxlZChXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIEdF
cnJvciogZXJyb3IpCisgICAgeworICAgICAgICBpZiAocmVzb3VyY2UgIT0gbV9yZXNvdXJjZSkK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dl
Yl9yZXNvdXJjZV9nZXRfdXJpKHJlc291cmNlKSwgPT0sIG1fZXhwZWN0ZWRDYW5jZWxsZWRSZXNv
dXJjZVVSSS5kYXRhKCkpOworICAgICAgICBnX2Fzc2VydF9lcnJvcihlcnJvciwgV0VCS0lUX05F
VFdPUktfRVJST1IsIFdFQktJVF9ORVRXT1JLX0VSUk9SX0NBTkNFTExFRCk7CisKKyAgICAgICAg
U2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6cmVzb3VyY2VGYWlsZWQocmVzb3VyY2UsIGVycm9yKTsK
KyAgICB9CisKKyAgICB2b2lkIHNldEV4cGVjdGVkTmV3UmVzb3VyY2VVUkkoY29uc3QgQ1N0cmlu
ZyYgdXJpKQorICAgIHsKKyAgICAgICAgbV9leHBlY3RlZE5ld1Jlc291cmNlVVJJID0gdXJpOwor
ICAgIH0KKworICAgIHZvaWQgc2V0RXhwZWN0ZWRDYW5jZWxsZWRSZXNvdXJjZVVSSShjb25zdCBD
U3RyaW5nJiB1cmkpCisgICAgeworICAgICAgICBtX2V4cGVjdGVkQ2FuY2VsbGVkUmVzb3VyY2VV
UkkgPSB1cmk7CisgICAgfQorCisgICAgdm9pZCBzZXRFeHBlY3RlZE5ld1Jlc291cmNlVVJJQWZ0
ZXJSZWRpcmVjdGlvbihjb25zdCBDU3RyaW5nJiB1cmkpCisgICAgeworICAgICAgICBtX2V4cGVj
dGVkTmV3UmVzb3VyY2VVUklBZnRlclJlZGlyZWN0aW9uID0gdXJpOworICAgIH0KKworICAgIENT
dHJpbmcgbV9leHBlY3RlZE5ld1Jlc291cmNlVVJJOworICAgIENTdHJpbmcgbV9leHBlY3RlZENh
bmNlbGxlZFJlc291cmNlVVJJOworICAgIENTdHJpbmcgbV9leHBlY3RlZE5ld1Jlc291cmNlVVJJ
QWZ0ZXJSZWRpcmVjdGlvbjsKK307CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJSZXNvdXJjZVNlbmRS
ZXF1ZXN0KFNlbmRSZXF1ZXN0VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0
LT5zZXRFeHBlY3RlZE5ld1Jlc291cmNlVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9qYXZh
c2NyaXB0LmpzIikpOworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgi
cmVsYXRpdmUtamF2YXNjcmlwdC5odG1sIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxS
ZXNvdXJjZUxvYWRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fcmVzb3VyY2UpOwor
CisgICAgVmVjdG9yPFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OkxvYWRFdmVudHM+JiBldmVudHMg
PSB0ZXN0LT5tX2xvYWRFdmVudHM7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCks
ID09LCA1KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgU2luZ2xlUmVzb3Vy
Y2VMb2FkVGVzdDo6U3RhcnRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0s
IFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlNlbnRSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoZXZlbnRzWzJdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6UmVjZWl2ZWRSZXNwb25z
ZSk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1szXSwgPT0sIFNpbmdsZVJlc291cmNlTG9h
ZFRlc3Q6OlJlY2VpdmVkRGF0YSk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1s0XSwgPT0s
IFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OkZpbmlzaGVkKTsKKyAgICBldmVudHMuY2xlYXIoKTsK
KworICAgIC8vIENhbmNlbCByZXF1ZXN0LgorICAgIHRlc3QtPnNldEV4cGVjdGVkQ2FuY2VsbGVk
UmVzb3VyY2VVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2NhbmNlbC10aGlzLmpzIikpOwor
ICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3Jlc291cmNlLXRvLWNh
bmNlbC5odG1sIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5p
c2hlZCgpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fcmVzb3VyY2UpOworCisgICAgZ19hc3NlcnRf
Y21waW50KGV2ZW50cy5zaXplKCksID09LCAzKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRz
WzBdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6U3RhcnRlZCk7CisgICAgZ19hc3NlcnRf
Y21waW50KGV2ZW50c1sxXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OkZhaWxlZCk7Cisg
ICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6
OkZpbmlzaGVkKTsKKyAgICBldmVudHMuY2xlYXIoKTsKKworICAgIC8vIFVSSSBjaGFuZ2VkIGFm
dGVyIGEgcmVkaXJlY3QuCisgICAgdGVzdC0+c2V0RXhwZWN0ZWROZXdSZXNvdXJjZVVSSShrU2Vy
dmVyLT5nZXRVUklGb3JQYXRoKCIvcmVkaXJlY3RlZC5qcyIpKTsKKyAgICB0ZXN0LT5zZXRFeHBl
Y3RlZE5ld1Jlc291cmNlVVJJQWZ0ZXJSZWRpcmVjdGlvbihrU2VydmVyLT5nZXRVUklGb3JQYXRo
KCIvamF2YXNjcmlwdC5qcyIpKTsKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZv
clBhdGgoInJlZGlyZWN0ZWQtamF2YXNjcmlwdC5odG1sIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53
YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fcmVz
b3VyY2UpOworCisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCA2KTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6
U3RhcnRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIFNpbmdsZVJlc291
cmNlTG9hZFRlc3Q6OlNlbnRSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJd
LCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6UmVkaXJlY3RlZCk7CisgICAgZ19hc3NlcnRf
Y21waW50KGV2ZW50c1szXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlJlY2VpdmVkUmVz
cG9uc2UpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbNF0sID09LCBTaW5nbGVSZXNvdXJj
ZUxvYWRUZXN0OjpSZWNlaXZlZERhdGEpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbNV0s
ID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpGaW5pc2hlZCk7CisgICAgZXZlbnRzLmNsZWFy
KCk7CisKKyAgICAvLyBDYW5jZWwgYWZ0ZXIgYSByZWRpcmVjdC4KKyAgICB0ZXN0LT5zZXRFeHBl
Y3RlZE5ld1Jlc291cmNlVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9yZWRpcmVjdGVkLXRv
LWNhbmNlbC5qcyIpKTsKKyAgICB0ZXN0LT5zZXRFeHBlY3RlZENhbmNlbGxlZFJlc291cmNlVVJJ
KGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9yZWRpcmVjdGVkLXRvLWNhbmNlbC5qcyIpKTsKKyAg
ICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9yZWRpcmVjdGVkLXRvLWNh
bmNlbC5odG1sIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5p
c2hlZCgpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fcmVzb3VyY2UpOworCisgICAgZ19hc3NlcnRf
Y21waW50KGV2ZW50cy5zaXplKCksID09LCA0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRz
WzBdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6U3RhcnRlZCk7CisgICAgZ19hc3NlcnRf
Y21waW50KGV2ZW50c1sxXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlNlbnRSZXF1ZXN0
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2Fk
VGVzdDo6RmFpbGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzNdLCA9PSwgU2luZ2xl
UmVzb3VyY2VMb2FkVGVzdDo6RmluaXNoZWQpOworICAgIGV2ZW50cy5jbGVhcigpOworfQorCitz
dGF0aWMgdm9pZCBhZGRDYWNoZUhUVFBIZWFkZXJzVG9SZXNwb25zZShTb3VwTWVzc2FnZSogbWVz
c2FnZSkKK3sKKyAgICAvLyBUaGUgYWN0dWFsIGRhdGUgZG9lc24ndCByZWFsbHkgbWF0dGVyLgor
ICAgIFNvdXBEYXRlKiBzb3VwRGF0ZSA9IHNvdXBfZGF0ZV9uZXdfZnJvbV9ub3coMCk7CisgICAg
R093blB0cjxjaGFyPiBkYXRlKHNvdXBfZGF0ZV90b19zdHJpbmcoc291cERhdGUsIFNPVVBfREFU
RV9IVFRQKSk7CisgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1lc3NhZ2UtPnJlc3Bv
bnNlX2hlYWRlcnMsICJMYXN0LU1vZGlmaWVkIiwgZGF0ZS5nZXQoKSk7CisgICAgc291cF9kYXRl
X2ZyZWUoc291cERhdGUpOworICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChtZXNzYWdl
LT5yZXNwb25zZV9oZWFkZXJzLCAiQ2FjaGUtY29udHJvbCIsICJwdWJsaWMsIG1heC1hZ2U9MzE1
MzYwMDAiKTsKKyAgICBzb3VwRGF0ZSA9IHNvdXBfZGF0ZV9uZXdfZnJvbV9ub3coMzYwMCk7Cisg
ICAgZGF0ZS5zZXQoc291cF9kYXRlX3RvX3N0cmluZyhzb3VwRGF0ZSwgU09VUF9EQVRFX0hUVFAp
KTsKKyAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVh
ZGVycywgIkV4cGlyZXMiLCBkYXRlLmdldCgpKTsKKyAgICBzb3VwX2RhdGVfZnJlZShzb3VwRGF0
ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwg
U291cE1lc3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqLCBTb3Vw
Q2xpZW50Q29udGV4dCosIGdwb2ludGVyKQoreworICAgIGlmIChtZXNzYWdlLT5tZXRob2QgIT0g
U09VUF9NRVRIT0RfR0VUKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3Nh
Z2UsIFNPVVBfU1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7
CisKKyAgICBpZiAoc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X29uZShtZXNzYWdlLT5yZXF1ZXN0
X2hlYWRlcnMsICJJZi1Nb2RpZmllZC1TaW5jZSIpKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9z
ZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9NT0RJRklFRCk7CisgICAgICAgIHNv
dXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvIikpIHsKKyAg
ICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNP
VVBfTUVNT1JZX1NUQVRJQywga0luZGV4SHRtbCwgc3RybGVuKGtJbmRleEh0bWwpKTsKKyAgICB9
IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvamF2YXNjcmlwdC5odG1sIikpIHsKKyAgICAg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIGphdmFzY3JpcHRIdG1sID0gIjxodG1sPjxoZWFkPjxzY3Jp
cHQgbGFuZ3VhZ2U9J2phdmFzY3JpcHQnIHNyYz0nL2phdmFzY3JpcHQuanMnPjwvc2NyaXB0Pjwv
aGVhZD48Ym9keT48L2JvZHk+PC9odG1sPiI7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2Fw
cGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGphdmFzY3Jp
cHRIdG1sLCBzdHJsZW4oamF2YXNjcmlwdEh0bWwpKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2Vx
dWFsKHBhdGgsICIvaW1hZ2UuaHRtbCIpKSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBp
bWFnZUhUTUwgPSAiPGh0bWw+PGJvZHk+PGltZyBzcmM9Jy9ibGFuay5pY28nPjwvaW1nPjwvYm9k
eT48L2h0bWw+IjsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJl
c3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgaW1hZ2VIVE1MLCBzdHJsZW4oaW1hZ2VI
VE1MKSk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3JlZGlyZWN0ZWQtY3Nz
Lmh0bWwiKSkgeworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogcmVkaXJlY3RlZENTU0h0bWwg
PSAiPGh0bWw+PGhlYWQ+PGxpbmsgcmVsPSdzdHlsZXNoZWV0JyBocmVmPScvcmVkaXJlY3RlZC5j
c3MnIHR5cGU9J3RleHQvY3NzJz48L2hlYWQ+PGJvZHk+PC9odG1sPiI7CisgICAgICAgIHNvdXBf
bWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9T
VEFUSUMsIHJlZGlyZWN0ZWRDU1NIdG1sLCBzdHJsZW4ocmVkaXJlY3RlZENTU0h0bWwpKTsKKyAg
ICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvaW52YWxpZC1jc3MuaHRtbCIpKSB7Cisg
ICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBpbnZhbGlkQ1NTSHRtbCA9ICI8aHRtbD48aGVhZD48
bGluayByZWw9J3N0eWxlc2hlZXQnIGhyZWY9Jy9pbnZhbGlkLmNzcycgdHlwZT0ndGV4dC9jc3Mn
PjwvaGVhZD48Ym9keT48L2h0bWw+IjsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5k
KG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgaW52YWxpZENTU0h0
bWwsIHN0cmxlbihpbnZhbGlkQ1NTSHRtbCkpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwo
cGF0aCwgIi9zaW1wbGUtc3R5bGUtY3NzLmh0bWwiKSkgeworICAgICAgICBzdGF0aWMgY29uc3Qg
Y2hhciogc2ltcGxlU3R5bGVDU1NIdG1sID0gIjxodG1sPjxoZWFkPjxsaW5rIHJlbD0nc3R5bGVz
aGVldCcgaHJlZj0nL3NpbXBsZS1zdHlsZS5jc3MnIHR5cGU9J3RleHQvY3NzJz48L2hlYWQ+PGJv
ZHk+PC9odG1sPiI7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5y
ZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIHNpbXBsZVN0eWxlQ1NTSHRtbCwgc3Ry
bGVuKHNpbXBsZVN0eWxlQ1NTSHRtbCkpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0
aCwgIi9zdHlsZS5jc3MiKSkgeworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVz
c2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBrU3R5bGVDU1MsIHN0cmxl
bihrU3R5bGVDU1MpKTsKKyAgICAgICAgYWRkQ2FjaGVIVFRQSGVhZGVyc1RvUmVzcG9uc2UobWVz
c2FnZSk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChtZXNzYWdlLT5yZXNw
b25zZV9oZWFkZXJzLCAiQ29udGVudC1UeXBlIiwgInRleHQvY3NzIik7CisgICAgfSBlbHNlIGlm
IChnX3N0cl9lcXVhbChwYXRoLCAiL2phdmFzY3JpcHQuanMiKSkgeworICAgICAgICBzb3VwX21l
c3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RB
VElDLCBrSmF2YXNjcmlwdCwgc3RybGVuKGtKYXZhc2NyaXB0KSk7CisgICAgICAgIHNvdXBfbWVz
c2FnZV9oZWFkZXJzX2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiQ29udGVudC1U
eXBlIiwgInRleHQvamF2YXNjcmlwdCIpOworICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19h
cHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIkNvbnRlbnQtRGlzcG9zaXRpb24iLCAi
ZmlsZW5hbWU9SmF2YVNjcmlwdC5qcyIpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0
aCwgIi9yZWxhdGl2ZS1qYXZhc2NyaXB0Lmh0bWwiKSkgeworICAgICAgICBzdGF0aWMgY29uc3Qg
Y2hhciogamF2YXNjcmlwdFJlbGF0aXZlSFRNTCA9ICI8aHRtbD48aGVhZD48c2NyaXB0IGxhbmd1
YWdlPSdqYXZhc2NyaXB0JyBzcmM9J3JlbW92ZS10aGlzL2phdmFzY3JpcHQuanMnPjwvc2NyaXB0
PjwvaGVhZD48Ym9keT48L2JvZHk+PC9odG1sPiI7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5
X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGphdmFz
Y3JpcHRSZWxhdGl2ZUhUTUwsIHN0cmxlbihqYXZhc2NyaXB0UmVsYXRpdmVIVE1MKSk7CisgICAg
fSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3Jlc291cmNlLXRvLWNhbmNlbC5odG1sIikp
IHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHJlc291cmNlVG9DYW5jZWxIVE1MID0gIjxo
dG1sPjxoZWFkPjxzY3JpcHQgbGFuZ3VhZ2U9J2phdmFzY3JpcHQnIHNyYz0nY2FuY2VsLXRoaXMu
anMnPjwvc2NyaXB0PjwvaGVhZD48Ym9keT48L2JvZHk+PC9odG1sPiI7CisgICAgICAgIHNvdXBf
bWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9T
VEFUSUMsIHJlc291cmNlVG9DYW5jZWxIVE1MLCBzdHJsZW4ocmVzb3VyY2VUb0NhbmNlbEhUTUwp
KTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvcmVkaXJlY3RlZC1qYXZhc2Ny
aXB0Lmh0bWwiKSkgeworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogamF2YXNjcmlwdFJlbGF0
aXZlSFRNTCA9ICI8aHRtbD48aGVhZD48c2NyaXB0IGxhbmd1YWdlPSdqYXZhc2NyaXB0JyBzcmM9
Jy9yZWRpcmVjdGVkLmpzJz48L3NjcmlwdD48L2hlYWQ+PGJvZHk+PC9ib2R5PjwvaHRtbD4iOwor
ICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwg
U09VUF9NRU1PUllfU1RBVElDLCBqYXZhc2NyaXB0UmVsYXRpdmVIVE1MLCBzdHJsZW4oamF2YXNj
cmlwdFJlbGF0aXZlSFRNTCkpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9y
ZWRpcmVjdGVkLXRvLWNhbmNlbC5odG1sIikpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIq
IGphdmFzY3JpcHRSZWxhdGl2ZUhUTUwgPSAiPGh0bWw+PGhlYWQ+PHNjcmlwdCBsYW5ndWFnZT0n
amF2YXNjcmlwdCcgc3JjPScvcmVkaXJlY3RlZC10by1jYW5jZWwuanMnPjwvc2NyaXB0PjwvaGVh
ZD48Ym9keT48L2JvZHk+PC9odG1sPiI7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVu
ZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGphdmFzY3JpcHRS
ZWxhdGl2ZUhUTUwsIHN0cmxlbihqYXZhc2NyaXB0UmVsYXRpdmVIVE1MKSk7CisgICAgfSBlbHNl
IGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2JsYW5rLmljbyIpKSB7CisgICAgICAgIEdPd25QdHI8
Y2hhcj4gZmlsZVBhdGgoZ19idWlsZF9maWxlbmFtZShUZXN0OjpnZXRXZWJLaXQxVGVzdFJlc291
Y2VzRGlyKCkuZGF0YSgpLCBwYXRoLCBOVUxMKSk7CisgICAgICAgIGNoYXIqIGNvbnRlbnRzOwor
ICAgICAgICBnc2l6ZSBjb250ZW50c0xlbmd0aDsKKyAgICAgICAgZ19maWxlX2dldF9jb250ZW50
cyhmaWxlUGF0aC5nZXQoKSwgJmNvbnRlbnRzLCAmY29udGVudHNMZW5ndGgsIDApOworICAgICAg
ICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9N
RU1PUllfVEFLRSwgY29udGVudHMsIGNvbnRlbnRzTGVuZ3RoKTsKKyAgICAgICAgYWRkQ2FjaGVI
VFRQSGVhZGVyc1RvUmVzcG9uc2UobWVzc2FnZSk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFk
ZXJzX2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiQ29udGVudC1UeXBlIiwgImlt
YWdlL3ZuZC5taWNyb3NvZnQuaWNvbiIpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0
aCwgIi9zaW1wbGUtc3R5bGUuY3NzIikpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHNp
bXBsZUNTUyA9CisgICAgICAgICAgICAiYm9keSB7IgorICAgICAgICAgICAgIiAgICBtYXJnaW46
IDBweDsiCisgICAgICAgICAgICAiICAgIHBhZGRpbmc6IDBweDsiCisgICAgICAgICAgICAifSI7
CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5
LCBTT1VQX01FTU9SWV9TVEFUSUMsIHNpbXBsZUNTUywgc3RybGVuKHNpbXBsZUNTUykpOworICAg
ICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVy
cywgIkNvbnRlbnQtVHlwZSIsICJ0ZXh0L2NzcyIpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1
YWwocGF0aCwgIi9yZWRpcmVjdGVkLmNzcyIpKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRf
c3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX01PVkVEX1BFUk1BTkVOVExZKTsKKyAgICAgICAg
c291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJM
b2NhdGlvbiIsICIvc2ltcGxlLXN0eWxlLmNzcyIpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1
YWwocGF0aCwgIi9yZWRpcmVjdGVkLmpzIikpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9z
dGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTU9WRURfUEVSTUFORU5UTFkpOworICAgICAgICBz
b3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIkxv
Y2F0aW9uIiwgIi9yZW1vdmUtdGhpcy9qYXZhc2NyaXB0LmpzIik7CisgICAgfSBlbHNlIGlmIChn
X3N0cl9lcXVhbChwYXRoLCAiL3JlZGlyZWN0ZWQtdG8tY2FuY2VsLmpzIikpIHsKKyAgICAgICAg
c291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTU9WRURfUEVSTUFO
RU5UTFkpOworICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobWVzc2FnZS0+cmVz
cG9uc2VfaGVhZGVycywgIkxvY2F0aW9uIiwgIi9jYW5jZWwtdGhpcy5qcyIpOworICAgIH0gZWxz
ZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9pbnZhbGlkLmNzcyIpKQorICAgICAgICBzb3VwX21l
c3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19DQU5UX0NPTk5FQ1QpOworICAg
IGVsc2UKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFU
VVNfTk9UX0ZPVU5EKTsKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5y
ZXNwb25zZV9ib2R5KTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQoreworICAgIGtTZXJ2ZXIgPSBu
ZXcgV2ViS2l0VGVzdFNlcnZlcigpOworICAgIGtTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFjayk7
CisKKyAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3dlYl9leHRlbnNpb25zX2RpcmVjdG9yeSh3
ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSwgV0VCS0lUX1RFU1RfV0VCX0VYVEVOU0lP
TlNfRElSKTsKKworICAgIFJlc291cmNlc1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJyZXNv
dXJjZXMiLCB0ZXN0V2ViVmlld1Jlc291cmNlcyk7CisgICAgU2luZ2xlUmVzb3VyY2VMb2FkVGVz
dDo6YWRkKCJXZWJLaXRXZWJSZXNvdXJjZSIsICJsb2FkaW5nIiwgdGVzdFdlYlJlc291cmNlTG9h
ZGluZyk7CisgICAgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6YWRkKCJXZWJLaXRXZWJSZXNvdXJj
ZSIsICJyZXNwb25zZSIsIHRlc3RXZWJSZXNvdXJjZVJlc3BvbnNlKTsKKyAgICBTaW5nbGVSZXNv
dXJjZUxvYWRUZXN0OjphZGQoIldlYktpdFdlYlJlc291cmNlIiwgIm1pbWUtdHlwZSIsIHRlc3RX
ZWJSZXNvdXJjZU1pbWVUeXBlKTsKKyAgICBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjphZGQoIldl
YktpdFdlYlJlc291cmNlIiwgInN1Z2dlc3RlZC1maWxlbmFtZSIsIHRlc3RXZWJSZXNvdXJjZVN1
Z2dlc3RlZEZpbGVuYW1lKTsKKyAgICBSZXNvdXJjZVVSSVRyYWNraW5nVGVzdDo6YWRkKCJXZWJL
aXRXZWJSZXNvdXJjZSIsICJhY3RpdmUtdXJpIiwgdGVzdFdlYlJlc291cmNlQWN0aXZlVVJJKTsK
KyAgICBSZXNvdXJjZXNUZXN0OjphZGQoIldlYktpdFdlYlJlc291cmNlIiwgImdldC1kYXRhIiwg
dGVzdFdlYlJlc291cmNlR2V0RGF0YSk7CisgICAgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6YWRk
KCJXZWJLaXRXZWJWaWV3IiwgImhpc3RvcnktY2FjaGUiLCB0ZXN0V2ViVmlld1Jlc291cmNlc0hp
c3RvcnlDYWNoZSk7CisgICAgU2VuZFJlcXVlc3RUZXN0OjphZGQoIldlYktpdFdlYlBhZ2UiLCAi
c2VuZC1yZXF1ZXN0IiwgdGVzdFdlYlJlc291cmNlU2VuZFJlcXVlc3QpOworfQorCit2b2lkIGFm
dGVyQWxsKCkKK3sKKyAgICBkZWxldGUga1NlcnZlcjsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0U1NMLmNwcCBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0U1NMLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5lMzE4MGM1Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RTU0wuY3BwCkBAIC0wLDAgKzEsMjkwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2luY2x1ZGUgIkxvYWRUcmFja2luZ1Rlc3QuaCIKKyNpbmNsdWRlICJXZWJLaXRUZXN0U2VydmVy
LmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCitzdGF0aWMgV2ViS2l0VGVzdFNlcnZlcioga0h0
dHBzU2VydmVyOworc3RhdGljIFdlYktpdFRlc3RTZXJ2ZXIqIGtIdHRwU2VydmVyOworCitzdGF0
aWMgY29uc3QgY2hhciogaW5kZXhIVE1MID0gIjxodG1sPjxib2R5PlRlc3RpbmcgV2ViS2l0MkdU
SysgU1NMPC9ib2R5PjwvaHRtbGw+IjsKK3N0YXRpYyBjb25zdCBjaGFyKiBpbnNlY3VyZUNvbnRl
bnRIVE1MID0gIjxodG1sPjxzY3JpcHQgc3JjPVwiJXNcIj48L3NjcmlwdD48Ym9keT48cD5UZXh0
ICsgaW1hZ2UgPGltZyBzcmM9XCIlc1wiIGFsaWduPVwicmlnaHRcIi8+PC9wPjwvYm9keT48L2h0
bWw+IjsKK3N0YXRpYyBjb25zdCBjaGFyIFRMU0V4cGVjdGVkU3VjY2Vzc1RpdGxlW10gPSAiV2Vi
S2l0Mkd0aysgVExTIHBlcm1pc3Npb24gdGVzdCI7CitzdGF0aWMgY29uc3QgY2hhciBUTFNTdWNj
ZXNzSFRNTFN0cmluZ1tdID0gIjxodG1sPjxoZWFkPjx0aXRsZT5XZWJLaXQyR3RrKyBUTFMgcGVy
bWlzc2lvbiB0ZXN0PC90aXRsZT48L2hlYWQ+PGJvZHk+PC9ib2R5PjwvaHRtbD4iOworCitjbGFz
cyBTU0xUZXN0OiBwdWJsaWMgTG9hZFRyYWNraW5nVGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9H
TElCX1RFU1RfRklYVFVSRShTU0xUZXN0KTsKKworICAgIFNTTFRlc3QoKQorICAgICAgICA6IG1f
dGxzRXJyb3JzKHN0YXRpY19jYXN0PEdUbHNDZXJ0aWZpY2F0ZUZsYWdzPigwKSkKKyAgICB7Cisg
ICAgfQorCisgICAgdmlydHVhbCB2b2lkIHByb3Zpc2lvbmFsTG9hZEZhaWxlZChjb25zdCBnY2hh
ciogZmFpbGluZ1VSSSwgR0Vycm9yKiBlcnJvcikKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0X2Vy
cm9yKGVycm9yLCBTT1VQX0hUVFBfRVJST1IsIFNPVVBfU1RBVFVTX1NTTF9GQUlMRUQpOworICAg
ICAgICBMb2FkVHJhY2tpbmdUZXN0Ojpwcm92aXNpb25hbExvYWRGYWlsZWQoZmFpbGluZ1VSSSwg
ZXJyb3IpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBsb2FkQ29tbWl0dGVkKCkKKyAgICB7
CisgICAgICAgIEdUbHNDZXJ0aWZpY2F0ZSogY2VydGlmaWNhdGUgPSAwOworICAgICAgICB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X3Rsc19pbmZvKG1fd2ViVmlldywgJmNlcnRpZmljYXRlLCAmbV90bHNF
cnJvcnMpOworICAgICAgICBtX2NlcnRpZmljYXRlID0gY2VydGlmaWNhdGU7CisgICAgICAgIExv
YWRUcmFja2luZ1Rlc3Q6OmxvYWRDb21taXR0ZWQoKTsKKyAgICB9CisKKyAgICB2b2lkIHdhaXRV
bnRpbExvYWRGaW5pc2hlZCgpCisgICAgeworICAgICAgICBtX2NlcnRpZmljYXRlID0gMDsKKyAg
ICAgICAgbV90bHNFcnJvcnMgPSBzdGF0aWNfY2FzdDxHVGxzQ2VydGlmaWNhdGVGbGFncz4oMCk7
CisgICAgICAgIExvYWRUcmFja2luZ1Rlc3Q6OndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAg
IH0KKworICAgIEdSZWZQdHI8R1Rsc0NlcnRpZmljYXRlPiBtX2NlcnRpZmljYXRlOworICAgIEdU
bHNDZXJ0aWZpY2F0ZUZsYWdzIG1fdGxzRXJyb3JzOworfTsKKworc3RhdGljIHZvaWQgdGVzdFNT
TChTU0xUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRVUkkoa0h0
dHBzU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50
aWxMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX2NlcnRpZmljYXRlKTsKKyAg
ICAvLyBXZSBhbHdheXMgZXhwZWN0IGVycm9ycyBiZWNhdXNlIHdlIGFyZSB1c2luZyBhIHNlbGYt
c2lnbmVkIGNlcnRpZmljYXRlLAorICAgIC8vIGJ1dCBvbmx5IEdfVExTX0NFUlRJRklDQVRFX1VO
S05PV05fQ0EgZmxhZ3Mgc2hvdWxkIGJlIHByZXNlbnQuCisgICAgZ19hc3NlcnQodGVzdC0+bV90
bHNFcnJvcnMpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQodGVzdC0+bV90bHNFcnJvcnMsID09LCBH
X1RMU19DRVJUSUZJQ0FURV9VTktOT1dOX0NBKTsKKworICAgIC8vIE5vbiBIVFRQUyBsb2FkcyBz
aG91bGRuJ3QgaGF2ZSBhIGNlcnRpZmljYXRlIG5vciBlcnJvcnMuCisgICAgdGVzdC0+bG9hZEh0
bWwoaW5kZXhIVE1MLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAg
ICBnX2Fzc2VydCghdGVzdC0+bV9jZXJ0aWZpY2F0ZSk7CisgICAgZ19hc3NlcnQoIXRlc3QtPm1f
dGxzRXJyb3JzKTsKK30KKworY2xhc3MgSW5zZWN1cmVDb250ZW50VGVzdDogcHVibGljIFdlYlZp
ZXdUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKEluc2VjdXJlQ29u
dGVudFRlc3QpOworCisgICAgSW5zZWN1cmVDb250ZW50VGVzdCgpCisgICAgICAgIDogbV9pbnNl
Y3VyZUNvbnRlbnRSdW4oZmFsc2UpCisgICAgICAgICwgbV9pbnNlY3VyZUNvbnRlbnREaXNwbGF5
ZWQoZmFsc2UpCisgICAgeworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImlu
c2VjdXJlLWNvbnRlbnQtZGV0ZWN0ZWQiLCBHX0NBTExCQUNLKGluc2VjdXJlQ29udGVudERldGVj
dGVkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBpbnNlY3VyZUNv
bnRlbnREZXRlY3RlZENhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdEluc2Vj
dXJlQ29udGVudEV2ZW50IGV2ZW50LCBJbnNlY3VyZUNvbnRlbnRUZXN0KiB0ZXN0KQorICAgIHsK
KyAgICAgICAgZ19hc3NlcnQod2ViVmlldyA9PSB0ZXN0LT5tX3dlYlZpZXcpOworCisgICAgICAg
IGlmIChldmVudCA9PSBXRUJLSVRfSU5TRUNVUkVfQ09OVEVOVF9SVU4pCisgICAgICAgICAgICB0
ZXN0LT5tX2luc2VjdXJlQ29udGVudFJ1biA9IHRydWU7CisKKyAgICAgICAgaWYgKGV2ZW50ID09
IFdFQktJVF9JTlNFQ1VSRV9DT05URU5UX0RJU1BMQVlFRCkKKyAgICAgICAgICAgIHRlc3QtPm1f
aW5zZWN1cmVDb250ZW50RGlzcGxheWVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIG1faW5z
ZWN1cmVDb250ZW50UnVuOworICAgIGJvb2wgbV9pbnNlY3VyZUNvbnRlbnREaXNwbGF5ZWQ7Cit9
OworCitzdGF0aWMgdm9pZCB0ZXN0SW5zZWN1cmVDb250ZW50KEluc2VjdXJlQ29udGVudFRlc3Qq
IHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZFVSSShrSHR0cHNTZXJ2ZXIt
PmdldFVSSUZvclBhdGgoIi9pbnNlY3VyZS1jb250ZW50LyIpLmRhdGEoKSk7CisgICAgdGVzdC0+
d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX2luc2VjdXJl
Q29udGVudFJ1bik7CisgICAgZ19hc3NlcnQodGVzdC0+bV9pbnNlY3VyZUNvbnRlbnREaXNwbGF5
ZWQpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0VExTRXJyb3JzUG9saWN5KFNTTFRlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIpCit7CisgICAgV2ViS2l0V2ViQ29udGV4dCogY29udGV4dCA9IHdlYmtp
dF93ZWJfdmlld19nZXRfY29udGV4dCh0ZXN0LT5tX3dlYlZpZXcpOworICAgIC8vIFRMUyBlcnJv
cnMgYXJlIGlnbm9yZWQgYnkgZGVmYXVsdC4KKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2NvbnRl
eHRfZ2V0X3Rsc19lcnJvcnNfcG9saWN5KGNvbnRleHQpID09IFdFQktJVF9UTFNfRVJST1JTX1BP
TElDWV9JR05PUkUpOworICAgIHRlc3QtPmxvYWRVUkkoa0h0dHBzU2VydmVyLT5nZXRVUklGb3JQ
YXRoKCIvIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAg
ICBnX2Fzc2VydCghdGVzdC0+bV9sb2FkRmFpbGVkKTsKKworICAgIHdlYmtpdF93ZWJfY29udGV4
dF9zZXRfdGxzX2Vycm9yc19wb2xpY3koY29udGV4dCwgV0VCS0lUX1RMU19FUlJPUlNfUE9MSUNZ
X0ZBSUwpOworICAgIHRlc3QtPmxvYWRVUkkoa0h0dHBzU2VydmVyLT5nZXRVUklGb3JQYXRoKCIv
IikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fz
c2VydCh0ZXN0LT5tX2xvYWRGYWlsZWQpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fbG9hZEV2ZW50
cy5jb250YWlucyhMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRGYWlsZWQpKTsKKyAg
ICBnX2Fzc2VydCghdGVzdC0+bV9sb2FkRXZlbnRzLmNvbnRhaW5zKExvYWRUcmFja2luZ1Rlc3Q6
OkxvYWRDb21taXR0ZWQpKTsKK30KKworY2xhc3MgVExTRXJyb3JzVGVzdDogcHVibGljIFNTTFRl
c3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoVExTRXJyb3JzVGVzdCk7
CisKKyAgICBUTFNFcnJvcnNUZXN0KCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
bV93ZWJWaWV3LCAibG9hZC1mYWlsZWQtd2l0aC10bHMtZXJyb3JzIiwgR19DQUxMQkFDSyhydW5M
b2FkRmFpbGVkV2l0aFRMU0Vycm9yc0NhbGxiYWNrKSwgdGhpcyk7CisgICAgfQorCisgICAgflRM
U0Vycm9yc1Rlc3QoKQorICAgIHsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVj
dF9tYXRjaGVkKG1fd2ViVmlldywgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhp
cyk7CisgICAgICAgIGlmIChtX2NlcnRpZmljYXRlSW5mbykKKyAgICAgICAgICAgIHdlYmtpdF9j
ZXJ0aWZpY2F0ZV9pbmZvX2ZyZWUobV9jZXJ0aWZpY2F0ZUluZm8pOworICAgIH0KKworICAgIHN0
YXRpYyBnYm9vbGVhbiBydW5Mb2FkRmFpbGVkV2l0aFRMU0Vycm9yc0NhbGxiYWNrKFdlYktpdFdl
YlZpZXcqLCBXZWJLaXRDZXJ0aWZpY2F0ZUluZm8qIGluZm8sIGNvbnN0IGNoYXIqIGhvc3QsIFRM
U0Vycm9yc1Rlc3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT5ydW5Mb2FkRmFpbGVkV2l0
aFRMU0Vycm9ycyhpbmZvLCBob3N0KTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisg
ICAgdm9pZCBydW5Mb2FkRmFpbGVkV2l0aFRMU0Vycm9ycyhXZWJLaXRDZXJ0aWZpY2F0ZUluZm8q
IGluZm8sIGNvbnN0IGNoYXIqIGhvc3QpCisgICAgeworICAgICAgICBpZiAobV9jZXJ0aWZpY2F0
ZUluZm8pCisgICAgICAgICAgICB3ZWJraXRfY2VydGlmaWNhdGVfaW5mb19mcmVlKG1fY2VydGlm
aWNhdGVJbmZvKTsKKyAgICAgICAgbV9jZXJ0aWZpY2F0ZUluZm8gPSB3ZWJraXRfY2VydGlmaWNh
dGVfaW5mb19jb3B5KGluZm8pOworICAgICAgICBtX2hvc3Quc2V0KGdfc3RyZHVwKGhvc3QpKTsK
KyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICB2b2lk
IHdhaXRVbnRpbExvYWRGYWlsZWRXaXRoVExTRXJyb3JzKCkKKyAgICB7CisgICAgICAgIGdfbWFp
bl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBXZWJLaXRDZXJ0aWZpY2F0ZUlu
Zm8qIGNlcnRpZmljYXRlSW5mbygpCisgICAgeworICAgICAgICByZXR1cm4gbV9jZXJ0aWZpY2F0
ZUluZm87CisgICAgfQorCisgICAgY29uc3QgY2hhciogaG9zdCgpCisgICAgeworICAgICAgICBy
ZXR1cm4gbV9ob3N0LmdldCgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBXZWJLaXRDZXJ0aWZp
Y2F0ZUluZm8qIG1fY2VydGlmaWNhdGVJbmZvOworICAgIEdPd25QdHI8Y2hhcj4gbV9ob3N0Owor
fTsKKworc3RhdGljIHZvaWQgdGVzdExvYWRGYWlsZWRXaXRoVExTRXJyb3JzKFRMU0Vycm9yc1Rl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgV2ViS2l0V2ViQ29udGV4dCogY29udGV4
dCA9IHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dCh0ZXN0LT5tX3dlYlZpZXcpOworICAgIHdl
YmtpdF93ZWJfY29udGV4dF9zZXRfdGxzX2Vycm9yc19wb2xpY3koY29udGV4dCwgV0VCS0lUX1RM
U19FUlJPUlNfUE9MSUNZX0ZBSUwpOworCisgICAgLy8gVGhlIGxvYWQtZmFpbGVkLXdpdGgtdGxz
LWVycm9ycyBzaWduYWwgc2hvdWxkIGJlIGVtaXR0ZWQgd2hlbiB0aGVyZSBpcyBhIFRMUyBmYWls
dXJlLgorICAgIHRlc3QtPmxvYWRVUkkoa0h0dHBzU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvdGVz
dC10bHMvIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmFpbGVkV2l0aFRMU0Vy
cm9ycygpOworICAgIC8vIFRlc3QgdGhlIFdlYktpdENlcnRpZmljYXRlSW5mbyBBUEkuCisgICAg
Z19hc3NlcnQoR19JU19UTFNfQ0VSVElGSUNBVEUod2Via2l0X2NlcnRpZmljYXRlX2luZm9fZ2V0
X3Rsc19jZXJ0aWZpY2F0ZSh0ZXN0LT5jZXJ0aWZpY2F0ZUluZm8oKSkpKTsKKyAgICBnX2Fzc2Vy
dF9jbXB1aW50KHdlYmtpdF9jZXJ0aWZpY2F0ZV9pbmZvX2dldF90bHNfZXJyb3JzKHRlc3QtPmNl
cnRpZmljYXRlSW5mbygpKSwgPT0sIEdfVExTX0NFUlRJRklDQVRFX1VOS05PV05fQ0EpOworICAg
IGdfYXNzZXJ0X2NtcHN0cih0ZXN0LT5ob3N0KCksID09LCBzb3VwX3VyaV9nZXRfaG9zdChrSHR0
cHNTZXJ2ZXItPmJhc2VVUkkoKSkpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRF
dmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNr
aW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKKworICAgIC8vIFRlc3QgYWxsb3dpbmcgYW4gZXhjZXB0
aW9uIGZvciB0aGlzIGNlcnRpZmljYXRlIG9uIHRoaXMgaG9zdC4KKyAgICB3ZWJraXRfd2ViX2Nv
bnRleHRfYWxsb3dfdGxzX2NlcnRpZmljYXRlX2Zvcl9ob3N0KGNvbnRleHQsIHRlc3QtPmNlcnRp
ZmljYXRlSW5mbygpLCB0ZXN0LT5ob3N0KCkpOworICAgIC8vIFRoZSBwYWdlIHNob3VsZCBub3cg
bG9hZCB3aXRob3V0IGVycm9ycy4KKyAgICB0ZXN0LT5sb2FkVVJJKGtIdHRwc1NlcnZlci0+Z2V0
VVJJRm9yUGF0aCgiL3Rlc3QtdGxzLyIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9h
ZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzBd
LCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7CisgICAgZ19h
c3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6
OkxvYWRDb21taXR0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNb
Ml0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3RpdGxlKHRlc3QtPm1fd2ViVmlldyksID09LCBUTFNF
eHBlY3RlZFN1Y2Nlc3NUaXRsZSk7Cit9CisKKworc3RhdGljIHZvaWQgaHR0cHNTZXJ2ZXJDYWxs
YmFjayhTb3VwU2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBjaGFy
KiBwYXRoLCBHSGFzaFRhYmxlKiwgU291cENsaWVudENvbnRleHQqLCBncG9pbnRlcikKK3sKKyAg
ICBpZiAobWVzc2FnZS0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgeworICAgICAgICBzb3Vw
X21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIv
IikpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFU
VVNfT0spOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9u
c2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBpbmRleEhUTUwsIHN0cmxlbihpbmRleEhUTUwp
KTsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2Vf
Ym9keSk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2luc2VjdXJlLWNvbnRl
bnQvIikpIHsKKyAgICAgICAgR093blB0cjxjaGFyPiByZXNwb25zZUhUTUwoZ19zdHJkdXBfcHJp
bnRmKGluc2VjdXJlQ29udGVudEhUTUwsIGtIdHRwU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvdGVz
dC1zY3JpcHQiKS5kYXRhKCksIGtIdHRwU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvdGVzdC1pbWFn
ZSIpLmRhdGEoKSkpOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+
cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfQ09QWSwgcmVzcG9uc2VIVE1MLmdldCgpLCBzdHJs
ZW4ocmVzcG9uc2VIVE1MLmdldCgpKSk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVz
KG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfY29t
cGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVh
bChwYXRoLCAiL3Rlc3QtdGxzLyIpKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVz
KG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBw
ZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgVExTU3VjY2Vz
c0hUTUxTdHJpbmcsIHN0cmxlbihUTFNTdWNjZXNzSFRNTFN0cmluZykpOworICAgICAgICBzb3Vw
X21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKKyAgICB9IGVs
c2UKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNf
Tk9UX0ZPVU5EKTsKK30KKworc3RhdGljIHZvaWQgaHR0cFNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2
ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNo
VGFibGUqLCBTb3VwQ2xpZW50Q29udGV4dCosIGdwb2ludGVyKQoreworICAgIGlmIChtZXNzYWdl
LT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRf
c3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi90ZXN0LXNjcmlwdCIp
KSB7CisgICAgICAgIEdPd25QdHI8Y2hhcj4gcGF0aFRvRmlsZShnX2J1aWxkX2ZpbGVuYW1lKFRl
c3Q6OmdldFJlc291cmNlc0RpcigpLmRhdGEoKSwgImxpbmstdGl0bGUuanMiLCBOVUxMKSk7Cisg
ICAgICAgIGNoYXIqIGNvbnRlbnRzOworICAgICAgICBnc2l6ZSBsZW5ndGg7CisgICAgICAgIGdf
ZmlsZV9nZXRfY29udGVudHMocGF0aFRvRmlsZS5nZXQoKSwgJmNvbnRlbnRzLCAmbGVuZ3RoLCAw
KTsKKworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2Vf
Ym9keSwgU09VUF9NRU1PUllfVEFLRSwgY29udGVudHMsIGxlbmd0aCk7CisgICAgICAgIHNvdXBf
bWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKKyAgICAgICAgc291
cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7CisgICAgfSBl
bHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3Rlc3QtaW1hZ2UiKSkgeworICAgICAgICBHT3du
UHRyPGNoYXI+IHBhdGhUb0ZpbGUoZ19idWlsZF9maWxlbmFtZShUZXN0OjpnZXRXZWJLaXQxVGVz
dFJlc291Y2VzRGlyKCkuZGF0YSgpLCAiYmxhbmsuaWNvIiwgTlVMTCkpOworICAgICAgICBjaGFy
KiBjb250ZW50czsKKyAgICAgICAgZ3NpemUgbGVuZ3RoOworICAgICAgICBnX2ZpbGVfZ2V0X2Nv
bnRlbnRzKHBhdGhUb0ZpbGUuZ2V0KCksICZjb250ZW50cywgJmxlbmd0aCwgMCk7CisKKyAgICAg
ICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBf
TUVNT1JZX1RBS0UsIGNvbnRlbnRzLCBsZW5ndGgpOworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0
X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9i
b2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOworICAgIH0gZWxzZQorICAgICAg
ICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfRk9VTkQp
OworfQorCit2b2lkIGJlZm9yZUFsbCgpCit7CisgICAga0h0dHBzU2VydmVyID0gbmV3IFdlYktp
dFRlc3RTZXJ2ZXIoV2ViS2l0VGVzdFNlcnZlcjo6U2VydmVySFRUUFMpOworICAgIGtIdHRwc1Nl
cnZlci0+cnVuKGh0dHBzU2VydmVyQ2FsbGJhY2spOworCisgICAga0h0dHBTZXJ2ZXIgPSBuZXcg
V2ViS2l0VGVzdFNlcnZlcihXZWJLaXRUZXN0U2VydmVyOjpTZXJ2ZXJIVFRQKTsKKyAgICBrSHR0
cFNlcnZlci0+cnVuKGh0dHBTZXJ2ZXJDYWxsYmFjayk7CisKKyAgICBTU0xUZXN0OjphZGQoIldl
YktpdFdlYlZpZXciLCAic3NsIiwgdGVzdFNTTCk7CisgICAgSW5zZWN1cmVDb250ZW50VGVzdDo6
YWRkKCJXZWJLaXRXZWJWaWV3IiwgImluc2VjdXJlLWNvbnRlbnQiLCB0ZXN0SW5zZWN1cmVDb250
ZW50KTsKKyAgICAvLyBJbiB0aGlzIGNhc2UgdGhlIG9yZGVyIG9mIHRoZSB0ZXN0cyBkb2VzIG1h
dHRlciBiZWNhdXNlIHRscy1lcnJvcnMtcG9saWN5IHRlc3RzIHRoZSBkZWZhdWx0IHBvbGljeSwK
KyAgICAvLyBhbmQgZXhwZWN0cyB0aGF0IG5vIGV4Y2VwdGlvbiB3aWxsIGhhdmUgYmVlbiBhZGRl
ZCBmb3IgdGhpcyBjZXJ0aWZpY2F0ZSBhbmQgaG9zdCBwYWlyIGFzIGlzCisgICAgLy8gZG9uZSBp
biB0aGUgdGxzLXBlcm1pc3Npb24tcmVxdWVzdCB0ZXN0LgorICAgIFNTTFRlc3Q6OmFkZCgiV2Vi
S2l0V2ViVmlldyIsICJ0bHMtZXJyb3JzLXBvbGljeSIsIHRlc3RUTFNFcnJvcnNQb2xpY3kpOwor
ICAgIFRMU0Vycm9yc1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJsb2FkLWZhaWxlZC13aXRo
LXRscy1lcnJvcnMiLCB0ZXN0TG9hZEZhaWxlZFdpdGhUTFNFcnJvcnMpOworfQorCit2b2lkIGFm
dGVyQWxsKCkKK3sKKyAgICBkZWxldGUga0h0dHBzU2VydmVyOworICAgIGRlbGV0ZSBrSHR0cFNl
cnZlcjsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0
ay9UZXN0VUlDbGllbnQuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3Rr
L1Rlc3RVSUNsaWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMz
MGQ2ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Mkd0ay9UZXN0VUlDbGllbnQuY3BwCkBAIC0wLDAgKzEsNjc5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2Vi
Vmlld1Rlc3QuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9nb2Jq
ZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKK3N0YXRp
YyBjb25zdCBjaGFyKiBrQWxlcnREaWFsb2dNZXNzYWdlID0gIldlYktpdEdUSysgYWxlcnQgZGlh
bG9nIG1lc3NhZ2UiOworc3RhdGljIGNvbnN0IGNoYXIqIGtDb25maXJtRGlhbG9nTWVzc2FnZSA9
ICJXZWJLaXRHVEsrIGNvbmZpcm0gZGlhbG9nIG1lc3NhZ2UiOworc3RhdGljIGNvbnN0IGNoYXIq
IGtQcm9tcHREaWFsb2dNZXNzYWdlID0gIldlYktpdEdUSysgcHJvbXB0IGRpYWxvZyBtZXNzYWdl
IjsKK3N0YXRpYyBjb25zdCBjaGFyKiBrUHJvbXB0RGlhbG9nUmV0dXJuZWRUZXh0ID0gIldlYktp
dEdUSysgcHJvbXB0IGRpYWxvZyByZXR1cm5lZCB0ZXh0IjsKKworY2xhc3MgVUlDbGllbnRUZXN0
OiBwdWJsaWMgV2ViVmlld1Rlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRV
UkUoVUlDbGllbnRUZXN0KTsKKworICAgIGVudW0gV2ViVmlld0V2ZW50cyB7CisgICAgICAgIENy
ZWF0ZSwKKyAgICAgICAgUmVhZHlUb1Nob3csCisgICAgICAgIFJ1bkFzTW9kYWwsCisgICAgICAg
IENsb3NlCisgICAgfTsKKworICAgIGNsYXNzIFdpbmRvd1Byb3BlcnRpZXMgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgV2luZG93UHJvcGVydGllcygpCisgICAgICAgICAgICA6IG1faXNOdWxsKHRy
dWUpCisgICAgICAgICAgICAsIG1fdG9vbGJhclZpc2libGUodHJ1ZSkKKyAgICAgICAgICAgICwg
bV9zdGF0dXNiYXJWaXNpYmxlKHRydWUpCisgICAgICAgICAgICAsIG1fc2Nyb2xsYmFyc1Zpc2li
bGUodHJ1ZSkKKyAgICAgICAgICAgICwgbV9tZW51YmFyVmlzaWJsZSh0cnVlKQorICAgICAgICAg
ICAgLCBtX2xvY2F0aW9uYmFyVmlzaWJsZSh0cnVlKQorICAgICAgICAgICAgLCBtX3Jlc2l6YWJs
ZSh0cnVlKQorICAgICAgICAgICAgLCBtX2Z1bGxzY3JlZW4oZmFsc2UpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1lbXNldCgmbV9nZW9tZXRyeSwgMCwgc2l6ZW9mKEdka1JlY3RhbmdsZSkpOwor
ICAgICAgICB9CisKKyAgICAgICAgV2luZG93UHJvcGVydGllcyhXZWJLaXRXaW5kb3dQcm9wZXJ0
aWVzKiB3aW5kb3dQcm9wZXJ0aWVzKQorICAgICAgICAgICAgOiBtX2lzTnVsbChmYWxzZSkKKyAg
ICAgICAgICAgICwgbV90b29sYmFyVmlzaWJsZSh3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0
X3Rvb2xiYXJfdmlzaWJsZSh3aW5kb3dQcm9wZXJ0aWVzKSkKKyAgICAgICAgICAgICwgbV9zdGF0
dXNiYXJWaXNpYmxlKHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRfc3RhdHVzYmFyX3Zpc2li
bGUod2luZG93UHJvcGVydGllcykpCisgICAgICAgICAgICAsIG1fc2Nyb2xsYmFyc1Zpc2libGUo
d2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF9zY3JvbGxiYXJzX3Zpc2libGUod2luZG93UHJv
cGVydGllcykpCisgICAgICAgICAgICAsIG1fbWVudWJhclZpc2libGUod2Via2l0X3dpbmRvd19w
cm9wZXJ0aWVzX2dldF9tZW51YmFyX3Zpc2libGUod2luZG93UHJvcGVydGllcykpCisgICAgICAg
ICAgICAsIG1fbG9jYXRpb25iYXJWaXNpYmxlKHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRf
bG9jYXRpb25iYXJfdmlzaWJsZSh3aW5kb3dQcm9wZXJ0aWVzKSkKKyAgICAgICAgICAgICwgbV9y
ZXNpemFibGUod2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF9yZXNpemFibGUod2luZG93UHJv
cGVydGllcykpCisgICAgICAgICAgICAsIG1fZnVsbHNjcmVlbih3ZWJraXRfd2luZG93X3Byb3Bl
cnRpZXNfZ2V0X2Z1bGxzY3JlZW4od2luZG93UHJvcGVydGllcykpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRfZ2VvbWV0cnkod2luZG93UHJvcGVy
dGllcywgJm1fZ2VvbWV0cnkpOworICAgICAgICB9CisKKyAgICAgICAgV2luZG93UHJvcGVydGll
cyhHZGtSZWN0YW5nbGUqIGdlb21ldHJ5LCBib29sIHRvb2xiYXJWaXNpYmxlLCBib29sIHN0YXR1
c2JhclZpc2libGUsIGJvb2wgc2Nyb2xsYmFyc1Zpc2libGUsIGJvb2wgbWVudWJhclZpc2libGUs
IGJvb2wgbG9jYXRpb25iYXJWaXNpYmxlLCBib29sIHJlc2l6YWJsZSwgYm9vbCBmdWxsc2NyZWVu
KQorICAgICAgICAgICAgOiBtX2lzTnVsbChmYWxzZSkKKyAgICAgICAgICAgICwgbV9nZW9tZXRy
eSgqZ2VvbWV0cnkpCisgICAgICAgICAgICAsIG1fdG9vbGJhclZpc2libGUodG9vbGJhclZpc2li
bGUpCisgICAgICAgICAgICAsIG1fc3RhdHVzYmFyVmlzaWJsZShzdGF0dXNiYXJWaXNpYmxlKQor
ICAgICAgICAgICAgLCBtX3Njcm9sbGJhcnNWaXNpYmxlKHNjcm9sbGJhcnNWaXNpYmxlKQorICAg
ICAgICAgICAgLCBtX21lbnViYXJWaXNpYmxlKG1lbnViYXJWaXNpYmxlKQorICAgICAgICAgICAg
LCBtX2xvY2F0aW9uYmFyVmlzaWJsZShsb2NhdGlvbmJhclZpc2libGUpCisgICAgICAgICAgICAs
IG1fcmVzaXphYmxlKHJlc2l6YWJsZSkKKyAgICAgICAgICAgICwgbV9mdWxsc2NyZWVuKGZ1bGxz
Y3JlZW4pCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgaXNOdWxsKCkgY29u
c3QgeyByZXR1cm4gbV9pc051bGw7IH0KKworICAgICAgICB2b2lkIGFzc2VydEVxdWFsKGNvbnN0
IFdpbmRvd1Byb3BlcnRpZXMmIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBn
X2Fzc2VydF9jbXBpbnQobV9nZW9tZXRyeS54LCA9PSwgb3RoZXIubV9nZW9tZXRyeS54KTsKKyAg
ICAgICAgICAgIGdfYXNzZXJ0X2NtcGludChtX2dlb21ldHJ5LnksID09LCBvdGhlci5tX2dlb21l
dHJ5LnkpOworICAgICAgICAgICAgZ19hc3NlcnRfY21waW50KG1fZ2VvbWV0cnkud2lkdGgsID09
LCBvdGhlci5tX2dlb21ldHJ5LndpZHRoKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0X2NtcGludCht
X2dlb21ldHJ5LmhlaWdodCwgPT0sIG90aGVyLm1fZ2VvbWV0cnkuaGVpZ2h0KTsKKyAgICAgICAg
ICAgIGdfYXNzZXJ0X2NtcGludChzdGF0aWNfY2FzdDxpbnQ+KG1fdG9vbGJhclZpc2libGUpLCA9
PSwgc3RhdGljX2Nhc3Q8aW50PihvdGhlci5tX3Rvb2xiYXJWaXNpYmxlKSk7CisgICAgICAgICAg
ICBnX2Fzc2VydF9jbXBpbnQoc3RhdGljX2Nhc3Q8aW50PihtX3N0YXR1c2JhclZpc2libGUpLCA9
PSwgc3RhdGljX2Nhc3Q8aW50PihvdGhlci5tX3N0YXR1c2JhclZpc2libGUpKTsKKyAgICAgICAg
ICAgIGdfYXNzZXJ0X2NtcGludChzdGF0aWNfY2FzdDxpbnQ+KG1fc2Nyb2xsYmFyc1Zpc2libGUp
LCA9PSwgc3RhdGljX2Nhc3Q8aW50PihvdGhlci5tX3Njcm9sbGJhcnNWaXNpYmxlKSk7CisgICAg
ICAgICAgICBnX2Fzc2VydF9jbXBpbnQoc3RhdGljX2Nhc3Q8aW50PihtX21lbnViYXJWaXNpYmxl
KSwgPT0sIHN0YXRpY19jYXN0PGludD4ob3RoZXIubV9tZW51YmFyVmlzaWJsZSkpOworICAgICAg
ICAgICAgZ19hc3NlcnRfY21waW50KHN0YXRpY19jYXN0PGludD4obV9sb2NhdGlvbmJhclZpc2li
bGUpLCA9PSwgc3RhdGljX2Nhc3Q8aW50PihvdGhlci5tX2xvY2F0aW9uYmFyVmlzaWJsZSkpOwor
ICAgICAgICAgICAgZ19hc3NlcnRfY21waW50KHN0YXRpY19jYXN0PGludD4obV9yZXNpemFibGUp
LCA9PSwgc3RhdGljX2Nhc3Q8aW50PihvdGhlci5tX3Jlc2l6YWJsZSkpOworICAgICAgICAgICAg
Z19hc3NlcnRfY21waW50KHN0YXRpY19jYXN0PGludD4obV9mdWxsc2NyZWVuKSwgPT0sIHN0YXRp
Y19jYXN0PGludD4ob3RoZXIubV9mdWxsc2NyZWVuKSk7CisgICAgICAgIH0KKworICAgIHByaXZh
dGU6CisgICAgICAgIGJvb2wgbV9pc051bGw7CisKKyAgICAgICAgR2RrUmVjdGFuZ2xlIG1fZ2Vv
bWV0cnk7CisKKyAgICAgICAgYm9vbCBtX3Rvb2xiYXJWaXNpYmxlOworICAgICAgICBib29sIG1f
c3RhdHVzYmFyVmlzaWJsZTsKKyAgICAgICAgYm9vbCBtX3Njcm9sbGJhcnNWaXNpYmxlOworICAg
ICAgICBib29sIG1fbWVudWJhclZpc2libGU7CisgICAgICAgIGJvb2wgbV9sb2NhdGlvbmJhclZp
c2libGU7CisKKyAgICAgICAgYm9vbCBtX3Jlc2l6YWJsZTsKKyAgICAgICAgYm9vbCBtX2Z1bGxz
Y3JlZW47CisgICAgfTsKKworICAgIHN0YXRpYyB2b2lkIHdpbmRvd1Byb3BlcnRpZXNOb3RpZnlD
YWxsYmFjayhHT2JqZWN0KiwgR1BhcmFtU3BlYyogcGFyYW1TcGVjLCBVSUNsaWVudFRlc3QqIHRl
c3QpCisgICAgeworICAgICAgICB0ZXN0LT5tX3dpbmRvd1Byb3BlcnRpZXNDaGFuZ2VkLmFkZChn
X3BhcmFtX3NwZWNfZ2V0X25hbWUocGFyYW1TcGVjKSk7CisgICAgfQorCisgICAgc3RhdGljIEd0
a1dpZGdldCogdmlld0NyZWF0ZUNhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFVJQ2xp
ZW50VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHJldHVybiB0ZXN0LT52aWV3Q3JlYXRlKHdl
YlZpZXcpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHZpZXdSZWFkeVRvU2hvd0NhbGxiYWNr
KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFVJQ2xpZW50VGVzdCogdGVzdCkKKyAgICB7CisgICAg
ICAgIHRlc3QtPnZpZXdSZWFkeVRvU2hvdyh3ZWJWaWV3KTsKKyAgICB9CisKKyAgICBzdGF0aWMg
dm9pZCB2aWV3Q2xvc2VDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBVSUNsaWVudFRl
c3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT52aWV3Q2xvc2Uod2ViVmlldyk7CisgICAg
fQorCisgICAgdm9pZCBzY3JpcHRBbGVydChXZWJLaXRTY3JpcHREaWFsb2cqIGRpYWxvZykKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAobV9zY3JpcHREaWFsb2dUeXBlKSB7CisgICAgICAgIGNhc2Ug
V0VCS0lUX1NDUklQVF9ESUFMT0dfQUxFUlQ6CisgICAgICAgICAgICBnX2Fzc2VydF9jbXBzdHIo
d2Via2l0X3NjcmlwdF9kaWFsb2dfZ2V0X21lc3NhZ2UoZGlhbG9nKSwgPT0sIGtBbGVydERpYWxv
Z01lc3NhZ2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0VCS0lUX1NDUklQ
VF9ESUFMT0dfQ09ORklSTToKKyAgICAgICAgICAgIGdfYXNzZXJ0KG1fc2NyaXB0RGlhbG9nQ29u
ZmlybWVkKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2NyaXB0X2RpYWxv
Z19nZXRfbWVzc2FnZShkaWFsb2cpLCA9PSwgImNvbmZpcm1lZCIpOworCisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBXRUJLSVRfU0NSSVBUX0RJQUxPR19QUk9NUFQ6CisgICAgICAg
ICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NjcmlwdF9kaWFsb2dfZ2V0X21lc3NhZ2UoZGlh
bG9nKSwgPT0sIGtQcm9tcHREaWFsb2dSZXR1cm5lZFRleHQpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3ApOworICAg
IH0KKworICAgIHZvaWQgc2NyaXB0Q29uZmlybShXZWJLaXRTY3JpcHREaWFsb2cqIGRpYWxvZykK
KyAgICB7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2NyaXB0X2RpYWxvZ19nZXRf
bWVzc2FnZShkaWFsb2cpLCA9PSwga0NvbmZpcm1EaWFsb2dNZXNzYWdlKTsKKyAgICAgICAgbV9z
Y3JpcHREaWFsb2dDb25maXJtZWQgPSAhbV9zY3JpcHREaWFsb2dDb25maXJtZWQ7CisgICAgICAg
IHdlYmtpdF9zY3JpcHRfZGlhbG9nX2NvbmZpcm1fc2V0X2NvbmZpcm1lZChkaWFsb2csIG1fc2Ny
aXB0RGlhbG9nQ29uZmlybWVkKTsKKyAgICB9CisKKyAgICB2b2lkIHNjcmlwdFByb21wdChXZWJL
aXRTY3JpcHREaWFsb2cqIGRpYWxvZykKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3
ZWJraXRfc2NyaXB0X2RpYWxvZ19nZXRfbWVzc2FnZShkaWFsb2cpLCA9PSwga1Byb21wdERpYWxv
Z01lc3NhZ2UpOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NjcmlwdF9kaWFsb2df
cHJvbXB0X2dldF9kZWZhdWx0X3RleHQoZGlhbG9nKSwgPT0sICJkZWZhdWx0Iik7CisgICAgICAg
IHdlYmtpdF9zY3JpcHRfZGlhbG9nX3Byb21wdF9zZXRfdGV4dChkaWFsb2csIGtQcm9tcHREaWFs
b2dSZXR1cm5lZFRleHQpOworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBzY3JpcHREaWFs
b2coV2ViS2l0V2ViVmlldyosIFdlYktpdFNjcmlwdERpYWxvZyogZGlhbG9nLCBVSUNsaWVudFRl
c3QqIHRlc3QpCisgICAgeworICAgICAgICBzd2l0Y2ggKHdlYmtpdF9zY3JpcHRfZGlhbG9nX2dl
dF9kaWFsb2dfdHlwZShkaWFsb2cpKSB7CisgICAgICAgIGNhc2UgV0VCS0lUX1NDUklQVF9ESUFM
T0dfQUxFUlQ6CisgICAgICAgICAgICB0ZXN0LT5zY3JpcHRBbGVydChkaWFsb2cpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0VCS0lUX1NDUklQVF9ESUFMT0dfQ09ORklSTToK
KyAgICAgICAgICAgIHRlc3QtPnNjcmlwdENvbmZpcm0oZGlhbG9nKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFdFQktJVF9TQ1JJUFRfRElBTE9HX1BST01QVDoKKyAgICAgICAg
ICAgIHRlc3QtPnNjcmlwdFByb21wdChkaWFsb2cpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBt
b3VzZVRhcmdldENoYW5nZWQoV2ViS2l0V2ViVmlldyosIFdlYktpdEhpdFRlc3RSZXN1bHQqIGhp
dFRlc3RSZXN1bHQsIGd1aW50IG1vZGlmaWVycywgVUlDbGllbnRUZXN0KiB0ZXN0KQorICAgIHsK
KyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX0hJVF9URVNUX1JFU1VMVChoaXRUZXN0UmVzdWx0
KSk7CisgICAgICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMo
R19PQkpFQ1QoaGl0VGVzdFJlc3VsdCkpOworCisgICAgICAgIHRlc3QtPm1fbW91c2VUYXJnZXRI
aXRUZXN0UmVzdWx0ID0gaGl0VGVzdFJlc3VsdDsKKyAgICAgICAgdGVzdC0+bV9tb3VzZVRhcmdl
dE1vZGlmaWVycyA9IG1vZGlmaWVyczsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5t
X21haW5Mb29wKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gcGVybWlzc2lvblJlcXVl
c3RlZChXZWJLaXRXZWJWaWV3KiwgV2ViS2l0UGVybWlzc2lvblJlcXVlc3QqIHJlcXVlc3QsIFVJ
Q2xpZW50VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19QRVJN
SVNTSU9OX1JFUVVFU1QocmVxdWVzdCkpOworICAgICAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0Rl
bGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHJlcXVlc3QpKTsKKworICAgICAgICBpZiAo
dGVzdC0+bV9hbGxvd1Blcm1pc3Npb25SZXF1ZXN0cykKKyAgICAgICAgICAgIHdlYmtpdF9wZXJt
aXNzaW9uX3JlcXVlc3RfYWxsb3cocmVxdWVzdCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHdlYmtpdF9wZXJtaXNzaW9uX3JlcXVlc3RfZGVueShyZXF1ZXN0KTsKKworICAgICAgICByZXR1
cm4gVFJVRTsKKyAgICB9CisKKyAgICBVSUNsaWVudFRlc3QoKQorICAgICAgICA6IG1fc2NyaXB0
RGlhbG9nVHlwZShXRUJLSVRfU0NSSVBUX0RJQUxPR19BTEVSVCkKKyAgICAgICAgLCBtX3Njcmlw
dERpYWxvZ0NvbmZpcm1lZCh0cnVlKQorICAgICAgICAsIG1fYWxsb3dQZXJtaXNzaW9uUmVxdWVz
dHMoZmFsc2UpCisgICAgICAgICwgbV9tb3VzZVRhcmdldE1vZGlmaWVycygwKQorICAgIHsKKyAg
ICAgICAgd2Via2l0X3NldHRpbmdzX3NldF9qYXZhc2NyaXB0X2Nhbl9vcGVuX3dpbmRvd3NfYXV0
b21hdGljYWxseSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKG1fd2ViVmlldyksIFRSVUUp
OworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImNyZWF0ZSIsIEdfQ0FMTEJB
Q0sodmlld0NyZWF0ZUNhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
bV93ZWJWaWV3LCAic2NyaXB0LWRpYWxvZyIsIEdfQ0FMTEJBQ0soc2NyaXB0RGlhbG9nKSwgdGhp
cyk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAibW91c2UtdGFyZ2V0LWNo
YW5nZWQiLCBHX0NBTExCQUNLKG1vdXNlVGFyZ2V0Q2hhbmdlZCksIHRoaXMpOworICAgICAgICBn
X3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgInBlcm1pc3Npb24tcmVxdWVzdCIsIEdfQ0FMTEJB
Q0socGVybWlzc2lvblJlcXVlc3RlZCksIHRoaXMpOworICAgIH0KKworICAgIH5VSUNsaWVudFRl
c3QoKQorICAgIHsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVk
KG1fd2ViVmlldywgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7CisgICAg
fQorCisgICAgdm9pZCB3YWl0VW50aWxNYWluTG9vcEZpbmlzaGVzKCkKKyAgICB7CisgICAgICAg
IGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICB2b2lkIHNldEV4cGVj
dGVkV2luZG93UHJvcGVydGllcyhjb25zdCBXaW5kb3dQcm9wZXJ0aWVzJiB3aW5kb3dQcm9wZXJ0
aWVzKQorICAgIHsKKyAgICAgICAgbV93aW5kb3dQcm9wZXJ0aWVzID0gd2luZG93UHJvcGVydGll
czsKKyAgICB9CisKKyAgICBXZWJLaXRIaXRUZXN0UmVzdWx0KiBtb3ZlTW91c2VBbmRXYWl0VW50
aWxNb3VzZVRhcmdldENoYW5nZWQoaW50IHgsIGludCB5LCB1bnNpZ25lZCBtb3VzZU1vZGlmaWVy
cyA9IDApCisgICAgeworICAgICAgICBtb3VzZU1vdmVUbyh4LCB5LCBtb3VzZU1vZGlmaWVycyk7
CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICAgICAgcmV0dXJuIG1f
bW91c2VUYXJnZXRIaXRUZXN0UmVzdWx0LmdldCgpOworICAgIH0KKworICAgIHZpcnR1YWwgR3Rr
V2lkZ2V0KiB2aWV3Q3JlYXRlKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCisgICAgeworICAgICAg
ICBnX2Fzc2VydCh3ZWJWaWV3ID09IG1fd2ViVmlldyk7CisKKyAgICAgICAgR3RrV2lkZ2V0KiBu
ZXdXZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X25ld193aXRoX2NvbnRleHQod2Via2l0X3dlYl92
aWV3X2dldF9jb250ZXh0KHdlYlZpZXcpKTsKKyAgICAgICAgZ19vYmplY3RfcmVmX3NpbmsobmV3
V2ViVmlldyk7CisKKyAgICAgICAgbV93ZWJWaWV3RXZlbnRzLmFwcGVuZChDcmVhdGUpOworCisg
ICAgICAgIFdlYktpdFdpbmRvd1Byb3BlcnRpZXMqIHdpbmRvd1Byb3BlcnRpZXMgPSB3ZWJraXRf
d2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9wZXJ0aWVzKFdFQktJVF9XRUJfVklFVyhuZXdXZWJWaWV3
KSk7CisgICAgICAgIGdfYXNzZXJ0KHdpbmRvd1Byb3BlcnRpZXMpOworICAgICAgICBhc3NlcnRP
YmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHdpbmRvd1Byb3BlcnRpZXMp
KTsKKyAgICAgICAgbV93aW5kb3dQcm9wZXJ0aWVzQ2hhbmdlZC5jbGVhcigpOworCisgICAgICAg
IGdfc2lnbmFsX2Nvbm5lY3Qod2luZG93UHJvcGVydGllcywgIm5vdGlmeSIsIEdfQ0FMTEJBQ0so
d2luZG93UHJvcGVydGllc05vdGlmeUNhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIGdfc2lnbmFs
X2Nvbm5lY3QobmV3V2ViVmlldywgInJlYWR5LXRvLXNob3ciLCBHX0NBTExCQUNLKHZpZXdSZWFk
eVRvU2hvd0NhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobmV3V2Vi
VmlldywgImNsb3NlIiwgR19DQUxMQkFDSyh2aWV3Q2xvc2VDYWxsYmFjayksIHRoaXMpOworCisg
ICAgICAgIHJldHVybiBuZXdXZWJWaWV3OworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCB2aWV3
UmVhZHlUb1Nob3coV2ViS2l0V2ViVmlldyogd2ViVmlldykKKyAgICB7CisgICAgICAgIGdfYXNz
ZXJ0KHdlYlZpZXcgIT0gbV93ZWJWaWV3KTsKKworICAgICAgICBXZWJLaXRXaW5kb3dQcm9wZXJ0
aWVzKiB3aW5kb3dQcm9wZXJ0aWVzID0gd2Via2l0X3dlYl92aWV3X2dldF93aW5kb3dfcHJvcGVy
dGllcyh3ZWJWaWV3KTsKKyAgICAgICAgZ19hc3NlcnQod2luZG93UHJvcGVydGllcyk7CisgICAg
ICAgIGlmICghbV93aW5kb3dQcm9wZXJ0aWVzLmlzTnVsbCgpKQorICAgICAgICAgICAgV2luZG93
UHJvcGVydGllcyh3aW5kb3dQcm9wZXJ0aWVzKS5hc3NlcnRFcXVhbChtX3dpbmRvd1Byb3BlcnRp
ZXMpOworCisgICAgICAgIG1fd2ViVmlld0V2ZW50cy5hcHBlbmQoUmVhZHlUb1Nob3cpOworICAg
IH0KKworICAgIHZpcnR1YWwgdm9pZCB2aWV3Q2xvc2UoV2ViS2l0V2ViVmlldyogd2ViVmlldykK
KyAgICB7CisgICAgICAgIGdfYXNzZXJ0KHdlYlZpZXcgIT0gbV93ZWJWaWV3KTsKKworICAgICAg
ICBtX3dlYlZpZXdFdmVudHMuYXBwZW5kKENsb3NlKTsKKyAgICAgICAgZ19vYmplY3RfdW5yZWYo
d2ViVmlldyk7CisKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX21haW5Mb29wKTsKKyAgICB9
CisKKyAgICBWZWN0b3I8V2ViVmlld0V2ZW50cz4gbV93ZWJWaWV3RXZlbnRzOworICAgIFdlYktp
dFNjcmlwdERpYWxvZ1R5cGUgbV9zY3JpcHREaWFsb2dUeXBlOworICAgIGJvb2wgbV9zY3JpcHRE
aWFsb2dDb25maXJtZWQ7CisgICAgYm9vbCBtX2FsbG93UGVybWlzc2lvblJlcXVlc3RzOworICAg
IFdpbmRvd1Byb3BlcnRpZXMgbV93aW5kb3dQcm9wZXJ0aWVzOworICAgIEhhc2hTZXQ8V1RGOjpT
dHJpbmc+IG1fd2luZG93UHJvcGVydGllc0NoYW5nZWQ7CisgICAgR1JlZlB0cjxXZWJLaXRIaXRU
ZXN0UmVzdWx0PiBtX21vdXNlVGFyZ2V0SGl0VGVzdFJlc3VsdDsKKyAgICB1bnNpZ25lZCBtX21v
dXNlVGFyZ2V0TW9kaWZpZXJzOworfTsKKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdDcmVhdGVS
ZWFkeUNsb3NlKFVJQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0
LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHkgb25Mb2FkPVwid2luZG93Lm9wZW4oKS5jbG9zZSgpO1wi
PjwvaHRtbD4iLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxNYWluTG9vcEZpbmlzaGVzKCk7CisK
KyAgICBWZWN0b3I8VUlDbGllbnRUZXN0OjpXZWJWaWV3RXZlbnRzPiYgZXZlbnRzID0gdGVzdC0+
bV93ZWJWaWV3RXZlbnRzOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwg
Myk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIFVJQ2xpZW50VGVzdDo6Q3Jl
YXRlKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgVUlDbGllbnRUZXN0OjpS
ZWFkeVRvU2hvdyk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIFVJQ2xpZW50
VGVzdDo6Q2xvc2UpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gY2hlY2tNaW1lVHlwZUZvckZpbHRl
cihHdGtGaWxlRmlsdGVyKiBmaWx0ZXIsIGNvbnN0IGdjaGFyKiBtaW1lVHlwZSkKK3sKKyAgICBH
dGtGaWxlRmlsdGVySW5mbyBmaWx0ZXJJbmZvOworICAgIGZpbHRlckluZm8uY29udGFpbnMgPSBH
VEtfRklMRV9GSUxURVJfTUlNRV9UWVBFOworICAgIGZpbHRlckluZm8ubWltZV90eXBlID0gbWlt
ZVR5cGU7CisgICAgcmV0dXJuIGd0a19maWxlX2ZpbHRlcl9maWx0ZXIoZmlsdGVyLCAmZmlsdGVy
SW5mbyk7Cit9CisKK2NsYXNzIE1vZGFsRGlhbG9nc1Rlc3Q6IHB1YmxpYyBVSUNsaWVudFRlc3Qg
eworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoTW9kYWxEaWFsb2dzVGVzdCk7
CisKKyAgICBzdGF0aWMgdm9pZCBkaWFsb2dSdW5Bc01vZGFsQ2FsbGJhY2soV2ViS2l0V2ViVmll
dyogd2ViVmlldywgTW9kYWxEaWFsb2dzVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIGdfYXNz
ZXJ0KHdlYlZpZXcgIT0gdGVzdC0+bV93ZWJWaWV3KTsKKyAgICAgICAgdGVzdC0+bV93ZWJWaWV3
RXZlbnRzLmFwcGVuZChSdW5Bc01vZGFsKTsKKyAgICB9CisKKyAgICBHdGtXaWRnZXQqIHZpZXdD
cmVhdGUoV2ViS2l0V2ViVmlldyogd2ViVmlldykKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KHdl
YlZpZXcgPT0gbV93ZWJWaWV3KTsKKworICAgICAgICBHdGtXaWRnZXQqIG5ld1dlYlZpZXcgPSBV
SUNsaWVudFRlc3Q6OnZpZXdDcmVhdGUod2ViVmlldyk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5l
Y3QobmV3V2ViVmlldywgInJ1bi1hcy1tb2RhbCIsIEdfQ0FMTEJBQ0soZGlhbG9nUnVuQXNNb2Rh
bENhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIHJldHVybiBuZXdXZWJWaWV3OworICAgIH0KKwor
ICAgIHZvaWQgdmlld1JlYWR5VG9TaG93KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCisgICAgewor
ICAgICAgICBnX2Fzc2VydCh3ZWJWaWV3ICE9IG1fd2ViVmlldyk7CisgICAgICAgIG1fd2ViVmll
d0V2ZW50cy5hcHBlbmQoUmVhZHlUb1Nob3cpOworICAgIH0KK307CisKK3N0YXRpYyB2b2lkIHRl
c3RXZWJWaWV3QWxsb3dNb2RhbERpYWxvZ3MoTW9kYWxEaWFsb2dzVGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKK3sKKyAgICBXZWJLaXRTZXR0aW5ncyogc2V0dGluZ3MgPSB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X3NldHRpbmdzKHRlc3QtPm1fd2ViVmlldyk7CisgICAgd2Via2l0X3NldHRpbmdzX3Nl
dF9hbGxvd19tb2RhbF9kaWFsb2dzKHNldHRpbmdzLCBUUlVFKTsKKworICAgIHRlc3QtPmxvYWRI
dG1sKCI8aHRtbD48Ym9keSBvbmxvYWQ9XCJ3aW5kb3cuc2hvd01vZGFsRGlhbG9nKCdkYXRhOnRl
eHQvaHRtbCw8aHRtbD48Ym9keS8+PHNjcmlwdD53aW5kb3cuY2xvc2UoKTs8L3NjcmlwdD48L2h0
bWw+JylcIj48L2JvZHk+PC9odG1sPiIsIDApOworICAgIHRlc3QtPndhaXRVbnRpbE1haW5Mb29w
RmluaXNoZXMoKTsKKworICAgIFZlY3RvcjxVSUNsaWVudFRlc3Q6OldlYlZpZXdFdmVudHM+JiBl
dmVudHMgPSB0ZXN0LT5tX3dlYlZpZXdFdmVudHM7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50
cy5zaXplKCksID09LCA0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgVUlD
bGllbnRUZXN0OjpDcmVhdGUpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBV
SUNsaWVudFRlc3Q6OlJlYWR5VG9TaG93KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJd
LCA9PSwgVUlDbGllbnRUZXN0OjpSdW5Bc01vZGFsKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZl
bnRzWzNdLCA9PSwgVUlDbGllbnRUZXN0OjpDbG9zZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RX
ZWJWaWV3RGlzYWxsb3dNb2RhbERpYWxvZ3MoTW9kYWxEaWFsb2dzVGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKK3sKKyAgICBXZWJLaXRTZXR0aW5ncyogc2V0dGluZ3MgPSB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X3NldHRpbmdzKHRlc3QtPm1fd2ViVmlldyk7CisgICAgd2Via2l0X3NldHRpbmdzX3Nl
dF9hbGxvd19tb2RhbF9kaWFsb2dzKHNldHRpbmdzLCBGQUxTRSk7CisKKyAgICB0ZXN0LT5sb2Fk
SHRtbCgiPGh0bWw+PGJvZHkgb25sb2FkPVwid2luZG93LnNob3dNb2RhbERpYWxvZygnZGF0YTp0
ZXh0L2h0bWwsPGh0bWw+PGJvZHkvPjxzY3JpcHQ+d2luZG93LmNsb3NlKCk7PC9zY3JpcHQ+PC9o
dG1sPicpXCI+PC9ib2R5PjwvaHRtbD4iLCAwKTsKKyAgICAvLyBXZSBuZWVkIHRvIHVzZSBhIHRp
bWVvdXQgaGVyZSBiZWNhdXNlIHRoZSB2aWV3Q2xvc2UoKSBmdW5jdGlvbgorICAgIC8vIHdvbid0
IGV2ZXIgYmUgY2FsbGVkIGFzIHRoZSBkaWFsb2cgd29uJ3QgYmUgY3JlYXRlZC4KKyAgICB0ZXN0
LT53YWl0KDEpOworCisgICAgVmVjdG9yPFVJQ2xpZW50VGVzdDo6V2ViVmlld0V2ZW50cz4mIGV2
ZW50cyA9IHRlc3QtPm1fd2ViVmlld0V2ZW50czsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRz
LnNpemUoKSwgPT0sIDApOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0phdmFTY3JpcHRE
aWFsb2dzKFVJQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBzdGF0aWMg
Y29uc3QgY2hhciogaHRtbE9uTG9hZEZvcm1hdCA9ICI8aHRtbD48Ym9keSBvbkxvYWQ9XCIlc1wi
PjwvYm9keT48L2h0bWw+IjsKKyAgICBzdGF0aWMgY29uc3QgY2hhcioganNBbGVydEZvcm1hdCA9
ICJhbGVydCgnJXMnKSI7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGpzQ29uZmlybUZvcm1hdCA9
ICJkbyB7IGNvbmZpcm1lZCA9IGNvbmZpcm0oJyVzJyk7IH0gd2hpbGUgKCFjb25maXJtZWQpOyBh
bGVydCgnY29uZmlybWVkJyk7IjsKKyAgICBzdGF0aWMgY29uc3QgY2hhcioganNQcm9tcHRGb3Jt
YXQgPSAiYWxlcnQocHJvbXB0KCclcycsICdkZWZhdWx0JykpOyI7CisKKyAgICB0ZXN0LT5tX3Nj
cmlwdERpYWxvZ1R5cGUgPSBXRUJLSVRfU0NSSVBUX0RJQUxPR19BTEVSVDsKKyAgICBHT3duUHRy
PGNoYXI+IGFsZXJ0RGlhbG9nTWVzc2FnZShnX3N0cmR1cF9wcmludGYoanNBbGVydEZvcm1hdCwg
a0FsZXJ0RGlhbG9nTWVzc2FnZSkpOworICAgIEdPd25QdHI8Y2hhcj4gYWxlcnRIVE1MKGdfc3Ry
ZHVwX3ByaW50ZihodG1sT25Mb2FkRm9ybWF0LCBhbGVydERpYWxvZ01lc3NhZ2UuZ2V0KCkpKTsK
KyAgICB0ZXN0LT5sb2FkSHRtbChhbGVydEhUTUwuZ2V0KCksIDApOworICAgIHRlc3QtPndhaXRV
bnRpbE1haW5Mb29wRmluaXNoZXMoKTsKKworICAgIHRlc3QtPm1fc2NyaXB0RGlhbG9nVHlwZSA9
IFdFQktJVF9TQ1JJUFRfRElBTE9HX0NPTkZJUk07CisgICAgR093blB0cjxjaGFyPiBjb25maXJt
RGlhbG9nTWVzc2FnZShnX3N0cmR1cF9wcmludGYoanNDb25maXJtRm9ybWF0LCBrQ29uZmlybURp
YWxvZ01lc3NhZ2UpKTsKKyAgICBHT3duUHRyPGNoYXI+IGNvbmZpcm1IVE1MKGdfc3RyZHVwX3By
aW50ZihodG1sT25Mb2FkRm9ybWF0LCBjb25maXJtRGlhbG9nTWVzc2FnZS5nZXQoKSkpOworICAg
IHRlc3QtPmxvYWRIdG1sKGNvbmZpcm1IVE1MLmdldCgpLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50
aWxNYWluTG9vcEZpbmlzaGVzKCk7CisKKyAgICB0ZXN0LT5tX3NjcmlwdERpYWxvZ1R5cGUgPSBX
RUJLSVRfU0NSSVBUX0RJQUxPR19QUk9NUFQ7CisgICAgR093blB0cjxjaGFyPiBwcm9tcHREaWFs
b2dNZXNzYWdlKGdfc3RyZHVwX3ByaW50Zihqc1Byb21wdEZvcm1hdCwga1Byb21wdERpYWxvZ01l
c3NhZ2UpKTsKKyAgICBHT3duUHRyPGNoYXI+IHByb21wdEhUTUwoZ19zdHJkdXBfcHJpbnRmKGh0
bWxPbkxvYWRGb3JtYXQsIHByb21wdERpYWxvZ01lc3NhZ2UuZ2V0KCkpKTsKKyAgICB0ZXN0LT5s
b2FkSHRtbChwcm9tcHRIVE1MLmdldCgpLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxNYWluTG9v
cEZpbmlzaGVzKCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3V2luZG93UHJvcGVydGll
cyhVSUNsaWVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgc3RhdGljIGNvbnN0
IGNoYXIqIHdpbmRvd1Byb3JwZXJ0aWVzU3RyaW5nID0gImxlZnQ9MTAwLHRvcD0xNTAsd2lkdGg9
NDAwLGhlaWdodD00MDAsbG9jYXRpb249bm8sbWVudWJhcj1ubyxzdGF0dXM9bm8sdG9vbGJhcj1u
byxzY3JvbGxiYXJzPW5vIjsKKyAgICBHZGtSZWN0YW5nbGUgZ2VvbWV0cnkgPSB7IDEwMCwgMTUw
LCA0MDAsIDQwMCB9OworICAgIHRlc3QtPnNldEV4cGVjdGVkV2luZG93UHJvcGVydGllcyhVSUNs
aWVudFRlc3Q6OldpbmRvd1Byb3BlcnRpZXMoJmdlb21ldHJ5LCBmYWxzZSwgZmFsc2UsIGZhbHNl
LCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlKSk7CisKKyAgICBHT3duUHRyPGNoYXI+IGh0bWxT
dHJpbmcoZ19zdHJkdXBfcHJpbnRmKCI8aHRtbD48Ym9keSBvbkxvYWQ9XCJ3aW5kb3cub3Blbign
JywgJycsICclcycpLmNsb3NlKCk7XCI+PC9ib2R5PjwvaHRtbD4iLCB3aW5kb3dQcm9ycGVydGll
c1N0cmluZykpOworICAgIHRlc3QtPmxvYWRIdG1sKGh0bWxTdHJpbmcuZ2V0KCksIDApOworICAg
IHRlc3QtPndhaXRVbnRpbE1haW5Mb29wRmluaXNoZXMoKTsKKworICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBwcm9wZXJ0aWVzQ2hhbmdlZFtdID0geworICAgICAgICAiZ2VvbWV0cnkiLCAibG9jYXRp
b25iYXItdmlzaWJsZSIsICJtZW51YmFyLXZpc2libGUiLCAic3RhdHVzYmFyLXZpc2libGUiLCAi
dG9vbGJhci12aXNpYmxlIiwgInNjcm9sbGJhcnMtdmlzaWJsZSIKKyAgICB9OworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgR19OX0VMRU1FTlRTKHByb3BlcnRpZXNDaGFuZ2VkKTsgKytpKQor
ICAgICAgICBnX2Fzc2VydCh0ZXN0LT5tX3dpbmRvd1Byb3BlcnRpZXNDaGFuZ2VkLmNvbnRhaW5z
KHByb3BlcnRpZXNDaGFuZ2VkW2ldKSk7CisKKyAgICBWZWN0b3I8VUlDbGllbnRUZXN0OjpXZWJW
aWV3RXZlbnRzPiYgZXZlbnRzID0gdGVzdC0+bV93ZWJWaWV3RXZlbnRzOworICAgIGdfYXNzZXJ0
X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgMyk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50
c1swXSwgPT0sIFVJQ2xpZW50VGVzdDo6Q3JlYXRlKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZl
bnRzWzFdLCA9PSwgVUlDbGllbnRUZXN0OjpSZWFkeVRvU2hvdyk7CisgICAgZ19hc3NlcnRfY21w
aW50KGV2ZW50c1syXSwgPT0sIFVJQ2xpZW50VGVzdDo6Q2xvc2UpOworfQorCitzdGF0aWMgdm9p
ZCB0ZXN0V2ViVmlld01vdXNlVGFyZ2V0KFVJQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRl
cikKK3sKKyAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoR1RLX1dJTkRP
V19UT1BMRVZFTCk7CisKKyAgICBjb25zdCBjaGFyKiBsaW5rc0hvdmVyZWRIVE1MID0KKyAgICAg
ICAgIjxodG1sPjxib2R5PiIKKyAgICAgICAgIiA8YSBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7
IGxlZnQ6MTsgdG9wOjEnIGhyZWY9J2h0dHA6Ly93d3cud2Via2l0Z3RrLm9yZycgdGl0bGU9J1dl
YktpdEdUSysgVGl0bGUnPldlYktpdEdUSysgV2Vic2l0ZTwvYT4iCisgICAgICAgICIgPGltZyBz
dHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjEwJyBzcmM9JzB4ZGVhZGJlZWYn
IHdpZHRoPTUgaGVpZ2h0PTU+PC9pbWc+IgorICAgICAgICAiIDxhIHN0eWxlPSdwb3NpdGlvbjph
YnNvbHV0ZTsgbGVmdDoxOyB0b3A6MjAnIGhyZWY9J2h0dHA6Ly93d3cud2Via2l0Z3RrLm9yZy9s
b2dvJyB0aXRsZT0nV2ViS2l0R1RLKyBMb2dvJz48aW1nIHNyYz0nMHhkZWFkYmVlZicgd2lkdGg9
NSBoZWlnaHQ9NT48L2ltZz48L2E+IgorICAgICAgICAiIDxpbnB1dCBzdHlsZT0ncG9zaXRpb246
YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjMwJyBzaXplPScxMCc+PC9pbnB1dD4iCisgICAgICAgICIg
PGRpdiBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjUwOyB3aWR0aDozMDsg
aGVpZ2h0OjMwOyBvdmVyZmxvdzpzY3JvbGwnPiZuYnNwOzwvZGl2PiIKKyAgICAgICAgIiA8dmlk
ZW8gc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRvcDoxMDAnIHdpZHRoPSczMDAn
IGhlaWdodD0nMzAwJyBjb250cm9scz0nY29udHJvbHMnIHByZWxvYWQ9J25vbmUnPjxzb3VyY2Ug
c3JjPSdtb3ZpZS5vZ2cnIHR5cGU9J3ZpZGVvL29nZycgLz48L3ZpZGVvPiIKKyAgICAgICAgIjwv
Ym9keT48L2h0bWw+IjsKKworICAgIHRlc3QtPmxvYWRIdG1sKGxpbmtzSG92ZXJlZEhUTUwsICJm
aWxlOi8vLyIpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgLy8g
TW92ZSBvdmVyIGxpbmsuCisgICAgV2ViS2l0SGl0VGVzdFJlc3VsdCogaGl0VGVzdFJlc3VsdCA9
IHRlc3QtPm1vdmVNb3VzZUFuZFdhaXRVbnRpbE1vdXNlVGFyZ2V0Q2hhbmdlZCgxLCAxKTsKKyAg
ICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluayhoaXRUZXN0
UmVzdWx0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9p
c19pbWFnZShoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9y
ZXN1bHRfY29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQoIXdl
YmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0UmVzdWx0KSk7
CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2xpbmtfdXJp
KGhpdFRlc3RSZXN1bHQpLCA9PSwgImh0dHA6Ly93d3cud2Via2l0Z3RrLm9yZy8iKTsKKyAgICBn
X2Fzc2VydF9jbXBzdHIod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfbGlua190aXRsZShoaXRU
ZXN0UmVzdWx0KSwgPT0sICJXZWJLaXRHVEsrIFRpdGxlIik7CisgICAgZ19hc3NlcnRfY21wc3Ry
KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2xpbmtfbGFiZWwoaGl0VGVzdFJlc3VsdCksID09
LCAiV2ViS2l0R1RLKyBXZWJzaXRlIik7CisgICAgZ19hc3NlcnQoIXRlc3QtPm1fbW91c2VUYXJn
ZXRNb2RpZmllcnMpOworCisgICAgLy8gTW92ZSBvdXQgb2YgdGhlIGxpbmsuCisgICAgaGl0VGVz
dFJlc3VsdCA9IHRlc3QtPm1vdmVNb3VzZUFuZFdhaXRVbnRpbE1vdXNlVGFyZ2V0Q2hhbmdlZCgw
LCAwKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xp
bmsoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0
X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRf
aGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbWVkaWEoaGl0VGVzdFJlc3VsdCkpOworICAgIGdf
YXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfZWRpdGFibGUoaGl0VGVz
dFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX21vdXNlVGFyZ2V0TW9kaWZpZXJzKTsK
KworICAgIC8vIE1vdmUgb3ZlciBpbWFnZSB3aXRoIEdES19DT05UUk9MX01BU0suCisgICAgaGl0
VGVzdFJlc3VsdCA9IHRlc3QtPm1vdmVNb3VzZUFuZFdhaXRVbnRpbE1vdXNlVGFyZ2V0Q2hhbmdl
ZCgxLCAxMCwgR0RLX0NPTlRST0xfTUFTSyk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVz
dF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCh3
ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkpOwor
ICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbWVkaWEoaGl0
VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRl
eHRfaXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0
X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfc2Nyb2xsYmFyKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBn
X2Fzc2VydF9jbXBzdHIod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfaW1hZ2VfdXJpKGhpdFRl
c3RSZXN1bHQpLCA9PSwgImZpbGU6Ly8vMHhkZWFkYmVlZiIpOworICAgIGdfYXNzZXJ0KHRlc3Qt
Pm1fbW91c2VUYXJnZXRNb2RpZmllcnMgJiBHREtfQ09OVFJPTF9NQVNLKTsKKworICAgIC8vIE1v
dmUgb3ZlciBpbWFnZSBsaW5rLgorICAgIGhpdFRlc3RSZXN1bHQgPSB0ZXN0LT5tb3ZlTW91c2VB
bmRXYWl0VW50aWxNb3VzZVRhcmdldENoYW5nZWQoMSwgMjApOworICAgIGdfYXNzZXJ0KHdlYmtp
dF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBn
X2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJl
c3VsdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNf
bWVkaWEoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVz
dWx0X2NvbnRleHRfaXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF3
ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfc2Nyb2xsYmFyKGhpdFRlc3RSZXN1bHQp
KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfbGlua191
cmkoaGl0VGVzdFJlc3VsdCksID09LCAiaHR0cDovL3d3dy53ZWJraXRndGsub3JnL2xvZ28iKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfaW1hZ2VfdXJp
KGhpdFRlc3RSZXN1bHQpLCA9PSwgImZpbGU6Ly8vMHhkZWFkYmVlZiIpOworICAgIGdfYXNzZXJ0
X2NtcHN0cih3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9saW5rX3RpdGxlKGhpdFRlc3RSZXN1
bHQpLCA9PSwgIldlYktpdEdUSysgTG9nbyIpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rl
c3RfcmVzdWx0X2dldF9saW5rX2xhYmVsKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCgh
dGVzdC0+bV9tb3VzZVRhcmdldE1vZGlmaWVycyk7CisKKyAgICAvLyBNb3ZlIG92ZXIgbWVkaWEu
CisgICAgaGl0VGVzdFJlc3VsdCA9IHRlc3QtPm1vdmVNb3VzZUFuZFdhaXRVbnRpbE1vdXNlVGFy
Z2V0Q2hhbmdlZCgxLCAxMDApOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0
X2NvbnRleHRfaXNfbGluayhoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9o
aXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19h
c3NlcnQod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1
bHQpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2Vk
aXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jl
c3VsdF9jb250ZXh0X2lzX3Njcm9sbGJhcihoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnRf
Y21wc3RyKHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X21lZGlhX3VyaShoaXRUZXN0UmVzdWx0
KSwgPT0sICJmaWxlOi8vL21vdmllLm9nZyIpOworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX21vdXNl
VGFyZ2V0TW9kaWZpZXJzKTsKKworICAgIC8vIE1vdmVyIG92ZXIgaW5wdXQuCisgICAgaGl0VGVz
dFJlc3VsdCA9IHRlc3QtPm1vdmVNb3VzZUFuZFdhaXRVbnRpbE1vdXNlVGFyZ2V0Q2hhbmdlZCg1
LCAzNSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19s
aW5rKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3Vs
dF9jb250ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0
X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBn
X2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX3Njcm9sbGJhcihoaXRU
ZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0
X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCghdGVzdC0+bV9tb3Vz
ZVRhcmdldE1vZGlmaWVycyk7CisKKyAgICAvLyBNb3ZlIG92ZXIgc2Nyb2xsYmFyLgorICAgIGhp
dFRlc3RSZXN1bHQgPSB0ZXN0LT5tb3ZlTW91c2VBbmRXYWl0VW50aWxNb3VzZVRhcmdldENoYW5n
ZWQoNSwgNzUpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRf
aXNfbGluayhoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9y
ZXN1bHRfY29udGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQoIXdl
YmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7Cisg
ICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19lZGl0YWJsZSho
aXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250
ZXh0X2lzX3Njcm9sbGJhcihoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQoIXRlc3QtPm1f
bW91c2VUYXJnZXRNb2RpZmllcnMpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1Blcm1p
c3Npb25SZXF1ZXN0cyhVSUNsaWVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAg
Ly8gU29tZSB2ZXJzaW9ucyBvZiBnZW9jbHVlIGdpdmUgYSBydW50aW1lIHdhcm5pbmcgYmVjYXVz
ZSBpdCB0cmllcworICAgIC8vIHRvIHJlZ2lzdGVyIHRoZSBlcnJvciBxdWFyayB0d2ljZS4gU2Vl
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTg1OC4KKyAgICAvLyBN
YWtlIHdhcm5pbmdzIG5vbi1mYXRhbCBmb3IgdGhpcyB0ZXN0IHRvIG1ha2UgaXQgcGFzcy4KKyAg
ICB0ZXN0LT5yZW1vdmVMb2dGYXRhbEZsYWcoR19MT0dfTEVWRUxfV0FSTklORyk7CisgICAgdGVz
dC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7CisgICAgc3RhdGljIGNvbnN0IGNo
YXIqIGdlb2xvY2F0aW9uUmVxdWVzdEhUTUwgPQorICAgICAgICAiPGh0bWw+IgorICAgICAgICAi
ICA8c2NyaXB0PiIKKyAgICAgICAgIiAgZnVuY3Rpb24gcnVuVGVzdCgpIgorICAgICAgICAiICB7
IgorICAgICAgICAiICAgIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24o
ZnVuY3Rpb24ocCkgeyBkb2N1bWVudC50aXRsZSA9IFwiT0tcIiB9LCIKKyAgICAgICAgIiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGUpIHsgZG9j
dW1lbnQudGl0bGUgPSBlLmNvZGUgfSk7IgorICAgICAgICAiICB9IgorICAgICAgICAiICA8L3Nj
cmlwdD4iCisgICAgICAgICIgIDxib2R5IG9ubG9hZD0ncnVuVGVzdCgpOyc+PC9ib2R5PiIKKyAg
ICAgICAgIjwvaHRtbD4iOworCisgICAgLy8gVGVzdCBkZW55aW5nIGEgcGVybWlzc2lvbiByZXF1
ZXN0LgorICAgIHRlc3QtPm1fYWxsb3dQZXJtaXNzaW9uUmVxdWVzdHMgPSBmYWxzZTsKKyAgICB0
ZXN0LT5sb2FkSHRtbChnZW9sb2NhdGlvblJlcXVlc3RIVE1MLCAwKTsKKyAgICB0ZXN0LT53YWl0
VW50aWxUaXRsZUNoYW5nZWQoKTsKKworICAgIC8vIEFjY29yZGluZyB0byB0aGUgR2VvbG9jYXRp
b24gQVBJIHNwZWNpZmljYXRpb24sICcxJyBpcyB0aGUKKyAgICAvLyBlcnJvciBjb2RlIHJldHVy
bmVkIGZvciB0aGUgUEVSTUlTU0lPTl9ERU5JRUQgZXJyb3IuCisgICAgLy8gaHR0cDovL2Rldi53
My5vcmcvZ2VvL2FwaS9zcGVjLXNvdXJjZS5odG1sI3Bvc2l0aW9uX2Vycm9yX2ludGVyZmFjZQor
ICAgIGNvbnN0IGdjaGFyKiByZXN1bHQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3RpdGxlKHRlc3Qt
Pm1fd2ViVmlldyk7CisgICAgZ19hc3NlcnRfY21wc3RyKHJlc3VsdCwgPT0sICIxIik7CisKKyAg
ICAvLyBUZXN0IGFsbG93aW5nIGEgcGVybWlzc2lvbiByZXF1ZXN0LgorICAgIHRlc3QtPm1fYWxs
b3dQZXJtaXNzaW9uUmVxdWVzdHMgPSB0cnVlOworICAgIHRlc3QtPmxvYWRIdG1sKGdlb2xvY2F0
aW9uUmVxdWVzdEhUTUwsIDApOworICAgIHRlc3QtPndhaXRVbnRpbFRpdGxlQ2hhbmdlZCgpOwor
CisgICAgLy8gQ2hlY2sgdGhhdCB3ZSBkaWQgbm90IGdldCB0aGUgUEVSTUlTU0lPTl9ERU5JRUQg
ZXJyb3Igbm93LgorICAgIHJlc3VsdCA9IHdlYmtpdF93ZWJfdmlld19nZXRfdGl0bGUodGVzdC0+
bV93ZWJWaWV3KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIocmVzdWx0LCAhPSwgIjEiKTsKKyAgICB0
ZXN0LT5hZGRMb2dGYXRhbEZsYWcoR19MT0dfTEVWRUxfV0FSTklORyk7Cit9CisKK2NsYXNzIEZp
bGVDaG9vc2VyVGVzdDogcHVibGljIFVJQ2xpZW50VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9H
TElCX1RFU1RfRklYVFVSRShGaWxlQ2hvb3NlclRlc3QpOworCisgICAgRmlsZUNob29zZXJUZXN0
KCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAicnVuLWZpbGUt
Y2hvb3NlciIsIEdfQ0FMTEJBQ0socnVuRmlsZUNob29zZXJDYWxsYmFjayksIHRoaXMpOworICAg
IH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBydW5GaWxlQ2hvb3NlckNhbGxiYWNrKFdlYktpdFdl
YlZpZXcqLCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QsIEZpbGVDaG9vc2VyVGVz
dCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPnJ1bkZpbGVDaG9vc2VyKHJlcXVlc3QpOwor
ICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICB2b2lkIHJ1bkZpbGVDaG9vc2VyKFdl
YktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKKyAgICB7CisgICAgICAgIGFzc2VydE9i
amVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QocmVxdWVzdCkpOworICAgICAg
ICBtX2ZpbGVDaG9vc2VyUmVxdWVzdCA9IHJlcXVlc3Q7CisgICAgICAgIGdfbWFpbl9sb29wX3F1
aXQobV9tYWluTG9vcCk7CisgICAgfQorCisgICAgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiBj
bGlja01vdXNlQnV0dG9uQW5kV2FpdEZvckZpbGVDaG9vc2VyUmVxdWVzdChpbnQgeCwgaW50IHkp
CisgICAgeworICAgICAgICBjbGlja01vdXNlQnV0dG9uKHgsIHkpOworICAgICAgICBnX21haW5f
bG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgICAgIHJldHVybiBtX2ZpbGVDaG9vc2VyUmVxdWVz
dC5nZXQoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR1JlZlB0cjxXZWJLaXRGaWxlQ2hvb3Nl
clJlcXVlc3Q+IG1fZmlsZUNob29zZXJSZXF1ZXN0OworfTsKKworc3RhdGljIHZvaWQgdGVzdFdl
YlZpZXdGaWxlQ2hvb3NlclJlcXVlc3QoRmlsZUNob29zZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2lu
dGVyKQoreworICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOworICAg
IHN0YXRpYyBjb25zdCBjaGFyKiBmaWxlQ2hvb3NlckhUTUxGb3JtYXQgPSAiPGh0bWw+PGJvZHk+
PGlucHV0IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjA7bWFyZ2luOjA7cGFk
ZGluZzowJyB0eXBlPSdmaWxlJyAlcy8+PC9ib2R5PjwvaHRtbD4iOworCisgICAgLy8gTXVsdGlw
bGUgc2VsZWN0aW9ucyBub3QgYWxsb3dlZCwgbm8gTUlNRSBmaWx0ZXJpbmcuCisgICAgR093blB0
cjxjaGFyPiBzaW1wbGVGaWxlVXBsb2FkSFRNTChnX3N0cmR1cF9wcmludGYoZmlsZUNob29zZXJI
VE1MRm9ybWF0LCAiIikpOworICAgIHRlc3QtPmxvYWRIdG1sKHNpbXBsZUZpbGVVcGxvYWRIVE1M
LmdldCgpLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBXZWJL
aXRGaWxlQ2hvb3NlclJlcXVlc3QqIGZpbGVDaG9vc2VyUmVxdWVzdCA9IHRlc3QtPmNsaWNrTW91
c2VCdXR0b25BbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0KDUsIDUpOworICAgIGdfYXNzZXJ0
KCF3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdF9tdWx0aXBsZShmaWxlQ2hv
b3NlclJlcXVlc3QpKTsKKworICAgIGNvbnN0IGdjaGFyKiBjb25zdCogbWltZVR5cGVzID0gd2Vi
a2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKGZpbGVDaG9vc2VyUmVxdWVz
dCk7CisgICAgZ19hc3NlcnQoIW1pbWVUeXBlcyk7CisgICAgR3RrRmlsZUZpbHRlciogZmlsdGVy
ID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcihmaWxl
Q2hvb3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0KCFmaWx0ZXIpOworICAgIGNvbnN0IGdjaGFy
KiBjb25zdCogc2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRf
c2VsZWN0ZWRfZmlsZXMoZmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghc2VsZWN0
ZWRGaWxlcyk7CisgICAgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNlbChmaWxlQ2hv
b3NlclJlcXVlc3QpOworCisgICAgLy8gTXVsdGlwbGUgc2VsZWN0aW9ucyBhbGxvd2VkLCBubyBN
SU1FIGZpbHRlcmluZywgc29tZSBwcmUtc2VsZWN0ZWQgZmlsZXMuCisgICAgR093blB0cjxjaGFy
PiBtdWx0aXBsZVNlbGVjdGlvbkZpbGVVcGxvYWRIVE1MKGdfc3RyZHVwX3ByaW50ZihmaWxlQ2hv
b3NlckhUTUxGb3JtYXQsICJtdWx0aXBsZSIpKTsKKyAgICB0ZXN0LT5sb2FkSHRtbChtdWx0aXBs
ZVNlbGVjdGlvbkZpbGVVcGxvYWRIVE1MLmdldCgpLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxM
b2FkRmluaXNoZWQoKTsKKyAgICBmaWxlQ2hvb3NlclJlcXVlc3QgPSB0ZXN0LT5jbGlja01vdXNl
QnV0dG9uQW5kV2FpdEZvckZpbGVDaG9vc2VyUmVxdWVzdCg1LCA1KTsKKyAgICBnX2Fzc2VydCh3
ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdF9tdWx0aXBsZShmaWxlQ2hvb3Nl
clJlcXVlc3QpKTsKKworICAgIG1pbWVUeXBlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVz
dF9nZXRfbWltZV90eXBlcyhmaWxlQ2hvb3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0KCFtaW1l
VHlwZXMpOworICAgIGZpbHRlciA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWlt
ZV90eXBlc19maWx0ZXIoZmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghZmlsdGVy
KTsKKyAgICBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9z
ZWxlY3RlZF9maWxlcyhmaWxlQ2hvb3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0KCFzZWxlY3Rl
ZEZpbGVzKTsKKworICAgIC8vIFNlbGVjdCBzb21lIGZpbGVzLgorICAgIGNvbnN0IGdjaGFyKiBm
aWxlc1RvU2VsZWN0WzRdID0geyAiL2ZvbyIsICIvZm9vL2JhciIsICIvZm9vL2Jhci9iYXoiLCAw
IH07CisgICAgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3NlbGVjdF9maWxlcyhmaWxlQ2hv
b3NlclJlcXVlc3QsIGZpbGVzVG9TZWxlY3QpOworCisgICAgLy8gQ2hlY2sgdGhlIGZpbGVzIHRo
YXQgaGF2ZSBiZWVuIGp1c3Qgc2VsZWN0ZWQuCisgICAgc2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9m
aWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMoZmlsZUNob29zZXJSZXF1ZXN0
KTsKKyAgICBnX2Fzc2VydChzZWxlY3RlZEZpbGVzKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2Vs
ZWN0ZWRGaWxlc1swXSwgPT0sICIvZm9vIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVk
RmlsZXNbMV0sID09LCAiL2Zvby9iYXIiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRG
aWxlc1syXSwgPT0sICIvZm9vL2Jhci9iYXoiKTsKKyAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxl
c1szXSk7CisKKyAgICAvLyBQZXJmb3JtIGFub3RoZXIgcmVxdWVzdCB0byBjaGVjayBpZiB0aGUg
bGlzdCBvZiBmaWxlcyBzZWxlY3RlZAorICAgIC8vIGluIHRoZSBwcmV2aW91cyBzdGVwIGFwcGVh
cnMgbm93IGFzIHBhcnQgb2YgdGhlIG5ldyByZXF1ZXN0LgorICAgIGZpbGVDaG9vc2VyUmVxdWVz
dCA9IHRlc3QtPmNsaWNrTW91c2VCdXR0b25BbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0KDUs
IDUpOworICAgIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0
X3NlbGVjdGVkX2ZpbGVzKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQoc2VsZWN0
ZWRGaWxlcyk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMF0sID09LCAiL2Zv
byIpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzFdLCA9PSwgIi9mb28vYmFy
Iik7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMl0sID09LCAiL2Zvby9iYXIv
YmF6Iik7CisgICAgZ19hc3NlcnQoIXNlbGVjdGVkRmlsZXNbM10pOworICAgIHdlYmtpdF9maWxl
X2Nob29zZXJfcmVxdWVzdF9jYW5jZWwoZmlsZUNob29zZXJSZXF1ZXN0KTsKKworICAgIC8vIE11
bHRpcGxlIHNlbGVjdGlvbnMgbm90IGFsbG93ZWQsIG9ubHkgYWNjZXB0IGltYWdlcywgYXVkaW8g
YW5kIHZpZGVvIGZpbGVzLi4KKyAgICBHT3duUHRyPGNoYXI+IG1pbWVGaWx0ZXJlZEZpbGVVcGxv
YWRIVE1MKGdfc3RyZHVwX3ByaW50ZihmaWxlQ2hvb3NlckhUTUxGb3JtYXQsICJhY2NlcHQ9J2F1
ZGlvLyosdmlkZW8vKixpbWFnZS8qJyIpKTsKKyAgICB0ZXN0LT5sb2FkSHRtbChtaW1lRmlsdGVy
ZWRGaWxlVXBsb2FkSFRNTC5nZXQoKSwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlz
aGVkKCk7CisgICAgZmlsZUNob29zZXJSZXF1ZXN0ID0gdGVzdC0+Y2xpY2tNb3VzZUJ1dHRvbkFu
ZFdhaXRGb3JGaWxlQ2hvb3NlclJlcXVlc3QoNSwgNSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9m
aWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxlKGZpbGVDaG9vc2VyUmVxdWVz
dCkpOworCisgICAgbWltZVR5cGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9t
aW1lX3R5cGVzKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQobWltZVR5cGVzKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIobWltZVR5cGVzWzBdLCA9PSwgImF1ZGlvLyoiKTsKKyAgICBn
X2Fzc2VydF9jbXBzdHIobWltZVR5cGVzWzFdLCA9PSwgInZpZGVvLyoiKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIobWltZVR5cGVzWzJdLCA9PSwgImltYWdlLyoiKTsKKyAgICBnX2Fzc2VydCghbWlt
ZVR5cGVzWzNdKTsKKworICAgIGZpbHRlciA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9n
ZXRfbWltZV90eXBlc19maWx0ZXIoZmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydChH
VEtfSVNfRklMRV9GSUxURVIoZmlsdGVyKSk7CisgICAgZ19hc3NlcnQoY2hlY2tNaW1lVHlwZUZv
ckZpbHRlcihmaWx0ZXIsICJhdWRpby8qIikpOworICAgIGdfYXNzZXJ0KGNoZWNrTWltZVR5cGVG
b3JGaWx0ZXIoZmlsdGVyLCAidmlkZW8vKiIpKTsKKyAgICBnX2Fzc2VydChjaGVja01pbWVUeXBl
Rm9yRmlsdGVyKGZpbHRlciwgImltYWdlLyoiKSk7CisKKyAgICBzZWxlY3RlZEZpbGVzID0gd2Vi
a2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhmaWxlQ2hvb3NlclJl
cXVlc3QpOworICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZpbGVzKTsKKyAgICB3ZWJraXRfZmlsZV9j
aG9vc2VyX3JlcXVlc3RfY2FuY2VsKGZpbGVDaG9vc2VyUmVxdWVzdCk7Cit9CisKK3ZvaWQgYmVm
b3JlQWxsKCkKK3sKKyAgICBVSUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJjcmVh
dGUtcmVhZHktY2xvc2UiLCB0ZXN0V2ViVmlld0NyZWF0ZVJlYWR5Q2xvc2UpOworICAgIE1vZGFs
RGlhbG9nc1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJhbGxvdy1tb2RhbC1kaWFsb2dzIiwg
dGVzdFdlYlZpZXdBbGxvd01vZGFsRGlhbG9ncyk7CisgICAgTW9kYWxEaWFsb2dzVGVzdDo6YWRk
KCJXZWJLaXRXZWJWaWV3IiwgImRpc2FsbG93LW1vZGFsLWRpYWxvZ3MiLCB0ZXN0V2ViVmlld0Rp
c2FsbG93TW9kYWxEaWFsb2dzKTsKKyAgICBVSUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmll
dyIsICJqYXZhc2NyaXB0LWRpYWxvZ3MiLCB0ZXN0V2ViVmlld0phdmFTY3JpcHREaWFsb2dzKTsK
KyAgICBVSUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJ3aW5kb3ctcHJvcGVydGll
cyIsIHRlc3RXZWJWaWV3V2luZG93UHJvcGVydGllcyk7CisgICAgVUlDbGllbnRUZXN0OjphZGQo
IldlYktpdFdlYlZpZXciLCAibW91c2UtdGFyZ2V0IiwgdGVzdFdlYlZpZXdNb3VzZVRhcmdldCk7
CisgICAgVUlDbGllbnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAicGVybWlzc2lvbi1yZXF1
ZXN0cyIsIHRlc3RXZWJWaWV3UGVybWlzc2lvblJlcXVlc3RzKTsKKyAgICBGaWxlQ2hvb3NlclRl
c3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJmaWxlLWNob29zZXItcmVxdWVzdCIsIHRlc3RXZWJW
aWV3RmlsZUNob29zZXJSZXF1ZXN0KTsKK30KKwordm9pZCBhZnRlckFsbCgpCit7Cit9CmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYkV4dGVu
c2lvbnMuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJF
eHRlbnNpb25zLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWNiN2Fh
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3Rr
L1Rlc3RXZWJFeHRlbnNpb25zLmNwcApAQCAtMCwwICsxLDE5NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAi
V2ViS2l0VGVzdEJ1cy5oIgorI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCisjaW5jbHVkZSA8d3Rm
L2dvYmplY3QvR1JlZlB0ci5oPgorCitzdGF0aWMgV2ViS2l0VGVzdEJ1cyogYnVzOworCitzdGF0
aWMgdm9pZCB0ZXN0V2ViRXh0ZW5zaW9uR2V0VGl0bGUoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25z
dHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxoZWFkPjx0aXRsZT5XZWJL
aXRHVEsrIFdlYiBFeHRlbnNpb25zIFRlc3Q8L3RpdGxlPjwvaGVhZD48Ym9keT48L2JvZHk+PC9o
dG1sPiIsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgR1Jl
ZlB0cjxHREJ1c1Byb3h5PiBwcm94eSA9IGFkb3B0R1JlZihidXMtPmNyZWF0ZVByb3h5KCJvcmcu
d2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwKKyAgICAgICAgIi9vcmcvd2Via2l0L2d0ay9X
ZWJFeHRlbnNpb25UZXN0IiAsICJvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwgdGVz
dC0+bV9tYWluTG9vcCkpOworICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHJlc3VsdCA9IGFkb3B0R1Jl
ZihnX2RidXNfcHJveHlfY2FsbF9zeW5jKAorICAgICAgICBwcm94eS5nZXQoKSwKKyAgICAgICAg
IkdldFRpdGxlIiwKKyAgICAgICAgZ192YXJpYW50X25ldygiKHQpIiwgd2Via2l0X3dlYl92aWV3
X2dldF9wYWdlX2lkKHRlc3QtPm1fd2ViVmlldykpLAorICAgICAgICBHX0RCVVNfQ0FMTF9GTEFH
U19OT05FLAorICAgICAgICAtMSwgMCwgMCkpOworICAgIGdfYXNzZXJ0KHJlc3VsdCk7CisKKyAg
ICBjb25zdCBjaGFyKiB0aXRsZTsKKyAgICBnX3ZhcmlhbnRfZ2V0KHJlc3VsdC5nZXQoKSwgIigm
cykiLCAmdGl0bGUpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0aXRsZSwgPT0sICJXZWJLaXRHVEsr
IFdlYiBFeHRlbnNpb25zIFRlc3QiKTsKK30KKworc3RhdGljIHZvaWQgZG9jdW1lbnRMb2FkZWRD
YWxsYmFjayhHREJ1c0Nvbm5lY3Rpb24qLCBjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIGNvbnN0
IGNoYXIqLCBjb25zdCBjaGFyKiwgR1ZhcmlhbnQqLCBXZWJWaWV3VGVzdCogdGVzdCkKK3sKKyAg
ICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworfQorCitzdGF0aWMgdm9pZCB0
ZXN0RG9jdW1lbnRMb2FkZWRTaWduYWwoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIp
Cit7CisgICAgR1JlZlB0cjxHREJ1c1Byb3h5PiBwcm94eSA9IGFkb3B0R1JlZihidXMtPmNyZWF0
ZVByb3h5KCJvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwKKyAgICAgICAgIi9vcmcv
d2Via2l0L2d0ay9XZWJFeHRlbnNpb25UZXN0IiwgIm9yZy53ZWJraXQuZ3RrLldlYkV4dGVuc2lv
blRlc3QiLCB0ZXN0LT5tX21haW5Mb29wKSk7CisgICAgR0RCdXNDb25uZWN0aW9uKiBjb25uZWN0
aW9uID0gZ19kYnVzX3Byb3h5X2dldF9jb25uZWN0aW9uKHByb3h5LmdldCgpKTsKKyAgICBndWlu
dCBpZCA9IGdfZGJ1c19jb25uZWN0aW9uX3NpZ25hbF9zdWJzY3JpYmUoY29ubmVjdGlvbiwKKyAg
ICAgICAgMCwKKyAgICAgICAgIm9yZy53ZWJraXQuZ3RrLldlYkV4dGVuc2lvblRlc3QiLAorICAg
ICAgICAiRG9jdW1lbnRMb2FkZWQiLAorICAgICAgICAiL29yZy93ZWJraXQvZ3RrL1dlYkV4dGVu
c2lvblRlc3QiLAorICAgICAgICAwLAorICAgICAgICBHX0RCVVNfU0lHTkFMX0ZMQUdTX05PTkUs
CisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0RCdXNTaWduYWxDYWxsYmFjaz4oZG9jdW1lbnRM
b2FkZWRDYWxsYmFjayksCisgICAgICAgIHRlc3QsCisgICAgICAgIDApOworICAgIGdfYXNzZXJ0
KGlkKTsKKworICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48aGVhZD48dGl0bGU+V2ViS2l0R1RL
KyBXZWIgRXh0ZW5zaW9ucyBUZXN0PC90aXRsZT48L2hlYWQ+PGJvZHk+PC9ib2R5PjwvaHRtbD4i
LCAwKTsKKyAgICBnX21haW5fbG9vcF9ydW4odGVzdC0+bV9tYWluTG9vcCk7CisgICAgZ19kYnVz
X2Nvbm5lY3Rpb25fc2lnbmFsX3Vuc3Vic2NyaWJlKGNvbm5lY3Rpb24sIGlkKTsKK30KKworc3Rh
dGljIGdib29sZWFuIHdlYlByb2Nlc3NDcmFzaGVkQ2FsbGJhY2soV2ViS2l0V2ViVmlldyosIFdl
YlZpZXdUZXN0KiB0ZXN0KQoreworICAgIHRlc3QtPnF1aXRNYWluTG9vcCgpOworCisgICAgcmV0
dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViS2l0V2ViVmlld1Byb2Nlc3NDcmFz
aGVkKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRI
dG1sKCI8aHRtbD48L2h0bWw+IiwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVk
KCk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHRlc3QtPm1fd2ViVmlldywgIndlYi1wcm9jZXNz
LWNyYXNoZWQiLAorICAgICAgICBHX0NBTExCQUNLKHdlYlByb2Nlc3NDcmFzaGVkQ2FsbGJhY2sp
LCB0ZXN0KTsKKworICAgIEdSZWZQdHI8R0RCdXNQcm94eT4gcHJveHkgPSBhZG9wdEdSZWYoYnVz
LT5jcmVhdGVQcm94eSgib3JnLndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9uVGVzdCIsCisgICAgICAg
ICIvb3JnL3dlYmtpdC9ndGsvV2ViRXh0ZW5zaW9uVGVzdCIsICJvcmcud2Via2l0Lmd0ay5XZWJF
eHRlbnNpb25UZXN0IiwgdGVzdC0+bV9tYWluTG9vcCkpOworCisgICAgR1JlZlB0cjxHVmFyaWFu
dD4gcmVzdWx0ID0gYWRvcHRHUmVmKGdfZGJ1c19wcm94eV9jYWxsX3N5bmMoCisgICAgICAgIHBy
b3h5LmdldCgpLAorICAgICAgICAiQWJvcnRQcm9jZXNzIiwKKyAgICAgICAgMCwKKyAgICAgICAg
R19EQlVTX0NBTExfRkxBR1NfTk9ORSwKKyAgICAgICAgLTEsIDAsIDApKTsKKyAgICBnX2Fzc2Vy
dCghcmVzdWx0KTsKKyAgICBnX21haW5fbG9vcF9ydW4odGVzdC0+bV9tYWluTG9vcCk7Cit9CisK
K3N0YXRpYyB2b2lkIHRlc3RXZWJFeHRlbnNpb25XaW5kb3dPYmplY3RDbGVhcmVkKFdlYlZpZXdU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48
aGVhZGVyPjwvaGVhZGVyPjxib2R5PjwvYm9keT48L2h0bWw+IiwgMCk7CisgICAgdGVzdC0+d2Fp
dFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAg
V2ViS2l0SmF2YXNjcmlwdFJlc3VsdCogamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFT
Y3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgid2luZG93LmVjaG8oJ0ZvbycpOyIsICZlcnJvci5v
dXRQdHIoKSk7CisgICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQo
IWVycm9yLmdldCgpKTsKKyAgICBHT3duUHRyPGNoYXI+IHZhbHVlU3RyaW5nKFdlYlZpZXdUZXN0
OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKKyAgICBnX2Fz
c2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAiRm9vIik7Cit9CisKK3N0YXRpYyBn
Ym9vbGVhbiBzY3JpcHREaWFsb2dDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiwgV2ViS2l0U2NyaXB0
RGlhbG9nKiBkaWFsb2csIGNoYXIqKiByZXN1bHQpCit7CisgICAgZ19hc3NlcnRfY21wdWludCh3
ZWJraXRfc2NyaXB0X2RpYWxvZ19nZXRfZGlhbG9nX3R5cGUoZGlhbG9nKSwgPT0sIFdFQktJVF9T
Q1JJUFRfRElBTE9HX0FMRVJUKTsKKyAgICBnX2Fzc2VydCghKnJlc3VsdCk7CisgICAgKnJlc3Vs
dCA9IGdfc3RyZHVwKHdlYmtpdF9zY3JpcHRfZGlhbG9nX2dldF9tZXNzYWdlKGRpYWxvZykpOwor
ICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZCBydW5KYXZhU2NyaXB0SW5Jc29sYXRl
ZFdvcmxkRmluaXNoZWRDYWxsYmFjayhHREJ1c1Byb3h5KiBwcm94eSwgR0FzeW5jUmVzdWx0KiBy
ZXN1bHQsIFdlYlZpZXdUZXN0KiB0ZXN0KQoreworICAgIGdfZGJ1c19wcm94eV9jYWxsX2Zpbmlz
aChwcm94eSwgcmVzdWx0LCAwKTsKKyAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxv
b3ApOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViRXh0ZW5zaW9uSXNvbGF0ZWRXb3JsZChXZWJW
aWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0
bWw+PGhlYWRlcj48L2hlYWRlcj48Ym9keT48ZGl2IGlkPSdjb25zb2xlJz48L2Rpdj48L2JvZHk+
PC9odG1sPiIsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAg
R093blB0cjxjaGFyPiByZXN1bHQ7CisgICAgZ3Vsb25nIHNjcmlwdERpYWxvZ0lEID0gZ19zaWdu
YWxfY29ubmVjdCh0ZXN0LT5tX3dlYlZpZXcsICJzY3JpcHQtZGlhbG9nIiwgR19DQUxMQkFDSyhz
Y3JpcHREaWFsb2dDYWxsYmFjayksICZyZXN1bHQub3V0UHRyKCkpOworCisgICAgc3RhdGljIGNv
bnN0IGNoYXIgKm1haW5Xb3JsZFNjcmlwdCA9CisgICAgICAgICJ0b3AuZm9vID0gJ0Zvbyc7XG4i
CisgICAgICAgICJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmlubmVySFRNTCA9
IHRvcC5mb287XG4iCisgICAgICAgICJ3aW5kb3cub3BlbiA9IGZ1bmN0aW9uICgpIHsgYWxlcnQo
J01haW4gV29ybGQnKTsgfVxuIgorICAgICAgICAiZG9jdW1lbnQub3BlbigxLCAyLCAzKTsiOwor
ICAgIHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZChtYWluV29ybGRTY3Jp
cHQsIDApOworICAgIGdfYXNzZXJ0X2NtcHN0cihyZXN1bHQuZ2V0KCksID09LCAiTWFpbiBXb3Js
ZCIpOworICAgIHJlc3VsdC5jbGVhcigpOworCisgICAgV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCog
amF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hl
ZCgiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5pbm5lckhUTUwiLCAwKTsKKyAg
ICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBHT3duUHRyPGNoYXI+IHZhbHVlU3Ry
aW5nKFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1
bHQpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAiRm9vIik7
CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqaXNvbGF0ZWRXb3JsZFNjcmlwdCA9CisgICAgICAg
ICJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmlubmVySFRNTCA9IHRvcC5mb287
XG4iCisgICAgICAgICJ3aW5kb3cub3BlbiA9IGZ1bmN0aW9uICgpIHsgYWxlcnQoJ0lzb2xhdGVk
IFdvcmxkJyk7IH1cbiIKKyAgICAgICAgImRvY3VtZW50Lm9wZW4oMSwgMiwgMyk7IjsKKyAgICBH
UmVmUHRyPEdEQnVzUHJveHk+IHByb3h5ID0gYWRvcHRHUmVmKGJ1cy0+Y3JlYXRlUHJveHkoIm9y
Zy53ZWJraXQuZ3RrLldlYkV4dGVuc2lvblRlc3QiLAorICAgICAgICAiL29yZy93ZWJraXQvZ3Rr
L1dlYkV4dGVuc2lvblRlc3QiICwgIm9yZy53ZWJraXQuZ3RrLldlYkV4dGVuc2lvblRlc3QiLCB0
ZXN0LT5tX21haW5Mb29wKSk7CisgICAgZ19kYnVzX3Byb3h5X2NhbGwocHJveHkuZ2V0KCksCisg
ICAgICAgICJSdW5KYXZhU2NyaXB0SW5Jc29sYXRlZFdvcmxkIiwKKyAgICAgICAgZ192YXJpYW50
X25ldygiKHQmcykiLCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3BhZ2VfaWQodGVzdC0+bV93ZWJWaWV3
KSwgaXNvbGF0ZWRXb3JsZFNjcmlwdCksCisgICAgICAgIEdfREJVU19DQUxMX0ZMQUdTX05PTkUs
CisgICAgICAgIC0xLCAwLAorICAgICAgICByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2Fs
bGJhY2s+KHJ1bkphdmFTY3JpcHRJbklzb2xhdGVkV29ybGRGaW5pc2hlZENhbGxiYWNrKSwKKyAg
ICAgICAgdGVzdCk7CisgICAgZ19tYWluX2xvb3BfcnVuKHRlc3QtPm1fbWFpbkxvb3ApOworICAg
IGdfYXNzZXJ0X2NtcHN0cihyZXN1bHQuZ2V0KCksID09LCAiSXNvbGF0ZWQgV29ybGQiKTsKKyAg
ICByZXN1bHQuY2xlYXIoKTsKKworICAgIC8vIENoZWNrIHRoYXQgJ3RvcC5mb28nIGRlZmluZWQg
aW4gbWFpbiB3b3JsZCBpcyBub3QgdmlzaWJsZSBpbiBpc29sYXRlZCB3b3JsZC4KKyAgICBqYXZh
c2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmlubmVySFRNTCIsIDApOworICAgIGdf
YXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOworICAgIHZhbHVlU3RyaW5nLnNldChXZWJWaWV3VGVz
dDo6amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7CisgICAgZ19h
c3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgInVuZGVmaW5lZCIpOworCisgICAg
Z19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KHRlc3QtPm1fd2ViVmlldywgc2NyaXB0RGlhbG9n
SUQpOworfQorCit2b2lkIGJlZm9yZUFsbCgpCit7CisgICAgd2Via2l0X3dlYl9jb250ZXh0X3Nl
dF93ZWJfZXh0ZW5zaW9uc19kaXJlY3Rvcnkod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0
KCksIFdFQktJVF9URVNUX1dFQl9FWFRFTlNJT05TX0RJUik7CisgICAgYnVzID0gbmV3IFdlYktp
dFRlc3RCdXMoKTsKKyAgICBpZiAoIWJ1cy0+cnVuKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYkV4dGVuc2lvbiIsICJkb20tZG9jdW1lbnQtdGl0
bGUiLCB0ZXN0V2ViRXh0ZW5zaW9uR2V0VGl0bGUpOworICAgIFdlYlZpZXdUZXN0OjphZGQoIldl
YktpdFdlYkV4dGVuc2lvbiIsICJkb2N1bWVudC1sb2FkZWQtc2lnbmFsIiwgdGVzdERvY3VtZW50
TG9hZGVkU2lnbmFsKTsKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgIndl
Yi1wcm9jZXNzLWNyYXNoZWQiLCB0ZXN0V2ViS2l0V2ViVmlld1Byb2Nlc3NDcmFzaGVkKTsKKyAg
ICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJFeHRlbnNpb24iLCAid2luZG93LW9iamVjdC1j
bGVhcmVkIiwgdGVzdFdlYkV4dGVuc2lvbldpbmRvd09iamVjdENsZWFyZWQpOworICAgIFdlYlZp
ZXdUZXN0OjphZGQoIldlYktpdFdlYkV4dGVuc2lvbiIsICJpc29sYXRlZC13b3JsZCIsIHRlc3RX
ZWJFeHRlbnNpb25Jc29sYXRlZFdvcmxkKTsKK30KKwordm9pZCBhZnRlckFsbCgpCit7CisgICAg
ZGVsZXRlIGJ1czsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Mkd0ay9UZXN0V2ViS2l0QWNjZXNzaWJpbGl0eS5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdEFjY2Vzc2liaWxpdHkuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ZWUwNGIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdEFjY2Vzc2liaWxpdHku
Y3BwCkBAIC0wLDAgKzEsMjI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBT
LkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJUZXN0TWFpbi5oIgorI2luY2x1
ZGUgIldlYlZpZXdUZXN0LmgiCisKKy8vIFRoZSBsaWJhdHNwaSBoZWFkZXJzIGRvbid0IHVzZSBH
X0JFR0lOX0RFQ0xTCitleHRlcm4gIkMiIHsKKyNpbmNsdWRlIDxhdHNwaS9hdHNwaS5oPgorfQor
CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGdsaWIu
aD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNs
dWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisKKy8vIE5hbWUgb2YgdGhlIHRlc3Qgc2VydmVy
IGFwcGxpY2F0aW9uIGNyZWF0aW5nIHRoZSB3ZWJWaWV3IG9iamVjdC4KK3N0YXRpYyBjb25zdCBj
aGFyKiBrVGVzdFNlcnZlckFwcE5hbWUgPSAiQWNjZXNzaWJpbGl0eVRlc3RTZXJ2ZXIiOworCisv
LyBNYXggc2Vjb25kcyB0byB3YWl0IGZvciB0aGUgdGVzdCBzZXJ2ZXIgYmVmb3JlIGluc3BlY3Rp
bmcgaXQuCitzdGF0aWMgY29uc3QgaW50IGtNYXhXYWl0Rm9yQ2hpbGQgPSA1OworCisvLyBUaGUg
UElEIGZvciB0aGUgdGVzdCBzZXJ2ZXIgcnVubmluZywgc28gd2UgY2FuIGtpbGwgaXQgaWYgbmVl
ZGVkLgorc3RhdGljIEdQaWQga0NoaWxkUHJvY2Vzc1BpZCA9IDA7CisKKy8vIFdoZXRoZXIgdGhl
IGNoaWxkIGhhcyByZXBsaWVkIGFuZCBpdCdzIHJlYWR5Lgorc3RhdGljIGJvb2wga0NoaWxkSXNS
ZWFkeSA9IGZhbHNlOworCitzdGF0aWMgdm9pZCBzdG9wVGVzdFNlcnZlcigpCit7CisgICAgLy8g
RG8gbm90aGluZyBpZiB0aGVyZSdzIG5vIHNlcnZlciBydW5uaW5nLgorICAgIGlmICgha0NoaWxk
UHJvY2Vzc1BpZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ19zcGF3bl9jbG9zZV9waWQoa0No
aWxkUHJvY2Vzc1BpZCk7CisgICAga2lsbChrQ2hpbGRQcm9jZXNzUGlkLCBTSUdURVJNKTsKKyAg
ICBrQ2hpbGRQcm9jZXNzUGlkID0gMDsKK30KKworc3RhdGljIHZvaWQgc2lnQWJvcnRIYW5kbGVy
KGludCBzaWdOdW0pCit7CisgICAgLy8gSnVzdCBzdG9wIHRoZSB0ZXN0IHNlcnZlciBpZiBTSUdB
QlJUIHdhcyByZWNlaXZlZC4KKyAgICBzdG9wVGVzdFNlcnZlcigpOworfQorCitzdGF0aWMgZ3Bv
aW50ZXIgdGVzdFNlcnZlck1vbml0b3JUaHJlYWRGdW5jKGdwb2ludGVyKQoreworICAgIC8vIFdh
aXQgZm9yIHRoZSBzcGVjaWZpZWQgdGltZW91dCB0byBoYXBwZW4uCisgICAgZ191c2xlZXAoa01h
eFdhaXRGb3JDaGlsZCAqIEdfVVNFQ19QRVJfU0VDKTsKKworICAgIC8vIEtpbGwgdGhlIGNoaWxk
IHByb2Nlc3MgaWYgbm90IHJlYWR5IHlldC4KKyAgICBpZiAoIWtDaGlsZElzUmVhZHkpCisgICAg
ICAgIHN0b3BUZXN0U2VydmVyKCk7CisKKyAgICBnX3RocmVhZF9leGl0KDApOworICAgIHJldHVy
biAwOworfQorCitzdGF0aWMgdm9pZCBzdGFydFRlc3RTZXJ2ZXJNb25pdG9yKCkKK3sKKyAgICBr
Q2hpbGRJc1JlYWR5ID0gZmFsc2U7CisgICAgZ190aHJlYWRfbmV3KCJUZXN0U2VydmVyTW9uaXRv
ciIsIHRlc3RTZXJ2ZXJNb25pdG9yVGhyZWFkRnVuYywgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHN0
YXJ0VGVzdFNlcnZlcigpCit7CisgICAgLy8gUHJlcGFyZSBhcmd2W10gZm9yIHNwYXduaW5nIHRo
ZSBzZXJ2ZXIgcHJvY2Vzcy4KKyAgICBHT3duUHRyPGNoYXI+IHRlc3RTZXJ2ZXJQYXRoKGdfYnVp
bGRfZmlsZW5hbWUoV0VCS0lUX0VYRUNfUEFUSCwgIlRlc3RXZWJLaXRBUEkiLCAiV2ViS2l0Mkd0
ayIsIGtUZXN0U2VydmVyQXBwTmFtZSwgTlVMTCkpOworCisgICAgY2hhciogdGVzdFNlcnZlckFy
Z3ZbMl07CisgICAgdGVzdFNlcnZlckFyZ3ZbMF0gPSB0ZXN0U2VydmVyUGF0aC5nZXQoKTsKKyAg
ICB0ZXN0U2VydmVyQXJndlsxXSA9IDA7CisKKyAgICAvLyBTcGF3biB0aGUgc2VydmVyLCBnZXR0
aW5nIGl0cyBzdGRvdXQgZmlsZSBkZXNjcmlwdG9yIHRvIHNldCBhCisgICAgLy8gY29tbXVuaWNh
dGlvbiBjaGFubmVsLCBzbyB3ZSBrbm93IHdoZW4gaXQncyByZWFkeS4KKyAgICBpbnQgY2hpbGRT
dGRvdXQgPSAwOworICAgIGlmICghZ19zcGF3bl9hc3luY193aXRoX3BpcGVzKDAsIHRlc3RTZXJ2
ZXJBcmd2LCAwLCBzdGF0aWNfY2FzdDxHU3Bhd25GbGFncz4oMCksIDAsIDAsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJmtDaGlsZFByb2Nlc3NQaWQsIDAsICZjaGlsZFN0ZG91
dCwgMCwgMCkpIHsKKyAgICAgICAgY2xvc2UoY2hpbGRTdGRvdXQpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgLy8gU3RhcnQgbW9uaXRvcmluZyB0aGUgdGVzdCBzZXJ2ZXIgKGluIGEg
c2VwYXJhdGUgdGhyZWFkKSB0bworICAgIC8vIGVuc3VyZSB3ZSBkb24ndCBibG9jayBvbiB0aGUg
Y2hpbGQgcHJvY2VzcyBtb3JlIHRoYW4gYSB0aW1lb3V0LgorICAgIHN0YXJ0VGVzdFNlcnZlck1v
bml0b3IoKTsKKworICAgIGNoYXIgbXNnWzJdOworICAgIEdJT0NoYW5uZWwqIGlvQ2hhbm5lbCA9
IGdfaW9fY2hhbm5lbF91bml4X25ldyhjaGlsZFN0ZG91dCk7CisgICAgaWYgKGdfaW9fY2hhbm5l
bF9yZWFkX2NoYXJzKGlvQ2hhbm5lbCwgbXNnLCAyLCAwLCAwKSA9PSBHX0lPX1NUQVRVU19OT1JN
QUwpIHsKKyAgICAgICAgLy8gQ2hlY2sgd2hldGhlciB0aGUgc2VydmVyIHNlbnQgYSBtZXNzYWdl
IHNheWluZyBpdCdzIHJlYWR5CisgICAgICAgIC8vIGFuZCBzdG9yZSB0aGUgcmVzdWx0IGdsb2Jh
bGx5LCBzbyB0aGUgbW9uaXRvciBjYW4gc2VlIGl0LgorICAgICAgICBrQ2hpbGRJc1JlYWR5ID0g
bXNnWzBdID09ICdPJyAmJiBtc2dbMV0gPT0gJ0snOworICAgIH0KKyAgICBnX2lvX2NoYW5uZWxf
dW5yZWYoaW9DaGFubmVsKTsKKyAgICBjbG9zZShjaGlsZFN0ZG91dCk7CisKKyAgICAvLyBUaGUg
dGltZW91dCB3YXMgcmVhY2hlZCBhbmQgdGhlIHNlcnZlciBpcyBub3QgcmVhZHkgeWV0LCBzbwor
ICAgIC8vIHN0b3AgaXQgaW5tZWRpYXRlbHksIGFuZCBsZXQgdGhlIHVuaXQgdGVzdHMgZmFpbC4K
KyAgICBpZiAoIWtDaGlsZElzUmVhZHkpCisgICAgICAgIHN0b3BUZXN0U2VydmVyKCk7Cit9CisK
K3N0YXRpYyB2b2lkIGNoZWNrQXRzcGlBY2Nlc3NpYmxlKEF0c3BpQWNjZXNzaWJsZSogYWNjZXNz
aWJsZSwgY29uc3QgY2hhciogdGFyZ2V0TmFtZSwgQXRzcGlSb2xlIHRhcmdldFJvbGUpCit7Cisg
ICAgZ19hc3NlcnQoQVRTUElfSVNfQUNDRVNTSUJMRShhY2Nlc3NpYmxlKSk7CisKKyAgICBHT3du
UHRyPGNoYXI+IG5hbWUoYXRzcGlfYWNjZXNzaWJsZV9nZXRfbmFtZShhY2Nlc3NpYmxlLCAwKSk7
CisgICAgZ19hc3NlcnRfY21wc3RyKHRhcmdldE5hbWUsID09LCBuYW1lLmdldCgpKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQodGFyZ2V0Um9sZSwgPT0sIGF0c3BpX2FjY2Vzc2libGVfZ2V0X3JvbGUo
YWNjZXNzaWJsZSwgMCkpOworfQorCitzdGF0aWMgR1JlZlB0cjxBdHNwaUFjY2Vzc2libGU+IGZp
bmRUZXN0U2VydmVyQXBwbGljYXRpb24oKQoreworICAgIC8vIE9ubHkgb25lIGRlc2t0b3AgaXMg
c3VwcG9ydGVkIGJ5IEFUU1BJIGF0IHRoZSBtb21lbnQuCisgICAgR1JlZlB0cjxBdHNwaUFjY2Vz
c2libGU+IGRlc2t0b3AgPSBhZG9wdEdSZWYoYXRzcGlfZ2V0X2Rlc2t0b3AoMCkpOworCisgICAg
Ly8gTG9vayBmb3IgdGhlIHNlcnZlciBhcHBsaWNhdGlvbiBpbiB0aGUgbGlzdCBvZiBhcHBzLgor
ICAgIEdSZWZQdHI8QXRzcGlBY2Nlc3NpYmxlPiBjdXJyZW50OworICAgIGludCBjaGlsZENvdW50
ID0gYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfY291bnQoZGVza3RvcC5nZXQoKSwgMCk7Cisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZENvdW50OyBpKyspIHsKKyAgICAgICAgY3VycmVu
dCA9IGFkb3B0R1JlZihhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChkZXNrdG9w
LmdldCgpLCBpLCAwKSk7CisgICAgICAgIGlmICghZ19zdHJjbXAwKGF0c3BpX2FjY2Vzc2libGVf
Z2V0X25hbWUoY3VycmVudC5nZXQoKSwgMCksIGtUZXN0U2VydmVyQXBwTmFtZSkpCisgICAgICAg
ICAgICByZXR1cm4gY3VycmVudDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGlj
IHZvaWQgdGVzdEF0c3BpQmFzaWNIaWVyYXJjaHkoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBv
aW50ZXIpCit7CisgICAgLy8gVGhlIHRlc3Qgc2VydmVyJ3MgYWNjZXNzaWJpbGl0eSBvYmplY3Qg
KFVJIFByb2Nlc3MpLgorICAgIEdSZWZQdHI8QXRzcGlBY2Nlc3NpYmxlPiB0ZXN0U2VydmVyQXBw
ID0gZmluZFRlc3RTZXJ2ZXJBcHBsaWNhdGlvbigpOworICAgIGdfYXNzZXJ0KEFUU1BJX0lTX0FD
Q0VTU0lCTEUodGVzdFNlcnZlckFwcC5nZXQoKSkpOworICAgIGNoZWNrQXRzcGlBY2Nlc3NpYmxl
KHRlc3RTZXJ2ZXJBcHAuZ2V0KCksICJBY2Nlc3NpYmlsaXR5VGVzdFNlcnZlciIsIEFUU1BJX1JP
TEVfQVBQTElDQVRJT04pOworCisgICAgLy8gVGhlIG1haW4gd2luZG93J3MgYWNjZXNzaWJpbGl0
eSBvYmplY3QgKFVJIFByb2Nlc3MpLgorICAgIEdSZWZQdHI8QXRzcGlBY2Nlc3NpYmxlPiBjdXJy
ZW50UGFyZW50ID0gdGVzdFNlcnZlckFwcDsKKyAgICBHUmVmUHRyPEF0c3BpQWNjZXNzaWJsZT4g
Y3VycmVudENoaWxkID0gYWRvcHRHUmVmKGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2lu
ZGV4KGN1cnJlbnRQYXJlbnQuZ2V0KCksIDAsIDApKTsKKyAgICBnX2Fzc2VydChBVFNQSV9JU19B
Q0NFU1NJQkxFKGN1cnJlbnRDaGlsZC5nZXQoKSkpOworICAgIGNoZWNrQXRzcGlBY2Nlc3NpYmxl
KGN1cnJlbnRDaGlsZC5nZXQoKSwgIiIsIEFUU1BJX1JPTEVfRlJBTUUpOworCisgICAgLy8gVGhl
IFdlYlZpZXcncyBhY2Nlc3NpYmlsaXR5IG9iamVjdCAoVUkgUHJvY2VzcykuCisgICAgY3VycmVu
dFBhcmVudCA9IGN1cnJlbnRDaGlsZDsKKyAgICBjdXJyZW50Q2hpbGQgPSBhdHNwaV9hY2Nlc3Np
YmxlX2dldF9jaGlsZF9hdF9pbmRleChjdXJyZW50UGFyZW50LmdldCgpLCAwLCAwKTsKKyAgICBn
X2Fzc2VydChBVFNQSV9JU19BQ0NFU1NJQkxFKGN1cnJlbnRDaGlsZC5nZXQoKSkpOworICAgIGNo
ZWNrQXRzcGlBY2Nlc3NpYmxlKGN1cnJlbnRDaGlsZC5nZXQoKSwgIiIsIEFUU1BJX1JPTEVfRklM
TEVSKTsKKworICAgIC8vIFRoZSBXZWJQYWdlJ3MgYWNjZXNzaWJpbGl0eSBvYmplY3QgKFdlYiBQ
cm9jZXNzKS4KKyAgICBjdXJyZW50UGFyZW50ID0gY3VycmVudENoaWxkOworICAgIGN1cnJlbnRD
aGlsZCA9IGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQYXJlbnQu
Z2V0KCksIDAsIDApOworICAgIGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY3VycmVudENo
aWxkLmdldCgpKSk7CisgICAgY2hlY2tBdHNwaUFjY2Vzc2libGUoY3VycmVudENoaWxkLmdldCgp
LCAiIiwgQVRTUElfUk9MRV9GSUxMRVIpOworCisgICAgLy8gSFRNTCByb290IGVsZW1lbnQncyBh
Y2Nlc3NpYmxlIGVsZW1lbnQgKFdlYiBQcm9jZXNzKS4KKyAgICBjdXJyZW50UGFyZW50ID0gY3Vy
cmVudENoaWxkOworICAgIGN1cnJlbnRDaGlsZCA9IGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxk
X2F0X2luZGV4KGN1cnJlbnRQYXJlbnQuZ2V0KCksIDAsIDApOworICAgIGdfYXNzZXJ0KEFUU1BJ
X0lTX0FDQ0VTU0lCTEUoY3VycmVudENoaWxkLmdldCgpKSk7CisKKyAgICAvLyBIVE1MIGJvZHkn
cyBhY2Nlc3NpYmxlIGVsZW1lbnQgKFdlYiBQcm9jZXNzKS4KKyAgICBjdXJyZW50UGFyZW50ID0g
Y3VycmVudENoaWxkOworICAgIGN1cnJlbnRDaGlsZCA9IGF0c3BpX2FjY2Vzc2libGVfZ2V0X2No
aWxkX2F0X2luZGV4KGN1cnJlbnRQYXJlbnQuZ2V0KCksIDAsIDApOworICAgIGdfYXNzZXJ0KEFU
U1BJX0lTX0FDQ0VTU0lCTEUoY3VycmVudENoaWxkLmdldCgpKSk7CisgICAgY2hlY2tBdHNwaUFj
Y2Vzc2libGUoY3VycmVudENoaWxkLmdldCgpLCAiIiwgQVRTUElfUk9MRV9ET0NVTUVOVF9XRUIp
OworCisgICAgLy8gSFRNTCBIMSdzIGFjY2Vzc2libGUgZWxlbWVudCAoV2ViIFByb2Nlc3MpLgor
ICAgIGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50Q2hpbGQ7CisgICAgY3VycmVudENoaWxkID0gYXRz
cGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoY3VycmVudFBhcmVudC5nZXQoKSwgMCwg
MCk7CisgICAgZ19hc3NlcnQoQVRTUElfSVNfQUNDRVNTSUJMRShjdXJyZW50Q2hpbGQuZ2V0KCkp
KTsKKyAgICBjaGVja0F0c3BpQWNjZXNzaWJsZShjdXJyZW50Q2hpbGQuZ2V0KCksICJUaGlzIGlz
IGEgdGVzdCIsIEFUU1BJX1JPTEVfSEVBRElORyk7CisKKyAgICAvLyBIVE1MIGZpcnN0IHBhcmFn
cmFwaCdzIGFjY2Vzc2libGUgZWxlbWVudCAoV2ViIFByb2Nlc3MpLgorICAgIGN1cnJlbnRDaGls
ZCA9IGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQYXJlbnQuZ2V0
KCksIDEsIDApOworICAgIGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY3VycmVudENoaWxk
LmdldCgpKSk7CisgICAgY2hlY2tBdHNwaUFjY2Vzc2libGUoY3VycmVudENoaWxkLmdldCgpLCAi
IiwgQVRTUElfUk9MRV9QQVJBR1JBUEgpOworCisgICAgLy8gSFRNTCBzZWNvbmQgcGFyYWdyYXBo
J3MgYWNjZXNzaWJsZSBlbGVtZW50IChXZWIgUHJvY2VzcykuCisgICAgY3VycmVudENoaWxkID0g
YXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoY3VycmVudFBhcmVudC5nZXQoKSwg
MiwgMCk7CisgICAgZ19hc3NlcnQoQVRTUElfSVNfQUNDRVNTSUJMRShjdXJyZW50Q2hpbGQuZ2V0
KCkpKTsKKyAgICBjaGVja0F0c3BpQWNjZXNzaWJsZShjdXJyZW50Q2hpbGQuZ2V0KCksICIiLCBB
VFNQSV9ST0xFX1BBUkFHUkFQSCk7CisKKyAgICAvLyBIVE1MIGxpbmsncyBhY2Nlc3NpYmxlIGVs
ZW1lbnQgKFdlYiBQcm9jZXNzKS4KKyAgICBjdXJyZW50UGFyZW50ID0gY3VycmVudENoaWxkOwor
ICAgIGN1cnJlbnRDaGlsZCA9IGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGN1
cnJlbnRQYXJlbnQuZ2V0KCksIDAsIDApOworICAgIGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lC
TEUoY3VycmVudENoaWxkLmdldCgpKSk7CisgICAgY2hlY2tBdHNwaUFjY2Vzc2libGUoY3VycmVu
dENoaWxkLmdldCgpLCAiYSBsaW5rIiwgQVRTUElfUk9MRV9MSU5LKTsKK30KKwordm9pZCBiZWZv
cmVBbGwoKQoreworICAgIC8vIFdlIGluc3RhbGwgYSBoYW5kbGVyIHRvIGVuc3VyZSB0aGF0IHdl
IGtpbGwgdGhlIGNoaWxkIHByb2Nlc3MKKyAgICAvLyBpZiB0aGUgcGFyZW50IGRpZXMgYmVjYXVz
ZSBvZiB3aGF0ZXZlciB0aGUgcmVhc29uIGlzLgorICAgIHNpZ25hbChTSUdBQlJULCBzaWdBYm9y
dEhhbmRsZXIpOworCisgICAgLy8gU3RhcnQgdGhlIGFjY2Vzc2liaWxpdHkgdGVzdCBzZXJ2ZXIg
YW5kIGxvYWQgdGhlIHRlc3RzLgorICAgIHN0YXJ0VGVzdFNlcnZlcigpOworICAgIFdlYlZpZXdU
ZXN0OjphZGQoIldlYktpdEFjY2Vzc2liaWxpdHkiLCAiYXRzcGktYmFzaWMtaGllcmFyY2h5Iiwg
dGVzdEF0c3BpQmFzaWNIaWVyYXJjaHkpOworfQorCit2b2lkIGFmdGVyQWxsKCkKK3sKKyAgICAv
LyBFbnN1cmUgd2Ugc3RvcCB0aGUgc2VydmVyLgorICAgIHN0b3BUZXN0U2VydmVyKCk7Cit9CmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktp
dEZhdmljb25EYXRhYmFzZS5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJH
dGsvVGVzdFdlYktpdEZhdmljb25EYXRhYmFzZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMWEwNmY3NAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlLmNwcApAQCAtMCww
ICsxLDI3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5oIgorI2luY2x1ZGUg
IldlYlZpZXdUZXN0LmgiCisjaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KKyNpbmNsdWRlIDxsaWJz
b3VwL3NvdXAuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisKK3N0YXRpYyBX
ZWJLaXRUZXN0U2VydmVyKiBrU2VydmVyOworc3RhdGljIGNoYXIqIGtUZW1wRGlyZWN0b3J5Owor
CitjbGFzcyBGYXZpY29uRGF0YWJhc2VUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3QgeworcHVibGlj
OgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoRmF2aWNvbkRhdGFiYXNlVGVzdCk7CisKKyAg
ICBGYXZpY29uRGF0YWJhc2VUZXN0KCkKKyAgICAgICAgOiBtX3dlYkNvbnRleHQod2Via2l0X3dl
Yl9jb250ZXh0X2dldF9kZWZhdWx0KCkpCisgICAgICAgICwgbV9mYXZpY29uKDApCisgICAgICAg
ICwgbV9lcnJvcigwKQorICAgICAgICAsIG1fZmF2aWNvbk5vdGlmaWNhdGlvblJlY2VpdmVkKGZh
bHNlKQorICAgIHsKKyAgICAgICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdl
YmtpdF93ZWJfY29udGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFzZShtX3dlYkNvbnRleHQpOworICAg
ICAgICBnX3NpZ25hbF9jb25uZWN0KGRhdGFiYXNlLCAiZmF2aWNvbi1jaGFuZ2VkIiwgR19DQUxM
QkFDSyhmYXZpY29uQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CisgICAgfQorCisgICAgfkZhdmlj
b25EYXRhYmFzZVRlc3QoKQorICAgIHsKKyAgICAgICAgaWYgKG1fZmF2aWNvbikKKyAgICAgICAg
ICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShtX2Zhdmljb24pOworCisgICAgICAgIFdlYktpdEZh
dmljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25f
ZGF0YWJhc2UobV93ZWJDb250ZXh0KTsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29u
bmVjdF9tYXRjaGVkKGRhdGFiYXNlLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0
aGlzKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBmYXZpY29uQ2hhbmdlZENhbGxiYWNrKFdl
YktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IGNoYXIqIHBhZ2VVUkksIGNvbnN0
IGNoYXIqIGZhdmljb25VUkksIEZhdmljb25EYXRhYmFzZVRlc3QqIHRlc3QpCisgICAgeworICAg
ICAgICBpZiAoIWdfc3RyY21wMCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSh0ZXN0LT5tX3dlYlZp
ZXcpLCBwYWdlVVJJKSkKKyAgICAgICAgICAgIHRlc3QtPm1fZmF2aWNvblVSSSA9IGZhdmljb25V
Ukk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgdmlld0Zhdmljb25DaGFuZ2VkQ2FsbGJhY2so
V2ViS2l0V2ViVmlldyogd2ViVmlldywgR1BhcmFtU3BlYyogcHNwZWMsIGdwb2ludGVyIGRhdGEp
CisgICAgeworICAgICAgICBGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8
RmF2aWNvbkRhdGFiYXNlVGVzdCo+KGRhdGEpOworICAgICAgICBnX2Fzc2VydCh0ZXN0LT5tX3dl
YlZpZXcgPT0gd2ViVmlldyk7CisgICAgICAgIHRlc3QtPm1fZmF2aWNvbk5vdGlmaWNhdGlvblJl
Y2VpdmVkID0gdHJ1ZTsKKyAgICAgICAgdGVzdC0+cXVpdE1haW5Mb29wKCk7CisgICAgfQorCisg
ICAgc3RhdGljIHZvaWQgZ2V0RmF2aWNvbkNhbGxiYWNrKEdPYmplY3QqIHNvdXJjZU9iamVjdCwg
R0FzeW5jUmVzdWx0KiByZXN1bHQsIHZvaWQqIGRhdGEpCisgICAgeworICAgICAgICBGYXZpY29u
RGF0YWJhc2VUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8RmF2aWNvbkRhdGFiYXNlVGVzdCo+KGRh
dGEpOworICAgICAgICBXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X3dl
Yl9jb250ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNlKHRlc3QtPm1fd2ViQ29udGV4dCk7CisgICAg
ICAgIHRlc3QtPm1fZmF2aWNvbiA9IHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29u
X2ZpbmlzaChkYXRhYmFzZSwgcmVzdWx0LCAmdGVzdC0+bV9lcnJvci5vdXRQdHIoKSk7CisgICAg
ICAgIHRlc3QtPnF1aXRNYWluTG9vcCgpOworICAgIH0KKworICAgIHZvaWQgd2FpdFVudGlsRmF2
aWNvbkNoYW5nZWQoKQorICAgIHsKKyAgICAgICAgbV9mYXZpY29uTm90aWZpY2F0aW9uUmVjZWl2
ZWQgPSBmYWxzZTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBoYW5kbGVySUQgPSBnX3NpZ25hbF9j
b25uZWN0KG1fd2ViVmlldywgIm5vdGlmeTo6ZmF2aWNvbiIsIEdfQ0FMTEJBQ0sodmlld0Zhdmlj
b25DaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFp
bkxvb3ApOworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QobV93ZWJWaWV3LCBo
YW5kbGVySUQpOworICAgIH0KKworICAgIHZvaWQgZ2V0RmF2aWNvbkZvclBhZ2VVUklBbmRXYWl0
VW50aWxSZWFkeShjb25zdCBjaGFyKiBwYWdlVVJJKQorICAgIHsKKyAgICAgICAgbV9lcnJvci5j
bGVhcigpOworICAgICAgICBpZiAobV9mYXZpY29uKSB7CisgICAgICAgICAgICBjYWlyb19zdXJm
YWNlX2Rlc3Ryb3kobV9mYXZpY29uKTsKKyAgICAgICAgICAgIG1fZmF2aWNvbiA9IDA7CisgICAg
ICAgIH0KKworICAgICAgICBXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0
X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNlKG1fd2ViQ29udGV4dCk7CisgICAgICAg
IHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uKGRhdGFiYXNlLCBwYWdlVVJJLCAw
LCBnZXRGYXZpY29uQ2FsbGJhY2ssIHRoaXMpOworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9t
YWluTG9vcCk7CisgICAgfQorCisgICAgV2ViS2l0V2ViQ29udGV4dCogbV93ZWJDb250ZXh0Owor
ICAgIGNhaXJvX3N1cmZhY2VfdCogbV9mYXZpY29uOworICAgIENTdHJpbmcgbV9mYXZpY29uVVJJ
OworICAgIEdPd25QdHI8R0Vycm9yPiBtX2Vycm9yOworICAgIGJvb2wgbV9mYXZpY29uTm90aWZp
Y2F0aW9uUmVjZWl2ZWQ7Cit9OworCitzdGF0aWMgdm9pZAorc2VydmVyQ2FsbGJhY2soU291cFNl
cnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hh
c2hUYWJsZSogcXVlcnksIFNvdXBDbGllbnRDb250ZXh0KiBjb250ZXh0LCB2b2lkKiBkYXRhKQor
eworICAgIGlmIChtZXNzYWdlLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7CisgICAgICAg
IHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9JTVBMRU1F
TlRFRCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZ19zdHJfZXF1YWwocGF0
aCwgIi9mYXZpY29uLmljbyIpKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1l
c3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5
X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgY2hhciogY29udGVudHM7CisgICAgZ3NpemUgbGVuZ3RoOworICAgIGlmIChnX3N0
cl9lcXVhbChwYXRoLCAiL2ljb24vZmF2aWNvbi5pY28iKSkgeworICAgICAgICBHT3duUHRyPGNo
YXI+IHBhdGhUb0Zhdmljb24oZ19idWlsZF9maWxlbmFtZShUZXN0OjpnZXRXZWJLaXQxVGVzdFJl
c291Y2VzRGlyKCkuZGF0YSgpLCAiYmxhbmsuaWNvIiwgTlVMTCkpOworICAgICAgICBnX2ZpbGVf
Z2V0X2NvbnRlbnRzKHBhdGhUb0Zhdmljb24uZ2V0KCksICZjb250ZW50cywgJmxlbmd0aCwgMCk7
CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5
LCBTT1VQX01FTU9SWV9UQUtFLCBjb250ZW50cywgbGVuZ3RoKTsKKyAgICB9IGVsc2UgaWYgKGdf
c3RyX2VxdWFsKHBhdGgsICIvbm9mYXZpY29uIikpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNo
YXIqIG5vRmF2aWNvbkhUTUwgPSAiPGh0bWw+PGhlYWQ+PGJvZHk+dGVzdDwvYm9keT48L2h0bWw+
IjsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2Jv
ZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgbm9GYXZpY29uSFRNTCwgc3RybGVuKG5vRmF2aWNvbkhU
TUwpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogY29udGVudHNI
VE1MID0gIjxodG1sPjxoZWFkPjxsaW5rIHJlbD0naWNvbicgaHJlZj0nL2ljb24vZmF2aWNvbi5p
Y28nIHR5cGU9J2ltYWdlL3gtaWNvOyBjaGFyc2V0PWJpbmFyeSc+PC9oZWFkPjxib2R5PnRlc3Q8
L2JvZHk+PC9odG1sPiI7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdl
LT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGNvbnRlbnRzSFRNTCwgc3RybGVu
KGNvbnRlbnRzSFRNTCkpOworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1l
c3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZSht
ZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKK30KKworc3RhdGljIHZvaWQgdGVzdE5vdEluaXRpYWxp
emVkKEZhdmljb25EYXRhYmFzZVRlc3QqIHRlc3QpCit7CisgICAgLy8gVHJ5IHRvIHJldHJpZXZl
IGEgdmFsaWQgZmF2aWNvbiBmcm9tIGEgbm90IGluaXRpYWxpemVkIGRhdGFiYXNlLgorICAgIHRl
c3QtPmdldEZhdmljb25Gb3JQYWdlVVJJQW5kV2FpdFVudGlsUmVhZHkoa1NlcnZlci0+Z2V0VVJJ
Rm9yUGF0aCgiL2ZvbyIpLmRhdGEoKSk7CisgICAgZ19hc3NlcnQoIXRlc3QtPm1fZmF2aWNvbik7
CisgICAgZ19hc3NlcnQodGVzdC0+bV9lcnJvcik7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3Qt
Pm1fZXJyb3ItPmNvZGUsID09LCBXRUJLSVRfRkFWSUNPTl9EQVRBQkFTRV9FUlJPUl9OT1RfSU5J
VElBTElaRUQpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0U2V0RGlyZWN0b3J5KEZhdmljb25EYXRh
YmFzZVRlc3QqIHRlc3QpCit7CisgICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF9mYXZpY29uX2Rh
dGFiYXNlX2RpcmVjdG9yeSh0ZXN0LT5tX3dlYkNvbnRleHQsIGtUZW1wRGlyZWN0b3J5KTsKKyAg
ICBnX2Fzc2VydF9jbXBzdHIoa1RlbXBEaXJlY3RvcnksID09LCB3ZWJraXRfd2ViX2NvbnRleHRf
Z2V0X2Zhdmljb25fZGF0YWJhc2VfZGlyZWN0b3J5KHRlc3QtPm1fd2ViQ29udGV4dCkpOworfQor
CitzdGF0aWMgdm9pZCB0ZXN0Q2xlYXJEYXRhYmFzZShGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0
KQoreworICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfd2ViX2Nv
bnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2UodGVzdC0+bV93ZWJDb250ZXh0KTsKKyAgICB3ZWJr
aXRfZmF2aWNvbl9kYXRhYmFzZV9jbGVhcihkYXRhYmFzZSk7CisKKyAgICBHT3duUHRyPGNoYXI+
IGljb25VUkkod2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fdXJpKGRhdGFiYXNl
LCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvZm9vIikuZGF0YSgpKSk7CisgICAgZ19hc3NlcnQo
IWljb25VUkkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0R2V0RmF2aWNvbihGYXZpY29uRGF0YWJh
c2VUZXN0KiB0ZXN0KQoreworICAgIC8vIFdlIG5lZWQgdG8gbG9hZCB0aGUgcGFnZSBmaXJzdCB0
byBlbnN1cmUgdGhlIGljb24gZGF0YSB3aWxsIGJlCisgICAgLy8gaW4gdGhlIGRhdGFiYXNlIGlu
IGNhc2UgdGhlcmUncyBhbiBhc3NvY2lhdGVkIGZhdmljb24uCisgICAgdGVzdC0+bG9hZFVSSShr
U2VydmVyLT5nZXRVUklGb3JQYXRoKCIvZm9vIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50
aWxGYXZpY29uQ2hhbmdlZCgpOworICAgIENTdHJpbmcgZmF2aWNvblVSSSA9IGtTZXJ2ZXItPmdl
dFVSSUZvclBhdGgoIi9pY29uL2Zhdmljb24uaWNvIik7CisKKyAgICAvLyBDaGVjayB0aGUgQVBJ
IHJldHJpZXZpbmcgYSB2YWxpZCBmYXZpY29uLgorICAgIHRlc3QtPmdldEZhdmljb25Gb3JQYWdl
VVJJQW5kV2FpdFVudGlsUmVhZHkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2ZvbyIpLmRhdGEo
KSk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9mYXZpY29uKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIo
dGVzdC0+bV9mYXZpY29uVVJJLmRhdGEoKSwgPT0sIGZhdmljb25VUkkuZGF0YSgpKTsKKyAgICBn
X2Fzc2VydCghdGVzdC0+bV9lcnJvcik7CisKKyAgICAvLyBDaGVjayB0aGF0IHdpZHRoIGFuZCBo
ZWlnaHQgbWF0Y2ggdGhvc2UgZnJvbSBibGFuay5pY28gKDE2eDE2IGZhdmljb24pLgorICAgIGdf
YXNzZXJ0X2NtcGludChjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aCh0ZXN0LT5tX2Zhdmlj
b24pLCA9PSwgMTYpOworICAgIGdfYXNzZXJ0X2NtcGludChjYWlyb19pbWFnZV9zdXJmYWNlX2dl
dF9oZWlnaHQodGVzdC0+bV9mYXZpY29uKSwgPT0sIDE2KTsKKworICAgIC8vIENoZWNrIHRoYXQg
YW5vdGhlciBwYWdlIHdpdGggdGhlIHNhbWUgZmF2aWNvbiByZXR1cm4gdGhlIHNhbWUgaWNvbi4K
KyAgICBjYWlyb19zdXJmYWNlX3QqIGZhdmljb24gPSBjYWlyb19zdXJmYWNlX3JlZmVyZW5jZSh0
ZXN0LT5tX2Zhdmljb24pOworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0
aCgiL2JhciIpLmRhdGEoKSk7CisgICAgLy8gSXQncyBhIG5ldyBwYWdlIGluIHRoZSBkYXRhYmFz
ZSwgc28gZmF2aWNvbiB3aWxsIGNoYW5nZSB0d2ljZSwgZmlyc3QgdG8gcmVzZXQgaXQKKyAgICAv
LyBhbmQgdGhlbiB3aGVuIHRoZSBpY29uIGlzIGxvYWRlZC4KKyAgICB0ZXN0LT53YWl0VW50aWxG
YXZpY29uQ2hhbmdlZCgpOworICAgIHRlc3QtPndhaXRVbnRpbEZhdmljb25DaGFuZ2VkKCk7Cisg
ICAgdGVzdC0+Z2V0RmF2aWNvbkZvclBhZ2VVUklBbmRXYWl0VW50aWxSZWFkeShrU2VydmVyLT5n
ZXRVUklGb3JQYXRoKCIvYmFyIikuZGF0YSgpKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX2Zhdmlj
b24pOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXN0LT5tX2Zhdmljb25VUkkuZGF0YSgpLCA9PSwg
ZmF2aWNvblVSSS5kYXRhKCkpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fZmF2aWNvbiA9PSBmYXZp
Y29uKTsKKyAgICBnX2Fzc2VydCghdGVzdC0+bV9lcnJvcik7CisgICAgY2Fpcm9fc3VyZmFjZV9k
ZXN0cm95KGZhdmljb24pOworCisgICAgLy8gQ2hlY2sgdGhlIEFQSSByZXRyaWV2aW5nIGFuIGlu
dmFsaWQgZmF2aWNvbi4KKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgo
Ii9ub2Zhdmljb24iKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbEZhdmljb25DaGFuZ2Vk
KCk7CisKKyAgICB0ZXN0LT5nZXRGYXZpY29uRm9yUGFnZVVSSUFuZFdhaXRVbnRpbFJlYWR5KGtT
ZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9ub2Zhdmljb24iKS5kYXRhKCkpOworICAgIGdfYXNzZXJ0
KCF0ZXN0LT5tX2Zhdmljb24pOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fZXJyb3IpOworfQorCitz
dGF0aWMgdm9pZCB0ZXN0R2V0RmF2aWNvblVSSShGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0KQor
eworICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfd2ViX2NvbnRl
eHRfZ2V0X2Zhdmljb25fZGF0YWJhc2UodGVzdC0+bV93ZWJDb250ZXh0KTsKKworICAgIENTdHJp
bmcgYmFzZVVSSSA9IGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9mb28iKTsKKyAgICBHT3duUHRy
PGNoYXI+IGljb25VUkkod2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fdXJpKGRh
dGFiYXNlLCBiYXNlVVJJLmRhdGEoKSkpOworICAgIEFTU0VSVF9DTVBfQ1NUUklORyhpY29uVVJJ
LmdldCgpLCA9PSwga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2ljb24vZmF2aWNvbi5pY28iKSk7
Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3RmF2aWNvbihGYXZpY29uRGF0YWJhc2VUZXN0
KiB0ZXN0KQoreworICAgIHRlc3QtPm1fZmF2aWNvblVSSSA9IENTdHJpbmcoKTsKKworICAgIGNh
aXJvX3N1cmZhY2VfdCogaWNvbkZyb21XZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X2dldF9mYXZp
Y29uKHRlc3QtPm1fd2ViVmlldyk7CisgICAgZ19hc3NlcnQoIWljb25Gcm9tV2ViVmlldyk7CisK
KyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9mb28iKS5kYXRhKCkp
OworICAgIHRlc3QtPndhaXRVbnRpbEZhdmljb25DaGFuZ2VkKCk7CisgICAgZ19hc3NlcnQodGVz
dC0+bV9mYXZpY29uTm90aWZpY2F0aW9uUmVjZWl2ZWQpOworICAgIC8vIFRoZSBpY29uIGlzIGtu
b3duIGFuZCBoYXNuJ3QgY2hhbmdlZCBpbiB0aGUgZGF0YWJhc2UsIHNvIG5vdGlmeTo6ZmF2aWNv
biBpcyBlbWl0dGVkCisgICAgLy8gYnV0IFdlYktpdEZhdmljb25EYXRhYmFzZTo6aWNvbi1jaGFu
Z2VkIGlzbid0LgorICAgIGdfYXNzZXJ0KHRlc3QtPm1fZmF2aWNvblVSSS5pc051bGwoKSk7CisK
KyAgICBpY29uRnJvbVdlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2Zhdmljb24odGVzdC0+
bV93ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChpY29uRnJvbVdlYlZpZXcpOworICAgIGdfYXNzZXJ0
X2NtcHVpbnQoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoaWNvbkZyb21XZWJWaWV3KSwg
PT0sIDE2KTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hl
aWdodChpY29uRnJvbVdlYlZpZXcpLCA9PSwgMTYpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0RmF2
aWNvbkRhdGFiYXNlKEZhdmljb25EYXRhYmFzZVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7
CisgICAgLy8gVGhlc2UgdGVzdHMgZGVwZW5kIG9uIHRoaXMgb3JkZXIgdG8gcnVuIHByb3Blcmx5
IHNvIHdlIGRlY2xhcmUgdGhlbSBpbiBhIHNpbmdsZSBvbmUuCisgICAgLy8gU2VlIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTE0MzQuCisgICAgdGVzdE5vdEluaXRp
YWxpemVkKHRlc3QpOworICAgIHRlc3RTZXREaXJlY3RvcnkodGVzdCk7CisgICAgdGVzdEdldEZh
dmljb24odGVzdCk7CisgICAgdGVzdEdldEZhdmljb25VUkkodGVzdCk7CisgICAgdGVzdFdlYlZp
ZXdGYXZpY29uKHRlc3QpOworICAgIHRlc3RDbGVhckRhdGFiYXNlKHRlc3QpOworfQorCit2b2lk
IGJlZm9yZUFsbCgpCit7CisgICAgLy8gU3RhcnQgYSBzb3VwIHNlcnZlciBmb3IgdGVzdGluZy4K
KyAgICBrU2VydmVyID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIoKTsKKyAgICBrU2VydmVyLT5ydW4o
c2VydmVyQ2FsbGJhY2spOworCisgICAga1RlbXBEaXJlY3RvcnkgPSBnX2Rpcl9tYWtlX3RtcCgi
V2ViS2l0MlRlc3RzLVhYWFhYWCIsIDApOworICAgIGdfYXNzZXJ0KGtUZW1wRGlyZWN0b3J5KTsK
KworICAgIC8vIEFkZCB0ZXN0cyB0byB0aGUgc3VpdGUuCisgICAgRmF2aWNvbkRhdGFiYXNlVGVz
dDo6YWRkKCJXZWJLaXRGYXZpY29uRGF0YWJhc2UiLCAiZmF2aWNvbi1kYXRhYmFzZS10ZXN0Iiwg
dGVzdEZhdmljb25EYXRhYmFzZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdEZhdmljb25EYXRh
YmFzZUZpbmFsaXplZENhbGxiYWNrKGdwb2ludGVyLCBHT2JqZWN0KikKK3sKKyAgICBpZiAoIWdf
ZmlsZV90ZXN0KGtUZW1wRGlyZWN0b3J5LCBHX0ZJTEVfVEVTVF9JU19ESVIpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBHT3duUHRyPGNoYXI+IGZpbGVuYW1lKGdfYnVpbGRfZmlsZW5hbWUoa1Rl
bXBEaXJlY3RvcnksICJXZWJwYWdlSWNvbnMuZGIiLCBOVUxMKSk7CisgICAgZ191bmxpbmsoZmls
ZW5hbWUuZ2V0KCkpOworCisgICAgZ19ybWRpcihrVGVtcERpcmVjdG9yeSk7Cit9CisKK3ZvaWQg
YWZ0ZXJBbGwoKQoreworICAgIGRlbGV0ZSBrU2VydmVyOworCisgICAgLy8gRGVsZXRlIHRoZSB0
ZW1wb3JhcnkgZmlsZXMgYWZ0ZXIgdGhlIEljb25EYXRhYmFzZSBoYXMgYmVlbgorICAgIC8vIGNs
b3NlZCwgdGhhdCBpcywgb25jZSBXZWJLaXRGYXZpY29uRGF0YWJhc2UgaXMgYmVpbmcgZGVzdHJv
eWVkLgorICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfd2ViX2Nv
bnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2Uod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0
KCkpOworICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGRhdGFiYXNlKSwgd2Via2l0RmF2
aWNvbkRhdGFiYXNlRmluYWxpemVkQ2FsbGJhY2ssIDApOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxlci5j
cHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdEZpbmRD
b250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmVlZjRj
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3Rr
L1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxlci5jcHAKQEAgLTAsMCArMSwzMzUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lu
Y2x1ZGUgIkxvYWRUcmFja2luZ1Rlc3QuaCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVk
ZSA8d2Via2l0Mi93ZWJraXQyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgor
CitzdGF0aWMgY29uc3QgY2hhciogdGVzdFN0cmluZyA9ICI8aHRtbD48Ym9keT5maXJzdCB0ZXN0
aW5nIHNlY29uZCB0ZXN0aW5nIHNlY29uZEhhbGY8L2JvZHk+PC9odG1sPiI7CisKK2NsYXNzIEZp
bmRDb250cm9sbGVyVGVzdDogcHVibGljIFdlYlZpZXdUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtF
X0dMSUJfVEVTVF9GSVhUVVJFKEZpbmRDb250cm9sbGVyVGVzdCk7CisKKyAgICBGaW5kQ29udHJv
bGxlclRlc3QoKQorICAgICAgICA6IG1fZmluZENvbnRyb2xsZXIod2Via2l0X3dlYl92aWV3X2dl
dF9maW5kX2NvbnRyb2xsZXIobV93ZWJWaWV3KSkKKyAgICAgICAgLCBtX3J1bkZpbmRVbnRpbENv
bXBsZXRpb24oZmFsc2UpCisgICAgeworICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVu
VGVzdEZpbmlzaGVzKEdfT0JKRUNUKG1fZmluZENvbnRyb2xsZXIuZ2V0KCkpKTsKKyAgICB9CisK
KyAgICB+RmluZENvbnRyb2xsZXJUZXN0KCkKKyAgICB7CisgICAgICAgIGlmIChtX2ZpbmRDb250
cm9sbGVyKQorICAgICAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVk
KG1fZmluZENvbnRyb2xsZXIuZ2V0KCksIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAs
IHRoaXMpOworICAgIH0KKworICAgIHZvaWQgZmluZChjb25zdCBjaGFyKiBzZWFyY2hUZXh0LCBn
dWludDMyIGZpbmRPcHRpb25zLCBndWludCBtYXhNYXRjaENvdW50KQorICAgIHsKKyAgICAgICAg
Z19zaWduYWxfY29ubmVjdChtX2ZpbmRDb250cm9sbGVyLmdldCgpLCAiZm91bmQtdGV4dCIsIEdf
Q0FMTEJBQ0soZm91bmRUZXh0Q2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgZ19zaWduYWxfY29u
bmVjdChtX2ZpbmRDb250cm9sbGVyLmdldCgpLCAiZmFpbGVkLXRvLWZpbmQtdGV4dCIsIEdfQ0FM
TEJBQ0soZmFpbGVkVG9GaW5kVGV4dENhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIHdlYmtpdF9m
aW5kX2NvbnRyb2xsZXJfc2VhcmNoKG1fZmluZENvbnRyb2xsZXIuZ2V0KCksIHNlYXJjaFRleHQs
IGZpbmRPcHRpb25zLCBtYXhNYXRjaENvdW50KTsKKyAgICB9CisKKyAgICB2b2lkIGNvdW50KGNv
bnN0IGNoYXIqIHNlYXJjaFRleHQsIGd1aW50MzIgZmluZE9wdGlvbnMsIGd1aW50IG1heE1hdGNo
Q291bnQpCisgICAgeworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fZmluZENvbnRyb2xsZXIu
Z2V0KCksICJjb3VudGVkLW1hdGNoZXMiLCBHX0NBTExCQUNLKGNvdW50ZWRNYXRjaGVzQ2FsbGJh
Y2spLCB0aGlzKTsKKyAgICAgICAgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9jb3VudF9tYXRjaGVz
KG1fZmluZENvbnRyb2xsZXIuZ2V0KCksIHNlYXJjaFRleHQsIGZpbmRPcHRpb25zLCBtYXhNYXRj
aENvdW50KTsKKyAgICB9CisKKyAgICB2b2lkIHdhaXRVbnRpbEZpbmRGaW5pc2hlZCgpCisgICAg
eworICAgICAgICBtX3J1bkZpbmRVbnRpbENvbXBsZXRpb24gPSB0cnVlOworICAgICAgICBnX21h
aW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgfQorCisgICAgR1JlZlB0cjxXZWJLaXRGaW5k
Q29udHJvbGxlcj4gbV9maW5kQ29udHJvbGxlcjsKKyAgICBib29sIG1fdGV4dEZvdW5kOworICAg
IHVuc2lnbmVkIG1fbWF0Y2hDb3VudDsKKworcHJpdmF0ZToKKyAgICBib29sIG1fcnVuRmluZFVu
dGlsQ29tcGxldGlvbjsKKworICAgIHN0YXRpYyB2b2lkIGZvdW5kVGV4dENhbGxiYWNrKFdlYktp
dEZpbmRDb250cm9sbGVyKiwgZ3VpbnQgbWF0Y2hDb3VudCwgRmluZENvbnRyb2xsZXJUZXN0KiB0
ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+bV90ZXh0Rm91bmQgPSB0cnVlOworICAgICAgICB0
ZXN0LT5tX21hdGNoQ291bnQgPSBtYXRjaENvdW50OworICAgICAgICBpZiAodGVzdC0+bV9ydW5G
aW5kVW50aWxDb21wbGV0aW9uKQorICAgICAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5t
X21haW5Mb29wKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBmYWlsZWRUb0ZpbmRUZXh0Q2Fs
bGJhY2soV2ViS2l0RmluZENvbnRyb2xsZXIqLCBGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QpCisg
ICAgeworICAgICAgICB0ZXN0LT5tX3RleHRGb3VuZCA9IGZhbHNlOworICAgICAgICBpZiAodGVz
dC0+bV9ydW5GaW5kVW50aWxDb21wbGV0aW9uKQorICAgICAgICAgICAgZ19tYWluX2xvb3BfcXVp
dCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBjb3VudGVkTWF0
Y2hlc0NhbGxiYWNrKFdlYktpdEZpbmRDb250cm9sbGVyKiwgZ3VpbnQgbWF0Y2hDb3VudCwgRmlu
ZENvbnRyb2xsZXJUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+bV9tYXRjaENvdW50
ID0gbWF0Y2hDb3VudDsKKyAgICAgICAgaWYgKHRlc3QtPm1fcnVuRmluZFVudGlsQ29tcGxldGlv
bikKKyAgICAgICAgICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7CisgICAg
fQorfTsKKworc3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVyVGV4dEZvdW5kKEZpbmRDb250
cm9sbGVyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbCh0
ZXN0U3RyaW5nLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAg
IHRlc3QtPmZpbmQoInRlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUsIDEpOworICAg
IHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQodGVzdC0+bV90
ZXh0Rm91bmQpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xsZXJUZXh0Tm90Rm91
bmQoRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3Qt
PmxvYWRIdG1sKHRlc3RTdHJpbmcsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hl
ZCgpOworCisgICAgdGVzdC0+ZmluZCgibm90Rm91bmQiLCBXRUJLSVRfRklORF9PUFRJT05TX05P
TkUsIDEpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3Nl
cnQoIXRlc3QtPm1fdGV4dEZvdW5kKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9s
bGVyTWF0Y2hDb3VudChGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7
CisgICAgdGVzdC0+bG9hZEh0bWwodGVzdFN0cmluZywgMCk7CisgICAgdGVzdC0+d2FpdFVudGls
TG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5maW5kKCJ0ZXN0aW5nIiwgV0VCS0lUX0ZJTkRf
T1BUSU9OU19OT05FLCAyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKwor
ICAgIGdfYXNzZXJ0KHRlc3QtPm1fbWF0Y2hDb3VudCA9PSAyKTsKKyAgICBnX2Fzc2VydCh0ZXN0
LT5tX3RleHRGb3VuZCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RGaW5kQ29udHJvbGxlck1heE1h
dGNoQ291bnQoRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAg
IHRlc3QtPmxvYWRIdG1sKHRlc3RTdHJpbmcsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRG
aW5pc2hlZCgpOworCisgICAgdGVzdC0+ZmluZCgidGVzdGluZyIsIFdFQktJVF9GSU5EX09QVElP
TlNfTk9ORSwgMSk7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBn
X2Fzc2VydCh0ZXN0LT5tX21hdGNoQ291bnQgPT0gR19NQVhVSU5UKTsKKyAgICBnX2Fzc2VydCh0
ZXN0LT5tX3RleHRGb3VuZCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RGaW5kQ29udHJvbGxlck5l
eHQoRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3Qt
PmxvYWRIdG1sKHRlc3RTdHJpbmcsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hl
ZCgpOworCisgICAgdGVzdC0+ZmluZCgidGVzdGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9O
RSwgMik7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2Vy
dCh0ZXN0LT5tX3RleHRGb3VuZCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09
IDIpOworCisgICAgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfbmV4dCh0ZXN0LT5tX2Zp
bmRDb250cm9sbGVyLmdldCgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsK
KworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5t
X21hdGNoQ291bnQgPT0gMSk7CisgICAgZ19hc3NlcnQoISh3ZWJraXRfZmluZF9jb250cm9sbGVy
X2dldF9vcHRpb25zKHRlc3QtPm1fZmluZENvbnRyb2xsZXIuZ2V0KCkpICYgV0VCS0lUX0ZJTkRf
T1BUSU9OU19CQUNLV0FSRFMpKTsKKworICAgIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNo
X25leHQodGVzdC0+bV9maW5kQ29udHJvbGxlci5nZXQoKSk7CisgICAgdGVzdC0+d2FpdFVudGls
RmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCghdGVzdC0+bV90ZXh0Rm91bmQpOworICAg
IGdfYXNzZXJ0KHRlc3QtPm1fbWF0Y2hDb3VudCA9PSAxKTsKKyAgICBnX2Fzc2VydCghKHdlYmtp
dF9maW5kX2NvbnRyb2xsZXJfZ2V0X29wdGlvbnModGVzdC0+bV9maW5kQ29udHJvbGxlci5nZXQo
KSkgJiBXRUJLSVRfRklORF9PUFRJT05TX0JBQ0tXQVJEUykpOworfQorCitzdGF0aWMgdm9pZCB0
ZXN0RmluZENvbnRyb2xsZXJQcmV2aW91cyhGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25z
dHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwodGVzdFN0cmluZywgMCk7CisgICAgdGVz
dC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5maW5kKCJ0ZXN0aW5nIiwg
V0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmlu
aXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPm1fbWF0Y2hDb3VudCA9PSAyKTsKKyAgICBn
X2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7CisKKyAgICB3ZWJraXRfZmluZF9jb250cm9sbGVy
X3NlYXJjaF9uZXh0KHRlc3QtPm1fZmluZENvbnRyb2xsZXIuZ2V0KCkpOworICAgIHRlc3QtPndh
aXRVbnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQp
OworICAgIGdfYXNzZXJ0KHRlc3QtPm1fbWF0Y2hDb3VudCA9PSAxKTsKKyAgICBnX2Fzc2VydCgh
KHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X29wdGlvbnModGVzdC0+bV9maW5kQ29udHJvbGxl
ci5nZXQoKSkgJiBXRUJLSVRfRklORF9PUFRJT05TX0JBQ0tXQVJEUykpOworCisgICAgd2Via2l0
X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfcHJldmlvdXModGVzdC0+bV9maW5kQ29udHJvbGxlci5n
ZXQoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2Vy
dCh0ZXN0LT5tX3RleHRGb3VuZCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09
IDEpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X29wdGlvbnModGVz
dC0+bV9maW5kQ29udHJvbGxlci5nZXQoKSkgJiBXRUJLSVRfRklORF9PUFRJT05TX0JBQ0tXQVJE
Uyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RGaW5kQ29udHJvbGxlckNvdW50ZWRNYXRjaGVzKEZp
bmRDb250cm9sbGVyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2Fk
SHRtbCh0ZXN0U3RyaW5nLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsK
KworICAgIHRlc3QtPmNvdW50KCJ0ZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAy
KTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRl
c3QtPm1fbWF0Y2hDb3VudCA9PSAyKTsKKworICAgIHRlc3QtPmNvdW50KCJmaXJzdCIsIFdFQktJ
VF9GSU5EX09QVElPTlNfTk9ORSwgMik7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVk
KCk7CisKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX21hdGNoQ291bnQgPT0gMSk7CisKKyAgICB0ZXN0
LT5jb3VudCgibm90Rm91bmQiLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUsIDIpOworICAgIHRl
c3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQoIXRlc3QtPm1fbWF0
Y2hDb3VudCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RGaW5kQ29udHJvbGxlck9wdGlvbnMoRmlu
ZENvbnRyb2xsZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRI
dG1sKHRlc3RTdHJpbmcsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwor
CisgICAgdGVzdC0+ZmluZCgiVGVzdGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwgMik7
CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCghdGVz
dC0+bV90ZXh0Rm91bmQpOworCisgICAgdGVzdC0+ZmluZCgiVGVzdGluZyIsIFdFQktJVF9GSU5E
X09QVElPTlNfQ0FTRV9JTlNFTlNJVElWRSwgMik7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZp
bmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7CisKKyAgICB0ZXN0
LT5maW5kKCJlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUsIDIpOworICAgIHRlc3Qt
PndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91
bmQpOworCisgICAgdGVzdC0+ZmluZCgiZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19BVF9X
T1JEX1NUQVJUUywgMik7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAg
ICBnX2Fzc2VydCghdGVzdC0+bV90ZXh0Rm91bmQpOworCisgICAgdGVzdC0+ZmluZCgiSGFsZiIs
IFdFQktJVF9GSU5EX09QVElPTlNfQVRfV09SRF9TVEFSVFMsIDIpOworICAgIHRlc3QtPndhaXRV
bnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQoIXRlc3QtPm1fdGV4dEZvdW5kKTsK
KworICAgIHRlc3QtPmZpbmQoIkhhbGYiLCBXRUJLSVRfRklORF9PUFRJT05TX0FUX1dPUkRfU1RB
UlRTIHwgV0VCS0lUX0ZJTkRfT1BUSU9OU19UUkVBVF9NRURJQUxfQ0FQSVRBTF9BU19XT1JEX1NU
QVJULCAyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNz
ZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKKworICAgIHRlc3QtPmZpbmQoInRlc3RpbmciLCBXRUJL
SVRfRklORF9PUFRJT05TX1dSQVBfQVJPVU5ELCAzKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5k
RmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7CisKKyAgICB3ZWJr
aXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF9uZXh0KHRlc3QtPm1fZmluZENvbnRyb2xsZXIuZ2V0
KCkpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0KHRl
c3QtPm1fdGV4dEZvdW5kKTsKKworICAgIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX25l
eHQodGVzdC0+bV9maW5kQ29udHJvbGxlci5nZXQoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsRmlu
ZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOworfQorCitzdGF0
aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xsZXJIaWRlKEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0U3RyaW5nLCAwKTsKKyAg
ICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3QtPnNob3dJbldpbmRv
d0FuZFdhaXRVbnRpbE1hcHBlZCgpOworCisgICAgY2Fpcm9fc3VyZmFjZV90KiBvcmlnaW5hbFN1
cmZhY2UgPSBjYWlyb19zdXJmYWNlX3JlZmVyZW5jZSgKKyAgICAgICAgdGVzdC0+Z2V0U25hcHNo
b3RBbmRXYWl0VW50aWxSZWFkeShXRUJLSVRfU05BUFNIT1RfUkVHSU9OX0ZVTExfRE9DVU1FTlQs
IFdFQktJVF9TTkFQU0hPVF9PUFRJT05TX05PTkUpKTsKKyAgICBnX2Fzc2VydChvcmlnaW5hbFN1
cmZhY2UpOworCisgICAgdGVzdC0+ZmluZCgidGVzdGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNf
Tk9ORSwgMSk7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisgICAgZ19hc3Nl
cnQodGVzdC0+bV90ZXh0Rm91bmQpOworCisgICAgY2Fpcm9fc3VyZmFjZV90KiBoaWdobGlnaHRT
dXJmYWNlID0gY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2UoCisgICAgICAgIHRlc3QtPmdldFNuYXBz
aG90QW5kV2FpdFVudGlsUmVhZHkoV0VCS0lUX1NOQVBTSE9UX1JFR0lPTl9GVUxMX0RPQ1VNRU5U
LCBXRUJLSVRfU05BUFNIT1RfT1BUSU9OU19OT05FKSk7CisgICAgZ19hc3NlcnQoaGlnaGxpZ2h0
U3VyZmFjZSk7CisgICAgZ19hc3NlcnQoIVRlc3Q6OmNhaXJvU3VyZmFjZXNFcXVhbChvcmlnaW5h
bFN1cmZhY2UsIGhpZ2hsaWdodFN1cmZhY2UpKTsKKworICAgIFdlYktpdEZpbmRDb250cm9sbGVy
KiBmaW5kQ29udHJvbGxlciA9IHdlYmtpdF93ZWJfdmlld19nZXRfZmluZF9jb250cm9sbGVyKHRl
c3QtPm1fd2ViVmlldyk7CisgICAgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfZmluaXNo
KGZpbmRDb250cm9sbGVyKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfZXhlY3V0ZV9lZGl0aW5nX2Nv
bW1hbmQodGVzdC0+bV93ZWJWaWV3LCAiVW5zZWxlY3QiKTsKKworICAgIGNhaXJvX3N1cmZhY2Vf
dCogdW5oaWdobGlnaHRTdXJmYWNlID0gY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2UoCisgICAgICAg
IHRlc3QtPmdldFNuYXBzaG90QW5kV2FpdFVudGlsUmVhZHkoV0VCS0lUX1NOQVBTSE9UX1JFR0lP
Tl9GVUxMX0RPQ1VNRU5ULCBXRUJLSVRfU05BUFNIT1RfT1BUSU9OU19OT05FKSk7CisgICAgZ19h
c3NlcnQodW5oaWdobGlnaHRTdXJmYWNlKTsKKyAgICBnX2Fzc2VydChUZXN0OjpjYWlyb1N1cmZh
Y2VzRXF1YWwob3JpZ2luYWxTdXJmYWNlLCB1bmhpZ2hsaWdodFN1cmZhY2UpKTsKKworICAgIGNh
aXJvX3N1cmZhY2VfZGVzdHJveShvcmlnaW5hbFN1cmZhY2UpOworICAgIGNhaXJvX3N1cmZhY2Vf
ZGVzdHJveShoaWdobGlnaHRTdXJmYWNlKTsKKyAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3kodW5o
aWdobGlnaHRTdXJmYWNlKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVySW5z
dGFuY2UoRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIFdl
YktpdEZpbmRDb250cm9sbGVyKiBmaW5kQ29udHJvbGxlcjEgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X2ZpbmRfY29udHJvbGxlcih0ZXN0LT5tX3dlYlZpZXcpOworICAgIFdlYktpdEZpbmRDb250cm9s
bGVyKiBmaW5kQ29udHJvbGxlcjIgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ZpbmRfY29udHJvbGxl
cih0ZXN0LT5tX3dlYlZpZXcpOworCisgICAgZ19hc3NlcnQoZmluZENvbnRyb2xsZXIxID09IGZp
bmRDb250cm9sbGVyMik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RGaW5kQ29udHJvbGxlckdldHRl
cnMoRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIGNvbnN0
IGNoYXIqIHNlYXJjaFRleHQgPSAidGVzdGluZyI7CisgICAgZ3VpbnQgbWF4TWF0Y2hDb3VudCA9
IDE7CisgICAgZ3VpbnQzMiBmaW5kT3B0aW9ucyA9IFdFQktJVF9GSU5EX09QVElPTlNfV1JBUF9B
Uk9VTkQgfCBXRUJLSVRfRklORF9PUFRJT05TX0FUX1dPUkRfU1RBUlRTOworICAgIFdlYktpdEZp
bmRDb250cm9sbGVyKiBmaW5kQ29udHJvbGxlciA9IHdlYmtpdF93ZWJfdmlld19nZXRfZmluZF9j
b250cm9sbGVyKHRlc3QtPm1fd2ViVmlldyk7CisKKyAgICB3ZWJraXRfZmluZF9jb250cm9sbGVy
X3NlYXJjaChmaW5kQ29udHJvbGxlciwgc2VhcmNoVGV4dCwgZmluZE9wdGlvbnMsIG1heE1hdGNo
Q291bnQpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X3dlYl92aWV3
KGZpbmRDb250cm9sbGVyKSA9PSB0ZXN0LT5tX3dlYlZpZXcpOworICAgIGdfYXNzZXJ0KCFnX3N0
cmNtcDAod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfc2VhcmNoX3RleHQoZmluZENvbnRyb2xs
ZXIpLCBzZWFyY2hUZXh0KSk7CisgICAgZ19hc3NlcnQod2Via2l0X2ZpbmRfY29udHJvbGxlcl9n
ZXRfbWF4X21hdGNoX2NvdW50KGZpbmRDb250cm9sbGVyKSA9PSBtYXhNYXRjaENvdW50KTsKKyAg
ICBnX2Fzc2VydCh3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9vcHRpb25zKGZpbmRDb250cm9s
bGVyKSA9PSBmaW5kT3B0aW9ucyk7Cit9CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICBGaW5k
Q29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIiLCAiZ2V0dGVycyIsIHRl
c3RGaW5kQ29udHJvbGxlckdldHRlcnMpOworICAgIEZpbmRDb250cm9sbGVyVGVzdDo6YWRkKCJX
ZWJLaXRGaW5kQ29udHJvbGxlciIsICJpbnN0YW5jZSIsIHRlc3RGaW5kQ29udHJvbGxlckluc3Rh
bmNlKTsKKyAgICBGaW5kQ29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIi
LCAidGV4dC1mb3VuZCIsIHRlc3RGaW5kQ29udHJvbGxlclRleHRGb3VuZCk7CisgICAgRmluZENv
bnRyb2xsZXJUZXN0OjphZGQoIldlYktpdEZpbmRDb250cm9sbGVyIiwgInRleHQtbm90LWZvdW5k
IiwgdGVzdEZpbmRDb250cm9sbGVyVGV4dE5vdEZvdW5kKTsKKyAgICBGaW5kQ29udHJvbGxlclRl
c3Q6OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIiLCAibWF0Y2gtY291bnQiLCB0ZXN0RmluZENv
bnRyb2xsZXJNYXRjaENvdW50KTsKKyAgICBGaW5kQ29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0
RmluZENvbnRyb2xsZXIiLCAibWF4LW1hdGNoLWNvdW50IiwgdGVzdEZpbmRDb250cm9sbGVyTWF4
TWF0Y2hDb3VudCk7CisgICAgRmluZENvbnRyb2xsZXJUZXN0OjphZGQoIldlYktpdEZpbmRDb250
cm9sbGVyIiwgIm5leHQiLCB0ZXN0RmluZENvbnRyb2xsZXJOZXh0KTsKKyAgICBGaW5kQ29udHJv
bGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIiLCAicHJldmlvdXMiLCB0ZXN0Rmlu
ZENvbnRyb2xsZXJQcmV2aW91cyk7CisgICAgRmluZENvbnRyb2xsZXJUZXN0OjphZGQoIldlYktp
dEZpbmRDb250cm9sbGVyIiwgImNvdW50ZWQtbWF0Y2hlcyIsIHRlc3RGaW5kQ29udHJvbGxlckNv
dW50ZWRNYXRjaGVzKTsKKyAgICBGaW5kQ29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENv
bnRyb2xsZXIiLCAib3B0aW9ucyIsIHRlc3RGaW5kQ29udHJvbGxlck9wdGlvbnMpOworICAgIEZp
bmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udHJvbGxlciIsICJoaWRlIiwgdGVz
dEZpbmRDb250cm9sbGVySGlkZSk7Cit9CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworfQpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRQb2xp
Y3lDbGllbnQuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RX
ZWJLaXRQb2xpY3lDbGllbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjIwOWVhMDQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdDJHdGsvVGVzdFdlYktpdFBvbGljeUNsaWVudC5jcHAKQEAgLTAsMCArMSwyNjcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaW5jbHVkZSAiTG9hZFRyYWNraW5nVGVzdC5oIgorI2luY2x1ZGUgIldlYktpdFRlc3RTZXJ2
ZXIuaCIKKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorCitzdGF0aWMgV2ViS2l0VGVzdFNlcnZlcioga1NlcnZlcjsKKworY2xh
c3MgUG9saWN5Q2xpZW50VGVzdDogcHVibGljIExvYWRUcmFja2luZ1Rlc3QgeworcHVibGljOgor
ICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoUG9saWN5Q2xpZW50VGVzdCk7CisKKyAgICBlbnVt
IFBvbGljeURlY2lzaW9uUmVzcG9uc2UgeworICAgICAgICBVc2UsCisgICAgICAgIElnbm9yZSwK
KyAgICAgICAgRG93bmxvYWQsCisgICAgICAgIE5vbmUKKyAgICB9OworCisgICAgUG9saWN5Q2xp
ZW50VGVzdCgpCisgICAgICAgIDogTG9hZFRyYWNraW5nVGVzdCgpCisgICAgICAgICwgbV9wb2xp
Y3lEZWNpc2lvblJlc3BvbnNlKE5vbmUpCisgICAgICAgICwgbV9wb2xpY3lEZWNpc2lvblR5cGVG
aWx0ZXIoMCkKKyAgICAgICAgLCBtX3Jlc3BvbmRUb1BvbGljeURlY2lzaW9uQXN5bmNocm9ub3Vz
bHkoZmFsc2UpCisgICAgICAgICwgbV9oYWx0TWFpbkxvb3BBZnRlck1ha2luZ0RlY2lzaW9uKGZh
bHNlKQorICAgIHsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJkZWNpZGUt
cG9saWN5IiwgR19DQUxMQkFDSyhkZWNpZGVQb2xpY3lDYWxsYmFjayksIHRoaXMpOworICAgIH0K
KworICAgIHN0YXRpYyBnYm9vbGVhbiBxdWl0TWFpbkxvb3BMYXRlcihHTWFpbkxvb3AqIGxvb3Ap
CisgICAgeworICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworICAgICAgICByZXR1cm4g
RkFMU0U7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVzcG9uZFRvUG9saWN5RGVjaXNpb24o
UG9saWN5Q2xpZW50VGVzdCogdGVzdCwgV2ViS2l0UG9saWN5RGVjaXNpb24qIGRlY2lzaW9uKQor
ICAgIHsKKyAgICAgICAgc3dpdGNoICh0ZXN0LT5tX3BvbGljeURlY2lzaW9uUmVzcG9uc2UpIHsK
KyAgICAgICAgY2FzZSBVc2U6CisgICAgICAgICAgICB3ZWJraXRfcG9saWN5X2RlY2lzaW9uX3Vz
ZShkZWNpc2lvbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJZ25vcmU6Cisg
ICAgICAgICAgICB3ZWJraXRfcG9saWN5X2RlY2lzaW9uX2lnbm9yZShkZWNpc2lvbik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEb3dubG9hZDoKKyAgICAgICAgICAgIHdlYmtp
dF9wb2xpY3lfZGVjaXNpb25fZG93bmxvYWQoZGVjaXNpb24pOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgTm9uZToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKHRlc3QtPm1faGFsdE1haW5Mb29wQWZ0ZXJNYWtpbmdEZWNpc2lvbikKKyAgICAg
ICAgICAgIGdfaWRsZV9hZGQocmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4ocXVpdE1haW5M
b29wTGF0ZXIpLCB0ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xl
YW4gcmVzcG9uZFRvUG9saWN5RGVjaXNpb25MYXRlcihQb2xpY3lDbGllbnRUZXN0KiB0ZXN0KQor
ICAgIHsKKyAgICAgICAgcmVzcG9uZFRvUG9saWN5RGVjaXNpb24odGVzdCwgdGVzdC0+bV9wcmV2
aW91c1BvbGljeURlY2lzaW9uLmdldCgpKTsKKyAgICAgICAgdGVzdC0+bV9wcmV2aW91c1BvbGlj
eURlY2lzaW9uID0gMDsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIHN0YXRp
YyBnYm9vbGVhbiBkZWNpZGVQb2xpY3lDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBX
ZWJLaXRQb2xpY3lEZWNpc2lvbiogZGVjaXNpb24sIFdlYktpdFBvbGljeURlY2lzaW9uVHlwZSB0
eXBlLCBQb2xpY3lDbGllbnRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgaWYgKHRlc3QtPm1f
cG9saWN5RGVjaXNpb25UeXBlRmlsdGVyICE9IHR5cGUpCisgICAgICAgICAgICByZXR1cm4gRkFM
U0U7CisKKyAgICAgICAgdGVzdC0+bV9wcmV2aW91c1BvbGljeURlY2lzaW9uID0gZGVjaXNpb247
CisgICAgICAgIGlmICh0ZXN0LT5tX3Jlc3BvbmRUb1BvbGljeURlY2lzaW9uQXN5bmNocm9ub3Vz
bHkpIHsKKyAgICAgICAgICAgIGdfaWRsZV9hZGQocmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVu
Yz4ocmVzcG9uZFRvUG9saWN5RGVjaXNpb25MYXRlciksIHRlc3QpOworICAgICAgICAgICAgcmV0
dXJuIFRSVUU7CisgICAgICAgIH0KKworICAgICAgICByZXNwb25kVG9Qb2xpY3lEZWNpc2lvbih0
ZXN0LCBkZWNpc2lvbik7CisKKyAgICAgICAgLy8gV2UgcmV0dXJuIEZBTFNFIGhlcmUgdG8gZW5z
dXJlIHRoYXQgdGhlIGRlZmF1bHQgcG9saWN5IGRlY2lzaW9uCisgICAgICAgIC8vIGhhbmRsZXIg
ZG9lc24ndCBvdmVycmlkZSB3aGF0ZXZlciB3ZSB1c2UgaGVyZS4KKyAgICAgICAgcmV0dXJuIEZB
TFNFOworICAgIH0KKworICAgIFBvbGljeURlY2lzaW9uUmVzcG9uc2UgbV9wb2xpY3lEZWNpc2lv
blJlc3BvbnNlOworICAgIGludCBtX3BvbGljeURlY2lzaW9uVHlwZUZpbHRlcjsKKyAgICBib29s
IG1fcmVzcG9uZFRvUG9saWN5RGVjaXNpb25Bc3luY2hyb25vdXNseTsKKyAgICBib29sIG1faGFs
dE1haW5Mb29wQWZ0ZXJNYWtpbmdEZWNpc2lvbjsKKyAgICBHUmVmUHRyPFdlYktpdFBvbGljeURl
Y2lzaW9uPiBtX3ByZXZpb3VzUG9saWN5RGVjaXNpb247Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0
TmF2aWdhdGlvblBvbGljeShQb2xpY3lDbGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQor
eworICAgIHRlc3QtPm1fcG9saWN5RGVjaXNpb25UeXBlRmlsdGVyID0gV0VCS0lUX1BPTElDWV9E
RUNJU0lPTl9UWVBFX05BVklHQVRJT05fQUNUSU9OOworCisgICAgdGVzdC0+bV9wb2xpY3lEZWNp
c2lvblJlc3BvbnNlID0gUG9saWN5Q2xpZW50VGVzdDo6VXNlOworICAgIHRlc3QtPmxvYWRIdG1s
KCI8aHRtbC8+IiwgImh0dHA6Ly93ZWJraXRndGsub3JnLyIpOworICAgIHRlc3QtPndhaXRVbnRp
bExvYWRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHMu
c2l6ZSgpLCA9PSwgMyk7CisKKyAgICAvLyBJZGVhbGx5IHdlJ2QgbGlrZSB0byBoYXZlIGEgbW9y
ZSBpbnRlbnNpdmUgdGVzdCBoZXJlLCBidXQgaXQncyBzdGlsbCBwcmV0dHkgdHJpY2t5CisgICAg
Ly8gdG8gdHJpZ2dlciBkaWZmZXJlbnQgdHlwZXMgb2YgbmF2aWdhdGlvbnMgd2l0aCB0aGUgR1RL
KyBXZWJLaXQyIEFQSS4KKyAgICBXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24qIGRlY2lz
aW9uID0gV0VCS0lUX05BVklHQVRJT05fUE9MSUNZX0RFQ0lTSU9OKHRlc3QtPm1fcHJldmlvdXNQ
b2xpY3lEZWNpc2lvbi5nZXQoKSk7CisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9uYXZpZ2F0
aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRfbmF2aWdhdGlvbl90eXBlKGRlY2lzaW9uKSwgPT0sIFdF
QktJVF9OQVZJR0FUSU9OX1RZUEVfT1RIRVIpOworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRf
bmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0X21vdXNlX2J1dHRvbihkZWNpc2lvbiksID09
LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lz
aW9uX2dldF9tb2RpZmllcnMoZGVjaXNpb24pLCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21wc3Ry
KHdlYmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRfZnJhbWVfbmFtZShkZWNpc2lv
biksID09LCAwKTsKKyAgICBXZWJLaXRVUklSZXF1ZXN0KiByZXF1ZXN0ID0gd2Via2l0X25hdmln
YXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF9yZXF1ZXN0KGRlY2lzaW9uKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X3VyaV9yZXF1ZXN0X2dldF91cmkocmVxdWVzdCksID09LCAiaHR0cDov
L3dlYmtpdGd0ay5vcmcvIik7CisKKyAgICB0ZXN0LT5tX3BvbGljeURlY2lzaW9uUmVzcG9uc2Ug
PSBQb2xpY3lDbGllbnRUZXN0OjpVc2U7CisgICAgdGVzdC0+bV9yZXNwb25kVG9Qb2xpY3lEZWNp
c2lvbkFzeW5jaHJvbm91c2x5ID0gdHJ1ZTsKKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWwvPiIs
ICJodHRwOi8vd2Via2l0Z3RrLm9yZy8iKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNo
ZWQoKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0s
IDMpOworCisgICAgLy8gSWYgd2UgYXJlIHdhaXRpbmcgdW50aWwgbG9hZCBjb21wbGV0aW9uLCBp
dCB3aWxsIG5ldmVyIGNvbXBsZXRlIGlmIHdlIGlnbm9yZSB0aGUKKyAgICAvLyBuYXZpZ2F0aW9u
LiBTbyB3ZSB0ZWxsIHRoZSBtYWluIGxvb3AgdG8gcXVpdCBzb21ldGltZSBsYXRlci4KKyAgICB0
ZXN0LT5tX3BvbGljeURlY2lzaW9uUmVzcG9uc2UgPSBQb2xpY3lDbGllbnRUZXN0OjpJZ25vcmU7
CisgICAgdGVzdC0+bV9yZXNwb25kVG9Qb2xpY3lEZWNpc2lvbkFzeW5jaHJvbm91c2x5ID0gZmFs
c2U7CisgICAgdGVzdC0+bV9oYWx0TWFpbkxvb3BBZnRlck1ha2luZ0RlY2lzaW9uID0gdHJ1ZTsK
KyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWwvPiIsICJodHRwOi8vd2Via2l0Z3RrLm9yZy8iKTsK
KyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
dGVzdC0+bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0sIDApOworCisgICAgdGVzdC0+bV9wb2xpY3lE
ZWNpc2lvblJlc3BvbnNlID0gUG9saWN5Q2xpZW50VGVzdDo6SWdub3JlOworICAgIHRlc3QtPmxv
YWRIdG1sKCI8aHRtbC8+IiwgImh0dHA6Ly93ZWJraXRndGsub3JnLyIpOworICAgIHRlc3QtPndh
aXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRF
dmVudHMuc2l6ZSgpLCA9PSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RSZXNwb25zZVBvbGlj
eShQb2xpY3lDbGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPm1f
cG9saWN5RGVjaXNpb25UeXBlRmlsdGVyID0gV0VCS0lUX1BPTElDWV9ERUNJU0lPTl9UWVBFX1JF
U1BPTlNFOworCisgICAgdGVzdC0+bV9wb2xpY3lEZWNpc2lvblJlc3BvbnNlID0gUG9saWN5Q2xp
ZW50VGVzdDo6VXNlOworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgi
LyIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZ19h
c3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50cy5zaXplKCksID09LCAzKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6
UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9h
ZEV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRDb21taXR0ZWQpOworICAgIGdf
YXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMl0sID09LCBMb2FkVHJhY2tpbmdUZXN0
OjpMb2FkRmluaXNoZWQpOworCisgICAgV2ViS2l0UmVzcG9uc2VQb2xpY3lEZWNpc2lvbiogZGVj
aXNpb24gPSBXRUJLSVRfUkVTUE9OU0VfUE9MSUNZX0RFQ0lTSU9OKHRlc3QtPm1fcHJldmlvdXNQ
b2xpY3lEZWNpc2lvbi5nZXQoKSk7CisgICAgV2ViS2l0VVJJUmVxdWVzdCogcmVxdWVzdCA9IHdl
YmtpdF9yZXNwb25zZV9wb2xpY3lfZGVjaXNpb25fZ2V0X3JlcXVlc3QoZGVjaXNpb24pOworICAg
IGdfYXNzZXJ0KFdFQktJVF9JU19VUklfUkVRVUVTVChyZXF1ZXN0KSk7CisgICAgQVNTRVJUX0NN
UF9DU1RSSU5HKHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfdXJpKHJlcXVlc3QpLCA9PSwga1NlcnZl
ci0+Z2V0VVJJRm9yUGF0aCgiLyIpKTsKKyAgICBXZWJLaXRVUklSZXNwb25zZSogcmVzcG9uc2Ug
PSB3ZWJraXRfcmVzcG9uc2VfcG9saWN5X2RlY2lzaW9uX2dldF9yZXNwb25zZShkZWNpc2lvbik7
CisgICAgZ19hc3NlcnQoV0VCS0lUX0lTX1VSSV9SRVNQT05TRShyZXNwb25zZSkpOworICAgIEFT
U0VSVF9DTVBfQ1NUUklORyh3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF91cmkocmVzcG9uc2UpLCA9
PSwga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2Vi
X3ZpZXdfY2FuX3Nob3dfbWltZV90eXBlKHRlc3QtPm1fd2ViVmlldywgd2Via2l0X3VyaV9yZXNw
b25zZV9nZXRfbWltZV90eXBlKHJlc3BvbnNlKSkgPT0KKyAgICAgICAgd2Via2l0X3Jlc3BvbnNl
X3BvbGljeV9kZWNpc2lvbl9pc19taW1lX3R5cGVfc3VwcG9ydGVkKGRlY2lzaW9uKSk7CisKKyAg
ICB0ZXN0LT5tX3Jlc3BvbmRUb1BvbGljeURlY2lzaW9uQXN5bmNocm9ub3VzbHkgPSB0cnVlOwor
ICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7Cisg
ICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnRfY21waW50KHRl
c3QtPm1fbG9hZEV2ZW50cy5zaXplKCksID09LCAzKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVz
dC0+bV9sb2FkRXZlbnRzWzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2Fk
U3RhcnRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1sxXSwgPT0s
IExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRDb21taXR0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludCh0
ZXN0LT5tX2xvYWRFdmVudHNbMl0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQp
OworCisgICAgdGVzdC0+bV9yZXNwb25kVG9Qb2xpY3lEZWNpc2lvbkFzeW5jaHJvbm91c2x5ID0g
ZmFsc2U7CisgICAgdGVzdC0+bV9wb2xpY3lEZWNpc2lvblJlc3BvbnNlID0gUG9saWN5Q2xpZW50
VGVzdDo6SWdub3JlOworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgi
LyIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBn
X2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0sIDMpOworICAgIGdf
YXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0
OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9s
b2FkRXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkRmFpbGVk
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzJdLCA9PSwgTG9hZFRy
YWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKK30KKworc3RydWN0IENyZWF0ZUNhbGxiYWNrRGF0
YSB7CisgICAgYm9vbCB0cmllZFRvT3BlbldpbmRvdzsKKyAgICBHTWFpbkxvb3AqIG1haW5Mb29w
OworfTsKKworc3RhdGljIFdlYktpdFdlYlZpZXcqIGNyZWF0ZUNhbGxiYWNrKFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcsIENyZWF0ZUNhbGxiYWNrRGF0YSogZGF0YSkKK3sKKyAgICBkYXRhLT50cmll
ZFRvT3BlbldpbmRvdyA9IHRydWU7CisgICAgZ19tYWluX2xvb3BfcXVpdChkYXRhLT5tYWluTG9v
cCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3ROZXdXaW5kb3dQb2xpY3ko
UG9saWN5Q2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBzdGF0aWMgY29u
c3QgY2hhciogd2luZG93T3BlbmluZ0hUTUwgPQorICAgICAgICAiPGh0bWw+PGJvZHk+IgorICAg
ICAgICAiICAgIDxhIGlkPVwibGlua1wiIGhyZWY9XCJodHRwOi8vd3d3Lmdvb2dsZS5jb21cIiB0
YXJnZXQ9XCJfYmxhbmtcIj5MaW5rPC9hPiIKKyAgICAgICAgIiAgICA8c2NyaXB0PiIKKyAgICAg
ICAgIiAgICAgICAgdmFyIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ01vdXNlRXZlbnRz
Jyk7IgorICAgICAgICAiICAgICAgICBldmVudC5pbml0RXZlbnQoJ2NsaWNrJywgdHJ1ZSwgZmFs
c2UpOyIKKyAgICAgICAgIiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xpbmsnKS5k
aXNwYXRjaEV2ZW50KGV2ZW50KTsiCisgICAgICAgICIgICAgPC9zY3JpcHQ+IgorICAgICAgICAi
PC9ib2R5PjwvaHRtbD4iOworICAgIHRlc3QtPm1fcG9saWN5RGVjaXNpb25UeXBlRmlsdGVyID0g
V0VCS0lUX1BPTElDWV9ERUNJU0lPTl9UWVBFX05FV19XSU5ET1dfQUNUSU9OOworICAgIHdlYmtp
dF9zZXR0aW5nc19zZXRfamF2YXNjcmlwdF9jYW5fb3Blbl93aW5kb3dzX2F1dG9tYXRpY2FsbHko
d2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh0ZXN0LT5tX3dlYlZpZXcpLCBUUlVFKTsKKwor
ICAgIENyZWF0ZUNhbGxiYWNrRGF0YSBkYXRhOworICAgIGRhdGEudHJpZWRUb09wZW5XaW5kb3cg
PSBmYWxzZTsKKyAgICBkYXRhLm1haW5Mb29wID0gdGVzdC0+bV9tYWluTG9vcDsKKworICAgIGdf
c2lnbmFsX2Nvbm5lY3QodGVzdC0+bV93ZWJWaWV3LCAiY3JlYXRlIiwgR19DQUxMQkFDSyhjcmVh
dGVDYWxsYmFjayksICZkYXRhKTsKKyAgICB0ZXN0LT5tX3BvbGljeURlY2lzaW9uUmVzcG9uc2Ug
PSBQb2xpY3lDbGllbnRUZXN0OjpVc2U7CisgICAgdGVzdC0+bG9hZEh0bWwod2luZG93T3Blbmlu
Z0hUTUwsICJodHRwOi8vd2Via2l0Z3RrLm9yZy8iKTsKKyAgICB0ZXN0LT53YWl0KDEpOworICAg
IGdfYXNzZXJ0KGRhdGEudHJpZWRUb09wZW5XaW5kb3cpOworCisgICAgV2ViS2l0TmF2aWdhdGlv
blBvbGljeURlY2lzaW9uKiBkZWNpc2lvbiA9IFdFQktJVF9OQVZJR0FUSU9OX1BPTElDWV9ERUNJ
U0lPTih0ZXN0LT5tX3ByZXZpb3VzUG9saWN5RGVjaXNpb24uZ2V0KCkpOworICAgIGdfYXNzZXJ0
X2NtcHN0cih3ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0X2ZyYW1lX25hbWUo
ZGVjaXNpb24pLCA9PSwgIl9ibGFuayIpOworCisgICAgLy8gVXNpbmcgYSBzaG9ydCB0aW1lb3V0
IGlzIGEgYml0IHVnbHkgaGVyZSwgYnV0IGl0J3MgaGFyZCB0byBnZXQgYXJvdW5kIGJlY2F1c2Ug
aWYgd2UgYmxvY2sKKyAgICAvLyB0aGUgbmV3IHdpbmRvdyBzaWduYWwgd2UgY2Fubm90IGhhbHQg
dGhlIG1haW4gbG9vcCBpbiB0aGUgY3JlYXRlIGNhbGxiYWNrLiBJZiB3ZQorICAgIC8vIGhhbHQg
dGhlIG1haW4gbG9vcCBpbiB0aGUgcG9saWN5IGRlY2lzaW9uLCB0aGUgY3JlYXRlIGNhbGxiYWNr
IG5ldmVyIGV4ZWN1dGVzLgorICAgIGRhdGEudHJpZWRUb09wZW5XaW5kb3cgPSBmYWxzZTsKKyAg
ICB0ZXN0LT5tX3BvbGljeURlY2lzaW9uUmVzcG9uc2UgPSBQb2xpY3lDbGllbnRUZXN0OjpJZ25v
cmU7CisgICAgdGVzdC0+bG9hZEh0bWwod2luZG93T3BlbmluZ0hUTUwsICJodHRwOi8vd2Via2l0
Z3RrLm9yZy8iKTsKKyAgICB0ZXN0LT53YWl0KC4yKTsKKyAgICBnX2Fzc2VydCghZGF0YS50cmll
ZFRvT3BlbldpbmRvdyk7Cit9CisKK3N0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2
ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNo
VGFibGUqLCBTb3VwQ2xpZW50Q29udGV4dCosIGdwb2ludGVyKQoreworICAgIGlmIChtZXNzYWdl
LT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRf
c3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi8iKSkgeworICAgICAg
ICBzdGF0aWMgY29uc3QgY2hhciogcmVzcG9uc2VTdHJpbmcgPSAiPGh0bWw+PGJvZHk+VGVzdGlu
ZyE8L2JvZHk+PC9odG1sPiI7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3Nh
Z2UsIFNPVVBfU1RBVFVTX09LKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1l
c3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgcmVzcG9uc2VTdHJpbmcs
IHN0cmxlbihyZXNwb25zZVN0cmluZykpOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21w
bGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKKyAgICB9IGVsc2UKKyAgICAgICAgc291cF9t
ZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0ZPVU5EKTsKK30KKwor
dm9pZCBiZWZvcmVBbGwoKQoreworICAgIGtTZXJ2ZXIgPSBuZXcgV2ViS2l0VGVzdFNlcnZlcigp
OworICAgIGtTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFjayk7CisKKyAgICBQb2xpY3lDbGllbnRU
ZXN0OjphZGQoIldlYktpdFBvbGljeUNsaWVudCIsICJuYXZpZ2F0aW9uLXBvbGljeSIsIHRlc3RO
YXZpZ2F0aW9uUG9saWN5KTsKKyAgICBQb2xpY3lDbGllbnRUZXN0OjphZGQoIldlYktpdFBvbGlj
eUNsaWVudCIsICJyZXNwb25zZS1wb2xpY3kiLCB0ZXN0UmVzcG9uc2VQb2xpY3kpOworICAgIFBv
bGljeUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0UG9saWN5Q2xpZW50IiwgIm5ldy13aW5kb3ctcG9s
aWN5IiwgdGVzdE5ld1dpbmRvd1BvbGljeSk7Cit9CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworICAg
IGRlbGV0ZSBrU2VydmVyOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRTZXR0aW5ncy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFNldHRpbmdzLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5jMWQzMDE4Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRTZXR0aW5ncy5jcHAKQEAgLTAs
MCArMSwzNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgTW90b3JvbGEgTW9iaWxpdHks
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlv
biwgCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZSBtZXQ6CisgKgorICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyAqIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90
aWNlLCAKKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIAorICogb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IAorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCAK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIAorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSAKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIAorICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIAorICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaW5jbHVkZSAiVGVzdE1haW4uaCIKKyNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgorI2luY2x1
ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8
d2Via2l0Mi93ZWJraXQyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCitz
dGF0aWMgV2ViS2l0VGVzdFNlcnZlciogZ1NlcnZlcjsKKworc3RhdGljIHZvaWQgdGVzdFdlYktp
dFNldHRpbmdzKFRlc3QqLCBnY29uc3Rwb2ludGVyKQoreworICAgIFdlYktpdFNldHRpbmdzKiBz
ZXR0aW5ncyA9IHdlYmtpdF9zZXR0aW5nc19uZXcoKTsKKworICAgIC8vIEphdmFTY3JpcHQgaXMg
ZW5hYmxlZCBieSBkZWZhdWx0LgorICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5h
YmxlX2phdmFzY3JpcHQoc2V0dGluZ3MpKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJs
ZV9qYXZhc2NyaXB0KHNldHRpbmdzLCBGQUxTRSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0
aW5nc19nZXRfZW5hYmxlX2phdmFzY3JpcHQoc2V0dGluZ3MpKTsKKworICAgIC8vIEJ5IGRlZmF1
bHQgYXV0by1sb2FkLWltYWdlIGlzIHRydWUuCisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdz
X2dldF9hdXRvX2xvYWRfaW1hZ2VzKHNldHRpbmdzKSk7CisgICAgd2Via2l0X3NldHRpbmdzX3Nl
dF9hdXRvX2xvYWRfaW1hZ2VzKHNldHRpbmdzLCBGQUxTRSk7CisgICAgZ19hc3NlcnQoIXdlYmtp
dF9zZXR0aW5nc19nZXRfYXV0b19sb2FkX2ltYWdlcyhzZXR0aW5ncykpOworCisgICAgLy8gbG9h
ZC1pY29ucy1pZ25vcmluZy1pbWFnZS1sb2FkLXNldHRpbmcgaXMgZmFsc2UgYnkgZGVmYXVsdC4K
KyAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9sb2FkX2ljb25zX2lnbm9yaW5nX2lt
YWdlX2xvYWRfc2V0dGluZyhzZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfbG9h
ZF9pY29uc19pZ25vcmluZ19pbWFnZV9sb2FkX3NldHRpbmcoc2V0dGluZ3MsIFRSVUUpOworICAg
IGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfbG9hZF9pY29uc19pZ25vcmluZ19pbWFnZV9s
b2FkX3NldHRpbmcoc2V0dGluZ3MpKTsKKyAgICAKKyAgICAvLyBPZmZsaW5lIGFwcGxpY2F0aW9u
IGNhY2hlIGlzIHRydWUgYnkgZGVmYXVsdC4KKyAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3Nf
Z2V0X2VuYWJsZV9vZmZsaW5lX3dlYl9hcHBsaWNhdGlvbl9jYWNoZShzZXR0aW5ncykpOworICAg
IHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX29mZmxpbmVfd2ViX2FwcGxpY2F0aW9uX2NhY2hl
KHNldHRpbmdzLCBGQUxTRSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5h
YmxlX29mZmxpbmVfd2ViX2FwcGxpY2F0aW9uX2NhY2hlKHNldHRpbmdzKSk7CisKKyAgICAvLyBM
b2NhbCBzdG9yYWdlIGlzIGVuYWJsZSBieSBkZWZhdWx0LgorICAgIGdfYXNzZXJ0KHdlYmtpdF9z
ZXR0aW5nc19nZXRfZW5hYmxlX2h0bWw1X2xvY2FsX3N0b3JhZ2Uoc2V0dGluZ3MpKTsKKyAgICB3
ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9odG1sNV9sb2NhbF9zdG9yYWdlKHNldHRpbmdzLCBG
QUxTRSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2h0bWw1X2xv
Y2FsX3N0b3JhZ2Uoc2V0dGluZ3MpKTsKKworICAgIC8vIEhUTUw1IGRhdGFiYXNlIGlzIGVuYWJs
ZWQgYnkgZGVmYXVsdC4KKyAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9o
dG1sNV9kYXRhYmFzZShzZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxl
X2h0bWw1X2RhdGFiYXNlKHNldHRpbmdzLCBGQUxTRSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9z
ZXR0aW5nc19nZXRfZW5hYmxlX2h0bWw1X2RhdGFiYXNlKHNldHRpbmdzKSk7CisKKyAgICAvLyBY
U1MgQXVkaXRvciBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCisgICAgZ19hc3NlcnQod2Via2l0X3Nl
dHRpbmdzX2dldF9lbmFibGVfeHNzX2F1ZGl0b3Ioc2V0dGluZ3MpKTsKKyAgICB3ZWJraXRfc2V0
dGluZ3Nfc2V0X2VuYWJsZV94c3NfYXVkaXRvcihzZXR0aW5ncywgRkFMU0UpOworICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV94c3NfYXVkaXRvcihzZXR0aW5ncykpOwor
CisgICAgLy8gRnJhbWUgZmxhdHRlbmluZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorICAgIGdf
YXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9mcmFtZV9mbGF0dGVuaW5nKHNldHRp
bmdzKSk7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfZnJhbWVfZmxhdHRlbmluZyhz
ZXR0aW5ncywgVFJVRSk7CisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVf
ZnJhbWVfZmxhdHRlbmluZyhzZXR0aW5ncykpOworCisgICAgLy8gUGx1Z2lucyBhcmUgZW5hYmxl
ZCBieSBkZWZhdWx0LgorICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3Bs
dWdpbnMoc2V0dGluZ3MpKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9wbHVnaW5z
KHNldHRpbmdzLCBGQUxTRSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5h
YmxlX3BsdWdpbnMoc2V0dGluZ3MpKTsKKworICAgIC8vIEphdmEgaXMgZW5hYmxlZCBieSBkZWZh
dWx0LgorICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2phdmEoc2V0dGlu
Z3MpKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9qYXZhKHNldHRpbmdzLCBGQUxT
RSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2phdmEoc2V0dGlu
Z3MpKTsKKworICAgIC8vIEJ5IGRlZmF1bHQsIEphdmFTY3JpcHQgY2FuIG9wZW4gd2luZG93cyBh
dXRvbWF0aWNhbGx5IGlzIGRpc2FibGVkLgorICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3Nf
Z2V0X2phdmFzY3JpcHRfY2FuX29wZW5fd2luZG93c19hdXRvbWF0aWNhbGx5KHNldHRpbmdzKSk7
CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9qYXZhc2NyaXB0X2Nhbl9vcGVuX3dpbmRvd3NfYXV0
b21hdGljYWxseShzZXR0aW5ncywgVFJVRSk7CisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdz
X2dldF9qYXZhc2NyaXB0X2Nhbl9vcGVuX3dpbmRvd3NfYXV0b21hdGljYWxseShzZXR0aW5ncykp
OworCisgICAgLy8gQnkgZGVmYXVsdCBoeXBlciBsaW5rIGF1ZGl0aW5nIGlzIGRpc2FibGVkLgor
ICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9oeXBlcmxpbmtfYXVkaXRp
bmcoc2V0dGluZ3MpKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9oeXBlcmxpbmtf
YXVkaXRpbmcoc2V0dGluZ3MsIFRSVUUpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19n
ZXRfZW5hYmxlX2h5cGVybGlua19hdWRpdGluZyhzZXR0aW5ncykpOworCisgICAgLy8gRGVmYXVs
dCBmb250IGZhbWlseSBpcyAic2Fucy1zZXJpZiIuCisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtp
dF9zZXR0aW5nc19nZXRfZGVmYXVsdF9mb250X2ZhbWlseShzZXR0aW5ncyksID09LCAic2Fucy1z
ZXJpZiIpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZGVmYXVsdF9mb250X2ZhbWlseShzZXR0
aW5ncywgIm1vbm9zcGFjZSIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2V0dGluZ3Nf
Z2V0X2RlZmF1bHRfZm9udF9mYW1pbHkoc2V0dGluZ3MpLCA9PSwgIm1vbm9zcGFjZSIpOworCisg
ICAgLy8gRGVmYXVsdCBtb25vc3BhY2UgZm9udCBmYW1pbHkgZm9udCBmYW1pbHkgaXMgIm1vbm9z
cGFjZSIuCisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zZXR0aW5nc19nZXRfbW9ub3NwYWNl
X2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJtb25vc3BhY2UiKTsKKyAgICB3ZWJraXRfc2V0
dGluZ3Nfc2V0X21vbm9zcGFjZV9mb250X2ZhbWlseShzZXR0aW5ncywgInNhbnMtc2VyaWYiKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NldHRpbmdzX2dldF9tb25vc3BhY2VfZm9udF9m
YW1pbHkoc2V0dGluZ3MpLCA9PSwgInNhbnMtc2VyaWYiKTsKKworICAgIC8vIERlZmF1bHQgc2Vy
aWYgZm9udCBmYW1pbHkgaXMgInNlcmlmIi4KKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3Nl
dHRpbmdzX2dldF9zZXJpZl9mb250X2ZhbWlseShzZXR0aW5ncyksID09LCAic2VyaWYiKTsKKyAg
ICB3ZWJraXRfc2V0dGluZ3Nfc2V0X3NlcmlmX2ZvbnRfZmFtaWx5KHNldHRpbmdzLCAic2Fucy1z
ZXJpZiIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2V0dGluZ3NfZ2V0X3NlcmlmX2Zv
bnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJzYW5zLXNlcmlmIik7CisKKyAgICAvLyBEZWZhdWx0
IHNhbnMgc2VyaWYgZm9udCBmYW1pbHkgaXMgInNhbnMtc2VyaWYiLgorICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfc2V0dGluZ3NfZ2V0X3NhbnNfc2VyaWZfZm9udF9mYW1pbHkoc2V0dGluZ3Mp
LCA9PSwgInNhbnMtc2VyaWYiKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X3NhbnNfc2VyaWZf
Zm9udF9mYW1pbHkoc2V0dGluZ3MsICJzZXJpZiIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJr
aXRfc2V0dGluZ3NfZ2V0X3NhbnNfc2VyaWZfZm9udF9mYW1pbHkoc2V0dGluZ3MpLCA9PSwgInNl
cmlmIik7CisKKyAgICAvLyBEZWZhdWx0IGN1cnNpdmUgZm9udCBmYW1pbHkgInNlcmlmIi4KKyAg
ICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NldHRpbmdzX2dldF9jdXJzaXZlX2ZvbnRfZmFtaWx5
KHNldHRpbmdzKSwgPT0sICJzZXJpZiIpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfY3Vyc2l2
ZV9mb250X2ZhbWlseShzZXR0aW5ncywgInNhbnMtc2VyaWYiKTsKKyAgICBnX2Fzc2VydF9jbXBz
dHIod2Via2l0X3NldHRpbmdzX2dldF9jdXJzaXZlX2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0s
ICJzYW5zLXNlcmlmIik7CisKKyAgICAvLyBEZWZhdWx0IGZhbnRhc3kgZm9udCBmYW1pbHkgaXMg
InNlcmlmIi4KKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NldHRpbmdzX2dldF9mYW50YXN5
X2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJzZXJpZiIpOworICAgIHdlYmtpdF9zZXR0aW5n
c19zZXRfZmFudGFzeV9mb250X2ZhbWlseShzZXR0aW5ncywgInNhbnMtc2VyaWYiKTsKKyAgICBn
X2Fzc2VydF9jbXBzdHIod2Via2l0X3NldHRpbmdzX2dldF9mYW50YXN5X2ZvbnRfZmFtaWx5KHNl
dHRpbmdzKSwgPT0sICJzYW5zLXNlcmlmIik7CisKKyAgICAvLyBEZWZhdWx0IHBpY3RvZ3JhcGgg
Zm9udCBmYW1pbHkgaXMgInNlcmlmIi4KKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NldHRp
bmdzX2dldF9waWN0b2dyYXBoX2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJzZXJpZiIpOwor
ICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfcGljdG9ncmFwaF9mb250X2ZhbWlseShzZXR0aW5ncywg
InNhbnMtc2VyaWYiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NldHRpbmdzX2dldF9w
aWN0b2dyYXBoX2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJzYW5zLXNlcmlmIik7CisKKyAg
ICAvLyBEZWZhdWx0IGZvbnQgc2l6ZSBpcyAxNi4KKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtp
dF9zZXR0aW5nc19nZXRfZGVmYXVsdF9mb250X3NpemUoc2V0dGluZ3MpLCA9PSwgMTYpOworICAg
IHdlYmtpdF9zZXR0aW5nc19zZXRfZGVmYXVsdF9mb250X3NpemUoc2V0dGluZ3MsIDE0KTsKKyAg
ICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9zZXR0aW5nc19nZXRfZGVmYXVsdF9mb250X3NpemUo
c2V0dGluZ3MpLCA9PSwgMTQpOworCisgICAgLy8gRGVmYXVsdCBtb25vc3BhY2UgZm9udCBzaXpl
IGlzIDEzLgorICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X3NldHRpbmdzX2dldF9kZWZhdWx0
X21vbm9zcGFjZV9mb250X3NpemUoc2V0dGluZ3MpLCA9PSwgMTMpOworICAgIHdlYmtpdF9zZXR0
aW5nc19zZXRfZGVmYXVsdF9tb25vc3BhY2VfZm9udF9zaXplKHNldHRpbmdzLCAxMCk7CisgICAg
Z19hc3NlcnRfY21wdWludCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2RlZmF1bHRfbW9ub3NwYWNlX2Zv
bnRfc2l6ZShzZXR0aW5ncyksID09LCAxMCk7CisKKyAgICAvLyBEZWZhdWx0IG1pbmltdW0gZm9u
dCBzaXplIGlzIDAuCisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfc2V0dGluZ3NfZ2V0X21p
bmltdW1fZm9udF9zaXplKHNldHRpbmdzKSwgPT0sIDApOworICAgIHdlYmtpdF9zZXR0aW5nc19z
ZXRfbWluaW11bV9mb250X3NpemUoc2V0dGluZ3MsIDcpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQo
d2Via2l0X3NldHRpbmdzX2dldF9taW5pbXVtX2ZvbnRfc2l6ZShzZXR0aW5ncyksID09LCA3KTsK
KworICAgIC8vIERlZmF1bHQgY2hhcnNldCBpcyAiaXNvLTg4NTktMSIuCisgICAgZ19hc3NlcnRf
Y21wc3RyKHdlYmtpdF9zZXR0aW5nc19nZXRfZGVmYXVsdF9jaGFyc2V0KHNldHRpbmdzKSwgPT0s
ICJpc28tODg1OS0xIik7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9kZWZhdWx0X2NoYXJzZXQo
c2V0dGluZ3MsICJ1dGY4Iik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zZXR0aW5nc19n
ZXRfZGVmYXVsdF9jaGFyc2V0KHNldHRpbmdzKSwgPT0sICJ1dGY4Iik7CisKKyAgICBnX2Fzc2Vy
dCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfcHJpdmF0ZV9icm93c2luZyhzZXR0aW5ncykp
OworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX3ByaXZhdGVfYnJvd3Npbmcoc2V0dGlu
Z3MsIFRSVUUpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3ByaXZh
dGVfYnJvd3Npbmcoc2V0dGluZ3MpKTsKKworICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3Nf
Z2V0X2VuYWJsZV9kZXZlbG9wZXJfZXh0cmFzKHNldHRpbmdzKSk7CisgICAgd2Via2l0X3NldHRp
bmdzX3NldF9lbmFibGVfZGV2ZWxvcGVyX2V4dHJhcyhzZXR0aW5ncywgVFJVRSk7CisgICAgZ19h
c3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfZGV2ZWxvcGVyX2V4dHJhcyhzZXR0aW5n
cykpOworCisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfcmVzaXphYmxl
X3RleHRfYXJlYXMoc2V0dGluZ3MpKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9y
ZXNpemFibGVfdGV4dF9hcmVhcyhzZXR0aW5ncywgRkFMU0UpOworICAgIGdfYXNzZXJ0KCF3ZWJr
aXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9yZXNpemFibGVfdGV4dF9hcmVhcyhzZXR0aW5ncykpOwor
CisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfdGFic190b19saW5rcyhz
ZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX3RhYnNfdG9fbGlua3Mo
c2V0dGluZ3MsIEZBTFNFKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFi
bGVfdGFic190b19saW5rcyhzZXR0aW5ncykpOworCisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0
aW5nc19nZXRfZW5hYmxlX2Ruc19wcmVmZXRjaGluZyhzZXR0aW5ncykpOworICAgIHdlYmtpdF9z
ZXR0aW5nc19zZXRfZW5hYmxlX2Ruc19wcmVmZXRjaGluZyhzZXR0aW5ncywgVFJVRSk7CisgICAg
Z19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfZG5zX3ByZWZldGNoaW5nKHNldHRp
bmdzKSk7CisKKyAgICAvLyBDYXJldCBicm93c2luZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0Lgor
ICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9jYXJldF9icm93c2luZyhz
ZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX2NhcmV0X2Jyb3dzaW5n
KHNldHRpbmdzLCBUUlVFKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJs
ZV9jYXJldF9icm93c2luZyhzZXR0aW5ncykpOworCisgICAgLy8gRnVsbHNjcmVlbiBKYXZhU2Ny
aXB0IEFQSSBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCisgICAgZ19hc3NlcnQod2Via2l0X3NldHRp
bmdzX2dldF9lbmFibGVfZnVsbHNjcmVlbihzZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5n
c19zZXRfZW5hYmxlX2Z1bGxzY3JlZW4oc2V0dGluZ3MsIEZBTFNFKTsKKyAgICBnX2Fzc2VydCgh
d2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfZnVsbHNjcmVlbihzZXR0aW5ncykpOworCisgICAg
Ly8gUHJpbnQgYmFja2dyb3VuZHMgaXMgZW5hYmxlZCBieSBkZWZhdWx0CisgICAgZ19hc3NlcnQo
d2Via2l0X3NldHRpbmdzX2dldF9wcmludF9iYWNrZ3JvdW5kcyhzZXR0aW5ncykpOworICAgIHdl
YmtpdF9zZXR0aW5nc19zZXRfcHJpbnRfYmFja2dyb3VuZHMoc2V0dGluZ3MsIEZBTFNFKTsKKyAg
ICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9wcmludF9iYWNrZ3JvdW5kcyhzZXR0aW5n
cykpOworCisgICAgLy8gV2ViQXVkaW8gaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKyAgICBnX2Fz
c2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfd2ViYXVkaW8oc2V0dGluZ3MpKTsKKyAg
ICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV93ZWJhdWRpbyhzZXR0aW5ncywgVFJVRSk7Cisg
ICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfd2ViYXVkaW8oc2V0dGluZ3Mp
KTsKKworICAgIC8vIFdlYkdMIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisgICAgZ19hc3NlcnQo
IXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3dlYmdsKHNldHRpbmdzKSk7CisgICAgd2Via2l0
X3NldHRpbmdzX3NldF9lbmFibGVfd2ViZ2woc2V0dGluZ3MsIFRSVUUpOworICAgIGdfYXNzZXJ0
KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3dlYmdsKHNldHRpbmdzKSk7CisKKyAgICAvLyBB
bGxvdyBNb2RhbCBEaWFsb2dzIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisgICAgZ19hc3NlcnQo
IXdlYmtpdF9zZXR0aW5nc19nZXRfYWxsb3dfbW9kYWxfZGlhbG9ncyhzZXR0aW5ncykpOworICAg
IHdlYmtpdF9zZXR0aW5nc19zZXRfYWxsb3dfbW9kYWxfZGlhbG9ncyhzZXR0aW5ncywgVFJVRSk7
CisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9hbGxvd19tb2RhbF9kaWFsb2dzKHNl
dHRpbmdzKSk7CisKKyAgICAvLyBab29tIHRleHQgb25seSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0
LgorICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X3pvb21fdGV4dF9vbmx5KHNldHRp
bmdzKSk7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF96b29tX3RleHRfb25seShzZXR0aW5ncywg
VFJVRSk7CisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF96b29tX3RleHRfb25seShz
ZXR0aW5ncykpOworCisgICAgLy8gQnkgZGVmYXVsdCwgSmF2YVNjcmlwdCBjYW5ub3QgYWNjZXNz
IHRoZSBjbGlwYm9hcmQuCisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfamF2YXNj
cmlwdF9jYW5fYWNjZXNzX2NsaXBib2FyZChzZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5n
c19zZXRfamF2YXNjcmlwdF9jYW5fYWNjZXNzX2NsaXBib2FyZChzZXR0aW5ncywgVFJVRSk7Cisg
ICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9qYXZhc2NyaXB0X2Nhbl9hY2Nlc3NfY2xp
cGJvYXJkKHNldHRpbmdzKSk7CisKKyAgICAvLyBCeSBkZWZhdWx0LCBtZWRpYSBwbGF5YmFjayBk
b2Vzbid0IHJlcXVpcmUgdXNlciBnZXN0dXJlcy4KKyAgICBnX2Fzc2VydCghd2Via2l0X3NldHRp
bmdzX2dldF9tZWRpYV9wbGF5YmFja19yZXF1aXJlc191c2VyX2dlc3R1cmUoc2V0dGluZ3MpKTsK
KyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X21lZGlhX3BsYXliYWNrX3JlcXVpcmVzX3VzZXJfZ2Vz
dHVyZShzZXR0aW5ncywgVFJVRSk7CisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9t
ZWRpYV9wbGF5YmFja19yZXF1aXJlc191c2VyX2dlc3R1cmUoc2V0dGluZ3MpKTsKKworICAgIC8v
IEJ5IGRlZmF1bHQsIGlubGluZSBtZWRpYSBwbGF5YmFjayBpcyBhbGxvd2VkCisgICAgZ19hc3Nl
cnQod2Via2l0X3NldHRpbmdzX2dldF9tZWRpYV9wbGF5YmFja19hbGxvd3NfaW5saW5lKHNldHRp
bmdzKSk7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9tZWRpYV9wbGF5YmFja19hbGxvd3NfaW5s
aW5lKHNldHRpbmdzLCBGQUxTRSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRf
bWVkaWFfcGxheWJhY2tfYWxsb3dzX2lubGluZShzZXR0aW5ncykpOworCisgICAgLy8gQnkgZGVm
YXVsdCwgZGVidWcgaW5kaWNhdG9ycyBhcmUgZGlzYWJsZWQuCisgICAgZ19hc3NlcnQoIXdlYmtp
dF9zZXR0aW5nc19nZXRfZHJhd19jb21wb3NpdGluZ19pbmRpY2F0b3JzKHNldHRpbmdzKSk7Cisg
ICAgd2Via2l0X3NldHRpbmdzX3NldF9kcmF3X2NvbXBvc2l0aW5nX2luZGljYXRvcnMoc2V0dGlu
Z3MsIFRSVUUpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZHJhd19jb21wb3Np
dGluZ19pbmRpY2F0b3JzKHNldHRpbmdzKSk7CisKKyAgICAvLyBCeSBkZWZhdWx0LCBzaXRlIHNw
ZWNpZmljIHF1aXJrcyBhcmUgZGlzYWJsZWQuCisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5n
c19nZXRfZW5hYmxlX3NpdGVfc3BlY2lmaWNfcXVpcmtzKHNldHRpbmdzKSk7CisgICAgd2Via2l0
X3NldHRpbmdzX3NldF9lbmFibGVfc2l0ZV9zcGVjaWZpY19xdWlya3Moc2V0dGluZ3MsIFRSVUUp
OworICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3NpdGVfc3BlY2lmaWNf
cXVpcmtzKHNldHRpbmdzKSk7CisKKyAgICAvLyBCeSBkZWZhdWx0LCBwYWdlIGNhY2hlIGlzIGVu
YWJsZWQuCisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfcGFnZV9jYWNo
ZShzZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX3BhZ2VfY2FjaGUo
c2V0dGluZ3MsIEZBTFNFKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFi
bGVfcGFnZV9jYWNoZShzZXR0aW5ncykpOworCisgICAgLy8gQnkgZGVmYXVsdCwgc21vb3RoIHNj
cm9sbGluZyBpcyBkaXNhYmxlZC4KKyAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9l
bmFibGVfc21vb3RoX3Njcm9sbGluZyhzZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5nc19z
ZXRfZW5hYmxlX3Ntb290aF9zY3JvbGxpbmcoc2V0dGluZ3MsIFRSVUUpOworICAgIGdfYXNzZXJ0
KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3Ntb290aF9zY3JvbGxpbmcoc2V0dGluZ3MpKTsK
KworICAgIC8vIEJ5IGRlZmF1bHQsIGFjY2VsZXJhdGVkIDJEIGNhbnZhcyBpcyBkaXNhYmxlZC4K
KyAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfYWNjZWxlcmF0ZWRfMmRf
Y2FudmFzKHNldHRpbmdzKSk7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfYWNjZWxl
cmF0ZWRfMmRfY2FudmFzKHNldHRpbmdzLCBUUlVFKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfc2V0
dGluZ3NfZ2V0X2VuYWJsZV9hY2NlbGVyYXRlZF8yZF9jYW52YXMoc2V0dGluZ3MpKTsKKworICAg
IC8vIEJ5IGRlZmF1bHQsIHdyaXRpbmcgb2YgY29uc29sZSBtZXNzYWdlcyB0byBzdGRvdXQgaXMg
ZGlzYWJsZWQuCisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3dyaXRl
X2NvbnNvbGVfbWVzc2FnZXNfdG9fc3Rkb3V0KHNldHRpbmdzKSk7CisgICAgd2Via2l0X3NldHRp
bmdzX3NldF9lbmFibGVfd3JpdGVfY29uc29sZV9tZXNzYWdlc190b19zdGRvdXQoc2V0dGluZ3Ms
IFRSVUUpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3dyaXRlX2Nv
bnNvbGVfbWVzc2FnZXNfdG9fc3Rkb3V0KHNldHRpbmdzKSk7CisKKyAgICAvLyBNZWRpYVN0cmVh
bSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3Nf
Z2V0X2VuYWJsZV9tZWRpYV9zdHJlYW0oc2V0dGluZ3MpKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nf
c2V0X2VuYWJsZV9tZWRpYV9zdHJlYW0oc2V0dGluZ3MsIFRSVUUpOworICAgIGdfYXNzZXJ0KHdl
YmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX21lZGlhX3N0cmVhbShzZXR0aW5ncykpOworCisgICAg
Ly8gQnkgZGVmYXVsdCwgU3BhdGlhbE5hdmlnYXRpb24gaXMgZGlzYWJsZWQKKyAgICBnX2Fzc2Vy
dCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfc3BhdGlhbF9uYXZpZ2F0aW9uKHNldHRpbmdz
KSk7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfc3BhdGlhbF9uYXZpZ2F0aW9uKHNl
dHRpbmdzLCBUUlVFKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9z
cGF0aWFsX25hdmlnYXRpb24oc2V0dGluZ3MpKTsKKworICAgIC8vIE1lZGlhU291cmNlIGlzIGRp
c2FibGVkIGJ5IGRlZmF1bHQKKyAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFi
bGVfbWVkaWFzb3VyY2Uoc2V0dGluZ3MpKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJs
ZV9tZWRpYXNvdXJjZShzZXR0aW5ncywgVFJVRSk7CisgICAgZ19hc3NlcnQod2Via2l0X3NldHRp
bmdzX2dldF9lbmFibGVfbWVkaWFzb3VyY2Uoc2V0dGluZ3MpKTsKKworICAgIGdfb2JqZWN0X3Vu
cmVmKEdfT0JKRUNUKHNldHRpbmdzKSk7Cit9CisKK3ZvaWQgdGVzdFdlYktpdFNldHRpbmdzTmV3
V2l0aFNldHRpbmdzKFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgR1JlZlB0cjxX
ZWJLaXRTZXR0aW5ncz4gc2V0dGluZ3MgPSBhZG9wdEdSZWYod2Via2l0X3NldHRpbmdzX25ld193
aXRoX3NldHRpbmdzKCJlbmFibGUtamF2YXNjcmlwdCIsIEZBTFNFLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiYXV0by1sb2FkLWltYWdlcyIsIEZBTFNFLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAibG9hZC1pY29ucy1pZ25vcmluZy1pbWFnZS1sb2FkLXNldHRpbmciLCBUUlVFLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKSk7CisgICAgdGVzdC0+YXNzZXJ0T2JqZWN0
SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChzZXR0aW5ncy5nZXQoKSkpOworICAg
IGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9qYXZhc2NyaXB0KHNldHRpbmdz
LmdldCgpKSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfYXV0b19sb2FkX2lt
YWdlcyhzZXR0aW5ncy5nZXQoKSkpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRf
bG9hZF9pY29uc19pZ25vcmluZ19pbWFnZV9sb2FkX3NldHRpbmcoc2V0dGluZ3MuZ2V0KCkpKTsK
K30KKworc3RhdGljIENTdHJpbmcgY29udmVydFdlYlZpZXdNYWluUmVzb3VyY2VEYXRhVG9DU3Ry
aW5nKFdlYlZpZXdUZXN0KiB0ZXN0KQoreworICAgIHNpemVfdCBtYWluUmVzb3VyY2VEYXRhU2l6
ZSA9IDA7CisgICAgY29uc3QgY2hhciogbWFpblJlc291cmNlRGF0YSA9IHRlc3QtPm1haW5SZXNv
dXJjZURhdGEobWFpblJlc291cmNlRGF0YVNpemUpOworICAgIHJldHVybiBDU3RyaW5nKG1haW5S
ZXNvdXJjZURhdGEsIG1haW5SZXNvdXJjZURhdGFTaXplKTsKK30KKworc3RhdGljIHZvaWQgYXNz
ZXJ0VGhhdFVzZXJBZ2VudElzU2VudEluSGVhZGVycyhXZWJWaWV3VGVzdCogdGVzdCwgY29uc3Qg
Q1N0cmluZyYgdXNlckFnZW50KQoreworICAgIHRlc3QtPmxvYWRVUkkoZ1NlcnZlci0+Z2V0VVJJ
Rm9yUGF0aCgiLyIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7
CisgICAgQVNTRVJUX0NNUF9DU1RSSU5HKGNvbnZlcnRXZWJWaWV3TWFpblJlc291cmNlRGF0YVRv
Q1N0cmluZyh0ZXN0KSwgPT0sIHVzZXJBZ2VudCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJL
aXRTZXR0aW5nc1VzZXJBZ2VudChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sK
KyAgICBHUmVmUHRyPFdlYktpdFNldHRpbmdzPiBzZXR0aW5ncyA9IGFkb3B0R1JlZih3ZWJraXRf
c2V0dGluZ3NfbmV3KCkpOworICAgIENTdHJpbmcgZGVmYXVsdFVzZXJBZ2VudCA9IHdlYmtpdF9z
ZXR0aW5nc19nZXRfdXNlcl9hZ2VudChzZXR0aW5ncy5nZXQoKSk7CisgICAgd2Via2l0X3dlYl92
aWV3X3NldF9zZXR0aW5ncyh0ZXN0LT5tX3dlYlZpZXcsIHNldHRpbmdzLmdldCgpKTsKKworICAg
IGdfYXNzZXJ0KGdfc3Ryc3RyX2xlbihkZWZhdWx0VXNlckFnZW50LmRhdGEoKSwgLTEsICJBcHBs
ZVdlYktpdCIpKTsKKyAgICBnX2Fzc2VydChnX3N0cnN0cl9sZW4oZGVmYXVsdFVzZXJBZ2VudC5k
YXRhKCksIC0xLCAiU2FmYXJpIikpOworCisgICAgd2Via2l0X3NldHRpbmdzX3NldF91c2VyX2Fn
ZW50KHNldHRpbmdzLmdldCgpLCAwKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoZGVmYXVsdFVzZXJB
Z2VudC5kYXRhKCksID09LCB3ZWJraXRfc2V0dGluZ3NfZ2V0X3VzZXJfYWdlbnQoc2V0dGluZ3Mu
Z2V0KCkpKTsKKyAgICBhc3NlcnRUaGF0VXNlckFnZW50SXNTZW50SW5IZWFkZXJzKHRlc3QsIGRl
ZmF1bHRVc2VyQWdlbnQuZGF0YSgpKTsKKworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfdXNlcl9h
Z2VudChzZXR0aW5ncy5nZXQoKSwgIiIpOworICAgIGdfYXNzZXJ0X2NtcHN0cihkZWZhdWx0VXNl
ckFnZW50LmRhdGEoKSwgPT0sIHdlYmtpdF9zZXR0aW5nc19nZXRfdXNlcl9hZ2VudChzZXR0aW5n
cy5nZXQoKSkpOworCisgICAgY29uc3QgY2hhciogZnVua3lVc2VyQWdlbnQgPSAiRnVua3khIjsK
KyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X3VzZXJfYWdlbnQoc2V0dGluZ3MuZ2V0KCksIGZ1bmt5
VXNlckFnZW50KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoZnVua3lVc2VyQWdlbnQsID09LCB3ZWJr
aXRfc2V0dGluZ3NfZ2V0X3VzZXJfYWdlbnQoc2V0dGluZ3MuZ2V0KCkpKTsKKyAgICBhc3NlcnRU
aGF0VXNlckFnZW50SXNTZW50SW5IZWFkZXJzKHRlc3QsIGZ1bmt5VXNlckFnZW50KTsKKworICAg
IHdlYmtpdF9zZXR0aW5nc19zZXRfdXNlcl9hZ2VudF93aXRoX2FwcGxpY2F0aW9uX2RldGFpbHMo
c2V0dGluZ3MuZ2V0KCksICJXZWJLaXRHVEsrIiwgMCk7CisgICAgY29uc3QgY2hhciogdXNlckFn
ZW50V2l0aE51bGxWZXJzaW9uID0gd2Via2l0X3NldHRpbmdzX2dldF91c2VyX2FnZW50KHNldHRp
bmdzLmdldCgpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoZ19zdHJzdHJfbGVuKHVzZXJBZ2VudFdp
dGhOdWxsVmVyc2lvbiwgLTEsIGRlZmF1bHRVc2VyQWdlbnQuZGF0YSgpKSwgPT0sIHVzZXJBZ2Vu
dFdpdGhOdWxsVmVyc2lvbik7CisgICAgZ19hc3NlcnQoZ19zdHJzdHJfbGVuKHVzZXJBZ2VudFdp
dGhOdWxsVmVyc2lvbiwgLTEsICJXZWJLaXRHVEsrIikpOworCisgICAgd2Via2l0X3NldHRpbmdz
X3NldF91c2VyX2FnZW50X3dpdGhfYXBwbGljYXRpb25fZGV0YWlscyhzZXR0aW5ncy5nZXQoKSwg
IldlYktpdEdUSysiLCAiIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zZXR0aW5nc19n
ZXRfdXNlcl9hZ2VudChzZXR0aW5ncy5nZXQoKSksID09LCB1c2VyQWdlbnRXaXRoTnVsbFZlcnNp
b24pOworCisgICAgd2Via2l0X3NldHRpbmdzX3NldF91c2VyX2FnZW50X3dpdGhfYXBwbGljYXRp
b25fZGV0YWlscyhzZXR0aW5ncy5nZXQoKSwgIldlYkNhdEdUSysiLCAiMy40LjUiKTsKKyAgICBj
b25zdCBjaGFyKiBuZXdVc2VyQWdlbnQgPSB3ZWJraXRfc2V0dGluZ3NfZ2V0X3VzZXJfYWdlbnQo
c2V0dGluZ3MuZ2V0KCkpOworICAgIGdfYXNzZXJ0KGdfc3Ryc3RyX2xlbihuZXdVc2VyQWdlbnQs
IC0xLCAiMy40LjUiKSk7CisgICAgZ19hc3NlcnQoZ19zdHJzdHJfbGVuKG5ld1VzZXJBZ2VudCwg
LTEsICJXZWJDYXRHVEsrIikpOworfQorCitzdGF0aWMgdm9pZCBzZXJ2ZXJDYWxsYmFjayhTb3Vw
U2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBjaGFyKiBwYXRoLCBH
SGFzaFRhYmxlKiwgU291cENsaWVudENvbnRleHQqLCBncG9pbnRlcikKK3sKKyAgICBpZiAobWVz
c2FnZS0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgeworICAgICAgICBzb3VwX21lc3NhZ2Vf
c2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvIikpIHsKKyAg
ICAgICAgY29uc3QgY2hhciogdXNlckFnZW50ID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X29u
ZShtZXNzYWdlLT5yZXF1ZXN0X2hlYWRlcnMsICJVc2VyLUFnZW50Iik7CisgICAgICAgIHNvdXBf
bWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKKyAgICAgICAgc291
cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZ
X0NPUFksIHVzZXJBZ2VudCwgc3RybGVuKHVzZXJBZ2VudCkpOworICAgICAgICBzb3VwX21lc3Nh
Z2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0ZP
VU5EKTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQoreworICAgIGdTZXJ2ZXIgPSBuZXcgV2ViS2l0
VGVzdFNlcnZlcigpOworICAgIGdTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFjayk7CisKKyAgICBU
ZXN0OjphZGQoIldlYktpdFNldHRpbmdzIiwgIndlYmtpdC1zZXR0aW5ncyIsIHRlc3RXZWJLaXRT
ZXR0aW5ncyk7CisgICAgVGVzdDo6YWRkKCJXZWJLaXRTZXR0aW5ncyIsICJuZXctd2l0aC1zZXR0
aW5ncyIsIHRlc3RXZWJLaXRTZXR0aW5nc05ld1dpdGhTZXR0aW5ncyk7CisgICAgV2ViVmlld1Rl
c3Q6OmFkZCgiV2ViS2l0U2V0dGluZ3MiLCAidXNlci1hZ2VudCIsIHRlc3RXZWJLaXRTZXR0aW5n
c1VzZXJBZ2VudCk7Cit9CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworICAgIGRlbGV0ZSBnU2VydmVy
OworfQorCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsv
VGVzdFdlYktpdFZlcnNpb24uY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQy
R3RrL1Rlc3RXZWJLaXRWZXJzaW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5lNzQ3ZmY5Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRWZXJzaW9uLmNwcApAQCAtMCwwICsxLDUwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpbmNsdWRlICJUZXN0TWFpbi5oIgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3
ZWJraXQyL3dlYmtpdDIuaD4KKworCitzdGF0aWMgdm9pZCB0ZXN0V2ViS2l0VmVyc2lvbihUZXN0
KiwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9nZXRfbWFq
b3JfdmVyc2lvbigpLCA9PSwgV0VCS0lUX01BSk9SX1ZFUlNJT04pOworICAgIGdfYXNzZXJ0X2Nt
cHVpbnQod2Via2l0X2dldF9taW5vcl92ZXJzaW9uKCksID09LCBXRUJLSVRfTUlOT1JfVkVSU0lP
Tik7CisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfZ2V0X21pY3JvX3ZlcnNpb24oKSwgPT0s
IFdFQktJVF9NSUNST19WRVJTSU9OKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYktpdENoZWNr
VmVyc2lvbihUZXN0KiwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBnX2Fzc2VydChXRUJLSVRfQ0hF
Q0tfVkVSU0lPTihXRUJLSVRfTUFKT1JfVkVSU0lPTiwgV0VCS0lUX01JTk9SX1ZFUlNJT04sIFdF
QktJVF9NSUNST19WRVJTSU9OKSk7CisgICAgZ19hc3NlcnQoIVdFQktJVF9DSEVDS19WRVJTSU9O
KFdFQktJVF9NQUpPUl9WRVJTSU9OICsgMSwgV0VCS0lUX01JTk9SX1ZFUlNJT04sIFdFQktJVF9N
SUNST19WRVJTSU9OKSk7CisgICAgZ19hc3NlcnQoIVdFQktJVF9DSEVDS19WRVJTSU9OKFdFQktJ
VF9NQUpPUl9WRVJTSU9OLCBXRUJLSVRfTUlOT1JfVkVSU0lPTiArIDEsIFdFQktJVF9NSUNST19W
RVJTSU9OKSk7CisgICAgZ19hc3NlcnQoIVdFQktJVF9DSEVDS19WRVJTSU9OKFdFQktJVF9NQUpP
Ul9WRVJTSU9OLCBXRUJLSVRfTUlOT1JfVkVSU0lPTiwgV0VCS0lUX01JQ1JPX1ZFUlNJT04gKyAx
KSk7Cit9CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICBUZXN0OjphZGQoIldlYktpdFZlcnNp
b24iLCAidmVyc2lvbiIsIHRlc3RXZWJLaXRWZXJzaW9uKTsKKyAgICBUZXN0OjphZGQoIldlYktp
dFZlcnNpb24iLCAiY2hlY2stdmVyc2lvbiIsIHRlc3RXZWJLaXRDaGVja1ZlcnNpb24pOworfQor
Cit2b2lkIGFmdGVyQWxsKCkKK3sKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0V2ViQ29udGV4dC5jcHAgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFdlYkNvbnRleHQuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMGY0MDYKLS0tIC9kZXYvbnVsbAorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFdlYkNvbnRleHQu
Y3BwCkBAIC0wLDAgKzEsNDI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBT
LkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJMb2FkVHJhY2tpbmdUZXN0Lmgi
CisjaW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5oIgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNp
bmNsdWRlIDx3ZWJraXQyL3dlYmtpdDIuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2lu
Y2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVm
UHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCitzdGF0aWMgV2ViS2l0
VGVzdFNlcnZlcioga1NlcnZlcjsKKworc3RhdGljIHZvaWQgdGVzdFdlYkNvbnRleHREZWZhdWx0
KFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8gQ2hlY2sgdGhlcmUncyBhIHNp
bmdsZSBpbnN0YW5jZSBvZiB0aGUgZGVmYXVsdCB3ZWIgY29udGV4dC4KKyAgICBnX2Fzc2VydCh3
ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSA9PSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0
X2RlZmF1bHQoKSk7Cit9CisKK2NsYXNzIFBsdWdpbnNUZXN0OiBwdWJsaWMgVGVzdCB7CitwdWJs
aWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShQbHVnaW5zVGVzdCk7CisKKyAgICBQbHVn
aW5zVGVzdCgpCisgICAgICAgIDogbV9jb250ZXh0KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVm
YXVsdCgpKQorICAgICAgICAsIG1fbWFpbkxvb3AoZ19tYWluX2xvb3BfbmV3KDAsIFRSVUUpKQor
ICAgICAgICAsIG1fcGx1Z2lucygwKQorICAgIHsKKyAgICAgICAgd2Via2l0X3dlYl9jb250ZXh0
X3NldF9hZGRpdGlvbmFsX3BsdWdpbnNfZGlyZWN0b3J5KG1fY29udGV4dCwgV0VCS0lUX1RFU1Rf
UExVR0lOX0RJUik7CisgICAgfQorCisgICAgflBsdWdpbnNUZXN0KCkKKyAgICB7CisgICAgICAg
IGdfbWFpbl9sb29wX3VucmVmKG1fbWFpbkxvb3ApOworICAgICAgICBnX2xpc3RfZnJlZV9mdWxs
KG1fcGx1Z2lucywgZ19vYmplY3RfdW5yZWYpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGdl
dFBsdWdpbnNBc3luY1JlYWR5Q2FsbGJhY2soR09iamVjdCosIEdBc3luY1Jlc3VsdCogcmVzdWx0
LCBQbHVnaW5zVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPm1fcGx1Z2lucyA9IHdl
YmtpdF93ZWJfY29udGV4dF9nZXRfcGx1Z2luc19maW5pc2godGVzdC0+bV9jb250ZXh0LCByZXN1
bHQsIDApOworICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworICAg
IH0KKworICAgIEdMaXN0KiBnZXRQbHVnaW5zKCkKKyAgICB7CisgICAgICAgIGdfbGlzdF9mcmVl
X2Z1bGwobV9wbHVnaW5zLCBnX29iamVjdF91bnJlZik7CisgICAgICAgIHdlYmtpdF93ZWJfY29u
dGV4dF9nZXRfcGx1Z2lucyhtX2NvbnRleHQsIDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVh
ZHlDYWxsYmFjaz4oZ2V0UGx1Z2luc0FzeW5jUmVhZHlDYWxsYmFjayksIHRoaXMpOworICAgICAg
ICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgICAgIHJldHVybiBtX3BsdWdpbnM7
CisgICAgfQorCisgICAgV2ViS2l0V2ViQ29udGV4dCogbV9jb250ZXh0OworICAgIEdNYWluTG9v
cCogbV9tYWluTG9vcDsKKyAgICBHTGlzdCogbV9wbHVnaW5zOworfTsKKworc3RhdGljIHZvaWQg
dGVzdFdlYkNvbnRleHRHZXRQbHVnaW5zKFBsdWdpbnNUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVy
KQoreworICAgIEdMaXN0KiBwbHVnaW5zID0gdGVzdC0+Z2V0UGx1Z2lucygpOworICAgIGdfYXNz
ZXJ0KHBsdWdpbnMpOworCisgICAgR1JlZlB0cjxXZWJLaXRQbHVnaW4+IHRlc3RQbHVnaW47Cisg
ICAgZm9yIChHTGlzdCogaXRlbSA9IHBsdWdpbnM7IGl0ZW07IGl0ZW0gPSBnX2xpc3RfbmV4dChp
dGVtKSkgeworICAgICAgICBXZWJLaXRQbHVnaW4qIHBsdWdpbiA9IFdFQktJVF9QTFVHSU4oaXRl
bS0+ZGF0YSk7CisgICAgICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0Rmlu
aXNoZXMoR19PQkpFQ1QocGx1Z2luKSk7CisgICAgICAgIGlmICghZ19zdHJjbXAwKHdlYmtpdF9w
bHVnaW5fZ2V0X25hbWUocGx1Z2luKSwgIldlYktpdCBUZXN0IFBsdWdJbiIpKSB7CisgICAgICAg
ICAgICB0ZXN0UGx1Z2luID0gcGx1Z2luOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9CisgICAgZ19hc3NlcnQoV0VCS0lUX0lTX1BMVUdJTih0ZXN0UGx1Z2luLmdldCgpKSk7
CisKKyAgICBHT3duUHRyPGNoYXI+IHBsdWdpblBhdGgoZ19idWlsZF9maWxlbmFtZShXRUJLSVRf
VEVTVF9QTFVHSU5fRElSLCAibGliVGVzdE5ldHNjYXBlUGx1Z2luLnNvIiwgTlVMTCkpOworICAg
IGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfcGx1Z2luX2dldF9wYXRoKHRlc3RQbHVnaW4uZ2V0KCkp
LCA9PSwgcGx1Z2luUGF0aC5nZXQoKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9wbHVn
aW5fZ2V0X2Rlc2NyaXB0aW9uKHRlc3RQbHVnaW4uZ2V0KCkpLCA9PSwgIlNpbXBsZSBOZXRzY2Fw
ZcKuIHBsdWctaW4gdGhhdCBoYW5kbGVzIHRlc3QgY29udGVudCBmb3IgV2ViS2l0Iik7CisgICAg
R0xpc3QqIG1pbWVJbmZvTGlzdCA9IHdlYmtpdF9wbHVnaW5fZ2V0X21pbWVfaW5mb19saXN0KHRl
c3RQbHVnaW4uZ2V0KCkpOworICAgIGdfYXNzZXJ0KG1pbWVJbmZvTGlzdCk7CisgICAgZ19hc3Nl
cnRfY21wdWludChnX2xpc3RfbGVuZ3RoKG1pbWVJbmZvTGlzdCksID09LCAyKTsKKworICAgIFdl
YktpdE1pbWVJbmZvKiBtaW1lSW5mbyA9IHN0YXRpY19jYXN0PFdlYktpdE1pbWVJbmZvKj4obWlt
ZUluZm9MaXN0LT5kYXRhKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X21pbWVfaW5mb19n
ZXRfbWltZV90eXBlKG1pbWVJbmZvKSwgPT0sICJpbWFnZS9wbmciKTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIod2Via2l0X21pbWVfaW5mb19nZXRfZGVzY3JpcHRpb24obWltZUluZm8pLCA9PSwgInBu
ZyBpbWFnZSIpOworICAgIGNvbnN0IGdjaGFyKiBjb25zdCogZXh0ZW5zaW9ucyA9IHdlYmtpdF9t
aW1lX2luZm9fZ2V0X2V4dGVuc2lvbnMobWltZUluZm8pOworICAgIGdfYXNzZXJ0KGV4dGVuc2lv
bnMpOworICAgIGdfYXNzZXJ0X2NtcHN0cihleHRlbnNpb25zWzBdLCA9PSwgInBuZyIpOworCisg
ICAgbWltZUluZm9MaXN0ID0gZ19saXN0X25leHQobWltZUluZm9MaXN0KTsKKyAgICBtaW1lSW5m
byA9IHN0YXRpY19jYXN0PFdlYktpdE1pbWVJbmZvKj4obWltZUluZm9MaXN0LT5kYXRhKTsKKyAg
ICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X21pbWVfaW5mb19nZXRfbWltZV90eXBlKG1pbWVJbmZv
KSwgPT0sICJhcHBsaWNhdGlvbi94LXdlYmtpdC10ZXN0LW5ldHNjYXBlIik7CisgICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF9taW1lX2luZm9fZ2V0X2Rlc2NyaXB0aW9uKG1pbWVJbmZvKSwgPT0s
ICJ0ZXN0IG5ldHNjYXBlIGNvbnRlbnQiKTsKKyAgICBleHRlbnNpb25zID0gd2Via2l0X21pbWVf
aW5mb19nZXRfZXh0ZW5zaW9ucyhtaW1lSW5mbyk7CisgICAgZ19hc3NlcnQoZXh0ZW5zaW9ucyk7
CisgICAgZ19hc3NlcnRfY21wc3RyKGV4dGVuc2lvbnNbMF0sID09LCAidGVzdG5ldHNjYXBlIik7
Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyKiBrQmFySFRNTCA9ICI8aHRtbD48Ym9keT5CYXI8L2Jv
ZHk+PC9odG1sPiI7CitzdGF0aWMgY29uc3QgY2hhcioga0VjaG9IVE1MRm9ybWF0ID0gIjxodG1s
Pjxib2R5PiVzPC9ib2R5PjwvaHRtbD4iOworc3RhdGljIGNvbnN0IGNoYXIqIGVycm9yRG9tYWlu
ID0gInRlc3QiOworc3RhdGljIGNvbnN0IGludCBlcnJvckNvZGUgPSAxMDsKK3N0YXRpYyBjb25z
dCBjaGFyKiBlcnJvck1lc3NhZ2UgPSAiRXJyb3IgbWVzc2FnZS4iOworCitjbGFzcyBVUklTY2hl
bWVUZXN0OiBwdWJsaWMgTG9hZFRyYWNraW5nVGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElC
X1RFU1RfRklYVFVSRShVUklTY2hlbWVUZXN0KTsKKworICAgIHN0cnVjdCBVUklTY2hlbWVIYW5k
bGVyIHsKKyAgICAgICAgVVJJU2NoZW1lSGFuZGxlcigpCisgICAgICAgICAgICA6IHJlcGx5TGVu
Z3RoKDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFVSSVNjaGVtZUhhbmRsZXIo
Y29uc3QgY2hhciogcmVwbHksIGludCByZXBseUxlbmd0aCwgY29uc3QgY2hhciogbWltZVR5cGUp
CisgICAgICAgICAgICA6IHJlcGx5KHJlcGx5KQorICAgICAgICAgICAgLCByZXBseUxlbmd0aChy
ZXBseUxlbmd0aCkKKyAgICAgICAgICAgICwgbWltZVR5cGUobWltZVR5cGUpCisgICAgICAgIHsK
KyAgICAgICAgfQorCisgICAgICAgIENTdHJpbmcgcmVwbHk7CisgICAgICAgIGludCByZXBseUxl
bmd0aDsKKyAgICAgICAgQ1N0cmluZyBtaW1lVHlwZTsKKyAgICB9OworCisgICAgc3RhdGljIHZv
aWQgdXJpU2NoZW1lUmVxdWVzdENhbGxiYWNrKFdlYktpdFVSSVNjaGVtZVJlcXVlc3QqIHJlcXVl
c3QsIGdwb2ludGVyIHVzZXJEYXRhKQorICAgIHsKKyAgICAgICAgVVJJU2NoZW1lVGVzdCogdGVz
dCA9IHN0YXRpY19jYXN0PFVSSVNjaGVtZVRlc3QqPih1c2VyRGF0YSk7CisgICAgICAgIHRlc3Qt
Pm1fdXJpU2NoZW1lUmVxdWVzdCA9IHJlcXVlc3Q7CisgICAgICAgIHRlc3QtPmFzc2VydE9iamVj
dElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QocmVxdWVzdCkpOworCisgICAgICAg
IGdfYXNzZXJ0KHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0X3dlYl92aWV3KHJlcXVlc3Qp
ID09IHRlc3QtPm1fd2ViVmlldyk7CisKKyAgICAgICAgR1JlZlB0cjxHSW5wdXRTdHJlYW0+IGlu
cHV0U3RyZWFtID0gYWRvcHRHUmVmKGdfbWVtb3J5X2lucHV0X3N0cmVhbV9uZXcoKSk7CisgICAg
ICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1Qo
aW5wdXRTdHJlYW0uZ2V0KCkpKTsKKworICAgICAgICBjb25zdCBjaGFyKiBzY2hlbWUgPSB3ZWJr
aXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dldF9zY2hlbWUocmVxdWVzdCk7CisgICAgICAgIGdfYXNz
ZXJ0KHNjaGVtZSk7CisgICAgICAgIGdfYXNzZXJ0KHRlc3QtPm1faGFuZGxlcnNNYXAuY29udGFp
bnMoU3RyaW5nOjpmcm9tVVRGOChzY2hlbWUpKSk7CisKKyAgICAgICAgaWYgKCFnX3N0cmNtcDAo
c2NoZW1lLCAiZXJyb3IiKSkgeworICAgICAgICAgICAgR093blB0cjxHRXJyb3I+IGVycm9yKGdf
ZXJyb3JfbmV3X2xpdGVyYWwoZ19xdWFya19mcm9tX3N0cmluZyhlcnJvckRvbWFpbiksIGVycm9y
Q29kZSwgZXJyb3JNZXNzYWdlKSk7CisgICAgICAgICAgICB3ZWJraXRfdXJpX3NjaGVtZV9yZXF1
ZXN0X2ZpbmlzaF9lcnJvcihyZXF1ZXN0LCBlcnJvci5nZXQoKSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBVUklTY2hlbWVIYW5kbGVyJiBoYW5kbGVy
ID0gdGVzdC0+bV9oYW5kbGVyc01hcC5nZXQoU3RyaW5nOjpmcm9tVVRGOChzY2hlbWUpKTsKKwor
ICAgICAgICBpZiAoIWdfc3RyY21wMChzY2hlbWUsICJlY2hvIikpIHsKKyAgICAgICAgICAgIGNo
YXIqIHJlcGx5SFRNTCA9IGdfc3RyZHVwX3ByaW50ZihoYW5kbGVyLnJlcGx5LmRhdGEoKSwgd2Vi
a2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9nZXRfcGF0aChyZXF1ZXN0KSk7CisgICAgICAgICAgICBn
X21lbW9yeV9pbnB1dF9zdHJlYW1fYWRkX2RhdGEoR19NRU1PUllfSU5QVVRfU1RSRUFNKGlucHV0
U3RyZWFtLmdldCgpKSwgcmVwbHlIVE1MLCBzdHJsZW4ocmVwbHlIVE1MKSwgZ19mcmVlKTsKKyAg
ICAgICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKHNjaGVtZSwgImNsb3NlZCIpKQorICAgICAgICAg
ICAgZ19pbnB1dF9zdHJlYW1fY2xvc2UoaW5wdXRTdHJlYW0uZ2V0KCksIDAsIDApOworICAgICAg
ICBlbHNlIGlmICghaGFuZGxlci5yZXBseS5pc051bGwoKSkKKyAgICAgICAgICAgIGdfbWVtb3J5
X2lucHV0X3N0cmVhbV9hZGRfZGF0YShHX01FTU9SWV9JTlBVVF9TVFJFQU0oaW5wdXRTdHJlYW0u
Z2V0KCkpLCBoYW5kbGVyLnJlcGx5LmRhdGEoKSwgaGFuZGxlci5yZXBseS5sZW5ndGgoKSwgMCk7
CisKKyAgICAgICAgd2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9maW5pc2gocmVxdWVzdCwgaW5w
dXRTdHJlYW0uZ2V0KCksIGhhbmRsZXIucmVwbHlMZW5ndGgsIGhhbmRsZXIubWltZVR5cGUuZGF0
YSgpKTsKKyAgICB9CisKKyAgICB2b2lkIHJlZ2lzdGVyVVJJU2NoZW1lSGFuZGxlcihjb25zdCBj
aGFyKiBzY2hlbWUsIGNvbnN0IGNoYXIqIHJlcGx5LCBpbnQgcmVwbHlMZW5ndGgsIGNvbnN0IGNo
YXIqIG1pbWVUeXBlKQorICAgIHsKKyAgICAgICAgbV9oYW5kbGVyc01hcC5zZXQoU3RyaW5nOjpm
cm9tVVRGOChzY2hlbWUpLCBVUklTY2hlbWVIYW5kbGVyKHJlcGx5LCByZXBseUxlbmd0aCwgbWlt
ZVR5cGUpKTsKKyAgICAgICAgd2Via2l0X3dlYl9jb250ZXh0X3JlZ2lzdGVyX3VyaV9zY2hlbWUo
d2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCksIHNjaGVtZSwgdXJpU2NoZW1lUmVxdWVz
dENhbGxiYWNrLCB0aGlzLCAwKTsKKyAgICB9CisKKyAgICBHUmVmUHRyPFdlYktpdFVSSVNjaGVt
ZVJlcXVlc3Q+IG1fdXJpU2NoZW1lUmVxdWVzdDsKKyAgICBIYXNoTWFwPFN0cmluZywgVVJJU2No
ZW1lSGFuZGxlcj4gbV9oYW5kbGVyc01hcDsKK307CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJDb250
ZXh0VVJJU2NoZW1lKFVSSVNjaGVtZVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAg
dGVzdC0+cmVnaXN0ZXJVUklTY2hlbWVIYW5kbGVyKCJmb28iLCBrQmFySFRNTCwgc3RybGVuKGtC
YXJIVE1MKSwgInRleHQvaHRtbCIpOworICAgIHRlc3QtPmxvYWRVUkkoImZvbzpibGFuayIpOwor
ICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIHNpemVfdCBtYWluUmVzb3Vy
Y2VEYXRhU2l6ZSA9IDA7CisgICAgY29uc3QgY2hhciogbWFpblJlc291cmNlRGF0YSA9IHRlc3Qt
Pm1haW5SZXNvdXJjZURhdGEobWFpblJlc291cmNlRGF0YVNpemUpOworICAgIGdfYXNzZXJ0X2Nt
cGludChtYWluUmVzb3VyY2VEYXRhU2l6ZSwgPT0sIHN0cmxlbihrQmFySFRNTCkpOworICAgIGdf
YXNzZXJ0KCFzdHJuY21wKG1haW5SZXNvdXJjZURhdGEsIGtCYXJIVE1MLCBtYWluUmVzb3VyY2VE
YXRhU2l6ZSkpOworCisgICAgdGVzdC0+cmVnaXN0ZXJVUklTY2hlbWVIYW5kbGVyKCJlY2hvIiwg
a0VjaG9IVE1MRm9ybWF0LCAtMSwgInRleHQvaHRtbCIpOworICAgIHRlc3QtPmxvYWRVUkkoImVj
aG86aGVsbG8gd29ybGQiKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAg
ICBHT3duUHRyPGNoYXI+IGVjaG9IVE1MKGdfc3RyZHVwX3ByaW50ZihrRWNob0hUTUxGb3JtYXQs
IHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0X3BhdGgodGVzdC0+bV91cmlTY2hlbWVSZXF1
ZXN0LmdldCgpKSkpOworICAgIG1haW5SZXNvdXJjZURhdGFTaXplID0gMDsKKyAgICBtYWluUmVz
b3VyY2VEYXRhID0gdGVzdC0+bWFpblJlc291cmNlRGF0YShtYWluUmVzb3VyY2VEYXRhU2l6ZSk7
CisgICAgZ19hc3NlcnRfY21waW50KG1haW5SZXNvdXJjZURhdGFTaXplLCA9PSwgc3RybGVuKGVj
aG9IVE1MLmdldCgpKSk7CisgICAgZ19hc3NlcnQoIXN0cm5jbXAobWFpblJlc291cmNlRGF0YSwg
ZWNob0hUTUwuZ2V0KCksIG1haW5SZXNvdXJjZURhdGFTaXplKSk7CisKKyAgICB0ZXN0LT5yZWdp
c3RlclVSSVNjaGVtZUhhbmRsZXIoIm5vbWltZSIsIGtCYXJIVE1MLCAtMSwgMCk7CisgICAgdGVz
dC0+bV9sb2FkRXZlbnRzLmNsZWFyKCk7CisgICAgdGVzdC0+bG9hZFVSSSgibm9taW1lOmZvbyBi
YXIiKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydCh0
ZXN0LT5tX2xvYWRFdmVudHMuY29udGFpbnMoTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxM
b2FkRmFpbGVkKSk7CisKKyAgICB0ZXN0LT5yZWdpc3RlclVSSVNjaGVtZUhhbmRsZXIoImVtcHR5
IiwgMCwgMCwgInRleHQvaHRtbCIpOworICAgIHRlc3QtPm1fbG9hZEV2ZW50cy5jbGVhcigpOwor
ICAgIHRlc3QtPmxvYWRVUkkoImVtcHR5Om5vdGhpbmciKTsKKyAgICB0ZXN0LT53YWl0VW50aWxM
b2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydCghdGVzdC0+bV9sb2FkRXZlbnRzLmNvbnRhaW5z
KExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZEZhaWxlZCkpOworICAgIGdfYXNzZXJ0
KCF0ZXN0LT5tX2xvYWRFdmVudHMuY29udGFpbnMoTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZhaWxl
ZCkpOworCisgICAgdGVzdC0+cmVnaXN0ZXJVUklTY2hlbWVIYW5kbGVyKCJlcnJvciIsIDAsIDAs
IDApOworICAgIHRlc3QtPm1fbG9hZEV2ZW50cy5jbGVhcigpOworICAgIHRlc3QtPmxvYWRVUkko
ImVycm9yOmVycm9yIik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAg
Z19hc3NlcnQodGVzdC0+bV9sb2FkRXZlbnRzLmNvbnRhaW5zKExvYWRUcmFja2luZ1Rlc3Q6OlBy
b3Zpc2lvbmFsTG9hZEZhaWxlZCkpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fbG9hZEZhaWxlZCk7
CisgICAgZ19hc3NlcnRfZXJyb3IodGVzdC0+bV9lcnJvci5nZXQoKSwgZ19xdWFya19mcm9tX3N0
cmluZyhlcnJvckRvbWFpbiksIGVycm9yQ29kZSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRlc3Qt
Pm1fZXJyb3ItPm1lc3NhZ2UsID09LCBlcnJvck1lc3NhZ2UpOworCisgICAgdGVzdC0+cmVnaXN0
ZXJVUklTY2hlbWVIYW5kbGVyKCJjbG9zZWQiLCAwLCAwLCAwKTsKKyAgICB0ZXN0LT5tX2xvYWRF
dmVudHMuY2xlYXIoKTsKKyAgICB0ZXN0LT5sb2FkVVJJKCJjbG9zZWQ6aW5wdXQtc3RyZWFtIik7
CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnQodGVzdC0+
bV9sb2FkRXZlbnRzLmNvbnRhaW5zKExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZEZh
aWxlZCkpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fbG9hZEZhaWxlZCk7CisgICAgZ19hc3NlcnRf
ZXJyb3IodGVzdC0+bV9lcnJvci5nZXQoKSwgR19JT19FUlJPUiwgR19JT19FUlJPUl9DTE9TRUQp
OworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViQ29udGV4dFNwZWxsQ2hlY2tlcihUZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQoreworICAgIFdlYktpdFdlYkNvbnRleHQqIHdlYkNvbnRleHQgPSB3
ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKTsKKworICAgIC8vIENoZWNrIHdoYXQgaGFw
cGVucyBpZiBubyBzcGVsbCBjaGVja2luZyBsYW5ndWFnZSBoYXMgYmVlbiBzZXQuCisgICAgY29u
c3QgZ2NoYXIqIGNvbnN0KiBjdXJyZW50TGFuZ3VhZ2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0
X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyh3ZWJDb250ZXh0KTsKKyAgICBnX2Fzc2VydCghY3Vy
cmVudExhbmd1YWdlKTsKKworICAgIC8vIFNldCB0aGUgbGFuZ3VhZ2UgdG8gYSBzcGVjaWZpYyBv
bmUuCisgICAgR1JlZlB0cjxHUHRyQXJyYXk+IGxhbmd1YWdlcyA9IGFkb3B0R1JlZihnX3B0cl9h
cnJheV9uZXcoKSk7CisgICAgZ19wdHJfYXJyYXlfYWRkKGxhbmd1YWdlcy5nZXQoKSwgY29uc3Rf
Y2FzdDxncG9pbnRlcj4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KCJlbl9VUyIpKSk7CisgICAg
Z19wdHJfYXJyYXlfYWRkKGxhbmd1YWdlcy5nZXQoKSwgMCk7CisgICAgd2Via2l0X3dlYl9jb250
ZXh0X3NldF9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMod2ViQ29udGV4dCwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBjaGFyKiBjb25zdCo+KGxhbmd1YWdlcy0+cGRhdGEpKTsKKyAgICBjdXJyZW50
TGFuZ3VhZ2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdl
cyh3ZWJDb250ZXh0KTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGdfc3Rydl9sZW5ndGgoY29uc3Rf
Y2FzdDxjaGFyKio+KGN1cnJlbnRMYW5ndWFnZSkpLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21w
c3RyKGN1cnJlbnRMYW5ndWFnZVswXSwgPT0sICJlbl9VUyIpOworCisgICAgLy8gU2V0IHRoZSBs
YW5ndWFnZSBzdHJpbmcgdG8gbGlzdCBvZiB2YWxpZCBsYW5ndWFnZXMuCisgICAgZ19wdHJfYXJy
YXlfcmVtb3ZlX2luZGV4X2Zhc3QobGFuZ3VhZ2VzLmdldCgpLCBsYW5ndWFnZXMtPmxlbiAtIDEp
OworICAgIGdfcHRyX2FycmF5X2FkZChsYW5ndWFnZXMuZ2V0KCksIGNvbnN0X2Nhc3Q8Z3BvaW50
ZXI+KHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqPigiZW5fR0IiKSkpOworICAgIGdfcHRyX2FycmF5
X2FkZChsYW5ndWFnZXMuZ2V0KCksIDApOworICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfc3Bl
bGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKHdlYkNvbnRleHQsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
Y2hhciogY29uc3QqPihsYW5ndWFnZXMtPnBkYXRhKSk7CisgICAgY3VycmVudExhbmd1YWdlID0g
d2Via2l0X3dlYl9jb250ZXh0X2dldF9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMod2ViQ29udGV4
dCk7CisgICAgZ19hc3NlcnRfY21wdWludChnX3N0cnZfbGVuZ3RoKGNvbnN0X2Nhc3Q8Y2hhcioq
PihjdXJyZW50TGFuZ3VhZ2UpKSwgPT0sIDIpOworICAgIGdfYXNzZXJ0X2NtcHN0cihjdXJyZW50
TGFuZ3VhZ2VbMF0sID09LCAiZW5fVVMiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoY3VycmVudExh
bmd1YWdlWzFdLCA9PSwgImVuX0dCIik7CisKKyAgICAvLyBUcnkgcGFzc2luZyBhIHdyb25nIGxh
bmd1YWdlIGFsb25nIHdpdGggZ29vZCBvbmVzLgorICAgIGdfcHRyX2FycmF5X3JlbW92ZV9pbmRl
eF9mYXN0KGxhbmd1YWdlcy5nZXQoKSwgbGFuZ3VhZ2VzLT5sZW4gLSAxKTsKKyAgICBnX3B0cl9h
cnJheV9hZGQobGFuZ3VhZ2VzLmdldCgpLCBjb25zdF9jYXN0PGdwb2ludGVyPihzdGF0aWNfY2Fz
dDxjb25zdCB2b2lkKj4oImJkX1dSIikpKTsKKyAgICBnX3B0cl9hcnJheV9hZGQobGFuZ3VhZ2Vz
LmdldCgpLCAwKTsKKyAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3NwZWxsX2NoZWNraW5nX2xh
bmd1YWdlcyh3ZWJDb250ZXh0LCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqIGNvbnN0Kj4o
bGFuZ3VhZ2VzLT5wZGF0YSkpOworICAgIGN1cnJlbnRMYW5ndWFnZSA9IHdlYmtpdF93ZWJfY29u
dGV4dF9nZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKHdlYkNvbnRleHQpOworICAgIGdfYXNz
ZXJ0X2NtcHVpbnQoZ19zdHJ2X2xlbmd0aChjb25zdF9jYXN0PGNoYXIqKj4oY3VycmVudExhbmd1
YWdlKSksID09LCAyKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoY3VycmVudExhbmd1YWdlWzBdLCA9
PSwgImVuX1VTIik7CisgICAgZ19hc3NlcnRfY21wc3RyKGN1cnJlbnRMYW5ndWFnZVsxXSwgPT0s
ICJlbl9HQiIpOworCisgICAgLy8gVHJ5IHBhc3NpbmcgYSBsaXN0IHdpdGggb25seSB3cm9uZyBs
YW5ndWFnZXMuCisgICAgbGFuZ3VhZ2VzID0gYWRvcHRHUmVmKGdfcHRyX2FycmF5X25ldygpKTsK
KyAgICBnX3B0cl9hcnJheV9hZGQobGFuZ3VhZ2VzLmdldCgpLCBjb25zdF9jYXN0PGdwb2ludGVy
PihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4oImJkX1dSIikpKTsKKyAgICBnX3B0cl9hcnJheV9h
ZGQobGFuZ3VhZ2VzLmdldCgpLCBjb25zdF9jYXN0PGdwb2ludGVyPihzdGF0aWNfY2FzdDxjb25z
dCB2b2lkKj4oIndyX0JEIikpKTsKKyAgICBnX3B0cl9hcnJheV9hZGQobGFuZ3VhZ2VzLmdldCgp
LCAwKTsKKyAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdl
cyh3ZWJDb250ZXh0LCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqIGNvbnN0Kj4obGFuZ3Vh
Z2VzLT5wZGF0YSkpOworICAgIGN1cnJlbnRMYW5ndWFnZSA9IHdlYmtpdF93ZWJfY29udGV4dF9n
ZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKHdlYkNvbnRleHQpOworICAgIGdfYXNzZXJ0KCFj
dXJyZW50TGFuZ3VhZ2UpOworCisgICAgLy8gQ2hlY2sgZGlzYWJsaW5nIGFuZCByZS1lbmFibGlu
ZyBzcGVsbCBjaGVja2luZy4KKyAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3NwZWxsX2NoZWNr
aW5nX2VuYWJsZWQod2ViQ29udGV4dCwgRkFMU0UpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2Vi
X2NvbnRleHRfZ2V0X3NwZWxsX2NoZWNraW5nX2VuYWJsZWQod2ViQ29udGV4dCkpOworICAgIHdl
YmtpdF93ZWJfY29udGV4dF9zZXRfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZCh3ZWJDb250ZXh0LCBU
UlVFKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3NwZWxsX2NoZWNraW5n
X2VuYWJsZWQod2ViQ29udGV4dCkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViQ29udGV4dExh
bmd1YWdlcyhXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBzdGF0aWMg
Y29uc3QgY2hhciogZXhwZWN0ZWREZWZhdWx0TGFuZ3VhZ2UgPSAiZW4iOworICAgIHRlc3QtPmxv
YWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2Fp
dFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgc2l6ZV90IG1haW5SZXNvdXJjZURhdGFTaXplID0g
MDsKKyAgICBjb25zdCBjaGFyKiBtYWluUmVzb3VyY2VEYXRhID0gdGVzdC0+bWFpblJlc291cmNl
RGF0YShtYWluUmVzb3VyY2VEYXRhU2l6ZSk7CisgICAgZ19hc3NlcnRfY21wdWludChtYWluUmVz
b3VyY2VEYXRhU2l6ZSwgPT0sIHN0cmxlbihleHBlY3RlZERlZmF1bHRMYW5ndWFnZSkpOworICAg
IGdfYXNzZXJ0KCFzdHJuY21wKG1haW5SZXNvdXJjZURhdGEsIGV4cGVjdGVkRGVmYXVsdExhbmd1
YWdlLCBtYWluUmVzb3VyY2VEYXRhU2l6ZSkpOworCisgICAgR1JlZlB0cjxHUHRyQXJyYXk+IGxh
bmd1YWdlcyA9IGFkb3B0R1JlZihnX3B0cl9hcnJheV9uZXcoKSk7CisgICAgZ19wdHJfYXJyYXlf
YWRkKGxhbmd1YWdlcy5nZXQoKSwgY29uc3RfY2FzdDxncG9pbnRlcj4oc3RhdGljX2Nhc3Q8Y29u
c3Qgdm9pZCo+KCJlbiIpKSk7CisgICAgZ19wdHJfYXJyYXlfYWRkKGxhbmd1YWdlcy5nZXQoKSwg
Y29uc3RfY2FzdDxncG9pbnRlcj4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KCJFU19lcyIpKSk7
CisgICAgZ19wdHJfYXJyYXlfYWRkKGxhbmd1YWdlcy5nZXQoKSwgY29uc3RfY2FzdDxncG9pbnRl
cj4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KCJkRSIpKSk7CisgICAgZ19wdHJfYXJyYXlfYWRk
KGxhbmd1YWdlcy5nZXQoKSwgMCk7CisgICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF9wcmVmZXJy
ZWRfbGFuZ3VhZ2VzKHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpLCByZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIqIGNvbnN0Kj4obGFuZ3VhZ2VzLT5wZGF0YSkpOworCisgICAgc3Rh
dGljIGNvbnN0IGNoYXIqIGV4cGVjdGVkTGFuZ3VhZ2VzID0gImVuLCBlcy1lcztxPTAuOTAsIGRl
O3E9MC44MCI7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIiku
ZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBtYWluUmVz
b3VyY2VEYXRhU2l6ZSA9IDA7CisgICAgbWFpblJlc291cmNlRGF0YSA9IHRlc3QtPm1haW5SZXNv
dXJjZURhdGEobWFpblJlc291cmNlRGF0YVNpemUpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQobWFp
blJlc291cmNlRGF0YVNpemUsID09LCBzdHJsZW4oZXhwZWN0ZWRMYW5ndWFnZXMpKTsKKyAgICBn
X2Fzc2VydCghc3RybmNtcChtYWluUmVzb3VyY2VEYXRhLCBleHBlY3RlZExhbmd1YWdlcywgbWFp
blJlc291cmNlRGF0YVNpemUpKTsKK30KKworc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291
cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwg
R0hhc2hUYWJsZSosIFNvdXBDbGllbnRDb250ZXh0KiwgZ3BvaW50ZXIpCit7CisgICAgaWYgKG1l
c3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKKyAgICAgICAgc291cF9tZXNzYWdl
X3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiLyIpKSB7Cisg
ICAgICAgIGNvbnN0IGNoYXIqIGFjY2VwdExhbmd1YWdlID0gc291cF9tZXNzYWdlX2hlYWRlcnNf
Z2V0X29uZShtZXNzYWdlLT5yZXF1ZXN0X2hlYWRlcnMsICJBY2NlcHQtTGFuZ3VhZ2UiKTsKKyAg
ICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOwor
ICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwg
U09VUF9NRU1PUllfQ09QWSwgYWNjZXB0TGFuZ3VhZ2UsIHN0cmxlbihhY2NlcHRMYW5ndWFnZSkp
OworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9i
b2R5KTsKKyAgICB9IGVsc2UKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2Fn
ZSwgU09VUF9TVEFUVVNfTk9UX0ZPVU5EKTsKK30KKworY2xhc3MgU2VjdXJpdHlQb2xpY3lUZXN0
OiBwdWJsaWMgVGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShTZWN1
cml0eVBvbGljeVRlc3QpOworCisgICAgZW51bSBTZWN1cml0eVBvbGljeSB7CisgICAgICAgIExv
Y2FsID0gMSA8PCAxLAorICAgICAgICBOb0FjY2VzcyA9IDEgPDwgMiwKKyAgICAgICAgRGlzcGxh
eUlzb2xhdGVkID0gMSA8PCAzLAorICAgICAgICBTZWN1cmUgPSAxIDw8IDQsCisgICAgICAgIENP
UlNFbmFibGVkID0gMSA8PCA1LAorICAgICAgICBFbXB0eURvY3VtZW50ID0gMSA8PCA2CisgICAg
fTsKKworICAgIFNlY3VyaXR5UG9saWN5VGVzdCgpCisgICAgICAgIDogbV9tYW5hZ2VyKHdlYmtp
dF93ZWJfY29udGV4dF9nZXRfc2VjdXJpdHlfbWFuYWdlcih3ZWJraXRfd2ViX2NvbnRleHRfZ2V0
X2RlZmF1bHQoKSkpCisgICAgeworICAgIH0KKworICAgIHZvaWQgdmVyaWZ5VGhhdFNjaGVtZU1h
dGNoZXNQb2xpY3koY29uc3QgY2hhciogc2NoZW1lLCB1bnNpZ25lZCBwb2xpY3kpCisgICAgewor
ICAgICAgICBpZiAocG9saWN5ICYgTG9jYWwpCisgICAgICAgICAgICBnX2Fzc2VydCh3ZWJraXRf
c2VjdXJpdHlfbWFuYWdlcl91cmlfc2NoZW1lX2lzX2xvY2FsKG1fbWFuYWdlciwgc2NoZW1lKSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2VjdXJpdHlfbWFu
YWdlcl91cmlfc2NoZW1lX2lzX2xvY2FsKG1fbWFuYWdlciwgc2NoZW1lKSk7CisgICAgICAgIGlm
IChwb2xpY3kgJiBOb0FjY2VzcykKKyAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9zZWN1cml0
eV9tYW5hZ2VyX3VyaV9zY2hlbWVfaXNfbm9fYWNjZXNzKG1fbWFuYWdlciwgc2NoZW1lKSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2VjdXJpdHlfbWFuYWdl
cl91cmlfc2NoZW1lX2lzX25vX2FjY2VzcyhtX21hbmFnZXIsIHNjaGVtZSkpOworICAgICAgICBp
ZiAocG9saWN5ICYgRGlzcGxheUlzb2xhdGVkKQorICAgICAgICAgICAgZ19hc3NlcnQod2Via2l0
X3NlY3VyaXR5X21hbmFnZXJfdXJpX3NjaGVtZV9pc19kaXNwbGF5X2lzb2xhdGVkKG1fbWFuYWdl
ciwgc2NoZW1lKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRf
c2VjdXJpdHlfbWFuYWdlcl91cmlfc2NoZW1lX2lzX2Rpc3BsYXlfaXNvbGF0ZWQobV9tYW5hZ2Vy
LCBzY2hlbWUpKTsKKyAgICAgICAgaWYgKHBvbGljeSAmIFNlY3VyZSkKKyAgICAgICAgICAgIGdf
YXNzZXJ0KHdlYmtpdF9zZWN1cml0eV9tYW5hZ2VyX3VyaV9zY2hlbWVfaXNfc2VjdXJlKG1fbWFu
YWdlciwgc2NoZW1lKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJr
aXRfc2VjdXJpdHlfbWFuYWdlcl91cmlfc2NoZW1lX2lzX3NlY3VyZShtX21hbmFnZXIsIHNjaGVt
ZSkpOworICAgICAgICBpZiAocG9saWN5ICYgQ09SU0VuYWJsZWQpCisgICAgICAgICAgICBnX2Fz
c2VydCh3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl91cmlfc2NoZW1lX2lzX2NvcnNfZW5hYmxlZCht
X21hbmFnZXIsIHNjaGVtZSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBnX2Fzc2VydCgh
d2Via2l0X3NlY3VyaXR5X21hbmFnZXJfdXJpX3NjaGVtZV9pc19jb3JzX2VuYWJsZWQobV9tYW5h
Z2VyLCBzY2hlbWUpKTsKKyAgICAgICAgaWYgKHBvbGljeSAmIEVtcHR5RG9jdW1lbnQpCisgICAg
ICAgICAgICBnX2Fzc2VydCh3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl91cmlfc2NoZW1lX2lzX2Vt
cHR5X2RvY3VtZW50KG1fbWFuYWdlciwgc2NoZW1lKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl91cmlfc2NoZW1lX2lzX2VtcHR5
X2RvY3VtZW50KG1fbWFuYWdlciwgc2NoZW1lKSk7CisgICAgfQorCisgICAgV2ViS2l0U2VjdXJp
dHlNYW5hZ2VyKiBtX21hbmFnZXI7Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0V2ViQ29udGV4dFNl
Y3VyaXR5UG9saWN5KFNlY3VyaXR5UG9saWN5VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sK
KyAgICAvLyBWZXJpZnlUaGF0U2NoZW1lTWF0Y2hlc1BvbGljeSBkZWZhdWx0IHBvbGljeSBmb3Ig
d2VsbCBrbm93biBzY2hlbWVzLgorICAgIHRlc3QtPnZlcmlmeVRoYXRTY2hlbWVNYXRjaGVzUG9s
aWN5KCJodHRwIiwgU2VjdXJpdHlQb2xpY3lUZXN0OjpDT1JTRW5hYmxlZCk7CisgICAgdGVzdC0+
dmVyaWZ5VGhhdFNjaGVtZU1hdGNoZXNQb2xpY3koImh0dHBzIiwgU2VjdXJpdHlQb2xpY3lUZXN0
OjpDT1JTRW5hYmxlZCB8IFNlY3VyaXR5UG9saWN5VGVzdDo6U2VjdXJlKTsKKyAgICB0ZXN0LT52
ZXJpZnlUaGF0U2NoZW1lTWF0Y2hlc1BvbGljeSgiZmlsZSIsIFNlY3VyaXR5UG9saWN5VGVzdDo6
TG9jYWwpOworICAgIHRlc3QtPnZlcmlmeVRoYXRTY2hlbWVNYXRjaGVzUG9saWN5KCJkYXRhIiwg
U2VjdXJpdHlQb2xpY3lUZXN0OjpOb0FjY2VzcyB8IFNlY3VyaXR5UG9saWN5VGVzdDo6U2VjdXJl
KTsKKyAgICB0ZXN0LT52ZXJpZnlUaGF0U2NoZW1lTWF0Y2hlc1BvbGljeSgiYWJvdXQiLCBTZWN1
cml0eVBvbGljeVRlc3Q6Ok5vQWNjZXNzIHwgU2VjdXJpdHlQb2xpY3lUZXN0OjpTZWN1cmUgfCBT
ZWN1cml0eVBvbGljeVRlc3Q6OkVtcHR5RG9jdW1lbnQpOworCisgICAgLy8gQ3VzdG9tIHNjaGVt
ZS4KKyAgICB0ZXN0LT52ZXJpZnlUaGF0U2NoZW1lTWF0Y2hlc1BvbGljeSgiZm9vIiwgMCk7CisK
KyAgICB3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl9yZWdpc3Rlcl91cmlfc2NoZW1lX2FzX2xvY2Fs
KHRlc3QtPm1fbWFuYWdlciwgImZvbyIpOworICAgIHRlc3QtPnZlcmlmeVRoYXRTY2hlbWVNYXRj
aGVzUG9saWN5KCJmb28iLCBTZWN1cml0eVBvbGljeVRlc3Q6OkxvY2FsKTsKKyAgICB3ZWJraXRf
c2VjdXJpdHlfbWFuYWdlcl9yZWdpc3Rlcl91cmlfc2NoZW1lX2FzX25vX2FjY2Vzcyh0ZXN0LT5t
X21hbmFnZXIsICJmb28iKTsKKyAgICB0ZXN0LT52ZXJpZnlUaGF0U2NoZW1lTWF0Y2hlc1BvbGlj
eSgiZm9vIiwgU2VjdXJpdHlQb2xpY3lUZXN0OjpMb2NhbCB8IFNlY3VyaXR5UG9saWN5VGVzdDo6
Tm9BY2Nlc3MpOworICAgIHdlYmtpdF9zZWN1cml0eV9tYW5hZ2VyX3JlZ2lzdGVyX3VyaV9zY2hl
bWVfYXNfZGlzcGxheV9pc29sYXRlZCh0ZXN0LT5tX21hbmFnZXIsICJmb28iKTsKKyAgICB0ZXN0
LT52ZXJpZnlUaGF0U2NoZW1lTWF0Y2hlc1BvbGljeSgiZm9vIiwgU2VjdXJpdHlQb2xpY3lUZXN0
OjpMb2NhbCB8IFNlY3VyaXR5UG9saWN5VGVzdDo6Tm9BY2Nlc3MgfCBTZWN1cml0eVBvbGljeVRl
c3Q6OkRpc3BsYXlJc29sYXRlZCk7CisgICAgd2Via2l0X3NlY3VyaXR5X21hbmFnZXJfcmVnaXN0
ZXJfdXJpX3NjaGVtZV9hc19zZWN1cmUodGVzdC0+bV9tYW5hZ2VyLCAiZm9vIik7CisgICAgdGVz
dC0+dmVyaWZ5VGhhdFNjaGVtZU1hdGNoZXNQb2xpY3koImZvbyIsIFNlY3VyaXR5UG9saWN5VGVz
dDo6TG9jYWwgfCBTZWN1cml0eVBvbGljeVRlc3Q6Ok5vQWNjZXNzIHwgU2VjdXJpdHlQb2xpY3lU
ZXN0OjpEaXNwbGF5SXNvbGF0ZWQgfCBTZWN1cml0eVBvbGljeVRlc3Q6OlNlY3VyZSk7CisgICAg
d2Via2l0X3NlY3VyaXR5X21hbmFnZXJfcmVnaXN0ZXJfdXJpX3NjaGVtZV9hc19jb3JzX2VuYWJs
ZWQodGVzdC0+bV9tYW5hZ2VyLCAiZm9vIik7CisgICAgdGVzdC0+dmVyaWZ5VGhhdFNjaGVtZU1h
dGNoZXNQb2xpY3koImZvbyIsIFNlY3VyaXR5UG9saWN5VGVzdDo6TG9jYWwgfCBTZWN1cml0eVBv
bGljeVRlc3Q6Ok5vQWNjZXNzIHwgU2VjdXJpdHlQb2xpY3lUZXN0OjpEaXNwbGF5SXNvbGF0ZWQg
fCBTZWN1cml0eVBvbGljeVRlc3Q6OlNlY3VyZQorICAgICAgICAgICAgICAgIHwgU2VjdXJpdHlQ
b2xpY3lUZXN0OjpDT1JTRW5hYmxlZCk7CisgICAgd2Via2l0X3NlY3VyaXR5X21hbmFnZXJfcmVn
aXN0ZXJfdXJpX3NjaGVtZV9hc19lbXB0eV9kb2N1bWVudCh0ZXN0LT5tX21hbmFnZXIsICJmb28i
KTsKKyAgICB0ZXN0LT52ZXJpZnlUaGF0U2NoZW1lTWF0Y2hlc1BvbGljeSgiZm9vIiwgU2VjdXJp
dHlQb2xpY3lUZXN0OjpMb2NhbCB8IFNlY3VyaXR5UG9saWN5VGVzdDo6Tm9BY2Nlc3MgfCBTZWN1
cml0eVBvbGljeVRlc3Q6OkRpc3BsYXlJc29sYXRlZCB8IFNlY3VyaXR5UG9saWN5VGVzdDo6U2Vj
dXJlCisgICAgICAgICAgICAgICAgfCBTZWN1cml0eVBvbGljeVRlc3Q6OkNPUlNFbmFibGVkIHwg
U2VjdXJpdHlQb2xpY3lUZXN0OjpFbXB0eURvY3VtZW50KTsKK30KKwordm9pZCBiZWZvcmVBbGwo
KQoreworICAgIGtTZXJ2ZXIgPSBuZXcgV2ViS2l0VGVzdFNlcnZlcigpOworICAgIGtTZXJ2ZXIt
PnJ1bihzZXJ2ZXJDYWxsYmFjayk7CisKKyAgICBUZXN0OjphZGQoIldlYktpdFdlYkNvbnRleHQi
LCAiZGVmYXVsdC1jb250ZXh0IiwgdGVzdFdlYkNvbnRleHREZWZhdWx0KTsKKyAgICBQbHVnaW5z
VGVzdDo6YWRkKCJXZWJLaXRXZWJDb250ZXh0IiwgImdldC1wbHVnaW5zIiwgdGVzdFdlYkNvbnRl
eHRHZXRQbHVnaW5zKTsKKyAgICBVUklTY2hlbWVUZXN0OjphZGQoIldlYktpdFdlYkNvbnRleHQi
LCAidXJpLXNjaGVtZSIsIHRlc3RXZWJDb250ZXh0VVJJU2NoZW1lKTsKKyAgICBUZXN0OjphZGQo
IldlYktpdFdlYkNvbnRleHQiLCAic3BlbGwtY2hlY2tlciIsIHRlc3RXZWJDb250ZXh0U3BlbGxD
aGVja2VyKTsKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJDb250ZXh0IiwgImxhbmd1
YWdlcyIsIHRlc3RXZWJDb250ZXh0TGFuZ3VhZ2VzKTsKKyAgICBTZWN1cml0eVBvbGljeVRlc3Q6
OmFkZCgiV2ViS2l0U2VjdXJpdHlNYW5hZ2VyIiwgInNlY3VyaXR5LXBvbGljeSIsIHRlc3RXZWJD
b250ZXh0U2VjdXJpdHlQb2xpY3kpOworfQorCit2b2lkIGFmdGVyQWxsKCkKK3sKKyAgICBkZWxl
dGUga1NlcnZlcjsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Mkd0ay9UZXN0V2ViS2l0V2ViVmlldy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdDJHdGsvVGVzdFdlYktpdFdlYlZpZXcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmQ3MGIwYTIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFdlYlZpZXcuY3BwCkBAIC0wLDAgKzEsNjA4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9KU1N0cmluZ1JlZi5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTVmFsdWVSZWYuaD4K
KyNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIu
aD4KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdEZWZhdWx0Q29udGV4dChXZWJWaWV3VGVzdCog
dGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ2V0
X2NvbnRleHQodGVzdC0+bV93ZWJWaWV3KSA9PSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1
bHQoKSk7CisKKyAgICAvLyBDaGVjayB0aGF0IGEgd2ViIHZpZXcgY3JlYXRlZCB3aXRoIGdfb2Jq
ZWN0X25ldyBoYXMgdGhlIGRlZmF1bHQgY29udGV4dC4KKyAgICBHUmVmUHRyPFdlYktpdFdlYlZp
ZXc+IHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dF
Ql9WSUVXLCBOVUxMKSk7CisgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0
KHdlYlZpZXcuZ2V0KCkpID09IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpKTsKK30K
Kworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdDdXN0b21DaGFyc2V0KFdlYlZpZXdUZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQoreworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfZ2V0X2N1
c3RvbV9jaGFyc2V0KHRlc3QtPm1fd2ViVmlldykpOworICAgIHdlYmtpdF93ZWJfdmlld19zZXRf
Y3VzdG9tX2NoYXJzZXQodGVzdC0+bV93ZWJWaWV3LCAidXRmOCIpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X2N1c3RvbV9jaGFyc2V0KHRlc3QtPm1fd2ViVmlldyks
ID09LCAidXRmOCIpOworICAgIC8vIEdvIGJhY2sgdG8gdGhlIGRlZmF1bHQgY2hhcnNldC4KKyAg
ICB3ZWJraXRfd2ViX3ZpZXdfc2V0X2N1c3RvbV9jaGFyc2V0KHRlc3QtPm1fd2ViVmlldywgMCk7
CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19nZXRfY3VzdG9tX2NoYXJzZXQodGVzdC0+
bV93ZWJWaWV3KSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3U2V0dGluZ3MoV2ViVmll
d1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgV2ViS2l0U2V0dGluZ3MqIGRlZmF1
bHRTZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3ModGVzdC0+bV93ZWJWaWV3
KTsKKyAgICBnX2Fzc2VydChkZWZhdWx0U2V0dGluZ3MpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9z
ZXR0aW5nc19nZXRfZW5hYmxlX2phdmFzY3JpcHQoZGVmYXVsdFNldHRpbmdzKSk7CisKKyAgICBH
UmVmUHRyPFdlYktpdFNldHRpbmdzPiBuZXdTZXR0aW5ncyA9IGFkb3B0R1JlZih3ZWJraXRfc2V0
dGluZ3NfbmV3KCkpOworICAgIGdfb2JqZWN0X3NldChHX09CSkVDVChuZXdTZXR0aW5ncy5nZXQo
KSksICJlbmFibGUtamF2YXNjcmlwdCIsIEZBTFNFLCBOVUxMKTsKKyAgICB3ZWJraXRfd2ViX3Zp
ZXdfc2V0X3NldHRpbmdzKHRlc3QtPm1fd2ViVmlldywgbmV3U2V0dGluZ3MuZ2V0KCkpOworCisg
ICAgV2ViS2l0U2V0dGluZ3MqIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5n
cyh0ZXN0LT5tX3dlYlZpZXcpOworICAgIGdfYXNzZXJ0KHNldHRpbmdzICE9IGRlZmF1bHRTZXR0
aW5ncyk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2phdmFzY3Jp
cHQoc2V0dGluZ3MpKTsKKworICAgIEdSZWZQdHI8R3RrV2lkZ2V0PiB3ZWJWaWV3MiA9IHdlYmtp
dF93ZWJfdmlld19uZXcoKTsKKyAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVz
dEZpbmlzaGVzKEdfT0JKRUNUKHdlYlZpZXcyLmdldCgpKSk7CisgICAgd2Via2l0X3dlYl92aWV3
X3NldF9zZXR0aW5ncyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldzIuZ2V0KCkpLCBzZXR0aW5ncyk7
CisgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyhXRUJLSVRfV0VCX1ZJ
RVcod2ViVmlldzIuZ2V0KCkpKSA9PSBzZXR0aW5ncyk7CisKKyAgICBHUmVmUHRyPFdlYktpdFNl
dHRpbmdzPiBuZXdTZXR0aW5nczIgPSBhZG9wdEdSZWYod2Via2l0X3NldHRpbmdzX25ldygpKTsK
KyAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X3NldHRpbmdzKFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3
Mi5nZXQoKSksIG5ld1NldHRpbmdzMi5nZXQoKSk7CisgICAgc2V0dGluZ3MgPSB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X3NldHRpbmdzKFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3Mi5nZXQoKSkpOworICAg
IGdfYXNzZXJ0KHNldHRpbmdzID09IG5ld1NldHRpbmdzMi5nZXQoKSk7CisgICAgZ19hc3NlcnQo
d2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfamF2YXNjcmlwdChzZXR0aW5ncykpOworfQorCitz
dGF0aWMgdm9pZCB0ZXN0V2ViVmlld1pvb21MZXZlbChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKK3sKKyAgICBnX2Fzc2VydF9jbXBmbG9hdCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3pv
b21fbGV2ZWwodGVzdC0+bV93ZWJWaWV3KSwgPT0sIDEpOworICAgIHdlYmtpdF93ZWJfdmlld19z
ZXRfem9vbV9sZXZlbCh0ZXN0LT5tX3dlYlZpZXcsIDIuNSk7CisgICAgZ19hc3NlcnRfY21wZmxv
YXQod2Via2l0X3dlYl92aWV3X2dldF96b29tX2xldmVsKHRlc3QtPm1fd2ViVmlldyksID09LCAy
LjUpOworCisgICAgd2Via2l0X3NldHRpbmdzX3NldF96b29tX3RleHRfb25seSh3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X3NldHRpbmdzKHRlc3QtPm1fd2ViVmlldyksIFRSVUUpOworICAgIC8vIFRoZSB6
b29tIGxldmVsIHNob3VsZG4ndCBjaGFuZ2Ugd2hlbiB6b29tLXRleHQtb25seSBzZXR0aW5nIGNo
YW5nZXMuCisgICAgZ19hc3NlcnRfY21wZmxvYXQod2Via2l0X3dlYl92aWV3X2dldF96b29tX2xl
dmVsKHRlc3QtPm1fd2ViVmlldyksID09LCAyLjUpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2Vi
Vmlld1J1bkphdmFTY3JpcHQoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7Cisg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIGh0bWwgPSAiPGh0bWw+PGJvZHk+PGEgaWQ9J1dlYktpdExp
bmsnIGhyZWY9J2h0dHA6Ly93d3cud2Via2l0Z3RrLm9yZy8nIHRpdGxlPSdXZWJLaXRHVEsrIFRp
dGxlJz5XZWJLaXRHVEsrIFdlYnNpdGU8L2E+PC9ib2R5PjwvaHRtbD4iOworICAgIHRlc3QtPmxv
YWRIdG1sKGh0bWwsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisg
ICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAgIFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGph
dmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQo
IndpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnV2ViS2l0TGluaycpLnRpdGxlOyIsICZl
cnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19h
c3NlcnQoIWVycm9yLmdldCgpKTsKKyAgICBHT3duUHRyPGNoYXI+IHZhbHVlU3RyaW5nKFdlYlZp
ZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKKyAg
ICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAiV2ViS2l0R1RLKyBUaXRs
ZSIpOworCisgICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0
VW50aWxGaW5pc2hlZCgid2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdXZWJLaXRMaW5r
JykuaHJlZjsiLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1
bHQpOworICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7CisgICAgdmFsdWVTdHJpbmcuc2V0KFdl
YlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAiaHR0cDovL3d3dy53
ZWJraXRndGsub3JnLyIpOworCisgICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFT
Y3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgid2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdXZWJLaXRMaW5rJykudGV4dENvbnRlbnQiLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGdfYXNz
ZXJ0KGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7CisgICAg
dmFsdWVTdHJpbmcuc2V0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGph
dmFzY3JpcHRSZXN1bHQpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCks
ID09LCAiV2ViS2l0R1RLKyBXZWJzaXRlIik7CisKKyAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVz
dC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJhID0gMjU7IiwgJmVycm9yLm91
dFB0cigpKTsKKyAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydCgh
ZXJyb3IuZ2V0KCkpOworICAgIGdfYXNzZXJ0X2NtcGZsb2F0KFdlYlZpZXdUZXN0OjpqYXZhc2Ny
aXB0UmVzdWx0VG9OdW1iZXIoamF2YXNjcmlwdFJlc3VsdCksID09LCAyNSk7CisKKyAgICBqYXZh
c2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJh
ID0gMi41OyIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3Vs
dCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdChX
ZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvTnVtYmVyKGphdmFzY3JpcHRSZXN1bHQpLCA9
PSwgMi41KTsKKworICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5k
V2FpdFVudGlsRmluaXNoZWQoImEgPSB0cnVlIiwgJmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fz
c2VydChqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOworICAg
IGdfYXNzZXJ0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9Cb29sZWFuKGphdmFzY3Jp
cHRSZXN1bHQpKTsKKworICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0
QW5kV2FpdFVudGlsRmluaXNoZWQoImEgPSBmYWxzZSIsICZlcnJvci5vdXRQdHIoKSk7CisgICAg
Z19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsK
KyAgICBnX2Fzc2VydCghV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0Jvb2xlYW4oamF2
YXNjcmlwdFJlc3VsdCkpOworCisgICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFT
Y3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiYSA9IG51bGwiLCAmZXJyb3Iub3V0UHRyKCkpOwor
ICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQo
KSk7CisgICAgZ19hc3NlcnQoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRJc051bGwoamF2
YXNjcmlwdFJlc3VsdCkpOworCisgICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFT
Y3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZnVuY3Rpb24gRm9vKCkgeyBhID0gMjU7IH0gRm9v
KCk7IiwgJmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsK
KyAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOworICAgIGdfYXNzZXJ0KFdlYlZpZXdUZXN0Ojpq
YXZhc2NyaXB0UmVzdWx0SXNVbmRlZmluZWQoamF2YXNjcmlwdFJlc3VsdCkpOworCisgICAgamF2
YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRGcm9tR1Jlc291cmNlQW5kV2FpdFVu
dGlsRmluaXNoZWQoIi9vcmcvd2Via2l0L3dlYmtpdDJndGsvdGVzdHMvbGluay10aXRsZS5qcyIs
ICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAg
Z19hc3NlcnQoIWVycm9yLmdldCgpKTsKKyAgICB2YWx1ZVN0cmluZy5zZXQoV2ViVmlld1Rlc3Q6
OmphdmFzY3JpcHRSZXN1bHRUb0NTdHJpbmcoamF2YXNjcmlwdFJlc3VsdCkpOworICAgIGdfYXNz
ZXJ0X2NtcHN0cih2YWx1ZVN0cmluZy5nZXQoKSwgPT0sICJXZWJLaXRHVEsrIFRpdGxlIik7CisK
KyAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEZyb21HUmVzb3VyY2VB
bmRXYWl0VW50aWxGaW5pc2hlZCgiL3dyb25nL3BhdGgvdG8vcmVzb3VyY2UuanMiLCAmZXJyb3Iu
b3V0UHRyKCkpOworICAgIGdfYXNzZXJ0KCFqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2Vy
dF9lcnJvcihlcnJvci5nZXQoKSwgR19SRVNPVVJDRV9FUlJPUiwgR19SRVNPVVJDRV9FUlJPUl9O
T1RfRk9VTkQpOworICAgIGVycm9yLmNsZWFyKCk7CisKKyAgICBqYXZhc2NyaXB0UmVzdWx0ID0g
dGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJmb28oKTsiLCAmZXJyb3Iu
b3V0UHRyKCkpOworICAgIGdfYXNzZXJ0KCFqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2Vy
dF9lcnJvcihlcnJvci5nZXQoKSwgV0VCS0lUX0pBVkFTQ1JJUFRfRVJST1IsIFdFQktJVF9KQVZB
U0NSSVBUX0VSUk9SX1NDUklQVF9GQUlMRUQpOworfQorCitjbGFzcyBGdWxsU2NyZWVuQ2xpZW50
VGVzdDogcHVibGljIFdlYlZpZXdUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9G
SVhUVVJFKEZ1bGxTY3JlZW5DbGllbnRUZXN0KTsKKworICAgIGVudW0gRnVsbFNjcmVlbkV2ZW50
IHsKKyAgICAgICAgTm9uZSwKKyAgICAgICAgRW50ZXIsCisgICAgICAgIExlYXZlCisgICAgfTsK
KworICAgIHN0YXRpYyBnYm9vbGVhbiB2aWV3RW50ZXJGdWxsU2NyZWVuQ2FsbGJhY2soV2ViS2l0
V2ViVmlldyosIEZ1bGxTY3JlZW5DbGllbnRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVz
dC0+bV9ldmVudCA9IEVudGVyOworICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFp
bkxvb3ApOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgc3RhdGljIGdib29s
ZWFuIHZpZXdMZWF2ZUZ1bGxTY3JlZW5DYWxsYmFjayhXZWJLaXRXZWJWaWV3KiwgRnVsbFNjcmVl
bkNsaWVudFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT5tX2V2ZW50ID0gTGVhdmU7
CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7CisgICAgICAgIHJl
dHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBGdWxsU2NyZWVuQ2xpZW50VGVzdCgpCisgICAgICAg
IDogbV9ldmVudChOb25lKQorICAgIHsKKyAgICAgICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFi
bGVfZnVsbHNjcmVlbih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKG1fd2ViVmlldyksIFRS
VUUpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImVudGVyLWZ1bGxzY3Jl
ZW4iLCBHX0NBTExCQUNLKHZpZXdFbnRlckZ1bGxTY3JlZW5DYWxsYmFjayksIHRoaXMpOworICAg
ICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImxlYXZlLWZ1bGxzY3JlZW4iLCBHX0NB
TExCQUNLKHZpZXdMZWF2ZUZ1bGxTY3JlZW5DYWxsYmFjayksIHRoaXMpOworICAgIH0KKworICAg
IH5GdWxsU2NyZWVuQ2xpZW50VGVzdCgpCisgICAgeworICAgICAgICBnX3NpZ25hbF9oYW5kbGVy
c19kaXNjb25uZWN0X21hdGNoZWQobV93ZWJWaWV3LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAw
LCAwLCAwLCB0aGlzKTsKKyAgICB9CisKKyAgICB2b2lkIHJlcXVlc3RGdWxsU2NyZWVuQW5kV2Fp
dFVudGlsRW50ZXJlZEZ1bGxTY3JlZW4oKQorICAgIHsKKyAgICAgICAgbV9ldmVudCA9IE5vbmU7
CisgICAgICAgIHdlYmtpdF93ZWJfdmlld19ydW5famF2YXNjcmlwdChtX3dlYlZpZXcsICJkb2N1
bWVudC5kb2N1bWVudEVsZW1lbnQud2Via2l0UmVxdWVzdEZ1bGxTY3JlZW4oKTsiLCAwLCAwLCAw
KTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIHN0
YXRpYyBnYm9vbGVhbiBsZWF2ZUZ1bGxTY3JlZW5JZGxlKEZ1bGxTY3JlZW5DbGllbnRUZXN0KiB0
ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+a2V5U3Ryb2tlKEdES19LRVlfRXNjYXBlKTsKKyAg
ICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIHZvaWQgbGVhdmVGdWxsU2NyZWVuQW5k
V2FpdFVudGlsTGVmdEZ1bGxTY3JlZW4oKQorICAgIHsKKyAgICAgICAgbV9ldmVudCA9IE5vbmU7
CisgICAgICAgIGdfaWRsZV9hZGQocmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4obGVhdmVG
dWxsU2NyZWVuSWRsZSksIHRoaXMpOworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9v
cCk7CisgICAgfQorCisgICAgRnVsbFNjcmVlbkV2ZW50IG1fZXZlbnQ7Cit9OworCitzdGF0aWMg
dm9pZCB0ZXN0V2ViVmlld0Z1bGxTY3JlZW4oRnVsbFNjcmVlbkNsaWVudFRlc3QqIHRlc3QsIGdj
b25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVk
KCk7CisgICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxib2R5PkZ1bGxTY3JlZW4gdGVzdDwvYm9k
eT48L2h0bWw+IiwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAg
dGVzdC0+cmVxdWVzdEZ1bGxTY3JlZW5BbmRXYWl0VW50aWxFbnRlcmVkRnVsbFNjcmVlbigpOwor
ICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2V2ZW50LCA9PSwgRnVsbFNjcmVlbkNsaWVudFRl
c3Q6OkVudGVyKTsKKyAgICB0ZXN0LT5sZWF2ZUZ1bGxTY3JlZW5BbmRXYWl0VW50aWxMZWZ0RnVs
bFNjcmVlbigpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2V2ZW50LCA9PSwgRnVsbFNj
cmVlbkNsaWVudFRlc3Q6OkxlYXZlKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdDYW5T
aG93TUlNRVR5cGUoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8g
U3VwcG9ydGVkIE1JTUUgdHlwZXMuCisgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2Nhbl9z
aG93X21pbWVfdHlwZSh0ZXN0LT5tX3dlYlZpZXcsICJ0ZXh0L2h0bWwiKSk7CisgICAgZ19hc3Nl
cnQod2Via2l0X3dlYl92aWV3X2Nhbl9zaG93X21pbWVfdHlwZSh0ZXN0LT5tX3dlYlZpZXcsICJ0
ZXh0L3BsYWluIikpOworICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19jYW5fc2hvd19taW1l
X3R5cGUodGVzdC0+bV93ZWJWaWV3LCAiaW1hZ2UvanBlZyIpKTsKKworICAgIC8vIFVuc3VwcG9y
dGVkIE1JTUUgdHlwZXMuCisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fc2hvd19t
aW1lX3R5cGUodGVzdC0+bV93ZWJWaWV3LCAidGV4dC92Y2FyZCIpKTsKKyAgICBnX2Fzc2VydCgh
d2Via2l0X3dlYl92aWV3X2Nhbl9zaG93X21pbWVfdHlwZSh0ZXN0LT5tX3dlYlZpZXcsICJhcHBs
aWNhdGlvbi9wZGYiKSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fc2hvd19t
aW1lX3R5cGUodGVzdC0+bV93ZWJWaWV3LCAiYXBwbGljYXRpb24vemlwIikpOworICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX3Nob3dfbWltZV90eXBlKHRlc3QtPm1fd2ViVmlldywg
ImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpKTsKKworICAgIC8vIFBsdWdpbnMgYXJlIG9ubHkg
c3VwcG9ydGVkIHdoZW4gZW5hYmxlZC4KKyAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X2FkZGl0
aW9uYWxfcGx1Z2luc19kaXJlY3Rvcnkod2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KHRlc3Qt
Pm1fd2ViVmlldyksIFdFQktJVF9URVNUX1BMVUdJTl9ESVIpOworICAgIGdfYXNzZXJ0KHdlYmtp
dF93ZWJfdmlld19jYW5fc2hvd19taW1lX3R5cGUodGVzdC0+bV93ZWJWaWV3LCAiYXBwbGljYXRp
b24veC13ZWJraXQtdGVzdC1uZXRzY2FwZSIpKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2Vu
YWJsZV9wbHVnaW5zKHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3ModGVzdC0+bV93ZWJWaWV3
KSwgRkFMU0UpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX3Nob3dfbWltZV90
eXBlKHRlc3QtPm1fd2ViVmlldywgImFwcGxpY2F0aW9uL3gtd2Via2l0LXRlc3QtbmV0c2NhcGUi
KSk7Cit9CisKK2NsYXNzIEZvcm1DbGllbnRUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3QgeworcHVi
bGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoRm9ybUNsaWVudFRlc3QpOworCisgICAg
c3RhdGljIHZvaWQgc3VibWl0Rm9ybUNhbGxiYWNrKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRGb3Jt
U3VibWlzc2lvblJlcXVlc3QqIHJlcXVlc3QsIEZvcm1DbGllbnRUZXN0KiB0ZXN0KQorICAgIHsK
KyAgICAgICAgdGVzdC0+c3VibWl0Rm9ybShyZXF1ZXN0KTsKKyAgICB9CisKKyAgICBGb3JtQ2xp
ZW50VGVzdCgpCisgICAgICAgIDogbV9zdWJtaXRQb3NpdGlvblgoMCkKKyAgICAgICAgLCBtX3N1
Ym1pdFBvc2l0aW9uWSgwKQorICAgIHsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZp
ZXcsICJzdWJtaXQtZm9ybSIsIEdfQ0FMTEJBQ0soc3VibWl0Rm9ybUNhbGxiYWNrKSwgdGhpcyk7
CisgICAgfQorCisgICAgfkZvcm1DbGllbnRUZXN0KCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFs
X2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3dlYlZpZXcsIEdfU0lHTkFMX01BVENIX0RB
VEEsIDAsIDAsIDAsIDAsIHRoaXMpOworICAgIH0KKworICAgIHZvaWQgc3VibWl0Rm9ybShXZWJL
aXRGb3JtU3VibWlzc2lvblJlcXVlc3QqIHJlcXVlc3QpCisgICAgeworICAgICAgICBhc3NlcnRP
YmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHJlcXVlc3QpKTsKKyAgICAg
ICAgbV9yZXF1ZXN0ID0gcmVxdWVzdDsKKyAgICAgICAgd2Via2l0X2Zvcm1fc3VibWlzc2lvbl9y
ZXF1ZXN0X3N1Ym1pdChyZXF1ZXN0KTsKKyAgICAgICAgcXVpdE1haW5Mb29wKCk7CisgICAgfQor
CisgICAgR0hhc2hUYWJsZSogd2FpdFVudGlsRm9ybVN1Ym1pdHRlZEFuZEdldFRleHRGaWVsZHMo
KQorICAgIHsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgICAgICBy
ZXR1cm4gd2Via2l0X2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0X2dldF90ZXh0X2ZpZWxkcyhtX3Jl
cXVlc3QuZ2V0KCkpOworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBkb0NsaWNrSWRsZUNh
bGxiYWNrKEZvcm1DbGllbnRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+Y2xpY2tN
b3VzZUJ1dHRvbih0ZXN0LT5tX3N1Ym1pdFBvc2l0aW9uWCwgdGVzdC0+bV9zdWJtaXRQb3NpdGlv
blksIDEpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgdm9pZCBzdWJtaXRG
b3JtQXRQb3NpdGlvbihpbnQgeCwgaW50IHkpCisgICAgeworICAgICAgICBtX3N1Ym1pdFBvc2l0
aW9uWCA9IHg7CisgICAgICAgIG1fc3VibWl0UG9zaXRpb25ZID0geTsKKyAgICAgICAgZ19pZGxl
X2FkZChyZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihkb0NsaWNrSWRsZUNhbGxiYWNrKSwg
dGhpcyk7CisgICAgfQorCisgICAgaW50IG1fc3VibWl0UG9zaXRpb25YOworICAgIGludCBtX3N1
Ym1pdFBvc2l0aW9uWTsKKyAgICBHUmVmUHRyPFdlYktpdEZvcm1TdWJtaXNzaW9uUmVxdWVzdD4g
bV9yZXF1ZXN0OworfTsKKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdTdWJtaXRGb3JtKEZvcm1D
bGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPnNob3dJbldpbmRv
d0FuZFdhaXRVbnRpbE1hcHBlZCgpOworCisgICAgY29uc3QgY2hhciogZm9ybUhUTUwgPQorICAg
ICAgICAiPGh0bWw+PGJvZHk+IgorICAgICAgICAiIDxmb3JtIGFjdGlvbj0nIyc+IgorICAgICAg
ICAiICA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0ndGV4dDEnIHZhbHVlPSd2YWx1ZTEnPiIKKyAg
ICAgICAgIiAgPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3RleHQyJyB2YWx1ZT0ndmFsdWUyJz4i
CisgICAgICAgICIgIDxpbnB1dCB0eXBlPSdwYXNzd29yZCcgbmFtZT0ncGFzc3dvcmQnIHZhbHVl
PSdzZWNyZXQnPiIKKyAgICAgICAgIiAgPHRleHRhcmVhIGNvbHM9JzUnIHJvd3M9JzUnIG5hbWU9
J3RleHRhcmVhJz5UZXh0PC90ZXh0YXJlYT4iCisgICAgICAgICIgIDxpbnB1dCB0eXBlPSdoaWRk
ZW4nIG5hbWU9J2hpZGRlbjEnIHZhbHVlPSdoaWRkZW4xJz4iCisgICAgICAgICIgIDxpbnB1dCB0
eXBlPSdzdWJtaXQnIHZhbHVlPSdTdWJtaXQnIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVm
dDoxOyB0b3A6MScgc2l6ZT0nMTAnPiIKKyAgICAgICAgIiA8L2Zvcm0+IgorICAgICAgICAiPC9i
b2R5PjwvaHRtbD4iOworCisgICAgdGVzdC0+bG9hZEh0bWwoZm9ybUhUTUwsICJmaWxlOi8vLyIp
OworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+c3VibWl0
Rm9ybUF0UG9zaXRpb24oNSwgNSk7CisgICAgR0hhc2hUYWJsZSogdmFsdWVzID0gdGVzdC0+d2Fp
dFVudGlsRm9ybVN1Ym1pdHRlZEFuZEdldFRleHRGaWVsZHMoKTsKKyAgICBnX2Fzc2VydCh2YWx1
ZXMpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQoZ19oYXNoX3RhYmxlX3NpemUodmFsdWVzKSwgPT0s
IDMpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzdGF0aWNfY2FzdDxjaGFyKj4oZ19oYXNoX3RhYmxl
X2xvb2t1cCh2YWx1ZXMsICJ0ZXh0MSIpKSwgPT0sICJ2YWx1ZTEiKTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIoc3RhdGljX2Nhc3Q8Y2hhcio+KGdfaGFzaF90YWJsZV9sb29rdXAodmFsdWVzLCAidGV4
dDIiKSksID09LCAidmFsdWUyIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHN0YXRpY19jYXN0PGNo
YXIqPihnX2hhc2hfdGFibGVfbG9va3VwKHZhbHVlcywgInBhc3N3b3JkIikpLCA9PSwgInNlY3Jl
dCIpOworfQorCitjbGFzcyBTYXZlV2ViVmlld1Rlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7Citw
dWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShTYXZlV2ViVmlld1Rlc3QpOworCisg
ICAgU2F2ZVdlYlZpZXdUZXN0KCkKKyAgICAgICAgOiBtX3RlbXBEaXJlY3RvcnkoZ19kaXJfbWFr
ZV90bXAoIldlYktpdDJTYXZlVmlld1Rlc3QtWFhYWFhYIiwgMCkpCisgICAgeworICAgIH0KKwor
ICAgIH5TYXZlV2ViVmlld1Rlc3QoKQorICAgIHsKKyAgICAgICAgaWYgKEdfSVNfRklMRShtX2Zp
bGUuZ2V0KCkpKQorICAgICAgICAgICAgZ19maWxlX2RlbGV0ZShtX2ZpbGUuZ2V0KCksIDAsIDAp
OworCisgICAgICAgIGlmIChHX0lTX0lOUFVUX1NUUkVBTShtX2lucHV0U3RyZWFtLmdldCgpKSkK
KyAgICAgICAgICAgIGdfaW5wdXRfc3RyZWFtX2Nsb3NlKG1faW5wdXRTdHJlYW0uZ2V0KCksIDAs
IDApOworCisgICAgICAgIGlmIChtX3RlbXBEaXJlY3RvcnkpCisgICAgICAgICAgICBnX3JtZGly
KG1fdGVtcERpcmVjdG9yeS5nZXQoKSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgd2ViVmll
d1NhdmVkVG9TdHJlYW1DYWxsYmFjayhHT2JqZWN0KiBvYmplY3QsIEdBc3luY1Jlc3VsdCogcmVz
dWx0LCBTYXZlV2ViVmlld1Rlc3QqIHRlc3QpCisgICAgeworICAgICAgICBHT3duUHRyPEdFcnJv
cj4gZXJyb3I7CisgICAgICAgIHRlc3QtPm1faW5wdXRTdHJlYW0gPSBhZG9wdEdSZWYod2Via2l0
X3dlYl92aWV3X3NhdmVfZmluaXNoKHRlc3QtPm1fd2ViVmlldywgcmVzdWx0LCAmZXJyb3Iub3V0
UHRyKCkpKTsKKyAgICAgICAgZ19hc3NlcnQoR19JU19JTlBVVF9TVFJFQU0odGVzdC0+bV9pbnB1
dFN0cmVhbS5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydCghZXJyb3IpOworCisgICAgICAgIHRl
c3QtPnF1aXRNYWluTG9vcCgpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHdlYlZpZXdTYXZl
ZFRvRmlsZUNhbGxiYWNrKEdPYmplY3QqIG9iamVjdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIFNh
dmVXZWJWaWV3VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIEdPd25QdHI8R0Vycm9yPiBlcnJv
cjsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X3NhdmVfdG9fZmlsZV9maW5pc2go
dGVzdC0+bV93ZWJWaWV3LCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSkpOworICAgICAgICBnX2Fz
c2VydCghZXJyb3IpOworCisgICAgICAgIHRlc3QtPnF1aXRNYWluTG9vcCgpOworICAgIH0KKwor
ICAgIHZvaWQgc2F2ZUFuZFdhaXRGb3JTdHJlYW0oKQorICAgIHsKKyAgICAgICAgd2Via2l0X3dl
Yl92aWV3X3NhdmUobV93ZWJWaWV3LCBXRUJLSVRfU0FWRV9NT0RFX01IVE1MLCAwLCByZWludGVy
cHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KHdlYlZpZXdTYXZlZFRvU3RyZWFtQ2FsbGJh
Y2spLCB0aGlzKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgIH0K
KworICAgIHZvaWQgc2F2ZUFuZFdhaXRGb3JGaWxlKCkKKyAgICB7CisgICAgICAgIG1fc2F2ZURl
c3RpbmF0aW9uRmlsZVBhdGguc2V0KGdfYnVpbGRfZmlsZW5hbWUobV90ZW1wRGlyZWN0b3J5Lmdl
dCgpLCAidGVzdFdlYlZpZXdTYXZlUmVzdWx0Lm1odCIsIE5VTEwpKTsKKyAgICAgICAgbV9maWxl
ID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgobV9zYXZlRGVzdGluYXRpb25GaWxlUGF0
aC5nZXQoKSkpOworICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfc2F2ZV90b19maWxlKG1fd2ViVmll
dywgbV9maWxlLmdldCgpLCBXRUJLSVRfU0FWRV9NT0RFX01IVE1MLCAwLCByZWludGVycHJldF9j
YXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KHdlYlZpZXdTYXZlZFRvRmlsZUNhbGxiYWNrKSwgdGhp
cyk7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBH
T3duUHRyPGNoYXI+IG1fdGVtcERpcmVjdG9yeTsKKyAgICBHT3duUHRyPGNoYXI+IG1fc2F2ZURl
c3RpbmF0aW9uRmlsZVBhdGg7CisgICAgR1JlZlB0cjxHSW5wdXRTdHJlYW0+IG1faW5wdXRTdHJl
YW07CisgICAgR1JlZlB0cjxHRmlsZT4gbV9maWxlOworfTsKKworc3RhdGljIHZvaWQgdGVzdFdl
YlZpZXdTYXZlKFNhdmVXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0
ZXN0LT5sb2FkSHRtbCgiPGh0bWw+IgorICAgICAgICAgICAgICAgICAgICI8Ym9keT4iCisgICAg
ICAgICAgICAgICAgICAgIiAgPHA+QSBwYXJhZ3JhcGggd2l0aCBwbGFpbiB0ZXh0PC9wPiIKKyAg
ICAgICAgICAgICAgICAgICAiICA8cD4iCisgICAgICAgICAgICAgICAgICAgIiAgICBBIHJlZCBi
b3g6IDxpbWcgc3JjPSdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVV
Z0FBQUFJQUFBQUNDQUlBQUFEOTFKcHpBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUIz
UkpUVVVIM0FZV0RUTVZ3blNabndBQUFCMXBWRmgwUTI5dGJXVnVkQUFBQUFBQVEzSmxZWFJsWkNC
M2FYUm9JRWRKVFZCa0xtVUhBQUFBRmtsRVFWUUkxMlA4ejhEQXdNREF4TURBd01EQUFBQU5IUUVE
SyttbXlBQUFBQUJKUlU1RXJrSmdnZz09Jz48L2JyPiIKKyAgICAgICAgICAgICAgICAgICAiICAg
IEEgYmx1ZSBib3g6IDxpbWcgc3JjPSdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29B
QUFBTlNVaEVVZ0FBQUFJQUFBQUNDQUlBQUFEOTFKcHpBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFt
cHdZQUFBQUIzUkpUVVVIM0FZV0RUTXZCSGhBTFFBQUFCMXBWRmgwUTI5dGJXVnVkQUFBQUFBQVEz
SmxZWFJsWkNCM2FYUm9JRWRKVFZCa0xtVUhBQUFBRmtsRVFWUUkxMk5rNFBuUHdNREF4TURBd01E
QUFBQUxyd0VQUElzMXBnQUFBQUJKUlU1RXJrSmdnZz09Jz4iCisgICAgICAgICAgICAgICAgICAg
IiAgPC9wPiIKKyAgICAgICAgICAgICAgICAgICAiPC9ib2R5PiIKKyAgICAgICAgICAgICAgICAg
ICAiPC9odG1sPiIsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisg
ICAgLy8gV3JpdGUgdG8gYSBmaWxlIGFuZCB0byBhbiBpbnB1dCBzdHJlYW0uCisgICAgdGVzdC0+
c2F2ZUFuZFdhaXRGb3JGaWxlKCk7CisgICAgdGVzdC0+c2F2ZUFuZFdhaXRGb3JTdHJlYW0oKTsK
KworICAgIC8vIFdlIHNob3VsZCBoYXZlIGV4YWN0bHkgdGhlIHNhbWUgYW1vdW50IG9mIGJ5dGVz
IGluIHRoZSBmaWxlCisgICAgLy8gdGhhbiB0aG9zZSBjb21pbmcgZnJvbSB0aGUgR0lucHV0U3Ry
ZWFtLiBXZSBkb24ndCBjb21wYXJlIHRoZQorICAgIC8vIHN0cmluZ3MgcmVhZCBzaW5jZSB0aGUg
J0RhdGUnIGZpZWxkIGFuZCB0aGUgYm91bmRhcmllcyB3aWxsIGJlCisgICAgLy8gZGlmZmVyZW50
IG9uIGVhY2ggY2FzZS4gTUhUTUwgZnVuY3Rpb25hbGl0eSB3aWxsIGJlIHRlc3RlZCBieQorICAg
IC8vIExheW91dCB0ZXN0cywgc28gY2hlY2tpbmcgdGhlIGFtb3VudCBvZiBieXRlcyBpcyBlbm91
Z2guCisgICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAgIGdjaGFyIGJ1ZmZlcls1MTJdID0g
eyAwIH07CisgICAgZ3NzaXplIHJlYWRCeXRlcyA9IDA7CisgICAgZ3NzaXplIHRvdGFsQnl0ZXNG
cm9tU3RyZWFtID0gMDsKKyAgICB3aGlsZSAocmVhZEJ5dGVzID0gZ19pbnB1dF9zdHJlYW1fcmVh
ZCh0ZXN0LT5tX2lucHV0U3RyZWFtLmdldCgpLCAmYnVmZmVyLCA1MTIsIDAsICZlcnJvci5vdXRQ
dHIoKSkpIHsKKyAgICAgICAgZ19hc3NlcnQoIWVycm9yKTsKKyAgICAgICAgdG90YWxCeXRlc0Zy
b21TdHJlYW0gKz0gcmVhZEJ5dGVzOworICAgIH0KKworICAgIC8vIENoZWNrIHRoYXQgdGhlIGZp
bGUgZXhpc3RzIGFuZCB0aGF0IGl0IGNvbnRhaW5zIHRoZSBzYW1lIGFtb3VudCBvZiBieXRlcy4K
KyAgICBHUmVmUHRyPEdGaWxlSW5mbz4gZmlsZUluZm8gPSBhZG9wdEdSZWYoZ19maWxlX3F1ZXJ5
X2luZm8odGVzdC0+bV9maWxlLmdldCgpLCBHX0ZJTEVfQVRUUklCVVRFX1NUQU5EQVJEX1NJWkUs
IHN0YXRpY19jYXN0PEdGaWxlUXVlcnlJbmZvRmxhZ3M+KDApLCAwLCAwKSk7CisgICAgZ19hc3Nl
cnRfY21waW50KGdfZmlsZV9pbmZvX2dldF9zaXplKGZpbGVJbmZvLmdldCgpKSwgPT0sIHRvdGFs
Qnl0ZXNGcm9tU3RyZWFtKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdNb2RlKFdlYlZp
ZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBp
bmRleEhUTUwgPSAiPGh0bWw+PGJvZHk+PHA+VGVzdCBXZWIgVmlldyBNb2RlPC9wPjwvYm9keT48
L2h0bWw+IjsKKworICAgIC8vIFdlYiBtb2RlLgorICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0
X3dlYl92aWV3X2dldF92aWV3X21vZGUodGVzdC0+bV93ZWJWaWV3KSwgPT0sIFdFQktJVF9WSUVX
X01PREVfV0VCKTsKKyAgICB0ZXN0LT5sb2FkSHRtbChpbmRleEhUTUwsIDApOworICAgIHRlc3Qt
PndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGph
dmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQo
IndpbmRvdy5kb2N1bWVudC5ib2R5LnRleHRDb250ZW50OyIsIDApOworICAgIEdPd25QdHI8Y2hh
cj4gdmFsdWVTdHJpbmcoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0NTdHJpbmcoamF2
YXNjcmlwdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih2YWx1ZVN0cmluZy5nZXQoKSwg
PT0sICJUZXN0IFdlYiBWaWV3IE1vZGUiKTsKKworICAgIC8vIFNvdXJjZSBtb2RlLgorICAgIHdl
YmtpdF93ZWJfdmlld19zZXRfdmlld19tb2RlKHRlc3QtPm1fd2ViVmlldywgV0VCS0lUX1ZJRVdf
TU9ERV9TT1VSQ0UpOworICAgIHRlc3QtPmxvYWRIdG1sKGluZGV4SFRNTCwgMCk7CisgICAgdGVz
dC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3Qt
PnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgid2luZG93LmRvY3VtZW50LmJvZHku
dGV4dENvbnRlbnQ7IiwgMCk7CisgICAgdmFsdWVTdHJpbmcuc2V0KFdlYlZpZXdUZXN0OjpqYXZh
c2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCBpbmRleEhUTUwpOworfQorCisvLyBUbyB0ZXN0
IHBhZ2UgdmlzaWJpbGl0eSBBUEkuIEN1cnJlbnRseSBvbmx5ICd2aXNpYmxlJyBhbmQgJ2hpZGRl
bicgc3RhdGVzIGFyZSBpbXBsZW1lbnRlZCBmdWxseSBpbiBXZWJDb3JlLgorLy8gU2VlIGFsc28g
aHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9XRC1wYWdlLXZpc2liaWxpdHktMjAxMTA2MDIvIGFu
ZCBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9jaHJvbWUvd2hpdGVwYXBlcnMvcGFnZXZp
c2liaWxpdHkKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3UGFnZVZpc2liaWxpdHkoV2ViVmlld1Rl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjx0
aXRsZT48L3RpdGxlPiIKKyAgICAgICAgIjxib2R5PjxwPlRlc3QgV2ViIFBhZ2UgVmlzaWJpbGl0
eTwvcD4iCisgICAgICAgICI8c2NyaXB0PiIKKyAgICAgICAgImRvY3VtZW50LmFkZEV2ZW50TGlz
dGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsIG9uVmlzaWJpbGl0eUNoYW5nZSwgZmFsc2UpOyIK
KyAgICAgICAgImZ1bmN0aW9uIG9uVmlzaWJpbGl0eUNoYW5nZSgpIHsiCisgICAgICAgICIgICAg
ZG9jdW1lbnQudGl0bGUgPSBkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU7IgorICAgICAgICAifSIK
KyAgICAgICAgIjwvc2NyaXB0PiIKKyAgICAgICAgIjwvYm9keT48L2h0bWw+IiwKKyAgICAgICAg
MCk7CisKKyAgICAvLyBXYWl0IHVudGlsbCB0aGUgcGFnZSBpcyBsb2FkZWQuIEluaXRpYWwgdmlz
aWJpbGl0eSBzaG91bGQgYmUgJ2hpZGRlbicuCisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlz
aGVkKCk7CisKKyAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgV2ViS2l0SmF2YXNjcmlw
dFJlc3VsdCogamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50
aWxGaW5pc2hlZCgiZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlOyIsICZlcnJvci5vdXRQdHIoKSk7
CisgICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdl
dCgpKTsKKyAgICBHT3duUHRyPGNoYXI+IHZhbHVlU3RyaW5nKFdlYlZpZXdUZXN0OjpqYXZhc2Ny
aXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKKyAgICBnX2Fzc2VydF9jbXBz
dHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAiaGlkZGVuIik7CisKKyAgICBqYXZhc2NyaXB0UmVz
dWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVudC5o
aWRkZW47IiwgJmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0
KTsKKyAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOworICAgIGdfYXNzZXJ0KFdlYlZpZXdUZXN0
OjpqYXZhc2NyaXB0UmVzdWx0VG9Cb29sZWFuKGphdmFzY3JpcHRSZXN1bHQpKTsKKworICAgIC8v
IFNob3cgdGhlIHBhZ2UuIFRoZSB2aXNpYmlsaXR5IHNob3VsZCBiZSB1cGRhdGVkIHRvICd2aXNp
YmxlJy4KKyAgICB0ZXN0LT5zaG93SW5XaW5kb3coKTsKKyAgICB0ZXN0LT53YWl0VW50aWxUaXRs
ZUNoYW5nZWQoKTsKKworICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0
QW5kV2FpdFVudGlsRmluaXNoZWQoImRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZTsiLCAmZXJyb3Iu
b3V0UHRyKCkpOworICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0
KCFlcnJvci5nZXQoKSk7CisgICAgdmFsdWVTdHJpbmcuc2V0KFdlYlZpZXdUZXN0OjpqYXZhc2Ny
aXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKKyAgICBnX2Fzc2VydF9jbXBz
dHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAidmlzaWJsZSIpOworCisgICAgamF2YXNjcmlwdFJl
c3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQu
aGlkZGVuOyIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3Vs
dCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKyAgICBnX2Fzc2VydCghV2ViVmlld1Rl
c3Q6OmphdmFzY3JpcHRSZXN1bHRUb0Jvb2xlYW4oamF2YXNjcmlwdFJlc3VsdCkpOworCisgICAg
Ly8gSGlkZSB0aGUgcGFnZS4gVGhlIHZpc2liaWxpdHkgc2hvdWxkIGJlIHVwZGF0ZWQgdG8gJ2hp
ZGRlbicuCisgICAgZ3RrX3dpZGdldF9oaWRlKEdUS19XSURHRVQodGVzdC0+bV93ZWJWaWV3KSk7
CisgICAgdGVzdC0+d2FpdFVudGlsVGl0bGVDaGFuZ2VkKCk7CisKKyAgICBqYXZhc2NyaXB0UmVz
dWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVudC52
aXNpYmlsaXR5U3RhdGU7IiwgJmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fzc2VydChqYXZhc2Ny
aXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOworICAgIHZhbHVlU3RyaW5n
LnNldChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVz
dWx0KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgImhpZGRl
biIpOworCisgICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0
VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQuaGlkZGVuOyIsICZlcnJvci5vdXRQdHIoKSk7CisgICAg
Z19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsK
KyAgICBnX2Fzc2VydChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQm9vbGVhbihqYXZh
c2NyaXB0UmVzdWx0KSk7Cit9CisKK2NsYXNzIFNuYXBzaG90V2ViVmlld1Rlc3Q6IHB1YmxpYyBX
ZWJWaWV3VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShTbmFwc2hv
dFdlYlZpZXdUZXN0KTsKKworICAgIHN0YXRpYyB2b2lkIG9uU25hcHNob3RDYW5jZWxsZWRSZWFk
eShXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgR0FzeW5jUmVzdWx0KiByZXMsIFNuYXBzaG90V2Vi
Vmlld1Rlc3QqIHRlc3QpCisgICAgeworICAgICAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7Cisg
ICAgICAgIHRlc3QtPm1fc3VyZmFjZSA9IHdlYmtpdF93ZWJfdmlld19nZXRfc25hcHNob3RfZmlu
aXNoKHdlYl92aWV3LCByZXMsICZlcnJvci5vdXRQdHIoKSk7CisgICAgICAgIGdfYXNzZXJ0KCF0
ZXN0LT5tX3N1cmZhY2UpOworICAgICAgICBnX2Fzc2VydF9lcnJvcihlcnJvci5nZXQoKSwgR19J
T19FUlJPUiwgR19JT19FUlJPUl9DQU5DRUxMRUQpOworICAgICAgICB0ZXN0LT5xdWl0TWFpbkxv
b3AoKTsKKyAgICB9CisKKyAgICBnYm9vbGVhbiBnZXRTbmFwc2hvdEFuZENhbmNlbCgpCisgICAg
eworICAgICAgICBpZiAobV9zdXJmYWNlKQorICAgICAgICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0
cm95KG1fc3VyZmFjZSk7CisgICAgICAgIG1fc3VyZmFjZSA9IDA7CisgICAgICAgIEdSZWZQdHI8
R0NhbmNlbGxhYmxlPiBjYW5jZWxsYWJsZSA9IGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygp
KTsKKyAgICAgICAgd2Via2l0X3dlYl92aWV3X2dldF9zbmFwc2hvdChtX3dlYlZpZXcsIFdFQktJ
VF9TTkFQU0hPVF9SRUdJT05fVklTSUJMRSwgV0VCS0lUX1NOQVBTSE9UX09QVElPTlNfTk9ORSwg
Y2FuY2VsbGFibGUuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4o
b25TbmFwc2hvdENhbmNlbGxlZFJlYWR5KSwgdGhpcyk7CisgICAgICAgIGdfY2FuY2VsbGFibGVf
Y2FuY2VsKGNhbmNlbGxhYmxlLmdldCgpKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFp
bkxvb3ApOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworfTsKKworc3RhdGljIHZv
aWQgdGVzdFdlYlZpZXdTbmFwc2hvdChTbmFwc2hvdFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rw
b2ludGVyKQoreworICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keT48cD5XaGF0ZXZlcjwv
cD48L2JvZHk+PC9odG1sPiIsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgp
OworCisgICAgLy8gV2ViVmlldyBub3QgdmlzaWJsZS4KKyAgICBjYWlyb19zdXJmYWNlX3QqIHN1
cmZhY2UxID0gdGVzdC0+Z2V0U25hcHNob3RBbmRXYWl0VW50aWxSZWFkeShXRUJLSVRfU05BUFNI
T1RfUkVHSU9OX1ZJU0lCTEUsIFdFQktJVF9TTkFQU0hPVF9PUFRJT05TX05PTkUpOworICAgIGdf
YXNzZXJ0KCFzdXJmYWNlMSk7CisKKyAgICAvLyBTaG93IHN1cmZhY2UsIHJlc2l6ZSB0byA1MHg1
MCwgdHJ5IGFnYWluLgorICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgp
OworICAgIHRlc3QtPnJlc2l6ZVZpZXcoNTAsIDUwKTsKKyAgICBzdXJmYWNlMSA9IHRlc3QtPmdl
dFNuYXBzaG90QW5kV2FpdFVudGlsUmVhZHkoV0VCS0lUX1NOQVBTSE9UX1JFR0lPTl9WSVNJQkxF
LCBXRUJLSVRfU05BUFNIT1RfT1BUSU9OU19OT05FKTsKKyAgICBnX2Fzc2VydChzdXJmYWNlMSk7
CisKKyAgICAvLyBvYnRhaW5lZCBzdXJmYWNlIHNob3VsZCBiZSBhdCB0aGUgbW9zdCA1MHg1MC4g
U3RvcmUgdGhlIHNpemUKKyAgICAvLyBmb3IgY29tcGFyaXNvbiBsYXRlci4KKyAgICBpbnQgd2lk
dGggPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChzdXJmYWNlMSk7CisgICAgaW50IGhl
aWdodCA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNlMSk7CisgICAgZ19h
c3NlcnRfY21waW50KHdpZHRoLCA8PSwgNTApOworICAgIGdfYXNzZXJ0X2NtcGludChoZWlnaHQs
IDw9LCA1MCk7CisKKyAgICAvLyBTZWxlY3QgYWxsIHRleHQgaW4gdGhlIFdlYlZpZXcsIHJlcXVl
c3QgYSBzbmFwc2hvdCBpZ25vcmluZyBzZWxlY3Rpb24uCisgICAgdGVzdC0+c2VsZWN0QWxsKCk7
CisgICAgc3VyZmFjZTEgPSBjYWlyb19zdXJmYWNlX3JlZmVyZW5jZSh0ZXN0LT5nZXRTbmFwc2hv
dEFuZFdhaXRVbnRpbFJlYWR5KFdFQktJVF9TTkFQU0hPVF9SRUdJT05fVklTSUJMRSwgV0VCS0lU
X1NOQVBTSE9UX09QVElPTlNfTk9ORSkpOworICAgIGdfYXNzZXJ0KHN1cmZhY2UxKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZTEpLCA9
PSwgd2lkdGgpOworICAgIGdfYXNzZXJ0X2NtcGludChjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9o
ZWlnaHQoc3VyZmFjZTEpLCA9PSwgaGVpZ2h0KTsKKworICAgIC8vIENyZWF0ZSBpZGVudGljYWwg
c3VyZmFjZS4KKyAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UyID0gdGVzdC0+Z2V0U25hcHNo
b3RBbmRXYWl0VW50aWxSZWFkeShXRUJLSVRfU05BUFNIT1RfUkVHSU9OX1ZJU0lCTEUsIFdFQktJ
VF9TTkFQU0hPVF9PUFRJT05TX05PTkUpOworICAgIGdfYXNzZXJ0KHN1cmZhY2UyKTsKKworICAg
IC8vIENvbXBhcmUgdGhlc2UgdHdvLCB0aGV5IHNob3VsZCBiZSBpZGVudGljYWwuCisgICAgZ19h
c3NlcnQoVGVzdDo6Y2Fpcm9TdXJmYWNlc0VxdWFsKHN1cmZhY2UxLCBzdXJmYWNlMikpOworCisg
ICAgLy8gUmVxdWVzdCBhIG5ldyBzbmFwc2hvdCwgaW5jbHVkaW5nIHRoZSBzZWxlY3Rpb24gdGhp
cyB0aW1lLiBUaGUKKyAgICAvLyBzaXplIHNob3VsZCBiZSB0aGUgc2FtZSBidXQgdGhlIHJlc3Vs
dCBtdXN0IGJlIGRpZmZlcmVudCB0byB0aGUKKyAgICAvLyBvbmUgcHJldmlvdXNseSBvYnRhaW5l
ZC4KKyAgICBzdXJmYWNlMiA9IHRlc3QtPmdldFNuYXBzaG90QW5kV2FpdFVudGlsUmVhZHkoV0VC
S0lUX1NOQVBTSE9UX1JFR0lPTl9WSVNJQkxFLCBXRUJLSVRfU05BUFNIT1RfT1BUSU9OU19JTkNM
VURFX1NFTEVDVElPTl9ISUdITElHSFRJTkcpOworICAgIGdfYXNzZXJ0KHN1cmZhY2UyKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZTIp
LCA9PSwgd2lkdGgpOworICAgIGdfYXNzZXJ0X2NtcGludChjYWlyb19pbWFnZV9zdXJmYWNlX2dl
dF9oZWlnaHQoc3VyZmFjZTIpLCA9PSwgaGVpZ2h0KTsKKyAgICBnX2Fzc2VydCghVGVzdDo6Y2Fp
cm9TdXJmYWNlc0VxdWFsKHN1cmZhY2UxLCBzdXJmYWNlMikpOworCisgICAgLy8gUmVxdWVzdCBh
IHNuYXBzaG90IG9mIHRoZSB3aG9sZSBkb2N1bWVudCBpbiB0aGUgV2ViVmlldy4gVGhlCisgICAg
Ly8gcmVzdWx0IHNob3VsZCBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgc2l6ZSBvYnRhaW5lZCBwcmV2
aW91c2x5LgorICAgIHN1cmZhY2UyID0gdGVzdC0+Z2V0U25hcHNob3RBbmRXYWl0VW50aWxSZWFk
eShXRUJLSVRfU05BUFNIT1RfUkVHSU9OX0ZVTExfRE9DVU1FTlQsIFdFQktJVF9TTkFQU0hPVF9P
UFRJT05TX05PTkUpOworICAgIGdfYXNzZXJ0KHN1cmZhY2UyKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZTIpLCAgPiwgd2lkdGgpOwor
ICAgIGdfYXNzZXJ0X2NtcGludChjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFj
ZTIpLCA+LCBoZWlnaHQpOworICAgIGdfYXNzZXJ0KCFUZXN0OjpjYWlyb1N1cmZhY2VzRXF1YWwo
c3VyZmFjZTEsIHN1cmZhY2UyKSk7CisKKyAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koc3VyZmFj
ZTEpOworCisgICAgZ19hc3NlcnQodGVzdC0+Z2V0U25hcHNob3RBbmRDYW5jZWwoKSk7Cit9CisK
K3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3
IiwgImRlZmF1bHQtY29udGV4dCIsIHRlc3RXZWJWaWV3RGVmYXVsdENvbnRleHQpOworICAgIFdl
YlZpZXdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiY3VzdG9tLWNoYXJzZXQiLCB0ZXN0V2Vi
Vmlld0N1c3RvbUNoYXJzZXQpOworICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYlZpZXci
LCAic2V0dGluZ3MiLCB0ZXN0V2ViVmlld1NldHRpbmdzKTsKKyAgICBXZWJWaWV3VGVzdDo6YWRk
KCJXZWJLaXRXZWJWaWV3IiwgInpvb20tbGV2ZWwiLCB0ZXN0V2ViVmlld1pvb21MZXZlbCk7Cisg
ICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJydW4tamF2YXNjcmlwdCIsIHRl
c3RXZWJWaWV3UnVuSmF2YVNjcmlwdCk7CisgICAgRnVsbFNjcmVlbkNsaWVudFRlc3Q6OmFkZCgi
V2ViS2l0V2ViVmlldyIsICJmdWxsc2NyZWVuIiwgdGVzdFdlYlZpZXdGdWxsU2NyZWVuKTsKKyAg
ICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImNhbi1zaG93LW1pbWUtdHlwZSIs
IHRlc3RXZWJWaWV3Q2FuU2hvd01JTUVUeXBlKTsKKyAgICBGb3JtQ2xpZW50VGVzdDo6YWRkKCJX
ZWJLaXRXZWJWaWV3IiwgInN1Ym1pdC1mb3JtIiwgdGVzdFdlYlZpZXdTdWJtaXRGb3JtKTsKKyAg
ICBTYXZlV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJzYXZlIiwgdGVzdFdlYlZp
ZXdTYXZlKTsKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInZpZXctbW9k
ZSIsIHRlc3RXZWJWaWV3TW9kZSk7CisgICAgU25hcHNob3RXZWJWaWV3VGVzdDo6YWRkKCJXZWJL
aXRXZWJWaWV3IiwgInNuYXBzaG90IiwgdGVzdFdlYlZpZXdTbmFwc2hvdCk7CisgICAgV2ViVmll
d1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJwYWdlLXZpc2liaWxpdHkiLCB0ZXN0V2ViVmll
d1BhZ2VWaXNpYmlsaXR5KTsKK30KKwordm9pZCBhZnRlckFsbCgpCit7Cit9CmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFdlYlZpZXdH
cm91cC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktp
dFdlYlZpZXdHcm91cC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI2
YzVjNQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Mkd0ay9UZXN0V2ViS2l0V2ViVmlld0dyb3VwLmNwcApAQCAtMCwwICsxLDIwNiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5oIgorI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCisj
aW5jbHVkZSA8Y3N0ZGFyZz4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d2Via2l0
Mi93ZWJraXQyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCitzdGF0aWMg
V2ViS2l0VGVzdFNlcnZlcioga1NlcnZlcjsKKworLy8gVGhlc2UgYXJlIGFsbCBoZXJlIHNvIHRo
YXQgdGhleSBjYW4gYmUgY2hhbmdlZCBlYXNpbHksIGlmIG5lY2Vzc2FyeS4KK3N0YXRpYyBjb25z
dCBjaGFyKiBrU3R5bGVTaGVldEhUTUwgPSAiPGh0bWw+PGRpdiBpZD1cInN0eWxlZEVsZW1lbnRc
Ij5Td2VldCBzdHlsZXohPC9kaXY+PC9odG1sPiI7CitzdGF0aWMgY29uc3QgY2hhcioga0luamVj
dGVkU3R5bGVTaGVldCA9ICIjc3R5bGVkRWxlbWVudCB7IGZvbnQtd2VpZ2h0OiBib2xkOyB9IjsK
K3N0YXRpYyBjb25zdCBjaGFyKiBrU3R5bGVTaGVldFRlc3RTY3JpcHQgPSAiZ2V0Q29tcHV0ZWRT
dHlsZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3R5bGVkRWxlbWVudCcpKVsnZm9udC13ZWln
aHQnXSI7CitzdGF0aWMgY29uc3QgY2hhcioga1N0eWxlU2hlZXRUZXN0U2NyaXB0UmVzdWx0ID0g
ImJvbGQiOworCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0dyb3VwRGVmYXVsdChUZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQoreworICAgIC8vIERlZmF1bHQgZ3JvdXAgaXMgc2hhcmVkIGJ5IGFs
bCBXZWJWaWV3cyBieSBkZWZhdWx0LgorICAgIEdSZWZQdHI8V2ViS2l0V2ViVmlldz4gd2ViVmll
dzEgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBHUmVmUHRy
PFdlYktpdFdlYlZpZXc+IHdlYlZpZXcyID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmll
d19uZXcoKSk7CisgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dldF9ncm91cCh3ZWJWaWV3
MS5nZXQoKSkgPT0gd2Via2l0X3dlYl92aWV3X2dldF9ncm91cCh3ZWJWaWV3Mi5nZXQoKSkpOwor
CisgICAgLy8gU2V0dGluZ3MgYXJlIHNoYXJlZCBieSBhbGwgd2ViIHZpZXcgaW4gdGhlIHNhbWUg
Z3JvdXAuCisgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3
MS5nZXQoKSkgPT0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3Mi5nZXQoKSkp
OworICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmlldzEuZ2V0
KCkpID09IHdlYmtpdF93ZWJfdmlld19ncm91cF9nZXRfc2V0dGluZ3Mod2Via2l0X3dlYl92aWV3
X2dldF9ncm91cCh3ZWJWaWV3Mi5nZXQoKSkpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZp
ZXdHcm91cE5ld0dyb3VwKFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8gUGFz
c2luZyAwIGFzIGdyb3VwIG5hbWUgZ2VuZXJhdGVzIHRoZSBuYW1lIGF1dG9tYXRpY2FsbHkuCisg
ICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3R3JvdXA+IHZpZXdHcm91cDEgPSBhZG9wdEdSZWYod2Vi
a2l0X3dlYl92aWV3X2dyb3VwX25ldygwKSk7CisgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxl
dGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVCh2aWV3R3JvdXAxLmdldCgpKSk7CisgICAgZ19h
c3NlcnQod2Via2l0X3dlYl92aWV3X2dyb3VwX2dldF9uYW1lKHZpZXdHcm91cDEuZ2V0KCkpKTsK
KworICAgIC8vIE5ldyBncm91cCB3aXRoIGEgZ2l2ZW4gbmFtZS4KKyAgICBHUmVmUHRyPFdlYktp
dFdlYlZpZXdHcm91cD4gdmlld0dyb3VwMiA9IGFkb3B0R1JlZih3ZWJraXRfd2ViX3ZpZXdfZ3Jv
dXBfbmV3KCJUZXN0R3JvdXAyIikpOworICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdo
ZW5UZXN0RmluaXNoZXMoR19PQkpFQ1Qodmlld0dyb3VwMi5nZXQoKSkpOworICAgIGdfYXNzZXJ0
X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ3JvdXBfZ2V0X25hbWUodmlld0dyb3VwMi5nZXQoKSks
ID09LCAiVGVzdEdyb3VwMiIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdf
Z3JvdXBfZ2V0X25hbWUodmlld0dyb3VwMi5nZXQoKSksICE9LCB3ZWJraXRfd2ViX3ZpZXdfZ3Jv
dXBfZ2V0X25hbWUodmlld0dyb3VwMS5nZXQoKSkpOworCisgICAgLy8gRXZlcnkgZ3JvdXAgaGFz
IGl0cyBvd24gc2V0dGluZ3MuCisgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dyb3VwX2dl
dF9zZXR0aW5ncyh2aWV3R3JvdXAxLmdldCgpKSAhPSB3ZWJraXRfd2ViX3ZpZXdfZ3JvdXBfZ2V0
X3NldHRpbmdzKHZpZXdHcm91cDIuZ2V0KCkpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZp
ZXdOZXdXaXRoR3JvdXAoVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBHUmVmUHRy
PFdlYktpdFdlYlZpZXdHcm91cD4gdmlld0dyb3VwMSA9IGFkb3B0R1JlZih3ZWJraXRfd2ViX3Zp
ZXdfZ3JvdXBfbmV3KCJUZXN0R3JvdXAxIikpOworICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVs
ZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1Qodmlld0dyb3VwMS5nZXQoKSkpOworICAgIEdS
ZWZQdHI8V2ViS2l0V2ViVmlldz4gd2ViVmlldzEgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dl
Yl92aWV3X25ld193aXRoX2dyb3VwKHZpZXdHcm91cDEuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydCh3
ZWJraXRfd2ViX3ZpZXdfZ2V0X2dyb3VwKHdlYlZpZXcxLmdldCgpKSA9PSB2aWV3R3JvdXAxLmdl
dCgpKTsKKworICAgIEdSZWZQdHI8V2ViS2l0V2ViVmlldz4gd2ViVmlldzIgPSBXRUJLSVRfV0VC
X1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X2dyb3VwKHdlYlZpZXcyLmdldCgpKSAhPSB2aWV3R3JvdXAxLmdldCgpKTsKKworICAg
IC8vIFNldHRpbmdzIHNob3VsZCBiZSBkaWZmZXJlbnQgZm9yIHZpZXdzIGluIGRpZmZlcmVudCBn
cm91cHMuCisgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3
MS5nZXQoKSkgIT0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3Mi5nZXQoKSkp
OworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0dyb3VwU2V0dGluZ3MoVGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKK3sKKyAgICBHUmVmUHRyPFdlYktpdFdlYlZpZXdHcm91cD4gdmlld0dy
b3VwMSA9IGFkb3B0R1JlZih3ZWJraXRfd2ViX3ZpZXdfZ3JvdXBfbmV3KCJUZXN0R3JvdXAxIikp
OworICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpF
Q1Qodmlld0dyb3VwMS5nZXQoKSkpOworICAgIEdSZWZQdHI8V2ViS2l0U2V0dGluZ3M+IG5ld1Nl
dHRpbmdzID0gYWRvcHRHUmVmKHdlYmtpdF9zZXR0aW5nc19uZXdfd2l0aF9zZXR0aW5ncygiZW5h
YmxlLWphdmFzY3JpcHQiLCBGQUxTRSwgTlVMTCkpOworICAgIHRlc3QtPmFzc2VydE9iamVjdElz
RGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QobmV3U2V0dGluZ3MuZ2V0KCkpKTsKKyAg
ICB3ZWJraXRfd2ViX3ZpZXdfZ3JvdXBfc2V0X3NldHRpbmdzKHZpZXdHcm91cDEuZ2V0KCksIG5l
d1NldHRpbmdzLmdldCgpKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ3JvdXBfZ2V0
X3NldHRpbmdzKHZpZXdHcm91cDEuZ2V0KCkpID09IG5ld1NldHRpbmdzLmdldCgpKTsKKworICAg
IEdSZWZQdHI8V2ViS2l0V2ViVmlldz4gd2ViVmlldzEgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0
X3dlYl92aWV3X25ld193aXRoX2dyb3VwKHZpZXdHcm91cDEuZ2V0KCkpKTsKKyAgICBHUmVmUHRy
PFdlYktpdFdlYlZpZXc+IHdlYlZpZXcyID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmll
d19uZXcoKSk7CisgICAgV2ViS2l0U2V0dGluZ3MqIHdlYlZpZXcxU2V0dGluZ3MgPSB3ZWJraXRf
d2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdlYlZpZXcxLmdldCgpKTsKKyAgICBXZWJLaXRTZXR0aW5n
cyogd2ViVmlldzJTZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmll
dzIuZ2V0KCkpOworICAgIGdfYXNzZXJ0KHdlYlZpZXcxU2V0dGluZ3MgIT0gd2ViVmlldzJTZXR0
aW5ncyk7CisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfamF2YXNjcmlw
dCh3ZWJWaWV3MVNldHRpbmdzKSAhPSB3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9qYXZhc2Ny
aXB0KHdlYlZpZXcyU2V0dGluZ3MpKTsKKworICAgIHdlYmtpdF93ZWJfdmlld19zZXRfc2V0dGlu
Z3Mod2ViVmlldzEuZ2V0KCksIHdlYlZpZXcyU2V0dGluZ3MpOworICAgIGdfYXNzZXJ0KHdlYmtp
dF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmlldzEuZ2V0KCkpID09IHdlYlZpZXcyU2V0dGlu
Z3MpOworICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19ncm91cF9nZXRfc2V0dGluZ3Mod2Vi
a2l0X3dlYl92aWV3X2dldF9ncm91cCh3ZWJWaWV3MS5nZXQoKSkpID09IHdlYlZpZXcyU2V0dGlu
Z3MpOworfQorCitzdGF0aWMgYm9vbCBpc1N0eWxlU2hlZXRJbmplY3RlZEZvclVSTEF0UGF0aChX
ZWJWaWV3VGVzdCogdGVzdCwgY29uc3QgY2hhciogcGF0aCkKK3sKKyAgICB0ZXN0LT5sb2FkVVJJ
KGtTZXJ2ZXItPmdldFVSSUZvclBhdGgocGF0aCkuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50
aWxMb2FkRmluaXNoZWQoKTsKKworICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBXZWJL
aXRKYXZhc2NyaXB0UmVzdWx0KiBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlw
dEFuZFdhaXRVbnRpbEZpbmlzaGVkKGtTdHlsZVNoZWV0VGVzdFNjcmlwdCwgJmVycm9yLm91dFB0
cigpKTsKKyAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydCghZXJy
b3IuZ2V0KCkpOworCisgICAgR093blB0cjxjaGFyPiByZXN1bHRTdHJpbmcoV2ViVmlld1Rlc3Q6
OmphdmFzY3JpcHRSZXN1bHRUb0NTdHJpbmcoamF2YXNjcmlwdFJlc3VsdCkpOworICAgIHJldHVy
biAhZ19zdHJjbXAwKHJlc3VsdFN0cmluZy5nZXQoKSwga1N0eWxlU2hlZXRUZXN0U2NyaXB0UmVz
dWx0KTsKK30KKworc3RhdGljIHZvaWQgZmlsbFVSTExpc3RGcm9tUGF0aHMoY2hhcioqIGxpc3Qs
IGNvbnN0IGNoYXIqIHBhdGgsIC4uLikKK3sKKyAgICB2YV9saXN0IGFyZ3VtZW50TGlzdDsKKyAg
ICB2YV9zdGFydChhcmd1bWVudExpc3QsIHBhdGgpOworCisgICAgaW50IGkgPSAwOworICAgIHdo
aWxlIChwYXRoKSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBtdXN0IHVzZSBhIHdpbGRjYXJkIGZv
ciB0aGUgaG9zdCBoZXJlIHVudGlsIGh0dHA6Ly93a2J1Zy5jb20vMTEyNDc2IGlzIGZpeGVkLgor
ICAgICAgICAvLyBVbnRpbCB0aGF0IHRpbWUgcGF0dGVybnMgd2l0aCBwb3J0IG51bWJlcnMgaW4g
dGhlbSB3aWxsIG5vdCBwcm9wZXJseSBtYXRjaCBVUkxzIHdpdGggcG9ydCBudW1iZXJzLgorICAg
ICAgICBsaXN0W2krK10gPSBnX3N0cmR1cF9wcmludGYoImh0dHA6Ly8qLyVzKiIsIHBhdGgpOwor
ICAgICAgICBwYXRoID0gdmFfYXJnKGFyZ3VtZW50TGlzdCwgY29uc3QgY2hhciopOworICAgIH0K
K30KKworc3RhdGljIHZvaWQgcmVtb3ZlT2xkSW5qZWN0ZWRTdHlsZVNoZWV0c0FuZFJlc2V0TGlz
dHMoV2ViS2l0V2ViVmlld0dyb3VwKiBncm91cCwgY2hhcioqIHdoaXRlbGlzdCwgY2hhcioqIGJs
YWNrbGlzdCkKK3sKKyAgICB3ZWJraXRfd2ViX3ZpZXdfZ3JvdXBfcmVtb3ZlX2FsbF91c2VyX3N0
eWxlX3NoZWV0cyhncm91cCk7CisKKyAgICB3aGlsZSAoKndoaXRlbGlzdCkgeworICAgICAgICBn
X2ZyZWUoKndoaXRlbGlzdCk7CisgICAgICAgICp3aGl0ZWxpc3QgPSAwOworICAgICAgICB3aGl0
ZWxpc3QrKzsKKyAgICB9CisKKyAgICB3aGlsZSAoKmJsYWNrbGlzdCkgeworICAgICAgICBnX2Zy
ZWUoKmJsYWNrbGlzdCk7CisgICAgICAgICpibGFja2xpc3QgPSAwOworICAgICAgICBibGFja2xp
c3QrKzsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3R3JvdXBJbmplY3RlZFN0
eWxlU2hlZXQoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgV2ViS2l0
V2ViVmlld0dyb3VwKiBncm91cCA9IHdlYmtpdF93ZWJfdmlld19nZXRfZ3JvdXAodGVzdC0+bV93
ZWJWaWV3KTsKKyAgICBjaGFyKiB3aGl0ZWxpc3RbM10gPSB7IDAsIDAsIDAgfTsKKyAgICBjaGFy
KiBibGFja2xpc3RbM10gPSB7IDAsIDAsIDAgfTsKKworICAgIHJlbW92ZU9sZEluamVjdGVkU3R5
bGVTaGVldHNBbmRSZXNldExpc3RzKGdyb3VwLCB3aGl0ZWxpc3QsIGJsYWNrbGlzdCk7CisKKyAg
ICAvLyBXaXRob3V0IGEgd2hpdGVsaXN0IG9yIGEgYmxhY2tsaXN0IGFsbCBVUkxzIHNob3VsZCBo
YXZlIHRoZSBpbmplY3RlZCBzdHlsZSBzaGVldC4KKyAgICBzdGF0aWMgY29uc3QgY2hhciogcmFu
ZG9tUGF0aCA9ICJzb21lcmFuZG9tcGF0aCI7CisgICAgZ19hc3NlcnQoIWlzU3R5bGVTaGVldElu
amVjdGVkRm9yVVJMQXRQYXRoKHRlc3QsIHJhbmRvbVBhdGgpKTsKKyAgICB3ZWJraXRfd2ViX3Zp
ZXdfZ3JvdXBfYWRkX3VzZXJfc3R5bGVfc2hlZXQoZ3JvdXAsIGtJbmplY3RlZFN0eWxlU2hlZXQs
IDAsIDAsIDAsIFdFQktJVF9JTkpFQ1RFRF9DT05URU5UX0ZSQU1FU19BTEwpOworICAgIGdfYXNz
ZXJ0KGlzU3R5bGVTaGVldEluamVjdGVkRm9yVVJMQXRQYXRoKHRlc3QsIHJhbmRvbVBhdGgpKTsK
KworICAgIHJlbW92ZU9sZEluamVjdGVkU3R5bGVTaGVldHNBbmRSZXNldExpc3RzKGdyb3VwLCB3
aGl0ZWxpc3QsIGJsYWNrbGlzdCk7CisKKyAgICBmaWxsVVJMTGlzdEZyb21QYXRocyhibGFja2xp
c3QsIHJhbmRvbVBhdGgsIDApOworICAgIHdlYmtpdF93ZWJfdmlld19ncm91cF9hZGRfdXNlcl9z
dHlsZV9zaGVldChncm91cCwga0luamVjdGVkU3R5bGVTaGVldCwgMCwgMCwgYmxhY2tsaXN0LCBX
RUJLSVRfSU5KRUNURURfQ09OVEVOVF9GUkFNRVNfQUxMKTsKKyAgICBnX2Fzc2VydCghaXNTdHls
ZVNoZWV0SW5qZWN0ZWRGb3JVUkxBdFBhdGgodGVzdCwgcmFuZG9tUGF0aCkpOworICAgIGdfYXNz
ZXJ0KGlzU3R5bGVTaGVldEluamVjdGVkRm9yVVJMQXRQYXRoKHRlc3QsICJzb21lb3RoZXJyYW5k
b21wYXRoIikpOworCisgICAgcmVtb3ZlT2xkSW5qZWN0ZWRTdHlsZVNoZWV0c0FuZFJlc2V0TGlz
dHMoZ3JvdXAsIHdoaXRlbGlzdCwgYmxhY2tsaXN0KTsKKworICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBpblRoZVdoaXRlTGlzdCA9ICJpbnRoZXdoaXRlbGlzdCI7CisgICAgc3RhdGljIGNvbnN0IGNo
YXIqIG5vdEluV2hpdGVsaXN0ID0gIm5vdGludGhld2hpdGVsaXN0IjsKKyAgICBzdGF0aWMgY29u
c3QgY2hhciogaW5UaGVXaGl0ZUxpc3RBbmRCbGFja0xpc3QgPSAiaW50aGV3aGl0ZWxpc3RhbmRi
bGFja2xpc3QiOworCisgICAgZmlsbFVSTExpc3RGcm9tUGF0aHMod2hpdGVsaXN0LCBpblRoZVdo
aXRlTGlzdCwgaW5UaGVXaGl0ZUxpc3RBbmRCbGFja0xpc3QsIDApOworICAgIGZpbGxVUkxMaXN0
RnJvbVBhdGhzKGJsYWNrbGlzdCwgaW5UaGVXaGl0ZUxpc3RBbmRCbGFja0xpc3QsIDApOworICAg
IHdlYmtpdF93ZWJfdmlld19ncm91cF9hZGRfdXNlcl9zdHlsZV9zaGVldChncm91cCwga0luamVj
dGVkU3R5bGVTaGVldCwgMCwgd2hpdGVsaXN0LCBibGFja2xpc3QsIFdFQktJVF9JTkpFQ1RFRF9D
T05URU5UX0ZSQU1FU19BTEwpOworICAgIGdfYXNzZXJ0KGlzU3R5bGVTaGVldEluamVjdGVkRm9y
VVJMQXRQYXRoKHRlc3QsIGluVGhlV2hpdGVMaXN0KSk7CisgICAgZ19hc3NlcnQoIWlzU3R5bGVT
aGVldEluamVjdGVkRm9yVVJMQXRQYXRoKHRlc3QsIGluVGhlV2hpdGVMaXN0QW5kQmxhY2tMaXN0
KSk7CisgICAgZ19hc3NlcnQoIWlzU3R5bGVTaGVldEluamVjdGVkRm9yVVJMQXRQYXRoKHRlc3Qs
IG5vdEluV2hpdGVsaXN0KSk7CisKKyAgICAvLyBJdCdzIGltcG9ydGFudCB0byBjbGVhbiB1cCB0
aGUgZW52aXJvbm1lbnQgYmVmb3JlIG90aGVyIHRlc3RzLgorICAgIHJlbW92ZU9sZEluamVjdGVk
U3R5bGVTaGVldHNBbmRSZXNldExpc3RzKGdyb3VwLCB3aGl0ZWxpc3QsIGJsYWNrbGlzdCk7Cit9
CisKK3N0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1l
c3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqLCBTb3VwQ2xpZW50
Q29udGV4dCosIGdwb2ludGVyKQoreworICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3Nh
Z2UsIFNPVVBfU1RBVFVTX09LKTsKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2Fn
ZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBrU3R5bGVTaGVldEhUTUwsIHN0
cmxlbihrU3R5bGVTaGVldEhUTUwpKTsKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZSht
ZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQoreworICAgIGtT
ZXJ2ZXIgPSBuZXcgV2ViS2l0VGVzdFNlcnZlcigpOworICAgIGtTZXJ2ZXItPnJ1bihzZXJ2ZXJD
YWxsYmFjayk7CisKKyAgICBUZXN0OjphZGQoIldlYktpdFdlYlZpZXdHcm91cCIsICJkZWZhdWx0
LWdyb3VwIiwgdGVzdFdlYlZpZXdHcm91cERlZmF1bHQpOworICAgIFRlc3Q6OmFkZCgiV2ViS2l0
V2ViVmlld0dyb3VwIiwgIm5ldy1ncm91cCIsIHRlc3RXZWJWaWV3R3JvdXBOZXdHcm91cCk7Cisg
ICAgVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgIm5ldy13aXRoLWdyb3VwIiwgdGVzdFdlYlZp
ZXdOZXdXaXRoR3JvdXApOworICAgIFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlld0dyb3VwIiwgInNl
dHRpbmdzIiwgdGVzdFdlYlZpZXdHcm91cFNldHRpbmdzKTsKKyAgICBXZWJWaWV3VGVzdDo6YWRk
KCJXZWJLaXRXZWJWaWV3R3JvdXAiLCAiaW5qZWN0ZWQtc3R5bGUtc2hlZXQiLCB0ZXN0V2ViVmll
d0dyb3VwSW5qZWN0ZWRTdHlsZVNoZWV0KTsKK30KKwordm9pZCBhZnRlckFsbCgpCit7CisgICAg
ZGVsZXRlIGtTZXJ2ZXI7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdDJHdGsvVGVzdFdlYlZpZXdFZGl0b3IuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJWaWV3RWRpdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi45MzMxNWRiCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJWaWV3RWRpdG9yLmNwcApAQCAtMCwwICsx
LDIwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCisjaW5jbHVkZSA8d3RmL2dvYmpl
Y3QvR1JlZlB0ci5oPgorCitjbGFzcyBFZGl0b3JUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3Qgewor
cHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoRWRpdG9yVGVzdCk7CisKKyAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGtDbGlwYm9hcmRXYWl0VGltZW91dCA9IDUwOworICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQga0NsaXBib2FyZFdhaXRNYXhUcmllcyA9IDI7CisK
KyAgICBFZGl0b3JUZXN0KCkKKyAgICAgICAgOiBtX2NsaXBib2FyZChndGtfY2xpcGJvYXJkX2dl
dChHREtfU0VMRUNUSU9OX0NMSVBCT0FSRCkpCisgICAgICAgICwgbV9jYW5FeGVjdXRlRWRpdGlu
Z0NvbW1hbmQoZmFsc2UpCisgICAgICAgICwgbV90cmllc0NvdW50KDApCisgICAgeworICAgICAg
ICBndGtfY2xpcGJvYXJkX2NsZWFyKG1fY2xpcGJvYXJkKTsKKyAgICB9CisKKyAgICBzdGF0aWMg
dm9pZCBjYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmRSZWFkeUNhbGxiYWNrKEdPYmplY3QqLCBHQXN5
bmNSZXN1bHQqIHJlc3VsdCwgRWRpdG9yVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIEdPd25Q
dHI8R0Vycm9yPiBlcnJvcjsKKyAgICAgICAgdGVzdC0+bV9jYW5FeGVjdXRlRWRpdGluZ0NvbW1h
bmQgPSB3ZWJraXRfd2ViX3ZpZXdfY2FuX2V4ZWN1dGVfZWRpdGluZ19jb21tYW5kX2ZpbmlzaCh0
ZXN0LT5tX3dlYlZpZXcsIHJlc3VsdCwgJmVycm9yLm91dFB0cigpKTsKKyAgICAgICAgZ19hc3Nl
cnQoIWVycm9yLmdldCgpKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5M
b29wKTsKKyAgICB9CisKKyAgICBib29sIGNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChjb25zdCBj
aGFyKiBjb21tYW5kKQorICAgIHsKKyAgICAgICAgbV9jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQg
PSBmYWxzZTsKKyAgICAgICAgd2Via2l0X3dlYl92aWV3X2Nhbl9leGVjdXRlX2VkaXRpbmdfY29t
bWFuZChtX3dlYlZpZXcsIGNvbW1hbmQsIDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlD
YWxsYmFjaz4oY2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kUmVhZHlDYWxsYmFjayksIHRoaXMpOwor
ICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgICAgIHJldHVybiBtX2Nh
bkV4ZWN1dGVFZGl0aW5nQ29tbWFuZDsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gd2Fp
dEZvckNsaXBib2FyZFRleHQoRWRpdG9yVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3Qt
Pm1fdHJpZXNDb3VudCsrOworICAgICAgICBpZiAoZ3RrX2NsaXBib2FyZF93YWl0X2lzX3RleHRf
YXZhaWxhYmxlKHRlc3QtPm1fY2xpcGJvYXJkKSB8fCB0ZXN0LT5tX3RyaWVzQ291bnQgPiBrQ2xp
cGJvYXJkV2FpdE1heFRyaWVzKSB7CisgICAgICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3Qt
Pm1fbWFpbkxvb3ApOworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgdm9pZCBjb3B5Q2xpcGJvYXJkKCkKKyAg
ICB7CisgICAgICAgIHdlYmtpdF93ZWJfdmlld19leGVjdXRlX2VkaXRpbmdfY29tbWFuZChtX3dl
YlZpZXcsIFdFQktJVF9FRElUSU5HX0NPTU1BTkRfQ09QWSk7CisgICAgICAgIC8vIFRoZXJlJ3Mg
bm8gd2F5IHRvIGtub3cgd2hlbiB0aGUgc2VsZWN0aW9uIGhhcyBiZWVuIGNvcGllZCB0bworICAg
ICAgICAvLyB0aGUgY2xpcGJvYXJkLCBzbyB1c2UgYSB0aW1lb3V0IHNvdXJjZSB0byBxdWVyeSB0
aGUgY2xpcGJvYXJkLgorICAgICAgICBtX3RyaWVzQ291bnQgPSAwOworICAgICAgICBnX3RpbWVv
dXRfYWRkKGtDbGlwYm9hcmRXYWl0VGltZW91dCwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVu
Yz4od2FpdEZvckNsaXBib2FyZFRleHQpLCB0aGlzKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVu
KG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIEd0a0NsaXBib2FyZCogbV9jbGlwYm9hcmQ7Cisg
ICAgYm9vbCBtX2NhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZDsKKyAgICBzaXplX3QgbV90cmllc0Nv
dW50OworfTsKKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdFZGl0b3JDdXRDb3B5UGFzdGVOb25F
ZGl0YWJsZShFZGl0b3JUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBzZWxlY3RlZFNwYW5IVE1MID0gIjxodG1sPjxib2R5IGNvbnRlbnRFZGl0YWJs
ZT1cImZhbHNlXCI+IgorICAgICAgICAiPHNwYW4gaWQ9XCJtYWluc3BhblwiPkFsbCB3b3JrIGFu
ZCBubyBwbGF5IDxzcGFuIGlkPVwic3Vic3BhblwiPm1ha2UgSmFjayBhIGR1bGw8L3NwYW4+IGJv
eS48L3NwYW4+IgorICAgICAgICAiPHNjcmlwdD5kb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5jb2xs
YXBzZSgpO1xuIgorICAgICAgICAiZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0QWxsQ2hp
bGRyZW4oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1YnNwYW4nKSk7XG4iCisgICAgICAgICI8
L3NjcmlwdD48L2JvZHk+PC9odG1sPiI7CisKKyAgICAvLyBOb3RoaW5nIGxvYWRlZCB5ZXQuCisg
ICAgZ19hc3NlcnQoIXRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElO
R19DT01NQU5EX0NVVCkpOworICAgIGdfYXNzZXJ0KCF0ZXN0LT5jYW5FeGVjdXRlRWRpdGluZ0Nv
bW1hbmQoV0VCS0lUX0VESVRJTkdfQ09NTUFORF9DT1BZKSk7CisgICAgZ19hc3NlcnQoIXRlc3Qt
PmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElOR19DT01NQU5EX1BBU1RFKSk7
CisKKyAgICB0ZXN0LT5sb2FkSHRtbChzZWxlY3RlZFNwYW5IVE1MLCAwKTsKKyAgICB0ZXN0LT53
YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPmNhbkV4ZWN1dGVF
ZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElOR19DT01NQU5EX0NPUFkpKTsKKyAgICAvLyBJdCdz
IG5vdCBwb3NzaWJsZSB0byBjdXQgYW5kIHBhc3RlIHdoZW4gY29udGVudCBpcyBub3QgZWRpdGFi
bGUKKyAgICAvLyBldmVuIGlmIHRoZXJlJ3MgYSBzZWxlY3Rpb24uCisgICAgZ19hc3NlcnQoIXRl
c3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElOR19DT01NQU5EX0NVVCkp
OworICAgIGdfYXNzZXJ0KCF0ZXN0LT5jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQoV0VCS0lUX0VE
SVRJTkdfQ09NTUFORF9QQVNURSkpOworCisgICAgdGVzdC0+Y29weUNsaXBib2FyZCgpOworICAg
IEdPd25QdHI8Y2hhcj4gY2xpcGJvYXJkVGV4dChndGtfY2xpcGJvYXJkX3dhaXRfZm9yX3RleHQo
dGVzdC0+bV9jbGlwYm9hcmQpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoY2xpcGJvYXJkVGV4dC5n
ZXQoKSwgPT0sICJtYWtlIEphY2sgYSBkdWxsIik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJW
aWV3RWRpdG9yQ3V0Q29weVBhc3RlRWRpdGFibGUoRWRpdG9yVGVzdCogdGVzdCwgZ2NvbnN0cG9p
bnRlcikKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciogc2VsZWN0ZWRTcGFuSFRNTCA9ICI8aHRt
bD48Ym9keSBjb250ZW50RWRpdGFibGU9XCJ0cnVlXCI+IgorICAgICAgICAiPHNwYW4gaWQ9XCJt
YWluc3BhblwiPkFsbCB3b3JrIGFuZCBubyBwbGF5IDxzcGFuPm1ha2UgSmFjayBhIGR1bGw8L3Nw
YW4+IGJveS48L3NwYW4+IgorICAgICAgICAiPHNjcmlwdD5kb2N1bWVudC5nZXRTZWxlY3Rpb24o
KS5jb2xsYXBzZSgpO1xuIgorICAgICAgICAiZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0
QWxsQ2hpbGRyZW4oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW5zcGFuJykpO1xuIgorICAg
ICAgICAiPC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4iOworCisgICAgLy8gTm90aGluZyBsb2FkZWQg
eWV0LgorICAgIGdfYXNzZXJ0KCF0ZXN0LT5jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQoV0VCS0lU
X0VESVRJTkdfQ09NTUFORF9DVVQpKTsKKyAgICBnX2Fzc2VydCghdGVzdC0+Y2FuRXhlY3V0ZUVk
aXRpbmdDb21tYW5kKFdFQktJVF9FRElUSU5HX0NPTU1BTkRfQ09QWSkpOworICAgIGdfYXNzZXJ0
KCF0ZXN0LT5jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQoV0VCS0lUX0VESVRJTkdfQ09NTUFORF9Q
QVNURSkpOworCisgICAgdGVzdC0+bG9hZEh0bWwoc2VsZWN0ZWRTcGFuSFRNTCwgMCk7CisgICAg
dGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICAvLyBUaGVyZSdzIGEgc2VsZWN0
aW9uLgorICAgIGdfYXNzZXJ0KHRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRf
RURJVElOR19DT01NQU5EX0NVVCkpOworICAgIGdfYXNzZXJ0KHRlc3QtPmNhbkV4ZWN1dGVFZGl0
aW5nQ29tbWFuZChXRUJLSVRfRURJVElOR19DT01NQU5EX0NPUFkpKTsKKyAgICBnX2Fzc2VydCh0
ZXN0LT5jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQoV0VCS0lUX0VESVRJTkdfQ09NTUFORF9QQVNU
RSkpOworCisgICAgdGVzdC0+Y29weUNsaXBib2FyZCgpOworICAgIEdPd25QdHI8Y2hhcj4gY2xp
cGJvYXJkVGV4dChndGtfY2xpcGJvYXJkX3dhaXRfZm9yX3RleHQodGVzdC0+bV9jbGlwYm9hcmQp
KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoY2xpcGJvYXJkVGV4dC5nZXQoKSwgPT0sICJBbGwgd29y
ayBhbmQgbm8gcGxheSBtYWtlIEphY2sgYSBkdWxsIGJveS4iKTsKK30KKworc3RhdGljIHZvaWQg
dGVzdFdlYlZpZXdFZGl0b3JTZWxlY3RBbGxOb25FZGl0YWJsZShFZGl0b3JUZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzZWxlY3RlZFNwYW5IVE1M
ID0gIjxodG1sPjxib2R5IGNvbnRlbnRFZGl0YWJsZT1cImZhbHNlXCI+IgorICAgICAgICAiPHNw
YW4gaWQ9XCJtYWluc3BhblwiPkFsbCB3b3JrIGFuZCBubyBwbGF5IDxzcGFuIGlkPVwic3Vic3Bh
blwiPm1ha2UgSmFjayBhIGR1bGw8L3NwYW4+IGJveS48L3NwYW4+IgorICAgICAgICAiPHNjcmlw
dD5kb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5jb2xsYXBzZSgpO1xuIgorICAgICAgICAiZG9jdW1l
bnQuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0QWxsQ2hpbGRyZW4oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ3N1YnNwYW4nKSk7XG4iCisgICAgICAgICI8L3NjcmlwdD48L2JvZHk+PC9odG1sPiI7CisK
KyAgICBnX2Fzc2VydCh0ZXN0LT5jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQoV0VCS0lUX0VESVRJ
TkdfQ09NTUFORF9TRUxFQ1RfQUxMKSk7CisKKyAgICB0ZXN0LT5sb2FkSHRtbChzZWxlY3RlZFNw
YW5IVE1MLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIGdf
YXNzZXJ0KHRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElOR19DT01N
QU5EX1NFTEVDVF9BTEwpKTsKKworICAgIHRlc3QtPmNvcHlDbGlwYm9hcmQoKTsKKyAgICBHT3du
UHRyPGNoYXI+IGNsaXBib2FyZFRleHQoZ3RrX2NsaXBib2FyZF93YWl0X2Zvcl90ZXh0KHRlc3Qt
Pm1fY2xpcGJvYXJkKSk7CisKKyAgICAvLyBJbml0aWFsbHkgb25seSB0aGUgc3Vic3BhbiBpcyBz
ZWxlY3RlZC4KKyAgICBnX2Fzc2VydF9jbXBzdHIoY2xpcGJvYXJkVGV4dC5nZXQoKSwgPT0sICJt
YWtlIEphY2sgYSBkdWxsIik7CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfZXhlY3V0ZV9lZGl0aW5n
X2NvbW1hbmQodGVzdC0+bV93ZWJWaWV3LCBXRUJLSVRfRURJVElOR19DT01NQU5EX1NFTEVDVF9B
TEwpOworICAgIHRlc3QtPmNvcHlDbGlwYm9hcmQoKTsKKyAgICBjbGlwYm9hcmRUZXh0LnNldChn
dGtfY2xpcGJvYXJkX3dhaXRfZm9yX3RleHQodGVzdC0+bV9jbGlwYm9hcmQpKTsKKworICAgIC8v
IFRoZSBtYWluc3BhbiBzaG91bGQgYmUgc2VsZWN0ZWQgYWZ0ZXIgY2FsbGluZyBTRUxFQ1RfQUxM
LgorICAgIGdfYXNzZXJ0X2NtcHN0cihjbGlwYm9hcmRUZXh0LmdldCgpLCA9PSwgIkFsbCB3b3Jr
IGFuZCBubyBwbGF5IG1ha2UgSmFjayBhIGR1bGwgYm95LiIpOworfQorCitzdGF0aWMgdm9pZCB0
ZXN0V2ViVmlld0VkaXRvclNlbGVjdEFsbEVkaXRhYmxlKEVkaXRvclRlc3QqIHRlc3QsIGdjb25z
dHBvaW50ZXIpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHNlbGVjdGVkU3BhbkhUTUwgPSAi
PGh0bWw+PGJvZHkgY29udGVudEVkaXRhYmxlPVwidHJ1ZVwiPiIKKyAgICAgICAgIjxzcGFuIGlk
PVwibWFpbnNwYW5cIj5BbGwgd29yayBhbmQgbm8gcGxheSA8c3BhbiBpZD1cInN1YnNwYW5cIj5t
YWtlIEphY2sgYSBkdWxsPC9zcGFuPiBib3kuPC9zcGFuPiIKKyAgICAgICAgIjxzY3JpcHQ+ZG9j
dW1lbnQuZ2V0U2VsZWN0aW9uKCkuY29sbGFwc2UoKTtcbiIKKyAgICAgICAgImRvY3VtZW50Lmdl
dFNlbGVjdGlvbigpLnNlbGVjdEFsbENoaWxkcmVuKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdz
dWJzcGFuJykpO1xuIgorICAgICAgICAiPC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4iOworCisgICAg
Z19hc3NlcnQodGVzdC0+Y2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kKFdFQktJVF9FRElUSU5HX0NP
TU1BTkRfU0VMRUNUX0FMTCkpOworCisgICAgdGVzdC0+bG9hZEh0bWwoc2VsZWN0ZWRTcGFuSFRN
TCwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2Vy
dCh0ZXN0LT5jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQoV0VCS0lUX0VESVRJTkdfQ09NTUFORF9T
RUxFQ1RfQUxMKSk7CisKKyAgICB0ZXN0LT5jb3B5Q2xpcGJvYXJkKCk7CisgICAgR093blB0cjxj
aGFyPiBjbGlwYm9hcmRUZXh0KGd0a19jbGlwYm9hcmRfd2FpdF9mb3JfdGV4dCh0ZXN0LT5tX2Ns
aXBib2FyZCkpOworCisgICAgLy8gSW5pdGlhbGx5IG9ubHkgdGhlIHN1YnNwYW4gaXMgc2VsZWN0
ZWQuCisgICAgZ19hc3NlcnRfY21wc3RyKGNsaXBib2FyZFRleHQuZ2V0KCksID09LCAibWFrZSBK
YWNrIGEgZHVsbCIpOworCisgICAgd2Via2l0X3dlYl92aWV3X2V4ZWN1dGVfZWRpdGluZ19jb21t
YW5kKHRlc3QtPm1fd2ViVmlldywgV0VCS0lUX0VESVRJTkdfQ09NTUFORF9TRUxFQ1RfQUxMKTsK
KyAgICB0ZXN0LT5jb3B5Q2xpcGJvYXJkKCk7CisgICAgY2xpcGJvYXJkVGV4dC5zZXQoZ3RrX2Ns
aXBib2FyZF93YWl0X2Zvcl90ZXh0KHRlc3QtPm1fY2xpcGJvYXJkKSk7CisKKyAgICAvLyBUaGUg
bWFpbnNwYW4gc2hvdWxkIGJlIHNlbGVjdGVkIGFmdGVyIGNhbGxpbmcgU0VMRUNUX0FMTC4KKyAg
ICBnX2Fzc2VydF9jbXBzdHIoY2xpcGJvYXJkVGV4dC5nZXQoKSwgPT0sICJBbGwgd29yayBhbmQg
bm8gcGxheSBtYWtlIEphY2sgYSBkdWxsIGJveS4iKTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQor
eworICAgIEVkaXRvclRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJjdXQtY29weS1wYXN0ZS9u
b24tZWRpdGFibGUiLCB0ZXN0V2ViVmlld0VkaXRvckN1dENvcHlQYXN0ZU5vbkVkaXRhYmxlKTsK
KyAgICBFZGl0b3JUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiY3V0LWNvcHktcGFzdGUvZWRp
dGFibGUiLCB0ZXN0V2ViVmlld0VkaXRvckN1dENvcHlQYXN0ZUVkaXRhYmxlKTsKKyAgICBFZGl0
b3JUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAic2VsZWN0LWFsbC9ub24tZWRpdGFibGUiLCB0
ZXN0V2ViVmlld0VkaXRvclNlbGVjdEFsbE5vbkVkaXRhYmxlKTsKKyAgICBFZGl0b3JUZXN0Ojph
ZGQoIldlYktpdFdlYlZpZXciLCAic2VsZWN0LWFsbC9lZGl0YWJsZSIsIHRlc3RXZWJWaWV3RWRp
dG9yU2VsZWN0QWxsRWRpdGFibGUpOworfQorCit2b2lkIGFmdGVyQWxsKCkKK3sKK30KZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9XZWJFeHRlbnNpb25U
ZXN0LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9XZWJFeHRlbnNp
b25UZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjEyZTJiCi0t
LSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1dl
YkV4dGVuc2lvblRlc3QuY3BwCkBAIC0wLDAgKzEsMjY3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0pTQ29udGV4dFJlZi5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTUmV0
YWluUHRyLmg+CisjaW5jbHVkZSA8Z2lvL2dpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2lu
Y2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0LXdlYi1leHRlbnNpb24u
aD4KKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+
CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKworc3RhdGljIGNvbnN0IGNoYXIgaW50cm9zcGVjdGlvblhNTFtdID0KKyAgICAi
PG5vZGU+IgorICAgICIgPGludGVyZmFjZSBuYW1lPSdvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNp
b25UZXN0Jz4iCisgICAgIiAgPG1ldGhvZCBuYW1lPSdHZXRUaXRsZSc+IgorICAgICIgICA8YXJn
IHR5cGU9J3QnIG5hbWU9J3BhZ2VJRCcgZGlyZWN0aW9uPSdpbicvPiIKKyAgICAiICAgPGFyZyB0
eXBlPSdzJyBuYW1lPSd0aXRsZScgZGlyZWN0aW9uPSdvdXQnLz4iCisgICAgIiAgPC9tZXRob2Q+
IgorICAgICIgIDxtZXRob2QgbmFtZT0nQWJvcnRQcm9jZXNzJz4iCisgICAgIiAgPC9tZXRob2Q+
IgorICAgICIgIDxtZXRob2QgbmFtZT0nUnVuSmF2YVNjcmlwdEluSXNvbGF0ZWRXb3JsZCc+Igor
ICAgICIgICA8YXJnIHR5cGU9J3QnIG5hbWU9J3BhZ2VJRCcgZGlyZWN0aW9uPSdpbicvPiIKKyAg
ICAiICAgPGFyZyB0eXBlPSdzJyBuYW1lPSdzY3JpcHQnIGRpcmVjdGlvbj0naW4nLz4iCisgICAg
IiAgPC9tZXRob2Q+IgorICAgICIgIDxzaWduYWwgbmFtZT0nRG9jdW1lbnRMb2FkZWQnLz4iCisg
ICAgIiAgPHNpZ25hbCBuYW1lPSdVUklDaGFuZ2VkJz4iCisgICAgIiAgIDxhcmcgdHlwZT0ncycg
bmFtZT0ndXJpJyBkaXJlY3Rpb249J291dCcvPiIKKyAgICAiICA8L3NpZ25hbD4iCisgICAgIiA8
L2ludGVyZmFjZT4iCisgICAgIjwvbm9kZT4iOworCit0eXBlZGVmIGVudW0geworICAgIERvY3Vt
ZW50TG9hZGVkU2lnbmFsLAorICAgIFVSSUNoYW5nZWRTaWduYWwsCit9IERlbGF5ZWRTaWduYWxU
eXBlOworCitzdHJ1Y3QgRGVsYXllZFNpZ25hbCB7CisgICAgRGVsYXllZFNpZ25hbChEZWxheWVk
U2lnbmFsVHlwZSB0eXBlKQorICAgICAgICA6IHR5cGUodHlwZSkKKyAgICB7CisgICAgfQorCisg
ICAgRGVsYXllZFNpZ25hbChEZWxheWVkU2lnbmFsVHlwZSB0eXBlLCBjb25zdCBjaGFyKiB1cmkp
CisgICAgICAgIDogdHlwZSh0eXBlKQorICAgICAgICAsIHVyaSh1cmkpCisgICAgeworICAgIH0K
KworICAgIERlbGF5ZWRTaWduYWxUeXBlIHR5cGU7CisgICAgQ1N0cmluZyB1cmk7Cit9OworCitE
ZXF1ZTxPd25QdHI8RGVsYXllZFNpZ25hbD4+IGRlbGF5ZWRTaWduYWxzUXVldWU7CisKK3N0YXRp
YyB2b2lkIGVtaXREb2N1bWVudExvYWRlZChHREJ1c0Nvbm5lY3Rpb24qIGNvbm5lY3Rpb24pCit7
CisgICAgYm9vbCBvayA9IGdfZGJ1c19jb25uZWN0aW9uX2VtaXRfc2lnbmFsKAorICAgICAgICBj
b25uZWN0aW9uLAorICAgICAgICAwLAorICAgICAgICAiL29yZy93ZWJraXQvZ3RrL1dlYkV4dGVu
c2lvblRlc3QiLAorICAgICAgICAib3JnLndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9uVGVzdCIsCisg
ICAgICAgICJEb2N1bWVudExvYWRlZCIsCisgICAgICAgIDAsCisgICAgICAgIDApOworICAgIGdf
YXNzZXJ0KG9rKTsKK30KKworc3RhdGljIHZvaWQgZG9jdW1lbnRMb2FkZWRDYWxsYmFjayhXZWJL
aXRXZWJQYWdlKiwgV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24pCit7CisgICAgZ3BvaW50
ZXIgZGF0YSA9IGdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKGV4dGVuc2lvbiksICJkYnVzLWNv
bm5lY3Rpb24iKTsKKyAgICBpZiAoZGF0YSkKKyAgICAgICAgZW1pdERvY3VtZW50TG9hZGVkKEdf
REJVU19DT05ORUNUSU9OKGRhdGEpKTsKKyAgICBlbHNlCisgICAgICAgIGRlbGF5ZWRTaWduYWxz
UXVldWUuYXBwZW5kKGFkb3B0UHRyKG5ldyBEZWxheWVkU2lnbmFsKERvY3VtZW50TG9hZGVkU2ln
bmFsKSkpOworfQorCitzdGF0aWMgdm9pZCBlbWl0VVJJQ2hhbmdlZChHREJ1c0Nvbm5lY3Rpb24q
IGNvbm5lY3Rpb24sIGNvbnN0IGNoYXIqIHVyaSkKK3sKKyAgICBib29sIG9rID0gZ19kYnVzX2Nv
bm5lY3Rpb25fZW1pdF9zaWduYWwoCisgICAgICAgIGNvbm5lY3Rpb24sCisgICAgICAgIDAsCisg
ICAgICAgICIvb3JnL3dlYmtpdC9ndGsvV2ViRXh0ZW5zaW9uVGVzdCIsCisgICAgICAgICJvcmcu
d2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwKKyAgICAgICAgIlVSSUNoYW5nZWQiLAorICAg
ICAgICBnX3ZhcmlhbnRfbmV3KCIocykiLCB1cmkpLAorICAgICAgICAwKTsKKyAgICBnX2Fzc2Vy
dChvayk7Cit9CisKK3N0YXRpYyB2b2lkIHVyaUNoYW5nZWRDYWxsYmFjayhXZWJLaXRXZWJQYWdl
KiB3ZWJQYWdlLCBHUGFyYW1TcGVjKiBwc3BlYywgV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNp
b24pCit7CisgICAgZ3BvaW50ZXIgZGF0YSA9IGdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKGV4
dGVuc2lvbiksICJkYnVzLWNvbm5lY3Rpb24iKTsKKyAgICBpZiAoZGF0YSkKKyAgICAgICAgZW1p
dFVSSUNoYW5nZWQoR19EQlVTX0NPTk5FQ1RJT04oZGF0YSksIHdlYmtpdF93ZWJfcGFnZV9nZXRf
dXJpKHdlYlBhZ2UpKTsKKyAgICBlbHNlCisgICAgICAgIGRlbGF5ZWRTaWduYWxzUXVldWUuYXBw
ZW5kKGFkb3B0UHRyKG5ldyBEZWxheWVkU2lnbmFsKFVSSUNoYW5nZWRTaWduYWwsIHdlYmtpdF93
ZWJfcGFnZV9nZXRfdXJpKHdlYlBhZ2UpKSkpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gc2VuZFJl
cXVlc3RDYWxsYmFjayhXZWJLaXRXZWJQYWdlKiwgV2ViS2l0VVJJUmVxdWVzdCogcmVxdWVzdCwg
V2ViS2l0VVJJUmVzcG9uc2UqLCBncG9pbnRlcikKK3sKKyAgICBjb25zdCBjaGFyKiByZXF1ZXN0
VVJJID0gd2Via2l0X3VyaV9yZXF1ZXN0X2dldF91cmkocmVxdWVzdCk7CisgICAgZ19hc3NlcnQo
cmVxdWVzdFVSSSk7CisKKyAgICBpZiAoY29uc3QgY2hhciogc3VmZml4ID0gZ19zdHJyc3RyKHJl
cXVlc3RVUkksICIvcmVtb3ZlLXRoaXMvamF2YXNjcmlwdC5qcyIpKSB7CisgICAgICAgIEdPd25Q
dHI8Y2hhcj4gcHJlZml4KGdfc3RybmR1cChyZXF1ZXN0VVJJLCBzdHJsZW4ocmVxdWVzdFVSSSkg
LSBzdHJsZW4oc3VmZml4KSkpOworICAgICAgICBHT3duUHRyPGNoYXI+IG5ld1VSSShnX3N0cmR1
cF9wcmludGYoIiVzL2phdmFzY3JpcHQuanMiLCBwcmVmaXguZ2V0KCkpKTsKKyAgICAgICAgd2Vi
a2l0X3VyaV9yZXF1ZXN0X3NldF91cmkocmVxdWVzdCwgbmV3VVJJLmdldCgpKTsKKyAgICB9IGVs
c2UgaWYgKGdfc3RyX2hhc19zdWZmaXgocmVxdWVzdFVSSSwgIi9hZGQtZG8tbm90LXRyYWNrLWhl
YWRlciIpKSB7CisgICAgICAgIFNvdXBNZXNzYWdlSGVhZGVycyogaGVhZGVycyA9IHdlYmtpdF91
cmlfcmVxdWVzdF9nZXRfaHR0cF9oZWFkZXJzKHJlcXVlc3QpOworICAgICAgICBnX2Fzc2VydCho
ZWFkZXJzKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKGhlYWRlcnMsICJE
TlQiLCAiMSIpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfaGFzX3N1ZmZpeChyZXF1ZXN0VVJJLCAi
L2NhbmNlbC10aGlzLmpzIikpCisgICAgICAgIHJldHVybiBUUlVFOworCisgICAgcmV0dXJuIEZB
TFNFOworfQorCitzdGF0aWMgdm9pZCBwYWdlQ3JlYXRlZENhbGxiYWNrKFdlYktpdFdlYkV4dGVu
c2lvbiogZXh0ZW5zaW9uLCBXZWJLaXRXZWJQYWdlKiB3ZWJQYWdlLCBncG9pbnRlcikKK3sKKyAg
ICBnX3NpZ25hbF9jb25uZWN0KHdlYlBhZ2UsICJkb2N1bWVudC1sb2FkZWQiLCBHX0NBTExCQUNL
KGRvY3VtZW50TG9hZGVkQ2FsbGJhY2spLCBleHRlbnNpb24pOworICAgIGdfc2lnbmFsX2Nvbm5l
Y3Qod2ViUGFnZSwgIm5vdGlmeTo6dXJpIiwgR19DQUxMQkFDSyh1cmlDaGFuZ2VkQ2FsbGJhY2sp
LCBleHRlbnNpb24pOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViUGFnZSwgInNlbmQtcmVxdWVz
dCIsIEdfQ0FMTEJBQ0soc2VuZFJlcXVlc3RDYWxsYmFjayksIDApOworfQorCitzdGF0aWMgSlNW
YWx1ZVJlZiBlY2hvQ2FsbGJhY2soSlNDb250ZXh0UmVmIGpzQ29udGV4dCwgSlNPYmplY3RSZWYs
IEpTT2JqZWN0UmVmLCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1
bWVudHNbXSwgSlNWYWx1ZVJlZiopCit7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPD0gMCkKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGpzQ29udGV4dCk7CisKKyAgICBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4gc3RyaW5nKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGpz
Q29udGV4dCwgYXJndW1lbnRzWzBdLCAwKSk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlU3RyaW5n
KGpzQ29udGV4dCwgc3RyaW5nLmdldCgpKTsKK30KKworc3RhdGljIHZvaWQgd2luZG93T2JqZWN0
Q2xlYXJlZChXZWJLaXRTY3JpcHRXb3JsZCogd29ybGQsIFdlYktpdFdlYlBhZ2UqIHBhZ2UsIFdl
YktpdEZyYW1lKiBmcmFtZSwgZ3BvaW50ZXIpCit7CisgICAgSlNHbG9iYWxDb250ZXh0UmVmIGpz
Q29udGV4dCA9IHdlYmtpdF9mcmFtZV9nZXRfamF2YXNjcmlwdF9jb250ZXh0X2Zvcl9zY3JpcHRf
d29ybGQoZnJhbWUsIHdvcmxkKTsKKyAgICBnX2Fzc2VydChqc0NvbnRleHQpOworICAgIEpTT2Jq
ZWN0UmVmIGdsb2JhbE9iamVjdCA9IEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChqc0NvbnRleHQp
OworICAgIGdfYXNzZXJ0KGdsb2JhbE9iamVjdCk7CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gZnVuY3Rpb25OYW1lKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
ZWNobyIpKTsKKyAgICBKU09iamVjdFJlZiBmdW5jdGlvbiA9IEpTT2JqZWN0TWFrZUZ1bmN0aW9u
V2l0aENhbGxiYWNrKGpzQ29udGV4dCwgZnVuY3Rpb25OYW1lLmdldCgpLCBlY2hvQ2FsbGJhY2sp
OworICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoanNDb250ZXh0LCBnbG9iYWxPYmplY3QsIGZ1bmN0
aW9uTmFtZS5nZXQoKSwgZnVuY3Rpb24sIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB8
IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHksIDApOworfQorCitzdGF0aWMgV2ViS2l0V2Vi
UGFnZSogZ2V0V2ViUGFnZShXZWJLaXRXZWJFeHRlbnNpb24qIGV4dGVuc2lvbiwgdWludDY0X3Qg
cGFnZUlELCBHREJ1c01ldGhvZEludm9jYXRpb24qIGludm9jYXRpb24pCit7CisgICAgV2ViS2l0
V2ViUGFnZSogcGFnZSA9IHdlYmtpdF93ZWJfZXh0ZW5zaW9uX2dldF9wYWdlKGV4dGVuc2lvbiwg
cGFnZUlEKTsKKyAgICBpZiAoIXBhZ2UpIHsKKyAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0
aW9uX3JldHVybl9lcnJvcigKKyAgICAgICAgICAgIGludm9jYXRpb24sIEdfREJVU19FUlJPUiwg
R19EQlVTX0VSUk9SX0lOVkFMSURfQVJHUywKKyAgICAgICAgICAgICJJbnZhbGlkIHBhZ2UgSUQ6
ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIHBhZ2VJRCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X3dlYl9wYWdlX2dldF9pZChwYWdlKSwgPT0s
IHBhZ2VJRCk7CisgICAgcmV0dXJuIHBhZ2U7Cit9CisKK3N0YXRpYyB2b2lkIG1ldGhvZENhbGxD
YWxsYmFjayhHREJ1c0Nvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIGNvbnN0IGNoYXIqIHNlbmRlciwg
Y29uc3QgY2hhciogb2JqZWN0UGF0aCwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3Qg
Y2hhciogbWV0aG9kTmFtZSwgR1ZhcmlhbnQqIHBhcmFtZXRlcnMsIEdEQnVzTWV0aG9kSW52b2Nh
dGlvbiogaW52b2NhdGlvbiwgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgaWYgKGdfc3RyY21w
MChpbnRlcmZhY2VOYW1lLCAib3JnLndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9uVGVzdCIpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAiR2V0VGl0bGUi
KSkgeworICAgICAgICB1aW50NjRfdCBwYWdlSUQ7CisgICAgICAgIGdfdmFyaWFudF9nZXQocGFy
YW1ldGVycywgIih0KSIsICZwYWdlSUQpOworICAgICAgICBXZWJLaXRXZWJQYWdlKiBwYWdlID0g
Z2V0V2ViUGFnZShXRUJLSVRfV0VCX0VYVEVOU0lPTih1c2VyRGF0YSksIHBhZ2VJRCwgaW52b2Nh
dGlvbik7CisgICAgICAgIGlmICghcGFnZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3BhZ2VfZ2V0X2RvbV9k
b2N1bWVudChwYWdlKTsKKyAgICAgICAgR093blB0cjxjaGFyPiB0aXRsZSh3ZWJraXRfZG9tX2Rv
Y3VtZW50X2dldF90aXRsZShkb2N1bWVudCkpOworICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9j
YXRpb25fcmV0dXJuX3ZhbHVlKGludm9jYXRpb24sIGdfdmFyaWFudF9uZXcoIihzKSIsIHRpdGxl
LmdldCgpKSk7CisgICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJSdW5KYXZh
U2NyaXB0SW5Jc29sYXRlZFdvcmxkIikpIHsKKyAgICAgICAgdWludDY0X3QgcGFnZUlEOworICAg
ICAgICBjb25zdCBjaGFyKiBzY3JpcHQ7CisgICAgICAgIGdfdmFyaWFudF9nZXQocGFyYW1ldGVy
cywgIih0JnMpIiwgJnBhZ2VJRCwgJnNjcmlwdCk7CisgICAgICAgIFdlYktpdFdlYlBhZ2UqIHBh
Z2UgPSBnZXRXZWJQYWdlKFdFQktJVF9XRUJfRVhURU5TSU9OKHVzZXJEYXRhKSwgcGFnZUlELCBp
bnZvY2F0aW9uKTsKKyAgICAgICAgaWYgKCFwYWdlKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIEdSZWZQdHI8V2ViS2l0U2NyaXB0V29ybGQ+IHdvcmxkID0gYWRvcHRHUmVmKHdlYmtp
dF9zY3JpcHRfd29ybGRfbmV3KCkpOworICAgICAgICBnX2Fzc2VydCh3ZWJraXRfc2NyaXB0X3dv
cmxkX2dldF9kZWZhdWx0KCkgIT0gd29ybGQuZ2V0KCkpOworICAgICAgICBXZWJLaXRGcmFtZSog
ZnJhbWUgPSB3ZWJraXRfd2ViX3BhZ2VfZ2V0X21haW5fZnJhbWUocGFnZSk7CisgICAgICAgIEpT
R2xvYmFsQ29udGV4dFJlZiBqc0NvbnRleHQgPSB3ZWJraXRfZnJhbWVfZ2V0X2phdmFzY3JpcHRf
Y29udGV4dF9mb3Jfc2NyaXB0X3dvcmxkKGZyYW1lLCB3b3JsZC5nZXQoKSk7CisgICAgICAgIEpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBqc1NjcmlwdChBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoc2NyaXB0KSk7CisgICAgICAgIEpTRXZhbHVhdGVTY3JpcHQoanNDb250ZXh0
LCBqc1NjcmlwdC5nZXQoKSwgMCwgMCwgMCwgMCk7CisgICAgICAgIGdfZGJ1c19tZXRob2RfaW52
b2NhdGlvbl9yZXR1cm5fdmFsdWUoaW52b2NhdGlvbiwgMCk7CisgICAgfSBlbHNlIGlmICghZ19z
dHJjbXAwKG1ldGhvZE5hbWUsICJBYm9ydFByb2Nlc3MiKSkgeworICAgICAgICBhYm9ydCgpOwor
ICAgIH0KK30KKworc3RhdGljIGNvbnN0IEdEQnVzSW50ZXJmYWNlVlRhYmxlIGludGVyZmFjZVZp
cnR1YWxUYWJsZSA9IHsKKyAgICBtZXRob2RDYWxsQ2FsbGJhY2ssIDAsIDAsIHsgMCwgfQorfTsK
Kworc3RhdGljIHZvaWQgYnVzQWNxdWlyZWRDYWxsYmFjayhHREJ1c0Nvbm5lY3Rpb24qIGNvbm5l
Y3Rpb24sIGNvbnN0IGNoYXIqIG5hbWUsIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIHN0YXRp
YyBHREJ1c05vZGVJbmZvICppbnRyb3NwZWN0aW9uRGF0YSA9IDA7CisgICAgaWYgKCFpbnRyb3Nw
ZWN0aW9uRGF0YSkKKyAgICAgICAgaW50cm9zcGVjdGlvbkRhdGEgPSBnX2RidXNfbm9kZV9pbmZv
X25ld19mb3JfeG1sKGludHJvc3BlY3Rpb25YTUwsIDApOworCisgICAgR093blB0cjxHRXJyb3I+
IGVycm9yOworICAgIHVuc2lnbmVkIHJlZ2lzdHJhdGlvbklEID0gZ19kYnVzX2Nvbm5lY3Rpb25f
cmVnaXN0ZXJfb2JqZWN0KAorICAgICAgICBjb25uZWN0aW9uLAorICAgICAgICAiL29yZy93ZWJr
aXQvZ3RrL1dlYkV4dGVuc2lvblRlc3QiLAorICAgICAgICBpbnRyb3NwZWN0aW9uRGF0YS0+aW50
ZXJmYWNlc1swXSwKKyAgICAgICAgJmludGVyZmFjZVZpcnR1YWxUYWJsZSwKKyAgICAgICAgZ19v
YmplY3RfcmVmKHVzZXJEYXRhKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+
KGdfb2JqZWN0X3VucmVmKSwKKyAgICAgICAgJmVycm9yLm91dFB0cigpKTsKKyAgICBpZiAoIXJl
Z2lzdHJhdGlvbklEKQorICAgICAgICBnX3dhcm5pbmcoIkZhaWxlZCB0byByZWdpc3RlciBvYmpl
Y3Q6ICVzXG4iLCBlcnJvci0+bWVzc2FnZSk7CisKKyAgICBnX29iamVjdF9zZXRfZGF0YShHX09C
SkVDVCh1c2VyRGF0YSksICJkYnVzLWNvbm5lY3Rpb24iLCBjb25uZWN0aW9uKTsKKyAgICB3aGls
ZSAoZGVsYXllZFNpZ25hbHNRdWV1ZS5zaXplKCkpIHsKKyAgICAgICAgT3duUHRyPERlbGF5ZWRT
aWduYWw+IGRlbGF5ZWRTaWduYWwgPSBkZWxheWVkU2lnbmFsc1F1ZXVlLnRha2VGaXJzdCgpOwor
ICAgICAgICBzd2l0Y2ggKGRlbGF5ZWRTaWduYWwtPnR5cGUpIHsKKyAgICAgICAgY2FzZSBEb2N1
bWVudExvYWRlZFNpZ25hbDoKKyAgICAgICAgICAgIGVtaXREb2N1bWVudExvYWRlZChjb25uZWN0
aW9uKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVSSUNoYW5nZWRTaWduYWw6
CisgICAgICAgICAgICBlbWl0VVJJQ2hhbmdlZChjb25uZWN0aW9uLCBkZWxheWVkU2lnbmFsLT51
cmkuZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCitl
eHRlcm4gIkMiIHZvaWQgd2Via2l0X3dlYl9leHRlbnNpb25faW5pdGlhbGl6ZShXZWJLaXRXZWJF
eHRlbnNpb24qIGV4dGVuc2lvbikKK3sKKyAgICBnX3NpZ25hbF9jb25uZWN0KGV4dGVuc2lvbiwg
InBhZ2UtY3JlYXRlZCIsIEdfQ0FMTEJBQ0socGFnZUNyZWF0ZWRDYWxsYmFjayksIGV4dGVuc2lv
bik7CisgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJraXRfc2NyaXB0X3dvcmxkX2dldF9kZWZhdWx0
KCksICJ3aW5kb3ctb2JqZWN0LWNsZWFyZWQiLCBHX0NBTExCQUNLKHdpbmRvd09iamVjdENsZWFy
ZWQpLCAwKTsKKworICAgIGdfYnVzX293bl9uYW1lKAorICAgICAgICBHX0JVU19UWVBFX1NFU1NJ
T04sCisgICAgICAgICJvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwKKyAgICAgICAg
R19CVVNfTkFNRV9PV05FUl9GTEFHU19OT05FLAorICAgICAgICBidXNBY3F1aXJlZENhbGxiYWNr
LAorICAgICAgICAwLCAwLAorICAgICAgICBnX29iamVjdF9yZWYoZXh0ZW5zaW9uKSwKKyAgICAg
ICAgc3RhdGljX2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGdfb2JqZWN0X3VucmVmKSk7Cit9CmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvV2ViUHJvY2Vzc1Rl
c3QuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1dlYlByb2Nlc3NU
ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTFhNmU3Ci0tLSAv
ZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1dlYlBy
b2Nlc3NUZXN0LmNwcApAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Rl
c3QuaCIKKworI2luY2x1ZGUgPGdpby9naW8uaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3du
UHRyLmg+CisKK3R5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIHN0ZDo6ZnVuY3Rpb248UGFzc093blB0
cjxXZWJQcm9jZXNzVGVzdD4gKCk+PiBUZXN0c01hcDsKK3N0YXRpYyBUZXN0c01hcCYgdGVzdHNN
YXAoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoVGVzdHNNYXAsIHNfdGVzdHNNYXAsICgp
KTsKKyAgICByZXR1cm4gc190ZXN0c01hcDsKK30KKwordm9pZCBXZWJQcm9jZXNzVGVzdDo6YWRk
KGNvbnN0IFN0cmluZyYgdGVzdE5hbWUsIHN0ZDo6ZnVuY3Rpb248UGFzc093blB0cjxXZWJQcm9j
ZXNzVGVzdD4gKCk+IGNsb3N1cmUpCit7CisgICAgdGVzdHNNYXAoKS5hZGQodGVzdE5hbWUsIHN0
ZDo6Zm9yd2FyZDxzdGQ6OmZ1bmN0aW9uPFBhc3NPd25QdHI8V2ViUHJvY2Vzc1Rlc3Q+ICgpPj4o
Y2xvc3VyZSkpOworfQorCitQYXNzT3duUHRyPFdlYlByb2Nlc3NUZXN0PiBXZWJQcm9jZXNzVGVz
dDo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgdGVzdE5hbWUpCit7CisgICAgZ19hc3NlcnQodGVzdHNN
YXAoKS5jb250YWlucyh0ZXN0TmFtZSkpOworICAgIHJldHVybiB0ZXN0c01hcCgpLmdldCh0ZXN0
TmFtZSkoKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgaW50cm9zcGVjdGlvblhNTFtdID0KKyAg
ICAiPG5vZGU+IgorICAgICIgPGludGVyZmFjZSBuYW1lPSdvcmcud2Via2l0Lmd0ay5XZWJQcm9j
ZXNzVGVzdCc+IgorICAgICIgIDxtZXRob2QgbmFtZT0nUnVuVGVzdCc+IgorICAgICIgICA8YXJn
IHR5cGU9J3MnIG5hbWU9J3BhdGgnIGRpcmVjdGlvbj0naW4nLz4iCisgICAgIiAgIDxhcmcgdHlw
ZT0nYXtzdn0nIG5hbWU9J2FyZ3MnIGRpcmVjdGlvbj0naW4nLz4iCisgICAgIiAgIDxhcmcgdHlw
ZT0nYicgbmFtZT0ncmVzdWx0JyBkaXJlY3Rpb249J291dCcvPiIKKyAgICAiICA8L21ldGhvZD4i
CisgICAgIiA8L2ludGVyZmFjZT4iCisgICAgIjwvbm9kZT4iOworCitzdGF0aWMgdm9pZCBtZXRo
b2RDYWxsQ2FsbGJhY2soR0RCdXNDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBjb25zdCBjaGFyKiBz
ZW5kZXIsIGNvbnN0IGNoYXIqIG9iamVjdFBhdGgsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUs
IGNvbnN0IGNoYXIqIG1ldGhvZE5hbWUsIEdWYXJpYW50KiBwYXJhbWV0ZXJzLCBHREJ1c01ldGhv
ZEludm9jYXRpb24qIGludm9jYXRpb24sIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIGlmIChn
X3N0cmNtcDAoaW50ZXJmYWNlTmFtZSwgIm9yZy53ZWJraXQuZ3RrLldlYlByb2Nlc3NUZXN0Iikp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJSdW5U
ZXN0IikpIHsKKyAgICAgICAgY29uc3QgY2hhciogdGVzdFBhdGg7CisgICAgICAgIEdWYXJpYW50
KiBhcmdzOworICAgICAgICBnX3ZhcmlhbnRfZ2V0KHBhcmFtZXRlcnMsICIoJnNAYXtzdn0pIiwg
JnRlc3RQYXRoLCAmYXJncyk7CisgICAgICAgIE93blB0cjxXZWJQcm9jZXNzVGVzdD4gdGVzdCA9
IFdlYlByb2Nlc3NUZXN0OjpjcmVhdGUoU3RyaW5nOjpmcm9tVVRGOCh0ZXN0UGF0aCkpOworICAg
ICAgICBib29sIHJlc3VsdCA9IHRlc3QtPnJ1blRlc3QoZ19zdHJyc3RyKHRlc3RQYXRoLCAiLyIp
ICsgMSwgV0VCS0lUX1dFQl9FWFRFTlNJT04odXNlckRhdGEpLCBhcmdzKTsKKyAgICAgICAgZ192
YXJpYW50X3VucmVmKGFyZ3MpOworCisgICAgICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9y
ZXR1cm5fdmFsdWUoaW52b2NhdGlvbiwgZ192YXJpYW50X25ldygiKGIpIiwgcmVzdWx0KSk7Cisg
ICAgfSBlbHNlCisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Cit9CisKK3N0YXRpYyBj
b25zdCBHREJ1c0ludGVyZmFjZVZUYWJsZSBpbnRlcmZhY2VWaXJ0dWFsVGFibGUgPSB7CisgICAg
bWV0aG9kQ2FsbENhbGxiYWNrLCAwLCAwLCB7IDAsIH0KK307CisKK3N0YXRpYyB2b2lkIGJ1c0Fj
cXVpcmVkQ2FsbGJhY2soR0RCdXNDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBjb25zdCBjaGFyKiBu
YW1lLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBzdGF0aWMgR0RCdXNOb2RlSW5mbyAqaW50
cm9zcGVjdGlvbkRhdGEgPSAwOworICAgIGlmICghaW50cm9zcGVjdGlvbkRhdGEpCisgICAgICAg
IGludHJvc3BlY3Rpb25EYXRhID0gZ19kYnVzX25vZGVfaW5mb19uZXdfZm9yX3htbChpbnRyb3Nw
ZWN0aW9uWE1MLCAwKTsKKworICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICB1bnNpZ25l
ZCByZWdpc3RyYXRpb25JRCA9IGdfZGJ1c19jb25uZWN0aW9uX3JlZ2lzdGVyX29iamVjdCgKKyAg
ICAgICAgY29ubmVjdGlvbiwKKyAgICAgICAgIi9vcmcvd2Via2l0L2d0ay9XZWJQcm9jZXNzVGVz
dCIsCisgICAgICAgIGludHJvc3BlY3Rpb25EYXRhLT5pbnRlcmZhY2VzWzBdLAorICAgICAgICAm
aW50ZXJmYWNlVmlydHVhbFRhYmxlLAorICAgICAgICBnX29iamVjdF9yZWYodXNlckRhdGEpLAor
ICAgICAgICBzdGF0aWNfY2FzdDxHRGVzdHJveU5vdGlmeT4oZ19vYmplY3RfdW5yZWYpLAorICAg
ICAgICAmZXJyb3Iub3V0UHRyKCkpOworICAgIGlmICghcmVnaXN0cmF0aW9uSUQpCisgICAgICAg
IGdfd2FybmluZygiRmFpbGVkIHRvIHJlZ2lzdGVyIG9iamVjdDogJXNcbiIsIGVycm9yLT5tZXNz
YWdlKTsKK30KKworZXh0ZXJuICJDIiB2b2lkIHdlYmtpdF93ZWJfZXh0ZW5zaW9uX2luaXRpYWxp
emUoV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24pCit7CisgICAgZ19idXNfb3duX25hbWUo
CisgICAgICAgIEdfQlVTX1RZUEVfU0VTU0lPTiwKKyAgICAgICAgIm9yZy53ZWJraXQuZ3RrLldl
YlByb2Nlc3NUZXN0IiwKKyAgICAgICAgR19CVVNfTkFNRV9PV05FUl9GTEFHU19OT05FLAorICAg
ICAgICBidXNBY3F1aXJlZENhbGxiYWNrLAorICAgICAgICAwLCAwLAorICAgICAgICBnX29iamVj
dF9yZWYoZXh0ZW5zaW9uKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGdf
b2JqZWN0X3VucmVmKSk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdDJHdGsvV2ViUHJvY2Vzc1Rlc3QuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Mkd0ay9XZWJQcm9jZXNzVGVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmUzZWVkZDAKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdDJHdGsvV2ViUHJvY2Vzc1Rlc3QuaApAQCAtMCwwICsxLDM4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdC13
ZWItZXh0ZW5zaW9uLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKK2NsYXNzIFdlYlByb2Nlc3NUZXN0IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5XZWJQcm9j
ZXNzVGVzdCgpIHsgfQorICAgIHZpcnR1YWwgYm9vbCBydW5UZXN0KGNvbnN0IGNoYXIqIHRlc3RO
YW1lLCBXZWJLaXRXZWJFeHRlbnNpb24qLCBHVmFyaWFudCogYXJncykgPSAwOworCisgICAgc3Rh
dGljIHZvaWQgYWRkKGNvbnN0IFN0cmluZyYgdGVzdE5hbWUsIHN0ZDo6ZnVuY3Rpb248UGFzc093
blB0cjxXZWJQcm9jZXNzVGVzdD4gKCk+KTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxXZWJQcm9j
ZXNzVGVzdD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgdGVzdE5hbWUpOworfTsKKworI2RlZmluZSBS
RUdJU1RFUl9URVNUKENsYXNzTmFtZSwgVGVzdE5hbWUpIFwKKyAgICBXZWJQcm9jZXNzVGVzdDo6
YWRkKFN0cmluZzo6ZnJvbVVURjgoVGVzdE5hbWUpLCBDbGFzc05hbWU6OmNyZWF0ZSkKKwpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL3Jlc291cmNlcy9s
aW5rLXRpdGxlLmpzIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL3Jlc291
cmNlcy9saW5rLXRpdGxlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJj
ODI0ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dDJHdGsvcmVzb3VyY2VzL2xpbmstdGl0bGUuanMKQEAgLTAsMCArMSBAQAord2luZG93LmRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCdXZWJLaXRMaW5rJykudGl0bGU7CmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvcmVzb3VyY2VzL3Rlc3QtY2VydC5wZW0g
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvcmVzb3VyY2VzL3Rlc3QtY2Vy
dC5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM0MzAxZgotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9yZXNvdXJj
ZXMvdGVzdC1jZXJ0LnBlbQpAQCAtMCwwICsxLDEzIEBACistLS0tLUJFR0lOIENFUlRJRklDQVRF
LS0tLS0KK01JSUI5akNDQVYrZ0F3SUJBZ0lKQUxldVhCbyt2d3o5TUEwR0NTcUdTSWIzRFFFQkJR
VUFNQlF4RWpBUUJnTlYKK0JBTU1DVEV5Tnk0d0xqQXVNVEFlRncweE1qQTNNVEl4TWpRNE1qUmFG
dzB5TWpBM01UQXhNalE0TWpSYU1CUXgKK0VqQVFCZ05WQkFNTUNURXlOeTR3TGpBdU1UQ0JuekFO
QmdrcWhraUc5dzBCQVFFRkFBT0JqUUF3Z1lrQ2dZRUEKKzBUVXpPUXhIQklLREQybWt1cSt0VTky
bVF2RFpnNzNCMEcrTmhyMlQyRzZNYmNMcUl3amcxUVl0QlpXSjgzdFoKK3hNTUVmaXdlSExGODVa
OW9oYXZBZ3hKbEtHN1ltdlpPNzlLa0ZwbWpWMlc1Q1ZSbTBlWU1QbnpteE5Db2FZcW8KK0RMbDB6
c0g2S1pPTFBLdS9mWDRlRFg5WHBBUDFmODNoV0IxVUZCbUhLTjhDQXdFQUFhTlFNRTR3SFFZRFZS
ME8KK0JCWUVGREh2NVpRMUJkbWh6VHNEVUVvWTU1RVh5VWRLTUI4R0ExVWRJd1FZTUJhQUZESHY1
WlExQmRtaHpUc0QKK1VFb1k1NUVYeVVkS01Bd0dBMVVkRXdRRk1BTUJBZjh3RFFZSktvWklodmNO
QVFFRkJRQURnWUVBaDNxTUJ4N3YKK2pTb2RNZjNPeVRxVExFN2RlTG5tbkNlQlZwZ3p4UlpFb2l6
Y0dxWWNqaXFPMjdpNU41WjZLVlFzbklUbkxpeUMKK21VdHVSNUtuRjY5dVRLVXc0bS91Z1plNXdo
amlnNU1xMmw0MTBLVks2RWVHNHRkTGxmWFIrd2k0VTVLNEtqUDYKK3A0bmNoUVVYTGEyemNiSm4r
VkJleEpuNi85d2RocitEVUdZPQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL3Jlc291cmNlcy90ZXN0LWtl
eS5wZW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvcmVzb3VyY2VzL3Rl
c3Qta2V5LnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDM2MjIyCi0t
LSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL3Jl
c291cmNlcy90ZXN0LWtleS5wZW0KQEAgLTAsMCArMSwxNiBAQAorLS0tLS1CRUdJTiBQUklWQVRF
IEtFWS0tLS0tCitNSUlDZHdJQkFEQU5CZ2txaGtpRzl3MEJBUUVGQUFTQ0FtRXdnZ0pkQWdFQUFv
R0JBTkUxTXprTVJ3U0NndzlwCitwTHF2clZQZHBrTHcyWU85d2RCdmpZYTlrOWh1akczQzZpTUk0
TlVHTFFXVmlmTjdXY1REQkg0c0hoeXhmT1dmCithSVdyd0lNU1pTaHUySnIyVHUvU3BCYVpvMWRs
dVFsVVp0SG1ERDU4NXNUUXFHbUtxQXk1ZE03QitpbVRpenlyCit2MzErSGcxL1Y2UUQ5WC9ONFZn
ZFZCUVpoeWpmQWdNQkFBRUNnWUIyUXdPVXNSc0lNcHJSd0o5dEpOZnZPN0c3Cit6NWkxL3pPcmx4
UEM0akhNUEJuSUJsSUN3Z2NPaExJNG9PTGRyNUg4UjEybjBWcW9UN0RSd1AzOTZpd2xKaXBGCitp
TzFoZURNbi84ejhMUEd3a0NLLytjazA0ck1Ea3N4V0lkTXdZS0JYdDlhaG5KL3hSTHpRMS8zQUpp
QUdub2U1CisvUUxYUXdlb2ZkNG1tZnNqS1FKQkFPMkN3VDd1TVA2bk1qWGd0Vk1KcTVRUDhVYmVD
UzFzRU9QSkpiSHVEeEpCCisvSGVQUUhCanE0a3pHNkNMNG9PN1QrNWZEdjRnK2ZJSUh6dVhlclow
aW1zQ1FRRGhmbWlUSWM5T3VjRUlmZzYvCittczBKaUtTbVdjK3FvaU9DdHJJTHVRdkZvTndKUmNp
UUFOcWVKczZ3cGFEdmV2U1V2QkxHZkcvN2IzSHZhRTVYCitpcUJkQWtCRVFJdnAycWNIdHVKTjYw
b1FGN3BQclJrbnhVeWIyZThzbGpRWDRwSkFLK2d5TDE5VUxNQXhpQmRMCitWb2Q4VllxTnRKRnBZ
KzZQcDlmWjF4anpiNkFMQWtFQTRKenJEQXcwbFFYQSszV2R1VXc0aXhPYWRyMmxkeUcwCiszNktl
YmNEd3NmWk8xOG0wUTRVbVB6MEd5N3pnTjB3eHp1b2NoYXcwVzYraVBVaVlLT2xFWFFKQkFNV1Fy
UGx1Citycmlub1pTMmY4ZG9KOUJOTlVhK1JOcE11ZzZVWGM1NXFvVUpseWlYRWgrdHU0QWFNT3R4
dUdJeUMwc0FjdXc2CitYZEFQVlBYS2Q3TW5lNzA9CistLS0tLUVORCBQUklWQVRFIEtFWS0tLS0t
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvcmVzb3Vy
Y2VzL3dlYmtpdDJndGstdGVzdHMuZ3Jlc291cmNlLnhtbCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Mkd0ay9yZXNvdXJjZXMvd2Via2l0Mmd0ay10ZXN0cy5ncmVzb3VyY2UueG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzODg2ODQKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvcmVzb3VyY2VzL3dl
YmtpdDJndGstdGVzdHMuZ3Jlc291cmNlLnhtbApAQCAtMCwwICsxLDYgQEAKKzw/eG1sIHZlcnNp
b249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Z3Jlc291cmNlcz4KKyAgPGdyZXNvdXJjZSBw
cmVmaXg9Ii9vcmcvd2Via2l0L3dlYmtpdDJndGsvdGVzdHMvIj4KKyAgICA8ZmlsZSBhbGlhcz0i
bGluay10aXRsZS5qcyI+VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL3Jlc291
cmNlcy9saW5rLXRpdGxlLmpzPC9maWxlPgorICA8L2dyZXNvdXJjZT4KKzwvZ3Jlc291cmNlcz4K
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Jlc291cmNl
cy9ibGFuay5pY28gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9yZXNvdXJj
ZXMvYmxhbmsuaWNvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhODQ4YjkK
QmluYXJ5IGZpbGVzIC9kZXYvbnVsbCBhbmQgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdEd0ay9yZXNvdXJjZXMvYmxhbmsuaWNvIGRpZmZlcgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvcmVzb3VyY2VzL3Rlc3QuaHRtbCBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Jlc291cmNlcy90ZXN0Lmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThmN2Q0ZgotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Jlc291cmNlcy90ZXN0Lmh0bWwKQEAg
LTAsMCArMSw2IEBACis8aHRtbD4KKzxoZWFkPjx0aXRsZT50ZXN0PC90aXRsZT48L2hlYWQ+Cis8
Ym9keT50ZXN0PC9ib2R5PgorPC9odG1sPj48L2hlYWQ+Cis8Ym9keT50ZXN0PC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvcmVz
b3VyY2VzL3Rlc3Qub2dnIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvcmVz
b3VyY2VzL3Rlc3Qub2dnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmM2Ez
YjkKQmluYXJ5IGZpbGVzIC9kZXYvbnVsbCBhbmQgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdEd0ay9yZXNvdXJjZXMvdGVzdC5vZ2cgZGlmZmVyCmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9yZXNvdXJjZXMvdGVzdC5wZGYgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9yZXNvdXJjZXMvdGVzdC5wZGYKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQyNGMxOQpCaW5hcnkgZmlsZXMgL2Rldi9udWxs
IGFuZCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Jlc291cmNlcy90ZXN0
LnBkZiBkaWZmZXIKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
R3RrL3Jlc291cmNlcy90ZXN0LnR4dCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
R3RrL3Jlc291cmNlcy90ZXN0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li45ZGFlYWZiCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRHdGsvcmVzb3VyY2VzL3Rlc3QudHh0CkBAIC0wLDAgKzEgQEAKK3Rlc3QKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RfdXRpbHMuYyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RfdXRpbHMuYwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmI2NDVkCi0tLSAvZGV2L251bGwKKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdF91dGlscy5jCkBAIC0wLDAgKzEs
NTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXJubyBSZW5ldmllcgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
dGVzdF91dGlscy5oIgorCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGdsaWIvZ3N0ZGlv
Lmg+CisKK2ludCB0ZXN0dXRpbHNfcmVsYXRpdmVfY2hkaXIoY29uc3QgZ2NoYXIgKnRhcmdldEZp
bGVuYW1lLCBjb25zdCBnY2hhciAqZXhlY3V0YWJsZVBhdGgpCit7CisgICAgLyogdXNlciBjYW4g
c2V0IGxvY2F0aW9uIG9mIHRoZSB3ZWJraXQgcmVwb3NpdG9yeSBkaXJlY3RvcnkgaWYgaXQgZGlm
ZmVycyBmcm9tIGJ1aWxkIGRpcmVjdG9yeSAqLworICAgIGNvbnN0IGdjaGFyICpyZXBvUGF0aCA9
IGdfZ2V0ZW52KCJXRUJLSVRSRVBPRElSIik7CisgICAgaWYgKHJlcG9QYXRoKSB7CisgICAgICAg
IGlmIChnX2NoZGlyKHJlcG9QYXRoKSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9IGVs
c2UgaWYgKGdfY2hkaXIoZ19wYXRoX2dldF9kaXJuYW1lKGV4ZWN1dGFibGVQYXRoKSkpCisgICAg
ICAgICAgICByZXR1cm4gLTE7CisKKyAgICB3aGlsZSAoIWdfZmlsZV90ZXN0KHRhcmdldEZpbGVu
YW1lLCBHX0ZJTEVfVEVTVF9FWElTVFMpKSB7CisgICAgICAgIGdjaGFyICpwYXRoTmFtZTsKKyAg
ICAgICAgaWYgKGdfY2hkaXIoIi4uIikpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAg
IGdfYXNzZXJ0KCFnX3N0cl9lcXVhbCgocGF0aE5hbWUgPSBnX2dldF9jdXJyZW50X2RpcigpKSwg
Ii8iKSk7CisgICAgICAgIGdfZnJlZShwYXRoTmFtZSk7CisgICAgfQorCisgICAgZ2NoYXIgKmRp
ck5hbWUgPSBnX3BhdGhfZ2V0X2Rpcm5hbWUodGFyZ2V0RmlsZW5hbWUpOworICAgIGlmIChnX2No
ZGlyKGRpck5hbWUpKSB7CisgICAgICAgIGdfZnJlZShkaXJOYW1lKTsKKyAgICAgICAgcmV0dXJu
IC0xOworICAgIH0KKworICAgIGdfZnJlZShkaXJOYW1lKTsKKyAgICByZXR1cm4gMDsKK30KZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RfdXRpbHMu
aCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RfdXRpbHMuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzYwZGEzCi0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdF91dGlscy5oCkBAIC0w
LDAgKzEsMyBAQAorI2luY2x1ZGUgPGdsaWIuaD4KKworaW50IHRlc3R1dGlsc19yZWxhdGl2ZV9j
aGRpcihjb25zdCBnY2hhciAqdGFyZ2V0RmlsZW5hbWUsIGNvbnN0IGdjaGFyICpleGVjdXRhYmxl
UGF0aCk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90
ZXN0YXBwbGljYXRpb25jYWNoZS5jIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRH
dGsvdGVzdGFwcGxpY2F0aW9uY2FjaGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi43MThmNDAxCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRHdGsvdGVzdGFwcGxpY2F0aW9uY2FjaGUuYwpAQCAtMCwwICsxLDQ5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEx1a2FzeiBTbGFjaGNpYWsKKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z2xpYi9ncHJpbnRmLmg+CisjaW5jbHVk
ZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKworc3RhdGljIHZvaWQg
dGVzdF9hcHBsaWNhdGlvbl9jYWNoZV9tYXhpbXVtX3NpemUoKQoreworICAgIHVuc2lnbmVkIGxv
bmcgbG9uZyBtYXhTaXplID0gODE5MjsKKyAgICB3ZWJraXRfYXBwbGljYXRpb25fY2FjaGVfc2V0
X21heGltdW1fc2l6ZShtYXhTaXplKTsKKworICAgIC8vIENyZWF0aW5nIGEgV2ViVmlldyAtIG1h
a2Ugc3VyZSB0aGF0IGl0IGRpZG4ndCBjaGFuZ2UgYW55dGhpbmcKKyAgICBXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAg
Z19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7CisgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7
CisKKyAgICBnX2Fzc2VydChtYXhTaXplID09IHdlYmtpdF9hcHBsaWNhdGlvbl9jYWNoZV9nZXRf
bWF4aW11bV9zaXplKCkpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7
CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAgZ190ZXN0X2J1
Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMo
Ii93ZWJraXQvYXBwbGljYXRpb25fY2FjaGUvbWF4aW11bV9zaXplIiwKKyAgICAgICAgICAgICAg
ICAgICAgdGVzdF9hcHBsaWNhdGlvbl9jYWNoZV9tYXhpbXVtX3NpemUpOworCisgICAgcmV0dXJu
IGdfdGVzdF9ydW4oKTsKK30KKwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRHdGsvdGVzdGF0ay5jIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRH
dGsvdGVzdGF0ay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMmRiNjEK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90
ZXN0YXRrLmMKQEAgLTAsMCArMSwxNDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEln
YWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPGVycm5vLmg+
CisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CisjaW5jbHVkZSA8
Z3RrL2d0ay5oPgorI2luY2x1ZGUgPGxvY2FsZS5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2lu
Y2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKworc3RhdGljIGNvbnN0IGNoYXIqIGNlbnRlcmVkQ29u
dGVudHMgPSAiPGh0bWw+PGJvZHk+PHAgc3R5bGU9J3RleHQtYWxpZ246IGNlbnRlcjsnPlNob3J0
IGxpbmU8L3A+PHAgc3R5bGU9J3RleHQtYWxpZ246IGNlbnRlcjsnPkxvbmctc2l6ZSBsaW5lIHdp
dGggc29tZSBmb28gYmFyIGJheiBjb250ZW50PC9wPjxwIHN0eWxlPSd0ZXh0LWFsaWduOiBjZW50
ZXI7Jz5TaG9ydCBsaW5lPC9wPjxwIHN0eWxlPSd0ZXh0LWFsaWduOiBjZW50ZXI7Jz5UaGlzIGlz
IGEgbXVsdGktbGluZSBwYXJhZ3JhcGg8YnIgLz53aGVyZSB0aGUgZmlyc3QgbGluZTxiciAvPmlz
IHRoZSBiaWdnZXN0IG9uZTwvcD48L2JvZHk+PC9odG1sPiI7CisKK3N0YXRpYyBjb25zdCBjaGFy
KiBjb250ZW50cyA9ICI8aHRtbD48Ym9keT48cD5UaGlzIGlzIGEgdGVzdC4gVGhpcyBpcyB0aGUg
c2Vjb25kIHNlbnRlbmNlLiBBbmQgdGhpcyB0aGUgdGhpcmQuPC9wPjwvYm9keT48L2h0bWw+IjsK
Kworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnRlbnRzSW5UYWJsZVdpdGhIZWFkZXJzID0gIjxodG1s
Pjxib2R5Pjx0YWJsZT48dHI+PHRoPmZvbzwvdGg+PHRoPmJhcjwvdGg+PHRoIGNvbHNwYW49JzIn
PmJhejwvdGg+PC90cj48dHI+PHRoPnF1eDwvdGg+PHRkPjE8L3RkPjx0ZD4yPC90ZD48dGQ+Mzwv
dGQ+PC90cj48dHI+PHRoIHJvd3NwYW49JzInPnF1dXg8L3RoPjx0ZD40PC90ZD48dGQ+NTwvdGQ+
PHRkPjY8L3RkPjwvdHI+PHRyPjx0ZD42PC90ZD48dGQ+NzwvdGQ+PHRkPjg8L3RkPjwvdHI+PHRy
Pjx0aD5jb3JnZTwvdGg+PHRkPjk8L3RkPjx0ZD4xMDwvdGQ+PHRkPjExPC90ZD48L3RyPjwvdGFi
bGU+PHRhYmxlPjx0cj48dGQ+MTwvdGQ+PHRkPjI8L3RkPjwvdHI+PHRyPjx0ZD4zPC90ZD48dGQ+
NDwvdGQ+PC90cj48L3RhYmxlPjwvYm9keT48L2h0bWw+IjsKKworc3RhdGljIGNvbnN0IGNoYXIq
IGNvbnRlbnRzV2l0aEV4dHJhbmVvdXNXaGl0ZVNwYWNlcyA9ICI8aHRtbD48aGVhZD48Ym9keT48
cD5UaGlzXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFncmFwaFxuICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNcbiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib3JrZWQhPC9wPjwvYm9keT48L2h0bWw+IjsKKworc3RhdGljIGNvbnN0IGNo
YXIqIGNvbWJvQm94U2VsZWN0b3IgPSAiPGh0bWw+PGJvZHk+PHNlbGVjdD48b3B0aW9uIHNlbGVj
dGVkIHZhbHVlPSdmb28nPmZvbzwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J2Jhcic+YmFyPC9vcHRp
b24+PC9zZWxlY3Q+PC9ib2R5PjwvaHRtbD4iOworCitzdGF0aWMgY29uc3QgY2hhciogZW1iZWRk
ZWRPYmplY3RzID0gIjxodG1sPjxib2R5PjxwPkNob29zZTogPGlucHV0IHZhbHVlPSdmb28nIHR5
cGU9J2NoZWNrYm94Jy8+Zm9vIDxpbnB1dCB2YWx1ZT0nYmFyJyB0eXBlPSdjaGVja2JveCcvPmJh
ciAocGljayBvbmUpPC9wPjxwPkNob29zZTogPHNlbGVjdCBuYW1lPSdmb28nPjxvcHRpb24+YmFy
PC9vcHRpb24+PG9wdGlvbj5iYXo8L29wdGlvbj48L3NlbGVjdD4gKHBpY2sgb25lKTwvcD48cD48
aW5wdXQgbmFtZT0nZm9vYmFyYnV0dG9uJyB2YWx1ZT0nZm9vYmFyJyB0eXBlPSdidXR0b24nLz48
L3A+PC9ib2R5PjwvaHRtbD4iOworCitzdGF0aWMgY29uc3QgY2hhciogZm9ybVdpdGhUZXh0SW5w
dXRzID0gIjxodG1sPjxib2R5Pjxmb3JtPjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdlbnRyeScg
Lz48aW5wdXQgdHlwZT0ncGFzc3dvcmQnIG5hbWU9J3Bhc3N3b3JkRW50cnknIC8+PC9mb3JtPjwv
Ym9keT48L2h0bWw+IjsKKworc3RhdGljIGNvbnN0IGNoYXIqIGh5cGVydGV4dEFuZEh5cGVybGlu
a3MgPSAiPGh0bWw+PGJvZHk+PHA+QSBwYXJhZ3JhcGggd2l0aCBubyBsaW5rcyBhdCBhbGw8L3A+
PHA+PGEgaHJlZj0naHR0cDovL2Zvby5iYXIuYmF6Lyc+QSBsaW5lPC9hPiB3aXRoIDxhIGhyZWY9
J2h0dHA6Ly9iYXIuYmF6LmZvby8nPmEgbGluayBpbiB0aGUgbWlkZGxlPC9hPiBhcyB3ZWxsIGFz
IGF0IHRoZSBiZWdpbm5pbmcgYW5kIDxhIGhyZWY9J2h0dHA6Ly9iYXouZm9vLmJhci8nPmF0IHRo
ZSBlbmQ8L2E+PC9wPjxvbD48bGk+TGlzdCBpdGVtIHdpdGggYSA8c3Bhbj48YSBocmVmPSdodHRw
Oi8vZm9vLmJhci5iYXovJz5saW5rIGluc2lkZSBhIHNwYW4gbm9kZTwvYT48L3NwYW4+PC9saT48
L29sPjwvYm9keT48L2h0bWw+IjsKKworc3RhdGljIGNvbnN0IGNoYXIqIGxheW91dEFuZERhdGFU
YWJsZXMgPSAiPGh0bWw+PGJvZHk+PHRhYmxlPjx0cj48dGg+T2RkPC90aD48dGg+RXZlbjwvdGg+
PC90cj48dHI+PHRkPjE8L3RkPjx0ZD4yPC90ZD48L3RyPjwvdGFibGU+PHRhYmxlPjx0cj48dGQ+
Zm9vPC90ZD48dGQ+YmFyPC90ZD48L3RyPjwvdGFibGU+PC9ib2R5PjwvaHRtbD4iOworCitzdGF0
aWMgY29uc3QgY2hhciogbGlua3NXaXRoSW5saW5lSW1hZ2VzID0gIjxodG1sPjxoZWFkPjxzdHls
ZT5hLmh0dHA6YmVmb3JlIHtjb250ZW50OiB1cmwobm8taW1hZ2UucG5nKTt9PC9zdHlsZT48Ym9k
eT48cD48YSBjbGFzcz0naHR0cCcgaHJlZj0nZm9vJz5mb288L2E+IGJhciBiYXo8L3A+PHA+Zm9v
IDxhIGNsYXNzPSdodHRwJyBocmVmPSdiYXInPmJhcjwvYT4gYmF6PC9wPjxwPmZvbyBiYXIgPGEg
Y2xhc3M9J2h0dHAnIGhyZWY9J2Jheic+YmF6PC9hPjwvcD48L2JvZHk+PC9odG1sPiI7CisKK3N0
YXRpYyBjb25zdCBjaGFyKiBsaXN0c09mSXRlbXMgPSAiPGh0bWw+PGJvZHk+PHVsPjxsaT50ZXh0
IG9ubHk8L2xpPjxsaT48YSBocmVmPSdmb28nPmxpbmsgb25seTwvYT48L2xpPjxsaT50ZXh0IGFu
ZCBhIDxhIGhyZWY9J2Jhcic+bGluazwvYT48L2xpPjwvdWw+PG9sPjxsaT50ZXh0IG9ubHk8L2xp
PjxsaT48YSBocmVmPSdmb28nPmxpbmsgb25seTwvYT48L2xpPjxsaT50ZXh0IGFuZCBhIDxhIGhy
ZWY9J2Jhcic+bGluazwvYT48L2xpPjwvb2w+PC9ib2R5PjwvaHRtbD4iOworCitzdGF0aWMgY29u
c3QgY2hhciogdGV4dEZvckNhcmV0QnJvd3NpbmcgPSAiPGh0bWw+PGJvZHk+PGgxPkEgdGV4dCBo
ZWFkZXI8L2gxPjxwPkEgcGFyYWdyYXBoIDxhIGhyZWY9J2h0dHA6Ly9mb28uYmFyLmJhei8nPndp
dGggYSBsaW5rPC9hPiBpbiB0aGUgbWlkZGxlPC9wPjxvbD48bGk+QSBsaXN0IGl0ZW08L2xpPjxs
aT48c3BhbiBzdHlsZT0nZGlzcGxheTpibG9jazsnPkJsb2NrIHNwYW4gaW4gYSBsaXN0IGl0ZW08
L3NwYW4+PHNwYW4+SW5saW5lIHNwYW4gaW4gYSBsaXN0IGl0ZW08L3NwYW4+PC9saT48bGk+PGEg
aHJlZj0nZm9vJz48c3BhbiBzdHlsZT0nZGlzcGxheTpibG9jazsnPkJsb2NrIHNwYW4gaW4gYSBs
aW5rIGluIGEgbGlzdCBpdGVtPC9zcGFuPjxzcGFuPklubGluZSBzcGFuIGluIGEgbGluayBpbiBh
IGxpc3QgaXRlbTwvc3Bhbj48L2E+PC9saT48L29sPjxzZWxlY3Q+PG9wdGlvbiBzZWxlY3RlZCB2
YWx1ZT0nZm9vJz5BbiBvcHRpb24gaW4gYSBjb21ibyBib3g8L29wdGlvbj48L3NlbGVjdD48aW5w
dXQgdHlwZT0ndGV4dCcgbmFtZT0nZm9vJyB2YWx1ZT0nZm9vIGJhciBiYXonIC8+PHRhYmxlPjx0
cj48dGQ+YSB0YWJsZSBjZWxsPC90ZD48dGQ+PC90ZD48dGQ+PGEgaHJlZj0nZm9vJz48c3BhbiBz
dHlsZT0nZGlzcGxheTpibG9jazsnPkJsb2NrIHNwYW4gaW4gYSBsaW5rIGluIGEgdGFibGUgY2Vs
bDwvc3Bhbj48c3Bhbj5JbmxpbmUgc3BhbiBpbiBhIGxpbmsgaW4gYSB0YWJsZSBjZWxsPC9zcGFu
PjwvYT48L3RkPjx0ZD48c3BhbiBzdHlsZT0nZGlzcGxheTpibG9jazsnPkJsb2NrIHNwYW4gaW4g
YSB0YWJsZSBjZWxsPC9zcGFuPjxzcGFuPklubGluZSBzcGFuIGluIGEgdGFibGUgY2VsbDwvc3Bh
bj48L3RkPjwvdHI+PC90YWJsZT48aDQ+PGEgaHJlZj0nZm9vJz48c3BhbiBzdHlsZT0nZGlzcGxh
eTpibG9jazsnPkJsb2NrIHNwYW4gaW4gYSBsaW5rIGluIGEgaGVhZGluZzwvc3Bhbj48c3Bhbj5J
bmxpbmUgc3BhbiBpbiBhIGxpbmsgaW4gYSBoZWFkaW5nPC9zcGFuPjwvaDQ+PGg0PjxzcGFuIHN0
eWxlPSdkaXNwbGF5OmJsb2NrOyc+QmxvY2sgc3BhbiBpbiBhIGhlYWRpbmc8L3NwYW4+PHNwYW4+
SW5saW5lIHNwYW4gaW4gYSBoZWFkaW5nPC9zcGFuPjwvaDQ+PC9ib2R5PjwvaHRtbD4iOworCitz
dGF0aWMgY29uc3QgY2hhciogdGV4dEZvclNlbGVjdGlvbnMgPSAiPGh0bWw+PGJvZHk+PHA+QSBw
YXJhZ3JhcGggd2l0aCBwbGFpbiB0ZXh0PC9wPjxwPkEgcGFyYWdyYXBoIHdpdGggPGEgaHJlZj0n
aHR0cDovL3dlYmtpdC5vcmcnPmEgbGluazwvYT4gaW4gdGhlIG1pZGRsZTwvcD48b2w+PGxpPkEg
bGlzdCBpdGVtPC9saT48L29sPjxzZWxlY3Q+PC9ib2R5PjwvaHRtbD4iOworCitzdGF0aWMgY29u
c3QgY2hhciogdGV4dFdpdGhBdHRyaWJ1dGVzID0gIjxodG1sPjxoZWFkPjxzdHlsZT4uc3QxIHtm
b250LWZhbWlseTogbW9ub3NwYWNlOyBjb2xvcjpyZ2IoMTIwLDEyMSwxMjIpO30gLnN0MiB7dGV4
dC1kZWNvcmF0aW9uOnVuZGVybGluZTsgYmFja2dyb3VuZC1jb2xvcjpyZ2IoODAsODEsODIpO308
L3N0eWxlPjwvaGVhZD48Ym9keT48cCBzdHlsZT1cImZvbnQtc2l6ZToxNDsgdGV4dC1hbGlnbjpy
aWdodDtcIj5UaGlzIGlzIHRoZSA8aT5maXJzdDwvaT48Yj4gc2VudGVuY2Ugb2YgdGhpcyB0ZXh0
LjwvYj48L3A+PHAgY2xhc3M9XCJzdDFcIj5UaGlzIHNlbnRlbmNlIHNob3VsZCBoYXZlIGFuIHN0
eWxlIGFwcGxpZWQgPHNwYW4gY2xhc3M9XCJzdDJcIj5hbmQgdGhpcyBwYXJ0IHNob3VsZCBoYXZl
IGFub3RoZXIgb25lPC9zcGFuPi48L3A+PHA+eDxzdWI+MTwvc3ViPjxzdXA+Mjwvc3VwPj14PHN1
Yj4yPC9zdWI+PHN1cD4zPC9zdXA+PC9wPjxwIHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXI7XCI+
VGhpcyBzZW50ZW5jZSBpcyB0aGUgPHN0cmlrZT5sYXN0PC9zdHJpa2U+IG9uZS48L3A+PC9ib2R5
PjwvaHRtbD4iOworCitzdGF0aWMgQXRrT2JqZWN0KiBnZXRXZWJBcmVhT2JqZWN0KFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcpCit7CisgICAgLyogTWFudWFsbHkgc3BpbiB0aGUgbWFpbiBjb250ZXh0
IHRvIG1ha2Ugc3VyZSB0aGUgYWNjZXNzaWJsZQorICAgICAgIG9iamVjdHMgYXJlIHByb3Blcmx5
IGNyZWF0ZWQgYmVmb3JlIGNvbnRpbnVpbmcuICovCisgICAgd2hpbGUgKGdfbWFpbl9jb250ZXh0
X3BlbmRpbmcoMCkpCisgICAgICAgIGdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbigwLCBUUlVFKTsK
KworICAgIEF0a09iamVjdCogcm9vdE9iamVjdCA9IGd0a193aWRnZXRfZ2V0X2FjY2Vzc2libGUo
R1RLX1dJREdFVCh3ZWJWaWV3KSk7CisgICAgaWYgKCFyb290T2JqZWN0KQorICAgICAgICByZXR1
cm4gTlVMTDsKKworICAgIEF0a09iamVjdCogd2ViQXJlYU9iamVjdCA9IGF0a19vYmplY3RfcmVm
X2FjY2Vzc2libGVfY2hpbGQocm9vdE9iamVjdCwgMCk7CisgICAgaWYgKCF3ZWJBcmVhT2JqZWN0
KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIC8qIFdlIGRvbid0IG5lZWQgdGhlIGV4dHJh
IHJlZiBoZXJlLiAqLworICAgIGdfb2JqZWN0X3VucmVmKHdlYkFyZWFPYmplY3QpOworCisgICAg
cmV0dXJuIHdlYkFyZWFPYmplY3Q7Cit9CisKK3N0YXRpYyBnY2hhciogdGV4dENhcmV0TW92ZWRS
ZXN1bHQgPSAwOworCitzdGF0aWMgdm9pZCB0ZXh0Q2FyZXRNb3ZlZENhbGxiYWNrKEF0a1RleHQq
IHRleHQsIGdpbnQgcG9zLCBncG9pbnRlciBkYXRhKQoreworICAgIGdfYXNzZXJ0KEFUS19JU19U
RVhUKHRleHQpKTsKKworICAgIGdfZnJlZSh0ZXh0Q2FyZXRNb3ZlZFJlc3VsdCk7CisgICAgQXRr
Um9sZSByb2xlID0gYXRrX29iamVjdF9nZXRfcm9sZShBVEtfT0JKRUNUKHRleHQpKTsKKyAgICB0
ZXh0Q2FyZXRNb3ZlZFJlc3VsdCA9IGdfc3RyZHVwX3ByaW50ZigifCVzfCVkfCIsIGF0a19yb2xl
X2dldF9uYW1lKHJvbGUpLCBwb3MpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrQ2Fy
ZXRPZmZzZXRzKCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9W
SUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmll
dyk7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9Owor
ICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2Nh
dGlvbik7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIHRleHRGb3JD
YXJldEJyb3dzaW5nLCAwLCAwLCAwKTsKKworICAgIEF0a09iamVjdCogb2JqZWN0ID0gZ2V0V2Vi
QXJlYU9iamVjdCh3ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChvYmplY3QpOworCisgICAgQXRrT2Jq
ZWN0KiBoZWFkZXIgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMCk7
CisgICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQoaGVhZGVyKSk7CisgICAgZ19zaWduYWxfY29ubmVj
dChoZWFkZXIsICJ0ZXh0LWNhcmV0LW1vdmVkIiwgR19DQUxMQkFDSyh0ZXh0Q2FyZXRNb3ZlZENh
bGxiYWNrKSwgMCk7CisKKyAgICAvKiBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8gcGxhY2UgdGhl
IGNhcmV0IGluc2lkZSBhIGhlYWRlci4gKi8KKyAgICBnYm9vbGVhbiByZXN1bHQgPSBhdGtfdGV4
dF9zZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhUKGhlYWRlciksIDUpOworICAgIGdfYXNzZXJ0X2Nt
cGludChyZXN1bHQsID09LCBUUlVFKTsKKyAgICBnaW50IG9mZnNldCA9IGF0a190ZXh0X2dldF9j
YXJldF9vZmZzZXQoQVRLX1RFWFQoaGVhZGVyKSk7CisgICAgZ19hc3NlcnRfY21waW50KG9mZnNl
dCwgPT0sIDUpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0Q2FyZXRNb3ZlZFJlc3VsdCwgPT0s
ICJ8aGVhZGluZ3w1fCIpOworCisgICAgQXRrT2JqZWN0KiBwYXJhZ3JhcGggPSBhdGtfb2JqZWN0
X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMSk7CisgICAgZ19hc3NlcnQoQVRLX0lTX1RF
WFQocGFyYWdyYXBoKSk7CisgICAgZ19zaWduYWxfY29ubmVjdChwYXJhZ3JhcGgsICJ0ZXh0LWNh
cmV0LW1vdmVkIiwgR19DQUxMQkFDSyh0ZXh0Q2FyZXRNb3ZlZENhbGxiYWNrKSwgMCk7CisKKyAg
ICAvKiBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8gcGxhY2UgdGhlIGNhcmV0IGluc2lkZSBhIHBh
cmFncmFwaCBhbmQgYSBsaW5rLiAqLworICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9jYXJldF9v
ZmZzZXQoQVRLX1RFWFQocGFyYWdyYXBoKSwgNSk7CisgICAgZ19hc3NlcnRfY21waW50KHJlc3Vs
dCwgPT0sIFRSVUUpOworICAgIG9mZnNldCA9IGF0a190ZXh0X2dldF9jYXJldF9vZmZzZXQoQVRL
X1RFWFQocGFyYWdyYXBoKSk7CisgICAgZ19hc3NlcnRfY21waW50KG9mZnNldCwgPT0sIDUpOwor
ICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0Q2FyZXRNb3ZlZFJlc3VsdCwgPT0sICJ8cGFyYWdyYXBo
fDV8Iik7CisKKyAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhU
KHBhcmFncmFwaCksIDIwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocmVzdWx0LCA9PSwgVFJVRSk7
CisgICAgb2Zmc2V0ID0gYXRrX3RleHRfZ2V0X2NhcmV0X29mZnNldChBVEtfVEVYVChwYXJhZ3Jh
cGgpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQob2Zmc2V0LCA9PSwgMjApOworICAgIGdfYXNzZXJ0
X2NtcHN0cih0ZXh0Q2FyZXRNb3ZlZFJlc3VsdCwgPT0sICJ8cGFyYWdyYXBofDIwfCIpOworCisg
ICAgcmVzdWx0ID0gYXRrX3RleHRfc2V0X2NhcmV0X29mZnNldChBVEtfVEVYVChwYXJhZ3JhcGgp
LCAzMCk7CisgICAgZ19hc3NlcnRfY21waW50KHJlc3VsdCwgPT0sIFRSVUUpOworICAgIG9mZnNl
dCA9IGF0a190ZXh0X2dldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQocGFyYWdyYXBoKSk7CisgICAg
Z19hc3NlcnRfY21waW50KG9mZnNldCwgPT0sIDMwKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGV4
dENhcmV0TW92ZWRSZXN1bHQsID09LCAifHBhcmFncmFwaHwzMHwiKTsKKworICAgIEF0a09iamVj
dCogbGluayA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQocGFyYWdyYXBoLCAwKTsK
KyAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChsaW5rKSk7CisKKyAgICByZXN1bHQgPSBhdGtfdGV4
dF9zZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhUKGxpbmspLCA1KTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQocmVzdWx0LCA9PSwgVFJVRSk7CisgICAgb2Zmc2V0ID0gYXRrX3RleHRfZ2V0X2NhcmV0X29m
ZnNldChBVEtfVEVYVChsaW5rKSk7CisgICAgZ19hc3NlcnRfY21waW50KG9mZnNldCwgPT0sIDUp
OworICAgIC8qIFBvc2l0aW9ucyBpbnNpZGUgbGlua3MgYXJlIHJlcG9ydGVkIHJlbGF0aXZlIHRv
IHRoZSBwYXJhZ3JhcGguICovCisgICAgZ19hc3NlcnRfY21wc3RyKHRleHRDYXJldE1vdmVkUmVz
dWx0LCA9PSwgInxwYXJhZ3JhcGh8MTd8Iik7CisKKyAgICBBdGtPYmplY3QqIGxpc3QgPSBhdGtf
b2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMik7CisgICAgZ19hc3NlcnQoQVRL
X09CSkVDVChsaXN0KSk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShsaXN0KSA9
PSBBVEtfUk9MRV9MSVNUKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX29iamVjdF9nZXRfbl9h
Y2Nlc3NpYmxlX2NoaWxkcmVuKGxpc3QpLCA9PSwgMyk7CisKKyAgICBBdGtPYmplY3QqIGxpc3RJ
dGVtID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChsaXN0LCAwKTsKKyAgICBsaXN0
SXRlbSA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQobGlzdCwgMik7CisgICAgZ19h
c3NlcnQoQVRLX0lTX1RFWFQobGlzdEl0ZW0pKTsKKworICAgIC8qIEl0J3Mgbm90IHBvc3NpYmxl
IHRvIHBsYWNlIHRoZSBjYXJldCBpbnNpZGUgYW4gaXRlbSdzIG1hcmtlci4gKi8KKyAgICByZXN1
bHQgPSBhdGtfdGV4dF9zZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhUKGxpc3RJdGVtKSwgMSk7Cisg
ICAgZ19hc3NlcnRfY21waW50KHJlc3VsdCwgPT0sIEZBTFNFKTsKKworICAgIC8qIEl0IHNob3Vs
ZCBiZSBwb3NzaWJsZSB0byBwbGFjZSB0aGUgY2FyZXQgaW5zaWRlIGFuIGl0ZW0ncyB0ZXh0LiAq
LworICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQobGlzdEl0
ZW0pLCA1KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocmVzdWx0LCA9PSwgVFJVRSk7CisgICAgb2Zm
c2V0ID0gYXRrX3RleHRfZ2V0X2NhcmV0X29mZnNldChBVEtfVEVYVChsaXN0SXRlbSkpOworICAg
IGdfYXNzZXJ0X2NtcGludChvZmZzZXQsID09LCA1KTsKKworICAgIEF0a09iamVjdCogcGFuZWwg
PSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMyk7CisgICAgZ19hc3Nl
cnQoQVRLX0lTX09CSkVDVChwYW5lbCkpOworICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3Jv
bGUocGFuZWwpID09IEFUS19ST0xFX1BBTkVMKTsKKworICAgIEF0a09iamVjdCogY29tYm9Cb3gg
PSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKHBhbmVsLCAwKTsKKyAgICBnX2Fzc2Vy
dChBVEtfSVNfT0JKRUNUKGNvbWJvQm94KSk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRf
cm9sZShjb21ib0JveCkgPT0gQVRLX1JPTEVfQ09NQk9fQk9YKTsKKworICAgIEF0a09iamVjdCog
bWVudVBvcHVwID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChjb21ib0JveCwgMCk7
CisgICAgZ19hc3NlcnQoQVRLX0lTX09CSkVDVChtZW51UG9wdXApKTsKKyAgICBnX2Fzc2VydChh
dGtfb2JqZWN0X2dldF9yb2xlKG1lbnVQb3B1cCkgPT0gQVRLX1JPTEVfTUVOVSk7CisKKyAgICBB
dGtPYmplY3QqIGNvbWJvQm94T3B0aW9uID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGls
ZChtZW51UG9wdXAsIDApOworICAgIGdfYXNzZXJ0KEFUS19JU19PQkpFQ1QoY29tYm9Cb3hPcHRp
b24pKTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGNvbWJvQm94T3B0aW9uKSA9
PSBBVEtfUk9MRV9NRU5VX0lURU0pOworCisgICAgLyogSXQncyBub3QgcG9zc2libGUgdG8gcGxh
Y2UgdGhlIGNhcmV0IGluc2lkZSBhbiBvcHRpb24gZm9yIGEgY29tYm9ib3guICovCisgICAgcmVz
dWx0ID0gYXRrX3RleHRfc2V0X2NhcmV0X29mZnNldChBVEtfVEVYVChjb21ib0JveE9wdGlvbiks
IDEpOworICAgIGdfYXNzZXJ0X2NtcGludChyZXN1bHQsID09LCBGQUxTRSk7CisKKyAgICBBdGtP
YmplY3QqIHRleHRFbnRyeSA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQocGFuZWws
IDEpOworICAgIGdfYXNzZXJ0KEFUS19JU19PQkpFQ1QodGV4dEVudHJ5KSk7CisgICAgZ19hc3Nl
cnQoYXRrX29iamVjdF9nZXRfcm9sZSh0ZXh0RW50cnkpID09IEFUS19ST0xFX0VOVFJZKTsKKwor
ICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQodGV4dEVudHJ5
KSwgNSk7CisgICAgZ19hc3NlcnRfY21waW50KHJlc3VsdCwgPT0sIFRSVUUpOworICAgIG9mZnNl
dCA9IGF0a190ZXh0X2dldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQodGV4dEVudHJ5KSk7CisgICAg
Z19hc3NlcnRfY21waW50KG9mZnNldCwgPT0sIDUpOworCisgICAgQXRrT2JqZWN0KiB0YWJsZSA9
IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCA0KTsKKyAgICBnX2Fzc2Vy
dChBVEtfSVNfT0JKRUNUKHRhYmxlKSk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9s
ZSh0YWJsZSkgPT0gQVRLX1JPTEVfVEFCTEUpOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfb2Jq
ZWN0X2dldF9uX2FjY2Vzc2libGVfY2hpbGRyZW4odGFibGUpLCA9PSwgNCk7CisKKyAgICBBdGtP
YmplY3QqIHRhYmxlQ2VsbCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQodGFibGUs
IDApOworICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUodGFibGVDZWxsKSA9PSBBVEtf
Uk9MRV9UQUJMRV9DRUxMKTsKKyAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfY2FyZXRfb2Zmc2V0
KEFUS19URVhUKHRhYmxlQ2VsbCksIDIpOworICAgIGdfYXNzZXJ0X2NtcGludChyZXN1bHQsID09
LCBUUlVFKTsKKyAgICBvZmZzZXQgPSBhdGtfdGV4dF9nZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhU
KHRhYmxlQ2VsbCkpOworICAgIGdfYXNzZXJ0X2NtcGludChvZmZzZXQsID09LCAyKTsKKworICAg
IGdfZnJlZSh0ZXh0Q2FyZXRNb3ZlZFJlc3VsdCk7CisKKyAgICBnX29iamVjdF91bnJlZihwYXJh
Z3JhcGgpOworICAgIGdfb2JqZWN0X3VucmVmKGxpbmspOworICAgIGdfb2JqZWN0X3VucmVmKGxp
c3QpOworICAgIGdfb2JqZWN0X3VucmVmKGxpc3RJdGVtKTsKKyAgICBnX29iamVjdF91bnJlZihw
YW5lbCk7CisgICAgZ19vYmplY3RfdW5yZWYoY29tYm9Cb3gpOworICAgIGdfb2JqZWN0X3VucmVm
KG1lbnVQb3B1cCk7CisgICAgZ19vYmplY3RfdW5yZWYoY29tYm9Cb3hPcHRpb24pOworICAgIGdf
b2JqZWN0X3VucmVmKHRleHRFbnRyeSk7CisgICAgZ19vYmplY3RfdW5yZWYodGFibGUpOworICAg
IGdfb2JqZWN0X3VucmVmKHRhYmxlQ2VsbCk7CisgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7
Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtDYXJldE9mZnNldHNBbmRFeHRyYW5vdXNX
aGl0ZVNwYWNlcygpCit7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJf
VklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZp
ZXcpOworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgODAwLCA2MDAgfTsK
KyAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9j
YXRpb24pOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LCBjb250ZW50
c1dpdGhFeHRyYW5lb3VzV2hpdGVTcGFjZXMsIDAsIDAsIDApOworCisgICAgLyogRW5hYmxlIGNh
cmV0IGJyb3dzaW5nLiAqLworICAgIFdlYktpdFdlYlNldHRpbmdzKiBzZXR0aW5ncyA9IHdlYmtp
dF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmlldyk7CisgICAgZ19vYmplY3Rfc2V0KEdfT0JK
RUNUKHNldHRpbmdzKSwgImVuYWJsZS1jYXJldC1icm93c2luZyIsIFRSVUUsIE5VTEwpOworCisg
ICAgLyogR2V0IHRvIHRoZSBpbm5lciBBdGtUZXh0IG9iamVjdC4gKi8KKyAgICBBdGtPYmplY3Qq
IG9iamVjdCA9IGdldFdlYkFyZWFPYmplY3Qod2ViVmlldyk7CisgICAgZ19hc3NlcnQob2JqZWN0
KTsKKyAgICBvYmplY3QgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwg
MCk7CisgICAgZ19hc3NlcnQob2JqZWN0KTsKKworICAgIEF0a1RleHQqIHRleHRPYmplY3QgPSBB
VEtfVEVYVChvYmplY3QpOworICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHRleHRPYmplY3QpKTsK
KworICAgIGdpbnQgY2hhcmFjdGVyQ291bnQgPSBhdGtfdGV4dF9nZXRfY2hhcmFjdGVyX2NvdW50
KHRleHRPYmplY3QpOworICAgIGdfYXNzZXJ0X2NtcGludChjaGFyYWN0ZXJDb3VudCwgPT0sIDI1
KTsKKworICAgIGdib29sZWFuIHJlc3VsdCA9IGF0a190ZXh0X3NldF9jYXJldF9vZmZzZXQodGV4
dE9iamVjdCwgY2hhcmFjdGVyQ291bnQgLSAxKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocmVzdWx0
LCA9PSwgVFJVRSk7CisKKyAgICBnaW50IGNhcmV0T2Zmc2V0ID0gYXRrX3RleHRfZ2V0X2NhcmV0
X29mZnNldCh0ZXh0T2JqZWN0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoY2FyZXRPZmZzZXQsID09
LCBjaGFyYWN0ZXJDb3VudCAtIDEpOworCisgICAgcmVzdWx0ID0gYXRrX3RleHRfc2V0X2NhcmV0
X29mZnNldCh0ZXh0T2JqZWN0LCBjaGFyYWN0ZXJDb3VudCk7CisgICAgZ19hc3NlcnRfY21waW50
KHJlc3VsdCwgPT0sIFRSVUUpOworCisgICAgY2FyZXRPZmZzZXQgPSBhdGtfdGV4dF9nZXRfY2Fy
ZXRfb2Zmc2V0KHRleHRPYmplY3QpOworICAgIGdfYXNzZXJ0X2NtcGludChjYXJldE9mZnNldCwg
PT0sIGNoYXJhY3RlckNvdW50KTsKKworICAgIGdfb2JqZWN0X3VucmVmKG9iamVjdCk7CisgICAg
Z19vYmplY3RfdW5yZWYod2ViVmlldyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtD
b21ib0JveCgpCit7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklF
Vyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcp
OworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgODAwLCA2MDAgfTsKKyAg
ICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRp
b24pOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LCBjb21ib0JveFNl
bGVjdG9yLCAwLCAwLCAwKTsKKworICAgIEF0a09iamVjdCogb2JqZWN0ID0gZ2V0V2ViQXJlYU9i
amVjdCh3ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChvYmplY3QpOworCisgICAgQXRrT2JqZWN0KiBm
b3JtT2JqZWN0ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDApOwor
ICAgIGdfYXNzZXJ0KGZvcm1PYmplY3QpOworCisgICAgQXRrT2JqZWN0KiBjb21ib0JveCA9IGF0
a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoZm9ybU9iamVjdCwgMCk7CisgICAgZ19hc3Nl
cnQoQVRLX0lTX09CSkVDVChjb21ib0JveCkpOworCisgICAgQXRrT2JqZWN0KiBtZW51UG9wdXAg
PSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGNvbWJvQm94LCAwKTsKKyAgICBnX2Fz
c2VydChBVEtfSVNfT0JKRUNUKG1lbnVQb3B1cCkpOworCisgICAgQXRrT2JqZWN0KiBpdGVtMSA9
IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQobWVudVBvcHVwLCAwKTsKKyAgICBnX2Fz
c2VydChBVEtfSVNfT0JKRUNUKGl0ZW0xKSk7CisKKyAgICBBdGtPYmplY3QqIGl0ZW0yID0gYXRr
X29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChtZW51UG9wdXAsIDEpOworICAgIGdfYXNzZXJ0
KEFUS19JU19PQkpFQ1QoaXRlbTIpKTsKKworICAgIC8qIENoZWNrIHJvbGVzLiAqLworICAgIGdf
YXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoY29tYm9Cb3gpID09IEFUS19ST0xFX0NPTUJPX0JP
WCk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShtZW51UG9wdXApID09IEFUS19S
T0xFX01FTlUpOworICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoaXRlbTEpID09IEFU
S19ST0xFX01FTlVfSVRFTSk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShpdGVt
MikgPT0gQVRLX1JPTEVfTUVOVV9JVEVNKTsKKworICAgIC8qIENoZWNrIHRoZSBpbXBsZW1lbnRh
dGlvbiBvZiB0aGUgQXRrU2VsZWN0aW9uIGludGVyZmFjZS4gKi8KKyAgICBnX2Fzc2VydChBVEtf
SVNfU0VMRUNUSU9OKGNvbWJvQm94KSk7CisgICAgQXRrU2VsZWN0aW9uKiBhdGtTZWxlY3Rpb24g
PSBBVEtfU0VMRUNUSU9OKGNvbWJvQm94KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX3NlbGVj
dGlvbl9nZXRfc2VsZWN0aW9uX2NvdW50KGF0a1NlbGVjdGlvbiksID09LCAxKTsKKyAgICBnX2Fz
c2VydChhdGtfc2VsZWN0aW9uX2lzX2NoaWxkX3NlbGVjdGVkKGF0a1NlbGVjdGlvbiwgMCkpOwor
ICAgIGdfYXNzZXJ0KCFhdGtfc2VsZWN0aW9uX2lzX2NoaWxkX3NlbGVjdGVkKGF0a1NlbGVjdGlv
biwgMSkpOworICAgIEF0a09iamVjdCogc2VsZWN0ZWRJdGVtID0gYXRrX3NlbGVjdGlvbl9yZWZf
c2VsZWN0aW9uKGF0a1NlbGVjdGlvbiwgMCk7CisgICAgZ19hc3NlcnQoc2VsZWN0ZWRJdGVtID09
IGl0ZW0xKTsKKyAgICBnX29iamVjdF91bnJlZihzZWxlY3RlZEl0ZW0pOworCisgICAgLyogQ2hl
Y2sgdGhhdCB0aGUgbWVudSBwb3B1cCBoYXMgMCBsaW5rcyBhbmQgZG9lc24ndCBjcmFzaCBmcm9t
IGNoZWNraW5nLiAqLworICAgIGdpbnQgbkxpbmtzID0gYXRrX2h5cGVydGV4dF9nZXRfbl9saW5r
cyhBVEtfSFlQRVJURVhUKG1lbnVQb3B1cCkpOworICAgIGdfYXNzZXJ0X2NtcGludChuTGlua3Ms
ID09LCAwKTsKKworICAgIC8qIENoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIEF0a0Fj
dGlvbiBpbnRlcmZhY2UuICovCisgICAgZ19hc3NlcnQoQVRLX0lTX0FDVElPTihjb21ib0JveCkp
OworICAgIEF0a0FjdGlvbiogYXRrQWN0aW9uID0gQVRLX0FDVElPTihjb21ib0JveCk7CisgICAg
Z19hc3NlcnRfY21waW50KGF0a19hY3Rpb25fZ2V0X25fYWN0aW9ucyhhdGtBY3Rpb24pLCA9PSwg
MSk7CisgICAgZ19hc3NlcnQoYXRrX2FjdGlvbl9kb19hY3Rpb24oYXRrQWN0aW9uLCAwKSk7CisK
KyAgICBnX2Fzc2VydChBVEtfSVNfQUNUSU9OKG1lbnVQb3B1cCkpOworICAgIGF0a0FjdGlvbiA9
IEFUS19BQ1RJT04obWVudVBvcHVwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2FjdGlvbl9n
ZXRfbl9hY3Rpb25zKGF0a0FjdGlvbiksID09LCAxKTsKKyAgICBnX2Fzc2VydChhdGtfYWN0aW9u
X2RvX2FjdGlvbihhdGtBY3Rpb24sIDApKTsKKworICAgIGdfYXNzZXJ0KEFUS19JU19BQ1RJT04o
aXRlbTEpKTsKKyAgICBhdGtBY3Rpb24gPSBBVEtfQUNUSU9OKGl0ZW0xKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoYXRrX2FjdGlvbl9nZXRfbl9hY3Rpb25zKGF0a0FjdGlvbiksID09LCAxKTsKKyAg
ICBnX2Fzc2VydChhdGtfYWN0aW9uX2RvX2FjdGlvbihhdGtBY3Rpb24sIDApKTsKKworICAgIGdf
YXNzZXJ0KEFUS19JU19BQ1RJT04oaXRlbTIpKTsKKyAgICBhdGtBY3Rpb24gPSBBVEtfQUNUSU9O
KGl0ZW0yKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2FjdGlvbl9nZXRfbl9hY3Rpb25zKGF0
a0FjdGlvbiksID09LCAxKTsKKyAgICBnX2Fzc2VydChhdGtfYWN0aW9uX2RvX2FjdGlvbihhdGtB
Y3Rpb24sIDApKTsKKworICAgIC8qIEFmdGVyIHNlbGVjdGluZyB0aGUgc2Vjb25kIGl0ZW0sIHNl
bGVjdGlvbiBzaG91bGQgaGF2ZSBjaGFuZ2VkLiAqLworICAgIGdfYXNzZXJ0X2NtcGludChhdGtf
c2VsZWN0aW9uX2dldF9zZWxlY3Rpb25fY291bnQoYXRrU2VsZWN0aW9uKSwgPT0sIDEpOworICAg
IGdfYXNzZXJ0KCFhdGtfc2VsZWN0aW9uX2lzX2NoaWxkX3NlbGVjdGVkKGF0a1NlbGVjdGlvbiwg
MCkpOworICAgIGdfYXNzZXJ0KGF0a19zZWxlY3Rpb25faXNfY2hpbGRfc2VsZWN0ZWQoYXRrU2Vs
ZWN0aW9uLCAxKSk7CisgICAgc2VsZWN0ZWRJdGVtID0gYXRrX3NlbGVjdGlvbl9yZWZfc2VsZWN0
aW9uKGF0a1NlbGVjdGlvbiwgMCk7CisgICAgZ19hc3NlcnQoc2VsZWN0ZWRJdGVtID09IGl0ZW0y
KTsKKyAgICBnX29iamVjdF91bnJlZihzZWxlY3RlZEl0ZW0pOworCisgICAgZ19vYmplY3RfdW5y
ZWYoZm9ybU9iamVjdCk7CisgICAgZ19vYmplY3RfdW5yZWYoY29tYm9Cb3gpOworICAgIGdfb2Jq
ZWN0X3VucmVmKG1lbnVQb3B1cCk7CisgICAgZ19vYmplY3RfdW5yZWYoaXRlbTEpOworICAgIGdf
b2JqZWN0X3VucmVmKGl0ZW0yKTsKKyAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKK30KKwor
c3RhdGljIGdjaGFyKiBsb2FkaW5nRXZlbnRzUmVzdWx0ID0gMDsKKworc3RhdGljIHZvaWQgdXBk
YXRlTG9hZGluZ0V2ZW50c1Jlc3VsdChjb25zdCBnY2hhciogc2lnbmFsTmFtZSkKK3sKKyAgICBn
X2Fzc2VydChzaWduYWxOYW1lKTsKKworICAgIGdjaGFyKiBwcmV2aW91c1Jlc3VsdCA9IGxvYWRp
bmdFdmVudHNSZXN1bHQ7CisgICAgbG9hZGluZ0V2ZW50c1Jlc3VsdCA9IGdfc3RyZHVwX3ByaW50
ZigiJXN8JXMiLCBwcmV2aW91c1Jlc3VsdCwgc2lnbmFsTmFtZSk7CisgICAgZ19mcmVlKHByZXZp
b3VzUmVzdWx0KTsKK30KKworc3RhdGljIGdib29sZWFuIGRvY3VtZW50TG9hZGluZ0V2ZW50Q2Fs
bGJhY2soR1NpZ25hbEludm9jYXRpb25IaW50ICpzaWduYWxIaW50LCBndWludCBudW1QYXJhbVZh
bHVlcywgY29uc3QgR1ZhbHVlICpwYXJhbVZhbHVlcywgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICAv
LyBBdCBsZWFzdCB3ZSBzaG91bGQgcmVjZWl2ZSB0aGUgaW5zdGFuY2UgZW1pdHRpbmcgdGhlIHNp
Z25hbC4KKyAgICBpZiAobnVtUGFyYW1WYWx1ZXMgPCAxKQorICAgICAgICByZXR1cm4gVFJVRTsK
KworICAgIEdTaWduYWxRdWVyeSBzaWduYWxfcXVlcnk7CisgICAgZ19zaWduYWxfcXVlcnkoc2ln
bmFsSGludC0+c2lnbmFsX2lkLCAmc2lnbmFsX3F1ZXJ5KTsKKworICAgIHVwZGF0ZUxvYWRpbmdF
dmVudHNSZXN1bHQoc2lnbmFsX3F1ZXJ5LnNpZ25hbF9uYW1lKTsKKyAgICByZXR1cm4gVFJVRTsK
K30KKworc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0RvY3VtZW50TG9hZGluZ0V2ZW50cygpCit7
CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2Vi
X3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOworICAgIEd0a0Fs
bG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgODAwLCA2MDAgfTsKKyAgICBndGtfd2lkZ2V0
X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOworCisgICAg
LyogQ29ubmVjdCBnbG9iYWxseSB0byBzZWUgdGhvc2UgZXZlbnRzIGR1cmluZyBhIGZ1dHVyZSBs
b2FkLiAqLworICAgIGd1aW50IGxvYWRDb21wbGV0ZUxpc3RlbmVySWQgPSBhdGtfYWRkX2dsb2Jh
bF9ldmVudF9saXN0ZW5lcihkb2N1bWVudExvYWRpbmdFdmVudENhbGxiYWNrLCAiQVRLOkF0a0Rv
Y3VtZW50OmxvYWQtY29tcGxldGUiKTsKKworICAgIC8qIERvIHRoZSBsb2FkLCBzbyB3ZSBjYW4g
c2VlIHRob3NlIGV2ZW50cyBoYXBwZW5pbmcuICovCisgICAgbG9hZGluZ0V2ZW50c1Jlc3VsdCA9
IGdfc3RyZHVwKCIiKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywg
Y29udGVudHMsIDAsIDAsIDApOworCisgICAgLyogVHJpZ2dlciB0aGUgY3JlYXRpb24gb2YgdGhl
IGZ1bGwgYWNjZXNzaWJpbGl0eSBoaWVyYXJjaHkgYnkKKyAgICAgICBhc2tpbmcgZm9yIHRoZSB3
ZWJBcmVhIG9iamVjdCwgc28gd2UgY2FuIGxpc3RlbiB0byBldmVudHMuICovCisgICAgZ2V0V2Vi
QXJlYU9iamVjdCh3ZWJWaWV3KTsKKworICAgIGF0a19yZW1vdmVfZ2xvYmFsX2V2ZW50X2xpc3Rl
bmVyKGxvYWRDb21wbGV0ZUxpc3RlbmVySWQpOworCisgICAgZ19hc3NlcnRfY21wc3RyKGxvYWRp
bmdFdmVudHNSZXN1bHQsID09LCAifGxvYWQtY29tcGxldGUiKTsKKworICAgIGdfZnJlZShsb2Fk
aW5nRXZlbnRzUmVzdWx0KTsKKyAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKK30KKworc3Rh
dGljIHZvaWQgdGVzdFdlYmtpdEF0a0VtYmVkZGVkT2JqZWN0cygpCit7CisgICAgV2ViS2l0V2Vi
Vmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwor
ICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOworICAgIEd0a0FsbG9jYXRpb24gYWxsb2Nh
dGlvbiA9IHsgMCwgMCwgODAwLCA2MDAgfTsKKyAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUo
R1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOworICAgIHdlYmtpdF93ZWJfdmlld19s
b2FkX3N0cmluZyh3ZWJWaWV3LCBlbWJlZGRlZE9iamVjdHMsIDAsIDAsIDApOworCisgICAgQXRr
T2JqZWN0KiBvYmplY3QgPSBnZXRXZWJBcmVhT2JqZWN0KHdlYlZpZXcpOworICAgIGdfYXNzZXJ0
KG9iamVjdCk7CisKKyAgICBBdGtUZXh0KiBwYXJhZ3JhcGgxID0gQVRLX1RFWFQoYXRrX29iamVj
dF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDApKTsKKyAgICBnX2Fzc2VydChBVEtfSVNf
VEVYVChwYXJhZ3JhcGgxKSk7CisgICAgZ19hc3NlcnQoQVRLX0lTX0hZUEVSVEVYVChwYXJhZ3Jh
cGgxKSk7CisKKyAgICBnaW50IG5MaW5rcyA9IGF0a19oeXBlcnRleHRfZ2V0X25fbGlua3MoQVRL
X0hZUEVSVEVYVChwYXJhZ3JhcGgxKSk7CisgICAgZ19hc3NlcnRfY21waW50KG5MaW5rcywgPT0s
IDIpOworCisgICAgQXRrSHlwZXJsaW5rKiBoTGluayA9IGF0a19oeXBlcnRleHRfZ2V0X2xpbmso
QVRLX0hZUEVSVEVYVChwYXJhZ3JhcGgxKSwgMCk7CisgICAgZ19hc3NlcnQoQVRLX0hZUEVSTElO
SyhoTGluaykpOworICAgIEF0a09iamVjdCogaExpbmtPYmplY3QgPSBhdGtfaHlwZXJsaW5rX2dl
dF9vYmplY3QoaExpbmssIDApOworICAgIGdfYXNzZXJ0KEFUS19PQkpFQ1QoaExpbmtPYmplY3Qp
KTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGhMaW5rT2JqZWN0KSA9PSBBVEtf
Uk9MRV9DSEVDS19CT1gpOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9z
dGFydF9pbmRleChoTGluayksID09LCA4KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVy
bGlua19nZXRfZW5kX2luZGV4KGhMaW5rKSwgPT0sIDkpOworICAgIGdfYXNzZXJ0X2NtcGludChh
dGtfaHlwZXJsaW5rX2dldF9uX2FuY2hvcnMoaExpbmspLCA9PSwgMSk7CisgICAgZ19hc3NlcnRf
Y21wc3RyKGF0a19oeXBlcmxpbmtfZ2V0X3VyaShoTGluaywgMCksID09LCAwKTsKKworICAgIEF0
a1RleHQqIHBhcmFncmFwaDIgPSBBVEtfVEVYVChhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2No
aWxkKG9iamVjdCwgMSkpOworICAgIGdfYXNzZXJ0KEFUS19JU19IWVBFUlRFWFQocGFyYWdyYXBo
MikpOworCisgICAgbkxpbmtzID0gYXRrX2h5cGVydGV4dF9nZXRfbl9saW5rcyhBVEtfSFlQRVJU
RVhUKHBhcmFncmFwaDIpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQobkxpbmtzLCA9PSwgMSk7CisK
KyAgICBoTGluayA9IGF0a19oeXBlcnRleHRfZ2V0X2xpbmsoQVRLX0hZUEVSVEVYVChwYXJhZ3Jh
cGgyKSwgMCk7CisgICAgZ19hc3NlcnQoQVRLX0hZUEVSTElOSyhoTGluaykpOworICAgIGhMaW5r
T2JqZWN0ID0gYXRrX2h5cGVybGlua19nZXRfb2JqZWN0KGhMaW5rLCAwKTsKKyAgICBnX2Fzc2Vy
dChBVEtfT0JKRUNUKGhMaW5rT2JqZWN0KSk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRf
cm9sZShoTGlua09iamVjdCkgPT0gQVRLX1JPTEVfQ09NQk9fQk9YKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoYXRrX2h5cGVybGlua19nZXRfc3RhcnRfaW5kZXgoaExpbmspLCA9PSwgOCk7CisgICAg
Z19hc3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0X2VuZF9pbmRleChoTGluayksID09LCA5
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfbl9hbmNob3JzKGhMaW5r
KSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcHN0cihhdGtfaHlwZXJsaW5rX2dldF91cmkoaExp
bmssIDApLCA9PSwgMCk7CisKKyAgICBBdGtUZXh0KiBwYXJhZ3JhcGgzID0gQVRLX1RFWFQoYXRr
X29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDIpKTsKKyAgICBnX2Fzc2VydChB
VEtfSVNfSFlQRVJURVhUKHBhcmFncmFwaDMpKTsKKworICAgIG5MaW5rcyA9IGF0a19oeXBlcnRl
eHRfZ2V0X25fbGlua3MoQVRLX0hZUEVSVEVYVChwYXJhZ3JhcGgzKSk7CisgICAgZ19hc3NlcnRf
Y21waW50KG5MaW5rcywgPT0sIDEpOworCisgICAgaExpbmsgPSBhdGtfaHlwZXJ0ZXh0X2dldF9s
aW5rKEFUS19IWVBFUlRFWFQocGFyYWdyYXBoMyksIDApOworICAgIGdfYXNzZXJ0KEFUS19IWVBF
UkxJTksoaExpbmspKTsKKyAgICBoTGlua09iamVjdCA9IGF0a19oeXBlcmxpbmtfZ2V0X29iamVj
dChoTGluaywgMCk7CisgICAgZ19hc3NlcnQoQVRLX09CSkVDVChoTGlua09iamVjdCkpOworICAg
IGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoaExpbmtPYmplY3QpID09IEFUS19ST0xFX1BV
U0hfQlVUVE9OKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfc3RhcnRf
aW5kZXgoaExpbmspLCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtf
Z2V0X2VuZF9pbmRleChoTGluayksID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5
cGVybGlua19nZXRfbl9hbmNob3JzKGhMaW5rKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcHN0
cihhdGtfaHlwZXJsaW5rX2dldF91cmkoaExpbmssIDApLCA9PSwgMCk7CisKKyAgICBnX29iamVj
dF91bnJlZihwYXJhZ3JhcGgxKTsKKyAgICBnX29iamVjdF91bnJlZihwYXJhZ3JhcGgyKTsKKyAg
ICBnX29iamVjdF91bnJlZihwYXJhZ3JhcGgzKTsKKyAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3
KTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0dldEhlYWRlcnNJblRhYmxlKCkKK3sK
KyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJf
dmlld19uZXcoKSk7CisgICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7CisgICAgR3RrQWxs
b2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9OworICAgIGd0a193aWRnZXRf
c2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7CisgICAgd2Vi
a2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIGNvbnRlbnRzSW5UYWJsZVdpdGhIZWFk
ZXJzLCAwLCAwLCAwKTsKKworICAgIEF0a09iamVjdCogYXhXZWJWaWV3ID0gZ2V0V2ViQXJlYU9i
amVjdCh3ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChheFdlYlZpZXcpOworCisgICAgLyogQ2hlY2sg
dGFibGUgd2l0aCBib3RoIGNvbHVtbiBhbmQgcm93IGhlYWRlcnMuICovCisgICAgQXRrT2JqZWN0
KiB0YWJsZSA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoYXhXZWJWaWV3LCAwKTsK
KyAgICBnX2Fzc2VydCh0YWJsZSk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZSh0
YWJsZSkgPT0gQVRLX1JPTEVfVEFCTEUpOworCisgICAgQXRrT2JqZWN0KiBjb2xIZWFkZXIgPSBh
dGtfdGFibGVfZ2V0X2NvbHVtbl9oZWFkZXIoQVRLX1RBQkxFKHRhYmxlKSwgMCk7CisgICAgZ19h
c3NlcnQoY29sSGVhZGVyKTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGNvbEhl
YWRlcikgPT0gQVRLX1JPTEVfVEFCTEVfQ0VMTCk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9n
ZXRfaW5kZXhfaW5fcGFyZW50KGNvbEhlYWRlcikgPT0gMCk7CisKKyAgICBjb2xIZWFkZXIgPSBh
dGtfdGFibGVfZ2V0X2NvbHVtbl9oZWFkZXIoQVRLX1RBQkxFKHRhYmxlKSwgMSk7CisgICAgZ19h
c3NlcnQoY29sSGVhZGVyKTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGNvbEhl
YWRlcikgPT0gQVRLX1JPTEVfVEFCTEVfQ0VMTCk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9n
ZXRfaW5kZXhfaW5fcGFyZW50KGNvbEhlYWRlcikgPT0gMSk7CisKKyAgICBjb2xIZWFkZXIgPSBh
dGtfdGFibGVfZ2V0X2NvbHVtbl9oZWFkZXIoQVRLX1RBQkxFKHRhYmxlKSwgMik7CisgICAgZ19h
c3NlcnQoY29sSGVhZGVyKTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGNvbEhl
YWRlcikgPT0gQVRLX1JPTEVfVEFCTEVfQ0VMTCk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9n
ZXRfaW5kZXhfaW5fcGFyZW50KGNvbEhlYWRlcikgPT0gMik7CisKKyAgICBjb2xIZWFkZXIgPSBh
dGtfdGFibGVfZ2V0X2NvbHVtbl9oZWFkZXIoQVRLX1RBQkxFKHRhYmxlKSwgMyk7CisgICAgZ19h
c3NlcnQoY29sSGVhZGVyKTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGNvbEhl
YWRlcikgPT0gQVRLX1JPTEVfVEFCTEVfQ0VMTCk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9n
ZXRfaW5kZXhfaW5fcGFyZW50KGNvbEhlYWRlcikgPT0gMik7CisKKyAgICBBdGtPYmplY3QqIHJv
d0hlYWRlciA9IGF0a190YWJsZV9nZXRfcm93X2hlYWRlcihBVEtfVEFCTEUodGFibGUpLCAwKTsK
KyAgICBnX2Fzc2VydChyb3dIZWFkZXIpOworICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3Jv
bGUocm93SGVhZGVyKSA9PSBBVEtfUk9MRV9UQUJMRV9DRUxMKTsKKyAgICBnX2Fzc2VydChhdGtf
b2JqZWN0X2dldF9pbmRleF9pbl9wYXJlbnQocm93SGVhZGVyKSA9PSAwKTsKKworICAgIHJvd0hl
YWRlciA9IGF0a190YWJsZV9nZXRfcm93X2hlYWRlcihBVEtfVEFCTEUodGFibGUpLCAxKTsKKyAg
ICBnX2Fzc2VydChyb3dIZWFkZXIpOworICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUo
cm93SGVhZGVyKSA9PSBBVEtfUk9MRV9UQUJMRV9DRUxMKTsKKyAgICBnX2Fzc2VydChhdGtfb2Jq
ZWN0X2dldF9pbmRleF9pbl9wYXJlbnQocm93SGVhZGVyKSA9PSAzKTsKKworICAgIHJvd0hlYWRl
ciA9IGF0a190YWJsZV9nZXRfcm93X2hlYWRlcihBVEtfVEFCTEUodGFibGUpLCAyKTsKKyAgICBn
X2Fzc2VydChyb3dIZWFkZXIpOworICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUocm93
SGVhZGVyKSA9PSBBVEtfUk9MRV9UQUJMRV9DRUxMKTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0
X2dldF9pbmRleF9pbl9wYXJlbnQocm93SGVhZGVyKSA9PSA3KTsKKworICAgIHJvd0hlYWRlciA9
IGF0a190YWJsZV9nZXRfcm93X2hlYWRlcihBVEtfVEFCTEUodGFibGUpLCAzKTsKKyAgICBnX2Fz
c2VydChyb3dIZWFkZXIpOworICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUocm93SGVh
ZGVyKSA9PSBBVEtfUk9MRV9UQUJMRV9DRUxMKTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dl
dF9pbmRleF9pbl9wYXJlbnQocm93SGVhZGVyKSA9PSA3KTsKKworICAgIGdfb2JqZWN0X3VucmVm
KHRhYmxlKTsKKworICAgIC8qIENoZWNrIHRhYmxlIHdpdGggbm8gaGVhZGVycyBhdCBhbGwuICov
CisgICAgdGFibGUgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGF4V2ViVmlldywg
MSk7CisgICAgZ19hc3NlcnQodGFibGUpOworICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3Jv
bGUodGFibGUpID09IEFUS19ST0xFX1RBQkxFKTsKKworICAgIGNvbEhlYWRlciA9IGF0a190YWJs
ZV9nZXRfY29sdW1uX2hlYWRlcihBVEtfVEFCTEUodGFibGUpLCAwKTsKKyAgICBnX2Fzc2VydChj
b2xIZWFkZXIgPT0gMCk7CisKKyAgICBjb2xIZWFkZXIgPSBhdGtfdGFibGVfZ2V0X2NvbHVtbl9o
ZWFkZXIoQVRLX1RBQkxFKHRhYmxlKSwgMSk7CisgICAgZ19hc3NlcnQoY29sSGVhZGVyID09IDAp
OworCisgICAgcm93SGVhZGVyID0gYXRrX3RhYmxlX2dldF9yb3dfaGVhZGVyKEFUS19UQUJMRSh0
YWJsZSksIDApOworICAgIGdfYXNzZXJ0KHJvd0hlYWRlciA9PSAwKTsKKworICAgIHJvd0hlYWRl
ciA9IGF0a190YWJsZV9nZXRfcm93X2hlYWRlcihBVEtfVEFCTEUodGFibGUpLCAxKTsKKyAgICBn
X2Fzc2VydChyb3dIZWFkZXIgPT0gMCk7CisKKyAgICBnX29iamVjdF91bnJlZih0YWJsZSk7Cisg
ICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Cit9CisKK3N0YXRpYyBnaW50IGNvbXBBdGtBdHRy
aWJ1dGUoQXRrQXR0cmlidXRlKiBhMSwgQXRrQXR0cmlidXRlKiBhMikKK3sKKyAgICBnaW50IHN0
cmNtcFZhbCA9IGdfc3RyY21wMChhMS0+bmFtZSwgYTItPm5hbWUpOworICAgIGlmIChzdHJjbXBW
YWwpCisgICAgICAgIHJldHVybiBzdHJjbXBWYWw7CisgICAgcmV0dXJuIGdfc3RyY21wMChhMS0+
dmFsdWUsIGEyLT52YWx1ZSk7Cit9CisKK3N0YXRpYyBnaW50IGNvbXBBdGtBdHRyaWJ1dGVOYW1l
KEF0a0F0dHJpYnV0ZSogYTEsIEF0a0F0dHJpYnV0ZSogYTIpCit7CisgICAgcmV0dXJuIGdfc3Ry
Y21wMChhMS0+bmFtZSwgYTItPm5hbWUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gYXRrQXR0cmli
dXRlU2V0QXR0cmlidXRlTmFtZUhhc1ZhbHVlKEF0a0F0dHJpYnV0ZVNldCogc2V0LCBjb25zdCBn
Y2hhciogYXR0cmlidXRlTmFtZSwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIEF0a0F0dHJp
YnV0ZSBhdDsKKyAgICBhdC5uYW1lID0gKGdjaGFyKilhdHRyaWJ1dGVOYW1lOworICAgIEdTTGlz
dCogZWxlbWVudCA9IGdfc2xpc3RfZmluZF9jdXN0b20oc2V0LCAmYXQsIChHQ29tcGFyZUZ1bmMp
Y29tcEF0a0F0dHJpYnV0ZU5hbWUpOworICAgIHJldHVybiBlbGVtZW50ICYmICFnX3N0cmNtcDAo
KChBdGtBdHRyaWJ1dGUqKShlbGVtZW50LT5kYXRhKSktPnZhbHVlLCB2YWx1ZSk7Cit9CisKK3N0
YXRpYyBnYm9vbGVhbiBhdGtBdHRyaWJ1dGVTZXRDb250YWluc0F0dHJpYnV0ZU5hbWUoQXRrQXR0
cmlidXRlU2V0KiBzZXQsIGNvbnN0IGdjaGFyKiBhdHRyaWJ1dGVOYW1lKQoreworICAgIEF0a0F0
dHJpYnV0ZSBhdDsKKyAgICBhdC5uYW1lID0gKGdjaGFyKilhdHRyaWJ1dGVOYW1lOworICAgIHJl
dHVybiBnX3NsaXN0X2ZpbmRfY3VzdG9tKHNldCwgJmF0LCAoR0NvbXBhcmVGdW5jKWNvbXBBdGtB
dHRyaWJ1dGVOYW1lKSA/IHRydWUgOiBmYWxzZTsKK30KKworc3RhdGljIGdib29sZWFuIGF0a0F0
dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKEF0a0F0dHJpYnV0ZVNldCogc2V0LCBBdGtUZXh0
QXR0cmlidXRlIGF0dHJpYnV0ZSwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIHJldHVybiBh
dGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVOYW1lSGFzVmFsdWUoc2V0LCBhdGtfdGV4dF9hdHRyaWJ1
dGVfZ2V0X25hbWUoYXR0cmlidXRlKSwgdmFsdWUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gYXRr
QXR0cmlidXRlU2V0QXJlRXF1YWwoQXRrQXR0cmlidXRlU2V0KiBzZXQxLCBBdGtBdHRyaWJ1dGVT
ZXQqIHNldDIpCit7CisgICAgaWYgKCFzZXQxKQorICAgICAgICByZXR1cm4gIXNldDI7CisKKyAg
ICBzZXQxID0gZ19zbGlzdF9zb3J0KHNldDEsIChHQ29tcGFyZUZ1bmMpY29tcEF0a0F0dHJpYnV0
ZSk7CisgICAgc2V0MiA9IGdfc2xpc3Rfc29ydChzZXQyLCAoR0NvbXBhcmVGdW5jKWNvbXBBdGtB
dHRyaWJ1dGUpOworCisgICAgd2hpbGUgKHNldDEpIHsKKyAgICAgICAgaWYgKCFzZXQyIHx8IGNv
bXBBdGtBdHRyaWJ1dGUoc2V0MS0+ZGF0YSwgc2V0Mi0+ZGF0YSkpCisgICAgICAgICAgICByZXR1
cm4gRkFMU0U7CisKKyAgICAgICAgc2V0MSA9IHNldDEtPm5leHQ7CisgICAgICAgIHNldDIgPSBz
ZXQyLT5uZXh0OworICAgIH0KKworICAgIHJldHVybiAoIXNldDIpOworfQorCitzdGF0aWMgdm9p
ZCB0ZXN0V2Via2l0QXRrVGV4dEF0dHJpYnV0ZXMoKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBnX29i
amVjdF9yZWZfc2luayh3ZWJWaWV3KTsKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7
IDAsIDAsIDgwMCwgNjAwIH07CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURH
RVQod2ViVmlldyksICZhbGxvY2F0aW9uKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJp
bmcod2ViVmlldywgdGV4dFdpdGhBdHRyaWJ1dGVzLCAwLCAwLCAwKTsKKworICAgIEF0a09iamVj
dCogb2JqZWN0ID0gZ2V0V2ViQXJlYU9iamVjdCh3ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChvYmpl
Y3QpOworCisgICAgQXRrT2JqZWN0KiBjaGlsZCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVf
Y2hpbGQob2JqZWN0LCAwKTsKKyAgICBnX2Fzc2VydChjaGlsZCAmJiBBVEtfSVNfVEVYVChjaGls
ZCkpOworICAgIEF0a1RleHQqIGNoaWxkVGV4dCA9IEFUS19URVhUKGNoaWxkKTsKKworICAgIGdp
bnQgc3RhcnRPZmZzZXQ7CisgICAgZ2ludCBlbmRPZmZzZXQ7CisgICAgQXRrQXR0cmlidXRlU2V0
KiBzZXQxID0gYXRrX3RleHRfZ2V0X3J1bl9hdHRyaWJ1dGVzKGNoaWxkVGV4dCwgMCwgJnN0YXJ0
T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09
LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMTIpOworICAgIGdfYXNz
ZXJ0KGF0a0F0dHJpYnV0ZVNldEFyZUVxdWFsKHNldDEsIDApKTsKKworICAgIEF0a0F0dHJpYnV0
ZVNldCogc2V0MiA9IGF0a190ZXh0X2dldF9ydW5fYXR0cmlidXRlcyhjaGlsZFRleHQsIDE1LCAm
c3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOworICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNl
dCwgPT0sIDEyKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMTcpOworICAg
IGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDIsIEFUS19URVhU
X0FUVFJfU1RZTEUsICJpdGFsaWMiKSk7CisKKyAgICBBdGtBdHRyaWJ1dGVTZXQqIHNldDMgPSBh
dGtfdGV4dF9nZXRfcnVuX2F0dHJpYnV0ZXMoY2hpbGRUZXh0LCAxNywgJnN0YXJ0T2Zmc2V0LCAm
ZW5kT2Zmc2V0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAxNyk7Cisg
ICAgZ19hc3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0sIDQwKTsKKyAgICBnX2Fzc2VydChhdGtB
dHRyaWJ1dGVTZXRBdHRyaWJ1dGVIYXNWYWx1ZShzZXQzLCBBVEtfVEVYVF9BVFRSX1dFSUdIVCwg
IjcwMCIpKTsKKworICAgIEF0a0F0dHJpYnV0ZVNldCogc2V0NCA9IGF0a190ZXh0X2dldF9kZWZh
dWx0X2F0dHJpYnV0ZXMoY2hpbGRUZXh0KTsKKyAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRB
dHRyaWJ1dGVIYXNWYWx1ZShzZXQ0LCBBVEtfVEVYVF9BVFRSX1NUWUxFLCAibm9ybWFsIikpOwor
ICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDQsIEFUS19U
RVhUX0FUVFJfSlVTVElGSUNBVElPTiwgInJpZ2h0IikpOworICAgIGdfYXNzZXJ0KGF0a0F0dHJp
YnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDQsIEFUS19URVhUX0FUVFJfU0laRSwgIjE0Iikp
OworICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0MSk7CisgICAgYXRrX2F0dHJpYnV0ZV9z
ZXRfZnJlZShzZXQyKTsKKyAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHNldDMpOworICAgIGF0
a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0NCk7CisKKyAgICBnX29iamVjdF91bnJlZihjaGlsZCk7
CisgICAgY2hpbGQgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMSk7
CisgICAgZ19hc3NlcnQoY2hpbGQgJiYgQVRLX0lTX1RFWFQoY2hpbGQpKTsKKyAgICBjaGlsZFRl
eHQgPSBBVEtfVEVYVChjaGlsZCk7CisKKyAgICBzZXQxID0gYXRrX3RleHRfZ2V0X2RlZmF1bHRf
YXR0cmlidXRlcyhjaGlsZFRleHQpOworICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEF0dHJp
YnV0ZUhhc1ZhbHVlKHNldDEsIEFUS19URVhUX0FUVFJfRkFNSUxZX05BTUUsICJtb25vc3BhY2Ui
KSk7CisgICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlSGFzVmFsdWUoc2V0MSwg
QVRLX1RFWFRfQVRUUl9TVFlMRSwgIm5vcm1hbCIpKTsKKyAgICBnX2Fzc2VydChhdGtBdHRyaWJ1
dGVTZXRBdHRyaWJ1dGVIYXNWYWx1ZShzZXQxLCBBVEtfVEVYVF9BVFRSX1NUUklLRVRIUk9VR0gs
ICJmYWxzZSIpKTsKKyAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVIYXNWYWx1
ZShzZXQxLCBBVEtfVEVYVF9BVFRSX1dFSUdIVCwgIjQwMCIpKTsKKyAgICBnX2Fzc2VydChhdGtB
dHRyaWJ1dGVTZXRBdHRyaWJ1dGVIYXNWYWx1ZShzZXQxLCBBVEtfVEVYVF9BVFRSX0ZHX0NPTE9S
LCAiMTIwLDEyMSwxMjIiKSk7CisKKyAgICBzZXQyID0gYXRrX3RleHRfZ2V0X3J1bl9hdHRyaWJ1
dGVzKGNoaWxkVGV4dCwgNDMsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgZ19hc3Nl
cnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgNDMpOworICAgIGdfYXNzZXJ0X2NtcGludChlbmRP
ZmZzZXQsID09LCA4MCk7CisgICAgLyogQ2hlY2tzIHRoYXQgZGVmYXVsdCBhdHRyaWJ1dGVzIG9m
IHRleHQgYXJlIG5vdCByZXR1cm5lZCB3aGVuIGNhbGxlZCB0byBhdGtfdGV4dF9nZXRfcnVuX2F0
dHJpYnV0ZXMuICovCisgICAgZ19hc3NlcnQoIWF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1Zh
bHVlKHNldDIsIEFUS19URVhUX0FUVFJfRkdfQ09MT1IsICIxMjAsMTIxLDEyMiIpKTsKKyAgICBn
X2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVIYXNWYWx1ZShzZXQyLCBBVEtfVEVYVF9B
VFRSX1VOREVSTElORSwgInNpbmdsZSIpKTsKKyAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRB
dHRyaWJ1dGVIYXNWYWx1ZShzZXQyLCBBVEtfVEVYVF9BVFRSX0JHX0NPTE9SLCAiODAsODEsODIi
KSk7CisgICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJlZShzZXQxKTsKKyAgICBhdGtfYXR0cmlidXRl
X3NldF9mcmVlKHNldDIpOworICAgIGdfb2JqZWN0X3VucmVmKGNoaWxkKTsKKworICAgIGNoaWxk
ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDIpOworICAgIGdfYXNz
ZXJ0KGNoaWxkICYmIEFUS19JU19URVhUKGNoaWxkKSk7CisgICAgY2hpbGRUZXh0ID0gQVRLX1RF
WFQoY2hpbGQpOworCisgICAgc2V0MSA9IGF0a190ZXh0X2dldF9ydW5fYXR0cmlidXRlcyhjaGls
ZFRleHQsIDAsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgc2V0MiA9IGF0a190ZXh0
X2dldF9ydW5fYXR0cmlidXRlcyhjaGlsZFRleHQsIDMsICZzdGFydE9mZnNldCwgJmVuZE9mZnNl
dCk7CisgICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0QXJlRXF1YWwoc2V0MSwgc2V0MikpOwor
ICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0Mik7CisKKyAgICBzZXQyID0gYXRrX3RleHRf
Z2V0X3J1bl9hdHRyaWJ1dGVzKGNoaWxkVGV4dCwgMSwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0
KTsKKyAgICBzZXQzID0gYXRrX3RleHRfZ2V0X3J1bl9hdHRyaWJ1dGVzKGNoaWxkVGV4dCwgNSwg
JnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRB
cmVFcXVhbChzZXQyLCBzZXQzKSk7CisgICAgZ19hc3NlcnQoIWF0a0F0dHJpYnV0ZVNldEFyZUVx
dWFsKHNldDEsIHNldDIpKTsKKyAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHNldDMpOworCisg
ICAgc2V0MyA9IGF0a190ZXh0X2dldF9ydW5fYXR0cmlidXRlcyhjaGlsZFRleHQsIDIsICZzdGFy
dE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgc2V0NCA9IGF0a190ZXh0X2dldF9ydW5fYXR0cmli
dXRlcyhjaGlsZFRleHQsIDYsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgZ19hc3Nl
cnQoYXRrQXR0cmlidXRlU2V0QXJlRXF1YWwoc2V0Mywgc2V0NCkpOworICAgIGdfYXNzZXJ0KCFh
dGtBdHRyaWJ1dGVTZXRBcmVFcXVhbChzZXQxLCBzZXQzKSk7CisgICAgZ19hc3NlcnQoIWF0a0F0
dHJpYnV0ZVNldEFyZUVxdWFsKHNldDIsIHNldDMpKTsKKyAgICBhdGtfYXR0cmlidXRlX3NldF9m
cmVlKHNldDEpOworICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0Mik7CisgICAgYXRrX2F0
dHJpYnV0ZV9zZXRfZnJlZShzZXQzKTsKKyAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHNldDQp
OworICAgIGdfb2JqZWN0X3VucmVmKGNoaWxkKTsKKworICAgIGNoaWxkID0gYXRrX29iamVjdF9y
ZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDMpOworICAgIGdfYXNzZXJ0KGNoaWxkICYmIEFU
S19JU19URVhUKGNoaWxkKSk7CisgICAgY2hpbGRUZXh0ID0gQVRLX1RFWFQoY2hpbGQpOworICAg
IHNldDEgPSBhdGtfdGV4dF9nZXRfcnVuX2F0dHJpYnV0ZXMoY2hpbGRUZXh0LCAyNCwgJnN0YXJ0
T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09
LCAyMSk7CisgICAgZ19hc3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0sIDI1KTsKKyAgICBnX2Fz
c2VydChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVIYXNWYWx1ZShzZXQxLCBBVEtfVEVYVF9BVFRS
X1NUUklLRVRIUk9VR0gsICJ0cnVlIikpOworCisgICAgc2V0MiA9IGF0a190ZXh0X2dldF9ydW5f
YXR0cmlidXRlcyhjaGlsZFRleHQsIDI1LCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOworICAg
IGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDI1KTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoZW5kT2Zmc2V0LCA9PSwgMzApOworICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEFyZUVx
dWFsKHNldDIsIDApKTsKKworICAgIHNldDMgPSBhdGtfdGV4dF9nZXRfZGVmYXVsdF9hdHRyaWJ1
dGVzKGNoaWxkVGV4dCk7CisgICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlSGFz
VmFsdWUoc2V0MywgQVRLX1RFWFRfQVRUUl9KVVNUSUZJQ0FUSU9OLCAiY2VudGVyIikpOworICAg
IGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0MSk7CisgICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJl
ZShzZXQyKTsKKyAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHNldDMpOworCisgICAgZ19vYmpl
Y3RfdW5yZWYoY2hpbGQpOworfQorCitzdGF0aWMgZ2NoYXIqIHRleHRTZWxlY3Rpb25DaGFuZ2Vk
UmVzdWx0ID0gMDsKKworc3RhdGljIHZvaWQgdGV4dFNlbGVjdGlvbkNoYW5nZWRDYWxsYmFjayhB
dGtUZXh0KiB0ZXh0LCBncG9pbnRlciBkYXRhKQoreworICAgIGdfYXNzZXJ0KEFUS19JU19URVhU
KHRleHQpKTsKKworICAgIGdfZnJlZSh0ZXh0U2VsZWN0aW9uQ2hhbmdlZFJlc3VsdCk7CisgICAg
QXRrUm9sZSByb2xlID0gYXRrX29iamVjdF9nZXRfcm9sZShBVEtfT0JKRUNUKHRleHQpKTsKKyAg
ICBpbnQgc3RhcnRPZmZzZXQgPSAwOworICAgIGludCBlbmRPZmZzZXQgPSAwOworICAgIGF0a190
ZXh0X2dldF9zZWxlY3Rpb24oQVRLX1RFWFQodGV4dCksIDAsICZzdGFydE9mZnNldCwgJmVuZE9m
ZnNldCk7CisgICAgdGV4dFNlbGVjdGlvbkNoYW5nZWRSZXN1bHQgPSBnX3N0cmR1cF9wcmludGYo
Inwlc3wlZHwlZHwiLCBhdGtfcm9sZV9nZXRfbmFtZShyb2xlKSwgc3RhcnRPZmZzZXQsIGVuZE9m
ZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtUZXh0U2VsZWN0aW9ucygpCit7
CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2Vi
X3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOworICAgIEd0a0Fs
bG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgODAwLCA2MDAgfTsKKyAgICBndGtfd2lkZ2V0
X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOworICAgIHdl
YmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LCB0ZXh0Rm9yU2VsZWN0aW9ucywgMCwg
MCwgMCk7CisKKyAgICBBdGtPYmplY3QqIG9iamVjdCA9IGdldFdlYkFyZWFPYmplY3Qod2ViVmll
dyk7CisgICAgZ19hc3NlcnQob2JqZWN0KTsKKworICAgIEF0a1RleHQqIHBhcmFncmFwaDEgPSBB
VEtfVEVYVChhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMCkpOworICAg
IGdfYXNzZXJ0KEFUS19JU19URVhUKHBhcmFncmFwaDEpKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0
KHBhcmFncmFwaDEsICJ0ZXh0LXNlbGVjdGlvbi1jaGFuZ2VkIiwgR19DQUxMQkFDSyh0ZXh0U2Vs
ZWN0aW9uQ2hhbmdlZENhbGxiYWNrKSwgMCk7CisKKyAgICBBdGtUZXh0KiBwYXJhZ3JhcGgyID0g
QVRLX1RFWFQoYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDEpKTsKKyAg
ICBnX2Fzc2VydChBVEtfSVNfVEVYVChwYXJhZ3JhcGgyKSk7CisgICAgZ19zaWduYWxfY29ubmVj
dChwYXJhZ3JhcGgyLCAidGV4dC1zZWxlY3Rpb24tY2hhbmdlZCIsIEdfQ0FMTEJBQ0sodGV4dFNl
bGVjdGlvbkNoYW5nZWRDYWxsYmFjayksIDApOworCisgICAgQXRrVGV4dCogbGluayA9IEFUS19U
RVhUKGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoQVRLX09CSkVDVChwYXJhZ3JhcGgy
KSwgMCkpOworICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKGxpbmspKTsKKworICAgIEF0a09iamVj
dCogbGlzdCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAyKTsKKyAg
ICBnX2Fzc2VydChBVEtfT0JKRUNUKGxpc3QpKTsKKworICAgIEF0a1RleHQqIGxpc3RJdGVtID0g
QVRLX1RFWFQoYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChsaXN0LCAwKSk7CisgICAg
Z19hc3NlcnQoQVRLX0lTX1RFWFQobGlzdEl0ZW0pKTsKKworICAgIC8qIEZpcnN0IHBhcmFncmFw
aCAoc2ltcGxlIHRleHQpLiAqLworCisgICAgLyogQmFzaWMgaW5pdGlhbCBjaGVja3MuICovCisg
ICAgZ19hc3NlcnRfY21waW50KGF0a190ZXh0X2dldF9uX3NlbGVjdGlvbnMocGFyYWdyYXBoMSks
ID09LCAwKTsKKworICAgIGdpbnQgc3RhcnRPZmZzZXQ7CisgICAgZ2ludCBlbmRPZmZzZXQ7Cisg
ICAgZ2NoYXIqIHNlbGVjdGVkVGV4dCA9IGF0a190ZXh0X2dldF9zZWxlY3Rpb24ocGFyYWdyYXBo
MSwgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc3Rh
cnRPZmZzZXQsID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMCk7
CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkVGV4dCwgPT0sIDApOworICAgIGdfZnJlZSAo
c2VsZWN0ZWRUZXh0KTsKKworICAgIC8qIFRyeSByZW1vdmluZyBhIG5vbiBleGlzdGluZyAoeWV0
KSBzZWxlY3Rpb24uICovCisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gYXRrX3RleHRfcmVtb3ZlX3Nl
bGVjdGlvbihwYXJhZ3JhcGgxLCAwKTsKKyAgICBnX2Fzc2VydCghcmVzdWx0KTsKKworICAgIC8q
IFRyeSBzZXR0aW5nIGEgMC1jaGFyIHNlbGVjdGlvbi4gKi8KKyAgICByZXN1bHQgPSBhdGtfdGV4
dF9zZXRfc2VsZWN0aW9uKHBhcmFncmFwaDEsIDAsIDUsIDUpOworICAgIGdfYXNzZXJ0KHJlc3Vs
dCk7CisKKyAgICAvKiBNYWtlIGEgc2VsZWN0aW9uIGFuZCB0ZXN0IGl0LiAqLworICAgIHJlc3Vs
dCA9IGF0a190ZXh0X3NldF9zZWxlY3Rpb24ocGFyYWdyYXBoMSwgMCwgNSwgMjUpOworICAgIGdf
YXNzZXJ0KHJlc3VsdCk7CisgICAgZ19hc3NlcnRfY21waW50KGF0a190ZXh0X2dldF9uX3NlbGVj
dGlvbnMocGFyYWdyYXBoMSksID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGV4dFNlbGVj
dGlvbkNoYW5nZWRSZXN1bHQsID09LCAifHBhcmFncmFwaHw1fDI1fCIpOworICAgIHNlbGVjdGVk
VGV4dCA9IGF0a190ZXh0X2dldF9zZWxlY3Rpb24ocGFyYWdyYXBoMSwgMCwgJnN0YXJ0T2Zmc2V0
LCAmZW5kT2Zmc2V0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCA1KTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMjUpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cihzZWxlY3RlZFRleHQsID09LCAiYWdyYXBoIHdpdGggcGxhaW4gdGUiKTsKKyAgICBnX2Zy
ZWUgKHNlbGVjdGVkVGV4dCk7CisKKyAgICAvKiBUcnkgcmVtb3ZpbmcgdGhlIHNlbGVjdGlvbiBm
cm9tIG90aGVyIEF0a1RleHQgb2JqZWN0IChzaG91bGQgZmFpbCkuICovCisgICAgcmVzdWx0ID0g
YXRrX3RleHRfcmVtb3ZlX3NlbGVjdGlvbihwYXJhZ3JhcGgyLCAwKTsKKyAgICBnX2Fzc2VydCgh
cmVzdWx0KTsKKworICAgIC8qIFJlbW92ZSB0aGUgc2VsZWN0aW9uIGFuZCB0ZXN0IGV2ZXJ5dGhp
bmcgYWdhaW4uICovCisgICAgcmVzdWx0ID0gYXRrX3RleHRfcmVtb3ZlX3NlbGVjdGlvbihwYXJh
Z3JhcGgxLCAwKTsKKyAgICBnX2Fzc2VydChyZXN1bHQpOworICAgIGdfYXNzZXJ0X2NtcGludChh
dGtfdGV4dF9nZXRfbl9zZWxlY3Rpb25zKHBhcmFncmFwaDEpLCA9PSwgMCk7CisgICAgc2VsZWN0
ZWRUZXh0ID0gYXRrX3RleHRfZ2V0X3NlbGVjdGlvbihwYXJhZ3JhcGgxLCAwLCAmc3RhcnRPZmZz
ZXQsICZlbmRPZmZzZXQpOworICAgIC8qIE5vdyBvZmZzZXRzIHNob3VsZCBiZSB0aGUgc2FtZSwg
c2V0IHRvIHRoZSBsYXN0IHBvc2l0aW9uIG9mIHRoZSBjYXJldC4gKi8KKyAgICBnX2Fzc2VydF9j
bXBpbnQoc3RhcnRPZmZzZXQsID09LCBlbmRPZmZzZXQpOworICAgIGdfYXNzZXJ0X2NtcGludChz
dGFydE9mZnNldCwgPT0sIDI1KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwg
MjUpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZFRleHQsID09LCAwKTsKKyAgICBnX2Zy
ZWUgKHNlbGVjdGVkVGV4dCk7CisKKyAgICAvKiBTZWNvbmQgcGFyYWdyYXBoICh0ZXh0ICsgbGlu
ayArIHRleHQpLiAqLworCisgICAgLyogU2V0IGEgc2VsZWN0aW9uIHBhcnRpYWxseSBjb3Zlcmlu
ZyB0aGUgbGluayBhbmQgdGVzdCBpdC4gKi8KKyAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfc2Vs
ZWN0aW9uKHBhcmFncmFwaDIsIDAsIDcsIDIxKTsKKyAgICBnX2Fzc2VydChyZXN1bHQpOworCisg
ICAgLyogVGVzdCB0aGUgcGFyYWdyYXBoIGZpcnN0LiAqLworICAgIGdfYXNzZXJ0X2NtcGludChh
dGtfdGV4dF9nZXRfbl9zZWxlY3Rpb25zKHBhcmFncmFwaDIpLCA9PSwgMSk7CisgICAgc2VsZWN0
ZWRUZXh0ID0gYXRrX3RleHRfZ2V0X3NlbGVjdGlvbihwYXJhZ3JhcGgyLCAwLCAmc3RhcnRPZmZz
ZXQsICZlbmRPZmZzZXQpOworICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDcp
OworICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCAyMSk7CisgICAgZ19hc3NlcnRf
Y21wc3RyKHNlbGVjdGVkVGV4dCwgPT0sICJyYXBoIHdpdGggYSBsaSIpOworICAgIGdfZnJlZSAo
c2VsZWN0ZWRUZXh0KTsKKworICAgIC8qIE5vdyB0ZXN0IGp1c3QgdGhlIGxpbmsuICovCisgICAg
Z19hc3NlcnRfY21waW50KGF0a190ZXh0X2dldF9uX3NlbGVjdGlvbnMobGluayksID09LCAxKTsK
KyAgICBzZWxlY3RlZFRleHQgPSBhdGtfdGV4dF9nZXRfc2VsZWN0aW9uKGxpbmssIDAsICZzdGFy
dE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9
PSwgMCk7CisgICAgZ19hc3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0sIDQpOworICAgIGdfYXNz
ZXJ0X2NtcHN0cihzZWxlY3RlZFRleHQsID09LCAiYSBsaSIpOworICAgIGdfZnJlZSAoc2VsZWN0
ZWRUZXh0KTsKKworICAgIC8qIE1ha2UgYSBzZWxlY3Rpb24gYWZ0ZXIgdGhlIGxpbmsgYW5kIGNo
ZWNrIHNlbGVjdGlvbiBmb3IgdGhlIHdob2xlIHBhcmFncmFwaC4gKi8KKyAgICByZXN1bHQgPSBh
dGtfdGV4dF9zZXRfc2VsZWN0aW9uKHBhcmFncmFwaDIsIDAsIDI3LCAzNyk7CisgICAgZ19hc3Nl
cnQocmVzdWx0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX3RleHRfZ2V0X25fc2VsZWN0aW9u
cyhwYXJhZ3JhcGgyKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0U2VsZWN0aW9u
Q2hhbmdlZFJlc3VsdCwgPT0sICJ8cGFyYWdyYXBofDI3fDM3fCIpOworICAgIHNlbGVjdGVkVGV4
dCA9IGF0a190ZXh0X2dldF9zZWxlY3Rpb24ocGFyYWdyYXBoMiwgMCwgJnN0YXJ0T2Zmc2V0LCAm
ZW5kT2Zmc2V0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAyNyk7Cisg
ICAgZ19hc3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0sIDM3KTsKKyAgICBnX2Fzc2VydF9jbXBz
dHIoc2VsZWN0ZWRUZXh0LCA9PSwgInRoZSBtaWRkbGUiKTsKKyAgICBnX2ZyZWUgKHNlbGVjdGVk
VGV4dCk7CisKKyAgICAvKiBSZW1vdmUgc2VsZWN0aW9ucyBhbmQgdGV4dCBldmVyeXRoaW5nIGFn
YWluLiAqLworICAgIHJlc3VsdCA9IGF0a190ZXh0X3JlbW92ZV9zZWxlY3Rpb24ocGFyYWdyYXBo
MiwgMCk7CisgICAgZ19hc3NlcnQocmVzdWx0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX3Rl
eHRfZ2V0X25fc2VsZWN0aW9ucyhwYXJhZ3JhcGgyKSwgPT0sIDApOworICAgIHNlbGVjdGVkVGV4
dCA9IGF0a190ZXh0X2dldF9zZWxlY3Rpb24ocGFyYWdyYXBoMiwgMCwgJnN0YXJ0T2Zmc2V0LCAm
ZW5kT2Zmc2V0KTsKKyAgICAvKiBOb3cgb2Zmc2V0cyBzaG91bGQgYmUgdGhlIHNhbWUgKG5vIHNl
bGVjdGlvbikuICovCisgICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgZW5kT2Zm
c2V0KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRUZXh0LCA9PSwgMCk7CisgICAgZ19m
cmVlIChzZWxlY3RlZFRleHQpOworCisgICAgZ19hc3NlcnRfY21waW50KGF0a190ZXh0X2dldF9u
X3NlbGVjdGlvbnMobGluayksID09LCAwKTsKKyAgICBzZWxlY3RlZFRleHQgPSBhdGtfdGV4dF9n
ZXRfc2VsZWN0aW9uKGxpbmssIDAsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgLyog
Tm93IG9mZnNldHMgc2hvdWxkIGJlIHRoZSBzYW1lIChubyBzZWxlY3Rpb24pLiAqLworICAgIGdf
YXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIGVuZE9mZnNldCk7CisgICAgZ19hc3NlcnRf
Y21wc3RyKHNlbGVjdGVkVGV4dCwgPT0sIDApOworICAgIGdfZnJlZSAoc2VsZWN0ZWRUZXh0KTsK
KworICAgIC8qIExpc3QgaXRlbSAqLworCisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9s
ZShsaXN0KSA9PSBBVEtfUk9MRV9MSVNUKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX29iamVj
dF9nZXRfbl9hY2Nlc3NpYmxlX2NoaWxkcmVuKGxpc3QpLCA9PSwgMSk7CisKKyAgICAvKiBJdCdz
IG5vdCBwb3NzaWJsZSB0byBzZWxlY3QgdGV4dCBpbnNpZGUgYW4gaXRlbSdzIG1hcmtlci4gKi8K
KyAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfc2VsZWN0aW9uIChsaXN0SXRlbSwgMCwgMCwgOSk7
CisgICAgZ19hc3NlcnQoIXJlc3VsdCk7CisgICAgcmVzdWx0ID0gYXRrX3RleHRfc2V0X3NlbGVj
dGlvbiAobGlzdEl0ZW0sIDAsIDksIDEpOworICAgIGdfYXNzZXJ0KCFyZXN1bHQpOworCisgICAg
LyogSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHNlbGVjdCB0ZXh0IGluc2lkZSBhbiBpdGVtJ3Mg
dGV4dC4gKi8KKyAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfc2VsZWN0aW9uIChsaXN0SXRlbSwg
MCwgMywgOSk7CisgICAgZ19hc3NlcnQocmVzdWx0KTsKKworICAgIGdfYXNzZXJ0X2NtcGludChh
dGtfdGV4dF9nZXRfbl9zZWxlY3Rpb25zKGxpc3RJdGVtKSwgPT0sIDEpOworICAgIHNlbGVjdGVk
VGV4dCA9IGF0a190ZXh0X2dldF9zZWxlY3Rpb24obGlzdEl0ZW0sIDAsICZzdGFydE9mZnNldCwg
JmVuZE9mZnNldCk7CisgICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMyk7Cisg
ICAgZ19hc3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0sIDkpOworICAgIGdfYXNzZXJ0X2NtcHN0
cihzZWxlY3RlZFRleHQsID09LCAiQSBsaXN0Iik7CisgICAgZ19mcmVlIChzZWxlY3RlZFRleHQp
OworCisgICAgZ19mcmVlKHRleHRTZWxlY3Rpb25DaGFuZ2VkUmVzdWx0KTsKKworICAgIGdfb2Jq
ZWN0X3VucmVmKHBhcmFncmFwaDEpOworICAgIGdfb2JqZWN0X3VucmVmKHBhcmFncmFwaDIpOwor
ICAgIGdfb2JqZWN0X3VucmVmKGxpbmspOworICAgIGdfb2JqZWN0X3VucmVmKGxpc3QpOworICAg
IGdfb2JqZWN0X3VucmVmKGxpc3RJdGVtKTsKKyAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsK
K30KKworc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0dldEV4dGVudHMoKQoreworICAgIFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygp
KTsKKyAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKKyAgICBHdGtBbGxvY2F0aW9uIGFs
bG9jYXRpb24gPSB7IDAsIDAsIDgwMCwgNjAwIH07CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9j
YXRlKEdUS19XSURHRVQod2ViVmlldyksICZhbGxvY2F0aW9uKTsKKyAgICB3ZWJraXRfd2ViX3Zp
ZXdfbG9hZF9zdHJpbmcod2ViVmlldywgY2VudGVyZWRDb250ZW50cywgMCwgMCwgMCk7CisKKyAg
ICBBdGtPYmplY3QqIG9iamVjdCA9IGdldFdlYkFyZWFPYmplY3Qod2ViVmlldyk7CisgICAgZ19h
c3NlcnQob2JqZWN0KTsKKworICAgIEF0a1RleHQqIHNob3J0VGV4dDEgPSBBVEtfVEVYVChhdGtf
b2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMCkpOworICAgIGdfYXNzZXJ0KEFU
S19JU19URVhUKHNob3J0VGV4dDEpKTsKKyAgICBBdGtUZXh0KiBsb25nVGV4dCA9IEFUS19URVhU
KGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAxKSk7CisgICAgZ19hc3Nl
cnQoQVRLX0lTX1RFWFQobG9uZ1RleHQpKTsKKyAgICBBdGtUZXh0KiBzaG9ydFRleHQyID0gQVRL
X1RFWFQoYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDIpKTsKKyAgICBn
X2Fzc2VydChBVEtfSVNfVEVYVChzaG9ydFRleHQyKSk7CisgICAgQXRrVGV4dCogbXVsdGlsaW5l
VGV4dCA9IEFUS19URVhUKGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAz
KSk7CisgICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQobXVsdGlsaW5lVGV4dCkpOworCisgICAgLyog
U3RhcnQgd2l0aCB3aW5kb3cgZXh0ZW50cy4gKi8KKyAgICBBdGtUZXh0UmVjdGFuZ2xlIHNsaW5l
X3dpbmRvdzEsIHNsaW5lX3dpbmRvdzIsIGxsaW5lX3dpbmRvdywgbWxpbmVfd2luZG93OworICAg
IGF0a190ZXh0X2dldF9yYW5nZV9leHRlbnRzKHNob3J0VGV4dDEsIDAsIDEwLCBBVEtfWFlfV0lO
RE9XLCAmc2xpbmVfd2luZG93MSk7CisgICAgYXRrX3RleHRfZ2V0X3JhbmdlX2V4dGVudHMobG9u
Z1RleHQsIDAsIDQ0LCBBVEtfWFlfV0lORE9XLCAmbGxpbmVfd2luZG93KTsKKyAgICBhdGtfdGV4
dF9nZXRfcmFuZ2VfZXh0ZW50cyhzaG9ydFRleHQyLCAwLCAxMCwgQVRLX1hZX1dJTkRPVywgJnNs
aW5lX3dpbmRvdzIpOworICAgIGF0a190ZXh0X2dldF9yYW5nZV9leHRlbnRzKG11bHRpbGluZVRl
eHQsIDAsIDYwLCBBVEtfWFlfV0lORE9XLCAmbWxpbmVfd2luZG93KTsKKworICAgIC8qIENoZWNr
IHZlcnRpY2FsIGxpbmUgcG9zaXRpb24uICovCisgICAgZ19hc3NlcnRfY21waW50KHNsaW5lX3dp
bmRvdzEueSArIHNsaW5lX3dpbmRvdzEuaGVpZ2h0LCA8PSwgbGxpbmVfd2luZG93LnkpOworICAg
IGdfYXNzZXJ0X2NtcGludChsbGluZV93aW5kb3cueSArIGxsaW5lX3dpbmRvdy5oZWlnaHQgKyBz
bGluZV93aW5kb3cyLmhlaWdodCwgPD0sIG1saW5lX3dpbmRvdy55KTsKKworICAgIC8qIFBhcmFn
cmFwaHMgMSBhbmQgMyBoYXZlIGlkZW50aWNhbCB0ZXh0IGFuZCBhbGlnbm1lbnQuICovCisgICAg
Z19hc3NlcnRfY21waW50KHNsaW5lX3dpbmRvdzEueCwgPT0sIHNsaW5lX3dpbmRvdzIueCk7Cisg
ICAgZ19hc3NlcnRfY21waW50KHNsaW5lX3dpbmRvdzEud2lkdGgsID09LCBzbGluZV93aW5kb3cy
LndpZHRoKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc2xpbmVfd2luZG93MS5oZWlnaHQsID09LCBz
bGluZV93aW5kb3cyLmhlaWdodCk7CisKKyAgICAvKiBBbGwgbGluZXMgc2hvdWxkIGJlIHRoZSBz
YW1lIGhlaWdodDsgbGluZSAyIGlzIHRoZSB3aWRlc3QgbGluZS4gKi8KKyAgICBnX2Fzc2VydF9j
bXBpbnQoc2xpbmVfd2luZG93MS5oZWlnaHQsID09LCBsbGluZV93aW5kb3cuaGVpZ2h0KTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoc2xpbmVfd2luZG93MS53aWR0aCwgPCwgbGxpbmVfd2luZG93Lndp
ZHRoKTsKKworICAgIC8qIE1ha2Ugc3VyZSB0aGUgY2hhcmFjdGVyIGV4dGVudHMgaml2ZSB3aXRo
IHRoZSByYW5nZSBleHRlbnRzLiAqLworICAgIGdpbnQgeDsKKyAgICBnaW50IHk7CisgICAgZ2lu
dCB3aWR0aDsKKyAgICBnaW50IGhlaWdodDsKKworICAgIC8qIEZpcnN0IHBhcmFncmFwaCAoc2hv
cnQgdGV4dCkuICovCisgICAgYXRrX3RleHRfZ2V0X2NoYXJhY3Rlcl9leHRlbnRzKHNob3J0VGV4
dDEsIDAsICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0LCBBVEtfWFlfV0lORE9XKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoeCwgPT0sIHNsaW5lX3dpbmRvdzEueCk7CisgICAgZ19hc3NlcnRfY21waW50
KHksID09LCBzbGluZV93aW5kb3cxLnkpOworICAgIGdfYXNzZXJ0X2NtcGludChoZWlnaHQsID09
LCBzbGluZV93aW5kb3cxLmhlaWdodCk7CisKKyAgICBhdGtfdGV4dF9nZXRfY2hhcmFjdGVyX2V4
dGVudHMoc2hvcnRUZXh0MSwgOSwgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQsIEFUS19YWV9XSU5E
T1cpOworICAgIGdfYXNzZXJ0X2NtcGludCh4LCA9PSwgc2xpbmVfd2luZG93MS54ICsgc2xpbmVf
d2luZG93MS53aWR0aCAtIHdpZHRoKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoeSwgPT0sIHNsaW5l
X3dpbmRvdzEueSk7CisgICAgZ19hc3NlcnRfY21waW50KGhlaWdodCwgPT0sIHNsaW5lX3dpbmRv
dzEuaGVpZ2h0KTsKKworICAgIC8qIFNlY29uZCBwYXJhZ3JhcGggKGxvbmcgdGV4dCkuICovCisg
ICAgYXRrX3RleHRfZ2V0X2NoYXJhY3Rlcl9leHRlbnRzKGxvbmdUZXh0LCAwLCAmeCwgJnksICZ3
aWR0aCwgJmhlaWdodCwgQVRLX1hZX1dJTkRPVyk7CisgICAgZ19hc3NlcnRfY21waW50KHgsID09
LCBsbGluZV93aW5kb3cueCk7CisgICAgZ19hc3NlcnRfY21waW50KHksID09LCBsbGluZV93aW5k
b3cueSk7CisgICAgZ19hc3NlcnRfY21waW50KGhlaWdodCwgPT0sIGxsaW5lX3dpbmRvdy5oZWln
aHQpOworCisgICAgYXRrX3RleHRfZ2V0X2NoYXJhY3Rlcl9leHRlbnRzKGxvbmdUZXh0LCA0Mywg
JngsICZ5LCAmd2lkdGgsICZoZWlnaHQsIEFUS19YWV9XSU5ET1cpOworICAgIGdfYXNzZXJ0X2Nt
cGludCh4LCA9PSwgbGxpbmVfd2luZG93LnggKyBsbGluZV93aW5kb3cud2lkdGggLSB3aWR0aCk7
CisgICAgZ19hc3NlcnRfY21waW50KHksID09LCBsbGluZV93aW5kb3cueSk7CisgICAgZ19hc3Nl
cnRfY21waW50KGhlaWdodCwgPT0sIGxsaW5lX3dpbmRvdy5oZWlnaHQpOworCisgICAgLyogVGhp
cmQgcGFyYWdyYXBoIChzaG9ydCB0ZXh0KS4gKi8KKyAgICBhdGtfdGV4dF9nZXRfY2hhcmFjdGVy
X2V4dGVudHMoc2hvcnRUZXh0MiwgMCwgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQsIEFUS19YWV9X
SU5ET1cpOworICAgIGdfYXNzZXJ0X2NtcGludCh4LCA9PSwgc2xpbmVfd2luZG93Mi54KTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoeSwgPT0sIHNsaW5lX3dpbmRvdzIueSk7CisgICAgZ19hc3NlcnRf
Y21waW50KGhlaWdodCwgPT0sIHNsaW5lX3dpbmRvdzIuaGVpZ2h0KTsKKworICAgIGF0a190ZXh0
X2dldF9jaGFyYWN0ZXJfZXh0ZW50cyhzaG9ydFRleHQyLCA5LCAmeCwgJnksICZ3aWR0aCwgJmhl
aWdodCwgQVRLX1hZX1dJTkRPVyk7CisgICAgZ19hc3NlcnRfY21waW50KHgsID09LCBzbGluZV93
aW5kb3cyLnggKyBzbGluZV93aW5kb3cyLndpZHRoIC0gd2lkdGgpOworICAgIGdfYXNzZXJ0X2Nt
cGludCh5LCA9PSwgc2xpbmVfd2luZG93Mi55KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoaGVpZ2h0
LCA9PSwgc2xpbmVfd2luZG93Mi5oZWlnaHQpOworCisgICAgLyogRm91ciBwYXJhZ3JhcGggKDMg
bGluZXMgbXVsdGktbGluZSB0ZXh0KS4gKi8KKyAgICBhdGtfdGV4dF9nZXRfY2hhcmFjdGVyX2V4
dGVudHMobXVsdGlsaW5lVGV4dCwgMCwgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQsIEFUS19YWV9X
SU5ET1cpOworICAgIGdfYXNzZXJ0X2NtcGludCh4LCA9PSwgbWxpbmVfd2luZG93LngpOworICAg
IGdfYXNzZXJ0X2NtcGludCh5LCA9PSwgbWxpbmVfd2luZG93LnkpOworICAgIGdfYXNzZXJ0X2Nt
cGludCgzICogaGVpZ2h0LCA9PSwgbWxpbmVfd2luZG93LmhlaWdodCk7CisKKyAgICBhdGtfdGV4
dF9nZXRfY2hhcmFjdGVyX2V4dGVudHMobXVsdGlsaW5lVGV4dCwgNTksICZ4LCAmeSwgJndpZHRo
LCAmaGVpZ2h0LCBBVEtfWFlfV0lORE9XKTsKKyAgICAvKiBMYXN0IGxpbmUgd29uJ3QgZmlsbCB0
aGUgd2hvbGUgd2lkdGggb2YgdGhlIHJlY3RhbmdsZS4gKi8KKyAgICBnX2Fzc2VydF9jbXBpbnQo
eCwgPD0sIG1saW5lX3dpbmRvdy54ICsgbWxpbmVfd2luZG93LndpZHRoIC0gd2lkdGgpOworICAg
IGdfYXNzZXJ0X2NtcGludCh5LCA9PSwgbWxpbmVfd2luZG93LnkgKyBtbGluZV93aW5kb3cuaGVp
Z2h0IC0gaGVpZ2h0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoaGVpZ2h0LCA8PSwgbWxpbmVfd2lu
ZG93LmhlaWdodCk7CisKKyAgICAvKiBDaGVjayB0aGF0IGV4dGVudCBmb3IgYSBmdWxsIGxpbmUg
YXJlIHRoZSBzYW1lIGhlaWdodCB0aGFuIGZvcgorICAgICAgIGEgcGFydGlhbCBzZWN0aW9uIG9m
IHRoZSBzYW1lIGxpbmUgKi8KKyAgICBnaW50IHN0YXJ0T2Zmc2V0OworICAgIGdpbnQgZW5kT2Zm
c2V0OworCisjaWYgIUFUS19DSEVDS19WRVJTSU9OKDIsIDEwLCAwKQorICAgIGdjaGFyKiB0ZXh0
ID0gYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0KG11bHRpbGluZVRleHQsIDAsIEFUS19URVhU
X0JPVU5EQVJZX0xJTkVfU1RBUlQsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgZ19m
cmVlKHRleHQpOworI2Vsc2UKKyAgICBnY2hhciogdGV4dCA9IGF0a190ZXh0X2dldF9zdHJpbmdf
YXRfb2Zmc2V0KG11bHRpbGluZVRleHQsIDAsIEFUS19URVhUX0dSQU5VTEFSSVRZX0xJTkUsICZz
dGFydE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgZ19mcmVlKHRleHQpOworI2VuZGlmCisKKyAg
ICBBdGtUZXh0UmVjdGFuZ2xlIGZsaW5lX3dpbmRvdzsKKyAgICBBdGtUZXh0UmVjdGFuZ2xlIGFm
bGluZV93aW5kb3c7CisgICAgYXRrX3RleHRfZ2V0X3JhbmdlX2V4dGVudHMobXVsdGlsaW5lVGV4
dCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgQVRLX1hZX1dJTkRPVywgJmZsaW5lX3dpbmRvdyk7
CisgICAgYXRrX3RleHRfZ2V0X3JhbmdlX2V4dGVudHMobXVsdGlsaW5lVGV4dCwgc3RhcnRPZmZz
ZXQsIGVuZE9mZnNldCAtIDEsIEFUS19YWV9XSU5ET1csICZhZmxpbmVfd2luZG93KTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoZmxpbmVfd2luZG93LngsID09LCBhZmxpbmVfd2luZG93LngpOworICAg
IGdfYXNzZXJ0X2NtcGludChmbGluZV93aW5kb3cueSwgPT0sIGFmbGluZV93aW5kb3cueSk7Cisg
ICAgZ19hc3NlcnRfY21waW50KGZsaW5lX3dpbmRvdy5oZWlnaHQsID09LCBhZmxpbmVfd2luZG93
LmhlaWdodCk7CisKKyAgICBnX29iamVjdF91bnJlZihzaG9ydFRleHQxKTsKKyAgICBnX29iamVj
dF91bnJlZihzaG9ydFRleHQyKTsKKyAgICBnX29iamVjdF91bnJlZihsb25nVGV4dCk7CisgICAg
Z19vYmplY3RfdW5yZWYobXVsdGlsaW5lVGV4dCk7CisgICAgZ19vYmplY3RfdW5yZWYod2ViVmll
dyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtMYXlvdXRBbmREYXRhVGFibGVzKCkK
K3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93
ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7CisgICAgR3Rr
QWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9OworICAgIGd0a193aWRn
ZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7CisgICAg
d2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIGxheW91dEFuZERhdGFUYWJsZXMs
IDAsIDAsIDApOworCisgICAgQXRrT2JqZWN0KiBvYmplY3QgPSBnZXRXZWJBcmVhT2JqZWN0KHdl
YlZpZXcpOworICAgIGdfYXNzZXJ0KG9iamVjdCk7CisKKyAgICAvKiBDaGVjayB0aGUgbm9uLWxh
eW91dCB0YWJsZSAoZGF0YSB0YWJsZSkuICovCisKKyAgICBBdGtPYmplY3QqIHRhYmxlMSA9IGF0
a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAwKTsKKyAgICBnX2Fzc2VydChB
VEtfSVNfVEFCTEUodGFibGUxKSk7CisgICAgQXRrQXR0cmlidXRlU2V0KiBzZXQxID0gYXRrX29i
amVjdF9nZXRfYXR0cmlidXRlcyh0YWJsZTEpOworICAgIGdfYXNzZXJ0KHNldDEpOworICAgIGdf
YXNzZXJ0KCFhdGtBdHRyaWJ1dGVTZXRDb250YWluc0F0dHJpYnV0ZU5hbWUoc2V0MSwgImxheW91
dC1ndWVzcyIpKTsKKyAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHNldDEpOworCisgICAgLyog
Q2hlY2sgdGhlIGxheW91dCB0YWJsZS4gKi8KKworICAgIEF0a09iamVjdCogdGFibGUyID0gYXRr
X29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDEpOworICAgIGdfYXNzZXJ0KEFU
S19JU19UQUJMRSh0YWJsZTIpKTsKKyAgICBBdGtBdHRyaWJ1dGVTZXQqIHNldDIgPSBhdGtfb2Jq
ZWN0X2dldF9hdHRyaWJ1dGVzKHRhYmxlMik7CisgICAgZ19hc3NlcnQoc2V0Mik7CisgICAgZ19h
c3NlcnQoYXRrQXR0cmlidXRlU2V0Q29udGFpbnNBdHRyaWJ1dGVOYW1lKHNldDIsICJsYXlvdXQt
Z3Vlc3MiKSk7CisgICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlTmFtZUhhc1Zh
bHVlKHNldDIsICJsYXlvdXQtZ3Vlc3MiLCAidHJ1ZSIpKTsKKyAgICBhdGtfYXR0cmlidXRlX3Nl
dF9mcmVlKHNldDIpOworCisgICAgZ19vYmplY3RfdW5yZWYodGFibGUxKTsKKyAgICBnX29iamVj
dF91bnJlZih0YWJsZTIpOworICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOworfQorCitzdGF0
aWMgdm9pZCB0ZXN0V2Via2l0QXRrTGlua3NXaXRoSW5saW5lSW1hZ2VzKCkKK3sKKyAgICBXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXco
KSk7CisgICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7CisgICAgR3RrQWxsb2NhdGlvbiBh
bGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9OworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxv
Y2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7CisgICAgd2Via2l0X3dlYl92
aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIGxpbmtzV2l0aElubGluZUltYWdlcywgMCwgMCwgMCk7
CisKKyAgICBBdGtPYmplY3QqIG9iamVjdCA9IGdldFdlYkFyZWFPYmplY3Qod2ViVmlldyk7Cisg
ICAgZ19hc3NlcnQob2JqZWN0KTsKKworICAgIC8qIEZpcnN0IHBhcmFncmFwaCAobGluayBhdCB0
aGUgYmVnaW5uaW5nKS4gKi8KKyAgICBBdGtPYmplY3QqIHBhcmFncmFwaCA9IGF0a19vYmplY3Rf
cmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAwKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfVEVY
VChwYXJhZ3JhcGgpKTsKKyAgICBnaW50IHN0YXJ0T2Zmc2V0OworICAgIGdpbnQgZW5kT2Zmc2V0
OworCisjaWYgIUFUS19DSEVDS19WRVJTSU9OKDIsIDEwLCAwKQorICAgIGdjaGFyKiB0ZXh0ID0g
YXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0KEFUS19URVhUKHBhcmFncmFwaCksIDAsIEFUS19U
RVhUX0JPVU5EQVJZX0xJTkVfU1RBUlQsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAg
Z19hc3NlcnQodGV4dCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09LCAiZm9vIGJhciBi
YXoiKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAwKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMTEpOworICAgIGdfZnJlZSh0ZXh0KTsKKyNlbHNl
CisgICAgZ2NoYXIqIHRleHQgPSBhdGtfdGV4dF9nZXRfc3RyaW5nX2F0X29mZnNldChBVEtfVEVY
VChwYXJhZ3JhcGgpLCAwLCBBVEtfVEVYVF9HUkFOVUxBUklUWV9MSU5FLCAmc3RhcnRPZmZzZXQs
ICZlbmRPZmZzZXQpOworICAgIGdfYXNzZXJ0KHRleHQpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0
ZXh0LCA9PSwgImZvbyBiYXIgYmF6Iik7CisgICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0
LCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0sIDExKTsKKyAgICBn
X2ZyZWUodGV4dCk7CisjZW5kaWYKKworICAgIGdfb2JqZWN0X3VucmVmKHBhcmFncmFwaCk7CisK
KyAgICAvKiBTZWNvbmQgcGFyYWdyYXBoIChsaW5rIGluIHRoZSBtaWRkbGUpLiAqLworICAgIHBh
cmFncmFwaCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAxKTsKKyAg
ICBnX2Fzc2VydChBVEtfSVNfVEVYVChwYXJhZ3JhcGgpKTsKKworI2lmICFBVEtfQ0hFQ0tfVkVS
U0lPTigyLCAxMCwgMCkKKyAgICB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0KEFU
S19URVhUKHBhcmFncmFwaCksIDAsIEFUS19URVhUX0JPVU5EQVJZX0xJTkVfU1RBUlQsICZzdGFy
dE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgZ19hc3NlcnQodGV4dCk7CisgICAgZ19hc3NlcnRf
Y21wc3RyKHRleHQsID09LCAiZm9vIGJhciBiYXoiKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc3Rh
cnRPZmZzZXQsID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMTEp
OworICAgIGdfZnJlZSh0ZXh0KTsKKyNlbHNlCisgICAgdGV4dCA9IGF0a190ZXh0X2dldF9zdHJp
bmdfYXRfb2Zmc2V0KEFUS19URVhUKHBhcmFncmFwaCksIDAsIEFUS19URVhUX0dSQU5VTEFSSVRZ
X0xJTkUsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgZ19hc3NlcnQodGV4dCk7Cisg
ICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09LCAiZm9vIGJhciBiYXoiKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zm
c2V0LCA9PSwgMTEpOworICAgIGdfZnJlZSh0ZXh0KTsKKyNlbmRpZgorCisgICAgZ19vYmplY3Rf
dW5yZWYocGFyYWdyYXBoKTsKKworICAgIC8qIFRoaXJkIHBhcmFncmFwaCAobGluayBhdCB0aGUg
ZW5kKS4gKi8KKyAgICBwYXJhZ3JhcGggPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxk
KG9iamVjdCwgMik7CisgICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQocGFyYWdyYXBoKSk7CisKKyNp
ZiAhQVRLX0NIRUNLX1ZFUlNJT04oMiwgMTAsIDApCisgICAgdGV4dCA9IGF0a190ZXh0X2dldF90
ZXh0X2F0X29mZnNldChBVEtfVEVYVChwYXJhZ3JhcGgpLCAwLCBBVEtfVEVYVF9CT1VOREFSWV9M
SU5FX1NUQVJULCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOworICAgIGdfYXNzZXJ0KHRleHQp
OworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwgImZvbyBiYXIgYmF6Iik7CisgICAgZ19h
c3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21waW50KGVu
ZE9mZnNldCwgPT0sIDExKTsKKyAgICBnX2ZyZWUodGV4dCk7CisjZWxzZQorICAgIHRleHQgPSBh
dGtfdGV4dF9nZXRfc3RyaW5nX2F0X29mZnNldChBVEtfVEVYVChwYXJhZ3JhcGgpLCAwLCBBVEtf
VEVYVF9HUkFOVUxBUklUWV9MSU5FLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOworICAgIGdf
YXNzZXJ0KHRleHQpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwgImZvbyBiYXIgYmF6
Iik7CisgICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMCk7CisgICAgZ19hc3Nl
cnRfY21waW50KGVuZE9mZnNldCwgPT0sIDExKTsKKyAgICBnX2ZyZWUodGV4dCk7CisjZW5kaWYK
KworICAgIGdfb2JqZWN0X3VucmVmKHBhcmFncmFwaCk7CisgICAgZ19vYmplY3RfdW5yZWYod2Vi
Vmlldyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtIeXBlcnRleHRBbmRIeXBlcmxp
bmtzKCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdl
YmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7Cisg
ICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9OworICAgIGd0
a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7
CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIGh5cGVydGV4dEFuZEh5
cGVybGlua3MsIDAsIDAsIDApOworCisgICAgQXRrT2JqZWN0KiBvYmplY3QgPSBnZXRXZWJBcmVh
T2JqZWN0KHdlYlZpZXcpOworICAgIGdfYXNzZXJ0KG9iamVjdCk7CisKKyAgICBBdGtPYmplY3Qq
IHBhcmFncmFwaDEgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMCk7
CisgICAgZ19hc3NlcnQoQVRLX09CSkVDVChwYXJhZ3JhcGgxKSk7CisgICAgZ19hc3NlcnQoYXRr
X29iamVjdF9nZXRfcm9sZShwYXJhZ3JhcGgxKSA9PSBBVEtfUk9MRV9QQVJBR1JBUEgpOworICAg
IGdfYXNzZXJ0KEFUS19JU19IWVBFUlRFWFQocGFyYWdyYXBoMSkpOworCisgICAgLyogTm8gbGlu
a3MgaW4gdGhlIGZpcnN0IHBhcmFncmFwaC4gKi8KKyAgICBnaW50IG5MaW5rcyA9IGF0a19oeXBl
cnRleHRfZ2V0X25fbGlua3MoQVRLX0hZUEVSVEVYVChwYXJhZ3JhcGgxKSk7CisgICAgZ19hc3Nl
cnRfY21waW50KG5MaW5rcywgPT0sIDApOworCisgICAgQXRrT2JqZWN0KiBwYXJhZ3JhcGgyID0g
YXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDEpOworICAgIGdfYXNzZXJ0
KEFUS19PQkpFQ1QocGFyYWdyYXBoMikpOworICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3Jv
bGUocGFyYWdyYXBoMikgPT0gQVRLX1JPTEVfUEFSQUdSQVBIKTsKKyAgICBnX2Fzc2VydChBVEtf
SVNfSFlQRVJURVhUKHBhcmFncmFwaDIpKTsKKworICAgIC8qIENoZWNrIGxpbmtzIGluIHRoZSBz
ZWNvbmQgcGFyYWdyYXBoLgorICAgICAgIG5MaW5rcyA9IGF0a19oeXBlcnRleHRfZ2V0X25fbGlu
a3MoQVRLX0hZUEVSVEVYVChwYXJhZ3JhcGgyKSk7CisgICAgICAgZ19hc3NlcnRfY21waW50KG5M
aW5rcywgPT0sIDMpOyAqLworCisgICAgQXRrSHlwZXJsaW5rKiBoTGluazEgPSBhdGtfaHlwZXJ0
ZXh0X2dldF9saW5rKEFUS19IWVBFUlRFWFQocGFyYWdyYXBoMiksIDApOworICAgIGdfYXNzZXJ0
KEFUS19IWVBFUkxJTksoaExpbmsxKSk7CisgICAgQXRrT2JqZWN0KiBoTGlua09iamVjdDEgPSBh
dGtfaHlwZXJsaW5rX2dldF9vYmplY3QoaExpbmsxLCAwKTsKKyAgICBnX2Fzc2VydChBVEtfT0JK
RUNUKGhMaW5rT2JqZWN0MSkpOworICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoaExp
bmtPYmplY3QxKSA9PSBBVEtfUk9MRV9MSU5LKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5
cGVybGlua19nZXRfc3RhcnRfaW5kZXgoaExpbmsxKSwgPT0sIDApOworICAgIGdfYXNzZXJ0X2Nt
cGludChhdGtfaHlwZXJsaW5rX2dldF9lbmRfaW5kZXgoaExpbmsxKSwgPT0sIDYpOworICAgIGdf
YXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9uX2FuY2hvcnMoaExpbmsxKSwgPT0sIDEp
OworICAgIGdfYXNzZXJ0X2NtcHN0cihhdGtfaHlwZXJsaW5rX2dldF91cmkoaExpbmsxLCAwKSwg
PT0sICJodHRwOi8vZm9vLmJhci5iYXovIik7CisKKyAgICBBdGtIeXBlcmxpbmsqIGhMaW5rMiA9
IGF0a19oeXBlcnRleHRfZ2V0X2xpbmsoQVRLX0hZUEVSVEVYVChwYXJhZ3JhcGgyKSwgMSk7Cisg
ICAgZ19hc3NlcnQoQVRLX0hZUEVSTElOSyhoTGluazIpKTsKKyAgICBBdGtPYmplY3QqIGhMaW5r
T2JqZWN0MiA9IGF0a19oeXBlcmxpbmtfZ2V0X29iamVjdChoTGluazIsIDApOworICAgIGdfYXNz
ZXJ0KEFUS19PQkpFQ1QoaExpbmtPYmplY3QyKSk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9n
ZXRfcm9sZShoTGlua09iamVjdDIpID09IEFUS19ST0xFX0xJTkspOworICAgIGdfYXNzZXJ0X2Nt
cGludChhdGtfaHlwZXJsaW5rX2dldF9zdGFydF9pbmRleChoTGluazIpLCA9PSwgMTIpOworICAg
IGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9lbmRfaW5kZXgoaExpbmsyKSwgPT0s
IDMyKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfbl9hbmNob3JzKGhM
aW5rMiksID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoYXRrX2h5cGVybGlua19nZXRfdXJp
KGhMaW5rMiwgMCksID09LCAiaHR0cDovL2Jhci5iYXouZm9vLyIpOworCisgICAgQXRrSHlwZXJs
aW5rKiBoTGluazMgPSBhdGtfaHlwZXJ0ZXh0X2dldF9saW5rKEFUS19IWVBFUlRFWFQocGFyYWdy
YXBoMiksIDIpOworICAgIGdfYXNzZXJ0KEFUS19IWVBFUkxJTksoaExpbmszKSk7CisgICAgQXRr
T2JqZWN0KiBoTGlua09iamVjdDMgPSBhdGtfaHlwZXJsaW5rX2dldF9vYmplY3QoaExpbmszLCAw
KTsKKyAgICBnX2Fzc2VydChBVEtfT0JKRUNUKGhMaW5rT2JqZWN0MykpOworICAgIGdfYXNzZXJ0
KGF0a19vYmplY3RfZ2V0X3JvbGUoaExpbmtPYmplY3QzKSA9PSBBVEtfUk9MRV9MSU5LKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfc3RhcnRfaW5kZXgoaExpbmszKSwg
PT0sIDY1KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfZW5kX2luZGV4
KGhMaW5rMyksID09LCA3NSk7CisgICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0
X25fYW5jaG9ycyhoTGluazMpLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGF0a19oeXBl
cmxpbmtfZ2V0X3VyaShoTGluazMsIDApLCA9PSwgImh0dHA6Ly9iYXouZm9vLmJhci8iKTsKKwor
ICAgIEF0a09iamVjdCogbGlzdCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2Jq
ZWN0LCAyKTsKKyAgICBnX2Fzc2VydChBVEtfT0JKRUNUKGxpc3QpKTsKKyAgICBnX2Fzc2VydChh
dGtfb2JqZWN0X2dldF9yb2xlKGxpc3QpID09IEFUS19ST0xFX0xJU1QpOworICAgIGdfYXNzZXJ0
X2NtcGludChhdGtfb2JqZWN0X2dldF9uX2FjY2Vzc2libGVfY2hpbGRyZW4obGlzdCksID09LCAx
KTsKKworICAgIEF0a09iamVjdCogbGlzdEl0ZW0gPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxl
X2NoaWxkKGxpc3QsIDApOworICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKGxpc3RJdGVtKSk7Cisg
ICAgZ19hc3NlcnQoQVRLX0lTX0hZUEVSVEVYVChsaXN0SXRlbSkpOworCisgICAgQXRrSHlwZXJs
aW5rKiBoTGlua0luTGlzdEl0ZW0gPSBhdGtfaHlwZXJ0ZXh0X2dldF9saW5rKEFUS19IWVBFUlRF
WFQobGlzdEl0ZW0pLCAwKTsKKyAgICBnX2Fzc2VydChBVEtfSFlQRVJMSU5LKGhMaW5rSW5MaXN0
SXRlbSkpOworICAgIEF0a09iamVjdCogaExpbmtPYmplY3QgPSBhdGtfaHlwZXJsaW5rX2dldF9v
YmplY3QoaExpbmtJbkxpc3RJdGVtLCAwKTsKKyAgICBnX2Fzc2VydChBVEtfT0JKRUNUKGhMaW5r
T2JqZWN0KSk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShoTGlua09iamVjdCkg
PT0gQVRLX1JPTEVfTElOSyk7CisgICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0
X3N0YXJ0X2luZGV4KGhMaW5rSW5MaXN0SXRlbSksID09LCAyMCk7CisgICAgZ19hc3NlcnRfY21w
aW50KGF0a19oeXBlcmxpbmtfZ2V0X2VuZF9pbmRleChoTGlua0luTGlzdEl0ZW0pLCA9PSwgNDMp
OworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9uX2FuY2hvcnMoaExpbmtJ
bkxpc3RJdGVtKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcHN0cihhdGtfaHlwZXJsaW5rX2dl
dF91cmkoaExpbmtJbkxpc3RJdGVtLCAwKSwgPT0sICJodHRwOi8vZm9vLmJhci5iYXovIik7CisK
KyAgICAvKiBGaW5hbGx5IGNoZWNrIHRoZSBBdGtBY3Rpb24gaW50ZXJmYWNlIGZvciBhIGdpdmVu
IEF0a0h5cGVybGluay4gKi8KKyAgICBnX2Fzc2VydChBVEtfSVNfQUNUSU9OKGhMaW5rMSkpOwor
ICAgIGdfYXNzZXJ0X2NtcGludChhdGtfYWN0aW9uX2dldF9uX2FjdGlvbnMoQVRLX0FDVElPTiho
TGluazEpKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcHN0cihhdGtfYWN0aW9uX2dldF9rZXli
aW5kaW5nKEFUS19BQ1RJT04oaExpbmsxKSwgMCksID09LCAiIik7CisgICAgZ19hc3NlcnRfY21w
c3RyKGF0a19hY3Rpb25fZ2V0X25hbWUoQVRLX0FDVElPTihoTGluazEpLCAwKSwgPT0sICJqdW1w
Iik7CisgICAgZ19hc3NlcnQoYXRrX2FjdGlvbl9kb19hY3Rpb24oQVRLX0FDVElPTihoTGluazEp
LCAwKSk7CisKKyAgICBnX29iamVjdF91bnJlZihwYXJhZ3JhcGgxKTsKKyAgICBnX29iamVjdF91
bnJlZihwYXJhZ3JhcGgyKTsKKyAgICBnX29iamVjdF91bnJlZihsaXN0KTsKKyAgICBnX29iamVj
dF91bnJlZihsaXN0SXRlbSk7CisgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Cit9CisKK3N0
YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtMaXN0c09mSXRlbXMoKQoreworICAgIFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAg
ICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRp
b24gPSB7IDAsIDAsIDgwMCwgNjAwIH07CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdU
S19XSURHRVQod2ViVmlldyksICZhbGxvY2F0aW9uKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9h
ZF9zdHJpbmcod2ViVmlldywgbGlzdHNPZkl0ZW1zLCAwLCAwLCAwKTsKKworICAgIEF0a09iamVj
dCogb2JqZWN0ID0gZ2V0V2ViQXJlYU9iamVjdCh3ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChvYmpl
Y3QpOworCisgICAgLyogVW5vcmRlcmVkIGxpc3QuICovCisKKyAgICBBdGtPYmplY3QqIHVMaXN0
ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDApOworICAgIGdfYXNz
ZXJ0KEFUS19PQkpFQ1QodUxpc3QpKTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xl
KHVMaXN0KSA9PSBBVEtfUk9MRV9MSVNUKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX29iamVj
dF9nZXRfbl9hY2Nlc3NpYmxlX2NoaWxkcmVuKHVMaXN0KSwgPT0sIDMpOworCisgICAgQXRrT2Jq
ZWN0KiBpdGVtMSA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQodUxpc3QsIDApOwor
ICAgIEF0a09iamVjdCogaXRlbTIgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKHVM
aXN0LCAxKTsKKyAgICBBdGtPYmplY3QqIGl0ZW0zID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJs
ZV9jaGlsZCh1TGlzdCwgMik7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX29iamVjdF9nZXRf
bl9hY2Nlc3NpYmxlX2NoaWxkcmVuKGl0ZW0xKSwgPT0sIDApOworICAgIGdfYXNzZXJ0X2NtcGlu
dChhdGtfb2JqZWN0X2dldF9uX2FjY2Vzc2libGVfY2hpbGRyZW4oaXRlbTIpLCA9PSwgMSk7Cisg
ICAgZ19hc3NlcnRfY21waW50KGF0a19vYmplY3RfZ2V0X25fYWNjZXNzaWJsZV9jaGlsZHJlbihp
dGVtMyksID09LCAxKTsKKworICAgIGdfb2JqZWN0X3VucmVmKGl0ZW0xKTsKKyAgICBnX29iamVj
dF91bnJlZihpdGVtMik7CisgICAgZ19vYmplY3RfdW5yZWYoaXRlbTMpOworCisgICAgLyogT3Jk
ZXJlZCBsaXN0LiAqLworCisgICAgQXRrT2JqZWN0KiBvTGlzdCA9IGF0a19vYmplY3RfcmVmX2Fj
Y2Vzc2libGVfY2hpbGQob2JqZWN0LCAxKTsKKyAgICBnX2Fzc2VydChBVEtfT0JKRUNUKG9MaXN0
KSk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShvTGlzdCkgPT0gQVRLX1JPTEVf
TElTVCk7CisgICAgZ19hc3NlcnRfY21waW50KGF0a19vYmplY3RfZ2V0X25fYWNjZXNzaWJsZV9j
aGlsZHJlbihvTGlzdCksID09LCAzKTsKKworICAgIGl0ZW0xID0gYXRrX29iamVjdF9yZWZfYWNj
ZXNzaWJsZV9jaGlsZChvTGlzdCwgMCk7CisgICAgaXRlbTIgPSBhdGtfb2JqZWN0X3JlZl9hY2Nl
c3NpYmxlX2NoaWxkKG9MaXN0LCAxKTsKKyAgICBpdGVtMyA9IGF0a19vYmplY3RfcmVmX2FjY2Vz
c2libGVfY2hpbGQob0xpc3QsIDIpOworCisgICAgZ19hc3NlcnRfY21waW50KGF0a19vYmplY3Rf
Z2V0X25fYWNjZXNzaWJsZV9jaGlsZHJlbihpdGVtMSksID09LCAwKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoYXRrX29iamVjdF9nZXRfbl9hY2Nlc3NpYmxlX2NoaWxkcmVuKGl0ZW0yKSwgPT0sIDEp
OworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfb2JqZWN0X2dldF9uX2FjY2Vzc2libGVfY2hpbGRy
ZW4oaXRlbTMpLCA9PSwgMSk7CisKKyAgICBnX29iamVjdF91bnJlZihpdGVtMSk7CisgICAgZ19v
YmplY3RfdW5yZWYoaXRlbTIpOworICAgIGdfb2JqZWN0X3VucmVmKGl0ZW0zKTsKKworICAgIGdf
b2JqZWN0X3VucmVmKHVMaXN0KTsKKyAgICBnX29iamVjdF91bnJlZihvTGlzdCk7CisgICAgZ19v
YmplY3RfdW5yZWYod2ViVmlldyk7Cit9CisKK3R5cGVkZWYgZW51bSB7CisgIFRFWFRfQ0hBTkdF
X0lOU0VSVCA9IDEsCisgIFRFWFRfQ0hBTkdFX1JFTU9WRSA9IDIKK30gVGV4dENoYW5nZVR5cGU7
CisKK3N0YXRpYyBnY2hhciogdGV4dENoYW5nZWRSZXN1bHQgPSAwOworCitzdGF0aWMgdm9pZCB0
ZXh0Q2hhbmdlZENiKEF0a1RleHQqIHRleHQsIGdpbnQgcG9zLCBnaW50IGxlbiwgZ2NoYXIqIG1v
ZGlmaWVkVGV4dCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBnX2Fzc2VydCh0ZXh0ICYmIEFUS19J
U19PQkpFQ1QodGV4dCkpOworCisgICAgVGV4dENoYW5nZVR5cGUgdHlwZSA9IEdQT0lOVEVSX1RP
X0lOVChkYXRhKTsKKyAgICBnX2ZyZWUodGV4dENoYW5nZWRSZXN1bHQpOworICAgIHRleHRDaGFu
Z2VkUmVzdWx0ID0gZ19zdHJkdXBfcHJpbnRmKCJ8JWR8JWR8JWR8JyVzJ3wiLCB0eXBlLCBwb3Ms
IGxlbiwgbW9kaWZpZWRUZXh0KTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a1RleHRD
aGFuZ2VkTm90aWZpY2F0aW9ucygpCit7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdF
QktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3JlZl9z
aW5rKHdlYlZpZXcpOworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgODAw
LCA2MDAgfTsKKyAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3
KSwgJmFsbG9jYXRpb24pOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3
LCBmb3JtV2l0aFRleHRJbnB1dHMsIDAsIDAsIDApOworCisgICAgQXRrT2JqZWN0KiBvYmplY3Qg
PSBnZXRXZWJBcmVhT2JqZWN0KHdlYlZpZXcpOworICAgIGdfYXNzZXJ0KG9iamVjdCk7CisKKyAg
ICBBdGtPYmplY3QqIGZvcm0gPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVj
dCwgMCk7CisgICAgZ19hc3NlcnQoQVRLX0lTX09CSkVDVChmb3JtKSk7CisKKyAgICAvKiBGaXJz
dCBjaGVjayBub3JtYWwgdGV4dCBlbnRyaWVzLiAqLworICAgIEF0a09iamVjdCogdGV4dEVudHJ5
ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmb3JtLCAwKTsKKyAgICBnX2Fzc2Vy
dChBVEtfSVNfRURJVEFCTEVfVEVYVCh0ZXh0RW50cnkpKTsKKyAgICBnX2Fzc2VydChhdGtfb2Jq
ZWN0X2dldF9yb2xlKEFUS19PQkpFQ1QodGV4dEVudHJ5KSkgPT0gQVRLX1JPTEVfRU5UUlkpOwor
CisgICAgZ19zaWduYWxfY29ubmVjdCh0ZXh0RW50cnksICJ0ZXh0LWluc2VydCIsCisgICAgICAg
ICAgICAgICAgICAgICBHX0NBTExCQUNLKHRleHRDaGFuZ2VkQ2IpLAorICAgICAgICAgICAgICAg
ICAgICAgR0lOVF9UT19QT0lOVEVSKFRFWFRfQ0hBTkdFX0lOU0VSVCkpOworICAgIGdfc2lnbmFs
X2Nvbm5lY3QodGV4dEVudHJ5LCAidGV4dC1yZW1vdmUiLAorICAgICAgICAgICAgICAgICAgICAg
R19DQUxMQkFDSyh0ZXh0Q2hhbmdlZENiKSwKKyAgICAgICAgICAgICAgICAgICAgIEdJTlRfVE9f
UE9JTlRFUihURVhUX0NIQU5HRV9SRU1PVkUpKTsKKworICAgIGdpbnQgcG9zID0gMDsKKyAgICBh
dGtfZWRpdGFibGVfdGV4dF9pbnNlcnRfdGV4dChBVEtfRURJVEFCTEVfVEVYVCh0ZXh0RW50cnkp
LCAiZm9vIGJhciBiYXoiLCAxMSwgJnBvcyk7CisgICAgY2hhciogdGV4dCA9IGF0a190ZXh0X2dl
dF90ZXh0KEFUS19URVhUKHRleHRFbnRyeSksIDAsIC0xKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIo
dGV4dCwgPT0sICJmb28gYmFyIGJheiIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0Q2hhbmdl
ZFJlc3VsdCwgPT0sICJ8MXwwfDExfCdmb28gYmFyIGJheid8Iik7CisgICAgZ19mcmVlKHRleHQp
OworCisgICAgYXRrX2VkaXRhYmxlX3RleHRfZGVsZXRlX3RleHQoQVRLX0VESVRBQkxFX1RFWFQo
dGV4dEVudHJ5KSwgNCwgNyk7CisgICAgdGV4dCA9IGF0a190ZXh0X2dldF90ZXh0KEFUS19URVhU
KHRleHRFbnRyeSksIDAsIC0xKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGV4dCwgPT0sICJmb28g
IGJheiIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0Q2hhbmdlZFJlc3VsdCwgPT0sICJ8Mnw0
fDN8J2Jhcid8Iik7CisgICAgZ19mcmVlKHRleHQpOworCisgICAgcG9zID0gNDsKKyAgICBhdGtf
ZWRpdGFibGVfdGV4dF9pbnNlcnRfdGV4dChBVEtfRURJVEFCTEVfVEVYVCh0ZXh0RW50cnkpLCAi
cXV4IHF1dXggdG9iZWlnbm9yZWQiLCA4LCAmcG9zKTsKKyAgICB0ZXh0ID0gYXRrX3RleHRfZ2V0
X3RleHQoQVRLX1RFWFQodGV4dEVudHJ5KSwgMCwgLTEpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0
ZXh0LCA9PSwgImZvbyBxdXggcXV1eCBiYXoiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGV4dENo
YW5nZWRSZXN1bHQsID09LCAifDF8NHw4fCdxdXggcXV1eCd8Iik7CisgICAgZ19mcmVlKHRleHQp
OworCisgICAgLyogTm93IGNoZWNrIGZvciBwYXNzd29yZCBlbnRyaWVzLiAqLworICAgIEF0a09i
amVjdCogcGFzc3dvcmRFbnRyeSA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoZm9y
bSwgMSk7CisgICAgZ19hc3NlcnQoQVRLX0lTX0VESVRBQkxFX1RFWFQocGFzc3dvcmRFbnRyeSkp
OworICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoQVRLX09CSkVDVChwYXNzd29yZEVu
dHJ5KSkgPT0gQVRLX1JPTEVfUEFTU1dPUkRfVEVYVCk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0
KHBhc3N3b3JkRW50cnksICJ0ZXh0LWluc2VydCIsCisgICAgICAgICAgICAgICAgICAgICBHX0NB
TExCQUNLKHRleHRDaGFuZ2VkQ2IpLAorICAgICAgICAgICAgICAgICAgICAgR0lOVF9UT19QT0lO
VEVSKFRFWFRfQ0hBTkdFX0lOU0VSVCkpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QocGFzc3dvcmRF
bnRyeSwgInRleHQtcmVtb3ZlIiwKKyAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sodGV4
dENoYW5nZWRDYiksCisgICAgICAgICAgICAgICAgICAgICBHSU5UX1RPX1BPSU5URVIoVEVYVF9D
SEFOR0VfUkVNT1ZFKSk7CisKKyAgICBwb3MgPSAwOworICAgIC8qIEEgc2luZ2xlIGJ1bGxldCBj
aGFyYWN0ZXIgaXMgJ1wzNDJcMjAwXDI0MicgKi8KKyAgICBhdGtfZWRpdGFibGVfdGV4dF9pbnNl
cnRfdGV4dChBVEtfRURJVEFCTEVfVEVYVChwYXNzd29yZEVudHJ5KSwgImZvb2JhciIsIDYsICZw
b3MpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0Q2hhbmdlZFJlc3VsdCwgPT0sICJ8MXwwfDZ8
J1wzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAw
XDI0MlwzNDJcMjAwXDI0Mid8Iik7CisgICAgdGV4dCA9IGF0a190ZXh0X2dldF90ZXh0KEFUS19U
RVhUKHBhc3N3b3JkRW50cnkpLCAwLCAtMSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09
LCAiXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0Mlwy
MDBcMjQyXDM0MlwyMDBcMjQyIik7CisgICAgZ19mcmVlKHRleHQpOworCisgICAgYXRrX2VkaXRh
YmxlX3RleHRfZGVsZXRlX3RleHQoQVRLX0VESVRBQkxFX1RFWFQocGFzc3dvcmRFbnRyeSksIDIs
IDQpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0Q2hhbmdlZFJlc3VsdCwgPT0sICJ8MnwyfDJ8
J1wzNDJcMjAwXDI0MlwzNDJcMjAwXDI0Mid8Iik7CisKKyAgICB0ZXh0ID0gYXRrX3RleHRfZ2V0
X3RleHQoQVRLX1RFWFQocGFzc3dvcmRFbnRyeSksIDAsIC0xKTsKKyAgICBnX2Fzc2VydF9jbXBz
dHIodGV4dCwgPT0sICJcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDJcMzQyXDIw
MFwyNDIiKTsKKyAgICBnX2ZyZWUodGV4dCk7CisKKyAgICBwb3MgPSAzOworICAgIGF0a19lZGl0
YWJsZV90ZXh0X2luc2VydF90ZXh0KEFUS19FRElUQUJMRV9URVhUKHBhc3N3b3JkRW50cnkpLCAi
cXV4IHRvYmVpZ25vcmVkIiwgMywgJnBvcyk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHRDaGFu
Z2VkUmVzdWx0LCA9PSwgInwxfDN8M3wnXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBc
MjQyJ3wiKTsKKworICAgIHRleHQgPSBhdGtfdGV4dF9nZXRfdGV4dChBVEtfVEVYVChwYXNzd29y
ZEVudHJ5KSwgMCwgLTEpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwgIlwzNDJcMjAw
XDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJc
MjAwXDI0MlwzNDJcMjAwXDI0MiIpOworICAgIGdfZnJlZSh0ZXh0KTsKKworICAgIGdfZnJlZSh0
ZXh0Q2hhbmdlZFJlc3VsdCk7CisKKyAgICBnX29iamVjdF91bnJlZihmb3JtKTsKKyAgICBnX29i
amVjdF91bnJlZih0ZXh0RW50cnkpOworICAgIGdfb2JqZWN0X3VucmVmKHBhc3N3b3JkRW50cnkp
OworICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2Vi
a2l0QXRrUGFyZW50Rm9yUm9vdE9iamVjdCgpCit7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmll
dyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIEd0a0FsbG9j
YXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgODAwLCA2MDAgfTsKKyAgICBndGtfd2lkZ2V0X3Np
emVfYWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOworICAgIHdlYmtp
dF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LCBjb250ZW50cywgMCwgMCwgMCk7CisKKyAg
ICAvKiBXZSBuZWVkIGEgcGFyZW50IGNvbnRhaW5lciB3aWRnZXQgZm9yIHRoZSB3ZWJ2aWV3LiAq
LworICAgIEd0a1dpZGdldCogcGFyZW50Q29udGFpbmVyID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJ
TkRPV19UT1BMRVZFTCk7CisgICAgZ19vYmplY3RfcmVmX3NpbmsocGFyZW50Q29udGFpbmVyKTsK
KyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHBhcmVudENvbnRhaW5lciksIEdU
S19XSURHRVQod2ViVmlldykpOworCisgICAgQXRrT2JqZWN0KiBheFBhcmVudCA9IGd0a193aWRn
ZXRfZ2V0X2FjY2Vzc2libGUocGFyZW50Q29udGFpbmVyKTsKKyAgICBnX2Fzc2VydChBVEtfSVNf
T0JKRUNUKGF4UGFyZW50KSk7CisKKyAgICBBdGtPYmplY3QqIGF4Um9vdCA9IGd0a193aWRnZXRf
Z2V0X2FjY2Vzc2libGUoR1RLX1dJREdFVCh3ZWJWaWV3KSk7CisgICAgZ19hc3NlcnQoQVRLX0lT
X09CSkVDVChheFJvb3QpKTsKKworICAgIC8qIFRoZSBjaGlsZCBmb3IgdGhlIHBhcmVudCBjb250
YWluZXIncyBhY2Nlc3NpYmlsaXR5IG9iamVjdAorICAgICAgIHNob3VsZCBiZSB0aGUgYWNjZXNz
aWJpbGl0eSBvYmplY3QgZm9yIHRoZSBXZWJWaWV3J3Mgcm9vdC4gKi8KKyAgICBBdGtPYmplY3Qq
IGF4UGFyZW50Q2hpbGQgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGF4UGFyZW50
LCAwKTsKKyAgICBnX2Fzc2VydChheFBhcmVudENoaWxkID09IGF4Um9vdCk7CisKKyAgICAvKiBC
b3R0b20tdXAgbmF2aWdhdGlvbiBzaG91bGQgbWF0Y2ggdG9wLWRvd24gb25lLiAqLworICAgIGdf
YXNzZXJ0KGF0a19vYmplY3RfZ2V0X3BhcmVudChheFBhcmVudENoaWxkKSA9PSBheFBhcmVudCk7
CisKKyAgICBnX29iamVjdF91bnJlZihheFBhcmVudENoaWxkKTsKKyAgICBnX29iamVjdF91bnJl
ZihwYXJlbnRDb250YWluZXIpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrU2V0UGFy
ZW50Rm9yT2JqZWN0KCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dF
Ql9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0
aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9OworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShH
VEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7CisgICAgd2Via2l0X3dlYl92aWV3X2xv
YWRfc3RyaW5nKHdlYlZpZXcsIGNvbnRlbnRzLCAwLCAwLCAwKTsKKworICAgIC8qIFB1dCB0aGUg
d2VidmlldyBpbiBhIHBhcmVudCBjb250YWluZXIgd2lkZ2V0IHRvIGNoZWNrIHRoYXQgdGhlCisg
ICAgICAgbm9ybWFsIGJlaGF2aW91ciBrZWVwcyB3b3JraW5nIGFzIGV4cGVjdGVkIGJ5IGRlZmF1
bHQuICovCisgICAgR3RrV2lkZ2V0KiBwYXJlbnRDb250YWluZXIgPSBndGtfd2luZG93X25ldyhH
VEtfV0lORE9XX1RPUExFVkVMKTsKKyAgICBnX29iamVjdF9yZWZfc2luayhwYXJlbnRDb250YWlu
ZXIpOworICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIocGFyZW50Q29udGFpbmVy
KSwgR1RLX1dJREdFVCh3ZWJWaWV3KSk7CisKKyAgICBBdGtPYmplY3QqIGF4Um9vdCA9IGd0a193
aWRnZXRfZ2V0X2FjY2Vzc2libGUoR1RLX1dJREdFVCh3ZWJWaWV3KSk7CisgICAgZ19hc3NlcnQo
QVRLX0lTX09CSkVDVChheFJvb3QpKTsKKworICAgIEF0a09iamVjdCogYXhQYXJlbnQgPSBndGtf
d2lkZ2V0X2dldF9hY2Nlc3NpYmxlKHBhcmVudENvbnRhaW5lcik7CisgICAgZ19hc3NlcnQoQVRL
X0lTX09CSkVDVChheFBhcmVudCkpOworCisgICAgLyogVGhlIHBhcmVudCBvZiB0aGUgcm9vdCBv
YmplY3QgaXMgdGhlIHBhcmVudCBjb250YWluZXIncyBhMTF5IG9iamVjdC4gKi8KKyAgICBnX2Fz
c2VydChhdGtfb2JqZWN0X2dldF9wYXJlbnQoYXhSb290KSA9PSBheFBhcmVudCk7CisKKyAgICAv
KiBXZSBub3cgbmVlZCB0byB1c2Ugc29tZXRoaW5nIGFzIGEgYW4gYWx0ZXJuYXRpdmUgcGFyZW50
IGZvcgorICAgICAgIHRoZSBhMTF5IG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIHJvb3Qgb2Yg
dGhlIERPTSB0cmVlLiAqLworICAgIEd0a1dpZGdldCogYWx0ZXJuYXRpdmVQYXJlbnQgPSBndGtf
YnV0dG9uX25ldygpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKGFsdGVybmF0aXZlUGFyZW50KTsK
KworICAgIEF0a09iamVjdCogYXhBbHRlcm5hdGl2ZVBhcmVudCA9IGd0a193aWRnZXRfZ2V0X2Fj
Y2Vzc2libGUoYWx0ZXJuYXRpdmVQYXJlbnQpOworICAgIGdfYXNzZXJ0KEFUS19JU19PQkpFQ1Qo
YXhBbHRlcm5hdGl2ZVBhcmVudCkpOworCisgICAgLyogTWFudWFsbHkgc2V0IHRoZSBhbHRlcm5h
dGl2ZSBwYXJlbnQncyBhY2Nlc3NpYmlsaXR5IG9iamVjdCBhcworICAgICAgIHRoZSBwYXJlbnQg
Zm9yIHRoZSBXZWJLaXQgYWNjZXNzaWJpbGl0eSByb290IG9iamVjdCBhbmQgY2hlY2suICovCisg
ICAgYXRrX29iamVjdF9zZXRfcGFyZW50KGF4Um9vdCwgYXhBbHRlcm5hdGl2ZVBhcmVudCk7Cisg
ICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcGFyZW50KGF4Um9vdCkgPT0gYXhBbHRlcm5hdGl2
ZVBhcmVudCk7CisKKyAgICBnX29iamVjdF91bnJlZihhbHRlcm5hdGl2ZVBhcmVudCk7CisgICAg
Z19vYmplY3RfdW5yZWYocGFyZW50Q29udGFpbmVyKTsKK30KKworI2lmZGVmIEdUS19BUElfVkVS
U0lPTl8yCitzdGF0aWMgdm9pZCBpbml0aWFsaXplVGVzdGluZ0ZyYW1ld29yayhpbnQgYXJnYywg
Y2hhcioqIGFyZ3YpCit7CisgICAgLyogRW5zdXJlIEdBSUwgaXMgdGhlIG9ubHkgbW9kdWxlIGxv
YWRlZC4gKi8KKyAgICBnX3NldGVudigiR1RLX01PRFVMRVMiLCAiZ2FpbCIsIFRSVUUpOworCisg
ICAgLyogRm9sbG93aW5nIGxpbmVzIHdlcmUgdGFrZW4gZnJvbSBndGtfdGVzdF9pbml0KCkuICov
CisgICAgZ190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCAwKTsKKyAgICBndGtfZGlzYWJsZV9zZXRs
b2NhbGUoKTsKKyAgICBzZXRsb2NhbGUoTENfQUxMLCAiQyIpOworCisgICAgZ3RrX2luaXQoJmFy
Z2MsICZhcmd2KTsKK30KKyNlbmRpZgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3Yp
Cit7CisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICAvKiBXZSBjYW4ndCBqdXN0IGNhbGwg
dG8gZ3RrX3Rlc3RfaW5pdCgpIGluIHRoaXMgY2FzZSBiZWNhdXNlIGl0cworICAgICAgIGltcGxl
bWVudGF0aW9uIG1ha2VzIHN1cmUgdGhhdCBubyBHVEsrIG1vZHVsZSB3aWxsIGJlIGxvYWRlZCwg
YW5kCisgICAgICAgd2Ugd2lsbCBuZWVkIHRvIGxvYWQgR0FJTCBmb3IgdGVzdHMgdGhhdCBuZWVk
IHRvIHVzZSBBdGtPYmplY3RzCisgICAgICAgZnJvbSBub24tV2ViS2l0IEd0a1dpZGdldHMgKGUu
ZyBwYXJlbnRGb3JSb290T2JqZWN0KS4qLworICAgIGluaXRpYWxpemVUZXN0aW5nRnJhbWV3b3Jr
KGFyZ2MsIGFyZ3YpOworI2Vsc2UKKyAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVM
TCk7CisjZW5kaWYKKworICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvIik7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9jYXJldE9mZnNldHMiLCB0
ZXN0V2Via2l0QXRrQ2FyZXRPZmZzZXRzKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQv
YXRrL2NhcmV0T2Zmc2V0c0FuZEV4dHJhbm91c1doaXRlU3BhY2VzIiwgdGVzdFdlYmtpdEF0a0Nh
cmV0T2Zmc2V0c0FuZEV4dHJhbm91c1doaXRlU3BhY2VzKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMo
Ii93ZWJraXQvYXRrL2NvbWJvQm94IiwgdGVzdFdlYmtpdEF0a0NvbWJvQm94KTsKKyAgICBnX3Rl
c3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2RvY3VtZW50TG9hZGluZ0V2ZW50cyIsIHRlc3RXZWJr
aXRBdGtEb2N1bWVudExvYWRpbmdFdmVudHMpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtp
dC9hdGsvZW1iZWRkZWRPYmplY3RzIiwgdGVzdFdlYmtpdEF0a0VtYmVkZGVkT2JqZWN0cyk7Cisg
ICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9nZXRIZWFkZXJzSW5UYWJsZSIsIHRlc3RX
ZWJraXRBdGtHZXRIZWFkZXJzSW5UYWJsZSk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0
L2F0ay90ZXh0QXR0cmlidXRlcyIsIHRlc3RXZWJraXRBdGtUZXh0QXR0cmlidXRlcyk7CisgICAg
Z190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay90ZXh0U2VsZWN0aW9ucyIsIHRlc3RXZWJraXRB
dGtUZXh0U2VsZWN0aW9ucyk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9nZXRF
eHRlbnRzIiwgdGVzdFdlYmtpdEF0a0dldEV4dGVudHMpOworICAgIGdfdGVzdF9hZGRfZnVuYygi
L3dlYmtpdC9hdGsvaHlwZXJ0ZXh0QW5kSHlwZXJsaW5rcyIsIHRlc3RXZWJraXRBdGtIeXBlcnRl
eHRBbmRIeXBlcmxpbmtzKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2xheW91
dEFuZERhdGFUYWJsZXMiLCB0ZXN0V2Via2l0QXRrTGF5b3V0QW5kRGF0YVRhYmxlcyk7CisgICAg
Z190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9saW5rc1dpdGhJbmxpbmVJbWFnZXMiLCB0ZXN0
V2Via2l0QXRrTGlua3NXaXRoSW5saW5lSW1hZ2VzKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93
ZWJraXQvYXRrL2xpc3RzT2ZJdGVtcyIsIHRlc3RXZWJraXRBdGtMaXN0c09mSXRlbXMpOworICAg
IGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvdGV4dENoYW5nZWROb3RpZmljYXRpb25zIiwg
dGVzdFdlYmtpdEF0a1RleHRDaGFuZ2VkTm90aWZpY2F0aW9ucyk7CisgICAgZ190ZXN0X2FkZF9m
dW5jKCIvd2Via2l0L2F0ay9wYXJlbnRGb3JSb290T2JqZWN0IiwgdGVzdFdlYmtpdEF0a1BhcmVu
dEZvclJvb3RPYmplY3QpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvc2V0UGFy
ZW50Rm9yT2JqZWN0IiwgdGVzdFdlYmtpdEF0a1NldFBhcmVudEZvck9iamVjdCk7CisgICAgcmV0
dXJuIGdfdGVzdF9ydW4gKCk7Cit9CisKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0R3RrL3Rlc3RhdGtyb2xlcy5jIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRHdGsvdGVzdGF0a3JvbGVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uODg4MTdjZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0R3RrL3Rlc3RhdGtyb2xlcy5jCkBAIC0wLDAgKzEsNDI2IEBACisvKgorICogQ29w
eXJpZ2h0IMKpIDIwMTAgSm9hbm1hcmllIERpZ2dzCisgKiBDb3B5cmlnaHQgwqkgMjAxMCBJZ2Fs
aWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUg
PGdsaWIvZ3N0ZGlvLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdC93
ZWJraXQuaD4KKworLyogTm9uIGZvcm0gcm9sZXMgKi8KKyNkZWZpbmUgSFRNTF9ET0NVTUVOVF9G
UkFNRSAiPGh0bWw+PGJvZHk+VGhpcyBpcyBhIHRlc3QuPC9ib2R5PjwvaHRtbD4iCisjZGVmaW5l
IEhUTUxfSEVBRElORyAiPGh0bWw+PGJvZHk+PGgxPjE8L2gxPjxoMj4yPC9oMj48aDM+MzwvaDM+
PGg0PjQ8L2g0PjxoNT41PC9oNT48aDY+NjwvaDY+PC9ib2R5PjwvaHRtbD4iCisjZGVmaW5lIEhU
TUxfSU1BR0UgIjxodG1sPjxib2R5PjxpbWcgc3JjPSdmb29iYXIucG5nJyBhbHQ9J1RoaXMgaXMg
YSB0ZXN0LicvPjwvYm9keT48L2h0bWw+IgorI2RlZmluZSBIVE1MX0xJTktfVEVYVCAiPGh0bWw+
PGJvZHk+PGEgaHJlZj0nZm9vYmFyLmh0bWwnPlRoaXMgaXMgYSB0ZXN0LjwvYT48L2JvZHk+PC9o
dG1sPiIKKyNkZWZpbmUgSFRNTF9MSVNUICI8aHRtbD48Ym9keT48dWw+PGxpPjE8L2xpPjxsaT4y
PC9saT48L3VsPjxvbD48bGk+MTwvbGk+PGxpPjI8L2xpPjwvb2w+PC9ib2R5PjwvaHRtbD4iCisj
ZGVmaW5lIEhUTUxfUEFSQUdSQVBIICI8aHRtbD48Ym9keT48cD5UaGlzIGlzIGEgdGVzdC48L3A+
PC9ib2R5PjwvaHRtbD4iCisjZGVmaW5lIEhUTUxfU0VDVElPTiAiPGh0bWw+PGJvZHk+PGRpdj5U
aGlzIGlzIGEgdGVzdC48L2Rpdj48L2JvZHk+PC9odG1sPiIKKyNkZWZpbmUgSFRNTF9UQUJMRSAi
PGh0bWw+PGJvZHk+PHRhYmxlIGJvcmRlcj0nMSc+PHRyPjx0ZD5UaGlzIGlzPC90ZD48dGQ+YSB0
ZXN0LjwvdGQ+PC90cj48L3RhYmxlPjwvYm9keT48L2h0bWw+IgorI2RlZmluZSBIVE1MX1NFUEFS
QVRPUiAiPGh0bWw+PGJvZHk+PGhyLz48L2JvZHk+PC9odG1sPiIKKyNkZWZpbmUgSFRNTF9DT01C
T0JPWCAiPGh0bWw+PGJvZHk+PHNlbGVjdCBzaXplPScxJz48b3B0aW9uPm9uZTwvb3B0aW9uPjxv
cHRpb24+dHdvPC9vcHRpb24+PG9wdGlvbj50aHJlZTwvb3B0aW9uPjwvc2VsZWN0PjwvYm9keT48
L2h0bWw+IgorLyogRm9ybSByb2xlcyAqLworI2RlZmluZSBIVE1MX0ZPUk0gIjxodG1sPjxib2R5
Pjxmb3JtPlRoaXMgaXMgYSB0ZXN0LjwvZm9ybT48L2JvZHk+PC9odG1sPiIKKyNkZWZpbmUgSFRN
TF9DSEVDS19CT1ggIjxodG1sPjxib2R5PjxpbnB1dCB0eXBlPSdjaGVja2JveCcgLz5UaGlzIGlz
IGEgdGVzdC48L2JvZHk+PC9odG1sPiIKKyNkZWZpbmUgSFRNTF9MQUJFTEVEX0VOVFJZICI8aHRt
bD48Ym9keT48bGFiZWwgZm9yPSdmb28nPk5hbWU6PC9sYWJlbD48aW5wdXQgdHlwZT0ndGV4dCcg
aWQ9J2ZvbycgLz48L2JvZHk+PC9odG1sPiIKKyNkZWZpbmUgSFRNTF9MSVNUQk9YICI8aHRtbD48
Ym9keT48c2VsZWN0IHNpemU9JzMnPjxvcHRpb24+b25lPC9vcHRpb24+PG9wdGlvbj50d288L29w
dGlvbj48b3B0aW9uPnRocmVlPC9vcHRpb24+PC9zZWxlY3Q+PC9ib2R5PjwvaHRtbD4iCisjZGVm
aW5lIEhUTUxfUEFTU1dPUkRfVEVYVCAiPGh0bWw+PGJvZHk+PGlucHV0IHR5cGU9J3Bhc3N3b3Jk
JyAvPjwvYm9keT48L2h0bWw+IgorI2RlZmluZSBIVE1MX1BVU0hfQlVUVE9OICI8aHRtbD48Ym9k
eT48aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nb2snIC8+VGhpcyBpcyBhIHRlc3QuPC9ib2R5
PjwvaHRtbD4iCisjZGVmaW5lIEhUTUxfUkFESU9fQlVUVE9OICI8aHRtbD48Ym9keT48aW5wdXQg
dHlwZT0ncmFkaW8nIC8+VGhpcyBpcyBhIHRlc3QuPC9ib2R5PjwvaHRtbD4iCisKK3R5cGVkZWYg
c3RydWN0IHsKKyAgICBBdGtPYmplY3QqIGRvY3VtZW50OworICAgIEF0a09iamVjdCogb2JqOwor
ICAgIEF0a1JvbGUgcm9sZTsKKyAgICBHdGtXaWRnZXQqIHdlYlZpZXc7CisgICAgR3RrQWxsb2Nh
dGlvbiBhbGxvYzsKKyAgICBHTWFpbkxvb3AqIGxvb3A7Cit9IEF0a1JvbGVzRml4dHVyZTsKKwor
c3RhdGljIGdib29sZWFuIGZpbmlzaF9sb2FkaW5nKEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSkK
K3sKKyAgICBpZiAoZ19tYWluX2xvb3BfaXNfcnVubmluZyhmaXh0dXJlLT5sb29wKSkKKyAgICAg
ICAgZ19tYWluX2xvb3BfcXVpdChmaXh0dXJlLT5sb29wKTsKKworICAgIC8vIFdpdGggdGhlIGNo
YW5nZSB0byBzdXBwb3J0IFdLMiBhY2Nlc3NpYmlsaXR5LCB0aGUgcm9vdCBvYmplY3QKKyAgICAv
LyBoYXMgY2hhbmdlZCBhbmQgaXQncyBubyBsb25nZXIgdGhlIGRvY3VtZW50IGZyYW1lLCBidXQg
YSBzY3JvbGwKKyAgICAvLyBwYW5lIGNvbnRhaW5pbmcgdGhlIGRvY3VtZW50IGZyYW1lIGFzIGl0
cyBvbmx5IGNoaWxkLiBTZWUgdGhlCisgICAgLy8gYnVnIDcyMzkwIGZvciBtb3JlIGRldGFpbHMg
b24gdGhpcyBjaGFuZ2UuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTcyMzkwCisgICAgQXRrT2JqZWN0KiByb290T2JqZWN0ID0gZ3RrX3dpZGdldF9nZXRf
YWNjZXNzaWJsZShmaXh0dXJlLT53ZWJWaWV3KTsKKyAgICBmaXh0dXJlLT5kb2N1bWVudCA9IGF0
a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQocm9vdE9iamVjdCwgMCk7CisgICAgZ19hc3Nl
cnQoZml4dHVyZS0+ZG9jdW1lbnQpOworCisgICAgLy8gUmVtb3ZlIHRoZSByZWZlcmVuY2UgYWRk
ZWQgYnkgcmVmX2FjY2Vzc2libGVfY2hpbGQoKSBhbmQKKyAgICAvLyByZXR1cm4sIHNpbmNlIHdl
IGRvbid0IG5lZWQgdG8ga2VlcCB0aGF0IGV4dHJhIHJlZiBhdCBhbGwuCisgICAgZ19vYmplY3Rf
dW5yZWYoZml4dHVyZS0+ZG9jdW1lbnQpOworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGlj
IHZvaWQgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAoQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBn
Y29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgZml4dHVyZS0+bG9vcCA9IGdfbWFpbl9sb29wX25l
dyhOVUxMLCBUUlVFKTsKKyAgICBmaXh0dXJlLT5hbGxvYyA9IChHdGtBbGxvY2F0aW9uKSB7IDAs
IDAsIDgwMCwgNjAwIH07CisgICAgZml4dHVyZS0+d2ViVmlldyA9IHdlYmtpdF93ZWJfdmlld19u
ZXcoKTsKKyAgICBnX29iamVjdF9yZWZfc2luayhmaXh0dXJlLT53ZWJWaWV3KTsKKworICAgIGd0
a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShmaXh0dXJlLT53ZWJWaWV3LCAmZml4dHVyZS0+YWxsb2Mp
OworCisgICAgaWYgKGRhdGEgIT0gTlVMTCkKKyAgICAgICAgd2Via2l0X3dlYl92aWV3X2xvYWRf
c3RyaW5nKFdFQktJVF9XRUJfVklFVyAoZml4dHVyZS0+d2ViVmlldyksIChjb25zdCBjaGFyKikg
ZGF0YSwgTlVMTCwgTlVMTCwgTlVMTCk7CisKKyAgICBnX2lkbGVfYWRkKChHU291cmNlRnVuYykg
ZmluaXNoX2xvYWRpbmcsIGZpeHR1cmUpOworICAgIGdfbWFpbl9sb29wX3J1bihmaXh0dXJlLT5s
b29wKTsKK30KKworc3RhdGljIHZvaWQgYXRrX3JvbGVzX2ZpeHR1cmVfdGVhcmRvd24oQXRrUm9s
ZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgZ19vYmplY3Rf
dW5yZWYoZml4dHVyZS0+d2ViVmlldyk7CisgICAgZ19tYWluX2xvb3BfdW5yZWYoZml4dHVyZS0+
bG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKEF0a09iamVj
dCogb2JqLCBnaW50IHBvcywgQXRrUm9sZSByb2xlKQoreworICAgIEF0a09iamVjdCogY2hpbGQ7
CisgICAgQXRrUm9sZSBjaGlsZF9yb2xlOworCisgICAgY2hpbGQgPSBhdGtfb2JqZWN0X3JlZl9h
Y2Nlc3NpYmxlX2NoaWxkKG9iaiwgcG9zKTsKKyAgICBnX2Fzc2VydChjaGlsZCk7CisgICAgY2hp
bGRfcm9sZSA9IGF0a19vYmplY3RfZ2V0X3JvbGUoY2hpbGQpOworICAgIGdfYXNzZXJ0KGNoaWxk
X3JvbGUgPT0gcm9sZSk7CisKKyAgICBnX29iamVjdF91bnJlZihjaGlsZCk7Cit9CisKK3N0YXRp
YyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9kb2N1bWVudF9mcmFtZShBdGtSb2xlc0Zp
eHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBmaXh0dXJlLT5yb2xl
ID0gYXRrX29iamVjdF9nZXRfcm9sZShmaXh0dXJlLT5kb2N1bWVudCk7CisgICAgZ19hc3NlcnQo
Zml4dHVyZS0+cm9sZSA9PSBBVEtfUk9MRV9ET0NVTUVOVF9XRUIpOworfQorCitzdGF0aWMgdm9p
ZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfaGVhZGluZyhBdGtSb2xlc0ZpeHR1cmUqIGZpeHR1
cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShm
aXh0dXJlLT5kb2N1bWVudCwgMCwgQVRLX1JPTEVfSEVBRElORyk7CisgICAgZ2V0X2NoaWxkX2Fu
ZF90ZXN0X3JvbGUoZml4dHVyZS0+ZG9jdW1lbnQsIDEsIEFUS19ST0xFX0hFQURJTkcpOworICAg
IGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPmRvY3VtZW50LCAyLCBBVEtfUk9MRV9I
RUFESU5HKTsKKyAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5kb2N1bWVudCwg
MywgQVRLX1JPTEVfSEVBRElORyk7CisgICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVy
ZS0+ZG9jdW1lbnQsIDQsIEFUS19ST0xFX0hFQURJTkcpOworICAgIGdldF9jaGlsZF9hbmRfdGVz
dF9yb2xlKGZpeHR1cmUtPmRvY3VtZW50LCA1LCBBVEtfUk9MRV9IRUFESU5HKTsKK30KKworc3Rh
dGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2ltYWdlKEF0a1JvbGVzRml4dHVyZSog
Zml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIC8vIFRoaXMgaXMgYW4gZXh0cmFu
ZW91cyBvYmplY3Qgb2YgQVRLX1JPTEVfUEFORUwgd2hpY2ggd2Ugc2hvdWxkIGdldCByaWQgb2Yu
CisgICAgZml4dHVyZS0+b2JqID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmaXh0
dXJlLT5kb2N1bWVudCwgMCk7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+b2JqKTsKKworICAgIGdl
dF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPm9iaiwgMCwgQVRLX1JPTEVfSU1BR0UpOwor
CisgICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+b2JqKTsKK30KKworc3RhdGljIHZvaWQgdGVz
dF93ZWJraXRfYXRrX2dldF9yb2xlX2xpbmsoQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29u
c3Rwb2ludGVyIGRhdGEpCit7CisgICAgLy8gVGhpcyBpcyBhbiBleHRyYW5lb3VzIG9iamVjdCBv
ZiBBVEtfUk9MRV9QQU5FTCB3aGljaCB3ZSBzaG91bGQgZ2V0IHJpZCBvZi4KKyAgICBmaXh0dXJl
LT5vYmogPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZpeHR1cmUtPmRvY3VtZW50
LCAwKTsKKyAgICBnX2Fzc2VydChmaXh0dXJlLT5vYmopOworCisgICAgZ2V0X2NoaWxkX2FuZF90
ZXN0X3JvbGUoZml4dHVyZS0+b2JqLCAwLCBBVEtfUk9MRV9MSU5LKTsKKworICAgIGdfb2JqZWN0
X3VucmVmKGZpeHR1cmUtPm9iaik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19n
ZXRfcm9sZV9saXN0X2FuZF9pdGVtKEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9p
bnRlciBkYXRhKQoreworICAgIEF0a09iamVjdCogbGlzdE9iajsKKworICAgIGxpc3RPYmogPSBh
dGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZpeHR1cmUtPmRvY3VtZW50LCAwKTsKKyAg
ICBnX2Fzc2VydChsaXN0T2JqKTsKKyAgICBmaXh0dXJlLT5yb2xlID0gYXRrX29iamVjdF9nZXRf
cm9sZShsaXN0T2JqKTsKKyAgICBnX2Fzc2VydChmaXh0dXJlLT5yb2xlID09IEFUS19ST0xFX0xJ
U1QpOworCisgICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUobGlzdE9iaiwgMCwgQVRLX1JPTEVf
TElTVF9JVEVNKTsKKyAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShsaXN0T2JqLCAxLCBBVEtf
Uk9MRV9MSVNUX0lURU0pOworICAgIGdfb2JqZWN0X3VucmVmKGxpc3RPYmopOworCisgICAgbGlz
dE9iaiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoZml4dHVyZS0+ZG9jdW1lbnQs
IDEpOworICAgIGdfYXNzZXJ0KGxpc3RPYmopOworICAgIGZpeHR1cmUtPnJvbGUgPSBhdGtfb2Jq
ZWN0X2dldF9yb2xlKGxpc3RPYmopOworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPnJvbGUgPT0gQVRL
X1JPTEVfTElTVCk7CisKKyAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShsaXN0T2JqLCAwLCBB
VEtfUk9MRV9MSVNUX0lURU0pOworICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGxpc3RPYmos
IDEsIEFUS19ST0xFX0xJU1RfSVRFTSk7CisgICAgZ19vYmplY3RfdW5yZWYobGlzdE9iaik7Cit9
CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9wYXJhZ3JhcGgoQXRrUm9s
ZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgZ2V0X2NoaWxk
X2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+ZG9jdW1lbnQsIDAsIEFUS19ST0xFX1BBUkFHUkFQSCk7
Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9zZWN0aW9uKEF0a1Jv
bGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGdldF9jaGls
ZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPmRvY3VtZW50LCAwLCBBVEtfUk9MRV9TRUNUSU9OKTsK
K30KKworLy8gRG9lcyBub3QgeWV0IHRlc3QgdGFibGUgY2VsbHMgYmVjYXVzZSBvZiBidWcgMzA4
OTUuCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfdGFibGUoQXRrUm9sZXNG
aXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgZ2V0X2NoaWxkX2Fu
ZF90ZXN0X3JvbGUoZml4dHVyZS0+ZG9jdW1lbnQsIDAsIEFUS19ST0xFX1RBQkxFKTsKK30KKwor
c3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX3NlcGFyYXRvcihBdGtSb2xlc0Zp
eHR1cmUgKmZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBnZXRfY2hpbGRfYW5k
X3Rlc3Rfcm9sZShmaXh0dXJlLT5kb2N1bWVudCwgMCwgQVRLX1JPTEVfU0VQQVJBVE9SKTsKK30K
Kworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2NvbWJvYm94KEF0a1JvbGVz
Rml4dHVyZSAqZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIEF0a09iamVjdCog
Y29tYm9ib3hNZW51OworCisgICAgLy8gVGhpcyBpcyBhbiBleHRyYW5lb3VzIG9iamVjdCBvZiBB
VEtfUk9MRV9QQU5FTCB3aGljaCB3ZSBzaG91bGQgZ2V0IHJpZCBvZi4KKyAgICBmaXh0dXJlLT5v
YmogPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZpeHR1cmUtPmRvY3VtZW50LCAw
KTsKKyAgICBnX2Fzc2VydChmaXh0dXJlLT5vYmopOworCisgICAgZml4dHVyZS0+b2JqID0gYXRr
X29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmaXh0dXJlLT5vYmosIDApOworICAgIGdfYXNz
ZXJ0KGZpeHR1cmUtPm9iaik7CisgICAgZml4dHVyZS0+cm9sZSA9IGF0a19vYmplY3RfZ2V0X3Jv
bGUoZml4dHVyZS0+b2JqKTsKKyAgICBnX2Fzc2VydChmaXh0dXJlLT5yb2xlID09IEFUS19ST0xF
X0NPTUJPX0JPWCk7CisKKyAgICBjb21ib2JveE1lbnUgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3Np
YmxlX2NoaWxkKGZpeHR1cmUtPm9iaiwgMCk7CisgICAgZ19hc3NlcnQoY29tYm9ib3hNZW51KTsK
KyAgICBmaXh0dXJlLT5yb2xlID0gYXRrX29iamVjdF9nZXRfcm9sZShjb21ib2JveE1lbnUpOwor
ICAgIGdfYXNzZXJ0KGZpeHR1cmUtPnJvbGUgPT0gQVRLX1JPTEVfTUVOVSk7CisKKyAgICBnZXRf
Y2hpbGRfYW5kX3Rlc3Rfcm9sZShjb21ib2JveE1lbnUsIDAsIEFUS19ST0xFX01FTlVfSVRFTSk7
CisgICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoY29tYm9ib3hNZW51LCAxLCBBVEtfUk9MRV9N
RU5VX0lURU0pOworICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGNvbWJvYm94TWVudSwgMiwg
QVRLX1JPTEVfTUVOVV9JVEVNKTsKKworICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9iaik7
CisgICAgZ19vYmplY3RfdW5yZWYoY29tYm9ib3hNZW51KTsKK30KKworLyogRm9ybSByb2xlcyAq
Lworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2Zvcm0oQXRrUm9sZXNGaXh0
dXJlICpmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgZ2V0X2NoaWxkX2FuZF90
ZXN0X3JvbGUoZml4dHVyZS0+ZG9jdW1lbnQsIDAsIEFUS19ST0xFX0ZPUk0pOworfQorCitzdGF0
aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfY2hlY2tfYm94KEF0a1JvbGVzRml4dHVy
ZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIC8vIFRoaXMgaXMgYW4gZXh0
cmFuZW91cyBvYmplY3Qgb2YgQVRLX1JPTEVfUEFORUwgd2hpY2ggd2Ugc2hvdWxkIGdldCByaWQg
b2YuCisgICAgZml4dHVyZS0+b2JqID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChm
aXh0dXJlLT5kb2N1bWVudCwgMCk7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+b2JqKTsKKworICAg
IGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPm9iaiwgMCwgQVRLX1JPTEVfQ0hFQ0tf
Qk9YKTsKKworICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9iaik7Cit9CisKK3N0YXRpYyB2
b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9lbnRyeShBdGtSb2xlc0ZpeHR1cmUqIGZpeHR1
cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICAvLyBUaGlzIGlzIGFuIGV4dHJhbmVvdXMg
b2JqZWN0IG9mIEFUS19ST0xFX1BBTkVMIHdoaWNoIHdlIHNob3VsZCBnZXQgcmlkIG9mLgorICAg
IGZpeHR1cmUtPm9iaiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoZml4dHVyZS0+
ZG9jdW1lbnQsIDApOworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPm9iaik7CisKKyAgICBnZXRfY2hp
bGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5vYmosIDEsIEFUS19ST0xFX0VOVFJZKTsKKworICAg
IGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9iaik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Vi
a2l0X2F0a19nZXRfcm9sZV9sYWJlbChBdGtSb2xlc0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBv
aW50ZXIgZGF0YSkKK3sKKyAgICAvLyBUaGlzIGlzIGFuIGV4dHJhbmVvdXMgb2JqZWN0IG9mIEFU
S19ST0xFX1BBTkVMIHdoaWNoIHdlIHNob3VsZCBnZXQgcmlkIG9mLgorICAgIGZpeHR1cmUtPm9i
aiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoZml4dHVyZS0+ZG9jdW1lbnQsIDAp
OworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPm9iaik7CisKKyAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rf
cm9sZShmaXh0dXJlLT5vYmosIDAsIEFUS19ST0xFX0xBQkVMKTsKKworICAgIGdfb2JqZWN0X3Vu
cmVmKGZpeHR1cmUtPm9iaik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRf
cm9sZV9saXN0Ym94KEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRh
KQoreworICAgIEF0a09iamVjdCogbGlzdGJveE9iajsKKyAgICAvLyBUaGlzIGlzIGFuIGV4dHJh
bmVvdXMgb2JqZWN0IG9mIEFUS19ST0xFX1BBTkVMIHdoaWNoIHdlIHNob3VsZCBnZXQgcmlkIG9m
LgorICAgIGZpeHR1cmUtPm9iaiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoZml4
dHVyZS0+ZG9jdW1lbnQsIDApOworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPm9iaik7CisKKyAgICBs
aXN0Ym94T2JqID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmaXh0dXJlLT5vYmos
IDApOworICAgIGdfYXNzZXJ0KGxpc3Rib3hPYmopOworICAgIGZpeHR1cmUtPnJvbGUgPSBhdGtf
b2JqZWN0X2dldF9yb2xlKGxpc3Rib3hPYmopOworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPnJvbGUg
PT0gQVRLX1JPTEVfTElTVCk7CisKKyAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShsaXN0Ym94
T2JqLCAwLCBBVEtfUk9MRV9MSVNUX0lURU0pOworICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xl
KGxpc3Rib3hPYmosIDEsIEFUS19ST0xFX0xJU1RfSVRFTSk7CisgICAgZ2V0X2NoaWxkX2FuZF90
ZXN0X3JvbGUobGlzdGJveE9iaiwgMiwgQVRLX1JPTEVfTElTVF9JVEVNKTsKKworICAgIGdfb2Jq
ZWN0X3VucmVmKGZpeHR1cmUtPm9iaik7CisgICAgZ19vYmplY3RfdW5yZWYobGlzdGJveE9iaik7
Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9wYXNzd29yZF90ZXh0
KEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIC8v
IFRoaXMgaXMgYW4gZXh0cmFuZW91cyBvYmplY3Qgb2YgQVRLX1JPTEVfUEFORUwgd2hpY2ggd2Ug
c2hvdWxkIGdldCByaWQgb2YuCisgICAgZml4dHVyZS0+b2JqID0gYXRrX29iamVjdF9yZWZfYWNj
ZXNzaWJsZV9jaGlsZChmaXh0dXJlLT5kb2N1bWVudCwgMCk7CisgICAgZ19hc3NlcnQoZml4dHVy
ZS0+b2JqKTsKKworICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPm9iaiwgMCwg
QVRLX1JPTEVfUEFTU1dPUkRfVEVYVCk7CisKKyAgICBnX29iamVjdF91bnJlZihmaXh0dXJlLT5v
YmopOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfcHVzaF9idXR0
b24oQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAg
Ly8gVGhpcyBpcyBhbiBleHRyYW5lb3VzIG9iamVjdCBvZiBBVEtfUk9MRV9QQU5FTCB3aGljaCB3
ZSBzaG91bGQgZ2V0IHJpZCBvZi4KKyAgICBmaXh0dXJlLT5vYmogPSBhdGtfb2JqZWN0X3JlZl9h
Y2Nlc3NpYmxlX2NoaWxkKGZpeHR1cmUtPmRvY3VtZW50LCAwKTsKKyAgICBnX2Fzc2VydChmaXh0
dXJlLT5vYmopOworCisgICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+b2JqLCAw
LCBBVEtfUk9MRV9QVVNIX0JVVFRPTik7CisKKyAgICBnX29iamVjdF91bnJlZihmaXh0dXJlLT5v
YmopOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfcmFkaW9fYnV0
dG9uKEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAg
IC8vIFRoaXMgaXMgYW4gZXh0cmFuZW91cyBvYmplY3Qgb2YgQVRLX1JPTEVfUEFORUwgd2hpY2gg
d2Ugc2hvdWxkIGdldCByaWQgb2YuCisgICAgZml4dHVyZS0+b2JqID0gYXRrX29iamVjdF9yZWZf
YWNjZXNzaWJsZV9jaGlsZChmaXh0dXJlLT5kb2N1bWVudCwgMCk7CisgICAgZ19hc3NlcnQoZml4
dHVyZS0+b2JqKTsKKworICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPm9iaiwg
MCwgQVRLX1JPTEVfUkFESU9fQlVUVE9OKTsKKworICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUt
Pm9iaik7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBndGtf
dGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7CisKKyAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0
dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOworCisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9hdGsv
dGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2RvY3VtZW50X2ZyYW1lIiwKKyAgICAgICAgICAgICAg
IEF0a1JvbGVzRml4dHVyZSwgSFRNTF9ET0NVTUVOVF9GUkFNRSwKKyAgICAgICAgICAgICAgIGF0
a19yb2xlc19maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dl
dF9yb2xlX2RvY3VtZW50X2ZyYW1lLAorICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVf
dGVhcmRvd24pOworCisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9hdGsvdGVzdF93ZWJraXRfYXRr
X2dldF9yb2xlX2hlYWRpbmciLAorICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1M
X0hFQURJTkcsCisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV9zZXR1cCwKKyAgICAg
ICAgICAgICAgIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9oZWFkaW5nLAorICAgICAgICAgICAg
ICAgYXRrX3JvbGVzX2ZpeHR1cmVfdGVhcmRvd24pOworCisgICAgZ190ZXN0X2FkZCgiL3dlYmtp
dC9hdGsvdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2ltYWdlIiwKKyAgICAgICAgICAgICAgIEF0
a1JvbGVzRml4dHVyZSwgSFRNTF9JTUFHRSwKKyAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0
dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2ltYWdl
LAorICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfdGVhcmRvd24pOworCisgICAgZ190
ZXN0X2FkZCgiL3dlYmtpdC9hdGsvdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xpbmsiLAorICAg
ICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX0xJTktfVEVYVCwKKyAgICAgICAgICAg
ICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF93ZWJraXRf
YXRrX2dldF9yb2xlX2xpbmssCisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFy
ZG93bik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0
X3JvbGVfbGlzdF9hbmRfaXRlbSIsCisgICAgICAgICAgICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhU
TUxfTElTVCwKKyAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAorICAgICAg
ICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xpc3RfYW5kX2l0ZW0sCisgICAgICAg
ICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICBnX3Rlc3RfYWRkKCIv
d2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfcGFyYWdyYXBoIiwKKyAgICAgICAg
ICAgICAgIEF0a1JvbGVzRml4dHVyZSwgSFRNTF9QQVJBR1JBUEgsCisgICAgICAgICAgICAgICBh
dGtfcm9sZXNfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X2F0a19n
ZXRfcm9sZV9wYXJhZ3JhcGgsCisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFy
ZG93bik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0
X3JvbGVfc2VjdGlvbiIsCisgICAgICAgICAgICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhUTUxfU0VD
VElPTiwKKyAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAorICAgICAgICAg
ICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX3NlY3Rpb24sCisgICAgICAgICAgICAgICBh
dGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0
ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfdGFibGUiLAorICAgICAgICAgICAgICAgQXRrUm9s
ZXNGaXh0dXJlLCBIVE1MX1RBQkxFLAorICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVf
c2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfdGFibGUsCisg
ICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICBnX3Rlc3Rf
YWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfc2VwYXJhdG9yIiwKKyAg
ICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVyZSwgSFRNTF9TRVBBUkFUT1IsCisgICAgICAgICAg
ICAgICBhdGtfcm9sZXNfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0
X2F0a19nZXRfcm9sZV9zZXBhcmF0b3IsCisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVy
ZV90ZWFyZG93bik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9h
dGtfZ2V0X3JvbGVfY29tYm9ib3giLAorICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBI
VE1MX0NPTUJPQk9YLAorICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAsCisg
ICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfY29tYm9ib3gsCisgICAgICAg
ICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICAvKiBGb3JtIHJvbGVz
ICovCisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9hdGsvdGVzdF93ZWJraXRfYXRrX2dldF9yb2xl
X2Zvcm0iLAorICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX0ZPUk0sCisgICAg
ICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3Rf
d2Via2l0X2F0a19nZXRfcm9sZV9mb3JtLAorICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1
cmVfdGVhcmRvd24pOworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvYXRrL3Rlc3Rfd2Via2l0X2F0
a19nZXRfcm9sZV9jaGVja19ib3giLAorICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBI
VE1MX0NIRUNLX0JPWCwKKyAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAor
ICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2NoZWNrX2JveCwKKyAgICAg
ICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3RlYXJkb3duKTsKKworICAgIGdfdGVzdF9hZGQo
Ii93ZWJraXQvYXRrL3Rlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9lbnRyeSIsCisgICAgICAgICAg
ICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhUTUxfTEFCRUxFRF9FTlRSWSwKKyAgICAgICAgICAgICAg
IGF0a19yb2xlc19maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRr
X2dldF9yb2xlX2VudHJ5LAorICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfdGVhcmRv
d24pOworCisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9hdGsvdGVzdF93ZWJraXRfYXRrX2dldF9y
b2xlX2xhYmVsIiwKKyAgICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVyZSwgSFRNTF9MQUJFTEVE
X0VOVFJZLAorICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAsCisgICAgICAg
ICAgICAgICB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfbGFiZWwsCisgICAgICAgICAgICAgICBh
dGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0
ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfbGlzdGJveCIsCisgICAgICAgICAgICAgICBBdGtS
b2xlc0ZpeHR1cmUsIEhUTUxfTElTVEJPWCwKKyAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0
dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xpc3Ri
b3gsCisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICBn
X3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfcGFzc3dvcmRf
dGV4dCIsCisgICAgICAgICAgICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhUTUxfUEFTU1dPUkRfVEVY
VCwKKyAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAorICAgICAgICAgICAg
ICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX3Bhc3N3b3JkX3RleHQsCisgICAgICAgICAgICAg
ICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0
L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfcHVzaF9idXR0b24iLAorICAgICAgICAgICAg
ICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX1BVU0hfQlVUVE9OLAorICAgICAgICAgICAgICAgYXRr
X3JvbGVzX2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF9hdGtfZ2V0
X3JvbGVfcHVzaF9idXR0b24sCisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFy
ZG93bik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0
X3JvbGVfcmFkaW9fYnV0dG9uIiwKKyAgICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVyZSwgSFRN
TF9SQURJT19CVVRUT04sCisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV9zZXR1cCwK
KyAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9yYWRpb19idXR0b24sCisg
ICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICByZXR1cm4g
Z190ZXN0X3J1bigpOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRHdGsvdGVzdGNvbnRleHRtZW51LmMgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdEd0ay90ZXN0Y29udGV4dG1lbnUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi41NGFhYTU3Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRHdGsvdGVzdGNvbnRleHRtZW51LmMKQEAgLTAsMCArMSwzMTQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlIDx3ZWJraXQvd2Via2l0Lmg+CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjaGFyICpkYXRh
OworICAgIGd1aW50IGZsYWc7Cit9IFRlc3RJbmZvOworCitzdGF0aWMgR01haW5Mb29wICpsb29w
OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgV2ViS2l0V2ViVmlldyAqd2ViVmlldzsKKyAgICBU
ZXN0SW5mbyAqaW5mbzsKK30gQ29udGV4dE1lbnVGaXh0dXJlOworCitzdGF0aWMgVGVzdEluZm8g
KnRlc3RJbmZvTmV3KGNvbnN0IGNoYXIgKmRhdGEsIGd1aW50IGZsYWcpCit7CisgICAgVGVzdElu
Zm8gKmluZm8gPSBnX3NsaWNlX25ldyhUZXN0SW5mbyk7CisgICAgaW5mby0+ZGF0YSA9IGdfc3Ry
ZHVwKGRhdGEpOworICAgIGluZm8tPmZsYWcgPSBmbGFnOworCisgICAgcmV0dXJuIGluZm87Cit9
CisKK3N0YXRpYyB2b2lkIHRlc3RJbmZvRGVzdHJveShUZXN0SW5mbyAqaW5mbykKK3sKKyAgICBn
X2ZyZWUoaW5mby0+ZGF0YSk7CisgICAgZ19zbGljZV9mcmVlKFRlc3RJbmZvLCBpbmZvKTsKK30K
Kworc3RhdGljIHZvaWQgY29udGV4dE1lbnVGaXh0dXJlU2V0dXAoQ29udGV4dE1lbnVGaXh0dXJl
ICpmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgZml4dHVyZS0+d2ViVmlldyA9
IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGxvb3AgPSBnX21h
aW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisgICAgZml4dHVyZS0+aW5mbyA9IChUZXN0SW5mbyAq
KWRhdGE7Cit9CisKK3N0YXRpYyB2b2lkIGNvbnRleHRNZW51Rml4dHVyZVRlYXJkb3duKENvbnRl
eHRNZW51Rml4dHVyZSAqZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGdfb2Jq
ZWN0X3VucmVmKGZpeHR1cmUtPndlYlZpZXcpOworICAgIGdfbWFpbl9sb29wX3VucmVmKGxvb3Ap
OworICAgIHRlc3RJbmZvRGVzdHJveShmaXh0dXJlLT5pbmZvKTsKK30KKworc3RhdGljIEdMaXN0
ICpjaGVja0FjdGlvbihHTGlzdCAqaXRlciwgV2ViS2l0Q29udGV4dE1lbnVBY3Rpb24gYWN0aW9u
KQoreworICAgIEd0a01lbnVJdGVtICppdGVtID0gKEd0a01lbnVJdGVtICopaXRlci0+ZGF0YTsK
KworICAgIGdfYXNzZXJ0KEdUS19JU19NRU5VX0lURU0oaXRlbSkpOworICAgIGdfYXNzZXJ0KHdl
YmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRfYWN0aW9uKGl0ZW0pID09IGFjdGlvbik7CisKKyAg
ICByZXR1cm4gaXRlci0+bmV4dDsKK30KKworc3RhdGljIEdMaXN0ICpjaGVja0FjdGlvbldpdGhT
dWJtZW51KEdMaXN0ICppdGVyLCBXZWJLaXRDb250ZXh0TWVudUFjdGlvbiBhY3Rpb24pCit7Cisg
ICAgR3RrTWVudUl0ZW0gKml0ZW0gPSAoR3RrTWVudUl0ZW0gKilpdGVyLT5kYXRhOworCisgICAg
Z19hc3NlcnQoR1RLX0lTX01FTlVfSVRFTShpdGVtKSk7CisgICAgZ19hc3NlcnQod2Via2l0X2Nv
bnRleHRfbWVudV9pdGVtX2dldF9hY3Rpb24oaXRlbSkgPT0gYWN0aW9uKTsKKyAgICBnX2Fzc2Vy
dChHVEtfSVNfTUVOVShndGtfbWVudV9pdGVtX2dldF9zdWJtZW51KGl0ZW0pKSk7CisKKyAgICBy
ZXR1cm4gaXRlci0+bmV4dDsKK30KKworc3RhdGljIEdMaXN0ICpjaGVja1NlcGFyYXRvcihHTGlz
dCAqaXRlcikKK3sKKyAgICBHdGtNZW51SXRlbSAqaXRlbSA9IChHdGtNZW51SXRlbSAqKWl0ZXIt
PmRhdGE7CisKKyAgICBnX2Fzc2VydChHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSk7
CisKKyAgICByZXR1cm4gaXRlci0+bmV4dDsKK30KKworc3RhdGljIGdib29sZWFuIGNvbnRleHRN
ZW51Q2FsbGJhY2soV2ViS2l0V2ViVmlldyAqd2ViVmlldywgR3RrV2lkZ2V0ICpkZWZhdWx0TWVu
dSwgV2ViS2l0SGl0VGVzdFJlc3VsdCAqaGl0VGVzdFJlc3VsdCwgZ2Jvb2xlYW4ga2V5Ym9hcmRN
b2RlLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBUZXN0SW5mbyAqaW5mbyA9IChUZXN0SW5m
byAqKXVzZXJEYXRhOworICAgIGd1aW50IGNvbnRleHQ7CisgICAgR0xpc3QgKml0ZW1zOworICAg
IEdMaXN0ICppdGVyOworCisgICAgLyogQ2hlY2sgc2lnbmFsIHBhcmFtZXRlcnMgKi8KKyAgICBn
X2Fzc2VydChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldykpOworICAgIGdfYXNzZXJ0KEdUS19J
U19NRU5VKGRlZmF1bHRNZW51KSk7CisgICAgZ19hc3NlcnQoV0VCS0lUX0lTX0hJVF9URVNUX1JF
U1VMVChoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQoIWtleWJvYXJkTW9kZSk7CisKKyAg
ICBnX29iamVjdF9nZXQoaGl0VGVzdFJlc3VsdCwgImNvbnRleHQiLCAmY29udGV4dCwgTlVMTCk7
CisgICAgZ19hc3NlcnQoY29udGV4dCAmIGluZm8tPmZsYWcpOworCisgICAgaXRlbXMgPSBndGtf
Y29udGFpbmVyX2dldF9jaGlsZHJlbihHVEtfQ09OVEFJTkVSKGRlZmF1bHRNZW51KSk7CisgICAg
c3dpdGNoIChpbmZvLT5mbGFnKSB7CisgICAgY2FzZSBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NP
TlRFWFRfRE9DVU1FTlQ6CisgICAgICAgIGl0ZXIgPSBpdGVtczsKKyAgICAgICAgaXRlciA9IGNo
ZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0dPX0JBQ0spOworICAg
ICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05f
R09fRk9SV0FSRCk7CisgICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09O
VEVYVF9NRU5VX0FDVElPTl9TVE9QKTsKKyAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIs
IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1JFTE9BRCk7CisgICAgICAgIGdfYXNzZXJ0KCFp
dGVyKTsKKworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9ISVRfVEVTVF9SRVNVTFRf
Q09OVEVYVF9JTUFHRToKKyAgICAgICAgaXRlciA9IGl0ZW1zOworICAgICAgICBpdGVyID0gY2hl
Y2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9JTUFHRV9JTl9O
RVdfV0lORE9XKTsKKyAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05U
RVhUX01FTlVfQUNUSU9OX0RPV05MT0FEX0lNQUdFX1RPX0RJU0spOworICAgICAgICBpdGVyID0g
Y2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9JTUFHRV9U
T19DTElQQk9BUkQpOworICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NP
TlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9JTUFHRV9VUkxfVE9fQ0xJUEJPQVJEKTsKKyAgICAgICAg
Z19hc3NlcnQoIWl0ZXIpOworCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0hJVF9U
RVNUX1JFU1VMVF9DT05URVhUX0VESVRBQkxFOgorICAgICAgICBpdGVyID0gaXRlbXM7CisgICAg
ICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9D
VVQpOworICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVO
VV9BQ1RJT05fQ09QWSk7CisgICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRf
Q09OVEVYVF9NRU5VX0FDVElPTl9QQVNURSk7CisgICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihp
dGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9ERUxFVEUpOworICAgICAgICBpdGVyID0g
Y2hlY2tTZXBhcmF0b3IoaXRlcik7CisgICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9TRUxFQ1RfQUxMKTsKKyAgICAgICAgaXRlciA9IGNo
ZWNrU2VwYXJhdG9yKGl0ZXIpOworICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb25XaXRoU3VibWVu
dShpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9JTlBVVF9NRVRIT0RTKTsKKyAgICAg
ICAgaXRlciA9IGNoZWNrQWN0aW9uV2l0aFN1Ym1lbnUoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVO
VV9BQ1RJT05fVU5JQ09ERSk7CisgICAgICAgIGdfYXNzZXJ0KCFpdGVyKTsKKworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9MSU5LOgorICAg
ICAgICBpdGVyID0gaXRlbXM7CisgICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0xJTkspOworICAgICAgICBpdGVyID0gY2hlY2tB
Y3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9MSU5LX0lOX05FV19X
SU5ET1cpOworICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRf
TUVOVV9BQ1RJT05fRE9XTkxPQURfTElOS19UT19ESVNLKTsKKyAgICAgICAgaXRlciA9IGNoZWNr
QWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFlfTElOS19UT19DTElQ
Qk9BUkQpOworICAgICAgICBnX2Fzc2VydCghaXRlcik7CisKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICB9CisKKyAgICBn
X2xpc3RfZnJlZShpdGVtcyk7CisgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKKworICAgIHJl
dHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZCBwdXNoRXZlbnQoV2ViS2l0V2ViVmlldyAqd2Vi
VmlldykKK3sKKyAgICBHZGtFdmVudCAqZXZlbnQgPSBnZGtfZXZlbnRfbmV3KEdES19CVVRUT05f
UFJFU1MpOworI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDAsIDApCisgICAgR2RrRGV2aWNlTWFu
YWdlciAqZGV2aWNlTWFuYWdlcjsKKyNlbmRpZgorCisgICAgZXZlbnQtPmFueS53aW5kb3cgPSBn
X29iamVjdF9yZWYoZ3RrX3dpZGdldF9nZXRfd2luZG93KEdUS19XSURHRVQod2ViVmlldykpKTsK
KyAgICBldmVudC0+YW55LnNlbmRfZXZlbnQgPSBGQUxTRTsKKyAgICBldmVudC0+YnV0dG9uLnRp
bWUgPSBHREtfQ1VSUkVOVF9USU1FOworICAgIGV2ZW50LT5idXR0b24uYnV0dG9uID0gMzsKKyAg
ICBldmVudC0+YnV0dG9uLnggPSBldmVudC0+YnV0dG9uLnkgPSA1OworICAgIGV2ZW50LT5idXR0
b24ueF9yb290ID0gZXZlbnQtPmJ1dHRvbi54OworICAgIGV2ZW50LT5idXR0b24ueV9yb290ID0g
ZXZlbnQtPmJ1dHRvbi55OworI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDAsIDApCisgICAgZGV2
aWNlTWFuYWdlciA9IGdka19kaXNwbGF5X2dldF9kZXZpY2VfbWFuYWdlcihnZGtfZGlzcGxheV9n
ZXRfZGVmYXVsdCgpKTsKKyAgICBldmVudC0+YnV0dG9uLmRldmljZSA9IGdka19kZXZpY2VfbWFu
YWdlcl9nZXRfY2xpZW50X3BvaW50ZXIoZGV2aWNlTWFuYWdlcik7CisjZW5kaWYKKworICAgIGdk
a19ldmVudF9wdXQoZXZlbnQpOworICAgIGdka19ldmVudF9mcmVlKGV2ZW50KTsKK30KKworc3Rh
dGljIHZvaWQgbG9hZFN0YXR1c0NhbGxiYWNrKFdlYktpdFdlYlZpZXcgKndlYlZpZXcsIEdQYXJh
bVNwZWMgKnNwZWMsIGdwb2ludGVyIGRhdGEpCit7CisgICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0
dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYlZpZXcpOworICAgIFRlc3RJ
bmZvICppbmZvID0gKFRlc3RJbmZvICopZGF0YTsKKworICAgIGdfYXNzZXJ0KHN0YXR1cyAhPSBX
RUJLSVRfTE9BRF9GQUlMRUQpOworCisgICAgaWYgKHN0YXR1cyAhPSBXRUJLSVRfTE9BRF9GSU5J
U0hFRCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAi
Y29udGV4dC1tZW51IiwgR19DQUxMQkFDSyhjb250ZXh0TWVudUNhbGxiYWNrKSwgaW5mbyk7Cisg
ICAgcHVzaEV2ZW50KHdlYlZpZXcpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gbWFwRXZlbnRDYWxs
YmFjayhHdGtXaWRnZXQgKndpZGdldCwgR2RrRXZlbnQgKmV2ZW50LCBncG9pbnRlciBkYXRhKQor
eworICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1cyh3aWRnZXQpOworICAgIENvbnRleHRNZW51Rml4
dHVyZSAqZml4dHVyZSA9IChDb250ZXh0TWVudUZpeHR1cmUgKilkYXRhOworICAgIHdlYmtpdF93
ZWJfdmlld19sb2FkX3N0cmluZyhmaXh0dXJlLT53ZWJWaWV3LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmaXh0dXJlLT5pbmZvLT5kYXRhLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAidGV4dC9odG1sIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
InV0Zi04IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGU6Ly8iKTsKKyAg
ICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVz
IiwgR19DQUxMQkFDSyhsb2FkU3RhdHVzQ2FsbGJhY2spLCBmaXh0dXJlLT5pbmZvKTsKKyAgICBy
ZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RDb250ZXh0TWVudShDb250ZXh0TWVu
dUZpeHR1cmUgKmZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBHdGtBbGxvY2F0
aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDUwLCA1MCB9OworICAgIEd0a1dpZGdldCAqd2luZG93
ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19QT1BVUCk7CisKKyAgICBndGtfd2luZG93X3Jl
c2l6ZShHVEtfV0lORE9XKHdpbmRvdyksIDUwLCA1MCk7CisgICAgZ3RrX3dpbmRvd19tb3ZlKEdU
S19XSU5ET1cod2luZG93KSwgMCwgMCk7CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdU
S19XSURHRVQoZml4dHVyZS0+d2ViVmlldyksICZhbGxvY2F0aW9uKTsKKyAgICBndGtfY29udGFp
bmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmll
dykpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2luZG93LCAibWFwLWV2ZW50IiwgR19DQUxMQkFD
SyhtYXBFdmVudENhbGxiYWNrKSwgZml4dHVyZSk7CisgICAgZ3RrX3dpZGdldF9zaG93X2FsbCh3
aW5kb3cpOworCisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworfQorCitzdGF0aWMgZ2Jvb2xl
YW4gY29udGV4dE1lbnVDdXN0b21JdGVtQ2FsbGJhY2soV2ViS2l0V2ViVmlldyAqd2ViVmlldywg
R3RrV2lkZ2V0ICpkZWZhdWx0TWVudSwgV2ViS2l0SGl0VGVzdFJlc3VsdCAqaGl0VGVzdFJlc3Vs
dCwgZ2Jvb2xlYW4ga2V5Ym9hcmRNb2RlLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBUZXN0
SW5mbyAqaW5mbyA9IChUZXN0SW5mbyAqKXVzZXJEYXRhOworICAgIGd1aW50IGNvbnRleHQ7Cisg
ICAgR0xpc3QgKml0ZW1zOworICAgIEdMaXN0ICppdGVyOworICAgIEd0a1dpZGdldCAqbWVudUl0
ZW07CisgICAgR3RrQWN0aW9uICphY3Rpb247CisKKyAgICAvKiBDaGVjayBzaWduYWwgcGFyYW1l
dGVycyAqLworICAgIGdfYXNzZXJ0KFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSk7CisgICAg
Z19hc3NlcnQoR1RLX0lTX01FTlUoZGVmYXVsdE1lbnUpKTsKKyAgICBnX2Fzc2VydChXRUJLSVRf
SVNfSElUX1RFU1RfUkVTVUxUKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCgha2V5Ym9h
cmRNb2RlKTsKKworICAgIGdfb2JqZWN0X2dldChoaXRUZXN0UmVzdWx0LCAiY29udGV4dCIsICZj
b250ZXh0LCBOVUxMKTsKKyAgICBnX2Fzc2VydChjb250ZXh0ICYgaW5mby0+ZmxhZyk7CisKKyAg
ICBhY3Rpb24gPSBndGtfYWN0aW9uX25ldygiVGVzdEFjdGlvbiIsICJDdXN0b20gQWN0aW9uIiwg
IkN1c3RvbSBBY3Rpb24gVG9vbHRpcCIsIE5VTEwpOworICAgIG1lbnVJdGVtID0gZ3RrX2FjdGlv
bl9jcmVhdGVfbWVudV9pdGVtKGFjdGlvbik7CisgICAgZ19vYmplY3RfdW5yZWYoYWN0aW9uKTsK
KworICAgIGd0a19tZW51X3NoZWxsX2FwcGVuZChHVEtfTUVOVV9TSEVMTChkZWZhdWx0TWVudSks
IG1lbnVJdGVtKTsKKyAgICBndGtfd2lkZ2V0X3Nob3cobWVudUl0ZW0pOworCisgICAgaXRlbXMg
PSBndGtfY29udGFpbmVyX2dldF9jaGlsZHJlbihHVEtfQ09OVEFJTkVSKGRlZmF1bHRNZW51KSk7
CisgICAgaXRlciA9IGl0ZW1zOworICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRf
Q09OVEVYVF9NRU5VX0FDVElPTl9HT19CQUNLKTsKKyAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRl
ciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fR09fRk9SV0FSRCk7CisgICAgaXRlciA9IGNo
ZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1NUT1ApOworICAgIGl0
ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9SRUxPQUQp
OworICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
Tl9OT19BQ1RJT04pOworICAgIGdfYXNzZXJ0KCFpdGVyKTsKKworICAgIGdfbGlzdF9mcmVlKGl0
ZW1zKTsKKyAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworCisgICAgcmV0dXJuIFRSVUU7Cit9
CisKK3N0YXRpYyB2b2lkIHRlc3RDb250ZXh0TWVudUN1c3RvbUl0ZW0oQ29udGV4dE1lbnVGaXh0
dXJlICpmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgR3RrV2lkZ2V0ICp3aW5k
b3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1BPUFVQKTsKKyAgICBndGtfY29udGFpbmVy
X2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldykp
OworICAgIGd0a193aWRnZXRfc2hvd19hbGwod2luZG93KTsKKyAgICBndGtfd2lkZ2V0X2dyYWJf
Zm9jdXMoR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSk7CisKKyAgICB3ZWJraXRfd2ViX3Zp
ZXdfbG9hZF9zdHJpbmcoZml4dHVyZS0+d2ViVmlldywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZml4dHVyZS0+aW5mby0+ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgInRleHQvaHRtbCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1dGYt
OCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlOi8vIik7CisgICAgZ19z
aWduYWxfY29ubmVjdChmaXh0dXJlLT53ZWJWaWV3LCAiY29udGV4dC1tZW51IiwgR19DQUxMQkFD
Syhjb250ZXh0TWVudUN1c3RvbUl0ZW1DYWxsYmFjayksIGZpeHR1cmUtPmluZm8pOworICAgIHB1
c2hFdmVudChmaXh0dXJlLT53ZWJWaWV3KTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIg
Kiphcmd2KQoreworICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKKworICAg
IGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7CisKKyAgICBnX3Rl
c3RfYWRkKCIvd2Via2l0L3Rlc3Rjb250ZXh0bWVudS9kb2N1bWVudCIsIENvbnRleHRNZW51Rml4
dHVyZSwKKyAgICAgICAgICAgICAgIHRlc3RJbmZvTmV3KCI8aHRtbD48Ym9keT48aDE+V2ViS2l0
R1RLKyE8L2gxPjwvYm9keT48L2h0bWw+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFdF
QktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9ET0NVTUVOVCksCisgICAgICAgICAgICAgICBj
b250ZXh0TWVudUZpeHR1cmVTZXR1cCwgdGVzdENvbnRleHRNZW51LCBjb250ZXh0TWVudUZpeHR1
cmVUZWFyZG93bik7CisgICAgLyogV2UgaGFyZGNvZGUgYWxsIGVsZW1lbnRzIHRvIGJlIGF0IDAs
MCBzbyB0aGF0IHdlIGtub3cgd2hlcmUgdG8gZ2VuZXJhdGUgdGhlIGJ1dHRvbiBldmVudHMgKi8K
KyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L3Rlc3Rjb250ZXh0bWVudS9pbWFnZSIsIENvbnRleHRN
ZW51Rml4dHVyZSwKKyAgICAgICAgICAgICAgIHRlc3RJbmZvTmV3KCI8aHRtbD48Ym9keT48aW1n
IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDowOyB0b3A6MCcgc3JjPScweGRlYWRiZWVm
JyB3aWR0aD01MCBoZWlnaHQ9NTA+PC9pbWc+PC9ib2R5PjwvaHRtbD4iLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0lNQUdFKSwKKyAg
ICAgICAgICAgICAgIGNvbnRleHRNZW51Rml4dHVyZVNldHVwLCB0ZXN0Q29udGV4dE1lbnUsIGNv
bnRleHRNZW51Rml4dHVyZVRlYXJkb3duKTsKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L3Rlc3Rj
b250ZXh0bWVudS9lZGl0YWJsZSIsIENvbnRleHRNZW51Rml4dHVyZSwKKyAgICAgICAgICAgICAg
IHRlc3RJbmZvTmV3KCI8aHRtbD48Ym9keT48aW5wdXQgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRl
OyBsZWZ0OjA7IHRvcDowJyBzaXplPSczNSc+PC9pbnB1dD4+PC9ib2R5PjwvaHRtbD4iLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0VE
SVRBQkxFKSwKKyAgICAgICAgICAgICAgIGNvbnRleHRNZW51Rml4dHVyZVNldHVwLCB0ZXN0Q29u
dGV4dE1lbnUsIGNvbnRleHRNZW51Rml4dHVyZVRlYXJkb3duKTsKKyAgICBnX3Rlc3RfYWRkKCIv
d2Via2l0L3Rlc3Rjb250ZXh0bWVudS9saW5rIiwgQ29udGV4dE1lbnVGaXh0dXJlLAorICAgICAg
ICAgICAgICAgdGVzdEluZm9OZXcoIjxodG1sPjxib2R5PjxhIHN0eWxlPSdwb3NpdGlvbjphYnNv
bHV0ZTsgbGVmdDowOyB0b3A6MCcgaHJlZj0naHR0cDovL3d3dy5leGFtcGxlLmNvbSc+SEVMTE8g
V09STEQ8L2E+PC9ib2R5PjwvaHRtbD4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VC
S0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0xJTkspLAorICAgICAgICAgICAgICAgY29udGV4
dE1lbnVGaXh0dXJlU2V0dXAsIHRlc3RDb250ZXh0TWVudSwgY29udGV4dE1lbnVGaXh0dXJlVGVh
cmRvd24pOworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvdGVzdGNvbnRleHRtZW51L2N1c3RvbWl0
ZW0iLCBDb250ZXh0TWVudUZpeHR1cmUsCisgICAgICAgICAgICAgICB0ZXN0SW5mb05ldygiPGh0
bWw+PGJvZHk+PGgxPldlYktpdEdUSyshPC9oMT48L2JvZHk+PC9odG1sPiIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfRE9DVU1FTlQp
LAorICAgICAgICAgICAgICAgY29udGV4dE1lbnVGaXh0dXJlU2V0dXAsIHRlc3RDb250ZXh0TWVu
dUN1c3RvbUl0ZW0sIGNvbnRleHRNZW51Rml4dHVyZVRlYXJkb3duKTsKKworICAgIHJldHVybiBn
X3Rlc3RfcnVuKCk7Cit9CisKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0R3RrL3Rlc3Rjb3B5YW5kcGFzdGUuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0R3RrL3Rlc3Rjb3B5YW5kcGFzdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5iYjM4ZWE2Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRHdGsvdGVzdGNvcHlhbmRwYXN0ZS5jCkBAIC0wLDAgKzEsMjY2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdHJpbmcu
aD4KKyNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4K
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oPgorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0pTQ29udGV4dFJlZi5oPgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgY2hhciog
cGFnZTsKKyAgICBjaGFyKiBleHBlY3RlZENvbnRlbnQ7Cit9IFRlc3RJbmZvOworCit0eXBlZGVm
IHN0cnVjdCB7CisgICAgR3RrV2lkZ2V0KiB3aW5kb3c7CisgICAgV2ViS2l0V2ViVmlldyogd2Vi
VmlldzsKKyAgICBHTWFpbkxvb3AqIGxvb3A7CisgICAgVGVzdEluZm8qIGluZm87Cit9IENvcHlB
bmRQYXN0ZUZpeHR1cmU7CisKK1Rlc3RJbmZvKgordGVzdF9pbmZvX25ldyhjb25zdCBjaGFyKiBw
YWdlLCBjb25zdCBjaGFyKiBleHBlY3RlZENvbnRlbnQpCit7CisgICAgVGVzdEluZm8qIGluZm87
CisgICAgaW5mbyA9IGdfc2xpY2VfbmV3MChUZXN0SW5mbyk7CisgICAgaW5mby0+cGFnZSA9IGdf
c3RyZHVwKHBhZ2UpOworICAgIGlmIChleHBlY3RlZENvbnRlbnQpCisgICAgICAgIGluZm8tPmV4
cGVjdGVkQ29udGVudCA9IGdfc3RyZHVwKGV4cGVjdGVkQ29udGVudCk7CisgICAgcmV0dXJuIGlu
Zm87Cit9CisKK3ZvaWQKK3Rlc3RfaW5mb19kZXN0cm95KFRlc3RJbmZvKiBpbmZvKQoreworICAg
IGdfZnJlZShpbmZvLT5wYWdlKTsKKyAgICBnX2ZyZWUoaW5mby0+ZXhwZWN0ZWRDb250ZW50KTsK
KyAgICBnX3NsaWNlX2ZyZWUoVGVzdEluZm8sIGluZm8pOworfQorCitzdGF0aWMgdm9pZCBjb3B5
X2FuZF9wYXN0ZV9maXh0dXJlX3NldHVwKENvcHlBbmRQYXN0ZUZpeHR1cmUqIGZpeHR1cmUsIGdj
b25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBmaXh0dXJlLT5sb29wID0gZ19tYWluX2xvb3BfbmV3
KE5VTEwsIFRSVUUpOworCisgICAgZml4dHVyZS0+d2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RL
X1dJTkRPV19UT1BMRVZFTCk7CisgICAgZml4dHVyZS0+d2ViVmlldyA9IFdFQktJVF9XRUJfVklF
Vyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworCisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NP
TlRBSU5FUihmaXh0dXJlLT53aW5kb3cpLCBHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpKTsK
K30KKworc3RhdGljIHZvaWQgY29weV9hbmRfcGFzdGVfZml4dHVyZV90ZWFyZG93bihDb3B5QW5k
UGFzdGVGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgZ3RrX3dp
ZGdldF9kZXN0cm95KGZpeHR1cmUtPndpbmRvdyk7CisgICAgZ19tYWluX2xvb3BfdW5yZWYoZml4
dHVyZS0+bG9vcCk7CisgICAgdGVzdF9pbmZvX2Rlc3Ryb3koZml4dHVyZS0+aW5mbyk7Cit9CisK
K3N0YXRpYyB2b2lkIGxvYWRfc3RhdHVzX2NiKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEdQYXJh
bVNwZWMqIHNwZWMsIGdwb2ludGVyIGRhdGEpCit7CisgICAgQ29weUFuZFBhc3RlRml4dHVyZSog
Zml4dHVyZSA9IChDb3B5QW5kUGFzdGVGaXh0dXJlKilkYXRhOworICAgIFdlYktpdExvYWRTdGF0
dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJWaWV3KTsKKyAg
ICBpZiAoc3RhdHVzICE9IFdFQktJVF9MT0FEX0ZJTklTSEVEKQorICAgICAgICByZXR1cm47CisK
KyAgICBHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCA9IGd0a19jbGlwYm9hcmRfZ2V0KEdES19TRUxF
Q1RJT05fQ0xJUEJPQVJEKTsKKyAgICBndGtfY2xpcGJvYXJkX2NsZWFyKGNsaXBib2FyZCk7CisK
KyAgICB3ZWJraXRfd2ViX3ZpZXdfY29weV9jbGlwYm9hcmQod2ViVmlldyk7CisKKyAgICBnY2hh
ciogdGV4dCA9IGd0a19jbGlwYm9hcmRfd2FpdF9mb3JfdGV4dChjbGlwYm9hcmQpOworICAgIGdf
YXNzZXJ0KHRleHQgfHwgIWZpeHR1cmUtPmluZm8tPmV4cGVjdGVkQ29udGVudCk7CisgICAgZ19h
c3NlcnQoIXRleHQgfHwgIXN0cmNtcCh0ZXh0LCBmaXh0dXJlLT5pbmZvLT5leHBlY3RlZENvbnRl
bnQpKTsKKyAgICBnX2ZyZWUodGV4dCk7CisKKyAgICAvLyBWZXJpZnkgdGhhdCB0aGUgbWFya3Vw
IHN0YXJ0cyB3aXRoIHRoZSBwcm9wZXIgY29udGVudC10eXBlIG1ldGEgdGFnIHByZWZpeC4KKyAg
ICBHdGtTZWxlY3Rpb25EYXRhKiBzZWxlY3Rpb25EYXRhID0gZ3RrX2NsaXBib2FyZF93YWl0X2Zv
cl9jb250ZW50cyhjbGlwYm9hcmQsIGdka19hdG9tX2ludGVybigidGV4dC9odG1sIiwgRkFMU0Up
KTsKKyAgICBpZiAoc2VsZWN0aW9uRGF0YSkgeworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciog
bWFya3VwUHJlZml4ID0gIjxtZXRhIGh0dHAtZXF1aXY9XCJjb250ZW50LXR5cGVcIiBjb250ZW50
PVwidGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04XCI+IjsKKyAgICAgICAgY2hhciogbWFya3VwID0g
Z19zdHJuZHVwKChjb25zdCBjaGFyKikgZ3RrX3NlbGVjdGlvbl9kYXRhX2dldF9kYXRhKHNlbGVj
dGlvbkRhdGEpLAorICAgICAgICAgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX2dldF9sZW5ndGgoc2Vs
ZWN0aW9uRGF0YSkpOworICAgICAgICBnX2Fzc2VydChzdHJsZW4obWFya3VwUHJlZml4KSA8PSBz
dHJsZW4obWFya3VwKSk7CisgICAgICAgIGdfYXNzZXJ0KCFzdHJuY21wKG1hcmt1cFByZWZpeCwg
bWFya3VwLCBzdHJsZW4obWFya3VwUHJlZml4KSkpOworICAgICAgICBnX2ZyZWUobWFya3VwKTsK
KyAgICB9CisKKyAgICBnX2Fzc2VydCghZ3RrX2NsaXBib2FyZF93YWl0X2lzX3VyaXNfYXZhaWxh
YmxlKGNsaXBib2FyZCkpOworICAgIGdfYXNzZXJ0KCFndGtfY2xpcGJvYXJkX3dhaXRfaXNfaW1h
Z2VfYXZhaWxhYmxlKGNsaXBib2FyZCkpOworCisgICAgZ19tYWluX2xvb3BfcXVpdChmaXh0dXJl
LT5sb29wKTsKK30KKworZ2Jvb2xlYW4gbWFwX2V2ZW50X2NiKEd0a1dpZGdldCAqd2lkZ2V0LCBH
ZGtFdmVudCogZXZlbnQsIGdwb2ludGVyIGRhdGEpCit7CisgICAgQ29weUFuZFBhc3RlRml4dHVy
ZSogZml4dHVyZSA9IChDb3B5QW5kUGFzdGVGaXh0dXJlKilkYXRhOworICAgIHdlYmtpdF93ZWJf
dmlld19sb2FkX3N0cmluZyhmaXh0dXJlLT53ZWJWaWV3LCBmaXh0dXJlLT5pbmZvLT5wYWdlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGV4dC9odG1sIiwgInV0Zi04IiwgImZp
bGU6Ly8iKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfY29weV9h
bmRfcGFzdGUoQ29weUFuZFBhc3RlRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRh
KQoreworICAgIGZpeHR1cmUtPmluZm8gPSAoVGVzdEluZm8qKWRhdGE7CisgICAgZ19zaWduYWxf
Y29ubmVjdChmaXh0dXJlLT53aW5kb3csICJtYXAtZXZlbnQiLAorICAgICAgICAgICAgICAgICAg
ICAgR19DQUxMQkFDSyhtYXBfZXZlbnRfY2IpLCBmaXh0dXJlKTsKKworICAgIGd0a193aWRnZXRf
c2hvdyhmaXh0dXJlLT53aW5kb3cpOworICAgIGd0a193aWRnZXRfc2hvdyhHVEtfV0lER0VUKGZp
eHR1cmUtPndlYlZpZXcpKTsKKyAgICBndGtfd2luZG93X3ByZXNlbnQoR1RLX1dJTkRPVyhmaXh0
dXJlLT53aW5kb3cpKTsKKyAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMoR1RLX1dJREdFVChmaXh0
dXJlLT53ZWJWaWV3KSk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcs
ICJub3RpZnk6OmxvYWQtc3RhdHVzIiwKKyAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0so
bG9hZF9zdGF0dXNfY2IpLCBmaXh0dXJlKTsKKworICAgIGdfbWFpbl9sb29wX3J1bihmaXh0dXJl
LT5sb29wKTsKK30KKworc3RhdGljIENvcHlBbmRQYXN0ZUZpeHR1cmUqIGN1cnJlbnRGaXh0dXJl
Oworc3RhdGljIEpTVmFsdWVSZWYgcnVuUGFzdGVUZXN0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXpl
X3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKQoreworICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1cyhHVEtfV0lER0VUKGN1
cnJlbnRGaXh0dXJlLT53ZWJWaWV3KSk7CisKKyAgICAvLyBTaW11bGF0ZSBhIHBhc3RlIGtleWJv
YXJkIHNlcXVlbmNlLgorICAgIEdka0V2ZW50KiBldmVudCA9IGdka19ldmVudF9uZXcoR0RLX0tF
WV9QUkVTUyk7CisgICAgZXZlbnQtPmtleS5rZXl2YWwgPSBnZGtfdW5pY29kZV90b19rZXl2YWwo
J3YnKTsKKyAgICBldmVudC0+a2V5LnN0YXRlID0gR0RLX0NPTlRST0xfTUFTSzsKKyAgICBldmVu
dC0+a2V5LndpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyhHVEtfV0lER0VUKGN1cnJlbnRG
aXh0dXJlLT53ZWJWaWV3KSk7CisgICAgZ19vYmplY3RfcmVmKGV2ZW50LT5rZXkud2luZG93KTsK
KyNpZm5kZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICBHZGtEZXZpY2VNYW5hZ2VyKiBtYW5hZ2Vy
ID0gIGdka19kaXNwbGF5X2dldF9kZXZpY2VfbWFuYWdlcihnZGtfd2luZG93X2dldF9kaXNwbGF5
KGV2ZW50LT5rZXkud2luZG93KSk7CisgICAgZ2RrX2V2ZW50X3NldF9kZXZpY2UoZXZlbnQsIGdk
a19kZXZpY2VfbWFuYWdlcl9nZXRfY2xpZW50X3BvaW50ZXIobWFuYWdlcikpOworI2VuZGlmCisK
KyAgICBHZGtLZXltYXBLZXkqIGtleXM7CisgICAgZ2ludCBuX2tleXM7CisgICAgaWYgKGdka19r
ZXltYXBfZ2V0X2VudHJpZXNfZm9yX2tleXZhbChnZGtfa2V5bWFwX2dldF9kZWZhdWx0KCksIGV2
ZW50LT5rZXkua2V5dmFsLCAma2V5cywgJm5fa2V5cykpIHsKKyAgICAgICAgZXZlbnQtPmtleS5o
YXJkd2FyZV9rZXljb2RlID0ga2V5c1swXS5rZXljb2RlOworICAgICAgICBnX2ZyZWUoa2V5cyk7
CisgICAgfQorCisgICAgZ3RrX21haW5fZG9fZXZlbnQoZXZlbnQpOworICAgIGV2ZW50LT5rZXku
dHlwZSA9IEdES19LRVlfUkVMRUFTRTsKKyAgICBndGtfbWFpbl9kb19ldmVudChldmVudCk7Cisg
ICAgZ2RrX2V2ZW50X2ZyZWUoZXZlbnQpOworCisgICAgSlNTdHJpbmdSZWYgc2NyaXB0U3RyaW5n
ID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImRvY3VtZW50LmJvZHkuaW5uZXJIVE1M
OyIpOworICAgIEpTVmFsdWVSZWYgdmFsdWUgPSBKU0V2YWx1YXRlU2NyaXB0KGNvbnRleHQsIHNj
cmlwdFN0cmluZywgMCwgMCwgMCwgMCk7CisgICAgSlNTdHJpbmdSZWxlYXNlKHNjcmlwdFN0cmlu
Zyk7CisKKyAgICBnX2Fzc2VydChKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgdmFsdWUpKTsKKyAg
ICBKU1N0cmluZ1JlZiBhY3R1YWwgPSBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIHZhbHVl
LCBleGNlcHRpb24pOworICAgIGdfYXNzZXJ0KCFleGNlcHRpb24gfHwgISpleGNlcHRpb24pOwor
ICAgIGdfYXNzZXJ0KGN1cnJlbnRGaXh0dXJlLT5pbmZvLT5leHBlY3RlZENvbnRlbnQpOworICAg
IEpTU3RyaW5nUmVmIGV4cGVjdGVkID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoY3Vy
cmVudEZpeHR1cmUtPmluZm8tPmV4cGVjdGVkQ29udGVudCk7CisgICAgZ19hc3NlcnQoSlNTdHJp
bmdJc0VxdWFsKGV4cGVjdGVkLCBhY3R1YWwpKTsKKworICAgIEpTU3RyaW5nUmVsZWFzZShleHBl
Y3RlZCk7CisgICAgSlNTdHJpbmdSZWxlYXNlKGFjdHVhbCk7CisgICAgZ19tYWluX2xvb3BfcXVp
dChjdXJyZW50Rml4dHVyZS0+bG9vcCk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpOworfQorCitzdGF0aWMgdm9pZCB3aW5kb3dfb2JqZWN0X2NsZWFyZWRfY2FsbGJh
Y2soV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIFdlYktpdFdlYkZyYW1lKiB3ZWJfZnJhbWUsIEpT
R2xvYmFsQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dfb2JqZWN0LCBncG9p
bnRlciBkYXRhKQoreworICAgIEpTU3RyaW5nUmVmIG5hbWUgPSBKU1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygicnVuVGVzdCIpOworICAgIEpTT2JqZWN0UmVmIHRlc3RDb21wbGV0ZSA9IEpT
T2JqZWN0TWFrZUZ1bmN0aW9uV2l0aENhbGxiYWNrKGNvbnRleHQsIG5hbWUsIHJ1blBhc3RlVGVz
dENhbGxiYWNrKTsKKyAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQsIHdpbmRvd19vYmpl
Y3QsIG5hbWUsIHRlc3RDb21wbGV0ZSwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lLCAwKTsKKyAg
ICBKU1N0cmluZ1JlbGVhc2UobmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIHBhc3RpbmdfdGVzdF9n
ZXRfZGF0YV9jYWxsYmFjayhHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCwgR3RrU2VsZWN0aW9uRGF0
YSogc2VsZWN0aW9uX2RhdGEsIGd1aW50IGluZm8sIGdwb2ludGVyIGRhdGEpCit7CisgICAgZ3Rr
X3NlbGVjdGlvbl9kYXRhX3NldChzZWxlY3Rpb25fZGF0YSwgZ2RrX2F0b21faW50ZXJuKCJ0ZXh0
L2h0bWwiLCBGQUxTRSksIDgsIChjb25zdCBndWNoYXIqKSBkYXRhLCBzdHJsZW4oKGNoYXIqKWRh
dGEpICsgMSk7Cit9CisKK3N0YXRpYyB2b2lkIHBhc3RpbmdfdGVzdF9jbGVhcl9kYXRhX2NhbGxi
YWNrKEd0a0NsaXBib2FyZCogY2xpcGJvYXJkLCBncG9pbnRlciBkYXRhKQoreworICAgIGdfZnJl
ZShkYXRhKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9wYXN0aW5nX21hcmt1cChDb3B5QW5kUGFz
dGVGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgZml4dHVyZS0+
aW5mbyA9IChUZXN0SW5mbyopZGF0YTsKKyAgICBjdXJyZW50Rml4dHVyZSA9IGZpeHR1cmU7CisK
KyAgICBHdGtUYXJnZXRMaXN0KiB0YXJnZXRMaXN0ID0gZ3RrX3RhcmdldF9saXN0X25ldygwLCAw
KTsKKyAgICBndGtfdGFyZ2V0X2xpc3RfYWRkKHRhcmdldExpc3QsIGdka19hdG9tX2ludGVybigi
dGV4dC9odG1sIiwgRkFMU0UpLCAwLCAwKTsKKworICAgIGludCBudW1iZXJPZlRhcmdldHMgPSAx
OworICAgIEd0a1RhcmdldEVudHJ5KiB0YXJnZXRUYWJsZSA9IGd0a190YXJnZXRfdGFibGVfbmV3
X2Zyb21fbGlzdCh0YXJnZXRMaXN0LCAmbnVtYmVyT2ZUYXJnZXRzKTsKKyAgICBndGtfY2xpcGJv
YXJkX3NldF93aXRoX2RhdGEoZ3RrX2NsaXBib2FyZF9nZXQoR0RLX1NFTEVDVElPTl9DTElQQk9B
UkQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRUYWJsZSwgbnVtYmVy
T2ZUYXJnZXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXN0aW5nX3Rlc3Rf
Z2V0X2RhdGFfY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3Rp
bmdfdGVzdF9jbGVhcl9kYXRhX2NhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnX3N0cmR1cChmaXh0dXJlLT5pbmZvLT5leHBlY3RlZENvbnRlbnQpKTsKKyAgICBndGtf
dGFyZ2V0X2xpc3RfdW5yZWYodGFyZ2V0TGlzdCk7CisgICAgZ3RrX3RhcmdldF90YWJsZV9mcmVl
KHRhcmdldFRhYmxlLCBudW1iZXJPZlRhcmdldHMpOworCisgICAgZ19zaWduYWxfY29ubmVjdChm
aXh0dXJlLT53aW5kb3csICJtYXAtZXZlbnQiLAorICAgICAgICAgICAgICAgICAgICAgR19DQUxM
QkFDSyhtYXBfZXZlbnRfY2IpLCBmaXh0dXJlKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1
cmUtPndlYlZpZXcsICJ3aW5kb3ctb2JqZWN0LWNsZWFyZWQiLAorICAgICAgICAgICAgICAgICAg
ICAgR19DQUxMQkFDSyh3aW5kb3dfb2JqZWN0X2NsZWFyZWRfY2FsbGJhY2spLCBmaXh0dXJlKTsK
KworICAgIGd0a193aWRnZXRfc2hvdyhmaXh0dXJlLT53aW5kb3cpOworICAgIGd0a193aWRnZXRf
c2hvdyhHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpKTsKKyAgICBndGtfd2luZG93X3ByZXNl
bnQoR1RLX1dJTkRPVyhmaXh0dXJlLT53aW5kb3cpKTsKKworICAgIGdfbWFpbl9sb29wX3J1bihm
aXh0dXJlLT5sb29wKTsKK30KKworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7
CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAgZ190ZXN0X2J1
Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBjb25zdCBjaGFyKiBzZWxl
Y3RlZF9zcGFuX2h0bWwgPSAiPGh0bWw+PGJvZHk+IgorICAgICAgICAiPHNwYW4gaWQ9XCJtYWlu
c3BhblwiPkFsbCB3b3JrIGFuZCBubyBwbGF5IDxzcGFuPm1ha2UgSmFjayBhIGR1bGw8L3NwYW4+
IGJveS48L3NwYW4+IgorICAgICAgICAiPHNjcmlwdD5kb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5j
b2xsYXBzZSgpO1xuIgorICAgICAgICAiZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0QWxs
Q2hpbGRyZW4oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW5zcGFuJykpO1xuIgorICAgICAg
ICAiPC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4iOworICAgIGNvbnN0IGNoYXIqIG5vX3NlbGVjdGlv
bl9odG1sID0gIjxodG1sPjxib2R5PiIKKyAgICAgICAgIjxzcGFuIGlkPVwibWFpbnNwYW5cIj5B
bGwgd29yayBhbmQgbm8gcGxheSA8c3Bhbj5tYWtlIEphY2sgYSBkdWxsPC9zcGFuPiBib3k8L3Nw
YW4+IgorICAgICAgICAiPHNjcmlwdD5kb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5jb2xsYXBzZSgp
O1xuIgorICAgICAgICAiPC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4iOworCisgICAgZ190ZXN0X2Fk
ZCgiL3dlYmtpdC9jb3B5YW5kcGFzdGUvc2VsZWN0aW9uIiwgQ29weUFuZFBhc3RlRml4dHVyZSwK
KyAgICAgICAgICAgICAgIHRlc3RfaW5mb19uZXcoc2VsZWN0ZWRfc3Bhbl9odG1sLCAiQWxsIHdv
cmsgYW5kIG5vIHBsYXkgbWFrZSBKYWNrIGEgZHVsbCBib3kuIiksCisgICAgICAgICAgICAgICBj
b3B5X2FuZF9wYXN0ZV9maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF9jb3B5X2Fu
ZF9wYXN0ZSwKKyAgICAgICAgICAgICAgIGNvcHlfYW5kX3Bhc3RlX2ZpeHR1cmVfdGVhcmRvd24p
OworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvY29weWFuZHBhc3RlL25vLXNlbGVjdGlvbiIsIENv
cHlBbmRQYXN0ZUZpeHR1cmUsCisgICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KG5vX3NlbGVj
dGlvbl9odG1sLCAwKSwKKyAgICAgICAgICAgICAgIGNvcHlfYW5kX3Bhc3RlX2ZpeHR1cmVfc2V0
dXAsCisgICAgICAgICAgICAgICB0ZXN0X2NvcHlfYW5kX3Bhc3RlLAorICAgICAgICAgICAgICAg
Y29weV9hbmRfcGFzdGVfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICBjb25zdCBjaGFyKiBwYXN0
ZV90ZXN0X2h0bWwgPSAiPGh0bWw+IgorICAgICAgICAiPGJvZHkgb25Mb2FkPVwiZG9jdW1lbnQu
Ym9keS5mb2N1cygpOyBydW5UZXN0KCk7XCIgY29udGVudEVkaXRhYmxlPVwidHJ1ZVwiPiIKKyAg
ICAgICAgIjwvYm9keT48L2h0bWw+IjsKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2NvcHlhbmRw
YXN0ZS9wYXN0ZS1tYXJrdXAiLCBDb3B5QW5kUGFzdGVGaXh0dXJlLAorICAgICAgICAgICAgICAg
dGVzdF9pbmZvX25ldyhwYXN0ZV90ZXN0X2h0bWwsICJib2JieSIpLAorICAgICAgICAgICAgICAg
Y29weV9hbmRfcGFzdGVfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3RfcGFzdGlu
Z19tYXJrdXAsCisgICAgICAgICAgICAgICBjb3B5X2FuZF9wYXN0ZV9maXh0dXJlX3RlYXJkb3du
KTsKKworICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0ZG9tZG9jdW1lbnQuYyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3Rkb21kb2N1bWVudC5jCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjOTk3ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0ZG9tZG9jdW1lbnQuYwpAQCAtMCwwICsx
LDQyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAidGVzdF91dGlscy5oIgorCisjaW5jbHVkZSA8Z2xpYi5oPgor
I2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUg
PHdlYmtpdC93ZWJraXQuaD4KKworI2RlZmluZSBIVE1MX0RPQ1VNRU5UX1RJVExFICI8aHRtbD48
aGVhZD48dGl0bGU+VGhpcyBpcyB0aGUgdGl0bGU8L3RpdGxlPjwvaGVhZD48Ym9keT48L2JvZHk+
PC9odG1sPiIKKyNkZWZpbmUgSFRNTF9ET0NVTUVOVF9FTEVNRU5UUyAiPGh0bWw+PGJvZHk+PHVs
PjxsaT4xPC9saT48bGk+MjwvbGk+PGxpPjM8L2xpPjwvdWw+PC9ib2R5PjwvaHRtbD4iCisjZGVm
aW5lIEhUTUxfRE9DVU1FTlRfRUxFTUVOVFNfQ0xBU1MgIjxodG1sPjxib2R5PjxkaXYgY2xhc3M9
XCJ0ZXN0XCI+PC9kaXY+PGRpdiBjbGFzcz1cInN0cmFuZ2VcIj48L2Rpdj48ZGl2IGNsYXNzPVwi
dGVzdFwiPjwvZGl2PjwvYm9keT48L2h0bWw+IgorI2RlZmluZSBIVE1MX0RPQ1VNRU5UX0VMRU1F
TlRTX0lEICI8aHRtbD48Ym9keT48ZGl2IGlkPVwidGVzdG9rXCI+PC9kaXY+PGRpdiBpZD1cInRl
c3RiYWRcIj5maXJzdDwvZGl2PjxkaXYgaWQ9XCJ0ZXN0YmFkXCI+c2Vjb25kPC9kaXY+PC9ib2R5
PjwvaHRtbD4iCisjZGVmaW5lIEhUTUxfRE9DVU1FTlRfTElOS1MgIjxodG1sPjxoZWFkPjx0aXRs
ZT5UaXRsZTwvdGl0bGU+PC9oZWFkPjxib2R5PjxhIGhyZWY9XCJhYm91dDpibGFua1wiPmJsYW5r
PC9hPjxhIGhyZWY9XCJodHRwOi8vd3d3Lmdvb2dsZS5jb21cIj5nb29nbGU8L2E+PGEgaHJlZj1c
Imh0dHA6Ly93d3cud2Via2l0Lm9yZ1wiPndlYmtpdDwvYT48L2JvZHk+PC9odG1sPiIKKyNkZWZp
bmUgSFRNTF9ET0NVTUVOVF9JRlJBTUUgIjxodG1sPjxoZWFkPjx0aXRsZT5JRnJhbWU8L3RpdGxl
PjwvaGVhZD48Ym9keT48aWZyYW1lIGlkPSdpZnJhbWUnPjwvaWZyYW1lPjxkaXYgaWQ9J3Rlc3Qn
PjwvZGl2PjwvYm9keT48L2h0bWw+IgorI2RlZmluZSBIVE1MX0RPQ1VNRU5UX1RBQkxFICI8aHRt
bD48Ym9keT48dGFibGUgaWQ9XCJ0YWJsZVwiPjwvdGFibGU+PC9ib2R5PjwvaHRtbD4iCisjZGVm
aW5lIEhUTUxfRE9DVU1FTlRfRVZBTFVBVEUgIjxodG1sPjxoZWFkPjx0aXRsZT48L3RpdGxlPjwv
aGVhZD48Ym9keT48ZGl2PkZpcnN0IGRpdjwvZGl2PjxkaXY+U2Vjb25kIGRpdjwvZGl2PjwvYm9k
eT48L2h0bWw+IgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgR3RrV2lkZ2V0KiB3ZWJWaWV3Owor
ICAgIEdNYWluTG9vcCogbG9vcDsKK30gRG9tRG9jdW1lbnRGaXh0dXJlOworCitzdGF0aWMgZ2Jv
b2xlYW4gZmluaXNoX2xvYWRpbmcoRG9tRG9jdW1lbnRGaXh0dXJlKiBmaXh0dXJlKQoreworICAg
IGlmIChnX21haW5fbG9vcF9pc19ydW5uaW5nKGZpeHR1cmUtPmxvb3ApKQorICAgICAgICBnX21h
aW5fbG9vcF9xdWl0KGZpeHR1cmUtPmxvb3ApOworCisgICAgcmV0dXJuIEZBTFNFOworfQorCitz
dGF0aWMgdm9pZCBkb21fZG9jdW1lbnRfZml4dHVyZV9zZXR1cChEb21Eb2N1bWVudEZpeHR1cmUq
IGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBmaXh0dXJlLT5sb29wID0gZ19t
YWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworICAgIGZpeHR1cmUtPndlYlZpZXcgPSB3ZWJraXRf
d2ViX3ZpZXdfbmV3KCk7CisgICAgZ19vYmplY3RfcmVmX3NpbmsoZml4dHVyZS0+d2ViVmlldyk7
CisKKyAgICBpZiAoZGF0YSAhPSBOVUxMKQorICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9z
dHJpbmcoV0VCS0lUX1dFQl9WSUVXIChmaXh0dXJlLT53ZWJWaWV3KSwgKGNvbnN0IGNoYXIqKSBk
YXRhLCBOVUxMLCBOVUxMLCBOVUxMKTsKKworICAgIGdfaWRsZV9hZGQoKEdTb3VyY2VGdW5jKWZp
bmlzaF9sb2FkaW5nLCBmaXh0dXJlKTsKKyAgICBnX21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9v
cCk7Cit9CisKK3N0YXRpYyB2b2lkIGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKERvbURv
Y3VtZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGlmIChm
aXh0dXJlLT53ZWJWaWV3KQorICAgICAgICBnX29iamVjdF91bnJlZihmaXh0dXJlLT53ZWJWaWV3
KTsKKyAgICBnX21haW5fbG9vcF91bnJlZihmaXh0dXJlLT5sb29wKTsKK30KKworc3RhdGljIHZv
aWQgdGVzdF9kb21fZG9jdW1lbnRfdGl0bGUoRG9tRG9jdW1lbnRGaXh0dXJlKiBmaXh0dXJlLCBn
Y29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgZ19hc3NlcnQoZml4dHVyZSk7CisgICAgV2ViS2l0
V2ViVmlldyogdmlldyA9IChXZWJLaXRXZWJWaWV3KilmaXh0dXJlLT53ZWJWaWV3OworICAgIGdf
YXNzZXJ0KHZpZXcpOworICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1bWVudCA9IHdlYmtpdF93
ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50KHZpZXcpOworICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsK
KyAgICBnY2hhciogdGl0bGUgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF90aXRsZShkb2N1bWVu
dCk7CisgICAgZ19hc3NlcnQodGl0bGUpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0aXRsZSwgPT0s
ICJUaGlzIGlzIHRoZSB0aXRsZSIpOworICAgIGdfZnJlZSh0aXRsZSk7CisgICAgd2Via2l0X2Rv
bV9kb2N1bWVudF9zZXRfdGl0bGUoZG9jdW1lbnQsICJUaGlzIGlzIHRoZSBzZWNvbmQgdGl0bGUi
KTsKKyAgICB0aXRsZSA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3RpdGxlKGRvY3VtZW50KTsK
KyAgICBnX2Fzc2VydCh0aXRsZSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRpdGxlLCA9PSwgIlRo
aXMgaXMgdGhlIHNlY29uZCB0aXRsZSIpOworICAgIGdfZnJlZSh0aXRsZSk7Cit9CisKK3N0YXRp
YyB2b2lkIHRlc3RfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19ieV90YWdfbmFtZShEb21Eb2N1
bWVudEZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBnX2Fzc2Vy
dChmaXh0dXJlKTsKKyAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gKFdlYktpdFdlYlZpZXcqKWZp
eHR1cmUtPndlYlZpZXc7CisgICAgZ19hc3NlcnQodmlldyk7CisgICAgV2ViS2l0RE9NRG9jdW1l
bnQqIGRvY3VtZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQodmlldyk7Cisg
ICAgZ19hc3NlcnQoZG9jdW1lbnQpOworICAgIFdlYktpdERPTU5vZGVMaXN0KiBsaXN0ID0gd2Vi
a2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWUoZG9jdW1lbnQsICJsaSIp
OworICAgIGdfYXNzZXJ0KGxpc3QpOworICAgIGd1bG9uZyBsZW5ndGggPSB3ZWJraXRfZG9tX25v
ZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QpOworICAgIGdfYXNzZXJ0X2NtcGludChsZW5ndGgsID09
LCAzKTsKKworICAgIGd1aW50IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgV2ViS2l0RE9NTm9kZSogaXRlbSA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0
ZW0obGlzdCwgaSk7CisgICAgICAgIGdfYXNzZXJ0KGl0ZW0pOworICAgICAgICBXZWJLaXRET01F
bGVtZW50KiBlbGVtZW50ID0gKFdlYktpdERPTUVsZW1lbnQqKWl0ZW07CisgICAgICAgIGdfYXNz
ZXJ0KGVsZW1lbnQpOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2RvbV9lbGVtZW50
X2dldF90YWdfbmFtZShlbGVtZW50KSwgPT0sICJMSSIpOworICAgICAgICBXZWJLaXRET01IVE1M
RWxlbWVudCogaHRtbEVsZW1lbnQgPSAoV2ViS2l0RE9NSFRNTEVsZW1lbnQqKWVsZW1lbnQ7Cisg
ICAgICAgIGNoYXIqIG4gPSBnX3N0cmR1cF9wcmludGYoIiVkIiwgaSsxKTsKKyAgICAgICAgZ19h
c3NlcnRfY21wc3RyKHdlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF9pbm5lcl90ZXh0KGh0bWxF
bGVtZW50KSwgPT0sIG4pOworICAgICAgICBnX2ZyZWUobik7CisgICAgfQorCisgICAgZ19vYmpl
Y3RfdW5yZWYobGlzdCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfZG9tX2RvY3VtZW50X2dldF9l
bGVtZW50c19ieV9jbGFzc19uYW1lKERvbURvY3VtZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0
cG9pbnRlciBkYXRhKQoreworICAgIGdfYXNzZXJ0KGZpeHR1cmUpOworICAgIFdlYktpdFdlYlZp
ZXcqIHZpZXcgPSAoV2ViS2l0V2ViVmlldyopZml4dHVyZS0+d2ViVmlldzsKKyAgICBnX2Fzc2Vy
dCh2aWV3KTsKKyAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKKyAgICBnX2Fzc2VydChkb2N1bWVudCk7CisgICAg
V2ViS2l0RE9NTm9kZUxpc3QqIGxpc3QgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50
c19ieV9jbGFzc19uYW1lKGRvY3VtZW50LCAidGVzdCIpOworICAgIGdfYXNzZXJ0KGxpc3QpOwor
ICAgIGd1bG9uZyBsZW5ndGggPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3Qp
OworICAgIGdfYXNzZXJ0X2NtcGludChsZW5ndGgsID09LCAyKTsKKworICAgIGd1aW50IGk7CisK
KyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgV2ViS2l0RE9NTm9k
ZSogaXRlbSA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdCwgaSk7CisgICAgICAgIGdf
YXNzZXJ0KGl0ZW0pOworICAgICAgICBXZWJLaXRET01FbGVtZW50KiBlbGVtZW50ID0gKFdlYktp
dERPTUVsZW1lbnQqKWl0ZW07CisgICAgICAgIGdfYXNzZXJ0KGVsZW1lbnQpOworICAgICAgICBn
X2Fzc2VydF9jbXBzdHIod2Via2l0X2RvbV9lbGVtZW50X2dldF90YWdfbmFtZShlbGVtZW50KSwg
PT0sICJESVYiKTsKKyAgICB9CisKKyAgICBnX29iamVjdF91bnJlZihsaXN0KTsKK30KKworc3Rh
dGljIHZvaWQgdGVzdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRfYnlfaWQoRG9tRG9jdW1lbnRG
aXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgZ19hc3NlcnQoZml4
dHVyZSk7CisgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IChXZWJLaXRXZWJWaWV3KilmaXh0dXJl
LT53ZWJWaWV3OworICAgIGdfYXNzZXJ0KHZpZXcpOworICAgIFdlYktpdERPTURvY3VtZW50KiBk
b2N1bWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50KHZpZXcpOworICAgIGdf
YXNzZXJ0KGRvY3VtZW50KTsKKyAgICBXZWJLaXRET01FbGVtZW50KiBlbGVtZW50ID0gd2Via2l0
X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudF9ieV9pZChkb2N1bWVudCwgInRlc3RvayIpOworICAg
IGdfYXNzZXJ0KGVsZW1lbnQpOworICAgIGVsZW1lbnQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dl
dF9lbGVtZW50X2J5X2lkKGRvY3VtZW50LCAidGhpcy1pZC1kb2VzLW5vdC1leGlzdCIpOworICAg
IGdfYXNzZXJ0KGVsZW1lbnQgPT0gMCk7CisgICAgLyogVGhlIERPTSBzcGVjIHNheXMgdGhlIHJl
dHVybiB2YWx1ZSBpcyB1bmRlZmluZWQgd2hlbiB0aGVyZSdzCisgICAgICogbW9yZSB0aGFuIG9u
ZSBlbGVtZW50IHdpdGggdGhlIHNhbWUgaWQ7IGluIG91ciBjYXNlIHRoZSBmaXJzdAorICAgICAq
IG9uZSB3aWxsIGJlIHJldHVybmVkICovCisgICAgZWxlbWVudCA9IHdlYmtpdF9kb21fZG9jdW1l
bnRfZ2V0X2VsZW1lbnRfYnlfaWQoZG9jdW1lbnQsICJ0ZXN0YmFkIik7CisgICAgZ19hc3NlcnQo
ZWxlbWVudCk7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQqIGh0bWxFbGVtZW50ID0gKFdlYktp
dERPTUhUTUxFbGVtZW50KillbGVtZW50OworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfZG9t
X2h0bWxfZWxlbWVudF9nZXRfaW5uZXJfdGV4dChodG1sRWxlbWVudCksID09LCAiZmlyc3QiKTsK
K30KKworc3RhdGljIHZvaWQgdGVzdF9kb21fZG9jdW1lbnRfZ2V0X2xpbmtzKERvbURvY3VtZW50
Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGdfYXNzZXJ0KGZp
eHR1cmUpOworICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSAoV2ViS2l0V2ViVmlldyopZml4dHVy
ZS0+d2ViVmlldzsKKyAgICBnX2Fzc2VydCh2aWV3KTsKKyAgICBXZWJLaXRET01Eb2N1bWVudCog
ZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKKyAgICBn
X2Fzc2VydChkb2N1bWVudCk7CisgICAgV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24gKmNvbGxlY3Rp
b24gPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9saW5rcyhkb2N1bWVudCk7CisgICAgZ19hc3Nl
cnQoY29sbGVjdGlvbik7CisgICAgZ3Vsb25nIGxlbmd0aCA9IHdlYmtpdF9kb21faHRtbF9jb2xs
ZWN0aW9uX2dldF9sZW5ndGgoY29sbGVjdGlvbik7CisgICAgZ19hc3NlcnRfY21waW50KGxlbmd0
aCwgPT0sIDMpOworCisgICAgZ3VpbnQgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7
IGkrKykgeworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogbmFtZXNbXSA9IHsgImJsYW5rIiwg
Imdvb2dsZSIsICJ3ZWJraXQiIH07CisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiB1cmlzW10g
PSB7ICJhYm91dDpibGFuayIsICJodHRwOi8vd3d3Lmdvb2dsZS5jb20vIiwgImh0dHA6Ly93d3cu
d2Via2l0Lm9yZy8iIH07CisgICAgICAgIFdlYktpdERPTU5vZGUgKm5vZGUgPSB3ZWJraXRfZG9t
X2h0bWxfY29sbGVjdGlvbl9pdGVtKGNvbGxlY3Rpb24sIGkpOworICAgICAgICBnX2Fzc2VydChu
b2RlKTsKKyAgICAgICAgV2ViS2l0RE9NRWxlbWVudCogZWxlbWVudCA9IChXZWJLaXRET01FbGVt
ZW50Kilub2RlOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2RvbV9lbGVtZW50X2dl
dF90YWdfbmFtZShlbGVtZW50KSwgPT0sICJBIik7CisgICAgICAgIFdlYktpdERPTUhUTUxFbGVt
ZW50ICpodG1sRWxlbWVudCA9IChXZWJLaXRET01IVE1MRWxlbWVudCopZWxlbWVudDsKKyAgICAg
ICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF9pbm5lcl90ZXh0
KGh0bWxFbGVtZW50KSwgPT0sIG5hbWVzW2ldKTsKKyAgICAgICAgV2ViS2l0RE9NSFRNTEFuY2hv
ckVsZW1lbnQgKmFuY2hvciA9IChXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCopZWxlbWVudDsK
KyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9n
ZXRfaHJlZihhbmNob3IpLCA9PSwgdXJpc1tpXSk7CisgICAgfQorICAgIGdfb2JqZWN0X3VucmVm
KGNvbGxlY3Rpb24pOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2RvbV9kb2N1bWVudF9pbnNlcnRf
cm93KERvbURvY3VtZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQorewor
ICAgIGdfYXNzZXJ0KGZpeHR1cmUpOworICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSAoV2ViS2l0
V2ViVmlldyopZml4dHVyZS0+d2ViVmlldzsKKyAgICBnX2Fzc2VydCh2aWV3KTsKKyAgICBXZWJL
aXRET01Eb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVu
dCh2aWV3KTsKKyAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKGRvY3VtZW50KSk7
CisgICAgV2ViS2l0RE9NRWxlbWVudCogdGFibGUgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9l
bGVtZW50X2J5X2lkKGRvY3VtZW50LCAidGFibGUiKTsKKyAgICBnX2Fzc2VydChXRUJLSVRfRE9N
X0lTX0hUTUxfRUxFTUVOVCh0YWJsZSkpOworICAgIFdlYktpdERPTUhUTUxDb2xsZWN0aW9uKiBy
b3dzID0gd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X3Jvd3MoV0VCS0lUX0RPTV9I
VE1MX1RBQkxFX0VMRU1FTlQodGFibGUpKTsKKyAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hU
TUxfQ09MTEVDVElPTihyb3dzKSk7CisKKyAgICAvLyBUYWJsZSBpcyBpbml0aWFsbHkgZW1wdHku
CisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9kb21faHRtbF9jb2xsZWN0aW9uX2dldF9sZW5n
dGgocm93cyksID09LCAwKTsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudCogcm93ID0gd2Via2l0
X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfaW5zZXJ0X3JvdyhXRUJLSVRfRE9NX0hUTUxfVEFCTEVf
RUxFTUVOVCh0YWJsZSksIC0xLCBOVUxMKTsKKyAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hU
TUxfVEFCTEVfUk9XX0VMRU1FTlQocm93KSk7CisgICAgcm93cyA9IHdlYmtpdF9kb21faHRtbF90
YWJsZV9lbGVtZW50X2dldF9yb3dzKFdFQktJVF9ET01fSFRNTF9UQUJMRV9FTEVNRU5UKHRhYmxl
KSk7CisgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0NPTExFQ1RJT04ocm93cykpOwor
ICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfZG9tX2h0bWxfY29sbGVjdGlvbl9nZXRfbGVuZ3Ro
KHJvd3MpLCA9PSwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfZG9tX2RvY3VtZW50X2V2YWx1
YXRlKERvbURvY3VtZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQorewor
ICAgIGdfYXNzZXJ0KGZpeHR1cmUpOworICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSAoV2ViS2l0
V2ViVmlldyopZml4dHVyZS0+d2ViVmlldzsKKyAgICBnX2Fzc2VydCh2aWV3KTsKKyAgICBXZWJL
aXRET01Eb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVu
dCh2aWV3KTsKKyAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKGRvY3VtZW50KSk7
CisgICAgV2ViS2l0RE9NTm9kZUxpc3QqIGxpc3QgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9l
bGVtZW50c19ieV90YWdfbmFtZShkb2N1bWVudCwgImh0bWwiKTsKKyAgICBnX2Fzc2VydChsaXN0
KTsKKyAgICBndWxvbmcgbGVuZ3RoID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChs
aXN0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQobGVuZ3RoLCA9PSwgMSk7CisgICAgV2ViS2l0RE9N
Tm9kZSogaHRtbCA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdCwgMCk7CisgICAgZ19h
c3NlcnQoV0VCS0lUX0RPTV9JU19OT0RFKGh0bWwpKTsKKworICAgIFdlYktpdERPTVhQYXRoUmVz
dWx0KiByZXN1bHQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2V2YWx1YXRlKGRvY3VtZW50LCAiLy9k
aXYiLCBodG1sLCBOVUxMLCAwLCBOVUxMLCBOVUxMKTsKKyAgICBnX2Fzc2VydChXRUJLSVRfRE9N
X0lTX1hQQVRIX1JFU1VMVChyZXN1bHQpKTsKKworICAgIGludCBpID0gMDsKKyAgICBXZWJLaXRE
T01Ob2RlKiBub2RlOworICAgIHdoaWxlICggKG5vZGUgPSB3ZWJraXRfZG9tX3hwYXRoX3Jlc3Vs
dF9pdGVyYXRlX25leHQocmVzdWx0LCBOVUxMKSkgIT0gTlVMTCkgeworICAgICAgICBnX2Fzc2Vy
dChub2RlKTsKKyAgICAgICAgV2ViS2l0RE9NRWxlbWVudCogZWxlbWVudCA9IChXZWJLaXRET01F
bGVtZW50Kilub2RlOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2RvbV9lbGVtZW50
X2dldF90YWdfbmFtZShlbGVtZW50KSwgPT0sICJESVYiKTsKKyAgICAgICAgaSsrOworICAgIH0K
KyAgICBnX2Fzc2VydF9jbXBpbnQoaSwgPT0sIDIpOworCisgICAgZ19vYmplY3RfdW5yZWYobGlz
dCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYWtfbm90aWZ5KGdwb2ludGVyIGRhdGEsIEdPYmplY3Qq
IHpvbWJpZSkKK3sKKyAgICBndWludCogY291bnQgPSAoZ3VpbnQqKWRhdGE7CisgICAgKCpjb3Vu
dCkrKzsKK30KKworc3RhdGljIHZvaWQgdGVzdF9kb21fZG9jdW1lbnRfZ2FyYmFnZV9jb2xsZWN0
aW9uKERvbURvY3VtZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQorewor
ICAgIGd1aW50IGNvdW50ID0gMDsKKyAgICBnX2Fzc2VydChmaXh0dXJlKTsKKyAgICBXZWJLaXRX
ZWJWaWV3KiB2aWV3ID0gKFdlYktpdFdlYlZpZXcqKWZpeHR1cmUtPndlYlZpZXc7CisgICAgZ19h
c3NlcnQodmlldyk7CisgICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50ID0gd2Via2l0X3dl
Yl92aWV3X2dldF9kb21fZG9jdW1lbnQodmlldyk7CisgICAgZ19hc3NlcnQoZG9jdW1lbnQpOwor
ICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGRvY3VtZW50KSwgKEdXZWFrTm90aWZ5KXdl
YWtfbm90aWZ5LCAmY291bnQpOworICAgIFdlYktpdERPTUhUTUxIZWFkRWxlbWVudCogaGVhZCA9
IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2hlYWQoZG9jdW1lbnQpOworICAgIGdfYXNzZXJ0KGhl
YWQpOworICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGhlYWQpLCAoR1dlYWtOb3RpZnkp
d2Vha19ub3RpZnksICZjb3VudCk7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQqIGJvZHkgPSB3
ZWJraXRfZG9tX2RvY3VtZW50X2dldF9ib2R5KGRvY3VtZW50KTsKKyAgICBnX2Fzc2VydChib2R5
KTsKKyAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVDVChib2R5KSwgKEdXZWFrTm90aWZ5KXdl
YWtfbm90aWZ5LCAmY291bnQpOworICAgIFdlYktpdERPTUhUTUxDb2xsZWN0aW9uICpjb2xsZWN0
aW9uID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfbGlua3MoZG9jdW1lbnQpOworICAgIGdfYXNz
ZXJ0KGNvbGxlY3Rpb24pOworICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGNvbGxlY3Rp
b24pLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7CisKKyAgICB3ZWJraXRfd2Vi
X3ZpZXdfbG9hZF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVXKHZpZXcpLCBIVE1MX0RPQ1VNRU5UX0xJ
TktTLCBOVUxMLCBOVUxMLCBOVUxMKTsKKworICAgIHdoaWxlIChnX21haW5fY29udGV4dF9wZW5k
aW5nKE5VTEwpKQorICAgICAgICBnX21haW5fY29udGV4dF9pdGVyYXRpb24oTlVMTCwgRkFMU0Up
OworCisgICAgZ19hc3NlcnRfY21wdWludChjb3VudCwgPT0sIDMpOworCisgICAgZ19vYmplY3Rf
dW5yZWYoY29sbGVjdGlvbik7CisgICAgZ19hc3NlcnRfY21wdWludChjb3VudCwgPT0sIDQpOwor
CisgICAgY291bnQgPSAwOworCisgICAgZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2Rv
bV9kb2N1bWVudCh2aWV3KTsKKyAgICBnX2Fzc2VydChkb2N1bWVudCk7CisgICAgZ19vYmplY3Rf
d2Vha19yZWYoR19PQkpFQ1QoZG9jdW1lbnQpLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZj
b3VudCk7CisgICAgaGVhZCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2hlYWQoZG9jdW1lbnQp
OworICAgIGdfYXNzZXJ0KGhlYWQpOworICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGhl
YWQpLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7CisgICAgYm9keSA9IHdlYmtp
dF9kb21fZG9jdW1lbnRfZ2V0X2JvZHkoZG9jdW1lbnQpOworICAgIGdfYXNzZXJ0KGJvZHkpOwor
ICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGJvZHkpLCAoR1dlYWtOb3RpZnkpd2Vha19u
b3RpZnksICZjb3VudCk7CisgICAgY29sbGVjdGlvbiA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0
X2xpbmtzKGRvY3VtZW50KTsKKyAgICBnX2Fzc2VydChjb2xsZWN0aW9uKTsKKyAgICBnX29iamVj
dF93ZWFrX3JlZihHX09CSkVDVChjb2xsZWN0aW9uKSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5
LCAmY291bnQpOworICAgIC8qIEFzayB0d2ljZSBmb3IgdGhlIHNhbWUgb2JqZWN0ICovCisgICAg
V2ViS2l0RE9NSFRNTENvbGxlY3Rpb24qIGNvbGxlY3Rpb24yID0gd2Via2l0X2RvbV9kb2N1bWVu
dF9nZXRfbGlua3MoZG9jdW1lbnQpOworICAgIGdfYXNzZXJ0KGNvbGxlY3Rpb24yKTsKKyAgICBn
X29iamVjdF93ZWFrX3JlZihHX09CSkVDVChjb2xsZWN0aW9uMiksIChHV2Vha05vdGlmeSl3ZWFr
X25vdGlmeSwgJmNvdW50KTsKKworICAgIGdfb2JqZWN0X3VucmVmKGRvY3VtZW50KTsKKyAgICBn
X29iamVjdF91bnJlZihoZWFkKTsKKyAgICBnX29iamVjdF91bnJlZihib2R5KTsKKyAgICBnX29i
amVjdF91bnJlZihjb2xsZWN0aW9uKTsKKyAgICBnX29iamVjdF91bnJlZihjb2xsZWN0aW9uMik7
CisKKyAgICBnX2Fzc2VydF9jbXB1aW50KGNvdW50LCA9PSwgNSk7CisKKyAgICB3ZWJraXRfd2Vi
X3ZpZXdfbG9hZF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVXKHZpZXcpLCBIVE1MX0RPQ1VNRU5UX0lG
UkFNRSwgTlVMTCwgTlVMTCwgTlVMTCk7CisKKyAgICB3aGlsZSAoZ19tYWluX2NvbnRleHRfcGVu
ZGluZyhOVUxMKSkKKyAgICAgICAgZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uKE5VTEwsIEZBTFNF
KTsKKworICAgIGNvdW50ID0gMDsKKworICAgIGRvY3VtZW50ID0gd2Via2l0X3dlYl92aWV3X2dl
dF9kb21fZG9jdW1lbnQodmlldyk7CisgICAgV2ViS2l0RE9NRWxlbWVudCogZGl2ID0gd2Via2l0
X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudF9ieV9pZChkb2N1bWVudCwgInRlc3QiKTsKKyAgICBn
X2Fzc2VydChkaXYpOworICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGRpdiksIChHV2Vh
a05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKKyAgICBXZWJLaXRET01FbGVtZW50KiBpZnJh
bWUgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50X2J5X2lkKGRvY3VtZW50LCAiaWZy
YW1lIik7CisgICAgZ19hc3NlcnQoaWZyYW1lKTsKKworICAgIHdlYmtpdF9kb21fZWxlbWVudF9z
ZXRfYXR0cmlidXRlKGlmcmFtZSwgInNyYyIsICJkYXRhOjxodG1sPjxoZWFkPjwvaGVhZD48L2h0
bWw+IiwgTlVMTCk7CisKKyAgICB3aGlsZSAoZ19tYWluX2NvbnRleHRfcGVuZGluZyhOVUxMKSkK
KyAgICAgICAgZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uKE5VTEwsIEZBTFNFKTsKKworICAgIFdl
YktpdERPTURvY3VtZW50KiBpZnJhbWVEb2N1bWVudCA9IHdlYmtpdF9kb21faHRtbF9pZnJhbWVf
ZWxlbWVudF9nZXRfY29udGVudF9kb2N1bWVudChXRUJLSVRfRE9NX0hUTUxfSUZSQU1FX0VMRU1F
TlQoaWZyYW1lKSk7CisgICAgZ19hc3NlcnQoaWZyYW1lRG9jdW1lbnQpOworICAgIGhlYWQgPSB3
ZWJraXRfZG9tX2RvY3VtZW50X2dldF9oZWFkKGlmcmFtZURvY3VtZW50KTsKKyAgICBnX2Fzc2Vy
dChoZWFkKTsKKyAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVDVChoZWFkKSwgKEdXZWFrTm90
aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOworCisgICAgd2Via2l0X2RvbV9lbGVtZW50X3NldF9h
dHRyaWJ1dGUoaWZyYW1lLCAic3JjIiwgImFib3V0OmJsYW5rIiwgTlVMTCk7CisKKyAgICB3aGls
ZSAoZ19tYWluX2NvbnRleHRfcGVuZGluZyhOVUxMKSkKKyAgICAgICAgZ19tYWluX2NvbnRleHRf
aXRlcmF0aW9uKE5VTEwsIEZBTFNFKTsKKworICAgIGdfYXNzZXJ0X2NtcHVpbnQoY291bnQsID09
LCAxKTsKKworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVco
dmlldyksIEhUTUxfRE9DVU1FTlRfTElOS1MsIE5VTEwsIE5VTEwsIE5VTEwpOworCisgICAgd2hp
bGUgKGdfbWFpbl9jb250ZXh0X3BlbmRpbmcoTlVMTCkpCisgICAgICAgIGdfbWFpbl9jb250ZXh0
X2l0ZXJhdGlvbihOVUxMLCBGQUxTRSk7CisKKyAgICBnX2Fzc2VydF9jbXB1aW50KGNvdW50LCA9
PSwgMik7CisKKyAgICBjb3VudCA9IDA7CisKKyAgICBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmll
d19nZXRfZG9tX2RvY3VtZW50KHZpZXcpOworICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsKKyAgICBn
X29iamVjdF93ZWFrX3JlZihHX09CSkVDVChkb2N1bWVudCksIChHV2Vha05vdGlmeSl3ZWFrX25v
dGlmeSwgJmNvdW50KTsKKyAgICAvKiBBc2sgdHdpY2UgZm9yIHRoZSBEb2N1bWVudCAqLworICAg
IFdlYktpdERPTURvY3VtZW50KiBkb2N1bWVudDIgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9k
b2N1bWVudCh2aWV3KTsKKyAgICBnX2Fzc2VydChkb2N1bWVudDIpOworICAgIGdfb2JqZWN0X3dl
YWtfcmVmKEdfT0JKRUNUKGRvY3VtZW50MiksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNv
dW50KTsKKyAgICBoZWFkID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfaGVhZChkb2N1bWVudCk7
CisgICAgZ19hc3NlcnQoaGVhZCk7CisgICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1QoaGVh
ZCksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKKyAgICBib2R5ID0gd2Via2l0
X2RvbV9kb2N1bWVudF9nZXRfYm9keShkb2N1bWVudCk7CisgICAgZ19hc3NlcnQoYm9keSk7Cisg
ICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1QoYm9keSksIChHV2Vha05vdGlmeSl3ZWFrX25v
dGlmeSwgJmNvdW50KTsKKyAgICBjb2xsZWN0aW9uID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRf
bGlua3MoZG9jdW1lbnQpOworICAgIGdfYXNzZXJ0KGNvbGxlY3Rpb24pOworICAgIGdfb2JqZWN0
X3dlYWtfcmVmKEdfT0JKRUNUKGNvbGxlY3Rpb24pLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnks
ICZjb3VudCk7CisKKyAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koZml4dHVyZS0+d2ViVmlldyk7Cisg
ICAgZml4dHVyZS0+d2ViVmlldyA9IE5VTEw7CisKKyAgICBnX2Fzc2VydF9jbXB1aW50KGNvdW50
LCA9PSwgNCk7CisKKyAgICBnX29iamVjdF91bnJlZihjb2xsZWN0aW9uKTsKKworICAgIGdfYXNz
ZXJ0X2NtcHVpbnQoY291bnQsID09LCA1KTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIq
KiBhcmd2KQoreworICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKKworICAg
IGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7CisKKyAgICBnX3Rl
c3RfYWRkKCIvd2Via2l0L2RvbWRvY3VtZW50L3Rlc3RfdGl0bGUiLAorICAgICAgICAgICAgICAg
RG9tRG9jdW1lbnRGaXh0dXJlLCBIVE1MX0RPQ1VNRU5UX1RJVExFLAorICAgICAgICAgICAgICAg
ZG9tX2RvY3VtZW50X2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0X2RvbV9kb2N1
bWVudF90aXRsZSwKKyAgICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3du
KTsKKworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvZG9tZG9jdW1lbnQvdGVzdF9nZXRfZWxlbWVu
dHNfYnlfdGFnX25hbWUiLAorICAgICAgICAgICAgICAgRG9tRG9jdW1lbnRGaXh0dXJlLCBIVE1M
X0RPQ1VNRU5UX0VMRU1FTlRTLAorICAgICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVf
c2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlf
dGFnX25hbWUsCisgICAgICAgICAgICAgICBkb21fZG9jdW1lbnRfZml4dHVyZV90ZWFyZG93bik7
CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2RvbWRvY3VtZW50L3Rlc3RfZ2V0X2VsZW1lbnRz
X2J5X2NsYXNzX25hbWUiLAorICAgICAgICAgICAgICAgRG9tRG9jdW1lbnRGaXh0dXJlLCBIVE1M
X0RPQ1VNRU5UX0VMRU1FTlRTX0NMQVNTLAorICAgICAgICAgICAgICAgZG9tX2RvY3VtZW50X2Zp
eHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVu
dHNfYnlfY2xhc3NfbmFtZSwKKyAgICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3Rl
YXJkb3duKTsKKworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvZG9tZG9jdW1lbnQvdGVzdF9nZXRf
ZWxlbWVudF9ieV9pZCIsCisgICAgICAgICAgICAgICBEb21Eb2N1bWVudEZpeHR1cmUsIEhUTUxf
RE9DVU1FTlRfRUxFTUVOVFNfSUQsCisgICAgICAgICAgICAgICBkb21fZG9jdW1lbnRfZml4dHVy
ZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3RfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50X2J5
X2lkLAorICAgICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfdGVhcmRvd24pOworCisg
ICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9kb21kb2N1bWVudC90ZXN0X2dldF9saW5rcyIsCisgICAg
ICAgICAgICAgICBEb21Eb2N1bWVudEZpeHR1cmUsIEhUTUxfRE9DVU1FTlRfTElOS1MsCisgICAg
ICAgICAgICAgICBkb21fZG9jdW1lbnRfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRl
c3RfZG9tX2RvY3VtZW50X2dldF9saW5rcywKKyAgICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9m
aXh0dXJlX3RlYXJkb3duKTsKKworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvZG9tZG9jdW1lbnQv
dGVzdF90YWJsZV9pbnNlcnRfcm93IiwKKyAgICAgICAgICAgICAgIERvbURvY3VtZW50Rml4dHVy
ZSwgSFRNTF9ET0NVTUVOVF9UQUJMRSwKKyAgICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0
dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF9kb21fZG9jdW1lbnRfaW5zZXJ0X3JvdywK
KyAgICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKTsKKworICAgIGdf
dGVzdF9hZGQoIi93ZWJraXQvZG9tZG9jdW1lbnQvdGVzdF9kb2N1bWVudF9ldmFsdWF0ZSIsCisg
ICAgICAgICAgICAgICBEb21Eb2N1bWVudEZpeHR1cmUsIEhUTUxfRE9DVU1FTlRfRVZBTFVBVEUs
CisgICAgICAgICAgICAgICBkb21fZG9jdW1lbnRfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAg
ICAgIHRlc3RfZG9tX2RvY3VtZW50X2V2YWx1YXRlLAorICAgICAgICAgICAgICAgZG9tX2RvY3Vt
ZW50X2ZpeHR1cmVfdGVhcmRvd24pOworCisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9kb21kb2N1
bWVudC90ZXN0X2dhcmJhZ2VfY29sbGVjdGlvbiIsCisgICAgICAgICAgICAgICBEb21Eb2N1bWVu
dEZpeHR1cmUsIEhUTUxfRE9DVU1FTlRfTElOS1MsCisgICAgICAgICAgICAgICBkb21fZG9jdW1l
bnRfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3RfZG9tX2RvY3VtZW50X2dhcmJh
Z2VfY29sbGVjdGlvbiwKKyAgICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJk
b3duKTsKKworICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7Cit9CisKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3Rkb21kb213aW5kb3cuYyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3Rkb21kb213aW5kb3cuYwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGZjZDE4Ci0tLSAvZGV2L251bGwKKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGRvbWRvbXdpbmRvdy5jCkBA
IC0wLDAgKzEsMjU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJ0ZXN0X3V0aWxzLmgiCisKKyNpbmNsdWRlIDxn
bGliLmg+CisjaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+Cisj
aW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgorCisjZGVmaW5lIEhUTUxfRE9DVU1FTlQgIjxodG1s
PjxoZWFkPjx0aXRsZT48L3RpdGxlPjwvaGVhZD48c3R5bGUgdHlwZT0ndGV4dC9jc3MnPiN0ZXN0
IHsgZm9udC1zaXplOiAxNnB4OyB9PC9zdHlsZT48Ym9keT48cCBpZD0ndGVzdCc+dGVzdDwvcD48
L2JvZHk+PC9odG1sPiIKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIEd0a1dpZGdldCogd2ViVmll
dzsKKyAgICBHdGtXaWRnZXQqIHdpbmRvdzsKKyAgICBXZWJLaXRET01ET01XaW5kb3cqIGRvbVdp
bmRvdzsKKyAgICBHTWFpbkxvb3AqIGxvb3A7CisKKyAgICBnYm9vbGVhbiBsb2FkZWQ7CisgICAg
Z2Jvb2xlYW4gY2xpY2tlZDsKKyAgICBnY29uc3Rwb2ludGVyIGRhdGE7Cit9IERvbURvbXZpZXdG
aXh0dXJlOworCitzdGF0aWMgZ2Jvb2xlYW4gZmluaXNoX2xvYWRpbmcoRG9tRG9tdmlld0ZpeHR1
cmUqIGZpeHR1cmUpCit7CisgICAgaWYgKGdfbWFpbl9sb29wX2lzX3J1bm5pbmcoZml4dHVyZS0+
bG9vcCkpCisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQoZml4dHVyZS0+bG9vcCk7CisKKyAgICBy
ZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkIGRvbV9kb212aWV3X2ZpeHR1cmVfc2V0dXAo
RG9tRG9tdmlld0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBm
aXh0dXJlLT5sb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworICAgIGZpeHR1cmUt
PndpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOworICAgIGZpeHR1
cmUtPndlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7CisgICAgZml4dHVyZS0+ZGF0YSA9
IGRhdGE7CisKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGZpeHR1cmUtPndp
bmRvdyksIEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldykpOworfQorCitzdGF0aWMgdm9pZCBk
b21fZG9tdmlld19maXh0dXJlX3RlYXJkb3duKERvbURvbXZpZXdGaXh0dXJlKiBmaXh0dXJlLCBn
Y29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgZ3RrX3dpZGdldF9kZXN0cm95KGZpeHR1cmUtPndp
bmRvdyk7CisgICAgZ19tYWluX2xvb3BfdW5yZWYoZml4dHVyZS0+bG9vcCk7Cit9CisKK3N0YXRp
YyB2b2lkIGRvbV9kb21fd2luZG93X2ZpeHR1cmVfc2V0dXAoRG9tRG9tdmlld0ZpeHR1cmUqIGZp
eHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBmaXh0dXJlLT5sb29wID0gZ19tYWlu
X2xvb3BfbmV3KE5VTEwsIFRSVUUpOworICAgIGZpeHR1cmUtPndlYlZpZXcgPSB3ZWJraXRfd2Vi
X3ZpZXdfbmV3KCk7CisgICAgZ19vYmplY3RfcmVmX3NpbmsoZml4dHVyZS0+d2ViVmlldyk7CisK
KyAgICBpZiAoZGF0YSAhPSBOVUxMKQorICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJp
bmcoV0VCS0lUX1dFQl9WSUVXIChmaXh0dXJlLT53ZWJWaWV3KSwgKGNvbnN0IGNoYXIqKSBkYXRh
LCBOVUxMLCBOVUxMLCBOVUxMKTsKKworICAgIGdfaWRsZV9hZGQoKEdTb3VyY2VGdW5jKWZpbmlz
aF9sb2FkaW5nLCBmaXh0dXJlKTsKKyAgICBnX21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7
Cit9CisKK3N0YXRpYyB2b2lkIGRvbV9kb21fd2luZG93X2ZpeHR1cmVfdGVhcmRvd24oRG9tRG9t
dmlld0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBpZiAoZml4
dHVyZS0+d2ViVmlldykKKyAgICAgICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+d2ViVmlldyk7
CisgICAgZ19tYWluX2xvb3BfdW5yZWYoZml4dHVyZS0+bG9vcCk7Cit9CisKK3N0YXRpYyBnYm9v
bGVhbiBsb2FkZWRDYWxsYmFjayhXZWJLaXRET01ET01XaW5kb3cqIHZpZXcsIFdlYktpdERPTUV2
ZW50KiBldmVudCwgRG9tRG9tdmlld0ZpeHR1cmUqIGZpeHR1cmUpCit7CisgICAgZ19hc3NlcnQo
Zml4dHVyZS0+bG9hZGVkID09IEZBTFNFKTsKKyAgICBmaXh0dXJlLT5sb2FkZWQgPSBUUlVFOwor
CisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gY2xpY2tlZENhbGxiYWNr
KFdlYktpdERPTURPTVdpbmRvdyogdmlldywgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBEb21Eb212
aWV3Rml4dHVyZSogZml4dHVyZSkKK3sKKyAgICBXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0
OworICAgIGd1c2hvcnQgcGhhc2U7CisKKyAgICBnX2Fzc2VydChldmVudCk7CisgICAgZ19hc3Nl
cnQoV0VCS0lUX0RPTV9JU19FVkVOVChldmVudCkpOworCisgICAgLy8gV2Ugc2hvdWxkIGNhdGNo
IHRoaXMgaW4gdGhlIGJ1YmJsaW5nIHVwIHBoYXNlLCBzaW5jZSB3ZSBhcmUgY29ubmVjdGluZyB0
byB0aGUgdG9wbGV2ZWwgb2JqZWN0CisgICAgcGhhc2UgPSB3ZWJraXRfZG9tX2V2ZW50X2dldF9l
dmVudF9waGFzZShldmVudCk7CisgICAgZ19hc3NlcnRfY21waW50KHBoYXNlLCA9PSwgMyk7CisK
KyAgICB0YXJnZXQgPSB3ZWJraXRfZG9tX2V2ZW50X2dldF9jdXJyZW50X3RhcmdldChldmVudCk7
CisgICAgZ19hc3NlcnQodGFyZ2V0ID09IFdFQktJVF9ET01fRVZFTlRfVEFSR0VUKHZpZXcpKTsK
KworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmNsaWNrZWQgPT0gRkFMU0UpOworICAgIGZpeHR1cmUt
PmNsaWNrZWQgPSBUUlVFOworCisgICAgZmluaXNoX2xvYWRpbmcoZml4dHVyZSk7CisKKyAgICBy
ZXR1cm4gRkFMU0U7Cit9CisKK2dib29sZWFuIG1hcF9ldmVudF9jYihHdGtXaWRnZXQgKndpZGdl
dCwgR2RrRXZlbnQqIGV2ZW50LCBEb21Eb212aWV3Rml4dHVyZSogZml4dHVyZSkKK3sKKyAgICB3
ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVXIChmaXh0dXJlLT53ZWJW
aWV3KSwgKGNvbnN0IGNoYXIqKWZpeHR1cmUtPmRhdGEsIE5VTEwsIE5VTEwsIE5VTEwpOworCisg
ICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZCBsb2FkX2V2ZW50X2NhbGxiYWNrKFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcsIEdQYXJhbVNwZWMqIHNwZWMsIERvbURvbXZpZXdGaXh0dXJl
KiBmaXh0dXJlKQoreworICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92
aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJWaWV3KTsKKyAgICBpZiAoc3RhdHVzID09IFdFQktJVF9M
T0FEX0ZJTklTSEVEKSB7CisgICAgICAgIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2FkZF9ldmVu
dF9saXN0ZW5lcihXRUJLSVRfRE9NX0VWRU5UX1RBUkdFVChmaXh0dXJlLT5kb21XaW5kb3cpLCAi
Y2xpY2siLCBHX0NBTExCQUNLKGNsaWNrZWRDYWxsYmFjayksIGZhbHNlLCBmaXh0dXJlKTsKKwor
ICAgICAgICBnX2Fzc2VydChmaXh0dXJlLT5jbGlja2VkID09IEZBTFNFKTsKKyAgICAgICAgZ3Rr
X3Rlc3Rfd2lkZ2V0X2NsaWNrKEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldyksIDEsIDApOwor
ICAgIH0KKworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2RvbV9kb212aWV3X3NpZ25hbHMoRG9tRG9t
dmlld0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBnX2Fzc2Vy
dChmaXh0dXJlKTsKKyAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gKFdlYktpdFdlYlZpZXcqKWZp
eHR1cmUtPndlYlZpZXc7CisgICAgZ19hc3NlcnQodmlldyk7CisgICAgV2ViS2l0RE9NRG9jdW1l
bnQqIGRvY3VtZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQodmlldyk7Cisg
ICAgZ19hc3NlcnQoZG9jdW1lbnQpOworICAgIFdlYktpdERPTURPTVdpbmRvdyogZG9tV2luZG93
ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZGVmYXVsdF92aWV3KGRvY3VtZW50KTsKKyAgICBn
X2Fzc2VydChkb21XaW5kb3cpOworCisgICAgZml4dHVyZS0+ZG9tV2luZG93ID0gZG9tV2luZG93
OworCisgICAgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfYWRkX2V2ZW50X2xpc3RlbmVyKFdFQktJ
VF9ET01fRVZFTlRfVEFSR0VUKGZpeHR1cmUtPmRvbVdpbmRvdyksICJsb2FkIiwgR19DQUxMQkFD
Syhsb2FkZWRDYWxsYmFjayksIGZhbHNlLCBmaXh0dXJlKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0
KGZpeHR1cmUtPndpbmRvdywgIm1hcC1ldmVudCIsIEdfQ0FMTEJBQ0sobWFwX2V2ZW50X2NiKSwg
Zml4dHVyZSk7CisgICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53ZWJWaWV3LCAibm90aWZ5
Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0sobG9hZF9ldmVudF9jYWxsYmFjayksIGZpeHR1cmUp
OworCisgICAgZ3RrX3dpZGdldF9zaG93X2FsbChmaXh0dXJlLT53aW5kb3cpOworICAgIGd0a193
aW5kb3dfcHJlc2VudChHVEtfV0lORE9XKGZpeHR1cmUtPndpbmRvdykpOworCisgICAgZ19tYWlu
X2xvb3BfcnVuKGZpeHR1cmUtPmxvb3ApOworCisgICAgZ19hc3NlcnQoZml4dHVyZS0+bG9hZGVk
KTsKKyAgICBnX2Fzc2VydChmaXh0dXJlLT5jbGlja2VkKTsKK30KKworc3RhdGljIGdib29sZWFu
CitjbGlja2VkX2NiKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50
KiBldmVudCwgRG9tRG9tdmlld0ZpeHR1cmUqIGZpeHR1cmUpCit7CisgICAgZ19hc3NlcnQoZml4
dHVyZS0+Y2xpY2tlZCA9PSBGQUxTRSk7CisgICAgZml4dHVyZS0+Y2xpY2tlZCA9IFRSVUU7Cisg
ICAgZmluaXNoX2xvYWRpbmcoZml4dHVyZSk7CisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0
aWMgdm9pZCBsb2FkX3N0YXR1c19jYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHUGFy
YW1TcGVjKiBzcGVjLCBEb21Eb212aWV3Rml4dHVyZSogZml4dHVyZSkKK3sKKyAgICBXZWJLaXRM
b2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMod2ViVmll
dyk7CisgICAgaWYgKHN0YXR1cyA9PSBXRUJLSVRfTE9BRF9GSU5JU0hFRCkgeworICAgICAgICBX
ZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQ7CisgICAgICAgIFdlYktpdERPTURPTVdpbmRvdyog
ZG9tV2luZG93OworICAgICAgICBXZWJLaXRET01FbGVtZW50KiBlbGVtZW50OworICAgICAgICBX
ZWJLaXRET01FdmVudCogZXZlbnQ7CisgICAgICAgIGdsb25nIGNsaWVudFgsIGNsaWVudFk7CisK
KyAgICAgICAgZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudChXRUJL
SVRfV0VCX1ZJRVcoZml4dHVyZS0+d2ViVmlldykpOworICAgICAgICBnX2Fzc2VydChkb2N1bWVu
dCk7CisgICAgICAgIGRvbVdpbmRvdyA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2RlZmF1bHRf
dmlldyhkb2N1bWVudCk7CisgICAgICAgIGdfYXNzZXJ0KGRvbVdpbmRvdyk7CisgICAgICAgIGZp
eHR1cmUtPmRvbVdpbmRvdyA9IGRvbVdpbmRvdzsKKworICAgICAgICBlbGVtZW50ID0gd2Via2l0
X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudF9ieV9pZChkb2N1bWVudCwgInRlc3QiKTsKKyAgICAg
ICAgZ19hc3NlcnQoZWxlbWVudCk7CisgICAgICAgIGV2ZW50ID0gd2Via2l0X2RvbV9kb2N1bWVu
dF9jcmVhdGVfZXZlbnQoZG9jdW1lbnQsICJNb3VzZUV2ZW50IiwgTlVMTCk7CisgICAgICAgIGdf
YXNzZXJ0KGV2ZW50KTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19FVkVOVChldmVu
dCkpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX01PVVNFX0VWRU5UKGV2ZW50KSk7
CisgICAgICAgIGNsaWVudFggPSB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2NsaWVudF9sZWZ0KGVs
ZW1lbnQpOworICAgICAgICBjbGllbnRZID0gd2Via2l0X2RvbV9lbGVtZW50X2dldF9jbGllbnRf
dG9wKGVsZW1lbnQpOworICAgICAgICB3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2luaXRfbW91c2Vf
ZXZlbnQoV0VCS0lUX0RPTV9NT1VTRV9FVkVOVChldmVudCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2xpY2siLCBUUlVFLCBUUlVFLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4dHVyZS0+ZG9tV2lu
ZG93LCAwLCAwLCAwLCBjbGllbnRYLCBjbGllbnRZLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UsIEZBTFNFLCBGQUxTRSwgRkFMU0UsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBXRUJLSVRfRE9N
X0VWRU5UX1RBUkdFVChlbGVtZW50KSk7CisgICAgICAgIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0
X2FkZF9ldmVudF9saXN0ZW5lcihXRUJLSVRfRE9NX0VWRU5UX1RBUkdFVChlbGVtZW50KSwgImNs
aWNrIiwgR19DQUxMQkFDSyhjbGlja2VkX2NiKSwgZmFsc2UsIGZpeHR1cmUpOworICAgICAgICBn
X2Fzc2VydChmaXh0dXJlLT5jbGlja2VkID09IEZBTFNFKTsKKyAgICAgICAgd2Via2l0X2RvbV9l
dmVudF90YXJnZXRfZGlzcGF0Y2hfZXZlbnQoV0VCS0lUX0RPTV9FVkVOVF9UQVJHRVQoZWxlbWVu
dCksIGV2ZW50LCBOVUxMKTsKKyAgICB9CisKK30KKworc3RhdGljIHZvaWQgdGVzdF9kb21fZG9t
dmlld19kaXNwYXRjaF9ldmVudChEb21Eb212aWV3Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9p
bnRlciBkYXRhKQoreworICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2luZG93LCAibWFw
LWV2ZW50IiwgR19DQUxMQkFDSyhtYXBfZXZlbnRfY2IpLCBmaXh0dXJlKTsKKyAgICBnX3NpZ25h
bF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxM
QkFDSyhsb2FkX3N0YXR1c19jYWxsYmFjayksIGZpeHR1cmUpOworCisgICAgZ3RrX3dpZGdldF9z
aG93X2FsbChmaXh0dXJlLT53aW5kb3cpOworICAgIGd0a193aW5kb3dfcHJlc2VudChHVEtfV0lO
RE9XKGZpeHR1cmUtPndpbmRvdykpOworCisgICAgZ19tYWluX2xvb3BfcnVuIChmaXh0dXJlLT5s
b29wKTsKKyAgICBnX2Fzc2VydChmaXh0dXJlLT5jbGlja2VkKTsKK30KKworc3RhdGljIHZvaWQg
dGVzdF9kb21fZG9tX3dpbmRvd19nZXRfY29tcHV0ZWRfc3R5bGUoRG9tRG9tdmlld0ZpeHR1cmUq
IGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBXZWJLaXRET01Eb2N1bWVudCog
ZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudChXRUJLSVRfV0VCX1ZJ
RVcoZml4dHVyZS0+d2ViVmlldykpOworICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsKKyAgICBXZWJL
aXRET01ET01XaW5kb3cqIGRvbVdpbmRvdyA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2RlZmF1
bHRfdmlldyhkb2N1bWVudCk7CisgICAgZ19hc3NlcnQoZG9tV2luZG93KTsKKworICAgIFdlYktp
dERPTUVsZW1lbnQqICBlbGVtZW50ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudF9i
eV9pZChkb2N1bWVudCwgInRlc3QiKTsKKyAgICBnX2Fzc2VydChlbGVtZW50KTsKKyAgICBnX2Fz
c2VydChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoZWxlbWVudCkpOworICAgIFdlYktpdERPTUNTU1N0
eWxlRGVjbGFyYXRpb24qIGNzc1N0eWxlID0gd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9jb21w
dXRlZF9zdHlsZShkb21XaW5kb3csIGVsZW1lbnQsIE5VTEwpOworICAgIGdjaGFyKiBmb250U2l6
ZSA9IHdlYmtpdF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0aW9uX2dldF9wcm9wZXJ0eV92YWx1ZShj
c3NTdHlsZSwgImZvbnQtc2l6ZSIpOworICAgIGdfYXNzZXJ0X2NtcHN0cihmb250U2l6ZSwgPT0s
ICIxNnB4Iik7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBn
dGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7CisKKyAgICBnX3Rlc3RfYnVnX2Jhc2Uo
Imh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOworCisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9k
b21kb212aWV3L3NpZ25hbHMiLAorICAgICAgICAgICAgICAgRG9tRG9tdmlld0ZpeHR1cmUsIEhU
TUxfRE9DVU1FTlQsCisgICAgICAgICAgICAgICBkb21fZG9tdmlld19maXh0dXJlX3NldHVwLAor
ICAgICAgICAgICAgICAgdGVzdF9kb21fZG9tdmlld19zaWduYWxzLAorICAgICAgICAgICAgICAg
ZG9tX2RvbXZpZXdfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0
L2RvbWRvbXZpZXcvZGlzcGF0Y2hfZXZlbnQiLAorICAgICAgICAgICAgICAgRG9tRG9tdmlld0Zp
eHR1cmUsIEhUTUxfRE9DVU1FTlQsCisgICAgICAgICAgICAgICBkb21fZG9tdmlld19maXh0dXJl
X3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF9kb21fZG9tdmlld19kaXNwYXRjaF9ldmVudCwK
KyAgICAgICAgICAgICAgIGRvbV9kb212aWV3X2ZpeHR1cmVfdGVhcmRvd24pOworCisgICAgZ190
ZXN0X2FkZCgiL3dlYmtpdC9kb21kb213aW5kb3cvZ2V0X2NvbXB1dGVkX3N0eWxlIiwKKyAgICAg
ICAgICAgICAgIERvbURvbXZpZXdGaXh0dXJlLCBIVE1MX0RPQ1VNRU5ULAorICAgICAgICAgICAg
ICAgZG9tX2RvbV93aW5kb3dfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3RfZG9t
X2RvbV93aW5kb3dfZ2V0X2NvbXB1dGVkX3N0eWxlLAorICAgICAgICAgICAgICAgZG9tX2RvbV93
aW5kb3dfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICByZXR1cm4gZ190ZXN0X3J1bigpOworfQor
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0ZG9t
bm9kZS5jIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGRvbW5vZGUu
YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDRiY2JkCi0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGRvbW5vZGUu
YwpAQCAtMCwwICsxLDIxOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5M
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAidGVzdF91dGlscy5oIgorCisjaW5jbHVk
ZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5o
PgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKworI2RlZmluZSBIVE1MX0RPQ1VNRU5UX0hJ
RVJBUkNIWV9OQVZJR0FUSU9OICI8aHRtbD48aGVhZD48dGl0bGU+VGhpcyBpcyB0aGUgdGl0bGU8
L3RpdGxlPjwvaGVhZD48Ym9keT48cD4xPC9wPjxwPjI8L3A+PHA+MzwvcD48L2JvZHk+PC9odG1s
PiIKKyNkZWZpbmUgSFRNTF9ET0NVTUVOVF9OT0RFX0lOU0VSVElPTiAiPGh0bWw+PGJvZHk+PC9i
b2R5PjwvaHRtbD4iCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBHdGtXaWRnZXQqIHdlYlZpZXc7
CisgICAgR01haW5Mb29wKiBsb29wOworfSBEb21Ob2RlRml4dHVyZTsKKworc3RhdGljIGdib29s
ZWFuIGZpbmlzaF9sb2FkaW5nKERvbU5vZGVGaXh0dXJlKiBmaXh0dXJlKQoreworICAgIGlmIChn
X21haW5fbG9vcF9pc19ydW5uaW5nKGZpeHR1cmUtPmxvb3ApKQorICAgICAgICBnX21haW5fbG9v
cF9xdWl0KGZpeHR1cmUtPmxvb3ApOworCisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMg
dm9pZCBkb21fbm9kZV9maXh0dXJlX3NldHVwKERvbU5vZGVGaXh0dXJlKiBmaXh0dXJlLCBnY29u
c3Rwb2ludGVyIGRhdGEpCit7CisgICAgZml4dHVyZS0+bG9vcCA9IGdfbWFpbl9sb29wX25ldyhO
VUxMLCBUUlVFKTsKKyAgICBmaXh0dXJlLT53ZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygp
OworICAgIGdfb2JqZWN0X3JlZl9zaW5rKGZpeHR1cmUtPndlYlZpZXcpOworCisgICAgaWYgKGRh
dGEgIT0gTlVMTCkKKyAgICAgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9X
RUJfVklFVyhmaXh0dXJlLT53ZWJWaWV3KSwgKGNvbnN0IGNoYXIqKWRhdGEsIE5VTEwsIE5VTEws
IE5VTEwpOworCisgICAgZ19pZGxlX2FkZCgoR1NvdXJjZUZ1bmMpZmluaXNoX2xvYWRpbmcsIGZp
eHR1cmUpOworICAgIGdfbWFpbl9sb29wX3J1bihmaXh0dXJlLT5sb29wKTsKK30KKworc3RhdGlj
IHZvaWQgZG9tX25vZGVfZml4dHVyZV90ZWFyZG93bihEb21Ob2RlRml4dHVyZSogZml4dHVyZSwg
Z2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPndlYlZp
ZXcpOworICAgIGdfbWFpbl9sb29wX3VucmVmKGZpeHR1cmUtPmxvb3ApOworfQorCitzdGF0aWMg
dm9pZCB0ZXN0X2RvbV9ub2RlX2hpZXJhcmNoeV9uYXZpZ2F0aW9uKERvbU5vZGVGaXh0dXJlKiBm
aXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRv
Y3VtZW50OworICAgIFdlYktpdERPTUhUTUxIZWFkRWxlbWVudCogaGVhZDsKKyAgICBXZWJLaXRE
T01IVE1MQm9keUVsZW1lbnQqIGJvZHk7CisgICAgV2ViS2l0RE9NTm9kZUxpc3QqIGxpc3Q7Cisg
ICAgV2ViS2l0RE9NTm9kZSogcHRyOworICAgIGd1bG9uZyBpLCBsZW5ndGg7CisKKyAgICBkb2N1
bWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50KFdFQktJVF9XRUJfVklFVyhm
aXh0dXJlLT53ZWJWaWV3KSk7CisgICAgZ19hc3NlcnQoZG9jdW1lbnQpOworICAgIGdfYXNzZXJ0
KFdFQktJVF9ET01fSVNfRE9DVU1FTlQoZG9jdW1lbnQpKTsKKyAgICBoZWFkID0gd2Via2l0X2Rv
bV9kb2N1bWVudF9nZXRfaGVhZChkb2N1bWVudCk7CisgICAgZ19hc3NlcnQoaGVhZCk7CisgICAg
Z19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0hFQURfRUxFTUVOVChoZWFkKSk7CisKKyAgICAv
KiBUaXRsZSwgaGVhZCdzIGNoaWxkICovCisgICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2hh
c19jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoaGVhZCkpKTsKKyAgICBsaXN0ID0gd2Via2l0
X2RvbV9ub2RlX2dldF9jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoaGVhZCkpOworICAgIGdf
YXNzZXJ0X2NtcGludCh3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QpLCA9PSwg
MSk7CisgICAgcHRyID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0LCAwKTsKKyAgICBn
X2Fzc2VydChwdHIpOworICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9USVRMRV9FTEVN
RU5UKHB0cikpOworICAgIGdfb2JqZWN0X3VucmVmKGxpc3QpOworCisgICAgLyogQm9keSwgSGVh
ZCBzaWJsaW5nICovCisgICAgcHRyID0gd2Via2l0X2RvbV9ub2RlX2dldF9uZXh0X3NpYmxpbmco
V0VCS0lUX0RPTV9OT0RFKGhlYWQpKTsKKyAgICBnX2Fzc2VydChwdHIpOworICAgIGJvZHkgPSBX
RUJLSVRfRE9NX0hUTUxfQk9EWV9FTEVNRU5UKHB0cik7CisgICAgZ19hc3NlcnQoV0VCS0lUX0RP
TV9JU19IVE1MX0JPRFlfRUxFTUVOVChib2R5KSk7CisKKyAgICAvKiBUaGVyZSBpcyBubyB0aGly
ZCBzaWJsaW5nICovCisgICAgcHRyID0gd2Via2l0X2RvbV9ub2RlX2dldF9uZXh0X3NpYmxpbmco
cHRyKTsKKyAgICBnX2Fzc2VydChwdHIgPT0gTlVMTCk7CisKKyAgICAvKiBCb2R5J3MgcHJldmlv
dXMgc2libGluZyBpcyBIZWFkICovCisgICAgcHRyID0gd2Via2l0X2RvbV9ub2RlX2dldF9wcmV2
aW91c19zaWJsaW5nKFdFQktJVF9ET01fTk9ERShib2R5KSk7CisgICAgZ19hc3NlcnQocHRyKTsK
KyAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfSEVBRF9FTEVNRU5UKHB0cikpOworCisg
ICAgLyogQm9keSBoYXMgMyBjaGlsZHJlbiAqLworICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9k
ZV9oYXNfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKSk7CisgICAgbGlzdCA9IHdl
YmtpdF9kb21fbm9kZV9nZXRfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKTsKKyAg
ICBsZW5ndGggPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QpOworICAgIGdf
YXNzZXJ0X2NtcGludChsZW5ndGgsID09LCAzKTsKKworICAgIC8qIFRoZSB0aHJlZSBvZiB0aGVt
IGFyZSBQIHRhZ3MgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAg
ICAgcHRyID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0LCBpKTsKKyAgICAgICAgZ19h
c3NlcnQocHRyKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX1BBUkFHUkFQ
SF9FTEVNRU5UKHB0cikpOworICAgIH0KKworICAgIC8qIEdvIGJhY2t3YXJkcyAqLworICAgIGZv
ciAoaSA9IDA7IHB0cjsgcHRyID0gd2Via2l0X2RvbV9ub2RlX2dldF9wcmV2aW91c19zaWJsaW5n
KHB0ciksIGkrKykKKyAgICAgICAgLyogTm90aGluZyAqLzsKKworICAgIGdfYXNzZXJ0X2NtcGlu
dChpLCA9PSwgMyk7CisgICAgZ19vYmplY3RfdW5yZWYobGlzdCk7Cit9CisKK3N0YXRpYyB2b2lk
IHRlc3RfZG9tX25vZGVfaW5zZXJ0aW9uKERvbU5vZGVGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rw
b2ludGVyIGRhdGEpCit7CisgICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50OworICAgIFdl
YktpdERPTUhUTUxFbGVtZW50KiBib2R5OworICAgIFdlYktpdERPTUVsZW1lbnQqIHAsICpkaXY7
CisgICAgV2ViS2l0RE9NTm9kZUxpc3QqIGxpc3Q7CisgICAgV2ViS2l0RE9NTm9kZSogbm9kZTsK
KworICAgIGRvY3VtZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQoV0VCS0lU
X1dFQl9WSUVXKGZpeHR1cmUtPndlYlZpZXcpKTsKKyAgICBnX2Fzc2VydChkb2N1bWVudCk7Cisg
ICAgYm9keSA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2JvZHkoZG9jdW1lbnQpOworICAgIGdf
YXNzZXJ0KGJvZHkpOworICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKGJv
ZHkpKTsKKworICAgIC8qIEJvZHkgc2hvdWxkbid0IGhhdmUgYW55IGNoaWxkcmVuIGF0IHRoaXMg
cG9pbnQgKi8KKyAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaGFzX2NoaWxkX25vZGVzKFdF
QktJVF9ET01fTk9ERShib2R5KSkgPT0gRkFMU0UpOworCisgICAgLyogSW5zZXJ0IG9uZSBQIGVs
ZW1lbnQgKi8KKyAgICBwID0gd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZWxlbWVudChkb2N1
bWVudCwgIlAiLCBOVUxMKTsKKyAgICB3ZWJraXRfZG9tX25vZGVfYXBwZW5kX2NoaWxkKFdFQktJ
VF9ET01fTk9ERShib2R5KSwgV0VCS0lUX0RPTV9OT0RFKHApLCBOVUxMKTsKKworICAgIC8qIE5v
dyBpdCBzaG91bGQgaGF2ZSBvbmUsIHRoZSBzYW1lIHRoYXQgd2UgaW5zZXJ0ZWQgKi8KKyAgICBn
X2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaGFzX2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShi
b2R5KSkpOworICAgIGxpc3QgPSB3ZWJraXRfZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVzKFdFQktJ
VF9ET01fTk9ERShib2R5KSk7CisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9kb21fbm9kZV9s
aXN0X2dldF9sZW5ndGgobGlzdCksID09LCAxKTsKKyAgICBub2RlID0gd2Via2l0X2RvbV9ub2Rl
X2xpc3RfaXRlbShsaXN0LCAwKTsKKyAgICBnX2Fzc2VydChub2RlKTsKKyAgICBnX2Fzc2VydCh3
ZWJraXRfZG9tX25vZGVfaXNfc2FtZV9ub2RlKFdFQktJVF9ET01fTk9ERShwKSwgbm9kZSkpOwor
ICAgIGdfb2JqZWN0X3VucmVmKGxpc3QpOworCisgICAgLyogUmVwbGFjZSB0aGUgUCB0YWcgd2l0
aCBhIERJViB0YWcgKi8KKyAgICBkaXYgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9lbGVt
ZW50KGRvY3VtZW50LCAiRElWIiwgTlVMTCk7CisgICAgd2Via2l0X2RvbV9ub2RlX3JlcGxhY2Vf
Y2hpbGQoV0VCS0lUX0RPTV9OT0RFKGJvZHkpLCBXRUJLSVRfRE9NX05PREUoZGl2KSwgV0VCS0lU
X0RPTV9OT0RFKHApLCBOVUxMKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaGFzX2No
aWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSkpOworICAgIGxpc3QgPSB3ZWJraXRfZG9t
X25vZGVfZ2V0X2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSk7CisgICAgZ19hc3Nl
cnRfY21waW50KHdlYmtpdF9kb21fbm9kZV9saXN0X2dldF9sZW5ndGgobGlzdCksID09LCAxKTsK
KyAgICBub2RlID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0LCAwKTsKKyAgICBnX2Fz
c2VydChub2RlKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaXNfc2FtZV9ub2RlKFdF
QktJVF9ET01fTk9ERShkaXYpLCBub2RlKSk7CisgICAgZ19vYmplY3RfdW5yZWYobGlzdCk7CisK
KyAgICAvKiBOb3cgcmVtb3ZlIHRoZSB0YWcgKi8KKyAgICB3ZWJraXRfZG9tX25vZGVfcmVtb3Zl
X2NoaWxkKFdFQktJVF9ET01fTk9ERShib2R5KSwgbm9kZSwgTlVMTCk7CisgICAgbGlzdCA9IHdl
YmtpdF9kb21fbm9kZV9nZXRfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChsaXN0KSwg
PT0sIDApOworICAgIGdfb2JqZWN0X3VucmVmKGxpc3QpOworCisgICAgLyogVGVzdCBpbnNlcnRf
YmVmb3JlICovCisKKyAgICAvKiBJZiByZWZDaGlsZCBpcyBudWxsLCBpbnNlcnQgbmV3Q2hpbGQg
YXMgbGFzdCBlbGVtZW50IG9mIHBhcmVudCAqLworICAgIGRpdiA9IHdlYmtpdF9kb21fZG9jdW1l
bnRfY3JlYXRlX2VsZW1lbnQoZG9jdW1lbnQsICJESVYiLCBOVUxMKTsKKyAgICB3ZWJraXRfZG9t
X25vZGVfaW5zZXJ0X2JlZm9yZShXRUJLSVRfRE9NX05PREUoYm9keSksIFdFQktJVF9ET01fTk9E
RShkaXYpLCBOVUxMLCBOVUxMKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaGFzX2No
aWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSkpOworICAgIGxpc3QgPSB3ZWJraXRfZG9t
X25vZGVfZ2V0X2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSk7CisgICAgZ19hc3Nl
cnRfY21waW50KHdlYmtpdF9kb21fbm9kZV9saXN0X2dldF9sZW5ndGgobGlzdCksID09LCAxKTsK
KyAgICBub2RlID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0LCAwKTsKKyAgICBnX2Fz
c2VydChub2RlKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaXNfc2FtZV9ub2RlKFdF
QktJVF9ET01fTk9ERShkaXYpLCBub2RlKSk7CisgICAgZ19vYmplY3RfdW5yZWYobGlzdCk7CisK
KyAgICAvKiBOb3cgaW5zZXJ0IGEgJ3AnIGJlZm9yZSAnZGl2JyAqLworICAgIHAgPSB3ZWJraXRf
ZG9tX2RvY3VtZW50X2NyZWF0ZV9lbGVtZW50KGRvY3VtZW50LCAiUCIsIE5VTEwpOworICAgIHdl
YmtpdF9kb21fbm9kZV9pbnNlcnRfYmVmb3JlKFdFQktJVF9ET01fTk9ERShib2R5KSwgV0VCS0lU
X0RPTV9OT0RFKHApLCBXRUJLSVRfRE9NX05PREUoZGl2KSwgTlVMTCk7CisgICAgZ19hc3NlcnQo
d2Via2l0X2RvbV9ub2RlX2hhc19jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpKTsK
KyAgICBsaXN0ID0gd2Via2l0X2RvbV9ub2RlX2dldF9jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05P
REUoYm9keSkpOworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRf
bGVuZ3RoKGxpc3QpLCA9PSwgMik7CisgICAgbm9kZSA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0
ZW0obGlzdCwgMCk7CisgICAgZ19hc3NlcnQobm9kZSk7CisgICAgZ19hc3NlcnQod2Via2l0X2Rv
bV9ub2RlX2lzX3NhbWVfbm9kZShXRUJLSVRfRE9NX05PREUocCksIG5vZGUpKTsKKyAgICBub2Rl
ID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0LCAxKTsKKyAgICBnX2Fzc2VydChub2Rl
KTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaXNfc2FtZV9ub2RlKFdFQktJVF9ET01f
Tk9ERShkaXYpLCBub2RlKSk7CisgICAgZ19vYmplY3RfdW5yZWYobGlzdCk7Cit9CisKK2ludCBt
YWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAm
YXJndiwgTlVMTCk7CisKKyAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQu
b3JnLyIpOworCisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9kb21ub2RlL3Rlc3RfaGllcmFyY2h5
X25hdmlnYXRpb24iLAorICAgICAgICAgICAgICAgRG9tTm9kZUZpeHR1cmUsIEhUTUxfRE9DVU1F
TlRfSElFUkFSQ0hZX05BVklHQVRJT04sCisgICAgICAgICAgICAgICBkb21fbm9kZV9maXh0dXJl
X3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF9kb21fbm9kZV9oaWVyYXJjaHlfbmF2aWdhdGlv
biwKKyAgICAgICAgICAgICAgIGRvbV9ub2RlX2ZpeHR1cmVfdGVhcmRvd24pOworCisgICAgZ190
ZXN0X2FkZCgiL3dlYmtpdC9kb21ub2RlL3Rlc3RfaW5zZXJ0aW9uIiwKKyAgICAgICAgICAgICAg
IERvbU5vZGVGaXh0dXJlLCBIVE1MX0RPQ1VNRU5UX05PREVfSU5TRVJUSU9OLAorICAgICAgICAg
ICAgICAgZG9tX25vZGVfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3RfZG9tX25v
ZGVfaW5zZXJ0aW9uLAorICAgICAgICAgICAgICAgZG9tX25vZGVfZml4dHVyZV90ZWFyZG93bik7
CisKKyAgICByZXR1cm4gZ190ZXN0X3J1bigpOworfQorCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0ZG93bmxvYWQuYyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3Rkb3dubG9hZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmY4ZThkZWQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0ZG93bmxvYWQuYwpAQCAtMCwwICsxLDMyMiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkB0d290
b2FzdHMuZGU+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNs
dWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgorI2luY2x1ZGUgPHdlYmtp
dC93ZWJraXQuaD4KKworR01haW5Mb29wKiBsb29wOworY2hhciogdGVtcG9yYXJ5RmlsZW5hbWUg
PSBOVUxMOworV2ViS2l0RG93bmxvYWQqIHRoZURvd25sb2FkID0gTlVMTDsKKworc3RhdGljIHZv
aWQKK3Rlc3Rfd2Via2l0X2Rvd25sb2FkX2NyZWF0ZSh2b2lkKQoreworICAgIFdlYktpdE5ldHdv
cmtSZXF1ZXN0KiByZXF1ZXN0OworICAgIFdlYktpdERvd25sb2FkKiBkb3dubG9hZDsKKyAgICBj
b25zdCBnY2hhciogdXJpID0gImh0dHA6Ly9leGFtcGxlLmNvbSI7CisgICAgZ2NoYXIqIHRtcERp
cjsKKworICAgIHJlcXVlc3QgPSB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X25ldyh1cmkpOworICAg
IGRvd25sb2FkID0gd2Via2l0X2Rvd25sb2FkX25ldyhyZXF1ZXN0KTsKKyAgICBnX29iamVjdF91
bnJlZihyZXF1ZXN0KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2Rvd25sb2FkX2dldF91
cmkoZG93bmxvYWQpLCA9PSwgdXJpKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfZG93bmxvYWRfZ2V0
X25ldHdvcmtfcmVxdWVzdChkb3dubG9hZCkgPT0gcmVxdWVzdCk7CisgICAgZ19hc3NlcnQoZ19z
dHJyc3RyKHVyaSwgd2Via2l0X2Rvd25sb2FkX2dldF9zdWdnZXN0ZWRfZmlsZW5hbWUoZG93bmxv
YWQpKSk7CisgICAgZ19hc3NlcnQod2Via2l0X2Rvd25sb2FkX2dldF9zdGF0dXMoZG93bmxvYWQp
ID09IFdFQktJVF9ET1dOTE9BRF9TVEFUVVNfQ1JFQVRFRCk7CisgICAgZ19hc3NlcnQoIXdlYmtp
dF9kb3dubG9hZF9nZXRfdG90YWxfc2l6ZShkb3dubG9hZCkpOworICAgIGdfYXNzZXJ0KCF3ZWJr
aXRfZG93bmxvYWRfZ2V0X2N1cnJlbnRfc2l6ZShkb3dubG9hZCkpOworICAgIGdfYXNzZXJ0KCF3
ZWJraXRfZG93bmxvYWRfZ2V0X3Byb2dyZXNzKGRvd25sb2FkKSk7CisgICAgZ19hc3NlcnQoIXdl
YmtpdF9kb3dubG9hZF9nZXRfZWxhcHNlZF90aW1lKGRvd25sb2FkKSk7CisgICAgdG1wRGlyID0g
Z19maWxlbmFtZV90b191cmkoZ19nZXRfdG1wX2RpcigpLCBOVUxMLCBOVUxMKTsKKyAgICB3ZWJr
aXRfZG93bmxvYWRfc2V0X2Rlc3RpbmF0aW9uX3VyaShkb3dubG9hZCwgdG1wRGlyKTsKKyAgICBn
X2Fzc2VydF9jbXBzdHIodG1wRGlyLCA9PSwgd2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlv
bl91cmkoZG93bmxvYWQpKTs7CisgICAgZ19mcmVlKHRtcERpcik7CisgICAgZ19vYmplY3RfdW5y
ZWYoZG93bmxvYWQpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK25hdmlnYXRpb25fcG9saWN5X2Rl
Y2lzaW9uX3JlcXVlc3RlZF9jYihXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRXZWJGcmFtZSogd2ViX2ZyYW1lLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdE5ldHdvcmtSZXF1
ZXN0KiByZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdl
YktpdFdlYk5hdmlnYXRpb25BY3Rpb24qIGFjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBXZWJLaXRXZWJQb2xpY3lEZWNpc2lvbiogZGVjaXNpb24sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgZGF0YSkKK3sKKyAg
ICB3ZWJraXRfd2ViX3BvbGljeV9kZWNpc2lvbl9kb3dubG9hZChkZWNpc2lvbik7CisgICAgcmV0
dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkCitub3RpZnlfc3RhdHVzX2NiKEdPYmplY3QqIG9i
amVjdCwgR1BhcmFtU3BlYyogcHNwZWMsIGdwb2ludGVyIGRhdGEpCit7CisgICAgV2ViS2l0RG93
bmxvYWQqIGRvd25sb2FkID0gV0VCS0lUX0RPV05MT0FEKG9iamVjdCk7CisgICAgc3dpdGNoICh3
ZWJraXRfZG93bmxvYWRfZ2V0X3N0YXR1cyhkb3dubG9hZCkpIHsKKyAgICBjYXNlIFdFQktJVF9E
T1dOTE9BRF9TVEFUVVNfRklOSVNIRUQ6CisgICAgY2FzZSBXRUJLSVRfRE9XTkxPQURfU1RBVFVT
X0VSUk9SOgorICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFdFQktJVF9ET1dOTE9BRF9TVEFUVVNfQ0FOQ0VMTEVEOgorICAgICAgICBnX2Fz
c2VydF9ub3RfcmVhY2hlZCgpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorc2V0X2ZpbGVuYW1lKGdjaGFy
KiBmaWxlbmFtZSkKK3sKKyAgICBnY2hhciAqdXJpID0gZ19maWxlbmFtZV90b191cmkoZmlsZW5h
bWUsIE5VTEwsIE5VTEwpOworCisgICAgd2Via2l0X2Rvd25sb2FkX3NldF9kZXN0aW5hdGlvbl91
cmkodGhlRG93bmxvYWQsIHVyaSk7CisgICAgZ19mcmVlKHVyaSk7CisKKyAgICB3ZWJraXRfZG93
bmxvYWRfc3RhcnQodGhlRG93bmxvYWQpOworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGlj
IHZvaWQKK2hhbmRsZV9kb3dubG9hZF9yZXF1ZXN0ZWRfY2IoV2ViS2l0RG93bmxvYWQqIGRvd25s
b2FkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiogYmVlblRoZXJlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiBhc3luY2gpCit7CisgICAgdGhl
RG93bmxvYWQgPSBkb3dubG9hZDsKKyAgICAqYmVlblRoZXJlID0gVFJVRTsKKworICAgIGlmICh0
ZW1wb3JhcnlGaWxlbmFtZSkgeworICAgICAgICBpZiAoYXN5bmNoKSB7CisgICAgICAgICAgICBn
X2lkbGVfYWRkKChHU291cmNlRnVuYylzZXRfZmlsZW5hbWUsIHRlbXBvcmFyeUZpbGVuYW1lKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGdjaGFyICp1cmkgPSBnX2ZpbGVuYW1lX3Rv
X3VyaSh0ZW1wb3JhcnlGaWxlbmFtZSwgTlVMTCwgTlVMTCk7CisgICAgICAgICAgICBpZiAodXJp
KQorICAgICAgICAgICAgICAgIHdlYmtpdF9kb3dubG9hZF9zZXRfZGVzdGluYXRpb25fdXJpKGRv
d25sb2FkLCB1cmkpOworICAgICAgICAgICAgZ19mcmVlKHVyaSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KGRvd25sb2FkLCAibm90aWZ5OjpzdGF0dXMiLAorICAg
ICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhub3RpZnlfc3RhdHVzX2NiKSwgTlVMTCk7Cit9
CisKK3N0YXRpYyBnYm9vbGVhbgorZG93bmxvYWRfcmVxdWVzdGVkX2NiKFdlYktpdFdlYlZpZXcq
IHdlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgIFdlYktpdERvd25sb2FkKiBkb3dubG9h
ZCwKKyAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiogYmVlblRoZXJlKQoreworICAgIGhh
bmRsZV9kb3dubG9hZF9yZXF1ZXN0ZWRfY2IoZG93bmxvYWQsIGJlZW5UaGVyZSwgRkFMU0UpOwor
ICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2Rvd25sb2FkX3JlcXVlc3Rl
ZF9hc3luY2hfY2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2Jvb2xlYW4qIGJlZW5UaGVyZSkKK3sKKyAgICBoYW5kbGVfZG93bmxvYWRfcmVx
dWVzdGVkX2NiKGRvd25sb2FkLCBiZWVuVGhlcmUsIFRSVUUpOworICAgIHJldHVybiBUUlVFOwor
fQorCitzdGF0aWMgdm9pZAordGVzdF93ZWJraXRfZG93bmxvYWRfcGVyZm9ybShnYm9vbGVhbiBh
c3luY2gpCit7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3
ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIEdDYWxsYmFjayBkb3dubG9hZFJlcXVlc3RDYWxs
YmFjayA9IE5VTEw7CisKKyAgICBnX29iamVjdF9yZWZfc2luayhHX09CSkVDVCh3ZWJWaWV3KSk7
CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJuYXZpZ2F0aW9uLXBvbGljeS1kZWNp
c2lvbi1yZXF1ZXN0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhuYXZpZ2F0
aW9uX3BvbGljeV9kZWNpc2lvbl9yZXF1ZXN0ZWRfY2IpLAorICAgICAgICAgICAgICAgICAgICAg
TlVMTCk7CisKKyAgICBpZiAoYXN5bmNoKQorICAgICAgICBkb3dubG9hZFJlcXVlc3RDYWxsYmFj
ayA9IEdfQ0FMTEJBQ0soZG93bmxvYWRfcmVxdWVzdGVkX2FzeW5jaF9jYik7CisgICAgZWxzZQor
ICAgICAgICBkb3dubG9hZFJlcXVlc3RDYWxsYmFjayA9IEdfQ0FMTEJBQ0soZG93bmxvYWRfcmVx
dWVzdGVkX2NiKTsKKworICAgIGdib29sZWFuIGJlZW5UaGVyZSA9IEZBTFNFOworICAgIGdfc2ln
bmFsX2Nvbm5lY3Qod2ViVmlldywgImRvd25sb2FkLXJlcXVlc3RlZCIsCisgICAgICAgICAgICAg
ICAgICAgICBkb3dubG9hZFJlcXVlc3RDYWxsYmFjaywgJmJlZW5UaGVyZSk7CisKKyAgICAvKiBQ
cmVwYXJhdGlvbjsgRklYTUU6IHdlIHNob3VsZCBtb3ZlIHRoaXMgY29kZSB0byBhIHRlc3QKKyAg
ICAgKiB1dGlsaXRpZXMgZmlsZSwgYmVjYXVzZSB3ZSBoYXZlIGEgdmVyeSBzaW1pbGFyIG9uZSBp
bgorICAgICAqIHRlc3R3ZWJmcmFtZS5jICovCisgICAgR0Vycm9yICplcnJvciA9IE5VTEw7Cisg
ICAgZ2NoYXIqIGZpbGVuYW1lOworICAgIGludCBmZCA9IGdfZmlsZV9vcGVuX3RtcCgid2Via2l0
LXRlc3R3ZWJkb3dubG9hZC1YWFhYWFgiLCAmZmlsZW5hbWUsICZlcnJvcik7CisgICAgY2xvc2Uo
ZmQpOworCisgICAgaWYgKGVycm9yKQorICAgICAgICBnX2NyaXRpY2FsKCJGYWlsZWQgdG8gb3Bl
biBhIHRlbXBvcmFyeSBmaWxlIGZvciB3cml0aW5nOiAlcy4iLCBlcnJvci0+bWVzc2FnZSk7CisK
KyAgICBpZiAoZ191bmxpbmsoZmlsZW5hbWUpID09IC0xKQorICAgICAgICBnX2NyaXRpY2FsKCJG
YWlsZWQgdG8gZGVsZXRlIHRoZSB0ZW1wb3JhcnkgZmlsZTogJXMuIiwgZ19zdHJlcnJvcihlcnJu
bykpOworCisgICAgdGhlRG93bmxvYWQgPSBOVUxMOworICAgIHRlbXBvcmFyeUZpbGVuYW1lID0g
ZmlsZW5hbWU7CisKKyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworICAg
IHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh3ZWJWaWV3LCAiaHR0cDovL2dub21lLm9yZy8iKTsK
KyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQoYmVlblRo
ZXJlLCA9PSwgVFJVRSk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19maWxlX3Rlc3QodGVtcG9y
YXJ5RmlsZW5hbWUsIEdfRklMRV9URVNUX0lTX1JFR1VMQVIpLCA9PSwgVFJVRSk7CisKKyAgICBn
X3VubGluayh0ZW1wb3JhcnlGaWxlbmFtZSk7CisgICAgZ19mcmVlKHRlbXBvcmFyeUZpbGVuYW1l
KTsKKyAgICB0ZW1wb3JhcnlGaWxlbmFtZSA9IE5VTEw7CisKKyAgICBnX21haW5fbG9vcF91bnJl
Zihsb29wKTsKKyAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKK30KKworc3RhdGljIHZvaWQK
K3Rlc3Rfd2Via2l0X2Rvd25sb2FkX3N5bmNoKHZvaWQpCit7CisgICAgdGVzdF93ZWJraXRfZG93
bmxvYWRfcGVyZm9ybShGQUxTRSk7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3dlYmtpdF9kb3du
bG9hZF9hc3luY2godm9pZCkKK3sKKyAgICB0ZXN0X3dlYmtpdF9kb3dubG9hZF9wZXJmb3JtKFRS
VUUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gbWltZV90eXBlX3BvbGljeV9kZWNpc2lvbl9yZXF1
ZXN0ZWRfY2IoV2ViS2l0V2ViVmlldyogdmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktp
dE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0LCBjb25zdCBjaGFyKiBtaW1lX3R5cGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0V2Vi
UG9saWN5RGVjaXNpb24qIGRlY2lzaW9uLCBncG9pbnRlciBkYXRhKQoreworICAgIHdlYmtpdF93
ZWJfcG9saWN5X2RlY2lzaW9uX2Rvd25sb2FkKGRlY2lzaW9uKTsKKyAgICByZXR1cm4gVFJVRTsK
K30KKworc3RhdGljIHZvaWQgaWRsZV9xdWl0X2xvb3BfY2IoV2ViS2l0V2ViVmlldyogd2ViX3Zp
ZXcsIEdQYXJhbVNwZWMqIHBzcGVjLCBncG9pbnRlciBkYXRhKQoreworICAgIGlmICh3ZWJraXRf
d2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYl92aWV3KSA9PSBXRUJLSVRfTE9BRF9GSU5JU0hF
RCB8fAorICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYl92aWV3KSA9
PSBXRUJLSVRfTE9BRF9GQUlMRUQpCisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Cit9
CisKK3N0YXRpYyB2b2lkCit0ZXN0X3dlYmtpdF9kb3dubG9hZF9kYXRhKHZvaWQpCit7CisgICAg
Z2Jvb2xlYW4gYmVlblRoZXJlID0gRkFMU0U7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9
IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3Jl
Zl9zaW5rKHdlYlZpZXcpOworCisgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAiZG93bmxv
YWQtcmVxdWVzdGVkIiwKKyAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0soZG93bmxvYWRf
cmVxdWVzdGVkX2NiKSwKKyAgICAgICAgICAgICAgICAgICAgICZiZWVuVGhlcmUpOworCisgICAg
Z19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsCisgICAgICAg
ICAgICAgICAgICAgICBHX0NBTExCQUNLKGlkbGVfcXVpdF9sb29wX2NiKSwKKyAgICAgICAgICAg
ICAgICAgICAgIE5VTEwpOworCisgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAibWltZS10
eXBlLXBvbGljeS1kZWNpc2lvbi1yZXF1ZXN0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgR19D
QUxMQkFDSyhtaW1lX3R5cGVfcG9saWN5X2RlY2lzaW9uX3JlcXVlc3RlZF9jYiksCisgICAgICAg
ICAgICAgICAgICAgICBOVUxMKTsKKworICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwg
VFJVRSk7CisKKyAgICAvKiBXZSdyZSB0ZXN0aW5nIGZvciBhIGNyYXNoLCBzbyBqdXN0IG5vdCBj
cmFzaGluZyBpcyBhIHBhc3MgKi8KKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkod2ViVmll
dywgImRhdGE6YXBwbGljYXRpb24vb2N0ZWN0LXN0cmVhbSwiKTsKKyAgICBnX21haW5fbG9vcF9y
dW4obG9vcCk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQoYmVlblRoZXJlLCA9PSwgVFJVRSk7CisK
KyAgICBnX21haW5fbG9vcF91bnJlZihsb29wKTsKKyAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3
KTsKK30KKworc3RhdGljIHZvaWQgbm90aWZ5RG93bmxvYWRTdGF0dXNDYWxsYmFjayhHT2JqZWN0
ICpvYmplY3QsIEdQYXJhbVNwZWMgKnBzcGVjLCBncG9pbnRlciBkYXRhKQoreworICAgIFdlYktp
dERvd25sb2FkICpkb3dubG9hZCA9IFdFQktJVF9ET1dOTE9BRChvYmplY3QpOworICAgIFdlYktp
dE5ldHdvcmtSZXNwb25zZSAqcmVzcG9uc2UgPSB3ZWJraXRfZG93bmxvYWRfZ2V0X25ldHdvcmtf
cmVzcG9uc2UoZG93bmxvYWQpOworICAgIFNvdXBNZXNzYWdlICptZXNzYWdlID0gd2Via2l0X25l
dHdvcmtfcmVzcG9uc2VfZ2V0X21lc3NhZ2UocmVzcG9uc2UpOworCisgICAgc3dpdGNoICh3ZWJr
aXRfZG93bmxvYWRfZ2V0X3N0YXR1cyhkb3dubG9hZCkpIHsKKyAgICBjYXNlIFdFQktJVF9ET1dO
TE9BRF9TVEFUVVNfRVJST1I6CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChtZXNzYWdlLT5zdGF0
dXNfY29kZSwgPT0sIDQwNCk7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0RPV05MT0FEX1NUQVRVU19GSU5JU0hFRDoKKyAg
ICBjYXNlIFdFQktJVF9ET1dOTE9BRF9TVEFUVVNfQ0FOQ0VMTEVEOgorICAgICAgICBnX2Fzc2Vy
dF9ub3RfcmVhY2hlZCgpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBi
cmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIg
KnNlcnZlciwgU291cE1lc3NhZ2UgKm1lc3NhZ2UsIGNvbnN0IGNoYXIgKnBhdGgsIEdIYXNoVGFi
bGUgKnF1ZXJ5LCBTb3VwQ2xpZW50Q29udGV4dCAqY29udGV4dCwgZ3BvaW50ZXIgdXNlckRhdGEp
Cit7CisgICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKKyAgICAg
ICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExF
TUVOVEVEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9zZXRf
c3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7CisgICAgc291cF9tZXNzYWdl
X2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7Cit9CisKK3N0YXRpYyB2b2lk
IHRlc3Rfd2Via2l0X2Rvd25sb2FkX25vdF9mb3VuZCh2b2lkKQoreworICAgIFNvdXBTZXJ2ZXIg
KnNlcnZlciA9IHNvdXBfc2VydmVyX25ldyhTT1VQX1NFUlZFUl9QT1JULCAwLCBOVUxMKTsKKyAg
ICBzb3VwX3NlcnZlcl9ydW5fYXN5bmMoc2VydmVyKTsKKyAgICBzb3VwX3NlcnZlcl9hZGRfaGFu
ZGxlcihzZXJ2ZXIsIE5VTEwsIHNlcnZlckNhbGxiYWNrLCBOVUxMLCBOVUxMKTsKKyAgICBTb3Vw
VVJJICpiYXNlVVJJID0gc291cF91cmlfbmV3KCJodHRwOi8vMTI3LjAuMC4xLyIpOworICAgIHNv
dXBfdXJpX3NldF9wb3J0KGJhc2VVUkksIHNvdXBfc2VydmVyX2dldF9wb3J0KHNlcnZlcikpOwor
CisgICAgU291cFVSSSAqdXJpID0gc291cF91cmlfbmV3X3dpdGhfYmFzZShiYXNlVVJJLCAiL2Zv
byIpOworICAgIGNoYXIgKnVyaVN0cmluZyA9IHNvdXBfdXJpX3RvX3N0cmluZyh1cmksIEZBTFNF
KTsKKyAgICBzb3VwX3VyaV9mcmVlKHVyaSk7CisKKyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3
KE5VTEwsIFRSVUUpOworICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0ICpyZXF1ZXN0ID0gd2Via2l0
X25ldHdvcmtfcmVxdWVzdF9uZXcodXJpU3RyaW5nKTsKKyAgICBnX2ZyZWUgKHVyaVN0cmluZyk7
CisgICAgV2ViS2l0RG93bmxvYWQgKmRvd25sb2FkID0gd2Via2l0X2Rvd25sb2FkX25ldyhyZXF1
ZXN0KTsKKyAgICBnX29iamVjdF91bnJlZihyZXF1ZXN0KTsKKworICAgIHdlYmtpdF9kb3dubG9h
ZF9zZXRfZGVzdGluYXRpb25fdXJpKGRvd25sb2FkLCAiZmlsZTovLy90bXAvZm9vIik7CisgICAg
Z19zaWduYWxfY29ubmVjdChkb3dubG9hZCwgIm5vdGlmeTo6c3RhdHVzIiwgR19DQUxMQkFDSyhu
b3RpZnlEb3dubG9hZFN0YXR1c0NhbGxiYWNrKSwgTlVMTCk7CisKKyAgICB3ZWJraXRfZG93bmxv
YWRfc3RhcnQoZG93bmxvYWQpOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIGdf
b2JqZWN0X3VucmVmKGRvd25sb2FkKTsKKyAgICBnX21haW5fbG9vcF91bnJlZihsb29wKTsKKyAg
ICBzb3VwX3VyaV9mcmVlKGJhc2VVUkkpOworICAgIGdfb2JqZWN0X3VucmVmKHNlcnZlcik7Cit9
CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBndGtfdGVzdF9pbml0
KCZhcmdjLCAmYXJndiwgTlVMTCk7CisKKyAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVn
cy53ZWJraXQub3JnLyIpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9kb3dubG9hZC9j
cmVhdGUiLCB0ZXN0X3dlYmtpdF9kb3dubG9hZF9jcmVhdGUpOworICAgIGdfdGVzdF9hZGRfZnVu
YygiL3dlYmtpdC9kb3dubG9hZC9zeW5jaCIsIHRlc3Rfd2Via2l0X2Rvd25sb2FkX3N5bmNoKTsK
KyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvZG93bmxvYWQvYXN5bmNoIiwgdGVzdF93ZWJr
aXRfZG93bmxvYWRfYXN5bmNoKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvZG93bmxv
YWQvZGF0YSIsIHRlc3Rfd2Via2l0X2Rvd25sb2FkX2RhdGEpOworICAgIGdfdGVzdF9hZGRfZnVu
YygiL3dlYmtpdC9kb3dubG9hZC9ub3QtZm91bmQiLCB0ZXN0X3dlYmtpdF9kb3dubG9hZF9ub3Rf
Zm91bmQpOworICAgIHJldHVybiBnX3Rlc3RfcnVuICgpOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGZhdmljb25kYXRhYmFzZS5jIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGZhdmljb25kYXRhYmFzZS5jCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MmRhNDkKLS0tIC9kZXYvbnVsbAor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0ZmF2aWNvbmRhdGFi
YXNlLmMKQEAgLTAsMCArMSwyNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlh
IFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInRlc3RfdXRpbHMuaCIKKyNpbmNs
dWRlIDxnbGliL2dzdGRpby5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDxzdHJp
bmcuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+CisKK2NvbnN0IGludCBnSWNvblNpemUg
PSAxNjsKKworR01haW5Mb29wICpsb29wOworY2hhciAqYmFzZVVSSTsKKworc3RhdGljIHZvaWQK
K3NlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIgKnNlcnZlciwgU291cE1lc3NhZ2UgKm1lc3NhZ2Us
IGNvbnN0IGNoYXIgKnBhdGgsIEdIYXNoVGFibGUgKnF1ZXJ5LCBTb3VwQ2xpZW50Q29udGV4dCAq
Y29udGV4dCwgdm9pZCAqZGF0YSkKK3sKKyAgICBpZiAobWVzc2FnZS0+bWV0aG9kICE9IFNPVVBf
TUVUSE9EX0dFVCkgeworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBT
T1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOworCisg
ICAgY2hhciAqY29udGVudHM7CisgICAgZ3NpemUgbGVuZ3RoOworICAgIGlmIChnX3N0cl9lcXVh
bChwYXRoLCAiL2Zhdmljb24uaWNvIikpIHsKKyAgICAgICAgR0Vycm9yICplcnJvciA9IE5VTEw7
CisKKyAgICAgICAgZ19maWxlX2dldF9jb250ZW50cygiYmxhbmsuaWNvIiwgJmNvbnRlbnRzLCAm
bGVuZ3RoLCAmZXJyb3IpOworICAgICAgICBnX2Fzc2VydCghZXJyb3IpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGNvbnRlbnRzID0gZ19zdHJkdXAoIjxodG1sPjxib2R5PnRlc3Q8L2JvZHk+PC9o
dG1sPiIpOworICAgICAgICBsZW5ndGggPSBzdHJsZW4oY29udGVudHMpOworICAgIH0KKworICAg
IHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01F
TU9SWV9UQUtFLCBjb250ZW50cywgbGVuZ3RoKTsKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21w
bGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKK30KKworc3RhdGljIHZvaWQgZGVsZXRlRGF0
YWJhc2VGaWxlSWZFeGlzdHMoY29uc3QgY2hhciAqZGF0YWJhc2VQYXRoKQoreworICAgIGlmICgh
Z19maWxlX3Rlc3QoZGF0YWJhc2VQYXRoLCBHX0ZJTEVfVEVTVF9JU19ESVIpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBjaGFyICpkYXRhYmFzZUZpbGVuYW1lID0gZ19idWlsZF9maWxlbmFtZShk
YXRhYmFzZVBhdGgsICJXZWJwYWdlSWNvbnMuZGIiLCBOVUxMKTsKKyAgICBpZiAoZ191bmxpbmso
ZGF0YWJhc2VGaWxlbmFtZSkgPT0gLTEpIHsKKyAgICAgICAgZ19mcmVlKGRhdGFiYXNlRmlsZW5h
bWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZ19mcmVlKGRhdGFiYXNlRmlsZW5h
bWUpOworICAgIGdfcm1kaXIoZGF0YWJhc2VQYXRoKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdl
YktpdEZhdmljb25EYXRhYmFzZVNldFBhdGgoKQoreworICAgIGNoYXIgKmRhdGFiYXNlUGF0aCA9
IGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfdG1wX2RpcigpLCAid2Via2l0LXRlc3RmYXZpY29uZGF0
YWJhc2UiLCBOVUxMKTsKKyAgICBkZWxldGVEYXRhYmFzZUZpbGVJZkV4aXN0cyhkYXRhYmFzZVBh
dGgpOworCisgICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlICpkYXRhYmFzZSA9IHdlYmtpdF9nZXRf
ZmF2aWNvbl9kYXRhYmFzZSgpOworICAgIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX3NldF9wYXRo
KGRhdGFiYXNlLCBkYXRhYmFzZVBhdGgpOworCisgICAgZ19hc3NlcnRfY21wc3RyKGRhdGFiYXNl
UGF0aCwgPT0sIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9wYXRoKGRhdGFiYXNlKSk7CisK
KyAgICBnX2ZyZWUoZGF0YWJhc2VQYXRoKTsKK30KKworLy8gU2VlIHRoZSBjb21tZW50IGluIG1h
aW4oKSBmdW5jdGlvbiB0aGF0IGdvZXMgd2l0aCB0aGlzIHNhbWUgZ3VhcmQuCisjaWZkZWYgTkRF
QlVHCisKK3N0YXRpYyB2b2lkIGZhdmljb25EYXRhYmFzZUdldFZhbGlkRmF2aWNvbkNhbGxiYWNr
KEdPYmplY3QgKnNvdXJjZU9iamVjdCwgR0FzeW5jUmVzdWx0ICpyZXN1bHQsIHZvaWQgKnVzZXJE
YXRhKQoreworICAgIGdib29sZWFuICpiZWVuSGVyZSA9IChnYm9vbGVhbiopdXNlckRhdGE7Cisg
ICAgR0Vycm9yICplcnJvciA9IE5VTEw7CisgICAgR2RrUGl4YnVmICppY29uID0gd2Via2l0X2Zh
dmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fcGl4YnVmX2ZpbmlzaChXRUJLSVRfRkFWSUNPTl9E
QVRBQkFTRShzb3VyY2VPYmplY3QpLCByZXN1bHQsICZlcnJvcik7CisgICAgZ19hc3NlcnQoaWNv
bik7CisgICAgZ19vYmplY3RfdW5yZWYoaWNvbik7CisKKyAgICAqYmVlbkhlcmUgPSBUUlVFOwor
CisgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKK30KKworc3RhdGljIHZvaWQgZmF2aWNvbkRh
dGFiYXNlR2V0SW52YWxpZEZhdmljb25DYWxsYmFjayhHT2JqZWN0ICpzb3VyY2VPYmplY3QsIEdB
c3luY1Jlc3VsdCAqcmVzdWx0LCB2b2lkICp1c2VyRGF0YSkKK3sKKyAgICBnYm9vbGVhbiAqYmVl
bkhlcmUgPSAoZ2Jvb2xlYW4qKXVzZXJEYXRhOworICAgIEdFcnJvciAqZXJyb3IgPSBOVUxMOwor
ICAgIEdka1BpeGJ1ZiAqaWNvbiA9IHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29u
X3BpeGJ1Zl9maW5pc2goV0VCS0lUX0ZBVklDT05fREFUQUJBU0Uoc291cmNlT2JqZWN0KSwgcmVz
dWx0LCAmZXJyb3IpOworICAgIGdfYXNzZXJ0KCFpY29uKTsKKworICAgICpiZWVuSGVyZSA9IFRS
VUU7CisKKyAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworfQorCitzdGF0aWMgdm9pZCBmYXZp
Y29uRGF0YWJhc2VHZXRGYXZpY29uQ2FuY2VsbGVkQ2FsbGJhY2soR09iamVjdCAqc291cmNlT2Jq
ZWN0LCBHQXN5bmNSZXN1bHQgKnJlc3VsdCwgdm9pZCAqdXNlckRhdGEpCit7CisgICAgZ2Jvb2xl
YW4gKmJlZW5IZXJlID0gKGdib29sZWFuKil1c2VyRGF0YTsKKyAgICBHRXJyb3IgKmVycm9yID0g
TlVMTDsKKyAgICBHZGtQaXhidWYgKmljb24gPSB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRf
ZmF2aWNvbl9waXhidWZfZmluaXNoKFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFKHNvdXJjZU9iamVj
dCksIHJlc3VsdCwgJmVycm9yKTsKKyAgICBnX2Fzc2VydCghaWNvbik7CisgICAgZ19hc3NlcnQo
ZXJyb3IgJiYgZ19lcnJvcl9tYXRjaGVzKGVycm9yLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX0NB
TkNFTExFRCkpOworCisgICAgKmJlZW5IZXJlID0gVFJVRTsKKworICAgIGdfbWFpbl9sb29wX3F1
aXQobG9vcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBxdWl0TWFpbkxvb3BJZkxvYWRDb21w
bGV0ZWQoZ2Jvb2xlYW4gKmljb25PclBhZ2VMb2FkZWQpCit7CisgICAgaWYgKCppY29uT3JQYWdl
TG9hZGVkKQorICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworICAgIGVsc2UKKyAgICAg
ICAgKmljb25PclBhZ2VMb2FkZWQgPSBUUlVFOworfQorCitzdGF0aWMgdm9pZCBpZGxlUXVpdExv
b3BDYWxsYmFjayhXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3LCBHUGFyYW1TcGVjICpwYXJhbVNwZWMs
IGdib29sZWFuICppY29uT3JQYWdlTG9hZGVkKQoreworICAgIFdlYktpdExvYWRTdGF0dXMgc3Rh
dHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJWaWV3KTsKKworICAgIGlm
IChzdGF0dXMgPT0gV0VCS0lUX0xPQURfRklOSVNIRUQgfHwgc3RhdHVzID09IFdFQktJVF9MT0FE
X0ZBSUxFRCkKKyAgICAgICAgcXVpdE1haW5Mb29wSWZMb2FkQ29tcGxldGVkKGljb25PclBhZ2VM
b2FkZWQpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3SWNvbkxvYWRlZChXZWJLaXRG
YXZpY29uRGF0YWJhc2UgKmRhdGFiYXNlLCBjb25zdCBjaGFyICpmcmFtZVVSSSwgZ2Jvb2xlYW4g
Kmljb25PclBhZ2VMb2FkZWQpCit7CisgICAgcXVpdE1haW5Mb29wSWZMb2FkQ29tcGxldGVkKGlj
b25PclBhZ2VMb2FkZWQpOworfQorCitzdGF0aWMgdm9pZCBsb2FkVVJJKGNvbnN0IGNoYXIgKnVy
aSkKK3sKKyAgICBXZWJLaXRXZWJWaWV3ICp2aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93
ZWJfdmlld19uZXcoKSk7CisgICAgZ2Jvb2xlYW4gaWNvbk9yUGFnZUxvYWRlZCA9IEZBTFNFOwor
CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHZpZXcsIHVyaSk7CisKKyAgICBnX3NpZ25h
bF9jb25uZWN0KHZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhpZGxlUXVp
dExvb3BDYWxsYmFjayksICZpY29uT3JQYWdlTG9hZGVkKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0
KHZpZXcsICJpY29uLWxvYWRlZCIsIEdfQ0FMTEJBQ0sod2Via2l0V2ViVmlld0ljb25Mb2FkZWQp
LCAmaWNvbk9yUGFnZUxvYWRlZCk7CisKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAg
ICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQodmlldywgR19TSUdOQUxfTUFU
Q0hfREFUQSwgMCwgMCwgMCwgMCwgJmljb25PclBhZ2VMb2FkZWQpOworfQorCitzdGF0aWMgZ2Jv
b2xlYW4gZmF2aWNvbkRhdGFiYXNlR2V0VmFsaWRGYXZpY29uSWRsZSh2b2lkICp1c2VyRGF0YSkK
K3sKKyAgICB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl9waXhidWYod2Via2l0
X2dldF9mYXZpY29uX2RhdGFiYXNlKCksIGJhc2VVUkksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdJY29uU2l6ZSwgZ0ljb25TaXplLCBOVUxMLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYXZpY29uRGF0YWJh
c2VHZXRWYWxpZEZhdmljb25DYWxsYmFjaywgdXNlckRhdGEpOworICAgIHJldHVybiBGQUxTRTsK
K30KKworc3RhdGljIGdib29sZWFuIGZhdmljb25EYXRhYmFzZUdldEludmFsaWRGYXZpY29uSWRs
ZSh2b2lkICp1c2VyRGF0YSkKK3sKKyAgICB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2
aWNvbl9waXhidWYod2Via2l0X2dldF9mYXZpY29uX2RhdGFiYXNlKCksICJodHRwOi8vd3d3Lndl
YmtpdGd0ay5vcmcvIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ0ljb25TaXplLCBnSWNvblNpemUsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZhdmljb25EYXRhYmFzZUdldEludmFsaWRGYXZpY29u
Q2FsbGJhY2ssIHVzZXJEYXRhKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBnYm9v
bGVhbiBmYXZpY29uRGF0YWJhc2VHZXRGYXZpY29uQ2FuY2VsbGVkSWRsZSh2b2lkICp1c2VyRGF0
YSkKK3sKKyAgICBHQ2FuY2VsbGFibGUgKmNhbmNlbGxhYmxlID0gZ19jYW5jZWxsYWJsZV9uZXco
KTsKKyAgICB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl9waXhidWYod2Via2l0
X2dldF9mYXZpY29uX2RhdGFiYXNlKCksIGJhc2VVUkksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdJY29uU2l6ZSwgZ0ljb25TaXplLCBjYW5jZWxsYWJs
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmF2aWNv
bkRhdGFiYXNlR2V0RmF2aWNvbkNhbmNlbGxlZENhbGxiYWNrLCB1c2VyRGF0YSk7CisgICAgZ19j
YW5jZWxsYWJsZV9jYW5jZWwoY2FuY2VsbGFibGUpOworICAgIGdfb2JqZWN0X3VucmVmKGNhbmNl
bGxhYmxlKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJLaXRG
YXZpY29uRGF0YWJhc2VHZXRGYXZpY29uKCkKK3sKKyAgICBnYm9vbGVhbiBiZWVuVG9JY29uQ2Fs
bGJhY2s7CisKKyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworCisgICAg
LyogTG9hZCB1cmkgdG8gbWFrZSBzdXJlIGZhdmljb24gaXMgYWRkZWQgdG8gZGF0YWJhc2UuICov
CisgICAgbG9hZFVSSShiYXNlVVJJKTsKKworICAgIGJlZW5Ub0ljb25DYWxsYmFjayA9IEZBTFNF
OworICAgIGdfaWRsZV9hZGQoKEdTb3VyY2VGdW5jKWZhdmljb25EYXRhYmFzZUdldFZhbGlkRmF2
aWNvbklkbGUsICZiZWVuVG9JY29uQ2FsbGJhY2spOworICAgIGdfbWFpbl9sb29wX3J1bihsb29w
KTsKKyAgICBnX2Fzc2VydChiZWVuVG9JY29uQ2FsbGJhY2spOworCisgICAgYmVlblRvSWNvbkNh
bGxiYWNrID0gRkFMU0U7CisgICAgZ19pZGxlX2FkZCgoR1NvdXJjZUZ1bmMpZmF2aWNvbkRhdGFi
YXNlR2V0SW52YWxpZEZhdmljb25JZGxlLCAmYmVlblRvSWNvbkNhbGxiYWNrKTsKKyAgICBnX21h
aW5fbG9vcF9ydW4obG9vcCk7CisgICAgZ19hc3NlcnQoYmVlblRvSWNvbkNhbGxiYWNrKTsKKwor
ICAgIGJlZW5Ub0ljb25DYWxsYmFjayA9IEZBTFNFOworICAgIGdfaWRsZV9hZGQoKEdTb3VyY2VG
dW5jKWZhdmljb25EYXRhYmFzZUdldEZhdmljb25DYW5jZWxsZWRJZGxlLCAmYmVlblRvSWNvbkNh
bGxiYWNrKTsKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisgICAgZ19hc3NlcnQoYmVlblRv
SWNvbkNhbGxiYWNrKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYktpdEZhdmljb25EYXRhYmFz
ZUdldEZhdmljb25VUkkoKQoreworICAgIGNoYXIgKmljb25VUkkgPSB3ZWJraXRfZmF2aWNvbl9k
YXRhYmFzZV9nZXRfZmF2aWNvbl91cmkod2Via2l0X2dldF9mYXZpY29uX2RhdGFiYXNlKCksIGJh
c2VVUkkpOworICAgIGNoYXIgKmV4cGVjdGVkVVJJID0gZ19zdHJkdXBfcHJpbnRmKCIlc2Zhdmlj
b24uaWNvIiwgYmFzZVVSSSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGljb25VUkksID09LCBleHBl
Y3RlZFVSSSk7CisgICAgZ19mcmVlKGV4cGVjdGVkVVJJKTsKKyAgICBnX2ZyZWUoaWNvblVSSSk7
Cit9CisKKyNlbmRpZgorCitzdGF0aWMgdm9pZCB0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlUmVt
b3ZlQWxsKHZvaWQpCit7CisgICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlICpkYXRhYmFzZSA9IHdl
YmtpdF9nZXRfZmF2aWNvbl9kYXRhYmFzZSgpOworICAgIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNl
X2NsZWFyKGRhdGFiYXNlKTsKKyAgICBjaGFyICppY29uVVJJID0gd2Via2l0X2Zhdmljb25fZGF0
YWJhc2VfZ2V0X2Zhdmljb25fdXJpKGRhdGFiYXNlLCBiYXNlVVJJKTsKKyAgICBnX2Fzc2VydCgh
aWNvblVSSSk7CisgICAgZ19mcmVlKGljb25VUkkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2Vi
S2l0RmF2aWNvbkRhdGFiYXNlQ2xvc2VEYXRhYmFzZSh2b2lkKQoreworICAgIFdlYktpdEZhdmlj
b25EYXRhYmFzZSAqZGF0YWJhc2UgPSB3ZWJraXRfZ2V0X2Zhdmljb25fZGF0YWJhc2UoKTsKKyAg
ICBjaGFyICpkYXRhYmFzZVBhdGggPSBnX3N0cmR1cCh3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9n
ZXRfcGF0aChkYXRhYmFzZSkpOworICAgIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX3NldF9wYXRo
KGRhdGFiYXNlLCAwKTsKKyAgICBkZWxldGVEYXRhYmFzZUZpbGVJZkV4aXN0cyhkYXRhYmFzZVBh
dGgpOworICAgIGdfZnJlZShkYXRhYmFzZVBhdGgpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywg
Y2hhciAqKmFyZ3YpCit7CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOwor
CisgICAgLyogVGhpcyBob3BlZnVsbHkgbWFrZXMgdGhlIHRlc3QgaW5kZXBlbmRlbnQgb2YgdGhl
IHBhdGggaXQncyBjYWxsZWQgZnJvbS4gKi8KKyAgICB0ZXN0dXRpbHNfcmVsYXRpdmVfY2hkaXIo
IlRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Jlc291cmNlcy90ZXN0Lmh0bWwi
LCBhcmd2WzBdKTsKKworICAgIFNvdXBTZXJ2ZXIgKnNlcnZlciA9IHNvdXBfc2VydmVyX25ldyhT
T1VQX1NFUlZFUl9QT1JULCAwLCBOVUxMKTsKKyAgICBzb3VwX3NlcnZlcl9ydW5fYXN5bmMoc2Vy
dmVyKTsKKworICAgIHNvdXBfc2VydmVyX2FkZF9oYW5kbGVyKHNlcnZlciwgTlVMTCwgc2VydmVy
Q2FsbGJhY2ssIE5VTEwsIE5VTEwpOworCisgICAgU291cFVSSSAqc291cFVSSSA9IHNvdXBfdXJp
X25ldygiaHR0cDovLzEyNy4wLjAuMS8iKTsKKyAgICBzb3VwX3VyaV9zZXRfcG9ydChzb3VwVVJJ
LCBzb3VwX3NlcnZlcl9nZXRfcG9ydChzZXJ2ZXIpKTsKKworICAgIGJhc2VVUkkgPSBzb3VwX3Vy
aV90b19zdHJpbmcoc291cFVSSSwgRkFMU0UpOworICAgIHNvdXBfdXJpX2ZyZWUoc291cFVSSSk7
CisKKyAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOworICAg
IGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9mYXZpY29uZGF0YWJhc2Uvc2V0LXBhdGgiLCB0ZXN0
V2ViS2l0RmF2aWNvbkRhdGFiYXNlU2V0UGF0aCk7CisKKyAgICAvLyBUaGVzZSB0d28gdGVzdHMg
d2lsbCB0cmlnZ2VyIGFuIEFTU0VSVElPTiBvbiBkZWJ1ZyBidWlsZHMgZHVlCisgICAgLy8gdG8g
aHR0cDovL3dlYmtpdC5vcmcvYi82NzU4Mi4gUmVtb3ZlIHRoZSBndWFyZHMgb25jZSB0aGUgYnVn
IGlzIGZpeGVkLgorI2lmZGVmIE5ERUJVRworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9m
YXZpY29uZGF0YWJhc2UvZ2V0LWZhdmljb24iLCB0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlR2V0
RmF2aWNvbik7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2Zhdmljb25kYXRhYmFzZS9n
ZXQtZmF2aWNvbi11cmkiLCB0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNvblVSSSk7
CisjZW5kaWYKKworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9mYXZpY29uZGF0YWJhc2Uv
cmVtb3ZlLWFsbCIsIHRlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VSZW1vdmVBbGwpOworICAgIGdf
dGVzdF9hZGRfZnVuYygiL3dlYmtpdC9mYXZpY29uZGF0YWJhc2UvY2xvc2UtZGIiLCB0ZXN0V2Vi
S2l0RmF2aWNvbkRhdGFiYXNlQ2xvc2VEYXRhYmFzZSk7CisKKyAgICByZXR1cm4gZ190ZXN0X3J1
bigpOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsv
dGVzdGdsb2JhbHMuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3Rn
bG9iYWxzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI5ZWM0ZgotLS0g
L2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3Rn
bG9iYWxzLmMKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQ29s
bGFib3JhIEx0ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNp
bmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+CisKKy8v
IE1ha2Ugc3VyZSB0aGUgc2Vzc2lvbiBpcyBpbml0aWFsaXplZCBwcm9wZXJseSB3aGVuIHdlYmtp
dF9nZXRfZGVmYXVsdF9zZXNzaW9uKCkgaXMgY2FsbGVkLgorc3RhdGljIHZvaWQgdGVzdF9nbG9i
YWxzX2RlZmF1bHRfc2Vzc2lvbigpCit7CisgICAgZ190ZXN0X2J1ZygiMzY3NTQiKTsKKworICAg
IFNvdXBTZXNzaW9uKiBzZXNzaW9uID0gd2Via2l0X2dldF9kZWZhdWx0X3Nlc3Npb24oKTsKKyAg
ICBzb3VwX3Nlc3Npb25fcmVtb3ZlX2ZlYXR1cmVfYnlfdHlwZShzZXNzaW9uLCBXRUJLSVRfVFlQ
RV9TT1VQX0FVVEhfRElBTE9HKTsKKworICAgIC8vIFRoaXMgbWFrZXMgc3VyZSBvdXIgaW5pdGlh
bGl6YXRpb24gcmFuLgorICAgIGdfYXNzZXJ0KHNvdXBfc2Vzc2lvbl9nZXRfZmVhdHVyZShzZXNz
aW9uLCBTT1VQX1RZUEVfQ09OVEVOVF9ERUNPREVSKSAhPSBOVUxMKTsKKworICAgIC8vIENyZWF0
aW5nIGEgV2ViVmlldyBzaG91bGQgbWFrZSBzdXJlIHRoZSBzZXNzaW9uIGlzCisgICAgLy8gaW5p
dGlhbGl6ZWQsIGFuZCBub3QgbWVzcyB3aXRoIG91ciBjaGFuZ2VzLgorICAgIFdlYktpdFdlYlZp
ZXcqIHdlYl92aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Cisg
ICAgZ19vYmplY3RfcmVmX3Npbmsod2ViX3ZpZXcpOworICAgIGdfb2JqZWN0X3VucmVmKHdlYl92
aWV3KTsKKworICAgIC8vIFRoZXNlIG1ha2VzIHN1cmUgb3VyIG1vZGlmaWNhdGlvbiB3YXMga2Vw
dC4KKyAgICBnX2Fzc2VydChzb3VwX3Nlc3Npb25fZ2V0X2ZlYXR1cmUoc2Vzc2lvbiwgU09VUF9U
WVBFX0NPTlRFTlRfREVDT0RFUikgIT0gTlVMTCk7CisgICAgZ19hc3NlcnQoc291cF9zZXNzaW9u
X2dldF9mZWF0dXJlKHNlc3Npb24sIFdFQktJVF9UWVBFX1NPVVBfQVVUSF9ESUFMT0cpID09IE5V
TEwpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2dsb2JhbHNfc2VjdXJpdHlfcG9saWN5KCkKK3sK
KyAgICAvLyBDaGVjayBkZWZhdWx0IHBvbGljeSBmb3Igd2VsbCBrbm93biBzY2hlbWVzLgorICAg
IFdlYktpdFNlY3VyaXR5UG9saWN5IHBvbGljeSA9IHdlYmtpdF9nZXRfc2VjdXJpdHlfcG9saWN5
X2Zvcl91cmlfc2NoZW1lKCJodHRwIik7CisgICAgZ3VpbnQgbWFzayA9IFdFQktJVF9TRUNVUklU
WV9QT0xJQ1lfQ09SU19FTkFCTEVEOworICAgIGdfYXNzZXJ0X2NtcHVpbnQocG9saWN5ICYgbWFz
aywgPT0sIG1hc2spOworCisgICAgcG9saWN5ID0gd2Via2l0X2dldF9zZWN1cml0eV9wb2xpY3lf
Zm9yX3VyaV9zY2hlbWUoImh0dHBzIik7CisgICAgbWFzayA9IFdFQktJVF9TRUNVUklUWV9QT0xJ
Q1lfU0VDVVJFIHwgV0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9DT1JTX0VOQUJMRUQ7CisgICAgZ19h
c3NlcnRfY21wdWludChwb2xpY3kgJiBtYXNrLCA9PSwgbWFzayk7CisKKyAgICBwb2xpY3kgPSB3
ZWJraXRfZ2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiZmlsZSIpOworICAgIG1h
c2sgPSBXRUJLSVRfU0VDVVJJVFlfUE9MSUNZX0xPQ0FMOworICAgIGdfYXNzZXJ0X2NtcHVpbnQo
cG9saWN5ICYgbWFzaywgPT0sIG1hc2spOworCisgICAgcG9saWN5ID0gd2Via2l0X2dldF9zZWN1
cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUoImRhdGEiKTsKKyAgICBtYXNrID0gV0VCS0lUX1NF
Q1VSSVRZX1BPTElDWV9OT19BQ0NFU1NfVE9fT1RIRVJfU0NIRU1FIHwgV0VCS0lUX1NFQ1VSSVRZ
X1BPTElDWV9TRUNVUkU7CisgICAgZ19hc3NlcnRfY21wdWludChwb2xpY3kgJiBtYXNrLCA9PSwg
bWFzayk7CisKKyAgICBwb2xpY3kgPSB3ZWJraXRfZ2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJp
X3NjaGVtZSgiYWJvdXQiKTsKKyAgICBtYXNrID0gV0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9OT19B
Q0NFU1NfVE9fT1RIRVJfU0NIRU1FIHwgV0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9TRUNVUkUgfCBX
RUJLSVRfU0VDVVJJVFlfUE9MSUNZX0VNUFRZX0RPQ1VNRU5UOworICAgIGdfYXNzZXJ0X2NtcHVp
bnQocG9saWN5ICYgbWFzaywgPT0sIG1hc2spOworCisgICAgLy8gQ3VzdG9tIHNjaGVtZS4KKyAg
ICBwb2xpY3kgPSB3ZWJraXRfZ2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiZm9v
Iik7CisgICAgZ19hc3NlcnQoIXBvbGljeSk7CisKKyAgICBwb2xpY3kgfD0gV0VCS0lUX1NFQ1VS
SVRZX1BPTElDWV9MT0NBTDsKKyAgICB3ZWJraXRfc2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJp
X3NjaGVtZSgiZm9vIiwgcG9saWN5KTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9nZXRf
c2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJmb28iKSwgPT0sIHBvbGljeSk7CisKKyAg
ICBwb2xpY3kgfD0gV0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9OT19BQ0NFU1NfVE9fT1RIRVJfU0NI
RU1FOworICAgIHdlYmtpdF9zZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJmb28i
LCBwb2xpY3kpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2dldF9zZWN1cml0eV9wb2xp
Y3lfZm9yX3VyaV9zY2hlbWUoImZvbyIpLCA9PSwgcG9saWN5KTsKKworICAgIHBvbGljeSB8PSBX
RUJLSVRfU0VDVVJJVFlfUE9MSUNZX0RJU1BMQVlfSVNPTEFURUQ7CisgICAgd2Via2l0X3NldF9z
ZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUoImZvbyIsIHBvbGljeSk7CisgICAgZ19hc3Nl
cnRfY21wdWludCh3ZWJraXRfZ2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiZm9v
IiksID09LCBwb2xpY3kpOworCisgICAgcG9saWN5IHw9IFdFQktJVF9TRUNVUklUWV9QT0xJQ1lf
U0VDVVJFOworICAgIHdlYmtpdF9zZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJm
b28iLCBwb2xpY3kpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2dldF9zZWN1cml0eV9w
b2xpY3lfZm9yX3VyaV9zY2hlbWUoImZvbyIpLCA9PSwgcG9saWN5KTsKKworICAgIHBvbGljeSB8
PSBXRUJLSVRfU0VDVVJJVFlfUE9MSUNZX0NPUlNfRU5BQkxFRDsKKyAgICB3ZWJraXRfc2V0X3Nl
Y3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiZm9vIiwgcG9saWN5KTsKKyAgICBnX2Fzc2Vy
dF9jbXB1aW50KHdlYmtpdF9nZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJmb28i
KSwgPT0sIHBvbGljeSk7CisKKyAgICBwb2xpY3kgfD0gV0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9F
TVBUWV9ET0NVTUVOVDsKKyAgICB3ZWJraXRfc2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3Nj
aGVtZSgiZm9vIiwgcG9saWN5KTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9nZXRfc2Vj
dXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJmb28iKSwgPT0sIHBvbGljeSk7Cit9CisKK2lu
dCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBndGtfdGVzdF9pbml0KCZhcmdj
LCAmYXJndiwgTlVMTCk7CisKKyAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJr
aXQub3JnLyIpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9nbG9iYWxzL2RlZmF1bHRf
c2Vzc2lvbiIsCisgICAgICAgICAgICAgICAgICAgIHRlc3RfZ2xvYmFsc19kZWZhdWx0X3Nlc3Np
b24pOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9nbG9iYWxzL3NlY3VyaXR5LXBvbGlj
eSIsCisgICAgICAgICAgICAgICAgICAgIHRlc3RfZ2xvYmFsc19zZWN1cml0eV9wb2xpY3kpOwor
ICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7Cit9CisKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RoaXR0ZXN0cmVzdWx0LmMgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0aGl0dGVzdHJlc3VsdC5jCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiZjAxMTAKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0aGl0dGVzdHJlc3VsdC5jCkBAIC0wLDAg
KzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IElnYWxpYSBTLkwuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNp
bmNsdWRlIDxnbGliL2dzdGRpby5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKwordHlw
ZWRlZiBzdHJ1Y3QgeworICBjaGFyKiBkYXRhOworICBndWludCBmbGFnOworfSBUZXN0SW5mbzsK
Kworc3RhdGljIEdNYWluTG9vcCogbG9vcDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIFdlYktp
dFdlYlZpZXcqIHdlYlZpZXc7CisgICAgVGVzdEluZm8qIGluZm87Cit9IEhpdFRlc3RSZXN1bHRG
aXh0dXJlOworCitUZXN0SW5mbyoKK3Rlc3RfaW5mb19uZXcoY29uc3QgY2hhciogZGF0YSwgZ3Vp
bnQgZmxhZykKK3sKKyAgICBUZXN0SW5mbyogaW5mbzsKKworICAgIGluZm8gPSBnX3NsaWNlX25l
dyhUZXN0SW5mbyk7CisgICAgaW5mby0+ZGF0YSA9IGdfc3RyZHVwKGRhdGEpOworICAgIGluZm8t
PmZsYWcgPSBmbGFnOworCisgICAgcmV0dXJuIGluZm87Cit9CisKK3ZvaWQKK3Rlc3RfaW5mb19k
ZXN0cm95KFRlc3RJbmZvKiBpbmZvKQoreworICAgIGdfZnJlZShpbmZvLT5kYXRhKTsKKyAgICBn
X3NsaWNlX2ZyZWUoVGVzdEluZm8sIGluZm8pOworfQorCitzdGF0aWMgdm9pZCBoaXRfdGVzdF9y
ZXN1bHRfZml4dHVyZV9zZXR1cChIaXRUZXN0UmVzdWx0Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0
cG9pbnRlciBkYXRhKQoreworICAgIGZpeHR1cmUtPndlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVco
d2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBnX29iamVjdF9yZWZfc2luayhmaXh0dXJlLT53
ZWJWaWV3KTsKKyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworICAgIGZp
eHR1cmUtPmluZm8gPSAoVGVzdEluZm8qKWRhdGE7Cit9CisKK3N0YXRpYyB2b2lkIGhpdF90ZXN0
X3Jlc3VsdF9maXh0dXJlX3RlYXJkb3duKEhpdFRlc3RSZXN1bHRGaXh0dXJlKiBmaXh0dXJlLCBn
Y29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+d2ViVmll
dyk7CisgICAgZ19tYWluX2xvb3BfdW5yZWYobG9vcCk7CisgICAgdGVzdF9pbmZvX2Rlc3Ryb3ko
Zml4dHVyZS0+aW5mbyk7Cit9CisKK3N0YXRpYyB2b2lkCitsb2FkX3N0YXR1c19jYihXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3LAorICAgICAgICAgICAgICAgR1BhcmFtU3BlYyogc3BlYywKKyAgICAg
ICAgICAgICAgIGdwb2ludGVyIGRhdGEpCit7CisgICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMg
PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYlZpZXcpOworICAgIFRlc3RJbmZv
KiBpbmZvID0gKFRlc3RJbmZvKilkYXRhOworCisgICAgaWYgKHN0YXR1cyA9PSBXRUJLSVRfTE9B
RF9GSU5JU0hFRCkgeworICAgICAgICBXZWJLaXRIaXRUZXN0UmVzdWx0KiByZXN1bHQ7CisgICAg
ICAgIGd1aW50IGNvbnRleHQ7CisgICAgICAgIEdka0V2ZW50KiBldmVudCA9IGdka19ldmVudF9u
ZXcoR0RLX0JVVFRPTl9QUkVTUyk7CisgICAgICAgIFdlYktpdERPTU5vZGUqIG5vZGU7CisgICAg
ICAgIGdpbnQgeCwgeTsKKworICAgICAgICAvKiBDbG9zZSBlbm91Z2ggdG8gMCwwICovCisgICAg
ICAgIGV2ZW50LT5idXR0b24ueCA9IDU7CisgICAgICAgIGV2ZW50LT5idXR0b24ueSA9IDU7CisK
KyAgICAgICAgcmVzdWx0ID0gd2Via2l0X3dlYl92aWV3X2dldF9oaXRfdGVzdF9yZXN1bHQod2Vi
VmlldywgKEdka0V2ZW50QnV0dG9uKikgZXZlbnQpOworICAgICAgICBnZGtfZXZlbnRfZnJlZShl
dmVudCk7CisgICAgICAgIGdfYXNzZXJ0KHJlc3VsdCk7CisKKyAgICAgICAgZ19vYmplY3RfZ2V0
KHJlc3VsdCwgImNvbnRleHQiLCAmY29udGV4dCwgTlVMTCk7CisgICAgICAgIGdfYXNzZXJ0KGNv
bnRleHQgJiBpbmZvLT5mbGFnKTsKKworICAgICAgICBnX29iamVjdF9nZXQocmVzdWx0LCAiaW5u
ZXItbm9kZSIsICZub2RlLCBOVUxMKTsKKyAgICAgICAgZ19hc3NlcnQobm9kZSk7CisgICAgICAg
IGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfTk9ERShub2RlKSk7CisKKyAgICAgICAgZ19vYmplY3Rf
Z2V0KHJlc3VsdCwgIngiLCAmeCwgInkiLCAmeSwgTlVMTCk7CisgICAgICAgIGdfYXNzZXJ0X2Nt
cGludCh4LCA9PSwgNSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludCh5LCA9PSwgNSk7CisKKyAg
ICAgICAgLyogV2UgY2FuIG9ubHkgdGVzdCB0aGVzZSBub2RlIHR5cGVzIGF0IHRoZSBtb21lbnQu
IEluIHRoZQorICAgICAgICAgKiBpbnB1dCBjYXNlIHRoZXJlIHNlZW1zIHRvIGJlIGFuIGV4dHJh
IGxheWVyIHdpdGggYSBESVYgb24KKyAgICAgICAgICogdG9wIG9mIHRoZSBpbnB1dCwgd2hpY2gg
Z2V0cyBhc3NpZ25lZCB0byB0aGUgaW5uZXItbm9kZS4KKyAgICAgICAgICogdGFnICovCisgICAg
ICAgIGlmIChpbmZvLT5mbGFnID09IFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9ET0NV
TUVOVCkKKyAgICAgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9IVE1MX0VMRU1F
TlQobm9kZSkpOworICAgICAgICBlbHNlIGlmIChpbmZvLT5mbGFnID09IFdFQktJVF9ISVRfVEVT
VF9SRVNVTFRfQ09OVEVYVF9JTUFHRSkKKyAgICAgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01f
SVNfSFRNTF9JTUFHRV9FTEVNRU5UKG5vZGUpKTsKKyAgICAgICAgZWxzZSBpZiAoaW5mby0+Zmxh
ZyA9PSBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfTElOSykgeworICAgICAgICAgICAg
LyogVGhlIGhpdCB0ZXN0IHdpbGwgZ2l2ZSB1cyB0aGUgaW5uZXIgdGV4dCBub2RlLCB3ZSB3YW50
CisgICAgICAgICAgICAgKiB0aGUgQSB0YWcgKi8KKyAgICAgICAgICAgIFdlYktpdERPTU5vZGUq
IHBhcmVudCA9IHdlYmtpdF9kb21fbm9kZV9nZXRfcGFyZW50X25vZGUobm9kZSk7CisgICAgICAg
ICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfQU5DSE9SX0VMRU1FTlQocGFyZW50KSk7
CisgICAgICAgIH0KKworICAgICAgICBnX29iamVjdF91bnJlZihyZXN1bHQpOworICAgICAgICBn
X21haW5fbG9vcF9xdWl0KGxvb3ApOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK3Rlc3Rfd2Vi
a2l0X2hpdF90ZXN0X3Jlc3VsdChIaXRUZXN0UmVzdWx0Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0
cG9pbnRlciBkYXRhKQoreworICAgIFRlc3RJbmZvKiBpbmZvID0gKFRlc3RJbmZvKilkYXRhOwor
ICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgNTAsIDUwIH07CisKKyAgICB3
ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoZml4dHVyZS0+d2ViVmlldywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW5mby0+ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgInRleHQvaHRtbCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1
dGYtOCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlOi8vIik7CisgICAg
Z3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldyksICZh
bGxvY2F0aW9uKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJub3Rp
Znk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhsb2FkX3N0YXR1c19jYiksIGluZm8pOworICAg
IGdfbWFpbl9sb29wX3J1bihsb29wKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBh
cmd2KQoreworICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKKworICAgIGdf
dGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7CisKKyAgICBnX3Rlc3Rf
YWRkKCIvd2Via2l0L2hpdHRlc3RyZXN1bHQvZG9jdW1lbnQiLCBIaXRUZXN0UmVzdWx0Rml4dHVy
ZSwgCisgICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KCI8aHRtbD48Ym9keT48aDE+V2ViS2l0
R1RLKyE8L2gxPjwvYm9keT48L2h0bWw+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
V0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0RPQ1VNRU5UKSwKKyAgICAgICAgICAgICAg
IGhpdF90ZXN0X3Jlc3VsdF9maXh0dXJlX3NldHVwLCB0ZXN0X3dlYmtpdF9oaXRfdGVzdF9yZXN1
bHQsIGhpdF90ZXN0X3Jlc3VsdF9maXh0dXJlX3RlYXJkb3duKTsKKyAgICAvKiBXZSBoYXJkY29k
ZSBhbGwgZWxlbWVudHMgdG8gYmUgYXQgMCwwIHNvIHRoYXQgd2Uga25vdyB3aGVyZSB0bworICAg
ICAqIGdlbmVyYXRlIHRoZSBidXR0b24gZXZlbnRzICovCisgICAgZ190ZXN0X2FkZCgiL3dlYmtp
dC9oaXR0ZXN0cmVzdWx0L2ltYWdlIiwgSGl0VGVzdFJlc3VsdEZpeHR1cmUsCisgICAgICAgICAg
ICAgICB0ZXN0X2luZm9fbmV3KCI8aHRtbD48Ym9keT48aW1nIHN0eWxlPSdwb3NpdGlvbjphYnNv
bHV0ZTsgbGVmdDowOyB0b3A6MCdzcmM9JzB4ZGVhZGJlZWYnIHdpZHRoPTUwIGhlaWdodD01MD48
L2ltZz48L2JvZHk+PC9odG1sPiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJ
VF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9JTUFHRSksCisgICAgICAgICAgICAgICBoaXRfdGVz
dF9yZXN1bHRfZml4dHVyZV9zZXR1cCwgdGVzdF93ZWJraXRfaGl0X3Rlc3RfcmVzdWx0LCBoaXRf
dGVzdF9yZXN1bHRfZml4dHVyZV90ZWFyZG93bik7CisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9o
aXR0ZXN0cmVzdWx0L2VkaXRhYmxlIiwgSGl0VGVzdFJlc3VsdEZpeHR1cmUsCisgICAgICAgICAg
ICAgICB0ZXN0X2luZm9fbmV3KCI8aHRtbD48Ym9keT48aW5wdXQgc3R5bGU9J3Bvc2l0aW9uOmFi
c29sdXRlOyBsZWZ0OjA7IHRvcDowJyBzaXplPSczNSc+PC9pbnB1dD4+PC9ib2R5PjwvaHRtbD4i
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NP
TlRFWFRfRURJVEFCTEUpLAorICAgICAgICAgICAgICAgaGl0X3Rlc3RfcmVzdWx0X2ZpeHR1cmVf
c2V0dXAsIHRlc3Rfd2Via2l0X2hpdF90ZXN0X3Jlc3VsdCwgaGl0X3Rlc3RfcmVzdWx0X2ZpeHR1
cmVfdGVhcmRvd24pOworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvaGl0dGVzdHJlc3VsdC9saW5r
IiwgSGl0VGVzdFJlc3VsdEZpeHR1cmUsCisgICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KCI8
aHRtbD48Ym9keT48YSBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MDsgdG9wOjAnIGhy
ZWY9J2h0dHA6Ly93d3cuZXhhbXBsZS5jb20nPkhFTExPIFdPUkxEPC9hPjwvYm9keT48L2h0bWw+
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9D
T05URVhUX0xJTkspLAorICAgICAgICAgICAgICAgaGl0X3Rlc3RfcmVzdWx0X2ZpeHR1cmVfc2V0
dXAsIHRlc3Rfd2Via2l0X2hpdF90ZXN0X3Jlc3VsdCwgaGl0X3Rlc3RfcmVzdWx0X2ZpeHR1cmVf
dGVhcmRvd24pOworICAgICAgICAgICAgICAgCisgICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7Cit9
CisKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3Ro
dHRwYmFja2VuZC5jIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGh0
dHBiYWNrZW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM3NzY4Nwot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rl
c3RodHRwYmFja2VuZC5jCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgR3VzdGF2byBOb3JvbmhhIFNpbHZhCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxl
cnJuby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRl
IDxnbGliL2dzdGRpby5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQv
d2Via2l0Lmg+CisKKy8vIE5vdCB5ZXQgcHVibGljIEFQSQorU291cE1lc3NhZ2UqIHdlYmtpdF9u
ZXR3b3JrX3JlcXVlc3RfZ2V0X21lc3NhZ2UoV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3Qp
OworCitzdGF0aWMgZ2Jvb2xlYW4gbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fcmVxdWVzdGVk
X2NiKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRXZWJGcmFtZSogd2ViX2ZyYW1lLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBX
ZWJLaXROZXR3b3JrUmVxdWVzdCogcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0V2ViTmF2aWdhdGlvbkFjdGlvbiog
YWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBXZWJLaXRXZWJQb2xpY3lEZWNpc2lvbiogZGVjaXNpb24sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIGRhdGEp
Cit7CisgICAgU291cE1lc3NhZ2UqIG1lc3NhZ2UgPSB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X2dl
dF9tZXNzYWdlKHJlcXVlc3QpOworCisgICAgLyogMSAtPiB3ZWJraXRfbmV0d29ya19yZXF1ZXN0
X3dpdGhfY29yZV9yZXF1ZXN0CisgICAgICoKKyAgICAgKiBUaGUgU291cE1lc3NhZ2UgaXMgY3Jl
YXRlZCBleGNsdXNpdmVseSBmb3IgdGhlIGVtaXNzaW9uIG9mIHRoaXMKKyAgICAgKiBzaWduYWwu
CisgICAgICovCisgICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKG1lc3NhZ2UpLT5yZWZfY291
bnQsID09LCAxKTsKKworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9z
b3VwX21lc3NhZ2VfbGlmZXRpbWUoKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYl92aWV3ID0g
V0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisKKyAgICBnX29iamVjdF9y
ZWZfc2luayh3ZWJfdmlldyk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdlYl92aWV3LCAibmF2
aWdhdGlvbi1wb2xpY3ktZGVjaXNpb24tcmVxdWVzdGVkIiwKKyAgICAgICAgICAgICAgICAgICAg
IEdfQ0FMTEJBQ0sobmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fcmVxdWVzdGVkX2NiKSwKKyAg
ICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgLyogbG9hZF91cmkgd2lsbCB0cmlnZ2Vy
IHRoZSBuYXZpZ2F0aW9uLXBvbGljeS1kZWNpc2lvbi1yZXF1ZXN0ZWQKKyAgICAgKiBzaWduYWwg
ZW1pc3Npb247CisgICAgICovCisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHdlYl92aWV3
LCAiaHR0cDovLzEyNy4wLjAuMS8iKTsKKworICAgIGdfb2JqZWN0X3VucmVmKHdlYl92aWV3KTsK
K30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIGd0a190ZXN0X2lu
aXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKKworICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvIik7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3NvdXBtZXNz
YWdlL2xpZmV0aW1lIiwgdGVzdF9zb3VwX21lc3NhZ2VfbGlmZXRpbWUpOworICAgIHJldHVybiBn
X3Rlc3RfcnVuICgpOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRHdGsvdGVzdGtleWV2ZW50cy5jIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRHdGsvdGVzdGtleWV2ZW50cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmFjZDAxZjMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdEd0ay90ZXN0a2V5ZXZlbnRzLmMKQEAgLTAsMCArMSwzOTAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDksIDIwMTAgTWFydGluIFJvYmluc29uIDxtcm9iaW5zb25Ad2Via2l0Lm9yZz4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHVuaXN0
ZC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CisjaW5j
bHVkZSA8d2Via2l0L3dlYmtpdC5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5n
UmVmLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0UmVmLmg+CisKK3R5cGVk
ZWYgc3RydWN0IHsKKyAgICBjaGFyKiBwYWdlOworICAgIGNoYXIqIHRleHQ7CisgICAgZ2Jvb2xl
YW4gc2hvdWxkQmVIYW5kbGVkOworfSBUZXN0SW5mbzsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAg
IEd0a1dpZGdldCogd2luZG93OworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXc7CisgICAgR01h
aW5Mb29wKiBsb29wOworICAgIFRlc3RJbmZvKiBpbmZvOworfSBLZXlFdmVudEZpeHR1cmU7CisK
K1Rlc3RJbmZvKgordGVzdF9pbmZvX25ldyhjb25zdCBjaGFyKiBwYWdlLCBnYm9vbGVhbiBzaG91
bGRCZUhhbmRsZWQpCit7CisgICAgVGVzdEluZm8qIGluZm87CisKKyAgICBpbmZvID0gZ19zbGlj
ZV9uZXcoVGVzdEluZm8pOworICAgIGluZm8tPnBhZ2UgPSBnX3N0cmR1cChwYWdlKTsKKyAgICBp
bmZvLT5zaG91bGRCZUhhbmRsZWQgPSBzaG91bGRCZUhhbmRsZWQ7CisgICAgaW5mby0+dGV4dCA9
IDA7CisKKyAgICByZXR1cm4gaW5mbzsKK30KKwordm9pZAordGVzdF9pbmZvX2Rlc3Ryb3koVGVz
dEluZm8qIGluZm8pCit7CisgICAgZ19mcmVlKGluZm8tPnBhZ2UpOworICAgIGdfZnJlZShpbmZv
LT50ZXh0KTsKKyAgICBnX3NsaWNlX2ZyZWUoVGVzdEluZm8sIGluZm8pOworfQorCitzdGF0aWMg
dm9pZCBrZXlfZXZlbnRfZml4dHVyZV9zZXR1cChLZXlFdmVudEZpeHR1cmUqIGZpeHR1cmUsIGdj
b25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBmaXh0dXJlLT5sb29wID0gZ19tYWluX2xvb3BfbmV3
KE5VTEwsIFRSVUUpOworCisgICAgZml4dHVyZS0+d2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RL
X1dJTkRPV19UT1BMRVZFTCk7CisgICAgZml4dHVyZS0+d2ViVmlldyA9IFdFQktJVF9XRUJfVklF
Vyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworCisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NP
TlRBSU5FUihmaXh0dXJlLT53aW5kb3cpLCBHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpKTsK
K30KKworc3RhdGljIHZvaWQga2V5X2V2ZW50X2ZpeHR1cmVfdGVhcmRvd24oS2V5RXZlbnRGaXh0
dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgZ3RrX3dpZGdldF9kZXN0
cm95KGZpeHR1cmUtPndpbmRvdyk7CisgICAgZ19tYWluX2xvb3BfdW5yZWYoZml4dHVyZS0+bG9v
cCk7CisgICAgdGVzdF9pbmZvX2Rlc3Ryb3koZml4dHVyZS0+aW5mbyk7Cit9CisKK3N0YXRpYyBn
Ym9vbGVhbiBrZXlfcHJlc3NfZXZlbnRfY2IoV2ViS2l0V2ViVmlldyogd2ViVmlldywgR2RrRXZl
bnQqIGV2ZW50LCBncG9pbnRlciBkYXRhKQoreworICAgIEtleUV2ZW50Rml4dHVyZSogZml4dHVy
ZSA9IChLZXlFdmVudEZpeHR1cmUqKWRhdGE7CisgICAgZ2Jvb2xlYW4gaGFuZGxlZCA9IEdUS19X
SURHRVRfR0VUX0NMQVNTKGZpeHR1cmUtPndlYlZpZXcpLT5rZXlfcHJlc3NfZXZlbnQoR1RLX1dJ
REdFVChmaXh0dXJlLT53ZWJWaWV3KSwgJmV2ZW50LT5rZXkpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChoYW5kbGVkLCA9PSwgZml4dHVyZS0+aW5mby0+c2hvdWxkQmVIYW5kbGVkKTsKKworICAgIHJl
dHVybiBGQUxTRTsKK30KKworc3RhdGljIGdib29sZWFuIGtleV9yZWxlYXNlX2V2ZW50X2NiKFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcsIEdka0V2ZW50KiBldmVudCwgZ3BvaW50ZXIgZGF0YSkKK3sK
KyAgICAvLyBXZWJDb3JlIG5ldmVyIHNlZW1zIHRvIG1hcmsga2V5dXAgZXZlbnRzIGFzIGhhbmRs
ZWQuCisgICAgS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJlID0gKEtleUV2ZW50Rml4dHVyZSopZGF0
YTsKKyAgICBnYm9vbGVhbiBoYW5kbGVkID0gR1RLX1dJREdFVF9HRVRfQ0xBU1MoZml4dHVyZS0+
d2ViVmlldyktPmtleV9wcmVzc19ldmVudChHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpLCAm
ZXZlbnQtPmtleSk7CisgICAgZ19hc3NlcnQoIWhhbmRsZWQpOworCisgICAgZ19tYWluX2xvb3Bf
cXVpdChmaXh0dXJlLT5sb29wKTsKKworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZv
aWQgdGVzdF9rZXlwcmVzc19ldmVudHNfbG9hZF9zdGF0dXNfY2IoV2ViS2l0V2ViVmlldyogd2Vi
VmlldywgR1BhcmFtU3BlYyogc3BlYywgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBLZXlFdmVudEZp
eHR1cmUqIGZpeHR1cmUgPSAoS2V5RXZlbnRGaXh0dXJlKilkYXRhOworICAgIFdlYktpdExvYWRT
dGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJWaWV3KTsK
KyAgICBpZiAoc3RhdHVzID09IFdFQktJVF9MT0FEX0ZJTklTSEVEKSB7CisgICAgICAgIGdfc2ln
bmFsX2Nvbm5lY3QoZml4dHVyZS0+d2ViVmlldywgImtleS1wcmVzcy1ldmVudCIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhrZXlfcHJlc3NfZXZlbnRfY2IpLCBmaXh0dXJl
KTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53ZWJWaWV3LCAia2V5LXJlbGVh
c2UtZXZlbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0soa2V5X3JlbGVh
c2VfZXZlbnRfY2IpLCBmaXh0dXJlKTsKKyAgICAgICAgaWYgKCFndGtfdGVzdF93aWRnZXRfc2Vu
ZF9rZXkoR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2RrX3VuaWNvZGVfdG9fa2V5dmFsKCdhJyksIDApKQorICAgICAg
ICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICB9CisKK30KKworZ2Jvb2xlYW4gbWFw
X2V2ZW50X2NiKEd0a1dpZGdldCAqd2lkZ2V0LCBHZGtFdmVudCogZXZlbnQsIGdwb2ludGVyIGRh
dGEpCit7CisgICAgS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJlID0gKEtleUV2ZW50Rml4dHVyZSop
ZGF0YTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoZml4dHVyZS0+d2ViVmlldywg
Zml4dHVyZS0+aW5mby0+cGFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRl
eHQvaHRtbCIsICJ1dGYtOCIsICJmaWxlOi8vIik7CisgICAgcmV0dXJuIEZBTFNFOworfQorCitz
dGF0aWMgdm9pZCBzZXR1cF9rZXlldmVudF90ZXN0KEtleUV2ZW50Rml4dHVyZSogZml4dHVyZSwg
Z2NvbnN0cG9pbnRlciBkYXRhLCBHQ2FsbGJhY2sgbG9hZF9ldmVudF9jYWxsYmFjaykKK3sKKyAg
ICBmaXh0dXJlLT5pbmZvID0gKFRlc3RJbmZvKilkYXRhOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
Zml4dHVyZS0+d2luZG93LCAibWFwLWV2ZW50IiwKKyAgICAgICAgICAgICAgICAgICAgIEdfQ0FM
TEJBQ0sobWFwX2V2ZW50X2NiKSwgZml4dHVyZSk7CisKKyAgICBndGtfd2lkZ2V0X2dyYWJfZm9j
dXMoR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSk7CisgICAgZ3RrX3dpZGdldF9zaG93KGZp
eHR1cmUtPndpbmRvdyk7CisgICAgZ3RrX3dpZGdldF9zaG93KEdUS19XSURHRVQoZml4dHVyZS0+
d2ViVmlldykpOworICAgIGd0a193aW5kb3dfcHJlc2VudChHVEtfV0lORE9XKGZpeHR1cmUtPndp
bmRvdykpOworCisgICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53ZWJWaWV3LCAibm90aWZ5
Ojpsb2FkLXN0YXR1cyIsCisgICAgICAgICAgICAgICAgICAgICBsb2FkX2V2ZW50X2NhbGxiYWNr
LCBmaXh0dXJlKTsKKworICAgIGdfbWFpbl9sb29wX3J1bihmaXh0dXJlLT5sb29wKTsKK30KKwor
c3RhdGljIHZvaWQgdGVzdF9rZXlwcmVzc19ldmVudHMoS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJl
LCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgc2V0dXBfa2V5ZXZlbnRfdGVzdChmaXh0dXJl
LCBkYXRhLCBHX0NBTExCQUNLKHRlc3Rfa2V5cHJlc3NfZXZlbnRzX2xvYWRfc3RhdHVzX2NiKSk7
Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBlbGVtZW50X3RleHRfZXF1YWxfdG8oSlNDb250ZXh0UmVm
IGNvbnRleHQsIGNvbnN0IGdjaGFyKiB0ZXh0KQoreworICAgIEpTU3RyaW5nUmVmIHNjcmlwdFN0
cmluZyA9IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKAorICAgICAgIndpbmRvdy5kb2N1
bWVudC5nZXRFbGVtZW50QnlJZChcImluXCIpLnZhbHVlOyIpOworICAgIEpTVmFsdWVSZWYgdmFs
dWUgPSBKU0V2YWx1YXRlU2NyaXB0KGNvbnRleHQsIHNjcmlwdFN0cmluZywgMCwgMCwgMCwgMCk7
CisgICAgSlNTdHJpbmdSZWxlYXNlKHNjcmlwdFN0cmluZyk7CisKKyAgICAvLyBJZiB0aGUgdmFs
dWUgaXNuJ3QgYSBzdHJpbmcsIHRoZSBlbGVtZW50IGlzIHByb2JhYmx5IGEgZGl2CisgICAgLy8g
c28gZ3JhYiB0aGUgaW5uZXJUZXh0IGluc3RlYWQuCisgICAgaWYgKCFKU1ZhbHVlSXNTdHJpbmco
Y29udGV4dCwgdmFsdWUpKSB7CisgICAgICAgIEpTU3RyaW5nUmVmIHNjcmlwdFN0cmluZyA9IEpT
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKAorICAgICAgICAgICJ3aW5kb3cuZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoXCJpblwiKS5pbm5lclRleHQ7Iik7CisgICAgICAgIHZhbHVlID0gSlNF
dmFsdWF0ZVNjcmlwdChjb250ZXh0LCBzY3JpcHRTdHJpbmcsIDAsIDAsIDAsIDApOworICAgICAg
ICBKU1N0cmluZ1JlbGVhc2Uoc2NyaXB0U3RyaW5nKTsKKyAgICB9CisKKyAgICBnX2Fzc2VydChK
U1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgdmFsdWUpKTsKKyAgICBKU1N0cmluZ1JlZiBpbnB1dFN0
cmluZyA9IEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsIDApOworICAgIGdfYXNz
ZXJ0KGlucHV0U3RyaW5nKTsKKworICAgIGdpbnQgc2l6ZSA9IEpTU3RyaW5nR2V0TWF4aW11bVVU
RjhDU3RyaW5nU2l6ZShpbnB1dFN0cmluZyk7CisgICAgZ2NoYXIqIGNTdHJpbmcgPSBnX21hbGxv
YyhzaXplKTsKKyAgICBKU1N0cmluZ0dldFVURjhDU3RyaW5nKGlucHV0U3RyaW5nLCBjU3RyaW5n
LCBzaXplKTsKKyAgICBKU1N0cmluZ1JlbGVhc2UoaW5wdXRTdHJpbmcpOworCisgICAgZ2Jvb2xl
YW4gcmVzdWx0ID0gZ191dGY4X2NvbGxhdGUoY1N0cmluZywgdGV4dCkgPT0gMDsKKyAgICBnX2Zy
ZWUoY1N0cmluZyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgdGVzdF9p
bWVfbG9hZF9zdGF0dXNfY2IoV2ViS2l0V2ViVmlldyogd2ViVmlldywgR1BhcmFtU3BlYyogc3Bl
YywgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBLZXlFdmVudEZpeHR1cmUqIGZpeHR1cmUgPSAoS2V5
RXZlbnRGaXh0dXJlKilkYXRhOworICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0
X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJWaWV3KTsKKyAgICBpZiAoc3RhdHVzICE9IFdF
QktJVF9MT0FEX0ZJTklTSEVEKQorICAgICAgICByZXR1cm47CisKKyAgICBKU0dsb2JhbENvbnRl
eHRSZWYgY29udGV4dCA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X2dsb2JhbF9jb250ZXh0KAorICAg
ICAgICB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUod2ViVmlldykpOworICAgIGdfYXNz
ZXJ0KGNvbnRleHQpOworCisgICAgR3RrSU1Db250ZXh0KiBpbUNvbnRleHQgPSAwOworICAgIGdf
b2JqZWN0X2dldCh3ZWJWaWV3LCAiaW0tY29udGV4dCIsICZpbUNvbnRleHQsIE5VTEwpOworICAg
IGdfYXNzZXJ0KGltQ29udGV4dCk7CisKKyAgICAvLyBUZXN0IHRoYXQgY29tbWl0cyB0aGF0IGhh
cHBlbiBvdXRzaWRlIG9mIGtleSBldmVudHMKKyAgICAvLyBjaGFuZ2UgdGhlIHRleHQgZmllbGQg
aW1tZWRpYXRlbHkuIFRoaXMgY2xvc2VseSByZXBsaWNhdGVzCisgICAgLy8gdGhlIGJlaGF2aW9y
IG9mIFNDSU0uCisgICAgZ19hc3NlcnQoZWxlbWVudF90ZXh0X2VxdWFsX3RvKGNvbnRleHQsICIi
KSk7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKGltQ29udGV4dCwgImNvbW1pdCIsICJhIik7
CisgICAgZ19hc3NlcnQoZWxlbWVudF90ZXh0X2VxdWFsX3RvKGNvbnRleHQsICJhIikpOworICAg
IGdfc2lnbmFsX2VtaXRfYnlfbmFtZShpbUNvbnRleHQsICJjb21taXQiLCAiYiIpOworICAgIGdf
YXNzZXJ0KGVsZW1lbnRfdGV4dF9lcXVhbF90byhjb250ZXh0LCAiYWIiKSk7CisgICAgZ19zaWdu
YWxfZW1pdF9ieV9uYW1lKGltQ29udGV4dCwgImNvbW1pdCIsICJjIik7CisgICAgZ19hc3NlcnQo
ZWxlbWVudF90ZXh0X2VxdWFsX3RvKGNvbnRleHQsICJhYmMiKSk7CisKKyAgICBnX29iamVjdF91
bnJlZihpbUNvbnRleHQpOworICAgIGdfbWFpbl9sb29wX3F1aXQoZml4dHVyZS0+bG9vcCk7Cit9
CisKK3N0YXRpYyB2b2lkIHRlc3RfaW1lKEtleUV2ZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0
cG9pbnRlciBkYXRhKQoreworICAgIHNldHVwX2tleWV2ZW50X3Rlc3QoZml4dHVyZSwgZGF0YSwg
R19DQUxMQkFDSyh0ZXN0X2ltZV9sb2FkX3N0YXR1c19jYikpOworfQorCitzdGF0aWMgZ2Jvb2xl
YW4gdmVyaWZ5X2NvbnRlbnRzKGdwb2ludGVyIGRhdGEpCit7CisgICAgS2V5RXZlbnRGaXh0dXJl
KiBmaXh0dXJlID0gKEtleUV2ZW50Rml4dHVyZSopZGF0YTsKKyAgICBKU0dsb2JhbENvbnRleHRS
ZWYgY29udGV4dCA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X2dsb2JhbF9jb250ZXh0KAorICAgICAg
ICB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUoZml4dHVyZS0+d2ViVmlldykpOworICAg
IGdfYXNzZXJ0KGNvbnRleHQpOworCisgICAgZ19hc3NlcnQoZWxlbWVudF90ZXh0X2VxdWFsX3Rv
KGNvbnRleHQsIGZpeHR1cmUtPmluZm8tPnRleHQpKTsKKyAgICBnX21haW5fbG9vcF9xdWl0KGZp
eHR1cmUtPmxvb3ApOworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9i
bG9ja2luZ19sb2FkX3N0YXR1c19jYihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHUGFyYW1TcGVj
KiBzcGVjLCBncG9pbnRlciBkYXRhKQoreworICAgIEtleUV2ZW50Rml4dHVyZSogZml4dHVyZSA9
IChLZXlFdmVudEZpeHR1cmUqKWRhdGE7CisgICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYlZpZXcpOworICAgIGlmIChzdGF0dXMg
IT0gV0VCS0lUX0xPQURfRklOSVNIRUQpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSBm
aXJzdCBrZXlwcmVzcyBldmVudCBzaG91bGQgbm90IG1vZGlmeSB0aGUgZmllbGQuCisgICAgZml4
dHVyZS0+aW5mby0+dGV4dCA9IGdfc3RyZHVwKCJiYyIpOworICAgIGlmICghZ3RrX3Rlc3Rfd2lk
Z2V0X3NlbmRfa2V5KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldyksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnZGtfdW5pY29kZV90b19rZXl2YWwoJ2EnKSwgMCkpCisgICAg
ICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgaWYgKCFndGtfdGVzdF93aWRnZXRfc2Vu
ZF9rZXkoR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnZGtfdW5pY29kZV90b19rZXl2YWwoJ2InKSwgMCkpCisgICAgICAgIGdf
YXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgaWYgKCFndGtfdGVzdF93aWRnZXRfc2VuZF9rZXko
R1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnZGtfdW5pY29kZV90b19rZXl2YWwoJ2MnKSwgMCkpCisgICAgICAgIGdfYXNzZXJ0
X25vdF9yZWFjaGVkKCk7CisKKyAgICBnX2lkbGVfYWRkKHZlcmlmeV9jb250ZW50cywgZml4dHVy
ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfYmxvY2tpbmcoS2V5RXZlbnRGaXh0dXJlKiBmaXh0
dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgc2V0dXBfa2V5ZXZlbnRfdGVzdChmaXh0
dXJlLCBkYXRhLCBHX0NBTExCQUNLKHRlc3RfYmxvY2tpbmdfbG9hZF9zdGF0dXNfY2IpKTsKK30K
KworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpCitzdGF0aWMgdm9pZCB0ZXN0X3hpbV9s
b2FkX3N0YXR1c19jYihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHUGFyYW1TcGVjKiBzcGVjLCBn
cG9pbnRlciBkYXRhKQoreworICAgIEtleUV2ZW50Rml4dHVyZSogZml4dHVyZSA9IChLZXlFdmVu
dEZpeHR1cmUqKWRhdGE7CisgICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYlZpZXcpOworICAgIGlmIChzdGF0dXMgIT0gV0VCS0lU
X0xPQURfRklOSVNIRUQpCisgICAgICAgIHJldHVybjsKKworICAgIEd0a0lNQ29udGV4dCogaW1D
b250ZXh0ID0gMDsKKyAgICBnX29iamVjdF9nZXQod2ViVmlldywgImltLWNvbnRleHQiLCAmaW1D
b250ZXh0LCBOVUxMKTsKKyAgICBnX2Fzc2VydChpbUNvbnRleHQpOworCisgICAgZ2NoYXIqIG9y
aWdpbmFsSWQgPSBnX3N0cmR1cChndGtfaW1fbXVsdGljb250ZXh0X2dldF9jb250ZXh0X2lkKEdU
S19JTV9NVUxUSUNPTlRFWFQoaW1Db250ZXh0KSkpOworICAgIGd0a19pbV9tdWx0aWNvbnRleHRf
c2V0X2NvbnRleHRfaWQoR1RLX0lNX01VTFRJQ09OVEVYVChpbUNvbnRleHQpLCAieGltIik7CisK
KyAgICAvLyBUZXN0IHRoYXQgY29tbWl0cyB0aGF0IGhhcHBlbiBvdXRzaWRlIG9mIGtleSBldmVu
dHMKKyAgICAvLyBjaGFuZ2UgdGhlIHRleHQgZmllbGQgaW1tZWRpYXRlbHkuIFRoaXMgY2xvc2Vs
eSByZXBsaWNhdGVzCisgICAgLy8gdGhlIGJlaGF2aW9yIG9mIFNDSU0uCisgICAgZml4dHVyZS0+
aW5mby0+dGV4dCA9IGdfc3RyZHVwKCJkZWJpYW4iKTsKKyAgICBpZiAoIWd0a190ZXN0X3dpZGdl
dF9zZW5kX2tleShHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2RrX3VuaWNvZGVfdG9fa2V5dmFsKCdkJyksIDApKQorICAgICAg
ICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgIGlmICghZ3RrX3Rlc3Rfd2lkZ2V0X3NlbmRf
a2V5KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldyksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdka191bmljb2RlX3RvX2tleXZhbCgnZScpLCAwKSkKKyAgICAgICAgZ19hc3NlcnRf
bm90X3JlYWNoZWQoKTsKKyAgICBpZiAoIWd0a190ZXN0X3dpZGdldF9zZW5kX2tleShHVEtfV0lE
R0VUKGZpeHR1cmUtPndlYlZpZXcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGtf
dW5pY29kZV90b19rZXl2YWwoJ2InKSwgMCkpCisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVk
KCk7CisgICAgaWYgKCFndGtfdGVzdF93aWRnZXRfc2VuZF9rZXkoR1RLX1dJREdFVChmaXh0dXJl
LT53ZWJWaWV3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RrX3VuaWNvZGVfdG9f
a2V5dmFsKCdpJyksIDApKQorICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgIGlm
ICghZ3RrX3Rlc3Rfd2lkZ2V0X3NlbmRfa2V5KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldyks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdka191bmljb2RlX3RvX2tleXZhbCgnYScp
LCAwKSkKKyAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICBpZiAoIWd0a190ZXN0
X3dpZGdldF9zZW5kX2tleShHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnZGtfdW5pY29kZV90b19rZXl2YWwoJ24nKSwgMCkpCisgICAg
ICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisKKyAgICBndGtfaW1fbXVsdGljb250ZXh0X3Nl
dF9jb250ZXh0X2lkKEdUS19JTV9NVUxUSUNPTlRFWFQoaW1Db250ZXh0KSwgb3JpZ2luYWxJZCk7
CisgICAgZ19mcmVlKG9yaWdpbmFsSWQpOworICAgIGdfb2JqZWN0X3VucmVmKGltQ29udGV4dCk7
CisKKyAgICBnX2lkbGVfYWRkKHZlcmlmeV9jb250ZW50cywgZml4dHVyZSk7Cit9CisKK3N0YXRp
YyB2b2lkIHRlc3RfeGltKEtleUV2ZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBk
YXRhKQoreworICAgIHNldHVwX2tleWV2ZW50X3Rlc3QoZml4dHVyZSwgZGF0YSwgR19DQUxMQkFD
Syh0ZXN0X3hpbV9sb2FkX3N0YXR1c19jYikpOworfQorI2VuZGlmCisKK2ludCBtYWluKGludCBh
cmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVM
TCk7CisKKyAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwor
CisKKyAgICAvLyBXZSdsbCB0ZXN0IGlucHV0IG9uIGEgc2xldyBvZiBkaWZmZXJlbnQgbm9kZSB0
eXBlcy4gS2V5IGV2ZW50cyB0bworICAgIC8vIHRleHQgaW5wdXRzIGFuZCBlZGl0YWJsZSBkaXZz
IHNob3VsZCBiZSBtYXJrZWQgYXMgaGFuZGxlZC4gS2V5IGV2ZW50cworICAgIC8vIHRvIGJ1dHRv
bnMgYW5kIGxpbmtzIHNob3VsZCBub3QuCisgICAgY29uc3QgY2hhciogdGV4dGlucHV0X2h0bWwg
PSAiPGh0bWw+PGJvZHk+PGlucHV0IGlkPVwiaW5cIiB0eXBlPVwidGV4dFwiPiIKKyAgICAgICAg
IjxzY3JpcHQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2luJykuZm9jdXMoKTs8L3NjcmlwdD48
L2JvZHk+PC9odG1sPiI7CisgICAgY29uc3QgY2hhciogYnV0dG9uX2h0bWwgPSAiPGh0bWw+PGJv
ZHk+PGlucHV0IGlkPVwiaW5cIiB0eXBlPVwiYnV0dG9uXCI+IgorICAgICAgICAiPHNjcmlwdD5k
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW4nKS5mb2N1cygpOzwvc2NyaXB0PjwvYm9keT48L2h0
bWw+IjsKKyAgICBjb25zdCBjaGFyKiBsaW5rX2h0bWwgPSAiPGh0bWw+PGJvZHk+PGEgaHJlZj1c
Imh0dHA6Ly93d3cuZ25vbWUub3JnXCIgaWQ9XCJpblwiPiIKKyAgICAgICAgIkxJTktZIE1DTElO
S0VSU09OPC9hPjxzY3JpcHQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2luJykuZm9jdXMoKTs8
L3NjcmlwdD4iCisgICAgICAgICI8L2JvZHk+PC9odG1sPiI7CisgICAgY29uc3QgY2hhciogZGl2
X2h0bWwgPSAiPGh0bWw+PGJvZHk+PGRpdiBpZD1cImluXCIgY29udGVudGVkaXRhYmxlPVwidHJ1
ZVwiPiIKKyAgICAgICAgIjxzY3JpcHQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2luJykuZm9j
dXMoKTs8L3NjcmlwdD48L2JvZHk+PC9odG1sPiI7CisKKyAgICAvLyBUaGVzZSBhcmUgc2ltaWxh
ciB0byB0aGUgYmxvY2tzIGFib3ZlLCBidXQgdGhleSBzaG91bGQgYmxvY2sgdGhlIGZpcnN0Cisg
ICAgLy8ga2V5cHJlc3MgbW9kaWZ5aW5nIHRoZSBlZGl0YWJsZSBub2RlLgorICAgIGNvbnN0IGNo
YXIqIHRleHRpbnB1dF9odG1sX2Jsb2NraW5nID0gIjxodG1sPjxib2R5PiIKKyAgICAgICAgIjxp
bnB1dCBpZD1cImluXCIgdHlwZT1cInRleHRcIiAiCisgICAgICAgICJvbmtleXByZXNzPVwiaWYg
KGZpcnN0KSB7ZXZlbnQucHJldmVudERlZmF1bHQoKTtmaXJzdD1mYWxzZTt9XCI+IgorICAgICAg
ICAiPHNjcmlwdD5maXJzdCA9IHRydWU7XG5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW4nKS5m
b2N1cygpOzwvc2NyaXB0PlxuIgorICAgICAgICAiPC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4iOwor
ICAgIGNvbnN0IGNoYXIqIGRpdl9odG1sX2Jsb2NraW5nID0gIjxodG1sPjxib2R5PiIKKyAgICAg
ICAgIjxkaXYgaWQ9XCJpblwiIGNvbnRlbnRlZGl0YWJsZT1cInRydWVcIiAiCisgICAgICAgICJv
bmtleXByZXNzPVwiaWYgKGZpcnN0KSB7ZXZlbnQucHJldmVudERlZmF1bHQoKTtmaXJzdD1mYWxz
ZTt9XCI+IgorICAgICAgICAiPHNjcmlwdD5maXJzdCA9IHRydWU7IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdpbicpLmZvY3VzKCk7PC9zY3JpcHQ+XG4iCisgICAgICAgICI8L3NjcmlwdD48L2Jv
ZHk+PC9odG1sPiI7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2tleWV2ZW50cy9ldmVudC10
ZXh0aW5wdXQiLCBLZXlFdmVudEZpeHR1cmUsCisgICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3
KHRleHRpbnB1dF9odG1sLCBUUlVFKSwKKyAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJl
X3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF9rZXlwcmVzc19ldmVudHMsCisgICAgICAgICAg
ICAgICBrZXlfZXZlbnRfZml4dHVyZV90ZWFyZG93bik7CisgICAgZ190ZXN0X2FkZCgiL3dlYmtp
dC9rZXlldmVudHMvZXZlbnQtYnV0dG9ucyIsIEtleUV2ZW50Rml4dHVyZSwKKyAgICAgICAgICAg
ICAgIHRlc3RfaW5mb19uZXcoYnV0dG9uX2h0bWwsIEZBTFNFKSwKKyAgICAgICAgICAgICAgIGtl
eV9ldmVudF9maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF9rZXlwcmVzc19ldmVu
dHMsCisgICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV90ZWFyZG93bik7CisgICAgZ190
ZXN0X2FkZCgiL3dlYmtpdC9rZXlldmVudHMvZXZlbnQtbGluayIsIEtleUV2ZW50Rml4dHVyZSwK
KyAgICAgICAgICAgICAgIHRlc3RfaW5mb19uZXcobGlua19odG1sLCBGQUxTRSksCisgICAgICAg
ICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3Rfa2V5
cHJlc3NfZXZlbnRzLAorICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfdGVhcmRvd24p
OworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQva2V5ZXZlbnQvZXZlbnQtZGl2IiwgS2V5RXZlbnRG
aXh0dXJlLAorICAgICAgICAgICAgICAgdGVzdF9pbmZvX25ldyhkaXZfaHRtbCwgVFJVRSksCisg
ICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRl
c3Rfa2V5cHJlc3NfZXZlbnRzLAorICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfdGVh
cmRvd24pOworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQva2V5ZXZlbnQvaW1lLXRleHRpbnB1dCIs
IEtleUV2ZW50Rml4dHVyZSwKKyAgICAgICAgICAgICAgIHRlc3RfaW5mb19uZXcodGV4dGlucHV0
X2h0bWwsIFRSVUUpLAorICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfc2V0dXAsCisg
ICAgICAgICAgICAgICB0ZXN0X2ltZSwKKyAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJl
X3RlYXJkb3duKTsKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2tleWV2ZW50L2ltZS1kaXYiLCBL
ZXlFdmVudEZpeHR1cmUsCisgICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KGRpdl9odG1sLCBU
UlVFKSwKKyAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3NldHVwLAorICAgICAgICAg
ICAgICAgdGVzdF9pbWUsCisgICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV90ZWFyZG93
bik7CisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9rZXlldmVudC9ibG9jay10ZXh0aW5wdXQiLCBL
ZXlFdmVudEZpeHR1cmUsCisgICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KHRleHRpbnB1dF9o
dG1sX2Jsb2NraW5nLCBUUlVFKSwKKyAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3Nl
dHVwLAorICAgICAgICAgICAgICAgdGVzdF9ibG9ja2luZywKKyAgICAgICAgICAgICAgIGtleV9l
dmVudF9maXh0dXJlX3RlYXJkb3duKTsKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2tleWV2ZW50
L2Jsb2NrLWRpdiIsIEtleUV2ZW50Rml4dHVyZSwKKyAgICAgICAgICAgICAgIHRlc3RfaW5mb19u
ZXcoZGl2X2h0bWxfYmxvY2tpbmcsIFRSVUUpLAorICAgICAgICAgICAgICAga2V5X2V2ZW50X2Zp
eHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0X2Jsb2NraW5nLAorICAgICAgICAgICAg
ICAga2V5X2V2ZW50X2ZpeHR1cmVfdGVhcmRvd24pOworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lO
R19YMTEpCisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9rZXlldmVudC94aW0tdGV4dGlucHV0Iiwg
S2V5RXZlbnRGaXh0dXJlLAorICAgICAgICAgICAgICAgdGVzdF9pbmZvX25ldyh0ZXh0aW5wdXRf
aHRtbCwgVFJVRSksCisgICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV9zZXR1cCwKKyAg
ICAgICAgICAgICAgIHRlc3RfeGltLAorICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVf
dGVhcmRvd24pOworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQva2V5ZXZlbnQveGltLWRpdiIsIEtl
eUV2ZW50Rml4dHVyZSwKKyAgICAgICAgICAgICAgIHRlc3RfaW5mb19uZXcoZGl2X2h0bWwsIFRS
VUUpLAorICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAg
ICAgICB0ZXN0X3hpbSwKKyAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3RlYXJkb3du
KTsKKyNlbmRpZgorCisgICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsKK30KKwpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGxvYWRpbmcuYyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3Rsb2FkaW5nLmMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBhOTIwZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3Rsb2FkaW5nLmMKQEAgLTAsMCArMSw0
MzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgR3VzdGF2byBOb3JvbmhhIFNp
bHZhCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKyNpbmNs
dWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+CisKKy8qIFRoaXMgc3Ry
aW5nIGhhcyB0byBiZSByYXRoZXIgYmlnIGJlY2F1c2Ugb2YgdGhlIGNhbmNlbGxlZCB0ZXN0IC0g
aXQKKyAqIGxvb2tzIGxpa2Ugc291cCByZWZ1c2VzIHRvIHNlbmQgb3IgcmVjZWl2ZSBhIHRvbyBz
bWFsbCBjaHVuayAqLworI2RlZmluZSBIVE1MX1NUUklORyAiPGh0bWw+PGJvZHk+VGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nITwvYm9k
eT48L2h0bWw+IgorCitTb3VwVVJJKiBiYXNlX3VyaTsKKworLyogRm9yIHJlYWwgcmVxdWVzdCB0
ZXN0aW5nICovCitzdGF0aWMgdm9pZAorc2VydmVyX2NhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZl
ciwgU291cE1lc3NhZ2UqIG1zZywKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBwYXRoLCBH
SGFzaFRhYmxlKiBxdWVyeSwKKyAgICAgICAgICAgICAgICBTb3VwQ2xpZW50Q29udGV4dCogY29u
dGV4dCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBpZiAobXNnLT5tZXRob2QgIT0gU09VUF9NRVRI
T0RfR0VUKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1zZywgU09VUF9TVEFU
VVNfTk9UX0lNUExFTUVOVEVEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNvdXBf
bWVzc2FnZV9zZXRfc3RhdHVzKG1zZywgU09VUF9TVEFUVVNfT0spOworCisgICAgaWYgKGdfc3Ry
X2VxdWFsKHBhdGgsICIvdGVzdF9sb2FkaW5nX3N0YXR1cyIpIHx8IGdfc3RyX2VxdWFsKHBhdGgs
ICIvdGVzdF9sb2FkaW5nX3N0YXR1czIiKSkKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBw
ZW5kKG1zZy0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBIVE1MX1NUUklORywg
c3RybGVuKEhUTUxfU1RSSU5HKSk7CisgICAgZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi90
ZXN0X2xvYWRfZXJyb3IiKSkgeworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2cs
IFNPVVBfU1RBVFVTX0NBTlRfQ09OTkVDVCk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChw
YXRoLCAiL3Rlc3RfbG9hZGluZ19jYW5jZWxsZWQiKSkgeworICAgICAgICBzb3VwX21lc3NhZ2Vf
aGVhZGVyc19zZXRfZW5jb2RpbmcobXNnLT5yZXNwb25zZV9oZWFkZXJzLCBTT1VQX0VOQ09ESU5H
X0NIVU5LRUQpOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobXNnLT5yZXNwb25z
ZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIEhUTUxfU1RSSU5HLCBzdHJsZW4oSFRNTF9TVFJJ
TkcpKTsKKyAgICAgICAgc291cF9zZXJ2ZXJfdW5wYXVzZV9tZXNzYWdlKHNlcnZlciwgbXNnKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRl
KG1zZy0+cmVzcG9uc2VfYm9keSk7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3OworICAgIEdNYWluTG9vcCAqbG9vcDsKKyAgICBnYm9vbGVhbiBoYXNf
YmVlbl9wcm92aXNpb25hbDsKKyAgICBnYm9vbGVhbiBoYXNfYmVlbl9jb21taXR0ZWQ7CisgICAg
Z2Jvb2xlYW4gaGFzX2JlZW5fZmlyc3RfdmlzdWFsbHlfbm9uX2VtcHR5X2xheW91dDsKKyAgICBn
Ym9vbGVhbiBoYXNfYmVlbl9maW5pc2hlZDsKKyAgICBnYm9vbGVhbiBoYXNfYmVlbl9mYWlsZWQ7
CisgICAgZ2Jvb2xlYW4gaGFzX2JlZW5fbG9hZF9lcnJvcjsKK30gV2ViTG9hZGluZ0ZpeHR1cmU7
CisKK3N0YXRpYyB2b2lkIHdlYl9sb2FkaW5nX2ZpeHR1cmVfc2V0dXAoV2ViTG9hZGluZ0ZpeHR1
cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBmaXh0dXJlLT53ZWJWaWV3
ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZml4dHVyZS0+
bG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKKyAgICBnX29iamVjdF9yZWZfc2lu
ayhmaXh0dXJlLT53ZWJWaWV3KTsKKyAgICBmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCA9
IEZBTFNFOworICAgIGZpeHR1cmUtPmhhc19iZWVuX2NvbW1pdHRlZCA9IEZBTFNFOworICAgIGZp
eHR1cmUtPmhhc19iZWVuX2ZpcnN0X3Zpc3VhbGx5X25vbl9lbXB0eV9sYXlvdXQgPSBGQUxTRTsK
KyAgICBmaXh0dXJlLT5oYXNfYmVlbl9maW5pc2hlZCA9IEZBTFNFOworICAgIGZpeHR1cmUtPmhh
c19iZWVuX2ZhaWxlZCA9IEZBTFNFOworICAgIGZpeHR1cmUtPmhhc19iZWVuX2xvYWRfZXJyb3Ig
PSBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgd2ViX2xvYWRpbmdfZml4dHVyZV90ZWFyZG93bihX
ZWJMb2FkaW5nRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGdf
b2JqZWN0X3VucmVmKGZpeHR1cmUtPndlYlZpZXcpOworICAgIGdfbWFpbl9sb29wX3VucmVmKGZp
eHR1cmUtPmxvb3ApOworfQorCitzdGF0aWMgY2hhciogZ2V0X3VyaV9mb3JfcGF0aChjb25zdCBj
aGFyKiBwYXRoKQoreworICAgIFNvdXBVUkkqIHVyaTsKKyAgICBjaGFyKiB1cmlfc3RyaW5nOwor
CisgICAgdXJpID0gc291cF91cmlfbmV3X3dpdGhfYmFzZShiYXNlX3VyaSwgcGF0aCk7CisgICAg
dXJpX3N0cmluZyA9IHNvdXBfdXJpX3RvX3N0cmluZyh1cmksIEZBTFNFKTsKKyAgICBzb3VwX3Vy
aV9mcmVlICh1cmkpOworCisgICAgcmV0dXJuIHVyaV9zdHJpbmc7Cit9CisKK3N0YXRpYyB2b2lk
IGxvYWRfZmluaXNoZWRfY2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIFdlYktpdFdlYkZyYW1l
KiB3ZWJfZnJhbWUsIFdlYkxvYWRpbmdGaXh0dXJlKiBmaXh0dXJlKQoreworICAgIGdfYXNzZXJ0
KGZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsKTsKKyAgICBnX2Fzc2VydChmaXh0dXJlLT5o
YXNfYmVlbl9jb21taXR0ZWQpOworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX2ZpcnN0
X3Zpc3VhbGx5X25vbl9lbXB0eV9sYXlvdXQpOworCisgICAgZ19tYWluX2xvb3BfcXVpdChmaXh0
dXJlLT5sb29wKTsKK30KKworCitzdGF0aWMgdm9pZCBzdGF0dXNfY2hhbmdlZF9jYihHT2JqZWN0
KiBvYmplY3QsIEdQYXJhbVNwZWMqIHBzcGVjLCBXZWJMb2FkaW5nRml4dHVyZSogZml4dHVyZSkK
K3sKKyAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJfdmlld19nZXRfbG9h
ZF9zdGF0dXMoV0VCS0lUX1dFQl9WSUVXKG9iamVjdCkpOworCisgICAgc3dpdGNoIChzdGF0dXMp
IHsKKyAgICBjYXNlIFdFQktJVF9MT0FEX1BST1ZJU0lPTkFMOgorICAgICAgICBnX2Fzc2VydCgh
Zml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwpOworICAgICAgICBnX2Fzc2VydCghZml4dHVy
ZS0+aGFzX2JlZW5fY29tbWl0dGVkKTsKKyAgICAgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc19i
ZWVuX2ZpcnN0X3Zpc3VhbGx5X25vbl9lbXB0eV9sYXlvdXQpOworICAgICAgICBmaXh0dXJlLT5o
YXNfYmVlbl9wcm92aXNpb25hbCA9IFRSVUU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VC
S0lUX0xPQURfQ09NTUlUVEVEOgorICAgICAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9w
cm92aXNpb25hbCk7CisgICAgICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNfYmVlbl9jb21taXR0
ZWQpOworICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fZmlyc3RfdmlzdWFsbHlf
bm9uX2VtcHR5X2xheW91dCk7CisgICAgICAgIGZpeHR1cmUtPmhhc19iZWVuX2NvbW1pdHRlZCA9
IFRSVUU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0xPQURfRklSU1RfVklTVUFM
TFlfTk9OX0VNUFRZX0xBWU9VVDoKKyAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5f
cHJvdmlzaW9uYWwpOworICAgICAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9jb21taXR0
ZWQpOworICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fZmlyc3RfdmlzdWFsbHlf
bm9uX2VtcHR5X2xheW91dCk7CisgICAgICAgIGZpeHR1cmUtPmhhc19iZWVuX2ZpcnN0X3Zpc3Vh
bGx5X25vbl9lbXB0eV9sYXlvdXQgPSBUUlVFOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdF
QktJVF9MT0FEX0ZJTklTSEVEOgorICAgICAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9w
cm92aXNpb25hbCk7CisgICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX2NvbW1pdHRl
ZCk7CisgICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX2ZpcnN0X3Zpc3VhbGx5X25v
bl9lbXB0eV9sYXlvdXQpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBn
X2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgdGVzdF9sb2Fk
aW5nX3N0YXR1cyhXZWJMb2FkaW5nRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRh
KQoreworICAgIGNoYXIqIHVyaV9zdHJpbmc7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0
X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyhmaXh0dXJlLT53ZWJWaWV3KSwgPT0sIFdFQktJVF9M
T0FEX1BST1ZJU0lPTkFMKTsKKworICAgIGdfb2JqZWN0X2Nvbm5lY3QoR19PQkpFQ1QoZml4dHVy
ZS0+d2ViVmlldyksCisgICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjpub3RpZnk6OmxvYWQt
c3RhdHVzIiwgR19DQUxMQkFDSyhzdGF0dXNfY2hhbmdlZF9jYiksIGZpeHR1cmUsCisgICAgICAg
ICAgICAgICAgICAgICAic2lnbmFsOjpsb2FkLWZpbmlzaGVkIiwgR19DQUxMQkFDSyhsb2FkX2Zp
bmlzaGVkX2NiKSwgZml4dHVyZSwKKyAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAg
dXJpX3N0cmluZyA9IGdldF91cmlfZm9yX3BhdGgoIi90ZXN0X2xvYWRpbmdfc3RhdHVzIik7CisK
KyAgICAvKiBsb2FkX3VyaSB3aWxsIHRyaWdnZXIgdGhlIG5hdmlnYXRpb24tcG9saWN5LWRlY2lz
aW9uLXJlcXVlc3RlZAorICAgICAqIHNpZ25hbCBlbWlzc2lvbjsKKyAgICAgKi8KKyAgICB3ZWJr
aXRfd2ViX3ZpZXdfbG9hZF91cmkoZml4dHVyZS0+d2ViVmlldywgdXJpX3N0cmluZyk7CisgICAg
Z19mcmVlKHVyaV9zdHJpbmcpOworCisgICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1cmUtPmxvb3Ap
OworfQorCitzdGF0aWMgdm9pZCBsb2FkX2Vycm9yX3N0YXR1c19jaGFuZ2VkX2NiKEdPYmplY3Qq
IG9iamVjdCwgR1BhcmFtU3BlYyogcHNwZWMsIFdlYkxvYWRpbmdGaXh0dXJlKiBmaXh0dXJlKQor
eworICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2Fk
X3N0YXR1cyhXRUJLSVRfV0VCX1ZJRVcob2JqZWN0KSk7CisKKyAgICBzd2l0Y2goc3RhdHVzKSB7
CisgICAgY2FzZSBXRUJLSVRfTE9BRF9QUk9WSVNJT05BTDoKKyAgICAgICAgZ19hc3NlcnQoIWZp
eHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsKTsKKyAgICAgICAgZml4dHVyZS0+aGFzX2JlZW5f
cHJvdmlzaW9uYWwgPSBUUlVFOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9MT0FE
X0NPTU1JVFRFRDoKKyAgICAgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX2NvbW1pdHRl
ZCk7CisgICAgICAgIGZpeHR1cmUtPmhhc19iZWVuX2NvbW1pdHRlZCA9IFRSVUU7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0xPQURfRklOSVNIRUQ6CisgICAgICAgIGdfYXNzZXJ0
KGZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsKTsKKyAgICAgICAgZ19hc3NlcnQoZml4dHVy
ZS0+aGFzX2JlZW5fbG9hZF9lcnJvcik7CisgICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19i
ZWVuX2ZhaWxlZCk7CisgICAgICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNfYmVlbl9maW5pc2hl
ZCk7CisgICAgICAgIGZpeHR1cmUtPmhhc19iZWVuX2ZpbmlzaGVkID0gVFJVRTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBXRUJLSVRfTE9BRF9GQUlMRUQ6CisgICAgICAgIGdfYXNzZXJ0KCFm
aXh0dXJlLT5oYXNfYmVlbl9mYWlsZWQpOworICAgICAgICBmaXh0dXJlLT5oYXNfYmVlbl9mYWls
ZWQgPSBUUlVFOworICAgICAgICBnX21haW5fbG9vcF9xdWl0KGZpeHR1cmUtPmxvb3ApOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0
YXRpYyBnYm9vbGVhbiBsb2FkX2Vycm9yX2NiKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktp
dFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgY2hhciogdXJpLCBHRXJyb3IgKmVycm9yLCBXZWJMb2Fk
aW5nRml4dHVyZSogZml4dHVyZSkKK3sKKyAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9w
cm92aXNpb25hbCk7CisgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX2xvYWRfZXJyb3Ip
OworICAgIGZpeHR1cmUtPmhhc19iZWVuX2xvYWRfZXJyb3IgPSBUUlVFOworCisgICAgcmV0dXJu
IEZBTFNFOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2xvYWRpbmdfZXJyb3IoV2ViTG9hZGluZ0Zp
eHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBjaGFyKiB1cmlfc3Ry
aW5nOworCisgICAgZ190ZXN0X2J1ZygiMjg4NDIiKTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
Zml4dHVyZS0+d2ViVmlldywgImxvYWQtZXJyb3IiLCBHX0NBTExCQUNLKGxvYWRfZXJyb3JfY2Ip
LCBmaXh0dXJlKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJub3Rp
Znk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhsb2FkX2Vycm9yX3N0YXR1c19jaGFuZ2VkX2Ni
KSwgZml4dHVyZSk7CisKKyAgICB1cmlfc3RyaW5nID0gZ2V0X3VyaV9mb3JfcGF0aCgiL3Rlc3Rf
bG9hZF9lcnJvciIpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaShmaXh0dXJlLT53ZWJW
aWV3LCB1cmlfc3RyaW5nKTsKKyAgICBnX2ZyZWUodXJpX3N0cmluZyk7CisKKyAgICBnX21haW5f
bG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7CisKKyAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVl
bl9wcm92aXNpb25hbCk7CisgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX2NvbW1pdHRl
ZCk7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fbG9hZF9lcnJvcik7CisgICAgZ19h
c3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fZmFpbGVkKTsKKyAgICBnX2Fzc2VydCghZml4dHVyZS0+
aGFzX2JlZW5fZmluaXNoZWQpOworfQorCisvKiBDYW5jZWxsZWQgbG9hZCAqLworCitzdGF0aWMg
Z2Jvb2xlYW4gbG9hZF9jYW5jZWxsZWRfY2IoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0
V2ViRnJhbWUqIGZyYW1lLCBjb25zdCBjaGFyKiB1cmksIEdFcnJvciAqZXJyb3IsIFdlYkxvYWRp
bmdGaXh0dXJlKiBmaXh0dXJlKQoreworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX3By
b3Zpc2lvbmFsKTsKKyAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9mYWlsZWQpOworICAg
IGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNfYmVlbl9sb2FkX2Vycm9yKTsKKyAgICBnX2Fzc2VydChl
cnJvci0+Y29kZSA9PSBXRUJLSVRfTkVUV09SS19FUlJPUl9DQU5DRUxMRUQpOworICAgIGZpeHR1
cmUtPmhhc19iZWVuX2xvYWRfZXJyb3IgPSBUUlVFOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisK
K3N0YXRpYyBnYm9vbGVhbiBzdG9wX2xvYWQgKGdwb2ludGVyIGRhdGEpCit7CisgICAgd2Via2l0
X3dlYl92aWV3X3N0b3BfbG9hZGluZyhXRUJLSVRfV0VCX1ZJRVcoZGF0YSkpOworICAgIHJldHVy
biBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgbG9hZF9jYW5jZWxsZWRfc3RhdHVzX2NoYW5nZWRf
Y2IoR09iamVjdCogb2JqZWN0LCBHUGFyYW1TcGVjKiBwc3BlYywgV2ViTG9hZGluZ0ZpeHR1cmUq
IGZpeHR1cmUpCit7CisgICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X2xvYWRfc3RhdHVzKFdFQktJVF9XRUJfVklFVyhvYmplY3QpKTsKKworICAgIHN3aXRj
aChzdGF0dXMpIHsKKyAgICBjYXNlIFdFQktJVF9MT0FEX1BST1ZJU0lPTkFMOgorICAgICAgICBn
X2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwpOworICAgICAgICBnX2Fzc2Vy
dCghZml4dHVyZS0+aGFzX2JlZW5fZmFpbGVkKTsKKyAgICAgICAgZml4dHVyZS0+aGFzX2JlZW5f
cHJvdmlzaW9uYWwgPSBUUlVFOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9MT0FE
X0NPTU1JVFRFRDoKKyAgICAgICAgZ19pZGxlX2FkZCAoc3RvcF9sb2FkLCBvYmplY3QpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9MT0FEX0ZBSUxFRDoKKyAgICAgICAgZ19hc3Nl
cnQoZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwpOworICAgICAgICBnX2Fzc2VydCghZml4
dHVyZS0+aGFzX2JlZW5fZmFpbGVkKTsKKyAgICAgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc19i
ZWVuX2xvYWRfZXJyb3IpOworICAgICAgICBmaXh0dXJlLT5oYXNfYmVlbl9mYWlsZWQgPSBUUlVF
OworICAgICAgICBnX21haW5fbG9vcF9xdWl0KGZpeHR1cmUtPmxvb3ApOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFdFQktJVF9MT0FEX0ZJTklTSEVEOgorICAgICAgICBnX2Fzc2VydF9ub3Rf
cmVhY2hlZCgpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsK
KyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfbG9hZGluZ19jYW5jZWxsZWQoV2ViTG9hZGlu
Z0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBjaGFyKiB1cmlf
c3RyaW5nOworCisgICAgZ190ZXN0X2J1ZygiMjk2NDQiKTsKKworICAgIGdfc2lnbmFsX2Nvbm5l
Y3QoZml4dHVyZS0+d2ViVmlldywgImxvYWQtZXJyb3IiLCBHX0NBTExCQUNLKGxvYWRfY2FuY2Vs
bGVkX2NiKSwgZml4dHVyZSk7CisgICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53ZWJWaWV3
LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0sobG9hZF9jYW5jZWxsZWRfc3RhdHVz
X2NoYW5nZWRfY2IpLCBmaXh0dXJlKTsKKworICAgIHVyaV9zdHJpbmcgPSBnZXRfdXJpX2Zvcl9w
YXRoKCIvdGVzdF9sb2FkaW5nX2NhbmNlbGxlZCIpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2Fk
X3VyaShmaXh0dXJlLT53ZWJWaWV3LCB1cmlfc3RyaW5nKTsKKyAgICBnX2ZyZWUodXJpX3N0cmlu
Zyk7CisKKyAgICBnX21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7Cit9CisKK3N0YXRpYyB2
b2lkIGxvYWRfZ29iYWNrX3N0YXR1c19jaGFuZ2VkX2NiKEdPYmplY3QqIG9iamVjdCwgR1BhcmFt
U3BlYyogcHNwZWMsIFdlYkxvYWRpbmdGaXh0dXJlKiBmaXh0dXJlKQoreworICAgIFdlYktpdExv
YWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyhXRUJLSVRf
V0VCX1ZJRVcob2JqZWN0KSk7CisKKyAgICBzd2l0Y2goc3RhdHVzKSB7CisgICAgY2FzZSBXRUJL
SVRfTE9BRF9QUk9WSVNJT05BTDoKKyAgICAgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVu
X3Byb3Zpc2lvbmFsKTsKKyAgICAgICAgZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwgPSBU
UlVFOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9MT0FEX0NPTU1JVFRFRDoKKyAg
ICAgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwpOworICAgICAgICBm
aXh0dXJlLT5oYXNfYmVlbl9jb21taXR0ZWQgPSBUUlVFOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFdFQktJVF9MT0FEX0ZBSUxFRDoKKyAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXRUJLSVRfTE9BRF9GSU5JU0hFRDoKKyAgICAgICAg
Z19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwpOworICAgICAgICBnX2Fzc2Vy
dChmaXh0dXJlLT5oYXNfYmVlbl9jb21taXR0ZWQpOworICAgICAgICBmaXh0dXJlLT5oYXNfYmVl
bl9maW5pc2hlZCA9IFRSVUU7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQoZml4dHVyZS0+bG9v
cCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0K
K30KKworc3RhdGljIHZvaWQgbG9hZF93ZW50YmFja19zdGF0dXNfY2hhbmdlZF9jYihHT2JqZWN0
KiBvYmplY3QsIEdQYXJhbVNwZWMqIHBzcGVjLCBXZWJMb2FkaW5nRml4dHVyZSogZml4dHVyZSkK
K3sKKyAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJfdmlld19nZXRfbG9h
ZF9zdGF0dXMoV0VCS0lUX1dFQl9WSUVXKG9iamVjdCkpOworICAgIGNoYXIqIHVyaV9zdHJpbmc7
CisgICAgY2hhciogdXJpX3N0cmluZzI7CisKKyAgICB1cmlfc3RyaW5nID0gZ2V0X3VyaV9mb3Jf
cGF0aCgiL3Rlc3RfbG9hZGluZ19zdGF0dXMiKTsKKyAgICB1cmlfc3RyaW5nMiA9IGdldF91cmlf
Zm9yX3BhdGgoIi90ZXN0X2xvYWRpbmdfc3RhdHVzMiIpOworCisgICAgc3dpdGNoKHN0YXR1cykg
eworICAgIGNhc2UgV0VCS0lUX0xPQURfUFJPVklTSU9OQUw6CisgICAgICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaShmaXh0dXJlLT53ZWJWaWV3KSwgPT0sIHVyaV9z
dHJpbmcyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXRUJLSVRfTE9BRF9DT01NSVRURUQ6
CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaShmaXh0dXJl
LT53ZWJWaWV3KSwgPT0sIHVyaV9zdHJpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdF
QktJVF9MT0FEX0ZBSUxFRDoKKyAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBXRUJLSVRfTE9BRF9GSU5JU0hFRDoKKyAgICAgICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKGZpeHR1cmUtPndlYlZpZXcpLCA9PSwg
dXJpX3N0cmluZyk7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQoZml4dHVyZS0+bG9vcCk7Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IGdfZnJlZSh1cmlfc3RyaW5nKTsKKyAgICBnX2ZyZWUodXJpX3N0cmluZzIpOworfQorCitzdGF0
aWMgdm9pZCBsb2FkX2Vycm9yX3Rlc3QoV2ViS2l0V2ViVmlldyogd2VidmlldywgV2ViS2l0V2Vi
RnJhbWUqIGZyYW1lLCBjb25zdCBjaGFyKiB1cmksIEdFcnJvciogZXJyb3IpCit7CisgICAgZ19k
ZWJ1ZygiRXJyb3I6ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0
X2xvYWRpbmdfZ29iYWNrKFdlYkxvYWRpbmdGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVy
IGRhdGEpCit7CisgICAgY2hhciogdXJpX3N0cmluZzsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
Zml4dHVyZS0+d2ViVmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLCBHX0NBTExCQUNLKGxvYWRf
Z29iYWNrX3N0YXR1c19jaGFuZ2VkX2NiKSwgZml4dHVyZSk7CisKKyAgICBnX3NpZ25hbF9jb25u
ZWN0KGZpeHR1cmUtPndlYlZpZXcsICJsb2FkLWVycm9yIiwgR19DQUxMQkFDSyhsb2FkX2Vycm9y
X3Rlc3QpLCBmaXh0dXJlKTsKKworICAgIHVyaV9zdHJpbmcgPSBnZXRfdXJpX2Zvcl9wYXRoKCIv
dGVzdF9sb2FkaW5nX3N0YXR1cyIpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaShmaXh0
dXJlLT53ZWJWaWV3LCB1cmlfc3RyaW5nKTsKKyAgICBnX2ZyZWUodXJpX3N0cmluZyk7CisKKyAg
ICBnX21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7CisKKyAgICBmaXh0dXJlLT5oYXNfYmVl
bl9wcm92aXNpb25hbCA9IEZBTFNFOworICAgIGZpeHR1cmUtPmhhc19iZWVuX2NvbW1pdHRlZCA9
IEZBTFNFOworICAgIGZpeHR1cmUtPmhhc19iZWVuX2ZpcnN0X3Zpc3VhbGx5X25vbl9lbXB0eV9s
YXlvdXQgPSBGQUxTRTsKKyAgICBmaXh0dXJlLT5oYXNfYmVlbl9maW5pc2hlZCA9IEZBTFNFOwor
ICAgIGZpeHR1cmUtPmhhc19iZWVuX2ZhaWxlZCA9IEZBTFNFOworICAgIGZpeHR1cmUtPmhhc19i
ZWVuX2xvYWRfZXJyb3IgPSBGQUxTRTsKKworICAgIHVyaV9zdHJpbmcgPSBnZXRfdXJpX2Zvcl9w
YXRoKCIvdGVzdF9sb2FkaW5nX3N0YXR1czIiKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91
cmkoZml4dHVyZS0+d2ViVmlldywgdXJpX3N0cmluZyk7CisgICAgZ19mcmVlKHVyaV9zdHJpbmcp
OworCisgICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1cmUtPmxvb3ApOworCisgICAgZ19zaWduYWxf
aGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKGZpeHR1cmUtPndlYlZpZXcsIGxvYWRfZ29iYWNr
X3N0YXR1c19jaGFuZ2VkX2NiLCBmaXh0dXJlKTsKKworICAgIGZpeHR1cmUtPmhhc19iZWVuX3By
b3Zpc2lvbmFsID0gRkFMU0U7CisgICAgZml4dHVyZS0+aGFzX2JlZW5fY29tbWl0dGVkID0gRkFM
U0U7CisgICAgZml4dHVyZS0+aGFzX2JlZW5fZmlyc3RfdmlzdWFsbHlfbm9uX2VtcHR5X2xheW91
dCA9IEZBTFNFOworICAgIGZpeHR1cmUtPmhhc19iZWVuX2ZpbmlzaGVkID0gRkFMU0U7CisgICAg
Zml4dHVyZS0+aGFzX2JlZW5fZmFpbGVkID0gRkFMU0U7CisgICAgZml4dHVyZS0+aGFzX2JlZW5f
bG9hZF9lcnJvciA9IEZBTFNFOworCisgICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53ZWJW
aWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0sobG9hZF93ZW50YmFja19zdGF0
dXNfY2hhbmdlZF9jYiksIGZpeHR1cmUpOworICAgIHdlYmtpdF93ZWJfdmlld19nb19iYWNrKGZp
eHR1cmUtPndlYlZpZXcpOworCisgICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1cmUtPmxvb3ApOwor
CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKGZpeHR1cmUtPndlYlZp
ZXcsIGxvYWRfd2VudGJhY2tfc3RhdHVzX2NoYW5nZWRfY2IsIGZpeHR1cmUpOworfQorCitpbnQg
bWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgU291cFNlcnZlciogc2VydmVyOwor
CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAgc2VydmVyID0g
c291cF9zZXJ2ZXJfbmV3KFNPVVBfU0VSVkVSX1BPUlQsIDAsIE5VTEwpOworICAgIHNvdXBfc2Vy
dmVyX3J1bl9hc3luYyhzZXJ2ZXIpOworCisgICAgc291cF9zZXJ2ZXJfYWRkX2hhbmRsZXIoc2Vy
dmVyLCBOVUxMLCBzZXJ2ZXJfY2FsbGJhY2ssIE5VTEwsIE5VTEwpOworCisgICAgYmFzZV91cmkg
PSBzb3VwX3VyaV9uZXcoImh0dHA6Ly8xMjcuMC4wLjEvIik7CisgICAgc291cF91cmlfc2V0X3Bv
cnQoYmFzZV91cmksIHNvdXBfc2VydmVyX2dldF9wb3J0KHNlcnZlcikpOworCisgICAgZ190ZXN0
X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYWRkKCIv
d2Via2l0L2xvYWRpbmcvc3RhdHVzIiwKKyAgICAgICAgICAgICAgIFdlYkxvYWRpbmdGaXh0dXJl
LCBOVUxMLAorICAgICAgICAgICAgICAgd2ViX2xvYWRpbmdfZml4dHVyZV9zZXR1cCwKKyAgICAg
ICAgICAgICAgIHRlc3RfbG9hZGluZ19zdGF0dXMsCisgICAgICAgICAgICAgICB3ZWJfbG9hZGlu
Z19maXh0dXJlX3RlYXJkb3duKTsKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2xvYWRpbmcvZXJy
b3IiLAorICAgICAgICAgICAgICAgV2ViTG9hZGluZ0ZpeHR1cmUsIE5VTEwsCisgICAgICAgICAg
ICAgICB3ZWJfbG9hZGluZ19maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF9sb2Fk
aW5nX2Vycm9yLAorICAgICAgICAgICAgICAgd2ViX2xvYWRpbmdfZml4dHVyZV90ZWFyZG93bik7
CisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9sb2FkaW5nL2NhbmNlbGxlZCIsCisgICAgICAgICAg
ICAgICBXZWJMb2FkaW5nRml4dHVyZSwgTlVMTCwKKyAgICAgICAgICAgICAgIHdlYl9sb2FkaW5n
X2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0X2xvYWRpbmdfY2FuY2VsbGVkLAor
ICAgICAgICAgICAgICAgd2ViX2xvYWRpbmdfZml4dHVyZV90ZWFyZG93bik7CisgICAgZ190ZXN0
X2FkZCgiL3dlYmtpdC9sb2FkaW5nL2dvYmFjayIsCisgICAgICAgICAgICAgICBXZWJMb2FkaW5n
Rml4dHVyZSwgTlVMTCwKKyAgICAgICAgICAgICAgIHdlYl9sb2FkaW5nX2ZpeHR1cmVfc2V0dXAs
CisgICAgICAgICAgICAgICB0ZXN0X2xvYWRpbmdfZ29iYWNrLAorICAgICAgICAgICAgICAgd2Vi
X2xvYWRpbmdfZml4dHVyZV90ZWFyZG93bik7CisgICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsKK30K
KwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdG1p
bWVoYW5kbGluZy5jIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdG1p
bWVoYW5kbGluZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjOTA2OTEK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90
ZXN0bWltZWhhbmRsaW5nLmMKQEAgLTAsMCArMSwyMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgSmFuIE1pY2hhZWwgQWxvbnpvCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR3VzdGF2byBO
b3JvbmhhIFNpbHZhCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJ0ZXN0X3V0aWxzLmgi
CisKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KKyNpbmNsdWRl
IDxsaWJzb3VwL3NvdXAuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx3ZWJraXQv
d2Via2l0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK0dNYWluTG9vcCogbG9vcDsKK1NvdXBT
ZXNzaW9uICpzZXNzaW9uOworY2hhciogYmFzZV91cmk7CisKKy8qIEZvciByZWFsIHJlcXVlc3Qg
dGVzdGluZyAqLworc3RhdGljIHZvaWQKK3NlcnZlcl9jYWxsYmFjayhTb3VwU2VydmVyICpzZXJ2
ZXIsIFNvdXBNZXNzYWdlICptc2csCisgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgs
IEdIYXNoVGFibGUgKnF1ZXJ5LAorICAgICAgICAgICAgICAgICBTb3VwQ2xpZW50Q29udGV4dCAq
Y29udGV4dCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBpZiAobXNnLT5tZXRob2QgIT0gU09VUF9N
RVRIT0RfR0VUKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1zZywgU09VUF9T
VEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNv
dXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1zZywgU09VUF9TVEFUVVNfT0spOworCisgICAgLyogUERG
ICovCisgICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvcGRmIikpIHsKKyAgICAgICAgY2hhciog
Y29udGVudHM7CisgICAgICAgIGdzaXplIGxlbmd0aDsKKyAgICAgICAgR0Vycm9yKiBlcnJvciA9
IE5VTEw7CisKKyAgICAgICAgZ19maWxlX2dldF9jb250ZW50cygidGVzdC5wZGYiLCAmY29udGVu
dHMsICZsZW5ndGgsICZlcnJvcik7CisgICAgICAgIGdfYXNzZXJ0KCFlcnJvcik7CisKKyAgICAg
ICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1zZy0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1P
UllfVEFLRSwgY29udGVudHMsIGxlbmd0aCk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChw
YXRoLCAiL2h0bWwiKSkgeworICAgICAgICBjaGFyKiBjb250ZW50czsKKyAgICAgICAgZ3NpemUg
bGVuZ3RoOworICAgICAgICBHRXJyb3IqIGVycm9yID0gTlVMTDsKKworICAgICAgICBnX2ZpbGVf
Z2V0X2NvbnRlbnRzKCJ0ZXN0Lmh0bWwiLCAmY29udGVudHMsICZsZW5ndGgsICZlcnJvcik7Cisg
ICAgICAgIGdfYXNzZXJ0KCFlcnJvcik7CisKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBw
ZW5kKG1zZy0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgY29udGVudHMsIGxlbmd0
aCk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3RleHQiKSkgeworICAgICAg
ICBjaGFyKiBjb250ZW50czsKKyAgICAgICAgZ3NpemUgbGVuZ3RoOworICAgICAgICBHRXJyb3Iq
IGVycm9yID0gTlVMTDsKKworICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobXNn
LT5yZXNwb25zZV9oZWFkZXJzLCAiQ29udGVudC1EaXNwb3NpdGlvbiIsICJhdHRhY2htZW50OyBm
aWxlbmFtZT10ZXN0LnR4dCIpOworCisgICAgICAgIGdfZmlsZV9nZXRfY29udGVudHMoInRlc3Qu
dHh0IiwgJmNvbnRlbnRzLCAmbGVuZ3RoLCAmZXJyb3IpOworICAgICAgICBnX2Fzc2VydCghZXJy
b3IpOworCisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtc2ctPnJlc3BvbnNlX2Jv
ZHksIFNPVVBfTUVNT1JZX1RBS0UsIGNvbnRlbnRzLCBsZW5ndGgpOworICAgIH0KKworICAgIHNv
dXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1zZy0+cmVzcG9uc2VfYm9keSk7Cit9CisKK3N0YXRp
YyB2b2lkIGlkbGVfcXVpdF9sb29wX2NiKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBHUGFyYW1T
cGVjKiBwc3BlYywgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBpZiAod2Via2l0X3dlYl92aWV3X2dl
dF9sb2FkX3N0YXR1cyh3ZWJfdmlldykgPT0gV0VCS0lUX0xPQURfRklOSVNIRUQgfHwKKyAgICAg
ICAgd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJfdmlldykgPT0gV0VCS0lUX0xP
QURfRkFJTEVEKQorICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworfQorCitzdGF0aWMg
Z2Jvb2xlYW4gbWltZV90eXBlX3BvbGljeV9kZWNpc2lvbl9yZXF1ZXN0ZWRfY2IoV2ViS2l0V2Vi
VmlldyogdmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiBy
ZXF1ZXN0LCBjb25zdCBjaGFyKiBtaW1lX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0V2ViUG9saWN5RGVjaXNpb24qIGRl
Y2lzaW9uLCBncG9pbnRlciBkYXRhKQoreworICAgIGNoYXIqIHR5cGUgPSAoY2hhciopZGF0YTsK
KworICAgIGlmIChnX3N0cl9lcXVhbCh0eXBlLCAicGRmIikpIHsKKyAgICAgICAgZ19hc3NlcnRf
Y21wc3RyKG1pbWVfdHlwZSwgPT0sICJhcHBsaWNhdGlvbi9wZGYiKTsKKyAgICAgICAgZ19hc3Nl
cnQoIXdlYmtpdF93ZWJfdmlld19jYW5fc2hvd19taW1lX3R5cGUodmlldywgbWltZV90eXBlKSk7
CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbCh0eXBlLCAiaHRtbCIpKSB7CisgICAgICAgIGdf
YXNzZXJ0X2NtcHN0cihtaW1lX3R5cGUsID09LCAidGV4dC9odG1sIik7CisgICAgICAgIGdfYXNz
ZXJ0KHdlYmtpdF93ZWJfdmlld19jYW5fc2hvd19taW1lX3R5cGUodmlldywgbWltZV90eXBlKSk7
CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbCh0eXBlLCAidGV4dCIpKSB7CisgICAgICAgIFdl
YktpdE5ldHdvcmtSZXNwb25zZSogcmVzcG9uc2UgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9uZXR3
b3JrX3Jlc3BvbnNlKGZyYW1lKTsKKyAgICAgICAgU291cE1lc3NhZ2UqIG1lc3NhZ2UgPSB3ZWJr
aXRfbmV0d29ya19yZXNwb25zZV9nZXRfbWVzc2FnZShyZXNwb25zZSk7CisgICAgICAgIGNoYXIq
IGRpc3Bvc2l0aW9uOworCisgICAgICAgIGdfYXNzZXJ0KG1lc3NhZ2UpOworICAgICAgICBzb3Vw
X21lc3NhZ2VfaGVhZGVyc19nZXRfY29udGVudF9kaXNwb3NpdGlvbihtZXNzYWdlLT5yZXNwb25z
ZV9oZWFkZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmZGlzcG9zaXRpb24sIE5VTEwpOworICAgICAgICBnX29iamVjdF91bnJlZihyZXNw
b25zZSk7CisKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKGRpc3Bvc2l0aW9uLCA9PSwgImF0dGFj
aG1lbnQiKTsKKyAgICAgICAgZ19mcmVlKGRpc3Bvc2l0aW9uKTsKKworICAgICAgICBnX2Fzc2Vy
dF9jbXBzdHIobWltZV90eXBlLCA9PSwgInRleHQvcGxhaW4iKTsKKyAgICAgICAgZ19hc3NlcnQo
d2Via2l0X3dlYl92aWV3X2Nhbl9zaG93X21pbWVfdHlwZSh2aWV3LCBtaW1lX3R5cGUpKTsKKyAg
ICB9CisKKyAgICBnX2ZyZWUodHlwZSk7CisKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRp
YyB2b2lkIHRlc3RSZW1vdGVNaW1lVHlwZShjb25zdCB2b2lkKiBkYXRhKQoreworICAgIGNvbnN0
IGNoYXIqIG5hbWUgPSAoY29uc3QgY2hhciopIGRhdGE7CisgICAgV2ViS2l0V2ViVmlldyogdmll
dyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0
X3JlZl9zaW5rKEdfT0JKRUNUKHZpZXcpKTsKKworICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXco
TlVMTCwgVFJVRSk7CisKKyAgICBnX29iamVjdF9jb25uZWN0KEdfT0JKRUNUKHZpZXcpLAorICAg
ICAgICAgICAgICAgICAgICAgInNpZ25hbDo6bm90aWZ5Ojpsb2FkLXN0YXR1cyIsIGlkbGVfcXVp
dF9sb29wX2NiLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgInNpZ25hbDo6bWltZS10eXBl
LXBvbGljeS1kZWNpc2lvbi1yZXF1ZXN0ZWQiLCBtaW1lX3R5cGVfcG9saWN5X2RlY2lzaW9uX3Jl
cXVlc3RlZF9jYiwgZ19zdHJkdXAobmFtZSksCisgICAgICAgICAgICAgICAgICAgICBOVUxMKTsK
KworICAgIGNoYXIqIGVmZmVjdGl2ZV91cmkgPSBnX3N0cmR1cF9wcmludGYoIiVzJXMiLCBiYXNl
X3VyaSwgbmFtZSk7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHZpZXcsIGVmZmVjdGl2
ZV91cmkpOworICAgIGdfZnJlZShlZmZlY3RpdmVfdXJpKTsKKworICAgIGdfbWFpbl9sb29wX3J1
bihsb29wKTsKKworICAgIGdfb2JqZWN0X3VucmVmKHZpZXcpOworfQorCitzdGF0aWMgdm9pZCB0
ZXN0TG9jYWxNaW1lVHlwZShjb25zdCB2b2lkKiBkYXRhKQoreworICAgICBjb25zdCBjaGFyKiB0
eXBlTmFtZSA9IChjb25zdCBjaGFyKikgZGF0YTsKKyAgICAgV2ViS2l0V2ViVmlldyogdmlldyA9
IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgICBnX29iamVjdF9y
ZWZfc2luayhHX09CSkVDVCh2aWV3KSk7CisKKyAgICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhO
VUxMLCBUUlVFKTsKKworICAgICBnX29iamVjdF9jb25uZWN0KEdfT0JKRUNUKHZpZXcpLAorICAg
ICAgICAgICAgICAgICAgICAgICJzaWduYWw6Om5vdGlmeTo6bG9hZC1zdGF0dXMiLCBpZGxlX3F1
aXRfbG9vcF9jYiwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjptaW1lLXR5
cGUtcG9saWN5LWRlY2lzaW9uLXJlcXVlc3RlZCIsIG1pbWVfdHlwZV9wb2xpY3lfZGVjaXNpb25f
cmVxdWVzdGVkX2NiLCBnX3N0cmR1cCh0eXBlTmFtZSksCisgICAgICAgICAgICAgICAgICAgICAg
TlVMTCk7CisKKyAgICAgZ2NoYXIqIGZpbGVuYW1lID0gZ19zdHJkdXBfcHJpbnRmKCJ0ZXN0LiVz
IiwgdHlwZU5hbWUpOworICAgICBHRmlsZSogZmlsZSA9IGdfZmlsZV9uZXdfZm9yX3BhdGgoZmls
ZW5hbWUpOworICAgICBnX2ZyZWUoZmlsZW5hbWUpOworCisgICAgIGdjaGFyKiBmaWxlVVJJID0g
Z19maWxlX2dldF91cmkoZmlsZSk7CisgICAgIGdfb2JqZWN0X3VucmVmKGZpbGUpOworCisgICAg
IHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh2aWV3LCBmaWxlVVJJKTsKKyAgICAgZ19mcmVlKGZp
bGVVUkkpOworIAorICAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisgICAgIGdfb2JqZWN0X3Vu
cmVmKHZpZXcpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAg
U291cFNlcnZlciogc2VydmVyOworICAgIFNvdXBVUkkqIHNvdXBfdXJpOworCisgICAgZ3RrX3Rl
c3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAgLyogSG9wZWZ1bGx5IG1ha2UgdGVz
dCBpbmRlcGVuZGVudCBvZiB0aGUgcGF0aCBpdCdzIGNhbGxlZCBmcm9tLiAqLworICAgIHRlc3R1
dGlsc19yZWxhdGl2ZV9jaGRpcigiVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsv
cmVzb3VyY2VzL3Rlc3QuaHRtbCIsIGFyZ3ZbMF0pOworCisgICAgc2VydmVyID0gc291cF9zZXJ2
ZXJfbmV3KFNPVVBfU0VSVkVSX1BPUlQsIDAsIE5VTEwpOworICAgIHNvdXBfc2VydmVyX3J1bl9h
c3luYyhzZXJ2ZXIpOworCisgICAgc291cF9zZXJ2ZXJfYWRkX2hhbmRsZXIoc2VydmVyLCBOVUxM
LCBzZXJ2ZXJfY2FsbGJhY2ssIE5VTEwsIE5VTEwpOworCisgICAgc291cF91cmkgPSBzb3VwX3Vy
aV9uZXcoImh0dHA6Ly8xMjcuMC4wLjEvIik7CisgICAgc291cF91cmlfc2V0X3BvcnQoc291cF91
cmksIHNvdXBfc2VydmVyX2dldF9wb3J0KHNlcnZlcikpOworCisgICAgYmFzZV91cmkgPSBzb3Vw
X3VyaV90b19zdHJpbmcoc291cF91cmksIEZBTFNFKTsKKyAgICBzb3VwX3VyaV9mcmVlKHNvdXBf
dXJpKTsKKworICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7
CisgICAgZ190ZXN0X2FkZF9kYXRhX2Z1bmMoIi93ZWJraXQvbWltZS9yZW1vdGUtUERGIiwgInBk
ZiIsIHRlc3RSZW1vdGVNaW1lVHlwZSk7CisgICAgZ190ZXN0X2FkZF9kYXRhX2Z1bmMoIi93ZWJr
aXQvbWltZS9yZW1vdGUtSFRNTCIsICJodG1sIiwgdGVzdFJlbW90ZU1pbWVUeXBlKTsKKyAgICBn
X3Rlc3RfYWRkX2RhdGFfZnVuYygiL3dlYmtpdC9taW1lL3JlbW90ZS1URVhUIiwgInRleHQiLCB0
ZXN0UmVtb3RlTWltZVR5cGUpOworICAgIGdfdGVzdF9hZGRfZGF0YV9mdW5jKCIvd2Via2l0L21p
bWUvbG9jYWwtUERGIiwgInBkZiIsIHRlc3RMb2NhbE1pbWVUeXBlKTsKKyAgICBnX3Rlc3RfYWRk
X2RhdGFfZnVuYygiL3dlYmtpdC9taW1lL2xvY2FsLUhUTUwiLCAiaHRtbCIsIHRlc3RMb2NhbE1p
bWVUeXBlKTsKKyAgICBnX3Rlc3RfYWRkX2RhdGFfZnVuYygiL3dlYmtpdC9taW1lL2xvY2FsLVRF
WFQiLCAidGV4dCIsIHRlc3RMb2NhbE1pbWVUeXBlKTsKKworICAgIHJldHVybiBnX3Rlc3RfcnVu
KCk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90
ZXN0bmV0d29ya3JlcXVlc3QuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3Rr
L3Rlc3RuZXR3b3JrcmVxdWVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjFiMmM5MGYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdEd0ay90ZXN0bmV0d29ya3JlcXVlc3QuYwpAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IEd1c3Rhdm8gTm9yb25oYSBTaWx2YQorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxnbGli
Lmg+CisjaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5j
bHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgorCitzdGF0aWMgdm9p
ZCB0ZXN0X25ldHdvcmtfcmVxdWVzdF9jcmVhdGVfZGVzdHJveSgpCit7CisgICAgV2ViS2l0TmV0
d29ya1JlcXVlc3QqIHJlcXVlc3Q7CisgICAgU291cE1lc3NhZ2UqIG1lc3NhZ2U7CisKKyAgICAv
KiBUZXN0IGNyZWF0aW9uIHdpdGggVVJJICovCisgICAgcmVxdWVzdCA9IFdFQktJVF9ORVRXT1JL
X1JFUVVFU1QoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX05FVFdPUktfUkVRVUVTVCwgInVyaSIs
ICJodHRwOi8vZGViaWFuLm9yZy8iLCBOVUxMKSk7CisgICAgZ19hc3NlcnQoV0VCS0lUX0lTX05F
VFdPUktfUkVRVUVTVChyZXF1ZXN0KSk7CisgICAgbWVzc2FnZSA9IHdlYmtpdF9uZXR3b3JrX3Jl
cXVlc3RfZ2V0X21lc3NhZ2UocmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIW1lc3NhZ2UpOworICAg
IGdfb2JqZWN0X3VucmVmKHJlcXVlc3QpOworCisgICAgLyogVGVzdCBjcmVhdGlvbiB3aXRoIFNv
dXBNZXNzYWdlICovCisgICAgbWVzc2FnZSA9IHNvdXBfbWVzc2FnZV9uZXcoIkdFVCIsICJodHRw
Oi8vZGViaWFuLm9yZy8iKTsKKyAgICByZXF1ZXN0ID0gV0VCS0lUX05FVFdPUktfUkVRVUVTVChn
X29iamVjdF9uZXcoV0VCS0lUX1RZUEVfTkVUV09SS19SRVFVRVNULCAibWVzc2FnZSIsIG1lc3Nh
Z2UsIE5VTEwpKTsKKyAgICBnX2Fzc2VydChXRUJLSVRfSVNfTkVUV09SS19SRVFVRVNUKHJlcXVl
c3QpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QobWVzc2FnZSktPnJlZl9jb3VudCwg
PT0sIDIpOworICAgIGdfb2JqZWN0X3VucmVmKHJlcXVlc3QpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChHX09CSkVDVChtZXNzYWdlKS0+cmVmX2NvdW50LCA9PSwgMSk7CisgICAgZ19vYmplY3RfdW5y
ZWYobWVzc2FnZSk7CisKKyAgICAvKiBUZXN0IGNyZWF0aW9uIHdpdGggYm90aCBTb3VwTWVzc2Fn
ZSBhbmQgVVJJICovCisgICAgbWVzc2FnZSA9IHNvdXBfbWVzc2FnZV9uZXcoIkdFVCIsICJodHRw
Oi8vZGViaWFuLm9yZy8iKTsKKyAgICByZXF1ZXN0ID0gV0VCS0lUX05FVFdPUktfUkVRVUVTVChn
X29iamVjdF9uZXcoV0VCS0lUX1RZUEVfTkVUV09SS19SRVFVRVNULCAibWVzc2FnZSIsIG1lc3Nh
Z2UsICJ1cmkiLCAiaHR0cDovL2dub21lLm9yZy8iLCBOVUxMKSk7CisgICAgZ19hc3NlcnQoV0VC
S0lUX0lTX05FVFdPUktfUkVRVUVTVChyZXF1ZXN0KSk7CisgICAgZ19hc3NlcnRfY21waW50KEdf
T0JKRUNUKG1lc3NhZ2UpLT5yZWZfY291bnQsID09LCAyKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIo
d2Via2l0X25ldHdvcmtfcmVxdWVzdF9nZXRfdXJpKHJlcXVlc3QpLCA9PSwgImh0dHA6Ly9nbm9t
ZS5vcmcvIik7CisgICAgZ19vYmplY3RfdW5yZWYocmVxdWVzdCk7CisgICAgZ19hc3NlcnRfY21w
aW50KEdfT0JKRUNUKG1lc3NhZ2UpLT5yZWZfY291bnQsID09LCAxKTsKKyAgICBnX29iamVjdF91
bnJlZihtZXNzYWdlKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9uZXR3b3JrX3JlcXVlc3RfcHJv
cGVydGllcygpCit7CisgICAgV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3Q7CisgICAgU291
cE1lc3NhZ2UqIG1lc3NhZ2U7CisgICAgZ2NoYXIqIHNvdXBVUkk7CisKKyAgICAvKiBUZXN0IFVS
SSBpcyBzZXQgY29ycmVjdGx5IHdoZW4gY3JlYXRpbmcgd2l0aCBVUkkgKi8KKyAgICByZXF1ZXN0
ID0gd2Via2l0X25ldHdvcmtfcmVxdWVzdF9uZXcoImh0dHA6Ly9kZWJpYW4ub3JnLyIpOworICAg
IGdfYXNzZXJ0KFdFQktJVF9JU19ORVRXT1JLX1JFUVVFU1QocmVxdWVzdCkpOworICAgIGdfYXNz
ZXJ0X2NtcHN0cih3ZWJraXRfbmV0d29ya19yZXF1ZXN0X2dldF91cmkocmVxdWVzdCksID09LCAi
aHR0cDovL2RlYmlhbi5vcmcvIik7CisgICAgZ19vYmplY3RfdW5yZWYocmVxdWVzdCk7CisKKyAg
ICAvKiBUZXN0IFVSSSBpcyBzZXQgY29ycmVjdGx5IHdoZW4gY3JlYXRpbmcgd2l0aCBNZXNzYWdl
ICovCisgICAgbWVzc2FnZSA9IHNvdXBfbWVzc2FnZV9uZXcoIkdFVCIsICJodHRwOi8vZGViaWFu
Lm9yZy8iKTsKKyAgICByZXF1ZXN0ID0gV0VCS0lUX05FVFdPUktfUkVRVUVTVChnX29iamVjdF9u
ZXcoV0VCS0lUX1RZUEVfTkVUV09SS19SRVFVRVNULCAibWVzc2FnZSIsIG1lc3NhZ2UsIE5VTEwp
KTsKKyAgICBnX2Fzc2VydChXRUJLSVRfSVNfTkVUV09SS19SRVFVRVNUKHJlcXVlc3QpKTsKKyAg
ICBnX29iamVjdF91bnJlZihtZXNzYWdlKTsKKworICAgIG1lc3NhZ2UgPSB3ZWJraXRfbmV0d29y
a19yZXF1ZXN0X2dldF9tZXNzYWdlKHJlcXVlc3QpOworICAgIHNvdXBVUkkgPSBzb3VwX3VyaV90
b19zdHJpbmcoc291cF9tZXNzYWdlX2dldF91cmkobWVzc2FnZSksIEZBTFNFKTsKKyAgICBnX2Fz
c2VydF9jbXBzdHIoc291cFVSSSwgPT0sICJodHRwOi8vZGViaWFuLm9yZy8iKTsKKyAgICBnX2Zy
ZWUoc291cFVSSSk7CisKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X25ldHdvcmtfcmVxdWVz
dF9nZXRfdXJpKHJlcXVlc3QpLCA9PSwgImh0dHA6Ly9kZWJpYW4ub3JnLyIpOworICAgIGdfb2Jq
ZWN0X3VucmVmKHJlcXVlc3QpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3Yp
Cit7CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAgZ190ZXN0
X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYWRkX2Z1
bmMoIi93ZWJraXQvbmV0d29ya3JlcXVlc3QvY3JlYXRlZGVzdHJveSIsIHRlc3RfbmV0d29ya19y
ZXF1ZXN0X2NyZWF0ZV9kZXN0cm95KTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvbmV0
d29ya3JlcXVlc3QvcHJvcGVydGllcyIsIHRlc3RfbmV0d29ya19yZXF1ZXN0X3Byb3BlcnRpZXMp
OworICAgIHJldHVybiBnX3Rlc3RfcnVuICgpOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdG5ldHdvcmtyZXNwb25zZS5jIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdG5ldHdvcmtyZXNwb25zZS5jCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4MDZhYTEKLS0tIC9kZXYvbnVsbAorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0bmV0d29ya3Jlc3BvbnNlLmMK
QEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHdXN0YXZvIE5vcm9u
aGEgU2lsdmEKKyAqIENvcHlyaWdodCAoQykgMjAwOSBDb2xsYWJvcmEgTHRkLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNs
dWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KKyNpbmNsdWRlIDxndGsvZ3Rr
Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgorCitz
dGF0aWMgdm9pZCB0ZXN0X25ldHdvcmtfcmVzcG9uc2VfY3JlYXRlX2Rlc3Ryb3koKQoreworICAg
IFdlYktpdE5ldHdvcmtSZXNwb25zZSogcmVzcG9uc2U7CisgICAgU291cE1lc3NhZ2UqIG1lc3Nh
Z2U7CisKKyAgICAvKiBUZXN0IGNyZWF0aW9uIHdpdGggVVJJICovCisgICAgcmVzcG9uc2UgPSBX
RUJLSVRfTkVUV09SS19SRVNQT05TRShnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfTkVUV09SS19S
RVNQT05TRSwgInVyaSIsICJodHRwOi8vZGViaWFuLm9yZy8iLCBOVUxMKSk7CisgICAgZ19hc3Nl
cnQoV0VCS0lUX0lTX05FVFdPUktfUkVTUE9OU0UocmVzcG9uc2UpKTsKKyAgICBtZXNzYWdlID0g
d2Via2l0X25ldHdvcmtfcmVzcG9uc2VfZ2V0X21lc3NhZ2UocmVzcG9uc2UpOworICAgIGdfYXNz
ZXJ0KCFtZXNzYWdlKTsKKyAgICBnX29iamVjdF91bnJlZihyZXNwb25zZSk7CisKKyAgICAvKiBU
ZXN0IGNyZWF0aW9uIHdpdGggU291cE1lc3NhZ2UgKi8KKyAgICBtZXNzYWdlID0gc291cF9tZXNz
YWdlX25ldygiR0VUIiwgImh0dHA6Ly9kZWJpYW4ub3JnLyIpOworICAgIHJlc3BvbnNlID0gV0VC
S0lUX05FVFdPUktfUkVTUE9OU0UoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX05FVFdPUktfUkVT
UE9OU0UsICJtZXNzYWdlIiwgbWVzc2FnZSwgTlVMTCkpOworICAgIGdfYXNzZXJ0KFdFQktJVF9J
U19ORVRXT1JLX1JFU1BPTlNFKHJlc3BvbnNlKSk7CisgICAgZ19hc3NlcnRfY21waW50KEdfT0JK
RUNUKG1lc3NhZ2UpLT5yZWZfY291bnQsID09LCAyKTsKKyAgICBnX29iamVjdF91bnJlZihyZXNw
b25zZSk7CisgICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKG1lc3NhZ2UpLT5yZWZfY291bnQs
ID09LCAxKTsKKyAgICBnX29iamVjdF91bnJlZihtZXNzYWdlKTsKKworICAgIC8qIFRlc3QgY3Jl
YXRpb24gd2l0aCBib3RoIFNvdXBNZXNzYWdlIGFuZCBVUkkgKi8KKyAgICBtZXNzYWdlID0gc291
cF9tZXNzYWdlX25ldygiR0VUIiwgImh0dHA6Ly9kZWJpYW4ub3JnLyIpOworICAgIHJlc3BvbnNl
ID0gV0VCS0lUX05FVFdPUktfUkVTUE9OU0UoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX05FVFdP
UktfUkVTUE9OU0UsICJtZXNzYWdlIiwgbWVzc2FnZSwgInVyaSIsICJodHRwOi8vZ25vbWUub3Jn
LyIsIE5VTEwpKTsKKyAgICBnX2Fzc2VydChXRUJLSVRfSVNfTkVUV09SS19SRVNQT05TRShyZXNw
b25zZSkpOworICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChtZXNzYWdlKS0+cmVmX2NvdW50
LCA9PSwgMik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9uZXR3b3JrX3Jlc3BvbnNlX2dl
dF91cmkocmVzcG9uc2UpLCA9PSwgImh0dHA6Ly9nbm9tZS5vcmcvIik7CisgICAgZ19vYmplY3Rf
dW5yZWYocmVzcG9uc2UpOworICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChtZXNzYWdlKS0+
cmVmX2NvdW50LCA9PSwgMSk7CisgICAgZ19vYmplY3RfdW5yZWYobWVzc2FnZSk7Cit9CisKK3N0
YXRpYyB2b2lkIHRlc3RfbmV0d29ya19yZXNwb25zZV9wcm9wZXJ0aWVzKCkKK3sKKyAgICBXZWJL
aXROZXR3b3JrUmVzcG9uc2UqIHJlc3BvbnNlOworICAgIFNvdXBNZXNzYWdlKiBtZXNzYWdlOwor
ICAgIGdjaGFyKiBzb3VwVVJJOworCisgICAgLyogVGVzdCBVUkkgaXMgc2V0IGNvcnJlY3RseSB3
aGVuIGNyZWF0aW5nIHdpdGggVVJJICovCisgICAgcmVzcG9uc2UgPSB3ZWJraXRfbmV0d29ya19y
ZXNwb25zZV9uZXcoImh0dHA6Ly9kZWJpYW4ub3JnLyIpOworICAgIGdfYXNzZXJ0KFdFQktJVF9J
U19ORVRXT1JLX1JFU1BPTlNFKHJlc3BvbnNlKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtp
dF9uZXR3b3JrX3Jlc3BvbnNlX2dldF91cmkocmVzcG9uc2UpLCA9PSwgImh0dHA6Ly9kZWJpYW4u
b3JnLyIpOworICAgIGdfb2JqZWN0X3VucmVmKHJlc3BvbnNlKTsKKworICAgIC8qIFRlc3QgVVJJ
IGlzIHNldCBjb3JyZWN0bHkgd2hlbiBjcmVhdGluZyB3aXRoIE1lc3NhZ2UgKi8KKyAgICBtZXNz
YWdlID0gc291cF9tZXNzYWdlX25ldygiR0VUIiwgImh0dHA6Ly9kZWJpYW4ub3JnLyIpOworICAg
IHJlc3BvbnNlID0gV0VCS0lUX05FVFdPUktfUkVTUE9OU0UoZ19vYmplY3RfbmV3KFdFQktJVF9U
WVBFX05FVFdPUktfUkVTUE9OU0UsICJtZXNzYWdlIiwgbWVzc2FnZSwgTlVMTCkpOworICAgIGdf
YXNzZXJ0KFdFQktJVF9JU19ORVRXT1JLX1JFU1BPTlNFKHJlc3BvbnNlKSk7CisgICAgZ19vYmpl
Y3RfdW5yZWYobWVzc2FnZSk7CisKKyAgICBtZXNzYWdlID0gd2Via2l0X25ldHdvcmtfcmVzcG9u
c2VfZ2V0X21lc3NhZ2UocmVzcG9uc2UpOworICAgIHNvdXBVUkkgPSBzb3VwX3VyaV90b19zdHJp
bmcoc291cF9tZXNzYWdlX2dldF91cmkobWVzc2FnZSksIEZBTFNFKTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIoc291cFVSSSwgPT0sICJodHRwOi8vZGViaWFuLm9yZy8iKTsKKyAgICBnX2ZyZWUoc291
cFVSSSk7CisKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X25ldHdvcmtfcmVzcG9uc2VfZ2V0
X3VyaShyZXNwb25zZSksID09LCAiaHR0cDovL2RlYmlhbi5vcmcvIik7CisgICAgZ19vYmplY3Rf
dW5yZWYocmVzcG9uc2UpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7
CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAgZ190ZXN0X2J1
Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMo
Ii93ZWJraXQvbmV0d29ya3Jlc3BvbnNlL2NyZWF0ZWRlc3Ryb3kiLCB0ZXN0X25ldHdvcmtfcmVz
cG9uc2VfY3JlYXRlX2Rlc3Ryb3kpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9uZXR3
b3JrcmVzcG9uc2UvcHJvcGVydGllcyIsIHRlc3RfbmV0d29ya19yZXNwb25zZV9wcm9wZXJ0aWVz
KTsKKyAgICByZXR1cm4gZ190ZXN0X3J1biAoKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJiYWNrZm9yd2FyZGxpc3QuYyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJiYWNrZm9yd2FyZGxpc3QuYwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzgyZDQwCi0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYmJhY2tmb3J3
YXJkbGlzdC5jCkBAIC0wLDAgKzEsMzI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEhv
bGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxn
bGliLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4K
Kworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9saWZldGltZSh2b2lk
KQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXc7CisgICAgV2ViS2l0V2ViQmFja0Zvcndh
cmRMaXN0KiBiYWNrRm9yd2FyZExpc3Q7CisgICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGN1cnJl
bnRJdGVtOworICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBmb3J3YXJkSXRlbTsKKyAgICBXZWJL
aXRXZWJIaXN0b3J5SXRlbSogYmFja0l0ZW07CisgICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIG50
aEl0ZW07CisgICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGl0ZW0xOworICAgIFdlYktpdFdlYkhp
c3RvcnlJdGVtKiBpdGVtMjsKKyAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogaXRlbTM7CisgICAg
V2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGl0ZW00OworICAgIEdMaXN0KiBiYWNrTGlzdCA9IE5VTEw7
CisgICAgR0xpc3QqIGZvcndhcmRMaXN0ID0gTlVMTDsKKyAgICBnX3Rlc3RfYnVnKCIxOTg5OCIp
OworCisgICAgd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkp
OworICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOworICAgIGJhY2tGb3J3YXJkTGlzdCA9
IHdlYmtpdF93ZWJfdmlld19nZXRfYmFja19mb3J3YXJkX2xpc3Qod2ViVmlldyk7CisgICAgZ19h
c3NlcnRfY21waW50KEdfT0JKRUNUKGJhY2tGb3J3YXJkTGlzdCktPnJlZl9jb3VudCwgPT0sIDEp
OworCisgICAgLyogYWRkIHRlc3QgaXRlbXMgKi8KKyAgICBpdGVtMSA9IHdlYmtpdF93ZWJfaGlz
dG9yeV9pdGVtX25ld193aXRoX2RhdGEoImh0dHA6Ly9leGFtcGxlLmNvbS8xLyIsICJTaXRlIDEi
KTsKKyAgICB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2FkZF9pdGVtKGJhY2tGb3J3YXJk
TGlzdCwgaXRlbTEpOworICAgIGdfb2JqZWN0X3VucmVmKGl0ZW0xKTsKKworICAgIGl0ZW0yID0g
d2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dpdGhfZGF0YSgiaHR0cDovL2V4YW1wbGUuY29t
LzIvIiwgIlNpdGUgMiIpOworICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfYWRkX2l0
ZW0oYmFja0ZvcndhcmRMaXN0LCBpdGVtMik7CisgICAgZ19vYmplY3RfdW5yZWYoaXRlbTIpOwor
CisgICAgaXRlbTMgPSB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9uZXdfd2l0aF9kYXRhKCJodHRw
Oi8vZXhhbXBsZS5jb20vMy8iLCAiU2l0ZSAzIik7CisgICAgd2Via2l0X3dlYl9iYWNrX2Zvcndh
cmRfbGlzdF9hZGRfaXRlbShiYWNrRm9yd2FyZExpc3QsIGl0ZW0zKTsKKyAgICBnX29iamVjdF91
bnJlZihpdGVtMyk7CisKKyAgICBpdGVtNCA9IHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX25ld193
aXRoX2RhdGEoImh0dHA6Ly9leGFtcGxlLmNvbS80LyIsICJTaXRlIDQiKTsKKyAgICB3ZWJraXRf
d2ViX2JhY2tfZm9yd2FyZF9saXN0X2FkZF9pdGVtKGJhY2tGb3J3YXJkTGlzdCwgaXRlbTQpOwor
ICAgIGdfb2JqZWN0X3VucmVmKGl0ZW00KTsKKworICAgIC8qIG1ha2Ugc3VyZSB0aGVzZSBmdW5j
dGlvbnMgZG9uJ3QgYWRkIHVubmVjZXNzYXJ5IHJlZiB0byB0aGUgaGlzdG9yeSBpdGVtICovCisg
ICAgYmFja0l0ZW0gPSB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2l0ZW0o
YmFja0ZvcndhcmRMaXN0KTsKKyAgICBnX29iamVjdF9yZWYoYmFja0l0ZW0pOworICAgIGdfYXNz
ZXJ0X2NtcGludChHX09CSkVDVChiYWNrSXRlbSktPnJlZl9jb3VudCwgPT0sIDIpOworICAgIGdf
b2JqZWN0X3VucmVmKGJhY2tJdGVtKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoYmFj
a0l0ZW0pLT5yZWZfY291bnQsID09LCAxKTsKKworICAgIGN1cnJlbnRJdGVtID0gd2Via2l0X3dl
Yl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKGJhY2tGb3J3YXJkTGlzdCk7Cisg
ICAgZ19vYmplY3RfcmVmKGN1cnJlbnRJdGVtKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpF
Q1QoY3VycmVudEl0ZW0pLT5yZWZfY291bnQsID09LCAyKTsKKyAgICBnX29iamVjdF91bnJlZihj
dXJyZW50SXRlbSk7CisgICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKGN1cnJlbnRJdGVtKS0+
cmVmX2NvdW50LCA9PSwgMSk7CisKKyAgICB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dv
X3RvX2l0ZW0oYmFja0ZvcndhcmRMaXN0LCBpdGVtMik7CisgICAgZm9yd2FyZEl0ZW0gPSB3ZWJr
aXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2l0ZW0oYmFja0ZvcndhcmRMaXN0
KTsKKyAgICBnX29iamVjdF9yZWYoZm9yd2FyZEl0ZW0pOworICAgIGdfYXNzZXJ0X2NtcGludChH
X09CSkVDVChmb3J3YXJkSXRlbSktPnJlZl9jb3VudCwgPT0sIDIpOworICAgIGdfb2JqZWN0X3Vu
cmVmKGZvcndhcmRJdGVtKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoZm9yd2FyZEl0
ZW0pLT5yZWZfY291bnQsID09LCAxKTsKKworICAgIG50aEl0ZW0gPSB3ZWJraXRfd2ViX2JhY2tf
Zm9yd2FyZF9saXN0X2dldF9udGhfaXRlbShiYWNrRm9yd2FyZExpc3QsIDEpOworICAgIGdfb2Jq
ZWN0X3JlZihudGhJdGVtKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QobnRoSXRlbSkt
PnJlZl9jb3VudCwgPT0sIDIpOworICAgIGdfb2JqZWN0X3VucmVmKG50aEl0ZW0pOworICAgIGdf
YXNzZXJ0X2NtcGludChHX09CSkVDVChudGhJdGVtKS0+cmVmX2NvdW50LCA9PSwgMSk7CisKKyAg
ICBiYWNrTGlzdCA9IHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGlzdF93
aXRoX2xpbWl0KGJhY2tGb3J3YXJkTGlzdCwgNSk7CisgICAgZm9yICg7IGJhY2tMaXN0OyBiYWNr
TGlzdCA9IGJhY2tMaXN0LT5uZXh0KQorICAgICAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1Qo
YmFja0xpc3QtPmRhdGEpLT5yZWZfY291bnQsID09LCAxKTsKKworICAgIGZvcndhcmRMaXN0ID0g
d2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0X3dpdGhfbGltaXQo
YmFja0ZvcndhcmRMaXN0LCA1KTsKKyAgICBmb3IgKDsgZm9yd2FyZExpc3Q7IGZvcndhcmRMaXN0
ID0gZm9yd2FyZExpc3QtPm5leHQpCisgICAgICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChm
b3J3YXJkTGlzdC0+ZGF0YSktPnJlZl9jb3VudCwgPT0sIDEpOworCisgICAgZ19saXN0X2ZyZWUo
Zm9yd2FyZExpc3QpOworICAgIGdfbGlzdF9mcmVlKGJhY2tMaXN0KTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoR19PQkpFQ1QoaXRlbTEpLT5yZWZfY291bnQsID09LCAxKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoR19PQkpFQ1QoaXRlbTIpLT5yZWZfY291bnQsID09LCAxKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoR19PQkpFQ1QoaXRlbTMpLT5yZWZfY291bnQsID09LCAxKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoR19PQkpFQ1QoaXRlbTQpLT5yZWZfY291bnQsID09LCAxKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoR19PQkpFQ1QoYmFja0ZvcndhcmRMaXN0KS0+cmVmX2NvdW50LCA9PSwgMSk7CisgICAg
Z19vYmplY3RfdW5yZWYod2ViVmlldyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dl
Yl9iYWNrX2ZvcndhcmRfbGlzdF9vcmRlcih2b2lkKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdl
YlZpZXc7CisgICAgV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJCYWNrRm9yd2FyZExpc3Q7
CisgICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGl0ZW0xOworICAgIFdlYktpdFdlYkhpc3RvcnlJ
dGVtKiBpdGVtMjsKKyAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogaXRlbTM7CisgICAgV2ViS2l0
V2ViSGlzdG9yeUl0ZW0qIGl0ZW00OworICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBjdXJyZW50
SXRlbTsKKyAgICBHTGlzdCogYmFja0xpc3QgPSBOVUxMOworICAgIEdMaXN0KiBmb3J3YXJkTGlz
dCA9IE5VTEw7CisgICAgZ190ZXN0X2J1ZygiMjI2OTQiKTsKKworICAgIHdlYlZpZXcgPSBXRUJL
SVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBnX29iamVjdF9yZWZfc2lu
ayh3ZWJWaWV3KTsKKworICAgIHdlYmtpdF93ZWJfdmlld19zZXRfbWFpbnRhaW5zX2JhY2tfZm9y
d2FyZF9saXN0KHdlYlZpZXcsIFRSVUUpOworICAgIHdlYkJhY2tGb3J3YXJkTGlzdCA9IHdlYmtp
dF93ZWJfdmlld19nZXRfYmFja19mb3J3YXJkX2xpc3Qod2ViVmlldyk7CisgICAgZ19hc3NlcnQo
d2ViQmFja0ZvcndhcmRMaXN0KTsKKworICAgIC8vIENoZWNrIHRoYXQgdGhlcmUgaXMgbm8gaXRl
bS4KKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVu
dF9pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCkpOworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRf
d2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xlbmd0aCh3ZWJCYWNrRm9yd2FyZExp
c3QpLCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJfYmFja19mb3J3YXJk
X2xpc3RfZ2V0X2JhY2tfbGVuZ3RoKHdlYkJhY2tGb3J3YXJkTGlzdCksID09LCAwKTsKKyAgICBn
X2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHdlYlZpZXcpKTsKKyAgICBn
X2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrKHdlYlZpZXcpKTsKKworICAgIC8v
IEFkZCBhIG5ldyBpdGVtcworICAgIGl0ZW0xID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3
X3dpdGhfZGF0YSgiaHR0cDovL2V4YW1wbGUuY29tLzEvIiwgIlNpdGUgMSIpOworICAgIHdlYmtp
dF93ZWJfYmFja19mb3J3YXJkX2xpc3RfYWRkX2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0LCBpdGVt
MSk7CisgICAgZ19vYmplY3RfdW5yZWYoaXRlbTEpOworICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJf
YmFja19mb3J3YXJkX2xpc3RfY29udGFpbnNfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QsIGl0ZW0x
KSk7CisKKyAgICBpdGVtMiA9IHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX25ld193aXRoX2RhdGEo
Imh0dHA6Ly9leGFtcGxlLmNvbS8yLyIsICJTaXRlIDIiKTsKKyAgICB3ZWJraXRfd2ViX2JhY2tf
Zm9yd2FyZF9saXN0X2FkZF9pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCwgaXRlbTIpOworICAgIGdf
b2JqZWN0X3VucmVmKGl0ZW0yKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2JhY2tfZm9yd2Fy
ZF9saXN0X2NvbnRhaW5zX2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0LCBpdGVtMikpOworCisgICAg
aXRlbTMgPSB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9uZXdfd2l0aF9kYXRhKCJodHRwOi8vZXhh
bXBsZS5jb20vMy8iLCAiU2l0ZSAzIik7CisgICAgd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlz
dF9hZGRfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QsIGl0ZW0zKTsKKyAgICBnX29iamVjdF91bnJl
ZihpdGVtMyk7CisgICAgZ19hc3NlcnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9jb250
YWluc19pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCwgaXRlbTMpKTsKKworICAgIGl0ZW00ID0gd2Vi
a2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dpdGhfZGF0YSgiaHR0cDovL2V4YW1wbGUuY29tLzQv
IiwgIlNpdGUgNCIpOworICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfYWRkX2l0ZW0o
d2ViQmFja0ZvcndhcmRMaXN0LCBpdGVtNCk7CisgICAgZ19vYmplY3RfdW5yZWYoaXRlbTQpOwor
ICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY29udGFpbnNfaXRlbSh3
ZWJCYWNrRm9yd2FyZExpc3QsIGl0ZW00KSk7CisKKyAgICAvLyBjaGVjayB0aGUgYmFjayBsaXN0
IG9yZGVyCisgICAgYmFja0xpc3QgPSB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9i
YWNrX2xpc3Rfd2l0aF9saW1pdCh3ZWJCYWNrRm9yd2FyZExpc3QsIDUpOworICAgIGdfYXNzZXJ0
KGJhY2tMaXN0KTsKKworICAgIGN1cnJlbnRJdGVtID0gV0VCS0lUX1dFQl9ISVNUT1JZX0lURU0o
YmFja0xpc3QtPmRhdGEpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3Rvcnlf
aXRlbV9nZXRfdXJpKGN1cnJlbnRJdGVtKSwgPT0sICJodHRwOi8vZXhhbXBsZS5jb20vMy8iKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3RpdGxlKGN1
cnJlbnRJdGVtKSwgPT0sICJTaXRlIDMiKTsKKyAgICBiYWNrTGlzdCA9IGJhY2tMaXN0LT5uZXh0
OworCisgICAgY3VycmVudEl0ZW0gPSBXRUJLSVRfV0VCX0hJU1RPUllfSVRFTShiYWNrTGlzdC0+
ZGF0YSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF91
cmkoY3VycmVudEl0ZW0pLCA9PSwgImh0dHA6Ly9leGFtcGxlLmNvbS8yLyIpOworICAgIGdfYXNz
ZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdGl0bGUoY3VycmVudEl0ZW0p
LCA9PSwgIlNpdGUgMiIpOworICAgIGJhY2tMaXN0ID0gYmFja0xpc3QtPm5leHQ7CisKKyAgICBj
dXJyZW50SXRlbSA9IFdFQktJVF9XRUJfSElTVE9SWV9JVEVNKGJhY2tMaXN0LT5kYXRhKTsKKyAg
ICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3VyaShjdXJyZW50
SXRlbSksID09LCAiaHR0cDovL2V4YW1wbGUuY29tLzEvIik7CisgICAgZ19hc3NlcnRfY21wc3Ry
KHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF90aXRsZShjdXJyZW50SXRlbSksID09LCAiU2l0
ZSAxIik7CisgICAgZ19saXN0X2ZyZWUoYmFja0xpc3QpOworCisgICAgLy8gY2hlY2sgdGhlIGZv
cndhcmQgbGlzdCBvcmRlcgorICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19nb190b19iYWNr
X2ZvcndhcmRfaXRlbSh3ZWJWaWV3LCBpdGVtMSkpOworICAgIGZvcndhcmRMaXN0ID0gd2Via2l0
X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0X3dpdGhfbGltaXQod2ViQmFj
a0ZvcndhcmRMaXN0LDUpOworICAgIGdfYXNzZXJ0KGZvcndhcmRMaXN0KTsKKworICAgIGN1cnJl
bnRJdGVtID0gV0VCS0lUX1dFQl9ISVNUT1JZX0lURU0oZm9yd2FyZExpc3QtPmRhdGEpOworICAg
IGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdXJpKGN1cnJlbnRJ
dGVtKSwgPT0sICJodHRwOi8vZXhhbXBsZS5jb20vNC8iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIo
d2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3RpdGxlKGN1cnJlbnRJdGVtKSwgPT0sICJTaXRl
IDQiKTsKKyAgICBmb3J3YXJkTGlzdCA9IGZvcndhcmRMaXN0LT5uZXh0OworCisgICAgY3VycmVu
dEl0ZW0gPSBXRUJLSVRfV0VCX0hJU1RPUllfSVRFTShmb3J3YXJkTGlzdC0+ZGF0YSk7CisgICAg
Z19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF91cmkoY3VycmVudEl0
ZW0pLCA9PSwgImh0dHA6Ly9leGFtcGxlLmNvbS8zLyIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3
ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdGl0bGUoY3VycmVudEl0ZW0pLCA9PSwgIlNpdGUg
MyIpOworICAgIGZvcndhcmRMaXN0ID0gZm9yd2FyZExpc3QtPm5leHQ7CisKKyAgICBjdXJyZW50
SXRlbSA9IFdFQktJVF9XRUJfSElTVE9SWV9JVEVNKGZvcndhcmRMaXN0LT5kYXRhKTsKKyAgICBn
X2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3VyaShjdXJyZW50SXRl
bSksID09LCAiaHR0cDovL2V4YW1wbGUuY29tLzIvIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdl
YmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF90aXRsZShjdXJyZW50SXRlbSksID09LCAiU2l0ZSAy
Iik7CisKKyAgICBnX2xpc3RfZnJlZShmb3J3YXJkTGlzdCk7CisgICAgZ19vYmplY3RfdW5yZWYo
d2ViVmlldyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRf
bGlzdF9hZGRfaXRlbSh2b2lkKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXc7CisgICAg
V2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJCYWNrRm9yd2FyZExpc3Q7CisgICAgV2ViS2l0
V2ViSGlzdG9yeUl0ZW0qIGFkZEl0ZW0xOworICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBhZGRJ
dGVtMjsKKyAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogYmFja0l0ZW07CisgICAgV2ViS2l0V2Vi
SGlzdG9yeUl0ZW0qIGN1cnJlbnRJdGVtOworICAgIGdfdGVzdF9idWcoIjIyOTg4Iik7CisKKyAg
ICB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAg
Z19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X21h
aW50YWluc19iYWNrX2ZvcndhcmRfbGlzdCh3ZWJWaWV3LCBUUlVFKTsKKyAgICB3ZWJCYWNrRm9y
d2FyZExpc3QgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2JhY2tfZm9yd2FyZF9saXN0KHdlYlZpZXcp
OworICAgIGdfYXNzZXJ0KHdlYkJhY2tGb3J3YXJkTGlzdCk7CisKKyAgICAvLyBDaGVjayB0aGF0
IHRoZXJlIGlzIG5vIGl0ZW0uCisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfYmFja19mb3J3YXJk
X2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QpKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9sZW5ndGgo
d2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDApOworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRf
d2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xlbmd0aCh3ZWJCYWNrRm9yd2FyZExpc3Qp
LCA9PSwgMCk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh3
ZWJWaWV3KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayh3ZWJW
aWV3KSk7CisKKyAgICAvLyBBZGQgYSBuZXcgaXRlbQorICAgIGFkZEl0ZW0xID0gd2Via2l0X3dl
Yl9oaXN0b3J5X2l0ZW1fbmV3X3dpdGhfZGF0YSgiaHR0cDovL2V4YW1wbGUuY29tLyIsICJBZGRl
ZCBzaXRlIik7CisgICAgd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9hZGRfaXRlbSh3ZWJC
YWNrRm9yd2FyZExpc3QsIGFkZEl0ZW0xKTsKKyAgICBnX29iamVjdF91bnJlZihhZGRJdGVtMSk7
CisgICAgZ19hc3NlcnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9jb250YWluc19pdGVt
KHdlYkJhY2tGb3J3YXJkTGlzdCwgYWRkSXRlbTEpKTsKKworICAgIC8vIENoZWNrIHRoYXQgdGhl
IGFkZGVkIGl0ZW0gaXMgdGhlIGN1cnJlbnQgaXRlbS4KKyAgICBjdXJyZW50SXRlbSA9IHdlYmtp
dF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh3ZWJCYWNrRm9yd2FyZExp
c3QpOworICAgIGdfYXNzZXJ0KGN1cnJlbnRJdGVtKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Vi
a2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9sZW5ndGgod2ViQmFja0Zvcndh
cmRMaXN0KSwgPT0sIDApOworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2ViX2JhY2tfZm9y
d2FyZF9saXN0X2dldF9iYWNrX2xlbmd0aCh3ZWJCYWNrRm9yd2FyZExpc3QpLCA9PSwgMCk7Cisg
ICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh3ZWJWaWV3KSk7Cisg
ICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayh3ZWJWaWV3KSk7CisgICAg
Z19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF91cmkoY3VycmVudEl0
ZW0pLCA9PSwgImh0dHA6Ly9leGFtcGxlLmNvbS8iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Vi
a2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3RpdGxlKGN1cnJlbnRJdGVtKSwgPT0sICJBZGRlZCBz
aXRlIik7CisKKyAgICAvLyBBZGQgYW5vdGhlciBpdGVtLgorICAgIGFkZEl0ZW0yID0gd2Via2l0
X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dpdGhfZGF0YSgiaHR0cDovL2V4YW1wbGUuY29tLzIvIiwg
IkFkZGVkIHNpdGUgMiIpOworICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfYWRkX2l0
ZW0od2ViQmFja0ZvcndhcmRMaXN0LCBhZGRJdGVtMik7CisgICAgZ19vYmplY3RfdW5yZWYoYWRk
SXRlbTIpOworICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY29udGFp
bnNfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QsIGFkZEl0ZW0yKSk7CisKKyAgICAvLyBDaGVjayB0
aGF0IHRoZSBhZGRlZCBpdGVtIGlzIG5ldyBjdXJyZW50IGl0ZW0uCisgICAgY3VycmVudEl0ZW0g
PSB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0od2ViQmFja0Zv
cndhcmRMaXN0KTsKKyAgICBnX2Fzc2VydChjdXJyZW50SXRlbSk7CisgICAgZ19hc3NlcnRfY21w
aW50KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGVuZ3RoKHdlYkJh
Y2tGb3J3YXJkTGlzdCksID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9i
YWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0s
IDEpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQod2ViVmll
dykpOworICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayh3ZWJWaWV3KSk7
CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF91cmkoY3Vy
cmVudEl0ZW0pLCA9PSwgImh0dHA6Ly9leGFtcGxlLmNvbS8yLyIpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdGl0bGUoY3VycmVudEl0ZW0pLCA9PSwg
IkFkZGVkIHNpdGUgMiIpOworCisgICAgYmFja0l0ZW0gPSB3ZWJraXRfd2ViX2JhY2tfZm9yd2Fy
ZF9saXN0X2dldF9iYWNrX2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0KTsKKyAgICBnX2Fzc2VydChi
YWNrSXRlbSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dl
dF91cmkoYmFja0l0ZW0pLCA9PSwgImh0dHA6Ly9leGFtcGxlLmNvbS8iKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3RpdGxlKGJhY2tJdGVtKSwgPT0s
ICJBZGRlZCBzaXRlIik7CisKKyAgICAvLyBHbyB0byB0aGUgZmlyc3QgYWRkZWQgaXRlbS4KKyAg
ICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ29fdG9fYmFja19mb3J3YXJkX2l0ZW0od2ViVmll
dywgYWRkSXRlbTEpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2Zvcndh
cmRfbGlzdF9nZXRfZm9yd2FyZF9sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDEpOwor
ICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNr
X2xlbmd0aCh3ZWJCYWNrRm9yd2FyZExpc3QpLCA9PSwgMCk7CisgICAgZ19hc3NlcnQod2Via2l0
X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHdlYlZpZXcpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0
X3dlYl92aWV3X2Nhbl9nb19iYWNrKHdlYlZpZXcpKTsKKworICAgIGdfb2JqZWN0X3VucmVmKHdl
YlZpZXcpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xp
c3RfY2xlYXIodm9pZCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OworICAgIFdlYktp
dFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViQmFja0ZvcndhcmRMaXN0OworICAgIFdlYktpdFdlYkhp
c3RvcnlJdGVtKiBhZGRJdGVtOworICAgIGdfdGVzdF9idWcoIjM2MTczIik7CisKKyAgICB3ZWJW
aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmpl
Y3RfcmVmX3Npbmsod2ViVmlldyk7CisKKyAgICB3ZWJCYWNrRm9yd2FyZExpc3QgPSB3ZWJraXRf
d2ViX3ZpZXdfZ2V0X2JhY2tfZm9yd2FyZF9saXN0KHdlYlZpZXcpOworICAgIGdfYXNzZXJ0KHdl
YkJhY2tGb3J3YXJkTGlzdCk7CisKKyAgICAvLyBDaGVjayB0aGF0IHRoZXJlIGlzIG5vIGl0ZW0u
CisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2Zv
cndhcmRfbGVuZ3RoKHdlYkJhY2tGb3J3YXJkTGlzdCksID09LCAwKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19sZW5ndGgod2ViQmFj
a0ZvcndhcmRMaXN0KSwgPT0sIDApOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX2JhY2tfZm9y
d2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0KSk7CisgICAgZ19h
c3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh3ZWJWaWV3KSk7CisgICAgZ19h
c3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayh3ZWJWaWV3KSk7CisKKyAgICAvLyBD
aGVjayB0aGF0IGNsZWFyaW5nIHRoZSBlbXB0eSBsaXN0IGRvZXMgbm90IG1vZGlmeSBjb3VudGVy
cworICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY2xlYXIod2ViQmFja0ZvcndhcmRM
aXN0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9n
ZXRfZm9yd2FyZF9sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDApOworICAgIGdfYXNz
ZXJ0X2NtcGludCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xlbmd0aCh3
ZWJCYWNrRm9yd2FyZExpc3QpLCA9PSwgMCk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfYmFj
a19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QpKTsKKyAg
ICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHdlYlZpZXcpKTsKKyAg
ICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrKHdlYlZpZXcpKTsKKworICAg
IC8vIEFkZCBhIG5ldyBpdGVtCisgICAgYWRkSXRlbSA9IHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVt
X25ld193aXRoX2RhdGEoImh0dHA6Ly9leGFtcGxlLmNvbS8iLCAiQWRkZWQgc2l0ZSIpOworICAg
IHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfYWRkX2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0
LCBhZGRJdGVtKTsKKyAgICBnX29iamVjdF91bnJlZihhZGRJdGVtKTsKKyAgICBnX2Fzc2VydCh3
ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2NvbnRhaW5zX2l0ZW0od2ViQmFja0ZvcndhcmRM
aXN0LCBhZGRJdGVtKSk7CisKKyAgICAvLyBDaGVjayB0aGF0IGFmdGVyIGNsZWFyaW5nIHRoZSBs
aXN0IHRoZSBhZGRlZCBpdGVtIGlzIG5vIGxvbmdlciBpbiB0aGUgbGlzdAorICAgIHdlYmtpdF93
ZWJfYmFja19mb3J3YXJkX2xpc3RfY2xlYXIod2ViQmFja0ZvcndhcmRMaXN0KTsKKyAgICBnX2Fz
c2VydCghd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9jb250YWluc19pdGVtKHdlYkJhY2tG
b3J3YXJkTGlzdCwgYWRkSXRlbSkpOworCisgICAgLy8gQ2hlY2sgdGhhdCBhZnRlciBjbGVhcmlu
ZyBpdCwgdGhlIGxpc3QgaXMgZW1wdHkKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9i
YWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwg
PT0sIDApOworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0
X2dldF9iYWNrX2xlbmd0aCh3ZWJCYWNrRm9yd2FyZExpc3QpLCA9PSwgMCk7CisgICAgZ19hc3Nl
cnQoIXdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh3ZWJCYWNr
Rm9yd2FyZExpc3QpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3
YXJkKHdlYlZpZXcpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNr
KHdlYlZpZXcpKTsKKworICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOworfQorCitpbnQgbWFp
bihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFy
Z3YsIE5VTEwpOworCisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy8iKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2ViYmFja2ZvcndhcmRsaXN0L2Fk
ZF9pdGVtIiwgdGVzdF93ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2FkZF9pdGVtKTsKKyAg
ICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2ViYmFja2ZvcndhcmRsaXN0L2xpc3Rfb3JkZXIi
LCB0ZXN0X3dlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3Rfb3JkZXIpOworICAgIGdfdGVzdF9h
ZGRfZnVuYygiL3dlYmtpdC93ZWJoaXN0b3J5aXRlbS9saWZldGltZSIsIHRlc3Rfd2Via2l0X3dl
Yl9oaXN0b3J5X2l0ZW1fbGlmZXRpbWUpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93
ZWJiYWNrZm9yd2FyZGxpc3QvY2xlYXIiLCB0ZXN0X3dlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xp
c3RfY2xlYXIpOworICAgIHJldHVybiBnX3Rlc3RfcnVuICgpOworfQpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYmRhdGFzb3VyY2UuYyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJkYXRhc291cmNlLmMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU2NjI1NwotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJkYXRhc291cmNl
LmMKQEAgLTAsMCArMSwyNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIE1pY2hh
ZWwgQWxvbnpvCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVk
ZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKworc3RhdGljIGNvbnN0
IGdzaG9ydCBkZWZhdWx0VGltZW91dCA9IDEwOworZ3VpbnQgd2FpdFRpbWVyOworZ2Jvb2xlYW4g
c2hvdWxkV2FpdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXc7CisgICAgV2ViS2l0V2ViRnJhbWUqIG1haW5GcmFtZTsKK30gV2ViRGF0YVNvdXJjZUZpeHR1
cmU7CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfaW5pdGlh
bF9yZXF1ZXN0KCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB2aWV3OworICAgIFdlYktpdFdlYkZy
YW1lKiBmcmFtZTsKKyAgICBXZWJLaXRXZWJEYXRhU291cmNlKiBkYXRhU291cmNlOworICAgIFdl
YktpdE5ldHdvcmtSZXF1ZXN0KiBpbml0aWFsUmVxdWVzdDsKKworICAgIHZpZXcgPSBXRUJLSVRf
V0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBnX29iamVjdF9yZWZfc2luayh2
aWV3KTsKKyAgICBmcmFtZSA9IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh2aWV3KTsK
KworICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0ID0gd2Via2l0X25ldHdvcmtfcmVx
dWVzdF9uZXcoImh0dHA6Ly93d3cuZ29vZ2xlLmNvbSIpOworICAgIHdlYmtpdF93ZWJfZnJhbWVf
bG9hZF9yZXF1ZXN0KGZyYW1lLCByZXF1ZXN0KTsKKyAgICBnX29iamVjdF91bnJlZihyZXF1ZXN0
KTsKKworICAgIGRhdGFTb3VyY2UgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9wcm92aXNpb25hbF9k
YXRhX3NvdXJjZShmcmFtZSk7CisgICAgZ19hc3NlcnQoZGF0YVNvdXJjZSk7CisgICAgaW5pdGlh
bFJlcXVlc3QgPSB3ZWJraXRfd2ViX2RhdGFfc291cmNlX2dldF9pbml0aWFsX3JlcXVlc3QoZGF0
YVNvdXJjZSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfZ2V0
X3VyaShpbml0aWFsUmVxdWVzdCksID09LCAiaHR0cDovL3d3dy5nb29nbGUuY29tLyIpOworCisg
ICAgZ19vYmplY3RfdW5yZWYodmlldyk7Cit9CisKK3N0YXRpYyB2b2lkIG5vdGlmeV9sb2FkX3N0
YXR1c191bnJlYWNoYWJsZV9jYihXZWJLaXRXZWJWaWV3KiB2aWV3LCBHUGFyYW1TcGVjKiBwc3Bl
YywgR01haW5Mb29wKiBsb29wKQoreworICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Vi
a2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyAodmlldyk7CisgICAgV2ViS2l0V2ViRnJhbWUq
IGZyYW1lID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKHZpZXcpOworCisgICAgZ19h
c3NlcnQoc3RhdHVzICE9IFdFQktJVF9MT0FEX0ZJTklTSEVEKTsKKworICAgIGlmIChzdGF0dXMg
IT0gV0VCS0lUX0xPQURfRkFJTEVEKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJLaXRXZWJE
YXRhU291cmNlKiBkYXRhc291cmNlID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfZGF0YV9zb3VyY2Uo
ZnJhbWUpOworCisgICAgZ19hc3NlcnRfY21wc3RyKCJodHRwOi8vdGhpcy5ob3N0LmRvZXMubm90
LmV4aXN0L2RvaXJlYWxseWV4aXN0Lmh0bWwiLCA9PSwKKyAgICAgICAgICAgICAgICAgICAgd2Vi
a2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfdW5yZWFjaGFibGVfdXJpKGRhdGFzb3VyY2UpKTsKKwor
ICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIG5vdGlmeV9sb2Fk
X3N0YXR1c19jYihXZWJLaXRXZWJWaWV3KiB2aWV3LCBHUGFyYW1TcGVjKiBwc3BlYywgR01haW5M
b29wKiBsb29wKQoreworICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92
aWV3X2dldF9sb2FkX3N0YXR1cyAodmlldyk7CisgICAgV2ViS2l0V2ViRnJhbWUqIGZyYW1lID0g
d2Via2l0X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKHZpZXcpOworICAgIFdlYktpdFdlYkRhdGFT
b3VyY2UqIGRhdGFTb3VyY2UgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9kYXRhX3NvdXJjZShmcmFt
ZSk7CisKKyAgICBpZiAoc3RhdHVzID09IFdFQktJVF9MT0FEX0NPTU1JVFRFRCkgeworICAgICAg
ICBnX2Fzc2VydCh3ZWJraXRfd2ViX2RhdGFfc291cmNlX2lzX2xvYWRpbmcoZGF0YVNvdXJjZSkp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGVsc2UgaWYgKHN0YXR1cyAhPSBXRUJLSVRf
TE9BRF9GSU5JU0hFRCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLyogVGVzdCBnZXRfcmVxdWVz
dCAqLworICAgIGdfdGVzdF9tZXNzYWdlKCJUZXN0aW5nIHdlYmtpdF93ZWJfZGF0YV9zb3VyY2Vf
Z2V0X3JlcXVlc3QiKTsKKyAgICBXZWJLaXROZXR3b3JrUmVxdWVzdCogcmVxdWVzdCA9IHdlYmtp
dF93ZWJfZGF0YV9zb3VyY2VfZ2V0X3JlcXVlc3QoZGF0YVNvdXJjZSk7CisgICAgZ19hc3NlcnRf
Y21wc3RyKHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KSwgPT0sICJodHRw
Oi8vd3d3LndlYmtpdC5vcmcvIik7CisKKyAgICAvKiBUZXN0IGdldF9tYWluX3Jlc291cmNlICov
CisgICAgZ190ZXN0X21lc3NhZ2UoIlRlc3Rpbmcgd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRf
bWFpbl9yZXNvdXJjZSIpOworICAgIFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSA9IHdlYmtp
dF93ZWJfZGF0YV9zb3VyY2VfZ2V0X21haW5fcmVzb3VyY2UoZGF0YVNvdXJjZSk7CisgICAgZ19h
c3NlcnRfY21wc3RyKCJ0ZXh0L2h0bWwiLCA9PSwgd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfbWlt
ZV90eXBlKHJlc291cmNlKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKCJodHRwOi8vd3d3LndlYmtp
dC5vcmcvIiwgPT0sIHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaShyZXNvdXJjZSkpOworCisg
ICAgLyogVGVzdCBnZXRfZGF0YS4gV2UganVzdCB0ZXN0IGlmIGRhdGEgaGFzIGNlcnRhaW4gc2l6
ZSBmb3IgdGhlIG1lYW4gdGltZSAqLworICAgIGdfdGVzdF9tZXNzYWdlKCJUZXN0aW5nIHdlYmtp
dF93ZWJfZGF0YV9zb3VyY2VfZ2V0X2RhdGEgaGFzIGNlcnRhaW4gc2l6ZSIpOworICAgIEdTdHJp
bmcqIGRhdGEgPSB3ZWJraXRfd2ViX2RhdGFfc291cmNlX2dldF9kYXRhKGRhdGFTb3VyY2UpOwor
ICAgIGdfYXNzZXJ0KGRhdGEtPmxlbiA+IDEwMCk7CisKKyAgICAvKiBGSVhNRTogQWRkIHRlc3Qg
Zm9yIGdldF9lbmNvZGluZyAqLworCisgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKK30KKwor
c3RhdGljIGdib29sZWFuIHdhaXRfdGltZXJfZmlyZWQoR01haW5Mb29wKiBsb29wKQoreworICAg
IHdhaXRUaW1lciA9IDA7CisgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKKworICAgIHJldHVy
biBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX2RhdGFfc291cmNlKCkK
K3sKKyAgICBXZWJLaXRXZWJWaWV3KiB2aWV3OworICAgIEdNYWluTG9vcCogbG9vcDsKKworICAg
IHZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBnX29i
amVjdF9yZWZfc2luayh2aWV3KTsKKyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRS
VUUpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QodmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLCBH
X0NBTExCQUNLKG5vdGlmeV9sb2FkX3N0YXR1c19jYiksIGxvb3ApOworICAgIHdlYmtpdF93ZWJf
dmlld19sb2FkX3VyaSh2aWV3LCAiaHR0cDovL3d3dy53ZWJraXQub3JnIik7CisKKyAgICB3YWl0
VGltZXIgPSBnX3RpbWVvdXRfYWRkX3NlY29uZHMoZGVmYXVsdFRpbWVvdXQsIChHU291cmNlRnVu
Yyl3YWl0X3RpbWVyX2ZpcmVkLCBsb29wKTsKKworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsK
KworICAgIGlmICh3YWl0VGltZXIpCisgICAgICAgIGdfc291cmNlX3JlbW92ZSh3YWl0VGltZXIp
OworCisgICAgd2FpdFRpbWVyID0gMDsKKworICAgIGdfbWFpbl9sb29wX3VucmVmKGxvb3ApOwor
ICAgIGdfb2JqZWN0X3VucmVmKHZpZXcpOworfQorCitzdGF0aWMgdm9pZCBub3RpZnlfbG9hZF9z
dGF0dXNfbGlmZXRpbWVfY2IoV2ViS2l0V2ViVmlldyogdmlldywgR1BhcmFtU3BlYyogcHNwZWMs
IEdNYWluTG9vcCogbG9vcCkKK3sKKyAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtp
dF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMgKHZpZXcpOworICAgIFdlYktpdFdlYkZyYW1lKiBm
cmFtZSA9IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh2aWV3KTsKKyAgICBXZWJLaXRX
ZWJEYXRhU291cmNlKiBkYXRhU291cmNlID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfZGF0YV9zb3Vy
Y2UoZnJhbWUpOworCisgICAgaWYgKHN0YXR1cyA9PSBXRUJLSVRfTE9BRF9DT01NSVRURUQpIHsK
KyAgICAgICAgZ19hc3NlcnQod2Via2l0X3dlYl9kYXRhX3NvdXJjZV9pc19sb2FkaW5nKGRhdGFT
b3VyY2UpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9IFdFQktJ
VF9MT0FEX0ZJTklTSEVEKQorICAgICAgICByZXR1cm47CisKKyAgICBnX21haW5fbG9vcF9xdWl0
KGxvb3ApOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfZGF0YV9zb3VyY2VfbGlm
ZXRpbWUoKQoreworICAgIFdlYktpdFdlYlZpZXcqIHZpZXc7CisgICAgR01haW5Mb29wKiBsb29w
OworCisgICAgdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwor
ICAgIGdfb2JqZWN0X3JlZl9zaW5rKHZpZXcpOworICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXco
TlVMTCwgVFJVRSk7CisgICAgZ19zaWduYWxfY29ubmVjdCh2aWV3LCAibm90aWZ5Ojpsb2FkLXN0
YXR1cyIsIEdfQ0FMTEJBQ0sobm90aWZ5X2xvYWRfc3RhdHVzX2xpZmV0aW1lX2NiKSwgbG9vcCk7
CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHZpZXcsICJodHRwOi8vd3d3LndlYmtpdC5v
cmciKTsKKworICAgIHdhaXRUaW1lciA9IGdfdGltZW91dF9hZGRfc2Vjb25kcyhkZWZhdWx0VGlt
ZW91dCwgKEdTb3VyY2VGdW5jKXdhaXRfdGltZXJfZmlyZWQsIGxvb3ApOworCisgICAgZ19tYWlu
X2xvb3BfcnVuKGxvb3ApOworCisgICAgV2ViS2l0V2ViRGF0YVNvdXJjZSogZGF0YVNvdXJjZSA9
IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X2RhdGFfc291cmNlKHdlYmtpdF93ZWJfdmlld19nZXRfbWFp
bl9mcmFtZSh2aWV3KSk7CisgICAgR0xpc3QqIHN1YlJlc291cmNlcyA9IHdlYmtpdF93ZWJfZGF0
YV9zb3VyY2VfZ2V0X3N1YnJlc291cmNlcyhkYXRhU291cmNlKTsKKyAgICBnaW50IG51bWJlck9m
UmVzb3VyY2VzID0gZ19saXN0X2xlbmd0aChzdWJSZXNvdXJjZXMpOworICAgIGdfbGlzdF9mcmVl
KHN1YlJlc291cmNlcyk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl92aWV3X2dl
dF9sb2FkX3N0YXR1cyh2aWV3KSwgPT0sIFdFQktJVF9MT0FEX0ZJTklTSEVEKTsKKworICAgIHdl
YmtpdF93ZWJfdmlld19sb2FkX3VyaSh2aWV3LCAiaHR0cDovL2dub21lLm9yZyIpOworCisgICAg
Z19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXModmlldyksID09
LCBXRUJLSVRfTE9BRF9QUk9WSVNJT05BTCk7CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfc3RvcF9s
b2FkaW5nKHZpZXcpOworCisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJfdmlld19nZXRf
bG9hZF9zdGF0dXModmlldyksID09LCBXRUJLSVRfTE9BRF9GQUlMRUQpOworCisgICAgc3ViUmVz
b3VyY2VzID0gd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfc3VicmVzb3VyY2VzKGRhdGFTb3Vy
Y2UpOworICAgIGdfYXNzZXJ0X2NtcGludChudW1iZXJPZlJlc291cmNlcywgPT0sIGdfbGlzdF9s
ZW5ndGgoc3ViUmVzb3VyY2VzKSk7CisgICAgZ19saXN0X2ZyZWUoc3ViUmVzb3VyY2VzKTsKKwor
ICAgIGlmICh3YWl0VGltZXIpCisgICAgICAgIGdfc291cmNlX3JlbW92ZSh3YWl0VGltZXIpOwor
CisgICAgd2FpdFRpbWVyID0gMDsKKworICAgIGdfbWFpbl9sb29wX3VucmVmKGxvb3ApOworICAg
IGdfb2JqZWN0X3VucmVmKHZpZXcpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJf
ZGF0YV9zb3VyY2VfdW5yZWFjaGFibGVfdXJpKCkKK3sKKyAgICAvKiBGSVhNRTogdGhpcyB0ZXN0
IGZhaWxzIGN1cnJlbnRseS4gKi8KKyAgICByZXR1cm47CisKKyAgICBXZWJLaXRXZWJWaWV3KiB2
aWV3OworICAgIEdNYWluTG9vcCogbG9vcDsKKworICAgIHZpZXcgPSBXRUJLSVRfV0VCX1ZJRVco
d2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBnX29iamVjdF9yZWZfc2luayh2aWV3KTsKKyAg
ICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworICAgIGdfc2lnbmFsX2Nvbm5l
Y3QodmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLCBHX0NBTExCQUNLKG5vdGlmeV9sb2FkX3N0
YXR1c191bnJlYWNoYWJsZV9jYiksIGxvb3ApOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3Vy
aSh2aWV3LCAiaHR0cDovL3RoaXMuaG9zdC5kb2VzLm5vdC5leGlzdC9kb2lyZWFsbHlleGlzdC5o
dG1sIik7CisKKyAgICB3YWl0VGltZXIgPSBnX3RpbWVvdXRfYWRkX3NlY29uZHMoZGVmYXVsdFRp
bWVvdXQsIChHU291cmNlRnVuYyl3YWl0X3RpbWVyX2ZpcmVkLCBsb29wKTsKKworICAgIGdfbWFp
bl9sb29wX3J1bihsb29wKTsKKworICAgIGlmICh3YWl0VGltZXIpCisgICAgICAgIGdfc291cmNl
X3JlbW92ZSh3YWl0VGltZXIpOworCisgICAgd2FpdFRpbWVyID0gMDsKKworICAgIGdfbWFpbl9s
b29wX3VucmVmKGxvb3ApOworICAgIGdfb2JqZWN0X3VucmVmKHZpZXcpOworfQorCitpbnQgbWFp
bihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFy
Z3YsIE5VTEwpOworCisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy8iKTsKKyAgICBnX3Rlc3RfYnVnKCIyNDc1OCIpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dl
YmtpdC93ZWJkYXRhc291cmNlL2dldF9pbml0aWFsX3JlcXVlc3QiLAorICAgICAgICAgICAgICAg
ICAgICB0ZXN0X3dlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X2luaXRpYWxfcmVxdWVzdCk7Cisg
ICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYmRhdGFzb3VyY2UvYXBpIiwKKyAgICAgICAg
ICAgICAgICAgICAgdGVzdF93ZWJraXRfd2ViX2RhdGFfc291cmNlKTsKKyAgICBnX3Rlc3RfYWRk
X2Z1bmMoIi93ZWJraXQvd2ViZGF0YXNvdXJjZS91bnJlYWNoYWJsZV91cmkiLAorICAgICAgICAg
ICAgICAgICAgICB0ZXN0X3dlYmtpdF93ZWJfZGF0YV9zb3VyY2VfdW5yZWFjaGFibGVfdXJpKTsK
KyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2ViZGF0YXNvdXJjZS9saWZldGltZSIsCisg
ICAgICAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9saWZldGltZSk7
CisKKyAgICByZXR1cm4gZ190ZXN0X3J1biAoKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJmcmFtZS5jIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYmZyYW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMTEzMTg3MwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJmcmFtZS5jCkBAIC0wLDAgKzEsMjIwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgQ29sbGFib3JhIEx0ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8Z2xpYi5oPgor
I2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUg
PHdlYmtpdC93ZWJraXQuaD4KKworc3RhdGljIGludCBudW1iZXJPZkZyYW1lc0NyZWF0ZWQgPSAw
OworCitzdGF0aWMgdm9pZCBjcmVhdGVGcmFtZVNpZ25hbFRlc3RGcmFtZUNyZWF0ZWRDYWxsYmFj
ayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRXZWJGcmFtZSogZnJhbWUsIGdwb2ludGVy
IGRhdGEpCit7CisgICAgbnVtYmVyT2ZGcmFtZXNDcmVhdGVkKys7Cit9CisKK3N0YXRpYyBnYm9v
bGVhbiBjcmVhdGVGcmFtZVNpZ25hbFRlc3RUaW1lb3V0KGdwb2ludGVyIGRhdGEpCit7CisgICAg
Z19hc3NlcnRfY21waW50KG51bWJlck9mRnJhbWVzQ3JlYXRlZCwgPT0sIDIpOworICAgIGdfbWFp
bl9sb29wX3F1aXQoKEdNYWluTG9vcCopIGRhdGEpOworICAgIHJldHVybiBGQUxTRTsKK30KKwor
c3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX2ZyYW1lX2NyZWF0ZWRfc2lnbmFsKHZvaWQpCit7
CisgICAgR3RrV2lkZ2V0KiB3ZWJWaWV3OworICAgIEd0a1dpZGdldCogd2luZG93OworICAgIEdN
YWluTG9vcCogbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKKworICAgIHdpbmRv
dyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOworCisgICAgd2ViVmlldyA9
IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJm
cmFtZS1jcmVhdGVkIiwgR19DQUxMQkFDSyhjcmVhdGVGcmFtZVNpZ25hbFRlc3RGcmFtZUNyZWF0
ZWRDYWxsYmFjayksIGxvb3ApOworCisgICAgLy8gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCBleGFj
dGx5IHR3byBjcmVhdGUtZnJhbWUgc2lnbmFscyBhcmUKKyAgICAvLyBmaXJlZCBhbmQgbm8gbW9y
ZSwgc28gd2Ugc2V0IGEgdGltZW91dCBoZXJlLiBUaGVyZSBkb2VzIG5vdCBhcHBlYXIKKyAgICAv
LyB0byBiZSBhIHNpbXBsZSB3YXkgdmlhIHRoZSBBUEkgdG8gZmlndXJlIG91dCB3aGVuIGFsbCBm
cmFtZXMgaGF2ZQorICAgIC8vIGxvYWRlZC4KKyAgICBnX3RpbWVvdXRfYWRkKDUwMCwgY3JlYXRl
RnJhbWVTaWduYWxUZXN0VGltZW91dCwgbG9vcCk7CisKKyAgICBndGtfY29udGFpbmVyX2FkZChH
VEtfQ09OVEFJTkVSKHdpbmRvdyksIHdlYlZpZXcpOworICAgIGd0a193aWRnZXRfc2hvdyh3aW5k
b3cpOworICAgIGd0a193aWRnZXRfc2hvdyh3ZWJWaWV3KTsKKworICAgIHdlYmtpdF93ZWJfdmll
d19sb2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldyksCisgICAgICAgICI8aHRtbD48
Ym9keT5GcmFtZXMhIgorICAgICAgICAiPGlmcmFtZT48L2lmcmFtZT4iCisgICAgICAgICI8aWZy
YW1lPjwvaWZyYW1lPiIKKyAgICAgICAgIjwvYm9keT48L2h0bWw+IiwKKyAgICAgICAgInRleHQv
aHRtbCIsICJ1dGYtOCIsICJmaWxlOi8vIik7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwor
fQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfY3JlYXRlX2Rlc3Ryb3kodm9p
ZCkKK3sKKyAgICBHdGtXaWRnZXQgKndlYlZpZXc7CisgICAgR3RrV2lkZ2V0ICp3aW5kb3c7CisK
KyAgICBnX3Rlc3RfYnVnKCIyMTgzNyIpOworICAgIHdlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdf
bmV3KCk7CisgICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7CisgICAgZ19hc3NlcnRfY21w
aW50KEdfT0JKRUNUKHdlYlZpZXcpLT5yZWZfY291bnQsID09LCAxKTsKKyAgICAvLyBUaGlzIGNy
YXNoZWQgd2l0aCB0aGUgb3JpZ2luYWwgdmVyc2lvbgorICAgIGdfb2JqZWN0X3VucmVmKHdlYlZp
ZXcpOworCisgICAgZ190ZXN0X2J1ZygiMjUwNDIiKTsKKyAgICB3aW5kb3cgPSBndGtfd2luZG93
X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKKyAgICB3ZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3
X25ldygpOworICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgd2Vi
Vmlldyk7CisgICAgZ3RrX3dpZGdldF9zaG93KHdpbmRvdyk7CisgICAgZ3RrX3dpZGdldF9zaG93
KHdlYlZpZXcpOworICAgIGd0a193aWRnZXRfZGVzdHJveSh3ZWJWaWV3KTsKK30KKworc3RhdGlj
IHZvaWQgdGVzdF93ZWJraXRfd2ViX2ZyYW1lX2xpZmV0aW1lKHZvaWQpCit7CisgICAgV2ViS2l0
V2ViVmlldyogd2ViVmlldzsKKyAgICBXZWJLaXRXZWJGcmFtZSogd2ViRnJhbWU7CisgICAgZ190
ZXN0X2J1ZygiMjE4MzciKTsKKworICAgIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0
X3dlYl92aWV3X25ldygpKTsKKyAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoR19PQkpFQ1Qod2ViVmlldyktPnJlZl9jb3VudCwgPT0sIDEpOworICAg
IHdlYkZyYW1lID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKHdlYlZpZXcpOworICAg
IGdfYXNzZXJ0X2NtcGludChHX09CSkVDVCh3ZWJGcmFtZSktPnJlZl9jb3VudCwgPT0sIDEpOwor
CisgICAgLy8gQWRkIGR1bW15IHJlZmVyZW5jZSBvbiB0aGUgV2ViS2l0V2ViRnJhbWUgdG8ga2Vl
cCBpdCBhbGl2ZQorICAgIGdfb2JqZWN0X3JlZih3ZWJGcmFtZSk7CisgICAgZ19hc3NlcnRfY21w
aW50KEdfT0JKRUNUKHdlYkZyYW1lKS0+cmVmX2NvdW50LCA9PSwgMik7CisKKyAgICAvLyBUaGlz
IGNyYXNoZWQgd2l0aCB0aGUgb3JpZ2luYWwgdmVyc2lvbgorICAgIGdfb2JqZWN0X3VucmVmKHdl
YlZpZXcpOworCisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGZyYW1lIGdvdCBkZWxldGVkIGFz
IHdlbGwuIFdlIGRpZCB0aGlzCisgICAgLy8gYnkgYWRkaW5nIGFuIGV4dHJhIHJlZiBvbiB0aGUg
V2ViS2l0V2ViRnJhbWUgYW5kIHdlIHNob3VsZAorICAgIC8vIGJlIHRoZSBvbmUgaG9sZGluZyB0
aGUgbGFzdCByZWZlcmVuY2UuCisgICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKHdlYkZyYW1l
KS0+cmVmX2NvdW50LCA9PSwgMSk7CisgICAgZ19vYmplY3RfdW5yZWYod2ViRnJhbWUpOworfQor
CitzdGF0aWMgZ2Jvb2xlYW4gcHJpbnRfcmVxdWVzdGVkX2NiKFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcsIFdlYktpdFdlYkZyYW1lKiB3ZWJGcmFtZSwgR01haW5Mb29wKiBsb29wKQoreworICAgIGdf
b2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKHdlYlZpZXcpLCAic2lnbmFsLWhhbmRsZWQiLCBHSU5U
X1RPX1BPSU5URVIoVFJVRSkpOworICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7CisgICAgcmV0
dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3RpbWVvdXQoR01haW5Mb29wKiBsb29w
KQoreworICAgIGlmIChnX21haW5fbG9vcF9pc19ydW5uaW5nKGxvb3ApKQorICAgICAgICBnX21h
aW5fbG9vcF9xdWl0KGxvb3ApOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfZnJh
bWVfcHJpbnRpbmcodm9pZCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OworCisgICAg
d2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdf
b2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOworICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVCh3
ZWJWaWV3KS0+cmVmX2NvdW50LCA9PSwgMSk7CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9z
dHJpbmcod2ViVmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxodG1sPjxi
b2R5PjxoMT5XZWJLaXRHVEsrITwvaDE+PC9ib2R5PjwvaHRtbD4iLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAidGV4dC9odG1sIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgInV0Zi04IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGU6Ly8i
KTsKKworICAgIEdNYWluTG9vcCogbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsK
KworICAgIC8vIERvZXMgamF2YXNjcmlwdCBwcmludCgpIHdvcmsgY29ycmVjdGx5PworICAgIGdf
c2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgInByaW50LXJlcXVlc3RlZCIsCisgICAgICAgICAgICAg
ICAgICAgICBHX0NBTExCQUNLKHByaW50X3JlcXVlc3RlZF9jYiksCisgICAgICAgICAgICAgICAg
ICAgICBsb29wKTsKKworICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKHdlYlZpZXcpLCAi
c2lnbmFsLWhhbmRsZWQiLCBHSU5UX1RPX1BPSU5URVIoRkFMU0UpKTsKKyAgICB3ZWJraXRfd2Vi
X3ZpZXdfZXhlY3V0ZV9zY3JpcHQgKHdlYlZpZXcsICJwcmludCgpOyIpOworCisgICAgLy8gR2l2
ZSBqYXZhc2NyaXB0Y29yZSBzb21lIHRpbWUgdG8gcHJvY2VzcyB0aGUgcHJpbnQgcmVxdWVzdCwg
YnV0CisgICAgLy8gcHJlcGFyZSBhIHRpbWVvdXQgdG8gYXZvaWQgaXQgcnVubmluZyBmb3JldmVy
IGluIGNhc2UgdGhlIHNpZ25hbCBpcworICAgIC8vIG5ldmVyIGVtaXR0ZWQuCisgICAgZ190aW1l
b3V0X2FkZCgxMDAwLCAoR1NvdXJjZUZ1bmMpcHJpbnRfdGltZW91dCwgbG9vcCk7CisgICAgZ19t
YWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgZ19hc3NlcnRfY21waW50KEdQT0lOVEVSX1RPX0lO
VChnX29iamVjdF9nZXRfZGF0YShHX09CSkVDVCh3ZWJWaWV3KSwgInNpZ25hbC1oYW5kbGVkIikp
LCA9PSwgVFJVRSk7CisKKyAgICAvLyBEb2VzIHByaW50aW5nIGRpcmVjdGx5IHRvIGEgZmlsZT8K
KyAgICBHRXJyb3IgKmVycm9yID0gTlVMTDsKKyAgICBnY2hhciogdGVtcG9yYXJ5RmlsZW5hbWUg
PSBOVUxMOworICAgIGdpbnQgZmQgPSBnX2ZpbGVfb3Blbl90bXAgKCJ3ZWJraXQtdGVzdHdlYmZy
YW1lLVhYWFhYWCIsICZ0ZW1wb3JhcnlGaWxlbmFtZSwgJmVycm9yKTsKKyAgICBjbG9zZShmZCk7
CisKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgZ19jcml0aWNhbCgiRmFpbGVkIHRvIG9wZW4g
YSB0ZW1wb3JhcnkgZmlsZSBmb3Igd3JpdGluZzogJXMuIiwgZXJyb3ItPm1lc3NhZ2UpOworICAg
ICAgICBnX2Vycm9yX2ZyZWUoZXJyb3IpOworICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQor
CisgICAgLy8gV2UgZGVsZXRlIHRoZSBmaWxlLCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgZmlndXJl
IG91dCB0aGF0IHRoZQorICAgIC8vIGZpbGUgZ290IHByaW50ZWQ7CisgICAgaWYgKGdfdW5saW5r
KHRlbXBvcmFyeUZpbGVuYW1lKSA9PSAtMSkgeworICAgICAgICBnX3dhcm5pbmcoIkZhaWxlZCB0
byBkZWxldGUgdGhlIHRlbXBvcmFyeSBmaWxlOiAlcy5cblRoaXMgbWF5IGNhdXNlIHRoZSB0ZXN0
IHRvIGJlIGJvZ3VzLiIsIGdfc3RyZXJyb3IoZXJybm8pKTsKKyAgICB9CisKKyAgICBXZWJLaXRX
ZWJGcmFtZSogd2ViRnJhbWUgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUod2ViVmll
dyk7CisgICAgR3RrUHJpbnRPcGVyYXRpb24qIG9wZXJhdGlvbiA9IGd0a19wcmludF9vcGVyYXRp
b25fbmV3KCk7CisgICAgR3RrUHJpbnRPcGVyYXRpb25BY3Rpb24gYWN0aW9uID0gR1RLX1BSSU5U
X09QRVJBVElPTl9BQ1RJT05fRVhQT1JUOworICAgIEd0a1ByaW50T3BlcmF0aW9uUmVzdWx0IHJl
c3VsdDsKKworICAgIGd0a19wcmludF9vcGVyYXRpb25fc2V0X2V4cG9ydF9maWxlbmFtZShvcGVy
YXRpb24sIHRlbXBvcmFyeUZpbGVuYW1lKTsKKyAgICByZXN1bHQgPSB3ZWJraXRfd2ViX2ZyYW1l
X3ByaW50X2Z1bGwgKHdlYkZyYW1lLCBvcGVyYXRpb24sIGFjdGlvbiwgTlVMTCk7CisKKyAgICBn
X2Fzc2VydF9jbXBpbnQocmVzdWx0LCA9PSwgR1RLX1BSSU5UX09QRVJBVElPTl9SRVNVTFRfQVBQ
TFkpOworICAgIGdfYXNzZXJ0X2NtcGludChnX2ZpbGVfdGVzdCh0ZW1wb3JhcnlGaWxlbmFtZSwg
R19GSUxFX1RFU1RfSVNfUkVHVUxBUiksID09LCBUUlVFKTsKKworICAgIGdfdW5saW5rKHRlbXBv
cmFyeUZpbGVuYW1lKTsKKyAgICBnX29iamVjdF91bnJlZihvcGVyYXRpb24pOworY2xlYW51cDoK
KyAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKKyAgICBnX2ZyZWUodGVtcG9yYXJ5RmlsZW5h
bWUpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfcmVzcG9uc2UoKQor
eworICAgIFdlYktpdFdlYkZyYW1lKiBmcmFtZSA9IGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9X
RUJfRlJBTUUsIE5VTEwpOworICAgIFdlYktpdE5ldHdvcmtSZXNwb25zZSogcmVzcG9uc2UgPSB3
ZWJraXRfd2ViX2ZyYW1lX2dldF9uZXR3b3JrX3Jlc3BvbnNlKGZyYW1lKTsKKyAgICBnX2Fzc2Vy
dCghcmVzcG9uc2UpOworICAgIGdfb2JqZWN0X3VucmVmKGZyYW1lKTsKK30KKworaW50IG1haW4o
aW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2
LCBOVUxMKTsKKworICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
Iik7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnZpZXcvY3JlYXRlX2Rlc3Ryb3ki
LCB0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfY3JlYXRlX2Rlc3Ryb3kpOworICAgIGdfdGVzdF9hZGRf
ZnVuYygiL3dlYmtpdC93ZWJ2aWV3L2ZyYW1lLWNyZWF0ZWRfc2lnbmFsIiwgdGVzdF93ZWJraXRf
d2ViX2ZyYW1lX2NyZWF0ZWRfc2lnbmFsKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQv
d2ViZnJhbWUvbGlmZXRpbWUiLCB0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfbGlmZXRpbWUpOworICAg
IGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJ2aWV3L3ByaW50aW5nIiwgdGVzdF93ZWJraXRf
d2ViX2ZyYW1lX3ByaW50aW5nKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vidmll
dy9yZXNwb25zZSIsIHRlc3Rfd2Via2l0X3dlYl9mcmFtZV9yZXNwb25zZSk7CisgICAgcmV0dXJu
IGdfdGVzdF9ydW4gKCk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdEd0ay90ZXN0d2ViaGlzdG9yeWl0ZW0uYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0R3RrL3Rlc3R3ZWJoaXN0b3J5aXRlbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjgyZTE5MWMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2ViaGlzdG9yeWl0ZW0uYwpAQCAtMCwwICsxLDcwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEphbiBNaWNoYWVsIEFsb256bworICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNs
dWRlIDx3ZWJraXQvd2Via2l0Lmg+CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBXZWJLaXRXZWJI
aXN0b3J5SXRlbSogaXRlbTsKK30gV2ViSGlzdG9yeUl0ZW1GaXh0dXJlOworCitzdGF0aWMgdm9p
ZCB3ZWJfaGlzdG9yeV9pdGVtX2ZpeHR1cmVfc2V0dXAoV2ViSGlzdG9yeUl0ZW1GaXh0dXJlKiBm
aXh0dXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjb25z
dHBvaW50ZXIgZGF0YSkKK3sKKyAgICBmaXh0dXJlLT5pdGVtID0gd2Via2l0X3dlYl9oaXN0b3J5
X2l0ZW1fbmV3X3dpdGhfZGF0YSgiaHR0cDovL2V4YW1wbGUuY29tLyIsICJFeGFtcGxlMSIpOwor
ICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChmaXh0dXJlLT5pdGVtKS0+cmVmX2NvdW50LCA9
PSAsIDEpOworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPml0ZW0gIT0gTlVMTCk7Cit9CisKK3N0YXRp
YyB2b2lkIHdlYl9oaXN0b3J5X2l0ZW1fZml4dHVyZV90ZWFyZG93bihXZWJIaXN0b3J5SXRlbUZp
eHR1cmUqIGZpeHR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPml0ZW0g
IT0gTlVMTCk7CisgICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKGZpeHR1cmUtPml0ZW0pLT5y
ZWZfY291bnQsID09LCAxKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX2hpc3Rv
cnlfaXRlbV9nZXRfZGF0YShXZWJIaXN0b3J5SXRlbUZpeHR1cmUqIGZpeHR1cmUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjb25zdHBvaW50ZXIg
ZGF0YSkKK3sKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0
X3RpdGxlKGZpeHR1cmUtPml0ZW0pLCA9PSwgIkV4YW1wbGUxIik7CisgICAgZ19hc3NlcnRfY21w
c3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF91cmkoZml4dHVyZS0+aXRlbSksID09LCAi
aHR0cDovL2V4YW1wbGUuY29tLyIpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJf
aGlzdG9yeV9pdGVtX2FsdGVybmF0ZV90aXRsZShXZWJIaXN0b3J5SXRlbUZpeHR1cmUqIGZpeHR1
cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1f
c2V0X2FsdGVybmF0ZV90aXRsZShmaXh0dXJlLT5pdGVtLCAiQWx0ZXJuYXRlIHRpdGxlIik7Cisg
ICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF9hbHRlcm5hdGVf
dGl0bGUoZml4dHVyZS0+aXRlbSksID09LCAiQWx0ZXJuYXRlIHRpdGxlIik7Cit9CisKK2ludCBt
YWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAm
YXJndiwgTlVMTCk7CisKKyAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQu
b3JnLyIpOworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvd2ViaGlzdG9yeWl0ZW0vZ2V0X2RhdGEi
LAorICAgICAgICAgICAgICAgV2ViSGlzdG9yeUl0ZW1GaXh0dXJlLCAwLCB3ZWJfaGlzdG9yeV9p
dGVtX2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF93ZWJfaGlzdG9y
eV9pdGVtX2dldF9kYXRhLCB3ZWJfaGlzdG9yeV9pdGVtX2ZpeHR1cmVfdGVhcmRvd24pOworICAg
IGdfdGVzdF9hZGQoIi93ZWJraXQvd2ViaGlzdG9yeWl0ZW0vYWx0ZXJuYXRlX3RpdGxlIiwKKyAg
ICAgICAgICAgICAgIFdlYkhpc3RvcnlJdGVtRml4dHVyZSwgMCwgd2ViX2hpc3RvcnlfaXRlbV9m
aXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfd2ViX2hpc3RvcnlfaXRl
bV9hbHRlcm5hdGVfdGl0bGUsIHdlYl9oaXN0b3J5X2l0ZW1fZml4dHVyZV90ZWFyZG93bik7Cisg
ICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2ViaW5zcGVjdG9yLmMgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2ViaW5zcGVjdG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uYTc0MzgyZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJpbnNwZWN0b3IuYwpAQCAtMCwwICsxLDE3
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGdu
c0Bnbm9tZS5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJ0ZXN0X3V0aWxzLmgi
CisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z3Rr
L2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKworR01haW5Mb29wICpsb29wOwor
R3RrV2lkZ2V0ICp3aW5kb3c7CisKK3N0YXRpYyBnYm9vbGVhbiBxdWl0TG9vcChncG9pbnRlciBk
YXRhKQoreworICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7CisgICAgcmV0dXJuIFRSVUU7Cit9
CisKKy8qIElnbm9yZSBzaW1wbGUgdHJhbnNsYXRpb24tcmVsYXRlZCBtZXNzYWdlcyBhbmQgdXBn
cmFkZSBvdGhlcgorICogbWVzc2FnZXMgdG8gd2FybmluZ3MuCisgKi8KK3N0YXRpYyBnYm9vbGVh
biBjb25zb2xlTWVzc2FnZUNhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGNvbnN0IGNo
YXIqIG1lc3NhZ2UsIHVuc2lnbmVkIGludCBsaW5lLCBjb25zdCBjaGFyKiBzb3VyY2VJZCkKK3sK
KyAgICBpZiAoc3Ryc3RyKG1lc3NhZ2UsICJMb2NhbGl6ZWQgc3RyaW5nIikgfHwgc3Ryc3RyKG1l
c3NhZ2UsICJQcm90b2NvbCBFcnJvcjogdGhlIG1lc3NhZ2UgaXMgZm9yIG5vbi1leGlzdGluZyBk
b21haW4gJ1Byb2ZpbGVyJyIpIHx8CisgICAgICAgIHN0cnN0cihtZXNzYWdlLCAiRGlkbid0IGZp
bmQgYSBUcmVlRWxlbWVudCBmb3IgYSByZXByZXNlbnRlZE9iamVjdCIpKQorICAgICAgICByZXR1
cm4gVFJVRTsKKworICAgIGdfd2FybmluZygiQ29uc29sZTogJXMgQCVkOiAlc1xuIiwgc291cmNl
SWQsIGxpbmUsIG1lc3NhZ2UpOworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgV2ViS2l0
V2ViVmlldyogaW5zcGVjdEVsZW1lbnRDYWxsYmFjayhXZWJLaXRXZWJJbnNwZWN0b3IgKmluc3Bl
Y3RvciwgV2ViS2l0V2ViVmlldyAqaW5zcGVjdGVkV2ViVmlldywgaW50ICp0aW1lc0VsZW1lbnRJ
bnNwZWN0ZWQpCit7CisgICAgKnRpbWVzRWxlbWVudEluc3BlY3RlZCA9ICp0aW1lc0VsZW1lbnRJ
bnNwZWN0ZWQgKyAxOworCisgICAgd2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19U
T1BMRVZFTCk7CisKKyAgICBHdGtXaWRnZXQgKm5ld1dlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdf
bmV3KCk7CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCBuZXdX
ZWJWaWV3KTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3QobmV3V2ViVmlldywgImNvbnNvbGUtbWVz
c2FnZSIsCisgICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKGNvbnNvbGVNZXNzYWdlQ2Fs
bGJhY2spLCBOVUxMKTsKKworICAgIHJldHVybiBXRUJLSVRfV0VCX1ZJRVcobmV3V2ViVmlldyk7
Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBjbG9zZUluc3BlY3RvcihXZWJLaXRXZWJJbnNwZWN0b3Ig
Kmluc3BlY3RvciwgaW50ICp0aW1lc0Nsb3NlZCkKK3sKKyAgICAqdGltZXNDbG9zZWQgPSAqdGlt
ZXNDbG9zZWQgKyAxOworCisgICAgZ3RrX3dpZGdldF9kZXN0cm95KHdpbmRvdyk7CisgICAgcmV0
dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBzaG93SW5zcGVjdG9yKFdlYktpdFdlYklu
c3BlY3RvciAqaW5zcGVjdG9yLCBncG9pbnRlciBkYXRhKQoreworICAgIGdfaWRsZV9hZGQocXVp
dExvb3AsIE5VTEwpOworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZCBsb2FkRmlu
aXNoZWQoV2ViS2l0V2ViVmlldyAqd2ViVmlldywgV2ViS2l0V2ViRnJhbWUgKmZyYW1lLCBnYm9v
bGVhbiAqaXNMb2FkRmluaXNoZWQpCit7CisgICAgKmlzTG9hZEZpbmlzaGVkID0gVFJVRTsKKyAg
ICBpZiAoZ19tYWluX2xvb3BfaXNfcnVubmluZyhsb29wKSkKKyAgICAgICAgZ19tYWluX2xvb3Bf
cXVpdChsb29wKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX2luc3BlY3Rvcl9j
bG9zZV9hbmRfaW5zcGVjdCgpCit7CisgICAgV2ViS2l0V2ViVmlldyAqd2ViVmlldyA9IFdFQktJ
VF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGxvb3AgPSBnX21haW5fbG9v
cF9uZXcoTlVMTCwgVFJVRSk7CisKKyAgICBnYm9vbGVhbiBpc0xvYWRGaW5pc2hlZCA9IEZBTFNF
OworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgImxvYWQtZmluaXNoZWQiLCBHX0NBTExC
QUNLKGxvYWRGaW5pc2hlZCksICZpc0xvYWRGaW5pc2hlZCk7CisgICAgd2Via2l0X3dlYl92aWV3
X2xvYWRfc3RyaW5nKHdlYlZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8
aHRtbD48Ym9keT48cD53b29ob288L3A+PC9ib2R5PjwvaHRtbD4iLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAidGV4dC9odG1sIiwgIlVURi04IiwgImZpbGU6Ly8iKTsKKyAgICBp
ZiAoIWlzTG9hZEZpbmlzaGVkKQorICAgICAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAg
ICBnX29iamVjdF9zZXQod2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3KSwgImVu
YWJsZS1kZXZlbG9wZXItZXh0cmFzIiwgVFJVRSwgTlVMTCk7CisgICAgV2ViS2l0V2ViSW5zcGVj
dG9yICppbnNwZWN0b3IgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2luc3BlY3Rvcih3ZWJWaWV3KTsK
KworICAgIGludCB0aW1lc0VsZW1lbnRJbnNwZWN0ZWQgPSAwOworICAgIGludCB0aW1lc0Nsb3Nl
ZCA9IDA7CisgICAgZ19vYmplY3RfY29ubmVjdChpbnNwZWN0b3IsCisgICAgICAgICAgICAgICAg
ICAgICAic2lnbmFsOjppbnNwZWN0LXdlYi12aWV3IiwgR19DQUxMQkFDSyhpbnNwZWN0RWxlbWVu
dENhbGxiYWNrKSwgJnRpbWVzRWxlbWVudEluc3BlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAg
ICJzaWduYWw6OnNob3ctd2luZG93IiwgR19DQUxMQkFDSyhzaG93SW5zcGVjdG9yKSwgTlVMTCwK
KyAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6OmNsb3NlLXdpbmRvdyIsIEdfQ0FMTEJBQ0so
Y2xvc2VJbnNwZWN0b3IpLCAmdGltZXNDbG9zZWQsCisgICAgICAgICAgICAgICAgICAgICBOVUxM
KTsKKworICAgIHdlYmtpdF93ZWJfaW5zcGVjdG9yX2luc3BlY3RfY29vcmRpbmF0ZXMoaW5zcGVj
dG9yLCAwLjAsIDAuMCk7CisgICAgZ19hc3NlcnRfY21waW50KHRpbWVzRWxlbWVudEluc3BlY3Rl
ZCwgPT0sIDEpOworCisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgd2Via2l0X3dl
Yl9pbnNwZWN0b3JfY2xvc2UoaW5zcGVjdG9yKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGltZXND
bG9zZWQsID09LCAxKTsKKworICAgIHdlYmtpdF93ZWJfaW5zcGVjdG9yX2luc3BlY3RfY29vcmRp
bmF0ZXMoaW5zcGVjdG9yLCAwLjAsIDAuMCk7CisgICAgZ19hc3NlcnRfY21waW50KHRpbWVzRWxl
bWVudEluc3BlY3RlZCwgPT0sIDIpOworCisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisg
ICAgZ3RrX3dpZGdldF9kZXN0cm95KEdUS19XSURHRVQod2ViVmlldykpOworICAgIGdfYXNzZXJ0
X2NtcGludCh0aW1lc0Nsb3NlZCwgPT0sIDIpOworCisgICAgZ19tYWluX2xvb3BfdW5yZWYobG9v
cCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9pbnNwZWN0b3JfZGVzdHJveV9p
bnNwZWN0ZWRfd2ViX3ZpZXcoKQoreworICAgIFdlYktpdFdlYlZpZXcgKndlYlZpZXcgPSBXRUJL
SVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBsb29wID0gZ19tYWluX2xv
b3BfbmV3KE5VTEwsIFRSVUUpOworCisgICAgZ2Jvb2xlYW4gaXNMb2FkRmluaXNoZWQgPSBGQUxT
RTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJsb2FkLWZpbmlzaGVkIiwgR19DQUxM
QkFDSyhsb2FkRmluaXNoZWQpLCAmaXNMb2FkRmluaXNoZWQpOworICAgIHdlYmtpdF93ZWJfdmll
d19sb2FkX3N0cmluZyh3ZWJWaWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
PGh0bWw+PGJvZHk+PHA+d29vaG9vPC9wPjwvYm9keT48L2h0bWw+IiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgInRleHQvaHRtbCIsICJVVEYtOCIsICJmaWxlOi8vIik7CisgICAg
aWYgKCFpc0xvYWRGaW5pc2hlZCkKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisg
ICAgZ19vYmplY3Rfc2V0KHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmlldyksICJl
bmFibGUtZGV2ZWxvcGVyLWV4dHJhcyIsIFRSVUUsIE5VTEwpOworICAgIFdlYktpdFdlYkluc3Bl
Y3RvciAqaW5zcGVjdG9yID0gd2Via2l0X3dlYl92aWV3X2dldF9pbnNwZWN0b3Iod2ViVmlldyk7
CisKKyAgICBpbnQgdGltZXNFbGVtZW50SW5zcGVjdGVkID0gMDsKKyAgICBpbnQgdGltZXNDbG9z
ZWQgPSAwOworICAgIGdfb2JqZWN0X2Nvbm5lY3QoaW5zcGVjdG9yLAorICAgICAgICAgICAgICAg
ICAgICAgInNpZ25hbDo6aW5zcGVjdC13ZWItdmlldyIsIEdfQ0FMTEJBQ0soaW5zcGVjdEVsZW1l
bnRDYWxsYmFjayksICZ0aW1lc0VsZW1lbnRJbnNwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAg
ICAic2lnbmFsOjpzaG93LXdpbmRvdyIsIEdfQ0FMTEJBQ0soc2hvd0luc3BlY3RvciksIE5VTEws
CisgICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjpjbG9zZS13aW5kb3ciLCBHX0NBTExCQUNL
KGNsb3NlSW5zcGVjdG9yKSwgJnRpbWVzQ2xvc2VkLAorICAgICAgICAgICAgICAgICAgICAgTlVM
TCk7CisKKyAgICB3ZWJraXRfd2ViX2luc3BlY3Rvcl9pbnNwZWN0X2Nvb3JkaW5hdGVzKGluc3Bl
Y3RvciwgMC4wLCAwLjApOworICAgIGdfYXNzZXJ0X2NtcGludCh0aW1lc0VsZW1lbnRJbnNwZWN0
ZWQsID09LCAxKTsKKworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIGd0a193aWRn
ZXRfZGVzdHJveShHVEtfV0lER0VUKHdlYlZpZXcpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGlt
ZXNDbG9zZWQsID09LCAxKTsKKworICAgIGdfbWFpbl9sb29wX3VucmVmKGxvb3ApOworfQorCitp
bnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJn
YywgJmFyZ3YsIE5VTEwpOworCisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2ViaW5zcGVjdG9yL2Rl
c3Ryb3ktaW5zcGVjdGVkLXdlYi12aWV3IiwgdGVzdF93ZWJraXRfd2ViX2luc3BlY3Rvcl9kZXN0
cm95X2luc3BlY3RlZF93ZWJfdmlldyk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dl
Ymluc3BlY3Rvci9jbG9zZS1hbmQtaW5zcGVjdCIsIHRlc3Rfd2Via2l0X3dlYl9pbnNwZWN0b3Jf
Y2xvc2VfYW5kX2luc3BlY3QpOworCisgICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsKK30KZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJwbHVnaW5k
YXRhYmFzZS5jIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYnBs
dWdpbmRhdGFiYXNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUyODEx
YgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3Rr
L3Rlc3R3ZWJwbHVnaW5kYXRhYmFzZS5jCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPGVy
cm5vLmg+CisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CisjaW5j
bHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKworLyogVGhpcyBm
dW5jdGlvbiBpcyBub3QgcHVibGljLCBzbyB3ZSBuZWVkIGFuIGV4dGVybiBkZWNsYXJhdGlvbiAq
LworZXh0ZXJuIHZvaWQgd2Via2l0X3dlYl9zZXR0aW5nc19hZGRfZXh0cmFfcGx1Z2luX2RpcmVj
dG9yeShXZWJLaXRXZWJWaWV3KiB2aWV3LCBjb25zdCBnY2hhciogZGlyZWN0b3J5KTsKKworc3Rh
dGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3BsdWdpbl9kYXRhYmFzZV9nZXRfcGx1Z2lucygpCit7
CisgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3Zp
ZXdfbmV3KCkpOworICAgIFdlYktpdFdlYlBsdWdpbkRhdGFiYXNlKiBkYXRhYmFzZTsKKyAgICBH
U0xpc3QqIHBsdWdpbkxpc3QsICpwOworICAgIGdib29sZWFuIGZvdW5kID0gRkFMU0U7CisgICAg
Z2Jvb2xlYW4gZW5hYmxlZCA9IEZBTFNFOworCisgICAgd2Via2l0X3dlYl9zZXR0aW5nc19hZGRf
ZXh0cmFfcGx1Z2luX2RpcmVjdG9yeSh2aWV3LCBURVNUX1BMVUdJTl9ESVIpOworICAgIGdfb2Jq
ZWN0X3JlZl9zaW5rKEdfT0JKRUNUKHZpZXcpKTsKKworICAgIGRhdGFiYXNlID0gd2Via2l0X2dl
dF93ZWJfcGx1Z2luX2RhdGFiYXNlKCk7CisgICAgcGx1Z2luTGlzdCA9IHdlYmtpdF93ZWJfcGx1
Z2luX2RhdGFiYXNlX2dldF9wbHVnaW5zKGRhdGFiYXNlKTsKKyAgICBmb3IgKHAgPSBwbHVnaW5M
aXN0OyBwOyBwID0gcC0+bmV4dCkgeworICAgICAgICBXZWJLaXRXZWJQbHVnaW4qIHBsdWdpbiA9
IChXZWJLaXRXZWJQbHVnaW4qKXAtPmRhdGE7CisgICAgICAgIGlmICghZ19zdHJjbXAwKHdlYmtp
dF93ZWJfcGx1Z2luX2dldF9uYW1lKHBsdWdpbiksICJXZWJLaXQgVGVzdCBQbHVnSW4iKSAmJgor
ICAgICAgICAgICAgIWdfc3RyY21wMCh3ZWJraXRfd2ViX3BsdWdpbl9nZXRfZGVzY3JpcHRpb24o
cGx1Z2luKSwgIlNpbXBsZSBOZXRzY2FwZcKuIHBsdWctaW4gdGhhdCBoYW5kbGVzIHRlc3QgY29u
dGVudCBmb3IgV2ViS2l0IikpIHsKKyAgICAgICAgICAgIGZvdW5kID0gVFJVRTsKKyAgICAgICAg
ICAgIGVuYWJsZWQgPSB3ZWJraXRfd2ViX3BsdWdpbl9nZXRfZW5hYmxlZChwbHVnaW4pOworICAg
ICAgICAgICAgd2Via2l0X3dlYl9wbHVnaW5fc2V0X2VuYWJsZWQocGx1Z2luLCBGQUxTRSk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgd2Via2l0X3dlYl9wbHVnaW5fZGF0YWJhc2VfcGx1Z2luc19s
aXN0X2ZyZWUocGx1Z2luTGlzdCk7CisgICAgZ19hc3NlcnQoZm91bmQpOworICAgIGdfYXNzZXJ0
KGVuYWJsZWQpOworCisgICAgd2Via2l0X3dlYl9wbHVnaW5fZGF0YWJhc2VfcmVmcmVzaChkYXRh
YmFzZSk7CisgICAgcGx1Z2luTGlzdCA9IHdlYmtpdF93ZWJfcGx1Z2luX2RhdGFiYXNlX2dldF9w
bHVnaW5zKGRhdGFiYXNlKTsKKworICAgIGZvciAocCA9IHBsdWdpbkxpc3Q7IHA7IHAgPSBwLT5u
ZXh0KSB7CisgICAgICAgIFdlYktpdFdlYlBsdWdpbiogcGx1Z2luID0gKFdlYktpdFdlYlBsdWdp
biopcC0+ZGF0YTsKKyAgICAgICAgaWYgKCFnX3N0cmNtcDAod2Via2l0X3dlYl9wbHVnaW5fZ2V0
X25hbWUocGx1Z2luKSwgIldlYktpdCBUZXN0IFBsdWdJbiIpICYmCisgICAgICAgICAgICAhZ19z
dHJjbXAwKHdlYmtpdF93ZWJfcGx1Z2luX2dldF9kZXNjcmlwdGlvbihwbHVnaW4pLCAiU2ltcGxl
IE5ldHNjYXBlwq4gcGx1Zy1pbiB0aGF0IGhhbmRsZXMgdGVzdCBjb250ZW50IGZvciBXZWJLaXQi
KSkKKyAgICAgICAgICAgIGVuYWJsZWQgPSB3ZWJraXRfd2ViX3BsdWdpbl9nZXRfZW5hYmxlZChw
bHVnaW4pOworICAgIH0KKyAgICB3ZWJraXRfd2ViX3BsdWdpbl9kYXRhYmFzZV9wbHVnaW5zX2xp
c3RfZnJlZShwbHVnaW5MaXN0KTsKKyAgICBnX2Fzc2VydCghZW5hYmxlZCk7CisKKyAgICBnX29i
amVjdF91bnJlZih2aWV3KTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQor
eworICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKKworICAgIGdfdGVzdF9i
dWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7CisgICAgZ190ZXN0X2FkZF9mdW5j
KCIvd2Via2l0L3dlYnBsdWdpbmRhdGFiYXNlL2dldHBsdWdpbnMiLCB0ZXN0X3dlYmtpdF93ZWJf
cGx1Z2luX2RhdGFiYXNlX2dldF9wbHVnaW5zKTsKKyAgICByZXR1cm4gZ190ZXN0X3J1biAoKTsK
K30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3
ZWJyZXNvdXJjZS5jIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdl
YnJlc291cmNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM1OGI3YQot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rl
c3R3ZWJyZXNvdXJjZS5jCkBAIC0wLDAgKzEsMzMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA5IEphbiBNaWNoYWVsIEFsb256bworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8Z2xp
Yi5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKyNp
bmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+CisKKyNkZWZpbmUg
SU5ERVhfSFRNTCAiPGh0bWw+PC9odG1sPiIKKyNkZWZpbmUgTUFJTl9IVE1MICI8aHRtbD48aGVh
ZD48c2NyaXB0IGxhbmd1YWdlPVwiamF2YXNjcmlwdFwiIHNyYz1cIi9qYXZhc2NyaXB0LmpzXCI+
PC9zY3JpcHQ+PC9oZWFkPjxib2R5PjxoMT5oYWg8L2gxPjwvaHRtbD4iCisjZGVmaW5lIEpBVkFT
Q1JJUFQgImZ1bmN0aW9uIGJsYWggKCkgeyB2YXIgYSA9IDE7IH0iCisKK0dNYWluTG9vcCogbG9v
cDsKK1NvdXBTZXNzaW9uICpzZXNzaW9uOworY2hhciAqYmFzZV91cmk7CitXZWJLaXRXZWJSZXNv
dXJjZSogbWFpbl9yZXNvdXJjZTsKK1dlYktpdFdlYlJlc291cmNlKiBzdWJfcmVzb3VyY2U7CisK
K3R5cGVkZWYgc3RydWN0IHsKKyAgICBXZWJLaXRXZWJSZXNvdXJjZSogd2ViUmVzb3VyY2U7Cisg
ICAgV2ViS2l0V2ViVmlldyogd2ViVmlldzsKK30gV2ViUmVzb3VyY2VGaXh0dXJlOworCisvKiBG
b3IgcmVhbCByZXF1ZXN0IHRlc3RpbmcgKi8KK3N0YXRpYyB2b2lkCitzZXJ2ZXJfY2FsbGJhY2sg
KFNvdXBTZXJ2ZXIgKnNlcnZlciwgU291cE1lc3NhZ2UgKm1zZywKKyAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciAqcGF0aCwgR0hhc2hUYWJsZSAqcXVlcnksCisgICAgICAgICAgICAgICAgIFNv
dXBDbGllbnRDb250ZXh0ICpjb250ZXh0LCBncG9pbnRlciBkYXRhKQoreworICAgIGlmIChtc2ct
Pm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9z
dGF0dXMgKG1zZywgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzIChtc2csIFNPVVBfU1RBVFVT
X09LKTsKKworICAgIC8qIFJlZGlyZWN0ICovCisgICAgaWYgKGdfc3RyX2VxdWFsIChwYXRoLCAi
LyIpKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzIChtc2csIFNPVVBfU1RBVFVT
X01PVkVEX1BFUk1BTkVOVExZKTsKKworICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBl
bmQgKG1zZy0+cmVzcG9uc2VfaGVhZGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiTG9jYXRpb24iLCAiL2luZGV4Lmh0bWwiKTsKKyAgICB9IGVsc2UgaWYgKGdfc3Ry
X2VxdWFsIChwYXRoLCAiL2luZGV4Lmh0bWwiKSkgeworICAgICAgICBzb3VwX21lc3NhZ2VfYm9k
eV9hcHBlbmQgKG1zZy0+cmVzcG9uc2VfYm9keSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTT1VQX01FTU9SWV9DT1BZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIElOREVYX0hUTUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVu
IChJTkRFWF9IVE1MKSk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbCAocGF0aCwgIi9tYWlu
Lmh0bWwiKSkgeworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQgKG1zZy0+cmVzcG9u
c2VfYm9keSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT1VQX01FTU9SWV9D
T1BZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BSU5fSFRNTCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4gKE1BSU5fSFRNTCkpOworICAgIH0g
ZWxzZSBpZiAoZ19zdHJfZXF1YWwgKHBhdGgsICIvamF2YXNjcmlwdC5qcyIpKSB7CisgICAgICAg
IHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZCAobXNnLT5yZXNwb25zZV9ib2R5LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFNPVVBfTUVNT1JZX0NPUFksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgSkFWQVNDUklQVCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHJsZW4gKEpBVkFTQ1JJUFQpKTsKKyAgICB9CisKKworICAgIHNvdXBfbWVz
c2FnZV9ib2R5X2NvbXBsZXRlIChtc2ctPnJlc3BvbnNlX2JvZHkpOworfQorCitzdGF0aWMgdm9p
ZCB3ZWJfcmVzb3VyY2VfZml4dHVyZV9zZXR1cChXZWJSZXNvdXJjZUZpeHR1cmUqIGZpeHR1cmUs
IGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBmaXh0dXJlLT53ZWJWaWV3ID0gV0VCS0lUX1dF
Ql9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmplY3RfcmVmX3NpbmsoZml4
dHVyZS0+d2ViVmlldyk7CisgICAgY29uc3QgZ2NoYXIqIHdlYkRhdGEgPSAiPGh0bWw+PC9odG1s
PiI7CisgICAgZml4dHVyZS0+d2ViUmVzb3VyY2UgPSB3ZWJraXRfd2ViX3Jlc291cmNlX25ldyh3
ZWJEYXRhLCBzdHJsZW4od2ViRGF0YSksICJodHRwOi8vZXhhbXBsZS5jb20vIiwgInRleHQvaHRt
bCIsICJ1dGY4IiwgIkV4YW1wbGUuY29tIik7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+d2ViUmVz
b3VyY2UpOworfQorCitzdGF0aWMgdm9pZCB3ZWJfcmVzb3VyY2VfZml4dHVyZV90ZWFyZG93bihX
ZWJSZXNvdXJjZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBn
X2Fzc2VydChmaXh0dXJlLT53ZWJSZXNvdXJjZSk7CisgICAgZ19vYmplY3RfdW5yZWYoZml4dHVy
ZS0+d2ViUmVzb3VyY2UpOworICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPndlYlZpZXcpOwor
fQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VybChXZWJSZXNv
dXJjZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBnY2hhciog
dXJsOworICAgIGdfb2JqZWN0X2dldChHX09CSkVDVChmaXh0dXJlLT53ZWJSZXNvdXJjZSksICJ1
cmkiLCAmdXJsLCBOVUxMKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodXJsLCA9PSwgImh0dHA6Ly9l
eGFtcGxlLmNvbS8iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9yZXNvdXJjZV9n
ZXRfdXJpKGZpeHR1cmUtPndlYlJlc291cmNlKSAsPT0sImh0dHA6Ly9leGFtcGxlLmNvbS8iKTsK
KyAgICBnX2ZyZWUodXJsKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3Jlc291
cmNlX2dldF9kYXRhKFdlYlJlc291cmNlRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBk
YXRhKQoreworICAgIEdTdHJpbmcqIGNoYXJEYXRhID0gd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRf
ZGF0YShmaXh0dXJlLT53ZWJSZXNvdXJjZSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGNoYXJEYXRh
LT5zdHIsID09LCAiPGh0bWw+PC9odG1sPiIpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtp
dF93ZWJfcmVzb3VyY2VfZ2V0X21pbWVfdHlwZShXZWJSZXNvdXJjZUZpeHR1cmUqIGZpeHR1cmUs
IGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBnY2hhciogbWltZV90eXBlOworICAgIGdfb2Jq
ZWN0X2dldChHX09CSkVDVChmaXh0dXJlLT53ZWJSZXNvdXJjZSksICJtaW1lLXR5cGUiLCAmbWlt
ZV90eXBlLCBOVUxMKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIobWltZV90eXBlLCA9PSwgInRleHQv
aHRtbCIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3Jlc291cmNlX2dldF9taW1l
X3R5cGUoZml4dHVyZS0+d2ViUmVzb3VyY2UpLD09LCJ0ZXh0L2h0bWwiKTsKKyAgICBnX2ZyZWUo
bWltZV90eXBlKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3Jlc291cmNlX2dl
dF9lbmNvZGluZyhXZWJSZXNvdXJjZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0
YSkKK3sKKyAgICBnY2hhciogdGV4dF9lbmNvZGluZzsKKyAgICBnX29iamVjdF9nZXQoR19PQkpF
Q1QoZml4dHVyZS0+d2ViUmVzb3VyY2UpLCAiZW5jb2RpbmciLCAmdGV4dF9lbmNvZGluZywgTlVM
TCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHRfZW5jb2RpbmcsID09LCAidXRmOCIpOworICAg
IGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3Jlc291cmNlX2dldF9lbmNvZGluZyhmaXh0dXJl
LT53ZWJSZXNvdXJjZSksPT0sInV0ZjgiKTsKKyAgICBnX2ZyZWUodGV4dF9lbmNvZGluZyk7Cit9
CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZnJhbWVfbmFtZShX
ZWJSZXNvdXJjZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBn
Y2hhciogZnJhbWVfbmFtZTsKKyAgICBnX29iamVjdF9nZXQoR19PQkpFQ1QoZml4dHVyZS0+d2Vi
UmVzb3VyY2UpLCAiZnJhbWUtbmFtZSIsICZmcmFtZV9uYW1lLCBOVUxMKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIoZnJhbWVfbmFtZSwgPT0sICJFeGFtcGxlLmNvbSIpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfd2ViX3Jlc291cmNlX2dldF9mcmFtZV9uYW1lKGZpeHR1cmUtPndlYlJlc291
cmNlKSw9PSwiRXhhbXBsZS5jb20iKTsKKyAgICBnX2ZyZWUoZnJhbWVfbmFtZSk7Cit9CisKK3N0
YXRpYyB2b2lkIHJlc291cmNlX3JlcXVlc3Rfc3RhcnRpbmdfY2IoV2ViS2l0V2ViVmlldyogd2Vi
X3ZpZXcsIFdlYktpdFdlYkZyYW1lKiB3ZWJfZnJhbWUsIFdlYktpdFdlYlJlc291cmNlKiB3ZWJf
cmVzb3VyY2UsIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0LCBXZWJLaXROZXR3b3JrUmVz
cG9uc2UqIHJlc3BvbnNlLCBncG9pbnRlciBkYXRhKQoreworICAgIGdpbnQqIGJlZW5fdGhlcmUg
PSBkYXRhOworICAgICpiZWVuX3RoZXJlID0gKmJlZW5fdGhlcmUgKyAxOworCisgICAgaWYgKCpi
ZWVuX3RoZXJlID09IDEpIHsKKyAgICAgICAgZ19hc3NlcnQoIW1haW5fcmVzb3VyY2UpOworICAg
ICAgICBtYWluX3Jlc291cmNlID0gZ19vYmplY3RfcmVmKHdlYl9yZXNvdXJjZSk7CisKKyAgICAg
ICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaSh3ZWJfcmVzb3Vy
Y2UpLCA9PSwgYmFzZV91cmkpOworCisgICAgICAgIC8qIFRoaXMgc2hvdWxkIGJlIGEgcmVkaXJl
Y3QsIHNvIHRoZSByZXNwb25zZSBtdXN0IGJlIE5VTEwgKi8KKyAgICAgICAgZ19hc3NlcnQoIXJl
c3BvbnNlKTsKKyAgICB9IGVsc2UgaWYgKCpiZWVuX3RoZXJlID09IDIpIHsKKyAgICAgICAgY2hh
ciogdXJpID0gZ19zdHJkdXBfcHJpbnRmKCIlc2luZGV4Lmh0bWwiLCBiYXNlX3VyaSk7CisKKyAg
ICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaSh3ZWJfcmVz
b3VyY2UpLCA9PSwgdXJpKTsKKworICAgICAgICAvKiBDYW5jZWwgdGhlIHJlcXVlc3QuICovCisg
ICAgICAgIHdlYmtpdF9uZXR3b3JrX3JlcXVlc3Rfc2V0X3VyaShyZXF1ZXN0LCAiYWJvdXQ6Ymxh
bmsiKTsKKworICAgICAgICBnX2ZyZWUodXJpKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIG5v
dGlmeV9sb2FkX3N0YXR1c19jYihXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgR1BhcmFtU3BlYyog
cHNwZWMsIGdwb2ludGVyIGRhdGEpCit7CisgICAgaWYgKHdlYmtpdF93ZWJfdmlld19nZXRfbG9h
ZF9zdGF0dXMod2ViX3ZpZXcpID09IFdFQktJVF9MT0FEX0ZJTklTSEVEKSB7CisgICAgICAgIGdi
b29sZWFuKiBiZWVuX3RoZXJlID0gZGF0YTsKKyAgICAgICAgKmJlZW5fdGhlcmUgPSBUUlVFOwor
CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSh3ZWJfdmll
dyksID09LCAiYWJvdXQ6YmxhbmsiKTsKKworICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxvb3Ap
OworICAgIH0KK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJfcmVzb3VyY2VfbG9hZGluZygpCit7
CisgICAgV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dl
Yl92aWV3X25ldygpKTsKKyAgICBnaW50IGJlZW5fdG9fcmVzb3VyY2VfcmVxdWVzdF9zdGFydGlu
ZyA9IDA7CisgICAgZ2Jvb2xlYW4gYmVlbl90b19sb2FkX2ZpbmlzaGVkID0gRkFMU0U7CisgICAg
V2ViS2l0V2ViRnJhbWUqIHdlYl9mcmFtZTsKKyAgICBXZWJLaXRXZWJEYXRhU291cmNlKiBkYXRh
X3NvdXJjZTsKKworICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisKKyAg
ICBnX29iamVjdF9yZWZfc2luayh3ZWJfdmlldyk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdl
Yl92aWV3LCAicmVzb3VyY2UtcmVxdWVzdC1zdGFydGluZyIsCisgICAgICAgICAgICAgICAgICAg
ICBHX0NBTExCQUNLKHJlc291cmNlX3JlcXVlc3Rfc3RhcnRpbmdfY2IpLAorICAgICAgICAgICAg
ICAgICAgICAgJmJlZW5fdG9fcmVzb3VyY2VfcmVxdWVzdF9zdGFydGluZyk7CisKKyAgICBnX3Np
Z25hbF9jb25uZWN0KHdlYl92aWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsCisgICAgICAgICAg
ICAgICAgICAgICBHX0NBTExCQUNLKG5vdGlmeV9sb2FkX3N0YXR1c19jYiksCisgICAgICAgICAg
ICAgICAgICAgICAmYmVlbl90b19sb2FkX2ZpbmlzaGVkKTsKKworICAgIHdlYmtpdF93ZWJfdmll
d19sb2FkX3VyaSh3ZWJfdmlldywgYmFzZV91cmkpOworCisgICAgLyogV2Ugd29uJ3QgZ2V0IGZp
bmlzaGVkIGltbWVkaWF0ZWx5LCBiZWNhdXNlIG9mIHRoZSByZWRpcmVjdCAqLworICAgIGdfbWFp
bl9sb29wX3J1bihsb29wKTsKKyAgICAKKyAgICB3ZWJfZnJhbWUgPSB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X21haW5fZnJhbWUod2ViX3ZpZXcpOworICAgIGRhdGFfc291cmNlID0gd2Via2l0X3dlYl9m
cmFtZV9nZXRfZGF0YV9zb3VyY2Uod2ViX2ZyYW1lKTsKKworICAgIGdfYXNzZXJ0KG1haW5fcmVz
b3VyY2UpOworICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X21haW5fcmVz
b3VyY2UoZGF0YV9zb3VyY2UpID09IG1haW5fcmVzb3VyY2UpOworICAgIGdfb2JqZWN0X3VucmVm
KG1haW5fcmVzb3VyY2UpOworICAgIAorICAgIGdfYXNzZXJ0X2NtcGludChiZWVuX3RvX3Jlc291
cmNlX3JlcXVlc3Rfc3RhcnRpbmcsID09LCAyKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYmVlbl90
b19sb2FkX2ZpbmlzaGVkLCA9PSwgVFJVRSk7CisKKyAgICBnX29iamVjdF91bnJlZih3ZWJfdmll
dyk7CisgICAgZ19tYWluX2xvb3BfdW5yZWYobG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlc291
cmNlX3JlcXVlc3Rfc3RhcnRpbmdfc3ViX2NiKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBXZWJL
aXRXZWJGcmFtZSogd2ViX2ZyYW1lLCBXZWJLaXRXZWJSZXNvdXJjZSogd2ViX3Jlc291cmNlLCBX
ZWJLaXROZXR3b3JrUmVxdWVzdCogcmVxdWVzdCwgV2ViS2l0TmV0d29ya1Jlc3BvbnNlKiByZXNw
b25zZSwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBpZiAoIW1haW5fcmVzb3VyY2UpCisgICAgICAg
IG1haW5fcmVzb3VyY2UgPSBnX29iamVjdF9yZWYod2ViX3Jlc291cmNlKTsKKyAgICBlbHNlIGlm
ICghc3ViX3Jlc291cmNlKQorICAgICAgc3ViX3Jlc291cmNlID0gZ19vYmplY3RfcmVmKHdlYl9y
ZXNvdXJjZSk7Cit9CisKK3N0YXRpYyB2b2lkIG5vdGlmeV9sb2FkX3N0YXR1c19zdWJfY2IoV2Vi
S2l0V2ViVmlldyogd2ViX3ZpZXcsIEdQYXJhbVNwZWMqIHBzcGVjLCBncG9pbnRlciBkYXRhKQor
eworICAgIGlmICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYl92aWV3KSA9PSBX
RUJLSVRfTE9BRF9GSU5JU0hFRCkKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKK30K
Kworc3RhdGljIGdib29sZWFuIGlkbGVfcXVpdF9sb29wX2NiKGdwb2ludGVyIGRhdGEpCit7Cisg
ICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRp
YyB2b2lkIHRlc3Rfd2ViX3Jlc291cmNlX3N1Yl9yZXNvdXJjZV9sb2FkaW5nKCkKK3sKKyAgICBX
ZWJLaXRXZWJWaWV3KiB3ZWJfdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdf
bmV3KCkpOworICAgIFdlYktpdFdlYkZyYW1lKiB3ZWJfZnJhbWU7CisgICAgV2ViS2l0V2ViRGF0
YVNvdXJjZSogZGF0YV9zb3VyY2U7CisgICAgR0xpc3QqIHN1Yl9yZXNvdXJjZXM7CisgICAgY2hh
ciogdXJpID0gZ19zdHJkdXBfcHJpbnRmKCIlc21haW4uaHRtbCIsIGJhc2VfdXJpKTsKKworICAg
IG1haW5fcmVzb3VyY2UgPSBOVUxMOworICAgIAorICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXco
TlVMTCwgVFJVRSk7CisKKyAgICBnX29iamVjdF9yZWZfc2luayh3ZWJfdmlldyk7CisKKyAgICBn
X3NpZ25hbF9jb25uZWN0KHdlYl92aWV3LCAicmVzb3VyY2UtcmVxdWVzdC1zdGFydGluZyIsCisg
ICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKHJlc291cmNlX3JlcXVlc3Rfc3RhcnRpbmdf
c3ViX2NiKSwKKyAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgZ19zaWduYWxfY29u
bmVjdCh3ZWJfdmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLAorICAgICAgICAgICAgICAgICAg
ICAgR19DQUxMQkFDSyhub3RpZnlfbG9hZF9zdGF0dXNfc3ViX2NiKSwKKyAgICAgICAgICAgICAg
ICAgICAgIE5VTEwpOworCisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHdlYl92aWV3LCB1
cmkpOworCisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgLyogVGhlIG1haW4gcmVz
b3VyY2Ugc2hvdWxkIGJlIGxvYWRlZDsgbm93IGxldCdzIHdhaXQgZm9yIHRoZSBzdWItcmVzb3Vy
Y2UgdG8gbG9hZCAqLworICAgIGdfaWRsZV9hZGQoaWRsZV9xdWl0X2xvb3BfY2IsIE5VTEwpOwor
ICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKyAgICAKKyAgICBnX2Fzc2VydChtYWluX3Jlc291
cmNlICYmIHN1Yl9yZXNvdXJjZSk7CisgICAgZ19hc3NlcnQobWFpbl9yZXNvdXJjZSAhPSBzdWJf
cmVzb3VyY2UpOworCisgICAgd2ViX2ZyYW1lID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX2Zy
YW1lKHdlYl92aWV3KTsKKyAgICBkYXRhX3NvdXJjZSA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X2Rh
dGFfc291cmNlKHdlYl9mcmFtZSk7CisKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2RhdGFfc291
cmNlX2dldF9tYWluX3Jlc291cmNlKGRhdGFfc291cmNlKSA9PSBtYWluX3Jlc291cmNlKTsKKyAg
ICBnX29iamVjdF91bnJlZihtYWluX3Jlc291cmNlKTsKKworICAgIHN1Yl9yZXNvdXJjZXMgPSB3
ZWJraXRfd2ViX2RhdGFfc291cmNlX2dldF9zdWJyZXNvdXJjZXMoZGF0YV9zb3VyY2UpOworICAg
IC8vIEV4cGVjdGVkIHJlc291cmNlczogamF2YXNjcmlwdHMuanMsIGZhdmljb24uaWNvCisgICAg
Z19hc3NlcnQoc3ViX3Jlc291cmNlcyk7CisgICAgZ19hc3NlcnQoc3ViX3Jlc291cmNlcy0+bmV4
dCk7CisgICAgZ19hc3NlcnQoIXN1Yl9yZXNvdXJjZXMtPm5leHQtPm5leHQpOworCisgICAgLy8g
VGVzdCB0aGF0IHRoZSBvYmplY3Qgd2UgZ290IGZyb20gdGhlIGRhdGEgc291cmNlIGlzIHRoZSBz
YW1lCisgICAgLy8gdGhhdCB3ZW50IHRocm91Z2ggcmVzb3VyY2UtcmVxdWVzdC1zdGFydGluZy4g
Tm90ZSB0aGF0IHRoZSBvcmRlciBpcworICAgIC8vIG5vdCBpbXBvcnRhbnQgKGFuZCBub3QgZ3Vh
cmFudGVlZCBzaW5jZSB0aGUgcmVzb3VyY2VzIGFyZSBzdG9yZWQgaW4gYQorICAgIC8vIGhhc2h0
YWJsZSkuCisgICAgZ19hc3NlcnQoV0VCS0lUX1dFQl9SRVNPVVJDRShzdWJfcmVzb3VyY2VzLT5k
YXRhKSA9PSBzdWJfcmVzb3VyY2UKKyAgICAgICAgICAgICB8fCBXRUJLSVRfV0VCX1JFU09VUkNF
KHN1Yl9yZXNvdXJjZXMtPm5leHQtPmRhdGEpID09IHN1Yl9yZXNvdXJjZSk7CisKKyAgICBnX29i
amVjdF91bnJlZih3ZWJfdmlldyk7CisgICAgZ19tYWluX2xvb3BfdW5yZWYobG9vcCk7Cit9CisK
K2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBTb3VwU2VydmVyKiBzZXJ2
ZXI7CisgICAgU291cFVSSSogc291cF91cmk7CisKKyAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAm
YXJndiwgTlVMTCk7CisKKyAgICBzZXJ2ZXIgPSBzb3VwX3NlcnZlcl9uZXcoU09VUF9TRVJWRVJf
UE9SVCwgMCwgTlVMTCk7CisgICAgc291cF9zZXJ2ZXJfcnVuX2FzeW5jKHNlcnZlcik7CisKKyAg
ICBzb3VwX3NlcnZlcl9hZGRfaGFuZGxlcihzZXJ2ZXIsIE5VTEwsIHNlcnZlcl9jYWxsYmFjaywg
TlVMTCwgTlVMTCk7CisKKyAgICBzb3VwX3VyaSA9IHNvdXBfdXJpX25ldygiaHR0cDovLzEyNy4w
LjAuMS8iKTsKKyAgICBzb3VwX3VyaV9zZXRfcG9ydChzb3VwX3VyaSwgc291cF9zZXJ2ZXJfZ2V0
X3BvcnQoc2VydmVyKSk7CisKKyAgICBiYXNlX3VyaSA9IHNvdXBfdXJpX3RvX3N0cmluZyhzb3Vw
X3VyaSwgRkFMU0UpOworICAgIHNvdXBfdXJpX2ZyZWUoc291cF91cmkpOworCisgICAgZ190ZXN0
X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYWRkKCIv
d2Via2l0L3dlYnJlc291cmNlL2dldF91cmwiLAorICAgICAgICAgICAgICAgV2ViUmVzb3VyY2VG
aXh0dXJlLCAwLCB3ZWJfcmVzb3VyY2VfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRl
c3Rfd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJsLCB3ZWJfcmVzb3VyY2VfZml4dHVyZV90ZWFy
ZG93bik7CisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC93ZWJyZXNvdXJjZS9nZXRfbWltZV90eXBl
IiwKKyAgICAgICAgICAgICAgIFdlYlJlc291cmNlRml4dHVyZSwgMCwgd2ViX3Jlc291cmNlX2Zp
eHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0
X21pbWVfdHlwZSwgd2ViX3Jlc291cmNlX2ZpeHR1cmVfdGVhcmRvd24pOworICAgIGdfdGVzdF9h
ZGQoIi93ZWJraXQvd2VicmVzb3VyY2UvZ2V0X3RleHRfZW5jb2RpbmdfbmFtZSIsCisgICAgICAg
ICAgICAgICBXZWJSZXNvdXJjZUZpeHR1cmUsIDAsIHdlYl9yZXNvdXJjZV9maXh0dXJlX3NldHVw
LAorICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfd2ViX3Jlc291cmNlX2dldF9lbmNvZGluZywg
d2ViX3Jlc291cmNlX2ZpeHR1cmVfdGVhcmRvd24pOworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQv
d2VicmVzb3VyY2UvZ2V0X2ZyYW1lX25hbWUiLAorICAgICAgICAgICAgICAgV2ViUmVzb3VyY2VG
aXh0dXJlLCAwLCB3ZWJfcmVzb3VyY2VfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRl
c3Rfd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZnJhbWVfbmFtZSwgd2ViX3Jlc291cmNlX2ZpeHR1
cmVfdGVhcmRvd24pOworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvd2VicmVzb3VyY2UvZ2V0X2Rh
dGEiLAorICAgICAgICAgICAgICAgV2ViUmVzb3VyY2VGaXh0dXJlLCAwLCB3ZWJfcmVzb3VyY2Vf
Zml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X3dlYl9yZXNvdXJjZV9n
ZXRfZGF0YSwgd2ViX3Jlc291cmNlX2ZpeHR1cmVfdGVhcmRvd24pOworCisgICAgZ190ZXN0X2Fk
ZF9mdW5jKCIvd2Via2l0L3dlYnJlc291cmNlL2xvYWRpbmciLCB0ZXN0X3dlYl9yZXNvdXJjZV9s
b2FkaW5nKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2VicmVzb3VyY2Uvc3ViX3Jl
c291cmNlX2xvYWRpbmciLCB0ZXN0X3dlYl9yZXNvdXJjZV9zdWJfcmVzb3VyY2VfbG9hZGluZyk7
CisKKyAgICByZXR1cm4gZ190ZXN0X3J1biAoKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJzZXR0aW5ncy5jIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYnNldHRpbmdzLmMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMzU0ODljZAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJzZXR0aW5ncy5jCkBAIC0wLDAgKzEs
MTU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEphbiBNaWNoYWVsIEFsb256bworICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4K
KyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+CisKKy8qIFByaXZhdGUgQVBJICovCitjaGFyKiB3
ZWJraXRXZWJTZXR0aW5nc1VzZXJBZ2VudEZvclVSSShXZWJLaXRXZWJTZXR0aW5ncyAqc2V0dGlu
Z3MsIGNvbnN0IGNoYXIgKnVyaSk7CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9zZXR0
aW5nc19jb3B5KHZvaWQpCit7CisgICAgV2ViS2l0V2ViU2V0dGluZ3MgKnNldHRpbmdzID0gd2Vi
a2l0X3dlYl9zZXR0aW5nc19uZXcoKTsKKworICAgIC8vIFNldCBzb21lIG5vbi1kZWZhdWx0IHNl
dHRpbmdzIHRvIHZlcmlmeSB0aGF0IHNldHRpbmdzIGFyZSBwcm9wZXJseSBjb3BpZWQuCisgICAg
Z19vYmplY3Rfc2V0KHNldHRpbmdzLAorICAgICAgICAgICAgICAgICAiZW5hYmxlLXdlYmdsIiwg
VFJVRSwKKyAgICAgICAgICAgICAgICAgImVuYWJsZS1mdWxsc2NyZWVuIiwgVFJVRSwKKyAgICAg
ICAgICAgICAgICAgImF1dG8tbG9hZC1pbWFnZXMiLCBGQUxTRSwKKyAgICAgICAgICAgICAgICAg
ImRlZmF1bHQtZW5jb2RpbmciLCAidXRmLTgiLAorICAgICAgICAgICAgICAgICAiZW5hYmxlLW1l
ZGlhc291cmNlIiwgVFJVRSwKKyAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICBXZWJLaXRX
ZWJTZXR0aW5ncyAqY29weSA9IHdlYmtpdF93ZWJfc2V0dGluZ3NfY29weShzZXR0aW5ncyk7CisK
KyAgICBnYm9vbGVhbiBlbmFibGVXZWJHTCA9IEZBTFNFOworICAgIGdib29sZWFuIGVuYWJsZUZ1
bGxzY3JlZW4gPSBGQUxTRTsKKyAgICBnYm9vbGVhbiBhdXRvTG9hZEltYWdlcyA9IEZBTFNFOwor
ICAgIGdib29sZWFuIGVuYWJsZU1lZGlhU291cmNlID0gRkFMU0U7CisgICAgY2hhciAqZGVmYXVs
dEVuY29kaW5nID0gMDsKKyAgICBnX29iamVjdF9nZXQoY29weSwKKyAgICAgICAgICAgICAgICAg
ImVuYWJsZS1mdWxsc2NyZWVuIiwgJmVuYWJsZUZ1bGxzY3JlZW4sCisgICAgICAgICAgICAgICAg
ICJlbmFibGUtd2ViZ2wiLCAmZW5hYmxlV2ViR0wsCisgICAgICAgICAgICAgICAgICJhdXRvLWxv
YWQtaW1hZ2VzIiwgJmF1dG9Mb2FkSW1hZ2VzLAorICAgICAgICAgICAgICAgICAiZGVmYXVsdC1l
bmNvZGluZyIsICZkZWZhdWx0RW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICJlbmFibGUtbWVk
aWFzb3VyY2UiLCAmZW5hYmxlTWVkaWFTb3VyY2UsCisgICAgICAgICAgICAgICAgIE5VTEwpOwor
CisgICAgZ19hc3NlcnQoZW5hYmxlV2ViR0wpOworICAgIGdfYXNzZXJ0KGVuYWJsZUZ1bGxzY3Jl
ZW4pOworICAgIGdfYXNzZXJ0KCFhdXRvTG9hZEltYWdlcyk7CisgICAgZ19hc3NlcnRfY21wc3Ry
KGRlZmF1bHRFbmNvZGluZywgPT0sICJ1dGYtOCIpOworICAgIGdfYXNzZXJ0KGVuYWJsZU1lZGlh
U291cmNlKTsKKyAgICBnX2ZyZWUoZGVmYXVsdEVuY29kaW5nKTsKK30KKworc3RhdGljIHZvaWQg
dGVzdF9ub25fcXVpcmt5X3VzZXJfYWdlbnRzKFdlYktpdFdlYlNldHRpbmdzICpzZXR0aW5ncywg
Y29uc3QgY2hhciAqZGVmYXVsdFVzZXJBZ2VudCkKK3sKKyAgICBjaGFyICp1c2VyQWdlbnQgPSAw
OworCisgICAgLy8gdGVzdCBhIGN1c3RvbSBVQSBzdHJpbmcKKyAgICB1c2VyQWdlbnQgPSAwOwor
ICAgIGdfb2JqZWN0X3NldChzZXR0aW5ncywgInVzZXItYWdlbnQiLCAidGVzdHdlYnNldHRpbmdz
LzAuMSIsIE5VTEwpOworICAgIGdfb2JqZWN0X2dldChzZXR0aW5ncywidXNlci1hZ2VudCIsICZ1
c2VyQWdlbnQsIE5VTEwpOworICAgIGdfYXNzZXJ0X2NtcHN0cih1c2VyQWdlbnQsID09LCAidGVz
dHdlYnNldHRpbmdzLzAuMSIpOworICAgIGdfZnJlZSh1c2VyQWdlbnQpOworCisgICAgLy8gc2V0
dGluZyBpdCB0byBOVUxMIG9yIGFuIGVtcHR5IHZhbHVlIHNob3VsZCBnaXZlIHVzIHRoZSBkZWZh
dWx0IFVBIHN0cmluZworICAgIHVzZXJBZ2VudCA9IDA7CisgICAgZ19vYmplY3Rfc2V0KHNldHRp
bmdzLCAidXNlci1hZ2VudCIsIDAsIE5VTEwpOworICAgIGdfb2JqZWN0X2dldChzZXR0aW5ncywi
dXNlci1hZ2VudCIsICZ1c2VyQWdlbnQsIE5VTEwpOworICAgIGdfYXNzZXJ0X2NtcHN0cih1c2Vy
QWdlbnQsID09LCBkZWZhdWx0VXNlckFnZW50KTsKKyAgICBnX2ZyZWUodXNlckFnZW50KTsKKwor
ICAgIHVzZXJBZ2VudCA9IDA7CisgICAgZ19vYmplY3Rfc2V0KHNldHRpbmdzLCAidXNlci1hZ2Vu
dCIsICIiLCBOVUxMKTsKKyAgICBnX29iamVjdF9nZXQoc2V0dGluZ3MsInVzZXItYWdlbnQiLCAm
dXNlckFnZW50LCBOVUxMKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodXNlckFnZW50LCA9PSwgZGVm
YXVsdFVzZXJBZ2VudCk7CisgICAgZ19mcmVlKHVzZXJBZ2VudCk7Cit9CisKK3N0YXRpYyB2b2lk
IHRlc3Rfd2Via2l0X3dlYl9zZXR0aW5nc191c2VyX2FnZW50KHZvaWQpCit7CisgICAgV2ViS2l0
V2ViU2V0dGluZ3MgKnNldHRpbmdzOworICAgIEd0a1dpZGdldCAqd2ViVmlldzsKKyAgICBjaGFy
ICpkZWZhdWx0VXNlckFnZW50OworICAgIGNoYXIgKnVzZXJBZ2VudCA9IDA7CisgICAgZ190ZXN0
X2J1ZygiMTczNzUiKTsKKworICAgIHdlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7Cisg
ICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7CisKKyAgICBzZXR0aW5ncyA9IHdlYmtpdF93
ZWJfdmlld19nZXRfc2V0dGluZ3MoV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpKTsKKyAgICBkZWZh
dWx0VXNlckFnZW50ID0gZ19zdHJkdXAod2Via2l0X3dlYl9zZXR0aW5nc19nZXRfdXNlcl9hZ2Vu
dChzZXR0aW5ncykpOworCisgICAgdGVzdF9ub25fcXVpcmt5X3VzZXJfYWdlbnRzKHNldHRpbmdz
LCBkZWZhdWx0VXNlckFnZW50KTsKKworICAgIC8qIFRlc3QgcXVpcmt5IGdvb2dsZSBkb21haW5z
ICovCisgICAgZ19vYmplY3Rfc2V0KHNldHRpbmdzLCAidXNlci1hZ2VudCIsICJ0ZXN0d2Vic2V0
dGluZ3MvMC4xIiwgTlVMTCk7CisKKyAgICB1c2VyQWdlbnQgPSB3ZWJraXRXZWJTZXR0aW5nc1Vz
ZXJBZ2VudEZvclVSSShzZXR0aW5ncywgImh0dHA6Ly93d3cuZ29vZ2xlLmNvbS8iKTsKKyAgICBn
X2Fzc2VydF9jbXBzdHIodXNlckFnZW50LCA9PSwgInRlc3R3ZWJzZXR0aW5ncy8wLjEiKTsKKyAg
ICBnX2ZyZWUodXNlckFnZW50KTsKKworICAgIHVzZXJBZ2VudCA9IHdlYmtpdFdlYlNldHRpbmdz
VXNlckFnZW50Rm9yVVJJKHNldHRpbmdzLCAiaHR0cDovL2dtYWlsLmNvbS8iKTsKKyAgICBnX2Fz
c2VydF9jbXBzdHIodXNlckFnZW50LCA9PSwgInRlc3R3ZWJzZXR0aW5ncy8wLjEiKTsKKyAgICBn
X2ZyZWUodXNlckFnZW50KTsKKworICAgIHVzZXJBZ2VudCA9IHdlYmtpdFdlYlNldHRpbmdzVXNl
ckFnZW50Rm9yVVJJKHNldHRpbmdzLCAiaHR0cDovL3d3dy5nb29nbGUuY29tLmJyLyIpOworICAg
IGdfYXNzZXJ0X2NtcHN0cih1c2VyQWdlbnQsID09LCAidGVzdHdlYnNldHRpbmdzLzAuMSIpOwor
ICAgIGdfZnJlZSh1c2VyQWdlbnQpOworCisgICAgdXNlckFnZW50ID0gd2Via2l0V2ViU2V0dGlu
Z3NVc2VyQWdlbnRGb3JVUkkoc2V0dGluZ3MsICJodHRwOi8vY2FsZW5kYXIuZ29vZ2xlLmNvbS8i
KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodXNlckFnZW50LCA9PSwgInRlc3R3ZWJzZXR0aW5ncy8w
LjEiKTsKKyAgICBnX2ZyZWUodXNlckFnZW50KTsKKworICAgIC8qIE5vdyBlbmFibGUgcXVpcmtz
IGhhbmRsaW5nICovCisgICAgZ19vYmplY3Rfc2V0KHNldHRpbmdzLCAiZW5hYmxlLXNpdGUtc3Bl
Y2lmaWMtcXVpcmtzIiwgVFJVRSwgTlVMTCk7CisKKyAgICB0ZXN0X25vbl9xdWlya3lfdXNlcl9h
Z2VudHMoc2V0dGluZ3MsIGRlZmF1bHRVc2VyQWdlbnQpOworCisgICAgZ19vYmplY3Rfc2V0KHNl
dHRpbmdzLCAidXNlci1hZ2VudCIsICJ0ZXN0d2Vic2V0dGluZ3MvMC4xIiwgTlVMTCk7CisKKyAg
ICB1c2VyQWdlbnQgPSB3ZWJraXRXZWJTZXR0aW5nc1VzZXJBZ2VudEZvclVSSShzZXR0aW5ncywg
Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbS8iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodXNlckFnZW50
LCA9PSwgZGVmYXVsdFVzZXJBZ2VudCk7CisgICAgZ19mcmVlKHVzZXJBZ2VudCk7CisKKyAgICB1
c2VyQWdlbnQgPSB3ZWJraXRXZWJTZXR0aW5nc1VzZXJBZ2VudEZvclVSSShzZXR0aW5ncywgImh0
dHA6Ly9nbWFpbC5jb20vIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHVzZXJBZ2VudCwgPT0sIGRl
ZmF1bHRVc2VyQWdlbnQpOworICAgIGdfZnJlZSh1c2VyQWdlbnQpOworCisgICAgdXNlckFnZW50
ID0gd2Via2l0V2ViU2V0dGluZ3NVc2VyQWdlbnRGb3JVUkkoc2V0dGluZ3MsICJodHRwOi8vd3d3
Lmdvb2dsZS5jb20uYnIvIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHVzZXJBZ2VudCwgPT0sIGRl
ZmF1bHRVc2VyQWdlbnQpOworICAgIGdfZnJlZSh1c2VyQWdlbnQpOworCisgICAgdXNlckFnZW50
ID0gd2Via2l0V2ViU2V0dGluZ3NVc2VyQWdlbnRGb3JVUkkoc2V0dGluZ3MsICJodHRwOi8vd3d3
Lmdvb2dsZS51ay5ub3QuY29tLmJyLyIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih1c2VyQWdlbnQs
ID09LCAidGVzdHdlYnNldHRpbmdzLzAuMSIpOworICAgIGdfZnJlZSh1c2VyQWdlbnQpOworCisg
ICAgZ19mcmVlKGRlZmF1bHRVc2VyQWdlbnQpOworICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcp
OworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgZ3RrX3Rlc3Rf
aW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vic2V0
dGluZ3MvdXNlcl9hZ2VudCIsIHRlc3Rfd2Via2l0X3dlYl9zZXR0aW5nc191c2VyX2FnZW50KTsK
KyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vic2V0dGluZ3MvY29weSIsIHRlc3Rfd2Vi
a2l0X3dlYl9zZXR0aW5nc19jb3B5KTsKKyAgICByZXR1cm4gZ190ZXN0X3J1biAoKTsKK30KZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJ2aWV3
LmMgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2Vidmlldy5jCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0ZDkyYTIKLS0tIC9kZXYvbnVsbAor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2Vidmlldy5jCkBA
IC0wLDAgKzEsNzQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBl
dGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgQ29sbGFib3JhIEx0ZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAidGVzdF91dGlscy5oIgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx1
bmlzdGQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNs
dWRlIDxnbGliL2dzdGRpby5oPgorI2luY2x1ZGUgPGdkay9nZGsuaD4KKyNpbmNsdWRlIDxnZGsv
Z2Rra2V5c3ltcy5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Vi
a2l0Lmg+CisKK0dNYWluTG9vcCogbG9vcDsKK1NvdXBTZXNzaW9uICpzZXNzaW9uOworY2hhciog
YmFzZV91cmk7CisKKy8qIEZvciByZWFsIHJlcXVlc3QgdGVzdGluZyAqLworc3RhdGljIHZvaWQK
K3NlcnZlcl9jYWxsYmFjayhTb3VwU2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtc2csCisg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqIHF1ZXJ5LAorICAg
ICAgICAgICAgICAgICBTb3VwQ2xpZW50Q29udGV4dCogY29udGV4dCwgZ3BvaW50ZXIgZGF0YSkK
K3sKKyAgICBpZiAobXNnLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7CisgICAgICAgIHNv
dXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1zZywgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1z
ZywgU09VUF9TVEFUVVNfT0spOworCisgICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvZmF2aWNv
bi5pY28iKSkgeworICAgICAgICBjaGFyKiBjb250ZW50czsKKyAgICAgICAgZ3NpemUgbGVuZ3Ro
OworICAgICAgICBHRXJyb3IqIGVycm9yID0gTlVMTDsKKworICAgICAgICBnX2ZpbGVfZ2V0X2Nv
bnRlbnRzKCJibGFuay5pY28iLCAmY29udGVudHMsICZsZW5ndGgsICZlcnJvcik7CisgICAgICAg
IGdfYXNzZXJ0KCFlcnJvcik7CisKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1z
Zy0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgY29udGVudHMsIGxlbmd0aCk7Cisg
ICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2JpZ2Rpdi5odG1sIikpIHsKKyAgICAg
ICAgY2hhciogY29udGVudHMgPSBnX3N0cmR1cCgiPGh0bWw+PGJvZHk+PGEgaWQ9XCJsaW5rXCIg
aHJlZj1cImh0dHA6Ly9hYmMuZGVmXCI+dGVzdDwvYT48ZGl2IHN0eWxlPVwiYmFja2dyb3VuZC1j
b2xvcjogZ3JlZW47IGhlaWdodDogMTIwMHB4O1wiPjwvZGl2PjwvYm9keT48L2h0bWw+Iik7Cisg
ICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtc2ctPnJlc3BvbnNlX2JvZHksIFNPVVBf
TUVNT1JZX1RBS0UsIGNvbnRlbnRzLCBzdHJsZW4oY29udGVudHMpKTsKKyAgICB9IGVsc2UgaWYg
KGdfc3RyX2VxdWFsKHBhdGgsICIvaWZyYW1lLmh0bWwiKSkgeworICAgICAgICBjaGFyKiBjb250
ZW50cyA9IGdfc3RyZHVwKCI8aHRtbD48Ym9keSBpZD1cInNvbWUtY29udGVudFwiPjxkaXYgc3R5
bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiBncmVlbjsgaGVpZ2h0OiA1MHB4O1wiPjwvZGl2PjxpZnJh
bWUgc3JjPVwiYmlnZGl2Lmh0bWxcIj48L2lmcmFtZT48L2JvZHk+PC9odG1sPiIpOworICAgICAg
ICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobXNnLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9S
WV9UQUtFLCBjb250ZW50cywgc3RybGVuKGNvbnRlbnRzKSk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgY2hhciogY29udGVudHMgPSBnX3N0cmR1cCgiPGh0bWw+PGJvZHk+dGVzdDwvYm9keT48L2h0
bWw+Iik7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtc2ctPnJlc3BvbnNlX2Jv
ZHksIFNPVVBfTUVNT1JZX1RBS0UsIGNvbnRlbnRzLCBzdHJsZW4oY29udGVudHMpKTsKKyAgICB9
CisKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtc2ctPnJlc3BvbnNlX2JvZHkpOwor
fQorCitzdGF0aWMgdm9pZCBpZGxlX3F1aXRfbG9vcF9jYihXZWJLaXRXZWJWaWV3KiB3ZWJfdmll
dywgR1BhcmFtU3BlYyogcHNwZWMsIGdwb2ludGVyIGRhdGEpCit7CisgICAgaWYgKHdlYmtpdF93
ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMod2ViX3ZpZXcpID09IFdFQktJVF9MT0FEX0ZJTklTSEVE
IHx8CisgICAgICAgIHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMod2ViX3ZpZXcpID09
IFdFQktJVF9MT0FEX0ZBSUxFRCkKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKK30K
Kworc3RhdGljIGdib29sZWFuIHRpbWVvdXRfY2IoZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBnX2Vy
cm9yKCJEaWRuJ3QgZ2V0IGljb24tdXJpIGJlZm9yZSB0aW1pbmcgb3V0LiIpOworICAgIHJldHVy
biBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgaWNvbl91cmlfY2hhbmdlZF9jYihXZWJLaXRXZWJW
aWV3KiB3ZWJfdmlldywgR1BhcmFtU3BlYyogcHNwZWMsIGdwb2ludGVyIGRhdGEpCit7CisgICAg
Y2hhciogZXhwZWN0ZWRfdXJpOworCisgICAgZ19hc3NlcnRfY21wc3RyKGdfcGFyYW1fc3BlY19n
ZXRfbmFtZShwc3BlYyksID09LCAiaWNvbi11cmkiKTsKKworICAgIGV4cGVjdGVkX3VyaSA9IGdf
c3RyZHVwX3ByaW50ZigiJXNmYXZpY29uLmljbyIsIGJhc2VfdXJpKTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIod2Via2l0X3dlYl92aWV3X2dldF9pY29uX3VyaSh3ZWJfdmlldyksID09LCBleHBlY3Rl
ZF91cmkpOworICAgIGdfZnJlZShleHBlY3RlZF91cmkpOworCisgICAgZ19tYWluX2xvb3BfcXVp
dChsb29wKTsKK30KKworc3RhdGljIHZvaWQgaWNvbl9sb2FkZWRfY2IoV2ViS2l0V2ViVmlldyog
d2ViX3ZpZXcsIGNoYXIqIGljb25fdXJpLCBncG9pbnRlciBkYXRhKQoreworICAgIGdib29sZWFu
KiBiZWVuX2hlcmUgPSAoZ2Jvb2xlYW4qKWRhdGE7CisgICAgY2hhciogZXhwZWN0ZWRfdXJpID0g
Z19zdHJkdXBfcHJpbnRmKCIlc2Zhdmljb24uaWNvIiwgYmFzZV91cmkpOworICAgIGdfYXNzZXJ0
X2NtcHN0cihpY29uX3VyaSwgPT0sIGV4cGVjdGVkX3VyaSk7CisgICAgZ19mcmVlKGV4cGVjdGVk
X3VyaSk7CisKKyAgICBnX2Fzc2VydF9jbXBzdHIoaWNvbl91cmksID09LCB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X2ljb25fdXJpKHdlYl92aWV3KSk7CisKKyAgICAqYmVlbl9oZXJlID0gVFJVRTsKK30K
Kworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3ZpZXdfaWNvbl91cmkoKQoreworICAgIGdi
b29sZWFuIGJlZW5fdG9faWNvbl9sb2FkZWQgPSBGQUxTRTsKKyAgICBXZWJLaXRXZWJWaWV3KiB2
aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmpl
Y3RfcmVmX3NpbmsoR19PQkpFQ1QodmlldykpOworCisgICAgbG9vcCA9IGdfbWFpbl9sb29wX25l
dyhOVUxMLCBUUlVFKTsKKworICAgIGdfb2JqZWN0X2Nvbm5lY3QoR19PQkpFQ1QodmlldyksCisg
ICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjpub3RpZnk6Omljb24tdXJpIiwgaWNvbl91cmlf
Y2hhbmdlZF9jYiwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6Omljb24tbG9h
ZGVkIiwgaWNvbl9sb2FkZWRfY2IsICZiZWVuX3RvX2ljb25fbG9hZGVkLAorICAgICAgICAgICAg
ICAgICAgICAgTlVMTCk7CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkodmlldywgYmFz
ZV91cmkpOworCisgICAgZ3VpbnQgdGltZW91dF9pZCA9IGdfdGltZW91dF9hZGQoNTAwLCB0aW1l
b3V0X2NiLCAwKTsKKworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIGdfc291cmNl
X3JlbW92ZSh0aW1lb3V0X2lkKTsKKworICAgIGdfYXNzZXJ0KGJlZW5fdG9faWNvbl9sb2FkZWQp
OworCisgICAgZ19vYmplY3RfdW5yZWYodmlldyk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBtYXBf
ZXZlbnRfY2IoR3RrV2lkZ2V0ICp3aWRnZXQsIEdka0V2ZW50KiBldmVudCwgZ3BvaW50ZXIgZGF0
YSkKK3sKKyAgICBHTWFpbkxvb3AqIGxvb3AgPSAoR01haW5Mb29wKilkYXRhOworICAgIGdfbWFp
bl9sb29wX3F1aXQobG9vcCk7CisKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBnYm9v
bGVhbiBxdWl0X2FmdGVyX3Nob3J0X2RlbGF5X2NiKGdwb2ludGVyIGRhdGEpCit7CisgICAgZ19t
YWluX2xvb3BfcXVpdCgoR01haW5Mb29wKilkYXRhKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisK
K3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl92aWV3X2dyYWJfZm9jdXMoKQoreworICAgIGNo
YXIqIHVyaSA9IGdfc3RyY29uY2F0KGJhc2VfdXJpLCAiaWZyYW1lLmh0bWwiLCBOVUxMKTsKKyAg
ICBHdGtXaWRnZXQqIHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfUE9QVVApOwor
ICAgIEd0a1dpZGdldCogc2Nyb2xsZWRfd2luZG93ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19uZXco
TlVMTCwgTlVMTCk7CisgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IFdFQktJVF9XRUJfVklFVyh3
ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIEd0a0FkanVzdG1lbnQqIGFkanVzdG1lbnQ7CisK
KyAgICBndGtfd2luZG93X3NldF9kZWZhdWx0X3NpemUoR1RLX1dJTkRPVyh3aW5kb3cpLCA0MDAs
IDIwMCk7CisKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHNj
cm9sbGVkX3dpbmRvdyk7CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihzY3Jv
bGxlZF93aW5kb3cpLCBHVEtfV0lER0VUKHZpZXcpKTsKKworICAgIGd0a19zY3JvbGxlZF93aW5k
b3dfc2V0X3BvbGljeShHVEtfU0NST0xMRURfV0lORE9XKHNjcm9sbGVkX3dpbmRvdyksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19QT0xJQ1lfQVVUT01BVElDLCBHVEtf
UE9MSUNZX0FVVE9NQVRJQyk7CisKKyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRS
VUUpOworCisgICAgZ19zaWduYWxfY29ubmVjdCh2aWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIs
IEdfQ0FMTEJBQ0soaWRsZV9xdWl0X2xvb3BfY2IpLCBOVUxMKTsKKworICAgIC8qIFdhaXQgZm9y
IHdpbmRvdyB0byBzaG93IHVwICovCisgICAgZ3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpOwor
ICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2luZG93LCAibWFwLWV2ZW50IiwKKyAgICAgICAgICAgICAg
ICAgICAgIEdfQ0FMTEJBQ0sobWFwX2V2ZW50X2NiKSwgbG9vcCk7CisgICAgZ19tYWluX2xvb3Bf
cnVuKGxvb3ApOworCisgICAgLyogTG9hZCBhIHBhZ2Ugd2l0aCBhIGJpZyBkaXYgdGhhdCB3aWxs
IGNhdXNlIHNjcm9sbGJhcnMgdG8gYXBwZWFyICovCisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRf
dXJpKHZpZXcsIHVyaSk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgYWRqdXN0
bWVudCA9IGd0a19zY3JvbGxlZF93aW5kb3dfZ2V0X3ZhZGp1c3RtZW50KEdUS19TQ1JPTExFRF9X
SU5ET1coc2Nyb2xsZWRfd2luZG93KSk7CisgICAgZ19hc3NlcnRfY21wZmxvYXQoZ3RrX2FkanVz
dG1lbnRfZ2V0X3ZhbHVlKGFkanVzdG1lbnQpLCA9PSwgMC4wKTsKKworICAgIC8qIFNpbmNlIHdl
YmtpdF93ZWJfdmlld19leGVjdXRlX3NjcmlwdCBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZSwKKyAg
ICAgICBpdCBpcyBpbXBvc3NpYmxlIHRvIGtub3cgaWYgYW4gaW5uZXIgZG9jdW1lbnQgaGFzIGZv
Y3VzIGFmdGVyCisgICAgICAgYSBub2RlIG9mIGl0IHdhcyBmb2N1c2VkIHZpYSAuZm9jdXMoKSBt
ZXRob2QuCisgICAgICAgVGhlIGNvZGUgYmVsb3cgaXMgYW4gd29ya2Fyb3VuZDogaWYgdGhlIG5v
ZGUgaGFzIGZvY3VzLCBhIHNjcm9sbAorICAgICAgIGFjdGlvbiBpcyBwZXJmb3JtZWQgYW5kIGFm
dGVyd2FyZCBpdCBpcyBjaGVja2VkIGlmIHRoZSBhZGp1c3RtZW50CisgICAgICAgaGFzIHRvIGJl
IGRpZmZlcmVudCBmcm9tIDAuCisgICAgKi8KKyAgICBjaGFyIHNjcmlwdFtdID0gInZhciBpbm5l
ckRvYyA9IGRvY3VtZW50LmRlZmF1bHRWaWV3LmZyYW1lc1swXS5kb2N1bWVudDsgXAorICAgICAg
ICAgICAgICAgICAgICAgaW5uZXJEb2MuZ2V0RWxlbWVudEJ5SWQoXCJsaW5rXCIpLmZvY3VzKCk7
ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICBpZiAoaW5uZXJEb2MuaGFzRm9j
dXMoKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHdpbmRvdy5zY3JvbGxCeSgwLCAxMDApOyI7CisKKyAgICAvKiBGb2N1cyBhbiBlbGVt
ZW50IHVzaW5nIEphdmFTY3JpcHQgKi8KKyAgICB3ZWJraXRfd2ViX3ZpZXdfZXhlY3V0ZV9zY3Jp
cHQodmlldywgc2NyaXB0KTsKKworICAgIC8qIEFkanVzdG1lbnRzIHVwZGF0ZSBhc3luY2hyb25v
dXNseSwgc28gd2UgbXVzdCB3YWl0IGEgYml0LiAqLworICAgIGdfdGltZW91dF9hZGQoMTAwLCBx
dWl0X2FmdGVyX3Nob3J0X2RlbGF5X2NiLCBsb29wKTsKKyAgICBnX21haW5fbG9vcF9ydW4obG9v
cCk7CisKKyAgICAvKiBNYWtlIHN1cmUgdGhlIFNjcm9sbGVkV2luZG93IG5vdGljZWQgdGhlIHNj
cm9sbCAqLworICAgIGdfYXNzZXJ0X2NtcGZsb2F0KGd0a19hZGp1c3RtZW50X2dldF92YWx1ZShh
ZGp1c3RtZW50KSwgIT0sIDAuMCk7CisKKyAgICBnX2ZyZWUodXJpKTsKKyAgICBndGtfd2lkZ2V0
X2Rlc3Ryb3kod2luZG93KTsKK30KKworc3RhdGljIHZvaWQgZG9fdGVzdF93ZWJraXRfd2ViX3Zp
ZXdfYWRqdXN0bWVudHMoZ2Jvb2xlYW4gd2l0aF9wYWdlX2NhY2hlKQoreworICAgIGNoYXIqIGVm
ZmVjdGl2ZV91cmkgPSBnX3N0cmNvbmNhdChiYXNlX3VyaSwgImJpZ2Rpdi5odG1sIiwgTlVMTCk7
CisgICAgY2hhciogc2Vjb25kX3VyaSA9IGdfc3RyY29uY2F0KGJhc2VfdXJpLCAiaWZyYW1lLmh0
bWwiLCBOVUxMKTsKKyAgICBHdGtXaWRnZXQqIHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19X
SU5ET1dfVE9QTEVWRUwpOworICAgIEd0a1dpZGdldCogc2Nyb2xsZWRfd2luZG93ID0gZ3RrX3Nj
cm9sbGVkX3dpbmRvd19uZXcoTlVMTCwgTlVMTCk7CisgICAgV2ViS2l0V2ViVmlldyogdmlldyA9
IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIEd0a0FkanVzdG1l
bnQqIGFkanVzdG1lbnQ7CisgICAgZG91YmxlIGxvd2VyOworICAgIGRvdWJsZSB1cHBlcjsKKwor
ICAgIGlmICh3aXRoX3BhZ2VfY2FjaGUpIHsKKyAgICAgICAgV2ViS2l0V2ViU2V0dGluZ3MqIHNl
dHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh2aWV3KTsKKyAgICAgICAgZ19v
YmplY3Rfc2V0KHNldHRpbmdzLCAiZW5hYmxlLXBhZ2UtY2FjaGUiLCBUUlVFLCBOVUxMKTsKKyAg
ICB9CisKKyAgICBndGtfd2luZG93X3NldF9kZWZhdWx0X3NpemUoR1RLX1dJTkRPVyh3aW5kb3cp
LCA0MDAsIDIwMCk7CisKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRv
dyksIHNjcm9sbGVkX3dpbmRvdyk7CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5F
UihzY3JvbGxlZF93aW5kb3cpLCBHVEtfV0lER0VUKHZpZXcpKTsKKworICAgIGd0a19zY3JvbGxl
ZF93aW5kb3dfc2V0X3BvbGljeShHVEtfU0NST0xMRURfV0lORE9XKHNjcm9sbGVkX3dpbmRvdyks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19QT0xJQ1lfQVVUT01BVElD
LCBHVEtfUE9MSUNZX0FVVE9NQVRJQyk7CisKKyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5V
TEwsIFRSVUUpOworCisgICAgZ19vYmplY3RfY29ubmVjdChHX09CSkVDVCh2aWV3KSwKKyAgICAg
ICAgICAgICAgICAgICAgICJzaWduYWw6Om5vdGlmeTo6bG9hZC1zdGF0dXMiLCBpZGxlX3F1aXRf
bG9vcF9jYiwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgLyogV2Fp
dCBmb3Igd2luZG93IHRvIHNob3cgdXAgKi8KKyAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRv
dyk7CisgICAgZ19zaWduYWxfY29ubmVjdCh3aW5kb3csICJtYXAtZXZlbnQiLAorICAgICAgICAg
ICAgICAgICAgICAgR19DQUxMQkFDSyhtYXBfZXZlbnRfY2IpLCBsb29wKTsKKyAgICBnX21haW5f
bG9vcF9ydW4obG9vcCk7CisKKyAgICAvKiBMb2FkIGEgcGFnZSB3aXRoIGEgYmlnIGRpdiB0aGF0
IHdpbGwgY2F1c2Ugc2Nyb2xsYmFycyB0byBhcHBlYXIgKi8KKyAgICB3ZWJraXRfd2ViX3ZpZXdf
bG9hZF91cmkodmlldywgZWZmZWN0aXZlX3VyaSk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3Ap
OworCisgICAgLyogQWRqdXN0bWVudHMgdXBkYXRlIGFzeW5jaHJvbm91c2x5LCBzbyB3ZSBtdXN0
IHdhaXQgYSBiaXQuICovCisgICAgZ190aW1lb3V0X2FkZCgxMDAsIHF1aXRfYWZ0ZXJfc2hvcnRf
ZGVsYXlfY2IsIGxvb3ApOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIGFkanVz
dG1lbnQgPSBndGtfc2Nyb2xsZWRfd2luZG93X2dldF92YWRqdXN0bWVudChHVEtfU0NST0xMRURf
V0lORE9XKHNjcm9sbGVkX3dpbmRvdykpOworICAgIGdfYXNzZXJ0X2NtcGZsb2F0KGd0a19hZGp1
c3RtZW50X2dldF92YWx1ZShhZGp1c3RtZW50KSwgPT0sIDAuMCk7CisKKyAgICBsb3dlciA9IGd0
a19hZGp1c3RtZW50X2dldF9sb3dlcihhZGp1c3RtZW50KTsKKyAgICB1cHBlciA9IGd0a19hZGp1
c3RtZW50X2dldF91cHBlcihhZGp1c3RtZW50KTsKKworICAgIC8qIFNjcm9sbCB0aGUgdmlldyB1
c2luZyBKYXZhU2NyaXB0ICovCisgICAgd2Via2l0X3dlYl92aWV3X2V4ZWN1dGVfc2NyaXB0KHZp
ZXcsICJ3aW5kb3cuc2Nyb2xsQnkoMCwgMTAwKSIpOworCisgICAgLyogQWRqdXN0bWVudHMgdXBk
YXRlIGFzeW5jaHJvbm91c2x5LCBzbyB3ZSBtdXN0IHdhaXQgYSBiaXQuICovCisgICAgZ190aW1l
b3V0X2FkZCgxMDAsIHF1aXRfYWZ0ZXJfc2hvcnRfZGVsYXlfY2IsIGxvb3ApOworICAgIGdfbWFp
bl9sb29wX3J1bihsb29wKTsKKworICAgIC8qIE1ha2Ugc3VyZSB0aGUgU2Nyb2xsZWRXaW5kb3cg
bm90aWNlZCB0aGUgc2Nyb2xsICovCisgICAgZ19hc3NlcnRfY21wZmxvYXQoZ3RrX2FkanVzdG1l
bnRfZ2V0X3ZhbHVlKGFkanVzdG1lbnQpLCA9PSwgMTAwLjApOworCisgICAgLyogTG9hZCBhIHNl
Y29uZCBVUkkgKi8KKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkodmlldywgc2Vjb25kX3Vy
aSk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgLyogVGhlIHBhZ2UgbG9hZGVk
IGJ1dCB0aGUgYWRqdXN0bWVudHMgbWF5IG5vdCBiZSB1cGRhdGVkIHlldC4gV2FpdCBhIGJpdC4g
Ki8KKyAgICBnX3RpbWVvdXRfYWRkKDEwMCwgcXVpdF9hZnRlcl9zaG9ydF9kZWxheV9jYiwgbG9v
cCk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgLyogTWFrZSBzdXJlIHRoZSBz
Y3JvbGxiYXIgaGFzIGJlZW4gcmVzZXQgKi8KKyAgICBnX2Fzc2VydF9jbXBmbG9hdChndGtfYWRq
dXN0bWVudF9nZXRfdmFsdWUoYWRqdXN0bWVudCksID09LCAwLjApOworCisgICAgLyogR28gYmFj
ayAqLworICAgIHdlYmtpdF93ZWJfdmlld19nb19iYWNrKHZpZXcpOworCisgICAgLyogV2hlbiB1
c2luZyBwYWdlIGNhY2hlLCBnb19iYWNrIHdpbGwgcmV0dXJuIHN5bmNyb25vdXNseSAqLworICAg
IGlmICghd2l0aF9wYWdlX2NhY2hlKQorICAgICAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisK
KyAgICAvKiBNYWtlIHN1cmUgR1RLKyBoYXMgdGltZSB0byBwcm9jZXNzIHRoZSBjaGFuZ2VzIGlu
IHNpemUsIGZvciB0aGUgYWRqdXNtZW50cyAqLworICAgIHdoaWxlIChndGtfZXZlbnRzX3BlbmRp
bmcoKSkKKyAgICAgICAgZ3RrX21haW5faXRlcmF0aW9uKCk7CisKKyAgICAvKiBNYWtlIHN1cmUg
dXBwZXIgYW5kIGxvd2VyIGJvdW5kcyBoYXZlIGJlZW4gcmVzdG9yZWQgY29ycmVjdGx5ICovCisg
ICAgZ19hc3NlcnRfY21wZmxvYXQobG93ZXIsID09LCBndGtfYWRqdXN0bWVudF9nZXRfbG93ZXIo
YWRqdXN0bWVudCkpOworICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHVwcGVyLCA9PSwgZ3RrX2FkanVz
dG1lbnRfZ2V0X3VwcGVyKGFkanVzdG1lbnQpKTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdChndGtf
YWRqdXN0bWVudF9nZXRfdmFsdWUoYWRqdXN0bWVudCksID09LCAxMDAuMCk7CisKKyAgICBnX2Zy
ZWUoZWZmZWN0aXZlX3VyaSk7CisgICAgZ19mcmVlKHNlY29uZF91cmkpOworCisgICAgZ3RrX3dp
ZGdldF9kZXN0cm95KHdpbmRvdyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl92
aWV3X2FkanVzdG1lbnRzKCkKK3sKKyAgICAvKiBUZXN0IHRoaXMgd2l0aCBwYWdlIGNhY2hlIGRp
c2FibGVkLCBhbmQgZW5hYmxlZC4gKi8KKyAgICBkb190ZXN0X3dlYmtpdF93ZWJfdmlld19hZGp1
c3RtZW50cyhGQUxTRSk7CisgICAgZG9fdGVzdF93ZWJraXRfd2ViX3ZpZXdfYWRqdXN0bWVudHMo
VFJVRSk7Cit9CisKK2dib29sZWFuIGRlbGF5ZWRfZGVzdHJveShncG9pbnRlciBkYXRhKQorewor
ICAgIGd0a193aWRnZXRfZGVzdHJveShHVEtfV0lER0VUKGRhdGEpKTsKKyAgICBnX21haW5fbG9v
cF9xdWl0KGxvb3ApOworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93
ZWJraXRfd2ViX3ZpZXdfZGVzdHJveSgpCit7CisgICAgR3RrV2lkZ2V0KiB3aW5kb3c7CisgICAg
R3RrV2lkZ2V0KiB3ZWJfdmlldzsKKworICAgIHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19X
SU5ET1dfVE9QTEVWRUwpOworICAgIHdlYl92aWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygpOwor
CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB3ZWJfdmlldyk7
CisKKyAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7CisKKyAgICBsb29wID0gZ19tYWlu
X2xvb3BfbmV3KE5VTEwsIFRSVUUpOworCisgICAgZ19zaWduYWxfY29ubmVjdCh3aW5kb3csICJt
YXAtZXZlbnQiLAorICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhtYXBfZXZlbnRfY2Ip
LCBsb29wKTsKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICBnX2lkbGVfYWRkKGRl
bGF5ZWRfZGVzdHJveSwgd2ViX3ZpZXcpOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKwor
ICAgIGd0a193aWRnZXRfZGVzdHJveSh3aW5kb3cpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dl
YmtpdF93ZWJfdmlld193aW5kb3dfZmVhdHVyZXMoKQoreworICAgIEd0a1dpZGdldCogd2luZG93
OworICAgIEd0a1dpZGdldCogd2ViX3ZpZXc7CisgICAgCisgICAgd2luZG93ID0gZ3RrX3dpbmRv
d19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7CisgICAgd2ViX3ZpZXcgPSB3ZWJraXRfd2ViX3Zp
ZXdfbmV3KCk7CisgICAgCisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5k
b3cpLCB3ZWJfdmlldyk7CisgICAgCisgICAgZ3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpOwor
ICAgIAorICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisKKyAgICBnX3Np
Z25hbF9jb25uZWN0KHdpbmRvdywgIm1hcC1ldmVudCIsCisgICAgICAgICAgICAgICAgICAgICBH
X0NBTExCQUNLKG1hcF9ldmVudF9jYiksIGxvb3ApOworICAgIGdfbWFpbl9sb29wX3J1bihsb29w
KTsKKyAgICAKKyAgICAvKiBCdWcgIzM2MTQ0ICovCisgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNU
KHdlYl92aWV3KSwgIndpbmRvdy1mZWF0dXJlcyIsIE5VTEwsIE5VTEwpOworICAgIAorICAgIGd0
a193aWRnZXRfZGVzdHJveSh3aW5kb3cpOworfSAgICAKKworc3RhdGljIHZvaWQgdGVzdF93ZWJr
aXRfd2ViX3ZpZXdfaW5fb2Zmc2NyZWVuX3dpbmRvd19kb2VzX25vdF9jcmFzaCgpCit7CisgICAg
bG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKKworICAgIEd0a1dpZGdldCAqd2lu
ZG93ID0gZ3RrX29mZnNjcmVlbl93aW5kb3dfbmV3KCk7CisgICAgR3RrV2lkZ2V0ICp3ZWJfdmll
dyA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKKworICAgIGd0a19jb250YWluZXJfYWRkKEdUS19D
T05UQUlORVIod2luZG93KSwgd2ViX3ZpZXcpOworICAgIGd0a193aWRnZXRfc2hvd19hbGwod2lu
ZG93KTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdlYl92aWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1
cyIsIEdfQ0FMTEJBQ0soaWRsZV9xdWl0X2xvb3BfY2IpLCBOVUxMKTsKKyAgICB3ZWJraXRfd2Vi
X3ZpZXdfbG9hZF91cmkoV0VCS0lUX1dFQl9WSUVXKHdlYl92aWV3KSwgYmFzZV91cmkpOworCisg
ICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgZ3RrX3dpZGdldF9kZXN0cm95KHdpbmRv
dyk7CisgICAgZ19tYWluX2xvb3BfdW5yZWYobG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rf
d2Via2l0X3dlYl92aWV3X2RvZXNfbm90X3N0ZWFsX2ZvY3VzKCkKK3sKKyAgICBsb29wID0gZ19t
YWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworCisgICAgR3RrV2lkZ2V0ICp3aW5kb3cgPSBndGtf
b2Zmc2NyZWVuX3dpbmRvd19uZXcoKTsKKyAgICBHdGtXaWRnZXQgKndlYlZpZXcgPSB3ZWJraXRf
d2ViX3ZpZXdfbmV3KCk7CisgICAgR3RrV2lkZ2V0ICplbnRyeSA9IGd0a19lbnRyeV9uZXcoKTsK
KworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAgR3RrV2lkZ2V0ICpib3ggPSBndGtfaGJv
eF9uZXcoRkFMU0UsIDApOworI2Vsc2UKKyAgICBHdGtXaWRnZXQgKmJveCA9IGd0a19ib3hfbmV3
KEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFMLCAwKTsKKyNlbmRpZgorCisgICAgZ3RrX2NvbnRh
aW5lcl9hZGQoR1RLX0NPTlRBSU5FUihib3gpLCB3ZWJWaWV3KTsKKyAgICBndGtfY29udGFpbmVy
X2FkZChHVEtfQ09OVEFJTkVSKGJveCksIGVudHJ5KTsKKyAgICBndGtfY29udGFpbmVyX2FkZChH
VEtfQ09OVEFJTkVSKHdpbmRvdyksIGJveCk7CisgICAgZ3RrX3dpZGdldF9zaG93X2FsbCh3aW5k
b3cpOworCisgICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKGVudHJ5KTsKKyAgICBnX2Fzc2VydChn
dGtfd2lkZ2V0X2lzX2ZvY3VzKGVudHJ5KSk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZp
ZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhpZGxlX3F1aXRfbG9vcF9jYiks
IE5VTEwpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX2h0bWxfc3RyaW5nKFdFQktJVF9XRUJf
VklFVyh3ZWJWaWV3KSwKKyAgICAgICAgIjxodG1sPjxib2R5PiIKKyAgICAgICAgIiAgICA8aW5w
dXQgaWQ9XCJlbnRyeVwiIHR5cGU9XCJ0ZXh0XCIvPiIKKyAgICAgICAgIiAgICA8c2NyaXB0PiIK
KyAgICAgICAgIiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJlbnRyeVwiKS5mb2N1
cygpOyIKKyAgICAgICAgIiAgICA8L3NjcmlwdD4iCisgICAgICAgICI8L2JvZHk+PC9odG1sPiIs
ICJmaWxlOi8vIik7CisKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICBnX2Fzc2Vy
dChndGtfd2lkZ2V0X2lzX2ZvY3VzKGVudHJ5KSk7CisKKyAgICBndGtfd2lkZ2V0X2Rlc3Ryb3ko
d2luZG93KTsKKyAgICBnX21haW5fbG9vcF91bnJlZihsb29wKTsKK30KKworc3RhdGljIGdib29s
ZWFuIGVtaXRLZXlTdHJva2UoV2ViS2l0V2ViVmlldyogd2ViVmlldykKK3sKKyAgICBHZGtFdmVu
dCogcHJlc3NFdmVudCA9IGdka19ldmVudF9uZXcoR0RLX0tFWV9QUkVTUyk7CisgICAgcHJlc3NF
dmVudC0+a2V5LmtleXZhbCA9IEdES19LRVlfZjsKKyAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IGd0
a193aWRnZXRfZ2V0X3dpbmRvdyhHVEtfV0lER0VUKHdlYlZpZXcpKTsKKyAgICBwcmVzc0V2ZW50
LT5rZXkud2luZG93ID0gd2luZG93OworICAgIGdfb2JqZWN0X3JlZihwcmVzc0V2ZW50LT5rZXku
d2luZG93KTsKKworI2lmbmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorICAgIEdka0RldmljZU1hbmFn
ZXIqIG1hbmFnZXIgPSBnZGtfZGlzcGxheV9nZXRfZGV2aWNlX21hbmFnZXIoZ2RrX3dpbmRvd19n
ZXRfZGlzcGxheSh3aW5kb3cpKTsKKyAgICBnZGtfZXZlbnRfc2V0X2RldmljZShwcmVzc0V2ZW50
LCBnZGtfZGV2aWNlX21hbmFnZXJfZ2V0X2NsaWVudF9wb2ludGVyKG1hbmFnZXIpKTsKKyNlbmRp
ZgorCisgICAgLy8gV2hlbiBzeW50aGVzaXppbmcgYW4gZXZlbnQsIGFuIGludmFsaWQgaGFyZHdh
cmVfa2V5Y29kZSB2YWx1ZQorICAgIC8vIGNhbiBjYXVzZSBpdCB0byBiZSBiYWRseSBwcm9jZXNz
ZWQgYnkgR3RrKy4KKyAgICBHZGtLZXltYXBLZXkqIGtleXM7CisgICAgZ2ludCBuX2tleXM7Cisg
ICAgaWYgKGdka19rZXltYXBfZ2V0X2VudHJpZXNfZm9yX2tleXZhbChnZGtfa2V5bWFwX2dldF9k
ZWZhdWx0KCksIEdES19LRVlfZiwgJmtleXMsICZuX2tleXMpKSB7CisgICAgICAgIHByZXNzRXZl
bnQtPmtleS5oYXJkd2FyZV9rZXljb2RlID0ga2V5c1swXS5rZXljb2RlOworICAgICAgICBnX2Zy
ZWUoa2V5cyk7CisgICAgfQorCisgICAgR2RrRXZlbnQqIHJlbGVhc2VFdmVudCA9IGdka19ldmVu
dF9jb3B5KHByZXNzRXZlbnQpOworICAgIGd0a19tYWluX2RvX2V2ZW50KHByZXNzRXZlbnQpOwor
ICAgIGdka19ldmVudF9mcmVlKHByZXNzRXZlbnQpOworICAgIHJlbGVhc2VFdmVudC0+a2V5LnR5
cGUgPSBHREtfS0VZX1JFTEVBU0U7CisgICAgZ3RrX21haW5fZG9fZXZlbnQocmVsZWFzZUV2ZW50
KTsKKyAgICBnZGtfZXZlbnRfZnJlZShyZWxlYXNlRXZlbnQpOworCisgICAgcmV0dXJuIEZBTFNF
OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gZW50ZXJpbmdfZnVsbHNjcmVlbl9jYihXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3LCBHT2JqZWN0KiBlbGVtZW50LCBnYm9vbGVhbiBibG9ja2VkKQoreworICAg
IGlmIChibG9ja2VkKQorICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworICAgIGVsc2UK
KyAgICAgICAgZ190aW1lb3V0X2FkZCgyMDAsIChHU291cmNlRnVuYykgZW1pdEtleVN0cm9rZSwg
d2ViVmlldyk7CisgICAgcmV0dXJuIGJsb2NrZWQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBsZWF2
aW5nX2Z1bGxzY3JlZW5fY2IoV2ViS2l0V2ViVmlldyogd2ViVmlldywgR09iamVjdCogZWxlbWVu
dCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworICAgIHJl
dHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3ZpZXdfZnVsbHNj
cmVlbihnY29uc3Rwb2ludGVyIGJsb2NrZWQpCit7CisgICAgR3RrV2lkZ2V0KiB3aW5kb3c7Cisg
ICAgR3RrV2lkZ2V0KiB3ZWJfdmlldzsKKyAgICBXZWJLaXRXZWJTZXR0aW5ncyAqc2V0dGluZ3M7
CisKKyAgICB3aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKKyAg
ICB3ZWJfdmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKKworICAgIHNldHRpbmdzID0gd2Vi
a2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyhXRUJLSVRfV0VCX1ZJRVcod2ViX3ZpZXcpKTsKKyAg
ICBnX29iamVjdF9zZXQoc2V0dGluZ3MsICJlbmFibGUtZnVsbHNjcmVlbiIsIFRSVUUsIE5VTEwp
OworICAgIHdlYmtpdF93ZWJfdmlld19zZXRfc2V0dGluZ3MoV0VCS0lUX1dFQl9WSUVXKHdlYl92
aWV3KSwgc2V0dGluZ3MpOworCisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3
aW5kb3cpLCB3ZWJfdmlldyk7CisKKyAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7CisK
KyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworCisgICAgZ19zaWduYWxf
Y29ubmVjdCh3ZWJfdmlldywgImVudGVyaW5nLWZ1bGxzY3JlZW4iLCBHX0NBTExCQUNLKGVudGVy
aW5nX2Z1bGxzY3JlZW5fY2IpLCAoZ3BvaW50ZXIpIGJsb2NrZWQpOworICAgIGdfc2lnbmFsX2Nv
bm5lY3Qod2ViX3ZpZXcsICJsZWF2aW5nLWZ1bGxzY3JlZW4iLCBHX0NBTExCQUNLKGxlYXZpbmdf
ZnVsbHNjcmVlbl9jYiksIE5VTEwpOworCisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5n
KFdFQktJVF9XRUJfVklFVyh3ZWJfdmlldyksICI8aHRtbD48Ym9keT4iCisgICAgICAgICAgICAg
ICAgICAgIjxzY3JpcHQ+IgorICAgICAgICAgICAgICAgICAgICJ2YXIgZXZlbnROYW1lID0gJ2tl
eXByZXNzJzsiCisgICAgICAgICAgICAgICAgICAgImRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIo
ZXZlbnROYW1lLCBmdW5jdGlvbiAoKSB7IgorICAgICAgICAgICAgICAgICAgICIgICAgZG9jdW1l
bnQuZG9jdW1lbnRFbGVtZW50LndlYmtpdFJlcXVlc3RGdWxsU2NyZWVuKCk7IgorICAgICAgICAg
ICAgICAgICAgICJ9LCBmYWxzZSk7IgorICAgICAgICAgICAgICAgICAgICI8L3NjcmlwdD48L2Jv
ZHk+PC9odG1sPiIsIE5VTEwsIE5VTEwsIE5VTEwpOworCisgICAgZ190aW1lb3V0X2FkZCgxMDAs
IChHU291cmNlRnVuYykgZW1pdEtleVN0cm9rZSwgV0VCS0lUX1dFQl9WSUVXKHdlYl92aWV3KSk7
CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgZ3RrX3dpZGdldF9kZXN0cm95KHdp
bmRvdyk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBjaGVja01pbWVUeXBlRm9yRmlsdGVyKEd0a0Zp
bGVGaWx0ZXIqIGZpbHRlciwgY29uc3QgZ2NoYXIqIG1pbWVUeXBlKQoreworICAgIEd0a0ZpbGVG
aWx0ZXJJbmZvIGZpbHRlcl9pbmZvOworICAgIGZpbHRlcl9pbmZvLmNvbnRhaW5zID0gR1RLX0ZJ
TEVfRklMVEVSX01JTUVfVFlQRTsKKyAgICBmaWx0ZXJfaW5mby5taW1lX3R5cGUgPSBtaW1lVHlw
ZTsKKyAgICByZXR1cm4gZ3RrX2ZpbGVfZmlsdGVyX2ZpbHRlcihmaWx0ZXIsICZmaWx0ZXJfaW5m
byk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBydW5GaWxlQ2hvb3NlckNiTm9NdWx0aXNlbE5vTWlt
ZShXZWJLaXRXZWJWaWV3KiB3ZWJ2aWV3LCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVl
c3QsIGdwb2ludGVyIGRhdGEpCit7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9maWxlX2Nob29zZXJf
cmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxlKHJlcXVlc3QpKTsKKworICAgIGNvbnN0IGdjaGFy
KiBjb25zdCogbWltZVR5cGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1l
X3R5cGVzKHJlcXVlc3QpOworICAgIGdfYXNzZXJ0KCFtaW1lVHlwZXMpOworICAgIEd0a0ZpbGVG
aWx0ZXIqIGZpbHRlciA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBl
c19maWx0ZXIocmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIWZpbHRlcik7CisKKyAgICBjb25zdCBn
Y2hhciogY29uc3QqIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rf
Z2V0X3NlbGVjdGVkX2ZpbGVzKHJlcXVlc3QpOworICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZpbGVz
KTsKKworICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisK
K3N0YXRpYyBnYm9vbGVhbiBydW5GaWxlQ2hvb3NlckNiTXVsdGlzZWxOb01pbWUoV2ViS2l0V2Vi
Vmlldyogd2VidmlldywgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0LCBncG9pbnRl
ciBkYXRhKQoreworICAgIGdfYXNzZXJ0KHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRf
c2VsZWN0X211bHRpcGxlKHJlcXVlc3QpKTsKKworICAgIGNvbnN0IGdjaGFyKiBjb25zdCogbWlt
ZVR5cGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKHJlcXVl
c3QpOworICAgIGdfYXNzZXJ0KCFtaW1lVHlwZXMpOworICAgIEd0a0ZpbGVGaWx0ZXIqIGZpbHRl
ciA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIocmVx
dWVzdCk7CisgICAgZ19hc3NlcnQoIWZpbHRlcik7CisgICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBz
ZWxlY3RlZEZpbGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9m
aWxlcyhyZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxlcyk7CisKKyAgICAvLyBT
ZWxlY3Qgc29tZSBmaWxlcy4KKyAgICBjb25zdCBnY2hhciogZmlsZXNUb1NlbGVjdFs0XSA9IHsg
Ii9mb28iLCAiL2Zvby9iYXIiLCAiL2Zvby9iYXIvYmF6IiwgMCB9OworICAgIHdlYmtpdF9maWxl
X2Nob29zZXJfcmVxdWVzdF9zZWxlY3RfZmlsZXMocmVxdWVzdCwgZmlsZXNUb1NlbGVjdCk7CisK
KyAgICAvLyBDaGVjayB0aGUgZmlsZXMgdGhhdCBoYXZlIGJlZW4ganVzdCBzZWxlY3RlZC4KKyAg
ICBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3Rl
ZF9maWxlcyhyZXF1ZXN0KTsKKyAgICBnX2Fzc2VydChzZWxlY3RlZEZpbGVzKTsKKyAgICBnX2Fz
c2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1swXSwgPT0sICIvZm9vIik7CisgICAgZ19hc3NlcnRf
Y21wc3RyKHNlbGVjdGVkRmlsZXNbMV0sID09LCAiL2Zvby9iYXIiKTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIoc2VsZWN0ZWRGaWxlc1syXSwgPT0sICIvZm9vL2Jhci9iYXoiKTsKKyAgICBnX2Fzc2Vy
dCghc2VsZWN0ZWRGaWxlc1szXSk7CisKKyAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworICAg
IHJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gcnVuRmlsZUNob29zZXJDYlNlbGVj
dGlvblJldGFpbmVkKFdlYktpdFdlYlZpZXcqIHdlYnZpZXcsIFdlYktpdEZpbGVDaG9vc2VyUmVx
dWVzdCogcmVxdWVzdCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBjb25zdCBnY2hhciogY29uc3Qq
IHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVk
X2ZpbGVzKHJlcXVlc3QpOworICAgIGdfYXNzZXJ0KHNlbGVjdGVkRmlsZXMpOworICAgIGdfYXNz
ZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzBdLCA9PSwgIi9mb28iKTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIoc2VsZWN0ZWRGaWxlc1sxXSwgPT0sICIvZm9vL2JhciIpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cihzZWxlY3RlZEZpbGVzWzJdLCA9PSwgIi9mb28vYmFyL2JheiIpOworICAgIGdfYXNzZXJ0
KCFzZWxlY3RlZEZpbGVzWzNdKTsKKworICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7CisgICAg
cmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBydW5GaWxlQ2hvb3NlckNiTm9NdWx0
aXNlbEFjY2VwdFR5cGVzKFdlYktpdFdlYlZpZXcqIHdlYnZpZXcsIFdlYktpdEZpbGVDaG9vc2Vy
UmVxdWVzdCogcmVxdWVzdCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBnX2Fzc2VydCghd2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RfbXVsdGlwbGUocmVxdWVzdCkpOworCisg
ICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBtaW1lVHlwZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3Jl
cXVlc3RfZ2V0X21pbWVfdHlwZXMocmVxdWVzdCk7CisgICAgZ19hc3NlcnQobWltZVR5cGVzKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIobWltZVR5cGVzWzBdLCA9PSwgImF1ZGlvLyoiKTsKKyAgICBn
X2Fzc2VydF9jbXBzdHIobWltZVR5cGVzWzFdLCA9PSwgInZpZGVvLyoiKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIobWltZVR5cGVzWzJdLCA9PSwgImltYWdlLyoiKTsKKyAgICBnX2Fzc2VydCghbWlt
ZVR5cGVzWzNdKTsKKworICAgIEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciA9IHdlYmtpdF9maWxlX2No
b29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIocmVxdWVzdCk7CisgICAgZ19hc3Nl
cnQoR1RLX0lTX0ZJTEVfRklMVEVSKGZpbHRlcikpOworICAgIGdfYXNzZXJ0KGNoZWNrTWltZVR5
cGVGb3JGaWx0ZXIoZmlsdGVyLCAiYXVkaW8vKiIpKTsKKyAgICBnX2Fzc2VydChjaGVja01pbWVU
eXBlRm9yRmlsdGVyKGZpbHRlciwgInZpZGVvLyoiKSk7CisgICAgZ19hc3NlcnQoY2hlY2tNaW1l
VHlwZUZvckZpbHRlcihmaWx0ZXIsICJpbWFnZS8qIikpOworCisgICAgY29uc3QgZ2NoYXIqIGNv
bnN0KiBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxl
Y3RlZF9maWxlcyhyZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxlcyk7CisKKyAg
ICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworICAgIHJldHVybiBUUlVFOworfQorCit2b2lkIGRv
TW91c2VCdXR0b25FdmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRUeXBlIGV2ZW50VHlw
ZSwgaW50IHgsIGludCB5LCB1bnNpZ25lZCBpbnQgYnV0dG9uLCB1bnNpZ25lZCBpbnQgbW9kaWZp
ZXJzKQoreworICAgIGdfYXNzZXJ0KGd0a193aWRnZXRfZ2V0X3JlYWxpemVkKHdpZGdldCkpOwor
CisgICAgR2RrRXZlbnQqIGV2ZW50ID0gZ2RrX2V2ZW50X25ldyhldmVudFR5cGUpOworICAgIGV2
ZW50LT5idXR0b24ud2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KHdpZGdldCk7CisgICAg
Z19vYmplY3RfcmVmKGV2ZW50LT5idXR0b24ud2luZG93KTsKKworICAgIGV2ZW50LT5idXR0b24u
dGltZSA9IEdES19DVVJSRU5UX1RJTUU7CisgICAgZXZlbnQtPmJ1dHRvbi54ID0geDsKKyAgICBl
dmVudC0+YnV0dG9uLnkgPSB5OworICAgIGV2ZW50LT5idXR0b24uYXhlcyA9IDA7CisgICAgZXZl
bnQtPmJ1dHRvbi5zdGF0ZSA9IG1vZGlmaWVyczsKKyAgICBldmVudC0+YnV0dG9uLmJ1dHRvbiA9
IGJ1dHRvbjsKKworI2lmbmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorICAgIGV2ZW50LT5idXR0b24u
ZGV2aWNlID0gZ2RrX2RldmljZV9tYW5hZ2VyX2dldF9jbGllbnRfcG9pbnRlcihnZGtfZGlzcGxh
eV9nZXRfZGV2aWNlX21hbmFnZXIoZ3RrX3dpZGdldF9nZXRfZGlzcGxheSh3aWRnZXQpKSk7Cisj
ZW5kaWYKKworICAgIGludCB4Um9vdCwgeVJvb3Q7CisgICAgZ2RrX3dpbmRvd19nZXRfcm9vdF9j
b29yZHMoZ3RrX3dpZGdldF9nZXRfd2luZG93KHdpZGdldCksIHgsIHksICZ4Um9vdCwgJnlSb290
KTsKKyAgICBldmVudC0+YnV0dG9uLnhfcm9vdCA9IHhSb290OworICAgIGV2ZW50LT5idXR0b24u
eV9yb290ID0geVJvb3Q7CisgICAgZ3RrX21haW5fZG9fZXZlbnQoZXZlbnQpOworfQorCitzdGF0
aWMgdm9pZCBjbGlja01vdXNlQnV0dG9uKEd0a1dpZGdldCogd2lkZ2V0LCBpbnQgeCwgaW50IHks
IHVuc2lnbmVkIGludCBidXR0b24sIHVuc2lnbmVkIGludCBtb2RpZmllcnMpCit7CisgICAgZG9N
b3VzZUJ1dHRvbkV2ZW50KHdpZGdldCwgR0RLX0JVVFRPTl9QUkVTUywgeCwgeSwgYnV0dG9uLCBt
b2RpZmllcnMpOworICAgIGRvTW91c2VCdXR0b25FdmVudCh3aWRnZXQsIEdES19CVVRUT05fUkVM
RUFTRSwgeCwgeSwgYnV0dG9uLCBtb2RpZmllcnMpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gY2xp
Y2tNb3VzZUJ1dHRvbkFuZFdhaXRGb3JGaWxlQ2hvb3NlclJlcXVlc3QoV2ViS2l0V2ViVmlldyog
d2ViVmlldykKK3sKKyAgICBjbGlja01vdXNlQnV0dG9uKEdUS19XSURHRVQod2ViVmlldyksIDUs
IDUsIDEsIDApOworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtp
dF93ZWJfdmlld19maWxlX2Nob29zZXIoKQoreworICAgIGNvbnN0IGdjaGFyKiBodG1sRm9ybWF0
QmFzZSA9ICI8aHRtbD48Ym9keT4iCisgICAgICAgICAgICAiPGlucHV0IHN0eWxlPSdwb3NpdGlv
bjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjA7bWFyZ2luOjA7cGFkZGluZzowJyB0eXBlPSdmaWxlJyAl
cy8+IgorICAgICAgICAgICAgIjwvYm9keT48L2h0bWw+IjsKKworICAgIEd0a1dpZGdldCogd2lu
ZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7CisgICAgR3RrV2lkZ2V0
KiB3ZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygpOworICAgIGd0a19jb250YWluZXJfYWRk
KEdUS19DT05UQUlORVIod2luZG93KSwgd2ViVmlldyk7CisgICAgZ3RrX3dpZGdldF9zaG93X2Fs
bCh3aW5kb3cpOworCisgICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKKwor
ICAgIC8vIE11bHRpcGxlIHNlbGVjdGlvbnMgbm90IGFsbG93ZWQsIG5vIE1JTUUgZmlsdGVyaW5n
LgorICAgIGd1bG9uZyBoYW5kbGVyID0gZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAicnVuLWZp
bGUtY2hvb3NlciIsIEdfQ0FMTEJBQ0socnVuRmlsZUNob29zZXJDYk5vTXVsdGlzZWxOb01pbWUp
LCBOVUxMKTsKKyAgICBnY2hhciogaHRtbEZvcm1hdCA9IGdfc3RyZHVwX3ByaW50ZihodG1sRm9y
bWF0QmFzZSwgIiIpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhXRUJLSVRfV0VC
X1ZJRVcod2ViVmlldyksIGh0bWxGb3JtYXQsIE5VTEwsIE5VTEwsIE5VTEwpOworICAgIGdfZnJl
ZShodG1sRm9ybWF0KTsKKworICAgIGdfdGltZW91dF9hZGQoMTAwLCAoR1NvdXJjZUZ1bmMpIGNs
aWNrTW91c2VCdXR0b25BbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0LCBXRUJLSVRfV0VCX1ZJ
RVcod2ViVmlldykpOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIGdfc2lnbmFs
X2hhbmRsZXJfZGlzY29ubmVjdCh3ZWJWaWV3LCBoYW5kbGVyKTsKKworICAgIC8vIE11bHRpcGxl
IHNlbGVjdGlvbnMgYWxsb3dlZCwgbm8gTUlNRSBmaWx0ZXJpbmcsIHNvbWUgcHJlLXNlbGVjdGVk
IGZpbGVzLgorICAgIGhhbmRsZXIgPSBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJydW4tZmls
ZS1jaG9vc2VyIiwgR19DQUxMQkFDSyhydW5GaWxlQ2hvb3NlckNiTXVsdGlzZWxOb01pbWUpLCBO
VUxMKTsKKyAgICBodG1sRm9ybWF0ID0gZ19zdHJkdXBfcHJpbnRmKGh0bWxGb3JtYXRCYXNlLCAi
bXVsdGlwbGUiKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoV0VCS0lUX1dFQl9W
SUVXKHdlYlZpZXcpLCBodG1sRm9ybWF0LCBOVUxMLCBOVUxMLCBOVUxMKTsKKyAgICBnX2ZyZWUo
aHRtbEZvcm1hdCk7CisKKyAgICBnX3RpbWVvdXRfYWRkKDEwMCwgKEdTb3VyY2VGdW5jKSBjbGlj
a01vdXNlQnV0dG9uQW5kV2FpdEZvckZpbGVDaG9vc2VyUmVxdWVzdCwgV0VCS0lUX1dFQl9WSUVX
KHdlYlZpZXcpKTsKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICBnX3NpZ25hbF9o
YW5kbGVyX2Rpc2Nvbm5lY3Qod2ViVmlldywgaGFuZGxlcik7CisKKyAgICAvLyBQZXJmb3JtIGFu
b3RoZXIgcmVxdWVzdCB0byBjaGVjayBpZiB0aGUgbGlzdCBvZiBmaWxlcyBzZWxlY3RlZAorICAg
IC8vIGluIHRoZSBwcmV2aW91cyBzdGVwIGFwcGVhcnMgbm93IGFzIHBhcnQgb2YgdGhlIG5ldyBy
ZXF1ZXN0LgorICAgIGhhbmRsZXIgPSBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJydW4tZmls
ZS1jaG9vc2VyIiwgR19DQUxMQkFDSyhydW5GaWxlQ2hvb3NlckNiU2VsZWN0aW9uUmV0YWluZWQp
LCBOVUxMKTsKKyAgICBnX3RpbWVvdXRfYWRkKDEwMCwgKEdTb3VyY2VGdW5jKSBjbGlja01vdXNl
QnV0dG9uQW5kV2FpdEZvckZpbGVDaG9vc2VyUmVxdWVzdCwgV0VCS0lUX1dFQl9WSUVXKHdlYlZp
ZXcpKTsKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICBnX3NpZ25hbF9oYW5kbGVy
X2Rpc2Nvbm5lY3Qod2ViVmlldywgaGFuZGxlcik7CisKKyAgICAvLyBNdWx0aXBsZSBzZWxlY3Rp
b25zIG5vdCBhbGxvd2VkLCBvbmx5IGFjY2VwdCBpbWFnZXMsIGF1ZGlvIGFuZCB2aWRlbyBmaWxl
cy4KKyAgICBoYW5kbGVyID0gZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAicnVuLWZpbGUtY2hv
b3NlciIsIEdfQ0FMTEJBQ0socnVuRmlsZUNob29zZXJDYk5vTXVsdGlzZWxBY2NlcHRUeXBlcyks
IE5VTEwpOworICAgIGh0bWxGb3JtYXQgPSBnX3N0cmR1cF9wcmludGYoaHRtbEZvcm1hdEJhc2Us
ICJhY2NlcHQ9J2F1ZGlvLyosdmlkZW8vKixpbWFnZS8qJyIpOworICAgIHdlYmtpdF93ZWJfdmll
d19sb2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldyksIGh0bWxGb3JtYXQsIE5VTEws
IE5VTEwsIE5VTEwpOworICAgIGdfZnJlZShodG1sRm9ybWF0KTsKKworICAgIGdfdGltZW91dF9h
ZGQoMTAwLCAoR1NvdXJjZUZ1bmMpIGNsaWNrTW91c2VCdXR0b25BbmRXYWl0Rm9yRmlsZUNob29z
ZXJSZXF1ZXN0LCBXRUJLSVRfV0VCX1ZJRVcod2ViVmlldykpOworICAgIGdfbWFpbl9sb29wX3J1
bihsb29wKTsKKworICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdCh3ZWJWaWV3LCBoYW5k
bGVyKTsKKyAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kod2luZG93KTsKK30KKworc3RhdGljIHZvaWQg
dGVzdF93ZWJraXRfd2ViX3ZpZXdfc291cmNlX21vZGUoKQoreworICAgIEd0a1dpZGdldCogd2Vi
X3ZpZXc7CisKKyAgICB3ZWJfdmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKKworICAgIHdl
YmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcod2ViX3ZpZXcpLCAiPGh0
bWw+PGJvZHk+PC9ib2R5PjwvaHRtbD4iLCBOVUxMLCBOVUxMLCBOVUxMKTsKKworICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfZ2V0X3ZpZXdfc291cmNlX21vZGUoV0VCS0lUX1dFQl9WSUVX
KHdlYl92aWV3KSkpOworCisgICAgd2Via2l0X3dlYl92aWV3X3NldF92aWV3X3NvdXJjZV9tb2Rl
KFdFQktJVF9XRUJfVklFVyh3ZWJfdmlldyksIFRSVUUpOworCisgICAgZ19hc3NlcnQod2Via2l0
X3dlYl92aWV3X2dldF92aWV3X3NvdXJjZV9tb2RlKFdFQktJVF9XRUJfVklFVyh3ZWJfdmlldykp
KTsKKworICAgIHdlYmtpdF93ZWJfdmlld19zZXRfdmlld19zb3VyY2VfbW9kZShXRUJLSVRfV0VC
X1ZJRVcod2ViX3ZpZXcpLCBGQUxTRSk7CisKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3
X2dldF92aWV3X3NvdXJjZV9tb2RlKFdFQktJVF9XRUJfVklFVyh3ZWJfdmlldykpKTsKKworICAg
IGd0a193aWRnZXRfZGVzdHJveSh3ZWJfdmlldyk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBj
aGFyKiogYXJndikKK3sKKyAgICBTb3VwU2VydmVyKiBzZXJ2ZXI7CisgICAgU291cFVSSSogc291
cF91cmk7CisKKyAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7CisKKyAgICAv
KiBIb3BlZnVsbHkgbWFrZSB0ZXN0IGluZGVwZW5kZW50IG9mIHRoZSBwYXRoIGl0J3MgY2FsbGVk
IGZyb20uICovCisgICAgdGVzdHV0aWxzX3JlbGF0aXZlX2NoZGlyKCJUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdEd0ay9yZXNvdXJjZXMvdGVzdC5odG1sIiwgYXJndlswXSk7CisKKyAg
ICBzZXJ2ZXIgPSBzb3VwX3NlcnZlcl9uZXcoU09VUF9TRVJWRVJfUE9SVCwgMCwgTlVMTCk7Cisg
ICAgc291cF9zZXJ2ZXJfcnVuX2FzeW5jKHNlcnZlcik7CisKKyAgICBzb3VwX3NlcnZlcl9hZGRf
aGFuZGxlcihzZXJ2ZXIsIE5VTEwsIHNlcnZlcl9jYWxsYmFjaywgTlVMTCwgTlVMTCk7CisKKyAg
ICBzb3VwX3VyaSA9IHNvdXBfdXJpX25ldygiaHR0cDovLzEyNy4wLjAuMS8iKTsKKyAgICBzb3Vw
X3VyaV9zZXRfcG9ydChzb3VwX3VyaSwgc291cF9zZXJ2ZXJfZ2V0X3BvcnQoc2VydmVyKSk7CisK
KyAgICBiYXNlX3VyaSA9IHNvdXBfdXJpX3RvX3N0cmluZyhzb3VwX3VyaSwgRkFMU0UpOworICAg
IHNvdXBfdXJpX2ZyZWUoc291cF91cmkpOworCisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vidmll
dy9pY29uLXVyaSIsIHRlc3Rfd2Via2l0X3dlYl92aWV3X2ljb25fdXJpKTsKKyAgICBnX3Rlc3Rf
YWRkX2Z1bmMoIi93ZWJraXQvd2Vidmlldy9hZGp1c3RtZW50cyIsIHRlc3Rfd2Via2l0X3dlYl92
aWV3X2FkanVzdG1lbnRzKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vidmlldy9k
ZXN0cm95IiwgdGVzdF93ZWJraXRfd2ViX3ZpZXdfZGVzdHJveSk7CisgICAgZ190ZXN0X2FkZF9m
dW5jKCIvd2Via2l0L3dlYnZpZXcvZ3JhYl9mb2N1cyIsIHRlc3Rfd2Via2l0X3dlYl92aWV3X2dy
YWJfZm9jdXMpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJ2aWV3L3dpbmRvdy1m
ZWF0dXJlcyIsIHRlc3Rfd2Via2l0X3dlYl92aWV3X3dpbmRvd19mZWF0dXJlcyk7CisgICAgZ190
ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnZpZXcvd2Vidmlldy1pbi1vZmZzY3JlZW4td2luZG93
LWRvZXMtbm90LWNyYXNoIiwgdGVzdF93ZWJraXRfd2ViX3ZpZXdfaW5fb2Zmc2NyZWVuX3dpbmRv
d19kb2VzX25vdF9jcmFzaCk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnZpZXcv
d2Vidmlldy1kb2VzLW5vdC1zdGVhbC1mb2N1cyIsIHRlc3Rfd2Via2l0X3dlYl92aWV3X2RvZXNf
bm90X3N0ZWFsX2ZvY3VzKTsKKyAgICBnX3Rlc3RfYWRkX2RhdGFfZnVuYygiL3dlYmtpdC93ZWJ2
aWV3L2Z1bGxzY3JlZW4iLCBHSU5UX1RPX1BPSU5URVIoRkFMU0UpLCB0ZXN0X3dlYmtpdF93ZWJf
dmlld19mdWxsc2NyZWVuKTsKKyAgICBnX3Rlc3RfYWRkX2RhdGFfZnVuYygiL3dlYmtpdC93ZWJ2
aWV3L2Z1bGxzY3JlZW4tYmxvY2tlZCIsIEdJTlRfVE9fUE9JTlRFUihUUlVFKSwgdGVzdF93ZWJr
aXRfd2ViX3ZpZXdfZnVsbHNjcmVlbik7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dl
YnZpZXcvZmlsZS1jaG9vc2VyIiwgdGVzdF93ZWJraXRfd2ViX3ZpZXdfZmlsZV9jaG9vc2VyKTsK
KyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vidmlldy9zb3VyY2UtbW9kZSIsIHRlc3Rf
d2Via2l0X3dlYl92aWV3X3NvdXJjZV9tb2RlKTsKKworICAgIHJldHVybiBnX3Rlc3RfcnVuICgp
OworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVz
dHdpbmRvdy5jIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdpbmRv
dy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlZGE0N2IKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2luZG93
LmMKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQ29sbGFib3Jh
IEx0ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRl
IDx3ZWJraXQvd2Via2l0Lmg+CisKK3N0YXRpYyB2b2lkIG5vdGlmeV9sb2FkX3N0YXR1c19jYihX
ZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgR1BhcmFtU3BlYyogcHNwZWMsIGdwb2ludGVyIGRhdGEp
Cit7CisgICAgaWYgKHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMod2ViX3ZpZXcpID09
IFdFQktJVF9MT0FEX0ZJTklTSEVEKSB7CisgICAgICAgIEdNYWluTG9vcCogbG9vcCA9IChHTWFp
bkxvb3AqKWRhdGE7CisKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKKyAgICB9Cit9
CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dpbmRvd19zY3JvbGxiYXJfcG9saWN5KHZvaWQp
Cit7CisgICAgR01haW5Mb29wKiBsb29wOworICAgIEd0a1dpZGdldCogc2Nyb2xsZWRXaW5kb3c7
CisgICAgR3RrV2lkZ2V0KiB3ZWJWaWV3OworICAgIFdlYktpdFdlYkZyYW1lKiBtYWluRnJhbWU7
CisgICAgR3RrUG9saWN5VHlwZSBob3Jpem9udGFsUG9saWN5OworICAgIEd0a1BvbGljeVR5cGUg
dmVydGljYWxQb2xpY3k7CisKKyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUp
OworCisgICAgc2Nyb2xsZWRXaW5kb3cgPSBndGtfc2Nyb2xsZWRfd2luZG93X25ldyhOVUxMLCBO
VUxMKTsKKyAgICBndGtfc2Nyb2xsZWRfd2luZG93X3NldF9wb2xpY3koR1RLX1NDUk9MTEVEX1dJ
TkRPVyhzY3JvbGxlZFdpbmRvdyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdUS19QT0xJQ1lfQVVUT01BVElDLCBHVEtfUE9MSUNZX0FVVE9NQVRJQyk7CisKKyAgICB3ZWJW
aWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZp
ZXcpOworCisgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1
cyIsCisgICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKG5vdGlmeV9sb2FkX3N0YXR1c19j
YiksIGxvb3ApOworCisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihzY3JvbGxl
ZFdpbmRvdyksIHdlYlZpZXcpOworCisgICAgbWFpbkZyYW1lID0gd2Via2l0X3dlYl92aWV3X2dl
dF9tYWluX2ZyYW1lKFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3KSk7CisKKyAgICAvKiBUZXN0IHdl
IGNvcnJlY3RseSBhcHBseSBwb2xpY3kgZm9yIG5vdCBoYXZpbmcgc2Nyb2xsYmFyczsgVGhpcwor
ICAgICAqIGNhc2UgaXMgc3BlY2lhbCwgYmVjYXVzZSB3ZSB0dXJuIHRoZSBwb2xpY3kgZnJvbSBO
RVZFUiB0bworICAgICAqIEFVVE9NQVRJQywgc2luY2Ugd2UgY2Fubm90IGVhc2lseSByZXByZXNl
bnQgdGhlIHNhbWUgdGhpbmcKKyAgICAgKiB1c2luZyBHdGtTY3JvbGxlZFdpbmRvdyAqLworICAg
IHdlYmtpdF93ZWJfdmlld19sb2FkX2h0bWxfc3RyaW5nKFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGh0bWw+PGJvZHk+V2Vi
S2l0ITwvYm9keT48c2NyaXB0PmRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5Jylb
MF0uc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJzs8L3NjcmlwdD48L2h0bWw+IiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZTovLyIpOworCisgICAgZ19tYWluX2xv
b3BfcnVuKGxvb3ApOworCisgICAgZ3RrX3Njcm9sbGVkX3dpbmRvd19nZXRfcG9saWN5KEdUS19T
Q1JPTExFRF9XSU5ET1coc2Nyb2xsZWRXaW5kb3cpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmaG9yaXpvbnRhbFBvbGljeSwgJnZlcnRpY2FsUG9saWN5KTsKKworICAgIGdf
YXNzZXJ0KGhvcml6b250YWxQb2xpY3kgPT0gR1RLX1BPTElDWV9BVVRPTUFUSUMpOworICAgIGdf
YXNzZXJ0KHZlcnRpY2FsUG9saWN5ID09IEdUS19QT0xJQ1lfQVVUT01BVElDKTsKKworICAgIGdf
YXNzZXJ0KEdUS19QT0xJQ1lfTkVWRVIgPT0gd2Via2l0X3dlYl9mcmFtZV9nZXRfaG9yaXpvbnRh
bF9zY3JvbGxiYXJfcG9saWN5KG1haW5GcmFtZSkpOworICAgIGdfYXNzZXJ0KEdUS19QT0xJQ1lf
TkVWRVIgPT0gd2Via2l0X3dlYl9mcmFtZV9nZXRfdmVydGljYWxfc2Nyb2xsYmFyX3BvbGljeSht
YWluRnJhbWUpKTsKKworICAgIC8qIFRlc3Qgd2UgY29ycmVjdGx5IGFwcGx5IHBvbGljeSBmb3Ig
YWx3YXlzIGhhdmluZyBzY3JvbGxiYXJzICovCisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfaHRt
bF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICI8aHRtbD48Ym9keT5XZWJLaXQhPC9ib2R5PjxzY3JpcHQ+ZG9jdW1l
bnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHknKVswXS5zdHlsZS5vdmVyZmxvdyA9ICdzY3Jv
bGwnOzwvc2NyaXB0PjwvaHRtbD4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJmaWxlOi8vIik7CisKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICBndGtf
c2Nyb2xsZWRfd2luZG93X2dldF9wb2xpY3koR1RLX1NDUk9MTEVEX1dJTkRPVyhzY3JvbGxlZFdp
bmRvdyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZob3Jpem9udGFsUG9s
aWN5LCAmdmVydGljYWxQb2xpY3kpOworCisgICAgZ19hc3NlcnQoaG9yaXpvbnRhbFBvbGljeSA9
PSBHVEtfUE9MSUNZX0FMV0FZUyk7CisgICAgZ19hc3NlcnQodmVydGljYWxQb2xpY3kgPT0gR1RL
X1BPTElDWV9BTFdBWVMpOworCisgICAgZ19hc3NlcnQoaG9yaXpvbnRhbFBvbGljeSA9PSB3ZWJr
aXRfd2ViX2ZyYW1lX2dldF9ob3Jpem9udGFsX3Njcm9sbGJhcl9wb2xpY3kobWFpbkZyYW1lKSk7
CisgICAgZ19hc3NlcnQodmVydGljYWxQb2xpY3kgPT0gd2Via2l0X3dlYl9mcmFtZV9nZXRfdmVy
dGljYWxfc2Nyb2xsYmFyX3BvbGljeShtYWluRnJhbWUpKTsKKworICAgIC8qIFRlc3Qgd2UgY29y
cmVjdGx5IGFwcGx5IHBvbGljeSBmb3IgaGF2aW5nIHNjcm9sbGJhcnMgd2hlbiBuZWVkZWQgKi8K
KyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9odG1sX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcod2Vi
VmlldyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxodG1sPjxib2R5
PldlYktpdCE8L2JvZHk+PHNjcmlwdD5kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9k
eScpWzBdLnN0eWxlLm92ZXJmbG93ID0gJ2F1dG8nOzwvc2NyaXB0PjwvaHRtbD4iLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlOi8vIik7CisKKyAgICBnX21haW5f
bG9vcF9ydW4obG9vcCk7CisKKyAgICBndGtfc2Nyb2xsZWRfd2luZG93X2dldF9wb2xpY3koR1RL
X1NDUk9MTEVEX1dJTkRPVyhzY3JvbGxlZFdpbmRvdyksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZob3Jpem9udGFsUG9saWN5LCAmdmVydGljYWxQb2xpY3kpOworCisgICAg
Z19hc3NlcnQoaG9yaXpvbnRhbFBvbGljeSA9PSBHVEtfUE9MSUNZX0FVVE9NQVRJQyk7CisgICAg
Z19hc3NlcnQodmVydGljYWxQb2xpY3kgPT0gR1RLX1BPTElDWV9BVVRPTUFUSUMpOworCisgICAg
Z19hc3NlcnQoaG9yaXpvbnRhbFBvbGljeSA9PSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9ob3Jpem9u
dGFsX3Njcm9sbGJhcl9wb2xpY3kobWFpbkZyYW1lKSk7CisgICAgZ19hc3NlcnQodmVydGljYWxQ
b2xpY3kgPT0gd2Via2l0X3dlYl9mcmFtZV9nZXRfdmVydGljYWxfc2Nyb2xsYmFyX3BvbGljeSht
YWluRnJhbWUpKTsKKworICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOworfQorCitpbnQgbWFp
bihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFy
Z3YsIE5VTEwpOworCisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy8iKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2luZG93L3Njcm9sbGJhcl9wb2xp
Y3kiLCB0ZXN0X3dlYmtpdF93aW5kb3dfc2Nyb2xsYmFyX3BvbGljeSk7CisgICAgcmV0dXJuIGdf
dGVzdF9ydW4gKCk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJL
aXQyR3RrL0xvYWRUcmFja2luZ1Rlc3QuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2Vi
S2l0Mkd0ay9Mb2FkVHJhY2tpbmdUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5kZjM0MjA0Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9n
dGsvV2ViS2l0Mkd0ay9Mb2FkVHJhY2tpbmdUZXN0LmNwcApAQCAtMCwwICsxLDIwNyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiTG9hZFRyYWNraW5nVGVzdC5oIgorCisjaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQy
Lmg+CisKK3N0YXRpYyB2b2lkIGxvYWRDaGFuZ2VkQ2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2Vi
VmlldywgV2ViS2l0TG9hZEV2ZW50IGxvYWRFdmVudCwgTG9hZFRyYWNraW5nVGVzdCogdGVzdCkK
K3sKKyAgICBzd2l0Y2ggKGxvYWRFdmVudCkgeworICAgIGNhc2UgV0VCS0lUX0xPQURfU1RBUlRF
RDoKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2lzX2xvYWRpbmcod2ViVmlldykp
OworICAgICAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9hY3RpdmVVUkkuZGF0YSgpLCA9PSwg
d2Via2l0X3dlYl92aWV3X2dldF91cmkod2ViVmlldykpOworICAgICAgICB0ZXN0LT5wcm92aXNp
b25hbExvYWRTdGFydGVkKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0xPQURf
UkVESVJFQ1RFRDoKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2lzX2xvYWRpbmco
d2ViVmlldykpOworICAgICAgICB0ZXN0LT5tX2FjdGl2ZVVSSSA9IHdlYmtpdF93ZWJfdmlld19n
ZXRfdXJpKHdlYlZpZXcpOworICAgICAgICBpZiAoIXRlc3QtPm1fcmVkaXJlY3RVUkkuaXNOdWxs
KCkpCisgICAgICAgICAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9yZWRpcmVjdFVSSS5kYXRh
KCksID09LCB0ZXN0LT5tX2FjdGl2ZVVSSS5kYXRhKCkpOworICAgICAgICB0ZXN0LT5wcm92aXNp
b25hbExvYWRSZWNlaXZlZFNlcnZlclJlZGlyZWN0KCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgV0VCS0lUX0xPQURfQ09NTUlUVEVEOiB7CisgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJf
dmlld19pc19sb2FkaW5nKHdlYlZpZXcpKTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHRlc3Qt
Pm1fYWN0aXZlVVJJLmRhdGEoKSwgPT0sIHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKHdlYlZpZXcp
KTsKKworICAgICAgICAvLyBDaGVjayB0aGF0IG9uIGNvbW1pdHRlZCB3ZSBhbHdheXMgaGF2ZSBh
IG1haW4gcmVzb3VyY2Ugd2l0aCBhIHJlc3BvbnNlLgorICAgICAgICBXZWJLaXRXZWJSZXNvdXJj
ZSogcmVzb3VyY2UgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2Uod2ViVmlldyk7
CisgICAgICAgIGdfYXNzZXJ0KHJlc291cmNlKTsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X3dl
Yl9yZXNvdXJjZV9nZXRfcmVzcG9uc2UocmVzb3VyY2UpKTsKKworICAgICAgICB0ZXN0LT5sb2Fk
Q29tbWl0dGVkKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFdFQktJVF9MT0FE
X0ZJTklTSEVEOgorICAgICAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2lzX2xvYWRpbmco
d2ViVmlldykpOworICAgICAgICBpZiAoIXRlc3QtPm1fbG9hZEZhaWxlZCkKKyAgICAgICAgICAg
IGdfYXNzZXJ0X2NtcHN0cih0ZXN0LT5tX2FjdGl2ZVVSSS5kYXRhKCksID09LCB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X3VyaSh3ZWJWaWV3KSk7CisgICAgICAgIHRlc3QtPmxvYWRGaW5pc2hlZCgpOwor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hl
ZCgpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgbG9hZEZhaWxlZENhbGxiYWNrKFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcsIFdlYktpdExvYWRFdmVudCBsb2FkRXZlbnQsIGNvbnN0IGNoYXIqIGZh
aWxpbmdVUkksIEdFcnJvciogZXJyb3IsIExvYWRUcmFja2luZ1Rlc3QqIHRlc3QpCit7CisgICAg
dGVzdC0+bV9sb2FkRmFpbGVkID0gdHJ1ZTsKKyAgICB0ZXN0LT5tX2Vycm9yLnNldChnX2Vycm9y
X2NvcHkoZXJyb3IpKTsKKworICAgIHN3aXRjaCAobG9hZEV2ZW50KSB7CisgICAgY2FzZSBXRUJL
SVRfTE9BRF9TVEFSVEVEOgorICAgICAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2lzX2xv
YWRpbmcod2ViVmlldykpOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9hY3RpdmVV
UkkuZGF0YSgpLCA9PSwgd2Via2l0X3dlYl92aWV3X2dldF91cmkod2ViVmlldykpOworICAgICAg
ICBnX2Fzc2VydChlcnJvcik7CisgICAgICAgIHRlc3QtPnByb3Zpc2lvbmFsTG9hZEZhaWxlZChm
YWlsaW5nVVJJLCBlcnJvcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0xPQURf
Q09NTUlUVEVEOgorICAgICAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2lzX2xvYWRpbmco
d2ViVmlldykpOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9hY3RpdmVVUkkuZGF0
YSgpLCA9PSwgd2Via2l0X3dlYl92aWV3X2dldF91cmkod2ViVmlldykpOworICAgICAgICBnX2Fz
c2VydChlcnJvcik7CisgICAgICAgIHRlc3QtPmxvYWRGYWlsZWQoZmFpbGluZ1VSSSwgZXJyb3Ip
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBnX2Fzc2VydF9ub3RfcmVh
Y2hlZCgpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgZXN0aW1hdGVkUHJvZ3Jlc3NDaGFuZ2Vk
Q2FsbGJhY2soR09iamVjdCosIEdQYXJhbVNwZWMqLCBMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0KQor
eworICAgIHRlc3QtPmVzdGltYXRlZFByb2dyZXNzQ2hhbmdlZCgpOworfQorCitMb2FkVHJhY2tp
bmdUZXN0OjpMb2FkVHJhY2tpbmdUZXN0KCkKKyAgICA6IG1fcnVuTG9hZFVudGlsQ29tcGxldGlv
bihmYWxzZSkKKyAgICAsIG1fbG9hZEZhaWxlZChmYWxzZSkKK3sKKyAgICBnX3NpZ25hbF9jb25u
ZWN0KG1fd2ViVmlldywgImxvYWQtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sobG9hZENoYW5nZWRDYWxs
YmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAibG9hZC1mYWls
ZWQiLCBHX0NBTExCQUNLKGxvYWRGYWlsZWRDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFs
X2Nvbm5lY3QobV93ZWJWaWV3LCAibm90aWZ5Ojplc3RpbWF0ZWQtbG9hZC1wcm9ncmVzcyIsIEdf
Q0FMTEJBQ0soZXN0aW1hdGVkUHJvZ3Jlc3NDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKKworICAg
IGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaShtX3dlYlZpZXcpKTsKK30KKworTG9h
ZFRyYWNraW5nVGVzdDo6fkxvYWRUcmFja2luZ1Rlc3QoKQoreworICAgIGdfc2lnbmFsX2hhbmRs
ZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3dlYlZpZXcsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAs
IDAsIDAsIDAsIHRoaXMpOworfQorCit2b2lkIExvYWRUcmFja2luZ1Rlc3Q6OndhaXRVbnRpbExv
YWRGaW5pc2hlZCgpCit7CisgICAgbV9lc3RpbWF0ZWRQcm9ncmVzcyA9IDA7CisgICAgbV9ydW5M
b2FkVW50aWxDb21wbGV0aW9uID0gdHJ1ZTsKKyAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9v
cCk7Cit9CisKK3ZvaWQgTG9hZFRyYWNraW5nVGVzdDo6cHJvdmlzaW9uYWxMb2FkU3RhcnRlZCgp
Cit7CisgICAgbV9sb2FkRXZlbnRzLmFwcGVuZChQcm92aXNpb25hbExvYWRTdGFydGVkKTsKK30K
Kwordm9pZCBMb2FkVHJhY2tpbmdUZXN0Ojpwcm92aXNpb25hbExvYWRSZWNlaXZlZFNlcnZlclJl
ZGlyZWN0KCkKK3sKKyAgICBtX2xvYWRFdmVudHMuYXBwZW5kKFByb3Zpc2lvbmFsTG9hZFJlY2Vp
dmVkU2VydmVyUmVkaXJlY3QpOworfQorCit2b2lkIExvYWRUcmFja2luZ1Rlc3Q6OnByb3Zpc2lv
bmFsTG9hZEZhaWxlZChjb25zdCBnY2hhciogZmFpbGluZ1VSSSwgR0Vycm9yKiBlcnJvcikKK3sK
KyAgICBtX2xvYWRFdmVudHMuYXBwZW5kKFByb3Zpc2lvbmFsTG9hZEZhaWxlZCk7Cit9CisKK3Zv
aWQgTG9hZFRyYWNraW5nVGVzdDo6bG9hZENvbW1pdHRlZCgpCit7CisgICAgbV9sb2FkRXZlbnRz
LmFwcGVuZChMb2FkQ29tbWl0dGVkKTsKK30KKwordm9pZCBMb2FkVHJhY2tpbmdUZXN0Ojpsb2Fk
RmluaXNoZWQoKQoreworICAgIG1fbG9hZEV2ZW50cy5hcHBlbmQoTG9hZEZpbmlzaGVkKTsKKyAg
ICBpZiAobV9ydW5Mb2FkVW50aWxDb21wbGV0aW9uKQorICAgICAgICBnX21haW5fbG9vcF9xdWl0
KG1fbWFpbkxvb3ApOworfQorCit2b2lkIExvYWRUcmFja2luZ1Rlc3Q6OmxvYWRGYWlsZWQoY29u
c3QgZ2NoYXIqIGZhaWxpbmdVUkksIEdFcnJvciogZXJyb3IpCit7CisgICAgbV9sb2FkRXZlbnRz
LmFwcGVuZChMb2FkRmFpbGVkKTsKK30KKwordm9pZCBMb2FkVHJhY2tpbmdUZXN0Ojplc3RpbWF0
ZWRQcm9ncmVzc0NoYW5nZWQoKQoreworICAgIGRvdWJsZSBwcm9ncmVzcyA9IHdlYmtpdF93ZWJf
dmlld19nZXRfZXN0aW1hdGVkX2xvYWRfcHJvZ3Jlc3MobV93ZWJWaWV3KTsKKyAgICBnX2Fzc2Vy
dF9jbXBmbG9hdChtX2VzdGltYXRlZFByb2dyZXNzLCA8LCBwcm9ncmVzcyk7CisgICAgbV9lc3Rp
bWF0ZWRQcm9ncmVzcyA9IHByb2dyZXNzOworfQorCit2b2lkIExvYWRUcmFja2luZ1Rlc3Q6Omxv
YWRVUkkoY29uc3QgY2hhciogdXJpKQoreworICAgIG1fbG9hZEV2ZW50cy5jbGVhcigpOworICAg
IG1fZXN0aW1hdGVkUHJvZ3Jlc3MgPSAwOworICAgIG1fZXJyb3IuY2xlYXIoKTsKKyAgICBXZWJW
aWV3VGVzdDo6bG9hZFVSSSh1cmkpOworfQorCit2b2lkIExvYWRUcmFja2luZ1Rlc3Q6OmxvYWRI
dG1sKGNvbnN0IGNoYXIqIGh0bWwsIGNvbnN0IGNoYXIqIGJhc2VVUkkpCit7CisgICAgbV9sb2Fk
RXZlbnRzLmNsZWFyKCk7CisgICAgbV9lc3RpbWF0ZWRQcm9ncmVzcyA9IDA7CisgICAgbV9lcnJv
ci5jbGVhcigpOworICAgIFdlYlZpZXdUZXN0Ojpsb2FkSHRtbChodG1sLCBiYXNlVVJJKTsKK30K
Kwordm9pZCBMb2FkVHJhY2tpbmdUZXN0Ojpsb2FkUGxhaW5UZXh0KGNvbnN0IGNoYXIqIHBsYWlu
VGV4dCkKK3sKKyAgICBtX2xvYWRFdmVudHMuY2xlYXIoKTsKKyAgICBtX2VzdGltYXRlZFByb2dy
ZXNzID0gMDsKKyAgICBtX2Vycm9yLmNsZWFyKCk7CisgICAgV2ViVmlld1Rlc3Q6OmxvYWRQbGFp
blRleHQocGxhaW5UZXh0KTsKK30KKwordm9pZCBMb2FkVHJhY2tpbmdUZXN0Ojpsb2FkUmVxdWVz
dChXZWJLaXRVUklSZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIG1fbG9hZEV2ZW50cy5jbGVhcigp
OworICAgIG1fZXN0aW1hdGVkUHJvZ3Jlc3MgPSAwOworICAgIG1fZXJyb3IuY2xlYXIoKTsKKyAg
ICBXZWJWaWV3VGVzdDo6bG9hZFJlcXVlc3QocmVxdWVzdCk7Cit9CisKK3ZvaWQgTG9hZFRyYWNr
aW5nVGVzdDo6cmVsb2FkKCkKK3sKKyAgICBtX2xvYWRFdmVudHMuY2xlYXIoKTsKKyAgICBtX2Vz
dGltYXRlZFByb2dyZXNzID0gMDsKKyAgICBtX2Vycm9yLmNsZWFyKCk7CisgICAgd2Via2l0X3dl
Yl92aWV3X3JlbG9hZChtX3dlYlZpZXcpOworfQorCit2b2lkIExvYWRUcmFja2luZ1Rlc3Q6Omdv
QmFjaygpCit7CisgICAgbV9sb2FkRXZlbnRzLmNsZWFyKCk7CisgICAgbV9lc3RpbWF0ZWRQcm9n
cmVzcyA9IDA7CisgICAgbV9lcnJvci5jbGVhcigpOworICAgIFdlYlZpZXdUZXN0Ojpnb0JhY2so
KTsKK30KKwordm9pZCBMb2FkVHJhY2tpbmdUZXN0Ojpnb0ZvcndhcmQoKQoreworICAgIG1fbG9h
ZEV2ZW50cy5jbGVhcigpOworICAgIG1fZXN0aW1hdGVkUHJvZ3Jlc3MgPSAwOworICAgIG1fZXJy
b3IuY2xlYXIoKTsKKyAgICBXZWJWaWV3VGVzdDo6Z29Gb3J3YXJkKCk7Cit9CmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL0xvYWRUcmFja2luZ1Rlc3QuaCBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvTG9hZFRyYWNraW5nVGVzdC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzY2Y3ODQKLS0tIC9kZXYvbnVsbAor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL0xvYWRUcmFja2luZ1Rlc3Qu
aApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpZm5kZWYgTG9hZFRyYWNraW5nVGVzdF9oCisjZGVmaW5lIExvYWRUcmFja2luZ1Rlc3RfaAor
CisjaW5jbHVkZSAiVGVzdE1haW4uaCIKKyNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworY2xhc3MgTG9hZFRyYWNraW5nVGVzdCA6IHB1YmxpYyBXZWJW
aWV3VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShMb2FkVHJhY2tp
bmdUZXN0KTsKKyAgICBMb2FkVHJhY2tpbmdUZXN0KCk7CisgICAgdmlydHVhbCB+TG9hZFRyYWNr
aW5nVGVzdCgpOworICAgIHZvaWQgd2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgcHJvdmlzaW9uYWxMb2FkU3RhcnRlZCgpOworICAgIHZpcnR1YWwgdm9pZCBwcm92
aXNpb25hbExvYWRSZWNlaXZlZFNlcnZlclJlZGlyZWN0KCk7CisgICAgdmlydHVhbCB2b2lkIHBy
b3Zpc2lvbmFsTG9hZEZhaWxlZChjb25zdCBnY2hhciogZmFpbGluZ1VSSSwgR0Vycm9yKik7Cisg
ICAgdmlydHVhbCB2b2lkIGxvYWRDb21taXR0ZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZEZp
bmlzaGVkKCk7CisgICAgdmlydHVhbCB2b2lkIGxvYWRGYWlsZWQoY29uc3QgY2hhciogZmFpbGlu
Z1VSSSwgR0Vycm9yKik7CisgICAgdmlydHVhbCB2b2lkIGVzdGltYXRlZFByb2dyZXNzQ2hhbmdl
ZCgpOworCisgICAgdm9pZCBsb2FkVVJJKGNvbnN0IGNoYXIqIHVyaSk7CisgICAgdm9pZCBsb2Fk
SHRtbChjb25zdCBjaGFyKiBodG1sLCBjb25zdCBjaGFyKiBiYXNlVVJJKTsKKyAgICB2b2lkIGxv
YWRQbGFpblRleHQoY29uc3QgY2hhciogcGxhaW5UZXh0KTsKKyAgICB2b2lkIGxvYWRSZXF1ZXN0
KFdlYktpdFVSSVJlcXVlc3QqKTsKKyAgICB2b2lkIHJlbG9hZCgpOworICAgIHZvaWQgZ29CYWNr
KCk7CisgICAgdm9pZCBnb0ZvcndhcmQoKTsKKworICAgIHZvaWQgc2V0UmVkaXJlY3RVUkkoY29u
c3QgY2hhciogdXJpKSB7IG1fcmVkaXJlY3RVUkkgPSB1cmk7IH0KKworICAgIGVudW0gTG9hZEV2
ZW50cyB7CisgICAgICAgIFByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQsCisgICAgICAgIFByb3Zpc2lv
bmFsTG9hZFJlY2VpdmVkU2VydmVyUmVkaXJlY3QsCisgICAgICAgIFByb3Zpc2lvbmFsTG9hZEZh
aWxlZCwKKyAgICAgICAgTG9hZENvbW1pdHRlZCwKKyAgICAgICAgTG9hZEZpbmlzaGVkLAorICAg
ICAgICBMb2FkRmFpbGVkCisgICAgfTsKKyAgICBib29sIG1fcnVuTG9hZFVudGlsQ29tcGxldGlv
bjsKKyAgICBib29sIG1fbG9hZEZhaWxlZDsKKyAgICBHT3duUHRyPEdFcnJvcj4gbV9lcnJvcjsK
KyAgICBWZWN0b3I8TG9hZEV2ZW50cz4gbV9sb2FkRXZlbnRzOworICAgIGZsb2F0IG1fZXN0aW1h
dGVkUHJvZ3Jlc3M7CisgICAgQ1N0cmluZyBtX3JlZGlyZWN0VVJJOworfTsKKworI2VuZGlmIC8v
IExvYWRUcmFja2luZ1Rlc3RfaApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsv
V2ViS2l0Mkd0ay9UZXN0TWFpbi5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQy
R3RrL1Rlc3RNYWluLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjFm
ZmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0
ay9UZXN0TWFpbi5jcHAKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdE1haW4uaCIK
KworI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1
ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4K
Kwordm9pZCBiZWZvcmVBbGwoKTsKK3ZvaWQgYWZ0ZXJBbGwoKTsKKworc3RhdGljIHZvaWQgcmVn
aXN0ZXJHUmVzb3VyY2Uodm9pZCkKK3sKKyAgICBHT3duUHRyPGNoYXI+IHJlc291cmNlc1BhdGgo
Z19idWlsZF9maWxlbmFtZShXRUJLSVRfRVhFQ19QQVRILCAiVGVzdFdlYktpdEFQSSIsICJXZWJL
aXQyR3RrIiwgInJlc291cmNlcyIsICJ3ZWJraXQyZ3RrLXRlc3RzLXJlc291cmNlcy5ncmVzb3Vy
Y2UiLCBOVUxMKSk7CisgICAgR1Jlc291cmNlKiByZXNvdXJjZSA9IGdfcmVzb3VyY2VfbG9hZChy
ZXNvdXJjZXNQYXRoLmdldCgpLCAwKTsKKyAgICBnX2Fzc2VydChyZXNvdXJjZSk7CisKKyAgICBn
X3Jlc291cmNlc19yZWdpc3RlcihyZXNvdXJjZSk7CisgICAgZ19yZXNvdXJjZV91bnJlZihyZXNv
dXJjZSk7Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZU5vbkVtcHR5RGlyZWN0b3J5KGNvbnN0IGNo
YXIqIGRpcmVjdG9yeVBhdGgpCit7CisgICAgR0RpciogZGlyZWN0b3J5ID0gZ19kaXJfb3Blbihk
aXJlY3RvcnlQYXRoLCAwLCAwKTsKKyAgICBnX2Fzc2VydChkaXJlY3RvcnkpOworICAgIGNvbnN0
IGNoYXIqIGZpbGVOYW1lOworICAgIHdoaWxlICgoZmlsZU5hbWUgPSBnX2Rpcl9yZWFkX25hbWUo
ZGlyZWN0b3J5KSkpIHsKKyAgICAgICAgR093blB0cjxjaGFyPiBmaWxlUGF0aChnX2J1aWxkX2Zp
bGVuYW1lKGRpcmVjdG9yeVBhdGgsIGZpbGVOYW1lLCBOVUxMKSk7CisgICAgICAgIGdfdW5saW5r
KGZpbGVQYXRoLmdldCgpKTsKKyAgICB9CisgICAgZ19kaXJfY2xvc2UoZGlyZWN0b3J5KTsKKyAg
ICBnX3JtZGlyKGRpcmVjdG9yeVBhdGgpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioq
IGFyZ3YpCit7CisgICAgZ191bnNldGVudigiREJVU19TRVNTSU9OX0JVU19BRERSRVNTIik7Cisg
ICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIDApOworICAgIGdfc2V0ZW52KCJXRUJLSVRf
RVhFQ19QQVRIIiwgV0VCS0lUX0VYRUNfUEFUSCwgRkFMU0UpOworICAgIGdfc2V0ZW52KCJXRUJL
SVRfSU5KRUNURURfQlVORExFX1BBVEgiLCBXRUJLSVRfSU5KRUNURURfQlVORExFX1BBVEgsIEZB
TFNFKTsKKyAgICBnX3NldGVudigiTENfQUxMIiwgIkMiLCBUUlVFKTsKKyAgICBnX3NldGVudigi
R0lPX1VTRV9WRlMiLCAibG9jYWwiLCBUUlVFKTsKKyAgICBnX3NldGVudigiR1NFVFRJTkdTX0JB
Q0tFTkQiLCAibWVtb3J5IiwgVFJVRSk7CisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy8iKTsKKworICAgIHJlZ2lzdGVyR1Jlc291cmNlKCk7CisKKyAgICBHT3du
UHRyPGNoYXI+IGRpc2tDYWNoZVRlbXBEaXJlY3RvcnkoZ19kaXJfbWFrZV90bXAoIldlYktpdDJU
ZXN0c0Rpc2tDYWNoZS1YWFhYWFgiLCAwKSk7CisgICAgZ19hc3NlcnQoZGlza0NhY2hlVGVtcERp
cmVjdG9yeS5nZXQoKSk7CisgICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF9kaXNrX2NhY2hlX2Rp
cmVjdG9yeSh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSwgZGlza0NhY2hlVGVtcERp
cmVjdG9yeS5nZXQoKSk7CisKKyAgICBiZWZvcmVBbGwoKTsKKyAgICBpbnQgcmV0dXJuVmFsdWUg
PSBnX3Rlc3RfcnVuKCk7CisgICAgYWZ0ZXJBbGwoKTsKKworICAgIHJlbW92ZU5vbkVtcHR5RGly
ZWN0b3J5KGRpc2tDYWNoZVRlbXBEaXJlY3RvcnkuZ2V0KCkpOworCisgICAgcmV0dXJuIHJldHVy
blZhbHVlOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0
ay9UZXN0TWFpbi5oIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9UZXN0TWFp
bi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhM2E0ODQKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1Rlc3RNYWluLmgK
QEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2lmbmRlZiBUZXN0TWFpbl9oCisjZGVmaW5lIFRlc3RNYWluX2gKKworI2luY2x1ZGUgPGNhaXJv
Lmg+CisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgor
I2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CisKKyNkZWZpbmUgTUFLRV9HTElCX1RFU1RfRklYVFVSRShDbGFzc05hbWUpIFwKKyAg
ICBzdGF0aWMgdm9pZCBzZXRVcChDbGFzc05hbWUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0
YSkgXAorICAgIHsgXAorICAgICAgICBuZXcgKGZpeHR1cmUpIENsYXNzTmFtZTsgXAorICAgIH0g
XAorICAgIHN0YXRpYyB2b2lkIHRlYXJEb3duKENsYXNzTmFtZSogZml4dHVyZSwgZ2NvbnN0cG9p
bnRlciBkYXRhKSBcCisgICAgeyBcCisgICAgICAgIGZpeHR1cmUtPn5DbGFzc05hbWUoKTsgXAor
ICAgIH0gXAorICAgIHN0YXRpYyB2b2lkIGFkZChjb25zdCBjaGFyKiBzdWl0ZU5hbWUsIGNvbnN0
IGNoYXIqIHRlc3ROYW1lLCB2b2lkICgqdGVzdEZ1bmMpKENsYXNzTmFtZSosIGNvbnN0IHZvaWQq
KSkgXAorICAgIHsgXAorICAgICAgICBHT3duUHRyPGdjaGFyPiB0ZXN0UGF0aChnX3N0cmR1cF9w
cmludGYoIi93ZWJraXQyLyVzLyVzIiwgc3VpdGVOYW1lLCB0ZXN0TmFtZSkpOyBcCisgICAgICAg
IGdfdGVzdF9hZGQodGVzdFBhdGguZ2V0KCksIENsYXNzTmFtZSwgMCwgQ2xhc3NOYW1lOjpzZXRV
cCwgdGVzdEZ1bmMsIENsYXNzTmFtZTo6dGVhckRvd24pOyBcCisgICAgfQorCisjZGVmaW5lIEFT
U0VSVF9DTVBfQ1NUUklORyhzMSwgY21wLCBzMikgXAorICAgIGRvIHsgQ1N0cmluZyBfX3MxID0g
KHMxKTsgQ1N0cmluZyBfX3MyID0gKHMyKTsgXAorICAgICAgICBpZiAoZ19zdHJjbXAwKF9fczEu
ZGF0YSgpLCBfX3MyLmRhdGEoKSkgY21wIDApIDsgZWxzZSBcCisgICAgICAgICAgICBnX2Fzc2Vy
dGlvbl9tZXNzYWdlX2NtcHN0cihHX0xPR19ET01BSU4sIF9fRklMRV9fLCBfX0xJTkVfXywgR19T
VFJGVU5DLCBcCisgICAgICAgICAgICAgICAgI3MxICIgIiAjY21wICIgIiAjczIsIF9fczEuZGF0
YSgpLCAjY21wLCBfX3MyLmRhdGEoKSk7IH0gd2hpbGUgKDApCisKK2NsYXNzIFRlc3QgeworcHVi
bGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoVGVzdCk7CisKKyAgICB+VGVzdCgpCisg
ICAgeworICAgICAgICBpZiAobV93YXRjaGVkT2JqZWN0cy5pc0VtcHR5KCkpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgZ19wcmludCgiTGVha2VkIG9iamVjdHM6Iik7CisgICAgICAg
IEhhc2hTZXQ8R09iamVjdCo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3dhdGNoZWRPYmplY3Rz
LmVuZCgpOworICAgICAgICBmb3IgKEhhc2hTZXQ8R09iamVjdCo+Ojpjb25zdF9pdGVyYXRvciBp
dCA9IG1fd2F0Y2hlZE9iamVjdHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAg
ICAgZ19wcmludCgiICVzKCVwKSIsIGdfdHlwZV9uYW1lX2Zyb21faW5zdGFuY2UocmVpbnRlcnBy
ZXRfY2FzdDxHVHlwZUluc3RhbmNlKj4oKml0KSksICppdCk7CisgICAgICAgIGdfcHJpbnQoIlxu
Iik7CisKKyAgICAgICAgZ19hc3NlcnQobV93YXRjaGVkT2JqZWN0cy5pc0VtcHR5KCkpOworICAg
IH0KKworICAgIHN0YXRpYyB2b2lkIG9iamVjdEZpbmFsaXplZChUZXN0KiB0ZXN0LCBHT2JqZWN0
KiBmaW5hbGl6ZWRPYmplY3QpCisgICAgeworICAgICAgICB0ZXN0LT5tX3dhdGNoZWRPYmplY3Rz
LnJlbW92ZShmaW5hbGl6ZWRPYmplY3QpOworICAgIH0KKworICAgIHZvaWQgYXNzZXJ0T2JqZWN0
SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHT2JqZWN0KiBvYmplY3QpCisgICAgeworICAgICAg
ICBtX3dhdGNoZWRPYmplY3RzLmFkZChvYmplY3QpOworICAgICAgICBnX29iamVjdF93ZWFrX3Jl
ZihvYmplY3QsIHJlaW50ZXJwcmV0X2Nhc3Q8R1dlYWtOb3RpZnk+KG9iamVjdEZpbmFsaXplZCks
IHRoaXMpOworICAgIH0KKworICAgIHN0YXRpYyBDU3RyaW5nIGdldFdlYktpdDFUZXN0UmVzb3Vj
ZXNEaXIoKQorICAgIHsKKyAgICAgICAgR093blB0cjxjaGFyPiByZXNvdXJjZXNEaXIoZ19idWls
ZF9maWxlbmFtZShXRUJLSVRfU1JDX0RJUiwgIlRvb2xzIiwgIlRlc3RXZWJLaXRBUEkiLCAiVGVz
dHMiLCAiV2ViS2l0R3RrIiwgInJlc291cmNlcyIsIE5VTEwpKTsKKyAgICAgICAgcmV0dXJuIHJl
c291cmNlc0Rpci5nZXQoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgQ1N0cmluZyBnZXRSZXNvdXJj
ZXNEaXIoKQorICAgIHsKKyAgICAgICAgR093blB0cjxjaGFyPiByZXNvdXJjZXNEaXIoZ19idWls
ZF9maWxlbmFtZShXRUJLSVRfU1JDX0RJUiwgIlRvb2xzIiwgIlRlc3RXZWJLaXRBUEkiLCAiVGVz
dHMiLCAiV2ViS2l0Mkd0ayIsICJyZXNvdXJjZXMiLCBOVUxMKSk7CisgICAgICAgIHJldHVybiBy
ZXNvdXJjZXNEaXIuZ2V0KCk7CisgICAgfQorCisgICAgdm9pZCBhZGRMb2dGYXRhbEZsYWcodW5z
aWduZWQgZmxhZykKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGZhdGFsTWFzayA9IGdfbG9nX3Nl
dF9hbHdheXNfZmF0YWwoc3RhdGljX2Nhc3Q8R0xvZ0xldmVsRmxhZ3M+KEdfTE9HX0ZBVEFMX01B
U0spKTsKKyAgICAgICAgZmF0YWxNYXNrIHw9IGZsYWc7CisgICAgICAgIGdfbG9nX3NldF9hbHdh
eXNfZmF0YWwoc3RhdGljX2Nhc3Q8R0xvZ0xldmVsRmxhZ3M+KGZhdGFsTWFzaykpOworICAgIH0K
KworICAgIHZvaWQgcmVtb3ZlTG9nRmF0YWxGbGFnKHVuc2lnbmVkIGZsYWcpCisgICAgeworICAg
ICAgICB1bnNpZ25lZCBmYXRhbE1hc2sgPSBnX2xvZ19zZXRfYWx3YXlzX2ZhdGFsKHN0YXRpY19j
YXN0PEdMb2dMZXZlbEZsYWdzPihHX0xPR19GQVRBTF9NQVNLKSk7CisgICAgICAgIGZhdGFsTWFz
ayAmPSB+ZmxhZzsKKyAgICAgICAgZ19sb2dfc2V0X2Fsd2F5c19mYXRhbChzdGF0aWNfY2FzdDxH
TG9nTGV2ZWxGbGFncz4oZmF0YWxNYXNrKSk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgY2Fp
cm9TdXJmYWNlc0VxdWFsKGNhaXJvX3N1cmZhY2VfdCogczEsIGNhaXJvX3N1cmZhY2VfdCogczIp
CisgICAgeworICAgICAgICByZXR1cm4gKGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2Zvcm1hdChz
MSkgPT0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZm9ybWF0KHMyKQorICAgICAgICAgICAgJiYg
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoczEpID09IGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X3dpZHRoKHMyKQorICAgICAgICAgICAgJiYgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVp
Z2h0KHMxKSA9PSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoczIpCisgICAgICAgICAg
ICAmJiBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoczEpID09IGNhaXJvX2ltYWdlX3N1
cmZhY2VfZ2V0X3N0cmlkZShzMikKKyAgICAgICAgICAgICYmICFtZW1jbXAoY29uc3RfY2FzdDxj
b25zdCB2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfZGF0YShzMSkpKSwKKyAgICAgICAgICAgICAgICBjb25zdF9jYXN0PGNvbnN0IHZvaWQqPihy
ZWludGVycHJldF9jYXN0PHZvaWQqPihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHMyKSkp
LAorICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzMSkqY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKHMxKSkpOworICAgIH0KKworICAgIEhhc2hTZXQ8
R09iamVjdCo+IG1fd2F0Y2hlZE9iamVjdHM7Cit9OworCisjZW5kaWYgLy8gVGVzdE1haW5faApk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9XZWJLaXRUZXN0
QnVzLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViS2l0VGVzdEJ1
cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMyZDNmNgotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViS2l0VGVz
dEJ1cy5jcHAKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdh
bGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdFRlc3RCdXMuaCIK
KworI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KKworV2ViS2l0VGVzdEJ1czo6V2ViS2l0VGVzdEJ1cygpCisgICAgOiBtX3Bp
ZCgtMSkKK3sKK30KKworYm9vbCBXZWJLaXRUZXN0QnVzOjpydW4oKQoreworICAgIC8vIEZJWE1F
OiBVc2UgR1Rlc3REQnVzIHdoZW4gd2UgYnVtcCBnbGliIHRvIDIuMzQuCisgICAgR093blB0cjxj
aGFyPiBkYnVzTGF1bmNoKGdfZmluZF9wcm9ncmFtX2luX3BhdGgoImRidXMtbGF1bmNoIikpOwor
ICAgIGlmICghZGJ1c0xhdW5jaCkgeworICAgICAgICBnX3dhcm5pbmcoIkVycm9yIHN0YXJ0aW5n
IERCVVMgZGFlbW9uOiBkYnVzLWxhdW5jaCBub3QgZm91bmQgaW4gcGF0aCIpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgR093blB0cjxjaGFyPiBvdXRwdXQ7CisgICAgR093
blB0cjxHRXJyb3I+IGVycm9yOworICAgIGlmICghZ19zcGF3bl9jb21tYW5kX2xpbmVfc3luYyhk
YnVzTGF1bmNoLmdldCgpLCAmb3V0cHV0Lm91dFB0cigpLCAwLCAwLCAmZXJyb3Iub3V0UHRyKCkp
KSB7CisgICAgICAgIGdfd2FybmluZygiRXJyb3Igc3RhcnRpbmcgREJVUyBkYWVtb246ICVzIiwg
ZXJyb3ItPm1lc3NhZ2UpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgU3Ry
aW5nIG91dHB1dFN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgob3V0cHV0LmdldCgpKTsKKyAgICBW
ZWN0b3I8U3RyaW5nPiBsaW5lczsKKyAgICBvdXRwdXRTdHJpbmcuc3BsaXQoVUNoYXIoJ1xuJyks
IC8qIGFsbG93RW1wdHlFbnRyaWVzICovIGZhbHNlLCBsaW5lcyk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBsaW5lcy5zaXplKCk7ICsraSkgeworICAgICAgICBjaGFyKioga2V5VmFsdWUg
PSBnX3N0cnNwbGl0KGxpbmVzW2ldLnV0ZjgoKS5kYXRhKCksICI9IiwgMik7CisgICAgICAgIGdf
YXNzZXJ0X2NtcHVpbnQoZ19zdHJ2X2xlbmd0aChrZXlWYWx1ZSksID09LCAyKTsKKyAgICAgICAg
aWYgKCFnX3N0cmNtcDAoa2V5VmFsdWVbMF0sICJEQlVTX1NFU1NJT05fQlVTX0FERFJFU1MiKSkg
eworICAgICAgICAgICAgbV9hZGRyZXNzID0ga2V5VmFsdWVbMV07CisgICAgICAgICAgICBnX3Nl
dGVudigiREJVU19TRVNTSU9OX0JVU19BRERSRVNTIiwga2V5VmFsdWVbMV0sIFRSVUUpOworICAg
ICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAoa2V5VmFsdWVbMF0sICJEQlVTX1NFU1NJT05fQlVT
X1BJRCIpKQorICAgICAgICAgICAgbV9waWQgPSBnX2FzY2lpX3N0cnRvbGwoa2V5VmFsdWVbMV0s
IDAsIDEwKTsKKyAgICAgICAgZ19zdHJmcmVldihrZXlWYWx1ZSk7CisgICAgfQorCisgICAgcmV0
dXJuIG1fcGlkID4gMDsKK30KKworV2ViS2l0VGVzdEJ1czo6fldlYktpdFRlc3RCdXMoKQorewor
ICAgIGdfdW5zZXRlbnYoIkRCVVNfU0VTU0lPTl9CVVNfQUREUkVTUyIpOworCisgICAgaWYgKG1f
cGlkICE9IC0xKQorICAgICAgICBraWxsKG1fcGlkLCBTSUdURVJNKTsKK30KKworR0RCdXNDb25u
ZWN0aW9uKiBXZWJLaXRUZXN0QnVzOjpnZXRPckNyZWF0ZUNvbm5lY3Rpb24oKQoreworICAgIGlm
IChtX2Nvbm5lY3Rpb24pCisgICAgICAgIHJldHVybiBtX2Nvbm5lY3Rpb24uZ2V0KCk7CisKKyAg
ICBnX2Fzc2VydCghbV9hZGRyZXNzLmlzTnVsbCgpKTsKKyAgICBtX2Nvbm5lY3Rpb24gPSBhZG9w
dEdSZWYoZ19kYnVzX2Nvbm5lY3Rpb25fbmV3X2Zvcl9hZGRyZXNzX3N5bmMobV9hZGRyZXNzLmRh
dGEoKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8R0RCdXNDb25uZWN0aW9uRmxhZ3M+KEdfREJVU19D
T05ORUNUSU9OX0ZMQUdTX0FVVEhFTlRJQ0FUSU9OX0NMSUVOVCB8IEdfREJVU19DT05ORUNUSU9O
X0ZMQUdTX01FU1NBR0VfQlVTX0NPTk5FQ1RJT04pLAorICAgICAgICAwLCAwLCAwKSk7CisgICAg
cmV0dXJuIG1fY29ubmVjdGlvbi5nZXQoKTsKK30KKworc3RhdGljIHZvaWQgb25OYW1lQXBwZWFy
ZWQoR0RCdXNDb25uZWN0aW9uKiwgY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBncG9pbnRlciB1
c2VyRGF0YSkKK3sKKyAgICBnX21haW5fbG9vcF9xdWl0KHN0YXRpY19jYXN0PEdNYWluTG9vcCo+
KHVzZXJEYXRhKSk7Cit9CisKK0dEQnVzUHJveHkqIFdlYktpdFRlc3RCdXM6OmNyZWF0ZVByb3h5
KGNvbnN0IGNoYXIqIHNlcnZpY2VOYW1lLCBjb25zdCBjaGFyKiBvYmplY3RQYXRoLCBjb25zdCBj
aGFyKiBpbnRlcmZhY2VOYW1lLCBHTWFpbkxvb3AqIG1haW5Mb29wKQoreworICAgIHVuc2lnbmVk
IHdhdGNoZXJJRCA9IGdfYnVzX3dhdGNoX25hbWVfb25fY29ubmVjdGlvbihnZXRPckNyZWF0ZUNv
bm5lY3Rpb24oKSwgc2VydmljZU5hbWUsIEdfQlVTX05BTUVfV0FUQ0hFUl9GTEFHU19OT05FLCBv
bk5hbWVBcHBlYXJlZCwgMCwgbWFpbkxvb3AsIDApOworICAgIGdfbWFpbl9sb29wX3J1bihtYWlu
TG9vcCk7CisgICAgZ19idXNfdW53YXRjaF9uYW1lKHdhdGNoZXJJRCk7CisKKyAgICBHREJ1c1By
b3h5KiBwcm94eSA9IGdfZGJ1c19wcm94eV9uZXdfc3luYygKKyAgICAgICAgY29ubmVjdGlvbigp
LAorICAgICAgICBHX0RCVVNfUFJPWFlfRkxBR1NfRE9fTk9UX0FVVE9fU1RBUlQsCisgICAgICAg
IDAsIC8vIEdEQnVzSW50ZXJmYWNlSW5mbworICAgICAgICBzZXJ2aWNlTmFtZSwKKyAgICAgICAg
b2JqZWN0UGF0aCwKKyAgICAgICAgaW50ZXJmYWNlTmFtZSwKKyAgICAgICAgMCwgLy8gR0NhbmNl
bGxhYmxlCisgICAgICAgIDApOworICAgIGdfYXNzZXJ0KHByb3h5KTsKKyAgICByZXR1cm4gcHJv
eHk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dl
YktpdFRlc3RCdXMuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViS2l0
VGVzdEJ1cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5Zjg1NmIKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYktp
dFRlc3RCdXMuaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEln
YWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZm5kZWYgV2ViS2l0VGVzdEJ1c19oCisjZGVmaW5lIFdlYktpdFRlc3RCdXNf
aAorCisjaW5jbHVkZSA8Z2lvL2dpby5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK2NsYXNzIFdlYktpdFRlc3RCdXMg
eworcHVibGljOgorICAgIFdlYktpdFRlc3RCdXMoKTsKKyAgICB2aXJ0dWFsIH5XZWJLaXRUZXN0
QnVzKCk7CisKKyAgICBib29sIHJ1bigpOworICAgIEdEQnVzUHJveHkqIGNyZWF0ZVByb3h5KGNv
bnN0IGNoYXIqIHNlcnZpY2VOYW1lLCBjb25zdCBjaGFyKiBvYmplY3RQYXRoLCBjb25zdCBjaGFy
KiBpbnRlcmZhY2VOYW1lLCBHTWFpbkxvb3AqKTsKKyAgICBHREJ1c0Nvbm5lY3Rpb24qIGNvbm5l
Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2Nvbm5lY3Rpb24uZ2V0KCk7IH0KKworcHJpdmF0ZToK
KyAgICBHREJ1c0Nvbm5lY3Rpb24qIGdldE9yQ3JlYXRlQ29ubmVjdGlvbigpOworCisgICAgcGlk
X3QgbV9waWQ7CisgICAgQ1N0cmluZyBtX2FkZHJlc3M7CisgICAgR1JlZlB0cjxHREJ1c0Nvbm5l
Y3Rpb24+IG1fY29ubmVjdGlvbjsKK307CisKKyNlbmRpZiAvLyBXZWJLaXRUZXN0QnVzX2gKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViS2l0VGVzdFNl
cnZlci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYktpdFRlc3RT
ZXJ2ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4YjRhOWEKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYktp
dFRlc3RTZXJ2ZXIuY3BwCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdFRlc3RT
ZXJ2ZXIuaCIKKworI2luY2x1ZGUgIlRlc3RNYWluLmgiCisjaW5jbHVkZSA8d3RmL2dvYmplY3Qv
R093blB0ci5oPgorCitXZWJLaXRUZXN0U2VydmVyOjpXZWJLaXRUZXN0U2VydmVyKFNlcnZlclR5
cGUgdHlwZSkKK3sKKyAgICBHT3duUHRyPGNoYXI+IHNzbENlcnRpZmljYXRlRmlsZTsKKyAgICBH
T3duUHRyPGNoYXI+IHNzbEtleUZpbGU7CisgICAgaWYgKHR5cGUgPT0gU2VydmVySFRUUFMpIHsK
KyAgICAgICAgQ1N0cmluZyByZXNvdXJjZXNEaXIgPSBUZXN0OjpnZXRSZXNvdXJjZXNEaXIoKTsK
KyAgICAgICAgc3NsQ2VydGlmaWNhdGVGaWxlLnNldChnX2J1aWxkX2ZpbGVuYW1lKHJlc291cmNl
c0Rpci5kYXRhKCksICJ0ZXN0LWNlcnQucGVtIiwgTlVMTCkpOworICAgICAgICBzc2xLZXlGaWxl
LnNldChnX2J1aWxkX2ZpbGVuYW1lKHJlc291cmNlc0Rpci5kYXRhKCksICJ0ZXN0LWtleS5wZW0i
LCBOVUxMKSk7CisgICAgfQorCisgICAgR1JlZlB0cjxTb3VwQWRkcmVzcz4gYWRkcmVzcyA9IGFk
b3B0R1JlZihzb3VwX2FkZHJlc3NfbmV3KCIxMjcuMC4wLjEiLCBTT1VQX0FERFJFU1NfQU5ZX1BP
UlQpKTsKKyAgICBzb3VwX2FkZHJlc3NfcmVzb2x2ZV9zeW5jKGFkZHJlc3MuZ2V0KCksIDApOwor
CisgICAgbV9zb3VwU2VydmVyID0gYWRvcHRHUmVmKHNvdXBfc2VydmVyX25ldyhTT1VQX1NFUlZF
Ul9JTlRFUkZBQ0UsIGFkZHJlc3MuZ2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTT1VQX1NFUlZFUl9TU0xfQ0VSVF9GSUxFLCBzc2xDZXJ0aWZpY2F0
ZUZpbGUuZ2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTT1VQX1NFUlZFUl9TU0xfS0VZX0ZJTEUsIHNzbEtleUZpbGUuZ2V0KCksIE5VTEwpKTsKKyAg
ICBtX2Jhc2VVUkkgPSB0eXBlID09IFNlcnZlckhUVFBTID8gc291cF91cmlfbmV3KCJodHRwczov
LzEyNy4wLjAuMS8iKSA6IHNvdXBfdXJpX25ldygiaHR0cDovLzEyNy4wLjAuMS8iKTsKKyAgICBz
b3VwX3VyaV9zZXRfcG9ydChtX2Jhc2VVUkksIHNvdXBfc2VydmVyX2dldF9wb3J0KG1fc291cFNl
cnZlci5nZXQoKSkpOworfQorCitXZWJLaXRUZXN0U2VydmVyOjp+V2ViS2l0VGVzdFNlcnZlcigp
Cit7CisgICAgc291cF91cmlfZnJlZShtX2Jhc2VVUkkpOworfQorCit2b2lkIFdlYktpdFRlc3RT
ZXJ2ZXI6OnJ1bihTb3VwU2VydmVyQ2FsbGJhY2sgc2VydmVyQ2FsbGJhY2spCit7CisgICAgc291
cF9zZXJ2ZXJfcnVuX2FzeW5jKG1fc291cFNlcnZlci5nZXQoKSk7CisgICAgc291cF9zZXJ2ZXJf
YWRkX2hhbmRsZXIobV9zb3VwU2VydmVyLmdldCgpLCAwLCBzZXJ2ZXJDYWxsYmFjaywgMCwgMCk7
Cit9CisKK0NTdHJpbmcgV2ViS2l0VGVzdFNlcnZlcjo6Z2V0VVJJRm9yUGF0aChjb25zdCBjaGFy
KiBwYXRoKQoreworICAgIFNvdXBVUkkqIHVyaSA9IHNvdXBfdXJpX25ld193aXRoX2Jhc2UobV9i
YXNlVVJJLCBwYXRoKTsKKyAgICBHT3duUHRyPGdjaGFyPiB1cmlTdHJpbmcoc291cF91cmlfdG9f
c3RyaW5nKHVyaSwgRkFMU0UpKTsKKyAgICBzb3VwX3VyaV9mcmVlKHVyaSk7CisgICAgcmV0dXJu
IHVyaVN0cmluZy5nZXQoKTsKK30KKwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9n
dGsvV2ViS2l0Mkd0ay9XZWJLaXRUZXN0U2VydmVyLmggYi9Ub29scy9UZXN0V2ViS2l0QVBJL2d0
ay9XZWJLaXQyR3RrL1dlYktpdFRlc3RTZXJ2ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5kNDYyNmY2Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9ndGsvV2ViS2l0Mkd0ay9XZWJLaXRUZXN0U2VydmVyLmgKQEAgLTAsMCArMSw0OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdFRlc3RTZXJ2
ZXJfaAorI2RlZmluZSBXZWJLaXRUZXN0U2VydmVyX2gKKworI2luY2x1ZGUgPGxpYnNvdXAvc291
cC5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0
L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK2NsYXNzIFdlYktp
dFRlc3RTZXJ2ZXIgeworcHVibGljOgorCisgICAgZW51bSBTZXJ2ZXJUeXBlIHsKKyAgICAgICAg
U2VydmVySFRUUCwKKyAgICAgICAgU2VydmVySFRUUFMKKyAgICB9OworCisgICAgV2ViS2l0VGVz
dFNlcnZlcihTZXJ2ZXJUeXBlIHR5cGUgPSBTZXJ2ZXJIVFRQKTsKKyAgICB2aXJ0dWFsIH5XZWJL
aXRUZXN0U2VydmVyKCk7CisKKyAgICBTb3VwVVJJKiBiYXNlVVJJKCkgeyByZXR1cm4gbV9iYXNl
VVJJOyB9CisKKyAgICBDU3RyaW5nIGdldFVSSUZvclBhdGgoY29uc3QgY2hhciogcGF0aCk7Cisg
ICAgdm9pZCBydW4oU291cFNlcnZlckNhbGxiYWNrKTsKKworcHJpdmF0ZToKKyAgICBHUmVmUHRy
PFNvdXBTZXJ2ZXI+IG1fc291cFNlcnZlcjsKKyAgICBTb3VwVVJJKiBtX2Jhc2VVUkk7Cit9Owor
CisjZW5kaWYgLy8gV2ViS2l0VGVzdFNlcnZlcl9oCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYlByb2Nlc3NUZXN0UnVubmVyLmNwcCBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViUHJvY2Vzc1Rlc3RSdW5uZXIuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhM2NkOTYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYlByb2Nlc3NUZXN0UnVubmVy
LmNwcApAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJZ2FsaWEg
Uy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Rlc3RSdW5uZXIu
aCIKKworI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKworV2ViUHJvY2Vzc1Rlc3RS
dW5uZXI6OldlYlByb2Nlc3NUZXN0UnVubmVyKCkKKyAgICA6IG1fbWFpbkxvb3AoZ19tYWluX2xv
b3BfbmV3KDAsIFRSVUUpKQorICAgICwgbV9idXMoYWRvcHRHUmVmKGdfdGVzdF9kYnVzX25ldyhH
X1RFU1RfREJVU19OT05FKSkpCit7CisgICAgLy8gU2F2ZSB0aGUgRElTUExBWSBlbnYgdmFyIHRv
IHJlc3RvcmUgaXQgYWZ0ZXIgY2FsbGluZyBnX3Rlc3RfZGJ1c191cCgpIHRoYXQgdW5zZXRzIGl0
LgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI1
NjIxLgorICAgIGNvbnN0IGNoYXIqIGRpc3BsYXkgPSBnX2dldGVudigiRElTUExBWSIpOworICAg
IGdfdGVzdF9kYnVzX3VwKG1fYnVzLmdldCgpKTsKKyAgICBnX3NldGVudigiRElTUExBWSIsIGRp
c3BsYXksIEZBTFNFKTsKKyAgICBtX2Nvbm5lY3Rpb24gPSBhZG9wdEdSZWYoZ19idXNfZ2V0X3N5
bmMoR19CVVNfVFlQRV9TRVNTSU9OLCAwLCAwKSk7Cit9CisKK1dlYlByb2Nlc3NUZXN0UnVubmVy
Ojp+V2ViUHJvY2Vzc1Rlc3RSdW5uZXIoKQoreworICAgIGdfbWFpbl9sb29wX3VucmVmKG1fbWFp
bkxvb3ApOworCisgICAgLy8gZ190ZXN0X2RidXNfZG93biB3YWl0cyB1bnRpbCB0aGUgY29ubmVj
dGlvbiBpcyBmcmVlZCwgc28gcmVsZWFzZSBvdXIgcmVmcyBleHBsaWNpdGx5IGJlZm9yZSBjYWxs
aW5nIGl0LgorICAgIG1fY29ubmVjdGlvbiA9IDA7CisgICAgbV9wcm94eSA9IDA7CisgICAgZ190
ZXN0X2RidXNfZG93bihtX2J1cy5nZXQoKSk7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzc1Rlc3RSdW5u
ZXI6OnByb3h5Q3JlYXRlZENhbGxiYWNrKEdPYmplY3QqLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwg
V2ViUHJvY2Vzc1Rlc3RSdW5uZXIqIHRlc3RSdW5uZXIpCit7CisgICAgdGVzdFJ1bm5lci0+bV9w
cm94eSA9IGFkb3B0R1JlZihnX2RidXNfcHJveHlfbmV3X2ZpbmlzaChyZXN1bHQsIDApKTsKKyAg
ICBnX21haW5fbG9vcF9xdWl0KHRlc3RSdW5uZXItPm1fbWFpbkxvb3ApOworfQorCitHREJ1c1By
b3h5KiBXZWJQcm9jZXNzVGVzdFJ1bm5lcjo6cHJveHkoKQoreworICAgIGlmIChtX3Byb3h5KQor
ICAgICAgICByZXR1cm4gbV9wcm94eS5nZXQoKTsKKworICAgIGdfZGJ1c19wcm94eV9uZXcobV9j
b25uZWN0aW9uLmdldCgpLCBHX0RCVVNfUFJPWFlfRkxBR1NfRE9fTk9UX0FVVE9fU1RBUlQsIDAs
CisgICAgICAgICJvcmcud2Via2l0Lmd0ay5XZWJQcm9jZXNzVGVzdCIsICIvb3JnL3dlYmtpdC9n
dGsvV2ViUHJvY2Vzc1Rlc3QiLCAib3JnLndlYmtpdC5ndGsuV2ViUHJvY2Vzc1Rlc3QiLAorICAg
ICAgICAwLCByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KFdlYlByb2Nlc3NU
ZXN0UnVubmVyOjpwcm94eUNyZWF0ZWRDYWxsYmFjayksIHRoaXMpOworICAgIGdfbWFpbl9sb29w
X3J1bihtX21haW5Mb29wKTsKKyAgICBnX2Fzc2VydChtX3Byb3h5LmdldCgpKTsKKworICAgIHJl
dHVybiBtX3Byb3h5LmdldCgpOworfQorCit2b2lkIFdlYlByb2Nlc3NUZXN0UnVubmVyOjpvbk5h
bWVBcHBlYXJlZChHREJ1c0Nvbm5lY3Rpb24qLCBjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIGdw
b2ludGVyIHVzZXJEYXRhKQoreworICAgIFdlYlByb2Nlc3NUZXN0UnVubmVyKiB0ZXN0UnVubmVy
ID0gc3RhdGljX2Nhc3Q8V2ViUHJvY2Vzc1Rlc3RSdW5uZXIqPih1c2VyRGF0YSk7CisgICAgZ19t
YWluX2xvb3BfcXVpdCh0ZXN0UnVubmVyLT5tX21haW5Mb29wKTsKK30KKwordm9pZCBXZWJQcm9j
ZXNzVGVzdFJ1bm5lcjo6b25OYW1lVmFuaXNoZWQoR0RCdXNDb25uZWN0aW9uKiwgY29uc3QgY2hh
ciogbmFtZSwgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgX2V4aXQoMSk7Cit9CisKK3ZvaWQg
V2ViUHJvY2Vzc1Rlc3RSdW5uZXI6OnRlc3RGaW5pc2hlZENhbGxiYWNrKEdEQnVzUHJveHkqIHBy
b3h5LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgV2ViUHJvY2Vzc1Rlc3RSdW5uZXIqIHRlc3RSdW5u
ZXIpCit7CisgICAgR1JlZlB0cjxHVmFyaWFudD4gcmV0dXJuVmFsdWUgPSBhZG9wdEdSZWYoZ19k
YnVzX3Byb3h5X2NhbGxfZmluaXNoKHByb3h5LCByZXN1bHQsIDApKTsKKyAgICBnX2Fzc2VydChy
ZXR1cm5WYWx1ZS5nZXQoKSk7CisgICAgZ2Jvb2xlYW4gdGVzdFJlc3VsdDsKKyAgICBnX3Zhcmlh
bnRfZ2V0KHJldHVyblZhbHVlLmdldCgpLCAiKGIpIiwgJnRlc3RSZXN1bHQpOworICAgIHRlc3RS
dW5uZXItPmZpbmlzaFRlc3QodGVzdFJlc3VsdCk7Cit9CisKK2Jvb2wgV2ViUHJvY2Vzc1Rlc3RS
dW5uZXI6OnJ1blRlc3QoY29uc3QgY2hhciogc3VpdGVOYW1lLCBjb25zdCBjaGFyKiB0ZXN0TmFt
ZSwgR1ZhcmlhbnQqIGFyZ3MpCit7CisgICAgZ19hc3NlcnQoZ192YXJpYW50X2lzX29mX3R5cGUo
YXJncywgR19WQVJJQU5UX1RZUEVfVkFSRElDVCkpOworCisgICAgdW5zaWduZWQgd2F0Y2hlcklE
ID0gZ19idXNfd2F0Y2hfbmFtZV9vbl9jb25uZWN0aW9uKG1fY29ubmVjdGlvbi5nZXQoKSwgIm9y
Zy53ZWJraXQuZ3RrLldlYlByb2Nlc3NUZXN0IiwgR19CVVNfTkFNRV9XQVRDSEVSX0ZMQUdTX05P
TkUsCisgICAgICAgIFdlYlByb2Nlc3NUZXN0UnVubmVyOjpvbk5hbWVBcHBlYXJlZCwgV2ViUHJv
Y2Vzc1Rlc3RSdW5uZXI6Om9uTmFtZVZhbmlzaGVkLCB0aGlzLCAwKTsKKyAgICBnX21haW5fbG9v
cF9ydW4obV9tYWluTG9vcCk7CisKKyAgICBtX3Rlc3RSZXN1bHQgPSBmYWxzZTsKKyAgICBHT3du
UHRyPGNoYXI+IHRlc3RQYXRoKGdfc3RyZHVwX3ByaW50ZigiJXMvJXMiLCBzdWl0ZU5hbWUsIHRl
c3ROYW1lKSk7CisgICAgZ19kYnVzX3Byb3h5X2NhbGwoCisgICAgICAgIHByb3h5KCksCisgICAg
ICAgICJSdW5UZXN0IiwKKyAgICAgICAgZ192YXJpYW50X25ldygiKHNAYXtzdn0pIiwgdGVzdFBh
dGguZ2V0KCksIGFyZ3MpLAorICAgICAgICBHX0RCVVNfQ0FMTF9GTEFHU19OT05FLAorICAgICAg
ICAtMSwgMCwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihX
ZWJQcm9jZXNzVGVzdFJ1bm5lcjo6dGVzdEZpbmlzaGVkQ2FsbGJhY2spLAorICAgICAgICB0aGlz
KTsKKyAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgZ19idXNfdW53YXRjaF9u
YW1lKHdhdGNoZXJJRCk7CisKKyAgICByZXR1cm4gbV90ZXN0UmVzdWx0OworfQorCit2b2lkIFdl
YlByb2Nlc3NUZXN0UnVubmVyOjpmaW5pc2hUZXN0KGJvb2wgcmVzdWx0KQoreworICAgIG1fdGVz
dFJlc3VsdCA9IHJlc3VsdDsKKyAgICBnX21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3ApOworfQpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9XZWJQcm9jZXNz
VGVzdFJ1bm5lci5oIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9XZWJQcm9j
ZXNzVGVzdFJ1bm5lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MGZh
OTYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3Rr
L1dlYlByb2Nlc3NUZXN0UnVubmVyLmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYlByb2Nlc3NUZXN0UnVubmVyX2gKKyNk
ZWZpbmUgV2ViUHJvY2Vzc1Rlc3RSdW5uZXJfaAorCisjaW5jbHVkZSA8Z2lvL2dpby5oPgorI2lu
Y2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIu
aD4KKworY2xhc3MgV2ViUHJvY2Vzc1Rlc3RSdW5uZXIgeworcHVibGljOgorICAgIFdlYlByb2Nl
c3NUZXN0UnVubmVyKCk7CisgICAgfldlYlByb2Nlc3NUZXN0UnVubmVyKCk7CisKKyAgICBib29s
IHJ1blRlc3QoY29uc3QgY2hhciogc3VpdGVOYW1lLCBjb25zdCBjaGFyKiB0ZXN0TmFtZSwgR1Zh
cmlhbnQqIGFyZ3MpOworCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIHByb3h5Q3JlYXRlZENh
bGxiYWNrKEdPYmplY3QqLCBHQXN5bmNSZXN1bHQqLCBXZWJQcm9jZXNzVGVzdFJ1bm5lciopOwor
ICAgIHN0YXRpYyB2b2lkIG9uTmFtZUFwcGVhcmVkKEdEQnVzQ29ubmVjdGlvbiosIGNvbnN0IGNo
YXIqLCBjb25zdCBjaGFyKiwgZ3BvaW50ZXIpOworICAgIHN0YXRpYyB2b2lkIG9uTmFtZVZhbmlz
aGVkKEdEQnVzQ29ubmVjdGlvbiosIGNvbnN0IGNoYXIqLCBncG9pbnRlcik7CisgICAgc3RhdGlj
IHZvaWQgdGVzdEZpbmlzaGVkQ2FsbGJhY2soR0RCdXNQcm94eSosIEdBc3luY1Jlc3VsdCosIFdl
YlByb2Nlc3NUZXN0UnVubmVyKik7CisKKyAgICBHREJ1c1Byb3h5KiBwcm94eSgpOworICAgIHZv
aWQgZmluaXNoVGVzdChib29sIHJlc3VsdCk7CisKKyAgICBHTWFpbkxvb3AqIG1fbWFpbkxvb3A7
CisgICAgR1JlZlB0cjxHVGVzdERCdXM+IG1fYnVzOworICAgIEdSZWZQdHI8R0RCdXNDb25uZWN0
aW9uPiBtX2Nvbm5lY3Rpb247CisgICAgR1JlZlB0cjxHREJ1c1Byb3h5PiBtX3Byb3h5OworICAg
IGJvb2wgbV90ZXN0UmVzdWx0OworfTsKKworI2VuZGlmIC8vIFdlYlByb2Nlc3NUZXN0UnVubmVy
X2gKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViVmll
d1Rlc3QuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9XZWJWaWV3VGVz
dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZjODQzNAotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViVmlld1Rl
c3QuY3BwCkBAIC0wLDAgKzEsNDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxp
YSBTLkwuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTEgTW90b3JvbGEgTW9iaWxpdHks
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXZWJWaWV3VGVzdC5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dPd25QdHJHdGsuaD4KKworV2ViVmlld1Rlc3Q6OldlYlZp
ZXdUZXN0KCkKKyAgICA6IG1fd2ViVmlldyhXRUJLSVRfV0VCX1ZJRVcoZ19vYmplY3RfcmVmX3Np
bmsod2Via2l0X3dlYl92aWV3X25ldygpKSkpCisgICAgLCBtX21haW5Mb29wKGdfbWFpbl9sb29w
X25ldygwLCBUUlVFKSkKKyAgICAsIG1fcGFyZW50V2luZG93KDApCisgICAgLCBtX2phdmFzY3Jp
cHRSZXN1bHQoMCkKKyAgICAsIG1fcmVzb3VyY2VEYXRhU2l6ZSgwKQorICAgICwgbV9zdXJmYWNl
KDApCit7CisgICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVD
VChtX3dlYlZpZXcpKTsKK30KKworV2ViVmlld1Rlc3Q6On5XZWJWaWV3VGVzdCgpCit7CisgICAg
aWYgKG1fcGFyZW50V2luZG93KQorICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV9wYXJlbnRX
aW5kb3cpOworICAgIGlmIChtX2phdmFzY3JpcHRSZXN1bHQpCisgICAgICAgIHdlYmtpdF9qYXZh
c2NyaXB0X3Jlc3VsdF91bnJlZihtX2phdmFzY3JpcHRSZXN1bHQpOworICAgIGlmIChtX3N1cmZh
Y2UpCisgICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShtX3N1cmZhY2UpOworICAgIGdfb2Jq
ZWN0X3VucmVmKG1fd2ViVmlldyk7CisgICAgZ19tYWluX2xvb3BfdW5yZWYobV9tYWluTG9vcCk7
Cit9CisKK3ZvaWQgV2ViVmlld1Rlc3Q6OmxvYWRVUkkoY29uc3QgY2hhciogdXJpKQoreworICAg
IG1fYWN0aXZlVVJJID0gdXJpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaShtX3dlYlZp
ZXcsIHVyaSk7Cit9CisKK3ZvaWQgV2ViVmlld1Rlc3Q6OmxvYWRIdG1sKGNvbnN0IGNoYXIqIGh0
bWwsIGNvbnN0IGNoYXIqIGJhc2VVUkkpCit7CisgICAgaWYgKCFiYXNlVVJJKQorICAgICAgICBt
X2FjdGl2ZVVSSSA9ICJhYm91dDpibGFuayI7CisgICAgZWxzZQorICAgICAgICBtX2FjdGl2ZVVS
SSA9IGJhc2VVUkk7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfaHRtbChtX3dlYlZpZXcsIGh0
bWwsIGJhc2VVUkkpOworfQorCit2b2lkIFdlYlZpZXdUZXN0Ojpsb2FkUGxhaW5UZXh0KGNvbnN0
IGNoYXIqIHBsYWluVGV4dCkKK3sKKyAgICBtX2FjdGl2ZVVSSSA9ICJhYm91dDpibGFuayI7Cisg
ICAgd2Via2l0X3dlYl92aWV3X2xvYWRfcGxhaW5fdGV4dChtX3dlYlZpZXcsIHBsYWluVGV4dCk7
Cit9CisKK3ZvaWQgV2ViVmlld1Rlc3Q6OmxvYWRSZXF1ZXN0KFdlYktpdFVSSVJlcXVlc3QqIHJl
cXVlc3QpCit7CisgICAgbV9hY3RpdmVVUkkgPSB3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3VyaShy
ZXF1ZXN0KTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9yZXF1ZXN0KG1fd2ViVmlldywgcmVx
dWVzdCk7Cit9CisKK3ZvaWQgV2ViVmlld1Rlc3Q6OmxvYWRBbHRlcm5hdGVIVE1MKGNvbnN0IGNo
YXIqIGh0bWwsIGNvbnN0IGNoYXIqIGNvbnRlbnRVUkksIGNvbnN0IGNoYXIqIGJhc2VVUkkpCit7
CisgICAgbV9hY3RpdmVVUkkgPSBjb250ZW50VVJJOworICAgIHdlYmtpdF93ZWJfdmlld19sb2Fk
X2FsdGVybmF0ZV9odG1sKG1fd2ViVmlldywgaHRtbCwgY29udGVudFVSSSwgYmFzZVVSSSk7Cit9
CisKK3ZvaWQgV2ViVmlld1Rlc3Q6OmdvQmFjaygpCit7CisgICAgaWYgKHdlYmtpdF93ZWJfdmll
d19jYW5fZ29fYmFjayhtX3dlYlZpZXcpKSB7CisgICAgICAgIFdlYktpdEJhY2tGb3J3YXJkTGlz
dCogbGlzdCA9IHdlYmtpdF93ZWJfdmlld19nZXRfYmFja19mb3J3YXJkX2xpc3QobV93ZWJWaWV3
KTsKKyAgICAgICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSogaXRlbSA9IHdlYmtpdF9iYWNr
X2ZvcndhcmRfbGlzdF9nZXRfbnRoX2l0ZW0obGlzdCwgLTEpOworICAgICAgICBtX2FjdGl2ZVVS
SSA9IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dldF9vcmlnaW5hbF91cmkoaXRlbSk7
CisgICAgfQorCisgICAgLy8gQ2FsbCBnb19iYWNrIGV2ZW4gd2hlbiBjYW5fZ29fYmFjayByZXR1
cm5zIEZBTFNFIHRvIGNoZWNrIG5vdGhpbmcgaGFwcGVucy4KKyAgICB3ZWJraXRfd2ViX3ZpZXdf
Z29fYmFjayhtX3dlYlZpZXcpOworfQorCit2b2lkIFdlYlZpZXdUZXN0Ojpnb0ZvcndhcmQoKQor
eworICAgIGlmICh3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQobV93ZWJWaWV3KSkgewor
ICAgICAgICBXZWJLaXRCYWNrRm9yd2FyZExpc3QqIGxpc3QgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X2JhY2tfZm9yd2FyZF9saXN0KG1fd2ViVmlldyk7CisgICAgICAgIFdlYktpdEJhY2tGb3J3YXJk
TGlzdEl0ZW0qIGl0ZW0gPSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X250aF9pdGVtKGxp
c3QsIDEpOworICAgICAgICBtX2FjdGl2ZVVSSSA9IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9p
dGVtX2dldF9vcmlnaW5hbF91cmkoaXRlbSk7CisgICAgfQorCisgICAgLy8gQ2FsbCBnb19mb3J3
YXJkIGV2ZW4gd2hlbiBjYW5fZ29fZm9yd2FyZCByZXR1cm5zIEZBTFNFIHRvIGNoZWNrIG5vdGhp
bmcgaGFwcGVucy4KKyAgICB3ZWJraXRfd2ViX3ZpZXdfZ29fZm9yd2FyZChtX3dlYlZpZXcpOwor
fQorCit2b2lkIFdlYlZpZXdUZXN0Ojpnb1RvQmFja0ZvcndhcmRMaXN0SXRlbShXZWJLaXRCYWNr
Rm9yd2FyZExpc3RJdGVtKiBpdGVtKQoreworICAgIG1fYWN0aXZlVVJJID0gd2Via2l0X2JhY2tf
Zm9yd2FyZF9saXN0X2l0ZW1fZ2V0X29yaWdpbmFsX3VyaShpdGVtKTsKKyAgICB3ZWJraXRfd2Vi
X3ZpZXdfZ29fdG9fYmFja19mb3J3YXJkX2xpc3RfaXRlbShtX3dlYlZpZXcsIGl0ZW0pOworfQor
Cit2b2lkIFdlYlZpZXdUZXN0OjpxdWl0TWFpbkxvb3AoKQoreworICAgIGdfbWFpbl9sb29wX3F1
aXQobV9tYWluTG9vcCk7Cit9CisKK3ZvaWQgV2ViVmlld1Rlc3Q6OnF1aXRNYWluTG9vcEFmdGVy
UHJvY2Vzc2luZ1BlbmRpbmdFdmVudHMoKQoreworICAgIHdoaWxlIChndGtfZXZlbnRzX3BlbmRp
bmcoKSkKKyAgICAgICAgZ3RrX21haW5faXRlcmF0aW9uKCk7CisgICAgcXVpdE1haW5Mb29wKCk7
Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBxdWl0TWFpbkxvb3BJZGxlQ2FsbGJhY2soV2ViVmlld1Rl
c3QqIHRlc3QpCit7CisgICAgdGVzdC0+cXVpdE1haW5Mb29wKCk7CisgICAgcmV0dXJuIEZBTFNF
OworfQorCit2b2lkIFdlYlZpZXdUZXN0Ojp3YWl0KGRvdWJsZSBzZWNvbmRzKQoreworICAgIGdf
dGltZW91dF9hZGRfc2Vjb25kcyhzZWNvbmRzLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5j
PihxdWl0TWFpbkxvb3BJZGxlQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX21haW5fbG9vcF9ydW4o
bV9tYWluTG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRDaGFuZ2VkKFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcsIFdlYktpdExvYWRFdmVudCBsb2FkRXZlbnQsIFdlYlZpZXdUZXN0KiB0ZXN0KQor
eworICAgIGlmIChsb2FkRXZlbnQgIT0gV0VCS0lUX0xPQURfRklOSVNIRUQpCisgICAgICAgIHJl
dHVybjsKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMod2ViVmlldywg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obG9hZENoYW5nZWQpLCB0ZXN0KTsKKyAgICBnX21haW5f
bG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworfQorCit2b2lkIFdlYlZpZXdUZXN0Ojp3YWl0
VW50aWxMb2FkRmluaXNoZWQoKQoreworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAi
bG9hZC1jaGFuZ2VkIiwgR19DQUxMQkFDSyhsb2FkQ2hhbmdlZCksIHRoaXMpOworICAgIGdfbWFp
bl9sb29wX3J1bihtX21haW5Mb29wKTsKK30KKworc3RhdGljIHZvaWQgdGl0bGVDaGFuZ2VkKFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcsIEdQYXJhbVNwZWMqLCBXZWJWaWV3VGVzdCogdGVzdCkKK3sK
KyAgICBpZiAoIXRlc3QtPm1fZXhwZWN0ZWRUaXRsZS5pc051bGwoKSAmJiB0ZXN0LT5tX2V4cGVj
dGVkVGl0bGUgIT0gd2Via2l0X3dlYl92aWV3X2dldF90aXRsZSh3ZWJWaWV3KSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKHdlYlZp
ZXcsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHRpdGxlQ2hhbmdlZCksIHRlc3QpOworICAgIGdf
bWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7Cit9CisKK3ZvaWQgV2ViVmlld1Rlc3Q6
OndhaXRVbnRpbFRpdGxlQ2hhbmdlZFRvKGNvbnN0IGNoYXIqIGV4cGVjdGVkVGl0bGUpCit7Cisg
ICAgbV9leHBlY3RlZFRpdGxlID0gZXhwZWN0ZWRUaXRsZTsKKyAgICBnX3NpZ25hbF9jb25uZWN0
KG1fd2ViVmlldywgIm5vdGlmeTo6dGl0bGUiLCBHX0NBTExCQUNLKHRpdGxlQ2hhbmdlZCksIHRo
aXMpOworICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICBtX2V4cGVjdGVkVGl0
bGUgPSBDU3RyaW5nKCk7Cit9CisKK3ZvaWQgV2ViVmlld1Rlc3Q6OndhaXRVbnRpbFRpdGxlQ2hh
bmdlZCgpCit7CisgICAgd2FpdFVudGlsVGl0bGVDaGFuZ2VkVG8oMCk7Cit9CisKK3N0YXRpYyBn
Ym9vbGVhbiBwYXJlbnRXaW5kb3dNYXBwZWQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50Kiwg
V2ViVmlld1Rlc3QqIHRlc3QpCit7CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9i
eV9mdW5jKHdpZGdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocGFyZW50V2luZG93TWFwcGVk
KSwgdGVzdCk7CisgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKworICAg
IHJldHVybiBGQUxTRTsKK30KKwordm9pZCBXZWJWaWV3VGVzdDo6c2hvd0luV2luZG93KEd0a1dp
bmRvd1R5cGUgd2luZG93VHlwZSkKK3sKKyAgICBnX2Fzc2VydCghbV9wYXJlbnRXaW5kb3cpOwor
ICAgIG1fcGFyZW50V2luZG93ID0gZ3RrX3dpbmRvd19uZXcod2luZG93VHlwZSk7CisgICAgZ3Rr
X2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihtX3BhcmVudFdpbmRvdyksIEdUS19XSURHRVQo
bV93ZWJWaWV3KSk7CisgICAgZ3RrX3dpZGdldF9zaG93KEdUS19XSURHRVQobV93ZWJWaWV3KSk7
CisgICAgZ3RrX3dpZGdldF9zaG93KG1fcGFyZW50V2luZG93KTsKK30KKwordm9pZCBXZWJWaWV3
VGVzdDo6c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKEd0a1dpbmRvd1R5cGUgd2luZG93
VHlwZSkKK3sKKyAgICBnX2Fzc2VydCghbV9wYXJlbnRXaW5kb3cpOworICAgIG1fcGFyZW50V2lu
ZG93ID0gZ3RrX3dpbmRvd19uZXcod2luZG93VHlwZSk7CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQo
R1RLX0NPTlRBSU5FUihtX3BhcmVudFdpbmRvdyksIEdUS19XSURHRVQobV93ZWJWaWV3KSk7Cisg
ICAgZ3RrX3dpZGdldF9zaG93KEdUS19XSURHRVQobV93ZWJWaWV3KSk7CisKKyAgICBnX3NpZ25h
bF9jb25uZWN0KG1fcGFyZW50V2luZG93LCAibWFwLWV2ZW50IiwgR19DQUxMQkFDSyhwYXJlbnRX
aW5kb3dNYXBwZWQpLCB0aGlzKTsKKyAgICBndGtfd2lkZ2V0X3Nob3cobV9wYXJlbnRXaW5kb3cp
OworICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKK30KKwordm9pZCBXZWJWaWV3VGVz
dDo6cmVzaXplVmlldyhpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisgICAgR3RrQWxsb2NhdGlv
biBhbGxvY2F0aW9uOworICAgIGd0a193aWRnZXRfZ2V0X2FsbG9jYXRpb24oR1RLX1dJREdFVCht
X3dlYlZpZXcpLCAmYWxsb2NhdGlvbik7CisgICAgaWYgKHdpZHRoICE9IC0xKQorICAgICAgICBh
bGxvY2F0aW9uLndpZHRoID0gd2lkdGg7CisgICAgaWYgKGhlaWdodCAhPSAtMSkKKyAgICAgICAg
YWxsb2NhdGlvbi5oZWlnaHQgPSBoZWlnaHQ7CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRl
KEdUS19XSURHRVQobV93ZWJWaWV3KSwgJmFsbG9jYXRpb24pOworfQorCit2b2lkIFdlYlZpZXdU
ZXN0OjpzZWxlY3RBbGwoKQoreworICAgIHdlYmtpdF93ZWJfdmlld19leGVjdXRlX2VkaXRpbmdf
Y29tbWFuZChtX3dlYlZpZXcsICJTZWxlY3RBbGwiKTsKK30KKworc3RhdGljIHZvaWQgcmVzb3Vy
Y2VHZXREYXRhQ2FsbGJhY2soR09iamVjdCogb2JqZWN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwg
Z3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgc2l6ZV90IGRhdGFTaXplOworICAgIEdPd25QdHI8
R0Vycm9yPiBlcnJvcjsKKyAgICB1bnNpZ25lZCBjaGFyKiBkYXRhID0gd2Via2l0X3dlYl9yZXNv
dXJjZV9nZXRfZGF0YV9maW5pc2goV0VCS0lUX1dFQl9SRVNPVVJDRShvYmplY3QpLCByZXN1bHQs
ICZkYXRhU2l6ZSwgJmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fzc2VydChkYXRhKTsKKworICAg
IFdlYlZpZXdUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8V2ViVmlld1Rlc3QqPih1c2VyRGF0YSk7
CisgICAgdGVzdC0+bV9yZXNvdXJjZURhdGEuc2V0KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGRh
dGEpKTsKKyAgICB0ZXN0LT5tX3Jlc291cmNlRGF0YVNpemUgPSBkYXRhU2l6ZTsKKyAgICBnX21h
aW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworfQorCitjb25zdCBjaGFyKiBXZWJWaWV3
VGVzdDo6bWFpblJlc291cmNlRGF0YShzaXplX3QmIG1haW5SZXNvdXJjZURhdGFTaXplKQorewor
ICAgIG1fcmVzb3VyY2VEYXRhU2l6ZSA9IDA7CisgICAgbV9yZXNvdXJjZURhdGEuY2xlYXIoKTsK
KyAgICBXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21h
aW5fcmVzb3VyY2UobV93ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChyZXNvdXJjZSk7CisKKyAgICB3
ZWJraXRfd2ViX3Jlc291cmNlX2dldF9kYXRhKHJlc291cmNlLCAwLCByZXNvdXJjZUdldERhdGFD
YWxsYmFjaywgdGhpcyk7CisgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworCisgICAg
bWFpblJlc291cmNlRGF0YVNpemUgPSBtX3Jlc291cmNlRGF0YVNpemU7CisgICAgcmV0dXJuIG1f
cmVzb3VyY2VEYXRhLmdldCgpOworfQorCit2b2lkIFdlYlZpZXdUZXN0Ojptb3VzZU1vdmVUbyhp
bnQgeCwgaW50IHksIHVuc2lnbmVkIGludCBtb3VzZU1vZGlmaWVycykKK3sKKyAgICBnX2Fzc2Vy
dChtX3BhcmVudFdpbmRvdyk7CisgICAgR3RrV2lkZ2V0KiB2aWV3V2lkZ2V0ID0gR1RLX1dJREdF
VChtX3dlYlZpZXcpOworICAgIGdfYXNzZXJ0KGd0a193aWRnZXRfZ2V0X3JlYWxpemVkKHZpZXdX
aWRnZXQpKTsKKworICAgIEdPd25QdHI8R2RrRXZlbnQ+IGV2ZW50KGdka19ldmVudF9uZXcoR0RL
X01PVElPTl9OT1RJRlkpKTsKKyAgICBldmVudC0+bW90aW9uLnggPSB4OworICAgIGV2ZW50LT5t
b3Rpb24ueSA9IHk7CisKKyAgICBldmVudC0+bW90aW9uLnRpbWUgPSBHREtfQ1VSUkVOVF9USU1F
OworICAgIGV2ZW50LT5tb3Rpb24ud2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KHZpZXdX
aWRnZXQpOworICAgIGdfb2JqZWN0X3JlZihldmVudC0+bW90aW9uLndpbmRvdyk7CisgICAgZXZl
bnQtPm1vdGlvbi5kZXZpY2UgPSBnZGtfZGV2aWNlX21hbmFnZXJfZ2V0X2NsaWVudF9wb2ludGVy
KGdka19kaXNwbGF5X2dldF9kZXZpY2VfbWFuYWdlcihndGtfd2lkZ2V0X2dldF9kaXNwbGF5KHZp
ZXdXaWRnZXQpKSk7CisgICAgZXZlbnQtPm1vdGlvbi5zdGF0ZSA9IG1vdXNlTW9kaWZpZXJzOwor
ICAgIGV2ZW50LT5tb3Rpb24uYXhlcyA9IDA7CisKKyAgICBpbnQgeFJvb3QsIHlSb290OworICAg
IGdka193aW5kb3dfZ2V0X3Jvb3RfY29vcmRzKGd0a193aWRnZXRfZ2V0X3dpbmRvdyh2aWV3V2lk
Z2V0KSwgeCwgeSwgJnhSb290LCAmeVJvb3QpOworICAgIGV2ZW50LT5tb3Rpb24ueF9yb290ID0g
eFJvb3Q7CisgICAgZXZlbnQtPm1vdGlvbi55X3Jvb3QgPSB5Um9vdDsKKyAgICBndGtfbWFpbl9k
b19ldmVudChldmVudC5nZXQoKSk7Cit9CisKK3ZvaWQgV2ViVmlld1Rlc3Q6OmNsaWNrTW91c2VC
dXR0b24oaW50IHgsIGludCB5LCB1bnNpZ25lZCBpbnQgYnV0dG9uLCB1bnNpZ25lZCBpbnQgbW91
c2VNb2RpZmllcnMpCit7CisgICAgZG9Nb3VzZUJ1dHRvbkV2ZW50KEdES19CVVRUT05fUFJFU1Ms
IHgsIHksIGJ1dHRvbiwgbW91c2VNb2RpZmllcnMpOworICAgIGRvTW91c2VCdXR0b25FdmVudChH
REtfQlVUVE9OX1JFTEVBU0UsIHgsIHksIGJ1dHRvbiwgbW91c2VNb2RpZmllcnMpOworfQorCit2
b2lkIFdlYlZpZXdUZXN0OjprZXlTdHJva2UodW5zaWduZWQgaW50IGtleVZhbCwgdW5zaWduZWQg
aW50IGtleU1vZGlmaWVycykKK3sKKyAgICBnX2Fzc2VydChtX3BhcmVudFdpbmRvdyk7CisgICAg
R3RrV2lkZ2V0KiB2aWV3V2lkZ2V0ID0gR1RLX1dJREdFVChtX3dlYlZpZXcpOworICAgIGdfYXNz
ZXJ0KGd0a193aWRnZXRfZ2V0X3JlYWxpemVkKHZpZXdXaWRnZXQpKTsKKworICAgIEdPd25QdHI8
R2RrRXZlbnQ+IGV2ZW50KGdka19ldmVudF9uZXcoR0RLX0tFWV9QUkVTUykpOworICAgIGV2ZW50
LT5rZXkua2V5dmFsID0ga2V5VmFsOworCisgICAgZXZlbnQtPmtleS50aW1lID0gR0RLX0NVUlJF
TlRfVElNRTsKKyAgICBldmVudC0+a2V5LndpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyh2
aWV3V2lkZ2V0KTsKKyAgICBnX29iamVjdF9yZWYoZXZlbnQtPmtleS53aW5kb3cpOworICAgIGdk
a19ldmVudF9zZXRfZGV2aWNlKGV2ZW50LmdldCgpLCBnZGtfZGV2aWNlX21hbmFnZXJfZ2V0X2Ns
aWVudF9wb2ludGVyKGdka19kaXNwbGF5X2dldF9kZXZpY2VfbWFuYWdlcihndGtfd2lkZ2V0X2dl
dF9kaXNwbGF5KHZpZXdXaWRnZXQpKSkpOworICAgIGV2ZW50LT5rZXkuc3RhdGUgPSBrZXlNb2Rp
ZmllcnM7CisKKyAgICAvLyBXaGVuIHN5bnRoZXNpemluZyBhbiBldmVudCwgYW4gaW52YWxpZCBo
YXJkd2FyZV9rZXljb2RlIHZhbHVlIGNhbiBjYXVzZSBpdCB0byBiZSBiYWRseSBwcm9jZXNzZWQg
YnkgR1RLKy4KKyAgICBHT3duUHRyPEdka0tleW1hcEtleT4ga2V5czsKKyAgICBpbnQga2V5c0Nv
dW50OworICAgIGlmIChnZGtfa2V5bWFwX2dldF9lbnRyaWVzX2Zvcl9rZXl2YWwoZ2RrX2tleW1h
cF9nZXRfZGVmYXVsdCgpLCBrZXlWYWwsICZrZXlzLm91dFB0cigpLCAma2V5c0NvdW50KSkKKyAg
ICAgICAgZXZlbnQtPmtleS5oYXJkd2FyZV9rZXljb2RlID0ga2V5cy5nZXQoKVswXS5rZXljb2Rl
OworCisgICAgZ3RrX21haW5fZG9fZXZlbnQoZXZlbnQuZ2V0KCkpOworICAgIGV2ZW50LT5rZXku
dHlwZSA9IEdES19LRVlfUkVMRUFTRTsKKyAgICBndGtfbWFpbl9kb19ldmVudChldmVudC5nZXQo
KSk7Cit9CisKK3ZvaWQgV2ViVmlld1Rlc3Q6OmRvTW91c2VCdXR0b25FdmVudChHZGtFdmVudFR5
cGUgZXZlbnRUeXBlLCBpbnQgeCwgaW50IHksIHVuc2lnbmVkIGludCBidXR0b24sIHVuc2lnbmVk
IGludCBtb3VzZU1vZGlmaWVycykKK3sKKyAgICBnX2Fzc2VydChtX3BhcmVudFdpbmRvdyk7Cisg
ICAgR3RrV2lkZ2V0KiB2aWV3V2lkZ2V0ID0gR1RLX1dJREdFVChtX3dlYlZpZXcpOworICAgIGdf
YXNzZXJ0KGd0a193aWRnZXRfZ2V0X3JlYWxpemVkKHZpZXdXaWRnZXQpKTsKKworICAgIEdPd25Q
dHI8R2RrRXZlbnQ+IGV2ZW50KGdka19ldmVudF9uZXcoZXZlbnRUeXBlKSk7CisgICAgZXZlbnQt
PmJ1dHRvbi53aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3codmlld1dpZGdldCk7CisgICAg
Z19vYmplY3RfcmVmKGV2ZW50LT5idXR0b24ud2luZG93KTsKKworICAgIGV2ZW50LT5idXR0b24u
dGltZSA9IEdES19DVVJSRU5UX1RJTUU7CisgICAgZXZlbnQtPmJ1dHRvbi54ID0geDsKKyAgICBl
dmVudC0+YnV0dG9uLnkgPSB5OworICAgIGV2ZW50LT5idXR0b24uYXhlcyA9IDA7CisgICAgZXZl
bnQtPmJ1dHRvbi5zdGF0ZSA9IG1vdXNlTW9kaWZpZXJzOworICAgIGV2ZW50LT5idXR0b24uYnV0
dG9uID0gYnV0dG9uOworCisgICAgZXZlbnQtPmJ1dHRvbi5kZXZpY2UgPSBnZGtfZGV2aWNlX21h
bmFnZXJfZ2V0X2NsaWVudF9wb2ludGVyKGdka19kaXNwbGF5X2dldF9kZXZpY2VfbWFuYWdlcihn
dGtfd2lkZ2V0X2dldF9kaXNwbGF5KHZpZXdXaWRnZXQpKSk7CisKKyAgICBpbnQgeFJvb3QsIHlS
b290OworICAgIGdka193aW5kb3dfZ2V0X3Jvb3RfY29vcmRzKGd0a193aWRnZXRfZ2V0X3dpbmRv
dyh2aWV3V2lkZ2V0KSwgeCwgeSwgJnhSb290LCAmeVJvb3QpOworICAgIGV2ZW50LT5idXR0b24u
eF9yb290ID0geFJvb3Q7CisgICAgZXZlbnQtPmJ1dHRvbi55X3Jvb3QgPSB5Um9vdDsKKyAgICBn
dGtfbWFpbl9kb19ldmVudChldmVudC5nZXQoKSk7Cit9CisKK3N0YXRpYyB2b2lkIHJ1bkphdmFT
Y3JpcHRSZWFkeUNhbGxiYWNrKEdPYmplY3QqLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgV2ViVmll
d1Rlc3QqIHRlc3QpCit7CisgICAgdGVzdC0+bV9qYXZhc2NyaXB0UmVzdWx0ID0gd2Via2l0X3dl
Yl92aWV3X3J1bl9qYXZhc2NyaXB0X2ZpbmlzaCh0ZXN0LT5tX3dlYlZpZXcsIHJlc3VsdCwgdGVz
dC0+bV9qYXZhc2NyaXB0RXJyb3IpOworICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWlu
TG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIHJ1bkphdmFTY3JpcHRGcm9tR1Jlc291cmNlUmVhZHlD
YWxsYmFjayhHT2JqZWN0KiwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIFdlYlZpZXdUZXN0KiB0ZXN0
KQoreworICAgIHRlc3QtPm1famF2YXNjcmlwdFJlc3VsdCA9IHdlYmtpdF93ZWJfdmlld19ydW5f
amF2YXNjcmlwdF9mcm9tX2dyZXNvdXJjZV9maW5pc2godGVzdC0+bV93ZWJWaWV3LCByZXN1bHQs
IHRlc3QtPm1famF2YXNjcmlwdEVycm9yKTsKKyAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1f
bWFpbkxvb3ApOworfQorCitXZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBXZWJWaWV3VGVzdDo6cnVu
SmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKGNvbnN0IGNoYXIqIGphdmFzY3JpcHQsIEdF
cnJvcioqIGVycm9yKQoreworICAgIGlmIChtX2phdmFzY3JpcHRSZXN1bHQpCisgICAgICAgIHdl
YmtpdF9qYXZhc2NyaXB0X3Jlc3VsdF91bnJlZihtX2phdmFzY3JpcHRSZXN1bHQpOworICAgIG1f
amF2YXNjcmlwdFJlc3VsdCA9IDA7CisgICAgbV9qYXZhc2NyaXB0RXJyb3IgPSBlcnJvcjsKKyAg
ICB3ZWJraXRfd2ViX3ZpZXdfcnVuX2phdmFzY3JpcHQobV93ZWJWaWV3LCBqYXZhc2NyaXB0LCAw
LCByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KHJ1bkphdmFTY3JpcHRSZWFk
eUNhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworCisg
ICAgcmV0dXJuIG1famF2YXNjcmlwdFJlc3VsdDsKK30KKworV2ViS2l0SmF2YXNjcmlwdFJlc3Vs
dCogV2ViVmlld1Rlc3Q6OnJ1bkphdmFTY3JpcHRGcm9tR1Jlc291cmNlQW5kV2FpdFVudGlsRmlu
aXNoZWQoY29uc3QgY2hhciogcmVzb3VyY2UsIEdFcnJvcioqIGVycm9yKQoreworICAgIGlmICht
X2phdmFzY3JpcHRSZXN1bHQpCisgICAgICAgIHdlYmtpdF9qYXZhc2NyaXB0X3Jlc3VsdF91bnJl
ZihtX2phdmFzY3JpcHRSZXN1bHQpOworICAgIG1famF2YXNjcmlwdFJlc3VsdCA9IDA7CisgICAg
bV9qYXZhc2NyaXB0RXJyb3IgPSBlcnJvcjsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfcnVuX2phdmFz
Y3JpcHRfZnJvbV9ncmVzb3VyY2UobV93ZWJWaWV3LCByZXNvdXJjZSwgMCwgcmVpbnRlcnByZXRf
Y2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihydW5KYXZhU2NyaXB0RnJvbUdSZXNvdXJjZVJlYWR5
Q2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisKKyAg
ICByZXR1cm4gbV9qYXZhc2NyaXB0UmVzdWx0OworfQorCitzdGF0aWMgY2hhcioganNWYWx1ZVRv
Q1N0cmluZyhKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKK3sK
KyAgICBnX2Fzc2VydCh2YWx1ZSk7CisgICAgZ19hc3NlcnQoSlNWYWx1ZUlzU3RyaW5nKGNvbnRl
eHQsIHZhbHVlKSk7CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gc3RyaW5nVmFsdWUo
QWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsIDApKTsKKyAgICBnX2Fz
c2VydChzdHJpbmdWYWx1ZSk7CisKKyAgICBzaXplX3QgY1N0cmluZ0xlbmd0aCA9IEpTU3RyaW5n
R2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShzdHJpbmdWYWx1ZS5nZXQoKSk7CisgICAgY2hhciog
Y1N0cmluZyA9IHN0YXRpY19jYXN0PGNoYXIqPihnX21hbGxvYyhjU3RyaW5nTGVuZ3RoKSk7Cisg
ICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhzdHJpbmdWYWx1ZS5nZXQoKSwgY1N0cmluZywgY1N0
cmluZ0xlbmd0aCk7CisgICAgcmV0dXJuIGNTdHJpbmc7Cit9CisKK2NoYXIqIFdlYlZpZXdUZXN0
OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFz
Y3JpcHRSZXN1bHQpCit7CisgICAgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQgPSB3ZWJraXRf
amF2YXNjcmlwdF9yZXN1bHRfZ2V0X2dsb2JhbF9jb250ZXh0KGphdmFzY3JpcHRSZXN1bHQpOwor
ICAgIGdfYXNzZXJ0KGNvbnRleHQpOworICAgIHJldHVybiBqc1ZhbHVlVG9DU3RyaW5nKGNvbnRl
eHQsIHdlYmtpdF9qYXZhc2NyaXB0X3Jlc3VsdF9nZXRfdmFsdWUoamF2YXNjcmlwdFJlc3VsdCkp
OworfQorCitkb3VibGUgV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb051bWJlcihXZWJL
aXRKYXZhc2NyaXB0UmVzdWx0KiBqYXZhc2NyaXB0UmVzdWx0KQoreworICAgIEpTR2xvYmFsQ29u
dGV4dFJlZiBjb250ZXh0ID0gd2Via2l0X2phdmFzY3JpcHRfcmVzdWx0X2dldF9nbG9iYWxfY29u
dGV4dChqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydChjb250ZXh0KTsKKyAgICBKU1Zh
bHVlUmVmIHZhbHVlID0gd2Via2l0X2phdmFzY3JpcHRfcmVzdWx0X2dldF92YWx1ZShqYXZhc2Ny
aXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydCh2YWx1ZSk7CisgICAgZ19hc3NlcnQoSlNWYWx1ZUlz
TnVtYmVyKGNvbnRleHQsIHZhbHVlKSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZVRvTnVtYmVyKGNv
bnRleHQsIHZhbHVlLCAwKTsKK30KKworYm9vbCBXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3Vs
dFRvQm9vbGVhbihXZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBqYXZhc2NyaXB0UmVzdWx0KQorewor
ICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0ID0gd2Via2l0X2phdmFzY3JpcHRfcmVzdWx0
X2dldF9nbG9iYWxfY29udGV4dChqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydChjb250
ZXh0KTsKKyAgICBKU1ZhbHVlUmVmIHZhbHVlID0gd2Via2l0X2phdmFzY3JpcHRfcmVzdWx0X2dl
dF92YWx1ZShqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydCh2YWx1ZSk7CisgICAgZ19h
c3NlcnQoSlNWYWx1ZUlzQm9vbGVhbihjb250ZXh0LCB2YWx1ZSkpOworCisgICAgcmV0dXJuIEpT
VmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgdmFsdWUpOworfQorCitib29sIFdlYlZpZXdUZXN0Ojpq
YXZhc2NyaXB0UmVzdWx0SXNOdWxsKFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFzY3JpcHRS
ZXN1bHQpCit7CisgICAgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQgPSB3ZWJraXRfamF2YXNj
cmlwdF9yZXN1bHRfZ2V0X2dsb2JhbF9jb250ZXh0KGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdf
YXNzZXJ0KGNvbnRleHQpOworICAgIEpTVmFsdWVSZWYgdmFsdWUgPSB3ZWJraXRfamF2YXNjcmlw
dF9yZXN1bHRfZ2V0X3ZhbHVlKGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KHZhbHVl
KTsKKworICAgIHJldHVybiBKU1ZhbHVlSXNOdWxsKGNvbnRleHQsIHZhbHVlKTsKK30KKworYm9v
bCBXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdElzVW5kZWZpbmVkKFdlYktpdEphdmFzY3Jp
cHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQpCit7CisgICAgSlNHbG9iYWxDb250ZXh0UmVmIGNv
bnRleHQgPSB3ZWJraXRfamF2YXNjcmlwdF9yZXN1bHRfZ2V0X2dsb2JhbF9jb250ZXh0KGphdmFz
Y3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KGNvbnRleHQpOworICAgIEpTVmFsdWVSZWYgdmFs
dWUgPSB3ZWJraXRfamF2YXNjcmlwdF9yZXN1bHRfZ2V0X3ZhbHVlKGphdmFzY3JpcHRSZXN1bHQp
OworICAgIGdfYXNzZXJ0KHZhbHVlKTsKKworICAgIHJldHVybiBKU1ZhbHVlSXNVbmRlZmluZWQo
Y29udGV4dCwgdmFsdWUpOworfQorCitzdGF0aWMgdm9pZCBvblNuYXBzaG90UmVhZHkoV2ViS2l0
V2ViVmlldyogd2ViX3ZpZXcsIEdBc3luY1Jlc3VsdCogcmVzLCBXZWJWaWV3VGVzdCogdGVzdCkK
K3sKKyAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgdGVzdC0+bV9zdXJmYWNlID0gd2Vi
a2l0X3dlYl92aWV3X2dldF9zbmFwc2hvdF9maW5pc2god2ViX3ZpZXcsIHJlcywgJmVycm9yLm91
dFB0cigpKTsKKyAgICBnX2Fzc2VydCghdGVzdC0+bV9zdXJmYWNlIHx8ICFlcnJvci5nZXQoKSk7
CisgICAgaWYgKGVycm9yKQorICAgICAgICBnX2Fzc2VydF9lcnJvcihlcnJvci5nZXQoKSwgV0VC
S0lUX1NOQVBTSE9UX0VSUk9SLCBXRUJLSVRfU05BUFNIT1RfRVJST1JfRkFJTEVEX1RPX0NSRUFU
RSk7CisgICAgdGVzdC0+cXVpdE1haW5Mb29wKCk7Cit9CisKK2NhaXJvX3N1cmZhY2VfdCogV2Vi
Vmlld1Rlc3Q6OmdldFNuYXBzaG90QW5kV2FpdFVudGlsUmVhZHkoV2ViS2l0U25hcHNob3RSZWdp
b24gcmVnaW9uLCBXZWJLaXRTbmFwc2hvdE9wdGlvbnMgb3B0aW9ucykKK3sKKyAgICBpZiAobV9z
dXJmYWNlKQorICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3kobV9zdXJmYWNlKTsKKyAgICBt
X3N1cmZhY2UgPSAwOworICAgIHdlYmtpdF93ZWJfdmlld19nZXRfc25hcHNob3QobV93ZWJWaWV3
LCByZWdpb24sIG9wdGlvbnMsIDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFj
az4ob25TbmFwc2hvdFJlYWR5KSwgdGhpcyk7CisgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxv
b3ApOworICAgIHJldHVybiBtX3N1cmZhY2U7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYlZpZXdUZXN0LmggYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L2d0ay9XZWJLaXQyR3RrL1dlYlZpZXdUZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uYTQ2MGUyMgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
Z3RrL1dlYktpdDJHdGsvV2ViVmlld1Rlc3QuaApAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIw
MTEgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYg
V2ViVmlld1Rlc3RfaAorI2RlZmluZSBXZWJWaWV3VGVzdF9oCisKKyNpbmNsdWRlICJUZXN0TWFp
bi5oIgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKworY2xhc3MgV2ViVmlld1Rlc3Q6IHB1YmxpYyBUZXN0IHsKK3B1YmxpYzoKKyAg
ICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFdlYlZpZXdUZXN0KTsKKyAgICBXZWJWaWV3VGVzdCgp
OworICAgIHZpcnR1YWwgfldlYlZpZXdUZXN0KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFVS
SShjb25zdCBjaGFyKiB1cmkpOworICAgIHZpcnR1YWwgdm9pZCBsb2FkSHRtbChjb25zdCBjaGFy
KiBodG1sLCBjb25zdCBjaGFyKiBiYXNlVVJJKTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFBsYWlu
VGV4dChjb25zdCBjaGFyKiBwbGFpblRleHQpOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVxdWVz
dChXZWJLaXRVUklSZXF1ZXN0Kik7CisgICAgdm9pZCBsb2FkQWx0ZXJuYXRlSFRNTChjb25zdCBj
aGFyKiBodG1sLCBjb25zdCBjaGFyKiBjb250ZW50VVJJLCBjb25zdCBjaGFyKiBiYXNlVVJJKTsK
KyAgICB2b2lkIGdvQmFjaygpOworICAgIHZvaWQgZ29Gb3J3YXJkKCk7CisgICAgdm9pZCBnb1Rv
QmFja0ZvcndhcmRMaXN0SXRlbShXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKik7CisKKyAgICB2
b2lkIHF1aXRNYWluTG9vcCgpOworICAgIHZvaWQgcXVpdE1haW5Mb29wQWZ0ZXJQcm9jZXNzaW5n
UGVuZGluZ0V2ZW50cygpOworICAgIHZvaWQgd2FpdChkb3VibGUgc2Vjb25kcyk7CisgICAgdm9p
ZCB3YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICB2b2lkIHdhaXRVbnRpbFRpdGxlQ2hhbmdl
ZFRvKGNvbnN0IGNoYXIqIGV4cGVjdGVkVGl0bGUpOworICAgIHZvaWQgd2FpdFVudGlsVGl0bGVD
aGFuZ2VkKCk7CisgICAgdm9pZCBzaG93SW5XaW5kb3coR3RrV2luZG93VHlwZSA9IEdUS19XSU5E
T1dfUE9QVVApOworICAgIHZvaWQgc2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKEd0a1dp
bmRvd1R5cGUgPSBHVEtfV0lORE9XX1BPUFVQKTsKKyAgICB2b2lkIHJlc2l6ZVZpZXcoaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0KTsKKyAgICB2b2lkIHNlbGVjdEFsbCgpOworICAgIGNvbnN0IGNoYXIq
IG1haW5SZXNvdXJjZURhdGEoc2l6ZV90JiBtYWluUmVzb3VyY2VEYXRhU2l6ZSk7CisKKyAgICB2
b2lkIG1vdXNlTW92ZVRvKGludCB4LCBpbnQgeSwgdW5zaWduZWQgaW50IG1vdXNlTW9kaWZpZXJz
ID0gMCk7CisgICAgdm9pZCBjbGlja01vdXNlQnV0dG9uKGludCB4LCBpbnQgeSwgdW5zaWduZWQg
aW50IGJ1dHRvbiA9IDEsIHVuc2lnbmVkIGludCBtb3VzZU1vZGlmaWVycyA9IDApOworICAgIHZv
aWQga2V5U3Ryb2tlKHVuc2lnbmVkIGludCBrZXlWYWwsIHVuc2lnbmVkIGludCBrZXlNb2RpZmll
cnMgPSAwKTsKKworICAgIFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIHJ1bkphdmFTY3JpcHRBbmRX
YWl0VW50aWxGaW5pc2hlZChjb25zdCBjaGFyKiBqYXZhc2NyaXB0LCBHRXJyb3IqKik7CisgICAg
V2ViS2l0SmF2YXNjcmlwdFJlc3VsdCogcnVuSmF2YVNjcmlwdEZyb21HUmVzb3VyY2VBbmRXYWl0
VW50aWxGaW5pc2hlZChjb25zdCBjaGFyKiByZXNvdXJjZSwgR0Vycm9yKiopOworCisgICAgLy8g
SmF2YXNjcmlwdCByZXN1bHQgaGVscGVycy4KKyAgICBzdGF0aWMgY2hhciogamF2YXNjcmlwdFJl
c3VsdFRvQ1N0cmluZyhXZWJLaXRKYXZhc2NyaXB0UmVzdWx0Kik7CisgICAgc3RhdGljIGRvdWJs
ZSBqYXZhc2NyaXB0UmVzdWx0VG9OdW1iZXIoV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCopOworICAg
IHN0YXRpYyBib29sIGphdmFzY3JpcHRSZXN1bHRUb0Jvb2xlYW4oV2ViS2l0SmF2YXNjcmlwdFJl
c3VsdCopOworICAgIHN0YXRpYyBib29sIGphdmFzY3JpcHRSZXN1bHRJc051bGwoV2ViS2l0SmF2
YXNjcmlwdFJlc3VsdCopOworICAgIHN0YXRpYyBib29sIGphdmFzY3JpcHRSZXN1bHRJc1VuZGVm
aW5lZChXZWJLaXRKYXZhc2NyaXB0UmVzdWx0Kik7CisKKyAgICBjYWlyb19zdXJmYWNlX3QqIGdl
dFNuYXBzaG90QW5kV2FpdFVudGlsUmVhZHkoV2ViS2l0U25hcHNob3RSZWdpb24sIFdlYktpdFNu
YXBzaG90T3B0aW9ucyk7CisKKyAgICBXZWJLaXRXZWJWaWV3KiBtX3dlYlZpZXc7CisgICAgR01h
aW5Mb29wKiBtX21haW5Mb29wOworICAgIENTdHJpbmcgbV9hY3RpdmVVUkk7CisgICAgR3RrV2lk
Z2V0KiBtX3BhcmVudFdpbmRvdzsKKyAgICBDU3RyaW5nIG1fZXhwZWN0ZWRUaXRsZTsKKyAgICBX
ZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBtX2phdmFzY3JpcHRSZXN1bHQ7CisgICAgR0Vycm9yKiog
bV9qYXZhc2NyaXB0RXJyb3I7CisgICAgR093blB0cjxjaGFyPiBtX3Jlc291cmNlRGF0YTsKKyAg
ICBzaXplX3QgbV9yZXNvdXJjZURhdGFTaXplOworICAgIGNhaXJvX3N1cmZhY2VfdCogbV9zdXJm
YWNlOworCitwcml2YXRlOgorICAgIHZvaWQgZG9Nb3VzZUJ1dHRvbkV2ZW50KEdka0V2ZW50VHlw
ZSwgaW50LCBpbnQsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKK307CisKKyNlbmRpZiAv
LyBXZWJWaWV3VGVzdF9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220307</attachid>
            <date>2014-01-03 09:16:58 -0800</date>
            <delta_ts>2014-01-03 10:01:26 -0800</delta_ts>
            <desc>Updated patch using --binary</desc>
            <filename>wk-test-webkit-api.diff</filename>
            <type>text/plain</type>
            <size>1832374</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAzZGMwYjliLi5kNDFkZDc2
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAK
KzIwMTQtMDEtMDMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgor
CisgICAgICAgIFtHVEtdIE1vdmUgYWxsIEdUSy9HT2JqZWN0IHVuaXQgdGVzdHMgdG8gVG9vbHMv
VGVzdFdlYktpdEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTI2MzQyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBHTlVtYWtlZmlsZS5hbTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZS4KKwogMjAxNC0w
MS0wMyAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CiAKICAgICAgICAg
W0NNYWtlXSBUaGUgZm9yd2FyZGluZyBoZWFkZXJzIGdlbmVyYXRlZCBieSBXZWJLaXRNYWNyb3Mu
bTQgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoZSBoZWFkZXJzIGdlbmVyYXRlZCBieSBnZW5lcmF0
ZS1mb3J3YXJkaW5nLWhlYWRlcnMucGwKZGlmZiAtLWdpdCBhL0dOVW1ha2VmaWxlLmFtIGIvR05V
bWFrZWZpbGUuYW0KaW5kZXggYjNmMGEwNC4uNTRkYTJiMSAxMDA2NDQKLS0tIGEvR05VbWFrZWZp
bGUuYW0KKysrIGIvR05VbWFrZWZpbGUuYW0KQEAgLTU5LDcgKzU5LDYgQEAgbm9pbnN0X0hFQURF
UlMgOj0KIG5vaW5zdF9MVExJQlJBUklFUyA6PQogbGliX0xUTElCUkFSSUVTIDo9CiBJRExfQklO
RElOR1MgOj0KLVRFU1RfUFJPR1MgOj0KIFBPRklMRVMgOj0KIFBPX0xJTkdVQVMgOj0KIFVTRVJf
TElOR1VBUyA6PQpAQCAtMjE0LDggKzIxMyw2IEBAIGluY2x1ZGUgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvR05VbWFrZWZpbGUuYW0KIGluY2x1ZGUgU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9H
TlVtYWtlZmlsZS5hbQogCiBpZiBFTkFCTEVfREVWRUxPUEVSX01PREUKLWluY2x1ZGUgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KLWluY2x1ZGUg
U291cmNlL1dlYktpdC9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KIGluY2x1ZGUgU291cmNlL1Ro
aXJkUGFydHkvZ3Rlc3QvR05VbWFrZWZpbGUuYW0KIGluY2x1ZGUgVG9vbHMvR05VbWFrZWZpbGUu
YW0KIGluY2x1ZGUgVG9vbHMvVGVzdFdlYktpdEFQSS9HTlVtYWtlZmlsZS5hbQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdl
TG9nCmluZGV4IGI0OTBhNjUuLmZjOTdkNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3Rr
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
MyBAQAorMjAxNC0wMS0wMyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5j
b20+CisKKyAgICAgICAgW0dUS10gTW92ZSBhbGwgR1RLL0dPYmplY3QgdW5pdCB0ZXN0cyB0byBU
b29scy9UZXN0V2ViS2l0QVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjYzNDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIHRlc3RzL0NNYWtlTGlzdHMudHh0OiBSZW1vdmVkLgorICAgICAgICAqIHRl
c3RzL0dOVW1ha2VmaWxlLmFtOiBSZW1vdmVkLgorCiAyMDE0LTAxLTAyICBDYXJsb3MgR2FyY2lh
IENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIxNjAz
MDQpOiBbR1RLXSBEaXNhYmxlIGxpYnRvb2wgZmFzdCBpbnN0YWxsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay90ZXN0cy9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rl
c3RzL0NNYWtlTGlzdHMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTFhOTlm
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL0NNYWtlTGlzdHMudHh0Cisr
KyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotYWRkX2RlZmluaXRpb25zKC1EVEVTVF9QTFVH
SU5fRElSPSIke0NNQUtFX0xJQlJBUllfT1VUUFVUX0RJUkVDVE9SWX0iKQotaW5jbHVkZV9kaXJl
Y3RvcmllcygKLSAgICAke0NNQUtFX0JJTkFSWV9ESVJ9Ci0gICAgJHtDTUFLRV9TT1VSQ0VfRElS
fS9Tb3VyY2UKLSAgICAke0NNQUtFX1NPVVJDRV9ESVJ9L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9G
b3J3YXJkaW5nSGVhZGVycwotICAgICR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNlL1dlYktpdC9n
dGsKLSAgICAke0NNQUtFX1NPVVJDRV9ESVJ9L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0awot
ICAgICR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNlL1dlYkNvcmUvcGxhdGZvcm0KLSAgICAke0NN
QUtFX1NPVVJDRV9ESVJ9L1NvdXJjZS9XVEYKLSAgICAke0RFUklWRURfU09VUkNFU19ESVJ9Ci0g
ICAgJHtERVJJVkVEX1NPVVJDRVNfV0VCS0lUR1RLX0RJUn0KLSAgICAke0dMSUJfSU5DTFVERV9E
SVJTfQotICAgICR7R1RLM19JTkNMVURFX0RJUlN9Ci0gICAgJHtMSUJTT1VQX0lOQ0xVREVfRElS
U30KLSkKLQotbWFjcm8oQUREX1dLMV9URVNUIHRlc3RfbmFtZSkKLSAgICBhZGRfZXhlY3V0YWJs
ZSgke3Rlc3RfbmFtZX0gJHtBUkdOfSkKLSAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoJHt0ZXN0
X25hbWV9Ci0gICAgICAgIEphdmFTY3JpcHRDb3JlCi0gICAgICAgIFdlYktpdAotICAgICAgICAk
e0dMSUJfTElCUkFSSUVTfQotICAgICAgICAke0dUSzNfTElCUkFSSUVTfQotICAgICAgICAke0xJ
QlNPVVBfTElCUkFSSUVTfQotICAgICkKLSAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoJHt0ZXN0
X25hbWV9IFBST1BFUlRJRVMKLSAgICAgICAgUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZICR7Q01B
S0VfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZfS9XZWJLaXQxR09iamVjdEFQSVRlc3RzCi0gICAg
KQotZW5kbWFjcm8oKQotCi1BRERfV0sxX1RFU1QodGVzdGFwcGxpY2F0aW9uY2FjaGUgdGVzdGFw
cGxpY2F0aW9uY2FjaGUuYykKLUFERF9XSzFfVEVTVCh0ZXN0YXRrcm9sZXMgdGVzdGF0a3JvbGVz
LmMpCi1BRERfV0sxX1RFU1QodGVzdGF0ayB0ZXN0YXRrLmMpCi1BRERfV0sxX1RFU1QodGVzdGNv
bnRleHRtZW51IHRlc3Rjb250ZXh0bWVudS5jKQotQUREX1dLMV9URVNUKHRlc3Rjb3B5YW5kcGFz
dGUgdGVzdGNvcHlhbmRwYXN0ZS5jICR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2d0ay9HdGtWZXJz
aW9uaW5nLmMpCi1BRERfV0sxX1RFU1QodGVzdGRvbWRvY3VtZW50IHRlc3Rkb21kb2N1bWVudC5j
KQotQUREX1dLMV9URVNUKHRlc3Rkb21kb213aW5kb3cgdGVzdGRvbWRvbXdpbmRvdy5jKQotQURE
X1dLMV9URVNUKHRlc3Rkb21ub2RlIHRlc3Rkb21ub2RlLmMpCi1BRERfV0sxX1RFU1QodGVzdGRv
d25sb2FkIHRlc3Rkb3dubG9hZC5jKQotQUREX1dLMV9URVNUKHRlc3RmYXZpY29uZGF0YWJhc2Ug
dGVzdGZhdmljb25kYXRhYmFzZS5jIHRlc3RfdXRpbHMuYykKLUFERF9XSzFfVEVTVCh0ZXN0Z2xv
YmFscyB0ZXN0Z2xvYmFscy5jKQotQUREX1dLMV9URVNUKHRlc3RoaXR0ZXN0cmVzdWx0IHRlc3Ro
aXR0ZXN0cmVzdWx0LmMpCi1BRERfV0sxX1RFU1QodGVzdGh0dHBiYWNrZW5kIHRlc3RodHRwYmFj
a2VuZC5jKQotQUREX1dLMV9URVNUKHRlc3RrZXlldmVudHMgdGVzdGtleWV2ZW50cy5jKQotQURE
X1dLMV9URVNUKHRlc3Rsb2FkaW5nIHRlc3Rsb2FkaW5nLmMpCi1BRERfV0sxX1RFU1QodGVzdG1p
bWVoYW5kbGluZyB0ZXN0bWltZWhhbmRsaW5nLmMgdGVzdF91dGlscy5jKQotQUREX1dLMV9URVNU
KHRlc3RuZXR3b3JrcmVxdWVzdCB0ZXN0bmV0d29ya3JlcXVlc3QuYykKLUFERF9XSzFfVEVTVCh0
ZXN0bmV0d29ya3Jlc3BvbnNlIHRlc3RuZXR3b3JrcmVzcG9uc2UuYykKLUFERF9XSzFfVEVTVCh0
ZXN0d2ViYmFja2ZvcndhcmRsaXN0IHRlc3R3ZWJiYWNrZm9yd2FyZGxpc3QuYykKLUFERF9XSzFf
VEVTVCh0ZXN0d2ViZGF0YXNvdXJjZSB0ZXN0d2ViZGF0YXNvdXJjZS5jKQotQUREX1dLMV9URVNU
KHRlc3R3ZWJmcmFtZSB0ZXN0d2ViZnJhbWUuYykKLUFERF9XSzFfVEVTVCh0ZXN0d2ViaGlzdG9y
eWl0ZW0gdGVzdHdlYmhpc3RvcnlpdGVtLmMpCi1BRERfV0sxX1RFU1QodGVzdHdlYmluc3BlY3Rv
ciB0ZXN0d2ViaW5zcGVjdG9yLmMgdGVzdF91dGlscy5jKQotQUREX1dLMV9URVNUKHRlc3R3ZWJw
bHVnaW5kYXRhYmFzZSB0ZXN0d2VicGx1Z2luZGF0YWJhc2UuYykKLUFERF9XSzFfVEVTVCh0ZXN0
d2VicmVzb3VyY2UgdGVzdHdlYnJlc291cmNlLmMpCi1BRERfV0sxX1RFU1QodGVzdHdlYnNldHRp
bmdzIHRlc3R3ZWJzZXR0aW5ncy5jKQotQUREX1dLMV9URVNUKHRlc3R3ZWJ2aWV3IHRlc3R3ZWJ2
aWV3LmMgdGVzdF91dGlscy5jKQotQUREX1dLMV9URVNUKHRlc3R3aW5kb3cgdGVzdHdpbmRvdy5j
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0gYi9T
b3VyY2UvV2ViS2l0L2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggOGI4NmE3My4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0
cy9HTlVtYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDIwOCArMCwwIEBACi0jIEJ1aWxk
IHVuaXQgdGVzdHMKLXdlYmtpdF90ZXN0c19jZmxhZ3MgPSBcCi0JLWZuby1zdHJpY3QtYWxpYXNp
bmcgXAotCS1JJChzcmNkaXIpL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Gb3J3YXJkaW5nSGVhZGVy
cyBcCi0JLUkkKFdlYktpdCkgXAotCS1JJChHRU5TT1VSQ0VTKSBcCi0JLUkkKHRvcF9idWlsZGRp
cikvU291cmNlL1dlYktpdC9ndGsgXAotCS1JJCh0b3Bfc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncyBcCi0JLUkkKHRvcF9zcmNkaXIpL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmpl
Y3QgXAotCSQoZ2xvYmFsX2NwcGZsYWdzKSBcCi0JJChnbG9iYWxfY2ZsYWdzKSBcCi0JJChqYXZh
c2NyaXB0Y29yZV9jcHBmbGFncykgXAotCSQoRlJFRVRZUEVfQ0ZMQUdTKSBcCi0JJChHTElCX0NG
TEFHUykgXAotCSQoR1RLX0NGTEFHUykgXAotCSQoTElCU09VUF9DRkxBR1MpIFwKLQkkKFhSRU5E
RVJfQ0ZMQUdTKSBcCi0JJChYVF9DRkxBR1MpCi0KLXdlYmtpdF90ZXN0c19sZGFkZCA9IFwKLQls
aWJqYXZhc2NyaXB0Y29yZWd0ay1AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQC5AV0VCS0lU
R1RLX0FQSV9NSU5PUl9WRVJTSU9OQC5sYSBcCi0JbGlid2Via2l0Z3RrLUBXRUJLSVRHVEtfQVBJ
X01BSk9SX1ZFUlNJT05ALkBXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05ALmxhIFwKLQkkKEZS
RUVUWVBFX0xJQlMpIFwKLQkkKEdUS19MSUJTKSBcCi0JJChHTElCX0xJQlMpIFwKLQkkKExJQlNP
VVBfTElCUykgXAotCSQoWFJFTkRFUl9MSUJTKQotCi13ZWJraXRfdGVzdHNfbGRmbGFncyA9IFwK
LQktbm8taW5zdGFsbAotCi1pZiBFTkFCTEVfV0VCS0lUMQotbm9pbnN0X1BST0dSQU1TICs9IFwK
LQlQcm9ncmFtcy9XZWJLaXQxR09iamVjdEFQSVRlc3RzL3Rlc3RhcHBsaWNhdGlvbmNhY2hlIFwK
LQlQcm9ncmFtcy9XZWJLaXQxR09iamVjdEFQSVRlc3RzL3Rlc3Rjb250ZXh0bWVudSBcCi0JUHJv
Z3JhbXMvV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0ZG9tZG9jdW1lbnQgXAotCVByb2dyYW1z
L1dlYktpdDFHT2JqZWN0QVBJVGVzdHMvdGVzdGRvbWRvbXdpbmRvdyBcCi0JUHJvZ3JhbXMvV2Vi
S2l0MUdPYmplY3RBUElUZXN0cy90ZXN0ZG9tbm9kZSBcCi0JUHJvZ3JhbXMvV2ViS2l0MUdPYmpl
Y3RBUElUZXN0cy90ZXN0aHR0cGJhY2tlbmQgXAotCVByb2dyYW1zL1dlYktpdDFHT2JqZWN0QVBJ
VGVzdHMvdGVzdGZhdmljb25kYXRhYmFzZSBcCi0JUHJvZ3JhbXMvV2ViS2l0MUdPYmplY3RBUElU
ZXN0cy90ZXN0bG9hZGluZyBcCi0JUHJvZ3JhbXMvV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0
Z2xvYmFscyBcCi0JUHJvZ3JhbXMvV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0bWltZWhhbmRs
aW5nIFwKLQlQcm9ncmFtcy9XZWJLaXQxR09iamVjdEFQSVRlc3RzL3Rlc3RuZXR3b3JrcmVxdWVz
dCBcCi0JUHJvZ3JhbXMvV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0bmV0d29ya3Jlc3BvbnNl
IFwKLQlQcm9ncmFtcy9XZWJLaXQxR09iamVjdEFQSVRlc3RzL3Rlc3R3ZWJmcmFtZSBcCi0JUHJv
Z3JhbXMvV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0d2ViYmFja2ZvcndhcmRsaXN0IFwKLQlQ
cm9ncmFtcy9XZWJLaXQxR09iamVjdEFQSVRlc3RzL3Rlc3R3ZWJoaXN0b3J5aXRlbSBcCi0JUHJv
Z3JhbXMvV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0d2luZG93IFwKLQlQcm9ncmFtcy9XZWJL
aXQxR09iamVjdEFQSVRlc3RzL3Rlc3Rkb3dubG9hZCBcCi0JUHJvZ3JhbXMvV2ViS2l0MUdPYmpl
Y3RBUElUZXN0cy90ZXN0YXRrIFwKLQlQcm9ncmFtcy9XZWJLaXQxR09iamVjdEFQSVRlc3RzL3Rl
c3RhdGtyb2xlcyBcCi0JUHJvZ3JhbXMvV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0aGl0dGVz
dHJlc3VsdCBcCi0JUHJvZ3JhbXMvV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0d2ViaW5zcGVj
dG9yIFwKLQlQcm9ncmFtcy9XZWJLaXQxR09iamVjdEFQSVRlc3RzL3Rlc3R3ZWJzZXR0aW5ncyBc
Ci0JUHJvZ3JhbXMvV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0d2VicmVzb3VyY2UgXAotCVBy
b2dyYW1zL1dlYktpdDFHT2JqZWN0QVBJVGVzdHMvdGVzdHdlYmRhdGFzb3VyY2UgXAotCVByb2dy
YW1zL1dlYktpdDFHT2JqZWN0QVBJVGVzdHMvdGVzdHdlYnBsdWdpbmRhdGFiYXNlIFwKLQlQcm9n
cmFtcy9XZWJLaXQxR09iamVjdEFQSVRlc3RzL3Rlc3R3ZWJ2aWV3IFwKLQlQcm9ncmFtcy9XZWJL
aXQxR09iamVjdEFQSVRlc3RzL3Rlc3RrZXlldmVudHMgXAotCVByb2dyYW1zL1dlYktpdDFHT2Jq
ZWN0QVBJVGVzdHMvdGVzdGNvcHlhbmRwYXN0ZQotZW5kaWYKLQotIyBBZGQgYWRkaXRpb25hbCB0
ZXN0cyBoZXJlCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RhcHBsaWNhdGlv
bmNhY2hlX1NPVVJDRVMgPSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXBwbGljYXRpb25j
YWNoZS5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RhcHBsaWNhdGlvbmNh
Y2hlX0NGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykKLVByb2dyYW1zX1dlYktpdDFHT2Jq
ZWN0QVBJVGVzdHNfdGVzdGFwcGxpY2F0aW9uY2FjaGVfTERBREQgPSAkKHdlYmtpdF90ZXN0c19s
ZGFkZCkKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGFwcGxpY2F0aW9uY2Fj
aGVfTERGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDFH
T2JqZWN0QVBJVGVzdHNfdGVzdGNvbnRleHRtZW51X1NPVVJDRVMgPSBTb3VyY2UvV2ViS2l0L2d0
ay90ZXN0cy90ZXN0Y29udGV4dG1lbnUuYwotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0
c190ZXN0Y29udGV4dG1lbnVfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQotUHJvZ3Jh
bXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0Y29udGV4dG1lbnVfTERBREQgPSAkKHdlYmtp
dF90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGNvbnRl
eHRtZW51X0xERkxBR1MgPSAkKHdlYmtpdF90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJL
aXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rkb21kb2N1bWVudF9TT1VSQ0VTID0gU291cmNlL1dlYktp
dC9ndGsvdGVzdHMvdGVzdGRvbWRvY3VtZW50LmMKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJ
VGVzdHNfdGVzdGRvbWRvY3VtZW50X0NGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykKLVBy
b2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGRvbWRvY3VtZW50X0xEQUREID0gJCh3
ZWJraXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rk
b21kb2N1bWVudF9MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNf
V2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0ZG9tZG9td2luZG93X1NPVVJDRVMgPSBTb3VyY2Uv
V2ViS2l0L2d0ay90ZXN0cy90ZXN0ZG9tZG9td2luZG93LmMKLVByb2dyYW1zX1dlYktpdDFHT2Jq
ZWN0QVBJVGVzdHNfdGVzdGRvbWRvbXdpbmRvd19DRkxBR1MgPSAkKHdlYmtpdF90ZXN0c19jZmxh
Z3MpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rkb21kb213aW5kb3dfTERB
REQgPSAkKHdlYmtpdF90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVz
dHNfdGVzdGRvbWRvbXdpbmRvd19MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFncykKLQot
UHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0ZG9tbm9kZV9TT1VSQ0VTID0gU291
cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvbW5vZGUuYwotUHJvZ3JhbXNfV2ViS2l0MUdPYmpl
Y3RBUElUZXN0c190ZXN0ZG9tbm9kZV9DRkxBR1MgPSAkKHdlYmtpdF90ZXN0c19jZmxhZ3MpCi1Q
cm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rkb21ub2RlX0xEQUREID0gJCh3ZWJr
aXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rkb21u
b2RlX0xERkxBR1MgPSAkKHdlYmtpdF90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQx
R09iamVjdEFQSVRlc3RzX3Rlc3RodHRwYmFja2VuZF9TT1VSQ0VTID0gU291cmNlL1dlYktpdC9n
dGsvdGVzdHMvdGVzdGh0dHBiYWNrZW5kLmMKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVz
dHNfdGVzdGh0dHBiYWNrZW5kX0NGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykKLVByb2dy
YW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGh0dHBiYWNrZW5kX0xEQUREID0gJCh3ZWJr
aXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RodHRw
YmFja2VuZF9MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2Vi
S2l0MUdPYmplY3RBUElUZXN0c190ZXN0ZmF2aWNvbmRhdGFiYXNlX1NPVVJDRVMgPSBTb3VyY2Uv
V2ViS2l0L2d0ay90ZXN0cy90ZXN0ZmF2aWNvbmRhdGFiYXNlLmMgU291cmNlL1dlYktpdC9ndGsv
dGVzdHMvdGVzdF91dGlscy5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rm
YXZpY29uZGF0YWJhc2VfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQotUHJvZ3JhbXNf
V2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0ZmF2aWNvbmRhdGFiYXNlX0xEQUREID0gJCh3ZWJr
aXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RmYXZp
Y29uZGF0YWJhc2VfTERGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1z
X1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGdsb2JhbHNfU09VUkNFUyA9IFNvdXJjZS9XZWJL
aXQvZ3RrL3Rlc3RzL3Rlc3RnbG9iYWxzLmMKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVz
dHNfdGVzdGdsb2JhbHNfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQotUHJvZ3JhbXNf
V2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0Z2xvYmFsc19MREFERCA9ICQod2Via2l0X3Rlc3Rz
X2xkYWRkKQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0Z2xvYmFsc19MREZM
QUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RB
UElUZXN0c190ZXN0bG9hZGluZ19TT1VSQ0VTID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVz
dGxvYWRpbmcuYwotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0bG9hZGluZ19D
RkxBR1MgPSAkKHdlYmtpdF90ZXN0c19jZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQ
SVRlc3RzX3Rlc3Rsb2FkaW5nX0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFt
c19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rsb2FkaW5nX0xERkxBR1MgPSAkKHdlYmtpdF90
ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RtaW1l
aGFuZGxpbmdfU09VUkNFUyA9IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RtaW1laGFuZGxp
bmcuYyBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0X3V0aWxzLmMKLVByb2dyYW1zX1dlYktp
dDFHT2JqZWN0QVBJVGVzdHNfdGVzdG1pbWVoYW5kbGluZ19DRkxBR1MgPSAkKHdlYmtpdF90ZXN0
c19jZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RtaW1laGFuZGxp
bmdfTERBREQgPSAkKHdlYmtpdF90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0
QVBJVGVzdHNfdGVzdG1pbWVoYW5kbGluZ19MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFn
cykKLQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0bmV0d29ya3JlcXVlc3Rf
U09VUkNFUyA9IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RuZXR3b3JrcmVxdWVzdC5jCi1Q
cm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RuZXR3b3JrcmVxdWVzdF9DRkxBR1Mg
PSAkKHdlYmtpdF90ZXN0c19jZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3Rz
X3Rlc3RuZXR3b3JrcmVxdWVzdF9MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQotUHJvZ3Jh
bXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0bmV0d29ya3JlcXVlc3RfTERGTEFHUyA9ICQo
d2Via2l0X3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNf
dGVzdG5ldHdvcmtyZXNwb25zZV9TT1VSQ0VTID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVz
dG5ldHdvcmtyZXNwb25zZS5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Ru
ZXR3b3JrcmVzcG9uc2VfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQotUHJvZ3JhbXNf
V2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0bmV0d29ya3Jlc3BvbnNlX0xEQUREID0gJCh3ZWJr
aXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RuZXR3
b3JrcmVzcG9uc2VfTERGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1z
X1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYmZyYW1lX1NPVVJDRVMgPSBTb3VyY2UvV2Vi
S2l0L2d0ay90ZXN0cy90ZXN0d2ViZnJhbWUuYwotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElU
ZXN0c190ZXN0d2ViZnJhbWVfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQotUHJvZ3Jh
bXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0d2ViZnJhbWVfTERBREQgPSAkKHdlYmtpdF90
ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYmZyYW1l
X0xERkxBR1MgPSAkKHdlYmtpdF90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQxR09i
amVjdEFQSVRlc3RzX3Rlc3R3ZWJwbHVnaW5kYXRhYmFzZV9TT1VSQ0VTID0gU291cmNlL1dlYktp
dC9ndGsvdGVzdHMvdGVzdHdlYnBsdWdpbmRhdGFiYXNlLmMKLVByb2dyYW1zX1dlYktpdDFHT2Jq
ZWN0QVBJVGVzdHNfdGVzdHdlYnBsdWdpbmRhdGFiYXNlX0NGTEFHUyA9IC1EVEVTVF9QTFVHSU5f
RElSPVwiJHtzaGVsbCBwd2R9LyR7dG9wX2J1aWxkZGlyfS9UZXN0TmV0c2NhcGVQbHVnaW4vLmxp
YnNcIiAkKHdlYmtpdF90ZXN0c19jZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRl
c3RzX3Rlc3R3ZWJwbHVnaW5kYXRhYmFzZV9MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQot
UHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0d2VicGx1Z2luZGF0YWJhc2VfTERG
TEFHUyA9ICQod2Via2l0X3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0
QVBJVGVzdHNfdGVzdHdlYmJhY2tmb3J3YXJkbGlzdF9TT1VSQ0VTID0gU291cmNlL1dlYktpdC9n
dGsvdGVzdHMvdGVzdHdlYmJhY2tmb3J3YXJkbGlzdC5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVj
dEFQSVRlc3RzX3Rlc3R3ZWJiYWNrZm9yd2FyZGxpc3RfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNf
Y2ZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0d2ViYmFja2Zvcndh
cmRsaXN0X0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQxR09i
amVjdEFQSVRlc3RzX3Rlc3R3ZWJiYWNrZm9yd2FyZGxpc3RfTERGTEFHUyA9ICQod2Via2l0X3Rl
c3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYmhp
c3RvcnlpdGVtX1NPVVJDRVMgPSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2ViaGlzdG9y
eWl0ZW0uYwotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0d2ViaGlzdG9yeWl0
ZW1fQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0MUdPYmpl
Y3RBUElUZXN0c190ZXN0d2ViaGlzdG9yeWl0ZW1fTERBREQgPSAkKHdlYmtpdF90ZXN0c19sZGFk
ZCkKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYmhpc3RvcnlpdGVtX0xE
RkxBR1MgPSAkKHdlYmtpdF90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQxR09iamVj
dEFQSVRlc3RzX3Rlc3R3aW5kb3dfU09VUkNFUyA9IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rl
c3R3aW5kb3cuYwotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0d2luZG93X0NG
TEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJ
VGVzdHNfdGVzdHdpbmRvd19MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNf
V2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0d2luZG93X0xERkxBR1MgPSAkKHdlYmtpdF90ZXN0
c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rkb3dubG9h
ZF9TT1VSQ0VTID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvd25sb2FkLmMKLVByb2dy
YW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGRvd25sb2FkX0NGTEFHUyA9ICQod2Via2l0
X3Rlc3RzX2NmbGFncykKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGRvd25s
b2FkX0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVj
dEFQSVRlc3RzX3Rlc3Rkb3dubG9hZF9MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFncykK
LQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0YXRrX1NPVVJDRVMgPSBTb3Vy
Y2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXRrLmMKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJ
VGVzdHNfdGVzdGF0a19DRkxBR1MgPSAkKHdlYmtpdF90ZXN0c19jZmxhZ3MpCi1Qcm9ncmFtc19X
ZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RhdGtfTERBREQgPSAkKHdlYmtpdF90ZXN0c19sZGFk
ZCkKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGF0a19MREZMQUdTID0gJCh3
ZWJraXRfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190
ZXN0YXRrcm9sZXNfU09VUkNFUyA9IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhdGtyb2xl
cy5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RhdGtyb2xlc19DRkxBR1Mg
PSAkKHdlYmtpdF90ZXN0c19jZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3Rz
X3Rlc3RhdGtyb2xlc19MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfV2Vi
S2l0MUdPYmplY3RBUElUZXN0c190ZXN0YXRrcm9sZXNfTERGTEFHUyA9ICQod2Via2l0X3Rlc3Rz
X2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYmluc3Bl
Y3Rvcl9TT1VSQ0VTID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYmluc3BlY3Rvci5j
IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RfdXRpbHMuYwotUHJvZ3JhbXNfV2ViS2l0MUdP
YmplY3RBUElUZXN0c190ZXN0d2ViaW5zcGVjdG9yX0NGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2Nm
bGFncykKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYmluc3BlY3Rvcl9M
REFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElU
ZXN0c190ZXN0d2ViaW5zcGVjdG9yX0xERkxBR1MgPSAkKHdlYmtpdF90ZXN0c19sZGZsYWdzKQot
Ci1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3R3ZWJzZXR0aW5nc19TT1VSQ0VT
ID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYnNldHRpbmdzLmMKLVByb2dyYW1zX1dl
YktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYnNldHRpbmdzX0NGTEFHUyA9ICQod2Via2l0X3Rl
c3RzX2NmbGFncykKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYnNldHRp
bmdzX0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVj
dEFQSVRlc3RzX3Rlc3R3ZWJzZXR0aW5nc19MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFn
cykKLQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0d2VicmVzb3VyY2VfU09V
UkNFUyA9IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJyZXNvdXJjZS5jCi1Qcm9ncmFt
c19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3R3ZWJyZXNvdXJjZV9DRkxBR1MgPSAkKHdlYmtp
dF90ZXN0c19jZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3R3ZWJy
ZXNvdXJjZV9MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQotCi1Qcm9ncmFtc19XZWJLaXQx
R09iamVjdEFQSVRlc3RzX3Rlc3R3ZWJkYXRhc291cmNlX1NPVVJDRVMgPSBTb3VyY2UvV2ViS2l0
L2d0ay90ZXN0cy90ZXN0d2ViZGF0YXNvdXJjZS5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQ
SVRlc3RzX3Rlc3R3ZWJkYXRhc291cmNlX0NGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykK
LVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYmRhdGFzb3VyY2VfTERBREQg
PSAkKHdlYmtpdF90ZXN0c19sZGFkZCkKLQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0
c190ZXN0d2Vidmlld19TT1VSQ0VTID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYnZp
ZXcuYyBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0X3V0aWxzLmMKLVByb2dyYW1zX1dlYktp
dDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYnZpZXdfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2Zs
YWdzKQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0d2Vidmlld19MREFERCA9
ICQod2Via2l0X3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190
ZXN0d2Vidmlld19MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNf
V2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0aGl0dGVzdHJlc3VsdF9TT1VSQ0VTID0gU291cmNl
L1dlYktpdC9ndGsvdGVzdHMvdGVzdGhpdHRlc3RyZXN1bHQuYwotUHJvZ3JhbXNfV2ViS2l0MUdP
YmplY3RBUElUZXN0c190ZXN0aGl0dGVzdHJlc3VsdF9DRkxBR1MgPSAkKHdlYmtpdF90ZXN0c19j
ZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RoaXR0ZXN0cmVzdWx0
X0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQpCi0KLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0
QVBJVGVzdHNfdGVzdGtleWV2ZW50c19TT1VSQ0VTID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMv
dGVzdGtleWV2ZW50cy5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RrZXll
dmVudHNfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0MUdP
YmplY3RBUElUZXN0c190ZXN0a2V5ZXZlbnRzX0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQp
Ci1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RrZXlldmVudHNfTERGTEFHUyA9
ICQod2Via2l0X3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVz
dHNfdGVzdGNvcHlhbmRwYXN0ZV9TT1VSQ0VTID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVz
dGNvcHlhbmRwYXN0ZS5jIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVmVyc2lv
bmluZy5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rjb3B5YW5kcGFzdGVf
Q0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKSBcCi0JLUkkKHNyY2RpcikvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrIFwKLQktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZQotUHJvZ3Jh
bXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0Y29weWFuZHBhc3RlX0xEQUREID0gJCh3ZWJr
aXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rjb3B5
YW5kcGFzdGVfTERGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2xkZmxhZ3MpCi0KLUVYVFJBX0RJU1Qg
Kz0gIFwKLQkkKFdlYktpdCkvdGVzdHMvcmVzb3VyY2VzLyogXAotCSQoV2ViS2l0KS90ZXN0cy90
ZXN0X3V0aWxzLmgKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvcmVzb3Vy
Y2VzL2JsYW5rLmljbyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Jlc291cmNlcy9ibGFuay5p
Y28KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhODQ4Yjk5MTZlNTkwODQ0MTNmYzFl
N2EwOTBkZWJmNWY0OTE0ZGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmxpdGVyYWwgMTk4CnBj
bVpRelU8NSh8MFZYaUxmcXtXUjQyVSY9U09BQz5mRVhsPzM7aDU4QUQwd2UjUX1SWTFWako7Cgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3QuaHRtbCBi
L1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Jlc291cmNlcy90ZXN0Lmh0bWwKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDk4ZjdkNGYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9n
dGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3QuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBA
QAotPGh0bWw+Ci08aGVhZD48dGl0bGU+dGVzdDwvdGl0bGU+PC9oZWFkPgotPGJvZHk+dGVzdDwv
Ym9keT4KLTwvaHRtbD4+PC9oZWFkPgotPGJvZHk+dGVzdDwvYm9keT4KLTwvaHRtbD4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Jlc291cmNlcy90ZXN0Lm9nZyBiL1NvdXJj
ZS9XZWJLaXQvZ3RrL3Rlc3RzL3Jlc291cmNlcy90ZXN0Lm9nZwpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggN2YzYTNiOWM1ZDY0N2M3MmExNGQzYjQ5NmNjNjI2ZDQxMmY4YjAwZi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMApHSVQgYmluYXJ5IHBhdGNoCmxp
dGVyYWwgMApIY21WP2QwMDAwMQoKbGl0ZXJhbCAzMDEzMQp6Y21lRlpjVVYpfF9BdENwOFgqS3NB
aSs+e0xNUjNaUE4pS3dOa1M0c0g5JiRQbVB0WX1HekcqbWooUzVpZ3VubS0KelFxJjJkMm9XNFd6
Jjx4MUFTZmI4NSRqK2JZJUBDSklRNVMyTEZlQjBlKXMhNUA5JXFfLX1DK1Y/cV9HOFVEbj9GCno+
e1pUTWQhMm88WnApVHZmQj03bVI1Q2VwQXVERU49JUo8MSZUV35CcjBvazgyeVdaTDFyOFk+ZktO
bH43SkJ8Rwp6RWNBcm41X2pMMEhBSWhoe31HVE1NcF47YE5SclooJWh6UllwezZEJlYmMEVXNFdA
Y0FuRX1pZCV6JWFBQW9LQGQKelM1OG4yMWg4PDhYQmMlKkhDYCRQZkI9QlokPF5YdVZ6NnNkTUxx
cXE+SSVVXlpqZjE2VH5SbmxpUEwleHtXR0VaCnojRkdJKTBUdGJ9cX5TPyRAPnN3WSVDZUc3VHxp
UVZ8MXFrR0NVUCNvd0VyaVV4VUozSSVfJj5RVCVFRHp2MW9YcQp6ZkYqRnFDcSpxSjNiaks0MXhe
bXdYQVYwWUpEaURnWXRpTjR5b1Jae1ZPfiFnNEBMdyZaRH1ZOGRgOW1jPWFfa1AKelVrP2ZNb1F7
YiphUklZd0BBazJQWng4PktuNyZeSjZ9fWVeI3dNUD8hN2RFMWM1U1pDZ29wYURFR2tnSiVMSHI3
CnpOV3E8P0UxbVhOQyFFJih6PSpXK28kJSZHaV45Y2wqcypFLSZWKEJ+Y2loO3lGU2FePSF8OHBv
cn1IPD09NVA4cgp6VXJzNmJFQj48WW8xWWlyYD13Sk1wbVBrVWRnIVhCKzNGdHo9I2hCXlozcXkq
ZkQpPXtJbkF9YUEtRmopYDl4QSgKenVrdl9yK0xiUUdsYGl+eTVDRmotM3FoQXUreC04RWlMcTQp
fDl4YUJodXJgUiNedDM5YCU0KjR5ZU93am5HQlFuCno3Izs+Tk88N1RsIUF6Z0Ura0d4PVVqQGd0
Uz1eQ3x1Jlp5djdYNmI1M3VGZz88IUx7ZFZMdCs2QmckaGsofDcmJAp6KWk8Xz4tKylvRWZSWD1t
JGJRYytASW9BcEJ2dko+dS0+S2VfaD9iVSEmMig4TEhHfGQhMnMmfE43VU4hKzg/aDUKelNreWsm
d1VYKjRgd0ImTSVnKGVgKlMpNzs+WF4rI24za0BXWVgpXlM8Rih0emc3TExZQTk5fnIpfHNAb1VX
ZTshCnp6Q0NPKVdGdj4rbENJYTl3QkQ0IWVQaFJLcFJ9QUkhTVZiVXhAQTNRTD82Y2NpIUU5PUEw
RiFxeERXUnp5ajdRUwp6IyZpPiRgISlYWGNVTWdwPmkmfmBTVE5uPnZ5YERESW47ZTY3ek4zcCsy
UD5RdFM+QU0+TzY7Qzg8IVRCQEl6WDIKemc7NiVrbnpDfTx1YmNgJTlecEx+fDEpe2QkeylENnYw
VVNKblNPSEE+azRCYlh9ZFRVX2BLc0hBcWVqWWIxfW1nCno9SGxYPkNyN3VSMm9SKCtefl59IW48
fUQwVCQ/XmY2aWlmVmQ/XzFhXklre19zeHZSVTkpcVJnLXdGNTE9XkFtIwp6I0p8T0J1azlsKG8j
OG0pPHFfP0BTfVlROy08Y01CWHZnaFNgSX1+VWR+OypwSCNkcXVVMG0+PWpQKTxjMGtGe0kKenlf
ZC1maDFUPVo7b0p6MD0/NFA7USp0cyRtJil1JSVBNypHb1dpZCZ1S3dWJj9uaj5xRF8qMmVjcjx5
XzFiTjQjCnpid2FlP3JiKnZ+TnBac1QmVi14MjJeJnVCaXx6ZU9VX09ZPUgjY190bzgmQnIycloh
R3BgYVl+emE+WFVGTH5mIQp6O3V1YCs2a0cxe1M9RS1wK1NaeipQaDBpNHxCeEp8PTIqNG5tfEY5
I3hgYlg+bH5oPTNJSE9PIWVCJH1wfDJGPGgKemFASi0jITRafW1VWiZIKE5zaUllSl93ZWtFPUty
fEFKKHtmMCFDO1NafUducTAwM2h0S0pAKV9Ccj9pbEk/OHVDCnolMG56I3tlUEFpeE9MaG1lOXtM
LVkkWDZUMDZjMUpwNHd3IXNWRUk3V0drYDMxTk1VKDFEX3NsKnIre0Y+Y3xnJQp6PUAzMGlLPW85
UTJqYFFmOSFRZ3lZIT8rM3g1bz9FOT0kX1I0diQrKjtLdj5vKVl8fXlPT1NteShtb1VrT1dyflYK
em8mQDB9PSZJRiV3dCQwaSFpUXpHbnF8Zk5RMmR7ekBJKmU1Q14tSCMzX1FfPDIlN051WWM2O2Vx
Y0BNYDE4YjgxCnpkSDY1cGl1OHJue283bkRwS3o4YXtDX152e35oN35WJksyVTBMPGMkMV5sei0p
SH1FJVJRP2IrQFFfdGI0U3dhTAp6aWk+QDxZUFc1ZSl0dG43KXVMTEgkJHZAKnRZQ2xlKn1aaHRx
R3I9bHBHOE1hdUhgMkUlTXR8QyYpfGxtRnRBe3UKejtvSDd7QC09KVR1Zm5YRk8oKmhfNXZ3Tmls
S09xKmhYNEJKUX47PFQ2UUJaQ21zJFYxcnZgeH4wUkg5aXY5TnQxCnpDe0tXWkRrMWkkMj58NUBw
RHEyYmh4enxyYHlVZlJEbW5sTV5iK2ZJYHp3ZiZ4TDgmPiElUCtuIWpaZGVTdE11eQp6N19vNDdj
MFNKNUNVbD44WEZ4IU14cGROJT5wcWM+e0h2T2hedXJtOSZgRUF0MCZEfm8odE99N0Ajd2RvSEpl
YGgKejVuZVo0cWZiSj4+SUZ0U2RJOVp6JGBGUXlQJnBnfHM3fUNtLUBvZWRYTGBCQHd4MH1fR1o8
SFg8VktSaHFzNXlKCnpKKE5eXlRkMWVrSFhGX15oYk94QlVQWnlpb3dEe3spanJgUV8kZHJPalc7
Yz5lTnduRWcyOGFZNDJHUWEzNU93WAp6cCFMZXk9MmlvJk5tJWF6cip+e3h0WGAteXp9Znx8MDNf
YVlxY1RDMjFvdTA4ZmBKciREQklgXmhHJUNfeEwqT1YKejBkPSE3QXI+PllRMGlnO0ZsVTRTKXJi
dW9ZM2FoK2dgYSl9TlZaKXhwb1YhdEQtWkUoIXBCKjFhUHsmcWo9Jio0CnpEJDMyWjNDRDRCdThk
Kn1uaWB8TExPaHpQcVI8WU48c3ElcSM7N1ApRypCKF5oa3BgbWVuQUB3YH5Ye2ZhVFNXdQp6Zk56
flJBKVplVFo/fC00cVFLQCZEPUJXbCM7R1h4Z3plO3JrZGJQKlpkcEAyNDByZm9SM0tidTBVSTF5
RmkyeFgKejZsZWJNY0cmKG4wKXMkK14jUitPKUNpYGY9c21qMHomTikrdUF8RmZiTylDPWV8Ql5r
WV99JHRILTR6OFUzS2oqCno/MDxJakZDMXJYZn5tMjlEQ2E4K0ctQD4lYUJ5aTdNcFhXU3k9eVEk
QDkkbH18Qlc1OytZODhsZSUxKSVlTWZATAp6PT5fJThGYXV5K0lzazRSQCpRfnheX0BtbyhJRlB9
V3U3UDI2fUd1QjR2aHFreiV7QDB8SD1ONDNodHZLe0l4XnoKeik1YHpLVyNJbU8qWWR5akZhTGsk
V35DfFpKdSFlWG1YQm5gPGBzTGxJVU9PRlU+NGhVU3B1dm5PbSgpfWJLYT88CnpKUzJxNyhGVnwr
RTMyZk1jOD1OOyt0ZkhFUDQlP0M3R1A0fVNSdks4X0NBMEsxbFBlIWsjMDB8WHNWREZkR3UyMQp6
UVhPRWJyTkRKQC1YVDQzOWxWcWpNI3Zlc3U1KngqUXB9XipaQ0dlY1k0PiR+eWdqc1lTe20yWjxJ
PG9sVSNNJkEKem5XMHJnY0AyQEc7YXFKVmJMZU1FVCR8XiYodTA9JHpidVhSZlBxdEJVVH07clpY
SkBzakFOUmhFJXVuTSpnbDJeCnp0a3dSMjx4RjhPdmtfYSU4JSE1M1JsTyg3OEYmdX52KTw0R2hi
ezBgUjNsfE8leDJXUWdgSFI8X0koMnpIWk5oQwp6Kn5JO2BwKzJ1WD5ONEQ4cCNoJUd4b1BTezVC
aD43OU1ieCloTmc7JnNQfSFiP0BlVFFFNHBCKlRFZV9yNWU0X2wKemh2KWNVSkhyVVUhRT9OQzIh
WGUoQiMhQmFoS2gwK3VJYUFeY3BgWkd6WiYzKTs5KS1XZkhNbXdjO3kxQExnc3ppCnp4eyFtNUFK
UHZFUDRHbDs8JWc8O2lRd1gyPEdyNyNCRmdQVTVxfHQ0N29MOE9aWE4+Pi1YflRlKXs/eCFTbnAq
UAp6LWt9anBJPWc0MiRGLVQ0Z00tX0hfX2p9VWprQ2NmNG4zMDQxUzxQLWFMQUR5dFNoRTlVK2RP
WGVYeHBpcjgpfCkKemFRRHA4ZGFlejRFYUZfRXo+bi00MEZYcDREPWRrWG9zOT9uRUl9eSg7TFB3
I0Y3akJjPHFpIS1VMyFAUnZMayl+Cnp1K3tHITM0ZDg9MDR6OFg3UFFjWVY2SG48SGNCV3w0Xmxu
clpSdXshTll4O15VQHNVUnBCMD10dHkrJVVJNms8Xgp6Z29FVn1hd1BVRiRrZ0JlZSE7U1B1ayEy
Oz4hTC1eU252PTRFQ3FBJHF3T1ozKGV5UEI9VUBFLU9vPXVRdUFUdkcKejtgYD42OzE+VntRN1d9
c2BOVGhQKWZ5SXUlTkstJU1GYDs9ZlpsNks3SiN0VzUxWX0yRzhYJjY+JW0mfnpXQDgxCnpVOWZC
SUM9WWB1OD5QfGooJSlAPXg5NDVLeVdEcDw/Kygxdnl4UiszOX15P1FOKFBmWHM5ay0jKktfVD57
a0JzTwp6e1NtKV9xRjYkVDV8X1RvP142fX16LWZJP0o2JFFCczZZTVU9KnkxenNaQ2RIJE1QITZI
eyNGeSY5emdzUUFydzQKemFsIytCbGUtZmJVd3o0TG9IQyREbEgrM1lLZ2V2XkJ9UGMhITlUeXBU
Q05PcXUrNSUzY2B3QUo9NGxuKHdHcmhACnphZGV3T0AkdlVad2FHUi1pcFhpfT1YYkJUeStMTF57
Z0hSLSp4Ulc3JGZjVyVkYiNLQmMwN3B9I3Y5fmJXKHtFYQp6ZSowWWVmYVRFV2BxUitZMFQwYyl6
USNYMmBQTnpCNEp1MChiJVptczErQSkmey1FJih7Si1vSnI7UFd9RX12KzcKej5CVVZqbX49Xjhg
Qk9RRUlrIThwP2pFUzA5RH1reVBULTxiSUBJbHZXcnkkSGJnLT9wN1M7RHt7fEZFR05vPjI3CnpL
MUorezBAKXUoUHw3MUUkMHg/Uldya0xjTSpnQFlOWmZ3Q2FNQDhyWlpNJUVJentQM2I9PlZ5YyZ9
JlR3eWZBWgp6WFRVdDhuKlEyZnpXKjM4WFhVJioxdDBtYHh9P354Q0ZYISh5MEFDTEs7e2t2Nl9z
X21NMyNQJF40c0xyUXVMNjwKelQ8VzRja2xhazh2S04oRkRfZ2t0eHBlZjlqYng1dSp0I2lNVk5a
OVIkOyRfYzI/Y0whZ0BiQEFRWGl2RzUweDhzCnowU29LJjY2RHwhaFk0d0pwR3FhPVApfTR0JX5E
K15OPl5gQXUjJHd3cGchKmt5OyRaezxQUW0/LWNEdFhsPj1UYQp6THhgP0F7aF8mTDw9TiF7dGkk
XjxWbCZxLXg2aDdYc34lMnFafGBjWEhSYlhIRnNOaUJWVWFFcVMte0k+PDM/em0KekhGPD1EPl8q
MS1YJj9ydUElWl8hWTNoO05QWjA4XmFsa3RMXkQ+OEl5XyhnQnU8bGx8UGVEUT0pQm8wYG9uI2Nt
CnoxTE4ybnNzZHR9UVNnKkRTUXhFZVR1aVVid3BeTTYwYzkheFlwQGtrV0VzLXZ6ZlBTRWFXU0Ni
PVZGJSlELXVJWQp6diVffE53MC1uZW9BMT08RzBSV3h5NiRJTTVlT0BILTFuWVhgK1lJYElXRnF0
UzY2RXlCQXI4dTMqezlfMHI+THYKekRvdTZlVX1zfk8kSF4pPT92X0Y0Y3xybDlJTjk3NUphM2Q+
KTNOaitkKGc3azxhKTZTKD1kNDVMKW9jYkR+fSk5CnpvcykkIT89UClBbzY8RkdAUUVRSiVCJCpg
a2tOXmlEKitxRkA3NkI8aUEtX0heREUpVnhkVG9RVnZEdjlVMiVpcgp6QEZKPEhQMjluLTtOenY2
OGdmcWhsSn1pPihTM0h+WmpXPGV1MVYkVGc3TGZvezJrPSheYkBPQlRPbyRCbUsxRXgKemVCfkhr
R3cxKX1wM0xMYDI/YWVhTlRzfWJiKUZmZzZiaWYmRT1mV0Q1T2MtQERRZ0ZrZF9LIWU8Kjk+Q3FF
YFZtCnpubmowbiR3cGIwT3xEXlRSJjV8XiYxSGM0XzRqfUtvQW5WNEc3I0YoP0ZReWkoRWRFSGN1
VXk+QmxmKEswSHFLagp6ODhMdXIzQXBNe1F2My1EMn1CM1RaQUopb24oOXZDejwjPXhQb3NMWDNr
SyRlbHB9bmo0OGM3NmBAeFJWbnYqTmAKeks1dV4jd0JnaDIhJChVRkdqbW41dD00dik7bEFPPURU
LX4lM3JFQGBeezBSRnh1XktIZl5jJVp1WGdsTWVwNm5KCnpNcDlsUSNucjYxKH4oMHBnaT07NlhJ
ZngqZVlTeWptRnlUOU81ZSEjZUNkNWlWfFJxXkxOUXZEWnJVP0ZXejhiLQp6MnpNYSlkeys1UlR9
ZGU9dWc7UXNvQ1oySTZsR0FQc31XMUpZfX1oOyF9RnZ5aVRCfT5DUHswNyNSUyVhY2FVbnUKelVk
RH4jTHwqaUk2a2soWStjUXxNOHliajMrJUJffSNKTF5NcFd6ZyFufnNyRj9QXzteOUk+cTc9Knlv
eGshdUpxCnpOO1c4UDBVM31yZ3FHU3E9I3R9VjMqMXphJkZTbEkzfWMjQ2NLaTB1S3BQTXMkcTd8
WTNJPiUwSWtSWDloSlhNeAp6JD5UKGJPOXRaejZedmFVSCpBaSVUSG1zeTxOSjl+al4yc0ZKUmV9
bGohME5zR2MtTkYoYGU0YHJ7QDRBT1hieXAKelBvZGpVXldMemhOPFBgRXMob09DVz5LbjU+PThn
MFlYKitldmoma3p2Kz50Nl55NmRgRWByP25hT0h8QGRHV3FxCnpOYDlMdVh4JE4qRj5DKkZ6Z087
KCEtbVIxI018V0JsQUxSPWA1cnhBeXMrIW97JjRWS3ZnR0JFSG1iOWFmNG5ORAp6RXBiQ2h1aGRh
YmNeaHtiUzBGdGRPXisoRkN7aWN9I15WTFVYSzlSKEBqT0NLdDBtWDZMKWs4Y143XkRgS0BMXzUK
ejUoJGpybz9COHVyfExrfkk3cVloYXBYTWNuTzl8SWh0PWZkNH5weW5md0lXUHVYeFFDK2ZmOGI5
LWxZbUZsT2BkCnpPLXc0NGYzUnpDRGpDXmcrblZ8fS14aDNQdlF7dDJJXnxUcWN6d0E3O1dgczZ2
VSswLXlaRFhtP15EdyEhfV42PAp6RlkqMktqdGlURHd4e0JzN2JmWF9PX0ZAKSU2I3kxTjVaYzRn
SVRCSWp1OC12JjY1PVJ4VWBXUWN7NUk/NStRUloKekc2KXMjdXBmKEZTR3EtckEqQUZXWTlJd0Vr
YDJzcks3eXorcXVMQDQmQnI2ZiFza0BuT3FocnBXKE1VbVFQfm94CnpsIzwjOGZnP2FDQSF+Sj5R
eWlZUVNufGB+SGFea2lgITcrTjd5KTRwcU47UU5iTyE+a25lS0JuK2QmUmQ3RitPcwp6bHdIaEc8
LWV7fXJTU1RkVFlsLVM7cVMyY3lWO0EkcndUa21hbTswUWNKYEtDXkU1VEY1M30reyRCSSR1aUQ+
aHgKej9rTWZsKzQhUENMQWlHSSUhfHpEdzE1I290UFlie1lmNXtBdCM/Q1BQZXI4OT9pMil0R1ct
TisyVHFqd1gmMGl0CnpLUkQjNiZeT3NpMkNOVzFPSCZXK0xEVldMbGd3ejhAK2VrJG5iMTFwJkxa
TzRyKHJLQGdRRykoWX05dVZxUT5CMQp6en0jN3lSdk5SY2QrbXtFRS01JiEkRm85KTtaMHsxbzh7
SjdGZjFicjU7RWgxc2glQkNfSHAkPlp2fTRNK3M2ckcKekZNMF4+RFN6N1JQOFJsMGNIZWhCZjhY
Y3hoQWxhJWx3ej9INUVicSZOMHFtdHVQT0pmPk01cExYU0VNOUh5Zn16CnoqfT1KSURxQEQhNUVq
VCQ5YUw2NWwjVCl2PFAxYkA1Zml4V3V+ZUw1UXtfZUB1NEJ0Um01U1dwTEIjdjE1TEkhZQp6MSRz
WHhvbzxGbDlMTElUQk1eRjlQYVRyYjs3Y1UrNmQxNntYS3JjTytjPlh+V2BuQz93eUdrSz1OMUZO
Z0g0ajkKemJrWjE8NDlRM2YqUjdCJj4obmwrX0R9QVpVdFhQZyp7UE8tb0F3c2J2TjYjS2lpQ0El
KCsxeGNaSENQK0plZT1HCnpGWUhwZ1BIdDlFTi1+LX5MUiFVPjh1SjxhPGZ1JGpWYkhUWlhOQX5Y
ISZBPDNoe1dUQkRKay1zYz9aS3NoRH0zZwp6WU1+OSV4c0l3eXQwVG1CYUIwYWMhSEJjTGd5SUdr
PnJtfXk7bCY8SVgoQjx8SU1wNGBRdCFBWEZULXUmd2wyR2wKenQ1dGM7UmFCdEh2Nl5RfDdjVWUz
ZTk/Nj4jN3ZzdXM1OWQoc3dFdU8yWWY2dF5AKXFJR0FGd3hiPj1sSyYjNHtxCnotYUhndWxsdF5u
IVUzUEhlZXNzJVU9VGw9dyVmRGcmZXdZRE51MyktWiVlO15WZyQqNz03eGNsRyRTc2BpcmA+LQp6
Pj56KkZaamhvZ3QkO0ExSmplI20jI2I9JmdHXyM9c3JWK2RebSVLLWFWZVlJSUcjUUNONj9+Oyhn
RUZrSnQ3NGMKej1OWSh6MUkxKWZHM0lWU2loQFc7QmFVZlpqTGxKNzUzfmZMTDFnOz1qdCYoTV5r
WThxXjNoUk50M1Z6P3FKQEE1CnowRjUmWEF9fT9BSlBIfGkzK1c5ZXRCfFohYGAxX1lAQmxYP1ha
RHVvZm8mYDg8aFFGJlpme20jdGNyZSplXzBGPgp6SkNsbjtebTReUCo+TypJZUlHVHFzbn1DRzxu
cWs5dW9hIVBUeWdud2EjUFMwPnhhdVpGTk58Klg3WilQanNxKz0KelBPaG5Rc3tHQGRzTGpzdGNP
PGEoemcmWVg4T31TZyo7ZDsjT3BTfnw5WSlwUU47V2YxZGtPVG1jPXAqQjQqZy12Cnp5dTFTKi1B
WnQxUFltamMrOWs7RShUPG9SbWcjZHtrQnhOVzlHakQ8MitWM04tQnlyOVRZKChiSHNeV1ZgQSlq
Swp6YlZgOV4yYzQ+cVg+e1pudG9KbSZ5O0FYakRVU35gb01oLX4kclB7UCFTYiNGa0lwUnpFWHsw
aSQtZE85WFRzPVgKejh8UVNrME85R0huRmM2VjlDd1c7c2JWJTVOMHE8fjduVmFudmFyQWIlcCRP
Jksye25hY35JM2MlaGFqfUdeI0M8CnolTyNsMGg+IyFmdDlwZWlfdzNTN08wcyhiKFpzZkE5TXJm
MlB5JHZlUSpYO3VWK2lBTmhKcShIbXc5azNWdG9EKAp6NlhgaXgxVjs1TGs9ZH5ZZlgpJkd4Vktf
cElpaWQ7RnJlUXl0Vk1EOz16UGxHcE1+dDsybmVAZHkoRVA5JGNhWkgKem9fdDUmPCtDWGZ2RDQ1
cHl7LTdfUHooOD8pUWI1MHE5bUBVXkMwOFd7KkVTKGxlYzc+OHIkbWg7ZmFiPzw9VWJzCnpjamRy
SVRhc3xGQlhnUlBoSFo+YmomaVg0aitKQ0pyKXk1PUsofGFxWClpZ0hVK1EoNnc2UDdjc0o4Qilp
STBKdwp6UVJDNVpSbk44fTVUI0FHdXRlPDVpbn5We1UhNkZXVTEjPkMlb1Y1Tk14JC1HalY3SSZ5
PT5xYGE/RyNSSlBDZjEKendzdnM7P2FBS0BadlNuYEM4cHppbjhiYlhyN2Q/ZCU7ZHJ3UEFfYGs7
bjM0RjhgQDAwb3c5Z1RyeHdxRllVbnFvCnohUEpkWjw+el4pZzY8cjB6OVQ0PkxsdzRWe2tja3xk
KiZpVkYlWiVYdFBQUT5LM2tHOWtrd3A5eihRTkZCUHQxbQp6KkYjMilpYTNHOSMjb1hgWjROKlpn
eS1ScmVGdlBMU3FAMSRkRzRISUBzUylnWjtMQns0SjF7UEReK0kjRFVDRVcKemg2VWZQcUw+Q1c3
JWhoa3hJe1MtM3FEcTVHcW5ocihBWn5OQj9NcHx6LXJsTjB5K3YmenB5SEQ7ajwoSio1eEMxCno5
ZloqfWZ6N3ZrUWw/WDk8aTc8UnB5YTl+Y0xxRHduUXZIQlAkVWp0eHBHb3lTTk8jPmgxMWx7cVZ9
ZHI1dUBFJQp6KzNSZW1RaDBkMldQMHg0OHY4ai0xTVk7KnA2a2lRd0EoellEYWZyZEIzN0UoZ2s4
M1hfOWB7Yk0jYldSSElqMk0KelpAPz1qPnFjQDwzLVlWajBaVkdLTiRnb2gmcXFGb1hidFhmPjhy
a3MjfURwP21PVll+dTN+YiFoWUZOJHg9VjlPCno8Tk1Fay0hYiUlSk9xbVA3czZfMWtEVG81ej08
JVNCUjx4T0BXQWxBc3VOd2hCZkM1VEFgQ2ItaG8lVWM4WGFodAp6Pz5jKWs+Ri15WVVVeEFMNCpv
ZSV3dUF5dSlaSGlpN1BYXjBGeGk2WGlSPTkxeEZ1QCRCdGN7PE1GUmpTQSEtKCgKenE1eCl8KGI8
dS1vQ29lJjZTJHxXOFN8VEgySG5SalVga2BEVV5td3I5NzBMWE0+ST8tMkszUWAqcE5abEkxKj9l
CnpNLTdeWUdZOS1kRHJwV2R4SCtaY1MqUW09ZE5qcGcybjttI0s/czVee01IcUt1ZCFKcCRURysl
X2YlPzNYcHImIwp6bjVuRiVYNFhFeWNKZEc5aDFtSkZaPFpfPUxAQDVCWEc5d2M4T2Q9OStoJWp+
ZitPdXhgfGpDV01hNSEtLXw2RDUKelRBNFVaSlY0OVI8PEs3WHtgOTc3UDJGS31GYG0lRkJHVj87
V01KLUtSR1BAbnlraER0YmhZUHFKcm8mNlplYUxOCnpsQHNST1NPY2BCVyZGRWxfPn4tNUl4JjB8
Yk51QkFCOWYwdlJfQEJ6bmZITGtYViZ0QGFza25WWkNmaXVHQm5WKQp6ck17fjklc2E3MU9iYXJe
KkIjSn1SOUNlX3xMR3EoZVE9UWJDUDVlfiNyeU83THZPMWBAPmRVMWhxMVFoXjY3ODgKel9PP1dy
SjAhRFM1KFZIZzlWUGdGVl44emxSXmtgT1paRD5Qe29AKnVyT3Y+ej9HX2B8SU1mc2UkVz5QSDA4
MnY+CnozQDhGMyRDOyhkTT08QTZ6QDE3ckgxclhzXyMqTyVoOTxHP3psY0UlTlpXOTtkMXwqQTs7
YHAxYUZMbDRzVCtZMQp6PmxLclBZRXY+V1MjRSRYd0hDNylCKnFxbXMlXyY7Qz5OVTxoKWVINCp9
fWU1KSo0JXdfWFN4YTRaRSp7TXRqVGYKekh9cHkkYVFZPEs9K2Z9Xz5FOD4hTyFoNlJ6QnJRQV57
WXFgIyR2cT8tNElaO0MjQjQoWmVJTzgmNTxRTHoyN1FRCno+Wkh5QWlkbVZeVEgmZCsxd2opamNX
NSZqe2ZQLW9yNno8PmcwUSpiWjs1KmA9Kk9YSnA9d0UpTGAkcSFWQjEpNgp6T2BMTzw/ZnEzLXF0
IUxCQjE8UHYjU1JSX2RVJntvKH5HM0Ypd2AqTG90Mng4SEV1RT1ZcmI1akl7UT1BUV97cVAKeihJ
JjFiRFhRSGxBdn5zVEl5WVgwYVF1QXg9NTU9eSl0amF8e3tHUD5mQTlXVGdPbU9lS0RfQWtZRnpR
el5VSVk+CnpLSFdLMlEyelMrT28hZlp1ailKPD1KXm4yY1JfWXhVcXIlJkxjN1paUXR9Njw0KHFR
SUFgNEVQMV48WmB1Nm5VYAp6IThfR0VIUzhJd2R7XzFefEpgVHJfUU83cz8wMjZve2g5TU4ja00t
VEA7akhscFVfX3FKeUthYHYkNzxYdWwzZmQKej9pQDZ7YjVwflBCXjRVd1o7ZHRLPntmYUMxQGIh
N15BWlAmU1dHOG9RRElHdHF8b0Jpb04qVktKVz1PejYqVyp+Cno2Y08tcmx1WmYqJGJmYDQmaWky
MTdHQFo2ekEqSjRHfVQoNDNIOENxTSh9dVVuTT8oSGFtMjYlMSo7QWhMPlcraAp6P0p6QEJxZD56
aGFYfnBLSkxnckNIZjZpTHd6JjN8e3IrOXVEPWp+RSFOOGhCb0hDJjlseGR9OSsheDg2K3praHMK
enU5TFE+bU5yU3FqLWpFRVZTRTx4RHsrKnNHKldEOEg/YlNuanowSyt6I3EybV57fVR8JUBXSF5B
JVQ1JmRWWWZaCno3c0gwRD43SkBpPWxrKTJ1UX0mQEFfY188Y2g/dXZ0U25KeHYmJm09NERQS2dL
amd8R3M4LTUtUlpVVVgzbUNveAp6SmRZfUc7I2g/PnhZcmw8OH1tITFrLWp8TnFaVngmaTxpQitJ
eXhGX2J2YUordkxIJjxQZDw8KXMkdENOQkZ+LWQKelpWfE47I2FSdFd3en54UExxNzdKejFCbzJn
KFJEVlJ8I0p7ODlWZEdxazYzYmJ7IzJ6cXt2Y1kheTJ6Xz5ZTHhGCnpCRCZgVGRIXiFwVEc9clNp
ZFl6PSU1ZW50P0ZyNFBOJjw/KFhPVTctQkhyNFNaYU1pbXVVdD9WR2luWm90KEMwagp6Xl9fS1Mh
VE1wYllCNChCWSVNUGxOKkE7N2BlKmckPH1qPkdKbXlMfCFSc0ojdV5wWVZkYWh6Yzh7IWs3TjtI
UzwKekM7eTVPJEUwOUxDWmJuTkkzeHVsV3FZQHtYQWBRXk10ezQlSj5fRVp5JmN0dj9haHtQdSlC
Zz5nelRqb0I+MmchCnpCWDFMUD5uajg9MjVidV9OfmNlQCtldGNVVE1OYV5eLShHOUwyYkwhNztP
ezZNTFIxayhNPWJYWXtkUVJEaU1lagp6XjIrJEVXUVp8O3BwJCtYVzV5OCNgS1JVOS0qdyV7dHY2
a2Q/JiFrYXdjXkpNOCozeF9ifkdGI3hYXzJFKz1mJD8Kel56P2BiNlRAaXRKYlJ1VzdjeUVBdXE0
fExuJWQhJCZzcEJtYzZNPitoSz0we1I7QU8wJVE8MGNDfGY/Xzk9X0o7Cnp0PmBMYXojcjhrYWl3
MT5AcDhjVTRoSkwyXz5ZOyMjckZHdVNle245dElNRFJFKThNRGZIMX4wLUteaHckSnNPTQp6Mkg2
OX1WO09FY0FsbUNHVlUldm13bihXSCtaKWgocTVqPUVZSjhlfFhKY01FXld3K1dfND1SPV4kdDFe
P1RgQDAKemtNRGZGU0BJREpYcUR5JDtXSDkqcldHPXFRMzdAcjElK3p8SSl1dUExPUVPQlpudW5a
MWRBfS1QdGJYckZnTUlgCnpVQmJRcTNGZGw0QXt1bld4V21lV3tec3QyOExSTjUpRkReRmUlQio0
QW9SYDhfYip7VE5wYS10QFh6cjFOMCFlMwp6Zz5rUjdLOzlWPjZaOStgWCRRaW1kfV40ZmxTMHEl
SXtEaUI2NXErYUZHXlI+Y3E9Rl9HWUtmR2dRYD8zcVB2XmgKemlKc29UbVN4VG8qSEF3KTdCOGBV
aH1zeDYmbkwoail3Rks0JDAjbXwjcUM7byQ3MC0jc1BnRDhePGpteGZfJHJyCnpNQSY4OTdQbGda
QFJyXiZIXmFAelRmWUdVVXpBM3E8V1l1ZjUyeUAmcytPKCMwJlRYSnNaTnVLZEZPWHYkTFUyagp6
JCptZ3EkUzd6YGpkTTZNcHlASFl8NU9pRkVadn47QF9Dayl8NjszbWAyN3d1VFk9fXxMZj0yZUpa
YCVUSDslPFQKel4pR3NXZUgtYDUzZiFeRU9MfmstSWYpYHpuYFdFWWtRN31MSTkyTVNJRlh2SVdP
aChrNlNmZHtuVkw5KEwrQX1CCnomP0ZCbU9ZMDJtdihXXkNJWXpgfEB7alJfZzkpdXJFe3lUVG8z
a2Y/M2dkYGJnMzsxM0VKeXc8MW4zQmgoaGZGIwp6bDlkZnUqKE5JM1RjPzF9WVh3MUl2cV8jMktC
ZCl4JEskPyp5bnRqczhxRDR6SzNoQVdabi1NantgMm8pJlFFZlQKemVYWipeTFp6U2ZBX0gqUVEx
O2daKVQqRl5pNSo5Sy1YMCUySXY/O05DWiVCRGBuQCU9VSYjLX0zbXJEcS1MZVNvCnptWD92OEdw
KUlLM1FqelVKPWM1SkxkRXYqYWlFJE0jcEhFTjxlfEQ9QiMxeE8/ZGN3V2ZNZDBvKmtLMXwlTVVl
ZQp6RnxNXmdzSHVIKD8jeD07OElQfnMweTZOTzd9WW9sTkNeWGhRPHl4cGEjMikxR3cldSlaTj1H
ZkZnRGNWNXlAOFoKelk+b0dwQHpIQTlyOV4+JCs+V2h7az00cyhPK0VyT0gxdEN0SWU1d0ImNGFh
aSomZiRGTnhtLU1GTEBZc0pYdktzCnpjdlA3Yz5CN3dxc2k1Uk9ARWt8VnhAZWJweEh3MFQ8cX4l
QUw3VnpxJj0mM0pIRlAhQE9kdjIjVDh3YldnMCtGIwp6WmlOKVU4IXwxTHhYSWVTcWt3OU5AZ1BL
dHleKEJCMXsjSUh0NzZmU14rS01IK3F7UCkkUmBePSE7MCpnVjJMODEKencqZFZoUDJFRH1XY1RU
YU5YWT8mJF88Qzw5eSt0N0VFbmwtNmZSaDElc194VTQzc0pwcG8pT2NpZms1Uy1DfD5sCnpPMFlL
fj9+bV5gWEBPdllzQUY8SUROT3NOP2MocFp1KWJIZXRvWngyc3xuMWFiMjEpNzxFbEo3UWt0SnZF
dnxjTQp6VXI+fSg+PlU7QUlqREY7M0gzZ0hfU3U/fkdlaG5AVmg8JVZDLWZ8PEYmIU55ckNCYSol
bWFKK3gtTXxxQ3M5KyUKem1QP2ttbEFzbmI8QEcpOTdjYSRqaUFOeFBETFpwcXJ8VSR3OUEtJkJ5
NWktQz4/ZStSOEZ5ZEFHdmFiRmkqJDQqCnpxeUR5UntYfWtecGIpZllvbz5CfFhlfk1HTy05RExn
cU5efDdOMCVvQUctNnAqKjY4cypTbSYkSWNVRkw+NmtBKgp6UC03b21iczQkMyh0SWpWLTV6Pigp
NkhjPVNNJjlPQ0h1VGl1SFJfQ2lgVnM8Xm9WUmM5dWFpND9+bHlnWU9Bd1kKellIKCFlR0lwei0q
SSl5YjRgbW9QKyV+bmUlfmA2WWJlTXhaSzwjMFMhY3F+cilFRT5sYz9sVl5CZDlkd0JKQE5kCnpX
TmsjU3l3dE8qdHB2TjwxKjtWJSZFeyY7QD5yWitRQzFDZj8yY0FnUU90bERBZDltQGNidzQ0QWds
dCUpUkJRVAp6a2VpeU9HLVFyVkt1RmZGWT9jfElIWjBKQzxPITkqdU16VU9MQFZKNGtZI1E4Tk9y
TCFBZnV4QVJwQ3hpJTk/fkgKelp+TysmZz9WKkd4NCpTK15FMFRZZU9ALTY3PDAzcG9GTWh9X0V+
UGp4VnowPHhfNzwzRjI/NSZVVm9nOUheal4hCnpvSGxFTiojNmxVVzNidC1uISlYa2M3cTZYbjxi
LSMtZ3Z4RWs9Vz47K1VKWCltQVlTZCVNeERwdjlZVlFncCQrMAp6S3hjb3x1VEFgfCppJSpTTlF+
RzRCQDMjOW10NGs8cEt1ZVpwZSglUTMwc1ZGP1d5fmw1NyhXJm00OTJAeSkrcmsKelJ9QiVaandQ
K0xjS28pT0FWfSVqOUEjUmd3WnIlei1NU0dPbFREMldVQStEZ2FaRTVCZSlDLUt7TEUxMXEkTjJ6
CnoqZXNJWjEjbzlDam42cyNKYkNyWERheFUle3ZueVZpeENpOGg7KGtoNmMtWkNXdTJ5QmJ5eTYk
X2BWNTMyX087Sgp6WGE8eH0kMjwjVThHITY2QSZQTEV7LVJxJkw4S0ZnOWctI0QwbmslR3J4I2hI
K0phQz5EUDlMdTt5JUBvc3h1PDUKejRyOXdnNFhOVnQ5RWBtVio1I0w2I3lVa24xMVFjQUxXS2Uy
QEhecilia1kjQ2RjbzUleWI8TVEhVjI2bz9SRlVwCnphYko5VyNCYS12SmNDJkNyTndQfjE+Uisr
bl88UXZqZUk+K3FeNDkre0JBIWh4RkEyLVIyLVdvVWxRYW8tUThXPQp6NSpPUT96ZDtkbEc7KyMz
I1NsUz1hLTVqSlZ0cVJMbE49WjQlfjsrNzdPUl8weDBlK1lVbURxcVR1UUp7djlaamAKejwqNnB9
TkQzeXJ5LX5uNFg5UTFBZG5FMUJLeiM7OGRxVk5EeWpvLVQoJUAldyV5UUZZPU9BZlJgc2E8QyVf
QmB4CnojTCtkS01Se0N6cEJuQVQ3NHxWKmBRfkZgX3FZMylNJExDQUlUKklWazwhdCpIWTNNMEBO
JXxPa1YxOENDdVpmUAp6TjZZVXx5TEpYX2FfPlMoVGpKV0F7dk5UZDYhfi1ka0w8czVVSlQ5UWI9
alQ5SmI5KEFPNFd6KiFZQnNFaDcqZDgKenAwaFkkM18lZjg0JnspcjJheikmJXE3e3s1c3U1KSZO
N1M0eWBlMilCczNmcU51RSZsRFZ+IVlzYlVudDQlfFRHCnome1pKTjkzeXNBcHYrWk5BQkw+Vi1p
VU5lciF9WmxVWUJpRXMqMzt3RzhhNWQ2T2kxT09KTHYlejRxd1pGdmpfPAp6VFZ4JTUxQWV6Nktr
YjxpKX0zZzBze0FyWSVidUdQXl89UUZXaEwmSkhKbjtzNnk5cjxZSSVOaz0kIVFpTHBPMHMKem1+
eWtxV3JSKl9XMUxPdnJ0d2kzMWBpKXdRZHo9bCt1TXxVNDE5Mj9paWl1a2VMO1hfJWdWZCp1dEpu
ZVdPMTM5Cnowe15Wdmt5JUByO2hzfF9ZcFlpO3gmSypycUVFTWQ7bSpoK2o0V2BIKCNsO3k+fkIw
UylVNVJ9SzJrJkhgaEJgTgp6NEs8fk5aX29lTUtAfEpePEk+ZGZiPy0jJnFtUEAwQk08WFEpQXEj
WG5HTHVSIXM0NkAteWgwbUpLZ25FdHFje3UKejM2JHZeQmg0M2UzRndyUDIzTmx+TlkoUDRQdWRT
MyVWYnBMX3t7MHAybHVFZ05jY0c3T0tpNSVOO1NCdHg9VXQrCnozUXV2amMwPlZAQ3NvTlpyalgp
X2wtKXgpVGB8NT9nRWl2fDBAa1BsWFZDKV4rY1JwITQ5SF8tTHlSZGRgRnViOAp6JTF3dkV3Izh+
eXlVYCNwdlRzSXttKnhUYz5PYjxFaj9iVnVIWExBck1GNDNKeUVDaS1fO2N+VmgrfDxSMVooRjkK
elBnR1Nic09xYV4+dHZPN152PkZxJi1VQEE0UCZESGkpWChqI0ZaQndgN09ONEwoeUYlQCtLKUhC
a2AtM2JTZE1SCnpWSEBAJipTSD1HMnpfJE0xflU7PiRtM3RVN3ZWdj9SUysyP0J2RmJkM1lTSlk0
cD0hdHl7N1RgeENHVj0zYy1vcgp6SVAwWHR3aEhzMkNIPFlRdHktYHt0fEhTaHJlKlJEK2gpOUxM
QXE7YHV2I2N3JUgqT0JHQ2lEIXFIZ0Y2ckclTjYKemVDaV9NVyhYXkcyYUsoeiVidyNuVmVDOz1S
WmdSbT9Xd2lPP21sYk96Vll5akEmQ2o0Wi1wclN0I31aJHNEQ2oxCnp7eDgyfFJsZX4mb19lbTt2
KHA/MTI/PnJaTE5tajU+ZiFHKnd7NnxMPSsyJilDcUhhbVQkP3dlIUlzYH5Ee1psXgp6PCtgSyVk
d2A2NTJiandhMEdBUi1oUT48QmdhSEUlcCowcyNteEt6NVZXSTNAJVMtQCY5RXc4dFFMQ3ZsMVg1
MlQKem03V3w8NVJ1S1hJK2RFTDA2dENUWUNhbDVvNihlYlJTcEg7fDJEeXprNSNOe1U/QzdQODJ9
YSM3X1Vjd3VOUkIlCnpWJXpaY3ZlenBmSjtiKTVFUjRWSjkhcWxLVkVoPUxVd1pjWm18dHwtXzhh
bytiP2NucjRWdlFFUTRkK1R4MU8mfQp6KEx+PDdETT53RUU1WXgwblp8ZypBRExZPk82b311WUFA
eSEkcnROTW1SYypQNWVIUn1vb0JmZCVmfVhkVGQkXyUKejJJZFZ9QlNkVmcqQXZgYWRNV0VGc3tU
cjFfSGRocDZZd1k/YyR5OzZMWFFfTSR4ZzFXMmsqT3VRaURidFFTTjlwCnp0O1hFQD4+VnBCWFlh
N0Q3Pn1xOEoxblB1Ykg0dkBackFHSUdsI3hBVUVDKEdSZCE4UG42SVdeYmxDOENWOWRQdQp6U3NE
RnVAPjZ4fEJ9dyFQLX1JYE5Zaio5RFo7aVJxUSt3c0p2SkpnRWE5PT1TKlNKTjtwdFMlVTY+U1V6
QzwqcFQKenRocXhXdEpeZEBNYTBVUjIrPWp9cSopdlpRSkk9OHJvWSozN2I/bHd2ZkpXVWUyI19J
Vnteaz1scWorVEEpVXM1Cnp6RkMkXz5uQG07JCpXcyg8bU47ayZ4RlBvcWdET2A3KX56SzRoY21w
KURvPTk3bDlGVG47bU5WOXl6OGZNcFlPegp6PHJqIz9pVUh1UEY5TFN4UDVDMHFZPUdBNHoqKVlv
K3wpUWY9MngyUGJiR2tnP1RPRUUtZlkmRTw7KjRLaU9pTUwKemVnNE09JDkkcCZKNF9SRXJZRygj
X2RQJURWcmlHIT5HX2Zvd2dQXnxDTEs5VTkkPCFVVD1IfmdSQGdlbjxNSkRsCnorbU9YLVg0aFJ1
Vj9CZERYcSM1PTdLM2swVCZ3fjA1USQ8LTEoYGB1QlY8T2hPJkBKZTQkWFZtSlZfNX50Y2BVdgp6
Sk1gME1vP0RtVV5GJHRiSDU/LVhxTXQ+bCpFcCZDJFBtfTk/QD5WfWVZRXxGJEZ6YXlzakpgS0Y7
M2ZYYHBeQEUKenU3VCgjSTJfPX12JDN8ZExnaSQ+UClFPXw1NWF0JUVSVnZ0V2NlJWhXRUtYflFK
ejt1P2pYKTFPUlpxeFNAdlZ9CnpATHhgaS1MTk1FNGh2MlZHPF5MNXNTYkFEMk9zKVN6ZiVpQjFw
PlpjWkFeQEd7ZCZvVV5fd0soNEtiV0I/blgpVQp6eVFwYFA7eUIlS2M3RGF2OVJrKD5ARDJuVXk0
P1lIRWg1YD9UO0JtdkoxVmIwKmdaZjl2NncpSyRLMkpaZ2dQRm4KeiZvOy1YIz8+RDclZlR2Z2tM
eV9ObE1FR3FGPk5UMiVvMjhFRX1DPFVCQlFQYWNFJSQ3M144fmUxLVRoeSRFfntoCnpXOERFKDFa
KnxRc284OTZ6LW1CKUtVWHZrSVRwcks2PDZvQzNCdEojWTlJO2EhZ0d6U1lyZGNpUT9xaHFwdmI0
ZQp6UVNaMHVidUBMQ1Bxa19GUEpeI3M+KGpfN3lga0EqRWN3JSRhZz47YiV6PFo5JX43WEB4Py1s
NDZVIzV+I2pHI2QKekNEUlQpdjwpfjgkRTU0UWl+e01BVDE1QCo1YSh3XkxqKVV1Tihpbl56dzgo
WXcxdXNDM0lebyp0ZFNSWTg9SmlJCnpsdHlXTCQ2ey1GWDV6VkJLTVFLNkd+JURsaj4kaVEzVVU3
QjhpMTZjWXxOcVdJTH1FfHYwNF9kYTt4WEs+WHolZAp6b141Zkxqdnk9TCZDfWs3dUNSRVM9SGxG
MHYtUE41KXpvXkE9R0lQKDR6K3l2d0xhU0ZPdURwSzUjd3JOJlAtVjQKemJNSXFeb247dF8qVjdP
QEp7KDIzS0phVl8hQ2J1QDhSNEYtKG9GXipOSEhob0dCOHg2aXNVZmJwKmlPfWtoMlZFCno2bzZ3
JkFkIzYkR057bVYyYkFYRFMkeGd9PkxHUXBBdiNyN2oyVnpFO2ohQlFWcyYjKzBub0w5al5rTH10
Z3AmSQp6P0k3aiFOdEAzXkpqeTZKOGJgdVcxPFpjaWFVQT5eM0lMKzQxcVZtZ1dASXZKZkxWMDB6
NmdfVU1wSXdmKW9YPXUKemRFfD0tYC1iUyhAVV5ycSF2MUFSP19NaF9XT2k9ISR3bXRvanl9bVZI
TEItVXR9TnRtKHpmO3ZiTCpnJlgqbyZUCnpyWD5rSW8jRzlRalo+cExnaUdTRyltX3ZYbmtKITRa
bSNyQUpCN0RTNkArUEFEej45QWNqTytmUDhnKko8WG51JQp6V2R1ZGdBYCMxQFNMe3dUMFR3TT4k
MyY+UUBHT2ZWNH59ZkFJT1kyaXZmOHJWOVNCVVFIajs5Qzdhd2Q9PzgkQ2sKelg7WXIpbEMwV29L
NU48SiMyVGxyTlBnLWd2NVU5dVZnLXY8bEltdCptQWZII0ZxWjsoaWZFYDFpciV4ZEhvLVFgCnpl
ZG1geEhvVHdUQnNwSExxX18rczd6a1VzRWd1bzY4KVJ3NV5FPi1nYGxxUFNQS0NESjk1fUUqN2JN
Qm5hIXIpZwp6QVYrfj5FI3BVZXlUa3E/JkBAY3Brcj9QSDZBWGR+JGxYSjMkPHNfRFZkT2V6NUtK
V1pDRmJXNGVHdTMjRkVIayYKemxXN3JUaVgjO2ZzfFZJRElUfEd6NyZMXmomJTNvKUZDRkQ+eSVz
RXpJVCpjeE48UnN9JS1pVHpfQmg3TVlsY0BSCnp0WTZCRyRBazw3eylQZWJKeSVjNkhoPE19QDVa
e0crRmk4JG1mTkNOZDFFRGFqO21jdHk+MUA2aCs0YjBacTQhYgp6VGM+KzFaZEsxe0c2KFJEKjtq
dGJCV08kMEhuK3V8NmlsX1pnd00xfGRRT0VkPyRrPUJISV55dkRhYjF7SkBoI3YKeldZSXh8VHYl
RyE7I1dPUjNOYmFLJCVIJHk0Plp2bmhFPUZpZTBUYnVAYWsyckRVYksrRkJZJl5zK2haQVhQeERK
CnorNlc3b29qUEZ6KmdDWGwjOUBoPkQkMVdEb1hFa2s4eC0tUnpFUFY0TyNrNCQqI3t8eW8oaTUz
aShTP1NeKVReYwp6KmJLeGZFdEpBampxPXRWa1lXMD4lJTdqQXteOEhHYUx0UFlWWnkkRVBnZ1c9
UkRFOSVRQkJFdmptPWg5PVkpQ0EKem5HPz4lO3VTMmUkfUFzYG1KMis0eDAtQGVFRVM0JW90PXAy
WFI7bjlSM2kkfTFlNiFXSDRFOVI2dnU2dGM5cGV9CnpeTkxzNlI/bzdiODVNVXhxaz9Fc3FkTE48
TG8/TXR0QGMjNlB6WG5eey1MPj48RndYTmgybns8ZzgrUExMKlZ4cgp6NWM7K3xBaXlZakEyRUpo
Xj5TPUo0T0tiZVMkKip6cHFgWVU/WCVJKnhhSDVqaWZjSGNuUnd1PiM2P0FSQDllNkcKenB9aEd+
dWRpRWkmaSg0JGh7Tn1HRyt4LTFIZCMtVnE9NTR0WGE9KypSfmRZNlRTIUAlYEl0b3k9a094Z0NW
OCslCnpYc1lfTV52Y2d6Zj8lMiF4JU5QRSgjVkY0PiFJNzxaZUZxRVk3dyNyWWN1aW5JZzZfQEBZ
VEowRn19PDQpYzY3Qwp6cENXPkFudlYreVR2eHsrPihmbnQxQVhLfSlmTUk3YXIqaGFZcmYhITVz
UjtEcmRtUi1tKUdpUk54am5APERNZGUKelgxaE1XMj8tUTdZVmBCVTsqTzFmQXBSaWxoJEpuM0Bw
dWpUbFh2OHdCME9UI2tZN0Y8VExpeEJ3PTlrRiZofFB+CnpMaXhjcFc2ckRvb0YrcUZvaXpOKypL
MjQlUXM+RmNLeDk2QWlvMHxUeGlpJiY1ZWZXWjw3JEYoKnZXZUl5fStifAp6SXQkJXlLanFAPlRv
PiZYcnBZKiopbTZ7KGpRdlQ8RlhfMCR6LUBUVlQ0Z202c3Jfb30maXZ9alN+X1g+VVZkUUIKel9U
cWc8RmF5clMjUTM/eVlqSWJpWTQoKU1MdDlwXklaaDlLOFNsPX09S1ZtfndXa356Vjh8Y1dCWDw8
QUYwSV5YCnpZRjFKNyVEJFZGYWw4NyQ+RFopWnlkYnBuP1RTVTFaYlVjdjAkeSt2e1hJQmtiSFFG
Zjk+SzJ5Oz1eajl0MjQ1Kwp6P1BfS2NtYDxwd2tQUE5hN00mU2l2U2tmfT11dVNLZVo5JUVxd1Ne
VFRNWGYzSW5RVXZIVGFxSHNLLS09eHJOe08KenZffnRXI3t3aHg7VW50RC04cXlWI0N9KHMrUiQ4
fEh1ZElxb0l4PmpeLVJ8fVVYPGYhYCZrcFdLaWE9eG57QDR5CnpqSml0fFJvV1FsTTNqMi1yKXB9
T05GNzhYY0ZjSEJgPUtCQyoycTxyI2o5PDl1SDlJTURmTnBPVDJ3bEEzJnA8Kgp6QkN2QFoqTyhR
OFJTblA5dVFUUk0lfCFJcW5nKXY2QzZ6JTVUVjJ9QGY2TlFOPUY0JTNuVWheOGgrQDEhSzZqck4K
ekpBYj5iX2RFM0c7UVcjdk0mOy07N2V+cDtYVURIfEcoXmhRMnJKP3YxeX1CNnt5RzNFaWJPVHB3
XnVmdS18NFhECnojJVN6YCQ5QzdBSihwZ05qeTBlXllQPjkxPCNCM18ybH0lXk9fWHpPbHNZRFUk
PE5ZZ1psM3A3UWdSQlViP3xLawp6QmlNTEohUExxKkMmeTsoQDhFVmBHNWxGWS04TDJ2TT4helpF
S1U9JipYPGpacnh0SCZjcDNGNlY9UnZKVFVfVSEKektZdiZzKElsV1A0PkxAc28xISgoUGl3VV5N
cmtnU1MldFBAZld0T0ZfNCVSUGBLO1FCPTtFTm43WiV1RyEwcDQtCnokQEU7Kzhvd3BXZTZDcHom
Tk9USXpVfjFYUUBFQyY5RE19YCYkY1o3KVVQP1M7ZGZ6QEwrNUQpc24mWHllX2o2LQp6a0c8KkZx
b0tJM2NuMiswYHRIfmBBVitOWUl7RENIcU1Va1dENyR8N3E9e2dDS2JuMTZWT2Mjc3FPVThJRz8z
bzMKekU3UnMlY0JVfDkwelIyb2hPPj9wdCMre2NDTiFtZiNgentZX3omKkdyNmpsRkduZEQ1NDNS
YHV6MWxULSVPZX0mCno3RnxsTTxQcClQKkNCUzdpYFU8UU4xSTdhZnZybGd5SERtT3MyKlRxJUI1
PmIxKWdxRSVSYiVxYEd0YmMrUSt3IQp6bTl7TkN8SHJvak1JJGBvJmEwd2pnTSk9SEhNPTlKeUJY
R0g/I21+b24jZGp2X1BsMylKaEd5VVpGZ3x6UFJiYUoKejJEM3x6IWY7dWE0SzNzc2p6Jn0mV3Fx
TmcqQ0tMelZiISYlbS1OazNSd21RMighYWs3Tml4MFNCQX49LV43R0xaCnpsX0lmQ3J5O1Y+d3hJ
PUBOJCEqNmtiIyFDPEJwYFVjOD0pYntZLTFfMzxQcn5FZGdOPnp4QER4XnluI2FyTU45Sgp6VGc9
UGR1c0YqN080Qz1ye3UpTnZkTGZZPWI+QHFQIXNVeExCYiRaWVZRckA/VWYwdGB0fldvUSV2b35N
PXlzREoKeno3ajdMbmUhS2NaaWwyVGl7X3hEe3BQX2RLYVUlS1lnVSV3Sn49JHhaQyVmXmVYKHVV
ckhob3tVaDhyR2BzdSpxCnpJaER+VHk3bmZsZDluT0pVUj9XMz4qSXpLWW9iUW1QOCZJZEsmbXhn
bCt3ckBrbipOUj92cndMPXV3K2lZKSpubwp6XzNIYHZFdDs9cyNOM2srTHMtPW5YXyNpalY9VUU5
OGFaKSVUNiVaIUMrdXQ3ZDJRPj8/QlM0aGNHZFFNZXduTWUKemsla3FtXyVyPW0xTXdjRWFxPytw
eVpScUB6d3loRCVScyZmJE49VCFNYiEyZTBVN2FtQHNGKWEqWCZiV0VwJi1JCnpuME11dWV4aTEt
WGh6a1gjU0AkSGFPU1AyLT41fmc3NT9YYz4kalpWd2I7RkZiRDtORDQtMmZQYyN2PHNRckowQQp6
bzgpRnRjM1kjbXM/dmpBcTN4SHBCbGxiZl5lP2oxU0AhZDtOYTRqNyRXKlJKej5FKyVDcU9QTS1Q
Uzdjc2M1KWkKelphQk4lWTQ3NjA3aERnYG9RLUxDX0poMnMyKGp9VUhtNjxyPTJuT31QQ1BMRT54
cHljOCFIMzlMUz5NVloqMCY9CnpGWnRWVWxRJkR5Vzt2eXdgKXYhSFgpaGViYXxjSjVFYHVfMmV5
JHNRR159eldkMlo9KGJ4JmJpX08kej4/UHQ9fAp6JUVobDxjR25PSDxEa08lQUQzQ0xATjtlUm1I
Z1l9dj9iV0hKS1NPYDB1TWRGckNgNSM+OUxWfHlnJW97YyF8UjAKek1vaUBvdExlXjkpaSFSbVpI
RHlnYEVURCRwamVGUjFoVWlUMzE/N2YwU15vfkNuPEVva0xKKUIwOyFFYWJ9aDdLCno1dm9JOFBD
MGxUQ0ghJHw0NjhKPWdqYiZ+eGE4cm10S3lfMyE8MFVNSkVOZUpvPTxTfWVJQEM4XzdCPmAwcHVV
Zgp6YD5lZDxES3hAZVopP1UyTGYjVHAkQS1VO01HRFM1cm5sWXlaTl4tMkEoX047dzU2fHFyZUNn
OGF5dXVMPyNiUWkKelJWOERKJUJhaEYqNnRtYmw8aF5UIUpiVzwyLThKRnE0bW9QY0VuendaXkAq
UHZoM2Nsenh2dWU+KjhLUGpwRTdiCnpkRWFmZ3lYaX1fdVF5WTZNXnhyKEk8amliPiRoKyVXQlR9
PiU8d19uakMlfXVXajhrN3hlSXZ6RnArb0RxLVhndgp6SCV7Kypla096ZWcqQl5yQEJ+aGkheVkk
YDhLRm5LVF5IUVgmQXVSNUoxamM7Sm9kSSp6JCVrRmRzMHI4cnErYFEKem9EK2YtKVJzVVdUP0BI
QkNZVlFfaispNGs5MXhwMWolb0pIR29efEg2N0lCJGtMRGZrfEU9IUFpa0tIRlV7cEFPCnp6JERR
O2JpfStvJURVIWIlR0hEWCVBP0ZkNDl+cU5AYnc+SyEqdWJwKT9Abjc3TG9wJjxne0M5ZiUrQThG
ODhFTwp6c1JIWm1rTWdRYkRYMTVzbypgWEtuXyZmaURtbW81dHpZa2haWjBpbTw/b0VxKFd2JnMj
OVBXNSk2aHUrPzhxYXQKemZSQTFsYEclOURMUWtqQCt0dkk9NDVWQk9hQFpwQXc1Iz5EOHhSJl4t
S3pIdD1TOHYhcGBHa3lSMyQwWTQyVXBgCnpkaiMmSjRCM1BYI1koKiQkZnpQSzd5K0djPX53S194
MkNmNHljflhBZXo+ZWZ1Zj56WVd5IURSZ0tnUGxsdzY7Mgp6N0xpalgjcGUtU29KYlUld2NJT1BB
RGdOaXZiTWNjaighVSQ2UUhFZUFBSi1rS2tpWkJDOHRmPCQwTGJtOGVmQ2oKendydj41MDUzQn5Y
dFhPb2IqN2FNKCNXTFl2P0Z3QkMjNlVPPCNwaFhDJlY2bHE7KisyYWZJcGY9LVpYbzBAbn19CnpX
NkdTUDBCPiYofDc4TjcwYi1LeTxMQyVHMl5LazhJUnJNez89SCh7OHZpZntnYlNNbjAhcV4jNGEr
VVJrZnNvNgp6dWVUMUdIRChneFQmU3tSMik4XyRGTWQqP15MdHckJno7dSQ/UTk7TDg1bTNVaDNw
YFFxdntJZzt8ITwjcnBPYWMKej5yJXhOdHZQZldDUGwtSDhQcTY2I3FfQXptYVgqTyk+Kll1T1Qr
RDZVRG9KcElhOSghJl4yT215TGc7UnFpRDE1Cnp5JlZlN1JiWVVUQDI8KDJ2Y3tBSzY+WVYjNEt5
TmkyeGU5ci1xemhpQTNmb0tWV3hTZChZKjtaMnMlRlFWPjJoRwp6cUp2eFNBUE98LXt1MGJPY2tT
MXdqMDQmM2k7WTl8cSgtdSY4RzNuT0lHbD4kYGNPPE1NfFpMJnVTNkRWYU4kS3EKemBDUl47RkF8
ZTVfTj8rQGx7X0JgXjlUVEhQWmIoNTBfYzdYcShfK1Njd21KKmJyS0wqcUdDMDxOSFJEeXFvSChp
CnpBfSUmOHd8dHRDSX16Mkh0TlhMdkc/aSshOzg3dGFRI2coUTRMdGI2dkc7JFAhNzdLezI1P3lM
QVlrQXR5KUl8LQp6JEFUYm5YaVVWcWImK0RCY3dNeDNlTjQxdXk/OHg4SXhJUm1RWWFPUkM2Y0ko
PnFSbF5WPmUwSCEoV3pFRUR6bVcKekp2Q2gtenI2Nz48MT1+R2BnMT42ajYqeHpkQmtqNE8pfTkt
KG03TElTNjg+aGA8Yisqa2hJVGlIdmR0PT40JGpoCnpOPiF4JG9eX0FVc2AmQDdiM2R4IWxlPWMw
bVNIbkEtVHRRbiZBdWRhX0ZHa3JXO0pNJkEkZTBZMXE3ZUBXSjh9Twp6TWw5bDBQVTcweTAqWU05
KHwqMjh5WTBeMitufXd8WXhEUWNxM0lSMEw2ZHB5JTByaXtMJl9lUWhjJk1ab25FJmgKenhxKzFX
VmA9R1pzPD5UfUJgYzJQbEV1ZTZSbGQ+fTZaRUhoZit6VFVPND89eSskY3FvX1ZTdHt2bnk/UjJz
OFJFCnpzZ1J0fEY3c3ZaOUtja18+VnVkOCVrb2M7U01HNSFTMzVpWGVQLW84JVNWVnVyck5OfFQz
NVp8WVZFRC1QckNHZAp6Tip+PFM3NE1wVWB8PElFS1U7bnFrX1lGbEYtJnJOZyZ1KzI5Y09FUCtu
V3M/PTcoLWgyKX1nc0V7VDZecUlgWXEKenEtVnBBNE8ySVEoIStPaThmUzBMbWcte0k2Um4rd21M
SytZTVFOM3RnU0hjIXdqYWheS3dqKiZAamYwVWlIV2sjCnpVK0g3Snd1KkJJUDBvfTAjS2VIeVNL
JDJlKSQzJD4+SGZDQUNHMHRCPG58OHZANDZ5UXp7S2lJRXoweSo+ajdGfAp6Rj5LXktIX352NUJg
MytQLT9OdGdQRUs3IzljWCgpWkZPRkpse1FQYVdlTH0tQmBHYCFlZTFIbFFDQyoxKVQmMm4KeipD
cWVEXiNJV2AqNWt9ZzN0RXkzbF80KUZKN1Nuc1JUdGNueWh1d0dAIUlQT0ktajRyX3ZeODdiXiQ2
Nl9yUERjCnpgQClhdzwzbkEoVXVzNlVuMjlnd2trZCRje0d4QnRQUn5+cjR+e0VHamBLTytsXjE3
amJIQ1ZUd2lyPGB0QHpsQAp6ckdlUEZKaDh9YW9gMVoyRHY7JE1VKFFDOFFeYyQwbj5IcCNVU3Yx
UTlKO1QlLWtRRERXOV5DJEA0KVV8UX1vVTEKel5uRDJTRlRYUFdkfWFKODM3cVFIY0NwVXAxRDBa
MSN2LUBGcFE+MFozVmtQNCZlWnZpdyRtJVBOQnVKbU8payQqCnoqMys4U0s2Vj5td18ldHEpOGQh
a05ncSkrVU5xOVY1bnI4bVE0anI1ajswLTNlPW5DbGRRRXp0en5YT3BUdH1VOQp6VmlBdF9ibV57
R183bWVKay1VamtGeyRCTnQ0alN7V3pfUHJuSHh0QkBsZmx4ckBmcWFUXiF6e0plQClKdj13SnoK
enxNcm9+PXwrQ2hDI3FWOSlBOTtpa05xQ1B5VXJgWnd3QT4lcWNSVSFKMmJSdEd8Qy1ubyFrMT4/
PlVIV3t5Z2MqCno/KDwpbCtVfFE2XnUqI3koVTtmUmtfSTwqQjtHNFYqa2dQNSE0cEhvQj53eXd2
dV9lRStgTF9ffEsmSHYtcn1+IQp6em48aihJKGpQXllEZDJ5YmtRKUxgVTNndDg9WWFvKDdMe0h2
JnVreDwlcj5uI21iTWIkVWk+RiFWVEYobmlqV0kKemVIMF8hKGJQak0pPCt1TTgqVk1kY0VefW0r
Zl47P15LR0JiODd5ZDhkcSRkaEpOSXB9LTVEejF1WW1XV1U5VSojCnpeZDBFLUIhO0ZFdFBiTyhx
eVlvSjg+P3Y3TV9RNChsfHhraDxgPTBQKjkxSmIpQjFKVXd8RyYrdTY/X15ZSlFiRgp6JDMqUDxg
dHkqUVUoSGV1bFZoVjU/I2w9cXQrWSorSU9ZP15BZDkraE52Q3F1JCpVVDtxSn03KWRFZGAmNTEh
S08KeiVBZllqZjRTQSRTTEIyPylBejtQeT5xVnArZntBK2V8IzB2YT54OVQ7YndDOER7KWducG1Y
V0RKOGRoTG5EazhiCnpXMXI/QDIpQ3RXSnFFZlcoJXNHTVZOKURDYG96a3NkJl8/QlJFfHp1WUB6
bCk2S0NWMlBEYHFDbk87RU41JVRIVQp6djl4aGlTamJtaiZtdnooZjlhPGBjPlZhdFomfk8yRlkj
VzxGNjZoa0I+SFl5PGlOe0N5VDkjeXRCYGV+cVQ1PHMKelRmRGVESHNQeTBCRmN8RVd0ayE+QjI7
LXZGWDglPE9Ua1FmWFM9NFNTM0Q/bkdSMjlhYzNycXhJaz89JHw2PEVSCnpVYXtXI0dvcFZxPDhF
TU5PT1pHVkA2YSR+K25IbXlzMylXMD9jVEtBeGh+UiFAI0lwNERUZ3VHcX1XOEJTYVR7dAp6bWNZ
bXp2fjghMUMjTWMjNFNNKj9zPHpFJHBBXzVwPUtaZ3QmTk04a0d+b05eQVBeIU5BUHswVWgpY01K
cmV3QVoKekQ0MSkzMHdJPG1FLTdrUlc2TS1DRlhEIVhyRG1wV2dTZG4hZyhnJiU0WCZBT3hNcGNp
K2NafHpZfVBjKighKUkwCnpiNnhNWmArVlU4b084SkV8Tlp+ez9rZW5le09xVU1EeUkhZyowNDRr
SjVqbiQ3XlpWYlhWbGU2WV4xS1F3Vn1iSgp6SGY+VDJ3V0BEJlRNezN7Wnt3ZEduSWBPNm9wYjVK
aChUXntkI2lUKlN9UzZxeG82SHEkTlclV0swQ1dLPF4wJiMKejE0diV0ZiQoaGZBRXVwP0x3MnIq
LTVrbSo4aWY1QmNqTWJCNXYzOTVZbmU+K3NeKyQ7KDdjIW41bSgzV2NfI31MCno+JWFOKjtgUDB7
K0ZxYCZaKj1ReFp6al8xJX52YXkpa0sjaypOd0k5c2w3PzkrNUYkb3hNUzZwVXUkTzF4d28jeAp6
NjNjcUAoQEkranY4NW9oT1I7YUJ3PnxfbENjck8hXlpVOHY2TFJkQHtDaTx7MkdVcXs/VFA3eDFt
UlN6I158djQKel9vRTxgcEd7M0BgNDcwSFRNdEswWkZ9d2U/YmUqMyRxXkN4aHY7MGQpeT1gNmJ0
bDxQOHo5TV9IeFNDcE0wZWUlCnpgPFE3RmV5XjRMPCohPUY5PWN1Sit3aHZIUmAlKT5PQnxOTnQ4
fEtlekFzfEZjMUEyKyohK0dzcWpKWmBuJX5+Pgp6S0V0N1ptVFlsKEkoS1ZTKzZrdVo/d0VjZzxv
ZypPYl8qfGdkVElvQFMmY3w/X2p6PjFDRXVjdSVgczxSa0NEUDIKek1DWGImPkFCJmhVWGVlJVJ0
dyRUcnI0IU1RNj08RFNqPnczaC1kVmR5eXUlNkplSUNnVWtxcnpJKExwVVFqS3lRCnptdiplLXYq
TztBTksleFdwbHs2UUl3MXQxXlBpN3JTOVcyfkdpX3Mzdn13QWJ6a1YkVypSO3tAb1lVITc4P0dg
ZAp6dHEqJnVjMlNwdVVpPVd+RSk3dW1YMClEVzFPQDF3PGIwIXEpZm5CPV5tVF5AKTBTTkImPWxY
K0kzfEkhOWFGLWwKemt9R28wMyVrZX5NQjUyKCU5Un5XdWFHYXwtYGc7RktoPHkzZUc0Y1NqKlFQ
N18zKHstN2RDOHxQSXtYPUxHJCZeCnpIU0tFTG0leX57QVd5JmgyM2d1PnQ5PC1kI0o/Tkktc3U/
P3tZMllhSXpMaGFpTDRqa1JBOEZxen5jcSZ7X25Gdwp6KHlnUG4peyEpMXk+SlZrPU5qZWskVj5j
R1JmKWtoTjxeJVF4Z2M3e2JwOEo3WipEZSE/QChPZVF2OGF4Y08rKGcKekNxdDAqdn52cHdSKWRy
YFJvQGN5bnFnXlN4NChDYSZxKGVNX3c0JW52fV5pSCg+N2hmck9ncXd5I2pmMEMxT2V8CnomeCt5
M3BrUjNaJTEwNHVAOD8/WUxRVHR9WDghIzkxfC1gUk8mcTs+LVhAe1pORDtRPDJjS2Y2R252ayl7
SUslSQp6JmZxbnhCRnxjJEhSVGtSK3RuPVBte0w1WEZiPFErOVFtbkpNe3VzdFAmTGY5IURfPkVU
RH5pYyopLShQS09NbkQKekwkUXZiYDloaHlEPzUxKyl6TG5IXkBTeyRwNCZHRyR9ZUgrXzZhP1Zx
QjlsZF9Jfk0tSCNJdTJCKlMpWlhKNGVBCno4WmpaK3l9UUZJRVE7a1AyYF9VJHpWcEB5akxKdlh1
Qz90c2VFTl5hYD5KanFhUk1mJWFFIUVAaHlGYzYrNzBHSgp6OUpvSFNgb3pXR3lZOXsoZUs1Vitj
eVhfbl5WbnxOblgjOz40cT90KUp3Pl5oLSMpNSZiU1J0R01jfkF3TWNnI0YKenlubT83U3Z4e0tJ
UHlCN0lPRFZeXzVhRTQhMlNMSHBzdEAxcTZMUDdES0spTCNwWD1saE5XZWV4d0pkS2MjVkhgCnph
KEhDYnVWNEsrbH5mY3hyZHYqUTNaNWN6QC1fWTVCekJIanNTdm1gK0RLKDE2WVFOQHBVT0FOISY8
e08lJXE7dAp6a3NDIXhqemM0QTgzSWcmeTg5PkJNfE1SVVp9LWZnJEZfVjdAbWZyTDdmZGh1JjJp
KUE/JT5ZWV9QeUBJbHxwVkMKem9OcV59aH5RUmEyOEg2bCNtK0V4QSFSQiRmNUMmM3pDQn5Ee1km
aHZPeEk+YWZLMmpfZHwhQ1Y4QEhXPFZzRSE/CnpeYUM0YnhOUSRiSkQrcVd7YD5JNExBKzxfaCpA
OU9qeF5iPnRnSDt+Z21Ed0luNTg7QUZKQ21lOWtAMChiS3d4VAp6b1BFNklNQSFwZF9PK0pkPTBA
KG1PMl5XbmZqQ2tvdDZsZjByUzdKeEVDKUQzdz55VkFqczE/YkA1WikmYXxyOEUKempvMj5eP00o
bUpwMlFOIU9ePCtoZHJTPVpjeTJFbzdKelpLOX5UO0w7M3A9YXI2VHxMSENSJm9QczglRHJ0cj91
Cnp3a20+TVdHZmVNNnlWP1IxMHA2KilBSCUlRUI0b28jMihxVF5VezF1WHslMjFFWk52O21mRUpV
bHVZKTdSQGctJAp6d1Y2YSoxTio/cChIRzJ3RkQjY0kyeWtpY3BMOVpEX2pLdmhHamBofVFgQXFD
KHg7QCpVQVFsZ3tRKjReWHQhZU0Kejw8Un14IyFjK21tNng3OG9TeXdDPDxFRnN4RSRRe0JRO2h6
WH1DbWUoUTVCe3dpSX1eQEU+KHdwcFFeZCoqeDctCnpeREFTWXlISVk2fEl5aVEkQStTLXklRyNO
aFRXQUpIMDllQCZiJiZGVWtZcmE5OVVuLTQ9K0UtVzNRQE9jZGwzMAp6ZCtXXiQ/SjlGZEtaRTM1
Q0hBbnp5T0pyakBEaDh0NTxpdDBneVM0KUtKJlU/NjVWPyRZKm5zYlojMjZBSWg1P08KenVCK0ZT
ZC1MWlh6ZlFuOFQ/YSZ5SyN7LVFqLWI4fCQ2cjFUJTFge0whSS1gKmN7OzA0QEQ3WT4hclE4Rloy
fXl4CnpPe2VSaSMmZERwSHZ3X1FTPkc2XypAM218K00/VSthJCQ5MzJPJHpBKHtjQVhiJW99Pz90
R0NBYDczIXtlJn5UNAp6NWpLYU9pWks3PypCO2pNLTFvRiFKQVN8MnN+bG0lWlUhYjRFNDlqXzlZ
TGAlMyY/VjlzOEx8Kys8ZlpPQSlMLUYKenA3R3xsI2c/P3pqb1ZfRVp3KTc9bDZQKDkyRW1OK0tn
YFpILUI/PVZYKlhCVXhucCE7YF9AeXc5fDctdyR9eyU4CnpaQClgellVZ2BJeCg8cmIwWWlPYkw3
ZXtYaihGKS1XJHtXeUQkZV5LT0h4RihRSkI4TC1AQ01BSV9ed3V3N3VrNAp6ZDAyYG4xOVNTd2Yl
RFNoZDAtblVXKjcxKmJ+NVpfbWhUTyg3dHkjOSpINGZNWj5YVUpRdW8hdHM5R2YjWldxcTsKeiVN
RjlSNXh5fXVhdlV+MjdDRmFZV35YQkFZRE5pSj4/YHBndmNgcTNDVEJGKT5LfGFDMS1QdFM0XiZ8
PTVKYjRXCnpWdD0jdUhAb1h6bEZITjlUO28wTHpOOUFvMHFMNDkzRlpOQShTSlRXNSotbFJDY0hU
aT8rNDR5I1BEPUY5fjVGRwp6SFNtdysraXlRVG03YUxzP1ctenAzTy0lcjhfXnlCcWlWWihWMHFA
PyVOTCt6NnRiUnZAakE4al8+TVpOJkRVd2sKelUrYiNfem08UXtGdDw9aj5WUmJEUz82U1BhIUo7
OW5qZjM1KChyMi16biR0O1BrZ2VRZWUqfSpfUlBjMk97bCYzCnpsT0skaCFuam92QXI/MSVMJSY1
YTR7TDA7OWhlN3NncVltYGNURzVRaSUoaGUwaHpZKD4hQlkpb2hDX0xMRClXRgp6Vlh6PzNUTyhg
PzJwIX57TSlkUFdhUVRrS3hyWU53cm4pMT54a1JyKiYoI0A2SFp8KSt5VVUkVTs9eyQ4OXYmRlcK
elpfNUlXa1dqXn0/MSY2cXlMSVped25PKHZaaUt6YWB3YXtlQ01PPkw+ZVU5SHppeG0pZGA4Q1l3
U2xxJkZLR1JMCno4QkRyeXtGa3ErMW8+Km1iLXxibHZRSnFgJEQ/JVRhLXd8MDJaQio/d3hfMmNZ
byRwbHVSODl3eDleO0wjZUd9agp6JHtrX0tYeUZuO3VyTnFWZDRmalJxYGB2NXlzMzA9Rzk+YnBQ
bUtXQSplP05sNzU5P2UmSUh1WW5mTXJNUm9TSEIKel45SCh2MDBeO3hncEc5XkRoakU2ciFAMHY0
WDJyIXB0PWxMNUsydHxETlc0fEFnMEY7OFlUJVNhI2g3IyZKc20wCnpLbHUxXnhIXjl5UEdqMU1y
WTdTTnNrUENQJn0oXyE/T2A1Z0NaVFB1dyphP2dXdChVaWQze00/dGFzNGs1bmc1Rgp6IXFyISVp
X1FeN1B4eT1RcFIrRWduKTROQT0lRzZANnx6MUdSJDB+eiY+JTl8ZkZ0QTVHTjg3UyooK3dAb0ty
Z3AKenNuLWQ8WU5mRjljbGsrPGtYbChgV29pcmtAeEJUai1jQm5EZkdud29MRns1UD88bCF3cGFM
UDIyTWBFQW85Knc8CnpEO2Y5OFJLU3ZOK3daIzdWQ1JzYnZOUWw0TTZ2PENeK01mc1FBSThlOXZ1
SDVlN2JFX2FsO0xfV3w0bD9xdk5LVgp6JUIwPCY4ZUdKMj1NRkBeSUomJiRCVkVGcSV5NE9HeXZ5
fW9nTGhucUo8d00wTE1rLXVPU1JwanlMV0orPXV9b3oKelR3QF41bSMlM149QDc9Xj9VPH1sQDYy
ezg4S0ZVdkx3eWxDPkZJVjZhKkRQVyZxekU/LVU4Si1wbUFuOyloZyR7CnpVKUNPMDRoQE5UQVVC
R0F6RDVjNDh+fHpfPmRvRmN2eXJQQ05hS2FmQEtETW81eig5dCprJU1WRTdJYWFEcUZudwp6R0wm
SzdYa1NVOXEzZThCUF5Fa1MwT3tfKStgV352NntxJmNCXj85ZDkmYTBodWAhXigpNEMxcW5ySDNH
O35ZSWMKektpcWApcVdMRjZ5U3lqQUwtcUZtc3VxMyFvMEklK1BfbzIyOUZFRjV6cFVvLSFPeFA8
OEsyV1c9VVR+O1okRUZkCnp2THVTbkVnZWhOeyF5fGxxe2U1a3BCNyNoPitBO2JTYjFHV0JzMH5I
IURIUnhjTDJBQmZkSFp6Uz9oNjU8I2AxTQp6PXA5JlE5VVIoKXBzNHdAemFlT1ZabHlma3JzO1VM
ZG4yRkNNRWNSXm1sWU4tLVNwKWFTVUBIZCRYOXxCTlpGfFQKejNKWDN3MDctS1QpUSo+bEZAVktS
N1M+NT87K04kVVRgTWFmUzdjVnVtdWF6KkQkYVQmdStpKHF1TVR+eDtofnBYCnpBVjAzTFVWIzV5
eXgxWmlVaEZ4cG8keVI3dHVkU0s+I2M9VGFfdlohPExgbjV7R1o2IVhScFhaY2goUFg9aXVFNAp6
Z3wxM3wwTUt0UlBLJGlebXJUI2RDI1JCZ3RhVzBmUWg/S3xyTT9JdTtOdmFBYUctaWBCNmtvemFQ
b1AkYkdkKk8KejNfPGpiajRnVjd4YmEjUyhKTCZKPDBsJThmQDFWYShaV1RvTkRzbjY4Y3I7OFNZ
UzJvaH45VlE9PVVFR1kqV0F4CnpyKWFaWkQodE5SUWFxOzF0YEtnWVUre1Z6Y2ZofGkoJXBfMnhx
ZzRnaUA/U0srcUV5ZWFVUkBHemwrKns2N1hnbQp6Tnd0aEcjdHklek99YUJea3B4PVlYPEw3SzE3
OHVqcjxZP2JjSmJSSk5KVG59dzdyLVRWUUctQDRfNmhySypWN1QKelZqOzlAeG1QKztXPF9VQjNJ
emMqOX1oQjA3MXM1KyoqX2RRSXUodGJrfmxYR01wJWQtaFhIbEtWMTJSR204K19BCnopYjVGYil3
YklQTGY8OEBwYStBYURoclMxSz4rSnNLTUQhNFJfZyg+Sm5wfXEtayZ5RU1UVjEkdzt+c2YlWk5T
cQp6emZpYVo5Z2d9PSNvQlNXVkR5PzMwWF9RViZja04rITEoeTZGTWFMIXJ+Uyo8SFdgU2tGQk0p
JVYhejI5Z1pJO04KelB+fVJ4YURaY01yVExJeipSNU5aYm95WSZSJWdlPD1tYU0zNFN9Nm5ENFdO
bSFrN1VISz9mVnROR2t0djx0X3JzCnorTlBsKkM8UnQzbjVwSylMPD57NntHQHlgI3IlQy1re1h+
YFFGYE5uZVlSfGc0PT9WMD1MKHdAR0JTWG8zeFpfLQp6ZU43NGNUejxeX0pwMSR6Si1hK2V7MHJ5
UlNEN2dgTDBKRXs0SGhiJFNkSmAkTGlgdXhvMGxLN1lwN0E4ZW0/VTQKellOIT4/XiNeNWVfbG54
OUAjfnJyISFlPDdGSH4hQWszeiNOKHpPNndlenAtSnp6PlFHQVR0UGc8aHRjK3ZZaHxFCno5JHA8
aGUpUnp6eTlIVk4qb216Tmx2PXZIWFk1aGBfXiM9ZERefmdXRXN5IzcmdXgxUigkYnZJYXI7VyRB
SkNmfQp6OFdFNlI/JTIlJlNleFRgZlNRPFR5e3tpOHEhbTRyWl9JWGFUSyo8JiVMIVkjLUtSYG1W
Q2Q5VmpqRUZFPVhMTCkKejljXiYoKXlaZXV5UVFeVDAkI2VsZH01Wnw4RitSOUE/NVFYbG1TUGw+
bH4mTXZ1THAxbiRSfF92Tj1VNT8ycnpeCnpKMW5qUVJWSXQkQ2tNUUFhNVJVe09mdzJ8NyY3PHpM
KzQrWkk1dTF+ISNwTX1XSlZ3IW1ZNT9gZX59bnIpfkU2Owp6Z2liV21CZDElSVZJb0l3TVc/ekVf
SkxmQ2s7eDs0R2FeVDhldjJwdUtIZWxaKHMtRytpfl5TO2Fucismc3cqPXwKeihoQiE1PSNWenR1
QWt4bFY3bGZ4bUl4VUNSMHAwZik5e1FgeX0xRih1KSYzVWlrJCgmYkJrJEB0eDN1RSk1PUxUCnpj
c3RESGoyWTdDWW80Q1QjIU1PYEZpOTkta2x3V1YpMHlGcCFvfT5nOERyTDhxdTE3UlgxcXVZdzFM
Z1FWNWUoYwp6UFRqZ2t7ajBVYEZ9VHtDPT0kajRfZjdZJF99RyVGI3FALThKQ2F6TG1jbGlgayhC
XlN5YmBCJnV+PU9TJlFAQ1AKeiMmQUxyeWYtLUx7UFcodSpWKlNOIUg1Zl5jPGFUWD5zIWtAbFVx
ZkVyZDFIWXtWMVZ7YXhiJHE2eS1IQWR4b31kCnpQdVFLPEl8R25zeUxpUE9Ae216Y1k4Vld0NGEx
clNidE5nfCkxNjBxdTZxMWN4LXhyJiM7aClDSzRQaClCNl52Ygp6VlgmYm09JXxBTXU3cnxQYlNJ
JE5aRGk8VTdhWlI8NEpkbVZPZks1fDM0VV50VzY8ZUhfK1RgQHM0bkt3V0FXcnMKemswbTdRP1c1
R2Z5QThrNzh6V3NSQWNLTClqMy1ZWEpxVzxDSjtWJUIzUCs1JW93WldVMHJzK2hXc3s5aUFqfkJk
CnpiQ3deUTA5NXIjSW4yOXRkOSZhcFhucDFQbzRjcUlXPiR2fCZ9SFZodi1yVkNOSit7ZDw/PjVI
TnlePFlENlg3Qgp6T3lebFI1SighLWwjZXdkM3FyY3JkUlk4QmcpbTZrdTw9WUY5XzljJitKfXhe
WUc/UHktJmFsREJVTUA1UGUxO2QKelh9UmRCLSNEOC0mMnFvSWFwfjQ2bmBZPH1hSk58QDFGZWxM
d1JFK1c2ZCFoTEVnWjh+UFc7TCErdW1OV3A/V1IjCnp1eyFkXmxJUjc9NF5ney07fTYmVTQzc3RJ
OW9vckMoJng0KzUoZVRzPldCZjNoeGFVN0tuPHE0OWk8QnYwP0p9cAp6SmpkKFZKMWYydCp7P2dp
dTN2KDI9Q3xxVmw3bDNacF9xNnNQWWpEbTBTTGtYZCg8MVA0NTwpVEA0I0JmTD8kMlkKem0/RW9A
PD0zeDh6XlowWEEtJkNOJV5MNElUUjdHPzZII20pTW5+X20kZk5fLWBmSDtVc3Q0SUlqNTxPWkMx
d2lnCnopdCZ9ez96T0UxISVxO3g3Pkl7LWJmVX15eyZrdCZRVWF3TkZSfD51JTJRUEIldm5OPWsh
MyNnU14jZHZham5IIQp6RE1OLU5MeTsoNHBzUnhDPWotTU4zK3pScjtTVEwwVlgmfEw/TlJSJUNF
fCg/dV5pU2VKVEM0YThXP1pXOUFadCEKekYlQWZgKm9MUyNGSWZgeTdTTnBCXytDUmFEK3E9IUxo
TXhWaXNNSzZaMWV5NStpenk1bzglTiY9V31tMGlePF5WCnpLN3M/KihscHRzTVB6YHpLJkN4WEhY
VEYtez1NU1hSTiMtKmN9ZT4qWXUrS0FyYnRWcWBDVShjQHY2YyVYbG9EKgp6V1VIPzw4TitwRUF1
MTd5RlgqTEhJJSZlRVM4MW5QcndlNH51aVZzRG5+V2hGbUJlZ3I8SjJLdmRUT0tiblJ+RGYKekJK
ekEjYU51USFPI2xsNlNyfCtxaXF9PWdkR0U+K3RGZSZrKUlXeCRjcV9KTFpTbkRidnBBRGYzXkdN
aytva282CnokQXhoTUw0Z1kzV2w0QnM0WHI3U3JyR1lnTDhHTXJrVmR8KmtaYCtHSTF0PD8qQG4w
QT1+QG12MjVhSXMtcy12Ngp6NmNMRTxwcGZhLXhecVpiIU5QZm9aQztKK0hjJmFOSj5GU0QjJG9+
WjM1bk4waW55YnReeDVeMEAke0c8ZXRDQXsKejszPVBIRkRTbDlXfFl0P3c8XkIkMzY4emtEUTE5
NzBNVUdPIVFUZnxBWlRjITM8NmtFRiZyRlZEZlItazFMUStjCnoyODNYUHpRQXQwUz9RJElOTCgx
fkh1Pn4/N3RBMkE3RFVhRlVYb0Y3Ri1LMzkzN3xIKnUoQEREXio9dSVleko+WAp6ZllkV2c4WjlS
VHVxcjh0RUVVTSQ+RzEkUkRJP2Z3MllKPGF0RlVzZFRwcWl7NWI7akRTNTRWOCM7Z0JnJXRybkYK
eitGd3ROejNNK2tKQ1Y/N3YqOD0+VSgqWWAtWU0yPjgjam84TShHKUQoaGI0LW9wWlc0cztPKTMl
cWRad2xWTGIpCnpDU3VvZHExZmlATkxSVTVHIWZzZnpBIVo4NShSYWdVJVU2ajIrPVhMaH1Qdlgp
Z1dkQ3pgNDZmKGZWJCQhQWc3NQp6T3VXPXJ7T2psMzY9YmtESn1xaGhmWThLXlZpKGVfXzt2fFJH
VE4lPHJ7UTc+KCZ5UXhMYk98XjkhVzluc2o+JEgKenR0UUQ2Mk9xe3c2VVFYIVJhdWVRX0teVSN3
TzN2TiVXXjlGcGJ7OGg1dXx3ZHUrUzg5YmlWMjgqI2tlM0wwTnY8Cnoodm5ZdWxyK0QxVER2e09T
YkF3aWw5RWJKVlgrJTJxTTBCaCslUl9MWjtvKTslQjg8UXpxekV4X1p8REZZczFoNwp6ZjElN1FH
SVojV2JtMitgPXRyZH1CQDZfR1g4ay1rIyUhSlpgNEpoSFZUSCtUNCNYSmZkSmVITE8qWUcqYTdI
ZkAKelBDJn41dCsocDswc3RfTlNmejRTRGBsb1ZLLVIjM3FLLT5DMEo4QyslfGBHIWU3WDRTMHs5
KXtzQkBtfGVQXyh4CnpkdU8xbGxISVd2SCk7ZkxeVTV9eTlidX08PlJybU5ee2c9bklSVTdFU2la
QkpyIzs9Q3pRMGFjU0dMYkxodHtxTwp6PUM/b1dRI05RYXtnaEp6MHwwamZ4QGF8O2M/JCg5Wll1
WVczU3d6KG1yRHtBX1IoUCpKUmtebHVReDQ5LUpGWU4KenlIVWlmc0VXISs3PHx5ZEg1YSZSRHFH
ZSVZJlpyc3ZxbE8pKU1nJTxrPV5Od2FXPW4hSEByVHc+SkBIcE4hYXdTCnphPlB8ZTlKZmRZdUtr
VThJMHJxUm1xNmAyaVRKTTs+cUQwPFNzI2dZJFBJQGE4Ry01UnhPIW5jNmdYLVJfbm1QaAp6TD40
Zi1iPFB9VSFQcFpeezYjQ3AxMSZPUHVEfWs/XzxDbkF0X0l7czs2ZWFjUVZzZTYzZllkWnI2OXhJ
JCp3JmQKeldibkRuJkZmVXtvOWItWT56TnhKKktHODd1dyElV3BYTk8hQTRWZDd4ZGVAVXpydDNR
cGs4N29LdFZTVzlzdTQ8CnpTIWE5bSYoakt7WkNaWW9KJEhIS3d5IVlLIyQrOEBKOWxFPU43dDVw
ZDBscSF5VUQoYHVPQ0V0N2lfO3liWD5pTQp6QC04WV5aIWJsRHB3azhBaXNgbWk2UF5CbmtZbGdF
KnNzSCpWJXBNOVB0cDckU1FFN0xwaDgmMkY3RlYoYUImMDgKek1YfUdpNWpwX3VBOSY0aXloWUMy
bW5zLVE2OE5sQExiJEEjS0BAKGRxdjF5Jj9hSEE+RmBwTn1jencqVmFrMyNICnpmbExpVWomNlhh
c1krIVh6Q2V5RGFMfThmK08mSHhpYHx8JENnYk1JeUBJdyUqMlU3aTMqeDImRTNJfVFaNHRwUQp6
Nl5uTXcoIXk1RD84RFNYKXJSUCooez1gcXMpdiVNOG9aIUgrWUNlJkxWbVFASUNPdCgqPDhzKUpy
QHJPdVQ8VkgKek5HczR4NShpRGc1U2U0VWFNKnN0NC0xJmdYbUU2T1IwUDlFUFN5bXBvV0x4KHdv
Z2pMc0tfRH12RTU1NCZYUENDCnpnRUBHRXdAZlg9KzUrS0woOGMzVik4MmBSKS1Ndkhefmc8TFJL
YiFaWit9Sj5zezRXZmJpNEtWMSh9Pkk0YHpicwp6ais3aTdhQVE4elEkRDx4SGhTdWt8RUliI2Ff
OTE+QFJ6QUs7P1gmTzYzLUVLZTQlZ3NkYUYzSnslQ3lKMzBjVUEKekU2eWVWWkRGRWY9eTNfTCZO
KUZqVH1MWnxfdCUkWS1PY2MhT1g2WkR0UHtia2x0JE91N041cD5vUEp0SW1QZjBGCnoqUmlZWWVv
T29MK2h6fUVLRU1UMGdlRzVQRHtIVCFEaGxBRiE7bGxRRHxXTUNWdVRYdDNyaCNkVH1yS3ozNWZz
aAp6eHI7ND0hZV8rRVRMKyFnSGk7PWpDcEVPZVp3WlQ+Q1pXTjBJWDJsdnMlJEZUQVlGQWJEOHhY
RUw/V0AmbkwkNVUKekpyRXZoJmM5fUI+KX5sNzNBbzREWmRZQlpPKz4yYW9wKDJLTDMmJEYkPXRE
MztvMXdrY2F5IT4tMyR1Ql9DZXIoCnphTVM/bTk7YWloNWVZT2xtfTZhUiFiKU5wWWFRfFJiLWZ4
QWJlcHdCJlAhJEhsYn5MfmF3fGohY1NhKjkjVSZ6Zgp6a2Y0TDg3b2VaKC1+clNjOz1DPT1zYDgx
aF9eKUl4JktIPmwhMnokdEo8UHVJOXRNfmgyIVIzdzJIQSNmNnxvflMKejByNG1USz1hS2ZBOzUk
I1BOQkJHKl5sMlh3NWNOJk10Kmw7I1ZwYGlAPkhga0A5cll3LVFELXV7NCp1cF5mJU9ICnopNHpX
Y09PUG45Wko1I3R2MnBxdz1kTDtGSDFDNkhpbHR3JlpYR1BhX2lsU3QjO0Vqel9eaHchP2lsNHtD
eWpmUAp6bU5VNU1uWihOUmZ0VzdiWDspVj5YKkBMTzM9SVIocDVsJkwybi1EVFI9THRBOy1vcD0q
MUx6ZTlHUyo/U29HVioKei0oNnx3Vlg+ZDBQbjUmUFZeV1YwYjVCdnk8eiNoOTtgKD8rO1hwVnd4
K0BuMl5Ea2tmVXxHdE93TGFIMyowdzMyCnp0Ozw3SnxEYUc1b3Zeb2F3YFUkUSg5I2QycGFhcUgq
Uy1ERnc5S0ZLPTReTHo2NmlsRkpsa1pOdE4ta257ZC1zRAp6I2JUNSEzfCZ6YHdsMTxIOVktdGNK
eXxlRjdfITlUPHo1PEMhaVM0N3RqaSVKbkhDTmo8QzZlQWVCaGJSMG17emQKenV6SGNtOCgjKm9x
JllyXyZfUm1RRksmUHtHPyRGI2o/YS1PcmB9QjRZTHBIamdEXj90Qn1DI1VOUHpTPjB4Pm5QCnpt
JX5Ja2JKTlYtYSNeY0otVH12ZV9LXntOZmQmWUpaNUQkLTVMcEkxYVc0U3VOQTJ4eHRQVTJkbHU9
YEtHcGRIPAp6ZkZkX1pMeCVpY18yYyNiUGM7N1hpazNLKiNwQTNaakYhKk1wSEZ9OHtIKiRYXjdI
WX03ZTFkbkgtRyRJQTxhZjMKemNZaXI+Y0cxRCRNZzxPUnVCPkUqKmIpQWA2Wigoa20oZlQwPiZw
SUVKMjB8e0o1WmswYVdqYkQ5eHghMGchSkM0Cno3RWZvJk40c3BOTFk4d25qYHtTQ08zUHQ4dWVN
YS08MGtGd2kjeTVGUHRCcGNqJEt8SGlDbkQlZ2FjfmpgKH1sMQp6RFVfd01rN3AyKisqRCsqS2tV
YnEwJFhfaTFzQXdxSlJ+MTUhT1JoPyFleG5RVHdFaGI4cTZ6b3ImQDdtOEswZDkKekJFeyZ6YTtJ
YTJPPCRreng/MFBZJjJgU088QW82WiFPVyQrcHA9IUhaOFA+NF5AK3g5c0NtYlZicEB8JV9uYEFl
CnpTc3ttPXA2cyo1YCotY2p5aiZpPFhOZDAjKUQxeDVkeDhLaEZhVzhqOyp0S3w2elhFKlowQGBA
c200UW9RQVJNZgp6JDJ3P1cpX3pyX3ZzcmxURSNPUEhDUz97UjE1SStuV2UxUW9nTEcxeFNnU0xL
RSNAWDFhQ1dJfURMQEY5dSp9YEUKenxGbEkwMjtkN2BBcGpPeHVNclpfJlY/NEAmMiRWOTNDQ21Q
ank3bigwNisqcEJAcFMzTGl0KyV4TTJWfE4oMm8yCnpVU0xgVDxEZSh6dGVMe3hXdCtiNlRpYDZR
dTsmWGdIWDFAN144V3o8NU03dEFaKk1leTtzayM7R0o1WGtLan4qXwp6PD1INz5FKGxiMjclI2FD
SDZ3ITleMFM1M1dsfGJXRUd+SCtiYHNnd1I4ezJhSGU4JDFzTFB0PDZ9YzhSeDlqemQKenlVdEkk
QzwpU2xONn1vQypwZmwoNmA8cHF4Q1gyPGBVeGkpNW1ydF57V3dgKTc1NkJnV0xOZTxaaHpGa1pF
cXhPCnpjOVdgfllNQFdLbz1EVVI/MDh0KXt2Rmhzc3w3WFppZFVGVDUhS2ZaNG1MI0NiPmFQPWh6
RERtNFVyU3JraWh0Xwp6dU40R0RAJGxlO0J9K1daOVNOZmp4emNTc1JeeXo4UVJrWWFRWll+aGVO
P1YoMj1kIyhkYmFhUyQyVkk7cFp4WmIKekt3NykpJSUpSEtlQnY8d1pqO1JYV2BLcFNnSEJaRUdR
Y1BGTC1Gdjc/eWhAXlRAaFNZYTQ/VD94Qkx9YFdEVk13CnpyNytsQ2dzclh+JUlIWHAxbm5HWV5P
IzY8WTdlMEdzPklPbmYybk5DYlFpV2xxaiohPEk/OGw5WjR7UmU1KkhCPQp6aThFOENRaU1yJkNv
eGxjJG5zJVA0c1BfTXhHPm8pVFR6N04xOT5vajNjMyVINl9pM1hQLVJtSWZzSnoyT0ctIS0KejhB
SnVuNFheZilPQzZBbT1sNXxvdVZ3UHlrK2E5NDxVI3RuR2ltUjBgRTQ1flhhN0VUfEVhbUZ2QUNl
MUI4NWE0Cno9WDN9cFRWckRhSnN9XjBlZHhMfUFyej5BMEghLXNMQiloO0lTVSlXdWA/M2JUd21w
OCt9Wkx8IVVuenlPSlpsfQp6MUYwcjBjVGs5dTZgKjZpX2R7SiUtTEhEJnFTUlolJGFAfWkjWD1+
ZV8lSmY3QE5uKTw1IXA9KTIlMnNgP3JoUSYKekNtQjduRkN0TUNUQVY9ejNFMXBSKDwoVVNKaWJr
Q21QfV9VMy1ze3tZJSlMQWwqWENgX05vJFB2e3c+cEA4JD94Cnp5TTJ0YyFCdSNIdjFtY3ZTXnMl
ciNvPlk3ZEZMWHwtfWBGa3MtRig1YEVMN1g7VyYhPzN1UH1kX09pNT1EPGBEeAp6eyEhOX1VMylo
UzB7Q3AzdkZHcz40TERiS3RgRWFQdk1FIVZgfTJWczFleEZtQFQ/JmZuKmxpWXZWeSp7KXlQRUwK
ekNNZlBLQW5lMTZtbHZ7R0RxZW1uT1o3ZnJrajgpVDBQV3RwYDJoP1RTWmMqITRVOW5ydFFkekUr
aU9tQkNJP1djCnooPFlmZVluJUdvZk5UWDVTUl5DeFctPWZ7IzUlRS07JUZnb1lOaWJsa1BRT05v
ZENgVExleHdEejJYeEckJC0pdgp6aiROQkBDb2UoTVB6TXwhdFg8aGx2KDBtWUJSd01MbCY/cTVl
RVdPaFZCSkF+bHJPNCh2JWFOSFB+T3VKbWQ/bEQKentqazY2Z1ZOWUxNSkt0d3xEZGs+QVFBZT5X
WGVOMEApdzZzYD5zQkQ+TTA+S3pKJCs/ODxnc19rXjw0ent6dEBSCnpAbXpRX20xZ2JWUmEoNSNE
OGZuR1k9bnY4aWdMfEwxSmcjcz9vaiV8czlqLXB0fTljUVQkcmZHdTNObzs5dXF2egp6WHBScUJx
fVlpMXpANFF9JGk8ZHZaO002V2tFSXoyc0R6YjJ0WFAtY1lXViY9TUV9KWF6ZT1UeyQ0XmpjbGpj
cloKenRIYTJ5eDsqQVhuYFNHYE08TlFqc2lnWDFzSHBKcUF9ZntVZkJkaFZ7WXs+SU1abiV3dyRB
ZitFYCpNfl80ejhpCnpKQmlhbjxUZjctNjEjLSNJVFR5KUppUUBQYVpDdFVmWHpiYiN7diokI2My
UkcyPEJVVHNTR0c8UXI7V05MWmtmQAp6MGReKUQ4N00+d1pJRDgodCozQn1ScjhWd0hYN3Z4Vmkq
N2NuZyRVSGMmfFlhakZATCZ0UWwqTEEzJH5nez5XdXYKentnOV4mZSlYTiVUXlZxdkJtQFFjQCZO
e1ZrX2NlMyFFK3pTPVZZTkowRzZUSWFAaFZnNWpZdzEjZE9LO3BLeXQjCnooJWsqO29eXlhUcVg+
VlZeVHM+Z3c/MDJUKzZ1azlfUispQkVvVWImeDNzNlVYTTQxeTV+PjAkc1NyPkJuVjk3Ygp6Mjtl
YT57a2Q1VXQhI3E2d1lnYmpkfXozJXAyeyY8ODJvNlQ9dlVVI2N9RUJ2TV5Gdz9zRz4mdSFlUiVQ
JnxaakQKenk1WkV1I3FvPC03U0hAPTVSMCFvQGJSdjI9az5RRmNfREYjZld+K2s1c0ZoUyVUen5Y
dlJhamlXd0VxfWgpbVhZCnopTDg8RXY2RHY+IVE9WUpIa3hYTFA/c2wmYShoZFpJPFh+aFhVNiYz
X34zaTI9a1owWTIqcnQoPVA+SXI2aEYxTgp6S28mRzBNSURqd1peWjhHRHxmT3dYWHp9U1lBbn16
TzxaZnl5SXdvZ3hzdW5mMDVPfWNhNSltK29lMExsaURRfWUKenAyamVuRFNWKHpmO1VVP0tyY2lG
cGdJRD9QP0A2bGk0bVk1TFIrWmJUSTs0QjVOai12UVYzSkE3QE9YMXZFaD5wCnpDNnBDTUNhI2BE
UGZEU01uTElTciZtTCtwbCZCVExQNTVAdkdNRXxlekJMJD96YF9gaDUqZiNZWHR1fTR0PXxPRQp6
MVlqTjtUPytZQyNzWGkoJTNKYGUoZ0NvfSpGbn1PPGxFdSNUY0VeQk19SElRI1B8eFJgPU1EWVYz
eShGUEJUSEcKenBsQGFyOTRremlkejhLQEF5IXAoe3pfODB1fntSUGxiWFMjZ3RzbmxISFJLX2J6
flpkOV9qcGltNTt6TCVaSnw7CnooQEhWNlglKX55RFhwWU4+OUNYKHV4bWdZemNxX21sa1ZxbF5C
WUFyYFBhV0taVldHYnB5PGBRKl8tb19jeXV9PQp6eyowXmIyVFNiNWAzXjxxQnhvbkVZUip2TTll
PWRhaCprb3g2Pz9XNHQlQHZXMWAqfXJwdyFpQW5EQXFrSWBgNn0Kej5NfHV9d2E3UF54NHd6bnNx
TC1FaENSKnVIVExEOXJeeXxHQzg5ejVVMWR7dXB1ZkxzenFSWFNYcjtabjw+OEhyCnp0QXx9dUMh
TV9gVSN5az1jPDBlLUo3fDQ8Xilla2hmSl95Y2hjeihCbCp3S1RmamkweVdVKE9FQ1RJYysqYTY5
SQp6Zk4mYjVsPEQySHZTaHhXI0ZDWUVAI3ohTGJPbzFCQjIzSzFiRChXZzRBPmlzNDU5UWRHKFUj
cykrMXppZHBYUG4KelpqaClqVTFGJThtP29QSEFAOWF5OT5mbCN5T2ZaIVJHfkZwVmM3dVVXZV80
ZEFGeF84bDkwZjtFOH5PVU10UEFGCnpfQ1FOMFYrfWRRe14jbj5Yc2oheEFAfGM/aXw/bUlVNl9E
M25VM0d6PHFiJW4xNGpxOFloMmtYQV53IyNDJD1LJQp6T2poVys7S0pQTm0oNm95ZVJFVD5MVHdm
NC0zTE5Dc2FgaVMqRWQkVm0oX3R9eXRhPlF6JGAkOSh3emZiRilMYFYKemdDLX5uTUdGaFFsV3s2
NG42c2FabnhhVS1pQm9iIS1XRD1gejtQY0ZGZGgqKXdoaCFnNW9maXdzLTVoTXg4WH0rCnpkfFVF
aGRAOVQ7MHA+JE4jdDt7MWM/UWhCX34rKFNyLStyZF5WJnwqWSlDPDwxMkZ4MlB2Y299LVFGd3Zq
ciFAVwp6cWFvaWNJfTQtK3teWjFvciR5fT9PNHdkfjVheHZGSm87P1o8Pz5GdUAwPTVXYFhhKWF2
JSN9QUAyUVQjQD1Xdm0KelZsa2ooa0B2bDNrbmB9NjV2dUgjTTxsOHBBYFMrSyExN2QpP1J+KGk1
T3xgTGM/PFhxezJNaTA7fFIxRHBJVTJKCnpFKDR4Zy1EYVd5N1IqPWcrRn1xY0JYJmB5I3I4bGcy
XmZWRGFUXmZOZiteem1laE5lSEl0aUkmTjhqNSsheHFTPgp6bTAmY0RXX0FUT2ZOQntDeFgxeXJA
S097QUNSPXxNcGNeRXE0ZD5neWQ/K0tkTV8xKkZieG02c3pqKzdDJkU7aX0KenpzPkpGIyhTMHBr
dTJHQm5QQH5OQUZ1NGB7Z3hWQFc0d0lISjlubnJGVnwyRjY5aGt4T2o8Sn17UGwheSFtYURrCnpz
WEhmd3tObnQ0RzlYOXxKMTJucmkyJFhyMlhtTGM3PXokTVZieVQtc0RIIzU1LTVVQG1MMTR5YTh0
VWZfQm9lIwp6YW1NVF9ILWw0RHolO3hsR2FWa3IweSlFWUlCQC0maXZeYXEtUVB6anpJbEc+IXUw
LSg/UXlnUWVUd0xmUlA3dVQKem9+P2FNdFhDZ2VLencpOHNie21iUDVEWTlTe3swclkjN2t3SlUh
cG16aj1Ncis8dD1MKEJCWllRNE9tPFQ+UmI3Cno8SkdCIzEzS0N7KHhXfUFqcVhGX3BwYXY5aFpU
NVBXdEZwVkxKcWYtIUtAKyRuTG1fYU8mT2JMWCFeIWFqKSlgKAp6KiN6TDZvI200VmJxcT81LSQy
WjYxcX1vTVJ8dTcqX2BhKHFQd14memFncyh8azc5I3ckZylmajM7LXgqRz9jN3AKejI4S2wzVG14
Wm1Aa2RYQTgxc1koNzF1M3kxMjYjRG9WazNYMUg9S0dDIXppMSEkPnFJPWd4WDBHV2xjcXhkTk9f
Cnp2ND1YI1VTKzBYV2Y5Qmd0UEB9c2cpSEFESXNMWU1fJXhlJGB1dk0pXjlJQGFFazhhaWJLNyVZ
Vm44YjBia1RSRQp6dlBrKmhKJWhOK2Jwe3o5NnAoMEI1Wl55JEZgZ2F1RlB1NThKZX1DK21oVnNM
JXA0VTN6bjFFaXA7Qm5aVTNHJFMKeio9YUI2MElsaCg8eWA/dHpubURsXiV5JWojWSpvdmNNa3dl
MiYlIVFla2dKZlFiNEFoallRVFpoZD04NER3RiNaCnowVGolYnZMZUtBS20yYF5EakRURDZqZHYr
TDZoS25Dd2hVXmtwfGolTSNmb1gjPU9oLW0rR284WW82ZXJMOD9pLQp6QThFUkB0c2ohUHxFd0ti
VUZMbmQ4KWUhZktBVT1mTn4kaTBvRXE/cUxpPTduPURTYHlIJmwxcVVzRTB7RT1FSG0KemBLVzxG
bzZjIz1nPylGPntae3FWMEY9b0M8dzgzXnYlY2dES20hbzEoTFc3ak4zPzBwTDx9d1hXUHEwM3tW
ZiFCCno4XmE3Vj9qQDd1dCRpWUpHSG51clorTCZ0NEUrKlJKJUJLTm8pbjBHU2l4ZmFAZz9+RHdV
d2RXYXQ8KjZ5SWkqSQp6eiVwbylRWWVObzJpSmlIaEc4MXV6K15DPjxPVXdGMjBMVX5JNGxuPUZw
Mj5+Rmo8RDZLaCMtdTU1cUJSVUB5PUMKelZoXjteNyRgRGkpKy1We1p1ZUxJKnUkNjdNJCp7fXtW
eXxicE1BJCNAMz57cG4pc3gpTDhEZlA8KDNaJF5jcm1OCnpedVVfdz8ha0wpWD9WQlBuQURwMHFZ
PHhiJWthVChYOVdpQkxWTSN2MSQpY0JTR0I9b3goQkw3dX4obGpKVy0qewp6TU1YTTEpSnN8fD5P
ZnsyZkYjNElYMnFhenNqVzNaRUVwJGBgfVljY0U0dmdjOWZqTXJuPDAjNDI9YXU9M3pFNmQKenlO
SF8rRlFhOTljOyRYKklRdnt2aCN2WWo8Sl9LQzJQKjgmNEJRV14rVHlke0ltKCM3Yj91fVJ4IXZZ
ZzFXcnQ8Cnp6QyZvd3R5a196dU1TVW5abX1kfTkob3tNa2Y+YnJzemlWbHdFN25FbTElZnB5VD1m
NTM/TXs4JE85YDFuJHBiQwp6SzhsVkFqTVlMMCNSNCpXY1pWMD5eaCp9WER3ayYjQk5POV9xM3pC
fUJEK3lpczYrTzc7U29ZcWpUKno/PCo/WjMKejkwc29EI0FZO1cocEFpYExyfUBZbk1SLWxnYjBA
YTlXN014REdRJEhUbVo+S2JyZ2dUKXYqfj9oODtqTEk8I1F7ClpHI01Ve1M9WE5CVmolU341KWZB
eCpGKHwze3tYZzFWKCRPfAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Jl
c291cmNlcy90ZXN0LnBkZiBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Jlc291cmNlcy90ZXN0
LnBkZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQyNGMxOWQ5OGI2MjFmZWFkZjNl
NGQ2MWY3YmZmNDcxMDdhMzc0ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKbGl0ZXJhbCA3NDIx
CnpjbWFpM2J5JD8hd15vckY1SlhUPzg1S2x3ZEklQU9mdVh4d1ZyWFZ5Mm11S0pOa0sjO2dgcT0y
UWpuQkpxKE0/Nwp6QzhRKC1yMVp7cyYrbylOX2RmU35vO353QFlwP3lUKnpld2R0aWBQXmdCRkFj
ITIjVEAqeyRgaFJqcHxOQz1kKzkKelM9YS1fI1gtcyN0Y3t5MzVKcj99ZzN4eDNaV3VmVz9QJV9Y
ay09RXZ0U31OMTA5UTlXI0BxP3VuWmd9VzJSSjhuCnpAJS0qIyM4ZExJQnd0UWlNaEBIaTlebV54
WWwoNikoRHMyek9oeyZXYT9tVWEybG11WVFqfWpZWG5ETDUmYHIxWQp6RjNKZyVvVF8tP1lWbzRX
e3ZBND0wR1NgVjFwPk50Yyh7Z1ltRC0xaU8jRVI2ZWdQe2lJWHF+V0wybE4hITcye0cKelY2RmJK
T25mNmIzbjJNT2RWeFM3cX1rc3gjSj9nent2VlAyNWgoO0gwKXZiRUoqLTgyVXY+ODdCPihCcGFS
WmI8Cno+Y3t0RSU9TDxiJnQ5aX4ySTt0a2UjR14tRUNAVkgjZEhyRU0qcW8yfE18d2B0TnUjdEND
O1l+WDVQek8lKylTOQp6WHpLblhKSUpHQ3B8VTE8aWZnUFU+NlU2PD97fENAYHdaT21eeWJ8OSgo
XnRRI0A0JnY2bGJId0hjWGEoKjJRQG8KejlRdmcjQTRuVzslSkkyPz1fYklHMC1rY1k3OE8yRVAw
N3drUVVKWWZoSEIwJGM1OXMqNTxiSlNKSEd4eUo5d0ctCnoqViFoJl5VcmVGWDhmJWo1OWVQLXBJ
ZWI9S1hxbD85PUR3XmVGYURkMjFBZjQ+RkV4S0A+aDBkcjJKMFh2e3pscAp6ZFhDJVF6Zig5b2gy
MVF9dF42e0g3VmpZMiluMGU0RDAjKVhkYDE5SD1efT1fe05TVEswb3sxNnZyZ2hwdGE0UCMKeihk
OT4pdlhVPnVgdSlWV1hvcXQwWkJgUGBgQDQwY0hDNFBxN1BWSWVFfVp5KCozUWN+NkljLTFiZik2
TkhYLVZpCnpadEh2ZlBJRSkmOyNLfjQkTTFTPjFwVFZteTZ7Nk5DOFhMTW9KRG55PmVkYGthZFgt
PEFUOWpgX0J6WD5jZnA3Swp6Ukw1N30xfEMoS0YhZVJMcmtPSmIrUlE+dlJ0T3I+VkRlfmxBJUEq
WXRsPHdFJDJpcz4mdW5MRHclRXw4N2NxQUAKem5JZ0t7VE45PDllJiMrVTd3PUNBK358NHVVUih8
bGA0WkFuPXVEdEJ8SDNydDx5fTBWSjQxOEMjbkVhPnVpU0ohCnpKNUZWOUFuekFvR1ZXSmYhUDkx
c0EyJXdTZSU2VmItVTV9MXJNeHJzSlBZeGFqajdSI0dtIUVDP2NOUWtJbFhONAp6XklWNVpHKCVD
VVhtOGFjSE8kVkBhalMyYC1NVShvM0hgVUohSjNBZjxKWSMxQ2s+NzJkcH0qWHBSQ1BzYWMjeyMK
em5xO2YpSFpVcDZtfSlmVHREdSYoanZhalZHSGM4WlZQSm9gNk1EWWpSMT9WZVZOb05BS09zPHhY
RUJFYlZEVyVECnp2cGcpYnNSM0VlcVNNcCVQX1YmUClGVWxOKnkqY0Qxc0ElRUl5cSR8KTlsalhu
RDJBWFV8UDQoNz5TTThCVXZ3bgp6ajBiI2h6MUx2VF92NE4kKk4+anVeMnQ9ciVydjlwTktRUEVe
SlQkRmx7bXlzJldxVX4xWGpNd3Vme3kqJno+T0gKekVRYDgqVVRiY3F5eT8tY1AmKW4hNH1WOChJ
YGAwMWlOZkJ8WiQrRVdUKUVSUzFDaVg+TWNDTWk3dGlMb1JJYUxxCnoofkxhWFJXcElLNWJ8JDYp
TWtzaSVOOVN1YUAxR3heWUQtZDZOYEhOIVV3LU5jbzAjI15WVjRLQFQ1RWx5KXBGJAp6c2spcWNK
LW4hI28hak43V2ZNTC1oa2k0ejRTTU8jPU59TXQ9JWNOXmVvOEl+bUBfcm4jMzFSQCYyWTR4LX1P
NVcKentZSW15UGA0dlpePmlFa0trIWkhUnVpSElzbXI7dzlQakpwck9hSFY/dkFfKlJCY2xhe0FK
eCRIRE0zaUUxNyZPCnpwPiU9amRgbSMkcSt7aWxtUkB9K0M5QnUjSjFJLUQ8Q1lFUU97PXJhdFRW
TU0tV0txI1dGXjw9XmQ+Kmxaa2JxTAp6cnwkMWdYfFVBWnghSTl0dWBfalRKK0h4eWsxSCRYKnIt
cT94Z1FvRHdkdlFjK2cyb289OC1rZmQwTHUyX0wqKisKel9ha09IQTYpWkpCYHY7NDxYI1EwbiZT
JkZaUFlALSR6YWN+MFR+OTBpPlZ7e2ZmJk5rYm17dXVefD5nXygpKU1uCnozK1FObHJhYXJCSm1z
fFljeHowPiQ2OTA+VD0xOGJuIVpjZCtwWi1mWXZ4VD4oOFJ7VVYydGM5cE58UXUwVWdoNAp6VFJ7
T2ZpeWJaS0xHS0FOX0tYPzFDXyQlanl+VXIwVFB1a0lHUjBZKklaQCV9Zyh+fnwzK0U0JTx+JHt4
OzQ9OTsKejZtJkxQPW9kKjwpNk8+MEExQ2Yhb0s4e1REbyZwaHNyJUlrKSpNZiEzbGlqVVNaOU91
PXVofjs7aEZibmYhRSg0Cno9UVI0dDloYC00JXRwTVp2VWlBT3h1dldCclVVKihhZ2clPnZ3cXVP
UDVyVntVZSZCVTlEI3dUOFYlVTVScCR1WAp6QWNFezZGdEU0bj9maG4pJU1QNyFYRTN4TzhadTFY
SHpzIzJeZHBvYGhhVFU0aCV6XjE1MDtZPkI/fTRrdlZRSVQKelpFb2AlanJscUQwekZuaEV7QylK
SHdyemgtVlglUUdwKktBTjNoUSF5Tn0/LVg4aHMmYEpRP2QjYm5FTEAyeGBvCnotdGR8TXBsJDAk
MmZ0d3JWVlN3ISlMVCQocHhlV0FsX2ZSN3lHMTFlQGZ6NCFCPT1Se1lkfUhscDs3OXsrciYzUQp6
QD9XZUQwdXhmIVMqaE14d1JPSVZaSjFNe0hKezhaS0JaYUhWRD9pdXpzMDgrcVdKMD1eYWpRQCt2
TDQxKTVBMy0Keig/X0RSLU1yXzVJY3VjdiNufGEkJlpBJDA/VUd6e0k/Xk1SeTZZbiV1XzgqY2pB
NC0xR2t6e0ZgdWRsVGQ2dSRICnpEPzZKNSEpRFhvJVM/dT4kYlkmKm1ETHlUdTM0YCRzI0w1IXQt
UlE0U0NqbXFxNylWdUVLKFRWJDlfODBEWFkzegp6YndOVHJ2ZnlhenQxeWkqJkd7Km5nbVJIeSZD
aHtgZCNjMFNAbHV6cj09MTRuWjA4OFAqJm9oVGRpPiQ7dChSUmAKeipvMDV5K2pAZHtvcHtGVEAj
a3Zhc2tNNykoaT4te188eip2JG9ubXJYZT1eKThGJHJCJkRDJFV5JiFJWSslaD08CnpgPT5+QG5r
fipPPlVzN0c1Pm4+T1c9cG8kMT1NS2tBOT9TeTY8fkxZZFNhUDlwYERCWTUzKDMoI0p3eS0taH5s
Xwp6eUBYX25LbHtNP1V2R1U7QXM4PXFrclV1cSQxYTQrVVUtZm0pQW15U2RjRl5fTFdHYSVsc2g5
WUJpXzdCbGQ1fG4KelpqKChJMUo0NWJReGAjN0p1VT45Un5UNlRSUWs0VnRXSjJ1Rk52T21XYXZq
JCFjPj10VkVmfXgyKUg9M2FJUWdvCnohQj15WklgPnBhNVZlJEt7JFhVUk40TXYmcWt4OXwzdktf
WGBWeGl6NlB3fGYlU0hedmNGd2U9YFJTMUV7X1YoVAp6TEw2a0Y8OyYlWj4rT3owRkloKGtnUWc+
PCF9IVUtdiRyVEtXZU8xJDhkcl4pWGk/WVRwcG0obWc9Xm4wOSZCKloKenYteWlCUFM2YnFXO21p
OFBRRUZQekhMVUY0eTJ4dTl+JVlZM1VPY3NqNkdSUURKdUpkKDVSR2hGdUIjNTVySHZiCnplSDZK
Xy09OTF0MGs2b31GWlNqP1BfQTB5djBCQDRrZXZJLXc7JF59ZGdOdm5xQVBLcVl+MkJQP3thcDFw
UUxjQwp6JjJHNUZGS3IzU3ZVbnBfQ2s4V1pnWVUpK2RBIyVoPyp7Yj9CVVliYF9rdmZBTWpaRno7
QFoyTkpfVVZXN2M5YikKeloqWH1JTmVmJm98MUBGfENSfFhiYV4tUVI3ak1hNmdVblFya34+e3pL
ISglO3lFfUhfeCNuNEhjOVpjMyYoJGkoCnoxQGY5QT9JbnY8VmVIUHdJNEpreTdtSEJ4c3drbGxY
WSRfZz1BcUcxcn1raCRgcHtJJGNNXnVEOVYyfj01N2BwWgp6Q1o8Z0tXQWp2PTA9QDIoRVFEYHxZ
T3wkIVMyV3ZxWlUzQSZoKDZoR2ptUmp1SXd7KiVfZHY0QnZlVTlJaiNCU2oKejEzeEVOdk9SZmla
ZiR6Kyk3c0tuVm40SUVQTHBHcVY+UVF7OXdVKnN5ZTcrb1FrQ3tRNXQzI24rS142VGdGfExxCnoy
OWloTEZ1UnYtdll7Z3x7V0YyezVrKi01ZHw9KXwoVyZgJCRYdippM3FgT30pZV5JV1pgd00ral9s
cE9pXl5VIwp6eXwlUWtrZ0w4JiV6SClvSmwraWVqcGtfPHhYQHJNITwtISNtZml4b0I2OXleQHA8
UCllekEpUGc7WVJpTzFIVzsKel41YTgqUWd8TCM+bEI/KD4kaVk+K0BxPWdDfDAkVT80bVNjY2xi
Zz5HPTByWWRSJip3REJ6KFg8JF9NNSs+UGlUCnoxOyUkMy1oRiRidlJOPkhSXyVkVm9hQmteeFMx
QHhII1JsU0o0aj0xamQ2e3lfSVRCPkt1Tkx0Q0I8WlltSVNabAp6QCFxU0oleEM+Py1qcig+ZVYw
JiN6OzBUclpxb2Q/YXU4TT5HZkBOfjdlJjxBYXpEYD5hQDs2fik9cWdLdCkzPmMKelIqMkgqLXtk
YlozUnheaThJflowXkx2TmIwbWA1Nilpbj5WZCRwRW4lVDF3enVIX3VuSGFFKlNeYEBoQWJXTCYz
CnpTNkA8Um5nTnF+dF9afk1wWjV8R0l+Z3pZLTBrO29lQTYqfm95RVNvRHclUGlNPXluYStQbTt6
ZT4rfGB3Tn07IQp6eGlXT1ItaD85OVErYDJGcnlUNHpje0ZUI2VYZSQyS2R4MUM+cSY1dj44eEpz
ckdwTElKeHhwI19QMUVOVHxJSyoKenZgZ1JmP2QxciVxSXg/Yy1DKns3TUhBZVE+c2lHKWJMa2R4
c1ZpNT1IdzcrNS1tOUI3VkFTckQpbT5haUVVXlI/CnpUcUQhdDtEYU97cysmdUJsaVFsIXBpNm1B
Kjd8KTEoWVYwRUNqUlgwRFhjIU0+e3lRbmN7ZEA0KT0yK2UkP31DZwp6PFdBek4kYCo/V2IkZShX
d3A1PV9RS2h5N3c5OTtyaGk+ejhVNUBSWmc3NyFEQUBYc0JXdldqdlBsZVlWczJkTTEKeiszSTNG
M29BUS1kRHEjMzc+LUJwSkMzYypqS1F1bm9YWHlyVGVtKGcrJkBAMVVVOyR9eSZqcFd0TU1oRFQ1
UD98CnprPmBucnokYURmNGNHayZrOWE7MTRNd1d7ZUctbVorVTF6elQrNV5UT2ZwPjRPanMpV0N9
MFF8cyFSaik3X1M3Xwp6YSs7fUUhZWxkSVRYQFkxM1FeKUsqX2BReFhRVHJpbEYya2dAQjckPDNE
TFRWSXpNdn4yK25NSihQM2QoXkh9TCMKens4dV8/cXgrcVE1NjV0OXdxLW89MlVwaU5qakRAWk5x
cWFVR2ZoUyprN1AlQDJLOW9SSzdhQiQ9OHo0aEtBPGZgCnpjeURfQXljKCViMSk/MFU3VWhAZHRV
XmhPWlV+Q2NeVkIoWCs5dyVtIzlwTng0UlBTSFJ+eUJAc25peCFPdVB7Iwp6cCliZSQkVCRrfXco
Kj1TZDthWlp6PGl5TkM2IUAqVEIkKVNCTlA5P2psemJhek1PY0c2YElOSmRMTD5iWDN5SWQKejJA
XzhVSj1gP2AtWiZTOSgjQSZFJTkkTjlBVipAcnBtZXNkYlVpfmtNN29WQ2U0dVJpRDY2QEtOPG1n
MEY1U3JQCnpnPW8yTHZEUDt8OCUjQktCUmxEZDVBVGt9Vl95YiQkdFUmOWJOTjU8TzVwc0lIQlFC
fXRKdVokLXA8U1JQR2BgTwp6QUZid1ZYeHAxUm9VVT5zV1Y3VzNNYH4qTGtXMnktTVopS1UpOTxg
RDlmKGJyJGo4d0g3ZXFRYG9WWHtBYUZ9VTIKej98Qz0keXx2PE4lVz00dkh3Rj1qZH5qPnNnUjxm
NzEra1Q9NF5sWUc0bH15SmtXTmBBSk4wY2g1JEFTKCRMdDRaCno8aDtvb3NwaXVpUVZzZHxYUHlQ
R3I0O3ZSSSoqWUwmMDRJbmY2eFFQd1MtN2xud1E7bXRYV14oMillQ3c2TGx2Zgp6ViFYYCUjMXp3
Q1ltSXl4dTFgMnNKZV9PTCtmUVhMbXswdlF4P0VFQD5idjI8WmZTTit6cSghUGIlUmhVVXhnMEUK
eldXdWxWZC1KWHw+PDVtVkI0dV4+IXlXREhyVXB4YCk7X34wSW82Yn1eU0goZ29pdVFxQU1YZldw
aHs9NXM8NU4jCnpqayNzbnF+VkNWaHUhZmY2Uy1SYzVkJVl5NHdvd04hPjxTSTRQS2ozZG5aVDVJ
PGxJKCp4Yz4kP1dOfTJwYHFPNwp6cktMSVJxYTtSeEAhQDZCYkdTTE5IX2hGeHE1fSpBdG5TcnJq
IVc1dHRPVUo5KUthbm5QPUVqVTNONDw/JXgkTkEKeiNLTnlwLT15YkdgLSRBNHleJnZJYWRJOWxw
VlQyKkt8ODAhKjhrTTNINiVBJE81VUlJSUh0fk9DUkkobWA+YXBrCnpJQCFeN1dMTVkjc0ptKUNS
QmtsI3l8M0J4JHt4enUxd1YzK2VmWjw/T0RoPCo9RSVBckdVdFZCKjdwdXV2e2dLdwp6YENEWjZK
ZVV5TSpOSD1xV1hsWS1vSDJkIV80MjIld2IzJlk/Vy1lRXgzZWJRdHF2d1ZyezkhTzgreWF3TDI4
MjsKenc3cjNzY2E/YFpDYl4pTWZiekt+dGNEalRlJjlwOzA8KlM4WHA3SW5jelhzNi0qWjJ1RSQt
eEM4KkFMRWx7WDlOCnozdDBGZjZWZ1hjKipYdkBEdXtRRGdyT0tPQ2NXeihwIzFfWnY5WX5eZ3VI
dHt6ITZyJml6LVlIRUFBYnp6bTImQQp6Yi1VdXpfU0RBcWcwXiFFWkU+KnNSNSkjTVh6dnNhc35H
I1dNTCRBQD53U2E4dTdSM1RCYV5rNDlCSWxiKlBAfiQKenZkWGxUUHZaNlV3MSRDSVR5cGNuUz0q
MXRrK0YlWDNUPkxQdXdrSnglcjhGKEx7dVYxRihUWChOKVRiPGJsKnN2CnpWcExtZUN3Ti1tOXJi
KXBXYEY4aTJ0THhQcFBCZGJkbXRXQHR6MkF+eVpMbX1aQDRSKWc7NlZmK300TExldz9RLQp6R1Ex
QUZkfHlDRSZfZy07RWpWTWwlWmlWMVp8K093YDB9YnRjIW9ab01DdjhXO1ZnQDkkKENjfDw2cT5C
OEpATj0KenpHN2tQJiVPbTdZQGxSfT9IY1QyNUhsUncxRF41TCsoeDskKmEqWiRAWXYrP1h1Z15k
IzIoREdoTUpUYFpjfE94CnpxT0VoTXtOKXFHcHpOR2NKVXBGd1chTnpwZHdZS35zT3AtNiVLZk1a
SV54S25FKl9mPiV9fnA1a3p6P049bDx5Kgp6QGB9cDY9fXlLfChlQkR3NHZ5anMoUTFRPV5uOSRH
Z2hZO3tpX3R3Q09xTXJxWmNpfVhrbldZX0ZKR2hRdUppOXoKej13ZFJ7PHVUX3RWQV88c1BMfkNv
emxNP3NgQj8yLTYyeHxiMEZJbmZWM0IlaFJ+ZmRAJkxocDxHd1k9KitWTyR+CnptaGFBNmItY30h
bmJNSlYmcVEtPi1aUXJgXmhLRipEY1JtYnJtbjAwNEJrdiNUIz9OfSomVERoaik7c2UyUWNVUAp6
cFBkI2JrVyp+MTslaHM1TkN7aWZ2NlA+YHotcVE4UHJGYyN0dH4tSWFyME9tOFJWQyMkPUVLTUAy
UHVwQiV0dm8KejA4NT0/JUVxMTNyZlFfaFM5VXkqRE9VI0lCYH00KWZLRkNnajJ1NT1zQj48RWU5
ejFPVCpqZWNGKVhTb04wOVFxCno1d3YwfGIwQDxKVD0xaUtHYD1uN1NLaWZ1RVVPM2R0Z2QtQylP
Y1pQP3UtQ284bHhAaSpedCVge2xVbHNedEctdwp6Y2l4WG9oQ2c1VkBybmZjNyFVSHFWTj8yZ3Mr
R2I7Z0J3UWorIWp8KSlDR29pZjZSKHIpOVBiNyUkfD5GUU1VTUMKelQtQGg+MntJS1YtKk5mR3dr
PTg3KnVGdiUjeU9tJVZWVElkbSVDZGZtUGglbTx3eG9CZXlWRy1NSG1ZQWsyVyZsCnprVjQ9Y1pA
dXJvb2NkbCV2UUNgUnZ3V3E/e2N2aEhxM2cmcGZBJikjQChBQGpfYCNze3FHejEqdj4kIX1TPnkz
Qwp6dGgjR2tPQDQoRGRONE9acEVOVTd6JDckWD47Mj93dCpGb0x5aF8jNUV5eHJYbj82KTFJNmhP
VUxXdyM0cWdYMj8Kejd5QzMldUchfnRmJT4oWT0+dyh5SkhGMVRAWmlffENKN31LLXgpay1ZdGZ1
PFJtVTQyPXMmcXslKjU8KSNmRXdMCnolOFlTK25XdXZXPzRZJG0oKDMwTnJ1eDM4Zm9CcWYmO3Rf
KnpvYU8/U2U4YSFwSUdYPG9XMkNuaFhqXkJuJnI+Uwp6Nll1PWB4VyZnemBOVW5aTEN5PFAjamRt
JCU+MEVxbk9KYEU8ND9aQSlMPDJBSiRHSTlzWGFFZ0UyM2V7XmRAKVAKenhLTUV8SihafExZez9+
MEg0VUApJjwoOCR7dHJxeXhhZnUoN3E5TEVUNVh3Rl5CRXs2YEdiQWJPdyQwZGl2dDVxCnowN3V4
VF9QJGJeQGp9T1ZZclRCIW01eCpOaWYkT2hqb01eV0Q4NGJiUDBXZUtfSVEyMlgyVmV+VTZaTmBj
WkdJQwp6eH59ZmpAVklWNl98cikxI3V4R3ZOK0Y4WjYjQlVJcHtyWElpY1NJVVFWd2JEU18zeFVT
Jm1yRmBMPmJ5VnB9NXUKekFTQHZsSXhpSFJPJTZ6XnhPbGxueD0tbCl6NmVMRVViKEpeYC1mejhu
T2kpVmh4Qio3Pm5OQEU2aitaYVpwQEtPCnpIJXxUZkBwWDg+YUVOem9AQTBDb2ZgNldQI04maVp1
SlNCT1J8RXpvKTBBXnhKUnRLNEs8QHlySE0/QXRNUmlxUAp6PFM0WHY9MkMhQ2NYN0Y+ciVHcEBl
QEA0amR1YklsO0NoPy1gQEpgRz9HYyg/UilZaW5XRVR9PD8qQV8oTztXTHYKelJMNFg+cH44UkdH
PT19Rlg9LX5wVj9ieWUpPWRXRVlLZ2FWY0ViXj92JjJ0VGIwLVcpVDhpfVdFOEFJTUBhQXJJCnpJ
SUk+MVopWGk0bTJZaWFmcEZwclFCenRQPVY+R2U1az4rOVZQRl4jMHRPPzFxOVBDemtiO31KcW4p
SmAqMldQNwp6MU9xQCl1OWdfQTgmRV9QMHN4VldrdjteVzVGYE1FR0l5NTgqeEFeK2s9Nmt+VDVj
RjhVNyFlWTI/P0g5Rn4mZkYKenEkO2M/djhNVztzO3RPZzUmVGhLaDliZkxQaiVWa25GX1dRY3Jv
fU9CQGp+XlIrPWlKJUg2RlFjazRPeHNtQUFQCnpYSWpVbEJGPnVFWio5PF5DS1hLe0g0Zkh5WmlT
PnlGNjs5NVBwMnxtXiVUMTtjKHVwYzwod15qKSh7c2NVJU8/Nwp6enJNWHEoN2dGbWFZZzg+aylU
JSZFZlVoV2VRZUg0OXlAUE87Q2lvdXZ0cVF7dUtUTD1YVGowd2B7eT83KDgoYysKekVHPjZIUTtq
PitFVldnfHZgJmotUE5nVCo1XyZZMU89NDxoNENvZmVubHFoeVJNfnl5QSleVU9zQyhXMTRWTCl0
CnpMMnZRUUZUQipQNFFnPWJuQlJ2JmNqIyYrV3Y2LTJEb09DQDgyYSUzbjhHJWxGRXtabjlmdD1C
K2RNOGhsR0x5Qwp6USlzP0FyP0shO1h0TWR+VldYbWkjQWxAOHo4KEp5S1Njalo8ZXlYa1h9TWR0
ayQ5bnZjZ09zZU59SWM0TlNwRDAKekdyfHQ8PlZ+cDQkQ0d3aSs1Q0BwNWRjV2YmZFNaISlkKz99
MEZlK2Q1RHRke1ZJcmJIc0ljKHdmZEdTbnF5YV5NCnpmaFBhRztlUWJrTmFDcGAwSGxyNiFQPTJ9
MXdoaWFZWGJocDEwdip+alJySVhOUSZtNF5OXyNJNjlYWDleUzI1fQp6OWdubHIhbmhmTWhga0d0
SHBiSjw8UjdxcXRAPDZteTE1TW9xOzhIVWFUWlBqMEJLQGVhcWY2YWo0S2RBR05CMWwKeiFDMlh1
bGEyeigwNzRXMjZvRXJjS3lyQVR5RUN4fnFEOVE1SW84I2cxWXpqfkxUTTM/ZlFPd1dNcEk1MnF5
VGd5Cno9Mj0xbGdkI2Rmd0JRT1BieDsxemM5S2NiQXRuTy0+NWVQbFVwQGYtYSlQK3ZQY0tNYFJr
RXtrSDNJKGpsPU8raAp6eHMhNzdfZUIxIVdBb2J2JUE5ejdhVz0lTFpIUGhzNGpLU2JiSC1xJEVK
LShrKFNLdXNeYkhKd1NhKE9xfE5hM0oKenY2YW9TSG4lWllLezt2T2YyOHozJUB0eDBRdG9jSElK
YEpvN0w1amo7bGcwQkZwJmVvRnllck4hOTwjWGdefFI2Cno7djV1QXlpSkk1cSRxS3F7KlhmP2h5
ZjVnTSNRVj80K3NQYWZ+WlNVYHdjO1lnQSZ6PHlLTG9kaVRSSG5vVHgrNgp6Z0E8e1ZCb219VGYr
bT9EdTdTIUR8QX0rSXY1MSU/XkR5RVpOZT10ZEVIUWMrVipCZDBqMkxsVjZhcG9CRUNMbVUKeiFV
ZSVsOXgjfVBfaXRKQyNBQj1oVT8ybnpBUl8obzBGZWo7MzwwelR7dmt1YzVYOV9+OXc3RVZHQjZs
SXIxSmxlCnpMQlloRnw1SnY5aXhTVnNLVkBKal5qfl5KaV5Ubz9yeWhiUntGaDdee3gzV3ZhWDA+
Xzl1a1dEdztvalZVcF54ZAp6cVdAbHQ2I2JpQkhAckZWZzIkN250ITN3cEEqS3FYaU5nYE9gVEdu
MktuaHJFOTF1ZHs0KUcjVGtPM00yI2dXM1kKemFGaSQqQ1dWQmRyS016e3ZMYXc4OFpIZiVLfWsh
JnBrUmFxO1F2PTQ5UmVBZ0NDVjBLPkVQPF8xT3k+YkQ2b2BfCnhDXylNP0R9cUtLTHtKRH1ESmM7
VjVkO2IlallMVklOS3wlcEdzbkNBLWNuKStBXj5oflN2NTReeld7bkBfV0orOwoKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Jlc291cmNlcy90ZXN0LnR4dCBiL1NvdXJjZS9X
ZWJLaXQvZ3RrL3Rlc3RzL3Jlc291cmNlcy90ZXN0LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggOWRhZWFmYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy9y
ZXNvdXJjZXMvdGVzdC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi10ZXN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0X3V0aWxzLmMgYi9Tb3VyY2UvV2Vi
S2l0L2d0ay90ZXN0cy90ZXN0X3V0aWxzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDZiYjY0NWQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdF91dGls
cy5jCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCBBcm5vIFJlbmV2aWVyCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJ0ZXN0X3V0aWxzLmgiCi0KLSNpbmNsdWRlIDxn
bGliLmg+Ci0jaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KLQotaW50IHRlc3R1dGlsc19yZWxhdGl2
ZV9jaGRpcihjb25zdCBnY2hhciAqdGFyZ2V0RmlsZW5hbWUsIGNvbnN0IGdjaGFyICpleGVjdXRh
YmxlUGF0aCkKLXsKLSAgICAvKiB1c2VyIGNhbiBzZXQgbG9jYXRpb24gb2YgdGhlIHdlYmtpdCBy
ZXBvc2l0b3J5IGRpcmVjdG9yeSBpZiBpdCBkaWZmZXJzIGZyb20gYnVpbGQgZGlyZWN0b3J5ICov
Ci0gICAgY29uc3QgZ2NoYXIgKnJlcG9QYXRoID0gZ19nZXRlbnYoIldFQktJVFJFUE9ESVIiKTsK
LSAgICBpZiAocmVwb1BhdGgpIHsKLSAgICAgICAgaWYgKGdfY2hkaXIocmVwb1BhdGgpKQotICAg
ICAgICAgICAgcmV0dXJuIC0xOwotICAgIH0gZWxzZSBpZiAoZ19jaGRpcihnX3BhdGhfZ2V0X2Rp
cm5hbWUoZXhlY3V0YWJsZVBhdGgpKSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLQotICAgIHdo
aWxlICghZ19maWxlX3Rlc3QodGFyZ2V0RmlsZW5hbWUsIEdfRklMRV9URVNUX0VYSVNUUykpIHsK
LSAgICAgICAgZ2NoYXIgKnBhdGhOYW1lOwotICAgICAgICBpZiAoZ19jaGRpcigiLi4iKSkKLSAg
ICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgZ19hc3NlcnQoIWdfc3RyX2VxdWFsKChwYXRo
TmFtZSA9IGdfZ2V0X2N1cnJlbnRfZGlyKCkpLCAiLyIpKTsKLSAgICAgICAgZ19mcmVlKHBhdGhO
YW1lKTsKLSAgICB9Ci0KLSAgICBnY2hhciAqZGlyTmFtZSA9IGdfcGF0aF9nZXRfZGlybmFtZSh0
YXJnZXRGaWxlbmFtZSk7Ci0gICAgaWYgKGdfY2hkaXIoZGlyTmFtZSkpIHsKLSAgICAgICAgZ19m
cmVlKGRpck5hbWUpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgZ19mcmVlKGRp
ck5hbWUpOwotICAgIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsv
dGVzdHMvdGVzdF91dGlscy5oIGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdF91dGlscy5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzYwZGEzLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RfdXRpbHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDMg
KzAsMCBAQAotI2luY2x1ZGUgPGdsaWIuaD4KLQotaW50IHRlc3R1dGlsc19yZWxhdGl2ZV9jaGRp
cihjb25zdCBnY2hhciAqdGFyZ2V0RmlsZW5hbWUsIGNvbnN0IGdjaGFyICpleGVjdXRhYmxlUGF0
aCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXBwbGljYXRpb25j
YWNoZS5jIGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGFwcGxpY2F0aW9uY2FjaGUuYwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzE4ZjQwMS4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXBwbGljYXRpb25jYWNoZS5jCisrKyAvZGV2L251bGwK
QEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBMdWthc3ogU2xhY2hj
aWFrCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGds
aWIvZ3ByaW50Zi5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3ZWJraXQvd2Vi
a2l0Lmg+Ci0KLXN0YXRpYyB2b2lkIHRlc3RfYXBwbGljYXRpb25fY2FjaGVfbWF4aW11bV9zaXpl
KCkKLXsKLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgbWF4U2l6ZSA9IDgxOTI7Ci0gICAgd2Via2l0
X2FwcGxpY2F0aW9uX2NhY2hlX3NldF9tYXhpbXVtX3NpemUobWF4U2l6ZSk7Ci0KLSAgICAvLyBD
cmVhdGluZyBhIFdlYlZpZXcgLSBtYWtlIHN1cmUgdGhhdCBpdCBkaWRuJ3QgY2hhbmdlIGFueXRo
aW5nCi0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRf
d2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOwotICAgIGdf
b2JqZWN0X3VucmVmKHdlYlZpZXcpOwotCi0gICAgZ19hc3NlcnQobWF4U2l6ZSA9PSB3ZWJraXRf
YXBwbGljYXRpb25fY2FjaGVfZ2V0X21heGltdW1fc2l6ZSgpKTsKLX0KLQotaW50IG1haW4oaW50
IGFyZ2MsIGNoYXIqKiBhcmd2KQotewotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBO
VUxMKTsKLQotICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7
Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2FwcGxpY2F0aW9uX2NhY2hlL21heGltdW1f
c2l6ZSIsCi0gICAgICAgICAgICAgICAgICAgIHRlc3RfYXBwbGljYXRpb25fY2FjaGVfbWF4aW11
bV9zaXplKTsKLQotICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7Ci19Ci0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhdGsuYyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3Rz
L3Rlc3RhdGsuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmEyZGI2MS4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXRrLmMKKysrIC9kZXYvbnVsbApA
QCAtMSwxNDc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSWdhbGlhIFMuTC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRl
IDxnbGliLmg+Ci0jaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+
Ci0jaW5jbHVkZSA8bG9jYWxlLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8d2Vi
a2l0L3dlYmtpdC5oPgotCi1zdGF0aWMgY29uc3QgY2hhciogY2VudGVyZWRDb250ZW50cyA9ICI8
aHRtbD48Ym9keT48cCBzdHlsZT0ndGV4dC1hbGlnbjogY2VudGVyOyc+U2hvcnQgbGluZTwvcD48
cCBzdHlsZT0ndGV4dC1hbGlnbjogY2VudGVyOyc+TG9uZy1zaXplIGxpbmUgd2l0aCBzb21lIGZv
byBiYXIgYmF6IGNvbnRlbnQ8L3A+PHAgc3R5bGU9J3RleHQtYWxpZ246IGNlbnRlcjsnPlNob3J0
IGxpbmU8L3A+PHAgc3R5bGU9J3RleHQtYWxpZ246IGNlbnRlcjsnPlRoaXMgaXMgYSBtdWx0aS1s
aW5lIHBhcmFncmFwaDxiciAvPndoZXJlIHRoZSBmaXJzdCBsaW5lPGJyIC8+aXMgdGhlIGJpZ2dl
c3Qgb25lPC9wPjwvYm9keT48L2h0bWw+IjsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnRlbnRz
ID0gIjxodG1sPjxib2R5PjxwPlRoaXMgaXMgYSB0ZXN0LiBUaGlzIGlzIHRoZSBzZWNvbmQgc2Vu
dGVuY2UuIEFuZCB0aGlzIHRoZSB0aGlyZC48L3A+PC9ib2R5PjwvaHRtbD4iOwotCi1zdGF0aWMg
Y29uc3QgY2hhciogY29udGVudHNJblRhYmxlV2l0aEhlYWRlcnMgPSAiPGh0bWw+PGJvZHk+PHRh
YmxlPjx0cj48dGg+Zm9vPC90aD48dGg+YmFyPC90aD48dGggY29sc3Bhbj0nMic+YmF6PC90aD48
L3RyPjx0cj48dGg+cXV4PC90aD48dGQ+MTwvdGQ+PHRkPjI8L3RkPjx0ZD4zPC90ZD48L3RyPjx0
cj48dGggcm93c3Bhbj0nMic+cXV1eDwvdGg+PHRkPjQ8L3RkPjx0ZD41PC90ZD48dGQ+NjwvdGQ+
PC90cj48dHI+PHRkPjY8L3RkPjx0ZD43PC90ZD48dGQ+ODwvdGQ+PC90cj48dHI+PHRoPmNvcmdl
PC90aD48dGQ+OTwvdGQ+PHRkPjEwPC90ZD48dGQ+MTE8L3RkPjwvdHI+PC90YWJsZT48dGFibGU+
PHRyPjx0ZD4xPC90ZD48dGQ+MjwvdGQ+PC90cj48dHI+PHRkPjM8L3RkPjx0ZD40PC90ZD48L3Ry
PjwvdGFibGU+PC9ib2R5PjwvaHRtbD4iOwotCi1zdGF0aWMgY29uc3QgY2hhciogY29udGVudHNX
aXRoRXh0cmFuZW91c1doaXRlU3BhY2VzID0gIjxodG1sPjxoZWFkPjxib2R5PjxwPlRoaXNcbiAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGFyYWdyYXBoXG4gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1xuICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvcmtlZCE8L3A+PC9ib2R5PjwvaHRtbD4iOwotCi1zdGF0aWMgY29uc3QgY2hhciogY29tYm9C
b3hTZWxlY3RvciA9ICI8aHRtbD48Ym9keT48c2VsZWN0PjxvcHRpb24gc2VsZWN0ZWQgdmFsdWU9
J2Zvbyc+Zm9vPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nYmFyJz5iYXI8L29wdGlvbj48L3NlbGVj
dD48L2JvZHk+PC9odG1sPiI7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBlbWJlZGRlZE9iamVjdHMg
PSAiPGh0bWw+PGJvZHk+PHA+Q2hvb3NlOiA8aW5wdXQgdmFsdWU9J2ZvbycgdHlwZT0nY2hlY2ti
b3gnLz5mb28gPGlucHV0IHZhbHVlPSdiYXInIHR5cGU9J2NoZWNrYm94Jy8+YmFyIChwaWNrIG9u
ZSk8L3A+PHA+Q2hvb3NlOiA8c2VsZWN0IG5hbWU9J2Zvbyc+PG9wdGlvbj5iYXI8L29wdGlvbj48
b3B0aW9uPmJhejwvb3B0aW9uPjwvc2VsZWN0PiAocGljayBvbmUpPC9wPjxwPjxpbnB1dCBuYW1l
PSdmb29iYXJidXR0b24nIHZhbHVlPSdmb29iYXInIHR5cGU9J2J1dHRvbicvPjwvcD48L2JvZHk+
PC9odG1sPiI7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBmb3JtV2l0aFRleHRJbnB1dHMgPSAiPGh0
bWw+PGJvZHk+PGZvcm0+PGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J2VudHJ5JyAvPjxpbnB1dCB0
eXBlPSdwYXNzd29yZCcgbmFtZT0ncGFzc3dvcmRFbnRyeScgLz48L2Zvcm0+PC9ib2R5PjwvaHRt
bD4iOwotCi1zdGF0aWMgY29uc3QgY2hhciogaHlwZXJ0ZXh0QW5kSHlwZXJsaW5rcyA9ICI8aHRt
bD48Ym9keT48cD5BIHBhcmFncmFwaCB3aXRoIG5vIGxpbmtzIGF0IGFsbDwvcD48cD48YSBocmVm
PSdodHRwOi8vZm9vLmJhci5iYXovJz5BIGxpbmU8L2E+IHdpdGggPGEgaHJlZj0naHR0cDovL2Jh
ci5iYXouZm9vLyc+YSBsaW5rIGluIHRoZSBtaWRkbGU8L2E+IGFzIHdlbGwgYXMgYXQgdGhlIGJl
Z2lubmluZyBhbmQgPGEgaHJlZj0naHR0cDovL2Jhei5mb28uYmFyLyc+YXQgdGhlIGVuZDwvYT48
L3A+PG9sPjxsaT5MaXN0IGl0ZW0gd2l0aCBhIDxzcGFuPjxhIGhyZWY9J2h0dHA6Ly9mb28uYmFy
LmJhei8nPmxpbmsgaW5zaWRlIGEgc3BhbiBub2RlPC9hPjwvc3Bhbj48L2xpPjwvb2w+PC9ib2R5
PjwvaHRtbD4iOwotCi1zdGF0aWMgY29uc3QgY2hhciogbGF5b3V0QW5kRGF0YVRhYmxlcyA9ICI8
aHRtbD48Ym9keT48dGFibGU+PHRyPjx0aD5PZGQ8L3RoPjx0aD5FdmVuPC90aD48L3RyPjx0cj48
dGQ+MTwvdGQ+PHRkPjI8L3RkPjwvdHI+PC90YWJsZT48dGFibGU+PHRyPjx0ZD5mb288L3RkPjx0
ZD5iYXI8L3RkPjwvdHI+PC90YWJsZT48L2JvZHk+PC9odG1sPiI7Ci0KLXN0YXRpYyBjb25zdCBj
aGFyKiBsaW5rc1dpdGhJbmxpbmVJbWFnZXMgPSAiPGh0bWw+PGhlYWQ+PHN0eWxlPmEuaHR0cDpi
ZWZvcmUge2NvbnRlbnQ6IHVybChuby1pbWFnZS5wbmcpO308L3N0eWxlPjxib2R5PjxwPjxhIGNs
YXNzPSdodHRwJyBocmVmPSdmb28nPmZvbzwvYT4gYmFyIGJhejwvcD48cD5mb28gPGEgY2xhc3M9
J2h0dHAnIGhyZWY9J2Jhcic+YmFyPC9hPiBiYXo8L3A+PHA+Zm9vIGJhciA8YSBjbGFzcz0naHR0
cCcgaHJlZj0nYmF6Jz5iYXo8L2E+PC9wPjwvYm9keT48L2h0bWw+IjsKLQotc3RhdGljIGNvbnN0
IGNoYXIqIGxpc3RzT2ZJdGVtcyA9ICI8aHRtbD48Ym9keT48dWw+PGxpPnRleHQgb25seTwvbGk+
PGxpPjxhIGhyZWY9J2Zvbyc+bGluayBvbmx5PC9hPjwvbGk+PGxpPnRleHQgYW5kIGEgPGEgaHJl
Zj0nYmFyJz5saW5rPC9hPjwvbGk+PC91bD48b2w+PGxpPnRleHQgb25seTwvbGk+PGxpPjxhIGhy
ZWY9J2Zvbyc+bGluayBvbmx5PC9hPjwvbGk+PGxpPnRleHQgYW5kIGEgPGEgaHJlZj0nYmFyJz5s
aW5rPC9hPjwvbGk+PC9vbD48L2JvZHk+PC9odG1sPiI7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiB0
ZXh0Rm9yQ2FyZXRCcm93c2luZyA9ICI8aHRtbD48Ym9keT48aDE+QSB0ZXh0IGhlYWRlcjwvaDE+
PHA+QSBwYXJhZ3JhcGggPGEgaHJlZj0naHR0cDovL2Zvby5iYXIuYmF6Lyc+d2l0aCBhIGxpbms8
L2E+IGluIHRoZSBtaWRkbGU8L3A+PG9sPjxsaT5BIGxpc3QgaXRlbTwvbGk+PGxpPjxzcGFuIHN0
eWxlPSdkaXNwbGF5OmJsb2NrOyc+QmxvY2sgc3BhbiBpbiBhIGxpc3QgaXRlbTwvc3Bhbj48c3Bh
bj5JbmxpbmUgc3BhbiBpbiBhIGxpc3QgaXRlbTwvc3Bhbj48L2xpPjxsaT48YSBocmVmPSdmb28n
PjxzcGFuIHN0eWxlPSdkaXNwbGF5OmJsb2NrOyc+QmxvY2sgc3BhbiBpbiBhIGxpbmsgaW4gYSBs
aXN0IGl0ZW08L3NwYW4+PHNwYW4+SW5saW5lIHNwYW4gaW4gYSBsaW5rIGluIGEgbGlzdCBpdGVt
PC9zcGFuPjwvYT48L2xpPjwvb2w+PHNlbGVjdD48b3B0aW9uIHNlbGVjdGVkIHZhbHVlPSdmb28n
PkFuIG9wdGlvbiBpbiBhIGNvbWJvIGJveDwvb3B0aW9uPjwvc2VsZWN0PjxpbnB1dCB0eXBlPSd0
ZXh0JyBuYW1lPSdmb28nIHZhbHVlPSdmb28gYmFyIGJheicgLz48dGFibGU+PHRyPjx0ZD5hIHRh
YmxlIGNlbGw8L3RkPjx0ZD48L3RkPjx0ZD48YSBocmVmPSdmb28nPjxzcGFuIHN0eWxlPSdkaXNw
bGF5OmJsb2NrOyc+QmxvY2sgc3BhbiBpbiBhIGxpbmsgaW4gYSB0YWJsZSBjZWxsPC9zcGFuPjxz
cGFuPklubGluZSBzcGFuIGluIGEgbGluayBpbiBhIHRhYmxlIGNlbGw8L3NwYW4+PC9hPjwvdGQ+
PHRkPjxzcGFuIHN0eWxlPSdkaXNwbGF5OmJsb2NrOyc+QmxvY2sgc3BhbiBpbiBhIHRhYmxlIGNl
bGw8L3NwYW4+PHNwYW4+SW5saW5lIHNwYW4gaW4gYSB0YWJsZSBjZWxsPC9zcGFuPjwvdGQ+PC90
cj48L3RhYmxlPjxoND48YSBocmVmPSdmb28nPjxzcGFuIHN0eWxlPSdkaXNwbGF5OmJsb2NrOyc+
QmxvY2sgc3BhbiBpbiBhIGxpbmsgaW4gYSBoZWFkaW5nPC9zcGFuPjxzcGFuPklubGluZSBzcGFu
IGluIGEgbGluayBpbiBhIGhlYWRpbmc8L3NwYW4+PC9oND48aDQ+PHNwYW4gc3R5bGU9J2Rpc3Bs
YXk6YmxvY2s7Jz5CbG9jayBzcGFuIGluIGEgaGVhZGluZzwvc3Bhbj48c3Bhbj5JbmxpbmUgc3Bh
biBpbiBhIGhlYWRpbmc8L3NwYW4+PC9oND48L2JvZHk+PC9odG1sPiI7Ci0KLXN0YXRpYyBjb25z
dCBjaGFyKiB0ZXh0Rm9yU2VsZWN0aW9ucyA9ICI8aHRtbD48Ym9keT48cD5BIHBhcmFncmFwaCB3
aXRoIHBsYWluIHRleHQ8L3A+PHA+QSBwYXJhZ3JhcGggd2l0aCA8YSBocmVmPSdodHRwOi8vd2Vi
a2l0Lm9yZyc+YSBsaW5rPC9hPiBpbiB0aGUgbWlkZGxlPC9wPjxvbD48bGk+QSBsaXN0IGl0ZW08
L2xpPjwvb2w+PHNlbGVjdD48L2JvZHk+PC9odG1sPiI7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiB0
ZXh0V2l0aEF0dHJpYnV0ZXMgPSAiPGh0bWw+PGhlYWQ+PHN0eWxlPi5zdDEge2ZvbnQtZmFtaWx5
OiBtb25vc3BhY2U7IGNvbG9yOnJnYigxMjAsMTIxLDEyMik7fSAuc3QyIHt0ZXh0LWRlY29yYXRp
b246dW5kZXJsaW5lOyBiYWNrZ3JvdW5kLWNvbG9yOnJnYig4MCw4MSw4Mik7fTwvc3R5bGU+PC9o
ZWFkPjxib2R5PjxwIHN0eWxlPVwiZm9udC1zaXplOjE0OyB0ZXh0LWFsaWduOnJpZ2h0O1wiPlRo
aXMgaXMgdGhlIDxpPmZpcnN0PC9pPjxiPiBzZW50ZW5jZSBvZiB0aGlzIHRleHQuPC9iPjwvcD48
cCBjbGFzcz1cInN0MVwiPlRoaXMgc2VudGVuY2Ugc2hvdWxkIGhhdmUgYW4gc3R5bGUgYXBwbGll
ZCA8c3BhbiBjbGFzcz1cInN0MlwiPmFuZCB0aGlzIHBhcnQgc2hvdWxkIGhhdmUgYW5vdGhlciBv
bmU8L3NwYW4+LjwvcD48cD54PHN1Yj4xPC9zdWI+PHN1cD4yPC9zdXA+PXg8c3ViPjI8L3N1Yj48
c3VwPjM8L3N1cD48L3A+PHAgc3R5bGU9XCJ0ZXh0LWFsaWduOmNlbnRlcjtcIj5UaGlzIHNlbnRl
bmNlIGlzIHRoZSA8c3RyaWtlPmxhc3Q8L3N0cmlrZT4gb25lLjwvcD48L2JvZHk+PC9odG1sPiI7
Ci0KLXN0YXRpYyBBdGtPYmplY3QqIGdldFdlYkFyZWFPYmplY3QoV2ViS2l0V2ViVmlldyogd2Vi
VmlldykKLXsKLSAgICAvKiBNYW51YWxseSBzcGluIHRoZSBtYWluIGNvbnRleHQgdG8gbWFrZSBz
dXJlIHRoZSBhY2Nlc3NpYmxlCi0gICAgICAgb2JqZWN0cyBhcmUgcHJvcGVybHkgY3JlYXRlZCBi
ZWZvcmUgY29udGludWluZy4gKi8KLSAgICB3aGlsZSAoZ19tYWluX2NvbnRleHRfcGVuZGluZygw
KSkKLSAgICAgICAgZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uKDAsIFRSVUUpOwotCi0gICAgQXRr
T2JqZWN0KiByb290T2JqZWN0ID0gZ3RrX3dpZGdldF9nZXRfYWNjZXNzaWJsZShHVEtfV0lER0VU
KHdlYlZpZXcpKTsKLSAgICBpZiAoIXJvb3RPYmplY3QpCi0gICAgICAgIHJldHVybiBOVUxMOwot
Ci0gICAgQXRrT2JqZWN0KiB3ZWJBcmVhT2JqZWN0ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJs
ZV9jaGlsZChyb290T2JqZWN0LCAwKTsKLSAgICBpZiAoIXdlYkFyZWFPYmplY3QpCi0gICAgICAg
IHJldHVybiBOVUxMOwotCi0gICAgLyogV2UgZG9uJ3QgbmVlZCB0aGUgZXh0cmEgcmVmIGhlcmUu
ICovCi0gICAgZ19vYmplY3RfdW5yZWYod2ViQXJlYU9iamVjdCk7Ci0KLSAgICByZXR1cm4gd2Vi
QXJlYU9iamVjdDsKLX0KLQotc3RhdGljIGdjaGFyKiB0ZXh0Q2FyZXRNb3ZlZFJlc3VsdCA9IDA7
Ci0KLXN0YXRpYyB2b2lkIHRleHRDYXJldE1vdmVkQ2FsbGJhY2soQXRrVGV4dCogdGV4dCwgZ2lu
dCBwb3MsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQodGV4dCkp
OwotCi0gICAgZ19mcmVlKHRleHRDYXJldE1vdmVkUmVzdWx0KTsKLSAgICBBdGtSb2xlIHJvbGUg
PSBhdGtfb2JqZWN0X2dldF9yb2xlKEFUS19PQkpFQ1QodGV4dCkpOwotICAgIHRleHRDYXJldE1v
dmVkUmVzdWx0ID0gZ19zdHJkdXBfcHJpbnRmKCJ8JXN8JWR8IiwgYXRrX3JvbGVfZ2V0X25hbWUo
cm9sZSksIHBvcyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtDYXJldE9mZnNldHMo
KQotewotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0
X3dlYl92aWV3X25ldygpKTsKLSAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKLSAgICBH
dGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDgwMCwgNjAwIH07Ci0gICAgZ3RrX3dp
ZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQod2ViVmlldyksICZhbGxvY2F0aW9uKTsKLSAg
ICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgdGV4dEZvckNhcmV0QnJvd3Np
bmcsIDAsIDAsIDApOwotCi0gICAgQXRrT2JqZWN0KiBvYmplY3QgPSBnZXRXZWJBcmVhT2JqZWN0
KHdlYlZpZXcpOwotICAgIGdfYXNzZXJ0KG9iamVjdCk7Ci0KLSAgICBBdGtPYmplY3QqIGhlYWRl
ciA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAwKTsKLSAgICBnX2Fz
c2VydChBVEtfSVNfVEVYVChoZWFkZXIpKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGhlYWRlciwg
InRleHQtY2FyZXQtbW92ZWQiLCBHX0NBTExCQUNLKHRleHRDYXJldE1vdmVkQ2FsbGJhY2spLCAw
KTsKLQotICAgIC8qIEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBwbGFjZSB0aGUgY2FyZXQgaW5z
aWRlIGEgaGVhZGVyLiAqLwotICAgIGdib29sZWFuIHJlc3VsdCA9IGF0a190ZXh0X3NldF9jYXJl
dF9vZmZzZXQoQVRLX1RFWFQoaGVhZGVyKSwgNSk7Ci0gICAgZ19hc3NlcnRfY21waW50KHJlc3Vs
dCwgPT0sIFRSVUUpOwotICAgIGdpbnQgb2Zmc2V0ID0gYXRrX3RleHRfZ2V0X2NhcmV0X29mZnNl
dChBVEtfVEVYVChoZWFkZXIpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQob2Zmc2V0LCA9PSwgNSk7
Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRleHRDYXJldE1vdmVkUmVzdWx0LCA9PSwgInxoZWFkaW5n
fDV8Iik7Ci0KLSAgICBBdGtPYmplY3QqIHBhcmFncmFwaCA9IGF0a19vYmplY3RfcmVmX2FjY2Vz
c2libGVfY2hpbGQob2JqZWN0LCAxKTsKLSAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChwYXJhZ3Jh
cGgpKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHBhcmFncmFwaCwgInRleHQtY2FyZXQtbW92ZWQi
LCBHX0NBTExCQUNLKHRleHRDYXJldE1vdmVkQ2FsbGJhY2spLCAwKTsKLQotICAgIC8qIEl0IHNo
b3VsZCBiZSBwb3NzaWJsZSB0byBwbGFjZSB0aGUgY2FyZXQgaW5zaWRlIGEgcGFyYWdyYXBoIGFu
ZCBhIGxpbmsuICovCi0gICAgcmVzdWx0ID0gYXRrX3RleHRfc2V0X2NhcmV0X29mZnNldChBVEtf
VEVYVChwYXJhZ3JhcGgpLCA1KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQocmVzdWx0LCA9PSwgVFJV
RSk7Ci0gICAgb2Zmc2V0ID0gYXRrX3RleHRfZ2V0X2NhcmV0X29mZnNldChBVEtfVEVYVChwYXJh
Z3JhcGgpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQob2Zmc2V0LCA9PSwgNSk7Ci0gICAgZ19hc3Nl
cnRfY21wc3RyKHRleHRDYXJldE1vdmVkUmVzdWx0LCA9PSwgInxwYXJhZ3JhcGh8NXwiKTsKLQot
ICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQocGFyYWdyYXBo
KSwgMjApOwotICAgIGdfYXNzZXJ0X2NtcGludChyZXN1bHQsID09LCBUUlVFKTsKLSAgICBvZmZz
ZXQgPSBhdGtfdGV4dF9nZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhUKHBhcmFncmFwaCkpOwotICAg
IGdfYXNzZXJ0X2NtcGludChvZmZzZXQsID09LCAyMCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRl
eHRDYXJldE1vdmVkUmVzdWx0LCA9PSwgInxwYXJhZ3JhcGh8MjB8Iik7Ci0KLSAgICByZXN1bHQg
PSBhdGtfdGV4dF9zZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhUKHBhcmFncmFwaCksIDMwKTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQocmVzdWx0LCA9PSwgVFJVRSk7Ci0gICAgb2Zmc2V0ID0gYXRrX3Rl
eHRfZ2V0X2NhcmV0X29mZnNldChBVEtfVEVYVChwYXJhZ3JhcGgpKTsKLSAgICBnX2Fzc2VydF9j
bXBpbnQob2Zmc2V0LCA9PSwgMzApOwotICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0Q2FyZXRNb3Zl
ZFJlc3VsdCwgPT0sICJ8cGFyYWdyYXBofDMwfCIpOwotCi0gICAgQXRrT2JqZWN0KiBsaW5rID0g
YXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChwYXJhZ3JhcGgsIDApOwotICAgIGdfYXNz
ZXJ0KEFUS19JU19URVhUKGxpbmspKTsKLQotICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9jYXJl
dF9vZmZzZXQoQVRLX1RFWFQobGluayksIDUpOwotICAgIGdfYXNzZXJ0X2NtcGludChyZXN1bHQs
ID09LCBUUlVFKTsKLSAgICBvZmZzZXQgPSBhdGtfdGV4dF9nZXRfY2FyZXRfb2Zmc2V0KEFUS19U
RVhUKGxpbmspKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQob2Zmc2V0LCA9PSwgNSk7Ci0gICAgLyog
UG9zaXRpb25zIGluc2lkZSBsaW5rcyBhcmUgcmVwb3J0ZWQgcmVsYXRpdmUgdG8gdGhlIHBhcmFn
cmFwaC4gKi8KLSAgICBnX2Fzc2VydF9jbXBzdHIodGV4dENhcmV0TW92ZWRSZXN1bHQsID09LCAi
fHBhcmFncmFwaHwxN3wiKTsKLQotICAgIEF0a09iamVjdCogbGlzdCA9IGF0a19vYmplY3RfcmVm
X2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAyKTsKLSAgICBnX2Fzc2VydChBVEtfT0JKRUNUKGxp
c3QpKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGxpc3QpID09IEFUS19ST0xF
X0xJU1QpOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfb2JqZWN0X2dldF9uX2FjY2Vzc2libGVf
Y2hpbGRyZW4obGlzdCksID09LCAzKTsKLQotICAgIEF0a09iamVjdCogbGlzdEl0ZW0gPSBhdGtf
b2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGxpc3QsIDApOwotICAgIGxpc3RJdGVtID0gYXRr
X29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChsaXN0LCAyKTsKLSAgICBnX2Fzc2VydChBVEtf
SVNfVEVYVChsaXN0SXRlbSkpOwotCi0gICAgLyogSXQncyBub3QgcG9zc2libGUgdG8gcGxhY2Ug
dGhlIGNhcmV0IGluc2lkZSBhbiBpdGVtJ3MgbWFya2VyLiAqLwotICAgIHJlc3VsdCA9IGF0a190
ZXh0X3NldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQobGlzdEl0ZW0pLCAxKTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQocmVzdWx0LCA9PSwgRkFMU0UpOwotCi0gICAgLyogSXQgc2hvdWxkIGJlIHBvc3Np
YmxlIHRvIHBsYWNlIHRoZSBjYXJldCBpbnNpZGUgYW4gaXRlbSdzIHRleHQuICovCi0gICAgcmVz
dWx0ID0gYXRrX3RleHRfc2V0X2NhcmV0X29mZnNldChBVEtfVEVYVChsaXN0SXRlbSksIDUpOwot
ICAgIGdfYXNzZXJ0X2NtcGludChyZXN1bHQsID09LCBUUlVFKTsKLSAgICBvZmZzZXQgPSBhdGtf
dGV4dF9nZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhUKGxpc3RJdGVtKSk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KG9mZnNldCwgPT0sIDUpOwotCi0gICAgQXRrT2JqZWN0KiBwYW5lbCA9IGF0a19vYmpl
Y3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAzKTsKLSAgICBnX2Fzc2VydChBVEtfSVNf
T0JKRUNUKHBhbmVsKSk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShwYW5lbCkg
PT0gQVRLX1JPTEVfUEFORUwpOwotCi0gICAgQXRrT2JqZWN0KiBjb21ib0JveCA9IGF0a19vYmpl
Y3RfcmVmX2FjY2Vzc2libGVfY2hpbGQocGFuZWwsIDApOwotICAgIGdfYXNzZXJ0KEFUS19JU19P
QkpFQ1QoY29tYm9Cb3gpKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGNvbWJv
Qm94KSA9PSBBVEtfUk9MRV9DT01CT19CT1gpOwotCi0gICAgQXRrT2JqZWN0KiBtZW51UG9wdXAg
PSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGNvbWJvQm94LCAwKTsKLSAgICBnX2Fz
c2VydChBVEtfSVNfT0JKRUNUKG1lbnVQb3B1cCkpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3Rf
Z2V0X3JvbGUobWVudVBvcHVwKSA9PSBBVEtfUk9MRV9NRU5VKTsKLQotICAgIEF0a09iamVjdCog
Y29tYm9Cb3hPcHRpb24gPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG1lbnVQb3B1
cCwgMCk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX09CSkVDVChjb21ib0JveE9wdGlvbikpOwotICAg
IGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoY29tYm9Cb3hPcHRpb24pID09IEFUS19ST0xF
X01FTlVfSVRFTSk7Ci0KLSAgICAvKiBJdCdzIG5vdCBwb3NzaWJsZSB0byBwbGFjZSB0aGUgY2Fy
ZXQgaW5zaWRlIGFuIG9wdGlvbiBmb3IgYSBjb21ib2JveC4gKi8KLSAgICByZXN1bHQgPSBhdGtf
dGV4dF9zZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhUKGNvbWJvQm94T3B0aW9uKSwgMSk7Ci0gICAg
Z19hc3NlcnRfY21waW50KHJlc3VsdCwgPT0sIEZBTFNFKTsKLQotICAgIEF0a09iamVjdCogdGV4
dEVudHJ5ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChwYW5lbCwgMSk7Ci0gICAg
Z19hc3NlcnQoQVRLX0lTX09CSkVDVCh0ZXh0RW50cnkpKTsKLSAgICBnX2Fzc2VydChhdGtfb2Jq
ZWN0X2dldF9yb2xlKHRleHRFbnRyeSkgPT0gQVRLX1JPTEVfRU5UUlkpOwotCi0gICAgcmVzdWx0
ID0gYXRrX3RleHRfc2V0X2NhcmV0X29mZnNldChBVEtfVEVYVCh0ZXh0RW50cnkpLCA1KTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQocmVzdWx0LCA9PSwgVFJVRSk7Ci0gICAgb2Zmc2V0ID0gYXRrX3Rl
eHRfZ2V0X2NhcmV0X29mZnNldChBVEtfVEVYVCh0ZXh0RW50cnkpKTsKLSAgICBnX2Fzc2VydF9j
bXBpbnQob2Zmc2V0LCA9PSwgNSk7Ci0KLSAgICBBdGtPYmplY3QqIHRhYmxlID0gYXRrX29iamVj
dF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDQpOwotICAgIGdfYXNzZXJ0KEFUS19JU19P
QkpFQ1QodGFibGUpKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKHRhYmxlKSA9
PSBBVEtfUk9MRV9UQUJMRSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a19vYmplY3RfZ2V0X25f
YWNjZXNzaWJsZV9jaGlsZHJlbih0YWJsZSksID09LCA0KTsKLQotICAgIEF0a09iamVjdCogdGFi
bGVDZWxsID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZCh0YWJsZSwgMCk7Ci0gICAg
Z19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZSh0YWJsZUNlbGwpID09IEFUS19ST0xFX1RBQkxF
X0NFTEwpOwotICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQo
dGFibGVDZWxsKSwgMik7Ci0gICAgZ19hc3NlcnRfY21waW50KHJlc3VsdCwgPT0sIFRSVUUpOwot
ICAgIG9mZnNldCA9IGF0a190ZXh0X2dldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQodGFibGVDZWxs
KSk7Ci0gICAgZ19hc3NlcnRfY21waW50KG9mZnNldCwgPT0sIDIpOwotCi0gICAgZ19mcmVlKHRl
eHRDYXJldE1vdmVkUmVzdWx0KTsKLQotICAgIGdfb2JqZWN0X3VucmVmKHBhcmFncmFwaCk7Ci0g
ICAgZ19vYmplY3RfdW5yZWYobGluayk7Ci0gICAgZ19vYmplY3RfdW5yZWYobGlzdCk7Ci0gICAg
Z19vYmplY3RfdW5yZWYobGlzdEl0ZW0pOwotICAgIGdfb2JqZWN0X3VucmVmKHBhbmVsKTsKLSAg
ICBnX29iamVjdF91bnJlZihjb21ib0JveCk7Ci0gICAgZ19vYmplY3RfdW5yZWYobWVudVBvcHVw
KTsKLSAgICBnX29iamVjdF91bnJlZihjb21ib0JveE9wdGlvbik7Ci0gICAgZ19vYmplY3RfdW5y
ZWYodGV4dEVudHJ5KTsKLSAgICBnX29iamVjdF91bnJlZih0YWJsZSk7Ci0gICAgZ19vYmplY3Rf
dW5yZWYodGFibGVDZWxsKTsKLSAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKLX0KLQotc3Rh
dGljIHZvaWQgdGVzdFdlYmtpdEF0a0NhcmV0T2Zmc2V0c0FuZEV4dHJhbm91c1doaXRlU3BhY2Vz
KCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtp
dF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7Ci0gICAg
R3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9OwotICAgIGd0a193
aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7Ci0g
ICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIGNvbnRlbnRzV2l0aEV4dHJh
bmVvdXNXaGl0ZVNwYWNlcywgMCwgMCwgMCk7Ci0KLSAgICAvKiBFbmFibGUgY2FyZXQgYnJvd3Np
bmcuICovCi0gICAgV2ViS2l0V2ViU2V0dGluZ3MqIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3
X2dldF9zZXR0aW5ncyh3ZWJWaWV3KTsKLSAgICBnX29iamVjdF9zZXQoR19PQkpFQ1Qoc2V0dGlu
Z3MpLCAiZW5hYmxlLWNhcmV0LWJyb3dzaW5nIiwgVFJVRSwgTlVMTCk7Ci0KLSAgICAvKiBHZXQg
dG8gdGhlIGlubmVyIEF0a1RleHQgb2JqZWN0LiAqLwotICAgIEF0a09iamVjdCogb2JqZWN0ID0g
Z2V0V2ViQXJlYU9iamVjdCh3ZWJWaWV3KTsKLSAgICBnX2Fzc2VydChvYmplY3QpOwotICAgIG9i
amVjdCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAwKTsKLSAgICBn
X2Fzc2VydChvYmplY3QpOwotCi0gICAgQXRrVGV4dCogdGV4dE9iamVjdCA9IEFUS19URVhUKG9i
amVjdCk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQodGV4dE9iamVjdCkpOwotCi0gICAgZ2lu
dCBjaGFyYWN0ZXJDb3VudCA9IGF0a190ZXh0X2dldF9jaGFyYWN0ZXJfY291bnQodGV4dE9iamVj
dCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGNoYXJhY3RlckNvdW50LCA9PSwgMjUpOwotCi0gICAg
Z2Jvb2xlYW4gcmVzdWx0ID0gYXRrX3RleHRfc2V0X2NhcmV0X29mZnNldCh0ZXh0T2JqZWN0LCBj
aGFyYWN0ZXJDb3VudCAtIDEpOwotICAgIGdfYXNzZXJ0X2NtcGludChyZXN1bHQsID09LCBUUlVF
KTsKLQotICAgIGdpbnQgY2FyZXRPZmZzZXQgPSBhdGtfdGV4dF9nZXRfY2FyZXRfb2Zmc2V0KHRl
eHRPYmplY3QpOwotICAgIGdfYXNzZXJ0X2NtcGludChjYXJldE9mZnNldCwgPT0sIGNoYXJhY3Rl
ckNvdW50IC0gMSk7Ci0KLSAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfY2FyZXRfb2Zmc2V0KHRl
eHRPYmplY3QsIGNoYXJhY3RlckNvdW50KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQocmVzdWx0LCA9
PSwgVFJVRSk7Ci0KLSAgICBjYXJldE9mZnNldCA9IGF0a190ZXh0X2dldF9jYXJldF9vZmZzZXQo
dGV4dE9iamVjdCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGNhcmV0T2Zmc2V0LCA9PSwgY2hhcmFj
dGVyQ291bnQpOwotCi0gICAgZ19vYmplY3RfdW5yZWYob2JqZWN0KTsKLSAgICBnX29iamVjdF91
bnJlZih3ZWJWaWV3KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0NvbWJvQm94KCkK
LXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93
ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7Ci0gICAgR3Rr
QWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9OwotICAgIGd0a193aWRn
ZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7Ci0gICAg
d2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIGNvbWJvQm94U2VsZWN0b3IsIDAs
IDAsIDApOwotCi0gICAgQXRrT2JqZWN0KiBvYmplY3QgPSBnZXRXZWJBcmVhT2JqZWN0KHdlYlZp
ZXcpOwotICAgIGdfYXNzZXJ0KG9iamVjdCk7Ci0KLSAgICBBdGtPYmplY3QqIGZvcm1PYmplY3Qg
PSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMCk7Ci0gICAgZ19hc3Nl
cnQoZm9ybU9iamVjdCk7Ci0KLSAgICBBdGtPYmplY3QqIGNvbWJvQm94ID0gYXRrX29iamVjdF9y
ZWZfYWNjZXNzaWJsZV9jaGlsZChmb3JtT2JqZWN0LCAwKTsKLSAgICBnX2Fzc2VydChBVEtfSVNf
T0JKRUNUKGNvbWJvQm94KSk7Ci0KLSAgICBBdGtPYmplY3QqIG1lbnVQb3B1cCA9IGF0a19vYmpl
Y3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoY29tYm9Cb3gsIDApOwotICAgIGdfYXNzZXJ0KEFUS19J
U19PQkpFQ1QobWVudVBvcHVwKSk7Ci0KLSAgICBBdGtPYmplY3QqIGl0ZW0xID0gYXRrX29iamVj
dF9yZWZfYWNjZXNzaWJsZV9jaGlsZChtZW51UG9wdXAsIDApOwotICAgIGdfYXNzZXJ0KEFUS19J
U19PQkpFQ1QoaXRlbTEpKTsKLQotICAgIEF0a09iamVjdCogaXRlbTIgPSBhdGtfb2JqZWN0X3Jl
Zl9hY2Nlc3NpYmxlX2NoaWxkKG1lbnVQb3B1cCwgMSk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX09C
SkVDVChpdGVtMikpOwotCi0gICAgLyogQ2hlY2sgcm9sZXMuICovCi0gICAgZ19hc3NlcnQoYXRr
X29iamVjdF9nZXRfcm9sZShjb21ib0JveCkgPT0gQVRLX1JPTEVfQ09NQk9fQk9YKTsKLSAgICBn
X2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKG1lbnVQb3B1cCkgPT0gQVRLX1JPTEVfTUVOVSk7
Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShpdGVtMSkgPT0gQVRLX1JPTEVfTUVO
VV9JVEVNKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGl0ZW0yKSA9PSBBVEtf
Uk9MRV9NRU5VX0lURU0pOwotCi0gICAgLyogQ2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRo
ZSBBdGtTZWxlY3Rpb24gaW50ZXJmYWNlLiAqLwotICAgIGdfYXNzZXJ0KEFUS19JU19TRUxFQ1RJ
T04oY29tYm9Cb3gpKTsKLSAgICBBdGtTZWxlY3Rpb24qIGF0a1NlbGVjdGlvbiA9IEFUS19TRUxF
Q1RJT04oY29tYm9Cb3gpOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfc2VsZWN0aW9uX2dldF9z
ZWxlY3Rpb25fY291bnQoYXRrU2VsZWN0aW9uKSwgPT0sIDEpOwotICAgIGdfYXNzZXJ0KGF0a19z
ZWxlY3Rpb25faXNfY2hpbGRfc2VsZWN0ZWQoYXRrU2VsZWN0aW9uLCAwKSk7Ci0gICAgZ19hc3Nl
cnQoIWF0a19zZWxlY3Rpb25faXNfY2hpbGRfc2VsZWN0ZWQoYXRrU2VsZWN0aW9uLCAxKSk7Ci0g
ICAgQXRrT2JqZWN0KiBzZWxlY3RlZEl0ZW0gPSBhdGtfc2VsZWN0aW9uX3JlZl9zZWxlY3Rpb24o
YXRrU2VsZWN0aW9uLCAwKTsKLSAgICBnX2Fzc2VydChzZWxlY3RlZEl0ZW0gPT0gaXRlbTEpOwot
ICAgIGdfb2JqZWN0X3VucmVmKHNlbGVjdGVkSXRlbSk7Ci0KLSAgICAvKiBDaGVjayB0aGF0IHRo
ZSBtZW51IHBvcHVwIGhhcyAwIGxpbmtzIGFuZCBkb2Vzbid0IGNyYXNoIGZyb20gY2hlY2tpbmcu
ICovCi0gICAgZ2ludCBuTGlua3MgPSBhdGtfaHlwZXJ0ZXh0X2dldF9uX2xpbmtzKEFUS19IWVBF
UlRFWFQobWVudVBvcHVwKSk7Ci0gICAgZ19hc3NlcnRfY21waW50KG5MaW5rcywgPT0sIDApOwot
Ci0gICAgLyogQ2hlY2sgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgQXRrQWN0aW9uIGludGVy
ZmFjZS4gKi8KLSAgICBnX2Fzc2VydChBVEtfSVNfQUNUSU9OKGNvbWJvQm94KSk7Ci0gICAgQXRr
QWN0aW9uKiBhdGtBY3Rpb24gPSBBVEtfQUNUSU9OKGNvbWJvQm94KTsKLSAgICBnX2Fzc2VydF9j
bXBpbnQoYXRrX2FjdGlvbl9nZXRfbl9hY3Rpb25zKGF0a0FjdGlvbiksID09LCAxKTsKLSAgICBn
X2Fzc2VydChhdGtfYWN0aW9uX2RvX2FjdGlvbihhdGtBY3Rpb24sIDApKTsKLQotICAgIGdfYXNz
ZXJ0KEFUS19JU19BQ1RJT04obWVudVBvcHVwKSk7Ci0gICAgYXRrQWN0aW9uID0gQVRLX0FDVElP
TihtZW51UG9wdXApOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfYWN0aW9uX2dldF9uX2FjdGlv
bnMoYXRrQWN0aW9uKSwgPT0sIDEpOwotICAgIGdfYXNzZXJ0KGF0a19hY3Rpb25fZG9fYWN0aW9u
KGF0a0FjdGlvbiwgMCkpOwotCi0gICAgZ19hc3NlcnQoQVRLX0lTX0FDVElPTihpdGVtMSkpOwot
ICAgIGF0a0FjdGlvbiA9IEFUS19BQ1RJT04oaXRlbTEpOwotICAgIGdfYXNzZXJ0X2NtcGludChh
dGtfYWN0aW9uX2dldF9uX2FjdGlvbnMoYXRrQWN0aW9uKSwgPT0sIDEpOwotICAgIGdfYXNzZXJ0
KGF0a19hY3Rpb25fZG9fYWN0aW9uKGF0a0FjdGlvbiwgMCkpOwotCi0gICAgZ19hc3NlcnQoQVRL
X0lTX0FDVElPTihpdGVtMikpOwotICAgIGF0a0FjdGlvbiA9IEFUS19BQ1RJT04oaXRlbTIpOwot
ICAgIGdfYXNzZXJ0X2NtcGludChhdGtfYWN0aW9uX2dldF9uX2FjdGlvbnMoYXRrQWN0aW9uKSwg
PT0sIDEpOwotICAgIGdfYXNzZXJ0KGF0a19hY3Rpb25fZG9fYWN0aW9uKGF0a0FjdGlvbiwgMCkp
OwotCi0gICAgLyogQWZ0ZXIgc2VsZWN0aW5nIHRoZSBzZWNvbmQgaXRlbSwgc2VsZWN0aW9uIHNo
b3VsZCBoYXZlIGNoYW5nZWQuICovCi0gICAgZ19hc3NlcnRfY21waW50KGF0a19zZWxlY3Rpb25f
Z2V0X3NlbGVjdGlvbl9jb3VudChhdGtTZWxlY3Rpb24pLCA9PSwgMSk7Ci0gICAgZ19hc3NlcnQo
IWF0a19zZWxlY3Rpb25faXNfY2hpbGRfc2VsZWN0ZWQoYXRrU2VsZWN0aW9uLCAwKSk7Ci0gICAg
Z19hc3NlcnQoYXRrX3NlbGVjdGlvbl9pc19jaGlsZF9zZWxlY3RlZChhdGtTZWxlY3Rpb24sIDEp
KTsKLSAgICBzZWxlY3RlZEl0ZW0gPSBhdGtfc2VsZWN0aW9uX3JlZl9zZWxlY3Rpb24oYXRrU2Vs
ZWN0aW9uLCAwKTsKLSAgICBnX2Fzc2VydChzZWxlY3RlZEl0ZW0gPT0gaXRlbTIpOwotICAgIGdf
b2JqZWN0X3VucmVmKHNlbGVjdGVkSXRlbSk7Ci0KLSAgICBnX29iamVjdF91bnJlZihmb3JtT2Jq
ZWN0KTsKLSAgICBnX29iamVjdF91bnJlZihjb21ib0JveCk7Ci0gICAgZ19vYmplY3RfdW5yZWYo
bWVudVBvcHVwKTsKLSAgICBnX29iamVjdF91bnJlZihpdGVtMSk7Ci0gICAgZ19vYmplY3RfdW5y
ZWYoaXRlbTIpOwotICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwotfQotCi1zdGF0aWMgZ2No
YXIqIGxvYWRpbmdFdmVudHNSZXN1bHQgPSAwOwotCi1zdGF0aWMgdm9pZCB1cGRhdGVMb2FkaW5n
RXZlbnRzUmVzdWx0KGNvbnN0IGdjaGFyKiBzaWduYWxOYW1lKQotewotICAgIGdfYXNzZXJ0KHNp
Z25hbE5hbWUpOwotCi0gICAgZ2NoYXIqIHByZXZpb3VzUmVzdWx0ID0gbG9hZGluZ0V2ZW50c1Jl
c3VsdDsKLSAgICBsb2FkaW5nRXZlbnRzUmVzdWx0ID0gZ19zdHJkdXBfcHJpbnRmKCIlc3wlcyIs
IHByZXZpb3VzUmVzdWx0LCBzaWduYWxOYW1lKTsKLSAgICBnX2ZyZWUocHJldmlvdXNSZXN1bHQp
OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gZG9jdW1lbnRMb2FkaW5nRXZlbnRDYWxsYmFjayhHU2ln
bmFsSW52b2NhdGlvbkhpbnQgKnNpZ25hbEhpbnQsIGd1aW50IG51bVBhcmFtVmFsdWVzLCBjb25z
dCBHVmFsdWUgKnBhcmFtVmFsdWVzLCBncG9pbnRlciBkYXRhKQotewotICAgIC8vIEF0IGxlYXN0
IHdlIHNob3VsZCByZWNlaXZlIHRoZSBpbnN0YW5jZSBlbWl0dGluZyB0aGUgc2lnbmFsLgotICAg
IGlmIChudW1QYXJhbVZhbHVlcyA8IDEpCi0gICAgICAgIHJldHVybiBUUlVFOwotCi0gICAgR1Np
Z25hbFF1ZXJ5IHNpZ25hbF9xdWVyeTsKLSAgICBnX3NpZ25hbF9xdWVyeShzaWduYWxIaW50LT5z
aWduYWxfaWQsICZzaWduYWxfcXVlcnkpOwotCi0gICAgdXBkYXRlTG9hZGluZ0V2ZW50c1Jlc3Vs
dChzaWduYWxfcXVlcnkuc2lnbmFsX25hbWUpOwotICAgIHJldHVybiBUUlVFOwotfQotCi1zdGF0
aWMgdm9pZCB0ZXN0V2Via2l0QXRrRG9jdW1lbnRMb2FkaW5nRXZlbnRzKCkKLXsKLSAgICBXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXco
KSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7Ci0gICAgR3RrQWxsb2NhdGlvbiBh
bGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9OwotICAgIGd0a193aWRnZXRfc2l6ZV9hbGxv
Y2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7Ci0KLSAgICAvKiBDb25uZWN0
IGdsb2JhbGx5IHRvIHNlZSB0aG9zZSBldmVudHMgZHVyaW5nIGEgZnV0dXJlIGxvYWQuICovCi0g
ICAgZ3VpbnQgbG9hZENvbXBsZXRlTGlzdGVuZXJJZCA9IGF0a19hZGRfZ2xvYmFsX2V2ZW50X2xp
c3RlbmVyKGRvY3VtZW50TG9hZGluZ0V2ZW50Q2FsbGJhY2ssICJBVEs6QXRrRG9jdW1lbnQ6bG9h
ZC1jb21wbGV0ZSIpOwotCi0gICAgLyogRG8gdGhlIGxvYWQsIHNvIHdlIGNhbiBzZWUgdGhvc2Ug
ZXZlbnRzIGhhcHBlbmluZy4gKi8KLSAgICBsb2FkaW5nRXZlbnRzUmVzdWx0ID0gZ19zdHJkdXAo
IiIpOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LCBjb250ZW50cywg
MCwgMCwgMCk7Ci0KLSAgICAvKiBUcmlnZ2VyIHRoZSBjcmVhdGlvbiBvZiB0aGUgZnVsbCBhY2Nl
c3NpYmlsaXR5IGhpZXJhcmNoeSBieQotICAgICAgIGFza2luZyBmb3IgdGhlIHdlYkFyZWEgb2Jq
ZWN0LCBzbyB3ZSBjYW4gbGlzdGVuIHRvIGV2ZW50cy4gKi8KLSAgICBnZXRXZWJBcmVhT2JqZWN0
KHdlYlZpZXcpOwotCi0gICAgYXRrX3JlbW92ZV9nbG9iYWxfZXZlbnRfbGlzdGVuZXIobG9hZENv
bXBsZXRlTGlzdGVuZXJJZCk7Ci0KLSAgICBnX2Fzc2VydF9jbXBzdHIobG9hZGluZ0V2ZW50c1Jl
c3VsdCwgPT0sICJ8bG9hZC1jb21wbGV0ZSIpOwotCi0gICAgZ19mcmVlKGxvYWRpbmdFdmVudHNS
ZXN1bHQpOwotICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwotfQotCi1zdGF0aWMgdm9pZCB0
ZXN0V2Via2l0QXRrRW1iZWRkZWRPYmplY3RzKCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmpl
Y3RfcmVmX3Npbmsod2ViVmlldyk7Ci0gICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAw
LCAwLCA4MDAsIDYwMCB9OwotICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VU
KHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5n
KHdlYlZpZXcsIGVtYmVkZGVkT2JqZWN0cywgMCwgMCwgMCk7Ci0KLSAgICBBdGtPYmplY3QqIG9i
amVjdCA9IGdldFdlYkFyZWFPYmplY3Qod2ViVmlldyk7Ci0gICAgZ19hc3NlcnQob2JqZWN0KTsK
LQotICAgIEF0a1RleHQqIHBhcmFncmFwaDEgPSBBVEtfVEVYVChhdGtfb2JqZWN0X3JlZl9hY2Nl
c3NpYmxlX2NoaWxkKG9iamVjdCwgMCkpOwotICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHBhcmFn
cmFwaDEpKTsKLSAgICBnX2Fzc2VydChBVEtfSVNfSFlQRVJURVhUKHBhcmFncmFwaDEpKTsKLQot
ICAgIGdpbnQgbkxpbmtzID0gYXRrX2h5cGVydGV4dF9nZXRfbl9saW5rcyhBVEtfSFlQRVJURVhU
KHBhcmFncmFwaDEpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQobkxpbmtzLCA9PSwgMik7Ci0KLSAg
ICBBdGtIeXBlcmxpbmsqIGhMaW5rID0gYXRrX2h5cGVydGV4dF9nZXRfbGluayhBVEtfSFlQRVJU
RVhUKHBhcmFncmFwaDEpLCAwKTsKLSAgICBnX2Fzc2VydChBVEtfSFlQRVJMSU5LKGhMaW5rKSk7
Ci0gICAgQXRrT2JqZWN0KiBoTGlua09iamVjdCA9IGF0a19oeXBlcmxpbmtfZ2V0X29iamVjdCho
TGluaywgMCk7Ci0gICAgZ19hc3NlcnQoQVRLX09CSkVDVChoTGlua09iamVjdCkpOwotICAgIGdf
YXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoaExpbmtPYmplY3QpID09IEFUS19ST0xFX0NIRUNL
X0JPWCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0X3N0YXJ0X2luZGV4
KGhMaW5rKSwgPT0sIDgpOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9l
bmRfaW5kZXgoaExpbmspLCA9PSwgOSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBlcmxp
bmtfZ2V0X25fYW5jaG9ycyhoTGluayksID09LCAxKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoYXRr
X2h5cGVybGlua19nZXRfdXJpKGhMaW5rLCAwKSwgPT0sIDApOwotCi0gICAgQXRrVGV4dCogcGFy
YWdyYXBoMiA9IEFUS19URVhUKGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0
LCAxKSk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX0hZUEVSVEVYVChwYXJhZ3JhcGgyKSk7Ci0KLSAg
ICBuTGlua3MgPSBhdGtfaHlwZXJ0ZXh0X2dldF9uX2xpbmtzKEFUS19IWVBFUlRFWFQocGFyYWdy
YXBoMikpOwotICAgIGdfYXNzZXJ0X2NtcGludChuTGlua3MsID09LCAxKTsKLQotICAgIGhMaW5r
ID0gYXRrX2h5cGVydGV4dF9nZXRfbGluayhBVEtfSFlQRVJURVhUKHBhcmFncmFwaDIpLCAwKTsK
LSAgICBnX2Fzc2VydChBVEtfSFlQRVJMSU5LKGhMaW5rKSk7Ci0gICAgaExpbmtPYmplY3QgPSBh
dGtfaHlwZXJsaW5rX2dldF9vYmplY3QoaExpbmssIDApOwotICAgIGdfYXNzZXJ0KEFUS19PQkpF
Q1QoaExpbmtPYmplY3QpKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGhMaW5r
T2JqZWN0KSA9PSBBVEtfUk9MRV9DT01CT19CT1gpOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtf
aHlwZXJsaW5rX2dldF9zdGFydF9pbmRleChoTGluayksID09LCA4KTsKLSAgICBnX2Fzc2VydF9j
bXBpbnQoYXRrX2h5cGVybGlua19nZXRfZW5kX2luZGV4KGhMaW5rKSwgPT0sIDkpOwotICAgIGdf
YXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9uX2FuY2hvcnMoaExpbmspLCA9PSwgMSk7
Ci0gICAgZ19hc3NlcnRfY21wc3RyKGF0a19oeXBlcmxpbmtfZ2V0X3VyaShoTGluaywgMCksID09
LCAwKTsKLQotICAgIEF0a1RleHQqIHBhcmFncmFwaDMgPSBBVEtfVEVYVChhdGtfb2JqZWN0X3Jl
Zl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMikpOwotICAgIGdfYXNzZXJ0KEFUS19JU19IWVBF
UlRFWFQocGFyYWdyYXBoMykpOwotCi0gICAgbkxpbmtzID0gYXRrX2h5cGVydGV4dF9nZXRfbl9s
aW5rcyhBVEtfSFlQRVJURVhUKHBhcmFncmFwaDMpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQobkxp
bmtzLCA9PSwgMSk7Ci0KLSAgICBoTGluayA9IGF0a19oeXBlcnRleHRfZ2V0X2xpbmsoQVRLX0hZ
UEVSVEVYVChwYXJhZ3JhcGgzKSwgMCk7Ci0gICAgZ19hc3NlcnQoQVRLX0hZUEVSTElOSyhoTGlu
aykpOwotICAgIGhMaW5rT2JqZWN0ID0gYXRrX2h5cGVybGlua19nZXRfb2JqZWN0KGhMaW5rLCAw
KTsKLSAgICBnX2Fzc2VydChBVEtfT0JKRUNUKGhMaW5rT2JqZWN0KSk7Ci0gICAgZ19hc3NlcnQo
YXRrX29iamVjdF9nZXRfcm9sZShoTGlua09iamVjdCkgPT0gQVRLX1JPTEVfUFVTSF9CVVRUT04p
OwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9zdGFydF9pbmRleChoTGlu
ayksID09LCAwKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfZW5kX2lu
ZGV4KGhMaW5rKSwgPT0sIDEpOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dl
dF9uX2FuY2hvcnMoaExpbmspLCA9PSwgMSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKGF0a19oeXBl
cmxpbmtfZ2V0X3VyaShoTGluaywgMCksID09LCAwKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKHBh
cmFncmFwaDEpOwotICAgIGdfb2JqZWN0X3VucmVmKHBhcmFncmFwaDIpOwotICAgIGdfb2JqZWN0
X3VucmVmKHBhcmFncmFwaDMpOwotICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwotfQotCi1z
dGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrR2V0SGVhZGVyc0luVGFibGUoKQotewotICAgIFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygp
KTsKLSAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKLSAgICBHdGtBbGxvY2F0aW9uIGFs
bG9jYXRpb24gPSB7IDAsIDAsIDgwMCwgNjAwIH07Ci0gICAgZ3RrX3dpZGdldF9zaXplX2FsbG9j
YXRlKEdUS19XSURHRVQod2ViVmlldyksICZhbGxvY2F0aW9uKTsKLSAgICB3ZWJraXRfd2ViX3Zp
ZXdfbG9hZF9zdHJpbmcod2ViVmlldywgY29udGVudHNJblRhYmxlV2l0aEhlYWRlcnMsIDAsIDAs
IDApOwotCi0gICAgQXRrT2JqZWN0KiBheFdlYlZpZXcgPSBnZXRXZWJBcmVhT2JqZWN0KHdlYlZp
ZXcpOwotICAgIGdfYXNzZXJ0KGF4V2ViVmlldyk7Ci0KLSAgICAvKiBDaGVjayB0YWJsZSB3aXRo
IGJvdGggY29sdW1uIGFuZCByb3cgaGVhZGVycy4gKi8KLSAgICBBdGtPYmplY3QqIHRhYmxlID0g
YXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChheFdlYlZpZXcsIDApOwotICAgIGdfYXNz
ZXJ0KHRhYmxlKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKHRhYmxlKSA9PSBB
VEtfUk9MRV9UQUJMRSk7Ci0KLSAgICBBdGtPYmplY3QqIGNvbEhlYWRlciA9IGF0a190YWJsZV9n
ZXRfY29sdW1uX2hlYWRlcihBVEtfVEFCTEUodGFibGUpLCAwKTsKLSAgICBnX2Fzc2VydChjb2xI
ZWFkZXIpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoY29sSGVhZGVyKSA9PSBB
VEtfUk9MRV9UQUJMRV9DRUxMKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9pbmRleF9p
bl9wYXJlbnQoY29sSGVhZGVyKSA9PSAwKTsKLQotICAgIGNvbEhlYWRlciA9IGF0a190YWJsZV9n
ZXRfY29sdW1uX2hlYWRlcihBVEtfVEFCTEUodGFibGUpLCAxKTsKLSAgICBnX2Fzc2VydChjb2xI
ZWFkZXIpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoY29sSGVhZGVyKSA9PSBB
VEtfUk9MRV9UQUJMRV9DRUxMKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9pbmRleF9p
bl9wYXJlbnQoY29sSGVhZGVyKSA9PSAxKTsKLQotICAgIGNvbEhlYWRlciA9IGF0a190YWJsZV9n
ZXRfY29sdW1uX2hlYWRlcihBVEtfVEFCTEUodGFibGUpLCAyKTsKLSAgICBnX2Fzc2VydChjb2xI
ZWFkZXIpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoY29sSGVhZGVyKSA9PSBB
VEtfUk9MRV9UQUJMRV9DRUxMKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9pbmRleF9p
bl9wYXJlbnQoY29sSGVhZGVyKSA9PSAyKTsKLQotICAgIGNvbEhlYWRlciA9IGF0a190YWJsZV9n
ZXRfY29sdW1uX2hlYWRlcihBVEtfVEFCTEUodGFibGUpLCAzKTsKLSAgICBnX2Fzc2VydChjb2xI
ZWFkZXIpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoY29sSGVhZGVyKSA9PSBB
VEtfUk9MRV9UQUJMRV9DRUxMKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9pbmRleF9p
bl9wYXJlbnQoY29sSGVhZGVyKSA9PSAyKTsKLQotICAgIEF0a09iamVjdCogcm93SGVhZGVyID0g
YXRrX3RhYmxlX2dldF9yb3dfaGVhZGVyKEFUS19UQUJMRSh0YWJsZSksIDApOwotICAgIGdfYXNz
ZXJ0KHJvd0hlYWRlcik7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShyb3dIZWFk
ZXIpID09IEFUS19ST0xFX1RBQkxFX0NFTEwpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0
X2luZGV4X2luX3BhcmVudChyb3dIZWFkZXIpID09IDApOwotCi0gICAgcm93SGVhZGVyID0gYXRr
X3RhYmxlX2dldF9yb3dfaGVhZGVyKEFUS19UQUJMRSh0YWJsZSksIDEpOwotICAgIGdfYXNzZXJ0
KHJvd0hlYWRlcik7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShyb3dIZWFkZXIp
ID09IEFUS19ST0xFX1RBQkxFX0NFTEwpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X2lu
ZGV4X2luX3BhcmVudChyb3dIZWFkZXIpID09IDMpOwotCi0gICAgcm93SGVhZGVyID0gYXRrX3Rh
YmxlX2dldF9yb3dfaGVhZGVyKEFUS19UQUJMRSh0YWJsZSksIDIpOwotICAgIGdfYXNzZXJ0KHJv
d0hlYWRlcik7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShyb3dIZWFkZXIpID09
IEFUS19ST0xFX1RBQkxFX0NFTEwpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X2luZGV4
X2luX3BhcmVudChyb3dIZWFkZXIpID09IDcpOwotCi0gICAgcm93SGVhZGVyID0gYXRrX3RhYmxl
X2dldF9yb3dfaGVhZGVyKEFUS19UQUJMRSh0YWJsZSksIDMpOwotICAgIGdfYXNzZXJ0KHJvd0hl
YWRlcik7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShyb3dIZWFkZXIpID09IEFU
S19ST0xFX1RBQkxFX0NFTEwpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X2luZGV4X2lu
X3BhcmVudChyb3dIZWFkZXIpID09IDcpOwotCi0gICAgZ19vYmplY3RfdW5yZWYodGFibGUpOwot
Ci0gICAgLyogQ2hlY2sgdGFibGUgd2l0aCBubyBoZWFkZXJzIGF0IGFsbC4gKi8KLSAgICB0YWJs
ZSA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoYXhXZWJWaWV3LCAxKTsKLSAgICBn
X2Fzc2VydCh0YWJsZSk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZSh0YWJsZSkg
PT0gQVRLX1JPTEVfVEFCTEUpOwotCi0gICAgY29sSGVhZGVyID0gYXRrX3RhYmxlX2dldF9jb2x1
bW5faGVhZGVyKEFUS19UQUJMRSh0YWJsZSksIDApOwotICAgIGdfYXNzZXJ0KGNvbEhlYWRlciA9
PSAwKTsKLQotICAgIGNvbEhlYWRlciA9IGF0a190YWJsZV9nZXRfY29sdW1uX2hlYWRlcihBVEtf
VEFCTEUodGFibGUpLCAxKTsKLSAgICBnX2Fzc2VydChjb2xIZWFkZXIgPT0gMCk7Ci0KLSAgICBy
b3dIZWFkZXIgPSBhdGtfdGFibGVfZ2V0X3Jvd19oZWFkZXIoQVRLX1RBQkxFKHRhYmxlKSwgMCk7
Ci0gICAgZ19hc3NlcnQocm93SGVhZGVyID09IDApOwotCi0gICAgcm93SGVhZGVyID0gYXRrX3Rh
YmxlX2dldF9yb3dfaGVhZGVyKEFUS19UQUJMRSh0YWJsZSksIDEpOwotICAgIGdfYXNzZXJ0KHJv
d0hlYWRlciA9PSAwKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKHRhYmxlKTsKLSAgICBnX29iamVj
dF91bnJlZih3ZWJWaWV3KTsKLX0KLQotc3RhdGljIGdpbnQgY29tcEF0a0F0dHJpYnV0ZShBdGtB
dHRyaWJ1dGUqIGExLCBBdGtBdHRyaWJ1dGUqIGEyKQotewotICAgIGdpbnQgc3RyY21wVmFsID0g
Z19zdHJjbXAwKGExLT5uYW1lLCBhMi0+bmFtZSk7Ci0gICAgaWYgKHN0cmNtcFZhbCkKLSAgICAg
ICAgcmV0dXJuIHN0cmNtcFZhbDsKLSAgICByZXR1cm4gZ19zdHJjbXAwKGExLT52YWx1ZSwgYTIt
PnZhbHVlKTsKLX0KLQotc3RhdGljIGdpbnQgY29tcEF0a0F0dHJpYnV0ZU5hbWUoQXRrQXR0cmli
dXRlKiBhMSwgQXRrQXR0cmlidXRlKiBhMikKLXsKLSAgICByZXR1cm4gZ19zdHJjbXAwKGExLT5u
YW1lLCBhMi0+bmFtZSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBhdGtBdHRyaWJ1dGVTZXRBdHRy
aWJ1dGVOYW1lSGFzVmFsdWUoQXRrQXR0cmlidXRlU2V0KiBzZXQsIGNvbnN0IGdjaGFyKiBhdHRy
aWJ1dGVOYW1lLCBjb25zdCBnY2hhciogdmFsdWUpCi17Ci0gICAgQXRrQXR0cmlidXRlIGF0Owot
ICAgIGF0Lm5hbWUgPSAoZ2NoYXIqKWF0dHJpYnV0ZU5hbWU7Ci0gICAgR1NMaXN0KiBlbGVtZW50
ID0gZ19zbGlzdF9maW5kX2N1c3RvbShzZXQsICZhdCwgKEdDb21wYXJlRnVuYyljb21wQXRrQXR0
cmlidXRlTmFtZSk7Ci0gICAgcmV0dXJuIGVsZW1lbnQgJiYgIWdfc3RyY21wMCgoKEF0a0F0dHJp
YnV0ZSopKGVsZW1lbnQtPmRhdGEpKS0+dmFsdWUsIHZhbHVlKTsKLX0KLQotc3RhdGljIGdib29s
ZWFuIGF0a0F0dHJpYnV0ZVNldENvbnRhaW5zQXR0cmlidXRlTmFtZShBdGtBdHRyaWJ1dGVTZXQq
IHNldCwgY29uc3QgZ2NoYXIqIGF0dHJpYnV0ZU5hbWUpCi17Ci0gICAgQXRrQXR0cmlidXRlIGF0
OwotICAgIGF0Lm5hbWUgPSAoZ2NoYXIqKWF0dHJpYnV0ZU5hbWU7Ci0gICAgcmV0dXJuIGdfc2xp
c3RfZmluZF9jdXN0b20oc2V0LCAmYXQsIChHQ29tcGFyZUZ1bmMpY29tcEF0a0F0dHJpYnV0ZU5h
bWUpID8gdHJ1ZSA6IGZhbHNlOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gYXRrQXR0cmlidXRlU2V0
QXR0cmlidXRlSGFzVmFsdWUoQXRrQXR0cmlidXRlU2V0KiBzZXQsIEF0a1RleHRBdHRyaWJ1dGUg
YXR0cmlidXRlLCBjb25zdCBnY2hhciogdmFsdWUpCi17Ci0gICAgcmV0dXJuIGF0a0F0dHJpYnV0
ZVNldEF0dHJpYnV0ZU5hbWVIYXNWYWx1ZShzZXQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFt
ZShhdHRyaWJ1dGUpLCB2YWx1ZSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBhdGtBdHRyaWJ1dGVT
ZXRBcmVFcXVhbChBdGtBdHRyaWJ1dGVTZXQqIHNldDEsIEF0a0F0dHJpYnV0ZVNldCogc2V0MikK
LXsKLSAgICBpZiAoIXNldDEpCi0gICAgICAgIHJldHVybiAhc2V0MjsKLQotICAgIHNldDEgPSBn
X3NsaXN0X3NvcnQoc2V0MSwgKEdDb21wYXJlRnVuYyljb21wQXRrQXR0cmlidXRlKTsKLSAgICBz
ZXQyID0gZ19zbGlzdF9zb3J0KHNldDIsIChHQ29tcGFyZUZ1bmMpY29tcEF0a0F0dHJpYnV0ZSk7
Ci0KLSAgICB3aGlsZSAoc2V0MSkgewotICAgICAgICBpZiAoIXNldDIgfHwgY29tcEF0a0F0dHJp
YnV0ZShzZXQxLT5kYXRhLCBzZXQyLT5kYXRhKSkKLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsK
LQotICAgICAgICBzZXQxID0gc2V0MS0+bmV4dDsKLSAgICAgICAgc2V0MiA9IHNldDItPm5leHQ7
Ci0gICAgfQotCi0gICAgcmV0dXJuICghc2V0Mik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJr
aXRBdGtUZXh0QXR0cmlidXRlcygpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdF
QktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0X3JlZl9z
aW5rKHdlYlZpZXcpOwotICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgODAw
LCA2MDAgfTsKLSAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3
KSwgJmFsbG9jYXRpb24pOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3
LCB0ZXh0V2l0aEF0dHJpYnV0ZXMsIDAsIDAsIDApOwotCi0gICAgQXRrT2JqZWN0KiBvYmplY3Qg
PSBnZXRXZWJBcmVhT2JqZWN0KHdlYlZpZXcpOwotICAgIGdfYXNzZXJ0KG9iamVjdCk7Ci0KLSAg
ICBBdGtPYmplY3QqIGNoaWxkID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmpl
Y3QsIDApOwotICAgIGdfYXNzZXJ0KGNoaWxkICYmIEFUS19JU19URVhUKGNoaWxkKSk7Ci0gICAg
QXRrVGV4dCogY2hpbGRUZXh0ID0gQVRLX1RFWFQoY2hpbGQpOwotCi0gICAgZ2ludCBzdGFydE9m
ZnNldDsKLSAgICBnaW50IGVuZE9mZnNldDsKLSAgICBBdGtBdHRyaWJ1dGVTZXQqIHNldDEgPSBh
dGtfdGV4dF9nZXRfcnVuX2F0dHJpYnV0ZXMoY2hpbGRUZXh0LCAwLCAmc3RhcnRPZmZzZXQsICZl
bmRPZmZzZXQpOwotICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDApOwotICAg
IGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCAxMik7Ci0gICAgZ19hc3NlcnQoYXRrQXR0
cmlidXRlU2V0QXJlRXF1YWwoc2V0MSwgMCkpOwotCi0gICAgQXRrQXR0cmlidXRlU2V0KiBzZXQy
ID0gYXRrX3RleHRfZ2V0X3J1bl9hdHRyaWJ1dGVzKGNoaWxkVGV4dCwgMTUsICZzdGFydE9mZnNl
dCwgJmVuZE9mZnNldCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMTIp
OwotICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCAxNyk7Ci0gICAgZ19hc3NlcnQo
YXRrQXR0cmlidXRlU2V0QXR0cmlidXRlSGFzVmFsdWUoc2V0MiwgQVRLX1RFWFRfQVRUUl9TVFlM
RSwgIml0YWxpYyIpKTsKLQotICAgIEF0a0F0dHJpYnV0ZVNldCogc2V0MyA9IGF0a190ZXh0X2dl
dF9ydW5fYXR0cmlidXRlcyhjaGlsZFRleHQsIDE3LCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQp
OwotICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDE3KTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgNDApOwotICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNl
dEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDMsIEFUS19URVhUX0FUVFJfV0VJR0hULCAiNzAwIikpOwot
Ci0gICAgQXRrQXR0cmlidXRlU2V0KiBzZXQ0ID0gYXRrX3RleHRfZ2V0X2RlZmF1bHRfYXR0cmli
dXRlcyhjaGlsZFRleHQpOwotICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhh
c1ZhbHVlKHNldDQsIEFUS19URVhUX0FUVFJfU1RZTEUsICJub3JtYWwiKSk7Ci0gICAgZ19hc3Nl
cnQoYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlSGFzVmFsdWUoc2V0NCwgQVRLX1RFWFRfQVRUUl9K
VVNUSUZJQ0FUSU9OLCAicmlnaHQiKSk7Ci0gICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0QXR0
cmlidXRlSGFzVmFsdWUoc2V0NCwgQVRLX1RFWFRfQVRUUl9TSVpFLCAiMTQiKSk7Ci0gICAgYXRr
X2F0dHJpYnV0ZV9zZXRfZnJlZShzZXQxKTsKLSAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHNl
dDIpOwotICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0Myk7Ci0gICAgYXRrX2F0dHJpYnV0
ZV9zZXRfZnJlZShzZXQ0KTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGNoaWxkKTsKLSAgICBjaGls
ZCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAxKTsKLSAgICBnX2Fz
c2VydChjaGlsZCAmJiBBVEtfSVNfVEVYVChjaGlsZCkpOwotICAgIGNoaWxkVGV4dCA9IEFUS19U
RVhUKGNoaWxkKTsKLQotICAgIHNldDEgPSBhdGtfdGV4dF9nZXRfZGVmYXVsdF9hdHRyaWJ1dGVz
KGNoaWxkVGV4dCk7Ci0gICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlSGFzVmFs
dWUoc2V0MSwgQVRLX1RFWFRfQVRUUl9GQU1JTFlfTkFNRSwgIm1vbm9zcGFjZSIpKTsKLSAgICBn
X2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVIYXNWYWx1ZShzZXQxLCBBVEtfVEVYVF9B
VFRSX1NUWUxFLCAibm9ybWFsIikpOwotICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEF0dHJp
YnV0ZUhhc1ZhbHVlKHNldDEsIEFUS19URVhUX0FUVFJfU1RSSUtFVEhST1VHSCwgImZhbHNlIikp
OwotICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDEsIEFU
S19URVhUX0FUVFJfV0VJR0hULCAiNDAwIikpOwotICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNl
dEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDEsIEFUS19URVhUX0FUVFJfRkdfQ09MT1IsICIxMjAsMTIx
LDEyMiIpKTsKLQotICAgIHNldDIgPSBhdGtfdGV4dF9nZXRfcnVuX2F0dHJpYnV0ZXMoY2hpbGRU
ZXh0LCA0MywgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
c3RhcnRPZmZzZXQsID09LCA0Myk7Ci0gICAgZ19hc3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0s
IDgwKTsKLSAgICAvKiBDaGVja3MgdGhhdCBkZWZhdWx0IGF0dHJpYnV0ZXMgb2YgdGV4dCBhcmUg
bm90IHJldHVybmVkIHdoZW4gY2FsbGVkIHRvIGF0a190ZXh0X2dldF9ydW5fYXR0cmlidXRlcy4g
Ki8KLSAgICBnX2Fzc2VydCghYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlSGFzVmFsdWUoc2V0Miwg
QVRLX1RFWFRfQVRUUl9GR19DT0xPUiwgIjEyMCwxMjEsMTIyIikpOwotICAgIGdfYXNzZXJ0KGF0
a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDIsIEFUS19URVhUX0FUVFJfVU5ERVJM
SU5FLCAic2luZ2xlIikpOwotICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhh
c1ZhbHVlKHNldDIsIEFUS19URVhUX0FUVFJfQkdfQ09MT1IsICI4MCw4MSw4MiIpKTsKLSAgICBh
dGtfYXR0cmlidXRlX3NldF9mcmVlKHNldDEpOwotICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUo
c2V0Mik7Ci0gICAgZ19vYmplY3RfdW5yZWYoY2hpbGQpOwotCi0gICAgY2hpbGQgPSBhdGtfb2Jq
ZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMik7Ci0gICAgZ19hc3NlcnQoY2hpbGQg
JiYgQVRLX0lTX1RFWFQoY2hpbGQpKTsKLSAgICBjaGlsZFRleHQgPSBBVEtfVEVYVChjaGlsZCk7
Ci0KLSAgICBzZXQxID0gYXRrX3RleHRfZ2V0X3J1bl9hdHRyaWJ1dGVzKGNoaWxkVGV4dCwgMCwg
JnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAgICBzZXQyID0gYXRrX3RleHRfZ2V0X3J1bl9h
dHRyaWJ1dGVzKGNoaWxkVGV4dCwgMywgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAgICBn
X2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBcmVFcXVhbChzZXQxLCBzZXQyKSk7Ci0gICAgYXRrX2F0
dHJpYnV0ZV9zZXRfZnJlZShzZXQyKTsKLQotICAgIHNldDIgPSBhdGtfdGV4dF9nZXRfcnVuX2F0
dHJpYnV0ZXMoY2hpbGRUZXh0LCAxLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOwotICAgIHNl
dDMgPSBhdGtfdGV4dF9nZXRfcnVuX2F0dHJpYnV0ZXMoY2hpbGRUZXh0LCA1LCAmc3RhcnRPZmZz
ZXQsICZlbmRPZmZzZXQpOwotICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEFyZUVxdWFsKHNl
dDIsIHNldDMpKTsKLSAgICBnX2Fzc2VydCghYXRrQXR0cmlidXRlU2V0QXJlRXF1YWwoc2V0MSwg
c2V0MikpOwotICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0Myk7Ci0KLSAgICBzZXQzID0g
YXRrX3RleHRfZ2V0X3J1bl9hdHRyaWJ1dGVzKGNoaWxkVGV4dCwgMiwgJnN0YXJ0T2Zmc2V0LCAm
ZW5kT2Zmc2V0KTsKLSAgICBzZXQ0ID0gYXRrX3RleHRfZ2V0X3J1bl9hdHRyaWJ1dGVzKGNoaWxk
VGV4dCwgNiwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAgICBnX2Fzc2VydChhdGtBdHRy
aWJ1dGVTZXRBcmVFcXVhbChzZXQzLCBzZXQ0KSk7Ci0gICAgZ19hc3NlcnQoIWF0a0F0dHJpYnV0
ZVNldEFyZUVxdWFsKHNldDEsIHNldDMpKTsKLSAgICBnX2Fzc2VydCghYXRrQXR0cmlidXRlU2V0
QXJlRXF1YWwoc2V0Miwgc2V0MykpOwotICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0MSk7
Ci0gICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJlZShzZXQyKTsKLSAgICBhdGtfYXR0cmlidXRlX3Nl
dF9mcmVlKHNldDMpOwotICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0NCk7Ci0gICAgZ19v
YmplY3RfdW5yZWYoY2hpbGQpOwotCi0gICAgY2hpbGQgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3Np
YmxlX2NoaWxkKG9iamVjdCwgMyk7Ci0gICAgZ19hc3NlcnQoY2hpbGQgJiYgQVRLX0lTX1RFWFQo
Y2hpbGQpKTsKLSAgICBjaGlsZFRleHQgPSBBVEtfVEVYVChjaGlsZCk7Ci0gICAgc2V0MSA9IGF0
a190ZXh0X2dldF9ydW5fYXR0cmlidXRlcyhjaGlsZFRleHQsIDI0LCAmc3RhcnRPZmZzZXQsICZl
bmRPZmZzZXQpOwotICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDIxKTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMjUpOwotICAgIGdfYXNzZXJ0KGF0a0F0
dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDEsIEFUS19URVhUX0FUVFJfU1RSSUtFVEhS
T1VHSCwgInRydWUiKSk7Ci0KLSAgICBzZXQyID0gYXRrX3RleHRfZ2V0X3J1bl9hdHRyaWJ1dGVz
KGNoaWxkVGV4dCwgMjUsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMjUpOwotICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZz
ZXQsID09LCAzMCk7Ci0gICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0QXJlRXF1YWwoc2V0Miwg
MCkpOwotCi0gICAgc2V0MyA9IGF0a190ZXh0X2dldF9kZWZhdWx0X2F0dHJpYnV0ZXMoY2hpbGRU
ZXh0KTsKLSAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVIYXNWYWx1ZShzZXQz
LCBBVEtfVEVYVF9BVFRSX0pVU1RJRklDQVRJT04sICJjZW50ZXIiKSk7Ci0gICAgYXRrX2F0dHJp
YnV0ZV9zZXRfZnJlZShzZXQxKTsKLSAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHNldDIpOwot
ICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0Myk7Ci0KLSAgICBnX29iamVjdF91bnJlZihj
aGlsZCk7Ci19Ci0KLXN0YXRpYyBnY2hhciogdGV4dFNlbGVjdGlvbkNoYW5nZWRSZXN1bHQgPSAw
OwotCi1zdGF0aWMgdm9pZCB0ZXh0U2VsZWN0aW9uQ2hhbmdlZENhbGxiYWNrKEF0a1RleHQqIHRl
eHQsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQodGV4dCkpOwot
Ci0gICAgZ19mcmVlKHRleHRTZWxlY3Rpb25DaGFuZ2VkUmVzdWx0KTsKLSAgICBBdGtSb2xlIHJv
bGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKEFUS19PQkpFQ1QodGV4dCkpOwotICAgIGludCBzdGFy
dE9mZnNldCA9IDA7Ci0gICAgaW50IGVuZE9mZnNldCA9IDA7Ci0gICAgYXRrX3RleHRfZ2V0X3Nl
bGVjdGlvbihBVEtfVEVYVCh0ZXh0KSwgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAg
ICB0ZXh0U2VsZWN0aW9uQ2hhbmdlZFJlc3VsdCA9IGdfc3RyZHVwX3ByaW50ZigifCVzfCVkfCVk
fCIsIGF0a19yb2xlX2dldF9uYW1lKHJvbGUpLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKLX0K
LQotc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a1RleHRTZWxlY3Rpb25zKCkKLXsKLSAgICBXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXco
KSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7Ci0gICAgR3RrQWxsb2NhdGlvbiBh
bGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9OwotICAgIGd0a193aWRnZXRfc2l6ZV9hbGxv
Y2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7Ci0gICAgd2Via2l0X3dlYl92
aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIHRleHRGb3JTZWxlY3Rpb25zLCAwLCAwLCAwKTsKLQot
ICAgIEF0a09iamVjdCogb2JqZWN0ID0gZ2V0V2ViQXJlYU9iamVjdCh3ZWJWaWV3KTsKLSAgICBn
X2Fzc2VydChvYmplY3QpOwotCi0gICAgQXRrVGV4dCogcGFyYWdyYXBoMSA9IEFUS19URVhUKGF0
a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAwKSk7Ci0gICAgZ19hc3NlcnQo
QVRLX0lTX1RFWFQocGFyYWdyYXBoMSkpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QocGFyYWdyYXBo
MSwgInRleHQtc2VsZWN0aW9uLWNoYW5nZWQiLCBHX0NBTExCQUNLKHRleHRTZWxlY3Rpb25DaGFu
Z2VkQ2FsbGJhY2spLCAwKTsKLQotICAgIEF0a1RleHQqIHBhcmFncmFwaDIgPSBBVEtfVEVYVChh
dGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMSkpOwotICAgIGdfYXNzZXJ0
KEFUS19JU19URVhUKHBhcmFncmFwaDIpKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHBhcmFncmFw
aDIsICJ0ZXh0LXNlbGVjdGlvbi1jaGFuZ2VkIiwgR19DQUxMQkFDSyh0ZXh0U2VsZWN0aW9uQ2hh
bmdlZENhbGxiYWNrKSwgMCk7Ci0KLSAgICBBdGtUZXh0KiBsaW5rID0gQVRLX1RFWFQoYXRrX29i
amVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChBVEtfT0JKRUNUKHBhcmFncmFwaDIpLCAwKSk7Ci0g
ICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQobGluaykpOwotCi0gICAgQXRrT2JqZWN0KiBsaXN0ID0g
YXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDIpOwotICAgIGdfYXNzZXJ0
KEFUS19PQkpFQ1QobGlzdCkpOwotCi0gICAgQXRrVGV4dCogbGlzdEl0ZW0gPSBBVEtfVEVYVChh
dGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGxpc3QsIDApKTsKLSAgICBnX2Fzc2VydChB
VEtfSVNfVEVYVChsaXN0SXRlbSkpOwotCi0gICAgLyogRmlyc3QgcGFyYWdyYXBoIChzaW1wbGUg
dGV4dCkuICovCi0KLSAgICAvKiBCYXNpYyBpbml0aWFsIGNoZWNrcy4gKi8KLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoYXRrX3RleHRfZ2V0X25fc2VsZWN0aW9ucyhwYXJhZ3JhcGgxKSwgPT0sIDApOwot
Ci0gICAgZ2ludCBzdGFydE9mZnNldDsKLSAgICBnaW50IGVuZE9mZnNldDsKLSAgICBnY2hhciog
c2VsZWN0ZWRUZXh0ID0gYXRrX3RleHRfZ2V0X3NlbGVjdGlvbihwYXJhZ3JhcGgxLCAwLCAmc3Rh
cnRPZmZzZXQsICZlbmRPZmZzZXQpOwotICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwg
PT0sIDApOwotICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCAwKTsKLSAgICBnX2Fz
c2VydF9jbXBzdHIoc2VsZWN0ZWRUZXh0LCA9PSwgMCk7Ci0gICAgZ19mcmVlIChzZWxlY3RlZFRl
eHQpOwotCi0gICAgLyogVHJ5IHJlbW92aW5nIGEgbm9uIGV4aXN0aW5nICh5ZXQpIHNlbGVjdGlv
bi4gKi8KLSAgICBnYm9vbGVhbiByZXN1bHQgPSBhdGtfdGV4dF9yZW1vdmVfc2VsZWN0aW9uKHBh
cmFncmFwaDEsIDApOwotICAgIGdfYXNzZXJ0KCFyZXN1bHQpOwotCi0gICAgLyogVHJ5IHNldHRp
bmcgYSAwLWNoYXIgc2VsZWN0aW9uLiAqLwotICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9zZWxl
Y3Rpb24ocGFyYWdyYXBoMSwgMCwgNSwgNSk7Ci0gICAgZ19hc3NlcnQocmVzdWx0KTsKLQotICAg
IC8qIE1ha2UgYSBzZWxlY3Rpb24gYW5kIHRlc3QgaXQuICovCi0gICAgcmVzdWx0ID0gYXRrX3Rl
eHRfc2V0X3NlbGVjdGlvbihwYXJhZ3JhcGgxLCAwLCA1LCAyNSk7Ci0gICAgZ19hc3NlcnQocmVz
dWx0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX3RleHRfZ2V0X25fc2VsZWN0aW9ucyhwYXJh
Z3JhcGgxKSwgPT0sIDEpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0U2VsZWN0aW9uQ2hhbmdl
ZFJlc3VsdCwgPT0sICJ8cGFyYWdyYXBofDV8MjV8Iik7Ci0gICAgc2VsZWN0ZWRUZXh0ID0gYXRr
X3RleHRfZ2V0X3NlbGVjdGlvbihwYXJhZ3JhcGgxLCAwLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZz
ZXQpOwotICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDUpOwotICAgIGdfYXNz
ZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCAyNSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHNlbGVj
dGVkVGV4dCwgPT0sICJhZ3JhcGggd2l0aCBwbGFpbiB0ZSIpOwotICAgIGdfZnJlZSAoc2VsZWN0
ZWRUZXh0KTsKLQotICAgIC8qIFRyeSByZW1vdmluZyB0aGUgc2VsZWN0aW9uIGZyb20gb3RoZXIg
QXRrVGV4dCBvYmplY3QgKHNob3VsZCBmYWlsKS4gKi8KLSAgICByZXN1bHQgPSBhdGtfdGV4dF9y
ZW1vdmVfc2VsZWN0aW9uKHBhcmFncmFwaDIsIDApOwotICAgIGdfYXNzZXJ0KCFyZXN1bHQpOwot
Ci0gICAgLyogUmVtb3ZlIHRoZSBzZWxlY3Rpb24gYW5kIHRlc3QgZXZlcnl0aGluZyBhZ2Fpbi4g
Ki8KLSAgICByZXN1bHQgPSBhdGtfdGV4dF9yZW1vdmVfc2VsZWN0aW9uKHBhcmFncmFwaDEsIDAp
OwotICAgIGdfYXNzZXJ0KHJlc3VsdCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a190ZXh0X2dl
dF9uX3NlbGVjdGlvbnMocGFyYWdyYXBoMSksID09LCAwKTsKLSAgICBzZWxlY3RlZFRleHQgPSBh
dGtfdGV4dF9nZXRfc2VsZWN0aW9uKHBhcmFncmFwaDEsIDAsICZzdGFydE9mZnNldCwgJmVuZE9m
ZnNldCk7Ci0gICAgLyogTm93IG9mZnNldHMgc2hvdWxkIGJlIHRoZSBzYW1lLCBzZXQgdG8gdGhl
IGxhc3QgcG9zaXRpb24gb2YgdGhlIGNhcmV0LiAqLwotICAgIGdfYXNzZXJ0X2NtcGludChzdGFy
dE9mZnNldCwgPT0sIGVuZE9mZnNldCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0
LCA9PSwgMjUpOwotICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCAyNSk7Ci0gICAg
Z19hc3NlcnRfY21wc3RyKHNlbGVjdGVkVGV4dCwgPT0sIDApOwotICAgIGdfZnJlZSAoc2VsZWN0
ZWRUZXh0KTsKLQotICAgIC8qIFNlY29uZCBwYXJhZ3JhcGggKHRleHQgKyBsaW5rICsgdGV4dCku
ICovCi0KLSAgICAvKiBTZXQgYSBzZWxlY3Rpb24gcGFydGlhbGx5IGNvdmVyaW5nIHRoZSBsaW5r
IGFuZCB0ZXN0IGl0LiAqLwotICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9zZWxlY3Rpb24ocGFy
YWdyYXBoMiwgMCwgNywgMjEpOwotICAgIGdfYXNzZXJ0KHJlc3VsdCk7Ci0KLSAgICAvKiBUZXN0
IHRoZSBwYXJhZ3JhcGggZmlyc3QuICovCi0gICAgZ19hc3NlcnRfY21waW50KGF0a190ZXh0X2dl
dF9uX3NlbGVjdGlvbnMocGFyYWdyYXBoMiksID09LCAxKTsKLSAgICBzZWxlY3RlZFRleHQgPSBh
dGtfdGV4dF9nZXRfc2VsZWN0aW9uKHBhcmFncmFwaDIsIDAsICZzdGFydE9mZnNldCwgJmVuZE9m
ZnNldCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgNyk7Ci0gICAgZ19h
c3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0sIDIxKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc2Vs
ZWN0ZWRUZXh0LCA9PSwgInJhcGggd2l0aCBhIGxpIik7Ci0gICAgZ19mcmVlIChzZWxlY3RlZFRl
eHQpOwotCi0gICAgLyogTm93IHRlc3QganVzdCB0aGUgbGluay4gKi8KLSAgICBnX2Fzc2VydF9j
bXBpbnQoYXRrX3RleHRfZ2V0X25fc2VsZWN0aW9ucyhsaW5rKSwgPT0sIDEpOwotICAgIHNlbGVj
dGVkVGV4dCA9IGF0a190ZXh0X2dldF9zZWxlY3Rpb24obGluaywgMCwgJnN0YXJ0T2Zmc2V0LCAm
ZW5kT2Zmc2V0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAwKTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgNCk7Ci0gICAgZ19hc3NlcnRfY21wc3Ry
KHNlbGVjdGVkVGV4dCwgPT0sICJhIGxpIik7Ci0gICAgZ19mcmVlIChzZWxlY3RlZFRleHQpOwot
Ci0gICAgLyogTWFrZSBhIHNlbGVjdGlvbiBhZnRlciB0aGUgbGluayBhbmQgY2hlY2sgc2VsZWN0
aW9uIGZvciB0aGUgd2hvbGUgcGFyYWdyYXBoLiAqLwotICAgIHJlc3VsdCA9IGF0a190ZXh0X3Nl
dF9zZWxlY3Rpb24ocGFyYWdyYXBoMiwgMCwgMjcsIDM3KTsKLSAgICBnX2Fzc2VydChyZXN1bHQp
OwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfdGV4dF9nZXRfbl9zZWxlY3Rpb25zKHBhcmFncmFw
aDIpLCA9PSwgMSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRleHRTZWxlY3Rpb25DaGFuZ2VkUmVz
dWx0LCA9PSwgInxwYXJhZ3JhcGh8Mjd8Mzd8Iik7Ci0gICAgc2VsZWN0ZWRUZXh0ID0gYXRrX3Rl
eHRfZ2V0X3NlbGVjdGlvbihwYXJhZ3JhcGgyLCAwLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQp
OwotICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDI3KTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMzcpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3Rl
ZFRleHQsID09LCAidGhlIG1pZGRsZSIpOwotICAgIGdfZnJlZSAoc2VsZWN0ZWRUZXh0KTsKLQot
ICAgIC8qIFJlbW92ZSBzZWxlY3Rpb25zIGFuZCB0ZXh0IGV2ZXJ5dGhpbmcgYWdhaW4uICovCi0g
ICAgcmVzdWx0ID0gYXRrX3RleHRfcmVtb3ZlX3NlbGVjdGlvbihwYXJhZ3JhcGgyLCAwKTsKLSAg
ICBnX2Fzc2VydChyZXN1bHQpOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfdGV4dF9nZXRfbl9z
ZWxlY3Rpb25zKHBhcmFncmFwaDIpLCA9PSwgMCk7Ci0gICAgc2VsZWN0ZWRUZXh0ID0gYXRrX3Rl
eHRfZ2V0X3NlbGVjdGlvbihwYXJhZ3JhcGgyLCAwLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQp
OwotICAgIC8qIE5vdyBvZmZzZXRzIHNob3VsZCBiZSB0aGUgc2FtZSAobm8gc2VsZWN0aW9uKS4g
Ki8KLSAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCBlbmRPZmZzZXQpOwotICAg
IGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZFRleHQsID09LCAwKTsKLSAgICBnX2ZyZWUgKHNlbGVj
dGVkVGV4dCk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX3RleHRfZ2V0X25fc2VsZWN0aW9u
cyhsaW5rKSwgPT0sIDApOwotICAgIHNlbGVjdGVkVGV4dCA9IGF0a190ZXh0X2dldF9zZWxlY3Rp
b24obGluaywgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAgICAvKiBOb3cgb2Zmc2V0
cyBzaG91bGQgYmUgdGhlIHNhbWUgKG5vIHNlbGVjdGlvbikuICovCi0gICAgZ19hc3NlcnRfY21w
aW50KHN0YXJ0T2Zmc2V0LCA9PSwgZW5kT2Zmc2V0KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc2Vs
ZWN0ZWRUZXh0LCA9PSwgMCk7Ci0gICAgZ19mcmVlIChzZWxlY3RlZFRleHQpOwotCi0gICAgLyog
TGlzdCBpdGVtICovCi0KLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGxpc3QpID09
IEFUS19ST0xFX0xJU1QpOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfb2JqZWN0X2dldF9uX2Fj
Y2Vzc2libGVfY2hpbGRyZW4obGlzdCksID09LCAxKTsKLQotICAgIC8qIEl0J3Mgbm90IHBvc3Np
YmxlIHRvIHNlbGVjdCB0ZXh0IGluc2lkZSBhbiBpdGVtJ3MgbWFya2VyLiAqLwotICAgIHJlc3Vs
dCA9IGF0a190ZXh0X3NldF9zZWxlY3Rpb24gKGxpc3RJdGVtLCAwLCAwLCA5KTsKLSAgICBnX2Fz
c2VydCghcmVzdWx0KTsKLSAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfc2VsZWN0aW9uIChsaXN0
SXRlbSwgMCwgOSwgMSk7Ci0gICAgZ19hc3NlcnQoIXJlc3VsdCk7Ci0KLSAgICAvKiBJdCBzaG91
bGQgYmUgcG9zc2libGUgdG8gc2VsZWN0IHRleHQgaW5zaWRlIGFuIGl0ZW0ncyB0ZXh0LiAqLwot
ICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9zZWxlY3Rpb24gKGxpc3RJdGVtLCAwLCAzLCA5KTsK
LSAgICBnX2Fzc2VydChyZXN1bHQpOwotCi0gICAgZ19hc3NlcnRfY21waW50KGF0a190ZXh0X2dl
dF9uX3NlbGVjdGlvbnMobGlzdEl0ZW0pLCA9PSwgMSk7Ci0gICAgc2VsZWN0ZWRUZXh0ID0gYXRr
X3RleHRfZ2V0X3NlbGVjdGlvbihsaXN0SXRlbSwgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0
KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAzKTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgOSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVk
VGV4dCwgPT0sICJBIGxpc3QiKTsKLSAgICBnX2ZyZWUgKHNlbGVjdGVkVGV4dCk7Ci0KLSAgICBn
X2ZyZWUodGV4dFNlbGVjdGlvbkNoYW5nZWRSZXN1bHQpOwotCi0gICAgZ19vYmplY3RfdW5yZWYo
cGFyYWdyYXBoMSk7Ci0gICAgZ19vYmplY3RfdW5yZWYocGFyYWdyYXBoMik7Ci0gICAgZ19vYmpl
Y3RfdW5yZWYobGluayk7Ci0gICAgZ19vYmplY3RfdW5yZWYobGlzdCk7Ci0gICAgZ19vYmplY3Rf
dW5yZWYobGlzdEl0ZW0pOwotICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwotfQotCi1zdGF0
aWMgdm9pZCB0ZXN0V2Via2l0QXRrR2V0RXh0ZW50cygpCi17Ci0gICAgV2ViS2l0V2ViVmlldyog
d2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdf
b2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOwotICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9
IHsgMCwgMCwgODAwLCA2MDAgfTsKLSAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJ
REdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0
cmluZyh3ZWJWaWV3LCBjZW50ZXJlZENvbnRlbnRzLCAwLCAwLCAwKTsKLQotICAgIEF0a09iamVj
dCogb2JqZWN0ID0gZ2V0V2ViQXJlYU9iamVjdCh3ZWJWaWV3KTsKLSAgICBnX2Fzc2VydChvYmpl
Y3QpOwotCi0gICAgQXRrVGV4dCogc2hvcnRUZXh0MSA9IEFUS19URVhUKGF0a19vYmplY3RfcmVm
X2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAwKSk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQo
c2hvcnRUZXh0MSkpOwotICAgIEF0a1RleHQqIGxvbmdUZXh0ID0gQVRLX1RFWFQoYXRrX29iamVj
dF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDEpKTsKLSAgICBnX2Fzc2VydChBVEtfSVNf
VEVYVChsb25nVGV4dCkpOwotICAgIEF0a1RleHQqIHNob3J0VGV4dDIgPSBBVEtfVEVYVChhdGtf
b2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMikpOwotICAgIGdfYXNzZXJ0KEFU
S19JU19URVhUKHNob3J0VGV4dDIpKTsKLSAgICBBdGtUZXh0KiBtdWx0aWxpbmVUZXh0ID0gQVRL
X1RFWFQoYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDMpKTsKLSAgICBn
X2Fzc2VydChBVEtfSVNfVEVYVChtdWx0aWxpbmVUZXh0KSk7Ci0KLSAgICAvKiBTdGFydCB3aXRo
IHdpbmRvdyBleHRlbnRzLiAqLwotICAgIEF0a1RleHRSZWN0YW5nbGUgc2xpbmVfd2luZG93MSwg
c2xpbmVfd2luZG93MiwgbGxpbmVfd2luZG93LCBtbGluZV93aW5kb3c7Ci0gICAgYXRrX3RleHRf
Z2V0X3JhbmdlX2V4dGVudHMoc2hvcnRUZXh0MSwgMCwgMTAsIEFUS19YWV9XSU5ET1csICZzbGlu
ZV93aW5kb3cxKTsKLSAgICBhdGtfdGV4dF9nZXRfcmFuZ2VfZXh0ZW50cyhsb25nVGV4dCwgMCwg
NDQsIEFUS19YWV9XSU5ET1csICZsbGluZV93aW5kb3cpOwotICAgIGF0a190ZXh0X2dldF9yYW5n
ZV9leHRlbnRzKHNob3J0VGV4dDIsIDAsIDEwLCBBVEtfWFlfV0lORE9XLCAmc2xpbmVfd2luZG93
Mik7Ci0gICAgYXRrX3RleHRfZ2V0X3JhbmdlX2V4dGVudHMobXVsdGlsaW5lVGV4dCwgMCwgNjAs
IEFUS19YWV9XSU5ET1csICZtbGluZV93aW5kb3cpOwotCi0gICAgLyogQ2hlY2sgdmVydGljYWwg
bGluZSBwb3NpdGlvbi4gKi8KLSAgICBnX2Fzc2VydF9jbXBpbnQoc2xpbmVfd2luZG93MS55ICsg
c2xpbmVfd2luZG93MS5oZWlnaHQsIDw9LCBsbGluZV93aW5kb3cueSk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KGxsaW5lX3dpbmRvdy55ICsgbGxpbmVfd2luZG93LmhlaWdodCArIHNsaW5lX3dpbmRv
dzIuaGVpZ2h0LCA8PSwgbWxpbmVfd2luZG93LnkpOwotCi0gICAgLyogUGFyYWdyYXBocyAxIGFu
ZCAzIGhhdmUgaWRlbnRpY2FsIHRleHQgYW5kIGFsaWdubWVudC4gKi8KLSAgICBnX2Fzc2VydF9j
bXBpbnQoc2xpbmVfd2luZG93MS54LCA9PSwgc2xpbmVfd2luZG93Mi54KTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoc2xpbmVfd2luZG93MS53aWR0aCwgPT0sIHNsaW5lX3dpbmRvdzIud2lkdGgpOwot
ICAgIGdfYXNzZXJ0X2NtcGludChzbGluZV93aW5kb3cxLmhlaWdodCwgPT0sIHNsaW5lX3dpbmRv
dzIuaGVpZ2h0KTsKLQotICAgIC8qIEFsbCBsaW5lcyBzaG91bGQgYmUgdGhlIHNhbWUgaGVpZ2h0
OyBsaW5lIDIgaXMgdGhlIHdpZGVzdCBsaW5lLiAqLwotICAgIGdfYXNzZXJ0X2NtcGludChzbGlu
ZV93aW5kb3cxLmhlaWdodCwgPT0sIGxsaW5lX3dpbmRvdy5oZWlnaHQpOwotICAgIGdfYXNzZXJ0
X2NtcGludChzbGluZV93aW5kb3cxLndpZHRoLCA8LCBsbGluZV93aW5kb3cud2lkdGgpOwotCi0g
ICAgLyogTWFrZSBzdXJlIHRoZSBjaGFyYWN0ZXIgZXh0ZW50cyBqaXZlIHdpdGggdGhlIHJhbmdl
IGV4dGVudHMuICovCi0gICAgZ2ludCB4OwotICAgIGdpbnQgeTsKLSAgICBnaW50IHdpZHRoOwot
ICAgIGdpbnQgaGVpZ2h0OwotCi0gICAgLyogRmlyc3QgcGFyYWdyYXBoIChzaG9ydCB0ZXh0KS4g
Ki8KLSAgICBhdGtfdGV4dF9nZXRfY2hhcmFjdGVyX2V4dGVudHMoc2hvcnRUZXh0MSwgMCwgJngs
ICZ5LCAmd2lkdGgsICZoZWlnaHQsIEFUS19YWV9XSU5ET1cpOwotICAgIGdfYXNzZXJ0X2NtcGlu
dCh4LCA9PSwgc2xpbmVfd2luZG93MS54KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoeSwgPT0sIHNs
aW5lX3dpbmRvdzEueSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGhlaWdodCwgPT0sIHNsaW5lX3dp
bmRvdzEuaGVpZ2h0KTsKLQotICAgIGF0a190ZXh0X2dldF9jaGFyYWN0ZXJfZXh0ZW50cyhzaG9y
dFRleHQxLCA5LCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCwgQVRLX1hZX1dJTkRPVyk7Ci0gICAg
Z19hc3NlcnRfY21waW50KHgsID09LCBzbGluZV93aW5kb3cxLnggKyBzbGluZV93aW5kb3cxLndp
ZHRoIC0gd2lkdGgpOwotICAgIGdfYXNzZXJ0X2NtcGludCh5LCA9PSwgc2xpbmVfd2luZG93MS55
KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoaGVpZ2h0LCA9PSwgc2xpbmVfd2luZG93MS5oZWlnaHQp
OwotCi0gICAgLyogU2Vjb25kIHBhcmFncmFwaCAobG9uZyB0ZXh0KS4gKi8KLSAgICBhdGtfdGV4
dF9nZXRfY2hhcmFjdGVyX2V4dGVudHMobG9uZ1RleHQsIDAsICZ4LCAmeSwgJndpZHRoLCAmaGVp
Z2h0LCBBVEtfWFlfV0lORE9XKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoeCwgPT0sIGxsaW5lX3dp
bmRvdy54KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoeSwgPT0sIGxsaW5lX3dpbmRvdy55KTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQoaGVpZ2h0LCA9PSwgbGxpbmVfd2luZG93LmhlaWdodCk7Ci0KLSAg
ICBhdGtfdGV4dF9nZXRfY2hhcmFjdGVyX2V4dGVudHMobG9uZ1RleHQsIDQzLCAmeCwgJnksICZ3
aWR0aCwgJmhlaWdodCwgQVRLX1hZX1dJTkRPVyk7Ci0gICAgZ19hc3NlcnRfY21waW50KHgsID09
LCBsbGluZV93aW5kb3cueCArIGxsaW5lX3dpbmRvdy53aWR0aCAtIHdpZHRoKTsKLSAgICBnX2Fz
c2VydF9jbXBpbnQoeSwgPT0sIGxsaW5lX3dpbmRvdy55KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
aGVpZ2h0LCA9PSwgbGxpbmVfd2luZG93LmhlaWdodCk7Ci0KLSAgICAvKiBUaGlyZCBwYXJhZ3Jh
cGggKHNob3J0IHRleHQpLiAqLwotICAgIGF0a190ZXh0X2dldF9jaGFyYWN0ZXJfZXh0ZW50cyhz
aG9ydFRleHQyLCAwLCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCwgQVRLX1hZX1dJTkRPVyk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KHgsID09LCBzbGluZV93aW5kb3cyLngpOwotICAgIGdfYXNzZXJ0
X2NtcGludCh5LCA9PSwgc2xpbmVfd2luZG93Mi55KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoaGVp
Z2h0LCA9PSwgc2xpbmVfd2luZG93Mi5oZWlnaHQpOwotCi0gICAgYXRrX3RleHRfZ2V0X2NoYXJh
Y3Rlcl9leHRlbnRzKHNob3J0VGV4dDIsIDksICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0LCBBVEtf
WFlfV0lORE9XKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoeCwgPT0sIHNsaW5lX3dpbmRvdzIueCAr
IHNsaW5lX3dpbmRvdzIud2lkdGggLSB3aWR0aCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHksID09
LCBzbGluZV93aW5kb3cyLnkpOwotICAgIGdfYXNzZXJ0X2NtcGludChoZWlnaHQsID09LCBzbGlu
ZV93aW5kb3cyLmhlaWdodCk7Ci0KLSAgICAvKiBGb3VyIHBhcmFncmFwaCAoMyBsaW5lcyBtdWx0
aS1saW5lIHRleHQpLiAqLwotICAgIGF0a190ZXh0X2dldF9jaGFyYWN0ZXJfZXh0ZW50cyhtdWx0
aWxpbmVUZXh0LCAwLCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCwgQVRLX1hZX1dJTkRPVyk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KHgsID09LCBtbGluZV93aW5kb3cueCk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KHksID09LCBtbGluZV93aW5kb3cueSk7Ci0gICAgZ19hc3NlcnRfY21waW50KDMgKiBo
ZWlnaHQsID09LCBtbGluZV93aW5kb3cuaGVpZ2h0KTsKLQotICAgIGF0a190ZXh0X2dldF9jaGFy
YWN0ZXJfZXh0ZW50cyhtdWx0aWxpbmVUZXh0LCA1OSwgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQs
IEFUS19YWV9XSU5ET1cpOwotICAgIC8qIExhc3QgbGluZSB3b24ndCBmaWxsIHRoZSB3aG9sZSB3
aWR0aCBvZiB0aGUgcmVjdGFuZ2xlLiAqLwotICAgIGdfYXNzZXJ0X2NtcGludCh4LCA8PSwgbWxp
bmVfd2luZG93LnggKyBtbGluZV93aW5kb3cud2lkdGggLSB3aWR0aCk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KHksID09LCBtbGluZV93aW5kb3cueSArIG1saW5lX3dpbmRvdy5oZWlnaHQgLSBoZWln
aHQpOwotICAgIGdfYXNzZXJ0X2NtcGludChoZWlnaHQsIDw9LCBtbGluZV93aW5kb3cuaGVpZ2h0
KTsKLQotICAgIC8qIENoZWNrIHRoYXQgZXh0ZW50IGZvciBhIGZ1bGwgbGluZSBhcmUgdGhlIHNh
bWUgaGVpZ2h0IHRoYW4gZm9yCi0gICAgICAgYSBwYXJ0aWFsIHNlY3Rpb24gb2YgdGhlIHNhbWUg
bGluZSAqLwotICAgIGdpbnQgc3RhcnRPZmZzZXQ7Ci0gICAgZ2ludCBlbmRPZmZzZXQ7Ci0KLSNp
ZiAhQVRLX0NIRUNLX1ZFUlNJT04oMiwgMTAsIDApCi0gICAgZ2NoYXIqIHRleHQgPSBhdGtfdGV4
dF9nZXRfdGV4dF9hdF9vZmZzZXQobXVsdGlsaW5lVGV4dCwgMCwgQVRLX1RFWFRfQk9VTkRBUllf
TElORV9TVEFSVCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAgICBnX2ZyZWUodGV4dCk7
Ci0jZWxzZQotICAgIGdjaGFyKiB0ZXh0ID0gYXRrX3RleHRfZ2V0X3N0cmluZ19hdF9vZmZzZXQo
bXVsdGlsaW5lVGV4dCwgMCwgQVRLX1RFWFRfR1JBTlVMQVJJVFlfTElORSwgJnN0YXJ0T2Zmc2V0
LCAmZW5kT2Zmc2V0KTsKLSAgICBnX2ZyZWUodGV4dCk7Ci0jZW5kaWYKLQotICAgIEF0a1RleHRS
ZWN0YW5nbGUgZmxpbmVfd2luZG93OwotICAgIEF0a1RleHRSZWN0YW5nbGUgYWZsaW5lX3dpbmRv
dzsKLSAgICBhdGtfdGV4dF9nZXRfcmFuZ2VfZXh0ZW50cyhtdWx0aWxpbmVUZXh0LCBzdGFydE9m
ZnNldCwgZW5kT2Zmc2V0LCBBVEtfWFlfV0lORE9XLCAmZmxpbmVfd2luZG93KTsKLSAgICBhdGtf
dGV4dF9nZXRfcmFuZ2VfZXh0ZW50cyhtdWx0aWxpbmVUZXh0LCBzdGFydE9mZnNldCwgZW5kT2Zm
c2V0IC0gMSwgQVRLX1hZX1dJTkRPVywgJmFmbGluZV93aW5kb3cpOwotICAgIGdfYXNzZXJ0X2Nt
cGludChmbGluZV93aW5kb3cueCwgPT0sIGFmbGluZV93aW5kb3cueCk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KGZsaW5lX3dpbmRvdy55LCA9PSwgYWZsaW5lX3dpbmRvdy55KTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoZmxpbmVfd2luZG93LmhlaWdodCwgPT0sIGFmbGluZV93aW5kb3cuaGVpZ2h0KTsK
LQotICAgIGdfb2JqZWN0X3VucmVmKHNob3J0VGV4dDEpOwotICAgIGdfb2JqZWN0X3VucmVmKHNo
b3J0VGV4dDIpOwotICAgIGdfb2JqZWN0X3VucmVmKGxvbmdUZXh0KTsKLSAgICBnX29iamVjdF91
bnJlZihtdWx0aWxpbmVUZXh0KTsKLSAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKLX0KLQot
c3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0xheW91dEFuZERhdGFUYWJsZXMoKQotewotICAgIFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25l
dygpKTsKLSAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKLSAgICBHdGtBbGxvY2F0aW9u
IGFsbG9jYXRpb24gPSB7IDAsIDAsIDgwMCwgNjAwIH07Ci0gICAgZ3RrX3dpZGdldF9zaXplX2Fs
bG9jYXRlKEdUS19XSURHRVQod2ViVmlldyksICZhbGxvY2F0aW9uKTsKLSAgICB3ZWJraXRfd2Vi
X3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgbGF5b3V0QW5kRGF0YVRhYmxlcywgMCwgMCwgMCk7
Ci0KLSAgICBBdGtPYmplY3QqIG9iamVjdCA9IGdldFdlYkFyZWFPYmplY3Qod2ViVmlldyk7Ci0g
ICAgZ19hc3NlcnQob2JqZWN0KTsKLQotICAgIC8qIENoZWNrIHRoZSBub24tbGF5b3V0IHRhYmxl
IChkYXRhIHRhYmxlKS4gKi8KLQotICAgIEF0a09iamVjdCogdGFibGUxID0gYXRrX29iamVjdF9y
ZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDApOwotICAgIGdfYXNzZXJ0KEFUS19JU19UQUJM
RSh0YWJsZTEpKTsKLSAgICBBdGtBdHRyaWJ1dGVTZXQqIHNldDEgPSBhdGtfb2JqZWN0X2dldF9h
dHRyaWJ1dGVzKHRhYmxlMSk7Ci0gICAgZ19hc3NlcnQoc2V0MSk7Ci0gICAgZ19hc3NlcnQoIWF0
a0F0dHJpYnV0ZVNldENvbnRhaW5zQXR0cmlidXRlTmFtZShzZXQxLCAibGF5b3V0LWd1ZXNzIikp
OwotICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0MSk7Ci0KLSAgICAvKiBDaGVjayB0aGUg
bGF5b3V0IHRhYmxlLiAqLwotCi0gICAgQXRrT2JqZWN0KiB0YWJsZTIgPSBhdGtfb2JqZWN0X3Jl
Zl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMSk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX1RBQkxF
KHRhYmxlMikpOwotICAgIEF0a0F0dHJpYnV0ZVNldCogc2V0MiA9IGF0a19vYmplY3RfZ2V0X2F0
dHJpYnV0ZXModGFibGUyKTsKLSAgICBnX2Fzc2VydChzZXQyKTsKLSAgICBnX2Fzc2VydChhdGtB
dHRyaWJ1dGVTZXRDb250YWluc0F0dHJpYnV0ZU5hbWUoc2V0MiwgImxheW91dC1ndWVzcyIpKTsK
LSAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVOYW1lSGFzVmFsdWUoc2V0Miwg
ImxheW91dC1ndWVzcyIsICJ0cnVlIikpOwotICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0
Mik7Ci0KLSAgICBnX29iamVjdF91bnJlZih0YWJsZTEpOwotICAgIGdfb2JqZWN0X3VucmVmKHRh
YmxlMik7Ci0gICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRl
c3RXZWJraXRBdGtMaW5rc1dpdGhJbmxpbmVJbWFnZXMoKQotewotICAgIFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBn
X29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24g
PSB7IDAsIDAsIDgwMCwgNjAwIH07Ci0gICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19X
SURHRVQod2ViVmlldyksICZhbGxvY2F0aW9uKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9z
dHJpbmcod2ViVmlldywgbGlua3NXaXRoSW5saW5lSW1hZ2VzLCAwLCAwLCAwKTsKLQotICAgIEF0
a09iamVjdCogb2JqZWN0ID0gZ2V0V2ViQXJlYU9iamVjdCh3ZWJWaWV3KTsKLSAgICBnX2Fzc2Vy
dChvYmplY3QpOwotCi0gICAgLyogRmlyc3QgcGFyYWdyYXBoIChsaW5rIGF0IHRoZSBiZWdpbm5p
bmcpLiAqLwotICAgIEF0a09iamVjdCogcGFyYWdyYXBoID0gYXRrX29iamVjdF9yZWZfYWNjZXNz
aWJsZV9jaGlsZChvYmplY3QsIDApOwotICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHBhcmFncmFw
aCkpOwotICAgIGdpbnQgc3RhcnRPZmZzZXQ7Ci0gICAgZ2ludCBlbmRPZmZzZXQ7Ci0KLSNpZiAh
QVRLX0NIRUNLX1ZFUlNJT04oMiwgMTAsIDApCi0gICAgZ2NoYXIqIHRleHQgPSBhdGtfdGV4dF9n
ZXRfdGV4dF9hdF9vZmZzZXQoQVRLX1RFWFQocGFyYWdyYXBoKSwgMCwgQVRLX1RFWFRfQk9VTkRB
UllfTElORV9TVEFSVCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAgICBnX2Fzc2VydCh0
ZXh0KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGV4dCwgPT0sICJmb28gYmFyIGJheiIpOwotICAg
IGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDApOwotICAgIGdfYXNzZXJ0X2NtcGlu
dChlbmRPZmZzZXQsID09LCAxMSk7Ci0gICAgZ19mcmVlKHRleHQpOwotI2Vsc2UKLSAgICBnY2hh
ciogdGV4dCA9IGF0a190ZXh0X2dldF9zdHJpbmdfYXRfb2Zmc2V0KEFUS19URVhUKHBhcmFncmFw
aCksIDAsIEFUS19URVhUX0dSQU5VTEFSSVRZX0xJTkUsICZzdGFydE9mZnNldCwgJmVuZE9mZnNl
dCk7Ci0gICAgZ19hc3NlcnQodGV4dCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09LCAi
Zm9vIGJhciBiYXoiKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAwKTsK
LSAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMTEpOwotICAgIGdfZnJlZSh0ZXh0
KTsKLSNlbmRpZgotCi0gICAgZ19vYmplY3RfdW5yZWYocGFyYWdyYXBoKTsKLQotICAgIC8qIFNl
Y29uZCBwYXJhZ3JhcGggKGxpbmsgaW4gdGhlIG1pZGRsZSkuICovCi0gICAgcGFyYWdyYXBoID0g
YXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDEpOwotICAgIGdfYXNzZXJ0
KEFUS19JU19URVhUKHBhcmFncmFwaCkpOwotCi0jaWYgIUFUS19DSEVDS19WRVJTSU9OKDIsIDEw
LCAwKQotICAgIHRleHQgPSBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQoQVRLX1RFWFQocGFy
YWdyYXBoKSwgMCwgQVRLX1RFWFRfQk9VTkRBUllfTElORV9TVEFSVCwgJnN0YXJ0T2Zmc2V0LCAm
ZW5kT2Zmc2V0KTsKLSAgICBnX2Fzc2VydCh0ZXh0KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGV4
dCwgPT0sICJmb28gYmFyIGJheiIpOwotICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwg
PT0sIDApOwotICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCAxMSk7Ci0gICAgZ19m
cmVlKHRleHQpOwotI2Vsc2UKLSAgICB0ZXh0ID0gYXRrX3RleHRfZ2V0X3N0cmluZ19hdF9vZmZz
ZXQoQVRLX1RFWFQocGFyYWdyYXBoKSwgMCwgQVRLX1RFWFRfR1JBTlVMQVJJVFlfTElORSwgJnN0
YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAgICBnX2Fzc2VydCh0ZXh0KTsKLSAgICBnX2Fzc2Vy
dF9jbXBzdHIodGV4dCwgPT0sICJmb28gYmFyIGJheiIpOwotICAgIGdfYXNzZXJ0X2NtcGludChz
dGFydE9mZnNldCwgPT0sIDApOwotICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCAx
MSk7Ci0gICAgZ19mcmVlKHRleHQpOwotI2VuZGlmCi0KLSAgICBnX29iamVjdF91bnJlZihwYXJh
Z3JhcGgpOwotCi0gICAgLyogVGhpcmQgcGFyYWdyYXBoIChsaW5rIGF0IHRoZSBlbmQpLiAqLwot
ICAgIHBhcmFncmFwaCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAy
KTsKLSAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChwYXJhZ3JhcGgpKTsKLQotI2lmICFBVEtfQ0hF
Q0tfVkVSU0lPTigyLCAxMCwgMCkKLSAgICB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zm
c2V0KEFUS19URVhUKHBhcmFncmFwaCksIDAsIEFUS19URVhUX0JPVU5EQVJZX0xJTkVfU1RBUlQs
ICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7Ci0gICAgZ19hc3NlcnQodGV4dCk7Ci0gICAgZ19h
c3NlcnRfY21wc3RyKHRleHQsID09LCAiZm9vIGJhciBiYXoiKTsKLSAgICBnX2Fzc2VydF9jbXBp
bnQoc3RhcnRPZmZzZXQsID09LCAwKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9
PSwgMTEpOwotICAgIGdfZnJlZSh0ZXh0KTsKLSNlbHNlCi0gICAgdGV4dCA9IGF0a190ZXh0X2dl
dF9zdHJpbmdfYXRfb2Zmc2V0KEFUS19URVhUKHBhcmFncmFwaCksIDAsIEFUS19URVhUX0dSQU5V
TEFSSVRZX0xJTkUsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7Ci0gICAgZ19hc3NlcnQodGV4
dCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09LCAiZm9vIGJhciBiYXoiKTsKLSAgICBn
X2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAwKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
ZW5kT2Zmc2V0LCA9PSwgMTEpOwotICAgIGdfZnJlZSh0ZXh0KTsKLSNlbmRpZgotCi0gICAgZ19v
YmplY3RfdW5yZWYocGFyYWdyYXBoKTsKLSAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKLX0K
LQotc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0h5cGVydGV4dEFuZEh5cGVybGlua3MoKQotewot
ICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92
aWV3X25ldygpKTsKLSAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKLSAgICBHdGtBbGxv
Y2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDgwMCwgNjAwIH07Ci0gICAgZ3RrX3dpZGdldF9z
aXplX2FsbG9jYXRlKEdUS19XSURHRVQod2ViVmlldyksICZhbGxvY2F0aW9uKTsKLSAgICB3ZWJr
aXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgaHlwZXJ0ZXh0QW5kSHlwZXJsaW5rcywg
MCwgMCwgMCk7Ci0KLSAgICBBdGtPYmplY3QqIG9iamVjdCA9IGdldFdlYkFyZWFPYmplY3Qod2Vi
Vmlldyk7Ci0gICAgZ19hc3NlcnQob2JqZWN0KTsKLQotICAgIEF0a09iamVjdCogcGFyYWdyYXBo
MSA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAwKTsKLSAgICBnX2Fz
c2VydChBVEtfT0JKRUNUKHBhcmFncmFwaDEpKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dl
dF9yb2xlKHBhcmFncmFwaDEpID09IEFUS19ST0xFX1BBUkFHUkFQSCk7Ci0gICAgZ19hc3NlcnQo
QVRLX0lTX0hZUEVSVEVYVChwYXJhZ3JhcGgxKSk7Ci0KLSAgICAvKiBObyBsaW5rcyBpbiB0aGUg
Zmlyc3QgcGFyYWdyYXBoLiAqLwotICAgIGdpbnQgbkxpbmtzID0gYXRrX2h5cGVydGV4dF9nZXRf
bl9saW5rcyhBVEtfSFlQRVJURVhUKHBhcmFncmFwaDEpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
bkxpbmtzLCA9PSwgMCk7Ci0KLSAgICBBdGtPYmplY3QqIHBhcmFncmFwaDIgPSBhdGtfb2JqZWN0
X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMSk7Ci0gICAgZ19hc3NlcnQoQVRLX09CSkVD
VChwYXJhZ3JhcGgyKSk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShwYXJhZ3Jh
cGgyKSA9PSBBVEtfUk9MRV9QQVJBR1JBUEgpOwotICAgIGdfYXNzZXJ0KEFUS19JU19IWVBFUlRF
WFQocGFyYWdyYXBoMikpOwotCi0gICAgLyogQ2hlY2sgbGlua3MgaW4gdGhlIHNlY29uZCBwYXJh
Z3JhcGguCi0gICAgICAgbkxpbmtzID0gYXRrX2h5cGVydGV4dF9nZXRfbl9saW5rcyhBVEtfSFlQ
RVJURVhUKHBhcmFncmFwaDIpKTsKLSAgICAgICBnX2Fzc2VydF9jbXBpbnQobkxpbmtzLCA9PSwg
Myk7ICovCi0KLSAgICBBdGtIeXBlcmxpbmsqIGhMaW5rMSA9IGF0a19oeXBlcnRleHRfZ2V0X2xp
bmsoQVRLX0hZUEVSVEVYVChwYXJhZ3JhcGgyKSwgMCk7Ci0gICAgZ19hc3NlcnQoQVRLX0hZUEVS
TElOSyhoTGluazEpKTsKLSAgICBBdGtPYmplY3QqIGhMaW5rT2JqZWN0MSA9IGF0a19oeXBlcmxp
bmtfZ2V0X29iamVjdChoTGluazEsIDApOwotICAgIGdfYXNzZXJ0KEFUS19PQkpFQ1QoaExpbmtP
YmplY3QxKSk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShoTGlua09iamVjdDEp
ID09IEFUS19ST0xFX0xJTkspOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dl
dF9zdGFydF9pbmRleChoTGluazEpLCA9PSwgMCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a19o
eXBlcmxpbmtfZ2V0X2VuZF9pbmRleChoTGluazEpLCA9PSwgNik7Ci0gICAgZ19hc3NlcnRfY21w
aW50KGF0a19oeXBlcmxpbmtfZ2V0X25fYW5jaG9ycyhoTGluazEpLCA9PSwgMSk7Ci0gICAgZ19h
c3NlcnRfY21wc3RyKGF0a19oeXBlcmxpbmtfZ2V0X3VyaShoTGluazEsIDApLCA9PSwgImh0dHA6
Ly9mb28uYmFyLmJhei8iKTsKLQotICAgIEF0a0h5cGVybGluayogaExpbmsyID0gYXRrX2h5cGVy
dGV4dF9nZXRfbGluayhBVEtfSFlQRVJURVhUKHBhcmFncmFwaDIpLCAxKTsKLSAgICBnX2Fzc2Vy
dChBVEtfSFlQRVJMSU5LKGhMaW5rMikpOwotICAgIEF0a09iamVjdCogaExpbmtPYmplY3QyID0g
YXRrX2h5cGVybGlua19nZXRfb2JqZWN0KGhMaW5rMiwgMCk7Ci0gICAgZ19hc3NlcnQoQVRLX09C
SkVDVChoTGlua09iamVjdDIpKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGhM
aW5rT2JqZWN0MikgPT0gQVRLX1JPTEVfTElOSyk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a19o
eXBlcmxpbmtfZ2V0X3N0YXJ0X2luZGV4KGhMaW5rMiksID09LCAxMik7Ci0gICAgZ19hc3NlcnRf
Y21waW50KGF0a19oeXBlcmxpbmtfZ2V0X2VuZF9pbmRleChoTGluazIpLCA9PSwgMzIpOwotICAg
IGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9uX2FuY2hvcnMoaExpbmsyKSwgPT0s
IDEpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihhdGtfaHlwZXJsaW5rX2dldF91cmkoaExpbmsyLCAw
KSwgPT0sICJodHRwOi8vYmFyLmJhei5mb28vIik7Ci0KLSAgICBBdGtIeXBlcmxpbmsqIGhMaW5r
MyA9IGF0a19oeXBlcnRleHRfZ2V0X2xpbmsoQVRLX0hZUEVSVEVYVChwYXJhZ3JhcGgyKSwgMik7
Ci0gICAgZ19hc3NlcnQoQVRLX0hZUEVSTElOSyhoTGluazMpKTsKLSAgICBBdGtPYmplY3QqIGhM
aW5rT2JqZWN0MyA9IGF0a19oeXBlcmxpbmtfZ2V0X29iamVjdChoTGluazMsIDApOwotICAgIGdf
YXNzZXJ0KEFUS19PQkpFQ1QoaExpbmtPYmplY3QzKSk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVj
dF9nZXRfcm9sZShoTGlua09iamVjdDMpID09IEFUS19ST0xFX0xJTkspOwotICAgIGdfYXNzZXJ0
X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9zdGFydF9pbmRleChoTGluazMpLCA9PSwgNjUpOwot
ICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9lbmRfaW5kZXgoaExpbmszKSwg
PT0sIDc1KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfbl9hbmNob3Jz
KGhMaW5rMyksID09LCAxKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoYXRrX2h5cGVybGlua19nZXRf
dXJpKGhMaW5rMywgMCksID09LCAiaHR0cDovL2Jhei5mb28uYmFyLyIpOwotCi0gICAgQXRrT2Jq
ZWN0KiBsaXN0ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDIpOwot
ICAgIGdfYXNzZXJ0KEFUS19PQkpFQ1QobGlzdCkpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3Rf
Z2V0X3JvbGUobGlzdCkgPT0gQVRLX1JPTEVfTElTVCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0
a19vYmplY3RfZ2V0X25fYWNjZXNzaWJsZV9jaGlsZHJlbihsaXN0KSwgPT0sIDEpOwotCi0gICAg
QXRrT2JqZWN0KiBsaXN0SXRlbSA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQobGlz
dCwgMCk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQobGlzdEl0ZW0pKTsKLSAgICBnX2Fzc2Vy
dChBVEtfSVNfSFlQRVJURVhUKGxpc3RJdGVtKSk7Ci0KLSAgICBBdGtIeXBlcmxpbmsqIGhMaW5r
SW5MaXN0SXRlbSA9IGF0a19oeXBlcnRleHRfZ2V0X2xpbmsoQVRLX0hZUEVSVEVYVChsaXN0SXRl
bSksIDApOwotICAgIGdfYXNzZXJ0KEFUS19IWVBFUkxJTksoaExpbmtJbkxpc3RJdGVtKSk7Ci0g
ICAgQXRrT2JqZWN0KiBoTGlua09iamVjdCA9IGF0a19oeXBlcmxpbmtfZ2V0X29iamVjdChoTGlu
a0luTGlzdEl0ZW0sIDApOwotICAgIGdfYXNzZXJ0KEFUS19PQkpFQ1QoaExpbmtPYmplY3QpKTsK
LSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGhMaW5rT2JqZWN0KSA9PSBBVEtfUk9M
RV9MSU5LKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfc3RhcnRfaW5k
ZXgoaExpbmtJbkxpc3RJdGVtKSwgPT0sIDIwKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5
cGVybGlua19nZXRfZW5kX2luZGV4KGhMaW5rSW5MaXN0SXRlbSksID09LCA0Myk7Ci0gICAgZ19h
c3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0X25fYW5jaG9ycyhoTGlua0luTGlzdEl0ZW0p
LCA9PSwgMSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKGF0a19oeXBlcmxpbmtfZ2V0X3VyaShoTGlu
a0luTGlzdEl0ZW0sIDApLCA9PSwgImh0dHA6Ly9mb28uYmFyLmJhei8iKTsKLQotICAgIC8qIEZp
bmFsbHkgY2hlY2sgdGhlIEF0a0FjdGlvbiBpbnRlcmZhY2UgZm9yIGEgZ2l2ZW4gQXRrSHlwZXJs
aW5rLiAqLwotICAgIGdfYXNzZXJ0KEFUS19JU19BQ1RJT04oaExpbmsxKSk7Ci0gICAgZ19hc3Nl
cnRfY21waW50KGF0a19hY3Rpb25fZ2V0X25fYWN0aW9ucyhBVEtfQUNUSU9OKGhMaW5rMSkpLCA9
PSwgMSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKGF0a19hY3Rpb25fZ2V0X2tleWJpbmRpbmcoQVRL
X0FDVElPTihoTGluazEpLCAwKSwgPT0sICIiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoYXRrX2Fj
dGlvbl9nZXRfbmFtZShBVEtfQUNUSU9OKGhMaW5rMSksIDApLCA9PSwgImp1bXAiKTsKLSAgICBn
X2Fzc2VydChhdGtfYWN0aW9uX2RvX2FjdGlvbihBVEtfQUNUSU9OKGhMaW5rMSksIDApKTsKLQot
ICAgIGdfb2JqZWN0X3VucmVmKHBhcmFncmFwaDEpOwotICAgIGdfb2JqZWN0X3VucmVmKHBhcmFn
cmFwaDIpOwotICAgIGdfb2JqZWN0X3VucmVmKGxpc3QpOwotICAgIGdfb2JqZWN0X3VucmVmKGxp
c3RJdGVtKTsKLSAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKLX0KLQotc3RhdGljIHZvaWQg
dGVzdFdlYmtpdEF0a0xpc3RzT2ZJdGVtcygpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmll
dyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0
X3JlZl9zaW5rKHdlYlZpZXcpOwotICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwg
MCwgODAwLCA2MDAgfTsKLSAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVCh3
ZWJWaWV3KSwgJmFsbG9jYXRpb24pOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3
ZWJWaWV3LCBsaXN0c09mSXRlbXMsIDAsIDAsIDApOwotCi0gICAgQXRrT2JqZWN0KiBvYmplY3Qg
PSBnZXRXZWJBcmVhT2JqZWN0KHdlYlZpZXcpOwotICAgIGdfYXNzZXJ0KG9iamVjdCk7Ci0KLSAg
ICAvKiBVbm9yZGVyZWQgbGlzdC4gKi8KLQotICAgIEF0a09iamVjdCogdUxpc3QgPSBhdGtfb2Jq
ZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMCk7Ci0gICAgZ19hc3NlcnQoQVRLX09C
SkVDVCh1TGlzdCkpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUodUxpc3QpID09
IEFUS19ST0xFX0xJU1QpOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfb2JqZWN0X2dldF9uX2Fj
Y2Vzc2libGVfY2hpbGRyZW4odUxpc3QpLCA9PSwgMyk7Ci0KLSAgICBBdGtPYmplY3QqIGl0ZW0x
ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZCh1TGlzdCwgMCk7Ci0gICAgQXRrT2Jq
ZWN0KiBpdGVtMiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQodUxpc3QsIDEpOwot
ICAgIEF0a09iamVjdCogaXRlbTMgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKHVM
aXN0LCAyKTsKLQotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfb2JqZWN0X2dldF9uX2FjY2Vzc2li
bGVfY2hpbGRyZW4oaXRlbTEpLCA9PSwgMCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a19vYmpl
Y3RfZ2V0X25fYWNjZXNzaWJsZV9jaGlsZHJlbihpdGVtMiksID09LCAxKTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoYXRrX29iamVjdF9nZXRfbl9hY2Nlc3NpYmxlX2NoaWxkcmVuKGl0ZW0zKSwgPT0s
IDEpOwotCi0gICAgZ19vYmplY3RfdW5yZWYoaXRlbTEpOwotICAgIGdfb2JqZWN0X3VucmVmKGl0
ZW0yKTsKLSAgICBnX29iamVjdF91bnJlZihpdGVtMyk7Ci0KLSAgICAvKiBPcmRlcmVkIGxpc3Qu
ICovCi0KLSAgICBBdGtPYmplY3QqIG9MaXN0ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9j
aGlsZChvYmplY3QsIDEpOwotICAgIGdfYXNzZXJ0KEFUS19PQkpFQ1Qob0xpc3QpKTsKLSAgICBn
X2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKG9MaXN0KSA9PSBBVEtfUk9MRV9MSVNUKTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQoYXRrX29iamVjdF9nZXRfbl9hY2Nlc3NpYmxlX2NoaWxkcmVuKG9M
aXN0KSwgPT0sIDMpOwotCi0gICAgaXRlbTEgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2No
aWxkKG9MaXN0LCAwKTsKLSAgICBpdGVtMiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hp
bGQob0xpc3QsIDEpOwotICAgIGl0ZW0zID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGls
ZChvTGlzdCwgMik7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX29iamVjdF9nZXRfbl9hY2Nl
c3NpYmxlX2NoaWxkcmVuKGl0ZW0xKSwgPT0sIDApOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtf
b2JqZWN0X2dldF9uX2FjY2Vzc2libGVfY2hpbGRyZW4oaXRlbTIpLCA9PSwgMSk7Ci0gICAgZ19h
c3NlcnRfY21waW50KGF0a19vYmplY3RfZ2V0X25fYWNjZXNzaWJsZV9jaGlsZHJlbihpdGVtMyks
ID09LCAxKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGl0ZW0xKTsKLSAgICBnX29iamVjdF91bnJl
ZihpdGVtMik7Ci0gICAgZ19vYmplY3RfdW5yZWYoaXRlbTMpOwotCi0gICAgZ19vYmplY3RfdW5y
ZWYodUxpc3QpOwotICAgIGdfb2JqZWN0X3VucmVmKG9MaXN0KTsKLSAgICBnX29iamVjdF91bnJl
Zih3ZWJWaWV3KTsKLX0KLQotdHlwZWRlZiBlbnVtIHsKLSAgVEVYVF9DSEFOR0VfSU5TRVJUID0g
MSwKLSAgVEVYVF9DSEFOR0VfUkVNT1ZFID0gMgotfSBUZXh0Q2hhbmdlVHlwZTsKLQotc3RhdGlj
IGdjaGFyKiB0ZXh0Q2hhbmdlZFJlc3VsdCA9IDA7Ci0KLXN0YXRpYyB2b2lkIHRleHRDaGFuZ2Vk
Q2IoQXRrVGV4dCogdGV4dCwgZ2ludCBwb3MsIGdpbnQgbGVuLCBnY2hhciogbW9kaWZpZWRUZXh0
LCBncG9pbnRlciBkYXRhKQotewotICAgIGdfYXNzZXJ0KHRleHQgJiYgQVRLX0lTX09CSkVDVCh0
ZXh0KSk7Ci0KLSAgICBUZXh0Q2hhbmdlVHlwZSB0eXBlID0gR1BPSU5URVJfVE9fSU5UKGRhdGEp
OwotICAgIGdfZnJlZSh0ZXh0Q2hhbmdlZFJlc3VsdCk7Ci0gICAgdGV4dENoYW5nZWRSZXN1bHQg
PSBnX3N0cmR1cF9wcmludGYoInwlZHwlZHwlZHwnJXMnfCIsIHR5cGUsIHBvcywgbGVuLCBtb2Rp
ZmllZFRleHQpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrVGV4dENoYW5nZWROb3Rp
ZmljYXRpb25zKCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9W
SUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmll
dyk7Ci0gICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9Owot
ICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2Nh
dGlvbik7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIGZvcm1XaXRo
VGV4dElucHV0cywgMCwgMCwgMCk7Ci0KLSAgICBBdGtPYmplY3QqIG9iamVjdCA9IGdldFdlYkFy
ZWFPYmplY3Qod2ViVmlldyk7Ci0gICAgZ19hc3NlcnQob2JqZWN0KTsKLQotICAgIEF0a09iamVj
dCogZm9ybSA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAwKTsKLSAg
ICBnX2Fzc2VydChBVEtfSVNfT0JKRUNUKGZvcm0pKTsKLQotICAgIC8qIEZpcnN0IGNoZWNrIG5v
cm1hbCB0ZXh0IGVudHJpZXMuICovCi0gICAgQXRrT2JqZWN0KiB0ZXh0RW50cnkgPSBhdGtfb2Jq
ZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZvcm0sIDApOwotICAgIGdfYXNzZXJ0KEFUS19JU19F
RElUQUJMRV9URVhUKHRleHRFbnRyeSkpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3Jv
bGUoQVRLX09CSkVDVCh0ZXh0RW50cnkpKSA9PSBBVEtfUk9MRV9FTlRSWSk7Ci0KLSAgICBnX3Np
Z25hbF9jb25uZWN0KHRleHRFbnRyeSwgInRleHQtaW5zZXJ0IiwKLSAgICAgICAgICAgICAgICAg
ICAgIEdfQ0FMTEJBQ0sodGV4dENoYW5nZWRDYiksCi0gICAgICAgICAgICAgICAgICAgICBHSU5U
X1RPX1BPSU5URVIoVEVYVF9DSEFOR0VfSU5TRVJUKSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdCh0
ZXh0RW50cnksICJ0ZXh0LXJlbW92ZSIsCi0gICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNL
KHRleHRDaGFuZ2VkQ2IpLAotICAgICAgICAgICAgICAgICAgICAgR0lOVF9UT19QT0lOVEVSKFRF
WFRfQ0hBTkdFX1JFTU9WRSkpOwotCi0gICAgZ2ludCBwb3MgPSAwOwotICAgIGF0a19lZGl0YWJs
ZV90ZXh0X2luc2VydF90ZXh0KEFUS19FRElUQUJMRV9URVhUKHRleHRFbnRyeSksICJmb28gYmFy
IGJheiIsIDExLCAmcG9zKTsKLSAgICBjaGFyKiB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHQoQVRL
X1RFWFQodGV4dEVudHJ5KSwgMCwgLTEpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwg
ImZvbyBiYXIgYmF6Iik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRleHRDaGFuZ2VkUmVzdWx0LCA9
PSwgInwxfDB8MTF8J2ZvbyBiYXIgYmF6J3wiKTsKLSAgICBnX2ZyZWUodGV4dCk7Ci0KLSAgICBh
dGtfZWRpdGFibGVfdGV4dF9kZWxldGVfdGV4dChBVEtfRURJVEFCTEVfVEVYVCh0ZXh0RW50cnkp
LCA0LCA3KTsKLSAgICB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHQoQVRLX1RFWFQodGV4dEVudHJ5
KSwgMCwgLTEpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwgImZvbyAgYmF6Iik7Ci0g
ICAgZ19hc3NlcnRfY21wc3RyKHRleHRDaGFuZ2VkUmVzdWx0LCA9PSwgInwyfDR8M3wnYmFyJ3wi
KTsKLSAgICBnX2ZyZWUodGV4dCk7Ci0KLSAgICBwb3MgPSA0OwotICAgIGF0a19lZGl0YWJsZV90
ZXh0X2luc2VydF90ZXh0KEFUS19FRElUQUJMRV9URVhUKHRleHRFbnRyeSksICJxdXggcXV1eCB0
b2JlaWdub3JlZCIsIDgsICZwb3MpOwotICAgIHRleHQgPSBhdGtfdGV4dF9nZXRfdGV4dChBVEtf
VEVYVCh0ZXh0RW50cnkpLCAwLCAtMSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09LCAi
Zm9vIHF1eCBxdXV4IGJheiIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0Q2hhbmdlZFJlc3Vs
dCwgPT0sICJ8MXw0fDh8J3F1eCBxdXV4J3wiKTsKLSAgICBnX2ZyZWUodGV4dCk7Ci0KLSAgICAv
KiBOb3cgY2hlY2sgZm9yIHBhc3N3b3JkIGVudHJpZXMuICovCi0gICAgQXRrT2JqZWN0KiBwYXNz
d29yZEVudHJ5ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmb3JtLCAxKTsKLSAg
ICBnX2Fzc2VydChBVEtfSVNfRURJVEFCTEVfVEVYVChwYXNzd29yZEVudHJ5KSk7Ci0gICAgZ19h
c3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShBVEtfT0JKRUNUKHBhc3N3b3JkRW50cnkpKSA9PSBB
VEtfUk9MRV9QQVNTV09SRF9URVhUKTsKLQotICAgIGdfc2lnbmFsX2Nvbm5lY3QocGFzc3dvcmRF
bnRyeSwgInRleHQtaW5zZXJ0IiwKLSAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sodGV4
dENoYW5nZWRDYiksCi0gICAgICAgICAgICAgICAgICAgICBHSU5UX1RPX1BPSU5URVIoVEVYVF9D
SEFOR0VfSU5TRVJUKSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChwYXNzd29yZEVudHJ5LCAidGV4
dC1yZW1vdmUiLAotICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyh0ZXh0Q2hhbmdlZENi
KSwKLSAgICAgICAgICAgICAgICAgICAgIEdJTlRfVE9fUE9JTlRFUihURVhUX0NIQU5HRV9SRU1P
VkUpKTsKLQotICAgIHBvcyA9IDA7Ci0gICAgLyogQSBzaW5nbGUgYnVsbGV0IGNoYXJhY3RlciBp
cyAnXDM0MlwyMDBcMjQyJyAqLwotICAgIGF0a19lZGl0YWJsZV90ZXh0X2luc2VydF90ZXh0KEFU
S19FRElUQUJMRV9URVhUKHBhc3N3b3JkRW50cnkpLCAiZm9vYmFyIiwgNiwgJnBvcyk7Ci0gICAg
Z19hc3NlcnRfY21wc3RyKHRleHRDaGFuZ2VkUmVzdWx0LCA9PSwgInwxfDB8NnwnXDM0MlwyMDBc
MjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0Mlwy
MDBcMjQyJ3wiKTsKLSAgICB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHQoQVRLX1RFWFQocGFzc3dv
cmRFbnRyeSksIDAsIC0xKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGV4dCwgPT0sICJcMzQyXDIw
MFwyNDJcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDJcMzQy
XDIwMFwyNDIiKTsKLSAgICBnX2ZyZWUodGV4dCk7Ci0KLSAgICBhdGtfZWRpdGFibGVfdGV4dF9k
ZWxldGVfdGV4dChBVEtfRURJVEFCTEVfVEVYVChwYXNzd29yZEVudHJ5KSwgMiwgNCk7Ci0gICAg
Z19hc3NlcnRfY21wc3RyKHRleHRDaGFuZ2VkUmVzdWx0LCA9PSwgInwyfDJ8MnwnXDM0MlwyMDBc
MjQyXDM0MlwyMDBcMjQyJ3wiKTsKLQotICAgIHRleHQgPSBhdGtfdGV4dF9nZXRfdGV4dChBVEtf
VEVYVChwYXNzd29yZEVudHJ5KSwgMCwgLTEpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9
PSwgIlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MiIpOwot
ICAgIGdfZnJlZSh0ZXh0KTsKLQotICAgIHBvcyA9IDM7Ci0gICAgYXRrX2VkaXRhYmxlX3RleHRf
aW5zZXJ0X3RleHQoQVRLX0VESVRBQkxFX1RFWFQocGFzc3dvcmRFbnRyeSksICJxdXggdG9iZWln
bm9yZWQiLCAzLCAmcG9zKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGV4dENoYW5nZWRSZXN1bHQs
ID09LCAifDF8M3wzfCdcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDInfCIpOwot
Ci0gICAgdGV4dCA9IGF0a190ZXh0X2dldF90ZXh0KEFUS19URVhUKHBhc3N3b3JkRW50cnkpLCAw
LCAtMSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09LCAiXDM0MlwyMDBcMjQyXDM0Mlwy
MDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0
MlwyMDBcMjQyIik7Ci0gICAgZ19mcmVlKHRleHQpOwotCi0gICAgZ19mcmVlKHRleHRDaGFuZ2Vk
UmVzdWx0KTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGZvcm0pOwotICAgIGdfb2JqZWN0X3VucmVm
KHRleHRFbnRyeSk7Ci0gICAgZ19vYmplY3RfdW5yZWYocGFzc3dvcmRFbnRyeSk7Ci0gICAgZ19v
YmplY3RfdW5yZWYod2ViVmlldyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtQYXJl
bnRGb3JSb290T2JqZWN0KCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lU
X1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgR3RrQWxsb2NhdGlvbiBhbGxv
Y2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9OwotICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0
ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7Ci0gICAgd2Via2l0X3dlYl92aWV3
X2xvYWRfc3RyaW5nKHdlYlZpZXcsIGNvbnRlbnRzLCAwLCAwLCAwKTsKLQotICAgIC8qIFdlIG5l
ZWQgYSBwYXJlbnQgY29udGFpbmVyIHdpZGdldCBmb3IgdGhlIHdlYnZpZXcuICovCi0gICAgR3Rr
V2lkZ2V0KiBwYXJlbnRDb250YWluZXIgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExF
VkVMKTsKLSAgICBnX29iamVjdF9yZWZfc2luayhwYXJlbnRDb250YWluZXIpOwotICAgIGd0a19j
b250YWluZXJfYWRkKEdUS19DT05UQUlORVIocGFyZW50Q29udGFpbmVyKSwgR1RLX1dJREdFVCh3
ZWJWaWV3KSk7Ci0KLSAgICBBdGtPYmplY3QqIGF4UGFyZW50ID0gZ3RrX3dpZGdldF9nZXRfYWNj
ZXNzaWJsZShwYXJlbnRDb250YWluZXIpOwotICAgIGdfYXNzZXJ0KEFUS19JU19PQkpFQ1QoYXhQ
YXJlbnQpKTsKLQotICAgIEF0a09iamVjdCogYXhSb290ID0gZ3RrX3dpZGdldF9nZXRfYWNjZXNz
aWJsZShHVEtfV0lER0VUKHdlYlZpZXcpKTsKLSAgICBnX2Fzc2VydChBVEtfSVNfT0JKRUNUKGF4
Um9vdCkpOwotCi0gICAgLyogVGhlIGNoaWxkIGZvciB0aGUgcGFyZW50IGNvbnRhaW5lcidzIGFj
Y2Vzc2liaWxpdHkgb2JqZWN0Ci0gICAgICAgc2hvdWxkIGJlIHRoZSBhY2Nlc3NpYmlsaXR5IG9i
amVjdCBmb3IgdGhlIFdlYlZpZXcncyByb290LiAqLwotICAgIEF0a09iamVjdCogYXhQYXJlbnRD
aGlsZCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoYXhQYXJlbnQsIDApOwotICAg
IGdfYXNzZXJ0KGF4UGFyZW50Q2hpbGQgPT0gYXhSb290KTsKLQotICAgIC8qIEJvdHRvbS11cCBu
YXZpZ2F0aW9uIHNob3VsZCBtYXRjaCB0b3AtZG93biBvbmUuICovCi0gICAgZ19hc3NlcnQoYXRr
X29iamVjdF9nZXRfcGFyZW50KGF4UGFyZW50Q2hpbGQpID09IGF4UGFyZW50KTsKLQotICAgIGdf
b2JqZWN0X3VucmVmKGF4UGFyZW50Q2hpbGQpOwotICAgIGdfb2JqZWN0X3VucmVmKHBhcmVudENv
bnRhaW5lcik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtTZXRQYXJlbnRGb3JPYmpl
Y3QoKQotewotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Vi
a2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAs
IDAsIDgwMCwgNjAwIH07Ci0gICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQo
d2ViVmlldyksICZhbGxvY2F0aW9uKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmco
d2ViVmlldywgY29udGVudHMsIDAsIDAsIDApOwotCi0gICAgLyogUHV0IHRoZSB3ZWJ2aWV3IGlu
IGEgcGFyZW50IGNvbnRhaW5lciB3aWRnZXQgdG8gY2hlY2sgdGhhdCB0aGUKLSAgICAgICBub3Jt
YWwgYmVoYXZpb3VyIGtlZXBzIHdvcmtpbmcgYXMgZXhwZWN0ZWQgYnkgZGVmYXVsdC4gKi8KLSAg
ICBHdGtXaWRnZXQqIHBhcmVudENvbnRhaW5lciA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1df
VE9QTEVWRUwpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKHBhcmVudENvbnRhaW5lcik7Ci0gICAg
Z3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihwYXJlbnRDb250YWluZXIpLCBHVEtfV0lE
R0VUKHdlYlZpZXcpKTsKLQotICAgIEF0a09iamVjdCogYXhSb290ID0gZ3RrX3dpZGdldF9nZXRf
YWNjZXNzaWJsZShHVEtfV0lER0VUKHdlYlZpZXcpKTsKLSAgICBnX2Fzc2VydChBVEtfSVNfT0JK
RUNUKGF4Um9vdCkpOwotCi0gICAgQXRrT2JqZWN0KiBheFBhcmVudCA9IGd0a193aWRnZXRfZ2V0
X2FjY2Vzc2libGUocGFyZW50Q29udGFpbmVyKTsKLSAgICBnX2Fzc2VydChBVEtfSVNfT0JKRUNU
KGF4UGFyZW50KSk7Ci0KLSAgICAvKiBUaGUgcGFyZW50IG9mIHRoZSByb290IG9iamVjdCBpcyB0
aGUgcGFyZW50IGNvbnRhaW5lcidzIGExMXkgb2JqZWN0LiAqLwotICAgIGdfYXNzZXJ0KGF0a19v
YmplY3RfZ2V0X3BhcmVudChheFJvb3QpID09IGF4UGFyZW50KTsKLQotICAgIC8qIFdlIG5vdyBu
ZWVkIHRvIHVzZSBzb21ldGhpbmcgYXMgYSBhbiBhbHRlcm5hdGl2ZSBwYXJlbnQgZm9yCi0gICAg
ICAgdGhlIGExMXkgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgcm9vdCBvZiB0aGUgRE9NIHRy
ZWUuICovCi0gICAgR3RrV2lkZ2V0KiBhbHRlcm5hdGl2ZVBhcmVudCA9IGd0a19idXR0b25fbmV3
KCk7Ci0gICAgZ19vYmplY3RfcmVmX3NpbmsoYWx0ZXJuYXRpdmVQYXJlbnQpOwotCi0gICAgQXRr
T2JqZWN0KiBheEFsdGVybmF0aXZlUGFyZW50ID0gZ3RrX3dpZGdldF9nZXRfYWNjZXNzaWJsZShh
bHRlcm5hdGl2ZVBhcmVudCk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX09CSkVDVChheEFsdGVybmF0
aXZlUGFyZW50KSk7Ci0KLSAgICAvKiBNYW51YWxseSBzZXQgdGhlIGFsdGVybmF0aXZlIHBhcmVu
dCdzIGFjY2Vzc2liaWxpdHkgb2JqZWN0IGFzCi0gICAgICAgdGhlIHBhcmVudCBmb3IgdGhlIFdl
YktpdCBhY2Nlc3NpYmlsaXR5IHJvb3Qgb2JqZWN0IGFuZCBjaGVjay4gKi8KLSAgICBhdGtfb2Jq
ZWN0X3NldF9wYXJlbnQoYXhSb290LCBheEFsdGVybmF0aXZlUGFyZW50KTsKLSAgICBnX2Fzc2Vy
dChhdGtfb2JqZWN0X2dldF9wYXJlbnQoYXhSb290KSA9PSBheEFsdGVybmF0aXZlUGFyZW50KTsK
LQotICAgIGdfb2JqZWN0X3VucmVmKGFsdGVybmF0aXZlUGFyZW50KTsKLSAgICBnX29iamVjdF91
bnJlZihwYXJlbnRDb250YWluZXIpOwotfQotCi0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLXN0
YXRpYyB2b2lkIGluaXRpYWxpemVUZXN0aW5nRnJhbWV3b3JrKGludCBhcmdjLCBjaGFyKiogYXJn
dikKLXsKLSAgICAvKiBFbnN1cmUgR0FJTCBpcyB0aGUgb25seSBtb2R1bGUgbG9hZGVkLiAqLwot
ICAgIGdfc2V0ZW52KCJHVEtfTU9EVUxFUyIsICJnYWlsIiwgVFJVRSk7Ci0KLSAgICAvKiBGb2xs
b3dpbmcgbGluZXMgd2VyZSB0YWtlbiBmcm9tIGd0a190ZXN0X2luaXQoKS4gKi8KLSAgICBnX3Rl
c3RfaW5pdCgmYXJnYywgJmFyZ3YsIDApOwotICAgIGd0a19kaXNhYmxlX3NldGxvY2FsZSgpOwot
ICAgIHNldGxvY2FsZShMQ19BTEwsICJDIik7Ci0KLSAgICBndGtfaW5pdCgmYXJnYywgJmFyZ3Yp
OwotfQotI2VuZGlmCi0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKLXsKLSNpZmRl
ZiBHVEtfQVBJX1ZFUlNJT05fMgotICAgIC8qIFdlIGNhbid0IGp1c3QgY2FsbCB0byBndGtfdGVz
dF9pbml0KCkgaW4gdGhpcyBjYXNlIGJlY2F1c2UgaXRzCi0gICAgICAgaW1wbGVtZW50YXRpb24g
bWFrZXMgc3VyZSB0aGF0IG5vIEdUSysgbW9kdWxlIHdpbGwgYmUgbG9hZGVkLCBhbmQKLSAgICAg
ICB3ZSB3aWxsIG5lZWQgdG8gbG9hZCBHQUlMIGZvciB0ZXN0cyB0aGF0IG5lZWQgdG8gdXNlIEF0
a09iamVjdHMKLSAgICAgICBmcm9tIG5vbi1XZWJLaXQgR3RrV2lkZ2V0cyAoZS5nIHBhcmVudEZv
clJvb3RPYmplY3QpLiovCi0gICAgaW5pdGlhbGl6ZVRlc3RpbmdGcmFtZXdvcmsoYXJnYywgYXJn
dik7Ci0jZWxzZQotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLSNlbmRp
ZgotCi0gICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKLSAg
ICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2NhcmV0T2Zmc2V0cyIsIHRlc3RXZWJraXRB
dGtDYXJldE9mZnNldHMpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvY2FyZXRP
ZmZzZXRzQW5kRXh0cmFub3VzV2hpdGVTcGFjZXMiLCB0ZXN0V2Via2l0QXRrQ2FyZXRPZmZzZXRz
QW5kRXh0cmFub3VzV2hpdGVTcGFjZXMpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9h
dGsvY29tYm9Cb3giLCB0ZXN0V2Via2l0QXRrQ29tYm9Cb3gpOwotICAgIGdfdGVzdF9hZGRfZnVu
YygiL3dlYmtpdC9hdGsvZG9jdW1lbnRMb2FkaW5nRXZlbnRzIiwgdGVzdFdlYmtpdEF0a0RvY3Vt
ZW50TG9hZGluZ0V2ZW50cyk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9lbWJl
ZGRlZE9iamVjdHMiLCB0ZXN0V2Via2l0QXRrRW1iZWRkZWRPYmplY3RzKTsKLSAgICBnX3Rlc3Rf
YWRkX2Z1bmMoIi93ZWJraXQvYXRrL2dldEhlYWRlcnNJblRhYmxlIiwgdGVzdFdlYmtpdEF0a0dl
dEhlYWRlcnNJblRhYmxlKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL3RleHRB
dHRyaWJ1dGVzIiwgdGVzdFdlYmtpdEF0a1RleHRBdHRyaWJ1dGVzKTsKLSAgICBnX3Rlc3RfYWRk
X2Z1bmMoIi93ZWJraXQvYXRrL3RleHRTZWxlY3Rpb25zIiwgdGVzdFdlYmtpdEF0a1RleHRTZWxl
Y3Rpb25zKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2dldEV4dGVudHMiLCB0
ZXN0V2Via2l0QXRrR2V0RXh0ZW50cyk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0
ay9oeXBlcnRleHRBbmRIeXBlcmxpbmtzIiwgdGVzdFdlYmtpdEF0a0h5cGVydGV4dEFuZEh5cGVy
bGlua3MpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvbGF5b3V0QW5kRGF0YVRh
YmxlcyIsIHRlc3RXZWJraXRBdGtMYXlvdXRBbmREYXRhVGFibGVzKTsKLSAgICBnX3Rlc3RfYWRk
X2Z1bmMoIi93ZWJraXQvYXRrL2xpbmtzV2l0aElubGluZUltYWdlcyIsIHRlc3RXZWJraXRBdGtM
aW5rc1dpdGhJbmxpbmVJbWFnZXMpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsv
bGlzdHNPZkl0ZW1zIiwgdGVzdFdlYmtpdEF0a0xpc3RzT2ZJdGVtcyk7Ci0gICAgZ190ZXN0X2Fk
ZF9mdW5jKCIvd2Via2l0L2F0ay90ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbnMiLCB0ZXN0V2Via2l0
QXRrVGV4dENoYW5nZWROb3RpZmljYXRpb25zKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJr
aXQvYXRrL3BhcmVudEZvclJvb3RPYmplY3QiLCB0ZXN0V2Via2l0QXRrUGFyZW50Rm9yUm9vdE9i
amVjdCk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9zZXRQYXJlbnRGb3JPYmpl
Y3QiLCB0ZXN0V2Via2l0QXRrU2V0UGFyZW50Rm9yT2JqZWN0KTsKLSAgICByZXR1cm4gZ190ZXN0
X3J1biAoKTsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGF0
a3JvbGVzLmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXRrcm9sZXMuYwpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODg4MTdjZi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2d0ay90ZXN0cy90ZXN0YXRrcm9sZXMuYworKysgL2Rldi9udWxsCkBAIC0xLDQyNiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IMKpIDIwMTAgSm9hbm1hcmllIERpZ2dzCi0gKiBDb3B5cmln
aHQgwqkgMjAxMCBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8Z2xp
Yi5oPgotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2lu
Y2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KLQotLyogTm9uIGZvcm0gcm9sZXMgKi8KLSNkZWZpbmUg
SFRNTF9ET0NVTUVOVF9GUkFNRSAiPGh0bWw+PGJvZHk+VGhpcyBpcyBhIHRlc3QuPC9ib2R5Pjwv
aHRtbD4iCi0jZGVmaW5lIEhUTUxfSEVBRElORyAiPGh0bWw+PGJvZHk+PGgxPjE8L2gxPjxoMj4y
PC9oMj48aDM+MzwvaDM+PGg0PjQ8L2g0PjxoNT41PC9oNT48aDY+NjwvaDY+PC9ib2R5PjwvaHRt
bD4iCi0jZGVmaW5lIEhUTUxfSU1BR0UgIjxodG1sPjxib2R5PjxpbWcgc3JjPSdmb29iYXIucG5n
JyBhbHQ9J1RoaXMgaXMgYSB0ZXN0LicvPjwvYm9keT48L2h0bWw+IgotI2RlZmluZSBIVE1MX0xJ
TktfVEVYVCAiPGh0bWw+PGJvZHk+PGEgaHJlZj0nZm9vYmFyLmh0bWwnPlRoaXMgaXMgYSB0ZXN0
LjwvYT48L2JvZHk+PC9odG1sPiIKLSNkZWZpbmUgSFRNTF9MSVNUICI8aHRtbD48Ym9keT48dWw+
PGxpPjE8L2xpPjxsaT4yPC9saT48L3VsPjxvbD48bGk+MTwvbGk+PGxpPjI8L2xpPjwvb2w+PC9i
b2R5PjwvaHRtbD4iCi0jZGVmaW5lIEhUTUxfUEFSQUdSQVBIICI8aHRtbD48Ym9keT48cD5UaGlz
IGlzIGEgdGVzdC48L3A+PC9ib2R5PjwvaHRtbD4iCi0jZGVmaW5lIEhUTUxfU0VDVElPTiAiPGh0
bWw+PGJvZHk+PGRpdj5UaGlzIGlzIGEgdGVzdC48L2Rpdj48L2JvZHk+PC9odG1sPiIKLSNkZWZp
bmUgSFRNTF9UQUJMRSAiPGh0bWw+PGJvZHk+PHRhYmxlIGJvcmRlcj0nMSc+PHRyPjx0ZD5UaGlz
IGlzPC90ZD48dGQ+YSB0ZXN0LjwvdGQ+PC90cj48L3RhYmxlPjwvYm9keT48L2h0bWw+IgotI2Rl
ZmluZSBIVE1MX1NFUEFSQVRPUiAiPGh0bWw+PGJvZHk+PGhyLz48L2JvZHk+PC9odG1sPiIKLSNk
ZWZpbmUgSFRNTF9DT01CT0JPWCAiPGh0bWw+PGJvZHk+PHNlbGVjdCBzaXplPScxJz48b3B0aW9u
Pm9uZTwvb3B0aW9uPjxvcHRpb24+dHdvPC9vcHRpb24+PG9wdGlvbj50aHJlZTwvb3B0aW9uPjwv
c2VsZWN0PjwvYm9keT48L2h0bWw+IgotLyogRm9ybSByb2xlcyAqLwotI2RlZmluZSBIVE1MX0ZP
Uk0gIjxodG1sPjxib2R5Pjxmb3JtPlRoaXMgaXMgYSB0ZXN0LjwvZm9ybT48L2JvZHk+PC9odG1s
PiIKLSNkZWZpbmUgSFRNTF9DSEVDS19CT1ggIjxodG1sPjxib2R5PjxpbnB1dCB0eXBlPSdjaGVj
a2JveCcgLz5UaGlzIGlzIGEgdGVzdC48L2JvZHk+PC9odG1sPiIKLSNkZWZpbmUgSFRNTF9MQUJF
TEVEX0VOVFJZICI8aHRtbD48Ym9keT48bGFiZWwgZm9yPSdmb28nPk5hbWU6PC9sYWJlbD48aW5w
dXQgdHlwZT0ndGV4dCcgaWQ9J2ZvbycgLz48L2JvZHk+PC9odG1sPiIKLSNkZWZpbmUgSFRNTF9M
SVNUQk9YICI8aHRtbD48Ym9keT48c2VsZWN0IHNpemU9JzMnPjxvcHRpb24+b25lPC9vcHRpb24+
PG9wdGlvbj50d288L29wdGlvbj48b3B0aW9uPnRocmVlPC9vcHRpb24+PC9zZWxlY3Q+PC9ib2R5
PjwvaHRtbD4iCi0jZGVmaW5lIEhUTUxfUEFTU1dPUkRfVEVYVCAiPGh0bWw+PGJvZHk+PGlucHV0
IHR5cGU9J3Bhc3N3b3JkJyAvPjwvYm9keT48L2h0bWw+IgotI2RlZmluZSBIVE1MX1BVU0hfQlVU
VE9OICI8aHRtbD48Ym9keT48aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nb2snIC8+VGhpcyBp
cyBhIHRlc3QuPC9ib2R5PjwvaHRtbD4iCi0jZGVmaW5lIEhUTUxfUkFESU9fQlVUVE9OICI8aHRt
bD48Ym9keT48aW5wdXQgdHlwZT0ncmFkaW8nIC8+VGhpcyBpcyBhIHRlc3QuPC9ib2R5PjwvaHRt
bD4iCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBBdGtPYmplY3QqIGRvY3VtZW50OwotICAgIEF0
a09iamVjdCogb2JqOwotICAgIEF0a1JvbGUgcm9sZTsKLSAgICBHdGtXaWRnZXQqIHdlYlZpZXc7
Ci0gICAgR3RrQWxsb2NhdGlvbiBhbGxvYzsKLSAgICBHTWFpbkxvb3AqIGxvb3A7Ci19IEF0a1Jv
bGVzRml4dHVyZTsKLQotc3RhdGljIGdib29sZWFuIGZpbmlzaF9sb2FkaW5nKEF0a1JvbGVzRml4
dHVyZSogZml4dHVyZSkKLXsKLSAgICBpZiAoZ19tYWluX2xvb3BfaXNfcnVubmluZyhmaXh0dXJl
LT5sb29wKSkKLSAgICAgICAgZ19tYWluX2xvb3BfcXVpdChmaXh0dXJlLT5sb29wKTsKLQotICAg
IC8vIFdpdGggdGhlIGNoYW5nZSB0byBzdXBwb3J0IFdLMiBhY2Nlc3NpYmlsaXR5LCB0aGUgcm9v
dCBvYmplY3QKLSAgICAvLyBoYXMgY2hhbmdlZCBhbmQgaXQncyBubyBsb25nZXIgdGhlIGRvY3Vt
ZW50IGZyYW1lLCBidXQgYSBzY3JvbGwKLSAgICAvLyBwYW5lIGNvbnRhaW5pbmcgdGhlIGRvY3Vt
ZW50IGZyYW1lIGFzIGl0cyBvbmx5IGNoaWxkLiBTZWUgdGhlCi0gICAgLy8gYnVnIDcyMzkwIGZv
ciBtb3JlIGRldGFpbHMgb24gdGhpcyBjaGFuZ2UuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTcyMzkwCi0gICAgQXRrT2JqZWN0KiByb290T2JqZWN0ID0g
Z3RrX3dpZGdldF9nZXRfYWNjZXNzaWJsZShmaXh0dXJlLT53ZWJWaWV3KTsKLSAgICBmaXh0dXJl
LT5kb2N1bWVudCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQocm9vdE9iamVjdCwg
MCk7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+ZG9jdW1lbnQpOwotCi0gICAgLy8gUmVtb3ZlIHRo
ZSByZWZlcmVuY2UgYWRkZWQgYnkgcmVmX2FjY2Vzc2libGVfY2hpbGQoKSBhbmQKLSAgICAvLyBy
ZXR1cm4sIHNpbmNlIHdlIGRvbid0IG5lZWQgdG8ga2VlcCB0aGF0IGV4dHJhIHJlZiBhdCBhbGwu
Ci0gICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+ZG9jdW1lbnQpOwotICAgIHJldHVybiBGQUxT
RTsKLX0KLQotc3RhdGljIHZvaWQgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAoQXRrUm9sZXNGaXh0
dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZml4dHVyZS0+bG9vcCA9
IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLSAgICBmaXh0dXJlLT5hbGxvYyA9IChHdGtB
bGxvY2F0aW9uKSB7IDAsIDAsIDgwMCwgNjAwIH07Ci0gICAgZml4dHVyZS0+d2ViVmlldyA9IHdl
YmtpdF93ZWJfdmlld19uZXcoKTsKLSAgICBnX29iamVjdF9yZWZfc2luayhmaXh0dXJlLT53ZWJW
aWV3KTsKLQotICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShmaXh0dXJlLT53ZWJWaWV3LCAm
Zml4dHVyZS0+YWxsb2MpOwotCi0gICAgaWYgKGRhdGEgIT0gTlVMTCkKLSAgICAgICAgd2Via2l0
X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklFVyAoZml4dHVyZS0+d2ViVmlldyks
IChjb25zdCBjaGFyKikgZGF0YSwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0KLSAgICBnX2lkbGVfYWRk
KChHU291cmNlRnVuYykgZmluaXNoX2xvYWRpbmcsIGZpeHR1cmUpOwotICAgIGdfbWFpbl9sb29w
X3J1bihmaXh0dXJlLT5sb29wKTsKLX0KLQotc3RhdGljIHZvaWQgYXRrX3JvbGVzX2ZpeHR1cmVf
dGVhcmRvd24oQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17
Ci0gICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+d2ViVmlldyk7Ci0gICAgZ19tYWluX2xvb3Bf
dW5yZWYoZml4dHVyZS0+bG9vcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdldF9jaGlsZF9hbmRfdGVz
dF9yb2xlKEF0a09iamVjdCogb2JqLCBnaW50IHBvcywgQXRrUm9sZSByb2xlKQotewotICAgIEF0
a09iamVjdCogY2hpbGQ7Ci0gICAgQXRrUm9sZSBjaGlsZF9yb2xlOwotCi0gICAgY2hpbGQgPSBh
dGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iaiwgcG9zKTsKLSAgICBnX2Fzc2VydChj
aGlsZCk7Ci0gICAgY2hpbGRfcm9sZSA9IGF0a19vYmplY3RfZ2V0X3JvbGUoY2hpbGQpOwotICAg
IGdfYXNzZXJ0KGNoaWxkX3JvbGUgPT0gcm9sZSk7Ci0KLSAgICBnX29iamVjdF91bnJlZihjaGls
ZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9kb2N1bWVudF9m
cmFtZShBdGtSb2xlc0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAg
ICBmaXh0dXJlLT5yb2xlID0gYXRrX29iamVjdF9nZXRfcm9sZShmaXh0dXJlLT5kb2N1bWVudCk7
Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+cm9sZSA9PSBBVEtfUk9MRV9ET0NVTUVOVF9XRUIpOwot
fQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfaGVhZGluZyhBdGtSb2xl
c0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBnZXRfY2hpbGRf
YW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5kb2N1bWVudCwgMCwgQVRLX1JPTEVfSEVBRElORyk7Ci0g
ICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+ZG9jdW1lbnQsIDEsIEFUS19ST0xF
X0hFQURJTkcpOwotICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPmRvY3VtZW50
LCAyLCBBVEtfUk9MRV9IRUFESU5HKTsKLSAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0
dXJlLT5kb2N1bWVudCwgMywgQVRLX1JPTEVfSEVBRElORyk7Ci0gICAgZ2V0X2NoaWxkX2FuZF90
ZXN0X3JvbGUoZml4dHVyZS0+ZG9jdW1lbnQsIDQsIEFUS19ST0xFX0hFQURJTkcpOwotICAgIGdl
dF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPmRvY3VtZW50LCA1LCBBVEtfUk9MRV9IRUFE
SU5HKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2ltYWdlKEF0
a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIC8vIFRo
aXMgaXMgYW4gZXh0cmFuZW91cyBvYmplY3Qgb2YgQVRLX1JPTEVfUEFORUwgd2hpY2ggd2Ugc2hv
dWxkIGdldCByaWQgb2YuCi0gICAgZml4dHVyZS0+b2JqID0gYXRrX29iamVjdF9yZWZfYWNjZXNz
aWJsZV9jaGlsZChmaXh0dXJlLT5kb2N1bWVudCwgMCk7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+
b2JqKTsKLQotICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPm9iaiwgMCwgQVRL
X1JPTEVfSU1BR0UpOwotCi0gICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+b2JqKTsKLX0KLQot
c3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xpbmsoQXRrUm9sZXNGaXh0dXJl
KiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgLy8gVGhpcyBpcyBhbiBleHRy
YW5lb3VzIG9iamVjdCBvZiBBVEtfUk9MRV9QQU5FTCB3aGljaCB3ZSBzaG91bGQgZ2V0IHJpZCBv
Zi4KLSAgICBmaXh0dXJlLT5vYmogPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZp
eHR1cmUtPmRvY3VtZW50LCAwKTsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT5vYmopOwotCi0gICAg
Z2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+b2JqLCAwLCBBVEtfUk9MRV9MSU5LKTsK
LQotICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9iaik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRl
c3Rfd2Via2l0X2F0a19nZXRfcm9sZV9saXN0X2FuZF9pdGVtKEF0a1JvbGVzRml4dHVyZSogZml4
dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIEF0a09iamVjdCogbGlzdE9iajsKLQot
ICAgIGxpc3RPYmogPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZpeHR1cmUtPmRv
Y3VtZW50LCAwKTsKLSAgICBnX2Fzc2VydChsaXN0T2JqKTsKLSAgICBmaXh0dXJlLT5yb2xlID0g
YXRrX29iamVjdF9nZXRfcm9sZShsaXN0T2JqKTsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT5yb2xl
ID09IEFUS19ST0xFX0xJU1QpOwotCi0gICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUobGlzdE9i
aiwgMCwgQVRLX1JPTEVfTElTVF9JVEVNKTsKLSAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShs
aXN0T2JqLCAxLCBBVEtfUk9MRV9MSVNUX0lURU0pOwotICAgIGdfb2JqZWN0X3VucmVmKGxpc3RP
YmopOwotCi0gICAgbGlzdE9iaiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoZml4
dHVyZS0+ZG9jdW1lbnQsIDEpOwotICAgIGdfYXNzZXJ0KGxpc3RPYmopOwotICAgIGZpeHR1cmUt
PnJvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKGxpc3RPYmopOwotICAgIGdfYXNzZXJ0KGZpeHR1
cmUtPnJvbGUgPT0gQVRLX1JPTEVfTElTVCk7Ci0KLSAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9s
ZShsaXN0T2JqLCAwLCBBVEtfUk9MRV9MSVNUX0lURU0pOwotICAgIGdldF9jaGlsZF9hbmRfdGVz
dF9yb2xlKGxpc3RPYmosIDEsIEFUS19ST0xFX0xJU1RfSVRFTSk7Ci0gICAgZ19vYmplY3RfdW5y
ZWYobGlzdE9iaik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9w
YXJhZ3JhcGgoQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17
Ci0gICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+ZG9jdW1lbnQsIDAsIEFUS19S
T0xFX1BBUkFHUkFQSCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9s
ZV9zZWN0aW9uKEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQot
ewotICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPmRvY3VtZW50LCAwLCBBVEtf
Uk9MRV9TRUNUSU9OKTsKLX0KLQotLy8gRG9lcyBub3QgeWV0IHRlc3QgdGFibGUgY2VsbHMgYmVj
YXVzZSBvZiBidWcgMzA4OTUuCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVf
dGFibGUoQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0g
ICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+ZG9jdW1lbnQsIDAsIEFUS19ST0xF
X1RBQkxFKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX3NlcGFy
YXRvcihBdGtSb2xlc0ZpeHR1cmUgKmZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAg
ICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5kb2N1bWVudCwgMCwgQVRLX1JPTEVf
U0VQQVJBVE9SKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2Nv
bWJvYm94KEF0a1JvbGVzRml4dHVyZSAqZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewot
ICAgIEF0a09iamVjdCogY29tYm9ib3hNZW51OwotCi0gICAgLy8gVGhpcyBpcyBhbiBleHRyYW5l
b3VzIG9iamVjdCBvZiBBVEtfUk9MRV9QQU5FTCB3aGljaCB3ZSBzaG91bGQgZ2V0IHJpZCBvZi4K
LSAgICBmaXh0dXJlLT5vYmogPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZpeHR1
cmUtPmRvY3VtZW50LCAwKTsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT5vYmopOwotCi0gICAgZml4
dHVyZS0+b2JqID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmaXh0dXJlLT5vYmos
IDApOwotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPm9iaik7Ci0gICAgZml4dHVyZS0+cm9sZSA9IGF0
a19vYmplY3RfZ2V0X3JvbGUoZml4dHVyZS0+b2JqKTsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT5y
b2xlID09IEFUS19ST0xFX0NPTUJPX0JPWCk7Ci0KLSAgICBjb21ib2JveE1lbnUgPSBhdGtfb2Jq
ZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZpeHR1cmUtPm9iaiwgMCk7Ci0gICAgZ19hc3NlcnQo
Y29tYm9ib3hNZW51KTsKLSAgICBmaXh0dXJlLT5yb2xlID0gYXRrX29iamVjdF9nZXRfcm9sZShj
b21ib2JveE1lbnUpOwotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPnJvbGUgPT0gQVRLX1JPTEVfTUVO
VSk7Ci0KLSAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShjb21ib2JveE1lbnUsIDAsIEFUS19S
T0xFX01FTlVfSVRFTSk7Ci0gICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoY29tYm9ib3hNZW51
LCAxLCBBVEtfUk9MRV9NRU5VX0lURU0pOwotICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGNv
bWJvYm94TWVudSwgMiwgQVRLX1JPTEVfTUVOVV9JVEVNKTsKLQotICAgIGdfb2JqZWN0X3VucmVm
KGZpeHR1cmUtPm9iaik7Ci0gICAgZ19vYmplY3RfdW5yZWYoY29tYm9ib3hNZW51KTsKLX0KLQot
LyogRm9ybSByb2xlcyAqLwotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2Zv
cm0oQXRrUm9sZXNGaXh0dXJlICpmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAg
Z2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+ZG9jdW1lbnQsIDAsIEFUS19ST0xFX0ZP
Uk0pOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfY2hlY2tfYm94
KEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIC8v
IFRoaXMgaXMgYW4gZXh0cmFuZW91cyBvYmplY3Qgb2YgQVRLX1JPTEVfUEFORUwgd2hpY2ggd2Ug
c2hvdWxkIGdldCByaWQgb2YuCi0gICAgZml4dHVyZS0+b2JqID0gYXRrX29iamVjdF9yZWZfYWNj
ZXNzaWJsZV9jaGlsZChmaXh0dXJlLT5kb2N1bWVudCwgMCk7Ci0gICAgZ19hc3NlcnQoZml4dHVy
ZS0+b2JqKTsKLQotICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPm9iaiwgMCwg
QVRLX1JPTEVfQ0hFQ0tfQk9YKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9iaik7
Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9lbnRyeShBdGtSb2xl
c0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICAvLyBUaGlzIGlz
IGFuIGV4dHJhbmVvdXMgb2JqZWN0IG9mIEFUS19ST0xFX1BBTkVMIHdoaWNoIHdlIHNob3VsZCBn
ZXQgcmlkIG9mLgotICAgIGZpeHR1cmUtPm9iaiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVf
Y2hpbGQoZml4dHVyZS0+ZG9jdW1lbnQsIDApOwotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPm9iaik7
Ci0KLSAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5vYmosIDEsIEFUS19ST0xF
X0VOVFJZKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9iaik7Ci19Ci0KLXN0YXRp
YyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9sYWJlbChBdGtSb2xlc0ZpeHR1cmUqIGZp
eHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICAvLyBUaGlzIGlzIGFuIGV4dHJhbmVv
dXMgb2JqZWN0IG9mIEFUS19ST0xFX1BBTkVMIHdoaWNoIHdlIHNob3VsZCBnZXQgcmlkIG9mLgot
ICAgIGZpeHR1cmUtPm9iaiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoZml4dHVy
ZS0+ZG9jdW1lbnQsIDApOwotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPm9iaik7Ci0KLSAgICBnZXRf
Y2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5vYmosIDAsIEFUS19ST0xFX0xBQkVMKTsKLQot
ICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9iaik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rf
d2Via2l0X2F0a19nZXRfcm9sZV9saXN0Ym94KEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2Nv
bnN0cG9pbnRlciBkYXRhKQotewotICAgIEF0a09iamVjdCogbGlzdGJveE9iajsKLSAgICAvLyBU
aGlzIGlzIGFuIGV4dHJhbmVvdXMgb2JqZWN0IG9mIEFUS19ST0xFX1BBTkVMIHdoaWNoIHdlIHNo
b3VsZCBnZXQgcmlkIG9mLgotICAgIGZpeHR1cmUtPm9iaiA9IGF0a19vYmplY3RfcmVmX2FjY2Vz
c2libGVfY2hpbGQoZml4dHVyZS0+ZG9jdW1lbnQsIDApOwotICAgIGdfYXNzZXJ0KGZpeHR1cmUt
Pm9iaik7Ci0KLSAgICBsaXN0Ym94T2JqID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGls
ZChmaXh0dXJlLT5vYmosIDApOwotICAgIGdfYXNzZXJ0KGxpc3Rib3hPYmopOwotICAgIGZpeHR1
cmUtPnJvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKGxpc3Rib3hPYmopOwotICAgIGdfYXNzZXJ0
KGZpeHR1cmUtPnJvbGUgPT0gQVRLX1JPTEVfTElTVCk7Ci0KLSAgICBnZXRfY2hpbGRfYW5kX3Rl
c3Rfcm9sZShsaXN0Ym94T2JqLCAwLCBBVEtfUk9MRV9MSVNUX0lURU0pOwotICAgIGdldF9jaGls
ZF9hbmRfdGVzdF9yb2xlKGxpc3Rib3hPYmosIDEsIEFUS19ST0xFX0xJU1RfSVRFTSk7Ci0gICAg
Z2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUobGlzdGJveE9iaiwgMiwgQVRLX1JPTEVfTElTVF9JVEVN
KTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9iaik7Ci0gICAgZ19vYmplY3RfdW5y
ZWYobGlzdGJveE9iaik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9s
ZV9wYXNzd29yZF90ZXh0KEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBk
YXRhKQotewotICAgIC8vIFRoaXMgaXMgYW4gZXh0cmFuZW91cyBvYmplY3Qgb2YgQVRLX1JPTEVf
UEFORUwgd2hpY2ggd2Ugc2hvdWxkIGdldCByaWQgb2YuCi0gICAgZml4dHVyZS0+b2JqID0gYXRr
X29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmaXh0dXJlLT5kb2N1bWVudCwgMCk7Ci0gICAg
Z19hc3NlcnQoZml4dHVyZS0+b2JqKTsKLQotICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZp
eHR1cmUtPm9iaiwgMCwgQVRLX1JPTEVfUEFTU1dPUkRfVEVYVCk7Ci0KLSAgICBnX29iamVjdF91
bnJlZihmaXh0dXJlLT5vYmopOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0
X3JvbGVfcHVzaF9idXR0b24oQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVy
IGRhdGEpCi17Ci0gICAgLy8gVGhpcyBpcyBhbiBleHRyYW5lb3VzIG9iamVjdCBvZiBBVEtfUk9M
RV9QQU5FTCB3aGljaCB3ZSBzaG91bGQgZ2V0IHJpZCBvZi4KLSAgICBmaXh0dXJlLT5vYmogPSBh
dGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZpeHR1cmUtPmRvY3VtZW50LCAwKTsKLSAg
ICBnX2Fzc2VydChmaXh0dXJlLT5vYmopOwotCi0gICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUo
Zml4dHVyZS0+b2JqLCAwLCBBVEtfUk9MRV9QVVNIX0JVVFRPTik7Ci0KLSAgICBnX29iamVjdF91
bnJlZihmaXh0dXJlLT5vYmopOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0
X3JvbGVfcmFkaW9fYnV0dG9uKEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRl
ciBkYXRhKQotewotICAgIC8vIFRoaXMgaXMgYW4gZXh0cmFuZW91cyBvYmplY3Qgb2YgQVRLX1JP
TEVfUEFORUwgd2hpY2ggd2Ugc2hvdWxkIGdldCByaWQgb2YuCi0gICAgZml4dHVyZS0+b2JqID0g
YXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmaXh0dXJlLT5kb2N1bWVudCwgMCk7Ci0g
ICAgZ19hc3NlcnQoZml4dHVyZS0+b2JqKTsKLQotICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xl
KGZpeHR1cmUtPm9iaiwgMCwgQVRLX1JPTEVfUkFESU9fQlVUVE9OKTsKLQotICAgIGdfb2JqZWN0
X3VucmVmKGZpeHR1cmUtPm9iaik7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJn
dikKLXsKLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAgICBnX3Rl
c3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwotCi0gICAgZ190ZXN0X2Fk
ZCgiL3dlYmtpdC9hdGsvdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2RvY3VtZW50X2ZyYW1lIiwK
LSAgICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVyZSwgSFRNTF9ET0NVTUVOVF9GUkFNRSwKLSAg
ICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVz
dF93ZWJraXRfYXRrX2dldF9yb2xlX2RvY3VtZW50X2ZyYW1lLAotICAgICAgICAgICAgICAgYXRr
X3JvbGVzX2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9hdGsv
dGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2hlYWRpbmciLAotICAgICAgICAgICAgICAgQXRrUm9s
ZXNGaXh0dXJlLCBIVE1MX0hFQURJTkcsCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVy
ZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9oZWFkaW5n
LAotICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAgZ190
ZXN0X2FkZCgiL3dlYmtpdC9hdGsvdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2ltYWdlIiwKLSAg
ICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVyZSwgSFRNTF9JTUFHRSwKLSAgICAgICAgICAgICAg
IGF0a19yb2xlc19maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRr
X2dldF9yb2xlX2ltYWdlLAotICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfdGVhcmRv
d24pOwotCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9hdGsvdGVzdF93ZWJraXRfYXRrX2dldF9y
b2xlX2xpbmsiLAotICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX0xJTktfVEVY
VCwKLSAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAotICAgICAgICAgICAg
ICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xpbmssCi0gICAgICAgICAgICAgICBhdGtfcm9s
ZXNfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0
X3dlYmtpdF9hdGtfZ2V0X3JvbGVfbGlzdF9hbmRfaXRlbSIsCi0gICAgICAgICAgICAgICBBdGtS
b2xlc0ZpeHR1cmUsIEhUTUxfTElTVCwKLSAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJl
X3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xpc3RfYW5k
X2l0ZW0sCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAg
ICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfcGFyYWdy
YXBoIiwKLSAgICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVyZSwgSFRNTF9QQVJBR1JBUEgsCi0g
ICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRl
c3Rfd2Via2l0X2F0a19nZXRfcm9sZV9wYXJhZ3JhcGgsCi0gICAgICAgICAgICAgICBhdGtfcm9s
ZXNfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0
X3dlYmtpdF9hdGtfZ2V0X3JvbGVfc2VjdGlvbiIsCi0gICAgICAgICAgICAgICBBdGtSb2xlc0Zp
eHR1cmUsIEhUTUxfU0VDVElPTiwKLSAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3Nl
dHVwLAotICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX3NlY3Rpb24sCi0g
ICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAgICBnX3Rlc3Rf
YWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfdGFibGUiLAotICAgICAg
ICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX1RBQkxFLAotICAgICAgICAgICAgICAgYXRr
X3JvbGVzX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF9hdGtfZ2V0
X3JvbGVfdGFibGUsCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7
Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVf
c2VwYXJhdG9yIiwKLSAgICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVyZSwgSFRNTF9TRVBBUkFU
T1IsCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAg
ICAgIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9zZXBhcmF0b3IsCi0gICAgICAgICAgICAgICBh
dGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0
ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfY29tYm9ib3giLAotICAgICAgICAgICAgICAgQXRr
Um9sZXNGaXh0dXJlLCBIVE1MX0NPTUJPQk9YLAotICAgICAgICAgICAgICAgYXRrX3JvbGVzX2Zp
eHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfY29t
Ym9ib3gsCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAg
ICAvKiBGb3JtIHJvbGVzICovCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9hdGsvdGVzdF93ZWJr
aXRfYXRrX2dldF9yb2xlX2Zvcm0iLAotICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBI
VE1MX0ZPUk0sCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV9zZXR1cCwKLSAgICAg
ICAgICAgICAgIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9mb3JtLAotICAgICAgICAgICAgICAg
YXRrX3JvbGVzX2ZpeHR1cmVfdGVhcmRvd24pOwotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvYXRr
L3Rlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9jaGVja19ib3giLAotICAgICAgICAgICAgICAgQXRr
Um9sZXNGaXh0dXJlLCBIVE1MX0NIRUNLX0JPWCwKLSAgICAgICAgICAgICAgIGF0a19yb2xlc19m
aXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2No
ZWNrX2JveCwKLSAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3RlYXJkb3duKTsKLQot
ICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvYXRrL3Rlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9lbnRy
eSIsCi0gICAgICAgICAgICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhUTUxfTEFCRUxFRF9FTlRSWSwK
LSAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAg
dGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2VudHJ5LAotICAgICAgICAgICAgICAgYXRrX3JvbGVz
X2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9hdGsvdGVzdF93
ZWJraXRfYXRrX2dldF9yb2xlX2xhYmVsIiwKLSAgICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVy
ZSwgSFRNTF9MQUJFTEVEX0VOVFJZLAotICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVf
c2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfbGFiZWwsCi0g
ICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAgICBnX3Rlc3Rf
YWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfbGlzdGJveCIsCi0gICAg
ICAgICAgICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhUTUxfTElTVEJPWCwKLSAgICAgICAgICAgICAg
IGF0a19yb2xlc19maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRr
X2dldF9yb2xlX2xpc3Rib3gsCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFy
ZG93bik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0
X3JvbGVfcGFzc3dvcmRfdGV4dCIsCi0gICAgICAgICAgICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhU
TUxfUEFTU1dPUkRfVEVYVCwKLSAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVw
LAotICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX3Bhc3N3b3JkX3RleHQs
Ci0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAgICBnX3Rl
c3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfcHVzaF9idXR0b24i
LAotICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX1BVU0hfQlVUVE9OLAotICAg
ICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0
X3dlYmtpdF9hdGtfZ2V0X3JvbGVfcHVzaF9idXR0b24sCi0gICAgICAgICAgICAgICBhdGtfcm9s
ZXNfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0
X3dlYmtpdF9hdGtfZ2V0X3JvbGVfcmFkaW9fYnV0dG9uIiwKLSAgICAgICAgICAgICAgIEF0a1Jv
bGVzRml4dHVyZSwgSFRNTF9SQURJT19CVVRUT04sCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNf
Zml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9y
YWRpb19idXR0b24sCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7
Ci0KLSAgICByZXR1cm4gZ190ZXN0X3J1bigpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9ndGsvdGVzdHMvdGVzdGNvbnRleHRtZW51LmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90
ZXN0Y29udGV4dG1lbnUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTRhYWE1Ny4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0Y29udGV4dG1lbnUuYwor
KysgL2Rldi9udWxsCkBAIC0xLDMxNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEy
IElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIsMSBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8d2Via2l0L3dlYmtp
dC5oPgotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgY2hhciAqZGF0YTsKLSAgICBndWludCBmbGFn
OwotfSBUZXN0SW5mbzsKLQotc3RhdGljIEdNYWluTG9vcCAqbG9vcDsKLQotdHlwZWRlZiBzdHJ1
Y3QgewotICAgIFdlYktpdFdlYlZpZXcgKndlYlZpZXc7Ci0gICAgVGVzdEluZm8gKmluZm87Ci19
IENvbnRleHRNZW51Rml4dHVyZTsKLQotc3RhdGljIFRlc3RJbmZvICp0ZXN0SW5mb05ldyhjb25z
dCBjaGFyICpkYXRhLCBndWludCBmbGFnKQotewotICAgIFRlc3RJbmZvICppbmZvID0gZ19zbGlj
ZV9uZXcoVGVzdEluZm8pOwotICAgIGluZm8tPmRhdGEgPSBnX3N0cmR1cChkYXRhKTsKLSAgICBp
bmZvLT5mbGFnID0gZmxhZzsKLQotICAgIHJldHVybiBpbmZvOwotfQotCi1zdGF0aWMgdm9pZCB0
ZXN0SW5mb0Rlc3Ryb3koVGVzdEluZm8gKmluZm8pCi17Ci0gICAgZ19mcmVlKGluZm8tPmRhdGEp
OwotICAgIGdfc2xpY2VfZnJlZShUZXN0SW5mbywgaW5mbyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNv
bnRleHRNZW51Rml4dHVyZVNldHVwKENvbnRleHRNZW51Rml4dHVyZSAqZml4dHVyZSwgZ2NvbnN0
cG9pbnRlciBkYXRhKQotewotICAgIGZpeHR1cmUtPndlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVco
d2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEws
IFRSVUUpOwotICAgIGZpeHR1cmUtPmluZm8gPSAoVGVzdEluZm8gKilkYXRhOwotfQotCi1zdGF0
aWMgdm9pZCBjb250ZXh0TWVudUZpeHR1cmVUZWFyZG93bihDb250ZXh0TWVudUZpeHR1cmUgKmZp
eHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBnX29iamVjdF91bnJlZihmaXh0dXJl
LT53ZWJWaWV3KTsKLSAgICBnX21haW5fbG9vcF91bnJlZihsb29wKTsKLSAgICB0ZXN0SW5mb0Rl
c3Ryb3koZml4dHVyZS0+aW5mbyk7Ci19Ci0KLXN0YXRpYyBHTGlzdCAqY2hlY2tBY3Rpb24oR0xp
c3QgKml0ZXIsIFdlYktpdENvbnRleHRNZW51QWN0aW9uIGFjdGlvbikKLXsKLSAgICBHdGtNZW51
SXRlbSAqaXRlbSA9IChHdGtNZW51SXRlbSAqKWl0ZXItPmRhdGE7Ci0KLSAgICBnX2Fzc2VydChH
VEtfSVNfTUVOVV9JVEVNKGl0ZW0pKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfY29udGV4dF9tZW51
X2l0ZW1fZ2V0X2FjdGlvbihpdGVtKSA9PSBhY3Rpb24pOwotCi0gICAgcmV0dXJuIGl0ZXItPm5l
eHQ7Ci19Ci0KLXN0YXRpYyBHTGlzdCAqY2hlY2tBY3Rpb25XaXRoU3VibWVudShHTGlzdCAqaXRl
ciwgV2ViS2l0Q29udGV4dE1lbnVBY3Rpb24gYWN0aW9uKQotewotICAgIEd0a01lbnVJdGVtICpp
dGVtID0gKEd0a01lbnVJdGVtICopaXRlci0+ZGF0YTsKLQotICAgIGdfYXNzZXJ0KEdUS19JU19N
RU5VX0lURU0oaXRlbSkpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9n
ZXRfYWN0aW9uKGl0ZW0pID09IGFjdGlvbik7Ci0gICAgZ19hc3NlcnQoR1RLX0lTX01FTlUoZ3Rr
X21lbnVfaXRlbV9nZXRfc3VibWVudShpdGVtKSkpOwotCi0gICAgcmV0dXJuIGl0ZXItPm5leHQ7
Ci19Ci0KLXN0YXRpYyBHTGlzdCAqY2hlY2tTZXBhcmF0b3IoR0xpc3QgKml0ZXIpCi17Ci0gICAg
R3RrTWVudUl0ZW0gKml0ZW0gPSAoR3RrTWVudUl0ZW0gKilpdGVyLT5kYXRhOwotCi0gICAgZ19h
c3NlcnQoR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkpOwotCi0gICAgcmV0dXJuIGl0
ZXItPm5leHQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBjb250ZXh0TWVudUNhbGxiYWNrKFdlYktp
dFdlYlZpZXcgKndlYlZpZXcsIEd0a1dpZGdldCAqZGVmYXVsdE1lbnUsIFdlYktpdEhpdFRlc3RS
ZXN1bHQgKmhpdFRlc3RSZXN1bHQsIGdib29sZWFuIGtleWJvYXJkTW9kZSwgZ3BvaW50ZXIgdXNl
ckRhdGEpCi17Ci0gICAgVGVzdEluZm8gKmluZm8gPSAoVGVzdEluZm8gKil1c2VyRGF0YTsKLSAg
ICBndWludCBjb250ZXh0OwotICAgIEdMaXN0ICppdGVtczsKLSAgICBHTGlzdCAqaXRlcjsKLQot
ICAgIC8qIENoZWNrIHNpZ25hbCBwYXJhbWV0ZXJzICovCi0gICAgZ19hc3NlcnQoV0VCS0lUX0lT
X1dFQl9WSUVXKHdlYlZpZXcpKTsKLSAgICBnX2Fzc2VydChHVEtfSVNfTUVOVShkZWZhdWx0TWVu
dSkpOwotICAgIGdfYXNzZXJ0KFdFQktJVF9JU19ISVRfVEVTVF9SRVNVTFQoaGl0VGVzdFJlc3Vs
dCkpOwotICAgIGdfYXNzZXJ0KCFrZXlib2FyZE1vZGUpOwotCi0gICAgZ19vYmplY3RfZ2V0KGhp
dFRlc3RSZXN1bHQsICJjb250ZXh0IiwgJmNvbnRleHQsIE5VTEwpOwotICAgIGdfYXNzZXJ0KGNv
bnRleHQgJiBpbmZvLT5mbGFnKTsKLQotICAgIGl0ZW1zID0gZ3RrX2NvbnRhaW5lcl9nZXRfY2hp
bGRyZW4oR1RLX0NPTlRBSU5FUihkZWZhdWx0TWVudSkpOwotICAgIHN3aXRjaCAoaW5mby0+Zmxh
ZykgewotICAgIGNhc2UgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0RPQ1VNRU5UOgot
ICAgICAgICBpdGVyID0gaXRlbXM7Ci0gICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9HT19CQUNLKTsKLSAgICAgICAgaXRlciA9IGNoZWNr
QWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0dPX0ZPUldBUkQpOwotICAg
ICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05f
U1RPUCk7Ci0gICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9N
RU5VX0FDVElPTl9SRUxPQUQpOwotICAgICAgICBnX2Fzc2VydCghaXRlcik7Ci0KLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfSU1BR0U6Ci0g
ICAgICAgIGl0ZXIgPSBpdGVtczsKLSAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdF
QktJVF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5fSU1BR0VfSU5fTkVXX1dJTkRPVyk7Ci0gICAg
ICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9E
T1dOTE9BRF9JTUFHRV9UT19ESVNLKTsKLSAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIs
IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFlfSU1BR0VfVE9fQ0xJUEJPQVJEKTsKLSAg
ICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9O
X0NPUFlfSU1BR0VfVVJMX1RPX0NMSVBCT0FSRCk7Ci0gICAgICAgIGdfYXNzZXJ0KCFpdGVyKTsK
LQotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVY
VF9FRElUQUJMRToKLSAgICAgICAgaXRlciA9IGl0ZW1zOwotICAgICAgICBpdGVyID0gY2hlY2tB
Y3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ1VUKTsKLSAgICAgICAgaXRl
ciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFkpOwot
ICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T05fUEFTVEUpOwotICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fREVMRVRFKTsKLSAgICAgICAgaXRlciA9IGNoZWNrU2VwYXJhdG9yKGl0
ZXIpOwotICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVO
VV9BQ1RJT05fU0VMRUNUX0FMTCk7Ci0gICAgICAgIGl0ZXIgPSBjaGVja1NlcGFyYXRvcihpdGVy
KTsKLSAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uV2l0aFN1Ym1lbnUoaXRlciwgV0VCS0lUX0NP
TlRFWFRfTUVOVV9BQ1RJT05fSU5QVVRfTUVUSE9EUyk7Ci0gICAgICAgIGl0ZXIgPSBjaGVja0Fj
dGlvbldpdGhTdWJtZW51KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1VOSUNPREUp
OwotICAgICAgICBnX2Fzc2VydCghaXRlcik7Ci0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBX
RUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfTElOSzoKLSAgICAgICAgaXRlciA9IGl0ZW1z
OwotICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9B
Q1RJT05fT1BFTl9MSU5LKTsKLSAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJ
VF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5fTElOS19JTl9ORVdfV0lORE9XKTsKLSAgICAgICAg
aXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0RPV05M
T0FEX0xJTktfVE9fRElTSyk7Ci0gICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX0xJTktfVE9fQ0xJUEJPQVJEKTsKLSAgICAgICAg
Z19hc3NlcnQoIWl0ZXIpOwotCi0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0gICAgfQotCi0gICAgZ19saXN0X2ZyZWUoaXRlbXMp
OwotICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci0KLSAgICByZXR1cm4gVFJVRTsKLX0KLQot
c3RhdGljIHZvaWQgcHVzaEV2ZW50KFdlYktpdFdlYlZpZXcgKndlYlZpZXcpCi17Ci0gICAgR2Rr
RXZlbnQgKmV2ZW50ID0gZ2RrX2V2ZW50X25ldyhHREtfQlVUVE9OX1BSRVNTKTsKLSNpZiBHVEtf
Q0hFQ0tfVkVSU0lPTigzLCAwLCAwKQotICAgIEdka0RldmljZU1hbmFnZXIgKmRldmljZU1hbmFn
ZXI7Ci0jZW5kaWYKLQotICAgIGV2ZW50LT5hbnkud2luZG93ID0gZ19vYmplY3RfcmVmKGd0a193
aWRnZXRfZ2V0X3dpbmRvdyhHVEtfV0lER0VUKHdlYlZpZXcpKSk7Ci0gICAgZXZlbnQtPmFueS5z
ZW5kX2V2ZW50ID0gRkFMU0U7Ci0gICAgZXZlbnQtPmJ1dHRvbi50aW1lID0gR0RLX0NVUlJFTlRf
VElNRTsKLSAgICBldmVudC0+YnV0dG9uLmJ1dHRvbiA9IDM7Ci0gICAgZXZlbnQtPmJ1dHRvbi54
ID0gZXZlbnQtPmJ1dHRvbi55ID0gNTsKLSAgICBldmVudC0+YnV0dG9uLnhfcm9vdCA9IGV2ZW50
LT5idXR0b24ueDsKLSAgICBldmVudC0+YnV0dG9uLnlfcm9vdCA9IGV2ZW50LT5idXR0b24ueTsK
LSNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAwLCAwKQotICAgIGRldmljZU1hbmFnZXIgPSBnZGtf
ZGlzcGxheV9nZXRfZGV2aWNlX21hbmFnZXIoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSk7Ci0g
ICAgZXZlbnQtPmJ1dHRvbi5kZXZpY2UgPSBnZGtfZGV2aWNlX21hbmFnZXJfZ2V0X2NsaWVudF9w
b2ludGVyKGRldmljZU1hbmFnZXIpOwotI2VuZGlmCi0KLSAgICBnZGtfZXZlbnRfcHV0KGV2ZW50
KTsKLSAgICBnZGtfZXZlbnRfZnJlZShldmVudCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGxvYWRTdGF0
dXNDYWxsYmFjayhXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3LCBHUGFyYW1TcGVjICpzcGVjLCBncG9p
bnRlciBkYXRhKQotewotICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92
aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJWaWV3KTsKLSAgICBUZXN0SW5mbyAqaW5mbyA9IChUZXN0
SW5mbyAqKWRhdGE7Ci0KLSAgICBnX2Fzc2VydChzdGF0dXMgIT0gV0VCS0lUX0xPQURfRkFJTEVE
KTsKLQotICAgIGlmIChzdGF0dXMgIT0gV0VCS0lUX0xPQURfRklOSVNIRUQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgImNvbnRleHQtbWVudSIsIEdf
Q0FMTEJBQ0soY29udGV4dE1lbnVDYWxsYmFjayksIGluZm8pOwotICAgIHB1c2hFdmVudCh3ZWJW
aWV3KTsKLX0KLQotc3RhdGljIGdib29sZWFuIG1hcEV2ZW50Q2FsbGJhY2soR3RrV2lkZ2V0ICp3
aWRnZXQsIEdka0V2ZW50ICpldmVudCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBndGtfd2lkZ2V0
X2dyYWJfZm9jdXMod2lkZ2V0KTsKLSAgICBDb250ZXh0TWVudUZpeHR1cmUgKmZpeHR1cmUgPSAo
Q29udGV4dE1lbnVGaXh0dXJlICopZGF0YTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJp
bmcoZml4dHVyZS0+d2ViVmlldywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4
dHVyZS0+aW5mby0+ZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRleHQv
aHRtbCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1dGYtOCIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlOi8vIik7Ci0gICAgZ19zaWduYWxfY29ubmVj
dChmaXh0dXJlLT53ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0sobG9h
ZFN0YXR1c0NhbGxiYWNrKSwgZml4dHVyZS0+aW5mbyk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQot
Ci1zdGF0aWMgdm9pZCB0ZXN0Q29udGV4dE1lbnUoQ29udGV4dE1lbnVGaXh0dXJlICpmaXh0dXJl
LCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0g
eyAwLCAwLCA1MCwgNTAgfTsKLSAgICBHdGtXaWRnZXQgKndpbmRvdyA9IGd0a193aW5kb3dfbmV3
KEdUS19XSU5ET1dfUE9QVVApOwotCi0gICAgZ3RrX3dpbmRvd19yZXNpemUoR1RLX1dJTkRPVyh3
aW5kb3cpLCA1MCwgNTApOwotICAgIGd0a193aW5kb3dfbW92ZShHVEtfV0lORE9XKHdpbmRvdyks
IDAsIDApOwotICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKGZpeHR1cmUt
PndlYlZpZXcpLCAmYWxsb2NhdGlvbik7Ci0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRB
SU5FUih3aW5kb3cpLCBHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpKTsKLSAgICBnX3NpZ25h
bF9jb25uZWN0KHdpbmRvdywgIm1hcC1ldmVudCIsIEdfQ0FMTEJBQ0sobWFwRXZlbnRDYWxsYmFj
ayksIGZpeHR1cmUpOwotICAgIGd0a193aWRnZXRfc2hvd19hbGwod2luZG93KTsKLQotICAgIGdf
bWFpbl9sb29wX3J1bihsb29wKTsKLX0KLQotc3RhdGljIGdib29sZWFuIGNvbnRleHRNZW51Q3Vz
dG9tSXRlbUNhbGxiYWNrKFdlYktpdFdlYlZpZXcgKndlYlZpZXcsIEd0a1dpZGdldCAqZGVmYXVs
dE1lbnUsIFdlYktpdEhpdFRlc3RSZXN1bHQgKmhpdFRlc3RSZXN1bHQsIGdib29sZWFuIGtleWJv
YXJkTW9kZSwgZ3BvaW50ZXIgdXNlckRhdGEpCi17Ci0gICAgVGVzdEluZm8gKmluZm8gPSAoVGVz
dEluZm8gKil1c2VyRGF0YTsKLSAgICBndWludCBjb250ZXh0OwotICAgIEdMaXN0ICppdGVtczsK
LSAgICBHTGlzdCAqaXRlcjsKLSAgICBHdGtXaWRnZXQgKm1lbnVJdGVtOwotICAgIEd0a0FjdGlv
biAqYWN0aW9uOwotCi0gICAgLyogQ2hlY2sgc2lnbmFsIHBhcmFtZXRlcnMgKi8KLSAgICBnX2Fz
c2VydChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldykpOwotICAgIGdfYXNzZXJ0KEdUS19JU19N
RU5VKGRlZmF1bHRNZW51KSk7Ci0gICAgZ19hc3NlcnQoV0VCS0lUX0lTX0hJVF9URVNUX1JFU1VM
VChoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIWtleWJvYXJkTW9kZSk7Ci0KLSAgICBn
X29iamVjdF9nZXQoaGl0VGVzdFJlc3VsdCwgImNvbnRleHQiLCAmY29udGV4dCwgTlVMTCk7Ci0g
ICAgZ19hc3NlcnQoY29udGV4dCAmIGluZm8tPmZsYWcpOwotCi0gICAgYWN0aW9uID0gZ3RrX2Fj
dGlvbl9uZXcoIlRlc3RBY3Rpb24iLCAiQ3VzdG9tIEFjdGlvbiIsICJDdXN0b20gQWN0aW9uIFRv
b2x0aXAiLCBOVUxMKTsKLSAgICBtZW51SXRlbSA9IGd0a19hY3Rpb25fY3JlYXRlX21lbnVfaXRl
bShhY3Rpb24pOwotICAgIGdfb2JqZWN0X3VucmVmKGFjdGlvbik7Ci0KLSAgICBndGtfbWVudV9z
aGVsbF9hcHBlbmQoR1RLX01FTlVfU0hFTEwoZGVmYXVsdE1lbnUpLCBtZW51SXRlbSk7Ci0gICAg
Z3RrX3dpZGdldF9zaG93KG1lbnVJdGVtKTsKLQotICAgIGl0ZW1zID0gZ3RrX2NvbnRhaW5lcl9n
ZXRfY2hpbGRyZW4oR1RLX0NPTlRBSU5FUihkZWZhdWx0TWVudSkpOwotICAgIGl0ZXIgPSBpdGVt
czsKLSAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T05fR09fQkFDSyk7Ci0gICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhU
X01FTlVfQUNUSU9OX0dPX0ZPUldBUkQpOwotICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9TVE9QKTsKLSAgICBpdGVyID0gY2hlY2tBY3Rpb24o
aXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fUkVMT0FEKTsKLSAgICBpdGVyID0gY2hl
Y2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fTk9fQUNUSU9OKTsKLSAg
ICBnX2Fzc2VydCghaXRlcik7Ci0KLSAgICBnX2xpc3RfZnJlZShpdGVtcyk7Ci0gICAgZ19tYWlu
X2xvb3BfcXVpdChsb29wKTsKLQotICAgIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZCB0
ZXN0Q29udGV4dE1lbnVDdXN0b21JdGVtKENvbnRleHRNZW51Rml4dHVyZSAqZml4dHVyZSwgZ2Nv
bnN0cG9pbnRlciBkYXRhKQotewotICAgIEd0a1dpZGdldCAqd2luZG93ID0gZ3RrX3dpbmRvd19u
ZXcoR1RLX1dJTkRPV19QT1BVUCk7Ci0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5F
Uih3aW5kb3cpLCBHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpKTsKLSAgICBndGtfd2lkZ2V0
X3Nob3dfYWxsKHdpbmRvdyk7Ci0gICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKEdUS19XSURHRVQo
Zml4dHVyZS0+d2ViVmlldykpOwotCi0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKGZp
eHR1cmUtPndlYlZpZXcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeHR1cmUt
PmluZm8tPmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXh0L2h0bWwi
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXRmLTgiLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiZmlsZTovLyIpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4
dHVyZS0+d2ViVmlldywgImNvbnRleHQtbWVudSIsIEdfQ0FMTEJBQ0soY29udGV4dE1lbnVDdXN0
b21JdGVtQ2FsbGJhY2spLCBmaXh0dXJlLT5pbmZvKTsKLSAgICBwdXNoRXZlbnQoZml4dHVyZS0+
d2ViVmlldyk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLXsKLSAgICBn
dGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAgICBnX3Rlc3RfYnVnX2Jhc2Uo
Imh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwotCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC90
ZXN0Y29udGV4dG1lbnUvZG9jdW1lbnQiLCBDb250ZXh0TWVudUZpeHR1cmUsCi0gICAgICAgICAg
ICAgICB0ZXN0SW5mb05ldygiPGh0bWw+PGJvZHk+PGgxPldlYktpdEdUSyshPC9oMT48L2JvZHk+
PC9odG1sPiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfSElUX1RFU1RfUkVT
VUxUX0NPTlRFWFRfRE9DVU1FTlQpLAotICAgICAgICAgICAgICAgY29udGV4dE1lbnVGaXh0dXJl
U2V0dXAsIHRlc3RDb250ZXh0TWVudSwgY29udGV4dE1lbnVGaXh0dXJlVGVhcmRvd24pOwotICAg
IC8qIFdlIGhhcmRjb2RlIGFsbCBlbGVtZW50cyB0byBiZSBhdCAwLDAgc28gdGhhdCB3ZSBrbm93
IHdoZXJlIHRvIGdlbmVyYXRlIHRoZSBidXR0b24gZXZlbnRzICovCi0gICAgZ190ZXN0X2FkZCgi
L3dlYmtpdC90ZXN0Y29udGV4dG1lbnUvaW1hZ2UiLCBDb250ZXh0TWVudUZpeHR1cmUsCi0gICAg
ICAgICAgICAgICB0ZXN0SW5mb05ldygiPGh0bWw+PGJvZHk+PGltZyBzdHlsZT0ncG9zaXRpb246
YWJzb2x1dGU7IGxlZnQ6MDsgdG9wOjAnIHNyYz0nMHhkZWFkYmVlZicgd2lkdGg9NTAgaGVpZ2h0
PTUwPjwvaW1nPjwvYm9keT48L2h0bWw+IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFdF
QktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9JTUFHRSksCi0gICAgICAgICAgICAgICBjb250
ZXh0TWVudUZpeHR1cmVTZXR1cCwgdGVzdENvbnRleHRNZW51LCBjb250ZXh0TWVudUZpeHR1cmVU
ZWFyZG93bik7Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC90ZXN0Y29udGV4dG1lbnUvZWRpdGFi
bGUiLCBDb250ZXh0TWVudUZpeHR1cmUsCi0gICAgICAgICAgICAgICB0ZXN0SW5mb05ldygiPGh0
bWw+PGJvZHk+PGlucHV0IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDowOyB0b3A6MCcg
c2l6ZT0nMzUnPjwvaW5wdXQ+PjwvYm9keT48L2h0bWw+IiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9FRElUQUJMRSksCi0gICAgICAg
ICAgICAgICBjb250ZXh0TWVudUZpeHR1cmVTZXR1cCwgdGVzdENvbnRleHRNZW51LCBjb250ZXh0
TWVudUZpeHR1cmVUZWFyZG93bik7Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC90ZXN0Y29udGV4
dG1lbnUvbGluayIsIENvbnRleHRNZW51Rml4dHVyZSwKLSAgICAgICAgICAgICAgIHRlc3RJbmZv
TmV3KCI8aHRtbD48Ym9keT48YSBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MDsgdG9w
OjAnIGhyZWY9J2h0dHA6Ly93d3cuZXhhbXBsZS5jb20nPkhFTExPIFdPUkxEPC9hPjwvYm9keT48
L2h0bWw+IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9ISVRfVEVTVF9SRVNV
TFRfQ09OVEVYVF9MSU5LKSwKLSAgICAgICAgICAgICAgIGNvbnRleHRNZW51Rml4dHVyZVNldHVw
LCB0ZXN0Q29udGV4dE1lbnUsIGNvbnRleHRNZW51Rml4dHVyZVRlYXJkb3duKTsKLSAgICBnX3Rl
c3RfYWRkKCIvd2Via2l0L3Rlc3Rjb250ZXh0bWVudS9jdXN0b21pdGVtIiwgQ29udGV4dE1lbnVG
aXh0dXJlLAotICAgICAgICAgICAgICAgdGVzdEluZm9OZXcoIjxodG1sPjxib2R5PjxoMT5XZWJL
aXRHVEsrITwvaDE+PC9ib2R5PjwvaHRtbD4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
V0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0RPQ1VNRU5UKSwKLSAgICAgICAgICAgICAg
IGNvbnRleHRNZW51Rml4dHVyZVNldHVwLCB0ZXN0Q29udGV4dE1lbnVDdXN0b21JdGVtLCBjb250
ZXh0TWVudUZpeHR1cmVUZWFyZG93bik7Ci0KLSAgICByZXR1cm4gZ190ZXN0X3J1bigpOwotfQot
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0Y29weWFuZHBhc3RlLmMg
Yi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0Y29weWFuZHBhc3RlLmMKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGJiMzhlYTYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9n
dGsvdGVzdHMvdGVzdGNvcHlhbmRwYXN0ZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjY2ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUg
PHN0cmluZy5oPgotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dl
YmtpdC5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+Ci0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0UmVmLmg+Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAg
ICBjaGFyKiBwYWdlOwotICAgIGNoYXIqIGV4cGVjdGVkQ29udGVudDsKLX0gVGVzdEluZm87Ci0K
LXR5cGVkZWYgc3RydWN0IHsKLSAgICBHdGtXaWRnZXQqIHdpbmRvdzsKLSAgICBXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3OwotICAgIEdNYWluTG9vcCogbG9vcDsKLSAgICBUZXN0SW5mbyogaW5mbzsK
LX0gQ29weUFuZFBhc3RlRml4dHVyZTsKLQotVGVzdEluZm8qCi10ZXN0X2luZm9fbmV3KGNvbnN0
IGNoYXIqIHBhZ2UsIGNvbnN0IGNoYXIqIGV4cGVjdGVkQ29udGVudCkKLXsKLSAgICBUZXN0SW5m
byogaW5mbzsKLSAgICBpbmZvID0gZ19zbGljZV9uZXcwKFRlc3RJbmZvKTsKLSAgICBpbmZvLT5w
YWdlID0gZ19zdHJkdXAocGFnZSk7Ci0gICAgaWYgKGV4cGVjdGVkQ29udGVudCkKLSAgICAgICAg
aW5mby0+ZXhwZWN0ZWRDb250ZW50ID0gZ19zdHJkdXAoZXhwZWN0ZWRDb250ZW50KTsKLSAgICBy
ZXR1cm4gaW5mbzsKLX0KLQotdm9pZAotdGVzdF9pbmZvX2Rlc3Ryb3koVGVzdEluZm8qIGluZm8p
Ci17Ci0gICAgZ19mcmVlKGluZm8tPnBhZ2UpOwotICAgIGdfZnJlZShpbmZvLT5leHBlY3RlZENv
bnRlbnQpOwotICAgIGdfc2xpY2VfZnJlZShUZXN0SW5mbywgaW5mbyk7Ci19Ci0KLXN0YXRpYyB2
b2lkIGNvcHlfYW5kX3Bhc3RlX2ZpeHR1cmVfc2V0dXAoQ29weUFuZFBhc3RlRml4dHVyZSogZml4
dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGZpeHR1cmUtPmxvb3AgPSBnX21haW5f
bG9vcF9uZXcoTlVMTCwgVFJVRSk7Ci0KLSAgICBmaXh0dXJlLT53aW5kb3cgPSBndGtfd2luZG93
X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKLSAgICBmaXh0dXJlLT53ZWJWaWV3ID0gV0VCS0lU
X1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0KLSAgICBndGtfY29udGFpbmVyX2Fk
ZChHVEtfQ09OVEFJTkVSKGZpeHR1cmUtPndpbmRvdyksIEdUS19XSURHRVQoZml4dHVyZS0+d2Vi
VmlldykpOwotfQotCi1zdGF0aWMgdm9pZCBjb3B5X2FuZF9wYXN0ZV9maXh0dXJlX3RlYXJkb3du
KENvcHlBbmRQYXN0ZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAg
ICBndGtfd2lkZ2V0X2Rlc3Ryb3koZml4dHVyZS0+d2luZG93KTsKLSAgICBnX21haW5fbG9vcF91
bnJlZihmaXh0dXJlLT5sb29wKTsKLSAgICB0ZXN0X2luZm9fZGVzdHJveShmaXh0dXJlLT5pbmZv
KTsKLX0KLQotc3RhdGljIHZvaWQgbG9hZF9zdGF0dXNfY2IoV2ViS2l0V2ViVmlldyogd2ViVmll
dywgR1BhcmFtU3BlYyogc3BlYywgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBDb3B5QW5kUGFzdGVG
aXh0dXJlKiBmaXh0dXJlID0gKENvcHlBbmRQYXN0ZUZpeHR1cmUqKWRhdGE7Ci0gICAgV2ViS2l0
TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYlZp
ZXcpOwotICAgIGlmIChzdGF0dXMgIT0gV0VCS0lUX0xPQURfRklOSVNIRUQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEd0a0NsaXBib2FyZCogY2xpcGJvYXJkID0gZ3RrX2NsaXBib2FyZF9nZXQo
R0RLX1NFTEVDVElPTl9DTElQQk9BUkQpOwotICAgIGd0a19jbGlwYm9hcmRfY2xlYXIoY2xpcGJv
YXJkKTsKLQotICAgIHdlYmtpdF93ZWJfdmlld19jb3B5X2NsaXBib2FyZCh3ZWJWaWV3KTsKLQot
ICAgIGdjaGFyKiB0ZXh0ID0gZ3RrX2NsaXBib2FyZF93YWl0X2Zvcl90ZXh0KGNsaXBib2FyZCk7
Ci0gICAgZ19hc3NlcnQodGV4dCB8fCAhZml4dHVyZS0+aW5mby0+ZXhwZWN0ZWRDb250ZW50KTsK
LSAgICBnX2Fzc2VydCghdGV4dCB8fCAhc3RyY21wKHRleHQsIGZpeHR1cmUtPmluZm8tPmV4cGVj
dGVkQ29udGVudCkpOwotICAgIGdfZnJlZSh0ZXh0KTsKLQotICAgIC8vIFZlcmlmeSB0aGF0IHRo
ZSBtYXJrdXAgc3RhcnRzIHdpdGggdGhlIHByb3BlciBjb250ZW50LXR5cGUgbWV0YSB0YWcgcHJl
Zml4LgotICAgIEd0a1NlbGVjdGlvbkRhdGEqIHNlbGVjdGlvbkRhdGEgPSBndGtfY2xpcGJvYXJk
X3dhaXRfZm9yX2NvbnRlbnRzKGNsaXBib2FyZCwgZ2RrX2F0b21faW50ZXJuKCJ0ZXh0L2h0bWwi
LCBGQUxTRSkpOwotICAgIGlmIChzZWxlY3Rpb25EYXRhKSB7Ci0gICAgICAgIHN0YXRpYyBjb25z
dCBjaGFyKiBtYXJrdXBQcmVmaXggPSAiPG1ldGEgaHR0cC1lcXVpdj1cImNvbnRlbnQtdHlwZVwi
IGNvbnRlbnQ9XCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLThcIj4iOwotICAgICAgICBjaGFyKiBt
YXJrdXAgPSBnX3N0cm5kdXAoKGNvbnN0IGNoYXIqKSBndGtfc2VsZWN0aW9uX2RhdGFfZ2V0X2Rh
dGEoc2VsZWN0aW9uRGF0YSksCi0gICAgICAgICAgICBndGtfc2VsZWN0aW9uX2RhdGFfZ2V0X2xl
bmd0aChzZWxlY3Rpb25EYXRhKSk7Ci0gICAgICAgIGdfYXNzZXJ0KHN0cmxlbihtYXJrdXBQcmVm
aXgpIDw9IHN0cmxlbihtYXJrdXApKTsKLSAgICAgICAgZ19hc3NlcnQoIXN0cm5jbXAobWFya3Vw
UHJlZml4LCBtYXJrdXAsIHN0cmxlbihtYXJrdXBQcmVmaXgpKSk7Ci0gICAgICAgIGdfZnJlZSht
YXJrdXApOwotICAgIH0KLQotICAgIGdfYXNzZXJ0KCFndGtfY2xpcGJvYXJkX3dhaXRfaXNfdXJp
c19hdmFpbGFibGUoY2xpcGJvYXJkKSk7Ci0gICAgZ19hc3NlcnQoIWd0a19jbGlwYm9hcmRfd2Fp
dF9pc19pbWFnZV9hdmFpbGFibGUoY2xpcGJvYXJkKSk7Ci0KLSAgICBnX21haW5fbG9vcF9xdWl0
KGZpeHR1cmUtPmxvb3ApOwotfQotCi1nYm9vbGVhbiBtYXBfZXZlbnRfY2IoR3RrV2lkZ2V0ICp3
aWRnZXQsIEdka0V2ZW50KiBldmVudCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBDb3B5QW5kUGFz
dGVGaXh0dXJlKiBmaXh0dXJlID0gKENvcHlBbmRQYXN0ZUZpeHR1cmUqKWRhdGE7Ci0gICAgd2Vi
a2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKGZpeHR1cmUtPndlYlZpZXcsIGZpeHR1cmUtPmluZm8t
PnBhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXh0L2h0bWwiLCAidXRm
LTgiLCAiZmlsZTovLyIpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQgdGVz
dF9jb3B5X2FuZF9wYXN0ZShDb3B5QW5kUGFzdGVGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2lu
dGVyIGRhdGEpCi17Ci0gICAgZml4dHVyZS0+aW5mbyA9IChUZXN0SW5mbyopZGF0YTsKLSAgICBn
X3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndpbmRvdywgIm1hcC1ldmVudCIsCi0gICAgICAgICAg
ICAgICAgICAgICBHX0NBTExCQUNLKG1hcF9ldmVudF9jYiksIGZpeHR1cmUpOwotCi0gICAgZ3Rr
X3dpZGdldF9zaG93KGZpeHR1cmUtPndpbmRvdyk7Ci0gICAgZ3RrX3dpZGdldF9zaG93KEdUS19X
SURHRVQoZml4dHVyZS0+d2ViVmlldykpOwotICAgIGd0a193aW5kb3dfcHJlc2VudChHVEtfV0lO
RE9XKGZpeHR1cmUtPndpbmRvdykpOwotICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1cyhHVEtfV0lE
R0VUKGZpeHR1cmUtPndlYlZpZXcpKTsKLQotICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+
d2ViVmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLAotICAgICAgICAgICAgICAgICAgICAgR19D
QUxMQkFDSyhsb2FkX3N0YXR1c19jYiksIGZpeHR1cmUpOwotCi0gICAgZ19tYWluX2xvb3BfcnVu
KGZpeHR1cmUtPmxvb3ApOwotfQotCi1zdGF0aWMgQ29weUFuZFBhc3RlRml4dHVyZSogY3VycmVu
dEZpeHR1cmU7Ci1zdGF0aWMgSlNWYWx1ZVJlZiBydW5QYXN0ZVRlc3RDYWxsYmFjayhKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmpl
Y3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBK
U1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKEdUS19X
SURHRVQoY3VycmVudEZpeHR1cmUtPndlYlZpZXcpKTsKLQotICAgIC8vIFNpbXVsYXRlIGEgcGFz
dGUga2V5Ym9hcmQgc2VxdWVuY2UuCi0gICAgR2RrRXZlbnQqIGV2ZW50ID0gZ2RrX2V2ZW50X25l
dyhHREtfS0VZX1BSRVNTKTsKLSAgICBldmVudC0+a2V5LmtleXZhbCA9IGdka191bmljb2RlX3Rv
X2tleXZhbCgndicpOwotICAgIGV2ZW50LT5rZXkuc3RhdGUgPSBHREtfQ09OVFJPTF9NQVNLOwot
ICAgIGV2ZW50LT5rZXkud2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KEdUS19XSURHRVQo
Y3VycmVudEZpeHR1cmUtPndlYlZpZXcpKTsKLSAgICBnX29iamVjdF9yZWYoZXZlbnQtPmtleS53
aW5kb3cpOwotI2lmbmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotICAgIEdka0RldmljZU1hbmFnZXIq
IG1hbmFnZXIgPSAgZ2RrX2Rpc3BsYXlfZ2V0X2RldmljZV9tYW5hZ2VyKGdka193aW5kb3dfZ2V0
X2Rpc3BsYXkoZXZlbnQtPmtleS53aW5kb3cpKTsKLSAgICBnZGtfZXZlbnRfc2V0X2RldmljZShl
dmVudCwgZ2RrX2RldmljZV9tYW5hZ2VyX2dldF9jbGllbnRfcG9pbnRlcihtYW5hZ2VyKSk7Ci0j
ZW5kaWYKLQotICAgIEdka0tleW1hcEtleSoga2V5czsKLSAgICBnaW50IG5fa2V5czsKLSAgICBp
ZiAoZ2RrX2tleW1hcF9nZXRfZW50cmllc19mb3Jfa2V5dmFsKGdka19rZXltYXBfZ2V0X2RlZmF1
bHQoKSwgZXZlbnQtPmtleS5rZXl2YWwsICZrZXlzLCAmbl9rZXlzKSkgewotICAgICAgICBldmVu
dC0+a2V5LmhhcmR3YXJlX2tleWNvZGUgPSBrZXlzWzBdLmtleWNvZGU7Ci0gICAgICAgIGdfZnJl
ZShrZXlzKTsKLSAgICB9Ci0KLSAgICBndGtfbWFpbl9kb19ldmVudChldmVudCk7Ci0gICAgZXZl
bnQtPmtleS50eXBlID0gR0RLX0tFWV9SRUxFQVNFOwotICAgIGd0a19tYWluX2RvX2V2ZW50KGV2
ZW50KTsKLSAgICBnZGtfZXZlbnRfZnJlZShldmVudCk7Ci0KLSAgICBKU1N0cmluZ1JlZiBzY3Jp
cHRTdHJpbmcgPSBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZG9jdW1lbnQuYm9keS5p
bm5lckhUTUw7Iik7Ci0gICAgSlNWYWx1ZVJlZiB2YWx1ZSA9IEpTRXZhbHVhdGVTY3JpcHQoY29u
dGV4dCwgc2NyaXB0U3RyaW5nLCAwLCAwLCAwLCAwKTsKLSAgICBKU1N0cmluZ1JlbGVhc2Uoc2Ny
aXB0U3RyaW5nKTsKLQotICAgIGdfYXNzZXJ0KEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCB2YWx1
ZSkpOwotICAgIEpTU3RyaW5nUmVmIGFjdHVhbCA9IEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4
dCwgdmFsdWUsIGV4Y2VwdGlvbik7Ci0gICAgZ19hc3NlcnQoIWV4Y2VwdGlvbiB8fCAhKmV4Y2Vw
dGlvbik7Ci0gICAgZ19hc3NlcnQoY3VycmVudEZpeHR1cmUtPmluZm8tPmV4cGVjdGVkQ29udGVu
dCk7Ci0gICAgSlNTdHJpbmdSZWYgZXhwZWN0ZWQgPSBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZyhjdXJyZW50Rml4dHVyZS0+aW5mby0+ZXhwZWN0ZWRDb250ZW50KTsKLSAgICBnX2Fzc2Vy
dChKU1N0cmluZ0lzRXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCkpOwotCi0gICAgSlNTdHJpbmdSZWxl
YXNlKGV4cGVjdGVkKTsKLSAgICBKU1N0cmluZ1JlbGVhc2UoYWN0dWFsKTsKLSAgICBnX21haW5f
bG9vcF9xdWl0KGN1cnJlbnRGaXh0dXJlLT5sb29wKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdpbmRvd19vYmplY3RfY2xlYXJl
ZF9jYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgV2ViS2l0V2ViRnJhbWUqIHdlYl9m
cmFtZSwgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHdpbmRvd19vYmpl
Y3QsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgSlNTdHJpbmdSZWYgbmFtZSA9IEpTU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJydW5UZXN0Iik7Ci0gICAgSlNPYmplY3RSZWYgdGVzdENvbXBs
ZXRlID0gSlNPYmplY3RNYWtlRnVuY3Rpb25XaXRoQ2FsbGJhY2soY29udGV4dCwgbmFtZSwgcnVu
UGFzdGVUZXN0Q2FsbGJhY2spOwotICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwgd2lu
ZG93X29iamVjdCwgbmFtZSwgdGVzdENvbXBsZXRlLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUs
IDApOwotICAgIEpTU3RyaW5nUmVsZWFzZShuYW1lKTsKLX0KLQotc3RhdGljIHZvaWQgcGFzdGlu
Z190ZXN0X2dldF9kYXRhX2NhbGxiYWNrKEd0a0NsaXBib2FyZCogY2xpcGJvYXJkLCBHdGtTZWxl
Y3Rpb25EYXRhKiBzZWxlY3Rpb25fZGF0YSwgZ3VpbnQgaW5mbywgZ3BvaW50ZXIgZGF0YSkKLXsK
LSAgICBndGtfc2VsZWN0aW9uX2RhdGFfc2V0KHNlbGVjdGlvbl9kYXRhLCBnZGtfYXRvbV9pbnRl
cm4oInRleHQvaHRtbCIsIEZBTFNFKSwgOCwgKGNvbnN0IGd1Y2hhciopIGRhdGEsIHN0cmxlbigo
Y2hhciopZGF0YSkgKyAxKTsKLX0KLQotc3RhdGljIHZvaWQgcGFzdGluZ190ZXN0X2NsZWFyX2Rh
dGFfY2FsbGJhY2soR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQsIGdwb2ludGVyIGRhdGEpCi17Ci0g
ICAgZ19mcmVlKGRhdGEpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3Bhc3RpbmdfbWFya3VwKENv
cHlBbmRQYXN0ZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBm
aXh0dXJlLT5pbmZvID0gKFRlc3RJbmZvKilkYXRhOwotICAgIGN1cnJlbnRGaXh0dXJlID0gZml4
dHVyZTsKLQotICAgIEd0a1RhcmdldExpc3QqIHRhcmdldExpc3QgPSBndGtfdGFyZ2V0X2xpc3Rf
bmV3KDAsIDApOwotICAgIGd0a190YXJnZXRfbGlzdF9hZGQodGFyZ2V0TGlzdCwgZ2RrX2F0b21f
aW50ZXJuKCJ0ZXh0L2h0bWwiLCBGQUxTRSksIDAsIDApOwotCi0gICAgaW50IG51bWJlck9mVGFy
Z2V0cyA9IDE7Ci0gICAgR3RrVGFyZ2V0RW50cnkqIHRhcmdldFRhYmxlID0gZ3RrX3RhcmdldF90
YWJsZV9uZXdfZnJvbV9saXN0KHRhcmdldExpc3QsICZudW1iZXJPZlRhcmdldHMpOwotICAgIGd0
a19jbGlwYm9hcmRfc2V0X3dpdGhfZGF0YShndGtfY2xpcGJvYXJkX2dldChHREtfU0VMRUNUSU9O
X0NMSVBCT0FSRCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFRhYmxl
LCBudW1iZXJPZlRhcmdldHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3Rp
bmdfdGVzdF9nZXRfZGF0YV9jYWxsYmFjaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFzdGluZ190ZXN0X2NsZWFyX2RhdGFfY2FsbGJhY2ssCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdfc3RyZHVwKGZpeHR1cmUtPmluZm8tPmV4cGVjdGVkQ29udGVudCkpOwot
ICAgIGd0a190YXJnZXRfbGlzdF91bnJlZih0YXJnZXRMaXN0KTsKLSAgICBndGtfdGFyZ2V0X3Rh
YmxlX2ZyZWUodGFyZ2V0VGFibGUsIG51bWJlck9mVGFyZ2V0cyk7Ci0KLSAgICBnX3NpZ25hbF9j
b25uZWN0KGZpeHR1cmUtPndpbmRvdywgIm1hcC1ldmVudCIsCi0gICAgICAgICAgICAgICAgICAg
ICBHX0NBTExCQUNLKG1hcF9ldmVudF9jYiksIGZpeHR1cmUpOwotICAgIGdfc2lnbmFsX2Nvbm5l
Y3QoZml4dHVyZS0+d2ViVmlldywgIndpbmRvdy1vYmplY3QtY2xlYXJlZCIsCi0gICAgICAgICAg
ICAgICAgICAgICBHX0NBTExCQUNLKHdpbmRvd19vYmplY3RfY2xlYXJlZF9jYWxsYmFjayksIGZp
eHR1cmUpOwotCi0gICAgZ3RrX3dpZGdldF9zaG93KGZpeHR1cmUtPndpbmRvdyk7Ci0gICAgZ3Rr
X3dpZGdldF9zaG93KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldykpOwotICAgIGd0a193aW5k
b3dfcHJlc2VudChHVEtfV0lORE9XKGZpeHR1cmUtPndpbmRvdykpOwotCi0gICAgZ19tYWluX2xv
b3BfcnVuKGZpeHR1cmUtPmxvb3ApOwotfQotCi0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiog
YXJndikKLXsKLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAgICBn
X3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwotICAgIGNvbnN0IGNo
YXIqIHNlbGVjdGVkX3NwYW5faHRtbCA9ICI8aHRtbD48Ym9keT4iCi0gICAgICAgICI8c3BhbiBp
ZD1cIm1haW5zcGFuXCI+QWxsIHdvcmsgYW5kIG5vIHBsYXkgPHNwYW4+bWFrZSBKYWNrIGEgZHVs
bDwvc3Bhbj4gYm95Ljwvc3Bhbj4iCi0gICAgICAgICI8c2NyaXB0PmRvY3VtZW50LmdldFNlbGVj
dGlvbigpLmNvbGxhcHNlKCk7XG4iCi0gICAgICAgICJkb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5z
ZWxlY3RBbGxDaGlsZHJlbihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbnNwYW4nKSk7XG4i
Ci0gICAgICAgICI8L3NjcmlwdD48L2JvZHk+PC9odG1sPiI7Ci0gICAgY29uc3QgY2hhciogbm9f
c2VsZWN0aW9uX2h0bWwgPSAiPGh0bWw+PGJvZHk+IgotICAgICAgICAiPHNwYW4gaWQ9XCJtYWlu
c3BhblwiPkFsbCB3b3JrIGFuZCBubyBwbGF5IDxzcGFuPm1ha2UgSmFjayBhIGR1bGw8L3NwYW4+
IGJveTwvc3Bhbj4iCi0gICAgICAgICI8c2NyaXB0PmRvY3VtZW50LmdldFNlbGVjdGlvbigpLmNv
bGxhcHNlKCk7XG4iCi0gICAgICAgICI8L3NjcmlwdD48L2JvZHk+PC9odG1sPiI7Ci0KLSAgICBn
X3Rlc3RfYWRkKCIvd2Via2l0L2NvcHlhbmRwYXN0ZS9zZWxlY3Rpb24iLCBDb3B5QW5kUGFzdGVG
aXh0dXJlLAotICAgICAgICAgICAgICAgdGVzdF9pbmZvX25ldyhzZWxlY3RlZF9zcGFuX2h0bWws
ICJBbGwgd29yayBhbmQgbm8gcGxheSBtYWtlIEphY2sgYSBkdWxsIGJveS4iKSwKLSAgICAgICAg
ICAgICAgIGNvcHlfYW5kX3Bhc3RlX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0
X2NvcHlfYW5kX3Bhc3RlLAotICAgICAgICAgICAgICAgY29weV9hbmRfcGFzdGVfZml4dHVyZV90
ZWFyZG93bik7Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9jb3B5YW5kcGFzdGUvbm8tc2VsZWN0
aW9uIiwgQ29weUFuZFBhc3RlRml4dHVyZSwKLSAgICAgICAgICAgICAgIHRlc3RfaW5mb19uZXco
bm9fc2VsZWN0aW9uX2h0bWwsIDApLAotICAgICAgICAgICAgICAgY29weV9hbmRfcGFzdGVfZml4
dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3RfY29weV9hbmRfcGFzdGUsCi0gICAgICAg
ICAgICAgICBjb3B5X2FuZF9wYXN0ZV9maXh0dXJlX3RlYXJkb3duKTsKLQotICAgIGNvbnN0IGNo
YXIqIHBhc3RlX3Rlc3RfaHRtbCA9ICI8aHRtbD4iCi0gICAgICAgICI8Ym9keSBvbkxvYWQ9XCJk
b2N1bWVudC5ib2R5LmZvY3VzKCk7IHJ1blRlc3QoKTtcIiBjb250ZW50RWRpdGFibGU9XCJ0cnVl
XCI+IgotICAgICAgICAiPC9ib2R5PjwvaHRtbD4iOwotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQv
Y29weWFuZHBhc3RlL3Bhc3RlLW1hcmt1cCIsIENvcHlBbmRQYXN0ZUZpeHR1cmUsCi0gICAgICAg
ICAgICAgICB0ZXN0X2luZm9fbmV3KHBhc3RlX3Rlc3RfaHRtbCwgImJvYmJ5IiksCi0gICAgICAg
ICAgICAgICBjb3B5X2FuZF9wYXN0ZV9maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVz
dF9wYXN0aW5nX21hcmt1cCwKLSAgICAgICAgICAgICAgIGNvcHlfYW5kX3Bhc3RlX2ZpeHR1cmVf
dGVhcmRvd24pOwotCi0gICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsKLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rkb21kb2N1bWVudC5jIGIvU291cmNlL1dlYktpdC9n
dGsvdGVzdHMvdGVzdGRvbWRvY3VtZW50LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDRjOTk3ZGQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvbWRv
Y3VtZW50LmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAidGVz
dF91dGlscy5oIgotCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+
Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KLQotI2Rl
ZmluZSBIVE1MX0RPQ1VNRU5UX1RJVExFICI8aHRtbD48aGVhZD48dGl0bGU+VGhpcyBpcyB0aGUg
dGl0bGU8L3RpdGxlPjwvaGVhZD48Ym9keT48L2JvZHk+PC9odG1sPiIKLSNkZWZpbmUgSFRNTF9E
T0NVTUVOVF9FTEVNRU5UUyAiPGh0bWw+PGJvZHk+PHVsPjxsaT4xPC9saT48bGk+MjwvbGk+PGxp
PjM8L2xpPjwvdWw+PC9ib2R5PjwvaHRtbD4iCi0jZGVmaW5lIEhUTUxfRE9DVU1FTlRfRUxFTUVO
VFNfQ0xBU1MgIjxodG1sPjxib2R5PjxkaXYgY2xhc3M9XCJ0ZXN0XCI+PC9kaXY+PGRpdiBjbGFz
cz1cInN0cmFuZ2VcIj48L2Rpdj48ZGl2IGNsYXNzPVwidGVzdFwiPjwvZGl2PjwvYm9keT48L2h0
bWw+IgotI2RlZmluZSBIVE1MX0RPQ1VNRU5UX0VMRU1FTlRTX0lEICI8aHRtbD48Ym9keT48ZGl2
IGlkPVwidGVzdG9rXCI+PC9kaXY+PGRpdiBpZD1cInRlc3RiYWRcIj5maXJzdDwvZGl2PjxkaXYg
aWQ9XCJ0ZXN0YmFkXCI+c2Vjb25kPC9kaXY+PC9ib2R5PjwvaHRtbD4iCi0jZGVmaW5lIEhUTUxf
RE9DVU1FTlRfTElOS1MgIjxodG1sPjxoZWFkPjx0aXRsZT5UaXRsZTwvdGl0bGU+PC9oZWFkPjxi
b2R5PjxhIGhyZWY9XCJhYm91dDpibGFua1wiPmJsYW5rPC9hPjxhIGhyZWY9XCJodHRwOi8vd3d3
Lmdvb2dsZS5jb21cIj5nb29nbGU8L2E+PGEgaHJlZj1cImh0dHA6Ly93d3cud2Via2l0Lm9yZ1wi
PndlYmtpdDwvYT48L2JvZHk+PC9odG1sPiIKLSNkZWZpbmUgSFRNTF9ET0NVTUVOVF9JRlJBTUUg
IjxodG1sPjxoZWFkPjx0aXRsZT5JRnJhbWU8L3RpdGxlPjwvaGVhZD48Ym9keT48aWZyYW1lIGlk
PSdpZnJhbWUnPjwvaWZyYW1lPjxkaXYgaWQ9J3Rlc3QnPjwvZGl2PjwvYm9keT48L2h0bWw+Igot
I2RlZmluZSBIVE1MX0RPQ1VNRU5UX1RBQkxFICI8aHRtbD48Ym9keT48dGFibGUgaWQ9XCJ0YWJs
ZVwiPjwvdGFibGU+PC9ib2R5PjwvaHRtbD4iCi0jZGVmaW5lIEhUTUxfRE9DVU1FTlRfRVZBTFVB
VEUgIjxodG1sPjxoZWFkPjx0aXRsZT48L3RpdGxlPjwvaGVhZD48Ym9keT48ZGl2PkZpcnN0IGRp
djwvZGl2PjxkaXY+U2Vjb25kIGRpdjwvZGl2PjwvYm9keT48L2h0bWw+IgotCi10eXBlZGVmIHN0
cnVjdCB7Ci0gICAgR3RrV2lkZ2V0KiB3ZWJWaWV3OwotICAgIEdNYWluTG9vcCogbG9vcDsKLX0g
RG9tRG9jdW1lbnRGaXh0dXJlOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZmluaXNoX2xvYWRpbmcoRG9t
RG9jdW1lbnRGaXh0dXJlKiBmaXh0dXJlKQotewotICAgIGlmIChnX21haW5fbG9vcF9pc19ydW5u
aW5nKGZpeHR1cmUtPmxvb3ApKQotICAgICAgICBnX21haW5fbG9vcF9xdWl0KGZpeHR1cmUtPmxv
b3ApOwotCi0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCBkb21fZG9jdW1lbnRf
Zml4dHVyZV9zZXR1cChEb21Eb2N1bWVudEZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIg
ZGF0YSkKLXsKLSAgICBmaXh0dXJlLT5sb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUp
OwotICAgIGZpeHR1cmUtPndlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7Ci0gICAgZ19v
YmplY3RfcmVmX3NpbmsoZml4dHVyZS0+d2ViVmlldyk7Ci0KLSAgICBpZiAoZGF0YSAhPSBOVUxM
KQotICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVXIChm
aXh0dXJlLT53ZWJWaWV3KSwgKGNvbnN0IGNoYXIqKSBkYXRhLCBOVUxMLCBOVUxMLCBOVUxMKTsK
LQotICAgIGdfaWRsZV9hZGQoKEdTb3VyY2VGdW5jKWZpbmlzaF9sb2FkaW5nLCBmaXh0dXJlKTsK
LSAgICBnX21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRv
bV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKERvbURvY3VtZW50Rml4dHVyZSogZml4dHVyZSwg
Z2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGlmIChmaXh0dXJlLT53ZWJWaWV3KQotICAgICAg
ICBnX29iamVjdF91bnJlZihmaXh0dXJlLT53ZWJWaWV3KTsKLSAgICBnX21haW5fbG9vcF91bnJl
ZihmaXh0dXJlLT5sb29wKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF9kb21fZG9jdW1lbnRfdGl0
bGUoRG9tRG9jdW1lbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0g
ICAgZ19hc3NlcnQoZml4dHVyZSk7Ci0gICAgV2ViS2l0V2ViVmlldyogdmlldyA9IChXZWJLaXRX
ZWJWaWV3KilmaXh0dXJlLT53ZWJWaWV3OwotICAgIGdfYXNzZXJ0KHZpZXcpOwotICAgIFdlYktp
dERPTURvY3VtZW50KiBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50
KHZpZXcpOwotICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsKLSAgICBnY2hhciogdGl0bGUgPSB3ZWJr
aXRfZG9tX2RvY3VtZW50X2dldF90aXRsZShkb2N1bWVudCk7Ci0gICAgZ19hc3NlcnQodGl0bGUp
OwotICAgIGdfYXNzZXJ0X2NtcHN0cih0aXRsZSwgPT0sICJUaGlzIGlzIHRoZSB0aXRsZSIpOwot
ICAgIGdfZnJlZSh0aXRsZSk7Ci0gICAgd2Via2l0X2RvbV9kb2N1bWVudF9zZXRfdGl0bGUoZG9j
dW1lbnQsICJUaGlzIGlzIHRoZSBzZWNvbmQgdGl0bGUiKTsKLSAgICB0aXRsZSA9IHdlYmtpdF9k
b21fZG9jdW1lbnRfZ2V0X3RpdGxlKGRvY3VtZW50KTsKLSAgICBnX2Fzc2VydCh0aXRsZSk7Ci0g
ICAgZ19hc3NlcnRfY21wc3RyKHRpdGxlLCA9PSwgIlRoaXMgaXMgdGhlIHNlY29uZCB0aXRsZSIp
OwotICAgIGdfZnJlZSh0aXRsZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RfZG9tX2RvY3VtZW50
X2dldF9lbGVtZW50c19ieV90YWdfbmFtZShEb21Eb2N1bWVudEZpeHR1cmUqIGZpeHR1cmUsIGdj
b25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBnX2Fzc2VydChmaXh0dXJlKTsKLSAgICBXZWJLaXRX
ZWJWaWV3KiB2aWV3ID0gKFdlYktpdFdlYlZpZXcqKWZpeHR1cmUtPndlYlZpZXc7Ci0gICAgZ19h
c3NlcnQodmlldyk7Ci0gICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50ID0gd2Via2l0X3dl
Yl92aWV3X2dldF9kb21fZG9jdW1lbnQodmlldyk7Ci0gICAgZ19hc3NlcnQoZG9jdW1lbnQpOwot
ICAgIFdlYktpdERPTU5vZGVMaXN0KiBsaXN0ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxl
bWVudHNfYnlfdGFnX25hbWUoZG9jdW1lbnQsICJsaSIpOwotICAgIGdfYXNzZXJ0KGxpc3QpOwot
ICAgIGd1bG9uZyBsZW5ndGggPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3Qp
OwotICAgIGdfYXNzZXJ0X2NtcGludChsZW5ndGgsID09LCAzKTsKLQotICAgIGd1aW50IGk7Ci0K
LSAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgV2ViS2l0RE9NTm9k
ZSogaXRlbSA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdCwgaSk7Ci0gICAgICAgIGdf
YXNzZXJ0KGl0ZW0pOwotICAgICAgICBXZWJLaXRET01FbGVtZW50KiBlbGVtZW50ID0gKFdlYktp
dERPTUVsZW1lbnQqKWl0ZW07Ci0gICAgICAgIGdfYXNzZXJ0KGVsZW1lbnQpOwotICAgICAgICBn
X2Fzc2VydF9jbXBzdHIod2Via2l0X2RvbV9lbGVtZW50X2dldF90YWdfbmFtZShlbGVtZW50KSwg
PT0sICJMSSIpOwotICAgICAgICBXZWJLaXRET01IVE1MRWxlbWVudCogaHRtbEVsZW1lbnQgPSAo
V2ViS2l0RE9NSFRNTEVsZW1lbnQqKWVsZW1lbnQ7Ci0gICAgICAgIGNoYXIqIG4gPSBnX3N0cmR1
cF9wcmludGYoIiVkIiwgaSsxKTsKLSAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9kb21f
aHRtbF9lbGVtZW50X2dldF9pbm5lcl90ZXh0KGh0bWxFbGVtZW50KSwgPT0sIG4pOwotICAgICAg
ICBnX2ZyZWUobik7Ci0gICAgfQotCi0gICAgZ19vYmplY3RfdW5yZWYobGlzdCk7Ci19Ci0KLXN0
YXRpYyB2b2lkIHRlc3RfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19ieV9jbGFzc19uYW1lKERv
bURvY3VtZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGdf
YXNzZXJ0KGZpeHR1cmUpOwotICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSAoV2ViS2l0V2ViVmll
dyopZml4dHVyZS0+d2ViVmlldzsKLSAgICBnX2Fzc2VydCh2aWV3KTsKLSAgICBXZWJLaXRET01E
b2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3
KTsKLSAgICBnX2Fzc2VydChkb2N1bWVudCk7Ci0gICAgV2ViS2l0RE9NTm9kZUxpc3QqIGxpc3Qg
PSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19ieV9jbGFzc19uYW1lKGRvY3VtZW50
LCAidGVzdCIpOwotICAgIGdfYXNzZXJ0KGxpc3QpOwotICAgIGd1bG9uZyBsZW5ndGggPSB3ZWJr
aXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QpOwotICAgIGdfYXNzZXJ0X2NtcGludChs
ZW5ndGgsID09LCAyKTsKLQotICAgIGd1aW50IGk7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgbGVu
Z3RoOyBpKyspIHsKLSAgICAgICAgV2ViS2l0RE9NTm9kZSogaXRlbSA9IHdlYmtpdF9kb21fbm9k
ZV9saXN0X2l0ZW0obGlzdCwgaSk7Ci0gICAgICAgIGdfYXNzZXJ0KGl0ZW0pOwotICAgICAgICBX
ZWJLaXRET01FbGVtZW50KiBlbGVtZW50ID0gKFdlYktpdERPTUVsZW1lbnQqKWl0ZW07Ci0gICAg
ICAgIGdfYXNzZXJ0KGVsZW1lbnQpOwotICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2Rv
bV9lbGVtZW50X2dldF90YWdfbmFtZShlbGVtZW50KSwgPT0sICJESVYiKTsKLSAgICB9Ci0KLSAg
ICBnX29iamVjdF91bnJlZihsaXN0KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF9kb21fZG9jdW1l
bnRfZ2V0X2VsZW1lbnRfYnlfaWQoRG9tRG9jdW1lbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rw
b2ludGVyIGRhdGEpCi17Ci0gICAgZ19hc3NlcnQoZml4dHVyZSk7Ci0gICAgV2ViS2l0V2ViVmll
dyogdmlldyA9IChXZWJLaXRXZWJWaWV3KilmaXh0dXJlLT53ZWJWaWV3OwotICAgIGdfYXNzZXJ0
KHZpZXcpOwotICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmll
d19nZXRfZG9tX2RvY3VtZW50KHZpZXcpOwotICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsKLSAgICBX
ZWJLaXRET01FbGVtZW50KiBlbGVtZW50ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVu
dF9ieV9pZChkb2N1bWVudCwgInRlc3RvayIpOwotICAgIGdfYXNzZXJ0KGVsZW1lbnQpOwotICAg
IGVsZW1lbnQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50X2J5X2lkKGRvY3VtZW50
LCAidGhpcy1pZC1kb2VzLW5vdC1leGlzdCIpOwotICAgIGdfYXNzZXJ0KGVsZW1lbnQgPT0gMCk7
Ci0gICAgLyogVGhlIERPTSBzcGVjIHNheXMgdGhlIHJldHVybiB2YWx1ZSBpcyB1bmRlZmluZWQg
d2hlbiB0aGVyZSdzCi0gICAgICogbW9yZSB0aGFuIG9uZSBlbGVtZW50IHdpdGggdGhlIHNhbWUg
aWQ7IGluIG91ciBjYXNlIHRoZSBmaXJzdAotICAgICAqIG9uZSB3aWxsIGJlIHJldHVybmVkICov
Ci0gICAgZWxlbWVudCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRfYnlfaWQoZG9j
dW1lbnQsICJ0ZXN0YmFkIik7Ci0gICAgZ19hc3NlcnQoZWxlbWVudCk7Ci0gICAgV2ViS2l0RE9N
SFRNTEVsZW1lbnQqIGh0bWxFbGVtZW50ID0gKFdlYktpdERPTUhUTUxFbGVtZW50KillbGVtZW50
OwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfaW5uZXJf
dGV4dChodG1sRWxlbWVudCksID09LCAiZmlyc3QiKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF9k
b21fZG9jdW1lbnRfZ2V0X2xpbmtzKERvbURvY3VtZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0
cG9pbnRlciBkYXRhKQotewotICAgIGdfYXNzZXJ0KGZpeHR1cmUpOwotICAgIFdlYktpdFdlYlZp
ZXcqIHZpZXcgPSAoV2ViS2l0V2ViVmlldyopZml4dHVyZS0+d2ViVmlldzsKLSAgICBnX2Fzc2Vy
dCh2aWV3KTsKLSAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKLSAgICBnX2Fzc2VydChkb2N1bWVudCk7Ci0gICAg
V2ViS2l0RE9NSFRNTENvbGxlY3Rpb24gKmNvbGxlY3Rpb24gPSB3ZWJraXRfZG9tX2RvY3VtZW50
X2dldF9saW5rcyhkb2N1bWVudCk7Ci0gICAgZ19hc3NlcnQoY29sbGVjdGlvbik7Ci0gICAgZ3Vs
b25nIGxlbmd0aCA9IHdlYmtpdF9kb21faHRtbF9jb2xsZWN0aW9uX2dldF9sZW5ndGgoY29sbGVj
dGlvbik7Ci0gICAgZ19hc3NlcnRfY21waW50KGxlbmd0aCwgPT0sIDMpOwotCi0gICAgZ3VpbnQg
aTsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBzdGF0aWMg
Y29uc3QgY2hhciogbmFtZXNbXSA9IHsgImJsYW5rIiwgImdvb2dsZSIsICJ3ZWJraXQiIH07Ci0g
ICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiB1cmlzW10gPSB7ICJhYm91dDpibGFuayIsICJodHRw
Oi8vd3d3Lmdvb2dsZS5jb20vIiwgImh0dHA6Ly93d3cud2Via2l0Lm9yZy8iIH07Ci0gICAgICAg
IFdlYktpdERPTU5vZGUgKm5vZGUgPSB3ZWJraXRfZG9tX2h0bWxfY29sbGVjdGlvbl9pdGVtKGNv
bGxlY3Rpb24sIGkpOwotICAgICAgICBnX2Fzc2VydChub2RlKTsKLSAgICAgICAgV2ViS2l0RE9N
RWxlbWVudCogZWxlbWVudCA9IChXZWJLaXRET01FbGVtZW50Kilub2RlOwotICAgICAgICBnX2Fz
c2VydF9jbXBzdHIod2Via2l0X2RvbV9lbGVtZW50X2dldF90YWdfbmFtZShlbGVtZW50KSwgPT0s
ICJBIik7Ci0gICAgICAgIFdlYktpdERPTUhUTUxFbGVtZW50ICpodG1sRWxlbWVudCA9IChXZWJL
aXRET01IVE1MRWxlbWVudCopZWxlbWVudDsKLSAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtp
dF9kb21faHRtbF9lbGVtZW50X2dldF9pbm5lcl90ZXh0KGh0bWxFbGVtZW50KSwgPT0sIG5hbWVz
W2ldKTsKLSAgICAgICAgV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQgKmFuY2hvciA9IChXZWJL
aXRET01IVE1MQW5jaG9yRWxlbWVudCopZWxlbWVudDsKLSAgICAgICAgZ19hc3NlcnRfY21wc3Ry
KHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfaHJlZihhbmNob3IpLCA9PSwgdXJp
c1tpXSk7Ci0gICAgfQotICAgIGdfb2JqZWN0X3VucmVmKGNvbGxlY3Rpb24pOwotfQotCi1zdGF0
aWMgdm9pZCB0ZXN0X2RvbV9kb2N1bWVudF9pbnNlcnRfcm93KERvbURvY3VtZW50Rml4dHVyZSog
Zml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGdfYXNzZXJ0KGZpeHR1cmUpOwot
ICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSAoV2ViS2l0V2ViVmlldyopZml4dHVyZS0+d2ViVmll
dzsKLSAgICBnX2Fzc2VydCh2aWV3KTsKLSAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQg
PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKLSAgICBnX2Fzc2VydChX
RUJLSVRfRE9NX0lTX0RPQ1VNRU5UKGRvY3VtZW50KSk7Ci0gICAgV2ViS2l0RE9NRWxlbWVudCog
dGFibGUgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50X2J5X2lkKGRvY3VtZW50LCAi
dGFibGUiKTsKLSAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVCh0YWJsZSkp
OwotICAgIFdlYktpdERPTUhUTUxDb2xsZWN0aW9uKiByb3dzID0gd2Via2l0X2RvbV9odG1sX3Rh
YmxlX2VsZW1lbnRfZ2V0X3Jvd3MoV0VCS0lUX0RPTV9IVE1MX1RBQkxFX0VMRU1FTlQodGFibGUp
KTsKLSAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfQ09MTEVDVElPTihyb3dzKSk7Ci0K
LSAgICAvLyBUYWJsZSBpcyBpbml0aWFsbHkgZW1wdHkuCi0gICAgZ19hc3NlcnRfY21waW50KHdl
YmtpdF9kb21faHRtbF9jb2xsZWN0aW9uX2dldF9sZW5ndGgocm93cyksID09LCAwKTsKLSAgICBX
ZWJLaXRET01IVE1MRWxlbWVudCogcm93ID0gd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRf
aW5zZXJ0X3JvdyhXRUJLSVRfRE9NX0hUTUxfVEFCTEVfRUxFTUVOVCh0YWJsZSksIC0xLCBOVUxM
KTsKLSAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfUk9XX0VMRU1FTlQocm93
KSk7Ci0gICAgcm93cyA9IHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2dldF9yb3dzKFdF
QktJVF9ET01fSFRNTF9UQUJMRV9FTEVNRU5UKHRhYmxlKSk7Ci0gICAgZ19hc3NlcnQoV0VCS0lU
X0RPTV9JU19IVE1MX0NPTExFQ1RJT04ocm93cykpOwotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJr
aXRfZG9tX2h0bWxfY29sbGVjdGlvbl9nZXRfbGVuZ3RoKHJvd3MpLCA9PSwgMSk7Ci19Ci0KLXN0
YXRpYyB2b2lkIHRlc3RfZG9tX2RvY3VtZW50X2V2YWx1YXRlKERvbURvY3VtZW50Rml4dHVyZSog
Zml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGdfYXNzZXJ0KGZpeHR1cmUpOwot
ICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSAoV2ViS2l0V2ViVmlldyopZml4dHVyZS0+d2ViVmll
dzsKLSAgICBnX2Fzc2VydCh2aWV3KTsKLSAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQg
PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKLSAgICBnX2Fzc2VydChX
RUJLSVRfRE9NX0lTX0RPQ1VNRU5UKGRvY3VtZW50KSk7Ci0gICAgV2ViS2l0RE9NTm9kZUxpc3Qq
IGxpc3QgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19ieV90YWdfbmFtZShkb2N1
bWVudCwgImh0bWwiKTsKLSAgICBnX2Fzc2VydChsaXN0KTsKLSAgICBndWxvbmcgbGVuZ3RoID0g
d2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChsaXN0KTsKLSAgICBnX2Fzc2VydF9jbXBp
bnQobGVuZ3RoLCA9PSwgMSk7Ci0gICAgV2ViS2l0RE9NTm9kZSogaHRtbCA9IHdlYmtpdF9kb21f
bm9kZV9saXN0X2l0ZW0obGlzdCwgMCk7Ci0gICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19OT0RF
KGh0bWwpKTsKLQotICAgIFdlYktpdERPTVhQYXRoUmVzdWx0KiByZXN1bHQgPSB3ZWJraXRfZG9t
X2RvY3VtZW50X2V2YWx1YXRlKGRvY3VtZW50LCAiLy9kaXYiLCBodG1sLCBOVUxMLCAwLCBOVUxM
LCBOVUxMKTsKLSAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX1hQQVRIX1JFU1VMVChyZXN1bHQp
KTsKLQotICAgIGludCBpID0gMDsKLSAgICBXZWJLaXRET01Ob2RlKiBub2RlOwotICAgIHdoaWxl
ICggKG5vZGUgPSB3ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9pdGVyYXRlX25leHQocmVzdWx0LCBO
VUxMKSkgIT0gTlVMTCkgewotICAgICAgICBnX2Fzc2VydChub2RlKTsKLSAgICAgICAgV2ViS2l0
RE9NRWxlbWVudCogZWxlbWVudCA9IChXZWJLaXRET01FbGVtZW50Kilub2RlOwotICAgICAgICBn
X2Fzc2VydF9jbXBzdHIod2Via2l0X2RvbV9lbGVtZW50X2dldF90YWdfbmFtZShlbGVtZW50KSwg
PT0sICJESVYiKTsKLSAgICAgICAgaSsrOwotICAgIH0KLSAgICBnX2Fzc2VydF9jbXBpbnQoaSwg
PT0sIDIpOwotCi0gICAgZ19vYmplY3RfdW5yZWYobGlzdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdl
YWtfbm90aWZ5KGdwb2ludGVyIGRhdGEsIEdPYmplY3QqIHpvbWJpZSkKLXsKLSAgICBndWludCog
Y291bnQgPSAoZ3VpbnQqKWRhdGE7Ci0gICAgKCpjb3VudCkrKzsKLX0KLQotc3RhdGljIHZvaWQg
dGVzdF9kb21fZG9jdW1lbnRfZ2FyYmFnZV9jb2xsZWN0aW9uKERvbURvY3VtZW50Rml4dHVyZSog
Zml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGd1aW50IGNvdW50ID0gMDsKLSAg
ICBnX2Fzc2VydChmaXh0dXJlKTsKLSAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gKFdlYktpdFdl
YlZpZXcqKWZpeHR1cmUtPndlYlZpZXc7Ci0gICAgZ19hc3NlcnQodmlldyk7Ci0gICAgV2ViS2l0
RE9NRG9jdW1lbnQqIGRvY3VtZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQo
dmlldyk7Ci0gICAgZ19hc3NlcnQoZG9jdW1lbnQpOwotICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdf
T0JKRUNUKGRvY3VtZW50KSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOwotICAg
IFdlYktpdERPTUhUTUxIZWFkRWxlbWVudCogaGVhZCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0
X2hlYWQoZG9jdW1lbnQpOwotICAgIGdfYXNzZXJ0KGhlYWQpOwotICAgIGdfb2JqZWN0X3dlYWtf
cmVmKEdfT0JKRUNUKGhlYWQpLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7Ci0g
ICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQqIGJvZHkgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9i
b2R5KGRvY3VtZW50KTsKLSAgICBnX2Fzc2VydChib2R5KTsKLSAgICBnX29iamVjdF93ZWFrX3Jl
ZihHX09CSkVDVChib2R5KSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOwotICAg
IFdlYktpdERPTUhUTUxDb2xsZWN0aW9uICpjb2xsZWN0aW9uID0gd2Via2l0X2RvbV9kb2N1bWVu
dF9nZXRfbGlua3MoZG9jdW1lbnQpOwotICAgIGdfYXNzZXJ0KGNvbGxlY3Rpb24pOwotICAgIGdf
b2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGNvbGxlY3Rpb24pLCAoR1dlYWtOb3RpZnkpd2Vha19u
b3RpZnksICZjb3VudCk7Ci0KLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoV0VCS0lU
X1dFQl9WSUVXKHZpZXcpLCBIVE1MX0RPQ1VNRU5UX0xJTktTLCBOVUxMLCBOVUxMLCBOVUxMKTsK
LQotICAgIHdoaWxlIChnX21haW5fY29udGV4dF9wZW5kaW5nKE5VTEwpKQotICAgICAgICBnX21h
aW5fY29udGV4dF9pdGVyYXRpb24oTlVMTCwgRkFMU0UpOwotCi0gICAgZ19hc3NlcnRfY21wdWlu
dChjb3VudCwgPT0sIDMpOwotCi0gICAgZ19vYmplY3RfdW5yZWYoY29sbGVjdGlvbik7Ci0gICAg
Z19hc3NlcnRfY21wdWludChjb3VudCwgPT0sIDQpOwotCi0gICAgY291bnQgPSAwOwotCi0gICAg
ZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKLSAgICBn
X2Fzc2VydChkb2N1bWVudCk7Ci0gICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1QoZG9jdW1l
bnQpLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7Ci0gICAgaGVhZCA9IHdlYmtp
dF9kb21fZG9jdW1lbnRfZ2V0X2hlYWQoZG9jdW1lbnQpOwotICAgIGdfYXNzZXJ0KGhlYWQpOwot
ICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGhlYWQpLCAoR1dlYWtOb3RpZnkpd2Vha19u
b3RpZnksICZjb3VudCk7Ci0gICAgYm9keSA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2JvZHko
ZG9jdW1lbnQpOwotICAgIGdfYXNzZXJ0KGJvZHkpOwotICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdf
T0JKRUNUKGJvZHkpLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7Ci0gICAgY29s
bGVjdGlvbiA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2xpbmtzKGRvY3VtZW50KTsKLSAgICBn
X2Fzc2VydChjb2xsZWN0aW9uKTsKLSAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVDVChjb2xs
ZWN0aW9uKSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOwotICAgIC8qIEFzayB0
d2ljZSBmb3IgdGhlIHNhbWUgb2JqZWN0ICovCi0gICAgV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24q
IGNvbGxlY3Rpb24yID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfbGlua3MoZG9jdW1lbnQpOwot
ICAgIGdfYXNzZXJ0KGNvbGxlY3Rpb24yKTsKLSAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVD
VChjb2xsZWN0aW9uMiksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKLQotICAg
IGdfb2JqZWN0X3VucmVmKGRvY3VtZW50KTsKLSAgICBnX29iamVjdF91bnJlZihoZWFkKTsKLSAg
ICBnX29iamVjdF91bnJlZihib2R5KTsKLSAgICBnX29iamVjdF91bnJlZihjb2xsZWN0aW9uKTsK
LSAgICBnX29iamVjdF91bnJlZihjb2xsZWN0aW9uMik7Ci0KLSAgICBnX2Fzc2VydF9jbXB1aW50
KGNvdW50LCA9PSwgNSk7Ci0KLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoV0VCS0lU
X1dFQl9WSUVXKHZpZXcpLCBIVE1MX0RPQ1VNRU5UX0lGUkFNRSwgTlVMTCwgTlVMTCwgTlVMTCk7
Ci0KLSAgICB3aGlsZSAoZ19tYWluX2NvbnRleHRfcGVuZGluZyhOVUxMKSkKLSAgICAgICAgZ19t
YWluX2NvbnRleHRfaXRlcmF0aW9uKE5VTEwsIEZBTFNFKTsKLQotICAgIGNvdW50ID0gMDsKLQot
ICAgIGRvY3VtZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQodmlldyk7Ci0g
ICAgV2ViS2l0RE9NRWxlbWVudCogZGl2ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVu
dF9ieV9pZChkb2N1bWVudCwgInRlc3QiKTsKLSAgICBnX2Fzc2VydChkaXYpOwotICAgIGdfb2Jq
ZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGRpdiksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNv
dW50KTsKLSAgICBXZWJLaXRET01FbGVtZW50KiBpZnJhbWUgPSB3ZWJraXRfZG9tX2RvY3VtZW50
X2dldF9lbGVtZW50X2J5X2lkKGRvY3VtZW50LCAiaWZyYW1lIik7Ci0gICAgZ19hc3NlcnQoaWZy
YW1lKTsKLQotICAgIHdlYmtpdF9kb21fZWxlbWVudF9zZXRfYXR0cmlidXRlKGlmcmFtZSwgInNy
YyIsICJkYXRhOjxodG1sPjxoZWFkPjwvaGVhZD48L2h0bWw+IiwgTlVMTCk7Ci0KLSAgICB3aGls
ZSAoZ19tYWluX2NvbnRleHRfcGVuZGluZyhOVUxMKSkKLSAgICAgICAgZ19tYWluX2NvbnRleHRf
aXRlcmF0aW9uKE5VTEwsIEZBTFNFKTsKLQotICAgIFdlYktpdERPTURvY3VtZW50KiBpZnJhbWVE
b2N1bWVudCA9IHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfY29udGVudF9kb2N1
bWVudChXRUJLSVRfRE9NX0hUTUxfSUZSQU1FX0VMRU1FTlQoaWZyYW1lKSk7Ci0gICAgZ19hc3Nl
cnQoaWZyYW1lRG9jdW1lbnQpOwotICAgIGhlYWQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9o
ZWFkKGlmcmFtZURvY3VtZW50KTsKLSAgICBnX2Fzc2VydChoZWFkKTsKLSAgICBnX29iamVjdF93
ZWFrX3JlZihHX09CSkVDVChoZWFkKSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQp
OwotCi0gICAgd2Via2l0X2RvbV9lbGVtZW50X3NldF9hdHRyaWJ1dGUoaWZyYW1lLCAic3JjIiwg
ImFib3V0OmJsYW5rIiwgTlVMTCk7Ci0KLSAgICB3aGlsZSAoZ19tYWluX2NvbnRleHRfcGVuZGlu
ZyhOVUxMKSkKLSAgICAgICAgZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uKE5VTEwsIEZBTFNFKTsK
LQotICAgIGdfYXNzZXJ0X2NtcHVpbnQoY291bnQsID09LCAxKTsKLQotICAgIHdlYmtpdF93ZWJf
dmlld19sb2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcodmlldyksIEhUTUxfRE9DVU1FTlRfTElO
S1MsIE5VTEwsIE5VTEwsIE5VTEwpOwotCi0gICAgd2hpbGUgKGdfbWFpbl9jb250ZXh0X3BlbmRp
bmcoTlVMTCkpCi0gICAgICAgIGdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbihOVUxMLCBGQUxTRSk7
Ci0KLSAgICBnX2Fzc2VydF9jbXB1aW50KGNvdW50LCA9PSwgMik7Ci0KLSAgICBjb3VudCA9IDA7
Ci0KLSAgICBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50KHZpZXcp
OwotICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsKLSAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVD
VChkb2N1bWVudCksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKLSAgICAvKiBB
c2sgdHdpY2UgZm9yIHRoZSBEb2N1bWVudCAqLwotICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1
bWVudDIgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKLSAgICBnX2Fz
c2VydChkb2N1bWVudDIpOwotICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGRvY3VtZW50
MiksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKLSAgICBoZWFkID0gd2Via2l0
X2RvbV9kb2N1bWVudF9nZXRfaGVhZChkb2N1bWVudCk7Ci0gICAgZ19hc3NlcnQoaGVhZCk7Ci0g
ICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1QoaGVhZCksIChHV2Vha05vdGlmeSl3ZWFrX25v
dGlmeSwgJmNvdW50KTsKLSAgICBib2R5ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfYm9keShk
b2N1bWVudCk7Ci0gICAgZ19hc3NlcnQoYm9keSk7Ci0gICAgZ19vYmplY3Rfd2Vha19yZWYoR19P
QkpFQ1QoYm9keSksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKLSAgICBjb2xs
ZWN0aW9uID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfbGlua3MoZG9jdW1lbnQpOwotICAgIGdf
YXNzZXJ0KGNvbGxlY3Rpb24pOwotICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGNvbGxl
Y3Rpb24pLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7Ci0KLSAgICBndGtfd2lk
Z2V0X2Rlc3Ryb3koZml4dHVyZS0+d2ViVmlldyk7Ci0gICAgZml4dHVyZS0+d2ViVmlldyA9IE5V
TEw7Ci0KLSAgICBnX2Fzc2VydF9jbXB1aW50KGNvdW50LCA9PSwgNCk7Ci0KLSAgICBnX29iamVj
dF91bnJlZihjb2xsZWN0aW9uKTsKLQotICAgIGdfYXNzZXJ0X2NtcHVpbnQoY291bnQsID09LCA1
KTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotewotICAgIGd0a190ZXN0
X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLQotICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2RvbWRvY3Vt
ZW50L3Rlc3RfdGl0bGUiLAotICAgICAgICAgICAgICAgRG9tRG9jdW1lbnRGaXh0dXJlLCBIVE1M
X0RPQ1VNRU5UX1RJVExFLAotICAgICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfc2V0
dXAsCi0gICAgICAgICAgICAgICB0ZXN0X2RvbV9kb2N1bWVudF90aXRsZSwKLSAgICAgICAgICAg
ICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKTsKLQotICAgIGdfdGVzdF9hZGQoIi93
ZWJraXQvZG9tZG9jdW1lbnQvdGVzdF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWUiLAotICAgICAg
ICAgICAgICAgRG9tRG9jdW1lbnRGaXh0dXJlLCBIVE1MX0RPQ1VNRU5UX0VMRU1FTlRTLAotICAg
ICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0
ZXN0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWUsCi0gICAgICAgICAgICAg
ICBkb21fZG9jdW1lbnRfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Vi
a2l0L2RvbWRvY3VtZW50L3Rlc3RfZ2V0X2VsZW1lbnRzX2J5X2NsYXNzX25hbWUiLAotICAgICAg
ICAgICAgICAgRG9tRG9jdW1lbnRGaXh0dXJlLCBIVE1MX0RPQ1VNRU5UX0VMRU1FTlRTX0NMQVNT
LAotICAgICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAg
ICAgICB0ZXN0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfY2xhc3NfbmFtZSwKLSAgICAg
ICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKTsKLQotICAgIGdfdGVzdF9h
ZGQoIi93ZWJraXQvZG9tZG9jdW1lbnQvdGVzdF9nZXRfZWxlbWVudF9ieV9pZCIsCi0gICAgICAg
ICAgICAgICBEb21Eb2N1bWVudEZpeHR1cmUsIEhUTUxfRE9DVU1FTlRfRUxFTUVOVFNfSUQsCi0g
ICAgICAgICAgICAgICBkb21fZG9jdW1lbnRfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAg
IHRlc3RfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50X2J5X2lkLAotICAgICAgICAgICAgICAgZG9t
X2RvY3VtZW50X2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9k
b21kb2N1bWVudC90ZXN0X2dldF9saW5rcyIsCi0gICAgICAgICAgICAgICBEb21Eb2N1bWVudEZp
eHR1cmUsIEhUTUxfRE9DVU1FTlRfTElOS1MsCi0gICAgICAgICAgICAgICBkb21fZG9jdW1lbnRf
Zml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3RfZG9tX2RvY3VtZW50X2dldF9saW5r
cywKLSAgICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKTsKLQotICAg
IGdfdGVzdF9hZGQoIi93ZWJraXQvZG9tZG9jdW1lbnQvdGVzdF90YWJsZV9pbnNlcnRfcm93IiwK
LSAgICAgICAgICAgICAgIERvbURvY3VtZW50Rml4dHVyZSwgSFRNTF9ET0NVTUVOVF9UQUJMRSwK
LSAgICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3NldHVwLAotICAgICAgICAgICAg
ICAgdGVzdF9kb21fZG9jdW1lbnRfaW5zZXJ0X3JvdywKLSAgICAgICAgICAgICAgIGRvbV9kb2N1
bWVudF9maXh0dXJlX3RlYXJkb3duKTsKLQotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvZG9tZG9j
dW1lbnQvdGVzdF9kb2N1bWVudF9ldmFsdWF0ZSIsCi0gICAgICAgICAgICAgICBEb21Eb2N1bWVu
dEZpeHR1cmUsIEhUTUxfRE9DVU1FTlRfRVZBTFVBVEUsCi0gICAgICAgICAgICAgICBkb21fZG9j
dW1lbnRfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3RfZG9tX2RvY3VtZW50X2V2
YWx1YXRlLAotICAgICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfdGVhcmRvd24pOwot
Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9kb21kb2N1bWVudC90ZXN0X2dhcmJhZ2VfY29sbGVj
dGlvbiIsCi0gICAgICAgICAgICAgICBEb21Eb2N1bWVudEZpeHR1cmUsIEhUTUxfRE9DVU1FTlRf
TElOS1MsCi0gICAgICAgICAgICAgICBkb21fZG9jdW1lbnRfZml4dHVyZV9zZXR1cCwKLSAgICAg
ICAgICAgICAgIHRlc3RfZG9tX2RvY3VtZW50X2dhcmJhZ2VfY29sbGVjdGlvbiwKLSAgICAgICAg
ICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKTsKLQotICAgIHJldHVybiBnX3Rl
c3RfcnVuKCk7Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rk
b21kb213aW5kb3cuYyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rkb21kb213aW5kb3cu
YwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRmY2QxOC4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0ZG9tZG9td2luZG93LmMKKysrIC9kZXYvbnVsbApA
QCAtMSwyNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAidGVzdF91dGlscy5oIgotCi0jaW5jbHVkZSA8
Z2xpYi5oPgotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgot
I2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KLQotI2RlZmluZSBIVE1MX0RPQ1VNRU5UICI8aHRt
bD48aGVhZD48dGl0bGU+PC90aXRsZT48L2hlYWQ+PHN0eWxlIHR5cGU9J3RleHQvY3NzJz4jdGVz
dCB7IGZvbnQtc2l6ZTogMTZweDsgfTwvc3R5bGU+PGJvZHk+PHAgaWQ9J3Rlc3QnPnRlc3Q8L3A+
PC9ib2R5PjwvaHRtbD4iCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBHdGtXaWRnZXQqIHdlYlZp
ZXc7Ci0gICAgR3RrV2lkZ2V0KiB3aW5kb3c7Ci0gICAgV2ViS2l0RE9NRE9NV2luZG93KiBkb21X
aW5kb3c7Ci0gICAgR01haW5Mb29wKiBsb29wOwotCi0gICAgZ2Jvb2xlYW4gbG9hZGVkOwotICAg
IGdib29sZWFuIGNsaWNrZWQ7Ci0gICAgZ2NvbnN0cG9pbnRlciBkYXRhOwotfSBEb21Eb212aWV3
Rml4dHVyZTsKLQotc3RhdGljIGdib29sZWFuIGZpbmlzaF9sb2FkaW5nKERvbURvbXZpZXdGaXh0
dXJlKiBmaXh0dXJlKQotewotICAgIGlmIChnX21haW5fbG9vcF9pc19ydW5uaW5nKGZpeHR1cmUt
Pmxvb3ApKQotICAgICAgICBnX21haW5fbG9vcF9xdWl0KGZpeHR1cmUtPmxvb3ApOwotCi0gICAg
cmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCBkb21fZG9tdmlld19maXh0dXJlX3NldHVw
KERvbURvbXZpZXdGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAg
Zml4dHVyZS0+bG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLSAgICBmaXh0dXJl
LT53aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKLSAgICBmaXh0
dXJlLT53ZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygpOwotICAgIGZpeHR1cmUtPmRhdGEg
PSBkYXRhOwotCi0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihmaXh0dXJlLT53
aW5kb3cpLCBHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpKTsKLX0KLQotc3RhdGljIHZvaWQg
ZG9tX2RvbXZpZXdfZml4dHVyZV90ZWFyZG93bihEb21Eb212aWV3Rml4dHVyZSogZml4dHVyZSwg
Z2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGd0a193aWRnZXRfZGVzdHJveShmaXh0dXJlLT53
aW5kb3cpOwotICAgIGdfbWFpbl9sb29wX3VucmVmKGZpeHR1cmUtPmxvb3ApOwotfQotCi1zdGF0
aWMgdm9pZCBkb21fZG9tX3dpbmRvd19maXh0dXJlX3NldHVwKERvbURvbXZpZXdGaXh0dXJlKiBm
aXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZml4dHVyZS0+bG9vcCA9IGdfbWFp
bl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLSAgICBmaXh0dXJlLT53ZWJWaWV3ID0gd2Via2l0X3dl
Yl92aWV3X25ldygpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKGZpeHR1cmUtPndlYlZpZXcpOwot
Ci0gICAgaWYgKGRhdGEgIT0gTlVMTCkKLSAgICAgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3Ry
aW5nKFdFQktJVF9XRUJfVklFVyAoZml4dHVyZS0+d2ViVmlldyksIChjb25zdCBjaGFyKikgZGF0
YSwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0KLSAgICBnX2lkbGVfYWRkKChHU291cmNlRnVuYylmaW5p
c2hfbG9hZGluZywgZml4dHVyZSk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1cmUtPmxvb3Ap
OwotfQotCi1zdGF0aWMgdm9pZCBkb21fZG9tX3dpbmRvd19maXh0dXJlX3RlYXJkb3duKERvbURv
bXZpZXdGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgaWYgKGZp
eHR1cmUtPndlYlZpZXcpCi0gICAgICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPndlYlZpZXcp
OwotICAgIGdfbWFpbl9sb29wX3VucmVmKGZpeHR1cmUtPmxvb3ApOwotfQotCi1zdGF0aWMgZ2Jv
b2xlYW4gbG9hZGVkQ2FsbGJhY2soV2ViS2l0RE9NRE9NV2luZG93KiB2aWV3LCBXZWJLaXRET01F
dmVudCogZXZlbnQsIERvbURvbXZpZXdGaXh0dXJlKiBmaXh0dXJlKQotewotICAgIGdfYXNzZXJ0
KGZpeHR1cmUtPmxvYWRlZCA9PSBGQUxTRSk7Ci0gICAgZml4dHVyZS0+bG9hZGVkID0gVFJVRTsK
LQotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGdib29sZWFuIGNsaWNrZWRDYWxsYmFj
ayhXZWJLaXRET01ET01XaW5kb3cqIHZpZXcsIFdlYktpdERPTUV2ZW50KiBldmVudCwgRG9tRG9t
dmlld0ZpeHR1cmUqIGZpeHR1cmUpCi17Ci0gICAgV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdl
dDsKLSAgICBndXNob3J0IHBoYXNlOwotCi0gICAgZ19hc3NlcnQoZXZlbnQpOwotICAgIGdfYXNz
ZXJ0KFdFQktJVF9ET01fSVNfRVZFTlQoZXZlbnQpKTsKLQotICAgIC8vIFdlIHNob3VsZCBjYXRj
aCB0aGlzIGluIHRoZSBidWJibGluZyB1cCBwaGFzZSwgc2luY2Ugd2UgYXJlIGNvbm5lY3Rpbmcg
dG8gdGhlIHRvcGxldmVsIG9iamVjdAotICAgIHBoYXNlID0gd2Via2l0X2RvbV9ldmVudF9nZXRf
ZXZlbnRfcGhhc2UoZXZlbnQpOwotICAgIGdfYXNzZXJ0X2NtcGludChwaGFzZSwgPT0sIDMpOwot
Ci0gICAgdGFyZ2V0ID0gd2Via2l0X2RvbV9ldmVudF9nZXRfY3VycmVudF90YXJnZXQoZXZlbnQp
OwotICAgIGdfYXNzZXJ0KHRhcmdldCA9PSBXRUJLSVRfRE9NX0VWRU5UX1RBUkdFVCh2aWV3KSk7
Ci0KLSAgICBnX2Fzc2VydChmaXh0dXJlLT5jbGlja2VkID09IEZBTFNFKTsKLSAgICBmaXh0dXJl
LT5jbGlja2VkID0gVFJVRTsKLQotICAgIGZpbmlzaF9sb2FkaW5nKGZpeHR1cmUpOwotCi0gICAg
cmV0dXJuIEZBTFNFOwotfQotCi1nYm9vbGVhbiBtYXBfZXZlbnRfY2IoR3RrV2lkZ2V0ICp3aWRn
ZXQsIEdka0V2ZW50KiBldmVudCwgRG9tRG9tdmlld0ZpeHR1cmUqIGZpeHR1cmUpCi17Ci0gICAg
d2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklFVyAoZml4dHVyZS0+d2Vi
VmlldyksIChjb25zdCBjaGFyKilmaXh0dXJlLT5kYXRhLCBOVUxMLCBOVUxMLCBOVUxMKTsKLQot
ICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQgbG9hZF9ldmVudF9jYWxsYmFjayhX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHUGFyYW1TcGVjKiBzcGVjLCBEb21Eb212aWV3Rml4dHVy
ZSogZml4dHVyZSkKLXsKLSAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJf
dmlld19nZXRfbG9hZF9zdGF0dXMod2ViVmlldyk7Ci0gICAgaWYgKHN0YXR1cyA9PSBXRUJLSVRf
TE9BRF9GSU5JU0hFRCkgewotICAgICAgICB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9hZGRfZXZl
bnRfbGlzdGVuZXIoV0VCS0lUX0RPTV9FVkVOVF9UQVJHRVQoZml4dHVyZS0+ZG9tV2luZG93KSwg
ImNsaWNrIiwgR19DQUxMQkFDSyhjbGlja2VkQ2FsbGJhY2spLCBmYWxzZSwgZml4dHVyZSk7Ci0K
LSAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+Y2xpY2tlZCA9PSBGQUxTRSk7Ci0gICAgICAgIGd0
a190ZXN0X3dpZGdldF9jbGljayhHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpLCAxLCAwKTsK
LSAgICB9Ci0KLX0KLQotc3RhdGljIHZvaWQgdGVzdF9kb21fZG9tdmlld19zaWduYWxzKERvbURv
bXZpZXdGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19hc3Nl
cnQoZml4dHVyZSk7Ci0gICAgV2ViS2l0V2ViVmlldyogdmlldyA9IChXZWJLaXRXZWJWaWV3Kilm
aXh0dXJlLT53ZWJWaWV3OwotICAgIGdfYXNzZXJ0KHZpZXcpOwotICAgIFdlYktpdERPTURvY3Vt
ZW50KiBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50KHZpZXcpOwot
ICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsKLSAgICBXZWJLaXRET01ET01XaW5kb3cqIGRvbVdpbmRv
dyA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2RlZmF1bHRfdmlldyhkb2N1bWVudCk7Ci0gICAg
Z19hc3NlcnQoZG9tV2luZG93KTsKLQotICAgIGZpeHR1cmUtPmRvbVdpbmRvdyA9IGRvbVdpbmRv
dzsKLQotICAgIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2FkZF9ldmVudF9saXN0ZW5lcihXRUJL
SVRfRE9NX0VWRU5UX1RBUkdFVChmaXh0dXJlLT5kb21XaW5kb3cpLCAibG9hZCIsIEdfQ0FMTEJB
Q0sobG9hZGVkQ2FsbGJhY2spLCBmYWxzZSwgZml4dHVyZSk7Ci0gICAgZ19zaWduYWxfY29ubmVj
dChmaXh0dXJlLT53aW5kb3csICJtYXAtZXZlbnQiLCBHX0NBTExCQUNLKG1hcF9ldmVudF9jYiks
IGZpeHR1cmUpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2ViVmlldywgIm5vdGlm
eTo6bG9hZC1zdGF0dXMiLCBHX0NBTExCQUNLKGxvYWRfZXZlbnRfY2FsbGJhY2spLCBmaXh0dXJl
KTsKLQotICAgIGd0a193aWRnZXRfc2hvd19hbGwoZml4dHVyZS0+d2luZG93KTsKLSAgICBndGtf
d2luZG93X3ByZXNlbnQoR1RLX1dJTkRPVyhmaXh0dXJlLT53aW5kb3cpKTsKLQotICAgIGdfbWFp
bl9sb29wX3J1bihmaXh0dXJlLT5sb29wKTsKLQotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmxvYWRl
ZCk7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+Y2xpY2tlZCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVh
bgotY2xpY2tlZF9jYihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVu
dCogZXZlbnQsIERvbURvbXZpZXdGaXh0dXJlKiBmaXh0dXJlKQotewotICAgIGdfYXNzZXJ0KGZp
eHR1cmUtPmNsaWNrZWQgPT0gRkFMU0UpOwotICAgIGZpeHR1cmUtPmNsaWNrZWQgPSBUUlVFOwot
ICAgIGZpbmlzaF9sb2FkaW5nKGZpeHR1cmUpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3Rh
dGljIHZvaWQgbG9hZF9zdGF0dXNfY2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgR1Bh
cmFtU3BlYyogc3BlYywgRG9tRG9tdmlld0ZpeHR1cmUqIGZpeHR1cmUpCi17Ci0gICAgV2ViS2l0
TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYlZp
ZXcpOwotICAgIGlmIChzdGF0dXMgPT0gV0VCS0lUX0xPQURfRklOSVNIRUQpIHsKLSAgICAgICAg
V2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50OwotICAgICAgICBXZWJLaXRET01ET01XaW5kb3cq
IGRvbVdpbmRvdzsKLSAgICAgICAgV2ViS2l0RE9NRWxlbWVudCogZWxlbWVudDsKLSAgICAgICAg
V2ViS2l0RE9NRXZlbnQqIGV2ZW50OwotICAgICAgICBnbG9uZyBjbGllbnRYLCBjbGllbnRZOwot
Ci0gICAgICAgIGRvY3VtZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQoV0VC
S0lUX1dFQl9WSUVXKGZpeHR1cmUtPndlYlZpZXcpKTsKLSAgICAgICAgZ19hc3NlcnQoZG9jdW1l
bnQpOwotICAgICAgICBkb21XaW5kb3cgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9kZWZhdWx0
X3ZpZXcoZG9jdW1lbnQpOwotICAgICAgICBnX2Fzc2VydChkb21XaW5kb3cpOwotICAgICAgICBm
aXh0dXJlLT5kb21XaW5kb3cgPSBkb21XaW5kb3c7Ci0KLSAgICAgICAgZWxlbWVudCA9IHdlYmtp
dF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRfYnlfaWQoZG9jdW1lbnQsICJ0ZXN0Iik7Ci0gICAg
ICAgIGdfYXNzZXJ0KGVsZW1lbnQpOwotICAgICAgICBldmVudCA9IHdlYmtpdF9kb21fZG9jdW1l
bnRfY3JlYXRlX2V2ZW50KGRvY3VtZW50LCAiTW91c2VFdmVudCIsIE5VTEwpOwotICAgICAgICBn
X2Fzc2VydChldmVudCk7Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfRVZFTlQoZXZl
bnQpKTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19NT1VTRV9FVkVOVChldmVudCkp
OwotICAgICAgICBjbGllbnRYID0gd2Via2l0X2RvbV9lbGVtZW50X2dldF9jbGllbnRfbGVmdChl
bGVtZW50KTsKLSAgICAgICAgY2xpZW50WSA9IHdlYmtpdF9kb21fZWxlbWVudF9nZXRfY2xpZW50
X3RvcChlbGVtZW50KTsKLSAgICAgICAgd2Via2l0X2RvbV9tb3VzZV9ldmVudF9pbml0X21vdXNl
X2V2ZW50KFdFQktJVF9ET01fTU9VU0VfRVZFTlQoZXZlbnQpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNsaWNrIiwgVFJVRSwgVFJVRSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeHR1cmUtPmRvbVdp
bmRvdywgMCwgMCwgMCwgY2xpZW50WCwgY2xpZW50WSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLCBGQUxTRSwgRkFMU0UsIEZBTFNFLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgV0VCS0lUX0RP
TV9FVkVOVF9UQVJHRVQoZWxlbWVudCkpOwotICAgICAgICB3ZWJraXRfZG9tX2V2ZW50X3Rhcmdl
dF9hZGRfZXZlbnRfbGlzdGVuZXIoV0VCS0lUX0RPTV9FVkVOVF9UQVJHRVQoZWxlbWVudCksICJj
bGljayIsIEdfQ0FMTEJBQ0soY2xpY2tlZF9jYiksIGZhbHNlLCBmaXh0dXJlKTsKLSAgICAgICAg
Z19hc3NlcnQoZml4dHVyZS0+Y2xpY2tlZCA9PSBGQUxTRSk7Ci0gICAgICAgIHdlYmtpdF9kb21f
ZXZlbnRfdGFyZ2V0X2Rpc3BhdGNoX2V2ZW50KFdFQktJVF9ET01fRVZFTlRfVEFSR0VUKGVsZW1l
bnQpLCBldmVudCwgTlVMTCk7Ci0gICAgfQotCi19Ci0KLXN0YXRpYyB2b2lkIHRlc3RfZG9tX2Rv
bXZpZXdfZGlzcGF0Y2hfZXZlbnQoRG9tRG9tdmlld0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBv
aW50ZXIgZGF0YSkKLXsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndpbmRvdywgIm1h
cC1ldmVudCIsIEdfQ0FMTEJBQ0sobWFwX2V2ZW50X2NiKSwgZml4dHVyZSk7Ci0gICAgZ19zaWdu
YWxfY29ubmVjdChmaXh0dXJlLT53ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FM
TEJBQ0sobG9hZF9zdGF0dXNfY2FsbGJhY2spLCBmaXh0dXJlKTsKLQotICAgIGd0a193aWRnZXRf
c2hvd19hbGwoZml4dHVyZS0+d2luZG93KTsKLSAgICBndGtfd2luZG93X3ByZXNlbnQoR1RLX1dJ
TkRPVyhmaXh0dXJlLT53aW5kb3cpKTsKLQotICAgIGdfbWFpbl9sb29wX3J1biAoZml4dHVyZS0+
bG9vcCk7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+Y2xpY2tlZCk7Ci19Ci0KLXN0YXRpYyB2b2lk
IHRlc3RfZG9tX2RvbV93aW5kb3dfZ2V0X2NvbXB1dGVkX3N0eWxlKERvbURvbXZpZXdGaXh0dXJl
KiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgV2ViS2l0RE9NRG9jdW1lbnQq
IGRvY3VtZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQoV0VCS0lUX1dFQl9W
SUVXKGZpeHR1cmUtPndlYlZpZXcpKTsKLSAgICBnX2Fzc2VydChkb2N1bWVudCk7Ci0gICAgV2Vi
S2l0RE9NRE9NV2luZG93KiBkb21XaW5kb3cgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9kZWZh
dWx0X3ZpZXcoZG9jdW1lbnQpOwotICAgIGdfYXNzZXJ0KGRvbVdpbmRvdyk7Ci0KLSAgICBXZWJL
aXRET01FbGVtZW50KiAgZWxlbWVudCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRf
YnlfaWQoZG9jdW1lbnQsICJ0ZXN0Iik7Ci0gICAgZ19hc3NlcnQoZWxlbWVudCk7Ci0gICAgZ19h
c3NlcnQoV0VCS0lUX0RPTV9JU19FTEVNRU5UKGVsZW1lbnQpKTsKLSAgICBXZWJLaXRET01DU1NT
dHlsZURlY2xhcmF0aW9uKiBjc3NTdHlsZSA9IHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfY29t
cHV0ZWRfc3R5bGUoZG9tV2luZG93LCBlbGVtZW50LCBOVUxMKTsKLSAgICBnY2hhciogZm9udFNp
emUgPSB3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlvbl9nZXRfcHJvcGVydHlfdmFsdWUo
Y3NzU3R5bGUsICJmb250LXNpemUiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoZm9udFNpemUsID09
LCAiMTZweCIpOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCi17Ci0gICAg
Z3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOwotCi0gICAgZ190ZXN0X2J1Z19iYXNl
KCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKLQotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQv
ZG9tZG9tdmlldy9zaWduYWxzIiwKLSAgICAgICAgICAgICAgIERvbURvbXZpZXdGaXh0dXJlLCBI
VE1MX0RPQ1VNRU5ULAotICAgICAgICAgICAgICAgZG9tX2RvbXZpZXdfZml4dHVyZV9zZXR1cCwK
LSAgICAgICAgICAgICAgIHRlc3RfZG9tX2RvbXZpZXdfc2lnbmFscywKLSAgICAgICAgICAgICAg
IGRvbV9kb212aWV3X2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtp
dC9kb21kb212aWV3L2Rpc3BhdGNoX2V2ZW50IiwKLSAgICAgICAgICAgICAgIERvbURvbXZpZXdG
aXh0dXJlLCBIVE1MX0RPQ1VNRU5ULAotICAgICAgICAgICAgICAgZG9tX2RvbXZpZXdfZml4dHVy
ZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3RfZG9tX2RvbXZpZXdfZGlzcGF0Y2hfZXZlbnQs
Ci0gICAgICAgICAgICAgICBkb21fZG9tdmlld19maXh0dXJlX3RlYXJkb3duKTsKLQotICAgIGdf
dGVzdF9hZGQoIi93ZWJraXQvZG9tZG9td2luZG93L2dldF9jb21wdXRlZF9zdHlsZSIsCi0gICAg
ICAgICAgICAgICBEb21Eb212aWV3Rml4dHVyZSwgSFRNTF9ET0NVTUVOVCwKLSAgICAgICAgICAg
ICAgIGRvbV9kb21fd2luZG93X2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X2Rv
bV9kb21fd2luZG93X2dldF9jb21wdXRlZF9zdHlsZSwKLSAgICAgICAgICAgICAgIGRvbV9kb21f
d2luZG93X2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsKLX0K
LQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvbW5vZGUuYyBiL1Nv
dXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rkb21ub2RlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGVkNGJjYmQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMv
dGVzdGRvbW5vZGUuYworKysgL2Rldi9udWxsCkBAIC0xLDIxOSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJ0ZXN0X3V0aWxzLmgiCi0KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z2xpYi9nc3Rk
aW8uaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgot
Ci0jZGVmaW5lIEhUTUxfRE9DVU1FTlRfSElFUkFSQ0hZX05BVklHQVRJT04gIjxodG1sPjxoZWFk
Pjx0aXRsZT5UaGlzIGlzIHRoZSB0aXRsZTwvdGl0bGU+PC9oZWFkPjxib2R5PjxwPjE8L3A+PHA+
MjwvcD48cD4zPC9wPjwvYm9keT48L2h0bWw+IgotI2RlZmluZSBIVE1MX0RPQ1VNRU5UX05PREVf
SU5TRVJUSU9OICI8aHRtbD48Ym9keT48L2JvZHk+PC9odG1sPiIKLQotdHlwZWRlZiBzdHJ1Y3Qg
ewotICAgIEd0a1dpZGdldCogd2ViVmlldzsKLSAgICBHTWFpbkxvb3AqIGxvb3A7Ci19IERvbU5v
ZGVGaXh0dXJlOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZmluaXNoX2xvYWRpbmcoRG9tTm9kZUZpeHR1
cmUqIGZpeHR1cmUpCi17Ci0gICAgaWYgKGdfbWFpbl9sb29wX2lzX3J1bm5pbmcoZml4dHVyZS0+
bG9vcCkpCi0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQoZml4dHVyZS0+bG9vcCk7Ci0KLSAgICBy
ZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lkIGRvbV9ub2RlX2ZpeHR1cmVfc2V0dXAoRG9t
Tm9kZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBmaXh0dXJl
LT5sb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotICAgIGZpeHR1cmUtPndlYlZp
ZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7Ci0gICAgZ19vYmplY3RfcmVmX3NpbmsoZml4dHVy
ZS0+d2ViVmlldyk7Ci0KLSAgICBpZiAoZGF0YSAhPSBOVUxMKQotICAgICAgICB3ZWJraXRfd2Vi
X3ZpZXdfbG9hZF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVXKGZpeHR1cmUtPndlYlZpZXcpLCAoY29u
c3QgY2hhciopZGF0YSwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0KLSAgICBnX2lkbGVfYWRkKChHU291
cmNlRnVuYylmaW5pc2hfbG9hZGluZywgZml4dHVyZSk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGZp
eHR1cmUtPmxvb3ApOwotfQotCi1zdGF0aWMgdm9pZCBkb21fbm9kZV9maXh0dXJlX3RlYXJkb3du
KERvbU5vZGVGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19v
YmplY3RfdW5yZWYoZml4dHVyZS0+d2ViVmlldyk7Ci0gICAgZ19tYWluX2xvb3BfdW5yZWYoZml4
dHVyZS0+bG9vcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RfZG9tX25vZGVfaGllcmFyY2h5X25h
dmlnYXRpb24oRG9tTm9kZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsK
LSAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQ7Ci0gICAgV2ViS2l0RE9NSFRNTEhlYWRF
bGVtZW50KiBoZWFkOwotICAgIFdlYktpdERPTUhUTUxCb2R5RWxlbWVudCogYm9keTsKLSAgICBX
ZWJLaXRET01Ob2RlTGlzdCogbGlzdDsKLSAgICBXZWJLaXRET01Ob2RlKiBwdHI7Ci0gICAgZ3Vs
b25nIGksIGxlbmd0aDsKLQotICAgIGRvY3VtZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9kb21f
ZG9jdW1lbnQoV0VCS0lUX1dFQl9WSUVXKGZpeHR1cmUtPndlYlZpZXcpKTsKLSAgICBnX2Fzc2Vy
dChkb2N1bWVudCk7Ci0gICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChkb2N1bWVu
dCkpOwotICAgIGhlYWQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9oZWFkKGRvY3VtZW50KTsK
LSAgICBnX2Fzc2VydChoZWFkKTsKLSAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfSEVB
RF9FTEVNRU5UKGhlYWQpKTsKLQotICAgIC8qIFRpdGxlLCBoZWFkJ3MgY2hpbGQgKi8KLSAgICBn
X2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaGFzX2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERSho
ZWFkKSkpOwotICAgIGxpc3QgPSB3ZWJraXRfZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVzKFdFQktJ
VF9ET01fTk9ERShoZWFkKSk7Ci0gICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9kb21fbm9kZV9s
aXN0X2dldF9sZW5ndGgobGlzdCksID09LCAxKTsKLSAgICBwdHIgPSB3ZWJraXRfZG9tX25vZGVf
bGlzdF9pdGVtKGxpc3QsIDApOwotICAgIGdfYXNzZXJ0KHB0cik7Ci0gICAgZ19hc3NlcnQoV0VC
S0lUX0RPTV9JU19IVE1MX1RJVExFX0VMRU1FTlQocHRyKSk7Ci0gICAgZ19vYmplY3RfdW5yZWYo
bGlzdCk7Ci0KLSAgICAvKiBCb2R5LCBIZWFkIHNpYmxpbmcgKi8KLSAgICBwdHIgPSB3ZWJraXRf
ZG9tX25vZGVfZ2V0X25leHRfc2libGluZyhXRUJLSVRfRE9NX05PREUoaGVhZCkpOwotICAgIGdf
YXNzZXJ0KHB0cik7Ci0gICAgYm9keSA9IFdFQktJVF9ET01fSFRNTF9CT0RZX0VMRU1FTlQocHRy
KTsKLSAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfQk9EWV9FTEVNRU5UKGJvZHkpKTsK
LQotICAgIC8qIFRoZXJlIGlzIG5vIHRoaXJkIHNpYmxpbmcgKi8KLSAgICBwdHIgPSB3ZWJraXRf
ZG9tX25vZGVfZ2V0X25leHRfc2libGluZyhwdHIpOwotICAgIGdfYXNzZXJ0KHB0ciA9PSBOVUxM
KTsKLQotICAgIC8qIEJvZHkncyBwcmV2aW91cyBzaWJsaW5nIGlzIEhlYWQgKi8KLSAgICBwdHIg
PSB3ZWJraXRfZG9tX25vZGVfZ2V0X3ByZXZpb3VzX3NpYmxpbmcoV0VCS0lUX0RPTV9OT0RFKGJv
ZHkpKTsKLSAgICBnX2Fzc2VydChwdHIpOwotICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRN
TF9IRUFEX0VMRU1FTlQocHRyKSk7Ci0KLSAgICAvKiBCb2R5IGhhcyAzIGNoaWxkcmVuICovCi0g
ICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2hhc19jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05P
REUoYm9keSkpKTsKLSAgICBsaXN0ID0gd2Via2l0X2RvbV9ub2RlX2dldF9jaGlsZF9ub2RlcyhX
RUJLSVRfRE9NX05PREUoYm9keSkpOwotICAgIGxlbmd0aCA9IHdlYmtpdF9kb21fbm9kZV9saXN0
X2dldF9sZW5ndGgobGlzdCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGxlbmd0aCwgPT0sIDMpOwot
Ci0gICAgLyogVGhlIHRocmVlIG9mIHRoZW0gYXJlIFAgdGFncyAqLwotICAgIGZvciAoaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBwdHIgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9p
dGVtKGxpc3QsIGkpOwotICAgICAgICBnX2Fzc2VydChwdHIpOwotICAgICAgICBnX2Fzc2VydChX
RUJLSVRfRE9NX0lTX0hUTUxfUEFSQUdSQVBIX0VMRU1FTlQocHRyKSk7Ci0gICAgfQotCi0gICAg
LyogR28gYmFja3dhcmRzICovCi0gICAgZm9yIChpID0gMDsgcHRyOyBwdHIgPSB3ZWJraXRfZG9t
X25vZGVfZ2V0X3ByZXZpb3VzX3NpYmxpbmcocHRyKSwgaSsrKQotICAgICAgICAvKiBOb3RoaW5n
ICovOwotCi0gICAgZ19hc3NlcnRfY21waW50KGksID09LCAzKTsKLSAgICBnX29iamVjdF91bnJl
ZihsaXN0KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF9kb21fbm9kZV9pbnNlcnRpb24oRG9tTm9k
ZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBXZWJLaXRET01E
b2N1bWVudCogZG9jdW1lbnQ7Ci0gICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQqIGJvZHk7Ci0gICAg
V2ViS2l0RE9NRWxlbWVudCogcCwgKmRpdjsKLSAgICBXZWJLaXRET01Ob2RlTGlzdCogbGlzdDsK
LSAgICBXZWJLaXRET01Ob2RlKiBub2RlOwotCi0gICAgZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X2RvbV9kb2N1bWVudChXRUJLSVRfV0VCX1ZJRVcoZml4dHVyZS0+d2ViVmlldykpOwot
ICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsKLSAgICBib2R5ID0gd2Via2l0X2RvbV9kb2N1bWVudF9n
ZXRfYm9keShkb2N1bWVudCk7Ci0gICAgZ19hc3NlcnQoYm9keSk7Ci0gICAgZ19hc3NlcnQoV0VC
S0lUX0RPTV9JU19IVE1MX0VMRU1FTlQoYm9keSkpOwotCi0gICAgLyogQm9keSBzaG91bGRuJ3Qg
aGF2ZSBhbnkgY2hpbGRyZW4gYXQgdGhpcyBwb2ludCAqLwotICAgIGdfYXNzZXJ0KHdlYmtpdF9k
b21fbm9kZV9oYXNfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKSA9PSBGQUxTRSk7
Ci0KLSAgICAvKiBJbnNlcnQgb25lIFAgZWxlbWVudCAqLwotICAgIHAgPSB3ZWJraXRfZG9tX2Rv
Y3VtZW50X2NyZWF0ZV9lbGVtZW50KGRvY3VtZW50LCAiUCIsIE5VTEwpOwotICAgIHdlYmtpdF9k
b21fbm9kZV9hcHBlbmRfY2hpbGQoV0VCS0lUX0RPTV9OT0RFKGJvZHkpLCBXRUJLSVRfRE9NX05P
REUocCksIE5VTEwpOwotCi0gICAgLyogTm93IGl0IHNob3VsZCBoYXZlIG9uZSwgdGhlIHNhbWUg
dGhhdCB3ZSBpbnNlcnRlZCAqLwotICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9oYXNfY2hp
bGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKSk7Ci0gICAgbGlzdCA9IHdlYmtpdF9kb21f
bm9kZV9nZXRfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQod2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChsaXN0KSwgPT0sIDEpOwot
ICAgIG5vZGUgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtKGxpc3QsIDApOwotICAgIGdfYXNz
ZXJ0KG5vZGUpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9pc19zYW1lX25vZGUoV0VC
S0lUX0RPTV9OT0RFKHApLCBub2RlKSk7Ci0gICAgZ19vYmplY3RfdW5yZWYobGlzdCk7Ci0KLSAg
ICAvKiBSZXBsYWNlIHRoZSBQIHRhZyB3aXRoIGEgRElWIHRhZyAqLwotICAgIGRpdiA9IHdlYmtp
dF9kb21fZG9jdW1lbnRfY3JlYXRlX2VsZW1lbnQoZG9jdW1lbnQsICJESVYiLCBOVUxMKTsKLSAg
ICB3ZWJraXRfZG9tX25vZGVfcmVwbGFjZV9jaGlsZChXRUJLSVRfRE9NX05PREUoYm9keSksIFdF
QktJVF9ET01fTk9ERShkaXYpLCBXRUJLSVRfRE9NX05PREUocCksIE5VTEwpOwotICAgIGdfYXNz
ZXJ0KHdlYmtpdF9kb21fbm9kZV9oYXNfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkp
KSk7Ci0gICAgbGlzdCA9IHdlYmtpdF9kb21fbm9kZV9nZXRfY2hpbGRfbm9kZXMoV0VCS0lUX0RP
TV9OT0RFKGJvZHkpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X2RvbV9ub2RlX2xpc3Rf
Z2V0X2xlbmd0aChsaXN0KSwgPT0sIDEpOwotICAgIG5vZGUgPSB3ZWJraXRfZG9tX25vZGVfbGlz
dF9pdGVtKGxpc3QsIDApOwotICAgIGdfYXNzZXJ0KG5vZGUpOwotICAgIGdfYXNzZXJ0KHdlYmtp
dF9kb21fbm9kZV9pc19zYW1lX25vZGUoV0VCS0lUX0RPTV9OT0RFKGRpdiksIG5vZGUpKTsKLSAg
ICBnX29iamVjdF91bnJlZihsaXN0KTsKLQotICAgIC8qIE5vdyByZW1vdmUgdGhlIHRhZyAqLwot
ICAgIHdlYmtpdF9kb21fbm9kZV9yZW1vdmVfY2hpbGQoV0VCS0lUX0RPTV9OT0RFKGJvZHkpLCBu
b2RlLCBOVUxMKTsKLSAgICBsaXN0ID0gd2Via2l0X2RvbV9ub2RlX2dldF9jaGlsZF9ub2RlcyhX
RUJLSVRfRE9NX05PREUoYm9keSkpOwotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfZG9tX25v
ZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QpLCA9PSwgMCk7Ci0gICAgZ19vYmplY3RfdW5yZWYobGlz
dCk7Ci0KLSAgICAvKiBUZXN0IGluc2VydF9iZWZvcmUgKi8KLQotICAgIC8qIElmIHJlZkNoaWxk
IGlzIG51bGwsIGluc2VydCBuZXdDaGlsZCBhcyBsYXN0IGVsZW1lbnQgb2YgcGFyZW50ICovCi0g
ICAgZGl2ID0gd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZWxlbWVudChkb2N1bWVudCwgIkRJ
ViIsIE5VTEwpOwotICAgIHdlYmtpdF9kb21fbm9kZV9pbnNlcnRfYmVmb3JlKFdFQktJVF9ET01f
Tk9ERShib2R5KSwgV0VCS0lUX0RPTV9OT0RFKGRpdiksIE5VTEwsIE5VTEwpOwotICAgIGdfYXNz
ZXJ0KHdlYmtpdF9kb21fbm9kZV9oYXNfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkp
KSk7Ci0gICAgbGlzdCA9IHdlYmtpdF9kb21fbm9kZV9nZXRfY2hpbGRfbm9kZXMoV0VCS0lUX0RP
TV9OT0RFKGJvZHkpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X2RvbV9ub2RlX2xpc3Rf
Z2V0X2xlbmd0aChsaXN0KSwgPT0sIDEpOwotICAgIG5vZGUgPSB3ZWJraXRfZG9tX25vZGVfbGlz
dF9pdGVtKGxpc3QsIDApOwotICAgIGdfYXNzZXJ0KG5vZGUpOwotICAgIGdfYXNzZXJ0KHdlYmtp
dF9kb21fbm9kZV9pc19zYW1lX25vZGUoV0VCS0lUX0RPTV9OT0RFKGRpdiksIG5vZGUpKTsKLSAg
ICBnX29iamVjdF91bnJlZihsaXN0KTsKLQotICAgIC8qIE5vdyBpbnNlcnQgYSAncCcgYmVmb3Jl
ICdkaXYnICovCi0gICAgcCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2VsZW1lbnQoZG9j
dW1lbnQsICJQIiwgTlVMTCk7Ci0gICAgd2Via2l0X2RvbV9ub2RlX2luc2VydF9iZWZvcmUoV0VC
S0lUX0RPTV9OT0RFKGJvZHkpLCBXRUJLSVRfRE9NX05PREUocCksIFdFQktJVF9ET01fTk9ERShk
aXYpLCBOVUxMKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaGFzX2NoaWxkX25vZGVz
KFdFQktJVF9ET01fTk9ERShib2R5KSkpOwotICAgIGxpc3QgPSB3ZWJraXRfZG9tX25vZGVfZ2V0
X2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSk7Ci0gICAgZ19hc3NlcnRfY21waW50
KHdlYmtpdF9kb21fbm9kZV9saXN0X2dldF9sZW5ndGgobGlzdCksID09LCAyKTsKLSAgICBub2Rl
ID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0LCAwKTsKLSAgICBnX2Fzc2VydChub2Rl
KTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaXNfc2FtZV9ub2RlKFdFQktJVF9ET01f
Tk9ERShwKSwgbm9kZSkpOwotICAgIG5vZGUgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtKGxp
c3QsIDEpOwotICAgIGdfYXNzZXJ0KG5vZGUpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9k
ZV9pc19zYW1lX25vZGUoV0VCS0lUX0RPTV9OT0RFKGRpdiksIG5vZGUpKTsKLSAgICBnX29iamVj
dF91bnJlZihsaXN0KTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotewot
ICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLQotICAgIGdfdGVzdF9idWdf
YmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Vi
a2l0L2RvbW5vZGUvdGVzdF9oaWVyYXJjaHlfbmF2aWdhdGlvbiIsCi0gICAgICAgICAgICAgICBE
b21Ob2RlRml4dHVyZSwgSFRNTF9ET0NVTUVOVF9ISUVSQVJDSFlfTkFWSUdBVElPTiwKLSAgICAg
ICAgICAgICAgIGRvbV9ub2RlX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X2Rv
bV9ub2RlX2hpZXJhcmNoeV9uYXZpZ2F0aW9uLAotICAgICAgICAgICAgICAgZG9tX25vZGVfZml4
dHVyZV90ZWFyZG93bik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2RvbW5vZGUvdGVzdF9p
bnNlcnRpb24iLAotICAgICAgICAgICAgICAgRG9tTm9kZUZpeHR1cmUsIEhUTUxfRE9DVU1FTlRf
Tk9ERV9JTlNFUlRJT04sCi0gICAgICAgICAgICAgICBkb21fbm9kZV9maXh0dXJlX3NldHVwLAot
ICAgICAgICAgICAgICAgdGVzdF9kb21fbm9kZV9pbnNlcnRpb24sCi0gICAgICAgICAgICAgICBk
b21fbm9kZV9maXh0dXJlX3RlYXJkb3duKTsKLQotICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7Ci19
Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rkb3dubG9hZC5jIGIv
U291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvd25sb2FkLmMKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGY4ZThkZWQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvdGVz
dHMvdGVzdGRvd25sb2FkLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMjIgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOSBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkB0d290b2FzdHMu
ZGU+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDx1
bmlzdGQuaD4KLSNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgotI2luY2x1ZGUgPHdlYmtpdC93ZWJr
aXQuaD4KLQotR01haW5Mb29wKiBsb29wOwotY2hhciogdGVtcG9yYXJ5RmlsZW5hbWUgPSBOVUxM
OwotV2ViS2l0RG93bmxvYWQqIHRoZURvd25sb2FkID0gTlVMTDsKLQotc3RhdGljIHZvaWQKLXRl
c3Rfd2Via2l0X2Rvd25sb2FkX2NyZWF0ZSh2b2lkKQotewotICAgIFdlYktpdE5ldHdvcmtSZXF1
ZXN0KiByZXF1ZXN0OwotICAgIFdlYktpdERvd25sb2FkKiBkb3dubG9hZDsKLSAgICBjb25zdCBn
Y2hhciogdXJpID0gImh0dHA6Ly9leGFtcGxlLmNvbSI7Ci0gICAgZ2NoYXIqIHRtcERpcjsKLQot
ICAgIHJlcXVlc3QgPSB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X25ldyh1cmkpOwotICAgIGRvd25s
b2FkID0gd2Via2l0X2Rvd25sb2FkX25ldyhyZXF1ZXN0KTsKLSAgICBnX29iamVjdF91bnJlZihy
ZXF1ZXN0KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2Rvd25sb2FkX2dldF91cmkoZG93
bmxvYWQpLCA9PSwgdXJpKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfZG93bmxvYWRfZ2V0X25ldHdv
cmtfcmVxdWVzdChkb3dubG9hZCkgPT0gcmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQoZ19zdHJyc3Ry
KHVyaSwgd2Via2l0X2Rvd25sb2FkX2dldF9zdWdnZXN0ZWRfZmlsZW5hbWUoZG93bmxvYWQpKSk7
Ci0gICAgZ19hc3NlcnQod2Via2l0X2Rvd25sb2FkX2dldF9zdGF0dXMoZG93bmxvYWQpID09IFdF
QktJVF9ET1dOTE9BRF9TVEFUVVNfQ1JFQVRFRCk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9kb3du
bG9hZF9nZXRfdG90YWxfc2l6ZShkb3dubG9hZCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG93
bmxvYWRfZ2V0X2N1cnJlbnRfc2l6ZShkb3dubG9hZCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRf
ZG93bmxvYWRfZ2V0X3Byb2dyZXNzKGRvd25sb2FkKSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9k
b3dubG9hZF9nZXRfZWxhcHNlZF90aW1lKGRvd25sb2FkKSk7Ci0gICAgdG1wRGlyID0gZ19maWxl
bmFtZV90b191cmkoZ19nZXRfdG1wX2RpcigpLCBOVUxMLCBOVUxMKTsKLSAgICB3ZWJraXRfZG93
bmxvYWRfc2V0X2Rlc3RpbmF0aW9uX3VyaShkb3dubG9hZCwgdG1wRGlyKTsKLSAgICBnX2Fzc2Vy
dF9jbXBzdHIodG1wRGlyLCA9PSwgd2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbl91cmko
ZG93bmxvYWQpKTs7Ci0gICAgZ19mcmVlKHRtcERpcik7Ci0gICAgZ19vYmplY3RfdW5yZWYoZG93
bmxvYWQpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLW5hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9u
X3JlcXVlc3RlZF9jYihXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRXZWJGcmFtZSogd2ViX2ZyYW1lLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiBy
ZXF1ZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFdl
Yk5hdmlnYXRpb25BY3Rpb24qIGFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBXZWJLaXRXZWJQb2xpY3lEZWNpc2lvbiogZGVjaXNpb24sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICB3ZWJr
aXRfd2ViX3BvbGljeV9kZWNpc2lvbl9kb3dubG9hZChkZWNpc2lvbik7Ci0gICAgcmV0dXJuIFRS
VUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1ub3RpZnlfc3RhdHVzX2NiKEdPYmplY3QqIG9iamVjdCwg
R1BhcmFtU3BlYyogcHNwZWMsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgV2ViS2l0RG93bmxvYWQq
IGRvd25sb2FkID0gV0VCS0lUX0RPV05MT0FEKG9iamVjdCk7Ci0gICAgc3dpdGNoICh3ZWJraXRf
ZG93bmxvYWRfZ2V0X3N0YXR1cyhkb3dubG9hZCkpIHsKLSAgICBjYXNlIFdFQktJVF9ET1dOTE9B
RF9TVEFUVVNfRklOSVNIRUQ6Ci0gICAgY2FzZSBXRUJLSVRfRE9XTkxPQURfU1RBVFVTX0VSUk9S
OgotICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIFdFQktJVF9ET1dOTE9BRF9TVEFUVVNfQ0FOQ0VMTEVEOgotICAgICAgICBnX2Fzc2VydF9u
b3RfcmVhY2hlZCgpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVh
azsKLSAgICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotc2V0X2ZpbGVuYW1lKGdjaGFyKiBmaWxl
bmFtZSkKLXsKLSAgICBnY2hhciAqdXJpID0gZ19maWxlbmFtZV90b191cmkoZmlsZW5hbWUsIE5V
TEwsIE5VTEwpOwotCi0gICAgd2Via2l0X2Rvd25sb2FkX3NldF9kZXN0aW5hdGlvbl91cmkodGhl
RG93bmxvYWQsIHVyaSk7Ci0gICAgZ19mcmVlKHVyaSk7Ci0KLSAgICB3ZWJraXRfZG93bmxvYWRf
c3RhcnQodGhlRG93bmxvYWQpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQK
LWhhbmRsZV9kb3dubG9hZF9yZXF1ZXN0ZWRfY2IoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiogYmVlblRoZXJlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiBhc3luY2gpCi17Ci0gICAgdGhlRG93bmxv
YWQgPSBkb3dubG9hZDsKLSAgICAqYmVlblRoZXJlID0gVFJVRTsKLQotICAgIGlmICh0ZW1wb3Jh
cnlGaWxlbmFtZSkgewotICAgICAgICBpZiAoYXN5bmNoKSB7Ci0gICAgICAgICAgICBnX2lkbGVf
YWRkKChHU291cmNlRnVuYylzZXRfZmlsZW5hbWUsIHRlbXBvcmFyeUZpbGVuYW1lKTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGdjaGFyICp1cmkgPSBnX2ZpbGVuYW1lX3RvX3VyaSh0
ZW1wb3JhcnlGaWxlbmFtZSwgTlVMTCwgTlVMTCk7Ci0gICAgICAgICAgICBpZiAodXJpKQotICAg
ICAgICAgICAgICAgIHdlYmtpdF9kb3dubG9hZF9zZXRfZGVzdGluYXRpb25fdXJpKGRvd25sb2Fk
LCB1cmkpOwotICAgICAgICAgICAgZ19mcmVlKHVyaSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBnX3NpZ25hbF9jb25uZWN0KGRvd25sb2FkLCAibm90aWZ5OjpzdGF0dXMiLAotICAgICAgICAg
ICAgICAgICAgICAgR19DQUxMQkFDSyhub3RpZnlfc3RhdHVzX2NiKSwgTlVMTCk7Ci19Ci0KLXN0
YXRpYyBnYm9vbGVhbgotZG93bmxvYWRfcmVxdWVzdGVkX2NiKFdlYktpdFdlYlZpZXcqIHdlYl92
aWV3LAotICAgICAgICAgICAgICAgICAgICAgIFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwKLSAg
ICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiogYmVlblRoZXJlKQotewotICAgIGhhbmRsZV9k
b3dubG9hZF9yZXF1ZXN0ZWRfY2IoZG93bmxvYWQsIGJlZW5UaGVyZSwgRkFMU0UpOwotICAgIHJl
dHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWRvd25sb2FkX3JlcXVlc3RlZF9hc3lu
Y2hfY2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2Jvb2xlYW4qIGJlZW5UaGVyZSkKLXsKLSAgICBoYW5kbGVfZG93bmxvYWRfcmVxdWVzdGVk
X2NiKGRvd25sb2FkLCBiZWVuVGhlcmUsIFRSVUUpOwotICAgIHJldHVybiBUUlVFOwotfQotCi1z
dGF0aWMgdm9pZAotdGVzdF93ZWJraXRfZG93bmxvYWRfcGVyZm9ybShnYm9vbGVhbiBhc3luY2gp
Ci17Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRf
d2ViX3ZpZXdfbmV3KCkpOwotICAgIEdDYWxsYmFjayBkb3dubG9hZFJlcXVlc3RDYWxsYmFjayA9
IE5VTEw7Ci0KLSAgICBnX29iamVjdF9yZWZfc2luayhHX09CSkVDVCh3ZWJWaWV3KSk7Ci0KLSAg
ICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJuYXZpZ2F0aW9uLXBvbGljeS1kZWNpc2lvbi1y
ZXF1ZXN0ZWQiLAotICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhuYXZpZ2F0aW9uX3Bv
bGljeV9kZWNpc2lvbl9yZXF1ZXN0ZWRfY2IpLAotICAgICAgICAgICAgICAgICAgICAgTlVMTCk7
Ci0KLSAgICBpZiAoYXN5bmNoKQotICAgICAgICBkb3dubG9hZFJlcXVlc3RDYWxsYmFjayA9IEdf
Q0FMTEJBQ0soZG93bmxvYWRfcmVxdWVzdGVkX2FzeW5jaF9jYik7Ci0gICAgZWxzZQotICAgICAg
ICBkb3dubG9hZFJlcXVlc3RDYWxsYmFjayA9IEdfQ0FMTEJBQ0soZG93bmxvYWRfcmVxdWVzdGVk
X2NiKTsKLQotICAgIGdib29sZWFuIGJlZW5UaGVyZSA9IEZBTFNFOwotICAgIGdfc2lnbmFsX2Nv
bm5lY3Qod2ViVmlldywgImRvd25sb2FkLXJlcXVlc3RlZCIsCi0gICAgICAgICAgICAgICAgICAg
ICBkb3dubG9hZFJlcXVlc3RDYWxsYmFjaywgJmJlZW5UaGVyZSk7Ci0KLSAgICAvKiBQcmVwYXJh
dGlvbjsgRklYTUU6IHdlIHNob3VsZCBtb3ZlIHRoaXMgY29kZSB0byBhIHRlc3QKLSAgICAgKiB1
dGlsaXRpZXMgZmlsZSwgYmVjYXVzZSB3ZSBoYXZlIGEgdmVyeSBzaW1pbGFyIG9uZSBpbgotICAg
ICAqIHRlc3R3ZWJmcmFtZS5jICovCi0gICAgR0Vycm9yICplcnJvciA9IE5VTEw7Ci0gICAgZ2No
YXIqIGZpbGVuYW1lOwotICAgIGludCBmZCA9IGdfZmlsZV9vcGVuX3RtcCgid2Via2l0LXRlc3R3
ZWJkb3dubG9hZC1YWFhYWFgiLCAmZmlsZW5hbWUsICZlcnJvcik7Ci0gICAgY2xvc2UoZmQpOwot
Ci0gICAgaWYgKGVycm9yKQotICAgICAgICBnX2NyaXRpY2FsKCJGYWlsZWQgdG8gb3BlbiBhIHRl
bXBvcmFyeSBmaWxlIGZvciB3cml0aW5nOiAlcy4iLCBlcnJvci0+bWVzc2FnZSk7Ci0KLSAgICBp
ZiAoZ191bmxpbmsoZmlsZW5hbWUpID09IC0xKQotICAgICAgICBnX2NyaXRpY2FsKCJGYWlsZWQg
dG8gZGVsZXRlIHRoZSB0ZW1wb3JhcnkgZmlsZTogJXMuIiwgZ19zdHJlcnJvcihlcnJubykpOwot
Ci0gICAgdGhlRG93bmxvYWQgPSBOVUxMOwotICAgIHRlbXBvcmFyeUZpbGVuYW1lID0gZmlsZW5h
bWU7Ci0KLSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotICAgIHdlYmtp
dF93ZWJfdmlld19sb2FkX3VyaSh3ZWJWaWV3LCAiaHR0cDovL2dub21lLm9yZy8iKTsKLSAgICBn
X21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQoYmVlblRoZXJlLCA9
PSwgVFJVRSk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQoZ19maWxlX3Rlc3QodGVtcG9yYXJ5Rmls
ZW5hbWUsIEdfRklMRV9URVNUX0lTX1JFR1VMQVIpLCA9PSwgVFJVRSk7Ci0KLSAgICBnX3VubGlu
ayh0ZW1wb3JhcnlGaWxlbmFtZSk7Ci0gICAgZ19mcmVlKHRlbXBvcmFyeUZpbGVuYW1lKTsKLSAg
ICB0ZW1wb3JhcnlGaWxlbmFtZSA9IE5VTEw7Ci0KLSAgICBnX21haW5fbG9vcF91bnJlZihsb29w
KTsKLSAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKLX0KLQotc3RhdGljIHZvaWQKLXRlc3Rf
d2Via2l0X2Rvd25sb2FkX3N5bmNoKHZvaWQpCi17Ci0gICAgdGVzdF93ZWJraXRfZG93bmxvYWRf
cGVyZm9ybShGQUxTRSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi10ZXN0X3dlYmtpdF9kb3dubG9hZF9h
c3luY2godm9pZCkKLXsKLSAgICB0ZXN0X3dlYmtpdF9kb3dubG9hZF9wZXJmb3JtKFRSVUUpOwot
fQotCi1zdGF0aWMgZ2Jvb2xlYW4gbWltZV90eXBlX3BvbGljeV9kZWNpc2lvbl9yZXF1ZXN0ZWRf
Y2IoV2ViS2l0V2ViVmlldyogdmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdE5ldHdv
cmtSZXF1ZXN0KiByZXF1ZXN0LCBjb25zdCBjaGFyKiBtaW1lX3R5cGUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0V2ViUG9saWN5
RGVjaXNpb24qIGRlY2lzaW9uLCBncG9pbnRlciBkYXRhKQotewotICAgIHdlYmtpdF93ZWJfcG9s
aWN5X2RlY2lzaW9uX2Rvd25sb2FkKGRlY2lzaW9uKTsKLSAgICByZXR1cm4gVFJVRTsKLX0KLQot
c3RhdGljIHZvaWQgaWRsZV9xdWl0X2xvb3BfY2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIEdQ
YXJhbVNwZWMqIHBzcGVjLCBncG9pbnRlciBkYXRhKQotewotICAgIGlmICh3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYl92aWV3KSA9PSBXRUJLSVRfTE9BRF9GSU5JU0hFRCB8fAot
ICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYl92aWV3KSA9PSBXRUJL
SVRfTE9BRF9GQUlMRUQpCi0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci19Ci0KLXN0
YXRpYyB2b2lkCi10ZXN0X3dlYmtpdF9kb3dubG9hZF9kYXRhKHZvaWQpCi17Ci0gICAgZ2Jvb2xl
YW4gYmVlblRoZXJlID0gRkFMU0U7Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJ
VF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5r
KHdlYlZpZXcpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAiZG93bmxvYWQtcmVx
dWVzdGVkIiwKLSAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0soZG93bmxvYWRfcmVxdWVz
dGVkX2NiKSwKLSAgICAgICAgICAgICAgICAgICAgICZiZWVuVGhlcmUpOwotCi0gICAgZ19zaWdu
YWxfY29ubmVjdCh3ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsCi0gICAgICAgICAgICAg
ICAgICAgICBHX0NBTExCQUNLKGlkbGVfcXVpdF9sb29wX2NiKSwKLSAgICAgICAgICAgICAgICAg
ICAgIE5VTEwpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAibWltZS10eXBlLXBv
bGljeS1kZWNpc2lvbi1yZXF1ZXN0ZWQiLAotICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFD
SyhtaW1lX3R5cGVfcG9saWN5X2RlY2lzaW9uX3JlcXVlc3RlZF9jYiksCi0gICAgICAgICAgICAg
ICAgICAgICBOVUxMKTsKLQotICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7
Ci0KLSAgICAvKiBXZSdyZSB0ZXN0aW5nIGZvciBhIGNyYXNoLCBzbyBqdXN0IG5vdCBjcmFzaGlu
ZyBpcyBhIHBhc3MgKi8KLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkod2ViVmlldywgImRh
dGE6YXBwbGljYXRpb24vb2N0ZWN0LXN0cmVhbSwiKTsKLSAgICBnX21haW5fbG9vcF9ydW4obG9v
cCk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQoYmVlblRoZXJlLCA9PSwgVFJVRSk7Ci0KLSAgICBn
X21haW5fbG9vcF91bnJlZihsb29wKTsKLSAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKLX0K
LQotc3RhdGljIHZvaWQgbm90aWZ5RG93bmxvYWRTdGF0dXNDYWxsYmFjayhHT2JqZWN0ICpvYmpl
Y3QsIEdQYXJhbVNwZWMgKnBzcGVjLCBncG9pbnRlciBkYXRhKQotewotICAgIFdlYktpdERvd25s
b2FkICpkb3dubG9hZCA9IFdFQktJVF9ET1dOTE9BRChvYmplY3QpOwotICAgIFdlYktpdE5ldHdv
cmtSZXNwb25zZSAqcmVzcG9uc2UgPSB3ZWJraXRfZG93bmxvYWRfZ2V0X25ldHdvcmtfcmVzcG9u
c2UoZG93bmxvYWQpOwotICAgIFNvdXBNZXNzYWdlICptZXNzYWdlID0gd2Via2l0X25ldHdvcmtf
cmVzcG9uc2VfZ2V0X21lc3NhZ2UocmVzcG9uc2UpOwotCi0gICAgc3dpdGNoICh3ZWJraXRfZG93
bmxvYWRfZ2V0X3N0YXR1cyhkb3dubG9hZCkpIHsKLSAgICBjYXNlIFdFQktJVF9ET1dOTE9BRF9T
VEFUVVNfRVJST1I6Ci0gICAgICAgIGdfYXNzZXJ0X2NtcGludChtZXNzYWdlLT5zdGF0dXNfY29k
ZSwgPT0sIDQwNCk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgV0VCS0lUX0RPV05MT0FEX1NUQVRVU19GSU5JU0hFRDoKLSAgICBjYXNl
IFdFQktJVF9ET1dOTE9BRF9TVEFUVVNfQ0FOQ0VMTEVEOgotICAgICAgICBnX2Fzc2VydF9ub3Rf
cmVhY2hlZCgpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsK
LSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIgKnNlcnZl
ciwgU291cE1lc3NhZ2UgKm1lc3NhZ2UsIGNvbnN0IGNoYXIgKnBhdGgsIEdIYXNoVGFibGUgKnF1
ZXJ5LCBTb3VwQ2xpZW50Q29udGV4dCAqY29udGV4dCwgZ3BvaW50ZXIgdXNlckRhdGEpCi17Ci0g
ICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKLSAgICAgICAgc291
cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVE
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVz
KG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7Ci0gICAgc291cF9tZXNzYWdlX2JvZHlf
Y29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rf
d2Via2l0X2Rvd25sb2FkX25vdF9mb3VuZCh2b2lkKQotewotICAgIFNvdXBTZXJ2ZXIgKnNlcnZl
ciA9IHNvdXBfc2VydmVyX25ldyhTT1VQX1NFUlZFUl9QT1JULCAwLCBOVUxMKTsKLSAgICBzb3Vw
X3NlcnZlcl9ydW5fYXN5bmMoc2VydmVyKTsKLSAgICBzb3VwX3NlcnZlcl9hZGRfaGFuZGxlcihz
ZXJ2ZXIsIE5VTEwsIHNlcnZlckNhbGxiYWNrLCBOVUxMLCBOVUxMKTsKLSAgICBTb3VwVVJJICpi
YXNlVVJJID0gc291cF91cmlfbmV3KCJodHRwOi8vMTI3LjAuMC4xLyIpOwotICAgIHNvdXBfdXJp
X3NldF9wb3J0KGJhc2VVUkksIHNvdXBfc2VydmVyX2dldF9wb3J0KHNlcnZlcikpOwotCi0gICAg
U291cFVSSSAqdXJpID0gc291cF91cmlfbmV3X3dpdGhfYmFzZShiYXNlVVJJLCAiL2ZvbyIpOwot
ICAgIGNoYXIgKnVyaVN0cmluZyA9IHNvdXBfdXJpX3RvX3N0cmluZyh1cmksIEZBTFNFKTsKLSAg
ICBzb3VwX3VyaV9mcmVlKHVyaSk7Ci0KLSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEws
IFRSVUUpOwotICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0ICpyZXF1ZXN0ID0gd2Via2l0X25ldHdv
cmtfcmVxdWVzdF9uZXcodXJpU3RyaW5nKTsKLSAgICBnX2ZyZWUgKHVyaVN0cmluZyk7Ci0gICAg
V2ViS2l0RG93bmxvYWQgKmRvd25sb2FkID0gd2Via2l0X2Rvd25sb2FkX25ldyhyZXF1ZXN0KTsK
LSAgICBnX29iamVjdF91bnJlZihyZXF1ZXN0KTsKLQotICAgIHdlYmtpdF9kb3dubG9hZF9zZXRf
ZGVzdGluYXRpb25fdXJpKGRvd25sb2FkLCAiZmlsZTovLy90bXAvZm9vIik7Ci0gICAgZ19zaWdu
YWxfY29ubmVjdChkb3dubG9hZCwgIm5vdGlmeTo6c3RhdHVzIiwgR19DQUxMQkFDSyhub3RpZnlE
b3dubG9hZFN0YXR1c0NhbGxiYWNrKSwgTlVMTCk7Ci0KLSAgICB3ZWJraXRfZG93bmxvYWRfc3Rh
cnQoZG93bmxvYWQpOwotICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLQotICAgIGdfb2JqZWN0
X3VucmVmKGRvd25sb2FkKTsKLSAgICBnX21haW5fbG9vcF91bnJlZihsb29wKTsKLSAgICBzb3Vw
X3VyaV9mcmVlKGJhc2VVUkkpOwotICAgIGdfb2JqZWN0X3VucmVmKHNlcnZlcik7Ci19Ci0KLWlu
dCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKLXsKLSAgICBndGtfdGVzdF9pbml0KCZhcmdj
LCAmYXJndiwgTlVMTCk7Ci0KLSAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJr
aXQub3JnLyIpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9kb3dubG9hZC9jcmVhdGUi
LCB0ZXN0X3dlYmtpdF9kb3dubG9hZF9jcmVhdGUpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dl
YmtpdC9kb3dubG9hZC9zeW5jaCIsIHRlc3Rfd2Via2l0X2Rvd25sb2FkX3N5bmNoKTsKLSAgICBn
X3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvZG93bmxvYWQvYXN5bmNoIiwgdGVzdF93ZWJraXRfZG93
bmxvYWRfYXN5bmNoKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvZG93bmxvYWQvZGF0
YSIsIHRlc3Rfd2Via2l0X2Rvd25sb2FkX2RhdGEpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dl
YmtpdC9kb3dubG9hZC9ub3QtZm91bmQiLCB0ZXN0X3dlYmtpdF9kb3dubG9hZF9ub3RfZm91bmQp
OwotICAgIHJldHVybiBnX3Rlc3RfcnVuICgpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9ndGsvdGVzdHMvdGVzdGZhdmljb25kYXRhYmFzZS5jIGIvU291cmNlL1dlYktpdC9ndGsvdGVz
dHMvdGVzdGZhdmljb25kYXRhYmFzZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAy
YmM2MDZhLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RmYXZpY29u
ZGF0YWJhc2UuYworKysgL2Rldi9udWxsCkBAIC0xLDI3NiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJ0
ZXN0X3V0aWxzLmgiCi0jaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRlIDxndGsvZ3Rr
Lmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgotCi1j
b25zdCBpbnQgZ0ljb25TaXplID0gMTY7Ci0KLUdNYWluTG9vcCAqbG9vcDsKLWNoYXIgKmJhc2VV
Ukk7Ci0KLXN0YXRpYyB2b2lkCi1zZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyICpzZXJ2ZXIsIFNv
dXBNZXNzYWdlICptZXNzYWdlLCBjb25zdCBjaGFyICpwYXRoLCBHSGFzaFRhYmxlICpxdWVyeSwg
U291cENsaWVudENvbnRleHQgKmNvbnRleHQsIHZvaWQgKmRhdGEpCi17Ci0gICAgaWYgKG1lc3Nh
Z2UtPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKLSAgICAgICAgc291cF9tZXNzYWdlX3Nl
dF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNP
VVBfU1RBVFVTX09LKTsKLQotICAgIGNoYXIgKmNvbnRlbnRzOwotICAgIGdzaXplIGxlbmd0aDsK
LSAgICBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9mYXZpY29uLmljbyIpKSB7Ci0gICAgICAgIEdF
cnJvciAqZXJyb3IgPSBOVUxMOwotCi0gICAgICAgIGdfZmlsZV9nZXRfY29udGVudHMoImJsYW5r
LmljbyIsICZjb250ZW50cywgJmxlbmd0aCwgJmVycm9yKTsKLSAgICAgICAgZ19hc3NlcnQoIWVy
cm9yKTsKLSAgICB9IGVsc2UgewotICAgICAgICBjb250ZW50cyA9IGdfc3RyZHVwKCI8aHRtbD48
Ym9keT50ZXN0PC9ib2R5PjwvaHRtbD4iKTsKLSAgICAgICAgbGVuZ3RoID0gc3RybGVuKGNvbnRl
bnRzKTsKLSAgICB9Ci0KLSAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVz
cG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgY29udGVudHMsIGxlbmd0aCk7Ci0gICAgc291
cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7Ci19Ci0KLXN0
YXRpYyB2b2lkIGRlbGV0ZURhdGFiYXNlRmlsZUlmRXhpc3RzKGNvbnN0IGNoYXIgKmRhdGFiYXNl
UGF0aCkKLXsKLSAgICBpZiAoIWdfZmlsZV90ZXN0KGRhdGFiYXNlUGF0aCwgR19GSUxFX1RFU1Rf
SVNfRElSKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2hhciAqZGF0YWJhc2VGaWxlbmFtZSA9
IGdfYnVpbGRfZmlsZW5hbWUoZGF0YWJhc2VQYXRoLCAiV2VicGFnZUljb25zLmRiIiwgTlVMTCk7
Ci0gICAgaWYgKGdfdW5saW5rKGRhdGFiYXNlRmlsZW5hbWUpID09IC0xKSB7Ci0gICAgICAgIGdf
ZnJlZShkYXRhYmFzZUZpbGVuYW1lKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGdf
ZnJlZShkYXRhYmFzZUZpbGVuYW1lKTsKLSAgICBnX3JtZGlyKGRhdGFiYXNlUGF0aCk7Ci19Ci0K
LXN0YXRpYyB2b2lkIHRlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VTZXRQYXRoKCkKLXsKLSAgICBj
aGFyICpkYXRhYmFzZVBhdGggPSBnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X3RtcF9kaXIoKSwgIndl
YmtpdC10ZXN0ZmF2aWNvbmRhdGFiYXNlIiwgTlVMTCk7Ci0gICAgZGVsZXRlRGF0YWJhc2VGaWxl
SWZFeGlzdHMoZGF0YWJhc2VQYXRoKTsKLQotICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSAqZGF0
YWJhc2UgPSB3ZWJraXRfZ2V0X2Zhdmljb25fZGF0YWJhc2UoKTsKLSAgICB3ZWJraXRfZmF2aWNv
bl9kYXRhYmFzZV9zZXRfcGF0aChkYXRhYmFzZSwgZGF0YWJhc2VQYXRoKTsKLQotICAgIGdfYXNz
ZXJ0X2NtcHN0cihkYXRhYmFzZVBhdGgsID09LCB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRf
cGF0aChkYXRhYmFzZSkpOwotCi0gICAgZ19mcmVlKGRhdGFiYXNlUGF0aCk7Ci19Ci0KLS8vIFNl
ZSB0aGUgY29tbWVudCBpbiBtYWluKCkgZnVuY3Rpb24gdGhhdCBnb2VzIHdpdGggdGhpcyBzYW1l
IGd1YXJkLgotI2lmZGVmIE5ERUJVRwotCi1zdGF0aWMgdm9pZCBmYXZpY29uRGF0YWJhc2VHZXRW
YWxpZEZhdmljb25DYWxsYmFjayhHT2JqZWN0ICpzb3VyY2VPYmplY3QsIEdBc3luY1Jlc3VsdCAq
cmVzdWx0LCB2b2lkICp1c2VyRGF0YSkKLXsKLSAgICBnYm9vbGVhbiAqYmVlbkhlcmUgPSAoZ2Jv
b2xlYW4qKXVzZXJEYXRhOwotICAgIEdFcnJvciAqZXJyb3IgPSBOVUxMOwotICAgIEdka1BpeGJ1
ZiAqaWNvbiA9IHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX3BpeGJ1Zl9maW5p
c2goV0VCS0lUX0ZBVklDT05fREFUQUJBU0Uoc291cmNlT2JqZWN0KSwgcmVzdWx0LCAmZXJyb3Ip
OwotICAgIGdfYXNzZXJ0KGljb24pOwotICAgIGdfb2JqZWN0X3VucmVmKGljb24pOwotCi0gICAg
KmJlZW5IZXJlID0gVFJVRTsKLQotICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci19Ci0KLXN0
YXRpYyB2b2lkIGZhdmljb25EYXRhYmFzZUdldEludmFsaWRGYXZpY29uQ2FsbGJhY2soR09iamVj
dCAqc291cmNlT2JqZWN0LCBHQXN5bmNSZXN1bHQgKnJlc3VsdCwgdm9pZCAqdXNlckRhdGEpCi17
Ci0gICAgZ2Jvb2xlYW4gKmJlZW5IZXJlID0gKGdib29sZWFuKil1c2VyRGF0YTsKLSAgICBHRXJy
b3IgKmVycm9yID0gTlVMTDsKLSAgICBHZGtQaXhidWYgKmljb24gPSB3ZWJraXRfZmF2aWNvbl9k
YXRhYmFzZV9nZXRfZmF2aWNvbl9waXhidWZfZmluaXNoKFdFQktJVF9GQVZJQ09OX0RBVEFCQVNF
KHNvdXJjZU9iamVjdCksIHJlc3VsdCwgJmVycm9yKTsKLSAgICBnX2Fzc2VydCghaWNvbik7Ci0K
LSAgICAqYmVlbkhlcmUgPSBUUlVFOwotCi0gICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKLX0K
LQotc3RhdGljIHZvaWQgZmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNvbkNhbmNlbGxlZENhbGxiYWNr
KEdPYmplY3QgKnNvdXJjZU9iamVjdCwgR0FzeW5jUmVzdWx0ICpyZXN1bHQsIHZvaWQgKnVzZXJE
YXRhKQotewotICAgIGdib29sZWFuICpiZWVuSGVyZSA9IChnYm9vbGVhbiopdXNlckRhdGE7Ci0g
ICAgR0Vycm9yICplcnJvciA9IE5VTEw7Ci0gICAgR2RrUGl4YnVmICppY29uID0gd2Via2l0X2Zh
dmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fcGl4YnVmX2ZpbmlzaChXRUJLSVRfRkFWSUNPTl9E
QVRBQkFTRShzb3VyY2VPYmplY3QpLCByZXN1bHQsICZlcnJvcik7Ci0gICAgZ19hc3NlcnQoIWlj
b24pOwotICAgIGdfYXNzZXJ0KGVycm9yICYmIGdfZXJyb3JfbWF0Y2hlcyhlcnJvciwgR19JT19F
UlJPUiwgR19JT19FUlJPUl9DQU5DRUxMRUQpKTsKLQotICAgICpiZWVuSGVyZSA9IFRSVUU7Ci0K
LSAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcXVp
dE1haW5Mb29wSWZMb2FkQ29tcGxldGVkKGdib29sZWFuICppY29uT3JQYWdlTG9hZGVkKQotewot
ICAgIGlmICgqaWNvbk9yUGFnZUxvYWRlZCkKLSAgICAgICAgZ19tYWluX2xvb3BfcXVpdChsb29w
KTsKLSAgICBlbHNlCi0gICAgICAgICppY29uT3JQYWdlTG9hZGVkID0gVFJVRTsKLX0KLQotc3Rh
dGljIHZvaWQgaWRsZVF1aXRMb29wQ2FsbGJhY2soV2ViS2l0V2ViVmlldyAqd2ViVmlldywgR1Bh
cmFtU3BlYyAqcGFyYW1TcGVjLCBnYm9vbGVhbiAqaWNvbk9yUGFnZUxvYWRlZCkKLXsKLSAgICBX
ZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMo
d2ViVmlldyk7Ci0KLSAgICBpZiAoc3RhdHVzID09IFdFQktJVF9MT0FEX0ZJTklTSEVEIHx8IHN0
YXR1cyA9PSBXRUJLSVRfTE9BRF9GQUlMRUQpCi0gICAgICAgIHF1aXRNYWluTG9vcElmTG9hZENv
bXBsZXRlZChpY29uT3JQYWdlTG9hZGVkKTsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0V2ViVmll
d0ljb25Mb2FkZWQoV2ViS2l0RmF2aWNvbkRhdGFiYXNlICpkYXRhYmFzZSwgY29uc3QgY2hhciAq
ZnJhbWVVUkksIGdib29sZWFuICppY29uT3JQYWdlTG9hZGVkKQotewotICAgIHF1aXRNYWluTG9v
cElmTG9hZENvbXBsZXRlZChpY29uT3JQYWdlTG9hZGVkKTsKLX0KLQotc3RhdGljIHZvaWQgbG9h
ZFVSSShjb25zdCBjaGFyICp1cmkpCi17Ci0gICAgV2ViS2l0V2ViVmlldyAqdmlldyA9IFdFQktJ
VF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdib29sZWFuIGljb25PclBh
Z2VMb2FkZWQgPSBGQUxTRTsKLQotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh2aWV3LCB1
cmkpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh2aWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIs
IEdfQ0FMTEJBQ0soaWRsZVF1aXRMb29wQ2FsbGJhY2spLCAmaWNvbk9yUGFnZUxvYWRlZCk7Ci0g
ICAgZ19zaWduYWxfY29ubmVjdCh2aWV3LCAiaWNvbi1sb2FkZWQiLCBHX0NBTExCQUNLKHdlYmtp
dFdlYlZpZXdJY29uTG9hZGVkKSwgJmljb25PclBhZ2VMb2FkZWQpOwotCi0gICAgZ19tYWluX2xv
b3BfcnVuKGxvb3ApOwotCi0gICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVk
KHZpZXcsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsICZpY29uT3JQYWdlTG9hZGVk
KTsKLX0KLQotc3RhdGljIGdib29sZWFuIGZhdmljb25EYXRhYmFzZUdldFZhbGlkRmF2aWNvbklk
bGUodm9pZCAqdXNlckRhdGEpCi17Ci0gICAgd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zh
dmljb25fcGl4YnVmKHdlYmtpdF9nZXRfZmF2aWNvbl9kYXRhYmFzZSgpLCBiYXNlVVJJLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnSWNvblNpemUsIGdJ
Y29uU2l6ZSwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmF2aWNvbkRhdGFiYXNlR2V0VmFsaWRGYXZpY29uQ2FsbGJhY2ssIHVzZXJEYXRhKTsK
LSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBmYXZpY29uRGF0YWJhc2VH
ZXRJbnZhbGlkRmF2aWNvbklkbGUodm9pZCAqdXNlckRhdGEpCi17Ci0gICAgd2Via2l0X2Zhdmlj
b25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fcGl4YnVmKHdlYmtpdF9nZXRfZmF2aWNvbl9kYXRhYmFz
ZSgpLCAiaHR0cDovL3d3dy53ZWJraXRndGsub3JnLyIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdJY29uU2l6ZSwgZ0ljb25TaXplLCBOVUxMLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYXZpY29uRGF0YWJh
c2VHZXRJbnZhbGlkRmF2aWNvbkNhbGxiYWNrLCB1c2VyRGF0YSk7Ci0gICAgcmV0dXJuIEZBTFNF
OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gZmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNvbkNhbmNlbGxl
ZElkbGUodm9pZCAqdXNlckRhdGEpCi17Ci0gICAgR0NhbmNlbGxhYmxlICpjYW5jZWxsYWJsZSA9
IGdfY2FuY2VsbGFibGVfbmV3KCk7Ci0gICAgd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zh
dmljb25fcGl4YnVmKHdlYmtpdF9nZXRfZmF2aWNvbl9kYXRhYmFzZSgpLCBiYXNlVVJJLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnSWNvblNpemUsIGdJ
Y29uU2l6ZSwgY2FuY2VsbGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZhdmljb25EYXRhYmFzZUdldEZhdmljb25DYW5jZWxsZWRDYWxsYmFjaywg
dXNlckRhdGEpOwotICAgIGdfY2FuY2VsbGFibGVfY2FuY2VsKGNhbmNlbGxhYmxlKTsKLSAgICBn
X29iamVjdF91bnJlZihjYW5jZWxsYWJsZSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0
aWMgdm9pZCB0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNvbigpCi17Ci0gICAgZ2Jv
b2xlYW4gYmVlblRvSWNvbkNhbGxiYWNrOwotCi0gICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhO
VUxMLCBUUlVFKTsKLQotICAgIC8qIExvYWQgdXJpIHRvIG1ha2Ugc3VyZSBmYXZpY29uIGlzIGFk
ZGVkIHRvIGRhdGFiYXNlLiAqLwotICAgIGxvYWRVUkkoYmFzZVVSSSk7Ci0KLSAgICBiZWVuVG9J
Y29uQ2FsbGJhY2sgPSBGQUxTRTsKLSAgICBnX2lkbGVfYWRkKChHU291cmNlRnVuYylmYXZpY29u
RGF0YWJhc2VHZXRWYWxpZEZhdmljb25JZGxlLCAmYmVlblRvSWNvbkNhbGxiYWNrKTsKLSAgICBn
X21haW5fbG9vcF9ydW4obG9vcCk7Ci0gICAgZ19hc3NlcnQoYmVlblRvSWNvbkNhbGxiYWNrKTsK
LQotICAgIGJlZW5Ub0ljb25DYWxsYmFjayA9IEZBTFNFOwotICAgIGdfaWRsZV9hZGQoKEdTb3Vy
Y2VGdW5jKWZhdmljb25EYXRhYmFzZUdldEludmFsaWRGYXZpY29uSWRsZSwgJmJlZW5Ub0ljb25D
YWxsYmFjayk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotICAgIGdfYXNzZXJ0KGJlZW5U
b0ljb25DYWxsYmFjayk7Ci0KLSAgICBiZWVuVG9JY29uQ2FsbGJhY2sgPSBGQUxTRTsKLSAgICBn
X2lkbGVfYWRkKChHU291cmNlRnVuYylmYXZpY29uRGF0YWJhc2VHZXRGYXZpY29uQ2FuY2VsbGVk
SWRsZSwgJmJlZW5Ub0ljb25DYWxsYmFjayk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwot
ICAgIGdfYXNzZXJ0KGJlZW5Ub0ljb25DYWxsYmFjayk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RX
ZWJLaXRGYXZpY29uRGF0YWJhc2VHZXRGYXZpY29uVVJJKCkKLXsKLSAgICBjaGFyICppY29uVVJJ
ID0gd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fdXJpKHdlYmtpdF9nZXRfZmF2
aWNvbl9kYXRhYmFzZSgpLCBiYXNlVVJJKTsKLSAgICBjaGFyICpleHBlY3RlZFVSSSA9IGdfc3Ry
ZHVwX3ByaW50ZigiJXNmYXZpY29uLmljbyIsIGJhc2VVUkkpOwotICAgIGdfYXNzZXJ0X2NtcHN0
cihpY29uVVJJLCA9PSwgZXhwZWN0ZWRVUkkpOwotICAgIGdfZnJlZShleHBlY3RlZFVSSSk7Ci0g
ICAgZ19mcmVlKGljb25VUkkpOwotfQotCi0jZW5kaWYKLQotc3RhdGljIHZvaWQgdGVzdFdlYktp
dEZhdmljb25EYXRhYmFzZVJlbW92ZUFsbCh2b2lkKQotewotICAgIFdlYktpdEZhdmljb25EYXRh
YmFzZSAqZGF0YWJhc2UgPSB3ZWJraXRfZ2V0X2Zhdmljb25fZGF0YWJhc2UoKTsKLSAgICB3ZWJr
aXRfZmF2aWNvbl9kYXRhYmFzZV9jbGVhcihkYXRhYmFzZSk7Ci0gICAgY2hhciAqaWNvblVSSSA9
IHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX3VyaShkYXRhYmFzZSwgYmFzZVVS
SSk7Ci0gICAgZ19hc3NlcnQoIWljb25VUkkpOwotICAgIGdfZnJlZShpY29uVVJJKTsKLX0KLQot
c3RhdGljIHZvaWQgdGVzdFdlYktpdEZhdmljb25EYXRhYmFzZUNsb3NlRGF0YWJhc2Uodm9pZCkK
LXsKLSAgICBXZWJLaXRGYXZpY29uRGF0YWJhc2UgKmRhdGFiYXNlID0gd2Via2l0X2dldF9mYXZp
Y29uX2RhdGFiYXNlKCk7Ci0gICAgY2hhciAqZGF0YWJhc2VQYXRoID0gZ19zdHJkdXAod2Via2l0
X2Zhdmljb25fZGF0YWJhc2VfZ2V0X3BhdGgoZGF0YWJhc2UpKTsKLSAgICB3ZWJraXRfZmF2aWNv
bl9kYXRhYmFzZV9zZXRfcGF0aChkYXRhYmFzZSwgMCk7Ci0gICAgZGVsZXRlRGF0YWJhc2VGaWxl
SWZFeGlzdHMoZGF0YWJhc2VQYXRoKTsKLSAgICBnX2ZyZWUoZGF0YWJhc2VQYXRoKTsKLX0KLQot
aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICAgIGd0a190ZXN0X2luaXQoJmFy
Z2MsICZhcmd2LCBOVUxMKTsKLQotICAgIC8qIFRoaXMgaG9wZWZ1bGx5IG1ha2VzIHRoZSB0ZXN0
IGluZGVwZW5kZW50IG9mIHRoZSBwYXRoIGl0J3MgY2FsbGVkIGZyb20uICovCi0gICAgdGVzdHV0
aWxzX3JlbGF0aXZlX2NoZGlyKCJTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy9yZXNvdXJjZXMvdGVz
dC5odG1sIiwgYXJndlswXSk7Ci0KLSAgICBTb3VwU2VydmVyICpzZXJ2ZXIgPSBzb3VwX3NlcnZl
cl9uZXcoU09VUF9TRVJWRVJfUE9SVCwgMCwgTlVMTCk7Ci0gICAgc291cF9zZXJ2ZXJfcnVuX2Fz
eW5jKHNlcnZlcik7Ci0KLSAgICBzb3VwX3NlcnZlcl9hZGRfaGFuZGxlcihzZXJ2ZXIsIE5VTEws
IHNlcnZlckNhbGxiYWNrLCBOVUxMLCBOVUxMKTsKLQotICAgIFNvdXBVUkkgKnNvdXBVUkkgPSBz
b3VwX3VyaV9uZXcoImh0dHA6Ly8xMjcuMC4wLjEvIik7Ci0gICAgc291cF91cmlfc2V0X3BvcnQo
c291cFVSSSwgc291cF9zZXJ2ZXJfZ2V0X3BvcnQoc2VydmVyKSk7Ci0KLSAgICBiYXNlVVJJID0g
c291cF91cmlfdG9fc3RyaW5nKHNvdXBVUkksIEZBTFNFKTsKLSAgICBzb3VwX3VyaV9mcmVlKHNv
dXBVUkkpOwotCi0gICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8i
KTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvZmF2aWNvbmRhdGFiYXNlL3NldC1wYXRo
IiwgdGVzdFdlYktpdEZhdmljb25EYXRhYmFzZVNldFBhdGgpOwotCi0gICAgLy8gVGhlc2UgdHdv
IHRlc3RzIHdpbGwgdHJpZ2dlciBhbiBBU1NFUlRJT04gb24gZGVidWcgYnVpbGRzIGR1ZQotICAg
IC8vIHRvIGh0dHA6Ly93ZWJraXQub3JnL2IvNjc1ODIuIFJlbW92ZSB0aGUgZ3VhcmRzIG9uY2Ug
dGhlIGJ1ZyBpcyBmaXhlZC4KLSNpZmRlZiBOREVCVUcKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93
ZWJraXQvZmF2aWNvbmRhdGFiYXNlL2dldC1mYXZpY29uIiwgdGVzdFdlYktpdEZhdmljb25EYXRh
YmFzZUdldEZhdmljb24pOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9mYXZpY29uZGF0
YWJhc2UvZ2V0LWZhdmljb24tdXJpIiwgdGVzdFdlYktpdEZhdmljb25EYXRhYmFzZUdldEZhdmlj
b25VUkkpOwotI2VuZGlmCi0KLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvZmF2aWNvbmRh
dGFiYXNlL3JlbW92ZS1hbGwiLCB0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlUmVtb3ZlQWxsKTsK
LSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvZmF2aWNvbmRhdGFiYXNlL2Nsb3NlLWRiIiwg
dGVzdFdlYktpdEZhdmljb25EYXRhYmFzZUNsb3NlRGF0YWJhc2UpOwotCi0gICAgcmV0dXJuIGdf
dGVzdF9ydW4oKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rn
bG9iYWxzLmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0Z2xvYmFscy5jCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjllYzRmLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQvZ3RrL3Rlc3RzL3Rlc3RnbG9iYWxzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBDb2xsYWJvcmEgTHRkLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgot
I2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KLQotLy8gTWFrZSBzdXJlIHRoZSBzZXNzaW9uIGlz
IGluaXRpYWxpemVkIHByb3Blcmx5IHdoZW4gd2Via2l0X2dldF9kZWZhdWx0X3Nlc3Npb24oKSBp
cyBjYWxsZWQuCi1zdGF0aWMgdm9pZCB0ZXN0X2dsb2JhbHNfZGVmYXVsdF9zZXNzaW9uKCkKLXsK
LSAgICBnX3Rlc3RfYnVnKCIzNjc1NCIpOwotCi0gICAgU291cFNlc3Npb24qIHNlc3Npb24gPSB3
ZWJraXRfZ2V0X2RlZmF1bHRfc2Vzc2lvbigpOwotICAgIHNvdXBfc2Vzc2lvbl9yZW1vdmVfZmVh
dHVyZV9ieV90eXBlKHNlc3Npb24sIFdFQktJVF9UWVBFX1NPVVBfQVVUSF9ESUFMT0cpOwotCi0g
ICAgLy8gVGhpcyBtYWtlcyBzdXJlIG91ciBpbml0aWFsaXphdGlvbiByYW4uCi0gICAgZ19hc3Nl
cnQoc291cF9zZXNzaW9uX2dldF9mZWF0dXJlKHNlc3Npb24sIFNPVVBfVFlQRV9DT05URU5UX0RF
Q09ERVIpICE9IE5VTEwpOwotCi0gICAgLy8gQ3JlYXRpbmcgYSBXZWJWaWV3IHNob3VsZCBtYWtl
IHN1cmUgdGhlIHNlc3Npb24gaXMKLSAgICAvLyBpbml0aWFsaXplZCwgYW5kIG5vdCBtZXNzIHdp
dGggb3VyIGNoYW5nZXMuCi0gICAgV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcgPSBXRUJLSVRfV0VC
X1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBnX29iamVjdF9yZWZfc2luayh3ZWJf
dmlldyk7Ci0gICAgZ19vYmplY3RfdW5yZWYod2ViX3ZpZXcpOwotCi0gICAgLy8gVGhlc2UgbWFr
ZXMgc3VyZSBvdXIgbW9kaWZpY2F0aW9uIHdhcyBrZXB0LgotICAgIGdfYXNzZXJ0KHNvdXBfc2Vz
c2lvbl9nZXRfZmVhdHVyZShzZXNzaW9uLCBTT1VQX1RZUEVfQ09OVEVOVF9ERUNPREVSKSAhPSBO
VUxMKTsKLSAgICBnX2Fzc2VydChzb3VwX3Nlc3Npb25fZ2V0X2ZlYXR1cmUoc2Vzc2lvbiwgV0VC
S0lUX1RZUEVfU09VUF9BVVRIX0RJQUxPRykgPT0gTlVMTCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRl
c3RfZ2xvYmFsc19zZWN1cml0eV9wb2xpY3koKQotewotICAgIC8vIENoZWNrIGRlZmF1bHQgcG9s
aWN5IGZvciB3ZWxsIGtub3duIHNjaGVtZXMuCi0gICAgV2ViS2l0U2VjdXJpdHlQb2xpY3kgcG9s
aWN5ID0gd2Via2l0X2dldF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUoImh0dHAiKTsK
LSAgICBndWludCBtYXNrID0gV0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9DT1JTX0VOQUJMRUQ7Ci0g
ICAgZ19hc3NlcnRfY21wdWludChwb2xpY3kgJiBtYXNrLCA9PSwgbWFzayk7Ci0KLSAgICBwb2xp
Y3kgPSB3ZWJraXRfZ2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiaHR0cHMiKTsK
LSAgICBtYXNrID0gV0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9TRUNVUkUgfCBXRUJLSVRfU0VDVVJJ
VFlfUE9MSUNZX0NPUlNfRU5BQkxFRDsKLSAgICBnX2Fzc2VydF9jbXB1aW50KHBvbGljeSAmIG1h
c2ssID09LCBtYXNrKTsKLQotICAgIHBvbGljeSA9IHdlYmtpdF9nZXRfc2VjdXJpdHlfcG9saWN5
X2Zvcl91cmlfc2NoZW1lKCJmaWxlIik7Ci0gICAgbWFzayA9IFdFQktJVF9TRUNVUklUWV9QT0xJ
Q1lfTE9DQUw7Ci0gICAgZ19hc3NlcnRfY21wdWludChwb2xpY3kgJiBtYXNrLCA9PSwgbWFzayk7
Ci0KLSAgICBwb2xpY3kgPSB3ZWJraXRfZ2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVt
ZSgiZGF0YSIpOwotICAgIG1hc2sgPSBXRUJLSVRfU0VDVVJJVFlfUE9MSUNZX05PX0FDQ0VTU19U
T19PVEhFUl9TQ0hFTUUgfCBXRUJLSVRfU0VDVVJJVFlfUE9MSUNZX1NFQ1VSRTsKLSAgICBnX2Fz
c2VydF9jbXB1aW50KHBvbGljeSAmIG1hc2ssID09LCBtYXNrKTsKLQotICAgIHBvbGljeSA9IHdl
YmtpdF9nZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJhYm91dCIpOwotICAgIG1h
c2sgPSBXRUJLSVRfU0VDVVJJVFlfUE9MSUNZX05PX0FDQ0VTU19UT19PVEhFUl9TQ0hFTUUgfCBX
RUJLSVRfU0VDVVJJVFlfUE9MSUNZX1NFQ1VSRSB8IFdFQktJVF9TRUNVUklUWV9QT0xJQ1lfRU1Q
VFlfRE9DVU1FTlQ7Ci0gICAgZ19hc3NlcnRfY21wdWludChwb2xpY3kgJiBtYXNrLCA9PSwgbWFz
ayk7Ci0KLSAgICAvLyBDdXN0b20gc2NoZW1lLgotICAgIHBvbGljeSA9IHdlYmtpdF9nZXRfc2Vj
dXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJmb28iKTsKLSAgICBnX2Fzc2VydCghcG9saWN5
KTsKLQotICAgIHBvbGljeSB8PSBXRUJLSVRfU0VDVVJJVFlfUE9MSUNZX0xPQ0FMOwotICAgIHdl
YmtpdF9zZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJmb28iLCBwb2xpY3kpOwot
ICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2dldF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9z
Y2hlbWUoImZvbyIpLCA9PSwgcG9saWN5KTsKLQotICAgIHBvbGljeSB8PSBXRUJLSVRfU0VDVVJJ
VFlfUE9MSUNZX05PX0FDQ0VTU19UT19PVEhFUl9TQ0hFTUU7Ci0gICAgd2Via2l0X3NldF9zZWN1
cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUoImZvbyIsIHBvbGljeSk7Ci0gICAgZ19hc3NlcnRf
Y21wdWludCh3ZWJraXRfZ2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiZm9vIiks
ID09LCBwb2xpY3kpOwotCi0gICAgcG9saWN5IHw9IFdFQktJVF9TRUNVUklUWV9QT0xJQ1lfRElT
UExBWV9JU09MQVRFRDsKLSAgICB3ZWJraXRfc2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3Nj
aGVtZSgiZm9vIiwgcG9saWN5KTsKLSAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9nZXRfc2Vj
dXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJmb28iKSwgPT0sIHBvbGljeSk7Ci0KLSAgICBw
b2xpY3kgfD0gV0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9TRUNVUkU7Ci0gICAgd2Via2l0X3NldF9z
ZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUoImZvbyIsIHBvbGljeSk7Ci0gICAgZ19hc3Nl
cnRfY21wdWludCh3ZWJraXRfZ2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiZm9v
IiksID09LCBwb2xpY3kpOwotCi0gICAgcG9saWN5IHw9IFdFQktJVF9TRUNVUklUWV9QT0xJQ1lf
Q09SU19FTkFCTEVEOwotICAgIHdlYmtpdF9zZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2No
ZW1lKCJmb28iLCBwb2xpY3kpOwotICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2dldF9zZWN1
cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUoImZvbyIpLCA9PSwgcG9saWN5KTsKLQotICAgIHBv
bGljeSB8PSBXRUJLSVRfU0VDVVJJVFlfUE9MSUNZX0VNUFRZX0RPQ1VNRU5UOwotICAgIHdlYmtp
dF9zZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJmb28iLCBwb2xpY3kpOwotICAg
IGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2dldF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hl
bWUoImZvbyIpLCA9PSwgcG9saWN5KTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBh
cmd2KQotewotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLQotICAgIGdf
dGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0gICAgZ190ZXN0X2Fk
ZF9mdW5jKCIvd2Via2l0L2dsb2JhbHMvZGVmYXVsdF9zZXNzaW9uIiwKLSAgICAgICAgICAgICAg
ICAgICAgdGVzdF9nbG9iYWxzX2RlZmF1bHRfc2Vzc2lvbik7Ci0gICAgZ190ZXN0X2FkZF9mdW5j
KCIvd2Via2l0L2dsb2JhbHMvc2VjdXJpdHktcG9saWN5IiwKLSAgICAgICAgICAgICAgICAgICAg
dGVzdF9nbG9iYWxzX3NlY3VyaXR5X3BvbGljeSk7Ci0gICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsK
LX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGhpdHRlc3RyZXN1
bHQuYyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RoaXR0ZXN0cmVzdWx0LmMKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiZjAxMTAuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdC9ndGsvdGVzdHMvdGVzdGhpdHRlc3RyZXN1bHQuYworKysgL2Rldi9udWxsCkBAIC0xLDE2
OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IElnYWxpYSBTLkwuCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNp
bmNsdWRlIDxnbGliL2dzdGRpby5oPgotI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KLQotdHlw
ZWRlZiBzdHJ1Y3QgewotICBjaGFyKiBkYXRhOwotICBndWludCBmbGFnOwotfSBUZXN0SW5mbzsK
LQotc3RhdGljIEdNYWluTG9vcCogbG9vcDsKLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIFdlYktp
dFdlYlZpZXcqIHdlYlZpZXc7Ci0gICAgVGVzdEluZm8qIGluZm87Ci19IEhpdFRlc3RSZXN1bHRG
aXh0dXJlOwotCi1UZXN0SW5mbyoKLXRlc3RfaW5mb19uZXcoY29uc3QgY2hhciogZGF0YSwgZ3Vp
bnQgZmxhZykKLXsKLSAgICBUZXN0SW5mbyogaW5mbzsKLQotICAgIGluZm8gPSBnX3NsaWNlX25l
dyhUZXN0SW5mbyk7Ci0gICAgaW5mby0+ZGF0YSA9IGdfc3RyZHVwKGRhdGEpOwotICAgIGluZm8t
PmZsYWcgPSBmbGFnOwotCi0gICAgcmV0dXJuIGluZm87Ci19Ci0KLXZvaWQKLXRlc3RfaW5mb19k
ZXN0cm95KFRlc3RJbmZvKiBpbmZvKQotewotICAgIGdfZnJlZShpbmZvLT5kYXRhKTsKLSAgICBn
X3NsaWNlX2ZyZWUoVGVzdEluZm8sIGluZm8pOwotfQotCi1zdGF0aWMgdm9pZCBoaXRfdGVzdF9y
ZXN1bHRfZml4dHVyZV9zZXR1cChIaXRUZXN0UmVzdWx0Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0
cG9pbnRlciBkYXRhKQotewotICAgIGZpeHR1cmUtPndlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVco
d2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBnX29iamVjdF9yZWZfc2luayhmaXh0dXJlLT53
ZWJWaWV3KTsKLSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotICAgIGZp
eHR1cmUtPmluZm8gPSAoVGVzdEluZm8qKWRhdGE7Ci19Ci0KLXN0YXRpYyB2b2lkIGhpdF90ZXN0
X3Jlc3VsdF9maXh0dXJlX3RlYXJkb3duKEhpdFRlc3RSZXN1bHRGaXh0dXJlKiBmaXh0dXJlLCBn
Y29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+d2ViVmll
dyk7Ci0gICAgZ19tYWluX2xvb3BfdW5yZWYobG9vcCk7Ci0gICAgdGVzdF9pbmZvX2Rlc3Ryb3ko
Zml4dHVyZS0+aW5mbyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1sb2FkX3N0YXR1c19jYihXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3LAotICAgICAgICAgICAgICAgR1BhcmFtU3BlYyogc3BlYywKLSAgICAg
ICAgICAgICAgIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMg
PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYlZpZXcpOwotICAgIFRlc3RJbmZv
KiBpbmZvID0gKFRlc3RJbmZvKilkYXRhOwotCi0gICAgaWYgKHN0YXR1cyA9PSBXRUJLSVRfTE9B
RF9GSU5JU0hFRCkgewotICAgICAgICBXZWJLaXRIaXRUZXN0UmVzdWx0KiByZXN1bHQ7Ci0gICAg
ICAgIGd1aW50IGNvbnRleHQ7Ci0gICAgICAgIEdka0V2ZW50KiBldmVudCA9IGdka19ldmVudF9u
ZXcoR0RLX0JVVFRPTl9QUkVTUyk7Ci0gICAgICAgIFdlYktpdERPTU5vZGUqIG5vZGU7Ci0gICAg
ICAgIGdpbnQgeCwgeTsKLQotICAgICAgICAvKiBDbG9zZSBlbm91Z2ggdG8gMCwwICovCi0gICAg
ICAgIGV2ZW50LT5idXR0b24ueCA9IDU7Ci0gICAgICAgIGV2ZW50LT5idXR0b24ueSA9IDU7Ci0K
LSAgICAgICAgcmVzdWx0ID0gd2Via2l0X3dlYl92aWV3X2dldF9oaXRfdGVzdF9yZXN1bHQod2Vi
VmlldywgKEdka0V2ZW50QnV0dG9uKikgZXZlbnQpOwotICAgICAgICBnZGtfZXZlbnRfZnJlZShl
dmVudCk7Ci0gICAgICAgIGdfYXNzZXJ0KHJlc3VsdCk7Ci0KLSAgICAgICAgZ19vYmplY3RfZ2V0
KHJlc3VsdCwgImNvbnRleHQiLCAmY29udGV4dCwgTlVMTCk7Ci0gICAgICAgIGdfYXNzZXJ0KGNv
bnRleHQgJiBpbmZvLT5mbGFnKTsKLQotICAgICAgICBnX29iamVjdF9nZXQocmVzdWx0LCAiaW5u
ZXItbm9kZSIsICZub2RlLCBOVUxMKTsKLSAgICAgICAgZ19hc3NlcnQobm9kZSk7Ci0gICAgICAg
IGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfTk9ERShub2RlKSk7Ci0KLSAgICAgICAgZ19vYmplY3Rf
Z2V0KHJlc3VsdCwgIngiLCAmeCwgInkiLCAmeSwgTlVMTCk7Ci0gICAgICAgIGdfYXNzZXJ0X2Nt
cGludCh4LCA9PSwgNSk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcGludCh5LCA9PSwgNSk7Ci0KLSAg
ICAgICAgLyogV2UgY2FuIG9ubHkgdGVzdCB0aGVzZSBub2RlIHR5cGVzIGF0IHRoZSBtb21lbnQu
IEluIHRoZQotICAgICAgICAgKiBpbnB1dCBjYXNlIHRoZXJlIHNlZW1zIHRvIGJlIGFuIGV4dHJh
IGxheWVyIHdpdGggYSBESVYgb24KLSAgICAgICAgICogdG9wIG9mIHRoZSBpbnB1dCwgd2hpY2gg
Z2V0cyBhc3NpZ25lZCB0byB0aGUgaW5uZXItbm9kZS4KLSAgICAgICAgICogdGFnICovCi0gICAg
ICAgIGlmIChpbmZvLT5mbGFnID09IFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9ET0NV
TUVOVCkKLSAgICAgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9IVE1MX0VMRU1F
TlQobm9kZSkpOwotICAgICAgICBlbHNlIGlmIChpbmZvLT5mbGFnID09IFdFQktJVF9ISVRfVEVT
VF9SRVNVTFRfQ09OVEVYVF9JTUFHRSkKLSAgICAgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01f
SVNfSFRNTF9JTUFHRV9FTEVNRU5UKG5vZGUpKTsKLSAgICAgICAgZWxzZSBpZiAoaW5mby0+Zmxh
ZyA9PSBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfTElOSykgewotICAgICAgICAgICAg
LyogVGhlIGhpdCB0ZXN0IHdpbGwgZ2l2ZSB1cyB0aGUgaW5uZXIgdGV4dCBub2RlLCB3ZSB3YW50
Ci0gICAgICAgICAgICAgKiB0aGUgQSB0YWcgKi8KLSAgICAgICAgICAgIFdlYktpdERPTU5vZGUq
IHBhcmVudCA9IHdlYmtpdF9kb21fbm9kZV9nZXRfcGFyZW50X25vZGUobm9kZSk7Ci0gICAgICAg
ICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfQU5DSE9SX0VMRU1FTlQocGFyZW50KSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBnX29iamVjdF91bnJlZihyZXN1bHQpOwotICAgICAgICBn
X21haW5fbG9vcF9xdWl0KGxvb3ApOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQKLXRlc3Rfd2Vi
a2l0X2hpdF90ZXN0X3Jlc3VsdChIaXRUZXN0UmVzdWx0Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0
cG9pbnRlciBkYXRhKQotewotICAgIFRlc3RJbmZvKiBpbmZvID0gKFRlc3RJbmZvKilkYXRhOwot
ICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgNTAsIDUwIH07Ci0KLSAgICB3
ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoZml4dHVyZS0+d2ViVmlldywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW5mby0+ZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgInRleHQvaHRtbCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1
dGYtOCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlOi8vIik7Ci0gICAg
Z3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldyksICZh
bGxvY2F0aW9uKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJub3Rp
Znk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhsb2FkX3N0YXR1c19jYiksIGluZm8pOwotICAg
IGdfbWFpbl9sb29wX3J1bihsb29wKTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBh
cmd2KQotewotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLQotICAgIGdf
dGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0KLSAgICBnX3Rlc3Rf
YWRkKCIvd2Via2l0L2hpdHRlc3RyZXN1bHQvZG9jdW1lbnQiLCBIaXRUZXN0UmVzdWx0Rml4dHVy
ZSwgCi0gICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KCI8aHRtbD48Ym9keT48aDE+V2ViS2l0
R1RLKyE8L2gxPjwvYm9keT48L2h0bWw+IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
V0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0RPQ1VNRU5UKSwKLSAgICAgICAgICAgICAg
IGhpdF90ZXN0X3Jlc3VsdF9maXh0dXJlX3NldHVwLCB0ZXN0X3dlYmtpdF9oaXRfdGVzdF9yZXN1
bHQsIGhpdF90ZXN0X3Jlc3VsdF9maXh0dXJlX3RlYXJkb3duKTsKLSAgICAvKiBXZSBoYXJkY29k
ZSBhbGwgZWxlbWVudHMgdG8gYmUgYXQgMCwwIHNvIHRoYXQgd2Uga25vdyB3aGVyZSB0bwotICAg
ICAqIGdlbmVyYXRlIHRoZSBidXR0b24gZXZlbnRzICovCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtp
dC9oaXR0ZXN0cmVzdWx0L2ltYWdlIiwgSGl0VGVzdFJlc3VsdEZpeHR1cmUsCi0gICAgICAgICAg
ICAgICB0ZXN0X2luZm9fbmV3KCI8aHRtbD48Ym9keT48aW1nIHN0eWxlPSdwb3NpdGlvbjphYnNv
bHV0ZTsgbGVmdDowOyB0b3A6MCdzcmM9JzB4ZGVhZGJlZWYnIHdpZHRoPTUwIGhlaWdodD01MD48
L2ltZz48L2JvZHk+PC9odG1sPiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJ
VF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9JTUFHRSksCi0gICAgICAgICAgICAgICBoaXRfdGVz
dF9yZXN1bHRfZml4dHVyZV9zZXR1cCwgdGVzdF93ZWJraXRfaGl0X3Rlc3RfcmVzdWx0LCBoaXRf
dGVzdF9yZXN1bHRfZml4dHVyZV90ZWFyZG93bik7Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9o
aXR0ZXN0cmVzdWx0L2VkaXRhYmxlIiwgSGl0VGVzdFJlc3VsdEZpeHR1cmUsCi0gICAgICAgICAg
ICAgICB0ZXN0X2luZm9fbmV3KCI8aHRtbD48Ym9keT48aW5wdXQgc3R5bGU9J3Bvc2l0aW9uOmFi
c29sdXRlOyBsZWZ0OjA7IHRvcDowJyBzaXplPSczNSc+PC9pbnB1dD4+PC9ib2R5PjwvaHRtbD4i
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NP
TlRFWFRfRURJVEFCTEUpLAotICAgICAgICAgICAgICAgaGl0X3Rlc3RfcmVzdWx0X2ZpeHR1cmVf
c2V0dXAsIHRlc3Rfd2Via2l0X2hpdF90ZXN0X3Jlc3VsdCwgaGl0X3Rlc3RfcmVzdWx0X2ZpeHR1
cmVfdGVhcmRvd24pOwotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvaGl0dGVzdHJlc3VsdC9saW5r
IiwgSGl0VGVzdFJlc3VsdEZpeHR1cmUsCi0gICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KCI8
aHRtbD48Ym9keT48YSBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MDsgdG9wOjAnIGhy
ZWY9J2h0dHA6Ly93d3cuZXhhbXBsZS5jb20nPkhFTExPIFdPUkxEPC9hPjwvYm9keT48L2h0bWw+
IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9D
T05URVhUX0xJTkspLAotICAgICAgICAgICAgICAgaGl0X3Rlc3RfcmVzdWx0X2ZpeHR1cmVfc2V0
dXAsIHRlc3Rfd2Via2l0X2hpdF90ZXN0X3Jlc3VsdCwgaGl0X3Rlc3RfcmVzdWx0X2ZpeHR1cmVf
dGVhcmRvd24pOwotICAgICAgICAgICAgICAgCi0gICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7Ci19
Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RodHRwYmFja2VuZC5j
IGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGh0dHBiYWNrZW5kLmMKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDkzNzc2ODcuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9n
dGsvdGVzdHMvdGVzdGh0dHBiYWNrZW5kLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEd1c3Rhdm8gTm9yb25oYSBTaWx2YQotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNp
bmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRlIDxndGsv
Z3RrLmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgotCi0vLyBOb3QgeWV0IHB1YmxpYyBB
UEkKLVNvdXBNZXNzYWdlKiB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X2dldF9tZXNzYWdlKFdlYktp
dE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0KTsKLQotc3RhdGljIGdib29sZWFuIG5hdmlnYXRpb25f
cG9saWN5X2RlY2lzaW9uX3JlcXVlc3RlZF9jYihXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2Vi
S2l0V2ViRnJhbWUqIHdlYl9mcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdl
YktpdFdlYk5hdmlnYXRpb25BY3Rpb24qIGFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0V2ViUG9saWN5RGVjaXNpb24q
IGRlY2lzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBncG9pbnRlciBkYXRhKQotewotICAgIFNvdXBNZXNzYWdlKiBtZXNzYWdlID0g
d2Via2l0X25ldHdvcmtfcmVxdWVzdF9nZXRfbWVzc2FnZShyZXF1ZXN0KTsKLQotICAgIC8qIDEg
LT4gd2Via2l0X25ldHdvcmtfcmVxdWVzdF93aXRoX2NvcmVfcmVxdWVzdAotICAgICAqCi0gICAg
ICogVGhlIFNvdXBNZXNzYWdlIGlzIGNyZWF0ZWQgZXhjbHVzaXZlbHkgZm9yIHRoZSBlbWlzc2lv
biBvZiB0aGlzCi0gICAgICogc2lnbmFsLgotICAgICAqLwotICAgIGdfYXNzZXJ0X2NtcGludChH
X09CSkVDVChtZXNzYWdlKS0+cmVmX2NvdW50LCA9PSwgMSk7Ci0KLSAgICByZXR1cm4gRkFMU0U7
Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfc291cF9tZXNzYWdlX2xpZmV0aW1lKCkKLXsKLSAgICBX
ZWJLaXRXZWJWaWV3KiB3ZWJfdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdf
bmV3KCkpOwotCi0gICAgZ19vYmplY3RfcmVmX3Npbmsod2ViX3ZpZXcpOwotCi0gICAgZ19zaWdu
YWxfY29ubmVjdCh3ZWJfdmlldywgIm5hdmlnYXRpb24tcG9saWN5LWRlY2lzaW9uLXJlcXVlc3Rl
ZCIsCi0gICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKG5hdmlnYXRpb25fcG9saWN5X2Rl
Y2lzaW9uX3JlcXVlc3RlZF9jYiksCi0gICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLQotICAg
IC8qIGxvYWRfdXJpIHdpbGwgdHJpZ2dlciB0aGUgbmF2aWdhdGlvbi1wb2xpY3ktZGVjaXNpb24t
cmVxdWVzdGVkCi0gICAgICogc2lnbmFsIGVtaXNzaW9uOwotICAgICAqLwotICAgIHdlYmtpdF93
ZWJfdmlld19sb2FkX3VyaSh3ZWJfdmlldywgImh0dHA6Ly8xMjcuMC4wLjEvIik7Ci0KLSAgICBn
X29iamVjdF91bnJlZih3ZWJfdmlldyk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiog
YXJndikKLXsKLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAgICBn
X3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwotICAgIGdfdGVzdF9h
ZGRfZnVuYygiL3dlYmtpdC9zb3VwbWVzc2FnZS9saWZldGltZSIsIHRlc3Rfc291cF9tZXNzYWdl
X2xpZmV0aW1lKTsKLSAgICByZXR1cm4gZ190ZXN0X3J1biAoKTsKLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RrZXlldmVudHMuYyBiL1NvdXJjZS9XZWJLaXQvZ3Rr
L3Rlc3RzL3Rlc3RrZXlldmVudHMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWNk
MDFmMy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0a2V5ZXZlbnRz
LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzOTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOSwgMjAxMCBNYXJ0aW4gUm9iaW5zb24gPG1yb2JpbnNvbkB3ZWJraXQub3JnPgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0j
aW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRlIDx3
ZWJraXQvd2Via2l0Lmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4K
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NvbnRleHRSZWYuaD4KLQotdHlwZWRlZiBzdHJ1
Y3QgewotICAgIGNoYXIqIHBhZ2U7Ci0gICAgY2hhciogdGV4dDsKLSAgICBnYm9vbGVhbiBzaG91
bGRCZUhhbmRsZWQ7Ci19IFRlc3RJbmZvOwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgR3RrV2lk
Z2V0KiB3aW5kb3c7Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldzsKLSAgICBHTWFpbkxvb3Aq
IGxvb3A7Ci0gICAgVGVzdEluZm8qIGluZm87Ci19IEtleUV2ZW50Rml4dHVyZTsKLQotVGVzdElu
Zm8qCi10ZXN0X2luZm9fbmV3KGNvbnN0IGNoYXIqIHBhZ2UsIGdib29sZWFuIHNob3VsZEJlSGFu
ZGxlZCkKLXsKLSAgICBUZXN0SW5mbyogaW5mbzsKLQotICAgIGluZm8gPSBnX3NsaWNlX25ldyhU
ZXN0SW5mbyk7Ci0gICAgaW5mby0+cGFnZSA9IGdfc3RyZHVwKHBhZ2UpOwotICAgIGluZm8tPnNo
b3VsZEJlSGFuZGxlZCA9IHNob3VsZEJlSGFuZGxlZDsKLSAgICBpbmZvLT50ZXh0ID0gMDsKLQot
ICAgIHJldHVybiBpbmZvOwotfQotCi12b2lkCi10ZXN0X2luZm9fZGVzdHJveShUZXN0SW5mbyog
aW5mbykKLXsKLSAgICBnX2ZyZWUoaW5mby0+cGFnZSk7Ci0gICAgZ19mcmVlKGluZm8tPnRleHQp
OwotICAgIGdfc2xpY2VfZnJlZShUZXN0SW5mbywgaW5mbyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGtl
eV9ldmVudF9maXh0dXJlX3NldHVwKEtleUV2ZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9p
bnRlciBkYXRhKQotewotICAgIGZpeHR1cmUtPmxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwg
VFJVRSk7Ci0KLSAgICBmaXh0dXJlLT53aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9X
X1RPUExFVkVMKTsKLSAgICBmaXh0dXJlLT53ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtp
dF93ZWJfdmlld19uZXcoKSk7Ci0KLSAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVS
KGZpeHR1cmUtPndpbmRvdyksIEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldykpOwotfQotCi1z
dGF0aWMgdm9pZCBrZXlfZXZlbnRfZml4dHVyZV90ZWFyZG93bihLZXlFdmVudEZpeHR1cmUqIGZp
eHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koZml4
dHVyZS0+d2luZG93KTsKLSAgICBnX21haW5fbG9vcF91bnJlZihmaXh0dXJlLT5sb29wKTsKLSAg
ICB0ZXN0X2luZm9fZGVzdHJveShmaXh0dXJlLT5pbmZvKTsKLX0KLQotc3RhdGljIGdib29sZWFu
IGtleV9wcmVzc19ldmVudF9jYihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHZGtFdmVudCogZXZl
bnQsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJlID0gKEtl
eUV2ZW50Rml4dHVyZSopZGF0YTsKLSAgICBnYm9vbGVhbiBoYW5kbGVkID0gR1RLX1dJREdFVF9H
RVRfQ0xBU1MoZml4dHVyZS0+d2ViVmlldyktPmtleV9wcmVzc19ldmVudChHVEtfV0lER0VUKGZp
eHR1cmUtPndlYlZpZXcpLCAmZXZlbnQtPmtleSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGhhbmRs
ZWQsID09LCBmaXh0dXJlLT5pbmZvLT5zaG91bGRCZUhhbmRsZWQpOwotCi0gICAgcmV0dXJuIEZB
TFNFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4ga2V5X3JlbGVhc2VfZXZlbnRfY2IoV2ViS2l0V2Vi
Vmlldyogd2ViVmlldywgR2RrRXZlbnQqIGV2ZW50LCBncG9pbnRlciBkYXRhKQotewotICAgIC8v
IFdlYkNvcmUgbmV2ZXIgc2VlbXMgdG8gbWFyayBrZXl1cCBldmVudHMgYXMgaGFuZGxlZC4KLSAg
ICBLZXlFdmVudEZpeHR1cmUqIGZpeHR1cmUgPSAoS2V5RXZlbnRGaXh0dXJlKilkYXRhOwotICAg
IGdib29sZWFuIGhhbmRsZWQgPSBHVEtfV0lER0VUX0dFVF9DTEFTUyhmaXh0dXJlLT53ZWJWaWV3
KS0+a2V5X3ByZXNzX2V2ZW50KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldyksICZldmVudC0+
a2V5KTsKLSAgICBnX2Fzc2VydCghaGFuZGxlZCk7Ci0KLSAgICBnX21haW5fbG9vcF9xdWl0KGZp
eHR1cmUtPmxvb3ApOwotCi0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0
X2tleXByZXNzX2V2ZW50c19sb2FkX3N0YXR1c19jYihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBH
UGFyYW1TcGVjKiBzcGVjLCBncG9pbnRlciBkYXRhKQotewotICAgIEtleUV2ZW50Rml4dHVyZSog
Zml4dHVyZSA9IChLZXlFdmVudEZpeHR1cmUqKWRhdGE7Ci0gICAgV2ViS2l0TG9hZFN0YXR1cyBz
dGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYlZpZXcpOwotICAgIGlm
IChzdGF0dXMgPT0gV0VCS0lUX0xPQURfRklOSVNIRUQpIHsKLSAgICAgICAgZ19zaWduYWxfY29u
bmVjdChmaXh0dXJlLT53ZWJWaWV3LCAia2V5LXByZXNzLWV2ZW50IiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICBHX0NBTExCQUNLKGtleV9wcmVzc19ldmVudF9jYiksIGZpeHR1cmUpOwotICAg
ICAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJrZXktcmVsZWFzZS1ldmVu
dCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhrZXlfcmVsZWFzZV9ldmVu
dF9jYiksIGZpeHR1cmUpOwotICAgICAgICBpZiAoIWd0a190ZXN0X3dpZGdldF9zZW5kX2tleShH
VEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnZGtfdW5pY29kZV90b19rZXl2YWwoJ2EnKSwgMCkpCi0gICAgICAgICAgICBn
X2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAgIH0KLQotfQotCi1nYm9vbGVhbiBtYXBfZXZlbnRf
Y2IoR3RrV2lkZ2V0ICp3aWRnZXQsIEdka0V2ZW50KiBldmVudCwgZ3BvaW50ZXIgZGF0YSkKLXsK
LSAgICBLZXlFdmVudEZpeHR1cmUqIGZpeHR1cmUgPSAoS2V5RXZlbnRGaXh0dXJlKilkYXRhOwot
ICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhmaXh0dXJlLT53ZWJWaWV3LCBmaXh0dXJl
LT5pbmZvLT5wYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGV4dC9odG1s
IiwgInV0Zi04IiwgImZpbGU6Ly8iKTsKLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2
b2lkIHNldHVwX2tleWV2ZW50X3Rlc3QoS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rw
b2ludGVyIGRhdGEsIEdDYWxsYmFjayBsb2FkX2V2ZW50X2NhbGxiYWNrKQotewotICAgIGZpeHR1
cmUtPmluZm8gPSAoVGVzdEluZm8qKWRhdGE7Ci0gICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJl
LT53aW5kb3csICJtYXAtZXZlbnQiLAotICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyht
YXBfZXZlbnRfY2IpLCBmaXh0dXJlKTsKLQotICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1cyhHVEtf
V0lER0VUKGZpeHR1cmUtPndlYlZpZXcpKTsKLSAgICBndGtfd2lkZ2V0X3Nob3coZml4dHVyZS0+
d2luZG93KTsKLSAgICBndGtfd2lkZ2V0X3Nob3coR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3
KSk7Ci0gICAgZ3RrX3dpbmRvd19wcmVzZW50KEdUS19XSU5ET1coZml4dHVyZS0+d2luZG93KSk7
Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJub3RpZnk6OmxvYWQt
c3RhdHVzIiwKLSAgICAgICAgICAgICAgICAgICAgIGxvYWRfZXZlbnRfY2FsbGJhY2ssIGZpeHR1
cmUpOwotCi0gICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1cmUtPmxvb3ApOwotfQotCi1zdGF0aWMg
dm9pZCB0ZXN0X2tleXByZXNzX2V2ZW50cyhLZXlFdmVudEZpeHR1cmUqIGZpeHR1cmUsIGdjb25z
dHBvaW50ZXIgZGF0YSkKLXsKLSAgICBzZXR1cF9rZXlldmVudF90ZXN0KGZpeHR1cmUsIGRhdGEs
IEdfQ0FMTEJBQ0sodGVzdF9rZXlwcmVzc19ldmVudHNfbG9hZF9zdGF0dXNfY2IpKTsKLX0KLQot
c3RhdGljIGdib29sZWFuIGVsZW1lbnRfdGV4dF9lcXVhbF90byhKU0NvbnRleHRSZWYgY29udGV4
dCwgY29uc3QgZ2NoYXIqIHRleHQpCi17Ci0gICAgSlNTdHJpbmdSZWYgc2NyaXB0U3RyaW5nID0g
SlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoCi0gICAgICAid2luZG93LmRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKFwiaW5cIikudmFsdWU7Iik7Ci0gICAgSlNWYWx1ZVJlZiB2YWx1ZSA9IEpT
RXZhbHVhdGVTY3JpcHQoY29udGV4dCwgc2NyaXB0U3RyaW5nLCAwLCAwLCAwLCAwKTsKLSAgICBK
U1N0cmluZ1JlbGVhc2Uoc2NyaXB0U3RyaW5nKTsKLQotICAgIC8vIElmIHRoZSB2YWx1ZSBpc24n
dCBhIHN0cmluZywgdGhlIGVsZW1lbnQgaXMgcHJvYmFibHkgYSBkaXYKLSAgICAvLyBzbyBncmFi
IHRoZSBpbm5lclRleHQgaW5zdGVhZC4KLSAgICBpZiAoIUpTVmFsdWVJc1N0cmluZyhjb250ZXh0
LCB2YWx1ZSkpIHsKLSAgICAgICAgSlNTdHJpbmdSZWYgc2NyaXB0U3RyaW5nID0gSlNTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoCi0gICAgICAgICAgIndpbmRvdy5kb2N1bWVudC5nZXRFbGVt
ZW50QnlJZChcImluXCIpLmlubmVyVGV4dDsiKTsKLSAgICAgICAgdmFsdWUgPSBKU0V2YWx1YXRl
U2NyaXB0KGNvbnRleHQsIHNjcmlwdFN0cmluZywgMCwgMCwgMCwgMCk7Ci0gICAgICAgIEpTU3Ry
aW5nUmVsZWFzZShzY3JpcHRTdHJpbmcpOwotICAgIH0KLQotICAgIGdfYXNzZXJ0KEpTVmFsdWVJ
c1N0cmluZyhjb250ZXh0LCB2YWx1ZSkpOwotICAgIEpTU3RyaW5nUmVmIGlucHV0U3RyaW5nID0g
SlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCB2YWx1ZSwgMCk7Ci0gICAgZ19hc3NlcnQoaW5w
dXRTdHJpbmcpOwotCi0gICAgZ2ludCBzaXplID0gSlNTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJp
bmdTaXplKGlucHV0U3RyaW5nKTsKLSAgICBnY2hhciogY1N0cmluZyA9IGdfbWFsbG9jKHNpemUp
OwotICAgIEpTU3RyaW5nR2V0VVRGOENTdHJpbmcoaW5wdXRTdHJpbmcsIGNTdHJpbmcsIHNpemUp
OwotICAgIEpTU3RyaW5nUmVsZWFzZShpbnB1dFN0cmluZyk7Ci0KLSAgICBnYm9vbGVhbiByZXN1
bHQgPSBnX3V0ZjhfY29sbGF0ZShjU3RyaW5nLCB0ZXh0KSA9PSAwOwotICAgIGdfZnJlZShjU3Ry
aW5nKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X2ltZV9sb2Fk
X3N0YXR1c19jYihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHUGFyYW1TcGVjKiBzcGVjLCBncG9p
bnRlciBkYXRhKQotewotICAgIEtleUV2ZW50Rml4dHVyZSogZml4dHVyZSA9IChLZXlFdmVudEZp
eHR1cmUqKWRhdGE7Ci0gICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYlZpZXcpOwotICAgIGlmIChzdGF0dXMgIT0gV0VCS0lUX0xP
QURfRklOSVNIRUQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEpTR2xvYmFsQ29udGV4dFJlZiBj
b250ZXh0ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfZ2xvYmFsX2NvbnRleHQoCi0gICAgICAgIHdl
YmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh3ZWJWaWV3KSk7Ci0gICAgZ19hc3NlcnQoY29u
dGV4dCk7Ci0KLSAgICBHdGtJTUNvbnRleHQqIGltQ29udGV4dCA9IDA7Ci0gICAgZ19vYmplY3Rf
Z2V0KHdlYlZpZXcsICJpbS1jb250ZXh0IiwgJmltQ29udGV4dCwgTlVMTCk7Ci0gICAgZ19hc3Nl
cnQoaW1Db250ZXh0KTsKLQotICAgIC8vIFRlc3QgdGhhdCBjb21taXRzIHRoYXQgaGFwcGVuIG91
dHNpZGUgb2Yga2V5IGV2ZW50cwotICAgIC8vIGNoYW5nZSB0aGUgdGV4dCBmaWVsZCBpbW1lZGlh
dGVseS4gVGhpcyBjbG9zZWx5IHJlcGxpY2F0ZXMKLSAgICAvLyB0aGUgYmVoYXZpb3Igb2YgU0NJ
TS4KLSAgICBnX2Fzc2VydChlbGVtZW50X3RleHRfZXF1YWxfdG8oY29udGV4dCwgIiIpKTsKLSAg
ICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoaW1Db250ZXh0LCAiY29tbWl0IiwgImEiKTsKLSAgICBn
X2Fzc2VydChlbGVtZW50X3RleHRfZXF1YWxfdG8oY29udGV4dCwgImEiKSk7Ci0gICAgZ19zaWdu
YWxfZW1pdF9ieV9uYW1lKGltQ29udGV4dCwgImNvbW1pdCIsICJiIik7Ci0gICAgZ19hc3NlcnQo
ZWxlbWVudF90ZXh0X2VxdWFsX3RvKGNvbnRleHQsICJhYiIpKTsKLSAgICBnX3NpZ25hbF9lbWl0
X2J5X25hbWUoaW1Db250ZXh0LCAiY29tbWl0IiwgImMiKTsKLSAgICBnX2Fzc2VydChlbGVtZW50
X3RleHRfZXF1YWxfdG8oY29udGV4dCwgImFiYyIpKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGlt
Q29udGV4dCk7Ci0gICAgZ19tYWluX2xvb3BfcXVpdChmaXh0dXJlLT5sb29wKTsKLX0KLQotc3Rh
dGljIHZvaWQgdGVzdF9pbWUoS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVy
IGRhdGEpCi17Ci0gICAgc2V0dXBfa2V5ZXZlbnRfdGVzdChmaXh0dXJlLCBkYXRhLCBHX0NBTExC
QUNLKHRlc3RfaW1lX2xvYWRfc3RhdHVzX2NiKSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiB2ZXJp
ZnlfY29udGVudHMoZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBLZXlFdmVudEZpeHR1cmUqIGZpeHR1
cmUgPSAoS2V5RXZlbnRGaXh0dXJlKilkYXRhOwotICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250
ZXh0ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfZ2xvYmFsX2NvbnRleHQoCi0gICAgICAgIHdlYmtp
dF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZShmaXh0dXJlLT53ZWJWaWV3KSk7Ci0gICAgZ19hc3Nl
cnQoY29udGV4dCk7Ci0KLSAgICBnX2Fzc2VydChlbGVtZW50X3RleHRfZXF1YWxfdG8oY29udGV4
dCwgZml4dHVyZS0+aW5mby0+dGV4dCkpOwotICAgIGdfbWFpbl9sb29wX3F1aXQoZml4dHVyZS0+
bG9vcCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X2Jsb2NraW5n
X2xvYWRfc3RhdHVzX2NiKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEdQYXJhbVNwZWMqIHNwZWMs
IGdwb2ludGVyIGRhdGEpCi17Ci0gICAgS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJlID0gKEtleUV2
ZW50Rml4dHVyZSopZGF0YTsKLSAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93
ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMod2ViVmlldyk7Ci0gICAgaWYgKHN0YXR1cyAhPSBXRUJL
SVRfTE9BRF9GSU5JU0hFRCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVGhlIGZpcnN0IGtl
eXByZXNzIGV2ZW50IHNob3VsZCBub3QgbW9kaWZ5IHRoZSBmaWVsZC4KLSAgICBmaXh0dXJlLT5p
bmZvLT50ZXh0ID0gZ19zdHJkdXAoImJjIik7Ci0gICAgaWYgKCFndGtfdGVzdF93aWRnZXRfc2Vu
ZF9rZXkoR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdka191bmljb2RlX3RvX2tleXZhbCgnYScpLCAwKSkKLSAgICAgICAgZ19h
c3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICBpZiAoIWd0a190ZXN0X3dpZGdldF9zZW5kX2tleShH
VEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdka191bmljb2RlX3RvX2tleXZhbCgnYicpLCAwKSkKLSAgICAgICAgZ19hc3NlcnRf
bm90X3JlYWNoZWQoKTsKLSAgICBpZiAoIWd0a190ZXN0X3dpZGdldF9zZW5kX2tleShHVEtfV0lE
R0VUKGZpeHR1cmUtPndlYlZpZXcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdka191bmljb2RlX3RvX2tleXZhbCgnYycpLCAwKSkKLSAgICAgICAgZ19hc3NlcnRfbm90X3Jl
YWNoZWQoKTsKLQotICAgIGdfaWRsZV9hZGQodmVyaWZ5X2NvbnRlbnRzLCBmaXh0dXJlKTsKLX0K
LQotc3RhdGljIHZvaWQgdGVzdF9ibG9ja2luZyhLZXlFdmVudEZpeHR1cmUqIGZpeHR1cmUsIGdj
b25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBzZXR1cF9rZXlldmVudF90ZXN0KGZpeHR1cmUsIGRh
dGEsIEdfQ0FMTEJBQ0sodGVzdF9ibG9ja2luZ19sb2FkX3N0YXR1c19jYikpOwotfQotCi0jaWYg
ZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkKLXN0YXRpYyB2b2lkIHRlc3RfeGltX2xvYWRfc3Rh
dHVzX2NiKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEdQYXJhbVNwZWMqIHNwZWMsIGdwb2ludGVy
IGRhdGEpCi17Ci0gICAgS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJlID0gKEtleUV2ZW50Rml4dHVy
ZSopZGF0YTsKLSAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJfdmlld19n
ZXRfbG9hZF9zdGF0dXMod2ViVmlldyk7Ci0gICAgaWYgKHN0YXR1cyAhPSBXRUJLSVRfTE9BRF9G
SU5JU0hFRCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3RrSU1Db250ZXh0KiBpbUNvbnRleHQg
PSAwOwotICAgIGdfb2JqZWN0X2dldCh3ZWJWaWV3LCAiaW0tY29udGV4dCIsICZpbUNvbnRleHQs
IE5VTEwpOwotICAgIGdfYXNzZXJ0KGltQ29udGV4dCk7Ci0KLSAgICBnY2hhciogb3JpZ2luYWxJ
ZCA9IGdfc3RyZHVwKGd0a19pbV9tdWx0aWNvbnRleHRfZ2V0X2NvbnRleHRfaWQoR1RLX0lNX01V
TFRJQ09OVEVYVChpbUNvbnRleHQpKSk7Ci0gICAgZ3RrX2ltX211bHRpY29udGV4dF9zZXRfY29u
dGV4dF9pZChHVEtfSU1fTVVMVElDT05URVhUKGltQ29udGV4dCksICJ4aW0iKTsKLQotICAgIC8v
IFRlc3QgdGhhdCBjb21taXRzIHRoYXQgaGFwcGVuIG91dHNpZGUgb2Yga2V5IGV2ZW50cwotICAg
IC8vIGNoYW5nZSB0aGUgdGV4dCBmaWVsZCBpbW1lZGlhdGVseS4gVGhpcyBjbG9zZWx5IHJlcGxp
Y2F0ZXMKLSAgICAvLyB0aGUgYmVoYXZpb3Igb2YgU0NJTS4KLSAgICBmaXh0dXJlLT5pbmZvLT50
ZXh0ID0gZ19zdHJkdXAoImRlYmlhbiIpOwotICAgIGlmICghZ3RrX3Rlc3Rfd2lkZ2V0X3NlbmRf
a2V5KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldyksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnZGtfdW5pY29kZV90b19rZXl2YWwoJ2QnKSwgMCkpCi0gICAgICAgIGdfYXNz
ZXJ0X25vdF9yZWFjaGVkKCk7Ci0gICAgaWYgKCFndGtfdGVzdF93aWRnZXRfc2VuZF9rZXkoR1RL
X1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2RrX3VuaWNvZGVfdG9fa2V5dmFsKCdlJyksIDApKQotICAgICAgICBnX2Fzc2VydF9ub3RfcmVh
Y2hlZCgpOwotICAgIGlmICghZ3RrX3Rlc3Rfd2lkZ2V0X3NlbmRfa2V5KEdUS19XSURHRVQoZml4
dHVyZS0+d2ViVmlldyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdka191bmljb2Rl
X3RvX2tleXZhbCgnYicpLCAwKSkKLSAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKLSAg
ICBpZiAoIWd0a190ZXN0X3dpZGdldF9zZW5kX2tleShHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZp
ZXcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGtfdW5pY29kZV90b19rZXl2YWwo
J2knKSwgMCkpCi0gICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0gICAgaWYgKCFndGtf
dGVzdF93aWRnZXRfc2VuZF9rZXkoR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ2RrX3VuaWNvZGVfdG9fa2V5dmFsKCdhJyksIDApKQot
ICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAgIGlmICghZ3RrX3Rlc3Rfd2lkZ2V0
X3NlbmRfa2V5KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldyksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdka191bmljb2RlX3RvX2tleXZhbCgnbicpLCAwKSkKLSAgICAgICAgZ19h
c3NlcnRfbm90X3JlYWNoZWQoKTsKLQotICAgIGd0a19pbV9tdWx0aWNvbnRleHRfc2V0X2NvbnRl
eHRfaWQoR1RLX0lNX01VTFRJQ09OVEVYVChpbUNvbnRleHQpLCBvcmlnaW5hbElkKTsKLSAgICBn
X2ZyZWUob3JpZ2luYWxJZCk7Ci0gICAgZ19vYmplY3RfdW5yZWYoaW1Db250ZXh0KTsKLQotICAg
IGdfaWRsZV9hZGQodmVyaWZ5X2NvbnRlbnRzLCBmaXh0dXJlKTsKLX0KLQotc3RhdGljIHZvaWQg
dGVzdF94aW0oS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17
Ci0gICAgc2V0dXBfa2V5ZXZlbnRfdGVzdChmaXh0dXJlLCBkYXRhLCBHX0NBTExCQUNLKHRlc3Rf
eGltX2xvYWRfc3RhdHVzX2NiKSk7Ci19Ci0jZW5kaWYKLQotaW50IG1haW4oaW50IGFyZ2MsIGNo
YXIqKiBhcmd2KQotewotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLQot
ICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0KLQotICAg
IC8vIFdlJ2xsIHRlc3QgaW5wdXQgb24gYSBzbGV3IG9mIGRpZmZlcmVudCBub2RlIHR5cGVzLiBL
ZXkgZXZlbnRzIHRvCi0gICAgLy8gdGV4dCBpbnB1dHMgYW5kIGVkaXRhYmxlIGRpdnMgc2hvdWxk
IGJlIG1hcmtlZCBhcyBoYW5kbGVkLiBLZXkgZXZlbnRzCi0gICAgLy8gdG8gYnV0dG9ucyBhbmQg
bGlua3Mgc2hvdWxkIG5vdC4KLSAgICBjb25zdCBjaGFyKiB0ZXh0aW5wdXRfaHRtbCA9ICI8aHRt
bD48Ym9keT48aW5wdXQgaWQ9XCJpblwiIHR5cGU9XCJ0ZXh0XCI+IgotICAgICAgICAiPHNjcmlw
dD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW4nKS5mb2N1cygpOzwvc2NyaXB0PjwvYm9keT48
L2h0bWw+IjsKLSAgICBjb25zdCBjaGFyKiBidXR0b25faHRtbCA9ICI8aHRtbD48Ym9keT48aW5w
dXQgaWQ9XCJpblwiIHR5cGU9XCJidXR0b25cIj4iCi0gICAgICAgICI8c2NyaXB0PmRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdpbicpLmZvY3VzKCk7PC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4iOwot
ICAgIGNvbnN0IGNoYXIqIGxpbmtfaHRtbCA9ICI8aHRtbD48Ym9keT48YSBocmVmPVwiaHR0cDov
L3d3dy5nbm9tZS5vcmdcIiBpZD1cImluXCI+IgotICAgICAgICAiTElOS1kgTUNMSU5LRVJTT048
L2E+PHNjcmlwdD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW4nKS5mb2N1cygpOzwvc2NyaXB0
PiIKLSAgICAgICAgIjwvYm9keT48L2h0bWw+IjsKLSAgICBjb25zdCBjaGFyKiBkaXZfaHRtbCA9
ICI8aHRtbD48Ym9keT48ZGl2IGlkPVwiaW5cIiBjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCI+Igot
ICAgICAgICAiPHNjcmlwdD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW4nKS5mb2N1cygpOzwv
c2NyaXB0PjwvYm9keT48L2h0bWw+IjsKLQotICAgIC8vIFRoZXNlIGFyZSBzaW1pbGFyIHRvIHRo
ZSBibG9ja3MgYWJvdmUsIGJ1dCB0aGV5IHNob3VsZCBibG9jayB0aGUgZmlyc3QKLSAgICAvLyBr
ZXlwcmVzcyBtb2RpZnlpbmcgdGhlIGVkaXRhYmxlIG5vZGUuCi0gICAgY29uc3QgY2hhciogdGV4
dGlucHV0X2h0bWxfYmxvY2tpbmcgPSAiPGh0bWw+PGJvZHk+IgotICAgICAgICAiPGlucHV0IGlk
PVwiaW5cIiB0eXBlPVwidGV4dFwiICIKLSAgICAgICAgIm9ua2V5cHJlc3M9XCJpZiAoZmlyc3Qp
IHtldmVudC5wcmV2ZW50RGVmYXVsdCgpO2ZpcnN0PWZhbHNlO31cIj4iCi0gICAgICAgICI8c2Ny
aXB0PmZpcnN0ID0gdHJ1ZTtcbmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbicpLmZvY3VzKCk7
PC9zY3JpcHQ+XG4iCi0gICAgICAgICI8L3NjcmlwdD48L2JvZHk+PC9odG1sPiI7Ci0gICAgY29u
c3QgY2hhciogZGl2X2h0bWxfYmxvY2tpbmcgPSAiPGh0bWw+PGJvZHk+IgotICAgICAgICAiPGRp
diBpZD1cImluXCIgY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiICIKLSAgICAgICAgIm9ua2V5cHJl
c3M9XCJpZiAoZmlyc3QpIHtldmVudC5wcmV2ZW50RGVmYXVsdCgpO2ZpcnN0PWZhbHNlO31cIj4i
Ci0gICAgICAgICI8c2NyaXB0PmZpcnN0ID0gdHJ1ZTsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J2luJykuZm9jdXMoKTs8L3NjcmlwdD5cbiIKLSAgICAgICAgIjwvc2NyaXB0PjwvYm9keT48L2h0
bWw+IjsKLQotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQva2V5ZXZlbnRzL2V2ZW50LXRleHRpbnB1
dCIsIEtleUV2ZW50Rml4dHVyZSwKLSAgICAgICAgICAgICAgIHRlc3RfaW5mb19uZXcodGV4dGlu
cHV0X2h0bWwsIFRSVUUpLAotICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfc2V0dXAs
Ci0gICAgICAgICAgICAgICB0ZXN0X2tleXByZXNzX2V2ZW50cywKLSAgICAgICAgICAgICAgIGtl
eV9ldmVudF9maXh0dXJlX3RlYXJkb3duKTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2tleWV2
ZW50cy9ldmVudC1idXR0b25zIiwgS2V5RXZlbnRGaXh0dXJlLAotICAgICAgICAgICAgICAgdGVz
dF9pbmZvX25ldyhidXR0b25faHRtbCwgRkFMU0UpLAotICAgICAgICAgICAgICAga2V5X2V2ZW50
X2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X2tleXByZXNzX2V2ZW50cywKLSAg
ICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3RlYXJkb3duKTsKLSAgICBnX3Rlc3RfYWRk
KCIvd2Via2l0L2tleWV2ZW50cy9ldmVudC1saW5rIiwgS2V5RXZlbnRGaXh0dXJlLAotICAgICAg
ICAgICAgICAgdGVzdF9pbmZvX25ldyhsaW5rX2h0bWwsIEZBTFNFKSwKLSAgICAgICAgICAgICAg
IGtleV9ldmVudF9maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF9rZXlwcmVzc19l
dmVudHMsCi0gICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV90ZWFyZG93bik7Ci0gICAg
Z190ZXN0X2FkZCgiL3dlYmtpdC9rZXlldmVudC9ldmVudC1kaXYiLCBLZXlFdmVudEZpeHR1cmUs
Ci0gICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KGRpdl9odG1sLCBUUlVFKSwKLSAgICAgICAg
ICAgICAgIGtleV9ldmVudF9maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF9rZXlw
cmVzc19ldmVudHMsCi0gICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV90ZWFyZG93bik7
Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9rZXlldmVudC9pbWUtdGV4dGlucHV0IiwgS2V5RXZl
bnRGaXh0dXJlLAotICAgICAgICAgICAgICAgdGVzdF9pbmZvX25ldyh0ZXh0aW5wdXRfaHRtbCwg
VFJVRSksCi0gICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV9zZXR1cCwKLSAgICAgICAg
ICAgICAgIHRlc3RfaW1lLAotICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfdGVhcmRv
d24pOwotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQva2V5ZXZlbnQvaW1lLWRpdiIsIEtleUV2ZW50
Rml4dHVyZSwKLSAgICAgICAgICAgICAgIHRlc3RfaW5mb19uZXcoZGl2X2h0bWwsIFRSVUUpLAot
ICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0
ZXN0X2ltZSwKLSAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3RlYXJkb3duKTsKLSAg
ICBnX3Rlc3RfYWRkKCIvd2Via2l0L2tleWV2ZW50L2Jsb2NrLXRleHRpbnB1dCIsIEtleUV2ZW50
Rml4dHVyZSwKLSAgICAgICAgICAgICAgIHRlc3RfaW5mb19uZXcodGV4dGlucHV0X2h0bWxfYmxv
Y2tpbmcsIFRSVUUpLAotICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfc2V0dXAsCi0g
ICAgICAgICAgICAgICB0ZXN0X2Jsb2NraW5nLAotICAgICAgICAgICAgICAga2V5X2V2ZW50X2Zp
eHR1cmVfdGVhcmRvd24pOwotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQva2V5ZXZlbnQvYmxvY2st
ZGl2IiwgS2V5RXZlbnRGaXh0dXJlLAotICAgICAgICAgICAgICAgdGVzdF9pbmZvX25ldyhkaXZf
aHRtbF9ibG9ja2luZywgVFJVRSksCi0gICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV9z
ZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3RfYmxvY2tpbmcsCi0gICAgICAgICAgICAgICBrZXlf
ZXZlbnRfZml4dHVyZV90ZWFyZG93bik7Ci0jaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkK
LSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2tleWV2ZW50L3hpbS10ZXh0aW5wdXQiLCBLZXlFdmVu
dEZpeHR1cmUsCi0gICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KHRleHRpbnB1dF9odG1sLCBU
UlVFKSwKLSAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3NldHVwLAotICAgICAgICAg
ICAgICAgdGVzdF94aW0sCi0gICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV90ZWFyZG93
bik7Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9rZXlldmVudC94aW0tZGl2IiwgS2V5RXZlbnRG
aXh0dXJlLAotICAgICAgICAgICAgICAgdGVzdF9pbmZvX25ldyhkaXZfaHRtbCwgVFJVRSksCi0g
ICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRl
c3RfeGltLAotICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfdGVhcmRvd24pOwotI2Vu
ZGlmCi0KLSAgICByZXR1cm4gZ190ZXN0X3J1bigpOwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2d0ay90ZXN0cy90ZXN0bG9hZGluZy5jIGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMv
dGVzdGxvYWRpbmcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBhOTIwZi4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0bG9hZGluZy5jCisrKyAvZGV2
L251bGwKQEAgLTEsNDM1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAg
R3VzdGF2byBOb3JvbmhhIFNpbHZhCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSWdhbGlhIFMuTC4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDxsaWJz
b3VwL3NvdXAuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0
Lmg+Ci0KLS8qIFRoaXMgc3RyaW5nIGhhcyB0byBiZSByYXRoZXIgYmlnIGJlY2F1c2Ugb2YgdGhl
IGNhbmNlbGxlZCB0ZXN0IC0gaXQKLSAqIGxvb2tzIGxpa2Ugc291cCByZWZ1c2VzIHRvIHNlbmQg
b3IgcmVjZWl2ZSBhIHRvbyBzbWFsbCBjaHVuayAqLwotI2RlZmluZSBIVE1MX1NUUklORyAiPGh0
bWw+PGJvZHk+VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nITwvYm9keT48L2h0bWw+IgotCi1Tb3VwVVJJKiBiYXNlX3VyaTsKLQotLyog
Rm9yIHJlYWwgcmVxdWVzdCB0ZXN0aW5nICovCi1zdGF0aWMgdm9pZAotc2VydmVyX2NhbGxiYWNr
KFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1zZywKLSAgICAgICAgICAgICAgICBj
b25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiBxdWVyeSwKLSAgICAgICAgICAgICAgICBTb3Vw
Q2xpZW50Q29udGV4dCogY29udGV4dCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBpZiAobXNnLT5t
ZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3Rh
dHVzKG1zZywgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1zZywgU09VUF9TVEFUVVNfT0sp
OwotCi0gICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvdGVzdF9sb2FkaW5nX3N0YXR1cyIpIHx8
IGdfc3RyX2VxdWFsKHBhdGgsICIvdGVzdF9sb2FkaW5nX3N0YXR1czIiKSkKLSAgICAgICAgc291
cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1zZy0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RB
VElDLCBIVE1MX1NUUklORywgc3RybGVuKEhUTUxfU1RSSU5HKSk7Ci0gICAgZWxzZSBpZiAoZ19z
dHJfZXF1YWwocGF0aCwgIi90ZXN0X2xvYWRfZXJyb3IiKSkgewotICAgICAgICBzb3VwX21lc3Nh
Z2Vfc2V0X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX0NBTlRfQ09OTkVDVCk7Ci0gICAgfSBlbHNl
IGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3Rlc3RfbG9hZGluZ19jYW5jZWxsZWQiKSkgewotICAg
ICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19zZXRfZW5jb2RpbmcobXNnLT5yZXNwb25zZV9oZWFk
ZXJzLCBTT1VQX0VOQ09ESU5HX0NIVU5LRUQpOwotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9h
cHBlbmQobXNnLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIEhUTUxfU1RSSU5H
LCBzdHJsZW4oSFRNTF9TVFJJTkcpKTsKLSAgICAgICAgc291cF9zZXJ2ZXJfdW5wYXVzZV9tZXNz
YWdlKHNlcnZlciwgbXNnKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNvdXBfbWVz
c2FnZV9ib2R5X2NvbXBsZXRlKG1zZy0+cmVzcG9uc2VfYm9keSk7Ci19Ci0KLXR5cGVkZWYgc3Ry
dWN0IHsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OwotICAgIEdNYWluTG9vcCAqbG9vcDsK
LSAgICBnYm9vbGVhbiBoYXNfYmVlbl9wcm92aXNpb25hbDsKLSAgICBnYm9vbGVhbiBoYXNfYmVl
bl9jb21taXR0ZWQ7Ci0gICAgZ2Jvb2xlYW4gaGFzX2JlZW5fZmlyc3RfdmlzdWFsbHlfbm9uX2Vt
cHR5X2xheW91dDsKLSAgICBnYm9vbGVhbiBoYXNfYmVlbl9maW5pc2hlZDsKLSAgICBnYm9vbGVh
biBoYXNfYmVlbl9mYWlsZWQ7Ci0gICAgZ2Jvb2xlYW4gaGFzX2JlZW5fbG9hZF9lcnJvcjsKLX0g
V2ViTG9hZGluZ0ZpeHR1cmU7Ci0KLXN0YXRpYyB2b2lkIHdlYl9sb2FkaW5nX2ZpeHR1cmVfc2V0
dXAoV2ViTG9hZGluZ0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAg
ICBmaXh0dXJlLT53ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXco
KSk7Ci0gICAgZml4dHVyZS0+bG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLSAg
ICBnX29iamVjdF9yZWZfc2luayhmaXh0dXJlLT53ZWJWaWV3KTsKLSAgICBmaXh0dXJlLT5oYXNf
YmVlbl9wcm92aXNpb25hbCA9IEZBTFNFOwotICAgIGZpeHR1cmUtPmhhc19iZWVuX2NvbW1pdHRl
ZCA9IEZBTFNFOwotICAgIGZpeHR1cmUtPmhhc19iZWVuX2ZpcnN0X3Zpc3VhbGx5X25vbl9lbXB0
eV9sYXlvdXQgPSBGQUxTRTsKLSAgICBmaXh0dXJlLT5oYXNfYmVlbl9maW5pc2hlZCA9IEZBTFNF
OwotICAgIGZpeHR1cmUtPmhhc19iZWVuX2ZhaWxlZCA9IEZBTFNFOwotICAgIGZpeHR1cmUtPmhh
c19iZWVuX2xvYWRfZXJyb3IgPSBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQgd2ViX2xvYWRpbmdf
Zml4dHVyZV90ZWFyZG93bihXZWJMb2FkaW5nRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRl
ciBkYXRhKQotewotICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPndlYlZpZXcpOwotICAgIGdf
bWFpbl9sb29wX3VucmVmKGZpeHR1cmUtPmxvb3ApOwotfQotCi1zdGF0aWMgY2hhciogZ2V0X3Vy
aV9mb3JfcGF0aChjb25zdCBjaGFyKiBwYXRoKQotewotICAgIFNvdXBVUkkqIHVyaTsKLSAgICBj
aGFyKiB1cmlfc3RyaW5nOwotCi0gICAgdXJpID0gc291cF91cmlfbmV3X3dpdGhfYmFzZShiYXNl
X3VyaSwgcGF0aCk7Ci0gICAgdXJpX3N0cmluZyA9IHNvdXBfdXJpX3RvX3N0cmluZyh1cmksIEZB
TFNFKTsKLSAgICBzb3VwX3VyaV9mcmVlICh1cmkpOwotCi0gICAgcmV0dXJuIHVyaV9zdHJpbmc7
Ci19Ci0KLXN0YXRpYyB2b2lkIGxvYWRfZmluaXNoZWRfY2IoV2ViS2l0V2ViVmlldyogd2ViX3Zp
ZXcsIFdlYktpdFdlYkZyYW1lKiB3ZWJfZnJhbWUsIFdlYkxvYWRpbmdGaXh0dXJlKiBmaXh0dXJl
KQotewotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsKTsKLSAgICBn
X2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9jb21taXR0ZWQpOwotICAgIGdfYXNzZXJ0KGZpeHR1
cmUtPmhhc19iZWVuX2ZpcnN0X3Zpc3VhbGx5X25vbl9lbXB0eV9sYXlvdXQpOwotCi0gICAgZ19t
YWluX2xvb3BfcXVpdChmaXh0dXJlLT5sb29wKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBzdGF0dXNf
Y2hhbmdlZF9jYihHT2JqZWN0KiBvYmplY3QsIEdQYXJhbVNwZWMqIHBzcGVjLCBXZWJMb2FkaW5n
Rml4dHVyZSogZml4dHVyZSkKLXsKLSAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtp
dF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMoV0VCS0lUX1dFQl9WSUVXKG9iamVjdCkpOwotCi0g
ICAgc3dpdGNoIChzdGF0dXMpIHsKLSAgICBjYXNlIFdFQktJVF9MT0FEX1BST1ZJU0lPTkFMOgot
ICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwpOwotICAgICAg
ICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fY29tbWl0dGVkKTsKLSAgICAgICAgZ19hc3Nl
cnQoIWZpeHR1cmUtPmhhc19iZWVuX2ZpcnN0X3Zpc3VhbGx5X25vbl9lbXB0eV9sYXlvdXQpOwot
ICAgICAgICBmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCA9IFRSVUU7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgV0VCS0lUX0xPQURfQ09NTUlUVEVEOgotICAgICAgICBnX2Fzc2VydChm
aXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCk7Ci0gICAgICAgIGdfYXNzZXJ0KCFmaXh0dXJl
LT5oYXNfYmVlbl9jb21taXR0ZWQpOwotICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2Jl
ZW5fZmlyc3RfdmlzdWFsbHlfbm9uX2VtcHR5X2xheW91dCk7Ci0gICAgICAgIGZpeHR1cmUtPmhh
c19iZWVuX2NvbW1pdHRlZCA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV0VCS0lU
X0xPQURfRklSU1RfVklTVUFMTFlfTk9OX0VNUFRZX0xBWU9VVDoKLSAgICAgICAgZ19hc3NlcnQo
Zml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwpOwotICAgICAgICBnX2Fzc2VydChmaXh0dXJl
LT5oYXNfYmVlbl9jb21taXR0ZWQpOwotICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2Jl
ZW5fZmlyc3RfdmlzdWFsbHlfbm9uX2VtcHR5X2xheW91dCk7Ci0gICAgICAgIGZpeHR1cmUtPmhh
c19iZWVuX2ZpcnN0X3Zpc3VhbGx5X25vbl9lbXB0eV9sYXlvdXQgPSBUUlVFOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFdFQktJVF9MT0FEX0ZJTklTSEVEOgotICAgICAgICBnX2Fzc2VydChm
aXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCk7Ci0gICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUt
Pmhhc19iZWVuX2NvbW1pdHRlZCk7Ci0gICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVu
X2ZpcnN0X3Zpc3VhbGx5X25vbl9lbXB0eV9sYXlvdXQpOwotICAgICAgICBicmVhazsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAgIH0KLX0KLQotc3Rh
dGljIHZvaWQgdGVzdF9sb2FkaW5nX3N0YXR1cyhXZWJMb2FkaW5nRml4dHVyZSogZml4dHVyZSwg
Z2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGNoYXIqIHVyaV9zdHJpbmc7Ci0KLSAgICBnX2Fz
c2VydF9jbXBpbnQod2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyhmaXh0dXJlLT53ZWJW
aWV3KSwgPT0sIFdFQktJVF9MT0FEX1BST1ZJU0lPTkFMKTsKLQotICAgIGdfb2JqZWN0X2Nvbm5l
Y3QoR19PQkpFQ1QoZml4dHVyZS0+d2ViVmlldyksCi0gICAgICAgICAgICAgICAgICAgICAic2ln
bmFsOjpub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhzdGF0dXNfY2hhbmdlZF9jYiks
IGZpeHR1cmUsCi0gICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjpsb2FkLWZpbmlzaGVkIiwg
R19DQUxMQkFDSyhsb2FkX2ZpbmlzaGVkX2NiKSwgZml4dHVyZSwKLSAgICAgICAgICAgICAgICAg
ICAgIE5VTEwpOwotCi0gICAgdXJpX3N0cmluZyA9IGdldF91cmlfZm9yX3BhdGgoIi90ZXN0X2xv
YWRpbmdfc3RhdHVzIik7Ci0KLSAgICAvKiBsb2FkX3VyaSB3aWxsIHRyaWdnZXIgdGhlIG5hdmln
YXRpb24tcG9saWN5LWRlY2lzaW9uLXJlcXVlc3RlZAotICAgICAqIHNpZ25hbCBlbWlzc2lvbjsK
LSAgICAgKi8KLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkoZml4dHVyZS0+d2ViVmlldywg
dXJpX3N0cmluZyk7Ci0gICAgZ19mcmVlKHVyaV9zdHJpbmcpOwotCi0gICAgZ19tYWluX2xvb3Bf
cnVuKGZpeHR1cmUtPmxvb3ApOwotfQotCi1zdGF0aWMgdm9pZCBsb2FkX2Vycm9yX3N0YXR1c19j
aGFuZ2VkX2NiKEdPYmplY3QqIG9iamVjdCwgR1BhcmFtU3BlYyogcHNwZWMsIFdlYkxvYWRpbmdG
aXh0dXJlKiBmaXh0dXJlKQotewotICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0
X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyhXRUJLSVRfV0VCX1ZJRVcob2JqZWN0KSk7Ci0KLSAg
ICBzd2l0Y2goc3RhdHVzKSB7Ci0gICAgY2FzZSBXRUJLSVRfTE9BRF9QUk9WSVNJT05BTDoKLSAg
ICAgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsKTsKLSAgICAgICAg
Zml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwgPSBUUlVFOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFdFQktJVF9MT0FEX0NPTU1JVFRFRDoKLSAgICAgICAgZ19hc3NlcnQoIWZpeHR1cmUt
Pmhhc19iZWVuX2NvbW1pdHRlZCk7Ci0gICAgICAgIGZpeHR1cmUtPmhhc19iZWVuX2NvbW1pdHRl
ZCA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV0VCS0lUX0xPQURfRklOSVNIRUQ6
Ci0gICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsKTsKLSAgICAg
ICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fbG9hZF9lcnJvcik7Ci0gICAgICAgIGdfYXNz
ZXJ0KGZpeHR1cmUtPmhhc19iZWVuX2ZhaWxlZCk7Ci0gICAgICAgIGdfYXNzZXJ0KCFmaXh0dXJl
LT5oYXNfYmVlbl9maW5pc2hlZCk7Ci0gICAgICAgIGZpeHR1cmUtPmhhc19iZWVuX2ZpbmlzaGVk
ID0gVFJVRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXRUJLSVRfTE9BRF9GQUlMRUQ6Ci0g
ICAgICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNfYmVlbl9mYWlsZWQpOwotICAgICAgICBmaXh0
dXJlLT5oYXNfYmVlbl9mYWlsZWQgPSBUUlVFOwotICAgICAgICBnX21haW5fbG9vcF9xdWl0KGZp
eHR1cmUtPmxvb3ApOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVh
azsKLSAgICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBsb2FkX2Vycm9yX2NiKFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcsIFdlYktpdFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgY2hhciogdXJpLCBHRXJy
b3IgKmVycm9yLCBXZWJMb2FkaW5nRml4dHVyZSogZml4dHVyZSkKLXsKLSAgICBnX2Fzc2VydChm
aXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCk7Ci0gICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhh
c19iZWVuX2xvYWRfZXJyb3IpOwotICAgIGZpeHR1cmUtPmhhc19iZWVuX2xvYWRfZXJyb3IgPSBU
UlVFOwotCi0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X2xvYWRpbmdf
ZXJyb3IoV2ViTG9hZGluZ0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsK
LSAgICBjaGFyKiB1cmlfc3RyaW5nOwotCi0gICAgZ190ZXN0X2J1ZygiMjg4NDIiKTsKLQotICAg
IGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2ViVmlldywgImxvYWQtZXJyb3IiLCBHX0NBTExC
QUNLKGxvYWRfZXJyb3JfY2IpLCBmaXh0dXJlKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1
cmUtPndlYlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhsb2FkX2Vycm9y
X3N0YXR1c19jaGFuZ2VkX2NiKSwgZml4dHVyZSk7Ci0KLSAgICB1cmlfc3RyaW5nID0gZ2V0X3Vy
aV9mb3JfcGF0aCgiL3Rlc3RfbG9hZF9lcnJvciIpOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2Fk
X3VyaShmaXh0dXJlLT53ZWJWaWV3LCB1cmlfc3RyaW5nKTsKLSAgICBnX2ZyZWUodXJpX3N0cmlu
Zyk7Ci0KLSAgICBnX21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7Ci0KLSAgICBnX2Fzc2Vy
dChmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCk7Ci0gICAgZ19hc3NlcnQoIWZpeHR1cmUt
Pmhhc19iZWVuX2NvbW1pdHRlZCk7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fbG9h
ZF9lcnJvcik7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fZmFpbGVkKTsKLSAgICBn
X2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fZmluaXNoZWQpOwotfQotCi0vKiBDYW5jZWxsZWQg
bG9hZCAqLwotCi1zdGF0aWMgZ2Jvb2xlYW4gbG9hZF9jYW5jZWxsZWRfY2IoV2ViS2l0V2ViVmll
dyogd2ViVmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLCBjb25zdCBjaGFyKiB1cmksIEdFcnJv
ciAqZXJyb3IsIFdlYkxvYWRpbmdGaXh0dXJlKiBmaXh0dXJlKQotewotICAgIGdfYXNzZXJ0KGZp
eHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsKTsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNf
YmVlbl9mYWlsZWQpOwotICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNfYmVlbl9sb2FkX2Vycm9y
KTsKLSAgICBnX2Fzc2VydChlcnJvci0+Y29kZSA9PSBXRUJLSVRfTkVUV09SS19FUlJPUl9DQU5D
RUxMRUQpOwotICAgIGZpeHR1cmUtPmhhc19iZWVuX2xvYWRfZXJyb3IgPSBUUlVFOwotCi0gICAg
cmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBzdG9wX2xvYWQgKGdwb2ludGVyIGRh
dGEpCi17Ci0gICAgd2Via2l0X3dlYl92aWV3X3N0b3BfbG9hZGluZyhXRUJLSVRfV0VCX1ZJRVco
ZGF0YSkpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQgbG9hZF9jYW5jZWxs
ZWRfc3RhdHVzX2NoYW5nZWRfY2IoR09iamVjdCogb2JqZWN0LCBHUGFyYW1TcGVjKiBwc3BlYywg
V2ViTG9hZGluZ0ZpeHR1cmUqIGZpeHR1cmUpCi17Ci0gICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0
dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKFdFQktJVF9XRUJfVklFVyhvYmpl
Y3QpKTsKLQotICAgIHN3aXRjaChzdGF0dXMpIHsKLSAgICBjYXNlIFdFQktJVF9MT0FEX1BST1ZJ
U0lPTkFMOgotICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwp
OwotICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fZmFpbGVkKTsKLSAgICAgICAg
Zml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwgPSBUUlVFOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFdFQktJVF9MT0FEX0NPTU1JVFRFRDoKLSAgICAgICAgZ19pZGxlX2FkZCAoc3RvcF9s
b2FkLCBvYmplY3QpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdFQktJVF9MT0FEX0ZBSUxF
RDoKLSAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwpOwotICAg
ICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fZmFpbGVkKTsKLSAgICAgICAgZ19hc3Nl
cnQoIWZpeHR1cmUtPmhhc19iZWVuX2xvYWRfZXJyb3IpOwotICAgICAgICBmaXh0dXJlLT5oYXNf
YmVlbl9mYWlsZWQgPSBUUlVFOwotICAgICAgICBnX21haW5fbG9vcF9xdWl0KGZpeHR1cmUtPmxv
b3ApOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdFQktJVF9MT0FEX0ZJTklTSEVEOgotICAg
ICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0
OgotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RfbG9hZGluZ19j
YW5jZWxsZWQoV2ViTG9hZGluZ0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkK
LXsKLSAgICBjaGFyKiB1cmlfc3RyaW5nOwotCi0gICAgZ190ZXN0X2J1ZygiMjk2NDQiKTsKLQot
ICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2ViVmlldywgImxvYWQtZXJyb3IiLCBHX0NB
TExCQUNLKGxvYWRfY2FuY2VsbGVkX2NiKSwgZml4dHVyZSk7Ci0gICAgZ19zaWduYWxfY29ubmVj
dChmaXh0dXJlLT53ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0sobG9h
ZF9jYW5jZWxsZWRfc3RhdHVzX2NoYW5nZWRfY2IpLCBmaXh0dXJlKTsKLQotICAgIHVyaV9zdHJp
bmcgPSBnZXRfdXJpX2Zvcl9wYXRoKCIvdGVzdF9sb2FkaW5nX2NhbmNlbGxlZCIpOwotICAgIHdl
YmtpdF93ZWJfdmlld19sb2FkX3VyaShmaXh0dXJlLT53ZWJWaWV3LCB1cmlfc3RyaW5nKTsKLSAg
ICBnX2ZyZWUodXJpX3N0cmluZyk7Ci0KLSAgICBnX21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9v
cCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGxvYWRfZ29iYWNrX3N0YXR1c19jaGFuZ2VkX2NiKEdPYmpl
Y3QqIG9iamVjdCwgR1BhcmFtU3BlYyogcHNwZWMsIFdlYkxvYWRpbmdGaXh0dXJlKiBmaXh0dXJl
KQotewotICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9s
b2FkX3N0YXR1cyhXRUJLSVRfV0VCX1ZJRVcob2JqZWN0KSk7Ci0KLSAgICBzd2l0Y2goc3RhdHVz
KSB7Ci0gICAgY2FzZSBXRUJLSVRfTE9BRF9QUk9WSVNJT05BTDoKLSAgICAgICAgZ19hc3NlcnQo
IWZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsKTsKLSAgICAgICAgZml4dHVyZS0+aGFzX2Jl
ZW5fcHJvdmlzaW9uYWwgPSBUUlVFOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdFQktJVF9M
T0FEX0NPTU1JVFRFRDoKLSAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlz
aW9uYWwpOwotICAgICAgICBmaXh0dXJlLT5oYXNfYmVlbl9jb21taXR0ZWQgPSBUUlVFOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIFdFQktJVF9MT0FEX0ZBSUxFRDoKLSAgICAgICAgZ19hc3Nl
cnRfbm90X3JlYWNoZWQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXRUJLSVRfTE9BRF9G
SU5JU0hFRDoKLSAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwp
OwotICAgICAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9jb21taXR0ZWQpOwotICAgICAg
ICBmaXh0dXJlLT5oYXNfYmVlbl9maW5pc2hlZCA9IFRSVUU7Ci0gICAgICAgIGdfbWFpbl9sb29w
X3F1aXQoZml4dHVyZS0+bG9vcCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgbG9hZF93ZW50YmFja19zdGF0dXNf
Y2hhbmdlZF9jYihHT2JqZWN0KiBvYmplY3QsIEdQYXJhbVNwZWMqIHBzcGVjLCBXZWJMb2FkaW5n
Rml4dHVyZSogZml4dHVyZSkKLXsKLSAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtp
dF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMoV0VCS0lUX1dFQl9WSUVXKG9iamVjdCkpOwotICAg
IGNoYXIqIHVyaV9zdHJpbmc7Ci0gICAgY2hhciogdXJpX3N0cmluZzI7Ci0KLSAgICB1cmlfc3Ry
aW5nID0gZ2V0X3VyaV9mb3JfcGF0aCgiL3Rlc3RfbG9hZGluZ19zdGF0dXMiKTsKLSAgICB1cmlf
c3RyaW5nMiA9IGdldF91cmlfZm9yX3BhdGgoIi90ZXN0X2xvYWRpbmdfc3RhdHVzMiIpOwotCi0g
ICAgc3dpdGNoKHN0YXR1cykgewotICAgIGNhc2UgV0VCS0lUX0xPQURfUFJPVklTSU9OQUw6Ci0g
ICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaShmaXh0dXJlLT53
ZWJWaWV3KSwgPT0sIHVyaV9zdHJpbmcyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXRUJL
SVRfTE9BRF9DT01NSVRURUQ6Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X3VyaShmaXh0dXJlLT53ZWJWaWV3KSwgPT0sIHVyaV9zdHJpbmcpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFdFQktJVF9MT0FEX0ZBSUxFRDoKLSAgICAgICAgZ19hc3NlcnRfbm90
X3JlYWNoZWQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXRUJLSVRfTE9BRF9GSU5JU0hF
RDoKLSAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKGZpeHR1
cmUtPndlYlZpZXcpLCA9PSwgdXJpX3N0cmluZyk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQo
Zml4dHVyZS0+bG9vcCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLQotICAgIGdfZnJlZSh1cmlfc3RyaW5nKTsKLSAgICBnX2ZyZWUodXJpX3N0
cmluZzIpOwotfQotCi1zdGF0aWMgdm9pZCBsb2FkX2Vycm9yX3Rlc3QoV2ViS2l0V2ViVmlldyog
d2VidmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLCBjb25zdCBjaGFyKiB1cmksIEdFcnJvciog
ZXJyb3IpCi17Ci0gICAgZ19kZWJ1ZygiRXJyb3I6ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOwotfQot
Ci1zdGF0aWMgdm9pZCB0ZXN0X2xvYWRpbmdfZ29iYWNrKFdlYkxvYWRpbmdGaXh0dXJlKiBmaXh0
dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgY2hhciogdXJpX3N0cmluZzsKLQotICAg
IGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2ViVmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMi
LCBHX0NBTExCQUNLKGxvYWRfZ29iYWNrX3N0YXR1c19jaGFuZ2VkX2NiKSwgZml4dHVyZSk7Ci0K
LSAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJsb2FkLWVycm9yIiwgR19D
QUxMQkFDSyhsb2FkX2Vycm9yX3Rlc3QpLCBmaXh0dXJlKTsKLQotICAgIHVyaV9zdHJpbmcgPSBn
ZXRfdXJpX2Zvcl9wYXRoKCIvdGVzdF9sb2FkaW5nX3N0YXR1cyIpOwotICAgIHdlYmtpdF93ZWJf
dmlld19sb2FkX3VyaShmaXh0dXJlLT53ZWJWaWV3LCB1cmlfc3RyaW5nKTsKLSAgICBnX2ZyZWUo
dXJpX3N0cmluZyk7Ci0KLSAgICBnX21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7Ci0KLSAg
ICBmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCA9IEZBTFNFOwotICAgIGZpeHR1cmUtPmhh
c19iZWVuX2NvbW1pdHRlZCA9IEZBTFNFOwotICAgIGZpeHR1cmUtPmhhc19iZWVuX2ZpcnN0X3Zp
c3VhbGx5X25vbl9lbXB0eV9sYXlvdXQgPSBGQUxTRTsKLSAgICBmaXh0dXJlLT5oYXNfYmVlbl9m
aW5pc2hlZCA9IEZBTFNFOwotICAgIGZpeHR1cmUtPmhhc19iZWVuX2ZhaWxlZCA9IEZBTFNFOwot
ICAgIGZpeHR1cmUtPmhhc19iZWVuX2xvYWRfZXJyb3IgPSBGQUxTRTsKLQotICAgIHVyaV9zdHJp
bmcgPSBnZXRfdXJpX2Zvcl9wYXRoKCIvdGVzdF9sb2FkaW5nX3N0YXR1czIiKTsKLSAgICB3ZWJr
aXRfd2ViX3ZpZXdfbG9hZF91cmkoZml4dHVyZS0+d2ViVmlldywgdXJpX3N0cmluZyk7Ci0gICAg
Z19mcmVlKHVyaV9zdHJpbmcpOwotCi0gICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1cmUtPmxvb3Ap
OwotCi0gICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKGZpeHR1cmUtPndl
YlZpZXcsIGxvYWRfZ29iYWNrX3N0YXR1c19jaGFuZ2VkX2NiLCBmaXh0dXJlKTsKLQotICAgIGZp
eHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsID0gRkFMU0U7Ci0gICAgZml4dHVyZS0+aGFzX2Jl
ZW5fY29tbWl0dGVkID0gRkFMU0U7Ci0gICAgZml4dHVyZS0+aGFzX2JlZW5fZmlyc3RfdmlzdWFs
bHlfbm9uX2VtcHR5X2xheW91dCA9IEZBTFNFOwotICAgIGZpeHR1cmUtPmhhc19iZWVuX2Zpbmlz
aGVkID0gRkFMU0U7Ci0gICAgZml4dHVyZS0+aGFzX2JlZW5fZmFpbGVkID0gRkFMU0U7Ci0gICAg
Zml4dHVyZS0+aGFzX2JlZW5fbG9hZF9lcnJvciA9IEZBTFNFOwotCi0gICAgZ19zaWduYWxfY29u
bmVjdChmaXh0dXJlLT53ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0so
bG9hZF93ZW50YmFja19zdGF0dXNfY2hhbmdlZF9jYiksIGZpeHR1cmUpOwotICAgIHdlYmtpdF93
ZWJfdmlld19nb19iYWNrKGZpeHR1cmUtPndlYlZpZXcpOwotCi0gICAgZ19tYWluX2xvb3BfcnVu
KGZpeHR1cmUtPmxvb3ApOwotCi0gICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9m
dW5jKGZpeHR1cmUtPndlYlZpZXcsIGxvYWRfd2VudGJhY2tfc3RhdHVzX2NoYW5nZWRfY2IsIGZp
eHR1cmUpOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCi17Ci0gICAgU291
cFNlcnZlciogc2VydmVyOwotCi0gICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwp
OwotCi0gICAgc2VydmVyID0gc291cF9zZXJ2ZXJfbmV3KFNPVVBfU0VSVkVSX1BPUlQsIDAsIE5V
TEwpOwotICAgIHNvdXBfc2VydmVyX3J1bl9hc3luYyhzZXJ2ZXIpOwotCi0gICAgc291cF9zZXJ2
ZXJfYWRkX2hhbmRsZXIoc2VydmVyLCBOVUxMLCBzZXJ2ZXJfY2FsbGJhY2ssIE5VTEwsIE5VTEwp
OwotCi0gICAgYmFzZV91cmkgPSBzb3VwX3VyaV9uZXcoImh0dHA6Ly8xMjcuMC4wLjEvIik7Ci0g
ICAgc291cF91cmlfc2V0X3BvcnQoYmFzZV91cmksIHNvdXBfc2VydmVyX2dldF9wb3J0KHNlcnZl
cikpOwotCi0gICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsK
LSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2xvYWRpbmcvc3RhdHVzIiwKLSAgICAgICAgICAgICAg
IFdlYkxvYWRpbmdGaXh0dXJlLCBOVUxMLAotICAgICAgICAgICAgICAgd2ViX2xvYWRpbmdfZml4
dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3RfbG9hZGluZ19zdGF0dXMsCi0gICAgICAg
ICAgICAgICB3ZWJfbG9hZGluZ19maXh0dXJlX3RlYXJkb3duKTsKLSAgICBnX3Rlc3RfYWRkKCIv
d2Via2l0L2xvYWRpbmcvZXJyb3IiLAotICAgICAgICAgICAgICAgV2ViTG9hZGluZ0ZpeHR1cmUs
IE5VTEwsCi0gICAgICAgICAgICAgICB3ZWJfbG9hZGluZ19maXh0dXJlX3NldHVwLAotICAgICAg
ICAgICAgICAgdGVzdF9sb2FkaW5nX2Vycm9yLAotICAgICAgICAgICAgICAgd2ViX2xvYWRpbmdf
Zml4dHVyZV90ZWFyZG93bik7Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9sb2FkaW5nL2NhbmNl
bGxlZCIsCi0gICAgICAgICAgICAgICBXZWJMb2FkaW5nRml4dHVyZSwgTlVMTCwKLSAgICAgICAg
ICAgICAgIHdlYl9sb2FkaW5nX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X2xv
YWRpbmdfY2FuY2VsbGVkLAotICAgICAgICAgICAgICAgd2ViX2xvYWRpbmdfZml4dHVyZV90ZWFy
ZG93bik7Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9sb2FkaW5nL2dvYmFjayIsCi0gICAgICAg
ICAgICAgICBXZWJMb2FkaW5nRml4dHVyZSwgTlVMTCwKLSAgICAgICAgICAgICAgIHdlYl9sb2Fk
aW5nX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X2xvYWRpbmdfZ29iYWNrLAot
ICAgICAgICAgICAgICAgd2ViX2xvYWRpbmdfZml4dHVyZV90ZWFyZG93bik7Ci0gICAgcmV0dXJu
IGdfdGVzdF9ydW4oKTsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMv
dGVzdG1pbWVoYW5kbGluZy5jIGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdG1pbWVoYW5k
bGluZy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDhlMWM2Li4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RtaW1laGFuZGxpbmcuYworKysgL2Rldi9u
dWxsCkBAIC0xLDIwMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEphbiBNaWNo
YWVsIEFsb256bwotICogQ29weXJpZ2h0IChDKSAyMDA5IEd1c3Rhdm8gTm9yb25oYSBTaWx2YQot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAidGVzdF91dGlscy5oIgotCi0jaW5jbHVkZSA8
Z2xpYi5oPgotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0jaW5jbHVkZSA8bGlic291cC9zb3Vw
Lmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgotI2lu
Y2x1ZGUgPHVuaXN0ZC5oPgotCi1HTWFpbkxvb3AqIGxvb3A7Ci1Tb3VwU2Vzc2lvbiAqc2Vzc2lv
bjsKLWNoYXIqIGJhc2VfdXJpOwotCi0vKiBGb3IgcmVhbCByZXF1ZXN0IHRlc3RpbmcgKi8KLXN0
YXRpYyB2b2lkCi1zZXJ2ZXJfY2FsbGJhY2soU291cFNlcnZlciAqc2VydmVyLCBTb3VwTWVzc2Fn
ZSAqbXNnLAotICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoLCBHSGFzaFRhYmxlICpx
dWVyeSwKLSAgICAgICAgICAgICAgICAgU291cENsaWVudENvbnRleHQgKmNvbnRleHQsIGdwb2lu
dGVyIGRhdGEpCi17Ci0gICAgaWYgKG1zZy0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgewot
ICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX05PVF9JTVBM
RU1FTlRFRCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzb3VwX21lc3NhZ2Vfc2V0
X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX09LKTsKLQotICAgIC8qIFBERiAqLwotICAgIGlmIChn
X3N0cl9lcXVhbChwYXRoLCAiL3BkZiIpKSB7Ci0gICAgICAgIGNoYXIqIGNvbnRlbnRzOwotICAg
ICAgICBnc2l6ZSBsZW5ndGg7Ci0gICAgICAgIEdFcnJvciogZXJyb3IgPSBOVUxMOwotCi0gICAg
ICAgIGdfZmlsZV9nZXRfY29udGVudHMoInRlc3QucGRmIiwgJmNvbnRlbnRzLCAmbGVuZ3RoLCAm
ZXJyb3IpOwotICAgICAgICBnX2Fzc2VydCghZXJyb3IpOwotCi0gICAgICAgIHNvdXBfbWVzc2Fn
ZV9ib2R5X2FwcGVuZChtc2ctPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGNvbnRl
bnRzLCBsZW5ndGgpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9odG1sIikp
IHsKLSAgICAgICAgY2hhciogY29udGVudHM7Ci0gICAgICAgIGdzaXplIGxlbmd0aDsKLSAgICAg
ICAgR0Vycm9yKiBlcnJvciA9IE5VTEw7Ci0KLSAgICAgICAgZ19maWxlX2dldF9jb250ZW50cygi
dGVzdC5odG1sIiwgJmNvbnRlbnRzLCAmbGVuZ3RoLCAmZXJyb3IpOwotICAgICAgICBnX2Fzc2Vy
dCghZXJyb3IpOwotCi0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtc2ctPnJlc3Bv
bnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGNvbnRlbnRzLCBsZW5ndGgpOwotICAgIH0gZWxz
ZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi90ZXh0IikpIHsKLSAgICAgICAgY2hhciogY29udGVu
dHM7Ci0gICAgICAgIGdzaXplIGxlbmd0aDsKLSAgICAgICAgR0Vycm9yKiBlcnJvciA9IE5VTEw7
Ci0KLSAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1zZy0+cmVzcG9uc2VfaGVh
ZGVycywgIkNvbnRlbnQtRGlzcG9zaXRpb24iLCAiYXR0YWNobWVudDsgZmlsZW5hbWU9dGVzdC50
eHQiKTsKLQotICAgICAgICBnX2ZpbGVfZ2V0X2NvbnRlbnRzKCJ0ZXN0LnR4dCIsICZjb250ZW50
cywgJmxlbmd0aCwgJmVycm9yKTsKLSAgICAgICAgZ19hc3NlcnQoIWVycm9yKTsKLQotICAgICAg
ICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobXNnLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9S
WV9UQUtFLCBjb250ZW50cywgbGVuZ3RoKTsKLSAgICB9Ci0KLSAgICBzb3VwX21lc3NhZ2VfYm9k
eV9jb21wbGV0ZShtc2ctPnJlc3BvbnNlX2JvZHkpOwotfQotCi1zdGF0aWMgdm9pZCBpZGxlX3F1
aXRfbG9vcF9jYihXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgR1BhcmFtU3BlYyogcHNwZWMsIGdw
b2ludGVyIGRhdGEpCi17Ci0gICAgaWYgKHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMo
d2ViX3ZpZXcpID09IFdFQktJVF9MT0FEX0ZJTklTSEVEIHx8Ci0gICAgICAgIHdlYmtpdF93ZWJf
dmlld19nZXRfbG9hZF9zdGF0dXMod2ViX3ZpZXcpID09IFdFQktJVF9MT0FEX0ZBSUxFRCkKLSAg
ICAgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKLX0KLQotc3RhdGljIGdib29sZWFuIG1pbWVf
dHlwZV9wb2xpY3lfZGVjaXNpb25fcmVxdWVzdGVkX2NiKFdlYktpdFdlYlZpZXcqIHZpZXcsIFdl
YktpdFdlYkZyYW1lKiBmcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBXZWJLaXROZXR3b3JrUmVxdWVzdCogcmVxdWVzdCwgY29uc3Qg
Y2hhciogbWltZV90eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFdlYktpdFdlYlBvbGljeURlY2lzaW9uKiBkZWNpc2lvbiwgZ3BvaW50
ZXIgZGF0YSkKLXsKLSAgICBjaGFyKiB0eXBlID0gKGNoYXIqKWRhdGE7Ci0KLSAgICBpZiAoZ19z
dHJfZXF1YWwodHlwZSwgInBkZiIpKSB7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cihtaW1lX3R5
cGUsID09LCAiYXBwbGljYXRpb24vcGRmIik7Ci0gICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2Vi
X3ZpZXdfY2FuX3Nob3dfbWltZV90eXBlKHZpZXcsIG1pbWVfdHlwZSkpOwotICAgIH0gZWxzZSBp
ZiAoZ19zdHJfZXF1YWwodHlwZSwgImh0bWwiKSkgewotICAgICAgICBnX2Fzc2VydF9jbXBzdHIo
bWltZV90eXBlLCA9PSwgInRleHQvaHRtbCIpOwotICAgICAgICBnX2Fzc2VydCh3ZWJraXRfd2Vi
X3ZpZXdfY2FuX3Nob3dfbWltZV90eXBlKHZpZXcsIG1pbWVfdHlwZSkpOwotICAgIH0gZWxzZSBp
ZiAoZ19zdHJfZXF1YWwodHlwZSwgInRleHQiKSkgewotICAgICAgICBXZWJLaXROZXR3b3JrUmVz
cG9uc2UqIHJlc3BvbnNlID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfbmV0d29ya19yZXNwb25zZShm
cmFtZSk7Ci0gICAgICAgIFNvdXBNZXNzYWdlKiBtZXNzYWdlID0gd2Via2l0X25ldHdvcmtfcmVz
cG9uc2VfZ2V0X21lc3NhZ2UocmVzcG9uc2UpOwotICAgICAgICBjaGFyKiBkaXNwb3NpdGlvbjsK
LQotICAgICAgICBnX2Fzc2VydChtZXNzYWdlKTsKLSAgICAgICAgc291cF9tZXNzYWdlX2hlYWRl
cnNfZ2V0X2NvbnRlbnRfZGlzcG9zaXRpb24obWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRpc3Bv
c2l0aW9uLCBOVUxMKTsKLSAgICAgICAgZ19vYmplY3RfdW5yZWYocmVzcG9uc2UpOwotCi0gICAg
ICAgIGdfYXNzZXJ0X2NtcHN0cihkaXNwb3NpdGlvbiwgPT0sICJhdHRhY2htZW50Iik7Ci0gICAg
ICAgIGdfZnJlZShkaXNwb3NpdGlvbik7Ci0KLSAgICAgICAgZ19hc3NlcnRfY21wc3RyKG1pbWVf
dHlwZSwgPT0sICJ0ZXh0L3BsYWluIik7Ci0gICAgICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmll
d19jYW5fc2hvd19taW1lX3R5cGUodmlldywgbWltZV90eXBlKSk7Ci0gICAgfQotCi0gICAgZ19m
cmVlKHR5cGUpOwotCi0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0UmVt
b3RlTWltZVR5cGUoY29uc3Qgdm9pZCogZGF0YSkKLXsKLSAgICBjb25zdCBjaGFyKiBuYW1lID0g
KGNvbnN0IGNoYXIqKSBkYXRhOwotICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSBXRUJLSVRfV0VC
X1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBnX29iamVjdF9yZWZfc2luayhHX09C
SkVDVCh2aWV3KSk7Ci0KLSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwot
Ci0gICAgZ19vYmplY3RfY29ubmVjdChHX09CSkVDVCh2aWV3KSwKLSAgICAgICAgICAgICAgICAg
ICAgICJzaWduYWw6Om5vdGlmeTo6bG9hZC1zdGF0dXMiLCBpZGxlX3F1aXRfbG9vcF9jYiwgTlVM
TCwKLSAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6Om1pbWUtdHlwZS1wb2xpY3ktZGVjaXNp
b24tcmVxdWVzdGVkIiwgbWltZV90eXBlX3BvbGljeV9kZWNpc2lvbl9yZXF1ZXN0ZWRfY2IsIGdf
c3RyZHVwKG5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0KLSAgICBjaGFyKiBl
ZmZlY3RpdmVfdXJpID0gZ19zdHJkdXBfcHJpbnRmKCIlcyVzIiwgYmFzZV91cmksIG5hbWUpOwot
ICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh2aWV3LCBlZmZlY3RpdmVfdXJpKTsKLSAgICBn
X2ZyZWUoZWZmZWN0aXZlX3VyaSk7Ci0KLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAg
ICBnX29iamVjdF91bnJlZih2aWV3KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdExvY2FsTWltZVR5
cGUoY29uc3Qgdm9pZCogZGF0YSkKLXsKLSAgICAgY29uc3QgY2hhciogdHlwZU5hbWUgPSAoY29u
c3QgY2hhciopIGRhdGE7Ci0gICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSBXRUJLSVRfV0VCX1ZJ
RVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICAgZ19vYmplY3RfcmVmX3NpbmsoR19PQkpF
Q1QodmlldykpOwotCi0gICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7Ci0K
LSAgICAgZ19vYmplY3RfY29ubmVjdChHX09CSkVDVCh2aWV3KSwKLSAgICAgICAgICAgICAgICAg
ICAgICAic2lnbmFsOjpub3RpZnk6OmxvYWQtc3RhdHVzIiwgaWRsZV9xdWl0X2xvb3BfY2IsIE5V
TEwsCi0gICAgICAgICAgICAgICAgICAgICAgInNpZ25hbDo6bWltZS10eXBlLXBvbGljeS1kZWNp
c2lvbi1yZXF1ZXN0ZWQiLCBtaW1lX3R5cGVfcG9saWN5X2RlY2lzaW9uX3JlcXVlc3RlZF9jYiwg
Z19zdHJkdXAodHlwZU5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotCi0gICAg
IGdjaGFyKiBmaWxlbmFtZSA9IGdfc3RyZHVwX3ByaW50ZigidGVzdC4lcyIsIHR5cGVOYW1lKTsK
LSAgICAgR0ZpbGUqIGZpbGUgPSBnX2ZpbGVfbmV3X2Zvcl9wYXRoKGZpbGVuYW1lKTsKLSAgICAg
Z19mcmVlKGZpbGVuYW1lKTsKLQotICAgICBnY2hhciogZmlsZVVSSSA9IGdfZmlsZV9nZXRfdXJp
KGZpbGUpOwotICAgICBnX29iamVjdF91bnJlZihmaWxlKTsKLQotICAgICB3ZWJraXRfd2ViX3Zp
ZXdfbG9hZF91cmkodmlldywgZmlsZVVSSSk7Ci0gICAgIGdfZnJlZShmaWxlVVJJKTsKLSAKLSAg
ICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotICAgICBnX29iamVjdF91bnJlZih2aWV3KTsKLX0K
LQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotewotICAgIFNvdXBTZXJ2ZXIqIHNl
cnZlcjsKLSAgICBTb3VwVVJJKiBzb3VwX3VyaTsKLQotICAgIGd0a190ZXN0X2luaXQoJmFyZ2Ms
ICZhcmd2LCBOVUxMKTsKLQotICAgIC8qIEhvcGVmdWxseSBtYWtlIHRlc3QgaW5kZXBlbmRlbnQg
b2YgdGhlIHBhdGggaXQncyBjYWxsZWQgZnJvbS4gKi8KLSAgICB0ZXN0dXRpbHNfcmVsYXRpdmVf
Y2hkaXIoIlNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Jlc291cmNlcy90ZXN0Lmh0bWwiLCBhcmd2
WzBdKTsKLQotICAgIHNlcnZlciA9IHNvdXBfc2VydmVyX25ldyhTT1VQX1NFUlZFUl9QT1JULCAw
LCBOVUxMKTsKLSAgICBzb3VwX3NlcnZlcl9ydW5fYXN5bmMoc2VydmVyKTsKLQotICAgIHNvdXBf
c2VydmVyX2FkZF9oYW5kbGVyKHNlcnZlciwgTlVMTCwgc2VydmVyX2NhbGxiYWNrLCBOVUxMLCBO
VUxMKTsKLQotICAgIHNvdXBfdXJpID0gc291cF91cmlfbmV3KCJodHRwOi8vMTI3LjAuMC4xLyIp
OwotICAgIHNvdXBfdXJpX3NldF9wb3J0KHNvdXBfdXJpLCBzb3VwX3NlcnZlcl9nZXRfcG9ydChz
ZXJ2ZXIpKTsKLQotICAgIGJhc2VfdXJpID0gc291cF91cmlfdG9fc3RyaW5nKHNvdXBfdXJpLCBG
QUxTRSk7Ci0gICAgc291cF91cmlfZnJlZShzb3VwX3VyaSk7Ci0KLSAgICBnX3Rlc3RfYnVnX2Jh
c2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwotICAgIGdfdGVzdF9hZGRfZGF0YV9mdW5j
KCIvd2Via2l0L21pbWUvcmVtb3RlLVBERiIsICJwZGYiLCB0ZXN0UmVtb3RlTWltZVR5cGUpOwot
ICAgIGdfdGVzdF9hZGRfZGF0YV9mdW5jKCIvd2Via2l0L21pbWUvcmVtb3RlLUhUTUwiLCAiaHRt
bCIsIHRlc3RSZW1vdGVNaW1lVHlwZSk7Ci0gICAgZ190ZXN0X2FkZF9kYXRhX2Z1bmMoIi93ZWJr
aXQvbWltZS9yZW1vdGUtVEVYVCIsICJ0ZXh0IiwgdGVzdFJlbW90ZU1pbWVUeXBlKTsKLSAgICBn
X3Rlc3RfYWRkX2RhdGFfZnVuYygiL3dlYmtpdC9taW1lL2xvY2FsLVBERiIsICJwZGYiLCB0ZXN0
TG9jYWxNaW1lVHlwZSk7Ci0gICAgZ190ZXN0X2FkZF9kYXRhX2Z1bmMoIi93ZWJraXQvbWltZS9s
b2NhbC1IVE1MIiwgImh0bWwiLCB0ZXN0TG9jYWxNaW1lVHlwZSk7Ci0gICAgZ190ZXN0X2FkZF9k
YXRhX2Z1bmMoIi93ZWJraXQvbWltZS9sb2NhbC1URVhUIiwgInRleHQiLCB0ZXN0TG9jYWxNaW1l
VHlwZSk7Ci0KLSAgICByZXR1cm4gZ190ZXN0X3J1bigpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9ndGsvdGVzdHMvdGVzdG5ldHdvcmtyZXF1ZXN0LmMgYi9Tb3VyY2UvV2ViS2l0L2d0
ay90ZXN0cy90ZXN0bmV0d29ya3JlcXVlc3QuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMWIyYzkwZi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0bmV0
d29ya3JlcXVlc3QuYworKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDkgR3VzdGF2byBOb3JvbmhhIFNpbHZhCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPGdsaWIu
aD4KLSNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNs
dWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+Ci0KLXN0YXRpYyB2b2lk
IHRlc3RfbmV0d29ya19yZXF1ZXN0X2NyZWF0ZV9kZXN0cm95KCkKLXsKLSAgICBXZWJLaXROZXR3
b3JrUmVxdWVzdCogcmVxdWVzdDsKLSAgICBTb3VwTWVzc2FnZSogbWVzc2FnZTsKLQotICAgIC8q
IFRlc3QgY3JlYXRpb24gd2l0aCBVUkkgKi8KLSAgICByZXF1ZXN0ID0gV0VCS0lUX05FVFdPUktf
UkVRVUVTVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfTkVUV09SS19SRVFVRVNULCAidXJpIiwg
Imh0dHA6Ly9kZWJpYW4ub3JnLyIsIE5VTEwpKTsKLSAgICBnX2Fzc2VydChXRUJLSVRfSVNfTkVU
V09SS19SRVFVRVNUKHJlcXVlc3QpKTsKLSAgICBtZXNzYWdlID0gd2Via2l0X25ldHdvcmtfcmVx
dWVzdF9nZXRfbWVzc2FnZShyZXF1ZXN0KTsKLSAgICBnX2Fzc2VydCghbWVzc2FnZSk7Ci0gICAg
Z19vYmplY3RfdW5yZWYocmVxdWVzdCk7Ci0KLSAgICAvKiBUZXN0IGNyZWF0aW9uIHdpdGggU291
cE1lc3NhZ2UgKi8KLSAgICBtZXNzYWdlID0gc291cF9tZXNzYWdlX25ldygiR0VUIiwgImh0dHA6
Ly9kZWJpYW4ub3JnLyIpOwotICAgIHJlcXVlc3QgPSBXRUJLSVRfTkVUV09SS19SRVFVRVNUKGdf
b2JqZWN0X25ldyhXRUJLSVRfVFlQRV9ORVRXT1JLX1JFUVVFU1QsICJtZXNzYWdlIiwgbWVzc2Fn
ZSwgTlVMTCkpOwotICAgIGdfYXNzZXJ0KFdFQktJVF9JU19ORVRXT1JLX1JFUVVFU1QocmVxdWVz
dCkpOwotICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChtZXNzYWdlKS0+cmVmX2NvdW50LCA9
PSwgMik7Ci0gICAgZ19vYmplY3RfdW5yZWYocmVxdWVzdCk7Ci0gICAgZ19hc3NlcnRfY21waW50
KEdfT0JKRUNUKG1lc3NhZ2UpLT5yZWZfY291bnQsID09LCAxKTsKLSAgICBnX29iamVjdF91bnJl
ZihtZXNzYWdlKTsKLQotICAgIC8qIFRlc3QgY3JlYXRpb24gd2l0aCBib3RoIFNvdXBNZXNzYWdl
IGFuZCBVUkkgKi8KLSAgICBtZXNzYWdlID0gc291cF9tZXNzYWdlX25ldygiR0VUIiwgImh0dHA6
Ly9kZWJpYW4ub3JnLyIpOwotICAgIHJlcXVlc3QgPSBXRUJLSVRfTkVUV09SS19SRVFVRVNUKGdf
b2JqZWN0X25ldyhXRUJLSVRfVFlQRV9ORVRXT1JLX1JFUVVFU1QsICJtZXNzYWdlIiwgbWVzc2Fn
ZSwgInVyaSIsICJodHRwOi8vZ25vbWUub3JnLyIsIE5VTEwpKTsKLSAgICBnX2Fzc2VydChXRUJL
SVRfSVNfTkVUV09SS19SRVFVRVNUKHJlcXVlc3QpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoR19P
QkpFQ1QobWVzc2FnZSktPnJlZl9jb3VudCwgPT0sIDIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3
ZWJraXRfbmV0d29ya19yZXF1ZXN0X2dldF91cmkocmVxdWVzdCksID09LCAiaHR0cDovL2dub21l
Lm9yZy8iKTsKLSAgICBnX29iamVjdF91bnJlZihyZXF1ZXN0KTsKLSAgICBnX2Fzc2VydF9jbXBp
bnQoR19PQkpFQ1QobWVzc2FnZSktPnJlZl9jb3VudCwgPT0sIDEpOwotICAgIGdfb2JqZWN0X3Vu
cmVmKG1lc3NhZ2UpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X25ldHdvcmtfcmVxdWVzdF9wcm9w
ZXJ0aWVzKCkKLXsKLSAgICBXZWJLaXROZXR3b3JrUmVxdWVzdCogcmVxdWVzdDsKLSAgICBTb3Vw
TWVzc2FnZSogbWVzc2FnZTsKLSAgICBnY2hhciogc291cFVSSTsKLQotICAgIC8qIFRlc3QgVVJJ
IGlzIHNldCBjb3JyZWN0bHkgd2hlbiBjcmVhdGluZyB3aXRoIFVSSSAqLwotICAgIHJlcXVlc3Qg
PSB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X25ldygiaHR0cDovL2RlYmlhbi5vcmcvIik7Ci0gICAg
Z19hc3NlcnQoV0VCS0lUX0lTX05FVFdPUktfUkVRVUVTVChyZXF1ZXN0KSk7Ci0gICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KSwgPT0sICJo
dHRwOi8vZGViaWFuLm9yZy8iKTsKLSAgICBnX29iamVjdF91bnJlZihyZXF1ZXN0KTsKLQotICAg
IC8qIFRlc3QgVVJJIGlzIHNldCBjb3JyZWN0bHkgd2hlbiBjcmVhdGluZyB3aXRoIE1lc3NhZ2Ug
Ki8KLSAgICBtZXNzYWdlID0gc291cF9tZXNzYWdlX25ldygiR0VUIiwgImh0dHA6Ly9kZWJpYW4u
b3JnLyIpOwotICAgIHJlcXVlc3QgPSBXRUJLSVRfTkVUV09SS19SRVFVRVNUKGdfb2JqZWN0X25l
dyhXRUJLSVRfVFlQRV9ORVRXT1JLX1JFUVVFU1QsICJtZXNzYWdlIiwgbWVzc2FnZSwgTlVMTCkp
OwotICAgIGdfYXNzZXJ0KFdFQktJVF9JU19ORVRXT1JLX1JFUVVFU1QocmVxdWVzdCkpOwotICAg
IGdfb2JqZWN0X3VucmVmKG1lc3NhZ2UpOwotCi0gICAgbWVzc2FnZSA9IHdlYmtpdF9uZXR3b3Jr
X3JlcXVlc3RfZ2V0X21lc3NhZ2UocmVxdWVzdCk7Ci0gICAgc291cFVSSSA9IHNvdXBfdXJpX3Rv
X3N0cmluZyhzb3VwX21lc3NhZ2VfZ2V0X3VyaShtZXNzYWdlKSwgRkFMU0UpOwotICAgIGdfYXNz
ZXJ0X2NtcHN0cihzb3VwVVJJLCA9PSwgImh0dHA6Ly9kZWJpYW4ub3JnLyIpOwotICAgIGdfZnJl
ZShzb3VwVVJJKTsKLQotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfbmV0d29ya19yZXF1ZXN0
X2dldF91cmkocmVxdWVzdCksID09LCAiaHR0cDovL2RlYmlhbi5vcmcvIik7Ci0gICAgZ19vYmpl
Y3RfdW5yZWYocmVxdWVzdCk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikK
LXsKLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAgICBnX3Rlc3Rf
YnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwotICAgIGdfdGVzdF9hZGRfZnVu
YygiL3dlYmtpdC9uZXR3b3JrcmVxdWVzdC9jcmVhdGVkZXN0cm95IiwgdGVzdF9uZXR3b3JrX3Jl
cXVlc3RfY3JlYXRlX2Rlc3Ryb3kpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9uZXR3
b3JrcmVxdWVzdC9wcm9wZXJ0aWVzIiwgdGVzdF9uZXR3b3JrX3JlcXVlc3RfcHJvcGVydGllcyk7
Ci0gICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2d0ay90ZXN0cy90ZXN0bmV0d29ya3Jlc3BvbnNlLmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0
cy90ZXN0bmV0d29ya3Jlc3BvbnNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4
MDZhYTEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdG5ldHdvcmty
ZXNwb25zZS5jCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOSBHdXN0YXZvIE5vcm9uaGEgU2lsdmEKLSAqIENvcHlyaWdodCAoQykgMjAwOSBD
b2xsYWJvcmEgTHRkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNp
bmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z2xpYi9nc3Rk
aW8uaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVk
ZSA8d2Via2l0L3dlYmtpdC5oPgotCi1zdGF0aWMgdm9pZCB0ZXN0X25ldHdvcmtfcmVzcG9uc2Vf
Y3JlYXRlX2Rlc3Ryb3koKQotewotICAgIFdlYktpdE5ldHdvcmtSZXNwb25zZSogcmVzcG9uc2U7
Ci0gICAgU291cE1lc3NhZ2UqIG1lc3NhZ2U7Ci0KLSAgICAvKiBUZXN0IGNyZWF0aW9uIHdpdGgg
VVJJICovCi0gICAgcmVzcG9uc2UgPSBXRUJLSVRfTkVUV09SS19SRVNQT05TRShnX29iamVjdF9u
ZXcoV0VCS0lUX1RZUEVfTkVUV09SS19SRVNQT05TRSwgInVyaSIsICJodHRwOi8vZGViaWFuLm9y
Zy8iLCBOVUxMKSk7Ci0gICAgZ19hc3NlcnQoV0VCS0lUX0lTX05FVFdPUktfUkVTUE9OU0UocmVz
cG9uc2UpKTsKLSAgICBtZXNzYWdlID0gd2Via2l0X25ldHdvcmtfcmVzcG9uc2VfZ2V0X21lc3Nh
Z2UocmVzcG9uc2UpOwotICAgIGdfYXNzZXJ0KCFtZXNzYWdlKTsKLSAgICBnX29iamVjdF91bnJl
ZihyZXNwb25zZSk7Ci0KLSAgICAvKiBUZXN0IGNyZWF0aW9uIHdpdGggU291cE1lc3NhZ2UgKi8K
LSAgICBtZXNzYWdlID0gc291cF9tZXNzYWdlX25ldygiR0VUIiwgImh0dHA6Ly9kZWJpYW4ub3Jn
LyIpOwotICAgIHJlc3BvbnNlID0gV0VCS0lUX05FVFdPUktfUkVTUE9OU0UoZ19vYmplY3RfbmV3
KFdFQktJVF9UWVBFX05FVFdPUktfUkVTUE9OU0UsICJtZXNzYWdlIiwgbWVzc2FnZSwgTlVMTCkp
OwotICAgIGdfYXNzZXJ0KFdFQktJVF9JU19ORVRXT1JLX1JFU1BPTlNFKHJlc3BvbnNlKSk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKG1lc3NhZ2UpLT5yZWZfY291bnQsID09LCAyKTsK
LSAgICBnX29iamVjdF91bnJlZihyZXNwb25zZSk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdfT0JK
RUNUKG1lc3NhZ2UpLT5yZWZfY291bnQsID09LCAxKTsKLSAgICBnX29iamVjdF91bnJlZihtZXNz
YWdlKTsKLQotICAgIC8qIFRlc3QgY3JlYXRpb24gd2l0aCBib3RoIFNvdXBNZXNzYWdlIGFuZCBV
UkkgKi8KLSAgICBtZXNzYWdlID0gc291cF9tZXNzYWdlX25ldygiR0VUIiwgImh0dHA6Ly9kZWJp
YW4ub3JnLyIpOwotICAgIHJlc3BvbnNlID0gV0VCS0lUX05FVFdPUktfUkVTUE9OU0UoZ19vYmpl
Y3RfbmV3KFdFQktJVF9UWVBFX05FVFdPUktfUkVTUE9OU0UsICJtZXNzYWdlIiwgbWVzc2FnZSwg
InVyaSIsICJodHRwOi8vZ25vbWUub3JnLyIsIE5VTEwpKTsKLSAgICBnX2Fzc2VydChXRUJLSVRf
SVNfTkVUV09SS19SRVNQT05TRShyZXNwb25zZSkpOwotICAgIGdfYXNzZXJ0X2NtcGludChHX09C
SkVDVChtZXNzYWdlKS0+cmVmX2NvdW50LCA9PSwgMik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdl
YmtpdF9uZXR3b3JrX3Jlc3BvbnNlX2dldF91cmkocmVzcG9uc2UpLCA9PSwgImh0dHA6Ly9nbm9t
ZS5vcmcvIik7Ci0gICAgZ19vYmplY3RfdW5yZWYocmVzcG9uc2UpOwotICAgIGdfYXNzZXJ0X2Nt
cGludChHX09CSkVDVChtZXNzYWdlKS0+cmVmX2NvdW50LCA9PSwgMSk7Ci0gICAgZ19vYmplY3Rf
dW5yZWYobWVzc2FnZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RfbmV0d29ya19yZXNwb25zZV9w
cm9wZXJ0aWVzKCkKLXsKLSAgICBXZWJLaXROZXR3b3JrUmVzcG9uc2UqIHJlc3BvbnNlOwotICAg
IFNvdXBNZXNzYWdlKiBtZXNzYWdlOwotICAgIGdjaGFyKiBzb3VwVVJJOwotCi0gICAgLyogVGVz
dCBVUkkgaXMgc2V0IGNvcnJlY3RseSB3aGVuIGNyZWF0aW5nIHdpdGggVVJJICovCi0gICAgcmVz
cG9uc2UgPSB3ZWJraXRfbmV0d29ya19yZXNwb25zZV9uZXcoImh0dHA6Ly9kZWJpYW4ub3JnLyIp
OwotICAgIGdfYXNzZXJ0KFdFQktJVF9JU19ORVRXT1JLX1JFU1BPTlNFKHJlc3BvbnNlKSk7Ci0g
ICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9uZXR3b3JrX3Jlc3BvbnNlX2dldF91cmkocmVzcG9u
c2UpLCA9PSwgImh0dHA6Ly9kZWJpYW4ub3JnLyIpOwotICAgIGdfb2JqZWN0X3VucmVmKHJlc3Bv
bnNlKTsKLQotICAgIC8qIFRlc3QgVVJJIGlzIHNldCBjb3JyZWN0bHkgd2hlbiBjcmVhdGluZyB3
aXRoIE1lc3NhZ2UgKi8KLSAgICBtZXNzYWdlID0gc291cF9tZXNzYWdlX25ldygiR0VUIiwgImh0
dHA6Ly9kZWJpYW4ub3JnLyIpOwotICAgIHJlc3BvbnNlID0gV0VCS0lUX05FVFdPUktfUkVTUE9O
U0UoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX05FVFdPUktfUkVTUE9OU0UsICJtZXNzYWdlIiwg
bWVzc2FnZSwgTlVMTCkpOwotICAgIGdfYXNzZXJ0KFdFQktJVF9JU19ORVRXT1JLX1JFU1BPTlNF
KHJlc3BvbnNlKSk7Ci0gICAgZ19vYmplY3RfdW5yZWYobWVzc2FnZSk7Ci0KLSAgICBtZXNzYWdl
ID0gd2Via2l0X25ldHdvcmtfcmVzcG9uc2VfZ2V0X21lc3NhZ2UocmVzcG9uc2UpOwotICAgIHNv
dXBVUkkgPSBzb3VwX3VyaV90b19zdHJpbmcoc291cF9tZXNzYWdlX2dldF91cmkobWVzc2FnZSks
IEZBTFNFKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc291cFVSSSwgPT0sICJodHRwOi8vZGViaWFu
Lm9yZy8iKTsKLSAgICBnX2ZyZWUoc291cFVSSSk7Ci0KLSAgICBnX2Fzc2VydF9jbXBzdHIod2Vi
a2l0X25ldHdvcmtfcmVzcG9uc2VfZ2V0X3VyaShyZXNwb25zZSksID09LCAiaHR0cDovL2RlYmlh
bi5vcmcvIik7Ci0gICAgZ19vYmplY3RfdW5yZWYocmVzcG9uc2UpOwotfQotCi1pbnQgbWFpbihp
bnQgYXJnYywgY2hhcioqIGFyZ3YpCi17Ci0gICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3Ys
IE5VTEwpOwotCi0gICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8i
KTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvbmV0d29ya3Jlc3BvbnNlL2NyZWF0ZWRl
c3Ryb3kiLCB0ZXN0X25ldHdvcmtfcmVzcG9uc2VfY3JlYXRlX2Rlc3Ryb3kpOwotICAgIGdfdGVz
dF9hZGRfZnVuYygiL3dlYmtpdC9uZXR3b3JrcmVzcG9uc2UvcHJvcGVydGllcyIsIHRlc3RfbmV0
d29ya19yZXNwb25zZV9wcm9wZXJ0aWVzKTsKLSAgICByZXR1cm4gZ190ZXN0X3J1biAoKTsKLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJiYWNrZm9yd2FyZGxp
c3QuYyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJiYWNrZm9yd2FyZGxpc3QuYwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzc4MmQ0MC4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2ViYmFja2ZvcndhcmRsaXN0LmMKKysrIC9kZXYvbnVs
bApAQCAtMSwzMjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBIb2xnZXIgSGFu
cyBQZXRlciBGcmV5dGhlcgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8Z2xpYi5oPgot
I2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+Ci0KLXN0YXRp
YyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbGlmZXRpbWUodm9pZCkKLXsKLSAg
ICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OwotICAgIFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCog
YmFja0ZvcndhcmRMaXN0OwotICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBjdXJyZW50SXRlbTsK
LSAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogZm9yd2FyZEl0ZW07Ci0gICAgV2ViS2l0V2ViSGlz
dG9yeUl0ZW0qIGJhY2tJdGVtOwotICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBudGhJdGVtOwot
ICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBpdGVtMTsKLSAgICBXZWJLaXRXZWJIaXN0b3J5SXRl
bSogaXRlbTI7Ci0gICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGl0ZW0zOwotICAgIFdlYktpdFdl
Ykhpc3RvcnlJdGVtKiBpdGVtNDsKLSAgICBHTGlzdCogYmFja0xpc3QgPSBOVUxMOwotICAgIEdM
aXN0KiBmb3J3YXJkTGlzdCA9IE5VTEw7Ci0gICAgZ190ZXN0X2J1ZygiMTk4OTgiKTsKLQotICAg
IHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBn
X29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKLSAgICBiYWNrRm9yd2FyZExpc3QgPSB3ZWJraXRf
d2ViX3ZpZXdfZ2V0X2JhY2tfZm9yd2FyZF9saXN0KHdlYlZpZXcpOwotICAgIGdfYXNzZXJ0X2Nt
cGludChHX09CSkVDVChiYWNrRm9yd2FyZExpc3QpLT5yZWZfY291bnQsID09LCAxKTsKLQotICAg
IC8qIGFkZCB0ZXN0IGl0ZW1zICovCi0gICAgaXRlbTEgPSB3ZWJraXRfd2ViX2hpc3RvcnlfaXRl
bV9uZXdfd2l0aF9kYXRhKCJodHRwOi8vZXhhbXBsZS5jb20vMS8iLCAiU2l0ZSAxIik7Ci0gICAg
d2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9hZGRfaXRlbShiYWNrRm9yd2FyZExpc3QsIGl0
ZW0xKTsKLSAgICBnX29iamVjdF91bnJlZihpdGVtMSk7Ci0KLSAgICBpdGVtMiA9IHdlYmtpdF93
ZWJfaGlzdG9yeV9pdGVtX25ld193aXRoX2RhdGEoImh0dHA6Ly9leGFtcGxlLmNvbS8yLyIsICJT
aXRlIDIiKTsKLSAgICB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2FkZF9pdGVtKGJhY2tG
b3J3YXJkTGlzdCwgaXRlbTIpOwotICAgIGdfb2JqZWN0X3VucmVmKGl0ZW0yKTsKLQotICAgIGl0
ZW0zID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dpdGhfZGF0YSgiaHR0cDovL2V4YW1w
bGUuY29tLzMvIiwgIlNpdGUgMyIpOwotICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3Rf
YWRkX2l0ZW0oYmFja0ZvcndhcmRMaXN0LCBpdGVtMyk7Ci0gICAgZ19vYmplY3RfdW5yZWYoaXRl
bTMpOwotCi0gICAgaXRlbTQgPSB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9uZXdfd2l0aF9kYXRh
KCJodHRwOi8vZXhhbXBsZS5jb20vNC8iLCAiU2l0ZSA0Iik7Ci0gICAgd2Via2l0X3dlYl9iYWNr
X2ZvcndhcmRfbGlzdF9hZGRfaXRlbShiYWNrRm9yd2FyZExpc3QsIGl0ZW00KTsKLSAgICBnX29i
amVjdF91bnJlZihpdGVtNCk7Ci0KLSAgICAvKiBtYWtlIHN1cmUgdGhlc2UgZnVuY3Rpb25zIGRv
bid0IGFkZCB1bm5lY2Vzc2FyeSByZWYgdG8gdGhlIGhpc3RvcnkgaXRlbSAqLwotICAgIGJhY2tJ
dGVtID0gd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19pdGVtKGJhY2tGb3J3
YXJkTGlzdCk7Ci0gICAgZ19vYmplY3RfcmVmKGJhY2tJdGVtKTsKLSAgICBnX2Fzc2VydF9jbXBp
bnQoR19PQkpFQ1QoYmFja0l0ZW0pLT5yZWZfY291bnQsID09LCAyKTsKLSAgICBnX29iamVjdF91
bnJlZihiYWNrSXRlbSk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKGJhY2tJdGVtKS0+
cmVmX2NvdW50LCA9PSwgMSk7Ci0KLSAgICBjdXJyZW50SXRlbSA9IHdlYmtpdF93ZWJfYmFja19m
b3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbShiYWNrRm9yd2FyZExpc3QpOwotICAgIGdfb2Jq
ZWN0X3JlZihjdXJyZW50SXRlbSk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKGN1cnJl
bnRJdGVtKS0+cmVmX2NvdW50LCA9PSwgMik7Ci0gICAgZ19vYmplY3RfdW5yZWYoY3VycmVudEl0
ZW0pOwotICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChjdXJyZW50SXRlbSktPnJlZl9jb3Vu
dCwgPT0sIDEpOwotCi0gICAgd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nb190b19pdGVt
KGJhY2tGb3J3YXJkTGlzdCwgaXRlbTIpOwotICAgIGZvcndhcmRJdGVtID0gd2Via2l0X3dlYl9i
YWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9pdGVtKGJhY2tGb3J3YXJkTGlzdCk7Ci0gICAg
Z19vYmplY3RfcmVmKGZvcndhcmRJdGVtKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1Qo
Zm9yd2FyZEl0ZW0pLT5yZWZfY291bnQsID09LCAyKTsKLSAgICBnX29iamVjdF91bnJlZihmb3J3
YXJkSXRlbSk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKGZvcndhcmRJdGVtKS0+cmVm
X2NvdW50LCA9PSwgMSk7Ci0KLSAgICBudGhJdGVtID0gd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRf
bGlzdF9nZXRfbnRoX2l0ZW0oYmFja0ZvcndhcmRMaXN0LCAxKTsKLSAgICBnX29iamVjdF9yZWYo
bnRoSXRlbSk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKG50aEl0ZW0pLT5yZWZfY291
bnQsID09LCAyKTsKLSAgICBnX29iamVjdF91bnJlZihudGhJdGVtKTsKLSAgICBnX2Fzc2VydF9j
bXBpbnQoR19PQkpFQ1QobnRoSXRlbSktPnJlZl9jb3VudCwgPT0sIDEpOwotCi0gICAgYmFja0xp
c3QgPSB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3Rfd2l0aF9saW1p
dChiYWNrRm9yd2FyZExpc3QsIDUpOwotICAgIGZvciAoOyBiYWNrTGlzdDsgYmFja0xpc3QgPSBi
YWNrTGlzdC0+bmV4dCkKLSAgICAgICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKGJhY2tMaXN0
LT5kYXRhKS0+cmVmX2NvdW50LCA9PSwgMSk7Ci0KLSAgICBmb3J3YXJkTGlzdCA9IHdlYmtpdF93
ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlzdF93aXRoX2xpbWl0KGJhY2tGb3J3
YXJkTGlzdCwgNSk7Ci0gICAgZm9yICg7IGZvcndhcmRMaXN0OyBmb3J3YXJkTGlzdCA9IGZvcndh
cmRMaXN0LT5uZXh0KQotICAgICAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoZm9yd2FyZExp
c3QtPmRhdGEpLT5yZWZfY291bnQsID09LCAxKTsKLQotICAgIGdfbGlzdF9mcmVlKGZvcndhcmRM
aXN0KTsKLSAgICBnX2xpc3RfZnJlZShiYWNrTGlzdCk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdf
T0JKRUNUKGl0ZW0xKS0+cmVmX2NvdW50LCA9PSwgMSk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdf
T0JKRUNUKGl0ZW0yKS0+cmVmX2NvdW50LCA9PSwgMSk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdf
T0JKRUNUKGl0ZW0zKS0+cmVmX2NvdW50LCA9PSwgMSk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdf
T0JKRUNUKGl0ZW00KS0+cmVmX2NvdW50LCA9PSwgMSk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdf
T0JKRUNUKGJhY2tGb3J3YXJkTGlzdCktPnJlZl9jb3VudCwgPT0sIDEpOwotICAgIGdfb2JqZWN0
X3VucmVmKHdlYlZpZXcpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfYmFja19m
b3J3YXJkX2xpc3Rfb3JkZXIodm9pZCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3Owot
ICAgIFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViQmFja0ZvcndhcmRMaXN0OwotICAgIFdl
YktpdFdlYkhpc3RvcnlJdGVtKiBpdGVtMTsKLSAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogaXRl
bTI7Ci0gICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGl0ZW0zOwotICAgIFdlYktpdFdlYkhpc3Rv
cnlJdGVtKiBpdGVtNDsKLSAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogY3VycmVudEl0ZW07Ci0g
ICAgR0xpc3QqIGJhY2tMaXN0ID0gTlVMTDsKLSAgICBHTGlzdCogZm9yd2FyZExpc3QgPSBOVUxM
OwotICAgIGdfdGVzdF9idWcoIjIyNjk0Iik7Ci0KLSAgICB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9W
SUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmll
dyk7Ci0KLSAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X21haW50YWluc19iYWNrX2ZvcndhcmRfbGlz
dCh3ZWJWaWV3LCBUUlVFKTsKLSAgICB3ZWJCYWNrRm9yd2FyZExpc3QgPSB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X2JhY2tfZm9yd2FyZF9saXN0KHdlYlZpZXcpOwotICAgIGdfYXNzZXJ0KHdlYkJhY2tG
b3J3YXJkTGlzdCk7Ci0KLSAgICAvLyBDaGVjayB0aGF0IHRoZXJlIGlzIG5vIGl0ZW0uCi0gICAg
Z19hc3NlcnQoIXdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh3
ZWJCYWNrRm9yd2FyZExpc3QpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNr
X2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0s
IDApOwotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dl
dF9iYWNrX2xlbmd0aCh3ZWJCYWNrRm9yd2FyZExpc3QpLCA9PSwgMCk7Ci0gICAgZ19hc3NlcnQo
IXdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh3ZWJWaWV3KSk7Ci0gICAgZ19hc3NlcnQo
IXdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayh3ZWJWaWV3KSk7Ci0KLSAgICAvLyBBZGQgYSBu
ZXcgaXRlbXMKLSAgICBpdGVtMSA9IHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX25ld193aXRoX2Rh
dGEoImh0dHA6Ly9leGFtcGxlLmNvbS8xLyIsICJTaXRlIDEiKTsKLSAgICB3ZWJraXRfd2ViX2Jh
Y2tfZm9yd2FyZF9saXN0X2FkZF9pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCwgaXRlbTEpOwotICAg
IGdfb2JqZWN0X3VucmVmKGl0ZW0xKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2JhY2tfZm9y
d2FyZF9saXN0X2NvbnRhaW5zX2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0LCBpdGVtMSkpOwotCi0g
ICAgaXRlbTIgPSB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9uZXdfd2l0aF9kYXRhKCJodHRwOi8v
ZXhhbXBsZS5jb20vMi8iLCAiU2l0ZSAyIik7Ci0gICAgd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRf
bGlzdF9hZGRfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QsIGl0ZW0yKTsKLSAgICBnX29iamVjdF91
bnJlZihpdGVtMik7Ci0gICAgZ19hc3NlcnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9j
b250YWluc19pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCwgaXRlbTIpKTsKLQotICAgIGl0ZW0zID0g
d2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dpdGhfZGF0YSgiaHR0cDovL2V4YW1wbGUuY29t
LzMvIiwgIlNpdGUgMyIpOwotICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfYWRkX2l0
ZW0od2ViQmFja0ZvcndhcmRMaXN0LCBpdGVtMyk7Ci0gICAgZ19vYmplY3RfdW5yZWYoaXRlbTMp
OwotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY29udGFpbnNfaXRl
bSh3ZWJCYWNrRm9yd2FyZExpc3QsIGl0ZW0zKSk7Ci0KLSAgICBpdGVtNCA9IHdlYmtpdF93ZWJf
aGlzdG9yeV9pdGVtX25ld193aXRoX2RhdGEoImh0dHA6Ly9leGFtcGxlLmNvbS80LyIsICJTaXRl
IDQiKTsKLSAgICB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2FkZF9pdGVtKHdlYkJhY2tG
b3J3YXJkTGlzdCwgaXRlbTQpOwotICAgIGdfb2JqZWN0X3VucmVmKGl0ZW00KTsKLSAgICBnX2Fz
c2VydCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2NvbnRhaW5zX2l0ZW0od2ViQmFja0Zv
cndhcmRMaXN0LCBpdGVtNCkpOwotCi0gICAgLy8gY2hlY2sgdGhlIGJhY2sgbGlzdCBvcmRlcgot
ICAgIGJhY2tMaXN0ID0gd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19saXN0
X3dpdGhfbGltaXQod2ViQmFja0ZvcndhcmRMaXN0LCA1KTsKLSAgICBnX2Fzc2VydChiYWNrTGlz
dCk7Ci0KLSAgICBjdXJyZW50SXRlbSA9IFdFQktJVF9XRUJfSElTVE9SWV9JVEVNKGJhY2tMaXN0
LT5kYXRhKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0
X3VyaShjdXJyZW50SXRlbSksID09LCAiaHR0cDovL2V4YW1wbGUuY29tLzMvIik7Ci0gICAgZ19h
c3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF90aXRsZShjdXJyZW50SXRl
bSksID09LCAiU2l0ZSAzIik7Ci0gICAgYmFja0xpc3QgPSBiYWNrTGlzdC0+bmV4dDsKLQotICAg
IGN1cnJlbnRJdGVtID0gV0VCS0lUX1dFQl9ISVNUT1JZX0lURU0oYmFja0xpc3QtPmRhdGEpOwot
ICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdXJpKGN1cnJl
bnRJdGVtKSwgPT0sICJodHRwOi8vZXhhbXBsZS5jb20vMi8iKTsKLSAgICBnX2Fzc2VydF9jbXBz
dHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3RpdGxlKGN1cnJlbnRJdGVtKSwgPT0sICJT
aXRlIDIiKTsKLSAgICBiYWNrTGlzdCA9IGJhY2tMaXN0LT5uZXh0OwotCi0gICAgY3VycmVudEl0
ZW0gPSBXRUJLSVRfV0VCX0hJU1RPUllfSVRFTShiYWNrTGlzdC0+ZGF0YSk7Ci0gICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF91cmkoY3VycmVudEl0ZW0pLCA9
PSwgImh0dHA6Ly9leGFtcGxlLmNvbS8xLyIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRf
d2ViX2hpc3RvcnlfaXRlbV9nZXRfdGl0bGUoY3VycmVudEl0ZW0pLCA9PSwgIlNpdGUgMSIpOwot
ICAgIGdfbGlzdF9mcmVlKGJhY2tMaXN0KTsKLQotICAgIC8vIGNoZWNrIHRoZSBmb3J3YXJkIGxp
c3Qgb3JkZXIKLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ29fdG9fYmFja19mb3J3YXJk
X2l0ZW0od2ViVmlldywgaXRlbTEpKTsKLSAgICBmb3J3YXJkTGlzdCA9IHdlYmtpdF93ZWJfYmFj
a19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlzdF93aXRoX2xpbWl0KHdlYkJhY2tGb3J3YXJk
TGlzdCw1KTsKLSAgICBnX2Fzc2VydChmb3J3YXJkTGlzdCk7Ci0KLSAgICBjdXJyZW50SXRlbSA9
IFdFQktJVF9XRUJfSElTVE9SWV9JVEVNKGZvcndhcmRMaXN0LT5kYXRhKTsKLSAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3VyaShjdXJyZW50SXRlbSksID09
LCAiaHR0cDovL2V4YW1wbGUuY29tLzQvIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93
ZWJfaGlzdG9yeV9pdGVtX2dldF90aXRsZShjdXJyZW50SXRlbSksID09LCAiU2l0ZSA0Iik7Ci0g
ICAgZm9yd2FyZExpc3QgPSBmb3J3YXJkTGlzdC0+bmV4dDsKLQotICAgIGN1cnJlbnRJdGVtID0g
V0VCS0lUX1dFQl9ISVNUT1JZX0lURU0oZm9yd2FyZExpc3QtPmRhdGEpOwotICAgIGdfYXNzZXJ0
X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdXJpKGN1cnJlbnRJdGVtKSwgPT0s
ICJodHRwOi8vZXhhbXBsZS5jb20vMy8iKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dl
Yl9oaXN0b3J5X2l0ZW1fZ2V0X3RpdGxlKGN1cnJlbnRJdGVtKSwgPT0sICJTaXRlIDMiKTsKLSAg
ICBmb3J3YXJkTGlzdCA9IGZvcndhcmRMaXN0LT5uZXh0OwotCi0gICAgY3VycmVudEl0ZW0gPSBX
RUJLSVRfV0VCX0hJU1RPUllfSVRFTShmb3J3YXJkTGlzdC0+ZGF0YSk7Ci0gICAgZ19hc3NlcnRf
Y21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF91cmkoY3VycmVudEl0ZW0pLCA9PSwg
Imh0dHA6Ly9leGFtcGxlLmNvbS8yLyIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2Vi
X2hpc3RvcnlfaXRlbV9nZXRfdGl0bGUoY3VycmVudEl0ZW0pLCA9PSwgIlNpdGUgMiIpOwotCi0g
ICAgZ19saXN0X2ZyZWUoZm9yd2FyZExpc3QpOwotICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcp
OwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfYWRk
X2l0ZW0odm9pZCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OwotICAgIFdlYktpdFdl
YkJhY2tGb3J3YXJkTGlzdCogd2ViQmFja0ZvcndhcmRMaXN0OwotICAgIFdlYktpdFdlYkhpc3Rv
cnlJdGVtKiBhZGRJdGVtMTsKLSAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogYWRkSXRlbTI7Ci0g
ICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGJhY2tJdGVtOwotICAgIFdlYktpdFdlYkhpc3RvcnlJ
dGVtKiBjdXJyZW50SXRlbTsKLSAgICBnX3Rlc3RfYnVnKCIyMjk4OCIpOwotCi0gICAgd2ViVmll
dyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0
X3JlZl9zaW5rKHdlYlZpZXcpOwotCi0gICAgd2Via2l0X3dlYl92aWV3X3NldF9tYWludGFpbnNf
YmFja19mb3J3YXJkX2xpc3Qod2ViVmlldywgVFJVRSk7Ci0gICAgd2ViQmFja0ZvcndhcmRMaXN0
ID0gd2Via2l0X3dlYl92aWV3X2dldF9iYWNrX2ZvcndhcmRfbGlzdCh3ZWJWaWV3KTsKLSAgICBn
X2Fzc2VydCh3ZWJCYWNrRm9yd2FyZExpc3QpOwotCi0gICAgLy8gQ2hlY2sgdGhhdCB0aGVyZSBp
cyBubyBpdGVtLgotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dl
dF9jdXJyZW50X2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0KSk7Ci0gICAgZ19hc3NlcnRfY21waW50
KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGVuZ3RoKHdlYkJhY2tG
b3J3YXJkTGlzdCksID09LCAwKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNr
X2ZvcndhcmRfbGlzdF9nZXRfYmFja19sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDAp
OwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQod2ViVmlldykp
OwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2sod2ViVmlldykpOwot
Ci0gICAgLy8gQWRkIGEgbmV3IGl0ZW0KLSAgICBhZGRJdGVtMSA9IHdlYmtpdF93ZWJfaGlzdG9y
eV9pdGVtX25ld193aXRoX2RhdGEoImh0dHA6Ly9leGFtcGxlLmNvbS8iLCAiQWRkZWQgc2l0ZSIp
OwotICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfYWRkX2l0ZW0od2ViQmFja0Zvcndh
cmRMaXN0LCBhZGRJdGVtMSk7Ci0gICAgZ19vYmplY3RfdW5yZWYoYWRkSXRlbTEpOwotICAgIGdf
YXNzZXJ0KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY29udGFpbnNfaXRlbSh3ZWJCYWNr
Rm9yd2FyZExpc3QsIGFkZEl0ZW0xKSk7Ci0KLSAgICAvLyBDaGVjayB0aGF0IHRoZSBhZGRlZCBp
dGVtIGlzIHRoZSBjdXJyZW50IGl0ZW0uCi0gICAgY3VycmVudEl0ZW0gPSB3ZWJraXRfd2ViX2Jh
Y2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0KTsKLSAg
ICBnX2Fzc2VydChjdXJyZW50SXRlbSk7Ci0gICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJf
YmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGVuZ3RoKHdlYkJhY2tGb3J3YXJkTGlzdCks
ID09LCAwKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlz
dF9nZXRfYmFja19sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDApOwotICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQod2ViVmlldykpOwotICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2sod2ViVmlldykpOwotICAgIGdfYXNzZXJ0
X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdXJpKGN1cnJlbnRJdGVtKSwgPT0s
ICJodHRwOi8vZXhhbXBsZS5jb20vIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJf
aGlzdG9yeV9pdGVtX2dldF90aXRsZShjdXJyZW50SXRlbSksID09LCAiQWRkZWQgc2l0ZSIpOwot
Ci0gICAgLy8gQWRkIGFub3RoZXIgaXRlbS4KLSAgICBhZGRJdGVtMiA9IHdlYmtpdF93ZWJfaGlz
dG9yeV9pdGVtX25ld193aXRoX2RhdGEoImh0dHA6Ly9leGFtcGxlLmNvbS8yLyIsICJBZGRlZCBz
aXRlIDIiKTsKLSAgICB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2FkZF9pdGVtKHdlYkJh
Y2tGb3J3YXJkTGlzdCwgYWRkSXRlbTIpOwotICAgIGdfb2JqZWN0X3VucmVmKGFkZEl0ZW0yKTsK
LSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2NvbnRhaW5zX2l0ZW0o
d2ViQmFja0ZvcndhcmRMaXN0LCBhZGRJdGVtMikpOwotCi0gICAgLy8gQ2hlY2sgdGhhdCB0aGUg
YWRkZWQgaXRlbSBpcyBuZXcgY3VycmVudCBpdGVtLgotICAgIGN1cnJlbnRJdGVtID0gd2Via2l0
X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKHdlYkJhY2tGb3J3YXJkTGlz
dCk7Ci0gICAgZ19hc3NlcnQoY3VycmVudEl0ZW0pOwotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJr
aXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xlbmd0aCh3ZWJCYWNrRm9yd2Fy
ZExpc3QpLCA9PSwgMCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJfYmFja19mb3J3
YXJkX2xpc3RfZ2V0X2JhY2tfbGVuZ3RoKHdlYkJhY2tGb3J3YXJkTGlzdCksID09LCAxKTsKLSAg
ICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHdlYlZpZXcpKTsKLSAg
ICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2sod2ViVmlldykpOwotICAgIGdf
YXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdXJpKGN1cnJlbnRJdGVt
KSwgPT0sICJodHRwOi8vZXhhbXBsZS5jb20vMi8iKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Vi
a2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3RpdGxlKGN1cnJlbnRJdGVtKSwgPT0sICJBZGRlZCBz
aXRlIDIiKTsKLQotICAgIGJhY2tJdGVtID0gd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9n
ZXRfYmFja19pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCk7Ci0gICAgZ19hc3NlcnQoYmFja0l0ZW0p
OwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdXJpKGJh
Y2tJdGVtKSwgPT0sICJodHRwOi8vZXhhbXBsZS5jb20vIik7Ci0gICAgZ19hc3NlcnRfY21wc3Ry
KHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF90aXRsZShiYWNrSXRlbSksID09LCAiQWRkZWQg
c2l0ZSIpOwotCi0gICAgLy8gR28gdG8gdGhlIGZpcnN0IGFkZGVkIGl0ZW0uCi0gICAgZ19hc3Nl
cnQod2Via2l0X3dlYl92aWV3X2dvX3RvX2JhY2tfZm9yd2FyZF9pdGVtKHdlYlZpZXcsIGFkZEl0
ZW0xKSk7Ci0gICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3Rf
Z2V0X2ZvcndhcmRfbGVuZ3RoKHdlYkJhY2tGb3J3YXJkTGlzdCksID09LCAxKTsKLSAgICBnX2Fz
c2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19sZW5ndGgo
d2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDApOwotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmll
d19jYW5fZ29fZm9yd2FyZCh3ZWJWaWV3KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmll
d19jYW5fZ29fYmFjayh3ZWJWaWV3KSk7Ci0KLSAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsK
LX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2NsZWFy
KHZvaWQpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldzsKLSAgICBXZWJLaXRXZWJCYWNr
Rm9yd2FyZExpc3QqIHdlYkJhY2tGb3J3YXJkTGlzdDsKLSAgICBXZWJLaXRXZWJIaXN0b3J5SXRl
bSogYWRkSXRlbTsKLSAgICBnX3Rlc3RfYnVnKCIzNjE3MyIpOwotCi0gICAgd2ViVmlldyA9IFdF
QktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0X3JlZl9z
aW5rKHdlYlZpZXcpOwotCi0gICAgd2ViQmFja0ZvcndhcmRMaXN0ID0gd2Via2l0X3dlYl92aWV3
X2dldF9iYWNrX2ZvcndhcmRfbGlzdCh3ZWJWaWV3KTsKLSAgICBnX2Fzc2VydCh3ZWJCYWNrRm9y
d2FyZExpc3QpOwotCi0gICAgLy8gQ2hlY2sgdGhhdCB0aGVyZSBpcyBubyBpdGVtLgotICAgIGdf
YXNzZXJ0X2NtcGludCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xl
bmd0aCh3ZWJCYWNrRm9yd2FyZExpc3QpLCA9PSwgMCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHdl
YmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGVuZ3RoKHdlYkJhY2tGb3J3YXJk
TGlzdCksID09LCAwKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlz
dF9nZXRfY3VycmVudF9pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCkpOwotICAgIGdfYXNzZXJ0KCF3
ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQod2ViVmlldykpOwotICAgIGdfYXNzZXJ0KCF3
ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2sod2ViVmlldykpOwotCi0gICAgLy8gQ2hlY2sgdGhh
dCBjbGVhcmluZyB0aGUgZW1wdHkgbGlzdCBkb2VzIG5vdCBtb2RpZnkgY291bnRlcnMKLSAgICB3
ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2NsZWFyKHdlYkJhY2tGb3J3YXJkTGlzdCk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2Zvcndh
cmRfbGVuZ3RoKHdlYkJhY2tGb3J3YXJkTGlzdCksID09LCAwKTsKLSAgICBnX2Fzc2VydF9jbXBp
bnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19sZW5ndGgod2ViQmFja0Zv
cndhcmRMaXN0KSwgPT0sIDApOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX2JhY2tfZm9yd2Fy
ZF9saXN0X2dldF9jdXJyZW50X2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0KSk7Ci0gICAgZ19hc3Nl
cnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh3ZWJWaWV3KSk7Ci0gICAgZ19hc3Nl
cnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayh3ZWJWaWV3KSk7Ci0KLSAgICAvLyBBZGQg
YSBuZXcgaXRlbQotICAgIGFkZEl0ZW0gPSB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9uZXdfd2l0
aF9kYXRhKCJodHRwOi8vZXhhbXBsZS5jb20vIiwgIkFkZGVkIHNpdGUiKTsKLSAgICB3ZWJraXRf
d2ViX2JhY2tfZm9yd2FyZF9saXN0X2FkZF9pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCwgYWRkSXRl
bSk7Ci0gICAgZ19vYmplY3RfdW5yZWYoYWRkSXRlbSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3dl
Yl9iYWNrX2ZvcndhcmRfbGlzdF9jb250YWluc19pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCwgYWRk
SXRlbSkpOwotCi0gICAgLy8gQ2hlY2sgdGhhdCBhZnRlciBjbGVhcmluZyB0aGUgbGlzdCB0aGUg
YWRkZWQgaXRlbSBpcyBubyBsb25nZXIgaW4gdGhlIGxpc3QKLSAgICB3ZWJraXRfd2ViX2JhY2tf
Zm9yd2FyZF9saXN0X2NsZWFyKHdlYkJhY2tGb3J3YXJkTGlzdCk7Ci0gICAgZ19hc3NlcnQoIXdl
YmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY29udGFpbnNfaXRlbSh3ZWJCYWNrRm9yd2FyZExp
c3QsIGFkZEl0ZW0pKTsKLQotICAgIC8vIENoZWNrIHRoYXQgYWZ0ZXIgY2xlYXJpbmcgaXQsIHRo
ZSBsaXN0IGlzIGVtcHR5Ci0gICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJfYmFja19mb3J3
YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGVuZ3RoKHdlYkJhY2tGb3J3YXJkTGlzdCksID09LCAwKTsK
LSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFj
a19sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDApOwotICAgIGdfYXNzZXJ0KCF3ZWJr
aXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0od2ViQmFja0ZvcndhcmRM
aXN0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh3ZWJW
aWV3KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayh3ZWJWaWV3
KSk7Ci0KLSAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKLX0KLQotaW50IG1haW4oaW50IGFy
Z2MsIGNoYXIqKiBhcmd2KQotewotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxM
KTsKLQotICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0g
ICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYmJhY2tmb3J3YXJkbGlzdC9hZGRfaXRlbSIs
IHRlc3Rfd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9hZGRfaXRlbSk7Ci0gICAgZ190ZXN0
X2FkZF9mdW5jKCIvd2Via2l0L3dlYmJhY2tmb3J3YXJkbGlzdC9saXN0X29yZGVyIiwgdGVzdF93
ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X29yZGVyKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMo
Ii93ZWJraXQvd2ViaGlzdG9yeWl0ZW0vbGlmZXRpbWUiLCB0ZXN0X3dlYmtpdF93ZWJfaGlzdG9y
eV9pdGVtX2xpZmV0aW1lKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2ViYmFja2Zv
cndhcmRsaXN0L2NsZWFyIiwgdGVzdF93ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2NsZWFy
KTsKLSAgICByZXR1cm4gZ190ZXN0X3J1biAoKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJkYXRhc291cmNlLmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0
cy90ZXN0d2ViZGF0YXNvdXJjZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTY2
MjU3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJkYXRhc291
cmNlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOSBKYW4gTWljaGFlbCBBbG9uem8KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
PGdsaWIuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5o
PgotCi1zdGF0aWMgY29uc3QgZ3Nob3J0IGRlZmF1bHRUaW1lb3V0ID0gMTA7Ci1ndWludCB3YWl0
VGltZXI7Ci1nYm9vbGVhbiBzaG91bGRXYWl0OwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgV2Vi
S2l0V2ViVmlldyogd2ViVmlldzsKLSAgICBXZWJLaXRXZWJGcmFtZSogbWFpbkZyYW1lOwotfSBX
ZWJEYXRhU291cmNlRml4dHVyZTsKLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX2RhdGFf
c291cmNlX2dldF9pbml0aWFsX3JlcXVlc3QoKQotewotICAgIFdlYktpdFdlYlZpZXcqIHZpZXc7
Ci0gICAgV2ViS2l0V2ViRnJhbWUqIGZyYW1lOwotICAgIFdlYktpdFdlYkRhdGFTb3VyY2UqIGRh
dGFTb3VyY2U7Ci0gICAgV2ViS2l0TmV0d29ya1JlcXVlc3QqIGluaXRpYWxSZXF1ZXN0OwotCi0g
ICAgdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdf
b2JqZWN0X3JlZl9zaW5rKHZpZXcpOwotICAgIGZyYW1lID0gd2Via2l0X3dlYl92aWV3X2dldF9t
YWluX2ZyYW1lKHZpZXcpOwotCi0gICAgV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QgPSB3
ZWJraXRfbmV0d29ya19yZXF1ZXN0X25ldygiaHR0cDovL3d3dy5nb29nbGUuY29tIik7Ci0gICAg
d2Via2l0X3dlYl9mcmFtZV9sb2FkX3JlcXVlc3QoZnJhbWUsIHJlcXVlc3QpOwotICAgIGdfb2Jq
ZWN0X3VucmVmKHJlcXVlc3QpOwotCi0gICAgZGF0YVNvdXJjZSA9IHdlYmtpdF93ZWJfZnJhbWVf
Z2V0X3Byb3Zpc2lvbmFsX2RhdGFfc291cmNlKGZyYW1lKTsKLSAgICBnX2Fzc2VydChkYXRhU291
cmNlKTsKLSAgICBpbml0aWFsUmVxdWVzdCA9IHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X2lu
aXRpYWxfcmVxdWVzdChkYXRhU291cmNlKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X25l
dHdvcmtfcmVxdWVzdF9nZXRfdXJpKGluaXRpYWxSZXF1ZXN0KSwgPT0sICJodHRwOi8vd3d3Lmdv
b2dsZS5jb20vIik7Ci0KLSAgICBnX29iamVjdF91bnJlZih2aWV3KTsKLX0KLQotc3RhdGljIHZv
aWQgbm90aWZ5X2xvYWRfc3RhdHVzX3VucmVhY2hhYmxlX2NiKFdlYktpdFdlYlZpZXcqIHZpZXcs
IEdQYXJhbVNwZWMqIHBzcGVjLCBHTWFpbkxvb3AqIGxvb3ApCi17Ci0gICAgV2ViS2l0TG9hZFN0
YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzICh2aWV3KTsKLSAg
ICBXZWJLaXRXZWJGcmFtZSogZnJhbWUgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUo
dmlldyk7Ci0KLSAgICBnX2Fzc2VydChzdGF0dXMgIT0gV0VCS0lUX0xPQURfRklOSVNIRUQpOwot
Ci0gICAgaWYgKHN0YXR1cyAhPSBXRUJLSVRfTE9BRF9GQUlMRUQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFdlYktpdFdlYkRhdGFTb3VyY2UqIGRhdGFzb3VyY2UgPSB3ZWJraXRfd2ViX2ZyYW1l
X2dldF9kYXRhX3NvdXJjZShmcmFtZSk7Ci0KLSAgICBnX2Fzc2VydF9jbXBzdHIoImh0dHA6Ly90
aGlzLmhvc3QuZG9lcy5ub3QuZXhpc3QvZG9pcmVhbGx5ZXhpc3QuaHRtbCIsID09LAotICAgICAg
ICAgICAgICAgICAgICB3ZWJraXRfd2ViX2RhdGFfc291cmNlX2dldF91bnJlYWNoYWJsZV91cmko
ZGF0YXNvdXJjZSkpOwotCi0gICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKLX0KLQotc3RhdGlj
IHZvaWQgbm90aWZ5X2xvYWRfc3RhdHVzX2NiKFdlYktpdFdlYlZpZXcqIHZpZXcsIEdQYXJhbVNw
ZWMqIHBzcGVjLCBHTWFpbkxvb3AqIGxvb3ApCi17Ci0gICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0
dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzICh2aWV3KTsKLSAgICBXZWJLaXRX
ZWJGcmFtZSogZnJhbWUgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUodmlldyk7Ci0g
ICAgV2ViS2l0V2ViRGF0YVNvdXJjZSogZGF0YVNvdXJjZSA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0
X2RhdGFfc291cmNlKGZyYW1lKTsKLQotICAgIGlmIChzdGF0dXMgPT0gV0VCS0lUX0xPQURfQ09N
TUlUVEVEKSB7Ci0gICAgICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfaXNfbG9h
ZGluZyhkYXRhU291cmNlKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZWxzZSBpZiAo
c3RhdHVzICE9IFdFQktJVF9MT0FEX0ZJTklTSEVEKQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
KiBUZXN0IGdldF9yZXF1ZXN0ICovCi0gICAgZ190ZXN0X21lc3NhZ2UoIlRlc3Rpbmcgd2Via2l0
X3dlYl9kYXRhX3NvdXJjZV9nZXRfcmVxdWVzdCIpOwotICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0
KiByZXF1ZXN0ID0gd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfcmVxdWVzdChkYXRhU291cmNl
KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X25ldHdvcmtfcmVxdWVzdF9nZXRfdXJpKHJl
cXVlc3QpLCA9PSwgImh0dHA6Ly93d3cud2Via2l0Lm9yZy8iKTsKLQotICAgIC8qIFRlc3QgZ2V0
X21haW5fcmVzb3VyY2UgKi8KLSAgICBnX3Rlc3RfbWVzc2FnZSgiVGVzdGluZyB3ZWJraXRfd2Vi
X2RhdGFfc291cmNlX2dldF9tYWluX3Jlc291cmNlIik7Ci0gICAgV2ViS2l0V2ViUmVzb3VyY2Uq
IHJlc291cmNlID0gd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfbWFpbl9yZXNvdXJjZShkYXRh
U291cmNlKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoInRleHQvaHRtbCIsID09LCB3ZWJraXRfd2Vi
X3Jlc291cmNlX2dldF9taW1lX3R5cGUocmVzb3VyY2UpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIo
Imh0dHA6Ly93d3cud2Via2l0Lm9yZy8iLCA9PSwgd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJp
KHJlc291cmNlKSk7Ci0KLSAgICAvKiBUZXN0IGdldF9kYXRhLiBXZSBqdXN0IHRlc3QgaWYgZGF0
YSBoYXMgY2VydGFpbiBzaXplIGZvciB0aGUgbWVhbiB0aW1lICovCi0gICAgZ190ZXN0X21lc3Nh
Z2UoIlRlc3Rpbmcgd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfZGF0YSBoYXMgY2VydGFpbiBz
aXplIik7Ci0gICAgR1N0cmluZyogZGF0YSA9IHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X2Rh
dGEoZGF0YVNvdXJjZSk7Ci0gICAgZ19hc3NlcnQoZGF0YS0+bGVuID4gMTAwKTsKLQotICAgIC8q
IEZJWE1FOiBBZGQgdGVzdCBmb3IgZ2V0X2VuY29kaW5nICovCi0KLSAgICBnX21haW5fbG9vcF9x
dWl0KGxvb3ApOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gd2FpdF90aW1lcl9maXJlZChHTWFpbkxv
b3AqIGxvb3ApCi17Ci0gICAgd2FpdFRpbWVyID0gMDsKLSAgICBnX21haW5fbG9vcF9xdWl0KGxv
b3ApOwotCi0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93
ZWJfZGF0YV9zb3VyY2UoKQotewotICAgIFdlYktpdFdlYlZpZXcqIHZpZXc7Ci0gICAgR01haW5M
b29wKiBsb29wOwotCi0gICAgdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdf
bmV3KCkpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKHZpZXcpOwotICAgIGxvb3AgPSBnX21haW5f
bG9vcF9uZXcoTlVMTCwgVFJVRSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdCh2aWV3LCAibm90aWZ5
Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0sobm90aWZ5X2xvYWRfc3RhdHVzX2NiKSwgbG9vcCk7
Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHZpZXcsICJodHRwOi8vd3d3LndlYmtpdC5v
cmciKTsKLQotICAgIHdhaXRUaW1lciA9IGdfdGltZW91dF9hZGRfc2Vjb25kcyhkZWZhdWx0VGlt
ZW91dCwgKEdTb3VyY2VGdW5jKXdhaXRfdGltZXJfZmlyZWQsIGxvb3ApOwotCi0gICAgZ19tYWlu
X2xvb3BfcnVuKGxvb3ApOwotCi0gICAgaWYgKHdhaXRUaW1lcikKLSAgICAgICAgZ19zb3VyY2Vf
cmVtb3ZlKHdhaXRUaW1lcik7Ci0KLSAgICB3YWl0VGltZXIgPSAwOwotCi0gICAgZ19tYWluX2xv
b3BfdW5yZWYobG9vcCk7Ci0gICAgZ19vYmplY3RfdW5yZWYodmlldyk7Ci19Ci0KLXN0YXRpYyB2
b2lkIG5vdGlmeV9sb2FkX3N0YXR1c19saWZldGltZV9jYihXZWJLaXRXZWJWaWV3KiB2aWV3LCBH
UGFyYW1TcGVjKiBwc3BlYywgR01haW5Mb29wKiBsb29wKQotewotICAgIFdlYktpdExvYWRTdGF0
dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyAodmlldyk7Ci0gICAg
V2ViS2l0V2ViRnJhbWUqIGZyYW1lID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKHZp
ZXcpOwotICAgIFdlYktpdFdlYkRhdGFTb3VyY2UqIGRhdGFTb3VyY2UgPSB3ZWJraXRfd2ViX2Zy
YW1lX2dldF9kYXRhX3NvdXJjZShmcmFtZSk7Ci0KLSAgICBpZiAoc3RhdHVzID09IFdFQktJVF9M
T0FEX0NPTU1JVFRFRCkgewotICAgICAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2RhdGFfc291cmNl
X2lzX2xvYWRpbmcoZGF0YVNvdXJjZSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlm
IChzdGF0dXMgIT0gV0VCS0lUX0xPQURfRklOSVNIRUQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dl
Yl9kYXRhX3NvdXJjZV9saWZldGltZSgpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogdmlldzsKLSAg
ICBHTWFpbkxvb3AqIGxvb3A7Ci0KLSAgICB2aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93
ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsodmlldyk7Ci0gICAgbG9vcCA9
IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHZpZXcs
ICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhub3RpZnlfbG9hZF9zdGF0dXNfbGlm
ZXRpbWVfY2IpLCBsb29wKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkodmlldywgImh0
dHA6Ly93d3cud2Via2l0Lm9yZyIpOwotCi0gICAgd2FpdFRpbWVyID0gZ190aW1lb3V0X2FkZF9z
ZWNvbmRzKGRlZmF1bHRUaW1lb3V0LCAoR1NvdXJjZUZ1bmMpd2FpdF90aW1lcl9maXJlZCwgbG9v
cCk7Ci0KLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICBXZWJLaXRXZWJEYXRhU291
cmNlKiBkYXRhU291cmNlID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfZGF0YV9zb3VyY2Uod2Via2l0
X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKHZpZXcpKTsKLSAgICBHTGlzdCogc3ViUmVzb3VyY2Vz
ID0gd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfc3VicmVzb3VyY2VzKGRhdGFTb3VyY2UpOwot
ICAgIGdpbnQgbnVtYmVyT2ZSZXNvdXJjZXMgPSBnX2xpc3RfbGVuZ3RoKHN1YlJlc291cmNlcyk7
Ci0gICAgZ19saXN0X2ZyZWUoc3ViUmVzb3VyY2VzKTsKLQotICAgIGdfYXNzZXJ0X2NtcGludCh3
ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHZpZXcpLCA9PSwgV0VCS0lUX0xPQURfRklO
SVNIRUQpOwotCi0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHZpZXcsICJodHRwOi8vZ25v
bWUub3JnIik7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl92aWV3X2dldF9sb2Fk
X3N0YXR1cyh2aWV3KSwgPT0sIFdFQktJVF9MT0FEX1BST1ZJU0lPTkFMKTsKLQotICAgIHdlYmtp
dF93ZWJfdmlld19zdG9wX2xvYWRpbmcodmlldyk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQod2Vi
a2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh2aWV3KSwgPT0sIFdFQktJVF9MT0FEX0ZBSUxF
RCk7Ci0KLSAgICBzdWJSZXNvdXJjZXMgPSB3ZWJraXRfd2ViX2RhdGFfc291cmNlX2dldF9zdWJy
ZXNvdXJjZXMoZGF0YVNvdXJjZSk7Ci0gICAgZ19hc3NlcnRfY21waW50KG51bWJlck9mUmVzb3Vy
Y2VzLCA9PSwgZ19saXN0X2xlbmd0aChzdWJSZXNvdXJjZXMpKTsKLSAgICBnX2xpc3RfZnJlZShz
dWJSZXNvdXJjZXMpOwotCi0gICAgaWYgKHdhaXRUaW1lcikKLSAgICAgICAgZ19zb3VyY2VfcmVt
b3ZlKHdhaXRUaW1lcik7Ci0KLSAgICB3YWl0VGltZXIgPSAwOwotCi0gICAgZ19tYWluX2xvb3Bf
dW5yZWYobG9vcCk7Ci0gICAgZ19vYmplY3RfdW5yZWYodmlldyk7Ci19Ci0KLXN0YXRpYyB2b2lk
IHRlc3Rfd2Via2l0X3dlYl9kYXRhX3NvdXJjZV91bnJlYWNoYWJsZV91cmkoKQotewotICAgIC8q
IEZJWE1FOiB0aGlzIHRlc3QgZmFpbHMgY3VycmVudGx5LiAqLwotICAgIHJldHVybjsKLQotICAg
IFdlYktpdFdlYlZpZXcqIHZpZXc7Ci0gICAgR01haW5Mb29wKiBsb29wOwotCi0gICAgdmlldyA9
IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0X3Jl
Zl9zaW5rKHZpZXcpOwotICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7Ci0g
ICAgZ19zaWduYWxfY29ubmVjdCh2aWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJB
Q0sobm90aWZ5X2xvYWRfc3RhdHVzX3VucmVhY2hhYmxlX2NiKSwgbG9vcCk7Ci0gICAgd2Via2l0
X3dlYl92aWV3X2xvYWRfdXJpKHZpZXcsICJodHRwOi8vdGhpcy5ob3N0LmRvZXMubm90LmV4aXN0
L2RvaXJlYWxseWV4aXN0Lmh0bWwiKTsKLQotICAgIHdhaXRUaW1lciA9IGdfdGltZW91dF9hZGRf
c2Vjb25kcyhkZWZhdWx0VGltZW91dCwgKEdTb3VyY2VGdW5jKXdhaXRfdGltZXJfZmlyZWQsIGxv
b3ApOwotCi0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAgaWYgKHdhaXRUaW1lcikK
LSAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKHdhaXRUaW1lcik7Ci0KLSAgICB3YWl0VGltZXIgPSAw
OwotCi0gICAgZ19tYWluX2xvb3BfdW5yZWYobG9vcCk7Ci0gICAgZ19vYmplY3RfdW5yZWYodmll
dyk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKLXsKLSAgICBndGtfdGVz
dF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBz
Oi8vYnVncy53ZWJraXQub3JnLyIpOwotICAgIGdfdGVzdF9idWcoIjI0NzU4Iik7Ci0gICAgZ190
ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYmRhdGFzb3VyY2UvZ2V0X2luaXRpYWxfcmVxdWVzdCIs
Ci0gICAgICAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfaW5p
dGlhbF9yZXF1ZXN0KTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2ViZGF0YXNvdXJj
ZS9hcGkiLAotICAgICAgICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF93ZWJfZGF0YV9zb3VyY2Up
OwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJkYXRhc291cmNlL3VucmVhY2hhYmxl
X3VyaSIsCi0gICAgICAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X3dlYl9kYXRhX3NvdXJjZV91
bnJlYWNoYWJsZV91cmkpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJkYXRhc291
cmNlL2xpZmV0aW1lIiwKLSAgICAgICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfd2ViX2RhdGFf
c291cmNlX2xpZmV0aW1lKTsKLQotICAgIHJldHVybiBnX3Rlc3RfcnVuICgpOwotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYmZyYW1lLmMgYi9Tb3VyY2UvV2Vi
S2l0L2d0ay90ZXN0cy90ZXN0d2ViZnJhbWUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMTEzMTg3My4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2Vi
ZnJhbWUuYworKysgL2Rldi9udWxsCkBAIC0xLDIyMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgQ29sbGFib3JhIEx0ZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgPGVycm5vLmg+
Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGdsaWIv
Z3N0ZGlvLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQu
aD4KLQotc3RhdGljIGludCBudW1iZXJPZkZyYW1lc0NyZWF0ZWQgPSAwOwotCi1zdGF0aWMgdm9p
ZCBjcmVhdGVGcmFtZVNpZ25hbFRlc3RGcmFtZUNyZWF0ZWRDYWxsYmFjayhXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3LCBXZWJLaXRXZWJGcmFtZSogZnJhbWUsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAg
bnVtYmVyT2ZGcmFtZXNDcmVhdGVkKys7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBjcmVhdGVGcmFt
ZVNpZ25hbFRlc3RUaW1lb3V0KGdwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19hc3NlcnRfY21waW50
KG51bWJlck9mRnJhbWVzQ3JlYXRlZCwgPT0sIDIpOwotICAgIGdfbWFpbl9sb29wX3F1aXQoKEdN
YWluTG9vcCopIGRhdGEpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQgdGVz
dF93ZWJraXRfd2ViX2ZyYW1lX2NyZWF0ZWRfc2lnbmFsKHZvaWQpCi17Ci0gICAgR3RrV2lkZ2V0
KiB3ZWJWaWV3OwotICAgIEd0a1dpZGdldCogd2luZG93OwotICAgIEdNYWluTG9vcCogbG9vcCA9
IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLQotICAgIHdpbmRvdyA9IGd0a193aW5kb3df
bmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOwotCi0gICAgd2ViVmlldyA9IHdlYmtpdF93ZWJfdmll
d19uZXcoKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJmcmFtZS1jcmVhdGVkIiwg
R19DQUxMQkFDSyhjcmVhdGVGcmFtZVNpZ25hbFRlc3RGcmFtZUNyZWF0ZWRDYWxsYmFjayksIGxv
b3ApOwotCi0gICAgLy8gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCBleGFjdGx5IHR3byBjcmVhdGUt
ZnJhbWUgc2lnbmFscyBhcmUKLSAgICAvLyBmaXJlZCBhbmQgbm8gbW9yZSwgc28gd2Ugc2V0IGEg
dGltZW91dCBoZXJlLiBUaGVyZSBkb2VzIG5vdCBhcHBlYXIKLSAgICAvLyB0byBiZSBhIHNpbXBs
ZSB3YXkgdmlhIHRoZSBBUEkgdG8gZmlndXJlIG91dCB3aGVuIGFsbCBmcmFtZXMgaGF2ZQotICAg
IC8vIGxvYWRlZC4KLSAgICBnX3RpbWVvdXRfYWRkKDUwMCwgY3JlYXRlRnJhbWVTaWduYWxUZXN0
VGltZW91dCwgbG9vcCk7Ci0KLSAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdp
bmRvdyksIHdlYlZpZXcpOwotICAgIGd0a193aWRnZXRfc2hvdyh3aW5kb3cpOwotICAgIGd0a193
aWRnZXRfc2hvdyh3ZWJWaWV3KTsKLQotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhX
RUJLSVRfV0VCX1ZJRVcod2ViVmlldyksCi0gICAgICAgICI8aHRtbD48Ym9keT5GcmFtZXMhIgot
ICAgICAgICAiPGlmcmFtZT48L2lmcmFtZT4iCi0gICAgICAgICI8aWZyYW1lPjwvaWZyYW1lPiIK
LSAgICAgICAgIjwvYm9keT48L2h0bWw+IiwKLSAgICAgICAgInRleHQvaHRtbCIsICJ1dGYtOCIs
ICJmaWxlOi8vIik7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotfQotCi1zdGF0aWMgdm9p
ZCB0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfY3JlYXRlX2Rlc3Ryb3kodm9pZCkKLXsKLSAgICBHdGtX
aWRnZXQgKndlYlZpZXc7Ci0gICAgR3RrV2lkZ2V0ICp3aW5kb3c7Ci0KLSAgICBnX3Rlc3RfYnVn
KCIyMTgzNyIpOwotICAgIHdlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7Ci0gICAgZ19v
YmplY3RfcmVmX3Npbmsod2ViVmlldyk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKHdl
YlZpZXcpLT5yZWZfY291bnQsID09LCAxKTsKLSAgICAvLyBUaGlzIGNyYXNoZWQgd2l0aCB0aGUg
b3JpZ2luYWwgdmVyc2lvbgotICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwotCi0gICAgZ190
ZXN0X2J1ZygiMjUwNDIiKTsKLSAgICB3aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9X
X1RPUExFVkVMKTsKLSAgICB3ZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygpOwotICAgIGd0
a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgd2ViVmlldyk7Ci0gICAgZ3Rr
X3dpZGdldF9zaG93KHdpbmRvdyk7Ci0gICAgZ3RrX3dpZGdldF9zaG93KHdlYlZpZXcpOwotICAg
IGd0a193aWRnZXRfZGVzdHJveSh3ZWJWaWV3KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJr
aXRfd2ViX2ZyYW1lX2xpZmV0aW1lKHZvaWQpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmll
dzsKLSAgICBXZWJLaXRXZWJGcmFtZSogd2ViRnJhbWU7Ci0gICAgZ190ZXN0X2J1ZygiMjE4Mzci
KTsKLQotICAgIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygp
KTsKLSAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
R19PQkpFQ1Qod2ViVmlldyktPnJlZl9jb3VudCwgPT0sIDEpOwotICAgIHdlYkZyYW1lID0gd2Vi
a2l0X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKHdlYlZpZXcpOwotICAgIGdfYXNzZXJ0X2NtcGlu
dChHX09CSkVDVCh3ZWJGcmFtZSktPnJlZl9jb3VudCwgPT0sIDEpOwotCi0gICAgLy8gQWRkIGR1
bW15IHJlZmVyZW5jZSBvbiB0aGUgV2ViS2l0V2ViRnJhbWUgdG8ga2VlcCBpdCBhbGl2ZQotICAg
IGdfb2JqZWN0X3JlZih3ZWJGcmFtZSk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKHdl
YkZyYW1lKS0+cmVmX2NvdW50LCA9PSwgMik7Ci0KLSAgICAvLyBUaGlzIGNyYXNoZWQgd2l0aCB0
aGUgb3JpZ2luYWwgdmVyc2lvbgotICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwotCi0gICAg
Ly8gTWFrZSBzdXJlIHRoYXQgdGhlIGZyYW1lIGdvdCBkZWxldGVkIGFzIHdlbGwuIFdlIGRpZCB0
aGlzCi0gICAgLy8gYnkgYWRkaW5nIGFuIGV4dHJhIHJlZiBvbiB0aGUgV2ViS2l0V2ViRnJhbWUg
YW5kIHdlIHNob3VsZAotICAgIC8vIGJlIHRoZSBvbmUgaG9sZGluZyB0aGUgbGFzdCByZWZlcmVu
Y2UuCi0gICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKHdlYkZyYW1lKS0+cmVmX2NvdW50LCA9
PSwgMSk7Ci0gICAgZ19vYmplY3RfdW5yZWYod2ViRnJhbWUpOwotfQotCi1zdGF0aWMgZ2Jvb2xl
YW4gcHJpbnRfcmVxdWVzdGVkX2NiKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFdlYkZy
YW1lKiB3ZWJGcmFtZSwgR01haW5Mb29wKiBsb29wKQotewotICAgIGdfb2JqZWN0X3NldF9kYXRh
KEdfT0JKRUNUKHdlYlZpZXcpLCAic2lnbmFsLWhhbmRsZWQiLCBHSU5UX1RPX1BPSU5URVIoVFJV
RSkpOwotICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0K
LXN0YXRpYyB2b2lkIHByaW50X3RpbWVvdXQoR01haW5Mb29wKiBsb29wKQotewotICAgIGlmIChn
X21haW5fbG9vcF9pc19ydW5uaW5nKGxvb3ApKQotICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxv
b3ApOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfcHJpbnRpbmcodm9p
ZCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OwotCi0gICAgd2ViVmlldyA9IFdFQktJ
VF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5r
KHdlYlZpZXcpOwotICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVCh3ZWJWaWV3KS0+cmVmX2Nv
dW50LCA9PSwgMSk7Ci0KLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxodG1sPjxib2R5PjxoMT5XZWJLaXRH
VEsrITwvaDE+PC9ib2R5PjwvaHRtbD4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAidGV4dC9odG1sIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInV0Zi04IiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGU6Ly8iKTsKLQotICAgIEdNYWlu
TG9vcCogbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLQotICAgIC8vIERvZXMg
amF2YXNjcmlwdCBwcmludCgpIHdvcmsgY29ycmVjdGx5PwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
d2ViVmlldywgInByaW50LXJlcXVlc3RlZCIsCi0gICAgICAgICAgICAgICAgICAgICBHX0NBTExC
QUNLKHByaW50X3JlcXVlc3RlZF9jYiksCi0gICAgICAgICAgICAgICAgICAgICBsb29wKTsKLQot
ICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKHdlYlZpZXcpLCAic2lnbmFsLWhhbmRsZWQi
LCBHSU5UX1RPX1BPSU5URVIoRkFMU0UpKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfZXhlY3V0ZV9z
Y3JpcHQgKHdlYlZpZXcsICJwcmludCgpOyIpOwotCi0gICAgLy8gR2l2ZSBqYXZhc2NyaXB0Y29y
ZSBzb21lIHRpbWUgdG8gcHJvY2VzcyB0aGUgcHJpbnQgcmVxdWVzdCwgYnV0Ci0gICAgLy8gcHJl
cGFyZSBhIHRpbWVvdXQgdG8gYXZvaWQgaXQgcnVubmluZyBmb3JldmVyIGluIGNhc2UgdGhlIHNp
Z25hbCBpcwotICAgIC8vIG5ldmVyIGVtaXR0ZWQuCi0gICAgZ190aW1lb3V0X2FkZCgxMDAwLCAo
R1NvdXJjZUZ1bmMpcHJpbnRfdGltZW91dCwgbG9vcCk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGxv
b3ApOwotCi0gICAgZ19hc3NlcnRfY21waW50KEdQT0lOVEVSX1RPX0lOVChnX29iamVjdF9nZXRf
ZGF0YShHX09CSkVDVCh3ZWJWaWV3KSwgInNpZ25hbC1oYW5kbGVkIikpLCA9PSwgVFJVRSk7Ci0K
LSAgICAvLyBEb2VzIHByaW50aW5nIGRpcmVjdGx5IHRvIGEgZmlsZT8KLSAgICBHRXJyb3IgKmVy
cm9yID0gTlVMTDsKLSAgICBnY2hhciogdGVtcG9yYXJ5RmlsZW5hbWUgPSBOVUxMOwotICAgIGdp
bnQgZmQgPSBnX2ZpbGVfb3Blbl90bXAgKCJ3ZWJraXQtdGVzdHdlYmZyYW1lLVhYWFhYWCIsICZ0
ZW1wb3JhcnlGaWxlbmFtZSwgJmVycm9yKTsKLSAgICBjbG9zZShmZCk7Ci0KLSAgICBpZiAoZXJy
b3IpIHsKLSAgICAgICAgZ19jcml0aWNhbCgiRmFpbGVkIHRvIG9wZW4gYSB0ZW1wb3JhcnkgZmls
ZSBmb3Igd3JpdGluZzogJXMuIiwgZXJyb3ItPm1lc3NhZ2UpOwotICAgICAgICBnX2Vycm9yX2Zy
ZWUoZXJyb3IpOwotICAgICAgICBnb3RvIGNsZWFudXA7Ci0gICAgfQotCi0gICAgLy8gV2UgZGVs
ZXRlIHRoZSBmaWxlLCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgZmlndXJlIG91dCB0aGF0IHRoZQot
ICAgIC8vIGZpbGUgZ290IHByaW50ZWQ7Ci0gICAgaWYgKGdfdW5saW5rKHRlbXBvcmFyeUZpbGVu
YW1lKSA9PSAtMSkgewotICAgICAgICBnX3dhcm5pbmcoIkZhaWxlZCB0byBkZWxldGUgdGhlIHRl
bXBvcmFyeSBmaWxlOiAlcy5cblRoaXMgbWF5IGNhdXNlIHRoZSB0ZXN0IHRvIGJlIGJvZ3VzLiIs
IGdfc3RyZXJyb3IoZXJybm8pKTsKLSAgICB9Ci0KLSAgICBXZWJLaXRXZWJGcmFtZSogd2ViRnJh
bWUgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUod2ViVmlldyk7Ci0gICAgR3RrUHJp
bnRPcGVyYXRpb24qIG9wZXJhdGlvbiA9IGd0a19wcmludF9vcGVyYXRpb25fbmV3KCk7Ci0gICAg
R3RrUHJpbnRPcGVyYXRpb25BY3Rpb24gYWN0aW9uID0gR1RLX1BSSU5UX09QRVJBVElPTl9BQ1RJ
T05fRVhQT1JUOwotICAgIEd0a1ByaW50T3BlcmF0aW9uUmVzdWx0IHJlc3VsdDsKLQotICAgIGd0
a19wcmludF9vcGVyYXRpb25fc2V0X2V4cG9ydF9maWxlbmFtZShvcGVyYXRpb24sIHRlbXBvcmFy
eUZpbGVuYW1lKTsKLSAgICByZXN1bHQgPSB3ZWJraXRfd2ViX2ZyYW1lX3ByaW50X2Z1bGwgKHdl
YkZyYW1lLCBvcGVyYXRpb24sIGFjdGlvbiwgTlVMTCk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQo
cmVzdWx0LCA9PSwgR1RLX1BSSU5UX09QRVJBVElPTl9SRVNVTFRfQVBQTFkpOwotICAgIGdfYXNz
ZXJ0X2NtcGludChnX2ZpbGVfdGVzdCh0ZW1wb3JhcnlGaWxlbmFtZSwgR19GSUxFX1RFU1RfSVNf
UkVHVUxBUiksID09LCBUUlVFKTsKLQotICAgIGdfdW5saW5rKHRlbXBvcmFyeUZpbGVuYW1lKTsK
LSAgICBnX29iamVjdF91bnJlZihvcGVyYXRpb24pOwotY2xlYW51cDoKLSAgICBnX29iamVjdF91
bnJlZih3ZWJWaWV3KTsKLSAgICBnX2ZyZWUodGVtcG9yYXJ5RmlsZW5hbWUpOwotfQotCi1zdGF0
aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfcmVzcG9uc2UoKQotewotICAgIFdlYktpdFdl
YkZyYW1lKiBmcmFtZSA9IGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfRlJBTUUsIE5VTEwp
OwotICAgIFdlYktpdE5ldHdvcmtSZXNwb25zZSogcmVzcG9uc2UgPSB3ZWJraXRfd2ViX2ZyYW1l
X2dldF9uZXR3b3JrX3Jlc3BvbnNlKGZyYW1lKTsKLSAgICBnX2Fzc2VydCghcmVzcG9uc2UpOwot
ICAgIGdfb2JqZWN0X3VucmVmKGZyYW1lKTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIq
KiBhcmd2KQotewotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLQotICAg
IGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0gICAgZ190ZXN0
X2FkZF9mdW5jKCIvd2Via2l0L3dlYnZpZXcvY3JlYXRlX2Rlc3Ryb3kiLCB0ZXN0X3dlYmtpdF93
ZWJfZnJhbWVfY3JlYXRlX2Rlc3Ryb3kpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93
ZWJ2aWV3L2ZyYW1lLWNyZWF0ZWRfc2lnbmFsIiwgdGVzdF93ZWJraXRfd2ViX2ZyYW1lX2NyZWF0
ZWRfc2lnbmFsKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2ViZnJhbWUvbGlmZXRp
bWUiLCB0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfbGlmZXRpbWUpOwotICAgIGdfdGVzdF9hZGRfZnVu
YygiL3dlYmtpdC93ZWJ2aWV3L3ByaW50aW5nIiwgdGVzdF93ZWJraXRfd2ViX2ZyYW1lX3ByaW50
aW5nKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vidmlldy9yZXNwb25zZSIsIHRl
c3Rfd2Via2l0X3dlYl9mcmFtZV9yZXNwb25zZSk7Ci0gICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2ViaGlzdG9yeWl0
ZW0uYyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJoaXN0b3J5aXRlbS5jCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmUxOTFjLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJoaXN0b3J5aXRlbS5jCisrKyAvZGV2L251bGwKQEAgLTEs
NzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4gTWljaGFlbCBBbG9uem8K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxndGsvZ3Rr
Lmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAg
V2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGl0ZW07Ci19IFdlYkhpc3RvcnlJdGVtRml4dHVyZTsKLQot
c3RhdGljIHZvaWQgd2ViX2hpc3RvcnlfaXRlbV9maXh0dXJlX3NldHVwKFdlYkhpc3RvcnlJdGVt
Rml4dHVyZSogZml4dHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZml4dHVyZS0+aXRlbSA9IHdlYmtpdF93
ZWJfaGlzdG9yeV9pdGVtX25ld193aXRoX2RhdGEoImh0dHA6Ly9leGFtcGxlLmNvbS8iLCAiRXhh
bXBsZTEiKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoZml4dHVyZS0+aXRlbSktPnJl
Zl9jb3VudCwgPT0gLCAxKTsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT5pdGVtICE9IE5VTEwpOwot
fQotCi1zdGF0aWMgdm9pZCB3ZWJfaGlzdG9yeV9pdGVtX2ZpeHR1cmVfdGVhcmRvd24oV2ViSGlz
dG9yeUl0ZW1GaXh0dXJlKiBmaXh0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBnX2Fzc2VydChmaXh0
dXJlLT5pdGVtICE9IE5VTEwpOwotICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChmaXh0dXJl
LT5pdGVtKS0+cmVmX2NvdW50LCA9PSwgMSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0
X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X2RhdGEoV2ViSGlzdG9yeUl0ZW1GaXh0dXJlKiBmaXh0dXJl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY29u
c3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9y
eV9pdGVtX2dldF90aXRsZShmaXh0dXJlLT5pdGVtKSwgPT0sICJFeGFtcGxlMSIpOwotICAgIGdf
YXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdXJpKGZpeHR1cmUtPml0
ZW0pLCA9PSwgImh0dHA6Ly9leGFtcGxlLmNvbS8iKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93
ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9hbHRlcm5hdGVfdGl0bGUoV2ViSGlzdG9yeUl0ZW1GaXh0
dXJlKiBmaXh0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIHdlYmtpdF93ZWJfaGlz
dG9yeV9pdGVtX3NldF9hbHRlcm5hdGVfdGl0bGUoZml4dHVyZS0+aXRlbSwgIkFsdGVybmF0ZSB0
aXRsZSIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRf
YWx0ZXJuYXRlX3RpdGxlKGZpeHR1cmUtPml0ZW0pLCA9PSwgIkFsdGVybmF0ZSB0aXRsZSIpOwot
fQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCi17Ci0gICAgZ3RrX3Rlc3RfaW5p
dCgmYXJnYywgJmFyZ3YsIE5VTEwpOwotCi0gICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy8iKTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L3dlYmhpc3RvcnlpdGVt
L2dldF9kYXRhIiwKLSAgICAgICAgICAgICAgIFdlYkhpc3RvcnlJdGVtRml4dHVyZSwgMCwgd2Vi
X2hpc3RvcnlfaXRlbV9maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF93ZWJraXRf
d2ViX2hpc3RvcnlfaXRlbV9nZXRfZGF0YSwgd2ViX2hpc3RvcnlfaXRlbV9maXh0dXJlX3RlYXJk
b3duKTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L3dlYmhpc3RvcnlpdGVtL2FsdGVybmF0ZV90
aXRsZSIsCi0gICAgICAgICAgICAgICBXZWJIaXN0b3J5SXRlbUZpeHR1cmUsIDAsIHdlYl9oaXN0
b3J5X2l0ZW1fZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X3dlYl9o
aXN0b3J5X2l0ZW1fYWx0ZXJuYXRlX3RpdGxlLCB3ZWJfaGlzdG9yeV9pdGVtX2ZpeHR1cmVfdGVh
cmRvd24pOwotICAgIHJldHVybiBnX3Rlc3RfcnVuICgpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYmluc3BlY3Rvci5jIGIvU291cmNlL1dlYktpdC9ndGsv
dGVzdHMvdGVzdHdlYmluc3BlY3Rvci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBh
NzQzODJmLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJpbnNw
ZWN0b3IuYworKysgL2Rldi9udWxsCkBAIC0xLDE3MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEyIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSA8Z25zQGdub21lLm9yZz4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgInRlc3RfdXRpbHMuaCIKLQotI2luY2x1ZGUgPHN0cmluZy5o
PgotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d2Vi
a2l0L3dlYmtpdC5oPgotCi1HTWFpbkxvb3AgKmxvb3A7Ci1HdGtXaWRnZXQgKndpbmRvdzsKLQot
c3RhdGljIGdib29sZWFuIHF1aXRMb29wKGdwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19tYWluX2xv
b3BfcXVpdChsb29wKTsKLSAgICByZXR1cm4gVFJVRTsKLX0KLQotLyogSWdub3JlIHNpbXBsZSB0
cmFuc2xhdGlvbi1yZWxhdGVkIG1lc3NhZ2VzIGFuZCB1cGdyYWRlIG90aGVyCi0gKiBtZXNzYWdl
cyB0byB3YXJuaW5ncy4KLSAqLwotc3RhdGljIGdib29sZWFuIGNvbnNvbGVNZXNzYWdlQ2FsbGJh
Y2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgY29uc3QgY2hhciogbWVzc2FnZSwgdW5zaWduZWQg
aW50IGxpbmUsIGNvbnN0IGNoYXIqIHNvdXJjZUlkKQotewotICAgIGlmIChzdHJzdHIobWVzc2Fn
ZSwgIkxvY2FsaXplZCBzdHJpbmciKSB8fCBzdHJzdHIobWVzc2FnZSwgIlByb3RvY29sIEVycm9y
OiB0aGUgbWVzc2FnZSBpcyBmb3Igbm9uLWV4aXN0aW5nIGRvbWFpbiAnUHJvZmlsZXInIikgfHwK
LSAgICAgICAgc3Ryc3RyKG1lc3NhZ2UsICJEaWRuJ3QgZmluZCBhIFRyZWVFbGVtZW50IGZvciBh
IHJlcHJlc2VudGVkT2JqZWN0IikpCi0gICAgICAgIHJldHVybiBUUlVFOwotCi0gICAgZ193YXJu
aW5nKCJDb25zb2xlOiAlcyBAJWQ6ICVzXG4iLCBzb3VyY2VJZCwgbGluZSwgbWVzc2FnZSk7Ci0g
ICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBXZWJLaXRXZWJWaWV3KiBpbnNwZWN0RWxlbWVu
dENhbGxiYWNrKFdlYktpdFdlYkluc3BlY3RvciAqaW5zcGVjdG9yLCBXZWJLaXRXZWJWaWV3ICpp
bnNwZWN0ZWRXZWJWaWV3LCBpbnQgKnRpbWVzRWxlbWVudEluc3BlY3RlZCkKLXsKLSAgICAqdGlt
ZXNFbGVtZW50SW5zcGVjdGVkID0gKnRpbWVzRWxlbWVudEluc3BlY3RlZCArIDE7Ci0KLSAgICB3
aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKLQotICAgIEd0a1dp
ZGdldCAqbmV3V2ViVmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKLSAgICBndGtfY29udGFp
bmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIG5ld1dlYlZpZXcpOwotCi0gICAgZ19zaWdu
YWxfY29ubmVjdChuZXdXZWJWaWV3LCAiY29uc29sZS1tZXNzYWdlIiwKLSAgICAgICAgICAgICAg
ICAgICAgIEdfQ0FMTEJBQ0soY29uc29sZU1lc3NhZ2VDYWxsYmFjayksIE5VTEwpOwotCi0gICAg
cmV0dXJuIFdFQktJVF9XRUJfVklFVyhuZXdXZWJWaWV3KTsKLX0KLQotc3RhdGljIGdib29sZWFu
IGNsb3NlSW5zcGVjdG9yKFdlYktpdFdlYkluc3BlY3RvciAqaW5zcGVjdG9yLCBpbnQgKnRpbWVz
Q2xvc2VkKQotewotICAgICp0aW1lc0Nsb3NlZCA9ICp0aW1lc0Nsb3NlZCArIDE7Ci0KLSAgICBn
dGtfd2lkZ2V0X2Rlc3Ryb3kod2luZG93KTsKLSAgICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGlj
IGdib29sZWFuIHNob3dJbnNwZWN0b3IoV2ViS2l0V2ViSW5zcGVjdG9yICppbnNwZWN0b3IsIGdw
b2ludGVyIGRhdGEpCi17Ci0gICAgZ19pZGxlX2FkZChxdWl0TG9vcCwgTlVMTCk7Ci0gICAgcmV0
dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkIGxvYWRGaW5pc2hlZChXZWJLaXRXZWJWaWV3ICp3
ZWJWaWV3LCBXZWJLaXRXZWJGcmFtZSAqZnJhbWUsIGdib29sZWFuICppc0xvYWRGaW5pc2hlZCkK
LXsKLSAgICAqaXNMb2FkRmluaXNoZWQgPSBUUlVFOwotICAgIGlmIChnX21haW5fbG9vcF9pc19y
dW5uaW5nKGxvb3ApKQotICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwotfQotCi1zdGF0
aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfaW5zcGVjdG9yX2Nsb3NlX2FuZF9pbnNwZWN0KCkKLXsK
LSAgICBXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJf
dmlld19uZXcoKSk7Ci0gICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLQot
ICAgIGdib29sZWFuIGlzTG9hZEZpbmlzaGVkID0gRkFMU0U7Ci0gICAgZ19zaWduYWxfY29ubmVj
dCh3ZWJWaWV3LCAibG9hZC1maW5pc2hlZCIsIEdfQ0FMTEJBQ0sobG9hZEZpbmlzaGVkKSwgJmlz
TG9hZEZpbmlzaGVkKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxodG1sPjxib2R5PjxwPndvb2hvbzwv
cD48L2JvZHk+PC9odG1sPiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXh0
L2h0bWwiLCAiVVRGLTgiLCAiZmlsZTovLyIpOwotICAgIGlmICghaXNMb2FkRmluaXNoZWQpCi0g
ICAgICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLQotICAgIGdfb2JqZWN0X3NldCh3ZWJraXRf
d2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdlYlZpZXcpLCAiZW5hYmxlLWRldmVsb3Blci1leHRyYXMi
LCBUUlVFLCBOVUxMKTsKLSAgICBXZWJLaXRXZWJJbnNwZWN0b3IgKmluc3BlY3RvciA9IHdlYmtp
dF93ZWJfdmlld19nZXRfaW5zcGVjdG9yKHdlYlZpZXcpOwotCi0gICAgaW50IHRpbWVzRWxlbWVu
dEluc3BlY3RlZCA9IDA7Ci0gICAgaW50IHRpbWVzQ2xvc2VkID0gMDsKLSAgICBnX29iamVjdF9j
b25uZWN0KGluc3BlY3RvciwKLSAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6Omluc3BlY3Qt
d2ViLXZpZXciLCBHX0NBTExCQUNLKGluc3BlY3RFbGVtZW50Q2FsbGJhY2spLCAmdGltZXNFbGVt
ZW50SW5zcGVjdGVkLAotICAgICAgICAgICAgICAgICAgICAgInNpZ25hbDo6c2hvdy13aW5kb3ci
LCBHX0NBTExCQUNLKHNob3dJbnNwZWN0b3IpLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAg
InNpZ25hbDo6Y2xvc2Utd2luZG93IiwgR19DQUxMQkFDSyhjbG9zZUluc3BlY3RvciksICZ0aW1l
c0Nsb3NlZCwKLSAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotCi0gICAgd2Via2l0X3dlYl9p
bnNwZWN0b3JfaW5zcGVjdF9jb29yZGluYXRlcyhpbnNwZWN0b3IsIDAuMCwgMC4wKTsKLSAgICBn
X2Fzc2VydF9jbXBpbnQodGltZXNFbGVtZW50SW5zcGVjdGVkLCA9PSwgMSk7Ci0KLSAgICBnX21h
aW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICB3ZWJraXRfd2ViX2luc3BlY3Rvcl9jbG9zZShpbnNw
ZWN0b3IpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0aW1lc0Nsb3NlZCwgPT0sIDEpOwotCi0gICAg
d2Via2l0X3dlYl9pbnNwZWN0b3JfaW5zcGVjdF9jb29yZGluYXRlcyhpbnNwZWN0b3IsIDAuMCwg
MC4wKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGltZXNFbGVtZW50SW5zcGVjdGVkLCA9PSwgMik7
Ci0KLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICBndGtfd2lkZ2V0X2Rlc3Ryb3ko
R1RLX1dJREdFVCh3ZWJWaWV3KSk7Ci0gICAgZ19hc3NlcnRfY21waW50KHRpbWVzQ2xvc2VkLCA9
PSwgMik7Ci0KLSAgICBnX21haW5fbG9vcF91bnJlZihsb29wKTsKLX0KLQotc3RhdGljIHZvaWQg
dGVzdF93ZWJraXRfd2ViX2luc3BlY3Rvcl9kZXN0cm95X2luc3BlY3RlZF93ZWJfdmlldygpCi17
Ci0gICAgV2ViS2l0V2ViVmlldyAqd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2Vi
X3ZpZXdfbmV3KCkpOwotICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7Ci0K
LSAgICBnYm9vbGVhbiBpc0xvYWRGaW5pc2hlZCA9IEZBTFNFOwotICAgIGdfc2lnbmFsX2Nvbm5l
Y3Qod2ViVmlldywgImxvYWQtZmluaXNoZWQiLCBHX0NBTExCQUNLKGxvYWRGaW5pc2hlZCksICZp
c0xvYWRGaW5pc2hlZCk7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8aHRtbD48Ym9keT48cD53b29ob288
L3A+PC9ib2R5PjwvaHRtbD4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGV4
dC9odG1sIiwgIlVURi04IiwgImZpbGU6Ly8iKTsKLSAgICBpZiAoIWlzTG9hZEZpbmlzaGVkKQot
ICAgICAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICBnX29iamVjdF9zZXQod2Via2l0
X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3KSwgImVuYWJsZS1kZXZlbG9wZXItZXh0cmFz
IiwgVFJVRSwgTlVMTCk7Ci0gICAgV2ViS2l0V2ViSW5zcGVjdG9yICppbnNwZWN0b3IgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X2luc3BlY3Rvcih3ZWJWaWV3KTsKLQotICAgIGludCB0aW1lc0VsZW1l
bnRJbnNwZWN0ZWQgPSAwOwotICAgIGludCB0aW1lc0Nsb3NlZCA9IDA7Ci0gICAgZ19vYmplY3Rf
Y29ubmVjdChpbnNwZWN0b3IsCi0gICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjppbnNwZWN0
LXdlYi12aWV3IiwgR19DQUxMQkFDSyhpbnNwZWN0RWxlbWVudENhbGxiYWNrKSwgJnRpbWVzRWxl
bWVudEluc3BlY3RlZCwKLSAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6OnNob3ctd2luZG93
IiwgR19DQUxMQkFDSyhzaG93SW5zcGVjdG9yKSwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAg
ICJzaWduYWw6OmNsb3NlLXdpbmRvdyIsIEdfQ0FMTEJBQ0soY2xvc2VJbnNwZWN0b3IpLCAmdGlt
ZXNDbG9zZWQsCi0gICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLQotICAgIHdlYmtpdF93ZWJf
aW5zcGVjdG9yX2luc3BlY3RfY29vcmRpbmF0ZXMoaW5zcGVjdG9yLCAwLjAsIDAuMCk7Ci0gICAg
Z19hc3NlcnRfY21waW50KHRpbWVzRWxlbWVudEluc3BlY3RlZCwgPT0sIDEpOwotCi0gICAgZ19t
YWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAgZ3RrX3dpZGdldF9kZXN0cm95KEdUS19XSURHRVQo
d2ViVmlldykpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0aW1lc0Nsb3NlZCwgPT0sIDEpOwotCi0g
ICAgZ19tYWluX2xvb3BfdW5yZWYobG9vcCk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFy
KiogYXJndikKLXsKLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAg
ICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwotICAgIGdfdGVz
dF9hZGRfZnVuYygiL3dlYmtpdC93ZWJpbnNwZWN0b3IvZGVzdHJveS1pbnNwZWN0ZWQtd2ViLXZp
ZXciLCB0ZXN0X3dlYmtpdF93ZWJfaW5zcGVjdG9yX2Rlc3Ryb3lfaW5zcGVjdGVkX3dlYl92aWV3
KTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2ViaW5zcGVjdG9yL2Nsb3NlLWFuZC1p
bnNwZWN0IiwgdGVzdF93ZWJraXRfd2ViX2luc3BlY3Rvcl9jbG9zZV9hbmRfaW5zcGVjdCk7Ci0K
LSAgICByZXR1cm4gZ190ZXN0X3J1bigpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9n
dGsvdGVzdHMvdGVzdHdlYnBsdWdpbmRhdGFiYXNlLmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0
cy90ZXN0d2VicGx1Z2luZGF0YWJhc2UuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NjUyODExYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2VicGx1
Z2luZGF0YWJhc2UuYworKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
PGVycm5vLmg+Ci0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0j
aW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KLQotLyogVGhp
cyBmdW5jdGlvbiBpcyBub3QgcHVibGljLCBzbyB3ZSBuZWVkIGFuIGV4dGVybiBkZWNsYXJhdGlv
biAqLwotZXh0ZXJuIHZvaWQgd2Via2l0X3dlYl9zZXR0aW5nc19hZGRfZXh0cmFfcGx1Z2luX2Rp
cmVjdG9yeShXZWJLaXRXZWJWaWV3KiB2aWV3LCBjb25zdCBnY2hhciogZGlyZWN0b3J5KTsKLQot
c3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3BsdWdpbl9kYXRhYmFzZV9nZXRfcGx1Z2lucygp
Ci17Ci0gICAgV2ViS2l0V2ViVmlldyogdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2Vi
X3ZpZXdfbmV3KCkpOwotICAgIFdlYktpdFdlYlBsdWdpbkRhdGFiYXNlKiBkYXRhYmFzZTsKLSAg
ICBHU0xpc3QqIHBsdWdpbkxpc3QsICpwOwotICAgIGdib29sZWFuIGZvdW5kID0gRkFMU0U7Ci0g
ICAgZ2Jvb2xlYW4gZW5hYmxlZCA9IEZBTFNFOwotCi0gICAgd2Via2l0X3dlYl9zZXR0aW5nc19h
ZGRfZXh0cmFfcGx1Z2luX2RpcmVjdG9yeSh2aWV3LCBURVNUX1BMVUdJTl9ESVIpOwotICAgIGdf
b2JqZWN0X3JlZl9zaW5rKEdfT0JKRUNUKHZpZXcpKTsKLQotICAgIGRhdGFiYXNlID0gd2Via2l0
X2dldF93ZWJfcGx1Z2luX2RhdGFiYXNlKCk7Ci0gICAgcGx1Z2luTGlzdCA9IHdlYmtpdF93ZWJf
cGx1Z2luX2RhdGFiYXNlX2dldF9wbHVnaW5zKGRhdGFiYXNlKTsKLSAgICBmb3IgKHAgPSBwbHVn
aW5MaXN0OyBwOyBwID0gcC0+bmV4dCkgewotICAgICAgICBXZWJLaXRXZWJQbHVnaW4qIHBsdWdp
biA9IChXZWJLaXRXZWJQbHVnaW4qKXAtPmRhdGE7Ci0gICAgICAgIGlmICghZ19zdHJjbXAwKHdl
YmtpdF93ZWJfcGx1Z2luX2dldF9uYW1lKHBsdWdpbiksICJXZWJLaXQgVGVzdCBQbHVnSW4iKSAm
JgotICAgICAgICAgICAgIWdfc3RyY21wMCh3ZWJraXRfd2ViX3BsdWdpbl9nZXRfZGVzY3JpcHRp
b24ocGx1Z2luKSwgIlNpbXBsZSBOZXRzY2FwZcKuIHBsdWctaW4gdGhhdCBoYW5kbGVzIHRlc3Qg
Y29udGVudCBmb3IgV2ViS2l0IikpIHsKLSAgICAgICAgICAgIGZvdW5kID0gVFJVRTsKLSAgICAg
ICAgICAgIGVuYWJsZWQgPSB3ZWJraXRfd2ViX3BsdWdpbl9nZXRfZW5hYmxlZChwbHVnaW4pOwot
ICAgICAgICAgICAgd2Via2l0X3dlYl9wbHVnaW5fc2V0X2VuYWJsZWQocGx1Z2luLCBGQUxTRSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgd2Via2l0X3dlYl9wbHVnaW5fZGF0YWJhc2VfcGx1Z2lu
c19saXN0X2ZyZWUocGx1Z2luTGlzdCk7Ci0gICAgZ19hc3NlcnQoZm91bmQpOwotICAgIGdfYXNz
ZXJ0KGVuYWJsZWQpOwotCi0gICAgd2Via2l0X3dlYl9wbHVnaW5fZGF0YWJhc2VfcmVmcmVzaChk
YXRhYmFzZSk7Ci0gICAgcGx1Z2luTGlzdCA9IHdlYmtpdF93ZWJfcGx1Z2luX2RhdGFiYXNlX2dl
dF9wbHVnaW5zKGRhdGFiYXNlKTsKLQotICAgIGZvciAocCA9IHBsdWdpbkxpc3Q7IHA7IHAgPSBw
LT5uZXh0KSB7Ci0gICAgICAgIFdlYktpdFdlYlBsdWdpbiogcGx1Z2luID0gKFdlYktpdFdlYlBs
dWdpbiopcC0+ZGF0YTsKLSAgICAgICAgaWYgKCFnX3N0cmNtcDAod2Via2l0X3dlYl9wbHVnaW5f
Z2V0X25hbWUocGx1Z2luKSwgIldlYktpdCBUZXN0IFBsdWdJbiIpICYmCi0gICAgICAgICAgICAh
Z19zdHJjbXAwKHdlYmtpdF93ZWJfcGx1Z2luX2dldF9kZXNjcmlwdGlvbihwbHVnaW4pLCAiU2lt
cGxlIE5ldHNjYXBlwq4gcGx1Zy1pbiB0aGF0IGhhbmRsZXMgdGVzdCBjb250ZW50IGZvciBXZWJL
aXQiKSkKLSAgICAgICAgICAgIGVuYWJsZWQgPSB3ZWJraXRfd2ViX3BsdWdpbl9nZXRfZW5hYmxl
ZChwbHVnaW4pOwotICAgIH0KLSAgICB3ZWJraXRfd2ViX3BsdWdpbl9kYXRhYmFzZV9wbHVnaW5z
X2xpc3RfZnJlZShwbHVnaW5MaXN0KTsKLSAgICBnX2Fzc2VydCghZW5hYmxlZCk7Ci0KLSAgICBn
X29iamVjdF91bnJlZih2aWV3KTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2
KQotewotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLQotICAgIGdfdGVz
dF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0gICAgZ190ZXN0X2FkZF9m
dW5jKCIvd2Via2l0L3dlYnBsdWdpbmRhdGFiYXNlL2dldHBsdWdpbnMiLCB0ZXN0X3dlYmtpdF93
ZWJfcGx1Z2luX2RhdGFiYXNlX2dldF9wbHVnaW5zKTsKLSAgICByZXR1cm4gZ190ZXN0X3J1biAo
KTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJyZXNvdXJj
ZS5jIGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYnJlc291cmNlLmMKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjNThiN2EuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dC9ndGsvdGVzdHMvdGVzdHdlYnJlc291cmNlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMzEgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4gTWljaGFlbCBBbG9uem8KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0j
aW5jbHVkZSA8bGlic291cC9zb3VwLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8
d2Via2l0L3dlYmtpdC5oPgotCi0jZGVmaW5lIElOREVYX0hUTUwgIjxodG1sPjwvaHRtbD4iCi0j
ZGVmaW5lIE1BSU5fSFRNTCAiPGh0bWw+PGhlYWQ+PHNjcmlwdCBsYW5ndWFnZT1cImphdmFzY3Jp
cHRcIiBzcmM9XCIvamF2YXNjcmlwdC5qc1wiPjwvc2NyaXB0PjwvaGVhZD48Ym9keT48aDE+aGFo
PC9oMT48L2h0bWw+IgotI2RlZmluZSBKQVZBU0NSSVBUICJmdW5jdGlvbiBibGFoICgpIHsgdmFy
IGEgPSAxOyB9IgotCi1HTWFpbkxvb3AqIGxvb3A7Ci1Tb3VwU2Vzc2lvbiAqc2Vzc2lvbjsKLWNo
YXIgKmJhc2VfdXJpOwotV2ViS2l0V2ViUmVzb3VyY2UqIG1haW5fcmVzb3VyY2U7Ci1XZWJLaXRX
ZWJSZXNvdXJjZSogc3ViX3Jlc291cmNlOwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgV2ViS2l0
V2ViUmVzb3VyY2UqIHdlYlJlc291cmNlOwotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXc7Ci19
IFdlYlJlc291cmNlRml4dHVyZTsKLQotLyogRm9yIHJlYWwgcmVxdWVzdCB0ZXN0aW5nICovCi1z
dGF0aWMgdm9pZAotc2VydmVyX2NhbGxiYWNrIChTb3VwU2VydmVyICpzZXJ2ZXIsIFNvdXBNZXNz
YWdlICptc2csCi0gICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsIEdIYXNoVGFibGUg
KnF1ZXJ5LAotICAgICAgICAgICAgICAgICBTb3VwQ2xpZW50Q29udGV4dCAqY29udGV4dCwgZ3Bv
aW50ZXIgZGF0YSkKLXsKLSAgICBpZiAobXNnLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7
Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzIChtc2csIFNPVVBfU1RBVFVTX05PVF9J
TVBMRU1FTlRFRCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzb3VwX21lc3NhZ2Vf
c2V0X3N0YXR1cyAobXNnLCBTT1VQX1NUQVRVU19PSyk7Ci0KLSAgICAvKiBSZWRpcmVjdCAqLwot
ICAgIGlmIChnX3N0cl9lcXVhbCAocGF0aCwgIi8iKSkgewotICAgICAgICBzb3VwX21lc3NhZ2Vf
c2V0X3N0YXR1cyAobXNnLCBTT1VQX1NUQVRVU19NT1ZFRF9QRVJNQU5FTlRMWSk7Ci0KLSAgICAg
ICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kIChtc2ctPnJlc3BvbnNlX2hlYWRlcnMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxvY2F0aW9uIiwgIi9pbmRleC5o
dG1sIik7Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbCAocGF0aCwgIi9pbmRleC5odG1sIikp
IHsKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kIChtc2ctPnJlc3BvbnNlX2JvZHks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU09VUF9NRU1PUllfQ09QWSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkRFWF9IVE1MLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiAoSU5ERVhfSFRNTCkpOwotICAgIH0gZWxzZSBp
ZiAoZ19zdHJfZXF1YWwgKHBhdGgsICIvbWFpbi5odG1sIikpIHsKLSAgICAgICAgc291cF9tZXNz
YWdlX2JvZHlfYXBwZW5kIChtc2ctPnJlc3BvbnNlX2JvZHksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU09VUF9NRU1PUllfQ09QWSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBNQUlOX0hUTUwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RybGVuIChNQUlOX0hUTUwpKTsKLSAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsIChwYXRoLCAi
L2phdmFzY3JpcHQuanMiKSkgewotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQgKG1z
Zy0+cmVzcG9uc2VfYm9keSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT1VQ
X01FTU9SWV9DT1BZLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpBVkFTQ1JJ
UFQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuIChKQVZBU0NSSVBU
KSk7Ci0gICAgfQotCi0KLSAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZSAobXNnLT5yZXNw
b25zZV9ib2R5KTsKLX0KLQotc3RhdGljIHZvaWQgd2ViX3Jlc291cmNlX2ZpeHR1cmVfc2V0dXAo
V2ViUmVzb3VyY2VGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAg
Zml4dHVyZS0+d2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkp
OwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKGZpeHR1cmUtPndlYlZpZXcpOwotICAgIGNvbnN0IGdj
aGFyKiB3ZWJEYXRhID0gIjxodG1sPjwvaHRtbD4iOwotICAgIGZpeHR1cmUtPndlYlJlc291cmNl
ID0gd2Via2l0X3dlYl9yZXNvdXJjZV9uZXcod2ViRGF0YSwgc3RybGVuKHdlYkRhdGEpLCAiaHR0
cDovL2V4YW1wbGUuY29tLyIsICJ0ZXh0L2h0bWwiLCAidXRmOCIsICJFeGFtcGxlLmNvbSIpOwot
ICAgIGdfYXNzZXJ0KGZpeHR1cmUtPndlYlJlc291cmNlKTsKLX0KLQotc3RhdGljIHZvaWQgd2Vi
X3Jlc291cmNlX2ZpeHR1cmVfdGVhcmRvd24oV2ViUmVzb3VyY2VGaXh0dXJlKiBmaXh0dXJlLCBn
Y29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+d2ViUmVzb3VyY2Up
OwotICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPndlYlJlc291cmNlKTsKLSAgICBnX29iamVj
dF91bnJlZihmaXh0dXJlLT53ZWJWaWV3KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRf
d2ViX3Jlc291cmNlX2dldF91cmwoV2ViUmVzb3VyY2VGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rw
b2ludGVyIGRhdGEpCi17Ci0gICAgZ2NoYXIqIHVybDsKLSAgICBnX29iamVjdF9nZXQoR19PQkpF
Q1QoZml4dHVyZS0+d2ViUmVzb3VyY2UpLCAidXJpIiwgJnVybCwgTlVMTCk7Ci0gICAgZ19hc3Nl
cnRfY21wc3RyKHVybCwgPT0sICJodHRwOi8vZXhhbXBsZS5jb20vIik7Ci0gICAgZ19hc3NlcnRf
Y21wc3RyKHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaShmaXh0dXJlLT53ZWJSZXNvdXJjZSkg
LD09LCJodHRwOi8vZXhhbXBsZS5jb20vIik7Ci0gICAgZ19mcmVlKHVybCk7Ci19Ci0KLXN0YXRp
YyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZGF0YShXZWJSZXNvdXJjZUZpeHR1
cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBHU3RyaW5nKiBjaGFyRGF0
YSA9IHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X2RhdGEoZml4dHVyZS0+d2ViUmVzb3VyY2UpOwot
ICAgIGdfYXNzZXJ0X2NtcHN0cihjaGFyRGF0YS0+c3RyLCA9PSwgIjxodG1sPjwvaHRtbD4iKTsK
LX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3Jlc291cmNlX2dldF9taW1lX3R5cGUo
V2ViUmVzb3VyY2VGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAg
Z2NoYXIqIG1pbWVfdHlwZTsKLSAgICBnX29iamVjdF9nZXQoR19PQkpFQ1QoZml4dHVyZS0+d2Vi
UmVzb3VyY2UpLCAibWltZS10eXBlIiwgJm1pbWVfdHlwZSwgTlVMTCk7Ci0gICAgZ19hc3NlcnRf
Y21wc3RyKG1pbWVfdHlwZSwgPT0sICJ0ZXh0L2h0bWwiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIo
d2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfbWltZV90eXBlKGZpeHR1cmUtPndlYlJlc291cmNlKSw9
PSwidGV4dC9odG1sIik7Ci0gICAgZ19mcmVlKG1pbWVfdHlwZSk7Ci19Ci0KLXN0YXRpYyB2b2lk
IHRlc3Rfd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZW5jb2RpbmcoV2ViUmVzb3VyY2VGaXh0dXJl
KiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ2NoYXIqIHRleHRfZW5jb2Rp
bmc7Ci0gICAgZ19vYmplY3RfZ2V0KEdfT0JKRUNUKGZpeHR1cmUtPndlYlJlc291cmNlKSwgImVu
Y29kaW5nIiwgJnRleHRfZW5jb2RpbmcsIE5VTEwpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0
X2VuY29kaW5nLCA9PSwgInV0ZjgiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9y
ZXNvdXJjZV9nZXRfZW5jb2RpbmcoZml4dHVyZS0+d2ViUmVzb3VyY2UpLD09LCJ1dGY4Iik7Ci0g
ICAgZ19mcmVlKHRleHRfZW5jb2RpbmcpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93
ZWJfcmVzb3VyY2VfZ2V0X2ZyYW1lX25hbWUoV2ViUmVzb3VyY2VGaXh0dXJlKiBmaXh0dXJlLCBn
Y29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ2NoYXIqIGZyYW1lX25hbWU7Ci0gICAgZ19vYmpl
Y3RfZ2V0KEdfT0JKRUNUKGZpeHR1cmUtPndlYlJlc291cmNlKSwgImZyYW1lLW5hbWUiLCAmZnJh
bWVfbmFtZSwgTlVMTCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKGZyYW1lX25hbWUsID09LCAiRXhh
bXBsZS5jb20iKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9yZXNvdXJjZV9nZXRf
ZnJhbWVfbmFtZShmaXh0dXJlLT53ZWJSZXNvdXJjZSksPT0sIkV4YW1wbGUuY29tIik7Ci0gICAg
Z19mcmVlKGZyYW1lX25hbWUpOwotfQotCi1zdGF0aWMgdm9pZCByZXNvdXJjZV9yZXF1ZXN0X3N0
YXJ0aW5nX2NiKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBXZWJLaXRXZWJGcmFtZSogd2ViX2Zy
YW1lLCBXZWJLaXRXZWJSZXNvdXJjZSogd2ViX3Jlc291cmNlLCBXZWJLaXROZXR3b3JrUmVxdWVz
dCogcmVxdWVzdCwgV2ViS2l0TmV0d29ya1Jlc3BvbnNlKiByZXNwb25zZSwgZ3BvaW50ZXIgZGF0
YSkKLXsKLSAgICBnaW50KiBiZWVuX3RoZXJlID0gZGF0YTsKLSAgICAqYmVlbl90aGVyZSA9ICpi
ZWVuX3RoZXJlICsgMTsKLQotICAgIGlmICgqYmVlbl90aGVyZSA9PSAxKSB7Ci0gICAgICAgIGdf
YXNzZXJ0KCFtYWluX3Jlc291cmNlKTsKLSAgICAgICAgbWFpbl9yZXNvdXJjZSA9IGdfb2JqZWN0
X3JlZih3ZWJfcmVzb3VyY2UpOwotCi0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2Vi
X3Jlc291cmNlX2dldF91cmkod2ViX3Jlc291cmNlKSwgPT0sIGJhc2VfdXJpKTsKLQotICAgICAg
ICAvKiBUaGlzIHNob3VsZCBiZSBhIHJlZGlyZWN0LCBzbyB0aGUgcmVzcG9uc2UgbXVzdCBiZSBO
VUxMICovCi0gICAgICAgIGdfYXNzZXJ0KCFyZXNwb25zZSk7Ci0gICAgfSBlbHNlIGlmICgqYmVl
bl90aGVyZSA9PSAyKSB7Ci0gICAgICAgIGNoYXIqIHVyaSA9IGdfc3RyZHVwX3ByaW50ZigiJXNp
bmRleC5odG1sIiwgYmFzZV91cmkpOwotCi0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRf
d2ViX3Jlc291cmNlX2dldF91cmkod2ViX3Jlc291cmNlKSwgPT0sIHVyaSk7Ci0KLSAgICAgICAg
LyogQ2FuY2VsIHRoZSByZXF1ZXN0LiAqLwotICAgICAgICB3ZWJraXRfbmV0d29ya19yZXF1ZXN0
X3NldF91cmkocmVxdWVzdCwgImFib3V0OmJsYW5rIik7Ci0KLSAgICAgICAgZ19mcmVlKHVyaSk7
Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBub3RpZnlfbG9hZF9zdGF0dXNfY2IoV2ViS2l0V2Vi
Vmlldyogd2ViX3ZpZXcsIEdQYXJhbVNwZWMqIHBzcGVjLCBncG9pbnRlciBkYXRhKQotewotICAg
IGlmICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYl92aWV3KSA9PSBXRUJLSVRf
TE9BRF9GSU5JU0hFRCkgewotICAgICAgICBnYm9vbGVhbiogYmVlbl90aGVyZSA9IGRhdGE7Ci0g
ICAgICAgICpiZWVuX3RoZXJlID0gVFJVRTsKLQotICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Vi
a2l0X3dlYl92aWV3X2dldF91cmkod2ViX3ZpZXcpLCA9PSwgImFib3V0OmJsYW5rIik7Ci0KLSAg
ICAgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHRl
c3Rfd2ViX3Jlc291cmNlX2xvYWRpbmcoKQotewotICAgIFdlYktpdFdlYlZpZXcqIHdlYl92aWV3
ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZ2ludCBiZWVu
X3RvX3Jlc291cmNlX3JlcXVlc3Rfc3RhcnRpbmcgPSAwOwotICAgIGdib29sZWFuIGJlZW5fdG9f
bG9hZF9maW5pc2hlZCA9IEZBTFNFOwotICAgIFdlYktpdFdlYkZyYW1lKiB3ZWJfZnJhbWU7Ci0g
ICAgV2ViS2l0V2ViRGF0YVNvdXJjZSogZGF0YV9zb3VyY2U7Ci0KLSAgICBsb29wID0gZ19tYWlu
X2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotCi0gICAgZ19vYmplY3RfcmVmX3Npbmsod2ViX3ZpZXcp
OwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh3ZWJfdmlldywgInJlc291cmNlLXJlcXVlc3Qtc3Rh
cnRpbmciLAotICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhyZXNvdXJjZV9yZXF1ZXN0
X3N0YXJ0aW5nX2NiKSwKLSAgICAgICAgICAgICAgICAgICAgICZiZWVuX3RvX3Jlc291cmNlX3Jl
cXVlc3Rfc3RhcnRpbmcpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh3ZWJfdmlldywgIm5vdGlm
eTo6bG9hZC1zdGF0dXMiLAotICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhub3RpZnlf
bG9hZF9zdGF0dXNfY2IpLAotICAgICAgICAgICAgICAgICAgICAgJmJlZW5fdG9fbG9hZF9maW5p
c2hlZCk7Ci0KLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkod2ViX3ZpZXcsIGJhc2VfdXJp
KTsKLQotICAgIC8qIFdlIHdvbid0IGdldCBmaW5pc2hlZCBpbW1lZGlhdGVseSwgYmVjYXVzZSBv
ZiB0aGUgcmVkaXJlY3QgKi8KLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0gICAgCi0gICAg
d2ViX2ZyYW1lID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKHdlYl92aWV3KTsKLSAg
ICBkYXRhX3NvdXJjZSA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X2RhdGFfc291cmNlKHdlYl9mcmFt
ZSk7Ci0KLSAgICBnX2Fzc2VydChtYWluX3Jlc291cmNlKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRf
d2ViX2RhdGFfc291cmNlX2dldF9tYWluX3Jlc291cmNlKGRhdGFfc291cmNlKSA9PSBtYWluX3Jl
c291cmNlKTsKLSAgICBnX29iamVjdF91bnJlZihtYWluX3Jlc291cmNlKTsKLSAgICAKLSAgICBn
X2Fzc2VydF9jbXBpbnQoYmVlbl90b19yZXNvdXJjZV9yZXF1ZXN0X3N0YXJ0aW5nLCA9PSwgMik7
Ci0gICAgZ19hc3NlcnRfY21waW50KGJlZW5fdG9fbG9hZF9maW5pc2hlZCwgPT0sIFRSVUUpOwot
Ci0gICAgZ19vYmplY3RfdW5yZWYod2ViX3ZpZXcpOwotICAgIGdfbWFpbl9sb29wX3VucmVmKGxv
b3ApOwotfQotCi1zdGF0aWMgdm9pZCByZXNvdXJjZV9yZXF1ZXN0X3N0YXJ0aW5nX3N1Yl9jYihX
ZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgV2ViS2l0V2ViRnJhbWUqIHdlYl9mcmFtZSwgV2ViS2l0
V2ViUmVzb3VyY2UqIHdlYl9yZXNvdXJjZSwgV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3Qs
IFdlYktpdE5ldHdvcmtSZXNwb25zZSogcmVzcG9uc2UsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAg
aWYgKCFtYWluX3Jlc291cmNlKQotICAgICAgICBtYWluX3Jlc291cmNlID0gZ19vYmplY3RfcmVm
KHdlYl9yZXNvdXJjZSk7Ci0gICAgZWxzZSBpZiAoIXN1Yl9yZXNvdXJjZSkKLSAgICAgIHN1Yl9y
ZXNvdXJjZSA9IGdfb2JqZWN0X3JlZih3ZWJfcmVzb3VyY2UpOwotfQotCi1zdGF0aWMgdm9pZCBu
b3RpZnlfbG9hZF9zdGF0dXNfc3ViX2NiKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBHUGFyYW1T
cGVjKiBwc3BlYywgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBpZiAod2Via2l0X3dlYl92aWV3X2dl
dF9sb2FkX3N0YXR1cyh3ZWJfdmlldykgPT0gV0VCS0lUX0xPQURfRklOSVNIRUQpCi0gICAgICAg
IGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBpZGxlX3F1aXRf
bG9vcF9jYihncG9pbnRlciBkYXRhKQotewotICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci0g
ICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYl9yZXNvdXJjZV9zdWJf
cmVzb3VyY2VfbG9hZGluZygpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcgPSBXRUJL
SVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBXZWJLaXRXZWJGcmFtZSog
d2ViX2ZyYW1lOwotICAgIFdlYktpdFdlYkRhdGFTb3VyY2UqIGRhdGFfc291cmNlOwotICAgIEdM
aXN0KiBzdWJfcmVzb3VyY2VzOwotICAgIGNoYXIqIHVyaSA9IGdfc3RyZHVwX3ByaW50ZigiJXNt
YWluLmh0bWwiLCBiYXNlX3VyaSk7Ci0KLSAgICBtYWluX3Jlc291cmNlID0gTlVMTDsKLSAgICAK
LSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotCi0gICAgZ19vYmplY3Rf
cmVmX3Npbmsod2ViX3ZpZXcpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh3ZWJfdmlldywgInJl
c291cmNlLXJlcXVlc3Qtc3RhcnRpbmciLAotICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFD
SyhyZXNvdXJjZV9yZXF1ZXN0X3N0YXJ0aW5nX3N1Yl9jYiksCi0gICAgICAgICAgICAgICAgICAg
ICBOVUxMKTsKLQotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViX3ZpZXcsICJub3RpZnk6OmxvYWQt
c3RhdHVzIiwKLSAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sobm90aWZ5X2xvYWRfc3Rh
dHVzX3N1Yl9jYiksCi0gICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLQotICAgIHdlYmtpdF93
ZWJfdmlld19sb2FkX3VyaSh3ZWJfdmlldywgdXJpKTsKLQotICAgIGdfbWFpbl9sb29wX3J1bihs
b29wKTsKLQotICAgIC8qIFRoZSBtYWluIHJlc291cmNlIHNob3VsZCBiZSBsb2FkZWQ7IG5vdyBs
ZXQncyB3YWl0IGZvciB0aGUgc3ViLXJlc291cmNlIHRvIGxvYWQgKi8KLSAgICBnX2lkbGVfYWRk
KGlkbGVfcXVpdF9sb29wX2NiLCBOVUxMKTsKLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0g
ICAgCi0gICAgZ19hc3NlcnQobWFpbl9yZXNvdXJjZSAmJiBzdWJfcmVzb3VyY2UpOwotICAgIGdf
YXNzZXJ0KG1haW5fcmVzb3VyY2UgIT0gc3ViX3Jlc291cmNlKTsKLQotICAgIHdlYl9mcmFtZSA9
IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh3ZWJfdmlldyk7Ci0gICAgZGF0YV9zb3Vy
Y2UgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9kYXRhX3NvdXJjZSh3ZWJfZnJhbWUpOwotCi0gICAg
Z19hc3NlcnQod2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfbWFpbl9yZXNvdXJjZShkYXRhX3Nv
dXJjZSkgPT0gbWFpbl9yZXNvdXJjZSk7Ci0gICAgZ19vYmplY3RfdW5yZWYobWFpbl9yZXNvdXJj
ZSk7Ci0KLSAgICBzdWJfcmVzb3VyY2VzID0gd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfc3Vi
cmVzb3VyY2VzKGRhdGFfc291cmNlKTsKLSAgICAvLyBFeHBlY3RlZCByZXNvdXJjZXM6IGphdmFz
Y3JpcHRzLmpzLCBmYXZpY29uLmljbwotICAgIGdfYXNzZXJ0KHN1Yl9yZXNvdXJjZXMpOwotICAg
IGdfYXNzZXJ0KHN1Yl9yZXNvdXJjZXMtPm5leHQpOwotICAgIGdfYXNzZXJ0KCFzdWJfcmVzb3Vy
Y2VzLT5uZXh0LT5uZXh0KTsKLQotICAgIC8vIFRlc3QgdGhhdCB0aGUgb2JqZWN0IHdlIGdvdCBm
cm9tIHRoZSBkYXRhIHNvdXJjZSBpcyB0aGUgc2FtZQotICAgIC8vIHRoYXQgd2VudCB0aHJvdWdo
IHJlc291cmNlLXJlcXVlc3Qtc3RhcnRpbmcuIE5vdGUgdGhhdCB0aGUgb3JkZXIgaXMKLSAgICAv
LyBub3QgaW1wb3J0YW50IChhbmQgbm90IGd1YXJhbnRlZWQgc2luY2UgdGhlIHJlc291cmNlcyBh
cmUgc3RvcmVkIGluIGEKLSAgICAvLyBoYXNodGFibGUpLgotICAgIGdfYXNzZXJ0KFdFQktJVF9X
RUJfUkVTT1VSQ0Uoc3ViX3Jlc291cmNlcy0+ZGF0YSkgPT0gc3ViX3Jlc291cmNlCi0gICAgICAg
ICAgICAgfHwgV0VCS0lUX1dFQl9SRVNPVVJDRShzdWJfcmVzb3VyY2VzLT5uZXh0LT5kYXRhKSA9
PSBzdWJfcmVzb3VyY2UpOwotCi0gICAgZ19vYmplY3RfdW5yZWYod2ViX3ZpZXcpOwotICAgIGdf
bWFpbl9sb29wX3VucmVmKGxvb3ApOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFy
Z3YpCi17Ci0gICAgU291cFNlcnZlciogc2VydmVyOwotICAgIFNvdXBVUkkqIHNvdXBfdXJpOwot
Ci0gICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOwotCi0gICAgc2VydmVyID0g
c291cF9zZXJ2ZXJfbmV3KFNPVVBfU0VSVkVSX1BPUlQsIDAsIE5VTEwpOwotICAgIHNvdXBfc2Vy
dmVyX3J1bl9hc3luYyhzZXJ2ZXIpOwotCi0gICAgc291cF9zZXJ2ZXJfYWRkX2hhbmRsZXIoc2Vy
dmVyLCBOVUxMLCBzZXJ2ZXJfY2FsbGJhY2ssIE5VTEwsIE5VTEwpOwotCi0gICAgc291cF91cmkg
PSBzb3VwX3VyaV9uZXcoImh0dHA6Ly8xMjcuMC4wLjEvIik7Ci0gICAgc291cF91cmlfc2V0X3Bv
cnQoc291cF91cmksIHNvdXBfc2VydmVyX2dldF9wb3J0KHNlcnZlcikpOwotCi0gICAgYmFzZV91
cmkgPSBzb3VwX3VyaV90b19zdHJpbmcoc291cF91cmksIEZBTFNFKTsKLSAgICBzb3VwX3VyaV9m
cmVlKHNvdXBfdXJpKTsKLQotICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvIik7Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC93ZWJyZXNvdXJjZS9nZXRfdXJsIiwK
LSAgICAgICAgICAgICAgIFdlYlJlc291cmNlRml4dHVyZSwgMCwgd2ViX3Jlc291cmNlX2ZpeHR1
cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3Vy
bCwgd2ViX3Jlc291cmNlX2ZpeHR1cmVfdGVhcmRvd24pOwotICAgIGdfdGVzdF9hZGQoIi93ZWJr
aXQvd2VicmVzb3VyY2UvZ2V0X21pbWVfdHlwZSIsCi0gICAgICAgICAgICAgICBXZWJSZXNvdXJj
ZUZpeHR1cmUsIDAsIHdlYl9yZXNvdXJjZV9maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAg
dGVzdF93ZWJraXRfd2ViX3Jlc291cmNlX2dldF9taW1lX3R5cGUsIHdlYl9yZXNvdXJjZV9maXh0
dXJlX3RlYXJkb3duKTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L3dlYnJlc291cmNlL2dldF90
ZXh0X2VuY29kaW5nX25hbWUiLAotICAgICAgICAgICAgICAgV2ViUmVzb3VyY2VGaXh0dXJlLCAw
LCB3ZWJfcmVzb3VyY2VfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0
X3dlYl9yZXNvdXJjZV9nZXRfZW5jb2RpbmcsIHdlYl9yZXNvdXJjZV9maXh0dXJlX3RlYXJkb3du
KTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L3dlYnJlc291cmNlL2dldF9mcmFtZV9uYW1lIiwK
LSAgICAgICAgICAgICAgIFdlYlJlc291cmNlRml4dHVyZSwgMCwgd2ViX3Jlc291cmNlX2ZpeHR1
cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X2Zy
YW1lX25hbWUsIHdlYl9yZXNvdXJjZV9maXh0dXJlX3RlYXJkb3duKTsKLSAgICBnX3Rlc3RfYWRk
KCIvd2Via2l0L3dlYnJlc291cmNlL2dldF9kYXRhIiwKLSAgICAgICAgICAgICAgIFdlYlJlc291
cmNlRml4dHVyZSwgMCwgd2ViX3Jlc291cmNlX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAg
ICB0ZXN0X3dlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X2RhdGEsIHdlYl9yZXNvdXJjZV9maXh0dXJl
X3RlYXJkb3duKTsKLQotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJyZXNvdXJjZS9s
b2FkaW5nIiwgdGVzdF93ZWJfcmVzb3VyY2VfbG9hZGluZyk7Ci0gICAgZ190ZXN0X2FkZF9mdW5j
KCIvd2Via2l0L3dlYnJlc291cmNlL3N1Yl9yZXNvdXJjZV9sb2FkaW5nIiwgdGVzdF93ZWJfcmVz
b3VyY2Vfc3ViX3Jlc291cmNlX2xvYWRpbmcpOwotCi0gICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2Vic2V0dGluZ3Mu
YyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJzZXR0aW5ncy5jCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAzNTQ4OWNkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQv
Z3RrL3Rlc3RzL3Rlc3R3ZWJzZXR0aW5ncy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTU5ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIE1pY2hhZWwgQWxvbnpvCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2lu
Y2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KLQotLyogUHJpdmF0ZSBBUEkgKi8KLWNoYXIqIHdlYmtp
dFdlYlNldHRpbmdzVXNlckFnZW50Rm9yVVJJKFdlYktpdFdlYlNldHRpbmdzICpzZXR0aW5ncywg
Y29uc3QgY2hhciAqdXJpKTsKLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3NldHRpbmdz
X2NvcHkodm9pZCkKLXsKLSAgICBXZWJLaXRXZWJTZXR0aW5ncyAqc2V0dGluZ3MgPSB3ZWJraXRf
d2ViX3NldHRpbmdzX25ldygpOwotCi0gICAgLy8gU2V0IHNvbWUgbm9uLWRlZmF1bHQgc2V0dGlu
Z3MgdG8gdmVyaWZ5IHRoYXQgc2V0dGluZ3MgYXJlIHByb3Blcmx5IGNvcGllZC4KLSAgICBnX29i
amVjdF9zZXQoc2V0dGluZ3MsCi0gICAgICAgICAgICAgICAgICJlbmFibGUtd2ViZ2wiLCBUUlVF
LAotICAgICAgICAgICAgICAgICAiZW5hYmxlLWZ1bGxzY3JlZW4iLCBUUlVFLAotICAgICAgICAg
ICAgICAgICAiYXV0by1sb2FkLWltYWdlcyIsIEZBTFNFLAotICAgICAgICAgICAgICAgICAiZGVm
YXVsdC1lbmNvZGluZyIsICJ1dGYtOCIsCi0gICAgICAgICAgICAgICAgICJlbmFibGUtbWVkaWFz
b3VyY2UiLCBUUlVFLAotICAgICAgICAgICAgICAgICBOVUxMKTsKLQotICAgIFdlYktpdFdlYlNl
dHRpbmdzICpjb3B5ID0gd2Via2l0X3dlYl9zZXR0aW5nc19jb3B5KHNldHRpbmdzKTsKLQotICAg
IGdib29sZWFuIGVuYWJsZVdlYkdMID0gRkFMU0U7Ci0gICAgZ2Jvb2xlYW4gZW5hYmxlRnVsbHNj
cmVlbiA9IEZBTFNFOwotICAgIGdib29sZWFuIGF1dG9Mb2FkSW1hZ2VzID0gRkFMU0U7Ci0gICAg
Z2Jvb2xlYW4gZW5hYmxlTWVkaWFTb3VyY2UgPSBGQUxTRTsKLSAgICBjaGFyICpkZWZhdWx0RW5j
b2RpbmcgPSAwOwotICAgIGdfb2JqZWN0X2dldChjb3B5LAotICAgICAgICAgICAgICAgICAiZW5h
YmxlLWZ1bGxzY3JlZW4iLCAmZW5hYmxlRnVsbHNjcmVlbiwKLSAgICAgICAgICAgICAgICAgImVu
YWJsZS13ZWJnbCIsICZlbmFibGVXZWJHTCwKLSAgICAgICAgICAgICAgICAgImF1dG8tbG9hZC1p
bWFnZXMiLCAmYXV0b0xvYWRJbWFnZXMsCi0gICAgICAgICAgICAgICAgICJkZWZhdWx0LWVuY29k
aW5nIiwgJmRlZmF1bHRFbmNvZGluZywKLSAgICAgICAgICAgICAgICAgImVuYWJsZS1tZWRpYXNv
dXJjZSIsICZlbmFibGVNZWRpYVNvdXJjZSwKLSAgICAgICAgICAgICAgICAgTlVMTCk7Ci0KLSAg
ICBnX2Fzc2VydChlbmFibGVXZWJHTCk7Ci0gICAgZ19hc3NlcnQoZW5hYmxlRnVsbHNjcmVlbik7
Ci0gICAgZ19hc3NlcnQoIWF1dG9Mb2FkSW1hZ2VzKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoZGVm
YXVsdEVuY29kaW5nLCA9PSwgInV0Zi04Iik7Ci0gICAgZ19hc3NlcnQoZW5hYmxlTWVkaWFTb3Vy
Y2UpOwotICAgIGdfZnJlZShkZWZhdWx0RW5jb2RpbmcpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0
X25vbl9xdWlya3lfdXNlcl9hZ2VudHMoV2ViS2l0V2ViU2V0dGluZ3MgKnNldHRpbmdzLCBjb25z
dCBjaGFyICpkZWZhdWx0VXNlckFnZW50KQotewotICAgIGNoYXIgKnVzZXJBZ2VudCA9IDA7Ci0K
LSAgICAvLyB0ZXN0IGEgY3VzdG9tIFVBIHN0cmluZwotICAgIHVzZXJBZ2VudCA9IDA7Ci0gICAg
Z19vYmplY3Rfc2V0KHNldHRpbmdzLCAidXNlci1hZ2VudCIsICJ0ZXN0d2Vic2V0dGluZ3MvMC4x
IiwgTlVMTCk7Ci0gICAgZ19vYmplY3RfZ2V0KHNldHRpbmdzLCJ1c2VyLWFnZW50IiwgJnVzZXJB
Z2VudCwgTlVMTCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHVzZXJBZ2VudCwgPT0sICJ0ZXN0d2Vi
c2V0dGluZ3MvMC4xIik7Ci0gICAgZ19mcmVlKHVzZXJBZ2VudCk7Ci0KLSAgICAvLyBzZXR0aW5n
IGl0IHRvIE5VTEwgb3IgYW4gZW1wdHkgdmFsdWUgc2hvdWxkIGdpdmUgdXMgdGhlIGRlZmF1bHQg
VUEgc3RyaW5nCi0gICAgdXNlckFnZW50ID0gMDsKLSAgICBnX29iamVjdF9zZXQoc2V0dGluZ3Ms
ICJ1c2VyLWFnZW50IiwgMCwgTlVMTCk7Ci0gICAgZ19vYmplY3RfZ2V0KHNldHRpbmdzLCJ1c2Vy
LWFnZW50IiwgJnVzZXJBZ2VudCwgTlVMTCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHVzZXJBZ2Vu
dCwgPT0sIGRlZmF1bHRVc2VyQWdlbnQpOwotICAgIGdfZnJlZSh1c2VyQWdlbnQpOwotCi0gICAg
dXNlckFnZW50ID0gMDsKLSAgICBnX29iamVjdF9zZXQoc2V0dGluZ3MsICJ1c2VyLWFnZW50Iiwg
IiIsIE5VTEwpOwotICAgIGdfb2JqZWN0X2dldChzZXR0aW5ncywidXNlci1hZ2VudCIsICZ1c2Vy
QWdlbnQsIE5VTEwpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih1c2VyQWdlbnQsID09LCBkZWZhdWx0
VXNlckFnZW50KTsKLSAgICBnX2ZyZWUodXNlckFnZW50KTsKLX0KLQotc3RhdGljIHZvaWQgdGVz
dF93ZWJraXRfd2ViX3NldHRpbmdzX3VzZXJfYWdlbnQodm9pZCkKLXsKLSAgICBXZWJLaXRXZWJT
ZXR0aW5ncyAqc2V0dGluZ3M7Ci0gICAgR3RrV2lkZ2V0ICp3ZWJWaWV3OwotICAgIGNoYXIgKmRl
ZmF1bHRVc2VyQWdlbnQ7Ci0gICAgY2hhciAqdXNlckFnZW50ID0gMDsKLSAgICBnX3Rlc3RfYnVn
KCIxNzM3NSIpOwotCi0gICAgd2ViVmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKLSAgICBn
X29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKLQotICAgIHNldHRpbmdzID0gd2Via2l0X3dlYl92
aWV3X2dldF9zZXR0aW5ncyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldykpOwotICAgIGRlZmF1bHRV
c2VyQWdlbnQgPSBnX3N0cmR1cCh3ZWJraXRfd2ViX3NldHRpbmdzX2dldF91c2VyX2FnZW50KHNl
dHRpbmdzKSk7Ci0KLSAgICB0ZXN0X25vbl9xdWlya3lfdXNlcl9hZ2VudHMoc2V0dGluZ3MsIGRl
ZmF1bHRVc2VyQWdlbnQpOwotCi0gICAgLyogVGVzdCBxdWlya3kgZ29vZ2xlIGRvbWFpbnMgKi8K
LSAgICBnX29iamVjdF9zZXQoc2V0dGluZ3MsICJ1c2VyLWFnZW50IiwgInRlc3R3ZWJzZXR0aW5n
cy8wLjEiLCBOVUxMKTsKLQotICAgIHVzZXJBZ2VudCA9IHdlYmtpdFdlYlNldHRpbmdzVXNlckFn
ZW50Rm9yVVJJKHNldHRpbmdzLCAiaHR0cDovL3d3dy5nb29nbGUuY29tLyIpOwotICAgIGdfYXNz
ZXJ0X2NtcHN0cih1c2VyQWdlbnQsID09LCAidGVzdHdlYnNldHRpbmdzLzAuMSIpOwotICAgIGdf
ZnJlZSh1c2VyQWdlbnQpOwotCi0gICAgdXNlckFnZW50ID0gd2Via2l0V2ViU2V0dGluZ3NVc2Vy
QWdlbnRGb3JVUkkoc2V0dGluZ3MsICJodHRwOi8vZ21haWwuY29tLyIpOwotICAgIGdfYXNzZXJ0
X2NtcHN0cih1c2VyQWdlbnQsID09LCAidGVzdHdlYnNldHRpbmdzLzAuMSIpOwotICAgIGdfZnJl
ZSh1c2VyQWdlbnQpOwotCi0gICAgdXNlckFnZW50ID0gd2Via2l0V2ViU2V0dGluZ3NVc2VyQWdl
bnRGb3JVUkkoc2V0dGluZ3MsICJodHRwOi8vd3d3Lmdvb2dsZS5jb20uYnIvIik7Ci0gICAgZ19h
c3NlcnRfY21wc3RyKHVzZXJBZ2VudCwgPT0sICJ0ZXN0d2Vic2V0dGluZ3MvMC4xIik7Ci0gICAg
Z19mcmVlKHVzZXJBZ2VudCk7Ci0KLSAgICB1c2VyQWdlbnQgPSB3ZWJraXRXZWJTZXR0aW5nc1Vz
ZXJBZ2VudEZvclVSSShzZXR0aW5ncywgImh0dHA6Ly9jYWxlbmRhci5nb29nbGUuY29tLyIpOwot
ICAgIGdfYXNzZXJ0X2NtcHN0cih1c2VyQWdlbnQsID09LCAidGVzdHdlYnNldHRpbmdzLzAuMSIp
OwotICAgIGdfZnJlZSh1c2VyQWdlbnQpOwotCi0gICAgLyogTm93IGVuYWJsZSBxdWlya3MgaGFu
ZGxpbmcgKi8KLSAgICBnX29iamVjdF9zZXQoc2V0dGluZ3MsICJlbmFibGUtc2l0ZS1zcGVjaWZp
Yy1xdWlya3MiLCBUUlVFLCBOVUxMKTsKLQotICAgIHRlc3Rfbm9uX3F1aXJreV91c2VyX2FnZW50
cyhzZXR0aW5ncywgZGVmYXVsdFVzZXJBZ2VudCk7Ci0KLSAgICBnX29iamVjdF9zZXQoc2V0dGlu
Z3MsICJ1c2VyLWFnZW50IiwgInRlc3R3ZWJzZXR0aW5ncy8wLjEiLCBOVUxMKTsKLQotICAgIHVz
ZXJBZ2VudCA9IHdlYmtpdFdlYlNldHRpbmdzVXNlckFnZW50Rm9yVVJJKHNldHRpbmdzLCAiaHR0
cDovL3d3dy5nb29nbGUuY29tLyIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih1c2VyQWdlbnQsID09
LCBkZWZhdWx0VXNlckFnZW50KTsKLSAgICBnX2ZyZWUodXNlckFnZW50KTsKLQotICAgIHVzZXJB
Z2VudCA9IHdlYmtpdFdlYlNldHRpbmdzVXNlckFnZW50Rm9yVVJJKHNldHRpbmdzLCAiaHR0cDov
L2dtYWlsLmNvbS8iKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodXNlckFnZW50LCA9PSwgZGVmYXVs
dFVzZXJBZ2VudCk7Ci0gICAgZ19mcmVlKHVzZXJBZ2VudCk7Ci0KLSAgICB1c2VyQWdlbnQgPSB3
ZWJraXRXZWJTZXR0aW5nc1VzZXJBZ2VudEZvclVSSShzZXR0aW5ncywgImh0dHA6Ly93d3cuZ29v
Z2xlLmNvbS5ici8iKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodXNlckFnZW50LCA9PSwgZGVmYXVs
dFVzZXJBZ2VudCk7Ci0gICAgZ19mcmVlKHVzZXJBZ2VudCk7Ci0KLSAgICB1c2VyQWdlbnQgPSB3
ZWJraXRXZWJTZXR0aW5nc1VzZXJBZ2VudEZvclVSSShzZXR0aW5ncywgImh0dHA6Ly93d3cuZ29v
Z2xlLnVrLm5vdC5jb20uYnIvIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHVzZXJBZ2VudCwgPT0s
ICJ0ZXN0d2Vic2V0dGluZ3MvMC4xIik7Ci0gICAgZ19mcmVlKHVzZXJBZ2VudCk7Ci0KLSAgICBn
X2ZyZWUoZGVmYXVsdFVzZXJBZ2VudCk7Ci0gICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Ci19
Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLXsKLSAgICBndGtfdGVzdF9pbml0
KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVn
cy53ZWJraXQub3JnLyIpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJzZXR0aW5n
cy91c2VyX2FnZW50IiwgdGVzdF93ZWJraXRfd2ViX3NldHRpbmdzX3VzZXJfYWdlbnQpOwotICAg
IGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJzZXR0aW5ncy9jb3B5IiwgdGVzdF93ZWJraXRf
d2ViX3NldHRpbmdzX2NvcHkpOwotICAgIHJldHVybiBnX3Rlc3RfcnVuICgpOwotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYnZpZXcuYyBiL1NvdXJjZS9XZWJL
aXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJ2aWV3LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDE3MDM3MmMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYnZp
ZXcuYworKysgL2Rldi9udWxsCkBAIC0xLDc0NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDks
IDIwMTAgQ29sbGFib3JhIEx0ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAidGVzdF91dGlscy5oIgotCi0jaW5jbHVkZSA8
ZXJybm8uaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2lu
Y2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgotI2luY2x1ZGUgPGdkay9n
ZGsuaD4KLSNpbmNsdWRlIDxnZGsvZ2Rra2V5c3ltcy5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4K
LSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+Ci0KLUdNYWluTG9vcCogbG9vcDsKLVNvdXBTZXNz
aW9uICpzZXNzaW9uOwotY2hhciogYmFzZV91cmk7Ci0KLS8qIEZvciByZWFsIHJlcXVlc3QgdGVz
dGluZyAqLwotc3RhdGljIHZvaWQKLXNlcnZlcl9jYWxsYmFjayhTb3VwU2VydmVyKiBzZXJ2ZXIs
IFNvdXBNZXNzYWdlKiBtc2csCi0gICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHBhdGgsIEdI
YXNoVGFibGUqIHF1ZXJ5LAotICAgICAgICAgICAgICAgICBTb3VwQ2xpZW50Q29udGV4dCogY29u
dGV4dCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBpZiAobXNnLT5tZXRob2QgIT0gU09VUF9NRVRI
T0RfR0VUKSB7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1zZywgU09VUF9TVEFU
VVNfTk9UX0lNUExFTUVOVEVEKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNvdXBf
bWVzc2FnZV9zZXRfc3RhdHVzKG1zZywgU09VUF9TVEFUVVNfT0spOwotCi0gICAgaWYgKGdfc3Ry
X2VxdWFsKHBhdGgsICIvZmF2aWNvbi5pY28iKSkgewotICAgICAgICBjaGFyKiBjb250ZW50czsK
LSAgICAgICAgZ3NpemUgbGVuZ3RoOwotICAgICAgICBHRXJyb3IqIGVycm9yID0gTlVMTDsKLQot
ICAgICAgICBnX2ZpbGVfZ2V0X2NvbnRlbnRzKCJibGFuay5pY28iLCAmY29udGVudHMsICZsZW5n
dGgsICZlcnJvcik7Ci0gICAgICAgIGdfYXNzZXJ0KCFlcnJvcik7Ci0KLSAgICAgICAgc291cF9t
ZXNzYWdlX2JvZHlfYXBwZW5kKG1zZy0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwg
Y29udGVudHMsIGxlbmd0aCk7Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2Jp
Z2Rpdi5odG1sIikpIHsKLSAgICAgICAgY2hhciogY29udGVudHMgPSBnX3N0cmR1cCgiPGh0bWw+
PGJvZHk+PGEgaWQ9XCJsaW5rXCIgaHJlZj1cImh0dHA6Ly9hYmMuZGVmXCI+dGVzdDwvYT48ZGl2
IHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogZ3JlZW47IGhlaWdodDogMTIwMHB4O1wiPjwvZGl2
PjwvYm9keT48L2h0bWw+Iik7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtc2ct
PnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGNvbnRlbnRzLCBzdHJsZW4oY29udGVu
dHMpKTsKLSAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvaWZyYW1lLmh0bWwiKSkg
ewotICAgICAgICBjaGFyKiBjb250ZW50cyA9IGdfc3RyZHVwKCI8aHRtbD48Ym9keSBpZD1cInNv
bWUtY29udGVudFwiPjxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiBncmVlbjsgaGVpZ2h0
OiA1MHB4O1wiPjwvZGl2PjxpZnJhbWUgc3JjPVwiYmlnZGl2Lmh0bWxcIj48L2lmcmFtZT48L2Jv
ZHk+PC9odG1sPiIpOwotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobXNnLT5yZXNw
b25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBjb250ZW50cywgc3RybGVuKGNvbnRlbnRzKSk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY2hhciogY29udGVudHMgPSBnX3N0cmR1cCgiPGh0bWw+
PGJvZHk+dGVzdDwvYm9keT48L2h0bWw+Iik7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2Fw
cGVuZChtc2ctPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGNvbnRlbnRzLCBzdHJs
ZW4oY29udGVudHMpKTsKLSAgICB9Ci0KLSAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZSht
c2ctPnJlc3BvbnNlX2JvZHkpOwotfQotCi1zdGF0aWMgdm9pZCBpZGxlX3F1aXRfbG9vcF9jYihX
ZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgR1BhcmFtU3BlYyogcHNwZWMsIGdwb2ludGVyIGRhdGEp
Ci17Ci0gICAgaWYgKHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMod2ViX3ZpZXcpID09
IFdFQktJVF9MT0FEX0ZJTklTSEVEIHx8Ci0gICAgICAgIHdlYmtpdF93ZWJfdmlld19nZXRfbG9h
ZF9zdGF0dXMod2ViX3ZpZXcpID09IFdFQktJVF9MT0FEX0ZBSUxFRCkKLSAgICAgICAgZ19tYWlu
X2xvb3BfcXVpdChsb29wKTsKLX0KLQotc3RhdGljIGdib29sZWFuIHRpbWVvdXRfY2IoZ3BvaW50
ZXIgZGF0YSkKLXsKLSAgICBnX2Vycm9yKCJEaWRuJ3QgZ2V0IGljb24tdXJpIGJlZm9yZSB0aW1p
bmcgb3V0LiIpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQgaWNvbl91cmlf
Y2hhbmdlZF9jYihXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgR1BhcmFtU3BlYyogcHNwZWMsIGdw
b2ludGVyIGRhdGEpCi17Ci0gICAgY2hhciogZXhwZWN0ZWRfdXJpOwotCi0gICAgZ19hc3NlcnRf
Y21wc3RyKGdfcGFyYW1fc3BlY19nZXRfbmFtZShwc3BlYyksID09LCAiaWNvbi11cmkiKTsKLQot
ICAgIGV4cGVjdGVkX3VyaSA9IGdfc3RyZHVwX3ByaW50ZigiJXNmYXZpY29uLmljbyIsIGJhc2Vf
dXJpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dldF9pY29uX3VyaSh3
ZWJfdmlldyksID09LCBleHBlY3RlZF91cmkpOwotICAgIGdfZnJlZShleHBlY3RlZF91cmkpOwot
Ci0gICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKLX0KLQotc3RhdGljIHZvaWQgaWNvbl9sb2Fk
ZWRfY2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIGNoYXIqIGljb25fdXJpLCBncG9pbnRlciBk
YXRhKQotewotICAgIGdib29sZWFuKiBiZWVuX2hlcmUgPSAoZ2Jvb2xlYW4qKWRhdGE7Ci0gICAg
Y2hhciogZXhwZWN0ZWRfdXJpID0gZ19zdHJkdXBfcHJpbnRmKCIlc2Zhdmljb24uaWNvIiwgYmFz
ZV91cmkpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihpY29uX3VyaSwgPT0sIGV4cGVjdGVkX3VyaSk7
Ci0gICAgZ19mcmVlKGV4cGVjdGVkX3VyaSk7Ci0KLSAgICBnX2Fzc2VydF9jbXBzdHIoaWNvbl91
cmksID09LCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fdXJpKHdlYl92aWV3KSk7Ci0KLSAgICAq
YmVlbl9oZXJlID0gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3ZpZXdf
aWNvbl91cmkoKQotewotICAgIGdib29sZWFuIGJlZW5fdG9faWNvbl9sb2FkZWQgPSBGQUxTRTsK
LSAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmll
d19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3NpbmsoR19PQkpFQ1QodmlldykpOwotCi0gICAg
bG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLQotICAgIGdfb2JqZWN0X2Nvbm5l
Y3QoR19PQkpFQ1QodmlldyksCi0gICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjpub3RpZnk6
Omljb24tdXJpIiwgaWNvbl91cmlfY2hhbmdlZF9jYiwgTlVMTCwKLSAgICAgICAgICAgICAgICAg
ICAgICJzaWduYWw6Omljb24tbG9hZGVkIiwgaWNvbl9sb2FkZWRfY2IsICZiZWVuX3RvX2ljb25f
bG9hZGVkLAotICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0KLSAgICB3ZWJraXRfd2ViX3Zp
ZXdfbG9hZF91cmkodmlldywgYmFzZV91cmkpOwotCi0gICAgZ3VpbnQgdGltZW91dF9pZCA9IGdf
dGltZW91dF9hZGQoNTAwLCB0aW1lb3V0X2NiLCAwKTsKLQotICAgIGdfbWFpbl9sb29wX3J1bihs
b29wKTsKLQotICAgIGdfc291cmNlX3JlbW92ZSh0aW1lb3V0X2lkKTsKLQotICAgIGdfYXNzZXJ0
KGJlZW5fdG9faWNvbl9sb2FkZWQpOwotCi0gICAgZ19vYmplY3RfdW5yZWYodmlldyk7Ci19Ci0K
LXN0YXRpYyBnYm9vbGVhbiBtYXBfZXZlbnRfY2IoR3RrV2lkZ2V0ICp3aWRnZXQsIEdka0V2ZW50
KiBldmVudCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBHTWFpbkxvb3AqIGxvb3AgPSAoR01haW5M
b29wKilkYXRhOwotICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci0KLSAgICByZXR1cm4gRkFM
U0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBxdWl0X2FmdGVyX3Nob3J0X2RlbGF5X2NiKGdwb2lu
dGVyIGRhdGEpCi17Ci0gICAgZ19tYWluX2xvb3BfcXVpdCgoR01haW5Mb29wKilkYXRhKTsKLSAg
ICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl92aWV3X2dy
YWJfZm9jdXMoKQotewotICAgIGNoYXIqIHVyaSA9IGdfc3RyY29uY2F0KGJhc2VfdXJpLCAiaWZy
YW1lLmh0bWwiLCBOVUxMKTsKLSAgICBHdGtXaWRnZXQqIHdpbmRvdyA9IGd0a193aW5kb3dfbmV3
KEdUS19XSU5ET1dfUE9QVVApOwotICAgIEd0a1dpZGdldCogc2Nyb2xsZWRfd2luZG93ID0gZ3Rr
X3Njcm9sbGVkX3dpbmRvd19uZXcoTlVMTCwgTlVMTCk7Ci0gICAgV2ViS2l0V2ViVmlldyogdmll
dyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIEd0a0FkanVz
dG1lbnQqIGFkanVzdG1lbnQ7Ci0KLSAgICBndGtfd2luZG93X3NldF9kZWZhdWx0X3NpemUoR1RL
X1dJTkRPVyh3aW5kb3cpLCA0MDAsIDIwMCk7Ci0KLSAgICBndGtfY29udGFpbmVyX2FkZChHVEtf
Q09OVEFJTkVSKHdpbmRvdyksIHNjcm9sbGVkX3dpbmRvdyk7Ci0gICAgZ3RrX2NvbnRhaW5lcl9h
ZGQoR1RLX0NPTlRBSU5FUihzY3JvbGxlZF93aW5kb3cpLCBHVEtfV0lER0VUKHZpZXcpKTsKLQot
ICAgIGd0a19zY3JvbGxlZF93aW5kb3dfc2V0X3BvbGljeShHVEtfU0NST0xMRURfV0lORE9XKHNj
cm9sbGVkX3dpbmRvdyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19Q
T0xJQ1lfQVVUT01BVElDLCBHVEtfUE9MSUNZX0FVVE9NQVRJQyk7Ci0KLSAgICBsb29wID0gZ19t
YWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh2aWV3LCAi
bm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0soaWRsZV9xdWl0X2xvb3BfY2IpLCBOVUxM
KTsKLQotICAgIC8qIFdhaXQgZm9yIHdpbmRvdyB0byBzaG93IHVwICovCi0gICAgZ3RrX3dpZGdl
dF9zaG93X2FsbCh3aW5kb3cpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2luZG93LCAibWFwLWV2
ZW50IiwKLSAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sobWFwX2V2ZW50X2NiKSwgbG9v
cCk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAgLyogTG9hZCBhIHBhZ2Ugd2l0
aCBhIGJpZyBkaXYgdGhhdCB3aWxsIGNhdXNlIHNjcm9sbGJhcnMgdG8gYXBwZWFyICovCi0gICAg
d2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHZpZXcsIHVyaSk7Ci0gICAgZ19tYWluX2xvb3BfcnVu
KGxvb3ApOwotCi0gICAgYWRqdXN0bWVudCA9IGd0a19zY3JvbGxlZF93aW5kb3dfZ2V0X3ZhZGp1
c3RtZW50KEdUS19TQ1JPTExFRF9XSU5ET1coc2Nyb2xsZWRfd2luZG93KSk7Ci0gICAgZ19hc3Nl
cnRfY21wZmxvYXQoZ3RrX2FkanVzdG1lbnRfZ2V0X3ZhbHVlKGFkanVzdG1lbnQpLCA9PSwgMC4w
KTsKLQotICAgIC8qIFNpbmNlIHdlYmtpdF93ZWJfdmlld19leGVjdXRlX3NjcmlwdCBkb2VzIG5v
dCByZXR1cm4gYSB2YWx1ZSwKLSAgICAgICBpdCBpcyBpbXBvc3NpYmxlIHRvIGtub3cgaWYgYW4g
aW5uZXIgZG9jdW1lbnQgaGFzIGZvY3VzIGFmdGVyCi0gICAgICAgYSBub2RlIG9mIGl0IHdhcyBm
b2N1c2VkIHZpYSAuZm9jdXMoKSBtZXRob2QuCi0gICAgICAgVGhlIGNvZGUgYmVsb3cgaXMgYW4g
d29ya2Fyb3VuZDogaWYgdGhlIG5vZGUgaGFzIGZvY3VzLCBhIHNjcm9sbAotICAgICAgIGFjdGlv
biBpcyBwZXJmb3JtZWQgYW5kIGFmdGVyd2FyZCBpdCBpcyBjaGVja2VkIGlmIHRoZSBhZGp1c3Rt
ZW50Ci0gICAgICAgaGFzIHRvIGJlIGRpZmZlcmVudCBmcm9tIDAuCi0gICAgKi8KLSAgICBjaGFy
IHNjcmlwdFtdID0gInZhciBpbm5lckRvYyA9IGRvY3VtZW50LmRlZmF1bHRWaWV3LmZyYW1lc1sw
XS5kb2N1bWVudDsgXAotICAgICAgICAgICAgICAgICAgICAgaW5uZXJEb2MuZ2V0RWxlbWVudEJ5
SWQoXCJsaW5rXCIpLmZvY3VzKCk7ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAg
ICBpZiAoaW5uZXJEb2MuaGFzRm9jdXMoKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxCeSgwLCAxMDApOyI7Ci0K
LSAgICAvKiBGb2N1cyBhbiBlbGVtZW50IHVzaW5nIEphdmFTY3JpcHQgKi8KLSAgICB3ZWJraXRf
d2ViX3ZpZXdfZXhlY3V0ZV9zY3JpcHQodmlldywgc2NyaXB0KTsKLQotICAgIC8qIEFkanVzdG1l
bnRzIHVwZGF0ZSBhc3luY2hyb25vdXNseSwgc28gd2UgbXVzdCB3YWl0IGEgYml0LiAqLwotICAg
IGdfdGltZW91dF9hZGQoMTAwLCBxdWl0X2FmdGVyX3Nob3J0X2RlbGF5X2NiLCBsb29wKTsKLSAg
ICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICAvKiBNYWtlIHN1cmUgdGhlIFNjcm9sbGVk
V2luZG93IG5vdGljZWQgdGhlIHNjcm9sbCAqLwotICAgIGdfYXNzZXJ0X2NtcGZsb2F0KGd0a19h
ZGp1c3RtZW50X2dldF92YWx1ZShhZGp1c3RtZW50KSwgIT0sIDAuMCk7Ci0KLSAgICBnX2ZyZWUo
dXJpKTsKLSAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kod2luZG93KTsKLX0KLQotc3RhdGljIHZvaWQg
ZG9fdGVzdF93ZWJraXRfd2ViX3ZpZXdfYWRqdXN0bWVudHMoZ2Jvb2xlYW4gd2l0aF9wYWdlX2Nh
Y2hlKQotewotICAgIGNoYXIqIGVmZmVjdGl2ZV91cmkgPSBnX3N0cmNvbmNhdChiYXNlX3VyaSwg
ImJpZ2Rpdi5odG1sIiwgTlVMTCk7Ci0gICAgY2hhciogc2Vjb25kX3VyaSA9IGdfc3RyY29uY2F0
KGJhc2VfdXJpLCAiaWZyYW1lLmh0bWwiLCBOVUxMKTsKLSAgICBHdGtXaWRnZXQqIHdpbmRvdyA9
IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOwotICAgIEd0a1dpZGdldCogc2Ny
b2xsZWRfd2luZG93ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19uZXcoTlVMTCwgTlVMTCk7Ci0gICAg
V2ViS2l0V2ViVmlldyogdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3
KCkpOwotICAgIEd0a0FkanVzdG1lbnQqIGFkanVzdG1lbnQ7Ci0gICAgZG91YmxlIGxvd2VyOwot
ICAgIGRvdWJsZSB1cHBlcjsKLQotICAgIGlmICh3aXRoX3BhZ2VfY2FjaGUpIHsKLSAgICAgICAg
V2ViS2l0V2ViU2V0dGluZ3MqIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5n
cyh2aWV3KTsKLSAgICAgICAgZ19vYmplY3Rfc2V0KHNldHRpbmdzLCAiZW5hYmxlLXBhZ2UtY2Fj
aGUiLCBUUlVFLCBOVUxMKTsKLSAgICB9Ci0KLSAgICBndGtfd2luZG93X3NldF9kZWZhdWx0X3Np
emUoR1RLX1dJTkRPVyh3aW5kb3cpLCA0MDAsIDIwMCk7Ci0KLSAgICBndGtfY29udGFpbmVyX2Fk
ZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHNjcm9sbGVkX3dpbmRvdyk7Ci0gICAgZ3RrX2NvbnRh
aW5lcl9hZGQoR1RLX0NPTlRBSU5FUihzY3JvbGxlZF93aW5kb3cpLCBHVEtfV0lER0VUKHZpZXcp
KTsKLQotICAgIGd0a19zY3JvbGxlZF93aW5kb3dfc2V0X3BvbGljeShHVEtfU0NST0xMRURfV0lO
RE9XKHNjcm9sbGVkX3dpbmRvdyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdUS19QT0xJQ1lfQVVUT01BVElDLCBHVEtfUE9MSUNZX0FVVE9NQVRJQyk7Ci0KLSAgICBsb29w
ID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotCi0gICAgZ19vYmplY3RfY29ubmVjdChH
X09CSkVDVCh2aWV3KSwKLSAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6Om5vdGlmeTo6bG9h
ZC1zdGF0dXMiLCBpZGxlX3F1aXRfbG9vcF9jYiwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAg
IE5VTEwpOwotCi0gICAgLyogV2FpdCBmb3Igd2luZG93IHRvIHNob3cgdXAgKi8KLSAgICBndGtf
d2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdCh3aW5kb3csICJt
YXAtZXZlbnQiLAotICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhtYXBfZXZlbnRfY2Ip
LCBsb29wKTsKLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICAvKiBMb2FkIGEgcGFn
ZSB3aXRoIGEgYmlnIGRpdiB0aGF0IHdpbGwgY2F1c2Ugc2Nyb2xsYmFycyB0byBhcHBlYXIgKi8K
LSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkodmlldywgZWZmZWN0aXZlX3VyaSk7Ci0gICAg
Z19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAgLyogQWRqdXN0bWVudHMgdXBkYXRlIGFzeW5j
aHJvbm91c2x5LCBzbyB3ZSBtdXN0IHdhaXQgYSBiaXQuICovCi0gICAgZ190aW1lb3V0X2FkZCgx
MDAsIHF1aXRfYWZ0ZXJfc2hvcnRfZGVsYXlfY2IsIGxvb3ApOwotICAgIGdfbWFpbl9sb29wX3J1
bihsb29wKTsKLQotICAgIGFkanVzdG1lbnQgPSBndGtfc2Nyb2xsZWRfd2luZG93X2dldF92YWRq
dXN0bWVudChHVEtfU0NST0xMRURfV0lORE9XKHNjcm9sbGVkX3dpbmRvdykpOwotICAgIGdfYXNz
ZXJ0X2NtcGZsb2F0KGd0a19hZGp1c3RtZW50X2dldF92YWx1ZShhZGp1c3RtZW50KSwgPT0sIDAu
MCk7Ci0KLSAgICBsb3dlciA9IGd0a19hZGp1c3RtZW50X2dldF9sb3dlcihhZGp1c3RtZW50KTsK
LSAgICB1cHBlciA9IGd0a19hZGp1c3RtZW50X2dldF91cHBlcihhZGp1c3RtZW50KTsKLQotICAg
IC8qIFNjcm9sbCB0aGUgdmlldyB1c2luZyBKYXZhU2NyaXB0ICovCi0gICAgd2Via2l0X3dlYl92
aWV3X2V4ZWN1dGVfc2NyaXB0KHZpZXcsICJ3aW5kb3cuc2Nyb2xsQnkoMCwgMTAwKSIpOwotCi0g
ICAgLyogQWRqdXN0bWVudHMgdXBkYXRlIGFzeW5jaHJvbm91c2x5LCBzbyB3ZSBtdXN0IHdhaXQg
YSBiaXQuICovCi0gICAgZ190aW1lb3V0X2FkZCgxMDAsIHF1aXRfYWZ0ZXJfc2hvcnRfZGVsYXlf
Y2IsIGxvb3ApOwotICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLQotICAgIC8qIE1ha2Ugc3Vy
ZSB0aGUgU2Nyb2xsZWRXaW5kb3cgbm90aWNlZCB0aGUgc2Nyb2xsICovCi0gICAgZ19hc3NlcnRf
Y21wZmxvYXQoZ3RrX2FkanVzdG1lbnRfZ2V0X3ZhbHVlKGFkanVzdG1lbnQpLCA9PSwgMTAwLjAp
OwotCi0gICAgLyogTG9hZCBhIHNlY29uZCBVUkkgKi8KLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9h
ZF91cmkodmlldywgc2Vjb25kX3VyaSk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0g
ICAgLyogVGhlIHBhZ2UgbG9hZGVkIGJ1dCB0aGUgYWRqdXN0bWVudHMgbWF5IG5vdCBiZSB1cGRh
dGVkIHlldC4gV2FpdCBhIGJpdC4gKi8KLSAgICBnX3RpbWVvdXRfYWRkKDEwMCwgcXVpdF9hZnRl
cl9zaG9ydF9kZWxheV9jYiwgbG9vcCk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0g
ICAgLyogTWFrZSBzdXJlIHRoZSBzY3JvbGxiYXIgaGFzIGJlZW4gcmVzZXQgKi8KLSAgICBnX2Fz
c2VydF9jbXBmbG9hdChndGtfYWRqdXN0bWVudF9nZXRfdmFsdWUoYWRqdXN0bWVudCksID09LCAw
LjApOwotCi0gICAgLyogR28gYmFjayAqLwotICAgIHdlYmtpdF93ZWJfdmlld19nb19iYWNrKHZp
ZXcpOwotCi0gICAgLyogV2hlbiB1c2luZyBwYWdlIGNhY2hlLCBnb19iYWNrIHdpbGwgcmV0dXJu
IHN5bmNyb25vdXNseSAqLwotICAgIGlmICghd2l0aF9wYWdlX2NhY2hlKQotICAgICAgICBnX21h
aW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICAvKiBNYWtlIHN1cmUgR1RLKyBoYXMgdGltZSB0byBw
cm9jZXNzIHRoZSBjaGFuZ2VzIGluIHNpemUsIGZvciB0aGUgYWRqdXNtZW50cyAqLwotICAgIHdo
aWxlIChndGtfZXZlbnRzX3BlbmRpbmcoKSkKLSAgICAgICAgZ3RrX21haW5faXRlcmF0aW9uKCk7
Ci0KLSAgICAvKiBNYWtlIHN1cmUgdXBwZXIgYW5kIGxvd2VyIGJvdW5kcyBoYXZlIGJlZW4gcmVz
dG9yZWQgY29ycmVjdGx5ICovCi0gICAgZ19hc3NlcnRfY21wZmxvYXQobG93ZXIsID09LCBndGtf
YWRqdXN0bWVudF9nZXRfbG93ZXIoYWRqdXN0bWVudCkpOwotICAgIGdfYXNzZXJ0X2NtcGZsb2F0
KHVwcGVyLCA9PSwgZ3RrX2FkanVzdG1lbnRfZ2V0X3VwcGVyKGFkanVzdG1lbnQpKTsKLSAgICBn
X2Fzc2VydF9jbXBmbG9hdChndGtfYWRqdXN0bWVudF9nZXRfdmFsdWUoYWRqdXN0bWVudCksID09
LCAxMDAuMCk7Ci0KLSAgICBnX2ZyZWUoZWZmZWN0aXZlX3VyaSk7Ci0gICAgZ19mcmVlKHNlY29u
ZF91cmkpOwotCi0gICAgZ3RrX3dpZGdldF9kZXN0cm95KHdpbmRvdyk7Ci19Ci0KLXN0YXRpYyB2
b2lkIHRlc3Rfd2Via2l0X3dlYl92aWV3X2FkanVzdG1lbnRzKCkKLXsKLSAgICAvKiBUZXN0IHRo
aXMgd2l0aCBwYWdlIGNhY2hlIGRpc2FibGVkLCBhbmQgZW5hYmxlZC4gKi8KLSAgICBkb190ZXN0
X3dlYmtpdF93ZWJfdmlld19hZGp1c3RtZW50cyhGQUxTRSk7Ci0gICAgZG9fdGVzdF93ZWJraXRf
d2ViX3ZpZXdfYWRqdXN0bWVudHMoVFJVRSk7Ci19Ci0KLWdib29sZWFuIGRlbGF5ZWRfZGVzdHJv
eShncG9pbnRlciBkYXRhKQotewotICAgIGd0a193aWRnZXRfZGVzdHJveShHVEtfV0lER0VUKGRh
dGEpKTsKLSAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwotICAgIHJldHVybiBGQUxTRTsKLX0K
LQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3ZpZXdfZGVzdHJveSgpCi17Ci0gICAgR3Rr
V2lkZ2V0KiB3aW5kb3c7Ci0gICAgR3RrV2lkZ2V0KiB3ZWJfdmlldzsKLQotICAgIHdpbmRvdyA9
IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOwotICAgIHdlYl92aWV3ID0gd2Vi
a2l0X3dlYl92aWV3X25ldygpOwotCi0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5F
Uih3aW5kb3cpLCB3ZWJfdmlldyk7Ci0KLSAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7
Ci0KLSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotCi0gICAgZ19zaWdu
YWxfY29ubmVjdCh3aW5kb3csICJtYXAtZXZlbnQiLAotICAgICAgICAgICAgICAgICAgICAgR19D
QUxMQkFDSyhtYXBfZXZlbnRfY2IpLCBsb29wKTsKLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7
Ci0KLSAgICBnX2lkbGVfYWRkKGRlbGF5ZWRfZGVzdHJveSwgd2ViX3ZpZXcpOwotICAgIGdfbWFp
bl9sb29wX3J1bihsb29wKTsKLQotICAgIGd0a193aWRnZXRfZGVzdHJveSh3aW5kb3cpOwotfQot
Ci1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfdmlld193aW5kb3dfZmVhdHVyZXMoKQotewot
ICAgIEd0a1dpZGdldCogd2luZG93OwotICAgIEd0a1dpZGdldCogd2ViX3ZpZXc7Ci0gICAgCi0g
ICAgd2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7Ci0gICAgd2Vi
X3ZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7Ci0gICAgCi0gICAgZ3RrX2NvbnRhaW5lcl9h
ZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB3ZWJfdmlldyk7Ci0gICAgCi0gICAgZ3RrX3dpZGdl
dF9zaG93X2FsbCh3aW5kb3cpOwotICAgIAotICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVM
TCwgVFJVRSk7Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KHdpbmRvdywgIm1hcC1ldmVudCIsCi0g
ICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKG1hcF9ldmVudF9jYiksIGxvb3ApOwotICAg
IGdfbWFpbl9sb29wX3J1bihsb29wKTsKLSAgICAKLSAgICAvKiBCdWcgIzM2MTQ0ICovCi0gICAg
Z19vYmplY3Rfc2V0KEdfT0JKRUNUKHdlYl92aWV3KSwgIndpbmRvdy1mZWF0dXJlcyIsIE5VTEws
IE5VTEwpOwotICAgIAotICAgIGd0a193aWRnZXRfZGVzdHJveSh3aW5kb3cpOwotfSAgICAKLQot
c3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3ZpZXdfaW5fb2Zmc2NyZWVuX3dpbmRvd19kb2Vz
X25vdF9jcmFzaCgpCi17Ci0gICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsK
LQotICAgIEd0a1dpZGdldCAqd2luZG93ID0gZ3RrX29mZnNjcmVlbl93aW5kb3dfbmV3KCk7Ci0g
ICAgR3RrV2lkZ2V0ICp3ZWJfdmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKLQotICAgIGd0
a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgd2ViX3ZpZXcpOwotICAgIGd0
a193aWRnZXRfc2hvd19hbGwod2luZG93KTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHdlYl92aWV3
LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0soaWRsZV9xdWl0X2xvb3BfY2IpLCBO
VUxMKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkoV0VCS0lUX1dFQl9WSUVXKHdlYl92
aWV3KSwgYmFzZV91cmkpOwotCi0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAgZ3Rr
X3dpZGdldF9kZXN0cm95KHdpbmRvdyk7Ci0gICAgZ19tYWluX2xvb3BfdW5yZWYobG9vcCk7Ci19
Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl92aWV3X2RvZXNfbm90X3N0ZWFsX2ZvY3Vz
KCkKLXsKLSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotCi0gICAgR3Rr
V2lkZ2V0ICp3aW5kb3cgPSBndGtfb2Zmc2NyZWVuX3dpbmRvd19uZXcoKTsKLSAgICBHdGtXaWRn
ZXQgKndlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7Ci0gICAgR3RrV2lkZ2V0ICplbnRy
eSA9IGd0a19lbnRyeV9uZXcoKTsKLQotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi0gICAgR3Rr
V2lkZ2V0ICpib3ggPSBndGtfaGJveF9uZXcoRkFMU0UsIDApOwotI2Vsc2UKLSAgICBHdGtXaWRn
ZXQgKmJveCA9IGd0a19ib3hfbmV3KEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFMLCAwKTsKLSNl
bmRpZgotCi0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihib3gpLCB3ZWJWaWV3
KTsKLSAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGJveCksIGVudHJ5KTsKLSAg
ICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIGJveCk7Ci0gICAgZ3Rr
X3dpZGdldF9zaG93X2FsbCh3aW5kb3cpOwotCi0gICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKGVu
dHJ5KTsKLSAgICBnX2Fzc2VydChndGtfd2lkZ2V0X2lzX2ZvY3VzKGVudHJ5KSk7Ci0KLSAgICBn
X3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFD
SyhpZGxlX3F1aXRfbG9vcF9jYiksIE5VTEwpOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX2h0
bWxfc3RyaW5nKFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3KSwKLSAgICAgICAgIjxodG1sPjxib2R5
PiIKLSAgICAgICAgIiAgICA8aW5wdXQgaWQ9XCJlbnRyeVwiIHR5cGU9XCJ0ZXh0XCIvPiIKLSAg
ICAgICAgIiAgICA8c2NyaXB0PiIKLSAgICAgICAgIiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoXCJlbnRyeVwiKS5mb2N1cygpOyIKLSAgICAgICAgIiAgICA8L3NjcmlwdD4iCi0gICAg
ICAgICI8L2JvZHk+PC9odG1sPiIsICJmaWxlOi8vIik7Ci0KLSAgICBnX21haW5fbG9vcF9ydW4o
bG9vcCk7Ci0KLSAgICBnX2Fzc2VydChndGtfd2lkZ2V0X2lzX2ZvY3VzKGVudHJ5KSk7Ci0KLSAg
ICBndGtfd2lkZ2V0X2Rlc3Ryb3kod2luZG93KTsKLSAgICBnX21haW5fbG9vcF91bnJlZihsb29w
KTsKLX0KLQotc3RhdGljIGdib29sZWFuIGVtaXRLZXlTdHJva2UoV2ViS2l0V2ViVmlldyogd2Vi
VmlldykKLXsKLSAgICBHZGtFdmVudCogcHJlc3NFdmVudCA9IGdka19ldmVudF9uZXcoR0RLX0tF
WV9QUkVTUyk7Ci0gICAgcHJlc3NFdmVudC0+a2V5LmtleXZhbCA9IEdES19LRVlfZjsKLSAgICBH
ZGtXaW5kb3cqIHdpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyhHVEtfV0lER0VUKHdlYlZp
ZXcpKTsKLSAgICBwcmVzc0V2ZW50LT5rZXkud2luZG93ID0gd2luZG93OwotICAgIGdfb2JqZWN0
X3JlZihwcmVzc0V2ZW50LT5rZXkud2luZG93KTsKLQotI2lmbmRlZiBHVEtfQVBJX1ZFUlNJT05f
MgotICAgIEdka0RldmljZU1hbmFnZXIqIG1hbmFnZXIgPSBnZGtfZGlzcGxheV9nZXRfZGV2aWNl
X21hbmFnZXIoZ2RrX3dpbmRvd19nZXRfZGlzcGxheSh3aW5kb3cpKTsKLSAgICBnZGtfZXZlbnRf
c2V0X2RldmljZShwcmVzc0V2ZW50LCBnZGtfZGV2aWNlX21hbmFnZXJfZ2V0X2NsaWVudF9wb2lu
dGVyKG1hbmFnZXIpKTsKLSNlbmRpZgotCi0gICAgLy8gV2hlbiBzeW50aGVzaXppbmcgYW4gZXZl
bnQsIGFuIGludmFsaWQgaGFyZHdhcmVfa2V5Y29kZSB2YWx1ZQotICAgIC8vIGNhbiBjYXVzZSBp
dCB0byBiZSBiYWRseSBwcm9jZXNzZWQgYnkgR3RrKy4KLSAgICBHZGtLZXltYXBLZXkqIGtleXM7
Ci0gICAgZ2ludCBuX2tleXM7Ci0gICAgaWYgKGdka19rZXltYXBfZ2V0X2VudHJpZXNfZm9yX2tl
eXZhbChnZGtfa2V5bWFwX2dldF9kZWZhdWx0KCksIEdES19LRVlfZiwgJmtleXMsICZuX2tleXMp
KSB7Ci0gICAgICAgIHByZXNzRXZlbnQtPmtleS5oYXJkd2FyZV9rZXljb2RlID0ga2V5c1swXS5r
ZXljb2RlOwotICAgICAgICBnX2ZyZWUoa2V5cyk7Ci0gICAgfQotCi0gICAgR2RrRXZlbnQqIHJl
bGVhc2VFdmVudCA9IGdka19ldmVudF9jb3B5KHByZXNzRXZlbnQpOwotICAgIGd0a19tYWluX2Rv
X2V2ZW50KHByZXNzRXZlbnQpOwotICAgIGdka19ldmVudF9mcmVlKHByZXNzRXZlbnQpOwotICAg
IHJlbGVhc2VFdmVudC0+a2V5LnR5cGUgPSBHREtfS0VZX1JFTEVBU0U7Ci0gICAgZ3RrX21haW5f
ZG9fZXZlbnQocmVsZWFzZUV2ZW50KTsKLSAgICBnZGtfZXZlbnRfZnJlZShyZWxlYXNlRXZlbnQp
OwotCi0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gZW50ZXJpbmdfZnVs
bHNjcmVlbl9jYihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHT2JqZWN0KiBlbGVtZW50LCBnYm9v
bGVhbiBibG9ja2VkKQotewotICAgIGlmIChibG9ja2VkKQotICAgICAgICBnX21haW5fbG9vcF9x
dWl0KGxvb3ApOwotICAgIGVsc2UKLSAgICAgICAgZ190aW1lb3V0X2FkZCgyMDAsIChHU291cmNl
RnVuYykgZW1pdEtleVN0cm9rZSwgd2ViVmlldyk7Ci0gICAgcmV0dXJuIGJsb2NrZWQ7Ci19Ci0K
LXN0YXRpYyBnYm9vbGVhbiBsZWF2aW5nX2Z1bGxzY3JlZW5fY2IoV2ViS2l0V2ViVmlldyogd2Vi
VmlldywgR09iamVjdCogZWxlbWVudCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBnX21haW5fbG9v
cF9xdWl0KGxvb3ApOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93
ZWJraXRfd2ViX3ZpZXdfZnVsbHNjcmVlbihnY29uc3Rwb2ludGVyIGJsb2NrZWQpCi17Ci0gICAg
R3RrV2lkZ2V0KiB3aW5kb3c7Ci0gICAgR3RrV2lkZ2V0KiB3ZWJfdmlldzsKLSAgICBXZWJLaXRX
ZWJTZXR0aW5ncyAqc2V0dGluZ3M7Ci0KLSAgICB3aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtf
V0lORE9XX1RPUExFVkVMKTsKLSAgICB3ZWJfdmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsK
LQotICAgIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyhXRUJLSVRfV0VC
X1ZJRVcod2ViX3ZpZXcpKTsKLSAgICBnX29iamVjdF9zZXQoc2V0dGluZ3MsICJlbmFibGUtZnVs
bHNjcmVlbiIsIFRSVUUsIE5VTEwpOwotICAgIHdlYmtpdF93ZWJfdmlld19zZXRfc2V0dGluZ3Mo
V0VCS0lUX1dFQl9WSUVXKHdlYl92aWV3KSwgc2V0dGluZ3MpOwotCi0gICAgZ3RrX2NvbnRhaW5l
cl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB3ZWJfdmlldyk7Ci0KLSAgICBndGtfd2lkZ2V0
X3Nob3dfYWxsKHdpbmRvdyk7Ci0KLSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRS
VUUpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh3ZWJfdmlldywgImVudGVyaW5nLWZ1bGxzY3Jl
ZW4iLCBHX0NBTExCQUNLKGVudGVyaW5nX2Z1bGxzY3JlZW5fY2IpLCAoZ3BvaW50ZXIpIGJsb2Nr
ZWQpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViX3ZpZXcsICJsZWF2aW5nLWZ1bGxzY3JlZW4i
LCBHX0NBTExCQUNLKGxlYXZpbmdfZnVsbHNjcmVlbl9jYiksIE5VTEwpOwotCi0gICAgd2Via2l0
X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklFVyh3ZWJfdmlldyksICI8aHRtbD48
Ym9keT4iCi0gICAgICAgICAgICAgICAgICAgIjxzY3JpcHQ+IgotICAgICAgICAgICAgICAgICAg
ICJ2YXIgZXZlbnROYW1lID0gJ2tleXByZXNzJzsiCi0gICAgICAgICAgICAgICAgICAgImRvY3Vt
ZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBmdW5jdGlvbiAoKSB7IgotICAgICAgICAg
ICAgICAgICAgICIgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LndlYmtpdFJlcXVlc3RGdWxs
U2NyZWVuKCk7IgotICAgICAgICAgICAgICAgICAgICJ9LCBmYWxzZSk7IgotICAgICAgICAgICAg
ICAgICAgICI8L3NjcmlwdD48L2JvZHk+PC9odG1sPiIsIE5VTEwsIE5VTEwsIE5VTEwpOwotCi0g
ICAgZ190aW1lb3V0X2FkZCgxMDAsIChHU291cmNlRnVuYykgZW1pdEtleVN0cm9rZSwgV0VCS0lU
X1dFQl9WSUVXKHdlYl92aWV3KSk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAg
Z3RrX3dpZGdldF9kZXN0cm95KHdpbmRvdyk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBjaGVja01p
bWVUeXBlRm9yRmlsdGVyKEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciwgY29uc3QgZ2NoYXIqIG1pbWVU
eXBlKQotewotICAgIEd0a0ZpbGVGaWx0ZXJJbmZvIGZpbHRlcl9pbmZvOwotICAgIGZpbHRlcl9p
bmZvLmNvbnRhaW5zID0gR1RLX0ZJTEVfRklMVEVSX01JTUVfVFlQRTsKLSAgICBmaWx0ZXJfaW5m
by5taW1lX3R5cGUgPSBtaW1lVHlwZTsKLSAgICByZXR1cm4gZ3RrX2ZpbGVfZmlsdGVyX2ZpbHRl
cihmaWx0ZXIsICZmaWx0ZXJfaW5mbyk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBydW5GaWxlQ2hv
b3NlckNiTm9NdWx0aXNlbE5vTWltZShXZWJLaXRXZWJWaWV3KiB3ZWJ2aWV3LCBXZWJLaXRGaWxl
Q2hvb3NlclJlcXVlc3QqIHJlcXVlc3QsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19hc3NlcnQo
IXdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxlKHJlcXVlc3Qp
KTsKLQotICAgIGNvbnN0IGdjaGFyKiBjb25zdCogbWltZVR5cGVzID0gd2Via2l0X2ZpbGVfY2hv
b3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKHJlcXVlc3QpOwotICAgIGdfYXNzZXJ0KCFtaW1l
VHlwZXMpOwotICAgIEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciA9IHdlYmtpdF9maWxlX2Nob29zZXJf
cmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIocmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQoIWZp
bHRlcik7Ci0KLSAgICBjb25zdCBnY2hhciogY29uc3QqIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRf
ZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKHJlcXVlc3QpOwotICAgIGdf
YXNzZXJ0KCFzZWxlY3RlZEZpbGVzKTsKLQotICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci0g
ICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBydW5GaWxlQ2hvb3NlckNiTXVs
dGlzZWxOb01pbWUoV2ViS2l0V2ViVmlldyogd2VidmlldywgV2ViS2l0RmlsZUNob29zZXJSZXF1
ZXN0KiByZXF1ZXN0LCBncG9pbnRlciBkYXRhKQotewotICAgIGdfYXNzZXJ0KHdlYmtpdF9maWxl
X2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxlKHJlcXVlc3QpKTsKLQotICAgIGNv
bnN0IGdjaGFyKiBjb25zdCogbWltZVR5cGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X2dldF9taW1lX3R5cGVzKHJlcXVlc3QpOwotICAgIGdfYXNzZXJ0KCFtaW1lVHlwZXMpOwotICAg
IEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRf
bWltZV90eXBlc19maWx0ZXIocmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQoIWZpbHRlcik7Ci0gICAg
Y29uc3QgZ2NoYXIqIGNvbnN0KiBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9y
ZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0KTsKLSAgICBnX2Fzc2VydCghc2VsZWN0
ZWRGaWxlcyk7Ci0KLSAgICAvLyBTZWxlY3Qgc29tZSBmaWxlcy4KLSAgICBjb25zdCBnY2hhciog
ZmlsZXNUb1NlbGVjdFs0XSA9IHsgIi9mb28iLCAiL2Zvby9iYXIiLCAiL2Zvby9iYXIvYmF6Iiwg
MCB9OwotICAgIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9zZWxlY3RfZmlsZXMocmVxdWVz
dCwgZmlsZXNUb1NlbGVjdCk7Ci0KLSAgICAvLyBDaGVjayB0aGUgZmlsZXMgdGhhdCBoYXZlIGJl
ZW4ganVzdCBzZWxlY3RlZC4KLSAgICBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0KTsKLSAgICBnX2Fzc2VydChzZWxl
Y3RlZEZpbGVzKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1swXSwgPT0sICIv
Zm9vIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMV0sID09LCAiL2Zvby9i
YXIiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1syXSwgPT0sICIvZm9vL2Jh
ci9iYXoiKTsKLSAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxlc1szXSk7Ci0KLSAgICBnX21haW5f
bG9vcF9xdWl0KGxvb3ApOwotICAgIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4g
cnVuRmlsZUNob29zZXJDYlNlbGVjdGlvblJldGFpbmVkKFdlYktpdFdlYlZpZXcqIHdlYnZpZXcs
IFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAg
ICBjb25zdCBnY2hhciogY29uc3QqIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2Vy
X3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKHJlcXVlc3QpOwotICAgIGdfYXNzZXJ0KHNlbGVj
dGVkRmlsZXMpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzBdLCA9PSwgIi9m
b28iKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1sxXSwgPT0sICIvZm9vL2Jh
ciIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzJdLCA9PSwgIi9mb28vYmFy
L2JheiIpOwotICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZpbGVzWzNdKTsKLQotICAgIGdfbWFpbl9s
b29wX3F1aXQobG9vcCk7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBy
dW5GaWxlQ2hvb3NlckNiTm9NdWx0aXNlbEFjY2VwdFR5cGVzKFdlYktpdFdlYlZpZXcqIHdlYnZp
ZXcsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCwgZ3BvaW50ZXIgZGF0YSkKLXsK
LSAgICBnX2Fzc2VydCghd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RfbXVs
dGlwbGUocmVxdWVzdCkpOwotCi0gICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBtaW1lVHlwZXMgPSB3
ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMocmVxdWVzdCk7Ci0gICAg
Z19hc3NlcnQobWltZVR5cGVzKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIobWltZVR5cGVzWzBdLCA9
PSwgImF1ZGlvLyoiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIobWltZVR5cGVzWzFdLCA9PSwgInZp
ZGVvLyoiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIobWltZVR5cGVzWzJdLCA9PSwgImltYWdlLyoi
KTsKLSAgICBnX2Fzc2VydCghbWltZVR5cGVzWzNdKTsKLQotICAgIEd0a0ZpbGVGaWx0ZXIqIGZp
bHRlciA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIo
cmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQoR1RLX0lTX0ZJTEVfRklMVEVSKGZpbHRlcikpOwotICAg
IGdfYXNzZXJ0KGNoZWNrTWltZVR5cGVGb3JGaWx0ZXIoZmlsdGVyLCAiYXVkaW8vKiIpKTsKLSAg
ICBnX2Fzc2VydChjaGVja01pbWVUeXBlRm9yRmlsdGVyKGZpbHRlciwgInZpZGVvLyoiKSk7Ci0g
ICAgZ19hc3NlcnQoY2hlY2tNaW1lVHlwZUZvckZpbHRlcihmaWx0ZXIsICJpbWFnZS8qIikpOwot
Ci0gICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2ZpbGVfY2hv
b3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0KTsKLSAgICBnX2Fzc2VydCgh
c2VsZWN0ZWRGaWxlcyk7Ci0KLSAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwotICAgIHJldHVy
biBUUlVFOwotfQotCi12b2lkIGRvTW91c2VCdXR0b25FdmVudChHdGtXaWRnZXQqIHdpZGdldCwg
R2RrRXZlbnRUeXBlIGV2ZW50VHlwZSwgaW50IHgsIGludCB5LCB1bnNpZ25lZCBpbnQgYnV0dG9u
LCB1bnNpZ25lZCBpbnQgbW9kaWZpZXJzKQotewotICAgIGdfYXNzZXJ0KGd0a193aWRnZXRfZ2V0
X3JlYWxpemVkKHdpZGdldCkpOwotCi0gICAgR2RrRXZlbnQqIGV2ZW50ID0gZ2RrX2V2ZW50X25l
dyhldmVudFR5cGUpOwotICAgIGV2ZW50LT5idXR0b24ud2luZG93ID0gZ3RrX3dpZGdldF9nZXRf
d2luZG93KHdpZGdldCk7Ci0gICAgZ19vYmplY3RfcmVmKGV2ZW50LT5idXR0b24ud2luZG93KTsK
LQotICAgIGV2ZW50LT5idXR0b24udGltZSA9IEdES19DVVJSRU5UX1RJTUU7Ci0gICAgZXZlbnQt
PmJ1dHRvbi54ID0geDsKLSAgICBldmVudC0+YnV0dG9uLnkgPSB5OwotICAgIGV2ZW50LT5idXR0
b24uYXhlcyA9IDA7Ci0gICAgZXZlbnQtPmJ1dHRvbi5zdGF0ZSA9IG1vZGlmaWVyczsKLSAgICBl
dmVudC0+YnV0dG9uLmJ1dHRvbiA9IGJ1dHRvbjsKLQotI2lmbmRlZiBHVEtfQVBJX1ZFUlNJT05f
MgotICAgIGV2ZW50LT5idXR0b24uZGV2aWNlID0gZ2RrX2RldmljZV9tYW5hZ2VyX2dldF9jbGll
bnRfcG9pbnRlcihnZGtfZGlzcGxheV9nZXRfZGV2aWNlX21hbmFnZXIoZ3RrX3dpZGdldF9nZXRf
ZGlzcGxheSh3aWRnZXQpKSk7Ci0jZW5kaWYKLQotICAgIGludCB4Um9vdCwgeVJvb3Q7Ci0gICAg
Z2RrX3dpbmRvd19nZXRfcm9vdF9jb29yZHMoZ3RrX3dpZGdldF9nZXRfd2luZG93KHdpZGdldCks
IHgsIHksICZ4Um9vdCwgJnlSb290KTsKLSAgICBldmVudC0+YnV0dG9uLnhfcm9vdCA9IHhSb290
OwotICAgIGV2ZW50LT5idXR0b24ueV9yb290ID0geVJvb3Q7Ci0gICAgZ3RrX21haW5fZG9fZXZl
bnQoZXZlbnQpOwotfQotCi1zdGF0aWMgdm9pZCBjbGlja01vdXNlQnV0dG9uKEd0a1dpZGdldCog
d2lkZ2V0LCBpbnQgeCwgaW50IHksIHVuc2lnbmVkIGludCBidXR0b24sIHVuc2lnbmVkIGludCBt
b2RpZmllcnMpCi17Ci0gICAgZG9Nb3VzZUJ1dHRvbkV2ZW50KHdpZGdldCwgR0RLX0JVVFRPTl9Q
UkVTUywgeCwgeSwgYnV0dG9uLCBtb2RpZmllcnMpOwotICAgIGRvTW91c2VCdXR0b25FdmVudCh3
aWRnZXQsIEdES19CVVRUT05fUkVMRUFTRSwgeCwgeSwgYnV0dG9uLCBtb2RpZmllcnMpOwotfQot
Ci1zdGF0aWMgZ2Jvb2xlYW4gY2xpY2tNb3VzZUJ1dHRvbkFuZFdhaXRGb3JGaWxlQ2hvb3NlclJl
cXVlc3QoV2ViS2l0V2ViVmlldyogd2ViVmlldykKLXsKLSAgICBjbGlja01vdXNlQnV0dG9uKEdU
S19XSURHRVQod2ViVmlldyksIDUsIDUsIDEsIDApOwotICAgIHJldHVybiBUUlVFOwotfQotCi1z
dGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfdmlld19maWxlX2Nob29zZXIoKQotewotICAgIGNv
bnN0IGdjaGFyKiBodG1sRm9ybWF0QmFzZSA9ICI8aHRtbD48Ym9keT4iCi0gICAgICAgICAgICAi
PGlucHV0IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjA7bWFyZ2luOjA7cGFk
ZGluZzowJyB0eXBlPSdmaWxlJyAlcy8+IgotICAgICAgICAgICAgIjwvYm9keT48L2h0bWw+IjsK
LQotICAgIEd0a1dpZGdldCogd2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BM
RVZFTCk7Ci0gICAgR3RrV2lkZ2V0KiB3ZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygpOwot
ICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgd2ViVmlldyk7Ci0g
ICAgZ3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpOwotCi0gICAgbG9vcCA9IGdfbWFpbl9sb29w
X25ldyhOVUxMLCBUUlVFKTsKLQotICAgIC8vIE11bHRpcGxlIHNlbGVjdGlvbnMgbm90IGFsbG93
ZWQsIG5vIE1JTUUgZmlsdGVyaW5nLgotICAgIGd1bG9uZyBoYW5kbGVyID0gZ19zaWduYWxfY29u
bmVjdCh3ZWJWaWV3LCAicnVuLWZpbGUtY2hvb3NlciIsIEdfQ0FMTEJBQ0socnVuRmlsZUNob29z
ZXJDYk5vTXVsdGlzZWxOb01pbWUpLCBOVUxMKTsKLSAgICBnY2hhciogaHRtbEZvcm1hdCA9IGdf
c3RyZHVwX3ByaW50ZihodG1sRm9ybWF0QmFzZSwgIiIpOwotICAgIHdlYmtpdF93ZWJfdmlld19s
b2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldyksIGh0bWxGb3JtYXQsIE5VTEwsIE5V
TEwsIE5VTEwpOwotICAgIGdfZnJlZShodG1sRm9ybWF0KTsKLQotICAgIGdfdGltZW91dF9hZGQo
MTAwLCAoR1NvdXJjZUZ1bmMpIGNsaWNrTW91c2VCdXR0b25BbmRXYWl0Rm9yRmlsZUNob29zZXJS
ZXF1ZXN0LCBXRUJLSVRfV0VCX1ZJRVcod2ViVmlldykpOwotICAgIGdfbWFpbl9sb29wX3J1bihs
b29wKTsKLQotICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdCh3ZWJWaWV3LCBoYW5kbGVy
KTsKLQotICAgIC8vIE11bHRpcGxlIHNlbGVjdGlvbnMgYWxsb3dlZCwgbm8gTUlNRSBmaWx0ZXJp
bmcsIHNvbWUgcHJlLXNlbGVjdGVkIGZpbGVzLgotICAgIGhhbmRsZXIgPSBnX3NpZ25hbF9jb25u
ZWN0KHdlYlZpZXcsICJydW4tZmlsZS1jaG9vc2VyIiwgR19DQUxMQkFDSyhydW5GaWxlQ2hvb3Nl
ckNiTXVsdGlzZWxOb01pbWUpLCBOVUxMKTsKLSAgICBodG1sRm9ybWF0ID0gZ19zdHJkdXBfcHJp
bnRmKGh0bWxGb3JtYXRCYXNlLCAibXVsdGlwbGUiKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9h
ZF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpLCBodG1sRm9ybWF0LCBOVUxMLCBOVUxM
LCBOVUxMKTsKLSAgICBnX2ZyZWUoaHRtbEZvcm1hdCk7Ci0KLSAgICBnX3RpbWVvdXRfYWRkKDEw
MCwgKEdTb3VyY2VGdW5jKSBjbGlja01vdXNlQnV0dG9uQW5kV2FpdEZvckZpbGVDaG9vc2VyUmVx
dWVzdCwgV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpKTsKLSAgICBnX21haW5fbG9vcF9ydW4obG9v
cCk7Ci0KLSAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3Qod2ViVmlldywgaGFuZGxlcik7
Ci0KLSAgICAvLyBQZXJmb3JtIGFub3RoZXIgcmVxdWVzdCB0byBjaGVjayBpZiB0aGUgbGlzdCBv
ZiBmaWxlcyBzZWxlY3RlZAotICAgIC8vIGluIHRoZSBwcmV2aW91cyBzdGVwIGFwcGVhcnMgbm93
IGFzIHBhcnQgb2YgdGhlIG5ldyByZXF1ZXN0LgotICAgIGhhbmRsZXIgPSBnX3NpZ25hbF9jb25u
ZWN0KHdlYlZpZXcsICJydW4tZmlsZS1jaG9vc2VyIiwgR19DQUxMQkFDSyhydW5GaWxlQ2hvb3Nl
ckNiU2VsZWN0aW9uUmV0YWluZWQpLCBOVUxMKTsKLSAgICBnX3RpbWVvdXRfYWRkKDEwMCwgKEdT
b3VyY2VGdW5jKSBjbGlja01vdXNlQnV0dG9uQW5kV2FpdEZvckZpbGVDaG9vc2VyUmVxdWVzdCwg
V0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpKTsKLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0K
LSAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3Qod2ViVmlldywgaGFuZGxlcik7Ci0KLSAg
ICAvLyBNdWx0aXBsZSBzZWxlY3Rpb25zIG5vdCBhbGxvd2VkLCBvbmx5IGFjY2VwdCBpbWFnZXMs
IGF1ZGlvIGFuZCB2aWRlbyBmaWxlcy4KLSAgICBoYW5kbGVyID0gZ19zaWduYWxfY29ubmVjdCh3
ZWJWaWV3LCAicnVuLWZpbGUtY2hvb3NlciIsIEdfQ0FMTEJBQ0socnVuRmlsZUNob29zZXJDYk5v
TXVsdGlzZWxBY2NlcHRUeXBlcyksIE5VTEwpOwotICAgIGh0bWxGb3JtYXQgPSBnX3N0cmR1cF9w
cmludGYoaHRtbEZvcm1hdEJhc2UsICJhY2NlcHQ9J2F1ZGlvLyosdmlkZW8vKixpbWFnZS8qJyIp
OwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcod2ViVmll
dyksIGh0bWxGb3JtYXQsIE5VTEwsIE5VTEwsIE5VTEwpOwotICAgIGdfZnJlZShodG1sRm9ybWF0
KTsKLQotICAgIGdfdGltZW91dF9hZGQoMTAwLCAoR1NvdXJjZUZ1bmMpIGNsaWNrTW91c2VCdXR0
b25BbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0LCBXRUJLSVRfV0VCX1ZJRVcod2ViVmlldykp
OwotICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLQotICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlz
Y29ubmVjdCh3ZWJWaWV3LCBoYW5kbGVyKTsKLSAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kod2luZG93
KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3ZpZXdfc291cmNlX21vZGUoKQot
ewotICAgIEd0a1dpZGdldCogd2ViX3ZpZXc7Ci0KLSAgICB3ZWJfdmlldyA9IHdlYmtpdF93ZWJf
dmlld19uZXcoKTsKLQotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhXRUJLSVRfV0VC
X1ZJRVcod2ViX3ZpZXcpLCAiPGh0bWw+PGJvZHk+PC9ib2R5PjwvaHRtbD4iLCBOVUxMLCBOVUxM
LCBOVUxMKTsKLQotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfZ2V0X3ZpZXdfc291cmNl
X21vZGUoV0VCS0lUX1dFQl9WSUVXKHdlYl92aWV3KSkpOwotCi0gICAgd2Via2l0X3dlYl92aWV3
X3NldF92aWV3X3NvdXJjZV9tb2RlKFdFQktJVF9XRUJfVklFVyh3ZWJfdmlldyksIFRSVUUpOwot
Ci0gICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dldF92aWV3X3NvdXJjZV9tb2RlKFdFQktJ
VF9XRUJfVklFVyh3ZWJfdmlldykpKTsKLQotICAgIHdlYmtpdF93ZWJfdmlld19zZXRfdmlld19z
b3VyY2VfbW9kZShXRUJLSVRfV0VCX1ZJRVcod2ViX3ZpZXcpLCBGQUxTRSk7Ci0KLSAgICBnX2Fz
c2VydCghd2Via2l0X3dlYl92aWV3X2dldF92aWV3X3NvdXJjZV9tb2RlKFdFQktJVF9XRUJfVklF
Vyh3ZWJfdmlldykpKTsKLQotICAgIGd0a193aWRnZXRfZGVzdHJveSh3ZWJfdmlldyk7Ci19Ci0K
LWludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKLXsKLSAgICBTb3VwU2VydmVyKiBzZXJ2
ZXI7Ci0gICAgU291cFVSSSogc291cF91cmk7Ci0KLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAm
YXJndiwgTlVMTCk7Ci0KLSAgICAvKiBIb3BlZnVsbHkgbWFrZSB0ZXN0IGluZGVwZW5kZW50IG9m
IHRoZSBwYXRoIGl0J3MgY2FsbGVkIGZyb20uICovCi0gICAgdGVzdHV0aWxzX3JlbGF0aXZlX2No
ZGlyKCJTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy9yZXNvdXJjZXMvdGVzdC5odG1sIiwgYXJndlsw
XSk7Ci0KLSAgICBzZXJ2ZXIgPSBzb3VwX3NlcnZlcl9uZXcoU09VUF9TRVJWRVJfUE9SVCwgMCwg
TlVMTCk7Ci0gICAgc291cF9zZXJ2ZXJfcnVuX2FzeW5jKHNlcnZlcik7Ci0KLSAgICBzb3VwX3Nl
cnZlcl9hZGRfaGFuZGxlcihzZXJ2ZXIsIE5VTEwsIHNlcnZlcl9jYWxsYmFjaywgTlVMTCwgTlVM
TCk7Ci0KLSAgICBzb3VwX3VyaSA9IHNvdXBfdXJpX25ldygiaHR0cDovLzEyNy4wLjAuMS8iKTsK
LSAgICBzb3VwX3VyaV9zZXRfcG9ydChzb3VwX3VyaSwgc291cF9zZXJ2ZXJfZ2V0X3BvcnQoc2Vy
dmVyKSk7Ci0KLSAgICBiYXNlX3VyaSA9IHNvdXBfdXJpX3RvX3N0cmluZyhzb3VwX3VyaSwgRkFM
U0UpOwotICAgIHNvdXBfdXJpX2ZyZWUoc291cF91cmkpOwotCi0gICAgZ190ZXN0X2J1Z19iYXNl
KCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJr
aXQvd2Vidmlldy9pY29uLXVyaSIsIHRlc3Rfd2Via2l0X3dlYl92aWV3X2ljb25fdXJpKTsKLSAg
ICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vidmlldy9hZGp1c3RtZW50cyIsIHRlc3Rfd2Vi
a2l0X3dlYl92aWV3X2FkanVzdG1lbnRzKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQv
d2Vidmlldy9kZXN0cm95IiwgdGVzdF93ZWJraXRfd2ViX3ZpZXdfZGVzdHJveSk7Ci0gICAgZ190
ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnZpZXcvZ3JhYl9mb2N1cyIsIHRlc3Rfd2Via2l0X3dl
Yl92aWV3X2dyYWJfZm9jdXMpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJ2aWV3
L3dpbmRvdy1mZWF0dXJlcyIsIHRlc3Rfd2Via2l0X3dlYl92aWV3X3dpbmRvd19mZWF0dXJlcyk7
Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnZpZXcvd2Vidmlldy1pbi1vZmZzY3Jl
ZW4td2luZG93LWRvZXMtbm90LWNyYXNoIiwgdGVzdF93ZWJraXRfd2ViX3ZpZXdfaW5fb2Zmc2Ny
ZWVuX3dpbmRvd19kb2VzX25vdF9jcmFzaCk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0
L3dlYnZpZXcvd2Vidmlldy1kb2VzLW5vdC1zdGVhbC1mb2N1cyIsIHRlc3Rfd2Via2l0X3dlYl92
aWV3X2RvZXNfbm90X3N0ZWFsX2ZvY3VzKTsKLSAgICBnX3Rlc3RfYWRkX2RhdGFfZnVuYygiL3dl
YmtpdC93ZWJ2aWV3L2Z1bGxzY3JlZW4iLCBHSU5UX1RPX1BPSU5URVIoRkFMU0UpLCB0ZXN0X3dl
YmtpdF93ZWJfdmlld19mdWxsc2NyZWVuKTsKLSAgICBnX3Rlc3RfYWRkX2RhdGFfZnVuYygiL3dl
YmtpdC93ZWJ2aWV3L2Z1bGxzY3JlZW4tYmxvY2tlZCIsIEdJTlRfVE9fUE9JTlRFUihUUlVFKSwg
dGVzdF93ZWJraXRfd2ViX3ZpZXdfZnVsbHNjcmVlbik7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIv
d2Via2l0L3dlYnZpZXcvZmlsZS1jaG9vc2VyIiwgdGVzdF93ZWJraXRfd2ViX3ZpZXdfZmlsZV9j
aG9vc2VyKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vidmlldy9zb3VyY2UtbW9k
ZSIsIHRlc3Rfd2Via2l0X3dlYl92aWV3X3NvdXJjZV9tb2RlKTsKLQotICAgIHJldHVybiBnX3Rl
c3RfcnVuICgpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdp
bmRvdy5jIGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdpbmRvdy5jCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA1ZWRhNDdiLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQv
Z3RrL3Rlc3RzL3Rlc3R3aW5kb3cuYworKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA5IENvbGxhYm9yYSBMdGQuCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgotCi1z
dGF0aWMgdm9pZCBub3RpZnlfbG9hZF9zdGF0dXNfY2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcs
IEdQYXJhbVNwZWMqIHBzcGVjLCBncG9pbnRlciBkYXRhKQotewotICAgIGlmICh3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYl92aWV3KSA9PSBXRUJLSVRfTE9BRF9GSU5JU0hFRCkg
ewotICAgICAgICBHTWFpbkxvb3AqIGxvb3AgPSAoR01haW5Mb29wKilkYXRhOwotCi0gICAgICAg
IGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dl
YmtpdF93aW5kb3dfc2Nyb2xsYmFyX3BvbGljeSh2b2lkKQotewotICAgIEdNYWluTG9vcCogbG9v
cDsKLSAgICBHdGtXaWRnZXQqIHNjcm9sbGVkV2luZG93OwotICAgIEd0a1dpZGdldCogd2ViVmll
dzsKLSAgICBXZWJLaXRXZWJGcmFtZSogbWFpbkZyYW1lOwotICAgIEd0a1BvbGljeVR5cGUgaG9y
aXpvbnRhbFBvbGljeTsKLSAgICBHdGtQb2xpY3lUeXBlIHZlcnRpY2FsUG9saWN5OwotCi0gICAg
bG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLQotICAgIHNjcm9sbGVkV2luZG93
ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19uZXcoTlVMTCwgTlVMTCk7Ci0gICAgZ3RrX3Njcm9sbGVk
X3dpbmRvd19zZXRfcG9saWN5KEdUS19TQ1JPTExFRF9XSU5ET1coc2Nyb2xsZWRXaW5kb3cpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfUE9MSUNZX0FVVE9NQVRJQywg
R1RLX1BPTElDWV9BVVRPTUFUSUMpOwotCi0gICAgd2ViVmlldyA9IHdlYmtpdF93ZWJfdmlld19u
ZXcoKTsKLSAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKLQotICAgIGdfc2lnbmFsX2Nv
bm5lY3Qod2ViVmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLAotICAgICAgICAgICAgICAgICAg
ICAgR19DQUxMQkFDSyhub3RpZnlfbG9hZF9zdGF0dXNfY2IpLCBsb29wKTsKLQotICAgIGd0a19j
b250YWluZXJfYWRkKEdUS19DT05UQUlORVIoc2Nyb2xsZWRXaW5kb3cpLCB3ZWJWaWV3KTsKLQot
ICAgIG1haW5GcmFtZSA9IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZShXRUJLSVRfV0VC
X1ZJRVcod2ViVmlldykpOwotCi0gICAgLyogVGVzdCB3ZSBjb3JyZWN0bHkgYXBwbHkgcG9saWN5
IGZvciBub3QgaGF2aW5nIHNjcm9sbGJhcnM7IFRoaXMKLSAgICAgKiBjYXNlIGlzIHNwZWNpYWws
IGJlY2F1c2Ugd2UgdHVybiB0aGUgcG9saWN5IGZyb20gTkVWRVIgdG8KLSAgICAgKiBBVVRPTUFU
SUMsIHNpbmNlIHdlIGNhbm5vdCBlYXNpbHkgcmVwcmVzZW50IHRoZSBzYW1lIHRoaW5nCi0gICAg
ICogdXNpbmcgR3RrU2Nyb2xsZWRXaW5kb3cgKi8KLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9o
dG1sX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldyksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIjxodG1sPjxib2R5PldlYktpdCE8L2JvZHk+PHNjcmlwdD5kb2N1
bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdLnN0eWxlLm92ZXJmbG93ID0gJ2hp
ZGRlbic7PC9zY3JpcHQ+PC9odG1sPiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImZpbGU6Ly8iKTsKLQotICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLQotICAgIGd0
a19zY3JvbGxlZF93aW5kb3dfZ2V0X3BvbGljeShHVEtfU0NST0xMRURfV0lORE9XKHNjcm9sbGVk
V2luZG93KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhvcml6b250YWxQ
b2xpY3ksICZ2ZXJ0aWNhbFBvbGljeSk7Ci0KLSAgICBnX2Fzc2VydChob3Jpem9udGFsUG9saWN5
ID09IEdUS19QT0xJQ1lfQVVUT01BVElDKTsKLSAgICBnX2Fzc2VydCh2ZXJ0aWNhbFBvbGljeSA9
PSBHVEtfUE9MSUNZX0FVVE9NQVRJQyk7Ci0KLSAgICBnX2Fzc2VydChHVEtfUE9MSUNZX05FVkVS
ID09IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X2hvcml6b250YWxfc2Nyb2xsYmFyX3BvbGljeShtYWlu
RnJhbWUpKTsKLSAgICBnX2Fzc2VydChHVEtfUE9MSUNZX05FVkVSID09IHdlYmtpdF93ZWJfZnJh
bWVfZ2V0X3ZlcnRpY2FsX3Njcm9sbGJhcl9wb2xpY3kobWFpbkZyYW1lKSk7Ci0KLSAgICAvKiBU
ZXN0IHdlIGNvcnJlY3RseSBhcHBseSBwb2xpY3kgZm9yIGFsd2F5cyBoYXZpbmcgc2Nyb2xsYmFy
cyAqLwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX2h0bWxfc3RyaW5nKFdFQktJVF9XRUJfVklF
Vyh3ZWJWaWV3KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGh0bWw+
PGJvZHk+V2ViS2l0ITwvYm9keT48c2NyaXB0PmRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1l
KCdib2R5JylbMF0uc3R5bGUub3ZlcmZsb3cgPSAnc2Nyb2xsJzs8L3NjcmlwdD48L2h0bWw+IiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZTovLyIpOwotCi0gICAg
Z19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAgZ3RrX3Njcm9sbGVkX3dpbmRvd19nZXRfcG9s
aWN5KEdUS19TQ1JPTExFRF9XSU5ET1coc2Nyb2xsZWRXaW5kb3cpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmaG9yaXpvbnRhbFBvbGljeSwgJnZlcnRpY2FsUG9saWN5KTsK
LQotICAgIGdfYXNzZXJ0KGhvcml6b250YWxQb2xpY3kgPT0gR1RLX1BPTElDWV9BTFdBWVMpOwot
ICAgIGdfYXNzZXJ0KHZlcnRpY2FsUG9saWN5ID09IEdUS19QT0xJQ1lfQUxXQVlTKTsKLQotICAg
IGdfYXNzZXJ0KGhvcml6b250YWxQb2xpY3kgPT0gd2Via2l0X3dlYl9mcmFtZV9nZXRfaG9yaXpv
bnRhbF9zY3JvbGxiYXJfcG9saWN5KG1haW5GcmFtZSkpOwotICAgIGdfYXNzZXJ0KHZlcnRpY2Fs
UG9saWN5ID09IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3ZlcnRpY2FsX3Njcm9sbGJhcl9wb2xpY3ko
bWFpbkZyYW1lKSk7Ci0KLSAgICAvKiBUZXN0IHdlIGNvcnJlY3RseSBhcHBseSBwb2xpY3kgZm9y
IGhhdmluZyBzY3JvbGxiYXJzIHdoZW4gbmVlZGVkICovCi0gICAgd2Via2l0X3dlYl92aWV3X2xv
YWRfaHRtbF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICI8aHRtbD48Ym9keT5XZWJLaXQhPC9ib2R5PjxzY3JpcHQ+
ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHknKVswXS5zdHlsZS5vdmVyZmxvdyA9
ICdhdXRvJzs8L3NjcmlwdD48L2h0bWw+IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiZmlsZTovLyIpOwotCi0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAg
Z3RrX3Njcm9sbGVkX3dpbmRvd19nZXRfcG9saWN5KEdUS19TQ1JPTExFRF9XSU5ET1coc2Nyb2xs
ZWRXaW5kb3cpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaG9yaXpvbnRh
bFBvbGljeSwgJnZlcnRpY2FsUG9saWN5KTsKLQotICAgIGdfYXNzZXJ0KGhvcml6b250YWxQb2xp
Y3kgPT0gR1RLX1BPTElDWV9BVVRPTUFUSUMpOwotICAgIGdfYXNzZXJ0KHZlcnRpY2FsUG9saWN5
ID09IEdUS19QT0xJQ1lfQVVUT01BVElDKTsKLQotICAgIGdfYXNzZXJ0KGhvcml6b250YWxQb2xp
Y3kgPT0gd2Via2l0X3dlYl9mcmFtZV9nZXRfaG9yaXpvbnRhbF9zY3JvbGxiYXJfcG9saWN5KG1h
aW5GcmFtZSkpOwotICAgIGdfYXNzZXJ0KHZlcnRpY2FsUG9saWN5ID09IHdlYmtpdF93ZWJfZnJh
bWVfZ2V0X3ZlcnRpY2FsX3Njcm9sbGJhcl9wb2xpY3kobWFpbkZyYW1lKSk7Ci0KLSAgICBnX29i
amVjdF91bnJlZih3ZWJWaWV3KTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2
KQotewotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLQotICAgIGdfdGVz
dF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0gICAgZ190ZXN0X2FkZF9m
dW5jKCIvd2Via2l0L3dpbmRvdy9zY3JvbGxiYXJfcG9saWN5IiwgdGVzdF93ZWJraXRfd2luZG93
X3Njcm9sbGJhcl9wb2xpY3kpOwotICAgIHJldHVybiBnX3Rlc3RfcnVuICgpOwotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CmluZGV4IGExZTc4ZmUuLjQ0OWRhNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAx
NC0wMS0wMyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAg
ICAgICAgW0dUS10gTW92ZSBhbGwgR1RLL0dPYmplY3QgdW5pdCB0ZXN0cyB0byBUb29scy9UZXN0
V2ViS2l0QVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMjYzNDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0NNYWtlTGlzdHMudHh0OiBSZW1vdmVkLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtOiBSZW1vdmVkLgor
CiAyMDE0LTAxLTAzICBKaW53b28gU29uZyAgPGppbndvbzcuc29uZ0BzYW1zdW5nLmNvbT4KIAog
ICAgICAgICBWaWJyYXRpb25QYXR0ZXJuIHNob3VsZCBhbGxvY2F0ZSBhbiBzaW5nbGUgdmVjdG9y
IGluc3RhbmNlIGZvciBzaW5nbGUgaW50ZWdlciBpbnB1dApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvQWNjZXNzaWJpbGl0eVRlc3RTZXJ2ZXIuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvQWNjZXNzaWJpbGl0eVRl
c3RTZXJ2ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTUwMDUwLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0FjY2Vzc2li
aWxpdHlUZXN0U2VydmVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQot
I2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdDIuaD4KLQotc3Rh
dGljIHZvaWQgbG9hZENoYW5nZWRDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiwgV2ViS2l0TG9hZEV2
ZW50IGxvYWRFdmVudCwgZ3BvaW50ZXIpCi17Ci0gICAgLy8gU2VuZCBhIG1lc3NhZ2UgdG8gdGhl
IHBhcmVudCBwcm9jZXNzIHdoZW4gd2UncmUgcmVhZHkuCi0gICAgaWYgKGxvYWRFdmVudCA9PSBX
RUJLSVRfTE9BRF9GSU5JU0hFRCkKLSAgICAgICAgZ19wcmludCgiT0siKTsKLX0KLQotaW50IG1h
aW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotewotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBB
VEsgYnJpZGdlIGlzIGxvYWRlZC4KLSAgICBnX3NldGVudigiR1RLX01PRFVMRVMiLCAiYXRrLWJy
aWRnZSIsIFRSVUUpOwotCi0gICAgZ3RrX2luaXQoJmFyZ2MsICZhcmd2KTsKLQotICAgIFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygp
KTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9odG1sKHdlYlZpZXcsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiPGh0bWw+IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IiAgPGJvZHk+IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgIDxoMT5UaGlzIGlz
IGEgdGVzdDwvaDE+IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgIDxwPlRoaXMg
aXMgYSBwYXJhZ3JhcGggd2l0aCBzb21lIHBsYWluIHRleHQuPC9wPiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICIgICA8cD5UaGlzIHBhcmFncmFwaCBjb250YWlucyA8YSBocmVmPVwi
aHR0cDovL3d3dy53ZWJraXRndGsub3JnXCI+YSBsaW5rPC9hPiBpbiB0aGUgbWlkZGxlLjwvcD4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICA8L2JvZHk+IgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIjwvaHRtbD4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMCk7Ci0KLSAgICBHdGtXaWRnZXQqIHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5E
T1dfVE9QTEVWRUwpOwotICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93
KSwgR1RLX1dJREdFVCh3ZWJWaWV3KSk7Ci0gICAgZ3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cp
OwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh3aW5kb3csICJkZWxldGUtZXZlbnQiLCBHX0NBTExC
QUNLKGd0a19tYWluX3F1aXQpLCAwKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJs
b2FkLWNoYW5nZWQiLCBHX0NBTExCQUNLKGxvYWRDaGFuZ2VkQ2FsbGJhY2spLCAwKTsKLQotICAg
IGd0a19tYWluKCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL0NNYWtlTGlzdHMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBi
Y2IwY2ZkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL0NNYWtlTGlzdHMudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLXNldChU
RVNUX0xJQlJBUllfRElSICR7Q01BS0VfTElCUkFSWV9PVVRQVVRfRElSRUNUT1JZfS9XZWJLaXQy
R09iamVjdEFQSVRlc3RzKQotc2V0KFRFU1RfUkVTT1VSQ0VTX0RJUiAke0NNQUtFX1JVTlRJTUVf
T1VUUFVUX0RJUkVDVE9SWX0vcmVzb3VyY2VzKQotZmlsZShNQUtFX0RJUkVDVE9SWSAke1RFU1Rf
UkVTT1VSQ0VTX0RJUn0pCi0KLWFkZF9kZWZpbml0aW9ucygKLSAgICAtRFdFQktJVF9URVNUX1BM
VUdJTl9ESVI9IiR7Q01BS0VfTElCUkFSWV9PVVRQVVRfRElSRUNUT1JZfSIKLSAgICAtRFdFQktJ
VF9FWEVDX1BBVEg9IiR7Q01BS0VfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZfSIKLSAgICAtRFdF
QktJVF9TUkNfRElSPSIke0NNQUtFX1NPVVJDRV9ESVJ9IgotICAgIC1EV0VCS0lUX1RFU1RfV0VC
X0VYVEVOU0lPTlNfRElSPSIke1RFU1RfTElCUkFSWV9ESVJ9IgotICAgIC1EV0VCS0lUX0lOSkVD
VEVEX0JVTkRMRV9QQVRIPSIke0NNQUtFX0xJQlJBUllfT1VUUFVUX0RJUkVDVE9SWX0iCi0pCi0K
LWluY2x1ZGVfZGlyZWN0b3JpZXMoCi0gICAgJHtDTUFLRV9CSU5BUllfRElSfQotICAgICR7Q01B
S0VfU09VUkNFX0RJUn0vU291cmNlCi0gICAgJHtDTUFLRV9TT1VSQ0VfRElSfS9Tb3VyY2UvV1RG
Ci0gICAgJHtERVJJVkVEX1NPVVJDRVNfRElSfQotICAgICR7REVSSVZFRF9TT1VSQ0VTX1dFQktJ
VDJHVEtfRElSfQotICAgICR7Rk9SV0FSRElOR19IRUFERVJTX0RJUn0KLSAgICAke0ZPUldBUkRJ
TkdfSEVBREVSU19XRUJLSVQyR1RLX0RJUn0KLSAgICAke0ZPUldBUkRJTkdfSEVBREVSU19XRUJL
SVQyR1RLX0VYVEVOU0lPTl9ESVJ9Ci0gICAgJHtBVFNQSV9JTkNMVURFX0RJUlN9Ci0gICAgJHtH
TElCX0lOQ0xVREVfRElSU30KLSAgICAke0dUSzNfSU5DTFVERV9ESVJTfQotICAgICR7TElCU09V
UF9JTkNMVURFX0RJUlN9Ci0pCi0KLWFkZF9saWJyYXJ5KFdlYktpdDJBUElUZXN0Q29yZSBTVEFU
SUMKLSAgICBMb2FkVHJhY2tpbmdUZXN0LmNwcAotICAgIFdlYktpdFRlc3RCdXMuY3BwCi0gICAg
V2ViS2l0VGVzdFNlcnZlci5jcHAKLSAgICBXZWJQcm9jZXNzVGVzdFJ1bm5lci5jcHAKLSAgICBU
ZXN0TWFpbi5jcHAKLSAgICBXZWJWaWV3VGVzdC5jcHAKLSkKLWFkZF9kZXBlbmRlbmNpZXMoV2Vi
S2l0MkFQSVRlc3RDb3JlIFdlYktpdDIpCi0KLWFkZF9jdXN0b21fdGFyZ2V0KHRlc3QtZ3Jlc291
cmNlLWJ1bmRsZQotICAgIERFUEVORFMgcmVzb3VyY2VzL3dlYmtpdDJndGstdGVzdHMuZ3Jlc291
cmNlLnhtbAotICAgICAgICAgICAgcmVzb3VyY2VzL2xpbmstdGl0bGUuanMKLSAgICBDT01NQU5E
IGdsaWItY29tcGlsZS1yZXNvdXJjZXMgLS10YXJnZXQ9JHtURVNUX1JFU09VUkNFU19ESVJ9L3dl
YmtpdDJndGstdGVzdHMtcmVzb3VyY2VzLmdyZXNvdXJjZSAtLXNvdXJjZWRpcj0ke0NNQUtFX1NP
VVJDRV9ESVJ9ICR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvcmVzb3VyY2VzL3dlYmtpdDJndGstdGVzdHMuZ3Jlc291cmNlLnhtbAotKQot
Ci1tYWNybyhBRERfV0syX1RFU1RfV0VCX0VYVEVOU0lPTiBleHRlbnNpb25fbmFtZSkKLSAgICBh
ZGRfbGlicmFyeSgke2V4dGVuc2lvbl9uYW1lfSBNT0RVTEUgJHtBUkdOfSkKLSAgICBzZXRfcHJv
cGVydHkoCi0gICAgICAgIFRBUkdFVCAke2V4dGVuc2lvbl9uYW1lfQotICAgICAgICBBUFBFTkQK
LSAgICAgICAgUFJPUEVSVFkgQ09NUElMRV9ERUZJTklUSU9OUyBXRUJLSVQyX0NPTVBJTEFUSU9O
Ci0gICAgKQotICAgIHNldF90YXJnZXRfcHJvcGVydGllcygke2V4dGVuc2lvbl9uYW1lfSBQUk9Q
RVJUSUVTCi0gICAgICAgIExJQlJBUllfT1VUUFVUX0RJUkVDVE9SWSAke1RFU1RfTElCUkFSWV9E
SVJ9Ci0gICAgKQotZW5kbWFjcm8oKQotCi1tYWNybyhBRERfV0syX1RFU1QgdGVzdF9uYW1lKQot
ICAgIGFkZF9leGVjdXRhYmxlKCR7dGVzdF9uYW1lfSAke0FSR059KQotICAgIGFkZF9kZXBlbmRl
bmNpZXMoJHt0ZXN0X25hbWV9Ci0gICAgICAgIHRlc3QtZ3Jlc291cmNlLWJ1bmRsZQotICAgICAg
ICBXZWJFeHRlbnNpb25UZXN0Ci0gICAgKQotICAgIHRhcmdldF9saW5rX2xpYnJhcmllcygke3Rl
c3RfbmFtZX0KLSAgICAgICAgSmF2YVNjcmlwdENvcmUKLSAgICAgICAgV2ViS2l0MgotICAgICAg
ICBXZWJLaXQyQVBJVGVzdENvcmUKLSAgICAgICAgJHtBVFNQSV9MSUJSQVJJRVN9Ci0gICAgICAg
ICR7R0xJQl9MSUJSQVJJRVN9Ci0gICAgICAgICR7R1RLM19MSUJSQVJJRVN9Ci0gICAgICAgICR7
TElCU09VUF9MSUJSQVJJRVN9Ci0gICAgKQotICAgIHNldF90YXJnZXRfcHJvcGVydGllcygke3Rl
c3RfbmFtZX0gUFJPUEVSVElFUwotICAgICAgICBSVU5USU1FX09VVFBVVF9ESVJFQ1RPUlkgJHtD
TUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUll9L1dlYktpdDJHT2JqZWN0QVBJVGVzdHMKLSAg
ICApCi1lbmRtYWNybygpCi0KLUFERF9XSzJfVEVTVF9XRUJfRVhURU5TSU9OKFdlYkV4dGVuc2lv
blRlc3QgV2ViRXh0ZW5zaW9uVGVzdC5jcHApCi1BRERfV0syX1RFU1RfV0VCX0VYVEVOU0lPTihX
ZWJQcm9jZXNzVGVzdCBET01Ob2RlVGVzdC5jcHAgRnJhbWVUZXN0LmNwcCBXZWJQcm9jZXNzVGVz
dC5jcHApCi0KLUFERF9XSzJfVEVTVChJbnNwZWN0b3JUZXN0U2VydmVyIEluc3BlY3RvclRlc3RT
ZXJ2ZXIuY3BwKQotQUREX1dLMl9URVNUKFRlc3RCYWNrRm9yd2FyZExpc3QgVGVzdEJhY2tGb3J3
YXJkTGlzdC5jcHApCi1BRERfV0syX1RFU1QoVGVzdENvbnRleHRNZW51IFRlc3RDb250ZXh0TWVu
dS5jcHApCi1BRERfV0syX1RFU1QoVGVzdENvb2tpZU1hbmFnZXIgVGVzdENvb2tpZU1hbmFnZXIu
Y3BwKQotQUREX1dLMl9URVNUKFRlc3RET01Ob2RlIFRlc3RET01Ob2RlLmNwcCkKLUFERF9XSzJf
VEVTVChUZXN0RG93bmxvYWRzIFRlc3REb3dubG9hZHMuY3BwKQotQUREX1dLMl9URVNUKFRlc3RG
cmFtZSBUZXN0RnJhbWUuY3BwKQotQUREX1dLMl9URVNUKFRlc3RJbnNwZWN0b3IgVGVzdEluc3Bl
Y3Rvci5jcHApCi1BRERfV0syX1RFU1QoVGVzdEluc3BlY3RvclNlcnZlciBUZXN0SW5zcGVjdG9y
U2VydmVyLmNwcCkKLUFERF9XSzJfVEVTVChUZXN0TG9hZGVyQ2xpZW50IFRlc3RMb2FkZXJDbGll
bnQuY3BwKQotQUREX1dLMl9URVNUKFRlc3RQcmludGluZyBUZXN0UHJpbnRpbmcuY3BwKQotQURE
X1dLMl9URVNUKFRlc3RTU0wgVGVzdFNTTC5jcHApCi1BRERfV0syX1RFU1QoVGVzdFdlYkV4dGVu
c2lvbnMgVGVzdFdlYkV4dGVuc2lvbnMuY3BwKQotQUREX1dLMl9URVNUKFRlc3RXZWJLaXRQb2xp
Y3lDbGllbnQgVGVzdFdlYktpdFBvbGljeUNsaWVudC5jcHApCi1BRERfV0syX1RFU1QoVGVzdFdl
YktpdFNldHRpbmdzIFRlc3RXZWJLaXRTZXR0aW5ncy5jcHApCi1BRERfV0syX1RFU1QoVGVzdFdl
YktpdFZlcnNpb24gVGVzdFdlYktpdFZlcnNpb24uY3BwKQotQUREX1dLMl9URVNUKFRlc3RXZWJL
aXRXZWJWaWV3R3JvdXAgVGVzdFdlYktpdFdlYlZpZXdHcm91cC5jcHApCi1BRERfV0syX1RFU1Qo
VGVzdFdlYktpdFdlYkNvbnRleHQgVGVzdFdlYktpdFdlYkNvbnRleHQuY3BwKQotQUREX1dLMl9U
RVNUKFRlc3RXZWJLaXRXZWJWaWV3IFRlc3RXZWJLaXRXZWJWaWV3LmNwcCkKLQotaWYgKEFUU1BJ
X0ZPVU5EKQotICAgIEFERF9XSzJfVEVTVChBY2Nlc3NpYmlsaXR5VGVzdFNlcnZlciBBY2Nlc3Np
YmlsaXR5VGVzdFNlcnZlci5jcHApCi0gICAgQUREX1dLMl9URVNUKFRlc3RXZWJLaXRBY2Nlc3Np
YmlsaXR5IFRlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5LmNwcCkKLWVuZGlmICgpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9ET01Ob2RlVGVzdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9ET01Ob2RlVGVzdC5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxNzU0Y2YuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvRE9NTm9kZVRlc3QuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMjE2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgSWdh
bGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiV2ViUHJvY2Vzc1Rlc3Qu
aCIKLSNpbmNsdWRlIDxnaW8vZ2lvLmg+Ci0jaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQtd2ViLWV4
dGVuc2lvbi5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KLQotY2xhc3MgV2Vi
S2l0RE9NTm9kZVRlc3QgOiBwdWJsaWMgV2ViUHJvY2Vzc1Rlc3QgewotcHVibGljOgotICAgIHN0
YXRpYyBQYXNzT3duUHRyPFdlYlByb2Nlc3NUZXN0PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0
cihuZXcgV2ViS2l0RE9NTm9kZVRlc3QoKSk7IH0KLQotcHJpdmF0ZToKLSAgICBndWludDY0IHdl
YlBhZ2VGcm9tQXJncyhHVmFyaWFudCogYXJncykKLSAgICB7Ci0gICAgICAgIEdWYXJpYW50SXRl
ciBpdGVyOwotICAgICAgICBnX3ZhcmlhbnRfaXRlcl9pbml0KCZpdGVyLCBhcmdzKTsKLQotICAg
ICAgICBjb25zdCBjaGFyKiBrZXk7Ci0gICAgICAgIEdWYXJpYW50KiB2YWx1ZTsKLSAgICAgICAg
d2hpbGUgKGdfdmFyaWFudF9pdGVyX2xvb3AoJml0ZXIsICJ7JnN2fSIsICZrZXksICZ2YWx1ZSkp
IHsKLSAgICAgICAgICAgIGlmICghc3RyY21wKGtleSwgInBhZ2VJRCIpICYmIGdfdmFyaWFudF9j
bGFzc2lmeSh2YWx1ZSkgPT0gR19WQVJJQU5UX0NMQVNTX1VJTlQ2NCkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZ192YXJpYW50X2dldF91aW50NjQodmFsdWUpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0g
ICAgYm9vbCB0ZXN0SGllcmFyY2h5TmF2aWdhdGlvbihXZWJLaXRXZWJFeHRlbnNpb24qIGV4dGVu
c2lvbiwgR1ZhcmlhbnQqIGFyZ3MpCi0gICAgewotICAgICAgICBXZWJLaXRXZWJQYWdlKiBwYWdl
ID0gd2Via2l0X3dlYl9leHRlbnNpb25fZ2V0X3BhZ2UoZXh0ZW5zaW9uLCB3ZWJQYWdlRnJvbUFy
Z3MoYXJncykpOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfV0VCX1BBR0UocGFnZSkpOwot
ICAgICAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3BhZ2VfZ2V0
X2RvbV9kb2N1bWVudChwYWdlKTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19ET0NV
TUVOVChkb2N1bWVudCkpOwotCi0gICAgICAgIFdlYktpdERPTUhUTUxIZWFkRWxlbWVudCogaGVh
ZCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2hlYWQoZG9jdW1lbnQpOwotICAgICAgICBnX2Fz
c2VydChXRUJLSVRfRE9NX0lTX0hUTUxfSEVBRF9FTEVNRU5UKGhlYWQpKTsKLQotICAgICAgICAv
LyBUaXRsZSwgaGVhZCdzIGNoaWxkLgotICAgICAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVf
aGFzX2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShoZWFkKSkpOwotICAgICAgICBHUmVmUHRy
PFdlYktpdERPTU5vZGVMaXN0PiBsaXN0ID0gYWRvcHRHUmVmKHdlYmtpdF9kb21fbm9kZV9nZXRf
Y2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGhlYWQpKSk7Ci0gICAgICAgIGdfYXNzZXJ0KFdF
QktJVF9ET01fSVNfTk9ERV9MSVNUKGxpc3QuZ2V0KCkpKTsKLSAgICAgICAgZ19hc3NlcnRfY21w
aW50KHdlYmtpdF9kb21fbm9kZV9saXN0X2dldF9sZW5ndGgobGlzdC5nZXQoKSksID09LCAxKTsK
LSAgICAgICAgV2ViS2l0RE9NTm9kZSogbm9kZSA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0o
bGlzdC5nZXQoKSwgMCk7Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9USVRM
RV9FTEVNRU5UKG5vZGUpKTsKLQotICAgICAgICAvLyBCb2R5LCBIZWFkIHNpYmxpbmcuCi0gICAg
ICAgIG5vZGUgPSB3ZWJraXRfZG9tX25vZGVfZ2V0X25leHRfc2libGluZyhXRUJLSVRfRE9NX05P
REUoaGVhZCkpOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfQk9EWV9FTEVN
RU5UKG5vZGUpKTsKLSAgICAgICAgV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50KiBib2R5ID0gV0VC
S0lUX0RPTV9IVE1MX0JPRFlfRUxFTUVOVChub2RlKTsKLQotICAgICAgICAvLyBUaGVyZSBpcyBu
byB0aGlyZCBzaWJsaW5nCi0gICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG9tX25vZGVfZ2V0X25l
eHRfc2libGluZyhub2RlKSk7Ci0KLSAgICAgICAgLy8gQm9keSdzIHByZXZpb3VzIHNpYmxpbmcg
aXMgSGVhZC4KLSAgICAgICAgbm9kZSA9IHdlYmtpdF9kb21fbm9kZV9nZXRfcHJldmlvdXNfc2li
bGluZyhXRUJLSVRfRE9NX05PREUoYm9keSkpOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9N
X0lTX0hUTUxfSEVBRF9FTEVNRU5UKG5vZGUpKTsKLQotICAgICAgICAvLyBCb2R5IGhhcyAzIGNo
aWxkcmVuLgotICAgICAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaGFzX2NoaWxkX25vZGVz
KFdFQktJVF9ET01fTk9ERShib2R5KSkpOwotICAgICAgICBsaXN0ID0gYWRvcHRHUmVmKHdlYmtp
dF9kb21fbm9kZV9nZXRfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKSk7Ci0gICAg
ICAgIHVuc2lnbmVkIGxvbmcgbGVuZ3RoID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0
aChsaXN0LmdldCgpKTsKLSAgICAgICAgZ19hc3NlcnRfY21waW50KGxlbmd0aCwgPT0sIDMpOwot
Ci0gICAgICAgIC8vIFRoZSB0aHJlZSBvZiB0aGVtIGFyZSBQIHRhZ3MuCi0gICAgICAgIGZvciAo
dW5zaWduZWQgbG9uZyBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBub2Rl
ID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0LmdldCgpLCBpKTsKLSAgICAgICAgICAg
IGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9QQVJBR1JBUEhfRUxFTUVOVChub2RlKSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLyBHbyBiYWNrd2FyZHMKLSAgICAgICAgdW5zaWduZWQgaTsK
LSAgICAgICAgZm9yIChpID0gMDsgbm9kZTsgbm9kZSA9IHdlYmtpdF9kb21fbm9kZV9nZXRfcHJl
dmlvdXNfc2libGluZyhub2RlKSwgaSsrKSB7IH0KLSAgICAgICAgZ19hc3NlcnRfY21waW50KGks
ID09LCAzKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBib29sIHRlc3RJ
bnNlcnRpb24oV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24sIEdWYXJpYW50KiBhcmdzKQot
ICAgIHsKLSAgICAgICAgV2ViS2l0V2ViUGFnZSogcGFnZSA9IHdlYmtpdF93ZWJfZXh0ZW5zaW9u
X2dldF9wYWdlKGV4dGVuc2lvbiwgd2ViUGFnZUZyb21BcmdzKGFyZ3MpKTsKLSAgICAgICAgZ19h
c3NlcnQoV0VCS0lUX0lTX1dFQl9QQUdFKHBhZ2UpKTsKLSAgICAgICAgV2ViS2l0RE9NRG9jdW1l
bnQqIGRvY3VtZW50ID0gd2Via2l0X3dlYl9wYWdlX2dldF9kb21fZG9jdW1lbnQocGFnZSk7Ci0g
ICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfRE9DVU1FTlQoZG9jdW1lbnQpKTsKLQotICAg
ICAgICBXZWJLaXRET01IVE1MRWxlbWVudCogYm9keSA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0
X2JvZHkoZG9jdW1lbnQpOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfRUxF
TUVOVChib2R5KSk7Ci0KLSAgICAgICAgLy8gQm9keSBzaG91bGRuJ3QgaGF2ZSBhbnkgY2hpbGRy
ZW4gYXQgdGhpcyBwb2ludC4KLSAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9kb21fbm9kZV9oYXNf
Y2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKSk7Ci0KLSAgICAgICAgLy8gSW5zZXJ0
IG9uZSBQIGVsZW1lbnQuCi0gICAgICAgIFdlYktpdERPTUVsZW1lbnQqIHAgPSB3ZWJraXRfZG9t
X2RvY3VtZW50X2NyZWF0ZV9lbGVtZW50KGRvY3VtZW50LCAiUCIsIDApOwotICAgICAgICBnX2Fz
c2VydChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChwKSk7Ci0gICAgICAgIHdlYmtpdF9kb21f
bm9kZV9hcHBlbmRfY2hpbGQoV0VCS0lUX0RPTV9OT0RFKGJvZHkpLCBXRUJLSVRfRE9NX05PREUo
cCksIDApOwotCi0gICAgICAgIC8vIE5vdyBpdCBzaG91bGQgaGF2ZSBvbmUsIHRoZSBzYW1lIHRo
YXQgd2UgaW5zZXJ0ZWQuCi0gICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9oYXNfY2hp
bGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKSk7Ci0gICAgICAgIEdSZWZQdHI8V2ViS2l0
RE9NTm9kZUxpc3Q+IGxpc3QgPSBhZG9wdEdSZWYod2Via2l0X2RvbV9ub2RlX2dldF9jaGlsZF9u
b2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpKTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RP
TV9JU19OT0RFX0xJU1QobGlzdC5nZXQoKSkpOwotICAgICAgICBnX2Fzc2VydF9jbXBpbnQod2Vi
a2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChsaXN0LmdldCgpKSwgPT0sIDEpOwotICAgICAg
ICBXZWJLaXRET01Ob2RlKiBub2RlID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0Lmdl
dCgpLCAwKTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0VMRU1FTlQobm9k
ZSkpOwotICAgICAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaXNfc2FtZV9ub2RlKFdFQktJ
VF9ET01fTk9ERShwKSwgbm9kZSkpOwotCi0gICAgICAgIC8vIFJlcGxhY2UgdGhlIFAgdGFnIHdp
dGggYSBESVYgdGFnLgotICAgICAgICBXZWJLaXRET01FbGVtZW50KiBkaXYgPSB3ZWJraXRfZG9t
X2RvY3VtZW50X2NyZWF0ZV9lbGVtZW50KGRvY3VtZW50LCAiRElWIiwgMCk7Ci0gICAgICAgIGdf
YXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKGRpdikpOwotICAgICAgICB3ZWJraXRf
ZG9tX25vZGVfcmVwbGFjZV9jaGlsZChXRUJLSVRfRE9NX05PREUoYm9keSksIFdFQktJVF9ET01f
Tk9ERShkaXYpLCBXRUJLSVRfRE9NX05PREUocCksIDApOwotICAgICAgICBnX2Fzc2VydCh3ZWJr
aXRfZG9tX25vZGVfaGFzX2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSkpOwotICAg
ICAgICBsaXN0ID0gYWRvcHRHUmVmKHdlYmtpdF9kb21fbm9kZV9nZXRfY2hpbGRfbm9kZXMoV0VC
S0lUX0RPTV9OT0RFKGJvZHkpKSk7Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfTk9E
RV9MSVNUKGxpc3QuZ2V0KCkpKTsKLSAgICAgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9kb21f
bm9kZV9saXN0X2dldF9sZW5ndGgobGlzdC5nZXQoKSksID09LCAxKTsKLSAgICAgICAgbm9kZSA9
IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdC5nZXQoKSwgMCk7Ci0gICAgICAgIGdfYXNz
ZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKG5vZGUpKTsKLSAgICAgICAgZ19hc3NlcnQo
d2Via2l0X2RvbV9ub2RlX2lzX3NhbWVfbm9kZShXRUJLSVRfRE9NX05PREUoZGl2KSwgbm9kZSkp
OwotCi0gICAgICAgIC8vIE5vdyByZW1vdmUgdGhlIHRhZy4KLSAgICAgICAgd2Via2l0X2RvbV9u
b2RlX3JlbW92ZV9jaGlsZChXRUJLSVRfRE9NX05PREUoYm9keSksIG5vZGUsIDApOwotICAgICAg
ICBsaXN0ID0gYWRvcHRHUmVmKHdlYmtpdF9kb21fbm9kZV9nZXRfY2hpbGRfbm9kZXMoV0VCS0lU
X0RPTV9OT0RFKGJvZHkpKSk7Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfTk9ERV9M
SVNUKGxpc3QuZ2V0KCkpKTsKLSAgICAgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9kb21fbm9k
ZV9saXN0X2dldF9sZW5ndGgobGlzdC5nZXQoKSksID09LCAwKTsKLQotICAgICAgICAvLyBUZXN0
IGluc2VydCBiZWZvcmUuIElmIHJlZkNoaWxkIGlzIG51bGwsIGluc2VydCBuZXdDaGlsZCBhcyBs
YXN0IGVsZW1lbnQgb2YgcGFyZW50LgotICAgICAgICBkaXYgPSB3ZWJraXRfZG9tX2RvY3VtZW50
X2NyZWF0ZV9lbGVtZW50KGRvY3VtZW50LCAiRElWIiwgMCk7Ci0gICAgICAgIGdfYXNzZXJ0KFdF
QktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKGRpdikpOwotICAgICAgICB3ZWJraXRfZG9tX25vZGVf
aW5zZXJ0X2JlZm9yZShXRUJLSVRfRE9NX05PREUoYm9keSksIFdFQktJVF9ET01fTk9ERShkaXYp
LCAwLCAwKTsKLSAgICAgICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2hhc19jaGlsZF9ub2Rl
cyhXRUJLSVRfRE9NX05PREUoYm9keSkpKTsKLSAgICAgICAgbGlzdCA9IGFkb3B0R1JlZih3ZWJr
aXRfZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSkpOwotICAg
ICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX05PREVfTElTVChsaXN0LmdldCgpKSk7Ci0gICAg
ICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3Qu
Z2V0KCkpLCA9PSwgMSk7Ci0gICAgICAgIG5vZGUgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVt
KGxpc3QuZ2V0KCksIDApOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfRUxF
TUVOVChub2RlKSk7Ci0gICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9pc19zYW1lX25v
ZGUoV0VCS0lUX0RPTV9OT0RFKGRpdiksIG5vZGUpKTsKLQotICAgICAgICAvLyBOb3cgaW5zZXJ0
IGEgJ3AnIGJlZm9yZSAnZGl2Jy4KLSAgICAgICAgcCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfY3Jl
YXRlX2VsZW1lbnQoZG9jdW1lbnQsICJQIiwgMCk7Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJVF9E
T01fSVNfSFRNTF9FTEVNRU5UKHApKTsKLSAgICAgICAgd2Via2l0X2RvbV9ub2RlX2luc2VydF9i
ZWZvcmUoV0VCS0lUX0RPTV9OT0RFKGJvZHkpLCBXRUJLSVRfRE9NX05PREUocCksIFdFQktJVF9E
T01fTk9ERShkaXYpLCAwKTsKLSAgICAgICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2hhc19j
aGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpKTsKLSAgICAgICAgbGlzdCA9IGFkb3B0
R1JlZih3ZWJraXRfZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5
KSkpOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX05PREVfTElTVChsaXN0LmdldCgp
KSk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVu
Z3RoKGxpc3QuZ2V0KCkpLCA9PSwgMik7Ci0gICAgICAgIG5vZGUgPSB3ZWJraXRfZG9tX25vZGVf
bGlzdF9pdGVtKGxpc3QuZ2V0KCksIDApOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lT
X0hUTUxfRUxFTUVOVChub2RlKSk7Ci0gICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9p
c19zYW1lX25vZGUoV0VCS0lUX0RPTV9OT0RFKHApLCBub2RlKSk7Ci0gICAgICAgIG5vZGUgPSB3
ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtKGxpc3QuZ2V0KCksIDEpOwotICAgICAgICBnX2Fzc2Vy
dChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChub2RlKSk7Ci0gICAgICAgIGdfYXNzZXJ0KHdl
YmtpdF9kb21fbm9kZV9pc19zYW1lX25vZGUoV0VCS0lUX0RPTV9OT0RFKGRpdiksIG5vZGUpKTsK
LQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBib29sIHRlc3RUYWdOYW1lcyhX
ZWJLaXRXZWJFeHRlbnNpb24qIGV4dGVuc2lvbiwgR1ZhcmlhbnQqIGFyZ3MpCi0gICAgewotICAg
ICAgICBzdGF0aWMgY29uc3QgY2hhciogZXhwZWN0ZWRUYWdOYW1lc1tdID0geyAiSFRNTCIsICJI
RUFEIiwgIkJPRFkiLCAiVklERU8iLCAiU09VUkNFIiwgIlZJREVPIiwgIlNPVVJDRSIsICJJTlBV
VCIgfTsKLQotICAgICAgICBXZWJLaXRXZWJQYWdlKiBwYWdlID0gd2Via2l0X3dlYl9leHRlbnNp
b25fZ2V0X3BhZ2UoZXh0ZW5zaW9uLCB3ZWJQYWdlRnJvbUFyZ3MoYXJncykpOwotICAgICAgICBn
X2Fzc2VydChXRUJLSVRfSVNfV0VCX1BBR0UocGFnZSkpOwotICAgICAgICBXZWJLaXRET01Eb2N1
bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3BhZ2VfZ2V0X2RvbV9kb2N1bWVudChwYWdlKTsK
LSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChkb2N1bWVudCkpOwotCi0g
ICAgICAgIFdlYktpdERPTU5vZGVMaXN0KiBsaXN0ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRf
ZWxlbWVudHNfYnlfdGFnX25hbWUoZG9jdW1lbnQsICIqIik7Ci0gICAgICAgIGd1bG9uZyBub2Rl
Q291bnQgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QpOwotICAgICAgICBn
X2Fzc2VydF9jbXB1aW50KG5vZGVDb3VudCwgPT0sIEdfTl9FTEVNRU5UUyhleHBlY3RlZFRhZ05h
bWVzKSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2RlQ291bnQ7IGkrKykg
ewotICAgICAgICAgICAgV2ViS2l0RE9NTm9kZSogbm9kZSA9IHdlYmtpdF9kb21fbm9kZV9saXN0
X2l0ZW0obGlzdCwgaSk7Ci0gICAgICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX05PREUo
bm9kZSkpOwotICAgICAgICAgICAgR093blB0cjxjaGFyPiB0YWdOYW1lKHdlYmtpdF9kb21fbm9k
ZV9nZXRfbm9kZV9uYW1lKG5vZGUpKTsKLSAgICAgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih0YWdO
YW1lLmdldCgpLCA9PSwgZXhwZWN0ZWRUYWdOYW1lc1tpXSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcnVuVGVzdChjb25zdCBj
aGFyKiB0ZXN0TmFtZSwgV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24sIEdWYXJpYW50KiBh
cmdzKQotICAgIHsKLSAgICAgICAgaWYgKCFzdHJjbXAodGVzdE5hbWUsICJoaWVyYXJjaHktbmF2
aWdhdGlvbiIpKQotICAgICAgICAgICAgcmV0dXJuIHRlc3RIaWVyYXJjaHlOYXZpZ2F0aW9uKGV4
dGVuc2lvbiwgYXJncyk7Ci0gICAgICAgIGlmICghc3RyY21wKHRlc3ROYW1lLCAiaW5zZXJ0aW9u
IikpCi0gICAgICAgICAgICByZXR1cm4gdGVzdEluc2VydGlvbihleHRlbnNpb24sIGFyZ3MpOwot
ICAgICAgICBpZiAoIXN0cmNtcCh0ZXN0TmFtZSwgInRhZy1uYW1lcyIpKQotICAgICAgICAgICAg
cmV0dXJuIHRlc3RUYWdOYW1lcyhleHRlbnNpb24sIGFyZ3MpOwotCi0gICAgICAgIGdfYXNzZXJ0
X25vdF9yZWFjaGVkKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19OwotCi1zdGF0
aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChjb25zdHJ1Y3RvcikpIHJlZ2lzdGVyVGVzdHMoKQotewot
ICAgIFJFR0lTVEVSX1RFU1QoV2ViS2l0RE9NTm9kZVRlc3QsICJXZWJLaXRET01Ob2RlL2hpZXJh
cmNoeS1uYXZpZ2F0aW9uIik7Ci0gICAgUkVHSVNURVJfVEVTVChXZWJLaXRET01Ob2RlVGVzdCwg
IldlYktpdERPTU5vZGUvaW5zZXJ0aW9uIik7Ci0gICAgUkVHSVNURVJfVEVTVChXZWJLaXRET01O
b2RlVGVzdCwgIldlYktpdERPTU5vZGUvdGFnLW5hbWVzIik7Ci19Ci0KLQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvRnJhbWVUZXN0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0ZyYW1lVGVzdC5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkNDg1MGYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvRnJhbWVUZXN0LmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDEwMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwu
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIldlYlByb2Nlc3NUZXN0LmgiCi0jaW5j
bHVkZSA8Z2lvL2dpby5oPgotI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0LXdlYi1leHRlbnNpb24u
aD4KLQotY2xhc3MgV2ViS2l0RnJhbWVUZXN0IDogcHVibGljIFdlYlByb2Nlc3NUZXN0IHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxXZWJQcm9jZXNzVGVzdD4gY3JlYXRlKCkgeyBy
ZXR1cm4gYWRvcHRQdHIobmV3IFdlYktpdEZyYW1lVGVzdCgpKTsgfQotCi1wcml2YXRlOgotICAg
IGd1aW50NjQgd2ViUGFnZUZyb21BcmdzKEdWYXJpYW50KiBhcmdzKQotICAgIHsKLSAgICAgICAg
R1ZhcmlhbnRJdGVyIGl0ZXI7Ci0gICAgICAgIGdfdmFyaWFudF9pdGVyX2luaXQoJml0ZXIsIGFy
Z3MpOwotCi0gICAgICAgIGNvbnN0IGNoYXIqIGtleTsKLSAgICAgICAgR1ZhcmlhbnQqIHZhbHVl
OwotICAgICAgICB3aGlsZSAoZ192YXJpYW50X2l0ZXJfbG9vcCgmaXRlciwgInsmc3Z9IiwgJmtl
eSwgJnZhbHVlKSkgewotICAgICAgICAgICAgaWYgKCFzdHJjbXAoa2V5LCAicGFnZUlEIikgJiYg
Z192YXJpYW50X2NsYXNzaWZ5KHZhbHVlKSA9PSBHX1ZBUklBTlRfQ0xBU1NfVUlOVDY0KQotICAg
ICAgICAgICAgICAgIHJldHVybiBnX3ZhcmlhbnRfZ2V0X3VpbnQ2NCh2YWx1ZSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAgICAgICByZXR1cm4gMDsK
LSAgICB9Ci0KLSAgICBib29sIHRlc3RNYWluRnJhbWUoV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRl
bnNpb24sIEdWYXJpYW50KiBhcmdzKQotICAgIHsKLSAgICAgICAgV2ViS2l0V2ViUGFnZSogcGFn
ZSA9IHdlYmtpdF93ZWJfZXh0ZW5zaW9uX2dldF9wYWdlKGV4dGVuc2lvbiwgd2ViUGFnZUZyb21B
cmdzKGFyZ3MpKTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX1dFQl9QQUdFKHBhZ2UpKTsK
LQotICAgICAgICBXZWJLaXRGcmFtZSogZnJhbWUgPSB3ZWJraXRfd2ViX3BhZ2VfZ2V0X21haW5f
ZnJhbWUocGFnZSk7Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19GUkFNRShmcmFtZSkpOwot
ICAgICAgICBnX2Fzc2VydCh3ZWJraXRfZnJhbWVfaXNfbWFpbl9mcmFtZShmcmFtZSkpOwotCi0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGJvb2wgdGVzdFVSSShXZWJLaXRXZWJF
eHRlbnNpb24qIGV4dGVuc2lvbiwgR1ZhcmlhbnQqIGFyZ3MpCi0gICAgewotICAgICAgICBXZWJL
aXRXZWJQYWdlKiBwYWdlID0gd2Via2l0X3dlYl9leHRlbnNpb25fZ2V0X3BhZ2UoZXh0ZW5zaW9u
LCB3ZWJQYWdlRnJvbUFyZ3MoYXJncykpOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfV0VC
X1BBR0UocGFnZSkpOwotCi0gICAgICAgIFdlYktpdEZyYW1lKiBmcmFtZSA9IHdlYmtpdF93ZWJf
cGFnZV9nZXRfbWFpbl9mcmFtZShwYWdlKTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX0ZS
QU1FKGZyYW1lKSk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3BhZ2VfZ2V0
X3VyaShwYWdlKSwgPT0sIHdlYmtpdF9mcmFtZV9nZXRfdXJpKGZyYW1lKSk7Ci0KLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgYm9vbCB0ZXN0SmF2YVNjcmlwdENvbnRleHQoV2Vi
S2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24sIEdWYXJpYW50KiBhcmdzKQotICAgIHsKLSAgICAg
ICAgV2ViS2l0V2ViUGFnZSogcGFnZSA9IHdlYmtpdF93ZWJfZXh0ZW5zaW9uX2dldF9wYWdlKGV4
dGVuc2lvbiwgd2ViUGFnZUZyb21BcmdzKGFyZ3MpKTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lU
X0lTX1dFQl9QQUdFKHBhZ2UpKTsKLQotICAgICAgICBXZWJLaXRGcmFtZSogZnJhbWUgPSB3ZWJr
aXRfd2ViX3BhZ2VfZ2V0X21haW5fZnJhbWUocGFnZSk7Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJ
VF9JU19GUkFNRShmcmFtZSkpOwotICAgICAgICBnX2Fzc2VydCh3ZWJraXRfZnJhbWVfZ2V0X2ph
dmFzY3JpcHRfZ2xvYmFsX2NvbnRleHQoZnJhbWUpKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcnVuVGVzdChjb25zdCBjaGFyKiB0ZXN0TmFtZSwg
V2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24sIEdWYXJpYW50KiBhcmdzKQotICAgIHsKLSAg
ICAgICAgaWYgKCFzdHJjbXAodGVzdE5hbWUsICJtYWluLWZyYW1lIikpCi0gICAgICAgICAgICBy
ZXR1cm4gdGVzdE1haW5GcmFtZShleHRlbnNpb24sIGFyZ3MpOwotICAgICAgICBpZiAoIXN0cmNt
cCh0ZXN0TmFtZSwgInVyaSIpKQotICAgICAgICAgICAgcmV0dXJuIHRlc3RVUkkoZXh0ZW5zaW9u
LCBhcmdzKTsKLSAgICAgICAgaWYgKCFzdHJjbXAodGVzdE5hbWUsICJqYXZhc2NyaXB0LWNvbnRl
eHQiKSkKLSAgICAgICAgICAgIHJldHVybiB0ZXN0SmF2YVNjcmlwdENvbnRleHQoZXh0ZW5zaW9u
LCBhcmdzKTsKLQotICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotfTsKLQotc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXygoY29uc3Ry
dWN0b3IpKSByZWdpc3RlclRlc3RzKCkKLXsKLSAgICBSRUdJU1RFUl9URVNUKFdlYktpdEZyYW1l
VGVzdCwgIldlYktpdEZyYW1lL21haW4tZnJhbWUiKTsKLSAgICBSRUdJU1RFUl9URVNUKFdlYktp
dEZyYW1lVGVzdCwgIldlYktpdEZyYW1lL3VyaSIpOwotICAgIFJFR0lTVEVSX1RFU1QoV2ViS2l0
RnJhbWVUZXN0LCAiV2ViS2l0RnJhbWUvamF2YXNjcmlwdC1jb250ZXh0Iik7Ci19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5h
bSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFt
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNWVjN2QxLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtCisrKyAv
ZGV2L251bGwKQEAgLTEsMzI2ICswLDAgQEAKLWlmIEVOQUJMRV9XRUJLSVQyCi0KLVRFU1RfUFJP
R1MgKz0gXAotCVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVzdHMvSW5zcGVjdG9yVGVzdFNl
cnZlciBcCi0JUHJvZ3JhbXMvV2ViS2l0MkdPYmplY3RBUElUZXN0cy9UZXN0QXV0aGVudGljYXRp
b24gXAotCVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdEJhY2tGb3J3YXJkTGlz
dCBcCi0JUHJvZ3JhbXMvV2ViS2l0MkdPYmplY3RBUElUZXN0cy9UZXN0Q29udGV4dE1lbnUgXAot
CVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdENvb2tpZU1hbmFnZXIgXAotCVBy
b2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdERPTU5vZGUgXAotCVByb2dyYW1zL1dl
YktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdERvd25sb2FkcyBcCi0JUHJvZ3JhbXMvV2ViS2l0MkdP
YmplY3RBUElUZXN0cy9UZXN0RnJhbWUgXAotCVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVz
dHMvVGVzdEluc3BlY3RvciBcCi0JUHJvZ3JhbXMvV2ViS2l0MkdPYmplY3RBUElUZXN0cy9UZXN0
SW5zcGVjdG9yU2VydmVyIFwKLQlQcm9ncmFtcy9XZWJLaXQyR09iamVjdEFQSVRlc3RzL1Rlc3RM
b2FkZXJDbGllbnQgXAotCVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdFByaW50
aW5nIFwKLQlQcm9ncmFtcy9XZWJLaXQyR09iamVjdEFQSVRlc3RzL1Rlc3RSZXNvdXJjZXMgXAot
CVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdFNTTCBcCi0JUHJvZ3JhbXMvV2Vi
S2l0MkdPYmplY3RBUElUZXN0cy9UZXN0VUlDbGllbnQgXAotCVByb2dyYW1zL1dlYktpdDJHT2Jq
ZWN0QVBJVGVzdHMvVGVzdFdlYkV4dGVuc2lvbnMgXAotCVByb2dyYW1zL1dlYktpdDJHT2JqZWN0
QVBJVGVzdHMvVGVzdFdlYktpdFZlcnNpb24gXAotCVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJ
VGVzdHMvVGVzdFdlYktpdEZhdmljb25EYXRhYmFzZSBcCi0JUHJvZ3JhbXMvV2ViS2l0MkdPYmpl
Y3RBUElUZXN0cy9UZXN0V2ViS2l0RmluZENvbnRyb2xsZXIgXAotCVByb2dyYW1zL1dlYktpdDJH
T2JqZWN0QVBJVGVzdHMvVGVzdFdlYktpdFBvbGljeUNsaWVudCBcCi0JUHJvZ3JhbXMvV2ViS2l0
MkdPYmplY3RBUElUZXN0cy9UZXN0V2ViS2l0U2V0dGluZ3MgXAotCVByb2dyYW1zL1dlYktpdDJH
T2JqZWN0QVBJVGVzdHMvVGVzdFdlYktpdFdlYkNvbnRleHQgXAotCVByb2dyYW1zL1dlYktpdDJH
T2JqZWN0QVBJVGVzdHMvVGVzdFdlYktpdFdlYlZpZXcgXAotCVByb2dyYW1zL1dlYktpdDJHT2Jq
ZWN0QVBJVGVzdHMvVGVzdFdlYktpdFdlYlZpZXdHcm91cCBcCi0JUHJvZ3JhbXMvV2ViS2l0MkdP
YmplY3RBUElUZXN0cy9UZXN0V2ViVmlld0VkaXRvcgotCi1ub2luc3RfUFJPR1JBTVMgKz0gJChU
RVNUX1BST0dTKQotCi1pZiBIQVZFX0FUU1BJMgotVEVTVF9QUk9HUyArPSBQcm9ncmFtcy9XZWJL
aXQyR09iamVjdEFQSVRlc3RzL1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5Ci0KLW5vaW5zdF9QUk9H
UkFNUyArPSBQcm9ncmFtcy9XZWJLaXQyR09iamVjdEFQSVRlc3RzL0FjY2Vzc2liaWxpdHlUZXN0
U2VydmVyCi1lbmRpZgotCi13ZWJraXQyX3Rlc3RzX2NwcGZsYWdzID0gXAotCS1EV0VCS0lUX0VY
RUNfUEFUSD1cIiR7c2hlbGwgcHdkfS8kKHRvcF9idWlsZGRpcikvUHJvZ3JhbXNcIiBcCi0JLURX
RUJLSVRfU1JDX0RJUj1cIiR7c2hlbGwgcHdkfS8ke3NyY2Rpcn1cIiBcCi0JLURXRUJLSVRfREVS
SVZFRF9TUkNfRElSPVwiJHtzaGVsbCBwd2R9LyR7dG9wX2J1aWxkZGlyfS9EZXJpdmVkU291cmNl
c1wiIFwKLQktRFdFQktJVF9URVNUX1BMVUdJTl9ESVI9XCIke3NoZWxsIHB3ZH0vJHt0b3BfYnVp
bGRkaXJ9L1Rlc3ROZXRzY2FwZVBsdWdpbi8ubGlic1wiIFwKLQktRFdFQktJVF9URVNUX1dFQl9F
WFRFTlNJT05TX0RJUj1cIiR7c2hlbGwgcHdkfS8ke3RvcF9idWlsZGRpcn0vTGlicmFyaWVzL1dl
YkV4dGVuc2lvbnMvLmxpYnNcIiBcCi0JLURXRUJLSVRfSU5KRUNURURfQlVORExFX1BBVEg9XCIk
e3NoZWxsIHB3ZH0vJCh0b3BfYnVpbGRkaXIpLy5saWJzXCIgXAotCSQoamF2YXNjcmlwdGNvcmVf
Y3BwZmxhZ3MpIFwKLQktSSQoc3JjZGlyKS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUgXAotCS1JJChz
cmNkaXIpL1NvdXJjZSBcCi0JLUkkKHNyY2RpcikvU291cmNlL1dlYktpdDIgXAotCS1JJCh0b3Bf
YnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvaW5jbHVkZSBcCi0JLUkkKHRvcF9idWls
ZGRpcikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi93ZWJraXQyZ3RrIFwKLQktSSQodG9wX2J1aWxk
ZGlyKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL3dlYmtpdDJndGsvaW5jbHVkZSBcCi0JLUkkKHNy
Y2RpcikvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsgXAotCSQoZ2xvYmFsX2NwcGZs
YWdzKSBcCi0JJChGUkVFVFlQRV9DRkxBR1MpIFwKLQkkKEdMSUJfQ0ZMQUdTKSBcCi0JJChHVEtf
Q0ZMQUdTKSBcCi0JJChMSUJTT1VQX0NGTEFHUykKLQotd2Via2l0Ml90ZXN0c19sZGFkZCA9IFwK
LQlMaWJyYXJpZXMvbGliV2ViS2l0MkFQSVRlc3RDb3JlLmxhIFwKLQlsaWJqYXZhc2NyaXB0Y29y
ZWd0ay1AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQC5AV0VCS0lUR1RLX0FQSV9NSU5PUl9W
RVJTSU9OQC5sYSBcCi0JbGlid2Via2l0Mmd0ay1AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9O
QC5AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQC5sYSBcCi0JJChGUkVFVFlQRV9MSUJTKSBc
Ci0JJChHRU9DTFVFX0xJQlMpIFwKLQkkKEdMSUJfTElCUykgXAotCSQoR1RLX0xJQlMpIFwKLQkk
KExJQlNPVVBfTElCUykKLQotd2Via2l0Ml90ZXN0c19sZGZsYWdzID0gXAotCS1uby1pbnN0YWxs
Ci0KLVByb2dyYW1zL3Jlc291cmNlcy93ZWJraXQyZ3RrLXRlc3RzLXJlc291cmNlcy5ncmVzb3Vy
Y2U6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL3Jlc291cmNlcy93ZWJr
aXQyZ3RrLXRlc3RzLmdyZXNvdXJjZS54bWwgJChzaGVsbCAkKEdMSUJfQ09NUElMRV9SRVNPVVJD
RVMpIC0tc291cmNlZGlyPSQoc3JjZGlyKSAtLWdlbmVyYXRlLWRlcGVuZGVuY2llcyAkKHNyY2Rp
cikvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvcmVzb3VyY2VzL3dlYmtp
dDJndGstdGVzdHMuZ3Jlc291cmNlLnhtbCkKLQkkKEFNX1ZfYXQpbWtkaXIgLXAgJHtHRU5QUk9H
UkFNU30vcmVzb3VyY2VzCi0JJChBTV9WX0dFTikgJChHTElCX0NPTVBJTEVfUkVTT1VSQ0VTKSAt
LXRhcmdldD0kQCAtLXNvdXJjZWRpcj0kKHNyY2RpcikgJDwKLQotUHJvZ3JhbXMvcmVzb3VyY2Vz
L2luc3BlY3Rvci9pbnNwZWN0b3JQYWdlSW5kZXguaHRtbDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0luc3BlY3RvclNlcnZlci9mcm9udC1lbmQvaW5zcGVjdG9yUGFnZUluZGV4Lmh0bWwKLQkk
KEFNX1ZfYXQpbWtkaXIgLXAgJHtHRU5QUk9HUkFNU30vcmVzb3VyY2VzL2luc3BlY3RvcgotCSQo
QU1fVl9HRU4pY3AgJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JT
ZXJ2ZXIvZnJvbnQtZW5kL2luc3BlY3RvclBhZ2VJbmRleC5odG1sICR7R0VOUFJPR1JBTVN9L3Jl
c291cmNlcy9pbnNwZWN0b3IKLQotRElTVENMRUFORklMRVMgKz0gXAotCVByb2dyYW1zL3Jlc291
cmNlcy93ZWJraXQyZ3RrLXRlc3RzLXJlc291cmNlcy5ncmVzb3VyY2UgXAotCVByb2dyYW1zL3Jl
c291cmNlcy9pbnNwZWN0b3IvaW5zcGVjdG9yUGFnZUluZGV4Lmh0bWwKLQotbm9pbnN0X0RBVEEg
Kz0gXAotCVByb2dyYW1zL3Jlc291cmNlcy93ZWJraXQyZ3RrLXRlc3RzLXJlc291cmNlcy5ncmVz
b3VyY2UgXAotCVByb2dyYW1zL3Jlc291cmNlcy9pbnNwZWN0b3IvaW5zcGVjdG9yUGFnZUluZGV4
Lmh0bWwKLQotbm9pbnN0X0xUTElCUkFSSUVTICs9IExpYnJhcmllcy9saWJXZWJLaXQyQVBJVGVz
dENvcmUubGEKLUxpYnJhcmllc19saWJXZWJLaXQyQVBJVGVzdENvcmVfbGFfU09VUkNFUyA9IFwK
LQlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9Mb2FkVHJhY2tpbmdUZXN0
LmNwcCBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvTG9hZFRyYWNr
aW5nVGVzdC5oIFwKLQlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJL
aXRUZXN0QnVzLmNwcCBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
V2ViS2l0VGVzdEJ1cy5oIFwKLQlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0
cy9XZWJLaXRUZXN0U2VydmVyLmNwcCBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvV2ViS2l0VGVzdFNlcnZlci5oIFwKLQlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9XZWJQcm9jZXNzVGVzdFJ1bm5lci5jcHAgXAotCVNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlByb2Nlc3NUZXN0UnVubmVyLmggXAotCVNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RNYWluLmNwcCBcCi0JU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdE1haW4uaCBcCi0JU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwIFwKLQlTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5oCi1MaWJyYXJpZXNf
bGliV2ViS2l0MkFQSVRlc3RDb3JlX2xhX0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZs
YWdzKQotCi1ub2luc3RfTFRMSUJSQVJJRVMgKz0gTGlicmFyaWVzL1dlYkV4dGVuc2lvbnMvbGli
V2ViRXh0ZW5zaW9uVGVzdC5sYQotTGlicmFyaWVzX1dlYkV4dGVuc2lvbnNfbGliV2ViRXh0ZW5z
aW9uVGVzdF9sYV9TT1VSQ0VTID0gXAotCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL1dlYkV4dGVuc2lvblRlc3QuY3BwCi0KLUxpYnJhcmllc19XZWJFeHRlbnNpb25zX2xp
YldlYkV4dGVuc2lvblRlc3RfbGFfTERGTEFHUyA9IFwKLQktcnBhdGggJHtzaGVsbCBwd2R9LyQo
dG9wX2J1aWxkZGlyKS9MaWJyYXJpZXMvV2ViRXh0ZW5zaW9ucy8ubGlicyBcCi0JJChub191bmRl
ZmluZWQpIFwKLQktYXZvaWQtdmVyc2lvbiBcCi0JLW1vZHVsZQotCi1MaWJyYXJpZXNfV2ViRXh0
ZW5zaW9uc19saWJXZWJFeHRlbnNpb25UZXN0X2xhX0NQUEZMQUdTID0gXAotCS1JJChzcmNkaXIp
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ayBcCi0JLUkk
KHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJjZXMgXAotCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2
ZWRTb3VyY2VzL1dlYktpdDIvd2Via2l0MmV4dGVuc2lvbi9pbmNsdWRlIFwKLQktRFdFQktJVDJf
Q09NUElMQVRJT04gXAotCSQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKLQotTGlicmFyaWVzX1dl
YkV4dGVuc2lvbnNfbGliV2ViRXh0ZW5zaW9uVGVzdF9sYV9DWFhGTEFHUyA9IFwKLSAgICAgICAg
JChnbG9iYWxfY3h4ZmxhZ3MpCi0KLUxpYnJhcmllc19XZWJFeHRlbnNpb25zX2xpYldlYkV4dGVu
c2lvblRlc3RfbGFfQ0ZMQUdTID0gXAotICAgICAgICAkKGdsb2JhbF9jZmxhZ3MpCi0KLQotbm9p
bnN0X0xUTElCUkFSSUVTICs9IExpYnJhcmllcy9XZWJFeHRlbnNpb25zL2xpYldlYlByb2Nlc3NU
ZXN0LmxhCi1MaWJyYXJpZXNfV2ViRXh0ZW5zaW9uc19saWJXZWJQcm9jZXNzVGVzdF9sYV9TT1VS
Q0VTID0gXAotCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0RPTU5vZGVU
ZXN0LmNwcCBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvRnJhbWVU
ZXN0LmNwcCBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViUHJv
Y2Vzc1Rlc3QuY3BwIFwKLQlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9X
ZWJQcm9jZXNzVGVzdC5oCi0KLUxpYnJhcmllc19XZWJFeHRlbnNpb25zX2xpYldlYlByb2Nlc3NU
ZXN0X2xhX0xERkxBR1MgPSBcCi0JLXJwYXRoICR7c2hlbGwgcHdkfS8kKHRvcF9idWlsZGRpcikv
TGlicmFyaWVzL1dlYkV4dGVuc2lvbnMvLmxpYnMgXAotCSQobm9fdW5kZWZpbmVkKSBcCi0JLWF2
b2lkLXZlcnNpb24gXAotCS1tb2R1bGUKLQotTGlicmFyaWVzX1dlYkV4dGVuc2lvbnNfbGliV2Vi
UHJvY2Vzc1Rlc3RfbGFfQ1BQRkxBR1MgPSBcCi0JLUkkKHNyY2RpcikvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrIFwKLQktSSQodG9wX2J1aWxkZGlyKS9E
ZXJpdmVkU291cmNlcyBcCi0JLUkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0
Mi93ZWJraXQyZXh0ZW5zaW9uL2luY2x1ZGUgXAotCS1EV0VCS0lUMl9DT01QSUxBVElPTiBcCi0J
JCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKQotCi1MaWJyYXJpZXNfV2ViRXh0ZW5zaW9uc19saWJX
ZWJQcm9jZXNzVGVzdF9sYV9DWFhGTEFHUyA9IFwKLQkkKGdsb2JhbF9jeHhmbGFncykKLQotTGli
cmFyaWVzX1dlYkV4dGVuc2lvbnNfbGliV2ViUHJvY2Vzc1Rlc3RfbGFfQ0ZMQUdTID0gXAotCSQo
Z2xvYmFsX2NmbGFncykKLQotCi1FWFRSQV9ESVNUICs9IFwKLQlTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9yZXNvdXJjZXMvdGVzdC1jZXJ0LnBlbSBcCi0JU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3Qta2V5LnBlbSBcCi0J
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvcmVzb3VyY2VzL3dlYmtpdDJn
dGstdGVzdHMuZ3Jlc291cmNlLnhtbCBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvcmVzb3VyY2VzL2xpbmstdGl0bGUuanMKLQotUHJvZ3JhbXNfV2ViS2l0MkdPYmpl
Y3RBUElUZXN0c19UZXN0V2ViS2l0V2ViQ29udGV4dF9TT1VSQ0VTID0gXAotCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJDb250ZXh0LmNwcAotUHJv
Z3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2ViS2l0V2ViQ29udGV4dF9DUFBGTEFH
UyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJ
VGVzdHNfVGVzdFdlYktpdFdlYkNvbnRleHRfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQp
Ci1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJLaXRXZWJDb250ZXh0X0xE
RkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MkdPYmpl
Y3RBUElUZXN0c19UZXN0V2ViS2l0V2ViVmlld19TT1VSQ0VTID0gXAotCVNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcAotUHJvZ3JhbXNf
V2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2ViS2l0V2ViVmlld19DUFBGTEFHUyA9ICQod2Vi
a2l0Ml90ZXN0c19jcHBmbGFncykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVz
dFdlYktpdFdlYlZpZXdfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19X
ZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJLaXRXZWJWaWV3X0xERkxBR1MgPSAkKHdlYmtp
dDJfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0
TG9hZGVyQ2xpZW50X1NPVVJDRVMgPSBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvVGVzdExvYWRlckNsaWVudC5jcHAKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJ
VGVzdHNfVGVzdExvYWRlckNsaWVudF9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFn
cykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdExvYWRlckNsaWVudF9MREFE
RCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVz
dHNfVGVzdExvYWRlckNsaWVudF9MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCi0K
LVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktpdFNldHRpbmdzX1NPVVJD
RVMgPSBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktp
dFNldHRpbmdzLmNwcAotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2ViS2l0
U2V0dGluZ3NfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MpCi1Qcm9ncmFtc19X
ZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJLaXRTZXR0aW5nc19MREFERCA9ICQod2Via2l0
Ml90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktp
dFNldHRpbmdzX0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNf
V2ViS2l0MkdPYmplY3RBUElUZXN0c19JbnNwZWN0b3JUZXN0U2VydmVyX1NPVVJDRVMgPSBcCi0J
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvSW5zcGVjdG9yVGVzdFNlcnZl
ci5jcHAKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfSW5zcGVjdG9yVGVzdFNlcnZl
cl9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKLVByb2dyYW1zX1dlYktpdDJH
T2JqZWN0QVBJVGVzdHNfSW5zcGVjdG9yVGVzdFNlcnZlcl9MREFERCA9ICQod2Via2l0Ml90ZXN0
c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfSW5zcGVjdG9yVGVzdFNl
cnZlcl9MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktp
dDJHT2JqZWN0QVBJVGVzdHNfVGVzdEJhY2tGb3J3YXJkTGlzdF9TT1VSQ0VTID0gXAotICAgICAg
ICBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0QmFja0ZvcndhcmRM
aXN0LmNwcAotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0QmFja0ZvcndhcmRM
aXN0X0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0
MkdPYmplY3RBUElUZXN0c19UZXN0QmFja0ZvcndhcmRMaXN0X0xEQUREID0gJCh3ZWJraXQyX3Rl
c3RzX2xkYWRkKQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0QmFja0Zvcndh
cmRMaXN0X0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2Vi
S2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2ViS2l0UG9saWN5Q2xpZW50X1NPVVJDRVMgPSBcCi0g
ICAgICAgIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRQ
b2xpY3lDbGllbnQuY3BwCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJL
aXRQb2xpY3lDbGllbnRfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MpCi1Qcm9n
cmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJLaXRQb2xpY3lDbGllbnRfTERBREQg
PSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3Rz
X1Rlc3RXZWJLaXRQb2xpY3lDbGllbnRfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdz
KQotCi1pZiBIQVZFX0FUU1BJMgotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19BY2Nl
c3NpYmlsaXR5VGVzdFNlcnZlcl9TT1VSQ0VTID0gXAotCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyLmNwcAotUHJvZ3JhbXNfV2Vi
S2l0MkdPYmplY3RBUElUZXN0c19BY2Nlc3NpYmlsaXR5VGVzdFNlcnZlcl9DUFBGTEFHUyA9ICQo
d2Via2l0Ml90ZXN0c19jcHBmbGFncykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNf
QWNjZXNzaWJpbGl0eVRlc3RTZXJ2ZXJfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCi1Q
cm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyX0xE
RkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MkdPYmpl
Y3RBUElUZXN0c19UZXN0V2ViS2l0QWNjZXNzaWJpbGl0eV9TT1VSQ0VTID0gXAotCVNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5LmNw
cAotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2ViS2l0QWNjZXNzaWJpbGl0
eV9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykgJChBVFNQSTJfQ0ZMQUdTKQot
UHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2ViS2l0QWNjZXNzaWJpbGl0eV9M
REFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkgJChBVFNQSTJfTElCUykKLVByb2dyYW1zX1dl
YktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktpdEFjY2Vzc2liaWxpdHlfTERGTEFHUyA9ICQo
d2Via2l0Ml90ZXN0c19sZGZsYWdzKQotZW5kaWYKLQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RB
UElUZXN0c19UZXN0RG93bmxvYWRzX1NPVVJDRVMgPSBcCi0gICAgICAgIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3REb3dubG9hZHMuY3BwCi1Qcm9ncmFtc19XZWJL
aXQyR09iamVjdEFQSVRlc3RzX1Rlc3REb3dubG9hZHNfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVz
dHNfY3BwZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3REb3dubG9h
ZHNfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVj
dEFQSVRlc3RzX1Rlc3REb3dubG9hZHNfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdz
KQotCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJWaWV3RWRpdG9yX1NP
VVJDRVMgPSBcCi0gICAgICAgIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L1Rlc3RXZWJWaWV3RWRpdG9yLmNwcAotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19U
ZXN0V2ViVmlld0VkaXRvcl9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKLVBy
b2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYlZpZXdFZGl0b3JfTERBREQgPSAk
KHdlYmtpdDJfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rl
c3RXZWJWaWV3RWRpdG9yX0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKLQotUHJv
Z3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0UHJpbnRpbmdfU09VUkNFUyA9IFwKLSAg
ICAgICAgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFByaW50aW5n
LmNwcAotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0UHJpbnRpbmdfQ1BQRkxB
R1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MpICQoR1RLX1VOSVhfUFJJTlRJTkdfQ0ZMQUdT
KQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0UHJpbnRpbmdfTERBREQgPSAk
KHdlYmtpdDJfdGVzdHNfbGRhZGQpICQoR1RLX1VOSVhfUFJJTlRJTkdfTElCUykKLVByb2dyYW1z
X1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFByaW50aW5nX0xERkxBR1MgPSAkKHdlYmtpdDJf
dGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2Vi
S2l0RmF2aWNvbkRhdGFiYXNlX1NPVVJDRVMgPSBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdEZhdmljb25EYXRhYmFzZS5jcHAKLVByb2dyYW1zX1dl
YktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktpdEZhdmljb25EYXRhYmFzZV9DUFBGTEFHUyA9
ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVz
dHNfVGVzdFdlYktpdEZhdmljb25EYXRhYmFzZV9MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFk
ZCkKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktpdEZhdmljb25EYXRh
YmFzZV9MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktp
dDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktpdEZpbmRDb250cm9sbGVyX1NPVVJDRVMgPSBcCi0J
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdEZpbmRDb250
cm9sbGVyLmNwcAotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2ViS2l0Rmlu
ZENvbnRyb2xsZXJfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MpCi1Qcm9ncmFt
c19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxlcl9MREFERCA9
ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNf
VGVzdFdlYktpdEZpbmRDb250cm9sbGVyX0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFn
cykKLQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0UmVzb3VyY2VzX1NPVVJD
RVMgPSBcCi0gICAgICAgIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rl
c3RSZXNvdXJjZXMuY3BwCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RSZXNv
dXJjZXNfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MpCi1Qcm9ncmFtc19XZWJL
aXQyR09iamVjdEFQSVRlc3RzX1Rlc3RSZXNvdXJjZXNfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNf
bGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RSZXNvdXJjZXNfTERG
TEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQyR09iamVj
dEFQSVRlc3RzX1Rlc3RDb29raWVNYW5hZ2VyX1NPVVJDRVMgPSBcCi0gICAgICAgIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RDb29raWVNYW5hZ2VyLmNwcAotUHJv
Z3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0Q29va2llTWFuYWdlcl9DUFBGTEFHUyA9
ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVz
dHNfVGVzdENvb2tpZU1hbmFnZXJfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCi1Qcm9n
cmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RDb29raWVNYW5hZ2VyX0xERkxBR1MgPSAk
KHdlYmtpdDJfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0
c19UZXN0SW5zcGVjdG9yX1NPVVJDRVMgPSBcCi0gICAgICAgIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RJbnNwZWN0b3IuY3BwCi1Qcm9ncmFtc19XZWJLaXQyR09i
amVjdEFQSVRlc3RzX1Rlc3RJbnNwZWN0b3JfQ1BQRkxBR1MgPSBcCi0JJCh3ZWJraXQyX3Rlc3Rz
X2NwcGZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0SW5zcGVjdG9y
X0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RB
UElUZXN0c19UZXN0SW5zcGVjdG9yX0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykK
LQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0SW5zcGVjdG9yU2VydmVyX1NP
VVJDRVMgPSBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdElu
c3BlY3RvclNlcnZlci5jcHAKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdElu
c3BlY3RvclNlcnZlcl9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKLVByb2dy
YW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdEluc3BlY3RvclNlcnZlcl9MREFERCA9ICQo
d2Via2l0Ml90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVz
dEluc3BlY3RvclNlcnZlcl9MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCi0KLVBy
b2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktpdFZlcnNpb25fU09VUkNFUyA9
IFwKLSAgICAgICAgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdl
YktpdFZlcnNpb24uY3BwCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJL
aXRWZXJzaW9uX0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKQotUHJvZ3JhbXNf
V2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2ViS2l0VmVyc2lvbl9MREFERCA9ICQod2Via2l0
Ml90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktp
dFZlcnNpb25fTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19X
ZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RDb250ZXh0TWVudV9TT1VSQ0VTID0gXAotICAgICAg
ICBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0Q29udGV4dE1lbnUu
Y3BwCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RDb250ZXh0TWVudV9DUFBG
TEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0
QVBJVGVzdHNfVGVzdENvbnRleHRNZW51X0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQot
UHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0Q29udGV4dE1lbnVfTERGTEFHUyA9
ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRl
c3RzX1Rlc3RTU0xfU09VUkNFUyA9IFwKLSAgICAgICAgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvVGVzdFNTTC5jcHAKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVz
dHNfVGVzdFNTTF9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKLVByb2dyYW1z
X1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFNTTF9MREFERCA9ICQod2Via2l0Ml90ZXN0c19s
ZGFkZCkKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFNTTF9MREZMQUdTID0g
JCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVz
dHNfVGVzdFdlYkV4dGVuc2lvbnNfU09VUkNFUyA9IFwKLSAgICAgICAgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYkV4dGVuc2lvbnMuY3BwCi1Qcm9ncmFtc19X
ZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJFeHRlbnNpb25zX0NQUEZMQUdTID0gJCh3ZWJr
aXQyX3Rlc3RzX2NwcGZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0
V2ViRXh0ZW5zaW9uc19MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dl
YktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYkV4dGVuc2lvbnNfTERGTEFHUyA9ICQod2Via2l0
Ml90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RX
ZWJLaXRXZWJWaWV3R3JvdXBfU09VUkNFUyA9IFwKLSAgICAgICAgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXdHcm91cC5jcHAKLVByb2dyYW1z
X1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktpdFdlYlZpZXdHcm91cF9DUFBGTEFHUyA9
ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVz
dHNfVGVzdFdlYktpdFdlYlZpZXdHcm91cF9MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkK
LVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktpdFdlYlZpZXdHcm91cF9M
REZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDJHT2Jq
ZWN0QVBJVGVzdHNfVGVzdERPTU5vZGVfU09VUkNFUyA9IFwKLSAgICAgICAgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdERPTU5vZGUuY3BwCi1Qcm9ncmFtc19XZWJL
aXQyR09iamVjdEFQSVRlc3RzX1Rlc3RET01Ob2RlX0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3Rz
X2NwcGZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0RE9NTm9kZV9M
REFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJ
VGVzdHNfVGVzdERPTU5vZGVfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQotCi1Q
cm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RGcmFtZV9TT1VSQ0VTID0gXAotICAg
ICAgICBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0RnJhbWUuY3Bw
Ci1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RGcmFtZV9DUFBGTEFHUyA9ICQo
d2Via2l0Ml90ZXN0c19jcHBmbGFncykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNf
VGVzdEZyYW1lX0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfV2ViS2l0
MkdPYmplY3RBUElUZXN0c19UZXN0RnJhbWVfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZs
YWdzKQotCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RBdXRoZW50aWNhdGlv
bl9TT1VSQ0VTID0gXAotICAgICAgICBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9UZXN0QXV0aGVudGljYXRpb24uY3BwCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRl
c3RzX1Rlc3RBdXRoZW50aWNhdGlvbl9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFn
cykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdEF1dGhlbnRpY2F0aW9uX0xE
QUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElU
ZXN0c19UZXN0QXV0aGVudGljYXRpb25fTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdz
KQotCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RVSUNsaWVudF9TT1VSQ0VT
ID0gXAotICAgICAgICBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0
VUlDbGllbnQuY3BwCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RVSUNsaWVu
dF9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKLVByb2dyYW1zX1dlYktpdDJH
T2JqZWN0QVBJVGVzdHNfVGVzdFVJQ2xpZW50X0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRk
KQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0VUlDbGllbnRfTERGTEFHUyA9
ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQotCi1lbmRpZiAjIEVOQUJMRV9XRUJLSVQyCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9JbnNwZWN0b3JU
ZXN0U2VydmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0lu
c3BlY3RvclRlc3RTZXJ2ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTNi
MDQzLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L0luc3BlY3RvclRlc3RTZXJ2ZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzIEx0ZC4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECi0g
KiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUgotICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0j
aW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgotCi1zdGF0
aWMgdm9pZCBsb2FkQ2hhbmdlZENhbGxiYWNrKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRMb2FkRXZl
bnQgbG9hZEV2ZW50LCBncG9pbnRlcikKLXsKLSAgICAvLyBTZW5kIGEgbWVzc2FnZSB0byB0aGUg
cGFyZW50IHByb2Nlc3Mgd2hlbiB3ZSdyZSByZWFkeS4KLSAgICBpZiAobG9hZEV2ZW50ID09IFdF
QktJVF9MT0FEX0ZJTklTSEVEKQotICAgICAgICBnX3ByaW50KCJPSyIpOwotfQotCi1pbnQgbWFp
bihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCi17Ci0gICAgZ3RrX2luaXQoJmFyZ2MsICZhcmd2KTsK
LQotICAgIC8vIE92ZXJ3cml0ZSBXRUJLSVRfSU5TUEVDVE9SX1NFUlZFUiB2YXJpYWJsZSB3aXRo
IGRlZmF1bHQgdmFsdWUuCi0gICAgZ19zZXRlbnYoIldFQktJVF9JTlNQRUNUT1JfU0VSVkVSIiwg
IjEyNy4wLjAuMToyOTk5IiwgVFJVRSk7Ci0KLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0g
V0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgd2Via2l0X3NldHRp
bmdzX3NldF9lbmFibGVfZGV2ZWxvcGVyX2V4dHJhcyh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRp
bmdzKHdlYlZpZXcpLCBUUlVFKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9odG1sKHdlYlZp
ZXcsCi0gICAgICAgICI8aHRtbD48Ym9keT48cD5XZWJLaXRHVEsrIEluc3BlY3RvciBUZXN0IFNl
cnZlcjwvcD48L2JvZHk+PC9odG1sPiIsCi0gICAgICAgICJodHRwOi8vMTI3LjAuMC4xOjI5OTkv
Iik7Ci0KLSAgICBHdGtXaWRnZXQqIHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1df
VE9QTEVWRUwpOwotICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwg
R1RLX1dJREdFVCh3ZWJWaWV3KSk7Ci0gICAgZ3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpOwot
Ci0gICAgZ19zaWduYWxfY29ubmVjdCh3aW5kb3csICJkZWxldGUtZXZlbnQiLCBHX0NBTExCQUNL
KGd0a19tYWluX3F1aXQpLCAwKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJsb2Fk
LWNoYW5nZWQiLCBHX0NBTExCQUNLKGxvYWRDaGFuZ2VkQ2FsbGJhY2spLCAwKTsKLQotICAgIGd0
a19tYWluKCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9Mb2FkVHJhY2tpbmdUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL0xvYWRUcmFja2luZ1Rlc3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBkZjM0MjA0Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL0xvYWRUcmFja2luZ1Rlc3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjA3
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkxvYWRUcmFja2luZ1Rlc3QuaCIKLQotI2luY2x1ZGUgPHdl
YmtpdDIvd2Via2l0Mi5oPgotCi1zdGF0aWMgdm9pZCBsb2FkQ2hhbmdlZENhbGxiYWNrKFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdExvYWRFdmVudCBsb2FkRXZlbnQsIExvYWRUcmFja2lu
Z1Rlc3QqIHRlc3QpCi17Ci0gICAgc3dpdGNoIChsb2FkRXZlbnQpIHsKLSAgICBjYXNlIFdFQktJ
VF9MT0FEX1NUQVJURUQ6Ci0gICAgICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19pc19sb2Fk
aW5nKHdlYlZpZXcpKTsKLSAgICAgICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPm1fYWN0aXZlVVJJ
LmRhdGEoKSwgPT0sIHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKHdlYlZpZXcpKTsKLSAgICAgICAg
dGVzdC0+cHJvdmlzaW9uYWxMb2FkU3RhcnRlZCgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IFdFQktJVF9MT0FEX1JFRElSRUNURUQ6Ci0gICAgICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmll
d19pc19sb2FkaW5nKHdlYlZpZXcpKTsKLSAgICAgICAgdGVzdC0+bV9hY3RpdmVVUkkgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X3VyaSh3ZWJWaWV3KTsKLSAgICAgICAgaWYgKCF0ZXN0LT5tX3JlZGly
ZWN0VVJJLmlzTnVsbCgpKQotICAgICAgICAgICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPm1fcmVk
aXJlY3RVUkkuZGF0YSgpLCA9PSwgdGVzdC0+bV9hY3RpdmVVUkkuZGF0YSgpKTsKLSAgICAgICAg
dGVzdC0+cHJvdmlzaW9uYWxMb2FkUmVjZWl2ZWRTZXJ2ZXJSZWRpcmVjdCgpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFdFQktJVF9MT0FEX0NPTU1JVFRFRDogewotICAgICAgICBnX2Fzc2Vy
dCh3ZWJraXRfd2ViX3ZpZXdfaXNfbG9hZGluZyh3ZWJWaWV3KSk7Ci0gICAgICAgIGdfYXNzZXJ0
X2NtcHN0cih0ZXN0LT5tX2FjdGl2ZVVSSS5kYXRhKCksID09LCB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X3VyaSh3ZWJWaWV3KSk7Ci0KLSAgICAgICAgLy8gQ2hlY2sgdGhhdCBvbiBjb21taXR0ZWQgd2Ug
YWx3YXlzIGhhdmUgYSBtYWluIHJlc291cmNlIHdpdGggYSByZXNwb25zZS4KLSAgICAgICAgV2Vi
S2l0V2ViUmVzb3VyY2UqIHJlc291cmNlID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX3Jlc291
cmNlKHdlYlZpZXcpOwotICAgICAgICBnX2Fzc2VydChyZXNvdXJjZSk7Ci0gICAgICAgIGdfYXNz
ZXJ0KHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3Jlc3BvbnNlKHJlc291cmNlKSk7Ci0KLSAgICAg
ICAgdGVzdC0+bG9hZENvbW1pdHRlZCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2Fz
ZSBXRUJLSVRfTE9BRF9GSU5JU0hFRDoKLSAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmll
d19pc19sb2FkaW5nKHdlYlZpZXcpKTsKLSAgICAgICAgaWYgKCF0ZXN0LT5tX2xvYWRGYWlsZWQp
Ci0gICAgICAgICAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9hY3RpdmVVUkkuZGF0YSgpLCA9
PSwgd2Via2l0X3dlYl92aWV3X2dldF91cmkod2ViVmlldykpOwotICAgICAgICB0ZXN0LT5sb2Fk
RmluaXNoZWQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgZ19hc3Nl
cnRfbm90X3JlYWNoZWQoKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGxvYWRGYWlsZWRDYWxs
YmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRMb2FkRXZlbnQgbG9hZEV2ZW50LCBj
b25zdCBjaGFyKiBmYWlsaW5nVVJJLCBHRXJyb3IqIGVycm9yLCBMb2FkVHJhY2tpbmdUZXN0KiB0
ZXN0KQotewotICAgIHRlc3QtPm1fbG9hZEZhaWxlZCA9IHRydWU7Ci0gICAgdGVzdC0+bV9lcnJv
ci5zZXQoZ19lcnJvcl9jb3B5KGVycm9yKSk7Ci0KLSAgICBzd2l0Y2ggKGxvYWRFdmVudCkgewot
ICAgIGNhc2UgV0VCS0lUX0xPQURfU1RBUlRFRDoKLSAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF93
ZWJfdmlld19pc19sb2FkaW5nKHdlYlZpZXcpKTsKLSAgICAgICAgZ19hc3NlcnRfY21wc3RyKHRl
c3QtPm1fYWN0aXZlVVJJLmRhdGEoKSwgPT0sIHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKHdlYlZp
ZXcpKTsKLSAgICAgICAgZ19hc3NlcnQoZXJyb3IpOwotICAgICAgICB0ZXN0LT5wcm92aXNpb25h
bExvYWRGYWlsZWQoZmFpbGluZ1VSSSwgZXJyb3IpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IFdFQktJVF9MT0FEX0NPTU1JVFRFRDoKLSAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmll
d19pc19sb2FkaW5nKHdlYlZpZXcpKTsKLSAgICAgICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPm1f
YWN0aXZlVVJJLmRhdGEoKSwgPT0sIHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKHdlYlZpZXcpKTsK
LSAgICAgICAgZ19hc3NlcnQoZXJyb3IpOwotICAgICAgICB0ZXN0LT5sb2FkRmFpbGVkKGZhaWxp
bmdVUkksIGVycm9yKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgZ19h
c3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGVzdGltYXRlZFBy
b2dyZXNzQ2hhbmdlZENhbGxiYWNrKEdPYmplY3QqLCBHUGFyYW1TcGVjKiwgTG9hZFRyYWNraW5n
VGVzdCogdGVzdCkKLXsKLSAgICB0ZXN0LT5lc3RpbWF0ZWRQcm9ncmVzc0NoYW5nZWQoKTsKLX0K
LQotTG9hZFRyYWNraW5nVGVzdDo6TG9hZFRyYWNraW5nVGVzdCgpCi0gICAgOiBtX3J1bkxvYWRV
bnRpbENvbXBsZXRpb24oZmFsc2UpCi0gICAgLCBtX2xvYWRGYWlsZWQoZmFsc2UpCi17Ci0gICAg
Z19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJsb2FkLWNoYW5nZWQiLCBHX0NBTExCQUNLKGxv
YWRDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmll
dywgImxvYWQtZmFpbGVkIiwgR19DQUxMQkFDSyhsb2FkRmFpbGVkQ2FsbGJhY2spLCB0aGlzKTsK
LSAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgIm5vdGlmeTo6ZXN0aW1hdGVkLWxvYWQt
cHJvZ3Jlc3MiLCBHX0NBTExCQUNLKGVzdGltYXRlZFByb2dyZXNzQ2hhbmdlZENhbGxiYWNrKSwg
dGhpcyk7Ci0KLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2dldF91cmkobV93ZWJWaWV3
KSk7Ci19Ci0KLUxvYWRUcmFja2luZ1Rlc3Q6On5Mb2FkVHJhY2tpbmdUZXN0KCkKLXsKLSAgICBn
X3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV93ZWJWaWV3LCBHX1NJR05BTF9N
QVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKLX0KLQotdm9pZCBMb2FkVHJhY2tpbmdUZXN0
Ojp3YWl0VW50aWxMb2FkRmluaXNoZWQoKQotewotICAgIG1fZXN0aW1hdGVkUHJvZ3Jlc3MgPSAw
OwotICAgIG1fcnVuTG9hZFVudGlsQ29tcGxldGlvbiA9IHRydWU7Ci0gICAgZ19tYWluX2xvb3Bf
cnVuKG1fbWFpbkxvb3ApOwotfQotCi12b2lkIExvYWRUcmFja2luZ1Rlc3Q6OnByb3Zpc2lvbmFs
TG9hZFN0YXJ0ZWQoKQotewotICAgIG1fbG9hZEV2ZW50cy5hcHBlbmQoUHJvdmlzaW9uYWxMb2Fk
U3RhcnRlZCk7Ci19Ci0KLXZvaWQgTG9hZFRyYWNraW5nVGVzdDo6cHJvdmlzaW9uYWxMb2FkUmVj
ZWl2ZWRTZXJ2ZXJSZWRpcmVjdCgpCi17Ci0gICAgbV9sb2FkRXZlbnRzLmFwcGVuZChQcm92aXNp
b25hbExvYWRSZWNlaXZlZFNlcnZlclJlZGlyZWN0KTsKLX0KLQotdm9pZCBMb2FkVHJhY2tpbmdU
ZXN0Ojpwcm92aXNpb25hbExvYWRGYWlsZWQoY29uc3QgZ2NoYXIqIGZhaWxpbmdVUkksIEdFcnJv
ciogZXJyb3IpCi17Ci0gICAgbV9sb2FkRXZlbnRzLmFwcGVuZChQcm92aXNpb25hbExvYWRGYWls
ZWQpOwotfQotCi12b2lkIExvYWRUcmFja2luZ1Rlc3Q6OmxvYWRDb21taXR0ZWQoKQotewotICAg
IG1fbG9hZEV2ZW50cy5hcHBlbmQoTG9hZENvbW1pdHRlZCk7Ci19Ci0KLXZvaWQgTG9hZFRyYWNr
aW5nVGVzdDo6bG9hZEZpbmlzaGVkKCkKLXsKLSAgICBtX2xvYWRFdmVudHMuYXBwZW5kKExvYWRG
aW5pc2hlZCk7Ci0gICAgaWYgKG1fcnVuTG9hZFVudGlsQ29tcGxldGlvbikKLSAgICAgICAgZ19t
YWluX2xvb3BfcXVpdChtX21haW5Mb29wKTsKLX0KLQotdm9pZCBMb2FkVHJhY2tpbmdUZXN0Ojps
b2FkRmFpbGVkKGNvbnN0IGdjaGFyKiBmYWlsaW5nVVJJLCBHRXJyb3IqIGVycm9yKQotewotICAg
IG1fbG9hZEV2ZW50cy5hcHBlbmQoTG9hZEZhaWxlZCk7Ci19Ci0KLXZvaWQgTG9hZFRyYWNraW5n
VGVzdDo6ZXN0aW1hdGVkUHJvZ3Jlc3NDaGFuZ2VkKCkKLXsKLSAgICBkb3VibGUgcHJvZ3Jlc3Mg
PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2VzdGltYXRlZF9sb2FkX3Byb2dyZXNzKG1fd2ViVmlldyk7
Ci0gICAgZ19hc3NlcnRfY21wZmxvYXQobV9lc3RpbWF0ZWRQcm9ncmVzcywgPCwgcHJvZ3Jlc3Mp
OwotICAgIG1fZXN0aW1hdGVkUHJvZ3Jlc3MgPSBwcm9ncmVzczsKLX0KLQotdm9pZCBMb2FkVHJh
Y2tpbmdUZXN0Ojpsb2FkVVJJKGNvbnN0IGNoYXIqIHVyaSkKLXsKLSAgICBtX2xvYWRFdmVudHMu
Y2xlYXIoKTsKLSAgICBtX2VzdGltYXRlZFByb2dyZXNzID0gMDsKLSAgICBtX2Vycm9yLmNsZWFy
KCk7Ci0gICAgV2ViVmlld1Rlc3Q6OmxvYWRVUkkodXJpKTsKLX0KLQotdm9pZCBMb2FkVHJhY2tp
bmdUZXN0Ojpsb2FkSHRtbChjb25zdCBjaGFyKiBodG1sLCBjb25zdCBjaGFyKiBiYXNlVVJJKQot
ewotICAgIG1fbG9hZEV2ZW50cy5jbGVhcigpOwotICAgIG1fZXN0aW1hdGVkUHJvZ3Jlc3MgPSAw
OwotICAgIG1fZXJyb3IuY2xlYXIoKTsKLSAgICBXZWJWaWV3VGVzdDo6bG9hZEh0bWwoaHRtbCwg
YmFzZVVSSSk7Ci19Ci0KLXZvaWQgTG9hZFRyYWNraW5nVGVzdDo6bG9hZFBsYWluVGV4dChjb25z
dCBjaGFyKiBwbGFpblRleHQpCi17Ci0gICAgbV9sb2FkRXZlbnRzLmNsZWFyKCk7Ci0gICAgbV9l
c3RpbWF0ZWRQcm9ncmVzcyA9IDA7Ci0gICAgbV9lcnJvci5jbGVhcigpOwotICAgIFdlYlZpZXdU
ZXN0Ojpsb2FkUGxhaW5UZXh0KHBsYWluVGV4dCk7Ci19Ci0KLXZvaWQgTG9hZFRyYWNraW5nVGVz
dDo6bG9hZFJlcXVlc3QoV2ViS2l0VVJJUmVxdWVzdCogcmVxdWVzdCkKLXsKLSAgICBtX2xvYWRF
dmVudHMuY2xlYXIoKTsKLSAgICBtX2VzdGltYXRlZFByb2dyZXNzID0gMDsKLSAgICBtX2Vycm9y
LmNsZWFyKCk7Ci0gICAgV2ViVmlld1Rlc3Q6OmxvYWRSZXF1ZXN0KHJlcXVlc3QpOwotfQotCi12
b2lkIExvYWRUcmFja2luZ1Rlc3Q6OnJlbG9hZCgpCi17Ci0gICAgbV9sb2FkRXZlbnRzLmNsZWFy
KCk7Ci0gICAgbV9lc3RpbWF0ZWRQcm9ncmVzcyA9IDA7Ci0gICAgbV9lcnJvci5jbGVhcigpOwot
ICAgIHdlYmtpdF93ZWJfdmlld19yZWxvYWQobV93ZWJWaWV3KTsKLX0KLQotdm9pZCBMb2FkVHJh
Y2tpbmdUZXN0Ojpnb0JhY2soKQotewotICAgIG1fbG9hZEV2ZW50cy5jbGVhcigpOwotICAgIG1f
ZXN0aW1hdGVkUHJvZ3Jlc3MgPSAwOwotICAgIG1fZXJyb3IuY2xlYXIoKTsKLSAgICBXZWJWaWV3
VGVzdDo6Z29CYWNrKCk7Ci19Ci0KLXZvaWQgTG9hZFRyYWNraW5nVGVzdDo6Z29Gb3J3YXJkKCkK
LXsKLSAgICBtX2xvYWRFdmVudHMuY2xlYXIoKTsKLSAgICBtX2VzdGltYXRlZFByb2dyZXNzID0g
MDsKLSAgICBtX2Vycm9yLmNsZWFyKCk7Ci0gICAgV2ViVmlld1Rlc3Q6OmdvRm9yd2FyZCgpOwot
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvTG9h
ZFRyYWNraW5nVGVzdC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
TG9hZFRyYWNraW5nVGVzdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2NmNzg0
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0xv
YWRUcmFja2luZ1Rlc3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBMb2FkVHJhY2tpbmdUZXN0X2gK
LSNkZWZpbmUgTG9hZFRyYWNraW5nVGVzdF9oCi0KLSNpbmNsdWRlICJUZXN0TWFpbi5oIgotI2lu
Y2x1ZGUgIldlYlZpZXdUZXN0LmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1jbGFzcyBM
b2FkVHJhY2tpbmdUZXN0IDogcHVibGljIFdlYlZpZXdUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtF
X0dMSUJfVEVTVF9GSVhUVVJFKExvYWRUcmFja2luZ1Rlc3QpOwotICAgIExvYWRUcmFja2luZ1Rl
c3QoKTsKLSAgICB2aXJ0dWFsIH5Mb2FkVHJhY2tpbmdUZXN0KCk7Ci0gICAgdm9pZCB3YWl0VW50
aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBwcm92aXNpb25hbExvYWRTdGFy
dGVkKCk7Ci0gICAgdmlydHVhbCB2b2lkIHByb3Zpc2lvbmFsTG9hZFJlY2VpdmVkU2VydmVyUmVk
aXJlY3QoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcHJvdmlzaW9uYWxMb2FkRmFpbGVkKGNvbnN0IGdj
aGFyKiBmYWlsaW5nVVJJLCBHRXJyb3IqKTsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZENvbW1pdHRl
ZCgpOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkRmluaXNoZWQoKTsKLSAgICB2aXJ0dWFsIHZvaWQg
bG9hZEZhaWxlZChjb25zdCBjaGFyKiBmYWlsaW5nVVJJLCBHRXJyb3IqKTsKLSAgICB2aXJ0dWFs
IHZvaWQgZXN0aW1hdGVkUHJvZ3Jlc3NDaGFuZ2VkKCk7Ci0KLSAgICB2b2lkIGxvYWRVUkkoY29u
c3QgY2hhciogdXJpKTsKLSAgICB2b2lkIGxvYWRIdG1sKGNvbnN0IGNoYXIqIGh0bWwsIGNvbnN0
IGNoYXIqIGJhc2VVUkkpOwotICAgIHZvaWQgbG9hZFBsYWluVGV4dChjb25zdCBjaGFyKiBwbGFp
blRleHQpOwotICAgIHZvaWQgbG9hZFJlcXVlc3QoV2ViS2l0VVJJUmVxdWVzdCopOwotICAgIHZv
aWQgcmVsb2FkKCk7Ci0gICAgdm9pZCBnb0JhY2soKTsKLSAgICB2b2lkIGdvRm9yd2FyZCgpOwot
Ci0gICAgdm9pZCBzZXRSZWRpcmVjdFVSSShjb25zdCBjaGFyKiB1cmkpIHsgbV9yZWRpcmVjdFVS
SSA9IHVyaTsgfQotCi0gICAgZW51bSBMb2FkRXZlbnRzIHsKLSAgICAgICAgUHJvdmlzaW9uYWxM
b2FkU3RhcnRlZCwKLSAgICAgICAgUHJvdmlzaW9uYWxMb2FkUmVjZWl2ZWRTZXJ2ZXJSZWRpcmVj
dCwKLSAgICAgICAgUHJvdmlzaW9uYWxMb2FkRmFpbGVkLAotICAgICAgICBMb2FkQ29tbWl0dGVk
LAotICAgICAgICBMb2FkRmluaXNoZWQsCi0gICAgICAgIExvYWRGYWlsZWQKLSAgICB9OwotICAg
IGJvb2wgbV9ydW5Mb2FkVW50aWxDb21wbGV0aW9uOwotICAgIGJvb2wgbV9sb2FkRmFpbGVkOwot
ICAgIEdPd25QdHI8R0Vycm9yPiBtX2Vycm9yOwotICAgIFZlY3RvcjxMb2FkRXZlbnRzPiBtX2xv
YWRFdmVudHM7Ci0gICAgZmxvYXQgbV9lc3RpbWF0ZWRQcm9ncmVzczsKLSAgICBDU3RyaW5nIG1f
cmVkaXJlY3RVUkk7Ci19OwotCi0jZW5kaWYgLy8gTG9hZFRyYWNraW5nVGVzdF9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0QXV0aGVudGlj
YXRpb24uY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdEF1
dGhlbnRpY2F0aW9uLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWRlNDIyNS4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0
QXV0aGVudGljYXRpb24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjg2ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJMb2FkVHJhY2tpbmdUZXN0LmgiCi0jaW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5o
IgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLQotc3RhdGljIFdlYktpdFRlc3RT
ZXJ2ZXIqIGtTZXJ2ZXI7Ci0KLWNsYXNzIEF1dGhlbnRpY2F0aW9uVGVzdDogcHVibGljIExvYWRU
cmFja2luZ1Rlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoQXV0aGVu
dGljYXRpb25UZXN0KTsKLQotICAgIEF1dGhlbnRpY2F0aW9uVGVzdCgpCi0gICAgewotICAgICAg
ICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImF1dGhlbnRpY2F0ZSIsIEdfQ0FMTEJBQ0so
cnVuQXV0aGVudGljYXRpb25DYWxsYmFjayksIHRoaXMpOwotICAgIH0KLQotICAgIH5BdXRoZW50
aWNhdGlvblRlc3QoKQotICAgIHsKLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVj
dF9tYXRjaGVkKG1fd2ViVmlldywgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhp
cyk7Ci0gICAgfQotCi0gICAgc3RhdGljIGludCBhdXRoZW50aWNhdGlvblJldHJpZXM7Ci0gICAg
c3RhdGljIGJvb2wgYXV0aGVudGljYXRpb25DYW5jZWxsZWRSZWNlaXZlZDsKLQotICAgIHZvaWQg
bG9hZFVSSShjb25zdCBjaGFyKiB1cmkpCi0gICAgewotICAgICAgICAvLyBSZXNldCB0aGUgcmV0
cnkgY291bnQgb2YgdGhlIGZha2Ugc2VydmVyIHdoZW4gYSBwYWdlIGlzIGxvYWRlZC4KLSAgICAg
ICAgYXV0aGVudGljYXRpb25SZXRyaWVzID0gMDsKLSAgICAgICAgYXV0aGVudGljYXRpb25DYW5j
ZWxsZWRSZWNlaXZlZCA9IGZhbHNlOwotICAgICAgICBMb2FkVHJhY2tpbmdUZXN0Ojpsb2FkVVJJ
KHVyaSk7Ci0gICAgfQotCi0gICAgc3RhdGljIGdib29sZWFuIHJ1bkF1dGhlbnRpY2F0aW9uQ2Fs
bGJhY2soV2ViS2l0V2ViVmlldyosIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVz
dCwgQXV0aGVudGljYXRpb25UZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgZ19zaWduYWxfY29u
bmVjdChyZXF1ZXN0LCAiY2FuY2VsbGVkIiwgR19DQUxMQkFDSyhhdXRoZW50aWNhdGlvbkNhbmNl
bGxlZENhbGxiYWNrKSwgdGVzdCk7Ci0gICAgICAgIHRlc3QtPnJ1bkF1dGhlbnRpY2F0aW9uKHJl
cXVlc3QpOwotICAgICAgICByZXR1cm4gVFJVRTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBh
dXRoZW50aWNhdGlvbkNhbmNlbGxlZENhbGxiYWNrKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVz
dCosIEF1dGhlbnRpY2F0aW9uVGVzdCopCi0gICAgewotICAgICAgICBhdXRoZW50aWNhdGlvbkNh
bmNlbGxlZFJlY2VpdmVkID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2b2lkIHJ1bkF1dGhlbnRpY2F0
aW9uKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCkKLSAgICB7Ci0gICAgICAg
IGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QocmVxdWVzdCkp
OwotICAgICAgICBtX2F1dGhlbnRpY2F0aW9uUmVxdWVzdCA9IHJlcXVlc3Q7Ci0gICAgICAgIGdf
bWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgV2ViS2l0QXV0aGVudGlj
YXRpb25SZXF1ZXN0KiB3YWl0Rm9yQXV0aGVudGljYXRpb25SZXF1ZXN0KCkKLSAgICB7Ci0gICAg
ICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAgICAgICAgcmV0dXJuIG1fYXV0aGVu
dGljYXRpb25SZXF1ZXN0LmdldCgpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBHUmVmUHRyPFdl
YktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdD4gbV9hdXRoZW50aWNhdGlvblJlcXVlc3Q7Ci19Owot
Ci1pbnQgQXV0aGVudGljYXRpb25UZXN0OjphdXRoZW50aWNhdGlvblJldHJpZXMgPSAwOwotYm9v
bCBBdXRoZW50aWNhdGlvblRlc3Q6OmF1dGhlbnRpY2F0aW9uQ2FuY2VsbGVkUmVjZWl2ZWQgPSBm
YWxzZTsKLQotc3RhdGljIGNvbnN0IGNoYXIgYXV0aFRlc3RVc2VybmFtZVtdID0gInVzZXJuYW1l
IjsKLXN0YXRpYyBjb25zdCBjaGFyIGF1dGhUZXN0UGFzc3dvcmRbXSA9ICJwYXNzd29yZCI7Ci1z
dGF0aWMgY29uc3QgY2hhciBhdXRoRXhwZWN0ZWRTdWNjZXNzVGl0bGVbXSA9ICJXZWJLaXQyR3Rr
KyBBdXRoZW50aWNhdGlvbiB0ZXN0IjsKLXN0YXRpYyBjb25zdCBjaGFyIGF1dGhFeHBlY3RlZEZh
aWx1cmVUaXRsZVtdID0gIjQwMSBBdXRob3JpemF0aW9uIFJlcXVpcmVkIjsKLXN0YXRpYyBjb25z
dCBjaGFyIGF1dGhFeHBlY3RlZEF1dGhvcml6YXRpb25bXSA9ICJCYXNpYyBkWE5sY201aGJXVTZj
R0Z6YzNkdmNtUT0iOyAvLyBCYXNlNjQgZW5jb2Rpbmcgb2YgInVzZXJuYW1lOnBhc3N3b3JkIi4K
LXN0YXRpYyBjb25zdCBjaGFyIGF1dGhTdWNjZXNzSFRNTFN0cmluZ1tdID0KLSAgICAiPGh0bWw+
IgotICAgICI8aGVhZD48dGl0bGU+V2ViS2l0Mkd0aysgQXV0aGVudGljYXRpb24gdGVzdDwvdGl0
bGU+PC9oZWFkPiIKLSAgICAiPGJvZHk+PC9ib2R5PjwvaHRtbD4iOwotc3RhdGljIGNvbnN0IGNo
YXIgYXV0aEZhaWx1cmVIVE1MU3RyaW5nW10gPQotICAgICI8aHRtbD4iCi0gICAgIjxoZWFkPjx0
aXRsZT40MDEgQXV0aG9yaXphdGlvbiBSZXF1aXJlZDwvdGl0bGU+PC9oZWFkPiIKLSAgICAiPGJv
ZHk+PC9ib2R5PjwvaHRtbD4iOwotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0
aW9uUmVxdWVzdChBdXRoZW50aWNhdGlvblRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0g
ICAgLy8gVGVzdCBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IGdldHRlcnMgbWF0Y2ggc291cCBhdXRo
ZW50aWNhdGlvbiBoZWFkZXIuCi0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQ
YXRoKCIvYXV0aC10ZXN0Lmh0bWwiKS5kYXRhKCkpOwotICAgIFdlYktpdEF1dGhlbnRpY2F0aW9u
UmVxdWVzdCogcmVxdWVzdCA9IHRlc3QtPndhaXRGb3JBdXRoZW50aWNhdGlvblJlcXVlc3QoKTsK
LSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X2hv
c3QocmVxdWVzdCksID09LCBzb3VwX3VyaV9nZXRfaG9zdChrU2VydmVyLT5iYXNlVVJJKCkpKTsK
LSAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9w
b3J0KHJlcXVlc3QpLCA9PSwgc291cF91cmlfZ2V0X3BvcnQoa1NlcnZlci0+YmFzZVVSSSgpKSk7
Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9y
ZWFsbShyZXF1ZXN0KSwgPT0sICJteSByZWFsbSIpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9hdXRo
ZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9zY2hlbWUocmVxdWVzdCkgPT0gV0VCS0lUX0FVVEhFTlRJ
Q0FUSU9OX1NDSEVNRV9IVFRQX0JBU0lDKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2F1dGhlbnRp
Y2F0aW9uX3JlcXVlc3RfaXNfZm9yX3Byb3h5KHJlcXVlc3QpKTsKLSAgICBnX2Fzc2VydCghd2Vi
a2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfaXNfcmV0cnkocmVxdWVzdCkpOwotfQotCi1zdGF0
aWMgdm9pZCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uQ2FuY2VsKEF1dGhlbnRpY2F0aW9uVGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICAvLyBUZXN0IGNhbmNlbC4KLSAgICB0ZXN0
LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9hdXRoLXRlc3QuaHRtbCIpLmRhdGEo
KSk7Ci0gICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0ID0gdGVzdC0+d2Fp
dEZvckF1dGhlbnRpY2F0aW9uUmVxdWVzdCgpOwotICAgIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9y
ZXF1ZXN0X2NhbmNlbChyZXF1ZXN0KTsKLSAgICAvLyBTZXJ2ZXIgZG9lc24ndCBhc2sgZm9yIG5l
dyBjcmVkZW50aWFscy4KLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAg
IGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHMuc2l6ZSgpLCA9PSwgMyk7Ci0gICAg
Z19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1swXSwgPT0sIExvYWRUcmFja2luZ1Rl
c3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5t
X2xvYWRFdmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRGYWls
ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMl0sID09LCBMb2Fk
VHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOwotCi0gICAgZ19hc3NlcnRfZXJyb3IodGVzdC0+
bV9lcnJvci5nZXQoKSwgV0VCS0lUX05FVFdPUktfRVJST1IsIFdFQktJVF9ORVRXT1JLX0VSUk9S
X0NBTkNFTExFRCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25M
b2FkQ2FuY2VsbGVkKEF1dGhlbnRpY2F0aW9uVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsK
LSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9hdXRoLXRlc3QuaHRt
bCIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdEZvckF1dGhlbnRpY2F0aW9uUmVxdWVzdCgpOwot
ICAgIHdlYmtpdF93ZWJfdmlld19zdG9wX2xvYWRpbmcodGVzdC0+bV93ZWJWaWV3KTsKLSAgICAv
LyBFeHBlY3QgZW1wdHkgcGFnZS4KLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsK
LSAgICBnX2Fzc2VydCh0ZXN0LT5hdXRoZW50aWNhdGlvbkNhbmNlbGxlZFJlY2VpdmVkKTsKLQot
ICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHMuc2l6ZSgpLCA9PSwgMyk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1swXSwgPT0sIExvYWRUcmFja2lu
Z1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0
LT5tX2xvYWRFdmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRG
YWlsZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMl0sID09LCBM
b2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOwotCi0gICAgZ19hc3NlcnRfZXJyb3IodGVz
dC0+bV9lcnJvci5nZXQoKSwgV0VCS0lUX05FVFdPUktfRVJST1IsIFdFQktJVF9ORVRXT1JLX0VS
Uk9SX0NBTkNFTExFRCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3QXV0aGVudGljYXRp
b25GYWlsdXJlKEF1dGhlbnRpY2F0aW9uVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAg
ICAvLyBUZXN0IGF1dGhlbnRpY2F0aW9uIGZhaWx1cmVzLgotICAgIHRlc3QtPmxvYWRVUkkoa1Nl
cnZlci0+Z2V0VVJJRm9yUGF0aCgiL2F1dGgtdGVzdC5odG1sIikuZGF0YSgpKTsKLSAgICBXZWJL
aXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QgPSB0ZXN0LT53YWl0Rm9yQXV0aGVudGlj
YXRpb25SZXF1ZXN0KCk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1
ZXN0X2lzX3JldHJ5KHJlcXVlc3QpKTsKLSAgICBXZWJLaXRDcmVkZW50aWFsKiBjcmVkZW50aWFs
ID0gd2Via2l0X2NyZWRlbnRpYWxfbmV3KGF1dGhUZXN0VXNlcm5hbWUsICJ3cm9uZ3Bhc3N3b3Jk
IiwgV0VCS0lUX0NSRURFTlRJQUxfUEVSU0lTVEVOQ0VfTk9ORSk7Ci0gICAgd2Via2l0X2F1dGhl
bnRpY2F0aW9uX3JlcXVlc3RfYXV0aGVudGljYXRlKHJlcXVlc3QsIGNyZWRlbnRpYWwpOwotICAg
IHdlYmtpdF9jcmVkZW50aWFsX2ZyZWUoY3JlZGVudGlhbCk7Ci0gICAgLy8gRXhwZWN0IGEgc2Vj
b25kIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QuCi0gICAgcmVxdWVzdCA9IHRlc3QtPndhaXRGb3JB
dXRoZW50aWNhdGlvblJlcXVlc3QoKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfYXV0aGVudGljYXRp
b25fcmVxdWVzdF9pc19yZXRyeShyZXF1ZXN0KSk7Ci0gICAgLy8gVGVzdCBzZWNvbmQgZmFpbHVy
ZS4KLSAgICBjcmVkZW50aWFsID0gd2Via2l0X2NyZWRlbnRpYWxfbmV3KGF1dGhUZXN0VXNlcm5h
bWUsICJ3cm9uZ3Bhc3N3b3JkMiIsIFdFQktJVF9DUkVERU5USUFMX1BFUlNJU1RFTkNFX05PTkUp
OwotICAgIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2F1dGhlbnRpY2F0ZShyZXF1ZXN0
LCBjcmVkZW50aWFsKTsKLSAgICB3ZWJraXRfY3JlZGVudGlhbF9mcmVlKGNyZWRlbnRpYWwpOwot
ICAgIC8vIEV4cGVjdCBhdXRoZW50aWNhdGlvbiBmYWlsZWQgcGFnZS4KLSAgICB0ZXN0LT53YWl0
VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRF
dmVudHMuc2l6ZSgpLCA9PSwgMyk7Ci0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2
ZW50c1swXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOwot
ICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMV0sID09LCBMb2FkVHJhY2tp
bmdUZXN0OjpMb2FkQ29tbWl0dGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2Fk
RXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKLSAgICBnX2Fz
c2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dldF90aXRsZSh0ZXN0LT5tX3dlYlZpZXcpLCA9
PSwgYXV0aEV4cGVjdGVkRmFpbHVyZVRpdGxlKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYlZp
ZXdBdXRoZW50aWNhdGlvbk5vQ3JlZGVudGlhbChBdXRoZW50aWNhdGlvblRlc3QqIHRlc3QsIGdj
b25zdHBvaW50ZXIpCi17Ci0gICAgLy8gVGVzdCBjb250aW51ZSB3aXRob3V0IGNyZWRlbnRpYWxz
LgotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2F1dGgtdGVzdC5o
dG1sIikuZGF0YSgpKTsKLSAgICBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3Qg
PSB0ZXN0LT53YWl0Rm9yQXV0aGVudGljYXRpb25SZXF1ZXN0KCk7Ci0gICAgd2Via2l0X2F1dGhl
bnRpY2F0aW9uX3JlcXVlc3RfYXV0aGVudGljYXRlKHJlcXVlc3QsIDApOwotICAgIC8vIFNlcnZl
ciBkb2Vzbid0IGFzayBmb3IgbmV3IGNyZWRlbnRpYWxzLgotICAgIHRlc3QtPndhaXRVbnRpbExv
YWRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50cy5z
aXplKCksID09LCAzKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzBd
LCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7Ci0gICAgZ19h
c3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6
OkxvYWRDb21taXR0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNb
Ml0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOwotICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3RpdGxlKHRlc3QtPm1fd2ViVmlldyksID09LCBhdXRo
RXhwZWN0ZWRGYWlsdXJlVGl0bGUpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0F1dGhl
bnRpY2F0aW9uU3RvcmFnZShBdXRoZW50aWNhdGlvblRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIp
Ci17Ci0gICAgLy8gRW5hYmxlIHByaXZhdGUgYnJvd3NpbmcgYmVmb3JlIGF1dGhlbnRpY2F0aW9u
IHJlcXVlc3QgdG8gdGVzdCB0aGF0IGNyZWRlbnRpYWxzIGNhbid0IGJlIHNhdmVkLgotICAgIHdl
YmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX3ByaXZhdGVfYnJvd3Npbmcod2Via2l0X3dlYl92aWV3
X2dldF9zZXR0aW5ncyh0ZXN0LT5tX3dlYlZpZXcpLCBUUlVFKTsKLSAgICB0ZXN0LT5sb2FkVVJJ
KGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9hdXRoLXRlc3QuaHRtbCIpLmRhdGEoKSk7Ci0gICAg
V2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0ID0gdGVzdC0+d2FpdEZvckF1dGhl
bnRpY2F0aW9uUmVxdWVzdCgpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfYXV0aGVudGljYXRpb25f
cmVxdWVzdF9nZXRfcHJvcG9zZWRfY3JlZGVudGlhbChyZXF1ZXN0KSk7Ci0gICAgZ19hc3NlcnQo
IXdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2Nhbl9zYXZlX2NyZWRlbnRpYWxzKHJlcXVl
c3QpKTsKLQotICAgIC8vIElmIFdlYktpdCBoYXMgYmVlbiBjb21waWxlZCB3aXRoIGxpYnNlY3Jl
dCwgYW5kIHByaXZhdGUgYnJvd3NpbmcgaXMgZGlzYWJsZWQKLSAgICAvLyB0aGVuIGNoZWNrIHRo
YXQgY3JlZGVudGlhbHMgY2FuIGJlIHNhdmVkLgotI2lmIEVOQUJMRShDUkVERU5USUFMX1NUT1JB
R0UpCi0gICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfcHJpdmF0ZV9icm93c2luZyh3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHRlc3QtPm1fd2ViVmlldyksIEZBTFNFKTsKLSAgICB0
ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9hdXRoLXRlc3QuaHRtbCIpLmRh
dGEoKSk7Ci0gICAgcmVxdWVzdCA9IHRlc3QtPndhaXRGb3JBdXRoZW50aWNhdGlvblJlcXVlc3Qo
KTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3Byb3Bv
c2VkX2NyZWRlbnRpYWwocmVxdWVzdCkpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9hdXRoZW50aWNh
dGlvbl9yZXF1ZXN0X2Nhbl9zYXZlX2NyZWRlbnRpYWxzKHJlcXVlc3QpKTsKLSNlbmRpZgotfQot
Ci1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uU3VjY2VzcyhBdXRoZW50aWNh
dGlvblRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgLy8gVGVzdCBjb3JyZWN0IGF1
dGhlbnRpY2F0aW9uLgotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgi
L2F1dGgtdGVzdC5odG1sIikuZGF0YSgpKTsKLSAgICBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVl
c3QqIHJlcXVlc3QgPSB0ZXN0LT53YWl0Rm9yQXV0aGVudGljYXRpb25SZXF1ZXN0KCk7Ci0gICAg
V2ViS2l0Q3JlZGVudGlhbCogY3JlZGVudGlhbCA9IHdlYmtpdF9jcmVkZW50aWFsX25ldyhhdXRo
VGVzdFVzZXJuYW1lLCBhdXRoVGVzdFBhc3N3b3JkLCBXRUJLSVRfQ1JFREVOVElBTF9QRVJTSVNU
RU5DRV9GT1JfU0VTU0lPTik7Ci0gICAgd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfYXV0
aGVudGljYXRlKHJlcXVlc3QsIGNyZWRlbnRpYWwpOwotICAgIHdlYmtpdF9jcmVkZW50aWFsX2Zy
ZWUoY3JlZGVudGlhbCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAg
ICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0sIDMpOwotICAg
IGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdU
ZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+
bV9sb2FkRXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZENvbW1pdHRlZCk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1syXSwgPT0sIExvYWRUcmFja2lu
Z1Rlc3Q6OkxvYWRGaW5pc2hlZCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmll
d19nZXRfdGl0bGUodGVzdC0+bV93ZWJWaWV3KSwgPT0sIGF1dGhFeHBlY3RlZFN1Y2Nlc3NUaXRs
ZSk7Ci0KLSAgICAvLyBUZXN0IGxvYWRpbmcgdGhlIHNhbWUgKGF1dGhvcml6ZWQpIHBhZ2UgYWdh
aW4uCi0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvYXV0aC10ZXN0
Lmh0bWwiKS5kYXRhKCkpOwotICAgIC8vIFRoZXJlIGlzIG5vIGF1dGhlbnRpY2F0aW9uIGNoYWxs
ZW5nZS4KLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0
X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHMuc2l6ZSgpLCA9PSwgMyk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1swXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zp
c2lvbmFsTG9hZFN0YXJ0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVu
dHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkQ29tbWl0dGVkKTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9h
ZEZpbmlzaGVkKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dldF90aXRs
ZSh0ZXN0LT5tX3dlYlZpZXcpLCA9PSwgYXV0aEV4cGVjdGVkU3VjY2Vzc1RpdGxlKTsKLX0KLQot
c3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciosIFNvdXBNZXNzYWdlKiBtZXNz
YWdlLCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiwgU291cENsaWVudENvbnRleHQqLCB2
b2lkKikKLXsKLSAgICBpZiAobWVzc2FnZS0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgewot
ICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1Rf
SU1QTEVNRU5URUQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFzdHJjbXAo
cGF0aCwgIi9hdXRoLXRlc3QuaHRtbCIpKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGF1dGhvcml6
YXRpb24gPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfb25lKG1lc3NhZ2UtPnJlcXVlc3RfaGVh
ZGVycywgIkF1dGhvcml6YXRpb24iKTsKLSAgICAgICAgLy8gUmVxdWlyZSBhdXRoZW50aWNhdGlv
bi4KLSAgICAgICAgaWYgKCFnX3N0cmNtcDAoYXV0aG9yaXphdGlvbiwgYXV0aEV4cGVjdGVkQXV0
aG9yaXphdGlvbikpIHsKLSAgICAgICAgICAgIC8vIFN1Y2Nlc3NmdWwgYXV0aGVudGljYXRpb24u
Ci0gICAgICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRV
U19PSyk7Ci0gICAgICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVz
cG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBhdXRoU3VjY2Vzc0hUTUxTdHJpbmcsIHN0
cmxlbihhdXRoU3VjY2Vzc0hUTUxTdHJpbmcpKTsKLSAgICAgICAgICAgIEF1dGhlbnRpY2F0aW9u
VGVzdDo6YXV0aGVudGljYXRpb25SZXRyaWVzID0gMDsKLSAgICAgICAgfSBlbHNlIGlmICgrK0F1
dGhlbnRpY2F0aW9uVGVzdDo6YXV0aGVudGljYXRpb25SZXRyaWVzIDwgMykgewotICAgICAgICAg
ICAgLy8gTm8gb3IgaW52YWxpZCBhdXRob3JpemF0aW9uIGhlYWRlciBwcm92aWRlZCBieSB0aGUg
Y2xpZW50LCByZXF1ZXN0IGF1dGhlbnRpY2F0aW9uIHR3aWNlIHRoZW4gZmFpbC4KLSAgICAgICAg
ICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX1VOQVVUSE9S
SVpFRCk7Ci0gICAgICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobWVzc2FnZS0+
cmVzcG9uc2VfaGVhZGVycywgIldXVy1BdXRoZW50aWNhdGUiLCAiQmFzaWMgcmVhbG09XCJteSBy
ZWFsbVwiIik7Ci0gICAgICAgICAgICAvLyBJbmNsdWRlIGEgZmFpbHVyZSBtZXNzYWdlIGluIGNh
c2UgdGhlIHVzZXIgYXR0ZW1wdHMgdG8gcHJvY2VlZCB3aXRob3V0IGF1dGhlbnRpY2F0aW9uLgot
ICAgICAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2Jv
ZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgYXV0aEZhaWx1cmVIVE1MU3RyaW5nLCBzdHJsZW4oYXV0
aEZhaWx1cmVIVE1MU3RyaW5nKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBB
dXRoZW50aWNhdGlvbiBub3Qgc3VjY2Vzc2Z1bCwgZGlzcGxheSBhICI0MDEgQXV0aG9yaXphdGlv
biBSZXF1aXJlZCIgcGFnZS4KLSAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1l
c3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKLSAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2Fw
cGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGF1dGhGYWls
dXJlSFRNTFN0cmluZywgc3RybGVuKGF1dGhGYWlsdXJlSFRNTFN0cmluZykpOwotICAgICAgICB9
Ci0gICAgfSBlbHNlCi0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNP
VVBfU1RBVFVTX05PVF9GT1VORCk7Ci0KLSAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZSht
ZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKLX0KLQotdm9pZCBiZWZvcmVBbGwoKQotewotICAgIGtT
ZXJ2ZXIgPSBuZXcgV2ViS2l0VGVzdFNlcnZlcigpOwotICAgIGtTZXJ2ZXItPnJ1bihzZXJ2ZXJD
YWxsYmFjayk7Ci0KLSAgICBBdXRoZW50aWNhdGlvblRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIs
ICJhdXRoZW50aWNhdGlvbi1yZXF1ZXN0IiwgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvblJlcXVl
c3QpOwotICAgIEF1dGhlbnRpY2F0aW9uVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImF1dGhl
bnRpY2F0aW9uLWNhbmNlbCIsIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25DYW5jZWwpOwotICAg
IEF1dGhlbnRpY2F0aW9uVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImF1dGhlbnRpY2F0aW9u
LWxvYWQtY2FuY2VsbGVkIiwgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvbkxvYWRDYW5jZWxsZWQp
OwotICAgIEF1dGhlbnRpY2F0aW9uVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImF1dGhlbnRp
Y2F0aW9uLWZhaWx1cmUiLCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uRmFpbHVyZSk7Ci0gICAg
QXV0aGVudGljYXRpb25UZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiYXV0aGVudGljYXRpb24t
bm8tY3JlZGVudGlhbCIsIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25Ob0NyZWRlbnRpYWwpOwot
ICAgIEF1dGhlbnRpY2F0aW9uVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImF1dGhlbnRpY2F0
aW9uLXN0b3JhZ2UiLCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uU3RvcmFnZSk7Ci0gICAgLy8g
VGVzdGluZyBhdXRoZW50aWNhdGlvbiBzdWNjZXNzIG11c3QgYmUgZG9uZSBsYXN0IGJlY2F1c2Ug
bGlic291cCB3aWxsIG5ldmVyIGZpcmUKLSAgICAvLyB0aGUgYXV0aGVudGljYXRlIHNpZ25hbCBh
Z2FpbiBvbmNlIGF1dGhlbnRpY2F0aW9uIGlzIHN1Y2Nlc3NmdWwuCi0gICAgQXV0aGVudGljYXRp
b25UZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiYXV0aGVudGljYXRpb24tc3VjY2VzcyIsIHRl
c3RXZWJWaWV3QXV0aGVudGljYXRpb25TdWNjZXNzKTsKLX0KLQotdm9pZCBhZnRlckFsbCgpCi17
Ci0gICAgZGVsZXRlIGtTZXJ2ZXI7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0QmFja0ZvcndhcmRMaXN0LmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RCYWNrRm9yd2FyZExpc3QuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDc5MzY2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RCYWNrRm9yd2FyZExpc3QuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsMjgwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
SWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiV2ViS2l0VGVzdFNl
cnZlci5oIgotI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgot
I2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUg
PHdlYmtpdDIvd2Via2l0Mi5oPgotCi0vLyBCYWNrIGZvcndhcmQgbGlzdCBsaW1pdCBpcyAxMDAg
YnkgZGVmYXVsdC4KLXN0YXRpYyBjb25zdCBpbnQga0JhY2tGb3J3YXJkTGlzdExpbWl0ID0gMTAw
OwotCi1zdGF0aWMgV2ViS2l0VGVzdFNlcnZlcioga1NlcnZlcjsKLQotc3RhdGljIHZvaWQgc2Vy
dmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbXNnLCBjb25zdCBj
aGFyKiBwYXRoLCBHSGFzaFRhYmxlKiBxdWVyeSwgU291cENsaWVudENvbnRleHQqIGNvbnRleHQs
IGdwb2ludGVyIGRhdGEpCi17Ci0gICAgaWYgKG1zZy0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dF
VCkgewotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX05P
VF9JTVBMRU1FTlRFRCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoZ19zdHJf
aGFzX3N1ZmZpeChwYXRoLCAiZmF2aWNvbi5pY28iKSkgewotICAgICAgICBzb3VwX21lc3NhZ2Vf
c2V0X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX09L
KTsKLQotICAgIGNoYXIqIGJvZHkgPSBnX3N0cmR1cF9wcmludGYoIjxodG1sPjx0aXRsZT4lczwv
dGl0bGU+PGJvZHk+JXM8L2JvZHk+PC9odG1sPiIsIHBhdGggKyAxLCBwYXRoICsgMSk7Ci0gICAg
c291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1zZy0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllf
VEFLRSwgYm9keSwgc3RybGVuKGJvZHkpKTsKLQotICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBs
ZXRlKG1zZy0+cmVzcG9uc2VfYm9keSk7Ci19Ci0KLWNsYXNzIEJhY2tGb3J3YXJkTGlzdFRlc3Q6
IHB1YmxpYyBXZWJWaWV3VGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVS
RShCYWNrRm9yd2FyZExpc3RUZXN0KTsKLQotICAgIGVudW0gewotICAgICAgICBCYWNrd2FyZCwK
LSAgICAgICAgRm9yd2FyZAotICAgIH07Ci0KLSAgICBlbnVtIHsKLSAgICAgICAgQ3VycmVudEl0
ZW0gID0gMSA8PCAwLAotICAgICAgICBBZGRlZEl0ZW0gICAgPSAxIDw8IDEsCi0gICAgICAgIFJl
bW92ZWRJdGVtcyA9IDEgPDwgMgotICAgIH07Ci0KLSAgICBzdGF0aWMgdm9pZCBjaGVja0l0ZW0o
V2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSogaXRlbSwgY29uc3QgY2hhciogdGl0bGUsIGNvbnN0
IGNoYXIqIHVyaSwgY29uc3QgY2hhciogb3JpZ2luYWxVUkkpCi0gICAgewotICAgICAgICBnX2Fz
c2VydChpdGVtKTsKLSAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9iYWNrX2ZvcndhcmRf
bGlzdF9pdGVtX2dldF91cmkoaXRlbSksID09LCB1cmkpOwotICAgICAgICBnX2Fzc2VydF9jbXBz
dHIod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0X3RpdGxlKGl0ZW0pLCA9PSAsIHRp
dGxlKTsKLSAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9p
dGVtX2dldF9vcmlnaW5hbF91cmkoaXRlbSksID09LCBvcmlnaW5hbFVSSSk7Ci0gICAgfQotCi0g
ICAgc3RhdGljIHZvaWQgY2hlY2tJdGVtSW5kZXgoV2ViS2l0QmFja0ZvcndhcmRMaXN0KiBsaXN0
KQotICAgIHsKLSAgICAgICAgZ19hc3NlcnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9u
dGhfaXRlbShsaXN0LCAtMSkgPT0gd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2l0
ZW0obGlzdCkpOwotICAgICAgICBnX2Fzc2VydCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0
X250aF9pdGVtKGxpc3QsIDApID09IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVu
dF9pdGVtKGxpc3QpKTsKLSAgICAgICAgZ19hc3NlcnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0
X2dldF9udGhfaXRlbShsaXN0LCAxKSA9PSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2Zv
cndhcmRfaXRlbShsaXN0KSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgY2hlY2tMaXN0KFdl
YktpdEJhY2tGb3J3YXJkTGlzdCogbGlzdCwgdW5zaWduZWQgdHlwZSwgV2ViS2l0QmFja0Zvcndh
cmRMaXN0SXRlbSoqIGl0ZW1zLCB1bnNpZ25lZCBuSXRlbXMpCi0gICAgewotICAgICAgICBHTGlz
dCogbGlzdEl0ZW1zID0gdHlwZSA9PSBCYWNrRm9yd2FyZExpc3RUZXN0OjpCYWNrd2FyZCA/IHdl
YmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19saXN0KGxpc3QpIDoKLSAgICAgICAgICAg
IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0KGxpc3QpOwotICAgICAg
ICBnX2Fzc2VydChsaXN0SXRlbXMpOwotCi0gICAgICAgIHVuc2lnbmVkIGkgPSAwOwotICAgICAg
ICBmb3IgKEdMaXN0KiBsaXN0SXRlbSA9IGxpc3RJdGVtczsgbGlzdEl0ZW07IGxpc3RJdGVtID0g
Z19saXN0X25leHQobGlzdEl0ZW0pLCBpKyspIHsKLSAgICAgICAgICAgIGdfYXNzZXJ0X2NtcHVp
bnQoaSwgPCwgbkl0ZW1zKTsKLSAgICAgICAgICAgIGdfYXNzZXJ0KGxpc3RJdGVtLT5kYXRhID09
IGl0ZW1zW2ldKTsKLSAgICAgICAgfQotICAgICAgICBnX2xpc3RfZnJlZShsaXN0SXRlbXMpOwot
ICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGJhY2tGb3J3YXJkTGlzdENoYW5nZWQoV2ViS2l0QmFj
a0ZvcndhcmRMaXN0KiBsaXN0LCBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiBhZGRlZEl0ZW0s
IEdMaXN0KiByZW1vdmVkSXRlbXMsIEJhY2tGb3J3YXJkTGlzdFRlc3QqIHRlc3QpCi0gICAgewot
ICAgICAgICB0ZXN0LT5tX2hhc0NoYW5nZWQgPSB0cnVlOwotCi0gICAgICAgIGlmICh0ZXN0LT5t
X2NoYW5nZWRGbGFncyAmIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OkFkZGVkSXRlbSkgewotICAgICAg
ICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX0JBQ0tfRk9SV0FSRF9MSVNUX0lURU0oYWRkZWRJdGVt
KSk7Ci0gICAgICAgICAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlz
aGVzKEdfT0JKRUNUKGFkZGVkSXRlbSkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGdf
YXNzZXJ0KCFhZGRlZEl0ZW0pOwotCi0gICAgICAgIGlmICh0ZXN0LT5tX2NoYW5nZWRGbGFncyAm
IEJhY2tGb3J3YXJkTGlzdFRlc3Q6OlJlbW92ZWRJdGVtcykgewotICAgICAgICAgICAgZ19hc3Nl
cnQocmVtb3ZlZEl0ZW1zKTsKLSAgICAgICAgICAgIGZvciAoR0xpc3QqIGl0ZXIgPSByZW1vdmVk
SXRlbXM7IGl0ZXI7IGl0ZXIgPSBpdGVyLT5uZXh0KSB7Ci0gICAgICAgICAgICAgICAgZ19hc3Nl
cnQoV0VCS0lUX0lTX0JBQ0tfRk9SV0FSRF9MSVNUX0lURU0oaXRlci0+ZGF0YSkpOwotICAgICAg
ICAgICAgICAgIGlmICh0ZXN0LT5tX2V4cGVjdGVkUmVtb3ZlZEl0ZW1zKQotICAgICAgICAgICAg
ICAgICAgICBnX2Fzc2VydChnX2xpc3RfZmluZCh0ZXN0LT5tX2V4cGVjdGVkUmVtb3ZlZEl0ZW1z
LCBpdGVyLT5kYXRhKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICBnX2Fzc2VydCghcmVtb3ZlZEl0ZW1zKTsKLSAgICB9Ci0KLSAgICBCYWNrRm9yd2FyZExp
c3RUZXN0KCkKLSAgICAgICAgOiBtX2xpc3Qod2Via2l0X3dlYl92aWV3X2dldF9iYWNrX2Zvcndh
cmRfbGlzdChtX3dlYlZpZXcpKQotICAgICAgICAsIG1fY2hhbmdlZEZsYWdzKDApCi0gICAgICAg
ICwgbV9oYXNDaGFuZ2VkKGZhbHNlKQotICAgICAgICAsIG1fZXhwZWN0ZWRSZW1vdmVkSXRlbXMo
MCkKLSAgICB7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9saXN0LCAiY2hhbmdlZCIsIEdf
Q0FMTEJBQ0soYmFja0ZvcndhcmRMaXN0Q2hhbmdlZCksIHRoaXMpOwotICAgICAgICBhc3NlcnRP
YmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKG1fbGlzdCkpOwotICAgIH0K
LQotICAgIH5CYWNrRm9yd2FyZExpc3RUZXN0KCkKLSAgICB7Ci0gICAgICAgIGdfc2lnbmFsX2hh
bmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX2xpc3QsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAs
IDAsIDAsIDAsIHRoaXMpOwotICAgIH0KLQotICAgIHZvaWQgd2FpdFVudGlsTG9hZEZpbmlzaGVk
KCkKLSAgICB7Ci0gICAgICAgIG1faGFzQ2hhbmdlZCA9IGZhbHNlOwotICAgICAgICBXZWJWaWV3
VGVzdDo6d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgICAgIGdfYXNzZXJ0KG1faGFzQ2hh
bmdlZCk7Ci0gICAgfQotCi0gICAgdm9pZCB3YWl0VW50aWxMb2FkRmluaXNoZWRBbmRDaGVja1Jl
bW92ZWRJdGVtcyhHTGlzdCogcmVtb3ZlZEl0ZW1zKQotICAgIHsKLSAgICAgICAgbV9leHBlY3Rl
ZFJlbW92ZWRJdGVtcyA9IHJlbW92ZWRJdGVtczsKLSAgICAgICAgd2FpdFVudGlsTG9hZEZpbmlz
aGVkKCk7Ci0gICAgICAgIG1fZXhwZWN0ZWRSZW1vdmVkSXRlbXMgPSAwOwotICAgIH0KLQotICAg
IFdlYktpdEJhY2tGb3J3YXJkTGlzdCogbV9saXN0OwotICAgIHVuc2lnbmVkIGxvbmcgbV9jaGFu
Z2VkRmxhZ3M7Ci0gICAgYm9vbCBtX2hhc0NoYW5nZWQ7Ci0gICAgR0xpc3QqIG1fZXhwZWN0ZWRS
ZW1vdmVkSXRlbXM7Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0QmFja0ZvcndhcmRMaXN0TmF2aWdh
dGlvbihCYWNrRm9yd2FyZExpc3RUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIFdl
YktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW1zWzFdOwotCi0gICAgZ19hc3NlcnQoIXdlYmtp
dF93ZWJfdmlld19jYW5fZ29fYmFjayh0ZXN0LT5tX3dlYlZpZXcpKTsKLSAgICBnX2Fzc2VydCgh
d2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHRlc3QtPm1fd2ViVmlldykpOwotCi0gICAg
Z19hc3NlcnRfY21wdWludCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2xlbmd0aCh0ZXN0
LT5tX2xpc3QpLCA9PSwgMCk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlz
dF9nZXRfY3VycmVudF9pdGVtKHRlc3QtPm1fbGlzdCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRf
YmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfaXRlbSh0ZXN0LT5tX2xpc3QpKTsKLSAgICBnX2Fz
c2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2l0ZW0odGVzdC0+bV9s
aXN0KSk7Ci0gICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tJdGVtSW5kZXgodGVzdC0+bV9s
aXN0KTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xp
c3QodGVzdC0+bV9saXN0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlz
dF9nZXRfZm9yd2FyZF9saXN0KHRlc3QtPm1fbGlzdCkpOwotCi0gICAgQ1N0cmluZyB1cmlQYWdl
MSA9IGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9QYWdlMSIpOwotICAgIHRlc3QtPm1fY2hhbmdl
ZEZsYWdzID0gQmFja0ZvcndhcmRMaXN0VGVzdDo6Q3VycmVudEl0ZW0gfCBCYWNrRm9yd2FyZExp
c3RUZXN0OjpBZGRlZEl0ZW07Ci0gICAgdGVzdC0+bG9hZFVSSSh1cmlQYWdlMS5kYXRhKCkpOwot
ICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3NlcnQoIXdlYmtp
dF93ZWJfdmlld19jYW5fZ29fYmFjayh0ZXN0LT5tX3dlYlZpZXcpKTsKLSAgICBnX2Fzc2VydCgh
d2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHRlc3QtPm1fd2ViVmlldykpOwotCi0gICAg
Z19hc3NlcnRfY21wdWludCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2xlbmd0aCh0ZXN0
LT5tX2xpc3QpLCA9PSwgMSk7Ci0gICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSogaXRlbVBh
Z2UxID0gd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0odGVzdC0+bV9s
aXN0KTsKLSAgICBCYWNrRm9yd2FyZExpc3RUZXN0OjpjaGVja0l0ZW0oaXRlbVBhZ2UxLCAiUGFn
ZTEiLCB1cmlQYWdlMS5kYXRhKCksIHVyaVBhZ2UxLmRhdGEoKSk7Ci0gICAgZ19hc3NlcnQoIXdl
YmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19pdGVtKHRlc3QtPm1fbGlzdCkpOwotICAg
IGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRlbSh0ZXN0
LT5tX2xpc3QpKTsKLSAgICBCYWNrRm9yd2FyZExpc3RUZXN0OjpjaGVja0l0ZW1JbmRleCh0ZXN0
LT5tX2xpc3QpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2Jh
Y2tfbGlzdCh0ZXN0LT5tX2xpc3QpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2Fy
ZF9saXN0X2dldF9mb3J3YXJkX2xpc3QodGVzdC0+bV9saXN0KSk7Ci0KLSAgICBDU3RyaW5nIHVy
aVBhZ2UyID0ga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL1BhZ2UyIik7Ci0gICAgdGVzdC0+bV9j
aGFuZ2VkRmxhZ3MgPSBCYWNrRm9yd2FyZExpc3RUZXN0OjpDdXJyZW50SXRlbSB8IEJhY2tGb3J3
YXJkTGlzdFRlc3Q6OkFkZGVkSXRlbTsKLSAgICB0ZXN0LT5sb2FkVVJJKHVyaVBhZ2UyLmRhdGEo
KSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBnX2Fzc2VydCh3
ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2sodGVzdC0+bV93ZWJWaWV3KSk7Ci0gICAgZ19hc3Nl
cnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh0ZXN0LT5tX3dlYlZpZXcpKTsKLQot
ICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9sZW5ndGgo
dGVzdC0+bV9saXN0KSwgPT0sIDIpOwotICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0
ZW1QYWdlMiA9IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKHRlc3Qt
Pm1fbGlzdCk7Ci0gICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tJdGVtKGl0ZW1QYWdlMiwg
IlBhZ2UyIiwgdXJpUGFnZTIuZGF0YSgpLCB1cmlQYWdlMi5kYXRhKCkpOwotICAgIGdfYXNzZXJ0
KHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19pdGVtKHRlc3QtPm1fbGlzdCkgPT0g
aXRlbVBhZ2UxKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9m
b3J3YXJkX2l0ZW0odGVzdC0+bV9saXN0KSk7Ci0gICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hl
Y2tJdGVtSW5kZXgodGVzdC0+bV9saXN0KTsKLSAgICBpdGVtc1swXSA9IGl0ZW1QYWdlMTsKLSAg
ICBCYWNrRm9yd2FyZExpc3RUZXN0OjpjaGVja0xpc3QodGVzdC0+bV9saXN0LCBCYWNrRm9yd2Fy
ZExpc3RUZXN0OjpCYWNrd2FyZCwgaXRlbXMsIDEpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFj
a19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlzdCh0ZXN0LT5tX2xpc3QpKTsKLQotICAgIHRl
c3QtPm1fY2hhbmdlZEZsYWdzID0gQmFja0ZvcndhcmRMaXN0VGVzdDo6Q3VycmVudEl0ZW07Ci0g
ICAgdGVzdC0+Z29CYWNrKCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0K
LSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrKHRlc3QtPm1fd2ViVmll
dykpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh0ZXN0LT5t
X3dlYlZpZXcpKTsKLQotICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2JhY2tfZm9yd2FyZF9s
aXN0X2dldF9sZW5ndGgodGVzdC0+bV9saXN0KSwgPT0sIDIpOwotICAgIGdfYXNzZXJ0KGl0ZW1Q
YWdlMSA9PSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh0ZXN0LT5t
X2xpc3QpKTsKLSAgICBCYWNrRm9yd2FyZExpc3RUZXN0OjpjaGVja0l0ZW0od2Via2l0X2JhY2tf
Zm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0odGVzdC0+bV9saXN0KSwgIlBhZ2UxIiwgdXJp
UGFnZTEuZGF0YSgpLCB1cmlQYWdlMS5kYXRhKCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFj
a19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfaXRlbSh0ZXN0LT5tX2xpc3QpKTsKLSAgICBnX2Fzc2Vy
dCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRlbSh0ZXN0LT5tX2xpc3Qp
ID09IGl0ZW1QYWdlMik7Ci0gICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tJdGVtSW5kZXgo
dGVzdC0+bV9saXN0KTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dl
dF9iYWNrX2xpc3QodGVzdC0+bV9saXN0KSk7Ci0gICAgaXRlbXNbMF0gPSBpdGVtUGFnZTI7Ci0g
ICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tMaXN0KHRlc3QtPm1fbGlzdCwgQmFja0Zvcndh
cmRMaXN0VGVzdDo6Rm9yd2FyZCwgaXRlbXMsIDEpOwotCi0gICAgdGVzdC0+bV9jaGFuZ2VkRmxh
Z3MgPSBCYWNrRm9yd2FyZExpc3RUZXN0OjpDdXJyZW50SXRlbTsKLSAgICB0ZXN0LT5nb0Zvcndh
cmQoKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0
KHdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayh0ZXN0LT5tX3dlYlZpZXcpKTsKLSAgICBnX2Fz
c2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHRlc3QtPm1fd2ViVmlldykpOwot
Ci0gICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2xlbmd0
aCh0ZXN0LT5tX2xpc3QpLCA9PSwgMik7Ci0gICAgZ19hc3NlcnQoaXRlbVBhZ2UyID09IHdlYmtp
dF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKHRlc3QtPm1fbGlzdCkpOwotICAg
IEJhY2tGb3J3YXJkTGlzdFRlc3Q6OmNoZWNrSXRlbSh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3Rf
Z2V0X2N1cnJlbnRfaXRlbSh0ZXN0LT5tX2xpc3QpLCAiUGFnZTIiLCB1cmlQYWdlMi5kYXRhKCks
IHVyaVBhZ2UyLmRhdGEoKSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0
X2dldF9iYWNrX2l0ZW0odGVzdC0+bV9saXN0KSA9PSBpdGVtUGFnZTEpOwotICAgIGdfYXNzZXJ0
KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRlbSh0ZXN0LT5tX2xpc3Qp
KTsKLSAgICBCYWNrRm9yd2FyZExpc3RUZXN0OjpjaGVja0l0ZW1JbmRleCh0ZXN0LT5tX2xpc3Qp
OwotICAgIGl0ZW1zWzBdID0gaXRlbVBhZ2UxOwotICAgIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OmNo
ZWNrTGlzdCh0ZXN0LT5tX2xpc3QsIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OkJhY2t3YXJkLCBpdGVt
cywgMSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2Fy
ZF9saXN0KHRlc3QtPm1fbGlzdCkpOwotCi0gICAgdGVzdC0+bV9jaGFuZ2VkRmxhZ3MgPSBCYWNr
Rm9yd2FyZExpc3RUZXN0OjpDdXJyZW50SXRlbTsKLSAgICB0ZXN0LT5nb1RvQmFja0ZvcndhcmRM
aXN0SXRlbShpdGVtUGFnZTEpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwot
Ci0gICAgZ19hc3NlcnQoaXRlbVBhZ2UxID09IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRf
Y3VycmVudF9pdGVtKHRlc3QtPm1fbGlzdCkpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0QmFja0Zv
cndhcmRMaXN0TGltaXRBbmRDYWNoZShCYWNrRm9yd2FyZExpc3RUZXN0KiB0ZXN0LCBnY29uc3Rw
b2ludGVyKQotewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwga0JhY2tGb3J3YXJkTGlzdExpbWl0
OyBpKyspIHsKLSAgICAgICAgR093blB0cjxjaGFyPiBwYXRoKGdfc3RyZHVwX3ByaW50ZigiL1Bh
Z2UlZCIsIGkpKTsKLSAgICAgICAgdGVzdC0+bV9jaGFuZ2VkRmxhZ3MgPSBCYWNrRm9yd2FyZExp
c3RUZXN0OjpDdXJyZW50SXRlbSB8IEJhY2tGb3J3YXJkTGlzdFRlc3Q6OkFkZGVkSXRlbTsKLSAg
ICAgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKHBhdGguZ2V0KCkpLmRh
dGEoKSk7Ci0gICAgICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIH0KLQot
ICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9sZW5ndGgo
dGVzdC0+bV9saXN0KSwgPT0sIGtCYWNrRm9yd2FyZExpc3RMaW1pdCk7Ci0gICAgV2ViS2l0QmFj
a0ZvcndhcmRMaXN0SXRlbSogaXRlbVBhZ2VGaXJzdCA9IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlz
dF9nZXRfbnRoX2l0ZW0odGVzdC0+bV9saXN0LCAtKGtCYWNrRm9yd2FyZExpc3RMaW1pdCAtIDEp
KTsKLSAgICBHT3duUHRyPEdMaXN0PiByZW1vdmVkSXRlbXMoZ19saXN0X3ByZXBlbmQoMCwgaXRl
bVBhZ2VGaXJzdCkpOwotCi0gICAgR093blB0cjxjaGFyPiBwYXRoKGdfc3RyZHVwX3ByaW50Zigi
L1BhZ2UlZCIsIGtCYWNrRm9yd2FyZExpc3RMaW1pdCkpOwotICAgIHRlc3QtPm1fY2hhbmdlZEZs
YWdzID0gQmFja0ZvcndhcmRMaXN0VGVzdDo6Q3VycmVudEl0ZW0gfCBCYWNrRm9yd2FyZExpc3RU
ZXN0OjpBZGRlZEl0ZW0gfCBCYWNrRm9yd2FyZExpc3RUZXN0OjpSZW1vdmVkSXRlbXM7Ci0gICAg
dGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKHBhdGguZ2V0KCkpLmRhdGEoKSk7
Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkQW5kQ2hlY2tSZW1vdmVkSXRlbXMocmVt
b3ZlZEl0ZW1zLmdldCgpKTsKLQotICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2JhY2tfZm9y
d2FyZF9saXN0X2dldF9sZW5ndGgodGVzdC0+bV9saXN0KSwgPT0sIGtCYWNrRm9yd2FyZExpc3RM
aW1pdCk7Ci19Ci0KLXZvaWQgYmVmb3JlQWxsKCkKLXsKLSAgICBrU2VydmVyID0gbmV3IFdlYktp
dFRlc3RTZXJ2ZXIoKTsKLSAgICBrU2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2spOwotCi0gICAg
QmFja0ZvcndhcmRMaXN0VGVzdDo6YWRkKCJCYWNrRm9yd2FyZExpc3QiLCAibmF2aWdhdGlvbiIs
IHRlc3RCYWNrRm9yd2FyZExpc3ROYXZpZ2F0aW9uKTsKLSAgICBCYWNrRm9yd2FyZExpc3RUZXN0
OjphZGQoIkJhY2tGb3J3YXJkTGlzdCIsICJsaXN0LWxpbWl0LWFuZC1jYWNoZSIsIHRlc3RCYWNr
Rm9yd2FyZExpc3RMaW1pdEFuZENhY2hlKTsKLX0KLQotdm9pZCBhZnRlckFsbCgpCi17Ci0gICAg
ZGVsZXRlIGtTZXJ2ZXI7Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL1Rlc3RDb250ZXh0TWVudS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0Q29udGV4dE1lbnUuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBhMjMyOWI5Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RDb250ZXh0TWVudS5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw4NjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCi0jaW5jbHVkZSA8d3Rm
L2dvYmplY3QvR1JlZlB0ci5oPgotCi1jbGFzcyBDb250ZXh0TWVudVRlc3Q6IHB1YmxpYyBXZWJW
aWV3VGVzdCB7Ci1wdWJsaWM6Ci0gICAgZW51bSBDb250ZXh0TWVudUl0ZW1TdGF0ZUZsYWdzIHsK
LSAgICAgICAgVmlzaWJsZSA9IDEgPDwgMCwKLSAgICAgICAgRW5hYmxlZCA9IDEgPDwgMSwKLSAg
ICAgICAgQ2hlY2tlZCA9IDEgPDwgMgotICAgIH07Ci0KLSAgICB2b2lkIGNoZWNrQ29udGV4dE1l
bnVFdmVudChHZGtFdmVudCogZXZlbnQpCi0gICAgewotICAgICAgICBnX2Fzc2VydChldmVudCk7
Ci0gICAgICAgIGdfYXNzZXJ0X2NtcGludChldmVudC0+dHlwZSwgPT0sIEdES19CVVRUT05fUFJF
U1MpOwotICAgICAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnQtPmJ1dHRvbi5idXR0b24sID09LCAz
KTsKLSAgICAgICAgZ19hc3NlcnRfY21waW50KGV2ZW50LT5idXR0b24ueCwgPT0sIG1fbWVudVBv
c2l0aW9uWCk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcGludChldmVudC0+YnV0dG9uLnksID09LCBt
X21lbnVQb3NpdGlvblkpOwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiBjb250ZXh0TWVu
dUNhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdENvbnRleHRNZW51KiBjb250
ZXh0TWVudSwgR2RrRXZlbnQqIGV2ZW50LCBXZWJLaXRIaXRUZXN0UmVzdWx0KiBoaXRUZXN0UmVz
dWx0LCBDb250ZXh0TWVudVRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICBnX2Fzc2VydChXRUJL
SVRfSVNfQ09OVEVYVF9NRU5VKGNvbnRleHRNZW51KSk7Ci0gICAgICAgIHRlc3QtPmFzc2VydE9i
amVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QoY29udGV4dE1lbnUpKTsKLSAg
ICAgICAgdGVzdC0+Y2hlY2tDb250ZXh0TWVudUV2ZW50KGV2ZW50KTsKLSAgICAgICAgZ19hc3Nl
cnQoV0VCS0lUX0lTX0hJVF9URVNUX1JFU1VMVChoaXRUZXN0UmVzdWx0KSk7Ci0gICAgICAgIHRl
c3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QoaGl0VGVz
dFJlc3VsdCkpOwotCi0gICAgICAgIHJldHVybiB0ZXN0LT5jb250ZXh0TWVudShjb250ZXh0TWVu
dSwgZXZlbnQsIGhpdFRlc3RSZXN1bHQpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGNvbnRl
eHRNZW51RGlzbWlzc2VkQ2FsbGJhY2soV2ViS2l0V2ViVmlldyosIENvbnRleHRNZW51VGVzdCog
dGVzdCkKLSAgICB7Ci0gICAgICAgIHRlc3QtPmNvbnRleHRNZW51RGlzbWlzc2VkKCk7Ci0gICAg
fQotCi0gICAgQ29udGV4dE1lbnVUZXN0KCkKLSAgICAgICAgOiBtX21lbnVQb3NpdGlvblgoMCkK
LSAgICAgICAgLCBtX21lbnVQb3NpdGlvblkoMCkKLSAgICB7Ci0gICAgICAgIGdfc2lnbmFsX2Nv
bm5lY3QobV93ZWJWaWV3LCAiY29udGV4dC1tZW51IiwgR19DQUxMQkFDSyhjb250ZXh0TWVudUNh
bGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAiY29u
dGV4dC1tZW51LWRpc21pc3NlZCIsIEdfQ0FMTEJBQ0soY29udGV4dE1lbnVEaXNtaXNzZWRDYWxs
YmFjayksIHRoaXMpOwotICAgIH0KLQotICAgIH5Db250ZXh0TWVudVRlc3QoKQotICAgIHsKLSAg
ICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fd2ViVmlldywgR19T
SUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7Ci0gICAgfQotCi0gICAgdmlydHVh
bCBib29sIGNvbnRleHRNZW51KFdlYktpdENvbnRleHRNZW51KiwgR2RrRXZlbnQqLCBXZWJLaXRI
aXRUZXN0UmVzdWx0KikgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGNvbnRleHRNZW51RGlzbWlz
c2VkKCkKLSAgICB7Ci0gICAgICAgIHF1aXRNYWluTG9vcCgpOwotICAgIH0KLQotICAgIEd0a01l
bnUqIGdldFBvcHVwTWVudSgpCi0gICAgewotICAgICAgICBHT3duUHRyPEdMaXN0PiB0b3BsZXZl
bHMoZ3RrX3dpbmRvd19saXN0X3RvcGxldmVscygpKTsKLSAgICAgICAgZm9yIChHTGlzdCogaXRl
ciA9IHRvcGxldmVscy5nZXQoKTsgaXRlcjsgaXRlciA9IGdfbGlzdF9uZXh0KGl0ZXIpKSB7Ci0g
ICAgICAgICAgICBpZiAoIUdUS19JU19XSU5ET1coaXRlci0+ZGF0YSkpCi0gICAgICAgICAgICAg
ICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIEd0a1dpZGdldCogY2hpbGQgPSBndGtfYmluX2dl
dF9jaGlsZChHVEtfQklOKGl0ZXItPmRhdGEpKTsKLSAgICAgICAgICAgIGlmICghR1RLX0lTX01F
TlUoY2hpbGQpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBpZiAo
Z3RrX21lbnVfZ2V0X2F0dGFjaF93aWRnZXQoR1RLX01FTlUoY2hpbGQpKSA9PSBHVEtfV0lER0VU
KG1fd2ViVmlldykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdUS19NRU5VKGNoaWxkKTsKLSAg
ICAgICAgfQotICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAgICAgICByZXR1cm4g
MDsKLSAgICB9Ci0KLSAgICBib29sIHNob3VsZFNob3dJbnB1dE1ldGhvZHNNZW51KCkKLSAgICB7
Ci0gICAgICAgIEd0a1NldHRpbmdzKiBzZXR0aW5ncyA9IGd0a193aWRnZXRfZ2V0X3NldHRpbmdz
KEdUS19XSURHRVQobV93ZWJWaWV3KSk7Ci0gICAgICAgIGlmICghc2V0dGluZ3MpCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICBnYm9vbGVhbiBzaG93SW5wdXRNZXRob2RNZW51
OwotICAgICAgICBnX29iamVjdF9nZXQoc2V0dGluZ3MsICJndGstc2hvdy1pbnB1dC1tZXRob2Qt
bWVudSIsICZzaG93SW5wdXRNZXRob2RNZW51LCBOVUxMKTsKLSAgICAgICAgcmV0dXJuIHNob3dJ
bnB1dE1ldGhvZE1lbnU7Ci0gICAgfQotCi0gICAgdm9pZCBjaGVja0FjdGlvblN0YXRlKEd0a0Fj
dGlvbiogYWN0aW9uLCB1bnNpZ25lZCBzdGF0ZSkKLSAgICB7Ci0gICAgICAgIGlmIChzdGF0ZSAm
IFZpc2libGUpCi0gICAgICAgICAgICBnX2Fzc2VydChndGtfYWN0aW9uX2dldF92aXNpYmxlKGFj
dGlvbikpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBnX2Fzc2VydCghZ3RrX2FjdGlvbl9n
ZXRfdmlzaWJsZShhY3Rpb24pKTsKLQotICAgICAgICBpZiAoc3RhdGUgJiBFbmFibGVkKQotICAg
ICAgICAgICAgZ19hc3NlcnQoZ3RrX2FjdGlvbl9nZXRfc2Vuc2l0aXZlKGFjdGlvbikpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBnX2Fzc2VydCghZ3RrX2FjdGlvbl9nZXRfc2Vuc2l0aXZl
KGFjdGlvbikpOwotCi0gICAgICAgIGlmIChHVEtfSVNfVE9HR0xFX0FDVElPTihhY3Rpb24pKSB7
Ci0gICAgICAgICAgICBpZiAoc3RhdGUgJiBDaGVja2VkKQotICAgICAgICAgICAgICAgIGdfYXNz
ZXJ0KGd0a190b2dnbGVfYWN0aW9uX2dldF9hY3RpdmUoR1RLX1RPR0dMRV9BQ1RJT04oYWN0aW9u
KSkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGdfYXNzZXJ0KCFndGtfdG9n
Z2xlX2FjdGlvbl9nZXRfYWN0aXZlKEdUS19UT0dHTEVfQUNUSU9OKGFjdGlvbikpKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIEdMaXN0KiBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFu
ZEdldE5leHQoR0xpc3QqIGl0ZW1zLCBXZWJLaXRDb250ZXh0TWVudUFjdGlvbiBzdG9ja0FjdGlv
biwgdW5zaWduZWQgc3RhdGUpCi0gICAgewotICAgICAgICBnX2Fzc2VydChpdGVtcyk7Ci0gICAg
ICAgIGdfYXNzZXJ0KFdFQktJVF9JU19DT05URVhUX01FTlVfSVRFTShpdGVtcy0+ZGF0YSkpOwot
Ci0gICAgICAgIFdlYktpdENvbnRleHRNZW51SXRlbSogaXRlbSA9IFdFQktJVF9DT05URVhUX01F
TlVfSVRFTShpdGVtcy0+ZGF0YSk7Ci0gICAgICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5U
ZXN0RmluaXNoZXMoR19PQkpFQ1QoaXRlbSkpOwotCi0gICAgICAgIEd0a0FjdGlvbiogYWN0aW9u
ID0gd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9hY3Rpb24oaXRlbSk7Ci0gICAgICAgIGdf
YXNzZXJ0KEdUS19JU19BQ1RJT04oYWN0aW9uKSk7Ci0KLSAgICAgICAgZ19hc3NlcnRfY21waW50
KHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRfc3RvY2tfYWN0aW9uKGl0ZW0pLCA9PSwgc3Rv
Y2tBY3Rpb24pOwotCi0gICAgICAgIGNoZWNrQWN0aW9uU3RhdGUoYWN0aW9uLCBzdGF0ZSk7Ci0K
LSAgICAgICAgcmV0dXJuIGdfbGlzdF9uZXh0KGl0ZW1zKTsKLSAgICB9Ci0KLSAgICBHTGlzdCog
Y2hlY2tDdXJyZW50SXRlbUlzQ3VzdG9tQWN0aW9uQW5kR2V0TmV4dChHTGlzdCogaXRlbXMsIGNv
bnN0IGNoYXIqIGxhYmVsLCB1bnNpZ25lZCBzdGF0ZSkKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0
KGl0ZW1zKTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX0NPTlRFWFRfTUVOVV9JVEVNKGl0
ZW1zLT5kYXRhKSk7Ci0KLSAgICAgICAgV2ViS2l0Q29udGV4dE1lbnVJdGVtKiBpdGVtID0gV0VC
S0lUX0NPTlRFWFRfTUVOVV9JVEVNKGl0ZW1zLT5kYXRhKTsKLSAgICAgICAgYXNzZXJ0T2JqZWN0
SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChpdGVtKSk7Ci0KLSAgICAgICAgR3Rr
QWN0aW9uKiBhY3Rpb24gPSB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X2FjdGlvbihpdGVt
KTsKLSAgICAgICAgZ19hc3NlcnQoR1RLX0lTX0FDVElPTihhY3Rpb24pKTsKLQotICAgICAgICBn
X2Fzc2VydF9jbXBpbnQod2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9zdG9ja19hY3Rpb24o
aXRlbSksID09LCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DVVNUT00pOwotICAgICAgICBn
X2Fzc2VydF9jbXBzdHIoZ3RrX2FjdGlvbl9nZXRfbGFiZWwoYWN0aW9uKSwgPT0sIGxhYmVsKTsK
LQotICAgICAgICBjaGVja0FjdGlvblN0YXRlKGFjdGlvbiwgc3RhdGUpOwotCi0gICAgICAgIHJl
dHVybiBnX2xpc3RfbmV4dChpdGVtcyk7Ci0gICAgfQotCi0gICAgR0xpc3QqIGNoZWNrQ3VycmVu
dEl0ZW1Jc1N1Yk1lbnVBbmRHZXROZXh0KEdMaXN0KiBpdGVtcywgY29uc3QgY2hhciogbGFiZWws
IHVuc2lnbmVkIHN0YXRlLCBHTGlzdCoqIHN1Yk1lbnVJdGVyKQotICAgIHsKLSAgICAgICAgZ19h
c3NlcnQoaXRlbXMpOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfQ09OVEVYVF9NRU5VX0lU
RU0oaXRlbXMtPmRhdGEpKTsKLQotICAgICAgICBXZWJLaXRDb250ZXh0TWVudUl0ZW0qIGl0ZW0g
PSBXRUJLSVRfQ09OVEVYVF9NRU5VX0lURU0oaXRlbXMtPmRhdGEpOwotICAgICAgICBhc3NlcnRP
YmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKGl0ZW0pKTsKLQotICAgICAg
ICBHdGtBY3Rpb24qIGFjdGlvbiA9IHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRfYWN0aW9u
KGl0ZW0pOwotICAgICAgICBnX2Fzc2VydChHVEtfSVNfQUNUSU9OKGFjdGlvbikpOwotCi0gICAg
ICAgIGdfYXNzZXJ0X2NtcHN0cihndGtfYWN0aW9uX2dldF9sYWJlbChhY3Rpb24pLCA9PSwgbGFi
ZWwpOwotICAgICAgICBjaGVja0FjdGlvblN0YXRlKGFjdGlvbiwgc3RhdGUpOwotCi0gICAgICAg
IFdlYktpdENvbnRleHRNZW51KiBzdWJNZW51ID0gd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dl
dF9zdWJtZW51KGl0ZW0pOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfQ09OVEVYVF9NRU5V
KHN1Yk1lbnUpKTsKLSAgICAgICAgaWYgKHN1Yk1lbnVJdGVyKQotICAgICAgICAgICAgKnN1Yk1l
bnVJdGVyID0gd2Via2l0X2NvbnRleHRfbWVudV9nZXRfaXRlbXMoc3ViTWVudSk7Ci0KLSAgICAg
ICAgcmV0dXJuIGdfbGlzdF9uZXh0KGl0ZW1zKTsKLSAgICB9Ci0KLSAgICBHTGlzdCogY2hlY2tD
dXJyZW50SXRlbUlzU2VwYXJhdG9yQW5kR2V0TmV4dChHTGlzdCogaXRlbXMpCi0gICAgewotICAg
ICAgICBnX2Fzc2VydChpdGVtcyk7Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19DT05URVhU
X01FTlVfSVRFTShpdGVtcy0+ZGF0YSkpOwotCi0gICAgICAgIFdlYktpdENvbnRleHRNZW51SXRl
bSogaXRlbSA9IFdFQktJVF9DT05URVhUX01FTlVfSVRFTShpdGVtcy0+ZGF0YSk7Ci0gICAgICAg
IGdfYXNzZXJ0KHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9pc19zZXBhcmF0b3IoaXRlbSkpOwot
Ci0gICAgICAgIHJldHVybiBnX2xpc3RfbmV4dChpdGVtcyk7Ci0gICAgfQotCi0gICAgc3RhdGlj
IGdib29sZWFuIGRvUmlnaHRDbGlja0lkbGVDYWxsYmFjayhDb250ZXh0TWVudVRlc3QqIHRlc3Qp
Ci0gICAgewotICAgICAgICB0ZXN0LT5jbGlja01vdXNlQnV0dG9uKHRlc3QtPm1fbWVudVBvc2l0
aW9uWCwgdGVzdC0+bV9tZW51UG9zaXRpb25ZLCAzKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOwot
ICAgIH0KLQotICAgIHZvaWQgc2hvd0NvbnRleHRNZW51QXRQb3NpdGlvbkFuZFdhaXRVbnRpbEZp
bmlzaGVkKGludCB4LCBpbnQgeSkKLSAgICB7Ci0gICAgICAgIG1fbWVudVBvc2l0aW9uWCA9IHg7
Ci0gICAgICAgIG1fbWVudVBvc2l0aW9uWSA9IHk7Ci0gICAgICAgIGdfaWRsZV9hZGQocmVpbnRl
cnByZXRfY2FzdDxHU291cmNlRnVuYz4oZG9SaWdodENsaWNrSWRsZUNhbGxiYWNrKSwgdGhpcyk7
Ci0gICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAgICB9Ci0KLSAgICB2b2lk
IHNob3dDb250ZXh0TWVudUFuZFdhaXRVbnRpbEZpbmlzaGVkKCkKLSAgICB7Ci0gICAgICAgIHNo
b3dDb250ZXh0TWVudUF0UG9zaXRpb25BbmRXYWl0VW50aWxGaW5pc2hlZCgwLCAwKTsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgZ2Jvb2xlYW4gc2ltdWxhdGVFc2NLZXlJZGxlQ2FsbGJhY2soQ29udGV4
dE1lbnVUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+a2V5U3Ryb2tlKEdES19LRVlf
RXNjYXBlKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQotICAgIHZvaWQgZGlzbWlz
c0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmluaXNoZWQoKQotICAgIHsKLSAgICAgICAgZ19pZGxl
X2FkZChyZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihzaW11bGF0ZUVzY0tleUlkbGVDYWxs
YmFjayksIHRoaXMpOwotICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Ci0gICAg
fQotCi0gICAgZG91YmxlIG1fbWVudVBvc2l0aW9uWDsKLSAgICBkb3VibGUgbV9tZW51UG9zaXRp
b25ZOwotfTsKLQotY2xhc3MgQ29udGV4dE1lbnVEZWZhdWx0VGVzdDogcHVibGljIENvbnRleHRN
ZW51VGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShDb250ZXh0TWVu
dURlZmF1bHRUZXN0KTsKLQotICAgIGVudW0gRGVmYXVsdE1lbnVUeXBlIHsKLSAgICAgICAgTmF2
aWdhdGlvbiwKLSAgICAgICAgTGluaywKLSAgICAgICAgSW1hZ2UsCi0gICAgICAgIExpbmtJbWFn
ZSwKLSAgICAgICAgVmlkZW8sCi0gICAgICAgIEF1ZGlvLAotICAgICAgICBFZGl0YWJsZQotICAg
IH07Ci0KLSAgICBDb250ZXh0TWVudURlZmF1bHRUZXN0KCkKLSAgICAgICAgOiBtX2V4cGVjdGVk
TWVudVR5cGUoTmF2aWdhdGlvbikKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBjb250ZXh0TWVu
dShXZWJLaXRDb250ZXh0TWVudSogY29udGV4dE1lbnUsIEdka0V2ZW50KiBldmVudCwgV2ViS2l0
SGl0VGVzdFJlc3VsdCogaGl0VGVzdFJlc3VsdCkKLSAgICB7Ci0gICAgICAgIEdMaXN0KiBpdGVy
ID0gd2Via2l0X2NvbnRleHRfbWVudV9nZXRfaXRlbXMoY29udGV4dE1lbnUpOwotCi0gICAgICAg
IHN3aXRjaCAobV9leHBlY3RlZE1lbnVUeXBlKSB7Ci0gICAgICAgIGNhc2UgTmF2aWdhdGlvbjoK
LSAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNf
bGluayhoaXRUZXN0UmVzdWx0KSk7Ci0gICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90
ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQpKTsKLSAgICAgICAgICAg
IGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbWVkaWEoaGl0VGVz
dFJlc3VsdCkpOwotICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRf
Y29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgICAgICAgICBpdGVyID0g
Y2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05U
RVhUX01FTlVfQUNUSU9OX0dPX0JBQ0ssIFZpc2libGUpOwotICAgICAgICAgICAgaXRlciA9IGNo
ZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVY
VF9NRU5VX0FDVElPTl9HT19GT1JXQVJELCBWaXNpYmxlKTsKLSAgICAgICAgICAgIGl0ZXIgPSBj
aGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fU1RPUCwgVmlzaWJsZSk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tD
dXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01F
TlVfQUNUSU9OX1JFTE9BRCwgVmlzaWJsZSB8IEVuYWJsZWQpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgTGluazoKLSAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVz
dF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RSZXN1bHQpKTsKLSAgICAgICAgICAgIGdf
YXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJl
c3VsdCkpOwotICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29u
dGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgICAgICAgICBnX2Fzc2VydCghd2Vi
a2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsK
LSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5l
eHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9MSU5LLCBWaXNpYmxlIHwg
RW5hYmxlZCk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rp
b25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5fTElOS19J
Tl9ORVdfV0lORE9XLCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgICAgICBpdGVyID0gY2hl
Y2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhU
X01FTlVfQUNUSU9OX0RPV05MT0FEX0xJTktfVE9fRElTSywgVmlzaWJsZSB8IEVuYWJsZWQpOwot
ICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4
dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX0xJTktfVE9fQ0xJUEJPQVJE
LCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJ
bWFnZToKLSAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRl
eHRfaXNfbGluayhoaXRUZXN0UmVzdWx0KSk7Ci0gICAgICAgICAgICBnX2Fzc2VydCh3ZWJraXRf
aGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkpOwotICAgICAg
ICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYSho
aXRUZXN0UmVzdWx0KSk7Ci0gICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jl
c3VsdF9jb250ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKLSAgICAgICAgICAgIGl0
ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lU
X0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9JTUFHRV9JTl9ORVdfV0lORE9XLCBWaXNpYmxlIHwg
RW5hYmxlZCk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rp
b25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0RPV05MT0FEX0lN
QUdFX1RPX0RJU0ssIFZpc2libGUgfCBFbmFibGVkKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVj
a0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRf
TUVOVV9BQ1RJT05fQ09QWV9JTUFHRV9UT19DTElQQk9BUkQsIFZpc2libGUgfCBFbmFibGVkKTsK
LSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5l
eHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9JTUFHRV9VUkxfVE9fQ0xJ
UEJPQVJELCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBMaW5rSW1hZ2U6Ci0gICAgICAgICAgICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVz
dWx0X2NvbnRleHRfaXNfbGluayhoaXRUZXN0UmVzdWx0KSk7Ci0gICAgICAgICAgICBnX2Fzc2Vy
dCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkp
OwotICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9p
c19tZWRpYShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hp
dF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKLSAgICAg
ICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRl
ciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9MSU5LLCBWaXNpYmxlIHwgRW5hYmxl
ZCk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRH
ZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5fTElOS19JTl9ORVdf
V0lORE9XLCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJy
ZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVf
QUNUSU9OX0RPV05MT0FEX0xJTktfVE9fRElTSywgVmlzaWJsZSB8IEVuYWJsZWQpOwotICAgICAg
ICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVy
LCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX0xJTktfVE9fQ0xJUEJPQVJELCBWaXNp
YmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU2Vw
YXJhdG9yQW5kR2V0TmV4dChpdGVyKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJ
dGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T05fT1BFTl9JTUFHRV9JTl9ORVdfV0lORE9XLCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAg
ICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIs
IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0RPV05MT0FEX0lNQUdFX1RPX0RJU0ssIFZpc2li
bGUgfCBFbmFibGVkKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9j
a0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9J
TUFHRV9UT19DTElQQk9BUkQsIFZpc2libGUgfCBFbmFibGVkKTsKLSAgICAgICAgICAgIGl0ZXIg
PSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NP
TlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9JTUFHRV9VUkxfVE9fQ0xJUEJPQVJELCBWaXNpYmxlIHwg
RW5hYmxlZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBWaWRlbzoKLSAgICAg
ICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluayho
aXRUZXN0UmVzdWx0KSk7Ci0gICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jl
c3VsdF9jb250ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQpKTsKLSAgICAgICAgICAgIGdfYXNz
ZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0
KSk7Ci0gICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0
X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1
cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVO
VV9BQ1RJT05fTUVESUFfUExBWSwgVmlzaWJsZSB8IEVuYWJsZWQpOwotICAgICAgICAgICAgaXRl
ciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRf
Q09OVEVYVF9NRU5VX0FDVElPTl9NRURJQV9NVVRFLCBWaXNpYmxlKTsKLSAgICAgICAgICAgIGl0
ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lU
X0NPTlRFWFRfTUVOVV9BQ1RJT05fVE9HR0xFX01FRElBX0NPTlRST0xTLCBWaXNpYmxlIHwgRW5h
YmxlZCB8IENoZWNrZWQpOwotICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0
b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9UT0dH
TEVfTUVESUFfTE9PUCwgVmlzaWJsZSB8IEVuYWJsZWQpOwotICAgICAgICAgICAgaXRlciA9IGNo
ZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVY
VF9NRU5VX0FDVElPTl9FTlRFUl9WSURFT19GVUxMU0NSRUVOLCBWaXNpYmxlIHwgRW5hYmxlZCk7
Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU2VwYXJhdG9yQW5kR2V0TmV4
dChpdGVyKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlv
bkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9WSURFT19M
SU5LX1RPX0NMSVBCT0FSRCwgVmlzaWJsZSB8IEVuYWJsZWQpOwotICAgICAgICAgICAgaXRlciA9
IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09O
VEVYVF9NRU5VX0FDVElPTl9PUEVOX1ZJREVPX0lOX05FV19XSU5ET1csIFZpc2libGUgfCBFbmFi
bGVkKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFu
ZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRE9XTkxPQURfVklERU9f
VE9fRElTSywgVmlzaWJsZSB8IEVuYWJsZWQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQXVkaW86Ci0gICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3Vs
dF9jb250ZXh0X2lzX2xpbmsoaGl0VGVzdFJlc3VsdCkpOwotICAgICAgICAgICAgZ19hc3NlcnQo
IXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0KSk7
Ci0gICAgICAgICAgICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNf
bWVkaWEoaGl0VGVzdFJlc3VsdCkpOwotICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRf
dGVzdF9yZXN1bHRfY29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgICAg
ICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIs
IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX01FRElBX1BMQVksIFZpc2libGUgfCBFbmFibGVk
KTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdl
dE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fTUVESUFfTVVURSwgVmlzaWJs
ZSk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRH
ZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1RPR0dMRV9NRURJQV9DT05U
Uk9MUywgVmlzaWJsZSB8IEVuYWJsZWQgfCBDaGVja2VkKTsKLSAgICAgICAgICAgIGl0ZXIgPSBj
aGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fVE9HR0xFX01FRElBX0xPT1AsIFZpc2libGUgfCBFbmFibGVkKTsKLSAg
ICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQo
aXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRU5URVJfVklERU9fRlVMTFNDUkVFTiwg
VmlzaWJsZSk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU2VwYXJhdG9y
QW5kR2V0TmV4dChpdGVyKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNT
dG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09Q
WV9BVURJT19MSU5LX1RPX0NMSVBCT0FSRCwgVmlzaWJsZSB8IEVuYWJsZWQpOwotICAgICAgICAg
ICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0FVRElPX0lOX05FV19XSU5ET1csIFZpc2li
bGUgfCBFbmFibGVkKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9j
a0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRE9XTkxP
QURfQVVESU9fVE9fRElTSywgVmlzaWJsZSB8IEVuYWJsZWQpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgRWRpdGFibGU6Ci0gICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hp
dF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xpbmsoaGl0VGVzdFJlc3VsdCkpOwotICAgICAgICAg
ICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFnZShoaXRU
ZXN0UmVzdWx0KSk7Ci0gICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3Vs
dF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQpKTsKLSAgICAgICAgICAgIGdfYXNzZXJ0
KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0UmVzdWx0
KSk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRH
ZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NVVCwgVmlzaWJsZSk7Ci0g
ICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0
KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFksIFZpc2libGUpOwotICAgICAg
ICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVy
LCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9QQVNURSwgVmlzaWJsZSB8IEVuYWJsZWQpOwot
ICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4
dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9ERUxFVEUsIFZpc2libGUpOwotICAg
ICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1NlcGFyYXRvckFuZEdldE5leHQoaXRl
cik7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRH
ZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1NFTEVDVF9BTEwsIFZpc2li
bGUgfCBFbmFibGVkKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTZXBh
cmF0b3JBbmRHZXROZXh0KGl0ZXIpOwotICAgICAgICAgICAgaWYgKHNob3VsZFNob3dJbnB1dE1l
dGhvZHNNZW51KCkpCi0gICAgICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0
b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9JTlBV
VF9NRVRIT0RTLCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tD
dXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01F
TlVfQUNUSU9OX1VOSUNPREUsIFZpc2libGUgfCBFbmFibGVkKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmICh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9kZXZl
bG9wZXJfZXh0cmFzKHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3MobV93ZWJWaWV3KSkpIHsK
LSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTZXBhcmF0b3JBbmRHZXROZXh0
KGl0ZXIpOwotICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9u
QW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9JTlNQRUNUX0VMRU1F
TlQsIFZpc2libGUgfCBFbmFibGVkKTsKLSAgICAgICAgfQotICAgICAgICBnX2Fzc2VydCghaXRl
cik7Ci0KLSAgICAgICAgcXVpdE1haW5Mb29wKCk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotCi0gICAgRGVmYXVsdE1lbnVUeXBlIG1fZXhwZWN0ZWRNZW51VHlwZTsKLX07Ci0KLXN0
YXRpYyB2b2lkIHRlc3RDb250ZXh0TWVudURlZmF1bHRNZW51KENvbnRleHRNZW51RGVmYXVsdFRl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2Fp
dFVudGlsTWFwcGVkKCk7Ci0KLSAgICBjb25zdCBjaGFyKiBsaW5rc0hUTUwgPQotICAgICAgICAi
PGh0bWw+PGJvZHk+IgotICAgICAgICAiIDxhIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVm
dDoxOyB0b3A6MScgaHJlZj0naHR0cDovL3d3dy53ZWJraXRndGsub3JnJyB0aXRsZT0nV2ViS2l0
R1RLKyBUaXRsZSc+V2ViS2l0R1RLKyBXZWJzaXRlPC9hPiIKLSAgICAgICAgIiA8aW1nIHN0eWxl
PSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6MTAnIHNyYz0nMHhkZWFkYmVlZicgd2lk
dGg9NSBoZWlnaHQ9NT48L2ltZz4iCi0gICAgICAgICIgPGEgc3R5bGU9J3Bvc2l0aW9uOmFic29s
dXRlOyBsZWZ0OjE7IHRvcDoyMCcgaHJlZj0naHR0cDovL3d3dy53ZWJraXRndGsub3JnL2xvZ28n
IHRpdGxlPSdXZWJLaXRHVEsrIExvZ28nPjxpbWcgc3JjPScweGRlYWRiZWVmJyB3aWR0aD01IGhl
aWdodD01PjwvaW1nPjwvYT4iCi0gICAgICAgICIgPGlucHV0IHN0eWxlPSdwb3NpdGlvbjphYnNv
bHV0ZTsgbGVmdDoxOyB0b3A6MzAnIHNpemU9JzEwJz48L2lucHV0PiIKLSAgICAgICAgIiA8dmlk
ZW8gc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRvcDo1MCcgd2lkdGg9JzMwMCcg
aGVpZ2h0PSczMDAnIGNvbnRyb2xzPSdjb250cm9scycgcHJlbG9hZD0nbm9uZSc+PHNvdXJjZSBz
cmM9J21vdmllLm9nZycgdHlwZT0ndmlkZW8vb2dnJyAvPjwvdmlkZW8+IgotICAgICAgICAiIDxh
dWRpbyBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjYwJyB3aWR0aD0nNTAn
IGhlaWdodD0nMjAnIGNvbnRyb2xzPSdjb250cm9scycgcHJlbG9hZD0nbm9uZSc+PHNvdXJjZSBz
cmM9J3RyYWNrLm1wMycgdHlwZT0nYXVkaW8vbXAzJyAvPjwvYXVkaW8+IgotICAgICAgICAiPC9i
b2R5PjwvaHRtbD4iOwotICAgIHRlc3QtPmxvYWRIdG1sKGxpbmtzSFRNTCwgImZpbGU6Ly8vIik7
Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICAvLyBDb250ZXh0IG1l
bnUgZm9yIGRvY3VtZW50LgotICAgIHRlc3QtPm1fZXhwZWN0ZWRNZW51VHlwZSA9IENvbnRleHRN
ZW51RGVmYXVsdFRlc3Q6Ok5hdmlnYXRpb247Ci0gICAgdGVzdC0+c2hvd0NvbnRleHRNZW51QXRQ
b3NpdGlvbkFuZFdhaXRVbnRpbEZpbmlzaGVkKDAsIDApOwotCi0gICAgLy8gQ29udGV4dCBtZW51
IGZvciBsaW5rLgotICAgIHRlc3QtPm1fZXhwZWN0ZWRNZW51VHlwZSA9IENvbnRleHRNZW51RGVm
YXVsdFRlc3Q6Okxpbms7Ci0gICAgdGVzdC0+c2hvd0NvbnRleHRNZW51QXRQb3NpdGlvbkFuZFdh
aXRVbnRpbEZpbmlzaGVkKDEsIDEpOwotCi0gICAgLy8gQ29udGV4dCBtZW51IGZvciBpbWFnZS4K
LSAgICB0ZXN0LT5tX2V4cGVjdGVkTWVudVR5cGUgPSBDb250ZXh0TWVudURlZmF1bHRUZXN0OjpJ
bWFnZTsKLSAgICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBdFBvc2l0aW9uQW5kV2FpdFVudGlsRmlu
aXNoZWQoMSwgMTApOwotCi0gICAgLy8gRW5hYmxlIGRldmVsb3BlciBleHRyYXMgbm93LCBzbyB0
aGF0IGluc3BlY3RvciBlbGVtZW50Ci0gICAgLy8gd2lsbCBiZSBzaG93biBpbiB0aGUgZGVmYXVs
dCBjb250ZXh0IG1lbnUuCi0gICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfZGV2ZWxvcGVy
X2V4dHJhcyh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHRlc3QtPm1fd2ViVmlldyksIFRS
VUUpOwotCi0gICAgLy8gQ29udGV4dCBtZW51IGZvciBpbWFnZSBsaW5rLgotICAgIHRlc3QtPm1f
ZXhwZWN0ZWRNZW51VHlwZSA9IENvbnRleHRNZW51RGVmYXVsdFRlc3Q6OkxpbmtJbWFnZTsKLSAg
ICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBdFBvc2l0aW9uQW5kV2FpdFVudGlsRmluaXNoZWQoMSwg
MjApOwotCi0gICAgLy8gQ29udGV4dCBtZW51IGZvciB2aWRlby4KLSAgICB0ZXN0LT5tX2V4cGVj
dGVkTWVudVR5cGUgPSBDb250ZXh0TWVudURlZmF1bHRUZXN0OjpWaWRlbzsKLSAgICB0ZXN0LT5z
aG93Q29udGV4dE1lbnVBdFBvc2l0aW9uQW5kV2FpdFVudGlsRmluaXNoZWQoMSwgNTApOwotCi0g
ICAgLy8gQ29udGV4dCBtZW51IGZvciBhdWRpby4KLSAgICB0ZXN0LT5tX2V4cGVjdGVkTWVudVR5
cGUgPSBDb250ZXh0TWVudURlZmF1bHRUZXN0OjpBdWRpbzsKLSAgICB0ZXN0LT5zaG93Q29udGV4
dE1lbnVBdFBvc2l0aW9uQW5kV2FpdFVudGlsRmluaXNoZWQoMSwgNjApOwotCi0gICAgLy8gQ29u
dGV4dCBtZW51IGZvciBlZGl0YWJsZS4KLSAgICB0ZXN0LT5tX2V4cGVjdGVkTWVudVR5cGUgPSBD
b250ZXh0TWVudURlZmF1bHRUZXN0OjpFZGl0YWJsZTsKLSAgICB0ZXN0LT5zaG93Q29udGV4dE1l
bnVBdFBvc2l0aW9uQW5kV2FpdFVudGlsRmluaXNoZWQoNSwgMzUpOwotfQotCi1jbGFzcyBDb250
ZXh0TWVudUN1c3RvbVRlc3Q6IHB1YmxpYyBDb250ZXh0TWVudVRlc3QgewotcHVibGljOgotICAg
IE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoQ29udGV4dE1lbnVDdXN0b21UZXN0KTsKLQotICAgIENv
bnRleHRNZW51Q3VzdG9tVGVzdCgpCi0gICAgICAgIDogbV9pdGVtVG9BY3RpdmF0ZUxhYmVsKDAp
Ci0gICAgICAgICwgbV9hY3RpdmF0ZWQoZmFsc2UpCi0gICAgICAgICwgbV90b2dnbGVkKGZhbHNl
KQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGNvbnRleHRNZW51KFdlYktpdENvbnRleHRNZW51
KiBjb250ZXh0TWVudSwgR2RrRXZlbnQqLCBXZWJLaXRIaXRUZXN0UmVzdWx0KiBoaXRUZXN0UmVz
dWx0KQotICAgIHsKLSAgICAgICAgLy8gQXBwZW5kIG91ciBjdXN0b20gaXRlbSB0byB0aGUgZGVm
YXVsdCBtZW51LgotICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVu
dSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ldyhtX2FjdGlvbi5nZXQoKSkpOwotICAgICAg
ICBxdWl0TWFpbkxvb3AoKTsKLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
R3RrTWVudUl0ZW0qIGdldE1lbnVJdGVtKEd0a01lbnUqIG1lbnUsIGNvbnN0IGdjaGFyKiBpdGVt
TGFiZWwpCi0gICAgewotICAgICAgICBHT3duUHRyPEdMaXN0PiBpdGVtcyhndGtfY29udGFpbmVy
X2dldF9jaGlsZHJlbihHVEtfQ09OVEFJTkVSKG1lbnUpKSk7Ci0gICAgICAgIGZvciAoR0xpc3Qq
IGl0ZXIgPSBpdGVtcy5nZXQoKTsgaXRlcjsgaXRlciA9IGdfbGlzdF9uZXh0KGl0ZXIpKSB7Ci0g
ICAgICAgICAgICBHdGtNZW51SXRlbSogY2hpbGQgPSBHVEtfTUVOVV9JVEVNKGl0ZXItPmRhdGEp
OwotICAgICAgICAgICAgaWYgKGdfc3RyX2VxdWFsKGl0ZW1MYWJlbCwgZ3RrX21lbnVfaXRlbV9n
ZXRfbGFiZWwoY2hpbGQpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQ7Ci0gICAgICAg
IH0KLSAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQotCi0gICAgdm9pZCBhY3RpdmF0ZU1lbnVJdGVtKCkKLSAgICB7Ci0gICAgICAgIGdfYXNz
ZXJ0KG1faXRlbVRvQWN0aXZhdGVMYWJlbCk7Ci0gICAgICAgIEd0a01lbnUqIG1lbnUgPSBnZXRQ
b3B1cE1lbnUoKTsKLSAgICAgICAgR3RrTWVudUl0ZW0qIGl0ZW0gPSBnZXRNZW51SXRlbShtZW51
LCBtX2l0ZW1Ub0FjdGl2YXRlTGFiZWwpOwotICAgICAgICBndGtfbWVudV9zaGVsbF9hY3RpdmF0
ZV9pdGVtKEdUS19NRU5VX1NIRUxMKG1lbnUpLCBHVEtfV0lER0VUKGl0ZW0pLCBUUlVFKTsKLSAg
ICAgICAgbV9pdGVtVG9BY3RpdmF0ZUxhYmVsID0gMDsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZ2Jv
b2xlYW4gYWN0aXZhdGVNZW51SXRlbUlkbGVDYWxsYmFjayhncG9pbnRlciB1c2VyRGF0YSkKLSAg
ICB7Ci0gICAgICAgIENvbnRleHRNZW51Q3VzdG9tVGVzdCogdGVzdCA9IHN0YXRpY19jYXN0PENv
bnRleHRNZW51Q3VzdG9tVGVzdCo+KHVzZXJEYXRhKTsKLSAgICAgICAgdGVzdC0+YWN0aXZhdGVN
ZW51SXRlbSgpOwotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gICAgdm9pZCBhY3Rp
dmF0ZUN1c3RvbU1lbnVJdGVtQW5kV2FpdFVudGlsQWN0aXZhdGVkKGNvbnN0IGNoYXIqIGFjdGlv
bkxhYmVsKQotICAgIHsKLSAgICAgICAgbV9hY3RpdmF0ZWQgPSBtX3RvZ2dsZWQgPSBmYWxzZTsK
LSAgICAgICAgbV9pdGVtVG9BY3RpdmF0ZUxhYmVsID0gYWN0aW9uTGFiZWw7Ci0gICAgICAgIGdf
aWRsZV9hZGQoYWN0aXZhdGVNZW51SXRlbUlkbGVDYWxsYmFjaywgdGhpcyk7Ci0gICAgICAgIGdf
bWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAgICB9Ci0KLSAgICB2b2lkIHRvZ2dsZUN1c3Rv
bU1lbnVJdGVtQW5kV2FpdFVudGlsVG9nZ2xlZChjb25zdCBjaGFyKiBhY3Rpb25MYWJlbCkKLSAg
ICB7Ci0gICAgICAgIGFjdGl2YXRlQ3VzdG9tTWVudUl0ZW1BbmRXYWl0VW50aWxBY3RpdmF0ZWQo
YWN0aW9uTGFiZWwpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGFjdGlvbkFjdGl2YXRlZENh
bGxiYWNrKEd0a0FjdGlvbiosIENvbnRleHRNZW51Q3VzdG9tVGVzdCogdGVzdCkKLSAgICB7Ci0g
ICAgICAgIHRlc3QtPm1fYWN0aXZhdGVkID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9p
ZCBhY3Rpb25Ub2dnbGVkQ2FsbGJhY2soR3RrQWN0aW9uKiwgQ29udGV4dE1lbnVDdXN0b21UZXN0
KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+bV90b2dnbGVkID0gdHJ1ZTsKLSAgICB9Ci0K
LSAgICB2b2lkIHNldEFjdGlvbihHdGtBY3Rpb24qIGFjdGlvbikKLSAgICB7Ci0gICAgICAgIG1f
YWN0aW9uID0gYWN0aW9uOwotICAgICAgICBpZiAoR1RLX0lTX1RPR0dMRV9BQ1RJT04oYWN0aW9u
KSkKLSAgICAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoYWN0aW9uLCAidG9nZ2xlZCIsIEdfQ0FM
TEJBQ0soYWN0aW9uVG9nZ2xlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoYWN0aW9uLCAiYWN0aXZhdGUiLCBHX0NBTExCQUNLKGFj
dGlvbkFjdGl2YXRlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgfQotCi0gICAgR1JlZlB0cjxHdGtB
Y3Rpb24+IG1fYWN0aW9uOwotICAgIGNvbnN0IGNoYXIqIG1faXRlbVRvQWN0aXZhdGVMYWJlbDsK
LSAgICBib29sIG1fYWN0aXZhdGVkOwotICAgIGJvb2wgbV90b2dnbGVkOwotfTsKLQotc3RhdGlj
IHZvaWQgdGVzdENvbnRleHRNZW51UG9wdWxhdGVNZW51KENvbnRleHRNZW51Q3VzdG9tVGVzdCog
dGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50
aWxNYXBwZWQoKTsKLQotICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keT5XZWJLaXRHVEsr
IENvbnRleHQgbWVudSB0ZXN0czwvYm9keT48L2h0bWw+IiwgImZpbGU6Ly8vIik7Ci0gICAgdGVz
dC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICAvLyBDcmVhdGUgYSBjdXN0b20gbWVu
dSBpdGVtLgotICAgIEdSZWZQdHI8R3RrQWN0aW9uPiBhY3Rpb24gPSBhZG9wdEdSZWYoZ3RrX2Fj
dGlvbl9uZXcoIldlYktpdEdUSytDdXN0b21BY3Rpb24iLCAiQ3VzdG9tIF9BY3Rpb24iLCAwLCAw
KSk7Ci0gICAgdGVzdC0+c2V0QWN0aW9uKGFjdGlvbi5nZXQoKSk7Ci0gICAgdGVzdC0+c2hvd0Nv
bnRleHRNZW51QW5kV2FpdFVudGlsRmluaXNoZWQoKTsKLSAgICB0ZXN0LT5hY3RpdmF0ZUN1c3Rv
bU1lbnVJdGVtQW5kV2FpdFVudGlsQWN0aXZhdGVkKGd0a19hY3Rpb25fZ2V0X2xhYmVsKGFjdGlv
bi5nZXQoKSkpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fYWN0aXZhdGVkKTsKLSAgICBnX2Fzc2Vy
dCghdGVzdC0+bV90b2dnbGVkKTsKLQotICAgIC8vIENyZWF0ZSBhIGN1c3RvbSB0b2dnbGUgbWVu
dSBpdGVtLgotICAgIEdSZWZQdHI8R3RrQWN0aW9uPiB0b2dnbGVBY3Rpb24gPSBhZG9wdEdSZWYo
R1RLX0FDVElPTihndGtfdG9nZ2xlX2FjdGlvbl9uZXcoIldlYktpdEdUSytDdXN0b21Ub2dnbGVB
Y3Rpb24iLCAiQ3VzdG9tIF9Ub2dnbGUgQWN0aW9uIiwgMCwgMCkpKTsKLSAgICB0ZXN0LT5zZXRB
Y3Rpb24odG9nZ2xlQWN0aW9uLmdldCgpKTsKLSAgICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBbmRX
YWl0VW50aWxGaW5pc2hlZCgpOwotICAgIHRlc3QtPnRvZ2dsZUN1c3RvbU1lbnVJdGVtQW5kV2Fp
dFVudGlsVG9nZ2xlZChndGtfYWN0aW9uX2dldF9sYWJlbCh0b2dnbGVBY3Rpb24uZ2V0KCkpKTsK
LSAgICBnX2Fzc2VydCghdGVzdC0+bV9hY3RpdmF0ZWQpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1f
dG9nZ2xlZCk7Ci19Ci0KLWNsYXNzIENvbnRleHRNZW51Q3VzdG9tRnVsbFRlc3Q6IHB1YmxpYyBD
b250ZXh0TWVudVRlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoQ29u
dGV4dE1lbnVDdXN0b21GdWxsVGVzdCk7Ci0KLSAgICBib29sIGNvbnRleHRNZW51KFdlYktpdENv
bnRleHRNZW51KiBjb250ZXh0TWVudSwgR2RrRXZlbnQqLCBXZWJLaXRIaXRUZXN0UmVzdWx0KikK
LSAgICB7Ci0gICAgICAgIC8vIENsZWFyIHByb3Bvc2VkIG1lbnUgYW5kIGJ1aWxkIG91ciBvd24u
Ci0gICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfcmVtb3ZlX2FsbChjb250ZXh0TWVudSk7Ci0g
ICAgICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfY29udGV4dF9tZW51X2dldF9uX2l0ZW1zKGNv
bnRleHRNZW51KSwgPT0sIDApOwotCi0gICAgICAgIC8vIEFkZCBhY3Rpb25zIGZyb20gc3RvY2su
Ci0gICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfcHJlcGVuZChjb250ZXh0TWVudSwgd2Via2l0
X2NvbnRleHRfbWVudV9pdGVtX25ld19mcm9tX3N0b2NrX2FjdGlvbihXRUJLSVRfQ09OVEVYVF9N
RU5VX0FDVElPTl9HT19CQUNLKSk7Ci0gICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5k
KGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X2Zyb21fc3RvY2tfYWN0
aW9uKFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0dPX0ZPUldBUkQpKTsKLSAgICAgICAgd2Vi
a2l0X2NvbnRleHRfbWVudV9pbnNlcnQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVf
aXRlbV9uZXdfc2VwYXJhdG9yKCksIDIpOwotCi0gICAgICAgIC8vIEFkZCBjdXN0b20gYWN0aW9u
cy4KLSAgICAgICAgR1JlZlB0cjxHdGtBY3Rpb24+IGFjdGlvbiA9IGFkb3B0R1JlZihndGtfYWN0
aW9uX25ldygiV2ViS2l0R1RLK0N1c3RvbUFjdGlvbiIsICJDdXN0b20gX0FjdGlvbiIsIDAsIDAp
KTsKLSAgICAgICAgZ3RrX2FjdGlvbl9zZXRfc2Vuc2l0aXZlKGFjdGlvbi5nZXQoKSwgRkFMU0Up
OwotICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2luc2VydChjb250ZXh0TWVudSwgd2Via2l0
X2NvbnRleHRfbWVudV9pdGVtX25ldyhhY3Rpb24uZ2V0KCkpLCAtMSk7Ci0gICAgICAgIEdSZWZQ
dHI8R3RrQWN0aW9uPiB0b2dnbGVBY3Rpb24gPSBhZG9wdEdSZWYoR1RLX0FDVElPTihndGtfdG9n
Z2xlX2FjdGlvbl9uZXcoIldlYktpdEdUSytDdXN0b21Ub2dnbGVBY3Rpb24iLCAiQ3VzdG9tIF9U
b2dnbGUgQWN0aW9uIiwgMCwgMCkpKTsKLSAgICAgICAgZ3RrX3RvZ2dsZV9hY3Rpb25fc2V0X2Fj
dGl2ZShHVEtfVE9HR0xFX0FDVElPTih0b2dnbGVBY3Rpb24uZ2V0KCkpLCBUUlVFKTsKLSAgICAg
ICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBlbmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0
X21lbnVfaXRlbV9uZXcodG9nZ2xlQWN0aW9uLmdldCgpKSk7Ci0gICAgICAgIHdlYmtpdF9jb250
ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3
X3NlcGFyYXRvcigpKTsKLQotICAgICAgICAvLyBBZGQgYSBzdWJtZW51LgotICAgICAgICBHUmVm
UHRyPFdlYktpdENvbnRleHRNZW51PiBzdWJNZW51ID0gYWRvcHRHUmVmKHdlYmtpdF9jb250ZXh0
X21lbnVfbmV3KCkpOwotICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlz
aGVzKEdfT0JKRUNUKHN1Yk1lbnUuZ2V0KCkpKTsKLSAgICAgICAgd2Via2l0X2NvbnRleHRfbWVu
dV9pbnNlcnQoc3ViTWVudS5nZXQoKSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19mcm9t
X3N0b2NrX2FjdGlvbl93aXRoX2xhYmVsKFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1NUT1As
ICJTdG9wIExvYWQiKSwgMCk7Ci0gICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfaW5zZXJ0KHN1
Yk1lbnUuZ2V0KCksIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfZnJvbV9zdG9ja19hY3Rp
b24oV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fUkVMT0FEKSwgLTEpOwotICAgICAgICB3ZWJr
aXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9p
dGVtX25ld193aXRoX3N1Ym1lbnUoIkxvYWQgb3B0aW9ucyIsIHN1Yk1lbnUuZ2V0KCkpKTsKLSAg
ICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBlbmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250
ZXh0X21lbnVfaXRlbV9uZXdfc2VwYXJhdG9yKCkpOwotCi0gICAgICAgIC8vIE1vdmUgTG9hZCBz
dWJtZW51IGJlZm9yZSBjdXN0b20gYWN0aW9ucy4KLSAgICAgICAgd2Via2l0X2NvbnRleHRfbWVu
dV9tb3ZlX2l0ZW0oY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfbGFzdChjb250ZXh0
TWVudSksIDMpOwotICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X21vdmVfaXRlbShjb250ZXh0
TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9sYXN0KGNvbnRleHRNZW51KSwgMyk7Ci0KLSAgICAg
ICAgLy8gSWYgbGFzdCBpdGVtIGlzIGEgc2VwYXJhdG9yLCByZW1vdmUgaXQuCi0gICAgICAgIGlm
ICh3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1faXNfc2VwYXJhdG9yKHdlYmtpdF9jb250ZXh0X21l
bnVfbGFzdChjb250ZXh0TWVudSkpKQotICAgICAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9y
ZW1vdmUoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfbGFzdChjb250ZXh0TWVudSkp
OwotCi0gICAgICAgIC8vIENoZWNrIHRoZSBtZW51LgotICAgICAgICBHTGlzdCogaXRlciA9IHdl
YmtpdF9jb250ZXh0X21lbnVfZ2V0X2l0ZW1zKGNvbnRleHRNZW51KTsKLQotICAgICAgICBpdGVy
ID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9D
T05URVhUX01FTlVfQUNUSU9OX0dPX0JBQ0ssIFZpc2libGUgfCBFbmFibGVkKTsKLSAgICAgICAg
aXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9HT19GT1JXQVJELCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0g
ICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTZXBhcmF0b3JBbmRHZXROZXh0KGl0ZXIp
OwotCi0gICAgICAgIEdMaXN0KiBzdWJNZW51SXRlciA9IDA7Ci0gICAgICAgIGl0ZXIgPSBjaGVj
a0N1cnJlbnRJdGVtSXNTdWJNZW51QW5kR2V0TmV4dChpdGVyLCAiTG9hZCBvcHRpb25zIiwgVmlz
aWJsZSB8IEVuYWJsZWQsICZzdWJNZW51SXRlcik7Ci0gICAgICAgIHN1Yk1lbnVJdGVyID0gY2hl
Y2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KHN1Yk1lbnVJdGVyLCBXRUJLSVRf
Q09OVEVYVF9NRU5VX0FDVElPTl9TVE9QLCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgIHN1
Yk1lbnVJdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KHN1Yk1l
bnVJdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9SRUxPQUQsIFZpc2libGUgfCBFbmFi
bGVkKTsKLSAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1NlcGFyYXRvckFuZEdldE5l
eHQoaXRlcik7Ci0KLSAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc0N1c3RvbUFjdGlv
bkFuZEdldE5leHQoaXRlciwgIkN1c3RvbSBfQWN0aW9uIiwgVmlzaWJsZSk7Ci0gICAgICAgIGl0
ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNDdXN0b21BY3Rpb25BbmRHZXROZXh0KGl0ZXIsICJDdXN0
b20gX1RvZ2dsZSBBY3Rpb24iLCBWaXNpYmxlIHwgRW5hYmxlZCB8IENoZWNrZWQpOwotICAgICAg
ICBnX2Fzc2VydCghaXRlcik7Ci0KLSAgICAgICAgcXVpdE1haW5Mb29wKCk7Ci0KLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotfTsKLQotc3RhdGljIHZvaWQgdGVzdENvbnRleHRNZW51Q3Vz
dG9tTWVudShDb250ZXh0TWVudUN1c3RvbUZ1bGxUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQot
ewotICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOwotCi0gICAgdGVz
dC0+bG9hZEh0bWwoIjxodG1sPjxib2R5PldlYktpdEdUSysgQ29udGV4dCBtZW51IHRlc3RzPC9i
b2R5PjwvaHRtbD4iLCAiZmlsZTovLy8iKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNo
ZWQoKTsKLQotICAgIHRlc3QtPnNob3dDb250ZXh0TWVudUFuZFdhaXRVbnRpbEZpbmlzaGVkKCk7
Ci19Ci0KLWNsYXNzIENvbnRleHRNZW51RGlzYWJsZWRUZXN0OiBwdWJsaWMgQ29udGV4dE1lbnVU
ZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKENvbnRleHRNZW51RGlz
YWJsZWRUZXN0KTsKLQotICAgIGVudW0gRGlzYWJsZU1vZGUgewotICAgICAgICBJZ25vcmVDbGlj
a3MsCi0gICAgICAgIElnbm9yZURlZmF1bHRNZW51Ci0gICAgfTsKLQotICAgIHN0YXRpYyBnYm9v
bGVhbiBidXR0b25QcmVzc0V2ZW50Q2FsbGJhY2soR3RrV2lkZ2V0KiwgR2RrRXZlbnQqIGV2ZW50
LCBDb250ZXh0TWVudURpc2FibGVkVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIGlmIChldmVu
dC0+YnV0dG9uLmJ1dHRvbiAhPSAzKQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAg
ICByZXR1cm4gdGVzdC0+cmlnaHRCdXR0b25QcmVzc2VkKCk7Ci0gICAgfQotCi0gICAgQ29udGV4
dE1lbnVEaXNhYmxlZFRlc3QoKQotICAgICAgICA6IG1fZGlzYWJsZU1vZGUoSWdub3JlQ2xpY2tz
KQotICAgIHsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJidXR0b24tcHJl
c3MtZXZlbnQiLCBHX0NBTExCQUNLKGJ1dHRvblByZXNzRXZlbnRDYWxsYmFjayksIHRoaXMpOwot
ICAgIH0KLQotICAgIGJvb2wgY29udGV4dE1lbnUoV2ViS2l0Q29udGV4dE1lbnUqIGNvbnRleHRN
ZW51LCBHZGtFdmVudCosIFdlYktpdEhpdFRlc3RSZXN1bHQqKQotICAgIHsKLSAgICAgICAgaWYg
KG1fZGlzYWJsZU1vZGUgPT0gSWdub3JlQ2xpY2tzKQotICAgICAgICAgICAgZ19hc3NlcnRfbm90
X3JlYWNoZWQoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcXVpdE1haW5Mb29wKCk7Ci0K
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgYm9vbCByaWdodEJ1dHRvblByZXNz
ZWQoKQotICAgIHsKLSAgICAgICAgaWYgKG1fZGlzYWJsZU1vZGUgPT0gSWdub3JlQ2xpY2tzKSB7
Ci0gICAgICAgICAgICBxdWl0TWFpbkxvb3BBZnRlclByb2Nlc3NpbmdQZW5kaW5nRXZlbnRzKCk7
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgRGlzYWJsZU1vZGUgbV9kaXNhYmxlTW9kZTsKLX07Ci0KLXN0YXRp
YyB2b2lkIHRlc3RDb250ZXh0TWVudURpc2FibGVNZW51KENvbnRleHRNZW51RGlzYWJsZWRUZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRV
bnRpbE1hcHBlZCgpOwotCi0gICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxib2R5PldlYktpdEdU
SysgQ29udGV4dCBtZW51IHRlc3RzPC9ib2R5PjwvaHRtbD4iLCAiZmlsZTovLy8iKTsKLSAgICB0
ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIHRlc3QtPm1fZGlzYWJsZU1vZGUg
PSBDb250ZXh0TWVudURpc2FibGVkVGVzdDo6SWdub3JlRGVmYXVsdE1lbnU7Ci0gICAgdGVzdC0+
c2hvd0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmluaXNoZWQoKTsKLQotICAgIHRlc3QtPm1fZGlz
YWJsZU1vZGUgPSBDb250ZXh0TWVudURpc2FibGVkVGVzdDo6SWdub3JlQ2xpY2tzOwotICAgIHRl
c3QtPnNob3dDb250ZXh0TWVudUFuZFdhaXRVbnRpbEZpbmlzaGVkKCk7Ci19Ci0KLWNsYXNzIENv
bnRleHRNZW51U3VibWVudVRlc3Q6IHB1YmxpYyBDb250ZXh0TWVudVRlc3QgewotcHVibGljOgot
ICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoQ29udGV4dE1lbnVTdWJtZW51VGVzdCk7Ci0KLSAg
ICBib29sIGNvbnRleHRNZW51KFdlYktpdENvbnRleHRNZW51KiBjb250ZXh0TWVudSwgR2RrRXZl
bnQqLCBXZWJLaXRIaXRUZXN0UmVzdWx0KikKLSAgICB7Ci0gICAgICAgIHNpemVfdCBtZW51U2l6
ZSA9IHdlYmtpdF9jb250ZXh0X21lbnVfZ2V0X25faXRlbXMoY29udGV4dE1lbnUpOwotICAgICAg
ICBHUmVmUHRyPFdlYktpdENvbnRleHRNZW51PiBzdWJNZW51ID0gYWRvcHRHUmVmKHdlYmtpdF9j
b250ZXh0X21lbnVfbmV3KCkpOwotICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChj
b250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld193aXRoX3N1Ym1lbnUoIlN1
Yk1lbnVJdGVtIiwgc3ViTWVudS5nZXQoKSkpOwotICAgICAgICBnX2Fzc2VydF9jbXB1aW50KHdl
YmtpdF9jb250ZXh0X21lbnVfZ2V0X25faXRlbXMoY29udGV4dE1lbnUpLCA9PSwgbWVudVNpemUg
KyAxKTsKLQotICAgICAgICBHUmVmUHRyPFdlYktpdENvbnRleHRNZW51PiBzdWJNZW51MiA9IGFk
b3B0R1JlZih3ZWJraXRfY29udGV4dF9tZW51X25ldygpKTsKLSAgICAgICAgR1JlZlB0cjxXZWJL
aXRDb250ZXh0TWVudUl0ZW0+IGl0ZW0gPSB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X2Zy
b21fc3RvY2tfYWN0aW9uKFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5fTElOSyk7Ci0K
LSAgICAgICAgLy8gQWRkIHN1Ym1lbnUgdG8gbmV3bHkgY3JlYXRlZCBpdGVtLgotICAgICAgICBn
X2Fzc2VydCghd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9zdWJtZW51KGl0ZW0uZ2V0KCkp
KTsKLSAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX3NldF9zdWJtZW51KGl0ZW0uZ2V0
KCksIHN1Yk1lbnUyLmdldCgpKTsKLSAgICAgICAgZ19hc3NlcnQod2Via2l0X2NvbnRleHRfbWVu
dV9pdGVtX2dldF9zdWJtZW51KGl0ZW0uZ2V0KCkpID09IHN1Yk1lbnUyLmdldCgpKTsKLQotICAg
ICAgICAvLyBSZXBsYWNlIHRoZSBzdWJtZW51LgotICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51
X2l0ZW1fc2V0X3N1Ym1lbnUoaXRlbS5nZXQoKSwgMCk7Ci0gICAgICAgIGdfYXNzZXJ0KCF3ZWJr
aXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X3N1Ym1lbnUoaXRlbS5nZXQoKSkpOwotCi0gICAgICAg
IC8vIFRyeSB0byBhZGQgYSBzdWJtZW51IGFscmVhZHkgYWRkZWQgdG8gYW5vdGhlciBpdGVtLgot
ICAgICAgICByZW1vdmVMb2dGYXRhbEZsYWcoR19MT0dfTEVWRUxfV0FSTklORyk7Ci0gICAgICAg
IHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9zZXRfc3VibWVudShpdGVtLmdldCgpLCBzdWJNZW51
LmdldCgpKTsKLSAgICAgICAgYWRkTG9nRmF0YWxGbGFnKEdfTE9HX0xFVkVMX1dBUk5JTkcpOwot
ICAgICAgICBnX2Fzc2VydCghd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9zdWJtZW51KGl0
ZW0uZ2V0KCkpKTsKLQotICAgICAgICAvLyBBIHJlbW92ZWQgc3VibWVudSBzaG91bGRuJ3QgaGF2
ZSBhIHBhcmVudC4KLSAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX3NldF9zdWJtZW51
KGl0ZW0uZ2V0KCksIHN1Yk1lbnUyLmdldCgpKTsKLSAgICAgICAgZ19hc3NlcnQod2Via2l0X2Nv
bnRleHRfbWVudV9pdGVtX2dldF9zdWJtZW51KGl0ZW0uZ2V0KCkpID09IHN1Yk1lbnUyLmdldCgp
KTsKLQotICAgICAgICBxdWl0TWFpbkxvb3AoKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0Q29udGV4dE1lbnVTdWJNZW51KENvbnRleHRNZW51
U3VibWVudVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+c2hvd0luV2lu
ZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7Ci0KLSAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJv
ZHk+V2ViS2l0R1RLKyBDb250ZXh0IG1lbnUgdGVzdHM8L2JvZHk+PC9odG1sPiIsICJmaWxlOi8v
LyIpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgdGVzdC0+c2hv
d0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmluaXNoZWQoKTsKLX0KLQotY2xhc3MgQ29udGV4dE1l
bnVEaXNtaXNzZWRUZXN0OiBwdWJsaWMgQ29udGV4dE1lbnVUZXN0IHsKLXB1YmxpYzoKLSAgICBN
QUtFX0dMSUJfVEVTVF9GSVhUVVJFKENvbnRleHRNZW51RGlzbWlzc2VkVGVzdCk7Ci0KLSAgICBD
b250ZXh0TWVudURpc21pc3NlZFRlc3QoKQotICAgICAgICA6IG1fZGlzbWlzc2VkKGZhbHNlKQot
ICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGNvbnRleHRNZW51KFdlYktpdENvbnRleHRNZW51KiBj
b250ZXh0TWVudSwgR2RrRXZlbnQqLCBXZWJLaXRIaXRUZXN0UmVzdWx0KikKLSAgICB7Ci0gICAg
ICAgIHF1aXRNYWluTG9vcCgpOwotICAgICAgICAvLyBTaG93IHRoZSBkZWZhdWx0IGNvbnRleHQg
bWVudS4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHZvaWQgY29udGV4dE1l
bnVEaXNtaXNzZWQoKQotICAgIHsKLSAgICAgICAgbV9kaXNtaXNzZWQgPSB0cnVlOwotICAgICAg
ICBDb250ZXh0TWVudVRlc3Q6OmNvbnRleHRNZW51RGlzbWlzc2VkKCk7Ci0gICAgfQotCi0gICAg
dm9pZCBzaG93Q29udGV4dE1lbnVBbmRXYWl0VW50aWxEaXNtaXNzZWQoKQotICAgIHsKLSAgICAg
ICAgc2hvd0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmluaXNoZWQoKTsKLSAgICAgICAgZGlzbWlz
c0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmluaXNoZWQoKTsKLSAgICB9Ci0KLSAgICBib29sIG1f
ZGlzbWlzc2VkOwotfTsKLQotc3RhdGljIHZvaWQgdGVzdENvbnRleHRNZW51RGlzbWlzc2VkKENv
bnRleHRNZW51RGlzbWlzc2VkVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0
LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKLQotICAgIHRlc3QtPmxvYWRIdG1s
KCI8aHRtbD48Ym9keT5XZWJLaXRHVEsrIENvbnRleHQgbWVudSB0ZXN0czwvYm9keT48L2h0bWw+
IiwgImZpbGU6Ly8vIik7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAg
ICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBbmRXYWl0VW50aWxEaXNtaXNzZWQoKTsKLSAgICBnX2Fz
c2VydCh0ZXN0LT5tX2Rpc21pc3NlZCk7Ci19Ci0KLWNsYXNzIENvbnRleHRNZW51U21hcnRTZXBh
cmF0b3JzVGVzdDogcHVibGljIENvbnRleHRNZW51VGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9H
TElCX1RFU1RfRklYVFVSRShDb250ZXh0TWVudVNtYXJ0U2VwYXJhdG9yc1Rlc3QpOwotCi0gICAg
Ym9vbCBjb250ZXh0TWVudShXZWJLaXRDb250ZXh0TWVudSogY29udGV4dE1lbnUsIEdka0V2ZW50
KiwgV2ViS2l0SGl0VGVzdFJlc3VsdCopCi0gICAgewotICAgICAgICB3ZWJraXRfY29udGV4dF9t
ZW51X3JlbW92ZV9hbGwoY29udGV4dE1lbnUpOwotCi0gICAgICAgIHdlYmtpdF9jb250ZXh0X21l
bnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X3NlcGFy
YXRvcigpKTsKLSAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBlbmQoY29udGV4dE1lbnUs
IHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfc2VwYXJhdG9yKCkpOwotICAgICAgICB3ZWJr
aXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9p
dGVtX25ld19mcm9tX3N0b2NrX2FjdGlvbihXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9HT19C
QUNLKSk7Ci0gICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3
ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X2Zyb21fc3RvY2tfYWN0aW9uKFdFQktJVF9DT05U
RVhUX01FTlVfQUNUSU9OX0dPX0ZPUldBUkQpKTsKLSAgICAgICAgd2Via2l0X2NvbnRleHRfbWVu
dV9hcHBlbmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfc2VwYXJh
dG9yKCkpOwotICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwg
d2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19zZXBhcmF0b3IoKSk7Ci0gICAgICAgIHdlYmtp
dF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0
ZW1fbmV3X2Zyb21fc3RvY2tfYWN0aW9uKFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFkp
KTsKLSAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBlbmQoY29udGV4dE1lbnUsIHdlYmtp
dF9jb250ZXh0X21lbnVfaXRlbV9uZXdfc2VwYXJhdG9yKCkpOwotICAgICAgICB3ZWJraXRfY29u
dGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25l
d19mcm9tX3N0b2NrX2FjdGlvbihXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9JTlNQRUNUX0VM
RU1FTlQpKTsKLSAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBlbmQoY29udGV4dE1lbnUs
IHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfc2VwYXJhdG9yKCkpOwotICAgICAgICB3ZWJr
aXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9p
dGVtX25ld19zZXBhcmF0b3IoKSk7Ci0KLSAgICAgICAgcXVpdE1haW5Mb29wKCk7Ci0KLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEd0a01lbnUqIHNob3dDb250ZXh0TWVudUFu
ZEdldEd0a01lbnUoKQotICAgIHsKLSAgICAgICAgc2hvd0NvbnRleHRNZW51QW5kV2FpdFVudGls
RmluaXNoZWQoKTsKLSAgICAgICAgcmV0dXJuIGdldFBvcHVwTWVudSgpOwotICAgIH0KLX07Ci0K
LXN0YXRpYyB2b2lkIHRlc3RDb250ZXh0TWVudVNtYXJ0U2VwYXJhdG9ycyhDb250ZXh0TWVudVNt
YXJ0U2VwYXJhdG9yc1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+c2hv
d0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7Ci0KLSAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0
bWw+PGJvZHk+V2ViS2l0R1RLKyBDb250ZXh0IG1lbnUgdGVzdHM8L2JvZHk+PC9odG1sPiIsICJm
aWxlOi8vLyIpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgR3Rr
TWVudSogbWVudSA9IHRlc3QtPnNob3dDb250ZXh0TWVudUFuZEdldEd0a01lbnUoKTsKLSAgICBn
X2Fzc2VydChtZW51KTsKLQotICAgIC8vIExlYWRpbmcgYW5kIHRyYWlsaW5nIHNlcGFyYXRvcnMg
YXJlIG5vdCBhZGRlZCB0byB0aGUgY29udGV4dCBtZW51LgotICAgIEdPd25QdHI8R0xpc3Q+IG1l
bnVJdGVtcyhndGtfY29udGFpbmVyX2dldF9jaGlsZHJlbihHVEtfQ09OVEFJTkVSKG1lbnUpKSk7
Ci0gICAgZ19hc3NlcnRfY21wdWludChnX2xpc3RfbGVuZ3RoKG1lbnVJdGVtcy5nZXQoKSksID09
LCA2KTsKLSAgICBHdGtXaWRnZXQqIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YSht
ZW51SXRlbXMuZ2V0KCksIDApKTsKLSAgICBnX2Fzc2VydCghR1RLX0lTX1NFUEFSQVRPUl9NRU5V
X0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7Ci0gICAgaXRlbSA9
IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgMSkpOwotICAgIGdf
YXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0X2dl
dF92aXNpYmxlKGl0ZW0pKTsKLSAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEo
bWVudUl0ZW1zLmdldCgpLCAyKSk7Ci0gICAgZ19hc3NlcnQoR1RLX0lTX1NFUEFSQVRPUl9NRU5V
X0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7Ci0gICAgaXRlbSA9
IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgMykpOwotICAgIGdf
YXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0X2dl
dF92aXNpYmxlKGl0ZW0pKTsKLSAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEo
bWVudUl0ZW1zLmdldCgpLCA0KSk7Ci0gICAgZ19hc3NlcnQoR1RLX0lTX1NFUEFSQVRPUl9NRU5V
X0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7Ci0gICAgaXRlbSA9
IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgNSkpOwotICAgIGdf
YXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0X2dl
dF92aXNpYmxlKGl0ZW0pKTsKLQotICAgIC8vIEhpZGluZyBhIG1lbnUgaXRlbSBiZXR3ZWVuIHR3
byBzZXBhcmF0b3JzIGhpZGVzIHRoZSBmb2xsb3dpbmcgc2VwYXJhdG9yLgotICAgIEd0a0FjdGlv
biogYWN0aW9uID0gZ3RrX2FjdGl2YXRhYmxlX2dldF9yZWxhdGVkX2FjdGlvbihHVEtfQUNUSVZB
VEFCTEUoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgMykpKTsKLSAgICBndGtfYWN0
aW9uX3NldF92aXNpYmxlKGFjdGlvbiwgRkFMU0UpOwotICAgIG1lbnVJdGVtcy5zZXQoZ3RrX2Nv
bnRhaW5lcl9nZXRfY2hpbGRyZW4oR1RLX0NPTlRBSU5FUihtZW51KSkpOwotICAgIGdfYXNzZXJ0
X2NtcHVpbnQoZ19saXN0X2xlbmd0aChtZW51SXRlbXMuZ2V0KCkpLCA9PSwgNik7Ci0gICAgaXRl
bSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgMCkpOwotICAg
IGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0
X2dldF92aXNpYmxlKGl0ZW0pKTsKLSAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2Rh
dGEobWVudUl0ZW1zLmdldCgpLCAxKSk7Ci0gICAgZ19hc3NlcnQoIUdUS19JU19TRVBBUkFUT1Jf
TUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOwotICAgIGl0
ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDIpKTsKLSAg
ICBnX2Fzc2VydChHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0
X2dldF92aXNpYmxlKGl0ZW0pKTsKLSAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2Rh
dGEobWVudUl0ZW1zLmdldCgpLCAzKSk7Ci0gICAgZ19hc3NlcnQoIUdUS19JU19TRVBBUkFUT1Jf
TUVOVV9JVEVNKGl0ZW0pICYmICFndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKLSAgICBp
dGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCA0KSk7Ci0g
ICAgZ19hc3NlcnQoR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgIWd0a193aWRn
ZXRfZ2V0X3Zpc2libGUoaXRlbSkpOwotICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhf
ZGF0YShtZW51SXRlbXMuZ2V0KCksIDUpKTsKLSAgICBnX2Fzc2VydCghR1RLX0lTX1NFUEFSQVRP
Ul9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7Ci0gICAg
Z3RrX2FjdGlvbl9zZXRfdmlzaWJsZShhY3Rpb24sIFRSVUUpOwotCi0gICAgLy8gU2hvd2luZyBh
biBhY3Rpb24gYmV0d2VlbiB0d28gc2VwYXJhdG9ycyBzaG93cyB0aGUgaGlkZGVuIHNlcGFyYXRv
ci4KLSAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgp
LCAwKSk7Ci0gICAgZ19hc3NlcnQoIUdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYm
IGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOwotICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdf
bGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDEpKTsKLSAgICBnX2Fzc2VydCghR1RLX0lT
X1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVt
KSk7Ci0gICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQo
KSwgMikpOwotICAgIGdfYXNzZXJ0KEdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYm
IGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOwotICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdf
bGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDMpKTsKLSAgICBnX2Fzc2VydCghR1RLX0lT
X1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVt
KSk7Ci0gICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQo
KSwgNCkpOwotICAgIGdfYXNzZXJ0KEdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYm
IGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOwotICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdf
bGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDUpKTsKLSAgICBnX2Fzc2VydCghR1RLX0lT
X1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVt
KSk7Ci0KLSAgICAvLyBUcmFpbGluZyBzZXBhcmF0b3JzIGFyZSBoaWRkZW4gdG9vLgotICAgIGFj
dGlvbiA9IGd0a19hY3RpdmF0YWJsZV9nZXRfcmVsYXRlZF9hY3Rpb24oR1RLX0FDVElWQVRBQkxF
KGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDUpKSk7Ci0gICAgZ3RrX2FjdGlvbl9z
ZXRfdmlzaWJsZShhY3Rpb24sIEZBTFNFKTsKLSAgICBtZW51SXRlbXMuc2V0KGd0a19jb250YWlu
ZXJfZ2V0X2NoaWxkcmVuKEdUS19DT05UQUlORVIobWVudSkpKTsKLSAgICBpdGVtID0gR1RLX1dJ
REdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCAwKSk7Ci0gICAgZ19hc3NlcnQo
IUdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2li
bGUoaXRlbSkpOwotICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRl
bXMuZ2V0KCksIDEpKTsKLSAgICBnX2Fzc2VydCghR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0o
aXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7Ci0gICAgaXRlbSA9IEdUS19X
SURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgMikpOwotICAgIGdfYXNzZXJ0
KEdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2li
bGUoaXRlbSkpOwotICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRl
bXMuZ2V0KCksIDMpKTsKLSAgICBnX2Fzc2VydCghR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0o
aXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7Ci0gICAgaXRlbSA9IEdUS19X
SURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgNCkpOwotICAgIGdfYXNzZXJ0
KEdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmICFndGtfd2lkZ2V0X2dldF92aXNp
YmxlKGl0ZW0pKTsKLSAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0
ZW1zLmdldCgpLCA1KSk7Ci0gICAgZ19hc3NlcnQoIUdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVN
KGl0ZW0pICYmICFndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKLX0KLQotdm9pZCBiZWZv
cmVBbGwoKQotewotICAgIENvbnRleHRNZW51RGVmYXVsdFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmll
dyIsICJkZWZhdWx0LW1lbnUiLCB0ZXN0Q29udGV4dE1lbnVEZWZhdWx0TWVudSk7Ci0gICAgQ29u
dGV4dE1lbnVDdXN0b21UZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAicG9wdWxhdGUtbWVudSIs
IHRlc3RDb250ZXh0TWVudVBvcHVsYXRlTWVudSk7Ci0gICAgQ29udGV4dE1lbnVDdXN0b21GdWxs
VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImN1c3RvbS1tZW51IiwgdGVzdENvbnRleHRNZW51
Q3VzdG9tTWVudSk7Ci0gICAgQ29udGV4dE1lbnVEaXNhYmxlZFRlc3Q6OmFkZCgiV2ViS2l0V2Vi
VmlldyIsICJkaXNhYmxlLW1lbnUiLCB0ZXN0Q29udGV4dE1lbnVEaXNhYmxlTWVudSk7Ci0gICAg
Q29udGV4dE1lbnVTdWJtZW51VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInN1Ym1lbnUiLCB0
ZXN0Q29udGV4dE1lbnVTdWJNZW51KTsKLSAgICBDb250ZXh0TWVudURpc21pc3NlZFRlc3Q6OmFk
ZCgiV2ViS2l0V2ViVmlldyIsICJtZW51LWRpc21pc3NlZCIsIHRlc3RDb250ZXh0TWVudURpc21p
c3NlZCk7Ci0gICAgQ29udGV4dE1lbnVTbWFydFNlcGFyYXRvcnNUZXN0OjphZGQoIldlYktpdFdl
YlZpZXciLCAic21hcnQtc2VwYXJhdG9ycyIsIHRlc3RDb250ZXh0TWVudVNtYXJ0U2VwYXJhdG9y
cyk7Ci19Ci0KLXZvaWQgYWZ0ZXJBbGwoKQotewotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdENvb2tpZU1hbmFnZXIuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdENvb2tpZU1hbmFnZXIuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZGM2YjViLi4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RDb29raWVNYW5hZ2VyLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDMzMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEy
IElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIldlYktpdFRlc3RT
ZXJ2ZXIuaCIKLSNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlv
Lmg+Ci0KLXN0YXRpYyBXZWJLaXRUZXN0U2VydmVyKiBrU2VydmVyOwotc3RhdGljIGNoYXIqIGtU
ZW1wRGlyZWN0b3J5OwotCi1zdGF0aWMgY29uc3QgY2hhcioga0ZpcnN0UGFydHlEb21haW4gPSAi
MTI3LjAuMC4xIjsKLXN0YXRpYyBjb25zdCBjaGFyKiBrVGhpcmRQYXJ0eURvbWFpbiA9ICJsb2Nh
bGhvc3QiOwotc3RhdGljIGNvbnN0IGNoYXIqIGtJbmRleEh0bWxGb3JtYXQgPQotICAgICI8aHRt
bD48Ym9keT4iCi0gICAgIiA8cD5XZWJLaXRHVEsrIENvb2tpZSBNYW5hZ2VyIHRlc3Q8L3A+Igot
ICAgICIgPGltZyBzcmM9J2h0dHA6Ly9sb2NhbGhvc3Q6JXUvaW1hZ2UucG5nJyB3aWR0aD01IGhl
aWdodD01PjwvaW1nPiIKLSAgICAiPC9ib2R5PjwvaHRtbD4iOwotCi1jbGFzcyBDb29raWVNYW5h
Z2VyVGVzdDogcHVibGljIFdlYlZpZXdUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVT
VF9GSVhUVVJFKENvb2tpZU1hbmFnZXJUZXN0KTsKLQotICAgIHN0YXRpYyB2b2lkIGNvb2tpZXND
aGFuZ2VkQ2FsbGJhY2soV2ViS2l0Q29va2llTWFuYWdlciosIENvb2tpZU1hbmFnZXJUZXN0KiB0
ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+bV9jb29raWVzQ2hhbmdlZCA9IHRydWU7Ci0gICAg
ICAgIGlmICh0ZXN0LT5tX2ZpbmlzaExvb3BXaGVuQ29va2llc0NoYW5nZSkKLSAgICAgICAgICAg
IGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgQ29va2ll
TWFuYWdlclRlc3QoKQotICAgICAgICA6IFdlYlZpZXdUZXN0KCkKLSAgICAgICAgLCBtX2Nvb2tp
ZU1hbmFnZXIod2Via2l0X3dlYl9jb250ZXh0X2dldF9jb29raWVfbWFuYWdlcih3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X2NvbnRleHQobV93ZWJWaWV3KSkpCi0gICAgICAgICwgbV9hY2NlcHRQb2xpY3ko
V0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX05PX1RISVJEX1BBUlRZKQotICAgICAgICAsIG1f
ZG9tYWlucygwKQotICAgICAgICAsIG1fY29va2llc0NoYW5nZWQoZmFsc2UpCi0gICAgICAgICwg
bV9maW5pc2hMb29wV2hlbkNvb2tpZXNDaGFuZ2UoZmFsc2UpCi0gICAgewotICAgICAgICBnX3Np
Z25hbF9jb25uZWN0KG1fY29va2llTWFuYWdlciwgImNoYW5nZWQiLCBHX0NBTExCQUNLKGNvb2tp
ZXNDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKLSAgICB9Ci0KLSAgICB+Q29va2llTWFuYWdlclRl
c3QoKQotICAgIHsKLSAgICAgICAgZ19zdHJmcmVldihtX2RvbWFpbnMpOwotICAgICAgICBnX3Np
Z25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9jb29raWVNYW5hZ2VyLCBHX1NJR05B
TF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKLSAgICAgICAgaWYgKG1fY29va2llc1Rl
eHRGaWxlKQotICAgICAgICAgICAgZ191bmxpbmsobV9jb29raWVzVGV4dEZpbGUuZ2V0KCkpOwot
ICAgICAgICBpZiAobV9jb29raWVzU1FMaXRlRmlsZSkKLSAgICAgICAgICAgIGdfdW5saW5rKG1f
Y29va2llc1NRTGl0ZUZpbGUuZ2V0KCkpOwotICAgIH0KLQotICAgIHZvaWQgc2V0UGVyc2lzdGVu
dFN0b3JhZ2UoV2ViS2l0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Ugc3RvcmFnZSkKLSAgICB7Ci0g
ICAgICAgIGNvbnN0IGNoYXIqIGZpbGVuYW1lID0gMDsKLSAgICAgICAgc3dpdGNoIChzdG9yYWdl
KSB7Ci0gICAgICAgIGNhc2UgV0VCS0lUX0NPT0tJRV9QRVJTSVNURU5UX1NUT1JBR0VfVEVYVDoK
LSAgICAgICAgICAgIGlmICghbV9jb29raWVzVGV4dEZpbGUpCi0gICAgICAgICAgICAgICAgbV9j
b29raWVzVGV4dEZpbGUuc2V0KGdfYnVpbGRfZmlsZW5hbWUoa1RlbXBEaXJlY3RvcnksICJjb29r
aWVzLnR4dCIsIE5VTEwpKTsKLSAgICAgICAgICAgIGZpbGVuYW1lID0gbV9jb29raWVzVGV4dEZp
bGUuZ2V0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXRUJLSVRfQ09PS0lF
X1BFUlNJU1RFTlRfU1RPUkFHRV9TUUxJVEU6Ci0gICAgICAgICAgICBpZiAoIW1fY29va2llc1NR
TGl0ZUZpbGUpCi0gICAgICAgICAgICAgICAgbV9jb29raWVzU1FMaXRlRmlsZS5zZXQoZ19idWls
ZF9maWxlbmFtZShrVGVtcERpcmVjdG9yeSwgImNvb2tpZXMuZGIiLCBOVUxMKSk7Ci0gICAgICAg
ICAgICBmaWxlbmFtZSA9IG1fY29va2llc1NRTGl0ZUZpbGUuZ2V0KCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVk
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX3NldF9wZXJzaXN0
ZW50X3N0b3JhZ2UobV9jb29raWVNYW5hZ2VyLCBmaWxlbmFtZSwgc3RvcmFnZSk7Ci0gICAgfQot
Ci0gICAgc3RhdGljIHZvaWQgZ2V0QWNjZXB0UG9saWN5UmVhZHlDYWxsYmFjayhHT2JqZWN0KiBv
YmplY3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkKLSAgICB7Ci0g
ICAgICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKLSAgICAgICAgV2ViS2l0Q29va2llQWNjZXB0
UG9saWN5IHBvbGljeSA9IHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfYWNjZXB0X3BvbGljeV9m
aW5pc2goV0VCS0lUX0NPT0tJRV9NQU5BR0VSKG9iamVjdCksIHJlc3VsdCwgJmVycm9yLm91dFB0
cigpKTsKLSAgICAgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKLQotICAgICAgICBDb29raWVN
YW5hZ2VyVGVzdCogdGVzdCA9IHN0YXRpY19jYXN0PENvb2tpZU1hbmFnZXJUZXN0Kj4odXNlckRh
dGEpOwotICAgICAgICB0ZXN0LT5tX2FjY2VwdFBvbGljeSA9IHBvbGljeTsKLSAgICAgICAgZ19t
YWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKLSAgICB9Ci0KLSAgICBXZWJLaXRDb29r
aWVBY2NlcHRQb2xpY3kgZ2V0QWNjZXB0UG9saWN5KCkKLSAgICB7Ci0gICAgICAgIG1fYWNjZXB0
UG9saWN5ID0gV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX05PX1RISVJEX1BBUlRZOwotICAg
ICAgICB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2FjY2VwdF9wb2xpY3kobV9jb29raWVNYW5h
Z2VyLCAwLCBnZXRBY2NlcHRQb2xpY3lSZWFkeUNhbGxiYWNrLCB0aGlzKTsKLSAgICAgICAgZ19t
YWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotCi0gICAgICAgIHJldHVybiBtX2FjY2VwdFBvbGlj
eTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldEFjY2VwdFBvbGljeShXZWJLaXRDb29raWVBY2NlcHRQ
b2xpY3kgcG9saWN5KQotICAgIHsKLSAgICAgICAgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX3NldF9h
Y2NlcHRfcG9saWN5KG1fY29va2llTWFuYWdlciwgcG9saWN5KTsKLSAgICB9Ci0KLSAgICBzdGF0
aWMgdm9pZCBnZXREb21haW5zUmVhZHlDYWxsYmFjayhHT2JqZWN0KiBvYmplY3QsIEdBc3luY1Jl
c3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkKLSAgICB7Ci0gICAgICAgIEdPd25QdHI8
R0Vycm9yPiBlcnJvcjsKLSAgICAgICAgY2hhcioqIGRvbWFpbnMgPSB3ZWJraXRfY29va2llX21h
bmFnZXJfZ2V0X2RvbWFpbnNfd2l0aF9jb29raWVzX2ZpbmlzaChXRUJLSVRfQ09PS0lFX01BTkFH
RVIob2JqZWN0KSwgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpOwotICAgICAgICBnX2Fzc2VydCgh
ZXJyb3IuZ2V0KCkpOwotCi0gICAgICAgIENvb2tpZU1hbmFnZXJUZXN0KiB0ZXN0ID0gc3RhdGlj
X2Nhc3Q8Q29va2llTWFuYWdlclRlc3QqPih1c2VyRGF0YSk7Ci0gICAgICAgIHRlc3QtPm1fZG9t
YWlucyA9IGRvbWFpbnM7Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9v
cCk7Ci0gICAgfQotCi0gICAgY2hhcioqIGdldERvbWFpbnMoKQotICAgIHsKLSAgICAgICAgZ19z
dHJmcmVldihtX2RvbWFpbnMpOwotICAgICAgICBtX2RvbWFpbnMgPSAwOwotICAgICAgICB3ZWJr
aXRfY29va2llX21hbmFnZXJfZ2V0X2RvbWFpbnNfd2l0aF9jb29raWVzKG1fY29va2llTWFuYWdl
ciwgMCwgZ2V0RG9tYWluc1JlYWR5Q2FsbGJhY2ssIHRoaXMpOwotICAgICAgICBnX21haW5fbG9v
cF9ydW4obV9tYWluTG9vcCk7Ci0KLSAgICAgICAgcmV0dXJuIG1fZG9tYWluczsKLSAgICB9Ci0K
LSAgICBib29sIGhhc0RvbWFpbihjb25zdCBjaGFyKiBkb21haW4pCi0gICAgewotICAgICAgICBp
ZiAoIW1fZG9tYWlucykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgbV9kb21haW5zW2ldOyArK2kpCi0gICAgICAgICAgICBpZiAoZ19zdHJf
ZXF1YWwobV9kb21haW5zW2ldLCBkb21haW4pKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgdm9pZCBkZWxldGVDb29raWVz
Rm9yRG9tYWluKGNvbnN0IGNoYXIqIGRvbWFpbikKLSAgICB7Ci0gICAgICAgIHdlYmtpdF9jb29r
aWVfbWFuYWdlcl9kZWxldGVfY29va2llc19mb3JfZG9tYWluKG1fY29va2llTWFuYWdlciwgZG9t
YWluKTsKLSAgICB9Ci0KLSAgICB2b2lkIGRlbGV0ZUFsbENvb2tpZXMoKQotICAgIHsKLSAgICAg
ICAgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9hbGxfY29va2llcyhtX2Nvb2tpZU1hbmFn
ZXIpOwotICAgIH0KLQotICAgIHZvaWQgd2FpdFVudGlsQ29va2llc0NoYW5nZWQoKQotICAgIHsK
LSAgICAgICAgbV9jb29raWVzQ2hhbmdlZCA9IGZhbHNlOwotICAgICAgICBtX2ZpbmlzaExvb3BX
aGVuQ29va2llc0NoYW5nZSA9IHRydWU7Ci0gICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5M
b29wKTsKLSAgICAgICAgbV9maW5pc2hMb29wV2hlbkNvb2tpZXNDaGFuZ2UgPSBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBXZWJLaXRDb29raWVNYW5hZ2VyKiBtX2Nvb2tpZU1hbmFnZXI7Ci0gICAgV2Vi
S2l0Q29va2llQWNjZXB0UG9saWN5IG1fYWNjZXB0UG9saWN5OwotICAgIGNoYXIqKiBtX2RvbWFp
bnM7Ci0gICAgYm9vbCBtX2Nvb2tpZXNDaGFuZ2VkOwotICAgIGJvb2wgbV9maW5pc2hMb29wV2hl
bkNvb2tpZXNDaGFuZ2U7Ci0gICAgR093blB0cjxjaGFyPiBtX2Nvb2tpZXNUZXh0RmlsZTsKLSAg
ICBHT3duUHRyPGNoYXI+IG1fY29va2llc1NRTGl0ZUZpbGU7Ci19OwotCi1zdGF0aWMgdm9pZCB0
ZXN0Q29va2llTWFuYWdlckFjY2VwdFBvbGljeShDb29raWVNYW5hZ2VyVGVzdCogdGVzdCwgZ2Nv
bnN0cG9pbnRlcikKLXsKLSAgICAvLyBEZWZhdWx0IHBvbGljeSBpcyBOT19USElSRF9QQVJUWS4K
LSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+Z2V0QWNjZXB0UG9saWN5KCksID09LCBXRUJLSVRf
Q09PS0lFX1BPTElDWV9BQ0NFUFRfTk9fVEhJUkRfUEFSVFkpOwotICAgIHRlc3QtPmxvYWRVUkko
a1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2luZGV4Lmh0bWwiKS5kYXRhKCkpOwotICAgIHRlc3Qt
PndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGNoYXIqKiBkb21haW5zID0gdGVzdC0+Z2V0
RG9tYWlucygpOwotICAgIGdfYXNzZXJ0KGRvbWFpbnMpOwotICAgIGdfYXNzZXJ0X2NtcGludChn
X3N0cnZfbGVuZ3RoKGRvbWFpbnMpLCA9PSwgMSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKGRvbWFp
bnNbMF0sID09LCBrRmlyc3RQYXJ0eURvbWFpbik7Ci0gICAgdGVzdC0+ZGVsZXRlQWxsQ29va2ll
cygpOwotCi0gICAgdGVzdC0+c2V0QWNjZXB0UG9saWN5KFdFQktJVF9DT09LSUVfUE9MSUNZX0FD
Q0VQVF9BTFdBWVMpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5nZXRBY2NlcHRQb2xpY3ko
KSwgPT0sIFdFQktJVF9DT09LSUVfUE9MSUNZX0FDQ0VQVF9BTFdBWVMpOwotICAgIHRlc3QtPmxv
YWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2luZGV4Lmh0bWwiKS5kYXRhKCkpOwotICAg
IHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGRvbWFpbnMgPSB0ZXN0LT5nZXRE
b21haW5zKCk7Ci0gICAgZ19hc3NlcnQoZG9tYWlucyk7Ci0gICAgZ19hc3NlcnRfY21waW50KGdf
c3Rydl9sZW5ndGgoZG9tYWlucyksID09LCAyKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5oYXNEb21h
aW4oa0ZpcnN0UGFydHlEb21haW4pKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5oYXNEb21haW4oa1Ro
aXJkUGFydHlEb21haW4pKTsKLSAgICB0ZXN0LT5kZWxldGVBbGxDb29raWVzKCk7Ci0KLSAgICB0
ZXN0LT5zZXRBY2NlcHRQb2xpY3koV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX05FVkVSKTsK
LSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+Z2V0QWNjZXB0UG9saWN5KCksID09LCBXRUJLSVRf
Q09PS0lFX1BPTElDWV9BQ0NFUFRfTkVWRVIpOwotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+
Z2V0VVJJRm9yUGF0aCgiL2luZGV4Lmh0bWwiKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRp
bExvYWRGaW5pc2hlZCgpOwotICAgIGRvbWFpbnMgPSB0ZXN0LT5nZXREb21haW5zKCk7Ci0gICAg
Z19hc3NlcnQoZG9tYWlucyk7Ci0gICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgoZG9t
YWlucyksID09LCAwKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdENvb2tpZU1hbmFnZXJEZWxldGVD
b29raWVzKENvb2tpZU1hbmFnZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRl
c3QtPnNldEFjY2VwdFBvbGljeShXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfQUxXQVlTKTsK
LSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbmRleC5odG1sIiku
ZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0LT5nZXREb21haW5zKCkpLCA9PSwgMik7Ci0KLSAg
ICAvLyBEZWxldGUgZmlyc3QgcGFydHkgY29va2llcy4KLSAgICB0ZXN0LT5kZWxldGVDb29raWVz
Rm9yRG9tYWluKGtGaXJzdFBhcnR5RG9tYWluKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2
X2xlbmd0aCh0ZXN0LT5nZXREb21haW5zKCkpLCA9PSwgMSk7Ci0KLSAgICAvLyBEZWxldGUgdGhp
cmQgcGFydHkgY29va2llcy4KLSAgICB0ZXN0LT5kZWxldGVDb29raWVzRm9yRG9tYWluKGtUaGly
ZFBhcnR5RG9tYWluKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0LT5n
ZXREb21haW5zKCkpLCA9PSwgMCk7Ci0KLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVS
SUZvclBhdGgoIi9pbmRleC5odG1sIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2Fk
RmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0LT5nZXRE
b21haW5zKCkpLCA9PSwgMik7Ci0KLSAgICAvLyBEZWxldGUgYWxsIGNvb2tpZXMuCi0gICAgdGVz
dC0+ZGVsZXRlQWxsQ29va2llcygpOwotICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3Ro
KHRlc3QtPmdldERvbWFpbnMoKSksID09LCAwKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdENvb2tp
ZU1hbmFnZXJDb29raWVzQ2hhbmdlZChDb29raWVNYW5hZ2VyVGVzdCogdGVzdCwgZ2NvbnN0cG9p
bnRlcikKLXsKLSAgICBnX2Fzc2VydCghdGVzdC0+bV9jb29raWVzQ2hhbmdlZCk7Ci0gICAgdGVz
dC0+c2V0QWNjZXB0UG9saWN5KFdFQktJVF9DT09LSUVfUE9MSUNZX0FDQ0VQVF9BTFdBWVMpOwot
ICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2luZGV4Lmh0bWwiKS5k
YXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGdfYXNzZXJ0
KHRlc3QtPm1fY29va2llc0NoYW5nZWQpOwotCi0gICAgdGVzdC0+ZGVsZXRlQ29va2llc0ZvckRv
bWFpbihrRmlyc3RQYXJ0eURvbWFpbik7Ci0gICAgdGVzdC0+d2FpdFVudGlsQ29va2llc0NoYW5n
ZWQoKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX2Nvb2tpZXNDaGFuZ2VkKTsKLQotICAgIHRlc3Qt
PmRlbGV0ZUFsbENvb2tpZXMoKTsKLSAgICB0ZXN0LT53YWl0VW50aWxDb29raWVzQ2hhbmdlZCgp
OwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fY29va2llc0NoYW5nZWQpOwotfQotCi1zdGF0aWMgdm9p
ZCB0ZXN0Q29va2llTWFuYWdlclBlcnNpc3RlbnRTdG9yYWdlKENvb2tpZU1hbmFnZXJUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPnNldEFjY2VwdFBvbGljeShXRUJLSVRf
Q09PS0lFX1BPTElDWV9BQ0NFUFRfQUxXQVlTKTsKLQotICAgIC8vIFRleHQgc3RvcmFnZSB1c2lu
ZyBhIG5ldyBmaWxlLgotICAgIHRlc3QtPnNldFBlcnNpc3RlbnRTdG9yYWdlKFdFQktJVF9DT09L
SUVfUEVSU0lTVEVOVF9TVE9SQUdFX1RFWFQpOwotICAgIGNoYXIqKiBkb21haW5zID0gdGVzdC0+
Z2V0RG9tYWlucygpOwotICAgIGdfYXNzZXJ0KGRvbWFpbnMpOwotICAgIGdfYXNzZXJ0X2NtcGlu
dChnX3N0cnZfbGVuZ3RoKGRvbWFpbnMpLCA9PSwgMCk7Ci0KLSAgICB0ZXN0LT5sb2FkVVJJKGtT
ZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbmRleC5odG1sIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53
YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX2Nvb2tpZXNDaGFu
Z2VkKTsKLSAgICBkb21haW5zID0gdGVzdC0+Z2V0RG9tYWlucygpOwotICAgIGdfYXNzZXJ0KGRv
bWFpbnMpOwotICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKGRvbWFpbnMpLCA9PSwg
Mik7Ci0KLQotICAgIC8vIFNRTGl0ZSBzdG9yYWdlIHVzaW5nIGEgbmV3IGZpbGUuCi0gICAgdGVz
dC0+c2V0UGVyc2lzdGVudFN0b3JhZ2UoV0VCS0lUX0NPT0tJRV9QRVJTSVNURU5UX1NUT1JBR0Vf
U1FMSVRFKTsKLSAgICBkb21haW5zID0gdGVzdC0+Z2V0RG9tYWlucygpOwotICAgIGdfYXNzZXJ0
KGRvbWFpbnMpOwotICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKGRvbWFpbnMpLCA9
PSwgMCk7Ci0KLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbmRl
eC5odG1sIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAg
ICBnX2Fzc2VydCh0ZXN0LT5tX2Nvb2tpZXNDaGFuZ2VkKTsKLSAgICBkb21haW5zID0gdGVzdC0+
Z2V0RG9tYWlucygpOwotICAgIGdfYXNzZXJ0KGRvbWFpbnMpOwotICAgIGdfYXNzZXJ0X2NtcGlu
dChnX3N0cnZfbGVuZ3RoKGRvbWFpbnMpLCA9PSwgMik7Ci0KLSAgICAvLyBUZXh0IHN0b3JhZ2Ug
dXNpbmcgYW4gZXhpc3RpbmcgZmlsZS4KLSAgICB0ZXN0LT5zZXRQZXJzaXN0ZW50U3RvcmFnZShX
RUJLSVRfQ09PS0lFX1BFUlNJU1RFTlRfU1RPUkFHRV9URVhUKTsKLSAgICBkb21haW5zID0gdGVz
dC0+Z2V0RG9tYWlucygpOwotICAgIGdfYXNzZXJ0KGRvbWFpbnMpOwotICAgIGdfYXNzZXJ0X2Nt
cGludChnX3N0cnZfbGVuZ3RoKGRvbWFpbnMpLCA9PSwgMik7Ci0gICAgdGVzdC0+ZGVsZXRlQWxs
Q29va2llcygpOwotICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKHRlc3QtPmdldERv
bWFpbnMoKSksID09LCAwKTsKLQotICAgIC8vIFNRTGl0ZSBzdG9yYWdlIHdpdGggYW4gZXhpc3Rp
bmcgZmlsZS4KLSAgICB0ZXN0LT5zZXRQZXJzaXN0ZW50U3RvcmFnZShXRUJLSVRfQ09PS0lFX1BF
UlNJU1RFTlRfU1RPUkFHRV9TUUxJVEUpOwotICAgIGRvbWFpbnMgPSB0ZXN0LT5nZXREb21haW5z
KCk7Ci0gICAgZ19hc3NlcnQoZG9tYWlucyk7Ci0gICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9s
ZW5ndGgoZG9tYWlucyksID09LCAyKTsKLSAgICB0ZXN0LT5kZWxldGVBbGxDb29raWVzKCk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlucygpKSwgPT0s
IDApOwotfQotCi1zdGF0aWMgdm9pZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBzZXJ2ZXIs
IFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiwgU291
cENsaWVudENvbnRleHQqLCBncG9pbnRlcikKLXsKLSAgICBpZiAobWVzc2FnZS0+bWV0aG9kICE9
IFNPVVBfTUVUSE9EX0dFVCkgewotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNz
YWdlLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0sp
OwotICAgIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2luZGV4Lmh0bWwiKSkgewotICAgICAgICBj
aGFyKiBpbmRleEh0bWwgPSBnX3N0cmR1cF9wcmludGYoa0luZGV4SHRtbEZvcm1hdCwgc291cF9z
ZXJ2ZXJfZ2V0X3BvcnQoc2VydmVyKSk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX3Jl
cGxhY2UobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIlNldC1Db29raWUiLCAiZm9vPWJhcjsg
TWF4LUFnZT02MCIpOwotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+
cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgaW5kZXhIdG1sLCBzdHJsZW4oaW5kZXhI
dG1sKSk7Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2ltYWdlLnBuZyIpKQot
ICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19yZXBsYWNlKG1lc3NhZ2UtPnJlc3BvbnNlX2hl
YWRlcnMsICJTZXQtQ29va2llIiwgImJhej1xdXg7IE1heC1BZ2U9NjAiKTsKLSAgICBlbHNlCi0g
ICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9G
T1VORCk7Ci0gICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2Vf
Ym9keSk7Ci19Ci0KLXZvaWQgYmVmb3JlQWxsKCkKLXsKLSAgICBrU2VydmVyID0gbmV3IFdlYktp
dFRlc3RTZXJ2ZXIoKTsKLSAgICBrU2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2spOwotCi0gICAg
a1RlbXBEaXJlY3RvcnkgPSBnX2Rpcl9tYWtlX3RtcCgiV2ViS2l0MlRlc3RzLVhYWFhYWCIsIDAp
OwotICAgIGdfYXNzZXJ0KGtUZW1wRGlyZWN0b3J5KTsKLQotICAgIENvb2tpZU1hbmFnZXJUZXN0
OjphZGQoIldlYktpdENvb2tpZU1hbmFnZXIiLCAiYWNjZXB0LXBvbGljeSIsIHRlc3RDb29raWVN
YW5hZ2VyQWNjZXB0UG9saWN5KTsKLSAgICBDb29raWVNYW5hZ2VyVGVzdDo6YWRkKCJXZWJLaXRD
b29raWVNYW5hZ2VyIiwgImRlbGV0ZS1jb29raWVzIiwgdGVzdENvb2tpZU1hbmFnZXJEZWxldGVD
b29raWVzKTsKLSAgICBDb29raWVNYW5hZ2VyVGVzdDo6YWRkKCJXZWJLaXRDb29raWVNYW5hZ2Vy
IiwgImNvb2tpZXMtY2hhbmdlZCIsIHRlc3RDb29raWVNYW5hZ2VyQ29va2llc0NoYW5nZWQpOwot
ICAgIENvb2tpZU1hbmFnZXJUZXN0OjphZGQoIldlYktpdENvb2tpZU1hbmFnZXIiLCAicGVyc2lz
dGVudC1zdG9yYWdlIiwgdGVzdENvb2tpZU1hbmFnZXJQZXJzaXN0ZW50U3RvcmFnZSk7Ci19Ci0K
LXZvaWQgYWZ0ZXJBbGwoKQotewotICAgIGRlbGV0ZSBrU2VydmVyOwotICAgIGdfcm1kaXIoa1Rl
bXBEaXJlY3RvcnkpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvVGVzdERPTU5vZGUuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvVGVzdERPTU5vZGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBiZDMyMDc3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL1Rlc3RET01Ob2RlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LQotI2luY2x1ZGUgIldlYlByb2Nlc3NUZXN0UnVubmVyLmgiCi0jaW5jbHVkZSAiV2ViVmlld1Rl
c3QuaCIKLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+
Ci0KLXN0YXRpYyBXZWJQcm9jZXNzVGVzdFJ1bm5lciogdGVzdFJ1bm5lcjsKLQotc3RhdGljIHZv
aWQgdGVzdFdlYktpdERPTU5vZGVIaWVyYXJjaHlOYXZpZ2F0aW9uKFdlYlZpZXdUZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQotewotICAgIHN0YXRpYyBjb25zdCBjaGFyKiB0ZXN0SFRNTCA9ICI8
aHRtbD48aGVhZD48dGl0bGU+VGhpcyBpcyB0aGUgdGl0bGU8L3RpdGxlPjwvaGVhZD48Ym9keT48
cD4xPC9wPjxwPjI8L3A+PHA+MzwvcD48L2JvZHk+PC9odG1sPiI7Ci0gICAgdGVzdC0+bG9hZEh0
bWwodGVzdEhUTUwsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0g
ICAgR1ZhcmlhbnRCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgZ192YXJpYW50X2J1aWxkZXJfaW5pdCgm
YnVpbGRlciwgR19WQVJJQU5UX1RZUEVfVkFSRElDVCk7Ci0gICAgZ192YXJpYW50X2J1aWxkZXJf
YWRkKCZidWlsZGVyLCAie3N2fSIsICJwYWdlSUQiLCBnX3ZhcmlhbnRfbmV3X3VpbnQ2NCh3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X3BhZ2VfaWQodGVzdC0+bV93ZWJWaWV3KSkpOwotICAgIGdfYXNzZXJ0
KHRlc3RSdW5uZXItPnJ1blRlc3QoIldlYktpdERPTU5vZGUiLCAiaGllcmFyY2h5LW5hdmlnYXRp
b24iLCBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQoJmJ1aWxkZXIpKSk7Ci19Ci0KLXN0YXRpYyB2b2lk
IHRlc3RXZWJLaXRET01Ob2RlSW5zZXJ0aW9uKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2lu
dGVyKQotewotICAgIHN0YXRpYyBjb25zdCBjaGFyKiB0ZXN0SFRNTCA9ICI8aHRtbD48Ym9keT48
L2JvZHk+PC9odG1sPiI7Ci0gICAgdGVzdC0+bG9hZEh0bWwodGVzdEhUTUwsIDApOwotICAgIHRl
c3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgR1ZhcmlhbnRCdWlsZGVyIGJ1aWxk
ZXI7Ci0gICAgZ192YXJpYW50X2J1aWxkZXJfaW5pdCgmYnVpbGRlciwgR19WQVJJQU5UX1RZUEVf
VkFSRElDVCk7Ci0gICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKCZidWlsZGVyLCAie3N2fSIsICJw
YWdlSUQiLCBnX3ZhcmlhbnRfbmV3X3VpbnQ2NCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3BhZ2VfaWQo
dGVzdC0+bV93ZWJWaWV3KSkpOwotICAgIGdfYXNzZXJ0KHRlc3RSdW5uZXItPnJ1blRlc3QoIldl
YktpdERPTU5vZGUiLCAiaW5zZXJ0aW9uIiwgZ192YXJpYW50X2J1aWxkZXJfZW5kKCZidWlsZGVy
KSkpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViS2l0RE9NTm9kZVRhZ05hbWVzKFdlYlZpZXdU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHN0YXRpYyBjb25zdCBjaGFyKiB0ZXN0
SFRNTCA9ICI8aHRtbD48aGVhZD48L2hlYWQ+PGJvZHk+IgotICAgICAgICAiPHZpZGVvIGlkPSd2
aWRlbycgcHJlbG9hZD0nbm9uZSc+IgotICAgICAgICAiICAgIDxzb3VyY2Ugc3JjPSdtb3ZpZS5v
Z2cnIHR5cGU9J3ZpZGVvL29nZyc+IgotICAgICAgICAiICAgICAgICBZb3VyIGJyb3dzZXIgZG9l
cyBub3Qgc3VwcG9ydCB0aGUgdmlkZW8gdGFnLiIKLSAgICAgICAgIjwvdmlkZW8+IgotICAgICAg
ICAiPHZpZGVvIGlkPSd2aWRlbzInIHByZWxvYWQ9J25vbmUnPiIKLSAgICAgICAgIiAgICAgPHNv
dXJjZSBzcmM9J21vdmllLm9nZycgdHlwZT0ndmlkZW8vb2dnJz4iCi0gICAgICAgICIgICAgICAg
IFlvdXIgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSB2aWRlbyB0YWcuIgotICAgICAgICAi
PC92aWRlbz4iCi0gICAgICAgICI8aW5wdXQgdHlwZT0naGlkZGVuJyBpZD0ndGVzdCcgbmFtZT0n
ZmluaXNoJyB2YWx1ZT0nZmFsc2UnPjwvYm9keT48L2h0bWw+IjsKLSAgICB0ZXN0LT5sb2FkSHRt
bCh0ZXN0SFRNTCwgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAg
ICBHVmFyaWFudEJ1aWxkZXIgYnVpbGRlcjsKLSAgICBnX3ZhcmlhbnRfYnVpbGRlcl9pbml0KCZi
dWlsZGVyLCBHX1ZBUklBTlRfVFlQRV9WQVJESUNUKTsKLSAgICBnX3ZhcmlhbnRfYnVpbGRlcl9h
ZGQoJmJ1aWxkZXIsICJ7c3Z9IiwgInBhZ2VJRCIsIGdfdmFyaWFudF9uZXdfdWludDY0KHdlYmtp
dF93ZWJfdmlld19nZXRfcGFnZV9pZCh0ZXN0LT5tX3dlYlZpZXcpKSk7Ci0gICAgZ19hc3NlcnQo
dGVzdFJ1bm5lci0+cnVuVGVzdCgiV2ViS2l0RE9NTm9kZSIsICJ0YWctbmFtZXMiLCBnX3Zhcmlh
bnRfYnVpbGRlcl9lbmQoJmJ1aWxkZXIpKSk7Ci19Ci0KLXZvaWQgYmVmb3JlQWxsKCkKLXsKLSAg
ICB0ZXN0UnVubmVyID0gbmV3IFdlYlByb2Nlc3NUZXN0UnVubmVyKCk7Ci0gICAgd2Via2l0X3dl
Yl9jb250ZXh0X3NldF93ZWJfZXh0ZW5zaW9uc19kaXJlY3Rvcnkod2Via2l0X3dlYl9jb250ZXh0
X2dldF9kZWZhdWx0KCksIFdFQktJVF9URVNUX1dFQl9FWFRFTlNJT05TX0RJUik7Ci0KLSAgICBX
ZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRET01Ob2RlIiwgImhpZXJhcmNoeS1uYXZpZ2F0aW9uIiwg
dGVzdFdlYktpdERPTU5vZGVIaWVyYXJjaHlOYXZpZ2F0aW9uKTsKLSAgICBXZWJWaWV3VGVzdDo6
YWRkKCJXZWJLaXRET01Ob2RlIiwgImluc2VydGlvbiIsIHRlc3RXZWJLaXRET01Ob2RlSW5zZXJ0
aW9uKTsKLSAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRET01Ob2RlIiwgInRhZy1uYW1lcyIs
IHRlc3RXZWJLaXRET01Ob2RlVGFnTmFtZXMpOwotfQotCi12b2lkIGFmdGVyQWxsKCkKLXsKLSAg
ICBkZWxldGUgdGVzdFJ1bm5lcjsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3REb3dubG9hZHMuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdERvd25sb2Fkcy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGNlMTU5OTAuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvVGVzdERvd25sb2Fkcy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1
MjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJXZWJLaXRUZXN0U2VydmVyLmgiCi0jaW5jbHVkZSAi
V2ViVmlld1Rlc3QuaCIKLSNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgotI2luY2x1ZGUgPGd0ay9n
dGsuaD4KLSNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNp
bmNsdWRlIDx3ZWJraXQyL3dlYmtpdDIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5j
bHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQ
dHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLXN0YXRpYyBjaGFyKiBrVGVt
cERpcmVjdG9yeTsKLQotY2xhc3MgRG93bmxvYWRUZXN0OiBwdWJsaWMgVGVzdCB7Ci1wdWJsaWM6
Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShEb3dubG9hZFRlc3QpOwotCi0gICAgZW51bSBE
b3dubG9hZEV2ZW50IHsKLSAgICAgICAgU3RhcnRlZCwKLSAgICAgICAgUmVjZWl2ZWRSZXNwb25z
ZSwKLSAgICAgICAgQ3JlYXRlZERlc3RpbmF0aW9uLAotICAgICAgICBSZWNlaXZlZERhdGEsCi0g
ICAgICAgIEZhaWxlZCwKLSAgICAgICAgRmluaXNoZWQKLSAgICB9OwotCi0gICAgc3RhdGljIHZv
aWQgcmVjZWl2ZWRSZXNwb25zZUNhbGxiYWNrKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgR1Bh
cmFtU3BlYyosIERvd25sb2FkVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0KHdl
YmtpdF9kb3dubG9hZF9nZXRfcmVzcG9uc2UoZG93bmxvYWQpKTsKLSAgICAgICAgdGVzdC0+cmVj
ZWl2ZWRSZXNwb25zZShkb3dubG9hZCk7Ci0gICAgfQotCi0gICAgc3RhdGljIGdib29sZWFuIGNy
ZWF0ZWREZXN0aW5hdGlvbkNhbGxiYWNrKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgY29uc3Qg
Z2NoYXIqIGRlc3RpbmF0aW9uLCBEb3dubG9hZFRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICBn
X2Fzc2VydCh3ZWJraXRfZG93bmxvYWRfZ2V0X2Rlc3RpbmF0aW9uKGRvd25sb2FkKSk7Ci0gICAg
ICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfZG93bmxvYWRfZ2V0X2Rlc3RpbmF0aW9uKGRvd25s
b2FkKSwgPT0sIGRlc3RpbmF0aW9uKTsKLSAgICAgICAgdGVzdC0+Y3JlYXRlZERlc3RpbmF0aW9u
KGRvd25sb2FkLCBkZXN0aW5hdGlvbik7Ci0gICAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQot
ICAgIHN0YXRpYyBnYm9vbGVhbiByZWNlaXZlZERhdGFDYWxsYmFjayhXZWJLaXREb3dubG9hZCog
ZG93bmxvYWQsIGd1aW50NjQgZGF0YUxlbmd0aCwgRG93bmxvYWRUZXN0KiB0ZXN0KQotICAgIHsK
LSAgICAgICAgdGVzdC0+cmVjZWl2ZWREYXRhKGRvd25sb2FkLCBkYXRhTGVuZ3RoKTsKLSAgICAg
ICAgcmV0dXJuIFRSVUU7Ci0gICAgfQotCi0gICAgc3RhdGljIGdib29sZWFuIGZpbmlzaGVkQ2Fs
bGJhY2soV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBEb3dubG9hZFRlc3QqIHRlc3QpCi0gICAg
ewotICAgICAgICB0ZXN0LT5maW5pc2hlZChkb3dubG9hZCk7Ci0gICAgICAgIHJldHVybiBUUlVF
OwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiBmYWlsZWRDYWxsYmFjayhXZWJLaXREb3du
bG9hZCogZG93bmxvYWQsIEdFcnJvciogZXJyb3IsIERvd25sb2FkVGVzdCogdGVzdCkKLSAgICB7
Ci0gICAgICAgIGdfYXNzZXJ0KGVycm9yKTsKLSAgICAgICAgdGVzdC0+ZmFpbGVkKGRvd25sb2Fk
LCBlcnJvcik7Ci0gICAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9v
bGVhbiBkZWNpZGVEZXN0aW5hdGlvbkNhbGxiYWNrKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwg
Y29uc3QgZ2NoYXIqIHN1Z2dlc3RlZEZpbGVuYW1lLCBEb3dubG9hZFRlc3QqIHRlc3QpCi0gICAg
ewotICAgICAgICBnX2Fzc2VydChzdWdnZXN0ZWRGaWxlbmFtZSk7Ci0gICAgICAgIHRlc3QtPmRl
Y2lkZURlc3RpbmF0aW9uKGRvd25sb2FkLCBzdWdnZXN0ZWRGaWxlbmFtZSk7Ci0gICAgICAgIHJl
dHVybiBUUlVFOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGRvd25sb2FkU3RhcnRlZENhbGxi
YWNrKFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwg
RG93bmxvYWRUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgZ19hc3NlcnQod2Via2l0X2Rvd25s
b2FkX2dldF9yZXF1ZXN0KGRvd25sb2FkKSk7Ci0gICAgICAgIHRlc3QtPnN0YXJ0ZWQoZG93bmxv
YWQpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGRvd25sb2FkLCAibm90aWZ5OjpyZXNwb25z
ZSIsIEdfQ0FMTEJBQ0socmVjZWl2ZWRSZXNwb25zZUNhbGxiYWNrKSwgdGVzdCk7Ci0gICAgICAg
IGdfc2lnbmFsX2Nvbm5lY3QoZG93bmxvYWQsICJjcmVhdGVkLWRlc3RpbmF0aW9uIiwgR19DQUxM
QkFDSyhjcmVhdGVkRGVzdGluYXRpb25DYWxsYmFjayksIHRlc3QpOwotICAgICAgICBnX3NpZ25h
bF9jb25uZWN0KGRvd25sb2FkLCAicmVjZWl2ZWQtZGF0YSIsIEdfQ0FMTEJBQ0socmVjZWl2ZWRE
YXRhQ2FsbGJhY2spLCB0ZXN0KTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChkb3dubG9hZCwg
ImZpbmlzaGVkIiwgR19DQUxMQkFDSyhmaW5pc2hlZENhbGxiYWNrKSwgdGVzdCk7Ci0gICAgICAg
IGdfc2lnbmFsX2Nvbm5lY3QoZG93bmxvYWQsICJmYWlsZWQiLCBHX0NBTExCQUNLKGZhaWxlZENh
bGxiYWNrKSwgdGVzdCk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoZG93bmxvYWQsICJkZWNp
ZGUtZGVzdGluYXRpb24iLCBHX0NBTExCQUNLKGRlY2lkZURlc3RpbmF0aW9uQ2FsbGJhY2spLCB0
ZXN0KTsKLSAgICB9Ci0KLSAgICBEb3dubG9hZFRlc3QoKQotICAgICAgICA6IG1fd2ViQ29udGV4
dCh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSkKLSAgICAgICAgLCBtX21haW5Mb29w
KGdfbWFpbl9sb29wX25ldygwLCBUUlVFKSkKLSAgICAgICAgLCBtX2Rvd25sb2FkU2l6ZSgwKQot
ICAgIHsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYkNvbnRleHQsICJkb3dubG9hZC1z
dGFydGVkIiwgR19DQUxMQkFDSyhkb3dubG9hZFN0YXJ0ZWRDYWxsYmFjayksIHRoaXMpOwotICAg
IH0KLQotICAgIH5Eb3dubG9hZFRlc3QoKQotICAgIHsKLSAgICAgICAgZ19zaWduYWxfaGFuZGxl
cnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fd2ViQ29udGV4dCwgR19TSUdOQUxfTUFUQ0hfREFUQSwg
MCwgMCwgMCwgMCwgdGhpcyk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3VucmVmKG1fbWFpbkxvb3Ap
OwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBzdGFydGVkKFdlYktpdERvd25sb2FkKiBkb3du
bG9hZCkKLSAgICB7Ci0gICAgICAgIG1fZG93bmxvYWRFdmVudHMuYXBwZW5kKFN0YXJ0ZWQpOwot
ICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlZFJlc3BvbnNlKFdlYktpdERvd25sb2Fk
KiBkb3dubG9hZCkKLSAgICB7Ci0gICAgICAgIG1fZG93bmxvYWRFdmVudHMuYXBwZW5kKFJlY2Vp
dmVkUmVzcG9uc2UpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVkRGVzdGluYXRp
b24oV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBjb25zdCBjaGFyKiBkZXN0aW5hdGlvbikKLSAg
ICB7Ci0gICAgICAgIG1fZG93bmxvYWRFdmVudHMuYXBwZW5kKENyZWF0ZWREZXN0aW5hdGlvbik7
Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHJlY2VpdmVkRGF0YShXZWJLaXREb3dubG9hZCog
ZG93bmxvYWQsIGd1aW50NjQgZGF0YUxlbmd0aCkKLSAgICB7Ci0gICAgICAgIG1fZG93bmxvYWRT
aXplICs9IGRhdGFMZW5ndGg7Ci0gICAgICAgIGlmICghbV9kb3dubG9hZEV2ZW50cy5jb250YWlu
cyhSZWNlaXZlZERhdGEpKQotICAgICAgICAgICAgbV9kb3dubG9hZEV2ZW50cy5hcHBlbmQoUmVj
ZWl2ZWREYXRhKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZmluaXNoZWQoV2ViS2l0RG93
bmxvYWQqIGRvd25sb2FkKQotICAgIHsKLSAgICAgICAgZ19hc3NlcnRfY21wdWludChtX2Rvd25s
b2FkU2l6ZSwgPT0sIHdlYmtpdF9kb3dubG9hZF9nZXRfcmVjZWl2ZWRfZGF0YV9sZW5ndGgoZG93
bmxvYWQpKTsKLSAgICAgICAgbV9kb3dubG9hZEV2ZW50cy5hcHBlbmQoRmluaXNoZWQpOwotICAg
ICAgICBnX21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIHZpcnR1YWwg
dm9pZCBmYWlsZWQoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBHRXJyb3IqIGVycm9yKQotICAg
IHsKLSAgICAgICAgbV9kb3dubG9hZEV2ZW50cy5hcHBlbmQoRmFpbGVkKTsKLSAgICB9Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgZGVjaWRlRGVzdGluYXRpb24oV2ViS2l0RG93bmxvYWQqIGRvd25sb2Fk
LCBjb25zdCBnY2hhciogc3VnZ2VzdGVkRmlsZW5hbWUpCi0gICAgewotICAgICAgICBHT3duUHRy
PGNoYXI+IGRlc3RpbmF0aW9uKGdfYnVpbGRfZmlsZW5hbWUoa1RlbXBEaXJlY3RvcnksIHN1Z2dl
c3RlZEZpbGVuYW1lLCBOVUxMKSk7Ci0gICAgICAgIEdPd25QdHI8Y2hhcj4gZGVzdGluYXRpb25V
UkkoZ19maWxlbmFtZV90b191cmkoZGVzdGluYXRpb24uZ2V0KCksIDAsIDApKTsKLSAgICAgICAg
d2Via2l0X2Rvd25sb2FkX3NldF9kZXN0aW5hdGlvbihkb3dubG9hZCwgZGVzdGluYXRpb25VUkku
Z2V0KCkpOwotICAgIH0KLQotICAgIFdlYktpdERvd25sb2FkKiBkb3dubG9hZFVSSUFuZFdhaXRV
bnRpbEZpbmlzaGVzKGNvbnN0IENTdHJpbmcmIHJlcXVlc3RVUkkpCi0gICAgewotICAgICAgICBX
ZWJLaXREb3dubG9hZCogZG93bmxvYWQgPSB3ZWJraXRfd2ViX2NvbnRleHRfZG93bmxvYWRfdXJp
KG1fd2ViQ29udGV4dCwgcmVxdWVzdFVSSS5kYXRhKCkpOwotICAgICAgICBhc3NlcnRPYmplY3RJ
c0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKGRvd25sb2FkKSk7Ci0KLSAgICAgICAg
V2ViS2l0VVJJUmVxdWVzdCogcmVxdWVzdCA9IHdlYmtpdF9kb3dubG9hZF9nZXRfcmVxdWVzdChk
b3dubG9hZCk7Ci0gICAgICAgIGdfYXNzZXJ0KHJlcXVlc3QpOwotICAgICAgICBBU1NFUlRfQ01Q
X0NTVFJJTkcod2Via2l0X3VyaV9yZXF1ZXN0X2dldF91cmkocmVxdWVzdCksID09LCByZXF1ZXN0
VVJJKTsKLQotICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Ci0KLSAgICAgICAg
cmV0dXJuIGRvd25sb2FkOwotICAgIH0KLQotICAgIHZvaWQgY2hlY2tEZXN0aW5hdGlvbkFuZERl
bGV0ZUZpbGUoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBjb25zdCBjaGFyKiBleHBlY3RlZE5h
bWUpCi0gICAgewotICAgICAgICBpZiAoIXdlYmtpdF9kb3dubG9hZF9nZXRfZGVzdGluYXRpb24o
ZG93bmxvYWQpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBHUmVmUHRyPEdGaWxlPiBk
ZXN0RmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl91cmkod2Via2l0X2Rvd25sb2FkX2dl
dF9kZXN0aW5hdGlvbihkb3dubG9hZCkpKTsKLSAgICAgICAgR093blB0cjxjaGFyPiBkZXN0QmFz
ZW5hbWUoZ19maWxlX2dldF9iYXNlbmFtZShkZXN0RmlsZS5nZXQoKSkpOwotICAgICAgICBnX2Fz
c2VydF9jbXBzdHIoZGVzdEJhc2VuYW1lLmdldCgpLCA9PSwgZXhwZWN0ZWROYW1lKTsKLQotICAg
ICAgICBnX2ZpbGVfZGVsZXRlKGRlc3RGaWxlLmdldCgpLCAwLCAwKTsKLSAgICB9Ci0KLSAgICBX
ZWJLaXRXZWJDb250ZXh0KiBtX3dlYkNvbnRleHQ7Ci0gICAgR01haW5Mb29wKiBtX21haW5Mb29w
OwotICAgIFZlY3RvcjxEb3dubG9hZEV2ZW50PiBtX2Rvd25sb2FkRXZlbnRzOwotICAgIGd1aW50
NjQgbV9kb3dubG9hZFNpemU7Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0RG93bmxvYWRMb2NhbEZp
bGUoRG93bmxvYWRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIEdPd25QdHI8Y2hh
cj4gc291cmNlUGF0aChnX2J1aWxkX2ZpbGVuYW1lKFRlc3Q6OmdldFdlYktpdDFUZXN0UmVzb3Vj
ZXNEaXIoKS5kYXRhKCksICJ0ZXN0LnBkZiIsIE5VTEwpKTsKLSAgICBHUmVmUHRyPEdGaWxlPiBz
b3VyY2UgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0aChzb3VyY2VQYXRoLmdldCgpKSk7
Ci0gICAgR1JlZlB0cjxHRmlsZUluZm8+IHNvdXJjZUluZm8gPSBhZG9wdEdSZWYoZ19maWxlX3F1
ZXJ5X2luZm8oc291cmNlLmdldCgpLCBHX0ZJTEVfQVRUUklCVVRFX1NUQU5EQVJEX1NJWkUsIHN0
YXRpY19jYXN0PEdGaWxlUXVlcnlJbmZvRmxhZ3M+KDApLCAwLCAwKSk7Ci0gICAgR093blB0cjxj
aGFyPiBzb3VyY2VVUkkoZ19maWxlX2dldF91cmkoc291cmNlLmdldCgpKSk7Ci0gICAgR1JlZlB0
cjxXZWJLaXREb3dubG9hZD4gZG93bmxvYWQgPSBhZG9wdEdSZWYodGVzdC0+ZG93bmxvYWRVUklB
bmRXYWl0VW50aWxGaW5pc2hlcyhzb3VyY2VVUkkuZ2V0KCkpKTsKLSAgICBnX2Fzc2VydCghd2Vi
a2l0X2Rvd25sb2FkX2dldF93ZWJfdmlldyhkb3dubG9hZC5nZXQoKSkpOwotCi0gICAgVmVjdG9y
PERvd25sb2FkVGVzdDo6RG93bmxvYWRFdmVudD4mIGV2ZW50cyA9IHRlc3QtPm1fZG93bmxvYWRF
dmVudHM7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCA1KTsKLSAgICBn
X2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgRG93bmxvYWRUZXN0OjpTdGFydGVkKTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgRG93bmxvYWRUZXN0OjpSZWNlaXZlZFJl
c3BvbnNlKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgRG93bmxvYWRUZXN0
OjpDcmVhdGVkRGVzdGluYXRpb24pOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbM10sID09
LCBEb3dubG9hZFRlc3Q6OlJlY2VpdmVkRGF0YSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50
c1s0XSwgPT0sIERvd25sb2FkVGVzdDo6RmluaXNoZWQpOwotCi0gICAgV2ViS2l0VVJJUmVxdWVz
dCogcmVxdWVzdCA9IHdlYmtpdF9kb3dubG9hZF9nZXRfcmVxdWVzdChkb3dubG9hZC5nZXQoKSk7
Ci0gICAgZ19hc3NlcnQocmVxdWVzdCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF91cmlf
cmVxdWVzdF9nZXRfdXJpKHJlcXVlc3QpLCA9PSwgc291cmNlVVJJLmdldCgpKTsKLQotICAgIGdf
YXNzZXJ0X2NtcGludCh0ZXN0LT5tX2Rvd25sb2FkU2l6ZSwgPT0sIGdfZmlsZV9pbmZvX2dldF9z
aXplKHNvdXJjZUluZm8uZ2V0KCkpKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfZG93bmxvYWRfZ2V0
X2Rlc3RpbmF0aW9uKGRvd25sb2FkLmdldCgpKSk7Ci0gICAgZ19hc3NlcnRfY21wZmxvYXQod2Vi
a2l0X2Rvd25sb2FkX2dldF9lc3RpbWF0ZWRfcHJvZ3Jlc3MoZG93bmxvYWQuZ2V0KCkpLCA9PSwg
MSk7Ci0gICAgdGVzdC0+Y2hlY2tEZXN0aW5hdGlvbkFuZERlbGV0ZUZpbGUoZG93bmxvYWQuZ2V0
KCksICJ0ZXN0LnBkZiIpOwotfQotCi1jbGFzcyBEb3dubG9hZEVycm9yVGVzdDogcHVibGljIERv
d25sb2FkVGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShEb3dubG9h
ZEVycm9yVGVzdCk7Ci0KLSAgICBEb3dubG9hZEVycm9yVGVzdCgpCi0gICAgICAgIDogbV9leHBl
Y3RlZEVycm9yKFdFQktJVF9ET1dOTE9BRF9FUlJPUl9ORVRXT1JLKQotICAgIHsKLSAgICB9Ci0K
LSAgICB2b2lkIHJlY2VpdmVkUmVzcG9uc2UoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQotICAg
IHsKLSAgICAgICAgRG93bmxvYWRUZXN0OjpyZWNlaXZlZFJlc3BvbnNlKGRvd25sb2FkKTsKLSAg
ICAgICAgaWYgKG1fZXhwZWN0ZWRFcnJvciA9PSBXRUJLSVRfRE9XTkxPQURfRVJST1JfQ0FOQ0VM
TEVEX0JZX1VTRVIpCi0gICAgICAgICAgICB3ZWJraXRfZG93bmxvYWRfY2FuY2VsKGRvd25sb2Fk
KTsKLSAgICB9Ci0KLSAgICB2b2lkIGNyZWF0ZWREZXN0aW5hdGlvbihXZWJLaXREb3dubG9hZCog
ZG93bmxvYWQsIGNvbnN0IGNoYXIqIGRlc3RpbmF0aW9uKQotICAgIHsKLSAgICAgICAgZ19hc3Nl
cnRfbm90X3JlYWNoZWQoKTsKLSAgICB9Ci0KLSAgICB2b2lkIGZhaWxlZChXZWJLaXREb3dubG9h
ZCogZG93bmxvYWQsIEdFcnJvciogZXJyb3IpCi0gICAgewotICAgICAgICBnX2Fzc2VydChnX2Vy
cm9yX21hdGNoZXMoZXJyb3IsIFdFQktJVF9ET1dOTE9BRF9FUlJPUiwgbV9leHBlY3RlZEVycm9y
KSk7Ci0gICAgICAgIERvd25sb2FkVGVzdDo6ZmFpbGVkKGRvd25sb2FkLCBlcnJvcik7Ci0gICAg
fQotCi0gICAgdm9pZCBkZWNpZGVEZXN0aW5hdGlvbihXZWJLaXREb3dubG9hZCogZG93bmxvYWQs
IGNvbnN0IGdjaGFyKiBzdWdnZXN0ZWRGaWxlbmFtZSkKLSAgICB7Ci0gICAgICAgIGlmIChtX2V4
cGVjdGVkRXJyb3IgIT0gV0VCS0lUX0RPV05MT0FEX0VSUk9SX0RFU1RJTkFUSU9OKSB7Ci0gICAg
ICAgICAgICBEb3dubG9hZFRlc3Q6OmRlY2lkZURlc3RpbmF0aW9uKGRvd25sb2FkLCBzdWdnZXN0
ZWRGaWxlbmFtZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgd2Vi
a2l0X2Rvd25sb2FkX3NldF9kZXN0aW5hdGlvbihkb3dubG9hZCwgImZpbGU6Ly8vZm9vL2JhciIp
OwotICAgIH0KLQotICAgIFdlYktpdERvd25sb2FkRXJyb3IgbV9leHBlY3RlZEVycm9yOwotfTsK
LQotc3RhdGljIHZvaWQgdGVzdERvd25sb2FkTG9jYWxGaWxlRXJyb3IoRG93bmxvYWRFcnJvclRl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+bV9leHBlY3RlZEVycm9yID0g
V0VCS0lUX0RPV05MT0FEX0VSUk9SX05FVFdPUks7Ci0gICAgR1JlZlB0cjxXZWJLaXREb3dubG9h
ZD4gZG93bmxvYWQgPSBhZG9wdEdSZWYodGVzdC0+ZG93bmxvYWRVUklBbmRXYWl0VW50aWxGaW5p
c2hlcygiZmlsZTovLy9mb28vYmFyIikpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG93bmxvYWRf
Z2V0X3dlYl92aWV3KGRvd25sb2FkLmdldCgpKSk7Ci0KLSAgICBWZWN0b3I8RG93bmxvYWRUZXN0
OjpEb3dubG9hZEV2ZW50PiYgZXZlbnRzID0gdGVzdC0+bV9kb3dubG9hZEV2ZW50czsKLSAgICBn
X2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDMpOwotICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHNbMF0sID09LCBEb3dubG9hZFRlc3Q6OlN0YXJ0ZWQpOwotICAgIGdfYXNzZXJ0X2Nt
cGludChldmVudHNbMV0sID09LCBEb3dubG9hZFRlc3Q6OkZhaWxlZCk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KGV2ZW50c1syXSwgPT0sIERvd25sb2FkVGVzdDo6RmluaXNoZWQpOwotICAgIGV2ZW50
cy5jbGVhcigpOwotICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0
aW1hdGVkX3Byb2dyZXNzKGRvd25sb2FkLmdldCgpKSwgPCwgMSk7Ci0KLSAgICB0ZXN0LT5tX2V4
cGVjdGVkRXJyb3IgPSBXRUJLSVRfRE9XTkxPQURfRVJST1JfREVTVElOQVRJT047Ci0gICAgR093
blB0cjxjaGFyPiBwYXRoKGdfYnVpbGRfZmlsZW5hbWUoVGVzdDo6Z2V0V2ViS2l0MVRlc3RSZXNv
dWNlc0RpcigpLmRhdGEoKSwgInRlc3QucGRmIiwgTlVMTCkpOwotICAgIEdSZWZQdHI8R0ZpbGU+
IGZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0aChwYXRoLmdldCgpKSk7Ci0gICAg
R093blB0cjxjaGFyPiB1cmkoZ19maWxlX2dldF91cmkoZmlsZS5nZXQoKSkpOwotICAgIGRvd25s
b2FkID0gYWRvcHRHUmVmKHRlc3QtPmRvd25sb2FkVVJJQW5kV2FpdFVudGlsRmluaXNoZXModXJp
LmdldCgpKSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9kb3dubG9hZF9nZXRfd2ViX3ZpZXcoZG93
bmxvYWQuZ2V0KCkpKTsKLQotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwg
NCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIERvd25sb2FkVGVzdDo6U3Rh
cnRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIERvd25sb2FkVGVzdDo6
UmVjZWl2ZWRSZXNwb25zZSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIERv
d25sb2FkVGVzdDo6RmFpbGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzNdLCA9PSwg
RG93bmxvYWRUZXN0OjpGaW5pc2hlZCk7Ci0gICAgZXZlbnRzLmNsZWFyKCk7Ci0gICAgZ19hc3Nl
cnRfY21wZmxvYXQod2Via2l0X2Rvd25sb2FkX2dldF9lc3RpbWF0ZWRfcHJvZ3Jlc3MoZG93bmxv
YWQuZ2V0KCkpLCA8LCAxKTsKLSAgICB0ZXN0LT5jaGVja0Rlc3RpbmF0aW9uQW5kRGVsZXRlRmls
ZShkb3dubG9hZC5nZXQoKSwgImJhciIpOwotCi0gICAgdGVzdC0+bV9leHBlY3RlZEVycm9yID0g
V0VCS0lUX0RPV05MT0FEX0VSUk9SX0NBTkNFTExFRF9CWV9VU0VSOwotICAgIGRvd25sb2FkID0g
YWRvcHRHUmVmKHRlc3QtPmRvd25sb2FkVVJJQW5kV2FpdFVudGlsRmluaXNoZXModXJpLmdldCgp
KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9kb3dubG9hZF9nZXRfd2ViX3ZpZXcoZG93bmxvYWQu
Z2V0KCkpKTsKLQotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgNCk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIERvd25sb2FkVGVzdDo6U3RhcnRlZCk7
Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIERvd25sb2FkVGVzdDo6UmVjZWl2
ZWRSZXNwb25zZSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIERvd25sb2Fk
VGVzdDo6RmFpbGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzNdLCA9PSwgRG93bmxv
YWRUZXN0OjpGaW5pc2hlZCk7Ci0gICAgZXZlbnRzLmNsZWFyKCk7Ci0gICAgZ19hc3NlcnRfY21w
ZmxvYXQod2Via2l0X2Rvd25sb2FkX2dldF9lc3RpbWF0ZWRfcHJvZ3Jlc3MoZG93bmxvYWQuZ2V0
KCkpLCA8LCAxKTsKLSAgICB0ZXN0LT5jaGVja0Rlc3RpbmF0aW9uQW5kRGVsZXRlRmlsZShkb3du
bG9hZC5nZXQoKSwgInRlc3QucGRmIik7Ci19Ci0KLXN0YXRpYyBXZWJLaXRUZXN0U2VydmVyKiBr
U2VydmVyOwotc3RhdGljIGNvbnN0IGNoYXIqIGtTZXJ2ZXJTdWdnZXN0ZWRGaWxlbmFtZSA9ICJ3
ZWJraXQtZG93bmxvYWRlZC1maWxlIjsKLQotc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291
cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwg
R0hhc2hUYWJsZSosIFNvdXBDbGllbnRDb250ZXh0KiwgZ3BvaW50ZXIpCi17Ci0gICAgaWYgKG1l
c3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKLSAgICAgICAgc291cF9tZXNzYWdl
X3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIEdPd25QdHI8Y2hhcj4gZmlsZVBhdGgoZ19idWlsZF9m
aWxlbmFtZShUZXN0OjpnZXRXZWJLaXQxVGVzdFJlc291Y2VzRGlyKCkuZGF0YSgpLCBwYXRoLCBO
VUxMKSk7Ci0gICAgY2hhciogY29udGVudHM7Ci0gICAgZ3NpemUgY29udGVudHNMZW5ndGg7Ci0g
ICAgaWYgKCFnX2ZpbGVfZ2V0X2NvbnRlbnRzKGZpbGVQYXRoLmdldCgpLCAmY29udGVudHMsICZj
b250ZW50c0xlbmd0aCwgMCkpIHsKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVz
c2FnZSwgU09VUF9TVEFUVVNfTk9UX0ZPVU5EKTsKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlf
Y29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7
Ci0KLSAgICBHT3duUHRyPGNoYXI+IGNvbnRlbnREaXNwb3NpdGlvbihnX3N0cmR1cF9wcmludGYo
ImZpbGVuYW1lPSVzIiwga1NlcnZlclN1Z2dlc3RlZEZpbGVuYW1lKSk7Ci0gICAgc291cF9tZXNz
YWdlX2hlYWRlcnNfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJDb250ZW50LURp
c3Bvc2l0aW9uIiwgY29udGVudERpc3Bvc2l0aW9uLmdldCgpKTsKLSAgICBzb3VwX21lc3NhZ2Vf
Ym9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgY29u
dGVudHMsIGNvbnRlbnRzTGVuZ3RoKTsKLQotICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRl
KG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0RG93bmxvYWRS
ZW1vdGVGaWxlKERvd25sb2FkVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBHUmVm
UHRyPFdlYktpdERvd25sb2FkPiBkb3dubG9hZCA9IGFkb3B0R1JlZih0ZXN0LT5kb3dubG9hZFVS
SUFuZFdhaXRVbnRpbEZpbmlzaGVzKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi90ZXN0LnBkZiIp
KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9kb3dubG9hZF9nZXRfd2ViX3ZpZXcoZG93bmxvYWQu
Z2V0KCkpKTsKLQotICAgIFZlY3RvcjxEb3dubG9hZFRlc3Q6OkRvd25sb2FkRXZlbnQ+JiBldmVu
dHMgPSB0ZXN0LT5tX2Rvd25sb2FkRXZlbnRzOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMu
c2l6ZSgpLCA9PSwgNSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIERvd25s
b2FkVGVzdDo6U3RhcnRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIERv
d25sb2FkVGVzdDo6UmVjZWl2ZWRSZXNwb25zZSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50
c1syXSwgPT0sIERvd25sb2FkVGVzdDo6Q3JlYXRlZERlc3RpbmF0aW9uKTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoZXZlbnRzWzNdLCA9PSwgRG93bmxvYWRUZXN0OjpSZWNlaXZlZERhdGEpOwotICAg
IGdfYXNzZXJ0X2NtcGludChldmVudHNbNF0sID09LCBEb3dubG9hZFRlc3Q6OkZpbmlzaGVkKTsK
LSAgICBldmVudHMuY2xlYXIoKTsKLQotICAgIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QgPSB3
ZWJraXRfZG93bmxvYWRfZ2V0X3JlcXVlc3QoZG93bmxvYWQuZ2V0KCkpOwotICAgIGdfYXNzZXJ0
KHJlcXVlc3QpOwotICAgIEFTU0VSVF9DTVBfQ1NUUklORyh3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0
X3VyaShyZXF1ZXN0KSwgPT0sIGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi90ZXN0LnBkZiIpKTsK
LQotICAgIGdfYXNzZXJ0KHdlYmtpdF9kb3dubG9hZF9nZXRfZGVzdGluYXRpb24oZG93bmxvYWQu
Z2V0KCkpKTsKLSAgICBnX2Fzc2VydF9jbXBmbG9hdCh3ZWJraXRfZG93bmxvYWRfZ2V0X2VzdGlt
YXRlZF9wcm9ncmVzcyhkb3dubG9hZC5nZXQoKSksID09LCAxKTsKLSAgICB0ZXN0LT5jaGVja0Rl
c3RpbmF0aW9uQW5kRGVsZXRlRmlsZShkb3dubG9hZC5nZXQoKSwga1NlcnZlclN1Z2dlc3RlZEZp
bGVuYW1lKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdERvd25sb2FkUmVtb3RlRmlsZUVycm9yKERv
d25sb2FkRXJyb3JUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPm1fZXhw
ZWN0ZWRFcnJvciA9IFdFQktJVF9ET1dOTE9BRF9FUlJPUl9ORVRXT1JLOwotICAgIEdSZWZQdHI8
V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkID0gYWRvcHRHUmVmKHRlc3QtPmRvd25sb2FkVVJJQW5k
V2FpdFVudGlsRmluaXNoZXMoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2ZvbyIpKSk7Ci0gICAg
Z19hc3NlcnQoIXdlYmtpdF9kb3dubG9hZF9nZXRfd2ViX3ZpZXcoZG93bmxvYWQuZ2V0KCkpKTsK
LQotICAgIFZlY3RvcjxEb3dubG9hZFRlc3Q6OkRvd25sb2FkRXZlbnQ+JiBldmVudHMgPSB0ZXN0
LT5tX2Rvd25sb2FkRXZlbnRzOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9
PSwgNCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIERvd25sb2FkVGVzdDo6
U3RhcnRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIERvd25sb2FkVGVz
dDo6UmVjZWl2ZWRSZXNwb25zZSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0s
IERvd25sb2FkVGVzdDo6RmFpbGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzNdLCA9
PSwgRG93bmxvYWRUZXN0OjpGaW5pc2hlZCk7Ci0gICAgZXZlbnRzLmNsZWFyKCk7Ci0gICAgV2Vi
S2l0VVJJUmVzcG9uc2UqIHJlc3BvbnNlID0gd2Via2l0X2Rvd25sb2FkX2dldF9yZXNwb25zZShk
b3dubG9hZC5nZXQoKSk7Ci0gICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfdXJpX3Jlc3BvbnNl
X2dldF9zdGF0dXNfY29kZShyZXNwb25zZSksID09LCA0MDQpOwotICAgIGdfYXNzZXJ0X2NtcGZs
b2F0KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNzKGRvd25sb2FkLmdldCgp
KSwgPCwgMSk7Ci0KLSAgICB0ZXN0LT5tX2V4cGVjdGVkRXJyb3IgPSBXRUJLSVRfRE9XTkxPQURf
RVJST1JfREVTVElOQVRJT047Ci0gICAgZG93bmxvYWQgPSBhZG9wdEdSZWYodGVzdC0+ZG93bmxv
YWRVUklBbmRXYWl0VW50aWxGaW5pc2hlcyhrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvdGVzdC5w
ZGYiKSkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG93bmxvYWRfZ2V0X3dlYl92aWV3KGRvd25s
b2FkLmdldCgpKSk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDQp
OwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBEb3dubG9hZFRlc3Q6OlN0YXJ0
ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBEb3dubG9hZFRlc3Q6OlJl
Y2VpdmVkUmVzcG9uc2UpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBEb3du
bG9hZFRlc3Q6OkZhaWxlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1szXSwgPT0sIERv
d25sb2FkVGVzdDo6RmluaXNoZWQpOwotICAgIGV2ZW50cy5jbGVhcigpOwotICAgIGdfYXNzZXJ0
X2NtcGZsb2F0KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNzKGRvd25sb2Fk
LmdldCgpKSwgPCwgMSk7Ci0gICAgdGVzdC0+Y2hlY2tEZXN0aW5hdGlvbkFuZERlbGV0ZUZpbGUo
ZG93bmxvYWQuZ2V0KCksICJiYXIiKTsKLQotICAgIHRlc3QtPm1fZXhwZWN0ZWRFcnJvciA9IFdF
QktJVF9ET1dOTE9BRF9FUlJPUl9DQU5DRUxMRURfQllfVVNFUjsKLSAgICBkb3dubG9hZCA9IGFk
b3B0R1JlZih0ZXN0LT5kb3dubG9hZFVSSUFuZFdhaXRVbnRpbEZpbmlzaGVzKGtTZXJ2ZXItPmdl
dFVSSUZvclBhdGgoIi90ZXN0LnBkZiIpKSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9kb3dubG9h
ZF9nZXRfd2ViX3ZpZXcoZG93bmxvYWQuZ2V0KCkpKTsKLQotICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHMuc2l6ZSgpLCA9PSwgNCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0s
IERvd25sb2FkVGVzdDo6U3RhcnRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwg
PT0sIERvd25sb2FkVGVzdDo6UmVjZWl2ZWRSZXNwb25zZSk7Ci0gICAgZ19hc3NlcnRfY21waW50
KGV2ZW50c1syXSwgPT0sIERvd25sb2FkVGVzdDo6RmFpbGVkKTsKLSAgICBnX2Fzc2VydF9jbXBp
bnQoZXZlbnRzWzNdLCA9PSwgRG93bmxvYWRUZXN0OjpGaW5pc2hlZCk7Ci0gICAgZXZlbnRzLmNs
ZWFyKCk7Ci0gICAgZ19hc3NlcnRfY21wZmxvYXQod2Via2l0X2Rvd25sb2FkX2dldF9lc3RpbWF0
ZWRfcHJvZ3Jlc3MoZG93bmxvYWQuZ2V0KCkpLCA8LCAxKTsKLSAgICB0ZXN0LT5jaGVja0Rlc3Rp
bmF0aW9uQW5kRGVsZXRlRmlsZShkb3dubG9hZC5nZXQoKSwga1NlcnZlclN1Z2dlc3RlZEZpbGVu
YW1lKTsKLX0KLQotY2xhc3MgV2ViVmlld0Rvd25sb2FkVGVzdDogcHVibGljIFdlYlZpZXdUZXN0
IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFdlYlZpZXdEb3dubG9hZFRl
c3QpOwotCi0gICAgc3RhdGljIHZvaWQgZG93bmxvYWRTdGFydGVkQ2FsbGJhY2soV2ViS2l0V2Vi
Q29udGV4dCogY29udGV4dCwgV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBXZWJWaWV3RG93bmxv
YWRUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+bV9kb3dubG9hZCA9IGRvd25sb2Fk
OwotICAgICAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdf
T0JKRUNUKGRvd25sb2FkKSk7Ci0gICAgICAgIHRlc3QtPnF1aXRNYWluTG9vcCgpOwotICAgIH0K
LQotICAgIFdlYlZpZXdEb3dubG9hZFRlc3QoKQotICAgIHsKLSAgICAgICAgZ19zaWduYWxfY29u
bmVjdCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQobV93ZWJWaWV3KSwgImRvd25sb2FkLXN0
YXJ0ZWQiLCBHX0NBTExCQUNLKGRvd25sb2FkU3RhcnRlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAg
fQotCi0gICAgfldlYlZpZXdEb3dubG9hZFRlc3QoKQotICAgIHsKLSAgICAgICAgZ19zaWduYWxf
aGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dCht
X3dlYlZpZXcpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKLSAgICB9
Ci0KLSAgICB2b2lkIHdhaXRVbnRpbERvd25sb2FkU3RhcnRlZCgpCi0gICAgewotICAgICAgICBt
X2Rvd25sb2FkID0gMDsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotICAg
ICAgICBnX2Fzc2VydChtX2Rvd25sb2FkLmdldCgpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZ2Jv
b2xlYW4gZG93bmxvYWREZWNpZGVEZXN0aW5hdGlvbkNhbGxiYWNrKFdlYktpdERvd25sb2FkKiBk
b3dubG9hZCwgY29uc3QgZ2NoYXIqIHN1Z2dlc3RlZEZpbGVuYW1lLCBXZWJWaWV3RG93bmxvYWRU
ZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgR093blB0cjxjaGFyPiBkZXN0aW5hdGlvbihnX2J1
aWxkX2ZpbGVuYW1lKGtUZW1wRGlyZWN0b3J5LCBzdWdnZXN0ZWRGaWxlbmFtZSwgTlVMTCkpOwot
ICAgICAgICBHT3duUHRyPGNoYXI+IGRlc3RpbmF0aW9uVVJJKGdfZmlsZW5hbWVfdG9fdXJpKGRl
c3RpbmF0aW9uLmdldCgpLCAwLCAwKSk7Ci0gICAgICAgIHdlYmtpdF9kb3dubG9hZF9zZXRfZGVz
dGluYXRpb24oZG93bmxvYWQsIGRlc3RpbmF0aW9uVVJJLmdldCgpKTsKLSAgICAgICAgcmV0dXJu
IFRSVUU7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgZG93bmxvYWRGaW5pc2hlZENhbGxiYWNr
KFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgV2ViVmlld0Rvd25sb2FkVGVzdCogdGVzdCkKLSAg
ICB7Ci0gICAgICAgIHRlc3QtPnF1aXRNYWluTG9vcCgpOwotICAgIH0KLQotICAgIHZvaWQgd2Fp
dFVudGlsRG93bmxvYWRGaW5pc2hlZCgpCi0gICAgewotICAgICAgICBnX3NpZ25hbF9jb25uZWN0
KG1fZG93bmxvYWQuZ2V0KCksICJkZWNpZGUtZGVzdGluYXRpb24iLCBHX0NBTExCQUNLKGRvd25s
b2FkRGVjaWRlRGVzdGluYXRpb25DYWxsYmFjayksIHRoaXMpOwotICAgICAgICBnX3NpZ25hbF9j
b25uZWN0KG1fZG93bmxvYWQuZ2V0KCksICJmaW5pc2hlZCIsIEdfQ0FMTEJBQ0soZG93bmxvYWRG
aW5pc2hlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5M
b29wKTsKLSAgICB9Ci0KLSAgICBHUmVmUHRyPFdlYktpdERvd25sb2FkPiBtX2Rvd25sb2FkOwot
fTsKLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdEb3dubG9hZFVSSShXZWJWaWV3RG93bmxvYWRU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+
IGRvd25sb2FkID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJfdmlld19kb3dubG9hZF91cmkodGVzdC0+
bV93ZWJWaWV3LCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvdGVzdC5wZGYiKS5kYXRhKCkpKTsK
LSAgICB0ZXN0LT53YWl0VW50aWxEb3dubG9hZFN0YXJ0ZWQoKTsKLSAgICBnX2Fzc2VydCh0ZXN0
LT5tX3dlYlZpZXcgPT0gd2Via2l0X2Rvd25sb2FkX2dldF93ZWJfdmlldyhkb3dubG9hZC5nZXQo
KSkpOwotICAgIHRlc3QtPndhaXRVbnRpbERvd25sb2FkRmluaXNoZWQoKTsKLQotICAgIEdSZWZQ
dHI8R0ZpbGU+IGRvd25sb2FkRmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl91cmkod2Vi
a2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbihkb3dubG9hZC5nZXQoKSkpKTsKLSAgICBHUmVm
UHRyPEdGaWxlSW5mbz4gZG93bmxvYWRGaWxlSW5mbyA9IGFkb3B0R1JlZihnX2ZpbGVfcXVlcnlf
aW5mbyhkb3dubG9hZEZpbGUuZ2V0KCksIEdfRklMRV9BVFRSSUJVVEVfU1RBTkRBUkRfU0laRSwg
c3RhdGljX2Nhc3Q8R0ZpbGVRdWVyeUluZm9GbGFncz4oMCksIDAsIDApKTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoZ19maWxlX2luZm9fZ2V0X3NpemUoZG93bmxvYWRGaWxlSW5mby5nZXQoKSksID4s
IDApOwotICAgIGdfZmlsZV9kZWxldGUoZG93bmxvYWRGaWxlLmdldCgpLCAwLCAwKTsKLX0KLQot
Y2xhc3MgUG9saWN5UmVzcG9uc2VEb3dubG9hZFRlc3Q6IHB1YmxpYyBXZWJWaWV3RG93bmxvYWRU
ZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFBvbGljeVJlc3BvbnNl
RG93bmxvYWRUZXN0KTsKLQotICAgIHN0YXRpYyBnYm9vbGVhbiBkZWNpZGVQb2xpY3lDYWxsYmFj
ayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRQb2xpY3lEZWNpc2lvbiogZGVjaXNpb24s
IFdlYktpdFBvbGljeURlY2lzaW9uVHlwZSB0eXBlLCBQb2xpY3lSZXNwb25zZURvd25sb2FkVGVz
dCogdGVzdCkKLSAgICB7Ci0gICAgICAgIGlmICh0eXBlICE9IFdFQktJVF9QT0xJQ1lfREVDSVNJ
T05fVFlQRV9SRVNQT05TRSkKLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsKLQotICAgICAgICB3
ZWJraXRfcG9saWN5X2RlY2lzaW9uX2Rvd25sb2FkKGRlY2lzaW9uKTsKLSAgICAgICAgcmV0dXJu
IFRSVUU7Ci0gICAgfQotCi0gICAgUG9saWN5UmVzcG9uc2VEb3dubG9hZFRlc3QoKQotICAgIHsK
LSAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJkZWNpZGUtcG9saWN5IiwgR19D
QUxMQkFDSyhkZWNpZGVQb2xpY3lDYWxsYmFjayksIHRoaXMpOwotICAgIH0KLQotICAgIH5Qb2xp
Y3lSZXNwb25zZURvd25sb2FkVGVzdCgpCi0gICAgewotICAgICAgICBnX3NpZ25hbF9oYW5kbGVy
c19kaXNjb25uZWN0X21hdGNoZWQobV93ZWJWaWV3LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAw
LCAwLCAwLCB0aGlzKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNhbmNlbERvd25sb2FkQW5kV2FpdFVu
dGlsRmluaXNoZWQoKQotICAgIHsKLSAgICAgICAgd2Via2l0X2Rvd25sb2FkX2NhbmNlbChtX2Rv
d25sb2FkLmdldCgpKTsKLSAgICAgICAgd2FpdFVudGlsRG93bmxvYWRGaW5pc2hlZCgpOwotICAg
ICAgICBtX2Rvd25sb2FkID0gMDsKLSAgICB9Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0UG9saWN5
UmVzcG9uc2VEb3dubG9hZChQb2xpY3lSZXNwb25zZURvd25sb2FkVGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKLXsKLSAgICAvLyBUZXN0IHRoYXQgYSBkb3dubG9hZCBzdGFydGVkIGJ5IHRoZSB0
aGUgcG9saWN5IGNoZWNrZXIgY29udGFpbnMgdGhlIHdlYiB2aWV3LgotICAgIENTdHJpbmcgcmVx
dWVzdFVSSSA9IGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi90ZXN0LnBkZiIpLmRhdGEoKTsKLSAg
ICB0ZXN0LT5sb2FkVVJJKHJlcXVlc3RVUkkuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxE
b3dubG9hZFN0YXJ0ZWQoKTsKLQotICAgIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QgPSB3ZWJr
aXRfZG93bmxvYWRfZ2V0X3JlcXVlc3QodGVzdC0+bV9kb3dubG9hZC5nZXQoKSk7Ci0gICAgZ19h
c3NlcnQocmVxdWVzdCk7Ci0gICAgQVNTRVJUX0NNUF9DU1RSSU5HKHdlYmtpdF91cmlfcmVxdWVz
dF9nZXRfdXJpKHJlcXVlc3QpLCA9PSwgcmVxdWVzdFVSSSk7Ci0KLSAgICBnX2Fzc2VydCh0ZXN0
LT5tX3dlYlZpZXcgPT0gd2Via2l0X2Rvd25sb2FkX2dldF93ZWJfdmlldyh0ZXN0LT5tX2Rvd25s
b2FkLmdldCgpKSk7Ci0gICAgdGVzdC0+Y2FuY2VsRG93bmxvYWRBbmRXYWl0VW50aWxGaW5pc2hl
ZCgpOwotfQotCi12b2lkIGJlZm9yZUFsbCgpCi17Ci0gICAga1NlcnZlciA9IG5ldyBXZWJLaXRU
ZXN0U2VydmVyKCk7Ci0gICAga1NlcnZlci0+cnVuKHNlcnZlckNhbGxiYWNrKTsKLQotICAgIGtU
ZW1wRGlyZWN0b3J5ID0gZ19kaXJfbWFrZV90bXAoIldlYktpdDJUZXN0cy1YWFhYWFgiLCAwKTsK
LSAgICBnX2Fzc2VydChrVGVtcERpcmVjdG9yeSk7Ci0KLSAgICBEb3dubG9hZFRlc3Q6OmFkZCgi
RG93bmxvYWRzIiwgImxvY2FsLWZpbGUiLCB0ZXN0RG93bmxvYWRMb2NhbEZpbGUpOwotICAgIERv
d25sb2FkRXJyb3JUZXN0OjphZGQoIkRvd25sb2FkcyIsICJsb2NhbC1maWxlLWVycm9yIiwgdGVz
dERvd25sb2FkTG9jYWxGaWxlRXJyb3IpOwotICAgIERvd25sb2FkVGVzdDo6YWRkKCJEb3dubG9h
ZHMiLCAicmVtb3RlLWZpbGUiLCB0ZXN0RG93bmxvYWRSZW1vdGVGaWxlKTsKLSAgICBEb3dubG9h
ZEVycm9yVGVzdDo6YWRkKCJEb3dubG9hZHMiLCAicmVtb3RlLWZpbGUtZXJyb3IiLCB0ZXN0RG93
bmxvYWRSZW1vdGVGaWxlRXJyb3IpOwotICAgIFdlYlZpZXdEb3dubG9hZFRlc3Q6OmFkZCgiV2Vi
S2l0V2ViVmlldyIsICJkb3dubG9hZC11cmkiLCB0ZXN0V2ViVmlld0Rvd25sb2FkVVJJKTsKLSAg
ICBQb2xpY3lSZXNwb25zZURvd25sb2FkVGVzdDo6YWRkKCJEb3dubG9hZHMiLCAicG9saWN5LWRl
Y2lzaW9uLWRvd25sb2FkIiwgdGVzdFBvbGljeVJlc3BvbnNlRG93bmxvYWQpOwotfQotCi12b2lk
IGFmdGVyQWxsKCkKLXsKLSAgICBkZWxldGUga1NlcnZlcjsKLSAgICBnX3JtZGlyKGtUZW1wRGly
ZWN0b3J5KTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL1Rlc3RGcmFtZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9UZXN0RnJhbWUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjNiMDc5
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rl
c3RGcmFtZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2
ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRl
ICJXZWJQcm9jZXNzVGVzdFJ1bm5lci5oIgotI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCi0jaW5j
bHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgotCi1zdGF0aWMg
V2ViUHJvY2Vzc1Rlc3RSdW5uZXIqIHRlc3RSdW5uZXI7Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdEZy
YW1lVGVzdFJ1bihXZWJWaWV3VGVzdCogdGVzdCwgY29uc3QgY2hhciogdGVzdE5hbWUpCi17Ci0g
ICAgc3RhdGljIGNvbnN0IGNoYXIqIHRlc3RIVE1MID0gIjxodG1sPjxib2R5PjwvYm9keT48L2h0
bWw+IjsKLSAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0SFRNTCwgMCk7Ci0gICAgdGVzdC0+d2FpdFVu
dGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBHVmFyaWFudEJ1aWxkZXIgYnVpbGRlcjsKLSAgICBn
X3ZhcmlhbnRfYnVpbGRlcl9pbml0KCZidWlsZGVyLCBHX1ZBUklBTlRfVFlQRV9WQVJESUNUKTsK
LSAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoJmJ1aWxkZXIsICJ7c3Z9IiwgInBhZ2VJRCIsIGdf
dmFyaWFudF9uZXdfdWludDY0KHdlYmtpdF93ZWJfdmlld19nZXRfcGFnZV9pZCh0ZXN0LT5tX3dl
YlZpZXcpKSk7Ci0gICAgZ19hc3NlcnQodGVzdFJ1bm5lci0+cnVuVGVzdCgiV2ViS2l0RnJhbWUi
LCB0ZXN0TmFtZSwgZ192YXJpYW50X2J1aWxkZXJfZW5kKCZidWlsZGVyKSkpOwotfQotCi1zdGF0
aWMgdm9pZCB0ZXN0V2ViS2l0RnJhbWVNYWluRnJhbWUoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25z
dHBvaW50ZXIpCi17Ci0gICAgd2Via2l0RnJhbWVUZXN0UnVuKHRlc3QsICJtYWluLWZyYW1lIik7
Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJLaXRGcmFtZVVSSShXZWJWaWV3VGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKLXsKLSAgICB3ZWJraXRGcmFtZVRlc3RSdW4odGVzdCwgInVyaSIpOwot
fQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViS2l0RnJhbWVKYXZhU2NyaXB0Q29udGV4dChXZWJWaWV3
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB3ZWJraXRGcmFtZVRlc3RSdW4odGVz
dCwgImphdmFzY3JpcHQtY29udGV4dCIpOwotfQotCi12b2lkIGJlZm9yZUFsbCgpCi17Ci0gICAg
dGVzdFJ1bm5lciA9IG5ldyBXZWJQcm9jZXNzVGVzdFJ1bm5lcigpOwotICAgIHdlYmtpdF93ZWJf
Y29udGV4dF9zZXRfd2ViX2V4dGVuc2lvbnNfZGlyZWN0b3J5KHdlYmtpdF93ZWJfY29udGV4dF9n
ZXRfZGVmYXVsdCgpLCBXRUJLSVRfVEVTVF9XRUJfRVhURU5TSU9OU19ESVIpOwotCi0gICAgV2Vi
Vmlld1Rlc3Q6OmFkZCgiV2ViS2l0RnJhbWUiLCAibWFpbi1mcmFtZSIsIHRlc3RXZWJLaXRGcmFt
ZU1haW5GcmFtZSk7Ci0gICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0RnJhbWUiLCAidXJpIiwg
dGVzdFdlYktpdEZyYW1lVVJJKTsKLSAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRGcmFtZSIs
ICJqYXZhc2NyaXB0LWNvbnRleHQiLCB0ZXN0V2ViS2l0RnJhbWVKYXZhU2NyaXB0Q29udGV4dCk7
Ci19Ci0KLXZvaWQgYWZ0ZXJBbGwoKQotewotICAgIGRlbGV0ZSB0ZXN0UnVubmVyOwotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdEluc3Bl
Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0SW5z
cGVjdG9yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWYwNDMwMy4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0SW5zcGVj
dG9yLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM1NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIldl
YlZpZXdUZXN0LmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi9nb2Jq
ZWN0L0dSZWZQdHIuaD4KLQotY2xhc3MgSW5zcGVjdG9yVGVzdDogcHVibGljIFdlYlZpZXdUZXN0
IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKEluc3BlY3RvclRlc3QpOwot
Ci0gICAgZW51bSBJbnNwZWN0b3JFdmVudHMgewotICAgICAgICBPcGVuV2luZG93LAotICAgICAg
ICBCcmluZ1RvRnJvbnQsCi0gICAgICAgIENsb3NlZCwKLSAgICAgICAgQXR0YWNoLAotICAgICAg
ICBEZXRhY2gKLSAgICB9OwotCi0gICAgc3RhdGljIGdib29sZWFuIG9wZW5XaW5kb3dDYWxsYmFj
ayhXZWJLaXRXZWJJbnNwZWN0b3IqLCBJbnNwZWN0b3JUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRlc3QtPm9wZW5XaW5kb3coKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZ2Jvb2xl
YW4gYnJpbmdUb0Zyb250Q2FsbGJhY2soV2ViS2l0V2ViSW5zcGVjdG9yKiwgSW5zcGVjdG9yVGVz
dCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0ZXN0LT5icmluZ1RvRnJvbnQoKTsKLSAg
ICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBjbG9zZWRDYWxsYmFjayhXZWJLaXRXZWJJbnNwZWN0b3Iq
LCBJbnNwZWN0b3JUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRlc3QtPmNsb3Nl
ZCgpOwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiBhdHRhY2hDYWxsYmFjayhXZWJLaXRX
ZWJJbnNwZWN0b3IqLCBJbnNwZWN0b3JUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHRlc3QtPmF0dGFjaCgpOwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiBkZXRhY2hDYWxs
YmFjayhXZWJLaXRXZWJJbnNwZWN0b3IqLCBJbnNwZWN0b3JUZXN0KiB0ZXN0KQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHRlc3QtPmRldGFjaCgpOwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBnTWluaW11bUF0dGFjaGVkSW5zcGVjdG9yV2lkdGggPSA3NTA7Ci0gICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIGdNaW5pbXVtQXR0YWNoZWRJbnNwZWN0b3JIZWlnaHQgPSAyNTA7Ci0K
LSAgICBJbnNwZWN0b3JUZXN0KCkKLSAgICAgICAgOiBXZWJWaWV3VGVzdCgpCi0gICAgICAgICwg
bV9pbnNwZWN0b3Iod2Via2l0X3dlYl92aWV3X2dldF9pbnNwZWN0b3IobV93ZWJWaWV3KSkKLSAg
ICB7Ci0gICAgICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX2RldmVsb3Blcl9leHRyYXMo
d2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyhtX3dlYlZpZXcpLCBUUlVFKTsKLSAgICAgICAg
YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChtX2luc3BlY3Rv
cikpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1faW5zcGVjdG9yLCAib3Blbi13aW5kb3ci
LCBHX0NBTExCQUNLKG9wZW5XaW5kb3dDYWxsYmFjayksIHRoaXMpOwotICAgICAgICBnX3NpZ25h
bF9jb25uZWN0KG1faW5zcGVjdG9yLCAiYnJpbmctdG8tZnJvbnQiLCBHX0NBTExCQUNLKGJyaW5n
VG9Gcm9udENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9pbnNw
ZWN0b3IsICJjbG9zZWQiLCBHX0NBTExCQUNLKGNsb3NlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAg
ICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9pbnNwZWN0b3IsICJhdHRhY2giLCBHX0NBTExCQUNLKGF0
dGFjaENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9pbnNwZWN0
b3IsICJkZXRhY2giLCBHX0NBTExCQUNLKGRldGFjaENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgfQot
Ci0gICAgfkluc3BlY3RvclRlc3QoKQotICAgIHsKLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNf
ZGlzY29ubmVjdF9tYXRjaGVkKG1faW5zcGVjdG9yLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAw
LCAwLCAwLCB0aGlzKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgb3BlbldpbmRvdygpCi0g
ICAgewotICAgICAgICBtX2V2ZW50cy5hcHBlbmQoT3BlbldpbmRvdyk7Ci0gICAgICAgIGdfbWFp
bl9sb29wX3F1aXQobV9tYWluTG9vcCk7Ci0gICAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQot
ICAgIHZpcnR1YWwgYm9vbCBicmluZ1RvRnJvbnQoKQotICAgIHsKLSAgICAgICAgbV9ldmVudHMu
YXBwZW5kKEJyaW5nVG9Gcm9udCk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9v
cCk7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY2xv
c2VkKCkKLSAgICB7Ci0gICAgICAgIG1fZXZlbnRzLmFwcGVuZChDbG9zZWQpOwotICAgIH0KLQot
ICAgIHZpcnR1YWwgYm9vbCBhdHRhY2goKQotICAgIHsKLSAgICAgICAgbV9ldmVudHMuYXBwZW5k
KEF0dGFjaCk7Ci0gICAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQotICAgIHZpcnR1YWwgYm9v
bCBkZXRhY2goKQotICAgIHsKLSAgICAgICAgbV9ldmVudHMuYXBwZW5kKERldGFjaCk7Ci0gICAg
ICAgIHJldHVybiBUUlVFOwotICAgIH0KLQotCi0gICAgc3RhdGljIGdib29sZWFuIHNob3dJZGxl
KEluc3BlY3RvclRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICB3ZWJraXRfd2ViX2luc3BlY3Rv
cl9zaG93KHRlc3QtPm1faW5zcGVjdG9yKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0K
LQotICAgIHZvaWQgc2hvdygpCi0gICAgewotICAgICAgICBnX2lkbGVfYWRkKHJlaW50ZXJwcmV0
X2Nhc3Q8R1NvdXJjZUZ1bmM+KHNob3dJZGxlKSwgdGhpcyk7Ci0gICAgICAgIGdfbWFpbl9sb29w
X3J1bihtX21haW5Mb29wKTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlc2l6ZVZpZXdBbmRBdHRhY2go
KQotICAgIHsKLSAgICAgICAgLy8gUmVzaXplIHRoZSB2aWV3IHRvIG1ha2Ugcm9vbSBmb3IgdGhl
IGluc3BlY3Rvci4KLSAgICAgICAgcmVzaXplVmlldyhnTWluaW11bUF0dGFjaGVkSW5zcGVjdG9y
V2lkdGgsIChnTWluaW11bUF0dGFjaGVkSW5zcGVjdG9ySGVpZ2h0ICsgMSkgKiA0IC8gMyk7Ci0g
ICAgICAgIHdlYmtpdF93ZWJfaW5zcGVjdG9yX2F0dGFjaChtX2luc3BlY3Rvcik7Ci0gICAgfQot
Ci0gICAgc3RhdGljIGdib29sZWFuIGRldGFjaElkbGUoSW5zcGVjdG9yVGVzdCogdGVzdCkKLSAg
ICB7Ci0gICAgICAgIHdlYmtpdF93ZWJfaW5zcGVjdG9yX2RldGFjaCh0ZXN0LT5tX2luc3BlY3Rv
cik7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAgICB2b2lkIGRldGFjaEFuZFdh
aXRVbnRpbFdpbmRvd09wZW5lZCgpCi0gICAgewotICAgICAgICBnX2lkbGVfYWRkKHJlaW50ZXJw
cmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KGRldGFjaElkbGUpLCB0aGlzKTsKLSAgICAgICAgZ19tYWlu
X2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIHZvaWQgY2xvc2UoKQotICAgIHsK
LSAgICAgICAgd2Via2l0X3dlYl9pbnNwZWN0b3JfY2xvc2UobV9pbnNwZWN0b3IpOwotICAgIH0K
LQotICAgIFdlYktpdFdlYkluc3BlY3RvciogbV9pbnNwZWN0b3I7Ci0gICAgVmVjdG9yPEluc3Bl
Y3RvckV2ZW50cz4gbV9ldmVudHM7Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0SW5zcGVjdG9yRGVm
YXVsdChJbnNwZWN0b3JUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPnNo
b3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZChHVEtfV0lORE9XX1RPUExFVkVMKTsKLSAgICB0
ZXN0LT5yZXNpemVWaWV3KDIwMCwgMjAwKTsKLSAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJv
ZHk+PHA+V2ViS2l0R1RLKyBJbnNwZWN0b3IgdGVzdDwvcD48L2JvZHk+PC9odG1sPiIsIDApOwot
ICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgdGVzdC0+c2hvdygpOwot
ICAgIC8vIFdlIGRvbid0IGFkZCB0aGUgdmlldyB0byBhIGNvbnRhaW5lciwgc28gY29uc3VtZSB0
aGUgd2VhayByZWYgd2l0aCBHUmVmUHRyLgotICAgIEdSZWZQdHI8V2ViS2l0V2ViVmlld0Jhc2U+
IGluc3BlY3RvclZpZXcgPSB3ZWJraXRfd2ViX2luc3BlY3Rvcl9nZXRfd2ViX3ZpZXcodGVzdC0+
bV9pbnNwZWN0b3IpOwotICAgIGdfYXNzZXJ0KGluc3BlY3RvclZpZXcuZ2V0KCkpOwotICAgIHRl
c3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QoaW5zcGVj
dG9yVmlldy5nZXQoKSkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX2luc3BlY3Rvcl9pc19h
dHRhY2hlZCh0ZXN0LT5tX2luc3BlY3RvcikpOwotICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0
X3dlYl9pbnNwZWN0b3JfZ2V0X2F0dGFjaGVkX2hlaWdodCh0ZXN0LT5tX2luc3BlY3RvciksID09
LCAwKTsKLSAgICBWZWN0b3I8SW5zcGVjdG9yVGVzdDo6SW5zcGVjdG9yRXZlbnRzPiYgZXZlbnRz
ID0gdGVzdC0+bV9ldmVudHM7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09
LCAxKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgSW5zcGVjdG9yVGVzdDo6
T3BlbldpbmRvdyk7Ci0gICAgdGVzdC0+bV9ldmVudHMuY2xlYXIoKTsKLQotICAgIHRlc3QtPnNo
b3coKTsKLSAgICBldmVudHMgPSB0ZXN0LT5tX2V2ZW50czsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
ZXZlbnRzLnNpemUoKSwgPT0sIDEpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09
LCBJbnNwZWN0b3JUZXN0OjpCcmluZ1RvRnJvbnQpOwotICAgIHRlc3QtPm1fZXZlbnRzLmNsZWFy
KCk7Ci0KLSAgICB0ZXN0LT5yZXNpemVWaWV3QW5kQXR0YWNoKCk7Ci0gICAgZ19hc3NlcnQod2Vi
a2l0X3dlYl9pbnNwZWN0b3JfaXNfYXR0YWNoZWQodGVzdC0+bV9pbnNwZWN0b3IpKTsKLSAgICBn
X2Fzc2VydF9jbXB1aW50KHdlYmtpdF93ZWJfaW5zcGVjdG9yX2dldF9hdHRhY2hlZF9oZWlnaHQo
dGVzdC0+bV9pbnNwZWN0b3IpLCA+PSwgSW5zcGVjdG9yVGVzdDo6Z01pbmltdW1BdHRhY2hlZElu
c3BlY3RvckhlaWdodCk7Ci0gICAgZXZlbnRzID0gdGVzdC0+bV9ldmVudHM7Ci0gICAgZ19hc3Nl
cnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAxKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZl
bnRzWzBdLCA9PSwgSW5zcGVjdG9yVGVzdDo6QXR0YWNoKTsKLSAgICB0ZXN0LT5tX2V2ZW50cy5j
bGVhcigpOwotCi0gICAgdGVzdC0+ZGV0YWNoQW5kV2FpdFVudGlsV2luZG93T3BlbmVkKCk7Ci0g
ICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfaW5zcGVjdG9yX2lzX2F0dGFjaGVkKHRlc3QtPm1faW5z
cGVjdG9yKSk7Ci0gICAgZXZlbnRzID0gdGVzdC0+bV9ldmVudHM7Ci0gICAgZ19hc3NlcnRfY21w
aW50KGV2ZW50cy5zaXplKCksID09LCAyKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBd
LCA9PSwgSW5zcGVjdG9yVGVzdDo6RGV0YWNoKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRz
WzFdLCA9PSwgSW5zcGVjdG9yVGVzdDo6T3BlbldpbmRvdyk7Ci0gICAgdGVzdC0+bV9ldmVudHMu
Y2xlYXIoKTsKLQotICAgIHRlc3QtPmNsb3NlKCk7Ci0gICAgZXZlbnRzID0gdGVzdC0+bV9ldmVu
dHM7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAxKTsKLSAgICBnX2Fz
c2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgSW5zcGVjdG9yVGVzdDo6Q2xvc2VkKTsKLSAgICB0
ZXN0LT5tX2V2ZW50cy5jbGVhcigpOwotfQotCi1jbGFzcyBDdXN0b21JbnNwZWN0b3JUZXN0OiBw
dWJsaWMgSW5zcGVjdG9yVGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVS
RShDdXN0b21JbnNwZWN0b3JUZXN0KTsKLQotICAgIEN1c3RvbUluc3BlY3RvclRlc3QoKQotICAg
ICAgICA6IEluc3BlY3RvclRlc3QoKQotICAgICAgICAsIG1faW5zcGVjdG9yV2luZG93KDApCi0g
ICAgewotICAgIH0KLQotICAgIH5DdXN0b21JbnNwZWN0b3JUZXN0KCkKLSAgICB7Ci0gICAgICAg
IGlmIChtX2luc3BlY3RvcldpbmRvdykKLSAgICAgICAgICAgIGd0a193aWRnZXRfZGVzdHJveSht
X2luc3BlY3RvcldpbmRvdyk7Ci0gICAgfQotCi0gICAgYm9vbCBvcGVuV2luZG93KCkKLSAgICB7
Ci0gICAgICAgIGdfYXNzZXJ0KCFtX2luc3BlY3RvcldpbmRvdyk7Ci0gICAgICAgIG1faW5zcGVj
dG9yV2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7Ci0gICAgICAg
IFdlYktpdFdlYlZpZXdCYXNlKiBpbnNwZWN0b3JWaWV3ID0gd2Via2l0X3dlYl9pbnNwZWN0b3Jf
Z2V0X3dlYl92aWV3KG1faW5zcGVjdG9yKTsKLSAgICAgICAgZ19hc3NlcnQoaW5zcGVjdG9yVmll
dyk7Ci0gICAgICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIobV9pbnNwZWN0b3JX
aW5kb3cpLCBHVEtfV0lER0VUKGluc3BlY3RvclZpZXcpKTsKLSAgICAgICAgZ3RrX3dpZGdldF9z
aG93X2FsbChtX2luc3BlY3RvcldpbmRvdyk7Ci0KLSAgICAgICAgcmV0dXJuIEluc3BlY3RvclRl
c3Q6Om9wZW5XaW5kb3coKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsb3NlZCgpCi0gICAgewotICAg
ICAgICBpZiAobV9pbnNwZWN0b3JXaW5kb3cpIHsKLSAgICAgICAgICAgIGd0a193aWRnZXRfZGVz
dHJveShtX2luc3BlY3RvcldpbmRvdyk7Ci0gICAgICAgICAgICBtX2luc3BlY3RvcldpbmRvdyA9
IDA7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gSW5zcGVjdG9yVGVzdDo6Y2xvc2VkKCk7
Ci0gICAgfQotCi0gICAgYm9vbCBhdHRhY2goKQotICAgIHsKLSAgICAgICAgR1JlZlB0cjxXZWJL
aXRXZWJWaWV3QmFzZT4gaW5zcGVjdG9yVmlldyA9IHdlYmtpdF93ZWJfaW5zcGVjdG9yX2dldF93
ZWJfdmlldyhtX2luc3BlY3Rvcik7Ci0gICAgICAgIGlmIChtX2luc3BlY3RvcldpbmRvdykgewot
ICAgICAgICAgICAgZ3RrX2NvbnRhaW5lcl9yZW1vdmUoR1RLX0NPTlRBSU5FUihtX2luc3BlY3Rv
cldpbmRvdyksIEdUS19XSURHRVQoaW5zcGVjdG9yVmlldy5nZXQoKSkpOwotICAgICAgICAgICAg
Z3RrX3dpZGdldF9kZXN0cm95KG1faW5zcGVjdG9yV2luZG93KTsKLSAgICAgICAgICAgIG1faW5z
cGVjdG9yV2luZG93ID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgIEd0a1dpZGdldCogcGFuZTsK
LSAgICAgICAgaWYgKGd0a19iaW5fZ2V0X2NoaWxkKEdUS19CSU4obV9wYXJlbnRXaW5kb3cpKSA9
PSBHVEtfV0lER0VUKG1fd2ViVmlldykpIHsKLSAgICAgICAgICAgIEdSZWZQdHI8V2ViS2l0V2Vi
Vmlldz4gaW5zcGVjdGVkVmlldyA9IG1fd2ViVmlldzsKLSAgICAgICAgICAgIGd0a19jb250YWlu
ZXJfcmVtb3ZlKEdUS19DT05UQUlORVIobV9wYXJlbnRXaW5kb3cpLCBHVEtfV0lER0VUKG1fd2Vi
VmlldykpOwotICAgICAgICAgICAgcGFuZSA9IGd0a19wYW5lZF9uZXcoR1RLX09SSUVOVEFUSU9O
X1ZFUlRJQ0FMKTsKLSAgICAgICAgICAgIGd0a19wYW5lZF9hZGQxKEdUS19QQU5FRChwYW5lKSwg
R1RLX1dJREdFVChtX3dlYlZpZXcpKTsKLSAgICAgICAgICAgIGd0a19jb250YWluZXJfYWRkKEdU
S19DT05UQUlORVIobV9wYXJlbnRXaW5kb3cpLCBwYW5lKTsKLSAgICAgICAgICAgIGd0a193aWRn
ZXRfc2hvd19hbGwocGFuZSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcGFuZSA9IGd0
a19iaW5fZ2V0X2NoaWxkKEdUS19CSU4obV9wYXJlbnRXaW5kb3cpKTsKLSAgICAgICAgZ3RrX3Bh
bmVkX3NldF9wb3NpdGlvbihHVEtfUEFORUQocGFuZSksIHdlYmtpdF93ZWJfaW5zcGVjdG9yX2dl
dF9hdHRhY2hlZF9oZWlnaHQobV9pbnNwZWN0b3IpKTsKLSAgICAgICAgZ3RrX3BhbmVkX2FkZDIo
R1RLX1BBTkVEKHBhbmUpLCBHVEtfV0lER0VUKGluc3BlY3RvclZpZXcuZ2V0KCkpKTsKLQotICAg
ICAgICByZXR1cm4gSW5zcGVjdG9yVGVzdDo6YXR0YWNoKCk7Ci0gICAgfQotCi0gICAgYm9vbCBk
ZXRhY2goKQotICAgIHsKLSAgICAgICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3QmFzZT4gaW5zcGVj
dG9yVmlldyA9IHdlYmtpdF93ZWJfaW5zcGVjdG9yX2dldF93ZWJfdmlldyhtX2luc3BlY3Rvcik7
Ci0gICAgICAgIEd0a1dpZGdldCogcGFuZSA9IGd0a19iaW5fZ2V0X2NoaWxkKEdUS19CSU4obV9w
YXJlbnRXaW5kb3cpKTsKLSAgICAgICAgZ19hc3NlcnQoR1RLX0lTX1BBTkVEKHBhbmUpKTsKLSAg
ICAgICAgZ3RrX2NvbnRhaW5lcl9yZW1vdmUoR1RLX0NPTlRBSU5FUihwYW5lKSwgR1RLX1dJREdF
VChpbnNwZWN0b3JWaWV3LmdldCgpKSk7Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3JUZXN0Ojpk
ZXRhY2goKTsKLSAgICB9Ci0KLSAgICB2b2lkIGRlc3Ryb3lXaW5kb3coKQotICAgIHsKLSAgICAg
ICAgZ19hc3NlcnQobV9pbnNwZWN0b3JXaW5kb3cpOwotICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ry
b3kobV9pbnNwZWN0b3JXaW5kb3cpOwotICAgICAgICBtX2luc3BlY3RvcldpbmRvdyA9IDA7Ci0g
ICAgfQotCi0gICAgR3RrV2lkZ2V0KiBtX2luc3BlY3RvcldpbmRvdzsKLX07Ci0KLXN0YXRpYyB2
b2lkIHRlc3RJbnNwZWN0b3JNYW51YWxBdHRhY2hEZXRhY2goQ3VzdG9tSW5zcGVjdG9yVGVzdCog
dGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50
aWxNYXBwZWQoR1RLX1dJTkRPV19UT1BMRVZFTCk7Ci0gICAgdGVzdC0+cmVzaXplVmlldygyMDAs
IDIwMCk7Ci0gICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxib2R5PjxwPldlYktpdEdUSysgSW5z
cGVjdG9yIHRlc3Q8L3A+PC9ib2R5PjwvaHRtbD4iLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxM
b2FkRmluaXNoZWQoKTsKLQotICAgIHRlc3QtPnNob3coKTsKLSAgICB0ZXN0LT5hc3NlcnRPYmpl
Y3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHdlYmtpdF93ZWJfaW5zcGVjdG9y
X2dldF93ZWJfdmlldyh0ZXN0LT5tX2luc3BlY3RvcikpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0
X3dlYl9pbnNwZWN0b3JfaXNfYXR0YWNoZWQodGVzdC0+bV9pbnNwZWN0b3IpKTsKLSAgICBWZWN0
b3I8SW5zcGVjdG9yVGVzdDo6SW5zcGVjdG9yRXZlbnRzPiYgZXZlbnRzID0gdGVzdC0+bV9ldmVu
dHM7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAxKTsKLSAgICBnX2Fz
c2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgSW5zcGVjdG9yVGVzdDo6T3BlbldpbmRvdyk7Ci0g
ICAgdGVzdC0+bV9ldmVudHMuY2xlYXIoKTsKLQotICAgIHRlc3QtPnJlc2l6ZVZpZXdBbmRBdHRh
Y2goKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2luc3BlY3Rvcl9pc19hdHRhY2hlZCh0ZXN0
LT5tX2luc3BlY3RvcikpOwotICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X3dlYl9pbnNwZWN0
b3JfZ2V0X2F0dGFjaGVkX2hlaWdodCh0ZXN0LT5tX2luc3BlY3RvciksID49LCBJbnNwZWN0b3JU
ZXN0OjpnTWluaW11bUF0dGFjaGVkSW5zcGVjdG9ySGVpZ2h0KTsKLSAgICBldmVudHMgPSB0ZXN0
LT5tX2V2ZW50czsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDEpOwot
ICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBJbnNwZWN0b3JUZXN0OjpBdHRhY2gp
OwotICAgIHRlc3QtPm1fZXZlbnRzLmNsZWFyKCk7Ci0KLSAgICB0ZXN0LT5kZXRhY2hBbmRXYWl0
VW50aWxXaW5kb3dPcGVuZWQoKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl9pbnNwZWN0b3Jf
aXNfYXR0YWNoZWQodGVzdC0+bV9pbnNwZWN0b3IpKTsKLSAgICBldmVudHMgPSB0ZXN0LT5tX2V2
ZW50czsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDIpOwotICAgIGdf
YXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBJbnNwZWN0b3JUZXN0OjpEZXRhY2gpOwotICAg
IGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBJbnNwZWN0b3JUZXN0OjpPcGVuV2luZG93
KTsKLSAgICB0ZXN0LT5tX2V2ZW50cy5jbGVhcigpOwotCi0gICAgdGVzdC0+cmVzaXplVmlld0Fu
ZEF0dGFjaCgpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfaW5zcGVjdG9yX2lzX2F0dGFjaGVk
KHRlc3QtPm1faW5zcGVjdG9yKSk7Ci0gICAgdGVzdC0+bV9ldmVudHMuY2xlYXIoKTsKLSAgICB0
ZXN0LT5jbG9zZSgpOwotICAgIGV2ZW50cyA9IHRlc3QtPm1fZXZlbnRzOwotICAgIGdfYXNzZXJ0
X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgMik7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50
c1swXSwgPT0sIEluc3BlY3RvclRlc3Q6OkRldGFjaCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2
ZW50c1sxXSwgPT0sIEluc3BlY3RvclRlc3Q6OkNsb3NlZCk7Ci0gICAgdGVzdC0+bV9ldmVudHMu
Y2xlYXIoKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdEluc3BlY3RvckN1c3RvbUNvbnRhaW5lckRl
c3Ryb3llZChDdXN0b21JbnNwZWN0b3JUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAg
IHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZChHVEtfV0lORE9XX1RPUExFVkVM
KTsKLSAgICB0ZXN0LT5yZXNpemVWaWV3KDIwMCwgMjAwKTsKLSAgICB0ZXN0LT5sb2FkSHRtbCgi
PGh0bWw+PGJvZHk+PHA+V2ViS2l0R1RLKyBJbnNwZWN0b3IgdGVzdDwvcD48L2JvZHk+PC9odG1s
PiIsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgdGVzdC0+
c2hvdygpOwotICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMo
R19PQkpFQ1Qod2Via2l0X3dlYl9pbnNwZWN0b3JfZ2V0X3dlYl92aWV3KHRlc3QtPm1faW5zcGVj
dG9yKSkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX2luc3BlY3Rvcl9pc19hdHRhY2hlZCh0
ZXN0LT5tX2luc3BlY3RvcikpOwotCi0gICAgdGVzdC0+bV9ldmVudHMuY2xlYXIoKTsKLSAgICB0
ZXN0LT5kZXN0cm95V2luZG93KCk7Ci0gICAgVmVjdG9yPEluc3BlY3RvclRlc3Q6Okluc3BlY3Rv
ckV2ZW50cz4mIGV2ZW50cyA9IHRlc3QtPm1fZXZlbnRzOwotICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHMuc2l6ZSgpLCA9PSwgMSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0s
IEluc3BlY3RvclRlc3Q6OkNsb3NlZCk7Ci0gICAgdGVzdC0+bV9ldmVudHMuY2xlYXIoKTsKLX0K
LQotdm9pZCBiZWZvcmVBbGwoKQotewotICAgIEluc3BlY3RvclRlc3Q6OmFkZCgiV2ViS2l0V2Vi
SW5zcGVjdG9yIiwgImRlZmF1bHQiLCB0ZXN0SW5zcGVjdG9yRGVmYXVsdCk7Ci0gICAgQ3VzdG9t
SW5zcGVjdG9yVGVzdDo6YWRkKCJXZWJLaXRXZWJJbnNwZWN0b3IiLCAibWFudWFsLWF0dGFjaC1k
ZXRhY2giLCB0ZXN0SW5zcGVjdG9yTWFudWFsQXR0YWNoRGV0YWNoKTsKLSAgICBDdXN0b21JbnNw
ZWN0b3JUZXN0OjphZGQoIldlYktpdFdlYkluc3BlY3RvciIsICJjdXN0b20tY29udGFpbmVyLWRl
c3Ryb3llZCIsIHRlc3RJbnNwZWN0b3JDdXN0b21Db250YWluZXJEZXN0cm95ZWQpOwotfQotCi12
b2lkIGFmdGVyQWxsKCkKLXsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL1Rlc3RJbnNwZWN0b3JTZXJ2ZXIuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdEluc3BlY3RvclNlcnZlci5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmNGJmNTQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdEluc3BlY3RvclNlcnZlci5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwyOTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1z
dW5nIEVsZWN0cm9uaWNzIEx0ZC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotICogQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKLSNpbmNs
dWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+Ci0KLS8vIE5hbWUgb2YgdGhlIHRlc3Qgc2VydmVyIGFwcGxpY2F0aW9uIGNyZWF0aW5nIHRo
ZSB3ZWJWaWV3IG9iamVjdC4KLXN0YXRpYyBjb25zdCBjaGFyKiBnVGVzdFNlcnZlckFwcE5hbWUg
PSAiSW5zcGVjdG9yVGVzdFNlcnZlciI7Ci0KLS8vIE1heCBzZWNvbmRzIHRvIHdhaXQgZm9yIHRo
ZSB0ZXN0IHNlcnZlciBiZWZvcmUgaW5zcGVjdGluZyBpdC4KLXN0YXRpYyBjb25zdCBpbnQgZ01h
eFdhaXRGb3JDaGlsZCA9IDU7Ci0KLS8vIFRoZSBQSUQgZm9yIHRoZSB0ZXN0IHNlcnZlciBydW5u
aW5nLCBzbyB3ZSBjYW4ga2lsbCBpdCBpZiBuZWVkZWQuCi1zdGF0aWMgR1BpZCBnQ2hpbGRQcm9j
ZXNzUGlkID0gMDsKLQotLy8gV2hldGhlciB0aGUgY2hpbGQgaGFzIHJlcGxpZWQgYW5kIGl0J3Mg
cmVhZHkuCi1zdGF0aWMgYm9vbCBnQ2hpbGRJc1JlYWR5ID0gZmFsc2U7Ci0KLXN0YXRpYyB2b2lk
IHN0b3BUZXN0U2VydmVyKCkKLXsKLSAgICAvLyBEbyBub3RoaW5nIGlmIHRoZXJlJ3Mgbm8gc2Vy
dmVyIHJ1bm5pbmcuCi0gICAgaWYgKCFnQ2hpbGRQcm9jZXNzUGlkKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBnX3NwYXduX2Nsb3NlX3BpZChnQ2hpbGRQcm9jZXNzUGlkKTsKLSAgICBraWxsKGdD
aGlsZFByb2Nlc3NQaWQsIFNJR1RFUk0pOwotICAgIGdDaGlsZFByb2Nlc3NQaWQgPSAwOwotfQot
Ci1zdGF0aWMgdm9pZCBzaWdBYm9ydEhhbmRsZXIoaW50IHNpZ051bSkKLXsKLSAgICAvLyBKdXN0
IHN0b3AgdGhlIHRlc3Qgc2VydmVyIGlmIFNJR0FCUlQgd2FzIHJlY2VpdmVkLgotICAgIHN0b3BU
ZXN0U2VydmVyKCk7Ci19Ci0KLXN0YXRpYyBncG9pbnRlciB0ZXN0U2VydmVyTW9uaXRvclRocmVh
ZEZ1bmMoZ3BvaW50ZXIpCi17Ci0gICAgLy8gV2FpdCBmb3IgdGhlIHNwZWNpZmllZCB0aW1lb3V0
IHRvIGhhcHBlbi4KLSAgICBnX3VzbGVlcChnTWF4V2FpdEZvckNoaWxkICogR19VU0VDX1BFUl9T
RUMpOwotCi0gICAgLy8gS2lsbCB0aGUgY2hpbGQgcHJvY2VzcyBpZiBub3QgcmVhZHkgeWV0Lgot
ICAgIGlmICghZ0NoaWxkSXNSZWFkeSkKLSAgICAgICAgc3RvcFRlc3RTZXJ2ZXIoKTsKLQotICAg
IGdfdGhyZWFkX2V4aXQoMCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0YXJ0
VGVzdFNlcnZlck1vbml0b3IoKQotewotICAgIGdDaGlsZElzUmVhZHkgPSBmYWxzZTsKLSAgICBn
X3RocmVhZF9uZXcoIlRlc3RTZXJ2ZXJNb25pdG9yIiwgdGVzdFNlcnZlck1vbml0b3JUaHJlYWRG
dW5jLCAwKTsKLX0KLQotc3RhdGljIHZvaWQgc3RhcnRUZXN0U2VydmVyKCkKLXsKLSAgICAvLyBQ
cmVwYXJlIGFyZ3ZbXSBmb3Igc3Bhd25pbmcgdGhlIHNlcnZlciBwcm9jZXNzLgotICAgIEdPd25Q
dHI8Y2hhcj4gdGVzdFNlcnZlclBhdGgoZ19idWlsZF9maWxlbmFtZShXRUJLSVRfRVhFQ19QQVRI
LCAiV2ViS2l0MkdPYmplY3RBUElUZXN0cyIsIGdUZXN0U2VydmVyQXBwTmFtZSwgTlVMTCkpOwot
Ci0gICAgLy8gV2UgaW5zdGFsbCBhIGhhbmRsZXIgdG8gZW5zdXJlIHRoYXQgd2Uga2lsbCB0aGUg
Y2hpbGQgcHJvY2VzcwotICAgIC8vIGlmIHRoZSBwYXJlbnQgZGllcyBiZWNhdXNlIG9mIHdoYXRl
dmVyIHRoZSByZWFzb24gaXMuCi0gICAgc2lnbmFsKFNJR0FCUlQsIHNpZ0Fib3J0SGFuZGxlcik7
Ci0KLSAgICBjaGFyKiB0ZXN0U2VydmVyQXJndlsyXTsKLSAgICB0ZXN0U2VydmVyQXJndlswXSA9
IHRlc3RTZXJ2ZXJQYXRoLmdldCgpOwotICAgIHRlc3RTZXJ2ZXJBcmd2WzFdID0gMDsKLQotICAg
IC8vIFNwYXduIHRoZSBzZXJ2ZXIsIGdldHRpbmcgaXRzIHN0ZG91dCBmaWxlIGRlc2NyaXB0b3Ig
dG8gc2V0IGEKLSAgICAvLyBjb21tdW5pY2F0aW9uIGNoYW5uZWwsIHNvIHdlIGtub3cgd2hlbiBp
dCdzIHJlYWR5LgotICAgIGludCBjaGlsZFN0ZG91dCA9IDA7Ci0gICAgZ19hc3NlcnQoZ19zcGF3
bl9hc3luY193aXRoX3BpcGVzKDAsIHRlc3RTZXJ2ZXJBcmd2LCAwLCBzdGF0aWNfY2FzdDxHU3Bh
d25GbGFncz4oMCksIDAsIDAsCi0gICAgICAgICZnQ2hpbGRQcm9jZXNzUGlkLCAwLCAmY2hpbGRT
dGRvdXQsIDAsIDApKTsKLQotICAgIC8vIFN0YXJ0IG1vbml0b3JpbmcgdGhlIHRlc3Qgc2VydmVy
IChpbiBhIHNlcGFyYXRlIHRocmVhZCkgdG8KLSAgICAvLyBlbnN1cmUgd2UgZG9uJ3QgYmxvY2sg
b24gdGhlIGNoaWxkIHByb2Nlc3MgbW9yZSB0aGFuIGEgdGltZW91dC4KLSAgICBzdGFydFRlc3RT
ZXJ2ZXJNb25pdG9yKCk7Ci0KLSAgICBjaGFyIG1zZ1syXTsKLSAgICBHSU9DaGFubmVsKiBpb0No
YW5uZWwgPSBnX2lvX2NoYW5uZWxfdW5peF9uZXcoY2hpbGRTdGRvdXQpOwotICAgIGlmIChnX2lv
X2NoYW5uZWxfcmVhZF9jaGFycyhpb0NoYW5uZWwsIG1zZywgMiwgMCwgMCkgPT0gR19JT19TVEFU
VVNfTk9STUFMKSB7Ci0gICAgICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlIHNlcnZlciBzZW50IGEg
bWVzc2FnZSBzYXlpbmcgaXQncyByZWFkeQotICAgICAgICAvLyBhbmQgc3RvcmUgdGhlIHJlc3Vs
dCBnbG9iYWxseSwgc28gdGhlIG1vbml0b3IgY2FuIHNlZSBpdC4KLSAgICAgICAgZ0NoaWxkSXNS
ZWFkeSA9IG1zZ1swXSA9PSAnTycgJiYgbXNnWzFdID09ICdLJzsKLSAgICB9Ci0gICAgZ19pb19j
aGFubmVsX3VucmVmKGlvQ2hhbm5lbCk7Ci0gICAgY2xvc2UoY2hpbGRTdGRvdXQpOwotCi0gICAg
Ly8gVGhlIHRpbWVvdXQgd2FzIHJlYWNoZWQgYW5kIHRoZSBzZXJ2ZXIgaXMgbm90IHJlYWR5IHll
dCwgc28KLSAgICAvLyBzdG9wIGl0IGlubWVkaWF0ZWx5LCBhbmQgbGV0IHRoZSB1bml0IHRlc3Rz
IGZhaWwuCi0gICAgaWYgKCFnQ2hpbGRJc1JlYWR5KQotICAgICAgICBzdG9wVGVzdFNlcnZlcigp
OwotfQotCi1jbGFzcyBJbnNwZWN0b3JTZXJ2ZXJUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3Qgewot
cHVibGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoSW5zcGVjdG9yU2VydmVyVGVzdCk7
Ci0KLSAgICBJbnNwZWN0b3JTZXJ2ZXJUZXN0KCkKLSAgICAgICAgOiBXZWJWaWV3VGVzdCgpCi0g
ICAgewotICAgIH0KLQotICAgIGJvb2wgZ2V0UGFnZUxpc3QoKQotICAgIHsKLSAgICAgICAgbG9h
ZEh0bWwoIjxzY3JpcHQgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiPlxuIgotICAgICAgICAgICAg
InZhciBwYWdlcztcbiIKLSAgICAgICAgICAgICJ2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0
O1xuIgotICAgICAgICAgICAgInhoci5vcGVuKFwiR0VUXCIsIFwiL3BhZ2VsaXN0Lmpzb25cIik7
XG4iCi0gICAgICAgICAgICAieGhyLm9ubG9hZCA9IGZ1bmN0aW9uKGUpIHtcbiIKLSAgICAgICAg
ICAgICAgICAiaWYgKHhoci5zdGF0dXMgPT0gMjAwKSB7XG4iCi0gICAgICAgICAgICAgICAgICAg
ICJwYWdlcyA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4iCi0gICAgICAgICAgICAg
ICAgICAgICJkb2N1bWVudC50aXRsZSA9IFwiT0tcIjtcbiIKLSAgICAgICAgICAgICAgICAifSBl
bHNlIFxuIgotICAgICAgICAgICAgICAgICAgICAiZG9jdW1lbnQudGl0bGUgPSBcIkZBSUxcIjtc
biIKLSAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgInhoci5zZW5kKCk7XG4iCi0g
ICAgICAgICAgICAiPC9zY3JpcHQ+XG4iLAotICAgICAgICAgICAgImh0dHA6Ly8xMjcuMC4wLjE6
Mjk5OS8iKTsKLQotICAgICAgICB3YWl0VW50aWxUaXRsZUNoYW5nZWQoKTsKLQotICAgICAgICBp
ZiAoIXN0cmNtcCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3RpdGxlKG1fd2ViVmlldyksICJPSyIpKQot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIH5JbnNwZWN0b3JTZXJ2ZXJUZXN0KCkKLSAgICB7Ci0gICAgfQotfTsKLQotLy8gVGVz
dCB0byBnZXQgaW5zcGVjdG9yIHNlcnZlciBwYWdlIGxpc3QgZnJvbSB0aGUgdGVzdCBzZXJ2ZXIu
Ci0vLyBTaG91bGQgY29udGFpbiBvbmx5IG9uZSBlbnRyeSBwb2ludGluZyB0byBodHRwOi8vMTI3
LjAuMC4xOjI5OTkvd2ViaW5zcGVjdG9yL01haW4uaHRtbD9wYWdlPTEKLXN0YXRpYyB2b2lkIHRl
c3RJbnNwZWN0b3JTZXJ2ZXJQYWdlTGlzdChJbnNwZWN0b3JTZXJ2ZXJUZXN0KiB0ZXN0LCBnY29u
c3Rwb2ludGVyKQotewotICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKLQotICAgIHRlc3QtPnNo
b3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZChHVEtfV0lORE9XX1RPUExFVkVMKTsKLSAgICBn
X2Fzc2VydCh0ZXN0LT5nZXRQYWdlTGlzdCgpKTsKLQotICAgIFdlYktpdEphdmFzY3JpcHRSZXN1
bHQqIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmlu
aXNoZWQoInBhZ2VzLmxlbmd0aDsiLCAmZXJyb3Iub3V0UHRyKCkpOwotICAgIGdfYXNzZXJ0KGph
dmFzY3JpcHRSZXN1bHQpOwotICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7Ci0gICAgZ19hc3Nl
cnRfY21waW50KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9OdW1iZXIoamF2YXNjcmlw
dFJlc3VsdCksID09LCAxKTsKLQotICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZh
U2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoInBhZ2VzWzBdLmlkOyIsICZlcnJvci5vdXRQdHIo
KSk7Ci0gICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAgZ19hc3NlcnQoIWVycm9y
LmdldCgpKTsKLSAgICBpbnQgcGFnZUlkID0gV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRU
b051bWJlcihqYXZhc2NyaXB0UmVzdWx0KTsKLQotICAgIEdPd25QdHI8Y2hhcj4gdmFsdWVTdHJp
bmc7Ci0gICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50
aWxGaW5pc2hlZCgicGFnZXNbMF0udXJsOyIsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgZ19hc3Nl
cnQoamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKLSAgICB2
YWx1ZVN0cmluZy5zZXQoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0NTdHJpbmcoamF2
YXNjcmlwdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih2YWx1ZVN0cmluZy5nZXQoKSwg
PT0sICJodHRwOi8vMTI3LjAuMC4xOjI5OTkvIik7Ci0KLSAgICBqYXZhc2NyaXB0UmVzdWx0ID0g
dGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJwYWdlc1swXS5pbnNwZWN0
b3JVcmw7IiwgJmVycm9yLm91dFB0cigpKTsKLSAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0
KTsKLSAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOwotICAgIHZhbHVlU3RyaW5nLnNldChXZWJW
aWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7Ci0g
ICAgU3RyaW5nIHZhbGlkSW5zcGVjdG9yVVJMID0gU3RyaW5nKCIvTWFpbi5odG1sP3BhZ2U9Iikg
KyBTdHJpbmc6Om51bWJlcihwYWdlSWQpOwotICAgIEFTU0VSVF9DTVBfQ1NUUklORyh2YWx1ZVN0
cmluZy5nZXQoKSwgPT0sIHZhbGlkSW5zcGVjdG9yVVJMLnV0ZjgoKSk7Ci19Ci0KLS8vIFRlc3Qg
c2VuZGluZyBhIHJhdyByZW1vdGUgZGVidWdnaW5nIG1lc3NhZ2UgdGhyb3VnaCBvdXIgd2ViIHNv
Y2tldCBzZXJ2ZXIuCi0vLyBGb3IgdGhpcyBzcGVjaWZpYyBtZXNzYWdlIHNlZTogaHR0cDovL2Nv
ZGUuZ29vZ2xlLmNvbS9jaHJvbWUvZGV2dG9vbHMvZG9jcy9wcm90b2NvbC90b3QvcnVudGltZS5o
dG1sI2NvbW1hbmQtZXZhbHVhdGUKLXN0YXRpYyB2b2lkIHRlc3RSZW1vdGVEZWJ1Z2dpbmdNZXNz
YWdlKEluc3BlY3RvclNlcnZlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVz
dC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKEdUS19XSU5ET1dfVE9QTEVWRUwpOwot
Ci0gICAgdGVzdC0+bG9hZEh0bWwoIjxzY3JpcHQgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiPlxu
IgotICAgICAgICAidmFyIHNvY2tldCA9IG5ldyBXZWJTb2NrZXQoJ3dzOi8vMTI3LjAuMC4xOjI5
OTkvZGV2dG9vbHMvcGFnZS8xJyk7XG4iCi0gICAgICAgICJzb2NrZXQub25tZXNzYWdlID0gZnVu
Y3Rpb24obWVzc2FnZSkge1xuIgotICAgICAgICAgICAgInZhciByZXNwb25zZSA9IEpTT04ucGFy
c2UobWVzc2FnZS5kYXRhKTtcbiIKLSAgICAgICAgICAgICJpZiAocmVzcG9uc2UuaWQgPT09IDEp
XG4iCi0gICAgICAgICAgICAgICAgImRvY3VtZW50LnRpdGxlID0gcmVzcG9uc2UucmVzdWx0LnJl
c3VsdC52YWx1ZTtcbiIKLSAgICAgICAgICAgICJlbHNlXG4iCi0gICAgICAgICAgICAgICAgImRv
Y3VtZW50LnRpdGxlID0gXCJGQUlMXCI7XG4iCi0gICAgICAgICAgICAifVxuIgotICAgICAgICAg
ICAgInNvY2tldC5vbm9wZW4gPSBmdW5jdGlvbigpIHtcbiIKLSAgICAgICAgICAgICJzb2NrZXQu
c2VuZCgne1wiaWRcIjogMSwgXCJtZXRob2RcIjogXCJSdW50aW1lLmV2YWx1YXRlXCIsIFwicGFy
YW1zXCI6IHtcImV4cHJlc3Npb25cIjogXCIyICsgMlwiIH0gfScpO1xuIgotICAgICAgICAifVxu
IgotICAgICAgICAiPC9zY3JpcHQ+IiwKLSAgICAgICAgImh0dHA6Ly8xMjcuMC4wLjE6Mjk5OS8i
KTsKLSAgICB0ZXN0LT53YWl0VW50aWxUaXRsZUNoYW5nZWQoKTsKLQotICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3RpdGxlKHRlc3QtPm1fd2ViVmlldyksID09LCAiNCIp
OwotfQotCi1zdGF0aWMgdm9pZCBvcGVuUmVtb3RlRGVidWdnaW5nU2Vzc2lvbihJbnNwZWN0b3JT
ZXJ2ZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIC8vIFRvIHRlc3QgdGhlIHdo
b2xlIHBpcGVsaW5lIHRoaXMgZXhwbG9pdHMgYSBiZWhhdmlvciBvZiB0aGUgaW5zcGVjdG9yIGZy
b250LWVuZCB3aGljaCB3b24ndCBwcm92aWRlIHRoZSBwYWdlIGFkZHJlc3MgYXMgdGl0bGUgdW5s
ZXNzIHRoZQotICAgIC8vIGRlYnVnZ2luZyBzZXNzaW9uIHdhcyBlc3RhYmxpc2hlZCBjb3JyZWN0
bHkgdGhyb3VnaCB3ZWIgc29ja2V0LgotICAgIC8vIEluIG91ciBjYXNlIHBhZ2UgVVJMIHNob3Vs
ZCBiZSBodHRwOi8vMTI3LjAuMC4xOjI5OTkvCi0gICAgLy8gU28gdGhpcyB0ZXN0IGNhc2Ugd2ls
bCBmYWlsIGlmOgotICAgIC8vIC0gVGhlIHBhZ2UgbGlzdCBkaWRuJ3QgcmV0dXJuIGEgdmFsaWQg
aW5zcGVjdG9yIFVSTAotICAgIC8vIC0gT3IgdGhlIGZyb250LWVuZCBjb3VsZG4ndCBiZSBsb2Fk
ZWQgdGhyb3VnaCB0aGUgaW5zcGVjdG9yIEhUVFAgc2VydmVyCi0gICAgLy8gLSBPciB0aGUgd2Vi
IHNvY2tldCBjb25uZWN0aW9uIGNvdWxkbid0IGJlIGVzdGFibGlzaGVkIGJldHdlZW4gdGhlIGZy
b250LWVuZCBhbmQgdGhlIHBhZ2UgdGhyb3VnaCB0aGUgaW5zcGVjdG9yIHNlcnZlcgotICAgIC8v
IExldCdzIHNlZSBpZiB0aGlzIHRlc3QgaXNuJ3QgcmFpc2luZyB0b28gbWFueSBmYWxzZSBwb3Np
dGl2ZXMsIGluIHdoaWNoIGNhc2Ugd2Ugc2hvdWxkIHVzZSBhIGJldHRlciBwcmVkaWNhdGUgaWYg
YXZhaWxhYmxlLgotCi0gICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKEdU
S19XSU5ET1dfVE9QTEVWRUwpOwotCi0gICAgZ19hc3NlcnQodGVzdC0+Z2V0UGFnZUxpc3QoKSk7
Ci0KLSAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgV2ViS2l0SmF2YXNjcmlwdFJlc3Vs
dCogamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5p
c2hlZCgicGFnZXNbMF0uaW5zcGVjdG9yVXJsOyIsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgZ19h
c3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKLQot
ICAgIFN0cmluZyByZXNvbHZlZFVSTCA9IFN0cmluZygiaHR0cDovLzEyNy4wLjAuMToyOTk5LyIp
ICsgU3RyaW5nOjpmcm9tVVRGOChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmlu
ZyhqYXZhc2NyaXB0UmVzdWx0KSk7Ci0gICAgdGVzdC0+bG9hZFVSSShyZXNvbHZlZFVSTC51dGY4
KCkuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIGph
dmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQo
IndpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnbGknKVswXS50aXRsZSIsICZl
cnJvci5vdXRQdHIoKSk7Ci0gICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAgZ19h
c3NlcnQoIWVycm9yLmdldCgpKTsKLQotICAgIEdPd25QdHI8Y2hhcj4gdGl0bGUoV2ViVmlld1Rl
c3Q6OmphdmFzY3JpcHRSZXN1bHRUb0NTdHJpbmcoamF2YXNjcmlwdFJlc3VsdCkpOwotICAgIGdf
YXNzZXJ0X2NtcHN0cih0aXRsZS5nZXQoKSwgPT0sICJodHRwOi8vMTI3LjAuMC4xOjI5OTkvIik7
Ci19Ci0KLXN0YXRpYyB2b2lkIHNlbmRJbmNvbXBsZXRlUmVxdWVzdChJbnNwZWN0b3JTZXJ2ZXJU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsK
LQotICAgIC8vIENvbm5lY3QgdG8gdGhlIGluc3BlY3RvciBzZXJ2ZXIuCi0gICAgR1JlZlB0cjxH
U29ja2V0Q2xpZW50PiBjbGllbnQgPSBhZG9wdEdSZWYoZ19zb2NrZXRfY2xpZW50X25ldygpKTsK
LSAgICBHUmVmUHRyPEdTb2NrZXRDb25uZWN0aW9uPiBjb25uZWN0aW9uID0gYWRvcHRHUmVmKGdf
c29ja2V0X2NsaWVudF9jb25uZWN0X3RvX2hvc3QoY2xpZW50LmdldCgpLCAiMTI3LjAuMC4xIiwg
Mjk5OSwgMCwgJmVycm9yLm91dFB0cigpKSk7Ci0gICAgZ19hc3NlcnRfbm9fZXJyb3IoZXJyb3Iu
Z2V0KCkpOwotCi0gICAgLy8gU2VuZCBpbmNvbXBsZXRlIHJlcXVlc3QgKG1pc3NpbmcgYmxhbmsg
bGluZSBhZnRlciBoZWFkZXJzKSBhbmQgY2hlY2sgaWYgaW5zcGVjdG9yIHNlcnZlcgotICAgIC8v
IHJlcGxpZXMuIFRoZSBzZXJ2ZXIgc2hvdWxkIG5vdCByZXBseSB0byBhbiBpbmNvbXBsZXRlIHJl
cXVlc3QgYW5kIHRoZSB0ZXN0IHNob3VsZCB0aW1lb3V0Ci0gICAgLy8gb24gcmVhZC4KLSAgICBH
T3V0cHV0U3RyZWFtKiBvc3RyZWFtID0gZ19pb19zdHJlYW1fZ2V0X291dHB1dF9zdHJlYW0oR19J
T19TVFJFQU0oY29ubmVjdGlvbi5nZXQoKSkpOwotICAgIC8vIFJlcXVlc3QgbWlzc2luZyBibGFu
ayBsaW5lIGFmdGVyIGhlYWRlcnMuCi0gICAgY29uc3QgZ2NoYXIqIGluY29tcGxldGVSZXF1ZXN0
ID0gIkdFVCAvZGV2dG9vbHMvcGFnZS8xIEhUVFAvMS4xXHJcbkhvc3Q6IExvY2FsaG9zdFxyXG4i
OwotICAgIGdfb3V0cHV0X3N0cmVhbV93cml0ZShvc3RyZWFtLCBpbmNvbXBsZXRlUmVxdWVzdCwg
c3RybGVuKGluY29tcGxldGVSZXF1ZXN0KSwgMCwgJmVycm9yLm91dFB0cigpKTsKLSAgICBnX2Fz
c2VydF9ub19lcnJvcihlcnJvci5nZXQoKSk7Ci0KLSAgICBHSW5wdXRTdHJlYW0qIGlzdHJlYW0g
PSBnX2lvX3N0cmVhbV9nZXRfaW5wdXRfc3RyZWFtKEdfSU9fU1RSRUFNKGNvbm5lY3Rpb24uZ2V0
KCkpKTsKLSAgICBjaGFyIHJlc3BvbnNlWzE2XTsKLSAgICBtZW1zZXQocmVzcG9uc2UsIDAsIHNp
emVvZihyZXNwb25zZSkpOwotICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBjYW5jZWwgPSBhZG9w
dEdSZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSk7Ci0gICAgZ19pbnB1dF9zdHJlYW1fcmVhZF9hc3lu
Yyhpc3RyZWFtLCByZXNwb25zZSwgc2l6ZW9mKHJlc3BvbnNlKSAtIDEsIEdfUFJJT1JJVFlfREVG
QVVMVCwgY2FuY2VsLmdldCgpLCAwLCAwKTsKLSAgICAvLyBHaXZlIGEgY2hhbmNlIGZvciB0aGUg
c2VydmVyIHRvIHJlcGx5LgotICAgIHRlc3QtPndhaXQoMSk7Ci0gICAgZ19jYW5jZWxsYWJsZV9j
YW5jZWwoY2FuY2VsLmdldCgpKTsKLSAgICAvLyBJZiB3ZSBnb3QgYW55IGFuc3dlciBpdCBtZWFu
cyB0aGUgc2VydmVyIHJlcGxpZWQgdG8gYW4gaW5jb21wbGV0ZSByZXF1ZXN0LCBsZXRzIGZhaWwu
Ci0gICAgZ19hc3NlcnQocmVzcG9uc2VbMF0gPT0gJ1wwJyk7Ci19Ci0KLXZvaWQgYmVmb3JlQWxs
KCkKLXsKLSAgICAvLyBPdmVyd3JpdGUgV0VCS0lUX0lOU1BFQ1RPUl9TRVJWRVIgdmFyaWFibGUg
d2l0aCBkZWZhdWx0IElQIGFkZHJlc3MgYnV0IGRpZmZlcmVudCBwb3J0IHRvIGF2b2lkIGNvbmZs
aWN0IHdpdGggdGhlIHRlc3QgaW5zcGVjdG9yIHNlcnZlciBwYWdlLgotICAgIGdfc2V0ZW52KCJX
RUJLSVRfSU5TUEVDVE9SX1NFUlZFUiIsICIxMjcuMC4wLjE6Mjk5OCIsIFRSVUUpOwotCi0gICAg
c3RhcnRUZXN0U2VydmVyKCk7Ci0gICAgSW5zcGVjdG9yU2VydmVyVGVzdDo6YWRkKCJXZWJLaXRX
ZWJJbnNwZWN0b3JTZXJ2ZXIiLCAidGVzdC1wYWdlLWxpc3QiLCB0ZXN0SW5zcGVjdG9yU2VydmVy
UGFnZUxpc3QpOwotICAgIEluc3BlY3RvclNlcnZlclRlc3Q6OmFkZCgiV2ViS2l0V2ViSW5zcGVj
dG9yU2VydmVyIiwgInRlc3QtcmVtb3RlLWRlYnVnZ2luZy1tZXNzYWdlIiwgdGVzdFJlbW90ZURl
YnVnZ2luZ01lc3NhZ2UpOwotICAgIEluc3BlY3RvclNlcnZlclRlc3Q6OmFkZCgiV2ViS2l0V2Vi
SW5zcGVjdG9yU2VydmVyIiwgInRlc3Qtb3Blbi1kZWJ1Z2dpbmctc2Vzc2lvbiIsIG9wZW5SZW1v
dGVEZWJ1Z2dpbmdTZXNzaW9uKTsKLSAgICBJbnNwZWN0b3JTZXJ2ZXJUZXN0OjphZGQoIldlYktp
dFdlYkluc3BlY3RvclNlcnZlciIsICJ0ZXN0LWluY29tcGxldGUtcmVxdWVzdCIsIHNlbmRJbmNv
bXBsZXRlUmVxdWVzdCk7Ci0KLX0KLQotdm9pZCBhZnRlckFsbCgpCi17Ci0gICAgc3RvcFRlc3RT
ZXJ2ZXIoKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL1Rlc3RMb2FkZXJDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvVGVzdExvYWRlckNsaWVudC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDMzMTkxNWUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvVGVzdExvYWRlckNsaWVudC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NjUg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBHdXN0YXZvIE5vcm9uaGEg
U2lsdmEKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBJZ2FsaWEgUy5MLgotICogUG9ydGlv
bnMgQ29weXJpZ2h0IChjKSAyMDExIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJMb2FkVHJhY2tpbmdU
ZXN0LmgiCi0jaW5jbHVkZSAiV2ViS2l0VGVzdEJ1cy5oIgotI2luY2x1ZGUgIldlYktpdFRlc3RT
ZXJ2ZXIuaCIKLSNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgotI2luY2x1ZGUgPGd0ay9ndGsuaD4K
LSNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
Ci0KLXN0YXRpYyBXZWJLaXRUZXN0QnVzKiBidXM7Ci1zdGF0aWMgV2ViS2l0VGVzdFNlcnZlciog
a1NlcnZlcjsKLQotY29uc3QgY2hhcioga0ROVEhlYWRlck5vdFByZXNlbnQgPSAiRE5UIGhlYWRl
ciBub3QgcHJlc2VudCI7Ci0KLXN0YXRpYyB2b2lkIHRlc3RMb2FkaW5nU3RhdHVzKExvYWRUcmFj
a2luZ1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICB0ZXN0LT5zZXRSZWRp
cmVjdFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvbm9ybWFsIikuZGF0YSgpKTsKLSAgICB0
ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9yZWRpcmVjdCIpLmRhdGEoKSk7
Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBWZWN0b3I8TG9hZFRy
YWNraW5nVGVzdDo6TG9hZEV2ZW50cz4mIGV2ZW50cyA9IHRlc3QtPm1fbG9hZEV2ZW50czsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDQpOwotICAgIGdfYXNzZXJ0X2Nt
cGludChldmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFy
dGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVz
dDo6UHJvdmlzaW9uYWxMb2FkUmVjZWl2ZWRTZXJ2ZXJSZWRpcmVjdCk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KGV2ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRDb21taXR0ZWQpOwot
ICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbM10sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2Fk
RmluaXNoZWQpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0TG9hZGluZ0Vycm9yKExvYWRUcmFja2lu
Z1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVy
LT5nZXRVUklGb3JQYXRoKCIvZXJyb3IiKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExv
YWRGaW5pc2hlZCgpOwotCi0gICAgVmVjdG9yPExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRFdmVudHM+
JiBldmVudHMgPSB0ZXN0LT5tX2xvYWRFdmVudHM7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50
cy5zaXplKCksID09LCAzKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgTG9h
ZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7Ci0gICAgZ19hc3NlcnRfY21w
aW50KGV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZEZhaWxl
ZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6
OkxvYWRGaW5pc2hlZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFzc2VydE5vcm1hbExvYWRIYXBwZW5l
ZChWZWN0b3I8TG9hZFRyYWNraW5nVGVzdDo6TG9hZEV2ZW50cz4mIGV2ZW50cykKLXsKLSAgICBn
X2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDMpOwotICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVk
KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6
TG9hZENvbW1pdHRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIExvYWRU
cmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RMb2FkSHRt
bChMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxv
YWRIdG1sKCI8aHRtbD48Ym9keT5IZWxsbyBXZWJLaXQtR1RLKzwvYm9keT48L2h0bWw+IiwgMCk7
Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgYXNzZXJ0Tm9ybWFsTG9h
ZEhhcHBlbmVkKHRlc3QtPm1fbG9hZEV2ZW50cyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RMb2Fk
QWx0ZXJuYXRlSFRNTChMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewot
ICAgIHRlc3QtPmxvYWRBbHRlcm5hdGVIVE1MKCI8aHRtbD48Ym9keT5BbHRlcm5hdGUgcGFnZTwv
Ym9keT48L2h0bWw+IiwgImh0dHA6Ly9lcnJvci1wYWdlLmZvby8iLCAwKTsKLSAgICB0ZXN0LT53
YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBhc3NlcnROb3JtYWxMb2FkSGFwcGVuZWQodGVz
dC0+bV9sb2FkRXZlbnRzKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdExvYWRQbGFpblRleHQoTG9h
ZFRyYWNraW5nVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5sb2FkUGxh
aW5UZXh0KCJIZWxsbyBXZWJLaXQtR1RLKyIpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5p
c2hlZCgpOwotICAgIGFzc2VydE5vcm1hbExvYWRIYXBwZW5lZCh0ZXN0LT5tX2xvYWRFdmVudHMp
OwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0TG9hZFJlcXVlc3QoTG9hZFRyYWNraW5nVGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBHUmVmUHRyPFdlYktpdFVSSVJlcXVlc3Q+IHJlcXVl
c3Qod2Via2l0X3VyaV9yZXF1ZXN0X25ldyhrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvbm9ybWFs
IikuZGF0YSgpKSk7Ci0gICAgdGVzdC0+bG9hZFJlcXVlc3QocmVxdWVzdC5nZXQoKSk7Ci0gICAg
dGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgYXNzZXJ0Tm9ybWFsTG9hZEhhcHBl
bmVkKHRlc3QtPm1fbG9hZEV2ZW50cyk7Ci19Ci0KLWNsYXNzIExvYWRTdG9wVHJhY2tpbmdUZXN0
IDogcHVibGljIExvYWRUcmFja2luZ1Rlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJQl9URVNU
X0ZJWFRVUkUoTG9hZFN0b3BUcmFja2luZ1Rlc3QpOwotCi0gICAgdmlydHVhbCB2b2lkIGxvYWRD
b21taXR0ZWQoKQotICAgIHsKLSAgICAgICAgTG9hZFRyYWNraW5nVGVzdDo6bG9hZENvbW1pdHRl
ZCgpOwotICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfc3RvcF9sb2FkaW5nKG1fd2ViVmlldyk7Ci0g
ICAgfQotICAgIHZpcnR1YWwgdm9pZCBsb2FkRmFpbGVkKGNvbnN0IGdjaGFyKiBmYWlsaW5nVVJJ
LCBHRXJyb3IqIGVycm9yKQotICAgIHsKLSAgICAgICAgZ19hc3NlcnQoZ19lcnJvcl9tYXRjaGVz
KGVycm9yLCBXRUJLSVRfTkVUV09SS19FUlJPUiwgV0VCS0lUX05FVFdPUktfRVJST1JfQ0FOQ0VM
TEVEKSk7Ci0gICAgICAgIExvYWRUcmFja2luZ1Rlc3Q6OmxvYWRGYWlsZWQoZmFpbGluZ1VSSSwg
ZXJyb3IpOwotICAgIH0KLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RMb2FkQ2FuY2VsbGVkKExvYWRT
dG9wVHJhY2tpbmdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxvYWRV
Ukkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2NhbmNlbGxlZCIpLmRhdGEoKSk7Ci0gICAgdGVz
dC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBWZWN0b3I8TG9hZFRyYWNraW5nVGVz
dDo6TG9hZEV2ZW50cz4mIGV2ZW50cyA9IHRlc3QtPm1fbG9hZEV2ZW50czsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVu
dHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZENv
bW1pdHRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIExvYWRUcmFja2lu
Z1Rlc3Q6OkxvYWRGYWlsZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbM10sID09LCBM
b2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2Vi
Vmlld1RpdGxlKExvYWRUcmFja2luZ1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAg
Z19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19nZXRfdGl0bGUodGVzdC0+bV93ZWJWaWV3KSk7Ci0g
ICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxoZWFkPjx0aXRsZT5XZWxjb21lIHRvIFdlYktpdC1H
VEsrITwvdGl0bGU+PC9oZWFkPjwvaHRtbD4iLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2Fk
RmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dldF90aXRs
ZSh0ZXN0LT5tX3dlYlZpZXcpLCA9PSwgIldlbGNvbWUgdG8gV2ViS2l0LUdUSyshIik7Ci19Ci0K
LXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3UmVsb2FkKExvYWRUcmFja2luZ1Rlc3QqIHRlc3QsIGdj
b25zdHBvaW50ZXIpCi17Ci0gICAgLy8gQ2hlY2sgdGhhdCBub3RoaW5nIGhhcHBlbnMgd2hlbiB0
aGVyZSdzIG5vdGhpbmcgdG8gcmVsb2FkLgotICAgIHRlc3QtPnJlbG9hZCgpOwotICAgIHRlc3Qt
PndhaXQoMC4yNSk7IC8vIFdhaXQgZm9yIGEgcXVhcnRlciBvZiBhIHNlY29uZC4KLQotICAgIHRl
c3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL25vcm1hbCIpLmRhdGEoKSk7Ci0g
ICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgYXNzZXJ0Tm9ybWFsTG9hZEhh
cHBlbmVkKHRlc3QtPm1fbG9hZEV2ZW50cyk7Ci0KLSAgICB0ZXN0LT5yZWxvYWQoKTsKLSAgICB0
ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBhc3NlcnROb3JtYWxMb2FkSGFwcGVu
ZWQodGVzdC0+bV9sb2FkRXZlbnRzKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdExvYWRQcm9ncmVz
cyhMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxv
YWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL25vcm1hbCIpLmRhdGEoKSk7Ci0gICAgdGVz
dC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgZ19hc3NlcnRfY21wZmxvYXQodGVzdC0+
bV9lc3RpbWF0ZWRQcm9ncmVzcywgPT0sIDEpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmll
d0hpc3RvcnlMb2FkKExvYWRUcmFja2luZ1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0g
ICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvbm9ybWFsIikuZGF0YSgp
KTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBhc3NlcnROb3JtYWxM
b2FkSGFwcGVuZWQodGVzdC0+bV9sb2FkRXZlbnRzKTsKLQotICAgIHRlc3QtPmxvYWRVUkkoa1Nl
cnZlci0+Z2V0VVJJRm9yUGF0aCgiL25vcm1hbDIiKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRV
bnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGFzc2VydE5vcm1hbExvYWRIYXBwZW5lZCh0ZXN0LT5t
X2xvYWRFdmVudHMpOwotCi0gICAgLy8gQ2hlY2sgdGhhdCBsb2FkIHByb2Nlc3MgaXMgdGhlIHNh
bWUgZm9yIHBhZ2VzIGxvYWRlZCBmcm9tIGhpc3RvcnkgY2FjaGUuCi0gICAgdGVzdC0+Z29CYWNr
KCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgYXNzZXJ0Tm9ybWFs
TG9hZEhhcHBlbmVkKHRlc3QtPm1fbG9hZEV2ZW50cyk7Ci0KLSAgICB0ZXN0LT5nb0ZvcndhcmQo
KTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBhc3NlcnROb3JtYWxM
b2FkSGFwcGVuZWQodGVzdC0+bV9sb2FkRXZlbnRzKTsKLX0KLQotY2xhc3MgVmlld1VSSVRyYWNr
aW5nVGVzdDogcHVibGljIExvYWRUcmFja2luZ1Rlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJ
Ql9URVNUX0ZJWFRVUkUoVmlld1VSSVRyYWNraW5nVGVzdCk7Ci0KLSAgICBzdGF0aWMgdm9pZCB1
cmlDaGFuZ2VkKEdPYmplY3QqLCBHUGFyYW1TcGVjKiwgVmlld1VSSVRyYWNraW5nVGVzdCogdGVz
dCkKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXN0LT5tX2FjdGl2ZVVSSS5kYXRh
KCksICE9LCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSh0ZXN0LT5tX3dlYlZpZXcpKTsKLSAgICAg
ICAgdGVzdC0+bV9hY3RpdmVVUkkgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSh0ZXN0LT5tX3dl
YlZpZXcpOwotICAgIH0KLQotICAgIFZpZXdVUklUcmFja2luZ1Rlc3QoKQotICAgICAgICA6IG1f
YWN0aXZlVVJJKHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKG1fd2ViVmlldykpCi0gICAgewotICAg
ICAgICBnX2Fzc2VydChtX2FjdGl2ZVVSSS5pc051bGwoKSk7Ci0gICAgICAgIGdfc2lnbmFsX2Nv
bm5lY3QobV93ZWJWaWV3LCAibm90aWZ5Ojp1cmkiLCBHX0NBTExCQUNLKHVyaUNoYW5nZWQpLCB0
aGlzKTsKLSAgICB9Ci0KLSAgICB2b2lkIHByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQoKQotICAgIHsK
LSAgICAgICAgY2hlY2tBY3RpdmVVUkkoIi9yZWRpcmVjdCIpOwotICAgIH0KLQotICAgIHZvaWQg
cHJvdmlzaW9uYWxMb2FkUmVjZWl2ZWRTZXJ2ZXJSZWRpcmVjdCgpCi0gICAgewotICAgICAgICBj
aGVja0FjdGl2ZVVSSSgiL25vcm1hbCIpOwotICAgIH0KLQotICAgIHZvaWQgbG9hZENvbW1pdHRl
ZCgpCi0gICAgewotICAgICAgICBjaGVja0FjdGl2ZVVSSSgiL25vcm1hbCIpOwotICAgIH0KLQot
ICAgIHZvaWQgbG9hZEZpbmlzaGVkKCkKLSAgICB7Ci0gICAgICAgIGNoZWNrQWN0aXZlVVJJKCIv
bm9ybWFsIik7Ci0gICAgICAgIExvYWRUcmFja2luZ1Rlc3Q6OmxvYWRGaW5pc2hlZCgpOwotICAg
IH0KLQotICAgIENTdHJpbmcgbV9hY3RpdmVVUkk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBjaGVj
a0FjdGl2ZVVSSShjb25zdCBjaGFyKiB1cmkpCi0gICAgewotICAgICAgICBBU1NFUlRfQ01QX0NT
VFJJTkcobV9hY3RpdmVVUkksID09LCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKHVyaSkpOwotICAg
IH0KLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3QWN0aXZlVVJJKFZpZXdVUklUcmFja2lu
Z1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVy
LT5nZXRVUklGb3JQYXRoKCIvcmVkaXJlY3QiKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRp
bExvYWRGaW5pc2hlZCgpOwotfQotCi1jbGFzcyBWaWV3SXNMb2FkaW5nVGVzdDogcHVibGljIExv
YWRUcmFja2luZ1Rlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoVmll
d0lzTG9hZGluZ1Rlc3QpOwotCi0gICAgc3RhdGljIHZvaWQgaXNMb2FkaW5nQ2hhbmdlZChHT2Jq
ZWN0KiwgR1BhcmFtU3BlYyosIFZpZXdJc0xvYWRpbmdUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAg
ICAgaWYgKHdlYmtpdF93ZWJfdmlld19pc19sb2FkaW5nKHRlc3QtPm1fd2ViVmlldykpCi0gICAg
ICAgICAgICB0ZXN0LT5iZWdpbkxvYWQoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGVz
dC0+ZW5kTG9hZCgpOwotICAgIH0KLQotICAgIFZpZXdJc0xvYWRpbmdUZXN0KCkKLSAgICB7Ci0g
ICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAibm90aWZ5Ojppcy1sb2FkaW5nIiwg
R19DQUxMQkFDSyhpc0xvYWRpbmdDaGFuZ2VkKSwgdGhpcyk7Ci0gICAgfQotCi0gICAgdm9pZCBi
ZWdpbkxvYWQoKQotICAgIHsKLSAgICAgICAgLy8gTmV3IGxvYWQsIGxvYWQtc3RhcnRlZCBoYXNu
J3QgYmVlbiBlbWl0dGVkIHlldC4KLSAgICAgICAgZ19hc3NlcnQobV9sb2FkRXZlbnRzLmlzRW1w
dHkoKSk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSht
X3dlYlZpZXcpLCA9PSwgbV9hY3RpdmVVUkkuZGF0YSgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGVu
ZExvYWQoKQotICAgIHsKLSAgICAgICAgLy8gTG9hZCBmaW5pc2gsIGxvYWQtZmluaXNoZWQgYW5k
IGxvYWQtZmFpbGVkIGhhdmVuJ3QgYmVlbiBlbWl0dGVkIHlldC4KLSAgICAgICAgZ19hc3NlcnQo
IW1fbG9hZEV2ZW50cy5pc0VtcHR5KCkpOwotICAgICAgICBnX2Fzc2VydCghbV9sb2FkRXZlbnRz
LmNvbnRhaW5zKExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCkpOwotICAgICAgICBnX2Fz
c2VydCghbV9sb2FkRXZlbnRzLmNvbnRhaW5zKExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGYWlsZWQp
KTsKLSAgICB9Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0lzTG9hZGluZyhWaWV3SXNM
b2FkaW5nVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5sb2FkVVJJKGtT
ZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9ub3JtYWwiKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRV
bnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgdGVzdC0+cmVsb2FkKCk7Ci0gICAgdGVzdC0+d2Fp
dFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVS
SUZvclBhdGgoIi9lcnJvciIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlz
aGVkKCk7Ci0KLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9ub3Jt
YWwiKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIHRl
c3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL25vcm1hbDIiKS5kYXRhKCkpOwot
ICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgdGVzdC0+Z29CYWNrKCk7
Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICB0ZXN0LT5nb0Zvcndh
cmQoKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLX0KLQotY2xhc3MgV2Vi
UGFnZVVSSVRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElC
X1RFU1RfRklYVFVSRShXZWJQYWdlVVJJVGVzdCk7Ci0KLSAgICBzdGF0aWMgdm9pZCB3ZWJQYWdl
VVJJQ2hhbmdlZENhbGxiYWNrKEdEQnVzQ29ubmVjdGlvbiosIGNvbnN0IGNoYXIqLCBjb25zdCBj
aGFyKiwgY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBHVmFyaWFudCogcmVzdWx0LCBXZWJQYWdl
VVJJVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIHVyaTsKLSAgICAgICAg
Z192YXJpYW50X2dldChyZXN1bHQsICIoJnMpIiwgJnVyaSk7Ci0gICAgICAgIHRlc3QtPm1fd2Vi
UGFnZVVSSXMuYXBwZW5kKHVyaSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgd2ViVmlld1VS
SUNoYW5nZWQoR09iamVjdCosIEdQYXJhbVNwZWMqLCBXZWJQYWdlVVJJVGVzdCogdGVzdCkKLSAg
ICB7Ci0gICAgICAgIHRlc3QtPm1fd2ViVmlld1VSSXMuYXBwZW5kKHdlYmtpdF93ZWJfdmlld19n
ZXRfdXJpKHRlc3QtPm1fd2ViVmlldykpOwotICAgIH0KLQotICAgIFdlYlBhZ2VVUklUZXN0KCkK
LSAgICB7Ci0gICAgICAgIEdSZWZQdHI8R0RCdXNQcm94eT4gcHJveHkgPSBhZG9wdEdSZWYoYnVz
LT5jcmVhdGVQcm94eSgib3JnLndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9uVGVzdCIsCi0gICAgICAg
ICAgICAiL29yZy93ZWJraXQvZ3RrL1dlYkV4dGVuc2lvblRlc3QiLCAib3JnLndlYmtpdC5ndGsu
V2ViRXh0ZW5zaW9uVGVzdCIsIG1fbWFpbkxvb3ApKTsKLSAgICAgICAgbV91cmlDaGFuZ2VkU2ln
bmFsSUQgPSBnX2RidXNfY29ubmVjdGlvbl9zaWduYWxfc3Vic2NyaWJlKAotICAgICAgICAgICAg
Z19kYnVzX3Byb3h5X2dldF9jb25uZWN0aW9uKHByb3h5LmdldCgpKSwKLSAgICAgICAgICAgIDAs
Ci0gICAgICAgICAgICAib3JnLndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9uVGVzdCIsCi0gICAgICAg
ICAgICAiVVJJQ2hhbmdlZCIsCi0gICAgICAgICAgICAiL29yZy93ZWJraXQvZ3RrL1dlYkV4dGVu
c2lvblRlc3QiLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIEdfREJVU19TSUdOQUxfRkxB
R1NfTk9ORSwKLSAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0RCdXNTaWduYWxDYWxsYmFj
az4od2ViUGFnZVVSSUNoYW5nZWRDYWxsYmFjayksCi0gICAgICAgICAgICB0aGlzLAotICAgICAg
ICAgICAgMCk7Ci0gICAgICAgIGdfYXNzZXJ0KG1fdXJpQ2hhbmdlZFNpZ25hbElEKTsKLQotICAg
ICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgIm5vdGlmeTo6dXJpIiwgR19DQUxMQkFD
Syh3ZWJWaWV3VVJJQ2hhbmdlZCksIHRoaXMpOwotICAgIH0KLQotICAgIH5XZWJQYWdlVVJJVGVz
dCgpCi0gICAgewotICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQo
bV93ZWJWaWV3LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKLSAgICAg
ICAgZ19kYnVzX2Nvbm5lY3Rpb25fc2lnbmFsX3Vuc3Vic2NyaWJlKGJ1cy0+Y29ubmVjdGlvbigp
LCBtX3VyaUNoYW5nZWRTaWduYWxJRCk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgbV91cmlDaGFu
Z2VkU2lnbmFsSUQ7Ci0gICAgVmVjdG9yPENTdHJpbmc+IG1fd2ViUGFnZVVSSXM7Ci0gICAgVmVj
dG9yPENTdHJpbmc+IG1fd2ViVmlld1VSSXM7Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViUGFn
ZVVSSShXZWJQYWdlVVJJVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5s
b2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9yZWRpcmVjdCIpLmRhdGEoKSk7Ci0gICAg
dGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQodGVz
dC0+bV93ZWJQYWdlVVJJcy5zaXplKCksID09LCB0ZXN0LT5tX3dlYlZpZXdVUklzLnNpemUoKSk7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0ZXN0LT5tX3dlYlBhZ2VVUklzLnNpemUoKTsg
KytpKQotICAgICAgICBBU1NFUlRfQ01QX0NTVFJJTkcodGVzdC0+bV93ZWJQYWdlVVJJc1tpXSwg
PT0sIHRlc3QtPm1fd2ViVmlld1VSSXNbaV0pOwotCi0gICAgZ19hc3NlcnRfY21waW50KHRlc3Qt
Pm1fd2ViUGFnZVVSSXMuc2l6ZSgpLCA9PSwgMik7Ci0gICAgQVNTRVJUX0NNUF9DU1RSSU5HKHRl
c3QtPm1fd2ViUGFnZVVSSXNbMF0sID09LCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvcmVkaXJl
Y3QiKSk7Ci0gICAgQVNTRVJUX0NNUF9DU1RSSU5HKHRlc3QtPm1fd2ViUGFnZVVSSXNbMV0sID09
LCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvbm9ybWFsIikpOwotCi19Ci0KLXN0YXRpYyB2b2lk
IHRlc3RVUklSZXF1ZXN0SFRUUEhlYWRlcnMoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCi17Ci0gICAgR1JlZlB0cjxXZWJLaXRVUklSZXF1ZXN0PiB1cmlSZXF1ZXN0ID0gYWRvcHRH
UmVmKHdlYmtpdF91cmlfcmVxdWVzdF9uZXcoImZpbGU6Ly8vZm9vL2JhciIpKTsKLSAgICBnX2Fz
c2VydCh1cmlSZXF1ZXN0LmdldCgpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3VyaV9y
ZXF1ZXN0X2dldF91cmkodXJpUmVxdWVzdC5nZXQoKSksID09LCAiZmlsZTovLy9mb28vYmFyIik7
Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF91cmlfcmVxdWVzdF9nZXRfaHR0cF9oZWFkZXJzKHVyaVJl
cXVlc3QuZ2V0KCkpKTsKLQotICAgIC8vIExvYWQgYSByZXF1ZXN0IHdpdGggbm8gRG8gTm90IFRy
YWNrIGhlYWRlci4KLSAgICB3ZWJraXRfdXJpX3JlcXVlc3Rfc2V0X3VyaSh1cmlSZXF1ZXN0Lmdl
dCgpLCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvZG8tbm90LXRyYWNrLWhlYWRlciIpLmRhdGEo
KSk7Ci0gICAgdGVzdC0+bG9hZFJlcXVlc3QodXJpUmVxdWVzdC5nZXQoKSk7Ci0gICAgdGVzdC0+
d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBzaXplX3QgbWFpblJlc291cmNlRGF0YVNp
emUgPSAwOwotICAgIGNvbnN0IGNoYXIqIG1haW5SZXNvdXJjZURhdGEgPSB0ZXN0LT5tYWluUmVz
b3VyY2VEYXRhKG1haW5SZXNvdXJjZURhdGFTaXplKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQobWFp
blJlc291cmNlRGF0YVNpemUsID09LCBzdHJsZW4oa0ROVEhlYWRlck5vdFByZXNlbnQpKTsKLSAg
ICBnX2Fzc2VydCghc3RybmNtcChtYWluUmVzb3VyY2VEYXRhLCBrRE5USGVhZGVyTm90UHJlc2Vu
dCwgbWFpblJlc291cmNlRGF0YVNpemUpKTsKLQotICAgIC8vIEFkZCB0aGUgRG8gTm90IFRyYWNr
IGhlYWRlciBhbmQgbG9hZCB0aGUgcmVxdWVzdCBhZ2Fpbi4KLSAgICBTb3VwTWVzc2FnZUhlYWRl
cnMqIGhlYWRlcnMgPSB3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X2h0dHBfaGVhZGVycyh1cmlSZXF1
ZXN0LmdldCgpKTsKLSAgICBnX2Fzc2VydChoZWFkZXJzKTsKLSAgICBzb3VwX21lc3NhZ2VfaGVh
ZGVyc19hcHBlbmQoaGVhZGVycywgIkROVCIsICIxIik7Ci0gICAgdGVzdC0+bG9hZFJlcXVlc3Qo
dXJpUmVxdWVzdC5nZXQoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0K
LSAgICBtYWluUmVzb3VyY2VEYXRhID0gdGVzdC0+bWFpblJlc291cmNlRGF0YShtYWluUmVzb3Vy
Y2VEYXRhU2l6ZSk7Ci0gICAgZ19hc3NlcnRfY21waW50KG1haW5SZXNvdXJjZURhdGFTaXplLCA9
PSwgMSk7Ci0gICAgZ19hc3NlcnQoIXN0cm5jbXAobWFpblJlc291cmNlRGF0YSwgIjEiLCBtYWlu
UmVzb3VyY2VEYXRhU2l6ZSkpOwotCi0gICAgLy8gTG9hZCBhIFVSSSBmb3Igd2hpY2ggdGhlIHdl
YiBleHRlbnNpb24gd2lsbCBhZGQgdGhlIERvIE5vdCBUcmFjayBoZWFkZXIuCi0gICAgdGVzdC0+
bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvYWRkLWRvLW5vdC10cmFjay1oZWFkZXIi
KS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgbWFp
blJlc291cmNlRGF0YSA9IHRlc3QtPm1haW5SZXNvdXJjZURhdGEobWFpblJlc291cmNlRGF0YVNp
emUpOwotICAgIGdfYXNzZXJ0X2NtcGludChtYWluUmVzb3VyY2VEYXRhU2l6ZSwgPT0sIDEpOwot
ICAgIGdfYXNzZXJ0KCFzdHJuY21wKG1haW5SZXNvdXJjZURhdGEsICIxIiwgbWFpblJlc291cmNl
RGF0YVNpemUpKTsKLX0KLQotc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciog
c2VydmVyLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJs
ZSosIFNvdXBDbGllbnRDb250ZXh0KiwgZ3BvaW50ZXIpCi17Ci0gICAgc3RhdGljIGNvbnN0IGNo
YXIqIHJlc3BvbnNlU3RyaW5nID0gIjxodG1sPjxib2R5PlRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchIgotICAgICAgICAiVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchIgotICAgICAgICAiVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchIgotICAgICAgICAiVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchIgotICAgICAgICAiVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchIgotICAgICAgICAiVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchIgotICAgICAgICAiVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchIgot
ICAgICAgICAiVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchPC9ib2R5Pjwv
aHRtbD4iOwotCi0gICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsK
LSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9U
X0lNUExFTUVOVEVEKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNvdXBfbWVzc2Fn
ZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKLQotICAgIGlmIChnX3N0cl9o
YXNfcHJlZml4KHBhdGgsICIvbm9ybWFsIikpCi0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2Fw
cGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIHJlc3BvbnNl
U3RyaW5nLCBzdHJsZW4ocmVzcG9uc2VTdHJpbmcpKTsKLSAgICBlbHNlIGlmIChnX3N0cl9lcXVh
bChwYXRoLCAiL2Vycm9yIikpCi0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3Nh
Z2UsIFNPVVBfU1RBVFVTX0NBTlRfQ09OTkVDVCk7Ci0gICAgZWxzZSBpZiAoZ19zdHJfZXF1YWwo
cGF0aCwgIi9yZWRpcmVjdCIpKSB7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1l
c3NhZ2UsIFNPVVBfU1RBVFVTX01PVkVEX1BFUk1BTkVOVExZKTsKLSAgICAgICAgc291cF9tZXNz
YWdlX2hlYWRlcnNfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJMb2NhdGlvbiIs
ICIvbm9ybWFsIik7Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2NhbmNlbGxl
ZCIpKSB7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX3NldF9lbmNvZGluZyhtZXNzYWdl
LT5yZXNwb25zZV9oZWFkZXJzLCBTT1VQX0VOQ09ESU5HX0NIVU5LRUQpOwotICAgICAgICBzb3Vw
X21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllf
U1RBVElDLCByZXNwb25zZVN0cmluZywgc3RybGVuKHJlc3BvbnNlU3RyaW5nKSk7Ci0gICAgICAg
IHNvdXBfc2VydmVyX3VucGF1c2VfbWVzc2FnZShzZXJ2ZXIsIG1lc3NhZ2UpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2RvLW5vdC10cmFjay1o
ZWFkZXIiKSB8fCBnX3N0cl9lcXVhbChwYXRoLCAiL2FkZC1kby1ub3QtdHJhY2staGVhZGVyIikp
IHsKLSAgICAgICAgY29uc3QgY2hhciogZG9Ob3RUcmFjayA9IHNvdXBfbWVzc2FnZV9oZWFkZXJz
X2dldF9vbmUobWVzc2FnZS0+cmVxdWVzdF9oZWFkZXJzLCAiRE5UIik7Ci0gICAgICAgIGlmIChk
b05vdFRyYWNrKQotICAgICAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2Ut
PnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX0NPUFksIGRvTm90VHJhY2ssIHN0cmxlbihkb05v
dFRyYWNrKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2Fw
cGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGtETlRIZWFk
ZXJOb3RQcmVzZW50LCBzdHJsZW4oa0ROVEhlYWRlck5vdFByZXNlbnQpKTsKLSAgICAgICAgc291
cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOwotICAgIH0gZWxz
ZQotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19O
T1RfRk9VTkQpOwotCi0gICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVz
cG9uc2VfYm9keSk7Ci19Ci0KLXZvaWQgYmVmb3JlQWxsKCkKLXsKLSAgICB3ZWJraXRfd2ViX2Nv
bnRleHRfc2V0X3dlYl9leHRlbnNpb25zX2RpcmVjdG9yeSh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0
X2RlZmF1bHQoKSwgV0VCS0lUX1RFU1RfV0VCX0VYVEVOU0lPTlNfRElSKTsKLSAgICBidXMgPSBu
ZXcgV2ViS2l0VGVzdEJ1cygpOwotICAgIGlmICghYnVzLT5ydW4oKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAga1NlcnZlciA9IG5ldyBXZWJLaXRUZXN0U2VydmVyKCk7Ci0gICAga1NlcnZlci0+
cnVuKHNlcnZlckNhbGxiYWNrKTsKLQotICAgIExvYWRUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0
V2ViVmlldyIsICJsb2FkaW5nLXN0YXR1cyIsIHRlc3RMb2FkaW5nU3RhdHVzKTsKLSAgICBMb2Fk
VHJhY2tpbmdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAibG9hZGluZy1lcnJvciIsIHRlc3RM
b2FkaW5nRXJyb3IpOwotICAgIExvYWRUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIs
ICJsb2FkLWh0bWwiLCB0ZXN0TG9hZEh0bWwpOwotICAgIExvYWRUcmFja2luZ1Rlc3Q6OmFkZCgi
V2ViS2l0V2ViVmlldyIsICJsb2FkLWFsdGVybmF0ZS1odG1sIiwgdGVzdExvYWRBbHRlcm5hdGVI
VE1MKTsKLSAgICBMb2FkVHJhY2tpbmdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAibG9hZC1w
bGFpbi10ZXh0IiwgdGVzdExvYWRQbGFpblRleHQpOwotICAgIExvYWRUcmFja2luZ1Rlc3Q6OmFk
ZCgiV2ViS2l0V2ViVmlldyIsICJsb2FkLXJlcXVlc3QiLCB0ZXN0TG9hZFJlcXVlc3QpOwotICAg
IExvYWRTdG9wVHJhY2tpbmdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAic3RvcC1sb2FkaW5n
IiwgdGVzdExvYWRDYW5jZWxsZWQpOwotICAgIExvYWRUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0
V2ViVmlldyIsICJ0aXRsZSIsIHRlc3RXZWJWaWV3VGl0bGUpOwotICAgIExvYWRUcmFja2luZ1Rl
c3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJwcm9ncmVzcyIsIHRlc3RMb2FkUHJvZ3Jlc3MpOwot
ICAgIExvYWRUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJyZWxvYWQiLCB0ZXN0
V2ViVmlld1JlbG9hZCk7Ci0gICAgTG9hZFRyYWNraW5nVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3
IiwgImhpc3RvcnktbG9hZCIsIHRlc3RXZWJWaWV3SGlzdG9yeUxvYWQpOwotCi0gICAgLy8gVGhp
cyB0ZXN0IGNoZWNrcyB0aGF0IHdlYiB2aWV3IG5vdGlmeTo6dXJpIHNpZ25hbCBpcyBjb3JyZWN0
bHkgZW1pdHRlZAotICAgIC8vIGFuZCB0aGUgdXJpIGlzIGFscmVhZHkgdXBkYXRlZCB3aGVuIGxv
YWRlciBjbGllbnQgc2lnbmFscyBhcmUgZW1pdHRlZC4KLSAgICBWaWV3VVJJVHJhY2tpbmdUZXN0
OjphZGQoIldlYktpdFdlYlZpZXciLCAiYWN0aXZlLXVyaSIsIHRlc3RXZWJWaWV3QWN0aXZlVVJJ
KTsKLQotICAgIFZpZXdJc0xvYWRpbmdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiaXMtbG9h
ZGluZyIsIHRlc3RXZWJWaWV3SXNMb2FkaW5nKTsKLSAgICBXZWJQYWdlVVJJVGVzdDo6YWRkKCJX
ZWJLaXRXZWJQYWdlIiwgImdldC11cmkiLCB0ZXN0V2ViUGFnZVVSSSk7Ci0gICAgV2ViVmlld1Rl
c3Q6OmFkZCgiV2ViS2l0VVJJUmVxdWVzdCIsICJodHRwLWhlYWRlcnMiLCB0ZXN0VVJJUmVxdWVz
dEhUVFBIZWFkZXJzKTsKLX0KLQotdm9pZCBhZnRlckFsbCgpCi17Ci0gICAgZGVsZXRlIGJ1czsK
LSAgICBkZWxldGUga1NlcnZlcjsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RNYWluLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL1Rlc3RNYWluLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDc4MTljZi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9UZXN0TWFpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJUZXN0TWFpbi5oIgotCi0jaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRl
IDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+Ci0jaW5jbHVkZSA8d3Rm
L2dvYmplY3QvR093blB0ci5oPgotCi12b2lkIGJlZm9yZUFsbCgpOwotdm9pZCBhZnRlckFsbCgp
OwotCi1zdGF0aWMgdm9pZCByZWdpc3RlckdSZXNvdXJjZSh2b2lkKQotewotICAgIEdPd25QdHI8
Y2hhcj4gcmVzb3VyY2VzUGF0aChnX2J1aWxkX2ZpbGVuYW1lKFdFQktJVF9FWEVDX1BBVEgsICJy
ZXNvdXJjZXMiLCAid2Via2l0Mmd0ay10ZXN0cy1yZXNvdXJjZXMuZ3Jlc291cmNlIiwgTlVMTCkp
OwotICAgIEdSZXNvdXJjZSogcmVzb3VyY2UgPSBnX3Jlc291cmNlX2xvYWQocmVzb3VyY2VzUGF0
aC5nZXQoKSwgMCk7Ci0gICAgZ19hc3NlcnQocmVzb3VyY2UpOwotCi0gICAgZ19yZXNvdXJjZXNf
cmVnaXN0ZXIocmVzb3VyY2UpOwotICAgIGdfcmVzb3VyY2VfdW5yZWYocmVzb3VyY2UpOwotfQot
Ci1zdGF0aWMgdm9pZCByZW1vdmVOb25FbXB0eURpcmVjdG9yeShjb25zdCBjaGFyKiBkaXJlY3Rv
cnlQYXRoKQotewotICAgIEdEaXIqIGRpcmVjdG9yeSA9IGdfZGlyX29wZW4oZGlyZWN0b3J5UGF0
aCwgMCwgMCk7Ci0gICAgZ19hc3NlcnQoZGlyZWN0b3J5KTsKLSAgICBjb25zdCBjaGFyKiBmaWxl
TmFtZTsKLSAgICB3aGlsZSAoKGZpbGVOYW1lID0gZ19kaXJfcmVhZF9uYW1lKGRpcmVjdG9yeSkp
KSB7Ci0gICAgICAgIEdPd25QdHI8Y2hhcj4gZmlsZVBhdGgoZ19idWlsZF9maWxlbmFtZShkaXJl
Y3RvcnlQYXRoLCBmaWxlTmFtZSwgTlVMTCkpOwotICAgICAgICBnX3VubGluayhmaWxlUGF0aC5n
ZXQoKSk7Ci0gICAgfQotICAgIGdfZGlyX2Nsb3NlKGRpcmVjdG9yeSk7Ci0gICAgZ19ybWRpcihk
aXJlY3RvcnlQYXRoKTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotewot
ICAgIGdfdW5zZXRlbnYoIkRCVVNfU0VTU0lPTl9CVVNfQUREUkVTUyIpOwotICAgIGd0a190ZXN0
X2luaXQoJmFyZ2MsICZhcmd2LCAwKTsKLSAgICBnX3NldGVudigiV0VCS0lUX0VYRUNfUEFUSCIs
IFdFQktJVF9FWEVDX1BBVEgsIEZBTFNFKTsKLSAgICBnX3NldGVudigiV0VCS0lUX0lOSkVDVEVE
X0JVTkRMRV9QQVRIIiwgV0VCS0lUX0lOSkVDVEVEX0JVTkRMRV9QQVRILCBGQUxTRSk7Ci0gICAg
Z19zZXRlbnYoIkxDX0FMTCIsICJDIiwgVFJVRSk7Ci0gICAgZ19zZXRlbnYoIkdJT19VU0VfVkZT
IiwgImxvY2FsIiwgVFJVRSk7Ci0gICAgZ19zZXRlbnYoIkdTRVRUSU5HU19CQUNLRU5EIiwgIm1l
bW9yeSIsIFRSVUUpOwotICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvIik7Ci0KLSAgICByZWdpc3RlckdSZXNvdXJjZSgpOwotCi0gICAgR093blB0cjxjaGFyPiBk
aXNrQ2FjaGVUZW1wRGlyZWN0b3J5KGdfZGlyX21ha2VfdG1wKCJXZWJLaXQyVGVzdHNEaXNrQ2Fj
aGUtWFhYWFhYIiwgMCkpOwotICAgIGdfYXNzZXJ0KGRpc2tDYWNoZVRlbXBEaXJlY3RvcnkuZ2V0
KCkpOwotICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfZGlza19jYWNoZV9kaXJlY3Rvcnkod2Vi
a2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCksIGRpc2tDYWNoZVRlbXBEaXJlY3RvcnkuZ2V0
KCkpOwotCi0gICAgYmVmb3JlQWxsKCk7Ci0gICAgaW50IHJldHVyblZhbHVlID0gZ190ZXN0X3J1
bigpOwotICAgIGFmdGVyQWxsKCk7Ci0KLSAgICByZW1vdmVOb25FbXB0eURpcmVjdG9yeShkaXNr
Q2FjaGVUZW1wRGlyZWN0b3J5LmdldCgpKTsKLQotICAgIHJldHVybiByZXR1cm5WYWx1ZTsKLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RN
YWluLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0TWFpbi5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMmM5MDcwLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RNYWluLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwxMTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEg
Uy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAq
LwotCi0jaWZuZGVmIFRlc3RNYWluX2gKLSNkZWZpbmUgVGVzdE1haW5faAotCi0jaW5jbHVkZSA8
Y2Fpcm8uaD4KLSNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLQotI2RlZmluZSBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKENsYXNzTmFtZSkg
XAotICAgIHN0YXRpYyB2b2lkIHNldFVwKENsYXNzTmFtZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRl
ciBkYXRhKSBcCi0gICAgeyBcCi0gICAgICAgIG5ldyAoZml4dHVyZSkgQ2xhc3NOYW1lOyBcCi0g
ICAgfSBcCi0gICAgc3RhdGljIHZvaWQgdGVhckRvd24oQ2xhc3NOYW1lKiBmaXh0dXJlLCBnY29u
c3Rwb2ludGVyIGRhdGEpIFwKLSAgICB7IFwKLSAgICAgICAgZml4dHVyZS0+fkNsYXNzTmFtZSgp
OyBcCi0gICAgfSBcCi0gICAgc3RhdGljIHZvaWQgYWRkKGNvbnN0IGNoYXIqIHN1aXRlTmFtZSwg
Y29uc3QgY2hhciogdGVzdE5hbWUsIHZvaWQgKCp0ZXN0RnVuYykoQ2xhc3NOYW1lKiwgY29uc3Qg
dm9pZCopKSBcCi0gICAgeyBcCi0gICAgICAgIEdPd25QdHI8Z2NoYXI+IHRlc3RQYXRoKGdfc3Ry
ZHVwX3ByaW50ZigiL3dlYmtpdDIvJXMvJXMiLCBzdWl0ZU5hbWUsIHRlc3ROYW1lKSk7IFwKLSAg
ICAgICAgZ190ZXN0X2FkZCh0ZXN0UGF0aC5nZXQoKSwgQ2xhc3NOYW1lLCAwLCBDbGFzc05hbWU6
OnNldFVwLCB0ZXN0RnVuYywgQ2xhc3NOYW1lOjp0ZWFyRG93bik7IFwKLSAgICB9Ci0KLSNkZWZp
bmUgQVNTRVJUX0NNUF9DU1RSSU5HKHMxLCBjbXAsIHMyKSBcCi0gICAgZG8geyBDU3RyaW5nIF9f
czEgPSAoczEpOyBDU3RyaW5nIF9fczIgPSAoczIpOyBcCi0gICAgICAgIGlmIChnX3N0cmNtcDAo
X19zMS5kYXRhKCksIF9fczIuZGF0YSgpKSBjbXAgMCkgOyBlbHNlIFwKLSAgICAgICAgICAgIGdf
YXNzZXJ0aW9uX21lc3NhZ2VfY21wc3RyKEdfTE9HX0RPTUFJTiwgX19GSUxFX18sIF9fTElORV9f
LCBHX1NUUkZVTkMsIFwKLSAgICAgICAgICAgICAgICAjczEgIiAiICNjbXAgIiAiICNzMiwgX19z
MS5kYXRhKCksICNjbXAsIF9fczIuZGF0YSgpKTsgfSB3aGlsZSAoMCkKLQotY2xhc3MgVGVzdCB7
Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShUZXN0KTsKLQotICAgIH5UZXN0
KCkKLSAgICB7Ci0gICAgICAgIGlmIChtX3dhdGNoZWRPYmplY3RzLmlzRW1wdHkoKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICBnX3ByaW50KCJMZWFrZWQgb2JqZWN0czoiKTsKLSAg
ICAgICAgSGFzaFNldDxHT2JqZWN0Kj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fd2F0Y2hlZE9i
amVjdHMuZW5kKCk7Ci0gICAgICAgIGZvciAoSGFzaFNldDxHT2JqZWN0Kj46OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV93YXRjaGVkT2JqZWN0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAg
ICAgICAgICBnX3ByaW50KCIgJXMoJXApIiwgZ190eXBlX25hbWVfZnJvbV9pbnN0YW5jZShyZWlu
dGVycHJldF9jYXN0PEdUeXBlSW5zdGFuY2UqPigqaXQpKSwgKml0KTsKLSAgICAgICAgZ19wcmlu
dCgiXG4iKTsKLQotICAgICAgICBnX2Fzc2VydChtX3dhdGNoZWRPYmplY3RzLmlzRW1wdHkoKSk7
Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgb2JqZWN0RmluYWxpemVkKFRlc3QqIHRlc3QsIEdP
YmplY3QqIGZpbmFsaXplZE9iamVjdCkKLSAgICB7Ci0gICAgICAgIHRlc3QtPm1fd2F0Y2hlZE9i
amVjdHMucmVtb3ZlKGZpbmFsaXplZE9iamVjdCk7Ci0gICAgfQotCi0gICAgdm9pZCBhc3NlcnRP
YmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdPYmplY3QqIG9iamVjdCkKLSAgICB7Ci0g
ICAgICAgIG1fd2F0Y2hlZE9iamVjdHMuYWRkKG9iamVjdCk7Ci0gICAgICAgIGdfb2JqZWN0X3dl
YWtfcmVmKG9iamVjdCwgcmVpbnRlcnByZXRfY2FzdDxHV2Vha05vdGlmeT4ob2JqZWN0RmluYWxp
emVkKSwgdGhpcyk7Ci0gICAgfQotCi0gICAgc3RhdGljIENTdHJpbmcgZ2V0V2ViS2l0MVRlc3RS
ZXNvdWNlc0RpcigpCi0gICAgewotICAgICAgICBHT3duUHRyPGNoYXI+IHJlc291cmNlc0Rpcihn
X2J1aWxkX2ZpbGVuYW1lKFdFQktJVF9TUkNfRElSLCAiU291cmNlIiwgIldlYktpdCIsICJndGsi
LCAidGVzdHMiLCAicmVzb3VyY2VzIiwgTlVMTCkpOwotICAgICAgICByZXR1cm4gcmVzb3VyY2Vz
RGlyLmdldCgpOwotICAgIH0KLQotICAgIHN0YXRpYyBDU3RyaW5nIGdldFJlc291cmNlc0Rpcigp
Ci0gICAgewotICAgICAgICBHT3duUHRyPGNoYXI+IHJlc291cmNlc0RpcihnX2J1aWxkX2ZpbGVu
YW1lKFdFQktJVF9TUkNfRElSLCAiU291cmNlIiwgIldlYktpdDIiLCAiVUlQcm9jZXNzIiwgIkFQ
SSIsICJndGsiLCAidGVzdHMiLCAicmVzb3VyY2VzIiwgTlVMTCkpOwotICAgICAgICByZXR1cm4g
cmVzb3VyY2VzRGlyLmdldCgpOwotICAgIH0KLQotICAgIHZvaWQgYWRkTG9nRmF0YWxGbGFnKHVu
c2lnbmVkIGZsYWcpCi0gICAgewotICAgICAgICB1bnNpZ25lZCBmYXRhbE1hc2sgPSBnX2xvZ19z
ZXRfYWx3YXlzX2ZhdGFsKHN0YXRpY19jYXN0PEdMb2dMZXZlbEZsYWdzPihHX0xPR19GQVRBTF9N
QVNLKSk7Ci0gICAgICAgIGZhdGFsTWFzayB8PSBmbGFnOwotICAgICAgICBnX2xvZ19zZXRfYWx3
YXlzX2ZhdGFsKHN0YXRpY19jYXN0PEdMb2dMZXZlbEZsYWdzPihmYXRhbE1hc2spKTsKLSAgICB9
Ci0KLSAgICB2b2lkIHJlbW92ZUxvZ0ZhdGFsRmxhZyh1bnNpZ25lZCBmbGFnKQotICAgIHsKLSAg
ICAgICAgdW5zaWduZWQgZmF0YWxNYXNrID0gZ19sb2dfc2V0X2Fsd2F5c19mYXRhbChzdGF0aWNf
Y2FzdDxHTG9nTGV2ZWxGbGFncz4oR19MT0dfRkFUQUxfTUFTSykpOwotICAgICAgICBmYXRhbE1h
c2sgJj0gfmZsYWc7Ci0gICAgICAgIGdfbG9nX3NldF9hbHdheXNfZmF0YWwoc3RhdGljX2Nhc3Q8
R0xvZ0xldmVsRmxhZ3M+KGZhdGFsTWFzaykpOwotICAgIH0KLQotICAgIHN0YXRpYyBib29sIGNh
aXJvU3VyZmFjZXNFcXVhbChjYWlyb19zdXJmYWNlX3QqIHMxLCBjYWlyb19zdXJmYWNlX3QqIHMy
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIChjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9mb3JtYXQo
czEpID09IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2Zvcm1hdChzMikKLSAgICAgICAgICAgICYm
IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHMxKSA9PSBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF93aWR0aChzMikKLSAgICAgICAgICAgICYmIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hl
aWdodChzMSkgPT0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHMyKQotICAgICAgICAg
ICAgJiYgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKHMxKSA9PSBjYWlyb19pbWFnZV9z
dXJmYWNlX2dldF9zdHJpZGUoczIpCi0gICAgICAgICAgICAmJiAhbWVtY21wKGNvbnN0X2Nhc3Q8
Y29uc3Qgdm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X2RhdGEoczEpKSksCi0gICAgICAgICAgICAgICAgY29uc3RfY2FzdDxjb25zdCB2b2lkKj4o
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzMikp
KSwKLSAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoczEpKmNh
aXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShzMSkpKTsKLSAgICB9Ci0KLSAgICBIYXNoU2V0
PEdPYmplY3QqPiBtX3dhdGNoZWRPYmplY3RzOwotfTsKLQotI2VuZGlmIC8vIFRlc3RNYWluX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RQ
cmludGluZy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0
UHJpbnRpbmcuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmMyY2ZiLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RQcmlu
dGluZy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVy
c2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldl
YlZpZXdUZXN0LmgiCi0jaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRlIDx3dGYvZ29i
amVjdC9HUmVmUHRyLmg+Ci0KLSNpZmRlZiBIQVZFX0dUS19VTklYX1BSSU5USU5HCi0jaW5jbHVk
ZSA8Z3RrL2d0a3VuaXhwcmludC5oPgotI2VuZGlmCi0KLXN0YXRpYyBjaGFyKiBrVGVtcERpcmVj
dG9yeTsKLQotc3RhdGljIHZvaWQgdGVzdFByaW50T3BlcmF0aW9uUHJpbnRTZXR0aW5ncyhXZWJW
aWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBHUmVmUHRyPFdlYktpdFByaW50
T3BlcmF0aW9uPiBwcmludE9wZXJhdGlvbiA9IGFkb3B0R1JlZih3ZWJraXRfcHJpbnRfb3BlcmF0
aW9uX25ldyh0ZXN0LT5tX3dlYlZpZXcpKTsKLSAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0
ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHByaW50T3BlcmF0aW9uLmdldCgpKSk7Ci0KLSAg
ICBnX2Fzc2VydCghd2Via2l0X3ByaW50X29wZXJhdGlvbl9nZXRfcHJpbnRfc2V0dGluZ3MocHJp
bnRPcGVyYXRpb24uZ2V0KCkpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3ByaW50X29wZXJhdGlv
bl9nZXRfcGFnZV9zZXR1cChwcmludE9wZXJhdGlvbi5nZXQoKSkpOwotCi0gICAgR1JlZlB0cjxH
dGtQcmludFNldHRpbmdzPiBwcmludFNldHRpbmdzID0gYWRvcHRHUmVmKGd0a19wcmludF9zZXR0
aW5nc19uZXcoKSk7Ci0gICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5p
c2hlcyhHX09CSkVDVChwcmludFNldHRpbmdzLmdldCgpKSk7Ci0KLSAgICBHUmVmUHRyPEd0a1Bh
Z2VTZXR1cD4gcGFnZVNldHVwID0gYWRvcHRHUmVmKGd0a19wYWdlX3NldHVwX25ldygpKTsKLSAg
ICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHBh
Z2VTZXR1cC5nZXQoKSkpOwotCi0gICAgd2Via2l0X3ByaW50X29wZXJhdGlvbl9zZXRfcHJpbnRf
c2V0dGluZ3MocHJpbnRPcGVyYXRpb24uZ2V0KCksIHByaW50U2V0dGluZ3MuZ2V0KCkpOwotICAg
IHdlYmtpdF9wcmludF9vcGVyYXRpb25fc2V0X3BhZ2Vfc2V0dXAocHJpbnRPcGVyYXRpb24uZ2V0
KCksIHBhZ2VTZXR1cC5nZXQoKSk7Ci0KLSAgICBnX2Fzc2VydCh3ZWJraXRfcHJpbnRfb3BlcmF0
aW9uX2dldF9wcmludF9zZXR0aW5ncyhwcmludE9wZXJhdGlvbi5nZXQoKSkgPT0gcHJpbnRTZXR0
aW5ncy5nZXQoKSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3ByaW50X29wZXJhdGlvbl9nZXRfcGFn
ZV9zZXR1cChwcmludE9wZXJhdGlvbi5nZXQoKSkgPT0gcGFnZVNldHVwLmdldCgpKTsKLX0KLQot
c3RhdGljIGdib29sZWFuIHdlYlZpZXdQcmludENhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcsIFdlYktpdFByaW50T3BlcmF0aW9uKiBwcmludE9wZXJhdGlvbiwgV2ViVmlld1Rlc3QqIHRl
c3QpCi17Ci0gICAgZ19hc3NlcnQod2ViVmlldyA9PSB0ZXN0LT5tX3dlYlZpZXcpOwotCi0gICAg
Z19hc3NlcnQoV0VCS0lUX0lTX1BSSU5UX09QRVJBVElPTihwcmludE9wZXJhdGlvbikpOwotICAg
IHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QocHJp
bnRPcGVyYXRpb24pKTsKLQotICAgIGdfYXNzZXJ0KCF3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX2dl
dF9wcmludF9zZXR0aW5ncyhwcmludE9wZXJhdGlvbikpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRf
cHJpbnRfb3BlcmF0aW9uX2dldF9wYWdlX3NldHVwKHByaW50T3BlcmF0aW9uKSk7Ci0KLSAgICBn
X21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOwotCi0gICAgcmV0dXJuIFRSVUU7Ci19
Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3UHJpbnQoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25z
dHBvaW50ZXIpCi17Ci0gICAgZ19zaWduYWxfY29ubmVjdCh0ZXN0LT5tX3dlYlZpZXcsICJwcmlu
dCIsIEdfQ0FMTEJBQ0sod2ViVmlld1ByaW50Q2FsbGJhY2spLCB0ZXN0KTsKLSAgICB0ZXN0LT5s
b2FkSHRtbCgiPGh0bWw+PGJvZHkgb25Mb2FkPVwicHJpbnQoKTtcIj5XZWJLaXRHVEsrIHByaW50
aW5nIHRlc3Q8L2JvZHk+PC9odG1sPiIsIDApOwotICAgIGdfbWFpbl9sb29wX3J1bih0ZXN0LT5t
X21haW5Mb29wKTsKLX0KLQotI2lmZGVmIEhBVkVfR1RLX1VOSVhfUFJJTlRJTkcKLWNsYXNzIFBy
aW50VGVzdDogcHVibGljIFdlYlZpZXdUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVT
VF9GSVhUVVJFKFByaW50VGVzdCk7Ci0KLSAgICBzdGF0aWMgdm9pZCBwcmludEZpbmlzaGVkQ2Fs
bGJhY2soV2ViS2l0UHJpbnRPcGVyYXRpb24qLCBQcmludFRlc3QqIHRlc3QpCi0gICAgewotICAg
ICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIHN0
YXRpYyB2b2lkIHByaW50RmFpbGVkQ2FsbGJhY2soV2ViS2l0UHJpbnRPcGVyYXRpb24qLCBHRXJy
b3IqIGVycm9yLCBQcmludFRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICBnX2Fzc2VydCh0ZXN0
LT5tX2V4cGVjdGVkRXJyb3IpOwotICAgICAgICBnX2Fzc2VydChlcnJvcik7Ci0gICAgICAgIGdf
YXNzZXJ0KGdfZXJyb3JfbWF0Y2hlcyhlcnJvciwgV0VCS0lUX1BSSU5UX0VSUk9SLCB0ZXN0LT5t
X2V4cGVjdGVkRXJyb3IpKTsKLSAgICB9Ci0KLSAgICBQcmludFRlc3QoKQotICAgICAgICA6IG1f
ZXhwZWN0ZWRFcnJvcigwKQotICAgIHsKLSAgICAgICAgbV9wcmludE9wZXJhdGlvbiA9IGFkb3B0
R1JlZih3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX25ldyhtX3dlYlZpZXcpKTsKLSAgICAgICAgYXNz
ZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChtX3ByaW50T3BlcmF0
aW9uLmdldCgpKSk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9wcmludE9wZXJhdGlvbi5n
ZXQoKSwgImZpbmlzaGVkIiwgR19DQUxMQkFDSyhwcmludEZpbmlzaGVkQ2FsbGJhY2spLCB0aGlz
KTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3ByaW50T3BlcmF0aW9uLmdldCgpLCAiZmFp
bGVkIiwgR19DQUxMQkFDSyhwcmludEZhaWxlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgfQotCi0g
ICAgc3RhdGljIGdib29sZWFuIHRlc3RQcmludE9wZXJhdGlvblByaW50UHJpbnRlcihHdGtQcmlu
dGVyKiBwcmludGVyLCBncG9pbnRlciB1c2VyRGF0YSkKLSAgICB7Ci0gICAgICAgIGlmIChzdHJj
bXAoZ3RrX3ByaW50ZXJfZ2V0X25hbWUocHJpbnRlciksICJQcmludCB0byBGaWxlIikpCi0gICAg
ICAgICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICAgICAgR3RrUHJpbnRlcioqIGZvdW5kUHJpbnRl
ciA9IHN0YXRpY19jYXN0PEd0a1ByaW50ZXIqKj4odXNlckRhdGEpOwotICAgICAgICAqZm91bmRQ
cmludGVyID0gc3RhdGljX2Nhc3Q8R3RrUHJpbnRlcio+KGdfb2JqZWN0X3JlZihwcmludGVyKSk7
Ci0gICAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQotICAgIEd0a1ByaW50ZXIqIGZpbmRQcmlu
dFRvRmlsZVByaW50ZXIoKQotICAgIHsKLSAgICAgICAgR3RrUHJpbnRlciogcHJpbnRlciA9IDA7
Ci0gICAgICAgIGd0a19lbnVtZXJhdGVfcHJpbnRlcnModGVzdFByaW50T3BlcmF0aW9uUHJpbnRQ
cmludGVyLCAmcHJpbnRlciwgMCwgVFJVRSk7Ci0gICAgICAgIHJldHVybiBwcmludGVyOwotICAg
IH0KLQotICAgIHZvaWQgd2FpdFVudGlsUHJpbnRGaW5pc2hlZCgpCi0gICAgewotICAgICAgICBn
X21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgR1JlZlB0cjxXZWJLaXRQ
cmludE9wZXJhdGlvbj4gbV9wcmludE9wZXJhdGlvbjsKLSAgICB1bnNpZ25lZCBpbnQgbV9leHBl
Y3RlZEVycm9yOwotfTsKLQotc3RhdGljIHZvaWQgdGVzdFByaW50T3BlcmF0aW9uUHJpbnQoUHJp
bnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRt
bD48Ym9keT5XZWJLaXRHVEsrIHByaW50aW5nIHRlc3Q8L2JvZHk+PC9odG1sPiIsIDApOwotICAg
IHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgR1JlZlB0cjxHdGtQcmludGVy
PiBwcmludGVyID0gYWRvcHRHUmVmKHRlc3QtPmZpbmRQcmludFRvRmlsZVByaW50ZXIoKSk7Ci0g
ICAgaWYgKCFwcmludGVyKSB7Ci0gICAgICAgIGdfbWVzc2FnZSgiJXMiLCAiQ2Fubm90IHRlc3Qg
V2ViS2l0UHJpbnRPcGVyYXRpb24vcHJpbnQ6IG5vIHN1aXRhYmxlIHByaW50ZXIgZm91bmQiKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEdPd25QdHI8Y2hhcj4gb3V0cHV0RmlsZW5h
bWUoZ19idWlsZF9maWxlbmFtZShrVGVtcERpcmVjdG9yeSwgIndlYmtpdC1wcmludC5wZGYiLCBO
VUxMKSk7Ci0gICAgR1JlZlB0cjxHRmlsZT4gb3V0cHV0RmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVf
bmV3X2Zvcl9wYXRoKG91dHB1dEZpbGVuYW1lLmdldCgpKSk7Ci0gICAgR093blB0cjxjaGFyPiBv
dXRwdXRVUkkoZ19maWxlX2dldF91cmkob3V0cHV0RmlsZS5nZXQoKSkpOwotCi0gICAgR1JlZlB0
cjxHdGtQcmludFNldHRpbmdzPiBwcmludFNldHRpbmdzID0gYWRvcHRHUmVmKGd0a19wcmludF9z
ZXR0aW5nc19uZXcoKSk7Ci0gICAgZ3RrX3ByaW50X3NldHRpbmdzX3NldF9wcmludGVyKHByaW50
U2V0dGluZ3MuZ2V0KCksIGd0a19wcmludGVyX2dldF9uYW1lKHByaW50ZXIuZ2V0KCkpKTsKLSAg
ICBndGtfcHJpbnRfc2V0dGluZ3Nfc2V0KHByaW50U2V0dGluZ3MuZ2V0KCksIEdUS19QUklOVF9T
RVRUSU5HU19PVVRQVVRfVVJJLCBvdXRwdXRVUkkuZ2V0KCkpOwotCi0gICAgd2Via2l0X3ByaW50
X29wZXJhdGlvbl9zZXRfcHJpbnRfc2V0dGluZ3ModGVzdC0+bV9wcmludE9wZXJhdGlvbi5nZXQo
KSwgcHJpbnRTZXR0aW5ncy5nZXQoKSk7Ci0gICAgd2Via2l0X3ByaW50X29wZXJhdGlvbl9wcmlu
dCh0ZXN0LT5tX3ByaW50T3BlcmF0aW9uLmdldCgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxQcmlu
dEZpbmlzaGVkKCk7Ci0KLSAgICBHUmVmUHRyPEdGaWxlSW5mbz4gZmlsZUluZm8gPSBhZG9wdEdS
ZWYoZ19maWxlX3F1ZXJ5X2luZm8ob3V0cHV0RmlsZS5nZXQoKSwgR19GSUxFX0FUVFJJQlVURV9T
VEFOREFSRF9TSVpFICIsIiBHX0ZJTEVfQVRUUklCVVRFX1NUQU5EQVJEX0NPTlRFTlRfVFlQRSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8R0ZpbGVRdWVyeUluZm9GbGFncz4oMCksIDAsIDApKTsKLSAgICBn
X2Fzc2VydChmaWxlSW5mby5nZXQoKSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGdfZmlsZV9pbmZv
X2dldF9zaXplKGZpbGVJbmZvLmdldCgpKSwgPiwgMCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKGdf
ZmlsZV9pbmZvX2dldF9jb250ZW50X3R5cGUoZmlsZUluZm8uZ2V0KCkpLCA9PSwgImFwcGxpY2F0
aW9uL3BkZiIpOwotCi0gICAgZ19maWxlX2RlbGV0ZShvdXRwdXRGaWxlLmdldCgpLCAwLCAwKTsK
LX0KLQotc3RhdGljIHZvaWQgdGVzdFByaW50T3BlcmF0aW9uRXJyb3JzKFByaW50VGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHk+V2Vi
S2l0R1RLKyBwcmludGluZyBlcnJvcnMgdGVzdDwvYm9keT48L2h0bWw+IiwgMCk7Ci0gICAgdGVz
dC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBHUmVmUHRyPEd0a1ByaW50ZXI+IHBy
aW50ZXIgPSBhZG9wdEdSZWYodGVzdC0+ZmluZFByaW50VG9GaWxlUHJpbnRlcigpKTsKLSAgICBp
ZiAoIXByaW50ZXIpIHsKLSAgICAgICAgZ19tZXNzYWdlKCIlcyIsICJDYW5ub3QgdGVzdCBXZWJL
aXRQcmludE9wZXJhdGlvbi9wcmludDogbm8gc3VpdGFibGUgcHJpbnRlciBmb3VuZCIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gR2VuZXJhbCBFcnJvcjogaW52YWxpZCBmaWxl
bmFtZS4KLSAgICB0ZXN0LT5tX2V4cGVjdGVkRXJyb3IgPSBXRUJLSVRfUFJJTlRfRVJST1JfR0VO
RVJBTDsKLSAgICBHUmVmUHRyPEd0a1ByaW50U2V0dGluZ3M+IHByaW50U2V0dGluZ3MgPSBhZG9w
dEdSZWYoZ3RrX3ByaW50X3NldHRpbmdzX25ldygpKTsKLSAgICBndGtfcHJpbnRfc2V0dGluZ3Nf
c2V0X3ByaW50ZXIocHJpbnRTZXR0aW5ncy5nZXQoKSwgZ3RrX3ByaW50ZXJfZ2V0X25hbWUocHJp
bnRlci5nZXQoKSkpOwotICAgIGd0a19wcmludF9zZXR0aW5nc19zZXQocHJpbnRTZXR0aW5ncy5n
ZXQoKSwgR1RLX1BSSU5UX1NFVFRJTkdTX09VVFBVVF9VUkksICJmaWxlOi8vL2Zvby9iYXIiKTsK
LSAgICB3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX3NldF9wcmludF9zZXR0aW5ncyh0ZXN0LT5tX3By
aW50T3BlcmF0aW9uLmdldCgpLCBwcmludFNldHRpbmdzLmdldCgpKTsKLSAgICB3ZWJraXRfcHJp
bnRfb3BlcmF0aW9uX3ByaW50KHRlc3QtPm1fcHJpbnRPcGVyYXRpb24uZ2V0KCkpOwotICAgIHRl
c3QtPndhaXRVbnRpbFByaW50RmluaXNoZWQoKTsKLQotICAgIC8vIFByaW50ZXIgbm90IGZvdW5k
IGVycm9yLgotICAgIHRlc3QtPm1fZXhwZWN0ZWRFcnJvciA9IFdFQktJVF9QUklOVF9FUlJPUl9Q
UklOVEVSX05PVF9GT1VORDsKLSAgICBndGtfcHJpbnRfc2V0dGluZ3Nfc2V0X3ByaW50ZXIocHJp
bnRTZXR0aW5ncy5nZXQoKSwgIlRoZSBmYWtlIFdlYktpdCBwcmludGVyIik7Ci0gICAgd2Via2l0
X3ByaW50X29wZXJhdGlvbl9wcmludCh0ZXN0LT5tX3ByaW50T3BlcmF0aW9uLmdldCgpKTsKLSAg
ICB0ZXN0LT53YWl0VW50aWxQcmludEZpbmlzaGVkKCk7Ci0KLSAgICAvLyBObyBwYWdlcyB0byBw
cmludDogcHJpbnQgZXZlbiBwYWdlcyBmb3IgYSBzaW5nbGUgcGFnZSBkb2N1bWVudC4KLSAgICB0
ZXN0LT5tX2V4cGVjdGVkRXJyb3IgPSBXRUJLSVRfUFJJTlRfRVJST1JfSU5WQUxJRF9QQUdFX1JB
TkdFOwotICAgIGd0a19wcmludF9zZXR0aW5nc19zZXRfcHJpbnRlcihwcmludFNldHRpbmdzLmdl
dCgpLCBndGtfcHJpbnRlcl9nZXRfbmFtZShwcmludGVyLmdldCgpKSk7Ci0gICAgZ3RrX3ByaW50
X3NldHRpbmdzX3NldF9wYWdlX3NldChwcmludFNldHRpbmdzLmdldCgpLCBHVEtfUEFHRV9TRVRf
RVZFTik7Ci0gICAgd2Via2l0X3ByaW50X29wZXJhdGlvbl9wcmludCh0ZXN0LT5tX3ByaW50T3Bl
cmF0aW9uLmdldCgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxQcmludEZpbmlzaGVkKCk7Ci19Ci0j
ZW5kaWYgLy8gSEFWRV9HVEtfVU5JWF9QUklOVElORwotCi12b2lkIGJlZm9yZUFsbCgpCi17Ci0g
ICAga1RlbXBEaXJlY3RvcnkgPSBnX2Rpcl9tYWtlX3RtcCgiV2ViS2l0MlRlc3RzLVhYWFhYWCIs
IDApOwotICAgIGdfYXNzZXJ0KGtUZW1wRGlyZWN0b3J5KTsKLQotICAgIFdlYlZpZXdUZXN0Ojph
ZGQoIldlYktpdFByaW50T3BlcmF0aW9uIiwgInByaW50aW5nLXNldHRpbmdzIiwgdGVzdFByaW50
T3BlcmF0aW9uUHJpbnRTZXR0aW5ncyk7Ci0gICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2Vi
VmlldyIsICJwcmludCIsIHRlc3RXZWJWaWV3UHJpbnQpOwotI2lmZGVmIEhBVkVfR1RLX1VOSVhf
UFJJTlRJTkcKLSAgICBQcmludFRlc3Q6OmFkZCgiV2ViS2l0UHJpbnRPcGVyYXRpb24iLCAicHJp
bnQiLCB0ZXN0UHJpbnRPcGVyYXRpb25QcmludCk7Ci0gICAgUHJpbnRUZXN0OjphZGQoIldlYktp
dFByaW50T3BlcmF0aW9uIiwgInByaW50LWVycm9ycyIsIHRlc3RQcmludE9wZXJhdGlvbkVycm9y
cyk7Ci0jZW5kaWYKLX0KLQotdm9pZCBhZnRlckFsbCgpCi17Ci0gICAgZ19ybWRpcihrVGVtcERp
cmVjdG9yeSk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9UZXN0UmVzb3VyY2VzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL1Rlc3RSZXNvdXJjZXMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA1N2YxODJjLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL1Rlc3RSZXNvdXJjZXMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzg5ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotCi0jaW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5oIgotI2luY2x1ZGUgIldlYlZpZXdUZXN0
LmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQ
dHIuaD4KLQotc3RhdGljIFdlYktpdFRlc3RTZXJ2ZXIqIGtTZXJ2ZXI7Ci0KLXN0YXRpYyBjb25z
dCBjaGFyKiBrSW5kZXhIdG1sID0KLSAgICAiPGh0bWw+PGhlYWQ+IgotICAgICIgPGxpbmsgcmVs
PSdzdHlsZXNoZWV0JyBocmVmPScvc3R5bGUuY3NzJyB0eXBlPSd0ZXh0L2Nzcyc+IgotICAgICIg
PHNjcmlwdCBsYW5ndWFnZT0namF2YXNjcmlwdCcgc3JjPScvamF2YXNjcmlwdC5qcyc+PC9zY3Jp
cHQ+IgotICAgICI8L2hlYWQ+PGJvZHk+V2ViS2l0R1RLKyByZXNvdXJjZXMgdGVzdDwvYm9keT48
L2h0bWw+IjsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGtTdHlsZUNTUyA9Ci0gICAgImJvZHkgeyIK
LSAgICAiICAgIG1hcmdpbjogMHB4OyIKLSAgICAiICAgIHBhZGRpbmc6IDBweDsiCi0gICAgIiAg
ICBmb250LWZhbWlseTogc2Fucy1zZXJpZjsiCi0gICAgIiAgICBiYWNrZ3JvdW5kOiB1cmwoL2Js
YW5rLmljbykgMCAwIG5vLXJlcGVhdDsiCi0gICAgIiAgICBjb2xvcjogYmxhY2s7IgotICAgICJ9
IjsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGtKYXZhc2NyaXB0ID0gImZ1bmN0aW9uIGZvbyAoKSB7
IHZhciBhID0gMTsgfSI7Ci0KLWNsYXNzIFJlc291cmNlc1Rlc3Q6IHB1YmxpYyBXZWJWaWV3VGVz
dCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShSZXNvdXJjZXNUZXN0KTsK
LQotICAgIHN0YXRpYyB2b2lkIHJlc291cmNlU2VudFJlcXVlc3RDYWxsYmFjayhXZWJLaXRXZWJS
ZXNvdXJjZSogcmVzb3VyY2UsIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QsIFdlYktpdFVSSVJl
c3BvbnNlKiByZWRpcmVjdFJlc3BvbnNlLCBSZXNvdXJjZXNUZXN0KiB0ZXN0KQotICAgIHsKLSAg
ICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVD
VChyZXF1ZXN0KSk7Ci0gICAgICAgIGlmIChyZWRpcmVjdFJlc3BvbnNlKQotICAgICAgICAgICAg
dGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChyZWRp
cmVjdFJlc3BvbnNlKSk7Ci0gICAgICAgIHRlc3QtPnJlc291cmNlU2VudFJlcXVlc3QocmVzb3Vy
Y2UsIHJlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lk
IHJlc291cmNlUmVjZWl2ZWRSZXNwb25zZUNhbGxiYWNrKFdlYktpdFdlYlJlc291cmNlKiByZXNv
dXJjZSwgR1BhcmFtU3BlYyosIFJlc291cmNlc1Rlc3QqIHRlc3QpCi0gICAgewotICAgICAgICBn
X2Fzc2VydCh3ZWJraXRfd2ViX3Jlc291cmNlX2dldF9yZXNwb25zZShyZXNvdXJjZSkpOwotICAg
ICAgICB0ZXN0LT5yZXNvdXJjZVJlY2VpdmVkUmVzcG9uc2UocmVzb3VyY2UpOwotICAgIH0KLQot
ICAgIHN0YXRpYyB2b2lkIHJlc291cmNlUmVjZWl2ZWREYXRhQ2FsbGJhY2soV2ViS2l0V2ViUmVz
b3VyY2UqIHJlc291cmNlLCBndWludDY0IGJ5dGVzUmVjZWl2ZWQsIFJlc291cmNlc1Rlc3QqIHRl
c3QpCi0gICAgewotICAgICAgICB0ZXN0LT5yZXNvdXJjZVJlY2VpdmVkRGF0YShyZXNvdXJjZSwg
Ynl0ZXNSZWNlaXZlZCk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgcmVzb3VyY2VGaW5pc2hl
ZENhbGxiYWNrKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgUmVzb3VyY2VzVGVzdCogdGVz
dCkKLSAgICB7Ci0gICAgICAgIHRlc3QtPnJlc291cmNlRmluaXNoZWQocmVzb3VyY2UpOwotICAg
IH0KLQotICAgIHN0YXRpYyB2b2lkIHJlc291cmNlRmFpbGVkQ2FsbGJhY2soV2ViS2l0V2ViUmVz
b3VyY2UqIHJlc291cmNlLCBHRXJyb3IqIGVycm9yLCBSZXNvdXJjZXNUZXN0KiB0ZXN0KQotICAg
IHsKLSAgICAgICAgZ19hc3NlcnQoZXJyb3IpOwotICAgICAgICB0ZXN0LT5yZXNvdXJjZUZhaWxl
ZChyZXNvdXJjZSwgZXJyb3IpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHJlc291cmNlTG9h
ZFN0YXJ0ZWRDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRXZWJSZXNvdXJj
ZSogcmVzb3VyY2UsIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QsIFJlc291cmNlc1Rlc3QqIHRl
c3QpCi0gICAgewotICAgICAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZp
bmlzaGVzKEdfT0JKRUNUKHJlc291cmNlKSk7Ci0gICAgICAgIHRlc3QtPmFzc2VydE9iamVjdElz
RGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QocmVxdWVzdCkpOwotCi0gICAgICAgIC8v
IElnbm9yZSBmYXZpY29ucy4KLSAgICAgICAgaWYgKGdfc3RyX2hhc19zdWZmaXgod2Via2l0X3Vy
aV9yZXF1ZXN0X2dldF91cmkocmVxdWVzdCksICJmYXZpY29uLmljbyIpKQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIHRlc3QtPnJlc291cmNlTG9hZFN0YXJ0ZWQocmVzb3VyY2UsIHJl
cXVlc3QpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KHJlc291cmNlLCAic2VudC1yZXF1ZXN0
IiwgR19DQUxMQkFDSyhyZXNvdXJjZVNlbnRSZXF1ZXN0Q2FsbGJhY2spLCB0ZXN0KTsKLSAgICAg
ICAgZ19zaWduYWxfY29ubmVjdChyZXNvdXJjZSwgIm5vdGlmeTo6cmVzcG9uc2UiLCBHX0NBTExC
QUNLKHJlc291cmNlUmVjZWl2ZWRSZXNwb25zZUNhbGxiYWNrKSwgdGVzdCk7Ci0gICAgICAgIGdf
c2lnbmFsX2Nvbm5lY3QocmVzb3VyY2UsICJyZWNlaXZlZC1kYXRhIiwgR19DQUxMQkFDSyhyZXNv
dXJjZVJlY2VpdmVkRGF0YUNhbGxiYWNrKSwgdGVzdCk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5l
Y3QocmVzb3VyY2UsICJmaW5pc2hlZCIsIEdfQ0FMTEJBQ0socmVzb3VyY2VGaW5pc2hlZENhbGxi
YWNrKSwgdGVzdCk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QocmVzb3VyY2UsICJmYWlsZWQi
LCBHX0NBTExCQUNLKHJlc291cmNlRmFpbGVkQ2FsbGJhY2spLCB0ZXN0KTsKLSAgICB9Ci0KLSAg
ICB2b2lkIGNsZWFyU3VicmVzb3VyY2VzKCkKLSAgICB7Ci0gICAgICAgIGdfbGlzdF9mcmVlX2Z1
bGwobV9zdWJyZXNvdXJjZXMsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGdfb2Jq
ZWN0X3VucmVmKSk7Ci0gICAgICAgIG1fc3VicmVzb3VyY2VzID0gMDsKLSAgICB9Ci0KLSAgICBS
ZXNvdXJjZXNUZXN0KCkKLSAgICAgICAgOiBXZWJWaWV3VGVzdCgpCi0gICAgICAgICwgbV9yZXNv
dXJjZXNMb2FkZWQoMCkKLSAgICAgICAgLCBtX3Jlc291cmNlc1RvTG9hZCgwKQotICAgICAgICAs
IG1fcmVzb3VyY2VEYXRhU2l6ZSgwKQotICAgICAgICAsIG1fc3VicmVzb3VyY2VzKDApCi0gICAg
ewotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgInJlc291cmNlLWxvYWQtc3Rh
cnRlZCIsIEdfQ0FMTEJBQ0socmVzb3VyY2VMb2FkU3RhcnRlZENhbGxiYWNrKSwgdGhpcyk7Ci0g
ICAgfQotCi0gICAgflJlc291cmNlc1Rlc3QoKQotICAgIHsKLSAgICAgICAgY2xlYXJTdWJyZXNv
dXJjZXMoKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcmVzb3VyY2VMb2FkU3RhcnRlZChX
ZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QpCi0g
ICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCByZXNvdXJjZVNlbnRSZXF1ZXN0KFdlYktp
dFdlYlJlc291cmNlKiByZXNvdXJjZSwgV2ViS2l0VVJJUmVxdWVzdCogcmVxdWVzdCwgV2ViS2l0
VVJJUmVzcG9uc2UqIHJlZGlyZWN0UmVzcG9uc2UpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1
YWwgdm9pZCByZXNvdXJjZVJlY2VpdmVkUmVzcG9uc2UoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291
cmNlKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcmVzb3VyY2VSZWNlaXZlZERh
dGEoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBndWludDY0IGJ5dGVzUmVjZWl2ZWQpCi0g
ICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCByZXNvdXJjZUZpbmlzaGVkKFdlYktpdFdl
YlJlc291cmNlKiByZXNvdXJjZSkKLSAgICB7Ci0gICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rp
c2Nvbm5lY3RfbWF0Y2hlZChyZXNvdXJjZSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwg
MCwgdGhpcyk7Ci0gICAgICAgIGlmICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2Uo
bV93ZWJWaWV3KSAhPSByZXNvdXJjZSkKLSAgICAgICAgICAgIG1fc3VicmVzb3VyY2VzID0gZ19s
aXN0X3ByZXBlbmQobV9zdWJyZXNvdXJjZXMsIGdfb2JqZWN0X3JlZihyZXNvdXJjZSkpOwotICAg
ICAgICBpZiAoKyttX3Jlc291cmNlc0xvYWRlZCA9PSBtX3Jlc291cmNlc1RvTG9hZCkKLSAgICAg
ICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgdmlydHVh
bCB2b2lkIHJlc291cmNlRmFpbGVkKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgR0Vycm9y
KiBlcnJvcikKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0gICAgfQot
Ci0gICAgdm9pZCB3YWl0VW50aWxSZXNvdXJjZXNMb2FkZWQoc2l6ZV90IHJlc291cmNlc0NvdW50
KQotICAgIHsKLSAgICAgICAgbV9yZXNvdXJjZXNMb2FkZWQgPSAwOwotICAgICAgICBtX3Jlc291
cmNlc1RvTG9hZCA9IHJlc291cmNlc0NvdW50OwotICAgICAgICBjbGVhclN1YnJlc291cmNlcygp
OwotICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgR0xp
c3QqIHN1YnJlc291cmNlcygpCi0gICAgewotICAgICAgICByZXR1cm4gbV9zdWJyZXNvdXJjZXM7
Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgcmVzb3VyY2VHZXREYXRhQ2FsbGJhY2soR09iamVj
dCogb2JqZWN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEpCi0gICAg
ewotICAgICAgICBzaXplX3QgZGF0YVNpemU7Ci0gICAgICAgIEdPd25QdHI8R0Vycm9yPiBlcnJv
cjsKLSAgICAgICAgdW5zaWduZWQgY2hhciogZGF0YSA9IHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0
X2RhdGFfZmluaXNoKFdFQktJVF9XRUJfUkVTT1VSQ0Uob2JqZWN0KSwgcmVzdWx0LCAmZGF0YVNp
emUsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7Ci0g
ICAgICAgIGdfYXNzZXJ0KGRhdGEpOwotICAgICAgICBnX2Fzc2VydF9jbXBpbnQoZGF0YVNpemUs
ID4sIDApOwotCi0gICAgICAgIFJlc291cmNlc1Rlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxSZXNv
dXJjZXNUZXN0Kj4odXNlckRhdGEpOwotICAgICAgICB0ZXN0LT5tX3Jlc291cmNlRGF0YS5zZXQo
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZGF0YSkpOwotICAgICAgICB0ZXN0LT5tX3Jlc291cmNl
RGF0YVNpemUgPSBkYXRhU2l6ZTsKLSAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21h
aW5Mb29wKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNoZWNrUmVzb3VyY2VEYXRhKFdlYktpdFdlYlJl
c291cmNlKiByZXNvdXJjZSkKLSAgICB7Ci0gICAgICAgIG1fcmVzb3VyY2VEYXRhU2l6ZSA9IDA7
Ci0gICAgICAgIHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X2RhdGEocmVzb3VyY2UsIDAsIHJlc291
cmNlR2V0RGF0YUNhbGxiYWNrLCB0aGlzKTsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFp
bkxvb3ApOwotCi0gICAgICAgIGNvbnN0IGNoYXIqIHVyaSA9IHdlYmtpdF93ZWJfcmVzb3VyY2Vf
Z2V0X3VyaShyZXNvdXJjZSk7Ci0gICAgICAgIGlmICh1cmkgPT0ga1NlcnZlci0+Z2V0VVJJRm9y
UGF0aCgiLyIpKSB7Ci0gICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQobV9yZXNvdXJjZURhdGFT
aXplLCA9PSwgc3RybGVuKGtJbmRleEh0bWwpKTsKLSAgICAgICAgICAgIGdfYXNzZXJ0KCFzdHJu
Y21wKG1fcmVzb3VyY2VEYXRhLmdldCgpLCBrSW5kZXhIdG1sLCBtX3Jlc291cmNlRGF0YVNpemUp
KTsKLSAgICAgICAgfSBlbHNlIGlmICh1cmkgPT0ga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3N0
eWxlLmNzcyIpKSB7Ci0gICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQobV9yZXNvdXJjZURhdGFT
aXplLCA9PSwgc3RybGVuKGtTdHlsZUNTUykpOwotICAgICAgICAgICAgZ19hc3NlcnQoIXN0cm5j
bXAobV9yZXNvdXJjZURhdGEuZ2V0KCksIGtTdHlsZUNTUywgbV9yZXNvdXJjZURhdGFTaXplKSk7
Ci0gICAgICAgIH0gZWxzZSBpZiAodXJpID09IGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9qYXZh
c2NyaXB0LmpzIikpIHsKLSAgICAgICAgICAgIGdfYXNzZXJ0X2NtcGludChtX3Jlc291cmNlRGF0
YVNpemUsID09LCBzdHJsZW4oa0phdmFzY3JpcHQpKTsKLSAgICAgICAgICAgIGdfYXNzZXJ0KCFz
dHJuY21wKG1fcmVzb3VyY2VEYXRhLmdldCgpLCBrSmF2YXNjcmlwdCwgbV9yZXNvdXJjZURhdGFT
aXplKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQo
KTsKLSAgICAgICAgbV9yZXNvdXJjZURhdGEuY2xlYXIoKTsKLSAgICB9Ci0KLSAgICBzaXplX3Qg
bV9yZXNvdXJjZXNMb2FkZWQ7Ci0gICAgc2l6ZV90IG1fcmVzb3VyY2VzVG9Mb2FkOwotICAgIEdP
d25QdHI8Y2hhcj4gbV9yZXNvdXJjZURhdGE7Ci0gICAgc2l6ZV90IG1fcmVzb3VyY2VEYXRhU2l6
ZTsKLSAgICBHTGlzdCogbV9zdWJyZXNvdXJjZXM7Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0V2Vi
Vmlld1Jlc291cmNlcyhSZXNvdXJjZXNUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAg
IC8vIE5vdGhpbmcgbG9hZGVkIHlldCwgdGhlcmUgc2hvdWxuZCd0IGJlIHJlc291cmNlcy4KLSAg
ICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2dldF9tYWluX3Jlc291cmNlKHRlc3QtPm1fd2Vi
VmlldykpOwotICAgIGdfYXNzZXJ0KCF0ZXN0LT5zdWJyZXNvdXJjZXMoKSk7Ci0KLSAgICAvLyBM
b2FkIHNpbXBsZSBwYWdlIHdpdGhvdXQgc3VicmVzb3VyY2VzLgotICAgIHRlc3QtPmxvYWRIdG1s
KCI8aHRtbD48Ym9keT5UZXN0aW5nIFdlYktpdEdUSys8L2JvZHk+PC9odG1sPiIsIDApOwotICAg
IHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIFdlYktpdFdlYlJlc291cmNlKiBy
ZXNvdXJjZSA9IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9yZXNvdXJjZSh0ZXN0LT5tX3dlYlZp
ZXcpOwotICAgIGdfYXNzZXJ0KHJlc291cmNlKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0
X3dlYl92aWV3X2dldF91cmkodGVzdC0+bV93ZWJWaWV3KSwgPT0sIHdlYmtpdF93ZWJfcmVzb3Vy
Y2VfZ2V0X3VyaShyZXNvdXJjZSkpOwotICAgIGdfYXNzZXJ0KCF0ZXN0LT5zdWJyZXNvdXJjZXMo
KSk7Ci0KLSAgICAvLyBMb2FkIHNpbXBsZSBwYWdlIHdpdGggc3VicmVzb3VyY2VzLgotICAgIHRl
c3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7Ci0gICAgdGVz
dC0+d2FpdFVudGlsUmVzb3VyY2VzTG9hZGVkKDQpOwotCi0gICAgcmVzb3VyY2UgPSB3ZWJraXRf
d2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2UodGVzdC0+bV93ZWJWaWV3KTsKLSAgICBnX2Fzc2Vy
dChyZXNvdXJjZSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRfdXJp
KHRlc3QtPm1fd2ViVmlldyksID09LCB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF91cmkocmVzb3Vy
Y2UpKTsKLSAgICBHTGlzdCogc3VicmVzb3VyY2VzID0gdGVzdC0+c3VicmVzb3VyY2VzKCk7Ci0g
ICAgZ19hc3NlcnQoc3VicmVzb3VyY2VzKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZ19saXN0X2xl
bmd0aChzdWJyZXNvdXJjZXMpLCA9PSwgMyk7Ci0KLSNpZiAwCi0gICAgLy8gTG9hZCB0aGUgc2Ft
ZSBVUkkgYWdhaW4uCi0gICAgLy8gRklYTUU6IHdlIG5lZWQgYSB3b3JrYXJvdW5kIGZvciBidWcg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NTEwLgotICAgIHRlc3Qt
PmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+
d2FpdFVudGlsUmVzb3VyY2VzTG9hZGVkKDQpOwotI2VuZGlmCi0KLSAgICAvLyBSZWxvYWQuCi0g
ICAgd2Via2l0X3dlYl92aWV3X3JlbG9hZF9ieXBhc3NfY2FjaGUodGVzdC0+bV93ZWJWaWV3KTsK
LSAgICB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZXNMb2FkZWQoNCk7Ci19Ci0KLWNsYXNzIFNpbmds
ZVJlc291cmNlTG9hZFRlc3Q6IHB1YmxpYyBSZXNvdXJjZXNUZXN0IHsKLXB1YmxpYzoKLSAgICBN
QUtFX0dMSUJfVEVTVF9GSVhUVVJFKFNpbmdsZVJlc291cmNlTG9hZFRlc3QpOwotCi0gICAgZW51
bSBMb2FkRXZlbnRzIHsKLSAgICAgICAgU3RhcnRlZCwKLSAgICAgICAgU2VudFJlcXVlc3QsCi0g
ICAgICAgIFJlZGlyZWN0ZWQsCi0gICAgICAgIFJlY2VpdmVkUmVzcG9uc2UsCi0gICAgICAgIFJl
Y2VpdmVkRGF0YSwKLSAgICAgICAgRmluaXNoZWQsCi0gICAgICAgIEZhaWxlZAotICAgIH07Ci0K
LSAgICBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0KCkKLSAgICAgICAgOiBSZXNvdXJjZXNUZXN0KCkK
LSAgICAgICAgLCBtX3Jlc291cmNlRGF0YVJlY2VpdmVkKDApCi0gICAgewotICAgICAgICAgbV9y
ZXNvdXJjZXNUb0xvYWQgPSAyOwotICAgIH0KLQotICAgIHZvaWQgcmVzb3VyY2VMb2FkU3RhcnRl
ZChXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3Qp
Ci0gICAgewotICAgICAgICBpZiAocmVzb3VyY2UgPT0gd2Via2l0X3dlYl92aWV3X2dldF9tYWlu
X3Jlc291cmNlKG1fd2ViVmlldykpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9y
ZXNvdXJjZURhdGFSZWNlaXZlZCA9IDA7Ci0gICAgICAgIG1fcmVzb3VyY2UgPSByZXNvdXJjZTsK
LSAgICAgICAgbV9sb2FkRXZlbnRzLmFwcGVuZChTdGFydGVkKTsKLSAgICB9Ci0KLSAgICB2b2lk
IHJlc291cmNlU2VudFJlcXVlc3QoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBXZWJLaXRV
UklSZXF1ZXN0KiByZXF1ZXN0LCBXZWJLaXRVUklSZXNwb25zZSogcmVkaXJlY3RSZXNwb25zZSkK
LSAgICB7Ci0gICAgICAgIGlmIChyZXNvdXJjZSAhPSBtX3Jlc291cmNlKQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIGlmIChyZWRpcmVjdFJlc3BvbnNlKQotICAgICAgICAgICAgbV9s
b2FkRXZlbnRzLmFwcGVuZChSZWRpcmVjdGVkKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
bV9sb2FkRXZlbnRzLmFwcGVuZChTZW50UmVxdWVzdCk7Ci0gICAgfQotCi0gICAgdm9pZCByZXNv
dXJjZVJlY2VpdmVkUmVzcG9uc2UoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlKQotICAgIHsK
LSAgICAgICAgaWYgKHJlc291cmNlICE9IG1fcmVzb3VyY2UpCi0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgbV9sb2FkRXZlbnRzLmFwcGVuZChSZWNlaXZlZFJlc3BvbnNlKTsKLSAgICB9
Ci0KLSAgICB2b2lkIHJlc291cmNlUmVjZWl2ZWREYXRhKFdlYktpdFdlYlJlc291cmNlKiByZXNv
dXJjZSwgZ3VpbnQ2NCBieXRlc1JlY2VpdmVkKQotICAgIHsKLSAgICAgICAgaWYgKHJlc291cmNl
ICE9IG1fcmVzb3VyY2UpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9yZXNvdXJj
ZURhdGFSZWNlaXZlZCArPSBieXRlc1JlY2VpdmVkOwotICAgICAgICBpZiAoIW1fbG9hZEV2ZW50
cy5jb250YWlucyhSZWNlaXZlZERhdGEpKQotICAgICAgICAgICAgbV9sb2FkRXZlbnRzLmFwcGVu
ZChSZWNlaXZlZERhdGEpOwotICAgIH0KLQotICAgIHZvaWQgcmVzb3VyY2VGaW5pc2hlZChXZWJL
aXRXZWJSZXNvdXJjZSogcmVzb3VyY2UpCi0gICAgewotICAgICAgICBpZiAocmVzb3VyY2UgIT0g
bV9yZXNvdXJjZSkgewotICAgICAgICAgICAgUmVzb3VyY2VzVGVzdDo6cmVzb3VyY2VGaW5pc2hl
ZChyZXNvdXJjZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoIW1fbG9hZEV2ZW50cy5jb250YWlucyhGYWlsZWQpKSB7Ci0gICAgICAgICAgICBXZWJLaXRV
UklSZXNwb25zZSogcmVzcG9uc2UgPSB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF9yZXNwb25zZSht
X3Jlc291cmNlLmdldCgpKTsKLSAgICAgICAgICAgIGdfYXNzZXJ0KHJlc3BvbnNlKTsKLSAgICAg
ICAgICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF9jb250ZW50X2xl
bmd0aChyZXNwb25zZSksID09LCBtX3Jlc291cmNlRGF0YVJlY2VpdmVkKTsKLSAgICAgICAgfQot
ICAgICAgICBtX2xvYWRFdmVudHMuYXBwZW5kKEZpbmlzaGVkKTsKLSAgICAgICAgUmVzb3VyY2Vz
VGVzdDo6cmVzb3VyY2VGaW5pc2hlZChyZXNvdXJjZSk7Ci0gICAgfQotCi0gICAgdm9pZCByZXNv
dXJjZUZhaWxlZChXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIEdFcnJvciogZXJyb3IpCi0g
ICAgewotICAgICAgICBpZiAocmVzb3VyY2UgPT0gbV9yZXNvdXJjZSkKLSAgICAgICAgICAgIG1f
bG9hZEV2ZW50cy5hcHBlbmQoRmFpbGVkKTsKLSAgICB9Ci0KLSAgICB2b2lkIHdhaXRVbnRpbFJl
c291cmNlTG9hZEZpbmlzaGVkKCkKLSAgICB7Ci0gICAgICAgIG1fcmVzb3VyY2UgPSAwOwotICAg
ICAgICBtX3Jlc291cmNlc0xvYWRlZCA9IDA7Ci0gICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21h
aW5Mb29wKTsKLSAgICB9Ci0KLSAgICBXZWJLaXRVUklSZXNwb25zZSogd2FpdFVudGlsUmVzb3Vy
Y2VMb2FkRmluaXNoZWRBbmRSZXR1cm5VUklSZXNwb25zZSgpCi0gICAgewotICAgICAgICB3YWl0
VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZCgpOwotICAgICAgICBnX2Fzc2VydChtX3Jlc291cmNl
KTsKLSAgICAgICAgcmV0dXJuIHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3Jlc3BvbnNlKG1fcmVz
b3VyY2UuZ2V0KCkpOwotICAgIH0KLQotICAgIEdSZWZQdHI8V2ViS2l0V2ViUmVzb3VyY2U+IG1f
cmVzb3VyY2U7Ci0gICAgVmVjdG9yPExvYWRFdmVudHM+IG1fbG9hZEV2ZW50czsKLSAgICBndWlu
dDY0IG1fcmVzb3VyY2VEYXRhUmVjZWl2ZWQ7Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViUmVz
b3VyY2VMb2FkaW5nKFNpbmdsZVJlc291cmNlTG9hZFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIp
Ci17Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvamF2YXNjcmlw
dC5odG1sIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hl
ZCgpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fcmVzb3VyY2UpOwotICAgIFZlY3RvcjxTaW5nbGVS
ZXNvdXJjZUxvYWRUZXN0OjpMb2FkRXZlbnRzPiYgZXZlbnRzID0gdGVzdC0+bV9sb2FkRXZlbnRz
OwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgNSk7Ci0gICAgZ19hc3Nl
cnRfY21waW50KGV2ZW50c1swXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlN0YXJ0ZWQp
OwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRU
ZXN0OjpTZW50UmVxdWVzdCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIFNp
bmdsZVJlc291cmNlTG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOwotICAgIGdfYXNzZXJ0X2Nt
cGludChldmVudHNbM10sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpSZWNlaXZlZERhdGEp
OwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbNF0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRU
ZXN0OjpGaW5pc2hlZCk7Ci0gICAgZXZlbnRzLmNsZWFyKCk7Ci0KLSAgICB0ZXN0LT5sb2FkVVJJ
KGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9yZWRpcmVjdGVkLWNzcy5odG1sIikuZGF0YSgpKTsK
LSAgICB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZCgpOwotICAgIGdfYXNzZXJ0
KHRlc3QtPm1fcmVzb3VyY2UpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9
PSwgNik7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIFNpbmdsZVJlc291cmNl
TG9hZFRlc3Q6OlN0YXJ0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBT
aW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpTZW50UmVxdWVzdCk7Ci0gICAgZ19hc3NlcnRfY21waW50
KGV2ZW50c1syXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlJlZGlyZWN0ZWQpOwotICAg
IGdfYXNzZXJ0X2NtcGludChldmVudHNbM10sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpS
ZWNlaXZlZFJlc3BvbnNlKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzRdLCA9PSwgU2lu
Z2xlUmVzb3VyY2VMb2FkVGVzdDo6UmVjZWl2ZWREYXRhKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
ZXZlbnRzWzVdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6RmluaXNoZWQpOwotICAgIGV2
ZW50cy5jbGVhcigpOwotCi0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRo
KCIvaW52YWxpZC1jc3MuaHRtbCIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsUmVzb3Vy
Y2VMb2FkRmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX3Jlc291cmNlKTsKLSAgICBn
X2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDQpOwotICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHNbMF0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpTdGFydGVkKTsKLSAgICBn
X2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6U2Vu
dFJlcXVlc3QpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBTaW5nbGVSZXNv
dXJjZUxvYWRUZXN0OjpGYWlsZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbM10sID09
LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpGaW5pc2hlZCk7Ci0gICAgZXZlbnRzLmNsZWFyKCk7
Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJSZXNvdXJjZVJlc3BvbnNlKFNpbmdsZVJlc291cmNl
TG9hZFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgLy8gTm8gY2FjaGVkIHJlc291
cmNlOiBGaXJzdCBsb2FkLgotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0
aCgiL2phdmFzY3JpcHQuaHRtbCIpLmRhdGEoKSk7Ci0gICAgV2ViS2l0VVJJUmVzcG9uc2UqIHJl
c3BvbnNlID0gdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWRBbmRSZXR1cm5VUklS
ZXNwb25zZSgpOwotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF9z
dGF0dXNfY29kZShyZXNwb25zZSksID09LCBTT1VQX1NUQVRVU19PSyk7Ci0KLSAgICAvLyBObyBj
YWNoZWQgcmVzb3VyY2U6IFNlY29uZCBsb2FkLgotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+
Z2V0VVJJRm9yUGF0aCgiL2phdmFzY3JpcHQuaHRtbCIpLmRhdGEoKSk7Ci0gICAgcmVzcG9uc2Ug
PSB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZEFuZFJldHVyblVSSVJlc3BvbnNl
KCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0X3N0YXR1c19j
b2RlKHJlc3BvbnNlKSwgPT0sIFNPVVBfU1RBVFVTX09LKTsKLQotICAgIC8vIE5vIGNhY2hlZCBy
ZXNvdXJjZTogUmVsb2FkLgotICAgIHdlYmtpdF93ZWJfdmlld19yZWxvYWQodGVzdC0+bV93ZWJW
aWV3KTsKLSAgICByZXNwb25zZSA9IHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlzaGVk
QW5kUmV0dXJuVVJJUmVzcG9uc2UoKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3VyaV9y
ZXNwb25zZV9nZXRfc3RhdHVzX2NvZGUocmVzcG9uc2UpLCA9PSwgU09VUF9TVEFUVVNfT0spOwot
Ci0gICAgLy8gQ2FjaGVkIHJlc291cmNlOiBGaXJzdCBsb2FkLgotICAgIHRlc3QtPmxvYWRVUkko
a1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2ltYWdlLmh0bWwiKS5kYXRhKCkpOwotICAgIHJlc3Bv
bnNlID0gdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWRBbmRSZXR1cm5VUklSZXNw
b25zZSgpOwotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF9zdGF0
dXNfY29kZShyZXNwb25zZSksID09LCBTT1VQX1NUQVRVU19PSyk7Ci0KLSAgICAvLyBDYWNoZWQg
cmVzb3VyY2U6IFNlY29uZCBsb2FkLgotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJ
Rm9yUGF0aCgiL2ltYWdlLmh0bWwiKS5kYXRhKCkpOwotICAgIHJlc3BvbnNlID0gdGVzdC0+d2Fp
dFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWRBbmRSZXR1cm5VUklSZXNwb25zZSgpOwotICAgIGdf
YXNzZXJ0X2NtcGludCh3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF9zdGF0dXNfY29kZShyZXNwb25z
ZSksID09LCBTT1VQX1NUQVRVU19PSyk7Ci0KLSAgICAvLyBDYWNoZWQgcmVzb3VyY2U6IFJlbG9h
ZC4KLSAgICB3ZWJraXRfd2ViX3ZpZXdfcmVsb2FkKHRlc3QtPm1fd2ViVmlldyk7Ci0gICAgcmVz
cG9uc2UgPSB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZEFuZFJldHVyblVSSVJl
c3BvbnNlKCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0X3N0
YXR1c19jb2RlKHJlc3BvbnNlKSwgPT0sIFNPVVBfU1RBVFVTX05PVF9NT0RJRklFRCk7Ci19Ci0K
LXN0YXRpYyB2b2lkIHRlc3RXZWJSZXNvdXJjZU1pbWVUeXBlKFNpbmdsZVJlc291cmNlTG9hZFRl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5n
ZXRVUklGb3JQYXRoKCIvamF2YXNjcmlwdC5odG1sIikuZGF0YSgpKTsKLSAgICBXZWJLaXRVUklS
ZXNwb25zZSogcmVzcG9uc2UgPSB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZEFu
ZFJldHVyblVSSVJlc3BvbnNlKCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF91cmlfcmVz
cG9uc2VfZ2V0X21pbWVfdHlwZShyZXNwb25zZSksID09LCAidGV4dC9qYXZhc2NyaXB0Iik7Ci0K
LSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbWFnZS5odG1sIiku
ZGF0YSgpKTsKLSAgICByZXNwb25zZSA9IHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlz
aGVkQW5kUmV0dXJuVVJJUmVzcG9uc2UoKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3Vy
aV9yZXNwb25zZV9nZXRfbWltZV90eXBlKHJlc3BvbnNlKSwgPT0sICJpbWFnZS92bmQubWljcm9z
b2Z0Lmljb24iKTsKLQotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgi
L3JlZGlyZWN0ZWQtY3NzLmh0bWwiKS5kYXRhKCkpOwotICAgIHJlc3BvbnNlID0gdGVzdC0+d2Fp
dFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWRBbmRSZXR1cm5VUklSZXNwb25zZSgpOwotICAgIGdf
YXNzZXJ0X2NtcHN0cih3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF9taW1lX3R5cGUocmVzcG9uc2Up
LCA9PSwgInRleHQvY3NzIik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJSZXNvdXJjZVN1Z2dl
c3RlZEZpbGVuYW1lKFNpbmdsZVJlc291cmNlTG9hZFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIp
Ci17Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvamF2YXNjcmlw
dC5odG1sIikuZGF0YSgpKTsKLSAgICBXZWJLaXRVUklSZXNwb25zZSogcmVzcG9uc2UgPSB0ZXN0
LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZEFuZFJldHVyblVSSVJlc3BvbnNlKCk7Ci0g
ICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0X3N1Z2dlc3RlZF9maWxl
bmFtZShyZXNwb25zZSksID09LCAiSmF2YVNjcmlwdC5qcyIpOwotCi0gICAgdGVzdC0+bG9hZFVS
SShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvaW1hZ2UuaHRtbCIpLmRhdGEoKSk7Ci0gICAgcmVz
cG9uc2UgPSB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZEFuZFJldHVyblVSSVJl
c3BvbnNlKCk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0X3N1Z2dlc3Rl
ZF9maWxlbmFtZShyZXNwb25zZSkpOwotfQotCi1jbGFzcyBSZXNvdXJjZVVSSVRyYWNraW5nVGVz
dDogcHVibGljIFNpbmdsZVJlc291cmNlTG9hZFRlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJ
Ql9URVNUX0ZJWFRVUkUoUmVzb3VyY2VVUklUcmFja2luZ1Rlc3QpOwotCi0gICAgUmVzb3VyY2VV
UklUcmFja2luZ1Rlc3QoKQotICAgICAgICA6IFNpbmdsZVJlc291cmNlTG9hZFRlc3QoKQotICAg
IHsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCB1cmlDaGFuZ2VkKFdlYktpdFdlYlJlc291cmNl
KiByZXNvdXJjZSwgR1BhcmFtU3BlYyosIFJlc291cmNlVVJJVHJhY2tpbmdUZXN0KiB0ZXN0KQot
ICAgIHsKLSAgICAgICAgZ19hc3NlcnQocmVzb3VyY2UgPT0gdGVzdC0+bV9yZXNvdXJjZS5nZXQo
KSk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXN0LT5tX2FjdGl2ZVVSSS5kYXRhKCksICE9
LCB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF91cmkodGVzdC0+bV9yZXNvdXJjZS5nZXQoKSkpOwot
ICAgICAgICB0ZXN0LT5tX2FjdGl2ZVVSSSA9IHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaSh0
ZXN0LT5tX3Jlc291cmNlLmdldCgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlc291cmNlTG9hZFN0
YXJ0ZWQoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBXZWJLaXRVUklSZXF1ZXN0KiByZXF1
ZXN0KQotICAgIHsKLSAgICAgICAgaWYgKHJlc291cmNlID09IHdlYmtpdF93ZWJfdmlld19nZXRf
bWFpbl9yZXNvdXJjZShtX3dlYlZpZXcpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IG1fcmVzb3VyY2UgPSByZXNvdXJjZTsKLSAgICAgICAgbV9hY3RpdmVVUkkgPSB3ZWJraXRfd2Vi
X3Jlc291cmNlX2dldF91cmkocmVzb3VyY2UpOwotICAgICAgICBjaGVja0FjdGl2ZVVSSSgiL3Jl
ZGlyZWN0ZWQuY3NzIik7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cihtX2FjdGl2ZVVSSS5kYXRh
KCksID09LCB3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KSk7Ci0gICAgICAgIGdf
c2lnbmFsX2Nvbm5lY3QocmVzb3VyY2UsICJub3RpZnk6OnVyaSIsIEdfQ0FMTEJBQ0sodXJpQ2hh
bmdlZCksIHRoaXMpOwotICAgIH0KLQotICAgIHZvaWQgcmVzb3VyY2VTZW50UmVxdWVzdChXZWJL
aXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QsIFdlYktp
dFVSSVJlc3BvbnNlKiByZWRpcmVjdFJlc3BvbnNlKQotICAgIHsKLSAgICAgICAgaWYgKHJlc291
cmNlICE9IG1fcmVzb3VyY2UpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKHJl
ZGlyZWN0UmVzcG9uc2UpCi0gICAgICAgICAgICBjaGVja0FjdGl2ZVVSSSgiL3NpbXBsZS1zdHls
ZS5jc3MiKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2hlY2tBY3RpdmVVUkkoIi9yZWRp
cmVjdGVkLmNzcyIpOwotICAgICAgICBnX2Fzc2VydF9jbXBzdHIobV9hY3RpdmVVUkkuZGF0YSgp
LCA9PSwgd2Via2l0X3VyaV9yZXF1ZXN0X2dldF91cmkocmVxdWVzdCkpOwotICAgIH0KLQotICAg
IHZvaWQgcmVzb3VyY2VSZWNlaXZlZFJlc3BvbnNlKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJj
ZSkKLSAgICB7Ci0gICAgICAgIGlmIChyZXNvdXJjZSAhPSBtX3Jlc291cmNlKQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIGNoZWNrQWN0aXZlVVJJKCIvc2ltcGxlLXN0eWxlLmNzcyIp
OwotICAgIH0KLQotICAgIHZvaWQgcmVzb3VyY2VSZWNlaXZlZERhdGEoV2ViS2l0V2ViUmVzb3Vy
Y2UqIHJlc291cmNlLCBndWludDY0IGJ5dGVzUmVjZWl2ZWQpCi0gICAgewotICAgIH0KLQotICAg
IHZvaWQgcmVzb3VyY2VGaW5pc2hlZChXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UpCi0gICAg
ewotICAgICAgICBpZiAocmVzb3VyY2UgPT0gbV9yZXNvdXJjZSkKLSAgICAgICAgICAgIGNoZWNr
QWN0aXZlVVJJKCIvc2ltcGxlLXN0eWxlLmNzcyIpOwotICAgICAgICBSZXNvdXJjZXNUZXN0Ojpy
ZXNvdXJjZUZpbmlzaGVkKHJlc291cmNlKTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlc291cmNlRmFp
bGVkKFdlYktpdFdlYlJlc291cmNlKiwgR0Vycm9yKikKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0
X25vdF9yZWFjaGVkKCk7Ci0gICAgfQotCi0gICAgQ1N0cmluZyBtX2FjdGl2ZVVSSTsKLQotcHJp
dmF0ZToKLSAgICB2b2lkIGNoZWNrQWN0aXZlVVJJKGNvbnN0IGNoYXIqIHVyaSkKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVF9DTVBfQ1NUUklORyhtX2FjdGl2ZVVSSSwgPT0sIGtTZXJ2ZXItPmdldFVS
SUZvclBhdGgodXJpKSk7Ci0gICAgfQotfTsKLQotc3RhdGljIHZvaWQgdGVzdFdlYlJlc291cmNl
QWN0aXZlVVJJKFJlc291cmNlVVJJVHJhY2tpbmdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQot
ewotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3JlZGlyZWN0ZWQt
Y3NzLmh0bWwiKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlz
aGVkKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJSZXNvdXJjZUdldERhdGEoUmVzb3VyY2Vz
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXIt
PmdldFVSSUZvclBhdGgoIi8iKS5kYXRhKCkpOwotICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBi
ZSA0IGluc3RlYWQgb2YgMywgYnV0IHdlIGRvbid0IGdldCB0aGUgY3NzIGltYWdlIHJlc291cmNl
Ci0gICAgLy8gZHVlIHRvIGJ1ZyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Nzg1MTAuCi0gICAgdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VzTG9hZGVkKDMpOwotCi0gICAg
V2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX3Jl
c291cmNlKHRlc3QtPm1fd2ViVmlldyk7Ci0gICAgZ19hc3NlcnQocmVzb3VyY2UpOwotICAgIHRl
c3QtPmNoZWNrUmVzb3VyY2VEYXRhKHJlc291cmNlKTsKLQotICAgIEdMaXN0KiBzdWJyZXNvdXJj
ZXMgPSB0ZXN0LT5zdWJyZXNvdXJjZXMoKTsKLSAgICBmb3IgKEdMaXN0KiBpdGVtID0gc3VicmVz
b3VyY2VzOyBpdGVtOyBpdGVtID0gZ19saXN0X25leHQoaXRlbSkpCi0gICAgICAgIHRlc3QtPmNo
ZWNrUmVzb3VyY2VEYXRhKFdFQktJVF9XRUJfUkVTT1VSQ0UoaXRlbS0+ZGF0YSkpOwotfQotCi1z
dGF0aWMgdm9pZCB0ZXN0V2ViVmlld1Jlc291cmNlc0hpc3RvcnlDYWNoZShTaW5nbGVSZXNvdXJj
ZUxvYWRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIENTdHJpbmcgamF2YXNjcmlw
dFVSSSA9IGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9qYXZhc2NyaXB0Lmh0bWwiKTsKLSAgICB0
ZXN0LT5sb2FkVVJJKGphdmFzY3JpcHRVUkkuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxS
ZXNvdXJjZUxvYWRGaW5pc2hlZCgpOwotICAgIFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSA9
IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9yZXNvdXJjZSh0ZXN0LT5tX3dlYlZpZXcpOwotICAg
IGdfYXNzZXJ0KHJlc291cmNlKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9yZXNv
dXJjZV9nZXRfdXJpKHJlc291cmNlKSwgPT0sIGphdmFzY3JpcHRVUkkuZGF0YSgpKTsKLQotICAg
IENTdHJpbmcgc2ltcGxlU3R5bGVDU1NVUkkgPSBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvc2lt
cGxlLXN0eWxlLWNzcy5odG1sIik7Ci0gICAgdGVzdC0+bG9hZFVSSShzaW1wbGVTdHlsZUNTU1VS
SS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlzaGVkKCk7Ci0g
ICAgcmVzb3VyY2UgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2UodGVzdC0+bV93
ZWJWaWV3KTsKLSAgICBnX2Fzc2VydChyZXNvdXJjZSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdl
YmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaShyZXNvdXJjZSksID09LCBzaW1wbGVTdHlsZUNTU1VS
SS5kYXRhKCkpOwotCi0gICAgdGVzdC0+Z29CYWNrKCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsUmVz
b3VyY2VMb2FkRmluaXNoZWQoKTsKLSAgICByZXNvdXJjZSA9IHdlYmtpdF93ZWJfdmlld19nZXRf
bWFpbl9yZXNvdXJjZSh0ZXN0LT5tX3dlYlZpZXcpOwotICAgIGdfYXNzZXJ0KHJlc291cmNlKTsK
LSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJpKHJlc291cmNl
KSwgPT0sIGphdmFzY3JpcHRVUkkuZGF0YSgpKTsKLQotICAgIHRlc3QtPmdvRm9yd2FyZCgpOwot
ICAgIHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlzaGVkKCk7Ci0gICAgcmVzb3VyY2Ug
PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2UodGVzdC0+bV93ZWJWaWV3KTsKLSAg
ICBnX2Fzc2VydChyZXNvdXJjZSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfcmVz
b3VyY2VfZ2V0X3VyaShyZXNvdXJjZSksID09LCBzaW1wbGVTdHlsZUNTU1VSSS5kYXRhKCkpOwot
fQotCi1jbGFzcyBTZW5kUmVxdWVzdFRlc3Q6IHB1YmxpYyBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0
IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFNlbmRSZXF1ZXN0VGVzdCk7
Ci0KLSAgICB2b2lkIHJlc291cmNlU2VudFJlcXVlc3QoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291
cmNlLCBXZWJLaXRVUklSZXF1ZXN0KiByZXF1ZXN0LCBXZWJLaXRVUklSZXNwb25zZSogcmVkaXJl
Y3RSZXNwb25zZSkKLSAgICB7Ci0gICAgICAgIGlmIChyZXNvdXJjZSAhPSBtX3Jlc291cmNlKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChyZWRpcmVjdFJlc3BvbnNlKQotICAg
ICAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfdXJpKHJlcXVl
c3QpLCA9PSwgbV9leHBlY3RlZE5ld1Jlc291cmNlVVJJQWZ0ZXJSZWRpcmVjdGlvbi5kYXRhKCkp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3VyaV9y
ZXF1ZXN0X2dldF91cmkocmVxdWVzdCksID09LCBtX2V4cGVjdGVkTmV3UmVzb3VyY2VVUkkuZGF0
YSgpKTsKLSAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfdXJp
KHJlcXVlc3QpLCA9PSwgd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJpKHJlc291cmNlKSk7Ci0K
LSAgICAgICAgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6cmVzb3VyY2VTZW50UmVxdWVzdChyZXNv
dXJjZSwgcmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7Ci0gICAgfQotCi0gICAgdm9pZCByZXNv
dXJjZUZhaWxlZChXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIEdFcnJvciogZXJyb3IpCi0g
ICAgewotICAgICAgICBpZiAocmVzb3VyY2UgIT0gbV9yZXNvdXJjZSkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9yZXNvdXJjZV9nZXRf
dXJpKHJlc291cmNlKSwgPT0sIG1fZXhwZWN0ZWRDYW5jZWxsZWRSZXNvdXJjZVVSSS5kYXRhKCkp
OwotICAgICAgICBnX2Fzc2VydF9lcnJvcihlcnJvciwgV0VCS0lUX05FVFdPUktfRVJST1IsIFdF
QktJVF9ORVRXT1JLX0VSUk9SX0NBTkNFTExFRCk7Ci0KLSAgICAgICAgU2luZ2xlUmVzb3VyY2VM
b2FkVGVzdDo6cmVzb3VyY2VGYWlsZWQocmVzb3VyY2UsIGVycm9yKTsKLSAgICB9Ci0KLSAgICB2
b2lkIHNldEV4cGVjdGVkTmV3UmVzb3VyY2VVUkkoY29uc3QgQ1N0cmluZyYgdXJpKQotICAgIHsK
LSAgICAgICAgbV9leHBlY3RlZE5ld1Jlc291cmNlVVJJID0gdXJpOwotICAgIH0KLQotICAgIHZv
aWQgc2V0RXhwZWN0ZWRDYW5jZWxsZWRSZXNvdXJjZVVSSShjb25zdCBDU3RyaW5nJiB1cmkpCi0g
ICAgewotICAgICAgICBtX2V4cGVjdGVkQ2FuY2VsbGVkUmVzb3VyY2VVUkkgPSB1cmk7Ci0gICAg
fQotCi0gICAgdm9pZCBzZXRFeHBlY3RlZE5ld1Jlc291cmNlVVJJQWZ0ZXJSZWRpcmVjdGlvbihj
b25zdCBDU3RyaW5nJiB1cmkpCi0gICAgewotICAgICAgICBtX2V4cGVjdGVkTmV3UmVzb3VyY2VV
UklBZnRlclJlZGlyZWN0aW9uID0gdXJpOwotICAgIH0KLQotICAgIENTdHJpbmcgbV9leHBlY3Rl
ZE5ld1Jlc291cmNlVVJJOwotICAgIENTdHJpbmcgbV9leHBlY3RlZENhbmNlbGxlZFJlc291cmNl
VVJJOwotICAgIENTdHJpbmcgbV9leHBlY3RlZE5ld1Jlc291cmNlVVJJQWZ0ZXJSZWRpcmVjdGlv
bjsKLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJSZXNvdXJjZVNlbmRSZXF1ZXN0KFNlbmRSZXF1
ZXN0VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5zZXRFeHBlY3RlZE5l
d1Jlc291cmNlVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9qYXZhc2NyaXB0LmpzIikpOwot
ICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgicmVsYXRpdmUtamF2YXNj
cmlwdC5odG1sIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5p
c2hlZCgpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fcmVzb3VyY2UpOwotCi0gICAgVmVjdG9yPFNp
bmdsZVJlc291cmNlTG9hZFRlc3Q6OkxvYWRFdmVudHM+JiBldmVudHMgPSB0ZXN0LT5tX2xvYWRF
dmVudHM7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCA1KTsKLSAgICBn
X2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6U3Rh
cnRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIFNpbmdsZVJlc291cmNl
TG9hZFRlc3Q6OlNlbnRSZXF1ZXN0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9
PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6UmVjZWl2ZWRSZXNwb25zZSk7Ci0gICAgZ19hc3Nl
cnRfY21waW50KGV2ZW50c1szXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlJlY2VpdmVk
RGF0YSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1s0XSwgPT0sIFNpbmdsZVJlc291cmNl
TG9hZFRlc3Q6OkZpbmlzaGVkKTsKLSAgICBldmVudHMuY2xlYXIoKTsKLQotICAgIC8vIENhbmNl
bCByZXF1ZXN0LgotICAgIHRlc3QtPnNldEV4cGVjdGVkQ2FuY2VsbGVkUmVzb3VyY2VVUkkoa1Nl
cnZlci0+Z2V0VVJJRm9yUGF0aCgiL2NhbmNlbC10aGlzLmpzIikpOwotICAgIHRlc3QtPmxvYWRV
Ukkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3Jlc291cmNlLXRvLWNhbmNlbC5odG1sIikuZGF0
YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZCgpOwotICAgIGdf
YXNzZXJ0KHRlc3QtPm1fcmVzb3VyY2UpOwotCi0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5z
aXplKCksID09LCAzKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgU2luZ2xl
UmVzb3VyY2VMb2FkVGVzdDo6U3RhcnRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sx
XSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OkZhaWxlZCk7Ci0gICAgZ19hc3NlcnRfY21w
aW50KGV2ZW50c1syXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OkZpbmlzaGVkKTsKLSAg
ICBldmVudHMuY2xlYXIoKTsKLQotICAgIC8vIFVSSSBjaGFuZ2VkIGFmdGVyIGEgcmVkaXJlY3Qu
Ci0gICAgdGVzdC0+c2V0RXhwZWN0ZWROZXdSZXNvdXJjZVVSSShrU2VydmVyLT5nZXRVUklGb3JQ
YXRoKCIvcmVkaXJlY3RlZC5qcyIpKTsKLSAgICB0ZXN0LT5zZXRFeHBlY3RlZE5ld1Jlc291cmNl
VVJJQWZ0ZXJSZWRpcmVjdGlvbihrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvamF2YXNjcmlwdC5q
cyIpKTsKLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoInJlZGlyZWN0
ZWQtamF2YXNjcmlwdC5odG1sIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxSZXNvdXJj
ZUxvYWRGaW5pc2hlZCgpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fcmVzb3VyY2UpOwotCi0gICAg
Z19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCA2KTsKLSAgICBnX2Fzc2VydF9jbXBp
bnQoZXZlbnRzWzBdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6U3RhcnRlZCk7Ci0gICAg
Z19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlNl
bnRSZXF1ZXN0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgU2luZ2xlUmVz
b3VyY2VMb2FkVGVzdDo6UmVkaXJlY3RlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sz
XSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOwotICAgIGdf
YXNzZXJ0X2NtcGludChldmVudHNbNF0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpSZWNl
aXZlZERhdGEpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbNV0sID09LCBTaW5nbGVSZXNv
dXJjZUxvYWRUZXN0OjpGaW5pc2hlZCk7Ci0gICAgZXZlbnRzLmNsZWFyKCk7Ci0KLSAgICAvLyBD
YW5jZWwgYWZ0ZXIgYSByZWRpcmVjdC4KLSAgICB0ZXN0LT5zZXRFeHBlY3RlZE5ld1Jlc291cmNl
VVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9yZWRpcmVjdGVkLXRvLWNhbmNlbC5qcyIpKTsK
LSAgICB0ZXN0LT5zZXRFeHBlY3RlZENhbmNlbGxlZFJlc291cmNlVVJJKGtTZXJ2ZXItPmdldFVS
SUZvclBhdGgoIi9yZWRpcmVjdGVkLXRvLWNhbmNlbC5qcyIpKTsKLSAgICB0ZXN0LT5sb2FkVVJJ
KGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9yZWRpcmVjdGVkLXRvLWNhbmNlbC5odG1sIikuZGF0
YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZCgpOwotICAgIGdf
YXNzZXJ0KHRlc3QtPm1fcmVzb3VyY2UpOwotCi0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5z
aXplKCksID09LCA0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgU2luZ2xl
UmVzb3VyY2VMb2FkVGVzdDo6U3RhcnRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sx
XSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlNlbnRSZXF1ZXN0KTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6RmFpbGVkKTsK
LSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzNdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVz
dDo6RmluaXNoZWQpOwotICAgIGV2ZW50cy5jbGVhcigpOwotfQotCi1zdGF0aWMgdm9pZCBhZGRD
YWNoZUhUVFBIZWFkZXJzVG9SZXNwb25zZShTb3VwTWVzc2FnZSogbWVzc2FnZSkKLXsKLSAgICAv
LyBUaGUgYWN0dWFsIGRhdGUgZG9lc24ndCByZWFsbHkgbWF0dGVyLgotICAgIFNvdXBEYXRlKiBz
b3VwRGF0ZSA9IHNvdXBfZGF0ZV9uZXdfZnJvbV9ub3coMCk7Ci0gICAgR093blB0cjxjaGFyPiBk
YXRlKHNvdXBfZGF0ZV90b19zdHJpbmcoc291cERhdGUsIFNPVVBfREFURV9IVFRQKSk7Ci0gICAg
c291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJM
YXN0LU1vZGlmaWVkIiwgZGF0ZS5nZXQoKSk7Ci0gICAgc291cF9kYXRlX2ZyZWUoc291cERhdGUp
OwotICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9oZWFk
ZXJzLCAiQ2FjaGUtY29udHJvbCIsICJwdWJsaWMsIG1heC1hZ2U9MzE1MzYwMDAiKTsKLSAgICBz
b3VwRGF0ZSA9IHNvdXBfZGF0ZV9uZXdfZnJvbV9ub3coMzYwMCk7Ci0gICAgZGF0ZS5zZXQoc291
cF9kYXRlX3RvX3N0cmluZyhzb3VwRGF0ZSwgU09VUF9EQVRFX0hUVFApKTsKLSAgICBzb3VwX21l
c3NhZ2VfaGVhZGVyc19hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIkV4cGlyZXMi
LCBkYXRlLmdldCgpKTsKLSAgICBzb3VwX2RhdGVfZnJlZShzb3VwRGF0ZSk7Ci19Ci0KLXN0YXRp
YyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1l
c3NhZ2UsIGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqLCBTb3VwQ2xpZW50Q29udGV4dCos
IGdwb2ludGVyKQotewotICAgIGlmIChtZXNzYWdlLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VU
KSB7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVT
X05PVF9JTVBMRU1FTlRFRCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzb3VwX21l
c3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7Ci0KLSAgICBpZiAoc291
cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X29uZShtZXNzYWdlLT5yZXF1ZXN0X2hlYWRlcnMsICJJZi1N
b2RpZmllZC1TaW5jZSIpKSB7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3Nh
Z2UsIFNPVVBfU1RBVFVTX05PVF9NT0RJRklFRCk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5
X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvIikpIHsKLSAgICAgICAgc291cF9tZXNz
YWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJ
Qywga0luZGV4SHRtbCwgc3RybGVuKGtJbmRleEh0bWwpKTsKLSAgICB9IGVsc2UgaWYgKGdfc3Ry
X2VxdWFsKHBhdGgsICIvamF2YXNjcmlwdC5odG1sIikpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0
IGNoYXIqIGphdmFzY3JpcHRIdG1sID0gIjxodG1sPjxoZWFkPjxzY3JpcHQgbGFuZ3VhZ2U9J2ph
dmFzY3JpcHQnIHNyYz0nL2phdmFzY3JpcHQuanMnPjwvc2NyaXB0PjwvaGVhZD48Ym9keT48L2Jv
ZHk+PC9odG1sPiI7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5y
ZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGphdmFzY3JpcHRIdG1sLCBzdHJsZW4o
amF2YXNjcmlwdEh0bWwpKTsKLSAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvaW1h
Z2UuaHRtbCIpKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBpbWFnZUhUTUwgPSAiPGh0
bWw+PGJvZHk+PGltZyBzcmM9Jy9ibGFuay5pY28nPjwvaW1nPjwvYm9keT48L2h0bWw+IjsKLSAg
ICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNP
VVBfTUVNT1JZX1NUQVRJQywgaW1hZ2VIVE1MLCBzdHJsZW4oaW1hZ2VIVE1MKSk7Ci0gICAgfSBl
bHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3JlZGlyZWN0ZWQtY3NzLmh0bWwiKSkgewotICAg
ICAgICBzdGF0aWMgY29uc3QgY2hhciogcmVkaXJlY3RlZENTU0h0bWwgPSAiPGh0bWw+PGhlYWQ+
PGxpbmsgcmVsPSdzdHlsZXNoZWV0JyBocmVmPScvcmVkaXJlY3RlZC5jc3MnIHR5cGU9J3RleHQv
Y3NzJz48L2hlYWQ+PGJvZHk+PC9odG1sPiI7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2Fw
cGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIHJlZGlyZWN0
ZWRDU1NIdG1sLCBzdHJsZW4ocmVkaXJlY3RlZENTU0h0bWwpKTsKLSAgICB9IGVsc2UgaWYgKGdf
c3RyX2VxdWFsKHBhdGgsICIvaW52YWxpZC1jc3MuaHRtbCIpKSB7Ci0gICAgICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBpbnZhbGlkQ1NTSHRtbCA9ICI8aHRtbD48aGVhZD48bGluayByZWw9J3N0eWxl
c2hlZXQnIGhyZWY9Jy9pbnZhbGlkLmNzcycgdHlwZT0ndGV4dC9jc3MnPjwvaGVhZD48Ym9keT48
L2h0bWw+IjsKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3Bv
bnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgaW52YWxpZENTU0h0bWwsIHN0cmxlbihpbnZh
bGlkQ1NTSHRtbCkpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9zaW1wbGUt
c3R5bGUtY3NzLmh0bWwiKSkgewotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogc2ltcGxlU3R5
bGVDU1NIdG1sID0gIjxodG1sPjxoZWFkPjxsaW5rIHJlbD0nc3R5bGVzaGVldCcgaHJlZj0nL3Np
bXBsZS1zdHlsZS5jc3MnIHR5cGU9J3RleHQvY3NzJz48L2hlYWQ+PGJvZHk+PC9odG1sPiI7Ci0g
ICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBT
T1VQX01FTU9SWV9TVEFUSUMsIHNpbXBsZVN0eWxlQ1NTSHRtbCwgc3RybGVuKHNpbXBsZVN0eWxl
Q1NTSHRtbCkpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9zdHlsZS5jc3Mi
KSkgewotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2Vf
Ym9keSwgU09VUF9NRU1PUllfU1RBVElDLCBrU3R5bGVDU1MsIHN0cmxlbihrU3R5bGVDU1MpKTsK
LSAgICAgICAgYWRkQ2FjaGVIVFRQSGVhZGVyc1RvUmVzcG9uc2UobWVzc2FnZSk7Ci0gICAgICAg
IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAi
Q29udGVudC1UeXBlIiwgInRleHQvY3NzIik7Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChw
YXRoLCAiL2phdmFzY3JpcHQuanMiKSkgewotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBl
bmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBrSmF2YXNjcmlw
dCwgc3RybGVuKGtKYXZhc2NyaXB0KSk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2Fw
cGVuZChtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiQ29udGVudC1UeXBlIiwgInRleHQvamF2
YXNjcmlwdCIpOwotICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobWVzc2FnZS0+
cmVzcG9uc2VfaGVhZGVycywgIkNvbnRlbnQtRGlzcG9zaXRpb24iLCAiZmlsZW5hbWU9SmF2YVNj
cmlwdC5qcyIpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9yZWxhdGl2ZS1q
YXZhc2NyaXB0Lmh0bWwiKSkgewotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogamF2YXNjcmlw
dFJlbGF0aXZlSFRNTCA9ICI8aHRtbD48aGVhZD48c2NyaXB0IGxhbmd1YWdlPSdqYXZhc2NyaXB0
JyBzcmM9J3JlbW92ZS10aGlzL2phdmFzY3JpcHQuanMnPjwvc2NyaXB0PjwvaGVhZD48Ym9keT48
L2JvZHk+PC9odG1sPiI7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdl
LT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGphdmFzY3JpcHRSZWxhdGl2ZUhU
TUwsIHN0cmxlbihqYXZhc2NyaXB0UmVsYXRpdmVIVE1MKSk7Ci0gICAgfSBlbHNlIGlmIChnX3N0
cl9lcXVhbChwYXRoLCAiL3Jlc291cmNlLXRvLWNhbmNlbC5odG1sIikpIHsKLSAgICAgICAgc3Rh
dGljIGNvbnN0IGNoYXIqIHJlc291cmNlVG9DYW5jZWxIVE1MID0gIjxodG1sPjxoZWFkPjxzY3Jp
cHQgbGFuZ3VhZ2U9J2phdmFzY3JpcHQnIHNyYz0nY2FuY2VsLXRoaXMuanMnPjwvc2NyaXB0Pjwv
aGVhZD48Ym9keT48L2JvZHk+PC9odG1sPiI7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2Fw
cGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIHJlc291cmNl
VG9DYW5jZWxIVE1MLCBzdHJsZW4ocmVzb3VyY2VUb0NhbmNlbEhUTUwpKTsKLSAgICB9IGVsc2Ug
aWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvcmVkaXJlY3RlZC1qYXZhc2NyaXB0Lmh0bWwiKSkgewot
ICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogamF2YXNjcmlwdFJlbGF0aXZlSFRNTCA9ICI8aHRt
bD48aGVhZD48c2NyaXB0IGxhbmd1YWdlPSdqYXZhc2NyaXB0JyBzcmM9Jy9yZWRpcmVjdGVkLmpz
Jz48L3NjcmlwdD48L2hlYWQ+PGJvZHk+PC9ib2R5PjwvaHRtbD4iOwotICAgICAgICBzb3VwX21l
c3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RB
VElDLCBqYXZhc2NyaXB0UmVsYXRpdmVIVE1MLCBzdHJsZW4oamF2YXNjcmlwdFJlbGF0aXZlSFRN
TCkpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9yZWRpcmVjdGVkLXRvLWNh
bmNlbC5odG1sIikpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGphdmFzY3JpcHRSZWxh
dGl2ZUhUTUwgPSAiPGh0bWw+PGhlYWQ+PHNjcmlwdCBsYW5ndWFnZT0namF2YXNjcmlwdCcgc3Jj
PScvcmVkaXJlY3RlZC10by1jYW5jZWwuanMnPjwvc2NyaXB0PjwvaGVhZD48Ym9keT48L2JvZHk+
PC9odG1sPiI7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNw
b25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGphdmFzY3JpcHRSZWxhdGl2ZUhUTUwsIHN0
cmxlbihqYXZhc2NyaXB0UmVsYXRpdmVIVE1MKSk7Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9lcXVh
bChwYXRoLCAiL2JsYW5rLmljbyIpKSB7Ci0gICAgICAgIEdPd25QdHI8Y2hhcj4gZmlsZVBhdGgo
Z19idWlsZF9maWxlbmFtZShUZXN0OjpnZXRXZWJLaXQxVGVzdFJlc291Y2VzRGlyKCkuZGF0YSgp
LCBwYXRoLCBOVUxMKSk7Ci0gICAgICAgIGNoYXIqIGNvbnRlbnRzOwotICAgICAgICBnc2l6ZSBj
b250ZW50c0xlbmd0aDsKLSAgICAgICAgZ19maWxlX2dldF9jb250ZW50cyhmaWxlUGF0aC5nZXQo
KSwgJmNvbnRlbnRzLCAmY29udGVudHNMZW5ndGgsIDApOwotICAgICAgICBzb3VwX21lc3NhZ2Vf
Ym9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgY29u
dGVudHMsIGNvbnRlbnRzTGVuZ3RoKTsKLSAgICAgICAgYWRkQ2FjaGVIVFRQSGVhZGVyc1RvUmVz
cG9uc2UobWVzc2FnZSk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChtZXNz
YWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiQ29udGVudC1UeXBlIiwgImltYWdlL3ZuZC5taWNyb3Nv
ZnQuaWNvbiIpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9zaW1wbGUtc3R5
bGUuY3NzIikpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHNpbXBsZUNTUyA9Ci0gICAg
ICAgICAgICAiYm9keSB7IgotICAgICAgICAgICAgIiAgICBtYXJnaW46IDBweDsiCi0gICAgICAg
ICAgICAiICAgIHBhZGRpbmc6IDBweDsiCi0gICAgICAgICAgICAifSI7Ci0gICAgICAgIHNvdXBf
bWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9T
VEFUSUMsIHNpbXBsZUNTUywgc3RybGVuKHNpbXBsZUNTUykpOwotICAgICAgICBzb3VwX21lc3Nh
Z2VfaGVhZGVyc19hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIkNvbnRlbnQtVHlw
ZSIsICJ0ZXh0L2NzcyIpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9yZWRp
cmVjdGVkLmNzcyIpKSB7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2Us
IFNPVVBfU1RBVFVTX01PVkVEX1BFUk1BTkVOVExZKTsKLSAgICAgICAgc291cF9tZXNzYWdlX2hl
YWRlcnNfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJMb2NhdGlvbiIsICIvc2lt
cGxlLXN0eWxlLmNzcyIpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9yZWRp
cmVjdGVkLmpzIikpIHsKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwg
U09VUF9TVEFUVVNfTU9WRURfUEVSTUFORU5UTFkpOwotICAgICAgICBzb3VwX21lc3NhZ2VfaGVh
ZGVyc19hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIkxvY2F0aW9uIiwgIi9yZW1v
dmUtdGhpcy9qYXZhc2NyaXB0LmpzIik7Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRo
LCAiL3JlZGlyZWN0ZWQtdG8tY2FuY2VsLmpzIikpIHsKLSAgICAgICAgc291cF9tZXNzYWdlX3Nl
dF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTU9WRURfUEVSTUFORU5UTFkpOwotICAgICAg
ICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywg
IkxvY2F0aW9uIiwgIi9jYW5jZWwtdGhpcy5qcyIpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1
YWwocGF0aCwgIi9pbnZhbGlkLmNzcyIpKQotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1
cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19DQU5UX0NPTk5FQ1QpOwotICAgIGVsc2UKLSAgICAgICAg
c291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0ZPVU5EKTsK
LSAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsK
LX0KLQotdm9pZCBiZWZvcmVBbGwoKQotewotICAgIGtTZXJ2ZXIgPSBuZXcgV2ViS2l0VGVzdFNl
cnZlcigpOwotICAgIGtTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFjayk7Ci0KLSAgICB3ZWJraXRf
d2ViX2NvbnRleHRfc2V0X3dlYl9leHRlbnNpb25zX2RpcmVjdG9yeSh3ZWJraXRfd2ViX2NvbnRl
eHRfZ2V0X2RlZmF1bHQoKSwgV0VCS0lUX1RFU1RfV0VCX0VYVEVOU0lPTlNfRElSKTsKLQotICAg
IFJlc291cmNlc1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJyZXNvdXJjZXMiLCB0ZXN0V2Vi
Vmlld1Jlc291cmNlcyk7Ci0gICAgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6YWRkKCJXZWJLaXRX
ZWJSZXNvdXJjZSIsICJsb2FkaW5nIiwgdGVzdFdlYlJlc291cmNlTG9hZGluZyk7Ci0gICAgU2lu
Z2xlUmVzb3VyY2VMb2FkVGVzdDo6YWRkKCJXZWJLaXRXZWJSZXNvdXJjZSIsICJyZXNwb25zZSIs
IHRlc3RXZWJSZXNvdXJjZVJlc3BvbnNlKTsKLSAgICBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0Ojph
ZGQoIldlYktpdFdlYlJlc291cmNlIiwgIm1pbWUtdHlwZSIsIHRlc3RXZWJSZXNvdXJjZU1pbWVU
eXBlKTsKLSAgICBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjphZGQoIldlYktpdFdlYlJlc291cmNl
IiwgInN1Z2dlc3RlZC1maWxlbmFtZSIsIHRlc3RXZWJSZXNvdXJjZVN1Z2dlc3RlZEZpbGVuYW1l
KTsKLSAgICBSZXNvdXJjZVVSSVRyYWNraW5nVGVzdDo6YWRkKCJXZWJLaXRXZWJSZXNvdXJjZSIs
ICJhY3RpdmUtdXJpIiwgdGVzdFdlYlJlc291cmNlQWN0aXZlVVJJKTsKLSAgICBSZXNvdXJjZXNU
ZXN0OjphZGQoIldlYktpdFdlYlJlc291cmNlIiwgImdldC1kYXRhIiwgdGVzdFdlYlJlc291cmNl
R2V0RGF0YSk7Ci0gICAgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3
IiwgImhpc3RvcnktY2FjaGUiLCB0ZXN0V2ViVmlld1Jlc291cmNlc0hpc3RvcnlDYWNoZSk7Ci0g
ICAgU2VuZFJlcXVlc3RUZXN0OjphZGQoIldlYktpdFdlYlBhZ2UiLCAic2VuZC1yZXF1ZXN0Iiwg
dGVzdFdlYlJlc291cmNlU2VuZFJlcXVlc3QpOwotfQotCi12b2lkIGFmdGVyQWxsKCkKLXsKLSAg
ICBkZWxldGUga1NlcnZlcjsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL1Rlc3RTU0wuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvVGVzdFNTTC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUz
MTgwYzUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvVGVzdFNTTC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyOTAgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNs
dWRlICJMb2FkVHJhY2tpbmdUZXN0LmgiCi0jaW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5oIgot
I2luY2x1ZGUgPGd0ay9ndGsuaD4KLQotc3RhdGljIFdlYktpdFRlc3RTZXJ2ZXIqIGtIdHRwc1Nl
cnZlcjsKLXN0YXRpYyBXZWJLaXRUZXN0U2VydmVyKiBrSHR0cFNlcnZlcjsKLQotc3RhdGljIGNv
bnN0IGNoYXIqIGluZGV4SFRNTCA9ICI8aHRtbD48Ym9keT5UZXN0aW5nIFdlYktpdDJHVEsrIFNT
TDwvYm9keT48L2h0bWxsPiI7Ci1zdGF0aWMgY29uc3QgY2hhciogaW5zZWN1cmVDb250ZW50SFRN
TCA9ICI8aHRtbD48c2NyaXB0IHNyYz1cIiVzXCI+PC9zY3JpcHQ+PGJvZHk+PHA+VGV4dCArIGlt
YWdlIDxpbWcgc3JjPVwiJXNcIiBhbGlnbj1cInJpZ2h0XCIvPjwvcD48L2JvZHk+PC9odG1sPiI7
Ci1zdGF0aWMgY29uc3QgY2hhciBUTFNFeHBlY3RlZFN1Y2Nlc3NUaXRsZVtdID0gIldlYktpdDJH
dGsrIFRMUyBwZXJtaXNzaW9uIHRlc3QiOwotc3RhdGljIGNvbnN0IGNoYXIgVExTU3VjY2Vzc0hU
TUxTdHJpbmdbXSA9ICI8aHRtbD48aGVhZD48dGl0bGU+V2ViS2l0Mkd0aysgVExTIHBlcm1pc3Np
b24gdGVzdDwvdGl0bGU+PC9oZWFkPjxib2R5PjwvYm9keT48L2h0bWw+IjsKLQotY2xhc3MgU1NM
VGVzdDogcHVibGljIExvYWRUcmFja2luZ1Rlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJQl9U
RVNUX0ZJWFRVUkUoU1NMVGVzdCk7Ci0KLSAgICBTU0xUZXN0KCkKLSAgICAgICAgOiBtX3Rsc0Vy
cm9ycyhzdGF0aWNfY2FzdDxHVGxzQ2VydGlmaWNhdGVGbGFncz4oMCkpCi0gICAgewotICAgIH0K
LQotICAgIHZpcnR1YWwgdm9pZCBwcm92aXNpb25hbExvYWRGYWlsZWQoY29uc3QgZ2NoYXIqIGZh
aWxpbmdVUkksIEdFcnJvciogZXJyb3IpCi0gICAgewotICAgICAgICBnX2Fzc2VydF9lcnJvcihl
cnJvciwgU09VUF9IVFRQX0VSUk9SLCBTT1VQX1NUQVRVU19TU0xfRkFJTEVEKTsKLSAgICAgICAg
TG9hZFRyYWNraW5nVGVzdDo6cHJvdmlzaW9uYWxMb2FkRmFpbGVkKGZhaWxpbmdVUkksIGVycm9y
KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgbG9hZENvbW1pdHRlZCgpCi0gICAgewotICAg
ICAgICBHVGxzQ2VydGlmaWNhdGUqIGNlcnRpZmljYXRlID0gMDsKLSAgICAgICAgd2Via2l0X3dl
Yl92aWV3X2dldF90bHNfaW5mbyhtX3dlYlZpZXcsICZjZXJ0aWZpY2F0ZSwgJm1fdGxzRXJyb3Jz
KTsKLSAgICAgICAgbV9jZXJ0aWZpY2F0ZSA9IGNlcnRpZmljYXRlOwotICAgICAgICBMb2FkVHJh
Y2tpbmdUZXN0Ojpsb2FkQ29tbWl0dGVkKCk7Ci0gICAgfQotCi0gICAgdm9pZCB3YWl0VW50aWxM
b2FkRmluaXNoZWQoKQotICAgIHsKLSAgICAgICAgbV9jZXJ0aWZpY2F0ZSA9IDA7Ci0gICAgICAg
IG1fdGxzRXJyb3JzID0gc3RhdGljX2Nhc3Q8R1Rsc0NlcnRpZmljYXRlRmxhZ3M+KDApOwotICAg
ICAgICBMb2FkVHJhY2tpbmdUZXN0Ojp3YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICB9Ci0K
LSAgICBHUmVmUHRyPEdUbHNDZXJ0aWZpY2F0ZT4gbV9jZXJ0aWZpY2F0ZTsKLSAgICBHVGxzQ2Vy
dGlmaWNhdGVGbGFncyBtX3Rsc0Vycm9yczsKLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RTU0woU1NM
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5sb2FkVVJJKGtIdHRwc1Nl
cnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9h
ZEZpbmlzaGVkKCk7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV9jZXJ0aWZpY2F0ZSk7Ci0gICAgLy8g
V2UgYWx3YXlzIGV4cGVjdCBlcnJvcnMgYmVjYXVzZSB3ZSBhcmUgdXNpbmcgYSBzZWxmLXNpZ25l
ZCBjZXJ0aWZpY2F0ZSwKLSAgICAvLyBidXQgb25seSBHX1RMU19DRVJUSUZJQ0FURV9VTktOT1dO
X0NBIGZsYWdzIHNob3VsZCBiZSBwcmVzZW50LgotICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGxzRXJy
b3JzKTsKLSAgICBnX2Fzc2VydF9jbXB1aW50KHRlc3QtPm1fdGxzRXJyb3JzLCA9PSwgR19UTFNf
Q0VSVElGSUNBVEVfVU5LTk9XTl9DQSk7Ci0KLSAgICAvLyBOb24gSFRUUFMgbG9hZHMgc2hvdWxk
bid0IGhhdmUgYSBjZXJ0aWZpY2F0ZSBub3IgZXJyb3JzLgotICAgIHRlc3QtPmxvYWRIdG1sKGlu
ZGV4SFRNTCwgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgZ19h
c3NlcnQoIXRlc3QtPm1fY2VydGlmaWNhdGUpOwotICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX3Rsc0Vy
cm9ycyk7Ci19Ci0KLWNsYXNzIEluc2VjdXJlQ29udGVudFRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVz
dCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShJbnNlY3VyZUNvbnRlbnRU
ZXN0KTsKLQotICAgIEluc2VjdXJlQ29udGVudFRlc3QoKQotICAgICAgICA6IG1faW5zZWN1cmVD
b250ZW50UnVuKGZhbHNlKQotICAgICAgICAsIG1faW5zZWN1cmVDb250ZW50RGlzcGxheWVkKGZh
bHNlKQotICAgIHsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJpbnNlY3Vy
ZS1jb250ZW50LWRldGVjdGVkIiwgR19DQUxMQkFDSyhpbnNlY3VyZUNvbnRlbnREZXRlY3RlZENh
bGxiYWNrKSwgdGhpcyk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgaW5zZWN1cmVDb250ZW50
RGV0ZWN0ZWRDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRJbnNlY3VyZUNv
bnRlbnRFdmVudCBldmVudCwgSW5zZWN1cmVDb250ZW50VGVzdCogdGVzdCkKLSAgICB7Ci0gICAg
ICAgIGdfYXNzZXJ0KHdlYlZpZXcgPT0gdGVzdC0+bV93ZWJWaWV3KTsKLQotICAgICAgICBpZiAo
ZXZlbnQgPT0gV0VCS0lUX0lOU0VDVVJFX0NPTlRFTlRfUlVOKQotICAgICAgICAgICAgdGVzdC0+
bV9pbnNlY3VyZUNvbnRlbnRSdW4gPSB0cnVlOwotCi0gICAgICAgIGlmIChldmVudCA9PSBXRUJL
SVRfSU5TRUNVUkVfQ09OVEVOVF9ESVNQTEFZRUQpCi0gICAgICAgICAgICB0ZXN0LT5tX2luc2Vj
dXJlQ29udGVudERpc3BsYXllZCA9IHRydWU7Ci0gICAgfQotCi0gICAgYm9vbCBtX2luc2VjdXJl
Q29udGVudFJ1bjsKLSAgICBib29sIG1faW5zZWN1cmVDb250ZW50RGlzcGxheWVkOwotfTsKLQot
c3RhdGljIHZvaWQgdGVzdEluc2VjdXJlQ29udGVudChJbnNlY3VyZUNvbnRlbnRUZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxvYWRVUkkoa0h0dHBzU2VydmVyLT5nZXRV
UklGb3JQYXRoKCIvaW5zZWN1cmUtY29udGVudC8iKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRV
bnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3NlcnQodGVzdC0+bV9pbnNlY3VyZUNvbnRl
bnRSdW4pOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1faW5zZWN1cmVDb250ZW50RGlzcGxheWVkKTsK
LX0KLQotc3RhdGljIHZvaWQgdGVzdFRMU0Vycm9yc1BvbGljeShTU0xUZXN0KiB0ZXN0LCBnY29u
c3Rwb2ludGVyKQotewotICAgIFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQgPSB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X2NvbnRleHQodGVzdC0+bV93ZWJWaWV3KTsKLSAgICAvLyBUTFMgZXJyb3JzIGFy
ZSBpZ25vcmVkIGJ5IGRlZmF1bHQuCi0gICAgZ19hc3NlcnQod2Via2l0X3dlYl9jb250ZXh0X2dl
dF90bHNfZXJyb3JzX3BvbGljeShjb250ZXh0KSA9PSBXRUJLSVRfVExTX0VSUk9SU19QT0xJQ1lf
SUdOT1JFKTsKLSAgICB0ZXN0LT5sb2FkVVJJKGtIdHRwc1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgi
LyIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgZ19h
c3NlcnQoIXRlc3QtPm1fbG9hZEZhaWxlZCk7Ci0KLSAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0
X3Rsc19lcnJvcnNfcG9saWN5KGNvbnRleHQsIFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9GQUlM
KTsKLSAgICB0ZXN0LT5sb2FkVVJJKGtIdHRwc1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRh
dGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgZ19hc3NlcnQo
dGVzdC0+bV9sb2FkRmFpbGVkKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX2xvYWRFdmVudHMuY29u
dGFpbnMoTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkRmFpbGVkKSk7Ci0gICAgZ19h
c3NlcnQoIXRlc3QtPm1fbG9hZEV2ZW50cy5jb250YWlucyhMb2FkVHJhY2tpbmdUZXN0OjpMb2Fk
Q29tbWl0dGVkKSk7Ci19Ci0KLWNsYXNzIFRMU0Vycm9yc1Rlc3Q6IHB1YmxpYyBTU0xUZXN0IHsK
LXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFRMU0Vycm9yc1Rlc3QpOwotCi0g
ICAgVExTRXJyb3JzVGVzdCgpCi0gICAgewotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2Vi
VmlldywgImxvYWQtZmFpbGVkLXdpdGgtdGxzLWVycm9ycyIsIEdfQ0FMTEJBQ0socnVuTG9hZEZh
aWxlZFdpdGhUTFNFcnJvcnNDYWxsYmFjayksIHRoaXMpOwotICAgIH0KLQotICAgIH5UTFNFcnJv
cnNUZXN0KCkKLSAgICB7Ci0gICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0
Y2hlZChtX3dlYlZpZXcsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOwot
ICAgICAgICBpZiAobV9jZXJ0aWZpY2F0ZUluZm8pCi0gICAgICAgICAgICB3ZWJraXRfY2VydGlm
aWNhdGVfaW5mb19mcmVlKG1fY2VydGlmaWNhdGVJbmZvKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMg
Z2Jvb2xlYW4gcnVuTG9hZEZhaWxlZFdpdGhUTFNFcnJvcnNDYWxsYmFjayhXZWJLaXRXZWJWaWV3
KiwgV2ViS2l0Q2VydGlmaWNhdGVJbmZvKiBpbmZvLCBjb25zdCBjaGFyKiBob3N0LCBUTFNFcnJv
cnNUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+cnVuTG9hZEZhaWxlZFdpdGhUTFNF
cnJvcnMoaW5mbywgaG9zdCk7Ci0gICAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQotICAgIHZv
aWQgcnVuTG9hZEZhaWxlZFdpdGhUTFNFcnJvcnMoV2ViS2l0Q2VydGlmaWNhdGVJbmZvKiBpbmZv
LCBjb25zdCBjaGFyKiBob3N0KQotICAgIHsKLSAgICAgICAgaWYgKG1fY2VydGlmaWNhdGVJbmZv
KQotICAgICAgICAgICAgd2Via2l0X2NlcnRpZmljYXRlX2luZm9fZnJlZShtX2NlcnRpZmljYXRl
SW5mbyk7Ci0gICAgICAgIG1fY2VydGlmaWNhdGVJbmZvID0gd2Via2l0X2NlcnRpZmljYXRlX2lu
Zm9fY29weShpbmZvKTsKLSAgICAgICAgbV9ob3N0LnNldChnX3N0cmR1cChob3N0KSk7Ci0gICAg
ICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgdm9pZCB3YWl0
VW50aWxMb2FkRmFpbGVkV2l0aFRMU0Vycm9ycygpCi0gICAgewotICAgICAgICBnX21haW5fbG9v
cF9ydW4obV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgV2ViS2l0Q2VydGlmaWNhdGVJbmZvKiBj
ZXJ0aWZpY2F0ZUluZm8oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fY2VydGlmaWNhdGVJbmZv
OwotICAgIH0KLQotICAgIGNvbnN0IGNoYXIqIGhvc3QoKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1faG9zdC5nZXQoKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgV2ViS2l0Q2VydGlmaWNhdGVJ
bmZvKiBtX2NlcnRpZmljYXRlSW5mbzsKLSAgICBHT3duUHRyPGNoYXI+IG1faG9zdDsKLX07Ci0K
LXN0YXRpYyB2b2lkIHRlc3RMb2FkRmFpbGVkV2l0aFRMU0Vycm9ycyhUTFNFcnJvcnNUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQgPSB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQodGVzdC0+bV93ZWJWaWV3KTsKLSAgICB3ZWJraXRf
d2ViX2NvbnRleHRfc2V0X3Rsc19lcnJvcnNfcG9saWN5KGNvbnRleHQsIFdFQktJVF9UTFNfRVJS
T1JTX1BPTElDWV9GQUlMKTsKLQotICAgIC8vIFRoZSBsb2FkLWZhaWxlZC13aXRoLXRscy1lcnJv
cnMgc2lnbmFsIHNob3VsZCBiZSBlbWl0dGVkIHdoZW4gdGhlcmUgaXMgYSBUTFMgZmFpbHVyZS4K
LSAgICB0ZXN0LT5sb2FkVVJJKGtIdHRwc1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3Rlc3QtdGxz
LyIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZhaWxlZFdpdGhUTFNFcnJvcnMo
KTsKLSAgICAvLyBUZXN0IHRoZSBXZWJLaXRDZXJ0aWZpY2F0ZUluZm8gQVBJLgotICAgIGdfYXNz
ZXJ0KEdfSVNfVExTX0NFUlRJRklDQVRFKHdlYmtpdF9jZXJ0aWZpY2F0ZV9pbmZvX2dldF90bHNf
Y2VydGlmaWNhdGUodGVzdC0+Y2VydGlmaWNhdGVJbmZvKCkpKSk7Ci0gICAgZ19hc3NlcnRfY21w
dWludCh3ZWJraXRfY2VydGlmaWNhdGVfaW5mb19nZXRfdGxzX2Vycm9ycyh0ZXN0LT5jZXJ0aWZp
Y2F0ZUluZm8oKSksID09LCBHX1RMU19DRVJUSUZJQ0FURV9VTktOT1dOX0NBKTsKLSAgICBnX2Fz
c2VydF9jbXBzdHIodGVzdC0+aG9zdCgpLCA9PSwgc291cF91cmlfZ2V0X2hvc3Qoa0h0dHBzU2Vy
dmVyLT5iYXNlVVJJKCkpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRz
WzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7Ci0gICAg
Z19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rl
c3Q6OkxvYWRGaW5pc2hlZCk7Ci0KLSAgICAvLyBUZXN0IGFsbG93aW5nIGFuIGV4Y2VwdGlvbiBm
b3IgdGhpcyBjZXJ0aWZpY2F0ZSBvbiB0aGlzIGhvc3QuCi0gICAgd2Via2l0X3dlYl9jb250ZXh0
X2FsbG93X3Rsc19jZXJ0aWZpY2F0ZV9mb3JfaG9zdChjb250ZXh0LCB0ZXN0LT5jZXJ0aWZpY2F0
ZUluZm8oKSwgdGVzdC0+aG9zdCgpKTsKLSAgICAvLyBUaGUgcGFnZSBzaG91bGQgbm93IGxvYWQg
d2l0aG91dCBlcnJvcnMuCi0gICAgdGVzdC0+bG9hZFVSSShrSHR0cHNTZXJ2ZXItPmdldFVSSUZv
clBhdGgoIi90ZXN0LXRscy8iKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5p
c2hlZCgpOwotCi0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1swXSwgPT0s
IExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOwotICAgIGdfYXNzZXJ0
X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2Fk
Q29tbWl0dGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzJdLCA9
PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIo
d2Via2l0X3dlYl92aWV3X2dldF90aXRsZSh0ZXN0LT5tX3dlYlZpZXcpLCA9PSwgVExTRXhwZWN0
ZWRTdWNjZXNzVGl0bGUpOwotfQotCi0KLXN0YXRpYyB2b2lkIGh0dHBzU2VydmVyQ2FsbGJhY2so
U291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0
aCwgR0hhc2hUYWJsZSosIFNvdXBDbGllbnRDb250ZXh0KiwgZ3BvaW50ZXIpCi17Ci0gICAgaWYg
KG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKLSAgICAgICAgc291cF9tZXNz
YWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiLyIpKSB7
Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09L
KTsKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2Jv
ZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgaW5kZXhIVE1MLCBzdHJsZW4oaW5kZXhIVE1MKSk7Ci0g
ICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkp
OwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9pbnNlY3VyZS1jb250ZW50LyIp
KSB7Ci0gICAgICAgIEdPd25QdHI8Y2hhcj4gcmVzcG9uc2VIVE1MKGdfc3RyZHVwX3ByaW50Zihp
bnNlY3VyZUNvbnRlbnRIVE1MLCBrSHR0cFNlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3Rlc3Qtc2Ny
aXB0IikuZGF0YSgpLCBrSHR0cFNlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3Rlc3QtaW1hZ2UiKS5k
YXRhKCkpKTsKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3Bv
bnNlX2JvZHksIFNPVVBfTUVNT1JZX0NPUFksIHJlc3BvbnNlSFRNTC5nZXQoKSwgc3RybGVuKHJl
c3BvbnNlSFRNTC5nZXQoKSkpOwotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNz
YWdlLCBTT1VQX1NUQVRVU19PSyk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRl
KG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0
aCwgIi90ZXN0LXRscy8iKSkgewotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNz
YWdlLCBTT1VQX1NUQVRVU19PSyk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZCht
ZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIFRMU1N1Y2Nlc3NIVE1M
U3RyaW5nLCBzdHJsZW4oVExTU3VjY2Vzc0hUTUxTdHJpbmcpKTsKLSAgICAgICAgc291cF9tZXNz
YWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7Ci0gICAgfSBlbHNlCi0g
ICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9G
T1VORCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGh0dHBTZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBz
ZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxl
KiwgU291cENsaWVudENvbnRleHQqLCBncG9pbnRlcikKLXsKLSAgICBpZiAobWVzc2FnZS0+bWV0
aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgewotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1
cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvdGVzdC1zY3JpcHQiKSkgewot
ICAgICAgICBHT3duUHRyPGNoYXI+IHBhdGhUb0ZpbGUoZ19idWlsZF9maWxlbmFtZShUZXN0Ojpn
ZXRSZXNvdXJjZXNEaXIoKS5kYXRhKCksICJsaW5rLXRpdGxlLmpzIiwgTlVMTCkpOwotICAgICAg
ICBjaGFyKiBjb250ZW50czsKLSAgICAgICAgZ3NpemUgbGVuZ3RoOwotICAgICAgICBnX2ZpbGVf
Z2V0X2NvbnRlbnRzKHBhdGhUb0ZpbGUuZ2V0KCksICZjb250ZW50cywgJmxlbmd0aCwgMCk7Ci0K
LSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHks
IFNPVVBfTUVNT1JZX1RBS0UsIGNvbnRlbnRzLCBsZW5ndGgpOwotICAgICAgICBzb3VwX21lc3Nh
Z2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7Ci0gICAgICAgIHNvdXBfbWVz
c2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOwotICAgIH0gZWxzZSBp
ZiAoZ19zdHJfZXF1YWwocGF0aCwgIi90ZXN0LWltYWdlIikpIHsKLSAgICAgICAgR093blB0cjxj
aGFyPiBwYXRoVG9GaWxlKGdfYnVpbGRfZmlsZW5hbWUoVGVzdDo6Z2V0V2ViS2l0MVRlc3RSZXNv
dWNlc0RpcigpLmRhdGEoKSwgImJsYW5rLmljbyIsIE5VTEwpKTsKLSAgICAgICAgY2hhciogY29u
dGVudHM7Ci0gICAgICAgIGdzaXplIGxlbmd0aDsKLSAgICAgICAgZ19maWxlX2dldF9jb250ZW50
cyhwYXRoVG9GaWxlLmdldCgpLCAmY29udGVudHMsICZsZW5ndGgsIDApOwotCi0gICAgICAgIHNv
dXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9S
WV9UQUtFLCBjb250ZW50cywgbGVuZ3RoKTsKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0
dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOwotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9j
b21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKLSAgICB9IGVsc2UKLSAgICAgICAgc291
cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0ZPVU5EKTsKLX0K
LQotdm9pZCBiZWZvcmVBbGwoKQotewotICAgIGtIdHRwc1NlcnZlciA9IG5ldyBXZWJLaXRUZXN0
U2VydmVyKFdlYktpdFRlc3RTZXJ2ZXI6OlNlcnZlckhUVFBTKTsKLSAgICBrSHR0cHNTZXJ2ZXIt
PnJ1bihodHRwc1NlcnZlckNhbGxiYWNrKTsKLQotICAgIGtIdHRwU2VydmVyID0gbmV3IFdlYktp
dFRlc3RTZXJ2ZXIoV2ViS2l0VGVzdFNlcnZlcjo6U2VydmVySFRUUCk7Ci0gICAga0h0dHBTZXJ2
ZXItPnJ1bihodHRwU2VydmVyQ2FsbGJhY2spOwotCi0gICAgU1NMVGVzdDo6YWRkKCJXZWJLaXRX
ZWJWaWV3IiwgInNzbCIsIHRlc3RTU0wpOwotICAgIEluc2VjdXJlQ29udGVudFRlc3Q6OmFkZCgi
V2ViS2l0V2ViVmlldyIsICJpbnNlY3VyZS1jb250ZW50IiwgdGVzdEluc2VjdXJlQ29udGVudCk7
Ci0gICAgLy8gSW4gdGhpcyBjYXNlIHRoZSBvcmRlciBvZiB0aGUgdGVzdHMgZG9lcyBtYXR0ZXIg
YmVjYXVzZSB0bHMtZXJyb3JzLXBvbGljeSB0ZXN0cyB0aGUgZGVmYXVsdCBwb2xpY3ksCi0gICAg
Ly8gYW5kIGV4cGVjdHMgdGhhdCBubyBleGNlcHRpb24gd2lsbCBoYXZlIGJlZW4gYWRkZWQgZm9y
IHRoaXMgY2VydGlmaWNhdGUgYW5kIGhvc3QgcGFpciBhcyBpcwotICAgIC8vIGRvbmUgaW4gdGhl
IHRscy1wZXJtaXNzaW9uLXJlcXVlc3QgdGVzdC4KLSAgICBTU0xUZXN0OjphZGQoIldlYktpdFdl
YlZpZXciLCAidGxzLWVycm9ycy1wb2xpY3kiLCB0ZXN0VExTRXJyb3JzUG9saWN5KTsKLSAgICBU
TFNFcnJvcnNUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAibG9hZC1mYWlsZWQtd2l0aC10bHMt
ZXJyb3JzIiwgdGVzdExvYWRGYWlsZWRXaXRoVExTRXJyb3JzKTsKLX0KLQotdm9pZCBhZnRlckFs
bCgpCi17Ci0gICAgZGVsZXRlIGtIdHRwc1NlcnZlcjsKLSAgICBkZWxldGUga0h0dHBTZXJ2ZXI7
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9U
ZXN0VUlDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
VGVzdFVJQ2xpZW50LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmMzMGQ2ZC4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0
VUlDbGllbnQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjc5ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
IHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJXZWJWaWV3VGVzdC5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3Rm
L2dvYmplY3QvR1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLQot
c3RhdGljIGNvbnN0IGNoYXIqIGtBbGVydERpYWxvZ01lc3NhZ2UgPSAiV2ViS2l0R1RLKyBhbGVy
dCBkaWFsb2cgbWVzc2FnZSI7Ci1zdGF0aWMgY29uc3QgY2hhcioga0NvbmZpcm1EaWFsb2dNZXNz
YWdlID0gIldlYktpdEdUSysgY29uZmlybSBkaWFsb2cgbWVzc2FnZSI7Ci1zdGF0aWMgY29uc3Qg
Y2hhcioga1Byb21wdERpYWxvZ01lc3NhZ2UgPSAiV2ViS2l0R1RLKyBwcm9tcHQgZGlhbG9nIG1l
c3NhZ2UiOwotc3RhdGljIGNvbnN0IGNoYXIqIGtQcm9tcHREaWFsb2dSZXR1cm5lZFRleHQgPSAi
V2ViS2l0R1RLKyBwcm9tcHQgZGlhbG9nIHJldHVybmVkIHRleHQiOwotCi1jbGFzcyBVSUNsaWVu
dFRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1Rf
RklYVFVSRShVSUNsaWVudFRlc3QpOwotCi0gICAgZW51bSBXZWJWaWV3RXZlbnRzIHsKLSAgICAg
ICAgQ3JlYXRlLAotICAgICAgICBSZWFkeVRvU2hvdywKLSAgICAgICAgUnVuQXNNb2RhbCwKLSAg
ICAgICAgQ2xvc2UKLSAgICB9OwotCi0gICAgY2xhc3MgV2luZG93UHJvcGVydGllcyB7Ci0gICAg
cHVibGljOgotICAgICAgICBXaW5kb3dQcm9wZXJ0aWVzKCkKLSAgICAgICAgICAgIDogbV9pc051
bGwodHJ1ZSkKLSAgICAgICAgICAgICwgbV90b29sYmFyVmlzaWJsZSh0cnVlKQotICAgICAgICAg
ICAgLCBtX3N0YXR1c2JhclZpc2libGUodHJ1ZSkKLSAgICAgICAgICAgICwgbV9zY3JvbGxiYXJz
VmlzaWJsZSh0cnVlKQotICAgICAgICAgICAgLCBtX21lbnViYXJWaXNpYmxlKHRydWUpCi0gICAg
ICAgICAgICAsIG1fbG9jYXRpb25iYXJWaXNpYmxlKHRydWUpCi0gICAgICAgICAgICAsIG1fcmVz
aXphYmxlKHRydWUpCi0gICAgICAgICAgICAsIG1fZnVsbHNjcmVlbihmYWxzZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgbWVtc2V0KCZtX2dlb21ldHJ5LCAwLCBzaXplb2YoR2RrUmVjdGFuZ2xl
KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBXaW5kb3dQcm9wZXJ0aWVzKFdlYktpdFdpbmRvd1By
b3BlcnRpZXMqIHdpbmRvd1Byb3BlcnRpZXMpCi0gICAgICAgICAgICA6IG1faXNOdWxsKGZhbHNl
KQotICAgICAgICAgICAgLCBtX3Rvb2xiYXJWaXNpYmxlKHdlYmtpdF93aW5kb3dfcHJvcGVydGll
c19nZXRfdG9vbGJhcl92aXNpYmxlKHdpbmRvd1Byb3BlcnRpZXMpKQotICAgICAgICAgICAgLCBt
X3N0YXR1c2JhclZpc2libGUod2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF9zdGF0dXNiYXJf
dmlzaWJsZSh3aW5kb3dQcm9wZXJ0aWVzKSkKLSAgICAgICAgICAgICwgbV9zY3JvbGxiYXJzVmlz
aWJsZSh3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X3Njcm9sbGJhcnNfdmlzaWJsZSh3aW5k
b3dQcm9wZXJ0aWVzKSkKLSAgICAgICAgICAgICwgbV9tZW51YmFyVmlzaWJsZSh3ZWJraXRfd2lu
ZG93X3Byb3BlcnRpZXNfZ2V0X21lbnViYXJfdmlzaWJsZSh3aW5kb3dQcm9wZXJ0aWVzKSkKLSAg
ICAgICAgICAgICwgbV9sb2NhdGlvbmJhclZpc2libGUod2Via2l0X3dpbmRvd19wcm9wZXJ0aWVz
X2dldF9sb2NhdGlvbmJhcl92aXNpYmxlKHdpbmRvd1Byb3BlcnRpZXMpKQotICAgICAgICAgICAg
LCBtX3Jlc2l6YWJsZSh3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X3Jlc2l6YWJsZSh3aW5k
b3dQcm9wZXJ0aWVzKSkKLSAgICAgICAgICAgICwgbV9mdWxsc2NyZWVuKHdlYmtpdF93aW5kb3df
cHJvcGVydGllc19nZXRfZnVsbHNjcmVlbih3aW5kb3dQcm9wZXJ0aWVzKSkKLSAgICAgICAgewot
ICAgICAgICAgICAgd2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF9nZW9tZXRyeSh3aW5kb3dQ
cm9wZXJ0aWVzLCAmbV9nZW9tZXRyeSk7Ci0gICAgICAgIH0KLQotICAgICAgICBXaW5kb3dQcm9w
ZXJ0aWVzKEdka1JlY3RhbmdsZSogZ2VvbWV0cnksIGJvb2wgdG9vbGJhclZpc2libGUsIGJvb2wg
c3RhdHVzYmFyVmlzaWJsZSwgYm9vbCBzY3JvbGxiYXJzVmlzaWJsZSwgYm9vbCBtZW51YmFyVmlz
aWJsZSwgYm9vbCBsb2NhdGlvbmJhclZpc2libGUsIGJvb2wgcmVzaXphYmxlLCBib29sIGZ1bGxz
Y3JlZW4pCi0gICAgICAgICAgICA6IG1faXNOdWxsKGZhbHNlKQotICAgICAgICAgICAgLCBtX2dl
b21ldHJ5KCpnZW9tZXRyeSkKLSAgICAgICAgICAgICwgbV90b29sYmFyVmlzaWJsZSh0b29sYmFy
VmlzaWJsZSkKLSAgICAgICAgICAgICwgbV9zdGF0dXNiYXJWaXNpYmxlKHN0YXR1c2JhclZpc2li
bGUpCi0gICAgICAgICAgICAsIG1fc2Nyb2xsYmFyc1Zpc2libGUoc2Nyb2xsYmFyc1Zpc2libGUp
Ci0gICAgICAgICAgICAsIG1fbWVudWJhclZpc2libGUobWVudWJhclZpc2libGUpCi0gICAgICAg
ICAgICAsIG1fbG9jYXRpb25iYXJWaXNpYmxlKGxvY2F0aW9uYmFyVmlzaWJsZSkKLSAgICAgICAg
ICAgICwgbV9yZXNpemFibGUocmVzaXphYmxlKQotICAgICAgICAgICAgLCBtX2Z1bGxzY3JlZW4o
ZnVsbHNjcmVlbikKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBpc051bGwo
KSBjb25zdCB7IHJldHVybiBtX2lzTnVsbDsgfQotCi0gICAgICAgIHZvaWQgYXNzZXJ0RXF1YWwo
Y29uc3QgV2luZG93UHJvcGVydGllcyYgb3RoZXIpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIGdfYXNzZXJ0X2NtcGludChtX2dlb21ldHJ5LngsID09LCBvdGhlci5tX2dlb21ldHJ5Lngp
OwotICAgICAgICAgICAgZ19hc3NlcnRfY21waW50KG1fZ2VvbWV0cnkueSwgPT0sIG90aGVyLm1f
Z2VvbWV0cnkueSk7Ci0gICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQobV9nZW9tZXRyeS53aWR0
aCwgPT0sIG90aGVyLm1fZ2VvbWV0cnkud2lkdGgpOwotICAgICAgICAgICAgZ19hc3NlcnRfY21w
aW50KG1fZ2VvbWV0cnkuaGVpZ2h0LCA9PSwgb3RoZXIubV9nZW9tZXRyeS5oZWlnaHQpOwotICAg
ICAgICAgICAgZ19hc3NlcnRfY21waW50KHN0YXRpY19jYXN0PGludD4obV90b29sYmFyVmlzaWJs
ZSksID09LCBzdGF0aWNfY2FzdDxpbnQ+KG90aGVyLm1fdG9vbGJhclZpc2libGUpKTsKLSAgICAg
ICAgICAgIGdfYXNzZXJ0X2NtcGludChzdGF0aWNfY2FzdDxpbnQ+KG1fc3RhdHVzYmFyVmlzaWJs
ZSksID09LCBzdGF0aWNfY2FzdDxpbnQ+KG90aGVyLm1fc3RhdHVzYmFyVmlzaWJsZSkpOwotICAg
ICAgICAgICAgZ19hc3NlcnRfY21waW50KHN0YXRpY19jYXN0PGludD4obV9zY3JvbGxiYXJzVmlz
aWJsZSksID09LCBzdGF0aWNfY2FzdDxpbnQ+KG90aGVyLm1fc2Nyb2xsYmFyc1Zpc2libGUpKTsK
LSAgICAgICAgICAgIGdfYXNzZXJ0X2NtcGludChzdGF0aWNfY2FzdDxpbnQ+KG1fbWVudWJhclZp
c2libGUpLCA9PSwgc3RhdGljX2Nhc3Q8aW50PihvdGhlci5tX21lbnViYXJWaXNpYmxlKSk7Ci0g
ICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQoc3RhdGljX2Nhc3Q8aW50PihtX2xvY2F0aW9uYmFy
VmlzaWJsZSksID09LCBzdGF0aWNfY2FzdDxpbnQ+KG90aGVyLm1fbG9jYXRpb25iYXJWaXNpYmxl
KSk7Ci0gICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQoc3RhdGljX2Nhc3Q8aW50PihtX3Jlc2l6
YWJsZSksID09LCBzdGF0aWNfY2FzdDxpbnQ+KG90aGVyLm1fcmVzaXphYmxlKSk7Ci0gICAgICAg
ICAgICBnX2Fzc2VydF9jbXBpbnQoc3RhdGljX2Nhc3Q8aW50PihtX2Z1bGxzY3JlZW4pLCA9PSwg
c3RhdGljX2Nhc3Q8aW50PihvdGhlci5tX2Z1bGxzY3JlZW4pKTsKLSAgICAgICAgfQotCi0gICAg
cHJpdmF0ZToKLSAgICAgICAgYm9vbCBtX2lzTnVsbDsKLQotICAgICAgICBHZGtSZWN0YW5nbGUg
bV9nZW9tZXRyeTsKLQotICAgICAgICBib29sIG1fdG9vbGJhclZpc2libGU7Ci0gICAgICAgIGJv
b2wgbV9zdGF0dXNiYXJWaXNpYmxlOwotICAgICAgICBib29sIG1fc2Nyb2xsYmFyc1Zpc2libGU7
Ci0gICAgICAgIGJvb2wgbV9tZW51YmFyVmlzaWJsZTsKLSAgICAgICAgYm9vbCBtX2xvY2F0aW9u
YmFyVmlzaWJsZTsKLQotICAgICAgICBib29sIG1fcmVzaXphYmxlOwotICAgICAgICBib29sIG1f
ZnVsbHNjcmVlbjsKLSAgICB9OwotCi0gICAgc3RhdGljIHZvaWQgd2luZG93UHJvcGVydGllc05v
dGlmeUNhbGxiYWNrKEdPYmplY3QqLCBHUGFyYW1TcGVjKiBwYXJhbVNwZWMsIFVJQ2xpZW50VGVz
dCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHRlc3QtPm1fd2luZG93UHJvcGVydGllc0NoYW5nZWQu
YWRkKGdfcGFyYW1fc3BlY19nZXRfbmFtZShwYXJhbVNwZWMpKTsKLSAgICB9Ci0KLSAgICBzdGF0
aWMgR3RrV2lkZ2V0KiB2aWV3Q3JlYXRlQ2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywg
VUlDbGllbnRUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRlc3QtPnZpZXdDcmVh
dGUod2ViVmlldyk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgdmlld1JlYWR5VG9TaG93Q2Fs
bGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgVUlDbGllbnRUZXN0KiB0ZXN0KQotICAgIHsK
LSAgICAgICAgdGVzdC0+dmlld1JlYWR5VG9TaG93KHdlYlZpZXcpOwotICAgIH0KLQotICAgIHN0
YXRpYyB2b2lkIHZpZXdDbG9zZUNhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFVJQ2xp
ZW50VGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHRlc3QtPnZpZXdDbG9zZSh3ZWJWaWV3KTsK
LSAgICB9Ci0KLSAgICB2b2lkIHNjcmlwdEFsZXJ0KFdlYktpdFNjcmlwdERpYWxvZyogZGlhbG9n
KQotICAgIHsKLSAgICAgICAgc3dpdGNoIChtX3NjcmlwdERpYWxvZ1R5cGUpIHsKLSAgICAgICAg
Y2FzZSBXRUJLSVRfU0NSSVBUX0RJQUxPR19BTEVSVDoKLSAgICAgICAgICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfc2NyaXB0X2RpYWxvZ19nZXRfbWVzc2FnZShkaWFsb2cpLCA9PSwga0FsZXJ0
RGlhbG9nTWVzc2FnZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXRUJLSVRf
U0NSSVBUX0RJQUxPR19DT05GSVJNOgotICAgICAgICAgICAgZ19hc3NlcnQobV9zY3JpcHREaWFs
b2dDb25maXJtZWQpOwotICAgICAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zY3JpcHRf
ZGlhbG9nX2dldF9tZXNzYWdlKGRpYWxvZyksID09LCAiY29uZmlybWVkIik7Ci0KLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdFQktJVF9TQ1JJUFRfRElBTE9HX1BST01QVDoKLSAg
ICAgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2NyaXB0X2RpYWxvZ19nZXRfbWVzc2Fn
ZShkaWFsb2cpLCA9PSwga1Byb21wdERpYWxvZ1JldHVybmVkVGV4dCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7
Ci0gICAgfQotCi0gICAgdm9pZCBzY3JpcHRDb25maXJtKFdlYktpdFNjcmlwdERpYWxvZyogZGlh
bG9nKQotICAgIHsKLSAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zY3JpcHRfZGlhbG9n
X2dldF9tZXNzYWdlKGRpYWxvZyksID09LCBrQ29uZmlybURpYWxvZ01lc3NhZ2UpOwotICAgICAg
ICBtX3NjcmlwdERpYWxvZ0NvbmZpcm1lZCA9ICFtX3NjcmlwdERpYWxvZ0NvbmZpcm1lZDsKLSAg
ICAgICAgd2Via2l0X3NjcmlwdF9kaWFsb2dfY29uZmlybV9zZXRfY29uZmlybWVkKGRpYWxvZywg
bV9zY3JpcHREaWFsb2dDb25maXJtZWQpOwotICAgIH0KLQotICAgIHZvaWQgc2NyaXB0UHJvbXB0
KFdlYktpdFNjcmlwdERpYWxvZyogZGlhbG9nKQotICAgIHsKLSAgICAgICAgZ19hc3NlcnRfY21w
c3RyKHdlYmtpdF9zY3JpcHRfZGlhbG9nX2dldF9tZXNzYWdlKGRpYWxvZyksID09LCBrUHJvbXB0
RGlhbG9nTWVzc2FnZSk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2NyaXB0X2Rp
YWxvZ19wcm9tcHRfZ2V0X2RlZmF1bHRfdGV4dChkaWFsb2cpLCA9PSwgImRlZmF1bHQiKTsKLSAg
ICAgICAgd2Via2l0X3NjcmlwdF9kaWFsb2dfcHJvbXB0X3NldF90ZXh0KGRpYWxvZywga1Byb21w
dERpYWxvZ1JldHVybmVkVGV4dCk7Ci0gICAgfQotCi0gICAgc3RhdGljIGdib29sZWFuIHNjcmlw
dERpYWxvZyhXZWJLaXRXZWJWaWV3KiwgV2ViS2l0U2NyaXB0RGlhbG9nKiBkaWFsb2csIFVJQ2xp
ZW50VGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAod2Via2l0X3NjcmlwdF9kaWFs
b2dfZ2V0X2RpYWxvZ190eXBlKGRpYWxvZykpIHsKLSAgICAgICAgY2FzZSBXRUJLSVRfU0NSSVBU
X0RJQUxPR19BTEVSVDoKLSAgICAgICAgICAgIHRlc3QtPnNjcmlwdEFsZXJ0KGRpYWxvZyk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXRUJLSVRfU0NSSVBUX0RJQUxPR19DT05G
SVJNOgotICAgICAgICAgICAgdGVzdC0+c2NyaXB0Q29uZmlybShkaWFsb2cpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV0VCS0lUX1NDUklQVF9ESUFMT0dfUFJPTVBUOgotICAg
ICAgICAgICAgdGVzdC0+c2NyaXB0UHJvbXB0KGRpYWxvZyk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQotICAgIHN0YXRpYyB2
b2lkIG1vdXNlVGFyZ2V0Q2hhbmdlZChXZWJLaXRXZWJWaWV3KiwgV2ViS2l0SGl0VGVzdFJlc3Vs
dCogaGl0VGVzdFJlc3VsdCwgZ3VpbnQgbW9kaWZpZXJzLCBVSUNsaWVudFRlc3QqIHRlc3QpCi0g
ICAgewotICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfSElUX1RFU1RfUkVTVUxUKGhpdFRlc3RS
ZXN1bHQpKTsKLSAgICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5p
c2hlcyhHX09CSkVDVChoaXRUZXN0UmVzdWx0KSk7Ci0KLSAgICAgICAgdGVzdC0+bV9tb3VzZVRh
cmdldEhpdFRlc3RSZXN1bHQgPSBoaXRUZXN0UmVzdWx0OwotICAgICAgICB0ZXN0LT5tX21vdXNl
VGFyZ2V0TW9kaWZpZXJzID0gbW9kaWZpZXJzOwotICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRl
c3QtPm1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiBwZXJtaXNzaW9u
UmVxdWVzdGVkKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRQZXJtaXNzaW9uUmVxdWVzdCogcmVxdWVz
dCwgVUlDbGllbnRUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lT
X1BFUk1JU1NJT05fUkVRVUVTVChyZXF1ZXN0KSk7Ci0gICAgICAgIHRlc3QtPmFzc2VydE9iamVj
dElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QocmVxdWVzdCkpOwotCi0gICAgICAg
IGlmICh0ZXN0LT5tX2FsbG93UGVybWlzc2lvblJlcXVlc3RzKQotICAgICAgICAgICAgd2Via2l0
X3Blcm1pc3Npb25fcmVxdWVzdF9hbGxvdyhyZXF1ZXN0KTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgd2Via2l0X3Blcm1pc3Npb25fcmVxdWVzdF9kZW55KHJlcXVlc3QpOwotCi0gICAgICAg
IHJldHVybiBUUlVFOwotICAgIH0KLQotICAgIFVJQ2xpZW50VGVzdCgpCi0gICAgICAgIDogbV9z
Y3JpcHREaWFsb2dUeXBlKFdFQktJVF9TQ1JJUFRfRElBTE9HX0FMRVJUKQotICAgICAgICAsIG1f
c2NyaXB0RGlhbG9nQ29uZmlybWVkKHRydWUpCi0gICAgICAgICwgbV9hbGxvd1Blcm1pc3Npb25S
ZXF1ZXN0cyhmYWxzZSkKLSAgICAgICAgLCBtX21vdXNlVGFyZ2V0TW9kaWZpZXJzKDApCi0gICAg
ewotICAgICAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2phdmFzY3JpcHRfY2FuX29wZW5fd2luZG93
c19hdXRvbWF0aWNhbGx5KHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3MobV93ZWJWaWV3KSwg
VFJVRSk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAiY3JlYXRlIiwgR19D
QUxMQkFDSyh2aWV3Q3JlYXRlQ2FsbGJhY2spLCB0aGlzKTsKLSAgICAgICAgZ19zaWduYWxfY29u
bmVjdChtX3dlYlZpZXcsICJzY3JpcHQtZGlhbG9nIiwgR19DQUxMQkFDSyhzY3JpcHREaWFsb2cp
LCB0aGlzKTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJtb3VzZS10YXJn
ZXQtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sobW91c2VUYXJnZXRDaGFuZ2VkKSwgdGhpcyk7Ci0gICAg
ICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAicGVybWlzc2lvbi1yZXF1ZXN0IiwgR19D
QUxMQkFDSyhwZXJtaXNzaW9uUmVxdWVzdGVkKSwgdGhpcyk7Ci0gICAgfQotCi0gICAgflVJQ2xp
ZW50VGVzdCgpCi0gICAgewotICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21h
dGNoZWQobV93ZWJWaWV3LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsK
LSAgICB9Ci0KLSAgICB2b2lkIHdhaXRVbnRpbE1haW5Mb29wRmluaXNoZXMoKQotICAgIHsKLSAg
ICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIHZvaWQgc2V0
RXhwZWN0ZWRXaW5kb3dQcm9wZXJ0aWVzKGNvbnN0IFdpbmRvd1Byb3BlcnRpZXMmIHdpbmRvd1By
b3BlcnRpZXMpCi0gICAgewotICAgICAgICBtX3dpbmRvd1Byb3BlcnRpZXMgPSB3aW5kb3dQcm9w
ZXJ0aWVzOwotICAgIH0KLQotICAgIFdlYktpdEhpdFRlc3RSZXN1bHQqIG1vdmVNb3VzZUFuZFdh
aXRVbnRpbE1vdXNlVGFyZ2V0Q2hhbmdlZChpbnQgeCwgaW50IHksIHVuc2lnbmVkIG1vdXNlTW9k
aWZpZXJzID0gMCkKLSAgICB7Ci0gICAgICAgIG1vdXNlTW92ZVRvKHgsIHksIG1vdXNlTW9kaWZp
ZXJzKTsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotICAgICAgICByZXR1
cm4gbV9tb3VzZVRhcmdldEhpdFRlc3RSZXN1bHQuZ2V0KCk7Ci0gICAgfQotCi0gICAgdmlydHVh
bCBHdGtXaWRnZXQqIHZpZXdDcmVhdGUoV2ViS2l0V2ViVmlldyogd2ViVmlldykKLSAgICB7Ci0g
ICAgICAgIGdfYXNzZXJ0KHdlYlZpZXcgPT0gbV93ZWJWaWV3KTsKLQotICAgICAgICBHdGtXaWRn
ZXQqIG5ld1dlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3X3dpdGhfY29udGV4dCh3ZWJraXRf
d2ViX3ZpZXdfZ2V0X2NvbnRleHQod2ViVmlldykpOwotICAgICAgICBnX29iamVjdF9yZWZfc2lu
ayhuZXdXZWJWaWV3KTsKLQotICAgICAgICBtX3dlYlZpZXdFdmVudHMuYXBwZW5kKENyZWF0ZSk7
Ci0KLSAgICAgICAgV2ViS2l0V2luZG93UHJvcGVydGllcyogd2luZG93UHJvcGVydGllcyA9IHdl
YmtpdF93ZWJfdmlld19nZXRfd2luZG93X3Byb3BlcnRpZXMoV0VCS0lUX1dFQl9WSUVXKG5ld1dl
YlZpZXcpKTsKLSAgICAgICAgZ19hc3NlcnQod2luZG93UHJvcGVydGllcyk7Ci0gICAgICAgIGFz
c2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1Qod2luZG93UHJvcGVy
dGllcykpOwotICAgICAgICBtX3dpbmRvd1Byb3BlcnRpZXNDaGFuZ2VkLmNsZWFyKCk7Ci0KLSAg
ICAgICAgZ19zaWduYWxfY29ubmVjdCh3aW5kb3dQcm9wZXJ0aWVzLCAibm90aWZ5IiwgR19DQUxM
QkFDSyh3aW5kb3dQcm9wZXJ0aWVzTm90aWZ5Q2FsbGJhY2spLCB0aGlzKTsKLSAgICAgICAgZ19z
aWduYWxfY29ubmVjdChuZXdXZWJWaWV3LCAicmVhZHktdG8tc2hvdyIsIEdfQ0FMTEJBQ0sodmll
d1JlYWR5VG9TaG93Q2FsbGJhY2spLCB0aGlzKTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChu
ZXdXZWJWaWV3LCAiY2xvc2UiLCBHX0NBTExCQUNLKHZpZXdDbG9zZUNhbGxiYWNrKSwgdGhpcyk7
Ci0KLSAgICAgICAgcmV0dXJuIG5ld1dlYlZpZXc7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lk
IHZpZXdSZWFkeVRvU2hvdyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQotICAgIHsKLSAgICAgICAg
Z19hc3NlcnQod2ViVmlldyAhPSBtX3dlYlZpZXcpOwotCi0gICAgICAgIFdlYktpdFdpbmRvd1By
b3BlcnRpZXMqIHdpbmRvd1Byb3BlcnRpZXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19w
cm9wZXJ0aWVzKHdlYlZpZXcpOwotICAgICAgICBnX2Fzc2VydCh3aW5kb3dQcm9wZXJ0aWVzKTsK
LSAgICAgICAgaWYgKCFtX3dpbmRvd1Byb3BlcnRpZXMuaXNOdWxsKCkpCi0gICAgICAgICAgICBX
aW5kb3dQcm9wZXJ0aWVzKHdpbmRvd1Byb3BlcnRpZXMpLmFzc2VydEVxdWFsKG1fd2luZG93UHJv
cGVydGllcyk7Ci0KLSAgICAgICAgbV93ZWJWaWV3RXZlbnRzLmFwcGVuZChSZWFkeVRvU2hvdyk7
Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpZXdDbG9zZShXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3KQotICAgIHsKLSAgICAgICAgZ19hc3NlcnQod2ViVmlldyAhPSBtX3dlYlZpZXcpOwotCi0g
ICAgICAgIG1fd2ViVmlld0V2ZW50cy5hcHBlbmQoQ2xvc2UpOwotICAgICAgICBnX29iamVjdF91
bnJlZih3ZWJWaWV3KTsKLQotICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3ApOwot
ICAgIH0KLQotICAgIFZlY3RvcjxXZWJWaWV3RXZlbnRzPiBtX3dlYlZpZXdFdmVudHM7Ci0gICAg
V2ViS2l0U2NyaXB0RGlhbG9nVHlwZSBtX3NjcmlwdERpYWxvZ1R5cGU7Ci0gICAgYm9vbCBtX3Nj
cmlwdERpYWxvZ0NvbmZpcm1lZDsKLSAgICBib29sIG1fYWxsb3dQZXJtaXNzaW9uUmVxdWVzdHM7
Ci0gICAgV2luZG93UHJvcGVydGllcyBtX3dpbmRvd1Byb3BlcnRpZXM7Ci0gICAgSGFzaFNldDxX
VEY6OlN0cmluZz4gbV93aW5kb3dQcm9wZXJ0aWVzQ2hhbmdlZDsKLSAgICBHUmVmUHRyPFdlYktp
dEhpdFRlc3RSZXN1bHQ+IG1fbW91c2VUYXJnZXRIaXRUZXN0UmVzdWx0OwotICAgIHVuc2lnbmVk
IG1fbW91c2VUYXJnZXRNb2RpZmllcnM7Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0Ny
ZWF0ZVJlYWR5Q2xvc2UoVUlDbGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAg
IHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keSBvbkxvYWQ9XCJ3aW5kb3cub3BlbigpLmNsb3Nl
KCk7XCI+PC9odG1sPiIsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbE1haW5Mb29wRmluaXNoZXMo
KTsKLQotICAgIFZlY3RvcjxVSUNsaWVudFRlc3Q6OldlYlZpZXdFdmVudHM+JiBldmVudHMgPSB0
ZXN0LT5tX3dlYlZpZXdFdmVudHM7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCks
ID09LCAzKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgVUlDbGllbnRUZXN0
OjpDcmVhdGUpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBVSUNsaWVudFRl
c3Q6OlJlYWR5VG9TaG93KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgVUlD
bGllbnRUZXN0OjpDbG9zZSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBjaGVja01pbWVUeXBlRm9y
RmlsdGVyKEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciwgY29uc3QgZ2NoYXIqIG1pbWVUeXBlKQotewot
ICAgIEd0a0ZpbGVGaWx0ZXJJbmZvIGZpbHRlckluZm87Ci0gICAgZmlsdGVySW5mby5jb250YWlu
cyA9IEdUS19GSUxFX0ZJTFRFUl9NSU1FX1RZUEU7Ci0gICAgZmlsdGVySW5mby5taW1lX3R5cGUg
PSBtaW1lVHlwZTsKLSAgICByZXR1cm4gZ3RrX2ZpbGVfZmlsdGVyX2ZpbHRlcihmaWx0ZXIsICZm
aWx0ZXJJbmZvKTsKLX0KLQotY2xhc3MgTW9kYWxEaWFsb2dzVGVzdDogcHVibGljIFVJQ2xpZW50
VGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShNb2RhbERpYWxvZ3NU
ZXN0KTsKLQotICAgIHN0YXRpYyB2b2lkIGRpYWxvZ1J1bkFzTW9kYWxDYWxsYmFjayhXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3LCBNb2RhbERpYWxvZ3NUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAg
Z19hc3NlcnQod2ViVmlldyAhPSB0ZXN0LT5tX3dlYlZpZXcpOwotICAgICAgICB0ZXN0LT5tX3dl
YlZpZXdFdmVudHMuYXBwZW5kKFJ1bkFzTW9kYWwpOwotICAgIH0KLQotICAgIEd0a1dpZGdldCog
dmlld0NyZWF0ZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQotICAgIHsKLSAgICAgICAgZ19hc3Nl
cnQod2ViVmlldyA9PSBtX3dlYlZpZXcpOwotCi0gICAgICAgIEd0a1dpZGdldCogbmV3V2ViVmll
dyA9IFVJQ2xpZW50VGVzdDo6dmlld0NyZWF0ZSh3ZWJWaWV3KTsKLSAgICAgICAgZ19zaWduYWxf
Y29ubmVjdChuZXdXZWJWaWV3LCAicnVuLWFzLW1vZGFsIiwgR19DQUxMQkFDSyhkaWFsb2dSdW5B
c01vZGFsQ2FsbGJhY2spLCB0aGlzKTsKLSAgICAgICAgcmV0dXJuIG5ld1dlYlZpZXc7Ci0gICAg
fQotCi0gICAgdm9pZCB2aWV3UmVhZHlUb1Nob3coV2ViS2l0V2ViVmlldyogd2ViVmlldykKLSAg
ICB7Ci0gICAgICAgIGdfYXNzZXJ0KHdlYlZpZXcgIT0gbV93ZWJWaWV3KTsKLSAgICAgICAgbV93
ZWJWaWV3RXZlbnRzLmFwcGVuZChSZWFkeVRvU2hvdyk7Ci0gICAgfQotfTsKLQotc3RhdGljIHZv
aWQgdGVzdFdlYlZpZXdBbGxvd01vZGFsRGlhbG9ncyhNb2RhbERpYWxvZ3NUZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQotewotICAgIFdlYktpdFNldHRpbmdzKiBzZXR0aW5ncyA9IHdlYmtpdF93
ZWJfdmlld19nZXRfc2V0dGluZ3ModGVzdC0+bV93ZWJWaWV3KTsKLSAgICB3ZWJraXRfc2V0dGlu
Z3Nfc2V0X2FsbG93X21vZGFsX2RpYWxvZ3Moc2V0dGluZ3MsIFRSVUUpOwotCi0gICAgdGVzdC0+
bG9hZEh0bWwoIjxodG1sPjxib2R5IG9ubG9hZD1cIndpbmRvdy5zaG93TW9kYWxEaWFsb2coJ2Rh
dGE6dGV4dC9odG1sLDxodG1sPjxib2R5Lz48c2NyaXB0PndpbmRvdy5jbG9zZSgpOzwvc2NyaXB0
PjwvaHRtbD4nKVwiPjwvYm9keT48L2h0bWw+IiwgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTWFp
bkxvb3BGaW5pc2hlcygpOwotCi0gICAgVmVjdG9yPFVJQ2xpZW50VGVzdDo6V2ViVmlld0V2ZW50
cz4mIGV2ZW50cyA9IHRlc3QtPm1fd2ViVmlld0V2ZW50czsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
ZXZlbnRzLnNpemUoKSwgPT0sIDQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09
LCBVSUNsaWVudFRlc3Q6OkNyZWF0ZSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwg
PT0sIFVJQ2xpZW50VGVzdDo6UmVhZHlUb1Nob3cpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVu
dHNbMl0sID09LCBVSUNsaWVudFRlc3Q6OlJ1bkFzTW9kYWwpOwotICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHNbM10sID09LCBVSUNsaWVudFRlc3Q6OkNsb3NlKTsKLX0KLQotc3RhdGljIHZvaWQg
dGVzdFdlYlZpZXdEaXNhbGxvd01vZGFsRGlhbG9ncyhNb2RhbERpYWxvZ3NUZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQotewotICAgIFdlYktpdFNldHRpbmdzKiBzZXR0aW5ncyA9IHdlYmtpdF93
ZWJfdmlld19nZXRfc2V0dGluZ3ModGVzdC0+bV93ZWJWaWV3KTsKLSAgICB3ZWJraXRfc2V0dGlu
Z3Nfc2V0X2FsbG93X21vZGFsX2RpYWxvZ3Moc2V0dGluZ3MsIEZBTFNFKTsKLQotICAgIHRlc3Qt
PmxvYWRIdG1sKCI8aHRtbD48Ym9keSBvbmxvYWQ9XCJ3aW5kb3cuc2hvd01vZGFsRGlhbG9nKCdk
YXRhOnRleHQvaHRtbCw8aHRtbD48Ym9keS8+PHNjcmlwdD53aW5kb3cuY2xvc2UoKTs8L3Njcmlw
dD48L2h0bWw+JylcIj48L2JvZHk+PC9odG1sPiIsIDApOwotICAgIC8vIFdlIG5lZWQgdG8gdXNl
IGEgdGltZW91dCBoZXJlIGJlY2F1c2UgdGhlIHZpZXdDbG9zZSgpIGZ1bmN0aW9uCi0gICAgLy8g
d29uJ3QgZXZlciBiZSBjYWxsZWQgYXMgdGhlIGRpYWxvZyB3b24ndCBiZSBjcmVhdGVkLgotICAg
IHRlc3QtPndhaXQoMSk7Ci0KLSAgICBWZWN0b3I8VUlDbGllbnRUZXN0OjpXZWJWaWV3RXZlbnRz
PiYgZXZlbnRzID0gdGVzdC0+bV93ZWJWaWV3RXZlbnRzOwotICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHMuc2l6ZSgpLCA9PSwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3SmF2YVNj
cmlwdERpYWxvZ3MoVUlDbGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHN0
YXRpYyBjb25zdCBjaGFyKiBodG1sT25Mb2FkRm9ybWF0ID0gIjxodG1sPjxib2R5IG9uTG9hZD1c
IiVzXCI+PC9ib2R5PjwvaHRtbD4iOwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBqc0FsZXJ0Rm9y
bWF0ID0gImFsZXJ0KCclcycpIjsKLSAgICBzdGF0aWMgY29uc3QgY2hhcioganNDb25maXJtRm9y
bWF0ID0gImRvIHsgY29uZmlybWVkID0gY29uZmlybSgnJXMnKTsgfSB3aGlsZSAoIWNvbmZpcm1l
ZCk7IGFsZXJ0KCdjb25maXJtZWQnKTsiOwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBqc1Byb21w
dEZvcm1hdCA9ICJhbGVydChwcm9tcHQoJyVzJywgJ2RlZmF1bHQnKSk7IjsKLQotICAgIHRlc3Qt
Pm1fc2NyaXB0RGlhbG9nVHlwZSA9IFdFQktJVF9TQ1JJUFRfRElBTE9HX0FMRVJUOwotICAgIEdP
d25QdHI8Y2hhcj4gYWxlcnREaWFsb2dNZXNzYWdlKGdfc3RyZHVwX3ByaW50Zihqc0FsZXJ0Rm9y
bWF0LCBrQWxlcnREaWFsb2dNZXNzYWdlKSk7Ci0gICAgR093blB0cjxjaGFyPiBhbGVydEhUTUwo
Z19zdHJkdXBfcHJpbnRmKGh0bWxPbkxvYWRGb3JtYXQsIGFsZXJ0RGlhbG9nTWVzc2FnZS5nZXQo
KSkpOwotICAgIHRlc3QtPmxvYWRIdG1sKGFsZXJ0SFRNTC5nZXQoKSwgMCk7Ci0gICAgdGVzdC0+
d2FpdFVudGlsTWFpbkxvb3BGaW5pc2hlcygpOwotCi0gICAgdGVzdC0+bV9zY3JpcHREaWFsb2dU
eXBlID0gV0VCS0lUX1NDUklQVF9ESUFMT0dfQ09ORklSTTsKLSAgICBHT3duUHRyPGNoYXI+IGNv
bmZpcm1EaWFsb2dNZXNzYWdlKGdfc3RyZHVwX3ByaW50Zihqc0NvbmZpcm1Gb3JtYXQsIGtDb25m
aXJtRGlhbG9nTWVzc2FnZSkpOwotICAgIEdPd25QdHI8Y2hhcj4gY29uZmlybUhUTUwoZ19zdHJk
dXBfcHJpbnRmKGh0bWxPbkxvYWRGb3JtYXQsIGNvbmZpcm1EaWFsb2dNZXNzYWdlLmdldCgpKSk7
Ci0gICAgdGVzdC0+bG9hZEh0bWwoY29uZmlybUhUTUwuZ2V0KCksIDApOwotICAgIHRlc3QtPndh
aXRVbnRpbE1haW5Mb29wRmluaXNoZXMoKTsKLQotICAgIHRlc3QtPm1fc2NyaXB0RGlhbG9nVHlw
ZSA9IFdFQktJVF9TQ1JJUFRfRElBTE9HX1BST01QVDsKLSAgICBHT3duUHRyPGNoYXI+IHByb21w
dERpYWxvZ01lc3NhZ2UoZ19zdHJkdXBfcHJpbnRmKGpzUHJvbXB0Rm9ybWF0LCBrUHJvbXB0RGlh
bG9nTWVzc2FnZSkpOwotICAgIEdPd25QdHI8Y2hhcj4gcHJvbXB0SFRNTChnX3N0cmR1cF9wcmlu
dGYoaHRtbE9uTG9hZEZvcm1hdCwgcHJvbXB0RGlhbG9nTWVzc2FnZS5nZXQoKSkpOwotICAgIHRl
c3QtPmxvYWRIdG1sKHByb21wdEhUTUwuZ2V0KCksIDApOwotICAgIHRlc3QtPndhaXRVbnRpbE1h
aW5Mb29wRmluaXNoZXMoKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdXaW5kb3dQcm9w
ZXJ0aWVzKFVJQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBzdGF0aWMg
Y29uc3QgY2hhciogd2luZG93UHJvcnBlcnRpZXNTdHJpbmcgPSAibGVmdD0xMDAsdG9wPTE1MCx3
aWR0aD00MDAsaGVpZ2h0PTQwMCxsb2NhdGlvbj1ubyxtZW51YmFyPW5vLHN0YXR1cz1ubyx0b29s
YmFyPW5vLHNjcm9sbGJhcnM9bm8iOwotICAgIEdka1JlY3RhbmdsZSBnZW9tZXRyeSA9IHsgMTAw
LCAxNTAsIDQwMCwgNDAwIH07Ci0gICAgdGVzdC0+c2V0RXhwZWN0ZWRXaW5kb3dQcm9wZXJ0aWVz
KFVJQ2xpZW50VGVzdDo6V2luZG93UHJvcGVydGllcygmZ2VvbWV0cnksIGZhbHNlLCBmYWxzZSwg
ZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UpKTsKLQotICAgIEdPd25QdHI8Y2hhcj4g
aHRtbFN0cmluZyhnX3N0cmR1cF9wcmludGYoIjxodG1sPjxib2R5IG9uTG9hZD1cIndpbmRvdy5v
cGVuKCcnLCAnJywgJyVzJykuY2xvc2UoKTtcIj48L2JvZHk+PC9odG1sPiIsIHdpbmRvd1Byb3Jw
ZXJ0aWVzU3RyaW5nKSk7Ci0gICAgdGVzdC0+bG9hZEh0bWwoaHRtbFN0cmluZy5nZXQoKSwgMCk7
Ci0gICAgdGVzdC0+d2FpdFVudGlsTWFpbkxvb3BGaW5pc2hlcygpOwotCi0gICAgc3RhdGljIGNv
bnN0IGNoYXIqIHByb3BlcnRpZXNDaGFuZ2VkW10gPSB7Ci0gICAgICAgICJnZW9tZXRyeSIsICJs
b2NhdGlvbmJhci12aXNpYmxlIiwgIm1lbnViYXItdmlzaWJsZSIsICJzdGF0dXNiYXItdmlzaWJs
ZSIsICJ0b29sYmFyLXZpc2libGUiLCAic2Nyb2xsYmFycy12aXNpYmxlIgotICAgIH07Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMocHJvcGVydGllc0NoYW5nZWQpOyAr
K2kpCi0gICAgICAgIGdfYXNzZXJ0KHRlc3QtPm1fd2luZG93UHJvcGVydGllc0NoYW5nZWQuY29u
dGFpbnMocHJvcGVydGllc0NoYW5nZWRbaV0pKTsKLQotICAgIFZlY3RvcjxVSUNsaWVudFRlc3Q6
OldlYlZpZXdFdmVudHM+JiBldmVudHMgPSB0ZXN0LT5tX3dlYlZpZXdFdmVudHM7Ci0gICAgZ19h
c3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAzKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
ZXZlbnRzWzBdLCA9PSwgVUlDbGllbnRUZXN0OjpDcmVhdGUpOwotICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHNbMV0sID09LCBVSUNsaWVudFRlc3Q6OlJlYWR5VG9TaG93KTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgVUlDbGllbnRUZXN0OjpDbG9zZSk7Ci19Ci0KLXN0YXRp
YyB2b2lkIHRlc3RXZWJWaWV3TW91c2VUYXJnZXQoVUlDbGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rw
b2ludGVyKQotewotICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZChHVEtf
V0lORE9XX1RPUExFVkVMKTsKLQotICAgIGNvbnN0IGNoYXIqIGxpbmtzSG92ZXJlZEhUTUwgPQot
ICAgICAgICAiPGh0bWw+PGJvZHk+IgotICAgICAgICAiIDxhIHN0eWxlPSdwb3NpdGlvbjphYnNv
bHV0ZTsgbGVmdDoxOyB0b3A6MScgaHJlZj0naHR0cDovL3d3dy53ZWJraXRndGsub3JnJyB0aXRs
ZT0nV2ViS2l0R1RLKyBUaXRsZSc+V2ViS2l0R1RLKyBXZWJzaXRlPC9hPiIKLSAgICAgICAgIiA8
aW1nIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6MTAnIHNyYz0nMHhkZWFk
YmVlZicgd2lkdGg9NSBoZWlnaHQ9NT48L2ltZz4iCi0gICAgICAgICIgPGEgc3R5bGU9J3Bvc2l0
aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRvcDoyMCcgaHJlZj0naHR0cDovL3d3dy53ZWJraXRndGsu
b3JnL2xvZ28nIHRpdGxlPSdXZWJLaXRHVEsrIExvZ28nPjxpbWcgc3JjPScweGRlYWRiZWVmJyB3
aWR0aD01IGhlaWdodD01PjwvaW1nPjwvYT4iCi0gICAgICAgICIgPGlucHV0IHN0eWxlPSdwb3Np
dGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6MzAnIHNpemU9JzEwJz48L2lucHV0PiIKLSAgICAg
ICAgIiA8ZGl2IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6NTA7IHdpZHRo
OjMwOyBoZWlnaHQ6MzA7IG92ZXJmbG93OnNjcm9sbCc+Jm5ic3A7PC9kaXY+IgotICAgICAgICAi
IDx2aWRlbyBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjEwMCcgd2lkdGg9
JzMwMCcgaGVpZ2h0PSczMDAnIGNvbnRyb2xzPSdjb250cm9scycgcHJlbG9hZD0nbm9uZSc+PHNv
dXJjZSBzcmM9J21vdmllLm9nZycgdHlwZT0ndmlkZW8vb2dnJyAvPjwvdmlkZW8+IgotICAgICAg
ICAiPC9ib2R5PjwvaHRtbD4iOwotCi0gICAgdGVzdC0+bG9hZEh0bWwobGlua3NIb3ZlcmVkSFRN
TCwgImZpbGU6Ly8vIik7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAg
ICAvLyBNb3ZlIG92ZXIgbGluay4KLSAgICBXZWJLaXRIaXRUZXN0UmVzdWx0KiBoaXRUZXN0UmVz
dWx0ID0gdGVzdC0+bW92ZU1vdXNlQW5kV2FpdFVudGlsTW91c2VUYXJnZXRDaGFuZ2VkKDEsIDEp
OwotICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhp
dFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250
ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90
ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2Vy
dCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1
bHQpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfbGlu
a191cmkoaGl0VGVzdFJlc3VsdCksID09LCAiaHR0cDovL3d3dy53ZWJraXRndGsub3JnLyIpOwot
ICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9saW5rX3RpdGxl
KGhpdFRlc3RSZXN1bHQpLCA9PSwgIldlYktpdEdUSysgVGl0bGUiKTsKLSAgICBnX2Fzc2VydF9j
bXBzdHIod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfbGlua19sYWJlbChoaXRUZXN0UmVzdWx0
KSwgPT0sICJXZWJLaXRHVEsrIFdlYnNpdGUiKTsKLSAgICBnX2Fzc2VydCghdGVzdC0+bV9tb3Vz
ZVRhcmdldE1vZGlmaWVycyk7Ci0KLSAgICAvLyBNb3ZlIG91dCBvZiB0aGUgbGluay4KLSAgICBo
aXRUZXN0UmVzdWx0ID0gdGVzdC0+bW92ZU1vdXNlQW5kV2FpdFVudGlsTW91c2VUYXJnZXRDaGFu
Z2VkKDAsIDApOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRf
aXNfbGluayhoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9y
ZXN1bHRfY29udGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIXdl
YmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7Ci0g
ICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19lZGl0YWJsZSho
aXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIXRlc3QtPm1fbW91c2VUYXJnZXRNb2RpZmll
cnMpOwotCi0gICAgLy8gTW92ZSBvdmVyIGltYWdlIHdpdGggR0RLX0NPTlRST0xfTUFTSy4KLSAg
ICBoaXRUZXN0UmVzdWx0ID0gdGVzdC0+bW92ZU1vdXNlQW5kV2FpdFVudGlsTW91c2VUYXJnZXRD
aGFuZ2VkKDEsIDEwLCBHREtfQ09OVFJPTF9NQVNLKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2hp
dF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xpbmsoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNz
ZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0
KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRp
YShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRf
Y29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtp
dF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19zY3JvbGxiYXIoaGl0VGVzdFJlc3VsdCkpOwot
ICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9pbWFnZV91cmko
aGl0VGVzdFJlc3VsdCksID09LCAiZmlsZTovLy8weGRlYWRiZWVmIik7Ci0gICAgZ19hc3NlcnQo
dGVzdC0+bV9tb3VzZVRhcmdldE1vZGlmaWVycyAmIEdES19DT05UUk9MX01BU0spOwotCi0gICAg
Ly8gTW92ZSBvdmVyIGltYWdlIGxpbmsuCi0gICAgaGl0VGVzdFJlc3VsdCA9IHRlc3QtPm1vdmVN
b3VzZUFuZFdhaXRVbnRpbE1vdXNlVGFyZ2V0Q2hhbmdlZCgxLCAyMCk7Ci0gICAgZ19hc3NlcnQo
d2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xpbmsoaGl0VGVzdFJlc3VsdCkpOwot
ICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFnZShoaXRU
ZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4
dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVz
dF9yZXN1bHRfY29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3Nl
cnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19zY3JvbGxiYXIoaGl0VGVzdFJl
c3VsdCkpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9s
aW5rX3VyaShoaXRUZXN0UmVzdWx0KSwgPT0sICJodHRwOi8vd3d3LndlYmtpdGd0ay5vcmcvbG9n
byIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9pbWFn
ZV91cmkoaGl0VGVzdFJlc3VsdCksID09LCAiZmlsZTovLy8weGRlYWRiZWVmIik7Ci0gICAgZ19h
c3NlcnRfY21wc3RyKHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2xpbmtfdGl0bGUoaGl0VGVz
dFJlc3VsdCksID09LCAiV2ViS2l0R1RLKyBMb2dvIik7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9o
aXRfdGVzdF9yZXN1bHRfZ2V0X2xpbmtfbGFiZWwoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNz
ZXJ0KCF0ZXN0LT5tX21vdXNlVGFyZ2V0TW9kaWZpZXJzKTsKLQotICAgIC8vIE1vdmUgb3ZlciBt
ZWRpYS4KLSAgICBoaXRUZXN0UmVzdWx0ID0gdGVzdC0+bW92ZU1vdXNlQW5kV2FpdFVudGlsTW91
c2VUYXJnZXRDaGFuZ2VkKDEsIDEwMCk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9y
ZXN1bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCghd2Vi
a2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQpKTsKLSAg
ICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbWVkaWEoaGl0VGVz
dFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRf
aXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rl
c3RfcmVzdWx0X2NvbnRleHRfaXNfc2Nyb2xsYmFyKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fz
c2VydF9jbXBzdHIod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfbWVkaWFfdXJpKGhpdFRlc3RS
ZXN1bHQpLCA9PSwgImZpbGU6Ly8vbW92aWUub2dnIik7Ci0gICAgZ19hc3NlcnQoIXRlc3QtPm1f
bW91c2VUYXJnZXRNb2RpZmllcnMpOwotCi0gICAgLy8gTW92ZXIgb3ZlciBpbnB1dC4KLSAgICBo
aXRUZXN0UmVzdWx0ID0gdGVzdC0+bW92ZU1vdXNlQW5kV2FpdFVudGlsTW91c2VUYXJnZXRDaGFu
Z2VkKDUsIDM1KTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0
X2lzX2xpbmsoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3Rf
cmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0KCF3
ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbWVkaWEoaGl0VGVzdFJlc3VsdCkpOwot
ICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfc2Nyb2xsYmFy
KGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2Nv
bnRleHRfaXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0KCF0ZXN0LT5t
X21vdXNlVGFyZ2V0TW9kaWZpZXJzKTsKLQotICAgIC8vIE1vdmUgb3ZlciBzY3JvbGxiYXIuCi0g
ICAgaGl0VGVzdFJlc3VsdCA9IHRlc3QtPm1vdmVNb3VzZUFuZFdhaXRVbnRpbE1vdXNlVGFyZ2V0
Q2hhbmdlZCg1LCA3NSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29u
dGV4dF9pc19saW5rKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90
ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2Vy
dCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQp
KTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRh
YmxlKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0
X2NvbnRleHRfaXNfc2Nyb2xsYmFyKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCghdGVz
dC0+bV9tb3VzZVRhcmdldE1vZGlmaWVycyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3
UGVybWlzc2lvblJlcXVlc3RzKFVJQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsK
LSAgICAvLyBTb21lIHZlcnNpb25zIG9mIGdlb2NsdWUgZ2l2ZSBhIHJ1bnRpbWUgd2FybmluZyBi
ZWNhdXNlIGl0IHRyaWVzCi0gICAgLy8gdG8gcmVnaXN0ZXIgdGhlIGVycm9yIHF1YXJrIHR3aWNl
LiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5ODU4LgotICAg
IC8vIE1ha2Ugd2FybmluZ3Mgbm9uLWZhdGFsIGZvciB0aGlzIHRlc3QgdG8gbWFrZSBpdCBwYXNz
LgotICAgIHRlc3QtPnJlbW92ZUxvZ0ZhdGFsRmxhZyhHX0xPR19MRVZFTF9XQVJOSU5HKTsKLSAg
ICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKLSAgICBzdGF0aWMgY29u
c3QgY2hhciogZ2VvbG9jYXRpb25SZXF1ZXN0SFRNTCA9Ci0gICAgICAgICI8aHRtbD4iCi0gICAg
ICAgICIgIDxzY3JpcHQ+IgotICAgICAgICAiICBmdW5jdGlvbiBydW5UZXN0KCkiCi0gICAgICAg
ICIgIHsiCi0gICAgICAgICIgICAgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3Np
dGlvbihmdW5jdGlvbihwKSB7IGRvY3VtZW50LnRpdGxlID0gXCJPS1wiIH0sIgotICAgICAgICAi
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oZSkg
eyBkb2N1bWVudC50aXRsZSA9IGUuY29kZSB9KTsiCi0gICAgICAgICIgIH0iCi0gICAgICAgICIg
IDwvc2NyaXB0PiIKLSAgICAgICAgIiAgPGJvZHkgb25sb2FkPSdydW5UZXN0KCk7Jz48L2JvZHk+
IgotICAgICAgICAiPC9odG1sPiI7Ci0KLSAgICAvLyBUZXN0IGRlbnlpbmcgYSBwZXJtaXNzaW9u
IHJlcXVlc3QuCi0gICAgdGVzdC0+bV9hbGxvd1Blcm1pc3Npb25SZXF1ZXN0cyA9IGZhbHNlOwot
ICAgIHRlc3QtPmxvYWRIdG1sKGdlb2xvY2F0aW9uUmVxdWVzdEhUTUwsIDApOwotICAgIHRlc3Qt
PndhaXRVbnRpbFRpdGxlQ2hhbmdlZCgpOwotCi0gICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBHZW9s
b2NhdGlvbiBBUEkgc3BlY2lmaWNhdGlvbiwgJzEnIGlzIHRoZQotICAgIC8vIGVycm9yIGNvZGUg
cmV0dXJuZWQgZm9yIHRoZSBQRVJNSVNTSU9OX0RFTklFRCBlcnJvci4KLSAgICAvLyBodHRwOi8v
ZGV2LnczLm9yZy9nZW8vYXBpL3NwZWMtc291cmNlLmh0bWwjcG9zaXRpb25fZXJyb3JfaW50ZXJm
YWNlCi0gICAgY29uc3QgZ2NoYXIqIHJlc3VsdCA9IHdlYmtpdF93ZWJfdmlld19nZXRfdGl0bGUo
dGVzdC0+bV93ZWJWaWV3KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIocmVzdWx0LCA9PSwgIjEiKTsK
LQotICAgIC8vIFRlc3QgYWxsb3dpbmcgYSBwZXJtaXNzaW9uIHJlcXVlc3QuCi0gICAgdGVzdC0+
bV9hbGxvd1Blcm1pc3Npb25SZXF1ZXN0cyA9IHRydWU7Ci0gICAgdGVzdC0+bG9hZEh0bWwoZ2Vv
bG9jYXRpb25SZXF1ZXN0SFRNTCwgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsVGl0bGVDaGFuZ2Vk
KCk7Ci0KLSAgICAvLyBDaGVjayB0aGF0IHdlIGRpZCBub3QgZ2V0IHRoZSBQRVJNSVNTSU9OX0RF
TklFRCBlcnJvciBub3cuCi0gICAgcmVzdWx0ID0gd2Via2l0X3dlYl92aWV3X2dldF90aXRsZSh0
ZXN0LT5tX3dlYlZpZXcpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihyZXN1bHQsICE9LCAiMSIpOwot
ICAgIHRlc3QtPmFkZExvZ0ZhdGFsRmxhZyhHX0xPR19MRVZFTF9XQVJOSU5HKTsKLX0KLQotY2xh
c3MgRmlsZUNob29zZXJUZXN0OiBwdWJsaWMgVUlDbGllbnRUZXN0IHsKLXB1YmxpYzoKLSAgICBN
QUtFX0dMSUJfVEVTVF9GSVhUVVJFKEZpbGVDaG9vc2VyVGVzdCk7Ci0KLSAgICBGaWxlQ2hvb3Nl
clRlc3QoKQotICAgIHsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJydW4t
ZmlsZS1jaG9vc2VyIiwgR19DQUxMQkFDSyhydW5GaWxlQ2hvb3NlckNhbGxiYWNrKSwgdGhpcyk7
Ci0gICAgfQotCi0gICAgc3RhdGljIGdib29sZWFuIHJ1bkZpbGVDaG9vc2VyQ2FsbGJhY2soV2Vi
S2l0V2ViVmlldyosIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCwgRmlsZUNob29z
ZXJUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+cnVuRmlsZUNob29zZXIocmVxdWVz
dCk7Ci0gICAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQotICAgIHZvaWQgcnVuRmlsZUNob29z
ZXIoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0KQotICAgIHsKLSAgICAgICAgYXNz
ZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChyZXF1ZXN0KSk7Ci0g
ICAgICAgIG1fZmlsZUNob29zZXJSZXF1ZXN0ID0gcmVxdWVzdDsKLSAgICAgICAgZ19tYWluX2xv
b3BfcXVpdChtX21haW5Mb29wKTsKLSAgICB9Ci0KLSAgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVl
c3QqIGNsaWNrTW91c2VCdXR0b25BbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0KGludCB4LCBp
bnQgeSkKLSAgICB7Ci0gICAgICAgIGNsaWNrTW91c2VCdXR0b24oeCwgeSk7Ci0gICAgICAgIGdf
bWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAgICAgICAgcmV0dXJuIG1fZmlsZUNob29zZXJS
ZXF1ZXN0LmdldCgpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBHUmVmUHRyPFdlYktpdEZpbGVD
aG9vc2VyUmVxdWVzdD4gbV9maWxlQ2hvb3NlclJlcXVlc3Q7Ci19OwotCi1zdGF0aWMgdm9pZCB0
ZXN0V2ViVmlld0ZpbGVDaG9vc2VyUmVxdWVzdChGaWxlQ2hvb3NlclRlc3QqIHRlc3QsIGdjb25z
dHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7
Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGZpbGVDaG9vc2VySFRNTEZvcm1hdCA9ICI8aHRtbD48
Ym9keT48aW5wdXQgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MDttYXJnaW46
MDtwYWRkaW5nOjAnIHR5cGU9J2ZpbGUnICVzLz48L2JvZHk+PC9odG1sPiI7Ci0KLSAgICAvLyBN
dWx0aXBsZSBzZWxlY3Rpb25zIG5vdCBhbGxvd2VkLCBubyBNSU1FIGZpbHRlcmluZy4KLSAgICBH
T3duUHRyPGNoYXI+IHNpbXBsZUZpbGVVcGxvYWRIVE1MKGdfc3RyZHVwX3ByaW50ZihmaWxlQ2hv
b3NlckhUTUxGb3JtYXQsICIiKSk7Ci0gICAgdGVzdC0+bG9hZEh0bWwoc2ltcGxlRmlsZVVwbG9h
ZEhUTUwuZ2V0KCksIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAg
IFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogZmlsZUNob29zZXJSZXF1ZXN0ID0gdGVzdC0+Y2xp
Y2tNb3VzZUJ1dHRvbkFuZFdhaXRGb3JGaWxlQ2hvb3NlclJlcXVlc3QoNSwgNSk7Ci0gICAgZ19h
c3NlcnQoIXdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxlKGZp
bGVDaG9vc2VyUmVxdWVzdCkpOwotCi0gICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBtaW1lVHlwZXMg
PSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMoZmlsZUNob29zZXJS
ZXF1ZXN0KTsKLSAgICBnX2Fzc2VydCghbWltZVR5cGVzKTsKLSAgICBHdGtGaWxlRmlsdGVyKiBm
aWx0ZXIgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVy
KGZpbGVDaG9vc2VyUmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQoIWZpbHRlcik7Ci0gICAgY29uc3Qg
Z2NoYXIqIGNvbnN0KiBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X2dldF9zZWxlY3RlZF9maWxlcyhmaWxlQ2hvb3NlclJlcXVlc3QpOwotICAgIGdfYXNzZXJ0KCFz
ZWxlY3RlZEZpbGVzKTsKLSAgICB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2FuY2VsKGZp
bGVDaG9vc2VyUmVxdWVzdCk7Ci0KLSAgICAvLyBNdWx0aXBsZSBzZWxlY3Rpb25zIGFsbG93ZWQs
IG5vIE1JTUUgZmlsdGVyaW5nLCBzb21lIHByZS1zZWxlY3RlZCBmaWxlcy4KLSAgICBHT3duUHRy
PGNoYXI+IG11bHRpcGxlU2VsZWN0aW9uRmlsZVVwbG9hZEhUTUwoZ19zdHJkdXBfcHJpbnRmKGZp
bGVDaG9vc2VySFRNTEZvcm1hdCwgIm11bHRpcGxlIikpOwotICAgIHRlc3QtPmxvYWRIdG1sKG11
bHRpcGxlU2VsZWN0aW9uRmlsZVVwbG9hZEhUTUwuZ2V0KCksIDApOwotICAgIHRlc3QtPndhaXRV
bnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGZpbGVDaG9vc2VyUmVxdWVzdCA9IHRlc3QtPmNsaWNr
TW91c2VCdXR0b25BbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0KDUsIDUpOwotICAgIGdfYXNz
ZXJ0KHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxlKGZpbGVD
aG9vc2VyUmVxdWVzdCkpOwotCi0gICAgbWltZVR5cGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9y
ZXF1ZXN0X2dldF9taW1lX3R5cGVzKGZpbGVDaG9vc2VyUmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQo
IW1pbWVUeXBlcyk7Ci0gICAgZmlsdGVyID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dl
dF9taW1lX3R5cGVzX2ZpbHRlcihmaWxlQ2hvb3NlclJlcXVlc3QpOwotICAgIGdfYXNzZXJ0KCFm
aWx0ZXIpOwotICAgIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rf
Z2V0X3NlbGVjdGVkX2ZpbGVzKGZpbGVDaG9vc2VyUmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQoIXNl
bGVjdGVkRmlsZXMpOwotCi0gICAgLy8gU2VsZWN0IHNvbWUgZmlsZXMuCi0gICAgY29uc3QgZ2No
YXIqIGZpbGVzVG9TZWxlY3RbNF0gPSB7ICIvZm9vIiwgIi9mb28vYmFyIiwgIi9mb28vYmFyL2Jh
eiIsIDAgfTsKLSAgICB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rfc2VsZWN0X2ZpbGVzKGZp
bGVDaG9vc2VyUmVxdWVzdCwgZmlsZXNUb1NlbGVjdCk7Ci0KLSAgICAvLyBDaGVjayB0aGUgZmls
ZXMgdGhhdCBoYXZlIGJlZW4ganVzdCBzZWxlY3RlZC4KLSAgICBzZWxlY3RlZEZpbGVzID0gd2Vi
a2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhmaWxlQ2hvb3NlclJl
cXVlc3QpOwotICAgIGdfYXNzZXJ0KHNlbGVjdGVkRmlsZXMpOwotICAgIGdfYXNzZXJ0X2NtcHN0
cihzZWxlY3RlZEZpbGVzWzBdLCA9PSwgIi9mb28iKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc2Vs
ZWN0ZWRGaWxlc1sxXSwgPT0sICIvZm9vL2JhciIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxl
Y3RlZEZpbGVzWzJdLCA9PSwgIi9mb28vYmFyL2JheiIpOwotICAgIGdfYXNzZXJ0KCFzZWxlY3Rl
ZEZpbGVzWzNdKTsKLQotICAgIC8vIFBlcmZvcm0gYW5vdGhlciByZXF1ZXN0IHRvIGNoZWNrIGlm
IHRoZSBsaXN0IG9mIGZpbGVzIHNlbGVjdGVkCi0gICAgLy8gaW4gdGhlIHByZXZpb3VzIHN0ZXAg
YXBwZWFycyBub3cgYXMgcGFydCBvZiB0aGUgbmV3IHJlcXVlc3QuCi0gICAgZmlsZUNob29zZXJS
ZXF1ZXN0ID0gdGVzdC0+Y2xpY2tNb3VzZUJ1dHRvbkFuZFdhaXRGb3JGaWxlQ2hvb3NlclJlcXVl
c3QoNSwgNSk7Ci0gICAgc2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVz
dF9nZXRfc2VsZWN0ZWRfZmlsZXMoZmlsZUNob29zZXJSZXF1ZXN0KTsKLSAgICBnX2Fzc2VydChz
ZWxlY3RlZEZpbGVzKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1swXSwgPT0s
ICIvZm9vIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMV0sID09LCAiL2Zv
by9iYXIiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1syXSwgPT0sICIvZm9v
L2Jhci9iYXoiKTsKLSAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxlc1szXSk7Ci0gICAgd2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNlbChmaWxlQ2hvb3NlclJlcXVlc3QpOwotCi0gICAg
Ly8gTXVsdGlwbGUgc2VsZWN0aW9ucyBub3QgYWxsb3dlZCwgb25seSBhY2NlcHQgaW1hZ2VzLCBh
dWRpbyBhbmQgdmlkZW8gZmlsZXMuLgotICAgIEdPd25QdHI8Y2hhcj4gbWltZUZpbHRlcmVkRmls
ZVVwbG9hZEhUTUwoZ19zdHJkdXBfcHJpbnRmKGZpbGVDaG9vc2VySFRNTEZvcm1hdCwgImFjY2Vw
dD0nYXVkaW8vKix2aWRlby8qLGltYWdlLyonIikpOwotICAgIHRlc3QtPmxvYWRIdG1sKG1pbWVG
aWx0ZXJlZEZpbGVVcGxvYWRIVE1MLmdldCgpLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2Fk
RmluaXNoZWQoKTsKLSAgICBmaWxlQ2hvb3NlclJlcXVlc3QgPSB0ZXN0LT5jbGlja01vdXNlQnV0
dG9uQW5kV2FpdEZvckZpbGVDaG9vc2VyUmVxdWVzdCg1LCA1KTsKLSAgICBnX2Fzc2VydCghd2Vi
a2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RfbXVsdGlwbGUoZmlsZUNob29zZXJS
ZXF1ZXN0KSk7Ci0KLSAgICBtaW1lVHlwZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rf
Z2V0X21pbWVfdHlwZXMoZmlsZUNob29zZXJSZXF1ZXN0KTsKLSAgICBnX2Fzc2VydChtaW1lVHlw
ZXMpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihtaW1lVHlwZXNbMF0sID09LCAiYXVkaW8vKiIpOwot
ICAgIGdfYXNzZXJ0X2NtcHN0cihtaW1lVHlwZXNbMV0sID09LCAidmlkZW8vKiIpOwotICAgIGdf
YXNzZXJ0X2NtcHN0cihtaW1lVHlwZXNbMl0sID09LCAiaW1hZ2UvKiIpOwotICAgIGdfYXNzZXJ0
KCFtaW1lVHlwZXNbM10pOwotCi0gICAgZmlsdGVyID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1
ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcihmaWxlQ2hvb3NlclJlcXVlc3QpOwotICAgIGdfYXNz
ZXJ0KEdUS19JU19GSUxFX0ZJTFRFUihmaWx0ZXIpKTsKLSAgICBnX2Fzc2VydChjaGVja01pbWVU
eXBlRm9yRmlsdGVyKGZpbHRlciwgImF1ZGlvLyoiKSk7Ci0gICAgZ19hc3NlcnQoY2hlY2tNaW1l
VHlwZUZvckZpbHRlcihmaWx0ZXIsICJ2aWRlby8qIikpOwotICAgIGdfYXNzZXJ0KGNoZWNrTWlt
ZVR5cGVGb3JGaWx0ZXIoZmlsdGVyLCAiaW1hZ2UvKiIpKTsKLQotICAgIHNlbGVjdGVkRmlsZXMg
PSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKGZpbGVDaG9v
c2VyUmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQoIXNlbGVjdGVkRmlsZXMpOwotICAgIHdlYmtpdF9m
aWxlX2Nob29zZXJfcmVxdWVzdF9jYW5jZWwoZmlsZUNob29zZXJSZXF1ZXN0KTsKLX0KLQotdm9p
ZCBiZWZvcmVBbGwoKQotewotICAgIFVJQ2xpZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3Iiwg
ImNyZWF0ZS1yZWFkeS1jbG9zZSIsIHRlc3RXZWJWaWV3Q3JlYXRlUmVhZHlDbG9zZSk7Ci0gICAg
TW9kYWxEaWFsb2dzVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImFsbG93LW1vZGFsLWRpYWxv
Z3MiLCB0ZXN0V2ViVmlld0FsbG93TW9kYWxEaWFsb2dzKTsKLSAgICBNb2RhbERpYWxvZ3NUZXN0
OjphZGQoIldlYktpdFdlYlZpZXciLCAiZGlzYWxsb3ctbW9kYWwtZGlhbG9ncyIsIHRlc3RXZWJW
aWV3RGlzYWxsb3dNb2RhbERpYWxvZ3MpOwotICAgIFVJQ2xpZW50VGVzdDo6YWRkKCJXZWJLaXRX
ZWJWaWV3IiwgImphdmFzY3JpcHQtZGlhbG9ncyIsIHRlc3RXZWJWaWV3SmF2YVNjcmlwdERpYWxv
Z3MpOwotICAgIFVJQ2xpZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgIndpbmRvdy1wcm9w
ZXJ0aWVzIiwgdGVzdFdlYlZpZXdXaW5kb3dQcm9wZXJ0aWVzKTsKLSAgICBVSUNsaWVudFRlc3Q6
OmFkZCgiV2ViS2l0V2ViVmlldyIsICJtb3VzZS10YXJnZXQiLCB0ZXN0V2ViVmlld01vdXNlVGFy
Z2V0KTsKLSAgICBVSUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJwZXJtaXNzaW9u
LXJlcXVlc3RzIiwgdGVzdFdlYlZpZXdQZXJtaXNzaW9uUmVxdWVzdHMpOwotICAgIEZpbGVDaG9v
c2VyVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImZpbGUtY2hvb3Nlci1yZXF1ZXN0IiwgdGVz
dFdlYlZpZXdGaWxlQ2hvb3NlclJlcXVlc3QpOwotfQotCi12b2lkIGFmdGVyQWxsKCkKLXsKLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RX
ZWJFeHRlbnNpb25zLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L1Rlc3RXZWJFeHRlbnNpb25zLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTFj
YjdhYS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0
cy9UZXN0V2ViRXh0ZW5zaW9ucy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxOTUgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
LSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotCi0jaW5jbHVkZSAiV2ViS2l0VGVzdEJ1cy5oIgotI2luY2x1ZGUgIldlYlZpZXdUZXN0Lmgi
Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgotCi1zdGF0aWMgV2ViS2l0VGVzdEJ1
cyogYnVzOwotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViRXh0ZW5zaW9uR2V0VGl0bGUoV2ViVmlld1Rl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxo
ZWFkPjx0aXRsZT5XZWJLaXRHVEsrIFdlYiBFeHRlbnNpb25zIFRlc3Q8L3RpdGxlPjwvaGVhZD48
Ym9keT48L2JvZHk+PC9odG1sPiIsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hl
ZCgpOwotCi0gICAgR1JlZlB0cjxHREJ1c1Byb3h5PiBwcm94eSA9IGFkb3B0R1JlZihidXMtPmNy
ZWF0ZVByb3h5KCJvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwKLSAgICAgICAgIi9v
cmcvd2Via2l0L2d0ay9XZWJFeHRlbnNpb25UZXN0IiAsICJvcmcud2Via2l0Lmd0ay5XZWJFeHRl
bnNpb25UZXN0IiwgdGVzdC0+bV9tYWluTG9vcCkpOwotICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHJl
c3VsdCA9IGFkb3B0R1JlZihnX2RidXNfcHJveHlfY2FsbF9zeW5jKAotICAgICAgICBwcm94eS5n
ZXQoKSwKLSAgICAgICAgIkdldFRpdGxlIiwKLSAgICAgICAgZ192YXJpYW50X25ldygiKHQpIiwg
d2Via2l0X3dlYl92aWV3X2dldF9wYWdlX2lkKHRlc3QtPm1fd2ViVmlldykpLAotICAgICAgICBH
X0RCVVNfQ0FMTF9GTEFHU19OT05FLAotICAgICAgICAtMSwgMCwgMCkpOwotICAgIGdfYXNzZXJ0
KHJlc3VsdCk7Ci0KLSAgICBjb25zdCBjaGFyKiB0aXRsZTsKLSAgICBnX3ZhcmlhbnRfZ2V0KHJl
c3VsdC5nZXQoKSwgIigmcykiLCAmdGl0bGUpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih0aXRsZSwg
PT0sICJXZWJLaXRHVEsrIFdlYiBFeHRlbnNpb25zIFRlc3QiKTsKLX0KLQotc3RhdGljIHZvaWQg
ZG9jdW1lbnRMb2FkZWRDYWxsYmFjayhHREJ1c0Nvbm5lY3Rpb24qLCBjb25zdCBjaGFyKiwgY29u
c3QgY2hhciosIGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgR1ZhcmlhbnQqLCBXZWJWaWV3VGVz
dCogdGVzdCkKLXsKLSAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOwotfQot
Ci1zdGF0aWMgdm9pZCB0ZXN0RG9jdW1lbnRMb2FkZWRTaWduYWwoV2ViVmlld1Rlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIpCi17Ci0gICAgR1JlZlB0cjxHREJ1c1Byb3h5PiBwcm94eSA9IGFkb3B0
R1JlZihidXMtPmNyZWF0ZVByb3h5KCJvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwK
LSAgICAgICAgIi9vcmcvd2Via2l0L2d0ay9XZWJFeHRlbnNpb25UZXN0IiwgIm9yZy53ZWJraXQu
Z3RrLldlYkV4dGVuc2lvblRlc3QiLCB0ZXN0LT5tX21haW5Mb29wKSk7Ci0gICAgR0RCdXNDb25u
ZWN0aW9uKiBjb25uZWN0aW9uID0gZ19kYnVzX3Byb3h5X2dldF9jb25uZWN0aW9uKHByb3h5Lmdl
dCgpKTsKLSAgICBndWludCBpZCA9IGdfZGJ1c19jb25uZWN0aW9uX3NpZ25hbF9zdWJzY3JpYmUo
Y29ubmVjdGlvbiwKLSAgICAgICAgMCwKLSAgICAgICAgIm9yZy53ZWJraXQuZ3RrLldlYkV4dGVu
c2lvblRlc3QiLAotICAgICAgICAiRG9jdW1lbnRMb2FkZWQiLAotICAgICAgICAiL29yZy93ZWJr
aXQvZ3RrL1dlYkV4dGVuc2lvblRlc3QiLAotICAgICAgICAwLAotICAgICAgICBHX0RCVVNfU0lH
TkFMX0ZMQUdTX05PTkUsCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0RCdXNTaWduYWxDYWxs
YmFjaz4oZG9jdW1lbnRMb2FkZWRDYWxsYmFjayksCi0gICAgICAgIHRlc3QsCi0gICAgICAgIDAp
OwotICAgIGdfYXNzZXJ0KGlkKTsKLQotICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48aGVhZD48
dGl0bGU+V2ViS2l0R1RLKyBXZWIgRXh0ZW5zaW9ucyBUZXN0PC90aXRsZT48L2hlYWQ+PGJvZHk+
PC9ib2R5PjwvaHRtbD4iLCAwKTsKLSAgICBnX21haW5fbG9vcF9ydW4odGVzdC0+bV9tYWluTG9v
cCk7Ci0gICAgZ19kYnVzX2Nvbm5lY3Rpb25fc2lnbmFsX3Vuc3Vic2NyaWJlKGNvbm5lY3Rpb24s
IGlkKTsKLX0KLQotc3RhdGljIGdib29sZWFuIHdlYlByb2Nlc3NDcmFzaGVkQ2FsbGJhY2soV2Vi
S2l0V2ViVmlldyosIFdlYlZpZXdUZXN0KiB0ZXN0KQotewotICAgIHRlc3QtPnF1aXRNYWluTG9v
cCgpOwotCi0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViS2l0V2Vi
Vmlld1Byb2Nlc3NDcmFzaGVkKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewot
ICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48L2h0bWw+IiwgMCk7Ci0gICAgdGVzdC0+d2FpdFVu
dGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KHRlc3QtPm1fd2ViVmll
dywgIndlYi1wcm9jZXNzLWNyYXNoZWQiLAotICAgICAgICBHX0NBTExCQUNLKHdlYlByb2Nlc3ND
cmFzaGVkQ2FsbGJhY2spLCB0ZXN0KTsKLQotICAgIEdSZWZQdHI8R0RCdXNQcm94eT4gcHJveHkg
PSBhZG9wdEdSZWYoYnVzLT5jcmVhdGVQcm94eSgib3JnLndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9u
VGVzdCIsCi0gICAgICAgICIvb3JnL3dlYmtpdC9ndGsvV2ViRXh0ZW5zaW9uVGVzdCIsICJvcmcu
d2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwgdGVzdC0+bV9tYWluTG9vcCkpOwotCi0gICAg
R1JlZlB0cjxHVmFyaWFudD4gcmVzdWx0ID0gYWRvcHRHUmVmKGdfZGJ1c19wcm94eV9jYWxsX3N5
bmMoCi0gICAgICAgIHByb3h5LmdldCgpLAotICAgICAgICAiQWJvcnRQcm9jZXNzIiwKLSAgICAg
ICAgMCwKLSAgICAgICAgR19EQlVTX0NBTExfRkxBR1NfTk9ORSwKLSAgICAgICAgLTEsIDAsIDAp
KTsKLSAgICBnX2Fzc2VydCghcmVzdWx0KTsKLSAgICBnX21haW5fbG9vcF9ydW4odGVzdC0+bV9t
YWluTG9vcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJFeHRlbnNpb25XaW5kb3dPYmplY3RD
bGVhcmVkKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxv
YWRIdG1sKCI8aHRtbD48aGVhZGVyPjwvaGVhZGVyPjxib2R5PjwvYm9keT48L2h0bWw+IiwgMCk7
Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBHT3duUHRyPEdFcnJv
cj4gZXJyb3I7Ci0gICAgV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCogamF2YXNjcmlwdFJlc3VsdCA9
IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgid2luZG93LmVjaG8oJ0Zv
bycpOyIsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7
Ci0gICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKLSAgICBHT3duUHRyPGNoYXI+IHZhbHVlU3Ry
aW5nKFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1
bHQpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAiRm9vIik7
Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBzY3JpcHREaWFsb2dDYWxsYmFjayhXZWJLaXRXZWJWaWV3
KiwgV2ViS2l0U2NyaXB0RGlhbG9nKiBkaWFsb2csIGNoYXIqKiByZXN1bHQpCi17Ci0gICAgZ19h
c3NlcnRfY21wdWludCh3ZWJraXRfc2NyaXB0X2RpYWxvZ19nZXRfZGlhbG9nX3R5cGUoZGlhbG9n
KSwgPT0sIFdFQktJVF9TQ1JJUFRfRElBTE9HX0FMRVJUKTsKLSAgICBnX2Fzc2VydCghKnJlc3Vs
dCk7Ci0gICAgKnJlc3VsdCA9IGdfc3RyZHVwKHdlYmtpdF9zY3JpcHRfZGlhbG9nX2dldF9tZXNz
YWdlKGRpYWxvZykpOwotICAgIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZCBydW5KYXZh
U2NyaXB0SW5Jc29sYXRlZFdvcmxkRmluaXNoZWRDYWxsYmFjayhHREJ1c1Byb3h5KiBwcm94eSwg
R0FzeW5jUmVzdWx0KiByZXN1bHQsIFdlYlZpZXdUZXN0KiB0ZXN0KQotewotICAgIGdfZGJ1c19w
cm94eV9jYWxsX2ZpbmlzaChwcm94eSwgcmVzdWx0LCAwKTsKLSAgICBnX21haW5fbG9vcF9xdWl0
KHRlc3QtPm1fbWFpbkxvb3ApOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViRXh0ZW5zaW9uSXNv
bGF0ZWRXb3JsZChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0
LT5sb2FkSHRtbCgiPGh0bWw+PGhlYWRlcj48L2hlYWRlcj48Ym9keT48ZGl2IGlkPSdjb25zb2xl
Jz48L2Rpdj48L2JvZHk+PC9odG1sPiIsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5p
c2hlZCgpOwotCi0gICAgR093blB0cjxjaGFyPiByZXN1bHQ7Ci0gICAgZ3Vsb25nIHNjcmlwdERp
YWxvZ0lEID0gZ19zaWduYWxfY29ubmVjdCh0ZXN0LT5tX3dlYlZpZXcsICJzY3JpcHQtZGlhbG9n
IiwgR19DQUxMQkFDSyhzY3JpcHREaWFsb2dDYWxsYmFjayksICZyZXN1bHQub3V0UHRyKCkpOwot
Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIgKm1haW5Xb3JsZFNjcmlwdCA9Ci0gICAgICAgICJ0b3Au
Zm9vID0gJ0Zvbyc7XG4iCi0gICAgICAgICJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29s
ZScpLmlubmVySFRNTCA9IHRvcC5mb287XG4iCi0gICAgICAgICJ3aW5kb3cub3BlbiA9IGZ1bmN0
aW9uICgpIHsgYWxlcnQoJ01haW4gV29ybGQnKTsgfVxuIgotICAgICAgICAiZG9jdW1lbnQub3Bl
bigxLCAyLCAzKTsiOwotICAgIHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hl
ZChtYWluV29ybGRTY3JpcHQsIDApOwotICAgIGdfYXNzZXJ0X2NtcHN0cihyZXN1bHQuZ2V0KCks
ID09LCAiTWFpbiBXb3JsZCIpOwotICAgIHJlc3VsdC5jbGVhcigpOwotCi0gICAgV2ViS2l0SmF2
YXNjcmlwdFJlc3VsdCogamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRX
YWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5pbm5l
ckhUTUwiLCAwKTsKLSAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBHT3duUHRy
PGNoYXI+IHZhbHVlU3RyaW5nKFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5n
KGphdmFzY3JpcHRSZXN1bHQpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0
KCksID09LCAiRm9vIik7Ci0KLSAgICBzdGF0aWMgY29uc3QgY2hhciAqaXNvbGF0ZWRXb3JsZFNj
cmlwdCA9Ci0gICAgICAgICJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmlubmVy
SFRNTCA9IHRvcC5mb287XG4iCi0gICAgICAgICJ3aW5kb3cub3BlbiA9IGZ1bmN0aW9uICgpIHsg
YWxlcnQoJ0lzb2xhdGVkIFdvcmxkJyk7IH1cbiIKLSAgICAgICAgImRvY3VtZW50Lm9wZW4oMSwg
MiwgMyk7IjsKLSAgICBHUmVmUHRyPEdEQnVzUHJveHk+IHByb3h5ID0gYWRvcHRHUmVmKGJ1cy0+
Y3JlYXRlUHJveHkoIm9yZy53ZWJraXQuZ3RrLldlYkV4dGVuc2lvblRlc3QiLAotICAgICAgICAi
L29yZy93ZWJraXQvZ3RrL1dlYkV4dGVuc2lvblRlc3QiICwgIm9yZy53ZWJraXQuZ3RrLldlYkV4
dGVuc2lvblRlc3QiLCB0ZXN0LT5tX21haW5Mb29wKSk7Ci0gICAgZ19kYnVzX3Byb3h5X2NhbGwo
cHJveHkuZ2V0KCksCi0gICAgICAgICJSdW5KYXZhU2NyaXB0SW5Jc29sYXRlZFdvcmxkIiwKLSAg
ICAgICAgZ192YXJpYW50X25ldygiKHQmcykiLCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3BhZ2VfaWQo
dGVzdC0+bV93ZWJWaWV3KSwgaXNvbGF0ZWRXb3JsZFNjcmlwdCksCi0gICAgICAgIEdfREJVU19D
QUxMX0ZMQUdTX05PTkUsCi0gICAgICAgIC0xLCAwLAotICAgICAgICByZWludGVycHJldF9jYXN0
PEdBc3luY1JlYWR5Q2FsbGJhY2s+KHJ1bkphdmFTY3JpcHRJbklzb2xhdGVkV29ybGRGaW5pc2hl
ZENhbGxiYWNrKSwKLSAgICAgICAgdGVzdCk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKHRlc3QtPm1f
bWFpbkxvb3ApOwotICAgIGdfYXNzZXJ0X2NtcHN0cihyZXN1bHQuZ2V0KCksID09LCAiSXNvbGF0
ZWQgV29ybGQiKTsKLSAgICByZXN1bHQuY2xlYXIoKTsKLQotICAgIC8vIENoZWNrIHRoYXQgJ3Rv
cC5mb28nIGRlZmluZWQgaW4gbWFpbiB3b3JsZCBpcyBub3QgdmlzaWJsZSBpbiBpc29sYXRlZCB3
b3JsZC4KLSAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRV
bnRpbEZpbmlzaGVkKCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmlubmVySFRN
TCIsIDApOwotICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOwotICAgIHZhbHVlU3RyaW5n
LnNldChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVz
dWx0KSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgInVuZGVm
aW5lZCIpOwotCi0gICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KHRlc3QtPm1fd2ViVmll
dywgc2NyaXB0RGlhbG9nSUQpOwotfQotCi12b2lkIGJlZm9yZUFsbCgpCi17Ci0gICAgd2Via2l0
X3dlYl9jb250ZXh0X3NldF93ZWJfZXh0ZW5zaW9uc19kaXJlY3Rvcnkod2Via2l0X3dlYl9jb250
ZXh0X2dldF9kZWZhdWx0KCksIFdFQktJVF9URVNUX1dFQl9FWFRFTlNJT05TX0RJUik7Ci0gICAg
YnVzID0gbmV3IFdlYktpdFRlc3RCdXMoKTsKLSAgICBpZiAoIWJ1cy0+cnVuKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYkV4dGVuc2lvbiIsICJk
b20tZG9jdW1lbnQtdGl0bGUiLCB0ZXN0V2ViRXh0ZW5zaW9uR2V0VGl0bGUpOwotICAgIFdlYlZp
ZXdUZXN0OjphZGQoIldlYktpdFdlYkV4dGVuc2lvbiIsICJkb2N1bWVudC1sb2FkZWQtc2lnbmFs
IiwgdGVzdERvY3VtZW50TG9hZGVkU2lnbmFsKTsKLSAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJL
aXRXZWJWaWV3IiwgIndlYi1wcm9jZXNzLWNyYXNoZWQiLCB0ZXN0V2ViS2l0V2ViVmlld1Byb2Nl
c3NDcmFzaGVkKTsKLSAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJFeHRlbnNpb24iLCAi
d2luZG93LW9iamVjdC1jbGVhcmVkIiwgdGVzdFdlYkV4dGVuc2lvbldpbmRvd09iamVjdENsZWFy
ZWQpOwotICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYkV4dGVuc2lvbiIsICJpc29sYXRl
ZC13b3JsZCIsIHRlc3RXZWJFeHRlbnNpb25Jc29sYXRlZFdvcmxkKTsKLX0KLQotdm9pZCBhZnRl
ckFsbCgpCi17Ci0gICAgZGVsZXRlIGJ1czsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRBY2Nlc3NpYmls
aXR5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFiZDM4My4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0QWNj
ZXNzaWJpbGl0eS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMjUgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5j
bHVkZSAiVGVzdE1haW4uaCIKLSNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgotCi0vLyBUaGUgbGli
YXRzcGkgaGVhZGVycyBkb24ndCB1c2UgR19CRUdJTl9ERUNMUwotZXh0ZXJuICJDIiB7Ci0jaW5j
bHVkZSA8YXRzcGkvYXRzcGkuaD4KLX0KLQotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8
ZmNudGwuaD4KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0jaW5jbHVk
ZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYv
Z29iamVjdC9HT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgotCi0v
LyBOYW1lIG9mIHRoZSB0ZXN0IHNlcnZlciBhcHBsaWNhdGlvbiBjcmVhdGluZyB0aGUgd2ViVmll
dyBvYmplY3QuCi1zdGF0aWMgY29uc3QgY2hhcioga1Rlc3RTZXJ2ZXJBcHBOYW1lID0gIkFjY2Vz
c2liaWxpdHlUZXN0U2VydmVyIjsKLQotLy8gTWF4IHNlY29uZHMgdG8gd2FpdCBmb3IgdGhlIHRl
c3Qgc2VydmVyIGJlZm9yZSBpbnNwZWN0aW5nIGl0Lgotc3RhdGljIGNvbnN0IGludCBrTWF4V2Fp
dEZvckNoaWxkID0gNTsKLQotLy8gVGhlIFBJRCBmb3IgdGhlIHRlc3Qgc2VydmVyIHJ1bm5pbmcs
IHNvIHdlIGNhbiBraWxsIGl0IGlmIG5lZWRlZC4KLXN0YXRpYyBHUGlkIGtDaGlsZFByb2Nlc3NQ
aWQgPSAwOwotCi0vLyBXaGV0aGVyIHRoZSBjaGlsZCBoYXMgcmVwbGllZCBhbmQgaXQncyByZWFk
eS4KLXN0YXRpYyBib29sIGtDaGlsZElzUmVhZHkgPSBmYWxzZTsKLQotc3RhdGljIHZvaWQgc3Rv
cFRlc3RTZXJ2ZXIoKQotewotICAgIC8vIERvIG5vdGhpbmcgaWYgdGhlcmUncyBubyBzZXJ2ZXIg
cnVubmluZy4KLSAgICBpZiAoIWtDaGlsZFByb2Nlc3NQaWQpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGdfc3Bhd25fY2xvc2VfcGlkKGtDaGlsZFByb2Nlc3NQaWQpOwotICAgIGtpbGwoa0NoaWxk
UHJvY2Vzc1BpZCwgU0lHVEVSTSk7Ci0gICAga0NoaWxkUHJvY2Vzc1BpZCA9IDA7Ci19Ci0KLXN0
YXRpYyB2b2lkIHNpZ0Fib3J0SGFuZGxlcihpbnQgc2lnTnVtKQotewotICAgIC8vIEp1c3Qgc3Rv
cCB0aGUgdGVzdCBzZXJ2ZXIgaWYgU0lHQUJSVCB3YXMgcmVjZWl2ZWQuCi0gICAgc3RvcFRlc3RT
ZXJ2ZXIoKTsKLX0KLQotc3RhdGljIGdwb2ludGVyIHRlc3RTZXJ2ZXJNb25pdG9yVGhyZWFkRnVu
YyhncG9pbnRlcikKLXsKLSAgICAvLyBXYWl0IGZvciB0aGUgc3BlY2lmaWVkIHRpbWVvdXQgdG8g
aGFwcGVuLgotICAgIGdfdXNsZWVwKGtNYXhXYWl0Rm9yQ2hpbGQgKiBHX1VTRUNfUEVSX1NFQyk7
Ci0KLSAgICAvLyBLaWxsIHRoZSBjaGlsZCBwcm9jZXNzIGlmIG5vdCByZWFkeSB5ZXQuCi0gICAg
aWYgKCFrQ2hpbGRJc1JlYWR5KQotICAgICAgICBzdG9wVGVzdFNlcnZlcigpOwotCi0gICAgZ190
aHJlYWRfZXhpdCgwKTsKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgc3RhcnRUZXN0
U2VydmVyTW9uaXRvcigpCi17Ci0gICAga0NoaWxkSXNSZWFkeSA9IGZhbHNlOwotICAgIGdfdGhy
ZWFkX25ldygiVGVzdFNlcnZlck1vbml0b3IiLCB0ZXN0U2VydmVyTW9uaXRvclRocmVhZEZ1bmMs
IDApOwotfQotCi1zdGF0aWMgdm9pZCBzdGFydFRlc3RTZXJ2ZXIoKQotewotICAgIC8vIFByZXBh
cmUgYXJndltdIGZvciBzcGF3bmluZyB0aGUgc2VydmVyIHByb2Nlc3MuCi0gICAgR093blB0cjxj
aGFyPiB0ZXN0U2VydmVyUGF0aChnX2J1aWxkX2ZpbGVuYW1lKFdFQktJVF9FWEVDX1BBVEgsICJX
ZWJLaXQyR09iamVjdEFQSVRlc3RzIiwga1Rlc3RTZXJ2ZXJBcHBOYW1lLCBOVUxMKSk7Ci0KLSAg
ICBjaGFyKiB0ZXN0U2VydmVyQXJndlsyXTsKLSAgICB0ZXN0U2VydmVyQXJndlswXSA9IHRlc3RT
ZXJ2ZXJQYXRoLmdldCgpOwotICAgIHRlc3RTZXJ2ZXJBcmd2WzFdID0gMDsKLQotICAgIC8vIFNw
YXduIHRoZSBzZXJ2ZXIsIGdldHRpbmcgaXRzIHN0ZG91dCBmaWxlIGRlc2NyaXB0b3IgdG8gc2V0
IGEKLSAgICAvLyBjb21tdW5pY2F0aW9uIGNoYW5uZWwsIHNvIHdlIGtub3cgd2hlbiBpdCdzIHJl
YWR5LgotICAgIGludCBjaGlsZFN0ZG91dCA9IDA7Ci0gICAgaWYgKCFnX3NwYXduX2FzeW5jX3dp
dGhfcGlwZXMoMCwgdGVzdFNlcnZlckFyZ3YsIDAsIHN0YXRpY19jYXN0PEdTcGF3bkZsYWdzPigw
KSwgMCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma0NoaWxkUHJvY2Vz
c1BpZCwgMCwgJmNoaWxkU3Rkb3V0LCAwLCAwKSkgewotICAgICAgICBjbG9zZShjaGlsZFN0ZG91
dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBTdGFydCBtb25pdG9yaW5nIHRo
ZSB0ZXN0IHNlcnZlciAoaW4gYSBzZXBhcmF0ZSB0aHJlYWQpIHRvCi0gICAgLy8gZW5zdXJlIHdl
IGRvbid0IGJsb2NrIG9uIHRoZSBjaGlsZCBwcm9jZXNzIG1vcmUgdGhhbiBhIHRpbWVvdXQuCi0g
ICAgc3RhcnRUZXN0U2VydmVyTW9uaXRvcigpOwotCi0gICAgY2hhciBtc2dbMl07Ci0gICAgR0lP
Q2hhbm5lbCogaW9DaGFubmVsID0gZ19pb19jaGFubmVsX3VuaXhfbmV3KGNoaWxkU3Rkb3V0KTsK
LSAgICBpZiAoZ19pb19jaGFubmVsX3JlYWRfY2hhcnMoaW9DaGFubmVsLCBtc2csIDIsIDAsIDAp
ID09IEdfSU9fU1RBVFVTX05PUk1BTCkgewotICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBz
ZXJ2ZXIgc2VudCBhIG1lc3NhZ2Ugc2F5aW5nIGl0J3MgcmVhZHkKLSAgICAgICAgLy8gYW5kIHN0
b3JlIHRoZSByZXN1bHQgZ2xvYmFsbHksIHNvIHRoZSBtb25pdG9yIGNhbiBzZWUgaXQuCi0gICAg
ICAgIGtDaGlsZElzUmVhZHkgPSBtc2dbMF0gPT0gJ08nICYmIG1zZ1sxXSA9PSAnSyc7Ci0gICAg
fQotICAgIGdfaW9fY2hhbm5lbF91bnJlZihpb0NoYW5uZWwpOwotICAgIGNsb3NlKGNoaWxkU3Rk
b3V0KTsKLQotICAgIC8vIFRoZSB0aW1lb3V0IHdhcyByZWFjaGVkIGFuZCB0aGUgc2VydmVyIGlz
IG5vdCByZWFkeSB5ZXQsIHNvCi0gICAgLy8gc3RvcCBpdCBpbm1lZGlhdGVseSwgYW5kIGxldCB0
aGUgdW5pdCB0ZXN0cyBmYWlsLgotICAgIGlmICgha0NoaWxkSXNSZWFkeSkKLSAgICAgICAgc3Rv
cFRlc3RTZXJ2ZXIoKTsKLX0KLQotc3RhdGljIHZvaWQgY2hlY2tBdHNwaUFjY2Vzc2libGUoQXRz
cGlBY2Nlc3NpYmxlKiBhY2Nlc3NpYmxlLCBjb25zdCBjaGFyKiB0YXJnZXROYW1lLCBBdHNwaVJv
bGUgdGFyZ2V0Um9sZSkKLXsKLSAgICBnX2Fzc2VydChBVFNQSV9JU19BQ0NFU1NJQkxFKGFjY2Vz
c2libGUpKTsKLQotICAgIEdPd25QdHI8Y2hhcj4gbmFtZShhdHNwaV9hY2Nlc3NpYmxlX2dldF9u
YW1lKGFjY2Vzc2libGUsIDApKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGFyZ2V0TmFtZSwgPT0s
IG5hbWUuZ2V0KCkpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0YXJnZXRSb2xlLCA9PSwgYXRzcGlf
YWNjZXNzaWJsZV9nZXRfcm9sZShhY2Nlc3NpYmxlLCAwKSk7Ci19Ci0KLXN0YXRpYyBHUmVmUHRy
PEF0c3BpQWNjZXNzaWJsZT4gZmluZFRlc3RTZXJ2ZXJBcHBsaWNhdGlvbigpCi17Ci0gICAgLy8g
T25seSBvbmUgZGVza3RvcCBpcyBzdXBwb3J0ZWQgYnkgQVRTUEkgYXQgdGhlIG1vbWVudC4KLSAg
ICBHUmVmUHRyPEF0c3BpQWNjZXNzaWJsZT4gZGVza3RvcCA9IGFkb3B0R1JlZihhdHNwaV9nZXRf
ZGVza3RvcCgwKSk7Ci0KLSAgICAvLyBMb29rIGZvciB0aGUgc2VydmVyIGFwcGxpY2F0aW9uIGlu
IHRoZSBsaXN0IG9mIGFwcHMuCi0gICAgR1JlZlB0cjxBdHNwaUFjY2Vzc2libGU+IGN1cnJlbnQ7
Ci0gICAgaW50IGNoaWxkQ291bnQgPSBhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9jb3VudChk
ZXNrdG9wLmdldCgpLCAwKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkQ291bnQ7IGkr
KykgewotICAgICAgICBjdXJyZW50ID0gYWRvcHRHUmVmKGF0c3BpX2FjY2Vzc2libGVfZ2V0X2No
aWxkX2F0X2luZGV4KGRlc2t0b3AuZ2V0KCksIGksIDApKTsKLSAgICAgICAgaWYgKCFnX3N0cmNt
cDAoYXRzcGlfYWNjZXNzaWJsZV9nZXRfbmFtZShjdXJyZW50LmdldCgpLCAwKSwga1Rlc3RTZXJ2
ZXJBcHBOYW1lKSkKLSAgICAgICAgICAgIHJldHVybiBjdXJyZW50OwotICAgIH0KLQotICAgIHJl
dHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0QXRzcGlCYXNpY0hpZXJhcmNoeShXZWJWaWV3
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICAvLyBUaGUgdGVzdCBzZXJ2ZXIncyBh
Y2Nlc3NpYmlsaXR5IG9iamVjdCAoVUkgUHJvY2VzcykuCi0gICAgR1JlZlB0cjxBdHNwaUFjY2Vz
c2libGU+IHRlc3RTZXJ2ZXJBcHAgPSBmaW5kVGVzdFNlcnZlckFwcGxpY2F0aW9uKCk7Ci0gICAg
Z19hc3NlcnQoQVRTUElfSVNfQUNDRVNTSUJMRSh0ZXN0U2VydmVyQXBwLmdldCgpKSk7Ci0gICAg
Y2hlY2tBdHNwaUFjY2Vzc2libGUodGVzdFNlcnZlckFwcC5nZXQoKSwgIkFjY2Vzc2liaWxpdHlU
ZXN0U2VydmVyIiwgQVRTUElfUk9MRV9BUFBMSUNBVElPTik7Ci0KLSAgICAvLyBUaGUgbWFpbiB3
aW5kb3cncyBhY2Nlc3NpYmlsaXR5IG9iamVjdCAoVUkgUHJvY2VzcykuCi0gICAgR1JlZlB0cjxB
dHNwaUFjY2Vzc2libGU+IGN1cnJlbnRQYXJlbnQgPSB0ZXN0U2VydmVyQXBwOwotICAgIEdSZWZQ
dHI8QXRzcGlBY2Nlc3NpYmxlPiBjdXJyZW50Q2hpbGQgPSBhZG9wdEdSZWYoYXRzcGlfYWNjZXNz
aWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoY3VycmVudFBhcmVudC5nZXQoKSwgMCwgMCkpOwotICAg
IGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY3VycmVudENoaWxkLmdldCgpKSk7Ci0gICAg
Y2hlY2tBdHNwaUFjY2Vzc2libGUoY3VycmVudENoaWxkLmdldCgpLCAiIiwgQVRTUElfUk9MRV9G
UkFNRSk7Ci0KLSAgICAvLyBUaGUgV2ViVmlldydzIGFjY2Vzc2liaWxpdHkgb2JqZWN0IChVSSBQ
cm9jZXNzKS4KLSAgICBjdXJyZW50UGFyZW50ID0gY3VycmVudENoaWxkOwotICAgIGN1cnJlbnRD
aGlsZCA9IGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQYXJlbnQu
Z2V0KCksIDAsIDApOwotICAgIGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY3VycmVudENo
aWxkLmdldCgpKSk7Ci0gICAgY2hlY2tBdHNwaUFjY2Vzc2libGUoY3VycmVudENoaWxkLmdldCgp
LCAiIiwgQVRTUElfUk9MRV9GSUxMRVIpOwotCi0gICAgLy8gVGhlIFdlYlBhZ2UncyBhY2Nlc3Np
YmlsaXR5IG9iamVjdCAoV2ViIFByb2Nlc3MpLgotICAgIGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50
Q2hpbGQ7Ci0gICAgY3VycmVudENoaWxkID0gYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRf
aW5kZXgoY3VycmVudFBhcmVudC5nZXQoKSwgMCwgMCk7Ci0gICAgZ19hc3NlcnQoQVRTUElfSVNf
QUNDRVNTSUJMRShjdXJyZW50Q2hpbGQuZ2V0KCkpKTsKLSAgICBjaGVja0F0c3BpQWNjZXNzaWJs
ZShjdXJyZW50Q2hpbGQuZ2V0KCksICIiLCBBVFNQSV9ST0xFX0ZJTExFUik7Ci0KLSAgICAvLyBI
VE1MIHJvb3QgZWxlbWVudCdzIGFjY2Vzc2libGUgZWxlbWVudCAoV2ViIFByb2Nlc3MpLgotICAg
IGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50Q2hpbGQ7Ci0gICAgY3VycmVudENoaWxkID0gYXRzcGlf
YWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoY3VycmVudFBhcmVudC5nZXQoKSwgMCwgMCk7
Ci0gICAgZ19hc3NlcnQoQVRTUElfSVNfQUNDRVNTSUJMRShjdXJyZW50Q2hpbGQuZ2V0KCkpKTsK
LQotICAgIC8vIEhUTUwgYm9keSdzIGFjY2Vzc2libGUgZWxlbWVudCAoV2ViIFByb2Nlc3MpLgot
ICAgIGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50Q2hpbGQ7Ci0gICAgY3VycmVudENoaWxkID0gYXRz
cGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoY3VycmVudFBhcmVudC5nZXQoKSwgMCwg
MCk7Ci0gICAgZ19hc3NlcnQoQVRTUElfSVNfQUNDRVNTSUJMRShjdXJyZW50Q2hpbGQuZ2V0KCkp
KTsKLSAgICBjaGVja0F0c3BpQWNjZXNzaWJsZShjdXJyZW50Q2hpbGQuZ2V0KCksICIiLCBBVFNQ
SV9ST0xFX0RPQ1VNRU5UX1dFQik7Ci0KLSAgICAvLyBIVE1MIEgxJ3MgYWNjZXNzaWJsZSBlbGVt
ZW50IChXZWIgUHJvY2VzcykuCi0gICAgY3VycmVudFBhcmVudCA9IGN1cnJlbnRDaGlsZDsKLSAg
ICBjdXJyZW50Q2hpbGQgPSBhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChjdXJy
ZW50UGFyZW50LmdldCgpLCAwLCAwKTsKLSAgICBnX2Fzc2VydChBVFNQSV9JU19BQ0NFU1NJQkxF
KGN1cnJlbnRDaGlsZC5nZXQoKSkpOwotICAgIGNoZWNrQXRzcGlBY2Nlc3NpYmxlKGN1cnJlbnRD
aGlsZC5nZXQoKSwgIlRoaXMgaXMgYSB0ZXN0IiwgQVRTUElfUk9MRV9IRUFESU5HKTsKLQotICAg
IC8vIEhUTUwgZmlyc3QgcGFyYWdyYXBoJ3MgYWNjZXNzaWJsZSBlbGVtZW50IChXZWIgUHJvY2Vz
cykuCi0gICAgY3VycmVudENoaWxkID0gYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5k
ZXgoY3VycmVudFBhcmVudC5nZXQoKSwgMSwgMCk7Ci0gICAgZ19hc3NlcnQoQVRTUElfSVNfQUND
RVNTSUJMRShjdXJyZW50Q2hpbGQuZ2V0KCkpKTsKLSAgICBjaGVja0F0c3BpQWNjZXNzaWJsZShj
dXJyZW50Q2hpbGQuZ2V0KCksICIiLCBBVFNQSV9ST0xFX1BBUkFHUkFQSCk7Ci0KLSAgICAvLyBI
VE1MIHNlY29uZCBwYXJhZ3JhcGgncyBhY2Nlc3NpYmxlIGVsZW1lbnQgKFdlYiBQcm9jZXNzKS4K
LSAgICBjdXJyZW50Q2hpbGQgPSBhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChj
dXJyZW50UGFyZW50LmdldCgpLCAyLCAwKTsKLSAgICBnX2Fzc2VydChBVFNQSV9JU19BQ0NFU1NJ
QkxFKGN1cnJlbnRDaGlsZC5nZXQoKSkpOwotICAgIGNoZWNrQXRzcGlBY2Nlc3NpYmxlKGN1cnJl
bnRDaGlsZC5nZXQoKSwgIiIsIEFUU1BJX1JPTEVfUEFSQUdSQVBIKTsKLQotICAgIC8vIEhUTUwg
bGluaydzIGFjY2Vzc2libGUgZWxlbWVudCAoV2ViIFByb2Nlc3MpLgotICAgIGN1cnJlbnRQYXJl
bnQgPSBjdXJyZW50Q2hpbGQ7Ci0gICAgY3VycmVudENoaWxkID0gYXRzcGlfYWNjZXNzaWJsZV9n
ZXRfY2hpbGRfYXRfaW5kZXgoY3VycmVudFBhcmVudC5nZXQoKSwgMCwgMCk7Ci0gICAgZ19hc3Nl
cnQoQVRTUElfSVNfQUNDRVNTSUJMRShjdXJyZW50Q2hpbGQuZ2V0KCkpKTsKLSAgICBjaGVja0F0
c3BpQWNjZXNzaWJsZShjdXJyZW50Q2hpbGQuZ2V0KCksICJhIGxpbmsiLCBBVFNQSV9ST0xFX0xJ
TkspOwotfQotCi12b2lkIGJlZm9yZUFsbCgpCi17Ci0gICAgLy8gV2UgaW5zdGFsbCBhIGhhbmRs
ZXIgdG8gZW5zdXJlIHRoYXQgd2Uga2lsbCB0aGUgY2hpbGQgcHJvY2VzcwotICAgIC8vIGlmIHRo
ZSBwYXJlbnQgZGllcyBiZWNhdXNlIG9mIHdoYXRldmVyIHRoZSByZWFzb24gaXMuCi0gICAgc2ln
bmFsKFNJR0FCUlQsIHNpZ0Fib3J0SGFuZGxlcik7Ci0KLSAgICAvLyBTdGFydCB0aGUgYWNjZXNz
aWJpbGl0eSB0ZXN0IHNlcnZlciBhbmQgbG9hZCB0aGUgdGVzdHMuCi0gICAgc3RhcnRUZXN0U2Vy
dmVyKCk7Ci0gICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0QWNjZXNzaWJpbGl0eSIsICJhdHNw
aS1iYXNpYy1oaWVyYXJjaHkiLCB0ZXN0QXRzcGlCYXNpY0hpZXJhcmNoeSk7Ci19Ci0KLXZvaWQg
YWZ0ZXJBbGwoKQotewotICAgIC8vIEVuc3VyZSB3ZSBzdG9wIHRoZSBzZXJ2ZXIuCi0gICAgc3Rv
cFRlc3RTZXJ2ZXIoKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdEZhdmljb25EYXRhYmFzZS5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhMDZmNzQuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdEZhdmljb25EYXRh
YmFzZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVy
c2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAi
V2ViS2l0VGVzdFNlcnZlci5oIgotI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCi0jaW5jbHVkZSA8
Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KLSNpbmNsdWRlIDx3dGYv
Z29iamVjdC9HT3duUHRyLmg+Ci0KLXN0YXRpYyBXZWJLaXRUZXN0U2VydmVyKiBrU2VydmVyOwot
c3RhdGljIGNoYXIqIGtUZW1wRGlyZWN0b3J5OwotCi1jbGFzcyBGYXZpY29uRGF0YWJhc2VUZXN0
OiBwdWJsaWMgV2ViVmlld1Rlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRV
UkUoRmF2aWNvbkRhdGFiYXNlVGVzdCk7Ci0KLSAgICBGYXZpY29uRGF0YWJhc2VUZXN0KCkKLSAg
ICAgICAgOiBtX3dlYkNvbnRleHQod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCkpCi0g
ICAgICAgICwgbV9mYXZpY29uKDApCi0gICAgICAgICwgbV9lcnJvcigwKQotICAgICAgICAsIG1f
ZmF2aWNvbk5vdGlmaWNhdGlvblJlY2VpdmVkKGZhbHNlKQotICAgIHsKLSAgICAgICAgV2ViS2l0
RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZmF2aWNv
bl9kYXRhYmFzZShtX3dlYkNvbnRleHQpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGRhdGFi
YXNlLCAiZmF2aWNvbi1jaGFuZ2VkIiwgR19DQUxMQkFDSyhmYXZpY29uQ2hhbmdlZENhbGxiYWNr
KSwgdGhpcyk7Ci0gICAgfQotCi0gICAgfkZhdmljb25EYXRhYmFzZVRlc3QoKQotICAgIHsKLSAg
ICAgICAgaWYgKG1fZmF2aWNvbikKLSAgICAgICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveSht
X2Zhdmljb24pOwotCi0gICAgICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3
ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2UobV93ZWJDb250ZXh0KTsKLSAg
ICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKGRhdGFiYXNlLCBHX1NJ
R05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMg
dm9pZCBmYXZpY29uQ2hhbmdlZENhbGxiYWNrKFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJh
c2UsIGNvbnN0IGNoYXIqIHBhZ2VVUkksIGNvbnN0IGNoYXIqIGZhdmljb25VUkksIEZhdmljb25E
YXRhYmFzZVRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICBpZiAoIWdfc3RyY21wMCh3ZWJraXRf
d2ViX3ZpZXdfZ2V0X3VyaSh0ZXN0LT5tX3dlYlZpZXcpLCBwYWdlVVJJKSkKLSAgICAgICAgICAg
IHRlc3QtPm1fZmF2aWNvblVSSSA9IGZhdmljb25VUkk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZv
aWQgdmlld0Zhdmljb25DaGFuZ2VkQ2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgR1Bh
cmFtU3BlYyogcHNwZWMsIGdwb2ludGVyIGRhdGEpCi0gICAgewotICAgICAgICBGYXZpY29uRGF0
YWJhc2VUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8RmF2aWNvbkRhdGFiYXNlVGVzdCo+KGRhdGEp
OwotICAgICAgICBnX2Fzc2VydCh0ZXN0LT5tX3dlYlZpZXcgPT0gd2ViVmlldyk7Ci0gICAgICAg
IHRlc3QtPm1fZmF2aWNvbk5vdGlmaWNhdGlvblJlY2VpdmVkID0gdHJ1ZTsKLSAgICAgICAgdGVz
dC0+cXVpdE1haW5Mb29wKCk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgZ2V0RmF2aWNvbkNh
bGxiYWNrKEdPYmplY3QqIHNvdXJjZU9iamVjdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIHZvaWQq
IGRhdGEpCi0gICAgewotICAgICAgICBGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0ID0gc3RhdGlj
X2Nhc3Q8RmF2aWNvbkRhdGFiYXNlVGVzdCo+KGRhdGEpOwotICAgICAgICBXZWJLaXRGYXZpY29u
RGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2RhdGFi
YXNlKHRlc3QtPm1fd2ViQ29udGV4dCk7Ci0gICAgICAgIHRlc3QtPm1fZmF2aWNvbiA9IHdlYmtp
dF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX2ZpbmlzaChkYXRhYmFzZSwgcmVzdWx0LCAm
dGVzdC0+bV9lcnJvci5vdXRQdHIoKSk7Ci0gICAgICAgIHRlc3QtPnF1aXRNYWluTG9vcCgpOwot
ICAgIH0KLQotICAgIHZvaWQgd2FpdFVudGlsRmF2aWNvbkNoYW5nZWQoKQotICAgIHsKLSAgICAg
ICAgbV9mYXZpY29uTm90aWZpY2F0aW9uUmVjZWl2ZWQgPSBmYWxzZTsKLSAgICAgICAgdW5zaWdu
ZWQgbG9uZyBoYW5kbGVySUQgPSBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgIm5vdGlmeTo6
ZmF2aWNvbiIsIEdfQ0FMTEJBQ0sodmlld0Zhdmljb25DaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsK
LSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotICAgICAgICBnX3NpZ25hbF9o
YW5kbGVyX2Rpc2Nvbm5lY3QobV93ZWJWaWV3LCBoYW5kbGVySUQpOwotICAgIH0KLQotICAgIHZv
aWQgZ2V0RmF2aWNvbkZvclBhZ2VVUklBbmRXYWl0VW50aWxSZWFkeShjb25zdCBjaGFyKiBwYWdl
VVJJKQotICAgIHsKLSAgICAgICAgbV9lcnJvci5jbGVhcigpOwotICAgICAgICBpZiAobV9mYXZp
Y29uKSB7Ci0gICAgICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3kobV9mYXZpY29uKTsKLSAg
ICAgICAgICAgIG1fZmF2aWNvbiA9IDA7Ci0gICAgICAgIH0KLQotICAgICAgICBXZWJLaXRGYXZp
Y29uRGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2Rh
dGFiYXNlKG1fd2ViQ29udGV4dCk7Ci0gICAgICAgIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dl
dF9mYXZpY29uKGRhdGFiYXNlLCBwYWdlVVJJLCAwLCBnZXRGYXZpY29uQ2FsbGJhY2ssIHRoaXMp
OwotICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgV2Vi
S2l0V2ViQ29udGV4dCogbV93ZWJDb250ZXh0OwotICAgIGNhaXJvX3N1cmZhY2VfdCogbV9mYXZp
Y29uOwotICAgIENTdHJpbmcgbV9mYXZpY29uVVJJOwotICAgIEdPd25QdHI8R0Vycm9yPiBtX2Vy
cm9yOwotICAgIGJvb2wgbV9mYXZpY29uTm90aWZpY2F0aW9uUmVjZWl2ZWQ7Ci19OwotCi1zdGF0
aWMgdm9pZAotc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSog
bWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSogcXVlcnksIFNvdXBDbGllbnRD
b250ZXh0KiBjb250ZXh0LCB2b2lkKiBkYXRhKQotewotICAgIGlmIChtZXNzYWdlLT5tZXRob2Qg
IT0gU09VUF9NRVRIT0RfR0VUKSB7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1l
c3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9mYXZpY29uLmljbyIpKSB7Ci0gICAg
ICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9GT1VO
RCk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNl
X2JvZHkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY2hhciogY29udGVudHM7Ci0g
ICAgZ3NpemUgbGVuZ3RoOwotICAgIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2ljb24vZmF2aWNv
bi5pY28iKSkgewotICAgICAgICBHT3duUHRyPGNoYXI+IHBhdGhUb0Zhdmljb24oZ19idWlsZF9m
aWxlbmFtZShUZXN0OjpnZXRXZWJLaXQxVGVzdFJlc291Y2VzRGlyKCkuZGF0YSgpLCAiYmxhbmsu
aWNvIiwgTlVMTCkpOwotICAgICAgICBnX2ZpbGVfZ2V0X2NvbnRlbnRzKHBhdGhUb0Zhdmljb24u
Z2V0KCksICZjb250ZW50cywgJmxlbmd0aCwgMCk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5
X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBjb250ZW50
cywgbGVuZ3RoKTsKLSAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvbm9mYXZpY29u
IikpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIG5vRmF2aWNvbkhUTUwgPSAiPGh0bWw+
PGhlYWQ+PGJvZHk+dGVzdDwvYm9keT48L2h0bWw+IjsKLSAgICAgICAgc291cF9tZXNzYWdlX2Jv
ZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgbm9G
YXZpY29uSFRNTCwgc3RybGVuKG5vRmF2aWNvbkhUTUwpKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBzdGF0aWMgY29uc3QgY2hhciogY29udGVudHNIVE1MID0gIjxodG1sPjxoZWFkPjxsaW5rIHJl
bD0naWNvbicgaHJlZj0nL2ljb24vZmF2aWNvbi5pY28nIHR5cGU9J2ltYWdlL3gtaWNvOyBjaGFy
c2V0PWJpbmFyeSc+PC9oZWFkPjxib2R5PnRlc3Q8L2JvZHk+PC9odG1sPiI7Ci0gICAgICAgIHNv
dXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9S
WV9TVEFUSUMsIGNvbnRlbnRzSFRNTCwgc3RybGVuKGNvbnRlbnRzSFRNTCkpOwotICAgIH0KLQot
ICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKLSAg
ICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKLX0K
LQotc3RhdGljIHZvaWQgdGVzdE5vdEluaXRpYWxpemVkKEZhdmljb25EYXRhYmFzZVRlc3QqIHRl
c3QpCi17Ci0gICAgLy8gVHJ5IHRvIHJldHJpZXZlIGEgdmFsaWQgZmF2aWNvbiBmcm9tIGEgbm90
IGluaXRpYWxpemVkIGRhdGFiYXNlLgotICAgIHRlc3QtPmdldEZhdmljb25Gb3JQYWdlVVJJQW5k
V2FpdFVudGlsUmVhZHkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2ZvbyIpLmRhdGEoKSk7Ci0g
ICAgZ19hc3NlcnQoIXRlc3QtPm1fZmF2aWNvbik7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV9lcnJv
cik7Ci0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fZXJyb3ItPmNvZGUsID09LCBXRUJLSVRf
RkFWSUNPTl9EQVRBQkFTRV9FUlJPUl9OT1RfSU5JVElBTElaRUQpOwotfQotCi1zdGF0aWMgdm9p
ZCB0ZXN0U2V0RGlyZWN0b3J5KEZhdmljb25EYXRhYmFzZVRlc3QqIHRlc3QpCi17Ci0gICAgd2Vi
a2l0X3dlYl9jb250ZXh0X3NldF9mYXZpY29uX2RhdGFiYXNlX2RpcmVjdG9yeSh0ZXN0LT5tX3dl
YkNvbnRleHQsIGtUZW1wRGlyZWN0b3J5KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoa1RlbXBEaXJl
Y3RvcnksID09LCB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2VfZGlyZWN0
b3J5KHRlc3QtPm1fd2ViQ29udGV4dCkpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0Q2xlYXJEYXRh
YmFzZShGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0KQotewotICAgIFdlYktpdEZhdmljb25EYXRh
YmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2Uo
dGVzdC0+bV93ZWJDb250ZXh0KTsKLSAgICB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9jbGVhcihk
YXRhYmFzZSk7Ci0KLSAgICBHT3duUHRyPGNoYXI+IGljb25VUkkod2Via2l0X2Zhdmljb25fZGF0
YWJhc2VfZ2V0X2Zhdmljb25fdXJpKGRhdGFiYXNlLCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIv
Zm9vIikuZGF0YSgpKSk7Ci0gICAgZ19hc3NlcnQoIWljb25VUkkpOwotfQotCi1zdGF0aWMgdm9p
ZCB0ZXN0R2V0RmF2aWNvbihGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0KQotewotICAgIC8vIFdl
IG5lZWQgdG8gbG9hZCB0aGUgcGFnZSBmaXJzdCB0byBlbnN1cmUgdGhlIGljb24gZGF0YSB3aWxs
IGJlCi0gICAgLy8gaW4gdGhlIGRhdGFiYXNlIGluIGNhc2UgdGhlcmUncyBhbiBhc3NvY2lhdGVk
IGZhdmljb24uCi0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvZm9v
IikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxGYXZpY29uQ2hhbmdlZCgpOwotICAgIENT
dHJpbmcgZmF2aWNvblVSSSA9IGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pY29uL2Zhdmljb24u
aWNvIik7Ci0KLSAgICAvLyBDaGVjayB0aGUgQVBJIHJldHJpZXZpbmcgYSB2YWxpZCBmYXZpY29u
LgotICAgIHRlc3QtPmdldEZhdmljb25Gb3JQYWdlVVJJQW5kV2FpdFVudGlsUmVhZHkoa1NlcnZl
ci0+Z2V0VVJJRm9yUGF0aCgiL2ZvbyIpLmRhdGEoKSk7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV9m
YXZpY29uKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9mYXZpY29uVVJJLmRhdGEoKSwg
PT0sIGZhdmljb25VUkkuZGF0YSgpKTsKLSAgICBnX2Fzc2VydCghdGVzdC0+bV9lcnJvcik7Ci0K
LSAgICAvLyBDaGVjayB0aGF0IHdpZHRoIGFuZCBoZWlnaHQgbWF0Y2ggdGhvc2UgZnJvbSBibGFu
ay5pY28gKDE2eDE2IGZhdmljb24pLgotICAgIGdfYXNzZXJ0X2NtcGludChjYWlyb19pbWFnZV9z
dXJmYWNlX2dldF93aWR0aCh0ZXN0LT5tX2Zhdmljb24pLCA9PSwgMTYpOwotICAgIGdfYXNzZXJ0
X2NtcGludChjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQodGVzdC0+bV9mYXZpY29uKSwg
PT0sIDE2KTsKLQotICAgIC8vIENoZWNrIHRoYXQgYW5vdGhlciBwYWdlIHdpdGggdGhlIHNhbWUg
ZmF2aWNvbiByZXR1cm4gdGhlIHNhbWUgaWNvbi4KLSAgICBjYWlyb19zdXJmYWNlX3QqIGZhdmlj
b24gPSBjYWlyb19zdXJmYWNlX3JlZmVyZW5jZSh0ZXN0LT5tX2Zhdmljb24pOwotICAgIHRlc3Qt
PmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2JhciIpLmRhdGEoKSk7Ci0gICAgLy8g
SXQncyBhIG5ldyBwYWdlIGluIHRoZSBkYXRhYmFzZSwgc28gZmF2aWNvbiB3aWxsIGNoYW5nZSB0
d2ljZSwgZmlyc3QgdG8gcmVzZXQgaXQKLSAgICAvLyBhbmQgdGhlbiB3aGVuIHRoZSBpY29uIGlz
IGxvYWRlZC4KLSAgICB0ZXN0LT53YWl0VW50aWxGYXZpY29uQ2hhbmdlZCgpOwotICAgIHRlc3Qt
PndhaXRVbnRpbEZhdmljb25DaGFuZ2VkKCk7Ci0gICAgdGVzdC0+Z2V0RmF2aWNvbkZvclBhZ2VV
UklBbmRXYWl0VW50aWxSZWFkeShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvYmFyIikuZGF0YSgp
KTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX2Zhdmljb24pOwotICAgIGdfYXNzZXJ0X2NtcHN0cih0
ZXN0LT5tX2Zhdmljb25VUkkuZGF0YSgpLCA9PSwgZmF2aWNvblVSSS5kYXRhKCkpOwotICAgIGdf
YXNzZXJ0KHRlc3QtPm1fZmF2aWNvbiA9PSBmYXZpY29uKTsKLSAgICBnX2Fzc2VydCghdGVzdC0+
bV9lcnJvcik7Ci0gICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KGZhdmljb24pOwotCi0gICAgLy8g
Q2hlY2sgdGhlIEFQSSByZXRyaWV2aW5nIGFuIGludmFsaWQgZmF2aWNvbi4KLSAgICB0ZXN0LT5s
b2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9ub2Zhdmljb24iKS5kYXRhKCkpOwotICAg
IHRlc3QtPndhaXRVbnRpbEZhdmljb25DaGFuZ2VkKCk7Ci0KLSAgICB0ZXN0LT5nZXRGYXZpY29u
Rm9yUGFnZVVSSUFuZFdhaXRVbnRpbFJlYWR5KGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9ub2Zh
dmljb24iKS5kYXRhKCkpOwotICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX2Zhdmljb24pOwotICAgIGdf
YXNzZXJ0KHRlc3QtPm1fZXJyb3IpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0R2V0RmF2aWNvblVS
SShGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0KQotewotICAgIFdlYktpdEZhdmljb25EYXRhYmFz
ZSogZGF0YWJhc2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2UodGVz
dC0+bV93ZWJDb250ZXh0KTsKLQotICAgIENTdHJpbmcgYmFzZVVSSSA9IGtTZXJ2ZXItPmdldFVS
SUZvclBhdGgoIi9mb28iKTsKLSAgICBHT3duUHRyPGNoYXI+IGljb25VUkkod2Via2l0X2Zhdmlj
b25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fdXJpKGRhdGFiYXNlLCBiYXNlVVJJLmRhdGEoKSkpOwot
ICAgIEFTU0VSVF9DTVBfQ1NUUklORyhpY29uVVJJLmdldCgpLCA9PSwga1NlcnZlci0+Z2V0VVJJ
Rm9yUGF0aCgiL2ljb24vZmF2aWNvbi5pY28iKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJW
aWV3RmF2aWNvbihGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0KQotewotICAgIHRlc3QtPm1fZmF2
aWNvblVSSSA9IENTdHJpbmcoKTsKLQotICAgIGNhaXJvX3N1cmZhY2VfdCogaWNvbkZyb21XZWJW
aWV3ID0gd2Via2l0X3dlYl92aWV3X2dldF9mYXZpY29uKHRlc3QtPm1fd2ViVmlldyk7Ci0gICAg
Z19hc3NlcnQoIWljb25Gcm9tV2ViVmlldyk7Ci0KLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXIt
PmdldFVSSUZvclBhdGgoIi9mb28iKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbEZhdmlj
b25DaGFuZ2VkKCk7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV9mYXZpY29uTm90aWZpY2F0aW9uUmVj
ZWl2ZWQpOwotICAgIC8vIFRoZSBpY29uIGlzIGtub3duIGFuZCBoYXNuJ3QgY2hhbmdlZCBpbiB0
aGUgZGF0YWJhc2UsIHNvIG5vdGlmeTo6ZmF2aWNvbiBpcyBlbWl0dGVkCi0gICAgLy8gYnV0IFdl
YktpdEZhdmljb25EYXRhYmFzZTo6aWNvbi1jaGFuZ2VkIGlzbid0LgotICAgIGdfYXNzZXJ0KHRl
c3QtPm1fZmF2aWNvblVSSS5pc051bGwoKSk7Ci0KLSAgICBpY29uRnJvbVdlYlZpZXcgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X2Zhdmljb24odGVzdC0+bV93ZWJWaWV3KTsKLSAgICBnX2Fzc2VydChp
Y29uRnJvbVdlYlZpZXcpOwotICAgIGdfYXNzZXJ0X2NtcHVpbnQoY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9nZXRfd2lkdGgoaWNvbkZyb21XZWJWaWV3KSwgPT0sIDE2KTsKLSAgICBnX2Fzc2VydF9jbXB1
aW50KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChpY29uRnJvbVdlYlZpZXcpLCA9PSwg
MTYpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0RmF2aWNvbkRhdGFiYXNlKEZhdmljb25EYXRhYmFz
ZVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgLy8gVGhlc2UgdGVzdHMgZGVwZW5k
IG9uIHRoaXMgb3JkZXIgdG8gcnVuIHByb3Blcmx5IHNvIHdlIGRlY2xhcmUgdGhlbSBpbiBhIHNp
bmdsZSBvbmUuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMTE0MzQuCi0gICAgdGVzdE5vdEluaXRpYWxpemVkKHRlc3QpOwotICAgIHRlc3RTZXRE
aXJlY3RvcnkodGVzdCk7Ci0gICAgdGVzdEdldEZhdmljb24odGVzdCk7Ci0gICAgdGVzdEdldEZh
dmljb25VUkkodGVzdCk7Ci0gICAgdGVzdFdlYlZpZXdGYXZpY29uKHRlc3QpOwotICAgIHRlc3RD
bGVhckRhdGFiYXNlKHRlc3QpOwotfQotCi12b2lkIGJlZm9yZUFsbCgpCi17Ci0gICAgLy8gU3Rh
cnQgYSBzb3VwIHNlcnZlciBmb3IgdGVzdGluZy4KLSAgICBrU2VydmVyID0gbmV3IFdlYktpdFRl
c3RTZXJ2ZXIoKTsKLSAgICBrU2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2spOwotCi0gICAga1Rl
bXBEaXJlY3RvcnkgPSBnX2Rpcl9tYWtlX3RtcCgiV2ViS2l0MlRlc3RzLVhYWFhYWCIsIDApOwot
ICAgIGdfYXNzZXJ0KGtUZW1wRGlyZWN0b3J5KTsKLQotICAgIC8vIEFkZCB0ZXN0cyB0byB0aGUg
c3VpdGUuCi0gICAgRmF2aWNvbkRhdGFiYXNlVGVzdDo6YWRkKCJXZWJLaXRGYXZpY29uRGF0YWJh
c2UiLCAiZmF2aWNvbi1kYXRhYmFzZS10ZXN0IiwgdGVzdEZhdmljb25EYXRhYmFzZSk7Ci19Ci0K
LXN0YXRpYyB2b2lkIHdlYmtpdEZhdmljb25EYXRhYmFzZUZpbmFsaXplZENhbGxiYWNrKGdwb2lu
dGVyLCBHT2JqZWN0KikKLXsKLSAgICBpZiAoIWdfZmlsZV90ZXN0KGtUZW1wRGlyZWN0b3J5LCBH
X0ZJTEVfVEVTVF9JU19ESVIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHT3duUHRyPGNoYXI+
IGZpbGVuYW1lKGdfYnVpbGRfZmlsZW5hbWUoa1RlbXBEaXJlY3RvcnksICJXZWJwYWdlSWNvbnMu
ZGIiLCBOVUxMKSk7Ci0gICAgZ191bmxpbmsoZmlsZW5hbWUuZ2V0KCkpOwotCi0gICAgZ19ybWRp
cihrVGVtcERpcmVjdG9yeSk7Ci19Ci0KLXZvaWQgYWZ0ZXJBbGwoKQotewotICAgIGRlbGV0ZSBr
U2VydmVyOwotCi0gICAgLy8gRGVsZXRlIHRoZSB0ZW1wb3JhcnkgZmlsZXMgYWZ0ZXIgdGhlIElj
b25EYXRhYmFzZSBoYXMgYmVlbgotICAgIC8vIGNsb3NlZCwgdGhhdCBpcywgb25jZSBXZWJLaXRG
YXZpY29uRGF0YWJhc2UgaXMgYmVpbmcgZGVzdHJveWVkLgotICAgIFdlYktpdEZhdmljb25EYXRh
YmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2Uo
d2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCkpOwotICAgIGdfb2JqZWN0X3dlYWtfcmVm
KEdfT0JKRUNUKGRhdGFiYXNlKSwgd2Via2l0RmF2aWNvbkRhdGFiYXNlRmluYWxpemVkQ2FsbGJh
Y2ssIDApOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvVGVzdFdlYktpdEZpbmRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxlci5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyZWVmNGMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdEZpbmRDb250cm9sbGVyLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDMzNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEy
IElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIsMSBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJMb2FkVHJhY2tp
bmdUZXN0LmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0
Mi5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLQotc3RhdGljIGNvbnN0IGNo
YXIqIHRlc3RTdHJpbmcgPSAiPGh0bWw+PGJvZHk+Zmlyc3QgdGVzdGluZyBzZWNvbmQgdGVzdGlu
ZyBzZWNvbmRIYWxmPC9ib2R5PjwvaHRtbD4iOwotCi1jbGFzcyBGaW5kQ29udHJvbGxlclRlc3Q6
IHB1YmxpYyBXZWJWaWV3VGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVS
RShGaW5kQ29udHJvbGxlclRlc3QpOwotCi0gICAgRmluZENvbnRyb2xsZXJUZXN0KCkKLSAgICAg
ICAgOiBtX2ZpbmRDb250cm9sbGVyKHdlYmtpdF93ZWJfdmlld19nZXRfZmluZF9jb250cm9sbGVy
KG1fd2ViVmlldykpCi0gICAgICAgICwgbV9ydW5GaW5kVW50aWxDb21wbGV0aW9uKGZhbHNlKQot
ICAgIHsKLSAgICAgICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09C
SkVDVChtX2ZpbmRDb250cm9sbGVyLmdldCgpKSk7Ci0gICAgfQotCi0gICAgfkZpbmRDb250cm9s
bGVyVGVzdCgpCi0gICAgewotICAgICAgICBpZiAobV9maW5kQ29udHJvbGxlcikKLSAgICAgICAg
ICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX2ZpbmRDb250cm9sbGVy
LmdldCgpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKLSAgICB9Ci0K
LSAgICB2b2lkIGZpbmQoY29uc3QgY2hhciogc2VhcmNoVGV4dCwgZ3VpbnQzMiBmaW5kT3B0aW9u
cywgZ3VpbnQgbWF4TWF0Y2hDb3VudCkKLSAgICB7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
bV9maW5kQ29udHJvbGxlci5nZXQoKSwgImZvdW5kLXRleHQiLCBHX0NBTExCQUNLKGZvdW5kVGV4
dENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9maW5kQ29udHJv
bGxlci5nZXQoKSwgImZhaWxlZC10by1maW5kLXRleHQiLCBHX0NBTExCQUNLKGZhaWxlZFRvRmlu
ZFRleHRDYWxsYmFjayksIHRoaXMpOwotICAgICAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX3Nl
YXJjaChtX2ZpbmRDb250cm9sbGVyLmdldCgpLCBzZWFyY2hUZXh0LCBmaW5kT3B0aW9ucywgbWF4
TWF0Y2hDb3VudCk7Ci0gICAgfQotCi0gICAgdm9pZCBjb3VudChjb25zdCBjaGFyKiBzZWFyY2hU
ZXh0LCBndWludDMyIGZpbmRPcHRpb25zLCBndWludCBtYXhNYXRjaENvdW50KQotICAgIHsKLSAg
ICAgICAgZ19zaWduYWxfY29ubmVjdChtX2ZpbmRDb250cm9sbGVyLmdldCgpLCAiY291bnRlZC1t
YXRjaGVzIiwgR19DQUxMQkFDSyhjb3VudGVkTWF0Y2hlc0NhbGxiYWNrKSwgdGhpcyk7Ci0gICAg
ICAgIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfY291bnRfbWF0Y2hlcyhtX2ZpbmRDb250cm9sbGVy
LmdldCgpLCBzZWFyY2hUZXh0LCBmaW5kT3B0aW9ucywgbWF4TWF0Y2hDb3VudCk7Ci0gICAgfQot
Ci0gICAgdm9pZCB3YWl0VW50aWxGaW5kRmluaXNoZWQoKQotICAgIHsKLSAgICAgICAgbV9ydW5G
aW5kVW50aWxDb21wbGV0aW9uID0gdHJ1ZTsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFp
bkxvb3ApOwotICAgIH0KLQotICAgIEdSZWZQdHI8V2ViS2l0RmluZENvbnRyb2xsZXI+IG1fZmlu
ZENvbnRyb2xsZXI7Ci0gICAgYm9vbCBtX3RleHRGb3VuZDsKLSAgICB1bnNpZ25lZCBtX21hdGNo
Q291bnQ7Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBtX3J1bkZpbmRVbnRpbENvbXBsZXRpb247Ci0K
LSAgICBzdGF0aWMgdm9pZCBmb3VuZFRleHRDYWxsYmFjayhXZWJLaXRGaW5kQ29udHJvbGxlcios
IGd1aW50IG1hdGNoQ291bnQsIEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCkKLSAgICB7Ci0gICAg
ICAgIHRlc3QtPm1fdGV4dEZvdW5kID0gdHJ1ZTsKLSAgICAgICAgdGVzdC0+bV9tYXRjaENvdW50
ID0gbWF0Y2hDb3VudDsKLSAgICAgICAgaWYgKHRlc3QtPm1fcnVuRmluZFVudGlsQ29tcGxldGlv
bikKLSAgICAgICAgICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7Ci0gICAg
fQotCi0gICAgc3RhdGljIHZvaWQgZmFpbGVkVG9GaW5kVGV4dENhbGxiYWNrKFdlYktpdEZpbmRD
b250cm9sbGVyKiwgRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVz
dC0+bV90ZXh0Rm91bmQgPSBmYWxzZTsKLSAgICAgICAgaWYgKHRlc3QtPm1fcnVuRmluZFVudGls
Q29tcGxldGlvbikKLSAgICAgICAgICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9v
cCk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgY291bnRlZE1hdGNoZXNDYWxsYmFjayhXZWJL
aXRGaW5kQ29udHJvbGxlciosIGd1aW50IG1hdGNoQ291bnQsIEZpbmRDb250cm9sbGVyVGVzdCog
dGVzdCkKLSAgICB7Ci0gICAgICAgIHRlc3QtPm1fbWF0Y2hDb3VudCA9IG1hdGNoQ291bnQ7Ci0g
ICAgICAgIGlmICh0ZXN0LT5tX3J1bkZpbmRVbnRpbENvbXBsZXRpb24pCi0gICAgICAgICAgICBn
X21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOwotICAgIH0KLX07Ci0KLXN0YXRpYyB2
b2lkIHRlc3RGaW5kQ29udHJvbGxlclRleHRGb3VuZChGaW5kQ29udHJvbGxlclRlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+bG9hZEh0bWwodGVzdFN0cmluZywgMCk7Ci0g
ICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICB0ZXN0LT5maW5kKCJ0ZXN0
aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAxKTsKLSAgICB0ZXN0LT53YWl0VW50aWxG
aW5kRmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKLX0KLQot
c3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVyVGV4dE5vdEZvdW5kKEZpbmRDb250cm9sbGVy
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0U3Ry
aW5nLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIHRlc3Qt
PmZpbmQoIm5vdEZvdW5kIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAxKTsKLSAgICB0ZXN0
LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX3RleHRG
b3VuZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RGaW5kQ29udHJvbGxlck1hdGNoQ291bnQoRmlu
ZENvbnRyb2xsZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxvYWRI
dG1sKHRlc3RTdHJpbmcsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwot
Ci0gICAgdGVzdC0+ZmluZCgidGVzdGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwgMik7
Ci0gICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7Ci0KLSAgICBnX2Fzc2VydCh0ZXN0
LT5tX21hdGNoQ291bnQgPT0gMik7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOwot
fQotCi1zdGF0aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xsZXJNYXhNYXRjaENvdW50KEZpbmRDb250
cm9sbGVyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5sb2FkSHRtbCh0
ZXN0U3RyaW5nLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAg
IHRlc3QtPmZpbmQoInRlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUsIDEpOwotICAg
IHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3NlcnQodGVzdC0+bV9t
YXRjaENvdW50ID09IEdfTUFYVUlOVCk7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQp
OwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xsZXJOZXh0KEZpbmRDb250cm9sbGVy
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0U3Ry
aW5nLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIHRlc3Qt
PmZpbmQoInRlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUsIDIpOwotICAgIHRlc3Qt
PndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91
bmQpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fbWF0Y2hDb3VudCA9PSAyKTsKLQotICAgIHdlYmtp
dF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX25leHQodGVzdC0+bV9maW5kQ29udHJvbGxlci5nZXQo
KSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7Ci0KLSAgICBnX2Fzc2VydCh0
ZXN0LT5tX3RleHRGb3VuZCk7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09IDEp
OwotICAgIGdfYXNzZXJ0KCEod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfb3B0aW9ucyh0ZXN0
LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKSAmIFdFQktJVF9GSU5EX09QVElPTlNfQkFDS1dBUkRT
KSk7Ci0KLSAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF9uZXh0KHRlc3QtPm1fZmlu
ZENvbnRyb2xsZXIuZ2V0KCkpOwotICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOwot
Ci0gICAgZ19hc3NlcnQoIXRlc3QtPm1fdGV4dEZvdW5kKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5t
X21hdGNoQ291bnQgPT0gMSk7Ci0gICAgZ19hc3NlcnQoISh3ZWJraXRfZmluZF9jb250cm9sbGVy
X2dldF9vcHRpb25zKHRlc3QtPm1fZmluZENvbnRyb2xsZXIuZ2V0KCkpICYgV0VCS0lUX0ZJTkRf
T1BUSU9OU19CQUNLV0FSRFMpKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVy
UHJldmlvdXMoRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAg
IHRlc3QtPmxvYWRIdG1sKHRlc3RTdHJpbmcsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRG
aW5pc2hlZCgpOwotCi0gICAgdGVzdC0+ZmluZCgidGVzdGluZyIsIFdFQktJVF9GSU5EX09QVElP
TlNfTk9ORSwgMik7Ci0gICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7Ci0KLSAgICBn
X2Fzc2VydCh0ZXN0LT5tX21hdGNoQ291bnQgPT0gMik7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV90
ZXh0Rm91bmQpOwotCi0gICAgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfbmV4dCh0ZXN0
LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNo
ZWQoKTsKLQotICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKLSAgICBnX2Fzc2VydCh0
ZXN0LT5tX21hdGNoQ291bnQgPT0gMSk7Ci0gICAgZ19hc3NlcnQoISh3ZWJraXRfZmluZF9jb250
cm9sbGVyX2dldF9vcHRpb25zKHRlc3QtPm1fZmluZENvbnRyb2xsZXIuZ2V0KCkpICYgV0VCS0lU
X0ZJTkRfT1BUSU9OU19CQUNLV0FSRFMpKTsKLQotICAgIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJf
c2VhcmNoX3ByZXZpb3VzKHRlc3QtPm1fZmluZENvbnRyb2xsZXIuZ2V0KCkpOwotICAgIHRlc3Qt
PndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91
bmQpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fbWF0Y2hDb3VudCA9PSAxKTsKLSAgICBnX2Fzc2Vy
dCh3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9vcHRpb25zKHRlc3QtPm1fZmluZENvbnRyb2xs
ZXIuZ2V0KCkpICYgV0VCS0lUX0ZJTkRfT1BUSU9OU19CQUNLV0FSRFMpOwotfQotCi1zdGF0aWMg
dm9pZCB0ZXN0RmluZENvbnRyb2xsZXJDb3VudGVkTWF0Y2hlcyhGaW5kQ29udHJvbGxlclRlc3Qq
IHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+bG9hZEh0bWwodGVzdFN0cmluZywg
MCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICB0ZXN0LT5jb3Vu
dCgidGVzdGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwgMik7Ci0gICAgdGVzdC0+d2Fp
dFVudGlsRmluZEZpbmlzaGVkKCk7Ci0KLSAgICBnX2Fzc2VydCh0ZXN0LT5tX21hdGNoQ291bnQg
PT0gMik7Ci0KLSAgICB0ZXN0LT5jb3VudCgiZmlyc3QiLCBXRUJLSVRfRklORF9PUFRJT05TX05P
TkUsIDIpOwotICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3Nl
cnQodGVzdC0+bV9tYXRjaENvdW50ID09IDEpOwotCi0gICAgdGVzdC0+Y291bnQoIm5vdEZvdW5k
IiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAyKTsKLSAgICB0ZXN0LT53YWl0VW50aWxGaW5k
RmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX21hdGNoQ291bnQpOwotfQotCi1z
dGF0aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xsZXJPcHRpb25zKEZpbmRDb250cm9sbGVyVGVzdCog
dGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0U3RyaW5nLCAw
KTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIHRlc3QtPmZpbmQo
IlRlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUsIDIpOwotICAgIHRlc3QtPndhaXRV
bnRpbEZpbmRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3NlcnQoIXRlc3QtPm1fdGV4dEZvdW5kKTsK
LQotICAgIHRlc3QtPmZpbmQoIlRlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05TX0NBU0VfSU5T
RU5TSVRJVkUsIDIpOwotICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOwotCi0gICAg
Z19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOwotCi0gICAgdGVzdC0+ZmluZCgiZXN0aW5nIiwg
V0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAyKTsKLSAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmlu
aXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKLQotICAgIHRlc3Qt
PmZpbmQoImVzdGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNfQVRfV09SRF9TVEFSVFMsIDIpOwot
ICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3NlcnQoIXRlc3Qt
Pm1fdGV4dEZvdW5kKTsKLQotICAgIHRlc3QtPmZpbmQoIkhhbGYiLCBXRUJLSVRfRklORF9PUFRJ
T05TX0FUX1dPUkRfU1RBUlRTLCAyKTsKLSAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQo
KTsKLQotICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX3RleHRGb3VuZCk7Ci0KLSAgICB0ZXN0LT5maW5k
KCJIYWxmIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19BVF9XT1JEX1NUQVJUUyB8IFdFQktJVF9GSU5E
X09QVElPTlNfVFJFQVRfTUVESUFMX0NBUElUQUxfQVNfV09SRF9TVEFSVCwgMik7Ci0gICAgdGVz
dC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7Ci0KLSAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRG
b3VuZCk7Ci0KLSAgICB0ZXN0LT5maW5kKCJ0ZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19X
UkFQX0FST1VORCwgMyk7Ci0gICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7Ci0gICAg
Z19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOwotCi0gICAgd2Via2l0X2ZpbmRfY29udHJvbGxl
cl9zZWFyY2hfbmV4dCh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKTsKLSAgICB0ZXN0LT53
YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7
Ci0KLSAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF9uZXh0KHRlc3QtPm1fZmluZENv
bnRyb2xsZXIuZ2V0KCkpOwotICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOwotICAg
IGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdEZpbmRD
b250cm9sbGVySGlkZShGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17
Ci0gICAgdGVzdC0+bG9hZEh0bWwodGVzdFN0cmluZywgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGls
TG9hZEZpbmlzaGVkKCk7Ci0KLSAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBw
ZWQoKTsKLQotICAgIGNhaXJvX3N1cmZhY2VfdCogb3JpZ2luYWxTdXJmYWNlID0gY2Fpcm9fc3Vy
ZmFjZV9yZWZlcmVuY2UoCi0gICAgICAgIHRlc3QtPmdldFNuYXBzaG90QW5kV2FpdFVudGlsUmVh
ZHkoV0VCS0lUX1NOQVBTSE9UX1JFR0lPTl9GVUxMX0RPQ1VNRU5ULCBXRUJLSVRfU05BUFNIT1Rf
T1BUSU9OU19OT05FKSk7Ci0gICAgZ19hc3NlcnQob3JpZ2luYWxTdXJmYWNlKTsKLQotICAgIHRl
c3QtPmZpbmQoInRlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUsIDEpOwotICAgIHRl
c3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZv
dW5kKTsKLQotICAgIGNhaXJvX3N1cmZhY2VfdCogaGlnaGxpZ2h0U3VyZmFjZSA9IGNhaXJvX3N1
cmZhY2VfcmVmZXJlbmNlKAotICAgICAgICB0ZXN0LT5nZXRTbmFwc2hvdEFuZFdhaXRVbnRpbFJl
YWR5KFdFQktJVF9TTkFQU0hPVF9SRUdJT05fRlVMTF9ET0NVTUVOVCwgV0VCS0lUX1NOQVBTSE9U
X09QVElPTlNfTk9ORSkpOwotICAgIGdfYXNzZXJ0KGhpZ2hsaWdodFN1cmZhY2UpOwotICAgIGdf
YXNzZXJ0KCFUZXN0OjpjYWlyb1N1cmZhY2VzRXF1YWwob3JpZ2luYWxTdXJmYWNlLCBoaWdobGln
aHRTdXJmYWNlKSk7Ci0KLSAgICBXZWJLaXRGaW5kQ29udHJvbGxlciogZmluZENvbnRyb2xsZXIg
PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ZpbmRfY29udHJvbGxlcih0ZXN0LT5tX3dlYlZpZXcpOwot
ICAgIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX2ZpbmlzaChmaW5kQ29udHJvbGxlcik7
Ci0gICAgd2Via2l0X3dlYl92aWV3X2V4ZWN1dGVfZWRpdGluZ19jb21tYW5kKHRlc3QtPm1fd2Vi
VmlldywgIlVuc2VsZWN0Iik7Ci0KLSAgICBjYWlyb19zdXJmYWNlX3QqIHVuaGlnaGxpZ2h0U3Vy
ZmFjZSA9IGNhaXJvX3N1cmZhY2VfcmVmZXJlbmNlKAotICAgICAgICB0ZXN0LT5nZXRTbmFwc2hv
dEFuZFdhaXRVbnRpbFJlYWR5KFdFQktJVF9TTkFQU0hPVF9SRUdJT05fRlVMTF9ET0NVTUVOVCwg
V0VCS0lUX1NOQVBTSE9UX09QVElPTlNfTk9ORSkpOwotICAgIGdfYXNzZXJ0KHVuaGlnaGxpZ2h0
U3VyZmFjZSk7Ci0gICAgZ19hc3NlcnQoVGVzdDo6Y2Fpcm9TdXJmYWNlc0VxdWFsKG9yaWdpbmFs
U3VyZmFjZSwgdW5oaWdobGlnaHRTdXJmYWNlKSk7Ci0KLSAgICBjYWlyb19zdXJmYWNlX2Rlc3Ry
b3kob3JpZ2luYWxTdXJmYWNlKTsKLSAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koaGlnaGxpZ2h0
U3VyZmFjZSk7Ci0gICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KHVuaGlnaGxpZ2h0U3VyZmFjZSk7
Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RGaW5kQ29udHJvbGxlckluc3RhbmNlKEZpbmRDb250cm9s
bGVyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBXZWJLaXRGaW5kQ29udHJvbGxl
ciogZmluZENvbnRyb2xsZXIxID0gd2Via2l0X3dlYl92aWV3X2dldF9maW5kX2NvbnRyb2xsZXIo
dGVzdC0+bV93ZWJWaWV3KTsKLSAgICBXZWJLaXRGaW5kQ29udHJvbGxlciogZmluZENvbnRyb2xs
ZXIyID0gd2Via2l0X3dlYl92aWV3X2dldF9maW5kX2NvbnRyb2xsZXIodGVzdC0+bV93ZWJWaWV3
KTsKLQotICAgIGdfYXNzZXJ0KGZpbmRDb250cm9sbGVyMSA9PSBmaW5kQ29udHJvbGxlcjIpOwot
fQotCi1zdGF0aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xsZXJHZXR0ZXJzKEZpbmRDb250cm9sbGVy
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBjb25zdCBjaGFyKiBzZWFyY2hUZXh0
ID0gInRlc3RpbmciOwotICAgIGd1aW50IG1heE1hdGNoQ291bnQgPSAxOwotICAgIGd1aW50MzIg
ZmluZE9wdGlvbnMgPSBXRUJLSVRfRklORF9PUFRJT05TX1dSQVBfQVJPVU5EIHwgV0VCS0lUX0ZJ
TkRfT1BUSU9OU19BVF9XT1JEX1NUQVJUUzsKLSAgICBXZWJLaXRGaW5kQ29udHJvbGxlciogZmlu
ZENvbnRyb2xsZXIgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ZpbmRfY29udHJvbGxlcih0ZXN0LT5t
X3dlYlZpZXcpOwotCi0gICAgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2goZmluZENvbnRy
b2xsZXIsIHNlYXJjaFRleHQsIGZpbmRPcHRpb25zLCBtYXhNYXRjaENvdW50KTsKLSAgICBnX2Fz
c2VydCh3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF93ZWJfdmlldyhmaW5kQ29udHJvbGxlcikg
PT0gdGVzdC0+bV93ZWJWaWV3KTsKLSAgICBnX2Fzc2VydCghZ19zdHJjbXAwKHdlYmtpdF9maW5k
X2NvbnRyb2xsZXJfZ2V0X3NlYXJjaF90ZXh0KGZpbmRDb250cm9sbGVyKSwgc2VhcmNoVGV4dCkp
OwotICAgIGdfYXNzZXJ0KHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X21heF9tYXRjaF9jb3Vu
dChmaW5kQ29udHJvbGxlcikgPT0gbWF4TWF0Y2hDb3VudCk7Ci0gICAgZ19hc3NlcnQod2Via2l0
X2ZpbmRfY29udHJvbGxlcl9nZXRfb3B0aW9ucyhmaW5kQ29udHJvbGxlcikgPT0gZmluZE9wdGlv
bnMpOwotfQotCi12b2lkIGJlZm9yZUFsbCgpCi17Ci0gICAgRmluZENvbnRyb2xsZXJUZXN0Ojph
ZGQoIldlYktpdEZpbmRDb250cm9sbGVyIiwgImdldHRlcnMiLCB0ZXN0RmluZENvbnRyb2xsZXJH
ZXR0ZXJzKTsKLSAgICBGaW5kQ29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRyb2xs
ZXIiLCAiaW5zdGFuY2UiLCB0ZXN0RmluZENvbnRyb2xsZXJJbnN0YW5jZSk7Ci0gICAgRmluZENv
bnRyb2xsZXJUZXN0OjphZGQoIldlYktpdEZpbmRDb250cm9sbGVyIiwgInRleHQtZm91bmQiLCB0
ZXN0RmluZENvbnRyb2xsZXJUZXh0Rm91bmQpOwotICAgIEZpbmRDb250cm9sbGVyVGVzdDo6YWRk
KCJXZWJLaXRGaW5kQ29udHJvbGxlciIsICJ0ZXh0LW5vdC1mb3VuZCIsIHRlc3RGaW5kQ29udHJv
bGxlclRleHROb3RGb3VuZCk7Ci0gICAgRmluZENvbnRyb2xsZXJUZXN0OjphZGQoIldlYktpdEZp
bmRDb250cm9sbGVyIiwgIm1hdGNoLWNvdW50IiwgdGVzdEZpbmRDb250cm9sbGVyTWF0Y2hDb3Vu
dCk7Ci0gICAgRmluZENvbnRyb2xsZXJUZXN0OjphZGQoIldlYktpdEZpbmRDb250cm9sbGVyIiwg
Im1heC1tYXRjaC1jb3VudCIsIHRlc3RGaW5kQ29udHJvbGxlck1heE1hdGNoQ291bnQpOwotICAg
IEZpbmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udHJvbGxlciIsICJuZXh0Iiwg
dGVzdEZpbmRDb250cm9sbGVyTmV4dCk7Ci0gICAgRmluZENvbnRyb2xsZXJUZXN0OjphZGQoIldl
YktpdEZpbmRDb250cm9sbGVyIiwgInByZXZpb3VzIiwgdGVzdEZpbmRDb250cm9sbGVyUHJldmlv
dXMpOwotICAgIEZpbmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udHJvbGxlciIs
ICJjb3VudGVkLW1hdGNoZXMiLCB0ZXN0RmluZENvbnRyb2xsZXJDb3VudGVkTWF0Y2hlcyk7Ci0g
ICAgRmluZENvbnRyb2xsZXJUZXN0OjphZGQoIldlYktpdEZpbmRDb250cm9sbGVyIiwgIm9wdGlv
bnMiLCB0ZXN0RmluZENvbnRyb2xsZXJPcHRpb25zKTsKLSAgICBGaW5kQ29udHJvbGxlclRlc3Q6
OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIiLCAiaGlkZSIsIHRlc3RGaW5kQ29udHJvbGxlckhp
ZGUpOwotfQotCi12b2lkIGFmdGVyQWxsKCkKLXsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRQb2xpY3lDbGllbnQuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFBvbGljeUNs
aWVudC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwOWVhMDQuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFBv
bGljeUNsaWVudC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNjcgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNs
dWRlICJMb2FkVHJhY2tpbmdUZXN0LmgiCi0jaW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5oIgot
I2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+Ci0KLXN0YXRpYyBXZWJLaXRUZXN0U2VydmVyKiBrU2VydmVyOwotCi1jbGFzcyBQb2xp
Y3lDbGllbnRUZXN0OiBwdWJsaWMgTG9hZFRyYWNraW5nVGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFL
RV9HTElCX1RFU1RfRklYVFVSRShQb2xpY3lDbGllbnRUZXN0KTsKLQotICAgIGVudW0gUG9saWN5
RGVjaXNpb25SZXNwb25zZSB7Ci0gICAgICAgIFVzZSwKLSAgICAgICAgSWdub3JlLAotICAgICAg
ICBEb3dubG9hZCwKLSAgICAgICAgTm9uZQotICAgIH07Ci0KLSAgICBQb2xpY3lDbGllbnRUZXN0
KCkKLSAgICAgICAgOiBMb2FkVHJhY2tpbmdUZXN0KCkKLSAgICAgICAgLCBtX3BvbGljeURlY2lz
aW9uUmVzcG9uc2UoTm9uZSkKLSAgICAgICAgLCBtX3BvbGljeURlY2lzaW9uVHlwZUZpbHRlcigw
KQotICAgICAgICAsIG1fcmVzcG9uZFRvUG9saWN5RGVjaXNpb25Bc3luY2hyb25vdXNseShmYWxz
ZSkKLSAgICAgICAgLCBtX2hhbHRNYWluTG9vcEFmdGVyTWFraW5nRGVjaXNpb24oZmFsc2UpCi0g
ICAgewotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImRlY2lkZS1wb2xpY3ki
LCBHX0NBTExCQUNLKGRlY2lkZVBvbGljeUNhbGxiYWNrKSwgdGhpcyk7Ci0gICAgfQotCi0gICAg
c3RhdGljIGdib29sZWFuIHF1aXRNYWluTG9vcExhdGVyKEdNYWluTG9vcCogbG9vcCkKLSAgICB7
Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci0gICAgICAgIHJldHVybiBGQUxTRTsK
LSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCByZXNwb25kVG9Qb2xpY3lEZWNpc2lvbihQb2xpY3lD
bGllbnRUZXN0KiB0ZXN0LCBXZWJLaXRQb2xpY3lEZWNpc2lvbiogZGVjaXNpb24pCi0gICAgewot
ICAgICAgICBzd2l0Y2ggKHRlc3QtPm1fcG9saWN5RGVjaXNpb25SZXNwb25zZSkgewotICAgICAg
ICBjYXNlIFVzZToKLSAgICAgICAgICAgIHdlYmtpdF9wb2xpY3lfZGVjaXNpb25fdXNlKGRlY2lz
aW9uKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElnbm9yZToKLSAgICAgICAg
ICAgIHdlYmtpdF9wb2xpY3lfZGVjaXNpb25faWdub3JlKGRlY2lzaW9uKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIERvd25sb2FkOgotICAgICAgICAgICAgd2Via2l0X3BvbGlj
eV9kZWNpc2lvbl9kb3dubG9hZChkZWNpc2lvbik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBOb25lOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAodGVzdC0+bV9oYWx0TWFpbkxvb3BBZnRlck1ha2luZ0RlY2lzaW9uKQotICAgICAgICAgICAg
Z19pZGxlX2FkZChyZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihxdWl0TWFpbkxvb3BMYXRl
ciksIHRlc3QtPm1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiByZXNw
b25kVG9Qb2xpY3lEZWNpc2lvbkxhdGVyKFBvbGljeUNsaWVudFRlc3QqIHRlc3QpCi0gICAgewot
ICAgICAgICByZXNwb25kVG9Qb2xpY3lEZWNpc2lvbih0ZXN0LCB0ZXN0LT5tX3ByZXZpb3VzUG9s
aWN5RGVjaXNpb24uZ2V0KCkpOwotICAgICAgICB0ZXN0LT5tX3ByZXZpb3VzUG9saWN5RGVjaXNp
b24gPSAwOwotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gICAgc3RhdGljIGdib29s
ZWFuIGRlY2lkZVBvbGljeUNhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFBv
bGljeURlY2lzaW9uKiBkZWNpc2lvbiwgV2ViS2l0UG9saWN5RGVjaXNpb25UeXBlIHR5cGUsIFBv
bGljeUNsaWVudFRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICBpZiAodGVzdC0+bV9wb2xpY3lE
ZWNpc2lvblR5cGVGaWx0ZXIgIT0gdHlwZSkKLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsKLQot
ICAgICAgICB0ZXN0LT5tX3ByZXZpb3VzUG9saWN5RGVjaXNpb24gPSBkZWNpc2lvbjsKLSAgICAg
ICAgaWYgKHRlc3QtPm1fcmVzcG9uZFRvUG9saWN5RGVjaXNpb25Bc3luY2hyb25vdXNseSkgewot
ICAgICAgICAgICAgZ19pZGxlX2FkZChyZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihyZXNw
b25kVG9Qb2xpY3lEZWNpc2lvbkxhdGVyKSwgdGVzdCk7Ci0gICAgICAgICAgICByZXR1cm4gVFJV
RTsKLSAgICAgICAgfQotCi0gICAgICAgIHJlc3BvbmRUb1BvbGljeURlY2lzaW9uKHRlc3QsIGRl
Y2lzaW9uKTsKLQotICAgICAgICAvLyBXZSByZXR1cm4gRkFMU0UgaGVyZSB0byBlbnN1cmUgdGhh
dCB0aGUgZGVmYXVsdCBwb2xpY3kgZGVjaXNpb24KLSAgICAgICAgLy8gaGFuZGxlciBkb2Vzbid0
IG92ZXJyaWRlIHdoYXRldmVyIHdlIHVzZSBoZXJlLgotICAgICAgICByZXR1cm4gRkFMU0U7Ci0g
ICAgfQotCi0gICAgUG9saWN5RGVjaXNpb25SZXNwb25zZSBtX3BvbGljeURlY2lzaW9uUmVzcG9u
c2U7Ci0gICAgaW50IG1fcG9saWN5RGVjaXNpb25UeXBlRmlsdGVyOwotICAgIGJvb2wgbV9yZXNw
b25kVG9Qb2xpY3lEZWNpc2lvbkFzeW5jaHJvbm91c2x5OwotICAgIGJvb2wgbV9oYWx0TWFpbkxv
b3BBZnRlck1ha2luZ0RlY2lzaW9uOwotICAgIEdSZWZQdHI8V2ViS2l0UG9saWN5RGVjaXNpb24+
IG1fcHJldmlvdXNQb2xpY3lEZWNpc2lvbjsKLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3ROYXZpZ2F0
aW9uUG9saWN5KFBvbGljeUNsaWVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAg
dGVzdC0+bV9wb2xpY3lEZWNpc2lvblR5cGVGaWx0ZXIgPSBXRUJLSVRfUE9MSUNZX0RFQ0lTSU9O
X1RZUEVfTkFWSUdBVElPTl9BQ1RJT047Ci0KLSAgICB0ZXN0LT5tX3BvbGljeURlY2lzaW9uUmVz
cG9uc2UgPSBQb2xpY3lDbGllbnRUZXN0OjpVc2U7Ci0gICAgdGVzdC0+bG9hZEh0bWwoIjxodG1s
Lz4iLCAiaHR0cDovL3dlYmtpdGd0ay5vcmcvIik7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZp
bmlzaGVkKCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50cy5zaXplKCks
ID09LCAzKTsKLQotICAgIC8vIElkZWFsbHkgd2UnZCBsaWtlIHRvIGhhdmUgYSBtb3JlIGludGVu
c2l2ZSB0ZXN0IGhlcmUsIGJ1dCBpdCdzIHN0aWxsIHByZXR0eSB0cmlja3kKLSAgICAvLyB0byB0
cmlnZ2VyIGRpZmZlcmVudCB0eXBlcyBvZiBuYXZpZ2F0aW9ucyB3aXRoIHRoZSBHVEsrIFdlYktp
dDIgQVBJLgotICAgIFdlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbiogZGVjaXNpb24gPSBX
RUJLSVRfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJT04odGVzdC0+bV9wcmV2aW91c1BvbGljeURl
Y2lzaW9uLmdldCgpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X25hdmlnYXRpb25fcG9s
aWN5X2RlY2lzaW9uX2dldF9uYXZpZ2F0aW9uX3R5cGUoZGVjaXNpb24pLCA9PSwgV0VCS0lUX05B
VklHQVRJT05fVFlQRV9PVEhFUik7Ci0gICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9uYXZpZ2F0
aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRfbW91c2VfYnV0dG9uKGRlY2lzaW9uKSwgPT0sIDApOwot
ICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0
X21vZGlmaWVycyhkZWNpc2lvbiksID09LCAwKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0
X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF9mcmFtZV9uYW1lKGRlY2lzaW9uKSwgPT0s
IDApOwotICAgIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QgPSB3ZWJraXRfbmF2aWdhdGlvbl9w
b2xpY3lfZGVjaXNpb25fZ2V0X3JlcXVlc3QoZGVjaXNpb24pOwotICAgIGdfYXNzZXJ0X2NtcHN0
cih3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KSwgPT0sICJodHRwOi8vd2Via2l0
Z3RrLm9yZy8iKTsKLQotICAgIHRlc3QtPm1fcG9saWN5RGVjaXNpb25SZXNwb25zZSA9IFBvbGlj
eUNsaWVudFRlc3Q6OlVzZTsKLSAgICB0ZXN0LT5tX3Jlc3BvbmRUb1BvbGljeURlY2lzaW9uQXN5
bmNocm9ub3VzbHkgPSB0cnVlOwotICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbC8+IiwgImh0dHA6
Ly93ZWJraXRndGsub3JnLyIpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwot
ICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHMuc2l6ZSgpLCA9PSwgMyk7Ci0K
LSAgICAvLyBJZiB3ZSBhcmUgd2FpdGluZyB1bnRpbCBsb2FkIGNvbXBsZXRpb24sIGl0IHdpbGwg
bmV2ZXIgY29tcGxldGUgaWYgd2UgaWdub3JlIHRoZQotICAgIC8vIG5hdmlnYXRpb24uIFNvIHdl
IHRlbGwgdGhlIG1haW4gbG9vcCB0byBxdWl0IHNvbWV0aW1lIGxhdGVyLgotICAgIHRlc3QtPm1f
cG9saWN5RGVjaXNpb25SZXNwb25zZSA9IFBvbGljeUNsaWVudFRlc3Q6Oklnbm9yZTsKLSAgICB0
ZXN0LT5tX3Jlc3BvbmRUb1BvbGljeURlY2lzaW9uQXN5bmNocm9ub3VzbHkgPSBmYWxzZTsKLSAg
ICB0ZXN0LT5tX2hhbHRNYWluTG9vcEFmdGVyTWFraW5nRGVjaXNpb24gPSB0cnVlOwotICAgIHRl
c3QtPmxvYWRIdG1sKCI8aHRtbC8+IiwgImh0dHA6Ly93ZWJraXRndGsub3JnLyIpOwotICAgIHRl
c3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5t
X2xvYWRFdmVudHMuc2l6ZSgpLCA9PSwgMCk7Ci0KLSAgICB0ZXN0LT5tX3BvbGljeURlY2lzaW9u
UmVzcG9uc2UgPSBQb2xpY3lDbGllbnRUZXN0OjpJZ25vcmU7Ci0gICAgdGVzdC0+bG9hZEh0bWwo
IjxodG1sLz4iLCAiaHR0cDovL3dlYmtpdGd0ay5vcmcvIik7Ci0gICAgdGVzdC0+d2FpdFVudGls
TG9hZEZpbmlzaGVkKCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50cy5z
aXplKCksID09LCAwKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFJlc3BvbnNlUG9saWN5KFBvbGlj
eUNsaWVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+bV9wb2xpY3lE
ZWNpc2lvblR5cGVGaWx0ZXIgPSBXRUJLSVRfUE9MSUNZX0RFQ0lTSU9OX1RZUEVfUkVTUE9OU0U7
Ci0KLSAgICB0ZXN0LT5tX3BvbGljeURlY2lzaW9uUmVzcG9uc2UgPSBQb2xpY3lDbGllbnRUZXN0
OjpVc2U7Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIikuZGF0
YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydF9j
bXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0sIDMpOwotICAgIGdfYXNzZXJ0X2Nt
cGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNp
b25hbExvYWRTdGFydGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRz
WzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZENvbW1pdHRlZCk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRG
aW5pc2hlZCk7Ci0KLSAgICBXZWJLaXRSZXNwb25zZVBvbGljeURlY2lzaW9uKiBkZWNpc2lvbiA9
IFdFQktJVF9SRVNQT05TRV9QT0xJQ1lfREVDSVNJT04odGVzdC0+bV9wcmV2aW91c1BvbGljeURl
Y2lzaW9uLmdldCgpKTsKLSAgICBXZWJLaXRVUklSZXF1ZXN0KiByZXF1ZXN0ID0gd2Via2l0X3Jl
c3BvbnNlX3BvbGljeV9kZWNpc2lvbl9nZXRfcmVxdWVzdChkZWNpc2lvbik7Ci0gICAgZ19hc3Nl
cnQoV0VCS0lUX0lTX1VSSV9SRVFVRVNUKHJlcXVlc3QpKTsKLSAgICBBU1NFUlRfQ01QX0NTVFJJ
Tkcod2Via2l0X3VyaV9yZXF1ZXN0X2dldF91cmkocmVxdWVzdCksID09LCBrU2VydmVyLT5nZXRV
UklGb3JQYXRoKCIvIikpOwotICAgIFdlYktpdFVSSVJlc3BvbnNlKiByZXNwb25zZSA9IHdlYmtp
dF9yZXNwb25zZV9wb2xpY3lfZGVjaXNpb25fZ2V0X3Jlc3BvbnNlKGRlY2lzaW9uKTsKLSAgICBn
X2Fzc2VydChXRUJLSVRfSVNfVVJJX1JFU1BPTlNFKHJlc3BvbnNlKSk7Ci0gICAgQVNTRVJUX0NN
UF9DU1RSSU5HKHdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0X3VyaShyZXNwb25zZSksID09LCBrU2Vy
dmVyLT5nZXRVUklGb3JQYXRoKCIvIikpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19j
YW5fc2hvd19taW1lX3R5cGUodGVzdC0+bV93ZWJWaWV3LCB3ZWJraXRfdXJpX3Jlc3BvbnNlX2dl
dF9taW1lX3R5cGUocmVzcG9uc2UpKSA9PQotICAgICAgICB3ZWJraXRfcmVzcG9uc2VfcG9saWN5
X2RlY2lzaW9uX2lzX21pbWVfdHlwZV9zdXBwb3J0ZWQoZGVjaXNpb24pKTsKLQotICAgIHRlc3Qt
Pm1fcmVzcG9uZFRvUG9saWN5RGVjaXNpb25Bc3luY2hyb25vdXNseSA9IHRydWU7Ci0gICAgdGVz
dC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIikuZGF0YSgpKTsKLSAgICB0ZXN0
LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9s
b2FkRXZlbnRzLnNpemUoKSwgPT0sIDMpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xv
YWRFdmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVk
KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzFdLCA9PSwgTG9hZFRy
YWNraW5nVGVzdDo6TG9hZENvbW1pdHRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1f
bG9hZEV2ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7Ci0KLSAg
ICB0ZXN0LT5tX3Jlc3BvbmRUb1BvbGljeURlY2lzaW9uQXN5bmNocm9ub3VzbHkgPSBmYWxzZTsK
LSAgICB0ZXN0LT5tX3BvbGljeURlY2lzaW9uUmVzcG9uc2UgPSBQb2xpY3lDbGllbnRUZXN0OjpJ
Z25vcmU7Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIikuZGF0
YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0
X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHMuc2l6ZSgpLCA9PSwgMyk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1swXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zp
c2lvbmFsTG9hZFN0YXJ0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVu
dHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRGYWlsZWQpOwotICAg
IGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMl0sID09LCBMb2FkVHJhY2tpbmdU
ZXN0OjpMb2FkRmluaXNoZWQpOwotfQotCi1zdHJ1Y3QgQ3JlYXRlQ2FsbGJhY2tEYXRhIHsKLSAg
ICBib29sIHRyaWVkVG9PcGVuV2luZG93OwotICAgIEdNYWluTG9vcCogbWFpbkxvb3A7Ci19Owot
Ci1zdGF0aWMgV2ViS2l0V2ViVmlldyogY3JlYXRlQ2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2Vi
VmlldywgQ3JlYXRlQ2FsbGJhY2tEYXRhKiBkYXRhKQotewotICAgIGRhdGEtPnRyaWVkVG9PcGVu
V2luZG93ID0gdHJ1ZTsKLSAgICBnX21haW5fbG9vcF9xdWl0KGRhdGEtPm1haW5Mb29wKTsKLSAg
ICByZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgdGVzdE5ld1dpbmRvd1BvbGljeShQb2xpY3lD
bGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHN0YXRpYyBjb25zdCBjaGFy
KiB3aW5kb3dPcGVuaW5nSFRNTCA9Ci0gICAgICAgICI8aHRtbD48Ym9keT4iCi0gICAgICAgICIg
ICAgPGEgaWQ9XCJsaW5rXCIgaHJlZj1cImh0dHA6Ly93d3cuZ29vZ2xlLmNvbVwiIHRhcmdldD1c
Il9ibGFua1wiPkxpbms8L2E+IgotICAgICAgICAiICAgIDxzY3JpcHQ+IgotICAgICAgICAiICAg
ICAgICB2YXIgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnTW91c2VFdmVudHMnKTsiCi0g
ICAgICAgICIgICAgICAgIGV2ZW50LmluaXRFdmVudCgnY2xpY2snLCB0cnVlLCBmYWxzZSk7Igot
ICAgICAgICAiICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGluaycpLmRpc3BhdGNo
RXZlbnQoZXZlbnQpOyIKLSAgICAgICAgIiAgICA8L3NjcmlwdD4iCi0gICAgICAgICI8L2JvZHk+
PC9odG1sPiI7Ci0gICAgdGVzdC0+bV9wb2xpY3lEZWNpc2lvblR5cGVGaWx0ZXIgPSBXRUJLSVRf
UE9MSUNZX0RFQ0lTSU9OX1RZUEVfTkVXX1dJTkRPV19BQ1RJT047Ci0gICAgd2Via2l0X3NldHRp
bmdzX3NldF9qYXZhc2NyaXB0X2Nhbl9vcGVuX3dpbmRvd3NfYXV0b21hdGljYWxseSh3ZWJraXRf
d2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHRlc3QtPm1fd2ViVmlldyksIFRSVUUpOwotCi0gICAgQ3Jl
YXRlQ2FsbGJhY2tEYXRhIGRhdGE7Ci0gICAgZGF0YS50cmllZFRvT3BlbldpbmRvdyA9IGZhbHNl
OwotICAgIGRhdGEubWFpbkxvb3AgPSB0ZXN0LT5tX21haW5Mb29wOwotCi0gICAgZ19zaWduYWxf
Y29ubmVjdCh0ZXN0LT5tX3dlYlZpZXcsICJjcmVhdGUiLCBHX0NBTExCQUNLKGNyZWF0ZUNhbGxi
YWNrKSwgJmRhdGEpOwotICAgIHRlc3QtPm1fcG9saWN5RGVjaXNpb25SZXNwb25zZSA9IFBvbGlj
eUNsaWVudFRlc3Q6OlVzZTsKLSAgICB0ZXN0LT5sb2FkSHRtbCh3aW5kb3dPcGVuaW5nSFRNTCwg
Imh0dHA6Ly93ZWJraXRndGsub3JnLyIpOwotICAgIHRlc3QtPndhaXQoMSk7Ci0gICAgZ19hc3Nl
cnQoZGF0YS50cmllZFRvT3BlbldpbmRvdyk7Ci0KLSAgICBXZWJLaXROYXZpZ2F0aW9uUG9saWN5
RGVjaXNpb24qIGRlY2lzaW9uID0gV0VCS0lUX05BVklHQVRJT05fUE9MSUNZX0RFQ0lTSU9OKHRl
c3QtPm1fcHJldmlvdXNQb2xpY3lEZWNpc2lvbi5nZXQoKSk7Ci0gICAgZ19hc3NlcnRfY21wc3Ry
KHdlYmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRfZnJhbWVfbmFtZShkZWNpc2lv
biksID09LCAiX2JsYW5rIik7Ci0KLSAgICAvLyBVc2luZyBhIHNob3J0IHRpbWVvdXQgaXMgYSBi
aXQgdWdseSBoZXJlLCBidXQgaXQncyBoYXJkIHRvIGdldCBhcm91bmQgYmVjYXVzZSBpZiB3ZSBi
bG9jawotICAgIC8vIHRoZSBuZXcgd2luZG93IHNpZ25hbCB3ZSBjYW5ub3QgaGFsdCB0aGUgbWFp
biBsb29wIGluIHRoZSBjcmVhdGUgY2FsbGJhY2suIElmIHdlCi0gICAgLy8gaGFsdCB0aGUgbWFp
biBsb29wIGluIHRoZSBwb2xpY3kgZGVjaXNpb24sIHRoZSBjcmVhdGUgY2FsbGJhY2sgbmV2ZXIg
ZXhlY3V0ZXMuCi0gICAgZGF0YS50cmllZFRvT3BlbldpbmRvdyA9IGZhbHNlOwotICAgIHRlc3Qt
Pm1fcG9saWN5RGVjaXNpb25SZXNwb25zZSA9IFBvbGljeUNsaWVudFRlc3Q6Oklnbm9yZTsKLSAg
ICB0ZXN0LT5sb2FkSHRtbCh3aW5kb3dPcGVuaW5nSFRNTCwgImh0dHA6Ly93ZWJraXRndGsub3Jn
LyIpOwotICAgIHRlc3QtPndhaXQoLjIpOwotICAgIGdfYXNzZXJ0KCFkYXRhLnRyaWVkVG9PcGVu
V2luZG93KTsKLX0KLQotc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2Vy
dmVyLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSos
IFNvdXBDbGllbnRDb250ZXh0KiwgZ3BvaW50ZXIpCi17Ci0gICAgaWYgKG1lc3NhZ2UtPm1ldGhv
ZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMo
bWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiLyIpKSB7Ci0gICAgICAgIHN0YXRp
YyBjb25zdCBjaGFyKiByZXNwb25zZVN0cmluZyA9ICI8aHRtbD48Ym9keT5UZXN0aW5nITwvYm9k
eT48L2h0bWw+IjsKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09V
UF9TVEFUVVNfT0spOwotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+
cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCByZXNwb25zZVN0cmluZywgc3RybGVu
KHJlc3BvbnNlU3RyaW5nKSk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1l
c3NhZ2UtPnJlc3BvbnNlX2JvZHkpOwotICAgIH0gZWxzZQotICAgICAgICBzb3VwX21lc3NhZ2Vf
c2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfRk9VTkQpOwotfQotCi12b2lkIGJl
Zm9yZUFsbCgpCi17Ci0gICAga1NlcnZlciA9IG5ldyBXZWJLaXRUZXN0U2VydmVyKCk7Ci0gICAg
a1NlcnZlci0+cnVuKHNlcnZlckNhbGxiYWNrKTsKLQotICAgIFBvbGljeUNsaWVudFRlc3Q6OmFk
ZCgiV2ViS2l0UG9saWN5Q2xpZW50IiwgIm5hdmlnYXRpb24tcG9saWN5IiwgdGVzdE5hdmlnYXRp
b25Qb2xpY3kpOwotICAgIFBvbGljeUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0UG9saWN5Q2xpZW50
IiwgInJlc3BvbnNlLXBvbGljeSIsIHRlc3RSZXNwb25zZVBvbGljeSk7Ci0gICAgUG9saWN5Q2xp
ZW50VGVzdDo6YWRkKCJXZWJLaXRQb2xpY3lDbGllbnQiLCAibmV3LXdpbmRvdy1wb2xpY3kiLCB0
ZXN0TmV3V2luZG93UG9saWN5KTsKLX0KLQotdm9pZCBhZnRlckFsbCgpCi17Ci0gICAgZGVsZXRl
IGtTZXJ2ZXI7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9UZXN0V2ViS2l0U2V0dGluZ3MuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFNldHRpbmdzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYzFkMzAxOC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0U2V0dGluZ3MuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMzcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTEgTW90b3JvbGEgTW9iaWxp
dHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNh
dGlvbiwgCi0gKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZSBtZXQ6Ci0gKgotICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKLSAqIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKgotICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQg
bm90aWNlLCAKLSAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIAotICogb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgCi0gKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IAotICogc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCAKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIAotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSAKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIAotICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIAotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotCi0jaW5jbHVkZSAiVGVzdE1haW4uaCIKLSNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgotI2lu
Y2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVk
ZSA8d2Via2l0Mi93ZWJraXQyLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgot
Ci1zdGF0aWMgV2ViS2l0VGVzdFNlcnZlciogZ1NlcnZlcjsKLQotc3RhdGljIHZvaWQgdGVzdFdl
YktpdFNldHRpbmdzKFRlc3QqLCBnY29uc3Rwb2ludGVyKQotewotICAgIFdlYktpdFNldHRpbmdz
KiBzZXR0aW5ncyA9IHdlYmtpdF9zZXR0aW5nc19uZXcoKTsKLQotICAgIC8vIEphdmFTY3JpcHQg
aXMgZW5hYmxlZCBieSBkZWZhdWx0LgotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRf
ZW5hYmxlX2phdmFzY3JpcHQoc2V0dGluZ3MpKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2Vu
YWJsZV9qYXZhc2NyaXB0KHNldHRpbmdzLCBGQUxTRSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9z
ZXR0aW5nc19nZXRfZW5hYmxlX2phdmFzY3JpcHQoc2V0dGluZ3MpKTsKLQotICAgIC8vIEJ5IGRl
ZmF1bHQgYXV0by1sb2FkLWltYWdlIGlzIHRydWUuCi0gICAgZ19hc3NlcnQod2Via2l0X3NldHRp
bmdzX2dldF9hdXRvX2xvYWRfaW1hZ2VzKHNldHRpbmdzKSk7Ci0gICAgd2Via2l0X3NldHRpbmdz
X3NldF9hdXRvX2xvYWRfaW1hZ2VzKHNldHRpbmdzLCBGQUxTRSk7Ci0gICAgZ19hc3NlcnQoIXdl
YmtpdF9zZXR0aW5nc19nZXRfYXV0b19sb2FkX2ltYWdlcyhzZXR0aW5ncykpOwotCi0gICAgLy8g
bG9hZC1pY29ucy1pZ25vcmluZy1pbWFnZS1sb2FkLXNldHRpbmcgaXMgZmFsc2UgYnkgZGVmYXVs
dC4KLSAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9sb2FkX2ljb25zX2lnbm9yaW5n
X2ltYWdlX2xvYWRfc2V0dGluZyhzZXR0aW5ncykpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRf
bG9hZF9pY29uc19pZ25vcmluZ19pbWFnZV9sb2FkX3NldHRpbmcoc2V0dGluZ3MsIFRSVUUpOwot
ICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfbG9hZF9pY29uc19pZ25vcmluZ19pbWFn
ZV9sb2FkX3NldHRpbmcoc2V0dGluZ3MpKTsKLSAgICAKLSAgICAvLyBPZmZsaW5lIGFwcGxpY2F0
aW9uIGNhY2hlIGlzIHRydWUgYnkgZGVmYXVsdC4KLSAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGlu
Z3NfZ2V0X2VuYWJsZV9vZmZsaW5lX3dlYl9hcHBsaWNhdGlvbl9jYWNoZShzZXR0aW5ncykpOwot
ICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX29mZmxpbmVfd2ViX2FwcGxpY2F0aW9uX2Nh
Y2hlKHNldHRpbmdzLCBGQUxTRSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRf
ZW5hYmxlX29mZmxpbmVfd2ViX2FwcGxpY2F0aW9uX2NhY2hlKHNldHRpbmdzKSk7Ci0KLSAgICAv
LyBMb2NhbCBzdG9yYWdlIGlzIGVuYWJsZSBieSBkZWZhdWx0LgotICAgIGdfYXNzZXJ0KHdlYmtp
dF9zZXR0aW5nc19nZXRfZW5hYmxlX2h0bWw1X2xvY2FsX3N0b3JhZ2Uoc2V0dGluZ3MpKTsKLSAg
ICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9odG1sNV9sb2NhbF9zdG9yYWdlKHNldHRpbmdz
LCBGQUxTRSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2h0bWw1
X2xvY2FsX3N0b3JhZ2Uoc2V0dGluZ3MpKTsKLQotICAgIC8vIEhUTUw1IGRhdGFiYXNlIGlzIGVu
YWJsZWQgYnkgZGVmYXVsdC4KLSAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJs
ZV9odG1sNV9kYXRhYmFzZShzZXR0aW5ncykpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5h
YmxlX2h0bWw1X2RhdGFiYXNlKHNldHRpbmdzLCBGQUxTRSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtp
dF9zZXR0aW5nc19nZXRfZW5hYmxlX2h0bWw1X2RhdGFiYXNlKHNldHRpbmdzKSk7Ci0KLSAgICAv
LyBYU1MgQXVkaXRvciBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCi0gICAgZ19hc3NlcnQod2Via2l0
X3NldHRpbmdzX2dldF9lbmFibGVfeHNzX2F1ZGl0b3Ioc2V0dGluZ3MpKTsKLSAgICB3ZWJraXRf
c2V0dGluZ3Nfc2V0X2VuYWJsZV94c3NfYXVkaXRvcihzZXR0aW5ncywgRkFMU0UpOwotICAgIGdf
YXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV94c3NfYXVkaXRvcihzZXR0aW5ncykp
OwotCi0gICAgLy8gRnJhbWUgZmxhdHRlbmluZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgotICAg
IGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9mcmFtZV9mbGF0dGVuaW5nKHNl
dHRpbmdzKSk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfZnJhbWVfZmxhdHRlbmlu
ZyhzZXR0aW5ncywgVFJVRSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFi
bGVfZnJhbWVfZmxhdHRlbmluZyhzZXR0aW5ncykpOwotCi0gICAgLy8gUGx1Z2lucyBhcmUgZW5h
YmxlZCBieSBkZWZhdWx0LgotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxl
X3BsdWdpbnMoc2V0dGluZ3MpKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9wbHVn
aW5zKHNldHRpbmdzLCBGQUxTRSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRf
ZW5hYmxlX3BsdWdpbnMoc2V0dGluZ3MpKTsKLQotICAgIC8vIEphdmEgaXMgZW5hYmxlZCBieSBk
ZWZhdWx0LgotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2phdmEoc2V0
dGluZ3MpKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9qYXZhKHNldHRpbmdzLCBG
QUxTRSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2phdmEoc2V0
dGluZ3MpKTsKLQotICAgIC8vIEJ5IGRlZmF1bHQsIEphdmFTY3JpcHQgY2FuIG9wZW4gd2luZG93
cyBhdXRvbWF0aWNhbGx5IGlzIGRpc2FibGVkLgotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGlu
Z3NfZ2V0X2phdmFzY3JpcHRfY2FuX29wZW5fd2luZG93c19hdXRvbWF0aWNhbGx5KHNldHRpbmdz
KSk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9qYXZhc2NyaXB0X2Nhbl9vcGVuX3dpbmRvd3Nf
YXV0b21hdGljYWxseShzZXR0aW5ncywgVFJVRSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3NldHRp
bmdzX2dldF9qYXZhc2NyaXB0X2Nhbl9vcGVuX3dpbmRvd3NfYXV0b21hdGljYWxseShzZXR0aW5n
cykpOwotCi0gICAgLy8gQnkgZGVmYXVsdCBoeXBlciBsaW5rIGF1ZGl0aW5nIGlzIGRpc2FibGVk
LgotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9oeXBlcmxpbmtfYXVk
aXRpbmcoc2V0dGluZ3MpKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9oeXBlcmxp
bmtfYXVkaXRpbmcoc2V0dGluZ3MsIFRSVUUpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5n
c19nZXRfZW5hYmxlX2h5cGVybGlua19hdWRpdGluZyhzZXR0aW5ncykpOwotCi0gICAgLy8gRGVm
YXVsdCBmb250IGZhbWlseSBpcyAic2Fucy1zZXJpZiIuCi0gICAgZ19hc3NlcnRfY21wc3RyKHdl
YmtpdF9zZXR0aW5nc19nZXRfZGVmYXVsdF9mb250X2ZhbWlseShzZXR0aW5ncyksID09LCAic2Fu
cy1zZXJpZiIpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZGVmYXVsdF9mb250X2ZhbWlseShz
ZXR0aW5ncywgIm1vbm9zcGFjZSIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2V0dGlu
Z3NfZ2V0X2RlZmF1bHRfZm9udF9mYW1pbHkoc2V0dGluZ3MpLCA9PSwgIm1vbm9zcGFjZSIpOwot
Ci0gICAgLy8gRGVmYXVsdCBtb25vc3BhY2UgZm9udCBmYW1pbHkgZm9udCBmYW1pbHkgaXMgIm1v
bm9zcGFjZSIuCi0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zZXR0aW5nc19nZXRfbW9ub3Nw
YWNlX2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJtb25vc3BhY2UiKTsKLSAgICB3ZWJraXRf
c2V0dGluZ3Nfc2V0X21vbm9zcGFjZV9mb250X2ZhbWlseShzZXR0aW5ncywgInNhbnMtc2VyaWYi
KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NldHRpbmdzX2dldF9tb25vc3BhY2VfZm9u
dF9mYW1pbHkoc2V0dGluZ3MpLCA9PSwgInNhbnMtc2VyaWYiKTsKLQotICAgIC8vIERlZmF1bHQg
c2VyaWYgZm9udCBmYW1pbHkgaXMgInNlcmlmIi4KLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0
X3NldHRpbmdzX2dldF9zZXJpZl9mb250X2ZhbWlseShzZXR0aW5ncyksID09LCAic2VyaWYiKTsK
LSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X3NlcmlmX2ZvbnRfZmFtaWx5KHNldHRpbmdzLCAic2Fu
cy1zZXJpZiIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2V0dGluZ3NfZ2V0X3Nlcmlm
X2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJzYW5zLXNlcmlmIik7Ci0KLSAgICAvLyBEZWZh
dWx0IHNhbnMgc2VyaWYgZm9udCBmYW1pbHkgaXMgInNhbnMtc2VyaWYiLgotICAgIGdfYXNzZXJ0
X2NtcHN0cih3ZWJraXRfc2V0dGluZ3NfZ2V0X3NhbnNfc2VyaWZfZm9udF9mYW1pbHkoc2V0dGlu
Z3MpLCA9PSwgInNhbnMtc2VyaWYiKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X3NhbnNfc2Vy
aWZfZm9udF9mYW1pbHkoc2V0dGluZ3MsICJzZXJpZiIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3
ZWJraXRfc2V0dGluZ3NfZ2V0X3NhbnNfc2VyaWZfZm9udF9mYW1pbHkoc2V0dGluZ3MpLCA9PSwg
InNlcmlmIik7Ci0KLSAgICAvLyBEZWZhdWx0IGN1cnNpdmUgZm9udCBmYW1pbHkgInNlcmlmIi4K
LSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NldHRpbmdzX2dldF9jdXJzaXZlX2ZvbnRfZmFt
aWx5KHNldHRpbmdzKSwgPT0sICJzZXJpZiIpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfY3Vy
c2l2ZV9mb250X2ZhbWlseShzZXR0aW5ncywgInNhbnMtc2VyaWYiKTsKLSAgICBnX2Fzc2VydF9j
bXBzdHIod2Via2l0X3NldHRpbmdzX2dldF9jdXJzaXZlX2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwg
PT0sICJzYW5zLXNlcmlmIik7Ci0KLSAgICAvLyBEZWZhdWx0IGZhbnRhc3kgZm9udCBmYW1pbHkg
aXMgInNlcmlmIi4KLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NldHRpbmdzX2dldF9mYW50
YXN5X2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJzZXJpZiIpOwotICAgIHdlYmtpdF9zZXR0
aW5nc19zZXRfZmFudGFzeV9mb250X2ZhbWlseShzZXR0aW5ncywgInNhbnMtc2VyaWYiKTsKLSAg
ICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NldHRpbmdzX2dldF9mYW50YXN5X2ZvbnRfZmFtaWx5
KHNldHRpbmdzKSwgPT0sICJzYW5zLXNlcmlmIik7Ci0KLSAgICAvLyBEZWZhdWx0IHBpY3RvZ3Jh
cGggZm9udCBmYW1pbHkgaXMgInNlcmlmIi4KLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3Nl
dHRpbmdzX2dldF9waWN0b2dyYXBoX2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJzZXJpZiIp
OwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfcGljdG9ncmFwaF9mb250X2ZhbWlseShzZXR0aW5n
cywgInNhbnMtc2VyaWYiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NldHRpbmdzX2dl
dF9waWN0b2dyYXBoX2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJzYW5zLXNlcmlmIik7Ci0K
LSAgICAvLyBEZWZhdWx0IGZvbnQgc2l6ZSBpcyAxNi4KLSAgICBnX2Fzc2VydF9jbXB1aW50KHdl
YmtpdF9zZXR0aW5nc19nZXRfZGVmYXVsdF9mb250X3NpemUoc2V0dGluZ3MpLCA9PSwgMTYpOwot
ICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZGVmYXVsdF9mb250X3NpemUoc2V0dGluZ3MsIDE0KTsK
LSAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9zZXR0aW5nc19nZXRfZGVmYXVsdF9mb250X3Np
emUoc2V0dGluZ3MpLCA9PSwgMTQpOwotCi0gICAgLy8gRGVmYXVsdCBtb25vc3BhY2UgZm9udCBz
aXplIGlzIDEzLgotICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X3NldHRpbmdzX2dldF9kZWZh
dWx0X21vbm9zcGFjZV9mb250X3NpemUoc2V0dGluZ3MpLCA9PSwgMTMpOwotICAgIHdlYmtpdF9z
ZXR0aW5nc19zZXRfZGVmYXVsdF9tb25vc3BhY2VfZm9udF9zaXplKHNldHRpbmdzLCAxMCk7Ci0g
ICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2RlZmF1bHRfbW9ub3NwYWNl
X2ZvbnRfc2l6ZShzZXR0aW5ncyksID09LCAxMCk7Ci0KLSAgICAvLyBEZWZhdWx0IG1pbmltdW0g
Zm9udCBzaXplIGlzIDAuCi0gICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfc2V0dGluZ3NfZ2V0
X21pbmltdW1fZm9udF9zaXplKHNldHRpbmdzKSwgPT0sIDApOwotICAgIHdlYmtpdF9zZXR0aW5n
c19zZXRfbWluaW11bV9mb250X3NpemUoc2V0dGluZ3MsIDcpOwotICAgIGdfYXNzZXJ0X2NtcHVp
bnQod2Via2l0X3NldHRpbmdzX2dldF9taW5pbXVtX2ZvbnRfc2l6ZShzZXR0aW5ncyksID09LCA3
KTsKLQotICAgIC8vIERlZmF1bHQgY2hhcnNldCBpcyAiaXNvLTg4NTktMSIuCi0gICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF9zZXR0aW5nc19nZXRfZGVmYXVsdF9jaGFyc2V0KHNldHRpbmdzKSwg
PT0sICJpc28tODg1OS0xIik7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9kZWZhdWx0X2NoYXJz
ZXQoc2V0dGluZ3MsICJ1dGY4Iik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zZXR0aW5n
c19nZXRfZGVmYXVsdF9jaGFyc2V0KHNldHRpbmdzKSwgPT0sICJ1dGY4Iik7Ci0KLSAgICBnX2Fz
c2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfcHJpdmF0ZV9icm93c2luZyhzZXR0aW5n
cykpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX3ByaXZhdGVfYnJvd3Npbmcoc2V0
dGluZ3MsIFRSVUUpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3By
aXZhdGVfYnJvd3Npbmcoc2V0dGluZ3MpKTsKLQotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGlu
Z3NfZ2V0X2VuYWJsZV9kZXZlbG9wZXJfZXh0cmFzKHNldHRpbmdzKSk7Ci0gICAgd2Via2l0X3Nl
dHRpbmdzX3NldF9lbmFibGVfZGV2ZWxvcGVyX2V4dHJhcyhzZXR0aW5ncywgVFJVRSk7Ci0gICAg
Z19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfZGV2ZWxvcGVyX2V4dHJhcyhzZXR0
aW5ncykpOwotCi0gICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfcmVzaXph
YmxlX3RleHRfYXJlYXMoc2V0dGluZ3MpKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJs
ZV9yZXNpemFibGVfdGV4dF9hcmVhcyhzZXR0aW5ncywgRkFMU0UpOwotICAgIGdfYXNzZXJ0KCF3
ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9yZXNpemFibGVfdGV4dF9hcmVhcyhzZXR0aW5ncykp
OwotCi0gICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfdGFic190b19saW5r
cyhzZXR0aW5ncykpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX3RhYnNfdG9fbGlu
a3Moc2V0dGluZ3MsIEZBTFNFKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9l
bmFibGVfdGFic190b19saW5rcyhzZXR0aW5ncykpOwotCi0gICAgZ19hc3NlcnQoIXdlYmtpdF9z
ZXR0aW5nc19nZXRfZW5hYmxlX2Ruc19wcmVmZXRjaGluZyhzZXR0aW5ncykpOwotICAgIHdlYmtp
dF9zZXR0aW5nc19zZXRfZW5hYmxlX2Ruc19wcmVmZXRjaGluZyhzZXR0aW5ncywgVFJVRSk7Ci0g
ICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfZG5zX3ByZWZldGNoaW5nKHNl
dHRpbmdzKSk7Ci0KLSAgICAvLyBDYXJldCBicm93c2luZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0
LgotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9jYXJldF9icm93c2lu
ZyhzZXR0aW5ncykpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX2NhcmV0X2Jyb3dz
aW5nKHNldHRpbmdzLCBUUlVFKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2Vu
YWJsZV9jYXJldF9icm93c2luZyhzZXR0aW5ncykpOwotCi0gICAgLy8gRnVsbHNjcmVlbiBKYXZh
U2NyaXB0IEFQSSBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCi0gICAgZ19hc3NlcnQod2Via2l0X3Nl
dHRpbmdzX2dldF9lbmFibGVfZnVsbHNjcmVlbihzZXR0aW5ncykpOwotICAgIHdlYmtpdF9zZXR0
aW5nc19zZXRfZW5hYmxlX2Z1bGxzY3JlZW4oc2V0dGluZ3MsIEZBTFNFKTsKLSAgICBnX2Fzc2Vy
dCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfZnVsbHNjcmVlbihzZXR0aW5ncykpOwotCi0g
ICAgLy8gUHJpbnQgYmFja2dyb3VuZHMgaXMgZW5hYmxlZCBieSBkZWZhdWx0Ci0gICAgZ19hc3Nl
cnQod2Via2l0X3NldHRpbmdzX2dldF9wcmludF9iYWNrZ3JvdW5kcyhzZXR0aW5ncykpOwotICAg
IHdlYmtpdF9zZXR0aW5nc19zZXRfcHJpbnRfYmFja2dyb3VuZHMoc2V0dGluZ3MsIEZBTFNFKTsK
LSAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9wcmludF9iYWNrZ3JvdW5kcyhzZXR0
aW5ncykpOwotCi0gICAgLy8gV2ViQXVkaW8gaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KLSAgICBn
X2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfd2ViYXVkaW8oc2V0dGluZ3MpKTsK
LSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV93ZWJhdWRpbyhzZXR0aW5ncywgVFJVRSk7
Ci0gICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfd2ViYXVkaW8oc2V0dGlu
Z3MpKTsKLQotICAgIC8vIFdlYkdMIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCi0gICAgZ19hc3Nl
cnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3dlYmdsKHNldHRpbmdzKSk7Ci0gICAgd2Vi
a2l0X3NldHRpbmdzX3NldF9lbmFibGVfd2ViZ2woc2V0dGluZ3MsIFRSVUUpOwotICAgIGdfYXNz
ZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3dlYmdsKHNldHRpbmdzKSk7Ci0KLSAgICAv
LyBBbGxvdyBNb2RhbCBEaWFsb2dzIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCi0gICAgZ19hc3Nl
cnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfYWxsb3dfbW9kYWxfZGlhbG9ncyhzZXR0aW5ncykpOwot
ICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfYWxsb3dfbW9kYWxfZGlhbG9ncyhzZXR0aW5ncywgVFJV
RSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9hbGxvd19tb2RhbF9kaWFsb2dz
KHNldHRpbmdzKSk7Ci0KLSAgICAvLyBab29tIHRleHQgb25seSBpcyBkaXNhYmxlZCBieSBkZWZh
dWx0LgotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X3pvb21fdGV4dF9vbmx5KHNl
dHRpbmdzKSk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF96b29tX3RleHRfb25seShzZXR0aW5n
cywgVFJVRSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF96b29tX3RleHRfb25s
eShzZXR0aW5ncykpOwotCi0gICAgLy8gQnkgZGVmYXVsdCwgSmF2YVNjcmlwdCBjYW5ub3QgYWNj
ZXNzIHRoZSBjbGlwYm9hcmQuCi0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfamF2
YXNjcmlwdF9jYW5fYWNjZXNzX2NsaXBib2FyZChzZXR0aW5ncykpOwotICAgIHdlYmtpdF9zZXR0
aW5nc19zZXRfamF2YXNjcmlwdF9jYW5fYWNjZXNzX2NsaXBib2FyZChzZXR0aW5ncywgVFJVRSk7
Ci0gICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9qYXZhc2NyaXB0X2Nhbl9hY2Nlc3Nf
Y2xpcGJvYXJkKHNldHRpbmdzKSk7Ci0KLSAgICAvLyBCeSBkZWZhdWx0LCBtZWRpYSBwbGF5YmFj
ayBkb2Vzbid0IHJlcXVpcmUgdXNlciBnZXN0dXJlcy4KLSAgICBnX2Fzc2VydCghd2Via2l0X3Nl
dHRpbmdzX2dldF9tZWRpYV9wbGF5YmFja19yZXF1aXJlc191c2VyX2dlc3R1cmUoc2V0dGluZ3Mp
KTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X21lZGlhX3BsYXliYWNrX3JlcXVpcmVzX3VzZXJf
Z2VzdHVyZShzZXR0aW5ncywgVFJVRSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dl
dF9tZWRpYV9wbGF5YmFja19yZXF1aXJlc191c2VyX2dlc3R1cmUoc2V0dGluZ3MpKTsKLQotICAg
IC8vIEJ5IGRlZmF1bHQsIGlubGluZSBtZWRpYSBwbGF5YmFjayBpcyBhbGxvd2VkCi0gICAgZ19h
c3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9tZWRpYV9wbGF5YmFja19hbGxvd3NfaW5saW5lKHNl
dHRpbmdzKSk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9tZWRpYV9wbGF5YmFja19hbGxvd3Nf
aW5saW5lKHNldHRpbmdzLCBGQUxTRSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19n
ZXRfbWVkaWFfcGxheWJhY2tfYWxsb3dzX2lubGluZShzZXR0aW5ncykpOwotCi0gICAgLy8gQnkg
ZGVmYXVsdCwgZGVidWcgaW5kaWNhdG9ycyBhcmUgZGlzYWJsZWQuCi0gICAgZ19hc3NlcnQoIXdl
YmtpdF9zZXR0aW5nc19nZXRfZHJhd19jb21wb3NpdGluZ19pbmRpY2F0b3JzKHNldHRpbmdzKSk7
Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9kcmF3X2NvbXBvc2l0aW5nX2luZGljYXRvcnMoc2V0
dGluZ3MsIFRSVUUpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZHJhd19jb21w
b3NpdGluZ19pbmRpY2F0b3JzKHNldHRpbmdzKSk7Ci0KLSAgICAvLyBCeSBkZWZhdWx0LCBzaXRl
IHNwZWNpZmljIHF1aXJrcyBhcmUgZGlzYWJsZWQuCi0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0
aW5nc19nZXRfZW5hYmxlX3NpdGVfc3BlY2lmaWNfcXVpcmtzKHNldHRpbmdzKSk7Ci0gICAgd2Vi
a2l0X3NldHRpbmdzX3NldF9lbmFibGVfc2l0ZV9zcGVjaWZpY19xdWlya3Moc2V0dGluZ3MsIFRS
VUUpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3NpdGVfc3BlY2lm
aWNfcXVpcmtzKHNldHRpbmdzKSk7Ci0KLSAgICAvLyBCeSBkZWZhdWx0LCBwYWdlIGNhY2hlIGlz
IGVuYWJsZWQuCi0gICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfcGFnZV9j
YWNoZShzZXR0aW5ncykpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX3BhZ2VfY2Fj
aGUoc2V0dGluZ3MsIEZBTFNFKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9l
bmFibGVfcGFnZV9jYWNoZShzZXR0aW5ncykpOwotCi0gICAgLy8gQnkgZGVmYXVsdCwgc21vb3Ro
IHNjcm9sbGluZyBpcyBkaXNhYmxlZC4KLSAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dl
dF9lbmFibGVfc21vb3RoX3Njcm9sbGluZyhzZXR0aW5ncykpOwotICAgIHdlYmtpdF9zZXR0aW5n
c19zZXRfZW5hYmxlX3Ntb290aF9zY3JvbGxpbmcoc2V0dGluZ3MsIFRSVUUpOwotICAgIGdfYXNz
ZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3Ntb290aF9zY3JvbGxpbmcoc2V0dGluZ3Mp
KTsKLQotICAgIC8vIEJ5IGRlZmF1bHQsIGFjY2VsZXJhdGVkIDJEIGNhbnZhcyBpcyBkaXNhYmxl
ZC4KLSAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfYWNjZWxlcmF0ZWRf
MmRfY2FudmFzKHNldHRpbmdzKSk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfYWNj
ZWxlcmF0ZWRfMmRfY2FudmFzKHNldHRpbmdzLCBUUlVFKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRf
c2V0dGluZ3NfZ2V0X2VuYWJsZV9hY2NlbGVyYXRlZF8yZF9jYW52YXMoc2V0dGluZ3MpKTsKLQot
ICAgIC8vIEJ5IGRlZmF1bHQsIHdyaXRpbmcgb2YgY29uc29sZSBtZXNzYWdlcyB0byBzdGRvdXQg
aXMgZGlzYWJsZWQuCi0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3dy
aXRlX2NvbnNvbGVfbWVzc2FnZXNfdG9fc3Rkb3V0KHNldHRpbmdzKSk7Ci0gICAgd2Via2l0X3Nl
dHRpbmdzX3NldF9lbmFibGVfd3JpdGVfY29uc29sZV9tZXNzYWdlc190b19zdGRvdXQoc2V0dGlu
Z3MsIFRSVUUpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3dyaXRl
X2NvbnNvbGVfbWVzc2FnZXNfdG9fc3Rkb3V0KHNldHRpbmdzKSk7Ci0KLSAgICAvLyBNZWRpYVN0
cmVhbSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGlu
Z3NfZ2V0X2VuYWJsZV9tZWRpYV9zdHJlYW0oc2V0dGluZ3MpKTsKLSAgICB3ZWJraXRfc2V0dGlu
Z3Nfc2V0X2VuYWJsZV9tZWRpYV9zdHJlYW0oc2V0dGluZ3MsIFRSVUUpOwotICAgIGdfYXNzZXJ0
KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX21lZGlhX3N0cmVhbShzZXR0aW5ncykpOwotCi0g
ICAgLy8gQnkgZGVmYXVsdCwgU3BhdGlhbE5hdmlnYXRpb24gaXMgZGlzYWJsZWQKLSAgICBnX2Fz
c2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfc3BhdGlhbF9uYXZpZ2F0aW9uKHNldHRp
bmdzKSk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfc3BhdGlhbF9uYXZpZ2F0aW9u
KHNldHRpbmdzLCBUUlVFKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJs
ZV9zcGF0aWFsX25hdmlnYXRpb24oc2V0dGluZ3MpKTsKLQotICAgIC8vIE1lZGlhU291cmNlIGlz
IGRpc2FibGVkIGJ5IGRlZmF1bHQKLSAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9l
bmFibGVfbWVkaWFzb3VyY2Uoc2V0dGluZ3MpKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2Vu
YWJsZV9tZWRpYXNvdXJjZShzZXR0aW5ncywgVFJVRSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3Nl
dHRpbmdzX2dldF9lbmFibGVfbWVkaWFzb3VyY2Uoc2V0dGluZ3MpKTsKLQotICAgIGdfb2JqZWN0
X3VucmVmKEdfT0JKRUNUKHNldHRpbmdzKSk7Ci19Ci0KLXZvaWQgdGVzdFdlYktpdFNldHRpbmdz
TmV3V2l0aFNldHRpbmdzKFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgR1JlZlB0
cjxXZWJLaXRTZXR0aW5ncz4gc2V0dGluZ3MgPSBhZG9wdEdSZWYod2Via2l0X3NldHRpbmdzX25l
d193aXRoX3NldHRpbmdzKCJlbmFibGUtamF2YXNjcmlwdCIsIEZBTFNFLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiYXV0by1sb2FkLWltYWdlcyIsIEZBTFNFLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAibG9hZC1pY29ucy1pZ25vcmluZy1pbWFnZS1sb2FkLXNldHRpbmciLCBUUlVF
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKSk7Ci0gICAgdGVzdC0+YXNzZXJ0T2Jq
ZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChzZXR0aW5ncy5nZXQoKSkpOwot
ICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9qYXZhc2NyaXB0KHNldHRp
bmdzLmdldCgpKSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfYXV0b19sb2Fk
X2ltYWdlcyhzZXR0aW5ncy5nZXQoKSkpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19n
ZXRfbG9hZF9pY29uc19pZ25vcmluZ19pbWFnZV9sb2FkX3NldHRpbmcoc2V0dGluZ3MuZ2V0KCkp
KTsKLX0KLQotc3RhdGljIENTdHJpbmcgY29udmVydFdlYlZpZXdNYWluUmVzb3VyY2VEYXRhVG9D
U3RyaW5nKFdlYlZpZXdUZXN0KiB0ZXN0KQotewotICAgIHNpemVfdCBtYWluUmVzb3VyY2VEYXRh
U2l6ZSA9IDA7Ci0gICAgY29uc3QgY2hhciogbWFpblJlc291cmNlRGF0YSA9IHRlc3QtPm1haW5S
ZXNvdXJjZURhdGEobWFpblJlc291cmNlRGF0YVNpemUpOwotICAgIHJldHVybiBDU3RyaW5nKG1h
aW5SZXNvdXJjZURhdGEsIG1haW5SZXNvdXJjZURhdGFTaXplKTsKLX0KLQotc3RhdGljIHZvaWQg
YXNzZXJ0VGhhdFVzZXJBZ2VudElzU2VudEluSGVhZGVycyhXZWJWaWV3VGVzdCogdGVzdCwgY29u
c3QgQ1N0cmluZyYgdXNlckFnZW50KQotewotICAgIHRlc3QtPmxvYWRVUkkoZ1NlcnZlci0+Z2V0
VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVk
KCk7Ci0gICAgQVNTRVJUX0NNUF9DU1RSSU5HKGNvbnZlcnRXZWJWaWV3TWFpblJlc291cmNlRGF0
YVRvQ1N0cmluZyh0ZXN0KSwgPT0sIHVzZXJBZ2VudCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RX
ZWJLaXRTZXR0aW5nc1VzZXJBZ2VudChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikK
LXsKLSAgICBHUmVmUHRyPFdlYktpdFNldHRpbmdzPiBzZXR0aW5ncyA9IGFkb3B0R1JlZih3ZWJr
aXRfc2V0dGluZ3NfbmV3KCkpOwotICAgIENTdHJpbmcgZGVmYXVsdFVzZXJBZ2VudCA9IHdlYmtp
dF9zZXR0aW5nc19nZXRfdXNlcl9hZ2VudChzZXR0aW5ncy5nZXQoKSk7Ci0gICAgd2Via2l0X3dl
Yl92aWV3X3NldF9zZXR0aW5ncyh0ZXN0LT5tX3dlYlZpZXcsIHNldHRpbmdzLmdldCgpKTsKLQot
ICAgIGdfYXNzZXJ0KGdfc3Ryc3RyX2xlbihkZWZhdWx0VXNlckFnZW50LmRhdGEoKSwgLTEsICJB
cHBsZVdlYktpdCIpKTsKLSAgICBnX2Fzc2VydChnX3N0cnN0cl9sZW4oZGVmYXVsdFVzZXJBZ2Vu
dC5kYXRhKCksIC0xLCAiU2FmYXJpIikpOwotCi0gICAgd2Via2l0X3NldHRpbmdzX3NldF91c2Vy
X2FnZW50KHNldHRpbmdzLmdldCgpLCAwKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoZGVmYXVsdFVz
ZXJBZ2VudC5kYXRhKCksID09LCB3ZWJraXRfc2V0dGluZ3NfZ2V0X3VzZXJfYWdlbnQoc2V0dGlu
Z3MuZ2V0KCkpKTsKLSAgICBhc3NlcnRUaGF0VXNlckFnZW50SXNTZW50SW5IZWFkZXJzKHRlc3Qs
IGRlZmF1bHRVc2VyQWdlbnQuZGF0YSgpKTsKLQotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfdXNl
cl9hZ2VudChzZXR0aW5ncy5nZXQoKSwgIiIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihkZWZhdWx0
VXNlckFnZW50LmRhdGEoKSwgPT0sIHdlYmtpdF9zZXR0aW5nc19nZXRfdXNlcl9hZ2VudChzZXR0
aW5ncy5nZXQoKSkpOwotCi0gICAgY29uc3QgY2hhciogZnVua3lVc2VyQWdlbnQgPSAiRnVua3kh
IjsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X3VzZXJfYWdlbnQoc2V0dGluZ3MuZ2V0KCksIGZ1
bmt5VXNlckFnZW50KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoZnVua3lVc2VyQWdlbnQsID09LCB3
ZWJraXRfc2V0dGluZ3NfZ2V0X3VzZXJfYWdlbnQoc2V0dGluZ3MuZ2V0KCkpKTsKLSAgICBhc3Nl
cnRUaGF0VXNlckFnZW50SXNTZW50SW5IZWFkZXJzKHRlc3QsIGZ1bmt5VXNlckFnZW50KTsKLQot
ICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfdXNlcl9hZ2VudF93aXRoX2FwcGxpY2F0aW9uX2RldGFp
bHMoc2V0dGluZ3MuZ2V0KCksICJXZWJLaXRHVEsrIiwgMCk7Ci0gICAgY29uc3QgY2hhciogdXNl
ckFnZW50V2l0aE51bGxWZXJzaW9uID0gd2Via2l0X3NldHRpbmdzX2dldF91c2VyX2FnZW50KHNl
dHRpbmdzLmdldCgpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoZ19zdHJzdHJfbGVuKHVzZXJBZ2Vu
dFdpdGhOdWxsVmVyc2lvbiwgLTEsIGRlZmF1bHRVc2VyQWdlbnQuZGF0YSgpKSwgPT0sIHVzZXJB
Z2VudFdpdGhOdWxsVmVyc2lvbik7Ci0gICAgZ19hc3NlcnQoZ19zdHJzdHJfbGVuKHVzZXJBZ2Vu
dFdpdGhOdWxsVmVyc2lvbiwgLTEsICJXZWJLaXRHVEsrIikpOwotCi0gICAgd2Via2l0X3NldHRp
bmdzX3NldF91c2VyX2FnZW50X3dpdGhfYXBwbGljYXRpb25fZGV0YWlscyhzZXR0aW5ncy5nZXQo
KSwgIldlYktpdEdUSysiLCAiIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zZXR0aW5n
c19nZXRfdXNlcl9hZ2VudChzZXR0aW5ncy5nZXQoKSksID09LCB1c2VyQWdlbnRXaXRoTnVsbFZl
cnNpb24pOwotCi0gICAgd2Via2l0X3NldHRpbmdzX3NldF91c2VyX2FnZW50X3dpdGhfYXBwbGlj
YXRpb25fZGV0YWlscyhzZXR0aW5ncy5nZXQoKSwgIldlYkNhdEdUSysiLCAiMy40LjUiKTsKLSAg
ICBjb25zdCBjaGFyKiBuZXdVc2VyQWdlbnQgPSB3ZWJraXRfc2V0dGluZ3NfZ2V0X3VzZXJfYWdl
bnQoc2V0dGluZ3MuZ2V0KCkpOwotICAgIGdfYXNzZXJ0KGdfc3Ryc3RyX2xlbihuZXdVc2VyQWdl
bnQsIC0xLCAiMy40LjUiKSk7Ci0gICAgZ19hc3NlcnQoZ19zdHJzdHJfbGVuKG5ld1VzZXJBZ2Vu
dCwgLTEsICJXZWJDYXRHVEsrIikpOwotfQotCi1zdGF0aWMgdm9pZCBzZXJ2ZXJDYWxsYmFjayhT
b3VwU2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBjaGFyKiBwYXRo
LCBHSGFzaFRhYmxlKiwgU291cENsaWVudENvbnRleHQqLCBncG9pbnRlcikKLXsKLSAgICBpZiAo
bWVzc2FnZS0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgewotICAgICAgICBzb3VwX21lc3Nh
Z2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvIikpIHsK
LSAgICAgICAgY29uc3QgY2hhciogdXNlckFnZW50ID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0
X29uZShtZXNzYWdlLT5yZXF1ZXN0X2hlYWRlcnMsICJVc2VyLUFnZW50Iik7Ci0gICAgICAgIHNv
dXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKLSAgICAgICAg
c291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVN
T1JZX0NPUFksIHVzZXJBZ2VudCwgc3RybGVuKHVzZXJBZ2VudCkpOwotICAgICAgICBzb3VwX21l
c3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKLSAgICB9IGVsc2UK
LSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9U
X0ZPVU5EKTsKLX0KLQotdm9pZCBiZWZvcmVBbGwoKQotewotICAgIGdTZXJ2ZXIgPSBuZXcgV2Vi
S2l0VGVzdFNlcnZlcigpOwotICAgIGdTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFjayk7Ci0KLSAg
ICBUZXN0OjphZGQoIldlYktpdFNldHRpbmdzIiwgIndlYmtpdC1zZXR0aW5ncyIsIHRlc3RXZWJL
aXRTZXR0aW5ncyk7Ci0gICAgVGVzdDo6YWRkKCJXZWJLaXRTZXR0aW5ncyIsICJuZXctd2l0aC1z
ZXR0aW5ncyIsIHRlc3RXZWJLaXRTZXR0aW5nc05ld1dpdGhTZXR0aW5ncyk7Ci0gICAgV2ViVmll
d1Rlc3Q6OmFkZCgiV2ViS2l0U2V0dGluZ3MiLCAidXNlci1hZ2VudCIsIHRlc3RXZWJLaXRTZXR0
aW5nc1VzZXJBZ2VudCk7Ci19Ci0KLXZvaWQgYWZ0ZXJBbGwoKQotewotICAgIGRlbGV0ZSBnU2Vy
dmVyOwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9UZXN0V2ViS2l0VmVyc2lvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9UZXN0V2ViS2l0VmVyc2lvbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGU3NDdmZjkuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvVGVzdFdlYktpdFZlcnNpb24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTAg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiVGVzdE1haW4uaCIKLSNpbmNsdWRlIDxndGsvZ3RrLmg+
Ci0jaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+Ci0KLQotc3RhdGljIHZvaWQgdGVzdFdlYktp
dFZlcnNpb24oVGVzdCosIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgZ19hc3NlcnRfY21wdWludCh3
ZWJraXRfZ2V0X21ham9yX3ZlcnNpb24oKSwgPT0sIFdFQktJVF9NQUpPUl9WRVJTSU9OKTsKLSAg
ICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9nZXRfbWlub3JfdmVyc2lvbigpLCA9PSwgV0VCS0lU
X01JTk9SX1ZFUlNJT04pOwotICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2dldF9taWNyb192
ZXJzaW9uKCksID09LCBXRUJLSVRfTUlDUk9fVkVSU0lPTik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRl
c3RXZWJLaXRDaGVja1ZlcnNpb24oVGVzdCosIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgZ19hc3Nl
cnQoV0VCS0lUX0NIRUNLX1ZFUlNJT04oV0VCS0lUX01BSk9SX1ZFUlNJT04sIFdFQktJVF9NSU5P
Ul9WRVJTSU9OLCBXRUJLSVRfTUlDUk9fVkVSU0lPTikpOwotICAgIGdfYXNzZXJ0KCFXRUJLSVRf
Q0hFQ0tfVkVSU0lPTihXRUJLSVRfTUFKT1JfVkVSU0lPTiArIDEsIFdFQktJVF9NSU5PUl9WRVJT
SU9OLCBXRUJLSVRfTUlDUk9fVkVSU0lPTikpOwotICAgIGdfYXNzZXJ0KCFXRUJLSVRfQ0hFQ0tf
VkVSU0lPTihXRUJLSVRfTUFKT1JfVkVSU0lPTiwgV0VCS0lUX01JTk9SX1ZFUlNJT04gKyAxLCBX
RUJLSVRfTUlDUk9fVkVSU0lPTikpOwotICAgIGdfYXNzZXJ0KCFXRUJLSVRfQ0hFQ0tfVkVSU0lP
TihXRUJLSVRfTUFKT1JfVkVSU0lPTiwgV0VCS0lUX01JTk9SX1ZFUlNJT04sIFdFQktJVF9NSUNS
T19WRVJTSU9OICsgMSkpOwotfQotCi12b2lkIGJlZm9yZUFsbCgpCi17Ci0gICAgVGVzdDo6YWRk
KCJXZWJLaXRWZXJzaW9uIiwgInZlcnNpb24iLCB0ZXN0V2ViS2l0VmVyc2lvbik7Ci0gICAgVGVz
dDo6YWRkKCJXZWJLaXRWZXJzaW9uIiwgImNoZWNrLXZlcnNpb24iLCB0ZXN0V2ViS2l0Q2hlY2tW
ZXJzaW9uKTsKLX0KLQotdm9pZCBhZnRlckFsbCgpCi17Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViQ29udGV4dC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViQ29u
dGV4dC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzMGY0MDYuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdl
YkNvbnRleHQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDI1ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
IHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1
ZGUgIkxvYWRUcmFja2luZ1Rlc3QuaCIKLSNpbmNsdWRlICJXZWJLaXRUZXN0U2VydmVyLmgiCi0j
aW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgotI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdI
YXNoLmg+Ci0KLXN0YXRpYyBXZWJLaXRUZXN0U2VydmVyKiBrU2VydmVyOwotCi1zdGF0aWMgdm9p
ZCB0ZXN0V2ViQ29udGV4dERlZmF1bHQoVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAg
ICAvLyBDaGVjayB0aGVyZSdzIGEgc2luZ2xlIGluc3RhbmNlIG9mIHRoZSBkZWZhdWx0IHdlYiBj
b250ZXh0LgotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpID09
IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpKTsKLX0KLQotY2xhc3MgUGx1Z2luc1Rl
c3Q6IHB1YmxpYyBUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFBs
dWdpbnNUZXN0KTsKLQotICAgIFBsdWdpbnNUZXN0KCkKLSAgICAgICAgOiBtX2NvbnRleHQod2Vi
a2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCkpCi0gICAgICAgICwgbV9tYWluTG9vcChnX21h
aW5fbG9vcF9uZXcoMCwgVFJVRSkpCi0gICAgICAgICwgbV9wbHVnaW5zKDApCi0gICAgewotICAg
ICAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X2FkZGl0aW9uYWxfcGx1Z2luc19kaXJlY3Rvcnko
bV9jb250ZXh0LCBXRUJLSVRfVEVTVF9QTFVHSU5fRElSKTsKLSAgICB9Ci0KLSAgICB+UGx1Z2lu
c1Rlc3QoKQotICAgIHsKLSAgICAgICAgZ19tYWluX2xvb3BfdW5yZWYobV9tYWluTG9vcCk7Ci0g
ICAgICAgIGdfbGlzdF9mcmVlX2Z1bGwobV9wbHVnaW5zLCBnX29iamVjdF91bnJlZik7Ci0gICAg
fQotCi0gICAgc3RhdGljIHZvaWQgZ2V0UGx1Z2luc0FzeW5jUmVhZHlDYWxsYmFjayhHT2JqZWN0
KiwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIFBsdWdpbnNUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAg
ICAgdGVzdC0+bV9wbHVnaW5zID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9wbHVnaW5zX2Zpbmlz
aCh0ZXN0LT5tX2NvbnRleHQsIHJlc3VsdCwgMCk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQo
dGVzdC0+bV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgR0xpc3QqIGdldFBsdWdpbnMoKQotICAg
IHsKLSAgICAgICAgZ19saXN0X2ZyZWVfZnVsbChtX3BsdWdpbnMsIGdfb2JqZWN0X3VucmVmKTsK
LSAgICAgICAgd2Via2l0X3dlYl9jb250ZXh0X2dldF9wbHVnaW5zKG1fY29udGV4dCwgMCwgcmVp
bnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihnZXRQbHVnaW5zQXN5bmNSZWFkeUNh
bGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAg
ICAgICAgcmV0dXJuIG1fcGx1Z2luczsKLSAgICB9Ci0KLSAgICBXZWJLaXRXZWJDb250ZXh0KiBt
X2NvbnRleHQ7Ci0gICAgR01haW5Mb29wKiBtX21haW5Mb29wOwotICAgIEdMaXN0KiBtX3BsdWdp
bnM7Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViQ29udGV4dEdldFBsdWdpbnMoUGx1Z2luc1Rl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgR0xpc3QqIHBsdWdpbnMgPSB0ZXN0LT5n
ZXRQbHVnaW5zKCk7Ci0gICAgZ19hc3NlcnQocGx1Z2lucyk7Ci0KLSAgICBHUmVmUHRyPFdlYktp
dFBsdWdpbj4gdGVzdFBsdWdpbjsKLSAgICBmb3IgKEdMaXN0KiBpdGVtID0gcGx1Z2luczsgaXRl
bTsgaXRlbSA9IGdfbGlzdF9uZXh0KGl0ZW0pKSB7Ci0gICAgICAgIFdlYktpdFBsdWdpbiogcGx1
Z2luID0gV0VCS0lUX1BMVUdJTihpdGVtLT5kYXRhKTsKLSAgICAgICAgdGVzdC0+YXNzZXJ0T2Jq
ZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChwbHVnaW4pKTsKLSAgICAgICAg
aWYgKCFnX3N0cmNtcDAod2Via2l0X3BsdWdpbl9nZXRfbmFtZShwbHVnaW4pLCAiV2ViS2l0IFRl
c3QgUGx1Z0luIikpIHsKLSAgICAgICAgICAgIHRlc3RQbHVnaW4gPSBwbHVnaW47Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBnX2Fzc2VydChXRUJLSVRfSVNfUExV
R0lOKHRlc3RQbHVnaW4uZ2V0KCkpKTsKLQotICAgIEdPd25QdHI8Y2hhcj4gcGx1Z2luUGF0aChn
X2J1aWxkX2ZpbGVuYW1lKFdFQktJVF9URVNUX1BMVUdJTl9ESVIsICJsaWJUZXN0TmV0c2NhcGVQ
bHVnaW4uc28iLCBOVUxMKSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9wbHVnaW5fZ2V0
X3BhdGgodGVzdFBsdWdpbi5nZXQoKSksID09LCBwbHVnaW5QYXRoLmdldCgpKTsKLSAgICBnX2Fz
c2VydF9jbXBzdHIod2Via2l0X3BsdWdpbl9nZXRfZGVzY3JpcHRpb24odGVzdFBsdWdpbi5nZXQo
KSksID09LCAiU2ltcGxlIE5ldHNjYXBlwq4gcGx1Zy1pbiB0aGF0IGhhbmRsZXMgdGVzdCBjb250
ZW50IGZvciBXZWJLaXQiKTsKLSAgICBHTGlzdCogbWltZUluZm9MaXN0ID0gd2Via2l0X3BsdWdp
bl9nZXRfbWltZV9pbmZvX2xpc3QodGVzdFBsdWdpbi5nZXQoKSk7Ci0gICAgZ19hc3NlcnQobWlt
ZUluZm9MaXN0KTsKLSAgICBnX2Fzc2VydF9jbXB1aW50KGdfbGlzdF9sZW5ndGgobWltZUluZm9M
aXN0KSwgPT0sIDIpOwotCi0gICAgV2ViS2l0TWltZUluZm8qIG1pbWVJbmZvID0gc3RhdGljX2Nh
c3Q8V2ViS2l0TWltZUluZm8qPihtaW1lSW5mb0xpc3QtPmRhdGEpOwotICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfbWltZV9pbmZvX2dldF9taW1lX3R5cGUobWltZUluZm8pLCA9PSwgImltYWdl
L3BuZyIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfbWltZV9pbmZvX2dldF9kZXNjcmlw
dGlvbihtaW1lSW5mbyksID09LCAicG5nIGltYWdlIik7Ci0gICAgY29uc3QgZ2NoYXIqIGNvbnN0
KiBleHRlbnNpb25zID0gd2Via2l0X21pbWVfaW5mb19nZXRfZXh0ZW5zaW9ucyhtaW1lSW5mbyk7
Ci0gICAgZ19hc3NlcnQoZXh0ZW5zaW9ucyk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKGV4dGVuc2lv
bnNbMF0sID09LCAicG5nIik7Ci0KLSAgICBtaW1lSW5mb0xpc3QgPSBnX2xpc3RfbmV4dChtaW1l
SW5mb0xpc3QpOwotICAgIG1pbWVJbmZvID0gc3RhdGljX2Nhc3Q8V2ViS2l0TWltZUluZm8qPiht
aW1lSW5mb0xpc3QtPmRhdGEpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfbWltZV9pbmZv
X2dldF9taW1lX3R5cGUobWltZUluZm8pLCA9PSwgImFwcGxpY2F0aW9uL3gtd2Via2l0LXRlc3Qt
bmV0c2NhcGUiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X21pbWVfaW5mb19nZXRfZGVz
Y3JpcHRpb24obWltZUluZm8pLCA9PSwgInRlc3QgbmV0c2NhcGUgY29udGVudCIpOwotICAgIGV4
dGVuc2lvbnMgPSB3ZWJraXRfbWltZV9pbmZvX2dldF9leHRlbnNpb25zKG1pbWVJbmZvKTsKLSAg
ICBnX2Fzc2VydChleHRlbnNpb25zKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoZXh0ZW5zaW9uc1sw
XSwgPT0sICJ0ZXN0bmV0c2NhcGUiKTsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIqIGtCYXJIVE1M
ID0gIjxodG1sPjxib2R5PkJhcjwvYm9keT48L2h0bWw+IjsKLXN0YXRpYyBjb25zdCBjaGFyKiBr
RWNob0hUTUxGb3JtYXQgPSAiPGh0bWw+PGJvZHk+JXM8L2JvZHk+PC9odG1sPiI7Ci1zdGF0aWMg
Y29uc3QgY2hhciogZXJyb3JEb21haW4gPSAidGVzdCI7Ci1zdGF0aWMgY29uc3QgaW50IGVycm9y
Q29kZSA9IDEwOwotc3RhdGljIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSA9ICJFcnJvciBtZXNz
YWdlLiI7Ci0KLWNsYXNzIFVSSVNjaGVtZVRlc3Q6IHB1YmxpYyBMb2FkVHJhY2tpbmdUZXN0IHsK
LXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFVSSVNjaGVtZVRlc3QpOwotCi0g
ICAgc3RydWN0IFVSSVNjaGVtZUhhbmRsZXIgewotICAgICAgICBVUklTY2hlbWVIYW5kbGVyKCkK
LSAgICAgICAgICAgIDogcmVwbHlMZW5ndGgoMCkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAg
ICAgICAgVVJJU2NoZW1lSGFuZGxlcihjb25zdCBjaGFyKiByZXBseSwgaW50IHJlcGx5TGVuZ3Ro
LCBjb25zdCBjaGFyKiBtaW1lVHlwZSkKLSAgICAgICAgICAgIDogcmVwbHkocmVwbHkpCi0gICAg
ICAgICAgICAsIHJlcGx5TGVuZ3RoKHJlcGx5TGVuZ3RoKQotICAgICAgICAgICAgLCBtaW1lVHlw
ZShtaW1lVHlwZSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgQ1N0cmluZyByZXBs
eTsKLSAgICAgICAgaW50IHJlcGx5TGVuZ3RoOwotICAgICAgICBDU3RyaW5nIG1pbWVUeXBlOwot
ICAgIH07Ci0KLSAgICBzdGF0aWMgdm9pZCB1cmlTY2hlbWVSZXF1ZXN0Q2FsbGJhY2soV2ViS2l0
VVJJU2NoZW1lUmVxdWVzdCogcmVxdWVzdCwgZ3BvaW50ZXIgdXNlckRhdGEpCi0gICAgewotICAg
ICAgICBVUklTY2hlbWVUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8VVJJU2NoZW1lVGVzdCo+KHVz
ZXJEYXRhKTsKLSAgICAgICAgdGVzdC0+bV91cmlTY2hlbWVSZXF1ZXN0ID0gcmVxdWVzdDsKLSAg
ICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVD
VChyZXF1ZXN0KSk7Ci0KLSAgICAgICAgZ19hc3NlcnQod2Via2l0X3VyaV9zY2hlbWVfcmVxdWVz
dF9nZXRfd2ViX3ZpZXcocmVxdWVzdCkgPT0gdGVzdC0+bV93ZWJWaWV3KTsKLQotICAgICAgICBH
UmVmUHRyPEdJbnB1dFN0cmVhbT4gaW5wdXRTdHJlYW0gPSBhZG9wdEdSZWYoZ19tZW1vcnlfaW5w
dXRfc3RyZWFtX25ldygpKTsKLSAgICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hl
blRlc3RGaW5pc2hlcyhHX09CSkVDVChpbnB1dFN0cmVhbS5nZXQoKSkpOwotCi0gICAgICAgIGNv
bnN0IGNoYXIqIHNjaGVtZSA9IHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0X3NjaGVtZShy
ZXF1ZXN0KTsKLSAgICAgICAgZ19hc3NlcnQoc2NoZW1lKTsKLSAgICAgICAgZ19hc3NlcnQodGVz
dC0+bV9oYW5kbGVyc01hcC5jb250YWlucyhTdHJpbmc6OmZyb21VVEY4KHNjaGVtZSkpKTsKLQot
ICAgICAgICBpZiAoIWdfc3RyY21wMChzY2hlbWUsICJlcnJvciIpKSB7Ci0gICAgICAgICAgICBH
T3duUHRyPEdFcnJvcj4gZXJyb3IoZ19lcnJvcl9uZXdfbGl0ZXJhbChnX3F1YXJrX2Zyb21fc3Ry
aW5nKGVycm9yRG9tYWluKSwgZXJyb3JDb2RlLCBlcnJvck1lc3NhZ2UpKTsKLSAgICAgICAgICAg
IHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZmluaXNoX2Vycm9yKHJlcXVlc3QsIGVycm9yLmdl
dCgpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IFVS
SVNjaGVtZUhhbmRsZXImIGhhbmRsZXIgPSB0ZXN0LT5tX2hhbmRsZXJzTWFwLmdldChTdHJpbmc6
OmZyb21VVEY4KHNjaGVtZSkpOwotCi0gICAgICAgIGlmICghZ19zdHJjbXAwKHNjaGVtZSwgImVj
aG8iKSkgewotICAgICAgICAgICAgY2hhciogcmVwbHlIVE1MID0gZ19zdHJkdXBfcHJpbnRmKGhh
bmRsZXIucmVwbHkuZGF0YSgpLCB3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dldF9wYXRoKHJl
cXVlc3QpKTsKLSAgICAgICAgICAgIGdfbWVtb3J5X2lucHV0X3N0cmVhbV9hZGRfZGF0YShHX01F
TU9SWV9JTlBVVF9TVFJFQU0oaW5wdXRTdHJlYW0uZ2V0KCkpLCByZXBseUhUTUwsIHN0cmxlbihy
ZXBseUhUTUwpLCBnX2ZyZWUpOwotICAgICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAoc2NoZW1l
LCAiY2xvc2VkIikpCi0gICAgICAgICAgICBnX2lucHV0X3N0cmVhbV9jbG9zZShpbnB1dFN0cmVh
bS5nZXQoKSwgMCwgMCk7Ci0gICAgICAgIGVsc2UgaWYgKCFoYW5kbGVyLnJlcGx5LmlzTnVsbCgp
KQotICAgICAgICAgICAgZ19tZW1vcnlfaW5wdXRfc3RyZWFtX2FkZF9kYXRhKEdfTUVNT1JZX0lO
UFVUX1NUUkVBTShpbnB1dFN0cmVhbS5nZXQoKSksIGhhbmRsZXIucmVwbHkuZGF0YSgpLCBoYW5k
bGVyLnJlcGx5Lmxlbmd0aCgpLCAwKTsKLQotICAgICAgICB3ZWJraXRfdXJpX3NjaGVtZV9yZXF1
ZXN0X2ZpbmlzaChyZXF1ZXN0LCBpbnB1dFN0cmVhbS5nZXQoKSwgaGFuZGxlci5yZXBseUxlbmd0
aCwgaGFuZGxlci5taW1lVHlwZS5kYXRhKCkpOwotICAgIH0KLQotICAgIHZvaWQgcmVnaXN0ZXJV
UklTY2hlbWVIYW5kbGVyKGNvbnN0IGNoYXIqIHNjaGVtZSwgY29uc3QgY2hhciogcmVwbHksIGlu
dCByZXBseUxlbmd0aCwgY29uc3QgY2hhciogbWltZVR5cGUpCi0gICAgewotICAgICAgICBtX2hh
bmRsZXJzTWFwLnNldChTdHJpbmc6OmZyb21VVEY4KHNjaGVtZSksIFVSSVNjaGVtZUhhbmRsZXIo
cmVwbHksIHJlcGx5TGVuZ3RoLCBtaW1lVHlwZSkpOwotICAgICAgICB3ZWJraXRfd2ViX2NvbnRl
eHRfcmVnaXN0ZXJfdXJpX3NjaGVtZSh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSwg
c2NoZW1lLCB1cmlTY2hlbWVSZXF1ZXN0Q2FsbGJhY2ssIHRoaXMsIDApOwotICAgIH0KLQotICAg
IEdSZWZQdHI8V2ViS2l0VVJJU2NoZW1lUmVxdWVzdD4gbV91cmlTY2hlbWVSZXF1ZXN0OwotICAg
IEhhc2hNYXA8U3RyaW5nLCBVUklTY2hlbWVIYW5kbGVyPiBtX2hhbmRsZXJzTWFwOwotfTsKLQot
c3RhdGljIHZvaWQgdGVzdFdlYkNvbnRleHRVUklTY2hlbWUoVVJJU2NoZW1lVGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5yZWdpc3RlclVSSVNjaGVtZUhhbmRsZXIoImZv
byIsIGtCYXJIVE1MLCBzdHJsZW4oa0JhckhUTUwpLCAidGV4dC9odG1sIik7Ci0gICAgdGVzdC0+
bG9hZFVSSSgiZm9vOmJsYW5rIik7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7
Ci0gICAgc2l6ZV90IG1haW5SZXNvdXJjZURhdGFTaXplID0gMDsKLSAgICBjb25zdCBjaGFyKiBt
YWluUmVzb3VyY2VEYXRhID0gdGVzdC0+bWFpblJlc291cmNlRGF0YShtYWluUmVzb3VyY2VEYXRh
U2l6ZSk7Ci0gICAgZ19hc3NlcnRfY21waW50KG1haW5SZXNvdXJjZURhdGFTaXplLCA9PSwgc3Ry
bGVuKGtCYXJIVE1MKSk7Ci0gICAgZ19hc3NlcnQoIXN0cm5jbXAobWFpblJlc291cmNlRGF0YSwg
a0JhckhUTUwsIG1haW5SZXNvdXJjZURhdGFTaXplKSk7Ci0KLSAgICB0ZXN0LT5yZWdpc3RlclVS
SVNjaGVtZUhhbmRsZXIoImVjaG8iLCBrRWNob0hUTUxGb3JtYXQsIC0xLCAidGV4dC9odG1sIik7
Ci0gICAgdGVzdC0+bG9hZFVSSSgiZWNobzpoZWxsbyB3b3JsZCIpOwotICAgIHRlc3QtPndhaXRV
bnRpbExvYWRGaW5pc2hlZCgpOwotICAgIEdPd25QdHI8Y2hhcj4gZWNob0hUTUwoZ19zdHJkdXBf
cHJpbnRmKGtFY2hvSFRNTEZvcm1hdCwgd2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9nZXRfcGF0
aCh0ZXN0LT5tX3VyaVNjaGVtZVJlcXVlc3QuZ2V0KCkpKSk7Ci0gICAgbWFpblJlc291cmNlRGF0
YVNpemUgPSAwOwotICAgIG1haW5SZXNvdXJjZURhdGEgPSB0ZXN0LT5tYWluUmVzb3VyY2VEYXRh
KG1haW5SZXNvdXJjZURhdGFTaXplKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQobWFpblJlc291cmNl
RGF0YVNpemUsID09LCBzdHJsZW4oZWNob0hUTUwuZ2V0KCkpKTsKLSAgICBnX2Fzc2VydCghc3Ry
bmNtcChtYWluUmVzb3VyY2VEYXRhLCBlY2hvSFRNTC5nZXQoKSwgbWFpblJlc291cmNlRGF0YVNp
emUpKTsKLQotICAgIHRlc3QtPnJlZ2lzdGVyVVJJU2NoZW1lSGFuZGxlcigibm9taW1lIiwga0Jh
ckhUTUwsIC0xLCAwKTsKLSAgICB0ZXN0LT5tX2xvYWRFdmVudHMuY2xlYXIoKTsKLSAgICB0ZXN0
LT5sb2FkVVJJKCJub21pbWU6Zm9vIGJhciIpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5p
c2hlZCgpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fbG9hZEV2ZW50cy5jb250YWlucyhMb2FkVHJh
Y2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRGYWlsZWQpKTsKLQotICAgIHRlc3QtPnJlZ2lzdGVy
VVJJU2NoZW1lSGFuZGxlcigiZW1wdHkiLCAwLCAwLCAidGV4dC9odG1sIik7Ci0gICAgdGVzdC0+
bV9sb2FkRXZlbnRzLmNsZWFyKCk7Ci0gICAgdGVzdC0+bG9hZFVSSSgiZW1wdHk6bm90aGluZyIp
OwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGdfYXNzZXJ0KCF0ZXN0
LT5tX2xvYWRFdmVudHMuY29udGFpbnMoTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2Fk
RmFpbGVkKSk7Ci0gICAgZ19hc3NlcnQoIXRlc3QtPm1fbG9hZEV2ZW50cy5jb250YWlucyhMb2Fk
VHJhY2tpbmdUZXN0OjpMb2FkRmFpbGVkKSk7Ci0KLSAgICB0ZXN0LT5yZWdpc3RlclVSSVNjaGVt
ZUhhbmRsZXIoImVycm9yIiwgMCwgMCwgMCk7Ci0gICAgdGVzdC0+bV9sb2FkRXZlbnRzLmNsZWFy
KCk7Ci0gICAgdGVzdC0+bG9hZFVSSSgiZXJyb3I6ZXJyb3IiKTsKLSAgICB0ZXN0LT53YWl0VW50
aWxMb2FkRmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX2xvYWRFdmVudHMuY29udGFp
bnMoTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkRmFpbGVkKSk7Ci0gICAgZ19hc3Nl
cnQodGVzdC0+bV9sb2FkRmFpbGVkKTsKLSAgICBnX2Fzc2VydF9lcnJvcih0ZXN0LT5tX2Vycm9y
LmdldCgpLCBnX3F1YXJrX2Zyb21fc3RyaW5nKGVycm9yRG9tYWluKSwgZXJyb3JDb2RlKTsKLSAg
ICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9lcnJvci0+bWVzc2FnZSwgPT0sIGVycm9yTWVzc2Fn
ZSk7Ci0KLSAgICB0ZXN0LT5yZWdpc3RlclVSSVNjaGVtZUhhbmRsZXIoImNsb3NlZCIsIDAsIDAs
IDApOwotICAgIHRlc3QtPm1fbG9hZEV2ZW50cy5jbGVhcigpOwotICAgIHRlc3QtPmxvYWRVUkko
ImNsb3NlZDppbnB1dC1zdHJlYW0iKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQo
KTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX2xvYWRFdmVudHMuY29udGFpbnMoTG9hZFRyYWNraW5n
VGVzdDo6UHJvdmlzaW9uYWxMb2FkRmFpbGVkKSk7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV9sb2Fk
RmFpbGVkKTsKLSAgICBnX2Fzc2VydF9lcnJvcih0ZXN0LT5tX2Vycm9yLmdldCgpLCBHX0lPX0VS
Uk9SLCBHX0lPX0VSUk9SX0NMT1NFRCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJDb250ZXh0
U3BlbGxDaGVja2VyKFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgV2ViS2l0V2Vi
Q29udGV4dCogd2ViQ29udGV4dCA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpOwot
Ci0gICAgLy8gQ2hlY2sgd2hhdCBoYXBwZW5zIGlmIG5vIHNwZWxsIGNoZWNraW5nIGxhbmd1YWdl
IGhhcyBiZWVuIHNldC4KLSAgICBjb25zdCBnY2hhciogY29uc3QqIGN1cnJlbnRMYW5ndWFnZSA9
IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKHdlYkNvbnRl
eHQpOwotICAgIGdfYXNzZXJ0KCFjdXJyZW50TGFuZ3VhZ2UpOwotCi0gICAgLy8gU2V0IHRoZSBs
YW5ndWFnZSB0byBhIHNwZWNpZmljIG9uZS4KLSAgICBHUmVmUHRyPEdQdHJBcnJheT4gbGFuZ3Vh
Z2VzID0gYWRvcHRHUmVmKGdfcHRyX2FycmF5X25ldygpKTsKLSAgICBnX3B0cl9hcnJheV9hZGQo
bGFuZ3VhZ2VzLmdldCgpLCBjb25zdF9jYXN0PGdwb2ludGVyPihzdGF0aWNfY2FzdDxjb25zdCB2
b2lkKj4oImVuX1VTIikpKTsKLSAgICBnX3B0cl9hcnJheV9hZGQobGFuZ3VhZ2VzLmdldCgpLCAw
KTsKLSAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyh3
ZWJDb250ZXh0LCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqIGNvbnN0Kj4obGFuZ3VhZ2Vz
LT5wZGF0YSkpOwotICAgIGN1cnJlbnRMYW5ndWFnZSA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRf
c3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKHdlYkNvbnRleHQpOwotICAgIGdfYXNzZXJ0X2NtcHVp
bnQoZ19zdHJ2X2xlbmd0aChjb25zdF9jYXN0PGNoYXIqKj4oY3VycmVudExhbmd1YWdlKSksID09
LCAxKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoY3VycmVudExhbmd1YWdlWzBdLCA9PSwgImVuX1VT
Iik7Ci0KLSAgICAvLyBTZXQgdGhlIGxhbmd1YWdlIHN0cmluZyB0byBsaXN0IG9mIHZhbGlkIGxh
bmd1YWdlcy4KLSAgICBnX3B0cl9hcnJheV9yZW1vdmVfaW5kZXhfZmFzdChsYW5ndWFnZXMuZ2V0
KCksIGxhbmd1YWdlcy0+bGVuIC0gMSk7Ci0gICAgZ19wdHJfYXJyYXlfYWRkKGxhbmd1YWdlcy5n
ZXQoKSwgY29uc3RfY2FzdDxncG9pbnRlcj4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KCJlbl9H
QiIpKSk7Ci0gICAgZ19wdHJfYXJyYXlfYWRkKGxhbmd1YWdlcy5nZXQoKSwgMCk7Ci0gICAgd2Vi
a2l0X3dlYl9jb250ZXh0X3NldF9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMod2ViQ29udGV4dCwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKiBjb25zdCo+KGxhbmd1YWdlcy0+cGRhdGEpKTsK
LSAgICBjdXJyZW50TGFuZ3VhZ2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3NwZWxsX2NoZWNr
aW5nX2xhbmd1YWdlcyh3ZWJDb250ZXh0KTsKLSAgICBnX2Fzc2VydF9jbXB1aW50KGdfc3Rydl9s
ZW5ndGgoY29uc3RfY2FzdDxjaGFyKio+KGN1cnJlbnRMYW5ndWFnZSkpLCA9PSwgMik7Ci0gICAg
Z19hc3NlcnRfY21wc3RyKGN1cnJlbnRMYW5ndWFnZVswXSwgPT0sICJlbl9VUyIpOwotICAgIGdf
YXNzZXJ0X2NtcHN0cihjdXJyZW50TGFuZ3VhZ2VbMV0sID09LCAiZW5fR0IiKTsKLQotICAgIC8v
IFRyeSBwYXNzaW5nIGEgd3JvbmcgbGFuZ3VhZ2UgYWxvbmcgd2l0aCBnb29kIG9uZXMuCi0gICAg
Z19wdHJfYXJyYXlfcmVtb3ZlX2luZGV4X2Zhc3QobGFuZ3VhZ2VzLmdldCgpLCBsYW5ndWFnZXMt
PmxlbiAtIDEpOwotICAgIGdfcHRyX2FycmF5X2FkZChsYW5ndWFnZXMuZ2V0KCksIGNvbnN0X2Nh
c3Q8Z3BvaW50ZXI+KHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqPigiYmRfV1IiKSkpOwotICAgIGdf
cHRyX2FycmF5X2FkZChsYW5ndWFnZXMuZ2V0KCksIDApOwotICAgIHdlYmtpdF93ZWJfY29udGV4
dF9zZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKHdlYkNvbnRleHQsIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgY2hhciogY29uc3QqPihsYW5ndWFnZXMtPnBkYXRhKSk7Ci0gICAgY3VycmVudExh
bmd1YWdlID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMo
d2ViQ29udGV4dCk7Ci0gICAgZ19hc3NlcnRfY21wdWludChnX3N0cnZfbGVuZ3RoKGNvbnN0X2Nh
c3Q8Y2hhcioqPihjdXJyZW50TGFuZ3VhZ2UpKSwgPT0sIDIpOwotICAgIGdfYXNzZXJ0X2NtcHN0
cihjdXJyZW50TGFuZ3VhZ2VbMF0sID09LCAiZW5fVVMiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIo
Y3VycmVudExhbmd1YWdlWzFdLCA9PSwgImVuX0dCIik7Ci0KLSAgICAvLyBUcnkgcGFzc2luZyBh
IGxpc3Qgd2l0aCBvbmx5IHdyb25nIGxhbmd1YWdlcy4KLSAgICBsYW5ndWFnZXMgPSBhZG9wdEdS
ZWYoZ19wdHJfYXJyYXlfbmV3KCkpOwotICAgIGdfcHRyX2FycmF5X2FkZChsYW5ndWFnZXMuZ2V0
KCksIGNvbnN0X2Nhc3Q8Z3BvaW50ZXI+KHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqPigiYmRfV1Ii
KSkpOwotICAgIGdfcHRyX2FycmF5X2FkZChsYW5ndWFnZXMuZ2V0KCksIGNvbnN0X2Nhc3Q8Z3Bv
aW50ZXI+KHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqPigid3JfQkQiKSkpOwotICAgIGdfcHRyX2Fy
cmF5X2FkZChsYW5ndWFnZXMuZ2V0KCksIDApOwotICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRf
c3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKHdlYkNvbnRleHQsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgY2hhciogY29uc3QqPihsYW5ndWFnZXMtPnBkYXRhKSk7Ci0gICAgY3VycmVudExhbmd1YWdl
ID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMod2ViQ29u
dGV4dCk7Ci0gICAgZ19hc3NlcnQoIWN1cnJlbnRMYW5ndWFnZSk7Ci0KLSAgICAvLyBDaGVjayBk
aXNhYmxpbmcgYW5kIHJlLWVuYWJsaW5nIHNwZWxsIGNoZWNraW5nLgotICAgIHdlYmtpdF93ZWJf
Y29udGV4dF9zZXRfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZCh3ZWJDb250ZXh0LCBGQUxTRSk7Ci0g
ICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hlY2tpbmdfZW5hYmxl
ZCh3ZWJDb250ZXh0KSk7Ci0gICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF9zcGVsbF9jaGVja2lu
Z19lbmFibGVkKHdlYkNvbnRleHQsIFRSVUUpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfY29u
dGV4dF9nZXRfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZCh3ZWJDb250ZXh0KSk7Ci19Ci0KLXN0YXRp
YyB2b2lkIHRlc3RXZWJDb250ZXh0TGFuZ3VhZ2VzKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rw
b2ludGVyKQotewotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBleHBlY3RlZERlZmF1bHRMYW5ndWFn
ZSA9ICJlbiI7Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIiku
ZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBzaXplX3Qg
bWFpblJlc291cmNlRGF0YVNpemUgPSAwOwotICAgIGNvbnN0IGNoYXIqIG1haW5SZXNvdXJjZURh
dGEgPSB0ZXN0LT5tYWluUmVzb3VyY2VEYXRhKG1haW5SZXNvdXJjZURhdGFTaXplKTsKLSAgICBn
X2Fzc2VydF9jbXB1aW50KG1haW5SZXNvdXJjZURhdGFTaXplLCA9PSwgc3RybGVuKGV4cGVjdGVk
RGVmYXVsdExhbmd1YWdlKSk7Ci0gICAgZ19hc3NlcnQoIXN0cm5jbXAobWFpblJlc291cmNlRGF0
YSwgZXhwZWN0ZWREZWZhdWx0TGFuZ3VhZ2UsIG1haW5SZXNvdXJjZURhdGFTaXplKSk7Ci0KLSAg
ICBHUmVmUHRyPEdQdHJBcnJheT4gbGFuZ3VhZ2VzID0gYWRvcHRHUmVmKGdfcHRyX2FycmF5X25l
dygpKTsKLSAgICBnX3B0cl9hcnJheV9hZGQobGFuZ3VhZ2VzLmdldCgpLCBjb25zdF9jYXN0PGdw
b2ludGVyPihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4oImVuIikpKTsKLSAgICBnX3B0cl9hcnJh
eV9hZGQobGFuZ3VhZ2VzLmdldCgpLCBjb25zdF9jYXN0PGdwb2ludGVyPihzdGF0aWNfY2FzdDxj
b25zdCB2b2lkKj4oIkVTX2VzIikpKTsKLSAgICBnX3B0cl9hcnJheV9hZGQobGFuZ3VhZ2VzLmdl
dCgpLCBjb25zdF9jYXN0PGdwb2ludGVyPihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4oImRFIikp
KTsKLSAgICBnX3B0cl9hcnJheV9hZGQobGFuZ3VhZ2VzLmdldCgpLCAwKTsKLSAgICB3ZWJraXRf
d2ViX2NvbnRleHRfc2V0X3ByZWZlcnJlZF9sYW5ndWFnZXMod2Via2l0X3dlYl9jb250ZXh0X2dl
dF9kZWZhdWx0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhciogY29uc3QqPihsYW5ndWFn
ZXMtPnBkYXRhKSk7Ci0KLSAgICBzdGF0aWMgY29uc3QgY2hhciogZXhwZWN0ZWRMYW5ndWFnZXMg
PSAiZW4sIGVzLWVzO3E9MC45MCwgZGU7cT0wLjgwIjsKLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2
ZXItPmdldFVSSUZvclBhdGgoIi8iKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRG
aW5pc2hlZCgpOwotICAgIG1haW5SZXNvdXJjZURhdGFTaXplID0gMDsKLSAgICBtYWluUmVzb3Vy
Y2VEYXRhID0gdGVzdC0+bWFpblJlc291cmNlRGF0YShtYWluUmVzb3VyY2VEYXRhU2l6ZSk7Ci0g
ICAgZ19hc3NlcnRfY21wdWludChtYWluUmVzb3VyY2VEYXRhU2l6ZSwgPT0sIHN0cmxlbihleHBl
Y3RlZExhbmd1YWdlcykpOwotICAgIGdfYXNzZXJ0KCFzdHJuY21wKG1haW5SZXNvdXJjZURhdGEs
IGV4cGVjdGVkTGFuZ3VhZ2VzLCBtYWluUmVzb3VyY2VEYXRhU2l6ZSkpOwotfQotCi1zdGF0aWMg
dm9pZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtZXNz
YWdlLCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiwgU291cENsaWVudENvbnRleHQqLCBn
cG9pbnRlcikKLXsKLSAgICBpZiAobWVzc2FnZS0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkg
ewotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19O
T1RfSU1QTEVNRU5URUQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGdfc3Ry
X2VxdWFsKHBhdGgsICIvIikpIHsKLSAgICAgICAgY29uc3QgY2hhciogYWNjZXB0TGFuZ3VhZ2Ug
PSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfb25lKG1lc3NhZ2UtPnJlcXVlc3RfaGVhZGVycywg
IkFjY2VwdC1MYW5ndWFnZSIpOwotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNz
YWdlLCBTT1VQX1NUQVRVU19PSyk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZCht
ZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9DT1BZLCBhY2NlcHRMYW5ndWFnZSwg
c3RybGVuKGFjY2VwdExhbmd1YWdlKSk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBs
ZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOwotICAgIH0gZWxzZQotICAgICAgICBzb3VwX21l
c3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfRk9VTkQpOwotfQotCi1j
bGFzcyBTZWN1cml0eVBvbGljeVRlc3Q6IHB1YmxpYyBUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtF
X0dMSUJfVEVTVF9GSVhUVVJFKFNlY3VyaXR5UG9saWN5VGVzdCk7Ci0KLSAgICBlbnVtIFNlY3Vy
aXR5UG9saWN5IHsKLSAgICAgICAgTG9jYWwgPSAxIDw8IDEsCi0gICAgICAgIE5vQWNjZXNzID0g
MSA8PCAyLAotICAgICAgICBEaXNwbGF5SXNvbGF0ZWQgPSAxIDw8IDMsCi0gICAgICAgIFNlY3Vy
ZSA9IDEgPDwgNCwKLSAgICAgICAgQ09SU0VuYWJsZWQgPSAxIDw8IDUsCi0gICAgICAgIEVtcHR5
RG9jdW1lbnQgPSAxIDw8IDYKLSAgICB9OwotCi0gICAgU2VjdXJpdHlQb2xpY3lUZXN0KCkKLSAg
ICAgICAgOiBtX21hbmFnZXIod2Via2l0X3dlYl9jb250ZXh0X2dldF9zZWN1cml0eV9tYW5hZ2Vy
KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpKSkKLSAgICB7Ci0gICAgfQotCi0gICAg
dm9pZCB2ZXJpZnlUaGF0U2NoZW1lTWF0Y2hlc1BvbGljeShjb25zdCBjaGFyKiBzY2hlbWUsIHVu
c2lnbmVkIHBvbGljeSkKLSAgICB7Ci0gICAgICAgIGlmIChwb2xpY3kgJiBMb2NhbCkKLSAgICAg
ICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9zZWN1cml0eV9tYW5hZ2VyX3VyaV9zY2hlbWVfaXNfbG9j
YWwobV9tYW5hZ2VyLCBzY2hlbWUpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZ19hc3Nl
cnQoIXdlYmtpdF9zZWN1cml0eV9tYW5hZ2VyX3VyaV9zY2hlbWVfaXNfbG9jYWwobV9tYW5hZ2Vy
LCBzY2hlbWUpKTsKLSAgICAgICAgaWYgKHBvbGljeSAmIE5vQWNjZXNzKQotICAgICAgICAgICAg
Z19hc3NlcnQod2Via2l0X3NlY3VyaXR5X21hbmFnZXJfdXJpX3NjaGVtZV9pc19ub19hY2Nlc3Mo
bV9tYW5hZ2VyLCBzY2hlbWUpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZ19hc3NlcnQo
IXdlYmtpdF9zZWN1cml0eV9tYW5hZ2VyX3VyaV9zY2hlbWVfaXNfbm9fYWNjZXNzKG1fbWFuYWdl
ciwgc2NoZW1lKSk7Ci0gICAgICAgIGlmIChwb2xpY3kgJiBEaXNwbGF5SXNvbGF0ZWQpCi0gICAg
ICAgICAgICBnX2Fzc2VydCh3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl91cmlfc2NoZW1lX2lzX2Rp
c3BsYXlfaXNvbGF0ZWQobV9tYW5hZ2VyLCBzY2hlbWUpKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgZ19hc3NlcnQoIXdlYmtpdF9zZWN1cml0eV9tYW5hZ2VyX3VyaV9zY2hlbWVfaXNfZGlz
cGxheV9pc29sYXRlZChtX21hbmFnZXIsIHNjaGVtZSkpOwotICAgICAgICBpZiAocG9saWN5ICYg
U2VjdXJlKQotICAgICAgICAgICAgZ19hc3NlcnQod2Via2l0X3NlY3VyaXR5X21hbmFnZXJfdXJp
X3NjaGVtZV9pc19zZWN1cmUobV9tYW5hZ2VyLCBzY2hlbWUpKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9zZWN1cml0eV9tYW5hZ2VyX3VyaV9zY2hlbWVfaXNf
c2VjdXJlKG1fbWFuYWdlciwgc2NoZW1lKSk7Ci0gICAgICAgIGlmIChwb2xpY3kgJiBDT1JTRW5h
YmxlZCkKLSAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9zZWN1cml0eV9tYW5hZ2VyX3VyaV9z
Y2hlbWVfaXNfY29yc19lbmFibGVkKG1fbWFuYWdlciwgc2NoZW1lKSk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl91cmlfc2NoZW1l
X2lzX2NvcnNfZW5hYmxlZChtX21hbmFnZXIsIHNjaGVtZSkpOwotICAgICAgICBpZiAocG9saWN5
ICYgRW1wdHlEb2N1bWVudCkKLSAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9zZWN1cml0eV9t
YW5hZ2VyX3VyaV9zY2hlbWVfaXNfZW1wdHlfZG9jdW1lbnQobV9tYW5hZ2VyLCBzY2hlbWUpKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9zZWN1cml0eV9tYW5h
Z2VyX3VyaV9zY2hlbWVfaXNfZW1wdHlfZG9jdW1lbnQobV9tYW5hZ2VyLCBzY2hlbWUpKTsKLSAg
ICB9Ci0KLSAgICBXZWJLaXRTZWN1cml0eU1hbmFnZXIqIG1fbWFuYWdlcjsKLX07Ci0KLXN0YXRp
YyB2b2lkIHRlc3RXZWJDb250ZXh0U2VjdXJpdHlQb2xpY3koU2VjdXJpdHlQb2xpY3lUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIC8vIFZlcmlmeVRoYXRTY2hlbWVNYXRjaGVzUG9s
aWN5IGRlZmF1bHQgcG9saWN5IGZvciB3ZWxsIGtub3duIHNjaGVtZXMuCi0gICAgdGVzdC0+dmVy
aWZ5VGhhdFNjaGVtZU1hdGNoZXNQb2xpY3koImh0dHAiLCBTZWN1cml0eVBvbGljeVRlc3Q6OkNP
UlNFbmFibGVkKTsKLSAgICB0ZXN0LT52ZXJpZnlUaGF0U2NoZW1lTWF0Y2hlc1BvbGljeSgiaHR0
cHMiLCBTZWN1cml0eVBvbGljeVRlc3Q6OkNPUlNFbmFibGVkIHwgU2VjdXJpdHlQb2xpY3lUZXN0
OjpTZWN1cmUpOwotICAgIHRlc3QtPnZlcmlmeVRoYXRTY2hlbWVNYXRjaGVzUG9saWN5KCJmaWxl
IiwgU2VjdXJpdHlQb2xpY3lUZXN0OjpMb2NhbCk7Ci0gICAgdGVzdC0+dmVyaWZ5VGhhdFNjaGVt
ZU1hdGNoZXNQb2xpY3koImRhdGEiLCBTZWN1cml0eVBvbGljeVRlc3Q6Ok5vQWNjZXNzIHwgU2Vj
dXJpdHlQb2xpY3lUZXN0OjpTZWN1cmUpOwotICAgIHRlc3QtPnZlcmlmeVRoYXRTY2hlbWVNYXRj
aGVzUG9saWN5KCJhYm91dCIsIFNlY3VyaXR5UG9saWN5VGVzdDo6Tm9BY2Nlc3MgfCBTZWN1cml0
eVBvbGljeVRlc3Q6OlNlY3VyZSB8IFNlY3VyaXR5UG9saWN5VGVzdDo6RW1wdHlEb2N1bWVudCk7
Ci0KLSAgICAvLyBDdXN0b20gc2NoZW1lLgotICAgIHRlc3QtPnZlcmlmeVRoYXRTY2hlbWVNYXRj
aGVzUG9saWN5KCJmb28iLCAwKTsKLQotICAgIHdlYmtpdF9zZWN1cml0eV9tYW5hZ2VyX3JlZ2lz
dGVyX3VyaV9zY2hlbWVfYXNfbG9jYWwodGVzdC0+bV9tYW5hZ2VyLCAiZm9vIik7Ci0gICAgdGVz
dC0+dmVyaWZ5VGhhdFNjaGVtZU1hdGNoZXNQb2xpY3koImZvbyIsIFNlY3VyaXR5UG9saWN5VGVz
dDo6TG9jYWwpOwotICAgIHdlYmtpdF9zZWN1cml0eV9tYW5hZ2VyX3JlZ2lzdGVyX3VyaV9zY2hl
bWVfYXNfbm9fYWNjZXNzKHRlc3QtPm1fbWFuYWdlciwgImZvbyIpOwotICAgIHRlc3QtPnZlcmlm
eVRoYXRTY2hlbWVNYXRjaGVzUG9saWN5KCJmb28iLCBTZWN1cml0eVBvbGljeVRlc3Q6OkxvY2Fs
IHwgU2VjdXJpdHlQb2xpY3lUZXN0OjpOb0FjY2Vzcyk7Ci0gICAgd2Via2l0X3NlY3VyaXR5X21h
bmFnZXJfcmVnaXN0ZXJfdXJpX3NjaGVtZV9hc19kaXNwbGF5X2lzb2xhdGVkKHRlc3QtPm1fbWFu
YWdlciwgImZvbyIpOwotICAgIHRlc3QtPnZlcmlmeVRoYXRTY2hlbWVNYXRjaGVzUG9saWN5KCJm
b28iLCBTZWN1cml0eVBvbGljeVRlc3Q6OkxvY2FsIHwgU2VjdXJpdHlQb2xpY3lUZXN0OjpOb0Fj
Y2VzcyB8IFNlY3VyaXR5UG9saWN5VGVzdDo6RGlzcGxheUlzb2xhdGVkKTsKLSAgICB3ZWJraXRf
c2VjdXJpdHlfbWFuYWdlcl9yZWdpc3Rlcl91cmlfc2NoZW1lX2FzX3NlY3VyZSh0ZXN0LT5tX21h
bmFnZXIsICJmb28iKTsKLSAgICB0ZXN0LT52ZXJpZnlUaGF0U2NoZW1lTWF0Y2hlc1BvbGljeSgi
Zm9vIiwgU2VjdXJpdHlQb2xpY3lUZXN0OjpMb2NhbCB8IFNlY3VyaXR5UG9saWN5VGVzdDo6Tm9B
Y2Nlc3MgfCBTZWN1cml0eVBvbGljeVRlc3Q6OkRpc3BsYXlJc29sYXRlZCB8IFNlY3VyaXR5UG9s
aWN5VGVzdDo6U2VjdXJlKTsKLSAgICB3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl9yZWdpc3Rlcl91
cmlfc2NoZW1lX2FzX2NvcnNfZW5hYmxlZCh0ZXN0LT5tX21hbmFnZXIsICJmb28iKTsKLSAgICB0
ZXN0LT52ZXJpZnlUaGF0U2NoZW1lTWF0Y2hlc1BvbGljeSgiZm9vIiwgU2VjdXJpdHlQb2xpY3lU
ZXN0OjpMb2NhbCB8IFNlY3VyaXR5UG9saWN5VGVzdDo6Tm9BY2Nlc3MgfCBTZWN1cml0eVBvbGlj
eVRlc3Q6OkRpc3BsYXlJc29sYXRlZCB8IFNlY3VyaXR5UG9saWN5VGVzdDo6U2VjdXJlCi0gICAg
ICAgICAgICAgICAgfCBTZWN1cml0eVBvbGljeVRlc3Q6OkNPUlNFbmFibGVkKTsKLSAgICB3ZWJr
aXRfc2VjdXJpdHlfbWFuYWdlcl9yZWdpc3Rlcl91cmlfc2NoZW1lX2FzX2VtcHR5X2RvY3VtZW50
KHRlc3QtPm1fbWFuYWdlciwgImZvbyIpOwotICAgIHRlc3QtPnZlcmlmeVRoYXRTY2hlbWVNYXRj
aGVzUG9saWN5KCJmb28iLCBTZWN1cml0eVBvbGljeVRlc3Q6OkxvY2FsIHwgU2VjdXJpdHlQb2xp
Y3lUZXN0OjpOb0FjY2VzcyB8IFNlY3VyaXR5UG9saWN5VGVzdDo6RGlzcGxheUlzb2xhdGVkIHwg
U2VjdXJpdHlQb2xpY3lUZXN0OjpTZWN1cmUKLSAgICAgICAgICAgICAgICB8IFNlY3VyaXR5UG9s
aWN5VGVzdDo6Q09SU0VuYWJsZWQgfCBTZWN1cml0eVBvbGljeVRlc3Q6OkVtcHR5RG9jdW1lbnQp
OwotfQotCi12b2lkIGJlZm9yZUFsbCgpCi17Ci0gICAga1NlcnZlciA9IG5ldyBXZWJLaXRUZXN0
U2VydmVyKCk7Ci0gICAga1NlcnZlci0+cnVuKHNlcnZlckNhbGxiYWNrKTsKLQotICAgIFRlc3Q6
OmFkZCgiV2ViS2l0V2ViQ29udGV4dCIsICJkZWZhdWx0LWNvbnRleHQiLCB0ZXN0V2ViQ29udGV4
dERlZmF1bHQpOwotICAgIFBsdWdpbnNUZXN0OjphZGQoIldlYktpdFdlYkNvbnRleHQiLCAiZ2V0
LXBsdWdpbnMiLCB0ZXN0V2ViQ29udGV4dEdldFBsdWdpbnMpOwotICAgIFVSSVNjaGVtZVRlc3Q6
OmFkZCgiV2ViS2l0V2ViQ29udGV4dCIsICJ1cmktc2NoZW1lIiwgdGVzdFdlYkNvbnRleHRVUklT
Y2hlbWUpOwotICAgIFRlc3Q6OmFkZCgiV2ViS2l0V2ViQ29udGV4dCIsICJzcGVsbC1jaGVja2Vy
IiwgdGVzdFdlYkNvbnRleHRTcGVsbENoZWNrZXIpOwotICAgIFdlYlZpZXdUZXN0OjphZGQoIldl
YktpdFdlYkNvbnRleHQiLCAibGFuZ3VhZ2VzIiwgdGVzdFdlYkNvbnRleHRMYW5ndWFnZXMpOwot
ICAgIFNlY3VyaXR5UG9saWN5VGVzdDo6YWRkKCJXZWJLaXRTZWN1cml0eU1hbmFnZXIiLCAic2Vj
dXJpdHktcG9saWN5IiwgdGVzdFdlYkNvbnRleHRTZWN1cml0eVBvbGljeSk7Ci19Ci0KLXZvaWQg
YWZ0ZXJBbGwoKQotewotICAgIGRlbGV0ZSBrU2VydmVyOwotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzBiMGEyLi4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDYwOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDExIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9u
IDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViVmll
d1Rlc3QuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oPgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0pTVmFsdWVSZWYuaD4KLSNpbmNsdWRlIDxnbGliL2dzdGRpby5o
PgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLQotc3RhdGljIHZvaWQgdGVzdFdl
YlZpZXdEZWZhdWx0Q29udGV4dChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsK
LSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQodGVzdC0+bV93ZWJWaWV3
KSA9PSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSk7Ci0KLSAgICAvLyBDaGVjayB0
aGF0IGEgd2ViIHZpZXcgY3JlYXRlZCB3aXRoIGdfb2JqZWN0X25ldyBoYXMgdGhlIGRlZmF1bHQg
Y29udGV4dC4KLSAgICBHUmVmUHRyPFdlYktpdFdlYlZpZXc+IHdlYlZpZXcgPSBXRUJLSVRfV0VC
X1ZJRVcoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQl9WSUVXLCBOVUxMKSk7Ci0gICAgZ19h
c3NlcnQod2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KHdlYlZpZXcuZ2V0KCkpID09IHdlYmtp
dF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYlZp
ZXdDdXN0b21DaGFyc2V0KFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAg
IGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfZ2V0X2N1c3RvbV9jaGFyc2V0KHRlc3QtPm1fd2Vi
VmlldykpOwotICAgIHdlYmtpdF93ZWJfdmlld19zZXRfY3VzdG9tX2NoYXJzZXQodGVzdC0+bV93
ZWJWaWV3LCAidXRmOCIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0
X2N1c3RvbV9jaGFyc2V0KHRlc3QtPm1fd2ViVmlldyksID09LCAidXRmOCIpOwotICAgIC8vIEdv
IGJhY2sgdG8gdGhlIGRlZmF1bHQgY2hhcnNldC4KLSAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X2N1
c3RvbV9jaGFyc2V0KHRlc3QtPm1fd2ViVmlldywgMCk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93
ZWJfdmlld19nZXRfY3VzdG9tX2NoYXJzZXQodGVzdC0+bV93ZWJWaWV3KSk7Ci19Ci0KLXN0YXRp
YyB2b2lkIHRlc3RXZWJWaWV3U2V0dGluZ3MoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCi17Ci0gICAgV2ViS2l0U2V0dGluZ3MqIGRlZmF1bHRTZXR0aW5ncyA9IHdlYmtpdF93ZWJf
dmlld19nZXRfc2V0dGluZ3ModGVzdC0+bV93ZWJWaWV3KTsKLSAgICBnX2Fzc2VydChkZWZhdWx0
U2V0dGluZ3MpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2phdmFz
Y3JpcHQoZGVmYXVsdFNldHRpbmdzKSk7Ci0KLSAgICBHUmVmUHRyPFdlYktpdFNldHRpbmdzPiBu
ZXdTZXR0aW5ncyA9IGFkb3B0R1JlZih3ZWJraXRfc2V0dGluZ3NfbmV3KCkpOwotICAgIGdfb2Jq
ZWN0X3NldChHX09CSkVDVChuZXdTZXR0aW5ncy5nZXQoKSksICJlbmFibGUtamF2YXNjcmlwdCIs
IEZBTFNFLCBOVUxMKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X3NldHRpbmdzKHRlc3QtPm1f
d2ViVmlldywgbmV3U2V0dGluZ3MuZ2V0KCkpOwotCi0gICAgV2ViS2l0U2V0dGluZ3MqIHNldHRp
bmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh0ZXN0LT5tX3dlYlZpZXcpOwotICAg
IGdfYXNzZXJ0KHNldHRpbmdzICE9IGRlZmF1bHRTZXR0aW5ncyk7Ci0gICAgZ19hc3NlcnQoIXdl
YmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2phdmFzY3JpcHQoc2V0dGluZ3MpKTsKLQotICAgIEdS
ZWZQdHI8R3RrV2lkZ2V0PiB3ZWJWaWV3MiA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKLSAgICB0
ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHdlYlZp
ZXcyLmdldCgpKSk7Ci0gICAgd2Via2l0X3dlYl92aWV3X3NldF9zZXR0aW5ncyhXRUJLSVRfV0VC
X1ZJRVcod2ViVmlldzIuZ2V0KCkpLCBzZXR0aW5ncyk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3dl
Yl92aWV3X2dldF9zZXR0aW5ncyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldzIuZ2V0KCkpKSA9PSBz
ZXR0aW5ncyk7Ci0KLSAgICBHUmVmUHRyPFdlYktpdFNldHRpbmdzPiBuZXdTZXR0aW5nczIgPSBh
ZG9wdEdSZWYod2Via2l0X3NldHRpbmdzX25ldygpKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0
X3NldHRpbmdzKFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3Mi5nZXQoKSksIG5ld1NldHRpbmdzMi5n
ZXQoKSk7Ci0gICAgc2V0dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKFdFQktJ
VF9XRUJfVklFVyh3ZWJWaWV3Mi5nZXQoKSkpOwotICAgIGdfYXNzZXJ0KHNldHRpbmdzID09IG5l
d1NldHRpbmdzMi5nZXQoKSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFi
bGVfamF2YXNjcmlwdChzZXR0aW5ncykpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1pv
b21MZXZlbChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBnX2Fzc2Vy
dF9jbXBmbG9hdCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3pvb21fbGV2ZWwodGVzdC0+bV93ZWJWaWV3
KSwgPT0sIDEpOwotICAgIHdlYmtpdF93ZWJfdmlld19zZXRfem9vbV9sZXZlbCh0ZXN0LT5tX3dl
YlZpZXcsIDIuNSk7Ci0gICAgZ19hc3NlcnRfY21wZmxvYXQod2Via2l0X3dlYl92aWV3X2dldF96
b29tX2xldmVsKHRlc3QtPm1fd2ViVmlldyksID09LCAyLjUpOwotCi0gICAgd2Via2l0X3NldHRp
bmdzX3NldF96b29tX3RleHRfb25seSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHRlc3Qt
Pm1fd2ViVmlldyksIFRSVUUpOwotICAgIC8vIFRoZSB6b29tIGxldmVsIHNob3VsZG4ndCBjaGFu
Z2Ugd2hlbiB6b29tLXRleHQtb25seSBzZXR0aW5nIGNoYW5nZXMuCi0gICAgZ19hc3NlcnRfY21w
ZmxvYXQod2Via2l0X3dlYl92aWV3X2dldF96b29tX2xldmVsKHRlc3QtPm1fd2ViVmlldyksID09
LCAyLjUpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1J1bkphdmFTY3JpcHQoV2ViVmll
d1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGh0
bWwgPSAiPGh0bWw+PGJvZHk+PGEgaWQ9J1dlYktpdExpbmsnIGhyZWY9J2h0dHA6Ly93d3cud2Vi
a2l0Z3RrLm9yZy8nIHRpdGxlPSdXZWJLaXRHVEsrIFRpdGxlJz5XZWJLaXRHVEsrIFdlYnNpdGU8
L2E+PC9ib2R5PjwvaHRtbD4iOwotICAgIHRlc3QtPmxvYWRIdG1sKGh0bWwsIDApOwotICAgIHRl
c3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgR093blB0cjxHRXJyb3I+IGVycm9y
OwotICAgIFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5y
dW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoIndpbmRvdy5kb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnV2ViS2l0TGluaycpLnRpdGxlOyIsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgZ19h
c3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKLSAg
ICBHT3duUHRyPGNoYXI+IHZhbHVlU3RyaW5nKFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0
VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVT
dHJpbmcuZ2V0KCksID09LCAiV2ViS2l0R1RLKyBUaXRsZSIpOwotCi0gICAgamF2YXNjcmlwdFJl
c3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgid2luZG93LmRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdXZWJLaXRMaW5rJykuaHJlZjsiLCAmZXJyb3Iub3V0UHRy
KCkpOwotICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOwotICAgIGdfYXNzZXJ0KCFlcnJv
ci5nZXQoKSk7Ci0gICAgdmFsdWVTdHJpbmcuc2V0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVz
dWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodmFs
dWVTdHJpbmcuZ2V0KCksID09LCAiaHR0cDovL3d3dy53ZWJraXRndGsub3JnLyIpOwotCi0gICAg
amF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hl
ZCgid2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdXZWJLaXRMaW5rJykudGV4dENvbnRl
bnQiLCAmZXJyb3Iub3V0UHRyKCkpOwotICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOwot
ICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7Ci0gICAgdmFsdWVTdHJpbmcuc2V0KFdlYlZpZXdU
ZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKLSAgICBn
X2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAiV2ViS2l0R1RLKyBXZWJzaXRl
Iik7Ci0KLSAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRV
bnRpbEZpbmlzaGVkKCJhID0gMjU7IiwgJmVycm9yLm91dFB0cigpKTsKLSAgICBnX2Fzc2VydChq
YXZhc2NyaXB0UmVzdWx0KTsKLSAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOwotICAgIGdfYXNz
ZXJ0X2NtcGZsb2F0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9OdW1iZXIoamF2YXNj
cmlwdFJlc3VsdCksID09LCAyNSk7Ci0KLSAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVu
SmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJhID0gMi41OyIsICZlcnJvci5vdXRQdHIo
KSk7Ci0gICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAgZ19hc3NlcnQoIWVycm9y
LmdldCgpKTsKLSAgICBnX2Fzc2VydF9jbXBmbG9hdChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJl
c3VsdFRvTnVtYmVyKGphdmFzY3JpcHRSZXN1bHQpLCA9PSwgMi41KTsKLQotICAgIGphdmFzY3Jp
cHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImEgPSB0
cnVlIiwgJmVycm9yLm91dFB0cigpKTsKLSAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsK
LSAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOwotICAgIGdfYXNzZXJ0KFdlYlZpZXdUZXN0Ojpq
YXZhc2NyaXB0UmVzdWx0VG9Cb29sZWFuKGphdmFzY3JpcHRSZXN1bHQpKTsKLQotICAgIGphdmFz
Y3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImEg
PSBmYWxzZSIsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3Vs
dCk7Ci0gICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKLSAgICBnX2Fzc2VydCghV2ViVmlld1Rl
c3Q6OmphdmFzY3JpcHRSZXN1bHRUb0Jvb2xlYW4oamF2YXNjcmlwdFJlc3VsdCkpOwotCi0gICAg
amF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hl
ZCgiYSA9IG51bGwiLCAmZXJyb3Iub3V0UHRyKCkpOwotICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRS
ZXN1bHQpOwotICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7Ci0gICAgZ19hc3NlcnQoV2ViVmll
d1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRJc051bGwoamF2YXNjcmlwdFJlc3VsdCkpOwotCi0gICAg
amF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hl
ZCgiZnVuY3Rpb24gRm9vKCkgeyBhID0gMjU7IH0gRm9vKCk7IiwgJmVycm9yLm91dFB0cigpKTsK
LSAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBnX2Fzc2VydCghZXJyb3IuZ2V0
KCkpOwotICAgIGdfYXNzZXJ0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0SXNVbmRlZmlu
ZWQoamF2YXNjcmlwdFJlc3VsdCkpOwotCi0gICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1
bkphdmFTY3JpcHRGcm9tR1Jlc291cmNlQW5kV2FpdFVudGlsRmluaXNoZWQoIi9vcmcvd2Via2l0
L3dlYmtpdDJndGsvdGVzdHMvbGluay10aXRsZS5qcyIsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAg
Z19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsK
LSAgICB2YWx1ZVN0cmluZy5zZXQoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0NTdHJp
bmcoamF2YXNjcmlwdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih2YWx1ZVN0cmluZy5n
ZXQoKSwgPT0sICJXZWJLaXRHVEsrIFRpdGxlIik7Ci0KLSAgICBqYXZhc2NyaXB0UmVzdWx0ID0g
dGVzdC0+cnVuSmF2YVNjcmlwdEZyb21HUmVzb3VyY2VBbmRXYWl0VW50aWxGaW5pc2hlZCgiL3dy
b25nL3BhdGgvdG8vcmVzb3VyY2UuanMiLCAmZXJyb3Iub3V0UHRyKCkpOwotICAgIGdfYXNzZXJ0
KCFqYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBnX2Fzc2VydF9lcnJvcihlcnJvci5nZXQoKSwgR19S
RVNPVVJDRV9FUlJPUiwgR19SRVNPVVJDRV9FUlJPUl9OT1RfRk9VTkQpOwotICAgIGVycm9yLmNs
ZWFyKCk7Ci0KLSAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdh
aXRVbnRpbEZpbmlzaGVkKCJmb28oKTsiLCAmZXJyb3Iub3V0UHRyKCkpOwotICAgIGdfYXNzZXJ0
KCFqYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBnX2Fzc2VydF9lcnJvcihlcnJvci5nZXQoKSwgV0VC
S0lUX0pBVkFTQ1JJUFRfRVJST1IsIFdFQktJVF9KQVZBU0NSSVBUX0VSUk9SX1NDUklQVF9GQUlM
RUQpOwotfQotCi1jbGFzcyBGdWxsU2NyZWVuQ2xpZW50VGVzdDogcHVibGljIFdlYlZpZXdUZXN0
IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKEZ1bGxTY3JlZW5DbGllbnRU
ZXN0KTsKLQotICAgIGVudW0gRnVsbFNjcmVlbkV2ZW50IHsKLSAgICAgICAgTm9uZSwKLSAgICAg
ICAgRW50ZXIsCi0gICAgICAgIExlYXZlCi0gICAgfTsKLQotICAgIHN0YXRpYyBnYm9vbGVhbiB2
aWV3RW50ZXJGdWxsU2NyZWVuQ2FsbGJhY2soV2ViS2l0V2ViVmlldyosIEZ1bGxTY3JlZW5DbGll
bnRUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+bV9ldmVudCA9IEVudGVyOwotICAg
ICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOwotICAgICAgICByZXR1cm4g
RkFMU0U7Ci0gICAgfQotCi0gICAgc3RhdGljIGdib29sZWFuIHZpZXdMZWF2ZUZ1bGxTY3JlZW5D
YWxsYmFjayhXZWJLaXRXZWJWaWV3KiwgRnVsbFNjcmVlbkNsaWVudFRlc3QqIHRlc3QpCi0gICAg
ewotICAgICAgICB0ZXN0LT5tX2V2ZW50ID0gTGVhdmU7Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1
aXQodGVzdC0+bV9tYWluTG9vcCk7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAg
ICBGdWxsU2NyZWVuQ2xpZW50VGVzdCgpCi0gICAgICAgIDogbV9ldmVudChOb25lKQotICAgIHsK
LSAgICAgICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfZnVsbHNjcmVlbih3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X3NldHRpbmdzKG1fd2ViVmlldyksIFRSVUUpOwotICAgICAgICBnX3NpZ25hbF9j
b25uZWN0KG1fd2ViVmlldywgImVudGVyLWZ1bGxzY3JlZW4iLCBHX0NBTExCQUNLKHZpZXdFbnRl
ckZ1bGxTY3JlZW5DYWxsYmFjayksIHRoaXMpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1f
d2ViVmlldywgImxlYXZlLWZ1bGxzY3JlZW4iLCBHX0NBTExCQUNLKHZpZXdMZWF2ZUZ1bGxTY3Jl
ZW5DYWxsYmFjayksIHRoaXMpOwotICAgIH0KLQotICAgIH5GdWxsU2NyZWVuQ2xpZW50VGVzdCgp
Ci0gICAgewotICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV93
ZWJWaWV3LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKLSAgICB9Ci0K
LSAgICB2b2lkIHJlcXVlc3RGdWxsU2NyZWVuQW5kV2FpdFVudGlsRW50ZXJlZEZ1bGxTY3JlZW4o
KQotICAgIHsKLSAgICAgICAgbV9ldmVudCA9IE5vbmU7Ci0gICAgICAgIHdlYmtpdF93ZWJfdmll
d19ydW5famF2YXNjcmlwdChtX3dlYlZpZXcsICJkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQud2Vi
a2l0UmVxdWVzdEZ1bGxTY3JlZW4oKTsiLCAwLCAwLCAwKTsKLSAgICAgICAgZ19tYWluX2xvb3Bf
cnVuKG1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiBsZWF2ZUZ1bGxT
Y3JlZW5JZGxlKEZ1bGxTY3JlZW5DbGllbnRUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVz
dC0+a2V5U3Ryb2tlKEdES19LRVlfRXNjYXBlKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAg
IH0KLQotICAgIHZvaWQgbGVhdmVGdWxsU2NyZWVuQW5kV2FpdFVudGlsTGVmdEZ1bGxTY3JlZW4o
KQotICAgIHsKLSAgICAgICAgbV9ldmVudCA9IE5vbmU7Ci0gICAgICAgIGdfaWRsZV9hZGQocmVp
bnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4obGVhdmVGdWxsU2NyZWVuSWRsZSksIHRoaXMpOwot
ICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgRnVsbFNj
cmVlbkV2ZW50IG1fZXZlbnQ7Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0Z1bGxTY3Jl
ZW4oRnVsbFNjcmVlbkNsaWVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVz
dC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7Ci0gICAgdGVzdC0+bG9hZEh0bWwo
IjxodG1sPjxib2R5PkZ1bGxTY3JlZW4gdGVzdDwvYm9keT48L2h0bWw+IiwgMCk7Ci0gICAgdGVz
dC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgdGVzdC0+cmVxdWVzdEZ1bGxTY3JlZW5B
bmRXYWl0VW50aWxFbnRlcmVkRnVsbFNjcmVlbigpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0
LT5tX2V2ZW50LCA9PSwgRnVsbFNjcmVlbkNsaWVudFRlc3Q6OkVudGVyKTsKLSAgICB0ZXN0LT5s
ZWF2ZUZ1bGxTY3JlZW5BbmRXYWl0VW50aWxMZWZ0RnVsbFNjcmVlbigpOwotICAgIGdfYXNzZXJ0
X2NtcGludCh0ZXN0LT5tX2V2ZW50LCA9PSwgRnVsbFNjcmVlbkNsaWVudFRlc3Q6OkxlYXZlKTsK
LX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdDYW5TaG93TUlNRVR5cGUoV2ViVmlld1Rlc3Qq
IHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgLy8gU3VwcG9ydGVkIE1JTUUgdHlwZXMuCi0g
ICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2Nhbl9zaG93X21pbWVfdHlwZSh0ZXN0LT5tX3dl
YlZpZXcsICJ0ZXh0L2h0bWwiKSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2Nhbl9z
aG93X21pbWVfdHlwZSh0ZXN0LT5tX3dlYlZpZXcsICJ0ZXh0L3BsYWluIikpOwotICAgIGdfYXNz
ZXJ0KHdlYmtpdF93ZWJfdmlld19jYW5fc2hvd19taW1lX3R5cGUodGVzdC0+bV93ZWJWaWV3LCAi
aW1hZ2UvanBlZyIpKTsKLQotICAgIC8vIFVuc3VwcG9ydGVkIE1JTUUgdHlwZXMuCi0gICAgZ19h
c3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fc2hvd19taW1lX3R5cGUodGVzdC0+bV93ZWJWaWV3
LCAidGV4dC92Y2FyZCIpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9zaG93
X21pbWVfdHlwZSh0ZXN0LT5tX3dlYlZpZXcsICJhcHBsaWNhdGlvbi9wZGYiKSk7Ci0gICAgZ19h
c3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fc2hvd19taW1lX3R5cGUodGVzdC0+bV93ZWJWaWV3
LCAiYXBwbGljYXRpb24vemlwIikpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2Fu
X3Nob3dfbWltZV90eXBlKHRlc3QtPm1fd2ViVmlldywgImFwcGxpY2F0aW9uL29jdGV0LXN0cmVh
bSIpKTsKLQotICAgIC8vIFBsdWdpbnMgYXJlIG9ubHkgc3VwcG9ydGVkIHdoZW4gZW5hYmxlZC4K
LSAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X2FkZGl0aW9uYWxfcGx1Z2luc19kaXJlY3Rvcnko
d2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KHRlc3QtPm1fd2ViVmlldyksIFdFQktJVF9URVNU
X1BMVUdJTl9ESVIpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19jYW5fc2hvd19taW1l
X3R5cGUodGVzdC0+bV93ZWJWaWV3LCAiYXBwbGljYXRpb24veC13ZWJraXQtdGVzdC1uZXRzY2Fw
ZSIpKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9wbHVnaW5zKHdlYmtpdF93ZWJf
dmlld19nZXRfc2V0dGluZ3ModGVzdC0+bV93ZWJWaWV3KSwgRkFMU0UpOwotICAgIGdfYXNzZXJ0
KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX3Nob3dfbWltZV90eXBlKHRlc3QtPm1fd2ViVmlldywgImFw
cGxpY2F0aW9uL3gtd2Via2l0LXRlc3QtbmV0c2NhcGUiKSk7Ci19Ci0KLWNsYXNzIEZvcm1DbGll
bnRUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJQl9URVNU
X0ZJWFRVUkUoRm9ybUNsaWVudFRlc3QpOwotCi0gICAgc3RhdGljIHZvaWQgc3VibWl0Rm9ybUNh
bGxiYWNrKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRGb3JtU3VibWlzc2lvblJlcXVlc3QqIHJlcXVl
c3QsIEZvcm1DbGllbnRUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+c3VibWl0Rm9y
bShyZXF1ZXN0KTsKLSAgICB9Ci0KLSAgICBGb3JtQ2xpZW50VGVzdCgpCi0gICAgICAgIDogbV9z
dWJtaXRQb3NpdGlvblgoMCkKLSAgICAgICAgLCBtX3N1Ym1pdFBvc2l0aW9uWSgwKQotICAgIHsK
LSAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJzdWJtaXQtZm9ybSIsIEdfQ0FM
TEJBQ0soc3VibWl0Rm9ybUNhbGxiYWNrKSwgdGhpcyk7Ci0gICAgfQotCi0gICAgfkZvcm1DbGll
bnRUZXN0KCkKLSAgICB7Ci0gICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0
Y2hlZChtX3dlYlZpZXcsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOwot
ICAgIH0KLQotICAgIHZvaWQgc3VibWl0Rm9ybShXZWJLaXRGb3JtU3VibWlzc2lvblJlcXVlc3Qq
IHJlcXVlc3QpCi0gICAgewotICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZp
bmlzaGVzKEdfT0JKRUNUKHJlcXVlc3QpKTsKLSAgICAgICAgbV9yZXF1ZXN0ID0gcmVxdWVzdDsK
LSAgICAgICAgd2Via2l0X2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0X3N1Ym1pdChyZXF1ZXN0KTsK
LSAgICAgICAgcXVpdE1haW5Mb29wKCk7Ci0gICAgfQotCi0gICAgR0hhc2hUYWJsZSogd2FpdFVu
dGlsRm9ybVN1Ym1pdHRlZEFuZEdldFRleHRGaWVsZHMoKQotICAgIHsKLSAgICAgICAgZ19tYWlu
X2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotICAgICAgICByZXR1cm4gd2Via2l0X2Zvcm1fc3VibWlz
c2lvbl9yZXF1ZXN0X2dldF90ZXh0X2ZpZWxkcyhtX3JlcXVlc3QuZ2V0KCkpOwotICAgIH0KLQot
ICAgIHN0YXRpYyBnYm9vbGVhbiBkb0NsaWNrSWRsZUNhbGxiYWNrKEZvcm1DbGllbnRUZXN0KiB0
ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+Y2xpY2tNb3VzZUJ1dHRvbih0ZXN0LT5tX3N1Ym1p
dFBvc2l0aW9uWCwgdGVzdC0+bV9zdWJtaXRQb3NpdGlvblksIDEpOwotICAgICAgICByZXR1cm4g
RkFMU0U7Ci0gICAgfQotCi0gICAgdm9pZCBzdWJtaXRGb3JtQXRQb3NpdGlvbihpbnQgeCwgaW50
IHkpCi0gICAgewotICAgICAgICBtX3N1Ym1pdFBvc2l0aW9uWCA9IHg7Ci0gICAgICAgIG1fc3Vi
bWl0UG9zaXRpb25ZID0geTsKLSAgICAgICAgZ19pZGxlX2FkZChyZWludGVycHJldF9jYXN0PEdT
b3VyY2VGdW5jPihkb0NsaWNrSWRsZUNhbGxiYWNrKSwgdGhpcyk7Ci0gICAgfQotCi0gICAgaW50
IG1fc3VibWl0UG9zaXRpb25YOwotICAgIGludCBtX3N1Ym1pdFBvc2l0aW9uWTsKLSAgICBHUmVm
UHRyPFdlYktpdEZvcm1TdWJtaXNzaW9uUmVxdWVzdD4gbV9yZXF1ZXN0OwotfTsKLQotc3RhdGlj
IHZvaWQgdGVzdFdlYlZpZXdTdWJtaXRGb3JtKEZvcm1DbGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rw
b2ludGVyKQotewotICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOwot
Ci0gICAgY29uc3QgY2hhciogZm9ybUhUTUwgPQotICAgICAgICAiPGh0bWw+PGJvZHk+IgotICAg
ICAgICAiIDxmb3JtIGFjdGlvbj0nIyc+IgotICAgICAgICAiICA8aW5wdXQgdHlwZT0ndGV4dCcg
bmFtZT0ndGV4dDEnIHZhbHVlPSd2YWx1ZTEnPiIKLSAgICAgICAgIiAgPGlucHV0IHR5cGU9J3Rl
eHQnIG5hbWU9J3RleHQyJyB2YWx1ZT0ndmFsdWUyJz4iCi0gICAgICAgICIgIDxpbnB1dCB0eXBl
PSdwYXNzd29yZCcgbmFtZT0ncGFzc3dvcmQnIHZhbHVlPSdzZWNyZXQnPiIKLSAgICAgICAgIiAg
PHRleHRhcmVhIGNvbHM9JzUnIHJvd3M9JzUnIG5hbWU9J3RleHRhcmVhJz5UZXh0PC90ZXh0YXJl
YT4iCi0gICAgICAgICIgIDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2hpZGRlbjEnIHZhbHVl
PSdoaWRkZW4xJz4iCi0gICAgICAgICIgIDxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPSdTdWJt
aXQnIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6MScgc2l6ZT0nMTAnPiIK
LSAgICAgICAgIiA8L2Zvcm0+IgotICAgICAgICAiPC9ib2R5PjwvaHRtbD4iOwotCi0gICAgdGVz
dC0+bG9hZEh0bWwoZm9ybUhUTUwsICJmaWxlOi8vLyIpOwotICAgIHRlc3QtPndhaXRVbnRpbExv
YWRGaW5pc2hlZCgpOwotCi0gICAgdGVzdC0+c3VibWl0Rm9ybUF0UG9zaXRpb24oNSwgNSk7Ci0g
ICAgR0hhc2hUYWJsZSogdmFsdWVzID0gdGVzdC0+d2FpdFVudGlsRm9ybVN1Ym1pdHRlZEFuZEdl
dFRleHRGaWVsZHMoKTsKLSAgICBnX2Fzc2VydCh2YWx1ZXMpOwotICAgIGdfYXNzZXJ0X2NtcHVp
bnQoZ19oYXNoX3RhYmxlX3NpemUodmFsdWVzKSwgPT0sIDMpOwotICAgIGdfYXNzZXJ0X2NtcHN0
cihzdGF0aWNfY2FzdDxjaGFyKj4oZ19oYXNoX3RhYmxlX2xvb2t1cCh2YWx1ZXMsICJ0ZXh0MSIp
KSwgPT0sICJ2YWx1ZTEiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc3RhdGljX2Nhc3Q8Y2hhcio+
KGdfaGFzaF90YWJsZV9sb29rdXAodmFsdWVzLCAidGV4dDIiKSksID09LCAidmFsdWUyIik7Ci0g
ICAgZ19hc3NlcnRfY21wc3RyKHN0YXRpY19jYXN0PGNoYXIqPihnX2hhc2hfdGFibGVfbG9va3Vw
KHZhbHVlcywgInBhc3N3b3JkIikpLCA9PSwgInNlY3JldCIpOwotfQotCi1jbGFzcyBTYXZlV2Vi
Vmlld1Rlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RF
U1RfRklYVFVSRShTYXZlV2ViVmlld1Rlc3QpOwotCi0gICAgU2F2ZVdlYlZpZXdUZXN0KCkKLSAg
ICAgICAgOiBtX3RlbXBEaXJlY3RvcnkoZ19kaXJfbWFrZV90bXAoIldlYktpdDJTYXZlVmlld1Rl
c3QtWFhYWFhYIiwgMCkpCi0gICAgewotICAgIH0KLQotICAgIH5TYXZlV2ViVmlld1Rlc3QoKQot
ICAgIHsKLSAgICAgICAgaWYgKEdfSVNfRklMRShtX2ZpbGUuZ2V0KCkpKQotICAgICAgICAgICAg
Z19maWxlX2RlbGV0ZShtX2ZpbGUuZ2V0KCksIDAsIDApOwotCi0gICAgICAgIGlmIChHX0lTX0lO
UFVUX1NUUkVBTShtX2lucHV0U3RyZWFtLmdldCgpKSkKLSAgICAgICAgICAgIGdfaW5wdXRfc3Ry
ZWFtX2Nsb3NlKG1faW5wdXRTdHJlYW0uZ2V0KCksIDAsIDApOwotCi0gICAgICAgIGlmIChtX3Rl
bXBEaXJlY3RvcnkpCi0gICAgICAgICAgICBnX3JtZGlyKG1fdGVtcERpcmVjdG9yeS5nZXQoKSk7
Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgd2ViVmlld1NhdmVkVG9TdHJlYW1DYWxsYmFjayhH
T2JqZWN0KiBvYmplY3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBTYXZlV2ViVmlld1Rlc3QqIHRl
c3QpCi0gICAgewotICAgICAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgICAgIHRlc3Qt
Pm1faW5wdXRTdHJlYW0gPSBhZG9wdEdSZWYod2Via2l0X3dlYl92aWV3X3NhdmVfZmluaXNoKHRl
c3QtPm1fd2ViVmlldywgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpKTsKLSAgICAgICAgZ19hc3Nl
cnQoR19JU19JTlBVVF9TVFJFQU0odGVzdC0+bV9pbnB1dFN0cmVhbS5nZXQoKSkpOwotICAgICAg
ICBnX2Fzc2VydCghZXJyb3IpOwotCi0gICAgICAgIHRlc3QtPnF1aXRNYWluTG9vcCgpOwotICAg
IH0KLQotICAgIHN0YXRpYyB2b2lkIHdlYlZpZXdTYXZlZFRvRmlsZUNhbGxiYWNrKEdPYmplY3Qq
IG9iamVjdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIFNhdmVXZWJWaWV3VGVzdCogdGVzdCkKLSAg
ICB7Ci0gICAgICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKLSAgICAgICAgZ19hc3NlcnQod2Vi
a2l0X3dlYl92aWV3X3NhdmVfdG9fZmlsZV9maW5pc2godGVzdC0+bV93ZWJWaWV3LCByZXN1bHQs
ICZlcnJvci5vdXRQdHIoKSkpOwotICAgICAgICBnX2Fzc2VydCghZXJyb3IpOwotCi0gICAgICAg
IHRlc3QtPnF1aXRNYWluTG9vcCgpOwotICAgIH0KLQotICAgIHZvaWQgc2F2ZUFuZFdhaXRGb3JT
dHJlYW0oKQotICAgIHsKLSAgICAgICAgd2Via2l0X3dlYl92aWV3X3NhdmUobV93ZWJWaWV3LCBX
RUJLSVRfU0FWRV9NT0RFX01IVE1MLCAwLCByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2Fs
bGJhY2s+KHdlYlZpZXdTYXZlZFRvU3RyZWFtQ2FsbGJhY2spLCB0aGlzKTsKLSAgICAgICAgZ19t
YWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIHZvaWQgc2F2ZUFuZFdhaXRG
b3JGaWxlKCkKLSAgICB7Ci0gICAgICAgIG1fc2F2ZURlc3RpbmF0aW9uRmlsZVBhdGguc2V0KGdf
YnVpbGRfZmlsZW5hbWUobV90ZW1wRGlyZWN0b3J5LmdldCgpLCAidGVzdFdlYlZpZXdTYXZlUmVz
dWx0Lm1odCIsIE5VTEwpKTsKLSAgICAgICAgbV9maWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdf
Zm9yX3BhdGgobV9zYXZlRGVzdGluYXRpb25GaWxlUGF0aC5nZXQoKSkpOwotICAgICAgICB3ZWJr
aXRfd2ViX3ZpZXdfc2F2ZV90b19maWxlKG1fd2ViVmlldywgbV9maWxlLmdldCgpLCBXRUJLSVRf
U0FWRV9NT0RFX01IVE1MLCAwLCByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+
KHdlYlZpZXdTYXZlZFRvRmlsZUNhbGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIGdfbWFpbl9sb29w
X3J1bihtX21haW5Mb29wKTsKLSAgICB9Ci0KLSAgICBHT3duUHRyPGNoYXI+IG1fdGVtcERpcmVj
dG9yeTsKLSAgICBHT3duUHRyPGNoYXI+IG1fc2F2ZURlc3RpbmF0aW9uRmlsZVBhdGg7Ci0gICAg
R1JlZlB0cjxHSW5wdXRTdHJlYW0+IG1faW5wdXRTdHJlYW07Ci0gICAgR1JlZlB0cjxHRmlsZT4g
bV9maWxlOwotfTsKLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdTYXZlKFNhdmVXZWJWaWV3VGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+Igot
ICAgICAgICAgICAgICAgICAgICI8Ym9keT4iCi0gICAgICAgICAgICAgICAgICAgIiAgPHA+QSBw
YXJhZ3JhcGggd2l0aCBwbGFpbiB0ZXh0PC9wPiIKLSAgICAgICAgICAgICAgICAgICAiICA8cD4i
Ci0gICAgICAgICAgICAgICAgICAgIiAgICBBIHJlZCBib3g6IDxpbWcgc3JjPSdkYXRhOmltYWdl
L3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFJQUFBQUNDQUlBQUFEOTFKcHpB
QUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUIzUkpUVVVIM0FZV0RUTVZ3blNabndBQUFC
MXBWRmgwUTI5dGJXVnVkQUFBQUFBQVEzSmxZWFJsWkNCM2FYUm9JRWRKVFZCa0xtVUhBQUFBRmts
RVFWUUkxMlA4ejhEQXdNREF4TURBd01EQUFBQU5IUUVESyttbXlBQUFBQUJKUlU1RXJrSmdnZz09
Jz48L2JyPiIKLSAgICAgICAgICAgICAgICAgICAiICAgIEEgYmx1ZSBib3g6IDxpbWcgc3JjPSdk
YXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFJQUFBQUNDQUlB
QUFEOTFKcHpBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUIzUkpUVVVIM0FZV0RUTXZC
SGhBTFFBQUFCMXBWRmgwUTI5dGJXVnVkQUFBQUFBQVEzSmxZWFJsWkNCM2FYUm9JRWRKVFZCa0xt
VUhBQUFBRmtsRVFWUUkxMk5rNFBuUHdNREF4TURBd01EQUFBQUxyd0VQUElzMXBnQUFBQUJKUlU1
RXJrSmdnZz09Jz4iCi0gICAgICAgICAgICAgICAgICAgIiAgPC9wPiIKLSAgICAgICAgICAgICAg
ICAgICAiPC9ib2R5PiIKLSAgICAgICAgICAgICAgICAgICAiPC9odG1sPiIsIDApOwotICAgIHRl
c3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgLy8gV3JpdGUgdG8gYSBmaWxlIGFu
ZCB0byBhbiBpbnB1dCBzdHJlYW0uCi0gICAgdGVzdC0+c2F2ZUFuZFdhaXRGb3JGaWxlKCk7Ci0g
ICAgdGVzdC0+c2F2ZUFuZFdhaXRGb3JTdHJlYW0oKTsKLQotICAgIC8vIFdlIHNob3VsZCBoYXZl
IGV4YWN0bHkgdGhlIHNhbWUgYW1vdW50IG9mIGJ5dGVzIGluIHRoZSBmaWxlCi0gICAgLy8gdGhh
biB0aG9zZSBjb21pbmcgZnJvbSB0aGUgR0lucHV0U3RyZWFtLiBXZSBkb24ndCBjb21wYXJlIHRo
ZQotICAgIC8vIHN0cmluZ3MgcmVhZCBzaW5jZSB0aGUgJ0RhdGUnIGZpZWxkIGFuZCB0aGUgYm91
bmRhcmllcyB3aWxsIGJlCi0gICAgLy8gZGlmZmVyZW50IG9uIGVhY2ggY2FzZS4gTUhUTUwgZnVu
Y3Rpb25hbGl0eSB3aWxsIGJlIHRlc3RlZCBieQotICAgIC8vIExheW91dCB0ZXN0cywgc28gY2hl
Y2tpbmcgdGhlIGFtb3VudCBvZiBieXRlcyBpcyBlbm91Z2guCi0gICAgR093blB0cjxHRXJyb3I+
IGVycm9yOwotICAgIGdjaGFyIGJ1ZmZlcls1MTJdID0geyAwIH07Ci0gICAgZ3NzaXplIHJlYWRC
eXRlcyA9IDA7Ci0gICAgZ3NzaXplIHRvdGFsQnl0ZXNGcm9tU3RyZWFtID0gMDsKLSAgICB3aGls
ZSAocmVhZEJ5dGVzID0gZ19pbnB1dF9zdHJlYW1fcmVhZCh0ZXN0LT5tX2lucHV0U3RyZWFtLmdl
dCgpLCAmYnVmZmVyLCA1MTIsIDAsICZlcnJvci5vdXRQdHIoKSkpIHsKLSAgICAgICAgZ19hc3Nl
cnQoIWVycm9yKTsKLSAgICAgICAgdG90YWxCeXRlc0Zyb21TdHJlYW0gKz0gcmVhZEJ5dGVzOwot
ICAgIH0KLQotICAgIC8vIENoZWNrIHRoYXQgdGhlIGZpbGUgZXhpc3RzIGFuZCB0aGF0IGl0IGNv
bnRhaW5zIHRoZSBzYW1lIGFtb3VudCBvZiBieXRlcy4KLSAgICBHUmVmUHRyPEdGaWxlSW5mbz4g
ZmlsZUluZm8gPSBhZG9wdEdSZWYoZ19maWxlX3F1ZXJ5X2luZm8odGVzdC0+bV9maWxlLmdldCgp
LCBHX0ZJTEVfQVRUUklCVVRFX1NUQU5EQVJEX1NJWkUsIHN0YXRpY19jYXN0PEdGaWxlUXVlcnlJ
bmZvRmxhZ3M+KDApLCAwLCAwKSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGdfZmlsZV9pbmZvX2dl
dF9zaXplKGZpbGVJbmZvLmdldCgpKSwgPT0sIHRvdGFsQnl0ZXNGcm9tU3RyZWFtKTsKLX0KLQot
c3RhdGljIHZvaWQgdGVzdFdlYlZpZXdNb2RlKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2lu
dGVyKQotewotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBpbmRleEhUTUwgPSAiPGh0bWw+PGJvZHk+
PHA+VGVzdCBXZWIgVmlldyBNb2RlPC9wPjwvYm9keT48L2h0bWw+IjsKLQotICAgIC8vIFdlYiBt
b2RlLgotICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X3dlYl92aWV3X2dldF92aWV3X21vZGUo
dGVzdC0+bV93ZWJWaWV3KSwgPT0sIFdFQktJVF9WSUVXX01PREVfV0VCKTsKLSAgICB0ZXN0LT5s
b2FkSHRtbChpbmRleEhUTUwsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgp
OwotICAgIFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5y
dW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoIndpbmRvdy5kb2N1bWVudC5ib2R5LnRl
eHRDb250ZW50OyIsIDApOwotICAgIEdPd25QdHI8Y2hhcj4gdmFsdWVTdHJpbmcoV2ViVmlld1Rl
c3Q6OmphdmFzY3JpcHRSZXN1bHRUb0NTdHJpbmcoamF2YXNjcmlwdFJlc3VsdCkpOwotICAgIGdf
YXNzZXJ0X2NtcHN0cih2YWx1ZVN0cmluZy5nZXQoKSwgPT0sICJUZXN0IFdlYiBWaWV3IE1vZGUi
KTsKLQotICAgIC8vIFNvdXJjZSBtb2RlLgotICAgIHdlYmtpdF93ZWJfdmlld19zZXRfdmlld19t
b2RlKHRlc3QtPm1fd2ViVmlldywgV0VCS0lUX1ZJRVdfTU9ERV9TT1VSQ0UpOwotICAgIHRlc3Qt
PmxvYWRIdG1sKGluZGV4SFRNTCwgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVk
KCk7Ci0gICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50
aWxGaW5pc2hlZCgid2luZG93LmRvY3VtZW50LmJvZHkudGV4dENvbnRlbnQ7IiwgMCk7Ci0gICAg
dmFsdWVTdHJpbmcuc2V0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGph
dmFzY3JpcHRSZXN1bHQpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCks
ID09LCBpbmRleEhUTUwpOwotfQotCi0vLyBUbyB0ZXN0IHBhZ2UgdmlzaWJpbGl0eSBBUEkuIEN1
cnJlbnRseSBvbmx5ICd2aXNpYmxlJyBhbmQgJ2hpZGRlbicgc3RhdGVzIGFyZSBpbXBsZW1lbnRl
ZCBmdWxseSBpbiBXZWJDb3JlLgotLy8gU2VlIGFsc28gaHR0cDovL3d3dy53My5vcmcvVFIvMjAx
MS9XRC1wYWdlLXZpc2liaWxpdHktMjAxMTA2MDIvIGFuZCBodHRwczovL2RldmVsb3BlcnMuZ29v
Z2xlLmNvbS9jaHJvbWUvd2hpdGVwYXBlcnMvcGFnZXZpc2liaWxpdHkKLXN0YXRpYyB2b2lkIHRl
c3RXZWJWaWV3UGFnZVZpc2liaWxpdHkoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIp
Ci17Ci0gICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjx0aXRsZT48L3RpdGxlPiIKLSAgICAgICAg
Ijxib2R5PjxwPlRlc3QgV2ViIFBhZ2UgVmlzaWJpbGl0eTwvcD4iCi0gICAgICAgICI8c2NyaXB0
PiIKLSAgICAgICAgImRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdl
XCIsIG9uVmlzaWJpbGl0eUNoYW5nZSwgZmFsc2UpOyIKLSAgICAgICAgImZ1bmN0aW9uIG9uVmlz
aWJpbGl0eUNoYW5nZSgpIHsiCi0gICAgICAgICIgICAgZG9jdW1lbnQudGl0bGUgPSBkb2N1bWVu
dC52aXNpYmlsaXR5U3RhdGU7IgotICAgICAgICAifSIKLSAgICAgICAgIjwvc2NyaXB0PiIKLSAg
ICAgICAgIjwvYm9keT48L2h0bWw+IiwKLSAgICAgICAgMCk7Ci0KLSAgICAvLyBXYWl0IHVudGls
bCB0aGUgcGFnZSBpcyBsb2FkZWQuIEluaXRpYWwgdmlzaWJpbGl0eSBzaG91bGQgYmUgJ2hpZGRl
bicuCi0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBHT3duUHRyPEdF
cnJvcj4gZXJyb3I7Ci0gICAgV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCogamF2YXNjcmlwdFJlc3Vs
dCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQudmlz
aWJpbGl0eVN0YXRlOyIsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgZ19hc3NlcnQoamF2YXNjcmlw
dFJlc3VsdCk7Ci0gICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKLSAgICBHT3duUHRyPGNoYXI+
IHZhbHVlU3RyaW5nKFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFz
Y3JpcHRSZXN1bHQpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09
LCAiaGlkZGVuIik7Ci0KLSAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlw
dEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVudC5oaWRkZW47IiwgJmVycm9yLm91dFB0cigp
KTsKLSAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBnX2Fzc2VydCghZXJyb3Iu
Z2V0KCkpOwotICAgIGdfYXNzZXJ0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9Cb29s
ZWFuKGphdmFzY3JpcHRSZXN1bHQpKTsKLQotICAgIC8vIFNob3cgdGhlIHBhZ2UuIFRoZSB2aXNp
YmlsaXR5IHNob3VsZCBiZSB1cGRhdGVkIHRvICd2aXNpYmxlJy4KLSAgICB0ZXN0LT5zaG93SW5X
aW5kb3coKTsKLSAgICB0ZXN0LT53YWl0VW50aWxUaXRsZUNoYW5nZWQoKTsKLQotICAgIGphdmFz
Y3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImRv
Y3VtZW50LnZpc2liaWxpdHlTdGF0ZTsiLCAmZXJyb3Iub3V0UHRyKCkpOwotICAgIGdfYXNzZXJ0
KGphdmFzY3JpcHRSZXN1bHQpOwotICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7Ci0gICAgdmFs
dWVTdHJpbmcuc2V0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFz
Y3JpcHRSZXN1bHQpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09
LCAidmlzaWJsZSIpOwotCi0gICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3Jp
cHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQuaGlkZGVuOyIsICZlcnJvci5vdXRQdHIo
KSk7Ci0gICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAgZ19hc3NlcnQoIWVycm9y
LmdldCgpKTsKLSAgICBnX2Fzc2VydCghV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0Jv
b2xlYW4oamF2YXNjcmlwdFJlc3VsdCkpOwotCi0gICAgLy8gSGlkZSB0aGUgcGFnZS4gVGhlIHZp
c2liaWxpdHkgc2hvdWxkIGJlIHVwZGF0ZWQgdG8gJ2hpZGRlbicuCi0gICAgZ3RrX3dpZGdldF9o
aWRlKEdUS19XSURHRVQodGVzdC0+bV93ZWJWaWV3KSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsVGl0
bGVDaGFuZ2VkKCk7Ci0KLSAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlw
dEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU7IiwgJmVycm9y
Lm91dFB0cigpKTsKLSAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBnX2Fzc2Vy
dCghZXJyb3IuZ2V0KCkpOwotICAgIHZhbHVlU3RyaW5nLnNldChXZWJWaWV3VGVzdDo6amF2YXNj
cmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnRfY21w
c3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgImhpZGRlbiIpOwotCi0gICAgamF2YXNjcmlwdFJl
c3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQu
aGlkZGVuOyIsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3Vs
dCk7Ci0gICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKLSAgICBnX2Fzc2VydChXZWJWaWV3VGVz
dDo6amF2YXNjcmlwdFJlc3VsdFRvQm9vbGVhbihqYXZhc2NyaXB0UmVzdWx0KSk7Ci19Ci0KLWNs
YXNzIFNuYXBzaG90V2ViVmlld1Rlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7Ci1wdWJsaWM6Ci0g
ICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShTbmFwc2hvdFdlYlZpZXdUZXN0KTsKLQotICAgIHN0
YXRpYyB2b2lkIG9uU25hcHNob3RDYW5jZWxsZWRSZWFkeShXZWJLaXRXZWJWaWV3KiB3ZWJfdmll
dywgR0FzeW5jUmVzdWx0KiByZXMsIFNuYXBzaG90V2ViVmlld1Rlc3QqIHRlc3QpCi0gICAgewot
ICAgICAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgICAgIHRlc3QtPm1fc3VyZmFjZSA9
IHdlYmtpdF93ZWJfdmlld19nZXRfc25hcHNob3RfZmluaXNoKHdlYl92aWV3LCByZXMsICZlcnJv
ci5vdXRQdHIoKSk7Ci0gICAgICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX3N1cmZhY2UpOwotICAgICAg
ICBnX2Fzc2VydF9lcnJvcihlcnJvci5nZXQoKSwgR19JT19FUlJPUiwgR19JT19FUlJPUl9DQU5D
RUxMRUQpOwotICAgICAgICB0ZXN0LT5xdWl0TWFpbkxvb3AoKTsKLSAgICB9Ci0KLSAgICBnYm9v
bGVhbiBnZXRTbmFwc2hvdEFuZENhbmNlbCgpCi0gICAgewotICAgICAgICBpZiAobV9zdXJmYWNl
KQotICAgICAgICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KG1fc3VyZmFjZSk7Ci0gICAgICAg
IG1fc3VyZmFjZSA9IDA7Ci0gICAgICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBjYW5jZWxsYWJs
ZSA9IGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKTsKLSAgICAgICAgd2Via2l0X3dlYl92
aWV3X2dldF9zbmFwc2hvdChtX3dlYlZpZXcsIFdFQktJVF9TTkFQU0hPVF9SRUdJT05fVklTSUJM
RSwgV0VCS0lUX1NOQVBTSE9UX09QVElPTlNfTk9ORSwgY2FuY2VsbGFibGUuZ2V0KCksIHJlaW50
ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4ob25TbmFwc2hvdENhbmNlbGxlZFJlYWR5
KSwgdGhpcyk7Ci0gICAgICAgIGdfY2FuY2VsbGFibGVfY2FuY2VsKGNhbmNlbGxhYmxlLmdldCgp
KTsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotCi0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotfTsKLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdTbmFwc2hvdChT
bmFwc2hvdFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxv
YWRIdG1sKCI8aHRtbD48Ym9keT48cD5XaGF0ZXZlcjwvcD48L2JvZHk+PC9odG1sPiIsIDApOwot
ICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgLy8gV2ViVmlldyBub3Qg
dmlzaWJsZS4KLSAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UxID0gdGVzdC0+Z2V0U25hcHNo
b3RBbmRXYWl0VW50aWxSZWFkeShXRUJLSVRfU05BUFNIT1RfUkVHSU9OX1ZJU0lCTEUsIFdFQktJ
VF9TTkFQU0hPVF9PUFRJT05TX05PTkUpOwotICAgIGdfYXNzZXJ0KCFzdXJmYWNlMSk7Ci0KLSAg
ICAvLyBTaG93IHN1cmZhY2UsIHJlc2l6ZSB0byA1MHg1MCwgdHJ5IGFnYWluLgotICAgIHRlc3Qt
PnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOwotICAgIHRlc3QtPnJlc2l6ZVZpZXco
NTAsIDUwKTsKLSAgICBzdXJmYWNlMSA9IHRlc3QtPmdldFNuYXBzaG90QW5kV2FpdFVudGlsUmVh
ZHkoV0VCS0lUX1NOQVBTSE9UX1JFR0lPTl9WSVNJQkxFLCBXRUJLSVRfU05BUFNIT1RfT1BUSU9O
U19OT05FKTsKLSAgICBnX2Fzc2VydChzdXJmYWNlMSk7Ci0KLSAgICAvLyBvYnRhaW5lZCBzdXJm
YWNlIHNob3VsZCBiZSBhdCB0aGUgbW9zdCA1MHg1MC4gU3RvcmUgdGhlIHNpemUKLSAgICAvLyBm
b3IgY29tcGFyaXNvbiBsYXRlci4KLSAgICBpbnQgd2lkdGggPSBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF93aWR0aChzdXJmYWNlMSk7Ci0gICAgaW50IGhlaWdodCA9IGNhaXJvX2ltYWdlX3N1cmZh
Y2VfZ2V0X2hlaWdodChzdXJmYWNlMSk7Ci0gICAgZ19hc3NlcnRfY21waW50KHdpZHRoLCA8PSwg
NTApOwotICAgIGdfYXNzZXJ0X2NtcGludChoZWlnaHQsIDw9LCA1MCk7Ci0KLSAgICAvLyBTZWxl
Y3QgYWxsIHRleHQgaW4gdGhlIFdlYlZpZXcsIHJlcXVlc3QgYSBzbmFwc2hvdCBpZ25vcmluZyBz
ZWxlY3Rpb24uCi0gICAgdGVzdC0+c2VsZWN0QWxsKCk7Ci0gICAgc3VyZmFjZTEgPSBjYWlyb19z
dXJmYWNlX3JlZmVyZW5jZSh0ZXN0LT5nZXRTbmFwc2hvdEFuZFdhaXRVbnRpbFJlYWR5KFdFQktJ
VF9TTkFQU0hPVF9SRUdJT05fVklTSUJMRSwgV0VCS0lUX1NOQVBTSE9UX09QVElPTlNfTk9ORSkp
OwotICAgIGdfYXNzZXJ0KHN1cmZhY2UxKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZTEpLCA9PSwgd2lkdGgpOwotICAgIGdfYXNzZXJ0
X2NtcGludChjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZTEpLCA9PSwgaGVp
Z2h0KTsKLQotICAgIC8vIENyZWF0ZSBpZGVudGljYWwgc3VyZmFjZS4KLSAgICBjYWlyb19zdXJm
YWNlX3QqIHN1cmZhY2UyID0gdGVzdC0+Z2V0U25hcHNob3RBbmRXYWl0VW50aWxSZWFkeShXRUJL
SVRfU05BUFNIT1RfUkVHSU9OX1ZJU0lCTEUsIFdFQktJVF9TTkFQU0hPVF9PUFRJT05TX05PTkUp
OwotICAgIGdfYXNzZXJ0KHN1cmZhY2UyKTsKLQotICAgIC8vIENvbXBhcmUgdGhlc2UgdHdvLCB0
aGV5IHNob3VsZCBiZSBpZGVudGljYWwuCi0gICAgZ19hc3NlcnQoVGVzdDo6Y2Fpcm9TdXJmYWNl
c0VxdWFsKHN1cmZhY2UxLCBzdXJmYWNlMikpOwotCi0gICAgLy8gUmVxdWVzdCBhIG5ldyBzbmFw
c2hvdCwgaW5jbHVkaW5nIHRoZSBzZWxlY3Rpb24gdGhpcyB0aW1lLiBUaGUKLSAgICAvLyBzaXpl
IHNob3VsZCBiZSB0aGUgc2FtZSBidXQgdGhlIHJlc3VsdCBtdXN0IGJlIGRpZmZlcmVudCB0byB0
aGUKLSAgICAvLyBvbmUgcHJldmlvdXNseSBvYnRhaW5lZC4KLSAgICBzdXJmYWNlMiA9IHRlc3Qt
PmdldFNuYXBzaG90QW5kV2FpdFVudGlsUmVhZHkoV0VCS0lUX1NOQVBTSE9UX1JFR0lPTl9WSVNJ
QkxFLCBXRUJLSVRfU05BUFNIT1RfT1BUSU9OU19JTkNMVURFX1NFTEVDVElPTl9ISUdITElHSFRJ
TkcpOwotICAgIGdfYXNzZXJ0KHN1cmZhY2UyKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZTIpLCA9PSwgd2lkdGgpOwotICAgIGdfYXNz
ZXJ0X2NtcGludChjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZTIpLCA9PSwg
aGVpZ2h0KTsKLSAgICBnX2Fzc2VydCghVGVzdDo6Y2Fpcm9TdXJmYWNlc0VxdWFsKHN1cmZhY2Ux
LCBzdXJmYWNlMikpOwotCi0gICAgLy8gUmVxdWVzdCBhIHNuYXBzaG90IG9mIHRoZSB3aG9sZSBk
b2N1bWVudCBpbiB0aGUgV2ViVmlldy4gVGhlCi0gICAgLy8gcmVzdWx0IHNob3VsZCBiZSBkaWZm
ZXJlbnQgZnJvbSB0aGUgc2l6ZSBvYnRhaW5lZCBwcmV2aW91c2x5LgotICAgIHN1cmZhY2UyID0g
dGVzdC0+Z2V0U25hcHNob3RBbmRXYWl0VW50aWxSZWFkeShXRUJLSVRfU05BUFNIT1RfUkVHSU9O
X0ZVTExfRE9DVU1FTlQsIFdFQktJVF9TTkFQU0hPVF9PUFRJT05TX05PTkUpOwotICAgIGdfYXNz
ZXJ0KHN1cmZhY2UyKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfd2lkdGgoc3VyZmFjZTIpLCAgPiwgd2lkdGgpOwotICAgIGdfYXNzZXJ0X2NtcGludChjYWly
b19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZTIpLCA+LCBoZWlnaHQpOwotICAgIGdf
YXNzZXJ0KCFUZXN0OjpjYWlyb1N1cmZhY2VzRXF1YWwoc3VyZmFjZTEsIHN1cmZhY2UyKSk7Ci0K
LSAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koc3VyZmFjZTEpOwotCi0gICAgZ19hc3NlcnQodGVz
dC0+Z2V0U25hcHNob3RBbmRDYW5jZWwoKSk7Ci19Ci0KLXZvaWQgYmVmb3JlQWxsKCkKLXsKLSAg
ICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImRlZmF1bHQtY29udGV4dCIsIHRl
c3RXZWJWaWV3RGVmYXVsdENvbnRleHQpOwotICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdl
YlZpZXciLCAiY3VzdG9tLWNoYXJzZXQiLCB0ZXN0V2ViVmlld0N1c3RvbUNoYXJzZXQpOwotICAg
IFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAic2V0dGluZ3MiLCB0ZXN0V2ViVmll
d1NldHRpbmdzKTsKLSAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInpvb20t
bGV2ZWwiLCB0ZXN0V2ViVmlld1pvb21MZXZlbCk7Ci0gICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2Vi
S2l0V2ViVmlldyIsICJydW4tamF2YXNjcmlwdCIsIHRlc3RXZWJWaWV3UnVuSmF2YVNjcmlwdCk7
Ci0gICAgRnVsbFNjcmVlbkNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJmdWxsc2Ny
ZWVuIiwgdGVzdFdlYlZpZXdGdWxsU2NyZWVuKTsKLSAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJL
aXRXZWJWaWV3IiwgImNhbi1zaG93LW1pbWUtdHlwZSIsIHRlc3RXZWJWaWV3Q2FuU2hvd01JTUVU
eXBlKTsKLSAgICBGb3JtQ2xpZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInN1Ym1pdC1m
b3JtIiwgdGVzdFdlYlZpZXdTdWJtaXRGb3JtKTsKLSAgICBTYXZlV2ViVmlld1Rlc3Q6OmFkZCgi
V2ViS2l0V2ViVmlldyIsICJzYXZlIiwgdGVzdFdlYlZpZXdTYXZlKTsKLSAgICBXZWJWaWV3VGVz
dDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInZpZXctbW9kZSIsIHRlc3RXZWJWaWV3TW9kZSk7Ci0g
ICAgU25hcHNob3RXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInNuYXBzaG90Iiwg
dGVzdFdlYlZpZXdTbmFwc2hvdCk7Ci0gICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmll
dyIsICJwYWdlLXZpc2liaWxpdHkiLCB0ZXN0V2ViVmlld1BhZ2VWaXNpYmlsaXR5KTsKLX0KLQot
dm9pZCBhZnRlckFsbCgpCi17Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlld0dyb3VwLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3R3JvdXAuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjZjNWM1Li4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3R3JvdXAu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjA2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24g
MiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIldlYktp
dFRlc3RTZXJ2ZXIuaCIKLSNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgotI2luY2x1ZGUgPGNzdGRh
cmc+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgot
I2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLQotc3RhdGljIFdlYktpdFRlc3RTZXJ2
ZXIqIGtTZXJ2ZXI7Ci0KLS8vIFRoZXNlIGFyZSBhbGwgaGVyZSBzbyB0aGF0IHRoZXkgY2FuIGJl
IGNoYW5nZWQgZWFzaWx5LCBpZiBuZWNlc3NhcnkuCi1zdGF0aWMgY29uc3QgY2hhcioga1N0eWxl
U2hlZXRIVE1MID0gIjxodG1sPjxkaXYgaWQ9XCJzdHlsZWRFbGVtZW50XCI+U3dlZXQgc3R5bGV6
ITwvZGl2PjwvaHRtbD4iOwotc3RhdGljIGNvbnN0IGNoYXIqIGtJbmplY3RlZFN0eWxlU2hlZXQg
PSAiI3N0eWxlZEVsZW1lbnQgeyBmb250LXdlaWdodDogYm9sZDsgfSI7Ci1zdGF0aWMgY29uc3Qg
Y2hhcioga1N0eWxlU2hlZXRUZXN0U2NyaXB0ID0gImdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ3N0eWxlZEVsZW1lbnQnKSlbJ2ZvbnQtd2VpZ2h0J10iOwotc3RhdGlj
IGNvbnN0IGNoYXIqIGtTdHlsZVNoZWV0VGVzdFNjcmlwdFJlc3VsdCA9ICJib2xkIjsKLQotc3Rh
dGljIHZvaWQgdGVzdFdlYlZpZXdHcm91cERlZmF1bHQoVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRl
cikKLXsKLSAgICAvLyBEZWZhdWx0IGdyb3VwIGlzIHNoYXJlZCBieSBhbGwgV2ViVmlld3MgYnkg
ZGVmYXVsdC4KLSAgICBHUmVmUHRyPFdlYktpdFdlYlZpZXc+IHdlYlZpZXcxID0gV0VCS0lUX1dF
Ql9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3
PiB3ZWJWaWV3MiA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAg
IGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19nZXRfZ3JvdXAod2ViVmlldzEuZ2V0KCkpID09IHdl
YmtpdF93ZWJfdmlld19nZXRfZ3JvdXAod2ViVmlldzIuZ2V0KCkpKTsKLQotICAgIC8vIFNldHRp
bmdzIGFyZSBzaGFyZWQgYnkgYWxsIHdlYiB2aWV3IGluIHRoZSBzYW1lIGdyb3VwLgotICAgIGdf
YXNzZXJ0KHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmlldzEuZ2V0KCkpID09IHdl
YmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmlldzIuZ2V0KCkpKTsKLSAgICBnX2Fzc2Vy
dCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdlYlZpZXcxLmdldCgpKSA9PSB3ZWJraXRf
d2ViX3ZpZXdfZ3JvdXBfZ2V0X3NldHRpbmdzKHdlYmtpdF93ZWJfdmlld19nZXRfZ3JvdXAod2Vi
VmlldzIuZ2V0KCkpKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3R3JvdXBOZXdHcm91
cChUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIC8vIFBhc3NpbmcgMCBhcyBncm91
cCBuYW1lIGdlbmVyYXRlcyB0aGUgbmFtZSBhdXRvbWF0aWNhbGx5LgotICAgIEdSZWZQdHI8V2Vi
S2l0V2ViVmlld0dyb3VwPiB2aWV3R3JvdXAxID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJfdmlld19n
cm91cF9uZXcoMCkpOwotICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0Rmlu
aXNoZXMoR19PQkpFQ1Qodmlld0dyb3VwMS5nZXQoKSkpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF93
ZWJfdmlld19ncm91cF9nZXRfbmFtZSh2aWV3R3JvdXAxLmdldCgpKSk7Ci0KLSAgICAvLyBOZXcg
Z3JvdXAgd2l0aCBhIGdpdmVuIG5hbWUuCi0gICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3R3JvdXA+
IHZpZXdHcm91cDIgPSBhZG9wdEdSZWYod2Via2l0X3dlYl92aWV3X2dyb3VwX25ldygiVGVzdEdy
b3VwMiIpKTsKLSAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVz
KEdfT0JKRUNUKHZpZXdHcm91cDIuZ2V0KCkpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0
X3dlYl92aWV3X2dyb3VwX2dldF9uYW1lKHZpZXdHcm91cDIuZ2V0KCkpLCA9PSwgIlRlc3RHcm91
cDIiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dyb3VwX2dldF9uYW1l
KHZpZXdHcm91cDIuZ2V0KCkpLCAhPSwgd2Via2l0X3dlYl92aWV3X2dyb3VwX2dldF9uYW1lKHZp
ZXdHcm91cDEuZ2V0KCkpKTsKLQotICAgIC8vIEV2ZXJ5IGdyb3VwIGhhcyBpdHMgb3duIHNldHRp
bmdzLgotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19ncm91cF9nZXRfc2V0dGluZ3Modmll
d0dyb3VwMS5nZXQoKSkgIT0gd2Via2l0X3dlYl92aWV3X2dyb3VwX2dldF9zZXR0aW5ncyh2aWV3
R3JvdXAyLmdldCgpKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3TmV3V2l0aEdyb3Vw
KFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3
R3JvdXA+IHZpZXdHcm91cDEgPSBhZG9wdEdSZWYod2Via2l0X3dlYl92aWV3X2dyb3VwX25ldygi
VGVzdEdyb3VwMSIpKTsKLSAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZp
bmlzaGVzKEdfT0JKRUNUKHZpZXdHcm91cDEuZ2V0KCkpKTsKLSAgICBHUmVmUHRyPFdlYktpdFdl
YlZpZXc+IHdlYlZpZXcxID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXdfd2l0
aF9ncm91cCh2aWV3R3JvdXAxLmdldCgpKSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3
X2dldF9ncm91cCh3ZWJWaWV3MS5nZXQoKSkgPT0gdmlld0dyb3VwMS5nZXQoKSk7Ci0KLSAgICBH
UmVmUHRyPFdlYktpdFdlYlZpZXc+IHdlYlZpZXcyID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93
ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dldF9ncm91cCh3
ZWJWaWV3Mi5nZXQoKSkgIT0gdmlld0dyb3VwMS5nZXQoKSk7Ci0KLSAgICAvLyBTZXR0aW5ncyBz
aG91bGQgYmUgZGlmZmVyZW50IGZvciB2aWV3cyBpbiBkaWZmZXJlbnQgZ3JvdXBzLgotICAgIGdf
YXNzZXJ0KHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmlldzEuZ2V0KCkpICE9IHdl
YmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmlldzIuZ2V0KCkpKTsKLX0KLQotc3RhdGlj
IHZvaWQgdGVzdFdlYlZpZXdHcm91cFNldHRpbmdzKFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIp
Ci17Ci0gICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3R3JvdXA+IHZpZXdHcm91cDEgPSBhZG9wdEdS
ZWYod2Via2l0X3dlYl92aWV3X2dyb3VwX25ldygiVGVzdEdyb3VwMSIpKTsKLSAgICB0ZXN0LT5h
c3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHZpZXdHcm91cDEu
Z2V0KCkpKTsKLSAgICBHUmVmUHRyPFdlYktpdFNldHRpbmdzPiBuZXdTZXR0aW5ncyA9IGFkb3B0
R1JlZih3ZWJraXRfc2V0dGluZ3NfbmV3X3dpdGhfc2V0dGluZ3MoImVuYWJsZS1qYXZhc2NyaXB0
IiwgRkFMU0UsIE5VTEwpKTsKLSAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVz
dEZpbmlzaGVzKEdfT0JKRUNUKG5ld1NldHRpbmdzLmdldCgpKSk7Ci0gICAgd2Via2l0X3dlYl92
aWV3X2dyb3VwX3NldF9zZXR0aW5ncyh2aWV3R3JvdXAxLmdldCgpLCBuZXdTZXR0aW5ncy5nZXQo
KSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dyb3VwX2dldF9zZXR0aW5ncyh2aWV3
R3JvdXAxLmdldCgpKSA9PSBuZXdTZXR0aW5ncy5nZXQoKSk7Ci0KLSAgICBHUmVmUHRyPFdlYktp
dFdlYlZpZXc+IHdlYlZpZXcxID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXdf
d2l0aF9ncm91cCh2aWV3R3JvdXAxLmdldCgpKSk7Ci0gICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3
PiB3ZWJWaWV3MiA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAg
IFdlYktpdFNldHRpbmdzKiB3ZWJWaWV3MVNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9z
ZXR0aW5ncyh3ZWJWaWV3MS5nZXQoKSk7Ci0gICAgV2ViS2l0U2V0dGluZ3MqIHdlYlZpZXcyU2V0
dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdlYlZpZXcyLmdldCgpKTsKLSAg
ICBnX2Fzc2VydCh3ZWJWaWV3MVNldHRpbmdzICE9IHdlYlZpZXcyU2V0dGluZ3MpOwotICAgIGdf
YXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2phdmFzY3JpcHQod2ViVmlldzFTZXR0
aW5ncykgIT0gd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfamF2YXNjcmlwdCh3ZWJWaWV3MlNl
dHRpbmdzKSk7Ci0KLSAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X3NldHRpbmdzKHdlYlZpZXcxLmdl
dCgpLCB3ZWJWaWV3MlNldHRpbmdzKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ2V0
X3NldHRpbmdzKHdlYlZpZXcxLmdldCgpKSA9PSB3ZWJWaWV3MlNldHRpbmdzKTsKLSAgICBnX2Fz
c2VydCh3ZWJraXRfd2ViX3ZpZXdfZ3JvdXBfZ2V0X3NldHRpbmdzKHdlYmtpdF93ZWJfdmlld19n
ZXRfZ3JvdXAod2ViVmlldzEuZ2V0KCkpKSA9PSB3ZWJWaWV3MlNldHRpbmdzKTsKLX0KLQotc3Rh
dGljIGJvb2wgaXNTdHlsZVNoZWV0SW5qZWN0ZWRGb3JVUkxBdFBhdGgoV2ViVmlld1Rlc3QqIHRl
c3QsIGNvbnN0IGNoYXIqIHBhdGgpCi17Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRV
UklGb3JQYXRoKHBhdGgpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVk
KCk7Ci0KLSAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgV2ViS2l0SmF2YXNjcmlwdFJl
c3VsdCogamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxG
aW5pc2hlZChrU3R5bGVTaGVldFRlc3RTY3JpcHQsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgZ19h
c3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKLQot
ICAgIEdPd25QdHI8Y2hhcj4gcmVzdWx0U3RyaW5nKFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVz
dWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKLSAgICByZXR1cm4gIWdfc3RyY21wMChy
ZXN1bHRTdHJpbmcuZ2V0KCksIGtTdHlsZVNoZWV0VGVzdFNjcmlwdFJlc3VsdCk7Ci19Ci0KLXN0
YXRpYyB2b2lkIGZpbGxVUkxMaXN0RnJvbVBhdGhzKGNoYXIqKiBsaXN0LCBjb25zdCBjaGFyKiBw
YXRoLCAuLi4pCi17Ci0gICAgdmFfbGlzdCBhcmd1bWVudExpc3Q7Ci0gICAgdmFfc3RhcnQoYXJn
dW1lbnRMaXN0LCBwYXRoKTsKLQotICAgIGludCBpID0gMDsKLSAgICB3aGlsZSAocGF0aCkgewot
ICAgICAgICAvLyBGSVhNRTogV2UgbXVzdCB1c2UgYSB3aWxkY2FyZCBmb3IgdGhlIGhvc3QgaGVy
ZSB1bnRpbCBodHRwOi8vd2tidWcuY29tLzExMjQ3NiBpcyBmaXhlZC4KLSAgICAgICAgLy8gVW50
aWwgdGhhdCB0aW1lIHBhdHRlcm5zIHdpdGggcG9ydCBudW1iZXJzIGluIHRoZW0gd2lsbCBub3Qg
cHJvcGVybHkgbWF0Y2ggVVJMcyB3aXRoIHBvcnQgbnVtYmVycy4KLSAgICAgICAgbGlzdFtpKytd
ID0gZ19zdHJkdXBfcHJpbnRmKCJodHRwOi8vKi8lcyoiLCBwYXRoKTsKLSAgICAgICAgcGF0aCA9
IHZhX2FyZyhhcmd1bWVudExpc3QsIGNvbnN0IGNoYXIqKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2
b2lkIHJlbW92ZU9sZEluamVjdGVkU3R5bGVTaGVldHNBbmRSZXNldExpc3RzKFdlYktpdFdlYlZp
ZXdHcm91cCogZ3JvdXAsIGNoYXIqKiB3aGl0ZWxpc3QsIGNoYXIqKiBibGFja2xpc3QpCi17Ci0g
ICAgd2Via2l0X3dlYl92aWV3X2dyb3VwX3JlbW92ZV9hbGxfdXNlcl9zdHlsZV9zaGVldHMoZ3Jv
dXApOwotCi0gICAgd2hpbGUgKCp3aGl0ZWxpc3QpIHsKLSAgICAgICAgZ19mcmVlKCp3aGl0ZWxp
c3QpOwotICAgICAgICAqd2hpdGVsaXN0ID0gMDsKLSAgICAgICAgd2hpdGVsaXN0Kys7Ci0gICAg
fQotCi0gICAgd2hpbGUgKCpibGFja2xpc3QpIHsKLSAgICAgICAgZ19mcmVlKCpibGFja2xpc3Qp
OwotICAgICAgICAqYmxhY2tsaXN0ID0gMDsKLSAgICAgICAgYmxhY2tsaXN0Kys7Ci0gICAgfQot
fQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0dyb3VwSW5qZWN0ZWRTdHlsZVNoZWV0KFdlYlZp
ZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIFdlYktpdFdlYlZpZXdHcm91cCog
Z3JvdXAgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2dyb3VwKHRlc3QtPm1fd2ViVmlldyk7Ci0gICAg
Y2hhciogd2hpdGVsaXN0WzNdID0geyAwLCAwLCAwIH07Ci0gICAgY2hhciogYmxhY2tsaXN0WzNd
ID0geyAwLCAwLCAwIH07Ci0KLSAgICByZW1vdmVPbGRJbmplY3RlZFN0eWxlU2hlZXRzQW5kUmVz
ZXRMaXN0cyhncm91cCwgd2hpdGVsaXN0LCBibGFja2xpc3QpOwotCi0gICAgLy8gV2l0aG91dCBh
IHdoaXRlbGlzdCBvciBhIGJsYWNrbGlzdCBhbGwgVVJMcyBzaG91bGQgaGF2ZSB0aGUgaW5qZWN0
ZWQgc3R5bGUgc2hlZXQuCi0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHJhbmRvbVBhdGggPSAic29t
ZXJhbmRvbXBhdGgiOwotICAgIGdfYXNzZXJ0KCFpc1N0eWxlU2hlZXRJbmplY3RlZEZvclVSTEF0
UGF0aCh0ZXN0LCByYW5kb21QYXRoKSk7Ci0gICAgd2Via2l0X3dlYl92aWV3X2dyb3VwX2FkZF91
c2VyX3N0eWxlX3NoZWV0KGdyb3VwLCBrSW5qZWN0ZWRTdHlsZVNoZWV0LCAwLCAwLCAwLCBXRUJL
SVRfSU5KRUNURURfQ09OVEVOVF9GUkFNRVNfQUxMKTsKLSAgICBnX2Fzc2VydChpc1N0eWxlU2hl
ZXRJbmplY3RlZEZvclVSTEF0UGF0aCh0ZXN0LCByYW5kb21QYXRoKSk7Ci0KLSAgICByZW1vdmVP
bGRJbmplY3RlZFN0eWxlU2hlZXRzQW5kUmVzZXRMaXN0cyhncm91cCwgd2hpdGVsaXN0LCBibGFj
a2xpc3QpOwotCi0gICAgZmlsbFVSTExpc3RGcm9tUGF0aHMoYmxhY2tsaXN0LCByYW5kb21QYXRo
LCAwKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfZ3JvdXBfYWRkX3VzZXJfc3R5bGVfc2hlZXQoZ3Jv
dXAsIGtJbmplY3RlZFN0eWxlU2hlZXQsIDAsIDAsIGJsYWNrbGlzdCwgV0VCS0lUX0lOSkVDVEVE
X0NPTlRFTlRfRlJBTUVTX0FMTCk7Ci0gICAgZ19hc3NlcnQoIWlzU3R5bGVTaGVldEluamVjdGVk
Rm9yVVJMQXRQYXRoKHRlc3QsIHJhbmRvbVBhdGgpKTsKLSAgICBnX2Fzc2VydChpc1N0eWxlU2hl
ZXRJbmplY3RlZEZvclVSTEF0UGF0aCh0ZXN0LCAic29tZW90aGVycmFuZG9tcGF0aCIpKTsKLQot
ICAgIHJlbW92ZU9sZEluamVjdGVkU3R5bGVTaGVldHNBbmRSZXNldExpc3RzKGdyb3VwLCB3aGl0
ZWxpc3QsIGJsYWNrbGlzdCk7Ci0KLSAgICBzdGF0aWMgY29uc3QgY2hhciogaW5UaGVXaGl0ZUxp
c3QgPSAiaW50aGV3aGl0ZWxpc3QiOwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBub3RJbldoaXRl
bGlzdCA9ICJub3RpbnRoZXdoaXRlbGlzdCI7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGluVGhl
V2hpdGVMaXN0QW5kQmxhY2tMaXN0ID0gImludGhld2hpdGVsaXN0YW5kYmxhY2tsaXN0IjsKLQot
ICAgIGZpbGxVUkxMaXN0RnJvbVBhdGhzKHdoaXRlbGlzdCwgaW5UaGVXaGl0ZUxpc3QsIGluVGhl
V2hpdGVMaXN0QW5kQmxhY2tMaXN0LCAwKTsKLSAgICBmaWxsVVJMTGlzdEZyb21QYXRocyhibGFj
a2xpc3QsIGluVGhlV2hpdGVMaXN0QW5kQmxhY2tMaXN0LCAwKTsKLSAgICB3ZWJraXRfd2ViX3Zp
ZXdfZ3JvdXBfYWRkX3VzZXJfc3R5bGVfc2hlZXQoZ3JvdXAsIGtJbmplY3RlZFN0eWxlU2hlZXQs
IDAsIHdoaXRlbGlzdCwgYmxhY2tsaXN0LCBXRUJLSVRfSU5KRUNURURfQ09OVEVOVF9GUkFNRVNf
QUxMKTsKLSAgICBnX2Fzc2VydChpc1N0eWxlU2hlZXRJbmplY3RlZEZvclVSTEF0UGF0aCh0ZXN0
LCBpblRoZVdoaXRlTGlzdCkpOwotICAgIGdfYXNzZXJ0KCFpc1N0eWxlU2hlZXRJbmplY3RlZEZv
clVSTEF0UGF0aCh0ZXN0LCBpblRoZVdoaXRlTGlzdEFuZEJsYWNrTGlzdCkpOwotICAgIGdfYXNz
ZXJ0KCFpc1N0eWxlU2hlZXRJbmplY3RlZEZvclVSTEF0UGF0aCh0ZXN0LCBub3RJbldoaXRlbGlz
dCkpOwotCi0gICAgLy8gSXQncyBpbXBvcnRhbnQgdG8gY2xlYW4gdXAgdGhlIGVudmlyb25tZW50
IGJlZm9yZSBvdGhlciB0ZXN0cy4KLSAgICByZW1vdmVPbGRJbmplY3RlZFN0eWxlU2hlZXRzQW5k
UmVzZXRMaXN0cyhncm91cCwgd2hpdGVsaXN0LCBibGFja2xpc3QpOwotfQotCi1zdGF0aWMgdm9p
ZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtZXNzYWdl
LCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiwgU291cENsaWVudENvbnRleHQqLCBncG9p
bnRlcikKLXsKLSAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRV
U19PSyk7Ci0gICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2Jv
ZHksIFNPVVBfTUVNT1JZX1NUQVRJQywga1N0eWxlU2hlZXRIVE1MLCBzdHJsZW4oa1N0eWxlU2hl
ZXRIVE1MKSk7Ci0gICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9u
c2VfYm9keSk7Ci19Ci0KLXZvaWQgYmVmb3JlQWxsKCkKLXsKLSAgICBrU2VydmVyID0gbmV3IFdl
YktpdFRlc3RTZXJ2ZXIoKTsKLSAgICBrU2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2spOwotCi0g
ICAgVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3R3JvdXAiLCAiZGVmYXVsdC1ncm91cCIsIHRlc3RX
ZWJWaWV3R3JvdXBEZWZhdWx0KTsKLSAgICBUZXN0OjphZGQoIldlYktpdFdlYlZpZXdHcm91cCIs
ICJuZXctZ3JvdXAiLCB0ZXN0V2ViVmlld0dyb3VwTmV3R3JvdXApOwotICAgIFRlc3Q6OmFkZCgi
V2ViS2l0V2ViVmlldyIsICJuZXctd2l0aC1ncm91cCIsIHRlc3RXZWJWaWV3TmV3V2l0aEdyb3Vw
KTsKLSAgICBUZXN0OjphZGQoIldlYktpdFdlYlZpZXdHcm91cCIsICJzZXR0aW5ncyIsIHRlc3RX
ZWJWaWV3R3JvdXBTZXR0aW5ncyk7Ci0gICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmll
d0dyb3VwIiwgImluamVjdGVkLXN0eWxlLXNoZWV0IiwgdGVzdFdlYlZpZXdHcm91cEluamVjdGVk
U3R5bGVTaGVldCk7Ci19Ci0KLXZvaWQgYWZ0ZXJBbGwoKQotewotICAgIGRlbGV0ZSBrU2VydmVy
OwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
VGVzdFdlYlZpZXdFZGl0b3IuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvVGVzdFdlYlZpZXdFZGl0b3IuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA5MzMxNWRiLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL1Rlc3RXZWJWaWV3RWRpdG9yLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIwMiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9H
UmVmUHRyLmg+Ci0KLWNsYXNzIEVkaXRvclRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7Ci1wdWJs
aWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShFZGl0b3JUZXN0KTsKLQotICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBpbnQga0NsaXBib2FyZFdhaXRUaW1lb3V0ID0gNTA7Ci0gICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIGludCBrQ2xpcGJvYXJkV2FpdE1heFRyaWVzID0gMjsKLQotICAg
IEVkaXRvclRlc3QoKQotICAgICAgICA6IG1fY2xpcGJvYXJkKGd0a19jbGlwYm9hcmRfZ2V0KEdE
S19TRUxFQ1RJT05fQ0xJUEJPQVJEKSkKLSAgICAgICAgLCBtX2NhbkV4ZWN1dGVFZGl0aW5nQ29t
bWFuZChmYWxzZSkKLSAgICAgICAgLCBtX3RyaWVzQ291bnQoMCkKLSAgICB7Ci0gICAgICAgIGd0
a19jbGlwYm9hcmRfY2xlYXIobV9jbGlwYm9hcmQpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lk
IGNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZFJlYWR5Q2FsbGJhY2soR09iamVjdCosIEdBc3luY1Jl
c3VsdCogcmVzdWx0LCBFZGl0b3JUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgR093blB0cjxH
RXJyb3I+IGVycm9yOwotICAgICAgICB0ZXN0LT5tX2NhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZCA9
IHdlYmtpdF93ZWJfdmlld19jYW5fZXhlY3V0ZV9lZGl0aW5nX2NvbW1hbmRfZmluaXNoKHRlc3Qt
Pm1fd2ViVmlldywgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpOwotICAgICAgICBnX2Fzc2VydCgh
ZXJyb3IuZ2V0KCkpOwotICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3Ap
OwotICAgIH0KLQotICAgIGJvb2wgY2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kKGNvbnN0IGNoYXIq
IGNvbW1hbmQpCi0gICAgewotICAgICAgICBtX2NhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZCA9IGZh
bHNlOwotICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfY2FuX2V4ZWN1dGVfZWRpdGluZ19jb21tYW5k
KG1fd2ViVmlldywgY29tbWFuZCwgMCwgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxi
YWNrPihjYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmRSZWFkeUNhbGxiYWNrKSwgdGhpcyk7Ci0gICAg
ICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAgICAgICAgcmV0dXJuIG1fY2FuRXhl
Y3V0ZUVkaXRpbmdDb21tYW5kOwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiB3YWl0Rm9y
Q2xpcGJvYXJkVGV4dChFZGl0b3JUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+bV90
cmllc0NvdW50Kys7Ci0gICAgICAgIGlmIChndGtfY2xpcGJvYXJkX3dhaXRfaXNfdGV4dF9hdmFp
bGFibGUodGVzdC0+bV9jbGlwYm9hcmQpIHx8IHRlc3QtPm1fdHJpZXNDb3VudCA+IGtDbGlwYm9h
cmRXYWl0TWF4VHJpZXMpIHsKLSAgICAgICAgICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9t
YWluTG9vcCk7Ci0gICAgICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICAgIH0KLQotICAgICAg
ICByZXR1cm4gVFJVRTsKLSAgICB9Ci0KLSAgICB2b2lkIGNvcHlDbGlwYm9hcmQoKQotICAgIHsK
LSAgICAgICAgd2Via2l0X3dlYl92aWV3X2V4ZWN1dGVfZWRpdGluZ19jb21tYW5kKG1fd2ViVmll
dywgV0VCS0lUX0VESVRJTkdfQ09NTUFORF9DT1BZKTsKLSAgICAgICAgLy8gVGhlcmUncyBubyB3
YXkgdG8ga25vdyB3aGVuIHRoZSBzZWxlY3Rpb24gaGFzIGJlZW4gY29waWVkIHRvCi0gICAgICAg
IC8vIHRoZSBjbGlwYm9hcmQsIHNvIHVzZSBhIHRpbWVvdXQgc291cmNlIHRvIHF1ZXJ5IHRoZSBj
bGlwYm9hcmQuCi0gICAgICAgIG1fdHJpZXNDb3VudCA9IDA7Ci0gICAgICAgIGdfdGltZW91dF9h
ZGQoa0NsaXBib2FyZFdhaXRUaW1lb3V0LCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPih3
YWl0Rm9yQ2xpcGJvYXJkVGV4dCksIHRoaXMpOwotICAgICAgICBnX21haW5fbG9vcF9ydW4obV9t
YWluTG9vcCk7Ci0gICAgfQotCi0gICAgR3RrQ2xpcGJvYXJkKiBtX2NsaXBib2FyZDsKLSAgICBi
b29sIG1fY2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kOwotICAgIHNpemVfdCBtX3RyaWVzQ291bnQ7
Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0VkaXRvckN1dENvcHlQYXN0ZU5vbkVkaXRh
YmxlKEVkaXRvclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgc3RhdGljIGNvbnN0
IGNoYXIqIHNlbGVjdGVkU3BhbkhUTUwgPSAiPGh0bWw+PGJvZHkgY29udGVudEVkaXRhYmxlPVwi
ZmFsc2VcIj4iCi0gICAgICAgICI8c3BhbiBpZD1cIm1haW5zcGFuXCI+QWxsIHdvcmsgYW5kIG5v
IHBsYXkgPHNwYW4gaWQ9XCJzdWJzcGFuXCI+bWFrZSBKYWNrIGEgZHVsbDwvc3Bhbj4gYm95Ljwv
c3Bhbj4iCi0gICAgICAgICI8c2NyaXB0PmRvY3VtZW50LmdldFNlbGVjdGlvbigpLmNvbGxhcHNl
KCk7XG4iCi0gICAgICAgICJkb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJl
bihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3Vic3BhbicpKTtcbiIKLSAgICAgICAgIjwvc2Ny
aXB0PjwvYm9keT48L2h0bWw+IjsKLQotICAgIC8vIE5vdGhpbmcgbG9hZGVkIHlldC4KLSAgICBn
X2Fzc2VydCghdGVzdC0+Y2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kKFdFQktJVF9FRElUSU5HX0NP
TU1BTkRfQ1VUKSk7Ci0gICAgZ19hc3NlcnQoIXRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFu
ZChXRUJLSVRfRURJVElOR19DT01NQU5EX0NPUFkpKTsKLSAgICBnX2Fzc2VydCghdGVzdC0+Y2Fu
RXhlY3V0ZUVkaXRpbmdDb21tYW5kKFdFQktJVF9FRElUSU5HX0NPTU1BTkRfUEFTVEUpKTsKLQot
ICAgIHRlc3QtPmxvYWRIdG1sKHNlbGVjdGVkU3BhbkhUTUwsIDApOwotICAgIHRlc3QtPndhaXRV
bnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3NlcnQodGVzdC0+Y2FuRXhlY3V0ZUVkaXRp
bmdDb21tYW5kKFdFQktJVF9FRElUSU5HX0NPTU1BTkRfQ09QWSkpOwotICAgIC8vIEl0J3Mgbm90
IHBvc3NpYmxlIHRvIGN1dCBhbmQgcGFzdGUgd2hlbiBjb250ZW50IGlzIG5vdCBlZGl0YWJsZQot
ICAgIC8vIGV2ZW4gaWYgdGhlcmUncyBhIHNlbGVjdGlvbi4KLSAgICBnX2Fzc2VydCghdGVzdC0+
Y2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kKFdFQktJVF9FRElUSU5HX0NPTU1BTkRfQ1VUKSk7Ci0g
ICAgZ19hc3NlcnQoIXRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElO
R19DT01NQU5EX1BBU1RFKSk7Ci0KLSAgICB0ZXN0LT5jb3B5Q2xpcGJvYXJkKCk7Ci0gICAgR093
blB0cjxjaGFyPiBjbGlwYm9hcmRUZXh0KGd0a19jbGlwYm9hcmRfd2FpdF9mb3JfdGV4dCh0ZXN0
LT5tX2NsaXBib2FyZCkpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihjbGlwYm9hcmRUZXh0LmdldCgp
LCA9PSwgIm1ha2UgSmFjayBhIGR1bGwiKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdF
ZGl0b3JDdXRDb3B5UGFzdGVFZGl0YWJsZShFZGl0b3JUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVy
KQotewotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzZWxlY3RlZFNwYW5IVE1MID0gIjxodG1sPjxi
b2R5IGNvbnRlbnRFZGl0YWJsZT1cInRydWVcIj4iCi0gICAgICAgICI8c3BhbiBpZD1cIm1haW5z
cGFuXCI+QWxsIHdvcmsgYW5kIG5vIHBsYXkgPHNwYW4+bWFrZSBKYWNrIGEgZHVsbDwvc3Bhbj4g
Ym95Ljwvc3Bhbj4iCi0gICAgICAgICI8c2NyaXB0PmRvY3VtZW50LmdldFNlbGVjdGlvbigpLmNv
bGxhcHNlKCk7XG4iCi0gICAgICAgICJkb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxD
aGlsZHJlbihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbnNwYW4nKSk7XG4iCi0gICAgICAg
ICI8L3NjcmlwdD48L2JvZHk+PC9odG1sPiI7Ci0KLSAgICAvLyBOb3RoaW5nIGxvYWRlZCB5ZXQu
Ci0gICAgZ19hc3NlcnQoIXRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJ
VElOR19DT01NQU5EX0NVVCkpOwotICAgIGdfYXNzZXJ0KCF0ZXN0LT5jYW5FeGVjdXRlRWRpdGlu
Z0NvbW1hbmQoV0VCS0lUX0VESVRJTkdfQ09NTUFORF9DT1BZKSk7Ci0gICAgZ19hc3NlcnQoIXRl
c3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElOR19DT01NQU5EX1BBU1RF
KSk7Ci0KLSAgICB0ZXN0LT5sb2FkSHRtbChzZWxlY3RlZFNwYW5IVE1MLCAwKTsKLSAgICB0ZXN0
LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIC8vIFRoZXJlJ3MgYSBzZWxlY3Rpb24u
Ci0gICAgZ19hc3NlcnQodGVzdC0+Y2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kKFdFQktJVF9FRElU
SU5HX0NPTU1BTkRfQ1VUKSk7Ci0gICAgZ19hc3NlcnQodGVzdC0+Y2FuRXhlY3V0ZUVkaXRpbmdD
b21tYW5kKFdFQktJVF9FRElUSU5HX0NPTU1BTkRfQ09QWSkpOwotICAgIGdfYXNzZXJ0KHRlc3Qt
PmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElOR19DT01NQU5EX1BBU1RFKSk7
Ci0KLSAgICB0ZXN0LT5jb3B5Q2xpcGJvYXJkKCk7Ci0gICAgR093blB0cjxjaGFyPiBjbGlwYm9h
cmRUZXh0KGd0a19jbGlwYm9hcmRfd2FpdF9mb3JfdGV4dCh0ZXN0LT5tX2NsaXBib2FyZCkpOwot
ICAgIGdfYXNzZXJ0X2NtcHN0cihjbGlwYm9hcmRUZXh0LmdldCgpLCA9PSwgIkFsbCB3b3JrIGFu
ZCBubyBwbGF5IG1ha2UgSmFjayBhIGR1bGwgYm95LiIpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0
V2ViVmlld0VkaXRvclNlbGVjdEFsbE5vbkVkaXRhYmxlKEVkaXRvclRlc3QqIHRlc3QsIGdjb25z
dHBvaW50ZXIpCi17Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHNlbGVjdGVkU3BhbkhUTUwgPSAi
PGh0bWw+PGJvZHkgY29udGVudEVkaXRhYmxlPVwiZmFsc2VcIj4iCi0gICAgICAgICI8c3BhbiBp
ZD1cIm1haW5zcGFuXCI+QWxsIHdvcmsgYW5kIG5vIHBsYXkgPHNwYW4gaWQ9XCJzdWJzcGFuXCI+
bWFrZSBKYWNrIGEgZHVsbDwvc3Bhbj4gYm95Ljwvc3Bhbj4iCi0gICAgICAgICI8c2NyaXB0PmRv
Y3VtZW50LmdldFNlbGVjdGlvbigpLmNvbGxhcHNlKCk7XG4iCi0gICAgICAgICJkb2N1bWVudC5n
ZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJlbihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
c3Vic3BhbicpKTtcbiIKLSAgICAgICAgIjwvc2NyaXB0PjwvYm9keT48L2h0bWw+IjsKLQotICAg
IGdfYXNzZXJ0KHRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElOR19D
T01NQU5EX1NFTEVDVF9BTEwpKTsKLQotICAgIHRlc3QtPmxvYWRIdG1sKHNlbGVjdGVkU3BhbkhU
TUwsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3Nl
cnQodGVzdC0+Y2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kKFdFQktJVF9FRElUSU5HX0NPTU1BTkRf
U0VMRUNUX0FMTCkpOwotCi0gICAgdGVzdC0+Y29weUNsaXBib2FyZCgpOwotICAgIEdPd25QdHI8
Y2hhcj4gY2xpcGJvYXJkVGV4dChndGtfY2xpcGJvYXJkX3dhaXRfZm9yX3RleHQodGVzdC0+bV9j
bGlwYm9hcmQpKTsKLQotICAgIC8vIEluaXRpYWxseSBvbmx5IHRoZSBzdWJzcGFuIGlzIHNlbGVj
dGVkLgotICAgIGdfYXNzZXJ0X2NtcHN0cihjbGlwYm9hcmRUZXh0LmdldCgpLCA9PSwgIm1ha2Ug
SmFjayBhIGR1bGwiKTsKLQotICAgIHdlYmtpdF93ZWJfdmlld19leGVjdXRlX2VkaXRpbmdfY29t
bWFuZCh0ZXN0LT5tX3dlYlZpZXcsIFdFQktJVF9FRElUSU5HX0NPTU1BTkRfU0VMRUNUX0FMTCk7
Ci0gICAgdGVzdC0+Y29weUNsaXBib2FyZCgpOwotICAgIGNsaXBib2FyZFRleHQuc2V0KGd0a19j
bGlwYm9hcmRfd2FpdF9mb3JfdGV4dCh0ZXN0LT5tX2NsaXBib2FyZCkpOwotCi0gICAgLy8gVGhl
IG1haW5zcGFuIHNob3VsZCBiZSBzZWxlY3RlZCBhZnRlciBjYWxsaW5nIFNFTEVDVF9BTEwuCi0g
ICAgZ19hc3NlcnRfY21wc3RyKGNsaXBib2FyZFRleHQuZ2V0KCksID09LCAiQWxsIHdvcmsgYW5k
IG5vIHBsYXkgbWFrZSBKYWNrIGEgZHVsbCBib3kuIik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RX
ZWJWaWV3RWRpdG9yU2VsZWN0QWxsRWRpdGFibGUoRWRpdG9yVGVzdCogdGVzdCwgZ2NvbnN0cG9p
bnRlcikKLXsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogc2VsZWN0ZWRTcGFuSFRNTCA9ICI8aHRt
bD48Ym9keSBjb250ZW50RWRpdGFibGU9XCJ0cnVlXCI+IgotICAgICAgICAiPHNwYW4gaWQ9XCJt
YWluc3BhblwiPkFsbCB3b3JrIGFuZCBubyBwbGF5IDxzcGFuIGlkPVwic3Vic3BhblwiPm1ha2Ug
SmFjayBhIGR1bGw8L3NwYW4+IGJveS48L3NwYW4+IgotICAgICAgICAiPHNjcmlwdD5kb2N1bWVu
dC5nZXRTZWxlY3Rpb24oKS5jb2xsYXBzZSgpO1xuIgotICAgICAgICAiZG9jdW1lbnQuZ2V0U2Vs
ZWN0aW9uKCkuc2VsZWN0QWxsQ2hpbGRyZW4oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1YnNw
YW4nKSk7XG4iCi0gICAgICAgICI8L3NjcmlwdD48L2JvZHk+PC9odG1sPiI7Ci0KLSAgICBnX2Fz
c2VydCh0ZXN0LT5jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQoV0VCS0lUX0VESVRJTkdfQ09NTUFO
RF9TRUxFQ1RfQUxMKSk7Ci0KLSAgICB0ZXN0LT5sb2FkSHRtbChzZWxlY3RlZFNwYW5IVE1MLCAw
KTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0KHRl
c3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElOR19DT01NQU5EX1NFTEVD
VF9BTEwpKTsKLQotICAgIHRlc3QtPmNvcHlDbGlwYm9hcmQoKTsKLSAgICBHT3duUHRyPGNoYXI+
IGNsaXBib2FyZFRleHQoZ3RrX2NsaXBib2FyZF93YWl0X2Zvcl90ZXh0KHRlc3QtPm1fY2xpcGJv
YXJkKSk7Ci0KLSAgICAvLyBJbml0aWFsbHkgb25seSB0aGUgc3Vic3BhbiBpcyBzZWxlY3RlZC4K
LSAgICBnX2Fzc2VydF9jbXBzdHIoY2xpcGJvYXJkVGV4dC5nZXQoKSwgPT0sICJtYWtlIEphY2sg
YSBkdWxsIik7Ci0KLSAgICB3ZWJraXRfd2ViX3ZpZXdfZXhlY3V0ZV9lZGl0aW5nX2NvbW1hbmQo
dGVzdC0+bV93ZWJWaWV3LCBXRUJLSVRfRURJVElOR19DT01NQU5EX1NFTEVDVF9BTEwpOwotICAg
IHRlc3QtPmNvcHlDbGlwYm9hcmQoKTsKLSAgICBjbGlwYm9hcmRUZXh0LnNldChndGtfY2xpcGJv
YXJkX3dhaXRfZm9yX3RleHQodGVzdC0+bV9jbGlwYm9hcmQpKTsKLQotICAgIC8vIFRoZSBtYWlu
c3BhbiBzaG91bGQgYmUgc2VsZWN0ZWQgYWZ0ZXIgY2FsbGluZyBTRUxFQ1RfQUxMLgotICAgIGdf
YXNzZXJ0X2NtcHN0cihjbGlwYm9hcmRUZXh0LmdldCgpLCA9PSwgIkFsbCB3b3JrIGFuZCBubyBw
bGF5IG1ha2UgSmFjayBhIGR1bGwgYm95LiIpOwotfQotCi12b2lkIGJlZm9yZUFsbCgpCi17Ci0g
ICAgRWRpdG9yVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImN1dC1jb3B5LXBhc3RlL25vbi1l
ZGl0YWJsZSIsIHRlc3RXZWJWaWV3RWRpdG9yQ3V0Q29weVBhc3RlTm9uRWRpdGFibGUpOwotICAg
IEVkaXRvclRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJjdXQtY29weS1wYXN0ZS9lZGl0YWJs
ZSIsIHRlc3RXZWJWaWV3RWRpdG9yQ3V0Q29weVBhc3RlRWRpdGFibGUpOwotICAgIEVkaXRvclRl
c3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJzZWxlY3QtYWxsL25vbi1lZGl0YWJsZSIsIHRlc3RX
ZWJWaWV3RWRpdG9yU2VsZWN0QWxsTm9uRWRpdGFibGUpOwotICAgIEVkaXRvclRlc3Q6OmFkZCgi
V2ViS2l0V2ViVmlldyIsICJzZWxlY3QtYWxsL2VkaXRhYmxlIiwgdGVzdFdlYlZpZXdFZGl0b3JT
ZWxlY3RBbGxFZGl0YWJsZSk7Ci19Ci0KLXZvaWQgYWZ0ZXJBbGwoKQotewotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViRXh0ZW5zaW9uVGVz
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJFeHRlbnNp
b25UZXN0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDIxMmUyYi4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJFeHRlbnNp
b25UZXN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI2NyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dFJlZi5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8Z2lvL2dpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5o
PgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0LXdlYi1leHRl
bnNpb24uaD4KLSNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3du
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KLQotc3RhdGljIGNvbnN0IGNoYXIgaW50cm9zcGVjdGlvblhNTFtdID0K
LSAgICAiPG5vZGU+IgotICAgICIgPGludGVyZmFjZSBuYW1lPSdvcmcud2Via2l0Lmd0ay5XZWJF
eHRlbnNpb25UZXN0Jz4iCi0gICAgIiAgPG1ldGhvZCBuYW1lPSdHZXRUaXRsZSc+IgotICAgICIg
ICA8YXJnIHR5cGU9J3QnIG5hbWU9J3BhZ2VJRCcgZGlyZWN0aW9uPSdpbicvPiIKLSAgICAiICAg
PGFyZyB0eXBlPSdzJyBuYW1lPSd0aXRsZScgZGlyZWN0aW9uPSdvdXQnLz4iCi0gICAgIiAgPC9t
ZXRob2Q+IgotICAgICIgIDxtZXRob2QgbmFtZT0nQWJvcnRQcm9jZXNzJz4iCi0gICAgIiAgPC9t
ZXRob2Q+IgotICAgICIgIDxtZXRob2QgbmFtZT0nUnVuSmF2YVNjcmlwdEluSXNvbGF0ZWRXb3Js
ZCc+IgotICAgICIgICA8YXJnIHR5cGU9J3QnIG5hbWU9J3BhZ2VJRCcgZGlyZWN0aW9uPSdpbicv
PiIKLSAgICAiICAgPGFyZyB0eXBlPSdzJyBuYW1lPSdzY3JpcHQnIGRpcmVjdGlvbj0naW4nLz4i
Ci0gICAgIiAgPC9tZXRob2Q+IgotICAgICIgIDxzaWduYWwgbmFtZT0nRG9jdW1lbnRMb2FkZWQn
Lz4iCi0gICAgIiAgPHNpZ25hbCBuYW1lPSdVUklDaGFuZ2VkJz4iCi0gICAgIiAgIDxhcmcgdHlw
ZT0ncycgbmFtZT0ndXJpJyBkaXJlY3Rpb249J291dCcvPiIKLSAgICAiICA8L3NpZ25hbD4iCi0g
ICAgIiA8L2ludGVyZmFjZT4iCi0gICAgIjwvbm9kZT4iOwotCi10eXBlZGVmIGVudW0gewotICAg
IERvY3VtZW50TG9hZGVkU2lnbmFsLAotICAgIFVSSUNoYW5nZWRTaWduYWwsCi19IERlbGF5ZWRT
aWduYWxUeXBlOwotCi1zdHJ1Y3QgRGVsYXllZFNpZ25hbCB7Ci0gICAgRGVsYXllZFNpZ25hbChE
ZWxheWVkU2lnbmFsVHlwZSB0eXBlKQotICAgICAgICA6IHR5cGUodHlwZSkKLSAgICB7Ci0gICAg
fQotCi0gICAgRGVsYXllZFNpZ25hbChEZWxheWVkU2lnbmFsVHlwZSB0eXBlLCBjb25zdCBjaGFy
KiB1cmkpCi0gICAgICAgIDogdHlwZSh0eXBlKQotICAgICAgICAsIHVyaSh1cmkpCi0gICAgewot
ICAgIH0KLQotICAgIERlbGF5ZWRTaWduYWxUeXBlIHR5cGU7Ci0gICAgQ1N0cmluZyB1cmk7Ci19
OwotCi1EZXF1ZTxPd25QdHI8RGVsYXllZFNpZ25hbD4+IGRlbGF5ZWRTaWduYWxzUXVldWU7Ci0K
LXN0YXRpYyB2b2lkIGVtaXREb2N1bWVudExvYWRlZChHREJ1c0Nvbm5lY3Rpb24qIGNvbm5lY3Rp
b24pCi17Ci0gICAgYm9vbCBvayA9IGdfZGJ1c19jb25uZWN0aW9uX2VtaXRfc2lnbmFsKAotICAg
ICAgICBjb25uZWN0aW9uLAotICAgICAgICAwLAotICAgICAgICAiL29yZy93ZWJraXQvZ3RrL1dl
YkV4dGVuc2lvblRlc3QiLAotICAgICAgICAib3JnLndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9uVGVz
dCIsCi0gICAgICAgICJEb2N1bWVudExvYWRlZCIsCi0gICAgICAgIDAsCi0gICAgICAgIDApOwot
ICAgIGdfYXNzZXJ0KG9rKTsKLX0KLQotc3RhdGljIHZvaWQgZG9jdW1lbnRMb2FkZWRDYWxsYmFj
ayhXZWJLaXRXZWJQYWdlKiwgV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24pCi17Ci0gICAg
Z3BvaW50ZXIgZGF0YSA9IGdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKGV4dGVuc2lvbiksICJk
YnVzLWNvbm5lY3Rpb24iKTsKLSAgICBpZiAoZGF0YSkKLSAgICAgICAgZW1pdERvY3VtZW50TG9h
ZGVkKEdfREJVU19DT05ORUNUSU9OKGRhdGEpKTsKLSAgICBlbHNlCi0gICAgICAgIGRlbGF5ZWRT
aWduYWxzUXVldWUuYXBwZW5kKGFkb3B0UHRyKG5ldyBEZWxheWVkU2lnbmFsKERvY3VtZW50TG9h
ZGVkU2lnbmFsKSkpOwotfQotCi1zdGF0aWMgdm9pZCBlbWl0VVJJQ2hhbmdlZChHREJ1c0Nvbm5l
Y3Rpb24qIGNvbm5lY3Rpb24sIGNvbnN0IGNoYXIqIHVyaSkKLXsKLSAgICBib29sIG9rID0gZ19k
YnVzX2Nvbm5lY3Rpb25fZW1pdF9zaWduYWwoCi0gICAgICAgIGNvbm5lY3Rpb24sCi0gICAgICAg
IDAsCi0gICAgICAgICIvb3JnL3dlYmtpdC9ndGsvV2ViRXh0ZW5zaW9uVGVzdCIsCi0gICAgICAg
ICJvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwKLSAgICAgICAgIlVSSUNoYW5nZWQi
LAotICAgICAgICBnX3ZhcmlhbnRfbmV3KCIocykiLCB1cmkpLAotICAgICAgICAwKTsKLSAgICBn
X2Fzc2VydChvayk7Ci19Ci0KLXN0YXRpYyB2b2lkIHVyaUNoYW5nZWRDYWxsYmFjayhXZWJLaXRX
ZWJQYWdlKiB3ZWJQYWdlLCBHUGFyYW1TcGVjKiBwc3BlYywgV2ViS2l0V2ViRXh0ZW5zaW9uKiBl
eHRlbnNpb24pCi17Ci0gICAgZ3BvaW50ZXIgZGF0YSA9IGdfb2JqZWN0X2dldF9kYXRhKEdfT0JK
RUNUKGV4dGVuc2lvbiksICJkYnVzLWNvbm5lY3Rpb24iKTsKLSAgICBpZiAoZGF0YSkKLSAgICAg
ICAgZW1pdFVSSUNoYW5nZWQoR19EQlVTX0NPTk5FQ1RJT04oZGF0YSksIHdlYmtpdF93ZWJfcGFn
ZV9nZXRfdXJpKHdlYlBhZ2UpKTsKLSAgICBlbHNlCi0gICAgICAgIGRlbGF5ZWRTaWduYWxzUXVl
dWUuYXBwZW5kKGFkb3B0UHRyKG5ldyBEZWxheWVkU2lnbmFsKFVSSUNoYW5nZWRTaWduYWwsIHdl
YmtpdF93ZWJfcGFnZV9nZXRfdXJpKHdlYlBhZ2UpKSkpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4g
c2VuZFJlcXVlc3RDYWxsYmFjayhXZWJLaXRXZWJQYWdlKiwgV2ViS2l0VVJJUmVxdWVzdCogcmVx
dWVzdCwgV2ViS2l0VVJJUmVzcG9uc2UqLCBncG9pbnRlcikKLXsKLSAgICBjb25zdCBjaGFyKiBy
ZXF1ZXN0VVJJID0gd2Via2l0X3VyaV9yZXF1ZXN0X2dldF91cmkocmVxdWVzdCk7Ci0gICAgZ19h
c3NlcnQocmVxdWVzdFVSSSk7Ci0KLSAgICBpZiAoY29uc3QgY2hhciogc3VmZml4ID0gZ19zdHJy
c3RyKHJlcXVlc3RVUkksICIvcmVtb3ZlLXRoaXMvamF2YXNjcmlwdC5qcyIpKSB7Ci0gICAgICAg
IEdPd25QdHI8Y2hhcj4gcHJlZml4KGdfc3RybmR1cChyZXF1ZXN0VVJJLCBzdHJsZW4ocmVxdWVz
dFVSSSkgLSBzdHJsZW4oc3VmZml4KSkpOwotICAgICAgICBHT3duUHRyPGNoYXI+IG5ld1VSSShn
X3N0cmR1cF9wcmludGYoIiVzL2phdmFzY3JpcHQuanMiLCBwcmVmaXguZ2V0KCkpKTsKLSAgICAg
ICAgd2Via2l0X3VyaV9yZXF1ZXN0X3NldF91cmkocmVxdWVzdCwgbmV3VVJJLmdldCgpKTsKLSAg
ICB9IGVsc2UgaWYgKGdfc3RyX2hhc19zdWZmaXgocmVxdWVzdFVSSSwgIi9hZGQtZG8tbm90LXRy
YWNrLWhlYWRlciIpKSB7Ci0gICAgICAgIFNvdXBNZXNzYWdlSGVhZGVycyogaGVhZGVycyA9IHdl
YmtpdF91cmlfcmVxdWVzdF9nZXRfaHR0cF9oZWFkZXJzKHJlcXVlc3QpOwotICAgICAgICBnX2Fz
c2VydChoZWFkZXJzKTsKLSAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKGhlYWRl
cnMsICJETlQiLCAiMSIpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfaGFzX3N1ZmZpeChyZXF1ZXN0
VVJJLCAiL2NhbmNlbC10aGlzLmpzIikpCi0gICAgICAgIHJldHVybiBUUlVFOwotCi0gICAgcmV0
dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCBwYWdlQ3JlYXRlZENhbGxiYWNrKFdlYktpdFdl
YkV4dGVuc2lvbiogZXh0ZW5zaW9uLCBXZWJLaXRXZWJQYWdlKiB3ZWJQYWdlLCBncG9pbnRlcikK
LXsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlBhZ2UsICJkb2N1bWVudC1sb2FkZWQiLCBHX0NB
TExCQUNLKGRvY3VtZW50TG9hZGVkQ2FsbGJhY2spLCBleHRlbnNpb24pOwotICAgIGdfc2lnbmFs
X2Nvbm5lY3Qod2ViUGFnZSwgIm5vdGlmeTo6dXJpIiwgR19DQUxMQkFDSyh1cmlDaGFuZ2VkQ2Fs
bGJhY2spLCBleHRlbnNpb24pOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViUGFnZSwgInNlbmQt
cmVxdWVzdCIsIEdfQ0FMTEJBQ0soc2VuZFJlcXVlc3RDYWxsYmFjayksIDApOwotfQotCi1zdGF0
aWMgSlNWYWx1ZVJlZiBlY2hvQ2FsbGJhY2soSlNDb250ZXh0UmVmIGpzQ29udGV4dCwgSlNPYmpl
Y3RSZWYsIEpTT2JqZWN0UmVmLCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJl
ZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiopCi17Ci0gICAgaWYgKGFyZ3VtZW50Q291bnQgPD0g
MCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGpzQ29udGV4dCk7Ci0KLSAg
ICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gc3RyaW5nKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdD
b3B5KGpzQ29udGV4dCwgYXJndW1lbnRzWzBdLCAwKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtl
U3RyaW5nKGpzQ29udGV4dCwgc3RyaW5nLmdldCgpKTsKLX0KLQotc3RhdGljIHZvaWQgd2luZG93
T2JqZWN0Q2xlYXJlZChXZWJLaXRTY3JpcHRXb3JsZCogd29ybGQsIFdlYktpdFdlYlBhZ2UqIHBh
Z2UsIFdlYktpdEZyYW1lKiBmcmFtZSwgZ3BvaW50ZXIpCi17Ci0gICAgSlNHbG9iYWxDb250ZXh0
UmVmIGpzQ29udGV4dCA9IHdlYmtpdF9mcmFtZV9nZXRfamF2YXNjcmlwdF9jb250ZXh0X2Zvcl9z
Y3JpcHRfd29ybGQoZnJhbWUsIHdvcmxkKTsKLSAgICBnX2Fzc2VydChqc0NvbnRleHQpOwotICAg
IEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCA9IEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChqc0Nv
bnRleHQpOwotICAgIGdfYXNzZXJ0KGdsb2JhbE9iamVjdCk7Ci0KLSAgICBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gZnVuY3Rpb25OYW1lKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiZWNobyIpKTsKLSAgICBKU09iamVjdFJlZiBmdW5jdGlvbiA9IEpTT2JqZWN0TWFrZUZ1
bmN0aW9uV2l0aENhbGxiYWNrKGpzQ29udGV4dCwgZnVuY3Rpb25OYW1lLmdldCgpLCBlY2hvQ2Fs
bGJhY2spOwotICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoanNDb250ZXh0LCBnbG9iYWxPYmplY3Qs
IGZ1bmN0aW9uTmFtZS5nZXQoKSwgZnVuY3Rpb24sIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERl
bGV0ZSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHksIDApOwotfQotCi1zdGF0aWMgV2Vi
S2l0V2ViUGFnZSogZ2V0V2ViUGFnZShXZWJLaXRXZWJFeHRlbnNpb24qIGV4dGVuc2lvbiwgdWlu
dDY0X3QgcGFnZUlELCBHREJ1c01ldGhvZEludm9jYXRpb24qIGludm9jYXRpb24pCi17Ci0gICAg
V2ViS2l0V2ViUGFnZSogcGFnZSA9IHdlYmtpdF93ZWJfZXh0ZW5zaW9uX2dldF9wYWdlKGV4dGVu
c2lvbiwgcGFnZUlEKTsKLSAgICBpZiAoIXBhZ2UpIHsKLSAgICAgICAgZ19kYnVzX21ldGhvZF9p
bnZvY2F0aW9uX3JldHVybl9lcnJvcigKLSAgICAgICAgICAgIGludm9jYXRpb24sIEdfREJVU19F
UlJPUiwgR19EQlVTX0VSUk9SX0lOVkFMSURfQVJHUywKLSAgICAgICAgICAgICJJbnZhbGlkIHBh
Z2UgSUQ6ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIHBhZ2VJRCk7Ci0gICAgICAgIHJldHVybiAwOwot
ICAgIH0KLQotICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X3dlYl9wYWdlX2dldF9pZChwYWdl
KSwgPT0sIHBhZ2VJRCk7Ci0gICAgcmV0dXJuIHBhZ2U7Ci19Ci0KLXN0YXRpYyB2b2lkIG1ldGhv
ZENhbGxDYWxsYmFjayhHREJ1c0Nvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIGNvbnN0IGNoYXIqIHNl
bmRlciwgY29uc3QgY2hhciogb2JqZWN0UGF0aCwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwg
Y29uc3QgY2hhciogbWV0aG9kTmFtZSwgR1ZhcmlhbnQqIHBhcmFtZXRlcnMsIEdEQnVzTWV0aG9k
SW52b2NhdGlvbiogaW52b2NhdGlvbiwgZ3BvaW50ZXIgdXNlckRhdGEpCi17Ci0gICAgaWYgKGdf
c3RyY21wMChpbnRlcmZhY2VOYW1lLCAib3JnLndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9uVGVzdCIp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAiR2V0
VGl0bGUiKSkgewotICAgICAgICB1aW50NjRfdCBwYWdlSUQ7Ci0gICAgICAgIGdfdmFyaWFudF9n
ZXQocGFyYW1ldGVycywgIih0KSIsICZwYWdlSUQpOwotICAgICAgICBXZWJLaXRXZWJQYWdlKiBw
YWdlID0gZ2V0V2ViUGFnZShXRUJLSVRfV0VCX0VYVEVOU0lPTih1c2VyRGF0YSksIHBhZ2VJRCwg
aW52b2NhdGlvbik7Ci0gICAgICAgIGlmICghcGFnZSkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3BhZ2VfZ2V0
X2RvbV9kb2N1bWVudChwYWdlKTsKLSAgICAgICAgR093blB0cjxjaGFyPiB0aXRsZSh3ZWJraXRf
ZG9tX2RvY3VtZW50X2dldF90aXRsZShkb2N1bWVudCkpOwotICAgICAgICBnX2RidXNfbWV0aG9k
X2ludm9jYXRpb25fcmV0dXJuX3ZhbHVlKGludm9jYXRpb24sIGdfdmFyaWFudF9uZXcoIihzKSIs
IHRpdGxlLmdldCgpKSk7Ci0gICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJS
dW5KYXZhU2NyaXB0SW5Jc29sYXRlZFdvcmxkIikpIHsKLSAgICAgICAgdWludDY0X3QgcGFnZUlE
OwotICAgICAgICBjb25zdCBjaGFyKiBzY3JpcHQ7Ci0gICAgICAgIGdfdmFyaWFudF9nZXQocGFy
YW1ldGVycywgIih0JnMpIiwgJnBhZ2VJRCwgJnNjcmlwdCk7Ci0gICAgICAgIFdlYktpdFdlYlBh
Z2UqIHBhZ2UgPSBnZXRXZWJQYWdlKFdFQktJVF9XRUJfRVhURU5TSU9OKHVzZXJEYXRhKSwgcGFn
ZUlELCBpbnZvY2F0aW9uKTsKLSAgICAgICAgaWYgKCFwYWdlKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIEdSZWZQdHI8V2ViS2l0U2NyaXB0V29ybGQ+IHdvcmxkID0gYWRvcHRHUmVm
KHdlYmtpdF9zY3JpcHRfd29ybGRfbmV3KCkpOwotICAgICAgICBnX2Fzc2VydCh3ZWJraXRfc2Ny
aXB0X3dvcmxkX2dldF9kZWZhdWx0KCkgIT0gd29ybGQuZ2V0KCkpOwotICAgICAgICBXZWJLaXRG
cmFtZSogZnJhbWUgPSB3ZWJraXRfd2ViX3BhZ2VfZ2V0X21haW5fZnJhbWUocGFnZSk7Ci0gICAg
ICAgIEpTR2xvYmFsQ29udGV4dFJlZiBqc0NvbnRleHQgPSB3ZWJraXRfZnJhbWVfZ2V0X2phdmFz
Y3JpcHRfY29udGV4dF9mb3Jfc2NyaXB0X3dvcmxkKGZyYW1lLCB3b3JsZC5nZXQoKSk7Ci0gICAg
ICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBqc1NjcmlwdChBZG9wdCwgSlNTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoc2NyaXB0KSk7Ci0gICAgICAgIEpTRXZhbHVhdGVTY3JpcHQoanND
b250ZXh0LCBqc1NjcmlwdC5nZXQoKSwgMCwgMCwgMCwgMCk7Ci0gICAgICAgIGdfZGJ1c19tZXRo
b2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUoaW52b2NhdGlvbiwgMCk7Ci0gICAgfSBlbHNlIGlm
ICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJBYm9ydFByb2Nlc3MiKSkgewotICAgICAgICBhYm9y
dCgpOwotICAgIH0KLX0KLQotc3RhdGljIGNvbnN0IEdEQnVzSW50ZXJmYWNlVlRhYmxlIGludGVy
ZmFjZVZpcnR1YWxUYWJsZSA9IHsKLSAgICBtZXRob2RDYWxsQ2FsbGJhY2ssIDAsIDAsIHsgMCwg
fQotfTsKLQotc3RhdGljIHZvaWQgYnVzQWNxdWlyZWRDYWxsYmFjayhHREJ1c0Nvbm5lY3Rpb24q
IGNvbm5lY3Rpb24sIGNvbnN0IGNoYXIqIG5hbWUsIGdwb2ludGVyIHVzZXJEYXRhKQotewotICAg
IHN0YXRpYyBHREJ1c05vZGVJbmZvICppbnRyb3NwZWN0aW9uRGF0YSA9IDA7Ci0gICAgaWYgKCFp
bnRyb3NwZWN0aW9uRGF0YSkKLSAgICAgICAgaW50cm9zcGVjdGlvbkRhdGEgPSBnX2RidXNfbm9k
ZV9pbmZvX25ld19mb3JfeG1sKGludHJvc3BlY3Rpb25YTUwsIDApOwotCi0gICAgR093blB0cjxH
RXJyb3I+IGVycm9yOwotICAgIHVuc2lnbmVkIHJlZ2lzdHJhdGlvbklEID0gZ19kYnVzX2Nvbm5l
Y3Rpb25fcmVnaXN0ZXJfb2JqZWN0KAotICAgICAgICBjb25uZWN0aW9uLAotICAgICAgICAiL29y
Zy93ZWJraXQvZ3RrL1dlYkV4dGVuc2lvblRlc3QiLAotICAgICAgICBpbnRyb3NwZWN0aW9uRGF0
YS0+aW50ZXJmYWNlc1swXSwKLSAgICAgICAgJmludGVyZmFjZVZpcnR1YWxUYWJsZSwKLSAgICAg
ICAgZ19vYmplY3RfcmVmKHVzZXJEYXRhKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8R0Rlc3Ryb3lO
b3RpZnk+KGdfb2JqZWN0X3VucmVmKSwKLSAgICAgICAgJmVycm9yLm91dFB0cigpKTsKLSAgICBp
ZiAoIXJlZ2lzdHJhdGlvbklEKQotICAgICAgICBnX3dhcm5pbmcoIkZhaWxlZCB0byByZWdpc3Rl
ciBvYmplY3Q6ICVzXG4iLCBlcnJvci0+bWVzc2FnZSk7Ci0KLSAgICBnX29iamVjdF9zZXRfZGF0
YShHX09CSkVDVCh1c2VyRGF0YSksICJkYnVzLWNvbm5lY3Rpb24iLCBjb25uZWN0aW9uKTsKLSAg
ICB3aGlsZSAoZGVsYXllZFNpZ25hbHNRdWV1ZS5zaXplKCkpIHsKLSAgICAgICAgT3duUHRyPERl
bGF5ZWRTaWduYWw+IGRlbGF5ZWRTaWduYWwgPSBkZWxheWVkU2lnbmFsc1F1ZXVlLnRha2VGaXJz
dCgpOwotICAgICAgICBzd2l0Y2ggKGRlbGF5ZWRTaWduYWwtPnR5cGUpIHsKLSAgICAgICAgY2Fz
ZSBEb2N1bWVudExvYWRlZFNpZ25hbDoKLSAgICAgICAgICAgIGVtaXREb2N1bWVudExvYWRlZChj
b25uZWN0aW9uKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFVSSUNoYW5nZWRT
aWduYWw6Ci0gICAgICAgICAgICBlbWl0VVJJQ2hhbmdlZChjb25uZWN0aW9uLCBkZWxheWVkU2ln
bmFsLT51cmkuZGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQot
fQotCi1leHRlcm4gIkMiIHZvaWQgd2Via2l0X3dlYl9leHRlbnNpb25faW5pdGlhbGl6ZShXZWJL
aXRXZWJFeHRlbnNpb24qIGV4dGVuc2lvbikKLXsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGV4dGVu
c2lvbiwgInBhZ2UtY3JlYXRlZCIsIEdfQ0FMTEJBQ0socGFnZUNyZWF0ZWRDYWxsYmFjayksIGV4
dGVuc2lvbik7Ci0gICAgZ19zaWduYWxfY29ubmVjdCh3ZWJraXRfc2NyaXB0X3dvcmxkX2dldF9k
ZWZhdWx0KCksICJ3aW5kb3ctb2JqZWN0LWNsZWFyZWQiLCBHX0NBTExCQUNLKHdpbmRvd09iamVj
dENsZWFyZWQpLCAwKTsKLQotICAgIGdfYnVzX293bl9uYW1lKAotICAgICAgICBHX0JVU19UWVBF
X1NFU1NJT04sCi0gICAgICAgICJvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwKLSAg
ICAgICAgR19CVVNfTkFNRV9PV05FUl9GTEFHU19OT05FLAotICAgICAgICBidXNBY3F1aXJlZENh
bGxiYWNrLAotICAgICAgICAwLCAwLAotICAgICAgICBnX29iamVjdF9yZWYoZXh0ZW5zaW9uKSwK
LSAgICAgICAgc3RhdGljX2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGdfb2JqZWN0X3VucmVmKSk7Ci19
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJL
aXRUZXN0QnVzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dl
YktpdFRlc3RCdXMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzJkM2Y2Li4w
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYktp
dFRlc3RCdXMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IldlYktpdFRlc3RCdXMuaCIKLQotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotV2ViS2l0VGVzdEJ1czo6V2ViS2l0VGVz
dEJ1cygpCi0gICAgOiBtX3BpZCgtMSkKLXsKLX0KLQotYm9vbCBXZWJLaXRUZXN0QnVzOjpydW4o
KQotewotICAgIC8vIEZJWE1FOiBVc2UgR1Rlc3REQnVzIHdoZW4gd2UgYnVtcCBnbGliIHRvIDIu
MzQuCi0gICAgR093blB0cjxjaGFyPiBkYnVzTGF1bmNoKGdfZmluZF9wcm9ncmFtX2luX3BhdGgo
ImRidXMtbGF1bmNoIikpOwotICAgIGlmICghZGJ1c0xhdW5jaCkgewotICAgICAgICBnX3dhcm5p
bmcoIkVycm9yIHN0YXJ0aW5nIERCVVMgZGFlbW9uOiBkYnVzLWxhdW5jaCBub3QgZm91bmQgaW4g
cGF0aCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgR093blB0cjxjaGFy
PiBvdXRwdXQ7Ci0gICAgR093blB0cjxHRXJyb3I+IGVycm9yOwotICAgIGlmICghZ19zcGF3bl9j
b21tYW5kX2xpbmVfc3luYyhkYnVzTGF1bmNoLmdldCgpLCAmb3V0cHV0Lm91dFB0cigpLCAwLCAw
LCAmZXJyb3Iub3V0UHRyKCkpKSB7Ci0gICAgICAgIGdfd2FybmluZygiRXJyb3Igc3RhcnRpbmcg
REJVUyBkYWVtb246ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgU3RyaW5nIG91dHB1dFN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgob3V0
cHV0LmdldCgpKTsKLSAgICBWZWN0b3I8U3RyaW5nPiBsaW5lczsKLSAgICBvdXRwdXRTdHJpbmcu
c3BsaXQoVUNoYXIoJ1xuJyksIC8qIGFsbG93RW1wdHlFbnRyaWVzICovIGZhbHNlLCBsaW5lcyk7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaW5lcy5zaXplKCk7ICsraSkgewotICAgICAg
ICBjaGFyKioga2V5VmFsdWUgPSBnX3N0cnNwbGl0KGxpbmVzW2ldLnV0ZjgoKS5kYXRhKCksICI9
IiwgMik7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHVpbnQoZ19zdHJ2X2xlbmd0aChrZXlWYWx1ZSks
ID09LCAyKTsKLSAgICAgICAgaWYgKCFnX3N0cmNtcDAoa2V5VmFsdWVbMF0sICJEQlVTX1NFU1NJ
T05fQlVTX0FERFJFU1MiKSkgewotICAgICAgICAgICAgbV9hZGRyZXNzID0ga2V5VmFsdWVbMV07
Ci0gICAgICAgICAgICBnX3NldGVudigiREJVU19TRVNTSU9OX0JVU19BRERSRVNTIiwga2V5VmFs
dWVbMV0sIFRSVUUpOwotICAgICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAoa2V5VmFsdWVbMF0s
ICJEQlVTX1NFU1NJT05fQlVTX1BJRCIpKQotICAgICAgICAgICAgbV9waWQgPSBnX2FzY2lpX3N0
cnRvbGwoa2V5VmFsdWVbMV0sIDAsIDEwKTsKLSAgICAgICAgZ19zdHJmcmVldihrZXlWYWx1ZSk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIG1fcGlkID4gMDsKLX0KLQotV2ViS2l0VGVzdEJ1czo6fldl
YktpdFRlc3RCdXMoKQotewotICAgIGdfdW5zZXRlbnYoIkRCVVNfU0VTU0lPTl9CVVNfQUREUkVT
UyIpOwotCi0gICAgaWYgKG1fcGlkICE9IC0xKQotICAgICAgICBraWxsKG1fcGlkLCBTSUdURVJN
KTsKLX0KLQotR0RCdXNDb25uZWN0aW9uKiBXZWJLaXRUZXN0QnVzOjpnZXRPckNyZWF0ZUNvbm5l
Y3Rpb24oKQotewotICAgIGlmIChtX2Nvbm5lY3Rpb24pCi0gICAgICAgIHJldHVybiBtX2Nvbm5l
Y3Rpb24uZ2V0KCk7Ci0KLSAgICBnX2Fzc2VydCghbV9hZGRyZXNzLmlzTnVsbCgpKTsKLSAgICBt
X2Nvbm5lY3Rpb24gPSBhZG9wdEdSZWYoZ19kYnVzX2Nvbm5lY3Rpb25fbmV3X2Zvcl9hZGRyZXNz
X3N5bmMobV9hZGRyZXNzLmRhdGEoKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8R0RCdXNDb25uZWN0
aW9uRmxhZ3M+KEdfREJVU19DT05ORUNUSU9OX0ZMQUdTX0FVVEhFTlRJQ0FUSU9OX0NMSUVOVCB8
IEdfREJVU19DT05ORUNUSU9OX0ZMQUdTX01FU1NBR0VfQlVTX0NPTk5FQ1RJT04pLAotICAgICAg
ICAwLCAwLCAwKSk7Ci0gICAgcmV0dXJuIG1fY29ubmVjdGlvbi5nZXQoKTsKLX0KLQotc3RhdGlj
IHZvaWQgb25OYW1lQXBwZWFyZWQoR0RCdXNDb25uZWN0aW9uKiwgY29uc3QgY2hhciosIGNvbnN0
IGNoYXIqLCBncG9pbnRlciB1c2VyRGF0YSkKLXsKLSAgICBnX21haW5fbG9vcF9xdWl0KHN0YXRp
Y19jYXN0PEdNYWluTG9vcCo+KHVzZXJEYXRhKSk7Ci19Ci0KLUdEQnVzUHJveHkqIFdlYktpdFRl
c3RCdXM6OmNyZWF0ZVByb3h5KGNvbnN0IGNoYXIqIHNlcnZpY2VOYW1lLCBjb25zdCBjaGFyKiBv
YmplY3RQYXRoLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBHTWFpbkxvb3AqIG1haW5Mb29w
KQotewotICAgIHVuc2lnbmVkIHdhdGNoZXJJRCA9IGdfYnVzX3dhdGNoX25hbWVfb25fY29ubmVj
dGlvbihnZXRPckNyZWF0ZUNvbm5lY3Rpb24oKSwgc2VydmljZU5hbWUsIEdfQlVTX05BTUVfV0FU
Q0hFUl9GTEFHU19OT05FLCBvbk5hbWVBcHBlYXJlZCwgMCwgbWFpbkxvb3AsIDApOwotICAgIGdf
bWFpbl9sb29wX3J1bihtYWluTG9vcCk7Ci0gICAgZ19idXNfdW53YXRjaF9uYW1lKHdhdGNoZXJJ
RCk7Ci0KLSAgICBHREJ1c1Byb3h5KiBwcm94eSA9IGdfZGJ1c19wcm94eV9uZXdfc3luYygKLSAg
ICAgICAgY29ubmVjdGlvbigpLAotICAgICAgICBHX0RCVVNfUFJPWFlfRkxBR1NfRE9fTk9UX0FV
VE9fU1RBUlQsCi0gICAgICAgIDAsIC8vIEdEQnVzSW50ZXJmYWNlSW5mbwotICAgICAgICBzZXJ2
aWNlTmFtZSwKLSAgICAgICAgb2JqZWN0UGF0aCwKLSAgICAgICAgaW50ZXJmYWNlTmFtZSwKLSAg
ICAgICAgMCwgLy8gR0NhbmNlbGxhYmxlCi0gICAgICAgIDApOwotICAgIGdfYXNzZXJ0KHByb3h5
KTsKLSAgICByZXR1cm4gcHJveHk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJLaXRUZXN0QnVzLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJLaXRUZXN0QnVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGI5Zjg1NmIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvV2ViS2l0VGVzdEJ1cy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFdlYktp
dFRlc3RCdXNfaAotI2RlZmluZSBXZWJLaXRUZXN0QnVzX2gKLQotI2luY2x1ZGUgPGdpby9naW8u
aD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgotCi1jbGFzcyBXZWJLaXRUZXN0QnVzIHsKLXB1YmxpYzoKLSAgICBXZWJLaXRU
ZXN0QnVzKCk7Ci0gICAgdmlydHVhbCB+V2ViS2l0VGVzdEJ1cygpOwotCi0gICAgYm9vbCBydW4o
KTsKLSAgICBHREJ1c1Byb3h5KiBjcmVhdGVQcm94eShjb25zdCBjaGFyKiBzZXJ2aWNlTmFtZSwg
Y29uc3QgY2hhciogb2JqZWN0UGF0aCwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgR01haW5M
b29wKik7Ci0gICAgR0RCdXNDb25uZWN0aW9uKiBjb25uZWN0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9jb25uZWN0aW9uLmdldCgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgR0RCdXNDb25uZWN0aW9uKiBn
ZXRPckNyZWF0ZUNvbm5lY3Rpb24oKTsKLQotICAgIHBpZF90IG1fcGlkOwotICAgIENTdHJpbmcg
bV9hZGRyZXNzOwotICAgIEdSZWZQdHI8R0RCdXNDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247Ci19
OwotCi0jZW5kaWYgLy8gV2ViS2l0VGVzdEJ1c19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJLaXRUZXN0U2VydmVyLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYktpdFRlc3RTZXJ2ZXIuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGI0YTlhLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYktpdFRlc3RTZXJ2ZXIuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2Fs
aWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5o
IgotCi0jaW5jbHVkZSAiVGVzdE1haW4uaCIKLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRy
Lmg+Ci0KLVdlYktpdFRlc3RTZXJ2ZXI6OldlYktpdFRlc3RTZXJ2ZXIoU2VydmVyVHlwZSB0eXBl
KQotewotICAgIEdPd25QdHI8Y2hhcj4gc3NsQ2VydGlmaWNhdGVGaWxlOwotICAgIEdPd25QdHI8
Y2hhcj4gc3NsS2V5RmlsZTsKLSAgICBpZiAodHlwZSA9PSBTZXJ2ZXJIVFRQUykgewotICAgICAg
ICBDU3RyaW5nIHJlc291cmNlc0RpciA9IFRlc3Q6OmdldFJlc291cmNlc0RpcigpOwotICAgICAg
ICBzc2xDZXJ0aWZpY2F0ZUZpbGUuc2V0KGdfYnVpbGRfZmlsZW5hbWUocmVzb3VyY2VzRGlyLmRh
dGEoKSwgInRlc3QtY2VydC5wZW0iLCBOVUxMKSk7Ci0gICAgICAgIHNzbEtleUZpbGUuc2V0KGdf
YnVpbGRfZmlsZW5hbWUocmVzb3VyY2VzRGlyLmRhdGEoKSwgInRlc3Qta2V5LnBlbSIsIE5VTEwp
KTsKLSAgICB9Ci0KLSAgICBHUmVmUHRyPFNvdXBBZGRyZXNzPiBhZGRyZXNzID0gYWRvcHRHUmVm
KHNvdXBfYWRkcmVzc19uZXcoIjEyNy4wLjAuMSIsIFNPVVBfQUREUkVTU19BTllfUE9SVCkpOwot
ICAgIHNvdXBfYWRkcmVzc19yZXNvbHZlX3N5bmMoYWRkcmVzcy5nZXQoKSwgMCk7Ci0KLSAgICBt
X3NvdXBTZXJ2ZXIgPSBhZG9wdEdSZWYoc291cF9zZXJ2ZXJfbmV3KFNPVVBfU0VSVkVSX0lOVEVS
RkFDRSwgYWRkcmVzcy5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFNPVVBfU0VSVkVSX1NTTF9DRVJUX0ZJTEUsIHNzbENlcnRpZmljYXRlRmlsZS5n
ZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPVVBf
U0VSVkVSX1NTTF9LRVlfRklMRSwgc3NsS2V5RmlsZS5nZXQoKSwgTlVMTCkpOwotICAgIG1fYmFz
ZVVSSSA9IHR5cGUgPT0gU2VydmVySFRUUFMgPyBzb3VwX3VyaV9uZXcoImh0dHBzOi8vMTI3LjAu
MC4xLyIpIDogc291cF91cmlfbmV3KCJodHRwOi8vMTI3LjAuMC4xLyIpOwotICAgIHNvdXBfdXJp
X3NldF9wb3J0KG1fYmFzZVVSSSwgc291cF9zZXJ2ZXJfZ2V0X3BvcnQobV9zb3VwU2VydmVyLmdl
dCgpKSk7Ci19Ci0KLVdlYktpdFRlc3RTZXJ2ZXI6On5XZWJLaXRUZXN0U2VydmVyKCkKLXsKLSAg
ICBzb3VwX3VyaV9mcmVlKG1fYmFzZVVSSSk7Ci19Ci0KLXZvaWQgV2ViS2l0VGVzdFNlcnZlcjo6
cnVuKFNvdXBTZXJ2ZXJDYWxsYmFjayBzZXJ2ZXJDYWxsYmFjaykKLXsKLSAgICBzb3VwX3NlcnZl
cl9ydW5fYXN5bmMobV9zb3VwU2VydmVyLmdldCgpKTsKLSAgICBzb3VwX3NlcnZlcl9hZGRfaGFu
ZGxlcihtX3NvdXBTZXJ2ZXIuZ2V0KCksIDAsIHNlcnZlckNhbGxiYWNrLCAwLCAwKTsKLX0KLQot
Q1N0cmluZyBXZWJLaXRUZXN0U2VydmVyOjpnZXRVUklGb3JQYXRoKGNvbnN0IGNoYXIqIHBhdGgp
Ci17Ci0gICAgU291cFVSSSogdXJpID0gc291cF91cmlfbmV3X3dpdGhfYmFzZShtX2Jhc2VVUkks
IHBhdGgpOwotICAgIEdPd25QdHI8Z2NoYXI+IHVyaVN0cmluZyhzb3VwX3VyaV90b19zdHJpbmco
dXJpLCBGQUxTRSkpOwotICAgIHNvdXBfdXJpX2ZyZWUodXJpKTsKLSAgICByZXR1cm4gdXJpU3Ry
aW5nLmdldCgpOwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9XZWJLaXRUZXN0U2VydmVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9XZWJLaXRUZXN0U2VydmVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGQ0NjI2ZjYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvV2ViS2l0VGVzdFNlcnZlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFdlYktp
dFRlc3RTZXJ2ZXJfaAotI2RlZmluZSBXZWJLaXRUZXN0U2VydmVyX2gKLQotI2luY2x1ZGUgPGxp
YnNvdXAvc291cC5oPgotI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgotI2luY2x1ZGUgPHd0
Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLWNs
YXNzIFdlYktpdFRlc3RTZXJ2ZXIgewotcHVibGljOgotCi0gICAgZW51bSBTZXJ2ZXJUeXBlIHsK
LSAgICAgICAgU2VydmVySFRUUCwKLSAgICAgICAgU2VydmVySFRUUFMKLSAgICB9OwotCi0gICAg
V2ViS2l0VGVzdFNlcnZlcihTZXJ2ZXJUeXBlIHR5cGUgPSBTZXJ2ZXJIVFRQKTsKLSAgICB2aXJ0
dWFsIH5XZWJLaXRUZXN0U2VydmVyKCk7Ci0KLSAgICBTb3VwVVJJKiBiYXNlVVJJKCkgeyByZXR1
cm4gbV9iYXNlVVJJOyB9Ci0KLSAgICBDU3RyaW5nIGdldFVSSUZvclBhdGgoY29uc3QgY2hhciog
cGF0aCk7Ci0gICAgdm9pZCBydW4oU291cFNlcnZlckNhbGxiYWNrKTsKLQotcHJpdmF0ZToKLSAg
ICBHUmVmUHRyPFNvdXBTZXJ2ZXI+IG1fc291cFNlcnZlcjsKLSAgICBTb3VwVVJJKiBtX2Jhc2VV
Ukk7Ci19OwotCi0jZW5kaWYgLy8gV2ViS2l0VGVzdFNlcnZlcl9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJQcm9jZXNzVGVzdC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJQcm9jZXNzVGVzdC5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5MWE2ZTcuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViUHJvY2Vzc1Rlc3QuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
SWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NUZXN0
LmgiCi0KLSNpbmNsdWRlIDxnaW8vZ2lvLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0
ci5oPgotCi10eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBzdGQ6OmZ1bmN0aW9uPFBhc3NPd25QdHI8
V2ViUHJvY2Vzc1Rlc3Q+ICgpPj4gVGVzdHNNYXA7Ci1zdGF0aWMgVGVzdHNNYXAmIHRlc3RzTWFw
KCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFRlc3RzTWFwLCBzX3Rlc3RzTWFwLCAoKSk7
Ci0gICAgcmV0dXJuIHNfdGVzdHNNYXA7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Rlc3Q6OmFkZChj
b25zdCBTdHJpbmcmIHRlc3ROYW1lLCBzdGQ6OmZ1bmN0aW9uPFBhc3NPd25QdHI8V2ViUHJvY2Vz
c1Rlc3Q+ICgpPiBjbG9zdXJlKQotewotICAgIHRlc3RzTWFwKCkuYWRkKHRlc3ROYW1lLCBzdGQ6
OmZvcndhcmQ8c3RkOjpmdW5jdGlvbjxQYXNzT3duUHRyPFdlYlByb2Nlc3NUZXN0PiAoKT4+KGNs
b3N1cmUpKTsKLX0KLQotUGFzc093blB0cjxXZWJQcm9jZXNzVGVzdD4gV2ViUHJvY2Vzc1Rlc3Q6
OmNyZWF0ZShjb25zdCBTdHJpbmcmIHRlc3ROYW1lKQotewotICAgIGdfYXNzZXJ0KHRlc3RzTWFw
KCkuY29udGFpbnModGVzdE5hbWUpKTsKLSAgICByZXR1cm4gdGVzdHNNYXAoKS5nZXQodGVzdE5h
bWUpKCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyIGludHJvc3BlY3Rpb25YTUxbXSA9Ci0gICAg
Ijxub2RlPiIKLSAgICAiIDxpbnRlcmZhY2UgbmFtZT0nb3JnLndlYmtpdC5ndGsuV2ViUHJvY2Vz
c1Rlc3QnPiIKLSAgICAiICA8bWV0aG9kIG5hbWU9J1J1blRlc3QnPiIKLSAgICAiICAgPGFyZyB0
eXBlPSdzJyBuYW1lPSdwYXRoJyBkaXJlY3Rpb249J2luJy8+IgotICAgICIgICA8YXJnIHR5cGU9
J2F7c3Z9JyBuYW1lPSdhcmdzJyBkaXJlY3Rpb249J2luJy8+IgotICAgICIgICA8YXJnIHR5cGU9
J2InIG5hbWU9J3Jlc3VsdCcgZGlyZWN0aW9uPSdvdXQnLz4iCi0gICAgIiAgPC9tZXRob2Q+Igot
ICAgICIgPC9pbnRlcmZhY2U+IgotICAgICI8L25vZGU+IjsKLQotc3RhdGljIHZvaWQgbWV0aG9k
Q2FsbENhbGxiYWNrKEdEQnVzQ29ubmVjdGlvbiogY29ubmVjdGlvbiwgY29uc3QgY2hhciogc2Vu
ZGVyLCBjb25zdCBjaGFyKiBvYmplY3RQYXRoLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBj
b25zdCBjaGFyKiBtZXRob2ROYW1lLCBHVmFyaWFudCogcGFyYW1ldGVycywgR0RCdXNNZXRob2RJ
bnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBncG9pbnRlciB1c2VyRGF0YSkKLXsKLSAgICBpZiAoZ19z
dHJjbXAwKGludGVyZmFjZU5hbWUsICJvcmcud2Via2l0Lmd0ay5XZWJQcm9jZXNzVGVzdCIpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAiUnVuVGVz
dCIpKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIHRlc3RQYXRoOwotICAgICAgICBHVmFyaWFudCog
YXJnczsKLSAgICAgICAgZ192YXJpYW50X2dldChwYXJhbWV0ZXJzLCAiKCZzQGF7c3Z9KSIsICZ0
ZXN0UGF0aCwgJmFyZ3MpOwotICAgICAgICBPd25QdHI8V2ViUHJvY2Vzc1Rlc3Q+IHRlc3QgPSBX
ZWJQcm9jZXNzVGVzdDo6Y3JlYXRlKFN0cmluZzo6ZnJvbVVURjgodGVzdFBhdGgpKTsKLSAgICAg
ICAgYm9vbCByZXN1bHQgPSB0ZXN0LT5ydW5UZXN0KGdfc3RycnN0cih0ZXN0UGF0aCwgIi8iKSAr
IDEsIFdFQktJVF9XRUJfRVhURU5TSU9OKHVzZXJEYXRhKSwgYXJncyk7Ci0gICAgICAgIGdfdmFy
aWFudF91bnJlZihhcmdzKTsKLQotICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9jYXRpb25fcmV0
dXJuX3ZhbHVlKGludm9jYXRpb24sIGdfdmFyaWFudF9uZXcoIihiKSIsIHJlc3VsdCkpOwotICAg
IH0gZWxzZQotICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotfQotCi1zdGF0aWMgY29u
c3QgR0RCdXNJbnRlcmZhY2VWVGFibGUgaW50ZXJmYWNlVmlydHVhbFRhYmxlID0gewotICAgIG1l
dGhvZENhbGxDYWxsYmFjaywgMCwgMCwgeyAwLCB9Ci19OwotCi1zdGF0aWMgdm9pZCBidXNBY3F1
aXJlZENhbGxiYWNrKEdEQnVzQ29ubmVjdGlvbiogY29ubmVjdGlvbiwgY29uc3QgY2hhciogbmFt
ZSwgZ3BvaW50ZXIgdXNlckRhdGEpCi17Ci0gICAgc3RhdGljIEdEQnVzTm9kZUluZm8gKmludHJv
c3BlY3Rpb25EYXRhID0gMDsKLSAgICBpZiAoIWludHJvc3BlY3Rpb25EYXRhKQotICAgICAgICBp
bnRyb3NwZWN0aW9uRGF0YSA9IGdfZGJ1c19ub2RlX2luZm9fbmV3X2Zvcl94bWwoaW50cm9zcGVj
dGlvblhNTCwgMCk7Ci0KLSAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgdW5zaWduZWQg
cmVnaXN0cmF0aW9uSUQgPSBnX2RidXNfY29ubmVjdGlvbl9yZWdpc3Rlcl9vYmplY3QoCi0gICAg
ICAgIGNvbm5lY3Rpb24sCi0gICAgICAgICIvb3JnL3dlYmtpdC9ndGsvV2ViUHJvY2Vzc1Rlc3Qi
LAotICAgICAgICBpbnRyb3NwZWN0aW9uRGF0YS0+aW50ZXJmYWNlc1swXSwKLSAgICAgICAgJmlu
dGVyZmFjZVZpcnR1YWxUYWJsZSwKLSAgICAgICAgZ19vYmplY3RfcmVmKHVzZXJEYXRhKSwKLSAg
ICAgICAgc3RhdGljX2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGdfb2JqZWN0X3VucmVmKSwKLSAgICAg
ICAgJmVycm9yLm91dFB0cigpKTsKLSAgICBpZiAoIXJlZ2lzdHJhdGlvbklEKQotICAgICAgICBn
X3dhcm5pbmcoIkZhaWxlZCB0byByZWdpc3RlciBvYmplY3Q6ICVzXG4iLCBlcnJvci0+bWVzc2Fn
ZSk7Ci19Ci0KLWV4dGVybiAiQyIgdm9pZCB3ZWJraXRfd2ViX2V4dGVuc2lvbl9pbml0aWFsaXpl
KFdlYktpdFdlYkV4dGVuc2lvbiogZXh0ZW5zaW9uKQotewotICAgIGdfYnVzX293bl9uYW1lKAot
ICAgICAgICBHX0JVU19UWVBFX1NFU1NJT04sCi0gICAgICAgICJvcmcud2Via2l0Lmd0ay5XZWJQ
cm9jZXNzVGVzdCIsCi0gICAgICAgIEdfQlVTX05BTUVfT1dORVJfRkxBR1NfTk9ORSwKLSAgICAg
ICAgYnVzQWNxdWlyZWRDYWxsYmFjaywKLSAgICAgICAgMCwgMCwKLSAgICAgICAgZ19vYmplY3Rf
cmVmKGV4dGVuc2lvbiksCi0gICAgICAgIHN0YXRpY19jYXN0PEdEZXN0cm95Tm90aWZ5PihnX29i
amVjdF91bnJlZikpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvV2ViUHJvY2Vzc1Rlc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL1dlYlByb2Nlc3NUZXN0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGUzZWVkZDAuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvV2ViUHJvY2Vzc1Rlc3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPHdlYmtpdDIv
d2Via2l0LXdlYi1leHRlbnNpb24uaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1
ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KLQotY2xhc3MgV2ViUHJvY2Vzc1Rlc3QgewotcHVibGljOgotICAgIHZpcnR1YWwg
fldlYlByb2Nlc3NUZXN0KCkgeyB9Ci0gICAgdmlydHVhbCBib29sIHJ1blRlc3QoY29uc3QgY2hh
ciogdGVzdE5hbWUsIFdlYktpdFdlYkV4dGVuc2lvbiosIEdWYXJpYW50KiBhcmdzKSA9IDA7Ci0K
LSAgICBzdGF0aWMgdm9pZCBhZGQoY29uc3QgU3RyaW5nJiB0ZXN0TmFtZSwgc3RkOjpmdW5jdGlv
bjxQYXNzT3duUHRyPFdlYlByb2Nlc3NUZXN0PiAoKT4pOwotICAgIHN0YXRpYyBQYXNzT3duUHRy
PFdlYlByb2Nlc3NUZXN0PiBjcmVhdGUoY29uc3QgU3RyaW5nJiB0ZXN0TmFtZSk7Ci19OwotCi0j
ZGVmaW5lIFJFR0lTVEVSX1RFU1QoQ2xhc3NOYW1lLCBUZXN0TmFtZSkgXAotICAgIFdlYlByb2Nl
c3NUZXN0OjphZGQoU3RyaW5nOjpmcm9tVVRGOChUZXN0TmFtZSksIENsYXNzTmFtZTo6Y3JlYXRl
KQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9X
ZWJQcm9jZXNzVGVzdFJ1bm5lci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9XZWJQcm9jZXNzVGVzdFJ1bm5lci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDRhM2NkOTYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvV2ViUHJvY2Vzc1Rlc3RSdW5uZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MTE1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgSWdhbGlhIFMuTC4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NUZXN0UnVubmVyLmgiCi0KLSNpbmNs
dWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0KLVdlYlByb2Nlc3NUZXN0UnVubmVyOjpXZWJQ
cm9jZXNzVGVzdFJ1bm5lcigpCi0gICAgOiBtX21haW5Mb29wKGdfbWFpbl9sb29wX25ldygwLCBU
UlVFKSkKLSAgICAsIG1fYnVzKGFkb3B0R1JlZihnX3Rlc3RfZGJ1c19uZXcoR19URVNUX0RCVVNf
Tk9ORSkpKQotewotICAgIC8vIFNhdmUgdGhlIERJU1BMQVkgZW52IHZhciB0byByZXN0b3JlIGl0
IGFmdGVyIGNhbGxpbmcgZ190ZXN0X2RidXNfdXAoKSB0aGF0IHVuc2V0cyBpdC4KLSAgICAvLyBT
ZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNTYyMS4KLSAgICBj
b25zdCBjaGFyKiBkaXNwbGF5ID0gZ19nZXRlbnYoIkRJU1BMQVkiKTsKLSAgICBnX3Rlc3RfZGJ1
c191cChtX2J1cy5nZXQoKSk7Ci0gICAgZ19zZXRlbnYoIkRJU1BMQVkiLCBkaXNwbGF5LCBGQUxT
RSk7Ci0gICAgbV9jb25uZWN0aW9uID0gYWRvcHRHUmVmKGdfYnVzX2dldF9zeW5jKEdfQlVTX1RZ
UEVfU0VTU0lPTiwgMCwgMCkpOwotfQotCi1XZWJQcm9jZXNzVGVzdFJ1bm5lcjo6fldlYlByb2Nl
c3NUZXN0UnVubmVyKCkKLXsKLSAgICBnX21haW5fbG9vcF91bnJlZihtX21haW5Mb29wKTsKLQot
ICAgIC8vIGdfdGVzdF9kYnVzX2Rvd24gd2FpdHMgdW50aWwgdGhlIGNvbm5lY3Rpb24gaXMgZnJl
ZWQsIHNvIHJlbGVhc2Ugb3VyIHJlZnMgZXhwbGljaXRseSBiZWZvcmUgY2FsbGluZyBpdC4KLSAg
ICBtX2Nvbm5lY3Rpb24gPSAwOwotICAgIG1fcHJveHkgPSAwOwotICAgIGdfdGVzdF9kYnVzX2Rv
d24obV9idXMuZ2V0KCkpOwotfQotCi12b2lkIFdlYlByb2Nlc3NUZXN0UnVubmVyOjpwcm94eUNy
ZWF0ZWRDYWxsYmFjayhHT2JqZWN0KiwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIFdlYlByb2Nlc3NU
ZXN0UnVubmVyKiB0ZXN0UnVubmVyKQotewotICAgIHRlc3RSdW5uZXItPm1fcHJveHkgPSBhZG9w
dEdSZWYoZ19kYnVzX3Byb3h5X25ld19maW5pc2gocmVzdWx0LCAwKSk7Ci0gICAgZ19tYWluX2xv
b3BfcXVpdCh0ZXN0UnVubmVyLT5tX21haW5Mb29wKTsKLX0KLQotR0RCdXNQcm94eSogV2ViUHJv
Y2Vzc1Rlc3RSdW5uZXI6OnByb3h5KCkKLXsKLSAgICBpZiAobV9wcm94eSkKLSAgICAgICAgcmV0
dXJuIG1fcHJveHkuZ2V0KCk7Ci0KLSAgICBnX2RidXNfcHJveHlfbmV3KG1fY29ubmVjdGlvbi5n
ZXQoKSwgR19EQlVTX1BST1hZX0ZMQUdTX0RPX05PVF9BVVRPX1NUQVJULCAwLAotICAgICAgICAi
b3JnLndlYmtpdC5ndGsuV2ViUHJvY2Vzc1Rlc3QiLCAiL29yZy93ZWJraXQvZ3RrL1dlYlByb2Nl
c3NUZXN0IiwgIm9yZy53ZWJraXQuZ3RrLldlYlByb2Nlc3NUZXN0IiwKLSAgICAgICAgMCwgcmVp
bnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihXZWJQcm9jZXNzVGVzdFJ1bm5lcjo6
cHJveHlDcmVhdGVkQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX21haW5fbG9vcF9ydW4obV9tYWlu
TG9vcCk7Ci0gICAgZ19hc3NlcnQobV9wcm94eS5nZXQoKSk7Ci0KLSAgICByZXR1cm4gbV9wcm94
eS5nZXQoKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzVGVzdFJ1bm5lcjo6b25OYW1lQXBwZWFyZWQo
R0RCdXNDb25uZWN0aW9uKiwgY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBncG9pbnRlciB1c2Vy
RGF0YSkKLXsKLSAgICBXZWJQcm9jZXNzVGVzdFJ1bm5lciogdGVzdFJ1bm5lciA9IHN0YXRpY19j
YXN0PFdlYlByb2Nlc3NUZXN0UnVubmVyKj4odXNlckRhdGEpOwotICAgIGdfbWFpbl9sb29wX3F1
aXQodGVzdFJ1bm5lci0+bV9tYWluTG9vcCk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Rlc3RSdW5u
ZXI6Om9uTmFtZVZhbmlzaGVkKEdEQnVzQ29ubmVjdGlvbiosIGNvbnN0IGNoYXIqIG5hbWUsIGdw
b2ludGVyIHVzZXJEYXRhKQotewotICAgIF9leGl0KDEpOwotfQotCi12b2lkIFdlYlByb2Nlc3NU
ZXN0UnVubmVyOjp0ZXN0RmluaXNoZWRDYWxsYmFjayhHREJ1c1Byb3h5KiBwcm94eSwgR0FzeW5j
UmVzdWx0KiByZXN1bHQsIFdlYlByb2Nlc3NUZXN0UnVubmVyKiB0ZXN0UnVubmVyKQotewotICAg
IEdSZWZQdHI8R1ZhcmlhbnQ+IHJldHVyblZhbHVlID0gYWRvcHRHUmVmKGdfZGJ1c19wcm94eV9j
YWxsX2ZpbmlzaChwcm94eSwgcmVzdWx0LCAwKSk7Ci0gICAgZ19hc3NlcnQocmV0dXJuVmFsdWUu
Z2V0KCkpOwotICAgIGdib29sZWFuIHRlc3RSZXN1bHQ7Ci0gICAgZ192YXJpYW50X2dldChyZXR1
cm5WYWx1ZS5nZXQoKSwgIihiKSIsICZ0ZXN0UmVzdWx0KTsKLSAgICB0ZXN0UnVubmVyLT5maW5p
c2hUZXN0KHRlc3RSZXN1bHQpOwotfQotCi1ib29sIFdlYlByb2Nlc3NUZXN0UnVubmVyOjpydW5U
ZXN0KGNvbnN0IGNoYXIqIHN1aXRlTmFtZSwgY29uc3QgY2hhciogdGVzdE5hbWUsIEdWYXJpYW50
KiBhcmdzKQotewotICAgIGdfYXNzZXJ0KGdfdmFyaWFudF9pc19vZl90eXBlKGFyZ3MsIEdfVkFS
SUFOVF9UWVBFX1ZBUkRJQ1QpKTsKLQotICAgIHVuc2lnbmVkIHdhdGNoZXJJRCA9IGdfYnVzX3dh
dGNoX25hbWVfb25fY29ubmVjdGlvbihtX2Nvbm5lY3Rpb24uZ2V0KCksICJvcmcud2Via2l0Lmd0
ay5XZWJQcm9jZXNzVGVzdCIsIEdfQlVTX05BTUVfV0FUQ0hFUl9GTEFHU19OT05FLAotICAgICAg
ICBXZWJQcm9jZXNzVGVzdFJ1bm5lcjo6b25OYW1lQXBwZWFyZWQsIFdlYlByb2Nlc3NUZXN0UnVu
bmVyOjpvbk5hbWVWYW5pc2hlZCwgdGhpcywgMCk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKG1fbWFp
bkxvb3ApOwotCi0gICAgbV90ZXN0UmVzdWx0ID0gZmFsc2U7Ci0gICAgR093blB0cjxjaGFyPiB0
ZXN0UGF0aChnX3N0cmR1cF9wcmludGYoIiVzLyVzIiwgc3VpdGVOYW1lLCB0ZXN0TmFtZSkpOwot
ICAgIGdfZGJ1c19wcm94eV9jYWxsKAotICAgICAgICBwcm94eSgpLAotICAgICAgICAiUnVuVGVz
dCIsCi0gICAgICAgIGdfdmFyaWFudF9uZXcoIihzQGF7c3Z9KSIsIHRlc3RQYXRoLmdldCgpLCBh
cmdzKSwKLSAgICAgICAgR19EQlVTX0NBTExfRkxBR1NfTk9ORSwKLSAgICAgICAgLTEsIDAsCi0g
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4oV2ViUHJvY2Vzc1Rl
c3RSdW5uZXI6OnRlc3RGaW5pc2hlZENhbGxiYWNrKSwKLSAgICAgICAgdGhpcyk7Ci0gICAgZ19t
YWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotICAgIGdfYnVzX3Vud2F0Y2hfbmFtZSh3YXRjaGVy
SUQpOwotCi0gICAgcmV0dXJuIG1fdGVzdFJlc3VsdDsKLX0KLQotdm9pZCBXZWJQcm9jZXNzVGVz
dFJ1bm5lcjo6ZmluaXNoVGVzdChib29sIHJlc3VsdCkKLXsKLSAgICBtX3Rlc3RSZXN1bHQgPSBy
ZXN1bHQ7Ci0gICAgZ19tYWluX2xvb3BfcXVpdChtX21haW5Mb29wKTsKLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlByb2Nlc3NUZXN0UnVu
bmVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJQcm9jZXNz
VGVzdFJ1bm5lci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDBmYTk2Li4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlByb2Nl
c3NUZXN0UnVubmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgV2ViUHJvY2Vzc1Rlc3RSdW5uZXJf
aAotI2RlZmluZSBXZWJQcm9jZXNzVGVzdFJ1bm5lcl9oCi0KLSNpbmNsdWRlIDxnaW8vZ2lvLmg+
Ci0jaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1Jl
ZlB0ci5oPgotCi1jbGFzcyBXZWJQcm9jZXNzVGVzdFJ1bm5lciB7Ci1wdWJsaWM6Ci0gICAgV2Vi
UHJvY2Vzc1Rlc3RSdW5uZXIoKTsKLSAgICB+V2ViUHJvY2Vzc1Rlc3RSdW5uZXIoKTsKLQotICAg
IGJvb2wgcnVuVGVzdChjb25zdCBjaGFyKiBzdWl0ZU5hbWUsIGNvbnN0IGNoYXIqIHRlc3ROYW1l
LCBHVmFyaWFudCogYXJncyk7Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIHZvaWQgcHJveHlDcmVh
dGVkQ2FsbGJhY2soR09iamVjdCosIEdBc3luY1Jlc3VsdCosIFdlYlByb2Nlc3NUZXN0UnVubmVy
Kik7Ci0gICAgc3RhdGljIHZvaWQgb25OYW1lQXBwZWFyZWQoR0RCdXNDb25uZWN0aW9uKiwgY29u
c3QgY2hhciosIGNvbnN0IGNoYXIqLCBncG9pbnRlcik7Ci0gICAgc3RhdGljIHZvaWQgb25OYW1l
VmFuaXNoZWQoR0RCdXNDb25uZWN0aW9uKiwgY29uc3QgY2hhciosIGdwb2ludGVyKTsKLSAgICBz
dGF0aWMgdm9pZCB0ZXN0RmluaXNoZWRDYWxsYmFjayhHREJ1c1Byb3h5KiwgR0FzeW5jUmVzdWx0
KiwgV2ViUHJvY2Vzc1Rlc3RSdW5uZXIqKTsKLQotICAgIEdEQnVzUHJveHkqIHByb3h5KCk7Ci0g
ICAgdm9pZCBmaW5pc2hUZXN0KGJvb2wgcmVzdWx0KTsKLQotICAgIEdNYWluTG9vcCogbV9tYWlu
TG9vcDsKLSAgICBHUmVmUHRyPEdUZXN0REJ1cz4gbV9idXM7Ci0gICAgR1JlZlB0cjxHREJ1c0Nv
bm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKLSAgICBHUmVmUHRyPEdEQnVzUHJveHk+IG1fcHJveHk7
Ci0gICAgYm9vbCBtX3Rlc3RSZXN1bHQ7Ci19OwotCi0jZW5kaWYgLy8gV2ViUHJvY2Vzc1Rlc3RS
dW5uZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvV2ViVmlld1Rlc3QuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvV2ViVmlld1Rlc3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmM4NDM0
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dl
YlZpZXdUZXN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ0NCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIw
MTEgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgotCi0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dPd25QdHJHdGsuaD4K
LQotV2ViVmlld1Rlc3Q6OldlYlZpZXdUZXN0KCkKLSAgICA6IG1fd2ViVmlldyhXRUJLSVRfV0VC
X1ZJRVcoZ19vYmplY3RfcmVmX3Npbmsod2Via2l0X3dlYl92aWV3X25ldygpKSkpCi0gICAgLCBt
X21haW5Mb29wKGdfbWFpbl9sb29wX25ldygwLCBUUlVFKSkKLSAgICAsIG1fcGFyZW50V2luZG93
KDApCi0gICAgLCBtX2phdmFzY3JpcHRSZXN1bHQoMCkKLSAgICAsIG1fcmVzb3VyY2VEYXRhU2l6
ZSgwKQotICAgICwgbV9zdXJmYWNlKDApCi17Ci0gICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hl
blRlc3RGaW5pc2hlcyhHX09CSkVDVChtX3dlYlZpZXcpKTsKLX0KLQotV2ViVmlld1Rlc3Q6On5X
ZWJWaWV3VGVzdCgpCi17Ci0gICAgaWYgKG1fcGFyZW50V2luZG93KQotICAgICAgICBndGtfd2lk
Z2V0X2Rlc3Ryb3kobV9wYXJlbnRXaW5kb3cpOwotICAgIGlmIChtX2phdmFzY3JpcHRSZXN1bHQp
Ci0gICAgICAgIHdlYmtpdF9qYXZhc2NyaXB0X3Jlc3VsdF91bnJlZihtX2phdmFzY3JpcHRSZXN1
bHQpOwotICAgIGlmIChtX3N1cmZhY2UpCi0gICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveSht
X3N1cmZhY2UpOwotICAgIGdfb2JqZWN0X3VucmVmKG1fd2ViVmlldyk7Ci0gICAgZ19tYWluX2xv
b3BfdW5yZWYobV9tYWluTG9vcCk7Ci19Ci0KLXZvaWQgV2ViVmlld1Rlc3Q6OmxvYWRVUkkoY29u
c3QgY2hhciogdXJpKQotewotICAgIG1fYWN0aXZlVVJJID0gdXJpOwotICAgIHdlYmtpdF93ZWJf
dmlld19sb2FkX3VyaShtX3dlYlZpZXcsIHVyaSk7Ci19Ci0KLXZvaWQgV2ViVmlld1Rlc3Q6Omxv
YWRIdG1sKGNvbnN0IGNoYXIqIGh0bWwsIGNvbnN0IGNoYXIqIGJhc2VVUkkpCi17Ci0gICAgaWYg
KCFiYXNlVVJJKQotICAgICAgICBtX2FjdGl2ZVVSSSA9ICJhYm91dDpibGFuayI7Ci0gICAgZWxz
ZQotICAgICAgICBtX2FjdGl2ZVVSSSA9IGJhc2VVUkk7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xv
YWRfaHRtbChtX3dlYlZpZXcsIGh0bWwsIGJhc2VVUkkpOwotfQotCi12b2lkIFdlYlZpZXdUZXN0
Ojpsb2FkUGxhaW5UZXh0KGNvbnN0IGNoYXIqIHBsYWluVGV4dCkKLXsKLSAgICBtX2FjdGl2ZVVS
SSA9ICJhYm91dDpibGFuayI7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfcGxhaW5fdGV4dCht
X3dlYlZpZXcsIHBsYWluVGV4dCk7Ci19Ci0KLXZvaWQgV2ViVmlld1Rlc3Q6OmxvYWRSZXF1ZXN0
KFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QpCi17Ci0gICAgbV9hY3RpdmVVUkkgPSB3ZWJraXRf
dXJpX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9y
ZXF1ZXN0KG1fd2ViVmlldywgcmVxdWVzdCk7Ci19Ci0KLXZvaWQgV2ViVmlld1Rlc3Q6OmxvYWRB
bHRlcm5hdGVIVE1MKGNvbnN0IGNoYXIqIGh0bWwsIGNvbnN0IGNoYXIqIGNvbnRlbnRVUkksIGNv
bnN0IGNoYXIqIGJhc2VVUkkpCi17Ci0gICAgbV9hY3RpdmVVUkkgPSBjb250ZW50VVJJOwotICAg
IHdlYmtpdF93ZWJfdmlld19sb2FkX2FsdGVybmF0ZV9odG1sKG1fd2ViVmlldywgaHRtbCwgY29u
dGVudFVSSSwgYmFzZVVSSSk7Ci19Ci0KLXZvaWQgV2ViVmlld1Rlc3Q6OmdvQmFjaygpCi17Ci0g
ICAgaWYgKHdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayhtX3dlYlZpZXcpKSB7Ci0gICAgICAg
IFdlYktpdEJhY2tGb3J3YXJkTGlzdCogbGlzdCA9IHdlYmtpdF93ZWJfdmlld19nZXRfYmFja19m
b3J3YXJkX2xpc3QobV93ZWJWaWV3KTsKLSAgICAgICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRl
bSogaXRlbSA9IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbnRoX2l0ZW0obGlzdCwgLTEp
OwotICAgICAgICBtX2FjdGl2ZVVSSSA9IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dl
dF9vcmlnaW5hbF91cmkoaXRlbSk7Ci0gICAgfQotCi0gICAgLy8gQ2FsbCBnb19iYWNrIGV2ZW4g
d2hlbiBjYW5fZ29fYmFjayByZXR1cm5zIEZBTFNFIHRvIGNoZWNrIG5vdGhpbmcgaGFwcGVucy4K
LSAgICB3ZWJraXRfd2ViX3ZpZXdfZ29fYmFjayhtX3dlYlZpZXcpOwotfQotCi12b2lkIFdlYlZp
ZXdUZXN0Ojpnb0ZvcndhcmQoKQotewotICAgIGlmICh3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2Zv
cndhcmQobV93ZWJWaWV3KSkgewotICAgICAgICBXZWJLaXRCYWNrRm9yd2FyZExpc3QqIGxpc3Qg
PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2JhY2tfZm9yd2FyZF9saXN0KG1fd2ViVmlldyk7Ci0gICAg
ICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW0gPSB3ZWJraXRfYmFja19mb3J3YXJk
X2xpc3RfZ2V0X250aF9pdGVtKGxpc3QsIDEpOwotICAgICAgICBtX2FjdGl2ZVVSSSA9IHdlYmtp
dF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dldF9vcmlnaW5hbF91cmkoaXRlbSk7Ci0gICAgfQot
Ci0gICAgLy8gQ2FsbCBnb19mb3J3YXJkIGV2ZW4gd2hlbiBjYW5fZ29fZm9yd2FyZCByZXR1cm5z
IEZBTFNFIHRvIGNoZWNrIG5vdGhpbmcgaGFwcGVucy4KLSAgICB3ZWJraXRfd2ViX3ZpZXdfZ29f
Zm9yd2FyZChtX3dlYlZpZXcpOwotfQotCi12b2lkIFdlYlZpZXdUZXN0Ojpnb1RvQmFja0Zvcndh
cmRMaXN0SXRlbShXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiBpdGVtKQotewotICAgIG1fYWN0
aXZlVVJJID0gd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0X29yaWdpbmFsX3VyaShp
dGVtKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfZ29fdG9fYmFja19mb3J3YXJkX2xpc3RfaXRlbSht
X3dlYlZpZXcsIGl0ZW0pOwotfQotCi12b2lkIFdlYlZpZXdUZXN0OjpxdWl0TWFpbkxvb3AoKQot
ewotICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7Ci19Ci0KLXZvaWQgV2ViVmlld1Rl
c3Q6OnF1aXRNYWluTG9vcEFmdGVyUHJvY2Vzc2luZ1BlbmRpbmdFdmVudHMoKQotewotICAgIHdo
aWxlIChndGtfZXZlbnRzX3BlbmRpbmcoKSkKLSAgICAgICAgZ3RrX21haW5faXRlcmF0aW9uKCk7
Ci0gICAgcXVpdE1haW5Mb29wKCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBxdWl0TWFpbkxvb3BJ
ZGxlQ2FsbGJhY2soV2ViVmlld1Rlc3QqIHRlc3QpCi17Ci0gICAgdGVzdC0+cXVpdE1haW5Mb29w
KCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCi12b2lkIFdlYlZpZXdUZXN0Ojp3YWl0KGRvdWJs
ZSBzZWNvbmRzKQotewotICAgIGdfdGltZW91dF9hZGRfc2Vjb25kcyhzZWNvbmRzLCByZWludGVy
cHJldF9jYXN0PEdTb3VyY2VGdW5jPihxdWl0TWFpbkxvb3BJZGxlQ2FsbGJhY2spLCB0aGlzKTsK
LSAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGxvYWRD
aGFuZ2VkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdExvYWRFdmVudCBsb2FkRXZlbnQs
IFdlYlZpZXdUZXN0KiB0ZXN0KQotewotICAgIGlmIChsb2FkRXZlbnQgIT0gV0VCS0lUX0xPQURf
RklOSVNIRUQpCi0gICAgICAgIHJldHVybjsKLSAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25u
ZWN0X2J5X2Z1bmMod2ViVmlldywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obG9hZENoYW5nZWQp
LCB0ZXN0KTsKLSAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOwotfQotCi12
b2lkIFdlYlZpZXdUZXN0Ojp3YWl0VW50aWxMb2FkRmluaXNoZWQoKQotewotICAgIGdfc2lnbmFs
X2Nvbm5lY3QobV93ZWJWaWV3LCAibG9hZC1jaGFuZ2VkIiwgR19DQUxMQkFDSyhsb2FkQ2hhbmdl
ZCksIHRoaXMpOwotICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLX0KLQotc3RhdGlj
IHZvaWQgdGl0bGVDaGFuZ2VkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEdQYXJhbVNwZWMqLCBX
ZWJWaWV3VGVzdCogdGVzdCkKLXsKLSAgICBpZiAoIXRlc3QtPm1fZXhwZWN0ZWRUaXRsZS5pc051
bGwoKSAmJiB0ZXN0LT5tX2V4cGVjdGVkVGl0bGUgIT0gd2Via2l0X3dlYl92aWV3X2dldF90aXRs
ZSh3ZWJWaWV3KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZ19zaWduYWxfaGFuZGxlcnNfZGlz
Y29ubmVjdF9ieV9mdW5jKHdlYlZpZXcsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHRpdGxlQ2hh
bmdlZCksIHRlc3QpOwotICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7Ci19
Ci0KLXZvaWQgV2ViVmlld1Rlc3Q6OndhaXRVbnRpbFRpdGxlQ2hhbmdlZFRvKGNvbnN0IGNoYXIq
IGV4cGVjdGVkVGl0bGUpCi17Ci0gICAgbV9leHBlY3RlZFRpdGxlID0gZXhwZWN0ZWRUaXRsZTsK
LSAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgIm5vdGlmeTo6dGl0bGUiLCBHX0NBTExC
QUNLKHRpdGxlQ2hhbmdlZCksIHRoaXMpOwotICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29w
KTsKLSAgICBtX2V4cGVjdGVkVGl0bGUgPSBDU3RyaW5nKCk7Ci19Ci0KLXZvaWQgV2ViVmlld1Rl
c3Q6OndhaXRVbnRpbFRpdGxlQ2hhbmdlZCgpCi17Ci0gICAgd2FpdFVudGlsVGl0bGVDaGFuZ2Vk
VG8oMCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBwYXJlbnRXaW5kb3dNYXBwZWQoR3RrV2lkZ2V0
KiB3aWRnZXQsIEdka0V2ZW50KiwgV2ViVmlld1Rlc3QqIHRlc3QpCi17Ci0gICAgZ19zaWduYWxf
aGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKHdpZGdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4ocGFyZW50V2luZG93TWFwcGVkKSwgdGVzdCk7Ci0gICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0
LT5tX21haW5Mb29wKTsKLQotICAgIHJldHVybiBGQUxTRTsKLX0KLQotdm9pZCBXZWJWaWV3VGVz
dDo6c2hvd0luV2luZG93KEd0a1dpbmRvd1R5cGUgd2luZG93VHlwZSkKLXsKLSAgICBnX2Fzc2Vy
dCghbV9wYXJlbnRXaW5kb3cpOwotICAgIG1fcGFyZW50V2luZG93ID0gZ3RrX3dpbmRvd19uZXco
d2luZG93VHlwZSk7Ci0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihtX3BhcmVu
dFdpbmRvdyksIEdUS19XSURHRVQobV93ZWJWaWV3KSk7Ci0gICAgZ3RrX3dpZGdldF9zaG93KEdU
S19XSURHRVQobV93ZWJWaWV3KSk7Ci0gICAgZ3RrX3dpZGdldF9zaG93KG1fcGFyZW50V2luZG93
KTsKLX0KLQotdm9pZCBXZWJWaWV3VGVzdDo6c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVk
KEd0a1dpbmRvd1R5cGUgd2luZG93VHlwZSkKLXsKLSAgICBnX2Fzc2VydCghbV9wYXJlbnRXaW5k
b3cpOwotICAgIG1fcGFyZW50V2luZG93ID0gZ3RrX3dpbmRvd19uZXcod2luZG93VHlwZSk7Ci0g
ICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihtX3BhcmVudFdpbmRvdyksIEdUS19X
SURHRVQobV93ZWJWaWV3KSk7Ci0gICAgZ3RrX3dpZGdldF9zaG93KEdUS19XSURHRVQobV93ZWJW
aWV3KSk7Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fcGFyZW50V2luZG93LCAibWFwLWV2ZW50
IiwgR19DQUxMQkFDSyhwYXJlbnRXaW5kb3dNYXBwZWQpLCB0aGlzKTsKLSAgICBndGtfd2lkZ2V0
X3Nob3cobV9wYXJlbnRXaW5kb3cpOwotICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsK
LX0KLQotdm9pZCBXZWJWaWV3VGVzdDo6cmVzaXplVmlldyhpbnQgd2lkdGgsIGludCBoZWlnaHQp
Ci17Ci0gICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uOwotICAgIGd0a193aWRnZXRfZ2V0X2Fs
bG9jYXRpb24oR1RLX1dJREdFVChtX3dlYlZpZXcpLCAmYWxsb2NhdGlvbik7Ci0gICAgaWYgKHdp
ZHRoICE9IC0xKQotICAgICAgICBhbGxvY2F0aW9uLndpZHRoID0gd2lkdGg7Ci0gICAgaWYgKGhl
aWdodCAhPSAtMSkKLSAgICAgICAgYWxsb2NhdGlvbi5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgZ3Rr
X3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQobV93ZWJWaWV3KSwgJmFsbG9jYXRpb24p
OwotfQotCi12b2lkIFdlYlZpZXdUZXN0OjpzZWxlY3RBbGwoKQotewotICAgIHdlYmtpdF93ZWJf
dmlld19leGVjdXRlX2VkaXRpbmdfY29tbWFuZChtX3dlYlZpZXcsICJTZWxlY3RBbGwiKTsKLX0K
LQotc3RhdGljIHZvaWQgcmVzb3VyY2VHZXREYXRhQ2FsbGJhY2soR09iamVjdCogb2JqZWN0LCBH
QXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEpCi17Ci0gICAgc2l6ZV90IGRh
dGFTaXplOwotICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKLSAgICB1bnNpZ25lZCBjaGFyKiBk
YXRhID0gd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZGF0YV9maW5pc2goV0VCS0lUX1dFQl9SRVNP
VVJDRShvYmplY3QpLCByZXN1bHQsICZkYXRhU2l6ZSwgJmVycm9yLm91dFB0cigpKTsKLSAgICBn
X2Fzc2VydChkYXRhKTsKLQotICAgIFdlYlZpZXdUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8V2Vi
Vmlld1Rlc3QqPih1c2VyRGF0YSk7Ci0gICAgdGVzdC0+bV9yZXNvdXJjZURhdGEuc2V0KHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KGRhdGEpKTsKLSAgICB0ZXN0LT5tX3Jlc291cmNlRGF0YVNpemUg
PSBkYXRhU2l6ZTsKLSAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOwotfQot
Ci1jb25zdCBjaGFyKiBXZWJWaWV3VGVzdDo6bWFpblJlc291cmNlRGF0YShzaXplX3QmIG1haW5S
ZXNvdXJjZURhdGFTaXplKQotewotICAgIG1fcmVzb3VyY2VEYXRhU2l6ZSA9IDA7Ci0gICAgbV9y
ZXNvdXJjZURhdGEuY2xlYXIoKTsKLSAgICBXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UgPSB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2UobV93ZWJWaWV3KTsKLSAgICBnX2Fzc2Vy
dChyZXNvdXJjZSk7Ci0KLSAgICB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF9kYXRhKHJlc291cmNl
LCAwLCByZXNvdXJjZUdldERhdGFDYWxsYmFjaywgdGhpcyk7Ci0gICAgZ19tYWluX2xvb3BfcnVu
KG1fbWFpbkxvb3ApOwotCi0gICAgbWFpblJlc291cmNlRGF0YVNpemUgPSBtX3Jlc291cmNlRGF0
YVNpemU7Ci0gICAgcmV0dXJuIG1fcmVzb3VyY2VEYXRhLmdldCgpOwotfQotCi12b2lkIFdlYlZp
ZXdUZXN0Ojptb3VzZU1vdmVUbyhpbnQgeCwgaW50IHksIHVuc2lnbmVkIGludCBtb3VzZU1vZGlm
aWVycykKLXsKLSAgICBnX2Fzc2VydChtX3BhcmVudFdpbmRvdyk7Ci0gICAgR3RrV2lkZ2V0KiB2
aWV3V2lkZ2V0ID0gR1RLX1dJREdFVChtX3dlYlZpZXcpOwotICAgIGdfYXNzZXJ0KGd0a193aWRn
ZXRfZ2V0X3JlYWxpemVkKHZpZXdXaWRnZXQpKTsKLQotICAgIEdPd25QdHI8R2RrRXZlbnQ+IGV2
ZW50KGdka19ldmVudF9uZXcoR0RLX01PVElPTl9OT1RJRlkpKTsKLSAgICBldmVudC0+bW90aW9u
LnggPSB4OwotICAgIGV2ZW50LT5tb3Rpb24ueSA9IHk7Ci0KLSAgICBldmVudC0+bW90aW9uLnRp
bWUgPSBHREtfQ1VSUkVOVF9USU1FOwotICAgIGV2ZW50LT5tb3Rpb24ud2luZG93ID0gZ3RrX3dp
ZGdldF9nZXRfd2luZG93KHZpZXdXaWRnZXQpOwotICAgIGdfb2JqZWN0X3JlZihldmVudC0+bW90
aW9uLndpbmRvdyk7Ci0gICAgZXZlbnQtPm1vdGlvbi5kZXZpY2UgPSBnZGtfZGV2aWNlX21hbmFn
ZXJfZ2V0X2NsaWVudF9wb2ludGVyKGdka19kaXNwbGF5X2dldF9kZXZpY2VfbWFuYWdlcihndGtf
d2lkZ2V0X2dldF9kaXNwbGF5KHZpZXdXaWRnZXQpKSk7Ci0gICAgZXZlbnQtPm1vdGlvbi5zdGF0
ZSA9IG1vdXNlTW9kaWZpZXJzOwotICAgIGV2ZW50LT5tb3Rpb24uYXhlcyA9IDA7Ci0KLSAgICBp
bnQgeFJvb3QsIHlSb290OwotICAgIGdka193aW5kb3dfZ2V0X3Jvb3RfY29vcmRzKGd0a193aWRn
ZXRfZ2V0X3dpbmRvdyh2aWV3V2lkZ2V0KSwgeCwgeSwgJnhSb290LCAmeVJvb3QpOwotICAgIGV2
ZW50LT5tb3Rpb24ueF9yb290ID0geFJvb3Q7Ci0gICAgZXZlbnQtPm1vdGlvbi55X3Jvb3QgPSB5
Um9vdDsKLSAgICBndGtfbWFpbl9kb19ldmVudChldmVudC5nZXQoKSk7Ci19Ci0KLXZvaWQgV2Vi
Vmlld1Rlc3Q6OmNsaWNrTW91c2VCdXR0b24oaW50IHgsIGludCB5LCB1bnNpZ25lZCBpbnQgYnV0
dG9uLCB1bnNpZ25lZCBpbnQgbW91c2VNb2RpZmllcnMpCi17Ci0gICAgZG9Nb3VzZUJ1dHRvbkV2
ZW50KEdES19CVVRUT05fUFJFU1MsIHgsIHksIGJ1dHRvbiwgbW91c2VNb2RpZmllcnMpOwotICAg
IGRvTW91c2VCdXR0b25FdmVudChHREtfQlVUVE9OX1JFTEVBU0UsIHgsIHksIGJ1dHRvbiwgbW91
c2VNb2RpZmllcnMpOwotfQotCi12b2lkIFdlYlZpZXdUZXN0OjprZXlTdHJva2UodW5zaWduZWQg
aW50IGtleVZhbCwgdW5zaWduZWQgaW50IGtleU1vZGlmaWVycykKLXsKLSAgICBnX2Fzc2VydCht
X3BhcmVudFdpbmRvdyk7Ci0gICAgR3RrV2lkZ2V0KiB2aWV3V2lkZ2V0ID0gR1RLX1dJREdFVCht
X3dlYlZpZXcpOwotICAgIGdfYXNzZXJ0KGd0a193aWRnZXRfZ2V0X3JlYWxpemVkKHZpZXdXaWRn
ZXQpKTsKLQotICAgIEdPd25QdHI8R2RrRXZlbnQ+IGV2ZW50KGdka19ldmVudF9uZXcoR0RLX0tF
WV9QUkVTUykpOwotICAgIGV2ZW50LT5rZXkua2V5dmFsID0ga2V5VmFsOwotCi0gICAgZXZlbnQt
PmtleS50aW1lID0gR0RLX0NVUlJFTlRfVElNRTsKLSAgICBldmVudC0+a2V5LndpbmRvdyA9IGd0
a193aWRnZXRfZ2V0X3dpbmRvdyh2aWV3V2lkZ2V0KTsKLSAgICBnX29iamVjdF9yZWYoZXZlbnQt
PmtleS53aW5kb3cpOwotICAgIGdka19ldmVudF9zZXRfZGV2aWNlKGV2ZW50LmdldCgpLCBnZGtf
ZGV2aWNlX21hbmFnZXJfZ2V0X2NsaWVudF9wb2ludGVyKGdka19kaXNwbGF5X2dldF9kZXZpY2Vf
bWFuYWdlcihndGtfd2lkZ2V0X2dldF9kaXNwbGF5KHZpZXdXaWRnZXQpKSkpOwotICAgIGV2ZW50
LT5rZXkuc3RhdGUgPSBrZXlNb2RpZmllcnM7Ci0KLSAgICAvLyBXaGVuIHN5bnRoZXNpemluZyBh
biBldmVudCwgYW4gaW52YWxpZCBoYXJkd2FyZV9rZXljb2RlIHZhbHVlIGNhbiBjYXVzZSBpdCB0
byBiZSBiYWRseSBwcm9jZXNzZWQgYnkgR1RLKy4KLSAgICBHT3duUHRyPEdka0tleW1hcEtleT4g
a2V5czsKLSAgICBpbnQga2V5c0NvdW50OwotICAgIGlmIChnZGtfa2V5bWFwX2dldF9lbnRyaWVz
X2Zvcl9rZXl2YWwoZ2RrX2tleW1hcF9nZXRfZGVmYXVsdCgpLCBrZXlWYWwsICZrZXlzLm91dFB0
cigpLCAma2V5c0NvdW50KSkKLSAgICAgICAgZXZlbnQtPmtleS5oYXJkd2FyZV9rZXljb2RlID0g
a2V5cy5nZXQoKVswXS5rZXljb2RlOwotCi0gICAgZ3RrX21haW5fZG9fZXZlbnQoZXZlbnQuZ2V0
KCkpOwotICAgIGV2ZW50LT5rZXkudHlwZSA9IEdES19LRVlfUkVMRUFTRTsKLSAgICBndGtfbWFp
bl9kb19ldmVudChldmVudC5nZXQoKSk7Ci19Ci0KLXZvaWQgV2ViVmlld1Rlc3Q6OmRvTW91c2VC
dXR0b25FdmVudChHZGtFdmVudFR5cGUgZXZlbnRUeXBlLCBpbnQgeCwgaW50IHksIHVuc2lnbmVk
IGludCBidXR0b24sIHVuc2lnbmVkIGludCBtb3VzZU1vZGlmaWVycykKLXsKLSAgICBnX2Fzc2Vy
dChtX3BhcmVudFdpbmRvdyk7Ci0gICAgR3RrV2lkZ2V0KiB2aWV3V2lkZ2V0ID0gR1RLX1dJREdF
VChtX3dlYlZpZXcpOwotICAgIGdfYXNzZXJ0KGd0a193aWRnZXRfZ2V0X3JlYWxpemVkKHZpZXdX
aWRnZXQpKTsKLQotICAgIEdPd25QdHI8R2RrRXZlbnQ+IGV2ZW50KGdka19ldmVudF9uZXcoZXZl
bnRUeXBlKSk7Ci0gICAgZXZlbnQtPmJ1dHRvbi53aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5k
b3codmlld1dpZGdldCk7Ci0gICAgZ19vYmplY3RfcmVmKGV2ZW50LT5idXR0b24ud2luZG93KTsK
LQotICAgIGV2ZW50LT5idXR0b24udGltZSA9IEdES19DVVJSRU5UX1RJTUU7Ci0gICAgZXZlbnQt
PmJ1dHRvbi54ID0geDsKLSAgICBldmVudC0+YnV0dG9uLnkgPSB5OwotICAgIGV2ZW50LT5idXR0
b24uYXhlcyA9IDA7Ci0gICAgZXZlbnQtPmJ1dHRvbi5zdGF0ZSA9IG1vdXNlTW9kaWZpZXJzOwot
ICAgIGV2ZW50LT5idXR0b24uYnV0dG9uID0gYnV0dG9uOwotCi0gICAgZXZlbnQtPmJ1dHRvbi5k
ZXZpY2UgPSBnZGtfZGV2aWNlX21hbmFnZXJfZ2V0X2NsaWVudF9wb2ludGVyKGdka19kaXNwbGF5
X2dldF9kZXZpY2VfbWFuYWdlcihndGtfd2lkZ2V0X2dldF9kaXNwbGF5KHZpZXdXaWRnZXQpKSk7
Ci0KLSAgICBpbnQgeFJvb3QsIHlSb290OwotICAgIGdka193aW5kb3dfZ2V0X3Jvb3RfY29vcmRz
KGd0a193aWRnZXRfZ2V0X3dpbmRvdyh2aWV3V2lkZ2V0KSwgeCwgeSwgJnhSb290LCAmeVJvb3Qp
OwotICAgIGV2ZW50LT5idXR0b24ueF9yb290ID0geFJvb3Q7Ci0gICAgZXZlbnQtPmJ1dHRvbi55
X3Jvb3QgPSB5Um9vdDsKLSAgICBndGtfbWFpbl9kb19ldmVudChldmVudC5nZXQoKSk7Ci19Ci0K
LXN0YXRpYyB2b2lkIHJ1bkphdmFTY3JpcHRSZWFkeUNhbGxiYWNrKEdPYmplY3QqLCBHQXN5bmNS
ZXN1bHQqIHJlc3VsdCwgV2ViVmlld1Rlc3QqIHRlc3QpCi17Ci0gICAgdGVzdC0+bV9qYXZhc2Ny
aXB0UmVzdWx0ID0gd2Via2l0X3dlYl92aWV3X3J1bl9qYXZhc2NyaXB0X2ZpbmlzaCh0ZXN0LT5t
X3dlYlZpZXcsIHJlc3VsdCwgdGVzdC0+bV9qYXZhc2NyaXB0RXJyb3IpOwotICAgIGdfbWFpbl9s
b29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ1bkphdmFTY3Jp
cHRGcm9tR1Jlc291cmNlUmVhZHlDYWxsYmFjayhHT2JqZWN0KiwgR0FzeW5jUmVzdWx0KiByZXN1
bHQsIFdlYlZpZXdUZXN0KiB0ZXN0KQotewotICAgIHRlc3QtPm1famF2YXNjcmlwdFJlc3VsdCA9
IHdlYmtpdF93ZWJfdmlld19ydW5famF2YXNjcmlwdF9mcm9tX2dyZXNvdXJjZV9maW5pc2godGVz
dC0+bV93ZWJWaWV3LCByZXN1bHQsIHRlc3QtPm1famF2YXNjcmlwdEVycm9yKTsKLSAgICBnX21h
aW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOwotfQotCi1XZWJLaXRKYXZhc2NyaXB0UmVz
dWx0KiBXZWJWaWV3VGVzdDo6cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKGNvbnN0
IGNoYXIqIGphdmFzY3JpcHQsIEdFcnJvcioqIGVycm9yKQotewotICAgIGlmIChtX2phdmFzY3Jp
cHRSZXN1bHQpCi0gICAgICAgIHdlYmtpdF9qYXZhc2NyaXB0X3Jlc3VsdF91bnJlZihtX2phdmFz
Y3JpcHRSZXN1bHQpOwotICAgIG1famF2YXNjcmlwdFJlc3VsdCA9IDA7Ci0gICAgbV9qYXZhc2Ny
aXB0RXJyb3IgPSBlcnJvcjsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfcnVuX2phdmFzY3JpcHQobV93
ZWJWaWV3LCBqYXZhc2NyaXB0LCAwLCByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJh
Y2s+KHJ1bkphdmFTY3JpcHRSZWFkeUNhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19tYWluX2xvb3Bf
cnVuKG1fbWFpbkxvb3ApOwotCi0gICAgcmV0dXJuIG1famF2YXNjcmlwdFJlc3VsdDsKLX0KLQot
V2ViS2l0SmF2YXNjcmlwdFJlc3VsdCogV2ViVmlld1Rlc3Q6OnJ1bkphdmFTY3JpcHRGcm9tR1Jl
c291cmNlQW5kV2FpdFVudGlsRmluaXNoZWQoY29uc3QgY2hhciogcmVzb3VyY2UsIEdFcnJvcioq
IGVycm9yKQotewotICAgIGlmIChtX2phdmFzY3JpcHRSZXN1bHQpCi0gICAgICAgIHdlYmtpdF9q
YXZhc2NyaXB0X3Jlc3VsdF91bnJlZihtX2phdmFzY3JpcHRSZXN1bHQpOwotICAgIG1famF2YXNj
cmlwdFJlc3VsdCA9IDA7Ci0gICAgbV9qYXZhc2NyaXB0RXJyb3IgPSBlcnJvcjsKLSAgICB3ZWJr
aXRfd2ViX3ZpZXdfcnVuX2phdmFzY3JpcHRfZnJvbV9ncmVzb3VyY2UobV93ZWJWaWV3LCByZXNv
dXJjZSwgMCwgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihydW5KYXZhU2Ny
aXB0RnJvbUdSZXNvdXJjZVJlYWR5Q2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX21haW5fbG9vcF9y
dW4obV9tYWluTG9vcCk7Ci0KLSAgICByZXR1cm4gbV9qYXZhc2NyaXB0UmVzdWx0OwotfQotCi1z
dGF0aWMgY2hhcioganNWYWx1ZVRvQ1N0cmluZyhKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCwg
SlNWYWx1ZVJlZiB2YWx1ZSkKLXsKLSAgICBnX2Fzc2VydCh2YWx1ZSk7Ci0gICAgZ19hc3NlcnQo
SlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIHZhbHVlKSk7Ci0KLSAgICBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gc3RyaW5nVmFsdWUoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwg
dmFsdWUsIDApKTsKLSAgICBnX2Fzc2VydChzdHJpbmdWYWx1ZSk7Ci0KLSAgICBzaXplX3QgY1N0
cmluZ0xlbmd0aCA9IEpTU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShzdHJpbmdWYWx1
ZS5nZXQoKSk7Ci0gICAgY2hhciogY1N0cmluZyA9IHN0YXRpY19jYXN0PGNoYXIqPihnX21hbGxv
YyhjU3RyaW5nTGVuZ3RoKSk7Ci0gICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhzdHJpbmdWYWx1
ZS5nZXQoKSwgY1N0cmluZywgY1N0cmluZ0xlbmd0aCk7Ci0gICAgcmV0dXJuIGNTdHJpbmc7Ci19
Ci0KLWNoYXIqIFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKFdlYktpdEph
dmFzY3JpcHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQpCi17Ci0gICAgSlNHbG9iYWxDb250ZXh0
UmVmIGNvbnRleHQgPSB3ZWJraXRfamF2YXNjcmlwdF9yZXN1bHRfZ2V0X2dsb2JhbF9jb250ZXh0
KGphdmFzY3JpcHRSZXN1bHQpOwotICAgIGdfYXNzZXJ0KGNvbnRleHQpOwotICAgIHJldHVybiBq
c1ZhbHVlVG9DU3RyaW5nKGNvbnRleHQsIHdlYmtpdF9qYXZhc2NyaXB0X3Jlc3VsdF9nZXRfdmFs
dWUoamF2YXNjcmlwdFJlc3VsdCkpOwotfQotCi1kb3VibGUgV2ViVmlld1Rlc3Q6OmphdmFzY3Jp
cHRSZXN1bHRUb051bWJlcihXZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBqYXZhc2NyaXB0UmVzdWx0
KQotewotICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0ID0gd2Via2l0X2phdmFzY3JpcHRf
cmVzdWx0X2dldF9nbG9iYWxfY29udGV4dChqYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBnX2Fzc2Vy
dChjb250ZXh0KTsKLSAgICBKU1ZhbHVlUmVmIHZhbHVlID0gd2Via2l0X2phdmFzY3JpcHRfcmVz
dWx0X2dldF92YWx1ZShqYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBnX2Fzc2VydCh2YWx1ZSk7Ci0g
ICAgZ19hc3NlcnQoSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIHZhbHVlKSk7Ci0KLSAgICByZXR1
cm4gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIHZhbHVlLCAwKTsKLX0KLQotYm9vbCBXZWJWaWV3
VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQm9vbGVhbihXZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBq
YXZhc2NyaXB0UmVzdWx0KQotewotICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0ID0gd2Vi
a2l0X2phdmFzY3JpcHRfcmVzdWx0X2dldF9nbG9iYWxfY29udGV4dChqYXZhc2NyaXB0UmVzdWx0
KTsKLSAgICBnX2Fzc2VydChjb250ZXh0KTsKLSAgICBKU1ZhbHVlUmVmIHZhbHVlID0gd2Via2l0
X2phdmFzY3JpcHRfcmVzdWx0X2dldF92YWx1ZShqYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBnX2Fz
c2VydCh2YWx1ZSk7Ci0gICAgZ19hc3NlcnQoSlNWYWx1ZUlzQm9vbGVhbihjb250ZXh0LCB2YWx1
ZSkpOwotCi0gICAgcmV0dXJuIEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgdmFsdWUpOwotfQot
Ci1ib29sIFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0SXNOdWxsKFdlYktpdEphdmFzY3Jp
cHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQpCi17Ci0gICAgSlNHbG9iYWxDb250ZXh0UmVmIGNv
bnRleHQgPSB3ZWJraXRfamF2YXNjcmlwdF9yZXN1bHRfZ2V0X2dsb2JhbF9jb250ZXh0KGphdmFz
Y3JpcHRSZXN1bHQpOwotICAgIGdfYXNzZXJ0KGNvbnRleHQpOwotICAgIEpTVmFsdWVSZWYgdmFs
dWUgPSB3ZWJraXRfamF2YXNjcmlwdF9yZXN1bHRfZ2V0X3ZhbHVlKGphdmFzY3JpcHRSZXN1bHQp
OwotICAgIGdfYXNzZXJ0KHZhbHVlKTsKLQotICAgIHJldHVybiBKU1ZhbHVlSXNOdWxsKGNvbnRl
eHQsIHZhbHVlKTsKLX0KLQotYm9vbCBXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdElzVW5k
ZWZpbmVkKFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQpCi17Ci0gICAg
SlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQgPSB3ZWJraXRfamF2YXNjcmlwdF9yZXN1bHRfZ2V0
X2dsb2JhbF9jb250ZXh0KGphdmFzY3JpcHRSZXN1bHQpOwotICAgIGdfYXNzZXJ0KGNvbnRleHQp
OwotICAgIEpTVmFsdWVSZWYgdmFsdWUgPSB3ZWJraXRfamF2YXNjcmlwdF9yZXN1bHRfZ2V0X3Zh
bHVlKGphdmFzY3JpcHRSZXN1bHQpOwotICAgIGdfYXNzZXJ0KHZhbHVlKTsKLQotICAgIHJldHVy
biBKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwgdmFsdWUpOwotfQotCi1zdGF0aWMgdm9pZCBv
blNuYXBzaG90UmVhZHkoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIEdBc3luY1Jlc3VsdCogcmVz
LCBXZWJWaWV3VGVzdCogdGVzdCkKLXsKLSAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAg
dGVzdC0+bV9zdXJmYWNlID0gd2Via2l0X3dlYl92aWV3X2dldF9zbmFwc2hvdF9maW5pc2god2Vi
X3ZpZXcsIHJlcywgJmVycm9yLm91dFB0cigpKTsKLSAgICBnX2Fzc2VydCghdGVzdC0+bV9zdXJm
YWNlIHx8ICFlcnJvci5nZXQoKSk7Ci0gICAgaWYgKGVycm9yKQotICAgICAgICBnX2Fzc2VydF9l
cnJvcihlcnJvci5nZXQoKSwgV0VCS0lUX1NOQVBTSE9UX0VSUk9SLCBXRUJLSVRfU05BUFNIT1Rf
RVJST1JfRkFJTEVEX1RPX0NSRUFURSk7Ci0gICAgdGVzdC0+cXVpdE1haW5Mb29wKCk7Ci19Ci0K
LWNhaXJvX3N1cmZhY2VfdCogV2ViVmlld1Rlc3Q6OmdldFNuYXBzaG90QW5kV2FpdFVudGlsUmVh
ZHkoV2ViS2l0U25hcHNob3RSZWdpb24gcmVnaW9uLCBXZWJLaXRTbmFwc2hvdE9wdGlvbnMgb3B0
aW9ucykKLXsKLSAgICBpZiAobV9zdXJmYWNlKQotICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ry
b3kobV9zdXJmYWNlKTsKLSAgICBtX3N1cmZhY2UgPSAwOwotICAgIHdlYmtpdF93ZWJfdmlld19n
ZXRfc25hcHNob3QobV93ZWJWaWV3LCByZWdpb24sIG9wdGlvbnMsIDAsIHJlaW50ZXJwcmV0X2Nh
c3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4ob25TbmFwc2hvdFJlYWR5KSwgdGhpcyk7Ci0gICAgZ19t
YWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotICAgIHJldHVybiBtX3N1cmZhY2U7Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVz
dC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3Qu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ2MGUyMi4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5oCisrKyAv
ZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2Fs
aWEgUy5MLgotICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDExIE1vdG9yb2xhIE1vYmlsaXR5
LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFdlYlZpZXdUZXN0X2gKLSNkZWZp
bmUgV2ViVmlld1Rlc3RfaAotCi0jaW5jbHVkZSAiVGVzdE1haW4uaCIKLSNpbmNsdWRlIDx3ZWJr
aXQyL3dlYmtpdDIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLWNsYXNzIFdl
YlZpZXdUZXN0OiBwdWJsaWMgVGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklY
VFVSRShXZWJWaWV3VGVzdCk7Ci0gICAgV2ViVmlld1Rlc3QoKTsKLSAgICB2aXJ0dWFsIH5XZWJW
aWV3VGVzdCgpOwotCi0gICAgdmlydHVhbCB2b2lkIGxvYWRVUkkoY29uc3QgY2hhciogdXJpKTsK
LSAgICB2aXJ0dWFsIHZvaWQgbG9hZEh0bWwoY29uc3QgY2hhciogaHRtbCwgY29uc3QgY2hhciog
YmFzZVVSSSk7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRQbGFpblRleHQoY29uc3QgY2hhciogcGxh
aW5UZXh0KTsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlcXVlc3QoV2ViS2l0VVJJUmVxdWVzdCop
OwotICAgIHZvaWQgbG9hZEFsdGVybmF0ZUhUTUwoY29uc3QgY2hhciogaHRtbCwgY29uc3QgY2hh
ciogY29udGVudFVSSSwgY29uc3QgY2hhciogYmFzZVVSSSk7Ci0gICAgdm9pZCBnb0JhY2soKTsK
LSAgICB2b2lkIGdvRm9yd2FyZCgpOwotICAgIHZvaWQgZ29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW0o
V2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSopOwotCi0gICAgdm9pZCBxdWl0TWFpbkxvb3AoKTsK
LSAgICB2b2lkIHF1aXRNYWluTG9vcEFmdGVyUHJvY2Vzc2luZ1BlbmRpbmdFdmVudHMoKTsKLSAg
ICB2b2lkIHdhaXQoZG91YmxlIHNlY29uZHMpOwotICAgIHZvaWQgd2FpdFVudGlsTG9hZEZpbmlz
aGVkKCk7Ci0gICAgdm9pZCB3YWl0VW50aWxUaXRsZUNoYW5nZWRUbyhjb25zdCBjaGFyKiBleHBl
Y3RlZFRpdGxlKTsKLSAgICB2b2lkIHdhaXRVbnRpbFRpdGxlQ2hhbmdlZCgpOwotICAgIHZvaWQg
c2hvd0luV2luZG93KEd0a1dpbmRvd1R5cGUgPSBHVEtfV0lORE9XX1BPUFVQKTsKLSAgICB2b2lk
IHNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZChHdGtXaW5kb3dUeXBlID0gR1RLX1dJTkRP
V19QT1BVUCk7Ci0gICAgdm9pZCByZXNpemVWaWV3KGludCB3aWR0aCwgaW50IGhlaWdodCk7Ci0g
ICAgdm9pZCBzZWxlY3RBbGwoKTsKLSAgICBjb25zdCBjaGFyKiBtYWluUmVzb3VyY2VEYXRhKHNp
emVfdCYgbWFpblJlc291cmNlRGF0YVNpemUpOwotCi0gICAgdm9pZCBtb3VzZU1vdmVUbyhpbnQg
eCwgaW50IHksIHVuc2lnbmVkIGludCBtb3VzZU1vZGlmaWVycyA9IDApOwotICAgIHZvaWQgY2xp
Y2tNb3VzZUJ1dHRvbihpbnQgeCwgaW50IHksIHVuc2lnbmVkIGludCBidXR0b24gPSAxLCB1bnNp
Z25lZCBpbnQgbW91c2VNb2RpZmllcnMgPSAwKTsKLSAgICB2b2lkIGtleVN0cm9rZSh1bnNpZ25l
ZCBpbnQga2V5VmFsLCB1bnNpZ25lZCBpbnQga2V5TW9kaWZpZXJzID0gMCk7Ci0KLSAgICBXZWJL
aXRKYXZhc2NyaXB0UmVzdWx0KiBydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoY29u
c3QgY2hhciogamF2YXNjcmlwdCwgR0Vycm9yKiopOwotICAgIFdlYktpdEphdmFzY3JpcHRSZXN1
bHQqIHJ1bkphdmFTY3JpcHRGcm9tR1Jlc291cmNlQW5kV2FpdFVudGlsRmluaXNoZWQoY29uc3Qg
Y2hhciogcmVzb3VyY2UsIEdFcnJvcioqKTsKLQotICAgIC8vIEphdmFzY3JpcHQgcmVzdWx0IGhl
bHBlcnMuCi0gICAgc3RhdGljIGNoYXIqIGphdmFzY3JpcHRSZXN1bHRUb0NTdHJpbmcoV2ViS2l0
SmF2YXNjcmlwdFJlc3VsdCopOwotICAgIHN0YXRpYyBkb3VibGUgamF2YXNjcmlwdFJlc3VsdFRv
TnVtYmVyKFdlYktpdEphdmFzY3JpcHRSZXN1bHQqKTsKLSAgICBzdGF0aWMgYm9vbCBqYXZhc2Ny
aXB0UmVzdWx0VG9Cb29sZWFuKFdlYktpdEphdmFzY3JpcHRSZXN1bHQqKTsKLSAgICBzdGF0aWMg
Ym9vbCBqYXZhc2NyaXB0UmVzdWx0SXNOdWxsKFdlYktpdEphdmFzY3JpcHRSZXN1bHQqKTsKLSAg
ICBzdGF0aWMgYm9vbCBqYXZhc2NyaXB0UmVzdWx0SXNVbmRlZmluZWQoV2ViS2l0SmF2YXNjcmlw
dFJlc3VsdCopOwotCi0gICAgY2Fpcm9fc3VyZmFjZV90KiBnZXRTbmFwc2hvdEFuZFdhaXRVbnRp
bFJlYWR5KFdlYktpdFNuYXBzaG90UmVnaW9uLCBXZWJLaXRTbmFwc2hvdE9wdGlvbnMpOwotCi0g
ICAgV2ViS2l0V2ViVmlldyogbV93ZWJWaWV3OwotICAgIEdNYWluTG9vcCogbV9tYWluTG9vcDsK
LSAgICBDU3RyaW5nIG1fYWN0aXZlVVJJOwotICAgIEd0a1dpZGdldCogbV9wYXJlbnRXaW5kb3c7
Ci0gICAgQ1N0cmluZyBtX2V4cGVjdGVkVGl0bGU7Ci0gICAgV2ViS2l0SmF2YXNjcmlwdFJlc3Vs
dCogbV9qYXZhc2NyaXB0UmVzdWx0OwotICAgIEdFcnJvcioqIG1famF2YXNjcmlwdEVycm9yOwot
ICAgIEdPd25QdHI8Y2hhcj4gbV9yZXNvdXJjZURhdGE7Ci0gICAgc2l6ZV90IG1fcmVzb3VyY2VE
YXRhU2l6ZTsKLSAgICBjYWlyb19zdXJmYWNlX3QqIG1fc3VyZmFjZTsKLQotcHJpdmF0ZToKLSAg
ICB2b2lkIGRvTW91c2VCdXR0b25FdmVudChHZGtFdmVudFR5cGUsIGludCwgaW50LCB1bnNpZ25l
ZCBpbnQsIHVuc2lnbmVkIGludCk7Ci19OwotCi0jZW5kaWYgLy8gV2ViVmlld1Rlc3RfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvcmVzb3VyY2Vz
L2xpbmstdGl0bGUuanMgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9y
ZXNvdXJjZXMvbGluay10aXRsZS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmM4
MjRkYS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0
cy9yZXNvdXJjZXMvbGluay10aXRsZS5qcworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXdp
bmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnV2ViS2l0TGluaycpLnRpdGxlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvcmVzb3VyY2VzL3Rl
c3QtY2VydC5wZW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9yZXNv
dXJjZXMvdGVzdC1jZXJ0LnBlbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjM0MzAx
Zi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9y
ZXNvdXJjZXMvdGVzdC1jZXJ0LnBlbQorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLS0t
LS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQotTUlJQjlqQ0NBVitnQXdJQkFnSUpBTGV1WEJvK3Z3
ejlNQTBHQ1NxR1NJYjNEUUVCQlFVQU1CUXhFakFRQmdOVgotQkFNTUNURXlOeTR3TGpBdU1UQWVG
dzB4TWpBM01USXhNalE0TWpSYUZ3MHlNakEzTVRBeE1qUTRNalJhTUJReAotRWpBUUJnTlZCQU1N
Q1RFeU55NHdMakF1TVRDQm56QU5CZ2txaGtpRzl3MEJBUUVGQUFPQmpRQXdnWWtDZ1lFQQotMFRV
ek9ReEhCSUtERDJta3VxK3RVOTJtUXZEWmc3M0IwRytOaHIyVDJHNk1iY0xxSXdqZzFRWXRCWldK
ODN0WgoteE1NRWZpd2VITEY4NVo5b2hhdkFneEpsS0c3WW12Wk83OUtrRnBtalYyVzVDVlJtMGVZ
TVBuem14TkNvYVlxbwotRExsMHpzSDZLWk9MUEt1L2ZYNGVEWDlYcEFQMWY4M2hXQjFVRkJtSEtO
OENBd0VBQWFOUU1FNHdIUVlEVlIwTwotQkJZRUZESHY1WlExQmRtaHpUc0RVRW9ZNTVFWHlVZEtN
QjhHQTFVZEl3UVlNQmFBRkRIdjVaUTFCZG1oelRzRAotVUVvWTU1RVh5VWRLTUF3R0ExVWRFd1FG
TUFNQkFmOHdEUVlKS29aSWh2Y05BUUVGQlFBRGdZRUFoM3FNQng3dgotalNvZE1mM095VHFUTEU3
ZGVMbm1uQ2VCVnBnenhSWkVvaXpjR3FZY2ppcU8yN2k1TjVaNktWUXNuSVRuTGl5QwotbVV0dVI1
S25GNjl1VEtVdzRtL3VnWmU1d2hqaWc1TXEybDQxMEtWSzZFZUc0dGRMbGZYUit3aTRVNUs0S2pQ
NgotcDRuY2hRVVhMYTJ6Y2JKbitWQmV4Sm42Lzl3ZGhyK0RVR1k9Ci0tLS0tLUVORCBDRVJUSUZJ
Q0FURS0tLS0tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9yZXNvdXJjZXMvdGVzdC1rZXkucGVtIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3Qta2V5LnBlbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggOTAzNjIyMi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9yZXNvdXJjZXMvdGVzdC1rZXkucGVtCisrKyAvZGV2L251bGwKQEAgLTEs
MTYgKzAsMCBAQAotLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCi1NSUlDZHdJQkFEQU5CZ2tx
aGtpRzl3MEJBUUVGQUFTQ0FtRXdnZ0pkQWdFQUFvR0JBTkUxTXprTVJ3U0NndzlwCi1wTHF2clZQ
ZHBrTHcyWU85d2RCdmpZYTlrOWh1akczQzZpTUk0TlVHTFFXVmlmTjdXY1REQkg0c0hoeXhmT1dm
Ci1hSVdyd0lNU1pTaHUySnIyVHUvU3BCYVpvMWRsdVFsVVp0SG1ERDU4NXNUUXFHbUtxQXk1ZE03
QitpbVRpenlyCi12MzErSGcxL1Y2UUQ5WC9ONFZnZFZCUVpoeWpmQWdNQkFBRUNnWUIyUXdPVXNS
c0lNcHJSd0o5dEpOZnZPN0c3Ci16NWkxL3pPcmx4UEM0akhNUEJuSUJsSUN3Z2NPaExJNG9PTGRy
NUg4UjEybjBWcW9UN0RSd1AzOTZpd2xKaXBGCi1pTzFoZURNbi84ejhMUEd3a0NLLytjazA0ck1E
a3N4V0lkTXdZS0JYdDlhaG5KL3hSTHpRMS8zQUppQUdub2U1Ci0vUUxYUXdlb2ZkNG1tZnNqS1FK
QkFPMkN3VDd1TVA2bk1qWGd0Vk1KcTVRUDhVYmVDUzFzRU9QSkpiSHVEeEpCCi0vSGVQUUhCanE0
a3pHNkNMNG9PN1QrNWZEdjRnK2ZJSUh6dVhlclowaW1zQ1FRRGhmbWlUSWM5T3VjRUlmZzYvCi1t
czBKaUtTbVdjK3FvaU9DdHJJTHVRdkZvTndKUmNpUUFOcWVKczZ3cGFEdmV2U1V2QkxHZkcvN2Iz
SHZhRTVYCi1pcUJkQWtCRVFJdnAycWNIdHVKTjYwb1FGN3BQclJrbnhVeWIyZThzbGpRWDRwSkFL
K2d5TDE5VUxNQXhpQmRMCi1Wb2Q4VllxTnRKRnBZKzZQcDlmWjF4anpiNkFMQWtFQTRKenJEQXcw
bFFYQSszV2R1VXc0aXhPYWRyMmxkeUcwCi0zNktlYmNEd3NmWk8xOG0wUTRVbVB6MEd5N3pnTjB3
eHp1b2NoYXcwVzYraVBVaVlLT2xFWFFKQkFNV1FyUGx1Ci1ycmlub1pTMmY4ZG9KOUJOTlVhK1JO
cE11ZzZVWGM1NXFvVUpseWlYRWgrdHU0QWFNT3R4dUdJeUMwc0FjdXc2Ci1YZEFQVlBYS2Q3TW5l
NzA9Ci0tLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9yZXNvdXJjZXMvd2Via2l0Mmd0ay10ZXN0cy5ncmVz
b3VyY2UueG1sIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvcmVzb3Vy
Y2VzL3dlYmtpdDJndGstdGVzdHMuZ3Jlc291cmNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNGYxZTVhNi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9yZXNvdXJjZXMvd2Via2l0Mmd0ay10ZXN0cy5ncmVzb3VyY2UueG1sCisr
KyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5n
PSJVVEYtOCI/PgotPGdyZXNvdXJjZXM+Ci0gIDxncmVzb3VyY2UgcHJlZml4PSIvb3JnL3dlYmtp
dC93ZWJraXQyZ3RrL3Rlc3RzLyI+Ci0gICAgPGZpbGUgYWxpYXM9ImxpbmstdGl0bGUuanMiPlNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL3Jlc291cmNlcy9saW5rLXRpdGxl
LmpzPC9maWxlPgotICA8L2dyZXNvdXJjZT4KLTwvZ3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL1Rv
b2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAzOTNjNzBhLi5mMjhlMTQwIDEw
MDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUg
KzEsNzc1IEBACiAyMDE0LTAxLTAzICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdh
bGlhLmNvbT4KIAorICAgICAgICBbR1RLXSBNb3ZlIGFsbCBHVEsvR09iamVjdCB1bml0IHRlc3Rz
IHRvIFRvb2xzL1Rlc3RXZWJLaXRBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEyNjM0MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogU2NyaXB0cy9ydW4tZ3RrLXRlc3RzOgorICAgICAgICAoVGVzdFJ1
bm5lcik6CisgICAgICAgIChUZXN0UnVubmVyLl9faW5pdF9fKToKKyAgICAgICAgKFRlc3RSdW5u
ZXIuX3Rlc3RfcHJvZ3JhbXNfYmFzZV9kaXIpOgorICAgICAgICAoVGVzdFJ1bm5lci5fZ2V0X3Rl
c3RzKToKKyAgICAgICAgKFRlc3RSdW5uZXIuX3J1bl90ZXN0KToKKyAgICAgICAgKFRlc3RSdW5u
ZXIucnVuX3Rlc3RzKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIu
cHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyX3VuaXR0ZXN0LnB5
OgorICAgICAgICAoQ2hlY2tlckRpc3BhdGNoZXJTa2lwVGVzdC50ZXN0X3Nob3VsZF9za2lwX3dp
dGhfd2FybmluZyk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9HTlVtYWtlZmlsZS5hbToKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvQWNjZXNzaWJpbGl0eVRlc3RT
ZXJ2ZXIuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvQWNjZXNzaWJpbGl0eVRlc3RTZXJ2ZXIuY3BwLgorICAgICAgICAobG9hZENoYW5nZWRD
YWxsYmFjayk6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdDJHdGsvRE9NRE9NV2luZG93VGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
RE9NRE9NV2luZG93VGVzdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdERPTURPTVdpbmRvd1Rl
c3Q6OndlYlBhZ2VGcm9tQXJncyk6CisgICAgICAgIChXZWJLaXRET01ET01XaW5kb3dUZXN0Ojp0
ZXN0U2lnbmFscyk6CisgICAgICAgIChXZWJLaXRET01ET01XaW5kb3dUZXN0Ojp0ZXN0RGlzcGF0
Y2hFdmVudCk6CisgICAgICAgIChXZWJLaXRET01ET01XaW5kb3dUZXN0Ojp0ZXN0R2V0Q29tcHV0
ZWRTdHlsZSk6CisgICAgICAgIChXZWJLaXRET01ET01XaW5kb3dUZXN0OjpydW5UZXN0KToKKyAg
ICAgICAgKHJlZ2lzdGVyVGVzdHMpOgorICAgICAgICAobG9hZGVkQ2FsbGJhY2spOgorICAgICAg
ICAoY2xpY2tlZENhbGxiYWNrKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dDJHdGsvRE9NTm9kZVRlc3QuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvRE9NTm9kZVRlc3QuY3BwLgorICAgICAgICAoV2ViS2l0RE9NTm9k
ZVRlc3Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXRET01Ob2RlVGVzdDo6d2ViUGFnZUZyb21B
cmdzKToKKyAgICAgICAgKFdlYktpdERPTU5vZGVUZXN0Ojp0ZXN0SGllcmFyY2h5TmF2aWdhdGlv
bik6CisgICAgICAgIChXZWJLaXRET01Ob2RlVGVzdDo6dGVzdEluc2VydGlvbik6CisgICAgICAg
IChXZWJLaXRET01Ob2RlVGVzdDo6dGVzdFRhZ05hbWVzKToKKyAgICAgICAgKFdlYktpdERPTU5v
ZGVUZXN0OjpydW5UZXN0KToKKyAgICAgICAgKHJlZ2lzdGVyVGVzdHMpOgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9GcmFtZVRlc3QuY3BwOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvRnJhbWVUZXN0LmNwcC4KKyAg
ICAgICAgKFdlYktpdEZyYW1lVGVzdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdEZyYW1lVGVz
dDo6d2ViUGFnZUZyb21BcmdzKToKKyAgICAgICAgKFdlYktpdEZyYW1lVGVzdDo6dGVzdE1haW5G
cmFtZSk6CisgICAgICAgIChXZWJLaXRGcmFtZVRlc3Q6OnRlc3RVUkkpOgorICAgICAgICAoV2Vi
S2l0RnJhbWVUZXN0Ojp0ZXN0SmF2YVNjcmlwdENvbnRleHQpOgorICAgICAgICAoV2ViS2l0RnJh
bWVUZXN0OjpydW5UZXN0KToKKyAgICAgICAgKHJlZ2lzdGVyVGVzdHMpOgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9JbnNwZWN0b3JUZXN0U2VydmVyLmNwcDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0luc3BlY3Rv
clRlc3RTZXJ2ZXIuY3BwLgorICAgICAgICAobG9hZENoYW5nZWRDYWxsYmFjayk6CisgICAgICAg
IChtYWluKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdEF1
dGhlbnRpY2F0aW9uLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL1Rlc3RBdXRoZW50aWNhdGlvbi5jcHAuCisgICAgICAgICh0ZXN0V2ViVmll
d0F1dGhlbnRpY2F0aW9uUmVxdWVzdCk6CisgICAgICAgICh0ZXN0V2ViVmlld0F1dGhlbnRpY2F0
aW9uQ2FuY2VsKToKKyAgICAgICAgKHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25Mb2FkQ2FuY2Vs
bGVkKToKKyAgICAgICAgKHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25GYWlsdXJlKToKKyAgICAg
ICAgKHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25Ob0NyZWRlbnRpYWwpOgorICAgICAgICAodGVz
dFdlYlZpZXdBdXRoZW50aWNhdGlvblN0b3JhZ2UpOgorICAgICAgICAodGVzdFdlYlZpZXdBdXRo
ZW50aWNhdGlvblN1Y2Nlc3MpOgorICAgICAgICAoc2VydmVyQ2FsbGJhY2spOgorICAgICAgICAo
YmVmb3JlQWxsKToKKyAgICAgICAgKGFmdGVyQWxsKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdDJHdGsvVGVzdEJhY2tGb3J3YXJkTGlzdC5jcHA6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0QmFja0ZvcndhcmRMaXN0
LmNwcC4KKyAgICAgICAgKHNlcnZlckNhbGxiYWNrKToKKyAgICAgICAgKHRlc3RCYWNrRm9yd2Fy
ZExpc3ROYXZpZ2F0aW9uKToKKyAgICAgICAgKHRlc3RCYWNrRm9yd2FyZExpc3RMaW1pdEFuZENh
Y2hlKToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAgIChhZnRlckFsbCk6CisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RDb250ZXh0TWVudS5jcHA6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0Q29u
dGV4dE1lbnUuY3BwLgorICAgICAgICAodGVzdENvbnRleHRNZW51RGVmYXVsdE1lbnUpOgorICAg
ICAgICAodGVzdENvbnRleHRNZW51UG9wdWxhdGVNZW51KToKKyAgICAgICAgKHRlc3RDb250ZXh0
TWVudUN1c3RvbU1lbnUpOgorICAgICAgICAodGVzdENvbnRleHRNZW51RGlzYWJsZU1lbnUpOgor
ICAgICAgICAodGVzdENvbnRleHRNZW51U3ViTWVudSk6CisgICAgICAgICh0ZXN0Q29udGV4dE1l
bnVEaXNtaXNzZWQpOgorICAgICAgICAodGVzdENvbnRleHRNZW51U21hcnRTZXBhcmF0b3JzKToK
KyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAgIChhZnRlckFsbCk6CisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RDb29raWVNYW5hZ2VyLmNwcDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RDb29raWVN
YW5hZ2VyLmNwcC4KKyAgICAgICAgKHRlc3RDb29raWVNYW5hZ2VyQWNjZXB0UG9saWN5KToKKyAg
ICAgICAgKHRlc3RDb29raWVNYW5hZ2VyRGVsZXRlQ29va2llcyk6CisgICAgICAgICh0ZXN0Q29v
a2llTWFuYWdlckNvb2tpZXNDaGFuZ2VkKToKKyAgICAgICAgKHRlc3RDb29raWVNYW5hZ2VyUGVy
c2lzdGVudFN0b3JhZ2UpOgorICAgICAgICAoc2VydmVyQ2FsbGJhY2spOgorICAgICAgICAoYmVm
b3JlQWxsKToKKyAgICAgICAgKGFmdGVyQWxsKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdDJHdGsvVGVzdERPTURPTVdpbmRvdy5jcHA6IEFkZGVkLgorICAgICAgICAoc2ln
bmFsc05vdGlmeUNhbGxiYWNrKToKKyAgICAgICAgKGRpc3BhdGNoRXZlbnROb3RpZnlDYWxsYmFj
ayk6CisgICAgICAgICh0ZXN0V2ViS2l0RE9NRE9NV2luZG93U2lnbmFscyk6CisgICAgICAgICh0
ZXN0V2ViS2l0RE9NRE9NV2luZG93RGlzcGF0Y2hFdmVudCk6CisgICAgICAgICh0ZXN0V2ViS2l0
RE9NRE9NV2luZG93R2V0Q29tcHV0ZWRTdHlsZSk6CisgICAgICAgIChiZWZvcmVBbGwpOgorICAg
ICAgICAoYWZ0ZXJBbGwpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0
ay9UZXN0RE9NTm9kZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9UZXN0RE9NTm9kZS5jcHAuCisgICAgICAgICh0ZXN0V2ViS2l0RE9NTm9k
ZUhpZXJhcmNoeU5hdmlnYXRpb24pOgorICAgICAgICAodGVzdFdlYktpdERPTU5vZGVJbnNlcnRp
b24pOgorICAgICAgICAodGVzdFdlYktpdERPTU5vZGVUYWdOYW1lcyk6CisgICAgICAgIChiZWZv
cmVBbGwpOgorICAgICAgICAoYWZ0ZXJBbGwpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Mkd0ay9UZXN0RG93bmxvYWRzLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3REb3dubG9hZHMuY3BwLgorICAgICAgICAo
dGVzdERvd25sb2FkTG9jYWxGaWxlKToKKyAgICAgICAgKHRlc3REb3dubG9hZExvY2FsRmlsZUVy
cm9yKToKKyAgICAgICAgKHNlcnZlckNhbGxiYWNrKToKKyAgICAgICAgKHRlc3REb3dubG9hZFJl
bW90ZUZpbGUpOgorICAgICAgICAodGVzdERvd25sb2FkUmVtb3RlRmlsZUVycm9yKToKKyAgICAg
ICAgKHRlc3RXZWJWaWV3RG93bmxvYWRVUkkpOgorICAgICAgICAodGVzdFBvbGljeVJlc3BvbnNl
RG93bmxvYWQpOgorICAgICAgICAoYmVmb3JlQWxsKToKKyAgICAgICAgKGFmdGVyQWxsKToKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdEZyYW1lLmNwcDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RGcmFt
ZS5jcHAuCisgICAgICAgICh3ZWJraXRGcmFtZVRlc3RSdW4pOgorICAgICAgICAodGVzdFdlYktp
dEZyYW1lTWFpbkZyYW1lKToKKyAgICAgICAgKHRlc3RXZWJLaXRGcmFtZVVSSSk6CisgICAgICAg
ICh0ZXN0V2ViS2l0RnJhbWVKYXZhU2NyaXB0Q29udGV4dCk6CisgICAgICAgIChiZWZvcmVBbGwp
OgorICAgICAgICAoYWZ0ZXJBbGwpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Mkd0ay9UZXN0SW5zcGVjdG9yLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RJbnNwZWN0b3IuY3BwLgorICAgICAgICAodGVzdElu
c3BlY3RvckRlZmF1bHQpOgorICAgICAgICAodGVzdEluc3BlY3Rvck1hbnVhbEF0dGFjaERldGFj
aCk6CisgICAgICAgICh0ZXN0SW5zcGVjdG9yQ3VzdG9tQ29udGFpbmVyRGVzdHJveWVkKToKKyAg
ICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAgIChhZnRlckFsbCk6CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RJbnNwZWN0b3JTZXJ2ZXIuY3BwOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdEluc3BlY3Rv
clNlcnZlci5jcHAuCisgICAgICAgIChzdG9wVGVzdFNlcnZlcik6CisgICAgICAgIChzaWdBYm9y
dEhhbmRsZXIpOgorICAgICAgICAodGVzdFNlcnZlck1vbml0b3JUaHJlYWRGdW5jKToKKyAgICAg
ICAgKHN0YXJ0VGVzdFNlcnZlck1vbml0b3IpOgorICAgICAgICAoc3RhcnRUZXN0U2VydmVyKToK
KyAgICAgICAgKHRlc3RJbnNwZWN0b3JTZXJ2ZXJQYWdlTGlzdCk6CisgICAgICAgICh0ZXN0UmVt
b3RlRGVidWdnaW5nTWVzc2FnZSk6CisgICAgICAgIChvcGVuUmVtb3RlRGVidWdnaW5nU2Vzc2lv
bik6CisgICAgICAgIChzZW5kSW5jb21wbGV0ZVJlcXVlc3QpOgorICAgICAgICAoYmVmb3JlQWxs
KToKKyAgICAgICAgKGFmdGVyQWxsKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdDJHdGsvVGVzdExvYWRlckNsaWVudC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0TG9hZGVyQ2xpZW50LmNwcC4KKyAgICAgICAg
KHRlc3RMb2FkaW5nU3RhdHVzKToKKyAgICAgICAgKHRlc3RMb2FkaW5nRXJyb3IpOgorICAgICAg
ICAoYXNzZXJ0Tm9ybWFsTG9hZEhhcHBlbmVkKToKKyAgICAgICAgKHRlc3RMb2FkSHRtbCk6Cisg
ICAgICAgICh0ZXN0TG9hZEFsdGVybmF0ZUhUTUwpOgorICAgICAgICAodGVzdExvYWRQbGFpblRl
eHQpOgorICAgICAgICAodGVzdExvYWRSZXF1ZXN0KToKKyAgICAgICAgKExvYWRTdG9wVHJhY2tp
bmdUZXN0Ojpsb2FkQ29tbWl0dGVkKToKKyAgICAgICAgKExvYWRTdG9wVHJhY2tpbmdUZXN0Ojps
b2FkRmFpbGVkKToKKyAgICAgICAgKHRlc3RMb2FkQ2FuY2VsbGVkKToKKyAgICAgICAgKHRlc3RX
ZWJWaWV3VGl0bGUpOgorICAgICAgICAodGVzdFdlYlZpZXdSZWxvYWQpOgorICAgICAgICAodGVz
dExvYWRQcm9ncmVzcyk6CisgICAgICAgICh0ZXN0V2ViVmlld0hpc3RvcnlMb2FkKToKKyAgICAg
ICAgKHRlc3RXZWJWaWV3QWN0aXZlVVJJKToKKyAgICAgICAgKHRlc3RXZWJWaWV3SXNMb2FkaW5n
KToKKyAgICAgICAgKHRlc3RXZWJQYWdlVVJJKToKKyAgICAgICAgKHRlc3RVUklSZXF1ZXN0SFRU
UEhlYWRlcnMpOgorICAgICAgICAoc2VydmVyQ2FsbGJhY2spOgorICAgICAgICAoYmVmb3JlQWxs
KToKKyAgICAgICAgKGFmdGVyQWxsKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdDJHdGsvVGVzdFByaW50aW5nLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RQcmludGluZy5jcHAuCisgICAgICAgICh0ZXN0UHJp
bnRPcGVyYXRpb25QcmludFNldHRpbmdzKToKKyAgICAgICAgKHdlYlZpZXdQcmludENhbGxiYWNr
KToKKyAgICAgICAgKHRlc3RXZWJWaWV3UHJpbnQpOgorICAgICAgICAodGVzdFByaW50T3BlcmF0
aW9uUHJpbnQpOgorICAgICAgICAodGVzdFByaW50T3BlcmF0aW9uRXJyb3JzKToKKyAgICAgICAg
KGJlZm9yZUFsbCk6CisgICAgICAgIChhZnRlckFsbCk6CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RSZXNvdXJjZXMuY3BwOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFJlc291cmNlcy5jcHAuCisgICAg
ICAgICh0ZXN0V2ViVmlld1Jlc291cmNlcyk6CisgICAgICAgICh0ZXN0V2ViUmVzb3VyY2VMb2Fk
aW5nKToKKyAgICAgICAgKHRlc3RXZWJSZXNvdXJjZVJlc3BvbnNlKToKKyAgICAgICAgKHRlc3RX
ZWJSZXNvdXJjZU1pbWVUeXBlKToKKyAgICAgICAgKHRlc3RXZWJSZXNvdXJjZVN1Z2dlc3RlZEZp
bGVuYW1lKToKKyAgICAgICAgKHRlc3RXZWJSZXNvdXJjZUFjdGl2ZVVSSSk6CisgICAgICAgICh0
ZXN0V2ViUmVzb3VyY2VHZXREYXRhKToKKyAgICAgICAgKHRlc3RXZWJWaWV3UmVzb3VyY2VzSGlz
dG9yeUNhY2hlKToKKyAgICAgICAgKHRlc3RXZWJSZXNvdXJjZVNlbmRSZXF1ZXN0KToKKyAgICAg
ICAgKGFkZENhY2hlSFRUUEhlYWRlcnNUb1Jlc3BvbnNlKToKKyAgICAgICAgKHNlcnZlckNhbGxi
YWNrKToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAgIChhZnRlckFsbCk6CisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RTU0wuY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFNTTC5jcHAuCisg
ICAgICAgICh0ZXN0U1NMKToKKyAgICAgICAgKHRlc3RJbnNlY3VyZUNvbnRlbnQpOgorICAgICAg
ICAodGVzdFRMU0Vycm9yc1BvbGljeSk6CisgICAgICAgICh0ZXN0TG9hZEZhaWxlZFdpdGhUTFNF
cnJvcnMpOgorICAgICAgICAoaHR0cHNTZXJ2ZXJDYWxsYmFjayk6CisgICAgICAgIChodHRwU2Vy
dmVyQ2FsbGJhY2spOgorICAgICAgICAoYmVmb3JlQWxsKToKKyAgICAgICAgKGFmdGVyQWxsKToK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFVJQ2xpZW50LmNw
cDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rl
c3RVSUNsaWVudC5jcHAuCisgICAgICAgICh0ZXN0V2ViVmlld0NyZWF0ZVJlYWR5Q2xvc2UpOgor
ICAgICAgICAoY2hlY2tNaW1lVHlwZUZvckZpbHRlcik6CisgICAgICAgICh0ZXN0V2ViVmlld0Fs
bG93TW9kYWxEaWFsb2dzKToKKyAgICAgICAgKHRlc3RXZWJWaWV3RGlzYWxsb3dNb2RhbERpYWxv
Z3MpOgorICAgICAgICAodGVzdFdlYlZpZXdKYXZhU2NyaXB0RGlhbG9ncyk6CisgICAgICAgICh0
ZXN0V2ViVmlld1dpbmRvd1Byb3BlcnRpZXMpOgorICAgICAgICAodGVzdFdlYlZpZXdNb3VzZVRh
cmdldCk6CisgICAgICAgICh0ZXN0V2ViVmlld1Blcm1pc3Npb25SZXF1ZXN0cyk6CisgICAgICAg
ICh0ZXN0V2ViVmlld0ZpbGVDaG9vc2VyUmVxdWVzdCk6CisgICAgICAgIChiZWZvcmVBbGwpOgor
ICAgICAgICAoYWZ0ZXJBbGwpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Mkd0ay9UZXN0V2ViRXh0ZW5zaW9ucy5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViRXh0ZW5zaW9ucy5jcHAuCisgICAgICAgICh0
ZXN0V2ViRXh0ZW5zaW9uR2V0VGl0bGUpOgorICAgICAgICAoZG9jdW1lbnRMb2FkZWRDYWxsYmFj
ayk6CisgICAgICAgICh0ZXN0RG9jdW1lbnRMb2FkZWRTaWduYWwpOgorICAgICAgICAod2ViUHJv
Y2Vzc0NyYXNoZWRDYWxsYmFjayk6CisgICAgICAgICh0ZXN0V2ViS2l0V2ViVmlld1Byb2Nlc3ND
cmFzaGVkKToKKyAgICAgICAgKHRlc3RXZWJFeHRlbnNpb25XaW5kb3dPYmplY3RDbGVhcmVkKToK
KyAgICAgICAgKHNjcmlwdERpYWxvZ0NhbGxiYWNrKToKKyAgICAgICAgKHJ1bkphdmFTY3JpcHRJ
bklzb2xhdGVkV29ybGRGaW5pc2hlZENhbGxiYWNrKToKKyAgICAgICAgKHRlc3RXZWJFeHRlbnNp
b25Jc29sYXRlZFdvcmxkKToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAgIChhZnRlckFs
bCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRB
Y2Nlc3NpYmlsaXR5LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5LmNwcC4KKyAgICAgICAgKHN0b3BU
ZXN0U2VydmVyKToKKyAgICAgICAgKHNpZ0Fib3J0SGFuZGxlcik6CisgICAgICAgICh0ZXN0U2Vy
dmVyTW9uaXRvclRocmVhZEZ1bmMpOgorICAgICAgICAoc3RhcnRUZXN0U2VydmVyTW9uaXRvcik6
CisgICAgICAgIChzdGFydFRlc3RTZXJ2ZXIpOgorICAgICAgICAoY2hlY2tBdHNwaUFjY2Vzc2li
bGUpOgorICAgICAgICAoZmluZFRlc3RTZXJ2ZXJBcHBsaWNhdGlvbik6CisgICAgICAgICh0ZXN0
QXRzcGlCYXNpY0hpZXJhcmNoeSk6CisgICAgICAgIChiZWZvcmVBbGwpOgorICAgICAgICAoYWZ0
ZXJBbGwpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2Vi
S2l0RmF2aWNvbkRhdGFiYXNlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2UuY3BwLgorICAgICAg
ICAoc2VydmVyQ2FsbGJhY2spOgorICAgICAgICAodGVzdE5vdEluaXRpYWxpemVkKToKKyAgICAg
ICAgKHRlc3RTZXREaXJlY3RvcnkpOgorICAgICAgICAodGVzdENsZWFyRGF0YWJhc2UpOgorICAg
ICAgICAodGVzdEdldEZhdmljb24pOgorICAgICAgICAodGVzdEdldEZhdmljb25VUkkpOgorICAg
ICAgICAodGVzdFdlYlZpZXdGYXZpY29uKToKKyAgICAgICAgKHRlc3RGYXZpY29uRGF0YWJhc2Up
OgorICAgICAgICAoYmVmb3JlQWxsKToKKyAgICAgICAgKHdlYmtpdEZhdmljb25EYXRhYmFzZUZp
bmFsaXplZENhbGxiYWNrKToKKyAgICAgICAgKGFmdGVyQWxsKToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdEZpbmRDb250cm9sbGVyLmNwcDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJL
aXRGaW5kQ29udHJvbGxlci5jcHAuCisgICAgICAgICh0ZXN0RmluZENvbnRyb2xsZXJUZXh0Rm91
bmQpOgorICAgICAgICAodGVzdEZpbmRDb250cm9sbGVyVGV4dE5vdEZvdW5kKToKKyAgICAgICAg
KHRlc3RGaW5kQ29udHJvbGxlck1hdGNoQ291bnQpOgorICAgICAgICAodGVzdEZpbmRDb250cm9s
bGVyTWF4TWF0Y2hDb3VudCk6CisgICAgICAgICh0ZXN0RmluZENvbnRyb2xsZXJOZXh0KToKKyAg
ICAgICAgKHRlc3RGaW5kQ29udHJvbGxlclByZXZpb3VzKToKKyAgICAgICAgKHRlc3RGaW5kQ29u
dHJvbGxlckNvdW50ZWRNYXRjaGVzKToKKyAgICAgICAgKHRlc3RGaW5kQ29udHJvbGxlck9wdGlv
bnMpOgorICAgICAgICAodGVzdEZpbmRDb250cm9sbGVySGlkZSk6CisgICAgICAgICh0ZXN0Rmlu
ZENvbnRyb2xsZXJJbnN0YW5jZSk6CisgICAgICAgICh0ZXN0RmluZENvbnRyb2xsZXJHZXR0ZXJz
KToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAgIChhZnRlckFsbCk6CisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRQb2xpY3lDbGllbnQuY3Bw
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVz
dFdlYktpdFBvbGljeUNsaWVudC5jcHAuCisgICAgICAgICh0ZXN0TmF2aWdhdGlvblBvbGljeSk6
CisgICAgICAgICh0ZXN0UmVzcG9uc2VQb2xpY3kpOgorICAgICAgICAoY3JlYXRlQ2FsbGJhY2sp
OgorICAgICAgICAodGVzdE5ld1dpbmRvd1BvbGljeSk6CisgICAgICAgIChzZXJ2ZXJDYWxsYmFj
ayk6CisgICAgICAgIChiZWZvcmVBbGwpOgorICAgICAgICAoYWZ0ZXJBbGwpOgorICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0U2V0dGluZ3MuY3BwOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdl
YktpdFNldHRpbmdzLmNwcC4KKyAgICAgICAgKHRlc3RXZWJLaXRTZXR0aW5ncyk6CisgICAgICAg
ICh0ZXN0V2ViS2l0U2V0dGluZ3NOZXdXaXRoU2V0dGluZ3MpOgorICAgICAgICAoY29udmVydFdl
YlZpZXdNYWluUmVzb3VyY2VEYXRhVG9DU3RyaW5nKToKKyAgICAgICAgKGFzc2VydFRoYXRVc2Vy
QWdlbnRJc1NlbnRJbkhlYWRlcnMpOgorICAgICAgICAodGVzdFdlYktpdFNldHRpbmdzVXNlckFn
ZW50KToKKyAgICAgICAgKHNlcnZlckNhbGxiYWNrKToKKyAgICAgICAgKGJlZm9yZUFsbCk6Cisg
ICAgICAgIChhZnRlckFsbCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQy
R3RrL1Rlc3RXZWJLaXRWZXJzaW9uLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRWZXJzaW9uLmNwcC4KKyAgICAgICAgKHRl
c3RXZWJLaXRWZXJzaW9uKToKKyAgICAgICAgKHRlc3RXZWJLaXRDaGVja1ZlcnNpb24pOgorICAg
ICAgICAoYmVmb3JlQWxsKToKKyAgICAgICAgKGFmdGVyQWxsKToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFdlYkNvbnRleHQuY3BwOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdl
YkNvbnRleHQuY3BwLgorICAgICAgICAodGVzdFdlYkNvbnRleHREZWZhdWx0KToKKyAgICAgICAg
KHRlc3RXZWJDb250ZXh0R2V0UGx1Z2lucyk6CisgICAgICAgICh0ZXN0V2ViQ29udGV4dFVSSVNj
aGVtZSk6CisgICAgICAgICh0ZXN0V2ViQ29udGV4dFNwZWxsQ2hlY2tlcik6CisgICAgICAgICh0
ZXN0V2ViQ29udGV4dExhbmd1YWdlcyk6CisgICAgICAgIChzZXJ2ZXJDYWxsYmFjayk6CisgICAg
ICAgICh0ZXN0V2ViQ29udGV4dFNlY3VyaXR5UG9saWN5KToKKyAgICAgICAgKGJlZm9yZUFsbCk6
CisgICAgICAgIChhZnRlckFsbCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXQyR3RrL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcC4KKyAgICAgICAg
KHRlc3RXZWJWaWV3RGVmYXVsdENvbnRleHQpOgorICAgICAgICAodGVzdFdlYlZpZXdDdXN0b21D
aGFyc2V0KToKKyAgICAgICAgKHRlc3RXZWJWaWV3U2V0dGluZ3MpOgorICAgICAgICAodGVzdFdl
YlZpZXdab29tTGV2ZWwpOgorICAgICAgICAodGVzdFdlYlZpZXdSdW5KYXZhU2NyaXB0KToKKyAg
ICAgICAgKHRlc3RXZWJWaWV3RnVsbFNjcmVlbik6CisgICAgICAgICh0ZXN0V2ViVmlld0NhblNo
b3dNSU1FVHlwZSk6CisgICAgICAgICh0ZXN0V2ViVmlld1N1Ym1pdEZvcm0pOgorICAgICAgICAo
dGVzdFdlYlZpZXdTYXZlKToKKyAgICAgICAgKHRlc3RXZWJWaWV3TW9kZSk6CisgICAgICAgICh0
ZXN0V2ViVmlld1BhZ2VWaXNpYmlsaXR5KToKKyAgICAgICAgKHRlc3RXZWJWaWV3U25hcHNob3Qp
OgorICAgICAgICAoYmVmb3JlQWxsKToKKyAgICAgICAgKGFmdGVyQWxsKToKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFdlYlZpZXdHcm91cC5jcHA6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0
V2ViS2l0V2ViVmlld0dyb3VwLmNwcC4KKyAgICAgICAgKHRlc3RXZWJWaWV3R3JvdXBEZWZhdWx0
KToKKyAgICAgICAgKHRlc3RXZWJWaWV3R3JvdXBOZXdHcm91cCk6CisgICAgICAgICh0ZXN0V2Vi
Vmlld05ld1dpdGhHcm91cCk6CisgICAgICAgICh0ZXN0V2ViVmlld0dyb3VwU2V0dGluZ3MpOgor
ICAgICAgICAoaXNTdHlsZVNoZWV0SW5qZWN0ZWRGb3JVUkxBdFBhdGgpOgorICAgICAgICAoZmls
bFVSTExpc3RGcm9tUGF0aHMpOgorICAgICAgICAocmVtb3ZlT2xkSW5qZWN0ZWRTdHlsZVNoZWV0
c0FuZFJlc2V0TGlzdHMpOgorICAgICAgICAodGVzdFdlYlZpZXdHcm91cEluamVjdGVkU3R5bGVT
aGVldCk6CisgICAgICAgIChzZXJ2ZXJDYWxsYmFjayk6CisgICAgICAgIChiZWZvcmVBbGwpOgor
ICAgICAgICAoYWZ0ZXJBbGwpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Mkd0ay9UZXN0V2ViVmlld0VkaXRvci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViVmlld0VkaXRvci5jcHAuCisgICAgICAgICh0
ZXN0V2ViVmlld0VkaXRvckN1dENvcHlQYXN0ZU5vbkVkaXRhYmxlKToKKyAgICAgICAgKHRlc3RX
ZWJWaWV3RWRpdG9yQ3V0Q29weVBhc3RlRWRpdGFibGUpOgorICAgICAgICAodGVzdFdlYlZpZXdF
ZGl0b3JTZWxlY3RBbGxOb25FZGl0YWJsZSk6CisgICAgICAgICh0ZXN0V2ViVmlld0VkaXRvclNl
bGVjdEFsbEVkaXRhYmxlKToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAgIChhZnRlckFs
bCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1dlYkV4dGVuc2lv
blRlc3QuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvV2ViRXh0ZW5zaW9uVGVzdC5jcHAuCisgICAgICAgIChEZWxheWVkU2lnbmFsOjpEZWxh
eWVkU2lnbmFsKToKKyAgICAgICAgKGVtaXREb2N1bWVudExvYWRlZCk6CisgICAgICAgIChkb2N1
bWVudExvYWRlZENhbGxiYWNrKToKKyAgICAgICAgKGVtaXRVUklDaGFuZ2VkKToKKyAgICAgICAg
KHVyaUNoYW5nZWRDYWxsYmFjayk6CisgICAgICAgIChzZW5kUmVxdWVzdENhbGxiYWNrKToKKyAg
ICAgICAgKHBhZ2VDcmVhdGVkQ2FsbGJhY2spOgorICAgICAgICAoZWNob0NhbGxiYWNrKToKKyAg
ICAgICAgKHdpbmRvd09iamVjdENsZWFyZWQpOgorICAgICAgICAoZ2V0V2ViUGFnZSk6CisgICAg
ICAgIChtZXRob2RDYWxsQ2FsbGJhY2spOgorICAgICAgICAod2Via2l0X3dlYl9leHRlbnNpb25f
aW5pdGlhbGl6ZSk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1dl
YlByb2Nlc3NUZXN0LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL1dlYlByb2Nlc3NUZXN0LmNwcC4KKyAgICAgICAgKHRlc3RzTWFwKToKKyAg
ICAgICAgKFdlYlByb2Nlc3NUZXN0OjphZGQpOgorICAgICAgICAoV2ViUHJvY2Vzc1Rlc3Q6OmNy
ZWF0ZSk6CisgICAgICAgIChtZXRob2RDYWxsQ2FsbGJhY2spOgorICAgICAgICAod2Via2l0X3dl
Yl9leHRlbnNpb25faW5pdGlhbGl6ZSk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyR3RrL1dlYlByb2Nlc3NUZXN0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJQcm9jZXNzVGVzdC5oLgorICAgICAgICAoV2ViUHJv
Y2Vzc1Rlc3Q6On5XZWJQcm9jZXNzVGVzdCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXQyR3RrL3Jlc291cmNlcy9saW5rLXRpdGxlLmpzOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvcmVzb3VyY2VzL2xpbmstdGl0bGUuanMu
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL3Jlc291cmNlcy90ZXN0
LWNlcnQucGVtOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvcmVzb3VyY2VzL3Rlc3QtY2VydC5wZW0uCisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXQyR3RrL3Jlc291cmNlcy90ZXN0LWtleS5wZW06IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9yZXNvdXJjZXMvdGVzdC1rZXkucGVt
LgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9yZXNvdXJjZXMvd2Vi
a2l0Mmd0ay10ZXN0cy5ncmVzb3VyY2UueG1sOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvcmVzb3VyY2VzL3dlYmtpdDJndGstdGVzdHMuZ3Jlc291
cmNlLnhtbC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9yZXNvdXJj
ZXMvYmxhbmsuaWNvOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvcmVzb3Vy
Y2VzL2JsYW5rLmljby4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9y
ZXNvdXJjZXMvdGVzdC5odG1sOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9ndGsvdGVzdHMv
cmVzb3VyY2VzL3Rlc3QuaHRtbC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dEd0ay9yZXNvdXJjZXMvdGVzdC5vZ2c6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2d0ay90
ZXN0cy9yZXNvdXJjZXMvdGVzdC5vZ2cuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRHdGsvcmVzb3VyY2VzL3Rlc3QucGRmOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9n
dGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3QucGRmLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0R3RrL3Jlc291cmNlcy90ZXN0LnR4dDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJL
aXQvZ3RrL3Rlc3RzL3Jlc291cmNlcy90ZXN0LnR4dC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdEd0ay90ZXN0X3V0aWxzLmM6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
L2d0ay90ZXN0cy90ZXN0X3V0aWxzLmMuCisgICAgICAgICh0ZXN0dXRpbHNfcmVsYXRpdmVfY2hk
aXIpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RfdXRpbHMu
aDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RfdXRpbHMuaC4KKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0YXBwbGljYXRpb25jYWNo
ZS5jOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGFwcGxpY2F0aW9u
Y2FjaGUuYy4KKyAgICAgICAgKHRlc3RfYXBwbGljYXRpb25fY2FjaGVfbWF4aW11bV9zaXplKToK
KyAgICAgICAgKG1haW4pOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3Rr
L3Rlc3RhdGsuYzogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhdGsu
Yy4KKyAgICAgICAgKGdldFdlYkFyZWFPYmplY3QpOgorICAgICAgICAodGV4dENhcmV0TW92ZWRD
YWxsYmFjayk6CisgICAgICAgICh0ZXN0V2Via2l0QXRrQ2FyZXRPZmZzZXRzKToKKyAgICAgICAg
KHRlc3RXZWJraXRBdGtDYXJldE9mZnNldHNBbmRFeHRyYW5vdXNXaGl0ZVNwYWNlcyk6CisgICAg
ICAgICh0ZXN0V2Via2l0QXRrQ29tYm9Cb3gpOgorICAgICAgICAodXBkYXRlTG9hZGluZ0V2ZW50
c1Jlc3VsdCk6CisgICAgICAgIChkb2N1bWVudExvYWRpbmdFdmVudENhbGxiYWNrKToKKyAgICAg
ICAgKHRlc3RXZWJraXRBdGtEb2N1bWVudExvYWRpbmdFdmVudHMpOgorICAgICAgICAodGVzdFdl
YmtpdEF0a0VtYmVkZGVkT2JqZWN0cyk6CisgICAgICAgICh0ZXN0V2Via2l0QXRrR2V0SGVhZGVy
c0luVGFibGUpOgorICAgICAgICAoY29tcEF0a0F0dHJpYnV0ZSk6CisgICAgICAgIChjb21wQXRr
QXR0cmlidXRlTmFtZSk6CisgICAgICAgIChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVOYW1lSGFz
VmFsdWUpOgorICAgICAgICAoYXRrQXR0cmlidXRlU2V0Q29udGFpbnNBdHRyaWJ1dGVOYW1lKToK
KyAgICAgICAgKGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKToKKyAgICAgICAgKGF0
a0F0dHJpYnV0ZVNldEFyZUVxdWFsKToKKyAgICAgICAgKHRlc3RXZWJraXRBdGtUZXh0QXR0cmli
dXRlcyk6CisgICAgICAgICh0ZXh0U2VsZWN0aW9uQ2hhbmdlZENhbGxiYWNrKToKKyAgICAgICAg
KHRlc3RXZWJraXRBdGtUZXh0U2VsZWN0aW9ucyk6CisgICAgICAgICh0ZXN0V2Via2l0QXRrR2V0
RXh0ZW50cyk6CisgICAgICAgICh0ZXN0V2Via2l0QXRrTGF5b3V0QW5kRGF0YVRhYmxlcyk6Cisg
ICAgICAgICh0ZXN0V2Via2l0QXRrTGlua3NXaXRoSW5saW5lSW1hZ2VzKToKKyAgICAgICAgKHRl
c3RXZWJraXRBdGtIeXBlcnRleHRBbmRIeXBlcmxpbmtzKToKKyAgICAgICAgKHRlc3RXZWJraXRB
dGtMaXN0c09mSXRlbXMpOgorICAgICAgICAodGV4dENoYW5nZWRDYik6CisgICAgICAgICh0ZXN0
V2Via2l0QXRrVGV4dENoYW5nZWROb3RpZmljYXRpb25zKToKKyAgICAgICAgKHRlc3RXZWJraXRB
dGtQYXJlbnRGb3JSb290T2JqZWN0KToKKyAgICAgICAgKHRlc3RXZWJraXRBdGtTZXRQYXJlbnRG
b3JPYmplY3QpOgorICAgICAgICAoaW5pdGlhbGl6ZVRlc3RpbmdGcmFtZXdvcmspOgorICAgICAg
ICAobWFpbik6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGF0
a3JvbGVzLmM6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXRrcm9s
ZXMuYy4KKyAgICAgICAgKGZpbmlzaF9sb2FkaW5nKToKKyAgICAgICAgKGF0a19yb2xlc19maXh0
dXJlX3NldHVwKToKKyAgICAgICAgKGF0a19yb2xlc19maXh0dXJlX3RlYXJkb3duKToKKyAgICAg
ICAgKGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKToKKyAgICAgICAgKHRlc3Rfd2Via2l0X2F0a19n
ZXRfcm9sZV9kb2N1bWVudF9mcmFtZSk6CisgICAgICAgICh0ZXN0X3dlYmtpdF9hdGtfZ2V0X3Jv
bGVfaGVhZGluZyk6CisgICAgICAgICh0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfaW1hZ2UpOgor
ICAgICAgICAodGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xpbmspOgorICAgICAgICAodGVzdF93
ZWJraXRfYXRrX2dldF9yb2xlX2xpc3RfYW5kX2l0ZW0pOgorICAgICAgICAodGVzdF93ZWJraXRf
YXRrX2dldF9yb2xlX3BhcmFncmFwaCk6CisgICAgICAgICh0ZXN0X3dlYmtpdF9hdGtfZ2V0X3Jv
bGVfc2VjdGlvbik6CisgICAgICAgICh0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfdGFibGUpOgor
ICAgICAgICAodGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX3NlcGFyYXRvcik6CisgICAgICAgICh0
ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfY29tYm9ib3gpOgorICAgICAgICAodGVzdF93ZWJraXRf
YXRrX2dldF9yb2xlX2Zvcm0pOgorICAgICAgICAodGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2No
ZWNrX2JveCk6CisgICAgICAgICh0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfZW50cnkpOgorICAg
ICAgICAodGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xhYmVsKToKKyAgICAgICAgKHRlc3Rfd2Vi
a2l0X2F0a19nZXRfcm9sZV9saXN0Ym94KToKKyAgICAgICAgKHRlc3Rfd2Via2l0X2F0a19nZXRf
cm9sZV9wYXNzd29yZF90ZXh0KToKKyAgICAgICAgKHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9w
dXNoX2J1dHRvbik6CisgICAgICAgICh0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfcmFkaW9fYnV0
dG9uKToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0R3RrL3Rlc3Rjb250ZXh0bWVudS5jOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9ndGsv
dGVzdHMvdGVzdGNvbnRleHRtZW51LmMuCisgICAgICAgICh0ZXN0SW5mb05ldyk6CisgICAgICAg
ICh0ZXN0SW5mb0Rlc3Ryb3kpOgorICAgICAgICAoY29udGV4dE1lbnVGaXh0dXJlU2V0dXApOgor
ICAgICAgICAoY29udGV4dE1lbnVGaXh0dXJlVGVhcmRvd24pOgorICAgICAgICAoY2hlY2tBY3Rp
b24pOgorICAgICAgICAoY2hlY2tBY3Rpb25XaXRoU3VibWVudSk6CisgICAgICAgIChjaGVja1Nl
cGFyYXRvcik6CisgICAgICAgIChjb250ZXh0TWVudUNhbGxiYWNrKToKKyAgICAgICAgKHB1c2hF
dmVudCk6CisgICAgICAgIChsb2FkU3RhdHVzQ2FsbGJhY2spOgorICAgICAgICAobWFwRXZlbnRD
YWxsYmFjayk6CisgICAgICAgICh0ZXN0Q29udGV4dE1lbnUpOgorICAgICAgICAoY29udGV4dE1l
bnVDdXN0b21JdGVtQ2FsbGJhY2spOgorICAgICAgICAodGVzdENvbnRleHRNZW51Q3VzdG9tSXRl
bSk6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dEd0ay90ZXN0Y29weWFuZHBhc3RlLmM6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2d0ay90
ZXN0cy90ZXN0Y29weWFuZHBhc3RlLmMuCisgICAgICAgICh0ZXN0X2luZm9fbmV3KToKKyAgICAg
ICAgKHRlc3RfaW5mb19kZXN0cm95KToKKyAgICAgICAgKGNvcHlfYW5kX3Bhc3RlX2ZpeHR1cmVf
c2V0dXApOgorICAgICAgICAoY29weV9hbmRfcGFzdGVfZml4dHVyZV90ZWFyZG93bik6CisgICAg
ICAgIChsb2FkX3N0YXR1c19jYik6CisgICAgICAgIChtYXBfZXZlbnRfY2IpOgorICAgICAgICAo
dGVzdF9jb3B5X2FuZF9wYXN0ZSk6CisgICAgICAgIChydW5QYXN0ZVRlc3RDYWxsYmFjayk6Cisg
ICAgICAgICh3aW5kb3dfb2JqZWN0X2NsZWFyZWRfY2FsbGJhY2spOgorICAgICAgICAocGFzdGlu
Z190ZXN0X2dldF9kYXRhX2NhbGxiYWNrKToKKyAgICAgICAgKHBhc3RpbmdfdGVzdF9jbGVhcl9k
YXRhX2NhbGxiYWNrKToKKyAgICAgICAgKHRlc3RfcGFzdGluZ19tYXJrdXApOgorICAgICAgICAo
bWFpbik6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGRvbWRv
Y3VtZW50LmM6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0ZG9tZG9j
dW1lbnQuYy4KKyAgICAgICAgKGZpbmlzaF9sb2FkaW5nKToKKyAgICAgICAgKGRvbV9kb2N1bWVu
dF9maXh0dXJlX3NldHVwKToKKyAgICAgICAgKGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3du
KToKKyAgICAgICAgKHRlc3RfZG9tX2RvY3VtZW50X3RpdGxlKToKKyAgICAgICAgKHRlc3RfZG9t
X2RvY3VtZW50X2dldF9lbGVtZW50c19ieV90YWdfbmFtZSk6CisgICAgICAgICh0ZXN0X2RvbV9k
b2N1bWVudF9nZXRfZWxlbWVudHNfYnlfY2xhc3NfbmFtZSk6CisgICAgICAgICh0ZXN0X2RvbV9k
b2N1bWVudF9nZXRfZWxlbWVudF9ieV9pZCk6CisgICAgICAgICh0ZXN0X2RvbV9kb2N1bWVudF9n
ZXRfbGlua3MpOgorICAgICAgICAodGVzdF9kb21fZG9jdW1lbnRfaW5zZXJ0X3Jvdyk6CisgICAg
ICAgICh0ZXN0X2RvbV9kb2N1bWVudF9ldmFsdWF0ZSk6CisgICAgICAgICh3ZWFrX25vdGlmeSk6
CisgICAgICAgICh0ZXN0X2RvbV9kb2N1bWVudF9nYXJiYWdlX2NvbGxlY3Rpb24pOgorICAgICAg
ICAobWFpbik6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGRv
bWRvbXdpbmRvdy5jOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRv
bWRvbXdpbmRvdy5jLgorICAgICAgICAoZmluaXNoX2xvYWRpbmcpOgorICAgICAgICAoZG9tX2Rv
bXZpZXdfZml4dHVyZV9zZXR1cCk6CisgICAgICAgIChkb21fZG9tdmlld19maXh0dXJlX3RlYXJk
b3duKToKKyAgICAgICAgKGRvbV9kb21fd2luZG93X2ZpeHR1cmVfc2V0dXApOgorICAgICAgICAo
ZG9tX2RvbV93aW5kb3dfZml4dHVyZV90ZWFyZG93bik6CisgICAgICAgIChsb2FkZWRDYWxsYmFj
ayk6CisgICAgICAgIChjbGlja2VkQ2FsbGJhY2spOgorICAgICAgICAobWFwX2V2ZW50X2NiKToK
KyAgICAgICAgKGxvYWRfZXZlbnRfY2FsbGJhY2spOgorICAgICAgICAodGVzdF9kb21fZG9tdmll
d19zaWduYWxzKToKKyAgICAgICAgKGNsaWNrZWRfY2IpOgorICAgICAgICAobG9hZF9zdGF0dXNf
Y2FsbGJhY2spOgorICAgICAgICAodGVzdF9kb21fZG9tdmlld19kaXNwYXRjaF9ldmVudCk6Cisg
ICAgICAgICh0ZXN0X2RvbV9kb21fd2luZG93X2dldF9jb21wdXRlZF9zdHlsZSk6CisgICAgICAg
IChtYWluKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0ZG9t
bm9kZS5jOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvbW5vZGUu
Yy4KKyAgICAgICAgKGZpbmlzaF9sb2FkaW5nKToKKyAgICAgICAgKGRvbV9ub2RlX2ZpeHR1cmVf
c2V0dXApOgorICAgICAgICAoZG9tX25vZGVfZml4dHVyZV90ZWFyZG93bik6CisgICAgICAgICh0
ZXN0X2RvbV9ub2RlX2hpZXJhcmNoeV9uYXZpZ2F0aW9uKToKKyAgICAgICAgKHRlc3RfZG9tX25v
ZGVfaW5zZXJ0aW9uKToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0R3RrL3Rlc3Rkb3dubG9hZC5jOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktp
dC9ndGsvdGVzdHMvdGVzdGRvd25sb2FkLmMuCisgICAgICAgICh0ZXN0X3dlYmtpdF9kb3dubG9h
ZF9jcmVhdGUpOgorICAgICAgICAobmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fcmVxdWVzdGVk
X2NiKToKKyAgICAgICAgKG5vdGlmeV9zdGF0dXNfY2IpOgorICAgICAgICAoc2V0X2ZpbGVuYW1l
KToKKyAgICAgICAgKGhhbmRsZV9kb3dubG9hZF9yZXF1ZXN0ZWRfY2IpOgorICAgICAgICAoZG93
bmxvYWRfcmVxdWVzdGVkX2NiKToKKyAgICAgICAgKGRvd25sb2FkX3JlcXVlc3RlZF9hc3luY2hf
Y2IpOgorICAgICAgICAodGVzdF93ZWJraXRfZG93bmxvYWRfcGVyZm9ybSk6CisgICAgICAgICh0
ZXN0X3dlYmtpdF9kb3dubG9hZF9zeW5jaCk6CisgICAgICAgICh0ZXN0X3dlYmtpdF9kb3dubG9h
ZF9hc3luY2gpOgorICAgICAgICAobWltZV90eXBlX3BvbGljeV9kZWNpc2lvbl9yZXF1ZXN0ZWRf
Y2IpOgorICAgICAgICAoaWRsZV9xdWl0X2xvb3BfY2IpOgorICAgICAgICAodGVzdF93ZWJraXRf
ZG93bmxvYWRfZGF0YSk6CisgICAgICAgIChub3RpZnlEb3dubG9hZFN0YXR1c0NhbGxiYWNrKToK
KyAgICAgICAgKHNlcnZlckNhbGxiYWNrKToKKyAgICAgICAgKHRlc3Rfd2Via2l0X2Rvd25sb2Fk
X25vdF9mb3VuZCk6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdEd0ay90ZXN0ZmF2aWNvbmRhdGFiYXNlLmM6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0L2d0ay90ZXN0cy90ZXN0ZmF2aWNvbmRhdGFiYXNlLmMuCisgICAgICAgIChzZXJ2ZXJD
YWxsYmFjayk6CisgICAgICAgIChkZWxldGVEYXRhYmFzZUZpbGVJZkV4aXN0cyk6CisgICAgICAg
ICh0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlU2V0UGF0aCk6CisgICAgICAgIChmYXZpY29uRGF0
YWJhc2VHZXRWYWxpZEZhdmljb25DYWxsYmFjayk6CisgICAgICAgIChmYXZpY29uRGF0YWJhc2VH
ZXRJbnZhbGlkRmF2aWNvbkNhbGxiYWNrKToKKyAgICAgICAgKGZhdmljb25EYXRhYmFzZUdldEZh
dmljb25DYW5jZWxsZWRDYWxsYmFjayk6CisgICAgICAgIChxdWl0TWFpbkxvb3BJZkxvYWRDb21w
bGV0ZWQpOgorICAgICAgICAoaWRsZVF1aXRMb29wQ2FsbGJhY2spOgorICAgICAgICAod2Via2l0
V2ViVmlld0ljb25Mb2FkZWQpOgorICAgICAgICAobG9hZFVSSSk6CisgICAgICAgIChmYXZpY29u
RGF0YWJhc2VHZXRWYWxpZEZhdmljb25JZGxlKToKKyAgICAgICAgKGZhdmljb25EYXRhYmFzZUdl
dEludmFsaWRGYXZpY29uSWRsZSk6CisgICAgICAgIChmYXZpY29uRGF0YWJhc2VHZXRGYXZpY29u
Q2FuY2VsbGVkSWRsZSk6CisgICAgICAgICh0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlR2V0RmF2
aWNvbik6CisgICAgICAgICh0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNvblVSSSk6
CisgICAgICAgICh0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlUmVtb3ZlQWxsKToKKyAgICAgICAg
KHRlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VDbG9zZURhdGFiYXNlKToKKyAgICAgICAgKG1haW4p
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RnbG9iYWxzLmM6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0Z2xvYmFscy5jLgorICAg
ICAgICAodGVzdF9nbG9iYWxzX2RlZmF1bHRfc2Vzc2lvbik6CisgICAgICAgICh0ZXN0X2dsb2Jh
bHNfc2VjdXJpdHlfcG9saWN5KToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RoaXR0ZXN0cmVzdWx0LmM6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0aGl0dGVzdHJlc3VsdC5jLgorICAgICAgICAodGVz
dF9pbmZvX25ldyk6CisgICAgICAgICh0ZXN0X2luZm9fZGVzdHJveSk6CisgICAgICAgIChoaXRf
dGVzdF9yZXN1bHRfZml4dHVyZV9zZXR1cCk6CisgICAgICAgIChoaXRfdGVzdF9yZXN1bHRfZml4
dHVyZV90ZWFyZG93bik6CisgICAgICAgIChsb2FkX3N0YXR1c19jYik6CisgICAgICAgICh0ZXN0
X3dlYmtpdF9oaXRfdGVzdF9yZXN1bHQpOgorICAgICAgICAobWFpbik6CisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGh0dHBiYWNrZW5kLmM6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0aHR0cGJhY2tlbmQuYy4KKyAgICAgICAgKG5h
dmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX3JlcXVlc3RlZF9jYik6CisgICAgICAgICh0ZXN0X3Nv
dXBfbWVzc2FnZV9saWZldGltZSk6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0a2V5ZXZlbnRzLmM6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0a2V5ZXZlbnRzLmMuCisgICAgICAgICh0ZXN0X2luZm9f
bmV3KToKKyAgICAgICAgKHRlc3RfaW5mb19kZXN0cm95KToKKyAgICAgICAgKGtleV9ldmVudF9m
aXh0dXJlX3NldHVwKToKKyAgICAgICAgKGtleV9ldmVudF9maXh0dXJlX3RlYXJkb3duKToKKyAg
ICAgICAgKGtleV9wcmVzc19ldmVudF9jYik6CisgICAgICAgIChrZXlfcmVsZWFzZV9ldmVudF9j
Yik6CisgICAgICAgICh0ZXN0X2tleXByZXNzX2V2ZW50c19sb2FkX3N0YXR1c19jYik6CisgICAg
ICAgIChtYXBfZXZlbnRfY2IpOgorICAgICAgICAoc2V0dXBfa2V5ZXZlbnRfdGVzdCk6CisgICAg
ICAgICh0ZXN0X2tleXByZXNzX2V2ZW50cyk6CisgICAgICAgIChlbGVtZW50X3RleHRfZXF1YWxf
dG8pOgorICAgICAgICAodGVzdF9pbWVfbG9hZF9zdGF0dXNfY2IpOgorICAgICAgICAodGVzdF9p
bWUpOgorICAgICAgICAodmVyaWZ5X2NvbnRlbnRzKToKKyAgICAgICAgKHRlc3RfYmxvY2tpbmdf
bG9hZF9zdGF0dXNfY2IpOgorICAgICAgICAodGVzdF9ibG9ja2luZyk6CisgICAgICAgICh0ZXN0
X3hpbV9sb2FkX3N0YXR1c19jYik6CisgICAgICAgICh0ZXN0X3hpbSk6CisgICAgICAgIChtYWlu
KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0bG9hZGluZy5j
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGxvYWRpbmcuYy4KKyAg
ICAgICAgKHNlcnZlcl9jYWxsYmFjayk6CisgICAgICAgICh3ZWJfbG9hZGluZ19maXh0dXJlX3Nl
dHVwKToKKyAgICAgICAgKHdlYl9sb2FkaW5nX2ZpeHR1cmVfdGVhcmRvd24pOgorICAgICAgICAo
Z2V0X3VyaV9mb3JfcGF0aCk6CisgICAgICAgIChsb2FkX2ZpbmlzaGVkX2NiKToKKyAgICAgICAg
KHN0YXR1c19jaGFuZ2VkX2NiKToKKyAgICAgICAgKHRlc3RfbG9hZGluZ19zdGF0dXMpOgorICAg
ICAgICAobG9hZF9lcnJvcl9zdGF0dXNfY2hhbmdlZF9jYik6CisgICAgICAgIChsb2FkX2Vycm9y
X2NiKToKKyAgICAgICAgKHRlc3RfbG9hZGluZ19lcnJvcik6CisgICAgICAgIChsb2FkX2NhbmNl
bGxlZF9jYik6CisgICAgICAgIChzdG9wX2xvYWQpOgorICAgICAgICAobG9hZF9jYW5jZWxsZWRf
c3RhdHVzX2NoYW5nZWRfY2IpOgorICAgICAgICAodGVzdF9sb2FkaW5nX2NhbmNlbGxlZCk6Cisg
ICAgICAgIChsb2FkX2dvYmFja19zdGF0dXNfY2hhbmdlZF9jYik6CisgICAgICAgIChsb2FkX3dl
bnRiYWNrX3N0YXR1c19jaGFuZ2VkX2NiKToKKyAgICAgICAgKGxvYWRfZXJyb3JfdGVzdCk6Cisg
ICAgICAgICh0ZXN0X2xvYWRpbmdfZ29iYWNrKToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RtaW1laGFuZGxpbmcuYzogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RtaW1laGFuZGxpbmcuYy4KKyAgICAg
ICAgKHNlcnZlcl9jYWxsYmFjayk6CisgICAgICAgIChpZGxlX3F1aXRfbG9vcF9jYik6CisgICAg
ICAgIChtaW1lX3R5cGVfcG9saWN5X2RlY2lzaW9uX3JlcXVlc3RlZF9jYik6CisgICAgICAgICh0
ZXN0UmVtb3RlTWltZVR5cGUpOgorICAgICAgICAodGVzdExvY2FsTWltZVR5cGUpOgorICAgICAg
ICAobWFpbik6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdG5l
dHdvcmtyZXF1ZXN0LmM6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0
bmV0d29ya3JlcXVlc3QuYy4KKyAgICAgICAgKHRlc3RfbmV0d29ya19yZXF1ZXN0X2NyZWF0ZV9k
ZXN0cm95KToKKyAgICAgICAgKHRlc3RfbmV0d29ya19yZXF1ZXN0X3Byb3BlcnRpZXMpOgorICAg
ICAgICAobWFpbik6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVz
dG5ldHdvcmtyZXNwb25zZS5jOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9ndGsvdGVzdHMv
dGVzdG5ldHdvcmtyZXNwb25zZS5jLgorICAgICAgICAodGVzdF9uZXR3b3JrX3Jlc3BvbnNlX2Ny
ZWF0ZV9kZXN0cm95KToKKyAgICAgICAgKHRlc3RfbmV0d29ya19yZXNwb25zZV9wcm9wZXJ0aWVz
KToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
R3RrL3Rlc3R3ZWJiYWNrZm9yd2FyZGxpc3QuYzogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQv
Z3RrL3Rlc3RzL3Rlc3R3ZWJiYWNrZm9yd2FyZGxpc3QuYy4KKyAgICAgICAgKHRlc3Rfd2Via2l0
X3dlYl9oaXN0b3J5X2l0ZW1fbGlmZXRpbWUpOgorICAgICAgICAodGVzdF93ZWJraXRfd2ViX2Jh
Y2tfZm9yd2FyZF9saXN0X29yZGVyKToKKyAgICAgICAgKHRlc3Rfd2Via2l0X3dlYl9iYWNrX2Zv
cndhcmRfbGlzdF9hZGRfaXRlbSk6CisgICAgICAgICh0ZXN0X3dlYmtpdF93ZWJfYmFja19mb3J3
YXJkX2xpc3RfY2xlYXIpOgorICAgICAgICAobWFpbik6CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYmRhdGFzb3VyY2UuYzogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJkYXRhc291cmNlLmMuCisgICAgICAgICh0ZXN0X3dl
YmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X2luaXRpYWxfcmVxdWVzdCk6CisgICAgICAgIChub3Rp
ZnlfbG9hZF9zdGF0dXNfdW5yZWFjaGFibGVfY2IpOgorICAgICAgICAobm90aWZ5X2xvYWRfc3Rh
dHVzX2NiKToKKyAgICAgICAgKHdhaXRfdGltZXJfZmlyZWQpOgorICAgICAgICAodGVzdF93ZWJr
aXRfd2ViX2RhdGFfc291cmNlKToKKyAgICAgICAgKG5vdGlmeV9sb2FkX3N0YXR1c19saWZldGlt
ZV9jYik6CisgICAgICAgICh0ZXN0X3dlYmtpdF93ZWJfZGF0YV9zb3VyY2VfbGlmZXRpbWUpOgor
ICAgICAgICAodGVzdF93ZWJraXRfd2ViX2RhdGFfc291cmNlX3VucmVhY2hhYmxlX3VyaSk6Cisg
ICAgICAgIChtYWluKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90
ZXN0d2ViZnJhbWUuYzogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3
ZWJmcmFtZS5jLgorICAgICAgICAoY3JlYXRlRnJhbWVTaWduYWxUZXN0RnJhbWVDcmVhdGVkQ2Fs
bGJhY2spOgorICAgICAgICAoY3JlYXRlRnJhbWVTaWduYWxUZXN0VGltZW91dCk6CisgICAgICAg
ICh0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfY3JlYXRlZF9zaWduYWwpOgorICAgICAgICAodGVzdF93
ZWJraXRfd2ViX2ZyYW1lX2NyZWF0ZV9kZXN0cm95KToKKyAgICAgICAgKHRlc3Rfd2Via2l0X3dl
Yl9mcmFtZV9saWZldGltZSk6CisgICAgICAgIChwcmludF9yZXF1ZXN0ZWRfY2IpOgorICAgICAg
ICAocHJpbnRfdGltZW91dCk6CisgICAgICAgICh0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfcHJpbnRp
bmcpOgorICAgICAgICAodGVzdF93ZWJraXRfd2ViX2ZyYW1lX3Jlc3BvbnNlKToKKyAgICAgICAg
KG1haW4pOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJo
aXN0b3J5aXRlbS5jOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdl
Ymhpc3RvcnlpdGVtLmMuCisgICAgICAgICh3ZWJfaGlzdG9yeV9pdGVtX2ZpeHR1cmVfc2V0dXAp
OgorICAgICAgICAod2ViX2hpc3RvcnlfaXRlbV9maXh0dXJlX3RlYXJkb3duKToKKyAgICAgICAg
KHRlc3Rfd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X2RhdGEpOgorICAgICAgICAodGVzdF93
ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9hbHRlcm5hdGVfdGl0bGUpOgorICAgICAgICAobWFpbik6
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYmluc3BlY3Rv
ci5jOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYmluc3BlY3Rv
ci5jLgorICAgICAgICAocXVpdExvb3ApOgorICAgICAgICAoY29uc29sZU1lc3NhZ2VDYWxsYmFj
ayk6CisgICAgICAgIChpbnNwZWN0RWxlbWVudENhbGxiYWNrKToKKyAgICAgICAgKGNsb3NlSW5z
cGVjdG9yKToKKyAgICAgICAgKHNob3dJbnNwZWN0b3IpOgorICAgICAgICAobG9hZEZpbmlzaGVk
KToKKyAgICAgICAgKHRlc3Rfd2Via2l0X3dlYl9pbnNwZWN0b3JfY2xvc2VfYW5kX2luc3BlY3Qp
OgorICAgICAgICAodGVzdF93ZWJraXRfd2ViX2luc3BlY3Rvcl9kZXN0cm95X2luc3BlY3RlZF93
ZWJfdmlldyk6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdEd0ay90ZXN0d2VicGx1Z2luZGF0YWJhc2UuYzogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJwbHVnaW5kYXRhYmFzZS5jLgorICAgICAgICAodGVzdF93
ZWJraXRfd2ViX3BsdWdpbl9kYXRhYmFzZV9nZXRfcGx1Z2lucyk6CisgICAgICAgIChtYWluKToK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2VicmVzb3VyY2Uu
YzogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJyZXNvdXJjZS5j
LgorICAgICAgICAoc2VydmVyX2NhbGxiYWNrKToKKyAgICAgICAgKHdlYl9yZXNvdXJjZV9maXh0
dXJlX3NldHVwKToKKyAgICAgICAgKHdlYl9yZXNvdXJjZV9maXh0dXJlX3RlYXJkb3duKToKKyAg
ICAgICAgKHRlc3Rfd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJsKToKKyAgICAgICAgKHRlc3Rf
d2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZGF0YSk6CisgICAgICAgICh0ZXN0X3dlYmtpdF93ZWJf
cmVzb3VyY2VfZ2V0X21pbWVfdHlwZSk6CisgICAgICAgICh0ZXN0X3dlYmtpdF93ZWJfcmVzb3Vy
Y2VfZ2V0X2VuY29kaW5nKToKKyAgICAgICAgKHRlc3Rfd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRf
ZnJhbWVfbmFtZSk6CisgICAgICAgIChyZXNvdXJjZV9yZXF1ZXN0X3N0YXJ0aW5nX2NiKToKKyAg
ICAgICAgKG5vdGlmeV9sb2FkX3N0YXR1c19jYik6CisgICAgICAgICh0ZXN0X3dlYl9yZXNvdXJj
ZV9sb2FkaW5nKToKKyAgICAgICAgKHJlc291cmNlX3JlcXVlc3Rfc3RhcnRpbmdfc3ViX2NiKToK
KyAgICAgICAgKG5vdGlmeV9sb2FkX3N0YXR1c19zdWJfY2IpOgorICAgICAgICAoaWRsZV9xdWl0
X2xvb3BfY2IpOgorICAgICAgICAodGVzdF93ZWJfcmVzb3VyY2Vfc3ViX3Jlc291cmNlX2xvYWRp
bmcpOgorICAgICAgICAobWFpbik6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRHdGsvdGVzdHdlYnNldHRpbmdzLmM6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2d0ay90
ZXN0cy90ZXN0d2Vic2V0dGluZ3MuYy4KKyAgICAgICAgKHRlc3Rfd2Via2l0X3dlYl9zZXR0aW5n
c19jb3B5KToKKyAgICAgICAgKHRlc3Rfbm9uX3F1aXJreV91c2VyX2FnZW50cyk6CisgICAgICAg
ICh0ZXN0X3dlYmtpdF93ZWJfc2V0dGluZ3NfdXNlcl9hZ2VudCk6CisgICAgICAgIChtYWluKToK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2Vidmlldy5jOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYnZpZXcuYy4KKyAgICAg
ICAgKHNlcnZlcl9jYWxsYmFjayk6CisgICAgICAgIChpZGxlX3F1aXRfbG9vcF9jYik6CisgICAg
ICAgICh0aW1lb3V0X2NiKToKKyAgICAgICAgKGljb25fdXJpX2NoYW5nZWRfY2IpOgorICAgICAg
ICAoaWNvbl9sb2FkZWRfY2IpOgorICAgICAgICAodGVzdF93ZWJraXRfd2ViX3ZpZXdfaWNvbl91
cmkpOgorICAgICAgICAobWFwX2V2ZW50X2NiKToKKyAgICAgICAgKHF1aXRfYWZ0ZXJfc2hvcnRf
ZGVsYXlfY2IpOgorICAgICAgICAodGVzdF93ZWJraXRfd2ViX3ZpZXdfZ3JhYl9mb2N1cyk6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdpbmRvdy5jOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdpbmRvdy5jLgorICAgICAgICAo
bm90aWZ5X2xvYWRfc3RhdHVzX2NiKToKKyAgICAgICAgKHRlc3Rfd2Via2l0X3dpbmRvd19zY3Jv
bGxiYXJfcG9saWN5KToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
Z3RrL1dlYktpdDJHdGsvTG9hZFRyYWNraW5nVGVzdC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9Mb2FkVHJhY2tpbmdUZXN0LmNwcC4KKyAg
ICAgICAgKGxvYWRDaGFuZ2VkQ2FsbGJhY2spOgorICAgICAgICAobG9hZEZhaWxlZENhbGxiYWNr
KToKKyAgICAgICAgKGVzdGltYXRlZFByb2dyZXNzQ2hhbmdlZENhbGxiYWNrKToKKyAgICAgICAg
KExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRUcmFja2luZ1Rlc3QpOgorICAgICAgICAoTG9hZFRyYWNr
aW5nVGVzdDo6fkxvYWRUcmFja2luZ1Rlc3QpOgorICAgICAgICAoTG9hZFRyYWNraW5nVGVzdDo6
d2FpdFVudGlsTG9hZEZpbmlzaGVkKToKKyAgICAgICAgKExvYWRUcmFja2luZ1Rlc3Q6OnByb3Zp
c2lvbmFsTG9hZFN0YXJ0ZWQpOgorICAgICAgICAoTG9hZFRyYWNraW5nVGVzdDo6cHJvdmlzaW9u
YWxMb2FkUmVjZWl2ZWRTZXJ2ZXJSZWRpcmVjdCk6CisgICAgICAgIChMb2FkVHJhY2tpbmdUZXN0
Ojpwcm92aXNpb25hbExvYWRGYWlsZWQpOgorICAgICAgICAoTG9hZFRyYWNraW5nVGVzdDo6bG9h
ZENvbW1pdHRlZCk6CisgICAgICAgIChMb2FkVHJhY2tpbmdUZXN0Ojpsb2FkRmluaXNoZWQpOgor
ICAgICAgICAoTG9hZFRyYWNraW5nVGVzdDo6bG9hZEZhaWxlZCk6CisgICAgICAgIChMb2FkVHJh
Y2tpbmdUZXN0Ojplc3RpbWF0ZWRQcm9ncmVzc0NoYW5nZWQpOgorICAgICAgICAoTG9hZFRyYWNr
aW5nVGVzdDo6bG9hZFVSSSk6CisgICAgICAgIChMb2FkVHJhY2tpbmdUZXN0Ojpsb2FkSHRtbCk6
CisgICAgICAgIChMb2FkVHJhY2tpbmdUZXN0Ojpsb2FkUGxhaW5UZXh0KToKKyAgICAgICAgKExv
YWRUcmFja2luZ1Rlc3Q6OmxvYWRSZXF1ZXN0KToKKyAgICAgICAgKExvYWRUcmFja2luZ1Rlc3Q6
OnJlbG9hZCk6CisgICAgICAgIChMb2FkVHJhY2tpbmdUZXN0Ojpnb0JhY2spOgorICAgICAgICAo
TG9hZFRyYWNraW5nVGVzdDo6Z29Gb3J3YXJkKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2d0
ay9XZWJLaXQyR3RrL0xvYWRUcmFja2luZ1Rlc3QuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0xvYWRUcmFja2luZ1Rlc3QuaC4KKyAgICAgICAg
KExvYWRUcmFja2luZ1Rlc3Q6OnNldFJlZGlyZWN0VVJJKToKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL2d0ay9XZWJLaXQyR3RrL1Rlc3RNYWluLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RNYWluLmNwcC4KKyAgICAgICAgKHJlZ2lz
dGVyR1Jlc291cmNlKToKKyAgICAgICAgKHJlbW92ZU5vbkVtcHR5RGlyZWN0b3J5KToKKyAgICAg
ICAgKG1haW4pOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvVGVzdE1h
aW4uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L1Rlc3RNYWluLmguCisgICAgICAgIChUZXN0Ojp+VGVzdCk6CisgICAgICAgIChUZXN0OjpvYmpl
Y3RGaW5hbGl6ZWQpOgorICAgICAgICAoVGVzdDo6YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRl
c3RGaW5pc2hlcyk6CisgICAgICAgIChUZXN0OjpnZXRXZWJLaXQxVGVzdFJlc291Y2VzRGlyKToK
KyAgICAgICAgKFRlc3Q6OmdldFJlc291cmNlc0Rpcik6CisgICAgICAgIChUZXN0OjphZGRMb2dG
YXRhbEZsYWcpOgorICAgICAgICAoVGVzdDo6cmVtb3ZlTG9nRmF0YWxGbGFnKToKKyAgICAgICAg
KFRlc3Q6OmNhaXJvU3VyZmFjZXNFcXVhbCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9ndGsv
V2ViS2l0Mkd0ay9XZWJLaXRUZXN0QnVzLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYktpdFRlc3RCdXMuY3BwLgorICAgICAgICAoV2Vi
S2l0VGVzdEJ1czo6V2ViS2l0VGVzdEJ1cyk6CisgICAgICAgIChXZWJLaXRUZXN0QnVzOjpydW4p
OgorICAgICAgICAoV2ViS2l0VGVzdEJ1czo6fldlYktpdFRlc3RCdXMpOgorICAgICAgICAoV2Vi
S2l0VGVzdEJ1czo6Z2V0T3JDcmVhdGVDb25uZWN0aW9uKToKKyAgICAgICAgKG9uTmFtZUFwcGVh
cmVkKToKKyAgICAgICAgKFdlYktpdFRlc3RCdXM6OmNyZWF0ZVByb3h5KToKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYktpdFRlc3RCdXMuaDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYktpdFRlc3RCdXMuaC4K
KyAgICAgICAgKFdlYktpdFRlc3RCdXM6OmNvbm5lY3Rpb24pOgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViS2l0VGVzdFNlcnZlci5jcHA6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJLaXRUZXN0U2VydmVyLmNw
cC4KKyAgICAgICAgKFdlYktpdFRlc3RTZXJ2ZXI6OldlYktpdFRlc3RTZXJ2ZXIpOgorICAgICAg
ICAoV2ViS2l0VGVzdFNlcnZlcjo6fldlYktpdFRlc3RTZXJ2ZXIpOgorICAgICAgICAoV2ViS2l0
VGVzdFNlcnZlcjo6cnVuKToKKyAgICAgICAgKFdlYktpdFRlc3RTZXJ2ZXI6OmdldFVSSUZvclBh
dGgpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViS2l0VGVzdFNl
cnZlci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvV2ViS2l0VGVzdFNlcnZlci5oLgorICAgICAgICAoV2ViS2l0VGVzdFNlcnZlcjo6YmFzZVVS
SSk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9XZWJQcm9jZXNzVGVz
dFJ1bm5lci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9XZWJQcm9jZXNzVGVzdFJ1bm5lci5jcHAuCisgICAgICAgIChXZWJQcm9jZXNzVGVz
dFJ1bm5lcjo6V2ViUHJvY2Vzc1Rlc3RSdW5uZXIpOgorICAgICAgICAoV2ViUHJvY2Vzc1Rlc3RS
dW5uZXI6On5XZWJQcm9jZXNzVGVzdFJ1bm5lcik6CisgICAgICAgIChXZWJQcm9jZXNzVGVzdFJ1
bm5lcjo6cHJveHlDcmVhdGVkQ2FsbGJhY2spOgorICAgICAgICAoV2ViUHJvY2Vzc1Rlc3RSdW5u
ZXI6OnByb3h5KToKKyAgICAgICAgKFdlYlByb2Nlc3NUZXN0UnVubmVyOjpvbk5hbWVBcHBlYXJl
ZCk6CisgICAgICAgIChXZWJQcm9jZXNzVGVzdFJ1bm5lcjo6b25OYW1lVmFuaXNoZWQpOgorICAg
ICAgICAoV2ViUHJvY2Vzc1Rlc3RSdW5uZXI6OnRlc3RGaW5pc2hlZENhbGxiYWNrKToKKyAgICAg
ICAgKFdlYlByb2Nlc3NUZXN0UnVubmVyOjpydW5UZXN0KToKKyAgICAgICAgKFdlYlByb2Nlc3NU
ZXN0UnVubmVyOjpmaW5pc2hUZXN0KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2d0ay9XZWJL
aXQyR3RrL1dlYlByb2Nlc3NUZXN0UnVubmVyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJQcm9jZXNzVGVzdFJ1bm5lci5oLgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViVmlld1Rlc3QuY3BwOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3Qu
Y3BwLgorICAgICAgICAoV2ViVmlld1Rlc3Q6OldlYlZpZXdUZXN0KToKKyAgICAgICAgKFdlYlZp
ZXdUZXN0Ojp+V2ViVmlld1Rlc3QpOgorICAgICAgICAoV2ViVmlld1Rlc3Q6OmxvYWRVUkkpOgor
ICAgICAgICAoV2ViVmlld1Rlc3Q6OmxvYWRIdG1sKToKKyAgICAgICAgKFdlYlZpZXdUZXN0Ojps
b2FkUGxhaW5UZXh0KToKKyAgICAgICAgKFdlYlZpZXdUZXN0Ojpsb2FkUmVxdWVzdCk6CisgICAg
ICAgIChXZWJWaWV3VGVzdDo6bG9hZEFsdGVybmF0ZUhUTUwpOgorICAgICAgICAoV2ViVmlld1Rl
c3Q6OmdvQmFjayk6CisgICAgICAgIChXZWJWaWV3VGVzdDo6Z29Gb3J3YXJkKToKKyAgICAgICAg
KFdlYlZpZXdUZXN0Ojpnb1RvQmFja0ZvcndhcmRMaXN0SXRlbSk6CisgICAgICAgIChXZWJWaWV3
VGVzdDo6cXVpdE1haW5Mb29wKToKKyAgICAgICAgKFdlYlZpZXdUZXN0OjpxdWl0TWFpbkxvb3BB
ZnRlclByb2Nlc3NpbmdQZW5kaW5nRXZlbnRzKToKKyAgICAgICAgKHF1aXRNYWluTG9vcElkbGVD
YWxsYmFjayk6CisgICAgICAgIChXZWJWaWV3VGVzdDo6d2FpdCk6CisgICAgICAgIChsb2FkQ2hh
bmdlZCk6CisgICAgICAgIChXZWJWaWV3VGVzdDo6d2FpdFVudGlsTG9hZEZpbmlzaGVkKToKKyAg
ICAgICAgKHRpdGxlQ2hhbmdlZCk6CisgICAgICAgIChXZWJWaWV3VGVzdDo6d2FpdFVudGlsVGl0
bGVDaGFuZ2VkVG8pOgorICAgICAgICAoV2ViVmlld1Rlc3Q6OndhaXRVbnRpbFRpdGxlQ2hhbmdl
ZCk6CisgICAgICAgIChwYXJlbnRXaW5kb3dNYXBwZWQpOgorICAgICAgICAoV2ViVmlld1Rlc3Q6
OnNob3dJbldpbmRvdyk6CisgICAgICAgIChXZWJWaWV3VGVzdDo6c2hvd0luV2luZG93QW5kV2Fp
dFVudGlsTWFwcGVkKToKKyAgICAgICAgKFdlYlZpZXdUZXN0OjpyZXNpemVWaWV3KToKKyAgICAg
ICAgKFdlYlZpZXdUZXN0OjpzZWxlY3RBbGwpOgorICAgICAgICAocmVzb3VyY2VHZXREYXRhQ2Fs
bGJhY2spOgorICAgICAgICAoV2ViVmlld1Rlc3Q6Om1haW5SZXNvdXJjZURhdGEpOgorICAgICAg
ICAoV2ViVmlld1Rlc3Q6Om1vdXNlTW92ZVRvKToKKyAgICAgICAgKFdlYlZpZXdUZXN0OjpjbGlj
a01vdXNlQnV0dG9uKToKKyAgICAgICAgKFdlYlZpZXdUZXN0OjprZXlTdHJva2UpOgorICAgICAg
ICAoV2ViVmlld1Rlc3Q6OmRvTW91c2VCdXR0b25FdmVudCk6CisgICAgICAgIChydW5KYXZhU2Ny
aXB0UmVhZHlDYWxsYmFjayk6CisgICAgICAgIChydW5KYXZhU2NyaXB0RnJvbUdSZXNvdXJjZVJl
YWR5Q2FsbGJhY2spOgorICAgICAgICAoV2ViVmlld1Rlc3Q6OnJ1bkphdmFTY3JpcHRBbmRXYWl0
VW50aWxGaW5pc2hlZCk6CisgICAgICAgIChXZWJWaWV3VGVzdDo6cnVuSmF2YVNjcmlwdEZyb21H
UmVzb3VyY2VBbmRXYWl0VW50aWxGaW5pc2hlZCk6CisgICAgICAgIChqc1ZhbHVlVG9DU3RyaW5n
KToKKyAgICAgICAgKFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKToKKyAg
ICAgICAgKFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9OdW1iZXIpOgorICAgICAgICAo
V2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0Jvb2xlYW4pOgorICAgICAgICAoV2ViVmll
d1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRJc051bGwpOgorICAgICAgICAoV2ViVmlld1Rlc3Q6Omph
dmFzY3JpcHRSZXN1bHRJc1VuZGVmaW5lZCk6CisgICAgICAgIChvblNuYXBzaG90UmVhZHkpOgor
ICAgICAgICAoV2ViVmlld1Rlc3Q6OmdldFNuYXBzaG90QW5kV2FpdFVudGlsUmVhZHkpOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViVmlld1Rlc3QuaDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0
LmguCisKKzIwMTQtMDEtMDMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEu
Y29tPgorCiAgICAgICAgIFJFR1JFU1NJT04ocjE2MTIxNCk6IFtHVEtdIFdlYktpdDIgQyBBUEkg
dGVzdHMgZmFpbCB0byBydW4gYWZ0ZXIgcjE2MTIxNAogICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI2NDMwCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvcnVuLWd0ay10ZXN0cyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWd0ay10ZXN0cwppbmRleCA1MjRl
N2UzLi44MmZhMzZjIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3J1bi1ndGstdGVzdHMKKysr
IGIvVG9vbHMvU2NyaXB0cy9ydW4tZ3RrLXRlc3RzCkBAIC01OCwzNSArNTgsMzUgQEAgY2xhc3Mg
VGVzdFRpbWVvdXQoRXhjZXB0aW9uKToKICAgICBwYXNzCiAKIGNsYXNzIFRlc3RSdW5uZXI6Ci0g
ICAgVEVTVF9ESVJTID0gWyAiV2ViS2l0MUdPYmplY3RBUElUZXN0cyIsICJXZWJLaXQyR09iamVj
dEFQSVRlc3RzIiwgIlRlc3RXZWJLaXRBUEkiIF0KKyAgICBURVNUX0RJUlMgPSBbICJXZWJLaXQy
R3RrIiwgIldlYktpdEd0ayIsICJXZWJLaXQyIiwgIkphdmFTY3JpcHRDb3JlIiwgIldURiIsICJX
ZWJDb3JlIiwgICJXZWJDb3JlR3RrIiBdCiAKICAgICBTS0lQUEVEID0gWwotICAgICAgICBTa2lw
cGVkVGVzdCgiV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0ZG93bmxvYWQiLCAiL3dlYmtpdC9k
b3dubG9hZC9ub3QtZm91bmQiLCAiVGVzdCBmYWlscyBpbiBHVEsgTGludXggNjQtYml0IFJlbGVh
c2UgYm90IiwgODIzMjkpLAotICAgICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0MUdPYmplY3RBUElU
ZXN0cy90ZXN0d2ViaW5zcGVjdG9yIiwgIi93ZWJraXQvd2ViaW5zcGVjdG9yL2Nsb3NlLWFuZC1p
bnNwZWN0IiwgIlRlc3QgaXMgZmxha3kgaW4gR1RLIExpbnV4IDMyLWJpdCBSZWxlYXNlIGJvdCIs
IDgyODY5KSwKLSAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdDFHT2JqZWN0QVBJVGVzdHMvdGVz
dHdlYnJlc291cmNlIiwgIi93ZWJraXQvd2VicmVzb3VyY2UvbG9hZGluZyIsICJUZXN0IGZhaWxz
IiwgMTA0Njg5KSwKLSAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdDFHT2JqZWN0QVBJVGVzdHMv
dGVzdHdlYnJlc291cmNlIiwgIi93ZWJraXQvd2VicmVzb3VyY2Uvc3ViX3Jlc291cmNlX2xvYWRp
bmciLCAiVGVzdCBmYWlscyBpbiBHVEsgTGludXggNjQtYml0IFJlbGVhc2UgYm90IiwgODIzMzAp
LAotICAgICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0d2Vidmll
dyIsICIvd2Via2l0L3dlYnZpZXcvaWNvbi11cmkiLCAiVGVzdCB0aW1lcyBvdXQgaW4gR1RLIExp
bnV4IDY0LWJpdCBSZWxlYXNlIGJvdCIsIDgyMzI4KSwKLSAgICAgICAgU2tpcHBlZFRlc3QoIldl
YktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdFJlc291cmNlcyIsICIvd2Via2l0Mi9XZWJLaXRXZWJW
aWV3L3Jlc291cmNlcyIsICJUZXN0IGlzIGZsYWt5IGluIEdUSyBMaW51eCAzMi1iaXQgUmVsZWFz
ZSBib3QiLCA4Mjg2OCksCi0gICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXQyR09iamVjdEFQSVRl
c3RzL1Rlc3RVSUNsaWVudCIsICIvd2Via2l0Mi9XZWJLaXRXZWJWaWV3L21vdXNlLXRhcmdldCIs
ICJUZXN0IHRpbWVzIG91dCBhZnRlciByMTUwODkwIiwgMTE3Njg5KSwKLSAgICAgICAgU2tpcHBl
ZFRlc3QoIldlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdEF1dGhlbnRpY2F0aW9uIiwgU2tpcHBl
ZFRlc3QuRU5USVJFX1NVSVRFLCAiVGVzdCB0aW1lcyBvdXQgYWZ0ZXIgcjE1MDg5MCIsIDExNzY4
OSksCi0gICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXQyR09iamVjdEFQSVRlc3RzL1Rlc3RDb250
ZXh0TWVudSIsIFNraXBwZWRUZXN0LkVOVElSRV9TVUlURSwgIlRlc3QgdGltZXMgb3V0IGFmdGVy
IHIxNTA4OTAiLCAxMTc2ODkpLAotICAgICAgICBTa2lwcGVkVGVzdCgiVGVzdFdlYktpdEFQSS9U
ZXN0V2ViS2l0MiIsICJXZWJLaXQyLk1vdXNlTW92ZUFmdGVyQ3Jhc2giLCAiVGVzdCBpcyBmbGFr
eSIsIDg1MDY2KSwKLSAgICAgICAgU2tpcHBlZFRlc3QoIlRlc3RXZWJLaXRBUEkvVGVzdFdlYktp
dDIiLCAiV2ViS2l0Mi5OZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXMiLCAi
VGVzdCBpcyBmbGFreSIsIDg1MDY2KSwKLSAgICAgICAgU2tpcHBlZFRlc3QoIlRlc3RXZWJLaXRB
UEkvVGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5OZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRG
cmFtZXMiLCAiVGVzdCBmYWlscyIsIDg1MDM3KSwKLSAgICAgICAgU2tpcHBlZFRlc3QoIlRlc3RX
ZWJLaXRBUEkvVGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5SZXN0b3JlU2Vzc2lvblN0YXRlQ29udGFp
bmluZ0Zvcm1EYXRhIiwgIlNlc3Npb24gU3RhdGUgaXMgbm90IGltcGxlbWVudGVkIGluIEdUSysg
cG9ydCIsIDg0OTYwKSwKLSAgICAgICAgU2tpcHBlZFRlc3QoIlRlc3RXZWJLaXRBUEkvVGVzdFdl
YktpdDIiLCAiV2ViS2l0Mi5TcGFjZWJhclNjcm9sbGluZyIsICJUZXN0IGZhaWxzIiwgODQ5NjEp
LAotICAgICAgICBTa2lwcGVkVGVzdCgiVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0MiIsICJXZWJL
aXQyLldLQ29ubmVjdGlvbiIsICJUZXN0cyBmYWlsIGFuZCB0aW1lIG91dCBvdXQiLCA4NDk1OSks
Ci0gICAgICAgIFNraXBwZWRUZXN0KCJUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXQyIiwgIldlYktp
dDIuV0tQYWdlR2V0U2NhbGVGYWN0b3JOb3RaZXJvIiwgIlRlc3QgZmFpbHMgYW5kIHRpbWVzIG91
dCIsIDg4NDU1KSwKLSAgICAgICAgU2tpcHBlZFRlc3QoIlRlc3RXZWJLaXRBUEkvVGVzdFdlYktp
dDIiLCAiV2ViS2l0Mi5Gb3JjZVJlcGFpbnQiLCAiVGVzdCB0aW1lcyBvdXQiLCAxMDU1MzIpLAot
ICAgICAgICBTa2lwcGVkVGVzdCgiVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0MiIsICJXZWJLaXQy
LlJlbG9hZFBhZ2VBZnRlckNyYXNoIiwgIlRlc3QgZmxha2lseSB0aW1lcyBvdXQiLCAxMTAxMjkp
LAotICAgICAgICBTa2lwcGVkVGVzdCgiVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0MiIsICJXZWJL
aXQyLkRpZEFzc29jaWF0ZUZvcm1Db250cm9scyIsICJUZXN0IHRpbWVzIG91dCIsIDEyMDMwMiks
Ci0gICAgICAgIFNraXBwZWRUZXN0KCJUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXQyIiwgIldlYktp
dDIuSW5qZWN0ZWRCdW5kbGVGcmFtZUhpdFRlc3QiLCAiVGVzdCB0aW1lcyBvdXQiLCAxMjAzMDMp
LAotICAgICAgICBTa2lwcGVkVGVzdCgiVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0MiIsICJXZWJL
aXQyLlJlc2l6ZVJldmVyc2VQYWdpbmF0ZWRXZWJWaWV3IiwgIlRlc3QgZmFpbHMiLCAxMjAzMDUp
LAotICAgICAgICBTa2lwcGVkVGVzdCgiVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0MiIsICJXZWJL
aXQyLlNjcm9sbFBpbm5pbmdCZWhhdmlvcnMiLCAiVGVzdCBmYWlscyIsIDEyMDMwNiksCi0gICAg
ICAgIFNraXBwZWRUZXN0KCJUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXQyIiwgIldlYktpdDIuVGVy
bWluYXRlVHdpY2UiLCAiVGVzdCBjYXVzZXMgY3Jhc2ggb24gdGhlIG5leHQgdGVzdCIsIDEyMTk3
MCksCi0gICAgICAgIFNraXBwZWRUZXN0KCJUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXQyIiwgIldl
YktpdDIuR2VvbG9jYXRpb25UcmFuc2l0aW9uVG9IaWdoQWNjdXJhY3kiLCAiVGVzdCBjYXVzZXMg
Y3Jhc2ggb24gdGhlIG5leHQgdGVzdCIsIDEyNTA2OCksCi0gICAgICAgIFNraXBwZWRUZXN0KCJU
ZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXQyIiwgIldlYktpdDIuR2VvbG9jYXRpb25UcmFuc2l0aW9u
VG9Mb3dBY2N1cmFjeSIsICJUZXN0IGNhdXNlcyBjcmFzaCBvbiB0aGUgbmV4dCB0ZXN0IiwgMTI1
MDY4KSwKLSAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdElu
c3BlY3RvclNlcnZlciIsIFNraXBwZWRUZXN0LkVOVElSRV9TVUlURSwgIlRpbWluZyBvdXQgb24g
dGhlIGJvdCIsIDEyMjU3MSksCisgICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXRHdGsvdGVzdGRv
d25sb2FkIiwgIi93ZWJraXQvZG93bmxvYWQvbm90LWZvdW5kIiwgIlRlc3QgZmFpbHMgaW4gR1RL
IExpbnV4IDY0LWJpdCBSZWxlYXNlIGJvdCIsIDgyMzI5KSwKKyAgICAgICAgU2tpcHBlZFRlc3Qo
IldlYktpdEd0ay90ZXN0d2ViaW5zcGVjdG9yIiwgIi93ZWJraXQvd2ViaW5zcGVjdG9yL2Nsb3Nl
LWFuZC1pbnNwZWN0IiwgIlRlc3QgaXMgZmxha3kgaW4gR1RLIExpbnV4IDMyLWJpdCBSZWxlYXNl
IGJvdCIsIDgyODY5KSwKKyAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdEd0ay90ZXN0d2VicmVz
b3VyY2UiLCAiL3dlYmtpdC93ZWJyZXNvdXJjZS9sb2FkaW5nIiwgIlRlc3QgZmFpbHMiLCAxMDQ2
ODkpLAorICAgICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0R3RrL3Rlc3R3ZWJyZXNvdXJjZSIsICIv
d2Via2l0L3dlYnJlc291cmNlL3N1Yl9yZXNvdXJjZV9sb2FkaW5nIiwgIlRlc3QgZmFpbHMgaW4g
R1RLIExpbnV4IDY0LWJpdCBSZWxlYXNlIGJvdCIsIDgyMzMwKSwKKyAgICAgICAgU2tpcHBlZFRl
c3QoIldlYktpdEd0ay90ZXN0d2VidmlldyIsICIvd2Via2l0L3dlYnZpZXcvaWNvbi11cmkiLCAi
VGVzdCB0aW1lcyBvdXQgaW4gR1RLIExpbnV4IDY0LWJpdCBSZWxlYXNlIGJvdCIsIDgyMzI4KSwK
KyAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdDJHdGsvVGVzdFJlc291cmNlcyIsICIvd2Via2l0
Mi9XZWJLaXRXZWJWaWV3L3Jlc291cmNlcyIsICJUZXN0IGlzIGZsYWt5IGluIEdUSyBMaW51eCAz
Mi1iaXQgUmVsZWFzZSBib3QiLCA4Mjg2OCksCisgICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXQy
R3RrL1Rlc3RVSUNsaWVudCIsICIvd2Via2l0Mi9XZWJLaXRXZWJWaWV3L21vdXNlLXRhcmdldCIs
ICJUZXN0IHRpbWVzIG91dCBhZnRlciByMTUwODkwIiwgMTE3Njg5KSwKKyAgICAgICAgU2tpcHBl
ZFRlc3QoIldlYktpdDJHdGsvVGVzdEF1dGhlbnRpY2F0aW9uIiwgU2tpcHBlZFRlc3QuRU5USVJF
X1NVSVRFLCAiVGVzdCB0aW1lcyBvdXQgYWZ0ZXIgcjE1MDg5MCIsIDExNzY4OSksCisgICAgICAg
IFNraXBwZWRUZXN0KCJXZWJLaXQyR3RrL1Rlc3RDb250ZXh0TWVudSIsIFNraXBwZWRUZXN0LkVO
VElSRV9TVUlURSwgIlRlc3QgdGltZXMgb3V0IGFmdGVyIHIxNTA4OTAiLCAxMTc2ODkpLAorICAg
ICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0Mi9UZXN0V2ViS2l0MiIsICJXZWJLaXQyLk1vdXNlTW92
ZUFmdGVyQ3Jhc2giLCAiVGVzdCBpcyBmbGFreSIsIDg1MDY2KSwKKyAgICAgICAgU2tpcHBlZFRl
c3QoIldlYktpdDIvVGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5OZXdGaXJzdFZpc3VhbGx5Tm9uRW1w
dHlMYXlvdXRGb3JJbWFnZXMiLCAiVGVzdCBpcyBmbGFreSIsIDg1MDY2KSwKKyAgICAgICAgU2tp
cHBlZFRlc3QoIldlYktpdDIvVGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5OZXdGaXJzdFZpc3VhbGx5
Tm9uRW1wdHlMYXlvdXRGcmFtZXMiLCAiVGVzdCBmYWlscyIsIDg1MDM3KSwKKyAgICAgICAgU2tp
cHBlZFRlc3QoIldlYktpdDIvVGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5SZXN0b3JlU2Vzc2lvblN0
YXRlQ29udGFpbmluZ0Zvcm1EYXRhIiwgIlNlc3Npb24gU3RhdGUgaXMgbm90IGltcGxlbWVudGVk
IGluIEdUSysgcG9ydCIsIDg0OTYwKSwKKyAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdDIvVGVz
dFdlYktpdDIiLCAiV2ViS2l0Mi5TcGFjZWJhclNjcm9sbGluZyIsICJUZXN0IGZhaWxzIiwgODQ5
NjEpLAorICAgICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0Mi9UZXN0V2ViS2l0MiIsICJXZWJLaXQy
LldLQ29ubmVjdGlvbiIsICJUZXN0cyBmYWlsIGFuZCB0aW1lIG91dCBvdXQiLCA4NDk1OSksCisg
ICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXQyL1Rlc3RXZWJLaXQyIiwgIldlYktpdDIuV0tQYWdl
R2V0U2NhbGVGYWN0b3JOb3RaZXJvIiwgIlRlc3QgZmFpbHMgYW5kIHRpbWVzIG91dCIsIDg4NDU1
KSwKKyAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdDIvVGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5G
b3JjZVJlcGFpbnQiLCAiVGVzdCB0aW1lcyBvdXQiLCAxMDU1MzIpLAorICAgICAgICBTa2lwcGVk
VGVzdCgiV2ViS2l0Mi9UZXN0V2ViS2l0MiIsICJXZWJLaXQyLlJlbG9hZFBhZ2VBZnRlckNyYXNo
IiwgIlRlc3QgZmxha2lseSB0aW1lcyBvdXQiLCAxMTAxMjkpLAorICAgICAgICBTa2lwcGVkVGVz
dCgiV2ViS2l0Mi9UZXN0V2ViS2l0MiIsICJXZWJLaXQyLkRpZEFzc29jaWF0ZUZvcm1Db250cm9s
cyIsICJUZXN0IHRpbWVzIG91dCIsIDEyMDMwMiksCisgICAgICAgIFNraXBwZWRUZXN0KCJXZWJL
aXQyL1Rlc3RXZWJLaXQyIiwgIldlYktpdDIuSW5qZWN0ZWRCdW5kbGVGcmFtZUhpdFRlc3QiLCAi
VGVzdCB0aW1lcyBvdXQiLCAxMjAzMDMpLAorICAgICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0Mi9U
ZXN0V2ViS2l0MiIsICJXZWJLaXQyLlJlc2l6ZVJldmVyc2VQYWdpbmF0ZWRXZWJWaWV3IiwgIlRl
c3QgZmFpbHMiLCAxMjAzMDUpLAorICAgICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0Mi9UZXN0V2Vi
S2l0MiIsICJXZWJLaXQyLlNjcm9sbFBpbm5pbmdCZWhhdmlvcnMiLCAiVGVzdCBmYWlscyIsIDEy
MDMwNiksCisgICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXQyL1Rlc3RXZWJLaXQyIiwgIldlYktp
dDIuVGVybWluYXRlVHdpY2UiLCAiVGVzdCBjYXVzZXMgY3Jhc2ggb24gdGhlIG5leHQgdGVzdCIs
IDEyMTk3MCksCisgICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXQyL1Rlc3RXZWJLaXQyIiwgIldl
YktpdDIuR2VvbG9jYXRpb25UcmFuc2l0aW9uVG9IaWdoQWNjdXJhY3kiLCAiVGVzdCBjYXVzZXMg
Y3Jhc2ggb24gdGhlIG5leHQgdGVzdCIsIDEyNTA2OCksCisgICAgICAgIFNraXBwZWRUZXN0KCJX
ZWJLaXQyL1Rlc3RXZWJLaXQyIiwgIldlYktpdDIuR2VvbG9jYXRpb25UcmFuc2l0aW9uVG9Mb3dB
Y2N1cmFjeSIsICJUZXN0IGNhdXNlcyBjcmFzaCBvbiB0aGUgbmV4dCB0ZXN0IiwgMTI1MDY4KSwK
KyAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdDJHdGsvVGVzdEluc3BlY3RvclNlcnZlciIsIFNr
aXBwZWRUZXN0LkVOVElSRV9TVUlURSwgIlRpbWluZyBvdXQgb24gdGhlIGJvdCIsIDEyMjU3MSks
CiAgICAgXQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbnMsIHRlc3RzPVtdKToKQEAg
LTEwNiw2ICsxMDYsOSBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICBzZWxmLl9zcGlfcmVn
aXN0cnlkID0gTm9uZQogICAgICAgICBzZWxmLl9zcGlfYnVzX2xhdW5jaGVyID0gTm9uZQogCisg
ICAgZGVmIF90ZXN0X3Byb2dyYW1zX2Jhc2VfZGlyKHNlbGYpOgorICAgICAgICByZXR1cm4gb3Mu
cGF0aC5qb2luKHNlbGYuX3Byb2dyYW1zX3BhdGgsICJUZXN0V2ViS2l0QVBJIikKKwogICAgIGRl
ZiBfZ2V0X3Rlc3RzX2Zyb21fZGlyKHNlbGYsIHRlc3RfZGlyKToKICAgICAgICAgaWYgbm90IG9z
LnBhdGguaXNkaXIodGVzdF9kaXIpOgogICAgICAgICAgICAgcmV0dXJuIFtdCkBAIC0xMzEsNyAr
MTM0LDcgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKIAogICAgICAgICB0ZXN0cyA9IFtdCiAgICAgICAg
IGZvciB0ZXN0X2RpciBpbiBzZWxmLlRFU1RfRElSUzoKLSAgICAgICAgICAgIGFic29sdXRlX3Rl
c3RfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuX3Byb2dyYW1zX3BhdGgsIHRlc3RfZGlyKQorICAg
ICAgICAgICAgYWJzb2x1dGVfdGVzdF9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5fdGVzdF9wcm9n
cmFtc19iYXNlX2RpcigpLCB0ZXN0X2RpcikKICAgICAgICAgICAgIHRlc3RzLmV4dGVuZChzZWxm
Ll9nZXRfdGVzdHNfZnJvbV9kaXIoYWJzb2x1dGVfdGVzdF9kaXIpKQogICAgICAgICByZXR1cm4g
dGVzdHMKIApAQCAtMzYxLDE3ICszNjQsMTggQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAg
cmV0dXJuIDAKIAogICAgIGRlZiBfcnVuX3Rlc3Qoc2VsZiwgdGVzdF9wcm9ncmFtKToKLSAgICAg
ICAgaWYgIkdPYmplY3RBUElUZXN0IiBpbiB0ZXN0X3Byb2dyYW06CisgICAgICAgIGJhc2VkaXIg
PSBvcy5wYXRoLmJhc2VuYW1lKG9zLnBhdGguZGlybmFtZSh0ZXN0X3Byb2dyYW0pKQorICAgICAg
ICBpZiBiYXNlZGlyIGluIFsiV2ViS2l0Mkd0ayIsICJXZWJLaXRHdGsiXToKICAgICAgICAgICAg
IHJldHVybiBzZWxmLl9ydW5fdGVzdF9nbGliKHRlc3RfcHJvZ3JhbSkKIAotICAgICAgICBpZiAi
VGVzdFdlYktpdEFQSSIgaW4gdGVzdF9wcm9ncmFtOgorICAgICAgICBpZiBiYXNlZGlyIGluIFsi
V2ViS2l0MiIsICJKYXZhU2NyaXB0Q29yZSIsICJXVEYiLCAiV2ViQ29yZSIsICAiV2ViQ29yZUd0
ayJdOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9nb29nbGVfdGVzdF9zdWl0ZSh0ZXN0
X3Byb2dyYW0pCiAKICAgICAgICAgcmV0dXJuIDEKIAogICAgIGRlZiBydW5fdGVzdHMoc2VsZik6
CiAgICAgICAgIGlmIG5vdCBzZWxmLl90ZXN0czoKLSAgICAgICAgICAgIHN5cy5zdGRlcnIud3Jp
dGUoIkVSUk9SOiB0ZXN0cyBub3QgZm91bmQgaW4gJXMuXG4iICUgKHNlbGYuX3Byb2dyYW1zX3Bh
dGgpKQorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiRVJST1I6IHRlc3RzIG5vdCBmb3Vu
ZCBpbiAlcy5cbiIgJSAoc2VsZi5fdGVzdF9wcm9ncmFtc19iYXNlX2RpcigpKSkKICAgICAgICAg
ICAgIHN5cy5zdGRlcnIuZmx1c2goKQogICAgICAgICAgICAgcmV0dXJuIDEKIApAQCAtNDA1LDE3
ICs0MDksMTcgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgICAgIHNlbGYuX3RlYXJfZG93
bl90ZXN0aW5nX2Vudmlyb25tZW50KCkKIAogICAgICAgICBpZiBmYWlsZWRfdGVzdHM6Ci0gICAg
ICAgICAgICBuYW1lcyA9IFt0ZXN0LnJlcGxhY2Uoc2VsZi5fcHJvZ3JhbXNfcGF0aCwgJycsIDEp
IGZvciB0ZXN0IGluIGZhaWxlZF90ZXN0c10KKyAgICAgICAgICAgIG5hbWVzID0gW3Rlc3QucmVw
bGFjZShzZWxmLl90ZXN0X3Byb2dyYW1zX2Jhc2VfZGlyKCksICcnLCAxKSBmb3IgdGVzdCBpbiBm
YWlsZWRfdGVzdHNdCiAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJUZXN0cyBmYWlsZWQg
KCVkKTogJXNcbiIgJSAobGVuKG5hbWVzKSwgIiwgIi5qb2luKG5hbWVzKSkpCiAgICAgICAgICAg
ICBzeXMuc3Rkb3V0LmZsdXNoKCkKIAogICAgICAgICBpZiBjcmFzaGVkX3Rlc3RzOgotICAgICAg
ICAgICAgbmFtZXMgPSBbdGVzdC5yZXBsYWNlKHNlbGYuX3Byb2dyYW1zX3BhdGgsICcnLCAxKSBm
b3IgdGVzdCBpbiBjcmFzaGVkX3Rlc3RzXQorICAgICAgICAgICAgbmFtZXMgPSBbdGVzdC5yZXBs
YWNlKHNlbGYuX3Rlc3RfcHJvZ3JhbXNfYmFzZV9kaXIoKSwgJycsIDEpIGZvciB0ZXN0IGluIGNy
YXNoZWRfdGVzdHNdCiAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJUZXN0cyB0aGF0IGNy
YXNoZWQgKCVkKTogJXNcbiIgJSAobGVuKG5hbWVzKSwgIiwgIi5qb2luKG5hbWVzKSkpCiAgICAg
ICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKIAogICAgICAgICBpZiB0aW1lZF9vdXRfdGVzdHM6
Ci0gICAgICAgICAgICBuYW1lcyA9IFt0ZXN0LnJlcGxhY2Uoc2VsZi5fcHJvZ3JhbXNfcGF0aCwg
JycsIDEpIGZvciB0ZXN0IGluIHRpbWVkX291dF90ZXN0c10KKyAgICAgICAgICAgIG5hbWVzID0g
W3Rlc3QucmVwbGFjZShzZWxmLl90ZXN0X3Byb2dyYW1zX2Jhc2VfZGlyKCksICcnLCAxKSBmb3Ig
dGVzdCBpbiB0aW1lZF9vdXRfdGVzdHNdCiAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJU
ZXN0cyB0aGF0IHRpbWVkIG91dCAoJWQpOiAlc1xuIiAlIChsZW4obmFtZXMpLCAiLCAiLmpvaW4o
bmFtZXMpKSkKICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQogCmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKaW5kZXggNDIxZWYyNy4uY2MzZGEyNSAxMDA2NDQKLS0t
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CisrKyBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQpAQCAtMzE3LDcgKzMxNyw3IEBAIF9DTUFL
RV9GSUxFX0VYVEVOU0lPTiA9ICdjbWFrZScKICMgV2ViS2l0IG1haW50YWlucyBzb21lIGZpbGVz
IGluIE1vemlsbGEgc3R5bGUgb24gcHVycG9zZSB0byBlYXNlCiAjIGZ1dHVyZSBtZXJnZXMuCiBf
U0tJUFBFRF9GSUxFU19XSVRIX1dBUk5JTkcgPSBbCi0gICAgIlNvdXJjZS9XZWJLaXQvZ3RrL3Rl
c3RzLyIsCisgICAgIlRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrLyIsCiAgICAg
IyBBbGwgV2ViS2l0Ki5oIGZpbGVzIGluIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
LAogICAgICMgZXhjZXB0IHRob3NlIGVuZGluZyBpbiAuLi5Qcml2YXRlLmggYXJlIEdUSysgQVBJ
IGhlYWRlcnMsCiAgICAgIyB3aGljaCBkaWZmZXIgZ3JlYXRseSBmcm9tIFdlYktpdCBjb2Rpbmcg
c3R5bGUuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJf
dW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJfdW5pdHRl
c3QucHkKaW5kZXggOTQ1YWZmOS4uYjk1NGU2YiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9zdHlsZS9jaGVja2VyX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvc3R5bGUvY2hlY2tlcl91bml0dGVzdC5weQpAQCAtMjgwLDcgKzI4MCw3IEBAIGNsYXNz
IENoZWNrZXJEaXNwYXRjaGVyU2tpcFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAi
IiJUZXN0IHNob3VsZF9za2lwX3dpdGhfd2FybmluZygpLiIiIgogICAgICAgICAjIENoZWNrIHNr
aXBwZWQgZmlsZXMuCiAgICAgICAgIHBhdGhzX3RvX3NraXAgPSBbCi0gICAgICAgICAgICJTb3Vy
Y2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXRrLmMiLAorICAgICAgICAgICAiVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGF0ay5jIiwKICAgICAgICAgICAgIlNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaCIsCiAgICAgICAgICAgICJTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgiLAogICAgICAgICAgICAi
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TG9hZGVyLmgiLApAQCAtMjk3
LDggKzI5Nyw4IEBAIGNsYXNzIENoZWNrZXJEaXNwYXRjaGVyU2tpcFRlc3QodW5pdHRlc3QuVGVz
dENhc2UpOgogICAgICAgICAgICAiU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvSGVs
cGVyQ2xhc3MuaCIsCiAgICAgICAgICAgICJTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3LmNwcCIsCiAgICAgICAgICAgICJTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oIiwKLSAgICAgICAgICAgIlNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcCIsCi0gICAgICAg
ICAgICJTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5o
IiwKKyAgICAgICAgICAgIlRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9XZWJW
aWV3VGVzdC5jcHAiLAorICAgICAgICAgICAiVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXQyR3RrL1dlYlZpZXdUZXN0LmgiLAogICAgICAgICAgICAgXQogCiAgICAgICAgIGZvciBwYXRo
IGluIHBhdGhzX25vdF90b19za2lwOgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9H
TlVtYWtlZmlsZS5hbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvR05VbWFrZWZpbGUuYW0KaW5kZXgg
MmVhMTA0MC4uYjRjZWRhNCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9HTlVtYWtl
ZmlsZS5hbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0dOVW1ha2VmaWxlLmFtCkBAIC0xLDYg
KzEsMTEgQEAKIG5vaW5zdF9MVExJQlJBUklFUyArPSBcCiAJTGlicmFyaWVzL2xpYlRlc3RXZWJL
aXRBUElNYWluLmxhCiAKK2lmIEVOQUJMRV9XRUJLSVQyCitub2luc3RfTFRMSUJSQVJJRVMgKz0g
XAorCUxpYnJhcmllcy9saWJUZXN0V2ViS2l0Mkd0a0FQSS5sYQorZW5kaWYKKwogTGlicmFyaWVz
X2xpYlRlc3RXZWJLaXRBUElNYWluX2xhX1NPVVJDRVMgPSBcCiAJVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0LmggXAogCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHNDb250cm9sbGVyLmNwcCBcCkBA
IC0yMCwzNyArMjUsMTgwIEBAIExpYnJhcmllc19saWJUZXN0V2ViS2l0QVBJTWFpbl9sYV9DUFBG
TEFHUyA9IFwKIAkkKGphdmFzY3JpcHRjb3JlX2NwcGZsYWdzKSBcCiAJJChHVEtfQ0ZMQUdTKQog
Cit3ZWJraXRndGtfdGVzdHNfY2ZsYWdzID0gXAorCS1mbm8tc3RyaWN0LWFsaWFzaW5nIFwKKwkt
RFRFU1RfUExVR0lOX0RJUj1cIiR7c2hlbGwgcHdkfS8ke3RvcF9idWlsZGRpcn0vVGVzdE5ldHNj
YXBlUGx1Z2luLy5saWJzXCIgXAorCS1JJChzcmNkaXIpL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9G
b3J3YXJkaW5nSGVhZGVycyBcCisJLUkkKFdlYktpdCkgXAorCS1JJChHRU5TT1VSQ0VTKSBcCisJ
LUkkKHRvcF9idWlsZGRpcikvU291cmNlL1dlYktpdC9ndGsgXAorCS1JJCh0b3Bfc3JjZGlyKS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncyBcCisJLUkkKHRvcF9zcmNkaXIpL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2dvYmplY3QgXAorCSQoZ2xvYmFsX2NwcGZsYWdzKSBcCisJJChnbG9iYWxfY2Zs
YWdzKSBcCisJJChqYXZhc2NyaXB0Y29yZV9jcHBmbGFncykgXAorCSQoRlJFRVRZUEVfQ0ZMQUdT
KSBcCisJJChHTElCX0NGTEFHUykgXAorCSQoR1RLX0NGTEFHUykgXAorCSQoTElCU09VUF9DRkxB
R1MpIFwKKwkkKFhSRU5ERVJfQ0ZMQUdTKSBcCisJJChYVF9DRkxBR1MpCisKK3dlYmtpdGd0a190
ZXN0c19sZGFkZCA9IFwKKwlsaWJqYXZhc2NyaXB0Y29yZWd0ay1AV0VCS0lUR1RLX0FQSV9NQUpP
Ul9WRVJTSU9OQC5AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQC5sYSBcCisJbGlid2Via2l0
Z3RrLUBXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05ALkBXRUJLSVRHVEtfQVBJX01JTk9SX1ZF
UlNJT05ALmxhIFwKKwkkKEZSRUVUWVBFX0xJQlMpIFwKKwkkKEdUS19MSUJTKSBcCisJJChHTElC
X0xJQlMpIFwKKwkkKExJQlNPVVBfTElCUykgXAorCSQoWFJFTkRFUl9MSUJTKQorCit3ZWJraXRn
dGtfdGVzdHNfbGRmbGFncyA9IFwKKwktbm8taW5zdGFsbAorCisKK3dlYmtpdDJndGtfdGVzdHNf
Y3BwZmxhZ3MgPSBcCisJLURXRUJLSVRfRVhFQ19QQVRIPVwiJHtzaGVsbCBwd2R9LyQodG9wX2J1
aWxkZGlyKS9Qcm9ncmFtc1wiIFwKKwktRFdFQktJVF9TUkNfRElSPVwiJHtzaGVsbCBwd2R9LyR7
c3JjZGlyfVwiIFwKKwktRFdFQktJVF9ERVJJVkVEX1NSQ19ESVI9XCIke3NoZWxsIHB3ZH0vJHt0
b3BfYnVpbGRkaXJ9L0Rlcml2ZWRTb3VyY2VzXCIgXAorCS1EV0VCS0lUX1RFU1RfUExVR0lOX0RJ
Uj1cIiR7c2hlbGwgcHdkfS8ke3RvcF9idWlsZGRpcn0vVGVzdE5ldHNjYXBlUGx1Z2luLy5saWJz
XCIgXAorCS1EV0VCS0lUX1RFU1RfV0VCX0VYVEVOU0lPTlNfRElSPVwiJHtzaGVsbCBwd2R9LyR7
dG9wX2J1aWxkZGlyfS9MaWJyYXJpZXMvV2ViRXh0ZW5zaW9ucy8ubGlic1wiIFwKKwktRFdFQktJ
VF9JTkpFQ1RFRF9CVU5ETEVfUEFUSD1cIiR7c2hlbGwgcHdkfS8kKHRvcF9idWlsZGRpcikvLmxp
YnNcIiBcCisJJChqYXZhc2NyaXB0Y29yZV9jcHBmbGFncykgXAorCS1JJChzcmNkaXIpL1NvdXJj
ZSBcCisJLUkkKHNyY2RpcikvU291cmNlL1dlYktpdDIgXAorCS1JJChzcmNkaXIpL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZSBcCisJLUkkKHNyY2RpcikvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2Vi
S2l0Mkd0ayBcCisJLUkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9pbmNs
dWRlIFwKKwktSSQodG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL3dlYmtpdDJn
dGsgXAorCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvd2Via2l0Mmd0
ay9pbmNsdWRlIFwKKwktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ayBcCisJJChnbG9iYWxfY3BwZmxhZ3MpIFwKKwkkKEZSRUVUWVBFX0NGTEFHUykgXAorCSQoR0xJ
Ql9DRkxBR1MpIFwKKwkkKEdUS19DRkxBR1MpIFwKKwkkKExJQlNPVVBfQ0ZMQUdTKQorCit3ZWJr
aXQyZ3RrX3Rlc3RzX2xkYWRkID0gXAorCUxpYnJhcmllcy9saWJUZXN0V2ViS2l0Mkd0a0FQSS5s
YSBcCisJbGliamF2YXNjcmlwdGNvcmVndGstQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkAu
QFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkAubGEgXAorCWxpYndlYmtpdDJndGstQFdFQktJ
VEdUS19BUElfTUFKT1JfVkVSU0lPTkAuQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkAubGEg
XAorCSQoRlJFRVRZUEVfTElCUykgXAorCSQoR0VPQ0xVRV9MSUJTKSBcCisJJChHTElCX0xJQlMp
IFwKKwkkKEdUS19MSUJTKSBcCisJJChMSUJTT1VQX0xJQlMpCisKK3dlYmtpdDJndGtfdGVzdHNf
bGRmbGFncyA9IFwKKwktbm8taW5zdGFsbAorCitMaWJyYXJpZXNfbGliVGVzdFdlYktpdDJHdGtB
UElfbGFfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL0xv
YWRUcmFja2luZ1Rlc3QuY3BwIFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3Rr
L0xvYWRUcmFja2luZ1Rlc3QuaCBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0
ay9XZWJLaXRUZXN0QnVzLmNwcCBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0
ay9XZWJLaXRUZXN0QnVzLmggXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsv
V2ViS2l0VGVzdFNlcnZlci5jcHAgXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJH
dGsvV2ViS2l0VGVzdFNlcnZlci5oIFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQy
R3RrL1dlYlByb2Nlc3NUZXN0UnVubmVyLmNwcCBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsv
V2ViS2l0Mkd0ay9XZWJQcm9jZXNzVGVzdFJ1bm5lci5oIFwKKwlUb29scy9UZXN0V2ViS2l0QVBJ
L2d0ay9XZWJLaXQyR3RrL1Rlc3RNYWluLmNwcCBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsv
V2ViS2l0Mkd0ay9UZXN0TWFpbi5oIFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQy
R3RrL1dlYlZpZXdUZXN0LmNwcCBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0
ay9XZWJWaWV3VGVzdC5oCisKK0xpYnJhcmllc19saWJUZXN0V2ViS2l0Mkd0a0FQSV9sYV9DUFBG
TEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19jcHBmbGFncykKKworCiBub2luc3RfUFJPR1JBTVMg
Kz0gXAotCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvVGVzdFdURiBcCi0JUHJvZ3JhbXMvVGVzdFdl
YktpdEFQSS9UZXN0SmF2YVNjcmlwdENvcmUgXAotCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvVGVz
dFdlYkNvcmUgXAotCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvVGVzdEd0aworCVByb2dyYW1zL1Rl
c3RXZWJLaXRBUEkvV1RGL1Rlc3RXVEYgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvSmF2YVNj
cmlwdENvcmUvVGVzdEphdmFTY3JpcHRDb3JlIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dl
YkNvcmUvVGVzdFdlYkNvcmUgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViQ29yZUd0ay9U
ZXN0V2ViQ29yZUd0ayBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXRHdGsvdGVzdGFw
cGxpY2F0aW9uY2FjaGUgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0R3RrL3Rlc3Rj
b250ZXh0bWVudSBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXRHdGsvdGVzdGRvbWRv
Y3VtZW50IFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdEd0ay90ZXN0ZG9tZG9td2lu
ZG93IFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdEd0ay90ZXN0ZG9tbm9kZSBcCisJ
UHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXRHdGsvdGVzdGh0dHBiYWNrZW5kIFwKKwlQcm9n
cmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdEd0ay90ZXN0ZmF2aWNvbmRhdGFiYXNlIFwKKwlQcm9n
cmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdEd0ay90ZXN0bG9hZGluZyBcCisJUHJvZ3JhbXMvVGVz
dFdlYktpdEFQSS9XZWJLaXRHdGsvdGVzdGdsb2JhbHMgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRB
UEkvV2ViS2l0R3RrL3Rlc3RtaW1laGFuZGxpbmcgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkv
V2ViS2l0R3RrL3Rlc3RuZXR3b3JrcmVxdWVzdCBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9X
ZWJLaXRHdGsvdGVzdG5ldHdvcmtyZXNwb25zZSBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9X
ZWJLaXRHdGsvdGVzdHdlYmZyYW1lIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdEd0
ay90ZXN0d2ViYmFja2ZvcndhcmRsaXN0IFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktp
dEd0ay90ZXN0d2ViaGlzdG9yeWl0ZW0gXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0
R3RrL3Rlc3R3aW5kb3cgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0R3RrL3Rlc3Rk
b3dubG9hZCBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXRHdGsvdGVzdGF0ayBcCisJ
UHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXRHdGsvdGVzdGF0a3JvbGVzIFwKKwlQcm9ncmFt
cy9UZXN0V2ViS2l0QVBJL1dlYktpdEd0ay90ZXN0aGl0dGVzdHJlc3VsdCBcCisJUHJvZ3JhbXMv
VGVzdFdlYktpdEFQSS9XZWJLaXRHdGsvdGVzdHdlYmluc3BlY3RvciBcCisJUHJvZ3JhbXMvVGVz
dFdlYktpdEFQSS9XZWJLaXRHdGsvdGVzdHdlYnNldHRpbmdzIFwKKwlQcm9ncmFtcy9UZXN0V2Vi
S2l0QVBJL1dlYktpdEd0ay90ZXN0d2VicmVzb3VyY2UgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRB
UEkvV2ViS2l0R3RrL3Rlc3R3ZWJkYXRhc291cmNlIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJ
L1dlYktpdEd0ay90ZXN0d2VicGx1Z2luZGF0YWJhc2UgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRB
UEkvV2ViS2l0R3RrL3Rlc3R3ZWJ2aWV3IFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktp
dEd0ay90ZXN0a2V5ZXZlbnRzIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdEd0ay90
ZXN0Y29weWFuZHBhc3RlCiAKIGlmIEVOQUJMRV9XRUJLSVQyCiBub2luc3RfUFJPR1JBTVMgKz0g
XAotCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdDIKKwlQcm9ncmFtcy9UZXN0V2Vi
S2l0QVBJL1dlYktpdDIvVGVzdFdlYktpdDIgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2Vi
S2l0Mkd0ay9JbnNwZWN0b3JUZXN0U2VydmVyIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dl
YktpdDJHdGsvVGVzdEF1dGhlbnRpY2F0aW9uIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dl
YktpdDJHdGsvVGVzdEJhY2tGb3J3YXJkTGlzdCBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9X
ZWJLaXQyR3RrL1Rlc3RDb250ZXh0TWVudSBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJL
aXQyR3RrL1Rlc3RDb29raWVNYW5hZ2VyIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktp
dDJHdGsvVGVzdERPTU5vZGUgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0Mkd0ay9U
ZXN0RG93bmxvYWRzIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdDJHdGsvVGVzdEZy
YW1lIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdDJHdGsvVGVzdEluc3BlY3RvciBc
CisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXQyR3RrL1Rlc3RJbnNwZWN0b3JTZXJ2ZXIg
XAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0Mkd0ay9UZXN0TG9hZGVyQ2xpZW50IFwK
KwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdDJHdGsvVGVzdFByaW50aW5nIFwKKwlQcm9n
cmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdDJHdGsvVGVzdFJlc291cmNlcyBcCisJUHJvZ3JhbXMv
VGVzdFdlYktpdEFQSS9XZWJLaXQyR3RrL1Rlc3RTU0wgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRB
UEkvV2ViS2l0Mkd0ay9UZXN0VUlDbGllbnQgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2Vi
S2l0Mkd0ay9UZXN0V2ViRXh0ZW5zaW9ucyBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJL
aXQyR3RrL1Rlc3RXZWJLaXRWZXJzaW9uIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktp
dDJHdGsvVGVzdFdlYktpdEZhdmljb25EYXRhYmFzZSBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQ
SS9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxlciBcCisJUHJvZ3JhbXMvVGVzdFdl
YktpdEFQSS9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRQb2xpY3lDbGllbnQgXAorCVByb2dyYW1zL1Rl
c3RXZWJLaXRBUEkvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0U2V0dGluZ3MgXAorCVByb2dyYW1zL1Rl
c3RXZWJLaXRBUEkvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0V2ViQ29udGV4dCBcCisJUHJvZ3JhbXMv
VGVzdFdlYktpdEFQSS9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRXZWJWaWV3IFwKKwlQcm9ncmFtcy9U
ZXN0V2ViS2l0QVBJL1dlYktpdDJHdGsvVGVzdFdlYktpdFdlYlZpZXdHcm91cCBcCisJUHJvZ3Jh
bXMvVGVzdFdlYktpdEFQSS9XZWJLaXQyR3RrL1Rlc3RXZWJWaWV3RWRpdG9yCisKK2lmIEhBVkVf
QVRTUEkyCitub2luc3RfUFJPR1JBTVMgKz0gXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2Vi
S2l0Mkd0ay9BY2Nlc3NpYmlsaXR5VGVzdFNlcnZlciBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQ
SS9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5CitlbmRpZgogZW5kaWYgIyBFTkFC
TEVfV0VCS0lUMgogCi1Qcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RXVEZfQ1BQRkxBR1MgPSBc
CitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dURl9UZXN0V1RGX0NQUEZMQUdTID0gXAogCSQoTGli
cmFyaWVzX2xpYlRlc3RXZWJLaXRBUElNYWluX2xhX0NQUEZMQUdTKSBcCiAJJChHTElCX0xJQlMp
IFwKIAkkKENBSVJPX0NGTEFHUykKIAotUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0V1RGX0NY
WEZMQUdTID0gXAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XVEZfVGVzdFdURl9DWFhGTEFHUyA9
IFwKIAktREdURVNUX0hBU19SVFRJPTAgXAogCSQoZ2xvYmFsX2N4eGZsYWdzKQogCi1Qcm9ncmFt
c19UZXN0V2ViS2l0QVBJX1Rlc3RXVEZfTERBREQgPSBcCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJ
X1dURl9UZXN0V1RGX0xEQUREID0gXAogCUxpYnJhcmllcy9saWJUZXN0V2ViS2l0QVBJTWFpbi5s
YSBcCiAJTGlicmFyaWVzL2xpYmd0ZXN0LmxhIFwKIAlsaWJXVEYubGEgXAogCSQoR1RLX0xJQlMp
IFwKIAkkKEdMSUJfTElCUykKIAotUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0V1RGX0xERkxB
R1MgPSBcCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dURl9UZXN0V1RGX0xERkxBR1MgPSBcCiAJ
LW5vLWluc3RhbGwKIAotUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0V1RGX1NPVVJDRVMgPSBc
CitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dURl9UZXN0V1RGX1NPVVJDRVMgPSBcCiAJVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQXRvbWljU3RyaW5nLmNwcCBcCiAJVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvQ1N0cmluZy5jcHAgXAogCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL0NoZWNrZWRBcml0aG1ldGljT3BlcmF0aW9ucy5jcHAgXApAQCAtNzgsMjMgKzIyNiwy
MyBAQCBQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RXVEZfU09VUkNFUyA9IFwKIAlUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9WZWN0b3IuY3BwIFwKIAlUb29scy9UZXN0V2ViS2l0QVBJ
L1dURlN0cmluZ1V0aWxpdGllcy5oCiAKLVByb2dyYW1zX1Rlc3RXZWJLaXRBUElfVGVzdEphdmFT
Y3JpcHRDb3JlX0NQUEZMQUdTID0gXAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9KYXZhU2NyaXB0
Q29yZV9UZXN0SmF2YVNjcmlwdENvcmVfQ1BQRkxBR1MgPSBcCiAJJChMaWJyYXJpZXNfbGliVGVz
dFdlYktpdEFQSU1haW5fbGFfQ1BQRkxBR1MpCiAKLVByb2dyYW1zX1Rlc3RXZWJLaXRBUElfVGVz
dEphdmFTY3JpcHRDb3JlX0NYWEZMQUdTID0gXAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9KYXZh
U2NyaXB0Q29yZV9UZXN0SmF2YVNjcmlwdENvcmVfQ1hYRkxBR1MgPSBcCiAJLURHVEVTVF9IQVNf
UlRUST0wIFwKIAkkKGdsb2JhbF9jeHhmbGFncykKIAotUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9U
ZXN0SmF2YVNjcmlwdENvcmVfTERBREQgPSBcCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX0phdmFT
Y3JpcHRDb3JlX1Rlc3RKYXZhU2NyaXB0Q29yZV9MREFERCA9IFwKIAlMaWJyYXJpZXMvbGliVGVz
dFdlYktpdEFQSU1haW4ubGEgXAogCUxpYnJhcmllcy9saWJndGVzdC5sYSBcCiAJbGliV1RGLmxh
IFwKIAkkKEdUS19MSUJTKQogCi1Qcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RKYXZhU2NyaXB0
Q29yZV9MREZMQUdTID0gXAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9KYXZhU2NyaXB0Q29yZV9U
ZXN0SmF2YVNjcmlwdENvcmVfTERGTEFHUyA9IFwKIAktbm8taW5zdGFsbAogCi1Qcm9ncmFtc19U
ZXN0V2ViS2l0QVBJX1Rlc3RKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTID0gXAorUHJvZ3JhbXNfVGVz
dFdlYktpdEFQSV9KYXZhU2NyaXB0Q29yZV9UZXN0SmF2YVNjcmlwdENvcmVfU09VUkNFUyA9IFwK
IAlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL0phdmFTY3JpcHRDb3JlL1ZNSW5zcGVjdG9yLmNw
cAogCiB3ZWJjb3JlX2xheWVyX2RlcHMgPSBcCkBAIC0xMjksMTUgKzI3NywxNSBAQCBsaWJXZWJD
b3JlTGF5ZXIuYTogJCh3ZWJjb3JlX2xheWVyX2RlcHMpCiBESVNUQ0xFQU5GSUxFUyArPSBcCiAJ
JCh0b3BfYnVpbGRkaXIpL2xpYldlYkNvcmVMYXllci5hCiAKLVByb2dyYW1zX1Rlc3RXZWJLaXRB
UElfVGVzdFdlYkNvcmVfQ1BQRkxBR1MgPSBcCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYkNv
cmVfVGVzdFdlYkNvcmVfQ1BQRkxBR1MgPSBcCiAJJChMaWJyYXJpZXNfbGliVGVzdFdlYktpdEFQ
SU1haW5fbGFfQ1BQRkxBR1MpIFwKIAktSSQodG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcy9X
ZWJDb3JlL2luY2x1ZGUKIAotUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0V2ViQ29yZV9DWFhG
TEFHUyA9IFwKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViQ29yZV9UZXN0V2ViQ29yZV9DWFhG
TEFHUyA9IFwKIAktREdURVNUX0hBU19SVFRJPTAgXAogCSQoZ2xvYmFsX2N4eGZsYWdzKQogCi1Q
cm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RXZWJDb3JlX0xEQUREID0gXAorUHJvZ3JhbXNfVGVz
dFdlYktpdEFQSV9XZWJDb3JlX1Rlc3RXZWJDb3JlX0xEQUREID0gXAogCUxpYnJhcmllcy9saWJU
ZXN0V2ViS2l0QVBJTWFpbi5sYSBcCiAJTGlicmFyaWVzL2xpYmd0ZXN0LmxhIFwKIAlsaWJqYXZh
c2NyaXB0Y29yZWd0ay1AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQC5AV0VCS0lUR1RLX0FQ
SV9NSU5PUl9WRVJTSU9OQC5sYSBcCkBAIC0xNjQsMTUgKzMxMiwxNSBAQCBQcm9ncmFtc19UZXN0
V2ViS2l0QVBJX1Rlc3RXZWJDb3JlX0xEQUREID0gXAogCSQoWFRfTElCUykgXAogCSQoWkxJQl9M
SUJTKQogCi1Qcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RXZWJDb3JlX0xERkxBR1MgPSBcCitQ
cm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYkNvcmVfVGVzdFdlYkNvcmVfTERGTEFHUyA9IFwKIAkt
bm8taW5zdGFsbAogCi1Qcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RXZWJDb3JlX1NPVVJDRVMg
PSBcCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYkNvcmVfVGVzdFdlYkNvcmVfU09VUkNFUyA9
IFwKIAlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvVVJMLmNwcCBcCiAJVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0xheW91dFVuaXQuY3BwCiAKLVByb2dyYW1zX1Rl
c3RXZWJLaXRBUElfVGVzdEd0a19DUFBGTEFHUyA9IFwKLQkkKFByb2dyYW1zX1Rlc3RXZWJLaXRB
UElfVGVzdFdURl9DUFBGTEFHUykgXAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJDb3JlR3Rr
X1Rlc3RXZWJDb3JlR3RrX0NQUEZMQUdTID0gXAorCSQoUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9X
VEZfVGVzdFdURl9DUFBGTEFHUykgXAogCSQocGxhdGZvcm1fY3BwZmxhZ3MpIFwKIAkkKHBsYXRm
b3JtZ3RrX2NwcGZsYWdzKSBcCiAJJCh3ZWJjb3JlX2NwcGZsYWdzKSBcCkBAIC0xODIsMTEgKzMz
MCwxMSBAQCBQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RHdGtfQ1BQRkxBR1MgPSBcCiAJJChH
VEtfQ0ZMQUdTKSBcCiAJJChMSUJTT1VQX0NGTEFHUykKIAotUHJvZ3JhbXNfVGVzdFdlYktpdEFQ
SV9UZXN0R3RrX0NYWEZMQUdTID0gXAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJDb3JlR3Rr
X1Rlc3RXZWJDb3JlR3RrX0NYWEZMQUdTID0gXAogCS1ER1RFU1RfSEFTX1JUVEk9MCBcCiAJJChn
bG9iYWxfY3h4ZmxhZ3MpCiAKLVByb2dyYW1zX1Rlc3RXZWJLaXRBUElfVGVzdEd0a19MREFERCA9
IFwKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViQ29yZUd0a19UZXN0V2ViQ29yZUd0a19MREFE
RCA9IFwKIAlMaWJyYXJpZXMvbGliVGVzdFdlYktpdEFQSU1haW4ubGEgXAogCUxpYnJhcmllcy9s
aWJndGVzdC5sYSBcCiAJbGliamF2YXNjcmlwdGNvcmVndGstQFdFQktJVEdUS19BUElfTUFKT1Jf
VkVSU0lPTkAuQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkAubGEgXApAQCAtMTk4LDEwICsz
NDYsMTAgQEAgUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0R3RrX0xEQUREID0gXAogCSQoR1RL
X0xJQlMpIFwKIAkkKExJQlNPVVBfTElCUykKIAotUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0
R3RrX0xERkxBR1MgPSBcCi0JJChQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RXVEZfTERGTEFH
UykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViQ29yZUd0a19UZXN0V2ViQ29yZUd0a19MREZM
QUdTID0gXAorCSQoUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XVEZfVGVzdFdURl9MREZMQUdTKQog
Ci1Qcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RHdGtfU09VUkNFUyA9IFwKK1Byb2dyYW1zX1Rl
c3RXZWJLaXRBUElfV2ViQ29yZUd0a19UZXN0V2ViQ29yZUd0a19TT1VSQ0VTID0gXAogCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50LmNwcCBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ludFNpemUuY3BwIFwKQEAgLTIxMSwxOSArMzU5LDE5MiBAQCBQcm9ncmFt
c19UZXN0V2ViS2l0QVBJX1Rlc3RHdGtfU09VUkNFUyA9IFwKIAlUb29scy9UZXN0V2ViS2l0QVBJ
L2NvbmZpZy5oIFwKIAlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2d0ay9JbnB1dE1ldGhvZEZp
bHRlci5jcHAKIAotUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0V2ViS2l0Ml9DUFBGTEFHUyA9
IFwKLQkkKFByb2dyYW1zX1Rlc3RXZWJLaXRBUElfVGVzdFdURl9DUFBGTEFHUykgXAorUHJvZ3Jh
bXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGFwcGxpY2F0aW9uY2FjaGVfU09VUkNFUyA9
IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0YXBwbGljYXRpb25j
YWNoZS5jCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0YXBwbGljYXRpb25j
YWNoZV9DRkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19jZmxhZ3MpCitQcm9ncmFtc19UZXN0V2Vi
S2l0QVBJX1dlYktpdEd0a190ZXN0YXBwbGljYXRpb25jYWNoZV9MREFERCA9ICQod2Via2l0Z3Rr
X3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGFwcGxp
Y2F0aW9uY2FjaGVfTERGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dy
YW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3Rjb250ZXh0bWVudV9TT1VSQ0VTID0gXAor
CVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3Rjb250ZXh0bWVudS5jCitQ
cm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0Y29udGV4dG1lbnVfQ0ZMQUdTID0g
JCh3ZWJraXRndGtfdGVzdHNfY2ZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRH
dGtfdGVzdGNvbnRleHRtZW51X0xEQUREID0gJCh3ZWJraXRndGtfdGVzdHNfbGRhZGQpCitQcm9n
cmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0Y29udGV4dG1lbnVfTERGTEFHUyA9ICQo
d2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0
R3RrX3Rlc3Rkb21kb2N1bWVudF9TT1VSQ0VTID0gXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0R3RrL3Rlc3Rkb21kb2N1bWVudC5jCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dl
YktpdEd0a190ZXN0ZG9tZG9jdW1lbnRfQ0ZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfY2ZsYWdz
KQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGRvbWRvY3VtZW50X0xEQURE
ID0gJCh3ZWJraXRndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktp
dEd0a190ZXN0ZG9tZG9jdW1lbnRfTERGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3Mp
CisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3Rkb21kb213aW5kb3dfU09V
UkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0ZG9tZG9t
d2luZG93LmMKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3Rkb21kb213aW5k
b3dfQ0ZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfY2ZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktp
dEFQSV9XZWJLaXRHdGtfdGVzdGRvbWRvbXdpbmRvd19MREFERCA9ICQod2Via2l0Z3RrX3Rlc3Rz
X2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGRvbWRvbXdpbmRv
d19MREZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdl
YktpdEFQSV9XZWJLaXRHdGtfdGVzdGRvbW5vZGVfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0ZG9tbm9kZS5jCitQcm9ncmFtc19UZXN0V2ViS2l0
QVBJX1dlYktpdEd0a190ZXN0ZG9tbm9kZV9DRkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19jZmxh
Z3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0ZG9tbm9kZV9MREFERCA9
ICQod2Via2l0Z3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRH
dGtfdGVzdGRvbW5vZGVfTERGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1By
b2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3RodHRwYmFja2VuZF9TT1VSQ0VTID0g
XAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RodHRwYmFja2VuZC5j
CitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0aHR0cGJhY2tlbmRfQ0ZMQUdT
ID0gJCh3ZWJraXRndGtfdGVzdHNfY2ZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJL
aXRHdGtfdGVzdGh0dHBiYWNrZW5kX0xEQUREID0gJCh3ZWJraXRndGtfdGVzdHNfbGRhZGQpCitQ
cm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0aHR0cGJhY2tlbmRfTERGTEFHUyA9
ICQod2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2Vi
S2l0R3RrX3Rlc3RmYXZpY29uZGF0YWJhc2VfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0ZmF2aWNvbmRhdGFiYXNlLmMgXAorCVRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RfdXRpbHMuYworUHJvZ3JhbXNfVGVzdFdlYktp
dEFQSV9XZWJLaXRHdGtfdGVzdGZhdmljb25kYXRhYmFzZV9DRkxBR1MgPSAkKHdlYmtpdGd0a190
ZXN0c19jZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0ZmF2aWNv
bmRhdGFiYXNlX0xEQUREID0gJCh3ZWJraXRndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0
V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0ZmF2aWNvbmRhdGFiYXNlX0xERkxBR1MgPSAkKHdlYmtp
dGd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190
ZXN0Z2xvYmFsc19TT1VSQ0VTID0gXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
R3RrL3Rlc3RnbG9iYWxzLmMKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3Rn
bG9iYWxzX0NGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2NmbGFncykKK1Byb2dyYW1zX1Rlc3RX
ZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3RnbG9iYWxzX0xEQUREID0gJCh3ZWJraXRndGtfdGVzdHNf
bGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0Z2xvYmFsc19MREZM
QUdTID0gJCh3ZWJraXRndGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQ
SV9XZWJLaXRHdGtfdGVzdGxvYWRpbmdfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdEd0ay90ZXN0bG9hZGluZy5jCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dl
YktpdEd0a190ZXN0bG9hZGluZ19DRkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19jZmxhZ3MpCitQ
cm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0bG9hZGluZ19MREFERCA9ICQod2Vi
a2l0Z3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVz
dGxvYWRpbmdfTERGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1z
X1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3RtaW1laGFuZGxpbmdfU09VUkNFUyA9IFwKKwlU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0bWltZWhhbmRsaW5nLmMgXAor
CVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RfdXRpbHMuYworUHJvZ3Jh
bXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdG1pbWVoYW5kbGluZ19DRkxBR1MgPSAkKHdl
YmtpdGd0a190ZXN0c19jZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190
ZXN0bWltZWhhbmRsaW5nX0xEQUREID0gJCh3ZWJraXRndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFt
c19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0bWltZWhhbmRsaW5nX0xERkxBR1MgPSAkKHdl
YmtpdGd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0
a190ZXN0bmV0d29ya3JlcXVlc3RfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdEd0ay90ZXN0bmV0d29ya3JlcXVlc3QuYworUHJvZ3JhbXNfVGVzdFdlYktpdEFQ
SV9XZWJLaXRHdGtfdGVzdG5ldHdvcmtyZXF1ZXN0X0NGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3Rz
X2NmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3RuZXR3b3JrcmVx
dWVzdF9MREFERCA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktp
dEFQSV9XZWJLaXRHdGtfdGVzdG5ldHdvcmtyZXF1ZXN0X0xERkxBR1MgPSAkKHdlYmtpdGd0a190
ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0bmV0
d29ya3Jlc3BvbnNlX1NPVVJDRVMgPSBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRHdGsvdGVzdG5ldHdvcmtyZXNwb25zZS5jCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktp
dEd0a190ZXN0bmV0d29ya3Jlc3BvbnNlX0NGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2NmbGFn
cykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3RuZXR3b3JrcmVzcG9uc2Vf
TERBREQgPSAkKHdlYmtpdGd0a190ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElf
V2ViS2l0R3RrX3Rlc3RuZXR3b3JrcmVzcG9uc2VfTERGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3Rz
X2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3R3ZWJmcmFt
ZV9TT1VSQ0VTID0gXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3
ZWJmcmFtZS5jCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0d2ViZnJhbWVf
Q0ZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfY2ZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQ
SV9XZWJLaXRHdGtfdGVzdHdlYmZyYW1lX0xEQUREID0gJCh3ZWJraXRndGtfdGVzdHNfbGRhZGQp
CitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0d2ViZnJhbWVfTERGTEFHUyA9
ICQod2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2Vi
S2l0R3RrX3Rlc3R3ZWJwbHVnaW5kYXRhYmFzZV9TT1VSQ0VTID0gXAorCVRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJwbHVnaW5kYXRhYmFzZS5jCitQcm9ncmFtc19U
ZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0d2VicGx1Z2luZGF0YWJhc2VfQ0ZMQUdTID0gJCh3
ZWJraXRndGtfdGVzdHNfY2ZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtf
dGVzdHdlYnBsdWdpbmRhdGFiYXNlX0xEQUREID0gJCh3ZWJraXRndGtfdGVzdHNfbGRhZGQpCitQ
cm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0d2VicGx1Z2luZGF0YWJhc2VfTERG
TEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRB
UElfV2ViS2l0R3RrX3Rlc3R3ZWJiYWNrZm9yd2FyZGxpc3RfU09VUkNFUyA9IFwKKwlUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2ViYmFja2ZvcndhcmRsaXN0LmMKK1By
b2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3R3ZWJiYWNrZm9yd2FyZGxpc3RfQ0ZM
QUdTID0gJCh3ZWJraXRndGtfdGVzdHNfY2ZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9X
ZWJLaXRHdGtfdGVzdHdlYmJhY2tmb3J3YXJkbGlzdF9MREFERCA9ICQod2Via2l0Z3RrX3Rlc3Rz
X2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdHdlYmJhY2tmb3J3
YXJkbGlzdF9MREZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNf
VGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdHdlYmhpc3RvcnlpdGVtX1NPVVJDRVMgPSBcCisJ
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYmhpc3RvcnlpdGVtLmMK
K1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3R3ZWJoaXN0b3J5aXRlbV9DRkxB
R1MgPSAkKHdlYmtpdGd0a190ZXN0c19jZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dl
YktpdEd0a190ZXN0d2ViaGlzdG9yeWl0ZW1fTERBREQgPSAkKHdlYmtpdGd0a190ZXN0c19sZGFk
ZCkKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3R3ZWJoaXN0b3J5aXRlbV9M
REZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktp
dEFQSV9XZWJLaXRHdGtfdGVzdHdpbmRvd19TT1VSQ0VTID0gXAorCVRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3aW5kb3cuYworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9X
ZWJLaXRHdGtfdGVzdHdpbmRvd19DRkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19jZmxhZ3MpCitQ
cm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0d2luZG93X0xEQUREID0gJCh3ZWJr
aXRndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0
d2luZG93X0xERkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19U
ZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0ZG93bmxvYWRfU09VUkNFUyA9IFwKKwlUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0ZG93bmxvYWQuYworUHJvZ3JhbXNfVGVz
dFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGRvd25sb2FkX0NGTEFHUyA9ICQod2Via2l0Z3RrX3Rl
c3RzX2NmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3Rkb3dubG9h
ZF9MREFERCA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQ
SV9XZWJLaXRHdGtfdGVzdGRvd25sb2FkX0xERkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19sZGZs
YWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0YXRrX1NPVVJDRVMg
PSBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGF0ay5jCitQcm9n
cmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0YXRrX0NGTEFHUyA9ICQod2Via2l0Z3Rr
X3Rlc3RzX2NmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3RhdGtf
TERBREQgPSAkKHdlYmtpdGd0a190ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElf
V2ViS2l0R3RrX3Rlc3RhdGtfTERGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisK
K1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3RhdGtyb2xlc19TT1VSQ0VTID0g
XAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RhdGtyb2xlcy5jCitQ
cm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0YXRrcm9sZXNfQ0ZMQUdTID0gJCh3
ZWJraXRndGtfdGVzdHNfY2ZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtf
dGVzdGF0a3JvbGVzX0xEQUREID0gJCh3ZWJraXRndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19U
ZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0YXRrcm9sZXNfTERGTEFHUyA9ICQod2Via2l0Z3Rr
X3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3R3
ZWJpbnNwZWN0b3JfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dEd0ay90ZXN0d2ViaW5zcGVjdG9yLmMgXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0R3RrL3Rlc3RfdXRpbHMuYworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVz
dHdlYmluc3BlY3Rvcl9DRkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19jZmxhZ3MpCitQcm9ncmFt
c19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0d2ViaW5zcGVjdG9yX0xEQUREID0gJCh3ZWJr
aXRndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0
d2ViaW5zcGVjdG9yX0xERkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19sZGZsYWdzKQorCitQcm9n
cmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0d2Vic2V0dGluZ3NfU09VUkNFUyA9IFwK
KwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2Vic2V0dGluZ3MuYwor
UHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdHdlYnNldHRpbmdzX0NGTEFHUyA9
ICQod2Via2l0Z3RrX3Rlc3RzX2NmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0
R3RrX3Rlc3R3ZWJzZXR0aW5nc19MREFERCA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkYWRkKQorUHJv
Z3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdHdlYnNldHRpbmdzX0xERkxBR1MgPSAk
KHdlYmtpdGd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktp
dEd0a190ZXN0d2VicmVzb3VyY2VfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdEd0ay90ZXN0d2VicmVzb3VyY2UuYworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9X
ZWJLaXRHdGtfdGVzdHdlYnJlc291cmNlX0NGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2NmbGFn
cykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3R3ZWJyZXNvdXJjZV9MREFE
RCA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkYWRkKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dl
YktpdEd0a190ZXN0d2ViZGF0YXNvdXJjZV9TT1VSQ0VTID0gXAorCVRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJkYXRhc291cmNlLmMKK1Byb2dyYW1zX1Rlc3RXZWJL
aXRBUElfV2ViS2l0R3RrX3Rlc3R3ZWJkYXRhc291cmNlX0NGTEFHUyA9ICQod2Via2l0Z3RrX3Rl
c3RzX2NmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3R3ZWJkYXRh
c291cmNlX0xEQUREID0gJCh3ZWJraXRndGtfdGVzdHNfbGRhZGQpCisKK1Byb2dyYW1zX1Rlc3RX
ZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3R3ZWJ2aWV3X1NPVVJDRVMgPSBcCisJVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYnZpZXcuYyBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdEd0ay90ZXN0X3V0aWxzLmMKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2Vi
S2l0R3RrX3Rlc3R3ZWJ2aWV3X0NGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2NmbGFncykKK1By
b2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3R3ZWJ2aWV3X0xEQUREID0gJCh3ZWJr
aXRndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0
d2Vidmlld19MREZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNf
VGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGhpdHRlc3RyZXN1bHRfU09VUkNFUyA9IFwKKwlU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0aGl0dGVzdHJlc3VsdC5jCitQ
cm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0aGl0dGVzdHJlc3VsdF9DRkxBR1Mg
PSAkKHdlYmtpdGd0a190ZXN0c19jZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktp
dEd0a190ZXN0aGl0dGVzdHJlc3VsdF9MREFERCA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkYWRkKQor
CitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0a2V5ZXZlbnRzX1NPVVJDRVMg
PSBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGtleWV2ZW50cy5j
CitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0a2V5ZXZlbnRzX0NGTEFHUyA9
ICQod2Via2l0Z3RrX3Rlc3RzX2NmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0
R3RrX3Rlc3RrZXlldmVudHNfTERBREQgPSAkKHdlYmtpdGd0a190ZXN0c19sZGFkZCkKK1Byb2dy
YW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3RrZXlldmVudHNfTERGTEFHUyA9ICQod2Vi
a2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3Rr
X3Rlc3Rjb3B5YW5kcGFzdGVfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdEd0ay90ZXN0Y29weWFuZHBhc3RlLmMgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9HdGtWZXJzaW9uaW5nLmMKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rl
c3Rjb3B5YW5kcGFzdGVfQ0ZMQUdTID0gXAorCSQod2Via2l0Z3RrX3Rlc3RzX2NmbGFncykgXAor
CS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ayBcCisJLUkkKHNyY2Rpcikv
U291cmNlL1dlYkNvcmUKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3Rjb3B5
YW5kcGFzdGVfTERBREQgPSAkKHdlYmtpdGd0a190ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1Rlc3RX
ZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3Rjb3B5YW5kcGFzdGVfTERGTEFHUyA9ICQod2Via2l0Z3Rr
X3Rlc3RzX2xkZmxhZ3MpCisKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyX1Rlc3RX
ZWJLaXQyX0NQUEZMQUdTID0gXAorCSQoUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XVEZfVGVzdFdU
Rl9DUFBGTEFHUykgXAogCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIv
aW5jbHVkZSBcCiAJJChGUkVFVFlQRV9DRkxBR1MpIFwKIAkkKEdMSUJfQ0ZMQUdTKSBcCiAJJChH
VEtfQ0ZMQUdTKSBcCiAJJChMSUJTT1VQX0NGTEFHUykKIAotUHJvZ3JhbXNfVGVzdFdlYktpdEFQ
SV9UZXN0V2ViS2l0Ml9DWFhGTEFHUyA9IFwKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0
Ml9UZXN0V2ViS2l0Ml9DWFhGTEFHUyA9IFwKIAktREdURVNUX0hBU19SVFRJPTAgXAogCSQoZ2xv
YmFsX2N4eGZsYWdzKQogCi1Qcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RXZWJLaXQyX0xEQURE
ID0gXAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyX1Rlc3RXZWJLaXQyX0xEQUREID0g
XAogCUxpYnJhcmllcy9saWJUZXN0V2ViS2l0QVBJTWFpbi5sYSBcCiAJTGlicmFyaWVzL2xpYmd0
ZXN0LmxhIFwKIAlsaWJqYXZhc2NyaXB0Y29yZWd0ay1AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJT
SU9OQC5AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQC5sYSBcCkBAIC0yMzMsMTAgKzU1NCwx
MCBAQCBQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RXZWJLaXQyX0xEQUREID0gXAogCSQoR1RL
X0xJQlMpIFwKIAkkKExJQlNPVVBfTElCUykKIAotUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0
V2ViS2l0Ml9MREZMQUdTID0gXAotCSQoUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0V1RGX0xE
RkxBR1MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJfVGVzdFdlYktpdDJfTERGTEFH
UyA9IFwKKwkkKFByb2dyYW1zX1Rlc3RXZWJLaXRBUElfV1RGX1Rlc3RXVEZfTERGTEFHUykKIAot
UHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0V2ViS2l0Ml9TT1VSQ0VTID0gXAorUHJvZ3JhbXNf
VGVzdFdlYktpdEFQSV9XZWJLaXQyX1Rlc3RXZWJLaXQyX1NPVVJDRVMgPSBcCiAJVG9vbHMvVGVz
dFdlYktpdEFQSS9jb25maWcuaCBcCiAJVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvUGxhdGZvcm1V
dGlsaXRpZXNHdGsuY3BwIFwKIAlUb29scy9UZXN0V2ViS2l0QVBJL2d0ay9QbGF0Zm9ybVdlYlZp
ZXdHdGsuY3BwIFwKQEAgLTM1NywxMSArNjc4LDI0NSBAQCBMaWJyYXJpZXNfbGliVGVzdFdlYktp
dEFQSUluamVjdGVkQnVuZGxlX2xhX0NGTEFHUyA9IFwKIAkkKGdsb2JhbF9jZmxhZ3MpCiAKIAot
c3RhbXAtdGVzdHdlYmtpdGFwaS13ZWJjb3JlLWZvcndhcmRpbmctaGVhZGVyczogJChXZWJLaXQy
KS9TY3JpcHRzL2dlbmVyYXRlLWZvcndhcmRpbmctaGVhZGVycy5wbCAkKFByb2dyYW1zX1Rlc3RX
ZWJLaXRBUElfVGVzdFdlYkNvcmVfU09VUkNFUykKK2lmIEVOQUJMRV9XRUJLSVQyCitub2luc3Rf
TFRMSUJSQVJJRVMgKz0gTGlicmFyaWVzL1dlYkV4dGVuc2lvbnMvbGliV2ViRXh0ZW5zaW9uVGVz
dC5sYQorZW5kaWYKKworTGlicmFyaWVzX1dlYkV4dGVuc2lvbnNfbGliV2ViRXh0ZW5zaW9uVGVz
dF9sYV9TT1VSQ0VTID0gXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9X
ZWJFeHRlbnNpb25UZXN0LmNwcAorCitMaWJyYXJpZXNfV2ViRXh0ZW5zaW9uc19saWJXZWJFeHRl
bnNpb25UZXN0X2xhX0xERkxBR1MgPSBcCisJLXJwYXRoICR7c2hlbGwgcHdkfS8kKHRvcF9idWls
ZGRpcikvTGlicmFyaWVzL1dlYkV4dGVuc2lvbnMvLmxpYnMgXAorCSQobm9fdW5kZWZpbmVkKSBc
CisJLWF2b2lkLXZlcnNpb24gXAorCS1tb2R1bGUKKworTGlicmFyaWVzX1dlYkV4dGVuc2lvbnNf
bGliV2ViRXh0ZW5zaW9uVGVzdF9sYV9DUFBGTEFHUyA9IFwKKwktSSQoc3JjZGlyKS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsgXAorCS1JJCh0b3BfYnVp
bGRkaXIpL0Rlcml2ZWRTb3VyY2VzIFwKKwktSSQodG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNl
cy9XZWJLaXQyL3dlYmtpdDJleHRlbnNpb24vaW5jbHVkZSBcCisJLURXRUJLSVQyX0NPTVBJTEFU
SU9OIFwKKwkkKHdlYmtpdDJndGtfdGVzdHNfY3BwZmxhZ3MpCisKK0xpYnJhcmllc19XZWJFeHRl
bnNpb25zX2xpYldlYkV4dGVuc2lvblRlc3RfbGFfQ1hYRkxBR1MgPSBcCisgICAgICAgICQoZ2xv
YmFsX2N4eGZsYWdzKQorCitMaWJyYXJpZXNfV2ViRXh0ZW5zaW9uc19saWJXZWJFeHRlbnNpb25U
ZXN0X2xhX0NGTEFHUyA9IFwKKyAgICAgICAgJChnbG9iYWxfY2ZsYWdzKQorCisKK2lmIEVOQUJM
RV9XRUJLSVQyCitub2luc3RfTFRMSUJSQVJJRVMgKz0gTGlicmFyaWVzL1dlYkV4dGVuc2lvbnMv
bGliV2ViUHJvY2Vzc1Rlc3QubGEKK2VuZGlmCisKK0xpYnJhcmllc19XZWJFeHRlbnNpb25zX2xp
YldlYlByb2Nlc3NUZXN0X2xhX1NPVVJDRVMgPSBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXQyR3RrL0RPTU5vZGVUZXN0LmNwcCBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXQyR3RrL0ZyYW1lVGVzdC5jcHAgXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Mkd0ay9XZWJQcm9jZXNzVGVzdC5jcHAgXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Mkd0ay9XZWJQcm9jZXNzVGVzdC5oCisKK0xpYnJhcmllc19XZWJFeHRlbnNpb25z
X2xpYldlYlByb2Nlc3NUZXN0X2xhX0xERkxBR1MgPSBcCisJLXJwYXRoICR7c2hlbGwgcHdkfS8k
KHRvcF9idWlsZGRpcikvTGlicmFyaWVzL1dlYkV4dGVuc2lvbnMvLmxpYnMgXAorCSQobm9fdW5k
ZWZpbmVkKSBcCisJLWF2b2lkLXZlcnNpb24gXAorCS1tb2R1bGUKKworTGlicmFyaWVzX1dlYkV4
dGVuc2lvbnNfbGliV2ViUHJvY2Vzc1Rlc3RfbGFfQ1BQRkxBR1MgPSBcCisJLUkkKHNyY2Rpcikv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrIFwKKwktSSQo
dG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcyBcCisJLUkkKHRvcF9idWlsZGRpcikvRGVyaXZl
ZFNvdXJjZXMvV2ViS2l0Mi93ZWJraXQyZXh0ZW5zaW9uL2luY2x1ZGUgXAorCS1EV0VCS0lUMl9D
T01QSUxBVElPTiBcCisJJCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQorCitMaWJyYXJpZXNf
V2ViRXh0ZW5zaW9uc19saWJXZWJQcm9jZXNzVGVzdF9sYV9DWFhGTEFHUyA9IFwKKwkkKGdsb2Jh
bF9jeHhmbGFncykKKworTGlicmFyaWVzX1dlYkV4dGVuc2lvbnNfbGliV2ViUHJvY2Vzc1Rlc3Rf
bGFfQ0ZMQUdTID0gXAorCSQoZ2xvYmFsX2NmbGFncykKKworCitQcm9ncmFtcy9UZXN0V2ViS2l0
QVBJL1dlYktpdDJHdGsvcmVzb3VyY2VzL3dlYmtpdDJndGstdGVzdHMtcmVzb3VyY2VzLmdyZXNv
dXJjZTogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL3Jlc291cmNlcy93ZWJr
aXQyZ3RrLXRlc3RzLmdyZXNvdXJjZS54bWwgJChzaGVsbCAkKEdMSUJfQ09NUElMRV9SRVNPVVJD
RVMpIC0tc291cmNlZGlyPSQoc3JjZGlyKSAtLWdlbmVyYXRlLWRlcGVuZGVuY2llcyAkKHNyY2Rp
cikvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL3Jlc291cmNlcy93ZWJraXQy
Z3RrLXRlc3RzLmdyZXNvdXJjZS54bWwpCisJJChBTV9WX2F0KW1rZGlyIC1wICR7R0VOUFJPR1JB
TVN9L1Rlc3RXZWJLaXRBUEkvV2ViS2l0Mkd0ay9yZXNvdXJjZXMKKwkkKEFNX1ZfR0VOKSAkKEdM
SUJfQ09NUElMRV9SRVNPVVJDRVMpIC0tdGFyZ2V0PSRAIC0tc291cmNlZGlyPSQoc3JjZGlyKSAk
PAorCitESVNUQ0xFQU5GSUxFUyArPSBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXQy
R3RrL3Jlc291cmNlcy93ZWJraXQyZ3RrLXRlc3RzLXJlc291cmNlcy5ncmVzb3VyY2UKKworbm9p
bnN0X0RBVEEgKz0gXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0Mkd0ay9yZXNvdXJj
ZXMvd2Via2l0Mmd0ay10ZXN0cy1yZXNvdXJjZXMuZ3Jlc291cmNlCisKKworUHJvZ3JhbXNfVGVz
dFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRXZWJDb250ZXh0X1NPVVJDRVMgPSBcCisJ
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRXZWJDb250ZXh0
LmNwcAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRXZWJDb250
ZXh0X0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVz
dFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRXZWJDb250ZXh0X0xEQUREID0gJCh3ZWJr
aXQyZ3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rl
c3RXZWJLaXRXZWJDb250ZXh0X0xERkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRmbGFncykK
KworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRXZWJWaWV3X1NP
VVJDRVMgPSBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJL
aXRXZWJWaWV3LmNwcAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJL
aXRXZWJWaWV3X0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3Jh
bXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRXZWJWaWV3X0xEQUREID0gJCh3
ZWJraXQyZ3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3Rr
X1Rlc3RXZWJLaXRXZWJWaWV3X0xERkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRmbGFncykK
KworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RMb2FkZXJDbGllbnRfU09V
UkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdExvYWRl
ckNsaWVudC5jcHAKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0TG9hZGVy
Q2xpZW50X0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNf
VGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RMb2FkZXJDbGllbnRfTERBREQgPSAkKHdlYmtp
dDJndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVz
dExvYWRlckNsaWVudF9MREZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1By
b2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0V2ViS2l0U2V0dGluZ3NfU09VUkNF
UyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFNl
dHRpbmdzLmNwcAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRT
ZXR0aW5nc19DUFBGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19jcHBmbGFncykKK1Byb2dyYW1z
X1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0V2ViS2l0U2V0dGluZ3NfTERBREQgPSAkKHdl
YmtpdDJndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtf
VGVzdFdlYktpdFNldHRpbmdzX0xERkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRmbGFncykK
KworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX0luc3BlY3RvclRlc3RTZXJ2ZXJf
U09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvSW5zcGVj
dG9yVGVzdFNlcnZlci5jcHAKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19JbnNw
ZWN0b3JUZXN0U2VydmVyX0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQor
UHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX0luc3BlY3RvclRlc3RTZXJ2ZXJfTERB
REQgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dl
YktpdDJHdGtfSW5zcGVjdG9yVGVzdFNlcnZlcl9MREZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3Rz
X2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0QmFja0Zv
cndhcmRMaXN0X1NPVVJDRVMgPSBcCisgICAgICAgIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Mkd0ay9UZXN0QmFja0ZvcndhcmRMaXN0LmNwcAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQ
SV9XZWJLaXQyR3RrX1Rlc3RCYWNrRm9yd2FyZExpc3RfQ1BQRkxBR1MgPSAkKHdlYmtpdDJndGtf
dGVzdHNfY3BwZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdEJh
Y2tGb3J3YXJkTGlzdF9MREFERCA9ICQod2Via2l0Mmd0a190ZXN0c19sZGFkZCkKK1Byb2dyYW1z
X1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0QmFja0ZvcndhcmRMaXN0X0xERkxBR1MgPSAk
KHdlYmtpdDJndGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJL
aXQyR3RrX1Rlc3RXZWJLaXRQb2xpY3lDbGllbnRfU09VUkNFUyA9IFwKKyAgICAgICAgVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRQb2xpY3lDbGllbnQuY3Bw
CitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYktpdFBvbGljeUNsaWVu
dF9DUFBGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19jcHBmbGFncykKK1Byb2dyYW1zX1Rlc3RX
ZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0V2ViS2l0UG9saWN5Q2xpZW50X0xEQUREID0gJCh3ZWJr
aXQyZ3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rl
c3RXZWJLaXRQb2xpY3lDbGllbnRfTERGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19sZGZsYWdz
KQorCitpZiBIQVZFX0FUU1BJMgorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX0Fj
Y2Vzc2liaWxpdHlUZXN0U2VydmVyX1NPVVJDRVMgPSBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXQyR3RrL0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyLmNwcAorUHJvZ3JhbXNfVGVz
dFdlYktpdEFQSV9XZWJLaXQyR3RrX0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyX0NQUEZMQUdTID0g
JCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJL
aXQyR3RrX0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyX0xEQUREID0gJCh3ZWJraXQyZ3RrX3Rlc3Rz
X2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX0FjY2Vzc2liaWxpdHlU
ZXN0U2VydmVyX0xERkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3Jh
bXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5X1NPVVJD
RVMgPSBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRB
Y2Nlc3NpYmlsaXR5LmNwcAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RX
ZWJLaXRBY2Nlc3NpYmlsaXR5X0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdz
KSAkKEFUU1BJMl9DRkxBR1MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVz
dFdlYktpdEFjY2Vzc2liaWxpdHlfTERBREQgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRhZGQpICQo
QVRTUEkyX0xJQlMpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYktp
dEFjY2Vzc2liaWxpdHlfTERGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19sZGZsYWdzKQorZW5k
aWYKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3REb3dubG9hZHNfU09V
UkNFUyA9IFwKKyAgICAgICAgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rl
c3REb3dubG9hZHMuY3BwCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdERv
d25sb2Fkc19DUFBGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19jcHBmbGFncykKK1Byb2dyYW1z
X1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0RG93bmxvYWRzX0xEQUREID0gJCh3ZWJraXQy
Z3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RE
b3dubG9hZHNfTERGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFt
c19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYlZpZXdFZGl0b3JfU09VUkNFUyA9IFwK
KyAgICAgICAgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJWaWV3
RWRpdG9yLmNwcAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJWaWV3
RWRpdG9yX0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNf
VGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJWaWV3RWRpdG9yX0xEQUREID0gJCh3ZWJr
aXQyZ3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rl
c3RXZWJWaWV3RWRpdG9yX0xERkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRmbGFncykKKwor
UHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RQcmludGluZ19TT1VSQ0VTID0g
XAorICAgICAgICBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFByaW50
aW5nLmNwcAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RQcmludGluZ19D
UFBGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19jcHBmbGFncykgJChHVEtfVU5JWF9QUklOVElO
R19DRkxBR1MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFByaW50aW5n
X0xEQUREID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkYWRkKSAkKEdUS19VTklYX1BSSU5USU5HX0xJ
QlMpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFByaW50aW5nX0xERkxB
R1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQ
SV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VfU09VUkNFUyA9IFwKKwlUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdEZhdmljb25EYXRhYmFz
ZS5jcHAKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0V2ViS2l0RmF2aWNv
bkRhdGFiYXNlX0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3Jh
bXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VfTERB
REQgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dl
YktpdDJHdGtfVGVzdFdlYktpdEZhdmljb25EYXRhYmFzZV9MREZMQUdTID0gJCh3ZWJraXQyZ3Rr
X3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0
V2ViS2l0RmluZENvbnRyb2xsZXJfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdEZpbmRDb250cm9sbGVyLmNwcAorUHJvZ3JhbXNfVGVz
dFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxlcl9DUFBGTEFHUyA9
ICQod2Via2l0Mmd0a190ZXN0c19jcHBmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2Vi
S2l0Mkd0a19UZXN0V2ViS2l0RmluZENvbnRyb2xsZXJfTERBREQgPSAkKHdlYmtpdDJndGtfdGVz
dHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYktpdEZp
bmRDb250cm9sbGVyX0xERkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRmbGFncykKKworUHJv
Z3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RSZXNvdXJjZXNfU09VUkNFUyA9IFwK
KyAgICAgICAgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RSZXNvdXJj
ZXMuY3BwCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFJlc291cmNlc19D
UFBGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19jcHBmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJL
aXRBUElfV2ViS2l0Mkd0a19UZXN0UmVzb3VyY2VzX0xEQUREID0gJCh3ZWJraXQyZ3RrX3Rlc3Rz
X2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RSZXNvdXJjZXNf
TERGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2Vi
S2l0QVBJX1dlYktpdDJHdGtfVGVzdENvb2tpZU1hbmFnZXJfU09VUkNFUyA9IFwKKyAgICAgICAg
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RDb29raWVNYW5hZ2VyLmNw
cAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RDb29raWVNYW5hZ2VyX0NQ
UEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktp
dEFQSV9XZWJLaXQyR3RrX1Rlc3RDb29raWVNYW5hZ2VyX0xEQUREID0gJCh3ZWJraXQyZ3RrX3Rl
c3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RDb29raWVN
YW5hZ2VyX0xERkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNf
VGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RJbnNwZWN0b3JfU09VUkNFUyA9IFwKKyAgICAg
ICAgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RJbnNwZWN0b3IuY3Bw
CitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdEluc3BlY3Rvcl9DUFBGTEFH
UyA9IFwKKwkkKHdlYmtpdDJndGtfdGVzdHNfY3BwZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0
QVBJX1dlYktpdDJHdGtfVGVzdEluc3BlY3Rvcl9MREFERCA9ICQod2Via2l0Mmd0a190ZXN0c19s
ZGFkZCkKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0SW5zcGVjdG9yX0xE
RkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktp
dEFQSV9XZWJLaXQyR3RrX1Rlc3RJbnNwZWN0b3JTZXJ2ZXJfU09VUkNFUyA9IFwKKwlUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdEluc3BlY3RvclNlcnZlci5jcHAKK1By
b2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0SW5zcGVjdG9yU2VydmVyX0NQUEZM
QUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQ
SV9XZWJLaXQyR3RrX1Rlc3RJbnNwZWN0b3JTZXJ2ZXJfTERBREQgPSAkKHdlYmtpdDJndGtfdGVz
dHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdEluc3BlY3Rv
clNlcnZlcl9MREZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1z
X1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0V2ViS2l0VmVyc2lvbl9TT1VSQ0VTID0gXAor
ICAgICAgICBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFZl
cnNpb24uY3BwCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYktpdFZl
cnNpb25fQ1BQRkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfY3BwZmxhZ3MpCitQcm9ncmFtc19U
ZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYktpdFZlcnNpb25fTERBREQgPSAkKHdlYmtp
dDJndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVz
dFdlYktpdFZlcnNpb25fTERGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19sZGZsYWdzKQorCitQ
cm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdENvbnRleHRNZW51X1NPVVJDRVMg
PSBcCisgICAgICAgIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0Q29u
dGV4dE1lbnUuY3BwCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdENvbnRl
eHRNZW51X0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNf
VGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RDb250ZXh0TWVudV9MREFERCA9ICQod2Via2l0
Mmd0a190ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0
Q29udGV4dE1lbnVfTERGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19sZGZsYWdzKQorCitQcm9n
cmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFNTTF9TT1VSQ0VTID0gXAorICAgICAg
ICBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFNTTC5jcHAKK1Byb2dy
YW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0U1NMX0NQUEZMQUdTID0gJCh3ZWJraXQy
Z3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rl
c3RTU0xfTERBREQgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2Vi
S2l0QVBJX1dlYktpdDJHdGtfVGVzdFNTTF9MREZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xk
ZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0V2ViRXh0ZW5z
aW9uc19TT1VSQ0VTID0gXAorICAgICAgICBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dDJHdGsvVGVzdFdlYkV4dGVuc2lvbnMuY3BwCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktp
dDJHdGtfVGVzdFdlYkV4dGVuc2lvbnNfQ1BQRkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfY3Bw
ZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYkV4dGVuc2lv
bnNfTERBREQgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0
QVBJX1dlYktpdDJHdGtfVGVzdFdlYkV4dGVuc2lvbnNfTERGTEFHUyA9ICQod2Via2l0Mmd0a190
ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFdl
YktpdFdlYlZpZXdHcm91cF9TT1VSQ0VTID0gXAorICAgICAgICBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFdlYlZpZXdHcm91cC5jcHAKK1Byb2dyYW1zX1Rl
c3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0V2ViS2l0V2ViVmlld0dyb3VwX0NQUEZMQUdTID0g
JCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJL
aXQyR3RrX1Rlc3RXZWJLaXRXZWJWaWV3R3JvdXBfTERBREQgPSAkKHdlYmtpdDJndGtfdGVzdHNf
bGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYktpdFdlYlZp
ZXdHcm91cF9MREZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1z
X1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0RE9NTm9kZV9TT1VSQ0VTID0gXAorICAgICAg
ICBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdERPTU5vZGUuY3BwCitQ
cm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdERPTU5vZGVfQ1BQRkxBR1MgPSAk
KHdlYmtpdDJndGtfdGVzdHNfY3BwZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktp
dDJHdGtfVGVzdERPTU5vZGVfTERBREQgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRhZGQpCitQcm9n
cmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdERPTU5vZGVfTERGTEFHUyA9ICQod2Vi
a2l0Mmd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJH
dGtfVGVzdEZyYW1lX1NPVVJDRVMgPSBcCisgICAgICAgIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Mkd0ay9UZXN0RnJhbWUuY3BwCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktp
dDJHdGtfVGVzdEZyYW1lX0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQor
UHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RGcmFtZV9MREFERCA9ICQod2Vi
a2l0Mmd0a190ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19U
ZXN0RnJhbWVfTERGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFt
c19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdEF1dGhlbnRpY2F0aW9uX1NPVVJDRVMgPSBc
CisgICAgICAgIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0QXV0aGVu
dGljYXRpb24uY3BwCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdEF1dGhl
bnRpY2F0aW9uX0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3Jh
bXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RBdXRoZW50aWNhdGlvbl9MREFERCA9ICQo
d2Via2l0Mmd0a190ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0
a19UZXN0QXV0aGVudGljYXRpb25fTERGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19sZGZsYWdz
KQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFVJQ2xpZW50X1NPVVJD
RVMgPSBcCisgICAgICAgIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0
VUlDbGllbnQuY3BwCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFVJQ2xp
ZW50X0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVz
dFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RVSUNsaWVudF9MREFERCA9ICQod2Via2l0Mmd0a190
ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0VUlDbGll
bnRfTERGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19sZGZsYWdzKQorCisKK3N0YW1wLXRlc3R3
ZWJraXRhcGktd2ViY29yZS1mb3J3YXJkaW5nLWhlYWRlcnM6ICQoV2ViS2l0MikvU2NyaXB0cy9n
ZW5lcmF0ZS1mb3J3YXJkaW5nLWhlYWRlcnMucGwgJChQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dl
YkNvcmVfVGVzdFdlYkNvcmVfU09VUkNFUykKIAkkKEFNX1ZfR0VOKSQoUEVSTCkgJDwgJChzcmNk
aXIpL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZSAkKEdFTlNPVVJDRVNfV0VCQ09S
RSkvaW5jbHVkZSBndGsgXAogCSYmIGVjaG8gdGltZXN0YW1wID4gJChARikKIAotc3RhbXAtdGVz
dHdlYmtpdGFwaS13ZWJraXQyLWZvcndhcmRpbmctaGVhZGVyczogJChXZWJLaXQyKS9TY3JpcHRz
L2dlbmVyYXRlLWZvcndhcmRpbmctaGVhZGVycy5wbCAkKFByb2dyYW1zX1Rlc3RXZWJLaXRBUElf
VGVzdFdlYktpdDJfU09VUkNFUykgJChMaWJyYXJpZXNfbGliVGVzdFdlYktpdEFQSUluamVjdGVk
QnVuZGxlX2xhX1NPVVJDRVMpCitzdGFtcC10ZXN0d2Via2l0YXBpLXdlYmtpdDItZm9yd2FyZGlu
Zy1oZWFkZXJzOiAkKFdlYktpdDIpL1NjcmlwdHMvZ2VuZXJhdGUtZm9yd2FyZGluZy1oZWFkZXJz
LnBsICQoUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyX1Rlc3RXZWJLaXQyX1NPVVJDRVMp
ICQoTGlicmFyaWVzX2xpYlRlc3RXZWJLaXRBUElJbmplY3RlZEJ1bmRsZV9sYV9TT1VSQ0VTKQog
CSQoQU1fVl9HRU4pJChQRVJMKSAkPCAkKHNyY2RpcikvVG9vbHMvVGVzdFdlYktpdEFQSSAkKEdF
TlNPVVJDRVNfV0VCS0lUMikvaW5jbHVkZSBndGsgXAogCSYmIGVjaG8gdGltZXN0YW1wID4gJChA
RikKIApAQCAtMzg2LDQgKzk0MSwxNCBAQCBFWFRSQV9ESVNUICs9IFwKIAlUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdDIvc2ltcGxlLmh0bWwgXAogCVRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Mi9zaW1wbGUtaWZyYW1lLmh0bWwgXAogCVRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Mi9zaW1wbGUtdGFsbC5odG1sIFwKLQlUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdDIvc3BhY2ViYXItc2Nyb2xsaW5nLmh0bWwKKwlUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdDIvc3BhY2ViYXItc2Nyb2xsaW5nLmh0bWwgXAorCVRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9yZXNvdXJjZXMvdGVzdC1jZXJ0LnBlbSBcCisJVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL3Jlc291cmNlcy90ZXN0LWtleS5wZW0gXAor
CVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9yZXNvdXJjZXMvd2Via2l0Mmd0
ay10ZXN0cy5ncmVzb3VyY2UueG1sIFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dDJHdGsvcmVzb3VyY2VzL2xpbmstdGl0bGUuanMgXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0R3RrL3Rlc3RfdXRpbHMuaCBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRHdGsvcmVzb3VyY2VzL2JsYW5rLmljbyBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRHdGsvcmVzb3VyY2VzL3Rlc3QuaHRtbCBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRHdGsvcmVzb3VyY2VzL3Rlc3Qub2dnIFwKKwlUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdEd0ay9yZXNvdXJjZXMvdGVzdC5wZGYgXAorCVRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0R3RrL3Jlc291cmNlcy90ZXN0LnR4dApkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyLmNw
cCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9BY2Nlc3NpYmlsaXR5VGVz
dFNlcnZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU1MDA1MAot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9B
Y2Nlc3NpYmlsaXR5VGVzdFNlcnZlci5jcHAKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVk
ZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgorCitzdGF0aWMgdm9p
ZCBsb2FkQ2hhbmdlZENhbGxiYWNrKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRMb2FkRXZlbnQgbG9h
ZEV2ZW50LCBncG9pbnRlcikKK3sKKyAgICAvLyBTZW5kIGEgbWVzc2FnZSB0byB0aGUgcGFyZW50
IHByb2Nlc3Mgd2hlbiB3ZSdyZSByZWFkeS4KKyAgICBpZiAobG9hZEV2ZW50ID09IFdFQktJVF9M
T0FEX0ZJTklTSEVEKQorICAgICAgICBnX3ByaW50KCJPSyIpOworfQorCitpbnQgbWFpbihpbnQg
YXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIEFUSyBicmlk
Z2UgaXMgbG9hZGVkLgorICAgIGdfc2V0ZW52KCJHVEtfTU9EVUxFUyIsICJhdGstYnJpZGdlIiwg
VFJVRSk7CisKKyAgICBndGtfaW5pdCgmYXJnYywgJmFyZ3YpOworCisgICAgV2ViS2l0V2ViVmll
dyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAg
IHdlYmtpdF93ZWJfdmlld19sb2FkX2h0bWwod2ViVmlldywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICI8aHRtbD4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICA8Ym9k
eT4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgPGgxPlRoaXMgaXMgYSB0ZXN0
PC9oMT4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgPHA+VGhpcyBpcyBhIHBh
cmFncmFwaCB3aXRoIHNvbWUgcGxhaW4gdGV4dC48L3A+IgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIiAgIDxwPlRoaXMgcGFyYWdyYXBoIGNvbnRhaW5zIDxhIGhyZWY9XCJodHRwOi8v
d3d3LndlYmtpdGd0ay5vcmdcIj5hIGxpbms8L2E+IGluIHRoZSBtaWRkbGUuPC9wPiIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICIgIDwvYm9keT4iCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiPC9odG1sPiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsK
KworICAgIEd0a1dpZGdldCogd2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BM
RVZFTCk7CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCBHVEtf
V0lER0VUKHdlYlZpZXcpKTsKKyAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7CisKKyAg
ICBnX3NpZ25hbF9jb25uZWN0KHdpbmRvdywgImRlbGV0ZS1ldmVudCIsIEdfQ0FMTEJBQ0soZ3Rr
X21haW5fcXVpdCksIDApOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgImxvYWQtY2hh
bmdlZCIsIEdfQ0FMTEJBQ0sobG9hZENoYW5nZWRDYWxsYmFjayksIDApOworCisgICAgZ3RrX21h
aW4oKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0
ay9ET01ET01XaW5kb3dUZXN0LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Mkd0ay9ET01ET01XaW5kb3dUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi43Y2FhZDU0Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXQyR3RrL0RPTURPTVdpbmRvd1Rlc3QuY3BwCkBAIC0wLDAgKzEsMjIxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2luY2x1ZGUgIldlYlByb2Nlc3NUZXN0LmgiCisjaW5jbHVkZSA8Z2lvL2dpby5oPgorI2luY2x1
ZGUgPHdlYmtpdDIvd2Via2l0LXdlYi1leHRlbnNpb24uaD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9v
cC5oPgorCitjbGFzcyBXZWJLaXRET01ET01XaW5kb3dUZXN0Oworc3RhdGljIGdib29sZWFuIGxv
YWRlZENhbGxiYWNrKFdlYktpdERPTURPTVdpbmRvdyosIFdlYktpdERPTUV2ZW50KiwgV2ViS2l0
RE9NRE9NV2luZG93VGVzdCopOworc3RhdGljIGdib29sZWFuIGNsaWNrZWRDYWxsYmFjayhXZWJL
aXRET01ET01XaW5kb3cqLCBXZWJLaXRET01FdmVudCosIFdlYktpdERPTURPTVdpbmRvd1Rlc3Qq
KTsKKworY2xhc3MgV2ViS2l0RE9NRE9NV2luZG93VGVzdCA6IHB1YmxpYyBXZWJQcm9jZXNzVGVz
dCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8V2ViUHJvY2Vzc1Rlc3Q+IGNyZWF0
ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBXZWJLaXRET01ET01XaW5kb3dUZXN0KCkpOyB9CisK
K3ByaXZhdGU6CisgICAgZ3VpbnQ2NCB3ZWJQYWdlRnJvbUFyZ3MoR1ZhcmlhbnQqIGFyZ3MpCisg
ICAgeworICAgICAgICBHVmFyaWFudEl0ZXIgaXRlcjsKKyAgICAgICAgZ192YXJpYW50X2l0ZXJf
aW5pdCgmaXRlciwgYXJncyk7CisKKyAgICAgICAgY29uc3QgY2hhcioga2V5OworICAgICAgICBH
VmFyaWFudCogdmFsdWU7CisgICAgICAgIHdoaWxlIChnX3ZhcmlhbnRfaXRlcl9sb29wKCZpdGVy
LCAieyZzdn0iLCAma2V5LCAmdmFsdWUpKSB7CisgICAgICAgICAgICBpZiAoIXN0cmNtcChrZXks
ICJwYWdlSUQiKSAmJiBnX3ZhcmlhbnRfY2xhc3NpZnkodmFsdWUpID09IEdfVkFSSUFOVF9DTEFT
U19VSU5UNjQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGdfdmFyaWFudF9nZXRfdWludDY0KHZh
bHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAg
ICAgIHJldHVybiAwOworICAgIH0KKworICAgIGJvb2wgdGVzdFNpZ25hbHMoV2ViS2l0V2ViRXh0
ZW5zaW9uKiBleHRlbnNpb24sIEdWYXJpYW50KiBhcmdzKQorICAgIHsKKyAgICAgICAgbm90aWZ5
KCJyZWFkeSIsICIiKTsKKworICAgICAgICBXZWJLaXRXZWJQYWdlKiBwYWdlID0gd2Via2l0X3dl
Yl9leHRlbnNpb25fZ2V0X3BhZ2UoZXh0ZW5zaW9uLCB3ZWJQYWdlRnJvbUFyZ3MoYXJncykpOwor
ICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfV0VCX1BBR0UocGFnZSkpOworICAgICAgICBXZWJL
aXRET01Eb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3BhZ2VfZ2V0X2RvbV9kb2N1bWVu
dChwYWdlKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChkb2N1bWVu
dCkpOworCisgICAgICAgIFdlYktpdERPTURPTVdpbmRvdyogZG9tV2luZG93ID0gd2Via2l0X2Rv
bV9kb2N1bWVudF9nZXRfZGVmYXVsdF92aWV3KGRvY3VtZW50KTsKKyAgICAgICAgZ19hc3NlcnQo
ZG9tV2luZG93KTsKKworICAgICAgICAvLyBUaGUgImxvYWQiIFdlYktpdERPTURPTVdpbmRvdyBz
aWduYWwgaXMgaXNzdWVkIGJlZm9yZSB0aGlzIHRlc3QgaXMKKyAgICAgICAgLy8gY2FsbGVkLiBU
aGVyZSdzIG5vIHdheSB0byBjYXB0dXJlIGl0IGhlcmUuIFdlIHNpbXBseSBhc3N1bWUgdGhhdAor
ICAgICAgICAvLyB0aGUgZG9jdW1lbnQgaXMgbG9hZGVkIGFuZCBub3RpZnkgdGhlIHVpcHJvY2Vz
cyBhY2NvcmRpbmdseQorICAgICAgICAvLyBub3RpZnkoImxvYWRlZCIsICIiKTsKKworICAgICAg
ICB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9hZGRfZXZlbnRfbGlzdGVuZXIoCisgICAgICAgICAg
ICBXRUJLSVRfRE9NX0VWRU5UX1RBUkdFVChkb21XaW5kb3cpLAorICAgICAgICAgICAgImxvYWQi
LAorICAgICAgICAgICAgR19DQUxMQkFDSyhsb2FkZWRDYWxsYmFjayksCisgICAgICAgICAgICBm
YWxzZSwKKyAgICAgICAgICAgIHRoaXMpOworCisgICAgICAgIC8vIGxvYWRlZENhbGxiYWNrKCkg
d2lsbCBzdG9wIHRoaXMgbG9vcAorICAgICAgICBSdW5Mb29wOjpydW4oKTsKKworICAgICAgICBk
b2N1bWVudCA9IHdlYmtpdF93ZWJfcGFnZV9nZXRfZG9tX2RvY3VtZW50KHBhZ2UpOworICAgICAg
ICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKGRvY3VtZW50KSk7CisKKyAgICAgICAg
V2ViS2l0RE9NRWxlbWVudCogZWxlbWVudCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1l
bnRfYnlfaWQoZG9jdW1lbnQsICJ0ZXN0Iik7CisgICAgICAgIGdfYXNzZXJ0KGVsZW1lbnQpOwor
CisgICAgICAgIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2FkZF9ldmVudF9saXN0ZW5lcigKKyAg
ICAgICAgICAgIFdFQktJVF9ET01fRVZFTlRfVEFSR0VUKGVsZW1lbnQpLAorICAgICAgICAgICAg
ImNsaWNrIiwKKyAgICAgICAgICAgIEdfQ0FMTEJBQ0soY2xpY2tlZENhbGxiYWNrKSwKKyAgICAg
ICAgICAgIGZhbHNlLAorICAgICAgICAgICAgdGhpcyk7CisKKyAgICAgICAgLy8gVGhlICJjbGlj
ayIgYWN0aW9uIHdpbGwgYmUgaXNzdWVkIGluIHRoZSB1aXByb2Nlc3MgYW5kIHRoYXQgd2lsbAor
ICAgICAgICAvLyB0cmlnZ2VyIHRoZSBkb20gZXZlbnQgaGVyZS4KKyAgICAgICAgLy8gY2xpY2tl
ZENhbGxiYWNrKCkgd2lsbCBzdG9wIHRoaXMgbG9vcAorICAgICAgICBSdW5Mb29wOjpydW4oKTsK
KworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIHRlc3REaXNwYXRjaEV2
ZW50KFdlYktpdFdlYkV4dGVuc2lvbiogZXh0ZW5zaW9uLCBHVmFyaWFudCogYXJncykKKyAgICB7
CisgICAgICAgIG5vdGlmeSgicmVhZHkiLCAiIik7CisKKyAgICAgICAgV2ViS2l0V2ViUGFnZSog
cGFnZSA9IHdlYmtpdF93ZWJfZXh0ZW5zaW9uX2dldF9wYWdlKGV4dGVuc2lvbiwgd2ViUGFnZUZy
b21BcmdzKGFyZ3MpKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX1dFQl9QQUdFKHBhZ2Up
KTsKKyAgICAgICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50ID0gd2Via2l0X3dlYl9wYWdl
X2dldF9kb21fZG9jdW1lbnQocGFnZSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNf
RE9DVU1FTlQoZG9jdW1lbnQpKTsKKworICAgICAgICBXZWJLaXRET01ET01XaW5kb3cqIGRvbVdp
bmRvdyA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2RlZmF1bHRfdmlldyhkb2N1bWVudCk7Cisg
ICAgICAgIGdfYXNzZXJ0KGRvbVdpbmRvdyk7CisKKyAgICAgICAgLy8gVGhlICJsb2FkIiBXZWJL
aXRET01ET01XaW5kb3cgc2lnbmFsIGlzIGlzc3VlZCBiZWZvcmUgdGhpcyB0ZXN0IGlzCisgICAg
ICAgIC8vIGNhbGxlZC4gVGhlcmUncyBubyB3YXkgdG8gY2FwdHVyZSBpdCBoZXJlLiBXZSBzaW1w
bHkgYXNzdW1lIHRoYXQKKyAgICAgICAgLy8gdGhlIGRvY3VtZW50IGlzIGxvYWRlZCBhbmQgbm90
aWZ5IHRoZSB1aXByb2Nlc3MgYWNjb3JkaW5nbHkKKyAgICAgICAgLy8gbm90aWZ5KCJsb2FkZWQi
LCAiIik7CisKKyAgICAgICAgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfYWRkX2V2ZW50X2xpc3Rl
bmVyKAorICAgICAgICAgICAgV0VCS0lUX0RPTV9FVkVOVF9UQVJHRVQoZG9tV2luZG93KSwKKyAg
ICAgICAgICAgICJsb2FkIiwKKyAgICAgICAgICAgIEdfQ0FMTEJBQ0sobG9hZGVkQ2FsbGJhY2sp
LAorICAgICAgICAgICAgZmFsc2UsCisgICAgICAgICAgICB0aGlzKTsKKworICAgICAgICAvLyBs
b2FkZWRDYWxsYmFjaygpIHdpbGwgc3RvcCB0aGlzIGxvb3AKKyAgICAgICAgUnVuTG9vcDo6cnVu
KCk7CisKKyAgICAgICAgZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3BhZ2VfZ2V0X2RvbV9kb2N1bWVu
dChwYWdlKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChkb2N1bWVu
dCkpOworCisgICAgICAgIFdlYktpdERPTUVsZW1lbnQqIGVsZW1lbnQgPSB3ZWJraXRfZG9tX2Rv
Y3VtZW50X2dldF9lbGVtZW50X2J5X2lkKGRvY3VtZW50LCAidGVzdCIpOworICAgICAgICBnX2Fz
c2VydChlbGVtZW50KTsKKworICAgICAgICBXZWJLaXRET01FdmVudCogZXZlbnQgPSB3ZWJraXRf
ZG9tX2RvY3VtZW50X2NyZWF0ZV9ldmVudChkb2N1bWVudCwgIk1vdXNlRXZlbnQiLCAwKTsKKyAg
ICAgICAgZ19hc3NlcnQoZXZlbnQpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0VW
RU5UKGV2ZW50KSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfTU9VU0VfRVZFTlQo
ZXZlbnQpKTsKKworICAgICAgICBnbG9uZyBjbGllbnRYLCBjbGllbnRZOworICAgICAgICBjbGll
bnRYID0gd2Via2l0X2RvbV9lbGVtZW50X2dldF9jbGllbnRfbGVmdChlbGVtZW50KTsKKyAgICAg
ICAgY2xpZW50WSA9IHdlYmtpdF9kb21fZWxlbWVudF9nZXRfY2xpZW50X3RvcChlbGVtZW50KTsK
KworICAgICAgICB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9hZGRfZXZlbnRfbGlzdGVuZXIoCisg
ICAgICAgICAgICBXRUJLSVRfRE9NX0VWRU5UX1RBUkdFVChlbGVtZW50KSwKKyAgICAgICAgICAg
ICJjbGljayIsCisgICAgICAgICAgICBHX0NBTExCQUNLKGNsaWNrZWRDYWxsYmFjayksCisgICAg
ICAgICAgICBmYWxzZSwKKyAgICAgICAgICAgIHRoaXMpOworCisgICAgICAgIHdlYmtpdF9kb21f
bW91c2VfZXZlbnRfaW5pdF9tb3VzZV9ldmVudChXRUJLSVRfRE9NX01PVVNFX0VWRU5UKGV2ZW50
KSwKKyAgICAgICAgICAgICJjbGljayIsIFRSVUUsIFRSVUUsCisgICAgICAgICAgICBkb21XaW5k
b3csIDAsIDAsIDAsIGNsaWVudFgsIGNsaWVudFksCisgICAgICAgICAgICBGQUxTRSwgRkFMU0Us
IEZBTFNFLCBGQUxTRSwKKyAgICAgICAgICAgIDEsIFdFQktJVF9ET01fRVZFTlRfVEFSR0VUKGVs
ZW1lbnQpKTsKKworICAgICAgICB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9kaXNwYXRjaF9ldmVu
dChXRUJLSVRfRE9NX0VWRU5UX1RBUkdFVChlbGVtZW50KSwgZXZlbnQsIDApOworCisgICAgICAg
IC8vIGNsaWNrZWRDYWxsYmFjaygpIHdpbGwgc3RvcCB0aGlzIGxvb3AKKyAgICAgICAgUnVuTG9v
cDo6cnVuKCk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCB0ZXN0
R2V0Q29tcHV0ZWRTdHlsZShXZWJLaXRXZWJFeHRlbnNpb24qIGV4dGVuc2lvbiwgR1ZhcmlhbnQq
IGFyZ3MpCisgICAgeworICAgICAgICBXZWJLaXRXZWJQYWdlKiBwYWdlID0gd2Via2l0X3dlYl9l
eHRlbnNpb25fZ2V0X3BhZ2UoZXh0ZW5zaW9uLCB3ZWJQYWdlRnJvbUFyZ3MoYXJncykpOworICAg
ICAgICBnX2Fzc2VydChXRUJLSVRfSVNfV0VCX1BBR0UocGFnZSkpOworICAgICAgICBXZWJLaXRE
T01Eb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3BhZ2VfZ2V0X2RvbV9kb2N1bWVudChw
YWdlKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChkb2N1bWVudCkp
OworICAgICAgICBXZWJLaXRET01ET01XaW5kb3cqIGRvbVdpbmRvdyA9IHdlYmtpdF9kb21fZG9j
dW1lbnRfZ2V0X2RlZmF1bHRfdmlldyhkb2N1bWVudCk7CisgICAgICAgIGdfYXNzZXJ0KGRvbVdp
bmRvdyk7CisgICAgICAgIFdlYktpdERPTUVsZW1lbnQqIGVsZW1lbnQgPSB3ZWJraXRfZG9tX2Rv
Y3VtZW50X2dldF9lbGVtZW50X2J5X2lkKGRvY3VtZW50LCAidGVzdCIpOworICAgICAgICBnX2Fz
c2VydChlbGVtZW50KTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19FTEVNRU5UKGVs
ZW1lbnQpKTsKKyAgICAgICAgV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiogY3NzU3R5bGUg
PSB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X2NvbXB1dGVkX3N0eWxlKGRvbVdpbmRvdywgZWxl
bWVudCwgMCk7CisgICAgICAgIGdjaGFyKiBmb250U2l6ZSA9IHdlYmtpdF9kb21fY3NzX3N0eWxl
X2RlY2xhcmF0aW9uX2dldF9wcm9wZXJ0eV92YWx1ZShjc3NTdHlsZSwgImZvbnQtc2l6ZSIpOwor
ICAgICAgICBnX2Fzc2VydF9jbXBzdHIoZm9udFNpemUsID09LCAiMTZweCIpOworCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBydW5UZXN0KGNvbnN0IGNo
YXIqIHRlc3ROYW1lLCBXZWJLaXRXZWJFeHRlbnNpb24qIGV4dGVuc2lvbiwgR1ZhcmlhbnQqIGFy
Z3MpCisgICAgeworICAgICAgICBpZiAoIXN0cmNtcCh0ZXN0TmFtZSwgInNpZ25hbHMiKSkKKyAg
ICAgICAgICAgIHJldHVybiB0ZXN0U2lnbmFscyhleHRlbnNpb24sIGFyZ3MpOworICAgICAgICBp
ZiAoIXN0cmNtcCh0ZXN0TmFtZSwgImRpc3BhdGNoLWV2ZW50IikpCisgICAgICAgICAgICByZXR1
cm4gdGVzdERpc3BhdGNoRXZlbnQoZXh0ZW5zaW9uLCBhcmdzKTsKKyAgICAgICAgaWYgKCFzdHJj
bXAodGVzdE5hbWUsICJnZXQtY29tcHV0ZWQtc3R5bGUiKSkKKyAgICAgICAgICAgIHJldHVybiB0
ZXN0R2V0Q29tcHV0ZWRTdHlsZShleHRlbnNpb24sIGFyZ3MpOworCisgICAgICAgIGdfYXNzZXJ0
X25vdF9yZWFjaGVkKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9OworCitzdGF0
aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChjb25zdHJ1Y3RvcikpIHJlZ2lzdGVyVGVzdHMoKQorewor
ICAgIFJFR0lTVEVSX1RFU1QoV2ViS2l0RE9NRE9NV2luZG93VGVzdCwgIldlYktpdERPTURPTVdp
bmRvdy9zaWduYWxzIik7CisgICAgUkVHSVNURVJfVEVTVChXZWJLaXRET01ET01XaW5kb3dUZXN0
LCAiV2ViS2l0RE9NRE9NV2luZG93L2Rpc3BhdGNoLWV2ZW50Iik7CisgICAgUkVHSVNURVJfVEVT
VChXZWJLaXRET01ET01XaW5kb3dUZXN0LCAiV2ViS2l0RE9NRE9NV2luZG93L2dldC1jb21wdXRl
ZC1zdHlsZSIpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gbG9hZGVkQ2FsbGJhY2soV2ViS2l0RE9N
RE9NV2luZG93KiB2aWV3LCBXZWJLaXRET01FdmVudCogZXZlbnQsIFdlYktpdERPTURPTVdpbmRv
d1Rlc3QqIHRlc3QpCit7CisgICAgdGVzdC0+bm90aWZ5KCJsb2FkZWQiLCAiIik7CisKKyAgICAv
LyBTdG9wIHRoZSBsb29wIGFuZCBsZXQgdGVzdFNpZ25hbHMoKSBvciB0ZXN0RGlzcGF0Y2hFdmVu
dCgpIGNvbnRpbnVlIGl0cyBjb3Vyc2UKKyAgICBSdW5Mb29wOjpjdXJyZW50KCktPnN0b3AoKTsK
KworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGdib29sZWFuIGNsaWNrZWRDYWxsYmFj
ayhXZWJLaXRET01ET01XaW5kb3cqIHZpZXcsIFdlYktpdERPTUV2ZW50KiBldmVudCwgV2ViS2l0
RE9NRE9NV2luZG93VGVzdCogdGVzdCkKK3sKKyAgICB0ZXN0LT5ub3RpZnkoImNsaWNrZWQiLCAi
Iik7CisgICAgdGVzdC0+bm90aWZ5KCJmaW5pc2giLCAiIik7CisKKyAgICAvLyBTdG9wIHRoZSBs
b29wIGFuZCBsZXQgdGVzdFNpZ25hbHMoKSBvciB0ZXN0RGlzcGF0Y2hFdmVudCgpIGNvbnRpbnVl
IGl0cyBjb3Vyc2UKKyAgICBSdW5Mb29wOjpjdXJyZW50KCktPnN0b3AoKTsKKworICAgIHJldHVy
biBGQUxTRTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Mkd0ay9ET01Ob2RlVGVzdC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJH
dGsvRE9NTm9kZVRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUx
NzU0Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dDJHdGsvRE9NTm9kZVRlc3QuY3BwCkBAIC0wLDAgKzEsMjE2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIldl
YlByb2Nlc3NUZXN0LmgiCisjaW5jbHVkZSA8Z2lvL2dpby5oPgorI2luY2x1ZGUgPHdlYmtpdDIv
d2Via2l0LXdlYi1leHRlbnNpb24uaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+
CisKK2NsYXNzIFdlYktpdERPTU5vZGVUZXN0IDogcHVibGljIFdlYlByb2Nlc3NUZXN0IHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxXZWJQcm9jZXNzVGVzdD4gY3JlYXRlKCkgeyBy
ZXR1cm4gYWRvcHRQdHIobmV3IFdlYktpdERPTU5vZGVUZXN0KCkpOyB9CisKK3ByaXZhdGU6Cisg
ICAgZ3VpbnQ2NCB3ZWJQYWdlRnJvbUFyZ3MoR1ZhcmlhbnQqIGFyZ3MpCisgICAgeworICAgICAg
ICBHVmFyaWFudEl0ZXIgaXRlcjsKKyAgICAgICAgZ192YXJpYW50X2l0ZXJfaW5pdCgmaXRlciwg
YXJncyk7CisKKyAgICAgICAgY29uc3QgY2hhcioga2V5OworICAgICAgICBHVmFyaWFudCogdmFs
dWU7CisgICAgICAgIHdoaWxlIChnX3ZhcmlhbnRfaXRlcl9sb29wKCZpdGVyLCAieyZzdn0iLCAm
a2V5LCAmdmFsdWUpKSB7CisgICAgICAgICAgICBpZiAoIXN0cmNtcChrZXksICJwYWdlSUQiKSAm
JiBnX3ZhcmlhbnRfY2xhc3NpZnkodmFsdWUpID09IEdfVkFSSUFOVF9DTEFTU19VSU5UNjQpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdfdmFyaWFudF9nZXRfdWludDY0KHZhbHVlKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KKworICAgIGJvb2wgdGVzdEhpZXJhcmNoeU5hdmlnYXRpb24oV2ViS2l0V2ViRXh0
ZW5zaW9uKiBleHRlbnNpb24sIEdWYXJpYW50KiBhcmdzKQorICAgIHsKKyAgICAgICAgV2ViS2l0
V2ViUGFnZSogcGFnZSA9IHdlYmtpdF93ZWJfZXh0ZW5zaW9uX2dldF9wYWdlKGV4dGVuc2lvbiwg
d2ViUGFnZUZyb21BcmdzKGFyZ3MpKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX1dFQl9Q
QUdFKHBhZ2UpKTsKKyAgICAgICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50ID0gd2Via2l0
X3dlYl9wYWdlX2dldF9kb21fZG9jdW1lbnQocGFnZSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJ
VF9ET01fSVNfRE9DVU1FTlQoZG9jdW1lbnQpKTsKKworICAgICAgICBXZWJLaXRET01IVE1MSGVh
ZEVsZW1lbnQqIGhlYWQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9oZWFkKGRvY3VtZW50KTsK
KyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0hFQURfRUxFTUVOVChoZWFkKSk7
CisKKyAgICAgICAgLy8gVGl0bGUsIGhlYWQncyBjaGlsZC4KKyAgICAgICAgZ19hc3NlcnQod2Vi
a2l0X2RvbV9ub2RlX2hhc19jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoaGVhZCkpKTsKKyAg
ICAgICAgR1JlZlB0cjxXZWJLaXRET01Ob2RlTGlzdD4gbGlzdCA9IGFkb3B0R1JlZih3ZWJraXRf
ZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShoZWFkKSkpOworICAgICAg
ICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX05PREVfTElTVChsaXN0LmdldCgpKSk7CisgICAgICAg
IGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QuZ2V0
KCkpLCA9PSwgMSk7CisgICAgICAgIFdlYktpdERPTU5vZGUqIG5vZGUgPSB3ZWJraXRfZG9tX25v
ZGVfbGlzdF9pdGVtKGxpc3QuZ2V0KCksIDApOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9N
X0lTX0hUTUxfVElUTEVfRUxFTUVOVChub2RlKSk7CisKKyAgICAgICAgLy8gQm9keSwgSGVhZCBz
aWJsaW5nLgorICAgICAgICBub2RlID0gd2Via2l0X2RvbV9ub2RlX2dldF9uZXh0X3NpYmxpbmco
V0VCS0lUX0RPTV9OT0RFKGhlYWQpKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19I
VE1MX0JPRFlfRUxFTUVOVChub2RlKSk7CisgICAgICAgIFdlYktpdERPTUhUTUxCb2R5RWxlbWVu
dCogYm9keSA9IFdFQktJVF9ET01fSFRNTF9CT0RZX0VMRU1FTlQobm9kZSk7CisKKyAgICAgICAg
Ly8gVGhlcmUgaXMgbm8gdGhpcmQgc2libGluZworICAgICAgICBnX2Fzc2VydCghd2Via2l0X2Rv
bV9ub2RlX2dldF9uZXh0X3NpYmxpbmcobm9kZSkpOworCisgICAgICAgIC8vIEJvZHkncyBwcmV2
aW91cyBzaWJsaW5nIGlzIEhlYWQuCisgICAgICAgIG5vZGUgPSB3ZWJraXRfZG9tX25vZGVfZ2V0
X3ByZXZpb3VzX3NpYmxpbmcoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKTsKKyAgICAgICAgZ19hc3Nl
cnQoV0VCS0lUX0RPTV9JU19IVE1MX0hFQURfRUxFTUVOVChub2RlKSk7CisKKyAgICAgICAgLy8g
Qm9keSBoYXMgMyBjaGlsZHJlbi4KKyAgICAgICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2hh
c19jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpKTsKKyAgICAgICAgbGlzdCA9IGFk
b3B0R1JlZih3ZWJraXRfZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShi
b2R5KSkpOworICAgICAgICB1bnNpZ25lZCBsb25nIGxlbmd0aCA9IHdlYmtpdF9kb21fbm9kZV9s
aXN0X2dldF9sZW5ndGgobGlzdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChsZW5n
dGgsID09LCAzKTsKKworICAgICAgICAvLyBUaGUgdGhyZWUgb2YgdGhlbSBhcmUgUCB0YWdzLgor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAg
ICAgICAgICAgbm9kZSA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdC5nZXQoKSwgaSk7
CisgICAgICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfUEFSQUdSQVBIX0VMRU1F
TlQobm9kZSkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gR28gYmFja3dhcmRzCisgICAgICAg
IHVuc2lnbmVkIGk7CisgICAgICAgIGZvciAoaSA9IDA7IG5vZGU7IG5vZGUgPSB3ZWJraXRfZG9t
X25vZGVfZ2V0X3ByZXZpb3VzX3NpYmxpbmcobm9kZSksIGkrKykgeyB9CisgICAgICAgIGdfYXNz
ZXJ0X2NtcGludChpLCA9PSwgMyk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgYm9vbCB0ZXN0SW5zZXJ0aW9uKFdlYktpdFdlYkV4dGVuc2lvbiogZXh0ZW5zaW9uLCBHVmFy
aWFudCogYXJncykKKyAgICB7CisgICAgICAgIFdlYktpdFdlYlBhZ2UqIHBhZ2UgPSB3ZWJraXRf
d2ViX2V4dGVuc2lvbl9nZXRfcGFnZShleHRlbnNpb24sIHdlYlBhZ2VGcm9tQXJncyhhcmdzKSk7
CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19XRUJfUEFHRShwYWdlKSk7CisgICAgICAgIFdl
YktpdERPTURvY3VtZW50KiBkb2N1bWVudCA9IHdlYmtpdF93ZWJfcGFnZV9nZXRfZG9tX2RvY3Vt
ZW50KHBhZ2UpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKGRvY3Vt
ZW50KSk7CisKKyAgICAgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQqIGJvZHkgPSB3ZWJraXRfZG9t
X2RvY3VtZW50X2dldF9ib2R5KGRvY3VtZW50KTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RP
TV9JU19IVE1MX0VMRU1FTlQoYm9keSkpOworCisgICAgICAgIC8vIEJvZHkgc2hvdWxkbid0IGhh
dmUgYW55IGNoaWxkcmVuIGF0IHRoaXMgcG9pbnQuCisgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRf
ZG9tX25vZGVfaGFzX2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSkpOworCisgICAg
ICAgIC8vIEluc2VydCBvbmUgUCBlbGVtZW50LgorICAgICAgICBXZWJLaXRET01FbGVtZW50KiBw
ID0gd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZWxlbWVudChkb2N1bWVudCwgIlAiLCAwKTsK
KyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0VMRU1FTlQocCkpOworICAgICAg
ICB3ZWJraXRfZG9tX25vZGVfYXBwZW5kX2NoaWxkKFdFQktJVF9ET01fTk9ERShib2R5KSwgV0VC
S0lUX0RPTV9OT0RFKHApLCAwKTsKKworICAgICAgICAvLyBOb3cgaXQgc2hvdWxkIGhhdmUgb25l
LCB0aGUgc2FtZSB0aGF0IHdlIGluc2VydGVkLgorICAgICAgICBnX2Fzc2VydCh3ZWJraXRfZG9t
X25vZGVfaGFzX2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSkpOworICAgICAgICBH
UmVmUHRyPFdlYktpdERPTU5vZGVMaXN0PiBsaXN0ID0gYWRvcHRHUmVmKHdlYmtpdF9kb21fbm9k
ZV9nZXRfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKSk7CisgICAgICAgIGdfYXNz
ZXJ0KFdFQktJVF9ET01fSVNfTk9ERV9MSVNUKGxpc3QuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3Nl
cnRfY21waW50KHdlYmtpdF9kb21fbm9kZV9saXN0X2dldF9sZW5ndGgobGlzdC5nZXQoKSksID09
LCAxKTsKKyAgICAgICAgV2ViS2l0RE9NTm9kZSogbm9kZSA9IHdlYmtpdF9kb21fbm9kZV9saXN0
X2l0ZW0obGlzdC5nZXQoKSwgMCk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRN
TF9FTEVNRU5UKG5vZGUpKTsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2lzX3Nh
bWVfbm9kZShXRUJLSVRfRE9NX05PREUocCksIG5vZGUpKTsKKworICAgICAgICAvLyBSZXBsYWNl
IHRoZSBQIHRhZyB3aXRoIGEgRElWIHRhZy4KKyAgICAgICAgV2ViS2l0RE9NRWxlbWVudCogZGl2
ID0gd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZWxlbWVudChkb2N1bWVudCwgIkRJViIsIDAp
OworICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChkaXYpKTsKKyAg
ICAgICAgd2Via2l0X2RvbV9ub2RlX3JlcGxhY2VfY2hpbGQoV0VCS0lUX0RPTV9OT0RFKGJvZHkp
LCBXRUJLSVRfRE9NX05PREUoZGl2KSwgV0VCS0lUX0RPTV9OT0RFKHApLCAwKTsKKyAgICAgICAg
Z19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2hhc19jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUo
Ym9keSkpKTsKKyAgICAgICAgbGlzdCA9IGFkb3B0R1JlZih3ZWJraXRfZG9tX25vZGVfZ2V0X2No
aWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSkpOworICAgICAgICBnX2Fzc2VydChXRUJL
SVRfRE9NX0lTX05PREVfTElTVChsaXN0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGlu
dCh3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QuZ2V0KCkpLCA9PSwgMSk7Cisg
ICAgICAgIG5vZGUgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtKGxpc3QuZ2V0KCksIDApOwor
ICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChub2RlKSk7CisgICAg
ICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9pc19zYW1lX25vZGUoV0VCS0lUX0RPTV9OT0RF
KGRpdiksIG5vZGUpKTsKKworICAgICAgICAvLyBOb3cgcmVtb3ZlIHRoZSB0YWcuCisgICAgICAg
IHdlYmtpdF9kb21fbm9kZV9yZW1vdmVfY2hpbGQoV0VCS0lUX0RPTV9OT0RFKGJvZHkpLCBub2Rl
LCAwKTsKKyAgICAgICAgbGlzdCA9IGFkb3B0R1JlZih3ZWJraXRfZG9tX25vZGVfZ2V0X2NoaWxk
X25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSkpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRf
RE9NX0lTX05PREVfTElTVChsaXN0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludCh3
ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QuZ2V0KCkpLCA9PSwgMCk7CisKKyAg
ICAgICAgLy8gVGVzdCBpbnNlcnQgYmVmb3JlLiBJZiByZWZDaGlsZCBpcyBudWxsLCBpbnNlcnQg
bmV3Q2hpbGQgYXMgbGFzdCBlbGVtZW50IG9mIHBhcmVudC4KKyAgICAgICAgZGl2ID0gd2Via2l0
X2RvbV9kb2N1bWVudF9jcmVhdGVfZWxlbWVudChkb2N1bWVudCwgIkRJViIsIDApOworICAgICAg
ICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChkaXYpKTsKKyAgICAgICAgd2Vi
a2l0X2RvbV9ub2RlX2luc2VydF9iZWZvcmUoV0VCS0lUX0RPTV9OT0RFKGJvZHkpLCBXRUJLSVRf
RE9NX05PREUoZGl2KSwgMCwgMCk7CisgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9o
YXNfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKSk7CisgICAgICAgIGxpc3QgPSBh
ZG9wdEdSZWYod2Via2l0X2RvbV9ub2RlX2dldF9jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUo
Ym9keSkpKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19OT0RFX0xJU1QobGlzdC5n
ZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0
X2xlbmd0aChsaXN0LmdldCgpKSwgPT0sIDEpOworICAgICAgICBub2RlID0gd2Via2l0X2RvbV9u
b2RlX2xpc3RfaXRlbShsaXN0LmdldCgpLCAwKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RP
TV9JU19IVE1MX0VMRU1FTlQobm9kZSkpOworICAgICAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25v
ZGVfaXNfc2FtZV9ub2RlKFdFQktJVF9ET01fTk9ERShkaXYpLCBub2RlKSk7CisKKyAgICAgICAg
Ly8gTm93IGluc2VydCBhICdwJyBiZWZvcmUgJ2RpdicuCisgICAgICAgIHAgPSB3ZWJraXRfZG9t
X2RvY3VtZW50X2NyZWF0ZV9lbGVtZW50KGRvY3VtZW50LCAiUCIsIDApOworICAgICAgICBnX2Fz
c2VydChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChwKSk7CisgICAgICAgIHdlYmtpdF9kb21f
bm9kZV9pbnNlcnRfYmVmb3JlKFdFQktJVF9ET01fTk9ERShib2R5KSwgV0VCS0lUX0RPTV9OT0RF
KHApLCBXRUJLSVRfRE9NX05PREUoZGl2KSwgMCk7CisgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9k
b21fbm9kZV9oYXNfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKSk7CisgICAgICAg
IGxpc3QgPSBhZG9wdEdSZWYod2Via2l0X2RvbV9ub2RlX2dldF9jaGlsZF9ub2RlcyhXRUJLSVRf
RE9NX05PREUoYm9keSkpKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19OT0RFX0xJ
U1QobGlzdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X2RvbV9ub2Rl
X2xpc3RfZ2V0X2xlbmd0aChsaXN0LmdldCgpKSwgPT0sIDIpOworICAgICAgICBub2RlID0gd2Vi
a2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0LmdldCgpLCAwKTsKKyAgICAgICAgZ19hc3NlcnQo
V0VCS0lUX0RPTV9JU19IVE1MX0VMRU1FTlQobm9kZSkpOworICAgICAgICBnX2Fzc2VydCh3ZWJr
aXRfZG9tX25vZGVfaXNfc2FtZV9ub2RlKFdFQktJVF9ET01fTk9ERShwKSwgbm9kZSkpOworICAg
ICAgICBub2RlID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0LmdldCgpLCAxKTsKKyAg
ICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0VMRU1FTlQobm9kZSkpOworICAgICAg
ICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaXNfc2FtZV9ub2RlKFdFQktJVF9ET01fTk9ERShk
aXYpLCBub2RlKSk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCB0
ZXN0VGFnTmFtZXMoV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24sIEdWYXJpYW50KiBhcmdz
KQorICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGV4cGVjdGVkVGFnTmFtZXNbXSA9
IHsgIkhUTUwiLCAiSEVBRCIsICJCT0RZIiwgIlZJREVPIiwgIlNPVVJDRSIsICJWSURFTyIsICJT
T1VSQ0UiLCAiSU5QVVQiIH07CisKKyAgICAgICAgV2ViS2l0V2ViUGFnZSogcGFnZSA9IHdlYmtp
dF93ZWJfZXh0ZW5zaW9uX2dldF9wYWdlKGV4dGVuc2lvbiwgd2ViUGFnZUZyb21BcmdzKGFyZ3Mp
KTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX1dFQl9QQUdFKHBhZ2UpKTsKKyAgICAgICAg
V2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50ID0gd2Via2l0X3dlYl9wYWdlX2dldF9kb21fZG9j
dW1lbnQocGFnZSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfRE9DVU1FTlQoZG9j
dW1lbnQpKTsKKworICAgICAgICBXZWJLaXRET01Ob2RlTGlzdCogbGlzdCA9IHdlYmtpdF9kb21f
ZG9jdW1lbnRfZ2V0X2VsZW1lbnRzX2J5X3RhZ19uYW1lKGRvY3VtZW50LCAiKiIpOworICAgICAg
ICBndWxvbmcgbm9kZUNvdW50ID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChsaXN0
KTsKKyAgICAgICAgZ19hc3NlcnRfY21wdWludChub2RlQ291bnQsID09LCBHX05fRUxFTUVOVFMo
ZXhwZWN0ZWRUYWdOYW1lcykpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9k
ZUNvdW50OyBpKyspIHsKKyAgICAgICAgICAgIFdlYktpdERPTU5vZGUqIG5vZGUgPSB3ZWJraXRf
ZG9tX25vZGVfbGlzdF9pdGVtKGxpc3QsIGkpOworICAgICAgICAgICAgZ19hc3NlcnQoV0VCS0lU
X0RPTV9JU19OT0RFKG5vZGUpKTsKKyAgICAgICAgICAgIEdPd25QdHI8Y2hhcj4gdGFnTmFtZSh3
ZWJraXRfZG9tX25vZGVfZ2V0X25vZGVfbmFtZShub2RlKSk7CisgICAgICAgICAgICBnX2Fzc2Vy
dF9jbXBzdHIodGFnTmFtZS5nZXQoKSwgPT0sIGV4cGVjdGVkVGFnTmFtZXNbaV0pOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIHJ1
blRlc3QoY29uc3QgY2hhciogdGVzdE5hbWUsIFdlYktpdFdlYkV4dGVuc2lvbiogZXh0ZW5zaW9u
LCBHVmFyaWFudCogYXJncykKKyAgICB7CisgICAgICAgIGlmICghc3RyY21wKHRlc3ROYW1lLCAi
aGllcmFyY2h5LW5hdmlnYXRpb24iKSkKKyAgICAgICAgICAgIHJldHVybiB0ZXN0SGllcmFyY2h5
TmF2aWdhdGlvbihleHRlbnNpb24sIGFyZ3MpOworICAgICAgICBpZiAoIXN0cmNtcCh0ZXN0TmFt
ZSwgImluc2VydGlvbiIpKQorICAgICAgICAgICAgcmV0dXJuIHRlc3RJbnNlcnRpb24oZXh0ZW5z
aW9uLCBhcmdzKTsKKyAgICAgICAgaWYgKCFzdHJjbXAodGVzdE5hbWUsICJ0YWctbmFtZXMiKSkK
KyAgICAgICAgICAgIHJldHVybiB0ZXN0VGFnTmFtZXMoZXh0ZW5zaW9uLCBhcmdzKTsKKworICAg
ICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorfTsKKworc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXygoY29uc3RydWN0b3IpKSByZWdpc3Rl
clRlc3RzKCkKK3sKKyAgICBSRUdJU1RFUl9URVNUKFdlYktpdERPTU5vZGVUZXN0LCAiV2ViS2l0
RE9NTm9kZS9oaWVyYXJjaHktbmF2aWdhdGlvbiIpOworICAgIFJFR0lTVEVSX1RFU1QoV2ViS2l0
RE9NTm9kZVRlc3QsICJXZWJLaXRET01Ob2RlL2luc2VydGlvbiIpOworICAgIFJFR0lTVEVSX1RF
U1QoV2ViS2l0RE9NTm9kZVRlc3QsICJXZWJLaXRET01Ob2RlL3RhZy1uYW1lcyIpOworfQorCisK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9GcmFtZVRl
c3QuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL0ZyYW1lVGVzdC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ0ODUwZgotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9GcmFtZVRlc3Qu
Y3BwCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBT
LkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIldlYlByb2Nlc3NUZXN0LmgiCisj
aW5jbHVkZSA8Z2lvL2dpby5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0LXdlYi1leHRlbnNp
b24uaD4KKworY2xhc3MgV2ViS2l0RnJhbWVUZXN0IDogcHVibGljIFdlYlByb2Nlc3NUZXN0IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxXZWJQcm9jZXNzVGVzdD4gY3JlYXRlKCkg
eyByZXR1cm4gYWRvcHRQdHIobmV3IFdlYktpdEZyYW1lVGVzdCgpKTsgfQorCitwcml2YXRlOgor
ICAgIGd1aW50NjQgd2ViUGFnZUZyb21BcmdzKEdWYXJpYW50KiBhcmdzKQorICAgIHsKKyAgICAg
ICAgR1ZhcmlhbnRJdGVyIGl0ZXI7CisgICAgICAgIGdfdmFyaWFudF9pdGVyX2luaXQoJml0ZXIs
IGFyZ3MpOworCisgICAgICAgIGNvbnN0IGNoYXIqIGtleTsKKyAgICAgICAgR1ZhcmlhbnQqIHZh
bHVlOworICAgICAgICB3aGlsZSAoZ192YXJpYW50X2l0ZXJfbG9vcCgmaXRlciwgInsmc3Z9Iiwg
JmtleSwgJnZhbHVlKSkgeworICAgICAgICAgICAgaWYgKCFzdHJjbXAoa2V5LCAicGFnZUlEIikg
JiYgZ192YXJpYW50X2NsYXNzaWZ5KHZhbHVlKSA9PSBHX1ZBUklBTlRfQ0xBU1NfVUlOVDY0KQor
ICAgICAgICAgICAgICAgIHJldHVybiBnX3ZhcmlhbnRfZ2V0X3VpbnQ2NCh2YWx1ZSk7CisgICAg
ICAgIH0KKworICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisKKyAgICBib29sIHRlc3RNYWluRnJhbWUoV2ViS2l0V2ViRXh0ZW5zaW9uKiBl
eHRlbnNpb24sIEdWYXJpYW50KiBhcmdzKQorICAgIHsKKyAgICAgICAgV2ViS2l0V2ViUGFnZSog
cGFnZSA9IHdlYmtpdF93ZWJfZXh0ZW5zaW9uX2dldF9wYWdlKGV4dGVuc2lvbiwgd2ViUGFnZUZy
b21BcmdzKGFyZ3MpKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX1dFQl9QQUdFKHBhZ2Up
KTsKKworICAgICAgICBXZWJLaXRGcmFtZSogZnJhbWUgPSB3ZWJraXRfd2ViX3BhZ2VfZ2V0X21h
aW5fZnJhbWUocGFnZSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19GUkFNRShmcmFtZSkp
OworICAgICAgICBnX2Fzc2VydCh3ZWJraXRfZnJhbWVfaXNfbWFpbl9mcmFtZShmcmFtZSkpOwor
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgdGVzdFVSSShXZWJLaXRX
ZWJFeHRlbnNpb24qIGV4dGVuc2lvbiwgR1ZhcmlhbnQqIGFyZ3MpCisgICAgeworICAgICAgICBX
ZWJLaXRXZWJQYWdlKiBwYWdlID0gd2Via2l0X3dlYl9leHRlbnNpb25fZ2V0X3BhZ2UoZXh0ZW5z
aW9uLCB3ZWJQYWdlRnJvbUFyZ3MoYXJncykpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNf
V0VCX1BBR0UocGFnZSkpOworCisgICAgICAgIFdlYktpdEZyYW1lKiBmcmFtZSA9IHdlYmtpdF93
ZWJfcGFnZV9nZXRfbWFpbl9mcmFtZShwYWdlKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lT
X0ZSQU1FKGZyYW1lKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3BhZ2Vf
Z2V0X3VyaShwYWdlKSwgPT0sIHdlYmtpdF9mcmFtZV9nZXRfdXJpKGZyYW1lKSk7CisKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCB0ZXN0SmF2YVNjcmlwdENvbnRleHQo
V2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24sIEdWYXJpYW50KiBhcmdzKQorICAgIHsKKyAg
ICAgICAgV2ViS2l0V2ViUGFnZSogcGFnZSA9IHdlYmtpdF93ZWJfZXh0ZW5zaW9uX2dldF9wYWdl
KGV4dGVuc2lvbiwgd2ViUGFnZUZyb21BcmdzKGFyZ3MpKTsKKyAgICAgICAgZ19hc3NlcnQoV0VC
S0lUX0lTX1dFQl9QQUdFKHBhZ2UpKTsKKworICAgICAgICBXZWJLaXRGcmFtZSogZnJhbWUgPSB3
ZWJraXRfd2ViX3BhZ2VfZ2V0X21haW5fZnJhbWUocGFnZSk7CisgICAgICAgIGdfYXNzZXJ0KFdF
QktJVF9JU19GUkFNRShmcmFtZSkpOworICAgICAgICBnX2Fzc2VydCh3ZWJraXRfZnJhbWVfZ2V0
X2phdmFzY3JpcHRfZ2xvYmFsX2NvbnRleHQoZnJhbWUpKTsKKworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgcnVuVGVzdChjb25zdCBjaGFyKiB0ZXN0TmFt
ZSwgV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24sIEdWYXJpYW50KiBhcmdzKQorICAgIHsK
KyAgICAgICAgaWYgKCFzdHJjbXAodGVzdE5hbWUsICJtYWluLWZyYW1lIikpCisgICAgICAgICAg
ICByZXR1cm4gdGVzdE1haW5GcmFtZShleHRlbnNpb24sIGFyZ3MpOworICAgICAgICBpZiAoIXN0
cmNtcCh0ZXN0TmFtZSwgInVyaSIpKQorICAgICAgICAgICAgcmV0dXJuIHRlc3RVUkkoZXh0ZW5z
aW9uLCBhcmdzKTsKKyAgICAgICAgaWYgKCFzdHJjbXAodGVzdE5hbWUsICJqYXZhc2NyaXB0LWNv
bnRleHQiKSkKKyAgICAgICAgICAgIHJldHVybiB0ZXN0SmF2YVNjcmlwdENvbnRleHQoZXh0ZW5z
aW9uLCBhcmdzKTsKKworICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorfTsKKworc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXygoY29u
c3RydWN0b3IpKSByZWdpc3RlclRlc3RzKCkKK3sKKyAgICBSRUdJU1RFUl9URVNUKFdlYktpdEZy
YW1lVGVzdCwgIldlYktpdEZyYW1lL21haW4tZnJhbWUiKTsKKyAgICBSRUdJU1RFUl9URVNUKFdl
YktpdEZyYW1lVGVzdCwgIldlYktpdEZyYW1lL3VyaSIpOworICAgIFJFR0lTVEVSX1RFU1QoV2Vi
S2l0RnJhbWVUZXN0LCAiV2ViS2l0RnJhbWUvamF2YXNjcmlwdC1jb250ZXh0Iik7Cit9CmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvSW5zcGVjdG9yVGVz
dFNlcnZlci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvSW5zcGVj
dG9yVGVzdFNlcnZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjEz
YjA0MwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Mkd0ay9JbnNwZWN0b3JUZXN0U2VydmVyLmNwcApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MgTHRkLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
CisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxn
dGsvZ3RrLmg+CisjaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+CisKK3N0YXRpYyB2b2lkIGxv
YWRDaGFuZ2VkQ2FsbGJhY2soV2ViS2l0V2ViVmlldyosIFdlYktpdExvYWRFdmVudCBsb2FkRXZl
bnQsIGdwb2ludGVyKQoreworICAgIC8vIFNlbmQgYSBtZXNzYWdlIHRvIHRoZSBwYXJlbnQgcHJv
Y2VzcyB3aGVuIHdlJ3JlIHJlYWR5LgorICAgIGlmIChsb2FkRXZlbnQgPT0gV0VCS0lUX0xPQURf
RklOSVNIRUQpCisgICAgICAgIGdfcHJpbnQoIk9LIik7Cit9CisKK2ludCBtYWluKGludCBhcmdj
LCBjaGFyKiogYXJndikKK3sKKyAgICBndGtfaW5pdCgmYXJnYywgJmFyZ3YpOworCisgICAgLy8g
T3ZlcndyaXRlIFdFQktJVF9JTlNQRUNUT1JfU0VSVkVSIHZhcmlhYmxlIHdpdGggZGVmYXVsdCB2
YWx1ZS4KKyAgICBnX3NldGVudigiV0VCS0lUX0lOU1BFQ1RPUl9TRVJWRVIiLCAiMTI3LjAuMC4x
OjI5OTkiLCBUUlVFKTsKKworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VC
X1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2Vu
YWJsZV9kZXZlbG9wZXJfZXh0cmFzKHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmll
dyksIFRSVUUpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX2h0bWwod2ViVmlldywKKyAgICAg
ICAgIjxodG1sPjxib2R5PjxwPldlYktpdEdUSysgSW5zcGVjdG9yIFRlc3QgU2VydmVyPC9wPjwv
Ym9keT48L2h0bWw+IiwKKyAgICAgICAgImh0dHA6Ly8xMjcuMC4wLjE6Mjk5OS8iKTsKKworICAg
IEd0a1dpZGdldCogd2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7
CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCBHVEtfV0lER0VU
KHdlYlZpZXcpKTsKKyAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7CisKKyAgICBnX3Np
Z25hbF9jb25uZWN0KHdpbmRvdywgImRlbGV0ZS1ldmVudCIsIEdfQ0FMTEJBQ0soZ3RrX21haW5f
cXVpdCksIDApOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgImxvYWQtY2hhbmdlZCIs
IEdfQ0FMTEJBQ0sobG9hZENoYW5nZWRDYWxsYmFjayksIDApOworCisgICAgZ3RrX21haW4oKTsK
K30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0
QXV0aGVudGljYXRpb24uY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3Rr
L1Rlc3RBdXRoZW50aWNhdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uZWRlNDIyNQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Mkd0ay9UZXN0QXV0aGVudGljYXRpb24uY3BwCkBAIC0wLDAgKzEsMjg2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiTG9hZFRyYWNraW5nVGVzdC5oIgorI2luY2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIu
aCIKKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisKK3N0YXRpYyBXZWJLaXRUZXN0
U2VydmVyKiBrU2VydmVyOworCitjbGFzcyBBdXRoZW50aWNhdGlvblRlc3Q6IHB1YmxpYyBMb2Fk
VHJhY2tpbmdUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKEF1dGhl
bnRpY2F0aW9uVGVzdCk7CisKKyAgICBBdXRoZW50aWNhdGlvblRlc3QoKQorICAgIHsKKyAgICAg
ICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJhdXRoZW50aWNhdGUiLCBHX0NBTExCQUNL
KHJ1bkF1dGhlbnRpY2F0aW9uQ2FsbGJhY2spLCB0aGlzKTsKKyAgICB9CisKKyAgICB+QXV0aGVu
dGljYXRpb25UZXN0KCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5l
Y3RfbWF0Y2hlZChtX3dlYlZpZXcsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRo
aXMpOworICAgIH0KKworICAgIHN0YXRpYyBpbnQgYXV0aGVudGljYXRpb25SZXRyaWVzOworICAg
IHN0YXRpYyBib29sIGF1dGhlbnRpY2F0aW9uQ2FuY2VsbGVkUmVjZWl2ZWQ7CisKKyAgICB2b2lk
IGxvYWRVUkkoY29uc3QgY2hhciogdXJpKQorICAgIHsKKyAgICAgICAgLy8gUmVzZXQgdGhlIHJl
dHJ5IGNvdW50IG9mIHRoZSBmYWtlIHNlcnZlciB3aGVuIGEgcGFnZSBpcyBsb2FkZWQuCisgICAg
ICAgIGF1dGhlbnRpY2F0aW9uUmV0cmllcyA9IDA7CisgICAgICAgIGF1dGhlbnRpY2F0aW9uQ2Fu
Y2VsbGVkUmVjZWl2ZWQgPSBmYWxzZTsKKyAgICAgICAgTG9hZFRyYWNraW5nVGVzdDo6bG9hZFVS
SSh1cmkpOworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBydW5BdXRoZW50aWNhdGlvbkNh
bGxiYWNrKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVl
c3QsIEF1dGhlbnRpY2F0aW9uVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2Nv
bm5lY3QocmVxdWVzdCwgImNhbmNlbGxlZCIsIEdfQ0FMTEJBQ0soYXV0aGVudGljYXRpb25DYW5j
ZWxsZWRDYWxsYmFjayksIHRlc3QpOworICAgICAgICB0ZXN0LT5ydW5BdXRoZW50aWNhdGlvbihy
ZXF1ZXN0KTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQg
YXV0aGVudGljYXRpb25DYW5jZWxsZWRDYWxsYmFjayhXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVl
c3QqLCBBdXRoZW50aWNhdGlvblRlc3QqKQorICAgIHsKKyAgICAgICAgYXV0aGVudGljYXRpb25D
YW5jZWxsZWRSZWNlaXZlZCA9IHRydWU7CisgICAgfQorCisgICAgdm9pZCBydW5BdXRoZW50aWNh
dGlvbihXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QpCisgICAgeworICAgICAg
ICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHJlcXVlc3Qp
KTsKKyAgICAgICAgbV9hdXRoZW50aWNhdGlvblJlcXVlc3QgPSByZXF1ZXN0OworICAgICAgICBn
X21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIFdlYktpdEF1dGhlbnRp
Y2F0aW9uUmVxdWVzdCogd2FpdEZvckF1dGhlbnRpY2F0aW9uUmVxdWVzdCgpCisgICAgeworICAg
ICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgICAgIHJldHVybiBtX2F1dGhl
bnRpY2F0aW9uUmVxdWVzdC5nZXQoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR1JlZlB0cjxX
ZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3Q+IG1fYXV0aGVudGljYXRpb25SZXF1ZXN0OworfTsK
KworaW50IEF1dGhlbnRpY2F0aW9uVGVzdDo6YXV0aGVudGljYXRpb25SZXRyaWVzID0gMDsKK2Jv
b2wgQXV0aGVudGljYXRpb25UZXN0OjphdXRoZW50aWNhdGlvbkNhbmNlbGxlZFJlY2VpdmVkID0g
ZmFsc2U7CisKK3N0YXRpYyBjb25zdCBjaGFyIGF1dGhUZXN0VXNlcm5hbWVbXSA9ICJ1c2VybmFt
ZSI7CitzdGF0aWMgY29uc3QgY2hhciBhdXRoVGVzdFBhc3N3b3JkW10gPSAicGFzc3dvcmQiOwor
c3RhdGljIGNvbnN0IGNoYXIgYXV0aEV4cGVjdGVkU3VjY2Vzc1RpdGxlW10gPSAiV2ViS2l0Mkd0
aysgQXV0aGVudGljYXRpb24gdGVzdCI7CitzdGF0aWMgY29uc3QgY2hhciBhdXRoRXhwZWN0ZWRG
YWlsdXJlVGl0bGVbXSA9ICI0MDEgQXV0aG9yaXphdGlvbiBSZXF1aXJlZCI7CitzdGF0aWMgY29u
c3QgY2hhciBhdXRoRXhwZWN0ZWRBdXRob3JpemF0aW9uW10gPSAiQmFzaWMgZFhObGNtNWhiV1U2
Y0dGemMzZHZjbVE9IjsgLy8gQmFzZTY0IGVuY29kaW5nIG9mICJ1c2VybmFtZTpwYXNzd29yZCIu
CitzdGF0aWMgY29uc3QgY2hhciBhdXRoU3VjY2Vzc0hUTUxTdHJpbmdbXSA9CisgICAgIjxodG1s
PiIKKyAgICAiPGhlYWQ+PHRpdGxlPldlYktpdDJHdGsrIEF1dGhlbnRpY2F0aW9uIHRlc3Q8L3Rp
dGxlPjwvaGVhZD4iCisgICAgIjxib2R5PjwvYm9keT48L2h0bWw+IjsKK3N0YXRpYyBjb25zdCBj
aGFyIGF1dGhGYWlsdXJlSFRNTFN0cmluZ1tdID0KKyAgICAiPGh0bWw+IgorICAgICI8aGVhZD48
dGl0bGU+NDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQ8L3RpdGxlPjwvaGVhZD4iCisgICAgIjxi
b2R5PjwvYm9keT48L2h0bWw+IjsKKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdBdXRoZW50aWNh
dGlvblJlcXVlc3QoQXV0aGVudGljYXRpb25UZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQorewor
ICAgIC8vIFRlc3QgYXV0aGVudGljYXRpb24gcmVxdWVzdCBnZXR0ZXJzIG1hdGNoIHNvdXAgYXV0
aGVudGljYXRpb24gaGVhZGVyLgorICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9y
UGF0aCgiL2F1dGgtdGVzdC5odG1sIikuZGF0YSgpKTsKKyAgICBXZWJLaXRBdXRoZW50aWNhdGlv
blJlcXVlc3QqIHJlcXVlc3QgPSB0ZXN0LT53YWl0Rm9yQXV0aGVudGljYXRpb25SZXF1ZXN0KCk7
CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9o
b3N0KHJlcXVlc3QpLCA9PSwgc291cF91cmlfZ2V0X2hvc3Qoa1NlcnZlci0+YmFzZVVSSSgpKSk7
CisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRf
cG9ydChyZXF1ZXN0KSwgPT0sIHNvdXBfdXJpX2dldF9wb3J0KGtTZXJ2ZXItPmJhc2VVUkkoKSkp
OworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRf
cmVhbG0ocmVxdWVzdCksID09LCAibXkgcmVhbG0iKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfYXV0
aGVudGljYXRpb25fcmVxdWVzdF9nZXRfc2NoZW1lKHJlcXVlc3QpID09IFdFQktJVF9BVVRIRU5U
SUNBVElPTl9TQ0hFTUVfSFRUUF9CQVNJQyk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9hdXRoZW50
aWNhdGlvbl9yZXF1ZXN0X2lzX2Zvcl9wcm94eShyZXF1ZXN0KSk7CisgICAgZ19hc3NlcnQoIXdl
YmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2lzX3JldHJ5KHJlcXVlc3QpKTsKK30KKworc3Rh
dGljIHZvaWQgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvbkNhbmNlbChBdXRoZW50aWNhdGlvblRl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8gVGVzdCBjYW5jZWwuCisgICAgdGVz
dC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvYXV0aC10ZXN0Lmh0bWwiKS5kYXRh
KCkpOworICAgIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCA9IHRlc3QtPndh
aXRGb3JBdXRoZW50aWNhdGlvblJlcXVlc3QoKTsKKyAgICB3ZWJraXRfYXV0aGVudGljYXRpb25f
cmVxdWVzdF9jYW5jZWwocmVxdWVzdCk7CisgICAgLy8gU2VydmVyIGRvZXNuJ3QgYXNrIGZvciBu
ZXcgY3JlZGVudGlhbHMuCisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAg
ICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0sIDMpOworICAg
IGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdU
ZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+
bV9sb2FkRXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkRmFp
bGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzJdLCA9PSwgTG9h
ZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKKworICAgIGdfYXNzZXJ0X2Vycm9yKHRlc3Qt
Pm1fZXJyb3IuZ2V0KCksIFdFQktJVF9ORVRXT1JLX0VSUk9SLCBXRUJLSVRfTkVUV09SS19FUlJP
Ul9DQU5DRUxMRUQpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9u
TG9hZENhbmNlbGxlZChBdXRoZW50aWNhdGlvblRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7
CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvYXV0aC10ZXN0Lmh0
bWwiKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRGb3JBdXRoZW50aWNhdGlvblJlcXVlc3QoKTsK
KyAgICB3ZWJraXRfd2ViX3ZpZXdfc3RvcF9sb2FkaW5nKHRlc3QtPm1fd2ViVmlldyk7CisgICAg
Ly8gRXhwZWN0IGVtcHR5IHBhZ2UuCisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7
CisgICAgZ19hc3NlcnQodGVzdC0+YXV0aGVudGljYXRpb25DYW5jZWxsZWRSZWNlaXZlZCk7CisK
KyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0sIDMpOwor
ICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMF0sID09LCBMb2FkVHJhY2tp
bmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVz
dC0+bV9sb2FkRXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2Fk
RmFpbGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzJdLCA9PSwg
TG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKKworICAgIGdfYXNzZXJ0X2Vycm9yKHRl
c3QtPm1fZXJyb3IuZ2V0KCksIFdFQktJVF9ORVRXT1JLX0VSUk9SLCBXRUJLSVRfTkVUV09SS19F
UlJPUl9DQU5DRUxMRUQpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0
aW9uRmFpbHVyZShBdXRoZW50aWNhdGlvblRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7Cisg
ICAgLy8gVGVzdCBhdXRoZW50aWNhdGlvbiBmYWlsdXJlcy4KKyAgICB0ZXN0LT5sb2FkVVJJKGtT
ZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9hdXRoLXRlc3QuaHRtbCIpLmRhdGEoKSk7CisgICAgV2Vi
S2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0ID0gdGVzdC0+d2FpdEZvckF1dGhlbnRp
Y2F0aW9uUmVxdWVzdCgpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYXV0aGVudGljYXRpb25fcmVx
dWVzdF9pc19yZXRyeShyZXF1ZXN0KSk7CisgICAgV2ViS2l0Q3JlZGVudGlhbCogY3JlZGVudGlh
bCA9IHdlYmtpdF9jcmVkZW50aWFsX25ldyhhdXRoVGVzdFVzZXJuYW1lLCAid3JvbmdwYXNzd29y
ZCIsIFdFQktJVF9DUkVERU5USUFMX1BFUlNJU1RFTkNFX05PTkUpOworICAgIHdlYmtpdF9hdXRo
ZW50aWNhdGlvbl9yZXF1ZXN0X2F1dGhlbnRpY2F0ZShyZXF1ZXN0LCBjcmVkZW50aWFsKTsKKyAg
ICB3ZWJraXRfY3JlZGVudGlhbF9mcmVlKGNyZWRlbnRpYWwpOworICAgIC8vIEV4cGVjdCBhIHNl
Y29uZCBhdXRoZW50aWNhdGlvbiByZXF1ZXN0LgorICAgIHJlcXVlc3QgPSB0ZXN0LT53YWl0Rm9y
QXV0aGVudGljYXRpb25SZXF1ZXN0KCk7CisgICAgZ19hc3NlcnQod2Via2l0X2F1dGhlbnRpY2F0
aW9uX3JlcXVlc3RfaXNfcmV0cnkocmVxdWVzdCkpOworICAgIC8vIFRlc3Qgc2Vjb25kIGZhaWx1
cmUuCisgICAgY3JlZGVudGlhbCA9IHdlYmtpdF9jcmVkZW50aWFsX25ldyhhdXRoVGVzdFVzZXJu
YW1lLCAid3JvbmdwYXNzd29yZDIiLCBXRUJLSVRfQ1JFREVOVElBTF9QRVJTSVNURU5DRV9OT05F
KTsKKyAgICB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9hdXRoZW50aWNhdGUocmVxdWVz
dCwgY3JlZGVudGlhbCk7CisgICAgd2Via2l0X2NyZWRlbnRpYWxfZnJlZShjcmVkZW50aWFsKTsK
KyAgICAvLyBFeHBlY3QgYXV0aGVudGljYXRpb24gZmFpbGVkIHBhZ2UuCisgICAgdGVzdC0+d2Fp
dFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2Fk
RXZlbnRzLnNpemUoKSwgPT0sIDMpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRF
dmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNr
aW5nVGVzdDo6TG9hZENvbW1pdHRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9h
ZEV2ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7CisgICAgZ19h
c3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRfdGl0bGUodGVzdC0+bV93ZWJWaWV3KSwg
PT0sIGF1dGhFeHBlY3RlZEZhaWx1cmVUaXRsZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJW
aWV3QXV0aGVudGljYXRpb25Ob0NyZWRlbnRpYWwoQXV0aGVudGljYXRpb25UZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQoreworICAgIC8vIFRlc3QgY29udGludWUgd2l0aG91dCBjcmVkZW50aWFs
cy4KKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9hdXRoLXRlc3Qu
aHRtbCIpLmRhdGEoKSk7CisgICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0
ID0gdGVzdC0+d2FpdEZvckF1dGhlbnRpY2F0aW9uUmVxdWVzdCgpOworICAgIHdlYmtpdF9hdXRo
ZW50aWNhdGlvbl9yZXF1ZXN0X2F1dGhlbnRpY2F0ZShyZXF1ZXN0LCAwKTsKKyAgICAvLyBTZXJ2
ZXIgZG9lc24ndCBhc2sgZm9yIG5ldyBjcmVkZW50aWFscy4KKyAgICB0ZXN0LT53YWl0VW50aWxM
b2FkRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHMu
c2l6ZSgpLCA9PSwgMyk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1sw
XSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOworICAgIGdf
YXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0
OjpMb2FkQ29tbWl0dGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRz
WzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIod2Via2l0X3dlYl92aWV3X2dldF90aXRsZSh0ZXN0LT5tX3dlYlZpZXcpLCA9PSwgYXV0
aEV4cGVjdGVkRmFpbHVyZVRpdGxlKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdBdXRo
ZW50aWNhdGlvblN0b3JhZ2UoQXV0aGVudGljYXRpb25UZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVy
KQoreworICAgIC8vIEVuYWJsZSBwcml2YXRlIGJyb3dzaW5nIGJlZm9yZSBhdXRoZW50aWNhdGlv
biByZXF1ZXN0IHRvIHRlc3QgdGhhdCBjcmVkZW50aWFscyBjYW4ndCBiZSBzYXZlZC4KKyAgICB3
ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9wcml2YXRlX2Jyb3dzaW5nKHdlYmtpdF93ZWJfdmll
d19nZXRfc2V0dGluZ3ModGVzdC0+bV93ZWJWaWV3KSwgVFJVRSk7CisgICAgdGVzdC0+bG9hZFVS
SShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvYXV0aC10ZXN0Lmh0bWwiKS5kYXRhKCkpOworICAg
IFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCA9IHRlc3QtPndhaXRGb3JBdXRo
ZW50aWNhdGlvblJlcXVlc3QoKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2F1dGhlbnRpY2F0aW9u
X3JlcXVlc3RfZ2V0X3Byb3Bvc2VkX2NyZWRlbnRpYWwocmVxdWVzdCkpOworICAgIGdfYXNzZXJ0
KCF3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jYW5fc2F2ZV9jcmVkZW50aWFscyhyZXF1
ZXN0KSk7CisKKyAgICAvLyBJZiBXZWJLaXQgaGFzIGJlZW4gY29tcGlsZWQgd2l0aCBsaWJzZWNy
ZXQsIGFuZCBwcml2YXRlIGJyb3dzaW5nIGlzIGRpc2FibGVkCisgICAgLy8gdGhlbiBjaGVjayB0
aGF0IGNyZWRlbnRpYWxzIGNhbiBiZSBzYXZlZC4KKyNpZiBFTkFCTEUoQ1JFREVOVElBTF9TVE9S
QUdFKQorICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX3ByaXZhdGVfYnJvd3Npbmcod2Vi
a2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh0ZXN0LT5tX3dlYlZpZXcpLCBGQUxTRSk7CisgICAg
dGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvYXV0aC10ZXN0Lmh0bWwiKS5k
YXRhKCkpOworICAgIHJlcXVlc3QgPSB0ZXN0LT53YWl0Rm9yQXV0aGVudGljYXRpb25SZXF1ZXN0
KCk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9wcm9w
b3NlZF9jcmVkZW50aWFsKHJlcXVlc3QpKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfYXV0aGVudGlj
YXRpb25fcmVxdWVzdF9jYW5fc2F2ZV9jcmVkZW50aWFscyhyZXF1ZXN0KSk7CisjZW5kaWYKK30K
Kworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvblN1Y2Nlc3MoQXV0aGVudGlj
YXRpb25UZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIC8vIFRlc3QgY29ycmVjdCBh
dXRoZW50aWNhdGlvbi4KKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgo
Ii9hdXRoLXRlc3QuaHRtbCIpLmRhdGEoKSk7CisgICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1
ZXN0KiByZXF1ZXN0ID0gdGVzdC0+d2FpdEZvckF1dGhlbnRpY2F0aW9uUmVxdWVzdCgpOworICAg
IFdlYktpdENyZWRlbnRpYWwqIGNyZWRlbnRpYWwgPSB3ZWJraXRfY3JlZGVudGlhbF9uZXcoYXV0
aFRlc3RVc2VybmFtZSwgYXV0aFRlc3RQYXNzd29yZCwgV0VCS0lUX0NSRURFTlRJQUxfUEVSU0lT
VEVOQ0VfRk9SX1NFU1NJT04pOworICAgIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2F1
dGhlbnRpY2F0ZShyZXF1ZXN0LCBjcmVkZW50aWFsKTsKKyAgICB3ZWJraXRfY3JlZGVudGlhbF9m
cmVlKGNyZWRlbnRpYWwpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisg
ICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50cy5zaXplKCksID09LCAzKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzBdLCA9PSwgTG9hZFRyYWNraW5n
VGVzdDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3Qt
Pm1fbG9hZEV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRDb21taXR0ZWQpOwor
ICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMl0sID09LCBMb2FkVHJhY2tp
bmdUZXN0OjpMb2FkRmluaXNoZWQpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X3RpdGxlKHRlc3QtPm1fd2ViVmlldyksID09LCBhdXRoRXhwZWN0ZWRTdWNjZXNzVGl0
bGUpOworCisgICAgLy8gVGVzdCBsb2FkaW5nIHRoZSBzYW1lIChhdXRob3JpemVkKSBwYWdlIGFn
YWluLgorICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2F1dGgtdGVz
dC5odG1sIikuZGF0YSgpKTsKKyAgICAvLyBUaGVyZSBpcyBubyBhdXRoZW50aWNhdGlvbiBjaGFs
bGVuZ2UuCisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0sIDMpOworICAgIGdfYXNzZXJ0
X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92
aXNpb25hbExvYWRTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZl
bnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZENvbW1pdHRlZCk7CisgICAgZ19hc3Nl
cnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6Okxv
YWRGaW5pc2hlZCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRfdGl0
bGUodGVzdC0+bV93ZWJWaWV3KSwgPT0sIGF1dGhFeHBlY3RlZFN1Y2Nlc3NUaXRsZSk7Cit9CisK
K3N0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqLCBTb3VwTWVzc2FnZSogbWVz
c2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSosIFNvdXBDbGllbnRDb250ZXh0Kiwg
dm9pZCopCit7CisgICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsK
KyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9U
X0lNUExFTUVOVEVEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghc3RyY21w
KHBhdGgsICIvYXV0aC10ZXN0Lmh0bWwiKSkgeworICAgICAgICBjb25zdCBjaGFyKiBhdXRob3Jp
emF0aW9uID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X29uZShtZXNzYWdlLT5yZXF1ZXN0X2hl
YWRlcnMsICJBdXRob3JpemF0aW9uIik7CisgICAgICAgIC8vIFJlcXVpcmUgYXV0aGVudGljYXRp
b24uCisgICAgICAgIGlmICghZ19zdHJjbXAwKGF1dGhvcml6YXRpb24sIGF1dGhFeHBlY3RlZEF1
dGhvcml6YXRpb24pKSB7CisgICAgICAgICAgICAvLyBTdWNjZXNzZnVsIGF1dGhlbnRpY2F0aW9u
LgorICAgICAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFU
VVNfT0spOworICAgICAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJl
c3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgYXV0aFN1Y2Nlc3NIVE1MU3RyaW5nLCBz
dHJsZW4oYXV0aFN1Y2Nlc3NIVE1MU3RyaW5nKSk7CisgICAgICAgICAgICBBdXRoZW50aWNhdGlv
blRlc3Q6OmF1dGhlbnRpY2F0aW9uUmV0cmllcyA9IDA7CisgICAgICAgIH0gZWxzZSBpZiAoKytB
dXRoZW50aWNhdGlvblRlc3Q6OmF1dGhlbnRpY2F0aW9uUmV0cmllcyA8IDMpIHsKKyAgICAgICAg
ICAgIC8vIE5vIG9yIGludmFsaWQgYXV0aG9yaXphdGlvbiBoZWFkZXIgcHJvdmlkZWQgYnkgdGhl
IGNsaWVudCwgcmVxdWVzdCBhdXRoZW50aWNhdGlvbiB0d2ljZSB0aGVuIGZhaWwuCisgICAgICAg
ICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19VTkFVVEhP
UklaRUQpOworICAgICAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1lc3NhZ2Ut
PnJlc3BvbnNlX2hlYWRlcnMsICJXV1ctQXV0aGVudGljYXRlIiwgIkJhc2ljIHJlYWxtPVwibXkg
cmVhbG1cIiIpOworICAgICAgICAgICAgLy8gSW5jbHVkZSBhIGZhaWx1cmUgbWVzc2FnZSBpbiBj
YXNlIHRoZSB1c2VyIGF0dGVtcHRzIHRvIHByb2NlZWQgd2l0aG91dCBhdXRoZW50aWNhdGlvbi4K
KyAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9i
b2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGF1dGhGYWlsdXJlSFRNTFN0cmluZywgc3RybGVuKGF1
dGhGYWlsdXJlSFRNTFN0cmluZykpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8g
QXV0aGVudGljYXRpb24gbm90IHN1Y2Nlc3NmdWwsIGRpc3BsYXkgYSAiNDAxIEF1dGhvcml6YXRp
b24gUmVxdWlyZWQiIHBhZ2UuCisgICAgICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyht
ZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7CisgICAgICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9h
cHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBhdXRoRmFp
bHVyZUhUTUxTdHJpbmcsIHN0cmxlbihhdXRoRmFpbHVyZUhUTUxTdHJpbmcpKTsKKyAgICAgICAg
fQorICAgIH0gZWxzZQorICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBT
T1VQX1NUQVRVU19OT1RfRk9VTkQpOworCisgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUo
bWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7Cit9CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICBr
U2VydmVyID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIoKTsKKyAgICBrU2VydmVyLT5ydW4oc2VydmVy
Q2FsbGJhY2spOworCisgICAgQXV0aGVudGljYXRpb25UZXN0OjphZGQoIldlYktpdFdlYlZpZXci
LCAiYXV0aGVudGljYXRpb24tcmVxdWVzdCIsIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25SZXF1
ZXN0KTsKKyAgICBBdXRoZW50aWNhdGlvblRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJhdXRo
ZW50aWNhdGlvbi1jYW5jZWwiLCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uQ2FuY2VsKTsKKyAg
ICBBdXRoZW50aWNhdGlvblRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJhdXRoZW50aWNhdGlv
bi1sb2FkLWNhbmNlbGxlZCIsIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25Mb2FkQ2FuY2VsbGVk
KTsKKyAgICBBdXRoZW50aWNhdGlvblRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJhdXRoZW50
aWNhdGlvbi1mYWlsdXJlIiwgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvbkZhaWx1cmUpOworICAg
IEF1dGhlbnRpY2F0aW9uVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImF1dGhlbnRpY2F0aW9u
LW5vLWNyZWRlbnRpYWwiLCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uTm9DcmVkZW50aWFsKTsK
KyAgICBBdXRoZW50aWNhdGlvblRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJhdXRoZW50aWNh
dGlvbi1zdG9yYWdlIiwgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvblN0b3JhZ2UpOworICAgIC8v
IFRlc3RpbmcgYXV0aGVudGljYXRpb24gc3VjY2VzcyBtdXN0IGJlIGRvbmUgbGFzdCBiZWNhdXNl
IGxpYnNvdXAgd2lsbCBuZXZlciBmaXJlCisgICAgLy8gdGhlIGF1dGhlbnRpY2F0ZSBzaWduYWwg
YWdhaW4gb25jZSBhdXRoZW50aWNhdGlvbiBpcyBzdWNjZXNzZnVsLgorICAgIEF1dGhlbnRpY2F0
aW9uVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImF1dGhlbnRpY2F0aW9uLXN1Y2Nlc3MiLCB0
ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uU3VjY2Vzcyk7Cit9CisKK3ZvaWQgYWZ0ZXJBbGwoKQor
eworICAgIGRlbGV0ZSBrU2VydmVyOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RCYWNrRm9yd2FyZExpc3QuY3BwIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RCYWNrRm9yd2FyZExpc3QuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NzkzNjYKLS0tIC9kZXYvbnVsbAorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdEJhY2tGb3J3YXJkTGlzdC5j
cHAKQEAgLTAsMCArMSwyODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMu
TC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5oIgor
I2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUg
PGxpYnNvdXAvc291cC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHdlYmtpdDIv
d2Via2l0Mi5oPgorCisvLyBCYWNrIGZvcndhcmQgbGlzdCBsaW1pdCBpcyAxMDAgYnkgZGVmYXVs
dC4KK3N0YXRpYyBjb25zdCBpbnQga0JhY2tGb3J3YXJkTGlzdExpbWl0ID0gMTAwOworCitzdGF0
aWMgV2ViS2l0VGVzdFNlcnZlcioga1NlcnZlcjsKKworc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJh
Y2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbXNnLCBjb25zdCBjaGFyKiBwYXRo
LCBHSGFzaFRhYmxlKiBxdWVyeSwgU291cENsaWVudENvbnRleHQqIGNvbnRleHQsIGdwb2ludGVy
IGRhdGEpCit7CisgICAgaWYgKG1zZy0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgeworICAg
ICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX05PVF9JTVBMRU1F
TlRFRCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZ19zdHJfaGFzX3N1ZmZp
eChwYXRoLCAiZmF2aWNvbi5pY28iKSkgeworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1
cyhtc2csIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX09LKTsKKworICAg
IGNoYXIqIGJvZHkgPSBnX3N0cmR1cF9wcmludGYoIjxodG1sPjx0aXRsZT4lczwvdGl0bGU+PGJv
ZHk+JXM8L2JvZHk+PC9odG1sPiIsIHBhdGggKyAxLCBwYXRoICsgMSk7CisgICAgc291cF9tZXNz
YWdlX2JvZHlfYXBwZW5kKG1zZy0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgYm9k
eSwgc3RybGVuKGJvZHkpKTsKKworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1zZy0+
cmVzcG9uc2VfYm9keSk7Cit9CisKK2NsYXNzIEJhY2tGb3J3YXJkTGlzdFRlc3Q6IHB1YmxpYyBX
ZWJWaWV3VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShCYWNrRm9y
d2FyZExpc3RUZXN0KTsKKworICAgIGVudW0geworICAgICAgICBCYWNrd2FyZCwKKyAgICAgICAg
Rm9yd2FyZAorICAgIH07CisKKyAgICBlbnVtIHsKKyAgICAgICAgQ3VycmVudEl0ZW0gID0gMSA8
PCAwLAorICAgICAgICBBZGRlZEl0ZW0gICAgPSAxIDw8IDEsCisgICAgICAgIFJlbW92ZWRJdGVt
cyA9IDEgPDwgMgorICAgIH07CisKKyAgICBzdGF0aWMgdm9pZCBjaGVja0l0ZW0oV2ViS2l0QmFj
a0ZvcndhcmRMaXN0SXRlbSogaXRlbSwgY29uc3QgY2hhciogdGl0bGUsIGNvbnN0IGNoYXIqIHVy
aSwgY29uc3QgY2hhciogb3JpZ2luYWxVUkkpCisgICAgeworICAgICAgICBnX2Fzc2VydChpdGVt
KTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVt
X2dldF91cmkoaXRlbSksID09LCB1cmkpOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0
X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0X3RpdGxlKGl0ZW0pLCA9PSAsIHRpdGxlKTsKKyAg
ICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dldF9v
cmlnaW5hbF91cmkoaXRlbSksID09LCBvcmlnaW5hbFVSSSk7CisgICAgfQorCisgICAgc3RhdGlj
IHZvaWQgY2hlY2tJdGVtSW5kZXgoV2ViS2l0QmFja0ZvcndhcmRMaXN0KiBsaXN0KQorICAgIHsK
KyAgICAgICAgZ19hc3NlcnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9udGhfaXRlbShs
aXN0LCAtMSkgPT0gd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2l0ZW0obGlzdCkp
OworICAgICAgICBnX2Fzc2VydCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X250aF9pdGVt
KGxpc3QsIDApID09IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKGxp
c3QpKTsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9udGhf
aXRlbShsaXN0LCAxKSA9PSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRl
bShsaXN0KSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgY2hlY2tMaXN0KFdlYktpdEJhY2tG
b3J3YXJkTGlzdCogbGlzdCwgdW5zaWduZWQgdHlwZSwgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRl
bSoqIGl0ZW1zLCB1bnNpZ25lZCBuSXRlbXMpCisgICAgeworICAgICAgICBHTGlzdCogbGlzdEl0
ZW1zID0gdHlwZSA9PSBCYWNrRm9yd2FyZExpc3RUZXN0OjpCYWNrd2FyZCA/IHdlYmtpdF9iYWNr
X2ZvcndhcmRfbGlzdF9nZXRfYmFja19saXN0KGxpc3QpIDoKKyAgICAgICAgICAgIHdlYmtpdF9i
YWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0KGxpc3QpOworICAgICAgICBnX2Fzc2Vy
dChsaXN0SXRlbXMpOworCisgICAgICAgIHVuc2lnbmVkIGkgPSAwOworICAgICAgICBmb3IgKEdM
aXN0KiBsaXN0SXRlbSA9IGxpc3RJdGVtczsgbGlzdEl0ZW07IGxpc3RJdGVtID0gZ19saXN0X25l
eHQobGlzdEl0ZW0pLCBpKyspIHsKKyAgICAgICAgICAgIGdfYXNzZXJ0X2NtcHVpbnQoaSwgPCwg
bkl0ZW1zKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KGxpc3RJdGVtLT5kYXRhID09IGl0ZW1zW2ld
KTsKKyAgICAgICAgfQorICAgICAgICBnX2xpc3RfZnJlZShsaXN0SXRlbXMpOworICAgIH0KKwor
ICAgIHN0YXRpYyB2b2lkIGJhY2tGb3J3YXJkTGlzdENoYW5nZWQoV2ViS2l0QmFja0ZvcndhcmRM
aXN0KiBsaXN0LCBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiBhZGRlZEl0ZW0sIEdMaXN0KiBy
ZW1vdmVkSXRlbXMsIEJhY2tGb3J3YXJkTGlzdFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICB0
ZXN0LT5tX2hhc0NoYW5nZWQgPSB0cnVlOworCisgICAgICAgIGlmICh0ZXN0LT5tX2NoYW5nZWRG
bGFncyAmIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OkFkZGVkSXRlbSkgeworICAgICAgICAgICAgZ19h
c3NlcnQoV0VCS0lUX0lTX0JBQ0tfRk9SV0FSRF9MSVNUX0lURU0oYWRkZWRJdGVtKSk7CisgICAg
ICAgICAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JK
RUNUKGFkZGVkSXRlbSkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGdfYXNzZXJ0KCFh
ZGRlZEl0ZW0pOworCisgICAgICAgIGlmICh0ZXN0LT5tX2NoYW5nZWRGbGFncyAmIEJhY2tGb3J3
YXJkTGlzdFRlc3Q6OlJlbW92ZWRJdGVtcykgeworICAgICAgICAgICAgZ19hc3NlcnQocmVtb3Zl
ZEl0ZW1zKTsKKyAgICAgICAgICAgIGZvciAoR0xpc3QqIGl0ZXIgPSByZW1vdmVkSXRlbXM7IGl0
ZXI7IGl0ZXIgPSBpdGVyLT5uZXh0KSB7CisgICAgICAgICAgICAgICAgZ19hc3NlcnQoV0VCS0lU
X0lTX0JBQ0tfRk9SV0FSRF9MSVNUX0lURU0oaXRlci0+ZGF0YSkpOworICAgICAgICAgICAgICAg
IGlmICh0ZXN0LT5tX2V4cGVjdGVkUmVtb3ZlZEl0ZW1zKQorICAgICAgICAgICAgICAgICAgICBn
X2Fzc2VydChnX2xpc3RfZmluZCh0ZXN0LT5tX2V4cGVjdGVkUmVtb3ZlZEl0ZW1zLCBpdGVyLT5k
YXRhKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBnX2Fz
c2VydCghcmVtb3ZlZEl0ZW1zKTsKKyAgICB9CisKKyAgICBCYWNrRm9yd2FyZExpc3RUZXN0KCkK
KyAgICAgICAgOiBtX2xpc3Qod2Via2l0X3dlYl92aWV3X2dldF9iYWNrX2ZvcndhcmRfbGlzdCht
X3dlYlZpZXcpKQorICAgICAgICAsIG1fY2hhbmdlZEZsYWdzKDApCisgICAgICAgICwgbV9oYXND
aGFuZ2VkKGZhbHNlKQorICAgICAgICAsIG1fZXhwZWN0ZWRSZW1vdmVkSXRlbXMoMCkKKyAgICB7
CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9saXN0LCAiY2hhbmdlZCIsIEdfQ0FMTEJBQ0so
YmFja0ZvcndhcmRMaXN0Q2hhbmdlZCksIHRoaXMpOworICAgICAgICBhc3NlcnRPYmplY3RJc0Rl
bGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKG1fbGlzdCkpOworICAgIH0KKworICAgIH5C
YWNrRm9yd2FyZExpc3RUZXN0KCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rp
c2Nvbm5lY3RfbWF0Y2hlZChtX2xpc3QsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAs
IHRoaXMpOworICAgIH0KKworICAgIHZvaWQgd2FpdFVudGlsTG9hZEZpbmlzaGVkKCkKKyAgICB7
CisgICAgICAgIG1faGFzQ2hhbmdlZCA9IGZhbHNlOworICAgICAgICBXZWJWaWV3VGVzdDo6d2Fp
dFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgICAgIGdfYXNzZXJ0KG1faGFzQ2hhbmdlZCk7Cisg
ICAgfQorCisgICAgdm9pZCB3YWl0VW50aWxMb2FkRmluaXNoZWRBbmRDaGVja1JlbW92ZWRJdGVt
cyhHTGlzdCogcmVtb3ZlZEl0ZW1zKQorICAgIHsKKyAgICAgICAgbV9leHBlY3RlZFJlbW92ZWRJ
dGVtcyA9IHJlbW92ZWRJdGVtczsKKyAgICAgICAgd2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Cisg
ICAgICAgIG1fZXhwZWN0ZWRSZW1vdmVkSXRlbXMgPSAwOworICAgIH0KKworICAgIFdlYktpdEJh
Y2tGb3J3YXJkTGlzdCogbV9saXN0OworICAgIHVuc2lnbmVkIGxvbmcgbV9jaGFuZ2VkRmxhZ3M7
CisgICAgYm9vbCBtX2hhc0NoYW5nZWQ7CisgICAgR0xpc3QqIG1fZXhwZWN0ZWRSZW1vdmVkSXRl
bXM7Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0QmFja0ZvcndhcmRMaXN0TmF2aWdhdGlvbihCYWNr
Rm9yd2FyZExpc3RUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIFdlYktpdEJhY2tG
b3J3YXJkTGlzdEl0ZW0qIGl0ZW1zWzFdOworCisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmll
d19jYW5fZ29fYmFjayh0ZXN0LT5tX3dlYlZpZXcpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dl
Yl92aWV3X2Nhbl9nb19mb3J3YXJkKHRlc3QtPm1fd2ViVmlldykpOworCisgICAgZ19hc3NlcnRf
Y21wdWludCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2xlbmd0aCh0ZXN0LT5tX2xpc3Qp
LCA9PSwgMCk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3Vy
cmVudF9pdGVtKHRlc3QtPm1fbGlzdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3
YXJkX2xpc3RfZ2V0X2JhY2tfaXRlbSh0ZXN0LT5tX2xpc3QpKTsKKyAgICBnX2Fzc2VydCghd2Vi
a2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2l0ZW0odGVzdC0+bV9saXN0KSk7Cisg
ICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tJdGVtSW5kZXgodGVzdC0+bV9saXN0KTsKKyAg
ICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3QodGVzdC0+
bV9saXN0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9y
d2FyZF9saXN0KHRlc3QtPm1fbGlzdCkpOworCisgICAgQ1N0cmluZyB1cmlQYWdlMSA9IGtTZXJ2
ZXItPmdldFVSSUZvclBhdGgoIi9QYWdlMSIpOworICAgIHRlc3QtPm1fY2hhbmdlZEZsYWdzID0g
QmFja0ZvcndhcmRMaXN0VGVzdDo6Q3VycmVudEl0ZW0gfCBCYWNrRm9yd2FyZExpc3RUZXN0OjpB
ZGRlZEl0ZW07CisgICAgdGVzdC0+bG9hZFVSSSh1cmlQYWdlMS5kYXRhKCkpOworICAgIHRlc3Qt
PndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmll
d19jYW5fZ29fYmFjayh0ZXN0LT5tX3dlYlZpZXcpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dl
Yl92aWV3X2Nhbl9nb19mb3J3YXJkKHRlc3QtPm1fd2ViVmlldykpOworCisgICAgZ19hc3NlcnRf
Y21wdWludCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2xlbmd0aCh0ZXN0LT5tX2xpc3Qp
LCA9PSwgMSk7CisgICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSogaXRlbVBhZ2UxID0gd2Vi
a2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0odGVzdC0+bV9saXN0KTsKKyAg
ICBCYWNrRm9yd2FyZExpc3RUZXN0OjpjaGVja0l0ZW0oaXRlbVBhZ2UxLCAiUGFnZTEiLCB1cmlQ
YWdlMS5kYXRhKCksIHVyaVBhZ2UxLmRhdGEoKSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNr
X2ZvcndhcmRfbGlzdF9nZXRfYmFja19pdGVtKHRlc3QtPm1fbGlzdCkpOworICAgIGdfYXNzZXJ0
KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRlbSh0ZXN0LT5tX2xpc3Qp
KTsKKyAgICBCYWNrRm9yd2FyZExpc3RUZXN0OjpjaGVja0l0ZW1JbmRleCh0ZXN0LT5tX2xpc3Qp
OworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGlzdCh0
ZXN0LT5tX2xpc3QpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dl
dF9mb3J3YXJkX2xpc3QodGVzdC0+bV9saXN0KSk7CisKKyAgICBDU3RyaW5nIHVyaVBhZ2UyID0g
a1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL1BhZ2UyIik7CisgICAgdGVzdC0+bV9jaGFuZ2VkRmxh
Z3MgPSBCYWNrRm9yd2FyZExpc3RUZXN0OjpDdXJyZW50SXRlbSB8IEJhY2tGb3J3YXJkTGlzdFRl
c3Q6OkFkZGVkSXRlbTsKKyAgICB0ZXN0LT5sb2FkVVJJKHVyaVBhZ2UyLmRhdGEoKSk7CisgICAg
dGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2Vi
X3ZpZXdfY2FuX2dvX2JhY2sodGVzdC0+bV93ZWJWaWV3KSk7CisgICAgZ19hc3NlcnQoIXdlYmtp
dF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh0ZXN0LT5tX3dlYlZpZXcpKTsKKworICAgIGdfYXNz
ZXJ0X2NtcHVpbnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9sZW5ndGgodGVzdC0+bV9s
aXN0KSwgPT0sIDIpOworICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW1QYWdlMiA9
IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKHRlc3QtPm1fbGlzdCk7
CisgICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tJdGVtKGl0ZW1QYWdlMiwgIlBhZ2UyIiwg
dXJpUGFnZTIuZGF0YSgpLCB1cmlQYWdlMi5kYXRhKCkpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9i
YWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19pdGVtKHRlc3QtPm1fbGlzdCkgPT0gaXRlbVBhZ2Ux
KTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2l0
ZW0odGVzdC0+bV9saXN0KSk7CisgICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tJdGVtSW5k
ZXgodGVzdC0+bV9saXN0KTsKKyAgICBpdGVtc1swXSA9IGl0ZW1QYWdlMTsKKyAgICBCYWNrRm9y
d2FyZExpc3RUZXN0OjpjaGVja0xpc3QodGVzdC0+bV9saXN0LCBCYWNrRm9yd2FyZExpc3RUZXN0
OjpCYWNrd2FyZCwgaXRlbXMsIDEpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJk
X2xpc3RfZ2V0X2ZvcndhcmRfbGlzdCh0ZXN0LT5tX2xpc3QpKTsKKworICAgIHRlc3QtPm1fY2hh
bmdlZEZsYWdzID0gQmFja0ZvcndhcmRMaXN0VGVzdDo6Q3VycmVudEl0ZW07CisgICAgdGVzdC0+
Z29CYWNrKCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fz
c2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrKHRlc3QtPm1fd2ViVmlldykpOworICAg
IGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh0ZXN0LT5tX3dlYlZpZXcp
KTsKKworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9s
ZW5ndGgodGVzdC0+bV9saXN0KSwgPT0sIDIpOworICAgIGdfYXNzZXJ0KGl0ZW1QYWdlMSA9PSB3
ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh0ZXN0LT5tX2xpc3QpKTsK
KyAgICBCYWNrRm9yd2FyZExpc3RUZXN0OjpjaGVja0l0ZW0od2Via2l0X2JhY2tfZm9yd2FyZF9s
aXN0X2dldF9jdXJyZW50X2l0ZW0odGVzdC0+bV9saXN0KSwgIlBhZ2UxIiwgdXJpUGFnZTEuZGF0
YSgpLCB1cmlQYWdlMS5kYXRhKCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJk
X2xpc3RfZ2V0X2JhY2tfaXRlbSh0ZXN0LT5tX2xpc3QpKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRf
YmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRlbSh0ZXN0LT5tX2xpc3QpID09IGl0ZW1Q
YWdlMik7CisgICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tJdGVtSW5kZXgodGVzdC0+bV9s
aXN0KTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xp
c3QodGVzdC0+bV9saXN0KSk7CisgICAgaXRlbXNbMF0gPSBpdGVtUGFnZTI7CisgICAgQmFja0Zv
cndhcmRMaXN0VGVzdDo6Y2hlY2tMaXN0KHRlc3QtPm1fbGlzdCwgQmFja0ZvcndhcmRMaXN0VGVz
dDo6Rm9yd2FyZCwgaXRlbXMsIDEpOworCisgICAgdGVzdC0+bV9jaGFuZ2VkRmxhZ3MgPSBCYWNr
Rm9yd2FyZExpc3RUZXN0OjpDdXJyZW50SXRlbTsKKyAgICB0ZXN0LT5nb0ZvcndhcmQoKTsKKyAg
ICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHdlYmtpdF93
ZWJfdmlld19jYW5fZ29fYmFjayh0ZXN0LT5tX3dlYlZpZXcpKTsKKyAgICBnX2Fzc2VydCghd2Vi
a2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHRlc3QtPm1fd2ViVmlldykpOworCisgICAgZ19h
c3NlcnRfY21wdWludCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2xlbmd0aCh0ZXN0LT5t
X2xpc3QpLCA9PSwgMik7CisgICAgZ19hc3NlcnQoaXRlbVBhZ2UyID09IHdlYmtpdF9iYWNrX2Zv
cndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKHRlc3QtPm1fbGlzdCkpOworICAgIEJhY2tGb3J3
YXJkTGlzdFRlc3Q6OmNoZWNrSXRlbSh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJl
bnRfaXRlbSh0ZXN0LT5tX2xpc3QpLCAiUGFnZTIiLCB1cmlQYWdlMi5kYXRhKCksIHVyaVBhZ2Uy
LmRhdGEoKSk7CisgICAgZ19hc3NlcnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNr
X2l0ZW0odGVzdC0+bV9saXN0KSA9PSBpdGVtUGFnZTEpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRf
YmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRlbSh0ZXN0LT5tX2xpc3QpKTsKKyAgICBC
YWNrRm9yd2FyZExpc3RUZXN0OjpjaGVja0l0ZW1JbmRleCh0ZXN0LT5tX2xpc3QpOworICAgIGl0
ZW1zWzBdID0gaXRlbVBhZ2UxOworICAgIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OmNoZWNrTGlzdCh0
ZXN0LT5tX2xpc3QsIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OkJhY2t3YXJkLCBpdGVtcywgMSk7Cisg
ICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0KHRl
c3QtPm1fbGlzdCkpOworCisgICAgdGVzdC0+bV9jaGFuZ2VkRmxhZ3MgPSBCYWNrRm9yd2FyZExp
c3RUZXN0OjpDdXJyZW50SXRlbTsKKyAgICB0ZXN0LT5nb1RvQmFja0ZvcndhcmRMaXN0SXRlbShp
dGVtUGFnZTEpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgZ19h
c3NlcnQoaXRlbVBhZ2UxID09IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9p
dGVtKHRlc3QtPm1fbGlzdCkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0QmFja0ZvcndhcmRMaXN0
TGltaXRBbmRDYWNoZShCYWNrRm9yd2FyZExpc3RUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQor
eworICAgIGZvciAoaW50IGkgPSAwOyBpIDwga0JhY2tGb3J3YXJkTGlzdExpbWl0OyBpKyspIHsK
KyAgICAgICAgR093blB0cjxjaGFyPiBwYXRoKGdfc3RyZHVwX3ByaW50ZigiL1BhZ2UlZCIsIGkp
KTsKKyAgICAgICAgdGVzdC0+bV9jaGFuZ2VkRmxhZ3MgPSBCYWNrRm9yd2FyZExpc3RUZXN0OjpD
dXJyZW50SXRlbSB8IEJhY2tGb3J3YXJkTGlzdFRlc3Q6OkFkZGVkSXRlbTsKKyAgICAgICAgdGVz
dC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKHBhdGguZ2V0KCkpLmRhdGEoKSk7Cisg
ICAgICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIH0KKworICAgIGdfYXNz
ZXJ0X2NtcHVpbnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9sZW5ndGgodGVzdC0+bV9s
aXN0KSwgPT0sIGtCYWNrRm9yd2FyZExpc3RMaW1pdCk7CisgICAgV2ViS2l0QmFja0ZvcndhcmRM
aXN0SXRlbSogaXRlbVBhZ2VGaXJzdCA9IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbnRo
X2l0ZW0odGVzdC0+bV9saXN0LCAtKGtCYWNrRm9yd2FyZExpc3RMaW1pdCAtIDEpKTsKKyAgICBH
T3duUHRyPEdMaXN0PiByZW1vdmVkSXRlbXMoZ19saXN0X3ByZXBlbmQoMCwgaXRlbVBhZ2VGaXJz
dCkpOworCisgICAgR093blB0cjxjaGFyPiBwYXRoKGdfc3RyZHVwX3ByaW50ZigiL1BhZ2UlZCIs
IGtCYWNrRm9yd2FyZExpc3RMaW1pdCkpOworICAgIHRlc3QtPm1fY2hhbmdlZEZsYWdzID0gQmFj
a0ZvcndhcmRMaXN0VGVzdDo6Q3VycmVudEl0ZW0gfCBCYWNrRm9yd2FyZExpc3RUZXN0OjpBZGRl
ZEl0ZW0gfCBCYWNrRm9yd2FyZExpc3RUZXN0OjpSZW1vdmVkSXRlbXM7CisgICAgdGVzdC0+bG9h
ZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKHBhdGguZ2V0KCkpLmRhdGEoKSk7CisgICAgdGVz
dC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkQW5kQ2hlY2tSZW1vdmVkSXRlbXMocmVtb3ZlZEl0ZW1z
LmdldCgpKTsKKworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0
X2dldF9sZW5ndGgodGVzdC0+bV9saXN0KSwgPT0sIGtCYWNrRm9yd2FyZExpc3RMaW1pdCk7Cit9
CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICBrU2VydmVyID0gbmV3IFdlYktpdFRlc3RTZXJ2
ZXIoKTsKKyAgICBrU2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2spOworCisgICAgQmFja0Zvcndh
cmRMaXN0VGVzdDo6YWRkKCJCYWNrRm9yd2FyZExpc3QiLCAibmF2aWdhdGlvbiIsIHRlc3RCYWNr
Rm9yd2FyZExpc3ROYXZpZ2F0aW9uKTsKKyAgICBCYWNrRm9yd2FyZExpc3RUZXN0OjphZGQoIkJh
Y2tGb3J3YXJkTGlzdCIsICJsaXN0LWxpbWl0LWFuZC1jYWNoZSIsIHRlc3RCYWNrRm9yd2FyZExp
c3RMaW1pdEFuZENhY2hlKTsKK30KKwordm9pZCBhZnRlckFsbCgpCit7CisgICAgZGVsZXRlIGtT
ZXJ2ZXI7Cit9CisKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Mkd0ay9UZXN0Q29udGV4dE1lbnUuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXQyR3RrL1Rlc3RDb250ZXh0TWVudS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uYTIzMjliOQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Mkd0ay9UZXN0Q29udGV4dE1lbnUuY3BwCkBAIC0wLDAgKzEsODY3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+
CisKK2NsYXNzIENvbnRleHRNZW51VGVzdDogcHVibGljIFdlYlZpZXdUZXN0IHsKK3B1YmxpYzoK
KyAgICBlbnVtIENvbnRleHRNZW51SXRlbVN0YXRlRmxhZ3MgeworICAgICAgICBWaXNpYmxlID0g
MSA8PCAwLAorICAgICAgICBFbmFibGVkID0gMSA8PCAxLAorICAgICAgICBDaGVja2VkID0gMSA8
PCAyCisgICAgfTsKKworICAgIHZvaWQgY2hlY2tDb250ZXh0TWVudUV2ZW50KEdka0V2ZW50KiBl
dmVudCkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KGV2ZW50KTsKKyAgICAgICAgZ19hc3NlcnRf
Y21waW50KGV2ZW50LT50eXBlLCA9PSwgR0RLX0JVVFRPTl9QUkVTUyk7CisgICAgICAgIGdfYXNz
ZXJ0X2NtcGludChldmVudC0+YnV0dG9uLmJ1dHRvbiwgPT0sIDMpOworICAgICAgICBnX2Fzc2Vy
dF9jbXBpbnQoZXZlbnQtPmJ1dHRvbi54LCA9PSwgbV9tZW51UG9zaXRpb25YKTsKKyAgICAgICAg
Z19hc3NlcnRfY21waW50KGV2ZW50LT5idXR0b24ueSwgPT0sIG1fbWVudVBvc2l0aW9uWSk7Cisg
ICAgfQorCisgICAgc3RhdGljIGdib29sZWFuIGNvbnRleHRNZW51Q2FsbGJhY2soV2ViS2l0V2Vi
Vmlldyogd2ViVmlldywgV2ViS2l0Q29udGV4dE1lbnUqIGNvbnRleHRNZW51LCBHZGtFdmVudCog
ZXZlbnQsIFdlYktpdEhpdFRlc3RSZXN1bHQqIGhpdFRlc3RSZXN1bHQsIENvbnRleHRNZW51VGVz
dCogdGVzdCkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19DT05URVhUX01FTlUo
Y29udGV4dE1lbnUpKTsKKyAgICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRl
c3RGaW5pc2hlcyhHX09CSkVDVChjb250ZXh0TWVudSkpOworICAgICAgICB0ZXN0LT5jaGVja0Nv
bnRleHRNZW51RXZlbnQoZXZlbnQpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfSElUX1RF
U1RfUkVTVUxUKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNE
ZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChoaXRUZXN0UmVzdWx0KSk7CisKKyAgICAg
ICAgcmV0dXJuIHRlc3QtPmNvbnRleHRNZW51KGNvbnRleHRNZW51LCBldmVudCwgaGl0VGVzdFJl
c3VsdCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgY29udGV4dE1lbnVEaXNtaXNzZWRDYWxs
YmFjayhXZWJLaXRXZWJWaWV3KiwgQ29udGV4dE1lbnVUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAg
ICAgdGVzdC0+Y29udGV4dE1lbnVEaXNtaXNzZWQoKTsKKyAgICB9CisKKyAgICBDb250ZXh0TWVu
dVRlc3QoKQorICAgICAgICA6IG1fbWVudVBvc2l0aW9uWCgwKQorICAgICAgICAsIG1fbWVudVBv
c2l0aW9uWSgwKQorICAgIHsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJj
b250ZXh0LW1lbnUiLCBHX0NBTExCQUNLKGNvbnRleHRNZW51Q2FsbGJhY2spLCB0aGlzKTsKKyAg
ICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJjb250ZXh0LW1lbnUtZGlzbWlzc2Vk
IiwgR19DQUxMQkFDSyhjb250ZXh0TWVudURpc21pc3NlZENhbGxiYWNrKSwgdGhpcyk7CisgICAg
fQorCisgICAgfkNvbnRleHRNZW51VGVzdCgpCisgICAgeworICAgICAgICBnX3NpZ25hbF9oYW5k
bGVyc19kaXNjb25uZWN0X21hdGNoZWQobV93ZWJWaWV3LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAw
LCAwLCAwLCAwLCB0aGlzKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgY29udGV4dE1lbnUo
V2ViS2l0Q29udGV4dE1lbnUqLCBHZGtFdmVudCosIFdlYktpdEhpdFRlc3RSZXN1bHQqKSA9IDA7
CisKKyAgICB2aXJ0dWFsIHZvaWQgY29udGV4dE1lbnVEaXNtaXNzZWQoKQorICAgIHsKKyAgICAg
ICAgcXVpdE1haW5Mb29wKCk7CisgICAgfQorCisgICAgR3RrTWVudSogZ2V0UG9wdXBNZW51KCkK
KyAgICB7CisgICAgICAgIEdPd25QdHI8R0xpc3Q+IHRvcGxldmVscyhndGtfd2luZG93X2xpc3Rf
dG9wbGV2ZWxzKCkpOworICAgICAgICBmb3IgKEdMaXN0KiBpdGVyID0gdG9wbGV2ZWxzLmdldCgp
OyBpdGVyOyBpdGVyID0gZ19saXN0X25leHQoaXRlcikpIHsKKyAgICAgICAgICAgIGlmICghR1RL
X0lTX1dJTkRPVyhpdGVyLT5kYXRhKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICAgICAgR3RrV2lkZ2V0KiBjaGlsZCA9IGd0a19iaW5fZ2V0X2NoaWxkKEdUS19CSU4oaXRl
ci0+ZGF0YSkpOworICAgICAgICAgICAgaWYgKCFHVEtfSVNfTUVOVShjaGlsZCkpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlmIChndGtfbWVudV9nZXRfYXR0YWNo
X3dpZGdldChHVEtfTUVOVShjaGlsZCkpID09IEdUS19XSURHRVQobV93ZWJWaWV3KSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gR1RLX01FTlUoY2hpbGQpOworICAgICAgICB9CisgICAgICAgIGdf
YXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGJv
b2wgc2hvdWxkU2hvd0lucHV0TWV0aG9kc01lbnUoKQorICAgIHsKKyAgICAgICAgR3RrU2V0dGlu
Z3MqIHNldHRpbmdzID0gZ3RrX3dpZGdldF9nZXRfc2V0dGluZ3MoR1RLX1dJREdFVChtX3dlYlZp
ZXcpKTsKKyAgICAgICAgaWYgKCFzZXR0aW5ncykKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgICAgIGdib29sZWFuIHNob3dJbnB1dE1ldGhvZE1lbnU7CisgICAgICAgIGdfb2JqZWN0
X2dldChzZXR0aW5ncywgImd0ay1zaG93LWlucHV0LW1ldGhvZC1tZW51IiwgJnNob3dJbnB1dE1l
dGhvZE1lbnUsIE5VTEwpOworICAgICAgICByZXR1cm4gc2hvd0lucHV0TWV0aG9kTWVudTsKKyAg
ICB9CisKKyAgICB2b2lkIGNoZWNrQWN0aW9uU3RhdGUoR3RrQWN0aW9uKiBhY3Rpb24sIHVuc2ln
bmVkIHN0YXRlKQorICAgIHsKKyAgICAgICAgaWYgKHN0YXRlICYgVmlzaWJsZSkKKyAgICAgICAg
ICAgIGdfYXNzZXJ0KGd0a19hY3Rpb25fZ2V0X3Zpc2libGUoYWN0aW9uKSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGdfYXNzZXJ0KCFndGtfYWN0aW9uX2dldF92aXNpYmxlKGFjdGlvbikp
OworCisgICAgICAgIGlmIChzdGF0ZSAmIEVuYWJsZWQpCisgICAgICAgICAgICBnX2Fzc2VydChn
dGtfYWN0aW9uX2dldF9zZW5zaXRpdmUoYWN0aW9uKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGdfYXNzZXJ0KCFndGtfYWN0aW9uX2dldF9zZW5zaXRpdmUoYWN0aW9uKSk7CisKKyAgICAg
ICAgaWYgKEdUS19JU19UT0dHTEVfQUNUSU9OKGFjdGlvbikpIHsKKyAgICAgICAgICAgIGlmIChz
dGF0ZSAmIENoZWNrZWQpCisgICAgICAgICAgICAgICAgZ19hc3NlcnQoZ3RrX3RvZ2dsZV9hY3Rp
b25fZ2V0X2FjdGl2ZShHVEtfVE9HR0xFX0FDVElPTihhY3Rpb24pKSk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgZ19hc3NlcnQoIWd0a190b2dnbGVfYWN0aW9uX2dldF9hY3Rp
dmUoR1RLX1RPR0dMRV9BQ1RJT04oYWN0aW9uKSkpOworICAgICAgICB9CisgICAgfQorCisgICAg
R0xpc3QqIGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChHTGlzdCogaXRl
bXMsIFdlYktpdENvbnRleHRNZW51QWN0aW9uIHN0b2NrQWN0aW9uLCB1bnNpZ25lZCBzdGF0ZSkK
KyAgICB7CisgICAgICAgIGdfYXNzZXJ0KGl0ZW1zKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lU
X0lTX0NPTlRFWFRfTUVOVV9JVEVNKGl0ZW1zLT5kYXRhKSk7CisKKyAgICAgICAgV2ViS2l0Q29u
dGV4dE1lbnVJdGVtKiBpdGVtID0gV0VCS0lUX0NPTlRFWFRfTUVOVV9JVEVNKGl0ZW1zLT5kYXRh
KTsKKyAgICAgICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVD
VChpdGVtKSk7CisKKyAgICAgICAgR3RrQWN0aW9uKiBhY3Rpb24gPSB3ZWJraXRfY29udGV4dF9t
ZW51X2l0ZW1fZ2V0X2FjdGlvbihpdGVtKTsKKyAgICAgICAgZ19hc3NlcnQoR1RLX0lTX0FDVElP
TihhY3Rpb24pKTsKKworICAgICAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X2NvbnRleHRfbWVu
dV9pdGVtX2dldF9zdG9ja19hY3Rpb24oaXRlbSksID09LCBzdG9ja0FjdGlvbik7CisKKyAgICAg
ICAgY2hlY2tBY3Rpb25TdGF0ZShhY3Rpb24sIHN0YXRlKTsKKworICAgICAgICByZXR1cm4gZ19s
aXN0X25leHQoaXRlbXMpOworICAgIH0KKworICAgIEdMaXN0KiBjaGVja0N1cnJlbnRJdGVtSXND
dXN0b21BY3Rpb25BbmRHZXROZXh0KEdMaXN0KiBpdGVtcywgY29uc3QgY2hhciogbGFiZWwsIHVu
c2lnbmVkIHN0YXRlKQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQoaXRlbXMpOworICAgICAgICBn
X2Fzc2VydChXRUJLSVRfSVNfQ09OVEVYVF9NRU5VX0lURU0oaXRlbXMtPmRhdGEpKTsKKworICAg
ICAgICBXZWJLaXRDb250ZXh0TWVudUl0ZW0qIGl0ZW0gPSBXRUJLSVRfQ09OVEVYVF9NRU5VX0lU
RU0oaXRlbXMtPmRhdGEpOworICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZp
bmlzaGVzKEdfT0JKRUNUKGl0ZW0pKTsKKworICAgICAgICBHdGtBY3Rpb24qIGFjdGlvbiA9IHdl
YmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRfYWN0aW9uKGl0ZW0pOworICAgICAgICBnX2Fzc2Vy
dChHVEtfSVNfQUNUSU9OKGFjdGlvbikpOworCisgICAgICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJr
aXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X3N0b2NrX2FjdGlvbihpdGVtKSwgPT0sIFdFQktJVF9D
T05URVhUX01FTlVfQUNUSU9OX0NVU1RPTSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cihndGtf
YWN0aW9uX2dldF9sYWJlbChhY3Rpb24pLCA9PSwgbGFiZWwpOworCisgICAgICAgIGNoZWNrQWN0
aW9uU3RhdGUoYWN0aW9uLCBzdGF0ZSk7CisKKyAgICAgICAgcmV0dXJuIGdfbGlzdF9uZXh0KGl0
ZW1zKTsKKyAgICB9CisKKyAgICBHTGlzdCogY2hlY2tDdXJyZW50SXRlbUlzU3ViTWVudUFuZEdl
dE5leHQoR0xpc3QqIGl0ZW1zLCBjb25zdCBjaGFyKiBsYWJlbCwgdW5zaWduZWQgc3RhdGUsIEdM
aXN0Kiogc3ViTWVudUl0ZXIpCisgICAgeworICAgICAgICBnX2Fzc2VydChpdGVtcyk7CisgICAg
ICAgIGdfYXNzZXJ0KFdFQktJVF9JU19DT05URVhUX01FTlVfSVRFTShpdGVtcy0+ZGF0YSkpOwor
CisgICAgICAgIFdlYktpdENvbnRleHRNZW51SXRlbSogaXRlbSA9IFdFQktJVF9DT05URVhUX01F
TlVfSVRFTShpdGVtcy0+ZGF0YSk7CisgICAgICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5U
ZXN0RmluaXNoZXMoR19PQkpFQ1QoaXRlbSkpOworCisgICAgICAgIEd0a0FjdGlvbiogYWN0aW9u
ID0gd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9hY3Rpb24oaXRlbSk7CisgICAgICAgIGdf
YXNzZXJ0KEdUS19JU19BQ1RJT04oYWN0aW9uKSk7CisKKyAgICAgICAgZ19hc3NlcnRfY21wc3Ry
KGd0a19hY3Rpb25fZ2V0X2xhYmVsKGFjdGlvbiksID09LCBsYWJlbCk7CisgICAgICAgIGNoZWNr
QWN0aW9uU3RhdGUoYWN0aW9uLCBzdGF0ZSk7CisKKyAgICAgICAgV2ViS2l0Q29udGV4dE1lbnUq
IHN1Yk1lbnUgPSB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X3N1Ym1lbnUoaXRlbSk7Cisg
ICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19DT05URVhUX01FTlUoc3ViTWVudSkpOworICAgICAg
ICBpZiAoc3ViTWVudUl0ZXIpCisgICAgICAgICAgICAqc3ViTWVudUl0ZXIgPSB3ZWJraXRfY29u
dGV4dF9tZW51X2dldF9pdGVtcyhzdWJNZW51KTsKKworICAgICAgICByZXR1cm4gZ19saXN0X25l
eHQoaXRlbXMpOworICAgIH0KKworICAgIEdMaXN0KiBjaGVja0N1cnJlbnRJdGVtSXNTZXBhcmF0
b3JBbmRHZXROZXh0KEdMaXN0KiBpdGVtcykKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KGl0ZW1z
KTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX0NPTlRFWFRfTUVOVV9JVEVNKGl0ZW1zLT5k
YXRhKSk7CisKKyAgICAgICAgV2ViS2l0Q29udGV4dE1lbnVJdGVtKiBpdGVtID0gV0VCS0lUX0NP
TlRFWFRfTUVOVV9JVEVNKGl0ZW1zLT5kYXRhKTsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X2Nv
bnRleHRfbWVudV9pdGVtX2lzX3NlcGFyYXRvcihpdGVtKSk7CisKKyAgICAgICAgcmV0dXJuIGdf
bGlzdF9uZXh0KGl0ZW1zKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gZG9SaWdodENs
aWNrSWRsZUNhbGxiYWNrKENvbnRleHRNZW51VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRl
c3QtPmNsaWNrTW91c2VCdXR0b24odGVzdC0+bV9tZW51UG9zaXRpb25YLCB0ZXN0LT5tX21lbnVQ
b3NpdGlvblksIDMpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgdm9pZCBz
aG93Q29udGV4dE1lbnVBdFBvc2l0aW9uQW5kV2FpdFVudGlsRmluaXNoZWQoaW50IHgsIGludCB5
KQorICAgIHsKKyAgICAgICAgbV9tZW51UG9zaXRpb25YID0geDsKKyAgICAgICAgbV9tZW51UG9z
aXRpb25ZID0geTsKKyAgICAgICAgZ19pZGxlX2FkZChyZWludGVycHJldF9jYXN0PEdTb3VyY2VG
dW5jPihkb1JpZ2h0Q2xpY2tJZGxlQ2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgZ19tYWluX2xv
b3BfcnVuKG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIHZvaWQgc2hvd0NvbnRleHRNZW51QW5k
V2FpdFVudGlsRmluaXNoZWQoKQorICAgIHsKKyAgICAgICAgc2hvd0NvbnRleHRNZW51QXRQb3Np
dGlvbkFuZFdhaXRVbnRpbEZpbmlzaGVkKDAsIDApOworICAgIH0KKworICAgIHN0YXRpYyBnYm9v
bGVhbiBzaW11bGF0ZUVzY0tleUlkbGVDYWxsYmFjayhDb250ZXh0TWVudVRlc3QqIHRlc3QpCisg
ICAgeworICAgICAgICB0ZXN0LT5rZXlTdHJva2UoR0RLX0tFWV9Fc2NhcGUpOworICAgICAgICBy
ZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgdm9pZCBkaXNtaXNzQ29udGV4dE1lbnVBbmRXYWl0
VW50aWxGaW5pc2hlZCgpCisgICAgeworICAgICAgICBnX2lkbGVfYWRkKHJlaW50ZXJwcmV0X2Nh
c3Q8R1NvdXJjZUZ1bmM+KHNpbXVsYXRlRXNjS2V5SWRsZUNhbGxiYWNrKSwgdGhpcyk7CisgICAg
ICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBkb3VibGUgbV9t
ZW51UG9zaXRpb25YOworICAgIGRvdWJsZSBtX21lbnVQb3NpdGlvblk7Cit9OworCitjbGFzcyBD
b250ZXh0TWVudURlZmF1bHRUZXN0OiBwdWJsaWMgQ29udGV4dE1lbnVUZXN0IHsKK3B1YmxpYzoK
KyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKENvbnRleHRNZW51RGVmYXVsdFRlc3QpOworCisg
ICAgZW51bSBEZWZhdWx0TWVudVR5cGUgeworICAgICAgICBOYXZpZ2F0aW9uLAorICAgICAgICBM
aW5rLAorICAgICAgICBJbWFnZSwKKyAgICAgICAgTGlua0ltYWdlLAorICAgICAgICBWaWRlbywK
KyAgICAgICAgQXVkaW8sCisgICAgICAgIEVkaXRhYmxlCisgICAgfTsKKworICAgIENvbnRleHRN
ZW51RGVmYXVsdFRlc3QoKQorICAgICAgICA6IG1fZXhwZWN0ZWRNZW51VHlwZShOYXZpZ2F0aW9u
KQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGNvbnRleHRNZW51KFdlYktpdENvbnRleHRNZW51
KiBjb250ZXh0TWVudSwgR2RrRXZlbnQqIGV2ZW50LCBXZWJLaXRIaXRUZXN0UmVzdWx0KiBoaXRU
ZXN0UmVzdWx0KQorICAgIHsKKyAgICAgICAgR0xpc3QqIGl0ZXIgPSB3ZWJraXRfY29udGV4dF9t
ZW51X2dldF9pdGVtcyhjb250ZXh0TWVudSk7CisKKyAgICAgICAgc3dpdGNoIChtX2V4cGVjdGVk
TWVudVR5cGUpIHsKKyAgICAgICAgY2FzZSBOYXZpZ2F0aW9uOgorICAgICAgICAgICAgZ19hc3Nl
cnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RSZXN1bHQp
KTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRf
aXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkpOworICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9o
aXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7CisgICAgICAg
ICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRhYmxl
KGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNT
dG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fR09f
QkFDSywgVmlzaWJsZSk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3Rv
Y2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0dPX0ZP
UldBUkQsIFZpc2libGUpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0
b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9TVE9Q
LCBWaXNpYmxlKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0Fj
dGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fUkVMT0FELCBW
aXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMaW5r
OgorICAgICAgICAgICAgZ19hc3NlcnQod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lz
X2xpbmsoaGl0VGVzdFJlc3VsdCkpOworICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRf
dGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0KSk7CisgICAgICAgICAg
ICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhKGhpdFRl
c3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0
X2NvbnRleHRfaXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkpOworICAgICAgICAgICAgaXRlciA9
IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09O
VEVYVF9NRU5VX0FDVElPTl9PUEVOX0xJTkssIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAg
ICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwg
V0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9MSU5LX0lOX05FV19XSU5ET1csIFZpc2li
bGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9j
a0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRE9XTkxP
QURfTElOS19UT19ESVNLLCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBpdGVyID0g
Y2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05U
RVhUX01FTlVfQUNUSU9OX0NPUFlfTElOS19UT19DTElQQk9BUkQsIFZpc2libGUgfCBFbmFibGVk
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEltYWdlOgorICAgICAgICAgICAg
Z19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RS
ZXN1bHQpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29u
dGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0KSk7CisgICAgICAgICAgICBnX2Fzc2VydCghd2Vi
a2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQpKTsKKyAg
ICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfZWRp
dGFibGUoaGl0VGVzdFJlc3VsdCkpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0
ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
Tl9PUEVOX0lNQUdFX0lOX05FV19XSU5ET1csIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAg
ICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwg
V0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRE9XTkxPQURfSU1BR0VfVE9fRElTSywgVmlzaWJs
ZSB8IEVuYWJsZWQpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2Nr
QWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX0lN
QUdFX1RPX0NMSVBCT0FSRCwgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICAgICAgaXRlciA9
IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09O
VEVYVF9NRU5VX0FDVElPTl9DT1BZX0lNQUdFX1VSTF9UT19DTElQQk9BUkQsIFZpc2libGUgfCBF
bmFibGVkKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExpbmtJbWFnZToKKyAg
ICAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5r
KGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9y
ZXN1bHRfY29udGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0KSk7CisgICAgICAgICAgICBnX2Fz
c2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1
bHQpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRl
eHRfaXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkpOworICAgICAgICAgICAgaXRlciA9IGNoZWNr
Q3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9N
RU5VX0FDVElPTl9PUEVOX0xJTkssIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGl0
ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lU
X0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9MSU5LX0lOX05FV19XSU5ET1csIFZpc2libGUgfCBF
bmFibGVkKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlv
bkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRE9XTkxPQURfTElO
S19UT19ESVNLLCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tD
dXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01F
TlVfQUNUSU9OX0NPUFlfTElOS19UT19DTElQQk9BUkQsIFZpc2libGUgfCBFbmFibGVkKTsKKyAg
ICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTZXBhcmF0b3JBbmRHZXROZXh0KGl0
ZXIpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5k
R2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0lNQUdFX0lOX05F
V19XSU5ET1csIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1
cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVO
VV9BQ1RJT05fRE9XTkxPQURfSU1BR0VfVE9fRElTSywgVmlzaWJsZSB8IEVuYWJsZWQpOworICAg
ICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChp
dGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX0lNQUdFX1RPX0NMSVBCT0FSRCwg
VmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1J
c1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9D
T1BZX0lNQUdFX1VSTF9UT19DTElQQk9BUkQsIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFZpZGVvOgorICAgICAgICAgICAgZ19hc3NlcnQoIXdl
YmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RSZXN1bHQpKTsKKyAg
ICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfaW1h
Z2UoaGl0VGVzdFJlc3VsdCkpOworICAgICAgICAgICAgZ19hc3NlcnQod2Via2l0X2hpdF90ZXN0
X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGdf
YXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfZWRpdGFibGUoaGl0VGVz
dFJlc3VsdCkpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0
aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9NRURJQV9QTEFZ
LCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRl
bUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9O
X01FRElBX01VVEUsIFZpc2libGUpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0
ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
Tl9UT0dHTEVfTUVESUFfQ09OVFJPTFMsIFZpc2libGUgfCBFbmFibGVkIHwgQ2hlY2tlZCk7Cisg
ICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0
KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1RPR0dMRV9NRURJQV9MT09QLCBWaXNp
YmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3Rv
Y2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0VOVEVS
X1ZJREVPX0ZVTExTQ1JFRU4sIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGl0ZXIg
PSBjaGVja0N1cnJlbnRJdGVtSXNTZXBhcmF0b3JBbmRHZXROZXh0KGl0ZXIpOworICAgICAgICAg
ICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX1ZJREVPX0xJTktfVE9fQ0xJUEJPQVJELCBW
aXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlz
U3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX09Q
RU5fVklERU9fSU5fTkVXX1dJTkRPVywgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICAgICAg
aXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9ET1dOTE9BRF9WSURFT19UT19ESVNLLCBWaXNpYmxlIHwg
RW5hYmxlZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBdWRpbzoKKyAgICAg
ICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluayho
aXRUZXN0UmVzdWx0KSk7CisgICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jl
c3VsdF9jb250ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGdfYXNz
ZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0
KSk7CisgICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0
X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1
cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVO
VV9BQ1RJT05fTUVESUFfUExBWSwgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICAgICAgaXRl
ciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRf
Q09OVEVYVF9NRU5VX0FDVElPTl9NRURJQV9NVVRFLCBWaXNpYmxlKTsKKyAgICAgICAgICAgIGl0
ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lU
X0NPTlRFWFRfTUVOVV9BQ1RJT05fVE9HR0xFX01FRElBX0NPTlRST0xTLCBWaXNpYmxlIHwgRW5h
YmxlZCB8IENoZWNrZWQpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0
b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9UT0dH
TEVfTUVESUFfTE9PUCwgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICAgICAgaXRlciA9IGNo
ZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVY
VF9NRU5VX0FDVElPTl9FTlRFUl9WSURFT19GVUxMU0NSRUVOLCBWaXNpYmxlKTsKKyAgICAgICAg
ICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTZXBhcmF0b3JBbmRHZXROZXh0KGl0ZXIpOwor
ICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4
dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX0FVRElPX0xJTktfVE9fQ0xJ
UEJPQVJELCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJy
ZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVf
QUNUSU9OX09QRU5fQVVESU9fSU5fTkVXX1dJTkRPVywgVmlzaWJsZSB8IEVuYWJsZWQpOworICAg
ICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChp
dGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9ET1dOTE9BRF9BVURJT19UT19ESVNLLCBW
aXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFZGl0
YWJsZToKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRl
eHRfaXNfbGluayhoaXRUZXN0UmVzdWx0KSk7CisgICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0
X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAg
ICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbWVkaWEo
aGl0VGVzdFJlc3VsdCkpOworICAgICAgICAgICAgZ19hc3NlcnQod2Via2l0X2hpdF90ZXN0X3Jl
c3VsdF9jb250ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGl0
ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lU
X0NPTlRFWFRfTUVOVV9BQ1RJT05fQ1VULCBWaXNpYmxlKTsKKyAgICAgICAgICAgIGl0ZXIgPSBj
aGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fQ09QWSwgVmlzaWJsZSk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tD
dXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01F
TlVfQUNUSU9OX1BBU1RFLCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBpdGVyID0g
Y2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05U
RVhUX01FTlVfQUNUSU9OX0RFTEVURSwgVmlzaWJsZSk7CisgICAgICAgICAgICBpdGVyID0gY2hl
Y2tDdXJyZW50SXRlbUlzU2VwYXJhdG9yQW5kR2V0TmV4dChpdGVyKTsKKyAgICAgICAgICAgIGl0
ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lU
X0NPTlRFWFRfTUVOVV9BQ1RJT05fU0VMRUNUX0FMTCwgVmlzaWJsZSB8IEVuYWJsZWQpOworICAg
ICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1NlcGFyYXRvckFuZEdldE5leHQoaXRl
cik7CisgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd0lucHV0TWV0aG9kc01lbnUoKSkKKyAgICAg
ICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0
KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0lOUFVUX01FVEhPRFMsIFZpc2libGUg
fCBFbmFibGVkKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0Fj
dGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fVU5JQ09ERSwg
VmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2RldmVsb3Blcl9leHRyYXMod2Via2l0
X3dlYl92aWV3X2dldF9zZXR0aW5ncyhtX3dlYlZpZXcpKSkgeworICAgICAgICAgICAgaXRlciA9
IGNoZWNrQ3VycmVudEl0ZW1Jc1NlcGFyYXRvckFuZEdldE5leHQoaXRlcik7CisgICAgICAgICAg
ICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdF
QktJVF9DT05URVhUX01FTlVfQUNUSU9OX0lOU1BFQ1RfRUxFTUVOVCwgVmlzaWJsZSB8IEVuYWJs
ZWQpOworICAgICAgICB9CisgICAgICAgIGdfYXNzZXJ0KCFpdGVyKTsKKworICAgICAgICBxdWl0
TWFpbkxvb3AoKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBEZWZhdWx0
TWVudVR5cGUgbV9leHBlY3RlZE1lbnVUeXBlOworfTsKKworc3RhdGljIHZvaWQgdGVzdENvbnRl
eHRNZW51RGVmYXVsdE1lbnUoQ29udGV4dE1lbnVEZWZhdWx0VGVzdCogdGVzdCwgZ2NvbnN0cG9p
bnRlcikKK3sKKyAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKKwor
ICAgIGNvbnN0IGNoYXIqIGxpbmtzSFRNTCA9CisgICAgICAgICI8aHRtbD48Ym9keT4iCisgICAg
ICAgICIgPGEgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRvcDoxJyBocmVmPSdo
dHRwOi8vd3d3LndlYmtpdGd0ay5vcmcnIHRpdGxlPSdXZWJLaXRHVEsrIFRpdGxlJz5XZWJLaXRH
VEsrIFdlYnNpdGU8L2E+IgorICAgICAgICAiIDxpbWcgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRl
OyBsZWZ0OjE7IHRvcDoxMCcgc3JjPScweGRlYWRiZWVmJyB3aWR0aD01IGhlaWdodD01PjwvaW1n
PiIKKyAgICAgICAgIiA8YSBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjIw
JyBocmVmPSdodHRwOi8vd3d3LndlYmtpdGd0ay5vcmcvbG9nbycgdGl0bGU9J1dlYktpdEdUSysg
TG9nbyc+PGltZyBzcmM9JzB4ZGVhZGJlZWYnIHdpZHRoPTUgaGVpZ2h0PTU+PC9pbWc+PC9hPiIK
KyAgICAgICAgIiA8aW5wdXQgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRvcDoz
MCcgc2l6ZT0nMTAnPjwvaW5wdXQ+IgorICAgICAgICAiIDx2aWRlbyBzdHlsZT0ncG9zaXRpb246
YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjUwJyB3aWR0aD0nMzAwJyBoZWlnaHQ9JzMwMCcgY29udHJv
bHM9J2NvbnRyb2xzJyBwcmVsb2FkPSdub25lJz48c291cmNlIHNyYz0nbW92aWUub2dnJyB0eXBl
PSd2aWRlby9vZ2cnIC8+PC92aWRlbz4iCisgICAgICAgICIgPGF1ZGlvIHN0eWxlPSdwb3NpdGlv
bjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6NjAnIHdpZHRoPSc1MCcgaGVpZ2h0PScyMCcgY29udHJv
bHM9J2NvbnRyb2xzJyBwcmVsb2FkPSdub25lJz48c291cmNlIHNyYz0ndHJhY2subXAzJyB0eXBl
PSdhdWRpby9tcDMnIC8+PC9hdWRpbz4iCisgICAgICAgICI8L2JvZHk+PC9odG1sPiI7CisgICAg
dGVzdC0+bG9hZEh0bWwobGlua3NIVE1MLCAiZmlsZTovLy8iKTsKKyAgICB0ZXN0LT53YWl0VW50
aWxMb2FkRmluaXNoZWQoKTsKKworICAgIC8vIENvbnRleHQgbWVudSBmb3IgZG9jdW1lbnQuCisg
ICAgdGVzdC0+bV9leHBlY3RlZE1lbnVUeXBlID0gQ29udGV4dE1lbnVEZWZhdWx0VGVzdDo6TmF2
aWdhdGlvbjsKKyAgICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBdFBvc2l0aW9uQW5kV2FpdFVudGls
RmluaXNoZWQoMCwgMCk7CisKKyAgICAvLyBDb250ZXh0IG1lbnUgZm9yIGxpbmsuCisgICAgdGVz
dC0+bV9leHBlY3RlZE1lbnVUeXBlID0gQ29udGV4dE1lbnVEZWZhdWx0VGVzdDo6TGluazsKKyAg
ICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBdFBvc2l0aW9uQW5kV2FpdFVudGlsRmluaXNoZWQoMSwg
MSk7CisKKyAgICAvLyBDb250ZXh0IG1lbnUgZm9yIGltYWdlLgorICAgIHRlc3QtPm1fZXhwZWN0
ZWRNZW51VHlwZSA9IENvbnRleHRNZW51RGVmYXVsdFRlc3Q6OkltYWdlOworICAgIHRlc3QtPnNo
b3dDb250ZXh0TWVudUF0UG9zaXRpb25BbmRXYWl0VW50aWxGaW5pc2hlZCgxLCAxMCk7CisKKyAg
ICAvLyBFbmFibGUgZGV2ZWxvcGVyIGV4dHJhcyBub3csIHNvIHRoYXQgaW5zcGVjdG9yIGVsZW1l
bnQKKyAgICAvLyB3aWxsIGJlIHNob3duIGluIHRoZSBkZWZhdWx0IGNvbnRleHQgbWVudS4KKyAg
ICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9kZXZlbG9wZXJfZXh0cmFzKHdlYmtpdF93ZWJf
dmlld19nZXRfc2V0dGluZ3ModGVzdC0+bV93ZWJWaWV3KSwgVFJVRSk7CisKKyAgICAvLyBDb250
ZXh0IG1lbnUgZm9yIGltYWdlIGxpbmsuCisgICAgdGVzdC0+bV9leHBlY3RlZE1lbnVUeXBlID0g
Q29udGV4dE1lbnVEZWZhdWx0VGVzdDo6TGlua0ltYWdlOworICAgIHRlc3QtPnNob3dDb250ZXh0
TWVudUF0UG9zaXRpb25BbmRXYWl0VW50aWxGaW5pc2hlZCgxLCAyMCk7CisKKyAgICAvLyBDb250
ZXh0IG1lbnUgZm9yIHZpZGVvLgorICAgIHRlc3QtPm1fZXhwZWN0ZWRNZW51VHlwZSA9IENvbnRl
eHRNZW51RGVmYXVsdFRlc3Q6OlZpZGVvOworICAgIHRlc3QtPnNob3dDb250ZXh0TWVudUF0UG9z
aXRpb25BbmRXYWl0VW50aWxGaW5pc2hlZCgxLCA1MCk7CisKKyAgICAvLyBDb250ZXh0IG1lbnUg
Zm9yIGF1ZGlvLgorICAgIHRlc3QtPm1fZXhwZWN0ZWRNZW51VHlwZSA9IENvbnRleHRNZW51RGVm
YXVsdFRlc3Q6OkF1ZGlvOworICAgIHRlc3QtPnNob3dDb250ZXh0TWVudUF0UG9zaXRpb25BbmRX
YWl0VW50aWxGaW5pc2hlZCgxLCA2MCk7CisKKyAgICAvLyBDb250ZXh0IG1lbnUgZm9yIGVkaXRh
YmxlLgorICAgIHRlc3QtPm1fZXhwZWN0ZWRNZW51VHlwZSA9IENvbnRleHRNZW51RGVmYXVsdFRl
c3Q6OkVkaXRhYmxlOworICAgIHRlc3QtPnNob3dDb250ZXh0TWVudUF0UG9zaXRpb25BbmRXYWl0
VW50aWxGaW5pc2hlZCg1LCAzNSk7Cit9CisKK2NsYXNzIENvbnRleHRNZW51Q3VzdG9tVGVzdDog
cHVibGljIENvbnRleHRNZW51VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklY
VFVSRShDb250ZXh0TWVudUN1c3RvbVRlc3QpOworCisgICAgQ29udGV4dE1lbnVDdXN0b21UZXN0
KCkKKyAgICAgICAgOiBtX2l0ZW1Ub0FjdGl2YXRlTGFiZWwoMCkKKyAgICAgICAgLCBtX2FjdGl2
YXRlZChmYWxzZSkKKyAgICAgICAgLCBtX3RvZ2dsZWQoZmFsc2UpCisgICAgeworICAgIH0KKwor
ICAgIGJvb2wgY29udGV4dE1lbnUoV2ViS2l0Q29udGV4dE1lbnUqIGNvbnRleHRNZW51LCBHZGtF
dmVudCosIFdlYktpdEhpdFRlc3RSZXN1bHQqIGhpdFRlc3RSZXN1bHQpCisgICAgeworICAgICAg
ICAvLyBBcHBlbmQgb3VyIGN1c3RvbSBpdGVtIHRvIHRoZSBkZWZhdWx0IG1lbnUuCisgICAgICAg
IHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9t
ZW51X2l0ZW1fbmV3KG1fYWN0aW9uLmdldCgpKSk7CisgICAgICAgIHF1aXRNYWluTG9vcCgpOwor
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBHdGtNZW51SXRlbSogZ2V0TWVu
dUl0ZW0oR3RrTWVudSogbWVudSwgY29uc3QgZ2NoYXIqIGl0ZW1MYWJlbCkKKyAgICB7CisgICAg
ICAgIEdPd25QdHI8R0xpc3Q+IGl0ZW1zKGd0a19jb250YWluZXJfZ2V0X2NoaWxkcmVuKEdUS19D
T05UQUlORVIobWVudSkpKTsKKyAgICAgICAgZm9yIChHTGlzdCogaXRlciA9IGl0ZW1zLmdldCgp
OyBpdGVyOyBpdGVyID0gZ19saXN0X25leHQoaXRlcikpIHsKKyAgICAgICAgICAgIEd0a01lbnVJ
dGVtKiBjaGlsZCA9IEdUS19NRU5VX0lURU0oaXRlci0+ZGF0YSk7CisgICAgICAgICAgICBpZiAo
Z19zdHJfZXF1YWwoaXRlbUxhYmVsLCBndGtfbWVudV9pdGVtX2dldF9sYWJlbChjaGlsZCkpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDsKKyAgICAgICAgfQorICAgICAgICBnX2Fzc2Vy
dF9ub3RfcmVhY2hlZCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB2b2lkIGFj
dGl2YXRlTWVudUl0ZW0oKQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQobV9pdGVtVG9BY3RpdmF0
ZUxhYmVsKTsKKyAgICAgICAgR3RrTWVudSogbWVudSA9IGdldFBvcHVwTWVudSgpOworICAgICAg
ICBHdGtNZW51SXRlbSogaXRlbSA9IGdldE1lbnVJdGVtKG1lbnUsIG1faXRlbVRvQWN0aXZhdGVM
YWJlbCk7CisgICAgICAgIGd0a19tZW51X3NoZWxsX2FjdGl2YXRlX2l0ZW0oR1RLX01FTlVfU0hF
TEwobWVudSksIEdUS19XSURHRVQoaXRlbSksIFRSVUUpOworICAgICAgICBtX2l0ZW1Ub0FjdGl2
YXRlTGFiZWwgPSAwOworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBhY3RpdmF0ZU1lbnVJ
dGVtSWRsZUNhbGxiYWNrKGdwb2ludGVyIHVzZXJEYXRhKQorICAgIHsKKyAgICAgICAgQ29udGV4
dE1lbnVDdXN0b21UZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8Q29udGV4dE1lbnVDdXN0b21UZXN0
Kj4odXNlckRhdGEpOworICAgICAgICB0ZXN0LT5hY3RpdmF0ZU1lbnVJdGVtKCk7CisgICAgICAg
IHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICB2b2lkIGFjdGl2YXRlQ3VzdG9tTWVudUl0ZW1B
bmRXYWl0VW50aWxBY3RpdmF0ZWQoY29uc3QgY2hhciogYWN0aW9uTGFiZWwpCisgICAgeworICAg
ICAgICBtX2FjdGl2YXRlZCA9IG1fdG9nZ2xlZCA9IGZhbHNlOworICAgICAgICBtX2l0ZW1Ub0Fj
dGl2YXRlTGFiZWwgPSBhY3Rpb25MYWJlbDsKKyAgICAgICAgZ19pZGxlX2FkZChhY3RpdmF0ZU1l
bnVJdGVtSWRsZUNhbGxiYWNrLCB0aGlzKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFp
bkxvb3ApOworICAgIH0KKworICAgIHZvaWQgdG9nZ2xlQ3VzdG9tTWVudUl0ZW1BbmRXYWl0VW50
aWxUb2dnbGVkKGNvbnN0IGNoYXIqIGFjdGlvbkxhYmVsKQorICAgIHsKKyAgICAgICAgYWN0aXZh
dGVDdXN0b21NZW51SXRlbUFuZFdhaXRVbnRpbEFjdGl2YXRlZChhY3Rpb25MYWJlbCk7CisgICAg
fQorCisgICAgc3RhdGljIHZvaWQgYWN0aW9uQWN0aXZhdGVkQ2FsbGJhY2soR3RrQWN0aW9uKiwg
Q29udGV4dE1lbnVDdXN0b21UZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+bV9hY3Rp
dmF0ZWQgPSB0cnVlOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGFjdGlvblRvZ2dsZWRDYWxs
YmFjayhHdGtBY3Rpb24qLCBDb250ZXh0TWVudUN1c3RvbVRlc3QqIHRlc3QpCisgICAgeworICAg
ICAgICB0ZXN0LT5tX3RvZ2dsZWQgPSB0cnVlOworICAgIH0KKworICAgIHZvaWQgc2V0QWN0aW9u
KEd0a0FjdGlvbiogYWN0aW9uKQorICAgIHsKKyAgICAgICAgbV9hY3Rpb24gPSBhY3Rpb247Cisg
ICAgICAgIGlmIChHVEtfSVNfVE9HR0xFX0FDVElPTihhY3Rpb24pKQorICAgICAgICAgICAgZ19z
aWduYWxfY29ubmVjdChhY3Rpb24sICJ0b2dnbGVkIiwgR19DQUxMQkFDSyhhY3Rpb25Ub2dnbGVk
Q2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ19zaWduYWxfY29u
bmVjdChhY3Rpb24sICJhY3RpdmF0ZSIsIEdfQ0FMTEJBQ0soYWN0aW9uQWN0aXZhdGVkQ2FsbGJh
Y2spLCB0aGlzKTsKKyAgICB9CisKKyAgICBHUmVmUHRyPEd0a0FjdGlvbj4gbV9hY3Rpb247Cisg
ICAgY29uc3QgY2hhciogbV9pdGVtVG9BY3RpdmF0ZUxhYmVsOworICAgIGJvb2wgbV9hY3RpdmF0
ZWQ7CisgICAgYm9vbCBtX3RvZ2dsZWQ7Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0Q29udGV4dE1l
bnVQb3B1bGF0ZU1lbnUoQ29udGV4dE1lbnVDdXN0b21UZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVy
KQoreworICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOworCisgICAg
dGVzdC0+bG9hZEh0bWwoIjxodG1sPjxib2R5PldlYktpdEdUSysgQ29udGV4dCBtZW51IHRlc3Rz
PC9ib2R5PjwvaHRtbD4iLCAiZmlsZTovLy8iKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmlu
aXNoZWQoKTsKKworICAgIC8vIENyZWF0ZSBhIGN1c3RvbSBtZW51IGl0ZW0uCisgICAgR1JlZlB0
cjxHdGtBY3Rpb24+IGFjdGlvbiA9IGFkb3B0R1JlZihndGtfYWN0aW9uX25ldygiV2ViS2l0R1RL
K0N1c3RvbUFjdGlvbiIsICJDdXN0b20gX0FjdGlvbiIsIDAsIDApKTsKKyAgICB0ZXN0LT5zZXRB
Y3Rpb24oYWN0aW9uLmdldCgpKTsKKyAgICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBbmRXYWl0VW50
aWxGaW5pc2hlZCgpOworICAgIHRlc3QtPmFjdGl2YXRlQ3VzdG9tTWVudUl0ZW1BbmRXYWl0VW50
aWxBY3RpdmF0ZWQoZ3RrX2FjdGlvbl9nZXRfbGFiZWwoYWN0aW9uLmdldCgpKSk7CisgICAgZ19h
c3NlcnQodGVzdC0+bV9hY3RpdmF0ZWQpOworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX3RvZ2dsZWQp
OworCisgICAgLy8gQ3JlYXRlIGEgY3VzdG9tIHRvZ2dsZSBtZW51IGl0ZW0uCisgICAgR1JlZlB0
cjxHdGtBY3Rpb24+IHRvZ2dsZUFjdGlvbiA9IGFkb3B0R1JlZihHVEtfQUNUSU9OKGd0a190b2dn
bGVfYWN0aW9uX25ldygiV2ViS2l0R1RLK0N1c3RvbVRvZ2dsZUFjdGlvbiIsICJDdXN0b20gX1Rv
Z2dsZSBBY3Rpb24iLCAwLCAwKSkpOworICAgIHRlc3QtPnNldEFjdGlvbih0b2dnbGVBY3Rpb24u
Z2V0KCkpOworICAgIHRlc3QtPnNob3dDb250ZXh0TWVudUFuZFdhaXRVbnRpbEZpbmlzaGVkKCk7
CisgICAgdGVzdC0+dG9nZ2xlQ3VzdG9tTWVudUl0ZW1BbmRXYWl0VW50aWxUb2dnbGVkKGd0a19h
Y3Rpb25fZ2V0X2xhYmVsKHRvZ2dsZUFjdGlvbi5nZXQoKSkpOworICAgIGdfYXNzZXJ0KCF0ZXN0
LT5tX2FjdGl2YXRlZCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV90b2dnbGVkKTsKK30KKworY2xh
c3MgQ29udGV4dE1lbnVDdXN0b21GdWxsVGVzdDogcHVibGljIENvbnRleHRNZW51VGVzdCB7Citw
dWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShDb250ZXh0TWVudUN1c3RvbUZ1bGxU
ZXN0KTsKKworICAgIGJvb2wgY29udGV4dE1lbnUoV2ViS2l0Q29udGV4dE1lbnUqIGNvbnRleHRN
ZW51LCBHZGtFdmVudCosIFdlYktpdEhpdFRlc3RSZXN1bHQqKQorICAgIHsKKyAgICAgICAgLy8g
Q2xlYXIgcHJvcG9zZWQgbWVudSBhbmQgYnVpbGQgb3VyIG93bi4KKyAgICAgICAgd2Via2l0X2Nv
bnRleHRfbWVudV9yZW1vdmVfYWxsKGNvbnRleHRNZW51KTsKKyAgICAgICAgZ19hc3NlcnRfY21w
aW50KHdlYmtpdF9jb250ZXh0X21lbnVfZ2V0X25faXRlbXMoY29udGV4dE1lbnUpLCA9PSwgMCk7
CisKKyAgICAgICAgLy8gQWRkIGFjdGlvbnMgZnJvbSBzdG9jay4KKyAgICAgICAgd2Via2l0X2Nv
bnRleHRfbWVudV9wcmVwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1f
bmV3X2Zyb21fc3RvY2tfYWN0aW9uKFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0dPX0JBQ0sp
KTsKKyAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBlbmQoY29udGV4dE1lbnUsIHdlYmtp
dF9jb250ZXh0X21lbnVfaXRlbV9uZXdfZnJvbV9zdG9ja19hY3Rpb24oV0VCS0lUX0NPTlRFWFRf
TUVOVV9BQ1RJT05fR09fRk9SV0FSRCkpOworICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2lu
c2VydChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19zZXBhcmF0b3Io
KSwgMik7CisKKyAgICAgICAgLy8gQWRkIGN1c3RvbSBhY3Rpb25zLgorICAgICAgICBHUmVmUHRy
PEd0a0FjdGlvbj4gYWN0aW9uID0gYWRvcHRHUmVmKGd0a19hY3Rpb25fbmV3KCJXZWJLaXRHVEsr
Q3VzdG9tQWN0aW9uIiwgIkN1c3RvbSBfQWN0aW9uIiwgMCwgMCkpOworICAgICAgICBndGtfYWN0
aW9uX3NldF9zZW5zaXRpdmUoYWN0aW9uLmdldCgpLCBGQUxTRSk7CisgICAgICAgIHdlYmtpdF9j
b250ZXh0X21lbnVfaW5zZXJ0KGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1f
bmV3KGFjdGlvbi5nZXQoKSksIC0xKTsKKyAgICAgICAgR1JlZlB0cjxHdGtBY3Rpb24+IHRvZ2ds
ZUFjdGlvbiA9IGFkb3B0R1JlZihHVEtfQUNUSU9OKGd0a190b2dnbGVfYWN0aW9uX25ldygiV2Vi
S2l0R1RLK0N1c3RvbVRvZ2dsZUFjdGlvbiIsICJDdXN0b20gX1RvZ2dsZSBBY3Rpb24iLCAwLCAw
KSkpOworICAgICAgICBndGtfdG9nZ2xlX2FjdGlvbl9zZXRfYWN0aXZlKEdUS19UT0dHTEVfQUNU
SU9OKHRvZ2dsZUFjdGlvbi5nZXQoKSksIFRSVUUpOworICAgICAgICB3ZWJraXRfY29udGV4dF9t
ZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ldyh0b2dn
bGVBY3Rpb24uZ2V0KCkpKTsKKyAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBlbmQoY29u
dGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfc2VwYXJhdG9yKCkpOworCisg
ICAgICAgIC8vIEFkZCBhIHN1Ym1lbnUuCisgICAgICAgIEdSZWZQdHI8V2ViS2l0Q29udGV4dE1l
bnU+IHN1Yk1lbnUgPSBhZG9wdEdSZWYod2Via2l0X2NvbnRleHRfbWVudV9uZXcoKSk7CisgICAg
ICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1Qoc3ViTWVu
dS5nZXQoKSkpOworICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2luc2VydChzdWJNZW51Lmdl
dCgpLCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X2Zyb21fc3RvY2tfYWN0aW9uX3dpdGhf
bGFiZWwoV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fU1RPUCwgIlN0b3AgTG9hZCIpLCAwKTsK
KyAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9pbnNlcnQoc3ViTWVudS5nZXQoKSwgd2Via2l0
X2NvbnRleHRfbWVudV9pdGVtX25ld19mcm9tX3N0b2NrX2FjdGlvbihXRUJLSVRfQ09OVEVYVF9N
RU5VX0FDVElPTl9SRUxPQUQpLCAtMSk7CisgICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfYXBw
ZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X3dpdGhfc3VibWVu
dSgiTG9hZCBvcHRpb25zIiwgc3ViTWVudS5nZXQoKSkpOworICAgICAgICB3ZWJraXRfY29udGV4
dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19z
ZXBhcmF0b3IoKSk7CisKKyAgICAgICAgLy8gTW92ZSBMb2FkIHN1Ym1lbnUgYmVmb3JlIGN1c3Rv
bSBhY3Rpb25zLgorICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X21vdmVfaXRlbShjb250ZXh0
TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9sYXN0KGNvbnRleHRNZW51KSwgMyk7CisgICAgICAg
IHdlYmtpdF9jb250ZXh0X21lbnVfbW92ZV9pdGVtKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4
dF9tZW51X2xhc3QoY29udGV4dE1lbnUpLCAzKTsKKworICAgICAgICAvLyBJZiBsYXN0IGl0ZW0g
aXMgYSBzZXBhcmF0b3IsIHJlbW92ZSBpdC4KKyAgICAgICAgaWYgKHdlYmtpdF9jb250ZXh0X21l
bnVfaXRlbV9pc19zZXBhcmF0b3Iod2Via2l0X2NvbnRleHRfbWVudV9sYXN0KGNvbnRleHRNZW51
KSkpCisgICAgICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X3JlbW92ZShjb250ZXh0TWVudSwg
d2Via2l0X2NvbnRleHRfbWVudV9sYXN0KGNvbnRleHRNZW51KSk7CisKKyAgICAgICAgLy8gQ2hl
Y2sgdGhlIG1lbnUuCisgICAgICAgIEdMaXN0KiBpdGVyID0gd2Via2l0X2NvbnRleHRfbWVudV9n
ZXRfaXRlbXMoY29udGV4dE1lbnUpOworCisgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVt
SXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05f
R09fQkFDSywgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50
SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNU
SU9OX0dPX0ZPUldBUkQsIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgaXRlciA9IGNoZWNr
Q3VycmVudEl0ZW1Jc1NlcGFyYXRvckFuZEdldE5leHQoaXRlcik7CisKKyAgICAgICAgR0xpc3Qq
IHN1Yk1lbnVJdGVyID0gMDsKKyAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N1Yk1l
bnVBbmRHZXROZXh0KGl0ZXIsICJMb2FkIG9wdGlvbnMiLCBWaXNpYmxlIHwgRW5hYmxlZCwgJnN1
Yk1lbnVJdGVyKTsKKyAgICAgICAgc3ViTWVudUl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9j
a0FjdGlvbkFuZEdldE5leHQoc3ViTWVudUl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9O
X1NUT1AsIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgc3ViTWVudUl0ZXIgPSBjaGVja0N1
cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoc3ViTWVudUl0ZXIsIFdFQktJVF9DT05U
RVhUX01FTlVfQUNUSU9OX1JFTE9BRCwgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICBpdGVy
ID0gY2hlY2tDdXJyZW50SXRlbUlzU2VwYXJhdG9yQW5kR2V0TmV4dChpdGVyKTsKKworICAgICAg
ICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzQ3VzdG9tQWN0aW9uQW5kR2V0TmV4dChpdGVyLCAi
Q3VzdG9tIF9BY3Rpb24iLCBWaXNpYmxlKTsKKyAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0
ZW1Jc0N1c3RvbUFjdGlvbkFuZEdldE5leHQoaXRlciwgIkN1c3RvbSBfVG9nZ2xlIEFjdGlvbiIs
IFZpc2libGUgfCBFbmFibGVkIHwgQ2hlY2tlZCk7CisgICAgICAgIGdfYXNzZXJ0KCFpdGVyKTsK
KworICAgICAgICBxdWl0TWFpbkxvb3AoKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0Q29udGV4dE1lbnVDdXN0b21NZW51KENvbnRleHRNZW51
Q3VzdG9tRnVsbFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+c2hvd0lu
V2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7CisKKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+
PGJvZHk+V2ViS2l0R1RLKyBDb250ZXh0IG1lbnUgdGVzdHM8L2JvZHk+PC9odG1sPiIsICJmaWxl
Oi8vLyIpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+
c2hvd0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmluaXNoZWQoKTsKK30KKworY2xhc3MgQ29udGV4
dE1lbnVEaXNhYmxlZFRlc3Q6IHB1YmxpYyBDb250ZXh0TWVudVRlc3QgeworcHVibGljOgorICAg
IE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoQ29udGV4dE1lbnVEaXNhYmxlZFRlc3QpOworCisgICAg
ZW51bSBEaXNhYmxlTW9kZSB7CisgICAgICAgIElnbm9yZUNsaWNrcywKKyAgICAgICAgSWdub3Jl
RGVmYXVsdE1lbnUKKyAgICB9OworCisgICAgc3RhdGljIGdib29sZWFuIGJ1dHRvblByZXNzRXZl
bnRDYWxsYmFjayhHdGtXaWRnZXQqLCBHZGtFdmVudCogZXZlbnQsIENvbnRleHRNZW51RGlzYWJs
ZWRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgaWYgKGV2ZW50LT5idXR0b24uYnV0dG9uICE9
IDMpCisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIHJldHVybiB0ZXN0LT5yaWdo
dEJ1dHRvblByZXNzZWQoKTsKKyAgICB9CisKKyAgICBDb250ZXh0TWVudURpc2FibGVkVGVzdCgp
CisgICAgICAgIDogbV9kaXNhYmxlTW9kZShJZ25vcmVDbGlja3MpCisgICAgeworICAgICAgICBn
X3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImJ1dHRvbi1wcmVzcy1ldmVudCIsIEdfQ0FMTEJB
Q0soYnV0dG9uUHJlc3NFdmVudENhbGxiYWNrKSwgdGhpcyk7CisgICAgfQorCisgICAgYm9vbCBj
b250ZXh0TWVudShXZWJLaXRDb250ZXh0TWVudSogY29udGV4dE1lbnUsIEdka0V2ZW50KiwgV2Vi
S2l0SGl0VGVzdFJlc3VsdCopCisgICAgeworICAgICAgICBpZiAobV9kaXNhYmxlTW9kZSA9PSBJ
Z25vcmVDbGlja3MpCisgICAgICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBxdWl0TWFpbkxvb3AoKTsKKworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICBib29sIHJpZ2h0QnV0dG9uUHJlc3NlZCgpCisgICAgeworICAgICAg
ICBpZiAobV9kaXNhYmxlTW9kZSA9PSBJZ25vcmVDbGlja3MpIHsKKyAgICAgICAgICAgIHF1aXRN
YWluTG9vcEFmdGVyUHJvY2Vzc2luZ1BlbmRpbmdFdmVudHMoKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBE
aXNhYmxlTW9kZSBtX2Rpc2FibGVNb2RlOworfTsKKworc3RhdGljIHZvaWQgdGVzdENvbnRleHRN
ZW51RGlzYWJsZU1lbnUoQ29udGV4dE1lbnVEaXNhYmxlZFRlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCit7CisgICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7CisKKyAg
ICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHk+V2ViS2l0R1RLKyBDb250ZXh0IG1lbnUgdGVz
dHM8L2JvZHk+PC9odG1sPiIsICJmaWxlOi8vLyIpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRG
aW5pc2hlZCgpOworCisgICAgdGVzdC0+bV9kaXNhYmxlTW9kZSA9IENvbnRleHRNZW51RGlzYWJs
ZWRUZXN0OjpJZ25vcmVEZWZhdWx0TWVudTsKKyAgICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBbmRX
YWl0VW50aWxGaW5pc2hlZCgpOworCisgICAgdGVzdC0+bV9kaXNhYmxlTW9kZSA9IENvbnRleHRN
ZW51RGlzYWJsZWRUZXN0OjpJZ25vcmVDbGlja3M7CisgICAgdGVzdC0+c2hvd0NvbnRleHRNZW51
QW5kV2FpdFVudGlsRmluaXNoZWQoKTsKK30KKworY2xhc3MgQ29udGV4dE1lbnVTdWJtZW51VGVz
dDogcHVibGljIENvbnRleHRNZW51VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1Rf
RklYVFVSRShDb250ZXh0TWVudVN1Ym1lbnVUZXN0KTsKKworICAgIGJvb2wgY29udGV4dE1lbnUo
V2ViS2l0Q29udGV4dE1lbnUqIGNvbnRleHRNZW51LCBHZGtFdmVudCosIFdlYktpdEhpdFRlc3RS
ZXN1bHQqKQorICAgIHsKKyAgICAgICAgc2l6ZV90IG1lbnVTaXplID0gd2Via2l0X2NvbnRleHRf
bWVudV9nZXRfbl9pdGVtcyhjb250ZXh0TWVudSk7CisgICAgICAgIEdSZWZQdHI8V2ViS2l0Q29u
dGV4dE1lbnU+IHN1Yk1lbnUgPSBhZG9wdEdSZWYod2Via2l0X2NvbnRleHRfbWVudV9uZXcoKSk7
CisgICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRf
Y29udGV4dF9tZW51X2l0ZW1fbmV3X3dpdGhfc3VibWVudSgiU3ViTWVudUl0ZW0iLCBzdWJNZW51
LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2NvbnRleHRfbWVudV9n
ZXRfbl9pdGVtcyhjb250ZXh0TWVudSksID09LCBtZW51U2l6ZSArIDEpOworCisgICAgICAgIEdS
ZWZQdHI8V2ViS2l0Q29udGV4dE1lbnU+IHN1Yk1lbnUyID0gYWRvcHRHUmVmKHdlYmtpdF9jb250
ZXh0X21lbnVfbmV3KCkpOworICAgICAgICBHUmVmUHRyPFdlYktpdENvbnRleHRNZW51SXRlbT4g
aXRlbSA9IHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfZnJvbV9zdG9ja19hY3Rpb24oV0VC
S0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9MSU5LKTsKKworICAgICAgICAvLyBBZGQgc3Vi
bWVudSB0byBuZXdseSBjcmVhdGVkIGl0ZW0uCisgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfY29u
dGV4dF9tZW51X2l0ZW1fZ2V0X3N1Ym1lbnUoaXRlbS5nZXQoKSkpOworICAgICAgICB3ZWJraXRf
Y29udGV4dF9tZW51X2l0ZW1fc2V0X3N1Ym1lbnUoaXRlbS5nZXQoKSwgc3ViTWVudTIuZ2V0KCkp
OworICAgICAgICBnX2Fzc2VydCh3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X3N1Ym1lbnUo
aXRlbS5nZXQoKSkgPT0gc3ViTWVudTIuZ2V0KCkpOworCisgICAgICAgIC8vIFJlcGxhY2UgdGhl
IHN1Ym1lbnUuCisgICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9zZXRfc3VibWVudShp
dGVtLmdldCgpLCAwKTsKKyAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9jb250ZXh0X21lbnVfaXRl
bV9nZXRfc3VibWVudShpdGVtLmdldCgpKSk7CisKKyAgICAgICAgLy8gVHJ5IHRvIGFkZCBhIHN1
Ym1lbnUgYWxyZWFkeSBhZGRlZCB0byBhbm90aGVyIGl0ZW0uCisgICAgICAgIHJlbW92ZUxvZ0Zh
dGFsRmxhZyhHX0xPR19MRVZFTF9XQVJOSU5HKTsKKyAgICAgICAgd2Via2l0X2NvbnRleHRfbWVu
dV9pdGVtX3NldF9zdWJtZW51KGl0ZW0uZ2V0KCksIHN1Yk1lbnUuZ2V0KCkpOworICAgICAgICBh
ZGRMb2dGYXRhbEZsYWcoR19MT0dfTEVWRUxfV0FSTklORyk7CisgICAgICAgIGdfYXNzZXJ0KCF3
ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X3N1Ym1lbnUoaXRlbS5nZXQoKSkpOworCisgICAg
ICAgIC8vIEEgcmVtb3ZlZCBzdWJtZW51IHNob3VsZG4ndCBoYXZlIGEgcGFyZW50LgorICAgICAg
ICB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fc2V0X3N1Ym1lbnUoaXRlbS5nZXQoKSwgc3ViTWVu
dTIuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydCh3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0
X3N1Ym1lbnUoaXRlbS5nZXQoKSkgPT0gc3ViTWVudTIuZ2V0KCkpOworCisgICAgICAgIHF1aXRN
YWluTG9vcCgpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisKK3N0YXRpYyB2
b2lkIHRlc3RDb250ZXh0TWVudVN1Yk1lbnUoQ29udGV4dE1lbnVTdWJtZW51VGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBw
ZWQoKTsKKworICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keT5XZWJLaXRHVEsrIENvbnRl
eHQgbWVudSB0ZXN0czwvYm9keT48L2h0bWw+IiwgImZpbGU6Ly8vIik7CisgICAgdGVzdC0+d2Fp
dFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBbmRXYWl0
VW50aWxGaW5pc2hlZCgpOworfQorCitjbGFzcyBDb250ZXh0TWVudURpc21pc3NlZFRlc3Q6IHB1
YmxpYyBDb250ZXh0TWVudVRlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRV
UkUoQ29udGV4dE1lbnVEaXNtaXNzZWRUZXN0KTsKKworICAgIENvbnRleHRNZW51RGlzbWlzc2Vk
VGVzdCgpCisgICAgICAgIDogbV9kaXNtaXNzZWQoZmFsc2UpCisgICAgeworICAgIH0KKworICAg
IGJvb2wgY29udGV4dE1lbnUoV2ViS2l0Q29udGV4dE1lbnUqIGNvbnRleHRNZW51LCBHZGtFdmVu
dCosIFdlYktpdEhpdFRlc3RSZXN1bHQqKQorICAgIHsKKyAgICAgICAgcXVpdE1haW5Mb29wKCk7
CisgICAgICAgIC8vIFNob3cgdGhlIGRlZmF1bHQgY29udGV4dCBtZW51LgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgdm9pZCBjb250ZXh0TWVudURpc21pc3NlZCgpCisgICAg
eworICAgICAgICBtX2Rpc21pc3NlZCA9IHRydWU7CisgICAgICAgIENvbnRleHRNZW51VGVzdDo6
Y29udGV4dE1lbnVEaXNtaXNzZWQoKTsKKyAgICB9CisKKyAgICB2b2lkIHNob3dDb250ZXh0TWVu
dUFuZFdhaXRVbnRpbERpc21pc3NlZCgpCisgICAgeworICAgICAgICBzaG93Q29udGV4dE1lbnVB
bmRXYWl0VW50aWxGaW5pc2hlZCgpOworICAgICAgICBkaXNtaXNzQ29udGV4dE1lbnVBbmRXYWl0
VW50aWxGaW5pc2hlZCgpOworICAgIH0KKworICAgIGJvb2wgbV9kaXNtaXNzZWQ7Cit9OworCitz
dGF0aWMgdm9pZCB0ZXN0Q29udGV4dE1lbnVEaXNtaXNzZWQoQ29udGV4dE1lbnVEaXNtaXNzZWRU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdh
aXRVbnRpbE1hcHBlZCgpOworCisgICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxib2R5PldlYktp
dEdUSysgQ29udGV4dCBtZW51IHRlc3RzPC9ib2R5PjwvaHRtbD4iLCAiZmlsZTovLy8iKTsKKyAg
ICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3QtPnNob3dDb250ZXh0
TWVudUFuZFdhaXRVbnRpbERpc21pc3NlZCgpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fZGlzbWlz
c2VkKTsKK30KKworY2xhc3MgQ29udGV4dE1lbnVTbWFydFNlcGFyYXRvcnNUZXN0OiBwdWJsaWMg
Q29udGV4dE1lbnVUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKENv
bnRleHRNZW51U21hcnRTZXBhcmF0b3JzVGVzdCk7CisKKyAgICBib29sIGNvbnRleHRNZW51KFdl
YktpdENvbnRleHRNZW51KiBjb250ZXh0TWVudSwgR2RrRXZlbnQqLCBXZWJLaXRIaXRUZXN0UmVz
dWx0KikKKyAgICB7CisgICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfcmVtb3ZlX2FsbChjb250
ZXh0TWVudSk7CisKKyAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBlbmQoY29udGV4dE1l
bnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfc2VwYXJhdG9yKCkpOworICAgICAgICB3
ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVu
dV9pdGVtX25ld19zZXBhcmF0b3IoKSk7CisgICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfYXBw
ZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X2Zyb21fc3RvY2tf
YWN0aW9uKFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0dPX0JBQ0spKTsKKyAgICAgICAgd2Vi
a2l0X2NvbnRleHRfbWVudV9hcHBlbmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVf
aXRlbV9uZXdfZnJvbV9zdG9ja19hY3Rpb24oV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fR09f
Rk9SV0FSRCkpOworICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVu
dSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19zZXBhcmF0b3IoKSk7CisgICAgICAgIHdl
YmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51
X2l0ZW1fbmV3X3NlcGFyYXRvcigpKTsKKyAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBl
bmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfZnJvbV9zdG9ja19h
Y3Rpb24oV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWSkpOworICAgICAgICB3ZWJraXRf
Y29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVt
X25ld19zZXBhcmF0b3IoKSk7CisgICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGNv
bnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X2Zyb21fc3RvY2tfYWN0aW9u
KFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0lOU1BFQ1RfRUxFTUVOVCkpOworICAgICAgICB3
ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVu
dV9pdGVtX25ld19zZXBhcmF0b3IoKSk7CisgICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfYXBw
ZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X3NlcGFyYXRvcigp
KTsKKworICAgICAgICBxdWl0TWFpbkxvb3AoKTsKKworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgR3RrTWVudSogc2hvd0NvbnRleHRNZW51QW5kR2V0R3RrTWVudSgpCisgICAg
eworICAgICAgICBzaG93Q29udGV4dE1lbnVBbmRXYWl0VW50aWxGaW5pc2hlZCgpOworICAgICAg
ICByZXR1cm4gZ2V0UG9wdXBNZW51KCk7CisgICAgfQorfTsKKworc3RhdGljIHZvaWQgdGVzdENv
bnRleHRNZW51U21hcnRTZXBhcmF0b3JzKENvbnRleHRNZW51U21hcnRTZXBhcmF0b3JzVGVzdCog
dGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50
aWxNYXBwZWQoKTsKKworICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keT5XZWJLaXRHVEsr
IENvbnRleHQgbWVudSB0ZXN0czwvYm9keT48L2h0bWw+IiwgImZpbGU6Ly8vIik7CisgICAgdGVz
dC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBHdGtNZW51KiBtZW51ID0gdGVzdC0+
c2hvd0NvbnRleHRNZW51QW5kR2V0R3RrTWVudSgpOworICAgIGdfYXNzZXJ0KG1lbnUpOworCisg
ICAgLy8gTGVhZGluZyBhbmQgdHJhaWxpbmcgc2VwYXJhdG9ycyBhcmUgbm90IGFkZGVkIHRvIHRo
ZSBjb250ZXh0IG1lbnUuCisgICAgR093blB0cjxHTGlzdD4gbWVudUl0ZW1zKGd0a19jb250YWlu
ZXJfZ2V0X2NoaWxkcmVuKEdUS19DT05UQUlORVIobWVudSkpKTsKKyAgICBnX2Fzc2VydF9jbXB1
aW50KGdfbGlzdF9sZW5ndGgobWVudUl0ZW1zLmdldCgpKSwgPT0sIDYpOworICAgIEd0a1dpZGdl
dCogaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgMCkp
OworICAgIGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAmJiBndGtf
d2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKKyAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3Rf
bnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCAxKSk7CisgICAgZ19hc3NlcnQoIUdUS19JU19TRVBB
UkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOwor
ICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDIp
KTsKKyAgICBnX2Fzc2VydChHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAmJiBndGtf
d2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKKyAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3Rf
bnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCAzKSk7CisgICAgZ19hc3NlcnQoIUdUS19JU19TRVBB
UkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOwor
ICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDQp
KTsKKyAgICBnX2Fzc2VydChHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAmJiBndGtf
d2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKKyAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3Rf
bnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCA1KSk7CisgICAgZ19hc3NlcnQoIUdUS19JU19TRVBB
UkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOwor
CisgICAgLy8gSGlkaW5nIGEgbWVudSBpdGVtIGJldHdlZW4gdHdvIHNlcGFyYXRvcnMgaGlkZXMg
dGhlIGZvbGxvd2luZyBzZXBhcmF0b3IuCisgICAgR3RrQWN0aW9uKiBhY3Rpb24gPSBndGtfYWN0
aXZhdGFibGVfZ2V0X3JlbGF0ZWRfYWN0aW9uKEdUS19BQ1RJVkFUQUJMRShnX2xpc3RfbnRoX2Rh
dGEobWVudUl0ZW1zLmdldCgpLCAzKSkpOworICAgIGd0a19hY3Rpb25fc2V0X3Zpc2libGUoYWN0
aW9uLCBGQUxTRSk7CisgICAgbWVudUl0ZW1zLnNldChndGtfY29udGFpbmVyX2dldF9jaGlsZHJl
bihHVEtfQ09OVEFJTkVSKG1lbnUpKSk7CisgICAgZ19hc3NlcnRfY21wdWludChnX2xpc3RfbGVu
Z3RoKG1lbnVJdGVtcy5nZXQoKSksID09LCA2KTsKKyAgICBpdGVtID0gR1RLX1dJREdFVChnX2xp
c3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCAwKSk7CisgICAgZ19hc3NlcnQoIUdUS19JU19T
RVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkp
OworICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCks
IDEpKTsKKyAgICBnX2Fzc2VydCghR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYg
Z3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7CisgICAgaXRlbSA9IEdUS19XSURHRVQoZ19s
aXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgMikpOworICAgIGdfYXNzZXJ0KEdUS19JU19T
RVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkp
OworICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCks
IDMpKTsKKyAgICBnX2Fzc2VydCghR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYg
IWd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOworICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdf
bGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDQpKTsKKyAgICBnX2Fzc2VydChHVEtfSVNf
U0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAmJiAhZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVt
KSk7CisgICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQo
KSwgNSkpOworICAgIGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAm
JiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKKyAgICBndGtfYWN0aW9uX3NldF92aXNp
YmxlKGFjdGlvbiwgVFJVRSk7CisKKyAgICAvLyBTaG93aW5nIGFuIGFjdGlvbiBiZXR3ZWVuIHR3
byBzZXBhcmF0b3JzIHNob3dzIHRoZSBoaWRkZW4gc2VwYXJhdG9yLgorICAgIGl0ZW0gPSBHVEtf
V0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDApKTsKKyAgICBnX2Fzc2Vy
dCghR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlz
aWJsZShpdGVtKSk7CisgICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJ
dGVtcy5nZXQoKSwgMSkpOworICAgIGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRF
TShpdGVtKSAmJiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKKyAgICBpdGVtID0gR1RL
X1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCAyKSk7CisgICAgZ19hc3Nl
cnQoR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlz
aWJsZShpdGVtKSk7CisgICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJ
dGVtcy5nZXQoKSwgMykpOworICAgIGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRF
TShpdGVtKSAmJiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKKyAgICBpdGVtID0gR1RL
X1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCA0KSk7CisgICAgZ19hc3Nl
cnQoR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlz
aWJsZShpdGVtKSk7CisgICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJ
dGVtcy5nZXQoKSwgNSkpOworICAgIGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRF
TShpdGVtKSAmJiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKKworICAgIC8vIFRyYWls
aW5nIHNlcGFyYXRvcnMgYXJlIGhpZGRlbiB0b28uCisgICAgYWN0aW9uID0gZ3RrX2FjdGl2YXRh
YmxlX2dldF9yZWxhdGVkX2FjdGlvbihHVEtfQUNUSVZBVEFCTEUoZ19saXN0X250aF9kYXRhKG1l
bnVJdGVtcy5nZXQoKSwgNSkpKTsKKyAgICBndGtfYWN0aW9uX3NldF92aXNpYmxlKGFjdGlvbiwg
RkFMU0UpOworICAgIG1lbnVJdGVtcy5zZXQoZ3RrX2NvbnRhaW5lcl9nZXRfY2hpbGRyZW4oR1RL
X0NPTlRBSU5FUihtZW51KSkpOworICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0
YShtZW51SXRlbXMuZ2V0KCksIDApKTsKKyAgICBnX2Fzc2VydCghR1RLX0lTX1NFUEFSQVRPUl9N
RU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7CisgICAgaXRl
bSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgMSkpOworICAg
IGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0
X2dldF92aXNpYmxlKGl0ZW0pKTsKKyAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2Rh
dGEobWVudUl0ZW1zLmdldCgpLCAyKSk7CisgICAgZ19hc3NlcnQoR1RLX0lTX1NFUEFSQVRPUl9N
RU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7CisgICAgaXRl
bSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgMykpOworICAg
IGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0
X2dldF92aXNpYmxlKGl0ZW0pKTsKKyAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2Rh
dGEobWVudUl0ZW1zLmdldCgpLCA0KSk7CisgICAgZ19hc3NlcnQoR1RLX0lTX1NFUEFSQVRPUl9N
RU5VX0lURU0oaXRlbSkgJiYgIWd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOworICAgIGl0
ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDUpKTsKKyAg
ICBnX2Fzc2VydCghR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgIWd0a193aWRn
ZXRfZ2V0X3Zpc2libGUoaXRlbSkpOworfQorCit2b2lkIGJlZm9yZUFsbCgpCit7CisgICAgQ29u
dGV4dE1lbnVEZWZhdWx0VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImRlZmF1bHQtbWVudSIs
IHRlc3RDb250ZXh0TWVudURlZmF1bHRNZW51KTsKKyAgICBDb250ZXh0TWVudUN1c3RvbVRlc3Q6
OmFkZCgiV2ViS2l0V2ViVmlldyIsICJwb3B1bGF0ZS1tZW51IiwgdGVzdENvbnRleHRNZW51UG9w
dWxhdGVNZW51KTsKKyAgICBDb250ZXh0TWVudUN1c3RvbUZ1bGxUZXN0OjphZGQoIldlYktpdFdl
YlZpZXciLCAiY3VzdG9tLW1lbnUiLCB0ZXN0Q29udGV4dE1lbnVDdXN0b21NZW51KTsKKyAgICBD
b250ZXh0TWVudURpc2FibGVkVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImRpc2FibGUtbWVu
dSIsIHRlc3RDb250ZXh0TWVudURpc2FibGVNZW51KTsKKyAgICBDb250ZXh0TWVudVN1Ym1lbnVU
ZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAic3VibWVudSIsIHRlc3RDb250ZXh0TWVudVN1Yk1l
bnUpOworICAgIENvbnRleHRNZW51RGlzbWlzc2VkVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3Iiwg
Im1lbnUtZGlzbWlzc2VkIiwgdGVzdENvbnRleHRNZW51RGlzbWlzc2VkKTsKKyAgICBDb250ZXh0
TWVudVNtYXJ0U2VwYXJhdG9yc1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJzbWFydC1zZXBh
cmF0b3JzIiwgdGVzdENvbnRleHRNZW51U21hcnRTZXBhcmF0b3JzKTsKK30KKwordm9pZCBhZnRl
ckFsbCgpCit7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dDJHdGsvVGVzdENvb2tpZU1hbmFnZXIuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyR3RrL1Rlc3RDb29raWVNYW5hZ2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5hZGM2YjViCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RDb29raWVNYW5hZ2VyLmNwcApAQCAtMCwwICsxLDMzMSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpbmNsdWRlICJXZWJLaXRUZXN0U2VydmVyLmgiCisjaW5jbHVkZSAiV2ViVmlld1Rl
c3QuaCIKKyNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgorCitzdGF0aWMgV2ViS2l0VGVzdFNlcnZl
cioga1NlcnZlcjsKK3N0YXRpYyBjaGFyKiBrVGVtcERpcmVjdG9yeTsKKworc3RhdGljIGNvbnN0
IGNoYXIqIGtGaXJzdFBhcnR5RG9tYWluID0gIjEyNy4wLjAuMSI7CitzdGF0aWMgY29uc3QgY2hh
cioga1RoaXJkUGFydHlEb21haW4gPSAibG9jYWxob3N0IjsKK3N0YXRpYyBjb25zdCBjaGFyKiBr
SW5kZXhIdG1sRm9ybWF0ID0KKyAgICAiPGh0bWw+PGJvZHk+IgorICAgICIgPHA+V2ViS2l0R1RL
KyBDb29raWUgTWFuYWdlciB0ZXN0PC9wPiIKKyAgICAiIDxpbWcgc3JjPSdodHRwOi8vbG9jYWxo
b3N0OiV1L2ltYWdlLnBuZycgd2lkdGg9NSBoZWlnaHQ9NT48L2ltZz4iCisgICAgIjwvYm9keT48
L2h0bWw+IjsKKworY2xhc3MgQ29va2llTWFuYWdlclRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7
CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShDb29raWVNYW5hZ2VyVGVzdCk7
CisKKyAgICBzdGF0aWMgdm9pZCBjb29raWVzQ2hhbmdlZENhbGxiYWNrKFdlYktpdENvb2tpZU1h
bmFnZXIqLCBDb29raWVNYW5hZ2VyVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPm1f
Y29va2llc0NoYW5nZWQgPSB0cnVlOworICAgICAgICBpZiAodGVzdC0+bV9maW5pc2hMb29wV2hl
bkNvb2tpZXNDaGFuZ2UpCisgICAgICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFp
bkxvb3ApOworICAgIH0KKworICAgIENvb2tpZU1hbmFnZXJUZXN0KCkKKyAgICAgICAgOiBXZWJW
aWV3VGVzdCgpCisgICAgICAgICwgbV9jb29raWVNYW5hZ2VyKHdlYmtpdF93ZWJfY29udGV4dF9n
ZXRfY29va2llX21hbmFnZXIod2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KG1fd2ViVmlldykp
KQorICAgICAgICAsIG1fYWNjZXB0UG9saWN5KFdFQktJVF9DT09LSUVfUE9MSUNZX0FDQ0VQVF9O
T19USElSRF9QQVJUWSkKKyAgICAgICAgLCBtX2RvbWFpbnMoMCkKKyAgICAgICAgLCBtX2Nvb2tp
ZXNDaGFuZ2VkKGZhbHNlKQorICAgICAgICAsIG1fZmluaXNoTG9vcFdoZW5Db29raWVzQ2hhbmdl
KGZhbHNlKQorICAgIHsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX2Nvb2tpZU1hbmFnZXIs
ICJjaGFuZ2VkIiwgR19DQUxMQkFDSyhjb29raWVzQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7Cisg
ICAgfQorCisgICAgfkNvb2tpZU1hbmFnZXJUZXN0KCkKKyAgICB7CisgICAgICAgIGdfc3RyZnJl
ZXYobV9kb21haW5zKTsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRj
aGVkKG1fY29va2llTWFuYWdlciwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhp
cyk7CisgICAgICAgIGlmIChtX2Nvb2tpZXNUZXh0RmlsZSkKKyAgICAgICAgICAgIGdfdW5saW5r
KG1fY29va2llc1RleHRGaWxlLmdldCgpKTsKKyAgICAgICAgaWYgKG1fY29va2llc1NRTGl0ZUZp
bGUpCisgICAgICAgICAgICBnX3VubGluayhtX2Nvb2tpZXNTUUxpdGVGaWxlLmdldCgpKTsKKyAg
ICB9CisKKyAgICB2b2lkIHNldFBlcnNpc3RlbnRTdG9yYWdlKFdlYktpdENvb2tpZVBlcnNpc3Rl
bnRTdG9yYWdlIHN0b3JhZ2UpCisgICAgeworICAgICAgICBjb25zdCBjaGFyKiBmaWxlbmFtZSA9
IDA7CisgICAgICAgIHN3aXRjaCAoc3RvcmFnZSkgeworICAgICAgICBjYXNlIFdFQktJVF9DT09L
SUVfUEVSU0lTVEVOVF9TVE9SQUdFX1RFWFQ6CisgICAgICAgICAgICBpZiAoIW1fY29va2llc1Rl
eHRGaWxlKQorICAgICAgICAgICAgICAgIG1fY29va2llc1RleHRGaWxlLnNldChnX2J1aWxkX2Zp
bGVuYW1lKGtUZW1wRGlyZWN0b3J5LCAiY29va2llcy50eHQiLCBOVUxMKSk7CisgICAgICAgICAg
ICBmaWxlbmFtZSA9IG1fY29va2llc1RleHRGaWxlLmdldCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgV0VCS0lUX0NPT0tJRV9QRVJTSVNURU5UX1NUT1JBR0VfU1FMSVRFOgor
ICAgICAgICAgICAgaWYgKCFtX2Nvb2tpZXNTUUxpdGVGaWxlKQorICAgICAgICAgICAgICAgIG1f
Y29va2llc1NRTGl0ZUZpbGUuc2V0KGdfYnVpbGRfZmlsZW5hbWUoa1RlbXBEaXJlY3RvcnksICJj
b29raWVzLmRiIiwgTlVMTCkpOworICAgICAgICAgICAgZmlsZW5hbWUgPSBtX2Nvb2tpZXNTUUxp
dGVGaWxlLmdldCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgICAgICB9CisgICAgICAgIHdlYmtp
dF9jb29raWVfbWFuYWdlcl9zZXRfcGVyc2lzdGVudF9zdG9yYWdlKG1fY29va2llTWFuYWdlciwg
ZmlsZW5hbWUsIHN0b3JhZ2UpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGdldEFjY2VwdFBv
bGljeVJlYWR5Q2FsbGJhY2soR09iamVjdCogb2JqZWN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwg
Z3BvaW50ZXIgdXNlckRhdGEpCisgICAgeworICAgICAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7
CisgICAgICAgIFdlYktpdENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kgPSB3ZWJraXRfY29va2ll
X21hbmFnZXJfZ2V0X2FjY2VwdF9wb2xpY3lfZmluaXNoKFdFQktJVF9DT09LSUVfTUFOQUdFUihv
YmplY3QpLCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSk7CisgICAgICAgIGdfYXNzZXJ0KCFlcnJv
ci5nZXQoKSk7CisKKyAgICAgICAgQ29va2llTWFuYWdlclRlc3QqIHRlc3QgPSBzdGF0aWNfY2Fz
dDxDb29raWVNYW5hZ2VyVGVzdCo+KHVzZXJEYXRhKTsKKyAgICAgICAgdGVzdC0+bV9hY2NlcHRQ
b2xpY3kgPSBwb2xpY3k7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9v
cCk7CisgICAgfQorCisgICAgV2ViS2l0Q29va2llQWNjZXB0UG9saWN5IGdldEFjY2VwdFBvbGlj
eSgpCisgICAgeworICAgICAgICBtX2FjY2VwdFBvbGljeSA9IFdFQktJVF9DT09LSUVfUE9MSUNZ
X0FDQ0VQVF9OT19USElSRF9QQVJUWTsKKyAgICAgICAgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dl
dF9hY2NlcHRfcG9saWN5KG1fY29va2llTWFuYWdlciwgMCwgZ2V0QWNjZXB0UG9saWN5UmVhZHlD
YWxsYmFjaywgdGhpcyk7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKwor
ICAgICAgICByZXR1cm4gbV9hY2NlcHRQb2xpY3k7CisgICAgfQorCisgICAgdm9pZCBzZXRBY2Nl
cHRQb2xpY3koV2ViS2l0Q29va2llQWNjZXB0UG9saWN5IHBvbGljeSkKKyAgICB7CisgICAgICAg
IHdlYmtpdF9jb29raWVfbWFuYWdlcl9zZXRfYWNjZXB0X3BvbGljeShtX2Nvb2tpZU1hbmFnZXIs
IHBvbGljeSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZ2V0RG9tYWluc1JlYWR5Q2FsbGJh
Y2soR09iamVjdCogb2JqZWN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRh
dGEpCisgICAgeworICAgICAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgICAgIGNoYXIq
KiBkb21haW5zID0gd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9kb21haW5zX3dpdGhfY29va2ll
c19maW5pc2goV0VCS0lUX0NPT0tJRV9NQU5BR0VSKG9iamVjdCksIHJlc3VsdCwgJmVycm9yLm91
dFB0cigpKTsKKyAgICAgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKworICAgICAgICBDb29r
aWVNYW5hZ2VyVGVzdCogdGVzdCA9IHN0YXRpY19jYXN0PENvb2tpZU1hbmFnZXJUZXN0Kj4odXNl
ckRhdGEpOworICAgICAgICB0ZXN0LT5tX2RvbWFpbnMgPSBkb21haW5zOworICAgICAgICBnX21h
aW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworICAgIH0KKworICAgIGNoYXIqKiBnZXRE
b21haW5zKCkKKyAgICB7CisgICAgICAgIGdfc3RyZnJlZXYobV9kb21haW5zKTsKKyAgICAgICAg
bV9kb21haW5zID0gMDsKKyAgICAgICAgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9kb21haW5z
X3dpdGhfY29va2llcyhtX2Nvb2tpZU1hbmFnZXIsIDAsIGdldERvbWFpbnNSZWFkeUNhbGxiYWNr
LCB0aGlzKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworCisgICAgICAg
IHJldHVybiBtX2RvbWFpbnM7CisgICAgfQorCisgICAgYm9vbCBoYXNEb21haW4oY29uc3QgY2hh
ciogZG9tYWluKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2RvbWFpbnMpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IG1fZG9tYWluc1tpXTsg
KytpKQorICAgICAgICAgICAgaWYgKGdfc3RyX2VxdWFsKG1fZG9tYWluc1tpXSwgZG9tYWluKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHZvaWQgZGVsZXRlQ29va2llc0ZvckRvbWFpbihjb25zdCBjaGFyKiBkb21haW4p
CisgICAgeworICAgICAgICB3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZXNfZm9y
X2RvbWFpbihtX2Nvb2tpZU1hbmFnZXIsIGRvbWFpbik7CisgICAgfQorCisgICAgdm9pZCBkZWxl
dGVBbGxDb29raWVzKCkKKyAgICB7CisgICAgICAgIHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxl
dGVfYWxsX2Nvb2tpZXMobV9jb29raWVNYW5hZ2VyKTsKKyAgICB9CisKKyAgICB2b2lkIHdhaXRV
bnRpbENvb2tpZXNDaGFuZ2VkKCkKKyAgICB7CisgICAgICAgIG1fY29va2llc0NoYW5nZWQgPSBm
YWxzZTsKKyAgICAgICAgbV9maW5pc2hMb29wV2hlbkNvb2tpZXNDaGFuZ2UgPSB0cnVlOworICAg
ICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgICAgIG1fZmluaXNoTG9vcFdo
ZW5Db29raWVzQ2hhbmdlID0gZmFsc2U7CisgICAgfQorCisgICAgV2ViS2l0Q29va2llTWFuYWdl
ciogbV9jb29raWVNYW5hZ2VyOworICAgIFdlYktpdENvb2tpZUFjY2VwdFBvbGljeSBtX2FjY2Vw
dFBvbGljeTsKKyAgICBjaGFyKiogbV9kb21haW5zOworICAgIGJvb2wgbV9jb29raWVzQ2hhbmdl
ZDsKKyAgICBib29sIG1fZmluaXNoTG9vcFdoZW5Db29raWVzQ2hhbmdlOworICAgIEdPd25QdHI8
Y2hhcj4gbV9jb29raWVzVGV4dEZpbGU7CisgICAgR093blB0cjxjaGFyPiBtX2Nvb2tpZXNTUUxp
dGVGaWxlOworfTsKKworc3RhdGljIHZvaWQgdGVzdENvb2tpZU1hbmFnZXJBY2NlcHRQb2xpY3ko
Q29va2llTWFuYWdlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8gRGVmYXVs
dCBwb2xpY3kgaXMgTk9fVEhJUkRfUEFSVFkuCisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPmdl
dEFjY2VwdFBvbGljeSgpLCA9PSwgV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX05PX1RISVJE
X1BBUlRZKTsKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbmRl
eC5odG1sIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAg
ICBjaGFyKiogZG9tYWlucyA9IHRlc3QtPmdldERvbWFpbnMoKTsKKyAgICBnX2Fzc2VydChkb21h
aW5zKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aChkb21haW5zKSwgPT0sIDEp
OworICAgIGdfYXNzZXJ0X2NtcHN0cihkb21haW5zWzBdLCA9PSwga0ZpcnN0UGFydHlEb21haW4p
OworICAgIHRlc3QtPmRlbGV0ZUFsbENvb2tpZXMoKTsKKworICAgIHRlc3QtPnNldEFjY2VwdFBv
bGljeShXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfQUxXQVlTKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQodGVzdC0+Z2V0QWNjZXB0UG9saWN5KCksID09LCBXRUJLSVRfQ09PS0lFX1BPTElDWV9B
Q0NFUFRfQUxXQVlTKTsKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgo
Ii9pbmRleC5odG1sIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQo
KTsKKyAgICBkb21haW5zID0gdGVzdC0+Z2V0RG9tYWlucygpOworICAgIGdfYXNzZXJ0KGRvbWFp
bnMpOworICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKGRvbWFpbnMpLCA9PSwgMik7
CisgICAgZ19hc3NlcnQodGVzdC0+aGFzRG9tYWluKGtGaXJzdFBhcnR5RG9tYWluKSk7CisgICAg
Z19hc3NlcnQodGVzdC0+aGFzRG9tYWluKGtUaGlyZFBhcnR5RG9tYWluKSk7CisgICAgdGVzdC0+
ZGVsZXRlQWxsQ29va2llcygpOworCisgICAgdGVzdC0+c2V0QWNjZXB0UG9saWN5KFdFQktJVF9D
T09LSUVfUE9MSUNZX0FDQ0VQVF9ORVZFUik7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPmdl
dEFjY2VwdFBvbGljeSgpLCA9PSwgV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX05FVkVSKTsK
KyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbmRleC5odG1sIiku
ZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBkb21haW5z
ID0gdGVzdC0+Z2V0RG9tYWlucygpOworICAgIGdfYXNzZXJ0KGRvbWFpbnMpOworICAgIGdfYXNz
ZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKGRvbWFpbnMpLCA9PSwgMCk7Cit9CisKK3N0YXRpYyB2
b2lkIHRlc3RDb29raWVNYW5hZ2VyRGVsZXRlQ29va2llcyhDb29raWVNYW5hZ2VyVGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5zZXRBY2NlcHRQb2xpY3koV0VCS0lUX0NP
T0tJRV9QT0xJQ1lfQUNDRVBUX0FMV0FZUyk7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5n
ZXRVUklGb3JQYXRoKCIvaW5kZXguaHRtbCIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGls
TG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgodGVzdC0+
Z2V0RG9tYWlucygpKSwgPT0sIDIpOworCisgICAgLy8gRGVsZXRlIGZpcnN0IHBhcnR5IGNvb2tp
ZXMuCisgICAgdGVzdC0+ZGVsZXRlQ29va2llc0ZvckRvbWFpbihrRmlyc3RQYXJ0eURvbWFpbik7
CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlucygpKSwg
PT0sIDEpOworCisgICAgLy8gRGVsZXRlIHRoaXJkIHBhcnR5IGNvb2tpZXMuCisgICAgdGVzdC0+
ZGVsZXRlQ29va2llc0ZvckRvbWFpbihrVGhpcmRQYXJ0eURvbWFpbik7CisgICAgZ19hc3NlcnRf
Y21waW50KGdfc3Rydl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlucygpKSwgPT0sIDApOworCisgICAg
dGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvaW5kZXguaHRtbCIpLmRhdGEo
KSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnRfY21w
aW50KGdfc3Rydl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlucygpKSwgPT0sIDIpOworCisgICAgLy8g
RGVsZXRlIGFsbCBjb29raWVzLgorICAgIHRlc3QtPmRlbGV0ZUFsbENvb2tpZXMoKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0LT5nZXREb21haW5zKCkpLCA9PSwgMCk7
Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RDb29raWVNYW5hZ2VyQ29va2llc0NoYW5nZWQoQ29va2ll
TWFuYWdlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgZ19hc3NlcnQoIXRlc3Qt
Pm1fY29va2llc0NoYW5nZWQpOworICAgIHRlc3QtPnNldEFjY2VwdFBvbGljeShXRUJLSVRfQ09P
S0lFX1BPTElDWV9BQ0NFUFRfQUxXQVlTKTsKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdl
dFVSSUZvclBhdGgoIi9pbmRleC5odG1sIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxM
b2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX2Nvb2tpZXNDaGFuZ2VkKTsKKwor
ICAgIHRlc3QtPmRlbGV0ZUNvb2tpZXNGb3JEb21haW4oa0ZpcnN0UGFydHlEb21haW4pOworICAg
IHRlc3QtPndhaXRVbnRpbENvb2tpZXNDaGFuZ2VkKCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9j
b29raWVzQ2hhbmdlZCk7CisKKyAgICB0ZXN0LT5kZWxldGVBbGxDb29raWVzKCk7CisgICAgdGVz
dC0+d2FpdFVudGlsQ29va2llc0NoYW5nZWQoKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX2Nvb2tp
ZXNDaGFuZ2VkKTsKK30KKworc3RhdGljIHZvaWQgdGVzdENvb2tpZU1hbmFnZXJQZXJzaXN0ZW50
U3RvcmFnZShDb29raWVNYW5hZ2VyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0
ZXN0LT5zZXRBY2NlcHRQb2xpY3koV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX0FMV0FZUyk7
CisKKyAgICAvLyBUZXh0IHN0b3JhZ2UgdXNpbmcgYSBuZXcgZmlsZS4KKyAgICB0ZXN0LT5zZXRQ
ZXJzaXN0ZW50U3RvcmFnZShXRUJLSVRfQ09PS0lFX1BFUlNJU1RFTlRfU1RPUkFHRV9URVhUKTsK
KyAgICBjaGFyKiogZG9tYWlucyA9IHRlc3QtPmdldERvbWFpbnMoKTsKKyAgICBnX2Fzc2VydChk
b21haW5zKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aChkb21haW5zKSwgPT0s
IDApOworCisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvaW5kZXgu
aHRtbCIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAg
Z19hc3NlcnQodGVzdC0+bV9jb29raWVzQ2hhbmdlZCk7CisgICAgZG9tYWlucyA9IHRlc3QtPmdl
dERvbWFpbnMoKTsKKyAgICBnX2Fzc2VydChkb21haW5zKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
Z19zdHJ2X2xlbmd0aChkb21haW5zKSwgPT0sIDIpOworCisKKyAgICAvLyBTUUxpdGUgc3RvcmFn
ZSB1c2luZyBhIG5ldyBmaWxlLgorICAgIHRlc3QtPnNldFBlcnNpc3RlbnRTdG9yYWdlKFdFQktJ
VF9DT09LSUVfUEVSU0lTVEVOVF9TVE9SQUdFX1NRTElURSk7CisgICAgZG9tYWlucyA9IHRlc3Qt
PmdldERvbWFpbnMoKTsKKyAgICBnX2Fzc2VydChkb21haW5zKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoZ19zdHJ2X2xlbmd0aChkb21haW5zKSwgPT0sIDApOworCisgICAgdGVzdC0+bG9hZFVSSShr
U2VydmVyLT5nZXRVUklGb3JQYXRoKCIvaW5kZXguaHRtbCIpLmRhdGEoKSk7CisgICAgdGVzdC0+
d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9jb29raWVzQ2hh
bmdlZCk7CisgICAgZG9tYWlucyA9IHRlc3QtPmdldERvbWFpbnMoKTsKKyAgICBnX2Fzc2VydChk
b21haW5zKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aChkb21haW5zKSwgPT0s
IDIpOworCisgICAgLy8gVGV4dCBzdG9yYWdlIHVzaW5nIGFuIGV4aXN0aW5nIGZpbGUuCisgICAg
dGVzdC0+c2V0UGVyc2lzdGVudFN0b3JhZ2UoV0VCS0lUX0NPT0tJRV9QRVJTSVNURU5UX1NUT1JB
R0VfVEVYVCk7CisgICAgZG9tYWlucyA9IHRlc3QtPmdldERvbWFpbnMoKTsKKyAgICBnX2Fzc2Vy
dChkb21haW5zKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aChkb21haW5zKSwg
PT0sIDIpOworICAgIHRlc3QtPmRlbGV0ZUFsbENvb2tpZXMoKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoZ19zdHJ2X2xlbmd0aCh0ZXN0LT5nZXREb21haW5zKCkpLCA9PSwgMCk7CisKKyAgICAvLyBT
UUxpdGUgc3RvcmFnZSB3aXRoIGFuIGV4aXN0aW5nIGZpbGUuCisgICAgdGVzdC0+c2V0UGVyc2lz
dGVudFN0b3JhZ2UoV0VCS0lUX0NPT0tJRV9QRVJTSVNURU5UX1NUT1JBR0VfU1FMSVRFKTsKKyAg
ICBkb21haW5zID0gdGVzdC0+Z2V0RG9tYWlucygpOworICAgIGdfYXNzZXJ0KGRvbWFpbnMpOwor
ICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKGRvbWFpbnMpLCA9PSwgMik7CisgICAg
dGVzdC0+ZGVsZXRlQWxsQ29va2llcygpOworICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVu
Z3RoKHRlc3QtPmdldERvbWFpbnMoKSksID09LCAwKTsKK30KKworc3RhdGljIHZvaWQgc2VydmVy
Q2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3Qg
Y2hhciogcGF0aCwgR0hhc2hUYWJsZSosIFNvdXBDbGllbnRDb250ZXh0KiwgZ3BvaW50ZXIpCit7
CisgICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKKyAgICAgICAg
c291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVO
VEVEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9zZXRfc3Rh
dHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKKyAgICBpZiAoZ19zdHJfZXF1YWwocGF0aCwg
Ii9pbmRleC5odG1sIikpIHsKKyAgICAgICAgY2hhciogaW5kZXhIdG1sID0gZ19zdHJkdXBfcHJp
bnRmKGtJbmRleEh0bWxGb3JtYXQsIHNvdXBfc2VydmVyX2dldF9wb3J0KHNlcnZlcikpOworICAg
ICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19yZXBsYWNlKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRl
cnMsICJTZXQtQ29va2llIiwgImZvbz1iYXI7IE1heC1BZ2U9NjAiKTsKKyAgICAgICAgc291cF9t
ZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RB
S0UsIGluZGV4SHRtbCwgc3RybGVuKGluZGV4SHRtbCkpOworICAgIH0gZWxzZSBpZiAoZ19zdHJf
ZXF1YWwocGF0aCwgIi9pbWFnZS5wbmciKSkKKyAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNf
cmVwbGFjZShtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiU2V0LUNvb2tpZSIsICJiYXo9cXV4
OyBNYXgtQWdlPTYwIik7CisgICAgZWxzZQorICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1
cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfRk9VTkQpOworICAgIHNvdXBfbWVzc2FnZV9ib2R5
X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOworfQorCit2b2lkIGJlZm9yZUFsbCgp
Cit7CisgICAga1NlcnZlciA9IG5ldyBXZWJLaXRUZXN0U2VydmVyKCk7CisgICAga1NlcnZlci0+
cnVuKHNlcnZlckNhbGxiYWNrKTsKKworICAgIGtUZW1wRGlyZWN0b3J5ID0gZ19kaXJfbWFrZV90
bXAoIldlYktpdDJUZXN0cy1YWFhYWFgiLCAwKTsKKyAgICBnX2Fzc2VydChrVGVtcERpcmVjdG9y
eSk7CisKKyAgICBDb29raWVNYW5hZ2VyVGVzdDo6YWRkKCJXZWJLaXRDb29raWVNYW5hZ2VyIiwg
ImFjY2VwdC1wb2xpY3kiLCB0ZXN0Q29va2llTWFuYWdlckFjY2VwdFBvbGljeSk7CisgICAgQ29v
a2llTWFuYWdlclRlc3Q6OmFkZCgiV2ViS2l0Q29va2llTWFuYWdlciIsICJkZWxldGUtY29va2ll
cyIsIHRlc3RDb29raWVNYW5hZ2VyRGVsZXRlQ29va2llcyk7CisgICAgQ29va2llTWFuYWdlclRl
c3Q6OmFkZCgiV2ViS2l0Q29va2llTWFuYWdlciIsICJjb29raWVzLWNoYW5nZWQiLCB0ZXN0Q29v
a2llTWFuYWdlckNvb2tpZXNDaGFuZ2VkKTsKKyAgICBDb29raWVNYW5hZ2VyVGVzdDo6YWRkKCJX
ZWJLaXRDb29raWVNYW5hZ2VyIiwgInBlcnNpc3RlbnQtc3RvcmFnZSIsIHRlc3RDb29raWVNYW5h
Z2VyUGVyc2lzdGVudFN0b3JhZ2UpOworfQorCit2b2lkIGFmdGVyQWxsKCkKK3sKKyAgICBkZWxl
dGUga1NlcnZlcjsKKyAgICBnX3JtZGlyKGtUZW1wRGlyZWN0b3J5KTsKK30KZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0RE9NRE9NV2luZG93LmNw
cCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0RE9NRE9NV2luZG93
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGM2ZTEwCi0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RET01E
T01XaW5kb3cuY3BwCkBAIC0wLDAgKzEsMTUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJXZWJQcm9jZXNz
VGVzdFJ1bm5lci5oIgorI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCisjaW5jbHVkZSA8Z3RrL2d0
ay5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgorCisjZGVmaW5lIEhUTUxfRE9DVU1F
TlQgIjxodG1sPjxoZWFkPjx0aXRsZT48L3RpdGxlPjwvaGVhZD48c3R5bGUgdHlwZT0ndGV4dC9j
c3MnPiN0ZXN0IHsgZm9udC1zaXplOiAxNnB4OyB9PC9zdHlsZT48Ym9keT48cCBpZD0ndGVzdCc+
dGVzdDwvcD48L2JvZHk+PC9odG1sPiIKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGdib29sZWFu
IGxvYWRlZDsKKyAgICBnYm9vbGVhbiBjbGlja2VkOworICAgIFdlYlByb2Nlc3NUZXN0UnVubmVy
KiB0ZXN0UnVubmVyOworICAgIFdlYlZpZXdUZXN0KiB0ZXN0OworfSBEb21Eb21XaW5kb3dUZXN0
U3RhdHVzOworCitzdGF0aWMgRG9tRG9tV2luZG93VGVzdFN0YXR1cyBzdGF0dXM7CisKK3N0YXRp
YyB2b2lkIHNpZ25hbHNOb3RpZnlDYWxsYmFjayhjb25zdCBnY2hhciAqa2V5LCBjb25zdCBnY2hh
ciAqdmFsdWUsIGdjb25zdHBvaW50ZXIpCit7CisgICAgaWYgKGdfc3RyX2VxdWFsKGtleSwgInJl
YWR5IikpIHsKKyAgICAgICAgLy8gVGhlIGRvY3VtZW50IHdhcyBhbHJlYWR5IGxvYWRlZCBpbiB0
aGUgd2VicHJvY2VzcywgYW5kIGl0cyAibG9hZCIKKyAgICAgICAgLy8gc2lnbmFsIGNvdWxkbid0
IGJlIGNhcHR1cmVkIG9uIHRpbWUgKHdhcyBpc3N1ZWQgYmVmb3JlIHRoZSB0ZXN0CisgICAgICAg
IC8vIHN0YXJ0ZWQpLiBXZSBsb2FkIGl0IGFnYWluIHRvIGZvcmNlIGEgbmV3ICJsb2FkIiBzaWdu
YWwgaW4gdGhlCisgICAgICAgIC8vIHdlYnByb2Nlc3MsIHdoaWNoIHdpbGwgYmUgY2FwdHVyZWQg
dGhpcyB0aW1lCisgICAgICAgIHN0YXR1cy50ZXN0LT5sb2FkSHRtbChIVE1MX0RPQ1VNRU5ULCAw
KTsKKyAgICB9CisKKyAgICBpZiAoZ19zdHJfZXF1YWwoa2V5LCAibG9hZGVkIikpIHsKKyAgICAg
ICAgc3RhdHVzLmxvYWRlZCA9IFRSVUU7CisgICAgICAgIHN0YXR1cy50ZXN0LT5zaG93SW5XaW5k
b3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKKworICAgICAgICAvLyBDbGljayBpbiBhIGtub3duIGxv
Y2F0aW9uIHdoZXJlIHRoZSB0ZXh0IGlzCisgICAgICAgIHN0YXR1cy50ZXN0LT5jbGlja01vdXNl
QnV0dG9uKDIwLCAxOCwgMSwgMCk7CisgICAgfQorCisgICAgaWYgKGdfc3RyX2VxdWFsKGtleSwg
ImNsaWNrZWQiKSkKKyAgICAgICAgc3RhdHVzLmNsaWNrZWQgPSBUUlVFOworCisgICAgaWYgKGdf
c3RyX2VxdWFsKGtleSwgImZpbmlzaCIpKSB7CisgICAgICAgIHN0YXR1cy50ZXN0ID0gMDsKKyAg
ICAgICAgc3RhdHVzLnRlc3RSdW5uZXItPmZpbmlzaFRlc3Qoc3RhdHVzLmxvYWRlZCAmJiBzdGF0
dXMuY2xpY2tlZCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBkaXNwYXRjaEV2ZW50Tm90aWZ5
Q2FsbGJhY2soY29uc3QgZ2NoYXIgKmtleSwgY29uc3QgZ2NoYXIgKnZhbHVlLCBnY29uc3Rwb2lu
dGVyKQoreworICAgIGlmIChnX3N0cl9lcXVhbChrZXksICJyZWFkeSIpKSB7CisgICAgICAgIC8v
IFRoZSBkb2N1bWVudCB3YXMgYWxyZWFkeSBsb2FkZWQgaW4gdGhlIHdlYnByb2Nlc3MsIGFuZCBp
dHMgImxvYWQiCisgICAgICAgIC8vIHNpZ25hbCBjb3VsZG4ndCBiZSBjYXB0dXJlZCBvbiB0aW1l
ICh3YXMgaXNzdWVkIGJlZm9yZSB0aGUgdGVzdAorICAgICAgICAvLyBzdGFydGVkKS4gV2UgbG9h
ZCBpdCBhZ2FpbiB0byBmb3JjZSBhIG5ldyAibG9hZCIgc2lnbmFsIGluIHRoZQorICAgICAgICAv
LyB3ZWJwcm9jZXNzLCB3aGljaCB3aWxsIGJlIGNhcHR1cmVkIHRoaXMgdGltZQorICAgICAgICBz
dGF0dXMudGVzdC0+bG9hZEh0bWwoSFRNTF9ET0NVTUVOVCwgMCk7CisgICAgfQorCisgICAgaWYg
KGdfc3RyX2VxdWFsKGtleSwgImxvYWRlZCIpKQorICAgICAgICBzdGF0dXMubG9hZGVkID0gVFJV
RTsKKworICAgIGlmIChnX3N0cl9lcXVhbChrZXksICJjbGlja2VkIikpCisgICAgICAgIHN0YXR1
cy5jbGlja2VkID0gVFJVRTsKKworICAgIGlmIChnX3N0cl9lcXVhbChrZXksICJmaW5pc2giKSkg
eworICAgICAgICBzdGF0dXMudGVzdCA9IDA7CisgICAgICAgIHN0YXR1cy50ZXN0UnVubmVyLT5m
aW5pc2hUZXN0KHN0YXR1cy5sb2FkZWQgJiYgc3RhdHVzLmNsaWNrZWQpOworICAgIH0KK30KKwor
c3RhdGljIHZvaWQgdGVzdFdlYktpdERPTURPTVdpbmRvd1NpZ25hbHMoV2ViVmlld1Rlc3QqIHRl
c3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgc3RhdHVzLmxvYWRlZCA9IEZBTFNFOworICAgIHN0
YXR1cy5jbGlja2VkID0gRkFMU0U7CisgICAgc3RhdHVzLnRlc3QgPSB0ZXN0OworCisgICAgc3Rh
dHVzLnRlc3RSdW5uZXItPnNldE5vdGlmeUNhbGxiYWNrKEdfQ0FMTEJBQ0soc2lnbmFsc05vdGlm
eUNhbGxiYWNrKSwgMCk7CisKKyAgICAvLyBUaGUgSFRNTCBkb2N1bWVudCB3aWxsIHdlIGxvYWRl
ZCBsYXRlciwgd2hlbiB0aGUgdGVzdCBpcyAicmVhZHkiIGJlY2F1c2UKKyAgICAvLyB3ZSB3YW50
IHRvIHRlc3QgdGhlICJsb2FkIiBzaWduYWwKKworICAgIEdWYXJpYW50QnVpbGRlciBidWlsZGVy
OworICAgIGdfdmFyaWFudF9idWlsZGVyX2luaXQoJmJ1aWxkZXIsIEdfVkFSSUFOVF9UWVBFX1ZB
UkRJQ1QpOworICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZCgmYnVpbGRlciwgIntzdn0iLCAicGFn
ZUlEIiwgZ192YXJpYW50X25ld191aW50NjQod2Via2l0X3dlYl92aWV3X2dldF9wYWdlX2lkKHN0
YXR1cy50ZXN0LT5tX3dlYlZpZXcpKSk7CisgICAgc3RhdHVzLnRlc3RSdW5uZXItPnJ1blRlc3RB
bmRXYWl0KCJXZWJLaXRET01ET01XaW5kb3ciLCAic2lnbmFscyIsIGdfdmFyaWFudF9idWlsZGVy
X2VuZCgmYnVpbGRlcikpOworICAgIGdfYXNzZXJ0KHN0YXR1cy50ZXN0UnVubmVyLT5nZXRUZXN0
UmVzdWx0KCkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViS2l0RE9NRE9NV2luZG93RGlzcGF0
Y2hFdmVudChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBzdGF0dXMu
bG9hZGVkID0gRkFMU0U7CisgICAgc3RhdHVzLmNsaWNrZWQgPSBGQUxTRTsKKyAgICBzdGF0dXMu
dGVzdCA9IHRlc3Q7CisKKyAgICBzdGF0dXMudGVzdFJ1bm5lci0+c2V0Tm90aWZ5Q2FsbGJhY2so
R19DQUxMQkFDSyhkaXNwYXRjaEV2ZW50Tm90aWZ5Q2FsbGJhY2spLCAwKTsKKworICAgIC8vIFRo
ZSBIVE1MIGRvY3VtZW50IHdpbGwgd2UgbG9hZGVkIGxhdGVyLCB3aGVuIHRoZSB0ZXN0IGlzICJy
ZWFkeSIgYmVjYXVzZQorICAgIC8vIHdlIHdhbnQgdG8gdGVzdCB0aGUgImxvYWQiIHNpZ25hbAor
CisgICAgR1ZhcmlhbnRCdWlsZGVyIGJ1aWxkZXI7CisgICAgZ192YXJpYW50X2J1aWxkZXJfaW5p
dCgmYnVpbGRlciwgR19WQVJJQU5UX1RZUEVfVkFSRElDVCk7CisgICAgZ192YXJpYW50X2J1aWxk
ZXJfYWRkKCZidWlsZGVyLCAie3N2fSIsICJwYWdlSUQiLCBnX3ZhcmlhbnRfbmV3X3VpbnQ2NCh3
ZWJraXRfd2ViX3ZpZXdfZ2V0X3BhZ2VfaWQoc3RhdHVzLnRlc3QtPm1fd2ViVmlldykpKTsKKyAg
ICBzdGF0dXMudGVzdFJ1bm5lci0+cnVuVGVzdEFuZFdhaXQoIldlYktpdERPTURPTVdpbmRvdyIs
ICJkaXNwYXRjaC1ldmVudCIsIGdfdmFyaWFudF9idWlsZGVyX2VuZCgmYnVpbGRlcikpOworICAg
IGdfYXNzZXJ0KHN0YXR1cy50ZXN0UnVubmVyLT5nZXRUZXN0UmVzdWx0KCkpOworfQorCitzdGF0
aWMgdm9pZCB0ZXN0V2ViS2l0RE9NRE9NV2luZG93R2V0Q29tcHV0ZWRTdHlsZShXZWJWaWV3VGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBzdGF0dXMubG9hZGVkID0gRkFMU0U7Cisg
ICAgc3RhdHVzLmNsaWNrZWQgPSBGQUxTRTsKKyAgICBzdGF0dXMudGVzdCA9IHRlc3Q7CisKKyAg
ICBzdGF0aWMgY29uc3QgY2hhciogdGVzdEhUTUwgPSBIVE1MX0RPQ1VNRU5UOworICAgIHN0YXR1
cy50ZXN0LT5sb2FkSHRtbCh0ZXN0SFRNTCwgMCk7CisgICAgc3RhdHVzLnRlc3QtPndhaXRVbnRp
bExvYWRGaW5pc2hlZCgpOworCisgICAgR1ZhcmlhbnRCdWlsZGVyIGJ1aWxkZXI7CisgICAgZ192
YXJpYW50X2J1aWxkZXJfaW5pdCgmYnVpbGRlciwgR19WQVJJQU5UX1RZUEVfVkFSRElDVCk7Cisg
ICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKCZidWlsZGVyLCAie3N2fSIsICJwYWdlSUQiLCBnX3Zh
cmlhbnRfbmV3X3VpbnQ2NCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3BhZ2VfaWQoc3RhdHVzLnRlc3Qt
Pm1fd2ViVmlldykpKTsKKyAgICBnX2Fzc2VydChzdGF0dXMudGVzdFJ1bm5lci0+cnVuVGVzdCgi
V2ViS2l0RE9NRE9NV2luZG93IiwgImdldC1jb21wdXRlZC1zdHlsZSIsIGdfdmFyaWFudF9idWls
ZGVyX2VuZCgmYnVpbGRlcikpKTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQoreworICAgIHN0YXR1
cy50ZXN0UnVubmVyID0gbmV3IFdlYlByb2Nlc3NUZXN0UnVubmVyKCk7CisgICAgd2Via2l0X3dl
Yl9jb250ZXh0X3NldF93ZWJfZXh0ZW5zaW9uc19kaXJlY3Rvcnkod2Via2l0X3dlYl9jb250ZXh0
X2dldF9kZWZhdWx0KCksIFdFQktJVF9URVNUX1dFQl9FWFRFTlNJT05TX0RJUik7CisKKyAgICBX
ZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRET01ET01XaW5kb3ciLCAic2lnbmFscyIsIHRlc3RXZWJL
aXRET01ET01XaW5kb3dTaWduYWxzKTsKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRET01E
T01XaW5kb3ciLCAiZGlzcGF0Y2gtZXZlbnQiLCB0ZXN0V2ViS2l0RE9NRE9NV2luZG93RGlzcGF0
Y2hFdmVudCk7CisgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0RE9NRE9NV2luZG93IiwgImdl
dC1jb21wdXRlZC1zdHlsZSIsIHRlc3RXZWJLaXRET01ET01XaW5kb3dHZXRDb21wdXRlZFN0eWxl
KTsKK30KKwordm9pZCBhZnRlckFsbCgpCit7CisgICAgZGVsZXRlIHN0YXR1cy50ZXN0UnVubmVy
OworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rl
c3RET01Ob2RlLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0
RE9NTm9kZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQzMjA3Nwot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9U
ZXN0RE9NTm9kZS5jcHAKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiV2ViUHJvY2Vz
c1Rlc3RSdW5uZXIuaCIKKyNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgorI2luY2x1ZGUgPGd0ay9n
dGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdDIuaD4KKworc3RhdGljIFdlYlByb2Nlc3NU
ZXN0UnVubmVyKiB0ZXN0UnVubmVyOworCitzdGF0aWMgdm9pZCB0ZXN0V2ViS2l0RE9NTm9kZUhp
ZXJhcmNoeU5hdmlnYXRpb24oV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7Cisg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIHRlc3RIVE1MID0gIjxodG1sPjxoZWFkPjx0aXRsZT5UaGlz
IGlzIHRoZSB0aXRsZTwvdGl0bGU+PC9oZWFkPjxib2R5PjxwPjE8L3A+PHA+MjwvcD48cD4zPC9w
PjwvYm9keT48L2h0bWw+IjsKKyAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0SFRNTCwgMCk7CisgICAg
dGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBHVmFyaWFudEJ1aWxkZXIgYnVp
bGRlcjsKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9pbml0KCZidWlsZGVyLCBHX1ZBUklBTlRfVFlQ
RV9WQVJESUNUKTsKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoJmJ1aWxkZXIsICJ7c3Z9Iiwg
InBhZ2VJRCIsIGdfdmFyaWFudF9uZXdfdWludDY0KHdlYmtpdF93ZWJfdmlld19nZXRfcGFnZV9p
ZCh0ZXN0LT5tX3dlYlZpZXcpKSk7CisgICAgZ19hc3NlcnQodGVzdFJ1bm5lci0+cnVuVGVzdCgi
V2ViS2l0RE9NTm9kZSIsICJoaWVyYXJjaHktbmF2aWdhdGlvbiIsIGdfdmFyaWFudF9idWlsZGVy
X2VuZCgmYnVpbGRlcikpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYktpdERPTU5vZGVJbnNl
cnRpb24oV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgc3RhdGljIGNv
bnN0IGNoYXIqIHRlc3RIVE1MID0gIjxodG1sPjxib2R5PjwvYm9keT48L2h0bWw+IjsKKyAgICB0
ZXN0LT5sb2FkSHRtbCh0ZXN0SFRNTCwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlz
aGVkKCk7CisKKyAgICBHVmFyaWFudEJ1aWxkZXIgYnVpbGRlcjsKKyAgICBnX3ZhcmlhbnRfYnVp
bGRlcl9pbml0KCZidWlsZGVyLCBHX1ZBUklBTlRfVFlQRV9WQVJESUNUKTsKKyAgICBnX3Zhcmlh
bnRfYnVpbGRlcl9hZGQoJmJ1aWxkZXIsICJ7c3Z9IiwgInBhZ2VJRCIsIGdfdmFyaWFudF9uZXdf
dWludDY0KHdlYmtpdF93ZWJfdmlld19nZXRfcGFnZV9pZCh0ZXN0LT5tX3dlYlZpZXcpKSk7Cisg
ICAgZ19hc3NlcnQodGVzdFJ1bm5lci0+cnVuVGVzdCgiV2ViS2l0RE9NTm9kZSIsICJpbnNlcnRp
b24iLCBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQoJmJ1aWxkZXIpKSk7Cit9CisKK3N0YXRpYyB2b2lk
IHRlc3RXZWJLaXRET01Ob2RlVGFnTmFtZXMoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHRlc3RIVE1MID0gIjxodG1sPjxoZWFkPjwv
aGVhZD48Ym9keT4iCisgICAgICAgICI8dmlkZW8gaWQ9J3ZpZGVvJyBwcmVsb2FkPSdub25lJz4i
CisgICAgICAgICIgICAgPHNvdXJjZSBzcmM9J21vdmllLm9nZycgdHlwZT0ndmlkZW8vb2dnJz4i
CisgICAgICAgICIgICAgICAgIFlvdXIgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSB2aWRl
byB0YWcuIgorICAgICAgICAiPC92aWRlbz4iCisgICAgICAgICI8dmlkZW8gaWQ9J3ZpZGVvMicg
cHJlbG9hZD0nbm9uZSc+IgorICAgICAgICAiICAgICA8c291cmNlIHNyYz0nbW92aWUub2dnJyB0
eXBlPSd2aWRlby9vZ2cnPiIKKyAgICAgICAgIiAgICAgICAgWW91ciBicm93c2VyIGRvZXMgbm90
IHN1cHBvcnQgdGhlIHZpZGVvIHRhZy4iCisgICAgICAgICI8L3ZpZGVvPiIKKyAgICAgICAgIjxp
bnB1dCB0eXBlPSdoaWRkZW4nIGlkPSd0ZXN0JyBuYW1lPSdmaW5pc2gnIHZhbHVlPSdmYWxzZSc+
PC9ib2R5PjwvaHRtbD4iOworICAgIHRlc3QtPmxvYWRIdG1sKHRlc3RIVE1MLCAwKTsKKyAgICB0
ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIEdWYXJpYW50QnVpbGRlciBidWls
ZGVyOworICAgIGdfdmFyaWFudF9idWlsZGVyX2luaXQoJmJ1aWxkZXIsIEdfVkFSSUFOVF9UWVBF
X1ZBUkRJQ1QpOworICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZCgmYnVpbGRlciwgIntzdn0iLCAi
cGFnZUlEIiwgZ192YXJpYW50X25ld191aW50NjQod2Via2l0X3dlYl92aWV3X2dldF9wYWdlX2lk
KHRlc3QtPm1fd2ViVmlldykpKTsKKyAgICBnX2Fzc2VydCh0ZXN0UnVubmVyLT5ydW5UZXN0KCJX
ZWJLaXRET01Ob2RlIiwgInRhZy1uYW1lcyIsIGdfdmFyaWFudF9idWlsZGVyX2VuZCgmYnVpbGRl
cikpKTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQoreworICAgIHRlc3RSdW5uZXIgPSBuZXcgV2Vi
UHJvY2Vzc1Rlc3RSdW5uZXIoKTsKKyAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3dlYl9leHRl
bnNpb25zX2RpcmVjdG9yeSh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSwgV0VCS0lU
X1RFU1RfV0VCX0VYVEVOU0lPTlNfRElSKTsKKworICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktp
dERPTU5vZGUiLCAiaGllcmFyY2h5LW5hdmlnYXRpb24iLCB0ZXN0V2ViS2l0RE9NTm9kZUhpZXJh
cmNoeU5hdmlnYXRpb24pOworICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdERPTU5vZGUiLCAi
aW5zZXJ0aW9uIiwgdGVzdFdlYktpdERPTU5vZGVJbnNlcnRpb24pOworICAgIFdlYlZpZXdUZXN0
OjphZGQoIldlYktpdERPTU5vZGUiLCAidGFnLW5hbWVzIiwgdGVzdFdlYktpdERPTU5vZGVUYWdO
YW1lcyk7Cit9CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworICAgIGRlbGV0ZSB0ZXN0UnVubmVyOwor
fQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RE
b3dubG9hZHMuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RE
b3dubG9hZHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMTU5OTAK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsv
VGVzdERvd25sb2Fkcy5jcHAKQEAgLTAsMCArMSw1MjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiV2ViS2l0
VGVzdFNlcnZlci5oIgorI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCisjaW5jbHVkZSA8Z2xpYi9n
c3RkaW8uaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+
CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNp
bmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorCitzdGF0aWMgY2hhcioga1RlbXBEaXJlY3Rvcnk7CisKK2NsYXNzIERvd25sb2FkVGVz
dDogcHVibGljIFRlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoRG93
bmxvYWRUZXN0KTsKKworICAgIGVudW0gRG93bmxvYWRFdmVudCB7CisgICAgICAgIFN0YXJ0ZWQs
CisgICAgICAgIFJlY2VpdmVkUmVzcG9uc2UsCisgICAgICAgIENyZWF0ZWREZXN0aW5hdGlvbiwK
KyAgICAgICAgUmVjZWl2ZWREYXRhLAorICAgICAgICBGYWlsZWQsCisgICAgICAgIEZpbmlzaGVk
CisgICAgfTsKKworICAgIHN0YXRpYyB2b2lkIHJlY2VpdmVkUmVzcG9uc2VDYWxsYmFjayhXZWJL
aXREb3dubG9hZCogZG93bmxvYWQsIEdQYXJhbVNwZWMqLCBEb3dubG9hZFRlc3QqIHRlc3QpCisg
ICAgeworICAgICAgICBnX2Fzc2VydCh3ZWJraXRfZG93bmxvYWRfZ2V0X3Jlc3BvbnNlKGRvd25s
b2FkKSk7CisgICAgICAgIHRlc3QtPnJlY2VpdmVkUmVzcG9uc2UoZG93bmxvYWQpOworICAgIH0K
KworICAgIHN0YXRpYyBnYm9vbGVhbiBjcmVhdGVkRGVzdGluYXRpb25DYWxsYmFjayhXZWJLaXRE
b3dubG9hZCogZG93bmxvYWQsIGNvbnN0IGdjaGFyKiBkZXN0aW5hdGlvbiwgRG93bmxvYWRUZXN0
KiB0ZXN0KQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X2Rvd25sb2FkX2dldF9kZXN0
aW5hdGlvbihkb3dubG9hZCkpOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2Rvd25s
b2FkX2dldF9kZXN0aW5hdGlvbihkb3dubG9hZCksID09LCBkZXN0aW5hdGlvbik7CisgICAgICAg
IHRlc3QtPmNyZWF0ZWREZXN0aW5hdGlvbihkb3dubG9hZCwgZGVzdGluYXRpb24pOworICAgICAg
ICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gcmVjZWl2ZWREYXRh
Q2FsbGJhY2soV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBndWludDY0IGRhdGFMZW5ndGgsIERv
d25sb2FkVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPnJlY2VpdmVkRGF0YShkb3du
bG9hZCwgZGF0YUxlbmd0aCk7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKworICAgIHN0
YXRpYyBnYm9vbGVhbiBmaW5pc2hlZENhbGxiYWNrKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwg
RG93bmxvYWRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+ZmluaXNoZWQoZG93bmxv
YWQpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4g
ZmFpbGVkQ2FsbGJhY2soV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBHRXJyb3IqIGVycm9yLCBE
b3dubG9hZFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICBnX2Fzc2VydChlcnJvcik7CisgICAg
ICAgIHRlc3QtPmZhaWxlZChkb3dubG9hZCwgZXJyb3IpOworICAgICAgICByZXR1cm4gVFJVRTsK
KyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gZGVjaWRlRGVzdGluYXRpb25DYWxsYmFjayhX
ZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IGdjaGFyKiBzdWdnZXN0ZWRGaWxlbmFtZSwg
RG93bmxvYWRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQoc3VnZ2VzdGVkRmls
ZW5hbWUpOworICAgICAgICB0ZXN0LT5kZWNpZGVEZXN0aW5hdGlvbihkb3dubG9hZCwgc3VnZ2Vz
dGVkRmlsZW5hbWUpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICBzdGF0aWMg
dm9pZCBkb3dubG9hZFN0YXJ0ZWRDYWxsYmFjayhXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0LCBX
ZWJLaXREb3dubG9hZCogZG93bmxvYWQsIERvd25sb2FkVGVzdCogdGVzdCkKKyAgICB7CisgICAg
ICAgIGdfYXNzZXJ0KHdlYmtpdF9kb3dubG9hZF9nZXRfcmVxdWVzdChkb3dubG9hZCkpOworICAg
ICAgICB0ZXN0LT5zdGFydGVkKGRvd25sb2FkKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChk
b3dubG9hZCwgIm5vdGlmeTo6cmVzcG9uc2UiLCBHX0NBTExCQUNLKHJlY2VpdmVkUmVzcG9uc2VD
YWxsYmFjayksIHRlc3QpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGRvd25sb2FkLCAiY3Jl
YXRlZC1kZXN0aW5hdGlvbiIsIEdfQ0FMTEJBQ0soY3JlYXRlZERlc3RpbmF0aW9uQ2FsbGJhY2sp
LCB0ZXN0KTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChkb3dubG9hZCwgInJlY2VpdmVkLWRh
dGEiLCBHX0NBTExCQUNLKHJlY2VpdmVkRGF0YUNhbGxiYWNrKSwgdGVzdCk7CisgICAgICAgIGdf
c2lnbmFsX2Nvbm5lY3QoZG93bmxvYWQsICJmaW5pc2hlZCIsIEdfQ0FMTEJBQ0soZmluaXNoZWRD
YWxsYmFjayksIHRlc3QpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGRvd25sb2FkLCAiZmFp
bGVkIiwgR19DQUxMQkFDSyhmYWlsZWRDYWxsYmFjayksIHRlc3QpOworICAgICAgICBnX3NpZ25h
bF9jb25uZWN0KGRvd25sb2FkLCAiZGVjaWRlLWRlc3RpbmF0aW9uIiwgR19DQUxMQkFDSyhkZWNp
ZGVEZXN0aW5hdGlvbkNhbGxiYWNrKSwgdGVzdCk7CisgICAgfQorCisgICAgRG93bmxvYWRUZXN0
KCkKKyAgICAgICAgOiBtX3dlYkNvbnRleHQod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0
KCkpCisgICAgICAgICwgbV9tYWluTG9vcChnX21haW5fbG9vcF9uZXcoMCwgVFJVRSkpCisgICAg
ICAgICwgbV9kb3dubG9hZFNpemUoMCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
bV93ZWJDb250ZXh0LCAiZG93bmxvYWQtc3RhcnRlZCIsIEdfQ0FMTEJBQ0soZG93bmxvYWRTdGFy
dGVkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICB9CisKKyAgICB+RG93bmxvYWRUZXN0KCkKKyAgICB7
CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3dlYkNvbnRl
eHQsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOworICAgICAgICBnX21h
aW5fbG9vcF91bnJlZihtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc3Rh
cnRlZChXZWJLaXREb3dubG9hZCogZG93bmxvYWQpCisgICAgeworICAgICAgICBtX2Rvd25sb2Fk
RXZlbnRzLmFwcGVuZChTdGFydGVkKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2
ZWRSZXNwb25zZShXZWJLaXREb3dubG9hZCogZG93bmxvYWQpCisgICAgeworICAgICAgICBtX2Rv
d25sb2FkRXZlbnRzLmFwcGVuZChSZWNlaXZlZFJlc3BvbnNlKTsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgY3JlYXRlZERlc3RpbmF0aW9uKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgY29u
c3QgY2hhciogZGVzdGluYXRpb24pCisgICAgeworICAgICAgICBtX2Rvd25sb2FkRXZlbnRzLmFw
cGVuZChDcmVhdGVkRGVzdGluYXRpb24pOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCByZWNl
aXZlZERhdGEoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBndWludDY0IGRhdGFMZW5ndGgpCisg
ICAgeworICAgICAgICBtX2Rvd25sb2FkU2l6ZSArPSBkYXRhTGVuZ3RoOworICAgICAgICBpZiAo
IW1fZG93bmxvYWRFdmVudHMuY29udGFpbnMoUmVjZWl2ZWREYXRhKSkKKyAgICAgICAgICAgIG1f
ZG93bmxvYWRFdmVudHMuYXBwZW5kKFJlY2VpdmVkRGF0YSk7CisgICAgfQorCisgICAgdmlydHVh
bCB2b2lkIGZpbmlzaGVkKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCkKKyAgICB7CisgICAgICAg
IGdfYXNzZXJ0X2NtcHVpbnQobV9kb3dubG9hZFNpemUsID09LCB3ZWJraXRfZG93bmxvYWRfZ2V0
X3JlY2VpdmVkX2RhdGFfbGVuZ3RoKGRvd25sb2FkKSk7CisgICAgICAgIG1fZG93bmxvYWRFdmVu
dHMuYXBwZW5kKEZpbmlzaGVkKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX21haW5Mb29w
KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZmFpbGVkKFdlYktpdERvd25sb2FkKiBkb3du
bG9hZCwgR0Vycm9yKiBlcnJvcikKKyAgICB7CisgICAgICAgIG1fZG93bmxvYWRFdmVudHMuYXBw
ZW5kKEZhaWxlZCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRlY2lkZURlc3RpbmF0aW9u
KFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgY29uc3QgZ2NoYXIqIHN1Z2dlc3RlZEZpbGVuYW1l
KQorICAgIHsKKyAgICAgICAgR093blB0cjxjaGFyPiBkZXN0aW5hdGlvbihnX2J1aWxkX2ZpbGVu
YW1lKGtUZW1wRGlyZWN0b3J5LCBzdWdnZXN0ZWRGaWxlbmFtZSwgTlVMTCkpOworICAgICAgICBH
T3duUHRyPGNoYXI+IGRlc3RpbmF0aW9uVVJJKGdfZmlsZW5hbWVfdG9fdXJpKGRlc3RpbmF0aW9u
LmdldCgpLCAwLCAwKSk7CisgICAgICAgIHdlYmtpdF9kb3dubG9hZF9zZXRfZGVzdGluYXRpb24o
ZG93bmxvYWQsIGRlc3RpbmF0aW9uVVJJLmdldCgpKTsKKyAgICB9CisKKyAgICBXZWJLaXREb3du
bG9hZCogZG93bmxvYWRVUklBbmRXYWl0VW50aWxGaW5pc2hlcyhjb25zdCBDU3RyaW5nJiByZXF1
ZXN0VVJJKQorICAgIHsKKyAgICAgICAgV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkID0gd2Via2l0
X3dlYl9jb250ZXh0X2Rvd25sb2FkX3VyaShtX3dlYkNvbnRleHQsIHJlcXVlc3RVUkkuZGF0YSgp
KTsKKyAgICAgICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVD
VChkb3dubG9hZCkpOworCisgICAgICAgIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QgPSB3ZWJr
aXRfZG93bmxvYWRfZ2V0X3JlcXVlc3QoZG93bmxvYWQpOworICAgICAgICBnX2Fzc2VydChyZXF1
ZXN0KTsKKyAgICAgICAgQVNTRVJUX0NNUF9DU1RSSU5HKHdlYmtpdF91cmlfcmVxdWVzdF9nZXRf
dXJpKHJlcXVlc3QpLCA9PSwgcmVxdWVzdFVSSSk7CisKKyAgICAgICAgZ19tYWluX2xvb3BfcnVu
KG1fbWFpbkxvb3ApOworCisgICAgICAgIHJldHVybiBkb3dubG9hZDsKKyAgICB9CisKKyAgICB2
b2lkIGNoZWNrRGVzdGluYXRpb25BbmREZWxldGVGaWxlKFdlYktpdERvd25sb2FkKiBkb3dubG9h
ZCwgY29uc3QgY2hhciogZXhwZWN0ZWROYW1lKQorICAgIHsKKyAgICAgICAgaWYgKCF3ZWJraXRf
ZG93bmxvYWRfZ2V0X2Rlc3RpbmF0aW9uKGRvd25sb2FkKSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgR1JlZlB0cjxHRmlsZT4gZGVzdEZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19m
b3JfdXJpKHdlYmtpdF9kb3dubG9hZF9nZXRfZGVzdGluYXRpb24oZG93bmxvYWQpKSk7CisgICAg
ICAgIEdPd25QdHI8Y2hhcj4gZGVzdEJhc2VuYW1lKGdfZmlsZV9nZXRfYmFzZW5hbWUoZGVzdEZp
bGUuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKGRlc3RCYXNlbmFtZS5nZXQoKSwg
PT0sIGV4cGVjdGVkTmFtZSk7CisKKyAgICAgICAgZ19maWxlX2RlbGV0ZShkZXN0RmlsZS5nZXQo
KSwgMCwgMCk7CisgICAgfQorCisgICAgV2ViS2l0V2ViQ29udGV4dCogbV93ZWJDb250ZXh0Owor
ICAgIEdNYWluTG9vcCogbV9tYWluTG9vcDsKKyAgICBWZWN0b3I8RG93bmxvYWRFdmVudD4gbV9k
b3dubG9hZEV2ZW50czsKKyAgICBndWludDY0IG1fZG93bmxvYWRTaXplOworfTsKKworc3RhdGlj
IHZvaWQgdGVzdERvd25sb2FkTG9jYWxGaWxlKERvd25sb2FkVGVzdCogdGVzdCwgZ2NvbnN0cG9p
bnRlcikKK3sKKyAgICBHT3duUHRyPGNoYXI+IHNvdXJjZVBhdGgoZ19idWlsZF9maWxlbmFtZShU
ZXN0OjpnZXRXZWJLaXQxVGVzdFJlc291Y2VzRGlyKCkuZGF0YSgpLCAidGVzdC5wZGYiLCBOVUxM
KSk7CisgICAgR1JlZlB0cjxHRmlsZT4gc291cmNlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9y
X3BhdGgoc291cmNlUGF0aC5nZXQoKSkpOworICAgIEdSZWZQdHI8R0ZpbGVJbmZvPiBzb3VyY2VJ
bmZvID0gYWRvcHRHUmVmKGdfZmlsZV9xdWVyeV9pbmZvKHNvdXJjZS5nZXQoKSwgR19GSUxFX0FU
VFJJQlVURV9TVEFOREFSRF9TSVpFLCBzdGF0aWNfY2FzdDxHRmlsZVF1ZXJ5SW5mb0ZsYWdzPigw
KSwgMCwgMCkpOworICAgIEdPd25QdHI8Y2hhcj4gc291cmNlVVJJKGdfZmlsZV9nZXRfdXJpKHNv
dXJjZS5nZXQoKSkpOworICAgIEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkID0gYWRv
cHRHUmVmKHRlc3QtPmRvd25sb2FkVVJJQW5kV2FpdFVudGlsRmluaXNoZXMoc291cmNlVVJJLmdl
dCgpKSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9kb3dubG9hZF9nZXRfd2ViX3ZpZXcoZG93bmxv
YWQuZ2V0KCkpKTsKKworICAgIFZlY3RvcjxEb3dubG9hZFRlc3Q6OkRvd25sb2FkRXZlbnQ+JiBl
dmVudHMgPSB0ZXN0LT5tX2Rvd25sb2FkRXZlbnRzOworICAgIGdfYXNzZXJ0X2NtcGludChldmVu
dHMuc2l6ZSgpLCA9PSwgNSk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIERv
d25sb2FkVGVzdDo6U3RhcnRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0s
IERvd25sb2FkVGVzdDo6UmVjZWl2ZWRSZXNwb25zZSk7CisgICAgZ19hc3NlcnRfY21waW50KGV2
ZW50c1syXSwgPT0sIERvd25sb2FkVGVzdDo6Q3JlYXRlZERlc3RpbmF0aW9uKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoZXZlbnRzWzNdLCA9PSwgRG93bmxvYWRUZXN0OjpSZWNlaXZlZERhdGEpOwor
ICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbNF0sID09LCBEb3dubG9hZFRlc3Q6OkZpbmlzaGVk
KTsKKworICAgIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QgPSB3ZWJraXRfZG93bmxvYWRfZ2V0
X3JlcXVlc3QoZG93bmxvYWQuZ2V0KCkpOworICAgIGdfYXNzZXJ0KHJlcXVlc3QpOworICAgIGdf
YXNzZXJ0X2NtcHN0cih3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KSwgPT0sIHNv
dXJjZVVSSS5nZXQoKSk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9kb3dubG9hZFNp
emUsID09LCBnX2ZpbGVfaW5mb19nZXRfc2l6ZShzb3VyY2VJbmZvLmdldCgpKSk7CisgICAgZ19h
c3NlcnQod2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbihkb3dubG9hZC5nZXQoKSkpOwor
ICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dy
ZXNzKGRvd25sb2FkLmdldCgpKSwgPT0sIDEpOworICAgIHRlc3QtPmNoZWNrRGVzdGluYXRpb25B
bmREZWxldGVGaWxlKGRvd25sb2FkLmdldCgpLCAidGVzdC5wZGYiKTsKK30KKworY2xhc3MgRG93
bmxvYWRFcnJvclRlc3Q6IHB1YmxpYyBEb3dubG9hZFRlc3QgeworcHVibGljOgorICAgIE1BS0Vf
R0xJQl9URVNUX0ZJWFRVUkUoRG93bmxvYWRFcnJvclRlc3QpOworCisgICAgRG93bmxvYWRFcnJv
clRlc3QoKQorICAgICAgICA6IG1fZXhwZWN0ZWRFcnJvcihXRUJLSVRfRE9XTkxPQURfRVJST1Jf
TkVUV09SSykKKyAgICB7CisgICAgfQorCisgICAgdm9pZCByZWNlaXZlZFJlc3BvbnNlKFdlYktp
dERvd25sb2FkKiBkb3dubG9hZCkKKyAgICB7CisgICAgICAgIERvd25sb2FkVGVzdDo6cmVjZWl2
ZWRSZXNwb25zZShkb3dubG9hZCk7CisgICAgICAgIGlmIChtX2V4cGVjdGVkRXJyb3IgPT0gV0VC
S0lUX0RPV05MT0FEX0VSUk9SX0NBTkNFTExFRF9CWV9VU0VSKQorICAgICAgICAgICAgd2Via2l0
X2Rvd25sb2FkX2NhbmNlbChkb3dubG9hZCk7CisgICAgfQorCisgICAgdm9pZCBjcmVhdGVkRGVz
dGluYXRpb24oV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBjb25zdCBjaGFyKiBkZXN0aW5hdGlv
bikKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgfQorCisgICAg
dm9pZCBmYWlsZWQoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBHRXJyb3IqIGVycm9yKQorICAg
IHsKKyAgICAgICAgZ19hc3NlcnQoZ19lcnJvcl9tYXRjaGVzKGVycm9yLCBXRUJLSVRfRE9XTkxP
QURfRVJST1IsIG1fZXhwZWN0ZWRFcnJvcikpOworICAgICAgICBEb3dubG9hZFRlc3Q6OmZhaWxl
ZChkb3dubG9hZCwgZXJyb3IpOworICAgIH0KKworICAgIHZvaWQgZGVjaWRlRGVzdGluYXRpb24o
V2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBjb25zdCBnY2hhciogc3VnZ2VzdGVkRmlsZW5hbWUp
CisgICAgeworICAgICAgICBpZiAobV9leHBlY3RlZEVycm9yICE9IFdFQktJVF9ET1dOTE9BRF9F
UlJPUl9ERVNUSU5BVElPTikgeworICAgICAgICAgICAgRG93bmxvYWRUZXN0OjpkZWNpZGVEZXN0
aW5hdGlvbihkb3dubG9hZCwgc3VnZ2VzdGVkRmlsZW5hbWUpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIHdlYmtpdF9kb3dubG9hZF9zZXRfZGVzdGluYXRpb24oZG93
bmxvYWQsICJmaWxlOi8vL2Zvby9iYXIiKTsKKyAgICB9CisKKyAgICBXZWJLaXREb3dubG9hZEVy
cm9yIG1fZXhwZWN0ZWRFcnJvcjsKK307CisKK3N0YXRpYyB2b2lkIHRlc3REb3dubG9hZExvY2Fs
RmlsZUVycm9yKERvd25sb2FkRXJyb3JUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAg
IHRlc3QtPm1fZXhwZWN0ZWRFcnJvciA9IFdFQktJVF9ET1dOTE9BRF9FUlJPUl9ORVRXT1JLOwor
ICAgIEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkID0gYWRvcHRHUmVmKHRlc3QtPmRv
d25sb2FkVVJJQW5kV2FpdFVudGlsRmluaXNoZXMoImZpbGU6Ly8vZm9vL2JhciIpKTsKKyAgICBn
X2Fzc2VydCghd2Via2l0X2Rvd25sb2FkX2dldF93ZWJfdmlldyhkb3dubG9hZC5nZXQoKSkpOwor
CisgICAgVmVjdG9yPERvd25sb2FkVGVzdDo6RG93bmxvYWRFdmVudD4mIGV2ZW50cyA9IHRlc3Qt
Pm1fZG93bmxvYWRFdmVudHM7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09
LCAzKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgRG93bmxvYWRUZXN0OjpT
dGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgRG93bmxvYWRUZXN0
OjpGYWlsZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBEb3dubG9hZFRl
c3Q6OkZpbmlzaGVkKTsKKyAgICBldmVudHMuY2xlYXIoKTsKKyAgICBnX2Fzc2VydF9jbXBmbG9h
dCh3ZWJraXRfZG93bmxvYWRfZ2V0X2VzdGltYXRlZF9wcm9ncmVzcyhkb3dubG9hZC5nZXQoKSks
IDwsIDEpOworCisgICAgdGVzdC0+bV9leHBlY3RlZEVycm9yID0gV0VCS0lUX0RPV05MT0FEX0VS
Uk9SX0RFU1RJTkFUSU9OOworICAgIEdPd25QdHI8Y2hhcj4gcGF0aChnX2J1aWxkX2ZpbGVuYW1l
KFRlc3Q6OmdldFdlYktpdDFUZXN0UmVzb3VjZXNEaXIoKS5kYXRhKCksICJ0ZXN0LnBkZiIsIE5V
TEwpKTsKKyAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9y
X3BhdGgocGF0aC5nZXQoKSkpOworICAgIEdPd25QdHI8Y2hhcj4gdXJpKGdfZmlsZV9nZXRfdXJp
KGZpbGUuZ2V0KCkpKTsKKyAgICBkb3dubG9hZCA9IGFkb3B0R1JlZih0ZXN0LT5kb3dubG9hZFVS
SUFuZFdhaXRVbnRpbEZpbmlzaGVzKHVyaS5nZXQoKSkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRf
ZG93bmxvYWRfZ2V0X3dlYl92aWV3KGRvd25sb2FkLmdldCgpKSk7CisKKyAgICBnX2Fzc2VydF9j
bXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNb
MF0sID09LCBEb3dubG9hZFRlc3Q6OlN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVu
dHNbMV0sID09LCBEb3dubG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOworICAgIGdfYXNzZXJ0
X2NtcGludChldmVudHNbMl0sID09LCBEb3dubG9hZFRlc3Q6OkZhaWxlZCk7CisgICAgZ19hc3Nl
cnRfY21waW50KGV2ZW50c1szXSwgPT0sIERvd25sb2FkVGVzdDo6RmluaXNoZWQpOworICAgIGV2
ZW50cy5jbGVhcigpOworICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHdlYmtpdF9kb3dubG9hZF9nZXRf
ZXN0aW1hdGVkX3Byb2dyZXNzKGRvd25sb2FkLmdldCgpKSwgPCwgMSk7CisgICAgdGVzdC0+Y2hl
Y2tEZXN0aW5hdGlvbkFuZERlbGV0ZUZpbGUoZG93bmxvYWQuZ2V0KCksICJiYXIiKTsKKworICAg
IHRlc3QtPm1fZXhwZWN0ZWRFcnJvciA9IFdFQktJVF9ET1dOTE9BRF9FUlJPUl9DQU5DRUxMRURf
QllfVVNFUjsKKyAgICBkb3dubG9hZCA9IGFkb3B0R1JlZih0ZXN0LT5kb3dubG9hZFVSSUFuZFdh
aXRVbnRpbEZpbmlzaGVzKHVyaS5nZXQoKSkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG93bmxv
YWRfZ2V0X3dlYl92aWV3KGRvd25sb2FkLmdldCgpKSk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQo
ZXZlbnRzLnNpemUoKSwgPT0sIDQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09
LCBEb3dubG9hZFRlc3Q6OlN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0s
ID09LCBEb3dubG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHNbMl0sID09LCBEb3dubG9hZFRlc3Q6OkZhaWxlZCk7CisgICAgZ19hc3NlcnRfY21w
aW50KGV2ZW50c1szXSwgPT0sIERvd25sb2FkVGVzdDo6RmluaXNoZWQpOworICAgIGV2ZW50cy5j
bGVhcigpOworICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1h
dGVkX3Byb2dyZXNzKGRvd25sb2FkLmdldCgpKSwgPCwgMSk7CisgICAgdGVzdC0+Y2hlY2tEZXN0
aW5hdGlvbkFuZERlbGV0ZUZpbGUoZG93bmxvYWQuZ2V0KCksICJ0ZXN0LnBkZiIpOworfQorCitz
dGF0aWMgV2ViS2l0VGVzdFNlcnZlcioga1NlcnZlcjsKK3N0YXRpYyBjb25zdCBjaGFyKiBrU2Vy
dmVyU3VnZ2VzdGVkRmlsZW5hbWUgPSAid2Via2l0LWRvd25sb2FkZWQtZmlsZSI7CisKK3N0YXRp
YyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1l
c3NhZ2UsIGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqLCBTb3VwQ2xpZW50Q29udGV4dCos
IGdwb2ludGVyKQoreworICAgIGlmIChtZXNzYWdlLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VU
KSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVT
X05PVF9JTVBMRU1FTlRFRCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBHT3duUHRy
PGNoYXI+IGZpbGVQYXRoKGdfYnVpbGRfZmlsZW5hbWUoVGVzdDo6Z2V0V2ViS2l0MVRlc3RSZXNv
dWNlc0RpcigpLmRhdGEoKSwgcGF0aCwgTlVMTCkpOworICAgIGNoYXIqIGNvbnRlbnRzOworICAg
IGdzaXplIGNvbnRlbnRzTGVuZ3RoOworICAgIGlmICghZ19maWxlX2dldF9jb250ZW50cyhmaWxl
UGF0aC5nZXQoKSwgJmNvbnRlbnRzLCAmY29udGVudHNMZW5ndGgsIDApKSB7CisgICAgICAgIHNv
dXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7Cisg
ICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMo
bWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOworCisgICAgR093blB0cjxjaGFyPiBjb250ZW50RGlz
cG9zaXRpb24oZ19zdHJkdXBfcHJpbnRmKCJmaWxlbmFtZT0lcyIsIGtTZXJ2ZXJTdWdnZXN0ZWRG
aWxlbmFtZSkpOworICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChtZXNzYWdlLT5yZXNw
b25zZV9oZWFkZXJzLCAiQ29udGVudC1EaXNwb3NpdGlvbiIsIGNvbnRlbnREaXNwb3NpdGlvbi5n
ZXQoKSk7CisgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2Jv
ZHksIFNPVVBfTUVNT1JZX1RBS0UsIGNvbnRlbnRzLCBjb250ZW50c0xlbmd0aCk7CisKKyAgICBz
b3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKK30KKwor
c3RhdGljIHZvaWQgdGVzdERvd25sb2FkUmVtb3RlRmlsZShEb3dubG9hZFRlc3QqIHRlc3QsIGdj
b25zdHBvaW50ZXIpCit7CisgICAgR1JlZlB0cjxXZWJLaXREb3dubG9hZD4gZG93bmxvYWQgPSBh
ZG9wdEdSZWYodGVzdC0+ZG93bmxvYWRVUklBbmRXYWl0VW50aWxGaW5pc2hlcyhrU2VydmVyLT5n
ZXRVUklGb3JQYXRoKCIvdGVzdC5wZGYiKSkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG93bmxv
YWRfZ2V0X3dlYl92aWV3KGRvd25sb2FkLmdldCgpKSk7CisKKyAgICBWZWN0b3I8RG93bmxvYWRU
ZXN0OjpEb3dubG9hZEV2ZW50PiYgZXZlbnRzID0gdGVzdC0+bV9kb3dubG9hZEV2ZW50czsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDUpOworICAgIGdfYXNzZXJ0X2Nt
cGludChldmVudHNbMF0sID09LCBEb3dubG9hZFRlc3Q6OlN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0
X2NtcGludChldmVudHNbMV0sID09LCBEb3dubG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOwor
ICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBEb3dubG9hZFRlc3Q6OkNyZWF0ZWRE
ZXN0aW5hdGlvbik7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1szXSwgPT0sIERvd25sb2Fk
VGVzdDo6UmVjZWl2ZWREYXRhKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzRdLCA9PSwg
RG93bmxvYWRUZXN0OjpGaW5pc2hlZCk7CisgICAgZXZlbnRzLmNsZWFyKCk7CisKKyAgICBXZWJL
aXRVUklSZXF1ZXN0KiByZXF1ZXN0ID0gd2Via2l0X2Rvd25sb2FkX2dldF9yZXF1ZXN0KGRvd25s
b2FkLmdldCgpKTsKKyAgICBnX2Fzc2VydChyZXF1ZXN0KTsKKyAgICBBU1NFUlRfQ01QX0NTVFJJ
Tkcod2Via2l0X3VyaV9yZXF1ZXN0X2dldF91cmkocmVxdWVzdCksID09LCBrU2VydmVyLT5nZXRV
UklGb3JQYXRoKCIvdGVzdC5wZGYiKSk7CisKKyAgICBnX2Fzc2VydCh3ZWJraXRfZG93bmxvYWRf
Z2V0X2Rlc3RpbmF0aW9uKGRvd25sb2FkLmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21wZmxvYXQo
d2Via2l0X2Rvd25sb2FkX2dldF9lc3RpbWF0ZWRfcHJvZ3Jlc3MoZG93bmxvYWQuZ2V0KCkpLCA9
PSwgMSk7CisgICAgdGVzdC0+Y2hlY2tEZXN0aW5hdGlvbkFuZERlbGV0ZUZpbGUoZG93bmxvYWQu
Z2V0KCksIGtTZXJ2ZXJTdWdnZXN0ZWRGaWxlbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RE
b3dubG9hZFJlbW90ZUZpbGVFcnJvcihEb3dubG9hZEVycm9yVGVzdCogdGVzdCwgZ2NvbnN0cG9p
bnRlcikKK3sKKyAgICB0ZXN0LT5tX2V4cGVjdGVkRXJyb3IgPSBXRUJLSVRfRE9XTkxPQURfRVJS
T1JfTkVUV09SSzsKKyAgICBHUmVmUHRyPFdlYktpdERvd25sb2FkPiBkb3dubG9hZCA9IGFkb3B0
R1JlZih0ZXN0LT5kb3dubG9hZFVSSUFuZFdhaXRVbnRpbEZpbmlzaGVzKGtTZXJ2ZXItPmdldFVS
SUZvclBhdGgoIi9mb28iKSkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG93bmxvYWRfZ2V0X3dl
Yl92aWV3KGRvd25sb2FkLmdldCgpKSk7CisKKyAgICBWZWN0b3I8RG93bmxvYWRUZXN0OjpEb3du
bG9hZEV2ZW50PiYgZXZlbnRzID0gdGVzdC0+bV9kb3dubG9hZEV2ZW50czsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVu
dHNbMF0sID09LCBEb3dubG9hZFRlc3Q6OlN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHNbMV0sID09LCBEb3dubG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOworICAgIGdfYXNz
ZXJ0X2NtcGludChldmVudHNbMl0sID09LCBEb3dubG9hZFRlc3Q6OkZhaWxlZCk7CisgICAgZ19h
c3NlcnRfY21waW50KGV2ZW50c1szXSwgPT0sIERvd25sb2FkVGVzdDo6RmluaXNoZWQpOworICAg
IGV2ZW50cy5jbGVhcigpOworICAgIFdlYktpdFVSSVJlc3BvbnNlKiByZXNwb25zZSA9IHdlYmtp
dF9kb3dubG9hZF9nZXRfcmVzcG9uc2UoZG93bmxvYWQuZ2V0KCkpOworICAgIGdfYXNzZXJ0X2Nt
cHVpbnQod2Via2l0X3VyaV9yZXNwb25zZV9nZXRfc3RhdHVzX2NvZGUocmVzcG9uc2UpLCA9PSwg
NDA0KTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdCh3ZWJraXRfZG93bmxvYWRfZ2V0X2VzdGltYXRl
ZF9wcm9ncmVzcyhkb3dubG9hZC5nZXQoKSksIDwsIDEpOworCisgICAgdGVzdC0+bV9leHBlY3Rl
ZEVycm9yID0gV0VCS0lUX0RPV05MT0FEX0VSUk9SX0RFU1RJTkFUSU9OOworICAgIGRvd25sb2Fk
ID0gYWRvcHRHUmVmKHRlc3QtPmRvd25sb2FkVVJJQW5kV2FpdFVudGlsRmluaXNoZXMoa1NlcnZl
ci0+Z2V0VVJJRm9yUGF0aCgiL3Rlc3QucGRmIikpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2Rv
d25sb2FkX2dldF93ZWJfdmlldyhkb3dubG9hZC5nZXQoKSkpOworCisgICAgZ19hc3NlcnRfY21w
aW50KGV2ZW50cy5zaXplKCksID09LCA0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBd
LCA9PSwgRG93bmxvYWRUZXN0OjpTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRz
WzFdLCA9PSwgRG93bmxvYWRUZXN0OjpSZWNlaXZlZFJlc3BvbnNlKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoZXZlbnRzWzJdLCA9PSwgRG93bmxvYWRUZXN0OjpGYWlsZWQpOworICAgIGdfYXNzZXJ0
X2NtcGludChldmVudHNbM10sID09LCBEb3dubG9hZFRlc3Q6OkZpbmlzaGVkKTsKKyAgICBldmVu
dHMuY2xlYXIoKTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdCh3ZWJraXRfZG93bmxvYWRfZ2V0X2Vz
dGltYXRlZF9wcm9ncmVzcyhkb3dubG9hZC5nZXQoKSksIDwsIDEpOworICAgIHRlc3QtPmNoZWNr
RGVzdGluYXRpb25BbmREZWxldGVGaWxlKGRvd25sb2FkLmdldCgpLCAiYmFyIik7CisKKyAgICB0
ZXN0LT5tX2V4cGVjdGVkRXJyb3IgPSBXRUJLSVRfRE9XTkxPQURfRVJST1JfQ0FOQ0VMTEVEX0JZ
X1VTRVI7CisgICAgZG93bmxvYWQgPSBhZG9wdEdSZWYodGVzdC0+ZG93bmxvYWRVUklBbmRXYWl0
VW50aWxGaW5pc2hlcyhrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvdGVzdC5wZGYiKSkpOworICAg
IGdfYXNzZXJ0KCF3ZWJraXRfZG93bmxvYWRfZ2V0X3dlYl92aWV3KGRvd25sb2FkLmdldCgpKSk7
CisKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDQpOworICAgIGdfYXNz
ZXJ0X2NtcGludChldmVudHNbMF0sID09LCBEb3dubG9hZFRlc3Q6OlN0YXJ0ZWQpOworICAgIGdf
YXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBEb3dubG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9u
c2UpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBEb3dubG9hZFRlc3Q6OkZh
aWxlZCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1szXSwgPT0sIERvd25sb2FkVGVzdDo6
RmluaXNoZWQpOworICAgIGV2ZW50cy5jbGVhcigpOworICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHdl
YmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNzKGRvd25sb2FkLmdldCgpKSwgPCwg
MSk7CisgICAgdGVzdC0+Y2hlY2tEZXN0aW5hdGlvbkFuZERlbGV0ZUZpbGUoZG93bmxvYWQuZ2V0
KCksIGtTZXJ2ZXJTdWdnZXN0ZWRGaWxlbmFtZSk7Cit9CisKK2NsYXNzIFdlYlZpZXdEb3dubG9h
ZFRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1Rf
RklYVFVSRShXZWJWaWV3RG93bmxvYWRUZXN0KTsKKworICAgIHN0YXRpYyB2b2lkIGRvd25sb2Fk
U3RhcnRlZENhbGxiYWNrKFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYktpdERvd25sb2Fk
KiBkb3dubG9hZCwgV2ViVmlld0Rvd25sb2FkVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRl
c3QtPm1fZG93bmxvYWQgPSBkb3dubG9hZDsKKyAgICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNE
ZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChkb3dubG9hZCkpOworICAgICAgICB0ZXN0
LT5xdWl0TWFpbkxvb3AoKTsKKyAgICB9CisKKyAgICBXZWJWaWV3RG93bmxvYWRUZXN0KCkKKyAg
ICB7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0
KG1fd2ViVmlldyksICJkb3dubG9hZC1zdGFydGVkIiwgR19DQUxMQkFDSyhkb3dubG9hZFN0YXJ0
ZWRDYWxsYmFjayksIHRoaXMpOworICAgIH0KKworICAgIH5XZWJWaWV3RG93bmxvYWRUZXN0KCkK
KyAgICB7CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZCh3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQobV93ZWJWaWV3KSwgR19TSUdOQUxfTUFUQ0hfREFUQSwg
MCwgMCwgMCwgMCwgdGhpcyk7CisgICAgfQorCisgICAgdm9pZCB3YWl0VW50aWxEb3dubG9hZFN0
YXJ0ZWQoKQorICAgIHsKKyAgICAgICAgbV9kb3dubG9hZCA9IDA7CisgICAgICAgIGdfbWFpbl9s
b29wX3J1bihtX21haW5Mb29wKTsKKyAgICAgICAgZ19hc3NlcnQobV9kb3dubG9hZC5nZXQoKSk7
CisgICAgfQorCisgICAgc3RhdGljIGdib29sZWFuIGRvd25sb2FkRGVjaWRlRGVzdGluYXRpb25D
YWxsYmFjayhXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IGdjaGFyKiBzdWdnZXN0ZWRG
aWxlbmFtZSwgV2ViVmlld0Rvd25sb2FkVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIEdPd25Q
dHI8Y2hhcj4gZGVzdGluYXRpb24oZ19idWlsZF9maWxlbmFtZShrVGVtcERpcmVjdG9yeSwgc3Vn
Z2VzdGVkRmlsZW5hbWUsIE5VTEwpKTsKKyAgICAgICAgR093blB0cjxjaGFyPiBkZXN0aW5hdGlv
blVSSShnX2ZpbGVuYW1lX3RvX3VyaShkZXN0aW5hdGlvbi5nZXQoKSwgMCwgMCkpOworICAgICAg
ICB3ZWJraXRfZG93bmxvYWRfc2V0X2Rlc3RpbmF0aW9uKGRvd25sb2FkLCBkZXN0aW5hdGlvblVS
SS5nZXQoKSk7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKworICAgIHN0YXRpYyB2b2lk
IGRvd25sb2FkRmluaXNoZWRDYWxsYmFjayhXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIFdlYlZp
ZXdEb3dubG9hZFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT5xdWl0TWFpbkxvb3Ao
KTsKKyAgICB9CisKKyAgICB2b2lkIHdhaXRVbnRpbERvd25sb2FkRmluaXNoZWQoKQorICAgIHsK
KyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX2Rvd25sb2FkLmdldCgpLCAiZGVjaWRlLWRlc3Rp
bmF0aW9uIiwgR19DQUxMQkFDSyhkb3dubG9hZERlY2lkZURlc3RpbmF0aW9uQ2FsbGJhY2spLCB0
aGlzKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX2Rvd25sb2FkLmdldCgpLCAiZmluaXNo
ZWQiLCBHX0NBTExCQUNLKGRvd25sb2FkRmluaXNoZWRDYWxsYmFjayksIHRoaXMpOworICAgICAg
ICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgfQorCisgICAgR1JlZlB0cjxXZWJL
aXREb3dubG9hZD4gbV9kb3dubG9hZDsKK307CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3RG93
bmxvYWRVUkkoV2ViVmlld0Rvd25sb2FkVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAg
ICBHUmVmUHRyPFdlYktpdERvd25sb2FkPiBkb3dubG9hZCA9IGFkb3B0R1JlZih3ZWJraXRfd2Vi
X3ZpZXdfZG93bmxvYWRfdXJpKHRlc3QtPm1fd2ViVmlldywga1NlcnZlci0+Z2V0VVJJRm9yUGF0
aCgiL3Rlc3QucGRmIikuZGF0YSgpKSk7CisgICAgdGVzdC0+d2FpdFVudGlsRG93bmxvYWRTdGFy
dGVkKCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV93ZWJWaWV3ID09IHdlYmtpdF9kb3dubG9hZF9n
ZXRfd2ViX3ZpZXcoZG93bmxvYWQuZ2V0KCkpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxEb3dubG9h
ZEZpbmlzaGVkKCk7CisKKyAgICBHUmVmUHRyPEdGaWxlPiBkb3dubG9hZEZpbGUgPSBhZG9wdEdS
ZWYoZ19maWxlX25ld19mb3JfdXJpKHdlYmtpdF9kb3dubG9hZF9nZXRfZGVzdGluYXRpb24oZG93
bmxvYWQuZ2V0KCkpKSk7CisgICAgR1JlZlB0cjxHRmlsZUluZm8+IGRvd25sb2FkRmlsZUluZm8g
PSBhZG9wdEdSZWYoZ19maWxlX3F1ZXJ5X2luZm8oZG93bmxvYWRGaWxlLmdldCgpLCBHX0ZJTEVf
QVRUUklCVVRFX1NUQU5EQVJEX1NJWkUsIHN0YXRpY19jYXN0PEdGaWxlUXVlcnlJbmZvRmxhZ3M+
KDApLCAwLCAwKSk7CisgICAgZ19hc3NlcnRfY21waW50KGdfZmlsZV9pbmZvX2dldF9zaXplKGRv
d25sb2FkRmlsZUluZm8uZ2V0KCkpLCA+LCAwKTsKKyAgICBnX2ZpbGVfZGVsZXRlKGRvd25sb2Fk
RmlsZS5nZXQoKSwgMCwgMCk7Cit9CisKK2NsYXNzIFBvbGljeVJlc3BvbnNlRG93bmxvYWRUZXN0
OiBwdWJsaWMgV2ViVmlld0Rvd25sb2FkVGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RF
U1RfRklYVFVSRShQb2xpY3lSZXNwb25zZURvd25sb2FkVGVzdCk7CisKKyAgICBzdGF0aWMgZ2Jv
b2xlYW4gZGVjaWRlUG9saWN5Q2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0
UG9saWN5RGVjaXNpb24qIGRlY2lzaW9uLCBXZWJLaXRQb2xpY3lEZWNpc2lvblR5cGUgdHlwZSwg
UG9saWN5UmVzcG9uc2VEb3dubG9hZFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICBpZiAodHlw
ZSAhPSBXRUJLSVRfUE9MSUNZX0RFQ0lTSU9OX1RZUEVfUkVTUE9OU0UpCisgICAgICAgICAgICBy
ZXR1cm4gRkFMU0U7CisKKyAgICAgICAgd2Via2l0X3BvbGljeV9kZWNpc2lvbl9kb3dubG9hZChk
ZWNpc2lvbik7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKworICAgIFBvbGljeVJlc3Bv
bnNlRG93bmxvYWRUZXN0KCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJW
aWV3LCAiZGVjaWRlLXBvbGljeSIsIEdfQ0FMTEJBQ0soZGVjaWRlUG9saWN5Q2FsbGJhY2spLCB0
aGlzKTsKKyAgICB9CisKKyAgICB+UG9saWN5UmVzcG9uc2VEb3dubG9hZFRlc3QoKQorICAgIHsK
KyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fd2ViVmlldywg
R19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7CisgICAgfQorCisgICAgdm9p
ZCBjYW5jZWxEb3dubG9hZEFuZFdhaXRVbnRpbEZpbmlzaGVkKCkKKyAgICB7CisgICAgICAgIHdl
YmtpdF9kb3dubG9hZF9jYW5jZWwobV9kb3dubG9hZC5nZXQoKSk7CisgICAgICAgIHdhaXRVbnRp
bERvd25sb2FkRmluaXNoZWQoKTsKKyAgICAgICAgbV9kb3dubG9hZCA9IDA7CisgICAgfQorfTsK
Kworc3RhdGljIHZvaWQgdGVzdFBvbGljeVJlc3BvbnNlRG93bmxvYWQoUG9saWN5UmVzcG9uc2VE
b3dubG9hZFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8gVGVzdCB0aGF0IGEg
ZG93bmxvYWQgc3RhcnRlZCBieSB0aGUgdGhlIHBvbGljeSBjaGVja2VyIGNvbnRhaW5zIHRoZSB3
ZWIgdmlldy4KKyAgICBDU3RyaW5nIHJlcXVlc3RVUkkgPSBrU2VydmVyLT5nZXRVUklGb3JQYXRo
KCIvdGVzdC5wZGYiKS5kYXRhKCk7CisgICAgdGVzdC0+bG9hZFVSSShyZXF1ZXN0VVJJLmRhdGEo
KSk7CisgICAgdGVzdC0+d2FpdFVudGlsRG93bmxvYWRTdGFydGVkKCk7CisKKyAgICBXZWJLaXRV
UklSZXF1ZXN0KiByZXF1ZXN0ID0gd2Via2l0X2Rvd25sb2FkX2dldF9yZXF1ZXN0KHRlc3QtPm1f
ZG93bmxvYWQuZ2V0KCkpOworICAgIGdfYXNzZXJ0KHJlcXVlc3QpOworICAgIEFTU0VSVF9DTVBf
Q1NUUklORyh3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KSwgPT0sIHJlcXVlc3RV
UkkpOworCisgICAgZ19hc3NlcnQodGVzdC0+bV93ZWJWaWV3ID09IHdlYmtpdF9kb3dubG9hZF9n
ZXRfd2ViX3ZpZXcodGVzdC0+bV9kb3dubG9hZC5nZXQoKSkpOworICAgIHRlc3QtPmNhbmNlbERv
d25sb2FkQW5kV2FpdFVudGlsRmluaXNoZWQoKTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQorewor
ICAgIGtTZXJ2ZXIgPSBuZXcgV2ViS2l0VGVzdFNlcnZlcigpOworICAgIGtTZXJ2ZXItPnJ1bihz
ZXJ2ZXJDYWxsYmFjayk7CisKKyAgICBrVGVtcERpcmVjdG9yeSA9IGdfZGlyX21ha2VfdG1wKCJX
ZWJLaXQyVGVzdHMtWFhYWFhYIiwgMCk7CisgICAgZ19hc3NlcnQoa1RlbXBEaXJlY3RvcnkpOwor
CisgICAgRG93bmxvYWRUZXN0OjphZGQoIkRvd25sb2FkcyIsICJsb2NhbC1maWxlIiwgdGVzdERv
d25sb2FkTG9jYWxGaWxlKTsKKyAgICBEb3dubG9hZEVycm9yVGVzdDo6YWRkKCJEb3dubG9hZHMi
LCAibG9jYWwtZmlsZS1lcnJvciIsIHRlc3REb3dubG9hZExvY2FsRmlsZUVycm9yKTsKKyAgICBE
b3dubG9hZFRlc3Q6OmFkZCgiRG93bmxvYWRzIiwgInJlbW90ZS1maWxlIiwgdGVzdERvd25sb2Fk
UmVtb3RlRmlsZSk7CisgICAgRG93bmxvYWRFcnJvclRlc3Q6OmFkZCgiRG93bmxvYWRzIiwgInJl
bW90ZS1maWxlLWVycm9yIiwgdGVzdERvd25sb2FkUmVtb3RlRmlsZUVycm9yKTsKKyAgICBXZWJW
aWV3RG93bmxvYWRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiZG93bmxvYWQtdXJpIiwgdGVz
dFdlYlZpZXdEb3dubG9hZFVSSSk7CisgICAgUG9saWN5UmVzcG9uc2VEb3dubG9hZFRlc3Q6OmFk
ZCgiRG93bmxvYWRzIiwgInBvbGljeS1kZWNpc2lvbi1kb3dubG9hZCIsIHRlc3RQb2xpY3lSZXNw
b25zZURvd25sb2FkKTsKK30KKwordm9pZCBhZnRlckFsbCgpCit7CisgICAgZGVsZXRlIGtTZXJ2
ZXI7CisgICAgZ19ybWRpcihrVGVtcERpcmVjdG9yeSk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdEZyYW1lLmNwcCBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0RnJhbWUuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmE2M2IwNzkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdEZyYW1lLmNwcApAQCAtMCwwICsxLDY5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpbmNsdWRlICJXZWJQcm9jZXNzVGVzdFJ1bm5lci5oIgorI2luY2x1ZGUgIldlYlZp
ZXdUZXN0LmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0
Mi5oPgorCitzdGF0aWMgV2ViUHJvY2Vzc1Rlc3RSdW5uZXIqIHRlc3RSdW5uZXI7CisKK3N0YXRp
YyB2b2lkIHdlYmtpdEZyYW1lVGVzdFJ1bihXZWJWaWV3VGVzdCogdGVzdCwgY29uc3QgY2hhciog
dGVzdE5hbWUpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHRlc3RIVE1MID0gIjxodG1sPjxi
b2R5PjwvYm9keT48L2h0bWw+IjsKKyAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0SFRNTCwgMCk7Cisg
ICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBHVmFyaWFudEJ1aWxkZXIg
YnVpbGRlcjsKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9pbml0KCZidWlsZGVyLCBHX1ZBUklBTlRf
VFlQRV9WQVJESUNUKTsKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoJmJ1aWxkZXIsICJ7c3Z9
IiwgInBhZ2VJRCIsIGdfdmFyaWFudF9uZXdfdWludDY0KHdlYmtpdF93ZWJfdmlld19nZXRfcGFn
ZV9pZCh0ZXN0LT5tX3dlYlZpZXcpKSk7CisgICAgZ19hc3NlcnQodGVzdFJ1bm5lci0+cnVuVGVz
dCgiV2ViS2l0RnJhbWUiLCB0ZXN0TmFtZSwgZ192YXJpYW50X2J1aWxkZXJfZW5kKCZidWlsZGVy
KSkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViS2l0RnJhbWVNYWluRnJhbWUoV2ViVmlld1Rl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgd2Via2l0RnJhbWVUZXN0UnVuKHRlc3Qs
ICJtYWluLWZyYW1lIik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJLaXRGcmFtZVVSSShXZWJW
aWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB3ZWJraXRGcmFtZVRlc3RSdW4o
dGVzdCwgInVyaSIpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViS2l0RnJhbWVKYXZhU2NyaXB0
Q29udGV4dChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB3ZWJraXRG
cmFtZVRlc3RSdW4odGVzdCwgImphdmFzY3JpcHQtY29udGV4dCIpOworfQorCit2b2lkIGJlZm9y
ZUFsbCgpCit7CisgICAgdGVzdFJ1bm5lciA9IG5ldyBXZWJQcm9jZXNzVGVzdFJ1bm5lcigpOwor
ICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfd2ViX2V4dGVuc2lvbnNfZGlyZWN0b3J5KHdlYmtp
dF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpLCBXRUJLSVRfVEVTVF9XRUJfRVhURU5TSU9OU19E
SVIpOworCisgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0RnJhbWUiLCAibWFpbi1mcmFtZSIs
IHRlc3RXZWJLaXRGcmFtZU1haW5GcmFtZSk7CisgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0
RnJhbWUiLCAidXJpIiwgdGVzdFdlYktpdEZyYW1lVVJJKTsKKyAgICBXZWJWaWV3VGVzdDo6YWRk
KCJXZWJLaXRGcmFtZSIsICJqYXZhc2NyaXB0LWNvbnRleHQiLCB0ZXN0V2ViS2l0RnJhbWVKYXZh
U2NyaXB0Q29udGV4dCk7Cit9CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworICAgIGRlbGV0ZSB0ZXN0
UnVubmVyOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQy
R3RrL1Rlc3RJbnNwZWN0b3IuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQy
R3RrL1Rlc3RJbnNwZWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjFmMDQzMDMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdDJHdGsvVGVzdEluc3BlY3Rvci5jcHAKQEAgLTAsMCArMSwzNTYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVk
ZSAiV2ViVmlld1Rlc3QuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3Rm
L2dvYmplY3QvR1JlZlB0ci5oPgorCitjbGFzcyBJbnNwZWN0b3JUZXN0OiBwdWJsaWMgV2ViVmll
d1Rlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoSW5zcGVjdG9yVGVz
dCk7CisKKyAgICBlbnVtIEluc3BlY3RvckV2ZW50cyB7CisgICAgICAgIE9wZW5XaW5kb3csCisg
ICAgICAgIEJyaW5nVG9Gcm9udCwKKyAgICAgICAgQ2xvc2VkLAorICAgICAgICBBdHRhY2gsCisg
ICAgICAgIERldGFjaAorICAgIH07CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gb3BlbldpbmRvd0Nh
bGxiYWNrKFdlYktpdFdlYkluc3BlY3RvciosIEluc3BlY3RvclRlc3QqIHRlc3QpCisgICAgewor
ICAgICAgICByZXR1cm4gdGVzdC0+b3BlbldpbmRvdygpOworICAgIH0KKworICAgIHN0YXRpYyBn
Ym9vbGVhbiBicmluZ1RvRnJvbnRDYWxsYmFjayhXZWJLaXRXZWJJbnNwZWN0b3IqLCBJbnNwZWN0
b3JUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRlc3QtPmJyaW5nVG9Gcm9udCgp
OworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGNsb3NlZENhbGxiYWNrKFdlYktpdFdlYkluc3Bl
Y3RvciosIEluc3BlY3RvclRlc3QqIHRlc3QpCisgICAgeworICAgICAgICByZXR1cm4gdGVzdC0+
Y2xvc2VkKCk7CisgICAgfQorCisgICAgc3RhdGljIGdib29sZWFuIGF0dGFjaENhbGxiYWNrKFdl
YktpdFdlYkluc3BlY3RvciosIEluc3BlY3RvclRlc3QqIHRlc3QpCisgICAgeworICAgICAgICBy
ZXR1cm4gdGVzdC0+YXR0YWNoKCk7CisgICAgfQorCisgICAgc3RhdGljIGdib29sZWFuIGRldGFj
aENhbGxiYWNrKFdlYktpdFdlYkluc3BlY3RvciosIEluc3BlY3RvclRlc3QqIHRlc3QpCisgICAg
eworICAgICAgICByZXR1cm4gdGVzdC0+ZGV0YWNoKCk7CisgICAgfQorCisgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIGdNaW5pbXVtQXR0YWNoZWRJbnNwZWN0b3JXaWR0aCA9IDc1MDsKKyAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgZ01pbmltdW1BdHRhY2hlZEluc3BlY3RvckhlaWdodCA9IDI1
MDsKKworICAgIEluc3BlY3RvclRlc3QoKQorICAgICAgICA6IFdlYlZpZXdUZXN0KCkKKyAgICAg
ICAgLCBtX2luc3BlY3Rvcih3ZWJraXRfd2ViX3ZpZXdfZ2V0X2luc3BlY3RvcihtX3dlYlZpZXcp
KQorICAgIHsKKyAgICAgICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfZGV2ZWxvcGVyX2V4
dHJhcyh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKG1fd2ViVmlldyksIFRSVUUpOworICAg
ICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKG1faW5z
cGVjdG9yKSk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9pbnNwZWN0b3IsICJvcGVuLXdp
bmRvdyIsIEdfQ0FMTEJBQ0sob3BlbldpbmRvd0NhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIGdf
c2lnbmFsX2Nvbm5lY3QobV9pbnNwZWN0b3IsICJicmluZy10by1mcm9udCIsIEdfQ0FMTEJBQ0so
YnJpbmdUb0Zyb250Q2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdCht
X2luc3BlY3RvciwgImNsb3NlZCIsIEdfQ0FMTEJBQ0soY2xvc2VkQ2FsbGJhY2spLCB0aGlzKTsK
KyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX2luc3BlY3RvciwgImF0dGFjaCIsIEdfQ0FMTEJB
Q0soYXR0YWNoQ2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX2lu
c3BlY3RvciwgImRldGFjaCIsIEdfQ0FMTEJBQ0soZGV0YWNoQ2FsbGJhY2spLCB0aGlzKTsKKyAg
ICB9CisKKyAgICB+SW5zcGVjdG9yVGVzdCgpCisgICAgeworICAgICAgICBnX3NpZ25hbF9oYW5k
bGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9pbnNwZWN0b3IsIEdfU0lHTkFMX01BVENIX0RBVEEs
IDAsIDAsIDAsIDAsIHRoaXMpOworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBvcGVuV2luZG93
KCkKKyAgICB7CisgICAgICAgIG1fZXZlbnRzLmFwcGVuZChPcGVuV2luZG93KTsKKyAgICAgICAg
Z19tYWluX2xvb3BfcXVpdChtX21haW5Mb29wKTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAg
fQorCisgICAgdmlydHVhbCBib29sIGJyaW5nVG9Gcm9udCgpCisgICAgeworICAgICAgICBtX2V2
ZW50cy5hcHBlbmQoQnJpbmdUb0Zyb250KTsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX21h
aW5Mb29wKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIHZpcnR1YWwgdm9p
ZCBjbG9zZWQoKQorICAgIHsKKyAgICAgICAgbV9ldmVudHMuYXBwZW5kKENsb3NlZCk7CisgICAg
fQorCisgICAgdmlydHVhbCBib29sIGF0dGFjaCgpCisgICAgeworICAgICAgICBtX2V2ZW50cy5h
cHBlbmQoQXR0YWNoKTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgdmlydHVh
bCBib29sIGRldGFjaCgpCisgICAgeworICAgICAgICBtX2V2ZW50cy5hcHBlbmQoRGV0YWNoKTsK
KyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gc2hv
d0lkbGUoSW5zcGVjdG9yVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHdlYmtpdF93ZWJfaW5z
cGVjdG9yX3Nob3codGVzdC0+bV9pbnNwZWN0b3IpOworICAgICAgICByZXR1cm4gRkFMU0U7Cisg
ICAgfQorCisgICAgdm9pZCBzaG93KCkKKyAgICB7CisgICAgICAgIGdfaWRsZV9hZGQocmVpbnRl
cnByZXRfY2FzdDxHU291cmNlRnVuYz4oc2hvd0lkbGUpLCB0aGlzKTsKKyAgICAgICAgZ19tYWlu
X2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIHZvaWQgcmVzaXplVmlld0FuZEF0
dGFjaCgpCisgICAgeworICAgICAgICAvLyBSZXNpemUgdGhlIHZpZXcgdG8gbWFrZSByb29tIGZv
ciB0aGUgaW5zcGVjdG9yLgorICAgICAgICByZXNpemVWaWV3KGdNaW5pbXVtQXR0YWNoZWRJbnNw
ZWN0b3JXaWR0aCwgKGdNaW5pbXVtQXR0YWNoZWRJbnNwZWN0b3JIZWlnaHQgKyAxKSAqIDQgLyAz
KTsKKyAgICAgICAgd2Via2l0X3dlYl9pbnNwZWN0b3JfYXR0YWNoKG1faW5zcGVjdG9yKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gZGV0YWNoSWRsZShJbnNwZWN0b3JUZXN0KiB0ZXN0
KQorICAgIHsKKyAgICAgICAgd2Via2l0X3dlYl9pbnNwZWN0b3JfZGV0YWNoKHRlc3QtPm1faW5z
cGVjdG9yKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIHZvaWQgZGV0YWNo
QW5kV2FpdFVudGlsV2luZG93T3BlbmVkKCkKKyAgICB7CisgICAgICAgIGdfaWRsZV9hZGQocmVp
bnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oZGV0YWNoSWRsZSksIHRoaXMpOworICAgICAgICBn
X21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgfQorCisgICAgdm9pZCBjbG9zZSgpCisg
ICAgeworICAgICAgICB3ZWJraXRfd2ViX2luc3BlY3Rvcl9jbG9zZShtX2luc3BlY3Rvcik7Cisg
ICAgfQorCisgICAgV2ViS2l0V2ViSW5zcGVjdG9yKiBtX2luc3BlY3RvcjsKKyAgICBWZWN0b3I8
SW5zcGVjdG9yRXZlbnRzPiBtX2V2ZW50czsKK307CisKK3N0YXRpYyB2b2lkIHRlc3RJbnNwZWN0
b3JEZWZhdWx0KEluc3BlY3RvclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVz
dC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKEdUS19XSU5ET1dfVE9QTEVWRUwpOwor
ICAgIHRlc3QtPnJlc2l6ZVZpZXcoMjAwLCAyMDApOworICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRt
bD48Ym9keT48cD5XZWJLaXRHVEsrIEluc3BlY3RvciB0ZXN0PC9wPjwvYm9keT48L2h0bWw+Iiwg
MCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5zaG93
KCk7CisgICAgLy8gV2UgZG9uJ3QgYWRkIHRoZSB2aWV3IHRvIGEgY29udGFpbmVyLCBzbyBjb25z
dW1lIHRoZSB3ZWFrIHJlZiB3aXRoIEdSZWZQdHIuCisgICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3
QmFzZT4gaW5zcGVjdG9yVmlldyA9IHdlYmtpdF93ZWJfaW5zcGVjdG9yX2dldF93ZWJfdmlldyh0
ZXN0LT5tX2luc3BlY3Rvcik7CisgICAgZ19hc3NlcnQoaW5zcGVjdG9yVmlldy5nZXQoKSk7Cisg
ICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChp
bnNwZWN0b3JWaWV3LmdldCgpKSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfaW5zcGVjdG9y
X2lzX2F0dGFjaGVkKHRlc3QtPm1faW5zcGVjdG9yKSk7CisgICAgZ19hc3NlcnRfY21wdWludCh3
ZWJraXRfd2ViX2luc3BlY3Rvcl9nZXRfYXR0YWNoZWRfaGVpZ2h0KHRlc3QtPm1faW5zcGVjdG9y
KSwgPT0sIDApOworICAgIFZlY3RvcjxJbnNwZWN0b3JUZXN0OjpJbnNwZWN0b3JFdmVudHM+JiBl
dmVudHMgPSB0ZXN0LT5tX2V2ZW50czsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUo
KSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBJbnNwZWN0b3JU
ZXN0OjpPcGVuV2luZG93KTsKKyAgICB0ZXN0LT5tX2V2ZW50cy5jbGVhcigpOworCisgICAgdGVz
dC0+c2hvdygpOworICAgIGV2ZW50cyA9IHRlc3QtPm1fZXZlbnRzOworICAgIGdfYXNzZXJ0X2Nt
cGludChldmVudHMuc2l6ZSgpLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sw
XSwgPT0sIEluc3BlY3RvclRlc3Q6OkJyaW5nVG9Gcm9udCk7CisgICAgdGVzdC0+bV9ldmVudHMu
Y2xlYXIoKTsKKworICAgIHRlc3QtPnJlc2l6ZVZpZXdBbmRBdHRhY2goKTsKKyAgICBnX2Fzc2Vy
dCh3ZWJraXRfd2ViX2luc3BlY3Rvcl9pc19hdHRhY2hlZCh0ZXN0LT5tX2luc3BlY3RvcikpOwor
ICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X3dlYl9pbnNwZWN0b3JfZ2V0X2F0dGFjaGVkX2hl
aWdodCh0ZXN0LT5tX2luc3BlY3RvciksID49LCBJbnNwZWN0b3JUZXN0OjpnTWluaW11bUF0dGFj
aGVkSW5zcGVjdG9ySGVpZ2h0KTsKKyAgICBldmVudHMgPSB0ZXN0LT5tX2V2ZW50czsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHNbMF0sID09LCBJbnNwZWN0b3JUZXN0OjpBdHRhY2gpOworICAgIHRlc3QtPm1fZXZl
bnRzLmNsZWFyKCk7CisKKyAgICB0ZXN0LT5kZXRhY2hBbmRXYWl0VW50aWxXaW5kb3dPcGVuZWQo
KTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl9pbnNwZWN0b3JfaXNfYXR0YWNoZWQodGVzdC0+
bV9pbnNwZWN0b3IpKTsKKyAgICBldmVudHMgPSB0ZXN0LT5tX2V2ZW50czsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDIpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVu
dHNbMF0sID09LCBJbnNwZWN0b3JUZXN0OjpEZXRhY2gpOworICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHNbMV0sID09LCBJbnNwZWN0b3JUZXN0OjpPcGVuV2luZG93KTsKKyAgICB0ZXN0LT5tX2V2
ZW50cy5jbGVhcigpOworCisgICAgdGVzdC0+Y2xvc2UoKTsKKyAgICBldmVudHMgPSB0ZXN0LT5t
X2V2ZW50czsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDEpOworICAg
IGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBJbnNwZWN0b3JUZXN0OjpDbG9zZWQpOwor
ICAgIHRlc3QtPm1fZXZlbnRzLmNsZWFyKCk7Cit9CisKK2NsYXNzIEN1c3RvbUluc3BlY3RvclRl
c3Q6IHB1YmxpYyBJbnNwZWN0b3JUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9G
SVhUVVJFKEN1c3RvbUluc3BlY3RvclRlc3QpOworCisgICAgQ3VzdG9tSW5zcGVjdG9yVGVzdCgp
CisgICAgICAgIDogSW5zcGVjdG9yVGVzdCgpCisgICAgICAgICwgbV9pbnNwZWN0b3JXaW5kb3co
MCkKKyAgICB7CisgICAgfQorCisgICAgfkN1c3RvbUluc3BlY3RvclRlc3QoKQorICAgIHsKKyAg
ICAgICAgaWYgKG1faW5zcGVjdG9yV2luZG93KQorICAgICAgICAgICAgZ3RrX3dpZGdldF9kZXN0
cm95KG1faW5zcGVjdG9yV2luZG93KTsKKyAgICB9CisKKyAgICBib29sIG9wZW5XaW5kb3coKQor
ICAgIHsKKyAgICAgICAgZ19hc3NlcnQoIW1faW5zcGVjdG9yV2luZG93KTsKKyAgICAgICAgbV9p
bnNwZWN0b3JXaW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKKyAg
ICAgICAgV2ViS2l0V2ViVmlld0Jhc2UqIGluc3BlY3RvclZpZXcgPSB3ZWJraXRfd2ViX2luc3Bl
Y3Rvcl9nZXRfd2ViX3ZpZXcobV9pbnNwZWN0b3IpOworICAgICAgICBnX2Fzc2VydChpbnNwZWN0
b3JWaWV3KTsKKyAgICAgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihtX2luc3Bl
Y3RvcldpbmRvdyksIEdUS19XSURHRVQoaW5zcGVjdG9yVmlldykpOworICAgICAgICBndGtfd2lk
Z2V0X3Nob3dfYWxsKG1faW5zcGVjdG9yV2luZG93KTsKKworICAgICAgICByZXR1cm4gSW5zcGVj
dG9yVGVzdDo6b3BlbldpbmRvdygpOworICAgIH0KKworICAgIHZvaWQgY2xvc2VkKCkKKyAgICB7
CisgICAgICAgIGlmIChtX2luc3BlY3RvcldpbmRvdykgeworICAgICAgICAgICAgZ3RrX3dpZGdl
dF9kZXN0cm95KG1faW5zcGVjdG9yV2luZG93KTsKKyAgICAgICAgICAgIG1faW5zcGVjdG9yV2lu
ZG93ID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBJbnNwZWN0b3JUZXN0OjpjbG9z
ZWQoKTsKKyAgICB9CisKKyAgICBib29sIGF0dGFjaCgpCisgICAgeworICAgICAgICBHUmVmUHRy
PFdlYktpdFdlYlZpZXdCYXNlPiBpbnNwZWN0b3JWaWV3ID0gd2Via2l0X3dlYl9pbnNwZWN0b3Jf
Z2V0X3dlYl92aWV3KG1faW5zcGVjdG9yKTsKKyAgICAgICAgaWYgKG1faW5zcGVjdG9yV2luZG93
KSB7CisgICAgICAgICAgICBndGtfY29udGFpbmVyX3JlbW92ZShHVEtfQ09OVEFJTkVSKG1faW5z
cGVjdG9yV2luZG93KSwgR1RLX1dJREdFVChpbnNwZWN0b3JWaWV3LmdldCgpKSk7CisgICAgICAg
ICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV9pbnNwZWN0b3JXaW5kb3cpOworICAgICAgICAgICAg
bV9pbnNwZWN0b3JXaW5kb3cgPSAwOworICAgICAgICB9CisKKyAgICAgICAgR3RrV2lkZ2V0KiBw
YW5lOworICAgICAgICBpZiAoZ3RrX2Jpbl9nZXRfY2hpbGQoR1RLX0JJTihtX3BhcmVudFdpbmRv
dykpID09IEdUS19XSURHRVQobV93ZWJWaWV3KSkgeworICAgICAgICAgICAgR1JlZlB0cjxXZWJL
aXRXZWJWaWV3PiBpbnNwZWN0ZWRWaWV3ID0gbV93ZWJWaWV3OworICAgICAgICAgICAgZ3RrX2Nv
bnRhaW5lcl9yZW1vdmUoR1RLX0NPTlRBSU5FUihtX3BhcmVudFdpbmRvdyksIEdUS19XSURHRVQo
bV93ZWJWaWV3KSk7CisgICAgICAgICAgICBwYW5lID0gZ3RrX3BhbmVkX25ldyhHVEtfT1JJRU5U
QVRJT05fVkVSVElDQUwpOworICAgICAgICAgICAgZ3RrX3BhbmVkX2FkZDEoR1RLX1BBTkVEKHBh
bmUpLCBHVEtfV0lER0VUKG1fd2ViVmlldykpOworICAgICAgICAgICAgZ3RrX2NvbnRhaW5lcl9h
ZGQoR1RLX0NPTlRBSU5FUihtX3BhcmVudFdpbmRvdyksIHBhbmUpOworICAgICAgICAgICAgZ3Rr
X3dpZGdldF9zaG93X2FsbChwYW5lKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBwYW5l
ID0gZ3RrX2Jpbl9nZXRfY2hpbGQoR1RLX0JJTihtX3BhcmVudFdpbmRvdykpOworICAgICAgICBn
dGtfcGFuZWRfc2V0X3Bvc2l0aW9uKEdUS19QQU5FRChwYW5lKSwgd2Via2l0X3dlYl9pbnNwZWN0
b3JfZ2V0X2F0dGFjaGVkX2hlaWdodChtX2luc3BlY3RvcikpOworICAgICAgICBndGtfcGFuZWRf
YWRkMihHVEtfUEFORUQocGFuZSksIEdUS19XSURHRVQoaW5zcGVjdG9yVmlldy5nZXQoKSkpOwor
CisgICAgICAgIHJldHVybiBJbnNwZWN0b3JUZXN0OjphdHRhY2goKTsKKyAgICB9CisKKyAgICBi
b29sIGRldGFjaCgpCisgICAgeworICAgICAgICBHUmVmUHRyPFdlYktpdFdlYlZpZXdCYXNlPiBp
bnNwZWN0b3JWaWV3ID0gd2Via2l0X3dlYl9pbnNwZWN0b3JfZ2V0X3dlYl92aWV3KG1faW5zcGVj
dG9yKTsKKyAgICAgICAgR3RrV2lkZ2V0KiBwYW5lID0gZ3RrX2Jpbl9nZXRfY2hpbGQoR1RLX0JJ
TihtX3BhcmVudFdpbmRvdykpOworICAgICAgICBnX2Fzc2VydChHVEtfSVNfUEFORUQocGFuZSkp
OworICAgICAgICBndGtfY29udGFpbmVyX3JlbW92ZShHVEtfQ09OVEFJTkVSKHBhbmUpLCBHVEtf
V0lER0VUKGluc3BlY3RvclZpZXcuZ2V0KCkpKTsKKyAgICAgICAgcmV0dXJuIEluc3BlY3RvclRl
c3Q6OmRldGFjaCgpOworICAgIH0KKworICAgIHZvaWQgZGVzdHJveVdpbmRvdygpCisgICAgewor
ICAgICAgICBnX2Fzc2VydChtX2luc3BlY3RvcldpbmRvdyk7CisgICAgICAgIGd0a193aWRnZXRf
ZGVzdHJveShtX2luc3BlY3RvcldpbmRvdyk7CisgICAgICAgIG1faW5zcGVjdG9yV2luZG93ID0g
MDsKKyAgICB9CisKKyAgICBHdGtXaWRnZXQqIG1faW5zcGVjdG9yV2luZG93OworfTsKKworc3Rh
dGljIHZvaWQgdGVzdEluc3BlY3Rvck1hbnVhbEF0dGFjaERldGFjaChDdXN0b21JbnNwZWN0b3JU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdh
aXRVbnRpbE1hcHBlZChHVEtfV0lORE9XX1RPUExFVkVMKTsKKyAgICB0ZXN0LT5yZXNpemVWaWV3
KDIwMCwgMjAwKTsKKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHk+PHA+V2ViS2l0R1RL
KyBJbnNwZWN0b3IgdGVzdDwvcD48L2JvZHk+PC9odG1sPiIsIDApOworICAgIHRlc3QtPndhaXRV
bnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+c2hvdygpOworICAgIHRlc3QtPmFzc2Vy
dE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1Qod2Via2l0X3dlYl9pbnNw
ZWN0b3JfZ2V0X3dlYl92aWV3KHRlc3QtPm1faW5zcGVjdG9yKSkpOworICAgIGdfYXNzZXJ0KCF3
ZWJraXRfd2ViX2luc3BlY3Rvcl9pc19hdHRhY2hlZCh0ZXN0LT5tX2luc3BlY3RvcikpOworICAg
IFZlY3RvcjxJbnNwZWN0b3JUZXN0OjpJbnNwZWN0b3JFdmVudHM+JiBldmVudHMgPSB0ZXN0LT5t
X2V2ZW50czsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDEpOworICAg
IGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBJbnNwZWN0b3JUZXN0OjpPcGVuV2luZG93
KTsKKyAgICB0ZXN0LT5tX2V2ZW50cy5jbGVhcigpOworCisgICAgdGVzdC0+cmVzaXplVmlld0Fu
ZEF0dGFjaCgpOworICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfaW5zcGVjdG9yX2lzX2F0dGFjaGVk
KHRlc3QtPm1faW5zcGVjdG9yKSk7CisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfd2ViX2lu
c3BlY3Rvcl9nZXRfYXR0YWNoZWRfaGVpZ2h0KHRlc3QtPm1faW5zcGVjdG9yKSwgPj0sIEluc3Bl
Y3RvclRlc3Q6OmdNaW5pbXVtQXR0YWNoZWRJbnNwZWN0b3JIZWlnaHQpOworICAgIGV2ZW50cyA9
IHRlc3QtPm1fZXZlbnRzOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwg
MSk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIEluc3BlY3RvclRlc3Q6OkF0
dGFjaCk7CisgICAgdGVzdC0+bV9ldmVudHMuY2xlYXIoKTsKKworICAgIHRlc3QtPmRldGFjaEFu
ZFdhaXRVbnRpbFdpbmRvd09wZW5lZCgpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX2luc3Bl
Y3Rvcl9pc19hdHRhY2hlZCh0ZXN0LT5tX2luc3BlY3RvcikpOworICAgIGV2ZW50cyA9IHRlc3Qt
Pm1fZXZlbnRzOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgMik7Cisg
ICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIEluc3BlY3RvclRlc3Q6OkRldGFjaCk7
CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIEluc3BlY3RvclRlc3Q6Ok9wZW5X
aW5kb3cpOworICAgIHRlc3QtPm1fZXZlbnRzLmNsZWFyKCk7CisKKyAgICB0ZXN0LT5yZXNpemVW
aWV3QW5kQXR0YWNoKCk7CisgICAgZ19hc3NlcnQod2Via2l0X3dlYl9pbnNwZWN0b3JfaXNfYXR0
YWNoZWQodGVzdC0+bV9pbnNwZWN0b3IpKTsKKyAgICB0ZXN0LT5tX2V2ZW50cy5jbGVhcigpOwor
ICAgIHRlc3QtPmNsb3NlKCk7CisgICAgZXZlbnRzID0gdGVzdC0+bV9ldmVudHM7CisgICAgZ19h
c3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAyKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
ZXZlbnRzWzBdLCA9PSwgSW5zcGVjdG9yVGVzdDo6RGV0YWNoKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoZXZlbnRzWzFdLCA9PSwgSW5zcGVjdG9yVGVzdDo6Q2xvc2VkKTsKKyAgICB0ZXN0LT5tX2V2
ZW50cy5jbGVhcigpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0SW5zcGVjdG9yQ3VzdG9tQ29udGFp
bmVyRGVzdHJveWVkKEN1c3RvbUluc3BlY3RvclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7
CisgICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKEdUS19XSU5ET1dfVE9Q
TEVWRUwpOworICAgIHRlc3QtPnJlc2l6ZVZpZXcoMjAwLCAyMDApOworICAgIHRlc3QtPmxvYWRI
dG1sKCI8aHRtbD48Ym9keT48cD5XZWJLaXRHVEsrIEluc3BlY3RvciB0ZXN0PC9wPjwvYm9keT48
L2h0bWw+IiwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0
ZXN0LT5zaG93KCk7CisgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5p
c2hlcyhHX09CSkVDVCh3ZWJraXRfd2ViX2luc3BlY3Rvcl9nZXRfd2ViX3ZpZXcodGVzdC0+bV9p
bnNwZWN0b3IpKSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfaW5zcGVjdG9yX2lzX2F0dGFj
aGVkKHRlc3QtPm1faW5zcGVjdG9yKSk7CisKKyAgICB0ZXN0LT5tX2V2ZW50cy5jbGVhcigpOwor
ICAgIHRlc3QtPmRlc3Ryb3lXaW5kb3coKTsKKyAgICBWZWN0b3I8SW5zcGVjdG9yVGVzdDo6SW5z
cGVjdG9yRXZlbnRzPiYgZXZlbnRzID0gdGVzdC0+bV9ldmVudHM7CisgICAgZ19hc3NlcnRfY21w
aW50KGV2ZW50cy5zaXplKCksID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBd
LCA9PSwgSW5zcGVjdG9yVGVzdDo6Q2xvc2VkKTsKKyAgICB0ZXN0LT5tX2V2ZW50cy5jbGVhcigp
OworfQorCit2b2lkIGJlZm9yZUFsbCgpCit7CisgICAgSW5zcGVjdG9yVGVzdDo6YWRkKCJXZWJL
aXRXZWJJbnNwZWN0b3IiLCAiZGVmYXVsdCIsIHRlc3RJbnNwZWN0b3JEZWZhdWx0KTsKKyAgICBD
dXN0b21JbnNwZWN0b3JUZXN0OjphZGQoIldlYktpdFdlYkluc3BlY3RvciIsICJtYW51YWwtYXR0
YWNoLWRldGFjaCIsIHRlc3RJbnNwZWN0b3JNYW51YWxBdHRhY2hEZXRhY2gpOworICAgIEN1c3Rv
bUluc3BlY3RvclRlc3Q6OmFkZCgiV2ViS2l0V2ViSW5zcGVjdG9yIiwgImN1c3RvbS1jb250YWlu
ZXItZGVzdHJveWVkIiwgdGVzdEluc3BlY3RvckN1c3RvbUNvbnRhaW5lckRlc3Ryb3llZCk7Cit9
CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RJbnNwZWN0b3JTZXJ2ZXIuY3BwIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RJbnNwZWN0b3JTZXJ2ZXIuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiYjYyY2UKLS0tIC9kZXYvbnVsbAorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdEluc3BlY3RvclNlcnZlci5j
cHAKQEAgLTAsMCArMSwyOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBF
bGVjdHJvbmljcyBMdGQuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCisjaW5jbHVkZSA8
d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CisvLyBOYW1lIG9mIHRoZSB0ZXN0IHNlcnZlciBhcHBsaWNhdGlvbiBjcmVhdGluZyB0aGUgd2Vi
VmlldyBvYmplY3QuCitzdGF0aWMgY29uc3QgY2hhciogZ1Rlc3RTZXJ2ZXJBcHBOYW1lID0gIklu
c3BlY3RvclRlc3RTZXJ2ZXIiOworCisvLyBNYXggc2Vjb25kcyB0byB3YWl0IGZvciB0aGUgdGVz
dCBzZXJ2ZXIgYmVmb3JlIGluc3BlY3RpbmcgaXQuCitzdGF0aWMgY29uc3QgaW50IGdNYXhXYWl0
Rm9yQ2hpbGQgPSA1OworCisvLyBUaGUgUElEIGZvciB0aGUgdGVzdCBzZXJ2ZXIgcnVubmluZywg
c28gd2UgY2FuIGtpbGwgaXQgaWYgbmVlZGVkLgorc3RhdGljIEdQaWQgZ0NoaWxkUHJvY2Vzc1Bp
ZCA9IDA7CisKKy8vIFdoZXRoZXIgdGhlIGNoaWxkIGhhcyByZXBsaWVkIGFuZCBpdCdzIHJlYWR5
Lgorc3RhdGljIGJvb2wgZ0NoaWxkSXNSZWFkeSA9IGZhbHNlOworCitzdGF0aWMgdm9pZCBzdG9w
VGVzdFNlcnZlcigpCit7CisgICAgLy8gRG8gbm90aGluZyBpZiB0aGVyZSdzIG5vIHNlcnZlciBy
dW5uaW5nLgorICAgIGlmICghZ0NoaWxkUHJvY2Vzc1BpZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgZ19zcGF3bl9jbG9zZV9waWQoZ0NoaWxkUHJvY2Vzc1BpZCk7CisgICAga2lsbChnQ2hpbGRQ
cm9jZXNzUGlkLCBTSUdURVJNKTsKKyAgICBnQ2hpbGRQcm9jZXNzUGlkID0gMDsKK30KKworc3Rh
dGljIHZvaWQgc2lnQWJvcnRIYW5kbGVyKGludCBzaWdOdW0pCit7CisgICAgLy8gSnVzdCBzdG9w
IHRoZSB0ZXN0IHNlcnZlciBpZiBTSUdBQlJUIHdhcyByZWNlaXZlZC4KKyAgICBzdG9wVGVzdFNl
cnZlcigpOworfQorCitzdGF0aWMgZ3BvaW50ZXIgdGVzdFNlcnZlck1vbml0b3JUaHJlYWRGdW5j
KGdwb2ludGVyKQoreworICAgIC8vIFdhaXQgZm9yIHRoZSBzcGVjaWZpZWQgdGltZW91dCB0byBo
YXBwZW4uCisgICAgZ191c2xlZXAoZ01heFdhaXRGb3JDaGlsZCAqIEdfVVNFQ19QRVJfU0VDKTsK
KworICAgIC8vIEtpbGwgdGhlIGNoaWxkIHByb2Nlc3MgaWYgbm90IHJlYWR5IHlldC4KKyAgICBp
ZiAoIWdDaGlsZElzUmVhZHkpCisgICAgICAgIHN0b3BUZXN0U2VydmVyKCk7CisKKyAgICBnX3Ro
cmVhZF9leGl0KDApOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzdGFydFRlc3RT
ZXJ2ZXJNb25pdG9yKCkKK3sKKyAgICBnQ2hpbGRJc1JlYWR5ID0gZmFsc2U7CisgICAgZ190aHJl
YWRfbmV3KCJUZXN0U2VydmVyTW9uaXRvciIsIHRlc3RTZXJ2ZXJNb25pdG9yVGhyZWFkRnVuYywg
MCk7Cit9CisKK3N0YXRpYyB2b2lkIHN0YXJ0VGVzdFNlcnZlcigpCit7CisgICAgLy8gUHJlcGFy
ZSBhcmd2W10gZm9yIHNwYXduaW5nIHRoZSBzZXJ2ZXIgcHJvY2Vzcy4KKyAgICBHT3duUHRyPGNo
YXI+IHRlc3RTZXJ2ZXJQYXRoKGdfYnVpbGRfZmlsZW5hbWUoV0VCS0lUX0VYRUNfUEFUSCwgIlRl
c3RXZWJLaXRBUEkiLCAiV2ViS2l0Mkd0ayIsIGdUZXN0U2VydmVyQXBwTmFtZSwgTlVMTCkpOwor
CisgICAgLy8gV2UgaW5zdGFsbCBhIGhhbmRsZXIgdG8gZW5zdXJlIHRoYXQgd2Uga2lsbCB0aGUg
Y2hpbGQgcHJvY2VzcworICAgIC8vIGlmIHRoZSBwYXJlbnQgZGllcyBiZWNhdXNlIG9mIHdoYXRl
dmVyIHRoZSByZWFzb24gaXMuCisgICAgc2lnbmFsKFNJR0FCUlQsIHNpZ0Fib3J0SGFuZGxlcik7
CisKKyAgICBjaGFyKiB0ZXN0U2VydmVyQXJndlsyXTsKKyAgICB0ZXN0U2VydmVyQXJndlswXSA9
IHRlc3RTZXJ2ZXJQYXRoLmdldCgpOworICAgIHRlc3RTZXJ2ZXJBcmd2WzFdID0gMDsKKworICAg
IC8vIFNwYXduIHRoZSBzZXJ2ZXIsIGdldHRpbmcgaXRzIHN0ZG91dCBmaWxlIGRlc2NyaXB0b3Ig
dG8gc2V0IGEKKyAgICAvLyBjb21tdW5pY2F0aW9uIGNoYW5uZWwsIHNvIHdlIGtub3cgd2hlbiBp
dCdzIHJlYWR5LgorICAgIGludCBjaGlsZFN0ZG91dCA9IDA7CisgICAgZ19hc3NlcnQoZ19zcGF3
bl9hc3luY193aXRoX3BpcGVzKDAsIHRlc3RTZXJ2ZXJBcmd2LCAwLCBzdGF0aWNfY2FzdDxHU3Bh
d25GbGFncz4oMCksIDAsIDAsCisgICAgICAgICZnQ2hpbGRQcm9jZXNzUGlkLCAwLCAmY2hpbGRT
dGRvdXQsIDAsIDApKTsKKworICAgIC8vIFN0YXJ0IG1vbml0b3JpbmcgdGhlIHRlc3Qgc2VydmVy
IChpbiBhIHNlcGFyYXRlIHRocmVhZCkgdG8KKyAgICAvLyBlbnN1cmUgd2UgZG9uJ3QgYmxvY2sg
b24gdGhlIGNoaWxkIHByb2Nlc3MgbW9yZSB0aGFuIGEgdGltZW91dC4KKyAgICBzdGFydFRlc3RT
ZXJ2ZXJNb25pdG9yKCk7CisKKyAgICBjaGFyIG1zZ1syXTsKKyAgICBHSU9DaGFubmVsKiBpb0No
YW5uZWwgPSBnX2lvX2NoYW5uZWxfdW5peF9uZXcoY2hpbGRTdGRvdXQpOworICAgIGlmIChnX2lv
X2NoYW5uZWxfcmVhZF9jaGFycyhpb0NoYW5uZWwsIG1zZywgMiwgMCwgMCkgPT0gR19JT19TVEFU
VVNfTk9STUFMKSB7CisgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlIHNlcnZlciBzZW50IGEg
bWVzc2FnZSBzYXlpbmcgaXQncyByZWFkeQorICAgICAgICAvLyBhbmQgc3RvcmUgdGhlIHJlc3Vs
dCBnbG9iYWxseSwgc28gdGhlIG1vbml0b3IgY2FuIHNlZSBpdC4KKyAgICAgICAgZ0NoaWxkSXNS
ZWFkeSA9IG1zZ1swXSA9PSAnTycgJiYgbXNnWzFdID09ICdLJzsKKyAgICB9CisgICAgZ19pb19j
aGFubmVsX3VucmVmKGlvQ2hhbm5lbCk7CisgICAgY2xvc2UoY2hpbGRTdGRvdXQpOworCisgICAg
Ly8gVGhlIHRpbWVvdXQgd2FzIHJlYWNoZWQgYW5kIHRoZSBzZXJ2ZXIgaXMgbm90IHJlYWR5IHll
dCwgc28KKyAgICAvLyBzdG9wIGl0IGlubWVkaWF0ZWx5LCBhbmQgbGV0IHRoZSB1bml0IHRlc3Rz
IGZhaWwuCisgICAgaWYgKCFnQ2hpbGRJc1JlYWR5KQorICAgICAgICBzdG9wVGVzdFNlcnZlcigp
OworfQorCitjbGFzcyBJbnNwZWN0b3JTZXJ2ZXJUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3Qgewor
cHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoSW5zcGVjdG9yU2VydmVyVGVzdCk7
CisKKyAgICBJbnNwZWN0b3JTZXJ2ZXJUZXN0KCkKKyAgICAgICAgOiBXZWJWaWV3VGVzdCgpCisg
ICAgeworICAgIH0KKworICAgIGJvb2wgZ2V0UGFnZUxpc3QoKQorICAgIHsKKyAgICAgICAgbG9h
ZEh0bWwoIjxzY3JpcHQgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiPlxuIgorICAgICAgICAgICAg
InZhciBwYWdlcztcbiIKKyAgICAgICAgICAgICJ2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0
O1xuIgorICAgICAgICAgICAgInhoci5vcGVuKFwiR0VUXCIsIFwiL3BhZ2VsaXN0Lmpzb25cIik7
XG4iCisgICAgICAgICAgICAieGhyLm9ubG9hZCA9IGZ1bmN0aW9uKGUpIHtcbiIKKyAgICAgICAg
ICAgICAgICAiaWYgKHhoci5zdGF0dXMgPT0gMjAwKSB7XG4iCisgICAgICAgICAgICAgICAgICAg
ICJwYWdlcyA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4iCisgICAgICAgICAgICAg
ICAgICAgICJkb2N1bWVudC50aXRsZSA9IFwiT0tcIjtcbiIKKyAgICAgICAgICAgICAgICAifSBl
bHNlIFxuIgorICAgICAgICAgICAgICAgICAgICAiZG9jdW1lbnQudGl0bGUgPSBcIkZBSUxcIjtc
biIKKyAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgInhoci5zZW5kKCk7XG4iCisg
ICAgICAgICAgICAiPC9zY3JpcHQ+XG4iLAorICAgICAgICAgICAgImh0dHA6Ly8xMjcuMC4wLjE6
Mjk5OS8iKTsKKworICAgICAgICB3YWl0VW50aWxUaXRsZUNoYW5nZWQoKTsKKworICAgICAgICBp
ZiAoIXN0cmNtcCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3RpdGxlKG1fd2ViVmlldyksICJPSyIpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIH5JbnNwZWN0b3JTZXJ2ZXJUZXN0KCkKKyAgICB7CisgICAgfQorfTsKKworLy8gVGVz
dCB0byBnZXQgaW5zcGVjdG9yIHNlcnZlciBwYWdlIGxpc3QgZnJvbSB0aGUgdGVzdCBzZXJ2ZXIu
CisvLyBTaG91bGQgY29udGFpbiBvbmx5IG9uZSBlbnRyeSBwb2ludGluZyB0byBodHRwOi8vMTI3
LjAuMC4xOjI5OTkvd2ViaW5zcGVjdG9yL01haW4uaHRtbD9wYWdlPTEKK3N0YXRpYyB2b2lkIHRl
c3RJbnNwZWN0b3JTZXJ2ZXJQYWdlTGlzdChJbnNwZWN0b3JTZXJ2ZXJUZXN0KiB0ZXN0LCBnY29u
c3Rwb2ludGVyKQoreworICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKworICAgIHRlc3QtPnNo
b3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZChHVEtfV0lORE9XX1RPUExFVkVMKTsKKyAgICBn
X2Fzc2VydCh0ZXN0LT5nZXRQYWdlTGlzdCgpKTsKKworICAgIFdlYktpdEphdmFzY3JpcHRSZXN1
bHQqIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmlu
aXNoZWQoInBhZ2VzLmxlbmd0aDsiLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGdfYXNzZXJ0KGph
dmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7CisgICAgZ19hc3Nl
cnRfY21waW50KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9OdW1iZXIoamF2YXNjcmlw
dFJlc3VsdCksID09LCAxKTsKKworICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZh
U2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoInBhZ2VzWzBdLmlkOyIsICZlcnJvci5vdXRQdHIo
KSk7CisgICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9y
LmdldCgpKTsKKyAgICBpbnQgcGFnZUlkID0gV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRU
b051bWJlcihqYXZhc2NyaXB0UmVzdWx0KTsKKworICAgIEdPd25QdHI8Y2hhcj4gdmFsdWVTdHJp
bmc7CisgICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50
aWxGaW5pc2hlZCgicGFnZXNbMF0udXJsOyIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3Nl
cnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKyAgICB2
YWx1ZVN0cmluZy5zZXQoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0NTdHJpbmcoamF2
YXNjcmlwdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih2YWx1ZVN0cmluZy5nZXQoKSwg
PT0sICJodHRwOi8vMTI3LjAuMC4xOjI5OTkvIik7CisKKyAgICBqYXZhc2NyaXB0UmVzdWx0ID0g
dGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJwYWdlc1swXS5pbnNwZWN0
b3JVcmw7IiwgJmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0
KTsKKyAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOworICAgIHZhbHVlU3RyaW5nLnNldChXZWJW
aWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7Cisg
ICAgU3RyaW5nIHZhbGlkSW5zcGVjdG9yVVJMID0gU3RyaW5nKCIvTWFpbi5odG1sP3BhZ2U9Iikg
KyBTdHJpbmc6Om51bWJlcihwYWdlSWQpOworICAgIEFTU0VSVF9DTVBfQ1NUUklORyh2YWx1ZVN0
cmluZy5nZXQoKSwgPT0sIHZhbGlkSW5zcGVjdG9yVVJMLnV0ZjgoKSk7Cit9CisKKy8vIFRlc3Qg
c2VuZGluZyBhIHJhdyByZW1vdGUgZGVidWdnaW5nIG1lc3NhZ2UgdGhyb3VnaCBvdXIgd2ViIHNv
Y2tldCBzZXJ2ZXIuCisvLyBGb3IgdGhpcyBzcGVjaWZpYyBtZXNzYWdlIHNlZTogaHR0cDovL2Nv
ZGUuZ29vZ2xlLmNvbS9jaHJvbWUvZGV2dG9vbHMvZG9jcy9wcm90b2NvbC90b3QvcnVudGltZS5o
dG1sI2NvbW1hbmQtZXZhbHVhdGUKK3N0YXRpYyB2b2lkIHRlc3RSZW1vdGVEZWJ1Z2dpbmdNZXNz
YWdlKEluc3BlY3RvclNlcnZlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVz
dC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKEdUS19XSU5ET1dfVE9QTEVWRUwpOwor
CisgICAgdGVzdC0+bG9hZEh0bWwoIjxzY3JpcHQgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiPlxu
IgorICAgICAgICAidmFyIHNvY2tldCA9IG5ldyBXZWJTb2NrZXQoJ3dzOi8vMTI3LjAuMC4xOjI5
OTkvZGV2dG9vbHMvcGFnZS8xJyk7XG4iCisgICAgICAgICJzb2NrZXQub25tZXNzYWdlID0gZnVu
Y3Rpb24obWVzc2FnZSkge1xuIgorICAgICAgICAgICAgInZhciByZXNwb25zZSA9IEpTT04ucGFy
c2UobWVzc2FnZS5kYXRhKTtcbiIKKyAgICAgICAgICAgICJpZiAocmVzcG9uc2UuaWQgPT09IDEp
XG4iCisgICAgICAgICAgICAgICAgImRvY3VtZW50LnRpdGxlID0gcmVzcG9uc2UucmVzdWx0LnJl
c3VsdC52YWx1ZTtcbiIKKyAgICAgICAgICAgICJlbHNlXG4iCisgICAgICAgICAgICAgICAgImRv
Y3VtZW50LnRpdGxlID0gXCJGQUlMXCI7XG4iCisgICAgICAgICAgICAifVxuIgorICAgICAgICAg
ICAgInNvY2tldC5vbm9wZW4gPSBmdW5jdGlvbigpIHtcbiIKKyAgICAgICAgICAgICJzb2NrZXQu
c2VuZCgne1wiaWRcIjogMSwgXCJtZXRob2RcIjogXCJSdW50aW1lLmV2YWx1YXRlXCIsIFwicGFy
YW1zXCI6IHtcImV4cHJlc3Npb25cIjogXCIyICsgMlwiIH0gfScpO1xuIgorICAgICAgICAifVxu
IgorICAgICAgICAiPC9zY3JpcHQ+IiwKKyAgICAgICAgImh0dHA6Ly8xMjcuMC4wLjE6Mjk5OS8i
KTsKKyAgICB0ZXN0LT53YWl0VW50aWxUaXRsZUNoYW5nZWQoKTsKKworICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3RpdGxlKHRlc3QtPm1fd2ViVmlldyksID09LCAiNCIp
OworfQorCitzdGF0aWMgdm9pZCBvcGVuUmVtb3RlRGVidWdnaW5nU2Vzc2lvbihJbnNwZWN0b3JT
ZXJ2ZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIC8vIFRvIHRlc3QgdGhlIHdo
b2xlIHBpcGVsaW5lIHRoaXMgZXhwbG9pdHMgYSBiZWhhdmlvciBvZiB0aGUgaW5zcGVjdG9yIGZy
b250LWVuZCB3aGljaCB3b24ndCBwcm92aWRlIHRoZSBwYWdlIGFkZHJlc3MgYXMgdGl0bGUgdW5s
ZXNzIHRoZQorICAgIC8vIGRlYnVnZ2luZyBzZXNzaW9uIHdhcyBlc3RhYmxpc2hlZCBjb3JyZWN0
bHkgdGhyb3VnaCB3ZWIgc29ja2V0LgorICAgIC8vIEluIG91ciBjYXNlIHBhZ2UgVVJMIHNob3Vs
ZCBiZSBodHRwOi8vMTI3LjAuMC4xOjI5OTkvCisgICAgLy8gU28gdGhpcyB0ZXN0IGNhc2Ugd2ls
bCBmYWlsIGlmOgorICAgIC8vIC0gVGhlIHBhZ2UgbGlzdCBkaWRuJ3QgcmV0dXJuIGEgdmFsaWQg
aW5zcGVjdG9yIFVSTAorICAgIC8vIC0gT3IgdGhlIGZyb250LWVuZCBjb3VsZG4ndCBiZSBsb2Fk
ZWQgdGhyb3VnaCB0aGUgaW5zcGVjdG9yIEhUVFAgc2VydmVyCisgICAgLy8gLSBPciB0aGUgd2Vi
IHNvY2tldCBjb25uZWN0aW9uIGNvdWxkbid0IGJlIGVzdGFibGlzaGVkIGJldHdlZW4gdGhlIGZy
b250LWVuZCBhbmQgdGhlIHBhZ2UgdGhyb3VnaCB0aGUgaW5zcGVjdG9yIHNlcnZlcgorICAgIC8v
IExldCdzIHNlZSBpZiB0aGlzIHRlc3QgaXNuJ3QgcmFpc2luZyB0b28gbWFueSBmYWxzZSBwb3Np
dGl2ZXMsIGluIHdoaWNoIGNhc2Ugd2Ugc2hvdWxkIHVzZSBhIGJldHRlciBwcmVkaWNhdGUgaWYg
YXZhaWxhYmxlLgorCisgICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKEdU
S19XSU5ET1dfVE9QTEVWRUwpOworCisgICAgZ19hc3NlcnQodGVzdC0+Z2V0UGFnZUxpc3QoKSk7
CisKKyAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgV2ViS2l0SmF2YXNjcmlwdFJlc3Vs
dCogamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5p
c2hlZCgicGFnZXNbMF0uaW5zcGVjdG9yVXJsOyIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19h
c3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKwor
ICAgIFN0cmluZyByZXNvbHZlZFVSTCA9IFN0cmluZygiaHR0cDovLzEyNy4wLjAuMToyOTk5LyIp
ICsgU3RyaW5nOjpmcm9tVVRGOChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmlu
ZyhqYXZhc2NyaXB0UmVzdWx0KSk7CisgICAgdGVzdC0+bG9hZFVSSShyZXNvbHZlZFVSTC51dGY4
KCkuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIGph
dmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQo
IndpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnbGknKVswXS50aXRsZSIsICZl
cnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19h
c3NlcnQoIWVycm9yLmdldCgpKTsKKworICAgIEdPd25QdHI8Y2hhcj4gdGl0bGUoV2ViVmlld1Rl
c3Q6OmphdmFzY3JpcHRSZXN1bHRUb0NTdHJpbmcoamF2YXNjcmlwdFJlc3VsdCkpOworICAgIGdf
YXNzZXJ0X2NtcHN0cih0aXRsZS5nZXQoKSwgPT0sICJodHRwOi8vMTI3LjAuMC4xOjI5OTkvIik7
Cit9CisKK3N0YXRpYyB2b2lkIHNlbmRJbmNvbXBsZXRlUmVxdWVzdChJbnNwZWN0b3JTZXJ2ZXJU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsK
KworICAgIC8vIENvbm5lY3QgdG8gdGhlIGluc3BlY3RvciBzZXJ2ZXIuCisgICAgR1JlZlB0cjxH
U29ja2V0Q2xpZW50PiBjbGllbnQgPSBhZG9wdEdSZWYoZ19zb2NrZXRfY2xpZW50X25ldygpKTsK
KyAgICBHUmVmUHRyPEdTb2NrZXRDb25uZWN0aW9uPiBjb25uZWN0aW9uID0gYWRvcHRHUmVmKGdf
c29ja2V0X2NsaWVudF9jb25uZWN0X3RvX2hvc3QoY2xpZW50LmdldCgpLCAiMTI3LjAuMC4xIiwg
Mjk5OSwgMCwgJmVycm9yLm91dFB0cigpKSk7CisgICAgZ19hc3NlcnRfbm9fZXJyb3IoZXJyb3Iu
Z2V0KCkpOworCisgICAgLy8gU2VuZCBpbmNvbXBsZXRlIHJlcXVlc3QgKG1pc3NpbmcgYmxhbmsg
bGluZSBhZnRlciBoZWFkZXJzKSBhbmQgY2hlY2sgaWYgaW5zcGVjdG9yIHNlcnZlcgorICAgIC8v
IHJlcGxpZXMuIFRoZSBzZXJ2ZXIgc2hvdWxkIG5vdCByZXBseSB0byBhbiBpbmNvbXBsZXRlIHJl
cXVlc3QgYW5kIHRoZSB0ZXN0IHNob3VsZCB0aW1lb3V0CisgICAgLy8gb24gcmVhZC4KKyAgICBH
T3V0cHV0U3RyZWFtKiBvc3RyZWFtID0gZ19pb19zdHJlYW1fZ2V0X291dHB1dF9zdHJlYW0oR19J
T19TVFJFQU0oY29ubmVjdGlvbi5nZXQoKSkpOworICAgIC8vIFJlcXVlc3QgbWlzc2luZyBibGFu
ayBsaW5lIGFmdGVyIGhlYWRlcnMuCisgICAgY29uc3QgZ2NoYXIqIGluY29tcGxldGVSZXF1ZXN0
ID0gIkdFVCAvZGV2dG9vbHMvcGFnZS8xIEhUVFAvMS4xXHJcbkhvc3Q6IExvY2FsaG9zdFxyXG4i
OworICAgIGdfb3V0cHV0X3N0cmVhbV93cml0ZShvc3RyZWFtLCBpbmNvbXBsZXRlUmVxdWVzdCwg
c3RybGVuKGluY29tcGxldGVSZXF1ZXN0KSwgMCwgJmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fz
c2VydF9ub19lcnJvcihlcnJvci5nZXQoKSk7CisKKyAgICBHSW5wdXRTdHJlYW0qIGlzdHJlYW0g
PSBnX2lvX3N0cmVhbV9nZXRfaW5wdXRfc3RyZWFtKEdfSU9fU1RSRUFNKGNvbm5lY3Rpb24uZ2V0
KCkpKTsKKyAgICBjaGFyIHJlc3BvbnNlWzE2XTsKKyAgICBtZW1zZXQocmVzcG9uc2UsIDAsIHNp
emVvZihyZXNwb25zZSkpOworICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBjYW5jZWwgPSBhZG9w
dEdSZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSk7CisgICAgZ19pbnB1dF9zdHJlYW1fcmVhZF9hc3lu
Yyhpc3RyZWFtLCByZXNwb25zZSwgc2l6ZW9mKHJlc3BvbnNlKSAtIDEsIEdfUFJJT1JJVFlfREVG
QVVMVCwgY2FuY2VsLmdldCgpLCAwLCAwKTsKKyAgICAvLyBHaXZlIGEgY2hhbmNlIGZvciB0aGUg
c2VydmVyIHRvIHJlcGx5LgorICAgIHRlc3QtPndhaXQoMSk7CisgICAgZ19jYW5jZWxsYWJsZV9j
YW5jZWwoY2FuY2VsLmdldCgpKTsKKyAgICAvLyBJZiB3ZSBnb3QgYW55IGFuc3dlciBpdCBtZWFu
cyB0aGUgc2VydmVyIHJlcGxpZWQgdG8gYW4gaW5jb21wbGV0ZSByZXF1ZXN0LCBsZXRzIGZhaWwu
CisgICAgZ19hc3NlcnQocmVzcG9uc2VbMF0gPT0gJ1wwJyk7Cit9CisKK3ZvaWQgYmVmb3JlQWxs
KCkKK3sKKyAgICAvLyBPdmVyd3JpdGUgV0VCS0lUX0lOU1BFQ1RPUl9TRVJWRVIgdmFyaWFibGUg
d2l0aCBkZWZhdWx0IElQIGFkZHJlc3MgYnV0IGRpZmZlcmVudCBwb3J0IHRvIGF2b2lkIGNvbmZs
aWN0IHdpdGggdGhlIHRlc3QgaW5zcGVjdG9yIHNlcnZlciBwYWdlLgorICAgIGdfc2V0ZW52KCJX
RUJLSVRfSU5TUEVDVE9SX1NFUlZFUiIsICIxMjcuMC4wLjE6Mjk5OCIsIFRSVUUpOworCisgICAg
c3RhcnRUZXN0U2VydmVyKCk7CisgICAgSW5zcGVjdG9yU2VydmVyVGVzdDo6YWRkKCJXZWJLaXRX
ZWJJbnNwZWN0b3JTZXJ2ZXIiLCAidGVzdC1wYWdlLWxpc3QiLCB0ZXN0SW5zcGVjdG9yU2VydmVy
UGFnZUxpc3QpOworICAgIEluc3BlY3RvclNlcnZlclRlc3Q6OmFkZCgiV2ViS2l0V2ViSW5zcGVj
dG9yU2VydmVyIiwgInRlc3QtcmVtb3RlLWRlYnVnZ2luZy1tZXNzYWdlIiwgdGVzdFJlbW90ZURl
YnVnZ2luZ01lc3NhZ2UpOworICAgIEluc3BlY3RvclNlcnZlclRlc3Q6OmFkZCgiV2ViS2l0V2Vi
SW5zcGVjdG9yU2VydmVyIiwgInRlc3Qtb3Blbi1kZWJ1Z2dpbmctc2Vzc2lvbiIsIG9wZW5SZW1v
dGVEZWJ1Z2dpbmdTZXNzaW9uKTsKKyAgICBJbnNwZWN0b3JTZXJ2ZXJUZXN0OjphZGQoIldlYktp
dFdlYkluc3BlY3RvclNlcnZlciIsICJ0ZXN0LWluY29tcGxldGUtcmVxdWVzdCIsIHNlbmRJbmNv
bXBsZXRlUmVxdWVzdCk7CisKK30KKwordm9pZCBhZnRlckFsbCgpCit7CisgICAgc3RvcFRlc3RT
ZXJ2ZXIoKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Mkd0ay9UZXN0TG9hZGVyQ2xpZW50LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Mkd0ay9UZXN0TG9hZGVyQ2xpZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4zMzE5MTVlCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXQyR3RrL1Rlc3RMb2FkZXJDbGllbnQuY3BwCkBAIC0wLDAgKzEsNDY1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIEd1c3Rhdm8gTm9yb25oYSBTaWx2YQorICog
Q29weXJpZ2h0IChDKSAyMDA5LCAyMDExIElnYWxpYSBTLkwuCisgKiBQb3J0aW9ucyBDb3B5cmln
aHQgKGMpIDIwMTEgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkxvYWRUcmFja2luZ1Rlc3QuaCIKKyNp
bmNsdWRlICJXZWJLaXRUZXN0QnVzLmgiCisjaW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5oIgor
I2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUg
PGxpYnNvdXAvc291cC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworc3RhdGlj
IFdlYktpdFRlc3RCdXMqIGJ1czsKK3N0YXRpYyBXZWJLaXRUZXN0U2VydmVyKiBrU2VydmVyOwor
Citjb25zdCBjaGFyKiBrRE5USGVhZGVyTm90UHJlc2VudCA9ICJETlQgaGVhZGVyIG5vdCBwcmVz
ZW50IjsKKworc3RhdGljIHZvaWQgdGVzdExvYWRpbmdTdGF0dXMoTG9hZFRyYWNraW5nVGVzdCog
dGVzdCwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIHRlc3QtPnNldFJlZGlyZWN0VVJJKGtT
ZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9ub3JtYWwiKS5kYXRhKCkpOworICAgIHRlc3QtPmxvYWRV
Ukkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3JlZGlyZWN0IikuZGF0YSgpKTsKKyAgICB0ZXN0
LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIFZlY3RvcjxMb2FkVHJhY2tpbmdUZXN0
OjpMb2FkRXZlbnRzPiYgZXZlbnRzID0gdGVzdC0+bV9sb2FkRXZlbnRzOworICAgIGdfYXNzZXJ0
X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgNCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50
c1swXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOworICAg
IGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNp
b25hbExvYWRSZWNlaXZlZFNlcnZlclJlZGlyZWN0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZl
bnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZENvbW1pdHRlZCk7CisgICAgZ19hc3Nl
cnRfY21waW50KGV2ZW50c1szXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7
Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RMb2FkaW5nRXJyb3IoTG9hZFRyYWNraW5nVGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZv
clBhdGgoIi9lcnJvciIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVk
KCk7CisKKyAgICBWZWN0b3I8TG9hZFRyYWNraW5nVGVzdDo6TG9hZEV2ZW50cz4mIGV2ZW50cyA9
IHRlc3QtPm1fbG9hZEV2ZW50czsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwg
PT0sIDMpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdU
ZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRz
WzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkRmFpbGVkKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlz
aGVkKTsKK30KKworc3RhdGljIHZvaWQgYXNzZXJ0Tm9ybWFsTG9hZEhhcHBlbmVkKFZlY3RvcjxM
b2FkVHJhY2tpbmdUZXN0OjpMb2FkRXZlbnRzPiYgZXZlbnRzKQoreworICAgIGdfYXNzZXJ0X2Nt
cGludChldmVudHMuc2l6ZSgpLCA9PSwgMyk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sw
XSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOworICAgIGdf
YXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkQ29tbWl0
dGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVz
dDo6TG9hZEZpbmlzaGVkKTsKK30KKworc3RhdGljIHZvaWQgdGVzdExvYWRIdG1sKExvYWRUcmFj
a2luZ1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwoIjxo
dG1sPjxib2R5PkhlbGxvIFdlYktpdC1HVEsrPC9ib2R5PjwvaHRtbD4iLCAwKTsKKyAgICB0ZXN0
LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBhc3NlcnROb3JtYWxMb2FkSGFwcGVuZWQo
dGVzdC0+bV9sb2FkRXZlbnRzKTsKK30KKworc3RhdGljIHZvaWQgdGVzdExvYWRBbHRlcm5hdGVI
VE1MKExvYWRUcmFja2luZ1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+
bG9hZEFsdGVybmF0ZUhUTUwoIjxodG1sPjxib2R5PkFsdGVybmF0ZSBwYWdlPC9ib2R5PjwvaHRt
bD4iLCAiaHR0cDovL2Vycm9yLXBhZ2UuZm9vLyIsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExv
YWRGaW5pc2hlZCgpOworICAgIGFzc2VydE5vcm1hbExvYWRIYXBwZW5lZCh0ZXN0LT5tX2xvYWRF
dmVudHMpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0TG9hZFBsYWluVGV4dChMb2FkVHJhY2tpbmdU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRQbGFpblRleHQoIkhl
bGxvIFdlYktpdC1HVEsrIik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Cisg
ICAgYXNzZXJ0Tm9ybWFsTG9hZEhhcHBlbmVkKHRlc3QtPm1fbG9hZEV2ZW50cyk7Cit9CisKK3N0
YXRpYyB2b2lkIHRlc3RMb2FkUmVxdWVzdChMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0LCBnY29uc3Rw
b2ludGVyKQoreworICAgIEdSZWZQdHI8V2ViS2l0VVJJUmVxdWVzdD4gcmVxdWVzdCh3ZWJraXRf
dXJpX3JlcXVlc3RfbmV3KGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9ub3JtYWwiKS5kYXRhKCkp
KTsKKyAgICB0ZXN0LT5sb2FkUmVxdWVzdChyZXF1ZXN0LmdldCgpKTsKKyAgICB0ZXN0LT53YWl0
VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBhc3NlcnROb3JtYWxMb2FkSGFwcGVuZWQodGVzdC0+
bV9sb2FkRXZlbnRzKTsKK30KKworY2xhc3MgTG9hZFN0b3BUcmFja2luZ1Rlc3QgOiBwdWJsaWMg
TG9hZFRyYWNraW5nVGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShM
b2FkU3RvcFRyYWNraW5nVGVzdCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZENvbW1pdHRlZCgp
CisgICAgeworICAgICAgICBMb2FkVHJhY2tpbmdUZXN0Ojpsb2FkQ29tbWl0dGVkKCk7CisgICAg
ICAgIHdlYmtpdF93ZWJfdmlld19zdG9wX2xvYWRpbmcobV93ZWJWaWV3KTsKKyAgICB9CisgICAg
dmlydHVhbCB2b2lkIGxvYWRGYWlsZWQoY29uc3QgZ2NoYXIqIGZhaWxpbmdVUkksIEdFcnJvciog
ZXJyb3IpCisgICAgeworICAgICAgICBnX2Fzc2VydChnX2Vycm9yX21hdGNoZXMoZXJyb3IsIFdF
QktJVF9ORVRXT1JLX0VSUk9SLCBXRUJLSVRfTkVUV09SS19FUlJPUl9DQU5DRUxMRUQpKTsKKyAg
ICAgICAgTG9hZFRyYWNraW5nVGVzdDo6bG9hZEZhaWxlZChmYWlsaW5nVVJJLCBlcnJvcik7Cisg
ICAgfQorfTsKKworc3RhdGljIHZvaWQgdGVzdExvYWRDYW5jZWxsZWQoTG9hZFN0b3BUcmFja2lu
Z1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVy
LT5nZXRVUklGb3JQYXRoKCIvY2FuY2VsbGVkIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50
aWxMb2FkRmluaXNoZWQoKTsKKworICAgIFZlY3RvcjxMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRXZl
bnRzPiYgZXZlbnRzID0gdGVzdC0+bV9sb2FkRXZlbnRzOworICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHMuc2l6ZSgpLCA9PSwgNCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0s
IExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0
X2NtcGludChldmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkQ29tbWl0dGVkKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9h
ZEZhaWxlZCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1szXSwgPT0sIExvYWRUcmFja2lu
Z1Rlc3Q6OkxvYWRGaW5pc2hlZCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3VGl0bGUo
TG9hZFRyYWNraW5nVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBnX2Fzc2VydCgh
d2Via2l0X3dlYl92aWV3X2dldF90aXRsZSh0ZXN0LT5tX3dlYlZpZXcpKTsKKyAgICB0ZXN0LT5s
b2FkSHRtbCgiPGh0bWw+PGhlYWQ+PHRpdGxlPldlbGNvbWUgdG8gV2ViS2l0LUdUSyshPC90aXRs
ZT48L2hlYWQ+PC9odG1sPiIsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgp
OworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3RpdGxlKHRlc3QtPm1f
d2ViVmlldyksID09LCAiV2VsY29tZSB0byBXZWJLaXQtR1RLKyEiKTsKK30KKworc3RhdGljIHZv
aWQgdGVzdFdlYlZpZXdSZWxvYWQoTG9hZFRyYWNraW5nVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRl
cikKK3sKKyAgICAvLyBDaGVjayB0aGF0IG5vdGhpbmcgaGFwcGVucyB3aGVuIHRoZXJlJ3Mgbm90
aGluZyB0byByZWxvYWQuCisgICAgdGVzdC0+cmVsb2FkKCk7CisgICAgdGVzdC0+d2FpdCgwLjI1
KTsgLy8gV2FpdCBmb3IgYSBxdWFydGVyIG9mIGEgc2Vjb25kLgorCisgICAgdGVzdC0+bG9hZFVS
SShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvbm9ybWFsIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53
YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBhc3NlcnROb3JtYWxMb2FkSGFwcGVuZWQodGVz
dC0+bV9sb2FkRXZlbnRzKTsKKworICAgIHRlc3QtPnJlbG9hZCgpOworICAgIHRlc3QtPndhaXRV
bnRpbExvYWRGaW5pc2hlZCgpOworICAgIGFzc2VydE5vcm1hbExvYWRIYXBwZW5lZCh0ZXN0LT5t
X2xvYWRFdmVudHMpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0TG9hZFByb2dyZXNzKExvYWRUcmFj
a2luZ1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZFVSSShrU2Vy
dmVyLT5nZXRVUklGb3JQYXRoKCIvbm9ybWFsIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50
aWxMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdCh0ZXN0LT5tX2VzdGltYXRl
ZFByb2dyZXNzLCA9PSwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3SGlzdG9yeUxv
YWQoTG9hZFRyYWNraW5nVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5s
b2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9ub3JtYWwiKS5kYXRhKCkpOworICAgIHRl
c3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIGFzc2VydE5vcm1hbExvYWRIYXBwZW5l
ZCh0ZXN0LT5tX2xvYWRFdmVudHMpOworCisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRV
UklGb3JQYXRoKCIvbm9ybWFsMiIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZp
bmlzaGVkKCk7CisgICAgYXNzZXJ0Tm9ybWFsTG9hZEhhcHBlbmVkKHRlc3QtPm1fbG9hZEV2ZW50
cyk7CisKKyAgICAvLyBDaGVjayB0aGF0IGxvYWQgcHJvY2VzcyBpcyB0aGUgc2FtZSBmb3IgcGFn
ZXMgbG9hZGVkIGZyb20gaGlzdG9yeSBjYWNoZS4KKyAgICB0ZXN0LT5nb0JhY2soKTsKKyAgICB0
ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBhc3NlcnROb3JtYWxMb2FkSGFwcGVu
ZWQodGVzdC0+bV9sb2FkRXZlbnRzKTsKKworICAgIHRlc3QtPmdvRm9yd2FyZCgpOworICAgIHRl
c3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIGFzc2VydE5vcm1hbExvYWRIYXBwZW5l
ZCh0ZXN0LT5tX2xvYWRFdmVudHMpOworfQorCitjbGFzcyBWaWV3VVJJVHJhY2tpbmdUZXN0OiBw
dWJsaWMgTG9hZFRyYWNraW5nVGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklY
VFVSRShWaWV3VVJJVHJhY2tpbmdUZXN0KTsKKworICAgIHN0YXRpYyB2b2lkIHVyaUNoYW5nZWQo
R09iamVjdCosIEdQYXJhbVNwZWMqLCBWaWV3VVJJVHJhY2tpbmdUZXN0KiB0ZXN0KQorICAgIHsK
KyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPm1fYWN0aXZlVVJJLmRhdGEoKSwgIT0sIHdl
YmtpdF93ZWJfdmlld19nZXRfdXJpKHRlc3QtPm1fd2ViVmlldykpOworICAgICAgICB0ZXN0LT5t
X2FjdGl2ZVVSSSA9IHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKHRlc3QtPm1fd2ViVmlldyk7Cisg
ICAgfQorCisgICAgVmlld1VSSVRyYWNraW5nVGVzdCgpCisgICAgICAgIDogbV9hY3RpdmVVUkko
d2Via2l0X3dlYl92aWV3X2dldF91cmkobV93ZWJWaWV3KSkKKyAgICB7CisgICAgICAgIGdfYXNz
ZXJ0KG1fYWN0aXZlVVJJLmlzTnVsbCgpKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dl
YlZpZXcsICJub3RpZnk6OnVyaSIsIEdfQ0FMTEJBQ0sodXJpQ2hhbmdlZCksIHRoaXMpOworICAg
IH0KKworICAgIHZvaWQgcHJvdmlzaW9uYWxMb2FkU3RhcnRlZCgpCisgICAgeworICAgICAgICBj
aGVja0FjdGl2ZVVSSSgiL3JlZGlyZWN0Iik7CisgICAgfQorCisgICAgdm9pZCBwcm92aXNpb25h
bExvYWRSZWNlaXZlZFNlcnZlclJlZGlyZWN0KCkKKyAgICB7CisgICAgICAgIGNoZWNrQWN0aXZl
VVJJKCIvbm9ybWFsIik7CisgICAgfQorCisgICAgdm9pZCBsb2FkQ29tbWl0dGVkKCkKKyAgICB7
CisgICAgICAgIGNoZWNrQWN0aXZlVVJJKCIvbm9ybWFsIik7CisgICAgfQorCisgICAgdm9pZCBs
b2FkRmluaXNoZWQoKQorICAgIHsKKyAgICAgICAgY2hlY2tBY3RpdmVVUkkoIi9ub3JtYWwiKTsK
KyAgICAgICAgTG9hZFRyYWNraW5nVGVzdDo6bG9hZEZpbmlzaGVkKCk7CisgICAgfQorCisgICAg
Q1N0cmluZyBtX2FjdGl2ZVVSSTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGNoZWNrQWN0aXZlVVJJ
KGNvbnN0IGNoYXIqIHVyaSkKKyAgICB7CisgICAgICAgIEFTU0VSVF9DTVBfQ1NUUklORyhtX2Fj
dGl2ZVVSSSwgPT0sIGtTZXJ2ZXItPmdldFVSSUZvclBhdGgodXJpKSk7CisgICAgfQorfTsKKwor
c3RhdGljIHZvaWQgdGVzdFdlYlZpZXdBY3RpdmVVUkkoVmlld1VSSVRyYWNraW5nVGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZv
clBhdGgoIi9yZWRpcmVjdCIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlz
aGVkKCk7Cit9CisKK2NsYXNzIFZpZXdJc0xvYWRpbmdUZXN0OiBwdWJsaWMgTG9hZFRyYWNraW5n
VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShWaWV3SXNMb2FkaW5n
VGVzdCk7CisKKyAgICBzdGF0aWMgdm9pZCBpc0xvYWRpbmdDaGFuZ2VkKEdPYmplY3QqLCBHUGFy
YW1TcGVjKiwgVmlld0lzTG9hZGluZ1Rlc3QqIHRlc3QpCisgICAgeworICAgICAgICBpZiAod2Vi
a2l0X3dlYl92aWV3X2lzX2xvYWRpbmcodGVzdC0+bV93ZWJWaWV3KSkKKyAgICAgICAgICAgIHRl
c3QtPmJlZ2luTG9hZCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0ZXN0LT5lbmRMb2Fk
KCk7CisgICAgfQorCisgICAgVmlld0lzTG9hZGluZ1Rlc3QoKQorICAgIHsKKyAgICAgICAgZ19z
aWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJub3RpZnk6OmlzLWxvYWRpbmciLCBHX0NBTExCQUNL
KGlzTG9hZGluZ0NoYW5nZWQpLCB0aGlzKTsKKyAgICB9CisKKyAgICB2b2lkIGJlZ2luTG9hZCgp
CisgICAgeworICAgICAgICAvLyBOZXcgbG9hZCwgbG9hZC1zdGFydGVkIGhhc24ndCBiZWVuIGVt
aXR0ZWQgeWV0LgorICAgICAgICBnX2Fzc2VydChtX2xvYWRFdmVudHMuaXNFbXB0eSgpKTsKKyAg
ICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKG1fd2ViVmlldyks
ID09LCBtX2FjdGl2ZVVSSS5kYXRhKCkpOworICAgIH0KKworICAgIHZvaWQgZW5kTG9hZCgpCisg
ICAgeworICAgICAgICAvLyBMb2FkIGZpbmlzaCwgbG9hZC1maW5pc2hlZCBhbmQgbG9hZC1mYWls
ZWQgaGF2ZW4ndCBiZWVuIGVtaXR0ZWQgeWV0LgorICAgICAgICBnX2Fzc2VydCghbV9sb2FkRXZl
bnRzLmlzRW1wdHkoKSk7CisgICAgICAgIGdfYXNzZXJ0KCFtX2xvYWRFdmVudHMuY29udGFpbnMo
TG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKSk7CisgICAgICAgIGdfYXNzZXJ0KCFtX2xv
YWRFdmVudHMuY29udGFpbnMoTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZhaWxlZCkpOworICAgIH0K
K307CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3SXNMb2FkaW5nKFZpZXdJc0xvYWRpbmdUZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0
VVJJRm9yUGF0aCgiL25vcm1hbCIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZp
bmlzaGVkKCk7CisKKyAgICB0ZXN0LT5yZWxvYWQoKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2Fk
RmluaXNoZWQoKTsKKworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgi
L2Vycm9yIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKwor
ICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL25vcm1hbCIpLmRhdGEo
KSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgdGVzdC0+bG9hZFVS
SShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvbm9ybWFsMiIpLmRhdGEoKSk7CisgICAgdGVzdC0+
d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5nb0JhY2soKTsKKyAgICB0ZXN0
LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3QtPmdvRm9yd2FyZCgpOworICAg
IHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworfQorCitjbGFzcyBXZWJQYWdlVVJJVGVz
dDogcHVibGljIFdlYlZpZXdUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhU
VVJFKFdlYlBhZ2VVUklUZXN0KTsKKworICAgIHN0YXRpYyB2b2lkIHdlYlBhZ2VVUklDaGFuZ2Vk
Q2FsbGJhY2soR0RCdXNDb25uZWN0aW9uKiwgY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBjb25z
dCBjaGFyKiwgY29uc3QgY2hhciosIEdWYXJpYW50KiByZXN1bHQsIFdlYlBhZ2VVUklUZXN0KiB0
ZXN0KQorICAgIHsKKyAgICAgICAgY29uc3QgY2hhciogdXJpOworICAgICAgICBnX3ZhcmlhbnRf
Z2V0KHJlc3VsdCwgIigmcykiLCAmdXJpKTsKKyAgICAgICAgdGVzdC0+bV93ZWJQYWdlVVJJcy5h
cHBlbmQodXJpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCB3ZWJWaWV3VVJJQ2hhbmdlZChH
T2JqZWN0KiwgR1BhcmFtU3BlYyosIFdlYlBhZ2VVUklUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAg
ICAgdGVzdC0+bV93ZWJWaWV3VVJJcy5hcHBlbmQod2Via2l0X3dlYl92aWV3X2dldF91cmkodGVz
dC0+bV93ZWJWaWV3KSk7CisgICAgfQorCisgICAgV2ViUGFnZVVSSVRlc3QoKQorICAgIHsKKyAg
ICAgICAgR1JlZlB0cjxHREJ1c1Byb3h5PiBwcm94eSA9IGFkb3B0R1JlZihidXMtPmNyZWF0ZVBy
b3h5KCJvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwKKyAgICAgICAgICAgICIvb3Jn
L3dlYmtpdC9ndGsvV2ViRXh0ZW5zaW9uVGVzdCIsICJvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNp
b25UZXN0IiwgbV9tYWluTG9vcCkpOworICAgICAgICBtX3VyaUNoYW5nZWRTaWduYWxJRCA9IGdf
ZGJ1c19jb25uZWN0aW9uX3NpZ25hbF9zdWJzY3JpYmUoCisgICAgICAgICAgICBnX2RidXNfcHJv
eHlfZ2V0X2Nvbm5lY3Rpb24ocHJveHkuZ2V0KCkpLAorICAgICAgICAgICAgMCwKKyAgICAgICAg
ICAgICJvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwKKyAgICAgICAgICAgICJVUklD
aGFuZ2VkIiwKKyAgICAgICAgICAgICIvb3JnL3dlYmtpdC9ndGsvV2ViRXh0ZW5zaW9uVGVzdCIs
CisgICAgICAgICAgICAwLAorICAgICAgICAgICAgR19EQlVTX1NJR05BTF9GTEFHU19OT05FLAor
ICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHREJ1c1NpZ25hbENhbGxiYWNrPih3ZWJQYWdl
VVJJQ2hhbmdlZENhbGxiYWNrKSwKKyAgICAgICAgICAgIHRoaXMsCisgICAgICAgICAgICAwKTsK
KyAgICAgICAgZ19hc3NlcnQobV91cmlDaGFuZ2VkU2lnbmFsSUQpOworCisgICAgICAgIGdfc2ln
bmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAibm90aWZ5Ojp1cmkiLCBHX0NBTExCQUNLKHdlYlZpZXdV
UklDaGFuZ2VkKSwgdGhpcyk7CisgICAgfQorCisgICAgfldlYlBhZ2VVUklUZXN0KCkKKyAgICB7
CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3dlYlZpZXcs
IEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOworICAgICAgICBnX2RidXNf
Y29ubmVjdGlvbl9zaWduYWxfdW5zdWJzY3JpYmUoYnVzLT5jb25uZWN0aW9uKCksIG1fdXJpQ2hh
bmdlZFNpZ25hbElEKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBtX3VyaUNoYW5nZWRTaWduYWxJ
RDsKKyAgICBWZWN0b3I8Q1N0cmluZz4gbV93ZWJQYWdlVVJJczsKKyAgICBWZWN0b3I8Q1N0cmlu
Zz4gbV93ZWJWaWV3VVJJczsKK307CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJQYWdlVVJJKFdlYlBh
Z2VVUklUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRVUkkoa1Nl
cnZlci0+Z2V0VVJJRm9yUGF0aCgiL3JlZGlyZWN0IikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0
VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX3dlYlBh
Z2VVUklzLnNpemUoKSwgPT0sIHRlc3QtPm1fd2ViVmlld1VSSXMuc2l6ZSgpKTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHRlc3QtPm1fd2ViUGFnZVVSSXMuc2l6ZSgpOyArK2kpCisgICAg
ICAgIEFTU0VSVF9DTVBfQ1NUUklORyh0ZXN0LT5tX3dlYlBhZ2VVUklzW2ldLCA9PSwgdGVzdC0+
bV93ZWJWaWV3VVJJc1tpXSk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV93ZWJQYWdl
VVJJcy5zaXplKCksID09LCAyKTsKKyAgICBBU1NFUlRfQ01QX0NTVFJJTkcodGVzdC0+bV93ZWJQ
YWdlVVJJc1swXSwgPT0sIGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9yZWRpcmVjdCIpKTsKKyAg
ICBBU1NFUlRfQ01QX0NTVFJJTkcodGVzdC0+bV93ZWJQYWdlVVJJc1sxXSwgPT0sIGtTZXJ2ZXIt
PmdldFVSSUZvclBhdGgoIi9ub3JtYWwiKSk7CisKK30KKworc3RhdGljIHZvaWQgdGVzdFVSSVJl
cXVlc3RIVFRQSGVhZGVycyhXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAg
ICBHUmVmUHRyPFdlYktpdFVSSVJlcXVlc3Q+IHVyaVJlcXVlc3QgPSBhZG9wdEdSZWYod2Via2l0
X3VyaV9yZXF1ZXN0X25ldygiZmlsZTovLy9mb28vYmFyIikpOworICAgIGdfYXNzZXJ0KHVyaVJl
cXVlc3QuZ2V0KCkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0
X3VyaSh1cmlSZXF1ZXN0LmdldCgpKSwgPT0sICJmaWxlOi8vL2Zvby9iYXIiKTsKKyAgICBnX2Fz
c2VydCghd2Via2l0X3VyaV9yZXF1ZXN0X2dldF9odHRwX2hlYWRlcnModXJpUmVxdWVzdC5nZXQo
KSkpOworCisgICAgLy8gTG9hZCBhIHJlcXVlc3Qgd2l0aCBubyBEbyBOb3QgVHJhY2sgaGVhZGVy
LgorICAgIHdlYmtpdF91cmlfcmVxdWVzdF9zZXRfdXJpKHVyaVJlcXVlc3QuZ2V0KCksIGtTZXJ2
ZXItPmdldFVSSUZvclBhdGgoIi9kby1ub3QtdHJhY2staGVhZGVyIikuZGF0YSgpKTsKKyAgICB0
ZXN0LT5sb2FkUmVxdWVzdCh1cmlSZXF1ZXN0LmdldCgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxM
b2FkRmluaXNoZWQoKTsKKworICAgIHNpemVfdCBtYWluUmVzb3VyY2VEYXRhU2l6ZSA9IDA7Cisg
ICAgY29uc3QgY2hhciogbWFpblJlc291cmNlRGF0YSA9IHRlc3QtPm1haW5SZXNvdXJjZURhdGEo
bWFpblJlc291cmNlRGF0YVNpemUpOworICAgIGdfYXNzZXJ0X2NtcGludChtYWluUmVzb3VyY2VE
YXRhU2l6ZSwgPT0sIHN0cmxlbihrRE5USGVhZGVyTm90UHJlc2VudCkpOworICAgIGdfYXNzZXJ0
KCFzdHJuY21wKG1haW5SZXNvdXJjZURhdGEsIGtETlRIZWFkZXJOb3RQcmVzZW50LCBtYWluUmVz
b3VyY2VEYXRhU2l6ZSkpOworCisgICAgLy8gQWRkIHRoZSBEbyBOb3QgVHJhY2sgaGVhZGVyIGFu
ZCBsb2FkIHRoZSByZXF1ZXN0IGFnYWluLgorICAgIFNvdXBNZXNzYWdlSGVhZGVycyogaGVhZGVy
cyA9IHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfaHR0cF9oZWFkZXJzKHVyaVJlcXVlc3QuZ2V0KCkp
OworICAgIGdfYXNzZXJ0KGhlYWRlcnMpOworICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVu
ZChoZWFkZXJzLCAiRE5UIiwgIjEiKTsKKyAgICB0ZXN0LT5sb2FkUmVxdWVzdCh1cmlSZXF1ZXN0
LmdldCgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIG1haW5S
ZXNvdXJjZURhdGEgPSB0ZXN0LT5tYWluUmVzb3VyY2VEYXRhKG1haW5SZXNvdXJjZURhdGFTaXpl
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQobWFpblJlc291cmNlRGF0YVNpemUsID09LCAxKTsKKyAg
ICBnX2Fzc2VydCghc3RybmNtcChtYWluUmVzb3VyY2VEYXRhLCAiMSIsIG1haW5SZXNvdXJjZURh
dGFTaXplKSk7CisKKyAgICAvLyBMb2FkIGEgVVJJIGZvciB3aGljaCB0aGUgd2ViIGV4dGVuc2lv
biB3aWxsIGFkZCB0aGUgRG8gTm90IFRyYWNrIGhlYWRlci4KKyAgICB0ZXN0LT5sb2FkVVJJKGtT
ZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9hZGQtZG8tbm90LXRyYWNrLWhlYWRlciIpLmRhdGEoKSk7
CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBtYWluUmVzb3VyY2VE
YXRhID0gdGVzdC0+bWFpblJlc291cmNlRGF0YShtYWluUmVzb3VyY2VEYXRhU2l6ZSk7CisgICAg
Z19hc3NlcnRfY21waW50KG1haW5SZXNvdXJjZURhdGFTaXplLCA9PSwgMSk7CisgICAgZ19hc3Nl
cnQoIXN0cm5jbXAobWFpblJlc291cmNlRGF0YSwgIjEiLCBtYWluUmVzb3VyY2VEYXRhU2l6ZSkp
OworfQorCitzdGF0aWMgdm9pZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBzZXJ2ZXIsIFNv
dXBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiwgU291cENs
aWVudENvbnRleHQqLCBncG9pbnRlcikKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciogcmVzcG9u
c2VTdHJpbmcgPSAiPGh0bWw+PGJvZHk+VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyEiCisgICAgICAgICJUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyEiCisgICAgICAgICJUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyEiCisgICAgICAgICJUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyEiCisgICAgICAgICJUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyEi
CisgICAgICAgICJUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyEiCisgICAg
ICAgICJUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyEiCisgICAgICAgICJU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyE8L2JvZHk+PC9odG1sPiI7CisK
KyAgICBpZiAobWVzc2FnZS0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgeworICAgICAgICBz
b3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5U
RUQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc291cF9tZXNzYWdlX3NldF9zdGF0
dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOworCisgICAgaWYgKGdfc3RyX2hhc19wcmVmaXgo
cGF0aCwgIi9ub3JtYWwiKSkKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3Nh
Z2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgcmVzcG9uc2VTdHJpbmcsIHN0
cmxlbihyZXNwb25zZVN0cmluZykpOworICAgIGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIv
ZXJyb3IiKSkKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9T
VEFUVVNfQ0FOVF9DT05ORUNUKTsKKyAgICBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3Jl
ZGlyZWN0IikpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09V
UF9TVEFUVVNfTU9WRURfUEVSTUFORU5UTFkpOworICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVy
c19hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIkxvY2F0aW9uIiwgIi9ub3JtYWwi
KTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvY2FuY2VsbGVkIikpIHsKKyAg
ICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfc2V0X2VuY29kaW5nKG1lc3NhZ2UtPnJlc3BvbnNl
X2hlYWRlcnMsIFNPVVBfRU5DT0RJTkdfQ0hVTktFRCk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9i
b2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIHJl
c3BvbnNlU3RyaW5nLCBzdHJsZW4ocmVzcG9uc2VTdHJpbmcpKTsKKyAgICAgICAgc291cF9zZXJ2
ZXJfdW5wYXVzZV9tZXNzYWdlKHNlcnZlciwgbWVzc2FnZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvZG8tbm90LXRyYWNrLWhlYWRlciIpIHx8
IGdfc3RyX2VxdWFsKHBhdGgsICIvYWRkLWRvLW5vdC10cmFjay1oZWFkZXIiKSkgeworICAgICAg
ICBjb25zdCBjaGFyKiBkb05vdFRyYWNrID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X29uZSht
ZXNzYWdlLT5yZXF1ZXN0X2hlYWRlcnMsICJETlQiKTsKKyAgICAgICAgaWYgKGRvTm90VHJhY2sp
CisgICAgICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2Vf
Ym9keSwgU09VUF9NRU1PUllfQ09QWSwgZG9Ob3RUcmFjaywgc3RybGVuKGRvTm90VHJhY2spKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3Nh
Z2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywga0ROVEhlYWRlck5vdFByZXNl
bnQsIHN0cmxlbihrRE5USGVhZGVyTm90UHJlc2VudCkpOworICAgICAgICBzb3VwX21lc3NhZ2Vf
c2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7CisgICAgfSBlbHNlCisgICAgICAg
IHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7
CisKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5
KTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQoreworICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRf
d2ViX2V4dGVuc2lvbnNfZGlyZWN0b3J5KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgp
LCBXRUJLSVRfVEVTVF9XRUJfRVhURU5TSU9OU19ESVIpOworICAgIGJ1cyA9IG5ldyBXZWJLaXRU
ZXN0QnVzKCk7CisgICAgaWYgKCFidXMtPnJ1bigpKQorICAgICAgICByZXR1cm47CisKKyAgICBr
U2VydmVyID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIoKTsKKyAgICBrU2VydmVyLT5ydW4oc2VydmVy
Q2FsbGJhY2spOworCisgICAgTG9hZFRyYWNraW5nVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3Iiwg
ImxvYWRpbmctc3RhdHVzIiwgdGVzdExvYWRpbmdTdGF0dXMpOworICAgIExvYWRUcmFja2luZ1Rl
c3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJsb2FkaW5nLWVycm9yIiwgdGVzdExvYWRpbmdFcnJv
cik7CisgICAgTG9hZFRyYWNraW5nVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImxvYWQtaHRt
bCIsIHRlc3RMb2FkSHRtbCk7CisgICAgTG9hZFRyYWNraW5nVGVzdDo6YWRkKCJXZWJLaXRXZWJW
aWV3IiwgImxvYWQtYWx0ZXJuYXRlLWh0bWwiLCB0ZXN0TG9hZEFsdGVybmF0ZUhUTUwpOworICAg
IExvYWRUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJsb2FkLXBsYWluLXRleHQi
LCB0ZXN0TG9hZFBsYWluVGV4dCk7CisgICAgTG9hZFRyYWNraW5nVGVzdDo6YWRkKCJXZWJLaXRX
ZWJWaWV3IiwgImxvYWQtcmVxdWVzdCIsIHRlc3RMb2FkUmVxdWVzdCk7CisgICAgTG9hZFN0b3BU
cmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJzdG9wLWxvYWRpbmciLCB0ZXN0TG9h
ZENhbmNlbGxlZCk7CisgICAgTG9hZFRyYWNraW5nVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3Iiwg
InRpdGxlIiwgdGVzdFdlYlZpZXdUaXRsZSk7CisgICAgTG9hZFRyYWNraW5nVGVzdDo6YWRkKCJX
ZWJLaXRXZWJWaWV3IiwgInByb2dyZXNzIiwgdGVzdExvYWRQcm9ncmVzcyk7CisgICAgTG9hZFRy
YWNraW5nVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInJlbG9hZCIsIHRlc3RXZWJWaWV3UmVs
b2FkKTsKKyAgICBMb2FkVHJhY2tpbmdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiaGlzdG9y
eS1sb2FkIiwgdGVzdFdlYlZpZXdIaXN0b3J5TG9hZCk7CisKKyAgICAvLyBUaGlzIHRlc3QgY2hl
Y2tzIHRoYXQgd2ViIHZpZXcgbm90aWZ5Ojp1cmkgc2lnbmFsIGlzIGNvcnJlY3RseSBlbWl0dGVk
CisgICAgLy8gYW5kIHRoZSB1cmkgaXMgYWxyZWFkeSB1cGRhdGVkIHdoZW4gbG9hZGVyIGNsaWVu
dCBzaWduYWxzIGFyZSBlbWl0dGVkLgorICAgIFZpZXdVUklUcmFja2luZ1Rlc3Q6OmFkZCgiV2Vi
S2l0V2ViVmlldyIsICJhY3RpdmUtdXJpIiwgdGVzdFdlYlZpZXdBY3RpdmVVUkkpOworCisgICAg
Vmlld0lzTG9hZGluZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJpcy1sb2FkaW5nIiwgdGVz
dFdlYlZpZXdJc0xvYWRpbmcpOworICAgIFdlYlBhZ2VVUklUZXN0OjphZGQoIldlYktpdFdlYlBh
Z2UiLCAiZ2V0LXVyaSIsIHRlc3RXZWJQYWdlVVJJKTsKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJX
ZWJLaXRVUklSZXF1ZXN0IiwgImh0dHAtaGVhZGVycyIsIHRlc3RVUklSZXF1ZXN0SFRUUEhlYWRl
cnMpOworfQorCit2b2lkIGFmdGVyQWxsKCkKK3sKKyAgICBkZWxldGUgYnVzOworICAgIGRlbGV0
ZSBrU2VydmVyOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXQyR3RrL1Rlc3RQcmludGluZy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dDJHdGsvVGVzdFByaW50aW5nLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li43MmMyY2ZiCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyR3RrL1Rlc3RQcmludGluZy5jcHAKQEAgLTAsMCArMSwyMDkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXZWJWaWV3VGVzdC5oIgorI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CisjaW5jbHVkZSA8d3Rm
L2dvYmplY3QvR1JlZlB0ci5oPgorCisjaWZkZWYgSEFWRV9HVEtfVU5JWF9QUklOVElORworI2lu
Y2x1ZGUgPGd0ay9ndGt1bml4cHJpbnQuaD4KKyNlbmRpZgorCitzdGF0aWMgY2hhcioga1RlbXBE
aXJlY3Rvcnk7CisKK3N0YXRpYyB2b2lkIHRlc3RQcmludE9wZXJhdGlvblByaW50U2V0dGluZ3Mo
V2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgR1JlZlB0cjxXZWJLaXRQ
cmludE9wZXJhdGlvbj4gcHJpbnRPcGVyYXRpb24gPSBhZG9wdEdSZWYod2Via2l0X3ByaW50X29w
ZXJhdGlvbl9uZXcodGVzdC0+bV93ZWJWaWV3KSk7CisgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNE
ZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChwcmludE9wZXJhdGlvbi5nZXQoKSkpOwor
CisgICAgZ19hc3NlcnQoIXdlYmtpdF9wcmludF9vcGVyYXRpb25fZ2V0X3ByaW50X3NldHRpbmdz
KHByaW50T3BlcmF0aW9uLmdldCgpKSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9wcmludF9vcGVy
YXRpb25fZ2V0X3BhZ2Vfc2V0dXAocHJpbnRPcGVyYXRpb24uZ2V0KCkpKTsKKworICAgIEdSZWZQ
dHI8R3RrUHJpbnRTZXR0aW5ncz4gcHJpbnRTZXR0aW5ncyA9IGFkb3B0R1JlZihndGtfcHJpbnRf
c2V0dGluZ3NfbmV3KCkpOworICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0
RmluaXNoZXMoR19PQkpFQ1QocHJpbnRTZXR0aW5ncy5nZXQoKSkpOworCisgICAgR1JlZlB0cjxH
dGtQYWdlU2V0dXA+IHBhZ2VTZXR1cCA9IGFkb3B0R1JlZihndGtfcGFnZV9zZXR1cF9uZXcoKSk7
CisgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVD
VChwYWdlU2V0dXAuZ2V0KCkpKTsKKworICAgIHdlYmtpdF9wcmludF9vcGVyYXRpb25fc2V0X3By
aW50X3NldHRpbmdzKHByaW50T3BlcmF0aW9uLmdldCgpLCBwcmludFNldHRpbmdzLmdldCgpKTsK
KyAgICB3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX3NldF9wYWdlX3NldHVwKHByaW50T3BlcmF0aW9u
LmdldCgpLCBwYWdlU2V0dXAuZ2V0KCkpOworCisgICAgZ19hc3NlcnQod2Via2l0X3ByaW50X29w
ZXJhdGlvbl9nZXRfcHJpbnRfc2V0dGluZ3MocHJpbnRPcGVyYXRpb24uZ2V0KCkpID09IHByaW50
U2V0dGluZ3MuZ2V0KCkpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9wcmludF9vcGVyYXRpb25fZ2V0
X3BhZ2Vfc2V0dXAocHJpbnRPcGVyYXRpb24uZ2V0KCkpID09IHBhZ2VTZXR1cC5nZXQoKSk7Cit9
CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3UHJpbnRDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3LCBXZWJLaXRQcmludE9wZXJhdGlvbiogcHJpbnRPcGVyYXRpb24sIFdlYlZpZXdUZXN0
KiB0ZXN0KQoreworICAgIGdfYXNzZXJ0KHdlYlZpZXcgPT0gdGVzdC0+bV93ZWJWaWV3KTsKKwor
ICAgIGdfYXNzZXJ0KFdFQktJVF9JU19QUklOVF9PUEVSQVRJT04ocHJpbnRPcGVyYXRpb24pKTsK
KyAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNU
KHByaW50T3BlcmF0aW9uKSk7CisKKyAgICBnX2Fzc2VydCghd2Via2l0X3ByaW50X29wZXJhdGlv
bl9nZXRfcHJpbnRfc2V0dGluZ3MocHJpbnRPcGVyYXRpb24pKTsKKyAgICBnX2Fzc2VydCghd2Vi
a2l0X3ByaW50X29wZXJhdGlvbl9nZXRfcGFnZV9zZXR1cChwcmludE9wZXJhdGlvbikpOworCisg
ICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKworICAgIHJldHVybiBUUlVF
OworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1ByaW50KFdlYlZpZXdUZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQoreworICAgIGdfc2lnbmFsX2Nvbm5lY3QodGVzdC0+bV93ZWJWaWV3LCAi
cHJpbnQiLCBHX0NBTExCQUNLKHdlYlZpZXdQcmludENhbGxiYWNrKSwgdGVzdCk7CisgICAgdGVz
dC0+bG9hZEh0bWwoIjxodG1sPjxib2R5IG9uTG9hZD1cInByaW50KCk7XCI+V2ViS2l0R1RLKyBw
cmludGluZyB0ZXN0PC9ib2R5PjwvaHRtbD4iLCAwKTsKKyAgICBnX21haW5fbG9vcF9ydW4odGVz
dC0+bV9tYWluTG9vcCk7Cit9CisKKyNpZmRlZiBIQVZFX0dUS19VTklYX1BSSU5USU5HCitjbGFz
cyBQcmludFRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElC
X1RFU1RfRklYVFVSRShQcmludFRlc3QpOworCisgICAgc3RhdGljIHZvaWQgcHJpbnRGaW5pc2hl
ZENhbGxiYWNrKFdlYktpdFByaW50T3BlcmF0aW9uKiwgUHJpbnRUZXN0KiB0ZXN0KQorICAgIHsK
KyAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgdm9pZCBwcmludEZhaWxlZENhbGxiYWNrKFdlYktpdFByaW50T3BlcmF0aW9uKiwg
R0Vycm9yKiBlcnJvciwgUHJpbnRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQo
dGVzdC0+bV9leHBlY3RlZEVycm9yKTsKKyAgICAgICAgZ19hc3NlcnQoZXJyb3IpOworICAgICAg
ICBnX2Fzc2VydChnX2Vycm9yX21hdGNoZXMoZXJyb3IsIFdFQktJVF9QUklOVF9FUlJPUiwgdGVz
dC0+bV9leHBlY3RlZEVycm9yKSk7CisgICAgfQorCisgICAgUHJpbnRUZXN0KCkKKyAgICAgICAg
OiBtX2V4cGVjdGVkRXJyb3IoMCkKKyAgICB7CisgICAgICAgIG1fcHJpbnRPcGVyYXRpb24gPSBh
ZG9wdEdSZWYod2Via2l0X3ByaW50X29wZXJhdGlvbl9uZXcobV93ZWJWaWV3KSk7CisgICAgICAg
IGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QobV9wcmludE9w
ZXJhdGlvbi5nZXQoKSkpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fcHJpbnRPcGVyYXRp
b24uZ2V0KCksICJmaW5pc2hlZCIsIEdfQ0FMTEJBQ0socHJpbnRGaW5pc2hlZENhbGxiYWNrKSwg
dGhpcyk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9wcmludE9wZXJhdGlvbi5nZXQoKSwg
ImZhaWxlZCIsIEdfQ0FMTEJBQ0socHJpbnRGYWlsZWRDYWxsYmFjayksIHRoaXMpOworICAgIH0K
KworICAgIHN0YXRpYyBnYm9vbGVhbiB0ZXN0UHJpbnRPcGVyYXRpb25QcmludFByaW50ZXIoR3Rr
UHJpbnRlciogcHJpbnRlciwgZ3BvaW50ZXIgdXNlckRhdGEpCisgICAgeworICAgICAgICBpZiAo
c3RyY21wKGd0a19wcmludGVyX2dldF9uYW1lKHByaW50ZXIpLCAiUHJpbnQgdG8gRmlsZSIpKQor
ICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgICAgIEd0a1ByaW50ZXIqKiBmb3VuZFBy
aW50ZXIgPSBzdGF0aWNfY2FzdDxHdGtQcmludGVyKio+KHVzZXJEYXRhKTsKKyAgICAgICAgKmZv
dW5kUHJpbnRlciA9IHN0YXRpY19jYXN0PEd0a1ByaW50ZXIqPihnX29iamVjdF9yZWYocHJpbnRl
cikpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICBHdGtQcmludGVyKiBmaW5k
UHJpbnRUb0ZpbGVQcmludGVyKCkKKyAgICB7CisgICAgICAgIEd0a1ByaW50ZXIqIHByaW50ZXIg
PSAwOworICAgICAgICBndGtfZW51bWVyYXRlX3ByaW50ZXJzKHRlc3RQcmludE9wZXJhdGlvblBy
aW50UHJpbnRlciwgJnByaW50ZXIsIDAsIFRSVUUpOworICAgICAgICByZXR1cm4gcHJpbnRlcjsK
KyAgICB9CisKKyAgICB2b2lkIHdhaXRVbnRpbFByaW50RmluaXNoZWQoKQorICAgIHsKKyAgICAg
ICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIEdSZWZQdHI8V2Vi
S2l0UHJpbnRPcGVyYXRpb24+IG1fcHJpbnRPcGVyYXRpb247CisgICAgdW5zaWduZWQgaW50IG1f
ZXhwZWN0ZWRFcnJvcjsKK307CisKK3N0YXRpYyB2b2lkIHRlc3RQcmludE9wZXJhdGlvblByaW50
KFByaW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbCgi
PGh0bWw+PGJvZHk+V2ViS2l0R1RLKyBwcmludGluZyB0ZXN0PC9ib2R5PjwvaHRtbD4iLCAwKTsK
KyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIEdSZWZQdHI8R3RrUHJp
bnRlcj4gcHJpbnRlciA9IGFkb3B0R1JlZih0ZXN0LT5maW5kUHJpbnRUb0ZpbGVQcmludGVyKCkp
OworICAgIGlmICghcHJpbnRlcikgeworICAgICAgICBnX21lc3NhZ2UoIiVzIiwgIkNhbm5vdCB0
ZXN0IFdlYktpdFByaW50T3BlcmF0aW9uL3ByaW50OiBubyBzdWl0YWJsZSBwcmludGVyIGZvdW5k
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBHT3duUHRyPGNoYXI+IG91dHB1dEZp
bGVuYW1lKGdfYnVpbGRfZmlsZW5hbWUoa1RlbXBEaXJlY3RvcnksICJ3ZWJraXQtcHJpbnQucGRm
IiwgTlVMTCkpOworICAgIEdSZWZQdHI8R0ZpbGU+IG91dHB1dEZpbGUgPSBhZG9wdEdSZWYoZ19m
aWxlX25ld19mb3JfcGF0aChvdXRwdXRGaWxlbmFtZS5nZXQoKSkpOworICAgIEdPd25QdHI8Y2hh
cj4gb3V0cHV0VVJJKGdfZmlsZV9nZXRfdXJpKG91dHB1dEZpbGUuZ2V0KCkpKTsKKworICAgIEdS
ZWZQdHI8R3RrUHJpbnRTZXR0aW5ncz4gcHJpbnRTZXR0aW5ncyA9IGFkb3B0R1JlZihndGtfcHJp
bnRfc2V0dGluZ3NfbmV3KCkpOworICAgIGd0a19wcmludF9zZXR0aW5nc19zZXRfcHJpbnRlcihw
cmludFNldHRpbmdzLmdldCgpLCBndGtfcHJpbnRlcl9nZXRfbmFtZShwcmludGVyLmdldCgpKSk7
CisgICAgZ3RrX3ByaW50X3NldHRpbmdzX3NldChwcmludFNldHRpbmdzLmdldCgpLCBHVEtfUFJJ
TlRfU0VUVElOR1NfT1VUUFVUX1VSSSwgb3V0cHV0VVJJLmdldCgpKTsKKworICAgIHdlYmtpdF9w
cmludF9vcGVyYXRpb25fc2V0X3ByaW50X3NldHRpbmdzKHRlc3QtPm1fcHJpbnRPcGVyYXRpb24u
Z2V0KCksIHByaW50U2V0dGluZ3MuZ2V0KCkpOworICAgIHdlYmtpdF9wcmludF9vcGVyYXRpb25f
cHJpbnQodGVzdC0+bV9wcmludE9wZXJhdGlvbi5nZXQoKSk7CisgICAgdGVzdC0+d2FpdFVudGls
UHJpbnRGaW5pc2hlZCgpOworCisgICAgR1JlZlB0cjxHRmlsZUluZm8+IGZpbGVJbmZvID0gYWRv
cHRHUmVmKGdfZmlsZV9xdWVyeV9pbmZvKG91dHB1dEZpbGUuZ2V0KCksIEdfRklMRV9BVFRSSUJV
VEVfU1RBTkRBUkRfU0laRSAiLCIgR19GSUxFX0FUVFJJQlVURV9TVEFOREFSRF9DT05URU5UX1RZ
UEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRpY19jYXN0PEdGaWxlUXVlcnlJbmZvRmxhZ3M+KDApLCAwLCAwKSk7Cisg
ICAgZ19hc3NlcnQoZmlsZUluZm8uZ2V0KCkpOworICAgIGdfYXNzZXJ0X2NtcGludChnX2ZpbGVf
aW5mb19nZXRfc2l6ZShmaWxlSW5mby5nZXQoKSksID4sIDApOworICAgIGdfYXNzZXJ0X2NtcHN0
cihnX2ZpbGVfaW5mb19nZXRfY29udGVudF90eXBlKGZpbGVJbmZvLmdldCgpKSwgPT0sICJhcHBs
aWNhdGlvbi9wZGYiKTsKKworICAgIGdfZmlsZV9kZWxldGUob3V0cHV0RmlsZS5nZXQoKSwgMCwg
MCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RQcmludE9wZXJhdGlvbkVycm9ycyhQcmludFRlc3Qq
IHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxib2R5
PldlYktpdEdUSysgcHJpbnRpbmcgZXJyb3JzIHRlc3Q8L2JvZHk+PC9odG1sPiIsIDApOworICAg
IHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgR1JlZlB0cjxHdGtQcmludGVy
PiBwcmludGVyID0gYWRvcHRHUmVmKHRlc3QtPmZpbmRQcmludFRvRmlsZVByaW50ZXIoKSk7Cisg
ICAgaWYgKCFwcmludGVyKSB7CisgICAgICAgIGdfbWVzc2FnZSgiJXMiLCAiQ2Fubm90IHRlc3Qg
V2ViS2l0UHJpbnRPcGVyYXRpb24vcHJpbnQ6IG5vIHN1aXRhYmxlIHByaW50ZXIgZm91bmQiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEdlbmVyYWwgRXJyb3I6IGludmFsaWQg
ZmlsZW5hbWUuCisgICAgdGVzdC0+bV9leHBlY3RlZEVycm9yID0gV0VCS0lUX1BSSU5UX0VSUk9S
X0dFTkVSQUw7CisgICAgR1JlZlB0cjxHdGtQcmludFNldHRpbmdzPiBwcmludFNldHRpbmdzID0g
YWRvcHRHUmVmKGd0a19wcmludF9zZXR0aW5nc19uZXcoKSk7CisgICAgZ3RrX3ByaW50X3NldHRp
bmdzX3NldF9wcmludGVyKHByaW50U2V0dGluZ3MuZ2V0KCksIGd0a19wcmludGVyX2dldF9uYW1l
KHByaW50ZXIuZ2V0KCkpKTsKKyAgICBndGtfcHJpbnRfc2V0dGluZ3Nfc2V0KHByaW50U2V0dGlu
Z3MuZ2V0KCksIEdUS19QUklOVF9TRVRUSU5HU19PVVRQVVRfVVJJLCAiZmlsZTovLy9mb28vYmFy
Iik7CisgICAgd2Via2l0X3ByaW50X29wZXJhdGlvbl9zZXRfcHJpbnRfc2V0dGluZ3ModGVzdC0+
bV9wcmludE9wZXJhdGlvbi5nZXQoKSwgcHJpbnRTZXR0aW5ncy5nZXQoKSk7CisgICAgd2Via2l0
X3ByaW50X29wZXJhdGlvbl9wcmludCh0ZXN0LT5tX3ByaW50T3BlcmF0aW9uLmdldCgpKTsKKyAg
ICB0ZXN0LT53YWl0VW50aWxQcmludEZpbmlzaGVkKCk7CisKKyAgICAvLyBQcmludGVyIG5vdCBm
b3VuZCBlcnJvci4KKyAgICB0ZXN0LT5tX2V4cGVjdGVkRXJyb3IgPSBXRUJLSVRfUFJJTlRfRVJS
T1JfUFJJTlRFUl9OT1RfRk9VTkQ7CisgICAgZ3RrX3ByaW50X3NldHRpbmdzX3NldF9wcmludGVy
KHByaW50U2V0dGluZ3MuZ2V0KCksICJUaGUgZmFrZSBXZWJLaXQgcHJpbnRlciIpOworICAgIHdl
YmtpdF9wcmludF9vcGVyYXRpb25fcHJpbnQodGVzdC0+bV9wcmludE9wZXJhdGlvbi5nZXQoKSk7
CisgICAgdGVzdC0+d2FpdFVudGlsUHJpbnRGaW5pc2hlZCgpOworCisgICAgLy8gTm8gcGFnZXMg
dG8gcHJpbnQ6IHByaW50IGV2ZW4gcGFnZXMgZm9yIGEgc2luZ2xlIHBhZ2UgZG9jdW1lbnQuCisg
ICAgdGVzdC0+bV9leHBlY3RlZEVycm9yID0gV0VCS0lUX1BSSU5UX0VSUk9SX0lOVkFMSURfUEFH
RV9SQU5HRTsKKyAgICBndGtfcHJpbnRfc2V0dGluZ3Nfc2V0X3ByaW50ZXIocHJpbnRTZXR0aW5n
cy5nZXQoKSwgZ3RrX3ByaW50ZXJfZ2V0X25hbWUocHJpbnRlci5nZXQoKSkpOworICAgIGd0a19w
cmludF9zZXR0aW5nc19zZXRfcGFnZV9zZXQocHJpbnRTZXR0aW5ncy5nZXQoKSwgR1RLX1BBR0Vf
U0VUX0VWRU4pOworICAgIHdlYmtpdF9wcmludF9vcGVyYXRpb25fcHJpbnQodGVzdC0+bV9wcmlu
dE9wZXJhdGlvbi5nZXQoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsUHJpbnRGaW5pc2hlZCgpOwor
fQorI2VuZGlmIC8vIEhBVkVfR1RLX1VOSVhfUFJJTlRJTkcKKwordm9pZCBiZWZvcmVBbGwoKQor
eworICAgIGtUZW1wRGlyZWN0b3J5ID0gZ19kaXJfbWFrZV90bXAoIldlYktpdDJUZXN0cy1YWFhY
WFgiLCAwKTsKKyAgICBnX2Fzc2VydChrVGVtcERpcmVjdG9yeSk7CisKKyAgICBXZWJWaWV3VGVz
dDo6YWRkKCJXZWJLaXRQcmludE9wZXJhdGlvbiIsICJwcmludGluZy1zZXR0aW5ncyIsIHRlc3RQ
cmludE9wZXJhdGlvblByaW50U2V0dGluZ3MpOworICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktp
dFdlYlZpZXciLCAicHJpbnQiLCB0ZXN0V2ViVmlld1ByaW50KTsKKyNpZmRlZiBIQVZFX0dUS19V
TklYX1BSSU5USU5HCisgICAgUHJpbnRUZXN0OjphZGQoIldlYktpdFByaW50T3BlcmF0aW9uIiwg
InByaW50IiwgdGVzdFByaW50T3BlcmF0aW9uUHJpbnQpOworICAgIFByaW50VGVzdDo6YWRkKCJX
ZWJLaXRQcmludE9wZXJhdGlvbiIsICJwcmludC1lcnJvcnMiLCB0ZXN0UHJpbnRPcGVyYXRpb25F
cnJvcnMpOworI2VuZGlmCit9CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworICAgIGdfcm1kaXIoa1Rl
bXBEaXJlY3RvcnkpOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyR3RrL1Rlc3RSZXNvdXJjZXMuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyR3RrL1Rlc3RSZXNvdXJjZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjU3ZjE4MmMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdDJHdGsvVGVzdFJlc291cmNlcy5jcHAKQEAgLTAsMCArMSw3ODkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5oIgorI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4K
Kworc3RhdGljIFdlYktpdFRlc3RTZXJ2ZXIqIGtTZXJ2ZXI7CisKK3N0YXRpYyBjb25zdCBjaGFy
KiBrSW5kZXhIdG1sID0KKyAgICAiPGh0bWw+PGhlYWQ+IgorICAgICIgPGxpbmsgcmVsPSdzdHls
ZXNoZWV0JyBocmVmPScvc3R5bGUuY3NzJyB0eXBlPSd0ZXh0L2Nzcyc+IgorICAgICIgPHNjcmlw
dCBsYW5ndWFnZT0namF2YXNjcmlwdCcgc3JjPScvamF2YXNjcmlwdC5qcyc+PC9zY3JpcHQ+Igor
ICAgICI8L2hlYWQ+PGJvZHk+V2ViS2l0R1RLKyByZXNvdXJjZXMgdGVzdDwvYm9keT48L2h0bWw+
IjsKKworc3RhdGljIGNvbnN0IGNoYXIqIGtTdHlsZUNTUyA9CisgICAgImJvZHkgeyIKKyAgICAi
ICAgIG1hcmdpbjogMHB4OyIKKyAgICAiICAgIHBhZGRpbmc6IDBweDsiCisgICAgIiAgICBmb250
LWZhbWlseTogc2Fucy1zZXJpZjsiCisgICAgIiAgICBiYWNrZ3JvdW5kOiB1cmwoL2JsYW5rLmlj
bykgMCAwIG5vLXJlcGVhdDsiCisgICAgIiAgICBjb2xvcjogYmxhY2s7IgorICAgICJ9IjsKKwor
c3RhdGljIGNvbnN0IGNoYXIqIGtKYXZhc2NyaXB0ID0gImZ1bmN0aW9uIGZvbyAoKSB7IHZhciBh
ID0gMTsgfSI7CisKK2NsYXNzIFJlc291cmNlc1Rlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7Citw
dWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShSZXNvdXJjZXNUZXN0KTsKKworICAg
IHN0YXRpYyB2b2lkIHJlc291cmNlU2VudFJlcXVlc3RDYWxsYmFjayhXZWJLaXRXZWJSZXNvdXJj
ZSogcmVzb3VyY2UsIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QsIFdlYktpdFVSSVJlc3BvbnNl
KiByZWRpcmVjdFJlc3BvbnNlLCBSZXNvdXJjZXNUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAg
dGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChyZXF1
ZXN0KSk7CisgICAgICAgIGlmIChyZWRpcmVjdFJlc3BvbnNlKQorICAgICAgICAgICAgdGVzdC0+
YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChyZWRpcmVjdFJl
c3BvbnNlKSk7CisgICAgICAgIHRlc3QtPnJlc291cmNlU2VudFJlcXVlc3QocmVzb3VyY2UsIHJl
cXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHJlc291
cmNlUmVjZWl2ZWRSZXNwb25zZUNhbGxiYWNrKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwg
R1BhcmFtU3BlYyosIFJlc291cmNlc1Rlc3QqIHRlc3QpCisgICAgeworICAgICAgICBnX2Fzc2Vy
dCh3ZWJraXRfd2ViX3Jlc291cmNlX2dldF9yZXNwb25zZShyZXNvdXJjZSkpOworICAgICAgICB0
ZXN0LT5yZXNvdXJjZVJlY2VpdmVkUmVzcG9uc2UocmVzb3VyY2UpOworICAgIH0KKworICAgIHN0
YXRpYyB2b2lkIHJlc291cmNlUmVjZWl2ZWREYXRhQ2FsbGJhY2soV2ViS2l0V2ViUmVzb3VyY2Uq
IHJlc291cmNlLCBndWludDY0IGJ5dGVzUmVjZWl2ZWQsIFJlc291cmNlc1Rlc3QqIHRlc3QpCisg
ICAgeworICAgICAgICB0ZXN0LT5yZXNvdXJjZVJlY2VpdmVkRGF0YShyZXNvdXJjZSwgYnl0ZXNS
ZWNlaXZlZCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVzb3VyY2VGaW5pc2hlZENhbGxi
YWNrKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgUmVzb3VyY2VzVGVzdCogdGVzdCkKKyAg
ICB7CisgICAgICAgIHRlc3QtPnJlc291cmNlRmluaXNoZWQocmVzb3VyY2UpOworICAgIH0KKwor
ICAgIHN0YXRpYyB2b2lkIHJlc291cmNlRmFpbGVkQ2FsbGJhY2soV2ViS2l0V2ViUmVzb3VyY2Uq
IHJlc291cmNlLCBHRXJyb3IqIGVycm9yLCBSZXNvdXJjZXNUZXN0KiB0ZXN0KQorICAgIHsKKyAg
ICAgICAgZ19hc3NlcnQoZXJyb3IpOworICAgICAgICB0ZXN0LT5yZXNvdXJjZUZhaWxlZChyZXNv
dXJjZSwgZXJyb3IpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHJlc291cmNlTG9hZFN0YXJ0
ZWRDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRXZWJSZXNvdXJjZSogcmVz
b3VyY2UsIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QsIFJlc291cmNlc1Rlc3QqIHRlc3QpCisg
ICAgeworICAgICAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVz
KEdfT0JKRUNUKHJlc291cmNlKSk7CisgICAgICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRl
ZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QocmVxdWVzdCkpOworCisgICAgICAgIC8vIElnbm9y
ZSBmYXZpY29ucy4KKyAgICAgICAgaWYgKGdfc3RyX2hhc19zdWZmaXgod2Via2l0X3VyaV9yZXF1
ZXN0X2dldF91cmkocmVxdWVzdCksICJmYXZpY29uLmljbyIpKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIHRlc3QtPnJlc291cmNlTG9hZFN0YXJ0ZWQocmVzb3VyY2UsIHJlcXVlc3Qp
OworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KHJlc291cmNlLCAic2VudC1yZXF1ZXN0IiwgR19D
QUxMQkFDSyhyZXNvdXJjZVNlbnRSZXF1ZXN0Q2FsbGJhY2spLCB0ZXN0KTsKKyAgICAgICAgZ19z
aWduYWxfY29ubmVjdChyZXNvdXJjZSwgIm5vdGlmeTo6cmVzcG9uc2UiLCBHX0NBTExCQUNLKHJl
c291cmNlUmVjZWl2ZWRSZXNwb25zZUNhbGxiYWNrKSwgdGVzdCk7CisgICAgICAgIGdfc2lnbmFs
X2Nvbm5lY3QocmVzb3VyY2UsICJyZWNlaXZlZC1kYXRhIiwgR19DQUxMQkFDSyhyZXNvdXJjZVJl
Y2VpdmVkRGF0YUNhbGxiYWNrKSwgdGVzdCk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QocmVz
b3VyY2UsICJmaW5pc2hlZCIsIEdfQ0FMTEJBQ0socmVzb3VyY2VGaW5pc2hlZENhbGxiYWNrKSwg
dGVzdCk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QocmVzb3VyY2UsICJmYWlsZWQiLCBHX0NB
TExCQUNLKHJlc291cmNlRmFpbGVkQ2FsbGJhY2spLCB0ZXN0KTsKKyAgICB9CisKKyAgICB2b2lk
IGNsZWFyU3VicmVzb3VyY2VzKCkKKyAgICB7CisgICAgICAgIGdfbGlzdF9mcmVlX2Z1bGwobV9z
dWJyZXNvdXJjZXMsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGdfb2JqZWN0X3Vu
cmVmKSk7CisgICAgICAgIG1fc3VicmVzb3VyY2VzID0gMDsKKyAgICB9CisKKyAgICBSZXNvdXJj
ZXNUZXN0KCkKKyAgICAgICAgOiBXZWJWaWV3VGVzdCgpCisgICAgICAgICwgbV9yZXNvdXJjZXNM
b2FkZWQoMCkKKyAgICAgICAgLCBtX3Jlc291cmNlc1RvTG9hZCgwKQorICAgICAgICAsIG1fcmVz
b3VyY2VEYXRhU2l6ZSgwKQorICAgICAgICAsIG1fc3VicmVzb3VyY2VzKDApCisgICAgeworICAg
ICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgInJlc291cmNlLWxvYWQtc3RhcnRlZCIs
IEdfQ0FMTEJBQ0socmVzb3VyY2VMb2FkU3RhcnRlZENhbGxiYWNrKSwgdGhpcyk7CisgICAgfQor
CisgICAgflJlc291cmNlc1Rlc3QoKQorICAgIHsKKyAgICAgICAgY2xlYXJTdWJyZXNvdXJjZXMo
KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVzb3VyY2VMb2FkU3RhcnRlZChXZWJLaXRX
ZWJSZXNvdXJjZSogcmVzb3VyY2UsIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QpCisgICAgewor
ICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCByZXNvdXJjZVNlbnRSZXF1ZXN0KFdlYktpdFdlYlJl
c291cmNlKiByZXNvdXJjZSwgV2ViS2l0VVJJUmVxdWVzdCogcmVxdWVzdCwgV2ViS2l0VVJJUmVz
cG9uc2UqIHJlZGlyZWN0UmVzcG9uc2UpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9p
ZCByZXNvdXJjZVJlY2VpdmVkUmVzcG9uc2UoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlKQor
ICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVzb3VyY2VSZWNlaXZlZERhdGEoV2Vi
S2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBndWludDY0IGJ5dGVzUmVjZWl2ZWQpCisgICAgewor
ICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCByZXNvdXJjZUZpbmlzaGVkKFdlYktpdFdlYlJlc291
cmNlKiByZXNvdXJjZSkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5l
Y3RfbWF0Y2hlZChyZXNvdXJjZSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhp
cyk7CisgICAgICAgIGlmICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2UobV93ZWJW
aWV3KSAhPSByZXNvdXJjZSkKKyAgICAgICAgICAgIG1fc3VicmVzb3VyY2VzID0gZ19saXN0X3By
ZXBlbmQobV9zdWJyZXNvdXJjZXMsIGdfb2JqZWN0X3JlZihyZXNvdXJjZSkpOworICAgICAgICBp
ZiAoKyttX3Jlc291cmNlc0xvYWRlZCA9PSBtX3Jlc291cmNlc1RvTG9hZCkKKyAgICAgICAgICAg
IGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lk
IHJlc291cmNlRmFpbGVkKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgR0Vycm9yKiBlcnJv
cikKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgfQorCisgICAg
dm9pZCB3YWl0VW50aWxSZXNvdXJjZXNMb2FkZWQoc2l6ZV90IHJlc291cmNlc0NvdW50KQorICAg
IHsKKyAgICAgICAgbV9yZXNvdXJjZXNMb2FkZWQgPSAwOworICAgICAgICBtX3Jlc291cmNlc1Rv
TG9hZCA9IHJlc291cmNlc0NvdW50OworICAgICAgICBjbGVhclN1YnJlc291cmNlcygpOworICAg
ICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgfQorCisgICAgR0xpc3QqIHN1
YnJlc291cmNlcygpCisgICAgeworICAgICAgICByZXR1cm4gbV9zdWJyZXNvdXJjZXM7CisgICAg
fQorCisgICAgc3RhdGljIHZvaWQgcmVzb3VyY2VHZXREYXRhQ2FsbGJhY2soR09iamVjdCogb2Jq
ZWN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEpCisgICAgeworICAg
ICAgICBzaXplX3QgZGF0YVNpemU7CisgICAgICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAg
ICAgICAgdW5zaWduZWQgY2hhciogZGF0YSA9IHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X2RhdGFf
ZmluaXNoKFdFQktJVF9XRUJfUkVTT1VSQ0Uob2JqZWN0KSwgcmVzdWx0LCAmZGF0YVNpemUsICZl
cnJvci5vdXRQdHIoKSk7CisgICAgICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7CisgICAgICAg
IGdfYXNzZXJ0KGRhdGEpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoZGF0YVNpemUsID4sIDAp
OworCisgICAgICAgIFJlc291cmNlc1Rlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZXNU
ZXN0Kj4odXNlckRhdGEpOworICAgICAgICB0ZXN0LT5tX3Jlc291cmNlRGF0YS5zZXQocmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oZGF0YSkpOworICAgICAgICB0ZXN0LT5tX3Jlc291cmNlRGF0YVNp
emUgPSBkYXRhU2l6ZTsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29w
KTsKKyAgICB9CisKKyAgICB2b2lkIGNoZWNrUmVzb3VyY2VEYXRhKFdlYktpdFdlYlJlc291cmNl
KiByZXNvdXJjZSkKKyAgICB7CisgICAgICAgIG1fcmVzb3VyY2VEYXRhU2l6ZSA9IDA7CisgICAg
ICAgIHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X2RhdGEocmVzb3VyY2UsIDAsIHJlc291cmNlR2V0
RGF0YUNhbGxiYWNrLCB0aGlzKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3Ap
OworCisgICAgICAgIGNvbnN0IGNoYXIqIHVyaSA9IHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3Vy
aShyZXNvdXJjZSk7CisgICAgICAgIGlmICh1cmkgPT0ga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgi
LyIpKSB7CisgICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQobV9yZXNvdXJjZURhdGFTaXplLCA9
PSwgc3RybGVuKGtJbmRleEh0bWwpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KCFzdHJuY21wKG1f
cmVzb3VyY2VEYXRhLmdldCgpLCBrSW5kZXhIdG1sLCBtX3Jlc291cmNlRGF0YVNpemUpKTsKKyAg
ICAgICAgfSBlbHNlIGlmICh1cmkgPT0ga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3N0eWxlLmNz
cyIpKSB7CisgICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQobV9yZXNvdXJjZURhdGFTaXplLCA9
PSwgc3RybGVuKGtTdHlsZUNTUykpOworICAgICAgICAgICAgZ19hc3NlcnQoIXN0cm5jbXAobV9y
ZXNvdXJjZURhdGEuZ2V0KCksIGtTdHlsZUNTUywgbV9yZXNvdXJjZURhdGFTaXplKSk7CisgICAg
ICAgIH0gZWxzZSBpZiAodXJpID09IGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9qYXZhc2NyaXB0
LmpzIikpIHsKKyAgICAgICAgICAgIGdfYXNzZXJ0X2NtcGludChtX3Jlc291cmNlRGF0YVNpemUs
ID09LCBzdHJsZW4oa0phdmFzY3JpcHQpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KCFzdHJuY21w
KG1fcmVzb3VyY2VEYXRhLmdldCgpLCBrSmF2YXNjcmlwdCwgbV9yZXNvdXJjZURhdGFTaXplKSk7
CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAg
ICAgICAgbV9yZXNvdXJjZURhdGEuY2xlYXIoKTsKKyAgICB9CisKKyAgICBzaXplX3QgbV9yZXNv
dXJjZXNMb2FkZWQ7CisgICAgc2l6ZV90IG1fcmVzb3VyY2VzVG9Mb2FkOworICAgIEdPd25QdHI8
Y2hhcj4gbV9yZXNvdXJjZURhdGE7CisgICAgc2l6ZV90IG1fcmVzb3VyY2VEYXRhU2l6ZTsKKyAg
ICBHTGlzdCogbV9zdWJyZXNvdXJjZXM7Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1Jl
c291cmNlcyhSZXNvdXJjZXNUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIC8vIE5v
dGhpbmcgbG9hZGVkIHlldCwgdGhlcmUgc2hvdWxuZCd0IGJlIHJlc291cmNlcy4KKyAgICBnX2Fz
c2VydCghd2Via2l0X3dlYl92aWV3X2dldF9tYWluX3Jlc291cmNlKHRlc3QtPm1fd2ViVmlldykp
OworICAgIGdfYXNzZXJ0KCF0ZXN0LT5zdWJyZXNvdXJjZXMoKSk7CisKKyAgICAvLyBMb2FkIHNp
bXBsZSBwYWdlIHdpdGhvdXQgc3VicmVzb3VyY2VzLgorICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRt
bD48Ym9keT5UZXN0aW5nIFdlYktpdEdUSys8L2JvZHk+PC9odG1sPiIsIDApOworICAgIHRlc3Qt
PndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJj
ZSA9IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9yZXNvdXJjZSh0ZXN0LT5tX3dlYlZpZXcpOwor
ICAgIGdfYXNzZXJ0KHJlc291cmNlKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92
aWV3X2dldF91cmkodGVzdC0+bV93ZWJWaWV3KSwgPT0sIHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0
X3VyaShyZXNvdXJjZSkpOworICAgIGdfYXNzZXJ0KCF0ZXN0LT5zdWJyZXNvdXJjZXMoKSk7CisK
KyAgICAvLyBMb2FkIHNpbXBsZSBwYWdlIHdpdGggc3VicmVzb3VyY2VzLgorICAgIHRlc3QtPmxv
YWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2Fp
dFVudGlsUmVzb3VyY2VzTG9hZGVkKDQpOworCisgICAgcmVzb3VyY2UgPSB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X21haW5fcmVzb3VyY2UodGVzdC0+bV93ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChyZXNv
dXJjZSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKHRlc3Qt
Pm1fd2ViVmlldyksID09LCB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF91cmkocmVzb3VyY2UpKTsK
KyAgICBHTGlzdCogc3VicmVzb3VyY2VzID0gdGVzdC0+c3VicmVzb3VyY2VzKCk7CisgICAgZ19h
c3NlcnQoc3VicmVzb3VyY2VzKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19saXN0X2xlbmd0aChz
dWJyZXNvdXJjZXMpLCA9PSwgMyk7CisKKyNpZiAwCisgICAgLy8gTG9hZCB0aGUgc2FtZSBVUkkg
YWdhaW4uCisgICAgLy8gRklYTUU6IHdlIG5lZWQgYSB3b3JrYXJvdW5kIGZvciBidWcgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NTEwLgorICAgIHRlc3QtPmxvYWRV
Ukkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVu
dGlsUmVzb3VyY2VzTG9hZGVkKDQpOworI2VuZGlmCisKKyAgICAvLyBSZWxvYWQuCisgICAgd2Vi
a2l0X3dlYl92aWV3X3JlbG9hZF9ieXBhc3NfY2FjaGUodGVzdC0+bV93ZWJWaWV3KTsKKyAgICB0
ZXN0LT53YWl0VW50aWxSZXNvdXJjZXNMb2FkZWQoNCk7Cit9CisKK2NsYXNzIFNpbmdsZVJlc291
cmNlTG9hZFRlc3Q6IHB1YmxpYyBSZXNvdXJjZXNUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dM
SUJfVEVTVF9GSVhUVVJFKFNpbmdsZVJlc291cmNlTG9hZFRlc3QpOworCisgICAgZW51bSBMb2Fk
RXZlbnRzIHsKKyAgICAgICAgU3RhcnRlZCwKKyAgICAgICAgU2VudFJlcXVlc3QsCisgICAgICAg
IFJlZGlyZWN0ZWQsCisgICAgICAgIFJlY2VpdmVkUmVzcG9uc2UsCisgICAgICAgIFJlY2VpdmVk
RGF0YSwKKyAgICAgICAgRmluaXNoZWQsCisgICAgICAgIEZhaWxlZAorICAgIH07CisKKyAgICBT
aW5nbGVSZXNvdXJjZUxvYWRUZXN0KCkKKyAgICAgICAgOiBSZXNvdXJjZXNUZXN0KCkKKyAgICAg
ICAgLCBtX3Jlc291cmNlRGF0YVJlY2VpdmVkKDApCisgICAgeworICAgICAgICAgbV9yZXNvdXJj
ZXNUb0xvYWQgPSAyOworICAgIH0KKworICAgIHZvaWQgcmVzb3VyY2VMb2FkU3RhcnRlZChXZWJL
aXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QpCisgICAg
eworICAgICAgICBpZiAocmVzb3VyY2UgPT0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX3Jlc291
cmNlKG1fd2ViVmlldykpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9yZXNvdXJj
ZURhdGFSZWNlaXZlZCA9IDA7CisgICAgICAgIG1fcmVzb3VyY2UgPSByZXNvdXJjZTsKKyAgICAg
ICAgbV9sb2FkRXZlbnRzLmFwcGVuZChTdGFydGVkKTsKKyAgICB9CisKKyAgICB2b2lkIHJlc291
cmNlU2VudFJlcXVlc3QoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBXZWJLaXRVUklSZXF1
ZXN0KiByZXF1ZXN0LCBXZWJLaXRVUklSZXNwb25zZSogcmVkaXJlY3RSZXNwb25zZSkKKyAgICB7
CisgICAgICAgIGlmIChyZXNvdXJjZSAhPSBtX3Jlc291cmNlKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIGlmIChyZWRpcmVjdFJlc3BvbnNlKQorICAgICAgICAgICAgbV9sb2FkRXZl
bnRzLmFwcGVuZChSZWRpcmVjdGVkKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9sb2Fk
RXZlbnRzLmFwcGVuZChTZW50UmVxdWVzdCk7CisgICAgfQorCisgICAgdm9pZCByZXNvdXJjZVJl
Y2VpdmVkUmVzcG9uc2UoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlKQorICAgIHsKKyAgICAg
ICAgaWYgKHJlc291cmNlICE9IG1fcmVzb3VyY2UpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgbV9sb2FkRXZlbnRzLmFwcGVuZChSZWNlaXZlZFJlc3BvbnNlKTsKKyAgICB9CisKKyAg
ICB2b2lkIHJlc291cmNlUmVjZWl2ZWREYXRhKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwg
Z3VpbnQ2NCBieXRlc1JlY2VpdmVkKQorICAgIHsKKyAgICAgICAgaWYgKHJlc291cmNlICE9IG1f
cmVzb3VyY2UpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9yZXNvdXJjZURhdGFS
ZWNlaXZlZCArPSBieXRlc1JlY2VpdmVkOworICAgICAgICBpZiAoIW1fbG9hZEV2ZW50cy5jb250
YWlucyhSZWNlaXZlZERhdGEpKQorICAgICAgICAgICAgbV9sb2FkRXZlbnRzLmFwcGVuZChSZWNl
aXZlZERhdGEpOworICAgIH0KKworICAgIHZvaWQgcmVzb3VyY2VGaW5pc2hlZChXZWJLaXRXZWJS
ZXNvdXJjZSogcmVzb3VyY2UpCisgICAgeworICAgICAgICBpZiAocmVzb3VyY2UgIT0gbV9yZXNv
dXJjZSkgeworICAgICAgICAgICAgUmVzb3VyY2VzVGVzdDo6cmVzb3VyY2VGaW5pc2hlZChyZXNv
dXJjZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1f
bG9hZEV2ZW50cy5jb250YWlucyhGYWlsZWQpKSB7CisgICAgICAgICAgICBXZWJLaXRVUklSZXNw
b25zZSogcmVzcG9uc2UgPSB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF9yZXNwb25zZShtX3Jlc291
cmNlLmdldCgpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KHJlc3BvbnNlKTsKKyAgICAgICAgICAg
IGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF9jb250ZW50X2xlbmd0aChy
ZXNwb25zZSksID09LCBtX3Jlc291cmNlRGF0YVJlY2VpdmVkKTsKKyAgICAgICAgfQorICAgICAg
ICBtX2xvYWRFdmVudHMuYXBwZW5kKEZpbmlzaGVkKTsKKyAgICAgICAgUmVzb3VyY2VzVGVzdDo6
cmVzb3VyY2VGaW5pc2hlZChyZXNvdXJjZSk7CisgICAgfQorCisgICAgdm9pZCByZXNvdXJjZUZh
aWxlZChXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIEdFcnJvciogZXJyb3IpCisgICAgewor
ICAgICAgICBpZiAocmVzb3VyY2UgPT0gbV9yZXNvdXJjZSkKKyAgICAgICAgICAgIG1fbG9hZEV2
ZW50cy5hcHBlbmQoRmFpbGVkKTsKKyAgICB9CisKKyAgICB2b2lkIHdhaXRVbnRpbFJlc291cmNl
TG9hZEZpbmlzaGVkKCkKKyAgICB7CisgICAgICAgIG1fcmVzb3VyY2UgPSAwOworICAgICAgICBt
X3Jlc291cmNlc0xvYWRlZCA9IDA7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29w
KTsKKyAgICB9CisKKyAgICBXZWJLaXRVUklSZXNwb25zZSogd2FpdFVudGlsUmVzb3VyY2VMb2Fk
RmluaXNoZWRBbmRSZXR1cm5VUklSZXNwb25zZSgpCisgICAgeworICAgICAgICB3YWl0VW50aWxS
ZXNvdXJjZUxvYWRGaW5pc2hlZCgpOworICAgICAgICBnX2Fzc2VydChtX3Jlc291cmNlKTsKKyAg
ICAgICAgcmV0dXJuIHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3Jlc3BvbnNlKG1fcmVzb3VyY2Uu
Z2V0KCkpOworICAgIH0KKworICAgIEdSZWZQdHI8V2ViS2l0V2ViUmVzb3VyY2U+IG1fcmVzb3Vy
Y2U7CisgICAgVmVjdG9yPExvYWRFdmVudHM+IG1fbG9hZEV2ZW50czsKKyAgICBndWludDY0IG1f
cmVzb3VyY2VEYXRhUmVjZWl2ZWQ7Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0V2ViUmVzb3VyY2VM
b2FkaW5nKFNpbmdsZVJlc291cmNlTG9hZFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7Cisg
ICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvamF2YXNjcmlwdC5odG1s
IikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZCgpOwor
ICAgIGdfYXNzZXJ0KHRlc3QtPm1fcmVzb3VyY2UpOworICAgIFZlY3RvcjxTaW5nbGVSZXNvdXJj
ZUxvYWRUZXN0OjpMb2FkRXZlbnRzPiYgZXZlbnRzID0gdGVzdC0+bV9sb2FkRXZlbnRzOworICAg
IGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgNSk7CisgICAgZ19hc3NlcnRfY21w
aW50KGV2ZW50c1swXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlN0YXJ0ZWQpOworICAg
IGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpT
ZW50UmVxdWVzdCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIFNpbmdsZVJl
c291cmNlTG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOworICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHNbM10sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpSZWNlaXZlZERhdGEpOworICAg
IGdfYXNzZXJ0X2NtcGludChldmVudHNbNF0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpG
aW5pc2hlZCk7CisgICAgZXZlbnRzLmNsZWFyKCk7CisKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2
ZXItPmdldFVSSUZvclBhdGgoIi9yZWRpcmVjdGVkLWNzcy5odG1sIikuZGF0YSgpKTsKKyAgICB0
ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0KHRlc3Qt
Pm1fcmVzb3VyY2UpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgNik7
CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRl
c3Q6OlN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBTaW5nbGVS
ZXNvdXJjZUxvYWRUZXN0OjpTZW50UmVxdWVzdCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50
c1syXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlJlZGlyZWN0ZWQpOworICAgIGdfYXNz
ZXJ0X2NtcGludChldmVudHNbM10sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpSZWNlaXZl
ZFJlc3BvbnNlKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzRdLCA9PSwgU2luZ2xlUmVz
b3VyY2VMb2FkVGVzdDo6UmVjZWl2ZWREYXRhKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRz
WzVdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6RmluaXNoZWQpOworICAgIGV2ZW50cy5j
bGVhcigpOworCisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvaW52
YWxpZC1jc3MuaHRtbCIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2Fk
RmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3Jlc291cmNlKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVu
dHNbMF0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpTdGFydGVkKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6U2VudFJlcXVl
c3QpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBTaW5nbGVSZXNvdXJjZUxv
YWRUZXN0OjpGYWlsZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbM10sID09LCBTaW5n
bGVSZXNvdXJjZUxvYWRUZXN0OjpGaW5pc2hlZCk7CisgICAgZXZlbnRzLmNsZWFyKCk7Cit9CisK
K3N0YXRpYyB2b2lkIHRlc3RXZWJSZXNvdXJjZVJlc3BvbnNlKFNpbmdsZVJlc291cmNlTG9hZFRl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8gTm8gY2FjaGVkIHJlc291cmNlOiBG
aXJzdCBsb2FkLgorICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2ph
dmFzY3JpcHQuaHRtbCIpLmRhdGEoKSk7CisgICAgV2ViS2l0VVJJUmVzcG9uc2UqIHJlc3BvbnNl
ID0gdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWRBbmRSZXR1cm5VUklSZXNwb25z
ZSgpOworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF9zdGF0dXNf
Y29kZShyZXNwb25zZSksID09LCBTT1VQX1NUQVRVU19PSyk7CisKKyAgICAvLyBObyBjYWNoZWQg
cmVzb3VyY2U6IFNlY29uZCBsb2FkLgorICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJ
Rm9yUGF0aCgiL2phdmFzY3JpcHQuaHRtbCIpLmRhdGEoKSk7CisgICAgcmVzcG9uc2UgPSB0ZXN0
LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZEFuZFJldHVyblVSSVJlc3BvbnNlKCk7Cisg
ICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0X3N0YXR1c19jb2RlKHJl
c3BvbnNlKSwgPT0sIFNPVVBfU1RBVFVTX09LKTsKKworICAgIC8vIE5vIGNhY2hlZCByZXNvdXJj
ZTogUmVsb2FkLgorICAgIHdlYmtpdF93ZWJfdmlld19yZWxvYWQodGVzdC0+bV93ZWJWaWV3KTsK
KyAgICByZXNwb25zZSA9IHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlzaGVkQW5kUmV0
dXJuVVJJUmVzcG9uc2UoKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3VyaV9yZXNwb25z
ZV9nZXRfc3RhdHVzX2NvZGUocmVzcG9uc2UpLCA9PSwgU09VUF9TVEFUVVNfT0spOworCisgICAg
Ly8gQ2FjaGVkIHJlc291cmNlOiBGaXJzdCBsb2FkLgorICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZl
ci0+Z2V0VVJJRm9yUGF0aCgiL2ltYWdlLmh0bWwiKS5kYXRhKCkpOworICAgIHJlc3BvbnNlID0g
dGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWRBbmRSZXR1cm5VUklSZXNwb25zZSgp
OworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF9zdGF0dXNfY29k
ZShyZXNwb25zZSksID09LCBTT1VQX1NUQVRVU19PSyk7CisKKyAgICAvLyBDYWNoZWQgcmVzb3Vy
Y2U6IFNlY29uZCBsb2FkLgorICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0
aCgiL2ltYWdlLmh0bWwiKS5kYXRhKCkpOworICAgIHJlc3BvbnNlID0gdGVzdC0+d2FpdFVudGls
UmVzb3VyY2VMb2FkRmluaXNoZWRBbmRSZXR1cm5VUklSZXNwb25zZSgpOworICAgIGdfYXNzZXJ0
X2NtcGludCh3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF9zdGF0dXNfY29kZShyZXNwb25zZSksID09
LCBTT1VQX1NUQVRVU19PSyk7CisKKyAgICAvLyBDYWNoZWQgcmVzb3VyY2U6IFJlbG9hZC4KKyAg
ICB3ZWJraXRfd2ViX3ZpZXdfcmVsb2FkKHRlc3QtPm1fd2ViVmlldyk7CisgICAgcmVzcG9uc2Ug
PSB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZEFuZFJldHVyblVSSVJlc3BvbnNl
KCk7CisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0X3N0YXR1c19j
b2RlKHJlc3BvbnNlKSwgPT0sIFNPVVBfU1RBVFVTX05PVF9NT0RJRklFRCk7Cit9CisKK3N0YXRp
YyB2b2lkIHRlc3RXZWJSZXNvdXJjZU1pbWVUeXBlKFNpbmdsZVJlc291cmNlTG9hZFRlc3QqIHRl
c3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklG
b3JQYXRoKCIvamF2YXNjcmlwdC5odG1sIikuZGF0YSgpKTsKKyAgICBXZWJLaXRVUklSZXNwb25z
ZSogcmVzcG9uc2UgPSB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZEFuZFJldHVy
blVSSVJlc3BvbnNlKCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF91cmlfcmVzcG9uc2Vf
Z2V0X21pbWVfdHlwZShyZXNwb25zZSksID09LCAidGV4dC9qYXZhc2NyaXB0Iik7CisKKyAgICB0
ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbWFnZS5odG1sIikuZGF0YSgp
KTsKKyAgICByZXNwb25zZSA9IHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlzaGVkQW5k
UmV0dXJuVVJJUmVzcG9uc2UoKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3VyaV9yZXNw
b25zZV9nZXRfbWltZV90eXBlKHJlc3BvbnNlKSwgPT0sICJpbWFnZS92bmQubWljcm9zb2Z0Lmlj
b24iKTsKKworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3JlZGly
ZWN0ZWQtY3NzLmh0bWwiKS5kYXRhKCkpOworICAgIHJlc3BvbnNlID0gdGVzdC0+d2FpdFVudGls
UmVzb3VyY2VMb2FkRmluaXNoZWRBbmRSZXR1cm5VUklSZXNwb25zZSgpOworICAgIGdfYXNzZXJ0
X2NtcHN0cih3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF9taW1lX3R5cGUocmVzcG9uc2UpLCA9PSwg
InRleHQvY3NzIik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJSZXNvdXJjZVN1Z2dlc3RlZEZp
bGVuYW1lKFNpbmdsZVJlc291cmNlTG9hZFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7Cisg
ICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvamF2YXNjcmlwdC5odG1s
IikuZGF0YSgpKTsKKyAgICBXZWJLaXRVUklSZXNwb25zZSogcmVzcG9uc2UgPSB0ZXN0LT53YWl0
VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZEFuZFJldHVyblVSSVJlc3BvbnNlKCk7CisgICAgZ19h
c3NlcnRfY21wc3RyKHdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0X3N1Z2dlc3RlZF9maWxlbmFtZShy
ZXNwb25zZSksID09LCAiSmF2YVNjcmlwdC5qcyIpOworCisgICAgdGVzdC0+bG9hZFVSSShrU2Vy
dmVyLT5nZXRVUklGb3JQYXRoKCIvaW1hZ2UuaHRtbCIpLmRhdGEoKSk7CisgICAgcmVzcG9uc2Ug
PSB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZEFuZFJldHVyblVSSVJlc3BvbnNl
KCk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0X3N1Z2dlc3RlZF9maWxl
bmFtZShyZXNwb25zZSkpOworfQorCitjbGFzcyBSZXNvdXJjZVVSSVRyYWNraW5nVGVzdDogcHVi
bGljIFNpbmdsZVJlc291cmNlTG9hZFRlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNU
X0ZJWFRVUkUoUmVzb3VyY2VVUklUcmFja2luZ1Rlc3QpOworCisgICAgUmVzb3VyY2VVUklUcmFj
a2luZ1Rlc3QoKQorICAgICAgICA6IFNpbmdsZVJlc291cmNlTG9hZFRlc3QoKQorICAgIHsKKyAg
ICB9CisKKyAgICBzdGF0aWMgdm9pZCB1cmlDaGFuZ2VkKFdlYktpdFdlYlJlc291cmNlKiByZXNv
dXJjZSwgR1BhcmFtU3BlYyosIFJlc291cmNlVVJJVHJhY2tpbmdUZXN0KiB0ZXN0KQorICAgIHsK
KyAgICAgICAgZ19hc3NlcnQocmVzb3VyY2UgPT0gdGVzdC0+bV9yZXNvdXJjZS5nZXQoKSk7Cisg
ICAgICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXN0LT5tX2FjdGl2ZVVSSS5kYXRhKCksICE9LCB3ZWJr
aXRfd2ViX3Jlc291cmNlX2dldF91cmkodGVzdC0+bV9yZXNvdXJjZS5nZXQoKSkpOworICAgICAg
ICB0ZXN0LT5tX2FjdGl2ZVVSSSA9IHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaSh0ZXN0LT5t
X3Jlc291cmNlLmdldCgpKTsKKyAgICB9CisKKyAgICB2b2lkIHJlc291cmNlTG9hZFN0YXJ0ZWQo
V2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBXZWJLaXRVUklSZXF1ZXN0KiByZXF1ZXN0KQor
ICAgIHsKKyAgICAgICAgaWYgKHJlc291cmNlID09IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9y
ZXNvdXJjZShtX3dlYlZpZXcpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fcmVz
b3VyY2UgPSByZXNvdXJjZTsKKyAgICAgICAgbV9hY3RpdmVVUkkgPSB3ZWJraXRfd2ViX3Jlc291
cmNlX2dldF91cmkocmVzb3VyY2UpOworICAgICAgICBjaGVja0FjdGl2ZVVSSSgiL3JlZGlyZWN0
ZWQuY3NzIik7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cihtX2FjdGl2ZVVSSS5kYXRhKCksID09
LCB3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KSk7CisgICAgICAgIGdfc2lnbmFs
X2Nvbm5lY3QocmVzb3VyY2UsICJub3RpZnk6OnVyaSIsIEdfQ0FMTEJBQ0sodXJpQ2hhbmdlZCks
IHRoaXMpOworICAgIH0KKworICAgIHZvaWQgcmVzb3VyY2VTZW50UmVxdWVzdChXZWJLaXRXZWJS
ZXNvdXJjZSogcmVzb3VyY2UsIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QsIFdlYktpdFVSSVJl
c3BvbnNlKiByZWRpcmVjdFJlc3BvbnNlKQorICAgIHsKKyAgICAgICAgaWYgKHJlc291cmNlICE9
IG1fcmVzb3VyY2UpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKHJlZGlyZWN0
UmVzcG9uc2UpCisgICAgICAgICAgICBjaGVja0FjdGl2ZVVSSSgiL3NpbXBsZS1zdHlsZS5jc3Mi
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2hlY2tBY3RpdmVVUkkoIi9yZWRpcmVjdGVk
LmNzcyIpOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIobV9hY3RpdmVVUkkuZGF0YSgpLCA9PSwg
d2Via2l0X3VyaV9yZXF1ZXN0X2dldF91cmkocmVxdWVzdCkpOworICAgIH0KKworICAgIHZvaWQg
cmVzb3VyY2VSZWNlaXZlZFJlc3BvbnNlKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSkKKyAg
ICB7CisgICAgICAgIGlmIChyZXNvdXJjZSAhPSBtX3Jlc291cmNlKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIGNoZWNrQWN0aXZlVVJJKCIvc2ltcGxlLXN0eWxlLmNzcyIpOworICAg
IH0KKworICAgIHZvaWQgcmVzb3VyY2VSZWNlaXZlZERhdGEoV2ViS2l0V2ViUmVzb3VyY2UqIHJl
c291cmNlLCBndWludDY0IGJ5dGVzUmVjZWl2ZWQpCisgICAgeworICAgIH0KKworICAgIHZvaWQg
cmVzb3VyY2VGaW5pc2hlZChXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UpCisgICAgeworICAg
ICAgICBpZiAocmVzb3VyY2UgPT0gbV9yZXNvdXJjZSkKKyAgICAgICAgICAgIGNoZWNrQWN0aXZl
VVJJKCIvc2ltcGxlLXN0eWxlLmNzcyIpOworICAgICAgICBSZXNvdXJjZXNUZXN0OjpyZXNvdXJj
ZUZpbmlzaGVkKHJlc291cmNlKTsKKyAgICB9CisKKyAgICB2b2lkIHJlc291cmNlRmFpbGVkKFdl
YktpdFdlYlJlc291cmNlKiwgR0Vycm9yKikKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0X25vdF9y
ZWFjaGVkKCk7CisgICAgfQorCisgICAgQ1N0cmluZyBtX2FjdGl2ZVVSSTsKKworcHJpdmF0ZToK
KyAgICB2b2lkIGNoZWNrQWN0aXZlVVJJKGNvbnN0IGNoYXIqIHVyaSkKKyAgICB7CisgICAgICAg
IEFTU0VSVF9DTVBfQ1NUUklORyhtX2FjdGl2ZVVSSSwgPT0sIGtTZXJ2ZXItPmdldFVSSUZvclBh
dGgodXJpKSk7CisgICAgfQorfTsKKworc3RhdGljIHZvaWQgdGVzdFdlYlJlc291cmNlQWN0aXZl
VVJJKFJlc291cmNlVVJJVHJhY2tpbmdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAg
IHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3JlZGlyZWN0ZWQtY3NzLmh0
bWwiKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlzaGVkKCk7
Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJSZXNvdXJjZUdldERhdGEoUmVzb3VyY2VzVGVzdCog
dGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVS
SUZvclBhdGgoIi8iKS5kYXRhKCkpOworICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSA0IGlu
c3RlYWQgb2YgMywgYnV0IHdlIGRvbid0IGdldCB0aGUgY3NzIGltYWdlIHJlc291cmNlCisgICAg
Ly8gZHVlIHRvIGJ1ZyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg1
MTAuCisgICAgdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VzTG9hZGVkKDMpOworCisgICAgV2ViS2l0
V2ViUmVzb3VyY2UqIHJlc291cmNlID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX3Jlc291cmNl
KHRlc3QtPm1fd2ViVmlldyk7CisgICAgZ19hc3NlcnQocmVzb3VyY2UpOworICAgIHRlc3QtPmNo
ZWNrUmVzb3VyY2VEYXRhKHJlc291cmNlKTsKKworICAgIEdMaXN0KiBzdWJyZXNvdXJjZXMgPSB0
ZXN0LT5zdWJyZXNvdXJjZXMoKTsKKyAgICBmb3IgKEdMaXN0KiBpdGVtID0gc3VicmVzb3VyY2Vz
OyBpdGVtOyBpdGVtID0gZ19saXN0X25leHQoaXRlbSkpCisgICAgICAgIHRlc3QtPmNoZWNrUmVz
b3VyY2VEYXRhKFdFQktJVF9XRUJfUkVTT1VSQ0UoaXRlbS0+ZGF0YSkpOworfQorCitzdGF0aWMg
dm9pZCB0ZXN0V2ViVmlld1Jlc291cmNlc0hpc3RvcnlDYWNoZShTaW5nbGVSZXNvdXJjZUxvYWRU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIENTdHJpbmcgamF2YXNjcmlwdFVSSSA9
IGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9qYXZhc2NyaXB0Lmh0bWwiKTsKKyAgICB0ZXN0LT5s
b2FkVVJJKGphdmFzY3JpcHRVUkkuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxSZXNvdXJj
ZUxvYWRGaW5pc2hlZCgpOworICAgIFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSA9IHdlYmtp
dF93ZWJfdmlld19nZXRfbWFpbl9yZXNvdXJjZSh0ZXN0LT5tX3dlYlZpZXcpOworICAgIGdfYXNz
ZXJ0KHJlc291cmNlKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9yZXNvdXJjZV9n
ZXRfdXJpKHJlc291cmNlKSwgPT0sIGphdmFzY3JpcHRVUkkuZGF0YSgpKTsKKworICAgIENTdHJp
bmcgc2ltcGxlU3R5bGVDU1NVUkkgPSBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvc2ltcGxlLXN0
eWxlLWNzcy5odG1sIik7CisgICAgdGVzdC0+bG9hZFVSSShzaW1wbGVTdHlsZUNTU1VSSS5kYXRh
KCkpOworICAgIHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlzaGVkKCk7CisgICAgcmVz
b3VyY2UgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2UodGVzdC0+bV93ZWJWaWV3
KTsKKyAgICBnX2Fzc2VydChyZXNvdXJjZSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93
ZWJfcmVzb3VyY2VfZ2V0X3VyaShyZXNvdXJjZSksID09LCBzaW1wbGVTdHlsZUNTU1VSSS5kYXRh
KCkpOworCisgICAgdGVzdC0+Z29CYWNrKCk7CisgICAgdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VM
b2FkRmluaXNoZWQoKTsKKyAgICByZXNvdXJjZSA9IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9y
ZXNvdXJjZSh0ZXN0LT5tX3dlYlZpZXcpOworICAgIGdfYXNzZXJ0KHJlc291cmNlKTsKKyAgICBn
X2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJpKHJlc291cmNlKSwgPT0s
IGphdmFzY3JpcHRVUkkuZGF0YSgpKTsKKworICAgIHRlc3QtPmdvRm9yd2FyZCgpOworICAgIHRl
c3QtPndhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlzaGVkKCk7CisgICAgcmVzb3VyY2UgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2UodGVzdC0+bV93ZWJWaWV3KTsKKyAgICBnX2Fz
c2VydChyZXNvdXJjZSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfcmVzb3VyY2Vf
Z2V0X3VyaShyZXNvdXJjZSksID09LCBzaW1wbGVTdHlsZUNTU1VSSS5kYXRhKCkpOworfQorCitj
bGFzcyBTZW5kUmVxdWVzdFRlc3Q6IHB1YmxpYyBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0IHsKK3B1
YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFNlbmRSZXF1ZXN0VGVzdCk7CisKKyAg
ICB2b2lkIHJlc291cmNlU2VudFJlcXVlc3QoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBX
ZWJLaXRVUklSZXF1ZXN0KiByZXF1ZXN0LCBXZWJLaXRVUklSZXNwb25zZSogcmVkaXJlY3RSZXNw
b25zZSkKKyAgICB7CisgICAgICAgIGlmIChyZXNvdXJjZSAhPSBtX3Jlc291cmNlKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChyZWRpcmVjdFJlc3BvbnNlKQorICAgICAgICAg
ICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfdXJpKHJlcXVlc3QpLCA9
PSwgbV9leHBlY3RlZE5ld1Jlc291cmNlVVJJQWZ0ZXJSZWRpcmVjdGlvbi5kYXRhKCkpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3VyaV9yZXF1ZXN0
X2dldF91cmkocmVxdWVzdCksID09LCBtX2V4cGVjdGVkTmV3UmVzb3VyY2VVUkkuZGF0YSgpKTsK
KyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfdXJpKHJlcXVl
c3QpLCA9PSwgd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJpKHJlc291cmNlKSk7CisKKyAgICAg
ICAgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6cmVzb3VyY2VTZW50UmVxdWVzdChyZXNvdXJjZSwg
cmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7CisgICAgfQorCisgICAgdm9pZCByZXNvdXJjZUZh
aWxlZChXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIEdFcnJvciogZXJyb3IpCisgICAgewor
ICAgICAgICBpZiAocmVzb3VyY2UgIT0gbV9yZXNvdXJjZSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJpKHJl
c291cmNlKSwgPT0sIG1fZXhwZWN0ZWRDYW5jZWxsZWRSZXNvdXJjZVVSSS5kYXRhKCkpOworICAg
ICAgICBnX2Fzc2VydF9lcnJvcihlcnJvciwgV0VCS0lUX05FVFdPUktfRVJST1IsIFdFQktJVF9O
RVRXT1JLX0VSUk9SX0NBTkNFTExFRCk7CisKKyAgICAgICAgU2luZ2xlUmVzb3VyY2VMb2FkVGVz
dDo6cmVzb3VyY2VGYWlsZWQocmVzb3VyY2UsIGVycm9yKTsKKyAgICB9CisKKyAgICB2b2lkIHNl
dEV4cGVjdGVkTmV3UmVzb3VyY2VVUkkoY29uc3QgQ1N0cmluZyYgdXJpKQorICAgIHsKKyAgICAg
ICAgbV9leHBlY3RlZE5ld1Jlc291cmNlVVJJID0gdXJpOworICAgIH0KKworICAgIHZvaWQgc2V0
RXhwZWN0ZWRDYW5jZWxsZWRSZXNvdXJjZVVSSShjb25zdCBDU3RyaW5nJiB1cmkpCisgICAgewor
ICAgICAgICBtX2V4cGVjdGVkQ2FuY2VsbGVkUmVzb3VyY2VVUkkgPSB1cmk7CisgICAgfQorCisg
ICAgdm9pZCBzZXRFeHBlY3RlZE5ld1Jlc291cmNlVVJJQWZ0ZXJSZWRpcmVjdGlvbihjb25zdCBD
U3RyaW5nJiB1cmkpCisgICAgeworICAgICAgICBtX2V4cGVjdGVkTmV3UmVzb3VyY2VVUklBZnRl
clJlZGlyZWN0aW9uID0gdXJpOworICAgIH0KKworICAgIENTdHJpbmcgbV9leHBlY3RlZE5ld1Jl
c291cmNlVVJJOworICAgIENTdHJpbmcgbV9leHBlY3RlZENhbmNlbGxlZFJlc291cmNlVVJJOwor
ICAgIENTdHJpbmcgbV9leHBlY3RlZE5ld1Jlc291cmNlVVJJQWZ0ZXJSZWRpcmVjdGlvbjsKK307
CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJSZXNvdXJjZVNlbmRSZXF1ZXN0KFNlbmRSZXF1ZXN0VGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5zZXRFeHBlY3RlZE5ld1Jlc291
cmNlVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9qYXZhc2NyaXB0LmpzIikpOworICAgIHRl
c3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgicmVsYXRpdmUtamF2YXNjcmlwdC5o
dG1sIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZCgp
OworICAgIGdfYXNzZXJ0KHRlc3QtPm1fcmVzb3VyY2UpOworCisgICAgVmVjdG9yPFNpbmdsZVJl
c291cmNlTG9hZFRlc3Q6OkxvYWRFdmVudHM+JiBldmVudHMgPSB0ZXN0LT5tX2xvYWRFdmVudHM7
CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCA1KTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6U3RhcnRlZCk7
CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRl
c3Q6OlNlbnRSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgU2lu
Z2xlUmVzb3VyY2VMb2FkVGVzdDo6UmVjZWl2ZWRSZXNwb25zZSk7CisgICAgZ19hc3NlcnRfY21w
aW50KGV2ZW50c1szXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlJlY2VpdmVkRGF0YSk7
CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1s0XSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRl
c3Q6OkZpbmlzaGVkKTsKKyAgICBldmVudHMuY2xlYXIoKTsKKworICAgIC8vIENhbmNlbCByZXF1
ZXN0LgorICAgIHRlc3QtPnNldEV4cGVjdGVkQ2FuY2VsbGVkUmVzb3VyY2VVUkkoa1NlcnZlci0+
Z2V0VVJJRm9yUGF0aCgiL2NhbmNlbC10aGlzLmpzIikpOworICAgIHRlc3QtPmxvYWRVUkkoa1Nl
cnZlci0+Z2V0VVJJRm9yUGF0aCgiL3Jlc291cmNlLXRvLWNhbmNlbC5odG1sIikuZGF0YSgpKTsK
KyAgICB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0
KHRlc3QtPm1fcmVzb3VyY2UpOworCisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCks
ID09LCAzKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgU2luZ2xlUmVzb3Vy
Y2VMb2FkVGVzdDo6U3RhcnRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0s
IFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OkZhaWxlZCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2
ZW50c1syXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OkZpbmlzaGVkKTsKKyAgICBldmVu
dHMuY2xlYXIoKTsKKworICAgIC8vIFVSSSBjaGFuZ2VkIGFmdGVyIGEgcmVkaXJlY3QuCisgICAg
dGVzdC0+c2V0RXhwZWN0ZWROZXdSZXNvdXJjZVVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIv
cmVkaXJlY3RlZC5qcyIpKTsKKyAgICB0ZXN0LT5zZXRFeHBlY3RlZE5ld1Jlc291cmNlVVJJQWZ0
ZXJSZWRpcmVjdGlvbihrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvamF2YXNjcmlwdC5qcyIpKTsK
KyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoInJlZGlyZWN0ZWQtamF2
YXNjcmlwdC5odG1sIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRG
aW5pc2hlZCgpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fcmVzb3VyY2UpOworCisgICAgZ19hc3Nl
cnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCA2KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZl
bnRzWzBdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6U3RhcnRlZCk7CisgICAgZ19hc3Nl
cnRfY21waW50KGV2ZW50c1sxXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlNlbnRSZXF1
ZXN0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgU2luZ2xlUmVzb3VyY2VM
b2FkVGVzdDo6UmVkaXJlY3RlZCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1szXSwgPT0s
IFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOworICAgIGdfYXNzZXJ0
X2NtcGludChldmVudHNbNF0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpSZWNlaXZlZERh
dGEpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbNV0sID09LCBTaW5nbGVSZXNvdXJjZUxv
YWRUZXN0OjpGaW5pc2hlZCk7CisgICAgZXZlbnRzLmNsZWFyKCk7CisKKyAgICAvLyBDYW5jZWwg
YWZ0ZXIgYSByZWRpcmVjdC4KKyAgICB0ZXN0LT5zZXRFeHBlY3RlZE5ld1Jlc291cmNlVVJJKGtT
ZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9yZWRpcmVjdGVkLXRvLWNhbmNlbC5qcyIpKTsKKyAgICB0
ZXN0LT5zZXRFeHBlY3RlZENhbmNlbGxlZFJlc291cmNlVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBh
dGgoIi9yZWRpcmVjdGVkLXRvLWNhbmNlbC5qcyIpKTsKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2
ZXItPmdldFVSSUZvclBhdGgoIi9yZWRpcmVjdGVkLXRvLWNhbmNlbC5odG1sIikuZGF0YSgpKTsK
KyAgICB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0
KHRlc3QtPm1fcmVzb3VyY2UpOworCisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCks
ID09LCA0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgU2luZ2xlUmVzb3Vy
Y2VMb2FkVGVzdDo6U3RhcnRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0s
IFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlNlbnRSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoZXZlbnRzWzJdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6RmFpbGVkKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoZXZlbnRzWzNdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6Rmlu
aXNoZWQpOworICAgIGV2ZW50cy5jbGVhcigpOworfQorCitzdGF0aWMgdm9pZCBhZGRDYWNoZUhU
VFBIZWFkZXJzVG9SZXNwb25zZShTb3VwTWVzc2FnZSogbWVzc2FnZSkKK3sKKyAgICAvLyBUaGUg
YWN0dWFsIGRhdGUgZG9lc24ndCByZWFsbHkgbWF0dGVyLgorICAgIFNvdXBEYXRlKiBzb3VwRGF0
ZSA9IHNvdXBfZGF0ZV9uZXdfZnJvbV9ub3coMCk7CisgICAgR093blB0cjxjaGFyPiBkYXRlKHNv
dXBfZGF0ZV90b19zdHJpbmcoc291cERhdGUsIFNPVVBfREFURV9IVFRQKSk7CisgICAgc291cF9t
ZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJMYXN0LU1v
ZGlmaWVkIiwgZGF0ZS5nZXQoKSk7CisgICAgc291cF9kYXRlX2ZyZWUoc291cERhdGUpOworICAg
IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAi
Q2FjaGUtY29udHJvbCIsICJwdWJsaWMsIG1heC1hZ2U9MzE1MzYwMDAiKTsKKyAgICBzb3VwRGF0
ZSA9IHNvdXBfZGF0ZV9uZXdfZnJvbV9ub3coMzYwMCk7CisgICAgZGF0ZS5zZXQoc291cF9kYXRl
X3RvX3N0cmluZyhzb3VwRGF0ZSwgU09VUF9EQVRFX0hUVFApKTsKKyAgICBzb3VwX21lc3NhZ2Vf
aGVhZGVyc19hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIkV4cGlyZXMiLCBkYXRl
LmdldCgpKTsKKyAgICBzb3VwX2RhdGVfZnJlZShzb3VwRGF0ZSk7Cit9CisKK3N0YXRpYyB2b2lk
IHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1lc3NhZ2Us
IGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqLCBTb3VwQ2xpZW50Q29udGV4dCosIGdwb2lu
dGVyKQoreworICAgIGlmIChtZXNzYWdlLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7Cisg
ICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9J
TVBMRU1FTlRFRCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzb3VwX21lc3NhZ2Vf
c2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7CisKKyAgICBpZiAoc291cF9tZXNz
YWdlX2hlYWRlcnNfZ2V0X29uZShtZXNzYWdlLT5yZXF1ZXN0X2hlYWRlcnMsICJJZi1Nb2RpZmll
ZC1TaW5jZSIpKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNP
VVBfU1RBVFVTX05PVF9NT0RJRklFRCk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBs
ZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvIikpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX2Jv
ZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywga0lu
ZGV4SHRtbCwgc3RybGVuKGtJbmRleEh0bWwpKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFs
KHBhdGgsICIvamF2YXNjcmlwdC5odG1sIikpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIq
IGphdmFzY3JpcHRIdG1sID0gIjxodG1sPjxoZWFkPjxzY3JpcHQgbGFuZ3VhZ2U9J2phdmFzY3Jp
cHQnIHNyYz0nL2phdmFzY3JpcHQuanMnPjwvc2NyaXB0PjwvaGVhZD48Ym9keT48L2JvZHk+PC9o
dG1sPiI7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25z
ZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGphdmFzY3JpcHRIdG1sLCBzdHJsZW4oamF2YXNj
cmlwdEh0bWwpKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvaW1hZ2UuaHRt
bCIpKSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBpbWFnZUhUTUwgPSAiPGh0bWw+PGJv
ZHk+PGltZyBzcmM9Jy9ibGFuay5pY28nPjwvaW1nPjwvYm9keT48L2h0bWw+IjsKKyAgICAgICAg
c291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVN
T1JZX1NUQVRJQywgaW1hZ2VIVE1MLCBzdHJsZW4oaW1hZ2VIVE1MKSk7CisgICAgfSBlbHNlIGlm
IChnX3N0cl9lcXVhbChwYXRoLCAiL3JlZGlyZWN0ZWQtY3NzLmh0bWwiKSkgeworICAgICAgICBz
dGF0aWMgY29uc3QgY2hhciogcmVkaXJlY3RlZENTU0h0bWwgPSAiPGh0bWw+PGhlYWQ+PGxpbmsg
cmVsPSdzdHlsZXNoZWV0JyBocmVmPScvcmVkaXJlY3RlZC5jc3MnIHR5cGU9J3RleHQvY3NzJz48
L2hlYWQ+PGJvZHk+PC9odG1sPiI7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZCht
ZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIHJlZGlyZWN0ZWRDU1NI
dG1sLCBzdHJsZW4ocmVkaXJlY3RlZENTU0h0bWwpKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2Vx
dWFsKHBhdGgsICIvaW52YWxpZC1jc3MuaHRtbCIpKSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBpbnZhbGlkQ1NTSHRtbCA9ICI8aHRtbD48aGVhZD48bGluayByZWw9J3N0eWxlc2hlZXQn
IGhyZWY9Jy9pbnZhbGlkLmNzcycgdHlwZT0ndGV4dC9jc3MnPjwvaGVhZD48Ym9keT48L2h0bWw+
IjsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2Jv
ZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgaW52YWxpZENTU0h0bWwsIHN0cmxlbihpbnZhbGlkQ1NT
SHRtbCkpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9zaW1wbGUtc3R5bGUt
Y3NzLmh0bWwiKSkgeworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogc2ltcGxlU3R5bGVDU1NI
dG1sID0gIjxodG1sPjxoZWFkPjxsaW5rIHJlbD0nc3R5bGVzaGVldCcgaHJlZj0nL3NpbXBsZS1z
dHlsZS5jc3MnIHR5cGU9J3RleHQvY3NzJz48L2hlYWQ+PGJvZHk+PC9odG1sPiI7CisgICAgICAg
IHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01F
TU9SWV9TVEFUSUMsIHNpbXBsZVN0eWxlQ1NTSHRtbCwgc3RybGVuKHNpbXBsZVN0eWxlQ1NTSHRt
bCkpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9zdHlsZS5jc3MiKSkgewor
ICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwg
U09VUF9NRU1PUllfU1RBVElDLCBrU3R5bGVDU1MsIHN0cmxlbihrU3R5bGVDU1MpKTsKKyAgICAg
ICAgYWRkQ2FjaGVIVFRQSGVhZGVyc1RvUmVzcG9uc2UobWVzc2FnZSk7CisgICAgICAgIHNvdXBf
bWVzc2FnZV9oZWFkZXJzX2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiQ29udGVu
dC1UeXBlIiwgInRleHQvY3NzIik7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAi
L2phdmFzY3JpcHQuanMiKSkgeworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVz
c2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBrSmF2YXNjcmlwdCwgc3Ry
bGVuKGtKYXZhc2NyaXB0KSk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZCht
ZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiQ29udGVudC1UeXBlIiwgInRleHQvamF2YXNjcmlw
dCIpOworICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobWVzc2FnZS0+cmVzcG9u
c2VfaGVhZGVycywgIkNvbnRlbnQtRGlzcG9zaXRpb24iLCAiZmlsZW5hbWU9SmF2YVNjcmlwdC5q
cyIpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9yZWxhdGl2ZS1qYXZhc2Ny
aXB0Lmh0bWwiKSkgeworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogamF2YXNjcmlwdFJlbGF0
aXZlSFRNTCA9ICI8aHRtbD48aGVhZD48c2NyaXB0IGxhbmd1YWdlPSdqYXZhc2NyaXB0JyBzcmM9
J3JlbW92ZS10aGlzL2phdmFzY3JpcHQuanMnPjwvc2NyaXB0PjwvaGVhZD48Ym9keT48L2JvZHk+
PC9odG1sPiI7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNw
b25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGphdmFzY3JpcHRSZWxhdGl2ZUhUTUwsIHN0
cmxlbihqYXZhc2NyaXB0UmVsYXRpdmVIVE1MKSk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVh
bChwYXRoLCAiL3Jlc291cmNlLXRvLWNhbmNlbC5odG1sIikpIHsKKyAgICAgICAgc3RhdGljIGNv
bnN0IGNoYXIqIHJlc291cmNlVG9DYW5jZWxIVE1MID0gIjxodG1sPjxoZWFkPjxzY3JpcHQgbGFu
Z3VhZ2U9J2phdmFzY3JpcHQnIHNyYz0nY2FuY2VsLXRoaXMuanMnPjwvc2NyaXB0PjwvaGVhZD48
Ym9keT48L2JvZHk+PC9odG1sPiI7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZCht
ZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIHJlc291cmNlVG9DYW5j
ZWxIVE1MLCBzdHJsZW4ocmVzb3VyY2VUb0NhbmNlbEhUTUwpKTsKKyAgICB9IGVsc2UgaWYgKGdf
c3RyX2VxdWFsKHBhdGgsICIvcmVkaXJlY3RlZC1qYXZhc2NyaXB0Lmh0bWwiKSkgeworICAgICAg
ICBzdGF0aWMgY29uc3QgY2hhciogamF2YXNjcmlwdFJlbGF0aXZlSFRNTCA9ICI8aHRtbD48aGVh
ZD48c2NyaXB0IGxhbmd1YWdlPSdqYXZhc2NyaXB0JyBzcmM9Jy9yZWRpcmVjdGVkLmpzJz48L3Nj
cmlwdD48L2hlYWQ+PGJvZHk+PC9ib2R5PjwvaHRtbD4iOworICAgICAgICBzb3VwX21lc3NhZ2Vf
Ym9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBq
YXZhc2NyaXB0UmVsYXRpdmVIVE1MLCBzdHJsZW4oamF2YXNjcmlwdFJlbGF0aXZlSFRNTCkpOwor
ICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9yZWRpcmVjdGVkLXRvLWNhbmNlbC5o
dG1sIikpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGphdmFzY3JpcHRSZWxhdGl2ZUhU
TUwgPSAiPGh0bWw+PGhlYWQ+PHNjcmlwdCBsYW5ndWFnZT0namF2YXNjcmlwdCcgc3JjPScvcmVk
aXJlY3RlZC10by1jYW5jZWwuanMnPjwvc2NyaXB0PjwvaGVhZD48Ym9keT48L2JvZHk+PC9odG1s
PiI7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9i
b2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGphdmFzY3JpcHRSZWxhdGl2ZUhUTUwsIHN0cmxlbihq
YXZhc2NyaXB0UmVsYXRpdmVIVE1MKSk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRo
LCAiL2JsYW5rLmljbyIpKSB7CisgICAgICAgIEdPd25QdHI8Y2hhcj4gZmlsZVBhdGgoZ19idWls
ZF9maWxlbmFtZShUZXN0OjpnZXRXZWJLaXQxVGVzdFJlc291Y2VzRGlyKCkuZGF0YSgpLCBwYXRo
LCBOVUxMKSk7CisgICAgICAgIGNoYXIqIGNvbnRlbnRzOworICAgICAgICBnc2l6ZSBjb250ZW50
c0xlbmd0aDsKKyAgICAgICAgZ19maWxlX2dldF9jb250ZW50cyhmaWxlUGF0aC5nZXQoKSwgJmNv
bnRlbnRzLCAmY29udGVudHNMZW5ndGgsIDApOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9h
cHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgY29udGVudHMs
IGNvbnRlbnRzTGVuZ3RoKTsKKyAgICAgICAgYWRkQ2FjaGVIVFRQSGVhZGVyc1RvUmVzcG9uc2Uo
bWVzc2FnZSk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChtZXNzYWdlLT5y
ZXNwb25zZV9oZWFkZXJzLCAiQ29udGVudC1UeXBlIiwgImltYWdlL3ZuZC5taWNyb3NvZnQuaWNv
biIpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9zaW1wbGUtc3R5bGUuY3Nz
IikpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHNpbXBsZUNTUyA9CisgICAgICAgICAg
ICAiYm9keSB7IgorICAgICAgICAgICAgIiAgICBtYXJnaW46IDBweDsiCisgICAgICAgICAgICAi
ICAgIHBhZGRpbmc6IDBweDsiCisgICAgICAgICAgICAifSI7CisgICAgICAgIHNvdXBfbWVzc2Fn
ZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMs
IHNpbXBsZUNTUywgc3RybGVuKHNpbXBsZUNTUykpOworICAgICAgICBzb3VwX21lc3NhZ2VfaGVh
ZGVyc19hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIkNvbnRlbnQtVHlwZSIsICJ0
ZXh0L2NzcyIpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9yZWRpcmVjdGVk
LmNzcyIpKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBf
U1RBVFVTX01PVkVEX1BFUk1BTkVOVExZKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNf
YXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJMb2NhdGlvbiIsICIvc2ltcGxlLXN0
eWxlLmNzcyIpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9yZWRpcmVjdGVk
LmpzIikpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9T
VEFUVVNfTU9WRURfUEVSTUFORU5UTFkpOworICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19h
cHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIkxvY2F0aW9uIiwgIi9yZW1vdmUtdGhp
cy9qYXZhc2NyaXB0LmpzIik7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3Jl
ZGlyZWN0ZWQtdG8tY2FuY2VsLmpzIikpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0
dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTU9WRURfUEVSTUFORU5UTFkpOworICAgICAgICBzb3Vw
X21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIkxvY2F0
aW9uIiwgIi9jYW5jZWwtdGhpcy5qcyIpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0
aCwgIi9pbnZhbGlkLmNzcyIpKQorICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNz
YWdlLCBTT1VQX1NUQVRVU19DQU5UX0NPTk5FQ1QpOworICAgIGVsc2UKKyAgICAgICAgc291cF9t
ZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0ZPVU5EKTsKKyAgICBz
b3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKK30KKwor
dm9pZCBiZWZvcmVBbGwoKQoreworICAgIGtTZXJ2ZXIgPSBuZXcgV2ViS2l0VGVzdFNlcnZlcigp
OworICAgIGtTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFjayk7CisKKyAgICB3ZWJraXRfd2ViX2Nv
bnRleHRfc2V0X3dlYl9leHRlbnNpb25zX2RpcmVjdG9yeSh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0
X2RlZmF1bHQoKSwgV0VCS0lUX1RFU1RfV0VCX0VYVEVOU0lPTlNfRElSKTsKKworICAgIFJlc291
cmNlc1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJyZXNvdXJjZXMiLCB0ZXN0V2ViVmlld1Jl
c291cmNlcyk7CisgICAgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6YWRkKCJXZWJLaXRXZWJSZXNv
dXJjZSIsICJsb2FkaW5nIiwgdGVzdFdlYlJlc291cmNlTG9hZGluZyk7CisgICAgU2luZ2xlUmVz
b3VyY2VMb2FkVGVzdDo6YWRkKCJXZWJLaXRXZWJSZXNvdXJjZSIsICJyZXNwb25zZSIsIHRlc3RX
ZWJSZXNvdXJjZVJlc3BvbnNlKTsKKyAgICBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjphZGQoIldl
YktpdFdlYlJlc291cmNlIiwgIm1pbWUtdHlwZSIsIHRlc3RXZWJSZXNvdXJjZU1pbWVUeXBlKTsK
KyAgICBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjphZGQoIldlYktpdFdlYlJlc291cmNlIiwgInN1
Z2dlc3RlZC1maWxlbmFtZSIsIHRlc3RXZWJSZXNvdXJjZVN1Z2dlc3RlZEZpbGVuYW1lKTsKKyAg
ICBSZXNvdXJjZVVSSVRyYWNraW5nVGVzdDo6YWRkKCJXZWJLaXRXZWJSZXNvdXJjZSIsICJhY3Rp
dmUtdXJpIiwgdGVzdFdlYlJlc291cmNlQWN0aXZlVVJJKTsKKyAgICBSZXNvdXJjZXNUZXN0Ojph
ZGQoIldlYktpdFdlYlJlc291cmNlIiwgImdldC1kYXRhIiwgdGVzdFdlYlJlc291cmNlR2V0RGF0
YSk7CisgICAgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImhp
c3RvcnktY2FjaGUiLCB0ZXN0V2ViVmlld1Jlc291cmNlc0hpc3RvcnlDYWNoZSk7CisgICAgU2Vu
ZFJlcXVlc3RUZXN0OjphZGQoIldlYktpdFdlYlBhZ2UiLCAic2VuZC1yZXF1ZXN0IiwgdGVzdFdl
YlJlc291cmNlU2VuZFJlcXVlc3QpOworfQorCit2b2lkIGFmdGVyQWxsKCkKK3sKKyAgICBkZWxl
dGUga1NlcnZlcjsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Mkd0ay9UZXN0U1NMLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0
ay9UZXN0U1NMLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzE4MGM1
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3Rr
L1Rlc3RTU0wuY3BwCkBAIC0wLDAgKzEsMjkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkxvYWRUcmFja2lu
Z1Rlc3QuaCIKKyNpbmNsdWRlICJXZWJLaXRUZXN0U2VydmVyLmgiCisjaW5jbHVkZSA8Z3RrL2d0
ay5oPgorCitzdGF0aWMgV2ViS2l0VGVzdFNlcnZlcioga0h0dHBzU2VydmVyOworc3RhdGljIFdl
YktpdFRlc3RTZXJ2ZXIqIGtIdHRwU2VydmVyOworCitzdGF0aWMgY29uc3QgY2hhciogaW5kZXhI
VE1MID0gIjxodG1sPjxib2R5PlRlc3RpbmcgV2ViS2l0MkdUSysgU1NMPC9ib2R5PjwvaHRtbGw+
IjsKK3N0YXRpYyBjb25zdCBjaGFyKiBpbnNlY3VyZUNvbnRlbnRIVE1MID0gIjxodG1sPjxzY3Jp
cHQgc3JjPVwiJXNcIj48L3NjcmlwdD48Ym9keT48cD5UZXh0ICsgaW1hZ2UgPGltZyBzcmM9XCIl
c1wiIGFsaWduPVwicmlnaHRcIi8+PC9wPjwvYm9keT48L2h0bWw+IjsKK3N0YXRpYyBjb25zdCBj
aGFyIFRMU0V4cGVjdGVkU3VjY2Vzc1RpdGxlW10gPSAiV2ViS2l0Mkd0aysgVExTIHBlcm1pc3Np
b24gdGVzdCI7CitzdGF0aWMgY29uc3QgY2hhciBUTFNTdWNjZXNzSFRNTFN0cmluZ1tdID0gIjxo
dG1sPjxoZWFkPjx0aXRsZT5XZWJLaXQyR3RrKyBUTFMgcGVybWlzc2lvbiB0ZXN0PC90aXRsZT48
L2hlYWQ+PGJvZHk+PC9ib2R5PjwvaHRtbD4iOworCitjbGFzcyBTU0xUZXN0OiBwdWJsaWMgTG9h
ZFRyYWNraW5nVGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShTU0xU
ZXN0KTsKKworICAgIFNTTFRlc3QoKQorICAgICAgICA6IG1fdGxzRXJyb3JzKHN0YXRpY19jYXN0
PEdUbHNDZXJ0aWZpY2F0ZUZsYWdzPigwKSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2
b2lkIHByb3Zpc2lvbmFsTG9hZEZhaWxlZChjb25zdCBnY2hhciogZmFpbGluZ1VSSSwgR0Vycm9y
KiBlcnJvcikKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0X2Vycm9yKGVycm9yLCBTT1VQX0hUVFBf
RVJST1IsIFNPVVBfU1RBVFVTX1NTTF9GQUlMRUQpOworICAgICAgICBMb2FkVHJhY2tpbmdUZXN0
Ojpwcm92aXNpb25hbExvYWRGYWlsZWQoZmFpbGluZ1VSSSwgZXJyb3IpOworICAgIH0KKworICAg
IHZpcnR1YWwgdm9pZCBsb2FkQ29tbWl0dGVkKCkKKyAgICB7CisgICAgICAgIEdUbHNDZXJ0aWZp
Y2F0ZSogY2VydGlmaWNhdGUgPSAwOworICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3Rsc19p
bmZvKG1fd2ViVmlldywgJmNlcnRpZmljYXRlLCAmbV90bHNFcnJvcnMpOworICAgICAgICBtX2Nl
cnRpZmljYXRlID0gY2VydGlmaWNhdGU7CisgICAgICAgIExvYWRUcmFja2luZ1Rlc3Q6OmxvYWRD
b21taXR0ZWQoKTsKKyAgICB9CisKKyAgICB2b2lkIHdhaXRVbnRpbExvYWRGaW5pc2hlZCgpCisg
ICAgeworICAgICAgICBtX2NlcnRpZmljYXRlID0gMDsKKyAgICAgICAgbV90bHNFcnJvcnMgPSBz
dGF0aWNfY2FzdDxHVGxzQ2VydGlmaWNhdGVGbGFncz4oMCk7CisgICAgICAgIExvYWRUcmFja2lu
Z1Rlc3Q6OndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIH0KKworICAgIEdSZWZQdHI8R1Rs
c0NlcnRpZmljYXRlPiBtX2NlcnRpZmljYXRlOworICAgIEdUbHNDZXJ0aWZpY2F0ZUZsYWdzIG1f
dGxzRXJyb3JzOworfTsKKworc3RhdGljIHZvaWQgdGVzdFNTTChTU0xUZXN0KiB0ZXN0LCBnY29u
c3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRVUkkoa0h0dHBzU2VydmVyLT5nZXRVUklGb3JQ
YXRoKCIvIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAg
ICBnX2Fzc2VydCh0ZXN0LT5tX2NlcnRpZmljYXRlKTsKKyAgICAvLyBXZSBhbHdheXMgZXhwZWN0
IGVycm9ycyBiZWNhdXNlIHdlIGFyZSB1c2luZyBhIHNlbGYtc2lnbmVkIGNlcnRpZmljYXRlLAor
ICAgIC8vIGJ1dCBvbmx5IEdfVExTX0NFUlRJRklDQVRFX1VOS05PV05fQ0EgZmxhZ3Mgc2hvdWxk
IGJlIHByZXNlbnQuCisgICAgZ19hc3NlcnQodGVzdC0+bV90bHNFcnJvcnMpOworICAgIGdfYXNz
ZXJ0X2NtcHVpbnQodGVzdC0+bV90bHNFcnJvcnMsID09LCBHX1RMU19DRVJUSUZJQ0FURV9VTktO
T1dOX0NBKTsKKworICAgIC8vIE5vbiBIVFRQUyBsb2FkcyBzaG91bGRuJ3QgaGF2ZSBhIGNlcnRp
ZmljYXRlIG5vciBlcnJvcnMuCisgICAgdGVzdC0+bG9hZEh0bWwoaW5kZXhIVE1MLCAwKTsKKyAg
ICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydCghdGVzdC0+bV9j
ZXJ0aWZpY2F0ZSk7CisgICAgZ19hc3NlcnQoIXRlc3QtPm1fdGxzRXJyb3JzKTsKK30KKworY2xh
c3MgSW5zZWN1cmVDb250ZW50VGVzdDogcHVibGljIFdlYlZpZXdUZXN0IHsKK3B1YmxpYzoKKyAg
ICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKEluc2VjdXJlQ29udGVudFRlc3QpOworCisgICAgSW5z
ZWN1cmVDb250ZW50VGVzdCgpCisgICAgICAgIDogbV9pbnNlY3VyZUNvbnRlbnRSdW4oZmFsc2Up
CisgICAgICAgICwgbV9pbnNlY3VyZUNvbnRlbnREaXNwbGF5ZWQoZmFsc2UpCisgICAgeworICAg
ICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImluc2VjdXJlLWNvbnRlbnQtZGV0ZWN0
ZWQiLCBHX0NBTExCQUNLKGluc2VjdXJlQ29udGVudERldGVjdGVkQ2FsbGJhY2spLCB0aGlzKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBpbnNlY3VyZUNvbnRlbnREZXRlY3RlZENhbGxiYWNr
KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdEluc2VjdXJlQ29udGVudEV2ZW50IGV2ZW50
LCBJbnNlY3VyZUNvbnRlbnRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQod2Vi
VmlldyA9PSB0ZXN0LT5tX3dlYlZpZXcpOworCisgICAgICAgIGlmIChldmVudCA9PSBXRUJLSVRf
SU5TRUNVUkVfQ09OVEVOVF9SVU4pCisgICAgICAgICAgICB0ZXN0LT5tX2luc2VjdXJlQ29udGVu
dFJ1biA9IHRydWU7CisKKyAgICAgICAgaWYgKGV2ZW50ID09IFdFQktJVF9JTlNFQ1VSRV9DT05U
RU5UX0RJU1BMQVlFRCkKKyAgICAgICAgICAgIHRlc3QtPm1faW5zZWN1cmVDb250ZW50RGlzcGxh
eWVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIG1faW5zZWN1cmVDb250ZW50UnVuOworICAg
IGJvb2wgbV9pbnNlY3VyZUNvbnRlbnREaXNwbGF5ZWQ7Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0
SW5zZWN1cmVDb250ZW50KEluc2VjdXJlQ29udGVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIp
Cit7CisgICAgdGVzdC0+bG9hZFVSSShrSHR0cHNTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbnNl
Y3VyZS1jb250ZW50LyIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVk
KCk7CisKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX2luc2VjdXJlQ29udGVudFJ1bik7CisgICAgZ19h
c3NlcnQodGVzdC0+bV9pbnNlY3VyZUNvbnRlbnREaXNwbGF5ZWQpOworfQorCitzdGF0aWMgdm9p
ZCB0ZXN0VExTRXJyb3JzUG9saWN5KFNTTFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7Cisg
ICAgV2ViS2l0V2ViQ29udGV4dCogY29udGV4dCA9IHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4
dCh0ZXN0LT5tX3dlYlZpZXcpOworICAgIC8vIFRMUyBlcnJvcnMgYXJlIGlnbm9yZWQgYnkgZGVm
YXVsdC4KKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3Rsc19lcnJvcnNfcG9s
aWN5KGNvbnRleHQpID09IFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9JR05PUkUpOworICAgIHRl
c3QtPmxvYWRVUkkoa0h0dHBzU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIikuZGF0YSgpKTsKKyAg
ICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydCghdGVzdC0+bV9s
b2FkRmFpbGVkKTsKKworICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfdGxzX2Vycm9yc19wb2xp
Y3koY29udGV4dCwgV0VCS0lUX1RMU19FUlJPUlNfUE9MSUNZX0ZBSUwpOworICAgIHRlc3QtPmxv
YWRVUkkoa0h0dHBzU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIikuZGF0YSgpKTsKKyAgICB0ZXN0
LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX2xvYWRGYWls
ZWQpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fbG9hZEV2ZW50cy5jb250YWlucyhMb2FkVHJhY2tp
bmdUZXN0OjpQcm92aXNpb25hbExvYWRGYWlsZWQpKTsKKyAgICBnX2Fzc2VydCghdGVzdC0+bV9s
b2FkRXZlbnRzLmNvbnRhaW5zKExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRDb21taXR0ZWQpKTsKK30K
KworY2xhc3MgVExTRXJyb3JzVGVzdDogcHVibGljIFNTTFRlc3QgeworcHVibGljOgorICAgIE1B
S0VfR0xJQl9URVNUX0ZJWFRVUkUoVExTRXJyb3JzVGVzdCk7CisKKyAgICBUTFNFcnJvcnNUZXN0
KCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAibG9hZC1mYWls
ZWQtd2l0aC10bHMtZXJyb3JzIiwgR19DQUxMQkFDSyhydW5Mb2FkRmFpbGVkV2l0aFRMU0Vycm9y
c0NhbGxiYWNrKSwgdGhpcyk7CisgICAgfQorCisgICAgflRMU0Vycm9yc1Rlc3QoKQorICAgIHsK
KyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fd2ViVmlldywg
R19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7CisgICAgICAgIGlmIChtX2Nl
cnRpZmljYXRlSW5mbykKKyAgICAgICAgICAgIHdlYmtpdF9jZXJ0aWZpY2F0ZV9pbmZvX2ZyZWUo
bV9jZXJ0aWZpY2F0ZUluZm8pOworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBydW5Mb2Fk
RmFpbGVkV2l0aFRMU0Vycm9yc0NhbGxiYWNrKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRDZXJ0aWZp
Y2F0ZUluZm8qIGluZm8sIGNvbnN0IGNoYXIqIGhvc3QsIFRMU0Vycm9yc1Rlc3QqIHRlc3QpCisg
ICAgeworICAgICAgICB0ZXN0LT5ydW5Mb2FkRmFpbGVkV2l0aFRMU0Vycm9ycyhpbmZvLCBob3N0
KTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgdm9pZCBydW5Mb2FkRmFpbGVk
V2l0aFRMU0Vycm9ycyhXZWJLaXRDZXJ0aWZpY2F0ZUluZm8qIGluZm8sIGNvbnN0IGNoYXIqIGhv
c3QpCisgICAgeworICAgICAgICBpZiAobV9jZXJ0aWZpY2F0ZUluZm8pCisgICAgICAgICAgICB3
ZWJraXRfY2VydGlmaWNhdGVfaW5mb19mcmVlKG1fY2VydGlmaWNhdGVJbmZvKTsKKyAgICAgICAg
bV9jZXJ0aWZpY2F0ZUluZm8gPSB3ZWJraXRfY2VydGlmaWNhdGVfaW5mb19jb3B5KGluZm8pOwor
ICAgICAgICBtX2hvc3Quc2V0KGdfc3RyZHVwKGhvc3QpKTsKKyAgICAgICAgZ19tYWluX2xvb3Bf
cXVpdChtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICB2b2lkIHdhaXRVbnRpbExvYWRGYWlsZWRX
aXRoVExTRXJyb3JzKCkKKyAgICB7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29w
KTsKKyAgICB9CisKKyAgICBXZWJLaXRDZXJ0aWZpY2F0ZUluZm8qIGNlcnRpZmljYXRlSW5mbygp
CisgICAgeworICAgICAgICByZXR1cm4gbV9jZXJ0aWZpY2F0ZUluZm87CisgICAgfQorCisgICAg
Y29uc3QgY2hhciogaG9zdCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9ob3N0LmdldCgpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBXZWJLaXRDZXJ0aWZpY2F0ZUluZm8qIG1fY2VydGlmaWNh
dGVJbmZvOworICAgIEdPd25QdHI8Y2hhcj4gbV9ob3N0OworfTsKKworc3RhdGljIHZvaWQgdGVz
dExvYWRGYWlsZWRXaXRoVExTRXJyb3JzKFRMU0Vycm9yc1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCit7CisgICAgV2ViS2l0V2ViQ29udGV4dCogY29udGV4dCA9IHdlYmtpdF93ZWJfdmlld19n
ZXRfY29udGV4dCh0ZXN0LT5tX3dlYlZpZXcpOworICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRf
dGxzX2Vycm9yc19wb2xpY3koY29udGV4dCwgV0VCS0lUX1RMU19FUlJPUlNfUE9MSUNZX0ZBSUwp
OworCisgICAgLy8gVGhlIGxvYWQtZmFpbGVkLXdpdGgtdGxzLWVycm9ycyBzaWduYWwgc2hvdWxk
IGJlIGVtaXR0ZWQgd2hlbiB0aGVyZSBpcyBhIFRMUyBmYWlsdXJlLgorICAgIHRlc3QtPmxvYWRV
Ukkoa0h0dHBzU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvdGVzdC10bHMvIikuZGF0YSgpKTsKKyAg
ICB0ZXN0LT53YWl0VW50aWxMb2FkRmFpbGVkV2l0aFRMU0Vycm9ycygpOworICAgIC8vIFRlc3Qg
dGhlIFdlYktpdENlcnRpZmljYXRlSW5mbyBBUEkuCisgICAgZ19hc3NlcnQoR19JU19UTFNfQ0VS
VElGSUNBVEUod2Via2l0X2NlcnRpZmljYXRlX2luZm9fZ2V0X3Rsc19jZXJ0aWZpY2F0ZSh0ZXN0
LT5jZXJ0aWZpY2F0ZUluZm8oKSkpKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9jZXJ0
aWZpY2F0ZV9pbmZvX2dldF90bHNfZXJyb3JzKHRlc3QtPmNlcnRpZmljYXRlSW5mbygpKSwgPT0s
IEdfVExTX0NFUlRJRklDQVRFX1VOS05PV05fQ0EpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXN0
LT5ob3N0KCksID09LCBzb3VwX3VyaV9nZXRfaG9zdChrSHR0cHNTZXJ2ZXItPmJhc2VVUkkoKSkp
OworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMF0sID09LCBMb2FkVHJh
Y2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
dGVzdC0+bV9sb2FkRXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVk
KTsKKworICAgIC8vIFRlc3QgYWxsb3dpbmcgYW4gZXhjZXB0aW9uIGZvciB0aGlzIGNlcnRpZmlj
YXRlIG9uIHRoaXMgaG9zdC4KKyAgICB3ZWJraXRfd2ViX2NvbnRleHRfYWxsb3dfdGxzX2NlcnRp
ZmljYXRlX2Zvcl9ob3N0KGNvbnRleHQsIHRlc3QtPmNlcnRpZmljYXRlSW5mbygpLCB0ZXN0LT5o
b3N0KCkpOworICAgIC8vIFRoZSBwYWdlIHNob3VsZCBub3cgbG9hZCB3aXRob3V0IGVycm9ycy4K
KyAgICB0ZXN0LT5sb2FkVVJJKGtIdHRwc1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3Rlc3QtdGxz
LyIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBn
X2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzBdLCA9PSwgTG9hZFRyYWNraW5nVGVz
dDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1f
bG9hZEV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRDb21taXR0ZWQpOworICAg
IGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMl0sID09LCBMb2FkVHJhY2tpbmdU
ZXN0OjpMb2FkRmluaXNoZWQpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdf
Z2V0X3RpdGxlKHRlc3QtPm1fd2ViVmlldyksID09LCBUTFNFeHBlY3RlZFN1Y2Nlc3NUaXRsZSk7
Cit9CisKKworc3RhdGljIHZvaWQgaHR0cHNTZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBzZXJ2
ZXIsIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiwg
U291cENsaWVudENvbnRleHQqLCBncG9pbnRlcikKK3sKKyAgICBpZiAobWVzc2FnZS0+bWV0aG9k
ICE9IFNPVVBfTUVUSE9EX0dFVCkgeworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyht
ZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvIikpIHsKKyAgICAgICAgc291cF9t
ZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOworICAgICAgICBzb3Vw
X21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllf
U1RBVElDLCBpbmRleEhUTUwsIHN0cmxlbihpbmRleEhUTUwpKTsKKyAgICAgICAgc291cF9tZXNz
YWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7CisgICAgfSBlbHNlIGlm
IChnX3N0cl9lcXVhbChwYXRoLCAiL2luc2VjdXJlLWNvbnRlbnQvIikpIHsKKyAgICAgICAgR093
blB0cjxjaGFyPiByZXNwb25zZUhUTUwoZ19zdHJkdXBfcHJpbnRmKGluc2VjdXJlQ29udGVudEhU
TUwsIGtIdHRwU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvdGVzdC1zY3JpcHQiKS5kYXRhKCksIGtI
dHRwU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvdGVzdC1pbWFnZSIpLmRhdGEoKSkpOworICAgICAg
ICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9N
RU1PUllfQ09QWSwgcmVzcG9uc2VIVE1MLmdldCgpLCBzdHJsZW4ocmVzcG9uc2VIVE1MLmdldCgp
KSk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVT
X09LKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9u
c2VfYm9keSk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3Rlc3QtdGxzLyIp
KSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVT
X09LKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNl
X2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgVExTU3VjY2Vzc0hUTUxTdHJpbmcsIHN0cmxlbihU
TFNTdWNjZXNzSFRNTFN0cmluZykpOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0
ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKKyAgICB9IGVsc2UKKyAgICAgICAgc291cF9tZXNz
YWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0ZPVU5EKTsKK30KKworc3Rh
dGljIHZvaWQgaHR0cFNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3Nh
Z2UqIG1lc3NhZ2UsIGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqLCBTb3VwQ2xpZW50Q29u
dGV4dCosIGdwb2ludGVyKQoreworICAgIGlmIChtZXNzYWdlLT5tZXRob2QgIT0gU09VUF9NRVRI
T0RfR0VUKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBf
U1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoZ19zdHJfZXF1YWwocGF0aCwgIi90ZXN0LXNjcmlwdCIpKSB7CisgICAgICAgIEdPd25QdHI8
Y2hhcj4gcGF0aFRvRmlsZShnX2J1aWxkX2ZpbGVuYW1lKFRlc3Q6OmdldFJlc291cmNlc0Rpcigp
LmRhdGEoKSwgImxpbmstdGl0bGUuanMiLCBOVUxMKSk7CisgICAgICAgIGNoYXIqIGNvbnRlbnRz
OworICAgICAgICBnc2l6ZSBsZW5ndGg7CisgICAgICAgIGdfZmlsZV9nZXRfY29udGVudHMocGF0
aFRvRmlsZS5nZXQoKSwgJmNvbnRlbnRzLCAmbGVuZ3RoLCAwKTsKKworICAgICAgICBzb3VwX21l
c3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFL
RSwgY29udGVudHMsIGxlbmd0aCk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1l
c3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxl
dGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChw
YXRoLCAiL3Rlc3QtaW1hZ2UiKSkgeworICAgICAgICBHT3duUHRyPGNoYXI+IHBhdGhUb0ZpbGUo
Z19idWlsZF9maWxlbmFtZShUZXN0OjpnZXRXZWJLaXQxVGVzdFJlc291Y2VzRGlyKCkuZGF0YSgp
LCAiYmxhbmsuaWNvIiwgTlVMTCkpOworICAgICAgICBjaGFyKiBjb250ZW50czsKKyAgICAgICAg
Z3NpemUgbGVuZ3RoOworICAgICAgICBnX2ZpbGVfZ2V0X2NvbnRlbnRzKHBhdGhUb0ZpbGUuZ2V0
KCksICZjb250ZW50cywgJmxlbmd0aCwgMCk7CisKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlf
YXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGNvbnRlbnRz
LCBsZW5ndGgpOworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQ
X1NUQVRVU19PSyk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2Ut
PnJlc3BvbnNlX2JvZHkpOworICAgIH0gZWxzZQorICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0
YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfRk9VTkQpOworfQorCit2b2lkIGJlZm9yZUFs
bCgpCit7CisgICAga0h0dHBzU2VydmVyID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIoV2ViS2l0VGVz
dFNlcnZlcjo6U2VydmVySFRUUFMpOworICAgIGtIdHRwc1NlcnZlci0+cnVuKGh0dHBzU2VydmVy
Q2FsbGJhY2spOworCisgICAga0h0dHBTZXJ2ZXIgPSBuZXcgV2ViS2l0VGVzdFNlcnZlcihXZWJL
aXRUZXN0U2VydmVyOjpTZXJ2ZXJIVFRQKTsKKyAgICBrSHR0cFNlcnZlci0+cnVuKGh0dHBTZXJ2
ZXJDYWxsYmFjayk7CisKKyAgICBTU0xUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAic3NsIiwg
dGVzdFNTTCk7CisgICAgSW5zZWN1cmVDb250ZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3Iiwg
Imluc2VjdXJlLWNvbnRlbnQiLCB0ZXN0SW5zZWN1cmVDb250ZW50KTsKKyAgICAvLyBJbiB0aGlz
IGNhc2UgdGhlIG9yZGVyIG9mIHRoZSB0ZXN0cyBkb2VzIG1hdHRlciBiZWNhdXNlIHRscy1lcnJv
cnMtcG9saWN5IHRlc3RzIHRoZSBkZWZhdWx0IHBvbGljeSwKKyAgICAvLyBhbmQgZXhwZWN0cyB0
aGF0IG5vIGV4Y2VwdGlvbiB3aWxsIGhhdmUgYmVlbiBhZGRlZCBmb3IgdGhpcyBjZXJ0aWZpY2F0
ZSBhbmQgaG9zdCBwYWlyIGFzIGlzCisgICAgLy8gZG9uZSBpbiB0aGUgdGxzLXBlcm1pc3Npb24t
cmVxdWVzdCB0ZXN0LgorICAgIFNTTFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJ0bHMtZXJy
b3JzLXBvbGljeSIsIHRlc3RUTFNFcnJvcnNQb2xpY3kpOworICAgIFRMU0Vycm9yc1Rlc3Q6OmFk
ZCgiV2ViS2l0V2ViVmlldyIsICJsb2FkLWZhaWxlZC13aXRoLXRscy1lcnJvcnMiLCB0ZXN0TG9h
ZEZhaWxlZFdpdGhUTFNFcnJvcnMpOworfQorCit2b2lkIGFmdGVyQWxsKCkKK3sKKyAgICBkZWxl
dGUga0h0dHBzU2VydmVyOworICAgIGRlbGV0ZSBrSHR0cFNlcnZlcjsKK30KZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0VUlDbGllbnQuY3BwIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RVSUNsaWVudC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMzMGQ2ZAotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0VUlDbGllbnQuY3Bw
CkBAIC0wLDAgKzEsNjc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKKyNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKK3N0YXRpYyBjb25zdCBjaGFyKiBrQWxlcnRE
aWFsb2dNZXNzYWdlID0gIldlYktpdEdUSysgYWxlcnQgZGlhbG9nIG1lc3NhZ2UiOworc3RhdGlj
IGNvbnN0IGNoYXIqIGtDb25maXJtRGlhbG9nTWVzc2FnZSA9ICJXZWJLaXRHVEsrIGNvbmZpcm0g
ZGlhbG9nIG1lc3NhZ2UiOworc3RhdGljIGNvbnN0IGNoYXIqIGtQcm9tcHREaWFsb2dNZXNzYWdl
ID0gIldlYktpdEdUSysgcHJvbXB0IGRpYWxvZyBtZXNzYWdlIjsKK3N0YXRpYyBjb25zdCBjaGFy
KiBrUHJvbXB0RGlhbG9nUmV0dXJuZWRUZXh0ID0gIldlYktpdEdUSysgcHJvbXB0IGRpYWxvZyBy
ZXR1cm5lZCB0ZXh0IjsKKworY2xhc3MgVUlDbGllbnRUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3Qg
eworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoVUlDbGllbnRUZXN0KTsKKwor
ICAgIGVudW0gV2ViVmlld0V2ZW50cyB7CisgICAgICAgIENyZWF0ZSwKKyAgICAgICAgUmVhZHlU
b1Nob3csCisgICAgICAgIFJ1bkFzTW9kYWwsCisgICAgICAgIENsb3NlCisgICAgfTsKKworICAg
IGNsYXNzIFdpbmRvd1Byb3BlcnRpZXMgeworICAgIHB1YmxpYzoKKyAgICAgICAgV2luZG93UHJv
cGVydGllcygpCisgICAgICAgICAgICA6IG1faXNOdWxsKHRydWUpCisgICAgICAgICAgICAsIG1f
dG9vbGJhclZpc2libGUodHJ1ZSkKKyAgICAgICAgICAgICwgbV9zdGF0dXNiYXJWaXNpYmxlKHRy
dWUpCisgICAgICAgICAgICAsIG1fc2Nyb2xsYmFyc1Zpc2libGUodHJ1ZSkKKyAgICAgICAgICAg
ICwgbV9tZW51YmFyVmlzaWJsZSh0cnVlKQorICAgICAgICAgICAgLCBtX2xvY2F0aW9uYmFyVmlz
aWJsZSh0cnVlKQorICAgICAgICAgICAgLCBtX3Jlc2l6YWJsZSh0cnVlKQorICAgICAgICAgICAg
LCBtX2Z1bGxzY3JlZW4oZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lbXNldCgmbV9n
ZW9tZXRyeSwgMCwgc2l6ZW9mKEdka1JlY3RhbmdsZSkpOworICAgICAgICB9CisKKyAgICAgICAg
V2luZG93UHJvcGVydGllcyhXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzKiB3aW5kb3dQcm9wZXJ0aWVz
KQorICAgICAgICAgICAgOiBtX2lzTnVsbChmYWxzZSkKKyAgICAgICAgICAgICwgbV90b29sYmFy
VmlzaWJsZSh3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X3Rvb2xiYXJfdmlzaWJsZSh3aW5k
b3dQcm9wZXJ0aWVzKSkKKyAgICAgICAgICAgICwgbV9zdGF0dXNiYXJWaXNpYmxlKHdlYmtpdF93
aW5kb3dfcHJvcGVydGllc19nZXRfc3RhdHVzYmFyX3Zpc2libGUod2luZG93UHJvcGVydGllcykp
CisgICAgICAgICAgICAsIG1fc2Nyb2xsYmFyc1Zpc2libGUod2Via2l0X3dpbmRvd19wcm9wZXJ0
aWVzX2dldF9zY3JvbGxiYXJzX3Zpc2libGUod2luZG93UHJvcGVydGllcykpCisgICAgICAgICAg
ICAsIG1fbWVudWJhclZpc2libGUod2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF9tZW51YmFy
X3Zpc2libGUod2luZG93UHJvcGVydGllcykpCisgICAgICAgICAgICAsIG1fbG9jYXRpb25iYXJW
aXNpYmxlKHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRfbG9jYXRpb25iYXJfdmlzaWJsZSh3
aW5kb3dQcm9wZXJ0aWVzKSkKKyAgICAgICAgICAgICwgbV9yZXNpemFibGUod2Via2l0X3dpbmRv
d19wcm9wZXJ0aWVzX2dldF9yZXNpemFibGUod2luZG93UHJvcGVydGllcykpCisgICAgICAgICAg
ICAsIG1fZnVsbHNjcmVlbih3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X2Z1bGxzY3JlZW4o
d2luZG93UHJvcGVydGllcykpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdlYmtpdF93aW5kb3df
cHJvcGVydGllc19nZXRfZ2VvbWV0cnkod2luZG93UHJvcGVydGllcywgJm1fZ2VvbWV0cnkpOwor
ICAgICAgICB9CisKKyAgICAgICAgV2luZG93UHJvcGVydGllcyhHZGtSZWN0YW5nbGUqIGdlb21l
dHJ5LCBib29sIHRvb2xiYXJWaXNpYmxlLCBib29sIHN0YXR1c2JhclZpc2libGUsIGJvb2wgc2Ny
b2xsYmFyc1Zpc2libGUsIGJvb2wgbWVudWJhclZpc2libGUsIGJvb2wgbG9jYXRpb25iYXJWaXNp
YmxlLCBib29sIHJlc2l6YWJsZSwgYm9vbCBmdWxsc2NyZWVuKQorICAgICAgICAgICAgOiBtX2lz
TnVsbChmYWxzZSkKKyAgICAgICAgICAgICwgbV9nZW9tZXRyeSgqZ2VvbWV0cnkpCisgICAgICAg
ICAgICAsIG1fdG9vbGJhclZpc2libGUodG9vbGJhclZpc2libGUpCisgICAgICAgICAgICAsIG1f
c3RhdHVzYmFyVmlzaWJsZShzdGF0dXNiYXJWaXNpYmxlKQorICAgICAgICAgICAgLCBtX3Njcm9s
bGJhcnNWaXNpYmxlKHNjcm9sbGJhcnNWaXNpYmxlKQorICAgICAgICAgICAgLCBtX21lbnViYXJW
aXNpYmxlKG1lbnViYXJWaXNpYmxlKQorICAgICAgICAgICAgLCBtX2xvY2F0aW9uYmFyVmlzaWJs
ZShsb2NhdGlvbmJhclZpc2libGUpCisgICAgICAgICAgICAsIG1fcmVzaXphYmxlKHJlc2l6YWJs
ZSkKKyAgICAgICAgICAgICwgbV9mdWxsc2NyZWVuKGZ1bGxzY3JlZW4pCisgICAgICAgIHsKKyAg
ICAgICAgfQorCisgICAgICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV9pc051bGw7
IH0KKworICAgICAgICB2b2lkIGFzc2VydEVxdWFsKGNvbnN0IFdpbmRvd1Byb3BlcnRpZXMmIG90
aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQobV9nZW9t
ZXRyeS54LCA9PSwgb3RoZXIubV9nZW9tZXRyeS54KTsKKyAgICAgICAgICAgIGdfYXNzZXJ0X2Nt
cGludChtX2dlb21ldHJ5LnksID09LCBvdGhlci5tX2dlb21ldHJ5LnkpOworICAgICAgICAgICAg
Z19hc3NlcnRfY21waW50KG1fZ2VvbWV0cnkud2lkdGgsID09LCBvdGhlci5tX2dlb21ldHJ5Lndp
ZHRoKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0X2NtcGludChtX2dlb21ldHJ5LmhlaWdodCwgPT0s
IG90aGVyLm1fZ2VvbWV0cnkuaGVpZ2h0KTsKKyAgICAgICAgICAgIGdfYXNzZXJ0X2NtcGludChz
dGF0aWNfY2FzdDxpbnQ+KG1fdG9vbGJhclZpc2libGUpLCA9PSwgc3RhdGljX2Nhc3Q8aW50Pihv
dGhlci5tX3Rvb2xiYXJWaXNpYmxlKSk7CisgICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQoc3Rh
dGljX2Nhc3Q8aW50PihtX3N0YXR1c2JhclZpc2libGUpLCA9PSwgc3RhdGljX2Nhc3Q8aW50Pihv
dGhlci5tX3N0YXR1c2JhclZpc2libGUpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0X2NtcGludChz
dGF0aWNfY2FzdDxpbnQ+KG1fc2Nyb2xsYmFyc1Zpc2libGUpLCA9PSwgc3RhdGljX2Nhc3Q8aW50
PihvdGhlci5tX3Njcm9sbGJhcnNWaXNpYmxlKSk7CisgICAgICAgICAgICBnX2Fzc2VydF9jbXBp
bnQoc3RhdGljX2Nhc3Q8aW50PihtX21lbnViYXJWaXNpYmxlKSwgPT0sIHN0YXRpY19jYXN0PGlu
dD4ob3RoZXIubV9tZW51YmFyVmlzaWJsZSkpOworICAgICAgICAgICAgZ19hc3NlcnRfY21waW50
KHN0YXRpY19jYXN0PGludD4obV9sb2NhdGlvbmJhclZpc2libGUpLCA9PSwgc3RhdGljX2Nhc3Q8
aW50PihvdGhlci5tX2xvY2F0aW9uYmFyVmlzaWJsZSkpOworICAgICAgICAgICAgZ19hc3NlcnRf
Y21waW50KHN0YXRpY19jYXN0PGludD4obV9yZXNpemFibGUpLCA9PSwgc3RhdGljX2Nhc3Q8aW50
PihvdGhlci5tX3Jlc2l6YWJsZSkpOworICAgICAgICAgICAgZ19hc3NlcnRfY21waW50KHN0YXRp
Y19jYXN0PGludD4obV9mdWxsc2NyZWVuKSwgPT0sIHN0YXRpY19jYXN0PGludD4ob3RoZXIubV9m
dWxsc2NyZWVuKSk7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIGJvb2wgbV9p
c051bGw7CisKKyAgICAgICAgR2RrUmVjdGFuZ2xlIG1fZ2VvbWV0cnk7CisKKyAgICAgICAgYm9v
bCBtX3Rvb2xiYXJWaXNpYmxlOworICAgICAgICBib29sIG1fc3RhdHVzYmFyVmlzaWJsZTsKKyAg
ICAgICAgYm9vbCBtX3Njcm9sbGJhcnNWaXNpYmxlOworICAgICAgICBib29sIG1fbWVudWJhclZp
c2libGU7CisgICAgICAgIGJvb2wgbV9sb2NhdGlvbmJhclZpc2libGU7CisKKyAgICAgICAgYm9v
bCBtX3Jlc2l6YWJsZTsKKyAgICAgICAgYm9vbCBtX2Z1bGxzY3JlZW47CisgICAgfTsKKworICAg
IHN0YXRpYyB2b2lkIHdpbmRvd1Byb3BlcnRpZXNOb3RpZnlDYWxsYmFjayhHT2JqZWN0KiwgR1Bh
cmFtU3BlYyogcGFyYW1TcGVjLCBVSUNsaWVudFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICB0
ZXN0LT5tX3dpbmRvd1Byb3BlcnRpZXNDaGFuZ2VkLmFkZChnX3BhcmFtX3NwZWNfZ2V0X25hbWUo
cGFyYW1TcGVjKSk7CisgICAgfQorCisgICAgc3RhdGljIEd0a1dpZGdldCogdmlld0NyZWF0ZUNh
bGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFVJQ2xpZW50VGVzdCogdGVzdCkKKyAgICB7
CisgICAgICAgIHJldHVybiB0ZXN0LT52aWV3Q3JlYXRlKHdlYlZpZXcpOworICAgIH0KKworICAg
IHN0YXRpYyB2b2lkIHZpZXdSZWFkeVRvU2hvd0NhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcsIFVJQ2xpZW50VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPnZpZXdSZWFkeVRv
U2hvdyh3ZWJWaWV3KTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCB2aWV3Q2xvc2VDYWxsYmFj
ayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBVSUNsaWVudFRlc3QqIHRlc3QpCisgICAgeworICAg
ICAgICB0ZXN0LT52aWV3Q2xvc2Uod2ViVmlldyk7CisgICAgfQorCisgICAgdm9pZCBzY3JpcHRB
bGVydChXZWJLaXRTY3JpcHREaWFsb2cqIGRpYWxvZykKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
bV9zY3JpcHREaWFsb2dUeXBlKSB7CisgICAgICAgIGNhc2UgV0VCS0lUX1NDUklQVF9ESUFMT0df
QUxFUlQ6CisgICAgICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NjcmlwdF9kaWFsb2df
Z2V0X21lc3NhZ2UoZGlhbG9nKSwgPT0sIGtBbGVydERpYWxvZ01lc3NhZ2UpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0VCS0lUX1NDUklQVF9ESUFMT0dfQ09ORklSTToKKyAg
ICAgICAgICAgIGdfYXNzZXJ0KG1fc2NyaXB0RGlhbG9nQ29uZmlybWVkKTsKKyAgICAgICAgICAg
IGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2NyaXB0X2RpYWxvZ19nZXRfbWVzc2FnZShkaWFsb2cp
LCA9PSwgImNvbmZpcm1lZCIpOworCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBX
RUJLSVRfU0NSSVBUX0RJQUxPR19QUk9NUFQ6CisgICAgICAgICAgICBnX2Fzc2VydF9jbXBzdHIo
d2Via2l0X3NjcmlwdF9kaWFsb2dfZ2V0X21lc3NhZ2UoZGlhbG9nKSwgPT0sIGtQcm9tcHREaWFs
b2dSZXR1cm5lZFRleHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAg
ICBnX21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIHZvaWQgc2NyaXB0
Q29uZmlybShXZWJLaXRTY3JpcHREaWFsb2cqIGRpYWxvZykKKyAgICB7CisgICAgICAgIGdfYXNz
ZXJ0X2NtcHN0cih3ZWJraXRfc2NyaXB0X2RpYWxvZ19nZXRfbWVzc2FnZShkaWFsb2cpLCA9PSwg
a0NvbmZpcm1EaWFsb2dNZXNzYWdlKTsKKyAgICAgICAgbV9zY3JpcHREaWFsb2dDb25maXJtZWQg
PSAhbV9zY3JpcHREaWFsb2dDb25maXJtZWQ7CisgICAgICAgIHdlYmtpdF9zY3JpcHRfZGlhbG9n
X2NvbmZpcm1fc2V0X2NvbmZpcm1lZChkaWFsb2csIG1fc2NyaXB0RGlhbG9nQ29uZmlybWVkKTsK
KyAgICB9CisKKyAgICB2b2lkIHNjcmlwdFByb21wdChXZWJLaXRTY3JpcHREaWFsb2cqIGRpYWxv
ZykKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2NyaXB0X2RpYWxvZ19n
ZXRfbWVzc2FnZShkaWFsb2cpLCA9PSwga1Byb21wdERpYWxvZ01lc3NhZ2UpOworICAgICAgICBn
X2Fzc2VydF9jbXBzdHIod2Via2l0X3NjcmlwdF9kaWFsb2dfcHJvbXB0X2dldF9kZWZhdWx0X3Rl
eHQoZGlhbG9nKSwgPT0sICJkZWZhdWx0Iik7CisgICAgICAgIHdlYmtpdF9zY3JpcHRfZGlhbG9n
X3Byb21wdF9zZXRfdGV4dChkaWFsb2csIGtQcm9tcHREaWFsb2dSZXR1cm5lZFRleHQpOworICAg
IH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBzY3JpcHREaWFsb2coV2ViS2l0V2ViVmlldyosIFdl
YktpdFNjcmlwdERpYWxvZyogZGlhbG9nLCBVSUNsaWVudFRlc3QqIHRlc3QpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKHdlYmtpdF9zY3JpcHRfZGlhbG9nX2dldF9kaWFsb2dfdHlwZShkaWFsb2cp
KSB7CisgICAgICAgIGNhc2UgV0VCS0lUX1NDUklQVF9ESUFMT0dfQUxFUlQ6CisgICAgICAgICAg
ICB0ZXN0LT5zY3JpcHRBbGVydChkaWFsb2cpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgV0VCS0lUX1NDUklQVF9ESUFMT0dfQ09ORklSTToKKyAgICAgICAgICAgIHRlc3QtPnNj
cmlwdENvbmZpcm0oZGlhbG9nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdF
QktJVF9TQ1JJUFRfRElBTE9HX1BST01QVDoKKyAgICAgICAgICAgIHRlc3QtPnNjcmlwdFByb21w
dChkaWFsb2cpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gVFJVRTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBtb3VzZVRhcmdldENoYW5nZWQoV2Vi
S2l0V2ViVmlldyosIFdlYktpdEhpdFRlc3RSZXN1bHQqIGhpdFRlc3RSZXN1bHQsIGd1aW50IG1v
ZGlmaWVycywgVUlDbGllbnRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQoV0VC
S0lUX0lTX0hJVF9URVNUX1JFU1VMVChoaXRUZXN0UmVzdWx0KSk7CisgICAgICAgIHRlc3QtPmFz
c2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QoaGl0VGVzdFJlc3Vs
dCkpOworCisgICAgICAgIHRlc3QtPm1fbW91c2VUYXJnZXRIaXRUZXN0UmVzdWx0ID0gaGl0VGVz
dFJlc3VsdDsKKyAgICAgICAgdGVzdC0+bV9tb3VzZVRhcmdldE1vZGlmaWVycyA9IG1vZGlmaWVy
czsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgZ2Jvb2xlYW4gcGVybWlzc2lvblJlcXVlc3RlZChXZWJLaXRXZWJWaWV3Kiwg
V2ViS2l0UGVybWlzc2lvblJlcXVlc3QqIHJlcXVlc3QsIFVJQ2xpZW50VGVzdCogdGVzdCkKKyAg
ICB7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19QRVJNSVNTSU9OX1JFUVVFU1QocmVxdWVz
dCkpOworICAgICAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVz
KEdfT0JKRUNUKHJlcXVlc3QpKTsKKworICAgICAgICBpZiAodGVzdC0+bV9hbGxvd1Blcm1pc3Np
b25SZXF1ZXN0cykKKyAgICAgICAgICAgIHdlYmtpdF9wZXJtaXNzaW9uX3JlcXVlc3RfYWxsb3co
cmVxdWVzdCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHdlYmtpdF9wZXJtaXNzaW9uX3Jl
cXVlc3RfZGVueShyZXF1ZXN0KTsKKworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAg
ICBVSUNsaWVudFRlc3QoKQorICAgICAgICA6IG1fc2NyaXB0RGlhbG9nVHlwZShXRUJLSVRfU0NS
SVBUX0RJQUxPR19BTEVSVCkKKyAgICAgICAgLCBtX3NjcmlwdERpYWxvZ0NvbmZpcm1lZCh0cnVl
KQorICAgICAgICAsIG1fYWxsb3dQZXJtaXNzaW9uUmVxdWVzdHMoZmFsc2UpCisgICAgICAgICwg
bV9tb3VzZVRhcmdldE1vZGlmaWVycygwKQorICAgIHsKKyAgICAgICAgd2Via2l0X3NldHRpbmdz
X3NldF9qYXZhc2NyaXB0X2Nhbl9vcGVuX3dpbmRvd3NfYXV0b21hdGljYWxseSh3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X3NldHRpbmdzKG1fd2ViVmlldyksIFRSVUUpOworICAgICAgICBnX3NpZ25hbF9j
b25uZWN0KG1fd2ViVmlldywgImNyZWF0ZSIsIEdfQ0FMTEJBQ0sodmlld0NyZWF0ZUNhbGxiYWNr
KSwgdGhpcyk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAic2NyaXB0LWRp
YWxvZyIsIEdfQ0FMTEJBQ0soc2NyaXB0RGlhbG9nKSwgdGhpcyk7CisgICAgICAgIGdfc2lnbmFs
X2Nvbm5lY3QobV93ZWJWaWV3LCAibW91c2UtdGFyZ2V0LWNoYW5nZWQiLCBHX0NBTExCQUNLKG1v
dXNlVGFyZ2V0Q2hhbmdlZCksIHRoaXMpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2Vi
VmlldywgInBlcm1pc3Npb24tcmVxdWVzdCIsIEdfQ0FMTEJBQ0socGVybWlzc2lvblJlcXVlc3Rl
ZCksIHRoaXMpOworICAgIH0KKworICAgIH5VSUNsaWVudFRlc3QoKQorICAgIHsKKyAgICAgICAg
Z19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fd2ViVmlldywgR19TSUdOQUxf
TUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7CisgICAgfQorCisgICAgdm9pZCB3YWl0VW50
aWxNYWluTG9vcEZpbmlzaGVzKCkKKyAgICB7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21h
aW5Mb29wKTsKKyAgICB9CisKKyAgICB2b2lkIHNldEV4cGVjdGVkV2luZG93UHJvcGVydGllcyhj
b25zdCBXaW5kb3dQcm9wZXJ0aWVzJiB3aW5kb3dQcm9wZXJ0aWVzKQorICAgIHsKKyAgICAgICAg
bV93aW5kb3dQcm9wZXJ0aWVzID0gd2luZG93UHJvcGVydGllczsKKyAgICB9CisKKyAgICBXZWJL
aXRIaXRUZXN0UmVzdWx0KiBtb3ZlTW91c2VBbmRXYWl0VW50aWxNb3VzZVRhcmdldENoYW5nZWQo
aW50IHgsIGludCB5LCB1bnNpZ25lZCBtb3VzZU1vZGlmaWVycyA9IDApCisgICAgeworICAgICAg
ICBtb3VzZU1vdmVUbyh4LCB5LCBtb3VzZU1vZGlmaWVycyk7CisgICAgICAgIGdfbWFpbl9sb29w
X3J1bihtX21haW5Mb29wKTsKKyAgICAgICAgcmV0dXJuIG1fbW91c2VUYXJnZXRIaXRUZXN0UmVz
dWx0LmdldCgpOworICAgIH0KKworICAgIHZpcnR1YWwgR3RrV2lkZ2V0KiB2aWV3Q3JlYXRlKFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcpCisgICAgeworICAgICAgICBnX2Fzc2VydCh3ZWJWaWV3ID09
IG1fd2ViVmlldyk7CisKKyAgICAgICAgR3RrV2lkZ2V0KiBuZXdXZWJWaWV3ID0gd2Via2l0X3dl
Yl92aWV3X25ld193aXRoX2NvbnRleHQod2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KHdlYlZp
ZXcpKTsKKyAgICAgICAgZ19vYmplY3RfcmVmX3NpbmsobmV3V2ViVmlldyk7CisKKyAgICAgICAg
bV93ZWJWaWV3RXZlbnRzLmFwcGVuZChDcmVhdGUpOworCisgICAgICAgIFdlYktpdFdpbmRvd1By
b3BlcnRpZXMqIHdpbmRvd1Byb3BlcnRpZXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19w
cm9wZXJ0aWVzKFdFQktJVF9XRUJfVklFVyhuZXdXZWJWaWV3KSk7CisgICAgICAgIGdfYXNzZXJ0
KHdpbmRvd1Byb3BlcnRpZXMpOworICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVz
dEZpbmlzaGVzKEdfT0JKRUNUKHdpbmRvd1Byb3BlcnRpZXMpKTsKKyAgICAgICAgbV93aW5kb3dQ
cm9wZXJ0aWVzQ2hhbmdlZC5jbGVhcigpOworCisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2lu
ZG93UHJvcGVydGllcywgIm5vdGlmeSIsIEdfQ0FMTEJBQ0sod2luZG93UHJvcGVydGllc05vdGlm
eUNhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobmV3V2ViVmlldywg
InJlYWR5LXRvLXNob3ciLCBHX0NBTExCQUNLKHZpZXdSZWFkeVRvU2hvd0NhbGxiYWNrKSwgdGhp
cyk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobmV3V2ViVmlldywgImNsb3NlIiwgR19DQUxM
QkFDSyh2aWV3Q2xvc2VDYWxsYmFjayksIHRoaXMpOworCisgICAgICAgIHJldHVybiBuZXdXZWJW
aWV3OworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCB2aWV3UmVhZHlUb1Nob3coV2ViS2l0V2Vi
Vmlldyogd2ViVmlldykKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KHdlYlZpZXcgIT0gbV93ZWJW
aWV3KTsKKworICAgICAgICBXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzKiB3aW5kb3dQcm9wZXJ0aWVz
ID0gd2Via2l0X3dlYl92aWV3X2dldF93aW5kb3dfcHJvcGVydGllcyh3ZWJWaWV3KTsKKyAgICAg
ICAgZ19hc3NlcnQod2luZG93UHJvcGVydGllcyk7CisgICAgICAgIGlmICghbV93aW5kb3dQcm9w
ZXJ0aWVzLmlzTnVsbCgpKQorICAgICAgICAgICAgV2luZG93UHJvcGVydGllcyh3aW5kb3dQcm9w
ZXJ0aWVzKS5hc3NlcnRFcXVhbChtX3dpbmRvd1Byb3BlcnRpZXMpOworCisgICAgICAgIG1fd2Vi
Vmlld0V2ZW50cy5hcHBlbmQoUmVhZHlUb1Nob3cpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9p
ZCB2aWV3Q2xvc2UoV2ViS2l0V2ViVmlldyogd2ViVmlldykKKyAgICB7CisgICAgICAgIGdfYXNz
ZXJ0KHdlYlZpZXcgIT0gbV93ZWJWaWV3KTsKKworICAgICAgICBtX3dlYlZpZXdFdmVudHMuYXBw
ZW5kKENsb3NlKTsKKyAgICAgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7CisKKyAgICAgICAg
Z19tYWluX2xvb3BfcXVpdChtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBWZWN0b3I8V2ViVmll
d0V2ZW50cz4gbV93ZWJWaWV3RXZlbnRzOworICAgIFdlYktpdFNjcmlwdERpYWxvZ1R5cGUgbV9z
Y3JpcHREaWFsb2dUeXBlOworICAgIGJvb2wgbV9zY3JpcHREaWFsb2dDb25maXJtZWQ7CisgICAg
Ym9vbCBtX2FsbG93UGVybWlzc2lvblJlcXVlc3RzOworICAgIFdpbmRvd1Byb3BlcnRpZXMgbV93
aW5kb3dQcm9wZXJ0aWVzOworICAgIEhhc2hTZXQ8V1RGOjpTdHJpbmc+IG1fd2luZG93UHJvcGVy
dGllc0NoYW5nZWQ7CisgICAgR1JlZlB0cjxXZWJLaXRIaXRUZXN0UmVzdWx0PiBtX21vdXNlVGFy
Z2V0SGl0VGVzdFJlc3VsdDsKKyAgICB1bnNpZ25lZCBtX21vdXNlVGFyZ2V0TW9kaWZpZXJzOwor
fTsKKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdDcmVhdGVSZWFkeUNsb3NlKFVJQ2xpZW50VGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJv
ZHkgb25Mb2FkPVwid2luZG93Lm9wZW4oKS5jbG9zZSgpO1wiPjwvaHRtbD4iLCAwKTsKKyAgICB0
ZXN0LT53YWl0VW50aWxNYWluTG9vcEZpbmlzaGVzKCk7CisKKyAgICBWZWN0b3I8VUlDbGllbnRU
ZXN0OjpXZWJWaWV3RXZlbnRzPiYgZXZlbnRzID0gdGVzdC0+bV93ZWJWaWV3RXZlbnRzOworICAg
IGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgMyk7CisgICAgZ19hc3NlcnRfY21w
aW50KGV2ZW50c1swXSwgPT0sIFVJQ2xpZW50VGVzdDo6Q3JlYXRlKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoZXZlbnRzWzFdLCA9PSwgVUlDbGllbnRUZXN0OjpSZWFkeVRvU2hvdyk7CisgICAgZ19h
c3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIFVJQ2xpZW50VGVzdDo6Q2xvc2UpOworfQorCitz
dGF0aWMgZ2Jvb2xlYW4gY2hlY2tNaW1lVHlwZUZvckZpbHRlcihHdGtGaWxlRmlsdGVyKiBmaWx0
ZXIsIGNvbnN0IGdjaGFyKiBtaW1lVHlwZSkKK3sKKyAgICBHdGtGaWxlRmlsdGVySW5mbyBmaWx0
ZXJJbmZvOworICAgIGZpbHRlckluZm8uY29udGFpbnMgPSBHVEtfRklMRV9GSUxURVJfTUlNRV9U
WVBFOworICAgIGZpbHRlckluZm8ubWltZV90eXBlID0gbWltZVR5cGU7CisgICAgcmV0dXJuIGd0
a19maWxlX2ZpbHRlcl9maWx0ZXIoZmlsdGVyLCAmZmlsdGVySW5mbyk7Cit9CisKK2NsYXNzIE1v
ZGFsRGlhbG9nc1Rlc3Q6IHB1YmxpYyBVSUNsaWVudFRlc3QgeworcHVibGljOgorICAgIE1BS0Vf
R0xJQl9URVNUX0ZJWFRVUkUoTW9kYWxEaWFsb2dzVGVzdCk7CisKKyAgICBzdGF0aWMgdm9pZCBk
aWFsb2dSdW5Bc01vZGFsQ2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgTW9kYWxEaWFs
b2dzVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KHdlYlZpZXcgIT0gdGVzdC0+
bV93ZWJWaWV3KTsKKyAgICAgICAgdGVzdC0+bV93ZWJWaWV3RXZlbnRzLmFwcGVuZChSdW5Bc01v
ZGFsKTsKKyAgICB9CisKKyAgICBHdGtXaWRnZXQqIHZpZXdDcmVhdGUoV2ViS2l0V2ViVmlldyog
d2ViVmlldykKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KHdlYlZpZXcgPT0gbV93ZWJWaWV3KTsK
KworICAgICAgICBHdGtXaWRnZXQqIG5ld1dlYlZpZXcgPSBVSUNsaWVudFRlc3Q6OnZpZXdDcmVh
dGUod2ViVmlldyk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobmV3V2ViVmlldywgInJ1bi1h
cy1tb2RhbCIsIEdfQ0FMTEJBQ0soZGlhbG9nUnVuQXNNb2RhbENhbGxiYWNrKSwgdGhpcyk7Cisg
ICAgICAgIHJldHVybiBuZXdXZWJWaWV3OworICAgIH0KKworICAgIHZvaWQgdmlld1JlYWR5VG9T
aG93KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCisgICAgeworICAgICAgICBnX2Fzc2VydCh3ZWJW
aWV3ICE9IG1fd2ViVmlldyk7CisgICAgICAgIG1fd2ViVmlld0V2ZW50cy5hcHBlbmQoUmVhZHlU
b1Nob3cpOworICAgIH0KK307CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3QWxsb3dNb2RhbERp
YWxvZ3MoTW9kYWxEaWFsb2dzVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBXZWJL
aXRTZXR0aW5ncyogc2V0dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHRlc3Qt
Pm1fd2ViVmlldyk7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9hbGxvd19tb2RhbF9kaWFsb2dz
KHNldHRpbmdzLCBUUlVFKTsKKworICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keSBvbmxv
YWQ9XCJ3aW5kb3cuc2hvd01vZGFsRGlhbG9nKCdkYXRhOnRleHQvaHRtbCw8aHRtbD48Ym9keS8+
PHNjcmlwdD53aW5kb3cuY2xvc2UoKTs8L3NjcmlwdD48L2h0bWw+JylcIj48L2JvZHk+PC9odG1s
PiIsIDApOworICAgIHRlc3QtPndhaXRVbnRpbE1haW5Mb29wRmluaXNoZXMoKTsKKworICAgIFZl
Y3RvcjxVSUNsaWVudFRlc3Q6OldlYlZpZXdFdmVudHM+JiBldmVudHMgPSB0ZXN0LT5tX3dlYlZp
ZXdFdmVudHM7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCA0KTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgVUlDbGllbnRUZXN0OjpDcmVhdGUpOwor
ICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBVSUNsaWVudFRlc3Q6OlJlYWR5VG9T
aG93KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgVUlDbGllbnRUZXN0OjpS
dW5Bc01vZGFsKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzNdLCA9PSwgVUlDbGllbnRU
ZXN0OjpDbG9zZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3RGlzYWxsb3dNb2RhbERp
YWxvZ3MoTW9kYWxEaWFsb2dzVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBXZWJL
aXRTZXR0aW5ncyogc2V0dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHRlc3Qt
Pm1fd2ViVmlldyk7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9hbGxvd19tb2RhbF9kaWFsb2dz
KHNldHRpbmdzLCBGQUxTRSk7CisKKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHkgb25s
b2FkPVwid2luZG93LnNob3dNb2RhbERpYWxvZygnZGF0YTp0ZXh0L2h0bWwsPGh0bWw+PGJvZHkv
PjxzY3JpcHQ+d2luZG93LmNsb3NlKCk7PC9zY3JpcHQ+PC9odG1sPicpXCI+PC9ib2R5PjwvaHRt
bD4iLCAwKTsKKyAgICAvLyBXZSBuZWVkIHRvIHVzZSBhIHRpbWVvdXQgaGVyZSBiZWNhdXNlIHRo
ZSB2aWV3Q2xvc2UoKSBmdW5jdGlvbgorICAgIC8vIHdvbid0IGV2ZXIgYmUgY2FsbGVkIGFzIHRo
ZSBkaWFsb2cgd29uJ3QgYmUgY3JlYXRlZC4KKyAgICB0ZXN0LT53YWl0KDEpOworCisgICAgVmVj
dG9yPFVJQ2xpZW50VGVzdDo6V2ViVmlld0V2ZW50cz4mIGV2ZW50cyA9IHRlc3QtPm1fd2ViVmll
d0V2ZW50czsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDApOworfQor
CitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0phdmFTY3JpcHREaWFsb2dzKFVJQ2xpZW50VGVzdCog
dGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciogaHRtbE9uTG9h
ZEZvcm1hdCA9ICI8aHRtbD48Ym9keSBvbkxvYWQ9XCIlc1wiPjwvYm9keT48L2h0bWw+IjsKKyAg
ICBzdGF0aWMgY29uc3QgY2hhcioganNBbGVydEZvcm1hdCA9ICJhbGVydCgnJXMnKSI7CisgICAg
c3RhdGljIGNvbnN0IGNoYXIqIGpzQ29uZmlybUZvcm1hdCA9ICJkbyB7IGNvbmZpcm1lZCA9IGNv
bmZpcm0oJyVzJyk7IH0gd2hpbGUgKCFjb25maXJtZWQpOyBhbGVydCgnY29uZmlybWVkJyk7IjsK
KyAgICBzdGF0aWMgY29uc3QgY2hhcioganNQcm9tcHRGb3JtYXQgPSAiYWxlcnQocHJvbXB0KCcl
cycsICdkZWZhdWx0JykpOyI7CisKKyAgICB0ZXN0LT5tX3NjcmlwdERpYWxvZ1R5cGUgPSBXRUJL
SVRfU0NSSVBUX0RJQUxPR19BTEVSVDsKKyAgICBHT3duUHRyPGNoYXI+IGFsZXJ0RGlhbG9nTWVz
c2FnZShnX3N0cmR1cF9wcmludGYoanNBbGVydEZvcm1hdCwga0FsZXJ0RGlhbG9nTWVzc2FnZSkp
OworICAgIEdPd25QdHI8Y2hhcj4gYWxlcnRIVE1MKGdfc3RyZHVwX3ByaW50ZihodG1sT25Mb2Fk
Rm9ybWF0LCBhbGVydERpYWxvZ01lc3NhZ2UuZ2V0KCkpKTsKKyAgICB0ZXN0LT5sb2FkSHRtbChh
bGVydEhUTUwuZ2V0KCksIDApOworICAgIHRlc3QtPndhaXRVbnRpbE1haW5Mb29wRmluaXNoZXMo
KTsKKworICAgIHRlc3QtPm1fc2NyaXB0RGlhbG9nVHlwZSA9IFdFQktJVF9TQ1JJUFRfRElBTE9H
X0NPTkZJUk07CisgICAgR093blB0cjxjaGFyPiBjb25maXJtRGlhbG9nTWVzc2FnZShnX3N0cmR1
cF9wcmludGYoanNDb25maXJtRm9ybWF0LCBrQ29uZmlybURpYWxvZ01lc3NhZ2UpKTsKKyAgICBH
T3duUHRyPGNoYXI+IGNvbmZpcm1IVE1MKGdfc3RyZHVwX3ByaW50ZihodG1sT25Mb2FkRm9ybWF0
LCBjb25maXJtRGlhbG9nTWVzc2FnZS5nZXQoKSkpOworICAgIHRlc3QtPmxvYWRIdG1sKGNvbmZp
cm1IVE1MLmdldCgpLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxNYWluTG9vcEZpbmlzaGVzKCk7
CisKKyAgICB0ZXN0LT5tX3NjcmlwdERpYWxvZ1R5cGUgPSBXRUJLSVRfU0NSSVBUX0RJQUxPR19Q
Uk9NUFQ7CisgICAgR093blB0cjxjaGFyPiBwcm9tcHREaWFsb2dNZXNzYWdlKGdfc3RyZHVwX3By
aW50Zihqc1Byb21wdEZvcm1hdCwga1Byb21wdERpYWxvZ01lc3NhZ2UpKTsKKyAgICBHT3duUHRy
PGNoYXI+IHByb21wdEhUTUwoZ19zdHJkdXBfcHJpbnRmKGh0bWxPbkxvYWRGb3JtYXQsIHByb21w
dERpYWxvZ01lc3NhZ2UuZ2V0KCkpKTsKKyAgICB0ZXN0LT5sb2FkSHRtbChwcm9tcHRIVE1MLmdl
dCgpLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxNYWluTG9vcEZpbmlzaGVzKCk7Cit9CisKK3N0
YXRpYyB2b2lkIHRlc3RXZWJWaWV3V2luZG93UHJvcGVydGllcyhVSUNsaWVudFRlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHdpbmRvd1Byb3JwZXJ0
aWVzU3RyaW5nID0gImxlZnQ9MTAwLHRvcD0xNTAsd2lkdGg9NDAwLGhlaWdodD00MDAsbG9jYXRp
b249bm8sbWVudWJhcj1ubyxzdGF0dXM9bm8sdG9vbGJhcj1ubyxzY3JvbGxiYXJzPW5vIjsKKyAg
ICBHZGtSZWN0YW5nbGUgZ2VvbWV0cnkgPSB7IDEwMCwgMTUwLCA0MDAsIDQwMCB9OworICAgIHRl
c3QtPnNldEV4cGVjdGVkV2luZG93UHJvcGVydGllcyhVSUNsaWVudFRlc3Q6OldpbmRvd1Byb3Bl
cnRpZXMoJmdlb21ldHJ5LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUs
IGZhbHNlKSk7CisKKyAgICBHT3duUHRyPGNoYXI+IGh0bWxTdHJpbmcoZ19zdHJkdXBfcHJpbnRm
KCI8aHRtbD48Ym9keSBvbkxvYWQ9XCJ3aW5kb3cub3BlbignJywgJycsICclcycpLmNsb3NlKCk7
XCI+PC9ib2R5PjwvaHRtbD4iLCB3aW5kb3dQcm9ycGVydGllc1N0cmluZykpOworICAgIHRlc3Qt
PmxvYWRIdG1sKGh0bWxTdHJpbmcuZ2V0KCksIDApOworICAgIHRlc3QtPndhaXRVbnRpbE1haW5M
b29wRmluaXNoZXMoKTsKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBwcm9wZXJ0aWVzQ2hhbmdl
ZFtdID0geworICAgICAgICAiZ2VvbWV0cnkiLCAibG9jYXRpb25iYXItdmlzaWJsZSIsICJtZW51
YmFyLXZpc2libGUiLCAic3RhdHVzYmFyLXZpc2libGUiLCAidG9vbGJhci12aXNpYmxlIiwgInNj
cm9sbGJhcnMtdmlzaWJsZSIKKyAgICB9OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgR19O
X0VMRU1FTlRTKHByb3BlcnRpZXNDaGFuZ2VkKTsgKytpKQorICAgICAgICBnX2Fzc2VydCh0ZXN0
LT5tX3dpbmRvd1Byb3BlcnRpZXNDaGFuZ2VkLmNvbnRhaW5zKHByb3BlcnRpZXNDaGFuZ2VkW2ld
KSk7CisKKyAgICBWZWN0b3I8VUlDbGllbnRUZXN0OjpXZWJWaWV3RXZlbnRzPiYgZXZlbnRzID0g
dGVzdC0+bV93ZWJWaWV3RXZlbnRzOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgp
LCA9PSwgMyk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIFVJQ2xpZW50VGVz
dDo6Q3JlYXRlKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgVUlDbGllbnRU
ZXN0OjpSZWFkeVRvU2hvdyk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIFVJ
Q2xpZW50VGVzdDo6Q2xvc2UpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld01vdXNlVGFy
Z2V0KFVJQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5zaG93
SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoR1RLX1dJTkRPV19UT1BMRVZFTCk7CisKKyAgICBj
b25zdCBjaGFyKiBsaW5rc0hvdmVyZWRIVE1MID0KKyAgICAgICAgIjxodG1sPjxib2R5PiIKKyAg
ICAgICAgIiA8YSBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjEnIGhyZWY9
J2h0dHA6Ly93d3cud2Via2l0Z3RrLm9yZycgdGl0bGU9J1dlYktpdEdUSysgVGl0bGUnPldlYktp
dEdUSysgV2Vic2l0ZTwvYT4iCisgICAgICAgICIgPGltZyBzdHlsZT0ncG9zaXRpb246YWJzb2x1
dGU7IGxlZnQ6MTsgdG9wOjEwJyBzcmM9JzB4ZGVhZGJlZWYnIHdpZHRoPTUgaGVpZ2h0PTU+PC9p
bWc+IgorICAgICAgICAiIDxhIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6
MjAnIGhyZWY9J2h0dHA6Ly93d3cud2Via2l0Z3RrLm9yZy9sb2dvJyB0aXRsZT0nV2ViS2l0R1RL
KyBMb2dvJz48aW1nIHNyYz0nMHhkZWFkYmVlZicgd2lkdGg9NSBoZWlnaHQ9NT48L2ltZz48L2E+
IgorICAgICAgICAiIDxpbnB1dCBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsgdG9w
OjMwJyBzaXplPScxMCc+PC9pbnB1dD4iCisgICAgICAgICIgPGRpdiBzdHlsZT0ncG9zaXRpb246
YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjUwOyB3aWR0aDozMDsgaGVpZ2h0OjMwOyBvdmVyZmxvdzpz
Y3JvbGwnPiZuYnNwOzwvZGl2PiIKKyAgICAgICAgIiA8dmlkZW8gc3R5bGU9J3Bvc2l0aW9uOmFi
c29sdXRlOyBsZWZ0OjE7IHRvcDoxMDAnIHdpZHRoPSczMDAnIGhlaWdodD0nMzAwJyBjb250cm9s
cz0nY29udHJvbHMnIHByZWxvYWQ9J25vbmUnPjxzb3VyY2Ugc3JjPSdtb3ZpZS5vZ2cnIHR5cGU9
J3ZpZGVvL29nZycgLz48L3ZpZGVvPiIKKyAgICAgICAgIjwvYm9keT48L2h0bWw+IjsKKworICAg
IHRlc3QtPmxvYWRIdG1sKGxpbmtzSG92ZXJlZEhUTUwsICJmaWxlOi8vLyIpOworICAgIHRlc3Qt
PndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgLy8gTW92ZSBvdmVyIGxpbmsuCisgICAg
V2ViS2l0SGl0VGVzdFJlc3VsdCogaGl0VGVzdFJlc3VsdCA9IHRlc3QtPm1vdmVNb3VzZUFuZFdh
aXRVbnRpbE1vdXNlVGFyZ2V0Q2hhbmdlZCgxLCAxKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfaGl0
X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluayhoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3Nl
cnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0
KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRp
YShoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRf
Y29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnRfY21wc3Ry
KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2xpbmtfdXJpKGhpdFRlc3RSZXN1bHQpLCA9PSwg
Imh0dHA6Ly93d3cud2Via2l0Z3RrLm9yZy8iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0
X2hpdF90ZXN0X3Jlc3VsdF9nZXRfbGlua190aXRsZShoaXRUZXN0UmVzdWx0KSwgPT0sICJXZWJL
aXRHVEsrIFRpdGxlIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9oaXRfdGVzdF9yZXN1
bHRfZ2V0X2xpbmtfbGFiZWwoaGl0VGVzdFJlc3VsdCksID09LCAiV2ViS2l0R1RLKyBXZWJzaXRl
Iik7CisgICAgZ19hc3NlcnQoIXRlc3QtPm1fbW91c2VUYXJnZXRNb2RpZmllcnMpOworCisgICAg
Ly8gTW92ZSBvdXQgb2YgdGhlIGxpbmsuCisgICAgaGl0VGVzdFJlc3VsdCA9IHRlc3QtPm1vdmVN
b3VzZUFuZFdhaXRVbnRpbE1vdXNlVGFyZ2V0Q2hhbmdlZCgwLCAwKTsKKyAgICBnX2Fzc2VydCgh
d2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xpbmsoaGl0VGVzdFJlc3VsdCkpOwor
ICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0
VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRl
eHRfaXNfbWVkaWEoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rl
c3RfcmVzdWx0X2NvbnRleHRfaXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNz
ZXJ0KCF0ZXN0LT5tX21vdXNlVGFyZ2V0TW9kaWZpZXJzKTsKKworICAgIC8vIE1vdmUgb3ZlciBp
bWFnZSB3aXRoIEdES19DT05UUk9MX01BU0suCisgICAgaGl0VGVzdFJlc3VsdCA9IHRlc3QtPm1v
dmVNb3VzZUFuZFdhaXRVbnRpbE1vdXNlVGFyZ2V0Q2hhbmdlZCgxLCAxMCwgR0RLX0NPTlRST0xf
TUFTSyk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19s
aW5rKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0
X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRf
aGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbWVkaWEoaGl0VGVzdFJlc3VsdCkpOworICAgIGdf
YXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfZWRpdGFibGUoaGl0VGVz
dFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRf
aXNfc2Nyb2xsYmFyKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0
X2hpdF90ZXN0X3Jlc3VsdF9nZXRfaW1hZ2VfdXJpKGhpdFRlc3RSZXN1bHQpLCA9PSwgImZpbGU6
Ly8vMHhkZWFkYmVlZiIpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fbW91c2VUYXJnZXRNb2RpZmll
cnMgJiBHREtfQ09OVFJPTF9NQVNLKTsKKworICAgIC8vIE1vdmUgb3ZlciBpbWFnZSBsaW5rLgor
ICAgIGhpdFRlc3RSZXN1bHQgPSB0ZXN0LT5tb3ZlTW91c2VBbmRXYWl0VW50aWxNb3VzZVRhcmdl
dENoYW5nZWQoMSwgMjApOworICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29u
dGV4dF9pc19saW5rKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rl
c3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0
KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbWVkaWEoaGl0VGVzdFJlc3VsdCkp
OworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfZWRpdGFi
bGUoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0
X2NvbnRleHRfaXNfc2Nyb2xsYmFyKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydF9jbXBz
dHIod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfbGlua191cmkoaGl0VGVzdFJlc3VsdCksID09
LCAiaHR0cDovL3d3dy53ZWJraXRndGsub3JnL2xvZ28iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIo
d2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfaW1hZ2VfdXJpKGhpdFRlc3RSZXN1bHQpLCA9PSwg
ImZpbGU6Ly8vMHhkZWFkYmVlZiIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfaGl0X3Rl
c3RfcmVzdWx0X2dldF9saW5rX3RpdGxlKGhpdFRlc3RSZXN1bHQpLCA9PSwgIldlYktpdEdUSysg
TG9nbyIpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9saW5rX2xh
YmVsKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCghdGVzdC0+bV9tb3VzZVRhcmdldE1v
ZGlmaWVycyk7CisKKyAgICAvLyBNb3ZlIG92ZXIgbWVkaWEuCisgICAgaGl0VGVzdFJlc3VsdCA9
IHRlc3QtPm1vdmVNb3VzZUFuZFdhaXRVbnRpbE1vdXNlVGFyZ2V0Q2hhbmdlZCgxLCAxMDApOwor
ICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluayhoaXRU
ZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4
dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQod2Via2l0X2hpdF90ZXN0
X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCgh
d2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQp
KTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX3Njcm9s
bGJhcihoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9oaXRfdGVz
dF9yZXN1bHRfZ2V0X21lZGlhX3VyaShoaXRUZXN0UmVzdWx0KSwgPT0sICJmaWxlOi8vL21vdmll
Lm9nZyIpOworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX21vdXNlVGFyZ2V0TW9kaWZpZXJzKTsKKwor
ICAgIC8vIE1vdmVyIG92ZXIgaW5wdXQuCisgICAgaGl0VGVzdFJlc3VsdCA9IHRlc3QtPm1vdmVN
b3VzZUFuZFdhaXRVbnRpbE1vdXNlVGFyZ2V0Q2hhbmdlZCg1LCAzNSk7CisgICAgZ19hc3NlcnQo
IXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RSZXN1bHQpKTsK
KyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdlKGhp
dFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250
ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90
ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX3Njcm9sbGJhcihoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19h
c3NlcnQod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RS
ZXN1bHQpKTsKKyAgICBnX2Fzc2VydCghdGVzdC0+bV9tb3VzZVRhcmdldE1vZGlmaWVycyk7CisK
KyAgICAvLyBNb3ZlIG92ZXIgc2Nyb2xsYmFyLgorICAgIGhpdFRlc3RSZXN1bHQgPSB0ZXN0LT5t
b3ZlTW91c2VBbmRXYWl0VW50aWxNb3VzZVRhcmdldENoYW5nZWQoNSwgNzUpOworICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluayhoaXRUZXN0UmVzdWx0
KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFn
ZShoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRf
Y29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9o
aXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0UmVzdWx0KSk7CisgICAg
Z19hc3NlcnQod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX3Njcm9sbGJhcihoaXRU
ZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQoIXRlc3QtPm1fbW91c2VUYXJnZXRNb2RpZmllcnMp
OworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1Blcm1pc3Npb25SZXF1ZXN0cyhVSUNsaWVu
dFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBn
ZW9jbHVlIGdpdmUgYSBydW50aW1lIHdhcm5pbmcgYmVjYXVzZSBpdCB0cmllcworICAgIC8vIHRv
IHJlZ2lzdGVyIHRoZSBlcnJvciBxdWFyayB0d2ljZS4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD04OTg1OC4KKyAgICAvLyBNYWtlIHdhcm5pbmdzIG5vbi1mYXRh
bCBmb3IgdGhpcyB0ZXN0IHRvIG1ha2UgaXQgcGFzcy4KKyAgICB0ZXN0LT5yZW1vdmVMb2dGYXRh
bEZsYWcoR19MT0dfTEVWRUxfV0FSTklORyk7CisgICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2Fp
dFVudGlsTWFwcGVkKCk7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGdlb2xvY2F0aW9uUmVxdWVz
dEhUTUwgPQorICAgICAgICAiPGh0bWw+IgorICAgICAgICAiICA8c2NyaXB0PiIKKyAgICAgICAg
IiAgZnVuY3Rpb24gcnVuVGVzdCgpIgorICAgICAgICAiICB7IgorICAgICAgICAiICAgIG5hdmln
YXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZnVuY3Rpb24ocCkgeyBkb2N1bWVu
dC50aXRsZSA9IFwiT0tcIiB9LCIKKyAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGUpIHsgZG9jdW1lbnQudGl0bGUgPSBlLmNvZGUg
fSk7IgorICAgICAgICAiICB9IgorICAgICAgICAiICA8L3NjcmlwdD4iCisgICAgICAgICIgIDxi
b2R5IG9ubG9hZD0ncnVuVGVzdCgpOyc+PC9ib2R5PiIKKyAgICAgICAgIjwvaHRtbD4iOworCisg
ICAgLy8gVGVzdCBkZW55aW5nIGEgcGVybWlzc2lvbiByZXF1ZXN0LgorICAgIHRlc3QtPm1fYWxs
b3dQZXJtaXNzaW9uUmVxdWVzdHMgPSBmYWxzZTsKKyAgICB0ZXN0LT5sb2FkSHRtbChnZW9sb2Nh
dGlvblJlcXVlc3RIVE1MLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxUaXRsZUNoYW5nZWQoKTsK
KworICAgIC8vIEFjY29yZGluZyB0byB0aGUgR2VvbG9jYXRpb24gQVBJIHNwZWNpZmljYXRpb24s
ICcxJyBpcyB0aGUKKyAgICAvLyBlcnJvciBjb2RlIHJldHVybmVkIGZvciB0aGUgUEVSTUlTU0lP
Tl9ERU5JRUQgZXJyb3IuCisgICAgLy8gaHR0cDovL2Rldi53My5vcmcvZ2VvL2FwaS9zcGVjLXNv
dXJjZS5odG1sI3Bvc2l0aW9uX2Vycm9yX2ludGVyZmFjZQorICAgIGNvbnN0IGdjaGFyKiByZXN1
bHQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3RpdGxlKHRlc3QtPm1fd2ViVmlldyk7CisgICAgZ19h
c3NlcnRfY21wc3RyKHJlc3VsdCwgPT0sICIxIik7CisKKyAgICAvLyBUZXN0IGFsbG93aW5nIGEg
cGVybWlzc2lvbiByZXF1ZXN0LgorICAgIHRlc3QtPm1fYWxsb3dQZXJtaXNzaW9uUmVxdWVzdHMg
PSB0cnVlOworICAgIHRlc3QtPmxvYWRIdG1sKGdlb2xvY2F0aW9uUmVxdWVzdEhUTUwsIDApOwor
ICAgIHRlc3QtPndhaXRVbnRpbFRpdGxlQ2hhbmdlZCgpOworCisgICAgLy8gQ2hlY2sgdGhhdCB3
ZSBkaWQgbm90IGdldCB0aGUgUEVSTUlTU0lPTl9ERU5JRUQgZXJyb3Igbm93LgorICAgIHJlc3Vs
dCA9IHdlYmtpdF93ZWJfdmlld19nZXRfdGl0bGUodGVzdC0+bV93ZWJWaWV3KTsKKyAgICBnX2Fz
c2VydF9jbXBzdHIocmVzdWx0LCAhPSwgIjEiKTsKKyAgICB0ZXN0LT5hZGRMb2dGYXRhbEZsYWco
R19MT0dfTEVWRUxfV0FSTklORyk7Cit9CisKK2NsYXNzIEZpbGVDaG9vc2VyVGVzdDogcHVibGlj
IFVJQ2xpZW50VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShGaWxl
Q2hvb3NlclRlc3QpOworCisgICAgRmlsZUNob29zZXJUZXN0KCkKKyAgICB7CisgICAgICAgIGdf
c2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAicnVuLWZpbGUtY2hvb3NlciIsIEdfQ0FMTEJBQ0so
cnVuRmlsZUNob29zZXJDYWxsYmFjayksIHRoaXMpOworICAgIH0KKworICAgIHN0YXRpYyBnYm9v
bGVhbiBydW5GaWxlQ2hvb3NlckNhbGxiYWNrKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRGaWxlQ2hv
b3NlclJlcXVlc3QqIHJlcXVlc3QsIEZpbGVDaG9vc2VyVGVzdCogdGVzdCkKKyAgICB7CisgICAg
ICAgIHRlc3QtPnJ1bkZpbGVDaG9vc2VyKHJlcXVlc3QpOworICAgICAgICByZXR1cm4gVFJVRTsK
KyAgICB9CisKKyAgICB2b2lkIHJ1bkZpbGVDaG9vc2VyKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVz
dCogcmVxdWVzdCkKKyAgICB7CisgICAgICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0
RmluaXNoZXMoR19PQkpFQ1QocmVxdWVzdCkpOworICAgICAgICBtX2ZpbGVDaG9vc2VyUmVxdWVz
dCA9IHJlcXVlc3Q7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7CisgICAg
fQorCisgICAgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiBjbGlja01vdXNlQnV0dG9uQW5kV2Fp
dEZvckZpbGVDaG9vc2VyUmVxdWVzdChpbnQgeCwgaW50IHkpCisgICAgeworICAgICAgICBjbGlj
a01vdXNlQnV0dG9uKHgsIHkpOworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7
CisgICAgICAgIHJldHVybiBtX2ZpbGVDaG9vc2VyUmVxdWVzdC5nZXQoKTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgR1JlZlB0cjxXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q+IG1fZmlsZUNob29z
ZXJSZXF1ZXN0OworfTsKKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdGaWxlQ2hvb3NlclJlcXVl
c3QoRmlsZUNob29zZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPnNo
b3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBm
aWxlQ2hvb3NlckhUTUxGb3JtYXQgPSAiPGh0bWw+PGJvZHk+PGlucHV0IHN0eWxlPSdwb3NpdGlv
bjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjA7bWFyZ2luOjA7cGFkZGluZzowJyB0eXBlPSdmaWxlJyAl
cy8+PC9ib2R5PjwvaHRtbD4iOworCisgICAgLy8gTXVsdGlwbGUgc2VsZWN0aW9ucyBub3QgYWxs
b3dlZCwgbm8gTUlNRSBmaWx0ZXJpbmcuCisgICAgR093blB0cjxjaGFyPiBzaW1wbGVGaWxlVXBs
b2FkSFRNTChnX3N0cmR1cF9wcmludGYoZmlsZUNob29zZXJIVE1MRm9ybWF0LCAiIikpOworICAg
IHRlc3QtPmxvYWRIdG1sKHNpbXBsZUZpbGVVcGxvYWRIVE1MLmdldCgpLCAwKTsKKyAgICB0ZXN0
LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Qq
IGZpbGVDaG9vc2VyUmVxdWVzdCA9IHRlc3QtPmNsaWNrTW91c2VCdXR0b25BbmRXYWl0Rm9yRmls
ZUNob29zZXJSZXF1ZXN0KDUsIDUpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfZmlsZV9jaG9vc2Vy
X3JlcXVlc3RfZ2V0X3NlbGVjdF9tdWx0aXBsZShmaWxlQ2hvb3NlclJlcXVlc3QpKTsKKworICAg
IGNvbnN0IGdjaGFyKiBjb25zdCogbWltZVR5cGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1
ZXN0X2dldF9taW1lX3R5cGVzKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIW1p
bWVUeXBlcyk7CisgICAgR3RrRmlsZUZpbHRlciogZmlsdGVyID0gd2Via2l0X2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcihmaWxlQ2hvb3NlclJlcXVlc3QpOworICAg
IGdfYXNzZXJ0KCFmaWx0ZXIpOworICAgIGNvbnN0IGdjaGFyKiBjb25zdCogc2VsZWN0ZWRGaWxl
cyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMoZmlsZUNo
b29zZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxlcyk7CisgICAgd2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNlbChmaWxlQ2hvb3NlclJlcXVlc3QpOworCisgICAg
Ly8gTXVsdGlwbGUgc2VsZWN0aW9ucyBhbGxvd2VkLCBubyBNSU1FIGZpbHRlcmluZywgc29tZSBw
cmUtc2VsZWN0ZWQgZmlsZXMuCisgICAgR093blB0cjxjaGFyPiBtdWx0aXBsZVNlbGVjdGlvbkZp
bGVVcGxvYWRIVE1MKGdfc3RyZHVwX3ByaW50ZihmaWxlQ2hvb3NlckhUTUxGb3JtYXQsICJtdWx0
aXBsZSIpKTsKKyAgICB0ZXN0LT5sb2FkSHRtbChtdWx0aXBsZVNlbGVjdGlvbkZpbGVVcGxvYWRI
VE1MLmdldCgpLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBm
aWxlQ2hvb3NlclJlcXVlc3QgPSB0ZXN0LT5jbGlja01vdXNlQnV0dG9uQW5kV2FpdEZvckZpbGVD
aG9vc2VyUmVxdWVzdCg1LCA1KTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfZmlsZV9jaG9vc2VyX3Jl
cXVlc3RfZ2V0X3NlbGVjdF9tdWx0aXBsZShmaWxlQ2hvb3NlclJlcXVlc3QpKTsKKworICAgIG1p
bWVUeXBlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcyhmaWxl
Q2hvb3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0KCFtaW1lVHlwZXMpOworICAgIGZpbHRlciA9
IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIoZmlsZUNo
b29zZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghZmlsdGVyKTsKKyAgICBzZWxlY3RlZEZpbGVz
ID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhmaWxlQ2hv
b3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZpbGVzKTsKKworICAgIC8vIFNl
bGVjdCBzb21lIGZpbGVzLgorICAgIGNvbnN0IGdjaGFyKiBmaWxlc1RvU2VsZWN0WzRdID0geyAi
L2ZvbyIsICIvZm9vL2JhciIsICIvZm9vL2Jhci9iYXoiLCAwIH07CisgICAgd2Via2l0X2ZpbGVf
Y2hvb3Nlcl9yZXF1ZXN0X3NlbGVjdF9maWxlcyhmaWxlQ2hvb3NlclJlcXVlc3QsIGZpbGVzVG9T
ZWxlY3QpOworCisgICAgLy8gQ2hlY2sgdGhlIGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGp1c3Qgc2Vs
ZWN0ZWQuCisgICAgc2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9n
ZXRfc2VsZWN0ZWRfZmlsZXMoZmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydChzZWxl
Y3RlZEZpbGVzKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1swXSwgPT0sICIv
Zm9vIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMV0sID09LCAiL2Zvby9i
YXIiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1syXSwgPT0sICIvZm9vL2Jh
ci9iYXoiKTsKKyAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxlc1szXSk7CisKKyAgICAvLyBQZXJm
b3JtIGFub3RoZXIgcmVxdWVzdCB0byBjaGVjayBpZiB0aGUgbGlzdCBvZiBmaWxlcyBzZWxlY3Rl
ZAorICAgIC8vIGluIHRoZSBwcmV2aW91cyBzdGVwIGFwcGVhcnMgbm93IGFzIHBhcnQgb2YgdGhl
IG5ldyByZXF1ZXN0LgorICAgIGZpbGVDaG9vc2VyUmVxdWVzdCA9IHRlc3QtPmNsaWNrTW91c2VC
dXR0b25BbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0KDUsIDUpOworICAgIHNlbGVjdGVkRmls
ZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKGZpbGVD
aG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQoc2VsZWN0ZWRGaWxlcyk7CisgICAgZ19hc3Nl
cnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMF0sID09LCAiL2ZvbyIpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cihzZWxlY3RlZEZpbGVzWzFdLCA9PSwgIi9mb28vYmFyIik7CisgICAgZ19hc3NlcnRfY21w
c3RyKHNlbGVjdGVkRmlsZXNbMl0sID09LCAiL2Zvby9iYXIvYmF6Iik7CisgICAgZ19hc3NlcnQo
IXNlbGVjdGVkRmlsZXNbM10pOworICAgIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9jYW5j
ZWwoZmlsZUNob29zZXJSZXF1ZXN0KTsKKworICAgIC8vIE11bHRpcGxlIHNlbGVjdGlvbnMgbm90
IGFsbG93ZWQsIG9ubHkgYWNjZXB0IGltYWdlcywgYXVkaW8gYW5kIHZpZGVvIGZpbGVzLi4KKyAg
ICBHT3duUHRyPGNoYXI+IG1pbWVGaWx0ZXJlZEZpbGVVcGxvYWRIVE1MKGdfc3RyZHVwX3ByaW50
ZihmaWxlQ2hvb3NlckhUTUxGb3JtYXQsICJhY2NlcHQ9J2F1ZGlvLyosdmlkZW8vKixpbWFnZS8q
JyIpKTsKKyAgICB0ZXN0LT5sb2FkSHRtbChtaW1lRmlsdGVyZWRGaWxlVXBsb2FkSFRNTC5nZXQo
KSwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZmlsZUNob29z
ZXJSZXF1ZXN0ID0gdGVzdC0+Y2xpY2tNb3VzZUJ1dHRvbkFuZFdhaXRGb3JGaWxlQ2hvb3NlclJl
cXVlc3QoNSwgNSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9n
ZXRfc2VsZWN0X211bHRpcGxlKGZpbGVDaG9vc2VyUmVxdWVzdCkpOworCisgICAgbWltZVR5cGVz
ID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKGZpbGVDaG9vc2Vy
UmVxdWVzdCk7CisgICAgZ19hc3NlcnQobWltZVR5cGVzKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIo
bWltZVR5cGVzWzBdLCA9PSwgImF1ZGlvLyoiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIobWltZVR5
cGVzWzFdLCA9PSwgInZpZGVvLyoiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIobWltZVR5cGVzWzJd
LCA9PSwgImltYWdlLyoiKTsKKyAgICBnX2Fzc2VydCghbWltZVR5cGVzWzNdKTsKKworICAgIGZp
bHRlciA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIo
ZmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydChHVEtfSVNfRklMRV9GSUxURVIoZmls
dGVyKSk7CisgICAgZ19hc3NlcnQoY2hlY2tNaW1lVHlwZUZvckZpbHRlcihmaWx0ZXIsICJhdWRp
by8qIikpOworICAgIGdfYXNzZXJ0KGNoZWNrTWltZVR5cGVGb3JGaWx0ZXIoZmlsdGVyLCAidmlk
ZW8vKiIpKTsKKyAgICBnX2Fzc2VydChjaGVja01pbWVUeXBlRm9yRmlsdGVyKGZpbHRlciwgImlt
YWdlLyoiKSk7CisKKyAgICBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1
ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhmaWxlQ2hvb3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0
KCFzZWxlY3RlZEZpbGVzKTsKKyAgICB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2FuY2Vs
KGZpbGVDaG9vc2VyUmVxdWVzdCk7Cit9CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICBVSUNs
aWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJjcmVhdGUtcmVhZHktY2xvc2UiLCB0ZXN0
V2ViVmlld0NyZWF0ZVJlYWR5Q2xvc2UpOworICAgIE1vZGFsRGlhbG9nc1Rlc3Q6OmFkZCgiV2Vi
S2l0V2ViVmlldyIsICJhbGxvdy1tb2RhbC1kaWFsb2dzIiwgdGVzdFdlYlZpZXdBbGxvd01vZGFs
RGlhbG9ncyk7CisgICAgTW9kYWxEaWFsb2dzVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImRp
c2FsbG93LW1vZGFsLWRpYWxvZ3MiLCB0ZXN0V2ViVmlld0Rpc2FsbG93TW9kYWxEaWFsb2dzKTsK
KyAgICBVSUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJqYXZhc2NyaXB0LWRpYWxv
Z3MiLCB0ZXN0V2ViVmlld0phdmFTY3JpcHREaWFsb2dzKTsKKyAgICBVSUNsaWVudFRlc3Q6OmFk
ZCgiV2ViS2l0V2ViVmlldyIsICJ3aW5kb3ctcHJvcGVydGllcyIsIHRlc3RXZWJWaWV3V2luZG93
UHJvcGVydGllcyk7CisgICAgVUlDbGllbnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAibW91
c2UtdGFyZ2V0IiwgdGVzdFdlYlZpZXdNb3VzZVRhcmdldCk7CisgICAgVUlDbGllbnRUZXN0Ojph
ZGQoIldlYktpdFdlYlZpZXciLCAicGVybWlzc2lvbi1yZXF1ZXN0cyIsIHRlc3RXZWJWaWV3UGVy
bWlzc2lvblJlcXVlc3RzKTsKKyAgICBGaWxlQ2hvb3NlclRlc3Q6OmFkZCgiV2ViS2l0V2ViVmll
dyIsICJmaWxlLWNob29zZXItcmVxdWVzdCIsIHRlc3RXZWJWaWV3RmlsZUNob29zZXJSZXF1ZXN0
KTsKK30KKwordm9pZCBhZnRlckFsbCgpCit7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYkV4dGVuc2lvbnMuY3BwIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJFeHRlbnNpb25zLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWNiN2FhCi0tLSAvZGV2L251bGwKKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJFeHRlbnNpb25zLmNw
cApAQCAtMCwwICsxLDE5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5M
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiV2ViS2l0VGVzdEJ1cy5oIgorI2lu
Y2x1ZGUgIldlYlZpZXdUZXN0LmgiCisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgor
CitzdGF0aWMgV2ViS2l0VGVzdEJ1cyogYnVzOworCitzdGF0aWMgdm9pZCB0ZXN0V2ViRXh0ZW5z
aW9uR2V0VGl0bGUoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVz
dC0+bG9hZEh0bWwoIjxodG1sPjxoZWFkPjx0aXRsZT5XZWJLaXRHVEsrIFdlYiBFeHRlbnNpb25z
IFRlc3Q8L3RpdGxlPjwvaGVhZD48Ym9keT48L2JvZHk+PC9odG1sPiIsIDApOworICAgIHRlc3Qt
PndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgR1JlZlB0cjxHREJ1c1Byb3h5PiBwcm94
eSA9IGFkb3B0R1JlZihidXMtPmNyZWF0ZVByb3h5KCJvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNp
b25UZXN0IiwKKyAgICAgICAgIi9vcmcvd2Via2l0L2d0ay9XZWJFeHRlbnNpb25UZXN0IiAsICJv
cmcud2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwgdGVzdC0+bV9tYWluTG9vcCkpOworICAg
IEdSZWZQdHI8R1ZhcmlhbnQ+IHJlc3VsdCA9IGFkb3B0R1JlZihnX2RidXNfcHJveHlfY2FsbF9z
eW5jKAorICAgICAgICBwcm94eS5nZXQoKSwKKyAgICAgICAgIkdldFRpdGxlIiwKKyAgICAgICAg
Z192YXJpYW50X25ldygiKHQpIiwgd2Via2l0X3dlYl92aWV3X2dldF9wYWdlX2lkKHRlc3QtPm1f
d2ViVmlldykpLAorICAgICAgICBHX0RCVVNfQ0FMTF9GTEFHU19OT05FLAorICAgICAgICAtMSwg
MCwgMCkpOworICAgIGdfYXNzZXJ0KHJlc3VsdCk7CisKKyAgICBjb25zdCBjaGFyKiB0aXRsZTsK
KyAgICBnX3ZhcmlhbnRfZ2V0KHJlc3VsdC5nZXQoKSwgIigmcykiLCAmdGl0bGUpOworICAgIGdf
YXNzZXJ0X2NtcHN0cih0aXRsZSwgPT0sICJXZWJLaXRHVEsrIFdlYiBFeHRlbnNpb25zIFRlc3Qi
KTsKK30KKworc3RhdGljIHZvaWQgZG9jdW1lbnRMb2FkZWRDYWxsYmFjayhHREJ1c0Nvbm5lY3Rp
b24qLCBjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwg
R1ZhcmlhbnQqLCBXZWJWaWV3VGVzdCogdGVzdCkKK3sKKyAgICBnX21haW5fbG9vcF9xdWl0KHRl
c3QtPm1fbWFpbkxvb3ApOworfQorCitzdGF0aWMgdm9pZCB0ZXN0RG9jdW1lbnRMb2FkZWRTaWdu
YWwoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgR1JlZlB0cjxHREJ1
c1Byb3h5PiBwcm94eSA9IGFkb3B0R1JlZihidXMtPmNyZWF0ZVByb3h5KCJvcmcud2Via2l0Lmd0
ay5XZWJFeHRlbnNpb25UZXN0IiwKKyAgICAgICAgIi9vcmcvd2Via2l0L2d0ay9XZWJFeHRlbnNp
b25UZXN0IiwgIm9yZy53ZWJraXQuZ3RrLldlYkV4dGVuc2lvblRlc3QiLCB0ZXN0LT5tX21haW5M
b29wKSk7CisgICAgR0RCdXNDb25uZWN0aW9uKiBjb25uZWN0aW9uID0gZ19kYnVzX3Byb3h5X2dl
dF9jb25uZWN0aW9uKHByb3h5LmdldCgpKTsKKyAgICBndWludCBpZCA9IGdfZGJ1c19jb25uZWN0
aW9uX3NpZ25hbF9zdWJzY3JpYmUoY29ubmVjdGlvbiwKKyAgICAgICAgMCwKKyAgICAgICAgIm9y
Zy53ZWJraXQuZ3RrLldlYkV4dGVuc2lvblRlc3QiLAorICAgICAgICAiRG9jdW1lbnRMb2FkZWQi
LAorICAgICAgICAiL29yZy93ZWJraXQvZ3RrL1dlYkV4dGVuc2lvblRlc3QiLAorICAgICAgICAw
LAorICAgICAgICBHX0RCVVNfU0lHTkFMX0ZMQUdTX05PTkUsCisgICAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8R0RCdXNTaWduYWxDYWxsYmFjaz4oZG9jdW1lbnRMb2FkZWRDYWxsYmFjayksCisgICAg
ICAgIHRlc3QsCisgICAgICAgIDApOworICAgIGdfYXNzZXJ0KGlkKTsKKworICAgIHRlc3QtPmxv
YWRIdG1sKCI8aHRtbD48aGVhZD48dGl0bGU+V2ViS2l0R1RLKyBXZWIgRXh0ZW5zaW9ucyBUZXN0
PC90aXRsZT48L2hlYWQ+PGJvZHk+PC9ib2R5PjwvaHRtbD4iLCAwKTsKKyAgICBnX21haW5fbG9v
cF9ydW4odGVzdC0+bV9tYWluTG9vcCk7CisgICAgZ19kYnVzX2Nvbm5lY3Rpb25fc2lnbmFsX3Vu
c3Vic2NyaWJlKGNvbm5lY3Rpb24sIGlkKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYlByb2Nl
c3NDcmFzaGVkQ2FsbGJhY2soV2ViS2l0V2ViVmlldyosIFdlYlZpZXdUZXN0KiB0ZXN0KQorewor
ICAgIHRlc3QtPnF1aXRNYWluTG9vcCgpOworCisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0
aWMgdm9pZCB0ZXN0V2ViS2l0V2ViVmlld1Byb2Nlc3NDcmFzaGVkKFdlYlZpZXdUZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48L2h0bWw+Iiwg
MCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBnX3NpZ25hbF9j
b25uZWN0KHRlc3QtPm1fd2ViVmlldywgIndlYi1wcm9jZXNzLWNyYXNoZWQiLAorICAgICAgICBH
X0NBTExCQUNLKHdlYlByb2Nlc3NDcmFzaGVkQ2FsbGJhY2spLCB0ZXN0KTsKKworICAgIEdSZWZQ
dHI8R0RCdXNQcm94eT4gcHJveHkgPSBhZG9wdEdSZWYoYnVzLT5jcmVhdGVQcm94eSgib3JnLndl
YmtpdC5ndGsuV2ViRXh0ZW5zaW9uVGVzdCIsCisgICAgICAgICIvb3JnL3dlYmtpdC9ndGsvV2Vi
RXh0ZW5zaW9uVGVzdCIsICJvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwgdGVzdC0+
bV9tYWluTG9vcCkpOworCisgICAgR1JlZlB0cjxHVmFyaWFudD4gcmVzdWx0ID0gYWRvcHRHUmVm
KGdfZGJ1c19wcm94eV9jYWxsX3N5bmMoCisgICAgICAgIHByb3h5LmdldCgpLAorICAgICAgICAi
QWJvcnRQcm9jZXNzIiwKKyAgICAgICAgMCwKKyAgICAgICAgR19EQlVTX0NBTExfRkxBR1NfTk9O
RSwKKyAgICAgICAgLTEsIDAsIDApKTsKKyAgICBnX2Fzc2VydCghcmVzdWx0KTsKKyAgICBnX21h
aW5fbG9vcF9ydW4odGVzdC0+bV9tYWluTG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJF
eHRlbnNpb25XaW5kb3dPYmplY3RDbGVhcmVkKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2lu
dGVyKQoreworICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48aGVhZGVyPjwvaGVhZGVyPjxib2R5
PjwvYm9keT48L2h0bWw+IiwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7
CisKKyAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgV2ViS2l0SmF2YXNjcmlwdFJlc3Vs
dCogamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5p
c2hlZCgid2luZG93LmVjaG8oJ0ZvbycpOyIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3Nl
cnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKyAgICBH
T3duUHRyPGNoYXI+IHZhbHVlU3RyaW5nKFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9D
U3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJp
bmcuZ2V0KCksID09LCAiRm9vIik7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBzY3JpcHREaWFsb2dD
YWxsYmFjayhXZWJLaXRXZWJWaWV3KiwgV2ViS2l0U2NyaXB0RGlhbG9nKiBkaWFsb2csIGNoYXIq
KiByZXN1bHQpCit7CisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfc2NyaXB0X2RpYWxvZ19n
ZXRfZGlhbG9nX3R5cGUoZGlhbG9nKSwgPT0sIFdFQktJVF9TQ1JJUFRfRElBTE9HX0FMRVJUKTsK
KyAgICBnX2Fzc2VydCghKnJlc3VsdCk7CisgICAgKnJlc3VsdCA9IGdfc3RyZHVwKHdlYmtpdF9z
Y3JpcHRfZGlhbG9nX2dldF9tZXNzYWdlKGRpYWxvZykpOworICAgIHJldHVybiBUUlVFOworfQor
CitzdGF0aWMgdm9pZCBydW5KYXZhU2NyaXB0SW5Jc29sYXRlZFdvcmxkRmluaXNoZWRDYWxsYmFj
ayhHREJ1c1Byb3h5KiBwcm94eSwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIFdlYlZpZXdUZXN0KiB0
ZXN0KQoreworICAgIGdfZGJ1c19wcm94eV9jYWxsX2ZpbmlzaChwcm94eSwgcmVzdWx0LCAwKTsK
KyAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworfQorCitzdGF0aWMgdm9p
ZCB0ZXN0V2ViRXh0ZW5zaW9uSXNvbGF0ZWRXb3JsZChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGhlYWRlcj48L2hlYWRlcj48
Ym9keT48ZGl2IGlkPSdjb25zb2xlJz48L2Rpdj48L2JvZHk+PC9odG1sPiIsIDApOworICAgIHRl
c3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgR093blB0cjxjaGFyPiByZXN1bHQ7
CisgICAgZ3Vsb25nIHNjcmlwdERpYWxvZ0lEID0gZ19zaWduYWxfY29ubmVjdCh0ZXN0LT5tX3dl
YlZpZXcsICJzY3JpcHQtZGlhbG9nIiwgR19DQUxMQkFDSyhzY3JpcHREaWFsb2dDYWxsYmFjayks
ICZyZXN1bHQub3V0UHRyKCkpOworCisgICAgc3RhdGljIGNvbnN0IGNoYXIgKm1haW5Xb3JsZFNj
cmlwdCA9CisgICAgICAgICJ0b3AuZm9vID0gJ0Zvbyc7XG4iCisgICAgICAgICJkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmlubmVySFRNTCA9IHRvcC5mb287XG4iCisgICAgICAg
ICJ3aW5kb3cub3BlbiA9IGZ1bmN0aW9uICgpIHsgYWxlcnQoJ01haW4gV29ybGQnKTsgfVxuIgor
ICAgICAgICAiZG9jdW1lbnQub3BlbigxLCAyLCAzKTsiOworICAgIHRlc3QtPnJ1bkphdmFTY3Jp
cHRBbmRXYWl0VW50aWxGaW5pc2hlZChtYWluV29ybGRTY3JpcHQsIDApOworICAgIGdfYXNzZXJ0
X2NtcHN0cihyZXN1bHQuZ2V0KCksID09LCAiTWFpbiBXb3JsZCIpOworICAgIHJlc3VsdC5jbGVh
cigpOworCisgICAgV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCogamF2YXNjcmlwdFJlc3VsdCA9IHRl
c3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2NvbnNvbGUnKS5pbm5lckhUTUwiLCAwKTsKKyAgICBnX2Fzc2VydChqYXZhc2NyaXB0
UmVzdWx0KTsKKyAgICBHT3duUHRyPGNoYXI+IHZhbHVlU3RyaW5nKFdlYlZpZXdUZXN0OjpqYXZh
c2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAiRm9vIik7CisKKyAgICBzdGF0aWMgY29uc3Qg
Y2hhciAqaXNvbGF0ZWRXb3JsZFNjcmlwdCA9CisgICAgICAgICJkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnY29uc29sZScpLmlubmVySFRNTCA9IHRvcC5mb287XG4iCisgICAgICAgICJ3aW5kb3cu
b3BlbiA9IGZ1bmN0aW9uICgpIHsgYWxlcnQoJ0lzb2xhdGVkIFdvcmxkJyk7IH1cbiIKKyAgICAg
ICAgImRvY3VtZW50Lm9wZW4oMSwgMiwgMyk7IjsKKyAgICBHUmVmUHRyPEdEQnVzUHJveHk+IHBy
b3h5ID0gYWRvcHRHUmVmKGJ1cy0+Y3JlYXRlUHJveHkoIm9yZy53ZWJraXQuZ3RrLldlYkV4dGVu
c2lvblRlc3QiLAorICAgICAgICAiL29yZy93ZWJraXQvZ3RrL1dlYkV4dGVuc2lvblRlc3QiICwg
Im9yZy53ZWJraXQuZ3RrLldlYkV4dGVuc2lvblRlc3QiLCB0ZXN0LT5tX21haW5Mb29wKSk7Cisg
ICAgZ19kYnVzX3Byb3h5X2NhbGwocHJveHkuZ2V0KCksCisgICAgICAgICJSdW5KYXZhU2NyaXB0
SW5Jc29sYXRlZFdvcmxkIiwKKyAgICAgICAgZ192YXJpYW50X25ldygiKHQmcykiLCB3ZWJraXRf
d2ViX3ZpZXdfZ2V0X3BhZ2VfaWQodGVzdC0+bV93ZWJWaWV3KSwgaXNvbGF0ZWRXb3JsZFNjcmlw
dCksCisgICAgICAgIEdfREJVU19DQUxMX0ZMQUdTX05PTkUsCisgICAgICAgIC0xLCAwLAorICAg
ICAgICByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KHJ1bkphdmFTY3JpcHRJ
bklzb2xhdGVkV29ybGRGaW5pc2hlZENhbGxiYWNrKSwKKyAgICAgICAgdGVzdCk7CisgICAgZ19t
YWluX2xvb3BfcnVuKHRlc3QtPm1fbWFpbkxvb3ApOworICAgIGdfYXNzZXJ0X2NtcHN0cihyZXN1
bHQuZ2V0KCksID09LCAiSXNvbGF0ZWQgV29ybGQiKTsKKyAgICByZXN1bHQuY2xlYXIoKTsKKwor
ICAgIC8vIENoZWNrIHRoYXQgJ3RvcC5mb28nIGRlZmluZWQgaW4gbWFpbiB3b3JsZCBpcyBub3Qg
dmlzaWJsZSBpbiBpc29sYXRlZCB3b3JsZC4KKyAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+
cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnY29uc29sZScpLmlubmVySFRNTCIsIDApOworICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1
bHQpOworICAgIHZhbHVlU3RyaW5nLnNldChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRv
Q1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3Ry
aW5nLmdldCgpLCA9PSwgInVuZGVmaW5lZCIpOworCisgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNj
b25uZWN0KHRlc3QtPm1fd2ViVmlldywgc2NyaXB0RGlhbG9nSUQpOworfQorCit2b2lkIGJlZm9y
ZUFsbCgpCit7CisgICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF93ZWJfZXh0ZW5zaW9uc19kaXJl
Y3Rvcnkod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCksIFdFQktJVF9URVNUX1dFQl9F
WFRFTlNJT05TX0RJUik7CisgICAgYnVzID0gbmV3IFdlYktpdFRlc3RCdXMoKTsKKyAgICBpZiAo
IWJ1cy0+cnVuKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYlZpZXdUZXN0OjphZGQoIldl
YktpdFdlYkV4dGVuc2lvbiIsICJkb20tZG9jdW1lbnQtdGl0bGUiLCB0ZXN0V2ViRXh0ZW5zaW9u
R2V0VGl0bGUpOworICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYkV4dGVuc2lvbiIsICJk
b2N1bWVudC1sb2FkZWQtc2lnbmFsIiwgdGVzdERvY3VtZW50TG9hZGVkU2lnbmFsKTsKKyAgICBX
ZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgIndlYi1wcm9jZXNzLWNyYXNoZWQiLCB0
ZXN0V2ViS2l0V2ViVmlld1Byb2Nlc3NDcmFzaGVkKTsKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJX
ZWJLaXRXZWJFeHRlbnNpb24iLCAid2luZG93LW9iamVjdC1jbGVhcmVkIiwgdGVzdFdlYkV4dGVu
c2lvbldpbmRvd09iamVjdENsZWFyZWQpOworICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdl
YkV4dGVuc2lvbiIsICJpc29sYXRlZC13b3JsZCIsIHRlc3RXZWJFeHRlbnNpb25Jc29sYXRlZFdv
cmxkKTsKK30KKwordm9pZCBhZnRlckFsbCgpCit7CisgICAgZGVsZXRlIGJ1czsKK30KZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0QWNj
ZXNzaWJpbGl0eS5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVz
dFdlYktpdEFjY2Vzc2liaWxpdHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjA4ZWUwNGIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdDJHdGsvVGVzdFdlYktpdEFjY2Vzc2liaWxpdHkuY3BwCkBAIC0wLDAgKzEsMjI1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpbmNsdWRlICJUZXN0TWFpbi5oIgorI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCisK
Ky8vIFRoZSBsaWJhdHNwaSBoZWFkZXJzIGRvbid0IHVzZSBHX0JFR0lOX0RFQ0xTCitleHRlcm4g
IkMiIHsKKyNpbmNsdWRlIDxhdHNwaS9hdHNwaS5oPgorfQorCisjaW5jbHVkZSA8ZXJybm8uaD4K
KyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxzaWduYWwu
aD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVm
UHRyLmg+CisKKy8vIE5hbWUgb2YgdGhlIHRlc3Qgc2VydmVyIGFwcGxpY2F0aW9uIGNyZWF0aW5n
IHRoZSB3ZWJWaWV3IG9iamVjdC4KK3N0YXRpYyBjb25zdCBjaGFyKiBrVGVzdFNlcnZlckFwcE5h
bWUgPSAiQWNjZXNzaWJpbGl0eVRlc3RTZXJ2ZXIiOworCisvLyBNYXggc2Vjb25kcyB0byB3YWl0
IGZvciB0aGUgdGVzdCBzZXJ2ZXIgYmVmb3JlIGluc3BlY3RpbmcgaXQuCitzdGF0aWMgY29uc3Qg
aW50IGtNYXhXYWl0Rm9yQ2hpbGQgPSA1OworCisvLyBUaGUgUElEIGZvciB0aGUgdGVzdCBzZXJ2
ZXIgcnVubmluZywgc28gd2UgY2FuIGtpbGwgaXQgaWYgbmVlZGVkLgorc3RhdGljIEdQaWQga0No
aWxkUHJvY2Vzc1BpZCA9IDA7CisKKy8vIFdoZXRoZXIgdGhlIGNoaWxkIGhhcyByZXBsaWVkIGFu
ZCBpdCdzIHJlYWR5Lgorc3RhdGljIGJvb2wga0NoaWxkSXNSZWFkeSA9IGZhbHNlOworCitzdGF0
aWMgdm9pZCBzdG9wVGVzdFNlcnZlcigpCit7CisgICAgLy8gRG8gbm90aGluZyBpZiB0aGVyZSdz
IG5vIHNlcnZlciBydW5uaW5nLgorICAgIGlmICgha0NoaWxkUHJvY2Vzc1BpZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgZ19zcGF3bl9jbG9zZV9waWQoa0NoaWxkUHJvY2Vzc1BpZCk7CisgICAg
a2lsbChrQ2hpbGRQcm9jZXNzUGlkLCBTSUdURVJNKTsKKyAgICBrQ2hpbGRQcm9jZXNzUGlkID0g
MDsKK30KKworc3RhdGljIHZvaWQgc2lnQWJvcnRIYW5kbGVyKGludCBzaWdOdW0pCit7CisgICAg
Ly8gSnVzdCBzdG9wIHRoZSB0ZXN0IHNlcnZlciBpZiBTSUdBQlJUIHdhcyByZWNlaXZlZC4KKyAg
ICBzdG9wVGVzdFNlcnZlcigpOworfQorCitzdGF0aWMgZ3BvaW50ZXIgdGVzdFNlcnZlck1vbml0
b3JUaHJlYWRGdW5jKGdwb2ludGVyKQoreworICAgIC8vIFdhaXQgZm9yIHRoZSBzcGVjaWZpZWQg
dGltZW91dCB0byBoYXBwZW4uCisgICAgZ191c2xlZXAoa01heFdhaXRGb3JDaGlsZCAqIEdfVVNF
Q19QRVJfU0VDKTsKKworICAgIC8vIEtpbGwgdGhlIGNoaWxkIHByb2Nlc3MgaWYgbm90IHJlYWR5
IHlldC4KKyAgICBpZiAoIWtDaGlsZElzUmVhZHkpCisgICAgICAgIHN0b3BUZXN0U2VydmVyKCk7
CisKKyAgICBnX3RocmVhZF9leGl0KDApOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9p
ZCBzdGFydFRlc3RTZXJ2ZXJNb25pdG9yKCkKK3sKKyAgICBrQ2hpbGRJc1JlYWR5ID0gZmFsc2U7
CisgICAgZ190aHJlYWRfbmV3KCJUZXN0U2VydmVyTW9uaXRvciIsIHRlc3RTZXJ2ZXJNb25pdG9y
VGhyZWFkRnVuYywgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHN0YXJ0VGVzdFNlcnZlcigpCit7Cisg
ICAgLy8gUHJlcGFyZSBhcmd2W10gZm9yIHNwYXduaW5nIHRoZSBzZXJ2ZXIgcHJvY2Vzcy4KKyAg
ICBHT3duUHRyPGNoYXI+IHRlc3RTZXJ2ZXJQYXRoKGdfYnVpbGRfZmlsZW5hbWUoV0VCS0lUX0VY
RUNfUEFUSCwgIlRlc3RXZWJLaXRBUEkiLCAiV2ViS2l0Mkd0ayIsIGtUZXN0U2VydmVyQXBwTmFt
ZSwgTlVMTCkpOworCisgICAgY2hhciogdGVzdFNlcnZlckFyZ3ZbMl07CisgICAgdGVzdFNlcnZl
ckFyZ3ZbMF0gPSB0ZXN0U2VydmVyUGF0aC5nZXQoKTsKKyAgICB0ZXN0U2VydmVyQXJndlsxXSA9
IDA7CisKKyAgICAvLyBTcGF3biB0aGUgc2VydmVyLCBnZXR0aW5nIGl0cyBzdGRvdXQgZmlsZSBk
ZXNjcmlwdG9yIHRvIHNldCBhCisgICAgLy8gY29tbXVuaWNhdGlvbiBjaGFubmVsLCBzbyB3ZSBr
bm93IHdoZW4gaXQncyByZWFkeS4KKyAgICBpbnQgY2hpbGRTdGRvdXQgPSAwOworICAgIGlmICgh
Z19zcGF3bl9hc3luY193aXRoX3BpcGVzKDAsIHRlc3RTZXJ2ZXJBcmd2LCAwLCBzdGF0aWNfY2Fz
dDxHU3Bhd25GbGFncz4oMCksIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJmtDaGlsZFByb2Nlc3NQaWQsIDAsICZjaGlsZFN0ZG91dCwgMCwgMCkpIHsKKyAgICAgICAg
Y2xvc2UoY2hpbGRTdGRvdXQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gU3Rh
cnQgbW9uaXRvcmluZyB0aGUgdGVzdCBzZXJ2ZXIgKGluIGEgc2VwYXJhdGUgdGhyZWFkKSB0bwor
ICAgIC8vIGVuc3VyZSB3ZSBkb24ndCBibG9jayBvbiB0aGUgY2hpbGQgcHJvY2VzcyBtb3JlIHRo
YW4gYSB0aW1lb3V0LgorICAgIHN0YXJ0VGVzdFNlcnZlck1vbml0b3IoKTsKKworICAgIGNoYXIg
bXNnWzJdOworICAgIEdJT0NoYW5uZWwqIGlvQ2hhbm5lbCA9IGdfaW9fY2hhbm5lbF91bml4X25l
dyhjaGlsZFN0ZG91dCk7CisgICAgaWYgKGdfaW9fY2hhbm5lbF9yZWFkX2NoYXJzKGlvQ2hhbm5l
bCwgbXNnLCAyLCAwLCAwKSA9PSBHX0lPX1NUQVRVU19OT1JNQUwpIHsKKyAgICAgICAgLy8gQ2hl
Y2sgd2hldGhlciB0aGUgc2VydmVyIHNlbnQgYSBtZXNzYWdlIHNheWluZyBpdCdzIHJlYWR5Cisg
ICAgICAgIC8vIGFuZCBzdG9yZSB0aGUgcmVzdWx0IGdsb2JhbGx5LCBzbyB0aGUgbW9uaXRvciBj
YW4gc2VlIGl0LgorICAgICAgICBrQ2hpbGRJc1JlYWR5ID0gbXNnWzBdID09ICdPJyAmJiBtc2db
MV0gPT0gJ0snOworICAgIH0KKyAgICBnX2lvX2NoYW5uZWxfdW5yZWYoaW9DaGFubmVsKTsKKyAg
ICBjbG9zZShjaGlsZFN0ZG91dCk7CisKKyAgICAvLyBUaGUgdGltZW91dCB3YXMgcmVhY2hlZCBh
bmQgdGhlIHNlcnZlciBpcyBub3QgcmVhZHkgeWV0LCBzbworICAgIC8vIHN0b3AgaXQgaW5tZWRp
YXRlbHksIGFuZCBsZXQgdGhlIHVuaXQgdGVzdHMgZmFpbC4KKyAgICBpZiAoIWtDaGlsZElzUmVh
ZHkpCisgICAgICAgIHN0b3BUZXN0U2VydmVyKCk7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrQXRz
cGlBY2Nlc3NpYmxlKEF0c3BpQWNjZXNzaWJsZSogYWNjZXNzaWJsZSwgY29uc3QgY2hhciogdGFy
Z2V0TmFtZSwgQXRzcGlSb2xlIHRhcmdldFJvbGUpCit7CisgICAgZ19hc3NlcnQoQVRTUElfSVNf
QUNDRVNTSUJMRShhY2Nlc3NpYmxlKSk7CisKKyAgICBHT3duUHRyPGNoYXI+IG5hbWUoYXRzcGlf
YWNjZXNzaWJsZV9nZXRfbmFtZShhY2Nlc3NpYmxlLCAwKSk7CisgICAgZ19hc3NlcnRfY21wc3Ry
KHRhcmdldE5hbWUsID09LCBuYW1lLmdldCgpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGFyZ2V0
Um9sZSwgPT0sIGF0c3BpX2FjY2Vzc2libGVfZ2V0X3JvbGUoYWNjZXNzaWJsZSwgMCkpOworfQor
CitzdGF0aWMgR1JlZlB0cjxBdHNwaUFjY2Vzc2libGU+IGZpbmRUZXN0U2VydmVyQXBwbGljYXRp
b24oKQoreworICAgIC8vIE9ubHkgb25lIGRlc2t0b3AgaXMgc3VwcG9ydGVkIGJ5IEFUU1BJIGF0
IHRoZSBtb21lbnQuCisgICAgR1JlZlB0cjxBdHNwaUFjY2Vzc2libGU+IGRlc2t0b3AgPSBhZG9w
dEdSZWYoYXRzcGlfZ2V0X2Rlc2t0b3AoMCkpOworCisgICAgLy8gTG9vayBmb3IgdGhlIHNlcnZl
ciBhcHBsaWNhdGlvbiBpbiB0aGUgbGlzdCBvZiBhcHBzLgorICAgIEdSZWZQdHI8QXRzcGlBY2Nl
c3NpYmxlPiBjdXJyZW50OworICAgIGludCBjaGlsZENvdW50ID0gYXRzcGlfYWNjZXNzaWJsZV9n
ZXRfY2hpbGRfY291bnQoZGVza3RvcC5nZXQoKSwgMCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjaGlsZENvdW50OyBpKyspIHsKKyAgICAgICAgY3VycmVudCA9IGFkb3B0R1JlZihhdHNwaV9h
Y2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChkZXNrdG9wLmdldCgpLCBpLCAwKSk7CisgICAg
ICAgIGlmICghZ19zdHJjbXAwKGF0c3BpX2FjY2Vzc2libGVfZ2V0X25hbWUoY3VycmVudC5nZXQo
KSwgMCksIGtUZXN0U2VydmVyQXBwTmFtZSkpCisgICAgICAgICAgICByZXR1cm4gY3VycmVudDsK
KyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdGVzdEF0c3BpQmFzaWNI
aWVyYXJjaHkoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8gVGhl
IHRlc3Qgc2VydmVyJ3MgYWNjZXNzaWJpbGl0eSBvYmplY3QgKFVJIFByb2Nlc3MpLgorICAgIEdS
ZWZQdHI8QXRzcGlBY2Nlc3NpYmxlPiB0ZXN0U2VydmVyQXBwID0gZmluZFRlc3RTZXJ2ZXJBcHBs
aWNhdGlvbigpOworICAgIGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUodGVzdFNlcnZlckFw
cC5nZXQoKSkpOworICAgIGNoZWNrQXRzcGlBY2Nlc3NpYmxlKHRlc3RTZXJ2ZXJBcHAuZ2V0KCks
ICJBY2Nlc3NpYmlsaXR5VGVzdFNlcnZlciIsIEFUU1BJX1JPTEVfQVBQTElDQVRJT04pOworCisg
ICAgLy8gVGhlIG1haW4gd2luZG93J3MgYWNjZXNzaWJpbGl0eSBvYmplY3QgKFVJIFByb2Nlc3Mp
LgorICAgIEdSZWZQdHI8QXRzcGlBY2Nlc3NpYmxlPiBjdXJyZW50UGFyZW50ID0gdGVzdFNlcnZl
ckFwcDsKKyAgICBHUmVmUHRyPEF0c3BpQWNjZXNzaWJsZT4gY3VycmVudENoaWxkID0gYWRvcHRH
UmVmKGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQYXJlbnQuZ2V0
KCksIDAsIDApKTsKKyAgICBnX2Fzc2VydChBVFNQSV9JU19BQ0NFU1NJQkxFKGN1cnJlbnRDaGls
ZC5nZXQoKSkpOworICAgIGNoZWNrQXRzcGlBY2Nlc3NpYmxlKGN1cnJlbnRDaGlsZC5nZXQoKSwg
IiIsIEFUU1BJX1JPTEVfRlJBTUUpOworCisgICAgLy8gVGhlIFdlYlZpZXcncyBhY2Nlc3NpYmls
aXR5IG9iamVjdCAoVUkgUHJvY2VzcykuCisgICAgY3VycmVudFBhcmVudCA9IGN1cnJlbnRDaGls
ZDsKKyAgICBjdXJyZW50Q2hpbGQgPSBhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRl
eChjdXJyZW50UGFyZW50LmdldCgpLCAwLCAwKTsKKyAgICBnX2Fzc2VydChBVFNQSV9JU19BQ0NF
U1NJQkxFKGN1cnJlbnRDaGlsZC5nZXQoKSkpOworICAgIGNoZWNrQXRzcGlBY2Nlc3NpYmxlKGN1
cnJlbnRDaGlsZC5nZXQoKSwgIiIsIEFUU1BJX1JPTEVfRklMTEVSKTsKKworICAgIC8vIFRoZSBX
ZWJQYWdlJ3MgYWNjZXNzaWJpbGl0eSBvYmplY3QgKFdlYiBQcm9jZXNzKS4KKyAgICBjdXJyZW50
UGFyZW50ID0gY3VycmVudENoaWxkOworICAgIGN1cnJlbnRDaGlsZCA9IGF0c3BpX2FjY2Vzc2li
bGVfZ2V0X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQYXJlbnQuZ2V0KCksIDAsIDApOworICAgIGdf
YXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY3VycmVudENoaWxkLmdldCgpKSk7CisgICAgY2hl
Y2tBdHNwaUFjY2Vzc2libGUoY3VycmVudENoaWxkLmdldCgpLCAiIiwgQVRTUElfUk9MRV9GSUxM
RVIpOworCisgICAgLy8gSFRNTCByb290IGVsZW1lbnQncyBhY2Nlc3NpYmxlIGVsZW1lbnQgKFdl
YiBQcm9jZXNzKS4KKyAgICBjdXJyZW50UGFyZW50ID0gY3VycmVudENoaWxkOworICAgIGN1cnJl
bnRDaGlsZCA9IGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQYXJl
bnQuZ2V0KCksIDAsIDApOworICAgIGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY3VycmVu
dENoaWxkLmdldCgpKSk7CisKKyAgICAvLyBIVE1MIGJvZHkncyBhY2Nlc3NpYmxlIGVsZW1lbnQg
KFdlYiBQcm9jZXNzKS4KKyAgICBjdXJyZW50UGFyZW50ID0gY3VycmVudENoaWxkOworICAgIGN1
cnJlbnRDaGlsZCA9IGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQ
YXJlbnQuZ2V0KCksIDAsIDApOworICAgIGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY3Vy
cmVudENoaWxkLmdldCgpKSk7CisgICAgY2hlY2tBdHNwaUFjY2Vzc2libGUoY3VycmVudENoaWxk
LmdldCgpLCAiIiwgQVRTUElfUk9MRV9ET0NVTUVOVF9XRUIpOworCisgICAgLy8gSFRNTCBIMSdz
IGFjY2Vzc2libGUgZWxlbWVudCAoV2ViIFByb2Nlc3MpLgorICAgIGN1cnJlbnRQYXJlbnQgPSBj
dXJyZW50Q2hpbGQ7CisgICAgY3VycmVudENoaWxkID0gYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hp
bGRfYXRfaW5kZXgoY3VycmVudFBhcmVudC5nZXQoKSwgMCwgMCk7CisgICAgZ19hc3NlcnQoQVRT
UElfSVNfQUNDRVNTSUJMRShjdXJyZW50Q2hpbGQuZ2V0KCkpKTsKKyAgICBjaGVja0F0c3BpQWNj
ZXNzaWJsZShjdXJyZW50Q2hpbGQuZ2V0KCksICJUaGlzIGlzIGEgdGVzdCIsIEFUU1BJX1JPTEVf
SEVBRElORyk7CisKKyAgICAvLyBIVE1MIGZpcnN0IHBhcmFncmFwaCdzIGFjY2Vzc2libGUgZWxl
bWVudCAoV2ViIFByb2Nlc3MpLgorICAgIGN1cnJlbnRDaGlsZCA9IGF0c3BpX2FjY2Vzc2libGVf
Z2V0X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQYXJlbnQuZ2V0KCksIDEsIDApOworICAgIGdfYXNz
ZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY3VycmVudENoaWxkLmdldCgpKSk7CisgICAgY2hlY2tB
dHNwaUFjY2Vzc2libGUoY3VycmVudENoaWxkLmdldCgpLCAiIiwgQVRTUElfUk9MRV9QQVJBR1JB
UEgpOworCisgICAgLy8gSFRNTCBzZWNvbmQgcGFyYWdyYXBoJ3MgYWNjZXNzaWJsZSBlbGVtZW50
IChXZWIgUHJvY2VzcykuCisgICAgY3VycmVudENoaWxkID0gYXRzcGlfYWNjZXNzaWJsZV9nZXRf
Y2hpbGRfYXRfaW5kZXgoY3VycmVudFBhcmVudC5nZXQoKSwgMiwgMCk7CisgICAgZ19hc3NlcnQo
QVRTUElfSVNfQUNDRVNTSUJMRShjdXJyZW50Q2hpbGQuZ2V0KCkpKTsKKyAgICBjaGVja0F0c3Bp
QWNjZXNzaWJsZShjdXJyZW50Q2hpbGQuZ2V0KCksICIiLCBBVFNQSV9ST0xFX1BBUkFHUkFQSCk7
CisKKyAgICAvLyBIVE1MIGxpbmsncyBhY2Nlc3NpYmxlIGVsZW1lbnQgKFdlYiBQcm9jZXNzKS4K
KyAgICBjdXJyZW50UGFyZW50ID0gY3VycmVudENoaWxkOworICAgIGN1cnJlbnRDaGlsZCA9IGF0
c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQYXJlbnQuZ2V0KCksIDAs
IDApOworICAgIGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY3VycmVudENoaWxkLmdldCgp
KSk7CisgICAgY2hlY2tBdHNwaUFjY2Vzc2libGUoY3VycmVudENoaWxkLmdldCgpLCAiYSBsaW5r
IiwgQVRTUElfUk9MRV9MSU5LKTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQoreworICAgIC8vIFdl
IGluc3RhbGwgYSBoYW5kbGVyIHRvIGVuc3VyZSB0aGF0IHdlIGtpbGwgdGhlIGNoaWxkIHByb2Nl
c3MKKyAgICAvLyBpZiB0aGUgcGFyZW50IGRpZXMgYmVjYXVzZSBvZiB3aGF0ZXZlciB0aGUgcmVh
c29uIGlzLgorICAgIHNpZ25hbChTSUdBQlJULCBzaWdBYm9ydEhhbmRsZXIpOworCisgICAgLy8g
U3RhcnQgdGhlIGFjY2Vzc2liaWxpdHkgdGVzdCBzZXJ2ZXIgYW5kIGxvYWQgdGhlIHRlc3RzLgor
ICAgIHN0YXJ0VGVzdFNlcnZlcigpOworICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdEFjY2Vz
c2liaWxpdHkiLCAiYXRzcGktYmFzaWMtaGllcmFyY2h5IiwgdGVzdEF0c3BpQmFzaWNIaWVyYXJj
aHkpOworfQorCit2b2lkIGFmdGVyQWxsKCkKK3sKKyAgICAvLyBFbnN1cmUgd2Ugc3RvcCB0aGUg
c2VydmVyLgorICAgIHN0b3BUZXN0U2VydmVyKCk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdEZhdmljb25EYXRhYmFzZS5jcHAg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdEZhdmljb25E
YXRhYmFzZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEwNmY3NAot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9U
ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlLmNwcApAQCAtMCwwICsxLDI3NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5j
bHVkZSAiV2ViS2l0VGVzdFNlcnZlci5oIgorI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCisjaW5j
bHVkZSA8Z2xpYi9nc3RkaW8uaD4KKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKyNpbmNsdWRl
IDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisKK3N0YXRpYyBXZWJLaXRUZXN0U2VydmVyKiBrU2Vy
dmVyOworc3RhdGljIGNoYXIqIGtUZW1wRGlyZWN0b3J5OworCitjbGFzcyBGYXZpY29uRGF0YWJh
c2VUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNU
X0ZJWFRVUkUoRmF2aWNvbkRhdGFiYXNlVGVzdCk7CisKKyAgICBGYXZpY29uRGF0YWJhc2VUZXN0
KCkKKyAgICAgICAgOiBtX3dlYkNvbnRleHQod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0
KCkpCisgICAgICAgICwgbV9mYXZpY29uKDApCisgICAgICAgICwgbV9lcnJvcigwKQorICAgICAg
ICAsIG1fZmF2aWNvbk5vdGlmaWNhdGlvblJlY2VpdmVkKGZhbHNlKQorICAgIHsKKyAgICAgICAg
V2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRf
ZmF2aWNvbl9kYXRhYmFzZShtX3dlYkNvbnRleHQpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0
KGRhdGFiYXNlLCAiZmF2aWNvbi1jaGFuZ2VkIiwgR19DQUxMQkFDSyhmYXZpY29uQ2hhbmdlZENh
bGxiYWNrKSwgdGhpcyk7CisgICAgfQorCisgICAgfkZhdmljb25EYXRhYmFzZVRlc3QoKQorICAg
IHsKKyAgICAgICAgaWYgKG1fZmF2aWNvbikKKyAgICAgICAgICAgIGNhaXJvX3N1cmZhY2VfZGVz
dHJveShtX2Zhdmljb24pOworCisgICAgICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJh
c2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2UobV93ZWJDb250ZXh0
KTsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKGRhdGFiYXNl
LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgdm9pZCBmYXZpY29uQ2hhbmdlZENhbGxiYWNrKFdlYktpdEZhdmljb25EYXRhYmFzZSog
ZGF0YWJhc2UsIGNvbnN0IGNoYXIqIHBhZ2VVUkksIGNvbnN0IGNoYXIqIGZhdmljb25VUkksIEZh
dmljb25EYXRhYmFzZVRlc3QqIHRlc3QpCisgICAgeworICAgICAgICBpZiAoIWdfc3RyY21wMCh3
ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSh0ZXN0LT5tX3dlYlZpZXcpLCBwYWdlVVJJKSkKKyAgICAg
ICAgICAgIHRlc3QtPm1fZmF2aWNvblVSSSA9IGZhdmljb25VUkk7CisgICAgfQorCisgICAgc3Rh
dGljIHZvaWQgdmlld0Zhdmljb25DaGFuZ2VkQ2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmll
dywgR1BhcmFtU3BlYyogcHNwZWMsIGdwb2ludGVyIGRhdGEpCisgICAgeworICAgICAgICBGYXZp
Y29uRGF0YWJhc2VUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8RmF2aWNvbkRhdGFiYXNlVGVzdCo+
KGRhdGEpOworICAgICAgICBnX2Fzc2VydCh0ZXN0LT5tX3dlYlZpZXcgPT0gd2ViVmlldyk7Cisg
ICAgICAgIHRlc3QtPm1fZmF2aWNvbk5vdGlmaWNhdGlvblJlY2VpdmVkID0gdHJ1ZTsKKyAgICAg
ICAgdGVzdC0+cXVpdE1haW5Mb29wKCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZ2V0RmF2
aWNvbkNhbGxiYWNrKEdPYmplY3QqIHNvdXJjZU9iamVjdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQs
IHZvaWQqIGRhdGEpCisgICAgeworICAgICAgICBGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0ID0g
c3RhdGljX2Nhc3Q8RmF2aWNvbkRhdGFiYXNlVGVzdCo+KGRhdGEpOworICAgICAgICBXZWJLaXRG
YXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29u
X2RhdGFiYXNlKHRlc3QtPm1fd2ViQ29udGV4dCk7CisgICAgICAgIHRlc3QtPm1fZmF2aWNvbiA9
IHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX2ZpbmlzaChkYXRhYmFzZSwgcmVz
dWx0LCAmdGVzdC0+bV9lcnJvci5vdXRQdHIoKSk7CisgICAgICAgIHRlc3QtPnF1aXRNYWluTG9v
cCgpOworICAgIH0KKworICAgIHZvaWQgd2FpdFVudGlsRmF2aWNvbkNoYW5nZWQoKQorICAgIHsK
KyAgICAgICAgbV9mYXZpY29uTm90aWZpY2F0aW9uUmVjZWl2ZWQgPSBmYWxzZTsKKyAgICAgICAg
dW5zaWduZWQgbG9uZyBoYW5kbGVySUQgPSBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgIm5v
dGlmeTo6ZmF2aWNvbiIsIEdfQ0FMTEJBQ0sodmlld0Zhdmljb25DaGFuZ2VkQ2FsbGJhY2spLCB0
aGlzKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgICAgICBnX3Np
Z25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QobV93ZWJWaWV3LCBoYW5kbGVySUQpOworICAgIH0KKwor
ICAgIHZvaWQgZ2V0RmF2aWNvbkZvclBhZ2VVUklBbmRXYWl0VW50aWxSZWFkeShjb25zdCBjaGFy
KiBwYWdlVVJJKQorICAgIHsKKyAgICAgICAgbV9lcnJvci5jbGVhcigpOworICAgICAgICBpZiAo
bV9mYXZpY29uKSB7CisgICAgICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3kobV9mYXZpY29u
KTsKKyAgICAgICAgICAgIG1fZmF2aWNvbiA9IDA7CisgICAgICAgIH0KKworICAgICAgICBXZWJL
aXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZp
Y29uX2RhdGFiYXNlKG1fd2ViQ29udGV4dCk7CisgICAgICAgIHdlYmtpdF9mYXZpY29uX2RhdGFi
YXNlX2dldF9mYXZpY29uKGRhdGFiYXNlLCBwYWdlVVJJLCAwLCBnZXRGYXZpY29uQ2FsbGJhY2ss
IHRoaXMpOworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgfQorCisg
ICAgV2ViS2l0V2ViQ29udGV4dCogbV93ZWJDb250ZXh0OworICAgIGNhaXJvX3N1cmZhY2VfdCog
bV9mYXZpY29uOworICAgIENTdHJpbmcgbV9mYXZpY29uVVJJOworICAgIEdPd25QdHI8R0Vycm9y
PiBtX2Vycm9yOworICAgIGJvb2wgbV9mYXZpY29uTm90aWZpY2F0aW9uUmVjZWl2ZWQ7Cit9Owor
CitzdGF0aWMgdm9pZAorc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVz
c2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSogcXVlcnksIFNvdXBD
bGllbnRDb250ZXh0KiBjb250ZXh0LCB2b2lkKiBkYXRhKQoreworICAgIGlmIChtZXNzYWdlLT5t
ZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3Rh
dHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9mYXZpY29uLmljbyIpKSB7
CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05P
VF9GT1VORCk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJl
c3BvbnNlX2JvZHkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2hhciogY29udGVu
dHM7CisgICAgZ3NpemUgbGVuZ3RoOworICAgIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2ljb24v
ZmF2aWNvbi5pY28iKSkgeworICAgICAgICBHT3duUHRyPGNoYXI+IHBhdGhUb0Zhdmljb24oZ19i
dWlsZF9maWxlbmFtZShUZXN0OjpnZXRXZWJLaXQxVGVzdFJlc291Y2VzRGlyKCkuZGF0YSgpLCAi
YmxhbmsuaWNvIiwgTlVMTCkpOworICAgICAgICBnX2ZpbGVfZ2V0X2NvbnRlbnRzKHBhdGhUb0Zh
dmljb24uZ2V0KCksICZjb250ZW50cywgJmxlbmd0aCwgMCk7CisgICAgICAgIHNvdXBfbWVzc2Fn
ZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBj
b250ZW50cywgbGVuZ3RoKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvbm9m
YXZpY29uIikpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIG5vRmF2aWNvbkhUTUwgPSAi
PGh0bWw+PGhlYWQ+PGJvZHk+dGVzdDwvYm9keT48L2h0bWw+IjsKKyAgICAgICAgc291cF9tZXNz
YWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJ
Qywgbm9GYXZpY29uSFRNTCwgc3RybGVuKG5vRmF2aWNvbkhUTUwpKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogY29udGVudHNIVE1MID0gIjxodG1sPjxoZWFkPjxs
aW5rIHJlbD0naWNvbicgaHJlZj0nL2ljb24vZmF2aWNvbi5pY28nIHR5cGU9J2ltYWdlL3gtaWNv
OyBjaGFyc2V0PWJpbmFyeSc+PC9oZWFkPjxib2R5PnRlc3Q8L2JvZHk+PC9odG1sPiI7CisgICAg
ICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQ
X01FTU9SWV9TVEFUSUMsIGNvbnRlbnRzSFRNTCwgc3RybGVuKGNvbnRlbnRzSFRNTCkpOworICAg
IH0KKworICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09L
KTsKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5
KTsKK30KKworc3RhdGljIHZvaWQgdGVzdE5vdEluaXRpYWxpemVkKEZhdmljb25EYXRhYmFzZVRl
c3QqIHRlc3QpCit7CisgICAgLy8gVHJ5IHRvIHJldHJpZXZlIGEgdmFsaWQgZmF2aWNvbiBmcm9t
IGEgbm90IGluaXRpYWxpemVkIGRhdGFiYXNlLgorICAgIHRlc3QtPmdldEZhdmljb25Gb3JQYWdl
VVJJQW5kV2FpdFVudGlsUmVhZHkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2ZvbyIpLmRhdGEo
KSk7CisgICAgZ19hc3NlcnQoIXRlc3QtPm1fZmF2aWNvbik7CisgICAgZ19hc3NlcnQodGVzdC0+
bV9lcnJvcik7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fZXJyb3ItPmNvZGUsID09LCBX
RUJLSVRfRkFWSUNPTl9EQVRBQkFTRV9FUlJPUl9OT1RfSU5JVElBTElaRUQpOworfQorCitzdGF0
aWMgdm9pZCB0ZXN0U2V0RGlyZWN0b3J5KEZhdmljb25EYXRhYmFzZVRlc3QqIHRlc3QpCit7Cisg
ICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF9mYXZpY29uX2RhdGFiYXNlX2RpcmVjdG9yeSh0ZXN0
LT5tX3dlYkNvbnRleHQsIGtUZW1wRGlyZWN0b3J5KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoa1Rl
bXBEaXJlY3RvcnksID09LCB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2Vf
ZGlyZWN0b3J5KHRlc3QtPm1fd2ViQ29udGV4dCkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0Q2xl
YXJEYXRhYmFzZShGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0KQoreworICAgIFdlYktpdEZhdmlj
b25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0
YWJhc2UodGVzdC0+bV93ZWJDb250ZXh0KTsKKyAgICB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9j
bGVhcihkYXRhYmFzZSk7CisKKyAgICBHT3duUHRyPGNoYXI+IGljb25VUkkod2Via2l0X2Zhdmlj
b25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fdXJpKGRhdGFiYXNlLCBrU2VydmVyLT5nZXRVUklGb3JQ
YXRoKCIvZm9vIikuZGF0YSgpKSk7CisgICAgZ19hc3NlcnQoIWljb25VUkkpOworfQorCitzdGF0
aWMgdm9pZCB0ZXN0R2V0RmF2aWNvbihGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0KQoreworICAg
IC8vIFdlIG5lZWQgdG8gbG9hZCB0aGUgcGFnZSBmaXJzdCB0byBlbnN1cmUgdGhlIGljb24gZGF0
YSB3aWxsIGJlCisgICAgLy8gaW4gdGhlIGRhdGFiYXNlIGluIGNhc2UgdGhlcmUncyBhbiBhc3Nv
Y2lhdGVkIGZhdmljb24uCisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRo
KCIvZm9vIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGYXZpY29uQ2hhbmdlZCgpOwor
ICAgIENTdHJpbmcgZmF2aWNvblVSSSA9IGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pY29uL2Zh
dmljb24uaWNvIik7CisKKyAgICAvLyBDaGVjayB0aGUgQVBJIHJldHJpZXZpbmcgYSB2YWxpZCBm
YXZpY29uLgorICAgIHRlc3QtPmdldEZhdmljb25Gb3JQYWdlVVJJQW5kV2FpdFVudGlsUmVhZHko
a1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2ZvbyIpLmRhdGEoKSk7CisgICAgZ19hc3NlcnQodGVz
dC0+bV9mYXZpY29uKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9mYXZpY29uVVJJLmRh
dGEoKSwgPT0sIGZhdmljb25VUkkuZGF0YSgpKTsKKyAgICBnX2Fzc2VydCghdGVzdC0+bV9lcnJv
cik7CisKKyAgICAvLyBDaGVjayB0aGF0IHdpZHRoIGFuZCBoZWlnaHQgbWF0Y2ggdGhvc2UgZnJv
bSBibGFuay5pY28gKDE2eDE2IGZhdmljb24pLgorICAgIGdfYXNzZXJ0X2NtcGludChjYWlyb19p
bWFnZV9zdXJmYWNlX2dldF93aWR0aCh0ZXN0LT5tX2Zhdmljb24pLCA9PSwgMTYpOworICAgIGdf
YXNzZXJ0X2NtcGludChjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQodGVzdC0+bV9mYXZp
Y29uKSwgPT0sIDE2KTsKKworICAgIC8vIENoZWNrIHRoYXQgYW5vdGhlciBwYWdlIHdpdGggdGhl
IHNhbWUgZmF2aWNvbiByZXR1cm4gdGhlIHNhbWUgaWNvbi4KKyAgICBjYWlyb19zdXJmYWNlX3Qq
IGZhdmljb24gPSBjYWlyb19zdXJmYWNlX3JlZmVyZW5jZSh0ZXN0LT5tX2Zhdmljb24pOworICAg
IHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2JhciIpLmRhdGEoKSk7Cisg
ICAgLy8gSXQncyBhIG5ldyBwYWdlIGluIHRoZSBkYXRhYmFzZSwgc28gZmF2aWNvbiB3aWxsIGNo
YW5nZSB0d2ljZSwgZmlyc3QgdG8gcmVzZXQgaXQKKyAgICAvLyBhbmQgdGhlbiB3aGVuIHRoZSBp
Y29uIGlzIGxvYWRlZC4KKyAgICB0ZXN0LT53YWl0VW50aWxGYXZpY29uQ2hhbmdlZCgpOworICAg
IHRlc3QtPndhaXRVbnRpbEZhdmljb25DaGFuZ2VkKCk7CisgICAgdGVzdC0+Z2V0RmF2aWNvbkZv
clBhZ2VVUklBbmRXYWl0VW50aWxSZWFkeShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvYmFyIiku
ZGF0YSgpKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX2Zhdmljb24pOworICAgIGdfYXNzZXJ0X2Nt
cHN0cih0ZXN0LT5tX2Zhdmljb25VUkkuZGF0YSgpLCA9PSwgZmF2aWNvblVSSS5kYXRhKCkpOwor
ICAgIGdfYXNzZXJ0KHRlc3QtPm1fZmF2aWNvbiA9PSBmYXZpY29uKTsKKyAgICBnX2Fzc2VydCgh
dGVzdC0+bV9lcnJvcik7CisgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KGZhdmljb24pOworCisg
ICAgLy8gQ2hlY2sgdGhlIEFQSSByZXRyaWV2aW5nIGFuIGludmFsaWQgZmF2aWNvbi4KKyAgICB0
ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9ub2Zhdmljb24iKS5kYXRhKCkp
OworICAgIHRlc3QtPndhaXRVbnRpbEZhdmljb25DaGFuZ2VkKCk7CisKKyAgICB0ZXN0LT5nZXRG
YXZpY29uRm9yUGFnZVVSSUFuZFdhaXRVbnRpbFJlYWR5KGtTZXJ2ZXItPmdldFVSSUZvclBhdGgo
Ii9ub2Zhdmljb24iKS5kYXRhKCkpOworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX2Zhdmljb24pOwor
ICAgIGdfYXNzZXJ0KHRlc3QtPm1fZXJyb3IpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0R2V0RmF2
aWNvblVSSShGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0KQoreworICAgIFdlYktpdEZhdmljb25E
YXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJh
c2UodGVzdC0+bV93ZWJDb250ZXh0KTsKKworICAgIENTdHJpbmcgYmFzZVVSSSA9IGtTZXJ2ZXIt
PmdldFVSSUZvclBhdGgoIi9mb28iKTsKKyAgICBHT3duUHRyPGNoYXI+IGljb25VUkkod2Via2l0
X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fdXJpKGRhdGFiYXNlLCBiYXNlVVJJLmRhdGEo
KSkpOworICAgIEFTU0VSVF9DTVBfQ1NUUklORyhpY29uVVJJLmdldCgpLCA9PSwga1NlcnZlci0+
Z2V0VVJJRm9yUGF0aCgiL2ljb24vZmF2aWNvbi5pY28iKSk7Cit9CisKK3N0YXRpYyB2b2lkIHRl
c3RXZWJWaWV3RmF2aWNvbihGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0KQoreworICAgIHRlc3Qt
Pm1fZmF2aWNvblVSSSA9IENTdHJpbmcoKTsKKworICAgIGNhaXJvX3N1cmZhY2VfdCogaWNvbkZy
b21XZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X2dldF9mYXZpY29uKHRlc3QtPm1fd2ViVmlldyk7
CisgICAgZ19hc3NlcnQoIWljb25Gcm9tV2ViVmlldyk7CisKKyAgICB0ZXN0LT5sb2FkVVJJKGtT
ZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9mb28iKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRp
bEZhdmljb25DaGFuZ2VkKCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9mYXZpY29uTm90aWZpY2F0
aW9uUmVjZWl2ZWQpOworICAgIC8vIFRoZSBpY29uIGlzIGtub3duIGFuZCBoYXNuJ3QgY2hhbmdl
ZCBpbiB0aGUgZGF0YWJhc2UsIHNvIG5vdGlmeTo6ZmF2aWNvbiBpcyBlbWl0dGVkCisgICAgLy8g
YnV0IFdlYktpdEZhdmljb25EYXRhYmFzZTo6aWNvbi1jaGFuZ2VkIGlzbid0LgorICAgIGdfYXNz
ZXJ0KHRlc3QtPm1fZmF2aWNvblVSSS5pc051bGwoKSk7CisKKyAgICBpY29uRnJvbVdlYlZpZXcg
PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2Zhdmljb24odGVzdC0+bV93ZWJWaWV3KTsKKyAgICBnX2Fz
c2VydChpY29uRnJvbVdlYlZpZXcpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQoY2Fpcm9faW1hZ2Vf
c3VyZmFjZV9nZXRfd2lkdGgoaWNvbkZyb21XZWJWaWV3KSwgPT0sIDE2KTsKKyAgICBnX2Fzc2Vy
dF9jbXB1aW50KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChpY29uRnJvbVdlYlZpZXcp
LCA9PSwgMTYpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0RmF2aWNvbkRhdGFiYXNlKEZhdmljb25E
YXRhYmFzZVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8gVGhlc2UgdGVzdHMg
ZGVwZW5kIG9uIHRoaXMgb3JkZXIgdG8gcnVuIHByb3Blcmx5IHNvIHdlIGRlY2xhcmUgdGhlbSBp
biBhIHNpbmdsZSBvbmUuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMTE0MzQuCisgICAgdGVzdE5vdEluaXRpYWxpemVkKHRlc3QpOworICAgIHRl
c3RTZXREaXJlY3RvcnkodGVzdCk7CisgICAgdGVzdEdldEZhdmljb24odGVzdCk7CisgICAgdGVz
dEdldEZhdmljb25VUkkodGVzdCk7CisgICAgdGVzdFdlYlZpZXdGYXZpY29uKHRlc3QpOworICAg
IHRlc3RDbGVhckRhdGFiYXNlKHRlc3QpOworfQorCit2b2lkIGJlZm9yZUFsbCgpCit7CisgICAg
Ly8gU3RhcnQgYSBzb3VwIHNlcnZlciBmb3IgdGVzdGluZy4KKyAgICBrU2VydmVyID0gbmV3IFdl
YktpdFRlc3RTZXJ2ZXIoKTsKKyAgICBrU2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2spOworCisg
ICAga1RlbXBEaXJlY3RvcnkgPSBnX2Rpcl9tYWtlX3RtcCgiV2ViS2l0MlRlc3RzLVhYWFhYWCIs
IDApOworICAgIGdfYXNzZXJ0KGtUZW1wRGlyZWN0b3J5KTsKKworICAgIC8vIEFkZCB0ZXN0cyB0
byB0aGUgc3VpdGUuCisgICAgRmF2aWNvbkRhdGFiYXNlVGVzdDo6YWRkKCJXZWJLaXRGYXZpY29u
RGF0YWJhc2UiLCAiZmF2aWNvbi1kYXRhYmFzZS10ZXN0IiwgdGVzdEZhdmljb25EYXRhYmFzZSk7
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdEZhdmljb25EYXRhYmFzZUZpbmFsaXplZENhbGxiYWNr
KGdwb2ludGVyLCBHT2JqZWN0KikKK3sKKyAgICBpZiAoIWdfZmlsZV90ZXN0KGtUZW1wRGlyZWN0
b3J5LCBHX0ZJTEVfVEVTVF9JU19ESVIpKQorICAgICAgICByZXR1cm47CisKKyAgICBHT3duUHRy
PGNoYXI+IGZpbGVuYW1lKGdfYnVpbGRfZmlsZW5hbWUoa1RlbXBEaXJlY3RvcnksICJXZWJwYWdl
SWNvbnMuZGIiLCBOVUxMKSk7CisgICAgZ191bmxpbmsoZmlsZW5hbWUuZ2V0KCkpOworCisgICAg
Z19ybWRpcihrVGVtcERpcmVjdG9yeSk7Cit9CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworICAgIGRl
bGV0ZSBrU2VydmVyOworCisgICAgLy8gRGVsZXRlIHRoZSB0ZW1wb3JhcnkgZmlsZXMgYWZ0ZXIg
dGhlIEljb25EYXRhYmFzZSBoYXMgYmVlbgorICAgIC8vIGNsb3NlZCwgdGhhdCBpcywgb25jZSBX
ZWJLaXRGYXZpY29uRGF0YWJhc2UgaXMgYmVpbmcgZGVzdHJveWVkLgorICAgIFdlYktpdEZhdmlj
b25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0
YWJhc2Uod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCkpOworICAgIGdfb2JqZWN0X3dl
YWtfcmVmKEdfT0JKRUNUKGRhdGFiYXNlKSwgd2Via2l0RmF2aWNvbkRhdGFiYXNlRmluYWxpemVk
Q2FsbGJhY2ssIDApOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyR3RrL1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxlci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdEZpbmRDb250cm9sbGVyLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmVlZjRjCi0tLSAvZGV2L251bGwKKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRGaW5kQ29udHJv
bGxlci5jcHAKQEAgLTAsMCArMSwzMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdh
bGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkxvYWRUcmFja2luZ1Rl
c3QuaCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+
CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCitzdGF0aWMgY29uc3QgY2hhciog
dGVzdFN0cmluZyA9ICI8aHRtbD48Ym9keT5maXJzdCB0ZXN0aW5nIHNlY29uZCB0ZXN0aW5nIHNl
Y29uZEhhbGY8L2JvZHk+PC9odG1sPiI7CisKK2NsYXNzIEZpbmRDb250cm9sbGVyVGVzdDogcHVi
bGljIFdlYlZpZXdUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKEZp
bmRDb250cm9sbGVyVGVzdCk7CisKKyAgICBGaW5kQ29udHJvbGxlclRlc3QoKQorICAgICAgICA6
IG1fZmluZENvbnRyb2xsZXIod2Via2l0X3dlYl92aWV3X2dldF9maW5kX2NvbnRyb2xsZXIobV93
ZWJWaWV3KSkKKyAgICAgICAgLCBtX3J1bkZpbmRVbnRpbENvbXBsZXRpb24oZmFsc2UpCisgICAg
eworICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNU
KG1fZmluZENvbnRyb2xsZXIuZ2V0KCkpKTsKKyAgICB9CisKKyAgICB+RmluZENvbnRyb2xsZXJU
ZXN0KCkKKyAgICB7CisgICAgICAgIGlmIChtX2ZpbmRDb250cm9sbGVyKQorICAgICAgICAgICAg
Z19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fZmluZENvbnRyb2xsZXIuZ2V0
KCksIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOworICAgIH0KKworICAg
IHZvaWQgZmluZChjb25zdCBjaGFyKiBzZWFyY2hUZXh0LCBndWludDMyIGZpbmRPcHRpb25zLCBn
dWludCBtYXhNYXRjaENvdW50KQorICAgIHsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX2Zp
bmRDb250cm9sbGVyLmdldCgpLCAiZm91bmQtdGV4dCIsIEdfQ0FMTEJBQ0soZm91bmRUZXh0Q2Fs
bGJhY2spLCB0aGlzKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX2ZpbmRDb250cm9sbGVy
LmdldCgpLCAiZmFpbGVkLXRvLWZpbmQtdGV4dCIsIEdfQ0FMTEJBQ0soZmFpbGVkVG9GaW5kVGV4
dENhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNo
KG1fZmluZENvbnRyb2xsZXIuZ2V0KCksIHNlYXJjaFRleHQsIGZpbmRPcHRpb25zLCBtYXhNYXRj
aENvdW50KTsKKyAgICB9CisKKyAgICB2b2lkIGNvdW50KGNvbnN0IGNoYXIqIHNlYXJjaFRleHQs
IGd1aW50MzIgZmluZE9wdGlvbnMsIGd1aW50IG1heE1hdGNoQ291bnQpCisgICAgeworICAgICAg
ICBnX3NpZ25hbF9jb25uZWN0KG1fZmluZENvbnRyb2xsZXIuZ2V0KCksICJjb3VudGVkLW1hdGNo
ZXMiLCBHX0NBTExCQUNLKGNvdW50ZWRNYXRjaGVzQ2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAg
d2Via2l0X2ZpbmRfY29udHJvbGxlcl9jb3VudF9tYXRjaGVzKG1fZmluZENvbnRyb2xsZXIuZ2V0
KCksIHNlYXJjaFRleHQsIGZpbmRPcHRpb25zLCBtYXhNYXRjaENvdW50KTsKKyAgICB9CisKKyAg
ICB2b2lkIHdhaXRVbnRpbEZpbmRGaW5pc2hlZCgpCisgICAgeworICAgICAgICBtX3J1bkZpbmRV
bnRpbENvbXBsZXRpb24gPSB0cnVlOworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9v
cCk7CisgICAgfQorCisgICAgR1JlZlB0cjxXZWJLaXRGaW5kQ29udHJvbGxlcj4gbV9maW5kQ29u
dHJvbGxlcjsKKyAgICBib29sIG1fdGV4dEZvdW5kOworICAgIHVuc2lnbmVkIG1fbWF0Y2hDb3Vu
dDsKKworcHJpdmF0ZToKKyAgICBib29sIG1fcnVuRmluZFVudGlsQ29tcGxldGlvbjsKKworICAg
IHN0YXRpYyB2b2lkIGZvdW5kVGV4dENhbGxiYWNrKFdlYktpdEZpbmRDb250cm9sbGVyKiwgZ3Vp
bnQgbWF0Y2hDb3VudCwgRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAg
dGVzdC0+bV90ZXh0Rm91bmQgPSB0cnVlOworICAgICAgICB0ZXN0LT5tX21hdGNoQ291bnQgPSBt
YXRjaENvdW50OworICAgICAgICBpZiAodGVzdC0+bV9ydW5GaW5kVW50aWxDb21wbGV0aW9uKQor
ICAgICAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgdm9pZCBmYWlsZWRUb0ZpbmRUZXh0Q2FsbGJhY2soV2ViS2l0RmluZENvbnRy
b2xsZXIqLCBGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT5t
X3RleHRGb3VuZCA9IGZhbHNlOworICAgICAgICBpZiAodGVzdC0+bV9ydW5GaW5kVW50aWxDb21w
bGV0aW9uKQorICAgICAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBjb3VudGVkTWF0Y2hlc0NhbGxiYWNrKFdlYktpdEZp
bmRDb250cm9sbGVyKiwgZ3VpbnQgbWF0Y2hDb3VudCwgRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0
KQorICAgIHsKKyAgICAgICAgdGVzdC0+bV9tYXRjaENvdW50ID0gbWF0Y2hDb3VudDsKKyAgICAg
ICAgaWYgKHRlc3QtPm1fcnVuRmluZFVudGlsQ29tcGxldGlvbikKKyAgICAgICAgICAgIGdfbWFp
bl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7CisgICAgfQorfTsKKworc3RhdGljIHZvaWQg
dGVzdEZpbmRDb250cm9sbGVyVGV4dEZvdW5kKEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCwgZ2Nv
bnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0U3RyaW5nLCAwKTsKKyAgICB0
ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3QtPmZpbmQoInRlc3Rpbmci
LCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUsIDEpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRG
aW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOworfQorCitzdGF0
aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xsZXJUZXh0Tm90Rm91bmQoRmluZENvbnRyb2xsZXJUZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRIdG1sKHRlc3RTdHJpbmcs
IDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+Zmlu
ZCgibm90Rm91bmQiLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUsIDEpOworICAgIHRlc3QtPndh
aXRVbnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQoIXRlc3QtPm1fdGV4dEZvdW5k
KTsKK30KKworc3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVyTWF0Y2hDb3VudChGaW5kQ29u
dHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwo
dGVzdFN0cmluZywgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAg
ICB0ZXN0LT5maW5kKCJ0ZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAyKTsKKyAg
ICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPm1f
bWF0Y2hDb3VudCA9PSAyKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7Cit9CisK
K3N0YXRpYyB2b2lkIHRlc3RGaW5kQ29udHJvbGxlck1heE1hdGNoQ291bnQoRmluZENvbnRyb2xs
ZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRIdG1sKHRlc3RT
dHJpbmcsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgdGVz
dC0+ZmluZCgidGVzdGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwgMSk7CisgICAgdGVz
dC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX21hdGNo
Q291bnQgPT0gR19NQVhVSU5UKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7Cit9
CisKK3N0YXRpYyB2b2lkIHRlc3RGaW5kQ29udHJvbGxlck5leHQoRmluZENvbnRyb2xsZXJUZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRIdG1sKHRlc3RTdHJpbmcs
IDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+Zmlu
ZCgidGVzdGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwgMik7CisgICAgdGVzdC0+d2Fp
dFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7
CisgICAgZ19hc3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09IDIpOworCisgICAgd2Via2l0X2Zp
bmRfY29udHJvbGxlcl9zZWFyY2hfbmV4dCh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKTsK
KyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3Qt
Pm1fdGV4dEZvdW5kKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX21hdGNoQ291bnQgPT0gMSk7Cisg
ICAgZ19hc3NlcnQoISh3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9vcHRpb25zKHRlc3QtPm1f
ZmluZENvbnRyb2xsZXIuZ2V0KCkpICYgV0VCS0lUX0ZJTkRfT1BUSU9OU19CQUNLV0FSRFMpKTsK
KworICAgIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX25leHQodGVzdC0+bV9maW5kQ29u
dHJvbGxlci5nZXQoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAg
ICBnX2Fzc2VydCghdGVzdC0+bV90ZXh0Rm91bmQpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fbWF0
Y2hDb3VudCA9PSAxKTsKKyAgICBnX2Fzc2VydCghKHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0
X29wdGlvbnModGVzdC0+bV9maW5kQ29udHJvbGxlci5nZXQoKSkgJiBXRUJLSVRfRklORF9PUFRJ
T05TX0JBQ0tXQVJEUykpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xsZXJQcmV2
aW91cyhGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVz
dC0+bG9hZEh0bWwodGVzdFN0cmluZywgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlz
aGVkKCk7CisKKyAgICB0ZXN0LT5maW5kKCJ0ZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19O
T05FLCAyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNz
ZXJ0KHRlc3QtPm1fbWF0Y2hDb3VudCA9PSAyKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRG
b3VuZCk7CisKKyAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF9uZXh0KHRlc3QtPm1f
ZmluZENvbnRyb2xsZXIuZ2V0KCkpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgp
OworCisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOworICAgIGdfYXNzZXJ0KHRlc3Qt
Pm1fbWF0Y2hDb3VudCA9PSAxKTsKKyAgICBnX2Fzc2VydCghKHdlYmtpdF9maW5kX2NvbnRyb2xs
ZXJfZ2V0X29wdGlvbnModGVzdC0+bV9maW5kQ29udHJvbGxlci5nZXQoKSkgJiBXRUJLSVRfRklO
RF9PUFRJT05TX0JBQ0tXQVJEUykpOworCisgICAgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFy
Y2hfcHJldmlvdXModGVzdC0+bV9maW5kQ29udHJvbGxlci5nZXQoKSk7CisgICAgdGVzdC0+d2Fp
dFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7
CisgICAgZ19hc3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09IDEpOworICAgIGdfYXNzZXJ0KHdl
YmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X29wdGlvbnModGVzdC0+bV9maW5kQ29udHJvbGxlci5n
ZXQoKSkgJiBXRUJLSVRfRklORF9PUFRJT05TX0JBQ0tXQVJEUyk7Cit9CisKK3N0YXRpYyB2b2lk
IHRlc3RGaW5kQ29udHJvbGxlckNvdW50ZWRNYXRjaGVzKEZpbmRDb250cm9sbGVyVGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0U3RyaW5nLCAwKTsK
KyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3QtPmNvdW50KCJ0
ZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAyKTsKKyAgICB0ZXN0LT53YWl0VW50
aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPm1fbWF0Y2hDb3VudCA9PSAy
KTsKKworICAgIHRlc3QtPmNvdW50KCJmaXJzdCIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwg
Mik7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCh0
ZXN0LT5tX21hdGNoQ291bnQgPT0gMSk7CisKKyAgICB0ZXN0LT5jb3VudCgibm90Rm91bmQiLCBX
RUJLSVRfRklORF9PUFRJT05TX05PTkUsIDIpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5p
c2hlZCgpOworCisgICAgZ19hc3NlcnQoIXRlc3QtPm1fbWF0Y2hDb3VudCk7Cit9CisKK3N0YXRp
YyB2b2lkIHRlc3RGaW5kQ29udHJvbGxlck9wdGlvbnMoRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRIdG1sKHRlc3RTdHJpbmcsIDApOwor
ICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+ZmluZCgiVGVz
dGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwgMik7CisgICAgdGVzdC0+d2FpdFVudGls
RmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCghdGVzdC0+bV90ZXh0Rm91bmQpOworCisg
ICAgdGVzdC0+ZmluZCgiVGVzdGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNfQ0FTRV9JTlNFTlNJ
VElWRSwgMik7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fz
c2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7CisKKyAgICB0ZXN0LT5maW5kKCJlc3RpbmciLCBXRUJL
SVRfRklORF9PUFRJT05TX05PTkUsIDIpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hl
ZCgpOworCisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOworCisgICAgdGVzdC0+Zmlu
ZCgiZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19BVF9XT1JEX1NUQVJUUywgMik7CisgICAg
dGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCghdGVzdC0+bV90
ZXh0Rm91bmQpOworCisgICAgdGVzdC0+ZmluZCgiSGFsZiIsIFdFQktJVF9GSU5EX09QVElPTlNf
QVRfV09SRF9TVEFSVFMsIDIpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOwor
CisgICAgZ19hc3NlcnQoIXRlc3QtPm1fdGV4dEZvdW5kKTsKKworICAgIHRlc3QtPmZpbmQoIkhh
bGYiLCBXRUJLSVRfRklORF9PUFRJT05TX0FUX1dPUkRfU1RBUlRTIHwgV0VCS0lUX0ZJTkRfT1BU
SU9OU19UUkVBVF9NRURJQUxfQ0FQSVRBTF9BU19XT1JEX1NUQVJULCAyKTsKKyAgICB0ZXN0LT53
YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5k
KTsKKworICAgIHRlc3QtPmZpbmQoInRlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05TX1dSQVBf
QVJPVU5ELCAzKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKyAgICBnX2Fz
c2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7CisKKyAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX3Nl
YXJjaF9uZXh0KHRlc3QtPm1fZmluZENvbnRyb2xsZXIuZ2V0KCkpOworICAgIHRlc3QtPndhaXRV
bnRpbEZpbmRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKKwor
ICAgIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX25leHQodGVzdC0+bV9maW5kQ29udHJv
bGxlci5nZXQoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisgICAgZ19h
c3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0RmluZENvbnRy
b2xsZXJIaWRlKEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAg
ICB0ZXN0LT5sb2FkSHRtbCh0ZXN0U3RyaW5nLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2Fk
RmluaXNoZWQoKTsKKworICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgp
OworCisgICAgY2Fpcm9fc3VyZmFjZV90KiBvcmlnaW5hbFN1cmZhY2UgPSBjYWlyb19zdXJmYWNl
X3JlZmVyZW5jZSgKKyAgICAgICAgdGVzdC0+Z2V0U25hcHNob3RBbmRXYWl0VW50aWxSZWFkeShX
RUJLSVRfU05BUFNIT1RfUkVHSU9OX0ZVTExfRE9DVU1FTlQsIFdFQktJVF9TTkFQU0hPVF9PUFRJ
T05TX05PTkUpKTsKKyAgICBnX2Fzc2VydChvcmlnaW5hbFN1cmZhY2UpOworCisgICAgdGVzdC0+
ZmluZCgidGVzdGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwgMSk7CisgICAgdGVzdC0+
d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQp
OworCisgICAgY2Fpcm9fc3VyZmFjZV90KiBoaWdobGlnaHRTdXJmYWNlID0gY2Fpcm9fc3VyZmFj
ZV9yZWZlcmVuY2UoCisgICAgICAgIHRlc3QtPmdldFNuYXBzaG90QW5kV2FpdFVudGlsUmVhZHko
V0VCS0lUX1NOQVBTSE9UX1JFR0lPTl9GVUxMX0RPQ1VNRU5ULCBXRUJLSVRfU05BUFNIT1RfT1BU
SU9OU19OT05FKSk7CisgICAgZ19hc3NlcnQoaGlnaGxpZ2h0U3VyZmFjZSk7CisgICAgZ19hc3Nl
cnQoIVRlc3Q6OmNhaXJvU3VyZmFjZXNFcXVhbChvcmlnaW5hbFN1cmZhY2UsIGhpZ2hsaWdodFN1
cmZhY2UpKTsKKworICAgIFdlYktpdEZpbmRDb250cm9sbGVyKiBmaW5kQ29udHJvbGxlciA9IHdl
YmtpdF93ZWJfdmlld19nZXRfZmluZF9jb250cm9sbGVyKHRlc3QtPm1fd2ViVmlldyk7CisgICAg
d2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfZmluaXNoKGZpbmRDb250cm9sbGVyKTsKKyAg
ICB3ZWJraXRfd2ViX3ZpZXdfZXhlY3V0ZV9lZGl0aW5nX2NvbW1hbmQodGVzdC0+bV93ZWJWaWV3
LCAiVW5zZWxlY3QiKTsKKworICAgIGNhaXJvX3N1cmZhY2VfdCogdW5oaWdobGlnaHRTdXJmYWNl
ID0gY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2UoCisgICAgICAgIHRlc3QtPmdldFNuYXBzaG90QW5k
V2FpdFVudGlsUmVhZHkoV0VCS0lUX1NOQVBTSE9UX1JFR0lPTl9GVUxMX0RPQ1VNRU5ULCBXRUJL
SVRfU05BUFNIT1RfT1BUSU9OU19OT05FKSk7CisgICAgZ19hc3NlcnQodW5oaWdobGlnaHRTdXJm
YWNlKTsKKyAgICBnX2Fzc2VydChUZXN0OjpjYWlyb1N1cmZhY2VzRXF1YWwob3JpZ2luYWxTdXJm
YWNlLCB1bmhpZ2hsaWdodFN1cmZhY2UpKTsKKworICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShv
cmlnaW5hbFN1cmZhY2UpOworICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShoaWdobGlnaHRTdXJm
YWNlKTsKKyAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3kodW5oaWdobGlnaHRTdXJmYWNlKTsKK30K
Kworc3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVySW5zdGFuY2UoRmluZENvbnRyb2xsZXJU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIFdlYktpdEZpbmRDb250cm9sbGVyKiBm
aW5kQ29udHJvbGxlcjEgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ZpbmRfY29udHJvbGxlcih0ZXN0
LT5tX3dlYlZpZXcpOworICAgIFdlYktpdEZpbmRDb250cm9sbGVyKiBmaW5kQ29udHJvbGxlcjIg
PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ZpbmRfY29udHJvbGxlcih0ZXN0LT5tX3dlYlZpZXcpOwor
CisgICAgZ19hc3NlcnQoZmluZENvbnRyb2xsZXIxID09IGZpbmRDb250cm9sbGVyMik7Cit9CisK
K3N0YXRpYyB2b2lkIHRlc3RGaW5kQ29udHJvbGxlckdldHRlcnMoRmluZENvbnRyb2xsZXJUZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIGNvbnN0IGNoYXIqIHNlYXJjaFRleHQgPSAi
dGVzdGluZyI7CisgICAgZ3VpbnQgbWF4TWF0Y2hDb3VudCA9IDE7CisgICAgZ3VpbnQzMiBmaW5k
T3B0aW9ucyA9IFdFQktJVF9GSU5EX09QVElPTlNfV1JBUF9BUk9VTkQgfCBXRUJLSVRfRklORF9P
UFRJT05TX0FUX1dPUkRfU1RBUlRTOworICAgIFdlYktpdEZpbmRDb250cm9sbGVyKiBmaW5kQ29u
dHJvbGxlciA9IHdlYmtpdF93ZWJfdmlld19nZXRfZmluZF9jb250cm9sbGVyKHRlc3QtPm1fd2Vi
Vmlldyk7CisKKyAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaChmaW5kQ29udHJvbGxl
ciwgc2VhcmNoVGV4dCwgZmluZE9wdGlvbnMsIG1heE1hdGNoQ291bnQpOworICAgIGdfYXNzZXJ0
KHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X3dlYl92aWV3KGZpbmRDb250cm9sbGVyKSA9PSB0
ZXN0LT5tX3dlYlZpZXcpOworICAgIGdfYXNzZXJ0KCFnX3N0cmNtcDAod2Via2l0X2ZpbmRfY29u
dHJvbGxlcl9nZXRfc2VhcmNoX3RleHQoZmluZENvbnRyb2xsZXIpLCBzZWFyY2hUZXh0KSk7Cisg
ICAgZ19hc3NlcnQod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfbWF4X21hdGNoX2NvdW50KGZp
bmRDb250cm9sbGVyKSA9PSBtYXhNYXRjaENvdW50KTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfZmlu
ZF9jb250cm9sbGVyX2dldF9vcHRpb25zKGZpbmRDb250cm9sbGVyKSA9PSBmaW5kT3B0aW9ucyk7
Cit9CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICBGaW5kQ29udHJvbGxlclRlc3Q6OmFkZCgi
V2ViS2l0RmluZENvbnRyb2xsZXIiLCAiZ2V0dGVycyIsIHRlc3RGaW5kQ29udHJvbGxlckdldHRl
cnMpOworICAgIEZpbmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udHJvbGxlciIs
ICJpbnN0YW5jZSIsIHRlc3RGaW5kQ29udHJvbGxlckluc3RhbmNlKTsKKyAgICBGaW5kQ29udHJv
bGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIiLCAidGV4dC1mb3VuZCIsIHRlc3RG
aW5kQ29udHJvbGxlclRleHRGb3VuZCk7CisgICAgRmluZENvbnRyb2xsZXJUZXN0OjphZGQoIldl
YktpdEZpbmRDb250cm9sbGVyIiwgInRleHQtbm90LWZvdW5kIiwgdGVzdEZpbmRDb250cm9sbGVy
VGV4dE5vdEZvdW5kKTsKKyAgICBGaW5kQ29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENv
bnRyb2xsZXIiLCAibWF0Y2gtY291bnQiLCB0ZXN0RmluZENvbnRyb2xsZXJNYXRjaENvdW50KTsK
KyAgICBGaW5kQ29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIiLCAibWF4
LW1hdGNoLWNvdW50IiwgdGVzdEZpbmRDb250cm9sbGVyTWF4TWF0Y2hDb3VudCk7CisgICAgRmlu
ZENvbnRyb2xsZXJUZXN0OjphZGQoIldlYktpdEZpbmRDb250cm9sbGVyIiwgIm5leHQiLCB0ZXN0
RmluZENvbnRyb2xsZXJOZXh0KTsKKyAgICBGaW5kQ29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0
RmluZENvbnRyb2xsZXIiLCAicHJldmlvdXMiLCB0ZXN0RmluZENvbnRyb2xsZXJQcmV2aW91cyk7
CisgICAgRmluZENvbnRyb2xsZXJUZXN0OjphZGQoIldlYktpdEZpbmRDb250cm9sbGVyIiwgImNv
dW50ZWQtbWF0Y2hlcyIsIHRlc3RGaW5kQ29udHJvbGxlckNvdW50ZWRNYXRjaGVzKTsKKyAgICBG
aW5kQ29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIiLCAib3B0aW9ucyIs
IHRlc3RGaW5kQ29udHJvbGxlck9wdGlvbnMpOworICAgIEZpbmRDb250cm9sbGVyVGVzdDo6YWRk
KCJXZWJLaXRGaW5kQ29udHJvbGxlciIsICJoaWRlIiwgdGVzdEZpbmRDb250cm9sbGVySGlkZSk7
Cit9CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRQb2xpY3lDbGllbnQuY3BwIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRQb2xpY3lDbGllbnQuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwOWVhMDQKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFBv
bGljeUNsaWVudC5jcHAKQEAgLTAsMCArMSwyNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiTG9hZFRyYWNr
aW5nVGVzdC5oIgorI2luY2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKKyNpbmNsdWRlIDx3dGYv
Z29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCitzdGF0
aWMgV2ViS2l0VGVzdFNlcnZlcioga1NlcnZlcjsKKworY2xhc3MgUG9saWN5Q2xpZW50VGVzdDog
cHVibGljIExvYWRUcmFja2luZ1Rlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJ
WFRVUkUoUG9saWN5Q2xpZW50VGVzdCk7CisKKyAgICBlbnVtIFBvbGljeURlY2lzaW9uUmVzcG9u
c2UgeworICAgICAgICBVc2UsCisgICAgICAgIElnbm9yZSwKKyAgICAgICAgRG93bmxvYWQsCisg
ICAgICAgIE5vbmUKKyAgICB9OworCisgICAgUG9saWN5Q2xpZW50VGVzdCgpCisgICAgICAgIDog
TG9hZFRyYWNraW5nVGVzdCgpCisgICAgICAgICwgbV9wb2xpY3lEZWNpc2lvblJlc3BvbnNlKE5v
bmUpCisgICAgICAgICwgbV9wb2xpY3lEZWNpc2lvblR5cGVGaWx0ZXIoMCkKKyAgICAgICAgLCBt
X3Jlc3BvbmRUb1BvbGljeURlY2lzaW9uQXN5bmNocm9ub3VzbHkoZmFsc2UpCisgICAgICAgICwg
bV9oYWx0TWFpbkxvb3BBZnRlck1ha2luZ0RlY2lzaW9uKGZhbHNlKQorICAgIHsKKyAgICAgICAg
Z19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJkZWNpZGUtcG9saWN5IiwgR19DQUxMQkFDSyhk
ZWNpZGVQb2xpY3lDYWxsYmFjayksIHRoaXMpOworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVh
biBxdWl0TWFpbkxvb3BMYXRlcihHTWFpbkxvb3AqIGxvb3ApCisgICAgeworICAgICAgICBnX21h
aW5fbG9vcF9xdWl0KGxvb3ApOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAg
c3RhdGljIHZvaWQgcmVzcG9uZFRvUG9saWN5RGVjaXNpb24oUG9saWN5Q2xpZW50VGVzdCogdGVz
dCwgV2ViS2l0UG9saWN5RGVjaXNpb24qIGRlY2lzaW9uKQorICAgIHsKKyAgICAgICAgc3dpdGNo
ICh0ZXN0LT5tX3BvbGljeURlY2lzaW9uUmVzcG9uc2UpIHsKKyAgICAgICAgY2FzZSBVc2U6Cisg
ICAgICAgICAgICB3ZWJraXRfcG9saWN5X2RlY2lzaW9uX3VzZShkZWNpc2lvbik7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJZ25vcmU6CisgICAgICAgICAgICB3ZWJraXRfcG9s
aWN5X2RlY2lzaW9uX2lnbm9yZShkZWNpc2lvbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBEb3dubG9hZDoKKyAgICAgICAgICAgIHdlYmtpdF9wb2xpY3lfZGVjaXNpb25fZG93
bmxvYWQoZGVjaXNpb24pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTm9uZToK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRlc3QtPm1faGFs
dE1haW5Mb29wQWZ0ZXJNYWtpbmdEZWNpc2lvbikKKyAgICAgICAgICAgIGdfaWRsZV9hZGQocmVp
bnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4ocXVpdE1haW5Mb29wTGF0ZXIpLCB0ZXN0LT5tX21h
aW5Mb29wKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gcmVzcG9uZFRvUG9saWN5RGVj
aXNpb25MYXRlcihQb2xpY3lDbGllbnRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgcmVzcG9u
ZFRvUG9saWN5RGVjaXNpb24odGVzdCwgdGVzdC0+bV9wcmV2aW91c1BvbGljeURlY2lzaW9uLmdl
dCgpKTsKKyAgICAgICAgdGVzdC0+bV9wcmV2aW91c1BvbGljeURlY2lzaW9uID0gMDsKKyAgICAg
ICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBkZWNpZGVQb2xp
Y3lDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRQb2xpY3lEZWNpc2lvbiog
ZGVjaXNpb24sIFdlYktpdFBvbGljeURlY2lzaW9uVHlwZSB0eXBlLCBQb2xpY3lDbGllbnRUZXN0
KiB0ZXN0KQorICAgIHsKKyAgICAgICAgaWYgKHRlc3QtPm1fcG9saWN5RGVjaXNpb25UeXBlRmls
dGVyICE9IHR5cGUpCisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICAgICAgdGVzdC0+
bV9wcmV2aW91c1BvbGljeURlY2lzaW9uID0gZGVjaXNpb247CisgICAgICAgIGlmICh0ZXN0LT5t
X3Jlc3BvbmRUb1BvbGljeURlY2lzaW9uQXN5bmNocm9ub3VzbHkpIHsKKyAgICAgICAgICAgIGdf
aWRsZV9hZGQocmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4ocmVzcG9uZFRvUG9saWN5RGVj
aXNpb25MYXRlciksIHRlc3QpOworICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0K
KworICAgICAgICByZXNwb25kVG9Qb2xpY3lEZWNpc2lvbih0ZXN0LCBkZWNpc2lvbik7CisKKyAg
ICAgICAgLy8gV2UgcmV0dXJuIEZBTFNFIGhlcmUgdG8gZW5zdXJlIHRoYXQgdGhlIGRlZmF1bHQg
cG9saWN5IGRlY2lzaW9uCisgICAgICAgIC8vIGhhbmRsZXIgZG9lc24ndCBvdmVycmlkZSB3aGF0
ZXZlciB3ZSB1c2UgaGVyZS4KKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIFBv
bGljeURlY2lzaW9uUmVzcG9uc2UgbV9wb2xpY3lEZWNpc2lvblJlc3BvbnNlOworICAgIGludCBt
X3BvbGljeURlY2lzaW9uVHlwZUZpbHRlcjsKKyAgICBib29sIG1fcmVzcG9uZFRvUG9saWN5RGVj
aXNpb25Bc3luY2hyb25vdXNseTsKKyAgICBib29sIG1faGFsdE1haW5Mb29wQWZ0ZXJNYWtpbmdE
ZWNpc2lvbjsKKyAgICBHUmVmUHRyPFdlYktpdFBvbGljeURlY2lzaW9uPiBtX3ByZXZpb3VzUG9s
aWN5RGVjaXNpb247Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0TmF2aWdhdGlvblBvbGljeShQb2xp
Y3lDbGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPm1fcG9saWN5
RGVjaXNpb25UeXBlRmlsdGVyID0gV0VCS0lUX1BPTElDWV9ERUNJU0lPTl9UWVBFX05BVklHQVRJ
T05fQUNUSU9OOworCisgICAgdGVzdC0+bV9wb2xpY3lEZWNpc2lvblJlc3BvbnNlID0gUG9saWN5
Q2xpZW50VGVzdDo6VXNlOworICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbC8+IiwgImh0dHA6Ly93
ZWJraXRndGsub3JnLyIpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAg
IGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHMuc2l6ZSgpLCA9PSwgMyk7CisKKyAg
ICAvLyBJZGVhbGx5IHdlJ2QgbGlrZSB0byBoYXZlIGEgbW9yZSBpbnRlbnNpdmUgdGVzdCBoZXJl
LCBidXQgaXQncyBzdGlsbCBwcmV0dHkgdHJpY2t5CisgICAgLy8gdG8gdHJpZ2dlciBkaWZmZXJl
bnQgdHlwZXMgb2YgbmF2aWdhdGlvbnMgd2l0aCB0aGUgR1RLKyBXZWJLaXQyIEFQSS4KKyAgICBX
ZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24qIGRlY2lzaW9uID0gV0VCS0lUX05BVklHQVRJ
T05fUE9MSUNZX0RFQ0lTSU9OKHRlc3QtPm1fcHJldmlvdXNQb2xpY3lEZWNpc2lvbi5nZXQoKSk7
CisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9n
ZXRfbmF2aWdhdGlvbl90eXBlKGRlY2lzaW9uKSwgPT0sIFdFQktJVF9OQVZJR0FUSU9OX1RZUEVf
T1RIRVIpOworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVj
aXNpb25fZ2V0X21vdXNlX2J1dHRvbihkZWNpc2lvbiksID09LCAwKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQod2Via2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF9tb2RpZmllcnMoZGVj
aXNpb24pLCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9uYXZpZ2F0aW9uX3Bv
bGljeV9kZWNpc2lvbl9nZXRfZnJhbWVfbmFtZShkZWNpc2lvbiksID09LCAwKTsKKyAgICBXZWJL
aXRVUklSZXF1ZXN0KiByZXF1ZXN0ID0gd2Via2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9u
X2dldF9yZXF1ZXN0KGRlY2lzaW9uKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3VyaV9y
ZXF1ZXN0X2dldF91cmkocmVxdWVzdCksID09LCAiaHR0cDovL3dlYmtpdGd0ay5vcmcvIik7CisK
KyAgICB0ZXN0LT5tX3BvbGljeURlY2lzaW9uUmVzcG9uc2UgPSBQb2xpY3lDbGllbnRUZXN0OjpV
c2U7CisgICAgdGVzdC0+bV9yZXNwb25kVG9Qb2xpY3lEZWNpc2lvbkFzeW5jaHJvbm91c2x5ID0g
dHJ1ZTsKKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWwvPiIsICJodHRwOi8vd2Via2l0Z3RrLm9y
Zy8iKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0sIDMpOworCisgICAgLy8gSWYgd2Ug
YXJlIHdhaXRpbmcgdW50aWwgbG9hZCBjb21wbGV0aW9uLCBpdCB3aWxsIG5ldmVyIGNvbXBsZXRl
IGlmIHdlIGlnbm9yZSB0aGUKKyAgICAvLyBuYXZpZ2F0aW9uLiBTbyB3ZSB0ZWxsIHRoZSBtYWlu
IGxvb3AgdG8gcXVpdCBzb21ldGltZSBsYXRlci4KKyAgICB0ZXN0LT5tX3BvbGljeURlY2lzaW9u
UmVzcG9uc2UgPSBQb2xpY3lDbGllbnRUZXN0OjpJZ25vcmU7CisgICAgdGVzdC0+bV9yZXNwb25k
VG9Qb2xpY3lEZWNpc2lvbkFzeW5jaHJvbm91c2x5ID0gZmFsc2U7CisgICAgdGVzdC0+bV9oYWx0
TWFpbkxvb3BBZnRlck1ha2luZ0RlY2lzaW9uID0gdHJ1ZTsKKyAgICB0ZXN0LT5sb2FkSHRtbCgi
PGh0bWwvPiIsICJodHRwOi8vd2Via2l0Z3RrLm9yZy8iKTsKKyAgICB0ZXN0LT53YWl0VW50aWxM
b2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzLnNp
emUoKSwgPT0sIDApOworCisgICAgdGVzdC0+bV9wb2xpY3lEZWNpc2lvblJlc3BvbnNlID0gUG9s
aWN5Q2xpZW50VGVzdDo6SWdub3JlOworICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbC8+IiwgImh0
dHA6Ly93ZWJraXRndGsub3JnLyIpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgp
OworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHMuc2l6ZSgpLCA9PSwgMCk7
Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RSZXNwb25zZVBvbGljeShQb2xpY3lDbGllbnRUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPm1fcG9saWN5RGVjaXNpb25UeXBlRmls
dGVyID0gV0VCS0lUX1BPTElDWV9ERUNJU0lPTl9UWVBFX1JFU1BPTlNFOworCisgICAgdGVzdC0+
bV9wb2xpY3lEZWNpc2lvblJlc3BvbnNlID0gUG9saWN5Q2xpZW50VGVzdDo6VXNlOworICAgIHRl
c3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7CisgICAgdGVz
dC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1f
bG9hZEV2ZW50cy5zaXplKCksID09LCAzKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9s
b2FkRXZlbnRzWzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRl
ZCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1sxXSwgPT0sIExvYWRU
cmFja2luZ1Rlc3Q6OkxvYWRDb21taXR0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5t
X2xvYWRFdmVudHNbMl0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOworCisg
ICAgV2ViS2l0UmVzcG9uc2VQb2xpY3lEZWNpc2lvbiogZGVjaXNpb24gPSBXRUJLSVRfUkVTUE9O
U0VfUE9MSUNZX0RFQ0lTSU9OKHRlc3QtPm1fcHJldmlvdXNQb2xpY3lEZWNpc2lvbi5nZXQoKSk7
CisgICAgV2ViS2l0VVJJUmVxdWVzdCogcmVxdWVzdCA9IHdlYmtpdF9yZXNwb25zZV9wb2xpY3lf
ZGVjaXNpb25fZ2V0X3JlcXVlc3QoZGVjaXNpb24pOworICAgIGdfYXNzZXJ0KFdFQktJVF9JU19V
UklfUkVRVUVTVChyZXF1ZXN0KSk7CisgICAgQVNTRVJUX0NNUF9DU1RSSU5HKHdlYmtpdF91cmlf
cmVxdWVzdF9nZXRfdXJpKHJlcXVlc3QpLCA9PSwga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIp
KTsKKyAgICBXZWJLaXRVUklSZXNwb25zZSogcmVzcG9uc2UgPSB3ZWJraXRfcmVzcG9uc2VfcG9s
aWN5X2RlY2lzaW9uX2dldF9yZXNwb25zZShkZWNpc2lvbik7CisgICAgZ19hc3NlcnQoV0VCS0lU
X0lTX1VSSV9SRVNQT05TRShyZXNwb25zZSkpOworICAgIEFTU0VSVF9DTVBfQ1NUUklORyh3ZWJr
aXRfdXJpX3Jlc3BvbnNlX2dldF91cmkocmVzcG9uc2UpLCA9PSwga1NlcnZlci0+Z2V0VVJJRm9y
UGF0aCgiLyIpKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfY2FuX3Nob3dfbWltZV90
eXBlKHRlc3QtPm1fd2ViVmlldywgd2Via2l0X3VyaV9yZXNwb25zZV9nZXRfbWltZV90eXBlKHJl
c3BvbnNlKSkgPT0KKyAgICAgICAgd2Via2l0X3Jlc3BvbnNlX3BvbGljeV9kZWNpc2lvbl9pc19t
aW1lX3R5cGVfc3VwcG9ydGVkKGRlY2lzaW9uKSk7CisKKyAgICB0ZXN0LT5tX3Jlc3BvbmRUb1Bv
bGljeURlY2lzaW9uQXN5bmNocm9ub3VzbHkgPSB0cnVlOworICAgIHRlc3QtPmxvYWRVUkkoa1Nl
cnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9h
ZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50cy5zaXpl
KCksID09LCAzKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzBdLCA9
PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7CisgICAgZ19hc3Nl
cnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6Okxv
YWRDb21taXR0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMl0s
ID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOworCisgICAgdGVzdC0+bV9yZXNw
b25kVG9Qb2xpY3lEZWNpc2lvbkFzeW5jaHJvbm91c2x5ID0gZmFsc2U7CisgICAgdGVzdC0+bV9w
b2xpY3lEZWNpc2lvblJlc3BvbnNlID0gUG9saWN5Q2xpZW50VGVzdDo6SWdub3JlOworICAgIHRl
c3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7CisgICAgdGVz
dC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+
bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0sIDMpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5t
X2xvYWRFdmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFy
dGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzFdLCA9PSwgTG9h
ZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkRmFpbGVkKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQodGVzdC0+bV9sb2FkRXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlz
aGVkKTsKK30KKworc3RydWN0IENyZWF0ZUNhbGxiYWNrRGF0YSB7CisgICAgYm9vbCB0cmllZFRv
T3BlbldpbmRvdzsKKyAgICBHTWFpbkxvb3AqIG1haW5Mb29wOworfTsKKworc3RhdGljIFdlYktp
dFdlYlZpZXcqIGNyZWF0ZUNhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIENyZWF0ZUNh
bGxiYWNrRGF0YSogZGF0YSkKK3sKKyAgICBkYXRhLT50cmllZFRvT3BlbldpbmRvdyA9IHRydWU7
CisgICAgZ19tYWluX2xvb3BfcXVpdChkYXRhLT5tYWluTG9vcCk7CisgICAgcmV0dXJuIDA7Cit9
CisKK3N0YXRpYyB2b2lkIHRlc3ROZXdXaW5kb3dQb2xpY3koUG9saWN5Q2xpZW50VGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciogd2luZG93T3Blbmlu
Z0hUTUwgPQorICAgICAgICAiPGh0bWw+PGJvZHk+IgorICAgICAgICAiICAgIDxhIGlkPVwibGlu
a1wiIGhyZWY9XCJodHRwOi8vd3d3Lmdvb2dsZS5jb21cIiB0YXJnZXQ9XCJfYmxhbmtcIj5MaW5r
PC9hPiIKKyAgICAgICAgIiAgICA8c2NyaXB0PiIKKyAgICAgICAgIiAgICAgICAgdmFyIGV2ZW50
ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ01vdXNlRXZlbnRzJyk7IgorICAgICAgICAiICAgICAg
ICBldmVudC5pbml0RXZlbnQoJ2NsaWNrJywgdHJ1ZSwgZmFsc2UpOyIKKyAgICAgICAgIiAgICAg
ICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xpbmsnKS5kaXNwYXRjaEV2ZW50KGV2ZW50KTsi
CisgICAgICAgICIgICAgPC9zY3JpcHQ+IgorICAgICAgICAiPC9ib2R5PjwvaHRtbD4iOworICAg
IHRlc3QtPm1fcG9saWN5RGVjaXNpb25UeXBlRmlsdGVyID0gV0VCS0lUX1BPTElDWV9ERUNJU0lP
Tl9UWVBFX05FV19XSU5ET1dfQUNUSU9OOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfamF2YXNj
cmlwdF9jYW5fb3Blbl93aW5kb3dzX2F1dG9tYXRpY2FsbHkod2Via2l0X3dlYl92aWV3X2dldF9z
ZXR0aW5ncyh0ZXN0LT5tX3dlYlZpZXcpLCBUUlVFKTsKKworICAgIENyZWF0ZUNhbGxiYWNrRGF0
YSBkYXRhOworICAgIGRhdGEudHJpZWRUb09wZW5XaW5kb3cgPSBmYWxzZTsKKyAgICBkYXRhLm1h
aW5Mb29wID0gdGVzdC0+bV9tYWluTG9vcDsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3QodGVzdC0+
bV93ZWJWaWV3LCAiY3JlYXRlIiwgR19DQUxMQkFDSyhjcmVhdGVDYWxsYmFjayksICZkYXRhKTsK
KyAgICB0ZXN0LT5tX3BvbGljeURlY2lzaW9uUmVzcG9uc2UgPSBQb2xpY3lDbGllbnRUZXN0OjpV
c2U7CisgICAgdGVzdC0+bG9hZEh0bWwod2luZG93T3BlbmluZ0hUTUwsICJodHRwOi8vd2Via2l0
Z3RrLm9yZy8iKTsKKyAgICB0ZXN0LT53YWl0KDEpOworICAgIGdfYXNzZXJ0KGRhdGEudHJpZWRU
b09wZW5XaW5kb3cpOworCisgICAgV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uKiBkZWNp
c2lvbiA9IFdFQktJVF9OQVZJR0FUSU9OX1BPTElDWV9ERUNJU0lPTih0ZXN0LT5tX3ByZXZpb3Vz
UG9saWN5RGVjaXNpb24uZ2V0KCkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfbmF2aWdh
dGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0X2ZyYW1lX25hbWUoZGVjaXNpb24pLCA9PSwgIl9ibGFu
ayIpOworCisgICAgLy8gVXNpbmcgYSBzaG9ydCB0aW1lb3V0IGlzIGEgYml0IHVnbHkgaGVyZSwg
YnV0IGl0J3MgaGFyZCB0byBnZXQgYXJvdW5kIGJlY2F1c2UgaWYgd2UgYmxvY2sKKyAgICAvLyB0
aGUgbmV3IHdpbmRvdyBzaWduYWwgd2UgY2Fubm90IGhhbHQgdGhlIG1haW4gbG9vcCBpbiB0aGUg
Y3JlYXRlIGNhbGxiYWNrLiBJZiB3ZQorICAgIC8vIGhhbHQgdGhlIG1haW4gbG9vcCBpbiB0aGUg
cG9saWN5IGRlY2lzaW9uLCB0aGUgY3JlYXRlIGNhbGxiYWNrIG5ldmVyIGV4ZWN1dGVzLgorICAg
IGRhdGEudHJpZWRUb09wZW5XaW5kb3cgPSBmYWxzZTsKKyAgICB0ZXN0LT5tX3BvbGljeURlY2lz
aW9uUmVzcG9uc2UgPSBQb2xpY3lDbGllbnRUZXN0OjpJZ25vcmU7CisgICAgdGVzdC0+bG9hZEh0
bWwod2luZG93T3BlbmluZ0hUTUwsICJodHRwOi8vd2Via2l0Z3RrLm9yZy8iKTsKKyAgICB0ZXN0
LT53YWl0KC4yKTsKKyAgICBnX2Fzc2VydCghZGF0YS50cmllZFRvT3BlbldpbmRvdyk7Cit9CisK
K3N0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3Nh
Z2UqIG1lc3NhZ2UsIGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqLCBTb3VwQ2xpZW50Q29u
dGV4dCosIGdwb2ludGVyKQoreworICAgIGlmIChtZXNzYWdlLT5tZXRob2QgIT0gU09VUF9NRVRI
T0RfR0VUKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBf
U1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoZ19zdHJfZXF1YWwocGF0aCwgIi8iKSkgeworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciog
cmVzcG9uc2VTdHJpbmcgPSAiPGh0bWw+PGJvZHk+VGVzdGluZyE8L2JvZHk+PC9odG1sPiI7Cisg
ICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsK
KyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHks
IFNPVVBfTUVNT1JZX1NUQVRJQywgcmVzcG9uc2VTdHJpbmcsIHN0cmxlbihyZXNwb25zZVN0cmlu
ZykpOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25z
ZV9ib2R5KTsKKyAgICB9IGVsc2UKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVz
c2FnZSwgU09VUF9TVEFUVVNfTk9UX0ZPVU5EKTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQorewor
ICAgIGtTZXJ2ZXIgPSBuZXcgV2ViS2l0VGVzdFNlcnZlcigpOworICAgIGtTZXJ2ZXItPnJ1bihz
ZXJ2ZXJDYWxsYmFjayk7CisKKyAgICBQb2xpY3lDbGllbnRUZXN0OjphZGQoIldlYktpdFBvbGlj
eUNsaWVudCIsICJuYXZpZ2F0aW9uLXBvbGljeSIsIHRlc3ROYXZpZ2F0aW9uUG9saWN5KTsKKyAg
ICBQb2xpY3lDbGllbnRUZXN0OjphZGQoIldlYktpdFBvbGljeUNsaWVudCIsICJyZXNwb25zZS1w
b2xpY3kiLCB0ZXN0UmVzcG9uc2VQb2xpY3kpOworICAgIFBvbGljeUNsaWVudFRlc3Q6OmFkZCgi
V2ViS2l0UG9saWN5Q2xpZW50IiwgIm5ldy13aW5kb3ctcG9saWN5IiwgdGVzdE5ld1dpbmRvd1Bv
bGljeSk7Cit9CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworICAgIGRlbGV0ZSBrU2VydmVyOworfQpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJL
aXRTZXR0aW5ncy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVz
dFdlYktpdFNldHRpbmdzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5j
MWQzMDE4Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXQyR3RrL1Rlc3RXZWJLaXRTZXR0aW5ncy5jcHAKQEAgLTAsMCArMSwzNzAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKGMpIDIwMTEgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgCisgKiBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQgbm90aWNlLCAKKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKgorICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyAqIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIAorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIE1vdG9yb2xhIE1vYmlsaXR5LCBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgCisgKiBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IAorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMgCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCAKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VCBIT0xERVIgT1IgCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIAorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSAKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIAorICogTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIAor
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVGVzdE1haW4u
aCIKKyNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgorI2luY2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIu
aCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+Cisj
aW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCitzdGF0aWMgV2ViS2l0VGVzdFNlcnZl
ciogZ1NlcnZlcjsKKworc3RhdGljIHZvaWQgdGVzdFdlYktpdFNldHRpbmdzKFRlc3QqLCBnY29u
c3Rwb2ludGVyKQoreworICAgIFdlYktpdFNldHRpbmdzKiBzZXR0aW5ncyA9IHdlYmtpdF9zZXR0
aW5nc19uZXcoKTsKKworICAgIC8vIEphdmFTY3JpcHQgaXMgZW5hYmxlZCBieSBkZWZhdWx0Lgor
ICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2phdmFzY3JpcHQoc2V0dGlu
Z3MpKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9qYXZhc2NyaXB0KHNldHRpbmdz
LCBGQUxTRSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2phdmFz
Y3JpcHQoc2V0dGluZ3MpKTsKKworICAgIC8vIEJ5IGRlZmF1bHQgYXV0by1sb2FkLWltYWdlIGlz
IHRydWUuCisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9hdXRvX2xvYWRfaW1hZ2Vz
KHNldHRpbmdzKSk7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9hdXRvX2xvYWRfaW1hZ2VzKHNl
dHRpbmdzLCBGQUxTRSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfYXV0b19s
b2FkX2ltYWdlcyhzZXR0aW5ncykpOworCisgICAgLy8gbG9hZC1pY29ucy1pZ25vcmluZy1pbWFn
ZS1sb2FkLXNldHRpbmcgaXMgZmFsc2UgYnkgZGVmYXVsdC4KKyAgICBnX2Fzc2VydCghd2Via2l0
X3NldHRpbmdzX2dldF9sb2FkX2ljb25zX2lnbm9yaW5nX2ltYWdlX2xvYWRfc2V0dGluZyhzZXR0
aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfbG9hZF9pY29uc19pZ25vcmluZ19pbWFn
ZV9sb2FkX3NldHRpbmcoc2V0dGluZ3MsIFRSVUUpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0
aW5nc19nZXRfbG9hZF9pY29uc19pZ25vcmluZ19pbWFnZV9sb2FkX3NldHRpbmcoc2V0dGluZ3Mp
KTsKKyAgICAKKyAgICAvLyBPZmZsaW5lIGFwcGxpY2F0aW9uIGNhY2hlIGlzIHRydWUgYnkgZGVm
YXVsdC4KKyAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9vZmZsaW5lX3dl
Yl9hcHBsaWNhdGlvbl9jYWNoZShzZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRf
ZW5hYmxlX29mZmxpbmVfd2ViX2FwcGxpY2F0aW9uX2NhY2hlKHNldHRpbmdzLCBGQUxTRSk7Cisg
ICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX29mZmxpbmVfd2ViX2FwcGxp
Y2F0aW9uX2NhY2hlKHNldHRpbmdzKSk7CisKKyAgICAvLyBMb2NhbCBzdG9yYWdlIGlzIGVuYWJs
ZSBieSBkZWZhdWx0LgorICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2h0
bWw1X2xvY2FsX3N0b3JhZ2Uoc2V0dGluZ3MpKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2Vu
YWJsZV9odG1sNV9sb2NhbF9zdG9yYWdlKHNldHRpbmdzLCBGQUxTRSk7CisgICAgZ19hc3NlcnQo
IXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2h0bWw1X2xvY2FsX3N0b3JhZ2Uoc2V0dGluZ3Mp
KTsKKworICAgIC8vIEhUTUw1IGRhdGFiYXNlIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4KKyAgICBn
X2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9odG1sNV9kYXRhYmFzZShzZXR0aW5n
cykpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX2h0bWw1X2RhdGFiYXNlKHNldHRp
bmdzLCBGQUxTRSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2h0
bWw1X2RhdGFiYXNlKHNldHRpbmdzKSk7CisKKyAgICAvLyBYU1MgQXVkaXRvciBpcyBlbmFibGVk
IGJ5IGRlZmF1bHQuCisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfeHNz
X2F1ZGl0b3Ioc2V0dGluZ3MpKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV94c3Nf
YXVkaXRvcihzZXR0aW5ncywgRkFMU0UpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3Nf
Z2V0X2VuYWJsZV94c3NfYXVkaXRvcihzZXR0aW5ncykpOworCisgICAgLy8gRnJhbWUgZmxhdHRl
bmluZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGlu
Z3NfZ2V0X2VuYWJsZV9mcmFtZV9mbGF0dGVuaW5nKHNldHRpbmdzKSk7CisgICAgd2Via2l0X3Nl
dHRpbmdzX3NldF9lbmFibGVfZnJhbWVfZmxhdHRlbmluZyhzZXR0aW5ncywgVFJVRSk7CisgICAg
Z19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfZnJhbWVfZmxhdHRlbmluZyhzZXR0
aW5ncykpOworCisgICAgLy8gUGx1Z2lucyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0LgorICAgIGdf
YXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3BsdWdpbnMoc2V0dGluZ3MpKTsKKyAg
ICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9wbHVnaW5zKHNldHRpbmdzLCBGQUxTRSk7Cisg
ICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3BsdWdpbnMoc2V0dGluZ3Mp
KTsKKworICAgIC8vIEphdmEgaXMgZW5hYmxlZCBieSBkZWZhdWx0LgorICAgIGdfYXNzZXJ0KHdl
YmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2phdmEoc2V0dGluZ3MpKTsKKyAgICB3ZWJraXRfc2V0
dGluZ3Nfc2V0X2VuYWJsZV9qYXZhKHNldHRpbmdzLCBGQUxTRSk7CisgICAgZ19hc3NlcnQoIXdl
YmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2phdmEoc2V0dGluZ3MpKTsKKworICAgIC8vIEJ5IGRl
ZmF1bHQsIEphdmFTY3JpcHQgY2FuIG9wZW4gd2luZG93cyBhdXRvbWF0aWNhbGx5IGlzIGRpc2Fi
bGVkLgorICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2phdmFzY3JpcHRfY2FuX29w
ZW5fd2luZG93c19hdXRvbWF0aWNhbGx5KHNldHRpbmdzKSk7CisgICAgd2Via2l0X3NldHRpbmdz
X3NldF9qYXZhc2NyaXB0X2Nhbl9vcGVuX3dpbmRvd3NfYXV0b21hdGljYWxseShzZXR0aW5ncywg
VFJVRSk7CisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9qYXZhc2NyaXB0X2Nhbl9v
cGVuX3dpbmRvd3NfYXV0b21hdGljYWxseShzZXR0aW5ncykpOworCisgICAgLy8gQnkgZGVmYXVs
dCBoeXBlciBsaW5rIGF1ZGl0aW5nIGlzIGRpc2FibGVkLgorICAgIGdfYXNzZXJ0KCF3ZWJraXRf
c2V0dGluZ3NfZ2V0X2VuYWJsZV9oeXBlcmxpbmtfYXVkaXRpbmcoc2V0dGluZ3MpKTsKKyAgICB3
ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9oeXBlcmxpbmtfYXVkaXRpbmcoc2V0dGluZ3MsIFRS
VUUpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2h5cGVybGlua19h
dWRpdGluZyhzZXR0aW5ncykpOworCisgICAgLy8gRGVmYXVsdCBmb250IGZhbWlseSBpcyAic2Fu
cy1zZXJpZiIuCisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zZXR0aW5nc19nZXRfZGVmYXVs
dF9mb250X2ZhbWlseShzZXR0aW5ncyksID09LCAic2Fucy1zZXJpZiIpOworICAgIHdlYmtpdF9z
ZXR0aW5nc19zZXRfZGVmYXVsdF9mb250X2ZhbWlseShzZXR0aW5ncywgIm1vbm9zcGFjZSIpOwor
ICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2V0dGluZ3NfZ2V0X2RlZmF1bHRfZm9udF9mYW1p
bHkoc2V0dGluZ3MpLCA9PSwgIm1vbm9zcGFjZSIpOworCisgICAgLy8gRGVmYXVsdCBtb25vc3Bh
Y2UgZm9udCBmYW1pbHkgZm9udCBmYW1pbHkgaXMgIm1vbm9zcGFjZSIuCisgICAgZ19hc3NlcnRf
Y21wc3RyKHdlYmtpdF9zZXR0aW5nc19nZXRfbW9ub3NwYWNlX2ZvbnRfZmFtaWx5KHNldHRpbmdz
KSwgPT0sICJtb25vc3BhY2UiKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X21vbm9zcGFjZV9m
b250X2ZhbWlseShzZXR0aW5ncywgInNhbnMtc2VyaWYiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIo
d2Via2l0X3NldHRpbmdzX2dldF9tb25vc3BhY2VfZm9udF9mYW1pbHkoc2V0dGluZ3MpLCA9PSwg
InNhbnMtc2VyaWYiKTsKKworICAgIC8vIERlZmF1bHQgc2VyaWYgZm9udCBmYW1pbHkgaXMgInNl
cmlmIi4KKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NldHRpbmdzX2dldF9zZXJpZl9mb250
X2ZhbWlseShzZXR0aW5ncyksID09LCAic2VyaWYiKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0
X3NlcmlmX2ZvbnRfZmFtaWx5KHNldHRpbmdzLCAic2Fucy1zZXJpZiIpOworICAgIGdfYXNzZXJ0
X2NtcHN0cih3ZWJraXRfc2V0dGluZ3NfZ2V0X3NlcmlmX2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwg
PT0sICJzYW5zLXNlcmlmIik7CisKKyAgICAvLyBEZWZhdWx0IHNhbnMgc2VyaWYgZm9udCBmYW1p
bHkgaXMgInNhbnMtc2VyaWYiLgorICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2V0dGluZ3Nf
Z2V0X3NhbnNfc2VyaWZfZm9udF9mYW1pbHkoc2V0dGluZ3MpLCA9PSwgInNhbnMtc2VyaWYiKTsK
KyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X3NhbnNfc2VyaWZfZm9udF9mYW1pbHkoc2V0dGluZ3Ms
ICJzZXJpZiIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2V0dGluZ3NfZ2V0X3NhbnNf
c2VyaWZfZm9udF9mYW1pbHkoc2V0dGluZ3MpLCA9PSwgInNlcmlmIik7CisKKyAgICAvLyBEZWZh
dWx0IGN1cnNpdmUgZm9udCBmYW1pbHkgInNlcmlmIi4KKyAgICBnX2Fzc2VydF9jbXBzdHIod2Vi
a2l0X3NldHRpbmdzX2dldF9jdXJzaXZlX2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJzZXJp
ZiIpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfY3Vyc2l2ZV9mb250X2ZhbWlseShzZXR0aW5n
cywgInNhbnMtc2VyaWYiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NldHRpbmdzX2dl
dF9jdXJzaXZlX2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJzYW5zLXNlcmlmIik7CisKKyAg
ICAvLyBEZWZhdWx0IGZhbnRhc3kgZm9udCBmYW1pbHkgaXMgInNlcmlmIi4KKyAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X3NldHRpbmdzX2dldF9mYW50YXN5X2ZvbnRfZmFtaWx5KHNldHRpbmdz
KSwgPT0sICJzZXJpZiIpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZmFudGFzeV9mb250X2Zh
bWlseShzZXR0aW5ncywgInNhbnMtc2VyaWYiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0
X3NldHRpbmdzX2dldF9mYW50YXN5X2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJzYW5zLXNl
cmlmIik7CisKKyAgICAvLyBEZWZhdWx0IHBpY3RvZ3JhcGggZm9udCBmYW1pbHkgaXMgInNlcmlm
Ii4KKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NldHRpbmdzX2dldF9waWN0b2dyYXBoX2Zv
bnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJzZXJpZiIpOworICAgIHdlYmtpdF9zZXR0aW5nc19z
ZXRfcGljdG9ncmFwaF9mb250X2ZhbWlseShzZXR0aW5ncywgInNhbnMtc2VyaWYiKTsKKyAgICBn
X2Fzc2VydF9jbXBzdHIod2Via2l0X3NldHRpbmdzX2dldF9waWN0b2dyYXBoX2ZvbnRfZmFtaWx5
KHNldHRpbmdzKSwgPT0sICJzYW5zLXNlcmlmIik7CisKKyAgICAvLyBEZWZhdWx0IGZvbnQgc2l6
ZSBpcyAxNi4KKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9zZXR0aW5nc19nZXRfZGVmYXVs
dF9mb250X3NpemUoc2V0dGluZ3MpLCA9PSwgMTYpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRf
ZGVmYXVsdF9mb250X3NpemUoc2V0dGluZ3MsIDE0KTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdl
YmtpdF9zZXR0aW5nc19nZXRfZGVmYXVsdF9mb250X3NpemUoc2V0dGluZ3MpLCA9PSwgMTQpOwor
CisgICAgLy8gRGVmYXVsdCBtb25vc3BhY2UgZm9udCBzaXplIGlzIDEzLgorICAgIGdfYXNzZXJ0
X2NtcHVpbnQod2Via2l0X3NldHRpbmdzX2dldF9kZWZhdWx0X21vbm9zcGFjZV9mb250X3NpemUo
c2V0dGluZ3MpLCA9PSwgMTMpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZGVmYXVsdF9tb25v
c3BhY2VfZm9udF9zaXplKHNldHRpbmdzLCAxMCk7CisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJr
aXRfc2V0dGluZ3NfZ2V0X2RlZmF1bHRfbW9ub3NwYWNlX2ZvbnRfc2l6ZShzZXR0aW5ncyksID09
LCAxMCk7CisKKyAgICAvLyBEZWZhdWx0IG1pbmltdW0gZm9udCBzaXplIGlzIDAuCisgICAgZ19h
c3NlcnRfY21wdWludCh3ZWJraXRfc2V0dGluZ3NfZ2V0X21pbmltdW1fZm9udF9zaXplKHNldHRp
bmdzKSwgPT0sIDApOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfbWluaW11bV9mb250X3NpemUo
c2V0dGluZ3MsIDcpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X3NldHRpbmdzX2dldF9t
aW5pbXVtX2ZvbnRfc2l6ZShzZXR0aW5ncyksID09LCA3KTsKKworICAgIC8vIERlZmF1bHQgY2hh
cnNldCBpcyAiaXNvLTg4NTktMSIuCisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zZXR0aW5n
c19nZXRfZGVmYXVsdF9jaGFyc2V0KHNldHRpbmdzKSwgPT0sICJpc28tODg1OS0xIik7CisgICAg
d2Via2l0X3NldHRpbmdzX3NldF9kZWZhdWx0X2NoYXJzZXQoc2V0dGluZ3MsICJ1dGY4Iik7Cisg
ICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zZXR0aW5nc19nZXRfZGVmYXVsdF9jaGFyc2V0KHNl
dHRpbmdzKSwgPT0sICJ1dGY4Iik7CisKKyAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dl
dF9lbmFibGVfcHJpdmF0ZV9icm93c2luZyhzZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5n
c19zZXRfZW5hYmxlX3ByaXZhdGVfYnJvd3Npbmcoc2V0dGluZ3MsIFRSVUUpOworICAgIGdfYXNz
ZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3ByaXZhdGVfYnJvd3Npbmcoc2V0dGluZ3Mp
KTsKKworICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9kZXZlbG9wZXJf
ZXh0cmFzKHNldHRpbmdzKSk7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfZGV2ZWxv
cGVyX2V4dHJhcyhzZXR0aW5ncywgVFJVRSk7CisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdz
X2dldF9lbmFibGVfZGV2ZWxvcGVyX2V4dHJhcyhzZXR0aW5ncykpOworCisgICAgZ19hc3NlcnQo
d2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfcmVzaXphYmxlX3RleHRfYXJlYXMoc2V0dGluZ3Mp
KTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9yZXNpemFibGVfdGV4dF9hcmVhcyhz
ZXR0aW5ncywgRkFMU0UpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJs
ZV9yZXNpemFibGVfdGV4dF9hcmVhcyhzZXR0aW5ncykpOworCisgICAgZ19hc3NlcnQod2Via2l0
X3NldHRpbmdzX2dldF9lbmFibGVfdGFic190b19saW5rcyhzZXR0aW5ncykpOworICAgIHdlYmtp
dF9zZXR0aW5nc19zZXRfZW5hYmxlX3RhYnNfdG9fbGlua3Moc2V0dGluZ3MsIEZBTFNFKTsKKyAg
ICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfdGFic190b19saW5rcyhzZXR0
aW5ncykpOworCisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2Ruc19w
cmVmZXRjaGluZyhzZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX2Ru
c19wcmVmZXRjaGluZyhzZXR0aW5ncywgVFJVRSk7CisgICAgZ19hc3NlcnQod2Via2l0X3NldHRp
bmdzX2dldF9lbmFibGVfZG5zX3ByZWZldGNoaW5nKHNldHRpbmdzKSk7CisKKyAgICAvLyBDYXJl
dCBicm93c2luZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorICAgIGdfYXNzZXJ0KCF3ZWJraXRf
c2V0dGluZ3NfZ2V0X2VuYWJsZV9jYXJldF9icm93c2luZyhzZXR0aW5ncykpOworICAgIHdlYmtp
dF9zZXR0aW5nc19zZXRfZW5hYmxlX2NhcmV0X2Jyb3dzaW5nKHNldHRpbmdzLCBUUlVFKTsKKyAg
ICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9jYXJldF9icm93c2luZyhzZXR0
aW5ncykpOworCisgICAgLy8gRnVsbHNjcmVlbiBKYXZhU2NyaXB0IEFQSSBpcyBlbmFibGVkIGJ5
IGRlZmF1bHQuCisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfZnVsbHNj
cmVlbihzZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX2Z1bGxzY3Jl
ZW4oc2V0dGluZ3MsIEZBTFNFKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9l
bmFibGVfZnVsbHNjcmVlbihzZXR0aW5ncykpOworCisgICAgLy8gUHJpbnQgYmFja2dyb3VuZHMg
aXMgZW5hYmxlZCBieSBkZWZhdWx0CisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9w
cmludF9iYWNrZ3JvdW5kcyhzZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfcHJp
bnRfYmFja2dyb3VuZHMoc2V0dGluZ3MsIEZBTFNFKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3Nl
dHRpbmdzX2dldF9wcmludF9iYWNrZ3JvdW5kcyhzZXR0aW5ncykpOworCisgICAgLy8gV2ViQXVk
aW8gaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKyAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdz
X2dldF9lbmFibGVfd2ViYXVkaW8oc2V0dGluZ3MpKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0
X2VuYWJsZV93ZWJhdWRpbyhzZXR0aW5ncywgVFJVRSk7CisgICAgZ19hc3NlcnQod2Via2l0X3Nl
dHRpbmdzX2dldF9lbmFibGVfd2ViYXVkaW8oc2V0dGluZ3MpKTsKKworICAgIC8vIFdlYkdMIGlz
IGRpc2FibGVkIGJ5IGRlZmF1bHQuCisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRf
ZW5hYmxlX3dlYmdsKHNldHRpbmdzKSk7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVf
d2ViZ2woc2V0dGluZ3MsIFRSVUUpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRf
ZW5hYmxlX3dlYmdsKHNldHRpbmdzKSk7CisKKyAgICAvLyBBbGxvdyBNb2RhbCBEaWFsb2dzIGlz
IGRpc2FibGVkIGJ5IGRlZmF1bHQuCisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRf
YWxsb3dfbW9kYWxfZGlhbG9ncyhzZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRf
YWxsb3dfbW9kYWxfZGlhbG9ncyhzZXR0aW5ncywgVFJVRSk7CisgICAgZ19hc3NlcnQod2Via2l0
X3NldHRpbmdzX2dldF9hbGxvd19tb2RhbF9kaWFsb2dzKHNldHRpbmdzKSk7CisKKyAgICAvLyBa
b29tIHRleHQgb25seSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorICAgIGdfYXNzZXJ0KCF3ZWJr
aXRfc2V0dGluZ3NfZ2V0X3pvb21fdGV4dF9vbmx5KHNldHRpbmdzKSk7CisgICAgd2Via2l0X3Nl
dHRpbmdzX3NldF96b29tX3RleHRfb25seShzZXR0aW5ncywgVFJVRSk7CisgICAgZ19hc3NlcnQo
d2Via2l0X3NldHRpbmdzX2dldF96b29tX3RleHRfb25seShzZXR0aW5ncykpOworCisgICAgLy8g
QnkgZGVmYXVsdCwgSmF2YVNjcmlwdCBjYW5ub3QgYWNjZXNzIHRoZSBjbGlwYm9hcmQuCisgICAg
Z19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfamF2YXNjcmlwdF9jYW5fYWNjZXNzX2NsaXBi
b2FyZChzZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfamF2YXNjcmlwdF9jYW5f
YWNjZXNzX2NsaXBib2FyZChzZXR0aW5ncywgVFJVRSk7CisgICAgZ19hc3NlcnQod2Via2l0X3Nl
dHRpbmdzX2dldF9qYXZhc2NyaXB0X2Nhbl9hY2Nlc3NfY2xpcGJvYXJkKHNldHRpbmdzKSk7CisK
KyAgICAvLyBCeSBkZWZhdWx0LCBtZWRpYSBwbGF5YmFjayBkb2Vzbid0IHJlcXVpcmUgdXNlciBn
ZXN0dXJlcy4KKyAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9tZWRpYV9wbGF5YmFj
a19yZXF1aXJlc191c2VyX2dlc3R1cmUoc2V0dGluZ3MpKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nf
c2V0X21lZGlhX3BsYXliYWNrX3JlcXVpcmVzX3VzZXJfZ2VzdHVyZShzZXR0aW5ncywgVFJVRSk7
CisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9tZWRpYV9wbGF5YmFja19yZXF1aXJl
c191c2VyX2dlc3R1cmUoc2V0dGluZ3MpKTsKKworICAgIC8vIEJ5IGRlZmF1bHQsIGlubGluZSBt
ZWRpYSBwbGF5YmFjayBpcyBhbGxvd2VkCisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dl
dF9tZWRpYV9wbGF5YmFja19hbGxvd3NfaW5saW5lKHNldHRpbmdzKSk7CisgICAgd2Via2l0X3Nl
dHRpbmdzX3NldF9tZWRpYV9wbGF5YmFja19hbGxvd3NfaW5saW5lKHNldHRpbmdzLCBGQUxTRSk7
CisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfbWVkaWFfcGxheWJhY2tfYWxsb3dz
X2lubGluZShzZXR0aW5ncykpOworCisgICAgLy8gQnkgZGVmYXVsdCwgZGVidWcgaW5kaWNhdG9y
cyBhcmUgZGlzYWJsZWQuCisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZHJhd19j
b21wb3NpdGluZ19pbmRpY2F0b3JzKHNldHRpbmdzKSk7CisgICAgd2Via2l0X3NldHRpbmdzX3Nl
dF9kcmF3X2NvbXBvc2l0aW5nX2luZGljYXRvcnMoc2V0dGluZ3MsIFRSVUUpOworICAgIGdfYXNz
ZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZHJhd19jb21wb3NpdGluZ19pbmRpY2F0b3JzKHNldHRp
bmdzKSk7CisKKyAgICAvLyBCeSBkZWZhdWx0LCBzaXRlIHNwZWNpZmljIHF1aXJrcyBhcmUgZGlz
YWJsZWQuCisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3NpdGVfc3Bl
Y2lmaWNfcXVpcmtzKHNldHRpbmdzKSk7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVf
c2l0ZV9zcGVjaWZpY19xdWlya3Moc2V0dGluZ3MsIFRSVUUpOworICAgIGdfYXNzZXJ0KHdlYmtp
dF9zZXR0aW5nc19nZXRfZW5hYmxlX3NpdGVfc3BlY2lmaWNfcXVpcmtzKHNldHRpbmdzKSk7CisK
KyAgICAvLyBCeSBkZWZhdWx0LCBwYWdlIGNhY2hlIGlzIGVuYWJsZWQuCisgICAgZ19hc3NlcnQo
d2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfcGFnZV9jYWNoZShzZXR0aW5ncykpOworICAgIHdl
YmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX3BhZ2VfY2FjaGUoc2V0dGluZ3MsIEZBTFNFKTsKKyAg
ICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfcGFnZV9jYWNoZShzZXR0aW5n
cykpOworCisgICAgLy8gQnkgZGVmYXVsdCwgc21vb3RoIHNjcm9sbGluZyBpcyBkaXNhYmxlZC4K
KyAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfc21vb3RoX3Njcm9sbGlu
ZyhzZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX3Ntb290aF9zY3Jv
bGxpbmcoc2V0dGluZ3MsIFRSVUUpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRf
ZW5hYmxlX3Ntb290aF9zY3JvbGxpbmcoc2V0dGluZ3MpKTsKKworICAgIC8vIEJ5IGRlZmF1bHQs
IGFjY2VsZXJhdGVkIDJEIGNhbnZhcyBpcyBkaXNhYmxlZC4KKyAgICBnX2Fzc2VydCghd2Via2l0
X3NldHRpbmdzX2dldF9lbmFibGVfYWNjZWxlcmF0ZWRfMmRfY2FudmFzKHNldHRpbmdzKSk7Cisg
ICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfYWNjZWxlcmF0ZWRfMmRfY2FudmFzKHNldHRp
bmdzLCBUUlVFKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9hY2Nl
bGVyYXRlZF8yZF9jYW52YXMoc2V0dGluZ3MpKTsKKworICAgIC8vIEJ5IGRlZmF1bHQsIHdyaXRp
bmcgb2YgY29uc29sZSBtZXNzYWdlcyB0byBzdGRvdXQgaXMgZGlzYWJsZWQuCisgICAgZ19hc3Nl
cnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3dyaXRlX2NvbnNvbGVfbWVzc2FnZXNfdG9f
c3Rkb3V0KHNldHRpbmdzKSk7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfd3JpdGVf
Y29uc29sZV9tZXNzYWdlc190b19zdGRvdXQoc2V0dGluZ3MsIFRSVUUpOworICAgIGdfYXNzZXJ0
KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3dyaXRlX2NvbnNvbGVfbWVzc2FnZXNfdG9fc3Rk
b3V0KHNldHRpbmdzKSk7CisKKyAgICAvLyBNZWRpYVN0cmVhbSBpcyBkaXNhYmxlZCBieSBkZWZh
dWx0LgorICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9tZWRpYV9zdHJl
YW0oc2V0dGluZ3MpKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9tZWRpYV9zdHJl
YW0oc2V0dGluZ3MsIFRSVUUpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5h
YmxlX21lZGlhX3N0cmVhbShzZXR0aW5ncykpOworCisgICAgLy8gQnkgZGVmYXVsdCwgU3BhdGlh
bE5hdmlnYXRpb24gaXMgZGlzYWJsZWQKKyAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dl
dF9lbmFibGVfc3BhdGlhbF9uYXZpZ2F0aW9uKHNldHRpbmdzKSk7CisgICAgd2Via2l0X3NldHRp
bmdzX3NldF9lbmFibGVfc3BhdGlhbF9uYXZpZ2F0aW9uKHNldHRpbmdzLCBUUlVFKTsKKyAgICBn
X2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9zcGF0aWFsX25hdmlnYXRpb24oc2V0
dGluZ3MpKTsKKworICAgIC8vIE1lZGlhU291cmNlIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQKKyAg
ICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfbWVkaWFzb3VyY2Uoc2V0dGlu
Z3MpKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9tZWRpYXNvdXJjZShzZXR0aW5n
cywgVFJVRSk7CisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfbWVkaWFz
b3VyY2Uoc2V0dGluZ3MpKTsKKworICAgIGdfb2JqZWN0X3VucmVmKEdfT0JKRUNUKHNldHRpbmdz
KSk7Cit9CisKK3ZvaWQgdGVzdFdlYktpdFNldHRpbmdzTmV3V2l0aFNldHRpbmdzKFRlc3QqIHRl
c3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgR1JlZlB0cjxXZWJLaXRTZXR0aW5ncz4gc2V0dGlu
Z3MgPSBhZG9wdEdSZWYod2Via2l0X3NldHRpbmdzX25ld193aXRoX3NldHRpbmdzKCJlbmFibGUt
amF2YXNjcmlwdCIsIEZBTFNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXV0by1sb2Fk
LWltYWdlcyIsIEZBTFNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibG9hZC1pY29ucy1p
Z25vcmluZy1pbWFnZS1sb2FkLXNldHRpbmciLCBUUlVFLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBOVUxMKSk7CisgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5p
c2hlcyhHX09CSkVDVChzZXR0aW5ncy5nZXQoKSkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0
dGluZ3NfZ2V0X2VuYWJsZV9qYXZhc2NyaXB0KHNldHRpbmdzLmdldCgpKSk7CisgICAgZ19hc3Nl
cnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfYXV0b19sb2FkX2ltYWdlcyhzZXR0aW5ncy5nZXQoKSkp
OworICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfbG9hZF9pY29uc19pZ25vcmluZ19p
bWFnZV9sb2FkX3NldHRpbmcoc2V0dGluZ3MuZ2V0KCkpKTsKK30KKworc3RhdGljIENTdHJpbmcg
Y29udmVydFdlYlZpZXdNYWluUmVzb3VyY2VEYXRhVG9DU3RyaW5nKFdlYlZpZXdUZXN0KiB0ZXN0
KQoreworICAgIHNpemVfdCBtYWluUmVzb3VyY2VEYXRhU2l6ZSA9IDA7CisgICAgY29uc3QgY2hh
ciogbWFpblJlc291cmNlRGF0YSA9IHRlc3QtPm1haW5SZXNvdXJjZURhdGEobWFpblJlc291cmNl
RGF0YVNpemUpOworICAgIHJldHVybiBDU3RyaW5nKG1haW5SZXNvdXJjZURhdGEsIG1haW5SZXNv
dXJjZURhdGFTaXplKTsKK30KKworc3RhdGljIHZvaWQgYXNzZXJ0VGhhdFVzZXJBZ2VudElzU2Vu
dEluSGVhZGVycyhXZWJWaWV3VGVzdCogdGVzdCwgY29uc3QgQ1N0cmluZyYgdXNlckFnZW50KQor
eworICAgIHRlc3QtPmxvYWRVUkkoZ1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7
CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgQVNTRVJUX0NNUF9DU1RS
SU5HKGNvbnZlcnRXZWJWaWV3TWFpblJlc291cmNlRGF0YVRvQ1N0cmluZyh0ZXN0KSwgPT0sIHVz
ZXJBZ2VudCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJLaXRTZXR0aW5nc1VzZXJBZ2VudChX
ZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBHUmVmUHRyPFdlYktpdFNl
dHRpbmdzPiBzZXR0aW5ncyA9IGFkb3B0R1JlZih3ZWJraXRfc2V0dGluZ3NfbmV3KCkpOworICAg
IENTdHJpbmcgZGVmYXVsdFVzZXJBZ2VudCA9IHdlYmtpdF9zZXR0aW5nc19nZXRfdXNlcl9hZ2Vu
dChzZXR0aW5ncy5nZXQoKSk7CisgICAgd2Via2l0X3dlYl92aWV3X3NldF9zZXR0aW5ncyh0ZXN0
LT5tX3dlYlZpZXcsIHNldHRpbmdzLmdldCgpKTsKKworICAgIGdfYXNzZXJ0KGdfc3Ryc3RyX2xl
bihkZWZhdWx0VXNlckFnZW50LmRhdGEoKSwgLTEsICJBcHBsZVdlYktpdCIpKTsKKyAgICBnX2Fz
c2VydChnX3N0cnN0cl9sZW4oZGVmYXVsdFVzZXJBZ2VudC5kYXRhKCksIC0xLCAiU2FmYXJpIikp
OworCisgICAgd2Via2l0X3NldHRpbmdzX3NldF91c2VyX2FnZW50KHNldHRpbmdzLmdldCgpLCAw
KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoZGVmYXVsdFVzZXJBZ2VudC5kYXRhKCksID09LCB3ZWJr
aXRfc2V0dGluZ3NfZ2V0X3VzZXJfYWdlbnQoc2V0dGluZ3MuZ2V0KCkpKTsKKyAgICBhc3NlcnRU
aGF0VXNlckFnZW50SXNTZW50SW5IZWFkZXJzKHRlc3QsIGRlZmF1bHRVc2VyQWdlbnQuZGF0YSgp
KTsKKworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfdXNlcl9hZ2VudChzZXR0aW5ncy5nZXQoKSwg
IiIpOworICAgIGdfYXNzZXJ0X2NtcHN0cihkZWZhdWx0VXNlckFnZW50LmRhdGEoKSwgPT0sIHdl
YmtpdF9zZXR0aW5nc19nZXRfdXNlcl9hZ2VudChzZXR0aW5ncy5nZXQoKSkpOworCisgICAgY29u
c3QgY2hhciogZnVua3lVc2VyQWdlbnQgPSAiRnVua3khIjsKKyAgICB3ZWJraXRfc2V0dGluZ3Nf
c2V0X3VzZXJfYWdlbnQoc2V0dGluZ3MuZ2V0KCksIGZ1bmt5VXNlckFnZW50KTsKKyAgICBnX2Fz
c2VydF9jbXBzdHIoZnVua3lVc2VyQWdlbnQsID09LCB3ZWJraXRfc2V0dGluZ3NfZ2V0X3VzZXJf
YWdlbnQoc2V0dGluZ3MuZ2V0KCkpKTsKKyAgICBhc3NlcnRUaGF0VXNlckFnZW50SXNTZW50SW5I
ZWFkZXJzKHRlc3QsIGZ1bmt5VXNlckFnZW50KTsKKworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRf
dXNlcl9hZ2VudF93aXRoX2FwcGxpY2F0aW9uX2RldGFpbHMoc2V0dGluZ3MuZ2V0KCksICJXZWJL
aXRHVEsrIiwgMCk7CisgICAgY29uc3QgY2hhciogdXNlckFnZW50V2l0aE51bGxWZXJzaW9uID0g
d2Via2l0X3NldHRpbmdzX2dldF91c2VyX2FnZW50KHNldHRpbmdzLmdldCgpKTsKKyAgICBnX2Fz
c2VydF9jbXBzdHIoZ19zdHJzdHJfbGVuKHVzZXJBZ2VudFdpdGhOdWxsVmVyc2lvbiwgLTEsIGRl
ZmF1bHRVc2VyQWdlbnQuZGF0YSgpKSwgPT0sIHVzZXJBZ2VudFdpdGhOdWxsVmVyc2lvbik7Cisg
ICAgZ19hc3NlcnQoZ19zdHJzdHJfbGVuKHVzZXJBZ2VudFdpdGhOdWxsVmVyc2lvbiwgLTEsICJX
ZWJLaXRHVEsrIikpOworCisgICAgd2Via2l0X3NldHRpbmdzX3NldF91c2VyX2FnZW50X3dpdGhf
YXBwbGljYXRpb25fZGV0YWlscyhzZXR0aW5ncy5nZXQoKSwgIldlYktpdEdUSysiLCAiIik7Cisg
ICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zZXR0aW5nc19nZXRfdXNlcl9hZ2VudChzZXR0aW5n
cy5nZXQoKSksID09LCB1c2VyQWdlbnRXaXRoTnVsbFZlcnNpb24pOworCisgICAgd2Via2l0X3Nl
dHRpbmdzX3NldF91c2VyX2FnZW50X3dpdGhfYXBwbGljYXRpb25fZGV0YWlscyhzZXR0aW5ncy5n
ZXQoKSwgIldlYkNhdEdUSysiLCAiMy40LjUiKTsKKyAgICBjb25zdCBjaGFyKiBuZXdVc2VyQWdl
bnQgPSB3ZWJraXRfc2V0dGluZ3NfZ2V0X3VzZXJfYWdlbnQoc2V0dGluZ3MuZ2V0KCkpOworICAg
IGdfYXNzZXJ0KGdfc3Ryc3RyX2xlbihuZXdVc2VyQWdlbnQsIC0xLCAiMy40LjUiKSk7CisgICAg
Z19hc3NlcnQoZ19zdHJzdHJfbGVuKG5ld1VzZXJBZ2VudCwgLTEsICJXZWJDYXRHVEsrIikpOwor
fQorCitzdGF0aWMgdm9pZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBzZXJ2ZXIsIFNvdXBN
ZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiwgU291cENsaWVu
dENvbnRleHQqLCBncG9pbnRlcikKK3sKKyAgICBpZiAobWVzc2FnZS0+bWV0aG9kICE9IFNPVVBf
TUVUSE9EX0dFVCkgeworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBT
T1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvIikpIHsKKyAgICAgICAgY29uc3QgY2hhciogdXNl
ckFnZW50ID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X29uZShtZXNzYWdlLT5yZXF1ZXN0X2hl
YWRlcnMsICJVc2VyLUFnZW50Iik7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1l
c3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5k
KG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX0NPUFksIHVzZXJBZ2VudCwgc3Ry
bGVuKHVzZXJBZ2VudCkpOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNz
YWdlLT5yZXNwb25zZV9ib2R5KTsKKyAgICB9IGVsc2UKKyAgICAgICAgc291cF9tZXNzYWdlX3Nl
dF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0ZPVU5EKTsKK30KKwordm9pZCBiZWZv
cmVBbGwoKQoreworICAgIGdTZXJ2ZXIgPSBuZXcgV2ViS2l0VGVzdFNlcnZlcigpOworICAgIGdT
ZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFjayk7CisKKyAgICBUZXN0OjphZGQoIldlYktpdFNldHRp
bmdzIiwgIndlYmtpdC1zZXR0aW5ncyIsIHRlc3RXZWJLaXRTZXR0aW5ncyk7CisgICAgVGVzdDo6
YWRkKCJXZWJLaXRTZXR0aW5ncyIsICJuZXctd2l0aC1zZXR0aW5ncyIsIHRlc3RXZWJLaXRTZXR0
aW5nc05ld1dpdGhTZXR0aW5ncyk7CisgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0U2V0dGlu
Z3MiLCAidXNlci1hZ2VudCIsIHRlc3RXZWJLaXRTZXR0aW5nc1VzZXJBZ2VudCk7Cit9CisKK3Zv
aWQgYWZ0ZXJBbGwoKQoreworICAgIGRlbGV0ZSBnU2VydmVyOworfQorCmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFZlcnNpb24uY3Bw
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRWZXJzaW9u
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzQ3ZmY5Ci0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJL
aXRWZXJzaW9uLmNwcApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJUZXN0TWFpbi5o
IgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdDIuaD4KKwor
CitzdGF0aWMgdm9pZCB0ZXN0V2ViS2l0VmVyc2lvbihUZXN0KiwgZ2NvbnN0cG9pbnRlcikKK3sK
KyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9nZXRfbWFqb3JfdmVyc2lvbigpLCA9PSwgV0VC
S0lUX01BSk9SX1ZFUlNJT04pOworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2dldF9taW5v
cl92ZXJzaW9uKCksID09LCBXRUJLSVRfTUlOT1JfVkVSU0lPTik7CisgICAgZ19hc3NlcnRfY21w
dWludCh3ZWJraXRfZ2V0X21pY3JvX3ZlcnNpb24oKSwgPT0sIFdFQktJVF9NSUNST19WRVJTSU9O
KTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYktpdENoZWNrVmVyc2lvbihUZXN0KiwgZ2NvbnN0
cG9pbnRlcikKK3sKKyAgICBnX2Fzc2VydChXRUJLSVRfQ0hFQ0tfVkVSU0lPTihXRUJLSVRfTUFK
T1JfVkVSU0lPTiwgV0VCS0lUX01JTk9SX1ZFUlNJT04sIFdFQktJVF9NSUNST19WRVJTSU9OKSk7
CisgICAgZ19hc3NlcnQoIVdFQktJVF9DSEVDS19WRVJTSU9OKFdFQktJVF9NQUpPUl9WRVJTSU9O
ICsgMSwgV0VCS0lUX01JTk9SX1ZFUlNJT04sIFdFQktJVF9NSUNST19WRVJTSU9OKSk7CisgICAg
Z19hc3NlcnQoIVdFQktJVF9DSEVDS19WRVJTSU9OKFdFQktJVF9NQUpPUl9WRVJTSU9OLCBXRUJL
SVRfTUlOT1JfVkVSU0lPTiArIDEsIFdFQktJVF9NSUNST19WRVJTSU9OKSk7CisgICAgZ19hc3Nl
cnQoIVdFQktJVF9DSEVDS19WRVJTSU9OKFdFQktJVF9NQUpPUl9WRVJTSU9OLCBXRUJLSVRfTUlO
T1JfVkVSU0lPTiwgV0VCS0lUX01JQ1JPX1ZFUlNJT04gKyAxKSk7Cit9CisKK3ZvaWQgYmVmb3Jl
QWxsKCkKK3sKKyAgICBUZXN0OjphZGQoIldlYktpdFZlcnNpb24iLCAidmVyc2lvbiIsIHRlc3RX
ZWJLaXRWZXJzaW9uKTsKKyAgICBUZXN0OjphZGQoIldlYktpdFZlcnNpb24iLCAiY2hlY2stdmVy
c2lvbiIsIHRlc3RXZWJLaXRDaGVja1ZlcnNpb24pOworfQorCit2b2lkIGFmdGVyQWxsKCkKK3sK
K30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0
V2ViS2l0V2ViQ29udGV4dC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJH
dGsvVGVzdFdlYktpdFdlYkNvbnRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjkzMGY0MDYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFdlYkNvbnRleHQuY3BwCkBAIC0wLDAgKzEsNDI1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpbmNsdWRlICJMb2FkVHJhY2tpbmdUZXN0LmgiCisjaW5jbHVkZSAiV2ViS2l0VGVz
dFNlcnZlci5oIgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL3dlYmtp
dDIuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dP
d25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nSGFzaC5oPgorCitzdGF0aWMgV2ViS2l0VGVzdFNlcnZlcioga1NlcnZlcjsK
Kworc3RhdGljIHZvaWQgdGVzdFdlYkNvbnRleHREZWZhdWx0KFRlc3QqIHRlc3QsIGdjb25zdHBv
aW50ZXIpCit7CisgICAgLy8gQ2hlY2sgdGhlcmUncyBhIHNpbmdsZSBpbnN0YW5jZSBvZiB0aGUg
ZGVmYXVsdCB3ZWIgY29udGV4dC4KKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0
X2RlZmF1bHQoKSA9PSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSk7Cit9CisKK2Ns
YXNzIFBsdWdpbnNUZXN0OiBwdWJsaWMgVGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RF
U1RfRklYVFVSRShQbHVnaW5zVGVzdCk7CisKKyAgICBQbHVnaW5zVGVzdCgpCisgICAgICAgIDog
bV9jb250ZXh0KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpKQorICAgICAgICAsIG1f
bWFpbkxvb3AoZ19tYWluX2xvb3BfbmV3KDAsIFRSVUUpKQorICAgICAgICAsIG1fcGx1Z2lucygw
KQorICAgIHsKKyAgICAgICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF9hZGRpdGlvbmFsX3BsdWdp
bnNfZGlyZWN0b3J5KG1fY29udGV4dCwgV0VCS0lUX1RFU1RfUExVR0lOX0RJUik7CisgICAgfQor
CisgICAgflBsdWdpbnNUZXN0KCkKKyAgICB7CisgICAgICAgIGdfbWFpbl9sb29wX3VucmVmKG1f
bWFpbkxvb3ApOworICAgICAgICBnX2xpc3RfZnJlZV9mdWxsKG1fcGx1Z2lucywgZ19vYmplY3Rf
dW5yZWYpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGdldFBsdWdpbnNBc3luY1JlYWR5Q2Fs
bGJhY2soR09iamVjdCosIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBQbHVnaW5zVGVzdCogdGVzdCkK
KyAgICB7CisgICAgICAgIHRlc3QtPm1fcGx1Z2lucyA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRf
cGx1Z2luc19maW5pc2godGVzdC0+bV9jb250ZXh0LCByZXN1bHQsIDApOworICAgICAgICBnX21h
aW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworICAgIH0KKworICAgIEdMaXN0KiBnZXRQ
bHVnaW5zKCkKKyAgICB7CisgICAgICAgIGdfbGlzdF9mcmVlX2Z1bGwobV9wbHVnaW5zLCBnX29i
amVjdF91bnJlZik7CisgICAgICAgIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfcGx1Z2lucyhtX2Nv
bnRleHQsIDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4oZ2V0UGx1Z2lu
c0FzeW5jUmVhZHlDYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9t
YWluTG9vcCk7CisgICAgICAgIHJldHVybiBtX3BsdWdpbnM7CisgICAgfQorCisgICAgV2ViS2l0
V2ViQ29udGV4dCogbV9jb250ZXh0OworICAgIEdNYWluTG9vcCogbV9tYWluTG9vcDsKKyAgICBH
TGlzdCogbV9wbHVnaW5zOworfTsKKworc3RhdGljIHZvaWQgdGVzdFdlYkNvbnRleHRHZXRQbHVn
aW5zKFBsdWdpbnNUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIEdMaXN0KiBwbHVn
aW5zID0gdGVzdC0+Z2V0UGx1Z2lucygpOworICAgIGdfYXNzZXJ0KHBsdWdpbnMpOworCisgICAg
R1JlZlB0cjxXZWJLaXRQbHVnaW4+IHRlc3RQbHVnaW47CisgICAgZm9yIChHTGlzdCogaXRlbSA9
IHBsdWdpbnM7IGl0ZW07IGl0ZW0gPSBnX2xpc3RfbmV4dChpdGVtKSkgeworICAgICAgICBXZWJL
aXRQbHVnaW4qIHBsdWdpbiA9IFdFQktJVF9QTFVHSU4oaXRlbS0+ZGF0YSk7CisgICAgICAgIHRl
c3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QocGx1Z2lu
KSk7CisgICAgICAgIGlmICghZ19zdHJjbXAwKHdlYmtpdF9wbHVnaW5fZ2V0X25hbWUocGx1Z2lu
KSwgIldlYktpdCBUZXN0IFBsdWdJbiIpKSB7CisgICAgICAgICAgICB0ZXN0UGx1Z2luID0gcGx1
Z2luOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgZ19hc3NlcnQo
V0VCS0lUX0lTX1BMVUdJTih0ZXN0UGx1Z2luLmdldCgpKSk7CisKKyAgICBHT3duUHRyPGNoYXI+
IHBsdWdpblBhdGgoZ19idWlsZF9maWxlbmFtZShXRUJLSVRfVEVTVF9QTFVHSU5fRElSLCAibGli
VGVzdE5ldHNjYXBlUGx1Z2luLnNvIiwgTlVMTCkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJr
aXRfcGx1Z2luX2dldF9wYXRoKHRlc3RQbHVnaW4uZ2V0KCkpLCA9PSwgcGx1Z2luUGF0aC5nZXQo
KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9wbHVnaW5fZ2V0X2Rlc2NyaXB0aW9uKHRl
c3RQbHVnaW4uZ2V0KCkpLCA9PSwgIlNpbXBsZSBOZXRzY2FwZcKuIHBsdWctaW4gdGhhdCBoYW5k
bGVzIHRlc3QgY29udGVudCBmb3IgV2ViS2l0Iik7CisgICAgR0xpc3QqIG1pbWVJbmZvTGlzdCA9
IHdlYmtpdF9wbHVnaW5fZ2V0X21pbWVfaW5mb19saXN0KHRlc3RQbHVnaW4uZ2V0KCkpOworICAg
IGdfYXNzZXJ0KG1pbWVJbmZvTGlzdCk7CisgICAgZ19hc3NlcnRfY21wdWludChnX2xpc3RfbGVu
Z3RoKG1pbWVJbmZvTGlzdCksID09LCAyKTsKKworICAgIFdlYktpdE1pbWVJbmZvKiBtaW1lSW5m
byA9IHN0YXRpY19jYXN0PFdlYktpdE1pbWVJbmZvKj4obWltZUluZm9MaXN0LT5kYXRhKTsKKyAg
ICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X21pbWVfaW5mb19nZXRfbWltZV90eXBlKG1pbWVJbmZv
KSwgPT0sICJpbWFnZS9wbmciKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X21pbWVfaW5m
b19nZXRfZGVzY3JpcHRpb24obWltZUluZm8pLCA9PSwgInBuZyBpbWFnZSIpOworICAgIGNvbnN0
IGdjaGFyKiBjb25zdCogZXh0ZW5zaW9ucyA9IHdlYmtpdF9taW1lX2luZm9fZ2V0X2V4dGVuc2lv
bnMobWltZUluZm8pOworICAgIGdfYXNzZXJ0KGV4dGVuc2lvbnMpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cihleHRlbnNpb25zWzBdLCA9PSwgInBuZyIpOworCisgICAgbWltZUluZm9MaXN0ID0gZ19s
aXN0X25leHQobWltZUluZm9MaXN0KTsKKyAgICBtaW1lSW5mbyA9IHN0YXRpY19jYXN0PFdlYktp
dE1pbWVJbmZvKj4obWltZUluZm9MaXN0LT5kYXRhKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Vi
a2l0X21pbWVfaW5mb19nZXRfbWltZV90eXBlKG1pbWVJbmZvKSwgPT0sICJhcHBsaWNhdGlvbi94
LXdlYmtpdC10ZXN0LW5ldHNjYXBlIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9taW1l
X2luZm9fZ2V0X2Rlc2NyaXB0aW9uKG1pbWVJbmZvKSwgPT0sICJ0ZXN0IG5ldHNjYXBlIGNvbnRl
bnQiKTsKKyAgICBleHRlbnNpb25zID0gd2Via2l0X21pbWVfaW5mb19nZXRfZXh0ZW5zaW9ucyht
aW1lSW5mbyk7CisgICAgZ19hc3NlcnQoZXh0ZW5zaW9ucyk7CisgICAgZ19hc3NlcnRfY21wc3Ry
KGV4dGVuc2lvbnNbMF0sID09LCAidGVzdG5ldHNjYXBlIik7Cit9CisKK3N0YXRpYyBjb25zdCBj
aGFyKiBrQmFySFRNTCA9ICI8aHRtbD48Ym9keT5CYXI8L2JvZHk+PC9odG1sPiI7CitzdGF0aWMg
Y29uc3QgY2hhcioga0VjaG9IVE1MRm9ybWF0ID0gIjxodG1sPjxib2R5PiVzPC9ib2R5PjwvaHRt
bD4iOworc3RhdGljIGNvbnN0IGNoYXIqIGVycm9yRG9tYWluID0gInRlc3QiOworc3RhdGljIGNv
bnN0IGludCBlcnJvckNvZGUgPSAxMDsKK3N0YXRpYyBjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2Ug
PSAiRXJyb3IgbWVzc2FnZS4iOworCitjbGFzcyBVUklTY2hlbWVUZXN0OiBwdWJsaWMgTG9hZFRy
YWNraW5nVGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShVUklTY2hl
bWVUZXN0KTsKKworICAgIHN0cnVjdCBVUklTY2hlbWVIYW5kbGVyIHsKKyAgICAgICAgVVJJU2No
ZW1lSGFuZGxlcigpCisgICAgICAgICAgICA6IHJlcGx5TGVuZ3RoKDApCisgICAgICAgIHsKKyAg
ICAgICAgfQorCisgICAgICAgIFVSSVNjaGVtZUhhbmRsZXIoY29uc3QgY2hhciogcmVwbHksIGlu
dCByZXBseUxlbmd0aCwgY29uc3QgY2hhciogbWltZVR5cGUpCisgICAgICAgICAgICA6IHJlcGx5
KHJlcGx5KQorICAgICAgICAgICAgLCByZXBseUxlbmd0aChyZXBseUxlbmd0aCkKKyAgICAgICAg
ICAgICwgbWltZVR5cGUobWltZVR5cGUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAg
IENTdHJpbmcgcmVwbHk7CisgICAgICAgIGludCByZXBseUxlbmd0aDsKKyAgICAgICAgQ1N0cmlu
ZyBtaW1lVHlwZTsKKyAgICB9OworCisgICAgc3RhdGljIHZvaWQgdXJpU2NoZW1lUmVxdWVzdENh
bGxiYWNrKFdlYktpdFVSSVNjaGVtZVJlcXVlc3QqIHJlcXVlc3QsIGdwb2ludGVyIHVzZXJEYXRh
KQorICAgIHsKKyAgICAgICAgVVJJU2NoZW1lVGVzdCogdGVzdCA9IHN0YXRpY19jYXN0PFVSSVNj
aGVtZVRlc3QqPih1c2VyRGF0YSk7CisgICAgICAgIHRlc3QtPm1fdXJpU2NoZW1lUmVxdWVzdCA9
IHJlcXVlc3Q7CisgICAgICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0Rmlu
aXNoZXMoR19PQkpFQ1QocmVxdWVzdCkpOworCisgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF91cmlf
c2NoZW1lX3JlcXVlc3RfZ2V0X3dlYl92aWV3KHJlcXVlc3QpID09IHRlc3QtPm1fd2ViVmlldyk7
CisKKyAgICAgICAgR1JlZlB0cjxHSW5wdXRTdHJlYW0+IGlucHV0U3RyZWFtID0gYWRvcHRHUmVm
KGdfbWVtb3J5X2lucHV0X3N0cmVhbV9uZXcoKSk7CisgICAgICAgIHRlc3QtPmFzc2VydE9iamVj
dElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QoaW5wdXRTdHJlYW0uZ2V0KCkpKTsK
KworICAgICAgICBjb25zdCBjaGFyKiBzY2hlbWUgPSB3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0
X2dldF9zY2hlbWUocmVxdWVzdCk7CisgICAgICAgIGdfYXNzZXJ0KHNjaGVtZSk7CisgICAgICAg
IGdfYXNzZXJ0KHRlc3QtPm1faGFuZGxlcnNNYXAuY29udGFpbnMoU3RyaW5nOjpmcm9tVVRGOChz
Y2hlbWUpKSk7CisKKyAgICAgICAgaWYgKCFnX3N0cmNtcDAoc2NoZW1lLCAiZXJyb3IiKSkgewor
ICAgICAgICAgICAgR093blB0cjxHRXJyb3I+IGVycm9yKGdfZXJyb3JfbmV3X2xpdGVyYWwoZ19x
dWFya19mcm9tX3N0cmluZyhlcnJvckRvbWFpbiksIGVycm9yQ29kZSwgZXJyb3JNZXNzYWdlKSk7
CisgICAgICAgICAgICB3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2ZpbmlzaF9lcnJvcihyZXF1
ZXN0LCBlcnJvci5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBjb25zdCBVUklTY2hlbWVIYW5kbGVyJiBoYW5kbGVyID0gdGVzdC0+bV9oYW5kbGVyc01h
cC5nZXQoU3RyaW5nOjpmcm9tVVRGOChzY2hlbWUpKTsKKworICAgICAgICBpZiAoIWdfc3RyY21w
MChzY2hlbWUsICJlY2hvIikpIHsKKyAgICAgICAgICAgIGNoYXIqIHJlcGx5SFRNTCA9IGdfc3Ry
ZHVwX3ByaW50ZihoYW5kbGVyLnJlcGx5LmRhdGEoKSwgd2Via2l0X3VyaV9zY2hlbWVfcmVxdWVz
dF9nZXRfcGF0aChyZXF1ZXN0KSk7CisgICAgICAgICAgICBnX21lbW9yeV9pbnB1dF9zdHJlYW1f
YWRkX2RhdGEoR19NRU1PUllfSU5QVVRfU1RSRUFNKGlucHV0U3RyZWFtLmdldCgpKSwgcmVwbHlI
VE1MLCBzdHJsZW4ocmVwbHlIVE1MKSwgZ19mcmVlKTsKKyAgICAgICAgfSBlbHNlIGlmICghZ19z
dHJjbXAwKHNjaGVtZSwgImNsb3NlZCIpKQorICAgICAgICAgICAgZ19pbnB1dF9zdHJlYW1fY2xv
c2UoaW5wdXRTdHJlYW0uZ2V0KCksIDAsIDApOworICAgICAgICBlbHNlIGlmICghaGFuZGxlci5y
ZXBseS5pc051bGwoKSkKKyAgICAgICAgICAgIGdfbWVtb3J5X2lucHV0X3N0cmVhbV9hZGRfZGF0
YShHX01FTU9SWV9JTlBVVF9TVFJFQU0oaW5wdXRTdHJlYW0uZ2V0KCkpLCBoYW5kbGVyLnJlcGx5
LmRhdGEoKSwgaGFuZGxlci5yZXBseS5sZW5ndGgoKSwgMCk7CisKKyAgICAgICAgd2Via2l0X3Vy
aV9zY2hlbWVfcmVxdWVzdF9maW5pc2gocmVxdWVzdCwgaW5wdXRTdHJlYW0uZ2V0KCksIGhhbmRs
ZXIucmVwbHlMZW5ndGgsIGhhbmRsZXIubWltZVR5cGUuZGF0YSgpKTsKKyAgICB9CisKKyAgICB2
b2lkIHJlZ2lzdGVyVVJJU2NoZW1lSGFuZGxlcihjb25zdCBjaGFyKiBzY2hlbWUsIGNvbnN0IGNo
YXIqIHJlcGx5LCBpbnQgcmVwbHlMZW5ndGgsIGNvbnN0IGNoYXIqIG1pbWVUeXBlKQorICAgIHsK
KyAgICAgICAgbV9oYW5kbGVyc01hcC5zZXQoU3RyaW5nOjpmcm9tVVRGOChzY2hlbWUpLCBVUklT
Y2hlbWVIYW5kbGVyKHJlcGx5LCByZXBseUxlbmd0aCwgbWltZVR5cGUpKTsKKyAgICAgICAgd2Vi
a2l0X3dlYl9jb250ZXh0X3JlZ2lzdGVyX3VyaV9zY2hlbWUod2Via2l0X3dlYl9jb250ZXh0X2dl
dF9kZWZhdWx0KCksIHNjaGVtZSwgdXJpU2NoZW1lUmVxdWVzdENhbGxiYWNrLCB0aGlzLCAwKTsK
KyAgICB9CisKKyAgICBHUmVmUHRyPFdlYktpdFVSSVNjaGVtZVJlcXVlc3Q+IG1fdXJpU2NoZW1l
UmVxdWVzdDsKKyAgICBIYXNoTWFwPFN0cmluZywgVVJJU2NoZW1lSGFuZGxlcj4gbV9oYW5kbGVy
c01hcDsKK307CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJDb250ZXh0VVJJU2NoZW1lKFVSSVNjaGVt
ZVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+cmVnaXN0ZXJVUklTY2hl
bWVIYW5kbGVyKCJmb28iLCBrQmFySFRNTCwgc3RybGVuKGtCYXJIVE1MKSwgInRleHQvaHRtbCIp
OworICAgIHRlc3QtPmxvYWRVUkkoImZvbzpibGFuayIpOworICAgIHRlc3QtPndhaXRVbnRpbExv
YWRGaW5pc2hlZCgpOworICAgIHNpemVfdCBtYWluUmVzb3VyY2VEYXRhU2l6ZSA9IDA7CisgICAg
Y29uc3QgY2hhciogbWFpblJlc291cmNlRGF0YSA9IHRlc3QtPm1haW5SZXNvdXJjZURhdGEobWFp
blJlc291cmNlRGF0YVNpemUpOworICAgIGdfYXNzZXJ0X2NtcGludChtYWluUmVzb3VyY2VEYXRh
U2l6ZSwgPT0sIHN0cmxlbihrQmFySFRNTCkpOworICAgIGdfYXNzZXJ0KCFzdHJuY21wKG1haW5S
ZXNvdXJjZURhdGEsIGtCYXJIVE1MLCBtYWluUmVzb3VyY2VEYXRhU2l6ZSkpOworCisgICAgdGVz
dC0+cmVnaXN0ZXJVUklTY2hlbWVIYW5kbGVyKCJlY2hvIiwga0VjaG9IVE1MRm9ybWF0LCAtMSwg
InRleHQvaHRtbCIpOworICAgIHRlc3QtPmxvYWRVUkkoImVjaG86aGVsbG8gd29ybGQiKTsKKyAg
ICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBHT3duUHRyPGNoYXI+IGVjaG9I
VE1MKGdfc3RyZHVwX3ByaW50ZihrRWNob0hUTUxGb3JtYXQsIHdlYmtpdF91cmlfc2NoZW1lX3Jl
cXVlc3RfZ2V0X3BhdGgodGVzdC0+bV91cmlTY2hlbWVSZXF1ZXN0LmdldCgpKSkpOworICAgIG1h
aW5SZXNvdXJjZURhdGFTaXplID0gMDsKKyAgICBtYWluUmVzb3VyY2VEYXRhID0gdGVzdC0+bWFp
blJlc291cmNlRGF0YShtYWluUmVzb3VyY2VEYXRhU2l6ZSk7CisgICAgZ19hc3NlcnRfY21waW50
KG1haW5SZXNvdXJjZURhdGFTaXplLCA9PSwgc3RybGVuKGVjaG9IVE1MLmdldCgpKSk7CisgICAg
Z19hc3NlcnQoIXN0cm5jbXAobWFpblJlc291cmNlRGF0YSwgZWNob0hUTUwuZ2V0KCksIG1haW5S
ZXNvdXJjZURhdGFTaXplKSk7CisKKyAgICB0ZXN0LT5yZWdpc3RlclVSSVNjaGVtZUhhbmRsZXIo
Im5vbWltZSIsIGtCYXJIVE1MLCAtMSwgMCk7CisgICAgdGVzdC0+bV9sb2FkRXZlbnRzLmNsZWFy
KCk7CisgICAgdGVzdC0+bG9hZFVSSSgibm9taW1lOmZvbyBiYXIiKTsKKyAgICB0ZXN0LT53YWl0
VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX2xvYWRFdmVudHMuY29u
dGFpbnMoTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkRmFpbGVkKSk7CisKKyAgICB0
ZXN0LT5yZWdpc3RlclVSSVNjaGVtZUhhbmRsZXIoImVtcHR5IiwgMCwgMCwgInRleHQvaHRtbCIp
OworICAgIHRlc3QtPm1fbG9hZEV2ZW50cy5jbGVhcigpOworICAgIHRlc3QtPmxvYWRVUkkoImVt
cHR5Om5vdGhpbmciKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBn
X2Fzc2VydCghdGVzdC0+bV9sb2FkRXZlbnRzLmNvbnRhaW5zKExvYWRUcmFja2luZ1Rlc3Q6OlBy
b3Zpc2lvbmFsTG9hZEZhaWxlZCkpOworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX2xvYWRFdmVudHMu
Y29udGFpbnMoTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZhaWxlZCkpOworCisgICAgdGVzdC0+cmVn
aXN0ZXJVUklTY2hlbWVIYW5kbGVyKCJlcnJvciIsIDAsIDAsIDApOworICAgIHRlc3QtPm1fbG9h
ZEV2ZW50cy5jbGVhcigpOworICAgIHRlc3QtPmxvYWRVUkkoImVycm9yOmVycm9yIik7CisgICAg
dGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9sb2Fk
RXZlbnRzLmNvbnRhaW5zKExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZEZhaWxlZCkp
OworICAgIGdfYXNzZXJ0KHRlc3QtPm1fbG9hZEZhaWxlZCk7CisgICAgZ19hc3NlcnRfZXJyb3Io
dGVzdC0+bV9lcnJvci5nZXQoKSwgZ19xdWFya19mcm9tX3N0cmluZyhlcnJvckRvbWFpbiksIGVy
cm9yQ29kZSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPm1fZXJyb3ItPm1lc3NhZ2UsID09
LCBlcnJvck1lc3NhZ2UpOworCisgICAgdGVzdC0+cmVnaXN0ZXJVUklTY2hlbWVIYW5kbGVyKCJj
bG9zZWQiLCAwLCAwLCAwKTsKKyAgICB0ZXN0LT5tX2xvYWRFdmVudHMuY2xlYXIoKTsKKyAgICB0
ZXN0LT5sb2FkVVJJKCJjbG9zZWQ6aW5wdXQtc3RyZWFtIik7CisgICAgdGVzdC0+d2FpdFVudGls
TG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9sb2FkRXZlbnRzLmNvbnRhaW5z
KExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZEZhaWxlZCkpOworICAgIGdfYXNzZXJ0
KHRlc3QtPm1fbG9hZEZhaWxlZCk7CisgICAgZ19hc3NlcnRfZXJyb3IodGVzdC0+bV9lcnJvci5n
ZXQoKSwgR19JT19FUlJPUiwgR19JT19FUlJPUl9DTE9TRUQpOworfQorCitzdGF0aWMgdm9pZCB0
ZXN0V2ViQ29udGV4dFNwZWxsQ2hlY2tlcihUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQorewor
ICAgIFdlYktpdFdlYkNvbnRleHQqIHdlYkNvbnRleHQgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0
X2RlZmF1bHQoKTsKKworICAgIC8vIENoZWNrIHdoYXQgaGFwcGVucyBpZiBubyBzcGVsbCBjaGVj
a2luZyBsYW5ndWFnZSBoYXMgYmVlbiBzZXQuCisgICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBjdXJy
ZW50TGFuZ3VhZ2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1
YWdlcyh3ZWJDb250ZXh0KTsKKyAgICBnX2Fzc2VydCghY3VycmVudExhbmd1YWdlKTsKKworICAg
IC8vIFNldCB0aGUgbGFuZ3VhZ2UgdG8gYSBzcGVjaWZpYyBvbmUuCisgICAgR1JlZlB0cjxHUHRy
QXJyYXk+IGxhbmd1YWdlcyA9IGFkb3B0R1JlZihnX3B0cl9hcnJheV9uZXcoKSk7CisgICAgZ19w
dHJfYXJyYXlfYWRkKGxhbmd1YWdlcy5nZXQoKSwgY29uc3RfY2FzdDxncG9pbnRlcj4oc3RhdGlj
X2Nhc3Q8Y29uc3Qgdm9pZCo+KCJlbl9VUyIpKSk7CisgICAgZ19wdHJfYXJyYXlfYWRkKGxhbmd1
YWdlcy5nZXQoKSwgMCk7CisgICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF9zcGVsbF9jaGVja2lu
Z19sYW5ndWFnZXMod2ViQ29udGV4dCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKiBjb25z
dCo+KGxhbmd1YWdlcy0+cGRhdGEpKTsKKyAgICBjdXJyZW50TGFuZ3VhZ2UgPSB3ZWJraXRfd2Vi
X2NvbnRleHRfZ2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyh3ZWJDb250ZXh0KTsKKyAgICBn
X2Fzc2VydF9jbXB1aW50KGdfc3Rydl9sZW5ndGgoY29uc3RfY2FzdDxjaGFyKio+KGN1cnJlbnRM
YW5ndWFnZSkpLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGN1cnJlbnRMYW5ndWFnZVsw
XSwgPT0sICJlbl9VUyIpOworCisgICAgLy8gU2V0IHRoZSBsYW5ndWFnZSBzdHJpbmcgdG8gbGlz
dCBvZiB2YWxpZCBsYW5ndWFnZXMuCisgICAgZ19wdHJfYXJyYXlfcmVtb3ZlX2luZGV4X2Zhc3Qo
bGFuZ3VhZ2VzLmdldCgpLCBsYW5ndWFnZXMtPmxlbiAtIDEpOworICAgIGdfcHRyX2FycmF5X2Fk
ZChsYW5ndWFnZXMuZ2V0KCksIGNvbnN0X2Nhc3Q8Z3BvaW50ZXI+KHN0YXRpY19jYXN0PGNvbnN0
IHZvaWQqPigiZW5fR0IiKSkpOworICAgIGdfcHRyX2FycmF5X2FkZChsYW5ndWFnZXMuZ2V0KCks
IDApOworICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2Vz
KHdlYkNvbnRleHQsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhciogY29uc3QqPihsYW5ndWFn
ZXMtPnBkYXRhKSk7CisgICAgY3VycmVudExhbmd1YWdlID0gd2Via2l0X3dlYl9jb250ZXh0X2dl
dF9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMod2ViQ29udGV4dCk7CisgICAgZ19hc3NlcnRfY21w
dWludChnX3N0cnZfbGVuZ3RoKGNvbnN0X2Nhc3Q8Y2hhcioqPihjdXJyZW50TGFuZ3VhZ2UpKSwg
PT0sIDIpOworICAgIGdfYXNzZXJ0X2NtcHN0cihjdXJyZW50TGFuZ3VhZ2VbMF0sID09LCAiZW5f
VVMiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoY3VycmVudExhbmd1YWdlWzFdLCA9PSwgImVuX0dC
Iik7CisKKyAgICAvLyBUcnkgcGFzc2luZyBhIHdyb25nIGxhbmd1YWdlIGFsb25nIHdpdGggZ29v
ZCBvbmVzLgorICAgIGdfcHRyX2FycmF5X3JlbW92ZV9pbmRleF9mYXN0KGxhbmd1YWdlcy5nZXQo
KSwgbGFuZ3VhZ2VzLT5sZW4gLSAxKTsKKyAgICBnX3B0cl9hcnJheV9hZGQobGFuZ3VhZ2VzLmdl
dCgpLCBjb25zdF9jYXN0PGdwb2ludGVyPihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4oImJkX1dS
IikpKTsKKyAgICBnX3B0cl9hcnJheV9hZGQobGFuZ3VhZ2VzLmdldCgpLCAwKTsKKyAgICB3ZWJr
aXRfd2ViX2NvbnRleHRfc2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyh3ZWJDb250ZXh0LCBy
ZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqIGNvbnN0Kj4obGFuZ3VhZ2VzLT5wZGF0YSkpOwor
ICAgIGN1cnJlbnRMYW5ndWFnZSA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hlY2tp
bmdfbGFuZ3VhZ2VzKHdlYkNvbnRleHQpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQoZ19zdHJ2X2xl
bmd0aChjb25zdF9jYXN0PGNoYXIqKj4oY3VycmVudExhbmd1YWdlKSksID09LCAyKTsKKyAgICBn
X2Fzc2VydF9jbXBzdHIoY3VycmVudExhbmd1YWdlWzBdLCA9PSwgImVuX1VTIik7CisgICAgZ19h
c3NlcnRfY21wc3RyKGN1cnJlbnRMYW5ndWFnZVsxXSwgPT0sICJlbl9HQiIpOworCisgICAgLy8g
VHJ5IHBhc3NpbmcgYSBsaXN0IHdpdGggb25seSB3cm9uZyBsYW5ndWFnZXMuCisgICAgbGFuZ3Vh
Z2VzID0gYWRvcHRHUmVmKGdfcHRyX2FycmF5X25ldygpKTsKKyAgICBnX3B0cl9hcnJheV9hZGQo
bGFuZ3VhZ2VzLmdldCgpLCBjb25zdF9jYXN0PGdwb2ludGVyPihzdGF0aWNfY2FzdDxjb25zdCB2
b2lkKj4oImJkX1dSIikpKTsKKyAgICBnX3B0cl9hcnJheV9hZGQobGFuZ3VhZ2VzLmdldCgpLCBj
b25zdF9jYXN0PGdwb2ludGVyPihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4oIndyX0JEIikpKTsK
KyAgICBnX3B0cl9hcnJheV9hZGQobGFuZ3VhZ2VzLmdldCgpLCAwKTsKKyAgICB3ZWJraXRfd2Vi
X2NvbnRleHRfc2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyh3ZWJDb250ZXh0LCByZWludGVy
cHJldF9jYXN0PGNvbnN0IGNoYXIqIGNvbnN0Kj4obGFuZ3VhZ2VzLT5wZGF0YSkpOworICAgIGN1
cnJlbnRMYW5ndWFnZSA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hlY2tpbmdfbGFu
Z3VhZ2VzKHdlYkNvbnRleHQpOworICAgIGdfYXNzZXJ0KCFjdXJyZW50TGFuZ3VhZ2UpOworCisg
ICAgLy8gQ2hlY2sgZGlzYWJsaW5nIGFuZCByZS1lbmFibGluZyBzcGVsbCBjaGVja2luZy4KKyAg
ICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3NwZWxsX2NoZWNraW5nX2VuYWJsZWQod2ViQ29udGV4
dCwgRkFMU0UpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3NwZWxsX2No
ZWNraW5nX2VuYWJsZWQod2ViQ29udGV4dCkpOworICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRf
c3BlbGxfY2hlY2tpbmdfZW5hYmxlZCh3ZWJDb250ZXh0LCBUUlVFKTsKKyAgICBnX2Fzc2VydCh3
ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3NwZWxsX2NoZWNraW5nX2VuYWJsZWQod2ViQ29udGV4dCkp
OworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViQ29udGV4dExhbmd1YWdlcyhXZWJWaWV3VGVzdCog
dGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZXhwZWN0ZWRE
ZWZhdWx0TGFuZ3VhZ2UgPSAiZW4iOworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJ
Rm9yUGF0aCgiLyIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7
CisgICAgc2l6ZV90IG1haW5SZXNvdXJjZURhdGFTaXplID0gMDsKKyAgICBjb25zdCBjaGFyKiBt
YWluUmVzb3VyY2VEYXRhID0gdGVzdC0+bWFpblJlc291cmNlRGF0YShtYWluUmVzb3VyY2VEYXRh
U2l6ZSk7CisgICAgZ19hc3NlcnRfY21wdWludChtYWluUmVzb3VyY2VEYXRhU2l6ZSwgPT0sIHN0
cmxlbihleHBlY3RlZERlZmF1bHRMYW5ndWFnZSkpOworICAgIGdfYXNzZXJ0KCFzdHJuY21wKG1h
aW5SZXNvdXJjZURhdGEsIGV4cGVjdGVkRGVmYXVsdExhbmd1YWdlLCBtYWluUmVzb3VyY2VEYXRh
U2l6ZSkpOworCisgICAgR1JlZlB0cjxHUHRyQXJyYXk+IGxhbmd1YWdlcyA9IGFkb3B0R1JlZihn
X3B0cl9hcnJheV9uZXcoKSk7CisgICAgZ19wdHJfYXJyYXlfYWRkKGxhbmd1YWdlcy5nZXQoKSwg
Y29uc3RfY2FzdDxncG9pbnRlcj4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KCJlbiIpKSk7Cisg
ICAgZ19wdHJfYXJyYXlfYWRkKGxhbmd1YWdlcy5nZXQoKSwgY29uc3RfY2FzdDxncG9pbnRlcj4o
c3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KCJFU19lcyIpKSk7CisgICAgZ19wdHJfYXJyYXlfYWRk
KGxhbmd1YWdlcy5nZXQoKSwgY29uc3RfY2FzdDxncG9pbnRlcj4oc3RhdGljX2Nhc3Q8Y29uc3Qg
dm9pZCo+KCJkRSIpKSk7CisgICAgZ19wdHJfYXJyYXlfYWRkKGxhbmd1YWdlcy5nZXQoKSwgMCk7
CisgICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF9wcmVmZXJyZWRfbGFuZ3VhZ2VzKHdlYmtpdF93
ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqIGNv
bnN0Kj4obGFuZ3VhZ2VzLT5wZGF0YSkpOworCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGV4cGVj
dGVkTGFuZ3VhZ2VzID0gImVuLCBlcy1lcztxPTAuOTAsIGRlO3E9MC44MCI7CisgICAgdGVzdC0+
bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53
YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBtYWluUmVzb3VyY2VEYXRhU2l6ZSA9IDA7Cisg
ICAgbWFpblJlc291cmNlRGF0YSA9IHRlc3QtPm1haW5SZXNvdXJjZURhdGEobWFpblJlc291cmNl
RGF0YVNpemUpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQobWFpblJlc291cmNlRGF0YVNpemUsID09
LCBzdHJsZW4oZXhwZWN0ZWRMYW5ndWFnZXMpKTsKKyAgICBnX2Fzc2VydCghc3RybmNtcChtYWlu
UmVzb3VyY2VEYXRhLCBleHBlY3RlZExhbmd1YWdlcywgbWFpblJlc291cmNlRGF0YVNpemUpKTsK
K30KKworc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3Vw
TWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSosIFNvdXBDbGll
bnRDb250ZXh0KiwgZ3BvaW50ZXIpCit7CisgICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQ
X01FVEhPRF9HRVQpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwg
U09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiLyIpKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIGFj
Y2VwdExhbmd1YWdlID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X29uZShtZXNzYWdlLT5yZXF1
ZXN0X2hlYWRlcnMsICJBY2NlcHQtTGFuZ3VhZ2UiKTsKKyAgICAgICAgc291cF9tZXNzYWdlX3Nl
dF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOworICAgICAgICBzb3VwX21lc3NhZ2Vf
Ym9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfQ09QWSwgYWNj
ZXB0TGFuZ3VhZ2UsIHN0cmxlbihhY2NlcHRMYW5ndWFnZSkpOworICAgICAgICBzb3VwX21lc3Nh
Z2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0ZP
VU5EKTsKK30KKworY2xhc3MgU2VjdXJpdHlQb2xpY3lUZXN0OiBwdWJsaWMgVGVzdCB7CitwdWJs
aWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShTZWN1cml0eVBvbGljeVRlc3QpOworCisg
ICAgZW51bSBTZWN1cml0eVBvbGljeSB7CisgICAgICAgIExvY2FsID0gMSA8PCAxLAorICAgICAg
ICBOb0FjY2VzcyA9IDEgPDwgMiwKKyAgICAgICAgRGlzcGxheUlzb2xhdGVkID0gMSA8PCAzLAor
ICAgICAgICBTZWN1cmUgPSAxIDw8IDQsCisgICAgICAgIENPUlNFbmFibGVkID0gMSA8PCA1LAor
ICAgICAgICBFbXB0eURvY3VtZW50ID0gMSA8PCA2CisgICAgfTsKKworICAgIFNlY3VyaXR5UG9s
aWN5VGVzdCgpCisgICAgICAgIDogbV9tYW5hZ2VyKHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc2Vj
dXJpdHlfbWFuYWdlcih3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSkpCisgICAgewor
ICAgIH0KKworICAgIHZvaWQgdmVyaWZ5VGhhdFNjaGVtZU1hdGNoZXNQb2xpY3koY29uc3QgY2hh
ciogc2NoZW1lLCB1bnNpZ25lZCBwb2xpY3kpCisgICAgeworICAgICAgICBpZiAocG9saWN5ICYg
TG9jYWwpCisgICAgICAgICAgICBnX2Fzc2VydCh3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl91cmlf
c2NoZW1lX2lzX2xvY2FsKG1fbWFuYWdlciwgc2NoZW1lKSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl91cmlfc2NoZW1lX2lzX2xv
Y2FsKG1fbWFuYWdlciwgc2NoZW1lKSk7CisgICAgICAgIGlmIChwb2xpY3kgJiBOb0FjY2VzcykK
KyAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9zZWN1cml0eV9tYW5hZ2VyX3VyaV9zY2hlbWVf
aXNfbm9fYWNjZXNzKG1fbWFuYWdlciwgc2NoZW1lKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl91cmlfc2NoZW1lX2lzX25vX2Fj
Y2VzcyhtX21hbmFnZXIsIHNjaGVtZSkpOworICAgICAgICBpZiAocG9saWN5ICYgRGlzcGxheUlz
b2xhdGVkKQorICAgICAgICAgICAgZ19hc3NlcnQod2Via2l0X3NlY3VyaXR5X21hbmFnZXJfdXJp
X3NjaGVtZV9pc19kaXNwbGF5X2lzb2xhdGVkKG1fbWFuYWdlciwgc2NoZW1lKSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl91cmlf
c2NoZW1lX2lzX2Rpc3BsYXlfaXNvbGF0ZWQobV9tYW5hZ2VyLCBzY2hlbWUpKTsKKyAgICAgICAg
aWYgKHBvbGljeSAmIFNlY3VyZSkKKyAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9zZWN1cml0
eV9tYW5hZ2VyX3VyaV9zY2hlbWVfaXNfc2VjdXJlKG1fbWFuYWdlciwgc2NoZW1lKSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl91
cmlfc2NoZW1lX2lzX3NlY3VyZShtX21hbmFnZXIsIHNjaGVtZSkpOworICAgICAgICBpZiAocG9s
aWN5ICYgQ09SU0VuYWJsZWQpCisgICAgICAgICAgICBnX2Fzc2VydCh3ZWJraXRfc2VjdXJpdHlf
bWFuYWdlcl91cmlfc2NoZW1lX2lzX2NvcnNfZW5hYmxlZChtX21hbmFnZXIsIHNjaGVtZSkpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X3NlY3VyaXR5X21hbmFn
ZXJfdXJpX3NjaGVtZV9pc19jb3JzX2VuYWJsZWQobV9tYW5hZ2VyLCBzY2hlbWUpKTsKKyAgICAg
ICAgaWYgKHBvbGljeSAmIEVtcHR5RG9jdW1lbnQpCisgICAgICAgICAgICBnX2Fzc2VydCh3ZWJr
aXRfc2VjdXJpdHlfbWFuYWdlcl91cmlfc2NoZW1lX2lzX2VtcHR5X2RvY3VtZW50KG1fbWFuYWdl
ciwgc2NoZW1lKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRf
c2VjdXJpdHlfbWFuYWdlcl91cmlfc2NoZW1lX2lzX2VtcHR5X2RvY3VtZW50KG1fbWFuYWdlciwg
c2NoZW1lKSk7CisgICAgfQorCisgICAgV2ViS2l0U2VjdXJpdHlNYW5hZ2VyKiBtX21hbmFnZXI7
Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0V2ViQ29udGV4dFNlY3VyaXR5UG9saWN5KFNlY3VyaXR5
UG9saWN5VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICAvLyBWZXJpZnlUaGF0U2No
ZW1lTWF0Y2hlc1BvbGljeSBkZWZhdWx0IHBvbGljeSBmb3Igd2VsbCBrbm93biBzY2hlbWVzLgor
ICAgIHRlc3QtPnZlcmlmeVRoYXRTY2hlbWVNYXRjaGVzUG9saWN5KCJodHRwIiwgU2VjdXJpdHlQ
b2xpY3lUZXN0OjpDT1JTRW5hYmxlZCk7CisgICAgdGVzdC0+dmVyaWZ5VGhhdFNjaGVtZU1hdGNo
ZXNQb2xpY3koImh0dHBzIiwgU2VjdXJpdHlQb2xpY3lUZXN0OjpDT1JTRW5hYmxlZCB8IFNlY3Vy
aXR5UG9saWN5VGVzdDo6U2VjdXJlKTsKKyAgICB0ZXN0LT52ZXJpZnlUaGF0U2NoZW1lTWF0Y2hl
c1BvbGljeSgiZmlsZSIsIFNlY3VyaXR5UG9saWN5VGVzdDo6TG9jYWwpOworICAgIHRlc3QtPnZl
cmlmeVRoYXRTY2hlbWVNYXRjaGVzUG9saWN5KCJkYXRhIiwgU2VjdXJpdHlQb2xpY3lUZXN0OjpO
b0FjY2VzcyB8IFNlY3VyaXR5UG9saWN5VGVzdDo6U2VjdXJlKTsKKyAgICB0ZXN0LT52ZXJpZnlU
aGF0U2NoZW1lTWF0Y2hlc1BvbGljeSgiYWJvdXQiLCBTZWN1cml0eVBvbGljeVRlc3Q6Ok5vQWNj
ZXNzIHwgU2VjdXJpdHlQb2xpY3lUZXN0OjpTZWN1cmUgfCBTZWN1cml0eVBvbGljeVRlc3Q6OkVt
cHR5RG9jdW1lbnQpOworCisgICAgLy8gQ3VzdG9tIHNjaGVtZS4KKyAgICB0ZXN0LT52ZXJpZnlU
aGF0U2NoZW1lTWF0Y2hlc1BvbGljeSgiZm9vIiwgMCk7CisKKyAgICB3ZWJraXRfc2VjdXJpdHlf
bWFuYWdlcl9yZWdpc3Rlcl91cmlfc2NoZW1lX2FzX2xvY2FsKHRlc3QtPm1fbWFuYWdlciwgImZv
byIpOworICAgIHRlc3QtPnZlcmlmeVRoYXRTY2hlbWVNYXRjaGVzUG9saWN5KCJmb28iLCBTZWN1
cml0eVBvbGljeVRlc3Q6OkxvY2FsKTsKKyAgICB3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl9yZWdp
c3Rlcl91cmlfc2NoZW1lX2FzX25vX2FjY2Vzcyh0ZXN0LT5tX21hbmFnZXIsICJmb28iKTsKKyAg
ICB0ZXN0LT52ZXJpZnlUaGF0U2NoZW1lTWF0Y2hlc1BvbGljeSgiZm9vIiwgU2VjdXJpdHlQb2xp
Y3lUZXN0OjpMb2NhbCB8IFNlY3VyaXR5UG9saWN5VGVzdDo6Tm9BY2Nlc3MpOworICAgIHdlYmtp
dF9zZWN1cml0eV9tYW5hZ2VyX3JlZ2lzdGVyX3VyaV9zY2hlbWVfYXNfZGlzcGxheV9pc29sYXRl
ZCh0ZXN0LT5tX21hbmFnZXIsICJmb28iKTsKKyAgICB0ZXN0LT52ZXJpZnlUaGF0U2NoZW1lTWF0
Y2hlc1BvbGljeSgiZm9vIiwgU2VjdXJpdHlQb2xpY3lUZXN0OjpMb2NhbCB8IFNlY3VyaXR5UG9s
aWN5VGVzdDo6Tm9BY2Nlc3MgfCBTZWN1cml0eVBvbGljeVRlc3Q6OkRpc3BsYXlJc29sYXRlZCk7
CisgICAgd2Via2l0X3NlY3VyaXR5X21hbmFnZXJfcmVnaXN0ZXJfdXJpX3NjaGVtZV9hc19zZWN1
cmUodGVzdC0+bV9tYW5hZ2VyLCAiZm9vIik7CisgICAgdGVzdC0+dmVyaWZ5VGhhdFNjaGVtZU1h
dGNoZXNQb2xpY3koImZvbyIsIFNlY3VyaXR5UG9saWN5VGVzdDo6TG9jYWwgfCBTZWN1cml0eVBv
bGljeVRlc3Q6Ok5vQWNjZXNzIHwgU2VjdXJpdHlQb2xpY3lUZXN0OjpEaXNwbGF5SXNvbGF0ZWQg
fCBTZWN1cml0eVBvbGljeVRlc3Q6OlNlY3VyZSk7CisgICAgd2Via2l0X3NlY3VyaXR5X21hbmFn
ZXJfcmVnaXN0ZXJfdXJpX3NjaGVtZV9hc19jb3JzX2VuYWJsZWQodGVzdC0+bV9tYW5hZ2VyLCAi
Zm9vIik7CisgICAgdGVzdC0+dmVyaWZ5VGhhdFNjaGVtZU1hdGNoZXNQb2xpY3koImZvbyIsIFNl
Y3VyaXR5UG9saWN5VGVzdDo6TG9jYWwgfCBTZWN1cml0eVBvbGljeVRlc3Q6Ok5vQWNjZXNzIHwg
U2VjdXJpdHlQb2xpY3lUZXN0OjpEaXNwbGF5SXNvbGF0ZWQgfCBTZWN1cml0eVBvbGljeVRlc3Q6
OlNlY3VyZQorICAgICAgICAgICAgICAgIHwgU2VjdXJpdHlQb2xpY3lUZXN0OjpDT1JTRW5hYmxl
ZCk7CisgICAgd2Via2l0X3NlY3VyaXR5X21hbmFnZXJfcmVnaXN0ZXJfdXJpX3NjaGVtZV9hc19l
bXB0eV9kb2N1bWVudCh0ZXN0LT5tX21hbmFnZXIsICJmb28iKTsKKyAgICB0ZXN0LT52ZXJpZnlU
aGF0U2NoZW1lTWF0Y2hlc1BvbGljeSgiZm9vIiwgU2VjdXJpdHlQb2xpY3lUZXN0OjpMb2NhbCB8
IFNlY3VyaXR5UG9saWN5VGVzdDo6Tm9BY2Nlc3MgfCBTZWN1cml0eVBvbGljeVRlc3Q6OkRpc3Bs
YXlJc29sYXRlZCB8IFNlY3VyaXR5UG9saWN5VGVzdDo6U2VjdXJlCisgICAgICAgICAgICAgICAg
fCBTZWN1cml0eVBvbGljeVRlc3Q6OkNPUlNFbmFibGVkIHwgU2VjdXJpdHlQb2xpY3lUZXN0OjpF
bXB0eURvY3VtZW50KTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQoreworICAgIGtTZXJ2ZXIgPSBu
ZXcgV2ViS2l0VGVzdFNlcnZlcigpOworICAgIGtTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFjayk7
CisKKyAgICBUZXN0OjphZGQoIldlYktpdFdlYkNvbnRleHQiLCAiZGVmYXVsdC1jb250ZXh0Iiwg
dGVzdFdlYkNvbnRleHREZWZhdWx0KTsKKyAgICBQbHVnaW5zVGVzdDo6YWRkKCJXZWJLaXRXZWJD
b250ZXh0IiwgImdldC1wbHVnaW5zIiwgdGVzdFdlYkNvbnRleHRHZXRQbHVnaW5zKTsKKyAgICBV
UklTY2hlbWVUZXN0OjphZGQoIldlYktpdFdlYkNvbnRleHQiLCAidXJpLXNjaGVtZSIsIHRlc3RX
ZWJDb250ZXh0VVJJU2NoZW1lKTsKKyAgICBUZXN0OjphZGQoIldlYktpdFdlYkNvbnRleHQiLCAi
c3BlbGwtY2hlY2tlciIsIHRlc3RXZWJDb250ZXh0U3BlbGxDaGVja2VyKTsKKyAgICBXZWJWaWV3
VGVzdDo6YWRkKCJXZWJLaXRXZWJDb250ZXh0IiwgImxhbmd1YWdlcyIsIHRlc3RXZWJDb250ZXh0
TGFuZ3VhZ2VzKTsKKyAgICBTZWN1cml0eVBvbGljeVRlc3Q6OmFkZCgiV2ViS2l0U2VjdXJpdHlN
YW5hZ2VyIiwgInNlY3VyaXR5LXBvbGljeSIsIHRlc3RXZWJDb250ZXh0U2VjdXJpdHlQb2xpY3kp
OworfQorCit2b2lkIGFmdGVyQWxsKCkKK3sKKyAgICBkZWxldGUga1NlcnZlcjsKK30KZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0V2Vi
Vmlldy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktp
dFdlYlZpZXcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3MGIwYTIK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsv
VGVzdFdlYktpdFdlYlZpZXcuY3BwCkBAIC0wLDAgKzEsNjA4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2Vi
Vmlld1Rlc3QuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oPgorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTVmFsdWVSZWYuaD4KKyNpbmNsdWRlIDxnbGliL2dzdGRp
by5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKworc3RhdGljIHZvaWQgdGVz
dFdlYlZpZXdEZWZhdWx0Q29udGV4dChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikK
K3sKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQodGVzdC0+bV93ZWJW
aWV3KSA9PSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSk7CisKKyAgICAvLyBDaGVj
ayB0aGF0IGEgd2ViIHZpZXcgY3JlYXRlZCB3aXRoIGdfb2JqZWN0X25ldyBoYXMgdGhlIGRlZmF1
bHQgY29udGV4dC4KKyAgICBHUmVmUHRyPFdlYktpdFdlYlZpZXc+IHdlYlZpZXcgPSBXRUJLSVRf
V0VCX1ZJRVcoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQl9WSUVXLCBOVUxMKSk7CisgICAg
Z19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KHdlYlZpZXcuZ2V0KCkpID09IHdl
YmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdl
YlZpZXdDdXN0b21DaGFyc2V0KFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQorewor
ICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfZ2V0X2N1c3RvbV9jaGFyc2V0KHRlc3QtPm1f
d2ViVmlldykpOworICAgIHdlYmtpdF93ZWJfdmlld19zZXRfY3VzdG9tX2NoYXJzZXQodGVzdC0+
bV93ZWJWaWV3LCAidXRmOCIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdf
Z2V0X2N1c3RvbV9jaGFyc2V0KHRlc3QtPm1fd2ViVmlldyksID09LCAidXRmOCIpOworICAgIC8v
IEdvIGJhY2sgdG8gdGhlIGRlZmF1bHQgY2hhcnNldC4KKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0
X2N1c3RvbV9jaGFyc2V0KHRlc3QtPm1fd2ViVmlldywgMCk7CisgICAgZ19hc3NlcnQoIXdlYmtp
dF93ZWJfdmlld19nZXRfY3VzdG9tX2NoYXJzZXQodGVzdC0+bV93ZWJWaWV3KSk7Cit9CisKK3N0
YXRpYyB2b2lkIHRlc3RXZWJWaWV3U2V0dGluZ3MoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBv
aW50ZXIpCit7CisgICAgV2ViS2l0U2V0dGluZ3MqIGRlZmF1bHRTZXR0aW5ncyA9IHdlYmtpdF93
ZWJfdmlld19nZXRfc2V0dGluZ3ModGVzdC0+bV93ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChkZWZh
dWx0U2V0dGluZ3MpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2ph
dmFzY3JpcHQoZGVmYXVsdFNldHRpbmdzKSk7CisKKyAgICBHUmVmUHRyPFdlYktpdFNldHRpbmdz
PiBuZXdTZXR0aW5ncyA9IGFkb3B0R1JlZih3ZWJraXRfc2V0dGluZ3NfbmV3KCkpOworICAgIGdf
b2JqZWN0X3NldChHX09CSkVDVChuZXdTZXR0aW5ncy5nZXQoKSksICJlbmFibGUtamF2YXNjcmlw
dCIsIEZBTFNFLCBOVUxMKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X3NldHRpbmdzKHRlc3Qt
Pm1fd2ViVmlldywgbmV3U2V0dGluZ3MuZ2V0KCkpOworCisgICAgV2ViS2l0U2V0dGluZ3MqIHNl
dHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh0ZXN0LT5tX3dlYlZpZXcpOwor
ICAgIGdfYXNzZXJ0KHNldHRpbmdzICE9IGRlZmF1bHRTZXR0aW5ncyk7CisgICAgZ19hc3NlcnQo
IXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2phdmFzY3JpcHQoc2V0dGluZ3MpKTsKKworICAg
IEdSZWZQdHI8R3RrV2lkZ2V0PiB3ZWJWaWV3MiA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKKyAg
ICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHdl
YlZpZXcyLmdldCgpKSk7CisgICAgd2Via2l0X3dlYl92aWV3X3NldF9zZXR0aW5ncyhXRUJLSVRf
V0VCX1ZJRVcod2ViVmlldzIuZ2V0KCkpLCBzZXR0aW5ncyk7CisgICAgZ19hc3NlcnQod2Via2l0
X3dlYl92aWV3X2dldF9zZXR0aW5ncyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldzIuZ2V0KCkpKSA9
PSBzZXR0aW5ncyk7CisKKyAgICBHUmVmUHRyPFdlYktpdFNldHRpbmdzPiBuZXdTZXR0aW5nczIg
PSBhZG9wdEdSZWYod2Via2l0X3NldHRpbmdzX25ldygpKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdf
c2V0X3NldHRpbmdzKFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3Mi5nZXQoKSksIG5ld1NldHRpbmdz
Mi5nZXQoKSk7CisgICAgc2V0dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKFdF
QktJVF9XRUJfVklFVyh3ZWJWaWV3Mi5nZXQoKSkpOworICAgIGdfYXNzZXJ0KHNldHRpbmdzID09
IG5ld1NldHRpbmdzMi5nZXQoKSk7CisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9l
bmFibGVfamF2YXNjcmlwdChzZXR0aW5ncykpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmll
d1pvb21MZXZlbChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBnX2Fz
c2VydF9jbXBmbG9hdCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3pvb21fbGV2ZWwodGVzdC0+bV93ZWJW
aWV3KSwgPT0sIDEpOworICAgIHdlYmtpdF93ZWJfdmlld19zZXRfem9vbV9sZXZlbCh0ZXN0LT5t
X3dlYlZpZXcsIDIuNSk7CisgICAgZ19hc3NlcnRfY21wZmxvYXQod2Via2l0X3dlYl92aWV3X2dl
dF96b29tX2xldmVsKHRlc3QtPm1fd2ViVmlldyksID09LCAyLjUpOworCisgICAgd2Via2l0X3Nl
dHRpbmdzX3NldF96b29tX3RleHRfb25seSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHRl
c3QtPm1fd2ViVmlldyksIFRSVUUpOworICAgIC8vIFRoZSB6b29tIGxldmVsIHNob3VsZG4ndCBj
aGFuZ2Ugd2hlbiB6b29tLXRleHQtb25seSBzZXR0aW5nIGNoYW5nZXMuCisgICAgZ19hc3NlcnRf
Y21wZmxvYXQod2Via2l0X3dlYl92aWV3X2dldF96b29tX2xldmVsKHRlc3QtPm1fd2ViVmlldyks
ID09LCAyLjUpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1J1bkphdmFTY3JpcHQoV2Vi
Vmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIq
IGh0bWwgPSAiPGh0bWw+PGJvZHk+PGEgaWQ9J1dlYktpdExpbmsnIGhyZWY9J2h0dHA6Ly93d3cu
d2Via2l0Z3RrLm9yZy8nIHRpdGxlPSdXZWJLaXRHVEsrIFRpdGxlJz5XZWJLaXRHVEsrIFdlYnNp
dGU8L2E+PC9ib2R5PjwvaHRtbD4iOworICAgIHRlc3QtPmxvYWRIdG1sKGh0bWwsIDApOworICAg
IHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgR093blB0cjxHRXJyb3I+IGVy
cm9yOworICAgIFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0
LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoIndpbmRvdy5kb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnV2ViS2l0TGluaycpLnRpdGxlOyIsICZlcnJvci5vdXRQdHIoKSk7CisgICAg
Z19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsK
KyAgICBHT3duUHRyPGNoYXI+IHZhbHVlU3RyaW5nKFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVz
dWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodmFs
dWVTdHJpbmcuZ2V0KCksID09LCAiV2ViS2l0R1RLKyBUaXRsZSIpOworCisgICAgamF2YXNjcmlw
dFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgid2luZG93
LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdXZWJLaXRMaW5rJykuaHJlZjsiLCAmZXJyb3Iub3V0
UHRyKCkpOworICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KCFl
cnJvci5nZXQoKSk7CisgICAgdmFsdWVTdHJpbmcuc2V0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0
UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIo
dmFsdWVTdHJpbmcuZ2V0KCksID09LCAiaHR0cDovL3d3dy53ZWJraXRndGsub3JnLyIpOworCisg
ICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5p
c2hlZCgid2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdXZWJLaXRMaW5rJykudGV4dENv
bnRlbnQiLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQp
OworICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7CisgICAgdmFsdWVTdHJpbmcuc2V0KFdlYlZp
ZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKKyAg
ICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAiV2ViS2l0R1RLKyBXZWJz
aXRlIik7CisKKyAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdh
aXRVbnRpbEZpbmlzaGVkKCJhID0gMjU7IiwgJmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fzc2Vy
dChqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOworICAgIGdf
YXNzZXJ0X2NtcGZsb2F0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9OdW1iZXIoamF2
YXNjcmlwdFJlc3VsdCksID09LCAyNSk7CisKKyAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+
cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJhID0gMi41OyIsICZlcnJvci5vdXRQ
dHIoKSk7CisgICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVy
cm9yLmdldCgpKTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdChXZWJWaWV3VGVzdDo6amF2YXNjcmlw
dFJlc3VsdFRvTnVtYmVyKGphdmFzY3JpcHRSZXN1bHQpLCA9PSwgMi41KTsKKworICAgIGphdmFz
Y3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImEg
PSB0cnVlIiwgJmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0
KTsKKyAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOworICAgIGdfYXNzZXJ0KFdlYlZpZXdUZXN0
OjpqYXZhc2NyaXB0UmVzdWx0VG9Cb29sZWFuKGphdmFzY3JpcHRSZXN1bHQpKTsKKworICAgIGph
dmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQo
ImEgPSBmYWxzZSIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQoamF2YXNjcmlwdFJl
c3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKyAgICBnX2Fzc2VydCghV2ViVmll
d1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0Jvb2xlYW4oamF2YXNjcmlwdFJlc3VsdCkpOworCisg
ICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5p
c2hlZCgiYSA9IG51bGwiLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGdfYXNzZXJ0KGphdmFzY3Jp
cHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7CisgICAgZ19hc3NlcnQoV2Vi
Vmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRJc051bGwoamF2YXNjcmlwdFJlc3VsdCkpOworCisg
ICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5p
c2hlZCgiZnVuY3Rpb24gRm9vKCkgeyBhID0gMjU7IH0gRm9vKCk7IiwgJmVycm9yLm91dFB0cigp
KTsKKyAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydCghZXJyb3Iu
Z2V0KCkpOworICAgIGdfYXNzZXJ0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0SXNVbmRl
ZmluZWQoamF2YXNjcmlwdFJlc3VsdCkpOworCisgICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3Qt
PnJ1bkphdmFTY3JpcHRGcm9tR1Jlc291cmNlQW5kV2FpdFVudGlsRmluaXNoZWQoIi9vcmcvd2Vi
a2l0L3dlYmtpdDJndGsvdGVzdHMvbGluay10aXRsZS5qcyIsICZlcnJvci5vdXRQdHIoKSk7Cisg
ICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgp
KTsKKyAgICB2YWx1ZVN0cmluZy5zZXQoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0NT
dHJpbmcoamF2YXNjcmlwdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih2YWx1ZVN0cmlu
Zy5nZXQoKSwgPT0sICJXZWJLaXRHVEsrIFRpdGxlIik7CisKKyAgICBqYXZhc2NyaXB0UmVzdWx0
ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEZyb21HUmVzb3VyY2VBbmRXYWl0VW50aWxGaW5pc2hlZCgi
L3dyb25nL3BhdGgvdG8vcmVzb3VyY2UuanMiLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGdfYXNz
ZXJ0KCFqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydF9lcnJvcihlcnJvci5nZXQoKSwg
R19SRVNPVVJDRV9FUlJPUiwgR19SRVNPVVJDRV9FUlJPUl9OT1RfRk9VTkQpOworICAgIGVycm9y
LmNsZWFyKCk7CisKKyAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFu
ZFdhaXRVbnRpbEZpbmlzaGVkKCJmb28oKTsiLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGdfYXNz
ZXJ0KCFqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydF9lcnJvcihlcnJvci5nZXQoKSwg
V0VCS0lUX0pBVkFTQ1JJUFRfRVJST1IsIFdFQktJVF9KQVZBU0NSSVBUX0VSUk9SX1NDUklQVF9G
QUlMRUQpOworfQorCitjbGFzcyBGdWxsU2NyZWVuQ2xpZW50VGVzdDogcHVibGljIFdlYlZpZXdU
ZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKEZ1bGxTY3JlZW5DbGll
bnRUZXN0KTsKKworICAgIGVudW0gRnVsbFNjcmVlbkV2ZW50IHsKKyAgICAgICAgTm9uZSwKKyAg
ICAgICAgRW50ZXIsCisgICAgICAgIExlYXZlCisgICAgfTsKKworICAgIHN0YXRpYyBnYm9vbGVh
biB2aWV3RW50ZXJGdWxsU2NyZWVuQ2FsbGJhY2soV2ViS2l0V2ViVmlldyosIEZ1bGxTY3JlZW5D
bGllbnRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+bV9ldmVudCA9IEVudGVyOwor
ICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworICAgICAgICByZXR1
cm4gRkFMU0U7CisgICAgfQorCisgICAgc3RhdGljIGdib29sZWFuIHZpZXdMZWF2ZUZ1bGxTY3Jl
ZW5DYWxsYmFjayhXZWJLaXRXZWJWaWV3KiwgRnVsbFNjcmVlbkNsaWVudFRlc3QqIHRlc3QpCisg
ICAgeworICAgICAgICB0ZXN0LT5tX2V2ZW50ID0gTGVhdmU7CisgICAgICAgIGdfbWFpbl9sb29w
X3F1aXQodGVzdC0+bV9tYWluTG9vcCk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisK
KyAgICBGdWxsU2NyZWVuQ2xpZW50VGVzdCgpCisgICAgICAgIDogbV9ldmVudChOb25lKQorICAg
IHsKKyAgICAgICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfZnVsbHNjcmVlbih3ZWJraXRf
d2ViX3ZpZXdfZ2V0X3NldHRpbmdzKG1fd2ViVmlldyksIFRSVUUpOworICAgICAgICBnX3NpZ25h
bF9jb25uZWN0KG1fd2ViVmlldywgImVudGVyLWZ1bGxzY3JlZW4iLCBHX0NBTExCQUNLKHZpZXdF
bnRlckZ1bGxTY3JlZW5DYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0
KG1fd2ViVmlldywgImxlYXZlLWZ1bGxzY3JlZW4iLCBHX0NBTExCQUNLKHZpZXdMZWF2ZUZ1bGxT
Y3JlZW5DYWxsYmFjayksIHRoaXMpOworICAgIH0KKworICAgIH5GdWxsU2NyZWVuQ2xpZW50VGVz
dCgpCisgICAgeworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQo
bV93ZWJWaWV3LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKKyAgICB9
CisKKyAgICB2b2lkIHJlcXVlc3RGdWxsU2NyZWVuQW5kV2FpdFVudGlsRW50ZXJlZEZ1bGxTY3Jl
ZW4oKQorICAgIHsKKyAgICAgICAgbV9ldmVudCA9IE5vbmU7CisgICAgICAgIHdlYmtpdF93ZWJf
dmlld19ydW5famF2YXNjcmlwdChtX3dlYlZpZXcsICJkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQu
d2Via2l0UmVxdWVzdEZ1bGxTY3JlZW4oKTsiLCAwLCAwLCAwKTsKKyAgICAgICAgZ19tYWluX2xv
b3BfcnVuKG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBsZWF2ZUZ1
bGxTY3JlZW5JZGxlKEZ1bGxTY3JlZW5DbGllbnRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAg
dGVzdC0+a2V5U3Ryb2tlKEdES19LRVlfRXNjYXBlKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOwor
ICAgIH0KKworICAgIHZvaWQgbGVhdmVGdWxsU2NyZWVuQW5kV2FpdFVudGlsTGVmdEZ1bGxTY3Jl
ZW4oKQorICAgIHsKKyAgICAgICAgbV9ldmVudCA9IE5vbmU7CisgICAgICAgIGdfaWRsZV9hZGQo
cmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4obGVhdmVGdWxsU2NyZWVuSWRsZSksIHRoaXMp
OworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgfQorCisgICAgRnVs
bFNjcmVlbkV2ZW50IG1fZXZlbnQ7Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0Z1bGxT
Y3JlZW4oRnVsbFNjcmVlbkNsaWVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAg
dGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7CisgICAgdGVzdC0+bG9hZEh0
bWwoIjxodG1sPjxib2R5PkZ1bGxTY3JlZW4gdGVzdDwvYm9keT48L2h0bWw+IiwgMCk7CisgICAg
dGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgdGVzdC0+cmVxdWVzdEZ1bGxTY3Jl
ZW5BbmRXYWl0VW50aWxFbnRlcmVkRnVsbFNjcmVlbigpOworICAgIGdfYXNzZXJ0X2NtcGludCh0
ZXN0LT5tX2V2ZW50LCA9PSwgRnVsbFNjcmVlbkNsaWVudFRlc3Q6OkVudGVyKTsKKyAgICB0ZXN0
LT5sZWF2ZUZ1bGxTY3JlZW5BbmRXYWl0VW50aWxMZWZ0RnVsbFNjcmVlbigpOworICAgIGdfYXNz
ZXJ0X2NtcGludCh0ZXN0LT5tX2V2ZW50LCA9PSwgRnVsbFNjcmVlbkNsaWVudFRlc3Q6OkxlYXZl
KTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdDYW5TaG93TUlNRVR5cGUoV2ViVmlld1Rl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8gU3VwcG9ydGVkIE1JTUUgdHlwZXMu
CisgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2Nhbl9zaG93X21pbWVfdHlwZSh0ZXN0LT5t
X3dlYlZpZXcsICJ0ZXh0L2h0bWwiKSk7CisgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2Nh
bl9zaG93X21pbWVfdHlwZSh0ZXN0LT5tX3dlYlZpZXcsICJ0ZXh0L3BsYWluIikpOworICAgIGdf
YXNzZXJ0KHdlYmtpdF93ZWJfdmlld19jYW5fc2hvd19taW1lX3R5cGUodGVzdC0+bV93ZWJWaWV3
LCAiaW1hZ2UvanBlZyIpKTsKKworICAgIC8vIFVuc3VwcG9ydGVkIE1JTUUgdHlwZXMuCisgICAg
Z19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fc2hvd19taW1lX3R5cGUodGVzdC0+bV93ZWJW
aWV3LCAidGV4dC92Y2FyZCIpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9z
aG93X21pbWVfdHlwZSh0ZXN0LT5tX3dlYlZpZXcsICJhcHBsaWNhdGlvbi9wZGYiKSk7CisgICAg
Z19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fc2hvd19taW1lX3R5cGUodGVzdC0+bV93ZWJW
aWV3LCAiYXBwbGljYXRpb24vemlwIikpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdf
Y2FuX3Nob3dfbWltZV90eXBlKHRlc3QtPm1fd2ViVmlldywgImFwcGxpY2F0aW9uL29jdGV0LXN0
cmVhbSIpKTsKKworICAgIC8vIFBsdWdpbnMgYXJlIG9ubHkgc3VwcG9ydGVkIHdoZW4gZW5hYmxl
ZC4KKyAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X2FkZGl0aW9uYWxfcGx1Z2luc19kaXJlY3Rv
cnkod2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KHRlc3QtPm1fd2ViVmlldyksIFdFQktJVF9U
RVNUX1BMVUdJTl9ESVIpOworICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19jYW5fc2hvd19t
aW1lX3R5cGUodGVzdC0+bV93ZWJWaWV3LCAiYXBwbGljYXRpb24veC13ZWJraXQtdGVzdC1uZXRz
Y2FwZSIpKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9wbHVnaW5zKHdlYmtpdF93
ZWJfdmlld19nZXRfc2V0dGluZ3ModGVzdC0+bV93ZWJWaWV3KSwgRkFMU0UpOworICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX3Nob3dfbWltZV90eXBlKHRlc3QtPm1fd2ViVmlldywg
ImFwcGxpY2F0aW9uL3gtd2Via2l0LXRlc3QtbmV0c2NhcGUiKSk7Cit9CisKK2NsYXNzIEZvcm1D
bGllbnRUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9U
RVNUX0ZJWFRVUkUoRm9ybUNsaWVudFRlc3QpOworCisgICAgc3RhdGljIHZvaWQgc3VibWl0Rm9y
bUNhbGxiYWNrKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRGb3JtU3VibWlzc2lvblJlcXVlc3QqIHJl
cXVlc3QsIEZvcm1DbGllbnRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+c3VibWl0
Rm9ybShyZXF1ZXN0KTsKKyAgICB9CisKKyAgICBGb3JtQ2xpZW50VGVzdCgpCisgICAgICAgIDog
bV9zdWJtaXRQb3NpdGlvblgoMCkKKyAgICAgICAgLCBtX3N1Ym1pdFBvc2l0aW9uWSgwKQorICAg
IHsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJzdWJtaXQtZm9ybSIsIEdf
Q0FMTEJBQ0soc3VibWl0Rm9ybUNhbGxiYWNrKSwgdGhpcyk7CisgICAgfQorCisgICAgfkZvcm1D
bGllbnRUZXN0KCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3Rf
bWF0Y2hlZChtX3dlYlZpZXcsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMp
OworICAgIH0KKworICAgIHZvaWQgc3VibWl0Rm9ybShXZWJLaXRGb3JtU3VibWlzc2lvblJlcXVl
c3QqIHJlcXVlc3QpCisgICAgeworICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVz
dEZpbmlzaGVzKEdfT0JKRUNUKHJlcXVlc3QpKTsKKyAgICAgICAgbV9yZXF1ZXN0ID0gcmVxdWVz
dDsKKyAgICAgICAgd2Via2l0X2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0X3N1Ym1pdChyZXF1ZXN0
KTsKKyAgICAgICAgcXVpdE1haW5Mb29wKCk7CisgICAgfQorCisgICAgR0hhc2hUYWJsZSogd2Fp
dFVudGlsRm9ybVN1Ym1pdHRlZEFuZEdldFRleHRGaWVsZHMoKQorICAgIHsKKyAgICAgICAgZ19t
YWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgICAgICByZXR1cm4gd2Via2l0X2Zvcm1fc3Vi
bWlzc2lvbl9yZXF1ZXN0X2dldF90ZXh0X2ZpZWxkcyhtX3JlcXVlc3QuZ2V0KCkpOworICAgIH0K
KworICAgIHN0YXRpYyBnYm9vbGVhbiBkb0NsaWNrSWRsZUNhbGxiYWNrKEZvcm1DbGllbnRUZXN0
KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+Y2xpY2tNb3VzZUJ1dHRvbih0ZXN0LT5tX3N1
Ym1pdFBvc2l0aW9uWCwgdGVzdC0+bV9zdWJtaXRQb3NpdGlvblksIDEpOworICAgICAgICByZXR1
cm4gRkFMU0U7CisgICAgfQorCisgICAgdm9pZCBzdWJtaXRGb3JtQXRQb3NpdGlvbihpbnQgeCwg
aW50IHkpCisgICAgeworICAgICAgICBtX3N1Ym1pdFBvc2l0aW9uWCA9IHg7CisgICAgICAgIG1f
c3VibWl0UG9zaXRpb25ZID0geTsKKyAgICAgICAgZ19pZGxlX2FkZChyZWludGVycHJldF9jYXN0
PEdTb3VyY2VGdW5jPihkb0NsaWNrSWRsZUNhbGxiYWNrKSwgdGhpcyk7CisgICAgfQorCisgICAg
aW50IG1fc3VibWl0UG9zaXRpb25YOworICAgIGludCBtX3N1Ym1pdFBvc2l0aW9uWTsKKyAgICBH
UmVmUHRyPFdlYktpdEZvcm1TdWJtaXNzaW9uUmVxdWVzdD4gbV9yZXF1ZXN0OworfTsKKworc3Rh
dGljIHZvaWQgdGVzdFdlYlZpZXdTdWJtaXRGb3JtKEZvcm1DbGllbnRUZXN0KiB0ZXN0LCBnY29u
c3Rwb2ludGVyKQoreworICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgp
OworCisgICAgY29uc3QgY2hhciogZm9ybUhUTUwgPQorICAgICAgICAiPGh0bWw+PGJvZHk+Igor
ICAgICAgICAiIDxmb3JtIGFjdGlvbj0nIyc+IgorICAgICAgICAiICA8aW5wdXQgdHlwZT0ndGV4
dCcgbmFtZT0ndGV4dDEnIHZhbHVlPSd2YWx1ZTEnPiIKKyAgICAgICAgIiAgPGlucHV0IHR5cGU9
J3RleHQnIG5hbWU9J3RleHQyJyB2YWx1ZT0ndmFsdWUyJz4iCisgICAgICAgICIgIDxpbnB1dCB0
eXBlPSdwYXNzd29yZCcgbmFtZT0ncGFzc3dvcmQnIHZhbHVlPSdzZWNyZXQnPiIKKyAgICAgICAg
IiAgPHRleHRhcmVhIGNvbHM9JzUnIHJvd3M9JzUnIG5hbWU9J3RleHRhcmVhJz5UZXh0PC90ZXh0
YXJlYT4iCisgICAgICAgICIgIDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2hpZGRlbjEnIHZh
bHVlPSdoaWRkZW4xJz4iCisgICAgICAgICIgIDxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPSdT
dWJtaXQnIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6MScgc2l6ZT0nMTAn
PiIKKyAgICAgICAgIiA8L2Zvcm0+IgorICAgICAgICAiPC9ib2R5PjwvaHRtbD4iOworCisgICAg
dGVzdC0+bG9hZEh0bWwoZm9ybUhUTUwsICJmaWxlOi8vLyIpOworICAgIHRlc3QtPndhaXRVbnRp
bExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+c3VibWl0Rm9ybUF0UG9zaXRpb24oNSwgNSk7
CisgICAgR0hhc2hUYWJsZSogdmFsdWVzID0gdGVzdC0+d2FpdFVudGlsRm9ybVN1Ym1pdHRlZEFu
ZEdldFRleHRGaWVsZHMoKTsKKyAgICBnX2Fzc2VydCh2YWx1ZXMpOworICAgIGdfYXNzZXJ0X2Nt
cHVpbnQoZ19oYXNoX3RhYmxlX3NpemUodmFsdWVzKSwgPT0sIDMpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cihzdGF0aWNfY2FzdDxjaGFyKj4oZ19oYXNoX3RhYmxlX2xvb2t1cCh2YWx1ZXMsICJ0ZXh0
MSIpKSwgPT0sICJ2YWx1ZTEiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc3RhdGljX2Nhc3Q8Y2hh
cio+KGdfaGFzaF90YWJsZV9sb29rdXAodmFsdWVzLCAidGV4dDIiKSksID09LCAidmFsdWUyIik7
CisgICAgZ19hc3NlcnRfY21wc3RyKHN0YXRpY19jYXN0PGNoYXIqPihnX2hhc2hfdGFibGVfbG9v
a3VwKHZhbHVlcywgInBhc3N3b3JkIikpLCA9PSwgInNlY3JldCIpOworfQorCitjbGFzcyBTYXZl
V2ViVmlld1Rlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElC
X1RFU1RfRklYVFVSRShTYXZlV2ViVmlld1Rlc3QpOworCisgICAgU2F2ZVdlYlZpZXdUZXN0KCkK
KyAgICAgICAgOiBtX3RlbXBEaXJlY3RvcnkoZ19kaXJfbWFrZV90bXAoIldlYktpdDJTYXZlVmll
d1Rlc3QtWFhYWFhYIiwgMCkpCisgICAgeworICAgIH0KKworICAgIH5TYXZlV2ViVmlld1Rlc3Qo
KQorICAgIHsKKyAgICAgICAgaWYgKEdfSVNfRklMRShtX2ZpbGUuZ2V0KCkpKQorICAgICAgICAg
ICAgZ19maWxlX2RlbGV0ZShtX2ZpbGUuZ2V0KCksIDAsIDApOworCisgICAgICAgIGlmIChHX0lT
X0lOUFVUX1NUUkVBTShtX2lucHV0U3RyZWFtLmdldCgpKSkKKyAgICAgICAgICAgIGdfaW5wdXRf
c3RyZWFtX2Nsb3NlKG1faW5wdXRTdHJlYW0uZ2V0KCksIDAsIDApOworCisgICAgICAgIGlmICht
X3RlbXBEaXJlY3RvcnkpCisgICAgICAgICAgICBnX3JtZGlyKG1fdGVtcERpcmVjdG9yeS5nZXQo
KSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgd2ViVmlld1NhdmVkVG9TdHJlYW1DYWxsYmFj
ayhHT2JqZWN0KiBvYmplY3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBTYXZlV2ViVmlld1Rlc3Qq
IHRlc3QpCisgICAgeworICAgICAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgICAgIHRl
c3QtPm1faW5wdXRTdHJlYW0gPSBhZG9wdEdSZWYod2Via2l0X3dlYl92aWV3X3NhdmVfZmluaXNo
KHRlc3QtPm1fd2ViVmlldywgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpKTsKKyAgICAgICAgZ19h
c3NlcnQoR19JU19JTlBVVF9TVFJFQU0odGVzdC0+bV9pbnB1dFN0cmVhbS5nZXQoKSkpOworICAg
ICAgICBnX2Fzc2VydCghZXJyb3IpOworCisgICAgICAgIHRlc3QtPnF1aXRNYWluTG9vcCgpOwor
ICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHdlYlZpZXdTYXZlZFRvRmlsZUNhbGxiYWNrKEdPYmpl
Y3QqIG9iamVjdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIFNhdmVXZWJWaWV3VGVzdCogdGVzdCkK
KyAgICB7CisgICAgICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICAgICAgZ19hc3NlcnQo
d2Via2l0X3dlYl92aWV3X3NhdmVfdG9fZmlsZV9maW5pc2godGVzdC0+bV93ZWJWaWV3LCByZXN1
bHQsICZlcnJvci5vdXRQdHIoKSkpOworICAgICAgICBnX2Fzc2VydCghZXJyb3IpOworCisgICAg
ICAgIHRlc3QtPnF1aXRNYWluTG9vcCgpOworICAgIH0KKworICAgIHZvaWQgc2F2ZUFuZFdhaXRG
b3JTdHJlYW0oKQorICAgIHsKKyAgICAgICAgd2Via2l0X3dlYl92aWV3X3NhdmUobV93ZWJWaWV3
LCBXRUJLSVRfU0FWRV9NT0RFX01IVE1MLCAwLCByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5
Q2FsbGJhY2s+KHdlYlZpZXdTYXZlZFRvU3RyZWFtQ2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAg
Z19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIHZvaWQgc2F2ZUFuZFdh
aXRGb3JGaWxlKCkKKyAgICB7CisgICAgICAgIG1fc2F2ZURlc3RpbmF0aW9uRmlsZVBhdGguc2V0
KGdfYnVpbGRfZmlsZW5hbWUobV90ZW1wRGlyZWN0b3J5LmdldCgpLCAidGVzdFdlYlZpZXdTYXZl
UmVzdWx0Lm1odCIsIE5VTEwpKTsKKyAgICAgICAgbV9maWxlID0gYWRvcHRHUmVmKGdfZmlsZV9u
ZXdfZm9yX3BhdGgobV9zYXZlRGVzdGluYXRpb25GaWxlUGF0aC5nZXQoKSkpOworICAgICAgICB3
ZWJraXRfd2ViX3ZpZXdfc2F2ZV90b19maWxlKG1fd2ViVmlldywgbV9maWxlLmdldCgpLCBXRUJL
SVRfU0FWRV9NT0RFX01IVE1MLCAwLCByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJh
Y2s+KHdlYlZpZXdTYXZlZFRvRmlsZUNhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIGdfbWFpbl9s
b29wX3J1bihtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBHT3duUHRyPGNoYXI+IG1fdGVtcERp
cmVjdG9yeTsKKyAgICBHT3duUHRyPGNoYXI+IG1fc2F2ZURlc3RpbmF0aW9uRmlsZVBhdGg7Cisg
ICAgR1JlZlB0cjxHSW5wdXRTdHJlYW0+IG1faW5wdXRTdHJlYW07CisgICAgR1JlZlB0cjxHRmls
ZT4gbV9maWxlOworfTsKKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdTYXZlKFNhdmVXZWJWaWV3
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+
IgorICAgICAgICAgICAgICAgICAgICI8Ym9keT4iCisgICAgICAgICAgICAgICAgICAgIiAgPHA+
QSBwYXJhZ3JhcGggd2l0aCBwbGFpbiB0ZXh0PC9wPiIKKyAgICAgICAgICAgICAgICAgICAiICA8
cD4iCisgICAgICAgICAgICAgICAgICAgIiAgICBBIHJlZCBib3g6IDxpbWcgc3JjPSdkYXRhOmlt
YWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFJQUFBQUNDQUlBQUFEOTFK
cHpBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUIzUkpUVVVIM0FZV0RUTVZ3blNabndB
QUFCMXBWRmgwUTI5dGJXVnVkQUFBQUFBQVEzSmxZWFJsWkNCM2FYUm9JRWRKVFZCa0xtVUhBQUFB
RmtsRVFWUUkxMlA4ejhEQXdNREF4TURBd01EQUFBQU5IUUVESyttbXlBQUFBQUJKUlU1RXJrSmdn
Zz09Jz48L2JyPiIKKyAgICAgICAgICAgICAgICAgICAiICAgIEEgYmx1ZSBib3g6IDxpbWcgc3Jj
PSdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFJQUFBQUND
QUlBQUFEOTFKcHpBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUIzUkpUVVVIM0FZV0RU
TXZCSGhBTFFBQUFCMXBWRmgwUTI5dGJXVnVkQUFBQUFBQVEzSmxZWFJsWkNCM2FYUm9JRWRKVFZC
a0xtVUhBQUFBRmtsRVFWUUkxMk5rNFBuUHdNREF4TURBd01EQUFBQUxyd0VQUElzMXBnQUFBQUJK
UlU1RXJrSmdnZz09Jz4iCisgICAgICAgICAgICAgICAgICAgIiAgPC9wPiIKKyAgICAgICAgICAg
ICAgICAgICAiPC9ib2R5PiIKKyAgICAgICAgICAgICAgICAgICAiPC9odG1sPiIsIDApOworICAg
IHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgLy8gV3JpdGUgdG8gYSBmaWxl
IGFuZCB0byBhbiBpbnB1dCBzdHJlYW0uCisgICAgdGVzdC0+c2F2ZUFuZFdhaXRGb3JGaWxlKCk7
CisgICAgdGVzdC0+c2F2ZUFuZFdhaXRGb3JTdHJlYW0oKTsKKworICAgIC8vIFdlIHNob3VsZCBo
YXZlIGV4YWN0bHkgdGhlIHNhbWUgYW1vdW50IG9mIGJ5dGVzIGluIHRoZSBmaWxlCisgICAgLy8g
dGhhbiB0aG9zZSBjb21pbmcgZnJvbSB0aGUgR0lucHV0U3RyZWFtLiBXZSBkb24ndCBjb21wYXJl
IHRoZQorICAgIC8vIHN0cmluZ3MgcmVhZCBzaW5jZSB0aGUgJ0RhdGUnIGZpZWxkIGFuZCB0aGUg
Ym91bmRhcmllcyB3aWxsIGJlCisgICAgLy8gZGlmZmVyZW50IG9uIGVhY2ggY2FzZS4gTUhUTUwg
ZnVuY3Rpb25hbGl0eSB3aWxsIGJlIHRlc3RlZCBieQorICAgIC8vIExheW91dCB0ZXN0cywgc28g
Y2hlY2tpbmcgdGhlIGFtb3VudCBvZiBieXRlcyBpcyBlbm91Z2guCisgICAgR093blB0cjxHRXJy
b3I+IGVycm9yOworICAgIGdjaGFyIGJ1ZmZlcls1MTJdID0geyAwIH07CisgICAgZ3NzaXplIHJl
YWRCeXRlcyA9IDA7CisgICAgZ3NzaXplIHRvdGFsQnl0ZXNGcm9tU3RyZWFtID0gMDsKKyAgICB3
aGlsZSAocmVhZEJ5dGVzID0gZ19pbnB1dF9zdHJlYW1fcmVhZCh0ZXN0LT5tX2lucHV0U3RyZWFt
LmdldCgpLCAmYnVmZmVyLCA1MTIsIDAsICZlcnJvci5vdXRQdHIoKSkpIHsKKyAgICAgICAgZ19h
c3NlcnQoIWVycm9yKTsKKyAgICAgICAgdG90YWxCeXRlc0Zyb21TdHJlYW0gKz0gcmVhZEJ5dGVz
OworICAgIH0KKworICAgIC8vIENoZWNrIHRoYXQgdGhlIGZpbGUgZXhpc3RzIGFuZCB0aGF0IGl0
IGNvbnRhaW5zIHRoZSBzYW1lIGFtb3VudCBvZiBieXRlcy4KKyAgICBHUmVmUHRyPEdGaWxlSW5m
bz4gZmlsZUluZm8gPSBhZG9wdEdSZWYoZ19maWxlX3F1ZXJ5X2luZm8odGVzdC0+bV9maWxlLmdl
dCgpLCBHX0ZJTEVfQVRUUklCVVRFX1NUQU5EQVJEX1NJWkUsIHN0YXRpY19jYXN0PEdGaWxlUXVl
cnlJbmZvRmxhZ3M+KDApLCAwLCAwKSk7CisgICAgZ19hc3NlcnRfY21waW50KGdfZmlsZV9pbmZv
X2dldF9zaXplKGZpbGVJbmZvLmdldCgpKSwgPT0sIHRvdGFsQnl0ZXNGcm9tU3RyZWFtKTsKK30K
Kworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdNb2RlKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rw
b2ludGVyKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBpbmRleEhUTUwgPSAiPGh0bWw+PGJv
ZHk+PHA+VGVzdCBXZWIgVmlldyBNb2RlPC9wPjwvYm9keT48L2h0bWw+IjsKKworICAgIC8vIFdl
YiBtb2RlLgorICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X3dlYl92aWV3X2dldF92aWV3X21v
ZGUodGVzdC0+bV93ZWJWaWV3KSwgPT0sIFdFQktJVF9WSUVXX01PREVfV0VCKTsKKyAgICB0ZXN0
LT5sb2FkSHRtbChpbmRleEhUTUwsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hl
ZCgpOworICAgIFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0
LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoIndpbmRvdy5kb2N1bWVudC5ib2R5
LnRleHRDb250ZW50OyIsIDApOworICAgIEdPd25QdHI8Y2hhcj4gdmFsdWVTdHJpbmcoV2ViVmll
d1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0NTdHJpbmcoamF2YXNjcmlwdFJlc3VsdCkpOworICAg
IGdfYXNzZXJ0X2NtcHN0cih2YWx1ZVN0cmluZy5nZXQoKSwgPT0sICJUZXN0IFdlYiBWaWV3IE1v
ZGUiKTsKKworICAgIC8vIFNvdXJjZSBtb2RlLgorICAgIHdlYmtpdF93ZWJfdmlld19zZXRfdmll
d19tb2RlKHRlc3QtPm1fd2ViVmlldywgV0VCS0lUX1ZJRVdfTU9ERV9TT1VSQ0UpOworICAgIHRl
c3QtPmxvYWRIdG1sKGluZGV4SFRNTCwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlz
aGVkKCk7CisgICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0
VW50aWxGaW5pc2hlZCgid2luZG93LmRvY3VtZW50LmJvZHkudGV4dENvbnRlbnQ7IiwgMCk7Cisg
ICAgdmFsdWVTdHJpbmcuc2V0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5n
KGphdmFzY3JpcHRSZXN1bHQpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0
KCksID09LCBpbmRleEhUTUwpOworfQorCisvLyBUbyB0ZXN0IHBhZ2UgdmlzaWJpbGl0eSBBUEku
IEN1cnJlbnRseSBvbmx5ICd2aXNpYmxlJyBhbmQgJ2hpZGRlbicgc3RhdGVzIGFyZSBpbXBsZW1l
bnRlZCBmdWxseSBpbiBXZWJDb3JlLgorLy8gU2VlIGFsc28gaHR0cDovL3d3dy53My5vcmcvVFIv
MjAxMS9XRC1wYWdlLXZpc2liaWxpdHktMjAxMTA2MDIvIGFuZCBodHRwczovL2RldmVsb3BlcnMu
Z29vZ2xlLmNvbS9jaHJvbWUvd2hpdGVwYXBlcnMvcGFnZXZpc2liaWxpdHkKK3N0YXRpYyB2b2lk
IHRlc3RXZWJWaWV3UGFnZVZpc2liaWxpdHkoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjx0aXRsZT48L3RpdGxlPiIKKyAgICAg
ICAgIjxib2R5PjxwPlRlc3QgV2ViIFBhZ2UgVmlzaWJpbGl0eTwvcD4iCisgICAgICAgICI8c2Ny
aXB0PiIKKyAgICAgICAgImRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hh
bmdlXCIsIG9uVmlzaWJpbGl0eUNoYW5nZSwgZmFsc2UpOyIKKyAgICAgICAgImZ1bmN0aW9uIG9u
VmlzaWJpbGl0eUNoYW5nZSgpIHsiCisgICAgICAgICIgICAgZG9jdW1lbnQudGl0bGUgPSBkb2N1
bWVudC52aXNpYmlsaXR5U3RhdGU7IgorICAgICAgICAifSIKKyAgICAgICAgIjwvc2NyaXB0PiIK
KyAgICAgICAgIjwvYm9keT48L2h0bWw+IiwKKyAgICAgICAgMCk7CisKKyAgICAvLyBXYWl0IHVu
dGlsbCB0aGUgcGFnZSBpcyBsb2FkZWQuIEluaXRpYWwgdmlzaWJpbGl0eSBzaG91bGQgYmUgJ2hp
ZGRlbicuCisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBHT3duUHRy
PEdFcnJvcj4gZXJyb3I7CisgICAgV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCogamF2YXNjcmlwdFJl
c3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQu
dmlzaWJpbGl0eVN0YXRlOyIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQoamF2YXNj
cmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKyAgICBHT3duUHRyPGNo
YXI+IHZhbHVlU3RyaW5nKFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGph
dmFzY3JpcHRSZXN1bHQpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCks
ID09LCAiaGlkZGVuIik7CisKKyAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNj
cmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVudC5oaWRkZW47IiwgJmVycm9yLm91dFB0
cigpKTsKKyAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydCghZXJy
b3IuZ2V0KCkpOworICAgIGdfYXNzZXJ0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9C
b29sZWFuKGphdmFzY3JpcHRSZXN1bHQpKTsKKworICAgIC8vIFNob3cgdGhlIHBhZ2UuIFRoZSB2
aXNpYmlsaXR5IHNob3VsZCBiZSB1cGRhdGVkIHRvICd2aXNpYmxlJy4KKyAgICB0ZXN0LT5zaG93
SW5XaW5kb3coKTsKKyAgICB0ZXN0LT53YWl0VW50aWxUaXRsZUNoYW5nZWQoKTsKKworICAgIGph
dmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQo
ImRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZTsiLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGdfYXNz
ZXJ0KGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7CisgICAg
dmFsdWVTdHJpbmcuc2V0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGph
dmFzY3JpcHRSZXN1bHQpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCks
ID09LCAidmlzaWJsZSIpOworCisgICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFT
Y3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQuaGlkZGVuOyIsICZlcnJvci5vdXRQ
dHIoKSk7CisgICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVy
cm9yLmdldCgpKTsKKyAgICBnX2Fzc2VydCghV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRU
b0Jvb2xlYW4oamF2YXNjcmlwdFJlc3VsdCkpOworCisgICAgLy8gSGlkZSB0aGUgcGFnZS4gVGhl
IHZpc2liaWxpdHkgc2hvdWxkIGJlIHVwZGF0ZWQgdG8gJ2hpZGRlbicuCisgICAgZ3RrX3dpZGdl
dF9oaWRlKEdUS19XSURHRVQodGVzdC0+bV93ZWJWaWV3KSk7CisgICAgdGVzdC0+d2FpdFVudGls
VGl0bGVDaGFuZ2VkKCk7CisKKyAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNj
cmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU7IiwgJmVy
cm9yLm91dFB0cigpKTsKKyAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fz
c2VydCghZXJyb3IuZ2V0KCkpOworICAgIHZhbHVlU3RyaW5nLnNldChXZWJWaWV3VGVzdDo6amF2
YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7CisgICAgZ19hc3NlcnRf
Y21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgImhpZGRlbiIpOworCisgICAgamF2YXNjcmlw
dFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1l
bnQuaGlkZGVuOyIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQoamF2YXNjcmlwdFJl
c3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKyAgICBnX2Fzc2VydChXZWJWaWV3
VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQm9vbGVhbihqYXZhc2NyaXB0UmVzdWx0KSk7Cit9CisK
K2NsYXNzIFNuYXBzaG90V2ViVmlld1Rlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7CitwdWJsaWM6
CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShTbmFwc2hvdFdlYlZpZXdUZXN0KTsKKworICAg
IHN0YXRpYyB2b2lkIG9uU25hcHNob3RDYW5jZWxsZWRSZWFkeShXZWJLaXRXZWJWaWV3KiB3ZWJf
dmlldywgR0FzeW5jUmVzdWx0KiByZXMsIFNuYXBzaG90V2ViVmlld1Rlc3QqIHRlc3QpCisgICAg
eworICAgICAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgICAgIHRlc3QtPm1fc3VyZmFj
ZSA9IHdlYmtpdF93ZWJfdmlld19nZXRfc25hcHNob3RfZmluaXNoKHdlYl92aWV3LCByZXMsICZl
cnJvci5vdXRQdHIoKSk7CisgICAgICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX3N1cmZhY2UpOworICAg
ICAgICBnX2Fzc2VydF9lcnJvcihlcnJvci5nZXQoKSwgR19JT19FUlJPUiwgR19JT19FUlJPUl9D
QU5DRUxMRUQpOworICAgICAgICB0ZXN0LT5xdWl0TWFpbkxvb3AoKTsKKyAgICB9CisKKyAgICBn
Ym9vbGVhbiBnZXRTbmFwc2hvdEFuZENhbmNlbCgpCisgICAgeworICAgICAgICBpZiAobV9zdXJm
YWNlKQorICAgICAgICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KG1fc3VyZmFjZSk7CisgICAg
ICAgIG1fc3VyZmFjZSA9IDA7CisgICAgICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBjYW5jZWxs
YWJsZSA9IGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKTsKKyAgICAgICAgd2Via2l0X3dl
Yl92aWV3X2dldF9zbmFwc2hvdChtX3dlYlZpZXcsIFdFQktJVF9TTkFQU0hPVF9SRUdJT05fVklT
SUJMRSwgV0VCS0lUX1NOQVBTSE9UX09QVElPTlNfTk9ORSwgY2FuY2VsbGFibGUuZ2V0KCksIHJl
aW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4ob25TbmFwc2hvdENhbmNlbGxlZFJl
YWR5KSwgdGhpcyk7CisgICAgICAgIGdfY2FuY2VsbGFibGVfY2FuY2VsKGNhbmNlbGxhYmxlLmdl
dCgpKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworCisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworfTsKKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdTbmFwc2hv
dChTbmFwc2hvdFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3Qt
PmxvYWRIdG1sKCI8aHRtbD48Ym9keT48cD5XaGF0ZXZlcjwvcD48L2JvZHk+PC9odG1sPiIsIDAp
OworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgLy8gV2ViVmlldyBu
b3QgdmlzaWJsZS4KKyAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UxID0gdGVzdC0+Z2V0U25h
cHNob3RBbmRXYWl0VW50aWxSZWFkeShXRUJLSVRfU05BUFNIT1RfUkVHSU9OX1ZJU0lCTEUsIFdF
QktJVF9TTkFQU0hPVF9PUFRJT05TX05PTkUpOworICAgIGdfYXNzZXJ0KCFzdXJmYWNlMSk7CisK
KyAgICAvLyBTaG93IHN1cmZhY2UsIHJlc2l6ZSB0byA1MHg1MCwgdHJ5IGFnYWluLgorICAgIHRl
c3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOworICAgIHRlc3QtPnJlc2l6ZVZp
ZXcoNTAsIDUwKTsKKyAgICBzdXJmYWNlMSA9IHRlc3QtPmdldFNuYXBzaG90QW5kV2FpdFVudGls
UmVhZHkoV0VCS0lUX1NOQVBTSE9UX1JFR0lPTl9WSVNJQkxFLCBXRUJLSVRfU05BUFNIT1RfT1BU
SU9OU19OT05FKTsKKyAgICBnX2Fzc2VydChzdXJmYWNlMSk7CisKKyAgICAvLyBvYnRhaW5lZCBz
dXJmYWNlIHNob3VsZCBiZSBhdCB0aGUgbW9zdCA1MHg1MC4gU3RvcmUgdGhlIHNpemUKKyAgICAv
LyBmb3IgY29tcGFyaXNvbiBsYXRlci4KKyAgICBpbnQgd2lkdGggPSBjYWlyb19pbWFnZV9zdXJm
YWNlX2dldF93aWR0aChzdXJmYWNlMSk7CisgICAgaW50IGhlaWdodCA9IGNhaXJvX2ltYWdlX3N1
cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNlMSk7CisgICAgZ19hc3NlcnRfY21waW50KHdpZHRoLCA8
PSwgNTApOworICAgIGdfYXNzZXJ0X2NtcGludChoZWlnaHQsIDw9LCA1MCk7CisKKyAgICAvLyBT
ZWxlY3QgYWxsIHRleHQgaW4gdGhlIFdlYlZpZXcsIHJlcXVlc3QgYSBzbmFwc2hvdCBpZ25vcmlu
ZyBzZWxlY3Rpb24uCisgICAgdGVzdC0+c2VsZWN0QWxsKCk7CisgICAgc3VyZmFjZTEgPSBjYWly
b19zdXJmYWNlX3JlZmVyZW5jZSh0ZXN0LT5nZXRTbmFwc2hvdEFuZFdhaXRVbnRpbFJlYWR5KFdF
QktJVF9TTkFQU0hPVF9SRUdJT05fVklTSUJMRSwgV0VCS0lUX1NOQVBTSE9UX09QVElPTlNfTk9O
RSkpOworICAgIGdfYXNzZXJ0KHN1cmZhY2UxKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZTEpLCA9PSwgd2lkdGgpOworICAgIGdfYXNz
ZXJ0X2NtcGludChjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZTEpLCA9PSwg
aGVpZ2h0KTsKKworICAgIC8vIENyZWF0ZSBpZGVudGljYWwgc3VyZmFjZS4KKyAgICBjYWlyb19z
dXJmYWNlX3QqIHN1cmZhY2UyID0gdGVzdC0+Z2V0U25hcHNob3RBbmRXYWl0VW50aWxSZWFkeShX
RUJLSVRfU05BUFNIT1RfUkVHSU9OX1ZJU0lCTEUsIFdFQktJVF9TTkFQU0hPVF9PUFRJT05TX05P
TkUpOworICAgIGdfYXNzZXJ0KHN1cmZhY2UyKTsKKworICAgIC8vIENvbXBhcmUgdGhlc2UgdHdv
LCB0aGV5IHNob3VsZCBiZSBpZGVudGljYWwuCisgICAgZ19hc3NlcnQoVGVzdDo6Y2Fpcm9TdXJm
YWNlc0VxdWFsKHN1cmZhY2UxLCBzdXJmYWNlMikpOworCisgICAgLy8gUmVxdWVzdCBhIG5ldyBz
bmFwc2hvdCwgaW5jbHVkaW5nIHRoZSBzZWxlY3Rpb24gdGhpcyB0aW1lLiBUaGUKKyAgICAvLyBz
aXplIHNob3VsZCBiZSB0aGUgc2FtZSBidXQgdGhlIHJlc3VsdCBtdXN0IGJlIGRpZmZlcmVudCB0
byB0aGUKKyAgICAvLyBvbmUgcHJldmlvdXNseSBvYnRhaW5lZC4KKyAgICBzdXJmYWNlMiA9IHRl
c3QtPmdldFNuYXBzaG90QW5kV2FpdFVudGlsUmVhZHkoV0VCS0lUX1NOQVBTSE9UX1JFR0lPTl9W
SVNJQkxFLCBXRUJLSVRfU05BUFNIT1RfT1BUSU9OU19JTkNMVURFX1NFTEVDVElPTl9ISUdITElH
SFRJTkcpOworICAgIGdfYXNzZXJ0KHN1cmZhY2UyKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZTIpLCA9PSwgd2lkdGgpOworICAgIGdf
YXNzZXJ0X2NtcGludChjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZTIpLCA9
PSwgaGVpZ2h0KTsKKyAgICBnX2Fzc2VydCghVGVzdDo6Y2Fpcm9TdXJmYWNlc0VxdWFsKHN1cmZh
Y2UxLCBzdXJmYWNlMikpOworCisgICAgLy8gUmVxdWVzdCBhIHNuYXBzaG90IG9mIHRoZSB3aG9s
ZSBkb2N1bWVudCBpbiB0aGUgV2ViVmlldy4gVGhlCisgICAgLy8gcmVzdWx0IHNob3VsZCBiZSBk
aWZmZXJlbnQgZnJvbSB0aGUgc2l6ZSBvYnRhaW5lZCBwcmV2aW91c2x5LgorICAgIHN1cmZhY2Uy
ID0gdGVzdC0+Z2V0U25hcHNob3RBbmRXYWl0VW50aWxSZWFkeShXRUJLSVRfU05BUFNIT1RfUkVH
SU9OX0ZVTExfRE9DVU1FTlQsIFdFQktJVF9TTkFQU0hPVF9PUFRJT05TX05PTkUpOworICAgIGdf
YXNzZXJ0KHN1cmZhY2UyKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9nZXRfd2lkdGgoc3VyZmFjZTIpLCAgPiwgd2lkdGgpOworICAgIGdfYXNzZXJ0X2NtcGludChj
YWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZTIpLCA+LCBoZWlnaHQpOworICAg
IGdfYXNzZXJ0KCFUZXN0OjpjYWlyb1N1cmZhY2VzRXF1YWwoc3VyZmFjZTEsIHN1cmZhY2UyKSk7
CisKKyAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koc3VyZmFjZTEpOworCisgICAgZ19hc3NlcnQo
dGVzdC0+Z2V0U25hcHNob3RBbmRDYW5jZWwoKSk7Cit9CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sK
KyAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImRlZmF1bHQtY29udGV4dCIs
IHRlc3RXZWJWaWV3RGVmYXVsdENvbnRleHQpOworICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktp
dFdlYlZpZXciLCAiY3VzdG9tLWNoYXJzZXQiLCB0ZXN0V2ViVmlld0N1c3RvbUNoYXJzZXQpOwor
ICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAic2V0dGluZ3MiLCB0ZXN0V2Vi
Vmlld1NldHRpbmdzKTsKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInpv
b20tbGV2ZWwiLCB0ZXN0V2ViVmlld1pvb21MZXZlbCk7CisgICAgV2ViVmlld1Rlc3Q6OmFkZCgi
V2ViS2l0V2ViVmlldyIsICJydW4tamF2YXNjcmlwdCIsIHRlc3RXZWJWaWV3UnVuSmF2YVNjcmlw
dCk7CisgICAgRnVsbFNjcmVlbkNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJmdWxs
c2NyZWVuIiwgdGVzdFdlYlZpZXdGdWxsU2NyZWVuKTsKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJX
ZWJLaXRXZWJWaWV3IiwgImNhbi1zaG93LW1pbWUtdHlwZSIsIHRlc3RXZWJWaWV3Q2FuU2hvd01J
TUVUeXBlKTsKKyAgICBGb3JtQ2xpZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInN1Ym1p
dC1mb3JtIiwgdGVzdFdlYlZpZXdTdWJtaXRGb3JtKTsKKyAgICBTYXZlV2ViVmlld1Rlc3Q6OmFk
ZCgiV2ViS2l0V2ViVmlldyIsICJzYXZlIiwgdGVzdFdlYlZpZXdTYXZlKTsKKyAgICBXZWJWaWV3
VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInZpZXctbW9kZSIsIHRlc3RXZWJWaWV3TW9kZSk7
CisgICAgU25hcHNob3RXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInNuYXBzaG90
IiwgdGVzdFdlYlZpZXdTbmFwc2hvdCk7CisgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2Vi
VmlldyIsICJwYWdlLXZpc2liaWxpdHkiLCB0ZXN0V2ViVmlld1BhZ2VWaXNpYmlsaXR5KTsKK30K
Kwordm9pZCBhZnRlckFsbCgpCit7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFdlYlZpZXdHcm91cC5jcHAgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFdlYlZpZXdHcm91cC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI2YzVjNQotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0V2ViVmll
d0dyb3VwLmNwcApAQCAtMCwwICsxLDIwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJ
Z2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiV2ViS2l0VGVzdFNl
cnZlci5oIgorI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCisjaW5jbHVkZSA8Y3N0ZGFyZz4KKyNp
bmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+CisjaW5jbHVk
ZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCitzdGF0aWMgV2ViS2l0VGVzdFNlcnZlcioga1Nl
cnZlcjsKKworLy8gVGhlc2UgYXJlIGFsbCBoZXJlIHNvIHRoYXQgdGhleSBjYW4gYmUgY2hhbmdl
ZCBlYXNpbHksIGlmIG5lY2Vzc2FyeS4KK3N0YXRpYyBjb25zdCBjaGFyKiBrU3R5bGVTaGVldEhU
TUwgPSAiPGh0bWw+PGRpdiBpZD1cInN0eWxlZEVsZW1lbnRcIj5Td2VldCBzdHlsZXohPC9kaXY+
PC9odG1sPiI7CitzdGF0aWMgY29uc3QgY2hhcioga0luamVjdGVkU3R5bGVTaGVldCA9ICIjc3R5
bGVkRWxlbWVudCB7IGZvbnQtd2VpZ2h0OiBib2xkOyB9IjsKK3N0YXRpYyBjb25zdCBjaGFyKiBr
U3R5bGVTaGVldFRlc3RTY3JpcHQgPSAiZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnc3R5bGVkRWxlbWVudCcpKVsnZm9udC13ZWlnaHQnXSI7CitzdGF0aWMgY29uc3Qg
Y2hhcioga1N0eWxlU2hlZXRUZXN0U2NyaXB0UmVzdWx0ID0gImJvbGQiOworCitzdGF0aWMgdm9p
ZCB0ZXN0V2ViVmlld0dyb3VwRGVmYXVsdChUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQorewor
ICAgIC8vIERlZmF1bHQgZ3JvdXAgaXMgc2hhcmVkIGJ5IGFsbCBXZWJWaWV3cyBieSBkZWZhdWx0
LgorICAgIEdSZWZQdHI8V2ViS2l0V2ViVmlldz4gd2ViVmlldzEgPSBXRUJLSVRfV0VCX1ZJRVco
d2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBHUmVmUHRyPFdlYktpdFdlYlZpZXc+IHdlYlZp
ZXcyID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19hc3Nl
cnQod2Via2l0X3dlYl92aWV3X2dldF9ncm91cCh3ZWJWaWV3MS5nZXQoKSkgPT0gd2Via2l0X3dl
Yl92aWV3X2dldF9ncm91cCh3ZWJWaWV3Mi5nZXQoKSkpOworCisgICAgLy8gU2V0dGluZ3MgYXJl
IHNoYXJlZCBieSBhbGwgd2ViIHZpZXcgaW4gdGhlIHNhbWUgZ3JvdXAuCisgICAgZ19hc3NlcnQo
d2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3MS5nZXQoKSkgPT0gd2Via2l0X3dl
Yl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3Mi5nZXQoKSkpOworICAgIGdfYXNzZXJ0KHdlYmtp
dF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmlldzEuZ2V0KCkpID09IHdlYmtpdF93ZWJfdmll
d19ncm91cF9nZXRfc2V0dGluZ3Mod2Via2l0X3dlYl92aWV3X2dldF9ncm91cCh3ZWJWaWV3Mi5n
ZXQoKSkpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdHcm91cE5ld0dyb3VwKFRlc3Qq
IHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8gUGFzc2luZyAwIGFzIGdyb3VwIG5hbWUg
Z2VuZXJhdGVzIHRoZSBuYW1lIGF1dG9tYXRpY2FsbHkuCisgICAgR1JlZlB0cjxXZWJLaXRXZWJW
aWV3R3JvdXA+IHZpZXdHcm91cDEgPSBhZG9wdEdSZWYod2Via2l0X3dlYl92aWV3X2dyb3VwX25l
dygwKSk7CisgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhH
X09CSkVDVCh2aWV3R3JvdXAxLmdldCgpKSk7CisgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3
X2dyb3VwX2dldF9uYW1lKHZpZXdHcm91cDEuZ2V0KCkpKTsKKworICAgIC8vIE5ldyBncm91cCB3
aXRoIGEgZ2l2ZW4gbmFtZS4KKyAgICBHUmVmUHRyPFdlYktpdFdlYlZpZXdHcm91cD4gdmlld0dy
b3VwMiA9IGFkb3B0R1JlZih3ZWJraXRfd2ViX3ZpZXdfZ3JvdXBfbmV3KCJUZXN0R3JvdXAyIikp
OworICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpF
Q1Qodmlld0dyb3VwMi5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3Zp
ZXdfZ3JvdXBfZ2V0X25hbWUodmlld0dyb3VwMi5nZXQoKSksID09LCAiVGVzdEdyb3VwMiIpOwor
ICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ3JvdXBfZ2V0X25hbWUodmlld0dy
b3VwMi5nZXQoKSksICE9LCB3ZWJraXRfd2ViX3ZpZXdfZ3JvdXBfZ2V0X25hbWUodmlld0dyb3Vw
MS5nZXQoKSkpOworCisgICAgLy8gRXZlcnkgZ3JvdXAgaGFzIGl0cyBvd24gc2V0dGluZ3MuCisg
ICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dyb3VwX2dldF9zZXR0aW5ncyh2aWV3R3JvdXAx
LmdldCgpKSAhPSB3ZWJraXRfd2ViX3ZpZXdfZ3JvdXBfZ2V0X3NldHRpbmdzKHZpZXdHcm91cDIu
Z2V0KCkpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdOZXdXaXRoR3JvdXAoVGVzdCog
dGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBHUmVmUHRyPFdlYktpdFdlYlZpZXdHcm91cD4g
dmlld0dyb3VwMSA9IGFkb3B0R1JlZih3ZWJraXRfd2ViX3ZpZXdfZ3JvdXBfbmV3KCJUZXN0R3Jv
dXAxIikpOworICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMo
R19PQkpFQ1Qodmlld0dyb3VwMS5nZXQoKSkpOworICAgIEdSZWZQdHI8V2ViS2l0V2ViVmlldz4g
d2ViVmlldzEgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ld193aXRoX2dyb3Vw
KHZpZXdHcm91cDEuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2dy
b3VwKHdlYlZpZXcxLmdldCgpKSA9PSB2aWV3R3JvdXAxLmdldCgpKTsKKworICAgIEdSZWZQdHI8
V2ViS2l0V2ViVmlldz4gd2ViVmlldzIgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3
X25ldygpKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2dyb3VwKHdlYlZpZXcy
LmdldCgpKSAhPSB2aWV3R3JvdXAxLmdldCgpKTsKKworICAgIC8vIFNldHRpbmdzIHNob3VsZCBi
ZSBkaWZmZXJlbnQgZm9yIHZpZXdzIGluIGRpZmZlcmVudCBncm91cHMuCisgICAgZ19hc3NlcnQo
d2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3MS5nZXQoKSkgIT0gd2Via2l0X3dl
Yl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3Mi5nZXQoKSkpOworfQorCitzdGF0aWMgdm9pZCB0
ZXN0V2ViVmlld0dyb3VwU2V0dGluZ3MoVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAg
ICBHUmVmUHRyPFdlYktpdFdlYlZpZXdHcm91cD4gdmlld0dyb3VwMSA9IGFkb3B0R1JlZih3ZWJr
aXRfd2ViX3ZpZXdfZ3JvdXBfbmV3KCJUZXN0R3JvdXAxIikpOworICAgIHRlc3QtPmFzc2VydE9i
amVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1Qodmlld0dyb3VwMS5nZXQoKSkp
OworICAgIEdSZWZQdHI8V2ViS2l0U2V0dGluZ3M+IG5ld1NldHRpbmdzID0gYWRvcHRHUmVmKHdl
YmtpdF9zZXR0aW5nc19uZXdfd2l0aF9zZXR0aW5ncygiZW5hYmxlLWphdmFzY3JpcHQiLCBGQUxT
RSwgTlVMTCkpOworICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNo
ZXMoR19PQkpFQ1QobmV3U2V0dGluZ3MuZ2V0KCkpKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfZ3Jv
dXBfc2V0X3NldHRpbmdzKHZpZXdHcm91cDEuZ2V0KCksIG5ld1NldHRpbmdzLmdldCgpKTsKKyAg
ICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ3JvdXBfZ2V0X3NldHRpbmdzKHZpZXdHcm91cDEu
Z2V0KCkpID09IG5ld1NldHRpbmdzLmdldCgpKTsKKworICAgIEdSZWZQdHI8V2ViS2l0V2ViVmll
dz4gd2ViVmlldzEgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ld193aXRoX2dy
b3VwKHZpZXdHcm91cDEuZ2V0KCkpKTsKKyAgICBHUmVmUHRyPFdlYktpdFdlYlZpZXc+IHdlYlZp
ZXcyID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgV2ViS2l0
U2V0dGluZ3MqIHdlYlZpZXcxU2V0dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdz
KHdlYlZpZXcxLmdldCgpKTsKKyAgICBXZWJLaXRTZXR0aW5ncyogd2ViVmlldzJTZXR0aW5ncyA9
IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmlldzIuZ2V0KCkpOworICAgIGdfYXNz
ZXJ0KHdlYlZpZXcxU2V0dGluZ3MgIT0gd2ViVmlldzJTZXR0aW5ncyk7CisgICAgZ19hc3NlcnQo
d2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfamF2YXNjcmlwdCh3ZWJWaWV3MVNldHRpbmdzKSAh
PSB3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9qYXZhc2NyaXB0KHdlYlZpZXcyU2V0dGluZ3Mp
KTsKKworICAgIHdlYmtpdF93ZWJfdmlld19zZXRfc2V0dGluZ3Mod2ViVmlldzEuZ2V0KCksIHdl
YlZpZXcyU2V0dGluZ3MpOworICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGlu
Z3Mod2ViVmlldzEuZ2V0KCkpID09IHdlYlZpZXcyU2V0dGluZ3MpOworICAgIGdfYXNzZXJ0KHdl
YmtpdF93ZWJfdmlld19ncm91cF9nZXRfc2V0dGluZ3Mod2Via2l0X3dlYl92aWV3X2dldF9ncm91
cCh3ZWJWaWV3MS5nZXQoKSkpID09IHdlYlZpZXcyU2V0dGluZ3MpOworfQorCitzdGF0aWMgYm9v
bCBpc1N0eWxlU2hlZXRJbmplY3RlZEZvclVSTEF0UGF0aChXZWJWaWV3VGVzdCogdGVzdCwgY29u
c3QgY2hhciogcGF0aCkKK3sKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBh
dGgocGF0aCkuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKwor
ICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBXZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBq
YXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVk
KGtTdHlsZVNoZWV0VGVzdFNjcmlwdCwgJmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fzc2VydChq
YXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOworCisgICAgR093
blB0cjxjaGFyPiByZXN1bHRTdHJpbmcoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0NT
dHJpbmcoamF2YXNjcmlwdFJlc3VsdCkpOworICAgIHJldHVybiAhZ19zdHJjbXAwKHJlc3VsdFN0
cmluZy5nZXQoKSwga1N0eWxlU2hlZXRUZXN0U2NyaXB0UmVzdWx0KTsKK30KKworc3RhdGljIHZv
aWQgZmlsbFVSTExpc3RGcm9tUGF0aHMoY2hhcioqIGxpc3QsIGNvbnN0IGNoYXIqIHBhdGgsIC4u
LikKK3sKKyAgICB2YV9saXN0IGFyZ3VtZW50TGlzdDsKKyAgICB2YV9zdGFydChhcmd1bWVudExp
c3QsIHBhdGgpOworCisgICAgaW50IGkgPSAwOworICAgIHdoaWxlIChwYXRoKSB7CisgICAgICAg
IC8vIEZJWE1FOiBXZSBtdXN0IHVzZSBhIHdpbGRjYXJkIGZvciB0aGUgaG9zdCBoZXJlIHVudGls
IGh0dHA6Ly93a2J1Zy5jb20vMTEyNDc2IGlzIGZpeGVkLgorICAgICAgICAvLyBVbnRpbCB0aGF0
IHRpbWUgcGF0dGVybnMgd2l0aCBwb3J0IG51bWJlcnMgaW4gdGhlbSB3aWxsIG5vdCBwcm9wZXJs
eSBtYXRjaCBVUkxzIHdpdGggcG9ydCBudW1iZXJzLgorICAgICAgICBsaXN0W2krK10gPSBnX3N0
cmR1cF9wcmludGYoImh0dHA6Ly8qLyVzKiIsIHBhdGgpOworICAgICAgICBwYXRoID0gdmFfYXJn
KGFyZ3VtZW50TGlzdCwgY29uc3QgY2hhciopOworICAgIH0KK30KKworc3RhdGljIHZvaWQgcmVt
b3ZlT2xkSW5qZWN0ZWRTdHlsZVNoZWV0c0FuZFJlc2V0TGlzdHMoV2ViS2l0V2ViVmlld0dyb3Vw
KiBncm91cCwgY2hhcioqIHdoaXRlbGlzdCwgY2hhcioqIGJsYWNrbGlzdCkKK3sKKyAgICB3ZWJr
aXRfd2ViX3ZpZXdfZ3JvdXBfcmVtb3ZlX2FsbF91c2VyX3N0eWxlX3NoZWV0cyhncm91cCk7CisK
KyAgICB3aGlsZSAoKndoaXRlbGlzdCkgeworICAgICAgICBnX2ZyZWUoKndoaXRlbGlzdCk7Cisg
ICAgICAgICp3aGl0ZWxpc3QgPSAwOworICAgICAgICB3aGl0ZWxpc3QrKzsKKyAgICB9CisKKyAg
ICB3aGlsZSAoKmJsYWNrbGlzdCkgeworICAgICAgICBnX2ZyZWUoKmJsYWNrbGlzdCk7CisgICAg
ICAgICpibGFja2xpc3QgPSAwOworICAgICAgICBibGFja2xpc3QrKzsKKyAgICB9Cit9CisKK3N0
YXRpYyB2b2lkIHRlc3RXZWJWaWV3R3JvdXBJbmplY3RlZFN0eWxlU2hlZXQoV2ViVmlld1Rlc3Qq
IHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgV2ViS2l0V2ViVmlld0dyb3VwKiBncm91cCA9
IHdlYmtpdF93ZWJfdmlld19nZXRfZ3JvdXAodGVzdC0+bV93ZWJWaWV3KTsKKyAgICBjaGFyKiB3
aGl0ZWxpc3RbM10gPSB7IDAsIDAsIDAgfTsKKyAgICBjaGFyKiBibGFja2xpc3RbM10gPSB7IDAs
IDAsIDAgfTsKKworICAgIHJlbW92ZU9sZEluamVjdGVkU3R5bGVTaGVldHNBbmRSZXNldExpc3Rz
KGdyb3VwLCB3aGl0ZWxpc3QsIGJsYWNrbGlzdCk7CisKKyAgICAvLyBXaXRob3V0IGEgd2hpdGVs
aXN0IG9yIGEgYmxhY2tsaXN0IGFsbCBVUkxzIHNob3VsZCBoYXZlIHRoZSBpbmplY3RlZCBzdHls
ZSBzaGVldC4KKyAgICBzdGF0aWMgY29uc3QgY2hhciogcmFuZG9tUGF0aCA9ICJzb21lcmFuZG9t
cGF0aCI7CisgICAgZ19hc3NlcnQoIWlzU3R5bGVTaGVldEluamVjdGVkRm9yVVJMQXRQYXRoKHRl
c3QsIHJhbmRvbVBhdGgpKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfZ3JvdXBfYWRkX3VzZXJfc3R5
bGVfc2hlZXQoZ3JvdXAsIGtJbmplY3RlZFN0eWxlU2hlZXQsIDAsIDAsIDAsIFdFQktJVF9JTkpF
Q1RFRF9DT05URU5UX0ZSQU1FU19BTEwpOworICAgIGdfYXNzZXJ0KGlzU3R5bGVTaGVldEluamVj
dGVkRm9yVVJMQXRQYXRoKHRlc3QsIHJhbmRvbVBhdGgpKTsKKworICAgIHJlbW92ZU9sZEluamVj
dGVkU3R5bGVTaGVldHNBbmRSZXNldExpc3RzKGdyb3VwLCB3aGl0ZWxpc3QsIGJsYWNrbGlzdCk7
CisKKyAgICBmaWxsVVJMTGlzdEZyb21QYXRocyhibGFja2xpc3QsIHJhbmRvbVBhdGgsIDApOwor
ICAgIHdlYmtpdF93ZWJfdmlld19ncm91cF9hZGRfdXNlcl9zdHlsZV9zaGVldChncm91cCwga0lu
amVjdGVkU3R5bGVTaGVldCwgMCwgMCwgYmxhY2tsaXN0LCBXRUJLSVRfSU5KRUNURURfQ09OVEVO
VF9GUkFNRVNfQUxMKTsKKyAgICBnX2Fzc2VydCghaXNTdHlsZVNoZWV0SW5qZWN0ZWRGb3JVUkxB
dFBhdGgodGVzdCwgcmFuZG9tUGF0aCkpOworICAgIGdfYXNzZXJ0KGlzU3R5bGVTaGVldEluamVj
dGVkRm9yVVJMQXRQYXRoKHRlc3QsICJzb21lb3RoZXJyYW5kb21wYXRoIikpOworCisgICAgcmVt
b3ZlT2xkSW5qZWN0ZWRTdHlsZVNoZWV0c0FuZFJlc2V0TGlzdHMoZ3JvdXAsIHdoaXRlbGlzdCwg
YmxhY2tsaXN0KTsKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBpblRoZVdoaXRlTGlzdCA9ICJp
bnRoZXdoaXRlbGlzdCI7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIG5vdEluV2hpdGVsaXN0ID0g
Im5vdGludGhld2hpdGVsaXN0IjsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogaW5UaGVXaGl0ZUxp
c3RBbmRCbGFja0xpc3QgPSAiaW50aGV3aGl0ZWxpc3RhbmRibGFja2xpc3QiOworCisgICAgZmls
bFVSTExpc3RGcm9tUGF0aHMod2hpdGVsaXN0LCBpblRoZVdoaXRlTGlzdCwgaW5UaGVXaGl0ZUxp
c3RBbmRCbGFja0xpc3QsIDApOworICAgIGZpbGxVUkxMaXN0RnJvbVBhdGhzKGJsYWNrbGlzdCwg
aW5UaGVXaGl0ZUxpc3RBbmRCbGFja0xpc3QsIDApOworICAgIHdlYmtpdF93ZWJfdmlld19ncm91
cF9hZGRfdXNlcl9zdHlsZV9zaGVldChncm91cCwga0luamVjdGVkU3R5bGVTaGVldCwgMCwgd2hp
dGVsaXN0LCBibGFja2xpc3QsIFdFQktJVF9JTkpFQ1RFRF9DT05URU5UX0ZSQU1FU19BTEwpOwor
ICAgIGdfYXNzZXJ0KGlzU3R5bGVTaGVldEluamVjdGVkRm9yVVJMQXRQYXRoKHRlc3QsIGluVGhl
V2hpdGVMaXN0KSk7CisgICAgZ19hc3NlcnQoIWlzU3R5bGVTaGVldEluamVjdGVkRm9yVVJMQXRQ
YXRoKHRlc3QsIGluVGhlV2hpdGVMaXN0QW5kQmxhY2tMaXN0KSk7CisgICAgZ19hc3NlcnQoIWlz
U3R5bGVTaGVldEluamVjdGVkRm9yVVJMQXRQYXRoKHRlc3QsIG5vdEluV2hpdGVsaXN0KSk7CisK
KyAgICAvLyBJdCdzIGltcG9ydGFudCB0byBjbGVhbiB1cCB0aGUgZW52aXJvbm1lbnQgYmVmb3Jl
IG90aGVyIHRlc3RzLgorICAgIHJlbW92ZU9sZEluamVjdGVkU3R5bGVTaGVldHNBbmRSZXNldExp
c3RzKGdyb3VwLCB3aGl0ZWxpc3QsIGJsYWNrbGlzdCk7Cit9CisKK3N0YXRpYyB2b2lkIHNlcnZl
ckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1lc3NhZ2UsIGNvbnN0
IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqLCBTb3VwQ2xpZW50Q29udGV4dCosIGdwb2ludGVyKQor
eworICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsK
KyAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09V
UF9NRU1PUllfU1RBVElDLCBrU3R5bGVTaGVldEhUTUwsIHN0cmxlbihrU3R5bGVTaGVldEhUTUwp
KTsKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5
KTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQoreworICAgIGtTZXJ2ZXIgPSBuZXcgV2ViS2l0VGVz
dFNlcnZlcigpOworICAgIGtTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFjayk7CisKKyAgICBUZXN0
OjphZGQoIldlYktpdFdlYlZpZXdHcm91cCIsICJkZWZhdWx0LWdyb3VwIiwgdGVzdFdlYlZpZXdH
cm91cERlZmF1bHQpOworICAgIFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlld0dyb3VwIiwgIm5ldy1n
cm91cCIsIHRlc3RXZWJWaWV3R3JvdXBOZXdHcm91cCk7CisgICAgVGVzdDo6YWRkKCJXZWJLaXRX
ZWJWaWV3IiwgIm5ldy13aXRoLWdyb3VwIiwgdGVzdFdlYlZpZXdOZXdXaXRoR3JvdXApOworICAg
IFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlld0dyb3VwIiwgInNldHRpbmdzIiwgdGVzdFdlYlZpZXdH
cm91cFNldHRpbmdzKTsKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3R3JvdXAi
LCAiaW5qZWN0ZWQtc3R5bGUtc2hlZXQiLCB0ZXN0V2ViVmlld0dyb3VwSW5qZWN0ZWRTdHlsZVNo
ZWV0KTsKK30KKwordm9pZCBhZnRlckFsbCgpCit7CisgICAgZGVsZXRlIGtTZXJ2ZXI7Cit9CmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYlZp
ZXdFZGl0b3IuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RX
ZWJWaWV3RWRpdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzMx
NWRiCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQy
R3RrL1Rlc3RXZWJWaWV3RWRpdG9yLmNwcApAQCAtMCwwICsxLDIwMiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYlZpZXdUZXN0LmgiCisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCitjbGFz
cyBFZGl0b3JUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJ
Ql9URVNUX0ZJWFRVUkUoRWRpdG9yVGVzdCk7CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
aW50IGtDbGlwYm9hcmRXYWl0VGltZW91dCA9IDUwOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBpbnQga0NsaXBib2FyZFdhaXRNYXhUcmllcyA9IDI7CisKKyAgICBFZGl0b3JUZXN0KCkKKyAg
ICAgICAgOiBtX2NsaXBib2FyZChndGtfY2xpcGJvYXJkX2dldChHREtfU0VMRUNUSU9OX0NMSVBC
T0FSRCkpCisgICAgICAgICwgbV9jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQoZmFsc2UpCisgICAg
ICAgICwgbV90cmllc0NvdW50KDApCisgICAgeworICAgICAgICBndGtfY2xpcGJvYXJkX2NsZWFy
KG1fY2xpcGJvYXJkKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBjYW5FeGVjdXRlRWRpdGlu
Z0NvbW1hbmRSZWFkeUNhbGxiYWNrKEdPYmplY3QqLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgRWRp
dG9yVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAg
ICAgICAgdGVzdC0+bV9jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQgPSB3ZWJraXRfd2ViX3ZpZXdf
Y2FuX2V4ZWN1dGVfZWRpdGluZ19jb21tYW5kX2ZpbmlzaCh0ZXN0LT5tX3dlYlZpZXcsIHJlc3Vs
dCwgJmVycm9yLm91dFB0cigpKTsKKyAgICAgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKyAg
ICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBi
b29sIGNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChjb25zdCBjaGFyKiBjb21tYW5kKQorICAgIHsK
KyAgICAgICAgbV9jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQgPSBmYWxzZTsKKyAgICAgICAgd2Vi
a2l0X3dlYl92aWV3X2Nhbl9leGVjdXRlX2VkaXRpbmdfY29tbWFuZChtX3dlYlZpZXcsIGNvbW1h
bmQsIDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4oY2FuRXhlY3V0ZUVk
aXRpbmdDb21tYW5kUmVhZHlDYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX21haW5fbG9vcF9y
dW4obV9tYWluTG9vcCk7CisgICAgICAgIHJldHVybiBtX2NhbkV4ZWN1dGVFZGl0aW5nQ29tbWFu
ZDsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gd2FpdEZvckNsaXBib2FyZFRleHQoRWRp
dG9yVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPm1fdHJpZXNDb3VudCsrOworICAg
ICAgICBpZiAoZ3RrX2NsaXBib2FyZF93YWl0X2lzX3RleHRfYXZhaWxhYmxlKHRlc3QtPm1fY2xp
cGJvYXJkKSB8fCB0ZXN0LT5tX3RyaWVzQ291bnQgPiBrQ2xpcGJvYXJkV2FpdE1heFRyaWVzKSB7
CisgICAgICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworICAgICAg
ICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIFRSVUU7Cisg
ICAgfQorCisgICAgdm9pZCBjb3B5Q2xpcGJvYXJkKCkKKyAgICB7CisgICAgICAgIHdlYmtpdF93
ZWJfdmlld19leGVjdXRlX2VkaXRpbmdfY29tbWFuZChtX3dlYlZpZXcsIFdFQktJVF9FRElUSU5H
X0NPTU1BTkRfQ09QWSk7CisgICAgICAgIC8vIFRoZXJlJ3Mgbm8gd2F5IHRvIGtub3cgd2hlbiB0
aGUgc2VsZWN0aW9uIGhhcyBiZWVuIGNvcGllZCB0bworICAgICAgICAvLyB0aGUgY2xpcGJvYXJk
LCBzbyB1c2UgYSB0aW1lb3V0IHNvdXJjZSB0byBxdWVyeSB0aGUgY2xpcGJvYXJkLgorICAgICAg
ICBtX3RyaWVzQ291bnQgPSAwOworICAgICAgICBnX3RpbWVvdXRfYWRkKGtDbGlwYm9hcmRXYWl0
VGltZW91dCwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4od2FpdEZvckNsaXBib2FyZFRl
eHQpLCB0aGlzKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgIH0K
KworICAgIEd0a0NsaXBib2FyZCogbV9jbGlwYm9hcmQ7CisgICAgYm9vbCBtX2NhbkV4ZWN1dGVF
ZGl0aW5nQ29tbWFuZDsKKyAgICBzaXplX3QgbV90cmllc0NvdW50OworfTsKKworc3RhdGljIHZv
aWQgdGVzdFdlYlZpZXdFZGl0b3JDdXRDb3B5UGFzdGVOb25FZGl0YWJsZShFZGl0b3JUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzZWxlY3RlZFNw
YW5IVE1MID0gIjxodG1sPjxib2R5IGNvbnRlbnRFZGl0YWJsZT1cImZhbHNlXCI+IgorICAgICAg
ICAiPHNwYW4gaWQ9XCJtYWluc3BhblwiPkFsbCB3b3JrIGFuZCBubyBwbGF5IDxzcGFuIGlkPVwi
c3Vic3BhblwiPm1ha2UgSmFjayBhIGR1bGw8L3NwYW4+IGJveS48L3NwYW4+IgorICAgICAgICAi
PHNjcmlwdD5kb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5jb2xsYXBzZSgpO1xuIgorICAgICAgICAi
ZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0QWxsQ2hpbGRyZW4oZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ3N1YnNwYW4nKSk7XG4iCisgICAgICAgICI8L3NjcmlwdD48L2JvZHk+PC9odG1s
PiI7CisKKyAgICAvLyBOb3RoaW5nIGxvYWRlZCB5ZXQuCisgICAgZ19hc3NlcnQoIXRlc3QtPmNh
bkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElOR19DT01NQU5EX0NVVCkpOworICAg
IGdfYXNzZXJ0KCF0ZXN0LT5jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQoV0VCS0lUX0VESVRJTkdf
Q09NTUFORF9DT1BZKSk7CisgICAgZ19hc3NlcnQoIXRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29t
bWFuZChXRUJLSVRfRURJVElOR19DT01NQU5EX1BBU1RFKSk7CisKKyAgICB0ZXN0LT5sb2FkSHRt
bChzZWxlY3RlZFNwYW5IVE1MLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQo
KTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRf
RURJVElOR19DT01NQU5EX0NPUFkpKTsKKyAgICAvLyBJdCdzIG5vdCBwb3NzaWJsZSB0byBjdXQg
YW5kIHBhc3RlIHdoZW4gY29udGVudCBpcyBub3QgZWRpdGFibGUKKyAgICAvLyBldmVuIGlmIHRo
ZXJlJ3MgYSBzZWxlY3Rpb24uCisgICAgZ19hc3NlcnQoIXRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5n
Q29tbWFuZChXRUJLSVRfRURJVElOR19DT01NQU5EX0NVVCkpOworICAgIGdfYXNzZXJ0KCF0ZXN0
LT5jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQoV0VCS0lUX0VESVRJTkdfQ09NTUFORF9QQVNURSkp
OworCisgICAgdGVzdC0+Y29weUNsaXBib2FyZCgpOworICAgIEdPd25QdHI8Y2hhcj4gY2xpcGJv
YXJkVGV4dChndGtfY2xpcGJvYXJkX3dhaXRfZm9yX3RleHQodGVzdC0+bV9jbGlwYm9hcmQpKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIoY2xpcGJvYXJkVGV4dC5nZXQoKSwgPT0sICJtYWtlIEphY2sg
YSBkdWxsIik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3RWRpdG9yQ3V0Q29weVBhc3Rl
RWRpdGFibGUoRWRpdG9yVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBzdGF0aWMg
Y29uc3QgY2hhciogc2VsZWN0ZWRTcGFuSFRNTCA9ICI8aHRtbD48Ym9keSBjb250ZW50RWRpdGFi
bGU9XCJ0cnVlXCI+IgorICAgICAgICAiPHNwYW4gaWQ9XCJtYWluc3BhblwiPkFsbCB3b3JrIGFu
ZCBubyBwbGF5IDxzcGFuPm1ha2UgSmFjayBhIGR1bGw8L3NwYW4+IGJveS48L3NwYW4+IgorICAg
ICAgICAiPHNjcmlwdD5kb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5jb2xsYXBzZSgpO1xuIgorICAg
ICAgICAiZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0QWxsQ2hpbGRyZW4oZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ21haW5zcGFuJykpO1xuIgorICAgICAgICAiPC9zY3JpcHQ+PC9ib2R5
PjwvaHRtbD4iOworCisgICAgLy8gTm90aGluZyBsb2FkZWQgeWV0LgorICAgIGdfYXNzZXJ0KCF0
ZXN0LT5jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQoV0VCS0lUX0VESVRJTkdfQ09NTUFORF9DVVQp
KTsKKyAgICBnX2Fzc2VydCghdGVzdC0+Y2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kKFdFQktJVF9F
RElUSU5HX0NPTU1BTkRfQ09QWSkpOworICAgIGdfYXNzZXJ0KCF0ZXN0LT5jYW5FeGVjdXRlRWRp
dGluZ0NvbW1hbmQoV0VCS0lUX0VESVRJTkdfQ09NTUFORF9QQVNURSkpOworCisgICAgdGVzdC0+
bG9hZEh0bWwoc2VsZWN0ZWRTcGFuSFRNTCwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZp
bmlzaGVkKCk7CisKKyAgICAvLyBUaGVyZSdzIGEgc2VsZWN0aW9uLgorICAgIGdfYXNzZXJ0KHRl
c3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElOR19DT01NQU5EX0NVVCkp
OworICAgIGdfYXNzZXJ0KHRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJ
VElOR19DT01NQU5EX0NPUFkpKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5jYW5FeGVjdXRlRWRpdGlu
Z0NvbW1hbmQoV0VCS0lUX0VESVRJTkdfQ09NTUFORF9QQVNURSkpOworCisgICAgdGVzdC0+Y29w
eUNsaXBib2FyZCgpOworICAgIEdPd25QdHI8Y2hhcj4gY2xpcGJvYXJkVGV4dChndGtfY2xpcGJv
YXJkX3dhaXRfZm9yX3RleHQodGVzdC0+bV9jbGlwYm9hcmQpKTsKKyAgICBnX2Fzc2VydF9jbXBz
dHIoY2xpcGJvYXJkVGV4dC5nZXQoKSwgPT0sICJBbGwgd29yayBhbmQgbm8gcGxheSBtYWtlIEph
Y2sgYSBkdWxsIGJveS4iKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdFZGl0b3JTZWxl
Y3RBbGxOb25FZGl0YWJsZShFZGl0b3JUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAg
IHN0YXRpYyBjb25zdCBjaGFyKiBzZWxlY3RlZFNwYW5IVE1MID0gIjxodG1sPjxib2R5IGNvbnRl
bnRFZGl0YWJsZT1cImZhbHNlXCI+IgorICAgICAgICAiPHNwYW4gaWQ9XCJtYWluc3BhblwiPkFs
bCB3b3JrIGFuZCBubyBwbGF5IDxzcGFuIGlkPVwic3Vic3BhblwiPm1ha2UgSmFjayBhIGR1bGw8
L3NwYW4+IGJveS48L3NwYW4+IgorICAgICAgICAiPHNjcmlwdD5kb2N1bWVudC5nZXRTZWxlY3Rp
b24oKS5jb2xsYXBzZSgpO1xuIgorICAgICAgICAiZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkuc2Vs
ZWN0QWxsQ2hpbGRyZW4oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1YnNwYW4nKSk7XG4iCisg
ICAgICAgICI8L3NjcmlwdD48L2JvZHk+PC9odG1sPiI7CisKKyAgICBnX2Fzc2VydCh0ZXN0LT5j
YW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQoV0VCS0lUX0VESVRJTkdfQ09NTUFORF9TRUxFQ1RfQUxM
KSk7CisKKyAgICB0ZXN0LT5sb2FkSHRtbChzZWxlY3RlZFNwYW5IVE1MLCAwKTsKKyAgICB0ZXN0
LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPmNhbkV4ZWN1
dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElOR19DT01NQU5EX1NFTEVDVF9BTEwpKTsKKwor
ICAgIHRlc3QtPmNvcHlDbGlwYm9hcmQoKTsKKyAgICBHT3duUHRyPGNoYXI+IGNsaXBib2FyZFRl
eHQoZ3RrX2NsaXBib2FyZF93YWl0X2Zvcl90ZXh0KHRlc3QtPm1fY2xpcGJvYXJkKSk7CisKKyAg
ICAvLyBJbml0aWFsbHkgb25seSB0aGUgc3Vic3BhbiBpcyBzZWxlY3RlZC4KKyAgICBnX2Fzc2Vy
dF9jbXBzdHIoY2xpcGJvYXJkVGV4dC5nZXQoKSwgPT0sICJtYWtlIEphY2sgYSBkdWxsIik7CisK
KyAgICB3ZWJraXRfd2ViX3ZpZXdfZXhlY3V0ZV9lZGl0aW5nX2NvbW1hbmQodGVzdC0+bV93ZWJW
aWV3LCBXRUJLSVRfRURJVElOR19DT01NQU5EX1NFTEVDVF9BTEwpOworICAgIHRlc3QtPmNvcHlD
bGlwYm9hcmQoKTsKKyAgICBjbGlwYm9hcmRUZXh0LnNldChndGtfY2xpcGJvYXJkX3dhaXRfZm9y
X3RleHQodGVzdC0+bV9jbGlwYm9hcmQpKTsKKworICAgIC8vIFRoZSBtYWluc3BhbiBzaG91bGQg
YmUgc2VsZWN0ZWQgYWZ0ZXIgY2FsbGluZyBTRUxFQ1RfQUxMLgorICAgIGdfYXNzZXJ0X2NtcHN0
cihjbGlwYm9hcmRUZXh0LmdldCgpLCA9PSwgIkFsbCB3b3JrIGFuZCBubyBwbGF5IG1ha2UgSmFj
ayBhIGR1bGwgYm95LiIpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0VkaXRvclNlbGVj
dEFsbEVkaXRhYmxlKEVkaXRvclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgc3Rh
dGljIGNvbnN0IGNoYXIqIHNlbGVjdGVkU3BhbkhUTUwgPSAiPGh0bWw+PGJvZHkgY29udGVudEVk
aXRhYmxlPVwidHJ1ZVwiPiIKKyAgICAgICAgIjxzcGFuIGlkPVwibWFpbnNwYW5cIj5BbGwgd29y
ayBhbmQgbm8gcGxheSA8c3BhbiBpZD1cInN1YnNwYW5cIj5tYWtlIEphY2sgYSBkdWxsPC9zcGFu
PiBib3kuPC9zcGFuPiIKKyAgICAgICAgIjxzY3JpcHQ+ZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCku
Y29sbGFwc2UoKTtcbiIKKyAgICAgICAgImRvY3VtZW50LmdldFNlbGVjdGlvbigpLnNlbGVjdEFs
bENoaWxkcmVuKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdWJzcGFuJykpO1xuIgorICAgICAg
ICAiPC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4iOworCisgICAgZ19hc3NlcnQodGVzdC0+Y2FuRXhl
Y3V0ZUVkaXRpbmdDb21tYW5kKFdFQktJVF9FRElUSU5HX0NPTU1BTkRfU0VMRUNUX0FMTCkpOwor
CisgICAgdGVzdC0+bG9hZEh0bWwoc2VsZWN0ZWRTcGFuSFRNTCwgMCk7CisgICAgdGVzdC0+d2Fp
dFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCh0ZXN0LT5jYW5FeGVjdXRlRWRp
dGluZ0NvbW1hbmQoV0VCS0lUX0VESVRJTkdfQ09NTUFORF9TRUxFQ1RfQUxMKSk7CisKKyAgICB0
ZXN0LT5jb3B5Q2xpcGJvYXJkKCk7CisgICAgR093blB0cjxjaGFyPiBjbGlwYm9hcmRUZXh0KGd0
a19jbGlwYm9hcmRfd2FpdF9mb3JfdGV4dCh0ZXN0LT5tX2NsaXBib2FyZCkpOworCisgICAgLy8g
SW5pdGlhbGx5IG9ubHkgdGhlIHN1YnNwYW4gaXMgc2VsZWN0ZWQuCisgICAgZ19hc3NlcnRfY21w
c3RyKGNsaXBib2FyZFRleHQuZ2V0KCksID09LCAibWFrZSBKYWNrIGEgZHVsbCIpOworCisgICAg
d2Via2l0X3dlYl92aWV3X2V4ZWN1dGVfZWRpdGluZ19jb21tYW5kKHRlc3QtPm1fd2ViVmlldywg
V0VCS0lUX0VESVRJTkdfQ09NTUFORF9TRUxFQ1RfQUxMKTsKKyAgICB0ZXN0LT5jb3B5Q2xpcGJv
YXJkKCk7CisgICAgY2xpcGJvYXJkVGV4dC5zZXQoZ3RrX2NsaXBib2FyZF93YWl0X2Zvcl90ZXh0
KHRlc3QtPm1fY2xpcGJvYXJkKSk7CisKKyAgICAvLyBUaGUgbWFpbnNwYW4gc2hvdWxkIGJlIHNl
bGVjdGVkIGFmdGVyIGNhbGxpbmcgU0VMRUNUX0FMTC4KKyAgICBnX2Fzc2VydF9jbXBzdHIoY2xp
cGJvYXJkVGV4dC5nZXQoKSwgPT0sICJBbGwgd29yayBhbmQgbm8gcGxheSBtYWtlIEphY2sgYSBk
dWxsIGJveS4iKTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQoreworICAgIEVkaXRvclRlc3Q6OmFk
ZCgiV2ViS2l0V2ViVmlldyIsICJjdXQtY29weS1wYXN0ZS9ub24tZWRpdGFibGUiLCB0ZXN0V2Vi
Vmlld0VkaXRvckN1dENvcHlQYXN0ZU5vbkVkaXRhYmxlKTsKKyAgICBFZGl0b3JUZXN0OjphZGQo
IldlYktpdFdlYlZpZXciLCAiY3V0LWNvcHktcGFzdGUvZWRpdGFibGUiLCB0ZXN0V2ViVmlld0Vk
aXRvckN1dENvcHlQYXN0ZUVkaXRhYmxlKTsKKyAgICBFZGl0b3JUZXN0OjphZGQoIldlYktpdFdl
YlZpZXciLCAic2VsZWN0LWFsbC9ub24tZWRpdGFibGUiLCB0ZXN0V2ViVmlld0VkaXRvclNlbGVj
dEFsbE5vbkVkaXRhYmxlKTsKKyAgICBFZGl0b3JUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAi
c2VsZWN0LWFsbC9lZGl0YWJsZSIsIHRlc3RXZWJWaWV3RWRpdG9yU2VsZWN0QWxsRWRpdGFibGUp
OworfQorCit2b2lkIGFmdGVyQWxsKCkKK3sKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9XZWJFeHRlbnNpb25UZXN0LmNwcCBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9XZWJFeHRlbnNpb25UZXN0LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjEyZTJiCi0tLSAvZGV2L251bGwKKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1dlYkV4dGVuc2lvblRlc3QuY3BwCkBA
IC0wLDAgKzEsMjY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dFJl
Zi5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8
Z2lvL2dpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lu
Y2x1ZGUgPHdlYmtpdDIvd2Via2l0LXdlYi1leHRlbnNpb24uaD4KKyNpbmNsdWRlIDx3dGYvRGVx
dWUuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIu
aD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmpl
Y3QvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworc3RhdGljIGNv
bnN0IGNoYXIgaW50cm9zcGVjdGlvblhNTFtdID0KKyAgICAiPG5vZGU+IgorICAgICIgPGludGVy
ZmFjZSBuYW1lPSdvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0Jz4iCisgICAgIiAgPG1l
dGhvZCBuYW1lPSdHZXRUaXRsZSc+IgorICAgICIgICA8YXJnIHR5cGU9J3QnIG5hbWU9J3BhZ2VJ
RCcgZGlyZWN0aW9uPSdpbicvPiIKKyAgICAiICAgPGFyZyB0eXBlPSdzJyBuYW1lPSd0aXRsZScg
ZGlyZWN0aW9uPSdvdXQnLz4iCisgICAgIiAgPC9tZXRob2Q+IgorICAgICIgIDxtZXRob2QgbmFt
ZT0nQWJvcnRQcm9jZXNzJz4iCisgICAgIiAgPC9tZXRob2Q+IgorICAgICIgIDxtZXRob2QgbmFt
ZT0nUnVuSmF2YVNjcmlwdEluSXNvbGF0ZWRXb3JsZCc+IgorICAgICIgICA8YXJnIHR5cGU9J3Qn
IG5hbWU9J3BhZ2VJRCcgZGlyZWN0aW9uPSdpbicvPiIKKyAgICAiICAgPGFyZyB0eXBlPSdzJyBu
YW1lPSdzY3JpcHQnIGRpcmVjdGlvbj0naW4nLz4iCisgICAgIiAgPC9tZXRob2Q+IgorICAgICIg
IDxzaWduYWwgbmFtZT0nRG9jdW1lbnRMb2FkZWQnLz4iCisgICAgIiAgPHNpZ25hbCBuYW1lPSdV
UklDaGFuZ2VkJz4iCisgICAgIiAgIDxhcmcgdHlwZT0ncycgbmFtZT0ndXJpJyBkaXJlY3Rpb249
J291dCcvPiIKKyAgICAiICA8L3NpZ25hbD4iCisgICAgIiA8L2ludGVyZmFjZT4iCisgICAgIjwv
bm9kZT4iOworCit0eXBlZGVmIGVudW0geworICAgIERvY3VtZW50TG9hZGVkU2lnbmFsLAorICAg
IFVSSUNoYW5nZWRTaWduYWwsCit9IERlbGF5ZWRTaWduYWxUeXBlOworCitzdHJ1Y3QgRGVsYXll
ZFNpZ25hbCB7CisgICAgRGVsYXllZFNpZ25hbChEZWxheWVkU2lnbmFsVHlwZSB0eXBlKQorICAg
ICAgICA6IHR5cGUodHlwZSkKKyAgICB7CisgICAgfQorCisgICAgRGVsYXllZFNpZ25hbChEZWxh
eWVkU2lnbmFsVHlwZSB0eXBlLCBjb25zdCBjaGFyKiB1cmkpCisgICAgICAgIDogdHlwZSh0eXBl
KQorICAgICAgICAsIHVyaSh1cmkpCisgICAgeworICAgIH0KKworICAgIERlbGF5ZWRTaWduYWxU
eXBlIHR5cGU7CisgICAgQ1N0cmluZyB1cmk7Cit9OworCitEZXF1ZTxPd25QdHI8RGVsYXllZFNp
Z25hbD4+IGRlbGF5ZWRTaWduYWxzUXVldWU7CisKK3N0YXRpYyB2b2lkIGVtaXREb2N1bWVudExv
YWRlZChHREJ1c0Nvbm5lY3Rpb24qIGNvbm5lY3Rpb24pCit7CisgICAgYm9vbCBvayA9IGdfZGJ1
c19jb25uZWN0aW9uX2VtaXRfc2lnbmFsKAorICAgICAgICBjb25uZWN0aW9uLAorICAgICAgICAw
LAorICAgICAgICAiL29yZy93ZWJraXQvZ3RrL1dlYkV4dGVuc2lvblRlc3QiLAorICAgICAgICAi
b3JnLndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9uVGVzdCIsCisgICAgICAgICJEb2N1bWVudExvYWRl
ZCIsCisgICAgICAgIDAsCisgICAgICAgIDApOworICAgIGdfYXNzZXJ0KG9rKTsKK30KKworc3Rh
dGljIHZvaWQgZG9jdW1lbnRMb2FkZWRDYWxsYmFjayhXZWJLaXRXZWJQYWdlKiwgV2ViS2l0V2Vi
RXh0ZW5zaW9uKiBleHRlbnNpb24pCit7CisgICAgZ3BvaW50ZXIgZGF0YSA9IGdfb2JqZWN0X2dl
dF9kYXRhKEdfT0JKRUNUKGV4dGVuc2lvbiksICJkYnVzLWNvbm5lY3Rpb24iKTsKKyAgICBpZiAo
ZGF0YSkKKyAgICAgICAgZW1pdERvY3VtZW50TG9hZGVkKEdfREJVU19DT05ORUNUSU9OKGRhdGEp
KTsKKyAgICBlbHNlCisgICAgICAgIGRlbGF5ZWRTaWduYWxzUXVldWUuYXBwZW5kKGFkb3B0UHRy
KG5ldyBEZWxheWVkU2lnbmFsKERvY3VtZW50TG9hZGVkU2lnbmFsKSkpOworfQorCitzdGF0aWMg
dm9pZCBlbWl0VVJJQ2hhbmdlZChHREJ1c0Nvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIGNvbnN0IGNo
YXIqIHVyaSkKK3sKKyAgICBib29sIG9rID0gZ19kYnVzX2Nvbm5lY3Rpb25fZW1pdF9zaWduYWwo
CisgICAgICAgIGNvbm5lY3Rpb24sCisgICAgICAgIDAsCisgICAgICAgICIvb3JnL3dlYmtpdC9n
dGsvV2ViRXh0ZW5zaW9uVGVzdCIsCisgICAgICAgICJvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNp
b25UZXN0IiwKKyAgICAgICAgIlVSSUNoYW5nZWQiLAorICAgICAgICBnX3ZhcmlhbnRfbmV3KCIo
cykiLCB1cmkpLAorICAgICAgICAwKTsKKyAgICBnX2Fzc2VydChvayk7Cit9CisKK3N0YXRpYyB2
b2lkIHVyaUNoYW5nZWRDYWxsYmFjayhXZWJLaXRXZWJQYWdlKiB3ZWJQYWdlLCBHUGFyYW1TcGVj
KiBwc3BlYywgV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24pCit7CisgICAgZ3BvaW50ZXIg
ZGF0YSA9IGdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKGV4dGVuc2lvbiksICJkYnVzLWNvbm5l
Y3Rpb24iKTsKKyAgICBpZiAoZGF0YSkKKyAgICAgICAgZW1pdFVSSUNoYW5nZWQoR19EQlVTX0NP
Tk5FQ1RJT04oZGF0YSksIHdlYmtpdF93ZWJfcGFnZV9nZXRfdXJpKHdlYlBhZ2UpKTsKKyAgICBl
bHNlCisgICAgICAgIGRlbGF5ZWRTaWduYWxzUXVldWUuYXBwZW5kKGFkb3B0UHRyKG5ldyBEZWxh
eWVkU2lnbmFsKFVSSUNoYW5nZWRTaWduYWwsIHdlYmtpdF93ZWJfcGFnZV9nZXRfdXJpKHdlYlBh
Z2UpKSkpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gc2VuZFJlcXVlc3RDYWxsYmFjayhXZWJLaXRX
ZWJQYWdlKiwgV2ViS2l0VVJJUmVxdWVzdCogcmVxdWVzdCwgV2ViS2l0VVJJUmVzcG9uc2UqLCBn
cG9pbnRlcikKK3sKKyAgICBjb25zdCBjaGFyKiByZXF1ZXN0VVJJID0gd2Via2l0X3VyaV9yZXF1
ZXN0X2dldF91cmkocmVxdWVzdCk7CisgICAgZ19hc3NlcnQocmVxdWVzdFVSSSk7CisKKyAgICBp
ZiAoY29uc3QgY2hhciogc3VmZml4ID0gZ19zdHJyc3RyKHJlcXVlc3RVUkksICIvcmVtb3ZlLXRo
aXMvamF2YXNjcmlwdC5qcyIpKSB7CisgICAgICAgIEdPd25QdHI8Y2hhcj4gcHJlZml4KGdfc3Ry
bmR1cChyZXF1ZXN0VVJJLCBzdHJsZW4ocmVxdWVzdFVSSSkgLSBzdHJsZW4oc3VmZml4KSkpOwor
ICAgICAgICBHT3duUHRyPGNoYXI+IG5ld1VSSShnX3N0cmR1cF9wcmludGYoIiVzL2phdmFzY3Jp
cHQuanMiLCBwcmVmaXguZ2V0KCkpKTsKKyAgICAgICAgd2Via2l0X3VyaV9yZXF1ZXN0X3NldF91
cmkocmVxdWVzdCwgbmV3VVJJLmdldCgpKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2hhc19zdWZm
aXgocmVxdWVzdFVSSSwgIi9hZGQtZG8tbm90LXRyYWNrLWhlYWRlciIpKSB7CisgICAgICAgIFNv
dXBNZXNzYWdlSGVhZGVycyogaGVhZGVycyA9IHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfaHR0cF9o
ZWFkZXJzKHJlcXVlc3QpOworICAgICAgICBnX2Fzc2VydChoZWFkZXJzKTsKKyAgICAgICAgc291
cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKGhlYWRlcnMsICJETlQiLCAiMSIpOworICAgIH0gZWxz
ZSBpZiAoZ19zdHJfaGFzX3N1ZmZpeChyZXF1ZXN0VVJJLCAiL2NhbmNlbC10aGlzLmpzIikpCisg
ICAgICAgIHJldHVybiBUUlVFOworCisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9p
ZCBwYWdlQ3JlYXRlZENhbGxiYWNrKFdlYktpdFdlYkV4dGVuc2lvbiogZXh0ZW5zaW9uLCBXZWJL
aXRXZWJQYWdlKiB3ZWJQYWdlLCBncG9pbnRlcikKK3sKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdl
YlBhZ2UsICJkb2N1bWVudC1sb2FkZWQiLCBHX0NBTExCQUNLKGRvY3VtZW50TG9hZGVkQ2FsbGJh
Y2spLCBleHRlbnNpb24pOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViUGFnZSwgIm5vdGlmeTo6
dXJpIiwgR19DQUxMQkFDSyh1cmlDaGFuZ2VkQ2FsbGJhY2spLCBleHRlbnNpb24pOworICAgIGdf
c2lnbmFsX2Nvbm5lY3Qod2ViUGFnZSwgInNlbmQtcmVxdWVzdCIsIEdfQ0FMTEJBQ0soc2VuZFJl
cXVlc3RDYWxsYmFjayksIDApOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBlY2hvQ2FsbGJhY2so
SlNDb250ZXh0UmVmIGpzQ29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmLCBzaXplX3Qg
YXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiop
Cit7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPD0gMCkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGpzQ29udGV4dCk7CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
c3RyaW5nKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGpzQ29udGV4dCwgYXJndW1lbnRzWzBd
LCAwKSk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlU3RyaW5nKGpzQ29udGV4dCwgc3RyaW5nLmdl
dCgpKTsKK30KKworc3RhdGljIHZvaWQgd2luZG93T2JqZWN0Q2xlYXJlZChXZWJLaXRTY3JpcHRX
b3JsZCogd29ybGQsIFdlYktpdFdlYlBhZ2UqIHBhZ2UsIFdlYktpdEZyYW1lKiBmcmFtZSwgZ3Bv
aW50ZXIpCit7CisgICAgSlNHbG9iYWxDb250ZXh0UmVmIGpzQ29udGV4dCA9IHdlYmtpdF9mcmFt
ZV9nZXRfamF2YXNjcmlwdF9jb250ZXh0X2Zvcl9zY3JpcHRfd29ybGQoZnJhbWUsIHdvcmxkKTsK
KyAgICBnX2Fzc2VydChqc0NvbnRleHQpOworICAgIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCA9
IEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChqc0NvbnRleHQpOworICAgIGdfYXNzZXJ0KGdsb2Jh
bE9iamVjdCk7CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gZnVuY3Rpb25OYW1lKEFk
b3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZWNobyIpKTsKKyAgICBKU09iamVj
dFJlZiBmdW5jdGlvbiA9IEpTT2JqZWN0TWFrZUZ1bmN0aW9uV2l0aENhbGxiYWNrKGpzQ29udGV4
dCwgZnVuY3Rpb25OYW1lLmdldCgpLCBlY2hvQ2FsbGJhY2spOworICAgIEpTT2JqZWN0U2V0UHJv
cGVydHkoanNDb250ZXh0LCBnbG9iYWxPYmplY3QsIGZ1bmN0aW9uTmFtZS5nZXQoKSwgZnVuY3Rp
b24sIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB8IGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHksIDApOworfQorCitzdGF0aWMgV2ViS2l0V2ViUGFnZSogZ2V0V2ViUGFnZShXZWJL
aXRXZWJFeHRlbnNpb24qIGV4dGVuc2lvbiwgdWludDY0X3QgcGFnZUlELCBHREJ1c01ldGhvZElu
dm9jYXRpb24qIGludm9jYXRpb24pCit7CisgICAgV2ViS2l0V2ViUGFnZSogcGFnZSA9IHdlYmtp
dF93ZWJfZXh0ZW5zaW9uX2dldF9wYWdlKGV4dGVuc2lvbiwgcGFnZUlEKTsKKyAgICBpZiAoIXBh
Z2UpIHsKKyAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVybl9lcnJvcigKKyAg
ICAgICAgICAgIGludm9jYXRpb24sIEdfREJVU19FUlJPUiwgR19EQlVTX0VSUk9SX0lOVkFMSURf
QVJHUywKKyAgICAgICAgICAgICJJbnZhbGlkIHBhZ2UgSUQ6ICUiIEdfR1VJTlQ2NF9GT1JNQVQs
IHBhZ2VJRCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGdfYXNzZXJ0X2NtcHVp
bnQod2Via2l0X3dlYl9wYWdlX2dldF9pZChwYWdlKSwgPT0sIHBhZ2VJRCk7CisgICAgcmV0dXJu
IHBhZ2U7Cit9CisKK3N0YXRpYyB2b2lkIG1ldGhvZENhbGxDYWxsYmFjayhHREJ1c0Nvbm5lY3Rp
b24qIGNvbm5lY3Rpb24sIGNvbnN0IGNoYXIqIHNlbmRlciwgY29uc3QgY2hhciogb2JqZWN0UGF0
aCwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogbWV0aG9kTmFtZSwgR1Zh
cmlhbnQqIHBhcmFtZXRlcnMsIEdEQnVzTWV0aG9kSW52b2NhdGlvbiogaW52b2NhdGlvbiwgZ3Bv
aW50ZXIgdXNlckRhdGEpCit7CisgICAgaWYgKGdfc3RyY21wMChpbnRlcmZhY2VOYW1lLCAib3Jn
LndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9uVGVzdCIpKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAiR2V0VGl0bGUiKSkgeworICAgICAgICB1aW50NjRf
dCBwYWdlSUQ7CisgICAgICAgIGdfdmFyaWFudF9nZXQocGFyYW1ldGVycywgIih0KSIsICZwYWdl
SUQpOworICAgICAgICBXZWJLaXRXZWJQYWdlKiBwYWdlID0gZ2V0V2ViUGFnZShXRUJLSVRfV0VC
X0VYVEVOU0lPTih1c2VyRGF0YSksIHBhZ2VJRCwgaW52b2NhdGlvbik7CisgICAgICAgIGlmICgh
cGFnZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBXZWJLaXRET01Eb2N1bWVudCog
ZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3BhZ2VfZ2V0X2RvbV9kb2N1bWVudChwYWdlKTsKKyAgICAg
ICAgR093blB0cjxjaGFyPiB0aXRsZSh3ZWJraXRfZG9tX2RvY3VtZW50X2dldF90aXRsZShkb2N1
bWVudCkpOworICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9jYXRpb25fcmV0dXJuX3ZhbHVlKGlu
dm9jYXRpb24sIGdfdmFyaWFudF9uZXcoIihzKSIsIHRpdGxlLmdldCgpKSk7CisgICAgfSBlbHNl
IGlmICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJSdW5KYXZhU2NyaXB0SW5Jc29sYXRlZFdvcmxk
IikpIHsKKyAgICAgICAgdWludDY0X3QgcGFnZUlEOworICAgICAgICBjb25zdCBjaGFyKiBzY3Jp
cHQ7CisgICAgICAgIGdfdmFyaWFudF9nZXQocGFyYW1ldGVycywgIih0JnMpIiwgJnBhZ2VJRCwg
JnNjcmlwdCk7CisgICAgICAgIFdlYktpdFdlYlBhZ2UqIHBhZ2UgPSBnZXRXZWJQYWdlKFdFQktJ
VF9XRUJfRVhURU5TSU9OKHVzZXJEYXRhKSwgcGFnZUlELCBpbnZvY2F0aW9uKTsKKyAgICAgICAg
aWYgKCFwYWdlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEdSZWZQdHI8V2ViS2l0
U2NyaXB0V29ybGQ+IHdvcmxkID0gYWRvcHRHUmVmKHdlYmtpdF9zY3JpcHRfd29ybGRfbmV3KCkp
OworICAgICAgICBnX2Fzc2VydCh3ZWJraXRfc2NyaXB0X3dvcmxkX2dldF9kZWZhdWx0KCkgIT0g
d29ybGQuZ2V0KCkpOworICAgICAgICBXZWJLaXRGcmFtZSogZnJhbWUgPSB3ZWJraXRfd2ViX3Bh
Z2VfZ2V0X21haW5fZnJhbWUocGFnZSk7CisgICAgICAgIEpTR2xvYmFsQ29udGV4dFJlZiBqc0Nv
bnRleHQgPSB3ZWJraXRfZnJhbWVfZ2V0X2phdmFzY3JpcHRfY29udGV4dF9mb3Jfc2NyaXB0X3dv
cmxkKGZyYW1lLCB3b3JsZC5nZXQoKSk7CisgICAgICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBqc1NjcmlwdChBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc2NyaXB0KSk7
CisgICAgICAgIEpTRXZhbHVhdGVTY3JpcHQoanNDb250ZXh0LCBqc1NjcmlwdC5nZXQoKSwgMCwg
MCwgMCwgMCk7CisgICAgICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUo
aW52b2NhdGlvbiwgMCk7CisgICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJB
Ym9ydFByb2Nlc3MiKSkgeworICAgICAgICBhYm9ydCgpOworICAgIH0KK30KKworc3RhdGljIGNv
bnN0IEdEQnVzSW50ZXJmYWNlVlRhYmxlIGludGVyZmFjZVZpcnR1YWxUYWJsZSA9IHsKKyAgICBt
ZXRob2RDYWxsQ2FsbGJhY2ssIDAsIDAsIHsgMCwgfQorfTsKKworc3RhdGljIHZvaWQgYnVzQWNx
dWlyZWRDYWxsYmFjayhHREJ1c0Nvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIGNvbnN0IGNoYXIqIG5h
bWUsIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIHN0YXRpYyBHREJ1c05vZGVJbmZvICppbnRy
b3NwZWN0aW9uRGF0YSA9IDA7CisgICAgaWYgKCFpbnRyb3NwZWN0aW9uRGF0YSkKKyAgICAgICAg
aW50cm9zcGVjdGlvbkRhdGEgPSBnX2RidXNfbm9kZV9pbmZvX25ld19mb3JfeG1sKGludHJvc3Bl
Y3Rpb25YTUwsIDApOworCisgICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAgIHVuc2lnbmVk
IHJlZ2lzdHJhdGlvbklEID0gZ19kYnVzX2Nvbm5lY3Rpb25fcmVnaXN0ZXJfb2JqZWN0KAorICAg
ICAgICBjb25uZWN0aW9uLAorICAgICAgICAiL29yZy93ZWJraXQvZ3RrL1dlYkV4dGVuc2lvblRl
c3QiLAorICAgICAgICBpbnRyb3NwZWN0aW9uRGF0YS0+aW50ZXJmYWNlc1swXSwKKyAgICAgICAg
JmludGVyZmFjZVZpcnR1YWxUYWJsZSwKKyAgICAgICAgZ19vYmplY3RfcmVmKHVzZXJEYXRhKSwK
KyAgICAgICAgc3RhdGljX2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGdfb2JqZWN0X3VucmVmKSwKKyAg
ICAgICAgJmVycm9yLm91dFB0cigpKTsKKyAgICBpZiAoIXJlZ2lzdHJhdGlvbklEKQorICAgICAg
ICBnX3dhcm5pbmcoIkZhaWxlZCB0byByZWdpc3RlciBvYmplY3Q6ICVzXG4iLCBlcnJvci0+bWVz
c2FnZSk7CisKKyAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVCh1c2VyRGF0YSksICJkYnVz
LWNvbm5lY3Rpb24iLCBjb25uZWN0aW9uKTsKKyAgICB3aGlsZSAoZGVsYXllZFNpZ25hbHNRdWV1
ZS5zaXplKCkpIHsKKyAgICAgICAgT3duUHRyPERlbGF5ZWRTaWduYWw+IGRlbGF5ZWRTaWduYWwg
PSBkZWxheWVkU2lnbmFsc1F1ZXVlLnRha2VGaXJzdCgpOworICAgICAgICBzd2l0Y2ggKGRlbGF5
ZWRTaWduYWwtPnR5cGUpIHsKKyAgICAgICAgY2FzZSBEb2N1bWVudExvYWRlZFNpZ25hbDoKKyAg
ICAgICAgICAgIGVtaXREb2N1bWVudExvYWRlZChjb25uZWN0aW9uKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFVSSUNoYW5nZWRTaWduYWw6CisgICAgICAgICAgICBlbWl0VVJJ
Q2hhbmdlZChjb25uZWN0aW9uLCBkZWxheWVkU2lnbmFsLT51cmkuZGF0YSgpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCitleHRlcm4gIkMiIHZvaWQgd2Via2l0
X3dlYl9leHRlbnNpb25faW5pdGlhbGl6ZShXZWJLaXRXZWJFeHRlbnNpb24qIGV4dGVuc2lvbikK
K3sKKyAgICBnX3NpZ25hbF9jb25uZWN0KGV4dGVuc2lvbiwgInBhZ2UtY3JlYXRlZCIsIEdfQ0FM
TEJBQ0socGFnZUNyZWF0ZWRDYWxsYmFjayksIGV4dGVuc2lvbik7CisgICAgZ19zaWduYWxfY29u
bmVjdCh3ZWJraXRfc2NyaXB0X3dvcmxkX2dldF9kZWZhdWx0KCksICJ3aW5kb3ctb2JqZWN0LWNs
ZWFyZWQiLCBHX0NBTExCQUNLKHdpbmRvd09iamVjdENsZWFyZWQpLCAwKTsKKworICAgIGdfYnVz
X293bl9uYW1lKAorICAgICAgICBHX0JVU19UWVBFX1NFU1NJT04sCisgICAgICAgICJvcmcud2Vi
a2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwKKyAgICAgICAgR19CVVNfTkFNRV9PV05FUl9GTEFH
U19OT05FLAorICAgICAgICBidXNBY3F1aXJlZENhbGxiYWNrLAorICAgICAgICAwLCAwLAorICAg
ICAgICBnX29iamVjdF9yZWYoZXh0ZW5zaW9uKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8R0Rlc3Ry
b3lOb3RpZnk+KGdfb2JqZWN0X3VucmVmKSk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvV2ViUHJvY2Vzc1Rlc3QuY3BwIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1dlYlByb2Nlc3NUZXN0LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTFhNmU3Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1dlYlByb2Nlc3NUZXN0LmNwcApAQCAtMCww
ICsxLDEwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJZ2FsaWEgUy5MLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Rlc3QuaCIKKworI2luY2x1ZGUgPGdp
by9naW8uaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisKK3R5cGVkZWYgSGFz
aE1hcDxTdHJpbmcsIHN0ZDo6ZnVuY3Rpb248UGFzc093blB0cjxXZWJQcm9jZXNzVGVzdD4gKCk+
PiBUZXN0c01hcDsKK3N0YXRpYyBUZXN0c01hcCYgdGVzdHNNYXAoKQoreworICAgIERFRklORV9T
VEFUSUNfTE9DQUwoVGVzdHNNYXAsIHNfdGVzdHNNYXAsICgpKTsKKyAgICByZXR1cm4gc190ZXN0
c01hcDsKK30KKwordm9pZCBXZWJQcm9jZXNzVGVzdDo6YWRkKGNvbnN0IFN0cmluZyYgdGVzdE5h
bWUsIHN0ZDo6ZnVuY3Rpb248UGFzc093blB0cjxXZWJQcm9jZXNzVGVzdD4gKCk+IGNsb3N1cmUp
Cit7CisgICAgdGVzdHNNYXAoKS5hZGQodGVzdE5hbWUsIHN0ZDo6Zm9yd2FyZDxzdGQ6OmZ1bmN0
aW9uPFBhc3NPd25QdHI8V2ViUHJvY2Vzc1Rlc3Q+ICgpPj4oY2xvc3VyZSkpOworfQorCitQYXNz
T3duUHRyPFdlYlByb2Nlc3NUZXN0PiBXZWJQcm9jZXNzVGVzdDo6Y3JlYXRlKGNvbnN0IFN0cmlu
ZyYgdGVzdE5hbWUpCit7CisgICAgZ19hc3NlcnQodGVzdHNNYXAoKS5jb250YWlucyh0ZXN0TmFt
ZSkpOworICAgIHJldHVybiB0ZXN0c01hcCgpLmdldCh0ZXN0TmFtZSkoKTsKK30KKworc3RhdGlj
IGNvbnN0IGNoYXIgaW50cm9zcGVjdGlvblhNTFtdID0KKyAgICAiPG5vZGU+IgorICAgICIgPGlu
dGVyZmFjZSBuYW1lPSdvcmcud2Via2l0Lmd0ay5XZWJQcm9jZXNzVGVzdCc+IgorICAgICIgIDxt
ZXRob2QgbmFtZT0nUnVuVGVzdCc+IgorICAgICIgICA8YXJnIHR5cGU9J3MnIG5hbWU9J3BhdGgn
IGRpcmVjdGlvbj0naW4nLz4iCisgICAgIiAgIDxhcmcgdHlwZT0nYXtzdn0nIG5hbWU9J2FyZ3Mn
IGRpcmVjdGlvbj0naW4nLz4iCisgICAgIiAgIDxhcmcgdHlwZT0nYicgbmFtZT0ncmVzdWx0JyBk
aXJlY3Rpb249J291dCcvPiIKKyAgICAiICA8L21ldGhvZD4iCisgICAgIiA8L2ludGVyZmFjZT4i
CisgICAgIjwvbm9kZT4iOworCitzdGF0aWMgdm9pZCBtZXRob2RDYWxsQ2FsbGJhY2soR0RCdXND
b25uZWN0aW9uKiBjb25uZWN0aW9uLCBjb25zdCBjaGFyKiBzZW5kZXIsIGNvbnN0IGNoYXIqIG9i
amVjdFBhdGgsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG1ldGhvZE5h
bWUsIEdWYXJpYW50KiBwYXJhbWV0ZXJzLCBHREJ1c01ldGhvZEludm9jYXRpb24qIGludm9jYXRp
b24sIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIGlmIChnX3N0cmNtcDAoaW50ZXJmYWNlTmFt
ZSwgIm9yZy53ZWJraXQuZ3RrLldlYlByb2Nlc3NUZXN0IikpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJSdW5UZXN0IikpIHsKKyAgICAgICAgY29u
c3QgY2hhciogdGVzdFBhdGg7CisgICAgICAgIEdWYXJpYW50KiBhcmdzOworICAgICAgICBnX3Zh
cmlhbnRfZ2V0KHBhcmFtZXRlcnMsICIoJnNAYXtzdn0pIiwgJnRlc3RQYXRoLCAmYXJncyk7Cisg
ICAgICAgIE93blB0cjxXZWJQcm9jZXNzVGVzdD4gdGVzdCA9IFdlYlByb2Nlc3NUZXN0OjpjcmVh
dGUoU3RyaW5nOjpmcm9tVVRGOCh0ZXN0UGF0aCkpOworICAgICAgICBib29sIHJlc3VsdCA9IHRl
c3QtPnJ1blRlc3QoZ19zdHJyc3RyKHRlc3RQYXRoLCAiLyIpICsgMSwgV0VCS0lUX1dFQl9FWFRF
TlNJT04odXNlckRhdGEpLCBhcmdzKTsKKyAgICAgICAgZ192YXJpYW50X3VucmVmKGFyZ3MpOwor
CisgICAgICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUoaW52b2NhdGlv
biwgZ192YXJpYW50X25ldygiKGIpIiwgcmVzdWx0KSk7CisgICAgfSBlbHNlCisgICAgICAgIGdf
YXNzZXJ0X25vdF9yZWFjaGVkKCk7Cit9CisKK3N0YXRpYyBjb25zdCBHREJ1c0ludGVyZmFjZVZU
YWJsZSBpbnRlcmZhY2VWaXJ0dWFsVGFibGUgPSB7CisgICAgbWV0aG9kQ2FsbENhbGxiYWNrLCAw
LCAwLCB7IDAsIH0KK307CisKK3N0YXRpYyB2b2lkIGJ1c0FjcXVpcmVkQ2FsbGJhY2soR0RCdXND
b25uZWN0aW9uKiBjb25uZWN0aW9uLCBjb25zdCBjaGFyKiBuYW1lLCBncG9pbnRlciB1c2VyRGF0
YSkKK3sKKyAgICBzdGF0aWMgR0RCdXNOb2RlSW5mbyAqaW50cm9zcGVjdGlvbkRhdGEgPSAwOwor
ICAgIGlmICghaW50cm9zcGVjdGlvbkRhdGEpCisgICAgICAgIGludHJvc3BlY3Rpb25EYXRhID0g
Z19kYnVzX25vZGVfaW5mb19uZXdfZm9yX3htbChpbnRyb3NwZWN0aW9uWE1MLCAwKTsKKworICAg
IEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICB1bnNpZ25lZCByZWdpc3RyYXRpb25JRCA9IGdf
ZGJ1c19jb25uZWN0aW9uX3JlZ2lzdGVyX29iamVjdCgKKyAgICAgICAgY29ubmVjdGlvbiwKKyAg
ICAgICAgIi9vcmcvd2Via2l0L2d0ay9XZWJQcm9jZXNzVGVzdCIsCisgICAgICAgIGludHJvc3Bl
Y3Rpb25EYXRhLT5pbnRlcmZhY2VzWzBdLAorICAgICAgICAmaW50ZXJmYWNlVmlydHVhbFRhYmxl
LAorICAgICAgICBnX29iamVjdF9yZWYodXNlckRhdGEpLAorICAgICAgICBzdGF0aWNfY2FzdDxH
RGVzdHJveU5vdGlmeT4oZ19vYmplY3RfdW5yZWYpLAorICAgICAgICAmZXJyb3Iub3V0UHRyKCkp
OworICAgIGlmICghcmVnaXN0cmF0aW9uSUQpCisgICAgICAgIGdfd2FybmluZygiRmFpbGVkIHRv
IHJlZ2lzdGVyIG9iamVjdDogJXNcbiIsIGVycm9yLT5tZXNzYWdlKTsKK30KKworZXh0ZXJuICJD
IiB2b2lkIHdlYmtpdF93ZWJfZXh0ZW5zaW9uX2luaXRpYWxpemUoV2ViS2l0V2ViRXh0ZW5zaW9u
KiBleHRlbnNpb24pCit7CisgICAgZ19idXNfb3duX25hbWUoCisgICAgICAgIEdfQlVTX1RZUEVf
U0VTU0lPTiwKKyAgICAgICAgIm9yZy53ZWJraXQuZ3RrLldlYlByb2Nlc3NUZXN0IiwKKyAgICAg
ICAgR19CVVNfTkFNRV9PV05FUl9GTEFHU19OT05FLAorICAgICAgICBidXNBY3F1aXJlZENhbGxi
YWNrLAorICAgICAgICAwLCAwLAorICAgICAgICBnX29iamVjdF9yZWYoZXh0ZW5zaW9uKSwKKyAg
ICAgICAgc3RhdGljX2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGdfb2JqZWN0X3VucmVmKSk7Cit9CmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvV2ViUHJvY2Vz
c1Rlc3QuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9XZWJQcm9jZXNz
VGVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzZWVkZDAKLS0tIC9k
ZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvV2ViUHJv
Y2Vzc1Rlc3QuaApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEln
YWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdC13ZWItZXh0ZW5zaW9uLmg+CisjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNo
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK2NsYXNzIFdlYlByb2Nlc3NU
ZXN0IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5XZWJQcm9jZXNzVGVzdCgpIHsgfQorICAgIHZp
cnR1YWwgYm9vbCBydW5UZXN0KGNvbnN0IGNoYXIqIHRlc3ROYW1lLCBXZWJLaXRXZWJFeHRlbnNp
b24qLCBHVmFyaWFudCogYXJncykgPSAwOworCisgICAgc3RhdGljIHZvaWQgYWRkKGNvbnN0IFN0
cmluZyYgdGVzdE5hbWUsIHN0ZDo6ZnVuY3Rpb248UGFzc093blB0cjxXZWJQcm9jZXNzVGVzdD4g
KCk+KTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxXZWJQcm9jZXNzVGVzdD4gY3JlYXRlKGNvbnN0
IFN0cmluZyYgdGVzdE5hbWUpOworfTsKKworI2RlZmluZSBSRUdJU1RFUl9URVNUKENsYXNzTmFt
ZSwgVGVzdE5hbWUpIFwKKyAgICBXZWJQcm9jZXNzVGVzdDo6YWRkKFN0cmluZzo6ZnJvbVVURjgo
VGVzdE5hbWUpLCBDbGFzc05hbWU6OmNyZWF0ZSkKKwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL3Jlc291cmNlcy9saW5rLXRpdGxlLmpzIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL3Jlc291cmNlcy9saW5rLXRpdGxlLmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjODI0ZGEKLS0tIC9kZXYvbnVsbAor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvcmVzb3VyY2VzL2xpbmst
dGl0bGUuanMKQEAgLTAsMCArMSBAQAord2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdX
ZWJLaXRMaW5rJykudGl0bGU7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdDJHdGsvcmVzb3VyY2VzL3Rlc3QtY2VydC5wZW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdDJHdGsvcmVzb3VyY2VzL3Rlc3QtY2VydC5wZW0KbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uYjM0MzAxZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9yZXNvdXJjZXMvdGVzdC1jZXJ0LnBlbQpAQCAt
MCwwICsxLDEzIEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUI5akNDQVYrZ0F3
SUJBZ0lKQUxldVhCbyt2d3o5TUEwR0NTcUdTSWIzRFFFQkJRVUFNQlF4RWpBUUJnTlYKK0JBTU1D
VEV5Tnk0d0xqQXVNVEFlRncweE1qQTNNVEl4TWpRNE1qUmFGdzB5TWpBM01UQXhNalE0TWpSYU1C
UXgKK0VqQVFCZ05WQkFNTUNURXlOeTR3TGpBdU1UQ0JuekFOQmdrcWhraUc5dzBCQVFFRkFBT0Jq
UUF3Z1lrQ2dZRUEKKzBUVXpPUXhIQklLREQybWt1cSt0VTkybVF2RFpnNzNCMEcrTmhyMlQyRzZN
YmNMcUl3amcxUVl0QlpXSjgzdFoKK3hNTUVmaXdlSExGODVaOW9oYXZBZ3hKbEtHN1ltdlpPNzlL
a0ZwbWpWMlc1Q1ZSbTBlWU1QbnpteE5Db2FZcW8KK0RMbDB6c0g2S1pPTFBLdS9mWDRlRFg5WHBB
UDFmODNoV0IxVUZCbUhLTjhDQXdFQUFhTlFNRTR3SFFZRFZSME8KK0JCWUVGREh2NVpRMUJkbWh6
VHNEVUVvWTU1RVh5VWRLTUI4R0ExVWRJd1FZTUJhQUZESHY1WlExQmRtaHpUc0QKK1VFb1k1NUVY
eVVkS01Bd0dBMVVkRXdRRk1BTUJBZjh3RFFZSktvWklodmNOQVFFRkJRQURnWUVBaDNxTUJ4N3YK
K2pTb2RNZjNPeVRxVExFN2RlTG5tbkNlQlZwZ3p4UlpFb2l6Y0dxWWNqaXFPMjdpNU41WjZLVlFz
bklUbkxpeUMKK21VdHVSNUtuRjY5dVRLVXc0bS91Z1plNXdoamlnNU1xMmw0MTBLVks2RWVHNHRk
TGxmWFIrd2k0VTVLNEtqUDYKK3A0bmNoUVVYTGEyemNiSm4rVkJleEpuNi85d2RocitEVUdZPQor
LS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXQyR3RrL3Jlc291cmNlcy90ZXN0LWtleS5wZW0gYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvcmVzb3VyY2VzL3Rlc3Qta2V5LnBlbQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDM2MjIyCi0tLSAvZGV2L251bGwKKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL3Jlc291cmNlcy90ZXN0LWtleS5wZW0K
QEAgLTAsMCArMSwxNiBAQAorLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCitNSUlDZHdJQkFE
QU5CZ2txaGtpRzl3MEJBUUVGQUFTQ0FtRXdnZ0pkQWdFQUFvR0JBTkUxTXprTVJ3U0NndzlwCitw
THF2clZQZHBrTHcyWU85d2RCdmpZYTlrOWh1akczQzZpTUk0TlVHTFFXVmlmTjdXY1REQkg0c0ho
eXhmT1dmCithSVdyd0lNU1pTaHUySnIyVHUvU3BCYVpvMWRsdVFsVVp0SG1ERDU4NXNUUXFHbUtx
QXk1ZE03QitpbVRpenlyCit2MzErSGcxL1Y2UUQ5WC9ONFZnZFZCUVpoeWpmQWdNQkFBRUNnWUIy
UXdPVXNSc0lNcHJSd0o5dEpOZnZPN0c3Cit6NWkxL3pPcmx4UEM0akhNUEJuSUJsSUN3Z2NPaExJ
NG9PTGRyNUg4UjEybjBWcW9UN0RSd1AzOTZpd2xKaXBGCitpTzFoZURNbi84ejhMUEd3a0NLLytj
azA0ck1Ea3N4V0lkTXdZS0JYdDlhaG5KL3hSTHpRMS8zQUppQUdub2U1CisvUUxYUXdlb2ZkNG1t
ZnNqS1FKQkFPMkN3VDd1TVA2bk1qWGd0Vk1KcTVRUDhVYmVDUzFzRU9QSkpiSHVEeEpCCisvSGVQ
UUhCanE0a3pHNkNMNG9PN1QrNWZEdjRnK2ZJSUh6dVhlclowaW1zQ1FRRGhmbWlUSWM5T3VjRUlm
ZzYvCittczBKaUtTbVdjK3FvaU9DdHJJTHVRdkZvTndKUmNpUUFOcWVKczZ3cGFEdmV2U1V2QkxH
ZkcvN2IzSHZhRTVYCitpcUJkQWtCRVFJdnAycWNIdHVKTjYwb1FGN3BQclJrbnhVeWIyZThzbGpR
WDRwSkFLK2d5TDE5VUxNQXhpQmRMCitWb2Q4VllxTnRKRnBZKzZQcDlmWjF4anpiNkFMQWtFQTRK
enJEQXcwbFFYQSszV2R1VXc0aXhPYWRyMmxkeUcwCiszNktlYmNEd3NmWk8xOG0wUTRVbVB6MEd5
N3pnTjB3eHp1b2NoYXcwVzYraVBVaVlLT2xFWFFKQkFNV1FyUGx1Citycmlub1pTMmY4ZG9KOUJO
TlVhK1JOcE11ZzZVWGM1NXFvVUpseWlYRWgrdHU0QWFNT3R4dUdJeUMwc0FjdXc2CitYZEFQVlBY
S2Q3TW5lNzA9CistLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvcmVzb3VyY2VzL3dlYmtpdDJndGstdGVzdHMu
Z3Jlc291cmNlLnhtbCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9yZXNv
dXJjZXMvd2Via2l0Mmd0ay10ZXN0cy5ncmVzb3VyY2UueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmIzODg2ODQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvcmVzb3VyY2VzL3dlYmtpdDJndGstdGVzdHMuZ3Jlc291
cmNlLnhtbApAQCAtMCwwICsxLDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVU
Ri04Ij8+Cis8Z3Jlc291cmNlcz4KKyAgPGdyZXNvdXJjZSBwcmVmaXg9Ii9vcmcvd2Via2l0L3dl
YmtpdDJndGsvdGVzdHMvIj4KKyAgICA8ZmlsZSBhbGlhcz0ibGluay10aXRsZS5qcyI+VG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL3Jlc291cmNlcy9saW5rLXRpdGxlLmpzPC9m
aWxlPgorICA8L2dyZXNvdXJjZT4KKzwvZ3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Jlc291cmNlcy9ibGFuay5pY28gYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9yZXNvdXJjZXMvYmxhbmsuaWNvCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmVhODQ4Yjk5MTZlNTkwODQ0MTNmYzFlN2EwOTBkZWJmNWY0OTE0ZGIKR0lUIGJpbmFyeSBw
YXRjaApsaXRlcmFsIDE5OApwY21aUXpVPDUofDBWWGlMZnF7V1I0MlUmPVNPQUM+ZkVYbD8zO2g1
OEFEMHdlI1F9UlkxVmpKOwoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvcmVzb3VyY2VzL3Rlc3QuaHRtbCBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Jlc291cmNlcy90ZXN0Lmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThmN2Q0ZgotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Jlc291cmNlcy90ZXN0Lmh0
bWwKQEAgLTAsMCArMSw2IEBACis8aHRtbD4KKzxoZWFkPjx0aXRsZT50ZXN0PC90aXRsZT48L2hl
YWQ+Cis8Ym9keT50ZXN0PC9ib2R5PgorPC9odG1sPj48L2hlYWQ+Cis8Ym9keT50ZXN0PC9ib2R5
PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRH
dGsvcmVzb3VyY2VzL3Rlc3Qub2dnIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRH
dGsvcmVzb3VyY2VzL3Rlc3Qub2dnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdmM2EzYjljNWQ2NDdjNzJhMTRkM2I0
OTZjYzYyNmQ0MTJmOGIwMGYKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDMwMTMxCnpjbWVGWmNV
Vil8X0F0Q3A4WCpLc0FpKz57TE1SM1pQTilLd05rUzRzSDkmJFBtUHRZfUd6RyptaihTNWlndW5t
LQp6UXEmMmQyb1c0V3omPHgxQVNmYjg1JGorYlklQENKSVE1UzJMRmVCMGUpcyE1QDklcV8tfUMr
Vj9xX0c4VURuP0YKej57WlRNZCEybzxacClUdmZCPTdtUjVDZXBBdURFTj0lSjwxJlRXfkJyMG9r
ODJ5V1pMMXI4WT5mS05sfjdKQnxHCnpFY0FybjVfakwwSEFJaGh7fUdUTU1wXjtgTlJyWiglaHpS
WXB7NkQmViYwRVc0V0BjQW5FfWlkJXolYUFBb0tAZAp6UzU4bjIxaDg8OFhCYyUqSENgJFBmQj1C
WiQ8Xlh1Vno2c2RNTHFxcT5JJVVeWmpmMTZUflJubGlQTCV4e1dHRVoKeiNGR0kpMFR0Yn1xflM/
JEA+c3dZJUNlRzdUfGlRVnwxcWtHQ1VQI293RXJpVXhVSjNJJV8mPlFUJUVEenYxb1hxCnpmRipG
cUNxKnFKM2JqSzQxeF5td1hBVjBZSkRpRGdZdGlONHlvUlp7Vk9+IWc0QEx3JlpEfVk4ZGA5bWM9
YV9rUAp6VWs/Zk1vUXtiKmFSSVl3QEFrMlBaeDg+S243Jl5KNn19ZV4jd01QPyE3ZEUxYzVTWkNn
b3BhREVHa2dKJUxIcjcKek5XcTw/RTFtWE5DIUUmKHo9KlcrbyQlJkdpXjljbCpzKkUtJlYoQn5j
aWg7eUZTYV49IXw4cG9yfUg8PT01UDhyCnpVcnM2YkVCPjxZbzFZaXJgPXdKTXBtUGtVZGchWEIr
M0Z0ej0jaEJeWjNxeSpmRCk9e0luQX1hQS1GailgOXhBKAp6dWt2X3IrTGJRR2xgaX55NUNGai0z
cWhBdSt4LThFaUxxNCl8OXhhQmh1cmBSI150MzlgJTQqNHllT3dqbkdCUW4KejcjOz5OTzw3VGwh
QXpnRStrR3g9VWpAZ3RTPV5DfHUmWnl2N1g2YjUzdUZnPzwhTHtkVkx0KzZCZyRoayh8NyYkCnop
aTxfPi0rKW9FZlJYPW0kYlFjK0BJb0FwQnZ2Sj51LT5LZV9oP2JVISYyKDhMSEd8ZCEycyZ8TjdV
TiErOD9oNQp6U2t5ayZ3VVgqNGB3QiZNJWcoZWAqUyk3Oz5YXisjbjNrQFdZWCleUzxGKHR6ZzdM
TFlBOTl+cil8c0BvVVdlOyEKenpDQ08pV0Z2PitsQ0lhOXdCRDQhZVBoUktwUn1BSSFNVmJVeEBB
M1FMPzZjY2khRTk9QTBGIXF4RFdSenlqN1FTCnojJmk+JGAhKVhYY1VNZ3A+aSZ+YFNUTm4+dnlg
RERJbjtlNjd6TjNwKzJQPlF0Uz5BTT5PNjtDODwhVEJASXpYMgp6Zzs2JWtuekN9PHViY2AlOV5w
TH58MSl7ZCR7KUQ2djBVU0puU09IQT5rNEJiWH1kVFVfYEtzSEFxZWpZYjF9bWcKej1IbFg+Q3I3
dVIyb1IoK15+Xn0hbjx9RDBUJD9eZjZpaWZWZD9fMWFeSWt7X3N4dlJVOSlxUmctd0Y1MT1eQW0j
CnojSnxPQnVrOWwobyM4bSk8cV8/QFN9WVE7LTxjTUJYdmdoU2BJfX5VZH47KnBII2RxdVUwbT49
alApPGMwa0Z7SQp6eV9kLWZoMVQ9WjtvSnowPT80UDtRKnRzJG0mKXUlJUE3KkdvV2lkJnVLd1Ym
P25qPnFEXyoyZWNyPHlfMWJONCMKemJ3YWU/cmIqdn5OcFpzVCZWLXgyMl4mdUJpfHplT1VfT1k9
SCNjX3RvOCZCcjJyWiFHcGBhWX56YT5YVUZMfmYhCno7dXVgKzZrRzF7Uz1FLXArU1p6KlBoMGk0
fEJ4Snw9Mio0bm18RjkjeGBiWD5sfmg9M0lIT08hZUIkfXB8MkY8aAp6YUBKLSMhNFp9bVVaJkgo
TnNpSWVKX3dla0U9S3J8QUooe2YwIUM7U1p9R25xMDAzaHRLSkApX0JyP2lsST84dUMKeiUwbnoj
e2VQQWl4T0xobWU5e0wtWSRYNlQwNmMxSnA0d3chc1ZFSTdXR2tgMzFOTVUoMURfc2wqcit7Rj5j
fGclCno9QDMwaUs9bzlRMmpgUWY5IVFneVkhPyszeDVvP0U5PSRfUjR2JCsqO0t2Pm8pWXx9eU9P
U215KG1vVWtPV3J+Vgp6byZAMH09JklGJXd0JDBpIWlRekducXxmTlEyZHt6QEkqZTVDXi1IIzNf
UV88MiU3TnVZYzY7ZXFjQE1gMThiODEKemRINjVwaXU4cm57bzduRHBLejhhe0NfXnZ7fmg3flYm
SzJVMEw8YyQxXmx6LSlIfUUlUlE/YitAUV90YjRTd2FMCnppaT5APFlQVzVlKXR0bjcpdUxMSCQk
dkAqdFlDbGUqfVpodHFHcj1scEc4TWF1SGAyRSVNdHxDJil8bG1GdEF7dQp6O29IN3tALT0pVHVm
blhGTygqaF81dndOaWxLT3EqaFg0QkpRfjs8VDZRQlpDbXMkVjFydmB4fjBSSDlpdjlOdDEKekN7
S1daRGsxaSQyPnw1QHBEcTJiaHh6fHJgeVVmUkRtbmxNXmIrZklgendmJnhMOCY+ISVQK24halpk
ZVN0TXV5Cno3X280N2MwU0o1Q1VsPjhYRnghTXhwZE4lPnBxYz57SHZPaF51cm05JmBFQXQwJkR+
byh0T303QCN3ZG9ISmVgaAp6NW5lWjRxZmJKPj5JRnRTZEk5WnokYEZReVAmcGd8czd9Q20tQG9l
ZFhMYEJAd3gwfV9HWjxIWDxWS1JocXM1eUoKekooTl5eVGQxZWtIWEZfXmhiT3hCVVBaeWlvd0R7
eylqcmBRXyRkck9qVztjPmVOd25FZzI4YVk0MkdRYTM1T3dYCnpwIUxleT0yaW8mTm0lYXpyKn57
eHRYYC15en1mfHwwM19hWXFjVEMyMW91MDhmYEpyJERCSWBeaEclQ194TCpPVgp6MGQ9ITdBcj4+
WVEwaWc7RmxVNFMpcmJ1b1kzYWgrZ2BhKX1OVlopeHBvViF0RC1aRSghcEIqMWFQeyZxaj0mKjQK
ekQkMzJaM0NENEJ1OGQqfW5pYHxMTE9oelBxUjxZTjxzcSVxIzs3UClHKkIoXmhrcGBtZW5BQHdg
flh7ZmFUU1d1CnpmTnp+UkEpWmVUWj98LTRxUUtAJkQ9QldsIztHWHhnemU7cmtkYlAqWmRwQDI0
MHJmb1IzS2J1MFVJMXlGaTJ4WAp6NmxlYk1jRyYobjApcyQrXiNSK08pQ2lgZj1zbWoweiZOKSt1
QXxGZmJPKUM9ZXxCXmtZX30kdEgtNHo4VTNLaioKej8wPElqRkMxclhmfm0yOURDYTgrRy1APiVh
QnlpN01wWFdTeT15USRAOSRsfXxCVzU7K1k4OGxlJTEpJWVNZkBMCno9Pl8lOEZhdXkrSXNrNFJA
KlF+eF5fQG1vKElGUH1XdTdQMjZ9R3VCNHZocWt6JXtAMHxIPU40M2h0dkt7SXheegp6KTVgektX
I0ltTypZZHlqRmFMayRXfkN8Wkp1IWVYbVhCbmA8YHNMbElVT09GVT40aFVTcHV2bk9tKCl9Ykth
PzwKekpTMnE3KEZWfCtFMzJmTWM4PU47K3RmSEVQNCU/QzdHUDR9U1J2SzhfQ0EwSzFsUGUhayMw
MHxYc1ZERmRHdTIxCnpRWE9FYnJOREpALVhUNDM5bFZxak0jdmVzdTUqeCpRcH1eKlpDR2VjWTQ+
JH55Z2pzWVN7bTJaPEk8b2xVI00mQQp6blcwcmdjQDJARzthcUpWYkxlTUVUJHxeJih1MD0kemJ1
WFJmUHF0QlVUfTtyWlhKQHNqQU5SaEUldW5NKmdsMl4KenRrd1IyPHhGOE92a19hJTglITUzUmxP
KDc4RiZ1fnYpPDRHaGJ7MGBSM2x8TyV4MldRZ2BIUjxfSSgyekhaTmhDCnoqfkk7YHArMnVYPk40
RDhwI2glR3hvUFN7NUJoPjc5TWJ4KWhOZzsmc1B9IWI/QGVUUUU0cEIqVEVlX3I1ZTRfbAp6aHYp
Y1VKSHJVVSFFP05DMiFYZShCIyFCYWhLaDArdUlhQV5jcGBaR3paJjMpOzkpLVdmSE1td2M7eTFA
TGdzemkKenh7IW01QUpQdkVQNEdsOzwlZzw7aVF3WDI8R3I3I0JGZ1BVNXF8dDQ3b0w4T1pYTj4+
LVh+VGUpez94IVNucCpQCnota31qcEk9ZzQyJEYtVDRnTS1fSF9fan1VamtDY2Y0bjMwNDFTPFAt
YUxBRHl0U2hFOVUrZE9YZVh4cGlyOCl8KQp6YVFEcDhkYWV6NEVhRl9Fej5uLTQwRlhwNEQ9ZGtY
b3M5P25FSX15KDtMUHcjRjdqQmM8cWkhLVUzIUBSdkxrKX4KenUre0chMzRkOD0wNHo4WDdQUWNZ
VjZIbjxIY0JXfDRebG5yWlJ1eyFOWXg7XlVAc1VScEIwPXR0eSslVUk2azxeCnpnb0VWfWF3UFVG
JGtnQmVlITtTUHVrITI7PiFMLV5TbnY9NEVDcUEkcXdPWjMoZXlQQj1VQEUtT289dVF1QVR2Rwp6
O2BgPjY7MT5We1E3V31zYE5UaFApZnlJdSVOSy0lTUZgOz1mWmw2SzdKI3RXNTFZfTJHOFgmNj4l
bSZ+eldAODEKelU5ZkJJQz1ZYHU4PlB8aiglKUA9eDk0NUt5V0RwPD8rKDF2eXhSKzM5fXk/UU4o
UGZYczlrLSMqS19UPntrQnNPCnp7U20pX3FGNiRUNXxfVG8/XjZ9fXotZkk/SjYkUUJzNllNVT0q
eTF6c1pDZEgkTVAhNkh7I0Z5Jjl6Z3NRQXJ3NAp6YWwjK0JsZS1mYlV3ejRMb0hDJERsSCszWUtn
ZXZeQn1QYyEhOVR5cFRDTk9xdSs1JTNjYHdBSj00bG4od0dyaEAKemFkZXdPQCR2VVp3YUdSLWlw
WGl9PVhiQlR5K0xMXntnSFItKnhSVzckZmNXJWRiI0tCYzA3cH0jdjl+Ylcoe0VhCnplKjBZZWZh
VEVXYHFSK1kwVDBjKXpRI1gyYFBOekI0SnUwKGIlWm1zMStBKSZ7LUUmKHtKLW9KcjtQV31FfXYr
Nwp6PkJVVmptfj1eOGBCT1FFSWshOHA/akVTMDlEfWt5UFQtPGJJQElsdldyeSRIYmctP3A3UztE
e3t8RkVHTm8+MjcKeksxSit7MEApdShQfDcxRSQweD9SV3JrTGNNKmdAWU5aZndDYU1AOHJaWk0l
RUl6e1AzYj0+VnljJn0mVHd5ZkFaCnpYVFV0OG4qUTJmelcqMzhYWFUmKjF0MG1geH0/fnhDRlgh
KHkwQUNMSzt7a3Y2X3NfbU0zI1AkXjRzTHJRdUw2PAp6VDxXNGNrbGFrOHZLTihGRF9na3R4cGVm
OWpieDV1KnQjaU1WTlo5UiQ7JF9jMj9jTCFnQGJAQVFYaXZHNTB4OHMKejBTb0smNjZEfCFoWTR3
SnBHcWE9UCl9NHQlfkQrXk4+XmBBdSMkd3dwZyEqa3k7JFp7PFBRbT8tY0R0WGw+PVRhCnpMeGA/
QXtoXyZMPD1OIXt0aSRePFZsJnEteDZoN1hzfiUycVp8YGNYSFJiWEhGc05pQlZVYUVxUy17ST48
Mz96bQp6SEY8PUQ+XyoxLVgmP3J1QSVaXyFZM2g7TlBaMDheYWxrdExeRD44SXlfKGdCdTxsbHxQ
ZURRPSlCbzBgb24jY20KejFMTjJuc3NkdH1RU2cqRFNReEVlVHVpVWJ3cF5NNjBjOSF4WXBAa2tX
RXMtdnpmUFNFYVdTQ2I9VkYlKUQtdUlZCnp2JV98TncwLW5lb0ExPTxHMFJXeHk2JElNNWVPQEgt
MW5ZWGArWUlgSVdGcXRTNjZFeUJBcjh1Myp7OV8wcj5Mdgp6RG91NmVVfXN+TyRIXik9P3ZfRjRj
fHJsOUlOOTc1SmEzZD4pM05qK2QoZzdrPGEpNlMoPWQ0NUwpb2NiRH59KTkKem9zKSQhPz1QKUFv
NjxGR0BRRVFKJUIkKmBra05eaUQqK3FGQDc2QjxpQS1fSF5ERSlWeGRUb1FWdkR2OVUyJWlyCnpA
Rko8SFAyOW4tO056djY4Z2ZxaGxKfWk+KFMzSH5aalc8ZXUxViRUZzdMZm97Mms9KF5iQE9CVE9v
JEJtSzFFeAp6ZUJ+SGtHdzEpfXAzTExgMj9hZWFOVHN9YmIpRmZnNmJpZiZFPWZXRDVPYy1ARFFn
RmtkX0shZTwqOT5DcUVgVm0Kem5uajBuJHdwYjBPfEReVFImNXxeJjFIYzRfNGp9S29BblY0Rzcj
Rig/RlF5aShFZEVIY3VVeT5CbGYoSzBIcUtqCno4OEx1cjNBcE17UXYzLUQyfUIzVFpBSilvbig5
dkN6PCM9eFBvc0xYM2tLJGVscH1uajQ4Yzc2YEB4UlZudipOYAp6SzV1XiN3QmdoMiEkKFVGR2pt
bjV0PTR2KTtsQU89RFQtfiUzckVAYF57MFJGeHVeS0hmXmMlWnVYZ2xNZXA2bkoKek1wOWxRI25y
NjEofigwcGdpPTs2WElmeCplWVN5am1GeVQ5TzVlISNlQ2Q1aVZ8UnFeTE5RdkRaclU/Rld6OGIt
Cnoyek1hKWR7KzVSVH1kZT11ZztRc29DWjJJNmxHQVBzfVcxSll9fWg7IX1GdnlpVEJ9PkNQezA3
I1JTJWFjYVVudQp6VWREfiNMfCppSTZrayhZK2NRfE04eWJqMyslQl99I0pMXk1wV3pnIW5+c3JG
P1BfO145ST5xNz0qeW94ayF1SnEKek47VzhQMFUzfXJncUdTcT0jdH1WMyoxemEmRlNsSTN9YyND
Y0tpMHVLcFBNcyRxN3xZM0k+JTBJa1JYOWhKWE14CnokPlQoYk85dFp6Nl52YVVIKkFpJVRIbXN5
PE5KOX5qXjJzRkpSZX1saiEwTnNHYy1ORihgZTRgcntANEFPWGJ5cAp6UG9kalVeV0x6aE48UGBF
cyhvT0NXPktuNT49OGcwWVgqK2V2aiZrenYrPnQ2Xnk2ZGBFYHI/bmFPSHxAZEdXcXEKek5gOUx1
WHgkTipGPkMqRnpnTzsoIS1tUjEjTXxXQmxBTFI9YDVyeEF5cyshb3smNFZLdmdHQkVIbWI5YWY0
bk5ECnpFcGJDaHVoZGFiY15oe2JTMEZ0ZE9eKyhGQ3tpY30jXlZMVVhLOVIoQGpPQ0t0MG1YNkwp
azhjXjdeRGBLQExfNQp6NSgkanJvP0I4dXJ8TGt+STdxWWhhcFhNY25POXxJaHQ9ZmQ0fnB5bmZ3
SVdQdVh4UUMrZmY4YjktbFltRmxPYGQKek8tdzQ0ZjNSekNEakNeZytuVnx9LXhoM1B2UXt0Mkle
fFRxY3p3QTc7V2BzNnZVKzAteVpEWG0/XkR3ISF9XjY8CnpGWSoyS2p0aVREd3h7QnM3YmZYX09f
RkApJTYjeTFONVpjNGdJVEJJanU4LXYmNjU9UnhVYFdRY3s1ST81K1FSWgp6RzYpcyN1cGYoRlNH
cS1yQSpBRldZOUl3RWtgMnNySzd5eitxdUxANCZCcjZmIXNrQG5PcWhycFcoTVVtUVB+b3gKemwj
PCM4Zmc/YUNBIX5KPlF5aVlRU258YH5IYV5raWAhNytON3kpNHBxTjtRTmJPIT5rbmVLQm4rZCZS
ZDdGK09zCnpsd0hoRzwtZXt9clNTVGRUWWwtUztxUzJjeVY7QSRyd1RrbWFtOzBRY0pgS0NeRTVU
RjUzfSt7JEJJJHVpRD5oeAp6P2tNZmwrNCFQQ0xBaUdJJSF8ekR3MTUjb3RQWWJ7WWY1e0F0Iz9D
UFBlcjg5P2kyKXRHVy1OKzJUcWp3WCYwaXQKektSRCM2Jl5Pc2kyQ05XMU9IJlcrTERWV0xsZ3d6
OEArZWskbmIxMXAmTFpPNHIocktAZ1FHKShZfTl1VnFRPkIxCnp6fSM3eVJ2TlJjZCtte0VFLTUm
ISRGbzkpO1owezFvOHtKN0ZmMWJyNTtFaDFzaCVCQ19IcCQ+WnZ9NE0rczZyRwp6Rk0wXj5EU3o3
UlA4UmwwY0hlaEJmOFhjeGhBbGElbHd6P0g1RWJxJk4wcW10dVBPSmY+TTVwTFhTRU05SHlmfXoK
eip9PUpJRHFARCE1RWpUJDlhTDY1bCNUKXY8UDFiQDVmaXhXdX5lTDVRe19lQHU0QnRSbTVTV3BM
QiN2MTVMSSFlCnoxJHNYeG9vPEZsOUxMSVRCTV5GOVBhVHJiOzdjVSs2ZDE2e1hLcmNPK2M+WH5X
YG5DP3d5R2tLPU4xRk5nSDRqOQp6YmtaMTw0OVEzZipSN0ImPihubCtfRH1BWlV0WFBnKntQTy1v
QXdzYnZONiNLaWlDQSUoKzF4Y1pIQ1ArSmVlPUcKekZZSHBnUEh0OUVOLX4tfkxSIVU+OHVKPGE8
ZnUkalZiSFRaWE5BflghJkE8M2h7V1RCREprLXNjP1pLc2hEfTNnCnpZTX45JXhzSXd5dDBUbUJh
QjBhYyFIQmNMZ3lJR2s+cm19eTtsJjxJWChCPHxJTXA0YFF0IUFYRlQtdSZ3bDJHbAp6dDV0YztS
YUJ0SHY2XlF8N2NVZTNlOT82PiM3dnN1czU5ZChzd0V1TzJZZjZ0XkApcUlHQUZ3eGI+PWxLJiM0
e3EKei1hSGd1bGx0Xm4hVTNQSGVlc3MlVT1UbD13JWZEZyZld1lETnUzKS1aJWU7XlZnJCo3PTd4
Y2xHJFNzYGlyYD4tCno+PnoqRlpqaG9ndCQ7QTFKamUjbSMjYj0mZ0dfIz1zclYrZF5tJUstYVZl
WUlJRyNRQ042P347KGdFRmtKdDc0Ywp6PU5ZKHoxSTEpZkczSVZTaWhAVztCYVVmWmpMbEo3NTN+
ZkxMMWc7PWp0JihNXmtZOHFeM2hSTnQzVno/cUpAQTUKejBGNSZYQX19P0FKUEh8aTMrVzlldEJ8
WiFgYDFfWUBCbFg/WFpEdW9mbyZgODxoUUYmWmZ7bSN0Y3JlKmVfMEY+CnpKQ2xuO15tNF5QKj5P
KkllSUdUcXNufUNHPG5xazl1b2EhUFR5Z253YSNQUzA+eGF1WkZOTnwqWDdaKVBqc3ErPQp6UE9o
blFze0dAZHNManN0Y088YSh6ZyZZWDhPfVNnKjtkOyNPcFN+fDlZKXBRTjtXZjFka09UbWM9cCpC
NCpnLXYKenl1MVMqLUFadDFQWW1qYys5aztFKFQ8b1JtZyNke2tCeE5XOUdqRDwyK1YzTi1CeXI5
VFkoKGJIc15XVmBBKWpLCnpiVmA5XjJjND5xWD57Wm50b0ptJnk7QVhqRFVTfmBvTWgtfiRyUHtQ
IVNiI0ZrSXBSekVYezBpJC1kTzlYVHM9WAp6OHxRU2swTzlHSG5GYzZWOUN3VztzYlYlNU4wcTx+
N25WYW52YXJBYiVwJE8mSzJ7bmFjfkkzYyVoYWp9R14jQzwKeiVPI2wwaD4jIWZ0OXBlaV93M1M3
TzBzKGIoWnNmQTlNcmYyUHkkdmVRKlg7dVYraUFOaEpxKEhtdzlrM1Z0b0QoCno2WGBpeDFWOzVM
az1kfllmWCkmR3hWS19wSWlpZDtGcmVReXRWTUQ7PXpQbEdwTX50OzJuZUBkeShFUDkkY2FaSAp6
b190NSY8K0NYZnZENDVweXstN19Qeig4PylRYjUwcTltQFVeQzA4V3sqRVMobGVjNz44ciRtaDtm
YWI/PD1VYnMKemNqZHJJVGFzfEZCWGdSUGhIWj5iaiZpWDRqK0pDSnIpeTU9Syh8YXFYKWlnSFUr
USg2dzZQN2NzSjhCKWlJMEp3CnpRUkM1WlJuTjh9NVQjQUd1dGU8NWluflZ7VSE2RldVMSM+QyVv
VjVOTXgkLUdqVjdJJnk9PnFgYT9HI1JKUENmMQp6d3N2czs/YUFLQFp2U25gQzhwemluOGJiWHI3
ZD9kJTtkcndQQV9gaztuMzRGOGBAMDBvdzlnVHJ4d3FGWVVucW8KeiFQSmRaPD56XilnNjxyMHo5
VDQ+TGx3NFZ7a2NrfGQqJmlWRiVaJVh0UFBRPksza0c5a2t3cDl6KFFORkJQdDFtCnoqRiMyKWlh
M0c5IyNvWGBaNE4qWmd5LVJyZUZ2UExTcUAxJGRHNEhJQHNTKWdaO0xCezRKMXtQRF4rSSNEVUNF
Vwp6aDZVZlBxTD5DVzclaGhreEl7Uy0zcURxNUdxbmhyKEFafk5CP01wfHotcmxOMHkrdiZ6cHlI
RDtqPChKKjV4QzEKejlmWip9Zno3dmtRbD9YOTxpNzxScHlhOX5jTHFEd25RdkhCUCRVanR4cEdv
eVNOTyM+aDExbHtxVn1kcjV1QEUlCnorM1JlbVFoMGQyV1AweDQ4djhqLTFNWTsqcDZraVF3QSh6
WURhZnJkQjM3RShnazgzWF85YHtiTSNiV1JISWoyTQp6WkA/PWo+cWNAPDMtWVZqMFpWR0tOJGdv
aCZxcUZvWGJ0WGY+OHJrcyN9RHA/bU9WWX51M35iIWhZRk4keD1WOU8KejxOTUVrLSFiJSVKT3Ft
UDdzNl8xa0RUbzV6PTwlU0JSPHhPQFdBbEFzdU53aEJmQzVUQWBDYi1obyVVYzhYYWh0Cno/PmMp
az5GLXlZVVV4QUw0Km9lJXd1QXl1KVpIaWk3UFheMEZ4aTZYaVI9OTF4RnVAJEJ0Y3s8TUZSalNB
IS0oKAp6cTV4KXwoYjx1LW9Db2UmNlMkfFc4U3xUSDJIblJqVWBrYERVXm13cjk3MExYTT5JPy0y
SzNRYCpwTlpsSTEqP2UKek0tN15ZR1k5LWREcnBXZHhIK1pjUypRbT1kTmpwZzJuO20jSz9zNV57
TUhxS3VkIUpwJFRHKyVfZiU/M1hwciYjCnpuNW5GJVg0WEV5Y0pkRzloMW1KRlo8Wl89TEBANUJY
Rzl3YzhPZD05K2glan5mK091eGB8akNXTWE1IS0tfDZENQp6VEE0VVpKVjQ5Ujw8SzdYe2A5NzdQ
MkZLfUZgbSVGQkdWPztXTUotS1JHUEBueWtoRHRiaFlQcUpybyY2WmVhTE4KemxAc1JPU09jYEJX
JkZFbF8+fi01SXgmMHxiTnVCQUI5ZjB2Ul9AQnpuZkhMa1hWJnRAYXNrblZaQ2ZpdUdCblYpCnpy
TXt+OSVzYTcxT2Jhcl4qQiNKfVI5Q2VffExHcShlUT1RYkNQNWV+I3J5TzdMdk8xYEA+ZFUxaHEx
UWheNjc4OAp6X08/V3JKMCFEUzUoVkhnOVZQZ0ZWXjh6bFJea2BPWlpEPlB7b0AqdXJPdj56P0df
YHxJTWZzZSRXPlBIMDgydj4KejNAOEYzJEM7KGRNPTxBNnpAMTdySDFyWHNfIypPJWg5PEc/emxj
RSVOWlc5O2QxfCpBOztgcDFhRkxsNHNUK1kxCno+bEtyUFlFdj5XUyNFJFh3SEM3KUIqcXFtcyVf
JjtDPk5VPGgpZUg0Kn19ZTUpKjQld19YU3hhNFpFKntNdGpUZgp6SH1weSRhUVk8Sz0rZn1fPkU4
PiFPIWg2UnpCclFBXntZcWAjJHZxPy00SVo7QyNCNChaZUlPOCY1PFFMejI3UVEKej5aSHlBaWRt
Vl5USCZkKzF3ailqY1c1Jmp7ZlAtb3I2ejw+ZzBRKmJaOzUqYD0qT1hKcD13RSlMYCRxIVZCMSk2
CnpPYExPPD9mcTMtcXQhTEJCMTxQdiNTUlJfZFUme28ofkczRil3YCpMb3QyeDhIRXVFPVlyYjVq
SXtRPUFRX3txUAp6KEkmMWJEWFFIbEF2fnNUSXlZWDBhUXVBeD01NT15KXRqYXx7e0dQPmZBOVdU
Z09tT2VLRF9Ba1lGelF6XlVJWT4KektIV0syUTJ6UytPbyFmWnVqKUo8PUpebjJjUl9ZeFVxciUm
TGM3WlpRdH02PDQocVFJQWA0RVAxXjxaYHU2blVgCnohOF9HRUhTOEl3ZHtfMV58SmBUcl9RTzdz
PzAyNm97aDlNTiNrTS1UQDtqSGxwVV9fcUp5S2FgdiQ3PFh1bDNmZAp6P2lANntiNXB+UEJeNFV3
WjtkdEs+e2ZhQzFAYiE3XkFaUCZTV0c4b1FESUd0cXxvQmlvTipWS0pXPU96NipXKn4KejZjTy1y
bHVaZiokYmZgNCZpaTIxN0dAWjZ6QSpKNEd9VCg0M0g4Q3FNKH11VW5NPyhIYW0yNiUxKjtBaEw+
VytoCno/SnpAQnFkPnpoYVh+cEtKTGdyQ0hmNmlMd3omM3x7cis5dUQ9an5FIU44aEJvSEMmOWx4
ZH05KyF4ODYremtocwp6dTlMUT5tTnJTcWotakVFVlNFPHhEeysqc0cqV0Q4SD9iU25qejBLK3oj
cTJtXnt9VHwlQFdIXkElVDUmZFZZZloKejdzSDBEPjdKQGk9bGspMnVRfSZAQV9jXzxjaD91dnRT
bkp4diYmbT00RFBLZ0tqZ3xHczgtNS1SWlVVWDNtQ294CnpKZFl9RzsjaD8+eFlybDw4fW0hMWst
anxOcVpWeCZpPGlCK0l5eEZfYnZhSit2TEgmPFBkPDwpcyR0Q05CRn4tZAp6WlZ8TjsjYVJ0V3d6
fnhQTHE3N0p6MUJvMmcoUkRWUnwjSns4OVZkR3FrNjNiYnsjMnpxe3ZjWSF5MnpfPllMeEYKekJE
JmBUZEheIXBURz1yU2lkWXo9JTVlbnQ/RnI0UE4mPD8oWE9VNy1CSHI0U1phTWltdVV0P1ZHaW5a
b3QoQzBqCnpeX19LUyFUTXBiWUI0KEJZJU1QbE4qQTs3YGUqZyQ8fWo+R0pteUx8IVJzSiN1XnBZ
VmRhaHpjOHshazdOO0hTPAp6Qzt5NU8kRTA5TENaYm5OSTN4dWxXcVlAe1hBYFFeTXR7NCVKPl9F
WnkmY3R2P2Foe1B1KUJnPmd6VGpvQj4yZyEKekJYMUxQPm5qOD0yNWJ1X05+Y2VAK2V0Y1VUTU5h
Xl4tKEc5TDJiTCE3O097Nk1MUjFrKE09YlhZe2RRUkRpTWVqCnpeMiskRVdRWnw7cHAkK1hXNXk4
I2BLUlU5LSp3JXt0djZrZD8mIWthd2NeSk04KjN4X2J+R0YjeFhfMkUrPWYkPwp6Xno/YGI2VEBp
dEpiUnVXN2N5RUF1cTR8TG4lZCEkJnNwQm1jNk0+K2hLPTB7UjtBTzAlUTwwY0N8Zj9fOT1fSjsK
enQ+YExheiNyOGthaXcxPkBwOGNVNGhKTDJfPlk7IyNyRkd1U2V7bjl0SU1EUkUpOE1EZkgxfjAt
S15odyRKc09NCnoySDY5fVY7T0VjQWxtQ0dWVSV2bXduKFdIK1opaChxNWo9RVlKOGV8WEpjTUVe
V3crV180PVI9XiR0MV4/VGBAMAp6a01EZkZTQElESlhxRHkkO1dIOSpyV0c9cVEzN0ByMSUrenxJ
KXV1QTE9RU9CWm51bloxZEF9LVB0YlhyRmdNSWAKelVCYlFxM0ZkbDRBe3VuV3hXbWVXe15zdDI4
TFJONSlGRF5GZSVCKjRBb1JgOF9iKntUTnBhLXRAWHpyMU4wIWUzCnpnPmtSN0s7OVY+Nlo5K2BY
JFFpbWR9XjRmbFMwcSVJe0RpQjY1cSthRkdeUj5jcT1GX0dZS2ZHZ1FgPzNxUHZeaAp6aUpzb1Rt
U3hUbypIQXcpN0I4YFVofXN4NiZuTChqKXdGSzQkMCNtfCNxQztvJDcwLSNzUGdEOF48am14Zl8k
cnIKek1BJjg5N1BsZ1pAUnJeJkheYUB6VGZZR1VVekEzcTxXWXVmNTJ5QCZzK08oIzAmVFhKc1pO
dUtkRk9YdiRMVTJqCnokKm1ncSRTN3pgamRNNk1weUBIWXw1T2lGRVp2fjtAX0NrKXw2OzNtYDI3
d3VUWT19fExmPTJlSlpgJVRIOyU8VAp6XilHc1dlSC1gNTNmIV5FT0x+ay1JZilgem5gV0VZa1E3
fUxJOTJNU0lGWHZJV09oKGs2U2Zke25WTDkoTCtBfUIKeiY/RkJtT1kwMm12KFdeQ0lZemB8QHtq
Ul9nOSl1ckV7eVRUbzNrZj8zZ2RgYmczOzEzRUp5dzwxbjNCaChoZkYjCnpsOWRmdSooTkkzVGM/
MX1ZWHcxSXZxXyMyS0JkKXgkSyQ/KnludGpzOHFENHpLM2hBV1puLU1qe2AybykmUUVmVAp6ZVha
Kl5MWnpTZkFfSCpRUTE7Z1opVCpGXmk1KjlLLVgwJTJJdj87TkNaJUJEYG5AJT1VJiMtfTNtckRx
LUxlU28Kem1YP3Y4R3ApSUszUWp6VUo9YzVKTGRFdiphaUUkTSNwSEVOPGV8RD1CIzF4Tz9kY3dX
Zk1kMG8qa0sxfCVNVWVlCnpGfE1eZ3NIdUgoPyN4PTs4SVB+czB5Nk5PN31Zb2xOQ15YaFE8eXhw
YSMyKTFHdyV1KVpOPUdmRmdEY1Y1eUA4Wgp6WT5vR3BAekhBOXI5Xj4kKz5XaHtrPTRzKE8rRXJP
SDF0Q3RJZTV3QiY0YWFpKiZmJEZOeG0tTUZMQFlzSlh2S3MKemN2UDdjPkI3d3FzaTVST0BFa3xW
eEBlYnB4SHcwVDxxfiVBTDdWenEmPSYzSkhGUCFAT2R2MiNUOHdiV2cwK0YjCnpaaU4pVTghfDFM
eFhJZVNxa3c5TkBnUEt0eV4oQkIxeyNJSHQ3NmZTXitLTUgrcXtQKSRSYF49ITswKmdWMkw4MQp6
dypkVmhQMkVEfVdjVFRhTlhZPyYkXzxDPDl5K3Q3RUVubC02ZlJoMSVzX3hVNDNzSnBwbylPY2lm
azVTLUN8PmwKek8wWUt+P35tXmBYQE92WXNBRjxJRE5Pc04/YyhwWnUpYkhldG9aeDJzfG4xYWIy
MSk3PEVsSjdRa3RKdkV2fGNNCnpVcj59KD4+VTtBSWpERjszSDNnSF9TdT9+R2VobkBWaDwlVkMt
Znw8RiYhTnlyQ0JhKiVtYUoreC1NfHFDczkrJQp6bVA/a21sQXNuYjxARyk5N2NhJGppQU54UERM
WnBxcnxVJHc5QS0mQnk1aS1DPj9lK1I4RnlkQUd2YWJGaSokNCoKenF5RHlSe1h9a15wYilmWW9v
PkJ8WGV+TUdPLTlETGdxTl58N04wJW9BRy02cCoqNjhzKlNtJiRJY1VGTD42a0EqCnpQLTdvbWJz
NCQzKHRJalYtNXo+KCk2SGM9U00mOU9DSHVUaXVIUl9DaWBWczxeb1ZSYzl1YWk0P35seWdZT0F3
WQp6WUgoIWVHSXB6LSpJKXliNGBtb1ArJX5uZSV+YDZZYmVNeFpLPCMwUyFjcX5yKUVFPmxjP2xW
XkJkOWR3QkpATmQKeldOayNTeXd0Typ0cHZOPDEqO1YlJkV7JjtAPnJaK1FDMUNmPzJjQWdRT3Rs
REFkOW1AY2J3NDRBZ2x0JSlSQlFUCnprZWl5T0ctUXJWS3VGZkZZP2N8SUhaMEpDPE8hOSp1TXpV
T0xAVko0a1kjUThOT3JMIUFmdXhBUnBDeGklOT9+SAp6Wn5PKyZnP1YqR3g0KlMrXkUwVFllT0At
Njc8MDNwb0ZNaH1fRX5QanhWejA8eF83PDNGMj81JlVWb2c5SF5qXiEKem9IbEVOKiM2bFVXM2J0
LW4hKVhrYzdxNlhuPGItIy1ndnhFaz1XPjsrVUpYKW1BWVNkJU14RHB2OVlWUWdwJCswCnpLeGNv
fHVUQWB8KmklKlNOUX5HNEJAMyM5bXQ0azxwS3VlWnBlKCVRMzBzVkY/V3l+bDU3KFcmbTQ5MkB5
KStyawp6Un1CJVpqd1ArTGNLbylPQVZ9JWo5QSNSZ3daciV6LU1TR09sVEQyV1VBK0RnYVpFNUJl
KUMtS3tMRTExcSROMnoKeiplc0laMSNvOUNqbjZzI0piQ3JYRGF4VSV7dm55Vml4Q2k4aDsoa2g2
Yy1aQ1d1MnlCYnl5NiRfYFY1MzJfTztKCnpYYTx4fSQyPCNVOEchNjZBJlBMRXstUnEmTDhLRmc5
Zy0jRDBuayVHcngjaEgrSmFDPkRQOUx1O3klQG9zeHU8NQp6NHI5d2c0WE5WdDlFYG1WKjUjTDYj
eVVrbjExUWNBTFdLZTJASF5yKWJrWSNDZGNvNSV5YjxNUSFWMjZvP1JGVXAKemFiSjlXI0JhLXZK
Y0MmQ3JOd1B+MT5SKytuXzxRdmplST4rcV40OSt7QkEhaHhGQTItUjItV29VbFFhby1ROFc9Cno1
Kk9RP3pkO2RsRzsrIzMjU2xTPWEtNWpKVnRxUkxsTj1aNCV+Oys3N09SXzB4MGUrWVVtRHFxVHVR
Snt2OVpqYAp6PCo2cH1ORDN5cnktfm40WDlRMUFkbkUxQkt6Izs4ZHFWTkR5am8tVCglQCV3JXlR
Rlk9T0FmUmBzYTxDJV9CYHgKeiNMK2RLTVJ7Q3pwQm5BVDc0fFYqYFF+RmBfcVkzKU0kTENBSVQq
SVZrPCF0KkhZM00wQE4lfE9rVjE4Q0N1WmZQCnpONllVfHlMSlhfYV8+UyhUakpXQXt2TlRkNiF+
LWRrTDxzNVVKVDlRYj1qVDlKYjkoQU80V3oqIVlCc0VoNypkOAp6cDBoWSQzXyVmODQmeylyMmF6
KSYlcTd7ezVzdTUpJk43UzR5YGUyKUJzM2ZxTnVFJmxEVn4hWXNiVW50NCV8VEcKeiZ7WkpOOTN5
c0FwditaTkFCTD5WLWlVTmVyIX1abFVZQmlFcyozO3dHOGE1ZDZPaTFPT0pMdiV6NHF3WkZ2al88
CnpUVnglNTFBZXo2S2tiPGkpfTNnMHN7QXJZJWJ1R1BeXz1RRldoTCZKSEpuO3M2eTlyPFlJJU5r
PSQhUWlMcE8wcwp6bX55a3FXclIqX1cxTE92cnR3aTMxYGkpd1Fkej1sK3VNfFU0MTkyP2lpaXVr
ZUw7WF8lZ1ZkKnV0Sm5lV08xMzkKejB7XlZ2a3klQHI7aHN8X1lwWWk7eCZLKnJxRUVNZDttKmgr
ajRXYEgoI2w7eT5+QjBTKVU1Un1LMmsmSGBoQmBOCno0Szx+Tlpfb2VNS0B8Sl48ST5kZmI/LSMm
cW1QQDBCTTxYUSlBcSNYbkdMdVIhczQ2QC15aDBtSktnbkV0cWN7dQp6MzYkdl5CaDQzZTNGd3JQ
MjNObH5OWShQNFB1ZFMzJVZicExfe3swcDJsdUVnTmNjRzdPS2k1JU47U0J0eD1VdCsKejNRdXZq
YzA+VkBDc29OWnJqWClfbC0peClUYHw1P2dFaXZ8MEBrUGxYVkMpXitjUnAhNDlIXy1MeVJkZGBG
dWI4CnolMXd2RXcjOH55eVVgI3B2VHNJe20qeFRjPk9iPEVqP2JWdUhYTEFyTUY0M0p5RUNpLV87
Y35WaCt8PFIxWihGOQp6UGdHU2JzT3FhXj50dk83XnY+RnEmLVVAQTRQJkRIaSlYKGojRlpCd2A3
T040TCh5RiVAK0spSEJrYC0zYlNkTVIKelZIQEAmKlNIPUcyel8kTTF+VTs+JG0zdFU3dlZ2P1JT
KzI/QnZGYmQzWVNKWTRwPSF0eXs3VGB4Q0dWPTNjLW9yCnpJUDBYdHdoSHMyQ0g8WVF0eS1ge3R8
SFNocmUqUkQraCk5TExBcTtgdXYjY3clSCpPQkdDaUQhcUhnRjZyRyVONgp6ZUNpX01XKFheRzJh
Syh6JWJ3I25WZUM7PVJaZ1JtP1d3aU8/bWxiT3pWWXlqQSZDajRaLXByU3QjfVokc0RDajEKent4
ODJ8UmxlfiZvX2VtO3YocD8xMj8+clpMTm1qNT5mIUcqd3s2fEw9KzImKUNxSGFtVCQ/d2UhSXNg
fkR7WmxeCno8K2BLJWR3YDY1MmJqd2EwR0FSLWhRPjxCZ2FIRSVwKjBzI214S3o1VldJM0AlUy1A
JjlFdzh0UUxDdmwxWDUyVAp6bTdXfDw1UnVLWEkrZEVMMDZ0Q1RZQ2FsNW82KGViUlNwSDt8MkR5
ems1I057VT9DN1A4Mn1hIzdfVWN3dU5SQiUKelYlelpjdmV6cGZKO2IpNUVSNFZKOSFxbEtWRWg9
TFV3WmNabXx0fC1fOGFvK2I/Y25yNFZ2UUVRNGQrVHgxTyZ9CnooTH48N0RNPndFRTVZeDBuWnxn
KkFETFk+TzZvfXVZQUB5ISRydE5NbVJjKlA1ZUhSfW9vQmZkJWZ9WGRUZCRfJQp6MklkVn1CU2RW
ZypBdmBhZE1XRUZze1RyMV9IZGhwNll3WT9jJHk7NkxYUV9NJHhnMVcyaypPdVFpRGJ0UVNOOXAK
enQ7WEVAPj5WcEJYWWE3RDc+fXE4SjFuUHViSDR2QFpyQUdJR2wjeEFVRUMoR1JkIThQbjZJV15i
bEM4Q1Y5ZFB1CnpTc0RGdUA+Nnh8Qn13IVAtfUlgTllqKjlEWjtpUnFRK3dzSnZKSmdFYTk9PVMq
U0pOO3B0UyVVNj5TVXpDPCpwVAp6dGhxeFd0Sl5kQE1hMFVSMis9an1xKil2WlFKST04cm9ZKjM3
Yj9sd3ZmSldVZTIjX0lWe15rPWxxaitUQSlVczUKenpGQyRfPm5AbTskKldzKDxtTjtrJnhGUG9x
Z0RPYDcpfnpLNGhjbXApRG89OTdsOUZUbjttTlY5eXo4Zk1wWU96Cno8cmojP2lVSHVQRjlMU3hQ
NUMwcVk9R0E0eiopWW8rfClRZj0yeDJQYmJHa2c/VE9FRS1mWSZFPDsqNEtpT2lNTAp6ZWc0TT0k
OSRwJko0X1JFcllHKCNfZFAlRFZyaUchPkdfZm93Z1BefENMSzlVOSQ8IVVUPUh+Z1JAZ2VuPE1K
RGwKeittT1gtWDRoUnVWP0JkRFhxIzU9N0szazBUJnd+MDVRJDwtMShgYHVCVjxPaE8mQEplNCRY
Vm1KVl81fnRjYFV2CnpKTWAwTW8/RG1VXkYkdGJINT8tWHFNdD5sKkVwJkMkUG19OT9APlZ9ZVlF
fEYkRnpheXNqSmBLRjszZlhgcF5ARQp6dTdUKCNJMl89fXYkM3xkTGdpJD5QKUU9fDU1YXQlRVJW
dnRXY2UlaFdFS1h+UUp6O3U/algpMU9SWnF4U0B2Vn0KekBMeGBpLUxOTUU0aHYyVkc8Xkw1c1Ni
QUQyT3MpU3pmJWlCMXA+WmNaQV5AR3tkJm9VXl93Syg0S2JXQj9uWClVCnp5UXBgUDt5QiVLYzdE
YXY5UmsoPkBEMm5VeTQ/WUhFaDVgP1Q7Qm12SjFWYjAqZ1pmOXY2dylLJEsySlpnZ1BGbgp6Jm87
LVgjPz5ENyVmVHZna0x5X05sTUVHcUY+TlQyJW8yOEVFfUM8VUJCUVBhY0UlJDczXjh+ZTEtVGh5
JEV+e2gKelc4REUoMVoqfFFzbzg5NnotbUIpS1VYdmtJVHBySzY8Nm9DM0J0SiNZOUk7YSFnR3pT
WXJkY2lRP3FocXB2YjRlCnpRU1owdWJ1QExDUHFrX0ZQSl4jcz4oal83eWBrQSpFY3clJGFnPjti
JXo8WjklfjdYQHg/LWw0NlUjNX4jakcjZAp6Q0RSVCl2PCl+OCRFNTRRaX57TUFUMTVAKjVhKHde
TGopVXVOKGluXnp3OChZdzF1c0MzSV5vKnRkU1JZOD1KaUkKemx0eVdMJDZ7LUZYNXpWQktNUUs2
R34lRGxqPiRpUTNVVTdCOGkxNmNZfE5xV0lMfUV8djA0X2RhO3hYSz5YeiVkCnpvXjVmTGp2eT1M
JkN9azd1Q1JFUz1IbEYwdi1QTjUpem9eQT1HSVAoNHoreXZ3TGFTRk91RHBLNSN3ck4mUC1WNAp6
Yk1JcV5vbjt0XypWN09ASnsoMjNLSmFWXyFDYnVAOFI0Ri0ob0ZeKk5ISGhvR0I4eDZpc1VmYnAq
aU99a2gyVkUKejZvNncmQWQjNiRHTnttVjJiQVhEUyR4Z30+TEdRcEF2I3I3ajJWekU7aiFCUVZz
JiMrMG5vTDlqXmtMfXRncCZJCno/STdqIU50QDNeSmp5Nko4YmB1VzE8WmNpYVVBPl4zSUwrNDFx
Vm1nV0BJdkpmTFYwMHo2Z19VTXBJd2Ypb1g9dQp6ZEV8PS1gLWJTKEBVXnJxIXYxQVI/X01oX1dP
aT0hJHdtdG9qeX1tVkhMQi1VdH1OdG0oemY7dmJMKmcmWCpvJlQKenJYPmtJbyNHOVFqWj5wTGdp
R1NHKW1fdlhua0ohNFptI3JBSkI3RFM2QCtQQUR6PjlBY2pPK2ZQOGcqSjxYbnUlCnpXZHVkZ0Fg
IzFAU0x7d1QwVHdNPiQzJj5RQEdPZlY0fn1mQUlPWTJpdmY4clY5U0JVUUhqOzlDN2F3ZD0/OCRD
awp6WDtZcilsQzBXb0s1TjxKIzJUbHJOUGctZ3Y1VTl1VmctdjxsSW10Km1BZkgjRnFaOyhpZkVg
MWlyJXhkSG8tUWAKemVkbWB4SG9Ud1RCc3BITHFfXytzN3prVXNFZ3VvNjgpUnc1XkU+LWdgbHFQ
U1BLQ0RKOTV9RSo3Yk1CbmEhcilnCnpBVit+PkUjcFVleVRrcT8mQEBjcGtyP1BINkFYZH4kbFhK
MyQ8c19EVmRPZXo1S0pXWkNGYlc0ZUd1MyNGRUhrJgp6bFc3clRpWCM7ZnN8VklESVR8R3o3Jkxe
aiYlM28pRkNGRD55JXNFeklUKmN4TjxSc30lLWlUel9CaDdNWWxjQFIKenRZNkJHJEFrPDd7KVBl
Ykp5JWM2SGg8TX1ANVp7RytGaTgkbWZOQ05kMUVEYWo7bWN0eT4xQDZoKzRiMFpxNCFiCnpUYz4r
MVpkSzF7RzYoUkQqO2p0YkJXTyQwSG4rdXw2aWxfWmd3TTF8ZFFPRWQ/JGs9QkhJXnl2RGFiMXtK
QGgjdgp6V1lJeHxUdiVHITsjV09SM05iYUskJUgkeTQ+WnZuaEU9RmllMFRidUBhazJyRFViSytG
QlkmXnMraFpBWFB4REoKeis2Vzdvb2pQRnoqZ0NYbCM5QGg+RCQxV0RvWEVrazh4LS1SekVQVjRP
I2s0JCoje3x5byhpNTNpKFM/U14pVF5jCnoqYkt4ZkV0SkFqanE9dFZrWVcwPiUlN2pBe144SEdh
THRQWVZaeSRFUGdnVz1SREU5JVFCQkV2am09aDk9WSlDQQp6bkc/PiU7dVMyZSR9QXNgbUoyKzR4
MC1AZUVFUzQlb3Q9cDJYUjtuOVIzaSR9MWU2IVdINEU5UjZ2dTZ0YzlwZX0Kel5OTHM2Uj9vN2I4
NU1VeHFrP0VzcWRMTjxMbz9NdHRAYyM2UHpYbl57LUw+PjxGd1hOaDJuezxnOCtQTEwqVnhyCno1
YzsrfEFpeVlqQTJFSmhePlM9SjRPS2JlUyQqKnpwcWBZVT9YJUkqeGFINWppZmNIY25Sd3U+IzY/
QVJAOWU2Rwp6cH1oR351ZGlFaSZpKDQkaHtOfUdHK3gtMUhkIy1WcT01NHRYYT0rKlJ+ZFk2VFMh
QCVgSXRveT1rT3hnQ1Y4KyUKelhzWV9NXnZjZ3pmPyUyIXglTlBFKCNWRjQ+IUk3PFplRnFFWTd3
I3JZY3VpbklnNl9AQFlUSjBGfX08NCljNjdDCnpwQ1c+QW52Vit5VHZ4eys+KGZudDFBWEt9KWZN
STdhcipoYVlyZiEhNXNSO0RyZG1SLW0pR2lSTnhqbkA8RE1kZQp6WDFoTVcyPy1RN1lWYEJVOypP
MWZBcFJpbGgkSm4zQHB1alRsWHY4d0IwT1Qja1k3RjxUTGl4Qnc9OWtGJmh8UH4KekxpeGNwVzZy
RG9vRitxRm9pek4rKksyNCVRcz5GY0t4OTZBaW8wfFR4aWkmJjVlZldaPDckRigqdldlSXl9K2J8
CnpJdCQleUtqcUA+VG8+JlhycFkqKiltNnsoalF2VDxGWF8wJHotQFRWVDRnbTZzcl9vfSZpdn1q
U35fWD5VVmRRQgp6X1RxZzxGYXlyUyNRMz95WWpJYmlZNCgpTUx0OXBeSVpoOUs4U2w9fT1LVm1+
d1drfnpWOHxjV0JYPDxBRjBJXlgKellGMUo3JUQkVkZhbDg3JD5EWilaeWRicG4/VFNVMVpiVWN2
MCR5K3Z7WElCa2JIUUZmOT5LMnk7PV5qOXQyNDUrCno/UF9LY21gPHB3a1BQTmE3TSZTaXZTa2Z9
PXV1U0tlWjklRXF3U15UVE1YZjNJblFVdkhUYXFIc0stLT14ck57Twp6dl9+dFcje3doeDtVbnRE
LThxeVYjQ30ocytSJDh8SHVkSXFvSXg+al4tUnx9VVg8ZiFgJmtwV0tpYT14bntANHkKempKaXR8
Um9XUWxNM2oyLXIpcH1PTkY3OFhjRmNIQmA9S0JDKjJxPHIjajk8OXVIOUlNRGZOcE9UMndsQTMm
cDwqCnpCQ3ZAWipPKFE4UlNuUDl1UVRSTSV8IUlxbmcpdjZDNnolNVRWMn1AZjZOUU49RjQlM25V
aF44aCtAMSFLNmpyTgp6SkFiPmJfZEUzRztRVyN2TSY7LTs3ZX5wO1hVREh8RyheaFEycko/djF5
fUI2e3lHM0VpYk9UcHdedWZ1LXw0WEQKeiMlU3pgJDlDN0FKKHBnTmp5MGVeWVA+OTE8I0IzXzJs
fSVeT19Yek9sc1lEVSQ8TllnWmwzcDdRZ1JCVWI/fEtrCnpCaU1MSiFQTHEqQyZ5OyhAOEVWYEc1
bEZZLThMMnZNPiF6WkVLVT0mKlg8alpyeHRIJmNwM0Y2Vj1SdkpUVV9VIQp6S1l2JnMoSWxXUDQ+
TEBzbzEhKChQaXdVXk1ya2dTUyV0UEBmV3RPRl80JVJQYEs7UUI9O0VObjdaJXVHITBwNC0KeiRA
RTsrOG93cFdlNkNweiZOT1RJelV+MVhRQEVDJjlETX1gJiRjWjcpVVA/UztkZnpATCs1RClzbiZY
eWVfajYtCnprRzwqRnFvS0kzY24yKzBgdEh+YEFWK05ZSXtEQ0hxTVVrV0Q3JHw3cT17Z0NLYm4x
NlZPYyNzcU9VOElHPzNvMwp6RTdScyVjQlV8OTB6UjJvaE8+P3B0Iyt7Y0NOIW1mI2B6e1lfeiYq
R3I2amxGR25kRDU0M1JgdXoxbFQtJU9lfSYKejdGfGxNPFBwKVAqQ0JTN2lgVTxRTjFJN2FmdnJs
Z3lIRG1PczIqVHElQjU+YjEpZ3FFJVJiJXFgR3RiYytRK3chCnptOXtOQ3xIcm9qTUkkYG8mYTB3
amdNKT1ISE09OUp5QlhHSD8jbX5vbiNkanZfUGwzKUpoR3lVWkZnfHpQUmJhSgp6MkQzfHohZjt1
YTRLM3NzanomfSZXcXFOZypDS0x6VmIhJiVtLU5rM1J3bVEyKCFhazdOaXgwU0JBfj0tXjdHTFoK
emxfSWZDcnk7Vj53eEk9QE4kISo2a2IjIUM8QnBgVWM4PSlie1ktMV8zPFByfkVkZ04+enhARHhe
eW4jYXJNTjlKCnpUZz1QZHVzRio3TzRDPXJ7dSlOdmRMZlk9Yj5AcVAhc1V4TEJiJFpZVlFyQD9V
ZjB0YHR+V29RJXZvfk09eXNESgp6ejdqN0xuZSFLY1ppbDJUaXtfeER7cFBfZEthVSVLWWdVJXdK
fj0keFpDJWZeZVgodVVySGhve1VoOHJHYHN1KnEKekloRH5UeTduZmxkOW5PSlVSP1czPipJektZ
b2JRbVA4JklkSyZteGdsK3dyQGtuKk5SP3Zyd0w9dXcraVkpKm5vCnpfM0hgdkV0Oz1zI04zaytM
cy09blhfI2lqVj1VRTk4YVopJVQ2JVohQyt1dDdkMlE+Pz9CUzRoY0dkUU1ld25NZQp6ayVrcW1f
JXI9bTFNd2NFYXE/K3B5WlJxQHp3eWhEJVJzJmYkTj1UIU1iITJlMFU3YW1Ac0YpYSpYJmJXRXAm
LUkKem4wTXV1ZXhpMS1YaHprWCNTQCRIYU9TUDItPjV+Zzc1P1hjPiRqWlZ3YjtGRmJEO05ENC0y
ZlBjI3Y8c1FySjBBCnpvOClGdGMzWSNtcz92akFxM3hIcEJsbGJmXmU/ajFTQCFkO05hNGo3JFcq
Ukp6PkUrJUNxT1BNLVBTN2NzYzUpaQp6WmFCTiVZNDc2MDdoRGdgb1EtTENfSmgyczIoan1VSG02
PHI9Mm5PfVBDUExFPnhweWM4IUgzOUxTPk1WWiowJj0KekZadFZVbFEmRHlXO3Z5d2ApdiFIWClo
ZWJhfGNKNUVgdV8yZXkkc1FHXn16V2QyWj0oYngmYmlfTyR6Pj9QdD18CnolRWhsPGNHbk9IPERr
TyVBRDNDTEBOO2VSbUhnWX12P2JXSEpLU09gMHVNZEZyQ2A1Iz45TFZ8eWclb3tjIXxSMAp6TW9p
QG90TGVeOSlpIVJtWkhEeWdgRVREJHBqZUZSMWhVaVQzMT83ZjBTXm9+Q248RW9rTEopQjA7IUVh
Yn1oN0sKejV2b0k4UEMwbFRDSCEkfDQ2OEo9Z2piJn54YThybXRLeV8zITwwVU1KRU5lSm89PFN9
ZUlAQzhfN0I+YDBwdVVmCnpgPmVkPERLeEBlWik/VTJMZiNUcCRBLVU7TUdEUzVybmxZeVpOXi0y
QShfTjt3NTZ8cXJlQ2c4YXl1dUw/I2JRaQp6UlY4REolQmFoRio2dG1ibDxoXlQhSmJXPDItOEpG
cTRtb1BjRW56d1peQCpQdmgzY2x6eHZ1ZT4qOEtQanBFN2IKemRFYWZneVhpfV91UXlZNk1eeHIo
STxqaWI+JGgrJVdCVH0+JTx3X25qQyV9dVdqOGs3eGVJdnpGcCtvRHEtWGd2CnpIJXsrKmVrT3pl
ZypCXnJAQn5oaSF5WSRgOEtGbktUXkhRWCZBdVI1SjFqYztKb2RJKnokJWtGZHMwcjhycStgUQp6
b0QrZi0pUnNVV1Q/QEhCQ1lWUV9qKyk0azkxeHAxaiVvSkhHb158SDY3SUIka0xEZmt8RT0hQWlr
S0hGVXtwQU8KenokRFE7Yml9K28lRFUhYiVHSERYJUE/RmQ0OX5xTkBidz5LISp1YnApP0BuNzdM
b3AmPGd7QzlmJStBOEY4OEVPCnpzUkhabWtNZ1FiRFgxNXNvKmBYS25fJmZpRG1tbzV0ellraFpa
MGltPD9vRXEoV3YmcyM5UFc1KTZodSs/OHFhdAp6ZlJBMWxgRyU5RExRa2pAK3R2ST00NVZCT2FA
WnBBdzUjPkQ4eFImXi1Lekh0PVM4diFwYEdreVIzJDBZNDJVcGAKemRqIyZKNEIzUFgjWSgqJCRm
elBLN3krR2M9fndLX3gyQ2Y0eWN+WEFlej5lZnVmPnpZV3khRFJnS2dQbGx3NjsyCno3TGlqWCNw
ZS1Tb0piVSV3Y0lPUEFEZ05pdmJNY2NqKCFVJDZRSEVlQUFKLWtLa2laQkM4dGY8JDBMYm04ZWZD
agp6d3J2PjUwNTNCflh0WE9vYio3YU0oI1dMWXY/RndCQyM2VU88I3BoWEMmVjZscTsqKzJhZklw
Zj0tWlhvMEBufX0Kelc2R1NQMEI+Jih8NzhONzBiLUt5PExDJUcyXktrOElSck17Pz1IKHs4dmlm
e2diU01uMCFxXiM0YStVUmtmc282Cnp1ZVQxR0hEKGd4VCZTe1IyKThfJEZNZCo/Xkx0dyQmejt1
JD9ROTtMODVtM1VoM3BgUXF2e0lnO3whPCNycE9hYwp6PnIleE50dlBmV0NQbC1IOFBxNjYjcV9B
em1hWCpPKT4qWXVPVCtENlVEb0pwSWE5KCEmXjJPbXlMZztScWlEMTUKenkmVmU3UmJZVVRAMjwo
MnZje0FLNj5ZViM0S3lOaTJ4ZTlyLXF6aGlBM2ZvS1ZXeFNkKFkqO1oycyVGUVY+MmhHCnpxSnZ4
U0FQT3wte3UwYk9ja1Mxd2owNCYzaTtZOXxxKC11JjhHM25PSUdsPiRgY088TU18WkwmdVM2RFZh
TiRLcQp6YENSXjtGQXxlNV9OPytAbHtfQmBeOVRUSFBaYig1MF9jN1hxKF8rU2N3bUoqYnJLTCpx
R0MwPE5IUkR5cW9IKGkKekF9JSY4d3x0dENJfXoySHROWEx2Rz9pKyE7ODd0YVEjZyhRNEx0YjZ2
RzskUCE3N0t7MjU/eUxBWWtBdHkpSXwtCnokQVRiblhpVVZxYiYrREJjd014M2VONDF1eT84eDhJ
eElSbVFZYU9SQzZjSSg+cVJsXlY+ZTBIIShXekVFRHptVwp6SnZDaC16cjY3PjwxPX5HYGcxPjZq
Nip4emRCa2o0Tyl9OS0obTdMSVM2OD5oYDxiKypraElUaUh2ZHQ9PjQkamgKek4+IXgkb15fQVVz
YCZAN2IzZHghbGU9YzBtU0huQS1UdFFuJkF1ZGFfRkdrclc7Sk0mQSRlMFkxcTdlQFdKOH1PCnpN
bDlsMFBVNzB5MCpZTTkofCoyOHlZMF4yK259d3xZeERRY3EzSVIwTDZkcHklMHJpe0wmX2VRaGMm
TVpvbkUmaAp6eHErMVdWYD1HWnM8PlR9QmBjMlBsRXVlNlJsZD59NlpFSGhmK3pUVU80Pz15KyRj
cW9fVlN0e3ZueT9SMnM4UkUKenNnUnR8Rjdzdlo5S2NrXz5WdWQ4JWtvYztTTUc1IVMzNWlYZVAt
bzglU1ZWdXJyTk58VDM1WnxZVkVELVByQ0dkCnpOKn48Uzc0TXBVYHw8SUVLVTtucWtfWUZsRi0m
ck5nJnUrMjljT0VQK25Xcz89NygtaDIpfWdzRXtUNl5xSWBZcQp6cS1WcEE0TzJJUSghK09pOGZT
MExtZy17STZSbit3bUxLK1lNUU4zdGdTSGMhd2phaF5Ld2oqJkBqZjBVaUhXayMKelUrSDdKd3Uq
QklQMG99MCNLZUh5U0skMmUpJDMkPj5IZkNBQ0cwdEI8bnw4dkA0NnlRentLaUlFejB5Kj5qN0Z8
CnpGPkteS0hffnY1QmAzK1AtP050Z1BFSzcjOWNYKClaRk9GSmx7UVBhV2VMfS1CYEdgIWVlMUhs
UUNDKjEpVCYybgp6KkNxZUReI0lXYCo1a31nM3RFeTNsXzQpRko3U25zUlR0Y255aHV3R0AhSVBP
SS1qNHJfdl44N2JeJDY2X3JQRGMKemBAKWF3PDNuQShVdXM2VW4yOWd3a2tkJGN7R3hCdFBSfn5y
NH57RUdqYEtPK2xeMTdqYkhDVlR3aXI8YHRAemxACnpyR2VQRkpoOH1hb2AxWjJEdjskTVUoUUM4
UV5jJDBuPkhwI1VTdjFROUo7VCUta1FERFc5XkMkQDQpVXxRfW9VMQp6Xm5EMlNGVFhQV2R9YUo4
MzdxUUhjQ3BVcDFEMFoxI3YtQEZwUT4wWjNWa1A0JmVadml3JG0lUE5CdUptTylrJCoKeiozKzhT
SzZWPm13XyV0cSk4ZCFrTmdxKStVTnE5VjVucjhtUTRqcjVqOzAtM2U9bkNsZFFFenR6flhPcFR0
fVU5CnpWaUF0X2JtXntHXzdtZUprLVVqa0Z7JEJOdDRqU3tXel9Qcm5IeHRCQGxmbHhyQGZxYVRe
IXp7SmVAKUp2PXdKegp6fE1yb349fCtDaEMjcVY5KUE5O2lrTnFDUHlVcmBad3dBPiVxY1JVIUoy
YlJ0R3xDLW5vIWsxPj8+VUhXe3lnYyoKej8oPClsK1V8UTZedSojeShVO2ZSa19JPCpCO0c0Vipr
Z1A1ITRwSG9CPnd5d3Z1X2VFK2BMX198SyZIdi1yfX4hCnp6bjxqKEkoalBeWURkMnlia1EpTGBV
M2d0OD1ZYW8oN0x7SHYmdWt4PCVyPm4jbWJNYiRVaT5GIVZURihuaWpXSQp6ZUgwXyEoYlBqTSk8
K3VNOCpWTWRjRV59bStmXjs/XktHQmI4N3lkOGRxJGRoSk5JcH0tNUR6MXVZbVdXVTlVKiMKel5k
MEUtQiE7RkV0UGJPKHF5WW9KOD4/djdNX1E0KGx8eGtoPGA9MFAqOTFKYilCMUpVd3xHJit1Nj9f
XllKUWJGCnokMypQPGB0eSpRVShIZXVsVmhWNT8jbD1xdCtZKitJT1k/XkFkOStoTnZDcXUkKlVU
O3FKfTcpZEVkYCY1MSFLTwp6JUFmWWpmNFNBJFNMQjI/KUF6O1B5PnFWcCtme0ErZXwjMHZhPng5
VDtid0M4RHspZ25wbVhXREo4ZGhMbkRrOGIKelcxcj9AMilDdFdKcUVmVyglc0dNVk4pRENgb3pr
c2QmXz9CUkV8enVZQHpsKTZLQ1YyUERgcUNuTztFTjUlVEhVCnp2OXhoaVNqYm1qJm12eihmOWE8
YGM+VmF0WiZ+TzJGWSNXPEY2NmhrQj5IWXk8aU57Q3lUOSN5dEJgZX5xVDU8cwp6VGZEZURIc1B5
MEJGY3xFV3RrIT5CMjstdkZYOCU8T1RrUWZYUz00U1MzRD9uR1IyOWFjM3JxeElrPz0kfDY8RVIK
elVhe1cjR29wVnE8OEVNTk9PWkdWQDZhJH4rbkhteXMzKVcwP2NUS0F4aH5SIUAjSXA0RFRndUdx
fVc4QlNhVHt0CnptY1ltenZ+OCExQyNNYyM0U00qP3M8ekUkcEFfNXA9S1pndCZOTThrR35vTl5B
UF4hTkFQezBVaCljTUpyZXdBWgp6RDQxKTMwd0k8bUUtN2tSVzZNLUNGWEQhWHJEbXBXZ1NkbiFn
KGcmJTRYJkFPeE1wY2krY1p8ell9UGMqKCEpSTAKemI2eE1aYCtWVThvTzhKRXxOWn57P2tlbmV7
T3FVTUR5SSFnKjA0NGtKNWpuJDdeWlZiWFZsZTZZXjFLUXdWfWJKCnpIZj5UMndXQEQmVE17M3ta
e3dkR25JYE82b3BiNUpoKFRee2QjaVQqU31TNnF4bzZIcSROVyVXSzBDV0s8XjAmIwp6MTR2JXRm
JChoZkFFdXA/THcyciotNWttKjhpZjVCY2pNYkI1djM5NVluZT4rc14rJDsoN2MhbjVtKDNXY18j
fUwKej4lYU4qO2BQMHsrRnFgJloqPVF4WnpqXzElfnZheSlrSyNrKk53STlzbDc/OSs1RiRveE1T
NnBVdSRPMXh3byN4Cno2M2NxQChASStqdjg1b2hPUjthQnc+fF9sQ2NyTyFeWlU4djZMUmRAe0Np
PHsyR1Vxez9UUDd4MW1SU3ojXnx2NAp6X29FPGBwR3szQGA0NzBIVE10SzBaRn13ZT9iZSozJHFe
Q3hodjswZCl5PWA2YnRsPFA4ejlNX0h4U0NwTTBlZSUKemA8UTdGZXleNEw8KiE9Rjk9Y3VKK3do
dkhSYCUpPk9CfE5OdDh8S2V6QXN8RmMxQTIrKiErR3NxakpaYG4lfn4+CnpLRXQ3Wm1UWWwoSShL
VlMrNmt1Wj93RWNnPG9nKk9iXyp8Z2RUSW9AUyZjfD9fano+MUNFdWN1JWBzPFJrQ0RQMgp6TUNY
YiY+QUImaFVYZWUlUnR3JFRycjQhTVE2PTxEU2o+dzNoLWRWZHl5dSU2SmVJQ2dVa3FyekkoTHBV
UWpLeVEKem12KmUtdipPO0FOSyV4V3BsezZRSXcxdDFeUGk3clM5VzJ+R2lfczN2fXdBYnprViRX
KlI7e0BvWVUhNzg/R2BkCnp0cSomdWMyU3B1VWk9V35FKTd1bVgwKURXMU9AMXc8YjAhcSlmbkI9
Xm1UXkApMFNOQiY9bFgrSTN8SSE5YUYtbAp6a31HbzAzJWtlfk1CNTIoJTlSfld1YUdhfC1gZztG
S2g8eTNlRzRjU2oqUVA3XzMoey03ZEM4fFBJe1g9TEckJl4KekhTS0VMbSV5fntBV3kmaDIzZ3U+
dDk8LWQjSj9OSS1zdT8/e1kyWWFJekxoYWlMNGprUkE4RnF6fmNxJntfbkZ3CnooeWdQbil7ISkx
eT5KVms9TmplayRWPmNHUmYpa2hOPF4lUXhnYzd7YnA4SjdaKkRlIT9AKE9lUXY4YXhjTysoZwp6
Q3F0MCp2fnZwd1IpZHJgUm9AY3lucWdeU3g0KENhJnEoZU1fdzQlbnZ9XmlIKD43aGZyT2dxd3kj
amYwQzFPZXwKeiZ4K3kzcGtSM1olMTA0dUA4Pz9ZTFFUdH1YOCEjOTF8LWBSTyZxOz4tWEB7Wk5E
O1E8MmNLZjZHbnZrKXtJSyVJCnomZnFueEJGfGMkSFJUa1IrdG49UG17TDVYRmI8USs5UW1uSk17
dXN0UCZMZjkhRF8+RVREfmljKiktKFBLT01uRAp6TCRRdmJgOWhoeUQ/NTErKXpMbkheQFN7JHA0
JkdHJH1lSCtfNmE/VnFCOWxkX0l+TS1II0l1MkIqUylaWEo0ZUEKejhaaloreX1RRklFUTtrUDJg
X1UkelZwQHlqTEp2WHVDP3RzZUVOXmFgPkpqcWFSTWYlYUUhRUBoeUZjNis3MEdKCno5Sm9IU2Bv
eldHeVk5eyhlSzVWK2N5WF9uXlZufE5uWCM7PjRxP3QpSnc+XmgtIyk1JmJTUnRHTWN+QXdNY2cj
Rgp6eW5tPzdTdnh7S0lQeUI3SU9EVl5fNWFFNCEyU0xIcHN0QDFxNkxQN0RLSylMI3BYPWxoTldl
ZXh3SmRLYyNWSGAKemEoSENidVY0SytsfmZjeHJkdipRM1o1Y3pALV9ZNUJ6Qkhqc1N2bWArREso
MTZZUU5AcFVPQU4hJjx7TyUlcTt0Cnprc0MheGp6YzRBODNJZyZ5ODk+Qk18TVJVWn0tZmckRl9W
N0BtZnJMN2ZkaHUmMmkpQT8lPllZX1B5QElsfHBWQwp6b05xXn1oflFSYTI4SDZsI20rRXhBIVJC
JGY1QyYzekNCfkR7WSZodk94ST5hZksyal9kfCFDVjhASFc8VnNFIT8Kel5hQzRieE5RJGJKRCtx
V3tgPkk0TEErPF9oKkA5T2p4XmI+dGdIO35nbUR3SW41ODtBRkpDbWU5a0AwKGJLd3hUCnpvUEU2
SU1BIXBkX08rSmQ9MEAobU8yXlduZmpDa290NmxmMHJTN0p4RUMpRDN3PnlWQWpzMT9iQDVaKSZh
fHI4RQp6am8yPl4/TShtSnAyUU4hT148K2hkclM9WmN5MkVvN0p6Wks5flQ7TDszcD1hcjZUfExI
Q1Imb1BzOCVEcnRyP3UKendrbT5NV0dmZU02eVY/UjEwcDYqKUFIJSVFQjRvbyMyKHFUXlV7MXVY
eyUyMUVaTnY7bWZFSlVsdVkpN1JAZy0kCnp3VjZhKjFOKj9wKEhHMndGRCNjSTJ5a2ljcEw5WkRf
akt2aEdqYGh9UWBBcUMoeDtAKlVBUWxne1EqNF5YdCFlTQp6PDxSfXgjIWMrbW02eDc4b1N5d0M8
PEVGc3hFJFF7QlE7aHpYfUNtZShRNUJ7d2lJfV5ART4od3BwUV5kKip4Ny0Kel5EQVNZeUhJWTZ8
SXlpUSRBK1MteSVHI05oVFdBSkgwOWVAJmImJkZVa1lyYTk5VW4tND0rRS1XM1FAT2NkbDMwCnpk
K1deJD9KOUZkS1pFMzVDSEFuenlPSnJqQERoOHQ1PGl0MGd5UzQpS0omVT82NVY/JFkqbnNiWiMy
NkFJaDU/Twp6dUIrRlNkLUxaWHpmUW44VD9hJnlLI3stUWotYjh8JDZyMVQlMWB7TCFJLWAqY3s7
MDRARDdZPiFyUThGWjJ9eXgKek97ZVJpIyZkRHBIdndfUVM+RzZfKkAzbXwrTT9VK2EkJDkzMk8k
ekEoe2NBWGIlb30/P3RHQ0FgNzMhe2UmflQ0Cno1akthT2laSzc/KkI7ak0tMW9GIUpBU3wyc35s
bSVaVSFiNEU0OWpfOVlMYCUzJj9WOXM4THwrKzxmWk9BKUwtRgp6cDdHfGwjZz8/empvVl9FWncp
Nz1sNlAoOTJFbU4rS2dgWkgtQj89VlgqWEJVeG5wITtgX0B5dzl8Ny13JH17JTgKelpAKWB6WVVn
YEl4KDxyYjBZaU9iTDdle1hqKEYpLVcke1d5RCRlXktPSHhGKFFKQjhMLUBDTUFJX153dXc3dWs0
CnpkMDJgbjE5U1N3ZiVEU2hkMC1uVVcqNzEqYn41Wl9taFRPKDd0eSM5Kkg0Zk1aPlhVSlF1byF0
czlHZiNaV3FxOwp6JU1GOVI1eHl9dWF2VX4yN0NGYVlXflhCQVlETmlKPj9gcGd2Y2BxM0NUQkYp
Pkt8YUMxLVB0UzReJnw9NUpiNFcKelZ0PSN1SEBvWHpsRkhOOVQ7bzBMek45QW8wcUw0OTNGWk5B
KFNKVFc1Ki1sUkNjSFRpPys0NHkjUEQ9Rjl+NUZHCnpIU213KytpeVFUbTdhTHM/Vy16cDNPLSVy
OF9eeUJxaVZaKFYwcUA/JU5MK3o2dGJSdkBqQThqXz5NWk4mRFV3awp6VStiI196bTxRe0Z0PD1q
PlZSYkRTPzZTUGEhSjs5bmpmMzUoKHIyLXpuJHQ7UGtnZVFlZSp9Kl9SUGMyT3tsJjMKemxPSyRo
IW5qb3ZBcj8xJUwlJjVhNHtMMDs5aGU3c2dxWW1gY1RHNVFpJShoZTBoelkoPiFCWSlvaENfTExE
KVdGCnpWWHo/M1RPKGA/MnAhfntNKWRQV2FRVGtLeHJZTndybikxPnhrUnIqJigjQDZIWnwpK3lV
VSRVOz17JDg5diZGVwp6Wl81SVdrV2pefT8xJjZxeUxJWl53bk8odlppS3phYHdhe2VDTU8+TD5l
VTlIeml4bSlkYDhDWXdTbHEmRktHUkwKejhCRHJ5e0ZrcSsxbz4qbWItfGJsdlFKcWAkRD8lVGEt
d3wwMlpCKj93eF8yY1lvJHBsdVI4OXd4OV47TCNlR31qCnoke2tfS1h5Rm47dXJOcVZkNGZqUnFg
YHY1eXMzMD1HOT5icFBtS1dBKmU/Tmw3NTk/ZSZJSHVZbmZNck1Sb1NIQgp6XjlIKHYwMF47eGdw
RzleRGhqRTZyIUAwdjRYMnIhcHQ9bEw1SzJ0fEROVzR8QWcwRjs4WVQlU2EjaDcjJkpzbTAKekts
dTFeeEheOXlQR2oxTXJZN1NOc2tQQ1AmfShfIT9PYDVnQ1pUUHV3KmE/Z1d0KFVpZDN7TT90YXM0
azVuZzVGCnohcXIhJWlfUV43UHh5PVFwUitFZ24pNE5BPSVHNkA2fHoxR1IkMH56Jj4lOXxmRnRB
NUdOODdTKigrd0BvS3JncAp6c24tZDxZTmZGOWNsays8a1hsKGBXb2lya0B4QlRqLWNCbkRmR253
b0xGezVQPzxsIXdwYUxQMjJNYEVBbzkqdzwKekQ7Zjk4UktTdk4rd1ojN1ZDUnNidk5RbDRNNnY8
Q14rTWZzUUFJOGU5dnVINWU3YkVfYWw7TF9XfDRsP3F2TktWCnolQjA8JjhlR0oyPU1GQF5JSiYm
JEJWRUZxJXk0T0d5dnl9b2dMaG5xSjx3TTBMTWstdU9TUnBqeUxXSis9dX1vegp6VHdAXjVtIyUz
Xj1ANz1eP1U8fWxANjJ7ODhLRlV2THd5bEM+RklWNmEqRFBXJnF6RT8tVThKLXBtQW47KWhnJHsK
elUpQ08wNGhATlRBVUJHQXpENWM0OH58el8+ZG9GY3Z5clBDTmFLYWZAS0RNbzV6KDl0KmslTVZF
N0lhYURxRm53CnpHTCZLN1hrU1U5cTNlOEJQXkVrUzBPe18pK2BXfnY2e3EmY0JePzlkOSZhMGh1
YCFeKCk0QzFxbnJIM0c7fllJYwp6S2lxYClxV0xGNnlTeWpBTC1xRm1zdXEzIW8wSSUrUF9vMjI5
RkVGNXpwVW8tIU94UDw4SzJXVz1VVH47WiRFRmQKenZMdVNuRWdlaE57IXl8bHF7ZTVrcEI3I2g+
K0E7YlNiMUdXQnMwfkghREhSeGNMMkFCZmRIWnpTP2g2NTwjYDFNCno9cDkmUTlVUigpcHM0d0B6
YWVPVlpseWZrcnM7VUxkbjJGQ01FY1JebWxZTi0tU3ApYVNVQEhkJFg5fEJOWkZ8VAp6M0pYM3cw
Ny1LVClRKj5sRkBWS1I3Uz41PzsrTiRVVGBNYWZTN2NWdW11YXoqRCRhVCZ1K2kocXVNVH54O2h+
cFgKekFWMDNMVVYjNXl5eDFaaVVoRnhwbyR5Ujd0dWRTSz4jYz1UYV92WiE8TGBuNXtHWjYhWFJw
WFpjaChQWD1pdUU0CnpnfDEzfDBNS3RSUEskaV5tclQjZEMjUkJndGFXMGZRaD9LfHJNP0l1O052
YUFhRy1pYEI2a296YVBvUCRiR2QqTwp6M188amJqNGdWN3hiYSNTKEpMJko8MGwlOGZAMVZhKFpX
VG9ORHNuNjhjcjs4U1lTMm9ofjlWUT09VUVHWSpXQXgKenIpYVpaRCh0TlJRYXE7MXRgS2dZVSt7
VnpjZmh8aSglcF8yeHFnNGdpQD9TSytxRXllYVVSQEd6bCsqezY3WGdtCnpOd3RoRyN0eSV6T31h
Ql5rcHg9WVg8TDdLMTc4dWpyPFk/YmNKYlJKTkpUbn13N3ItVFZRRy1ANF82aHJLKlY3VAp6Vmo7
OUB4bVArO1c8X1VCM0l6Yyo5fWhCMDcxczUrKipfZFFJdSh0Ymt+bFhHTXAlZC1oWEhsS1YxMlJH
bTgrX0EKeiliNUZiKXdiSVBMZjw4QHBhK0FhRGhyUzFLPitKc0tNRCE0Ul9nKD5KbnB9cS1rJnlF
TVRWMSR3O35zZiVaTlNxCnp6ZmlhWjlnZ309I29CU1dWRHk/MzBYX1FWJmNrTishMSh5NkZNYUwh
cn5TKjxIV2BTa0ZCTSklViF6MjlnWkk7Tgp6UH59UnhhRFpjTXJUTEl6KlI1Tlpib3lZJlIlZ2U8
PW1hTTM0U302bkQ0V05tIWs3VUhLP2ZWdE5Ha3R2PHRfcnMKeitOUGwqQzxSdDNuNXBLKUw8Pns2
e0dAeWAjciVDLWt7WH5gUUZgTm5lWVJ8ZzQ9P1YwPUwod0BHQlNYbzN4Wl8tCnplTjc0Y1R6PF5f
SnAxJHpKLWErZXswcnlSU0Q3Z2BMMEpFezRIaGIkU2RKYCRMaWB1eG8wbEs3WXA3QThlbT9VNAp6
WU4hPj9eI141ZV9sbng5QCN+cnIhIWU8N0ZIfiFBazN6I04oek82d2V6cC1Keno+UUdBVHRQZzxo
dGMrdllofEUKejkkcDxoZSlSenp5OUhWTipvbXpObHY9dkhYWTVoYF9eIz1kRF5+Z1dFc3kjNyZ1
eDFSKCRidklhcjtXJEFKQ2Z9Cno4V0U2Uj8lMiUmU2V4VGBmU1E8VHl7e2k4cSFtNHJaX0lYYVRL
KjwmJUwhWSMtS1JgbVZDZDlWampFRkU9WExMKQp6OWNeJigpeVpldXlRUV5UMCQjZWxkfTVafDhG
K1I5QT81UVhsbVNQbD5sfiZNdnVMcDFuJFJ8X3ZOPVU1PzJyel4KekoxbmpRUlZJdCRDa01RQWE1
UlV7T2Z3Mnw3Jjc8ekwrNCtaSTV1MX4hI3BNfVdKVnchbVk1P2Blfn1ucil+RTY7CnpnaWJXbUJk
MSVJVklvSXdNVz96RV9KTGZDazt4OzRHYV5UOGV2MnB1S0hlbFoocy1HK2l+XlM7YW5yKyZzdyo9
fAp6KGhCITU9I1Z6dHVBa3hsVjdsZnhtSXhVQ1IwcDBmKTl7UWB5fTFGKHUpJjNVaWskKCZiQmsk
QHR4M3VFKTU9TFQKemNzdERIajJZN0NZbzRDVCMhTU9gRmk5OS1rbHdXVikweUZwIW99Pmc4RHJM
OHF1MTdSWDFxdVl3MUxnUVY1ZShjCnpQVGpna3tqMFVgRn1Ue0M9PSRqNF9mN1kkX31HJUYjcUAt
OEpDYXpMbWNsaWBrKEJeU3liYEImdX49T1MmUUBDUAp6IyZBTHJ5Zi0tTHtQVyh1KlYqU04hSDVm
XmM8YVRYPnMha0BsVXFmRXJkMUhZe1YxVntheGIkcTZ5LUhBZHhvfWQKelB1UUs8SXxHbnN5TGlQ
T0B7bXpjWThWV3Q0YTFyU2J0Tmd8KTE2MHF1NnExY3gteHImIztoKUNLNFBoKUI2XnZiCnpWWCZi
bT0lfEFNdTdyfFBiU0kkTlpEaTxVN2FaUjw0SmRtVk9mSzV8MzRVXnRXNjxlSF8rVGBAczRuS3dX
QVdycwp6azBtN1E/VzVHZnlBOGs3OHpXc1JBY0tMKWozLVlYSnFXPENKO1YlQjNQKzUlb3daV1Uw
cnMraFdzezlpQWp+QmQKemJDd15RMDk1ciNJbjI5dGQ5JmFwWG5wMVBvNGNxSVc+JHZ8Jn1IVmh2
LXJWQ05KK3tkPD8+NUhOeV48WUQ2WDdCCnpPeV5sUjVKKCEtbCNld2QzcXJjcmRSWThCZyltNmt1
PD1ZRjlfOWMmK0p9eF5ZRz9QeS0mYWxEQlVNQDVQZTE7ZAp6WH1SZEItI0Q4LSYycW9JYXB+NDZu
YFk8fWFKTnxAMUZlbEx3UkUrVzZkIWhMRWdaOH5QVztMISt1bU5XcD9XUiMKenV7IWRebElSNz00
Xmd7LTt9NiZVNDNzdEk5b29yQygmeDQrNShlVHM+V0JmM2h4YVU3S248cTQ5aTxCdjA/Sn1wCnpK
amQoVkoxZjJ0Kns/Z2l1M3YoMj1DfHFWbDdsM1pwX3E2c1BZakRtMFNMa1hkKDwxUDQ1PClUQDQj
QmZMPyQyWQp6bT9Fb0A8PTN4OHpeWjBYQS0mQ04lXkw0SVRSN0c/NkgjbSlNbn5fbSRmTl8tYGZI
O1VzdDRJSWo1PE9aQzF3aWcKeil0Jn17P3pPRTEhJXE7eDc+SXstYmZVfXl7Jmt0JlFVYXdORlJ8
PnUlMlFQQiV2bk49ayEzI2dTXiNkdmFqbkghCnpETU4tTkx5Oyg0cHNSeEM9ai1NTjMrelJyO1NU
TDBWWCZ8TD9OUlIlQ0V8KD91XmlTZUpUQzRhOFc/Wlc5QVp0IQp6RiVBZmAqb0xTI0ZJZmB5N1NO
cEJfK0NSYUQrcT0hTGhNeFZpc01LNloxZXk1K2l6eTVvOCVOJj1XfW0waV48XlYKeks3cz8qKGxw
dHNNUHpgeksmQ3hYSFhURi17PU1TWFJOIy0qY31lPipZdStLQXJidFZxYENVKGNAdjZjJVhsb0Qq
CnpXVUg/PDhOK3BFQXUxN3lGWCpMSEklJmVFUzgxblByd2U0fnVpVnNEbn5XaEZtQmVncjxKMkt2
ZFRPS2JuUn5EZgp6Qkp6QSNhTnVRIU8jbGw2U3J8K3FpcX09Z2RHRT4rdEZlJmspSVd4JGNxX0pM
WlNuRGJ2cEFEZjNeR01rK29rbzYKeiRBeGhNTDRnWTNXbDRCczRYcjdTcnJHWWdMOEdNcmtWZHwq
a1pgK0dJMXQ8PypAbjBBPX5AbXYyNWFJcy1zLXY2Cno2Y0xFPHBwZmEteF5xWmIhTlBmb1pDO0or
SGMmYU5KPkZTRCMkb35aMzVuTjBpbnlidF54NV4wQCR7RzxldENBewp6OzM9UEhGRFNsOVd8WXQ/
dzxeQiQzNjh6a0RRMTk3ME1VR08hUVRmfEFaVGMhMzw2a0VGJnJGVkRmUi1rMUxRK2MKejI4M1hQ
elFBdDBTP1EkSU5MKDF+SHU+fj83dEEyQTdEVWFGVVhvRjdGLUszOTM3fEgqdShAREReKj11JWV6
Sj5YCnpmWWRXZzhaOVJUdXFyOHRFRVVNJD5HMSRSREk/ZncyWUo8YXRGVXNkVHBxaXs1YjtqRFM1
NFY4IztnQmcldHJuRgp6K0Z3dE56M00ra0pDVj83dio4PT5VKCpZYC1ZTTI+OCNqbzhNKEcpRCho
YjQtb3BaVzRzO08pMyVxZFp3bFZMYikKekNTdW9kcTFmaUBOTFJVNUchZnNmekEhWjg1KFJhZ1Ul
VTZqMis9WExofVB2WClnV2RDemA0NmYoZlYkJCFBZzc1CnpPdVc9cntPamwzNj1ia0RKfXFoaGZZ
OEteVmkoZV9fO3Z8UkdUTiU8cntRNz4oJnlReExiT3xeOSFXOW5zaj4kSAp6dHRRRDYyT3F7dzZV
UVghUmF1ZVFfS15VI3dPM3ZOJVdeOUZwYns4aDV1fHdkdStTODliaVYyOCoja2UzTDBOdjwKeih2
bll1bHIrRDFURHZ7T1NiQXdpbDlFYkpWWCslMnFNMEJoKyVSX0xaO28pOyVCODxRenF6RXhfWnxE
RllzMWg3CnpmMSU3UUdJWiNXYm0yK2A9dHJkfUJANl9HWDhrLWsjJSFKWmA0SmhIVlRIK1Q0I1hK
ZmRKZUhMTypZRyphN0hmQAp6UEMmfjV0KyhwOzBzdF9OU2Z6NFNEYGxvVkstUiMzcUstPkMwSjhD
KyV8YEchZTdYNFMwezkpe3NCQG18ZVBfKHgKemR1TzFsbEhJV3ZIKTtmTF5VNX15OWJ1fTw+UnJt
Tl57Zz1uSVJVN0VTaVpCSnIjOz1DelEwYWNTR0xiTGh0e3FPCno9Qz9vV1EjTlFhe2doSnowfDBq
ZnhAYXw7Yz8kKDlaWXVZVzNTd3oobXJEe0FfUihQKkpSa15sdVF4NDktSkZZTgp6eUhVaWZzRVch
Kzc8fHlkSDVhJlJEcUdlJVkmWnJzdnFsTykpTWclPGs9Xk53YVc9biFIQHJUdz5KQEhwTiFhd1MK
emE+UHxlOUpmZFl1S2tVOEkwcnFSbXE2YDJpVEpNOz5xRDA8U3MjZ1kkUElAYThHLTVSeE8hbmM2
Z1gtUl9ubVBoCnpMPjRmLWI8UH1VIVBwWl57NiNDcDExJk9QdUR9az9fPENuQXRfSXtzOzZlYWNR
VnNlNjNmWWRacjY5eEkkKncmZAp6V2JuRG4mRmZVe285Yi1ZPnpOeEoqS0c4N3V3ISVXcFhOTyFB
NFZkN3hkZUBVenJ0M1Fwazg3b0t0VlNXOXN1NDwKelMhYTltJihqS3taQ1pZb0okSEhLd3khWUsj
JCs4QEo5bEU9Tjd0NXBkMGxxIXlVRChgdU9DRXQ3aV87eWJYPmlNCnpALThZXlohYmxEcHdrOEFp
c2BtaTZQXkJua1lsZ0Uqc3NIKlYlcE05UHRwNyRTUUU3THBoOCYyRjdGVihhQiYwOAp6TVh9R2k1
anBfdUE5JjRpeWhZQzJtbnMtUTY4TmxATGIkQSNLQEAoZHF2MXkmP2FIQT5GYHBOfWN6dypWYWsz
I0gKemZsTGlVaiY2WGFzWSshWHpDZXlEYUx9OGYrTyZIeGlgfHwkQ2diTUl5QEl3JSoyVTdpMyp4
MiZFM0l9UVo0dHBRCno2Xm5NdygheTVEPzhEU1gpclJQKih7PWBxcyl2JU04b1ohSCtZQ2UmTFZt
UUBJQ090KCo8OHMpSnJAck91VDxWSAp6TkdzNHg1KGlEZzVTZTRVYU0qc3Q0LTEmZ1htRTZPUjBQ
OUVQU3ltcG9XTHgod29nakxzS19EfXZFNTU0JlhQQ0MKemdFQEdFd0BmWD0rNStLTCg4YzNWKTgy
YFIpLU12SF5+ZzxMUktiIVpaK31KPnN7NFdmYmk0S1YxKH0+STRgemJzCnpqKzdpN2FBUTh6USRE
PHhIaFN1a3xFSWIjYV85MT5AUnpBSzs/WCZPNjMtRUtlNCVnc2RhRjNKeyVDeUozMGNVQQp6RTZ5
ZVZaREZFZj15M19MJk4pRmpUfUxafF90JSRZLU9jYyFPWDZaRHRQe2JrbHQkT3U3TjVwPm9QSnRJ
bVBmMEYKeipSaVlZZW9Pb0wraHp9RUtFTVQwZ2VHNVBEe0hUIURobEFGITtsbFFEfFdNQ1Z1VFh0
M3JoI2RUfXJLejM1ZnNoCnp4cjs0PSFlXytFVEwrIWdIaTs9akNwRU9lWndaVD5DWldOMElYMmx2
cyUkRlRBWUZBYkQ4eFhFTD9XQCZuTCQ1VQp6SnJFdmgmYzl9Qj4pfmw3M0FvNERaZFlCWk8rPjJh
b3AoMktMMyYkRiQ9dEQzO28xd2tjYXkhPi0zJHVCX0NlcigKemFNUz9tOTthaWg1ZVlPbG19NmFS
IWIpTnBZYVF8UmItZnhBYmVwd0ImUCEkSGxifkx+YXd8aiFjU2EqOSNVJnpmCnprZjRMODdvZVoo
LX5yU2M7PUM9PXNgODFoX14pSXgmS0g+bCEyeiR0SjxQdUk5dE1+aDIhUjN3MkhBI2Y2fG9+Uwp6
MHI0bVRLPWFLZkE7NSQjUE5CQkcqXmwyWHc1Y04mTXQqbDsjVnBgaUA+SGBrQDlyWXctUUQtdXs0
KnVwXmYlT0gKeik0eldjT09QbjlaSjUjdHYycHF3PWRMO0ZIMUM2SGlsdHcmWlhHUGFfaWxTdCM7
RWp6X15odyE/aWw0e0N5amZQCnptTlU1TW5aKE5SZnRXN2JYOylWPlgqQExPMz1JUihwNWwmTDJu
LURUUj1MdEE7LW9wPSoxTHplOUdTKj9Tb0dWKgp6LSg2fHdWWD5kMFBuNSZQVl5XVjBiNUJ2eTx6
I2g5O2AoPys7WHBWd3grQG4yXkRra2ZVfEd0T3dMYUgzKjB3MzIKenQ7PDdKfERhRzVvdl5vYXdg
VSRRKDkjZDJwYWFxSCpTLURGdzlLRks9NF5MejY2aWxGSmxrWk50Ti1rbntkLXNECnojYlQ1ITN8
Jnpgd2wxPEg5WS10Y0p5fGVGN18hOVQ8ejU8QyFpUzQ3dGppJUpuSENOajxDNmVBZUJoYlIwbXt6
ZAp6dXpIY204KCMqb3EmWXJfJl9SbVFGSyZQe0c/JEYjaj9hLU9yYH1CNFlMcEhqZ0ReP3RCfUMj
VU5QelM+MHg+blAKem0lfklrYkpOVi1hI15jSi1UfXZlX0tee05mZCZZSlo1RCQtNUxwSTFhVzRT
dU5BMnh4dFBVMmRsdT1gS0dwZEg8CnpmRmRfWkx4JWljXzJjI2JQYzs3WGlrM0sqI3BBM1pqRiEq
TXBIRn04e0gqJFheN0hZfTdlMWRuSC1HJElBPGFmMwp6Y1lpcj5jRzFEJE1nPE9SdUI+RSoqYilB
YDZaKChrbShmVDA+JnBJRUoyMHx7SjVaazBhV2piRDl4eCEwZyFKQzQKejdFZm8mTjRzcE5MWTh3
bmpge1NDTzNQdDh1ZU1hLTwwa0Z3aSN5NUZQdEJwY2okS3xIaUNuRCVnYWN+amAofWwxCnpEVV93
TWs3cDIqKypEKypLa1VicTAkWF9pMXNBd3FKUn4xNSFPUmg/IWV4blFUd0VoYjhxNnpvciZAN204
SzBkOQp6QkV7JnphO0lhMk88JGt6eD8wUFkmMmBTTzxBbzZaIU9XJCtwcD0hSFo4UD40XkAreDlz
Q21iVmJwQHwlX25gQWUKelNze209cDZzKjVgKi1janlqJmk8WE5kMCMpRDF4NWR4OEtoRmFXOGo7
KnRLfDZ6WEUqWjBAYEBzbTRRb1FBUk1mCnokMnc/VylfenJfdnNybFRFI09QSENTP3tSMTVJK25X
ZTFRb2dMRzF4U2dTTEtFI0BYMWFDV0l9RExARjl1Kn1gRQp6fEZsSTAyO2Q3YEFwak94dU1yWl8m
Vj80QCYyJFY5M0NDbVBqeTduKDA2KypwQkBwUzNMaXQrJXhNMlZ8TigybzIKelVTTGBUPERlKHp0
ZUx7eFd0K2I2VGlgNlF1OyZYZ0hYMUA3XjhXejw1TTd0QVoqTWV5O3NrIztHSjVYa0tqfipfCno8
PUg3PkUobGIyNyUjYUNINnchOV4wUzUzV2x8YldFR35IK2Jgc2d3Ujh7MmFIZTgkMXNMUHQ8Nn1j
OFJ4OWp6ZAp6eVV0SSRDPClTbE42fW9DKnBmbCg2YDxwcXhDWDI8YFV4aSk1bXJ0XntXd2ApNzU2
QmdXTE5lPFpoekZrWkVxeE8KemM5V2B+WU1AV0tvPURVUj8wOHQpe3ZGaHNzfDdYWmlkVUZUNSFL
Zlo0bUwjQ2I+YVA9aHpERG00VXJTcmtpaHRfCnp1TjRHREAkbGU7Qn0rV1o5U05manh6Y1NzUl55
ejhRUmtZYVFaWX5oZU4/VigyPWQjKGRiYWFTJDJWSTtwWnhaYgp6S3c3KSklJSlIS2VCdjx3Wmo7
UlhXYEtwU2dIQlpFR1FjUEZMLUZ2Nz95aEBeVEBoU1lhND9UP3hCTH1gV0RWTXcKenI3K2xDZ3Ny
WH4lSUhYcDFubkdZXk8jNjxZN2UwR3M+SU9uZjJuTkNiUWlXbHFqKiE8ST84bDlaNHtSZTUqSEI9
CnppOEU4Q1FpTXImQ294bGMkbnMlUDRzUF9NeEc+bylUVHo3TjE5Pm9qM2MzJUg2X2kzWFAtUm1J
ZnNKejJPRy0hLQp6OEFKdW40WF5mKU9DNkFtPWw1fG91VndQeWsrYTk0PFUjdG5HaW1SMGBFNDV+
WGE3RVR8RWFtRnZBQ2UxQjg1YTQKej1YM31wVFZyRGFKc31eMGVkeEx9QXJ6PkEwSCEtc0xCKWg7
SVNVKVd1YD8zYlR3bXA4K31aTHwhVW56eU9KWmx9CnoxRjByMGNUazl1NmAqNmlfZHtKJS1MSEQm
cVNSWiUkYUB9aSNYPX5lXyVKZjdATm4pPDUhcD0pMiUyc2A/cmhRJgp6Q21CN25GQ3RNQ1RBVj16
M0UxcFIoPChVU0ppYmtDbVB9X1UzLXN7e1klKUxBbCpYQ2BfTm8kUHZ7dz5wQDgkP3gKenlNMnRj
IUJ1I0h2MW1jdlNecyVyI28+WTdkRkxYfC19YEZrcy1GKDVgRUw3WDtXJiE/M3VQfWRfT2k1PUQ8
YER4Cnp7ISE5fVUzKWhTMHtDcDN2RkdzPjRMRGJLdGBFYVB2TUUhVmB9MlZzMWV4Rm1AVD8mZm4q
bGlZdlZ5KnspeVBFTAp6Q01mUEtBbmUxNm1sdntHRHFlbW5PWjdmcmtqOClUMFBXdHBgMmg/VFNa
YyohNFU5bnJ0UWR6RStpT21CQ0k/V2MKeig8WWZlWW4lR29mTlRYNVNSXkN4Vy09ZnsjNSVFLTsl
RmdvWU5pYmxrUFFPTm9kQ2BUTGV4d0R6Mlh4RyQkLSl2CnpqJE5CQENvZShNUHpNfCF0WDxobHYo
MG1ZQlJ3TUxsJj9xNWVFV09oVkJKQX5sck80KHYlYU5IUH5PdUptZD9sRAp6e2prNjZnVk5ZTE1K
S3R3fERkaz5BUUFlPldYZU4wQCl3NnNgPnNCRD5NMD5LekokKz84PGdzX2tePDR6e3p0QFIKekBt
elFfbTFnYlZSYSg1I0Q4Zm5HWT1udjhpZ0x8TDFKZyNzP29qJXxzOWotcHR9OWNRVCRyZkd1M05v
Ozl1cXZ6CnpYcFJxQnF9WWkxekA0UX0kaTxkdlo7TTZXa0VJejJzRHpiMnRYUC1jWVdWJj1NRX0p
YXplPVR7JDReamNsamNyWgp6dEhhMnl4OypBWG5gU0dgTTxOUWpzaWdYMXNIcEpxQX1me1VmQmRo
VntZez5JTVpuJXd3JEFmK0VgKk1+XzR6OGkKekpCaWFuPFRmNy02MSMtI0lUVHkpSmlRQFBhWkN0
VWZYemJiI3t2KiQjYzJSRzI8QlVUc1NHRzxRcjtXTkxaa2ZACnowZF4pRDg3TT53WklEOCh0KjNC
fVJyOFZ3SFg3dnhWaSo3Y25nJFVIYyZ8WWFqRkBMJnRRbCpMQTMkfmd7Pld1dgp6e2c5XiZlKVhO
JVReVnF2Qm1AUWNAJk57VmtfY2UzIUUrelM9VllOSjBHNlRJYUBoVmc1all3MSNkT0s7cEt5dCMK
eiglayo7b15eWFRxWD5WVl5Ucz5ndz8wMlQrNnVrOV9SKylCRW9VYiZ4M3M2VVhNNDF5NX4+MCRz
U3I+Qm5WOTdiCnoyO2VhPntrZDVVdCEjcTZ3WWdiamR9ejMlcDJ7Jjw4Mm82VD12VVUjY31FQnZN
XkZ3P3NHPiZ1IWVSJVAmfFpqRAp6eTVaRXUjcW88LTdTSEA9NVIwIW9AYlJ2Mj1rPlFGY19ERiNm
V34razVzRmhTJVR6flh2UmFqaVd3RXF9aCltWFkKeilMODxFdjZEdj4hUT1ZSkhreFhMUD9zbCZh
KGhkWkk8WH5oWFU2JjNffjNpMj1rWjBZMipydCg9UD5JcjZoRjFOCnpLbyZHME1JRGp3Wl5aOEdE
fGZPd1hYen1TWUFufXpPPFpmeXlJd29neHN1bmYwNU99Y2E1KW0rb2UwTGxpRFF9ZQp6cDJqZW5E
U1YoemY7VVU/S3JjaUZwZ0lEP1A/QDZsaTRtWTVMUitaYlRJOzRCNU5qLXZRVjNKQTdAT1gxdkVo
PnAKekM2cENNQ2EjYERQZkRTTW5MSVNyJm1MK3BsJkJUTFA1NUB2R01FfGV6QkwkP3pgX2BoNSpm
I1lYdHV9NHQ9fE9FCnoxWWpOO1Q/K1lDI3NYaSglM0pgZShnQ299KkZufU88bEV1I1RjRV5CTX1I
SVEjUHx4UmA9TURZVjN5KEZQQlRIRwp6cGxAYXI5NGt6aWR6OEtAQXkhcCh7el84MHV+e1JQbGJY
UyNndHNubEhIUktfYnp+WmQ5X2pwaW01O3pMJVpKfDsKeihASFY2WCUpfnlEWHBZTj45Q1godXht
Z1l6Y3FfbWxrVnFsXkJZQXJgUGFXS1pWV0dicHk8YFEqXy1vX2N5dX09Cnp7KjBeYjJUU2I1YDNe
PHFCeG9uRVlSKnZNOWU9ZGFoKmtveDY/P1c0dCVAdlcxYCp9cnB3IWlBbkRBcWtJYGA2fQp6Pk18
dX13YTdQXng0d3puc3FMLUVoQ1IqdUhUTEQ5cl55fEdDODl6NVUxZHt1cHVmTHN6cVJYU1hyO1pu
PD44SHIKenRBfH11QyFNX2BVI3lrPWM8MGUtSjd8NDxeKWVraGZKX3ljaGN6KEJsKndLVGZqaTB5
V1UoT0VDVEljKyphNjlJCnpmTiZiNWw8RDJIdlNoeFcjRkNZRUAjeiFMYk9vMUJCMjNLMWJEKFdn
NEE+aXM0NTlRZEcoVSNzKSsxemlkcFhQbgp6WmpoKWpVMUYlOG0/b1BIQUA5YXk5PmZsI3lPZloh
Ukd+RnBWYzd1VVdlXzRkQUZ4XzhsOTBmO0U4fk9VTXRQQUYKel9DUU4wVit9ZFF7XiNuPlhzaiF4
QUB8Yz9pfD9tSVU2X0QzblUzR3o8cWIlbjE0anE4WWgya1hBXncjI0MkPUslCnpPamhXKztLSlBO
bSg2b3llUkVUPkxUd2Y0LTNMTkNzYWBpUypFZCRWbShfdH15dGE+UXokYCQ5KHd6ZmJGKUxgVgp6
Z0Mtfm5NR0ZoUWxXezY0bjZzYVpueGFVLWlCb2IhLVdEPWB6O1BjRkZkaCopd2hoIWc1b2Zpd3Mt
NWhNeDhYfSsKemR8VUVoZEA5VDswcD4kTiN0O3sxYz9RaEJffisoU3ItK3JkXlYmfCpZKUM8PDEy
RngyUHZjb30tUUZ3dmpyIUBXCnpxYW9pY0l9NC0re15aMW9yJHl9P080d2R+NWF4dkZKbzs/Wjw/
PkZ1QDA9NVdgWGEpYXYlI31BQDJRVCNAPVd2bQp6VmxraihrQHZsM2tuYH02NXZ1SCNNPGw4cEFg
UytLITE3ZCk/Un4oaTVPfGBMYz88WHF7Mk1pMDt8UjFEcElVMkoKekUoNHhnLURhV3k3Uio9ZytG
fXFjQlgmYHkjcjhsZzJeZlZEYVReZk5mK156bWVoTmVISXRpSSZOOGo1KyF4cVM+CnptMCZjRFdf
QVRPZk5Ce0N4WDF5ckBLT3tBQ1I9fE1wY15FcTRkPmd5ZD8rS2RNXzEqRmJ4bTZzemorN0MmRTtp
fQp6enM+SkYjKFMwcGt1MkdCblBAfk5BRnU0YHtneFZAVzR3SUhKOW5uckZWfDJGNjloa3hPajxK
fXtQbCF5IW1hRGsKenNYSGZ3e05udDRHOVg5fEoxMm5yaTIkWHIyWG1MYzc9eiRNVmJ5VC1zREgj
NTUtNVVAbUwxNHlhOHRVZl9Cb2UjCnphbU1UX0gtbDREeiU7eGxHYVZrcjB5KUVZSUJALSZpdl5h
cS1RUHpqeklsRz4hdTAtKD9ReWdRZVR3TGZSUDd1VAp6b34/YU10WENnZUt6dyk4c2J7bWJQNURZ
OVN7ezByWSM3a3dKVSFwbXpqPU1yKzx0PUwoQkJaWVE0T208VD5SYjcKejxKR0IjMTNLQ3soeFd9
QWpxWEZfcHBhdjloWlQ1UFd0RnBWTEpxZi0hS0ArJG5MbV9hTyZPYkxYIV4hYWopKWAoCnoqI3pM
Nm8jbTRWYnFxPzUtJDJaNjFxfW9NUnx1NypfYGEocVB3XiZ6YWdzKHxrNzkjdyRnKWZqMzsteCpH
P2M3cAp6MjhLbDNUbXhabUBrZFhBODFzWSg3MXUzeTEyNiNEb1ZrM1gxSD1LR0MhemkxISQ+cUk9
Z3hYMEdXbGNxeGROT18KenY0PVgjVVMrMFhXZjlCZ3RQQH1zZylIQURJc0xZTV8leGUkYHV2TSle
OUlAYUVrOGFpYks3JVlWbjhiMGJrVFJFCnp2UGsqaEolaE4rYnB7ejk2cCgwQjVaXnkkRmBnYXVG
UHU1OEplfUMrbWhWc0wlcDRVM3puMUVpcDtCblpVM0ckUwp6Kj1hQjYwSWxoKDx5YD90em5tRGxe
JXklaiNZKm92Y01rd2UyJiUhUWVrZ0pmUWI0QWhqWVFUWmhkPTg0RHdGI1oKejBUaiVidkxlS0FL
bTJgXkRqRFRENmpkditMNmhLbkN3aFVea3B8aiVNI2ZvWCM9T2gtbStHbzhZbzZlckw4P2ktCnpB
OEVSQHRzaiFQfEV3S2JVRkxuZDgpZSFmS0FVPWZOfiRpMG9FcT9xTGk9N249RFNgeUgmbDFxVXNF
MHtFPUVIbQp6YEtXPEZvNmMjPWc/KUY+e1p7cVYwRj1vQzx3ODNediVjZ0RLbSFvMShMVzdqTjM/
MHBMPH13WFdQcTAze1ZmIUIKejheYTdWP2pAN3V0JGlZSkdIbnVyWitMJnQ0RSsqUkolQktObylu
MEdTaXhmYUBnP35Ed1V3ZFdhdDwqNnlJaSpJCnp6JXBvKVFZZU5vMmlKaUhoRzgxdXorXkM+PE9V
d0YyMExVfkk0bG49RnAyPn5GajxENktoIy11NTVxQlJVQHk9Qwp6VmheO143JGBEaSkrLVZ7WnVl
TEkqdSQ2N00kKnt9e1Z5fGJwTUEkI0AzPntwbilzeClMOERmUDwoM1okXmNybU4Kel51VV93PyFr
TClYP1ZCUG5BRHAwcVk8eGIla2FUKFg5V2lCTFZNI3YxJCljQlNHQj1veChCTDd1fihsakpXLSp7
CnpNTVhNMSlKc3x8Pk9mezJmRiM0SVgycWF6c2pXM1pFRXAkYGB9WWNjRTR2Z2M5ZmpNcm48MCM0
Mj1hdT0zekU2ZAp6eU5IXytGUWE5OWM7JFgqSVF2e3ZoI3ZZajxKX0tDMlAqOCY0QlFXXitUeWR7
SW0oIzdiP3V9UnghdllnMVdydDwKenpDJm93dHlrX3p1TVNVblptfWR9OShve01rZj5icnN6aVZs
d0U3bkVtMSVmcHlUPWY1Mz9NezgkTzlgMW4kcGJDCnpLOGxWQWpNWUwwI1I0KldjWlYwPl5oKn1Y
RHdrJiNCTk85X3EzekJ9QkQreWlzNitPNztTb1lxalQqej88Kj9aMwp6OTBzb0QjQVk7VyhwQWlg
THJ9QFluTVItbGdiMEBhOVc3TXhER1EkSFRtWj5LYnJnZ1Qpdip+P2g4O2pMSTwjUXsKWkcjTVV7
Uz1YTkJWaiVTfjUpZkF4KkYofDN7e1hnMVYoJE98CgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9yZXNvdXJjZXMv
dGVzdC5wZGYgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9yZXNvdXJjZXMv
dGVzdC5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMjQyNGMxOWQ5OGI2MjFmZWFkZjNlNGQ2MWY3YmZmNDcxMDdh
Mzc0ZApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgNzQyMQp6Y21haTNieSQ/IXdeb3JGNUpYVD84
NUtsd2RJJUFPZnVYeHdWclhWeTJtdUtKTmtLIztnYHE9MlFqbkJKcShNPzcKekM4USgtcjFae3Mm
K28pTl9kZlN+bzt+d0BZcD95VCp6ZXdkdGlgUF5nQkZBYyEyI1RAKnskYGhSanB8TkM9ZCs5CnpT
PWEtXyNYLXMjdGN7eTM1SnI/fWczeHgzWld1Zlc/UCVfWGstPUV2dFN9TjEwOVE5VyNAcT91blpn
fVcyUko4bgp6QCUtKiMjOGRMSUJ3dFFpTWhASGk5Xm1eeFlsKDYpKERzMnpPaHsmV2E/bVVhMmxt
dVlRan1qWVhuREw1JmByMVkKekYzSmclb1RfLT9ZVm80V3t2QTQ9MEdTYFYxcD5OdGMoe2dZbUQt
MWlPI0VSNmVnUHtpSVhxfldMMmxOISE3MntHCnpWNkZiSk9uZjZiM24yTU9kVnhTN3F9a3N4I0o/
Z3p7dlZQMjVoKDtIMCl2YkVKKi04MlV2Pjg3Qj4oQnBhUlpiPAp6PmN7dEUlPUw8YiZ0OWl+Mkk7
dGtlI0deLUVDQFZII2RIckVNKnFvMnxNfHdgdE51I3RDQztZflg1UHpPJSspUzkKelh6S25YSklK
R0NwfFUxPGlmZ1BVPjZVNjw/e3xDQGB3Wk9tXnlifDkoKF50USNANCZ2NmxiSHdIY1hhKCoyUUBv
Cno5UXZnI0E0blc7JUpJMj89X2JJRzAta2NZNzhPMkVQMDd3a1FVSllmaEhCMCRjNTlzKjU8YkpT
SkhHeHlKOXdHLQp6KlYhaCZeVXJlRlg4ZiVqNTllUC1wSWViPUtYcWw/OT1Ed15lRmFEZDIxQWY0
PkZFeEtAPmgwZHIySjBYdnt6bHAKemRYQyVRemYoOW9oMjFRfXReNntIN1ZqWTIpbjBlNEQwIylY
ZGAxOUg9Xn09X3tOU1RLMG97MTZ2cmdocHRhNFAjCnooZDk+KXZYVT51YHUpVldYb3F0MFpCYFBg
YEA0MGNIQzRQcTdQVkllRX1aeSgqM1FjfjZJYy0xYmYpNk5IWC1WaQp6WnRIdmZQSUUpJjsjS340
JE0xUz4xcFRWbXk2ezZOQzhYTE1vSkRueT5lZGBrYWRYLTxBVDlqYF9Celg+Y2ZwN0sKelJMNTd9
MXxDKEtGIWVSTHJrT0piK1JRPnZSdE9yPlZEZX5sQSVBKll0bDx3RSQyaXM+JnVuTER3JUV8ODdj
cUFACnpuSWdLe1ROOTw5ZSYjK1U3dz1DQSt+fDR1VVIofGxgNFpBbj11RHRCfEgzcnQ8eX0wVko0
MThDI25FYT51aVNKIQp6SjVGVjlBbnpBb0dWV0pmIVA5MXNBMiV3U2UlNlZiLVU1fTFyTXhyc0pQ
WXhhamo3UiNHbSFFQz9jTlFrSWxYTjQKel5JVjVaRyglQ1VYbThhY0hPJFZAYWpTMmAtTVUobzNI
YFVKIUozQWY8SlkjMUNrPjcyZHB9KlhwUkNQc2FjI3sjCnpucTtmKUhaVXA2bX0pZlR0RHUmKGp2
YWpWR0hjOFpWUEpvYDZNRFlqUjE/VmVWTm9OQUtPczx4WEVCRWJWRFclRAp6dnBnKWJzUjNFZXFT
TXAlUF9WJlApRlVsTip5KmNEMXNBJUVJeXEkfCk5bGpYbkQyQVhVfFA0KDc+U004QlV2d24Kemow
YiNoejFMdlRfdjROJCpOPmp1XjJ0PXIlcnY5cE5LUVBFXkpUJEZse215cyZXcVV+MVhqTXd1Znt5
KiZ6Pk9ICnpFUWA4KlVUYmNxeXk/LWNQJiluITR9VjgoSWBgMDFpTmZCfFokK0VXVClFUlMxQ2lY
Pk1jQ01pN3RpTG9SSWFMcQp6KH5MYVhSV3BJSzVifCQ2KU1rc2klTjlTdWFAMUd4XllELWQ2TmBI
TiFVdy1OY28wIyNeVlY0S0BUNUVseSlwRiQKenNrKXFjSi1uISNvIWpON1dmTUwtaGtpNHo0U01P
Iz1OfU10PSVjTl5lbzhJfm1AX3JuIzMxUkAmMlk0eC19TzVXCnp7WUlteVBgNHZaXj5pRWtLayFp
IVJ1aUhJc21yO3c5UGpKcHJPYUhWP3ZBXypSQmNsYXtBSngkSERNM2lFMTcmTwp6cD4lPWpkYG0j
JHEre2lsbVJAfStDOUJ1I0oxSS1EPENZRVFPez1yYXRUVk1NLVdLcSNXRl48PV5kPipsWmticUwK
enJ8JDFnWHxVQVp4IUk5dHVgX2pUSitIeHlrMUgkWCpyLXE/eGdRb0R3ZHZRYytnMm9vPTgta2Zk
MEx1Ml9MKiorCnpfYWtPSEE2KVpKQmB2OzQ8WCNRMG4mUyZGWlBZQC0kemFjfjBUfjkwaT5We3tm
ZiZOa2Jte3V1Xnw+Z18oKSlNbgp6MytRTmxyYWFyQkptc3xZY3h6MD4kNjkwPlQ9MThibiFaY2Qr
cFotZll2eFQ+KDhSe1VWMnRjOXBOfFF1MFVnaDQKelRSe09maXliWktMR0tBTl9LWD8xQ18kJWp5
flVyMFRQdWtJR1IwWSpJWkAlfWcofn58MytFNCU8fiR7eDs0PTk7Cno2bSZMUD1vZCo8KTZPPjBB
MUNmIW9LOHtURG8mcGhzciVJaykqTWYhM2xpalVTWjlPdT11aH47O2hGYm5mIUUoNAp6PVFSNHQ5
aGAtNCV0cE1adlVpQU94dXZXQnJVVSooYWdnJT52d3F1T1A1clZ7VWUmQlU5RCN3VDhWJVU1UnAk
dVgKekFjRXs2RnRFNG4/ZmhuKSVNUDchWEUzeE84WnUxWEh6cyMyXmRwb2BoYVRVNGglel4xNTA7
WT5CP300a3ZWUUlUCnpaRW9gJWpybHFEMHpGbmhFe0MpSkh3cnpoLVZYJVFHcCpLQU4zaFEheU59
Py1YOGhzJmBKUT9kI2JuRUxAMnhgbwp6LXRkfE1wbCQwJDJmdHdyVlZTdyEpTFQkKHB4ZVdBbF9m
Ujd5RzExZUBmejQhQj09UntZZH1IbHA7Nzl7K3ImM1EKekA/V2VEMHV4ZiFTKmhNeHdST0lWWkox
TXtISns4WktCWmFIVkQ/aXV6czA4K3FXSjA9XmFqUUArdkw0MSk1QTMtCnooP19EUi1Ncl81SWN1
Y3YjbnxhJCZaQSQwP1VHentJP15NUnk2WW4ldV84KmNqQTQtMUdrentGYHVkbFRkNnUkSAp6RD82
SjUhKURYbyVTP3U+JGJZJiptREx5VHUzNGAkcyNMNSF0LVJRNFNDam1xcTcpVnVFSyhUViQ5Xzgw
RFhZM3oKemJ3TlRydmZ5YXp0MXlpKiZHeypuZ21SSHkmQ2h7YGQjYzBTQGx1enI9PTE0blowODhQ
KiZvaFRkaT4kO3QoUlJgCnoqbzA1eStqQGR7b3B7RlRAI2t2YXNrTTcpKGk+LXtfPHoqdiRvbm1y
WGU9Xik4RiRyQiZEQyRVeSYhSVkrJWg9PAp6YD0+fkBua34qTz5VczdHNT5uPk9XPXBvJDE9TUtr
QTk/U3k2PH5MWWRTYVA5cGBEQlk1MygzKCNKd3ktLWh+bF8KenlAWF9uS2x7TT9VdkdVO0FzOD1x
a3JVdXEkMWE0K1VVLWZtKUFteVNkY0ZeX0xXR2ElbHNoOVlCaV83QmxkNXxuCnpaaigoSTFKNDVi
UXhgIzdKdVU+OVJ+VDZUUlFrNFZ0V0oydUZOdk9tV2F2aiQhYz49dFZFZn14MilIPTNhSVFnbwp6
IUI9eVpJYD5wYTVWZSRLeyRYVVJONE12JnFreDl8M3ZLX1hgVnhpejZQd3xmJVNIXnZjRndlPWBS
UzFFe19WKFQKekxMNmtGPDsmJVo+K096MEZJaChrZ1FnPjwhfSFVLXYkclRLV2VPMSQ4ZHJeKVhp
P1lUcHBtKG1nPV5uMDkmQipaCnp2LXlpQlBTNmJxVzttaThQUUVGUHpITFVGNHkyeHU5fiVZWTNV
T2NzajZHUlFESnVKZCg1UkdoRnVCIzU1ckh2Ygp6ZUg2Sl8tPTkxdDBrNm99RlpTaj9QX0EweXYw
QkA0a2V2SS13OyRefWRnTnZucUFQS3FZfjJCUD97YXAxcFFMY0MKeiYyRzVGRktyM1N2VW5wX0Nr
OFdaZ1lVKStkQSMlaD8qe2I/QlVZYmBfa3ZmQU1qWkZ6O0BaMk5KX1VWVzdjOWIpCnpaKlh9SU5l
ZiZvfDFARnxDUnxYYmFeLVFSN2pNYTZnVW5Rcmt+Pnt6SyEoJTt5RX1IX3gjbjRIYzlaYzMmKCRp
KAp6MUBmOUE/SW52PFZlSFB3STRKa3k3bUhCeHN3a2xsWFkkX2c9QXFHMXJ9a2gkYHB7SSRjTV51
RDlWMn49NTdgcFoKekNaPGdLV0Fqdj0wPUAyKEVRRGB8WU98JCFTMld2cVpVM0EmaCg2aEdqbVJq
dUl3eyolX2R2NEJ2ZVU5SWojQlNqCnoxM3hFTnZPUmZpWmYkeispN3NLblZuNElFUExwR3FWPlFR
ezl3VSpzeWU3K29Ra0N7UTV0MyNuK0teNlRnRnxMcQp6MjlpaExGdVJ2LXZZe2d8e1dGMns1ayot
NWR8PSl8KFcmYCQkWHYqaTNxYE99KWVeSVdaYHdNK2pfbHBPaV5eVSMKenl8JVFra2dMOCYlekgp
b0psK2llanBrXzx4WEByTSE8LSEjbWZpeG9CNjl5XkBwPFApZXpBKVBnO1lSaU8xSFc7CnpeNWE4
KlFnfEwjPmxCPyg+JGlZPitAcT1nQ3wwJFU/NG1TY2NsYmc+Rz0wcllkUiYqd0RCeihYPCRfTTUr
PlBpVAp6MTslJDMtaEYkYnZSTj5IUl8lZFZvYUJrXnhTMUB4SCNSbFNKNGo9MWpkNnt5X0lUQj5L
dU5MdENCPFpZbUlTWmwKekAhcVNKJXhDPj8tanIoPmVWMCYjejswVHJacW9kP2F1OE0+R2ZATn43
ZSY8QWF6RGA+YUA7Nn4pPXFnS3QpMz5jCnpSKjJIKi17ZGJaM1J4Xmk4SX5aMF5Mdk5iMG1gNTYp
aW4+VmQkcEVuJVQxd3p1SF91bkhhRSpTXmBAaEFiV0wmMwp6UzZAPFJuZ05xfnRfWn5NcFo1fEdJ
fmd6WS0waztvZUE2Kn5veUVTb0R3JVBpTT15bmErUG07emU+K3xgd059OyEKenhpV09SLWg/OTlR
K2AyRnJ5VDR6Y3tGVCNlWGUkMktkeDFDPnEmNXY+OHhKc3JHcExJSnh4cCNfUDFFTlR8SUsqCnp2
YGdSZj9kMXIlcUl4P2MtQyp7N01IQWVRPnNpRyliTGtkeHNWaTU9SHc3KzUtbTlCN1ZBU3JEKW0+
YWlFVV5SPwp6VHFEIXQ7RGFPe3MrJnVCbGlRbCFwaTZtQSo3fCkxKFlWMEVDalJYMERYYyFNPnt5
UW5je2RANCk9MitlJD99Q2cKejxXQXpOJGAqP1diJGUoV3dwNT1fUUtoeTd3OTk7cmhpPno4VTVA
UlpnNzchREFAWHNCV3ZXanZQbGVZVnMyZE0xCnorM0kzRjNvQVEtZERxIzM3Pi1CcEpDM2MqaktR
dW5vWFh5clRlbShnKyZAQDFVVTskfXkmanBXdE1NaERUNVA/fAp6az5gbnJ6JGFEZjRjR2smazlh
OzE0TXdXe2VHLW1aK1UxenpUKzVeVE9mcD40T2pzKVdDfTBRfHMhUmopN19TN18KemErO31FIWVs
ZElUWEBZMTNRXilLKl9gUXhYUVRyaWxGMmtnQEI3JDwzRExUVkl6TXZ+MituTUooUDNkKF5IfUwj
Cnp7OHVfP3F4K3FRNTY1dDl3cS1vPTJVcGlOampEQFpOcXFhVUdmaFMqazdQJUAySzlvUks3YUIk
PTh6NGhLQTxmYAp6Y3lEX0F5YyglYjEpPzBVN1VoQGR0VV5oT1pVfkNjXlZCKFgrOXclbSM5cE54
NFJQU0hSfnlCQHNuaXghT3VQeyMKenApYmUkJFQka313KCo9U2Q7YVpaejxpeU5DNiFAKlRCJClT
Qk5QOT9qbHpiYXpNT2NHNmBJTkpkTEw+YlgzeUlkCnoyQF84VUo9YD9gLVomUzkoI0EmRSU5JE45
QVYqQHJwbWVzZGJVaX5rTTdvVkNlNHVSaUQ2NkBLTjxtZzBGNVNyUAp6Zz1vMkx2RFA7fDglI0JL
QlJsRGQ1QVRrfVZfeWIkJHRVJjliTk41PE81cHNJSEJRQn10SnVaJC1wPFNSUEdgYE8KekFGYndW
WHhwMVJvVVU+c1dWN1czTWB+KkxrVzJ5LU1aKUtVKTk8YEQ5ZihiciRqOHdIN2VxUWBvVlh7QWFG
fVUyCno/fEM9JHl8djxOJVc9NHZId0Y9amR+aj5zZ1I8ZjcxK2tUPTRebFlHNGx9eUprV05gQUpO
MGNoNSRBUygkTHQ0Wgp6PGg7b29zcGl1aVFWc2R8WFB5UEdyNDt2UkkqKllMJjA0SW5mNnhRUHdT
LTdsbndRO210WFdeKDIpZUN3NkxsdmYKelYhWGAlIzF6d0NZbUl5eHUxYDJzSmVfT0wrZlFYTG17
MHZReD9FRUA+YnYyPFpmU04renEoIVBiJVJoVVV4ZzBFCnpXV3VsVmQtSlh8Pjw1bVZCNHVePiF5
V0RIclVweGApO19+MElvNmJ9XlNIKGdvaXVRcUFNWGZXcGh7PTVzPDVOIwp6amsjc25xflZDVmh1
IWZmNlMtUmM1ZCVZeTR3b3dOIT48U0k0UEtqM2RuWlQ1STxsSSgqeGM+JD9XTn0ycGBxTzcKenJL
TElScWE7UnhAIUA2QmJHU0xOSF9oRnhxNX0qQXRuU3JyaiFXNXR0T1VKOSlLYW5uUD1FalUzTjQ8
PyV4JE5BCnojS055cC09eWJHYC0kQTR5XiZ2SWFkSTlscFZUMipLfDgwISo4a00zSDYlQSRPNVVJ
SUlIdH5PQ1JJKG1gPmFwawp6SUAhXjdXTE1ZI3NKbSlDUkJrbCN5fDNCeCR7eHp1MXdWMytlZlo8
P09EaDwqPUUlQXJHVXRWQio3cHV1dntnS3cKemBDRFo2SmVVeU0qTkg9cVdYbFktb0gyZCFfNDIy
JXdiMyZZP1ctZUV4M2ViUXRxdndWcns5IU84K3lhd0wyODI7Cnp3N3Izc2NhP2BaQ2JeKU1mYnpL
fnRjRGpUZSY5cDswPCpTOFhwN0luY3pYczYtKloydUUkLXhDOCpBTEVse1g5Tgp6M3QwRmY2VmdY
YyoqWHZARHV7UURnck9LT0NjV3oocCMxX1p2OVl+Xmd1SHR7eiE2ciZpei1ZSEVBQWJ6em0yJkEK
emItVXV6X1NEQXFnMF4hRVpFPipzUjUpI01YenZzYXN+RyNXTUwkQUA+d1NhOHU3UjNUQmFeazQ5
QklsYipQQH4kCnp2ZFhsVFB2WjZVdzEkQ0lUeXBjblM9KjF0aytGJVgzVD5MUHV3a0p4JXI4RihM
e3VWMUYoVFgoTilUYjxibCpzdgp6VnBMbWVDd04tbTlyYilwV2BGOGkydEx4UHBQQmRiZG10V0B0
ejJBfnlaTG19WkA0UilnOzZWZit9NExMZXc/US0KekdRMUFGZHx5Q0UmX2ctO0VqVk1sJVppVjFa
fCtPd2AwfWJ0YyFvWm9NQ3Y4VztWZ0A5JChDY3w8NnE+QjhKQE49Cnp6RzdrUCYlT203WUBsUn0/
SGNUMjVIbFJ3MUReNUwrKHg7JCphKlokQFl2Kz9YdWdeZCMyKERHaE1KVGBaY3xPeAp6cU9FaE17
TilxR3B6TkdjSlVwRndXIU56cGR3WUt+c09wLTYlS2ZNWkleeEtuRSpfZj4lfX5wNWt6ej9OPWw8
eSoKekBgfXA2PX15S3woZUJEdzR2eWpzKFExUT1ebjkkR2doWTt7aV90d0NPcU1ycVpjaX1Ya25X
WV9GSkdoUXVKaTl6Cno9d2RSezx1VF90VkFfPHNQTH5Db3psTT9zYEI/Mi02Mnh8YjBGSW5mVjNC
JWhSfmZkQCZMaHA8R3dZPSorVk8kfgp6bWhhQTZiLWN9IW5iTUpWJnFRLT4tWlFyYF5oS0YqRGNS
bWJybW4wMDRCa3YjVCM/Tn0qJlREaGopO3NlMlFjVVAKenBQZCNia1cqfjE7JWhzNU5De2lmdjZQ
PmB6LXFROFByRmMjdHR+LUlhcjBPbThSVkMjJD1FS01AMlB1cEIldHZvCnowODU9PyVFcTEzcmZR
X2hTOVV5KkRPVSNJQmB9NClmS0ZDZ2oydTU9c0I+PEVlOXoxT1QqamVjRilYU29OMDlRcQp6NXd2
MHxiMEA8SlQ9MWlLR2A9bjdTS2lmdUVVTzNkdGdkLUMpT2NaUD91LUNvOGx4QGkqXnQlYHtsVWxz
XnRHLXcKemNpeFhvaENnNVZAcm5mYzchVUhxVk4/MmdzK0diO2dCd1FqKyFqfCkpQ0dvaWY2Uihy
KTlQYjclJHw+RlFNVU1DCnpULUBoPjJ7SUtWLSpOZkd3az04Nyp1RnYlI3lPbSVWVlRJZG0lQ2Rm
bVBoJW08d3hvQmV5VkctTUhtWUFrMlcmbAp6a1Y0PWNaQHVyb29jZGwldlFDYFJ2d1dxP3tjdmhI
cTNnJnBmQSYpI0AoQUBqX2Ajc3txR3oxKnY+JCF9Uz55M0MKenRoI0drT0A0KERkTjRPWnBFTlU3
eiQ3JFg+OzI/d3QqRm9MeWhfIzVFeXhyWG4/NikxSTZoT1VMV3cjNHFnWDI/Cno3eUMzJXVHIX50
ZiU+KFk9PncoeUpIRjFUQFppX3xDSjd9Sy14KWstWXRmdTxSbVU0Mj1zJnF7JSo1PCkjZkV3TAp6
JThZUytuV3V2Vz80WSRtKCgzME5ydXgzOGZvQnFmJjt0Xyp6b2FPP1NlOGEhcElHWDxvVzJDbmhY
al5CbiZyPlMKejZZdT1geFcmZ3pgTlVuWkxDeTxQI2pkbSQlPjBFcW5PSmBFPDQ/WkEpTDwyQUok
R0k5c1hhRWdFMjNle15kQClQCnp4S01FfEooWnxMWXs/fjBINFVAKSY8KDgke3RycXl4YWZ1KDdx
OUxFVDVYd0ZeQkV7NmBHYkFiT3ckMGRpdnQ1cQp6MDd1eFRfUCRiXkBqfU9WWXJUQiFtNXgqTmlm
JE9oam9NXldEODRiYlAwV2VLX0lRMjJYMlZlflU2Wk5gY1pHSUMKenh+fWZqQFZJVjZffHIpMSN1
eEd2TitGOFo2I0JVSXB7clhJaWNTSVVRVndiRFNfM3hVUyZtckZgTD5ieVZwfTV1CnpBU0B2bEl4
aUhSTyU2el54T2xsbng9LWwpejZlTEVVYihKXmAtZno4bk9pKVZoeEIqNz5uTkBFNmorWmFacEBL
Twp6SCV8VGZAcFg4PmFFTnpvQEEwQ29mYDZXUCNOJmladUpTQk9SfEV6bykwQV54SlJ0SzRLPEB5
ckhNP0F0TVJpcVAKejxTNFh2PTJDIUNjWDdGPnIlR3BAZUBANGpkdWJJbDtDaD8tYEBKYEc/R2Mo
P1IpWWluV0VUfTw/KkFfKE87V0x2CnpSTDRYPnB+OFJHRz09fUZYPS1+cFY/YnllKT1kV0VZS2dh
VmNFYl4/diYydFRiMC1XKVQ4aX1XRThBSU1AYUFySQp6SUlJPjFaKVhpNG0yWWlhZnBGcHJRQnp0
UD1WPkdlNWs+KzlWUEZeIzB0Tz8xcTlQQ3prYjt9SnFuKUpgKjJXUDcKejFPcUApdTlnX0E4JkVf
UDBzeFZXa3Y7Xlc1RmBNRUdJeTU4KnhBXitrPTZrflQ1Y0Y4VTchZVkyPz9IOUZ+JmZGCnpxJDtj
P3Y4TVc7czt0T2c1JlRoS2g5YmZMUGolVmtuRl9XUWNyb31PQkBqfl5SKz1pSiVINkZRY2s0T3hz
bUFBUAp6WElqVWxCRj51RVoqOTxeQ0tYS3tINGZIeVppUz55RjY7OTVQcDJ8bV4lVDE7Yyh1cGM8
KHdeaikoe3NjVSVPPzcKenpyTVhxKDdnRm1hWWc4PmspVCUmRWZVaFdlUWVINDl5QFBPO0Npb3V2
dHFRe3VLVEw9WFRqMHdge3k/Nyg4KGMrCnpFRz42SFE7aj4rRVZXZ3x2YCZqLVBOZ1QqNV8mWTFP
PTQ8aDRDb2ZlbmxxaHlSTX55eUEpXlVPc0MoVzE0VkwpdAp6TDJ2UVFGVEIqUDRRZz1ibkJSdiZj
aiMmK1d2Ni0yRG9PQ0A4MmElM244RyVsRkV7Wm45ZnQ9QitkTThobEdMeUMKelEpcz9Bcj9LITtY
dE1kflZXWG1pI0FsQDh6OChKeUtTY2paPGV5WGtYfU1kdGskOW52Y2dPc2VOfUljNE5TcEQwCnpH
cnx0PD5WfnA0JENHd2krNUNAcDVkY1dmJmRTWiEpZCs/fTBGZStkNUR0ZHtWSXJiSHNJYyh3ZmRH
U25xeWFeTQp6ZmhQYUc7ZVFia05hQ3BgMEhscjYhUD0yfTF3aGlhWVhiaHAxMHYqfmpScklYTlEm
bTReTl8jSTY5WFg5XlMyNX0KejlnbmxyIW5oZk1oYGtHdEhwYko8PFI3cXF0QDw2bXkxNU1vcTs4
SFVhVFpQajBCS0BlYXFmNmFqNEtkQUdOQjFsCnohQzJYdWxhMnooMDc0VzI2b0VyY0t5ckFUeUVD
eH5xRDlRNUlvOCNnMVl6an5MVE0zP2ZRT3dXTXBJNTJxeVRneQp6PTI9MWxnZCNkZndCUU9QYng7
MXpjOUtjYkF0bk8tPjVlUGxVcEBmLWEpUCt2UGNLTWBSa0V7a0gzSShqbD1PK2gKenhzITc3X2VC
MSFXQW9idiVBOXo3YVc9JUxaSFBoczRqS1NiYkgtcSRFSi0oayhTS3VzXmJISndTYShPcXxOYTNK
Cnp2NmFvU0huJVpZS3s7dk9mMjh6MyVAdHgwUXRvY0hJSmBKbzdMNWpqO2xnMEJGcCZlb0Z5ZXJO
ITk8I1hnXnxSNgp6O3Y1dUF5aUpJNXEkcUtxeypYZj9oeWY1Z00jUVY/NCtzUGFmflpTVWB3YztZ
Z0Emejx5S0xvZGlUUkhub1R4KzYKemdBPHtWQm9tfVRmK20/RHU3UyFEfEF9K0l2NTElP15EeUVa
TmU9dGRFSFFjK1YqQmQwajJMbFY2YXBvQkVDTG1VCnohVWUlbDl4I31QX2l0SkMjQUI9aFU/Mm56
QVJfKG8wRmVqOzM8MHpUe3ZrdWM1WDlffjl3N0VWR0I2bElyMUpsZQp6TEJZaEZ8NUp2OWl4U1Zz
S1ZASmpean5eSmleVG8/cnloYlJ7Rmg3Xnt4M1d2YVgwPl85dWtXRHc7b2pWVXBeeGQKenFXQGx0
NiNiaUJIQHJGVmcyJDdudCEzd3BBKktxWGlOZ2BPYFRHbjJLbmhyRTkxdWR7NClHI1RrTzNNMiNn
VzNZCnphRmkkKkNXVkJkcktNent2TGF3ODhaSGYlS31rISZwa1JhcTtRdj00OVJlQWdDQ1YwSz5F
UDxfMU95PmJENm9gXwp4Q18pTT9EfXFLS0x7SkR9REpjO1Y1ZDtiJWpZTFZJTkt8JXBHc25DQS1j
bikrQV4+aH5TdjU0XnpXe25AX1dKKzsKCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Jlc291cmNlcy90ZXN0LnR4
dCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Jlc291cmNlcy90ZXN0LnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGFlYWZiCi0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvcmVzb3VyY2VzL3Rl
c3QudHh0CkBAIC0wLDAgKzEgQEAKK3Rlc3QKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RfdXRpbHMuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0R3RrL3Rlc3RfdXRpbHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi42YmI2NDVkCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRHdGsvdGVzdF91dGlscy5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgQXJubyBSZW5ldmllcgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAidGVzdF91dGlscy5oIgorCisjaW5j
bHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CisKK2ludCB0ZXN0dXRpbHNf
cmVsYXRpdmVfY2hkaXIoY29uc3QgZ2NoYXIgKnRhcmdldEZpbGVuYW1lLCBjb25zdCBnY2hhciAq
ZXhlY3V0YWJsZVBhdGgpCit7CisgICAgLyogdXNlciBjYW4gc2V0IGxvY2F0aW9uIG9mIHRoZSB3
ZWJraXQgcmVwb3NpdG9yeSBkaXJlY3RvcnkgaWYgaXQgZGlmZmVycyBmcm9tIGJ1aWxkIGRpcmVj
dG9yeSAqLworICAgIGNvbnN0IGdjaGFyICpyZXBvUGF0aCA9IGdfZ2V0ZW52KCJXRUJLSVRSRVBP
RElSIik7CisgICAgaWYgKHJlcG9QYXRoKSB7CisgICAgICAgIGlmIChnX2NoZGlyKHJlcG9QYXRo
KSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9IGVsc2UgaWYgKGdfY2hkaXIoZ19wYXRo
X2dldF9kaXJuYW1lKGV4ZWN1dGFibGVQYXRoKSkpCisgICAgICAgICAgICByZXR1cm4gLTE7CisK
KyAgICB3aGlsZSAoIWdfZmlsZV90ZXN0KHRhcmdldEZpbGVuYW1lLCBHX0ZJTEVfVEVTVF9FWElT
VFMpKSB7CisgICAgICAgIGdjaGFyICpwYXRoTmFtZTsKKyAgICAgICAgaWYgKGdfY2hkaXIoIi4u
IikpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGdfYXNzZXJ0KCFnX3N0cl9lcXVh
bCgocGF0aE5hbWUgPSBnX2dldF9jdXJyZW50X2RpcigpKSwgIi8iKSk7CisgICAgICAgIGdfZnJl
ZShwYXRoTmFtZSk7CisgICAgfQorCisgICAgZ2NoYXIgKmRpck5hbWUgPSBnX3BhdGhfZ2V0X2Rp
cm5hbWUodGFyZ2V0RmlsZW5hbWUpOworICAgIGlmIChnX2NoZGlyKGRpck5hbWUpKSB7CisgICAg
ICAgIGdfZnJlZShkaXJOYW1lKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGdf
ZnJlZShkaXJOYW1lKTsKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RfdXRpbHMuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RfdXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5lYzYwZGEzCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRHdGsvdGVzdF91dGlscy5oCkBAIC0wLDAgKzEsMyBAQAorI2luY2x1ZGUg
PGdsaWIuaD4KKworaW50IHRlc3R1dGlsc19yZWxhdGl2ZV9jaGRpcihjb25zdCBnY2hhciAqdGFy
Z2V0RmlsZW5hbWUsIGNvbnN0IGdjaGFyICpleGVjdXRhYmxlUGF0aCk7CmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0YXBwbGljYXRpb25jYWNoZS5j
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGFwcGxpY2F0aW9uY2Fj
aGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MThmNDAxCi0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGFwcGxp
Y2F0aW9uY2FjaGUuYwpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEx1a2FzeiBTbGFjaGNpYWsKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxnbGliLmg+
CisjaW5jbHVkZSA8Z2xpYi9ncHJpbnRmLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1
ZGUgPHdlYmtpdC93ZWJraXQuaD4KKworc3RhdGljIHZvaWQgdGVzdF9hcHBsaWNhdGlvbl9jYWNo
ZV9tYXhpbXVtX3NpemUoKQoreworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhTaXplID0gODE5
MjsKKyAgICB3ZWJraXRfYXBwbGljYXRpb25fY2FjaGVfc2V0X21heGltdW1fc2l6ZShtYXhTaXpl
KTsKKworICAgIC8vIENyZWF0aW5nIGEgV2ViVmlldyAtIG1ha2Ugc3VyZSB0aGF0IGl0IGRpZG4n
dCBjaGFuZ2UgYW55dGhpbmcKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dF
Ql9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmplY3RfcmVmX3Npbmsod2Vi
Vmlldyk7CisgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7CisKKyAgICBnX2Fzc2VydChtYXhT
aXplID09IHdlYmtpdF9hcHBsaWNhdGlvbl9jYWNoZV9nZXRfbWF4aW11bV9zaXplKCkpOworfQor
CitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgZ3RrX3Rlc3RfaW5pdCgm
YXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXBwbGljYXRpb25f
Y2FjaGUvbWF4aW11bV9zaXplIiwKKyAgICAgICAgICAgICAgICAgICAgdGVzdF9hcHBsaWNhdGlv
bl9jYWNoZV9tYXhpbXVtX3NpemUpOworCisgICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsKK30KKwpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGF0ay5j
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGF0ay5jCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMmRiNjEKLS0tIC9kZXYvbnVsbAorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0YXRrLmMKQEAgLTAsMCArMSwx
NDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IElnYWxpYSBTLkwuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8Z2xpYi5oPgor
I2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUg
PGxvY2FsZS5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQu
aD4KKworc3RhdGljIGNvbnN0IGNoYXIqIGNlbnRlcmVkQ29udGVudHMgPSAiPGh0bWw+PGJvZHk+
PHAgc3R5bGU9J3RleHQtYWxpZ246IGNlbnRlcjsnPlNob3J0IGxpbmU8L3A+PHAgc3R5bGU9J3Rl
eHQtYWxpZ246IGNlbnRlcjsnPkxvbmctc2l6ZSBsaW5lIHdpdGggc29tZSBmb28gYmFyIGJheiBj
b250ZW50PC9wPjxwIHN0eWxlPSd0ZXh0LWFsaWduOiBjZW50ZXI7Jz5TaG9ydCBsaW5lPC9wPjxw
IHN0eWxlPSd0ZXh0LWFsaWduOiBjZW50ZXI7Jz5UaGlzIGlzIGEgbXVsdGktbGluZSBwYXJhZ3Jh
cGg8YnIgLz53aGVyZSB0aGUgZmlyc3QgbGluZTxiciAvPmlzIHRoZSBiaWdnZXN0IG9uZTwvcD48
L2JvZHk+PC9odG1sPiI7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb250ZW50cyA9ICI8aHRtbD48
Ym9keT48cD5UaGlzIGlzIGEgdGVzdC4gVGhpcyBpcyB0aGUgc2Vjb25kIHNlbnRlbmNlLiBBbmQg
dGhpcyB0aGUgdGhpcmQuPC9wPjwvYm9keT48L2h0bWw+IjsKKworc3RhdGljIGNvbnN0IGNoYXIq
IGNvbnRlbnRzSW5UYWJsZVdpdGhIZWFkZXJzID0gIjxodG1sPjxib2R5Pjx0YWJsZT48dHI+PHRo
PmZvbzwvdGg+PHRoPmJhcjwvdGg+PHRoIGNvbHNwYW49JzInPmJhejwvdGg+PC90cj48dHI+PHRo
PnF1eDwvdGg+PHRkPjE8L3RkPjx0ZD4yPC90ZD48dGQ+MzwvdGQ+PC90cj48dHI+PHRoIHJvd3Nw
YW49JzInPnF1dXg8L3RoPjx0ZD40PC90ZD48dGQ+NTwvdGQ+PHRkPjY8L3RkPjwvdHI+PHRyPjx0
ZD42PC90ZD48dGQ+NzwvdGQ+PHRkPjg8L3RkPjwvdHI+PHRyPjx0aD5jb3JnZTwvdGg+PHRkPjk8
L3RkPjx0ZD4xMDwvdGQ+PHRkPjExPC90ZD48L3RyPjwvdGFibGU+PHRhYmxlPjx0cj48dGQ+MTwv
dGQ+PHRkPjI8L3RkPjwvdHI+PHRyPjx0ZD4zPC90ZD48dGQ+NDwvdGQ+PC90cj48L3RhYmxlPjwv
Ym9keT48L2h0bWw+IjsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnRlbnRzV2l0aEV4dHJhbmVv
dXNXaGl0ZVNwYWNlcyA9ICI8aHRtbD48aGVhZD48Ym9keT48cD5UaGlzXG4gICAgICAgICAgICAg
ICAgICAgICAgICAgIHBhcmFncmFwaFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JrZWQhPC9w
PjwvYm9keT48L2h0bWw+IjsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbWJvQm94U2VsZWN0b3Ig
PSAiPGh0bWw+PGJvZHk+PHNlbGVjdD48b3B0aW9uIHNlbGVjdGVkIHZhbHVlPSdmb28nPmZvbzwv
b3B0aW9uPjxvcHRpb24gdmFsdWU9J2Jhcic+YmFyPC9vcHRpb24+PC9zZWxlY3Q+PC9ib2R5Pjwv
aHRtbD4iOworCitzdGF0aWMgY29uc3QgY2hhciogZW1iZWRkZWRPYmplY3RzID0gIjxodG1sPjxi
b2R5PjxwPkNob29zZTogPGlucHV0IHZhbHVlPSdmb28nIHR5cGU9J2NoZWNrYm94Jy8+Zm9vIDxp
bnB1dCB2YWx1ZT0nYmFyJyB0eXBlPSdjaGVja2JveCcvPmJhciAocGljayBvbmUpPC9wPjxwPkNo
b29zZTogPHNlbGVjdCBuYW1lPSdmb28nPjxvcHRpb24+YmFyPC9vcHRpb24+PG9wdGlvbj5iYXo8
L29wdGlvbj48L3NlbGVjdD4gKHBpY2sgb25lKTwvcD48cD48aW5wdXQgbmFtZT0nZm9vYmFyYnV0
dG9uJyB2YWx1ZT0nZm9vYmFyJyB0eXBlPSdidXR0b24nLz48L3A+PC9ib2R5PjwvaHRtbD4iOwor
CitzdGF0aWMgY29uc3QgY2hhciogZm9ybVdpdGhUZXh0SW5wdXRzID0gIjxodG1sPjxib2R5Pjxm
b3JtPjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdlbnRyeScgLz48aW5wdXQgdHlwZT0ncGFzc3dv
cmQnIG5hbWU9J3Bhc3N3b3JkRW50cnknIC8+PC9mb3JtPjwvYm9keT48L2h0bWw+IjsKKworc3Rh
dGljIGNvbnN0IGNoYXIqIGh5cGVydGV4dEFuZEh5cGVybGlua3MgPSAiPGh0bWw+PGJvZHk+PHA+
QSBwYXJhZ3JhcGggd2l0aCBubyBsaW5rcyBhdCBhbGw8L3A+PHA+PGEgaHJlZj0naHR0cDovL2Zv
by5iYXIuYmF6Lyc+QSBsaW5lPC9hPiB3aXRoIDxhIGhyZWY9J2h0dHA6Ly9iYXIuYmF6LmZvby8n
PmEgbGluayBpbiB0aGUgbWlkZGxlPC9hPiBhcyB3ZWxsIGFzIGF0IHRoZSBiZWdpbm5pbmcgYW5k
IDxhIGhyZWY9J2h0dHA6Ly9iYXouZm9vLmJhci8nPmF0IHRoZSBlbmQ8L2E+PC9wPjxvbD48bGk+
TGlzdCBpdGVtIHdpdGggYSA8c3Bhbj48YSBocmVmPSdodHRwOi8vZm9vLmJhci5iYXovJz5saW5r
IGluc2lkZSBhIHNwYW4gbm9kZTwvYT48L3NwYW4+PC9saT48L29sPjwvYm9keT48L2h0bWw+IjsK
Kworc3RhdGljIGNvbnN0IGNoYXIqIGxheW91dEFuZERhdGFUYWJsZXMgPSAiPGh0bWw+PGJvZHk+
PHRhYmxlPjx0cj48dGg+T2RkPC90aD48dGg+RXZlbjwvdGg+PC90cj48dHI+PHRkPjE8L3RkPjx0
ZD4yPC90ZD48L3RyPjwvdGFibGU+PHRhYmxlPjx0cj48dGQ+Zm9vPC90ZD48dGQ+YmFyPC90ZD48
L3RyPjwvdGFibGU+PC9ib2R5PjwvaHRtbD4iOworCitzdGF0aWMgY29uc3QgY2hhciogbGlua3NX
aXRoSW5saW5lSW1hZ2VzID0gIjxodG1sPjxoZWFkPjxzdHlsZT5hLmh0dHA6YmVmb3JlIHtjb250
ZW50OiB1cmwobm8taW1hZ2UucG5nKTt9PC9zdHlsZT48Ym9keT48cD48YSBjbGFzcz0naHR0cCcg
aHJlZj0nZm9vJz5mb288L2E+IGJhciBiYXo8L3A+PHA+Zm9vIDxhIGNsYXNzPSdodHRwJyBocmVm
PSdiYXInPmJhcjwvYT4gYmF6PC9wPjxwPmZvbyBiYXIgPGEgY2xhc3M9J2h0dHAnIGhyZWY9J2Jh
eic+YmF6PC9hPjwvcD48L2JvZHk+PC9odG1sPiI7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBsaXN0
c09mSXRlbXMgPSAiPGh0bWw+PGJvZHk+PHVsPjxsaT50ZXh0IG9ubHk8L2xpPjxsaT48YSBocmVm
PSdmb28nPmxpbmsgb25seTwvYT48L2xpPjxsaT50ZXh0IGFuZCBhIDxhIGhyZWY9J2Jhcic+bGlu
azwvYT48L2xpPjwvdWw+PG9sPjxsaT50ZXh0IG9ubHk8L2xpPjxsaT48YSBocmVmPSdmb28nPmxp
bmsgb25seTwvYT48L2xpPjxsaT50ZXh0IGFuZCBhIDxhIGhyZWY9J2Jhcic+bGluazwvYT48L2xp
Pjwvb2w+PC9ib2R5PjwvaHRtbD4iOworCitzdGF0aWMgY29uc3QgY2hhciogdGV4dEZvckNhcmV0
QnJvd3NpbmcgPSAiPGh0bWw+PGJvZHk+PGgxPkEgdGV4dCBoZWFkZXI8L2gxPjxwPkEgcGFyYWdy
YXBoIDxhIGhyZWY9J2h0dHA6Ly9mb28uYmFyLmJhei8nPndpdGggYSBsaW5rPC9hPiBpbiB0aGUg
bWlkZGxlPC9wPjxvbD48bGk+QSBsaXN0IGl0ZW08L2xpPjxsaT48c3BhbiBzdHlsZT0nZGlzcGxh
eTpibG9jazsnPkJsb2NrIHNwYW4gaW4gYSBsaXN0IGl0ZW08L3NwYW4+PHNwYW4+SW5saW5lIHNw
YW4gaW4gYSBsaXN0IGl0ZW08L3NwYW4+PC9saT48bGk+PGEgaHJlZj0nZm9vJz48c3BhbiBzdHls
ZT0nZGlzcGxheTpibG9jazsnPkJsb2NrIHNwYW4gaW4gYSBsaW5rIGluIGEgbGlzdCBpdGVtPC9z
cGFuPjxzcGFuPklubGluZSBzcGFuIGluIGEgbGluayBpbiBhIGxpc3QgaXRlbTwvc3Bhbj48L2E+
PC9saT48L29sPjxzZWxlY3Q+PG9wdGlvbiBzZWxlY3RlZCB2YWx1ZT0nZm9vJz5BbiBvcHRpb24g
aW4gYSBjb21ibyBib3g8L29wdGlvbj48L3NlbGVjdD48aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0n
Zm9vJyB2YWx1ZT0nZm9vIGJhciBiYXonIC8+PHRhYmxlPjx0cj48dGQ+YSB0YWJsZSBjZWxsPC90
ZD48dGQ+PC90ZD48dGQ+PGEgaHJlZj0nZm9vJz48c3BhbiBzdHlsZT0nZGlzcGxheTpibG9jazsn
PkJsb2NrIHNwYW4gaW4gYSBsaW5rIGluIGEgdGFibGUgY2VsbDwvc3Bhbj48c3Bhbj5JbmxpbmUg
c3BhbiBpbiBhIGxpbmsgaW4gYSB0YWJsZSBjZWxsPC9zcGFuPjwvYT48L3RkPjx0ZD48c3BhbiBz
dHlsZT0nZGlzcGxheTpibG9jazsnPkJsb2NrIHNwYW4gaW4gYSB0YWJsZSBjZWxsPC9zcGFuPjxz
cGFuPklubGluZSBzcGFuIGluIGEgdGFibGUgY2VsbDwvc3Bhbj48L3RkPjwvdHI+PC90YWJsZT48
aDQ+PGEgaHJlZj0nZm9vJz48c3BhbiBzdHlsZT0nZGlzcGxheTpibG9jazsnPkJsb2NrIHNwYW4g
aW4gYSBsaW5rIGluIGEgaGVhZGluZzwvc3Bhbj48c3Bhbj5JbmxpbmUgc3BhbiBpbiBhIGxpbmsg
aW4gYSBoZWFkaW5nPC9zcGFuPjwvaDQ+PGg0PjxzcGFuIHN0eWxlPSdkaXNwbGF5OmJsb2NrOyc+
QmxvY2sgc3BhbiBpbiBhIGhlYWRpbmc8L3NwYW4+PHNwYW4+SW5saW5lIHNwYW4gaW4gYSBoZWFk
aW5nPC9zcGFuPjwvaDQ+PC9ib2R5PjwvaHRtbD4iOworCitzdGF0aWMgY29uc3QgY2hhciogdGV4
dEZvclNlbGVjdGlvbnMgPSAiPGh0bWw+PGJvZHk+PHA+QSBwYXJhZ3JhcGggd2l0aCBwbGFpbiB0
ZXh0PC9wPjxwPkEgcGFyYWdyYXBoIHdpdGggPGEgaHJlZj0naHR0cDovL3dlYmtpdC5vcmcnPmEg
bGluazwvYT4gaW4gdGhlIG1pZGRsZTwvcD48b2w+PGxpPkEgbGlzdCBpdGVtPC9saT48L29sPjxz
ZWxlY3Q+PC9ib2R5PjwvaHRtbD4iOworCitzdGF0aWMgY29uc3QgY2hhciogdGV4dFdpdGhBdHRy
aWJ1dGVzID0gIjxodG1sPjxoZWFkPjxzdHlsZT4uc3QxIHtmb250LWZhbWlseTogbW9ub3NwYWNl
OyBjb2xvcjpyZ2IoMTIwLDEyMSwxMjIpO30gLnN0MiB7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGlu
ZTsgYmFja2dyb3VuZC1jb2xvcjpyZ2IoODAsODEsODIpO308L3N0eWxlPjwvaGVhZD48Ym9keT48
cCBzdHlsZT1cImZvbnQtc2l6ZToxNDsgdGV4dC1hbGlnbjpyaWdodDtcIj5UaGlzIGlzIHRoZSA8
aT5maXJzdDwvaT48Yj4gc2VudGVuY2Ugb2YgdGhpcyB0ZXh0LjwvYj48L3A+PHAgY2xhc3M9XCJz
dDFcIj5UaGlzIHNlbnRlbmNlIHNob3VsZCBoYXZlIGFuIHN0eWxlIGFwcGxpZWQgPHNwYW4gY2xh
c3M9XCJzdDJcIj5hbmQgdGhpcyBwYXJ0IHNob3VsZCBoYXZlIGFub3RoZXIgb25lPC9zcGFuPi48
L3A+PHA+eDxzdWI+MTwvc3ViPjxzdXA+Mjwvc3VwPj14PHN1Yj4yPC9zdWI+PHN1cD4zPC9zdXA+
PC9wPjxwIHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXI7XCI+VGhpcyBzZW50ZW5jZSBpcyB0aGUg
PHN0cmlrZT5sYXN0PC9zdHJpa2U+IG9uZS48L3A+PC9ib2R5PjwvaHRtbD4iOworCitzdGF0aWMg
QXRrT2JqZWN0KiBnZXRXZWJBcmVhT2JqZWN0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCit7Cisg
ICAgLyogTWFudWFsbHkgc3BpbiB0aGUgbWFpbiBjb250ZXh0IHRvIG1ha2Ugc3VyZSB0aGUgYWNj
ZXNzaWJsZQorICAgICAgIG9iamVjdHMgYXJlIHByb3Blcmx5IGNyZWF0ZWQgYmVmb3JlIGNvbnRp
bnVpbmcuICovCisgICAgd2hpbGUgKGdfbWFpbl9jb250ZXh0X3BlbmRpbmcoMCkpCisgICAgICAg
IGdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbigwLCBUUlVFKTsKKworICAgIEF0a09iamVjdCogcm9v
dE9iamVjdCA9IGd0a193aWRnZXRfZ2V0X2FjY2Vzc2libGUoR1RLX1dJREdFVCh3ZWJWaWV3KSk7
CisgICAgaWYgKCFyb290T2JqZWN0KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIEF0a09i
amVjdCogd2ViQXJlYU9iamVjdCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQocm9v
dE9iamVjdCwgMCk7CisgICAgaWYgKCF3ZWJBcmVhT2JqZWN0KQorICAgICAgICByZXR1cm4gTlVM
TDsKKworICAgIC8qIFdlIGRvbid0IG5lZWQgdGhlIGV4dHJhIHJlZiBoZXJlLiAqLworICAgIGdf
b2JqZWN0X3VucmVmKHdlYkFyZWFPYmplY3QpOworCisgICAgcmV0dXJuIHdlYkFyZWFPYmplY3Q7
Cit9CisKK3N0YXRpYyBnY2hhciogdGV4dENhcmV0TW92ZWRSZXN1bHQgPSAwOworCitzdGF0aWMg
dm9pZCB0ZXh0Q2FyZXRNb3ZlZENhbGxiYWNrKEF0a1RleHQqIHRleHQsIGdpbnQgcG9zLCBncG9p
bnRlciBkYXRhKQoreworICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHRleHQpKTsKKworICAgIGdf
ZnJlZSh0ZXh0Q2FyZXRNb3ZlZFJlc3VsdCk7CisgICAgQXRrUm9sZSByb2xlID0gYXRrX29iamVj
dF9nZXRfcm9sZShBVEtfT0JKRUNUKHRleHQpKTsKKyAgICB0ZXh0Q2FyZXRNb3ZlZFJlc3VsdCA9
IGdfc3RyZHVwX3ByaW50ZigifCVzfCVkfCIsIGF0a19yb2xlX2dldF9uYW1lKHJvbGUpLCBwb3Mp
OworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrQ2FyZXRPZmZzZXRzKCkKK3sKKyAgICBX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19u
ZXcoKSk7CisgICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7CisgICAgR3RrQWxsb2NhdGlv
biBhbGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9OworICAgIGd0a193aWRnZXRfc2l6ZV9h
bGxvY2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7CisgICAgd2Via2l0X3dl
Yl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIHRleHRGb3JDYXJldEJyb3dzaW5nLCAwLCAwLCAw
KTsKKworICAgIEF0a09iamVjdCogb2JqZWN0ID0gZ2V0V2ViQXJlYU9iamVjdCh3ZWJWaWV3KTsK
KyAgICBnX2Fzc2VydChvYmplY3QpOworCisgICAgQXRrT2JqZWN0KiBoZWFkZXIgPSBhdGtfb2Jq
ZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMCk7CisgICAgZ19hc3NlcnQoQVRLX0lT
X1RFWFQoaGVhZGVyKSk7CisgICAgZ19zaWduYWxfY29ubmVjdChoZWFkZXIsICJ0ZXh0LWNhcmV0
LW1vdmVkIiwgR19DQUxMQkFDSyh0ZXh0Q2FyZXRNb3ZlZENhbGxiYWNrKSwgMCk7CisKKyAgICAv
KiBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8gcGxhY2UgdGhlIGNhcmV0IGluc2lkZSBhIGhlYWRl
ci4gKi8KKyAgICBnYm9vbGVhbiByZXN1bHQgPSBhdGtfdGV4dF9zZXRfY2FyZXRfb2Zmc2V0KEFU
S19URVhUKGhlYWRlciksIDUpOworICAgIGdfYXNzZXJ0X2NtcGludChyZXN1bHQsID09LCBUUlVF
KTsKKyAgICBnaW50IG9mZnNldCA9IGF0a190ZXh0X2dldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQo
aGVhZGVyKSk7CisgICAgZ19hc3NlcnRfY21waW50KG9mZnNldCwgPT0sIDUpOworICAgIGdfYXNz
ZXJ0X2NtcHN0cih0ZXh0Q2FyZXRNb3ZlZFJlc3VsdCwgPT0sICJ8aGVhZGluZ3w1fCIpOworCisg
ICAgQXRrT2JqZWN0KiBwYXJhZ3JhcGggPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxk
KG9iamVjdCwgMSk7CisgICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQocGFyYWdyYXBoKSk7CisgICAg
Z19zaWduYWxfY29ubmVjdChwYXJhZ3JhcGgsICJ0ZXh0LWNhcmV0LW1vdmVkIiwgR19DQUxMQkFD
Syh0ZXh0Q2FyZXRNb3ZlZENhbGxiYWNrKSwgMCk7CisKKyAgICAvKiBJdCBzaG91bGQgYmUgcG9z
c2libGUgdG8gcGxhY2UgdGhlIGNhcmV0IGluc2lkZSBhIHBhcmFncmFwaCBhbmQgYSBsaW5rLiAq
LworICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQocGFyYWdy
YXBoKSwgNSk7CisgICAgZ19hc3NlcnRfY21waW50KHJlc3VsdCwgPT0sIFRSVUUpOworICAgIG9m
ZnNldCA9IGF0a190ZXh0X2dldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQocGFyYWdyYXBoKSk7Cisg
ICAgZ19hc3NlcnRfY21waW50KG9mZnNldCwgPT0sIDUpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0
ZXh0Q2FyZXRNb3ZlZFJlc3VsdCwgPT0sICJ8cGFyYWdyYXBofDV8Iik7CisKKyAgICByZXN1bHQg
PSBhdGtfdGV4dF9zZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhUKHBhcmFncmFwaCksIDIwKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQocmVzdWx0LCA9PSwgVFJVRSk7CisgICAgb2Zmc2V0ID0gYXRrX3Rl
eHRfZ2V0X2NhcmV0X29mZnNldChBVEtfVEVYVChwYXJhZ3JhcGgpKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQob2Zmc2V0LCA9PSwgMjApOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0Q2FyZXRNb3Zl
ZFJlc3VsdCwgPT0sICJ8cGFyYWdyYXBofDIwfCIpOworCisgICAgcmVzdWx0ID0gYXRrX3RleHRf
c2V0X2NhcmV0X29mZnNldChBVEtfVEVYVChwYXJhZ3JhcGgpLCAzMCk7CisgICAgZ19hc3NlcnRf
Y21waW50KHJlc3VsdCwgPT0sIFRSVUUpOworICAgIG9mZnNldCA9IGF0a190ZXh0X2dldF9jYXJl
dF9vZmZzZXQoQVRLX1RFWFQocGFyYWdyYXBoKSk7CisgICAgZ19hc3NlcnRfY21waW50KG9mZnNl
dCwgPT0sIDMwKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGV4dENhcmV0TW92ZWRSZXN1bHQsID09
LCAifHBhcmFncmFwaHwzMHwiKTsKKworICAgIEF0a09iamVjdCogbGluayA9IGF0a19vYmplY3Rf
cmVmX2FjY2Vzc2libGVfY2hpbGQocGFyYWdyYXBoLCAwKTsKKyAgICBnX2Fzc2VydChBVEtfSVNf
VEVYVChsaW5rKSk7CisKKyAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfY2FyZXRfb2Zmc2V0KEFU
S19URVhUKGxpbmspLCA1KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocmVzdWx0LCA9PSwgVFJVRSk7
CisgICAgb2Zmc2V0ID0gYXRrX3RleHRfZ2V0X2NhcmV0X29mZnNldChBVEtfVEVYVChsaW5rKSk7
CisgICAgZ19hc3NlcnRfY21waW50KG9mZnNldCwgPT0sIDUpOworICAgIC8qIFBvc2l0aW9ucyBp
bnNpZGUgbGlua3MgYXJlIHJlcG9ydGVkIHJlbGF0aXZlIHRvIHRoZSBwYXJhZ3JhcGguICovCisg
ICAgZ19hc3NlcnRfY21wc3RyKHRleHRDYXJldE1vdmVkUmVzdWx0LCA9PSwgInxwYXJhZ3JhcGh8
MTd8Iik7CisKKyAgICBBdGtPYmplY3QqIGxpc3QgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxl
X2NoaWxkKG9iamVjdCwgMik7CisgICAgZ19hc3NlcnQoQVRLX09CSkVDVChsaXN0KSk7CisgICAg
Z19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShsaXN0KSA9PSBBVEtfUk9MRV9MSVNUKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoYXRrX29iamVjdF9nZXRfbl9hY2Nlc3NpYmxlX2NoaWxkcmVuKGxp
c3QpLCA9PSwgMyk7CisKKyAgICBBdGtPYmplY3QqIGxpc3RJdGVtID0gYXRrX29iamVjdF9yZWZf
YWNjZXNzaWJsZV9jaGlsZChsaXN0LCAwKTsKKyAgICBsaXN0SXRlbSA9IGF0a19vYmplY3RfcmVm
X2FjY2Vzc2libGVfY2hpbGQobGlzdCwgMik7CisgICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQobGlz
dEl0ZW0pKTsKKworICAgIC8qIEl0J3Mgbm90IHBvc3NpYmxlIHRvIHBsYWNlIHRoZSBjYXJldCBp
bnNpZGUgYW4gaXRlbSdzIG1hcmtlci4gKi8KKyAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfY2Fy
ZXRfb2Zmc2V0KEFUS19URVhUKGxpc3RJdGVtKSwgMSk7CisgICAgZ19hc3NlcnRfY21waW50KHJl
c3VsdCwgPT0sIEZBTFNFKTsKKworICAgIC8qIEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBwbGFj
ZSB0aGUgY2FyZXQgaW5zaWRlIGFuIGl0ZW0ncyB0ZXh0LiAqLworICAgIHJlc3VsdCA9IGF0a190
ZXh0X3NldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQobGlzdEl0ZW0pLCA1KTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQocmVzdWx0LCA9PSwgVFJVRSk7CisgICAgb2Zmc2V0ID0gYXRrX3RleHRfZ2V0X2Nh
cmV0X29mZnNldChBVEtfVEVYVChsaXN0SXRlbSkpOworICAgIGdfYXNzZXJ0X2NtcGludChvZmZz
ZXQsID09LCA1KTsKKworICAgIEF0a09iamVjdCogcGFuZWwgPSBhdGtfb2JqZWN0X3JlZl9hY2Nl
c3NpYmxlX2NoaWxkKG9iamVjdCwgMyk7CisgICAgZ19hc3NlcnQoQVRLX0lTX09CSkVDVChwYW5l
bCkpOworICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUocGFuZWwpID09IEFUS19ST0xF
X1BBTkVMKTsKKworICAgIEF0a09iamVjdCogY29tYm9Cb3ggPSBhdGtfb2JqZWN0X3JlZl9hY2Nl
c3NpYmxlX2NoaWxkKHBhbmVsLCAwKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfT0JKRUNUKGNvbWJv
Qm94KSk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShjb21ib0JveCkgPT0gQVRL
X1JPTEVfQ09NQk9fQk9YKTsKKworICAgIEF0a09iamVjdCogbWVudVBvcHVwID0gYXRrX29iamVj
dF9yZWZfYWNjZXNzaWJsZV9jaGlsZChjb21ib0JveCwgMCk7CisgICAgZ19hc3NlcnQoQVRLX0lT
X09CSkVDVChtZW51UG9wdXApKTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKG1l
bnVQb3B1cCkgPT0gQVRLX1JPTEVfTUVOVSk7CisKKyAgICBBdGtPYmplY3QqIGNvbWJvQm94T3B0
aW9uID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChtZW51UG9wdXAsIDApOworICAg
IGdfYXNzZXJ0KEFUS19JU19PQkpFQ1QoY29tYm9Cb3hPcHRpb24pKTsKKyAgICBnX2Fzc2VydChh
dGtfb2JqZWN0X2dldF9yb2xlKGNvbWJvQm94T3B0aW9uKSA9PSBBVEtfUk9MRV9NRU5VX0lURU0p
OworCisgICAgLyogSXQncyBub3QgcG9zc2libGUgdG8gcGxhY2UgdGhlIGNhcmV0IGluc2lkZSBh
biBvcHRpb24gZm9yIGEgY29tYm9ib3guICovCisgICAgcmVzdWx0ID0gYXRrX3RleHRfc2V0X2Nh
cmV0X29mZnNldChBVEtfVEVYVChjb21ib0JveE9wdGlvbiksIDEpOworICAgIGdfYXNzZXJ0X2Nt
cGludChyZXN1bHQsID09LCBGQUxTRSk7CisKKyAgICBBdGtPYmplY3QqIHRleHRFbnRyeSA9IGF0
a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQocGFuZWwsIDEpOworICAgIGdfYXNzZXJ0KEFU
S19JU19PQkpFQ1QodGV4dEVudHJ5KSk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9s
ZSh0ZXh0RW50cnkpID09IEFUS19ST0xFX0VOVFJZKTsKKworICAgIHJlc3VsdCA9IGF0a190ZXh0
X3NldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQodGV4dEVudHJ5KSwgNSk7CisgICAgZ19hc3NlcnRf
Y21waW50KHJlc3VsdCwgPT0sIFRSVUUpOworICAgIG9mZnNldCA9IGF0a190ZXh0X2dldF9jYXJl
dF9vZmZzZXQoQVRLX1RFWFQodGV4dEVudHJ5KSk7CisgICAgZ19hc3NlcnRfY21waW50KG9mZnNl
dCwgPT0sIDUpOworCisgICAgQXRrT2JqZWN0KiB0YWJsZSA9IGF0a19vYmplY3RfcmVmX2FjY2Vz
c2libGVfY2hpbGQob2JqZWN0LCA0KTsKKyAgICBnX2Fzc2VydChBVEtfSVNfT0JKRUNUKHRhYmxl
KSk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZSh0YWJsZSkgPT0gQVRLX1JPTEVf
VEFCTEUpOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfb2JqZWN0X2dldF9uX2FjY2Vzc2libGVf
Y2hpbGRyZW4odGFibGUpLCA9PSwgNCk7CisKKyAgICBBdGtPYmplY3QqIHRhYmxlQ2VsbCA9IGF0
a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQodGFibGUsIDApOworICAgIGdfYXNzZXJ0KGF0
a19vYmplY3RfZ2V0X3JvbGUodGFibGVDZWxsKSA9PSBBVEtfUk9MRV9UQUJMRV9DRUxMKTsKKyAg
ICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhUKHRhYmxlQ2VsbCks
IDIpOworICAgIGdfYXNzZXJ0X2NtcGludChyZXN1bHQsID09LCBUUlVFKTsKKyAgICBvZmZzZXQg
PSBhdGtfdGV4dF9nZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhUKHRhYmxlQ2VsbCkpOworICAgIGdf
YXNzZXJ0X2NtcGludChvZmZzZXQsID09LCAyKTsKKworICAgIGdfZnJlZSh0ZXh0Q2FyZXRNb3Zl
ZFJlc3VsdCk7CisKKyAgICBnX29iamVjdF91bnJlZihwYXJhZ3JhcGgpOworICAgIGdfb2JqZWN0
X3VucmVmKGxpbmspOworICAgIGdfb2JqZWN0X3VucmVmKGxpc3QpOworICAgIGdfb2JqZWN0X3Vu
cmVmKGxpc3RJdGVtKTsKKyAgICBnX29iamVjdF91bnJlZihwYW5lbCk7CisgICAgZ19vYmplY3Rf
dW5yZWYoY29tYm9Cb3gpOworICAgIGdfb2JqZWN0X3VucmVmKG1lbnVQb3B1cCk7CisgICAgZ19v
YmplY3RfdW5yZWYoY29tYm9Cb3hPcHRpb24pOworICAgIGdfb2JqZWN0X3VucmVmKHRleHRFbnRy
eSk7CisgICAgZ19vYmplY3RfdW5yZWYodGFibGUpOworICAgIGdfb2JqZWN0X3VucmVmKHRhYmxl
Q2VsbCk7CisgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Cit9CisKK3N0YXRpYyB2b2lkIHRl
c3RXZWJraXRBdGtDYXJldE9mZnNldHNBbmRFeHRyYW5vdXNXaGl0ZVNwYWNlcygpCit7CisgICAg
V2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdf
bmV3KCkpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOworICAgIEd0a0FsbG9jYXRp
b24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgODAwLCA2MDAgfTsKKyAgICBndGtfd2lkZ2V0X3NpemVf
YWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOworICAgIHdlYmtpdF93
ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LCBjb250ZW50c1dpdGhFeHRyYW5lb3VzV2hpdGVT
cGFjZXMsIDAsIDAsIDApOworCisgICAgLyogRW5hYmxlIGNhcmV0IGJyb3dzaW5nLiAqLworICAg
IFdlYktpdFdlYlNldHRpbmdzKiBzZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGlu
Z3Mod2ViVmlldyk7CisgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKHNldHRpbmdzKSwgImVuYWJs
ZS1jYXJldC1icm93c2luZyIsIFRSVUUsIE5VTEwpOworCisgICAgLyogR2V0IHRvIHRoZSBpbm5l
ciBBdGtUZXh0IG9iamVjdC4gKi8KKyAgICBBdGtPYmplY3QqIG9iamVjdCA9IGdldFdlYkFyZWFP
YmplY3Qod2ViVmlldyk7CisgICAgZ19hc3NlcnQob2JqZWN0KTsKKyAgICBvYmplY3QgPSBhdGtf
b2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMCk7CisgICAgZ19hc3NlcnQob2Jq
ZWN0KTsKKworICAgIEF0a1RleHQqIHRleHRPYmplY3QgPSBBVEtfVEVYVChvYmplY3QpOworICAg
IGdfYXNzZXJ0KEFUS19JU19URVhUKHRleHRPYmplY3QpKTsKKworICAgIGdpbnQgY2hhcmFjdGVy
Q291bnQgPSBhdGtfdGV4dF9nZXRfY2hhcmFjdGVyX2NvdW50KHRleHRPYmplY3QpOworICAgIGdf
YXNzZXJ0X2NtcGludChjaGFyYWN0ZXJDb3VudCwgPT0sIDI1KTsKKworICAgIGdib29sZWFuIHJl
c3VsdCA9IGF0a190ZXh0X3NldF9jYXJldF9vZmZzZXQodGV4dE9iamVjdCwgY2hhcmFjdGVyQ291
bnQgLSAxKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocmVzdWx0LCA9PSwgVFJVRSk7CisKKyAgICBn
aW50IGNhcmV0T2Zmc2V0ID0gYXRrX3RleHRfZ2V0X2NhcmV0X29mZnNldCh0ZXh0T2JqZWN0KTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoY2FyZXRPZmZzZXQsID09LCBjaGFyYWN0ZXJDb3VudCAtIDEp
OworCisgICAgcmVzdWx0ID0gYXRrX3RleHRfc2V0X2NhcmV0X29mZnNldCh0ZXh0T2JqZWN0LCBj
aGFyYWN0ZXJDb3VudCk7CisgICAgZ19hc3NlcnRfY21waW50KHJlc3VsdCwgPT0sIFRSVUUpOwor
CisgICAgY2FyZXRPZmZzZXQgPSBhdGtfdGV4dF9nZXRfY2FyZXRfb2Zmc2V0KHRleHRPYmplY3Qp
OworICAgIGdfYXNzZXJ0X2NtcGludChjYXJldE9mZnNldCwgPT0sIGNoYXJhY3RlckNvdW50KTsK
KworICAgIGdfb2JqZWN0X3VucmVmKG9iamVjdCk7CisgICAgZ19vYmplY3RfdW5yZWYod2ViVmll
dyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtDb21ib0JveCgpCit7CisgICAgV2Vi
S2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3
KCkpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOworICAgIEd0a0FsbG9jYXRpb24g
YWxsb2NhdGlvbiA9IHsgMCwgMCwgODAwLCA2MDAgfTsKKyAgICBndGtfd2lkZ2V0X3NpemVfYWxs
b2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOworICAgIHdlYmtpdF93ZWJf
dmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LCBjb21ib0JveFNlbGVjdG9yLCAwLCAwLCAwKTsKKwor
ICAgIEF0a09iamVjdCogb2JqZWN0ID0gZ2V0V2ViQXJlYU9iamVjdCh3ZWJWaWV3KTsKKyAgICBn
X2Fzc2VydChvYmplY3QpOworCisgICAgQXRrT2JqZWN0KiBmb3JtT2JqZWN0ID0gYXRrX29iamVj
dF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDApOworICAgIGdfYXNzZXJ0KGZvcm1PYmpl
Y3QpOworCisgICAgQXRrT2JqZWN0KiBjb21ib0JveCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2li
bGVfY2hpbGQoZm9ybU9iamVjdCwgMCk7CisgICAgZ19hc3NlcnQoQVRLX0lTX09CSkVDVChjb21i
b0JveCkpOworCisgICAgQXRrT2JqZWN0KiBtZW51UG9wdXAgPSBhdGtfb2JqZWN0X3JlZl9hY2Nl
c3NpYmxlX2NoaWxkKGNvbWJvQm94LCAwKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfT0JKRUNUKG1l
bnVQb3B1cCkpOworCisgICAgQXRrT2JqZWN0KiBpdGVtMSA9IGF0a19vYmplY3RfcmVmX2FjY2Vz
c2libGVfY2hpbGQobWVudVBvcHVwLCAwKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfT0JKRUNUKGl0
ZW0xKSk7CisKKyAgICBBdGtPYmplY3QqIGl0ZW0yID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJs
ZV9jaGlsZChtZW51UG9wdXAsIDEpOworICAgIGdfYXNzZXJ0KEFUS19JU19PQkpFQ1QoaXRlbTIp
KTsKKworICAgIC8qIENoZWNrIHJvbGVzLiAqLworICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0
X3JvbGUoY29tYm9Cb3gpID09IEFUS19ST0xFX0NPTUJPX0JPWCk7CisgICAgZ19hc3NlcnQoYXRr
X29iamVjdF9nZXRfcm9sZShtZW51UG9wdXApID09IEFUS19ST0xFX01FTlUpOworICAgIGdfYXNz
ZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoaXRlbTEpID09IEFUS19ST0xFX01FTlVfSVRFTSk7Cisg
ICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShpdGVtMikgPT0gQVRLX1JPTEVfTUVOVV9J
VEVNKTsKKworICAgIC8qIENoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQXRrU2VsZWN0
aW9uIGludGVyZmFjZS4gKi8KKyAgICBnX2Fzc2VydChBVEtfSVNfU0VMRUNUSU9OKGNvbWJvQm94
KSk7CisgICAgQXRrU2VsZWN0aW9uKiBhdGtTZWxlY3Rpb24gPSBBVEtfU0VMRUNUSU9OKGNvbWJv
Qm94KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX3NlbGVjdGlvbl9nZXRfc2VsZWN0aW9uX2Nv
dW50KGF0a1NlbGVjdGlvbiksID09LCAxKTsKKyAgICBnX2Fzc2VydChhdGtfc2VsZWN0aW9uX2lz
X2NoaWxkX3NlbGVjdGVkKGF0a1NlbGVjdGlvbiwgMCkpOworICAgIGdfYXNzZXJ0KCFhdGtfc2Vs
ZWN0aW9uX2lzX2NoaWxkX3NlbGVjdGVkKGF0a1NlbGVjdGlvbiwgMSkpOworICAgIEF0a09iamVj
dCogc2VsZWN0ZWRJdGVtID0gYXRrX3NlbGVjdGlvbl9yZWZfc2VsZWN0aW9uKGF0a1NlbGVjdGlv
biwgMCk7CisgICAgZ19hc3NlcnQoc2VsZWN0ZWRJdGVtID09IGl0ZW0xKTsKKyAgICBnX29iamVj
dF91bnJlZihzZWxlY3RlZEl0ZW0pOworCisgICAgLyogQ2hlY2sgdGhhdCB0aGUgbWVudSBwb3B1
cCBoYXMgMCBsaW5rcyBhbmQgZG9lc24ndCBjcmFzaCBmcm9tIGNoZWNraW5nLiAqLworICAgIGdp
bnQgbkxpbmtzID0gYXRrX2h5cGVydGV4dF9nZXRfbl9saW5rcyhBVEtfSFlQRVJURVhUKG1lbnVQ
b3B1cCkpOworICAgIGdfYXNzZXJ0X2NtcGludChuTGlua3MsID09LCAwKTsKKworICAgIC8qIENo
ZWNrIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIEF0a0FjdGlvbiBpbnRlcmZhY2UuICovCisg
ICAgZ19hc3NlcnQoQVRLX0lTX0FDVElPTihjb21ib0JveCkpOworICAgIEF0a0FjdGlvbiogYXRr
QWN0aW9uID0gQVRLX0FDVElPTihjb21ib0JveCk7CisgICAgZ19hc3NlcnRfY21waW50KGF0a19h
Y3Rpb25fZ2V0X25fYWN0aW9ucyhhdGtBY3Rpb24pLCA9PSwgMSk7CisgICAgZ19hc3NlcnQoYXRr
X2FjdGlvbl9kb19hY3Rpb24oYXRrQWN0aW9uLCAwKSk7CisKKyAgICBnX2Fzc2VydChBVEtfSVNf
QUNUSU9OKG1lbnVQb3B1cCkpOworICAgIGF0a0FjdGlvbiA9IEFUS19BQ1RJT04obWVudVBvcHVw
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2FjdGlvbl9nZXRfbl9hY3Rpb25zKGF0a0FjdGlv
biksID09LCAxKTsKKyAgICBnX2Fzc2VydChhdGtfYWN0aW9uX2RvX2FjdGlvbihhdGtBY3Rpb24s
IDApKTsKKworICAgIGdfYXNzZXJ0KEFUS19JU19BQ1RJT04oaXRlbTEpKTsKKyAgICBhdGtBY3Rp
b24gPSBBVEtfQUNUSU9OKGl0ZW0xKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2FjdGlvbl9n
ZXRfbl9hY3Rpb25zKGF0a0FjdGlvbiksID09LCAxKTsKKyAgICBnX2Fzc2VydChhdGtfYWN0aW9u
X2RvX2FjdGlvbihhdGtBY3Rpb24sIDApKTsKKworICAgIGdfYXNzZXJ0KEFUS19JU19BQ1RJT04o
aXRlbTIpKTsKKyAgICBhdGtBY3Rpb24gPSBBVEtfQUNUSU9OKGl0ZW0yKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoYXRrX2FjdGlvbl9nZXRfbl9hY3Rpb25zKGF0a0FjdGlvbiksID09LCAxKTsKKyAg
ICBnX2Fzc2VydChhdGtfYWN0aW9uX2RvX2FjdGlvbihhdGtBY3Rpb24sIDApKTsKKworICAgIC8q
IEFmdGVyIHNlbGVjdGluZyB0aGUgc2Vjb25kIGl0ZW0sIHNlbGVjdGlvbiBzaG91bGQgaGF2ZSBj
aGFuZ2VkLiAqLworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfc2VsZWN0aW9uX2dldF9zZWxlY3Rp
b25fY291bnQoYXRrU2VsZWN0aW9uKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0KCFhdGtfc2VsZWN0
aW9uX2lzX2NoaWxkX3NlbGVjdGVkKGF0a1NlbGVjdGlvbiwgMCkpOworICAgIGdfYXNzZXJ0KGF0
a19zZWxlY3Rpb25faXNfY2hpbGRfc2VsZWN0ZWQoYXRrU2VsZWN0aW9uLCAxKSk7CisgICAgc2Vs
ZWN0ZWRJdGVtID0gYXRrX3NlbGVjdGlvbl9yZWZfc2VsZWN0aW9uKGF0a1NlbGVjdGlvbiwgMCk7
CisgICAgZ19hc3NlcnQoc2VsZWN0ZWRJdGVtID09IGl0ZW0yKTsKKyAgICBnX29iamVjdF91bnJl
ZihzZWxlY3RlZEl0ZW0pOworCisgICAgZ19vYmplY3RfdW5yZWYoZm9ybU9iamVjdCk7CisgICAg
Z19vYmplY3RfdW5yZWYoY29tYm9Cb3gpOworICAgIGdfb2JqZWN0X3VucmVmKG1lbnVQb3B1cCk7
CisgICAgZ19vYmplY3RfdW5yZWYoaXRlbTEpOworICAgIGdfb2JqZWN0X3VucmVmKGl0ZW0yKTsK
KyAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKK30KKworc3RhdGljIGdjaGFyKiBsb2FkaW5n
RXZlbnRzUmVzdWx0ID0gMDsKKworc3RhdGljIHZvaWQgdXBkYXRlTG9hZGluZ0V2ZW50c1Jlc3Vs
dChjb25zdCBnY2hhciogc2lnbmFsTmFtZSkKK3sKKyAgICBnX2Fzc2VydChzaWduYWxOYW1lKTsK
KworICAgIGdjaGFyKiBwcmV2aW91c1Jlc3VsdCA9IGxvYWRpbmdFdmVudHNSZXN1bHQ7CisgICAg
bG9hZGluZ0V2ZW50c1Jlc3VsdCA9IGdfc3RyZHVwX3ByaW50ZigiJXN8JXMiLCBwcmV2aW91c1Jl
c3VsdCwgc2lnbmFsTmFtZSk7CisgICAgZ19mcmVlKHByZXZpb3VzUmVzdWx0KTsKK30KKworc3Rh
dGljIGdib29sZWFuIGRvY3VtZW50TG9hZGluZ0V2ZW50Q2FsbGJhY2soR1NpZ25hbEludm9jYXRp
b25IaW50ICpzaWduYWxIaW50LCBndWludCBudW1QYXJhbVZhbHVlcywgY29uc3QgR1ZhbHVlICpw
YXJhbVZhbHVlcywgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICAvLyBBdCBsZWFzdCB3ZSBzaG91bGQg
cmVjZWl2ZSB0aGUgaW5zdGFuY2UgZW1pdHRpbmcgdGhlIHNpZ25hbC4KKyAgICBpZiAobnVtUGFy
YW1WYWx1ZXMgPCAxKQorICAgICAgICByZXR1cm4gVFJVRTsKKworICAgIEdTaWduYWxRdWVyeSBz
aWduYWxfcXVlcnk7CisgICAgZ19zaWduYWxfcXVlcnkoc2lnbmFsSGludC0+c2lnbmFsX2lkLCAm
c2lnbmFsX3F1ZXJ5KTsKKworICAgIHVwZGF0ZUxvYWRpbmdFdmVudHNSZXN1bHQoc2lnbmFsX3F1
ZXJ5LnNpZ25hbF9uYW1lKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQgdGVz
dFdlYmtpdEF0a0RvY3VtZW50TG9hZGluZ0V2ZW50cygpCit7CisgICAgV2ViS2l0V2ViVmlldyog
d2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdf
b2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9
IHsgMCwgMCwgODAwLCA2MDAgfTsKKyAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJ
REdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOworCisgICAgLyogQ29ubmVjdCBnbG9iYWxseSB0
byBzZWUgdGhvc2UgZXZlbnRzIGR1cmluZyBhIGZ1dHVyZSBsb2FkLiAqLworICAgIGd1aW50IGxv
YWRDb21wbGV0ZUxpc3RlbmVySWQgPSBhdGtfYWRkX2dsb2JhbF9ldmVudF9saXN0ZW5lcihkb2N1
bWVudExvYWRpbmdFdmVudENhbGxiYWNrLCAiQVRLOkF0a0RvY3VtZW50OmxvYWQtY29tcGxldGUi
KTsKKworICAgIC8qIERvIHRoZSBsb2FkLCBzbyB3ZSBjYW4gc2VlIHRob3NlIGV2ZW50cyBoYXBw
ZW5pbmcuICovCisgICAgbG9hZGluZ0V2ZW50c1Jlc3VsdCA9IGdfc3RyZHVwKCIiKTsKKyAgICB3
ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgY29udGVudHMsIDAsIDAsIDApOwor
CisgICAgLyogVHJpZ2dlciB0aGUgY3JlYXRpb24gb2YgdGhlIGZ1bGwgYWNjZXNzaWJpbGl0eSBo
aWVyYXJjaHkgYnkKKyAgICAgICBhc2tpbmcgZm9yIHRoZSB3ZWJBcmVhIG9iamVjdCwgc28gd2Ug
Y2FuIGxpc3RlbiB0byBldmVudHMuICovCisgICAgZ2V0V2ViQXJlYU9iamVjdCh3ZWJWaWV3KTsK
KworICAgIGF0a19yZW1vdmVfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGxvYWRDb21wbGV0ZUxpc3Rl
bmVySWQpOworCisgICAgZ19hc3NlcnRfY21wc3RyKGxvYWRpbmdFdmVudHNSZXN1bHQsID09LCAi
fGxvYWQtY29tcGxldGUiKTsKKworICAgIGdfZnJlZShsb2FkaW5nRXZlbnRzUmVzdWx0KTsKKyAg
ICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0
a0VtYmVkZGVkT2JqZWN0cygpCit7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJ
VF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3JlZl9zaW5r
KHdlYlZpZXcpOworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgODAwLCA2
MDAgfTsKKyAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3KSwg
JmFsbG9jYXRpb24pOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LCBl
bWJlZGRlZE9iamVjdHMsIDAsIDAsIDApOworCisgICAgQXRrT2JqZWN0KiBvYmplY3QgPSBnZXRX
ZWJBcmVhT2JqZWN0KHdlYlZpZXcpOworICAgIGdfYXNzZXJ0KG9iamVjdCk7CisKKyAgICBBdGtU
ZXh0KiBwYXJhZ3JhcGgxID0gQVRLX1RFWFQoYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGls
ZChvYmplY3QsIDApKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChwYXJhZ3JhcGgxKSk7Cisg
ICAgZ19hc3NlcnQoQVRLX0lTX0hZUEVSVEVYVChwYXJhZ3JhcGgxKSk7CisKKyAgICBnaW50IG5M
aW5rcyA9IGF0a19oeXBlcnRleHRfZ2V0X25fbGlua3MoQVRLX0hZUEVSVEVYVChwYXJhZ3JhcGgx
KSk7CisgICAgZ19hc3NlcnRfY21waW50KG5MaW5rcywgPT0sIDIpOworCisgICAgQXRrSHlwZXJs
aW5rKiBoTGluayA9IGF0a19oeXBlcnRleHRfZ2V0X2xpbmsoQVRLX0hZUEVSVEVYVChwYXJhZ3Jh
cGgxKSwgMCk7CisgICAgZ19hc3NlcnQoQVRLX0hZUEVSTElOSyhoTGluaykpOworICAgIEF0a09i
amVjdCogaExpbmtPYmplY3QgPSBhdGtfaHlwZXJsaW5rX2dldF9vYmplY3QoaExpbmssIDApOwor
ICAgIGdfYXNzZXJ0KEFUS19PQkpFQ1QoaExpbmtPYmplY3QpKTsKKyAgICBnX2Fzc2VydChhdGtf
b2JqZWN0X2dldF9yb2xlKGhMaW5rT2JqZWN0KSA9PSBBVEtfUk9MRV9DSEVDS19CT1gpOworICAg
IGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9zdGFydF9pbmRleChoTGluayksID09
LCA4KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfZW5kX2luZGV4KGhM
aW5rKSwgPT0sIDkpOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9uX2Fu
Y2hvcnMoaExpbmspLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGF0a19oeXBlcmxpbmtf
Z2V0X3VyaShoTGluaywgMCksID09LCAwKTsKKworICAgIEF0a1RleHQqIHBhcmFncmFwaDIgPSBB
VEtfVEVYVChhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMSkpOworICAg
IGdfYXNzZXJ0KEFUS19JU19IWVBFUlRFWFQocGFyYWdyYXBoMikpOworCisgICAgbkxpbmtzID0g
YXRrX2h5cGVydGV4dF9nZXRfbl9saW5rcyhBVEtfSFlQRVJURVhUKHBhcmFncmFwaDIpKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQobkxpbmtzLCA9PSwgMSk7CisKKyAgICBoTGluayA9IGF0a19oeXBl
cnRleHRfZ2V0X2xpbmsoQVRLX0hZUEVSVEVYVChwYXJhZ3JhcGgyKSwgMCk7CisgICAgZ19hc3Nl
cnQoQVRLX0hZUEVSTElOSyhoTGluaykpOworICAgIGhMaW5rT2JqZWN0ID0gYXRrX2h5cGVybGlu
a19nZXRfb2JqZWN0KGhMaW5rLCAwKTsKKyAgICBnX2Fzc2VydChBVEtfT0JKRUNUKGhMaW5rT2Jq
ZWN0KSk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShoTGlua09iamVjdCkgPT0g
QVRLX1JPTEVfQ09NQk9fQk9YKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19n
ZXRfc3RhcnRfaW5kZXgoaExpbmspLCA9PSwgOCk7CisgICAgZ19hc3NlcnRfY21waW50KGF0a19o
eXBlcmxpbmtfZ2V0X2VuZF9pbmRleChoTGluayksID09LCA5KTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoYXRrX2h5cGVybGlua19nZXRfbl9hbmNob3JzKGhMaW5rKSwgPT0sIDEpOworICAgIGdfYXNz
ZXJ0X2NtcHN0cihhdGtfaHlwZXJsaW5rX2dldF91cmkoaExpbmssIDApLCA9PSwgMCk7CisKKyAg
ICBBdGtUZXh0KiBwYXJhZ3JhcGgzID0gQVRLX1RFWFQoYXRrX29iamVjdF9yZWZfYWNjZXNzaWJs
ZV9jaGlsZChvYmplY3QsIDIpKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfSFlQRVJURVhUKHBhcmFn
cmFwaDMpKTsKKworICAgIG5MaW5rcyA9IGF0a19oeXBlcnRleHRfZ2V0X25fbGlua3MoQVRLX0hZ
UEVSVEVYVChwYXJhZ3JhcGgzKSk7CisgICAgZ19hc3NlcnRfY21waW50KG5MaW5rcywgPT0sIDEp
OworCisgICAgaExpbmsgPSBhdGtfaHlwZXJ0ZXh0X2dldF9saW5rKEFUS19IWVBFUlRFWFQocGFy
YWdyYXBoMyksIDApOworICAgIGdfYXNzZXJ0KEFUS19IWVBFUkxJTksoaExpbmspKTsKKyAgICBo
TGlua09iamVjdCA9IGF0a19oeXBlcmxpbmtfZ2V0X29iamVjdChoTGluaywgMCk7CisgICAgZ19h
c3NlcnQoQVRLX09CSkVDVChoTGlua09iamVjdCkpOworICAgIGdfYXNzZXJ0KGF0a19vYmplY3Rf
Z2V0X3JvbGUoaExpbmtPYmplY3QpID09IEFUS19ST0xFX1BVU0hfQlVUVE9OKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfc3RhcnRfaW5kZXgoaExpbmspLCA9PSwgMCk7
CisgICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0X2VuZF9pbmRleChoTGluayks
ID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfbl9hbmNob3Jz
KGhMaW5rKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcHN0cihhdGtfaHlwZXJsaW5rX2dldF91
cmkoaExpbmssIDApLCA9PSwgMCk7CisKKyAgICBnX29iamVjdF91bnJlZihwYXJhZ3JhcGgxKTsK
KyAgICBnX29iamVjdF91bnJlZihwYXJhZ3JhcGgyKTsKKyAgICBnX29iamVjdF91bnJlZihwYXJh
Z3JhcGgzKTsKKyAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKK30KKworc3RhdGljIHZvaWQg
dGVzdFdlYmtpdEF0a0dldEhlYWRlcnNJblRhYmxlKCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19v
YmplY3RfcmVmX3Npbmsod2ViVmlldyk7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0g
eyAwLCAwLCA4MDAsIDYwMCB9OworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lE
R0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3Ry
aW5nKHdlYlZpZXcsIGNvbnRlbnRzSW5UYWJsZVdpdGhIZWFkZXJzLCAwLCAwLCAwKTsKKworICAg
IEF0a09iamVjdCogYXhXZWJWaWV3ID0gZ2V0V2ViQXJlYU9iamVjdCh3ZWJWaWV3KTsKKyAgICBn
X2Fzc2VydChheFdlYlZpZXcpOworCisgICAgLyogQ2hlY2sgdGFibGUgd2l0aCBib3RoIGNvbHVt
biBhbmQgcm93IGhlYWRlcnMuICovCisgICAgQXRrT2JqZWN0KiB0YWJsZSA9IGF0a19vYmplY3Rf
cmVmX2FjY2Vzc2libGVfY2hpbGQoYXhXZWJWaWV3LCAwKTsKKyAgICBnX2Fzc2VydCh0YWJsZSk7
CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZSh0YWJsZSkgPT0gQVRLX1JPTEVfVEFC
TEUpOworCisgICAgQXRrT2JqZWN0KiBjb2xIZWFkZXIgPSBhdGtfdGFibGVfZ2V0X2NvbHVtbl9o
ZWFkZXIoQVRLX1RBQkxFKHRhYmxlKSwgMCk7CisgICAgZ19hc3NlcnQoY29sSGVhZGVyKTsKKyAg
ICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGNvbEhlYWRlcikgPT0gQVRLX1JPTEVfVEFC
TEVfQ0VMTCk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfaW5kZXhfaW5fcGFyZW50KGNv
bEhlYWRlcikgPT0gMCk7CisKKyAgICBjb2xIZWFkZXIgPSBhdGtfdGFibGVfZ2V0X2NvbHVtbl9o
ZWFkZXIoQVRLX1RBQkxFKHRhYmxlKSwgMSk7CisgICAgZ19hc3NlcnQoY29sSGVhZGVyKTsKKyAg
ICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGNvbEhlYWRlcikgPT0gQVRLX1JPTEVfVEFC
TEVfQ0VMTCk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfaW5kZXhfaW5fcGFyZW50KGNv
bEhlYWRlcikgPT0gMSk7CisKKyAgICBjb2xIZWFkZXIgPSBhdGtfdGFibGVfZ2V0X2NvbHVtbl9o
ZWFkZXIoQVRLX1RBQkxFKHRhYmxlKSwgMik7CisgICAgZ19hc3NlcnQoY29sSGVhZGVyKTsKKyAg
ICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGNvbEhlYWRlcikgPT0gQVRLX1JPTEVfVEFC
TEVfQ0VMTCk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfaW5kZXhfaW5fcGFyZW50KGNv
bEhlYWRlcikgPT0gMik7CisKKyAgICBjb2xIZWFkZXIgPSBhdGtfdGFibGVfZ2V0X2NvbHVtbl9o
ZWFkZXIoQVRLX1RBQkxFKHRhYmxlKSwgMyk7CisgICAgZ19hc3NlcnQoY29sSGVhZGVyKTsKKyAg
ICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGNvbEhlYWRlcikgPT0gQVRLX1JPTEVfVEFC
TEVfQ0VMTCk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfaW5kZXhfaW5fcGFyZW50KGNv
bEhlYWRlcikgPT0gMik7CisKKyAgICBBdGtPYmplY3QqIHJvd0hlYWRlciA9IGF0a190YWJsZV9n
ZXRfcm93X2hlYWRlcihBVEtfVEFCTEUodGFibGUpLCAwKTsKKyAgICBnX2Fzc2VydChyb3dIZWFk
ZXIpOworICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUocm93SGVhZGVyKSA9PSBBVEtf
Uk9MRV9UQUJMRV9DRUxMKTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9pbmRleF9pbl9w
YXJlbnQocm93SGVhZGVyKSA9PSAwKTsKKworICAgIHJvd0hlYWRlciA9IGF0a190YWJsZV9nZXRf
cm93X2hlYWRlcihBVEtfVEFCTEUodGFibGUpLCAxKTsKKyAgICBnX2Fzc2VydChyb3dIZWFkZXIp
OworICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUocm93SGVhZGVyKSA9PSBBVEtfUk9M
RV9UQUJMRV9DRUxMKTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9pbmRleF9pbl9wYXJl
bnQocm93SGVhZGVyKSA9PSAzKTsKKworICAgIHJvd0hlYWRlciA9IGF0a190YWJsZV9nZXRfcm93
X2hlYWRlcihBVEtfVEFCTEUodGFibGUpLCAyKTsKKyAgICBnX2Fzc2VydChyb3dIZWFkZXIpOwor
ICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUocm93SGVhZGVyKSA9PSBBVEtfUk9MRV9U
QUJMRV9DRUxMKTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9pbmRleF9pbl9wYXJlbnQo
cm93SGVhZGVyKSA9PSA3KTsKKworICAgIHJvd0hlYWRlciA9IGF0a190YWJsZV9nZXRfcm93X2hl
YWRlcihBVEtfVEFCTEUodGFibGUpLCAzKTsKKyAgICBnX2Fzc2VydChyb3dIZWFkZXIpOworICAg
IGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUocm93SGVhZGVyKSA9PSBBVEtfUk9MRV9UQUJM
RV9DRUxMKTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9pbmRleF9pbl9wYXJlbnQocm93
SGVhZGVyKSA9PSA3KTsKKworICAgIGdfb2JqZWN0X3VucmVmKHRhYmxlKTsKKworICAgIC8qIENo
ZWNrIHRhYmxlIHdpdGggbm8gaGVhZGVycyBhdCBhbGwuICovCisgICAgdGFibGUgPSBhdGtfb2Jq
ZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGF4V2ViVmlldywgMSk7CisgICAgZ19hc3NlcnQodGFi
bGUpOworICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUodGFibGUpID09IEFUS19ST0xF
X1RBQkxFKTsKKworICAgIGNvbEhlYWRlciA9IGF0a190YWJsZV9nZXRfY29sdW1uX2hlYWRlcihB
VEtfVEFCTEUodGFibGUpLCAwKTsKKyAgICBnX2Fzc2VydChjb2xIZWFkZXIgPT0gMCk7CisKKyAg
ICBjb2xIZWFkZXIgPSBhdGtfdGFibGVfZ2V0X2NvbHVtbl9oZWFkZXIoQVRLX1RBQkxFKHRhYmxl
KSwgMSk7CisgICAgZ19hc3NlcnQoY29sSGVhZGVyID09IDApOworCisgICAgcm93SGVhZGVyID0g
YXRrX3RhYmxlX2dldF9yb3dfaGVhZGVyKEFUS19UQUJMRSh0YWJsZSksIDApOworICAgIGdfYXNz
ZXJ0KHJvd0hlYWRlciA9PSAwKTsKKworICAgIHJvd0hlYWRlciA9IGF0a190YWJsZV9nZXRfcm93
X2hlYWRlcihBVEtfVEFCTEUodGFibGUpLCAxKTsKKyAgICBnX2Fzc2VydChyb3dIZWFkZXIgPT0g
MCk7CisKKyAgICBnX29iamVjdF91bnJlZih0YWJsZSk7CisgICAgZ19vYmplY3RfdW5yZWYod2Vi
Vmlldyk7Cit9CisKK3N0YXRpYyBnaW50IGNvbXBBdGtBdHRyaWJ1dGUoQXRrQXR0cmlidXRlKiBh
MSwgQXRrQXR0cmlidXRlKiBhMikKK3sKKyAgICBnaW50IHN0cmNtcFZhbCA9IGdfc3RyY21wMChh
MS0+bmFtZSwgYTItPm5hbWUpOworICAgIGlmIChzdHJjbXBWYWwpCisgICAgICAgIHJldHVybiBz
dHJjbXBWYWw7CisgICAgcmV0dXJuIGdfc3RyY21wMChhMS0+dmFsdWUsIGEyLT52YWx1ZSk7Cit9
CisKK3N0YXRpYyBnaW50IGNvbXBBdGtBdHRyaWJ1dGVOYW1lKEF0a0F0dHJpYnV0ZSogYTEsIEF0
a0F0dHJpYnV0ZSogYTIpCit7CisgICAgcmV0dXJuIGdfc3RyY21wMChhMS0+bmFtZSwgYTItPm5h
bWUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlTmFtZUhh
c1ZhbHVlKEF0a0F0dHJpYnV0ZVNldCogc2V0LCBjb25zdCBnY2hhciogYXR0cmlidXRlTmFtZSwg
Y29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIEF0a0F0dHJpYnV0ZSBhdDsKKyAgICBhdC5uYW1l
ID0gKGdjaGFyKilhdHRyaWJ1dGVOYW1lOworICAgIEdTTGlzdCogZWxlbWVudCA9IGdfc2xpc3Rf
ZmluZF9jdXN0b20oc2V0LCAmYXQsIChHQ29tcGFyZUZ1bmMpY29tcEF0a0F0dHJpYnV0ZU5hbWUp
OworICAgIHJldHVybiBlbGVtZW50ICYmICFnX3N0cmNtcDAoKChBdGtBdHRyaWJ1dGUqKShlbGVt
ZW50LT5kYXRhKSktPnZhbHVlLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBhdGtBdHRy
aWJ1dGVTZXRDb250YWluc0F0dHJpYnV0ZU5hbWUoQXRrQXR0cmlidXRlU2V0KiBzZXQsIGNvbnN0
IGdjaGFyKiBhdHRyaWJ1dGVOYW1lKQoreworICAgIEF0a0F0dHJpYnV0ZSBhdDsKKyAgICBhdC5u
YW1lID0gKGdjaGFyKilhdHRyaWJ1dGVOYW1lOworICAgIHJldHVybiBnX3NsaXN0X2ZpbmRfY3Vz
dG9tKHNldCwgJmF0LCAoR0NvbXBhcmVGdW5jKWNvbXBBdGtBdHRyaWJ1dGVOYW1lKSA/IHRydWUg
OiBmYWxzZTsKK30KKworc3RhdGljIGdib29sZWFuIGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhh
c1ZhbHVlKEF0a0F0dHJpYnV0ZVNldCogc2V0LCBBdGtUZXh0QXR0cmlidXRlIGF0dHJpYnV0ZSwg
Y29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIHJldHVybiBhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1
dGVOYW1lSGFzVmFsdWUoc2V0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoYXR0cmlidXRl
KSwgdmFsdWUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gYXRrQXR0cmlidXRlU2V0QXJlRXF1YWwo
QXRrQXR0cmlidXRlU2V0KiBzZXQxLCBBdGtBdHRyaWJ1dGVTZXQqIHNldDIpCit7CisgICAgaWYg
KCFzZXQxKQorICAgICAgICByZXR1cm4gIXNldDI7CisKKyAgICBzZXQxID0gZ19zbGlzdF9zb3J0
KHNldDEsIChHQ29tcGFyZUZ1bmMpY29tcEF0a0F0dHJpYnV0ZSk7CisgICAgc2V0MiA9IGdfc2xp
c3Rfc29ydChzZXQyLCAoR0NvbXBhcmVGdW5jKWNvbXBBdGtBdHRyaWJ1dGUpOworCisgICAgd2hp
bGUgKHNldDEpIHsKKyAgICAgICAgaWYgKCFzZXQyIHx8IGNvbXBBdGtBdHRyaWJ1dGUoc2V0MS0+
ZGF0YSwgc2V0Mi0+ZGF0YSkpCisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICAgICAg
c2V0MSA9IHNldDEtPm5leHQ7CisgICAgICAgIHNldDIgPSBzZXQyLT5uZXh0OworICAgIH0KKwor
ICAgIHJldHVybiAoIXNldDIpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrVGV4dEF0
dHJpYnV0ZXMoKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJ
RVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3
KTsKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDgwMCwgNjAwIH07Cisg
ICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQod2ViVmlldyksICZhbGxvY2F0
aW9uKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgdGV4dFdpdGhB
dHRyaWJ1dGVzLCAwLCAwLCAwKTsKKworICAgIEF0a09iamVjdCogb2JqZWN0ID0gZ2V0V2ViQXJl
YU9iamVjdCh3ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChvYmplY3QpOworCisgICAgQXRrT2JqZWN0
KiBjaGlsZCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAwKTsKKyAg
ICBnX2Fzc2VydChjaGlsZCAmJiBBVEtfSVNfVEVYVChjaGlsZCkpOworICAgIEF0a1RleHQqIGNo
aWxkVGV4dCA9IEFUS19URVhUKGNoaWxkKTsKKworICAgIGdpbnQgc3RhcnRPZmZzZXQ7CisgICAg
Z2ludCBlbmRPZmZzZXQ7CisgICAgQXRrQXR0cmlidXRlU2V0KiBzZXQxID0gYXRrX3RleHRfZ2V0
X3J1bl9hdHRyaWJ1dGVzKGNoaWxkVGV4dCwgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAwKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoZW5kT2Zmc2V0LCA9PSwgMTIpOworICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEFy
ZUVxdWFsKHNldDEsIDApKTsKKworICAgIEF0a0F0dHJpYnV0ZVNldCogc2V0MiA9IGF0a190ZXh0
X2dldF9ydW5fYXR0cmlidXRlcyhjaGlsZFRleHQsIDE1LCAmc3RhcnRPZmZzZXQsICZlbmRPZmZz
ZXQpOworICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDEyKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMTcpOworICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0
ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDIsIEFUS19URVhUX0FUVFJfU1RZTEUsICJpdGFsaWMi
KSk7CisKKyAgICBBdGtBdHRyaWJ1dGVTZXQqIHNldDMgPSBhdGtfdGV4dF9nZXRfcnVuX2F0dHJp
YnV0ZXMoY2hpbGRUZXh0LCAxNywgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAxNyk7CisgICAgZ19hc3NlcnRfY21waW50KGVu
ZE9mZnNldCwgPT0sIDQwKTsKKyAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVI
YXNWYWx1ZShzZXQzLCBBVEtfVEVYVF9BVFRSX1dFSUdIVCwgIjcwMCIpKTsKKworICAgIEF0a0F0
dHJpYnV0ZVNldCogc2V0NCA9IGF0a190ZXh0X2dldF9kZWZhdWx0X2F0dHJpYnV0ZXMoY2hpbGRU
ZXh0KTsKKyAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVIYXNWYWx1ZShzZXQ0
LCBBVEtfVEVYVF9BVFRSX1NUWUxFLCAibm9ybWFsIikpOworICAgIGdfYXNzZXJ0KGF0a0F0dHJp
YnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDQsIEFUS19URVhUX0FUVFJfSlVTVElGSUNBVElP
TiwgInJpZ2h0IikpOworICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1Zh
bHVlKHNldDQsIEFUS19URVhUX0FUVFJfU0laRSwgIjE0IikpOworICAgIGF0a19hdHRyaWJ1dGVf
c2V0X2ZyZWUoc2V0MSk7CisgICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJlZShzZXQyKTsKKyAgICBh
dGtfYXR0cmlidXRlX3NldF9mcmVlKHNldDMpOworICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUo
c2V0NCk7CisKKyAgICBnX29iamVjdF91bnJlZihjaGlsZCk7CisgICAgY2hpbGQgPSBhdGtfb2Jq
ZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMSk7CisgICAgZ19hc3NlcnQoY2hpbGQg
JiYgQVRLX0lTX1RFWFQoY2hpbGQpKTsKKyAgICBjaGlsZFRleHQgPSBBVEtfVEVYVChjaGlsZCk7
CisKKyAgICBzZXQxID0gYXRrX3RleHRfZ2V0X2RlZmF1bHRfYXR0cmlidXRlcyhjaGlsZFRleHQp
OworICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDEsIEFU
S19URVhUX0FUVFJfRkFNSUxZX05BTUUsICJtb25vc3BhY2UiKSk7CisgICAgZ19hc3NlcnQoYXRr
QXR0cmlidXRlU2V0QXR0cmlidXRlSGFzVmFsdWUoc2V0MSwgQVRLX1RFWFRfQVRUUl9TVFlMRSwg
Im5vcm1hbCIpKTsKKyAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVIYXNWYWx1
ZShzZXQxLCBBVEtfVEVYVF9BVFRSX1NUUklLRVRIUk9VR0gsICJmYWxzZSIpKTsKKyAgICBnX2Fz
c2VydChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVIYXNWYWx1ZShzZXQxLCBBVEtfVEVYVF9BVFRS
X1dFSUdIVCwgIjQwMCIpKTsKKyAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVI
YXNWYWx1ZShzZXQxLCBBVEtfVEVYVF9BVFRSX0ZHX0NPTE9SLCAiMTIwLDEyMSwxMjIiKSk7CisK
KyAgICBzZXQyID0gYXRrX3RleHRfZ2V0X3J1bl9hdHRyaWJ1dGVzKGNoaWxkVGV4dCwgNDMsICZz
dGFydE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0
LCA9PSwgNDMpOworICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCA4MCk7CisgICAg
LyogQ2hlY2tzIHRoYXQgZGVmYXVsdCBhdHRyaWJ1dGVzIG9mIHRleHQgYXJlIG5vdCByZXR1cm5l
ZCB3aGVuIGNhbGxlZCB0byBhdGtfdGV4dF9nZXRfcnVuX2F0dHJpYnV0ZXMuICovCisgICAgZ19h
c3NlcnQoIWF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDIsIEFUS19URVhUX0FU
VFJfRkdfQ09MT1IsICIxMjAsMTIxLDEyMiIpKTsKKyAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVT
ZXRBdHRyaWJ1dGVIYXNWYWx1ZShzZXQyLCBBVEtfVEVYVF9BVFRSX1VOREVSTElORSwgInNpbmds
ZSIpKTsKKyAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVIYXNWYWx1ZShzZXQy
LCBBVEtfVEVYVF9BVFRSX0JHX0NPTE9SLCAiODAsODEsODIiKSk7CisgICAgYXRrX2F0dHJpYnV0
ZV9zZXRfZnJlZShzZXQxKTsKKyAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHNldDIpOworICAg
IGdfb2JqZWN0X3VucmVmKGNoaWxkKTsKKworICAgIGNoaWxkID0gYXRrX29iamVjdF9yZWZfYWNj
ZXNzaWJsZV9jaGlsZChvYmplY3QsIDIpOworICAgIGdfYXNzZXJ0KGNoaWxkICYmIEFUS19JU19U
RVhUKGNoaWxkKSk7CisgICAgY2hpbGRUZXh0ID0gQVRLX1RFWFQoY2hpbGQpOworCisgICAgc2V0
MSA9IGF0a190ZXh0X2dldF9ydW5fYXR0cmlidXRlcyhjaGlsZFRleHQsIDAsICZzdGFydE9mZnNl
dCwgJmVuZE9mZnNldCk7CisgICAgc2V0MiA9IGF0a190ZXh0X2dldF9ydW5fYXR0cmlidXRlcyhj
aGlsZFRleHQsIDMsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgZ19hc3NlcnQoYXRr
QXR0cmlidXRlU2V0QXJlRXF1YWwoc2V0MSwgc2V0MikpOworICAgIGF0a19hdHRyaWJ1dGVfc2V0
X2ZyZWUoc2V0Mik7CisKKyAgICBzZXQyID0gYXRrX3RleHRfZ2V0X3J1bl9hdHRyaWJ1dGVzKGNo
aWxkVGV4dCwgMSwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAgICBzZXQzID0gYXRrX3Rl
eHRfZ2V0X3J1bl9hdHRyaWJ1dGVzKGNoaWxkVGV4dCwgNSwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zm
c2V0KTsKKyAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBcmVFcXVhbChzZXQyLCBzZXQzKSk7
CisgICAgZ19hc3NlcnQoIWF0a0F0dHJpYnV0ZVNldEFyZUVxdWFsKHNldDEsIHNldDIpKTsKKyAg
ICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHNldDMpOworCisgICAgc2V0MyA9IGF0a190ZXh0X2dl
dF9ydW5fYXR0cmlidXRlcyhjaGlsZFRleHQsIDIsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7
CisgICAgc2V0NCA9IGF0a190ZXh0X2dldF9ydW5fYXR0cmlidXRlcyhjaGlsZFRleHQsIDYsICZz
dGFydE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0QXJl
RXF1YWwoc2V0Mywgc2V0NCkpOworICAgIGdfYXNzZXJ0KCFhdGtBdHRyaWJ1dGVTZXRBcmVFcXVh
bChzZXQxLCBzZXQzKSk7CisgICAgZ19hc3NlcnQoIWF0a0F0dHJpYnV0ZVNldEFyZUVxdWFsKHNl
dDIsIHNldDMpKTsKKyAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHNldDEpOworICAgIGF0a19h
dHRyaWJ1dGVfc2V0X2ZyZWUoc2V0Mik7CisgICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJlZShzZXQz
KTsKKyAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHNldDQpOworICAgIGdfb2JqZWN0X3VucmVm
KGNoaWxkKTsKKworICAgIGNoaWxkID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChv
YmplY3QsIDMpOworICAgIGdfYXNzZXJ0KGNoaWxkICYmIEFUS19JU19URVhUKGNoaWxkKSk7Cisg
ICAgY2hpbGRUZXh0ID0gQVRLX1RFWFQoY2hpbGQpOworICAgIHNldDEgPSBhdGtfdGV4dF9nZXRf
cnVuX2F0dHJpYnV0ZXMoY2hpbGRUZXh0LCAyNCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAyMSk7CisgICAgZ19hc3NlcnRf
Y21waW50KGVuZE9mZnNldCwgPT0sIDI1KTsKKyAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRB
dHRyaWJ1dGVIYXNWYWx1ZShzZXQxLCBBVEtfVEVYVF9BVFRSX1NUUklLRVRIUk9VR0gsICJ0cnVl
IikpOworCisgICAgc2V0MiA9IGF0a190ZXh0X2dldF9ydW5fYXR0cmlidXRlcyhjaGlsZFRleHQs
IDI1LCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOworICAgIGdfYXNzZXJ0X2NtcGludChzdGFy
dE9mZnNldCwgPT0sIDI1KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMzAp
OworICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEFyZUVxdWFsKHNldDIsIDApKTsKKworICAg
IHNldDMgPSBhdGtfdGV4dF9nZXRfZGVmYXVsdF9hdHRyaWJ1dGVzKGNoaWxkVGV4dCk7CisgICAg
Z19hc3NlcnQoYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlSGFzVmFsdWUoc2V0MywgQVRLX1RFWFRf
QVRUUl9KVVNUSUZJQ0FUSU9OLCAiY2VudGVyIikpOworICAgIGF0a19hdHRyaWJ1dGVfc2V0X2Zy
ZWUoc2V0MSk7CisgICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJlZShzZXQyKTsKKyAgICBhdGtfYXR0
cmlidXRlX3NldF9mcmVlKHNldDMpOworCisgICAgZ19vYmplY3RfdW5yZWYoY2hpbGQpOworfQor
CitzdGF0aWMgZ2NoYXIqIHRleHRTZWxlY3Rpb25DaGFuZ2VkUmVzdWx0ID0gMDsKKworc3RhdGlj
IHZvaWQgdGV4dFNlbGVjdGlvbkNoYW5nZWRDYWxsYmFjayhBdGtUZXh0KiB0ZXh0LCBncG9pbnRl
ciBkYXRhKQoreworICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHRleHQpKTsKKworICAgIGdfZnJl
ZSh0ZXh0U2VsZWN0aW9uQ2hhbmdlZFJlc3VsdCk7CisgICAgQXRrUm9sZSByb2xlID0gYXRrX29i
amVjdF9nZXRfcm9sZShBVEtfT0JKRUNUKHRleHQpKTsKKyAgICBpbnQgc3RhcnRPZmZzZXQgPSAw
OworICAgIGludCBlbmRPZmZzZXQgPSAwOworICAgIGF0a190ZXh0X2dldF9zZWxlY3Rpb24oQVRL
X1RFWFQodGV4dCksIDAsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgdGV4dFNlbGVj
dGlvbkNoYW5nZWRSZXN1bHQgPSBnX3N0cmR1cF9wcmludGYoInwlc3wlZHwlZHwiLCBhdGtfcm9s
ZV9nZXRfbmFtZShyb2xlKSwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7Cit9CisKK3N0YXRpYyB2
b2lkIHRlc3RXZWJraXRBdGtUZXh0U2VsZWN0aW9ucygpCit7CisgICAgV2ViS2l0V2ViVmlldyog
d2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdf
b2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9
IHsgMCwgMCwgODAwLCA2MDAgfTsKKyAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJ
REdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0
cmluZyh3ZWJWaWV3LCB0ZXh0Rm9yU2VsZWN0aW9ucywgMCwgMCwgMCk7CisKKyAgICBBdGtPYmpl
Y3QqIG9iamVjdCA9IGdldFdlYkFyZWFPYmplY3Qod2ViVmlldyk7CisgICAgZ19hc3NlcnQob2Jq
ZWN0KTsKKworICAgIEF0a1RleHQqIHBhcmFncmFwaDEgPSBBVEtfVEVYVChhdGtfb2JqZWN0X3Jl
Zl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMCkpOworICAgIGdfYXNzZXJ0KEFUS19JU19URVhU
KHBhcmFncmFwaDEpKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KHBhcmFncmFwaDEsICJ0ZXh0LXNl
bGVjdGlvbi1jaGFuZ2VkIiwgR19DQUxMQkFDSyh0ZXh0U2VsZWN0aW9uQ2hhbmdlZENhbGxiYWNr
KSwgMCk7CisKKyAgICBBdGtUZXh0KiBwYXJhZ3JhcGgyID0gQVRLX1RFWFQoYXRrX29iamVjdF9y
ZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDEpKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfVEVY
VChwYXJhZ3JhcGgyKSk7CisgICAgZ19zaWduYWxfY29ubmVjdChwYXJhZ3JhcGgyLCAidGV4dC1z
ZWxlY3Rpb24tY2hhbmdlZCIsIEdfQ0FMTEJBQ0sodGV4dFNlbGVjdGlvbkNoYW5nZWRDYWxsYmFj
ayksIDApOworCisgICAgQXRrVGV4dCogbGluayA9IEFUS19URVhUKGF0a19vYmplY3RfcmVmX2Fj
Y2Vzc2libGVfY2hpbGQoQVRLX09CSkVDVChwYXJhZ3JhcGgyKSwgMCkpOworICAgIGdfYXNzZXJ0
KEFUS19JU19URVhUKGxpbmspKTsKKworICAgIEF0a09iamVjdCogbGlzdCA9IGF0a19vYmplY3Rf
cmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAyKTsKKyAgICBnX2Fzc2VydChBVEtfT0JKRUNU
KGxpc3QpKTsKKworICAgIEF0a1RleHQqIGxpc3RJdGVtID0gQVRLX1RFWFQoYXRrX29iamVjdF9y
ZWZfYWNjZXNzaWJsZV9jaGlsZChsaXN0LCAwKSk7CisgICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQo
bGlzdEl0ZW0pKTsKKworICAgIC8qIEZpcnN0IHBhcmFncmFwaCAoc2ltcGxlIHRleHQpLiAqLwor
CisgICAgLyogQmFzaWMgaW5pdGlhbCBjaGVja3MuICovCisgICAgZ19hc3NlcnRfY21waW50KGF0
a190ZXh0X2dldF9uX3NlbGVjdGlvbnMocGFyYWdyYXBoMSksID09LCAwKTsKKworICAgIGdpbnQg
c3RhcnRPZmZzZXQ7CisgICAgZ2ludCBlbmRPZmZzZXQ7CisgICAgZ2NoYXIqIHNlbGVjdGVkVGV4
dCA9IGF0a190ZXh0X2dldF9zZWxlY3Rpb24ocGFyYWdyYXBoMSwgMCwgJnN0YXJ0T2Zmc2V0LCAm
ZW5kT2Zmc2V0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAwKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21wc3Ry
KHNlbGVjdGVkVGV4dCwgPT0sIDApOworICAgIGdfZnJlZSAoc2VsZWN0ZWRUZXh0KTsKKworICAg
IC8qIFRyeSByZW1vdmluZyBhIG5vbiBleGlzdGluZyAoeWV0KSBzZWxlY3Rpb24uICovCisgICAg
Z2Jvb2xlYW4gcmVzdWx0ID0gYXRrX3RleHRfcmVtb3ZlX3NlbGVjdGlvbihwYXJhZ3JhcGgxLCAw
KTsKKyAgICBnX2Fzc2VydCghcmVzdWx0KTsKKworICAgIC8qIFRyeSBzZXR0aW5nIGEgMC1jaGFy
IHNlbGVjdGlvbi4gKi8KKyAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfc2VsZWN0aW9uKHBhcmFn
cmFwaDEsIDAsIDUsIDUpOworICAgIGdfYXNzZXJ0KHJlc3VsdCk7CisKKyAgICAvKiBNYWtlIGEg
c2VsZWN0aW9uIGFuZCB0ZXN0IGl0LiAqLworICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9zZWxl
Y3Rpb24ocGFyYWdyYXBoMSwgMCwgNSwgMjUpOworICAgIGdfYXNzZXJ0KHJlc3VsdCk7CisgICAg
Z19hc3NlcnRfY21waW50KGF0a190ZXh0X2dldF9uX3NlbGVjdGlvbnMocGFyYWdyYXBoMSksID09
LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGV4dFNlbGVjdGlvbkNoYW5nZWRSZXN1bHQsID09
LCAifHBhcmFncmFwaHw1fDI1fCIpOworICAgIHNlbGVjdGVkVGV4dCA9IGF0a190ZXh0X2dldF9z
ZWxlY3Rpb24ocGFyYWdyYXBoMSwgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCA1KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
ZW5kT2Zmc2V0LCA9PSwgMjUpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZFRleHQsID09
LCAiYWdyYXBoIHdpdGggcGxhaW4gdGUiKTsKKyAgICBnX2ZyZWUgKHNlbGVjdGVkVGV4dCk7CisK
KyAgICAvKiBUcnkgcmVtb3ZpbmcgdGhlIHNlbGVjdGlvbiBmcm9tIG90aGVyIEF0a1RleHQgb2Jq
ZWN0IChzaG91bGQgZmFpbCkuICovCisgICAgcmVzdWx0ID0gYXRrX3RleHRfcmVtb3ZlX3NlbGVj
dGlvbihwYXJhZ3JhcGgyLCAwKTsKKyAgICBnX2Fzc2VydCghcmVzdWx0KTsKKworICAgIC8qIFJl
bW92ZSB0aGUgc2VsZWN0aW9uIGFuZCB0ZXN0IGV2ZXJ5dGhpbmcgYWdhaW4uICovCisgICAgcmVz
dWx0ID0gYXRrX3RleHRfcmVtb3ZlX3NlbGVjdGlvbihwYXJhZ3JhcGgxLCAwKTsKKyAgICBnX2Fz
c2VydChyZXN1bHQpOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfdGV4dF9nZXRfbl9zZWxlY3Rp
b25zKHBhcmFncmFwaDEpLCA9PSwgMCk7CisgICAgc2VsZWN0ZWRUZXh0ID0gYXRrX3RleHRfZ2V0
X3NlbGVjdGlvbihwYXJhZ3JhcGgxLCAwLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOworICAg
IC8qIE5vdyBvZmZzZXRzIHNob3VsZCBiZSB0aGUgc2FtZSwgc2V0IHRvIHRoZSBsYXN0IHBvc2l0
aW9uIG9mIHRoZSBjYXJldC4gKi8KKyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09
LCBlbmRPZmZzZXQpOworICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDI1KTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMjUpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cihzZWxlY3RlZFRleHQsID09LCAwKTsKKyAgICBnX2ZyZWUgKHNlbGVjdGVkVGV4dCk7CisK
KyAgICAvKiBTZWNvbmQgcGFyYWdyYXBoICh0ZXh0ICsgbGluayArIHRleHQpLiAqLworCisgICAg
LyogU2V0IGEgc2VsZWN0aW9uIHBhcnRpYWxseSBjb3ZlcmluZyB0aGUgbGluayBhbmQgdGVzdCBp
dC4gKi8KKyAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfc2VsZWN0aW9uKHBhcmFncmFwaDIsIDAs
IDcsIDIxKTsKKyAgICBnX2Fzc2VydChyZXN1bHQpOworCisgICAgLyogVGVzdCB0aGUgcGFyYWdy
YXBoIGZpcnN0LiAqLworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfdGV4dF9nZXRfbl9zZWxlY3Rp
b25zKHBhcmFncmFwaDIpLCA9PSwgMSk7CisgICAgc2VsZWN0ZWRUZXh0ID0gYXRrX3RleHRfZ2V0
X3NlbGVjdGlvbihwYXJhZ3JhcGgyLCAwLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOworICAg
IGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDcpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChlbmRPZmZzZXQsID09LCAyMSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkVGV4dCwg
PT0sICJyYXBoIHdpdGggYSBsaSIpOworICAgIGdfZnJlZSAoc2VsZWN0ZWRUZXh0KTsKKworICAg
IC8qIE5vdyB0ZXN0IGp1c3QgdGhlIGxpbmsuICovCisgICAgZ19hc3NlcnRfY21waW50KGF0a190
ZXh0X2dldF9uX3NlbGVjdGlvbnMobGluayksID09LCAxKTsKKyAgICBzZWxlY3RlZFRleHQgPSBh
dGtfdGV4dF9nZXRfc2VsZWN0aW9uKGxpbmssIDAsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7
CisgICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMCk7CisgICAgZ19hc3NlcnRf
Y21waW50KGVuZE9mZnNldCwgPT0sIDQpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZFRl
eHQsID09LCAiYSBsaSIpOworICAgIGdfZnJlZSAoc2VsZWN0ZWRUZXh0KTsKKworICAgIC8qIE1h
a2UgYSBzZWxlY3Rpb24gYWZ0ZXIgdGhlIGxpbmsgYW5kIGNoZWNrIHNlbGVjdGlvbiBmb3IgdGhl
IHdob2xlIHBhcmFncmFwaC4gKi8KKyAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfc2VsZWN0aW9u
KHBhcmFncmFwaDIsIDAsIDI3LCAzNyk7CisgICAgZ19hc3NlcnQocmVzdWx0KTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoYXRrX3RleHRfZ2V0X25fc2VsZWN0aW9ucyhwYXJhZ3JhcGgyKSwgPT0sIDEp
OworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0U2VsZWN0aW9uQ2hhbmdlZFJlc3VsdCwgPT0sICJ8
cGFyYWdyYXBofDI3fDM3fCIpOworICAgIHNlbGVjdGVkVGV4dCA9IGF0a190ZXh0X2dldF9zZWxl
Y3Rpb24ocGFyYWdyYXBoMiwgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAyNyk7CisgICAgZ19hc3NlcnRfY21waW50KGVu
ZE9mZnNldCwgPT0sIDM3KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRUZXh0LCA9PSwg
InRoZSBtaWRkbGUiKTsKKyAgICBnX2ZyZWUgKHNlbGVjdGVkVGV4dCk7CisKKyAgICAvKiBSZW1v
dmUgc2VsZWN0aW9ucyBhbmQgdGV4dCBldmVyeXRoaW5nIGFnYWluLiAqLworICAgIHJlc3VsdCA9
IGF0a190ZXh0X3JlbW92ZV9zZWxlY3Rpb24ocGFyYWdyYXBoMiwgMCk7CisgICAgZ19hc3NlcnQo
cmVzdWx0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX3RleHRfZ2V0X25fc2VsZWN0aW9ucyhw
YXJhZ3JhcGgyKSwgPT0sIDApOworICAgIHNlbGVjdGVkVGV4dCA9IGF0a190ZXh0X2dldF9zZWxl
Y3Rpb24ocGFyYWdyYXBoMiwgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAgICAvKiBO
b3cgb2Zmc2V0cyBzaG91bGQgYmUgdGhlIHNhbWUgKG5vIHNlbGVjdGlvbikuICovCisgICAgZ19h
c3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgZW5kT2Zmc2V0KTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIoc2VsZWN0ZWRUZXh0LCA9PSwgMCk7CisgICAgZ19mcmVlIChzZWxlY3RlZFRleHQpOwor
CisgICAgZ19hc3NlcnRfY21waW50KGF0a190ZXh0X2dldF9uX3NlbGVjdGlvbnMobGluayksID09
LCAwKTsKKyAgICBzZWxlY3RlZFRleHQgPSBhdGtfdGV4dF9nZXRfc2VsZWN0aW9uKGxpbmssIDAs
ICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgLyogTm93IG9mZnNldHMgc2hvdWxkIGJl
IHRoZSBzYW1lIChubyBzZWxlY3Rpb24pLiAqLworICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9m
ZnNldCwgPT0sIGVuZE9mZnNldCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkVGV4dCwg
PT0sIDApOworICAgIGdfZnJlZSAoc2VsZWN0ZWRUZXh0KTsKKworICAgIC8qIExpc3QgaXRlbSAq
LworCisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShsaXN0KSA9PSBBVEtfUk9MRV9M
SVNUKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX29iamVjdF9nZXRfbl9hY2Nlc3NpYmxlX2No
aWxkcmVuKGxpc3QpLCA9PSwgMSk7CisKKyAgICAvKiBJdCdzIG5vdCBwb3NzaWJsZSB0byBzZWxl
Y3QgdGV4dCBpbnNpZGUgYW4gaXRlbSdzIG1hcmtlci4gKi8KKyAgICByZXN1bHQgPSBhdGtfdGV4
dF9zZXRfc2VsZWN0aW9uIChsaXN0SXRlbSwgMCwgMCwgOSk7CisgICAgZ19hc3NlcnQoIXJlc3Vs
dCk7CisgICAgcmVzdWx0ID0gYXRrX3RleHRfc2V0X3NlbGVjdGlvbiAobGlzdEl0ZW0sIDAsIDks
IDEpOworICAgIGdfYXNzZXJ0KCFyZXN1bHQpOworCisgICAgLyogSXQgc2hvdWxkIGJlIHBvc3Np
YmxlIHRvIHNlbGVjdCB0ZXh0IGluc2lkZSBhbiBpdGVtJ3MgdGV4dC4gKi8KKyAgICByZXN1bHQg
PSBhdGtfdGV4dF9zZXRfc2VsZWN0aW9uIChsaXN0SXRlbSwgMCwgMywgOSk7CisgICAgZ19hc3Nl
cnQocmVzdWx0KTsKKworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfdGV4dF9nZXRfbl9zZWxlY3Rp
b25zKGxpc3RJdGVtKSwgPT0sIDEpOworICAgIHNlbGVjdGVkVGV4dCA9IGF0a190ZXh0X2dldF9z
ZWxlY3Rpb24obGlzdEl0ZW0sIDAsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgZ19h
c3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMyk7CisgICAgZ19hc3NlcnRfY21waW50KGVu
ZE9mZnNldCwgPT0sIDkpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZFRleHQsID09LCAi
QSBsaXN0Iik7CisgICAgZ19mcmVlIChzZWxlY3RlZFRleHQpOworCisgICAgZ19mcmVlKHRleHRT
ZWxlY3Rpb25DaGFuZ2VkUmVzdWx0KTsKKworICAgIGdfb2JqZWN0X3VucmVmKHBhcmFncmFwaDEp
OworICAgIGdfb2JqZWN0X3VucmVmKHBhcmFncmFwaDIpOworICAgIGdfb2JqZWN0X3VucmVmKGxp
bmspOworICAgIGdfb2JqZWN0X3VucmVmKGxpc3QpOworICAgIGdfb2JqZWN0X3VucmVmKGxpc3RJ
dGVtKTsKKyAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKK30KKworc3RhdGljIHZvaWQgdGVz
dFdlYmtpdEF0a0dldEV4dGVudHMoKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBX
RUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBnX29iamVjdF9yZWZf
c2luayh3ZWJWaWV3KTsKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDgw
MCwgNjAwIH07CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQod2ViVmll
dyksICZhbGxvY2F0aW9uKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmll
dywgY2VudGVyZWRDb250ZW50cywgMCwgMCwgMCk7CisKKyAgICBBdGtPYmplY3QqIG9iamVjdCA9
IGdldFdlYkFyZWFPYmplY3Qod2ViVmlldyk7CisgICAgZ19hc3NlcnQob2JqZWN0KTsKKworICAg
IEF0a1RleHQqIHNob3J0VGV4dDEgPSBBVEtfVEVYVChhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxl
X2NoaWxkKG9iamVjdCwgMCkpOworICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHNob3J0VGV4dDEp
KTsKKyAgICBBdGtUZXh0KiBsb25nVGV4dCA9IEFUS19URVhUKGF0a19vYmplY3RfcmVmX2FjY2Vz
c2libGVfY2hpbGQob2JqZWN0LCAxKSk7CisgICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQobG9uZ1Rl
eHQpKTsKKyAgICBBdGtUZXh0KiBzaG9ydFRleHQyID0gQVRLX1RFWFQoYXRrX29iamVjdF9yZWZf
YWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDIpKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChz
aG9ydFRleHQyKSk7CisgICAgQXRrVGV4dCogbXVsdGlsaW5lVGV4dCA9IEFUS19URVhUKGF0a19v
YmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAzKSk7CisgICAgZ19hc3NlcnQoQVRL
X0lTX1RFWFQobXVsdGlsaW5lVGV4dCkpOworCisgICAgLyogU3RhcnQgd2l0aCB3aW5kb3cgZXh0
ZW50cy4gKi8KKyAgICBBdGtUZXh0UmVjdGFuZ2xlIHNsaW5lX3dpbmRvdzEsIHNsaW5lX3dpbmRv
dzIsIGxsaW5lX3dpbmRvdywgbWxpbmVfd2luZG93OworICAgIGF0a190ZXh0X2dldF9yYW5nZV9l
eHRlbnRzKHNob3J0VGV4dDEsIDAsIDEwLCBBVEtfWFlfV0lORE9XLCAmc2xpbmVfd2luZG93MSk7
CisgICAgYXRrX3RleHRfZ2V0X3JhbmdlX2V4dGVudHMobG9uZ1RleHQsIDAsIDQ0LCBBVEtfWFlf
V0lORE9XLCAmbGxpbmVfd2luZG93KTsKKyAgICBhdGtfdGV4dF9nZXRfcmFuZ2VfZXh0ZW50cyhz
aG9ydFRleHQyLCAwLCAxMCwgQVRLX1hZX1dJTkRPVywgJnNsaW5lX3dpbmRvdzIpOworICAgIGF0
a190ZXh0X2dldF9yYW5nZV9leHRlbnRzKG11bHRpbGluZVRleHQsIDAsIDYwLCBBVEtfWFlfV0lO
RE9XLCAmbWxpbmVfd2luZG93KTsKKworICAgIC8qIENoZWNrIHZlcnRpY2FsIGxpbmUgcG9zaXRp
b24uICovCisgICAgZ19hc3NlcnRfY21waW50KHNsaW5lX3dpbmRvdzEueSArIHNsaW5lX3dpbmRv
dzEuaGVpZ2h0LCA8PSwgbGxpbmVfd2luZG93LnkpOworICAgIGdfYXNzZXJ0X2NtcGludChsbGlu
ZV93aW5kb3cueSArIGxsaW5lX3dpbmRvdy5oZWlnaHQgKyBzbGluZV93aW5kb3cyLmhlaWdodCwg
PD0sIG1saW5lX3dpbmRvdy55KTsKKworICAgIC8qIFBhcmFncmFwaHMgMSBhbmQgMyBoYXZlIGlk
ZW50aWNhbCB0ZXh0IGFuZCBhbGlnbm1lbnQuICovCisgICAgZ19hc3NlcnRfY21waW50KHNsaW5l
X3dpbmRvdzEueCwgPT0sIHNsaW5lX3dpbmRvdzIueCk7CisgICAgZ19hc3NlcnRfY21waW50KHNs
aW5lX3dpbmRvdzEud2lkdGgsID09LCBzbGluZV93aW5kb3cyLndpZHRoKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoc2xpbmVfd2luZG93MS5oZWlnaHQsID09LCBzbGluZV93aW5kb3cyLmhlaWdodCk7
CisKKyAgICAvKiBBbGwgbGluZXMgc2hvdWxkIGJlIHRoZSBzYW1lIGhlaWdodDsgbGluZSAyIGlz
IHRoZSB3aWRlc3QgbGluZS4gKi8KKyAgICBnX2Fzc2VydF9jbXBpbnQoc2xpbmVfd2luZG93MS5o
ZWlnaHQsID09LCBsbGluZV93aW5kb3cuaGVpZ2h0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc2xp
bmVfd2luZG93MS53aWR0aCwgPCwgbGxpbmVfd2luZG93LndpZHRoKTsKKworICAgIC8qIE1ha2Ug
c3VyZSB0aGUgY2hhcmFjdGVyIGV4dGVudHMgaml2ZSB3aXRoIHRoZSByYW5nZSBleHRlbnRzLiAq
LworICAgIGdpbnQgeDsKKyAgICBnaW50IHk7CisgICAgZ2ludCB3aWR0aDsKKyAgICBnaW50IGhl
aWdodDsKKworICAgIC8qIEZpcnN0IHBhcmFncmFwaCAoc2hvcnQgdGV4dCkuICovCisgICAgYXRr
X3RleHRfZ2V0X2NoYXJhY3Rlcl9leHRlbnRzKHNob3J0VGV4dDEsIDAsICZ4LCAmeSwgJndpZHRo
LCAmaGVpZ2h0LCBBVEtfWFlfV0lORE9XKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoeCwgPT0sIHNs
aW5lX3dpbmRvdzEueCk7CisgICAgZ19hc3NlcnRfY21waW50KHksID09LCBzbGluZV93aW5kb3cx
LnkpOworICAgIGdfYXNzZXJ0X2NtcGludChoZWlnaHQsID09LCBzbGluZV93aW5kb3cxLmhlaWdo
dCk7CisKKyAgICBhdGtfdGV4dF9nZXRfY2hhcmFjdGVyX2V4dGVudHMoc2hvcnRUZXh0MSwgOSwg
JngsICZ5LCAmd2lkdGgsICZoZWlnaHQsIEFUS19YWV9XSU5ET1cpOworICAgIGdfYXNzZXJ0X2Nt
cGludCh4LCA9PSwgc2xpbmVfd2luZG93MS54ICsgc2xpbmVfd2luZG93MS53aWR0aCAtIHdpZHRo
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoeSwgPT0sIHNsaW5lX3dpbmRvdzEueSk7CisgICAgZ19h
c3NlcnRfY21waW50KGhlaWdodCwgPT0sIHNsaW5lX3dpbmRvdzEuaGVpZ2h0KTsKKworICAgIC8q
IFNlY29uZCBwYXJhZ3JhcGggKGxvbmcgdGV4dCkuICovCisgICAgYXRrX3RleHRfZ2V0X2NoYXJh
Y3Rlcl9leHRlbnRzKGxvbmdUZXh0LCAwLCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCwgQVRLX1hZ
X1dJTkRPVyk7CisgICAgZ19hc3NlcnRfY21waW50KHgsID09LCBsbGluZV93aW5kb3cueCk7Cisg
ICAgZ19hc3NlcnRfY21waW50KHksID09LCBsbGluZV93aW5kb3cueSk7CisgICAgZ19hc3NlcnRf
Y21waW50KGhlaWdodCwgPT0sIGxsaW5lX3dpbmRvdy5oZWlnaHQpOworCisgICAgYXRrX3RleHRf
Z2V0X2NoYXJhY3Rlcl9leHRlbnRzKGxvbmdUZXh0LCA0MywgJngsICZ5LCAmd2lkdGgsICZoZWln
aHQsIEFUS19YWV9XSU5ET1cpOworICAgIGdfYXNzZXJ0X2NtcGludCh4LCA9PSwgbGxpbmVfd2lu
ZG93LnggKyBsbGluZV93aW5kb3cud2lkdGggLSB3aWR0aCk7CisgICAgZ19hc3NlcnRfY21waW50
KHksID09LCBsbGluZV93aW5kb3cueSk7CisgICAgZ19hc3NlcnRfY21waW50KGhlaWdodCwgPT0s
IGxsaW5lX3dpbmRvdy5oZWlnaHQpOworCisgICAgLyogVGhpcmQgcGFyYWdyYXBoIChzaG9ydCB0
ZXh0KS4gKi8KKyAgICBhdGtfdGV4dF9nZXRfY2hhcmFjdGVyX2V4dGVudHMoc2hvcnRUZXh0Miwg
MCwgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQsIEFUS19YWV9XSU5ET1cpOworICAgIGdfYXNzZXJ0
X2NtcGludCh4LCA9PSwgc2xpbmVfd2luZG93Mi54KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoeSwg
PT0sIHNsaW5lX3dpbmRvdzIueSk7CisgICAgZ19hc3NlcnRfY21waW50KGhlaWdodCwgPT0sIHNs
aW5lX3dpbmRvdzIuaGVpZ2h0KTsKKworICAgIGF0a190ZXh0X2dldF9jaGFyYWN0ZXJfZXh0ZW50
cyhzaG9ydFRleHQyLCA5LCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCwgQVRLX1hZX1dJTkRPVyk7
CisgICAgZ19hc3NlcnRfY21waW50KHgsID09LCBzbGluZV93aW5kb3cyLnggKyBzbGluZV93aW5k
b3cyLndpZHRoIC0gd2lkdGgpOworICAgIGdfYXNzZXJ0X2NtcGludCh5LCA9PSwgc2xpbmVfd2lu
ZG93Mi55KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoaGVpZ2h0LCA9PSwgc2xpbmVfd2luZG93Mi5o
ZWlnaHQpOworCisgICAgLyogRm91ciBwYXJhZ3JhcGggKDMgbGluZXMgbXVsdGktbGluZSB0ZXh0
KS4gKi8KKyAgICBhdGtfdGV4dF9nZXRfY2hhcmFjdGVyX2V4dGVudHMobXVsdGlsaW5lVGV4dCwg
MCwgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQsIEFUS19YWV9XSU5ET1cpOworICAgIGdfYXNzZXJ0
X2NtcGludCh4LCA9PSwgbWxpbmVfd2luZG93LngpOworICAgIGdfYXNzZXJ0X2NtcGludCh5LCA9
PSwgbWxpbmVfd2luZG93LnkpOworICAgIGdfYXNzZXJ0X2NtcGludCgzICogaGVpZ2h0LCA9PSwg
bWxpbmVfd2luZG93LmhlaWdodCk7CisKKyAgICBhdGtfdGV4dF9nZXRfY2hhcmFjdGVyX2V4dGVu
dHMobXVsdGlsaW5lVGV4dCwgNTksICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0LCBBVEtfWFlfV0lO
RE9XKTsKKyAgICAvKiBMYXN0IGxpbmUgd29uJ3QgZmlsbCB0aGUgd2hvbGUgd2lkdGggb2YgdGhl
IHJlY3RhbmdsZS4gKi8KKyAgICBnX2Fzc2VydF9jbXBpbnQoeCwgPD0sIG1saW5lX3dpbmRvdy54
ICsgbWxpbmVfd2luZG93LndpZHRoIC0gd2lkdGgpOworICAgIGdfYXNzZXJ0X2NtcGludCh5LCA9
PSwgbWxpbmVfd2luZG93LnkgKyBtbGluZV93aW5kb3cuaGVpZ2h0IC0gaGVpZ2h0KTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoaGVpZ2h0LCA8PSwgbWxpbmVfd2luZG93LmhlaWdodCk7CisKKyAgICAv
KiBDaGVjayB0aGF0IGV4dGVudCBmb3IgYSBmdWxsIGxpbmUgYXJlIHRoZSBzYW1lIGhlaWdodCB0
aGFuIGZvcgorICAgICAgIGEgcGFydGlhbCBzZWN0aW9uIG9mIHRoZSBzYW1lIGxpbmUgKi8KKyAg
ICBnaW50IHN0YXJ0T2Zmc2V0OworICAgIGdpbnQgZW5kT2Zmc2V0OworCisjaWYgIUFUS19DSEVD
S19WRVJTSU9OKDIsIDEwLCAwKQorICAgIGdjaGFyKiB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHRf
YXRfb2Zmc2V0KG11bHRpbGluZVRleHQsIDAsIEFUS19URVhUX0JPVU5EQVJZX0xJTkVfU1RBUlQs
ICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgZ19mcmVlKHRleHQpOworI2Vsc2UKKyAg
ICBnY2hhciogdGV4dCA9IGF0a190ZXh0X2dldF9zdHJpbmdfYXRfb2Zmc2V0KG11bHRpbGluZVRl
eHQsIDAsIEFUS19URVhUX0dSQU5VTEFSSVRZX0xJTkUsICZzdGFydE9mZnNldCwgJmVuZE9mZnNl
dCk7CisgICAgZ19mcmVlKHRleHQpOworI2VuZGlmCisKKyAgICBBdGtUZXh0UmVjdGFuZ2xlIGZs
aW5lX3dpbmRvdzsKKyAgICBBdGtUZXh0UmVjdGFuZ2xlIGFmbGluZV93aW5kb3c7CisgICAgYXRr
X3RleHRfZ2V0X3JhbmdlX2V4dGVudHMobXVsdGlsaW5lVGV4dCwgc3RhcnRPZmZzZXQsIGVuZE9m
ZnNldCwgQVRLX1hZX1dJTkRPVywgJmZsaW5lX3dpbmRvdyk7CisgICAgYXRrX3RleHRfZ2V0X3Jh
bmdlX2V4dGVudHMobXVsdGlsaW5lVGV4dCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCAtIDEsIEFU
S19YWV9XSU5ET1csICZhZmxpbmVfd2luZG93KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZmxpbmVf
d2luZG93LngsID09LCBhZmxpbmVfd2luZG93LngpOworICAgIGdfYXNzZXJ0X2NtcGludChmbGlu
ZV93aW5kb3cueSwgPT0sIGFmbGluZV93aW5kb3cueSk7CisgICAgZ19hc3NlcnRfY21waW50KGZs
aW5lX3dpbmRvdy5oZWlnaHQsID09LCBhZmxpbmVfd2luZG93LmhlaWdodCk7CisKKyAgICBnX29i
amVjdF91bnJlZihzaG9ydFRleHQxKTsKKyAgICBnX29iamVjdF91bnJlZihzaG9ydFRleHQyKTsK
KyAgICBnX29iamVjdF91bnJlZihsb25nVGV4dCk7CisgICAgZ19vYmplY3RfdW5yZWYobXVsdGls
aW5lVGV4dCk7CisgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Cit9CisKK3N0YXRpYyB2b2lk
IHRlc3RXZWJraXRBdGtMYXlvdXRBbmREYXRhVGFibGVzKCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAg
Z19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9u
ID0geyAwLCAwLCA4MDAsIDYwMCB9OworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtf
V0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRf
c3RyaW5nKHdlYlZpZXcsIGxheW91dEFuZERhdGFUYWJsZXMsIDAsIDAsIDApOworCisgICAgQXRr
T2JqZWN0KiBvYmplY3QgPSBnZXRXZWJBcmVhT2JqZWN0KHdlYlZpZXcpOworICAgIGdfYXNzZXJ0
KG9iamVjdCk7CisKKyAgICAvKiBDaGVjayB0aGUgbm9uLWxheW91dCB0YWJsZSAoZGF0YSB0YWJs
ZSkuICovCisKKyAgICBBdGtPYmplY3QqIHRhYmxlMSA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2li
bGVfY2hpbGQob2JqZWN0LCAwKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfVEFCTEUodGFibGUxKSk7
CisgICAgQXRrQXR0cmlidXRlU2V0KiBzZXQxID0gYXRrX29iamVjdF9nZXRfYXR0cmlidXRlcyh0
YWJsZTEpOworICAgIGdfYXNzZXJ0KHNldDEpOworICAgIGdfYXNzZXJ0KCFhdGtBdHRyaWJ1dGVT
ZXRDb250YWluc0F0dHJpYnV0ZU5hbWUoc2V0MSwgImxheW91dC1ndWVzcyIpKTsKKyAgICBhdGtf
YXR0cmlidXRlX3NldF9mcmVlKHNldDEpOworCisgICAgLyogQ2hlY2sgdGhlIGxheW91dCB0YWJs
ZS4gKi8KKworICAgIEF0a09iamVjdCogdGFibGUyID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJs
ZV9jaGlsZChvYmplY3QsIDEpOworICAgIGdfYXNzZXJ0KEFUS19JU19UQUJMRSh0YWJsZTIpKTsK
KyAgICBBdGtBdHRyaWJ1dGVTZXQqIHNldDIgPSBhdGtfb2JqZWN0X2dldF9hdHRyaWJ1dGVzKHRh
YmxlMik7CisgICAgZ19hc3NlcnQoc2V0Mik7CisgICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0
Q29udGFpbnNBdHRyaWJ1dGVOYW1lKHNldDIsICJsYXlvdXQtZ3Vlc3MiKSk7CisgICAgZ19hc3Nl
cnQoYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlTmFtZUhhc1ZhbHVlKHNldDIsICJsYXlvdXQtZ3Vl
c3MiLCAidHJ1ZSIpKTsKKyAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHNldDIpOworCisgICAg
Z19vYmplY3RfdW5yZWYodGFibGUxKTsKKyAgICBnX29iamVjdF91bnJlZih0YWJsZTIpOworICAg
IGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRr
TGlua3NXaXRoSW5saW5lSW1hZ2VzKCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0g
V0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmplY3RfcmVm
X3Npbmsod2ViVmlldyk7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA4
MDAsIDYwMCB9OworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdlYlZp
ZXcpLCAmYWxsb2NhdGlvbik7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZp
ZXcsIGxpbmtzV2l0aElubGluZUltYWdlcywgMCwgMCwgMCk7CisKKyAgICBBdGtPYmplY3QqIG9i
amVjdCA9IGdldFdlYkFyZWFPYmplY3Qod2ViVmlldyk7CisgICAgZ19hc3NlcnQob2JqZWN0KTsK
KworICAgIC8qIEZpcnN0IHBhcmFncmFwaCAobGluayBhdCB0aGUgYmVnaW5uaW5nKS4gKi8KKyAg
ICBBdGtPYmplY3QqIHBhcmFncmFwaCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQo
b2JqZWN0LCAwKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChwYXJhZ3JhcGgpKTsKKyAgICBn
aW50IHN0YXJ0T2Zmc2V0OworICAgIGdpbnQgZW5kT2Zmc2V0OworCisjaWYgIUFUS19DSEVDS19W
RVJTSU9OKDIsIDEwLCAwKQorICAgIGdjaGFyKiB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHRfYXRf
b2Zmc2V0KEFUS19URVhUKHBhcmFncmFwaCksIDAsIEFUS19URVhUX0JPVU5EQVJZX0xJTkVfU1RB
UlQsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgZ19hc3NlcnQodGV4dCk7CisgICAg
Z19hc3NlcnRfY21wc3RyKHRleHQsID09LCAiZm9vIGJhciBiYXoiKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoc3RhcnRPZmZzZXQsID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0
LCA9PSwgMTEpOworICAgIGdfZnJlZSh0ZXh0KTsKKyNlbHNlCisgICAgZ2NoYXIqIHRleHQgPSBh
dGtfdGV4dF9nZXRfc3RyaW5nX2F0X29mZnNldChBVEtfVEVYVChwYXJhZ3JhcGgpLCAwLCBBVEtf
VEVYVF9HUkFOVUxBUklUWV9MSU5FLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOworICAgIGdf
YXNzZXJ0KHRleHQpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwgImZvbyBiYXIgYmF6
Iik7CisgICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMCk7CisgICAgZ19hc3Nl
cnRfY21waW50KGVuZE9mZnNldCwgPT0sIDExKTsKKyAgICBnX2ZyZWUodGV4dCk7CisjZW5kaWYK
KworICAgIGdfb2JqZWN0X3VucmVmKHBhcmFncmFwaCk7CisKKyAgICAvKiBTZWNvbmQgcGFyYWdy
YXBoIChsaW5rIGluIHRoZSBtaWRkbGUpLiAqLworICAgIHBhcmFncmFwaCA9IGF0a19vYmplY3Rf
cmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAxKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfVEVY
VChwYXJhZ3JhcGgpKTsKKworI2lmICFBVEtfQ0hFQ0tfVkVSU0lPTigyLCAxMCwgMCkKKyAgICB0
ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0KEFUS19URVhUKHBhcmFncmFwaCksIDAs
IEFUS19URVhUX0JPVU5EQVJZX0xJTkVfU1RBUlQsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7
CisgICAgZ19hc3NlcnQodGV4dCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09LCAiZm9v
IGJhciBiYXoiKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAwKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMTEpOworICAgIGdfZnJlZSh0ZXh0KTsK
KyNlbHNlCisgICAgdGV4dCA9IGF0a190ZXh0X2dldF9zdHJpbmdfYXRfb2Zmc2V0KEFUS19URVhU
KHBhcmFncmFwaCksIDAsIEFUS19URVhUX0dSQU5VTEFSSVRZX0xJTkUsICZzdGFydE9mZnNldCwg
JmVuZE9mZnNldCk7CisgICAgZ19hc3NlcnQodGV4dCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRl
eHQsID09LCAiZm9vIGJhciBiYXoiKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQs
ID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMTEpOworICAgIGdf
ZnJlZSh0ZXh0KTsKKyNlbmRpZgorCisgICAgZ19vYmplY3RfdW5yZWYocGFyYWdyYXBoKTsKKwor
ICAgIC8qIFRoaXJkIHBhcmFncmFwaCAobGluayBhdCB0aGUgZW5kKS4gKi8KKyAgICBwYXJhZ3Jh
cGggPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMik7CisgICAgZ19h
c3NlcnQoQVRLX0lTX1RFWFQocGFyYWdyYXBoKSk7CisKKyNpZiAhQVRLX0NIRUNLX1ZFUlNJT04o
MiwgMTAsIDApCisgICAgdGV4dCA9IGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNldChBVEtfVEVY
VChwYXJhZ3JhcGgpLCAwLCBBVEtfVEVYVF9CT1VOREFSWV9MSU5FX1NUQVJULCAmc3RhcnRPZmZz
ZXQsICZlbmRPZmZzZXQpOworICAgIGdfYXNzZXJ0KHRleHQpOworICAgIGdfYXNzZXJ0X2NtcHN0
cih0ZXh0LCA9PSwgImZvbyBiYXIgYmF6Iik7CisgICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zm
c2V0LCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0sIDExKTsKKyAg
ICBnX2ZyZWUodGV4dCk7CisjZWxzZQorICAgIHRleHQgPSBhdGtfdGV4dF9nZXRfc3RyaW5nX2F0
X29mZnNldChBVEtfVEVYVChwYXJhZ3JhcGgpLCAwLCBBVEtfVEVYVF9HUkFOVUxBUklUWV9MSU5F
LCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOworICAgIGdfYXNzZXJ0KHRleHQpOworICAgIGdf
YXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwgImZvbyBiYXIgYmF6Iik7CisgICAgZ19hc3NlcnRfY21w
aW50KHN0YXJ0T2Zmc2V0LCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21waW50KGVuZE9mZnNldCwg
PT0sIDExKTsKKyAgICBnX2ZyZWUodGV4dCk7CisjZW5kaWYKKworICAgIGdfb2JqZWN0X3VucmVm
KHBhcmFncmFwaCk7CisgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Cit9CisKK3N0YXRpYyB2
b2lkIHRlc3RXZWJraXRBdGtIeXBlcnRleHRBbmRIeXBlcmxpbmtzKCkKK3sKKyAgICBXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7
CisgICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxv
Y2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9OworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0
ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7CisgICAgd2Via2l0X3dlYl92aWV3
X2xvYWRfc3RyaW5nKHdlYlZpZXcsIGh5cGVydGV4dEFuZEh5cGVybGlua3MsIDAsIDAsIDApOwor
CisgICAgQXRrT2JqZWN0KiBvYmplY3QgPSBnZXRXZWJBcmVhT2JqZWN0KHdlYlZpZXcpOworICAg
IGdfYXNzZXJ0KG9iamVjdCk7CisKKyAgICBBdGtPYmplY3QqIHBhcmFncmFwaDEgPSBhdGtfb2Jq
ZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMCk7CisgICAgZ19hc3NlcnQoQVRLX09C
SkVDVChwYXJhZ3JhcGgxKSk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShwYXJh
Z3JhcGgxKSA9PSBBVEtfUk9MRV9QQVJBR1JBUEgpOworICAgIGdfYXNzZXJ0KEFUS19JU19IWVBF
UlRFWFQocGFyYWdyYXBoMSkpOworCisgICAgLyogTm8gbGlua3MgaW4gdGhlIGZpcnN0IHBhcmFn
cmFwaC4gKi8KKyAgICBnaW50IG5MaW5rcyA9IGF0a19oeXBlcnRleHRfZ2V0X25fbGlua3MoQVRL
X0hZUEVSVEVYVChwYXJhZ3JhcGgxKSk7CisgICAgZ19hc3NlcnRfY21waW50KG5MaW5rcywgPT0s
IDApOworCisgICAgQXRrT2JqZWN0KiBwYXJhZ3JhcGgyID0gYXRrX29iamVjdF9yZWZfYWNjZXNz
aWJsZV9jaGlsZChvYmplY3QsIDEpOworICAgIGdfYXNzZXJ0KEFUS19PQkpFQ1QocGFyYWdyYXBo
MikpOworICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUocGFyYWdyYXBoMikgPT0gQVRL
X1JPTEVfUEFSQUdSQVBIKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfSFlQRVJURVhUKHBhcmFncmFw
aDIpKTsKKworICAgIC8qIENoZWNrIGxpbmtzIGluIHRoZSBzZWNvbmQgcGFyYWdyYXBoLgorICAg
ICAgIG5MaW5rcyA9IGF0a19oeXBlcnRleHRfZ2V0X25fbGlua3MoQVRLX0hZUEVSVEVYVChwYXJh
Z3JhcGgyKSk7CisgICAgICAgZ19hc3NlcnRfY21waW50KG5MaW5rcywgPT0sIDMpOyAqLworCisg
ICAgQXRrSHlwZXJsaW5rKiBoTGluazEgPSBhdGtfaHlwZXJ0ZXh0X2dldF9saW5rKEFUS19IWVBF
UlRFWFQocGFyYWdyYXBoMiksIDApOworICAgIGdfYXNzZXJ0KEFUS19IWVBFUkxJTksoaExpbmsx
KSk7CisgICAgQXRrT2JqZWN0KiBoTGlua09iamVjdDEgPSBhdGtfaHlwZXJsaW5rX2dldF9vYmpl
Y3QoaExpbmsxLCAwKTsKKyAgICBnX2Fzc2VydChBVEtfT0JKRUNUKGhMaW5rT2JqZWN0MSkpOwor
ICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoaExpbmtPYmplY3QxKSA9PSBBVEtfUk9M
RV9MSU5LKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfc3RhcnRfaW5k
ZXgoaExpbmsxKSwgPT0sIDApOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dl
dF9lbmRfaW5kZXgoaExpbmsxKSwgPT0sIDYpOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlw
ZXJsaW5rX2dldF9uX2FuY2hvcnMoaExpbmsxKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcHN0
cihhdGtfaHlwZXJsaW5rX2dldF91cmkoaExpbmsxLCAwKSwgPT0sICJodHRwOi8vZm9vLmJhci5i
YXovIik7CisKKyAgICBBdGtIeXBlcmxpbmsqIGhMaW5rMiA9IGF0a19oeXBlcnRleHRfZ2V0X2xp
bmsoQVRLX0hZUEVSVEVYVChwYXJhZ3JhcGgyKSwgMSk7CisgICAgZ19hc3NlcnQoQVRLX0hZUEVS
TElOSyhoTGluazIpKTsKKyAgICBBdGtPYmplY3QqIGhMaW5rT2JqZWN0MiA9IGF0a19oeXBlcmxp
bmtfZ2V0X29iamVjdChoTGluazIsIDApOworICAgIGdfYXNzZXJ0KEFUS19PQkpFQ1QoaExpbmtP
YmplY3QyKSk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShoTGlua09iamVjdDIp
ID09IEFUS19ST0xFX0xJTkspOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dl
dF9zdGFydF9pbmRleChoTGluazIpLCA9PSwgMTIpOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtf
aHlwZXJsaW5rX2dldF9lbmRfaW5kZXgoaExpbmsyKSwgPT0sIDMyKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoYXRrX2h5cGVybGlua19nZXRfbl9hbmNob3JzKGhMaW5rMiksID09LCAxKTsKKyAgICBn
X2Fzc2VydF9jbXBzdHIoYXRrX2h5cGVybGlua19nZXRfdXJpKGhMaW5rMiwgMCksID09LCAiaHR0
cDovL2Jhci5iYXouZm9vLyIpOworCisgICAgQXRrSHlwZXJsaW5rKiBoTGluazMgPSBhdGtfaHlw
ZXJ0ZXh0X2dldF9saW5rKEFUS19IWVBFUlRFWFQocGFyYWdyYXBoMiksIDIpOworICAgIGdfYXNz
ZXJ0KEFUS19IWVBFUkxJTksoaExpbmszKSk7CisgICAgQXRrT2JqZWN0KiBoTGlua09iamVjdDMg
PSBhdGtfaHlwZXJsaW5rX2dldF9vYmplY3QoaExpbmszLCAwKTsKKyAgICBnX2Fzc2VydChBVEtf
T0JKRUNUKGhMaW5rT2JqZWN0MykpOworICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUo
aExpbmtPYmplY3QzKSA9PSBBVEtfUk9MRV9MSU5LKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRr
X2h5cGVybGlua19nZXRfc3RhcnRfaW5kZXgoaExpbmszKSwgPT0sIDY1KTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfZW5kX2luZGV4KGhMaW5rMyksID09LCA3NSk7Cisg
ICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0X25fYW5jaG9ycyhoTGluazMpLCA9
PSwgMSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGF0a19oeXBlcmxpbmtfZ2V0X3VyaShoTGluazMs
IDApLCA9PSwgImh0dHA6Ly9iYXouZm9vLmJhci8iKTsKKworICAgIEF0a09iamVjdCogbGlzdCA9
IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAyKTsKKyAgICBnX2Fzc2Vy
dChBVEtfT0JKRUNUKGxpc3QpKTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGxp
c3QpID09IEFUS19ST0xFX0xJU1QpOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfb2JqZWN0X2dl
dF9uX2FjY2Vzc2libGVfY2hpbGRyZW4obGlzdCksID09LCAxKTsKKworICAgIEF0a09iamVjdCog
bGlzdEl0ZW0gPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGxpc3QsIDApOworICAg
IGdfYXNzZXJ0KEFUS19JU19URVhUKGxpc3RJdGVtKSk7CisgICAgZ19hc3NlcnQoQVRLX0lTX0hZ
UEVSVEVYVChsaXN0SXRlbSkpOworCisgICAgQXRrSHlwZXJsaW5rKiBoTGlua0luTGlzdEl0ZW0g
PSBhdGtfaHlwZXJ0ZXh0X2dldF9saW5rKEFUS19IWVBFUlRFWFQobGlzdEl0ZW0pLCAwKTsKKyAg
ICBnX2Fzc2VydChBVEtfSFlQRVJMSU5LKGhMaW5rSW5MaXN0SXRlbSkpOworICAgIEF0a09iamVj
dCogaExpbmtPYmplY3QgPSBhdGtfaHlwZXJsaW5rX2dldF9vYmplY3QoaExpbmtJbkxpc3RJdGVt
LCAwKTsKKyAgICBnX2Fzc2VydChBVEtfT0JKRUNUKGhMaW5rT2JqZWN0KSk7CisgICAgZ19hc3Nl
cnQoYXRrX29iamVjdF9nZXRfcm9sZShoTGlua09iamVjdCkgPT0gQVRLX1JPTEVfTElOSyk7Cisg
ICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0X3N0YXJ0X2luZGV4KGhMaW5rSW5M
aXN0SXRlbSksID09LCAyMCk7CisgICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0
X2VuZF9pbmRleChoTGlua0luTGlzdEl0ZW0pLCA9PSwgNDMpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChhdGtfaHlwZXJsaW5rX2dldF9uX2FuY2hvcnMoaExpbmtJbkxpc3RJdGVtKSwgPT0sIDEpOwor
ICAgIGdfYXNzZXJ0X2NtcHN0cihhdGtfaHlwZXJsaW5rX2dldF91cmkoaExpbmtJbkxpc3RJdGVt
LCAwKSwgPT0sICJodHRwOi8vZm9vLmJhci5iYXovIik7CisKKyAgICAvKiBGaW5hbGx5IGNoZWNr
IHRoZSBBdGtBY3Rpb24gaW50ZXJmYWNlIGZvciBhIGdpdmVuIEF0a0h5cGVybGluay4gKi8KKyAg
ICBnX2Fzc2VydChBVEtfSVNfQUNUSU9OKGhMaW5rMSkpOworICAgIGdfYXNzZXJ0X2NtcGludChh
dGtfYWN0aW9uX2dldF9uX2FjdGlvbnMoQVRLX0FDVElPTihoTGluazEpKSwgPT0sIDEpOworICAg
IGdfYXNzZXJ0X2NtcHN0cihhdGtfYWN0aW9uX2dldF9rZXliaW5kaW5nKEFUS19BQ1RJT04oaExp
bmsxKSwgMCksID09LCAiIik7CisgICAgZ19hc3NlcnRfY21wc3RyKGF0a19hY3Rpb25fZ2V0X25h
bWUoQVRLX0FDVElPTihoTGluazEpLCAwKSwgPT0sICJqdW1wIik7CisgICAgZ19hc3NlcnQoYXRr
X2FjdGlvbl9kb19hY3Rpb24oQVRLX0FDVElPTihoTGluazEpLCAwKSk7CisKKyAgICBnX29iamVj
dF91bnJlZihwYXJhZ3JhcGgxKTsKKyAgICBnX29iamVjdF91bnJlZihwYXJhZ3JhcGgyKTsKKyAg
ICBnX29iamVjdF91bnJlZihsaXN0KTsKKyAgICBnX29iamVjdF91bnJlZihsaXN0SXRlbSk7Cisg
ICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJraXRB
dGtMaXN0c09mSXRlbXMoKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRf
V0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBnX29iamVjdF9yZWZfc2luayh3
ZWJWaWV3KTsKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDgwMCwgNjAw
IH07CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQod2ViVmlldyksICZh
bGxvY2F0aW9uKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgbGlz
dHNPZkl0ZW1zLCAwLCAwLCAwKTsKKworICAgIEF0a09iamVjdCogb2JqZWN0ID0gZ2V0V2ViQXJl
YU9iamVjdCh3ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChvYmplY3QpOworCisgICAgLyogVW5vcmRl
cmVkIGxpc3QuICovCisKKyAgICBBdGtPYmplY3QqIHVMaXN0ID0gYXRrX29iamVjdF9yZWZfYWNj
ZXNzaWJsZV9jaGlsZChvYmplY3QsIDApOworICAgIGdfYXNzZXJ0KEFUS19PQkpFQ1QodUxpc3Qp
KTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKHVMaXN0KSA9PSBBVEtfUk9MRV9M
SVNUKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX29iamVjdF9nZXRfbl9hY2Nlc3NpYmxlX2No
aWxkcmVuKHVMaXN0KSwgPT0sIDMpOworCisgICAgQXRrT2JqZWN0KiBpdGVtMSA9IGF0a19vYmpl
Y3RfcmVmX2FjY2Vzc2libGVfY2hpbGQodUxpc3QsIDApOworICAgIEF0a09iamVjdCogaXRlbTIg
PSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKHVMaXN0LCAxKTsKKyAgICBBdGtPYmpl
Y3QqIGl0ZW0zID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZCh1TGlzdCwgMik7CisK
KyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX29iamVjdF9nZXRfbl9hY2Nlc3NpYmxlX2NoaWxkcmVu
KGl0ZW0xKSwgPT0sIDApOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfb2JqZWN0X2dldF9uX2Fj
Y2Vzc2libGVfY2hpbGRyZW4oaXRlbTIpLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21waW50KGF0
a19vYmplY3RfZ2V0X25fYWNjZXNzaWJsZV9jaGlsZHJlbihpdGVtMyksID09LCAxKTsKKworICAg
IGdfb2JqZWN0X3VucmVmKGl0ZW0xKTsKKyAgICBnX29iamVjdF91bnJlZihpdGVtMik7CisgICAg
Z19vYmplY3RfdW5yZWYoaXRlbTMpOworCisgICAgLyogT3JkZXJlZCBsaXN0LiAqLworCisgICAg
QXRrT2JqZWN0KiBvTGlzdCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0
LCAxKTsKKyAgICBnX2Fzc2VydChBVEtfT0JKRUNUKG9MaXN0KSk7CisgICAgZ19hc3NlcnQoYXRr
X29iamVjdF9nZXRfcm9sZShvTGlzdCkgPT0gQVRLX1JPTEVfTElTVCk7CisgICAgZ19hc3NlcnRf
Y21waW50KGF0a19vYmplY3RfZ2V0X25fYWNjZXNzaWJsZV9jaGlsZHJlbihvTGlzdCksID09LCAz
KTsKKworICAgIGl0ZW0xID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvTGlzdCwg
MCk7CisgICAgaXRlbTIgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9MaXN0LCAx
KTsKKyAgICBpdGVtMyA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob0xpc3QsIDIp
OworCisgICAgZ19hc3NlcnRfY21waW50KGF0a19vYmplY3RfZ2V0X25fYWNjZXNzaWJsZV9jaGls
ZHJlbihpdGVtMSksID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX29iamVjdF9nZXRf
bl9hY2Nlc3NpYmxlX2NoaWxkcmVuKGl0ZW0yKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChhdGtfb2JqZWN0X2dldF9uX2FjY2Vzc2libGVfY2hpbGRyZW4oaXRlbTMpLCA9PSwgMSk7CisK
KyAgICBnX29iamVjdF91bnJlZihpdGVtMSk7CisgICAgZ19vYmplY3RfdW5yZWYoaXRlbTIpOwor
ICAgIGdfb2JqZWN0X3VucmVmKGl0ZW0zKTsKKworICAgIGdfb2JqZWN0X3VucmVmKHVMaXN0KTsK
KyAgICBnX29iamVjdF91bnJlZihvTGlzdCk7CisgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7
Cit9CisKK3R5cGVkZWYgZW51bSB7CisgIFRFWFRfQ0hBTkdFX0lOU0VSVCA9IDEsCisgIFRFWFRf
Q0hBTkdFX1JFTU9WRSA9IDIKK30gVGV4dENoYW5nZVR5cGU7CisKK3N0YXRpYyBnY2hhciogdGV4
dENoYW5nZWRSZXN1bHQgPSAwOworCitzdGF0aWMgdm9pZCB0ZXh0Q2hhbmdlZENiKEF0a1RleHQq
IHRleHQsIGdpbnQgcG9zLCBnaW50IGxlbiwgZ2NoYXIqIG1vZGlmaWVkVGV4dCwgZ3BvaW50ZXIg
ZGF0YSkKK3sKKyAgICBnX2Fzc2VydCh0ZXh0ICYmIEFUS19JU19PQkpFQ1QodGV4dCkpOworCisg
ICAgVGV4dENoYW5nZVR5cGUgdHlwZSA9IEdQT0lOVEVSX1RPX0lOVChkYXRhKTsKKyAgICBnX2Zy
ZWUodGV4dENoYW5nZWRSZXN1bHQpOworICAgIHRleHRDaGFuZ2VkUmVzdWx0ID0gZ19zdHJkdXBf
cHJpbnRmKCJ8JWR8JWR8JWR8JyVzJ3wiLCB0eXBlLCBwb3MsIGxlbiwgbW9kaWZpZWRUZXh0KTsK
K30KKworc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a1RleHRDaGFuZ2VkTm90aWZpY2F0aW9ucygp
Cit7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRf
d2ViX3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOworICAgIEd0
a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgODAwLCA2MDAgfTsKKyAgICBndGtfd2lk
Z2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOworICAg
IHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LCBmb3JtV2l0aFRleHRJbnB1dHMs
IDAsIDAsIDApOworCisgICAgQXRrT2JqZWN0KiBvYmplY3QgPSBnZXRXZWJBcmVhT2JqZWN0KHdl
YlZpZXcpOworICAgIGdfYXNzZXJ0KG9iamVjdCk7CisKKyAgICBBdGtPYmplY3QqIGZvcm0gPSBh
dGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMCk7CisgICAgZ19hc3NlcnQo
QVRLX0lTX09CSkVDVChmb3JtKSk7CisKKyAgICAvKiBGaXJzdCBjaGVjayBub3JtYWwgdGV4dCBl
bnRyaWVzLiAqLworICAgIEF0a09iamVjdCogdGV4dEVudHJ5ID0gYXRrX29iamVjdF9yZWZfYWNj
ZXNzaWJsZV9jaGlsZChmb3JtLCAwKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfRURJVEFCTEVfVEVY
VCh0ZXh0RW50cnkpKTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKEFUS19PQkpF
Q1QodGV4dEVudHJ5KSkgPT0gQVRLX1JPTEVfRU5UUlkpOworCisgICAgZ19zaWduYWxfY29ubmVj
dCh0ZXh0RW50cnksICJ0ZXh0LWluc2VydCIsCisgICAgICAgICAgICAgICAgICAgICBHX0NBTExC
QUNLKHRleHRDaGFuZ2VkQ2IpLAorICAgICAgICAgICAgICAgICAgICAgR0lOVF9UT19QT0lOVEVS
KFRFWFRfQ0hBTkdFX0lOU0VSVCkpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QodGV4dEVudHJ5LCAi
dGV4dC1yZW1vdmUiLAorICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyh0ZXh0Q2hhbmdl
ZENiKSwKKyAgICAgICAgICAgICAgICAgICAgIEdJTlRfVE9fUE9JTlRFUihURVhUX0NIQU5HRV9S
RU1PVkUpKTsKKworICAgIGdpbnQgcG9zID0gMDsKKyAgICBhdGtfZWRpdGFibGVfdGV4dF9pbnNl
cnRfdGV4dChBVEtfRURJVEFCTEVfVEVYVCh0ZXh0RW50cnkpLCAiZm9vIGJhciBiYXoiLCAxMSwg
JnBvcyk7CisgICAgY2hhciogdGV4dCA9IGF0a190ZXh0X2dldF90ZXh0KEFUS19URVhUKHRleHRF
bnRyeSksIDAsIC0xKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGV4dCwgPT0sICJmb28gYmFyIGJh
eiIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0Q2hhbmdlZFJlc3VsdCwgPT0sICJ8MXwwfDEx
fCdmb28gYmFyIGJheid8Iik7CisgICAgZ19mcmVlKHRleHQpOworCisgICAgYXRrX2VkaXRhYmxl
X3RleHRfZGVsZXRlX3RleHQoQVRLX0VESVRBQkxFX1RFWFQodGV4dEVudHJ5KSwgNCwgNyk7Cisg
ICAgdGV4dCA9IGF0a190ZXh0X2dldF90ZXh0KEFUS19URVhUKHRleHRFbnRyeSksIDAsIC0xKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIodGV4dCwgPT0sICJmb28gIGJheiIpOworICAgIGdfYXNzZXJ0
X2NtcHN0cih0ZXh0Q2hhbmdlZFJlc3VsdCwgPT0sICJ8Mnw0fDN8J2Jhcid8Iik7CisgICAgZ19m
cmVlKHRleHQpOworCisgICAgcG9zID0gNDsKKyAgICBhdGtfZWRpdGFibGVfdGV4dF9pbnNlcnRf
dGV4dChBVEtfRURJVEFCTEVfVEVYVCh0ZXh0RW50cnkpLCAicXV4IHF1dXggdG9iZWlnbm9yZWQi
LCA4LCAmcG9zKTsKKyAgICB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHQoQVRLX1RFWFQodGV4dEVu
dHJ5KSwgMCwgLTEpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwgImZvbyBxdXggcXV1
eCBiYXoiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGV4dENoYW5nZWRSZXN1bHQsID09LCAifDF8
NHw4fCdxdXggcXV1eCd8Iik7CisgICAgZ19mcmVlKHRleHQpOworCisgICAgLyogTm93IGNoZWNr
IGZvciBwYXNzd29yZCBlbnRyaWVzLiAqLworICAgIEF0a09iamVjdCogcGFzc3dvcmRFbnRyeSA9
IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoZm9ybSwgMSk7CisgICAgZ19hc3NlcnQo
QVRLX0lTX0VESVRBQkxFX1RFWFQocGFzc3dvcmRFbnRyeSkpOworICAgIGdfYXNzZXJ0KGF0a19v
YmplY3RfZ2V0X3JvbGUoQVRLX09CSkVDVChwYXNzd29yZEVudHJ5KSkgPT0gQVRLX1JPTEVfUEFT
U1dPUkRfVEVYVCk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHBhc3N3b3JkRW50cnksICJ0ZXh0
LWluc2VydCIsCisgICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKHRleHRDaGFuZ2VkQ2Ip
LAorICAgICAgICAgICAgICAgICAgICAgR0lOVF9UT19QT0lOVEVSKFRFWFRfQ0hBTkdFX0lOU0VS
VCkpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QocGFzc3dvcmRFbnRyeSwgInRleHQtcmVtb3ZlIiwK
KyAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sodGV4dENoYW5nZWRDYiksCisgICAgICAg
ICAgICAgICAgICAgICBHSU5UX1RPX1BPSU5URVIoVEVYVF9DSEFOR0VfUkVNT1ZFKSk7CisKKyAg
ICBwb3MgPSAwOworICAgIC8qIEEgc2luZ2xlIGJ1bGxldCBjaGFyYWN0ZXIgaXMgJ1wzNDJcMjAw
XDI0MicgKi8KKyAgICBhdGtfZWRpdGFibGVfdGV4dF9pbnNlcnRfdGV4dChBVEtfRURJVEFCTEVf
VEVYVChwYXNzd29yZEVudHJ5KSwgImZvb2JhciIsIDYsICZwb3MpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cih0ZXh0Q2hhbmdlZFJlc3VsdCwgPT0sICJ8MXwwfDZ8J1wzNDJcMjAwXDI0MlwzNDJcMjAw
XDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0Mid8Iik7
CisgICAgdGV4dCA9IGF0a190ZXh0X2dldF90ZXh0KEFUS19URVhUKHBhc3N3b3JkRW50cnkpLCAw
LCAtMSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09LCAiXDM0MlwyMDBcMjQyXDM0Mlwy
MDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyIik7
CisgICAgZ19mcmVlKHRleHQpOworCisgICAgYXRrX2VkaXRhYmxlX3RleHRfZGVsZXRlX3RleHQo
QVRLX0VESVRBQkxFX1RFWFQocGFzc3dvcmRFbnRyeSksIDIsIDQpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cih0ZXh0Q2hhbmdlZFJlc3VsdCwgPT0sICJ8MnwyfDJ8J1wzNDJcMjAwXDI0MlwzNDJcMjAw
XDI0Mid8Iik7CisKKyAgICB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHQoQVRLX1RFWFQocGFzc3dv
cmRFbnRyeSksIDAsIC0xKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGV4dCwgPT0sICJcMzQyXDIw
MFwyNDJcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDIiKTsKKyAgICBnX2ZyZWUo
dGV4dCk7CisKKyAgICBwb3MgPSAzOworICAgIGF0a19lZGl0YWJsZV90ZXh0X2luc2VydF90ZXh0
KEFUS19FRElUQUJMRV9URVhUKHBhc3N3b3JkRW50cnkpLCAicXV4IHRvYmVpZ25vcmVkIiwgMywg
JnBvcyk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHRDaGFuZ2VkUmVzdWx0LCA9PSwgInwxfDN8
M3wnXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyJ3wiKTsKKworICAgIHRleHQg
PSBhdGtfdGV4dF9nZXRfdGV4dChBVEtfVEVYVChwYXNzd29yZEVudHJ5KSwgMCwgLTEpOworICAg
IGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwgIlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJc
MjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MiIp
OworICAgIGdfZnJlZSh0ZXh0KTsKKworICAgIGdfZnJlZSh0ZXh0Q2hhbmdlZFJlc3VsdCk7CisK
KyAgICBnX29iamVjdF91bnJlZihmb3JtKTsKKyAgICBnX29iamVjdF91bnJlZih0ZXh0RW50cnkp
OworICAgIGdfb2JqZWN0X3VucmVmKHBhc3N3b3JkRW50cnkpOworICAgIGdfb2JqZWN0X3VucmVm
KHdlYlZpZXcpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrUGFyZW50Rm9yUm9vdE9i
amVjdCgpCit7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3
ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsg
MCwgMCwgODAwLCA2MDAgfTsKKyAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdF
VCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmlu
Zyh3ZWJWaWV3LCBjb250ZW50cywgMCwgMCwgMCk7CisKKyAgICAvKiBXZSBuZWVkIGEgcGFyZW50
IGNvbnRhaW5lciB3aWRnZXQgZm9yIHRoZSB3ZWJ2aWV3LiAqLworICAgIEd0a1dpZGdldCogcGFy
ZW50Q29udGFpbmVyID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7CisgICAg
Z19vYmplY3RfcmVmX3NpbmsocGFyZW50Q29udGFpbmVyKTsKKyAgICBndGtfY29udGFpbmVyX2Fk
ZChHVEtfQ09OVEFJTkVSKHBhcmVudENvbnRhaW5lciksIEdUS19XSURHRVQod2ViVmlldykpOwor
CisgICAgQXRrT2JqZWN0KiBheFBhcmVudCA9IGd0a193aWRnZXRfZ2V0X2FjY2Vzc2libGUocGFy
ZW50Q29udGFpbmVyKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfT0JKRUNUKGF4UGFyZW50KSk7CisK
KyAgICBBdGtPYmplY3QqIGF4Um9vdCA9IGd0a193aWRnZXRfZ2V0X2FjY2Vzc2libGUoR1RLX1dJ
REdFVCh3ZWJWaWV3KSk7CisgICAgZ19hc3NlcnQoQVRLX0lTX09CSkVDVChheFJvb3QpKTsKKwor
ICAgIC8qIFRoZSBjaGlsZCBmb3IgdGhlIHBhcmVudCBjb250YWluZXIncyBhY2Nlc3NpYmlsaXR5
IG9iamVjdAorICAgICAgIHNob3VsZCBiZSB0aGUgYWNjZXNzaWJpbGl0eSBvYmplY3QgZm9yIHRo
ZSBXZWJWaWV3J3Mgcm9vdC4gKi8KKyAgICBBdGtPYmplY3QqIGF4UGFyZW50Q2hpbGQgPSBhdGtf
b2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGF4UGFyZW50LCAwKTsKKyAgICBnX2Fzc2VydChh
eFBhcmVudENoaWxkID09IGF4Um9vdCk7CisKKyAgICAvKiBCb3R0b20tdXAgbmF2aWdhdGlvbiBz
aG91bGQgbWF0Y2ggdG9wLWRvd24gb25lLiAqLworICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0
X3BhcmVudChheFBhcmVudENoaWxkKSA9PSBheFBhcmVudCk7CisKKyAgICBnX29iamVjdF91bnJl
ZihheFBhcmVudENoaWxkKTsKKyAgICBnX29iamVjdF91bnJlZihwYXJlbnRDb250YWluZXIpOwor
fQorCitzdGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrU2V0UGFyZW50Rm9yT2JqZWN0KCkKK3sKKyAg
ICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmll
d19uZXcoKSk7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYw
MCB9OworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAm
YWxsb2NhdGlvbik7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIGNv
bnRlbnRzLCAwLCAwLCAwKTsKKworICAgIC8qIFB1dCB0aGUgd2VidmlldyBpbiBhIHBhcmVudCBj
b250YWluZXIgd2lkZ2V0IHRvIGNoZWNrIHRoYXQgdGhlCisgICAgICAgbm9ybWFsIGJlaGF2aW91
ciBrZWVwcyB3b3JraW5nIGFzIGV4cGVjdGVkIGJ5IGRlZmF1bHQuICovCisgICAgR3RrV2lkZ2V0
KiBwYXJlbnRDb250YWluZXIgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsK
KyAgICBnX29iamVjdF9yZWZfc2luayhwYXJlbnRDb250YWluZXIpOworICAgIGd0a19jb250YWlu
ZXJfYWRkKEdUS19DT05UQUlORVIocGFyZW50Q29udGFpbmVyKSwgR1RLX1dJREdFVCh3ZWJWaWV3
KSk7CisKKyAgICBBdGtPYmplY3QqIGF4Um9vdCA9IGd0a193aWRnZXRfZ2V0X2FjY2Vzc2libGUo
R1RLX1dJREdFVCh3ZWJWaWV3KSk7CisgICAgZ19hc3NlcnQoQVRLX0lTX09CSkVDVChheFJvb3Qp
KTsKKworICAgIEF0a09iamVjdCogYXhQYXJlbnQgPSBndGtfd2lkZ2V0X2dldF9hY2Nlc3NpYmxl
KHBhcmVudENvbnRhaW5lcik7CisgICAgZ19hc3NlcnQoQVRLX0lTX09CSkVDVChheFBhcmVudCkp
OworCisgICAgLyogVGhlIHBhcmVudCBvZiB0aGUgcm9vdCBvYmplY3QgaXMgdGhlIHBhcmVudCBj
b250YWluZXIncyBhMTF5IG9iamVjdC4gKi8KKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9w
YXJlbnQoYXhSb290KSA9PSBheFBhcmVudCk7CisKKyAgICAvKiBXZSBub3cgbmVlZCB0byB1c2Ug
c29tZXRoaW5nIGFzIGEgYW4gYWx0ZXJuYXRpdmUgcGFyZW50IGZvcgorICAgICAgIHRoZSBhMTF5
IG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIHJvb3Qgb2YgdGhlIERPTSB0cmVlLiAqLworICAg
IEd0a1dpZGdldCogYWx0ZXJuYXRpdmVQYXJlbnQgPSBndGtfYnV0dG9uX25ldygpOworICAgIGdf
b2JqZWN0X3JlZl9zaW5rKGFsdGVybmF0aXZlUGFyZW50KTsKKworICAgIEF0a09iamVjdCogYXhB
bHRlcm5hdGl2ZVBhcmVudCA9IGd0a193aWRnZXRfZ2V0X2FjY2Vzc2libGUoYWx0ZXJuYXRpdmVQ
YXJlbnQpOworICAgIGdfYXNzZXJ0KEFUS19JU19PQkpFQ1QoYXhBbHRlcm5hdGl2ZVBhcmVudCkp
OworCisgICAgLyogTWFudWFsbHkgc2V0IHRoZSBhbHRlcm5hdGl2ZSBwYXJlbnQncyBhY2Nlc3Np
YmlsaXR5IG9iamVjdCBhcworICAgICAgIHRoZSBwYXJlbnQgZm9yIHRoZSBXZWJLaXQgYWNjZXNz
aWJpbGl0eSByb290IG9iamVjdCBhbmQgY2hlY2suICovCisgICAgYXRrX29iamVjdF9zZXRfcGFy
ZW50KGF4Um9vdCwgYXhBbHRlcm5hdGl2ZVBhcmVudCk7CisgICAgZ19hc3NlcnQoYXRrX29iamVj
dF9nZXRfcGFyZW50KGF4Um9vdCkgPT0gYXhBbHRlcm5hdGl2ZVBhcmVudCk7CisKKyAgICBnX29i
amVjdF91bnJlZihhbHRlcm5hdGl2ZVBhcmVudCk7CisgICAgZ19vYmplY3RfdW5yZWYocGFyZW50
Q29udGFpbmVyKTsKK30KKworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCitzdGF0aWMgdm9pZCBp
bml0aWFsaXplVGVzdGluZ0ZyYW1ld29yayhpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAg
LyogRW5zdXJlIEdBSUwgaXMgdGhlIG9ubHkgbW9kdWxlIGxvYWRlZC4gKi8KKyAgICBnX3NldGVu
digiR1RLX01PRFVMRVMiLCAiZ2FpbCIsIFRSVUUpOworCisgICAgLyogRm9sbG93aW5nIGxpbmVz
IHdlcmUgdGFrZW4gZnJvbSBndGtfdGVzdF9pbml0KCkuICovCisgICAgZ190ZXN0X2luaXQoJmFy
Z2MsICZhcmd2LCAwKTsKKyAgICBndGtfZGlzYWJsZV9zZXRsb2NhbGUoKTsKKyAgICBzZXRsb2Nh
bGUoTENfQUxMLCAiQyIpOworCisgICAgZ3RrX2luaXQoJmFyZ2MsICZhcmd2KTsKK30KKyNlbmRp
ZgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisjaWZkZWYgR1RLX0FQSV9W
RVJTSU9OXzIKKyAgICAvKiBXZSBjYW4ndCBqdXN0IGNhbGwgdG8gZ3RrX3Rlc3RfaW5pdCgpIGlu
IHRoaXMgY2FzZSBiZWNhdXNlIGl0cworICAgICAgIGltcGxlbWVudGF0aW9uIG1ha2VzIHN1cmUg
dGhhdCBubyBHVEsrIG1vZHVsZSB3aWxsIGJlIGxvYWRlZCwgYW5kCisgICAgICAgd2Ugd2lsbCBu
ZWVkIHRvIGxvYWQgR0FJTCBmb3IgdGVzdHMgdGhhdCBuZWVkIHRvIHVzZSBBdGtPYmplY3RzCisg
ICAgICAgZnJvbSBub24tV2ViS2l0IEd0a1dpZGdldHMgKGUuZyBwYXJlbnRGb3JSb290T2JqZWN0
KS4qLworICAgIGluaXRpYWxpemVUZXN0aW5nRnJhbWV3b3JrKGFyZ2MsIGFyZ3YpOworI2Vsc2UK
KyAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7CisjZW5kaWYKKworICAgIGdf
dGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7CisgICAgZ190ZXN0X2Fk
ZF9mdW5jKCIvd2Via2l0L2F0ay9jYXJldE9mZnNldHMiLCB0ZXN0V2Via2l0QXRrQ2FyZXRPZmZz
ZXRzKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2NhcmV0T2Zmc2V0c0FuZEV4
dHJhbm91c1doaXRlU3BhY2VzIiwgdGVzdFdlYmtpdEF0a0NhcmV0T2Zmc2V0c0FuZEV4dHJhbm91
c1doaXRlU3BhY2VzKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2NvbWJvQm94
IiwgdGVzdFdlYmtpdEF0a0NvbWJvQm94KTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQv
YXRrL2RvY3VtZW50TG9hZGluZ0V2ZW50cyIsIHRlc3RXZWJraXRBdGtEb2N1bWVudExvYWRpbmdF
dmVudHMpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvZW1iZWRkZWRPYmplY3Rz
IiwgdGVzdFdlYmtpdEF0a0VtYmVkZGVkT2JqZWN0cyk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIv
d2Via2l0L2F0ay9nZXRIZWFkZXJzSW5UYWJsZSIsIHRlc3RXZWJraXRBdGtHZXRIZWFkZXJzSW5U
YWJsZSk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay90ZXh0QXR0cmlidXRlcyIs
IHRlc3RXZWJraXRBdGtUZXh0QXR0cmlidXRlcyk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Vi
a2l0L2F0ay90ZXh0U2VsZWN0aW9ucyIsIHRlc3RXZWJraXRBdGtUZXh0U2VsZWN0aW9ucyk7Cisg
ICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9nZXRFeHRlbnRzIiwgdGVzdFdlYmtpdEF0
a0dldEV4dGVudHMpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvaHlwZXJ0ZXh0
QW5kSHlwZXJsaW5rcyIsIHRlc3RXZWJraXRBdGtIeXBlcnRleHRBbmRIeXBlcmxpbmtzKTsKKyAg
ICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2xheW91dEFuZERhdGFUYWJsZXMiLCB0ZXN0
V2Via2l0QXRrTGF5b3V0QW5kRGF0YVRhYmxlcyk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Vi
a2l0L2F0ay9saW5rc1dpdGhJbmxpbmVJbWFnZXMiLCB0ZXN0V2Via2l0QXRrTGlua3NXaXRoSW5s
aW5lSW1hZ2VzKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2xpc3RzT2ZJdGVt
cyIsIHRlc3RXZWJraXRBdGtMaXN0c09mSXRlbXMpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dl
YmtpdC9hdGsvdGV4dENoYW5nZWROb3RpZmljYXRpb25zIiwgdGVzdFdlYmtpdEF0a1RleHRDaGFu
Z2VkTm90aWZpY2F0aW9ucyk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9wYXJl
bnRGb3JSb290T2JqZWN0IiwgdGVzdFdlYmtpdEF0a1BhcmVudEZvclJvb3RPYmplY3QpOworICAg
IGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvc2V0UGFyZW50Rm9yT2JqZWN0IiwgdGVzdFdl
YmtpdEF0a1NldFBhcmVudEZvck9iamVjdCk7CisgICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7Cit9
CisKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3Rh
dGtyb2xlcy5jIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGF0a3Jv
bGVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg4MTdjZgotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RhdGty
b2xlcy5jCkBAIC0wLDAgKzEsNDI2IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTAgSm9hbm1h
cmllIERpZ2dzCisgKiBDb3B5cmlnaHQgwqkgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CisjaW5j
bHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKworLyogTm9uIGZv
cm0gcm9sZXMgKi8KKyNkZWZpbmUgSFRNTF9ET0NVTUVOVF9GUkFNRSAiPGh0bWw+PGJvZHk+VGhp
cyBpcyBhIHRlc3QuPC9ib2R5PjwvaHRtbD4iCisjZGVmaW5lIEhUTUxfSEVBRElORyAiPGh0bWw+
PGJvZHk+PGgxPjE8L2gxPjxoMj4yPC9oMj48aDM+MzwvaDM+PGg0PjQ8L2g0PjxoNT41PC9oNT48
aDY+NjwvaDY+PC9ib2R5PjwvaHRtbD4iCisjZGVmaW5lIEhUTUxfSU1BR0UgIjxodG1sPjxib2R5
PjxpbWcgc3JjPSdmb29iYXIucG5nJyBhbHQ9J1RoaXMgaXMgYSB0ZXN0LicvPjwvYm9keT48L2h0
bWw+IgorI2RlZmluZSBIVE1MX0xJTktfVEVYVCAiPGh0bWw+PGJvZHk+PGEgaHJlZj0nZm9vYmFy
Lmh0bWwnPlRoaXMgaXMgYSB0ZXN0LjwvYT48L2JvZHk+PC9odG1sPiIKKyNkZWZpbmUgSFRNTF9M
SVNUICI8aHRtbD48Ym9keT48dWw+PGxpPjE8L2xpPjxsaT4yPC9saT48L3VsPjxvbD48bGk+MTwv
bGk+PGxpPjI8L2xpPjwvb2w+PC9ib2R5PjwvaHRtbD4iCisjZGVmaW5lIEhUTUxfUEFSQUdSQVBI
ICI8aHRtbD48Ym9keT48cD5UaGlzIGlzIGEgdGVzdC48L3A+PC9ib2R5PjwvaHRtbD4iCisjZGVm
aW5lIEhUTUxfU0VDVElPTiAiPGh0bWw+PGJvZHk+PGRpdj5UaGlzIGlzIGEgdGVzdC48L2Rpdj48
L2JvZHk+PC9odG1sPiIKKyNkZWZpbmUgSFRNTF9UQUJMRSAiPGh0bWw+PGJvZHk+PHRhYmxlIGJv
cmRlcj0nMSc+PHRyPjx0ZD5UaGlzIGlzPC90ZD48dGQ+YSB0ZXN0LjwvdGQ+PC90cj48L3RhYmxl
PjwvYm9keT48L2h0bWw+IgorI2RlZmluZSBIVE1MX1NFUEFSQVRPUiAiPGh0bWw+PGJvZHk+PGhy
Lz48L2JvZHk+PC9odG1sPiIKKyNkZWZpbmUgSFRNTF9DT01CT0JPWCAiPGh0bWw+PGJvZHk+PHNl
bGVjdCBzaXplPScxJz48b3B0aW9uPm9uZTwvb3B0aW9uPjxvcHRpb24+dHdvPC9vcHRpb24+PG9w
dGlvbj50aHJlZTwvb3B0aW9uPjwvc2VsZWN0PjwvYm9keT48L2h0bWw+IgorLyogRm9ybSByb2xl
cyAqLworI2RlZmluZSBIVE1MX0ZPUk0gIjxodG1sPjxib2R5Pjxmb3JtPlRoaXMgaXMgYSB0ZXN0
LjwvZm9ybT48L2JvZHk+PC9odG1sPiIKKyNkZWZpbmUgSFRNTF9DSEVDS19CT1ggIjxodG1sPjxi
b2R5PjxpbnB1dCB0eXBlPSdjaGVja2JveCcgLz5UaGlzIGlzIGEgdGVzdC48L2JvZHk+PC9odG1s
PiIKKyNkZWZpbmUgSFRNTF9MQUJFTEVEX0VOVFJZICI8aHRtbD48Ym9keT48bGFiZWwgZm9yPSdm
b28nPk5hbWU6PC9sYWJlbD48aW5wdXQgdHlwZT0ndGV4dCcgaWQ9J2ZvbycgLz48L2JvZHk+PC9o
dG1sPiIKKyNkZWZpbmUgSFRNTF9MSVNUQk9YICI8aHRtbD48Ym9keT48c2VsZWN0IHNpemU9JzMn
PjxvcHRpb24+b25lPC9vcHRpb24+PG9wdGlvbj50d288L29wdGlvbj48b3B0aW9uPnRocmVlPC9v
cHRpb24+PC9zZWxlY3Q+PC9ib2R5PjwvaHRtbD4iCisjZGVmaW5lIEhUTUxfUEFTU1dPUkRfVEVY
VCAiPGh0bWw+PGJvZHk+PGlucHV0IHR5cGU9J3Bhc3N3b3JkJyAvPjwvYm9keT48L2h0bWw+Igor
I2RlZmluZSBIVE1MX1BVU0hfQlVUVE9OICI8aHRtbD48Ym9keT48aW5wdXQgdHlwZT0nc3VibWl0
JyB2YWx1ZT0nb2snIC8+VGhpcyBpcyBhIHRlc3QuPC9ib2R5PjwvaHRtbD4iCisjZGVmaW5lIEhU
TUxfUkFESU9fQlVUVE9OICI8aHRtbD48Ym9keT48aW5wdXQgdHlwZT0ncmFkaW8nIC8+VGhpcyBp
cyBhIHRlc3QuPC9ib2R5PjwvaHRtbD4iCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBBdGtPYmpl
Y3QqIGRvY3VtZW50OworICAgIEF0a09iamVjdCogb2JqOworICAgIEF0a1JvbGUgcm9sZTsKKyAg
ICBHdGtXaWRnZXQqIHdlYlZpZXc7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvYzsKKyAgICBHTWFp
bkxvb3AqIGxvb3A7Cit9IEF0a1JvbGVzRml4dHVyZTsKKworc3RhdGljIGdib29sZWFuIGZpbmlz
aF9sb2FkaW5nKEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSkKK3sKKyAgICBpZiAoZ19tYWluX2xv
b3BfaXNfcnVubmluZyhmaXh0dXJlLT5sb29wKSkKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChm
aXh0dXJlLT5sb29wKTsKKworICAgIC8vIFdpdGggdGhlIGNoYW5nZSB0byBzdXBwb3J0IFdLMiBh
Y2Nlc3NpYmlsaXR5LCB0aGUgcm9vdCBvYmplY3QKKyAgICAvLyBoYXMgY2hhbmdlZCBhbmQgaXQn
cyBubyBsb25nZXIgdGhlIGRvY3VtZW50IGZyYW1lLCBidXQgYSBzY3JvbGwKKyAgICAvLyBwYW5l
IGNvbnRhaW5pbmcgdGhlIGRvY3VtZW50IGZyYW1lIGFzIGl0cyBvbmx5IGNoaWxkLiBTZWUgdGhl
CisgICAgLy8gYnVnIDcyMzkwIGZvciBtb3JlIGRldGFpbHMgb24gdGhpcyBjaGFuZ2UuCisgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyMzkwCisgICAgQXRr
T2JqZWN0KiByb290T2JqZWN0ID0gZ3RrX3dpZGdldF9nZXRfYWNjZXNzaWJsZShmaXh0dXJlLT53
ZWJWaWV3KTsKKyAgICBmaXh0dXJlLT5kb2N1bWVudCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2li
bGVfY2hpbGQocm9vdE9iamVjdCwgMCk7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+ZG9jdW1lbnQp
OworCisgICAgLy8gUmVtb3ZlIHRoZSByZWZlcmVuY2UgYWRkZWQgYnkgcmVmX2FjY2Vzc2libGVf
Y2hpbGQoKSBhbmQKKyAgICAvLyByZXR1cm4sIHNpbmNlIHdlIGRvbid0IG5lZWQgdG8ga2VlcCB0
aGF0IGV4dHJhIHJlZiBhdCBhbGwuCisgICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+ZG9jdW1l
bnQpOworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgYXRrX3JvbGVzX2ZpeHR1
cmVfc2V0dXAoQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7
CisgICAgZml4dHVyZS0+bG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKKyAgICBm
aXh0dXJlLT5hbGxvYyA9IChHdGtBbGxvY2F0aW9uKSB7IDAsIDAsIDgwMCwgNjAwIH07CisgICAg
Zml4dHVyZS0+d2ViVmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKKyAgICBnX29iamVjdF9y
ZWZfc2luayhmaXh0dXJlLT53ZWJWaWV3KTsKKworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0
ZShmaXh0dXJlLT53ZWJWaWV3LCAmZml4dHVyZS0+YWxsb2MpOworCisgICAgaWYgKGRhdGEgIT0g
TlVMTCkKKyAgICAgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklF
VyAoZml4dHVyZS0+d2ViVmlldyksIChjb25zdCBjaGFyKikgZGF0YSwgTlVMTCwgTlVMTCwgTlVM
TCk7CisKKyAgICBnX2lkbGVfYWRkKChHU291cmNlRnVuYykgZmluaXNoX2xvYWRpbmcsIGZpeHR1
cmUpOworICAgIGdfbWFpbl9sb29wX3J1bihmaXh0dXJlLT5sb29wKTsKK30KKworc3RhdGljIHZv
aWQgYXRrX3JvbGVzX2ZpeHR1cmVfdGVhcmRvd24oQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBn
Y29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+d2ViVmll
dyk7CisgICAgZ19tYWluX2xvb3BfdW5yZWYoZml4dHVyZS0+bG9vcCk7Cit9CisKK3N0YXRpYyB2
b2lkIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKEF0a09iamVjdCogb2JqLCBnaW50IHBvcywgQXRr
Um9sZSByb2xlKQoreworICAgIEF0a09iamVjdCogY2hpbGQ7CisgICAgQXRrUm9sZSBjaGlsZF9y
b2xlOworCisgICAgY2hpbGQgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iaiwg
cG9zKTsKKyAgICBnX2Fzc2VydChjaGlsZCk7CisgICAgY2hpbGRfcm9sZSA9IGF0a19vYmplY3Rf
Z2V0X3JvbGUoY2hpbGQpOworICAgIGdfYXNzZXJ0KGNoaWxkX3JvbGUgPT0gcm9sZSk7CisKKyAg
ICBnX29iamVjdF91bnJlZihjaGlsZCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0
a19nZXRfcm9sZV9kb2N1bWVudF9mcmFtZShBdGtSb2xlc0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25z
dHBvaW50ZXIgZGF0YSkKK3sKKyAgICBmaXh0dXJlLT5yb2xlID0gYXRrX29iamVjdF9nZXRfcm9s
ZShmaXh0dXJlLT5kb2N1bWVudCk7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+cm9sZSA9PSBBVEtf
Uk9MRV9ET0NVTUVOVF9XRUIpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0
X3JvbGVfaGVhZGluZyhBdGtSb2xlc0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0
YSkKK3sKKyAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5kb2N1bWVudCwgMCwg
QVRLX1JPTEVfSEVBRElORyk7CisgICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+
ZG9jdW1lbnQsIDEsIEFUS19ST0xFX0hFQURJTkcpOworICAgIGdldF9jaGlsZF9hbmRfdGVzdF9y
b2xlKGZpeHR1cmUtPmRvY3VtZW50LCAyLCBBVEtfUk9MRV9IRUFESU5HKTsKKyAgICBnZXRfY2hp
bGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5kb2N1bWVudCwgMywgQVRLX1JPTEVfSEVBRElORyk7
CisgICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+ZG9jdW1lbnQsIDQsIEFUS19S
T0xFX0hFQURJTkcpOworICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPmRvY3Vt
ZW50LCA1LCBBVEtfUk9MRV9IRUFESU5HKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRf
YXRrX2dldF9yb2xlX2ltYWdlKEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRl
ciBkYXRhKQoreworICAgIC8vIFRoaXMgaXMgYW4gZXh0cmFuZW91cyBvYmplY3Qgb2YgQVRLX1JP
TEVfUEFORUwgd2hpY2ggd2Ugc2hvdWxkIGdldCByaWQgb2YuCisgICAgZml4dHVyZS0+b2JqID0g
YXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmaXh0dXJlLT5kb2N1bWVudCwgMCk7Cisg
ICAgZ19hc3NlcnQoZml4dHVyZS0+b2JqKTsKKworICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xl
KGZpeHR1cmUtPm9iaiwgMCwgQVRLX1JPTEVfSU1BR0UpOworCisgICAgZ19vYmplY3RfdW5yZWYo
Zml4dHVyZS0+b2JqKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xl
X2xpbmsoQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7Cisg
ICAgLy8gVGhpcyBpcyBhbiBleHRyYW5lb3VzIG9iamVjdCBvZiBBVEtfUk9MRV9QQU5FTCB3aGlj
aCB3ZSBzaG91bGQgZ2V0IHJpZCBvZi4KKyAgICBmaXh0dXJlLT5vYmogPSBhdGtfb2JqZWN0X3Jl
Zl9hY2Nlc3NpYmxlX2NoaWxkKGZpeHR1cmUtPmRvY3VtZW50LCAwKTsKKyAgICBnX2Fzc2VydChm
aXh0dXJlLT5vYmopOworCisgICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+b2Jq
LCAwLCBBVEtfUk9MRV9MSU5LKTsKKworICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9iaik7
Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9saXN0X2FuZF9pdGVt
KEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIEF0
a09iamVjdCogbGlzdE9iajsKKworICAgIGxpc3RPYmogPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3Np
YmxlX2NoaWxkKGZpeHR1cmUtPmRvY3VtZW50LCAwKTsKKyAgICBnX2Fzc2VydChsaXN0T2JqKTsK
KyAgICBmaXh0dXJlLT5yb2xlID0gYXRrX29iamVjdF9nZXRfcm9sZShsaXN0T2JqKTsKKyAgICBn
X2Fzc2VydChmaXh0dXJlLT5yb2xlID09IEFUS19ST0xFX0xJU1QpOworCisgICAgZ2V0X2NoaWxk
X2FuZF90ZXN0X3JvbGUobGlzdE9iaiwgMCwgQVRLX1JPTEVfTElTVF9JVEVNKTsKKyAgICBnZXRf
Y2hpbGRfYW5kX3Rlc3Rfcm9sZShsaXN0T2JqLCAxLCBBVEtfUk9MRV9MSVNUX0lURU0pOworICAg
IGdfb2JqZWN0X3VucmVmKGxpc3RPYmopOworCisgICAgbGlzdE9iaiA9IGF0a19vYmplY3RfcmVm
X2FjY2Vzc2libGVfY2hpbGQoZml4dHVyZS0+ZG9jdW1lbnQsIDEpOworICAgIGdfYXNzZXJ0KGxp
c3RPYmopOworICAgIGZpeHR1cmUtPnJvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKGxpc3RPYmop
OworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPnJvbGUgPT0gQVRLX1JPTEVfTElTVCk7CisKKyAgICBn
ZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShsaXN0T2JqLCAwLCBBVEtfUk9MRV9MSVNUX0lURU0pOwor
ICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGxpc3RPYmosIDEsIEFUS19ST0xFX0xJU1RfSVRF
TSk7CisgICAgZ19vYmplY3RfdW5yZWYobGlzdE9iaik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rf
d2Via2l0X2F0a19nZXRfcm9sZV9wYXJhZ3JhcGgoQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBn
Y29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVy
ZS0+ZG9jdW1lbnQsIDAsIEFUS19ST0xFX1BBUkFHUkFQSCk7Cit9CisKK3N0YXRpYyB2b2lkIHRl
c3Rfd2Via2l0X2F0a19nZXRfcm9sZV9zZWN0aW9uKEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwg
Z2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1
cmUtPmRvY3VtZW50LCAwLCBBVEtfUk9MRV9TRUNUSU9OKTsKK30KKworLy8gRG9lcyBub3QgeWV0
IHRlc3QgdGFibGUgY2VsbHMgYmVjYXVzZSBvZiBidWcgMzA4OTUuCitzdGF0aWMgdm9pZCB0ZXN0
X3dlYmtpdF9hdGtfZ2V0X3JvbGVfdGFibGUoQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29u
c3Rwb2ludGVyIGRhdGEpCit7CisgICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+
ZG9jdW1lbnQsIDAsIEFUS19ST0xFX1RBQkxFKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJr
aXRfYXRrX2dldF9yb2xlX3NlcGFyYXRvcihBdGtSb2xlc0ZpeHR1cmUgKmZpeHR1cmUsIGdjb25z
dHBvaW50ZXIgZGF0YSkKK3sKKyAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5k
b2N1bWVudCwgMCwgQVRLX1JPTEVfU0VQQVJBVE9SKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93
ZWJraXRfYXRrX2dldF9yb2xlX2NvbWJvYm94KEF0a1JvbGVzRml4dHVyZSAqZml4dHVyZSwgZ2Nv
bnN0cG9pbnRlciBkYXRhKQoreworICAgIEF0a09iamVjdCogY29tYm9ib3hNZW51OworCisgICAg
Ly8gVGhpcyBpcyBhbiBleHRyYW5lb3VzIG9iamVjdCBvZiBBVEtfUk9MRV9QQU5FTCB3aGljaCB3
ZSBzaG91bGQgZ2V0IHJpZCBvZi4KKyAgICBmaXh0dXJlLT5vYmogPSBhdGtfb2JqZWN0X3JlZl9h
Y2Nlc3NpYmxlX2NoaWxkKGZpeHR1cmUtPmRvY3VtZW50LCAwKTsKKyAgICBnX2Fzc2VydChmaXh0
dXJlLT5vYmopOworCisgICAgZml4dHVyZS0+b2JqID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJs
ZV9jaGlsZChmaXh0dXJlLT5vYmosIDApOworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPm9iaik7Cisg
ICAgZml4dHVyZS0+cm9sZSA9IGF0a19vYmplY3RfZ2V0X3JvbGUoZml4dHVyZS0+b2JqKTsKKyAg
ICBnX2Fzc2VydChmaXh0dXJlLT5yb2xlID09IEFUS19ST0xFX0NPTUJPX0JPWCk7CisKKyAgICBj
b21ib2JveE1lbnUgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZpeHR1cmUtPm9i
aiwgMCk7CisgICAgZ19hc3NlcnQoY29tYm9ib3hNZW51KTsKKyAgICBmaXh0dXJlLT5yb2xlID0g
YXRrX29iamVjdF9nZXRfcm9sZShjb21ib2JveE1lbnUpOworICAgIGdfYXNzZXJ0KGZpeHR1cmUt
PnJvbGUgPT0gQVRLX1JPTEVfTUVOVSk7CisKKyAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShj
b21ib2JveE1lbnUsIDAsIEFUS19ST0xFX01FTlVfSVRFTSk7CisgICAgZ2V0X2NoaWxkX2FuZF90
ZXN0X3JvbGUoY29tYm9ib3hNZW51LCAxLCBBVEtfUk9MRV9NRU5VX0lURU0pOworICAgIGdldF9j
aGlsZF9hbmRfdGVzdF9yb2xlKGNvbWJvYm94TWVudSwgMiwgQVRLX1JPTEVfTUVOVV9JVEVNKTsK
KworICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9iaik7CisgICAgZ19vYmplY3RfdW5yZWYo
Y29tYm9ib3hNZW51KTsKK30KKworLyogRm9ybSByb2xlcyAqLworc3RhdGljIHZvaWQgdGVzdF93
ZWJraXRfYXRrX2dldF9yb2xlX2Zvcm0oQXRrUm9sZXNGaXh0dXJlICpmaXh0dXJlLCBnY29uc3Rw
b2ludGVyIGRhdGEpCit7CisgICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+ZG9j
dW1lbnQsIDAsIEFUS19ST0xFX0ZPUk0pOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9h
dGtfZ2V0X3JvbGVfY2hlY2tfYm94KEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9p
bnRlciBkYXRhKQoreworICAgIC8vIFRoaXMgaXMgYW4gZXh0cmFuZW91cyBvYmplY3Qgb2YgQVRL
X1JPTEVfUEFORUwgd2hpY2ggd2Ugc2hvdWxkIGdldCByaWQgb2YuCisgICAgZml4dHVyZS0+b2Jq
ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmaXh0dXJlLT5kb2N1bWVudCwgMCk7
CisgICAgZ19hc3NlcnQoZml4dHVyZS0+b2JqKTsKKworICAgIGdldF9jaGlsZF9hbmRfdGVzdF9y
b2xlKGZpeHR1cmUtPm9iaiwgMCwgQVRLX1JPTEVfQ0hFQ0tfQk9YKTsKKworICAgIGdfb2JqZWN0
X3VucmVmKGZpeHR1cmUtPm9iaik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19n
ZXRfcm9sZV9lbnRyeShBdGtSb2xlc0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0
YSkKK3sKKyAgICAvLyBUaGlzIGlzIGFuIGV4dHJhbmVvdXMgb2JqZWN0IG9mIEFUS19ST0xFX1BB
TkVMIHdoaWNoIHdlIHNob3VsZCBnZXQgcmlkIG9mLgorICAgIGZpeHR1cmUtPm9iaiA9IGF0a19v
YmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoZml4dHVyZS0+ZG9jdW1lbnQsIDApOworICAgIGdf
YXNzZXJ0KGZpeHR1cmUtPm9iaik7CisKKyAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0
dXJlLT5vYmosIDEsIEFUS19ST0xFX0VOVFJZKTsKKworICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1
cmUtPm9iaik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9sYWJl
bChBdGtSb2xlc0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICAv
LyBUaGlzIGlzIGFuIGV4dHJhbmVvdXMgb2JqZWN0IG9mIEFUS19ST0xFX1BBTkVMIHdoaWNoIHdl
IHNob3VsZCBnZXQgcmlkIG9mLgorICAgIGZpeHR1cmUtPm9iaiA9IGF0a19vYmplY3RfcmVmX2Fj
Y2Vzc2libGVfY2hpbGQoZml4dHVyZS0+ZG9jdW1lbnQsIDApOworICAgIGdfYXNzZXJ0KGZpeHR1
cmUtPm9iaik7CisKKyAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5vYmosIDAs
IEFUS19ST0xFX0xBQkVMKTsKKworICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9iaik7Cit9
CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9saXN0Ym94KEF0a1JvbGVz
Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIEF0a09iamVjdCog
bGlzdGJveE9iajsKKyAgICAvLyBUaGlzIGlzIGFuIGV4dHJhbmVvdXMgb2JqZWN0IG9mIEFUS19S
T0xFX1BBTkVMIHdoaWNoIHdlIHNob3VsZCBnZXQgcmlkIG9mLgorICAgIGZpeHR1cmUtPm9iaiA9
IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoZml4dHVyZS0+ZG9jdW1lbnQsIDApOwor
ICAgIGdfYXNzZXJ0KGZpeHR1cmUtPm9iaik7CisKKyAgICBsaXN0Ym94T2JqID0gYXRrX29iamVj
dF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmaXh0dXJlLT5vYmosIDApOworICAgIGdfYXNzZXJ0KGxp
c3Rib3hPYmopOworICAgIGZpeHR1cmUtPnJvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKGxpc3Ri
b3hPYmopOworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPnJvbGUgPT0gQVRLX1JPTEVfTElTVCk7CisK
KyAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShsaXN0Ym94T2JqLCAwLCBBVEtfUk9MRV9MSVNU
X0lURU0pOworICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGxpc3Rib3hPYmosIDEsIEFUS19S
T0xFX0xJU1RfSVRFTSk7CisgICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUobGlzdGJveE9iaiwg
MiwgQVRLX1JPTEVfTElTVF9JVEVNKTsKKworICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9i
aik7CisgICAgZ19vYmplY3RfdW5yZWYobGlzdGJveE9iaik7Cit9CisKK3N0YXRpYyB2b2lkIHRl
c3Rfd2Via2l0X2F0a19nZXRfcm9sZV9wYXNzd29yZF90ZXh0KEF0a1JvbGVzRml4dHVyZSogZml4
dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIC8vIFRoaXMgaXMgYW4gZXh0cmFuZW91
cyBvYmplY3Qgb2YgQVRLX1JPTEVfUEFORUwgd2hpY2ggd2Ugc2hvdWxkIGdldCByaWQgb2YuCisg
ICAgZml4dHVyZS0+b2JqID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmaXh0dXJl
LT5kb2N1bWVudCwgMCk7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+b2JqKTsKKworICAgIGdldF9j
aGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPm9iaiwgMCwgQVRLX1JPTEVfUEFTU1dPUkRfVEVY
VCk7CisKKyAgICBnX29iamVjdF91bnJlZihmaXh0dXJlLT5vYmopOworfQorCitzdGF0aWMgdm9p
ZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfcHVzaF9idXR0b24oQXRrUm9sZXNGaXh0dXJlKiBm
aXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgLy8gVGhpcyBpcyBhbiBleHRyYW5l
b3VzIG9iamVjdCBvZiBBVEtfUk9MRV9QQU5FTCB3aGljaCB3ZSBzaG91bGQgZ2V0IHJpZCBvZi4K
KyAgICBmaXh0dXJlLT5vYmogPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZpeHR1
cmUtPmRvY3VtZW50LCAwKTsKKyAgICBnX2Fzc2VydChmaXh0dXJlLT5vYmopOworCisgICAgZ2V0
X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+b2JqLCAwLCBBVEtfUk9MRV9QVVNIX0JVVFRP
Tik7CisKKyAgICBnX29iamVjdF91bnJlZihmaXh0dXJlLT5vYmopOworfQorCitzdGF0aWMgdm9p
ZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfcmFkaW9fYnV0dG9uKEF0a1JvbGVzRml4dHVyZSog
Zml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIC8vIFRoaXMgaXMgYW4gZXh0cmFu
ZW91cyBvYmplY3Qgb2YgQVRLX1JPTEVfUEFORUwgd2hpY2ggd2Ugc2hvdWxkIGdldCByaWQgb2Yu
CisgICAgZml4dHVyZS0+b2JqID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmaXh0
dXJlLT5kb2N1bWVudCwgMCk7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+b2JqKTsKKworICAgIGdl
dF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPm9iaiwgMCwgQVRLX1JPTEVfUkFESU9fQlVU
VE9OKTsKKworICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9iaik7Cit9CisKK2ludCBtYWlu
KGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJn
diwgTlVMTCk7CisKKyAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3Jn
LyIpOworCisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9hdGsvdGVzdF93ZWJraXRfYXRrX2dldF9y
b2xlX2RvY3VtZW50X2ZyYW1lIiwKKyAgICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVyZSwgSFRN
TF9ET0NVTUVOVF9GUkFNRSwKKyAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVw
LAorICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2RvY3VtZW50X2ZyYW1l
LAorICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfdGVhcmRvd24pOworCisgICAgZ190
ZXN0X2FkZCgiL3dlYmtpdC9hdGsvdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2hlYWRpbmciLAor
ICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX0hFQURJTkcsCisgICAgICAgICAg
ICAgICBhdGtfcm9sZXNfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0
X2F0a19nZXRfcm9sZV9oZWFkaW5nLAorICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVf
dGVhcmRvd24pOworCisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9hdGsvdGVzdF93ZWJraXRfYXRr
X2dldF9yb2xlX2ltYWdlIiwKKyAgICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVyZSwgSFRNTF9J
TUFHRSwKKyAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAorICAgICAgICAg
ICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2ltYWdlLAorICAgICAgICAgICAgICAgYXRr
X3JvbGVzX2ZpeHR1cmVfdGVhcmRvd24pOworCisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9hdGsv
dGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xpbmsiLAorICAgICAgICAgICAgICAgQXRrUm9sZXNG
aXh0dXJlLCBIVE1MX0xJTktfVEVYVCwKKyAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJl
X3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xpbmssCisg
ICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICBnX3Rlc3Rf
YWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfbGlzdF9hbmRfaXRlbSIs
CisgICAgICAgICAgICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhUTUxfTElTVCwKKyAgICAgICAgICAg
ICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF93ZWJraXRf
YXRrX2dldF9yb2xlX2xpc3RfYW5kX2l0ZW0sCisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4
dHVyZV90ZWFyZG93bik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtp
dF9hdGtfZ2V0X3JvbGVfcGFyYWdyYXBoIiwKKyAgICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVy
ZSwgSFRNTF9QQVJBR1JBUEgsCisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV9zZXR1
cCwKKyAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9wYXJhZ3JhcGgsCisg
ICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICBnX3Rlc3Rf
YWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfc2VjdGlvbiIsCisgICAg
ICAgICAgICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhUTUxfU0VDVElPTiwKKyAgICAgICAgICAgICAg
IGF0a19yb2xlc19maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRr
X2dldF9yb2xlX3NlY3Rpb24sCisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFy
ZG93bik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0
X3JvbGVfdGFibGUiLAorICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX1RBQkxF
LAorICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAg
ICB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfdGFibGUsCisgICAgICAgICAgICAgICBhdGtfcm9s
ZXNfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0
X3dlYmtpdF9hdGtfZ2V0X3JvbGVfc2VwYXJhdG9yIiwKKyAgICAgICAgICAgICAgIEF0a1JvbGVz
Rml4dHVyZSwgSFRNTF9TRVBBUkFUT1IsCisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVy
ZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9zZXBhcmF0
b3IsCisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICBn
X3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfY29tYm9ib3gi
LAorICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX0NPTUJPQk9YLAorICAgICAg
ICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0X3dl
YmtpdF9hdGtfZ2V0X3JvbGVfY29tYm9ib3gsCisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4
dHVyZV90ZWFyZG93bik7CisKKyAgICAvKiBGb3JtIHJvbGVzICovCisgICAgZ190ZXN0X2FkZCgi
L3dlYmtpdC9hdGsvdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2Zvcm0iLAorICAgICAgICAgICAg
ICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX0ZPUk0sCisgICAgICAgICAgICAgICBhdGtfcm9sZXNf
Zml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9m
b3JtLAorICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfdGVhcmRvd24pOworICAgIGdf
dGVzdF9hZGQoIi93ZWJraXQvYXRrL3Rlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9jaGVja19ib3gi
LAorICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX0NIRUNLX0JPWCwKKyAgICAg
ICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF93
ZWJraXRfYXRrX2dldF9yb2xlX2NoZWNrX2JveCwKKyAgICAgICAgICAgICAgIGF0a19yb2xlc19m
aXh0dXJlX3RlYXJkb3duKTsKKworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvYXRrL3Rlc3Rfd2Vi
a2l0X2F0a19nZXRfcm9sZV9lbnRyeSIsCisgICAgICAgICAgICAgICBBdGtSb2xlc0ZpeHR1cmUs
IEhUTUxfTEFCRUxFRF9FTlRSWSwKKyAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3Nl
dHVwLAorICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2VudHJ5LAorICAg
ICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfdGVhcmRvd24pOworCisgICAgZ190ZXN0X2Fk
ZCgiL3dlYmtpdC9hdGsvdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xhYmVsIiwKKyAgICAgICAg
ICAgICAgIEF0a1JvbGVzRml4dHVyZSwgSFRNTF9MQUJFTEVEX0VOVFJZLAorICAgICAgICAgICAg
ICAgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF9h
dGtfZ2V0X3JvbGVfbGFiZWwsCisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFy
ZG93bik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0
X3JvbGVfbGlzdGJveCIsCisgICAgICAgICAgICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhUTUxfTElT
VEJPWCwKKyAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAorICAgICAgICAg
ICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xpc3Rib3gsCisgICAgICAgICAgICAgICBh
dGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0
ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfcGFzc3dvcmRfdGV4dCIsCisgICAgICAgICAgICAg
ICBBdGtSb2xlc0ZpeHR1cmUsIEhUTUxfUEFTU1dPUkRfVEVYVCwKKyAgICAgICAgICAgICAgIGF0
a19yb2xlc19maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dl
dF9yb2xlX3Bhc3N3b3JkX3RleHQsCisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90
ZWFyZG93bik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtf
Z2V0X3JvbGVfcHVzaF9idXR0b24iLAorICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBI
VE1MX1BVU0hfQlVUVE9OLAorICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAs
CisgICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfcHVzaF9idXR0b24sCisg
ICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICBnX3Rlc3Rf
YWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfcmFkaW9fYnV0dG9uIiwK
KyAgICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVyZSwgSFRNTF9SQURJT19CVVRUT04sCisgICAg
ICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3Rf
d2Via2l0X2F0a19nZXRfcm9sZV9yYWRpb19idXR0b24sCisgICAgICAgICAgICAgICBhdGtfcm9s
ZXNfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICByZXR1cm4gZ190ZXN0X3J1bigpOworfQpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGNvbnRleHRt
ZW51LmMgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0Y29udGV4dG1l
bnUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGFhYTU3Ci0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGNvbnRl
eHRtZW51LmMKQEAgLTAsMCArMSwzMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdh
bGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+
CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjaGFyICpkYXRhOworICAgIGd1aW50IGZsYWc7Cit9
IFRlc3RJbmZvOworCitzdGF0aWMgR01haW5Mb29wICpsb29wOworCit0eXBlZGVmIHN0cnVjdCB7
CisgICAgV2ViS2l0V2ViVmlldyAqd2ViVmlldzsKKyAgICBUZXN0SW5mbyAqaW5mbzsKK30gQ29u
dGV4dE1lbnVGaXh0dXJlOworCitzdGF0aWMgVGVzdEluZm8gKnRlc3RJbmZvTmV3KGNvbnN0IGNo
YXIgKmRhdGEsIGd1aW50IGZsYWcpCit7CisgICAgVGVzdEluZm8gKmluZm8gPSBnX3NsaWNlX25l
dyhUZXN0SW5mbyk7CisgICAgaW5mby0+ZGF0YSA9IGdfc3RyZHVwKGRhdGEpOworICAgIGluZm8t
PmZsYWcgPSBmbGFnOworCisgICAgcmV0dXJuIGluZm87Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RJ
bmZvRGVzdHJveShUZXN0SW5mbyAqaW5mbykKK3sKKyAgICBnX2ZyZWUoaW5mby0+ZGF0YSk7Cisg
ICAgZ19zbGljZV9mcmVlKFRlc3RJbmZvLCBpbmZvKTsKK30KKworc3RhdGljIHZvaWQgY29udGV4
dE1lbnVGaXh0dXJlU2V0dXAoQ29udGV4dE1lbnVGaXh0dXJlICpmaXh0dXJlLCBnY29uc3Rwb2lu
dGVyIGRhdGEpCit7CisgICAgZml4dHVyZS0+d2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJr
aXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJV
RSk7CisgICAgZml4dHVyZS0+aW5mbyA9IChUZXN0SW5mbyAqKWRhdGE7Cit9CisKK3N0YXRpYyB2
b2lkIGNvbnRleHRNZW51Rml4dHVyZVRlYXJkb3duKENvbnRleHRNZW51Rml4dHVyZSAqZml4dHVy
ZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPndl
YlZpZXcpOworICAgIGdfbWFpbl9sb29wX3VucmVmKGxvb3ApOworICAgIHRlc3RJbmZvRGVzdHJv
eShmaXh0dXJlLT5pbmZvKTsKK30KKworc3RhdGljIEdMaXN0ICpjaGVja0FjdGlvbihHTGlzdCAq
aXRlciwgV2ViS2l0Q29udGV4dE1lbnVBY3Rpb24gYWN0aW9uKQoreworICAgIEd0a01lbnVJdGVt
ICppdGVtID0gKEd0a01lbnVJdGVtICopaXRlci0+ZGF0YTsKKworICAgIGdfYXNzZXJ0KEdUS19J
U19NRU5VX0lURU0oaXRlbSkpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9jb250ZXh0X21lbnVfaXRl
bV9nZXRfYWN0aW9uKGl0ZW0pID09IGFjdGlvbik7CisKKyAgICByZXR1cm4gaXRlci0+bmV4dDsK
K30KKworc3RhdGljIEdMaXN0ICpjaGVja0FjdGlvbldpdGhTdWJtZW51KEdMaXN0ICppdGVyLCBX
ZWJLaXRDb250ZXh0TWVudUFjdGlvbiBhY3Rpb24pCit7CisgICAgR3RrTWVudUl0ZW0gKml0ZW0g
PSAoR3RrTWVudUl0ZW0gKilpdGVyLT5kYXRhOworCisgICAgZ19hc3NlcnQoR1RLX0lTX01FTlVf
SVRFTShpdGVtKSk7CisgICAgZ19hc3NlcnQod2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9h
Y3Rpb24oaXRlbSkgPT0gYWN0aW9uKTsKKyAgICBnX2Fzc2VydChHVEtfSVNfTUVOVShndGtfbWVu
dV9pdGVtX2dldF9zdWJtZW51KGl0ZW0pKSk7CisKKyAgICByZXR1cm4gaXRlci0+bmV4dDsKK30K
Kworc3RhdGljIEdMaXN0ICpjaGVja1NlcGFyYXRvcihHTGlzdCAqaXRlcikKK3sKKyAgICBHdGtN
ZW51SXRlbSAqaXRlbSA9IChHdGtNZW51SXRlbSAqKWl0ZXItPmRhdGE7CisKKyAgICBnX2Fzc2Vy
dChHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSk7CisKKyAgICByZXR1cm4gaXRlci0+
bmV4dDsKK30KKworc3RhdGljIGdib29sZWFuIGNvbnRleHRNZW51Q2FsbGJhY2soV2ViS2l0V2Vi
VmlldyAqd2ViVmlldywgR3RrV2lkZ2V0ICpkZWZhdWx0TWVudSwgV2ViS2l0SGl0VGVzdFJlc3Vs
dCAqaGl0VGVzdFJlc3VsdCwgZ2Jvb2xlYW4ga2V5Ym9hcmRNb2RlLCBncG9pbnRlciB1c2VyRGF0
YSkKK3sKKyAgICBUZXN0SW5mbyAqaW5mbyA9IChUZXN0SW5mbyAqKXVzZXJEYXRhOworICAgIGd1
aW50IGNvbnRleHQ7CisgICAgR0xpc3QgKml0ZW1zOworICAgIEdMaXN0ICppdGVyOworCisgICAg
LyogQ2hlY2sgc2lnbmFsIHBhcmFtZXRlcnMgKi8KKyAgICBnX2Fzc2VydChXRUJLSVRfSVNfV0VC
X1ZJRVcod2ViVmlldykpOworICAgIGdfYXNzZXJ0KEdUS19JU19NRU5VKGRlZmF1bHRNZW51KSk7
CisgICAgZ19hc3NlcnQoV0VCS0lUX0lTX0hJVF9URVNUX1JFU1VMVChoaXRUZXN0UmVzdWx0KSk7
CisgICAgZ19hc3NlcnQoIWtleWJvYXJkTW9kZSk7CisKKyAgICBnX29iamVjdF9nZXQoaGl0VGVz
dFJlc3VsdCwgImNvbnRleHQiLCAmY29udGV4dCwgTlVMTCk7CisgICAgZ19hc3NlcnQoY29udGV4
dCAmIGluZm8tPmZsYWcpOworCisgICAgaXRlbXMgPSBndGtfY29udGFpbmVyX2dldF9jaGlsZHJl
bihHVEtfQ09OVEFJTkVSKGRlZmF1bHRNZW51KSk7CisgICAgc3dpdGNoIChpbmZvLT5mbGFnKSB7
CisgICAgY2FzZSBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfRE9DVU1FTlQ6CisgICAg
ICAgIGl0ZXIgPSBpdGVtczsKKyAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJ
VF9DT05URVhUX01FTlVfQUNUSU9OX0dPX0JBQ0spOworICAgICAgICBpdGVyID0gY2hlY2tBY3Rp
b24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fR09fRk9SV0FSRCk7CisgICAgICAg
IGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9TVE9Q
KTsKKyAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVf
QUNUSU9OX1JFTE9BRCk7CisgICAgICAgIGdfYXNzZXJ0KCFpdGVyKTsKKworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9JTUFHRToKKyAgICAg
ICAgaXRlciA9IGl0ZW1zOworICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lU
X0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9JTUFHRV9JTl9ORVdfV0lORE9XKTsKKyAgICAgICAg
aXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0RPV05M
T0FEX0lNQUdFX1RPX0RJU0spOworICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VC
S0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9JTUFHRV9UT19DTElQQk9BUkQpOworICAgICAg
ICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09Q
WV9JTUFHRV9VUkxfVE9fQ0xJUEJPQVJEKTsKKyAgICAgICAgZ19hc3NlcnQoIWl0ZXIpOworCisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0VE
SVRBQkxFOgorICAgICAgICBpdGVyID0gaXRlbXM7CisgICAgICAgIGl0ZXIgPSBjaGVja0FjdGlv
bihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DVVQpOworICAgICAgICBpdGVyID0g
Y2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWSk7CisgICAg
ICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9Q
QVNURSk7CisgICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9N
RU5VX0FDVElPTl9ERUxFVEUpOworICAgICAgICBpdGVyID0gY2hlY2tTZXBhcmF0b3IoaXRlcik7
CisgICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FD
VElPTl9TRUxFQ1RfQUxMKTsKKyAgICAgICAgaXRlciA9IGNoZWNrU2VwYXJhdG9yKGl0ZXIpOwor
ICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb25XaXRoU3VibWVudShpdGVyLCBXRUJLSVRfQ09OVEVY
VF9NRU5VX0FDVElPTl9JTlBVVF9NRVRIT0RTKTsKKyAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9u
V2l0aFN1Ym1lbnUoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fVU5JQ09ERSk7Cisg
ICAgICAgIGdfYXNzZXJ0KCFpdGVyKTsKKworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdFQktJ
VF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9MSU5LOgorICAgICAgICBpdGVyID0gaXRlbXM7Cisg
ICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
Tl9PUEVOX0xJTkspOworICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NP
TlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9MSU5LX0lOX05FV19XSU5ET1cpOworICAgICAgICBpdGVy
ID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRE9XTkxPQURf
TElOS19UT19ESVNLKTsKKyAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9D
T05URVhUX01FTlVfQUNUSU9OX0NPUFlfTElOS19UT19DTElQQk9BUkQpOworICAgICAgICBnX2Fz
c2VydCghaXRlcik7CisKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgZ19h
c3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICB9CisKKyAgICBnX2xpc3RfZnJlZShpdGVtcyk7Cisg
ICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKKworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0
aWMgdm9pZCBwdXNoRXZlbnQoV2ViS2l0V2ViVmlldyAqd2ViVmlldykKK3sKKyAgICBHZGtFdmVu
dCAqZXZlbnQgPSBnZGtfZXZlbnRfbmV3KEdES19CVVRUT05fUFJFU1MpOworI2lmIEdUS19DSEVD
S19WRVJTSU9OKDMsIDAsIDApCisgICAgR2RrRGV2aWNlTWFuYWdlciAqZGV2aWNlTWFuYWdlcjsK
KyNlbmRpZgorCisgICAgZXZlbnQtPmFueS53aW5kb3cgPSBnX29iamVjdF9yZWYoZ3RrX3dpZGdl
dF9nZXRfd2luZG93KEdUS19XSURHRVQod2ViVmlldykpKTsKKyAgICBldmVudC0+YW55LnNlbmRf
ZXZlbnQgPSBGQUxTRTsKKyAgICBldmVudC0+YnV0dG9uLnRpbWUgPSBHREtfQ1VSUkVOVF9USU1F
OworICAgIGV2ZW50LT5idXR0b24uYnV0dG9uID0gMzsKKyAgICBldmVudC0+YnV0dG9uLnggPSBl
dmVudC0+YnV0dG9uLnkgPSA1OworICAgIGV2ZW50LT5idXR0b24ueF9yb290ID0gZXZlbnQtPmJ1
dHRvbi54OworICAgIGV2ZW50LT5idXR0b24ueV9yb290ID0gZXZlbnQtPmJ1dHRvbi55OworI2lm
IEdUS19DSEVDS19WRVJTSU9OKDMsIDAsIDApCisgICAgZGV2aWNlTWFuYWdlciA9IGdka19kaXNw
bGF5X2dldF9kZXZpY2VfbWFuYWdlcihnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsKKyAgICBl
dmVudC0+YnV0dG9uLmRldmljZSA9IGdka19kZXZpY2VfbWFuYWdlcl9nZXRfY2xpZW50X3BvaW50
ZXIoZGV2aWNlTWFuYWdlcik7CisjZW5kaWYKKworICAgIGdka19ldmVudF9wdXQoZXZlbnQpOwor
ICAgIGdka19ldmVudF9mcmVlKGV2ZW50KTsKK30KKworc3RhdGljIHZvaWQgbG9hZFN0YXR1c0Nh
bGxiYWNrKFdlYktpdFdlYlZpZXcgKndlYlZpZXcsIEdQYXJhbVNwZWMgKnNwZWMsIGdwb2ludGVy
IGRhdGEpCit7CisgICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X2xvYWRfc3RhdHVzKHdlYlZpZXcpOworICAgIFRlc3RJbmZvICppbmZvID0gKFRlc3RJbmZv
ICopZGF0YTsKKworICAgIGdfYXNzZXJ0KHN0YXR1cyAhPSBXRUJLSVRfTE9BRF9GQUlMRUQpOwor
CisgICAgaWYgKHN0YXR1cyAhPSBXRUJLSVRfTE9BRF9GSU5JU0hFRCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAiY29udGV4dC1tZW51IiwgR19DQUxM
QkFDSyhjb250ZXh0TWVudUNhbGxiYWNrKSwgaW5mbyk7CisgICAgcHVzaEV2ZW50KHdlYlZpZXcp
OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gbWFwRXZlbnRDYWxsYmFjayhHdGtXaWRnZXQgKndpZGdl
dCwgR2RrRXZlbnQgKmV2ZW50LCBncG9pbnRlciBkYXRhKQoreworICAgIGd0a193aWRnZXRfZ3Jh
Yl9mb2N1cyh3aWRnZXQpOworICAgIENvbnRleHRNZW51Rml4dHVyZSAqZml4dHVyZSA9IChDb250
ZXh0TWVudUZpeHR1cmUgKilkYXRhOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhm
aXh0dXJlLT53ZWJWaWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXh0dXJl
LT5pbmZvLT5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGV4dC9odG1s
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInV0Zi04IiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImZpbGU6Ly8iKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KGZp
eHR1cmUtPndlYlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhsb2FkU3Rh
dHVzQ2FsbGJhY2spLCBmaXh0dXJlLT5pbmZvKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0
YXRpYyB2b2lkIHRlc3RDb250ZXh0TWVudShDb250ZXh0TWVudUZpeHR1cmUgKmZpeHR1cmUsIGdj
b25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAs
IDAsIDUwLCA1MCB9OworICAgIEd0a1dpZGdldCAqd2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RL
X1dJTkRPV19QT1BVUCk7CisKKyAgICBndGtfd2luZG93X3Jlc2l6ZShHVEtfV0lORE9XKHdpbmRv
dyksIDUwLCA1MCk7CisgICAgZ3RrX3dpbmRvd19tb3ZlKEdUS19XSU5ET1cod2luZG93KSwgMCwg
MCk7CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQoZml4dHVyZS0+d2Vi
VmlldyksICZhbGxvY2F0aW9uKTsKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVS
KHdpbmRvdyksIEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldykpOworICAgIGdfc2lnbmFsX2Nv
bm5lY3Qod2luZG93LCAibWFwLWV2ZW50IiwgR19DQUxMQkFDSyhtYXBFdmVudENhbGxiYWNrKSwg
Zml4dHVyZSk7CisgICAgZ3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpOworCisgICAgZ19tYWlu
X2xvb3BfcnVuKGxvb3ApOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gY29udGV4dE1lbnVDdXN0b21J
dGVtQ2FsbGJhY2soV2ViS2l0V2ViVmlldyAqd2ViVmlldywgR3RrV2lkZ2V0ICpkZWZhdWx0TWVu
dSwgV2ViS2l0SGl0VGVzdFJlc3VsdCAqaGl0VGVzdFJlc3VsdCwgZ2Jvb2xlYW4ga2V5Ym9hcmRN
b2RlLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBUZXN0SW5mbyAqaW5mbyA9IChUZXN0SW5m
byAqKXVzZXJEYXRhOworICAgIGd1aW50IGNvbnRleHQ7CisgICAgR0xpc3QgKml0ZW1zOworICAg
IEdMaXN0ICppdGVyOworICAgIEd0a1dpZGdldCAqbWVudUl0ZW07CisgICAgR3RrQWN0aW9uICph
Y3Rpb247CisKKyAgICAvKiBDaGVjayBzaWduYWwgcGFyYW1ldGVycyAqLworICAgIGdfYXNzZXJ0
KFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSk7CisgICAgZ19hc3NlcnQoR1RLX0lTX01FTlUo
ZGVmYXVsdE1lbnUpKTsKKyAgICBnX2Fzc2VydChXRUJLSVRfSVNfSElUX1RFU1RfUkVTVUxUKGhp
dFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCgha2V5Ym9hcmRNb2RlKTsKKworICAgIGdfb2Jq
ZWN0X2dldChoaXRUZXN0UmVzdWx0LCAiY29udGV4dCIsICZjb250ZXh0LCBOVUxMKTsKKyAgICBn
X2Fzc2VydChjb250ZXh0ICYgaW5mby0+ZmxhZyk7CisKKyAgICBhY3Rpb24gPSBndGtfYWN0aW9u
X25ldygiVGVzdEFjdGlvbiIsICJDdXN0b20gQWN0aW9uIiwgIkN1c3RvbSBBY3Rpb24gVG9vbHRp
cCIsIE5VTEwpOworICAgIG1lbnVJdGVtID0gZ3RrX2FjdGlvbl9jcmVhdGVfbWVudV9pdGVtKGFj
dGlvbik7CisgICAgZ19vYmplY3RfdW5yZWYoYWN0aW9uKTsKKworICAgIGd0a19tZW51X3NoZWxs
X2FwcGVuZChHVEtfTUVOVV9TSEVMTChkZWZhdWx0TWVudSksIG1lbnVJdGVtKTsKKyAgICBndGtf
d2lkZ2V0X3Nob3cobWVudUl0ZW0pOworCisgICAgaXRlbXMgPSBndGtfY29udGFpbmVyX2dldF9j
aGlsZHJlbihHVEtfQ09OVEFJTkVSKGRlZmF1bHRNZW51KSk7CisgICAgaXRlciA9IGl0ZW1zOwor
ICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9H
T19CQUNLKTsKKyAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVO
VV9BQ1RJT05fR09fRk9SV0FSRCk7CisgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJ
VF9DT05URVhUX01FTlVfQUNUSU9OX1NUT1ApOworICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVy
LCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9SRUxPQUQpOworICAgIGl0ZXIgPSBjaGVja0Fj
dGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9OT19BQ1RJT04pOworICAgIGdf
YXNzZXJ0KCFpdGVyKTsKKworICAgIGdfbGlzdF9mcmVlKGl0ZW1zKTsKKyAgICBnX21haW5fbG9v
cF9xdWl0KGxvb3ApOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RD
b250ZXh0TWVudUN1c3RvbUl0ZW0oQ29udGV4dE1lbnVGaXh0dXJlICpmaXh0dXJlLCBnY29uc3Rw
b2ludGVyIGRhdGEpCit7CisgICAgR3RrV2lkZ2V0ICp3aW5kb3cgPSBndGtfd2luZG93X25ldyhH
VEtfV0lORE9XX1BPUFVQKTsKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdp
bmRvdyksIEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldykpOworICAgIGd0a193aWRnZXRfc2hv
d19hbGwod2luZG93KTsKKyAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMoR1RLX1dJREdFVChmaXh0
dXJlLT53ZWJWaWV3KSk7CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoZml4dHVy
ZS0+d2ViVmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4dHVyZS0+aW5m
by0+ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRleHQvaHRtbCIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1dGYtOCIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJmaWxlOi8vIik7CisgICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJl
LT53ZWJWaWV3LCAiY29udGV4dC1tZW51IiwgR19DQUxMQkFDSyhjb250ZXh0TWVudUN1c3RvbUl0
ZW1DYWxsYmFjayksIGZpeHR1cmUtPmluZm8pOworICAgIHB1c2hFdmVudChmaXh0dXJlLT53ZWJW
aWV3KTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIGd0a190
ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKKworICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L3Rlc3Rj
b250ZXh0bWVudS9kb2N1bWVudCIsIENvbnRleHRNZW51Rml4dHVyZSwKKyAgICAgICAgICAgICAg
IHRlc3RJbmZvTmV3KCI8aHRtbD48Ym9keT48aDE+V2ViS2l0R1RLKyE8L2gxPjwvYm9keT48L2h0
bWw+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9ISVRfVEVTVF9SRVNVTFRf
Q09OVEVYVF9ET0NVTUVOVCksCisgICAgICAgICAgICAgICBjb250ZXh0TWVudUZpeHR1cmVTZXR1
cCwgdGVzdENvbnRleHRNZW51LCBjb250ZXh0TWVudUZpeHR1cmVUZWFyZG93bik7CisgICAgLyog
V2UgaGFyZGNvZGUgYWxsIGVsZW1lbnRzIHRvIGJlIGF0IDAsMCBzbyB0aGF0IHdlIGtub3cgd2hl
cmUgdG8gZ2VuZXJhdGUgdGhlIGJ1dHRvbiBldmVudHMgKi8KKyAgICBnX3Rlc3RfYWRkKCIvd2Vi
a2l0L3Rlc3Rjb250ZXh0bWVudS9pbWFnZSIsIENvbnRleHRNZW51Rml4dHVyZSwKKyAgICAgICAg
ICAgICAgIHRlc3RJbmZvTmV3KCI8aHRtbD48Ym9keT48aW1nIHN0eWxlPSdwb3NpdGlvbjphYnNv
bHV0ZTsgbGVmdDowOyB0b3A6MCcgc3JjPScweGRlYWRiZWVmJyB3aWR0aD01MCBoZWlnaHQ9NTA+
PC9pbWc+PC9ib2R5PjwvaHRtbD4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lU
X0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0lNQUdFKSwKKyAgICAgICAgICAgICAgIGNvbnRleHRN
ZW51Rml4dHVyZVNldHVwLCB0ZXN0Q29udGV4dE1lbnUsIGNvbnRleHRNZW51Rml4dHVyZVRlYXJk
b3duKTsKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L3Rlc3Rjb250ZXh0bWVudS9lZGl0YWJsZSIs
IENvbnRleHRNZW51Rml4dHVyZSwKKyAgICAgICAgICAgICAgIHRlc3RJbmZvTmV3KCI8aHRtbD48
Ym9keT48aW5wdXQgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjA7IHRvcDowJyBzaXpl
PSczNSc+PC9pbnB1dD4+PC9ib2R5PjwvaHRtbD4iLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0VESVRBQkxFKSwKKyAgICAgICAgICAg
ICAgIGNvbnRleHRNZW51Rml4dHVyZVNldHVwLCB0ZXN0Q29udGV4dE1lbnUsIGNvbnRleHRNZW51
Rml4dHVyZVRlYXJkb3duKTsKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L3Rlc3Rjb250ZXh0bWVu
dS9saW5rIiwgQ29udGV4dE1lbnVGaXh0dXJlLAorICAgICAgICAgICAgICAgdGVzdEluZm9OZXco
IjxodG1sPjxib2R5PjxhIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDowOyB0b3A6MCcg
aHJlZj0naHR0cDovL3d3dy5leGFtcGxlLmNvbSc+SEVMTE8gV09STEQ8L2E+PC9ib2R5PjwvaHRt
bD4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9D
T05URVhUX0xJTkspLAorICAgICAgICAgICAgICAgY29udGV4dE1lbnVGaXh0dXJlU2V0dXAsIHRl
c3RDb250ZXh0TWVudSwgY29udGV4dE1lbnVGaXh0dXJlVGVhcmRvd24pOworICAgIGdfdGVzdF9h
ZGQoIi93ZWJraXQvdGVzdGNvbnRleHRtZW51L2N1c3RvbWl0ZW0iLCBDb250ZXh0TWVudUZpeHR1
cmUsCisgICAgICAgICAgICAgICB0ZXN0SW5mb05ldygiPGh0bWw+PGJvZHk+PGgxPldlYktpdEdU
SyshPC9oMT48L2JvZHk+PC9odG1sPiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJL
SVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfRE9DVU1FTlQpLAorICAgICAgICAgICAgICAgY29u
dGV4dE1lbnVGaXh0dXJlU2V0dXAsIHRlc3RDb250ZXh0TWVudUN1c3RvbUl0ZW0sIGNvbnRleHRN
ZW51Rml4dHVyZVRlYXJkb3duKTsKKworICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7Cit9CisKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3Rjb3B5YW5k
cGFzdGUuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3Rjb3B5YW5k
cGFzdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjM4ZWE2Ci0tLSAv
ZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGNv
cHlhbmRwYXN0ZS5jCkBAIC0wLDAgKzEsMjY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNp
bmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxnbGliL2dz
dGRpby5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9KU1N0cmluZ1JlZi5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dFJl
Zi5oPgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgY2hhciogcGFnZTsKKyAgICBjaGFyKiBleHBl
Y3RlZENvbnRlbnQ7Cit9IFRlc3RJbmZvOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgR3RrV2lk
Z2V0KiB3aW5kb3c7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldzsKKyAgICBHTWFpbkxvb3Aq
IGxvb3A7CisgICAgVGVzdEluZm8qIGluZm87Cit9IENvcHlBbmRQYXN0ZUZpeHR1cmU7CisKK1Rl
c3RJbmZvKgordGVzdF9pbmZvX25ldyhjb25zdCBjaGFyKiBwYWdlLCBjb25zdCBjaGFyKiBleHBl
Y3RlZENvbnRlbnQpCit7CisgICAgVGVzdEluZm8qIGluZm87CisgICAgaW5mbyA9IGdfc2xpY2Vf
bmV3MChUZXN0SW5mbyk7CisgICAgaW5mby0+cGFnZSA9IGdfc3RyZHVwKHBhZ2UpOworICAgIGlm
IChleHBlY3RlZENvbnRlbnQpCisgICAgICAgIGluZm8tPmV4cGVjdGVkQ29udGVudCA9IGdfc3Ry
ZHVwKGV4cGVjdGVkQ29udGVudCk7CisgICAgcmV0dXJuIGluZm87Cit9CisKK3ZvaWQKK3Rlc3Rf
aW5mb19kZXN0cm95KFRlc3RJbmZvKiBpbmZvKQoreworICAgIGdfZnJlZShpbmZvLT5wYWdlKTsK
KyAgICBnX2ZyZWUoaW5mby0+ZXhwZWN0ZWRDb250ZW50KTsKKyAgICBnX3NsaWNlX2ZyZWUoVGVz
dEluZm8sIGluZm8pOworfQorCitzdGF0aWMgdm9pZCBjb3B5X2FuZF9wYXN0ZV9maXh0dXJlX3Nl
dHVwKENvcHlBbmRQYXN0ZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sK
KyAgICBmaXh0dXJlLT5sb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworCisgICAg
Zml4dHVyZS0+d2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7Cisg
ICAgZml4dHVyZS0+d2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3
KCkpOworCisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihmaXh0dXJlLT53aW5k
b3cpLCBHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpKTsKK30KKworc3RhdGljIHZvaWQgY29w
eV9hbmRfcGFzdGVfZml4dHVyZV90ZWFyZG93bihDb3B5QW5kUGFzdGVGaXh0dXJlKiBmaXh0dXJl
LCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgZ3RrX3dpZGdldF9kZXN0cm95KGZpeHR1cmUt
PndpbmRvdyk7CisgICAgZ19tYWluX2xvb3BfdW5yZWYoZml4dHVyZS0+bG9vcCk7CisgICAgdGVz
dF9pbmZvX2Rlc3Ryb3koZml4dHVyZS0+aW5mbyk7Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRfc3Rh
dHVzX2NiKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEdQYXJhbVNwZWMqIHNwZWMsIGdwb2ludGVy
IGRhdGEpCit7CisgICAgQ29weUFuZFBhc3RlRml4dHVyZSogZml4dHVyZSA9IChDb3B5QW5kUGFz
dGVGaXh0dXJlKilkYXRhOworICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dl
Yl92aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJWaWV3KTsKKyAgICBpZiAoc3RhdHVzICE9IFdFQktJ
VF9MT0FEX0ZJTklTSEVEKQorICAgICAgICByZXR1cm47CisKKyAgICBHdGtDbGlwYm9hcmQqIGNs
aXBib2FyZCA9IGd0a19jbGlwYm9hcmRfZ2V0KEdES19TRUxFQ1RJT05fQ0xJUEJPQVJEKTsKKyAg
ICBndGtfY2xpcGJvYXJkX2NsZWFyKGNsaXBib2FyZCk7CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdf
Y29weV9jbGlwYm9hcmQod2ViVmlldyk7CisKKyAgICBnY2hhciogdGV4dCA9IGd0a19jbGlwYm9h
cmRfd2FpdF9mb3JfdGV4dChjbGlwYm9hcmQpOworICAgIGdfYXNzZXJ0KHRleHQgfHwgIWZpeHR1
cmUtPmluZm8tPmV4cGVjdGVkQ29udGVudCk7CisgICAgZ19hc3NlcnQoIXRleHQgfHwgIXN0cmNt
cCh0ZXh0LCBmaXh0dXJlLT5pbmZvLT5leHBlY3RlZENvbnRlbnQpKTsKKyAgICBnX2ZyZWUodGV4
dCk7CisKKyAgICAvLyBWZXJpZnkgdGhhdCB0aGUgbWFya3VwIHN0YXJ0cyB3aXRoIHRoZSBwcm9w
ZXIgY29udGVudC10eXBlIG1ldGEgdGFnIHByZWZpeC4KKyAgICBHdGtTZWxlY3Rpb25EYXRhKiBz
ZWxlY3Rpb25EYXRhID0gZ3RrX2NsaXBib2FyZF93YWl0X2Zvcl9jb250ZW50cyhjbGlwYm9hcmQs
IGdka19hdG9tX2ludGVybigidGV4dC9odG1sIiwgRkFMU0UpKTsKKyAgICBpZiAoc2VsZWN0aW9u
RGF0YSkgeworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogbWFya3VwUHJlZml4ID0gIjxtZXRh
IGh0dHAtZXF1aXY9XCJjb250ZW50LXR5cGVcIiBjb250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0
PXV0Zi04XCI+IjsKKyAgICAgICAgY2hhciogbWFya3VwID0gZ19zdHJuZHVwKChjb25zdCBjaGFy
KikgZ3RrX3NlbGVjdGlvbl9kYXRhX2dldF9kYXRhKHNlbGVjdGlvbkRhdGEpLAorICAgICAgICAg
ICAgZ3RrX3NlbGVjdGlvbl9kYXRhX2dldF9sZW5ndGgoc2VsZWN0aW9uRGF0YSkpOworICAgICAg
ICBnX2Fzc2VydChzdHJsZW4obWFya3VwUHJlZml4KSA8PSBzdHJsZW4obWFya3VwKSk7CisgICAg
ICAgIGdfYXNzZXJ0KCFzdHJuY21wKG1hcmt1cFByZWZpeCwgbWFya3VwLCBzdHJsZW4obWFya3Vw
UHJlZml4KSkpOworICAgICAgICBnX2ZyZWUobWFya3VwKTsKKyAgICB9CisKKyAgICBnX2Fzc2Vy
dCghZ3RrX2NsaXBib2FyZF93YWl0X2lzX3VyaXNfYXZhaWxhYmxlKGNsaXBib2FyZCkpOworICAg
IGdfYXNzZXJ0KCFndGtfY2xpcGJvYXJkX3dhaXRfaXNfaW1hZ2VfYXZhaWxhYmxlKGNsaXBib2Fy
ZCkpOworCisgICAgZ19tYWluX2xvb3BfcXVpdChmaXh0dXJlLT5sb29wKTsKK30KKworZ2Jvb2xl
YW4gbWFwX2V2ZW50X2NiKEd0a1dpZGdldCAqd2lkZ2V0LCBHZGtFdmVudCogZXZlbnQsIGdwb2lu
dGVyIGRhdGEpCit7CisgICAgQ29weUFuZFBhc3RlRml4dHVyZSogZml4dHVyZSA9IChDb3B5QW5k
UGFzdGVGaXh0dXJlKilkYXRhOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhmaXh0
dXJlLT53ZWJWaWV3LCBmaXh0dXJlLT5pbmZvLT5wYWdlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAidGV4dC9odG1sIiwgInV0Zi04IiwgImZpbGU6Ly8iKTsKKyAgICByZXR1cm4g
RkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfY29weV9hbmRfcGFzdGUoQ29weUFuZFBhc3Rl
Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGZpeHR1cmUtPmlu
Zm8gPSAoVGVzdEluZm8qKWRhdGE7CisgICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53aW5k
b3csICJtYXAtZXZlbnQiLAorICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhtYXBfZXZl
bnRfY2IpLCBmaXh0dXJlKTsKKworICAgIGd0a193aWRnZXRfc2hvdyhmaXh0dXJlLT53aW5kb3cp
OworICAgIGd0a193aWRnZXRfc2hvdyhHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpKTsKKyAg
ICBndGtfd2luZG93X3ByZXNlbnQoR1RLX1dJTkRPVyhmaXh0dXJlLT53aW5kb3cpKTsKKyAgICBn
dGtfd2lkZ2V0X2dyYWJfZm9jdXMoR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSk7CisKKyAg
ICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVz
IiwKKyAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sobG9hZF9zdGF0dXNfY2IpLCBmaXh0
dXJlKTsKKworICAgIGdfbWFpbl9sb29wX3J1bihmaXh0dXJlLT5sb29wKTsKK30KKworc3RhdGlj
IENvcHlBbmRQYXN0ZUZpeHR1cmUqIGN1cnJlbnRGaXh0dXJlOworc3RhdGljIEpTVmFsdWVSZWYg
cnVuUGFzdGVUZXN0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1
bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29u
c3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAg
IGd0a193aWRnZXRfZ3JhYl9mb2N1cyhHVEtfV0lER0VUKGN1cnJlbnRGaXh0dXJlLT53ZWJWaWV3
KSk7CisKKyAgICAvLyBTaW11bGF0ZSBhIHBhc3RlIGtleWJvYXJkIHNlcXVlbmNlLgorICAgIEdk
a0V2ZW50KiBldmVudCA9IGdka19ldmVudF9uZXcoR0RLX0tFWV9QUkVTUyk7CisgICAgZXZlbnQt
PmtleS5rZXl2YWwgPSBnZGtfdW5pY29kZV90b19rZXl2YWwoJ3YnKTsKKyAgICBldmVudC0+a2V5
LnN0YXRlID0gR0RLX0NPTlRST0xfTUFTSzsKKyAgICBldmVudC0+a2V5LndpbmRvdyA9IGd0a193
aWRnZXRfZ2V0X3dpbmRvdyhHVEtfV0lER0VUKGN1cnJlbnRGaXh0dXJlLT53ZWJWaWV3KSk7Cisg
ICAgZ19vYmplY3RfcmVmKGV2ZW50LT5rZXkud2luZG93KTsKKyNpZm5kZWYgR1RLX0FQSV9WRVJT
SU9OXzIKKyAgICBHZGtEZXZpY2VNYW5hZ2VyKiBtYW5hZ2VyID0gIGdka19kaXNwbGF5X2dldF9k
ZXZpY2VfbWFuYWdlcihnZGtfd2luZG93X2dldF9kaXNwbGF5KGV2ZW50LT5rZXkud2luZG93KSk7
CisgICAgZ2RrX2V2ZW50X3NldF9kZXZpY2UoZXZlbnQsIGdka19kZXZpY2VfbWFuYWdlcl9nZXRf
Y2xpZW50X3BvaW50ZXIobWFuYWdlcikpOworI2VuZGlmCisKKyAgICBHZGtLZXltYXBLZXkqIGtl
eXM7CisgICAgZ2ludCBuX2tleXM7CisgICAgaWYgKGdka19rZXltYXBfZ2V0X2VudHJpZXNfZm9y
X2tleXZhbChnZGtfa2V5bWFwX2dldF9kZWZhdWx0KCksIGV2ZW50LT5rZXkua2V5dmFsLCAma2V5
cywgJm5fa2V5cykpIHsKKyAgICAgICAgZXZlbnQtPmtleS5oYXJkd2FyZV9rZXljb2RlID0ga2V5
c1swXS5rZXljb2RlOworICAgICAgICBnX2ZyZWUoa2V5cyk7CisgICAgfQorCisgICAgZ3RrX21h
aW5fZG9fZXZlbnQoZXZlbnQpOworICAgIGV2ZW50LT5rZXkudHlwZSA9IEdES19LRVlfUkVMRUFT
RTsKKyAgICBndGtfbWFpbl9kb19ldmVudChldmVudCk7CisgICAgZ2RrX2V2ZW50X2ZyZWUoZXZl
bnQpOworCisgICAgSlNTdHJpbmdSZWYgc2NyaXB0U3RyaW5nID0gSlNTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoImRvY3VtZW50LmJvZHkuaW5uZXJIVE1MOyIpOworICAgIEpTVmFsdWVSZWYg
dmFsdWUgPSBKU0V2YWx1YXRlU2NyaXB0KGNvbnRleHQsIHNjcmlwdFN0cmluZywgMCwgMCwgMCwg
MCk7CisgICAgSlNTdHJpbmdSZWxlYXNlKHNjcmlwdFN0cmluZyk7CisKKyAgICBnX2Fzc2VydChK
U1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgdmFsdWUpKTsKKyAgICBKU1N0cmluZ1JlZiBhY3R1YWwg
PSBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIHZhbHVlLCBleGNlcHRpb24pOworICAgIGdf
YXNzZXJ0KCFleGNlcHRpb24gfHwgISpleGNlcHRpb24pOworICAgIGdfYXNzZXJ0KGN1cnJlbnRG
aXh0dXJlLT5pbmZvLT5leHBlY3RlZENvbnRlbnQpOworICAgIEpTU3RyaW5nUmVmIGV4cGVjdGVk
ID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoY3VycmVudEZpeHR1cmUtPmluZm8tPmV4
cGVjdGVkQ29udGVudCk7CisgICAgZ19hc3NlcnQoSlNTdHJpbmdJc0VxdWFsKGV4cGVjdGVkLCBh
Y3R1YWwpKTsKKworICAgIEpTU3RyaW5nUmVsZWFzZShleHBlY3RlZCk7CisgICAgSlNTdHJpbmdS
ZWxlYXNlKGFjdHVhbCk7CisgICAgZ19tYWluX2xvb3BfcXVpdChjdXJyZW50Rml4dHVyZS0+bG9v
cCk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0
aWMgdm9pZCB3aW5kb3dfb2JqZWN0X2NsZWFyZWRfY2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2Vi
X3ZpZXcsIFdlYktpdFdlYkZyYW1lKiB3ZWJfZnJhbWUsIEpTR2xvYmFsQ29udGV4dFJlZiBjb250
ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dfb2JqZWN0LCBncG9pbnRlciBkYXRhKQoreworICAgIEpT
U3RyaW5nUmVmIG5hbWUgPSBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicnVuVGVzdCIp
OworICAgIEpTT2JqZWN0UmVmIHRlc3RDb21wbGV0ZSA9IEpTT2JqZWN0TWFrZUZ1bmN0aW9uV2l0
aENhbGxiYWNrKGNvbnRleHQsIG5hbWUsIHJ1blBhc3RlVGVzdENhbGxiYWNrKTsKKyAgICBKU09i
amVjdFNldFByb3BlcnR5KGNvbnRleHQsIHdpbmRvd19vYmplY3QsIG5hbWUsIHRlc3RDb21wbGV0
ZSwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lLCAwKTsKKyAgICBKU1N0cmluZ1JlbGVhc2UobmFt
ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHBhc3RpbmdfdGVzdF9nZXRfZGF0YV9jYWxsYmFjayhHdGtD
bGlwYm9hcmQqIGNsaXBib2FyZCwgR3RrU2VsZWN0aW9uRGF0YSogc2VsZWN0aW9uX2RhdGEsIGd1
aW50IGluZm8sIGdwb2ludGVyIGRhdGEpCit7CisgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX3NldChz
ZWxlY3Rpb25fZGF0YSwgZ2RrX2F0b21faW50ZXJuKCJ0ZXh0L2h0bWwiLCBGQUxTRSksIDgsIChj
b25zdCBndWNoYXIqKSBkYXRhLCBzdHJsZW4oKGNoYXIqKWRhdGEpICsgMSk7Cit9CisKK3N0YXRp
YyB2b2lkIHBhc3RpbmdfdGVzdF9jbGVhcl9kYXRhX2NhbGxiYWNrKEd0a0NsaXBib2FyZCogY2xp
cGJvYXJkLCBncG9pbnRlciBkYXRhKQoreworICAgIGdfZnJlZShkYXRhKTsKK30KKworc3RhdGlj
IHZvaWQgdGVzdF9wYXN0aW5nX21hcmt1cChDb3B5QW5kUGFzdGVGaXh0dXJlKiBmaXh0dXJlLCBn
Y29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgZml4dHVyZS0+aW5mbyA9IChUZXN0SW5mbyopZGF0
YTsKKyAgICBjdXJyZW50Rml4dHVyZSA9IGZpeHR1cmU7CisKKyAgICBHdGtUYXJnZXRMaXN0KiB0
YXJnZXRMaXN0ID0gZ3RrX3RhcmdldF9saXN0X25ldygwLCAwKTsKKyAgICBndGtfdGFyZ2V0X2xp
c3RfYWRkKHRhcmdldExpc3QsIGdka19hdG9tX2ludGVybigidGV4dC9odG1sIiwgRkFMU0UpLCAw
LCAwKTsKKworICAgIGludCBudW1iZXJPZlRhcmdldHMgPSAxOworICAgIEd0a1RhcmdldEVudHJ5
KiB0YXJnZXRUYWJsZSA9IGd0a190YXJnZXRfdGFibGVfbmV3X2Zyb21fbGlzdCh0YXJnZXRMaXN0
LCAmbnVtYmVyT2ZUYXJnZXRzKTsKKyAgICBndGtfY2xpcGJvYXJkX3NldF93aXRoX2RhdGEoZ3Rr
X2NsaXBib2FyZF9nZXQoR0RLX1NFTEVDVElPTl9DTElQQk9BUkQpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0YXJnZXRUYWJsZSwgbnVtYmVyT2ZUYXJnZXRzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwYXN0aW5nX3Rlc3RfZ2V0X2RhdGFfY2FsbGJhY2ssCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RpbmdfdGVzdF9jbGVhcl9kYXRhX2Nh
bGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3N0cmR1cChmaXh0dXJl
LT5pbmZvLT5leHBlY3RlZENvbnRlbnQpKTsKKyAgICBndGtfdGFyZ2V0X2xpc3RfdW5yZWYodGFy
Z2V0TGlzdCk7CisgICAgZ3RrX3RhcmdldF90YWJsZV9mcmVlKHRhcmdldFRhYmxlLCBudW1iZXJP
ZlRhcmdldHMpOworCisgICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53aW5kb3csICJtYXAt
ZXZlbnQiLAorICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhtYXBfZXZlbnRfY2IpLCBm
aXh0dXJlKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJ3aW5kb3ct
b2JqZWN0LWNsZWFyZWQiLAorICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyh3aW5kb3df
b2JqZWN0X2NsZWFyZWRfY2FsbGJhY2spLCBmaXh0dXJlKTsKKworICAgIGd0a193aWRnZXRfc2hv
dyhmaXh0dXJlLT53aW5kb3cpOworICAgIGd0a193aWRnZXRfc2hvdyhHVEtfV0lER0VUKGZpeHR1
cmUtPndlYlZpZXcpKTsKKyAgICBndGtfd2luZG93X3ByZXNlbnQoR1RLX1dJTkRPVyhmaXh0dXJl
LT53aW5kb3cpKTsKKworICAgIGdfbWFpbl9sb29wX3J1bihmaXh0dXJlLT5sb29wKTsKK30KKwor
CitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgZ3RrX3Rlc3RfaW5pdCgm
YXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy8iKTsKKyAgICBjb25zdCBjaGFyKiBzZWxlY3RlZF9zcGFuX2h0bWwgPSAiPGh0
bWw+PGJvZHk+IgorICAgICAgICAiPHNwYW4gaWQ9XCJtYWluc3BhblwiPkFsbCB3b3JrIGFuZCBu
byBwbGF5IDxzcGFuPm1ha2UgSmFjayBhIGR1bGw8L3NwYW4+IGJveS48L3NwYW4+IgorICAgICAg
ICAiPHNjcmlwdD5kb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5jb2xsYXBzZSgpO1xuIgorICAgICAg
ICAiZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0QWxsQ2hpbGRyZW4oZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ21haW5zcGFuJykpO1xuIgorICAgICAgICAiPC9zY3JpcHQ+PC9ib2R5Pjwv
aHRtbD4iOworICAgIGNvbnN0IGNoYXIqIG5vX3NlbGVjdGlvbl9odG1sID0gIjxodG1sPjxib2R5
PiIKKyAgICAgICAgIjxzcGFuIGlkPVwibWFpbnNwYW5cIj5BbGwgd29yayBhbmQgbm8gcGxheSA8
c3Bhbj5tYWtlIEphY2sgYSBkdWxsPC9zcGFuPiBib3k8L3NwYW4+IgorICAgICAgICAiPHNjcmlw
dD5kb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5jb2xsYXBzZSgpO1xuIgorICAgICAgICAiPC9zY3Jp
cHQ+PC9ib2R5PjwvaHRtbD4iOworCisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9jb3B5YW5kcGFz
dGUvc2VsZWN0aW9uIiwgQ29weUFuZFBhc3RlRml4dHVyZSwKKyAgICAgICAgICAgICAgIHRlc3Rf
aW5mb19uZXcoc2VsZWN0ZWRfc3Bhbl9odG1sLCAiQWxsIHdvcmsgYW5kIG5vIHBsYXkgbWFrZSBK
YWNrIGEgZHVsbCBib3kuIiksCisgICAgICAgICAgICAgICBjb3B5X2FuZF9wYXN0ZV9maXh0dXJl
X3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF9jb3B5X2FuZF9wYXN0ZSwKKyAgICAgICAgICAg
ICAgIGNvcHlfYW5kX3Bhc3RlX2ZpeHR1cmVfdGVhcmRvd24pOworICAgIGdfdGVzdF9hZGQoIi93
ZWJraXQvY29weWFuZHBhc3RlL25vLXNlbGVjdGlvbiIsIENvcHlBbmRQYXN0ZUZpeHR1cmUsCisg
ICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KG5vX3NlbGVjdGlvbl9odG1sLCAwKSwKKyAgICAg
ICAgICAgICAgIGNvcHlfYW5kX3Bhc3RlX2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0
ZXN0X2NvcHlfYW5kX3Bhc3RlLAorICAgICAgICAgICAgICAgY29weV9hbmRfcGFzdGVfZml4dHVy
ZV90ZWFyZG93bik7CisKKyAgICBjb25zdCBjaGFyKiBwYXN0ZV90ZXN0X2h0bWwgPSAiPGh0bWw+
IgorICAgICAgICAiPGJvZHkgb25Mb2FkPVwiZG9jdW1lbnQuYm9keS5mb2N1cygpOyBydW5UZXN0
KCk7XCIgY29udGVudEVkaXRhYmxlPVwidHJ1ZVwiPiIKKyAgICAgICAgIjwvYm9keT48L2h0bWw+
IjsKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2NvcHlhbmRwYXN0ZS9wYXN0ZS1tYXJrdXAiLCBD
b3B5QW5kUGFzdGVGaXh0dXJlLAorICAgICAgICAgICAgICAgdGVzdF9pbmZvX25ldyhwYXN0ZV90
ZXN0X2h0bWwsICJib2JieSIpLAorICAgICAgICAgICAgICAgY29weV9hbmRfcGFzdGVfZml4dHVy
ZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3RfcGFzdGluZ19tYXJrdXAsCisgICAgICAgICAg
ICAgICBjb3B5X2FuZF9wYXN0ZV9maXh0dXJlX3RlYXJkb3duKTsKKworICAgIHJldHVybiBnX3Rl
c3RfcnVuKCk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dEd0ay90ZXN0ZG9tZG9jdW1lbnQuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
R3RrL3Rlc3Rkb21kb2N1bWVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjRjOTk3ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdEd0ay90ZXN0ZG9tZG9jdW1lbnQuYwpAQCAtMCwwICsxLDQyOCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
dGVzdF91dGlscy5oIgorCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGdsaWIvZ3N0ZGlv
Lmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKwor
I2RlZmluZSBIVE1MX0RPQ1VNRU5UX1RJVExFICI8aHRtbD48aGVhZD48dGl0bGU+VGhpcyBpcyB0
aGUgdGl0bGU8L3RpdGxlPjwvaGVhZD48Ym9keT48L2JvZHk+PC9odG1sPiIKKyNkZWZpbmUgSFRN
TF9ET0NVTUVOVF9FTEVNRU5UUyAiPGh0bWw+PGJvZHk+PHVsPjxsaT4xPC9saT48bGk+MjwvbGk+
PGxpPjM8L2xpPjwvdWw+PC9ib2R5PjwvaHRtbD4iCisjZGVmaW5lIEhUTUxfRE9DVU1FTlRfRUxF
TUVOVFNfQ0xBU1MgIjxodG1sPjxib2R5PjxkaXYgY2xhc3M9XCJ0ZXN0XCI+PC9kaXY+PGRpdiBj
bGFzcz1cInN0cmFuZ2VcIj48L2Rpdj48ZGl2IGNsYXNzPVwidGVzdFwiPjwvZGl2PjwvYm9keT48
L2h0bWw+IgorI2RlZmluZSBIVE1MX0RPQ1VNRU5UX0VMRU1FTlRTX0lEICI8aHRtbD48Ym9keT48
ZGl2IGlkPVwidGVzdG9rXCI+PC9kaXY+PGRpdiBpZD1cInRlc3RiYWRcIj5maXJzdDwvZGl2Pjxk
aXYgaWQ9XCJ0ZXN0YmFkXCI+c2Vjb25kPC9kaXY+PC9ib2R5PjwvaHRtbD4iCisjZGVmaW5lIEhU
TUxfRE9DVU1FTlRfTElOS1MgIjxodG1sPjxoZWFkPjx0aXRsZT5UaXRsZTwvdGl0bGU+PC9oZWFk
Pjxib2R5PjxhIGhyZWY9XCJhYm91dDpibGFua1wiPmJsYW5rPC9hPjxhIGhyZWY9XCJodHRwOi8v
d3d3Lmdvb2dsZS5jb21cIj5nb29nbGU8L2E+PGEgaHJlZj1cImh0dHA6Ly93d3cud2Via2l0Lm9y
Z1wiPndlYmtpdDwvYT48L2JvZHk+PC9odG1sPiIKKyNkZWZpbmUgSFRNTF9ET0NVTUVOVF9JRlJB
TUUgIjxodG1sPjxoZWFkPjx0aXRsZT5JRnJhbWU8L3RpdGxlPjwvaGVhZD48Ym9keT48aWZyYW1l
IGlkPSdpZnJhbWUnPjwvaWZyYW1lPjxkaXYgaWQ9J3Rlc3QnPjwvZGl2PjwvYm9keT48L2h0bWw+
IgorI2RlZmluZSBIVE1MX0RPQ1VNRU5UX1RBQkxFICI8aHRtbD48Ym9keT48dGFibGUgaWQ9XCJ0
YWJsZVwiPjwvdGFibGU+PC9ib2R5PjwvaHRtbD4iCisjZGVmaW5lIEhUTUxfRE9DVU1FTlRfRVZB
TFVBVEUgIjxodG1sPjxoZWFkPjx0aXRsZT48L3RpdGxlPjwvaGVhZD48Ym9keT48ZGl2PkZpcnN0
IGRpdjwvZGl2PjxkaXY+U2Vjb25kIGRpdjwvZGl2PjwvYm9keT48L2h0bWw+IgorCit0eXBlZGVm
IHN0cnVjdCB7CisgICAgR3RrV2lkZ2V0KiB3ZWJWaWV3OworICAgIEdNYWluTG9vcCogbG9vcDsK
K30gRG9tRG9jdW1lbnRGaXh0dXJlOworCitzdGF0aWMgZ2Jvb2xlYW4gZmluaXNoX2xvYWRpbmco
RG9tRG9jdW1lbnRGaXh0dXJlKiBmaXh0dXJlKQoreworICAgIGlmIChnX21haW5fbG9vcF9pc19y
dW5uaW5nKGZpeHR1cmUtPmxvb3ApKQorICAgICAgICBnX21haW5fbG9vcF9xdWl0KGZpeHR1cmUt
Pmxvb3ApOworCisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZCBkb21fZG9jdW1l
bnRfZml4dHVyZV9zZXR1cChEb21Eb2N1bWVudEZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50
ZXIgZGF0YSkKK3sKKyAgICBmaXh0dXJlLT5sb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRS
VUUpOworICAgIGZpeHR1cmUtPndlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7CisgICAg
Z19vYmplY3RfcmVmX3NpbmsoZml4dHVyZS0+d2ViVmlldyk7CisKKyAgICBpZiAoZGF0YSAhPSBO
VUxMKQorICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVX
IChmaXh0dXJlLT53ZWJWaWV3KSwgKGNvbnN0IGNoYXIqKSBkYXRhLCBOVUxMLCBOVUxMLCBOVUxM
KTsKKworICAgIGdfaWRsZV9hZGQoKEdTb3VyY2VGdW5jKWZpbmlzaF9sb2FkaW5nLCBmaXh0dXJl
KTsKKyAgICBnX21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7Cit9CisKK3N0YXRpYyB2b2lk
IGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKERvbURvY3VtZW50Rml4dHVyZSogZml4dHVy
ZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGlmIChmaXh0dXJlLT53ZWJWaWV3KQorICAg
ICAgICBnX29iamVjdF91bnJlZihmaXh0dXJlLT53ZWJWaWV3KTsKKyAgICBnX21haW5fbG9vcF91
bnJlZihmaXh0dXJlLT5sb29wKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9kb21fZG9jdW1lbnRf
dGl0bGUoRG9tRG9jdW1lbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7
CisgICAgZ19hc3NlcnQoZml4dHVyZSk7CisgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IChXZWJL
aXRXZWJWaWV3KilmaXh0dXJlLT53ZWJWaWV3OworICAgIGdfYXNzZXJ0KHZpZXcpOworICAgIFdl
YktpdERPTURvY3VtZW50KiBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3Vt
ZW50KHZpZXcpOworICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsKKyAgICBnY2hhciogdGl0bGUgPSB3
ZWJraXRfZG9tX2RvY3VtZW50X2dldF90aXRsZShkb2N1bWVudCk7CisgICAgZ19hc3NlcnQodGl0
bGUpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0aXRsZSwgPT0sICJUaGlzIGlzIHRoZSB0aXRsZSIp
OworICAgIGdfZnJlZSh0aXRsZSk7CisgICAgd2Via2l0X2RvbV9kb2N1bWVudF9zZXRfdGl0bGUo
ZG9jdW1lbnQsICJUaGlzIGlzIHRoZSBzZWNvbmQgdGl0bGUiKTsKKyAgICB0aXRsZSA9IHdlYmtp
dF9kb21fZG9jdW1lbnRfZ2V0X3RpdGxlKGRvY3VtZW50KTsKKyAgICBnX2Fzc2VydCh0aXRsZSk7
CisgICAgZ19hc3NlcnRfY21wc3RyKHRpdGxlLCA9PSwgIlRoaXMgaXMgdGhlIHNlY29uZCB0aXRs
ZSIpOworICAgIGdfZnJlZSh0aXRsZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfZG9tX2RvY3Vt
ZW50X2dldF9lbGVtZW50c19ieV90YWdfbmFtZShEb21Eb2N1bWVudEZpeHR1cmUqIGZpeHR1cmUs
IGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBnX2Fzc2VydChmaXh0dXJlKTsKKyAgICBXZWJL
aXRXZWJWaWV3KiB2aWV3ID0gKFdlYktpdFdlYlZpZXcqKWZpeHR1cmUtPndlYlZpZXc7CisgICAg
Z19hc3NlcnQodmlldyk7CisgICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50ID0gd2Via2l0
X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQodmlldyk7CisgICAgZ19hc3NlcnQoZG9jdW1lbnQp
OworICAgIFdlYktpdERPTU5vZGVMaXN0KiBsaXN0ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRf
ZWxlbWVudHNfYnlfdGFnX25hbWUoZG9jdW1lbnQsICJsaSIpOworICAgIGdfYXNzZXJ0KGxpc3Qp
OworICAgIGd1bG9uZyBsZW5ndGggPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxp
c3QpOworICAgIGdfYXNzZXJ0X2NtcGludChsZW5ndGgsID09LCAzKTsKKworICAgIGd1aW50IGk7
CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgV2ViS2l0RE9N
Tm9kZSogaXRlbSA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdCwgaSk7CisgICAgICAg
IGdfYXNzZXJ0KGl0ZW0pOworICAgICAgICBXZWJLaXRET01FbGVtZW50KiBlbGVtZW50ID0gKFdl
YktpdERPTUVsZW1lbnQqKWl0ZW07CisgICAgICAgIGdfYXNzZXJ0KGVsZW1lbnQpOworICAgICAg
ICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2RvbV9lbGVtZW50X2dldF90YWdfbmFtZShlbGVtZW50
KSwgPT0sICJMSSIpOworICAgICAgICBXZWJLaXRET01IVE1MRWxlbWVudCogaHRtbEVsZW1lbnQg
PSAoV2ViS2l0RE9NSFRNTEVsZW1lbnQqKWVsZW1lbnQ7CisgICAgICAgIGNoYXIqIG4gPSBnX3N0
cmR1cF9wcmludGYoIiVkIiwgaSsxKTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9k
b21faHRtbF9lbGVtZW50X2dldF9pbm5lcl90ZXh0KGh0bWxFbGVtZW50KSwgPT0sIG4pOworICAg
ICAgICBnX2ZyZWUobik7CisgICAgfQorCisgICAgZ19vYmplY3RfdW5yZWYobGlzdCk7Cit9CisK
K3N0YXRpYyB2b2lkIHRlc3RfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19ieV9jbGFzc19uYW1l
KERvbURvY3VtZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAg
IGdfYXNzZXJ0KGZpeHR1cmUpOworICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSAoV2ViS2l0V2Vi
VmlldyopZml4dHVyZS0+d2ViVmlldzsKKyAgICBnX2Fzc2VydCh2aWV3KTsKKyAgICBXZWJLaXRE
T01Eb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2
aWV3KTsKKyAgICBnX2Fzc2VydChkb2N1bWVudCk7CisgICAgV2ViS2l0RE9NTm9kZUxpc3QqIGxp
c3QgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19ieV9jbGFzc19uYW1lKGRvY3Vt
ZW50LCAidGVzdCIpOworICAgIGdfYXNzZXJ0KGxpc3QpOworICAgIGd1bG9uZyBsZW5ndGggPSB3
ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChsZW5ndGgsID09LCAyKTsKKworICAgIGd1aW50IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwg
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgV2ViS2l0RE9NTm9kZSogaXRlbSA9IHdlYmtpdF9kb21f
bm9kZV9saXN0X2l0ZW0obGlzdCwgaSk7CisgICAgICAgIGdfYXNzZXJ0KGl0ZW0pOworICAgICAg
ICBXZWJLaXRET01FbGVtZW50KiBlbGVtZW50ID0gKFdlYktpdERPTUVsZW1lbnQqKWl0ZW07Cisg
ICAgICAgIGdfYXNzZXJ0KGVsZW1lbnQpOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0
X2RvbV9lbGVtZW50X2dldF90YWdfbmFtZShlbGVtZW50KSwgPT0sICJESVYiKTsKKyAgICB9CisK
KyAgICBnX29iamVjdF91bnJlZihsaXN0KTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9kb21fZG9j
dW1lbnRfZ2V0X2VsZW1lbnRfYnlfaWQoRG9tRG9jdW1lbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29u
c3Rwb2ludGVyIGRhdGEpCit7CisgICAgZ19hc3NlcnQoZml4dHVyZSk7CisgICAgV2ViS2l0V2Vi
VmlldyogdmlldyA9IChXZWJLaXRXZWJWaWV3KilmaXh0dXJlLT53ZWJWaWV3OworICAgIGdfYXNz
ZXJ0KHZpZXcpOworICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1bWVudCA9IHdlYmtpdF93ZWJf
dmlld19nZXRfZG9tX2RvY3VtZW50KHZpZXcpOworICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsKKyAg
ICBXZWJLaXRET01FbGVtZW50KiBlbGVtZW50ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxl
bWVudF9ieV9pZChkb2N1bWVudCwgInRlc3RvayIpOworICAgIGdfYXNzZXJ0KGVsZW1lbnQpOwor
ICAgIGVsZW1lbnQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50X2J5X2lkKGRvY3Vt
ZW50LCAidGhpcy1pZC1kb2VzLW5vdC1leGlzdCIpOworICAgIGdfYXNzZXJ0KGVsZW1lbnQgPT0g
MCk7CisgICAgLyogVGhlIERPTSBzcGVjIHNheXMgdGhlIHJldHVybiB2YWx1ZSBpcyB1bmRlZmlu
ZWQgd2hlbiB0aGVyZSdzCisgICAgICogbW9yZSB0aGFuIG9uZSBlbGVtZW50IHdpdGggdGhlIHNh
bWUgaWQ7IGluIG91ciBjYXNlIHRoZSBmaXJzdAorICAgICAqIG9uZSB3aWxsIGJlIHJldHVybmVk
ICovCisgICAgZWxlbWVudCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRfYnlfaWQo
ZG9jdW1lbnQsICJ0ZXN0YmFkIik7CisgICAgZ19hc3NlcnQoZWxlbWVudCk7CisgICAgV2ViS2l0
RE9NSFRNTEVsZW1lbnQqIGh0bWxFbGVtZW50ID0gKFdlYktpdERPTUhUTUxFbGVtZW50KillbGVt
ZW50OworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfaW5u
ZXJfdGV4dChodG1sRWxlbWVudCksID09LCAiZmlyc3QiKTsKK30KKworc3RhdGljIHZvaWQgdGVz
dF9kb21fZG9jdW1lbnRfZ2V0X2xpbmtzKERvbURvY3VtZW50Rml4dHVyZSogZml4dHVyZSwgZ2Nv
bnN0cG9pbnRlciBkYXRhKQoreworICAgIGdfYXNzZXJ0KGZpeHR1cmUpOworICAgIFdlYktpdFdl
YlZpZXcqIHZpZXcgPSAoV2ViS2l0V2ViVmlldyopZml4dHVyZS0+d2ViVmlldzsKKyAgICBnX2Fz
c2VydCh2aWV3KTsKKyAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKKyAgICBnX2Fzc2VydChkb2N1bWVudCk7Cisg
ICAgV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24gKmNvbGxlY3Rpb24gPSB3ZWJraXRfZG9tX2RvY3Vt
ZW50X2dldF9saW5rcyhkb2N1bWVudCk7CisgICAgZ19hc3NlcnQoY29sbGVjdGlvbik7CisgICAg
Z3Vsb25nIGxlbmd0aCA9IHdlYmtpdF9kb21faHRtbF9jb2xsZWN0aW9uX2dldF9sZW5ndGgoY29s
bGVjdGlvbik7CisgICAgZ19hc3NlcnRfY21waW50KGxlbmd0aCwgPT0sIDMpOworCisgICAgZ3Vp
bnQgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBzdGF0
aWMgY29uc3QgY2hhciogbmFtZXNbXSA9IHsgImJsYW5rIiwgImdvb2dsZSIsICJ3ZWJraXQiIH07
CisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiB1cmlzW10gPSB7ICJhYm91dDpibGFuayIsICJo
dHRwOi8vd3d3Lmdvb2dsZS5jb20vIiwgImh0dHA6Ly93d3cud2Via2l0Lm9yZy8iIH07CisgICAg
ICAgIFdlYktpdERPTU5vZGUgKm5vZGUgPSB3ZWJraXRfZG9tX2h0bWxfY29sbGVjdGlvbl9pdGVt
KGNvbGxlY3Rpb24sIGkpOworICAgICAgICBnX2Fzc2VydChub2RlKTsKKyAgICAgICAgV2ViS2l0
RE9NRWxlbWVudCogZWxlbWVudCA9IChXZWJLaXRET01FbGVtZW50Kilub2RlOworICAgICAgICBn
X2Fzc2VydF9jbXBzdHIod2Via2l0X2RvbV9lbGVtZW50X2dldF90YWdfbmFtZShlbGVtZW50KSwg
PT0sICJBIik7CisgICAgICAgIFdlYktpdERPTUhUTUxFbGVtZW50ICpodG1sRWxlbWVudCA9IChX
ZWJLaXRET01IVE1MRWxlbWVudCopZWxlbWVudDsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdl
YmtpdF9kb21faHRtbF9lbGVtZW50X2dldF9pbm5lcl90ZXh0KGh0bWxFbGVtZW50KSwgPT0sIG5h
bWVzW2ldKTsKKyAgICAgICAgV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQgKmFuY2hvciA9IChX
ZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCopZWxlbWVudDsKKyAgICAgICAgZ19hc3NlcnRfY21w
c3RyKHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfaHJlZihhbmNob3IpLCA9PSwg
dXJpc1tpXSk7CisgICAgfQorICAgIGdfb2JqZWN0X3VucmVmKGNvbGxlY3Rpb24pOworfQorCitz
dGF0aWMgdm9pZCB0ZXN0X2RvbV9kb2N1bWVudF9pbnNlcnRfcm93KERvbURvY3VtZW50Rml4dHVy
ZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGdfYXNzZXJ0KGZpeHR1cmUp
OworICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSAoV2ViS2l0V2ViVmlldyopZml4dHVyZS0+d2Vi
VmlldzsKKyAgICBnX2Fzc2VydCh2aWV3KTsKKyAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1l
bnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKKyAgICBnX2Fzc2Vy
dChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKGRvY3VtZW50KSk7CisgICAgV2ViS2l0RE9NRWxlbWVu
dCogdGFibGUgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50X2J5X2lkKGRvY3VtZW50
LCAidGFibGUiKTsKKyAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVCh0YWJs
ZSkpOworICAgIFdlYktpdERPTUhUTUxDb2xsZWN0aW9uKiByb3dzID0gd2Via2l0X2RvbV9odG1s
X3RhYmxlX2VsZW1lbnRfZ2V0X3Jvd3MoV0VCS0lUX0RPTV9IVE1MX1RBQkxFX0VMRU1FTlQodGFi
bGUpKTsKKyAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfQ09MTEVDVElPTihyb3dzKSk7
CisKKyAgICAvLyBUYWJsZSBpcyBpbml0aWFsbHkgZW1wdHkuCisgICAgZ19hc3NlcnRfY21waW50
KHdlYmtpdF9kb21faHRtbF9jb2xsZWN0aW9uX2dldF9sZW5ndGgocm93cyksID09LCAwKTsKKyAg
ICBXZWJLaXRET01IVE1MRWxlbWVudCogcm93ID0gd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1l
bnRfaW5zZXJ0X3JvdyhXRUJLSVRfRE9NX0hUTUxfVEFCTEVfRUxFTUVOVCh0YWJsZSksIC0xLCBO
VUxMKTsKKyAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfUk9XX0VMRU1FTlQo
cm93KSk7CisgICAgcm93cyA9IHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2dldF9yb3dz
KFdFQktJVF9ET01fSFRNTF9UQUJMRV9FTEVNRU5UKHRhYmxlKSk7CisgICAgZ19hc3NlcnQoV0VC
S0lUX0RPTV9JU19IVE1MX0NPTExFQ1RJT04ocm93cykpOworICAgIGdfYXNzZXJ0X2NtcGludCh3
ZWJraXRfZG9tX2h0bWxfY29sbGVjdGlvbl9nZXRfbGVuZ3RoKHJvd3MpLCA9PSwgMSk7Cit9CisK
K3N0YXRpYyB2b2lkIHRlc3RfZG9tX2RvY3VtZW50X2V2YWx1YXRlKERvbURvY3VtZW50Rml4dHVy
ZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGdfYXNzZXJ0KGZpeHR1cmUp
OworICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSAoV2ViS2l0V2ViVmlldyopZml4dHVyZS0+d2Vi
VmlldzsKKyAgICBnX2Fzc2VydCh2aWV3KTsKKyAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1l
bnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKKyAgICBnX2Fzc2Vy
dChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKGRvY3VtZW50KSk7CisgICAgV2ViS2l0RE9NTm9kZUxp
c3QqIGxpc3QgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19ieV90YWdfbmFtZShk
b2N1bWVudCwgImh0bWwiKTsKKyAgICBnX2Fzc2VydChsaXN0KTsKKyAgICBndWxvbmcgbGVuZ3Ro
ID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChsaXN0KTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQobGVuZ3RoLCA9PSwgMSk7CisgICAgV2ViS2l0RE9NTm9kZSogaHRtbCA9IHdlYmtpdF9k
b21fbm9kZV9saXN0X2l0ZW0obGlzdCwgMCk7CisgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19O
T0RFKGh0bWwpKTsKKworICAgIFdlYktpdERPTVhQYXRoUmVzdWx0KiByZXN1bHQgPSB3ZWJraXRf
ZG9tX2RvY3VtZW50X2V2YWx1YXRlKGRvY3VtZW50LCAiLy9kaXYiLCBodG1sLCBOVUxMLCAwLCBO
VUxMLCBOVUxMKTsKKyAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX1hQQVRIX1JFU1VMVChyZXN1
bHQpKTsKKworICAgIGludCBpID0gMDsKKyAgICBXZWJLaXRET01Ob2RlKiBub2RlOworICAgIHdo
aWxlICggKG5vZGUgPSB3ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9pdGVyYXRlX25leHQocmVzdWx0
LCBOVUxMKSkgIT0gTlVMTCkgeworICAgICAgICBnX2Fzc2VydChub2RlKTsKKyAgICAgICAgV2Vi
S2l0RE9NRWxlbWVudCogZWxlbWVudCA9IChXZWJLaXRET01FbGVtZW50Kilub2RlOworICAgICAg
ICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2RvbV9lbGVtZW50X2dldF90YWdfbmFtZShlbGVtZW50
KSwgPT0sICJESVYiKTsKKyAgICAgICAgaSsrOworICAgIH0KKyAgICBnX2Fzc2VydF9jbXBpbnQo
aSwgPT0sIDIpOworCisgICAgZ19vYmplY3RfdW5yZWYobGlzdCk7Cit9CisKK3N0YXRpYyB2b2lk
IHdlYWtfbm90aWZ5KGdwb2ludGVyIGRhdGEsIEdPYmplY3QqIHpvbWJpZSkKK3sKKyAgICBndWlu
dCogY291bnQgPSAoZ3VpbnQqKWRhdGE7CisgICAgKCpjb3VudCkrKzsKK30KKworc3RhdGljIHZv
aWQgdGVzdF9kb21fZG9jdW1lbnRfZ2FyYmFnZV9jb2xsZWN0aW9uKERvbURvY3VtZW50Rml4dHVy
ZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGd1aW50IGNvdW50ID0gMDsK
KyAgICBnX2Fzc2VydChmaXh0dXJlKTsKKyAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gKFdlYktp
dFdlYlZpZXcqKWZpeHR1cmUtPndlYlZpZXc7CisgICAgZ19hc3NlcnQodmlldyk7CisgICAgV2Vi
S2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1l
bnQodmlldyk7CisgICAgZ19hc3NlcnQoZG9jdW1lbnQpOworICAgIGdfb2JqZWN0X3dlYWtfcmVm
KEdfT0JKRUNUKGRvY3VtZW50KSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOwor
ICAgIFdlYktpdERPTUhUTUxIZWFkRWxlbWVudCogaGVhZCA9IHdlYmtpdF9kb21fZG9jdW1lbnRf
Z2V0X2hlYWQoZG9jdW1lbnQpOworICAgIGdfYXNzZXJ0KGhlYWQpOworICAgIGdfb2JqZWN0X3dl
YWtfcmVmKEdfT0JKRUNUKGhlYWQpLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7
CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQqIGJvZHkgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dl
dF9ib2R5KGRvY3VtZW50KTsKKyAgICBnX2Fzc2VydChib2R5KTsKKyAgICBnX29iamVjdF93ZWFr
X3JlZihHX09CSkVDVChib2R5KSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOwor
ICAgIFdlYktpdERPTUhUTUxDb2xsZWN0aW9uICpjb2xsZWN0aW9uID0gd2Via2l0X2RvbV9kb2N1
bWVudF9nZXRfbGlua3MoZG9jdW1lbnQpOworICAgIGdfYXNzZXJ0KGNvbGxlY3Rpb24pOworICAg
IGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGNvbGxlY3Rpb24pLCAoR1dlYWtOb3RpZnkpd2Vh
a19ub3RpZnksICZjb3VudCk7CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoV0VC
S0lUX1dFQl9WSUVXKHZpZXcpLCBIVE1MX0RPQ1VNRU5UX0xJTktTLCBOVUxMLCBOVUxMLCBOVUxM
KTsKKworICAgIHdoaWxlIChnX21haW5fY29udGV4dF9wZW5kaW5nKE5VTEwpKQorICAgICAgICBn
X21haW5fY29udGV4dF9pdGVyYXRpb24oTlVMTCwgRkFMU0UpOworCisgICAgZ19hc3NlcnRfY21w
dWludChjb3VudCwgPT0sIDMpOworCisgICAgZ19vYmplY3RfdW5yZWYoY29sbGVjdGlvbik7Cisg
ICAgZ19hc3NlcnRfY21wdWludChjb3VudCwgPT0sIDQpOworCisgICAgY291bnQgPSAwOworCisg
ICAgZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKKyAg
ICBnX2Fzc2VydChkb2N1bWVudCk7CisgICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1QoZG9j
dW1lbnQpLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7CisgICAgaGVhZCA9IHdl
YmtpdF9kb21fZG9jdW1lbnRfZ2V0X2hlYWQoZG9jdW1lbnQpOworICAgIGdfYXNzZXJ0KGhlYWQp
OworICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGhlYWQpLCAoR1dlYWtOb3RpZnkpd2Vh
a19ub3RpZnksICZjb3VudCk7CisgICAgYm9keSA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2Jv
ZHkoZG9jdW1lbnQpOworICAgIGdfYXNzZXJ0KGJvZHkpOworICAgIGdfb2JqZWN0X3dlYWtfcmVm
KEdfT0JKRUNUKGJvZHkpLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7CisgICAg
Y29sbGVjdGlvbiA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2xpbmtzKGRvY3VtZW50KTsKKyAg
ICBnX2Fzc2VydChjb2xsZWN0aW9uKTsKKyAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVDVChj
b2xsZWN0aW9uKSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOworICAgIC8qIEFz
ayB0d2ljZSBmb3IgdGhlIHNhbWUgb2JqZWN0ICovCisgICAgV2ViS2l0RE9NSFRNTENvbGxlY3Rp
b24qIGNvbGxlY3Rpb24yID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfbGlua3MoZG9jdW1lbnQp
OworICAgIGdfYXNzZXJ0KGNvbGxlY3Rpb24yKTsKKyAgICBnX29iamVjdF93ZWFrX3JlZihHX09C
SkVDVChjb2xsZWN0aW9uMiksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKKwor
ICAgIGdfb2JqZWN0X3VucmVmKGRvY3VtZW50KTsKKyAgICBnX29iamVjdF91bnJlZihoZWFkKTsK
KyAgICBnX29iamVjdF91bnJlZihib2R5KTsKKyAgICBnX29iamVjdF91bnJlZihjb2xsZWN0aW9u
KTsKKyAgICBnX29iamVjdF91bnJlZihjb2xsZWN0aW9uMik7CisKKyAgICBnX2Fzc2VydF9jbXB1
aW50KGNvdW50LCA9PSwgNSk7CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoV0VC
S0lUX1dFQl9WSUVXKHZpZXcpLCBIVE1MX0RPQ1VNRU5UX0lGUkFNRSwgTlVMTCwgTlVMTCwgTlVM
TCk7CisKKyAgICB3aGlsZSAoZ19tYWluX2NvbnRleHRfcGVuZGluZyhOVUxMKSkKKyAgICAgICAg
Z19tYWluX2NvbnRleHRfaXRlcmF0aW9uKE5VTEwsIEZBTFNFKTsKKworICAgIGNvdW50ID0gMDsK
KworICAgIGRvY3VtZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQodmlldyk7
CisgICAgV2ViS2l0RE9NRWxlbWVudCogZGl2ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxl
bWVudF9ieV9pZChkb2N1bWVudCwgInRlc3QiKTsKKyAgICBnX2Fzc2VydChkaXYpOworICAgIGdf
b2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGRpdiksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwg
JmNvdW50KTsKKyAgICBXZWJLaXRET01FbGVtZW50KiBpZnJhbWUgPSB3ZWJraXRfZG9tX2RvY3Vt
ZW50X2dldF9lbGVtZW50X2J5X2lkKGRvY3VtZW50LCAiaWZyYW1lIik7CisgICAgZ19hc3NlcnQo
aWZyYW1lKTsKKworICAgIHdlYmtpdF9kb21fZWxlbWVudF9zZXRfYXR0cmlidXRlKGlmcmFtZSwg
InNyYyIsICJkYXRhOjxodG1sPjxoZWFkPjwvaGVhZD48L2h0bWw+IiwgTlVMTCk7CisKKyAgICB3
aGlsZSAoZ19tYWluX2NvbnRleHRfcGVuZGluZyhOVUxMKSkKKyAgICAgICAgZ19tYWluX2NvbnRl
eHRfaXRlcmF0aW9uKE5VTEwsIEZBTFNFKTsKKworICAgIFdlYktpdERPTURvY3VtZW50KiBpZnJh
bWVEb2N1bWVudCA9IHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfY29udGVudF9k
b2N1bWVudChXRUJLSVRfRE9NX0hUTUxfSUZSQU1FX0VMRU1FTlQoaWZyYW1lKSk7CisgICAgZ19h
c3NlcnQoaWZyYW1lRG9jdW1lbnQpOworICAgIGhlYWQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dl
dF9oZWFkKGlmcmFtZURvY3VtZW50KTsKKyAgICBnX2Fzc2VydChoZWFkKTsKKyAgICBnX29iamVj
dF93ZWFrX3JlZihHX09CSkVDVChoZWFkKSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291
bnQpOworCisgICAgd2Via2l0X2RvbV9lbGVtZW50X3NldF9hdHRyaWJ1dGUoaWZyYW1lLCAic3Jj
IiwgImFib3V0OmJsYW5rIiwgTlVMTCk7CisKKyAgICB3aGlsZSAoZ19tYWluX2NvbnRleHRfcGVu
ZGluZyhOVUxMKSkKKyAgICAgICAgZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uKE5VTEwsIEZBTFNF
KTsKKworICAgIGdfYXNzZXJ0X2NtcHVpbnQoY291bnQsID09LCAxKTsKKworICAgIHdlYmtpdF93
ZWJfdmlld19sb2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcodmlldyksIEhUTUxfRE9DVU1FTlRf
TElOS1MsIE5VTEwsIE5VTEwsIE5VTEwpOworCisgICAgd2hpbGUgKGdfbWFpbl9jb250ZXh0X3Bl
bmRpbmcoTlVMTCkpCisgICAgICAgIGdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbihOVUxMLCBGQUxT
RSk7CisKKyAgICBnX2Fzc2VydF9jbXB1aW50KGNvdW50LCA9PSwgMik7CisKKyAgICBjb3VudCA9
IDA7CisKKyAgICBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50KHZp
ZXcpOworICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsKKyAgICBnX29iamVjdF93ZWFrX3JlZihHX09C
SkVDVChkb2N1bWVudCksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKKyAgICAv
KiBBc2sgdHdpY2UgZm9yIHRoZSBEb2N1bWVudCAqLworICAgIFdlYktpdERPTURvY3VtZW50KiBk
b2N1bWVudDIgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKKyAgICBn
X2Fzc2VydChkb2N1bWVudDIpOworICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGRvY3Vt
ZW50MiksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKKyAgICBoZWFkID0gd2Vi
a2l0X2RvbV9kb2N1bWVudF9nZXRfaGVhZChkb2N1bWVudCk7CisgICAgZ19hc3NlcnQoaGVhZCk7
CisgICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1QoaGVhZCksIChHV2Vha05vdGlmeSl3ZWFr
X25vdGlmeSwgJmNvdW50KTsKKyAgICBib2R5ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfYm9k
eShkb2N1bWVudCk7CisgICAgZ19hc3NlcnQoYm9keSk7CisgICAgZ19vYmplY3Rfd2Vha19yZWYo
R19PQkpFQ1QoYm9keSksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKKyAgICBj
b2xsZWN0aW9uID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfbGlua3MoZG9jdW1lbnQpOworICAg
IGdfYXNzZXJ0KGNvbGxlY3Rpb24pOworICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGNv
bGxlY3Rpb24pLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7CisKKyAgICBndGtf
d2lkZ2V0X2Rlc3Ryb3koZml4dHVyZS0+d2ViVmlldyk7CisgICAgZml4dHVyZS0+d2ViVmlldyA9
IE5VTEw7CisKKyAgICBnX2Fzc2VydF9jbXB1aW50KGNvdW50LCA9PSwgNCk7CisKKyAgICBnX29i
amVjdF91bnJlZihjb2xsZWN0aW9uKTsKKworICAgIGdfYXNzZXJ0X2NtcHVpbnQoY291bnQsID09
LCA1KTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIGd0a190
ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKKworICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2RvbWRv
Y3VtZW50L3Rlc3RfdGl0bGUiLAorICAgICAgICAgICAgICAgRG9tRG9jdW1lbnRGaXh0dXJlLCBI
VE1MX0RPQ1VNRU5UX1RJVExFLAorICAgICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVf
c2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0X2RvbV9kb2N1bWVudF90aXRsZSwKKyAgICAgICAg
ICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKTsKKworICAgIGdfdGVzdF9hZGQo
Ii93ZWJraXQvZG9tZG9jdW1lbnQvdGVzdF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWUiLAorICAg
ICAgICAgICAgICAgRG9tRG9jdW1lbnRGaXh0dXJlLCBIVE1MX0RPQ1VNRU5UX0VMRU1FTlRTLAor
ICAgICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAg
ICB0ZXN0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWUsCisgICAgICAgICAg
ICAgICBkb21fZG9jdW1lbnRfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICBnX3Rlc3RfYWRkKCIv
d2Via2l0L2RvbWRvY3VtZW50L3Rlc3RfZ2V0X2VsZW1lbnRzX2J5X2NsYXNzX25hbWUiLAorICAg
ICAgICAgICAgICAgRG9tRG9jdW1lbnRGaXh0dXJlLCBIVE1MX0RPQ1VNRU5UX0VMRU1FTlRTX0NM
QVNTLAorICAgICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfc2V0dXAsCisgICAgICAg
ICAgICAgICB0ZXN0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfY2xhc3NfbmFtZSwKKyAg
ICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKTsKKworICAgIGdfdGVz
dF9hZGQoIi93ZWJraXQvZG9tZG9jdW1lbnQvdGVzdF9nZXRfZWxlbWVudF9ieV9pZCIsCisgICAg
ICAgICAgICAgICBEb21Eb2N1bWVudEZpeHR1cmUsIEhUTUxfRE9DVU1FTlRfRUxFTUVOVFNfSUQs
CisgICAgICAgICAgICAgICBkb21fZG9jdW1lbnRfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAg
ICAgIHRlc3RfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50X2J5X2lkLAorICAgICAgICAgICAgICAg
ZG9tX2RvY3VtZW50X2ZpeHR1cmVfdGVhcmRvd24pOworCisgICAgZ190ZXN0X2FkZCgiL3dlYmtp
dC9kb21kb2N1bWVudC90ZXN0X2dldF9saW5rcyIsCisgICAgICAgICAgICAgICBEb21Eb2N1bWVu
dEZpeHR1cmUsIEhUTUxfRE9DVU1FTlRfTElOS1MsCisgICAgICAgICAgICAgICBkb21fZG9jdW1l
bnRfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3RfZG9tX2RvY3VtZW50X2dldF9s
aW5rcywKKyAgICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKTsKKwor
ICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvZG9tZG9jdW1lbnQvdGVzdF90YWJsZV9pbnNlcnRfcm93
IiwKKyAgICAgICAgICAgICAgIERvbURvY3VtZW50Rml4dHVyZSwgSFRNTF9ET0NVTUVOVF9UQUJM
RSwKKyAgICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3NldHVwLAorICAgICAgICAg
ICAgICAgdGVzdF9kb21fZG9jdW1lbnRfaW5zZXJ0X3JvdywKKyAgICAgICAgICAgICAgIGRvbV9k
b2N1bWVudF9maXh0dXJlX3RlYXJkb3duKTsKKworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvZG9t
ZG9jdW1lbnQvdGVzdF9kb2N1bWVudF9ldmFsdWF0ZSIsCisgICAgICAgICAgICAgICBEb21Eb2N1
bWVudEZpeHR1cmUsIEhUTUxfRE9DVU1FTlRfRVZBTFVBVEUsCisgICAgICAgICAgICAgICBkb21f
ZG9jdW1lbnRfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3RfZG9tX2RvY3VtZW50
X2V2YWx1YXRlLAorICAgICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfdGVhcmRvd24p
OworCisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9kb21kb2N1bWVudC90ZXN0X2dhcmJhZ2VfY29s
bGVjdGlvbiIsCisgICAgICAgICAgICAgICBEb21Eb2N1bWVudEZpeHR1cmUsIEhUTUxfRE9DVU1F
TlRfTElOS1MsCisgICAgICAgICAgICAgICBkb21fZG9jdW1lbnRfZml4dHVyZV9zZXR1cCwKKyAg
ICAgICAgICAgICAgIHRlc3RfZG9tX2RvY3VtZW50X2dhcmJhZ2VfY29sbGVjdGlvbiwKKyAgICAg
ICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKTsKKworICAgIHJldHVybiBn
X3Rlc3RfcnVuKCk7Cit9CisKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0R3RrL3Rlc3Rkb21kb213aW5kb3cuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0R3RrL3Rlc3Rkb21kb213aW5kb3cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4xNGZjZDE4Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRHdGsvdGVzdGRvbWRvbXdpbmRvdy5jCkBAIC0wLDAgKzEsMjU4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJ0ZXN0X3V0aWxzLmgiCisKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z2xp
Yi9nc3RkaW8uaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtp
dC5oPgorCisjZGVmaW5lIEhUTUxfRE9DVU1FTlQgIjxodG1sPjxoZWFkPjx0aXRsZT48L3RpdGxl
PjwvaGVhZD48c3R5bGUgdHlwZT0ndGV4dC9jc3MnPiN0ZXN0IHsgZm9udC1zaXplOiAxNnB4OyB9
PC9zdHlsZT48Ym9keT48cCBpZD0ndGVzdCc+dGVzdDwvcD48L2JvZHk+PC9odG1sPiIKKwordHlw
ZWRlZiBzdHJ1Y3QgeworICAgIEd0a1dpZGdldCogd2ViVmlldzsKKyAgICBHdGtXaWRnZXQqIHdp
bmRvdzsKKyAgICBXZWJLaXRET01ET01XaW5kb3cqIGRvbVdpbmRvdzsKKyAgICBHTWFpbkxvb3Aq
IGxvb3A7CisKKyAgICBnYm9vbGVhbiBsb2FkZWQ7CisgICAgZ2Jvb2xlYW4gY2xpY2tlZDsKKyAg
ICBnY29uc3Rwb2ludGVyIGRhdGE7Cit9IERvbURvbXZpZXdGaXh0dXJlOworCitzdGF0aWMgZ2Jv
b2xlYW4gZmluaXNoX2xvYWRpbmcoRG9tRG9tdmlld0ZpeHR1cmUqIGZpeHR1cmUpCit7CisgICAg
aWYgKGdfbWFpbl9sb29wX2lzX3J1bm5pbmcoZml4dHVyZS0+bG9vcCkpCisgICAgICAgIGdfbWFp
bl9sb29wX3F1aXQoZml4dHVyZS0+bG9vcCk7CisKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0
YXRpYyB2b2lkIGRvbV9kb212aWV3X2ZpeHR1cmVfc2V0dXAoRG9tRG9tdmlld0ZpeHR1cmUqIGZp
eHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBmaXh0dXJlLT5sb29wID0gZ19tYWlu
X2xvb3BfbmV3KE5VTEwsIFRSVUUpOworICAgIGZpeHR1cmUtPndpbmRvdyA9IGd0a193aW5kb3df
bmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOworICAgIGZpeHR1cmUtPndlYlZpZXcgPSB3ZWJraXRf
d2ViX3ZpZXdfbmV3KCk7CisgICAgZml4dHVyZS0+ZGF0YSA9IGRhdGE7CisKKyAgICBndGtfY29u
dGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGZpeHR1cmUtPndpbmRvdyksIEdUS19XSURHRVQoZml4
dHVyZS0+d2ViVmlldykpOworfQorCitzdGF0aWMgdm9pZCBkb21fZG9tdmlld19maXh0dXJlX3Rl
YXJkb3duKERvbURvbXZpZXdGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7
CisgICAgZ3RrX3dpZGdldF9kZXN0cm95KGZpeHR1cmUtPndpbmRvdyk7CisgICAgZ19tYWluX2xv
b3BfdW5yZWYoZml4dHVyZS0+bG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIGRvbV9kb21fd2luZG93
X2ZpeHR1cmVfc2V0dXAoRG9tRG9tdmlld0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIg
ZGF0YSkKK3sKKyAgICBmaXh0dXJlLT5sb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUp
OworICAgIGZpeHR1cmUtPndlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7CisgICAgZ19v
YmplY3RfcmVmX3NpbmsoZml4dHVyZS0+d2ViVmlldyk7CisKKyAgICBpZiAoZGF0YSAhPSBOVUxM
KQorICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVXIChm
aXh0dXJlLT53ZWJWaWV3KSwgKGNvbnN0IGNoYXIqKSBkYXRhLCBOVUxMLCBOVUxMLCBOVUxMKTsK
KworICAgIGdfaWRsZV9hZGQoKEdTb3VyY2VGdW5jKWZpbmlzaF9sb2FkaW5nLCBmaXh0dXJlKTsK
KyAgICBnX21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIGRv
bV9kb21fd2luZG93X2ZpeHR1cmVfdGVhcmRvd24oRG9tRG9tdmlld0ZpeHR1cmUqIGZpeHR1cmUs
IGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBpZiAoZml4dHVyZS0+d2ViVmlldykKKyAgICAg
ICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+d2ViVmlldyk7CisgICAgZ19tYWluX2xvb3BfdW5y
ZWYoZml4dHVyZS0+bG9vcCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBsb2FkZWRDYWxsYmFjayhX
ZWJLaXRET01ET01XaW5kb3cqIHZpZXcsIFdlYktpdERPTUV2ZW50KiBldmVudCwgRG9tRG9tdmll
d0ZpeHR1cmUqIGZpeHR1cmUpCit7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+bG9hZGVkID09IEZB
TFNFKTsKKyAgICBmaXh0dXJlLT5sb2FkZWQgPSBUUlVFOworCisgICAgcmV0dXJuIEZBTFNFOwor
fQorCitzdGF0aWMgZ2Jvb2xlYW4gY2xpY2tlZENhbGxiYWNrKFdlYktpdERPTURPTVdpbmRvdyog
dmlldywgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBEb21Eb212aWV3Rml4dHVyZSogZml4dHVyZSkK
K3sKKyAgICBXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0OworICAgIGd1c2hvcnQgcGhhc2U7
CisKKyAgICBnX2Fzc2VydChldmVudCk7CisgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19FVkVO
VChldmVudCkpOworCisgICAgLy8gV2Ugc2hvdWxkIGNhdGNoIHRoaXMgaW4gdGhlIGJ1YmJsaW5n
IHVwIHBoYXNlLCBzaW5jZSB3ZSBhcmUgY29ubmVjdGluZyB0byB0aGUgdG9wbGV2ZWwgb2JqZWN0
CisgICAgcGhhc2UgPSB3ZWJraXRfZG9tX2V2ZW50X2dldF9ldmVudF9waGFzZShldmVudCk7Cisg
ICAgZ19hc3NlcnRfY21waW50KHBoYXNlLCA9PSwgMyk7CisKKyAgICB0YXJnZXQgPSB3ZWJraXRf
ZG9tX2V2ZW50X2dldF9jdXJyZW50X3RhcmdldChldmVudCk7CisgICAgZ19hc3NlcnQodGFyZ2V0
ID09IFdFQktJVF9ET01fRVZFTlRfVEFSR0VUKHZpZXcpKTsKKworICAgIGdfYXNzZXJ0KGZpeHR1
cmUtPmNsaWNrZWQgPT0gRkFMU0UpOworICAgIGZpeHR1cmUtPmNsaWNrZWQgPSBUUlVFOworCisg
ICAgZmluaXNoX2xvYWRpbmcoZml4dHVyZSk7CisKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK2di
b29sZWFuIG1hcF9ldmVudF9jYihHdGtXaWRnZXQgKndpZGdldCwgR2RrRXZlbnQqIGV2ZW50LCBE
b21Eb212aWV3Rml4dHVyZSogZml4dHVyZSkKK3sKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9z
dHJpbmcoV0VCS0lUX1dFQl9WSUVXIChmaXh0dXJlLT53ZWJWaWV3KSwgKGNvbnN0IGNoYXIqKWZp
eHR1cmUtPmRhdGEsIE5VTEwsIE5VTEwsIE5VTEwpOworCisgICAgcmV0dXJuIEZBTFNFOworfQor
CitzdGF0aWMgdm9pZCBsb2FkX2V2ZW50X2NhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcs
IEdQYXJhbVNwZWMqIHNwZWMsIERvbURvbXZpZXdGaXh0dXJlKiBmaXh0dXJlKQoreworICAgIFdl
YktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh3
ZWJWaWV3KTsKKyAgICBpZiAoc3RhdHVzID09IFdFQktJVF9MT0FEX0ZJTklTSEVEKSB7CisgICAg
ICAgIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2FkZF9ldmVudF9saXN0ZW5lcihXRUJLSVRfRE9N
X0VWRU5UX1RBUkdFVChmaXh0dXJlLT5kb21XaW5kb3cpLCAiY2xpY2siLCBHX0NBTExCQUNLKGNs
aWNrZWRDYWxsYmFjayksIGZhbHNlLCBmaXh0dXJlKTsKKworICAgICAgICBnX2Fzc2VydChmaXh0
dXJlLT5jbGlja2VkID09IEZBTFNFKTsKKyAgICAgICAgZ3RrX3Rlc3Rfd2lkZ2V0X2NsaWNrKEdU
S19XSURHRVQoZml4dHVyZS0+d2ViVmlldyksIDEsIDApOworICAgIH0KKworfQorCitzdGF0aWMg
dm9pZCB0ZXN0X2RvbV9kb212aWV3X3NpZ25hbHMoRG9tRG9tdmlld0ZpeHR1cmUqIGZpeHR1cmUs
IGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBnX2Fzc2VydChmaXh0dXJlKTsKKyAgICBXZWJL
aXRXZWJWaWV3KiB2aWV3ID0gKFdlYktpdFdlYlZpZXcqKWZpeHR1cmUtPndlYlZpZXc7CisgICAg
Z19hc3NlcnQodmlldyk7CisgICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50ID0gd2Via2l0
X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQodmlldyk7CisgICAgZ19hc3NlcnQoZG9jdW1lbnQp
OworICAgIFdlYktpdERPTURPTVdpbmRvdyogZG9tV2luZG93ID0gd2Via2l0X2RvbV9kb2N1bWVu
dF9nZXRfZGVmYXVsdF92aWV3KGRvY3VtZW50KTsKKyAgICBnX2Fzc2VydChkb21XaW5kb3cpOwor
CisgICAgZml4dHVyZS0+ZG9tV2luZG93ID0gZG9tV2luZG93OworCisgICAgd2Via2l0X2RvbV9l
dmVudF90YXJnZXRfYWRkX2V2ZW50X2xpc3RlbmVyKFdFQktJVF9ET01fRVZFTlRfVEFSR0VUKGZp
eHR1cmUtPmRvbVdpbmRvdyksICJsb2FkIiwgR19DQUxMQkFDSyhsb2FkZWRDYWxsYmFjayksIGZh
bHNlLCBmaXh0dXJlKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndpbmRvdywgIm1h
cC1ldmVudCIsIEdfQ0FMTEJBQ0sobWFwX2V2ZW50X2NiKSwgZml4dHVyZSk7CisgICAgZ19zaWdu
YWxfY29ubmVjdChmaXh0dXJlLT53ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FM
TEJBQ0sobG9hZF9ldmVudF9jYWxsYmFjayksIGZpeHR1cmUpOworCisgICAgZ3RrX3dpZGdldF9z
aG93X2FsbChmaXh0dXJlLT53aW5kb3cpOworICAgIGd0a193aW5kb3dfcHJlc2VudChHVEtfV0lO
RE9XKGZpeHR1cmUtPndpbmRvdykpOworCisgICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1cmUtPmxv
b3ApOworCisgICAgZ19hc3NlcnQoZml4dHVyZS0+bG9hZGVkKTsKKyAgICBnX2Fzc2VydChmaXh0
dXJlLT5jbGlja2VkKTsKK30KKworc3RhdGljIGdib29sZWFuCitjbGlja2VkX2NiKFdlYktpdERP
TUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgRG9tRG9tdmlld0Zp
eHR1cmUqIGZpeHR1cmUpCit7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+Y2xpY2tlZCA9PSBGQUxT
RSk7CisgICAgZml4dHVyZS0+Y2xpY2tlZCA9IFRSVUU7CisgICAgZmluaXNoX2xvYWRpbmcoZml4
dHVyZSk7CisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZCBsb2FkX3N0YXR1c19j
YWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHUGFyYW1TcGVjKiBzcGVjLCBEb21Eb212
aWV3Rml4dHVyZSogZml4dHVyZSkKK3sKKyAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdl
YmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMod2ViVmlldyk7CisgICAgaWYgKHN0YXR1cyA9
PSBXRUJLSVRfTE9BRF9GSU5JU0hFRCkgeworICAgICAgICBXZWJLaXRET01Eb2N1bWVudCogZG9j
dW1lbnQ7CisgICAgICAgIFdlYktpdERPTURPTVdpbmRvdyogZG9tV2luZG93OworICAgICAgICBX
ZWJLaXRET01FbGVtZW50KiBlbGVtZW50OworICAgICAgICBXZWJLaXRET01FdmVudCogZXZlbnQ7
CisgICAgICAgIGdsb25nIGNsaWVudFgsIGNsaWVudFk7CisKKyAgICAgICAgZG9jdW1lbnQgPSB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudChXRUJLSVRfV0VCX1ZJRVcoZml4dHVyZS0+
d2ViVmlldykpOworICAgICAgICBnX2Fzc2VydChkb2N1bWVudCk7CisgICAgICAgIGRvbVdpbmRv
dyA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2RlZmF1bHRfdmlldyhkb2N1bWVudCk7CisgICAg
ICAgIGdfYXNzZXJ0KGRvbVdpbmRvdyk7CisgICAgICAgIGZpeHR1cmUtPmRvbVdpbmRvdyA9IGRv
bVdpbmRvdzsKKworICAgICAgICBlbGVtZW50ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxl
bWVudF9ieV9pZChkb2N1bWVudCwgInRlc3QiKTsKKyAgICAgICAgZ19hc3NlcnQoZWxlbWVudCk7
CisgICAgICAgIGV2ZW50ID0gd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZXZlbnQoZG9jdW1l
bnQsICJNb3VzZUV2ZW50IiwgTlVMTCk7CisgICAgICAgIGdfYXNzZXJ0KGV2ZW50KTsKKyAgICAg
ICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19FVkVOVChldmVudCkpOworICAgICAgICBnX2Fzc2Vy
dChXRUJLSVRfRE9NX0lTX01PVVNFX0VWRU5UKGV2ZW50KSk7CisgICAgICAgIGNsaWVudFggPSB3
ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2NsaWVudF9sZWZ0KGVsZW1lbnQpOworICAgICAgICBjbGll
bnRZID0gd2Via2l0X2RvbV9lbGVtZW50X2dldF9jbGllbnRfdG9wKGVsZW1lbnQpOworICAgICAg
ICB3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2luaXRfbW91c2VfZXZlbnQoV0VCS0lUX0RPTV9NT1VT
RV9FVkVOVChldmVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiY2xpY2siLCBUUlVFLCBUUlVFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZml4dHVyZS0+ZG9tV2luZG93LCAwLCAwLCAwLCBjbGllbnRY
LCBjbGllbnRZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRkFMU0UsIEZBTFNFLCBGQUxTRSwgRkFMU0UsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAxLCBXRUJLSVRfRE9NX0VWRU5UX1RBUkdFVChlbGVtZW50
KSk7CisgICAgICAgIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2FkZF9ldmVudF9saXN0ZW5lcihX
RUJLSVRfRE9NX0VWRU5UX1RBUkdFVChlbGVtZW50KSwgImNsaWNrIiwgR19DQUxMQkFDSyhjbGlj
a2VkX2NiKSwgZmFsc2UsIGZpeHR1cmUpOworICAgICAgICBnX2Fzc2VydChmaXh0dXJlLT5jbGlj
a2VkID09IEZBTFNFKTsKKyAgICAgICAgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfZGlzcGF0Y2hf
ZXZlbnQoV0VCS0lUX0RPTV9FVkVOVF9UQVJHRVQoZWxlbWVudCksIGV2ZW50LCBOVUxMKTsKKyAg
ICB9CisKK30KKworc3RhdGljIHZvaWQgdGVzdF9kb21fZG9tdmlld19kaXNwYXRjaF9ldmVudChE
b21Eb212aWV3Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGdf
c2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2luZG93LCAibWFwLWV2ZW50IiwgR19DQUxMQkFDSyht
YXBfZXZlbnRfY2IpLCBmaXh0dXJlKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndl
YlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhsb2FkX3N0YXR1c19jYWxs
YmFjayksIGZpeHR1cmUpOworCisgICAgZ3RrX3dpZGdldF9zaG93X2FsbChmaXh0dXJlLT53aW5k
b3cpOworICAgIGd0a193aW5kb3dfcHJlc2VudChHVEtfV0lORE9XKGZpeHR1cmUtPndpbmRvdykp
OworCisgICAgZ19tYWluX2xvb3BfcnVuIChmaXh0dXJlLT5sb29wKTsKKyAgICBnX2Fzc2VydChm
aXh0dXJlLT5jbGlja2VkKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9kb21fZG9tX3dpbmRvd19n
ZXRfY29tcHV0ZWRfc3R5bGUoRG9tRG9tdmlld0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50
ZXIgZGF0YSkKK3sKKyAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X2RvbV9kb2N1bWVudChXRUJLSVRfV0VCX1ZJRVcoZml4dHVyZS0+d2ViVmlldykp
OworICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsKKyAgICBXZWJLaXRET01ET01XaW5kb3cqIGRvbVdp
bmRvdyA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2RlZmF1bHRfdmlldyhkb2N1bWVudCk7Cisg
ICAgZ19hc3NlcnQoZG9tV2luZG93KTsKKworICAgIFdlYktpdERPTUVsZW1lbnQqICBlbGVtZW50
ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudF9ieV9pZChkb2N1bWVudCwgInRlc3Qi
KTsKKyAgICBnX2Fzc2VydChlbGVtZW50KTsKKyAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0VM
RU1FTlQoZWxlbWVudCkpOworICAgIFdlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24qIGNzc1N0
eWxlID0gd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9jb21wdXRlZF9zdHlsZShkb21XaW5kb3cs
IGVsZW1lbnQsIE5VTEwpOworICAgIGdjaGFyKiBmb250U2l6ZSA9IHdlYmtpdF9kb21fY3NzX3N0
eWxlX2RlY2xhcmF0aW9uX2dldF9wcm9wZXJ0eV92YWx1ZShjc3NTdHlsZSwgImZvbnQtc2l6ZSIp
OworICAgIGdfYXNzZXJ0X2NtcHN0cihmb250U2l6ZSwgPT0sICIxNnB4Iik7Cit9CisKK2ludCBt
YWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAm
YXJndiwgTlVMTCk7CisKKyAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQu
b3JnLyIpOworCisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9kb21kb212aWV3L3NpZ25hbHMiLAor
ICAgICAgICAgICAgICAgRG9tRG9tdmlld0ZpeHR1cmUsIEhUTUxfRE9DVU1FTlQsCisgICAgICAg
ICAgICAgICBkb21fZG9tdmlld19maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF9k
b21fZG9tdmlld19zaWduYWxzLAorICAgICAgICAgICAgICAgZG9tX2RvbXZpZXdfZml4dHVyZV90
ZWFyZG93bik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2RvbWRvbXZpZXcvZGlzcGF0Y2hf
ZXZlbnQiLAorICAgICAgICAgICAgICAgRG9tRG9tdmlld0ZpeHR1cmUsIEhUTUxfRE9DVU1FTlQs
CisgICAgICAgICAgICAgICBkb21fZG9tdmlld19maXh0dXJlX3NldHVwLAorICAgICAgICAgICAg
ICAgdGVzdF9kb21fZG9tdmlld19kaXNwYXRjaF9ldmVudCwKKyAgICAgICAgICAgICAgIGRvbV9k
b212aWV3X2ZpeHR1cmVfdGVhcmRvd24pOworCisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9kb21k
b213aW5kb3cvZ2V0X2NvbXB1dGVkX3N0eWxlIiwKKyAgICAgICAgICAgICAgIERvbURvbXZpZXdG
aXh0dXJlLCBIVE1MX0RPQ1VNRU5ULAorICAgICAgICAgICAgICAgZG9tX2RvbV93aW5kb3dfZml4
dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3RfZG9tX2RvbV93aW5kb3dfZ2V0X2NvbXB1
dGVkX3N0eWxlLAorICAgICAgICAgICAgICAgZG9tX2RvbV93aW5kb3dfZml4dHVyZV90ZWFyZG93
bik7CisKKyAgICByZXR1cm4gZ190ZXN0X3J1bigpOworfQorCmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0ZG9tbm9kZS5jIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGRvbW5vZGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5lZDRiY2JkCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGRvbW5vZGUuYwpAQCAtMCwwICsxLDIxOSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAidGVzdF91dGlscy5oIgorCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUg
PGdsaWIvZ3N0ZGlvLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdC93
ZWJraXQuaD4KKworI2RlZmluZSBIVE1MX0RPQ1VNRU5UX0hJRVJBUkNIWV9OQVZJR0FUSU9OICI8
aHRtbD48aGVhZD48dGl0bGU+VGhpcyBpcyB0aGUgdGl0bGU8L3RpdGxlPjwvaGVhZD48Ym9keT48
cD4xPC9wPjxwPjI8L3A+PHA+MzwvcD48L2JvZHk+PC9odG1sPiIKKyNkZWZpbmUgSFRNTF9ET0NV
TUVOVF9OT0RFX0lOU0VSVElPTiAiPGh0bWw+PGJvZHk+PC9ib2R5PjwvaHRtbD4iCisKK3R5cGVk
ZWYgc3RydWN0IHsKKyAgICBHdGtXaWRnZXQqIHdlYlZpZXc7CisgICAgR01haW5Mb29wKiBsb29w
OworfSBEb21Ob2RlRml4dHVyZTsKKworc3RhdGljIGdib29sZWFuIGZpbmlzaF9sb2FkaW5nKERv
bU5vZGVGaXh0dXJlKiBmaXh0dXJlKQoreworICAgIGlmIChnX21haW5fbG9vcF9pc19ydW5uaW5n
KGZpeHR1cmUtPmxvb3ApKQorICAgICAgICBnX21haW5fbG9vcF9xdWl0KGZpeHR1cmUtPmxvb3Ap
OworCisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZCBkb21fbm9kZV9maXh0dXJl
X3NldHVwKERvbU5vZGVGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7Cisg
ICAgZml4dHVyZS0+bG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKKyAgICBmaXh0
dXJlLT53ZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygpOworICAgIGdfb2JqZWN0X3JlZl9z
aW5rKGZpeHR1cmUtPndlYlZpZXcpOworCisgICAgaWYgKGRhdGEgIT0gTlVMTCkKKyAgICAgICAg
d2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklFVyhmaXh0dXJlLT53ZWJW
aWV3KSwgKGNvbnN0IGNoYXIqKWRhdGEsIE5VTEwsIE5VTEwsIE5VTEwpOworCisgICAgZ19pZGxl
X2FkZCgoR1NvdXJjZUZ1bmMpZmluaXNoX2xvYWRpbmcsIGZpeHR1cmUpOworICAgIGdfbWFpbl9s
b29wX3J1bihmaXh0dXJlLT5sb29wKTsKK30KKworc3RhdGljIHZvaWQgZG9tX25vZGVfZml4dHVy
ZV90ZWFyZG93bihEb21Ob2RlRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQor
eworICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPndlYlZpZXcpOworICAgIGdfbWFpbl9sb29w
X3VucmVmKGZpeHR1cmUtPmxvb3ApOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2RvbV9ub2RlX2hp
ZXJhcmNoeV9uYXZpZ2F0aW9uKERvbU5vZGVGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVy
IGRhdGEpCit7CisgICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50OworICAgIFdlYktpdERP
TUhUTUxIZWFkRWxlbWVudCogaGVhZDsKKyAgICBXZWJLaXRET01IVE1MQm9keUVsZW1lbnQqIGJv
ZHk7CisgICAgV2ViS2l0RE9NTm9kZUxpc3QqIGxpc3Q7CisgICAgV2ViS2l0RE9NTm9kZSogcHRy
OworICAgIGd1bG9uZyBpLCBsZW5ndGg7CisKKyAgICBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmll
d19nZXRfZG9tX2RvY3VtZW50KFdFQktJVF9XRUJfVklFVyhmaXh0dXJlLT53ZWJWaWV3KSk7Cisg
ICAgZ19hc3NlcnQoZG9jdW1lbnQpOworICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfRE9DVU1F
TlQoZG9jdW1lbnQpKTsKKyAgICBoZWFkID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfaGVhZChk
b2N1bWVudCk7CisgICAgZ19hc3NlcnQoaGVhZCk7CisgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9J
U19IVE1MX0hFQURfRUxFTUVOVChoZWFkKSk7CisKKyAgICAvKiBUaXRsZSwgaGVhZCdzIGNoaWxk
ICovCisgICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2hhc19jaGlsZF9ub2RlcyhXRUJLSVRf
RE9NX05PREUoaGVhZCkpKTsKKyAgICBsaXN0ID0gd2Via2l0X2RvbV9ub2RlX2dldF9jaGlsZF9u
b2RlcyhXRUJLSVRfRE9NX05PREUoaGVhZCkpOworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRf
ZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QpLCA9PSwgMSk7CisgICAgcHRyID0gd2Via2l0
X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0LCAwKTsKKyAgICBnX2Fzc2VydChwdHIpOworICAgIGdf
YXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9USVRMRV9FTEVNRU5UKHB0cikpOworICAgIGdfb2Jq
ZWN0X3VucmVmKGxpc3QpOworCisgICAgLyogQm9keSwgSGVhZCBzaWJsaW5nICovCisgICAgcHRy
ID0gd2Via2l0X2RvbV9ub2RlX2dldF9uZXh0X3NpYmxpbmcoV0VCS0lUX0RPTV9OT0RFKGhlYWQp
KTsKKyAgICBnX2Fzc2VydChwdHIpOworICAgIGJvZHkgPSBXRUJLSVRfRE9NX0hUTUxfQk9EWV9F
TEVNRU5UKHB0cik7CisgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0JPRFlfRUxFTUVO
VChib2R5KSk7CisKKyAgICAvKiBUaGVyZSBpcyBubyB0aGlyZCBzaWJsaW5nICovCisgICAgcHRy
ID0gd2Via2l0X2RvbV9ub2RlX2dldF9uZXh0X3NpYmxpbmcocHRyKTsKKyAgICBnX2Fzc2VydChw
dHIgPT0gTlVMTCk7CisKKyAgICAvKiBCb2R5J3MgcHJldmlvdXMgc2libGluZyBpcyBIZWFkICov
CisgICAgcHRyID0gd2Via2l0X2RvbV9ub2RlX2dldF9wcmV2aW91c19zaWJsaW5nKFdFQktJVF9E
T01fTk9ERShib2R5KSk7CisgICAgZ19hc3NlcnQocHRyKTsKKyAgICBnX2Fzc2VydChXRUJLSVRf
RE9NX0lTX0hUTUxfSEVBRF9FTEVNRU5UKHB0cikpOworCisgICAgLyogQm9keSBoYXMgMyBjaGls
ZHJlbiAqLworICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9oYXNfY2hpbGRfbm9kZXMoV0VC
S0lUX0RPTV9OT0RFKGJvZHkpKSk7CisgICAgbGlzdCA9IHdlYmtpdF9kb21fbm9kZV9nZXRfY2hp
bGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKTsKKyAgICBsZW5ndGggPSB3ZWJraXRfZG9t
X25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QpOworICAgIGdfYXNzZXJ0X2NtcGludChsZW5ndGgs
ID09LCAzKTsKKworICAgIC8qIFRoZSB0aHJlZSBvZiB0aGVtIGFyZSBQIHRhZ3MgKi8KKyAgICBm
b3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgcHRyID0gd2Via2l0X2RvbV9u
b2RlX2xpc3RfaXRlbShsaXN0LCBpKTsKKyAgICAgICAgZ19hc3NlcnQocHRyKTsKKyAgICAgICAg
Z19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX1BBUkFHUkFQSF9FTEVNRU5UKHB0cikpOworICAg
IH0KKworICAgIC8qIEdvIGJhY2t3YXJkcyAqLworICAgIGZvciAoaSA9IDA7IHB0cjsgcHRyID0g
d2Via2l0X2RvbV9ub2RlX2dldF9wcmV2aW91c19zaWJsaW5nKHB0ciksIGkrKykKKyAgICAgICAg
LyogTm90aGluZyAqLzsKKworICAgIGdfYXNzZXJ0X2NtcGludChpLCA9PSwgMyk7CisgICAgZ19v
YmplY3RfdW5yZWYobGlzdCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfZG9tX25vZGVfaW5zZXJ0
aW9uKERvbU5vZGVGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAg
V2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50OworICAgIFdlYktpdERPTUhUTUxFbGVtZW50KiBi
b2R5OworICAgIFdlYktpdERPTUVsZW1lbnQqIHAsICpkaXY7CisgICAgV2ViS2l0RE9NTm9kZUxp
c3QqIGxpc3Q7CisgICAgV2ViS2l0RE9NTm9kZSogbm9kZTsKKworICAgIGRvY3VtZW50ID0gd2Vi
a2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQoV0VCS0lUX1dFQl9WSUVXKGZpeHR1cmUtPndl
YlZpZXcpKTsKKyAgICBnX2Fzc2VydChkb2N1bWVudCk7CisgICAgYm9keSA9IHdlYmtpdF9kb21f
ZG9jdW1lbnRfZ2V0X2JvZHkoZG9jdW1lbnQpOworICAgIGdfYXNzZXJ0KGJvZHkpOworICAgIGdf
YXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKGJvZHkpKTsKKworICAgIC8qIEJvZHkg
c2hvdWxkbid0IGhhdmUgYW55IGNoaWxkcmVuIGF0IHRoaXMgcG9pbnQgKi8KKyAgICBnX2Fzc2Vy
dCh3ZWJraXRfZG9tX25vZGVfaGFzX2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSkg
PT0gRkFMU0UpOworCisgICAgLyogSW5zZXJ0IG9uZSBQIGVsZW1lbnQgKi8KKyAgICBwID0gd2Vi
a2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZWxlbWVudChkb2N1bWVudCwgIlAiLCBOVUxMKTsKKyAg
ICB3ZWJraXRfZG9tX25vZGVfYXBwZW5kX2NoaWxkKFdFQktJVF9ET01fTk9ERShib2R5KSwgV0VC
S0lUX0RPTV9OT0RFKHApLCBOVUxMKTsKKworICAgIC8qIE5vdyBpdCBzaG91bGQgaGF2ZSBvbmUs
IHRoZSBzYW1lIHRoYXQgd2UgaW5zZXJ0ZWQgKi8KKyAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25v
ZGVfaGFzX2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSkpOworICAgIGxpc3QgPSB3
ZWJraXRfZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSk7Cisg
ICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9kb21fbm9kZV9saXN0X2dldF9sZW5ndGgobGlzdCks
ID09LCAxKTsKKyAgICBub2RlID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0LCAwKTsK
KyAgICBnX2Fzc2VydChub2RlKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaXNfc2Ft
ZV9ub2RlKFdFQktJVF9ET01fTk9ERShwKSwgbm9kZSkpOworICAgIGdfb2JqZWN0X3VucmVmKGxp
c3QpOworCisgICAgLyogUmVwbGFjZSB0aGUgUCB0YWcgd2l0aCBhIERJViB0YWcgKi8KKyAgICBk
aXYgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9lbGVtZW50KGRvY3VtZW50LCAiRElWIiwg
TlVMTCk7CisgICAgd2Via2l0X2RvbV9ub2RlX3JlcGxhY2VfY2hpbGQoV0VCS0lUX0RPTV9OT0RF
KGJvZHkpLCBXRUJLSVRfRE9NX05PREUoZGl2KSwgV0VCS0lUX0RPTV9OT0RFKHApLCBOVUxMKTsK
KyAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaGFzX2NoaWxkX25vZGVzKFdFQktJVF9ET01f
Tk9ERShib2R5KSkpOworICAgIGxpc3QgPSB3ZWJraXRfZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVz
KFdFQktJVF9ET01fTk9ERShib2R5KSk7CisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9kb21f
bm9kZV9saXN0X2dldF9sZW5ndGgobGlzdCksID09LCAxKTsKKyAgICBub2RlID0gd2Via2l0X2Rv
bV9ub2RlX2xpc3RfaXRlbShsaXN0LCAwKTsKKyAgICBnX2Fzc2VydChub2RlKTsKKyAgICBnX2Fz
c2VydCh3ZWJraXRfZG9tX25vZGVfaXNfc2FtZV9ub2RlKFdFQktJVF9ET01fTk9ERShkaXYpLCBu
b2RlKSk7CisgICAgZ19vYmplY3RfdW5yZWYobGlzdCk7CisKKyAgICAvKiBOb3cgcmVtb3ZlIHRo
ZSB0YWcgKi8KKyAgICB3ZWJraXRfZG9tX25vZGVfcmVtb3ZlX2NoaWxkKFdFQktJVF9ET01fTk9E
RShib2R5KSwgbm9kZSwgTlVMTCk7CisgICAgbGlzdCA9IHdlYmtpdF9kb21fbm9kZV9nZXRfY2hp
bGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Vi
a2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChsaXN0KSwgPT0sIDApOworICAgIGdfb2JqZWN0
X3VucmVmKGxpc3QpOworCisgICAgLyogVGVzdCBpbnNlcnRfYmVmb3JlICovCisKKyAgICAvKiBJ
ZiByZWZDaGlsZCBpcyBudWxsLCBpbnNlcnQgbmV3Q2hpbGQgYXMgbGFzdCBlbGVtZW50IG9mIHBh
cmVudCAqLworICAgIGRpdiA9IHdlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2VsZW1lbnQoZG9j
dW1lbnQsICJESVYiLCBOVUxMKTsKKyAgICB3ZWJraXRfZG9tX25vZGVfaW5zZXJ0X2JlZm9yZShX
RUJLSVRfRE9NX05PREUoYm9keSksIFdFQktJVF9ET01fTk9ERShkaXYpLCBOVUxMLCBOVUxMKTsK
KyAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaGFzX2NoaWxkX25vZGVzKFdFQktJVF9ET01f
Tk9ERShib2R5KSkpOworICAgIGxpc3QgPSB3ZWJraXRfZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVz
KFdFQktJVF9ET01fTk9ERShib2R5KSk7CisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9kb21f
bm9kZV9saXN0X2dldF9sZW5ndGgobGlzdCksID09LCAxKTsKKyAgICBub2RlID0gd2Via2l0X2Rv
bV9ub2RlX2xpc3RfaXRlbShsaXN0LCAwKTsKKyAgICBnX2Fzc2VydChub2RlKTsKKyAgICBnX2Fz
c2VydCh3ZWJraXRfZG9tX25vZGVfaXNfc2FtZV9ub2RlKFdFQktJVF9ET01fTk9ERShkaXYpLCBu
b2RlKSk7CisgICAgZ19vYmplY3RfdW5yZWYobGlzdCk7CisKKyAgICAvKiBOb3cgaW5zZXJ0IGEg
J3AnIGJlZm9yZSAnZGl2JyAqLworICAgIHAgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9l
bGVtZW50KGRvY3VtZW50LCAiUCIsIE5VTEwpOworICAgIHdlYmtpdF9kb21fbm9kZV9pbnNlcnRf
YmVmb3JlKFdFQktJVF9ET01fTk9ERShib2R5KSwgV0VCS0lUX0RPTV9OT0RFKHApLCBXRUJLSVRf
RE9NX05PREUoZGl2KSwgTlVMTCk7CisgICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2hhc19j
aGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpKTsKKyAgICBsaXN0ID0gd2Via2l0X2Rv
bV9ub2RlX2dldF9jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpOworICAgIGdfYXNz
ZXJ0X2NtcGludCh3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QpLCA9PSwgMik7
CisgICAgbm9kZSA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdCwgMCk7CisgICAgZ19h
c3NlcnQobm9kZSk7CisgICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2lzX3NhbWVfbm9kZShX
RUJLSVRfRE9NX05PREUocCksIG5vZGUpKTsKKyAgICBub2RlID0gd2Via2l0X2RvbV9ub2RlX2xp
c3RfaXRlbShsaXN0LCAxKTsKKyAgICBnX2Fzc2VydChub2RlKTsKKyAgICBnX2Fzc2VydCh3ZWJr
aXRfZG9tX25vZGVfaXNfc2FtZV9ub2RlKFdFQktJVF9ET01fTk9ERShkaXYpLCBub2RlKSk7Cisg
ICAgZ19vYmplY3RfdW5yZWYobGlzdCk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiog
YXJndikKK3sKKyAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7CisKKyAgICBn
X3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOworCisgICAgZ190ZXN0
X2FkZCgiL3dlYmtpdC9kb21ub2RlL3Rlc3RfaGllcmFyY2h5X25hdmlnYXRpb24iLAorICAgICAg
ICAgICAgICAgRG9tTm9kZUZpeHR1cmUsIEhUTUxfRE9DVU1FTlRfSElFUkFSQ0hZX05BVklHQVRJ
T04sCisgICAgICAgICAgICAgICBkb21fbm9kZV9maXh0dXJlX3NldHVwLAorICAgICAgICAgICAg
ICAgdGVzdF9kb21fbm9kZV9oaWVyYXJjaHlfbmF2aWdhdGlvbiwKKyAgICAgICAgICAgICAgIGRv
bV9ub2RlX2ZpeHR1cmVfdGVhcmRvd24pOworCisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9kb21u
b2RlL3Rlc3RfaW5zZXJ0aW9uIiwKKyAgICAgICAgICAgICAgIERvbU5vZGVGaXh0dXJlLCBIVE1M
X0RPQ1VNRU5UX05PREVfSU5TRVJUSU9OLAorICAgICAgICAgICAgICAgZG9tX25vZGVfZml4dHVy
ZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3RfZG9tX25vZGVfaW5zZXJ0aW9uLAorICAgICAg
ICAgICAgICAgZG9tX25vZGVfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICByZXR1cm4gZ190ZXN0
X3J1bigpOworfQorCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dEd0ay90ZXN0ZG93bmxvYWQuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3Rr
L3Rlc3Rkb3dubG9hZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ZThk
ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0
ay90ZXN0ZG93bmxvYWQuYwpAQCAtMCwwICsxLDMyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkB0d290b2FzdHMuZGU+CisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNs
dWRlIDxnbGliL2dzdGRpby5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKworR01haW5M
b29wKiBsb29wOworY2hhciogdGVtcG9yYXJ5RmlsZW5hbWUgPSBOVUxMOworV2ViS2l0RG93bmxv
YWQqIHRoZURvd25sb2FkID0gTlVMTDsKKworc3RhdGljIHZvaWQKK3Rlc3Rfd2Via2l0X2Rvd25s
b2FkX2NyZWF0ZSh2b2lkKQoreworICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0Owor
ICAgIFdlYktpdERvd25sb2FkKiBkb3dubG9hZDsKKyAgICBjb25zdCBnY2hhciogdXJpID0gImh0
dHA6Ly9leGFtcGxlLmNvbSI7CisgICAgZ2NoYXIqIHRtcERpcjsKKworICAgIHJlcXVlc3QgPSB3
ZWJraXRfbmV0d29ya19yZXF1ZXN0X25ldyh1cmkpOworICAgIGRvd25sb2FkID0gd2Via2l0X2Rv
d25sb2FkX25ldyhyZXF1ZXN0KTsKKyAgICBnX29iamVjdF91bnJlZihyZXF1ZXN0KTsKKyAgICBn
X2Fzc2VydF9jbXBzdHIod2Via2l0X2Rvd25sb2FkX2dldF91cmkoZG93bmxvYWQpLCA9PSwgdXJp
KTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfZG93bmxvYWRfZ2V0X25ldHdvcmtfcmVxdWVzdChkb3du
bG9hZCkgPT0gcmVxdWVzdCk7CisgICAgZ19hc3NlcnQoZ19zdHJyc3RyKHVyaSwgd2Via2l0X2Rv
d25sb2FkX2dldF9zdWdnZXN0ZWRfZmlsZW5hbWUoZG93bmxvYWQpKSk7CisgICAgZ19hc3NlcnQo
d2Via2l0X2Rvd25sb2FkX2dldF9zdGF0dXMoZG93bmxvYWQpID09IFdFQktJVF9ET1dOTE9BRF9T
VEFUVVNfQ1JFQVRFRCk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9kb3dubG9hZF9nZXRfdG90YWxf
c2l6ZShkb3dubG9hZCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG93bmxvYWRfZ2V0X2N1cnJl
bnRfc2l6ZShkb3dubG9hZCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG93bmxvYWRfZ2V0X3By
b2dyZXNzKGRvd25sb2FkKSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9kb3dubG9hZF9nZXRfZWxh
cHNlZF90aW1lKGRvd25sb2FkKSk7CisgICAgdG1wRGlyID0gZ19maWxlbmFtZV90b191cmkoZ19n
ZXRfdG1wX2RpcigpLCBOVUxMLCBOVUxMKTsKKyAgICB3ZWJraXRfZG93bmxvYWRfc2V0X2Rlc3Rp
bmF0aW9uX3VyaShkb3dubG9hZCwgdG1wRGlyKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodG1wRGly
LCA9PSwgd2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbl91cmkoZG93bmxvYWQpKTs7Cisg
ICAgZ19mcmVlKHRtcERpcik7CisgICAgZ19vYmplY3RfdW5yZWYoZG93bmxvYWQpOworfQorCitz
dGF0aWMgZ2Jvb2xlYW4KK25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX3JlcXVlc3RlZF9jYihX
ZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBXZWJLaXRXZWJGcmFtZSogd2ViX2ZyYW1lLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFdlYk5hdmlnYXRpb25BY3Rp
b24qIGFjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJL
aXRXZWJQb2xpY3lEZWNpc2lvbiogZGVjaXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICB3ZWJraXRfd2ViX3BvbGljeV9k
ZWNpc2lvbl9kb3dubG9hZChkZWNpc2lvbik7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRp
YyB2b2lkCitub3RpZnlfc3RhdHVzX2NiKEdPYmplY3QqIG9iamVjdCwgR1BhcmFtU3BlYyogcHNw
ZWMsIGdwb2ludGVyIGRhdGEpCit7CisgICAgV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkID0gV0VC
S0lUX0RPV05MT0FEKG9iamVjdCk7CisgICAgc3dpdGNoICh3ZWJraXRfZG93bmxvYWRfZ2V0X3N0
YXR1cyhkb3dubG9hZCkpIHsKKyAgICBjYXNlIFdFQktJVF9ET1dOTE9BRF9TVEFUVVNfRklOSVNI
RUQ6CisgICAgY2FzZSBXRUJLSVRfRE9XTkxPQURfU1RBVFVTX0VSUk9SOgorICAgICAgICBnX21h
aW5fbG9vcF9xdWl0KGxvb3ApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9ET1dO
TE9BRF9TVEFUVVNfQ0FOQ0VMTEVEOgorICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisK
K3N0YXRpYyBnYm9vbGVhbgorc2V0X2ZpbGVuYW1lKGdjaGFyKiBmaWxlbmFtZSkKK3sKKyAgICBn
Y2hhciAqdXJpID0gZ19maWxlbmFtZV90b191cmkoZmlsZW5hbWUsIE5VTEwsIE5VTEwpOworCisg
ICAgd2Via2l0X2Rvd25sb2FkX3NldF9kZXN0aW5hdGlvbl91cmkodGhlRG93bmxvYWQsIHVyaSk7
CisgICAgZ19mcmVlKHVyaSk7CisKKyAgICB3ZWJraXRfZG93bmxvYWRfc3RhcnQodGhlRG93bmxv
YWQpOworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQKK2hhbmRsZV9kb3dubG9h
ZF9yZXF1ZXN0ZWRfY2IoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnYm9vbGVhbiogYmVlblRoZXJlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnYm9vbGVhbiBhc3luY2gpCit7CisgICAgdGhlRG93bmxvYWQgPSBkb3dubG9hZDsK
KyAgICAqYmVlblRoZXJlID0gVFJVRTsKKworICAgIGlmICh0ZW1wb3JhcnlGaWxlbmFtZSkgewor
ICAgICAgICBpZiAoYXN5bmNoKSB7CisgICAgICAgICAgICBnX2lkbGVfYWRkKChHU291cmNlRnVu
YylzZXRfZmlsZW5hbWUsIHRlbXBvcmFyeUZpbGVuYW1lKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGdjaGFyICp1cmkgPSBnX2ZpbGVuYW1lX3RvX3VyaSh0ZW1wb3JhcnlGaWxlbmFt
ZSwgTlVMTCwgTlVMTCk7CisgICAgICAgICAgICBpZiAodXJpKQorICAgICAgICAgICAgICAgIHdl
YmtpdF9kb3dubG9hZF9zZXRfZGVzdGluYXRpb25fdXJpKGRvd25sb2FkLCB1cmkpOworICAgICAg
ICAgICAgZ19mcmVlKHVyaSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBnX3NpZ25hbF9jb25u
ZWN0KGRvd25sb2FkLCAibm90aWZ5OjpzdGF0dXMiLAorICAgICAgICAgICAgICAgICAgICAgR19D
QUxMQkFDSyhub3RpZnlfc3RhdHVzX2NiKSwgTlVMTCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgor
ZG93bmxvYWRfcmVxdWVzdGVkX2NiKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LAorICAgICAgICAg
ICAgICAgICAgICAgIFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwKKyAgICAgICAgICAgICAgICAg
ICAgICBnYm9vbGVhbiogYmVlblRoZXJlKQoreworICAgIGhhbmRsZV9kb3dubG9hZF9yZXF1ZXN0
ZWRfY2IoZG93bmxvYWQsIGJlZW5UaGVyZSwgRkFMU0UpOworICAgIHJldHVybiBUUlVFOworfQor
CitzdGF0aWMgZ2Jvb2xlYW4KK2Rvd25sb2FkX3JlcXVlc3RlZF9hc3luY2hfY2IoV2ViS2l0V2Vi
Vmlldyogd2ViX3ZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdERvd25s
b2FkKiBkb3dubG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4qIGJl
ZW5UaGVyZSkKK3sKKyAgICBoYW5kbGVfZG93bmxvYWRfcmVxdWVzdGVkX2NiKGRvd25sb2FkLCBi
ZWVuVGhlcmUsIFRSVUUpOworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZAordGVz
dF93ZWJraXRfZG93bmxvYWRfcGVyZm9ybShnYm9vbGVhbiBhc3luY2gpCit7CisgICAgV2ViS2l0
V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkp
OworICAgIEdDYWxsYmFjayBkb3dubG9hZFJlcXVlc3RDYWxsYmFjayA9IE5VTEw7CisKKyAgICBn
X29iamVjdF9yZWZfc2luayhHX09CSkVDVCh3ZWJWaWV3KSk7CisKKyAgICBnX3NpZ25hbF9jb25u
ZWN0KHdlYlZpZXcsICJuYXZpZ2F0aW9uLXBvbGljeS1kZWNpc2lvbi1yZXF1ZXN0ZWQiLAorICAg
ICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhuYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9y
ZXF1ZXN0ZWRfY2IpLAorICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICBpZiAoYXN5
bmNoKQorICAgICAgICBkb3dubG9hZFJlcXVlc3RDYWxsYmFjayA9IEdfQ0FMTEJBQ0soZG93bmxv
YWRfcmVxdWVzdGVkX2FzeW5jaF9jYik7CisgICAgZWxzZQorICAgICAgICBkb3dubG9hZFJlcXVl
c3RDYWxsYmFjayA9IEdfQ0FMTEJBQ0soZG93bmxvYWRfcmVxdWVzdGVkX2NiKTsKKworICAgIGdi
b29sZWFuIGJlZW5UaGVyZSA9IEZBTFNFOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywg
ImRvd25sb2FkLXJlcXVlc3RlZCIsCisgICAgICAgICAgICAgICAgICAgICBkb3dubG9hZFJlcXVl
c3RDYWxsYmFjaywgJmJlZW5UaGVyZSk7CisKKyAgICAvKiBQcmVwYXJhdGlvbjsgRklYTUU6IHdl
IHNob3VsZCBtb3ZlIHRoaXMgY29kZSB0byBhIHRlc3QKKyAgICAgKiB1dGlsaXRpZXMgZmlsZSwg
YmVjYXVzZSB3ZSBoYXZlIGEgdmVyeSBzaW1pbGFyIG9uZSBpbgorICAgICAqIHRlc3R3ZWJmcmFt
ZS5jICovCisgICAgR0Vycm9yICplcnJvciA9IE5VTEw7CisgICAgZ2NoYXIqIGZpbGVuYW1lOwor
ICAgIGludCBmZCA9IGdfZmlsZV9vcGVuX3RtcCgid2Via2l0LXRlc3R3ZWJkb3dubG9hZC1YWFhY
WFgiLCAmZmlsZW5hbWUsICZlcnJvcik7CisgICAgY2xvc2UoZmQpOworCisgICAgaWYgKGVycm9y
KQorICAgICAgICBnX2NyaXRpY2FsKCJGYWlsZWQgdG8gb3BlbiBhIHRlbXBvcmFyeSBmaWxlIGZv
ciB3cml0aW5nOiAlcy4iLCBlcnJvci0+bWVzc2FnZSk7CisKKyAgICBpZiAoZ191bmxpbmsoZmls
ZW5hbWUpID09IC0xKQorICAgICAgICBnX2NyaXRpY2FsKCJGYWlsZWQgdG8gZGVsZXRlIHRoZSB0
ZW1wb3JhcnkgZmlsZTogJXMuIiwgZ19zdHJlcnJvcihlcnJubykpOworCisgICAgdGhlRG93bmxv
YWQgPSBOVUxMOworICAgIHRlbXBvcmFyeUZpbGVuYW1lID0gZmlsZW5hbWU7CisKKyAgICBsb29w
ID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2Fk
X3VyaSh3ZWJWaWV3LCAiaHR0cDovL2dub21lLm9yZy8iKTsKKyAgICBnX21haW5fbG9vcF9ydW4o
bG9vcCk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQoYmVlblRoZXJlLCA9PSwgVFJVRSk7CisKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoZ19maWxlX3Rlc3QodGVtcG9yYXJ5RmlsZW5hbWUsIEdfRklMRV9U
RVNUX0lTX1JFR1VMQVIpLCA9PSwgVFJVRSk7CisKKyAgICBnX3VubGluayh0ZW1wb3JhcnlGaWxl
bmFtZSk7CisgICAgZ19mcmVlKHRlbXBvcmFyeUZpbGVuYW1lKTsKKyAgICB0ZW1wb3JhcnlGaWxl
bmFtZSA9IE5VTEw7CisKKyAgICBnX21haW5fbG9vcF91bnJlZihsb29wKTsKKyAgICBnX29iamVj
dF91bnJlZih3ZWJWaWV3KTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3Rfd2Via2l0X2Rvd25sb2Fk
X3N5bmNoKHZvaWQpCit7CisgICAgdGVzdF93ZWJraXRfZG93bmxvYWRfcGVyZm9ybShGQUxTRSk7
Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3dlYmtpdF9kb3dubG9hZF9hc3luY2godm9pZCkKK3sK
KyAgICB0ZXN0X3dlYmtpdF9kb3dubG9hZF9wZXJmb3JtKFRSVUUpOworfQorCitzdGF0aWMgZ2Jv
b2xlYW4gbWltZV90eXBlX3BvbGljeV9kZWNpc2lvbl9yZXF1ZXN0ZWRfY2IoV2ViS2l0V2ViVmll
dyogdmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1
ZXN0LCBjb25zdCBjaGFyKiBtaW1lX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0V2ViUG9saWN5RGVjaXNpb24qIGRlY2lz
aW9uLCBncG9pbnRlciBkYXRhKQoreworICAgIHdlYmtpdF93ZWJfcG9saWN5X2RlY2lzaW9uX2Rv
d25sb2FkKGRlY2lzaW9uKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQgaWRs
ZV9xdWl0X2xvb3BfY2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIEdQYXJhbVNwZWMqIHBzcGVj
LCBncG9pbnRlciBkYXRhKQoreworICAgIGlmICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3Rh
dHVzKHdlYl92aWV3KSA9PSBXRUJLSVRfTE9BRF9GSU5JU0hFRCB8fAorICAgICAgICB3ZWJraXRf
d2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYl92aWV3KSA9PSBXRUJLSVRfTE9BRF9GQUlMRUQp
CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0
X3dlYmtpdF9kb3dubG9hZF9kYXRhKHZvaWQpCit7CisgICAgZ2Jvb2xlYW4gYmVlblRoZXJlID0g
RkFMU0U7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJr
aXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOworCisg
ICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAiZG93bmxvYWQtcmVxdWVzdGVkIiwKKyAgICAg
ICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0soZG93bmxvYWRfcmVxdWVzdGVkX2NiKSwKKyAgICAg
ICAgICAgICAgICAgICAgICZiZWVuVGhlcmUpOworCisgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJW
aWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsCisgICAgICAgICAgICAgICAgICAgICBHX0NBTExC
QUNLKGlkbGVfcXVpdF9sb29wX2NiKSwKKyAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisg
ICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAibWltZS10eXBlLXBvbGljeS1kZWNpc2lvbi1y
ZXF1ZXN0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhtaW1lX3R5cGVfcG9s
aWN5X2RlY2lzaW9uX3JlcXVlc3RlZF9jYiksCisgICAgICAgICAgICAgICAgICAgICBOVUxMKTsK
KworICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisKKyAgICAvKiBXZSdy
ZSB0ZXN0aW5nIGZvciBhIGNyYXNoLCBzbyBqdXN0IG5vdCBjcmFzaGluZyBpcyBhIHBhc3MgKi8K
KyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkod2ViVmlldywgImRhdGE6YXBwbGljYXRpb24v
b2N0ZWN0LXN0cmVhbSwiKTsKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICBnX2Fz
c2VydF9jbXBpbnQoYmVlblRoZXJlLCA9PSwgVFJVRSk7CisKKyAgICBnX21haW5fbG9vcF91bnJl
Zihsb29wKTsKKyAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKK30KKworc3RhdGljIHZvaWQg
bm90aWZ5RG93bmxvYWRTdGF0dXNDYWxsYmFjayhHT2JqZWN0ICpvYmplY3QsIEdQYXJhbVNwZWMg
KnBzcGVjLCBncG9pbnRlciBkYXRhKQoreworICAgIFdlYktpdERvd25sb2FkICpkb3dubG9hZCA9
IFdFQktJVF9ET1dOTE9BRChvYmplY3QpOworICAgIFdlYktpdE5ldHdvcmtSZXNwb25zZSAqcmVz
cG9uc2UgPSB3ZWJraXRfZG93bmxvYWRfZ2V0X25ldHdvcmtfcmVzcG9uc2UoZG93bmxvYWQpOwor
ICAgIFNvdXBNZXNzYWdlICptZXNzYWdlID0gd2Via2l0X25ldHdvcmtfcmVzcG9uc2VfZ2V0X21l
c3NhZ2UocmVzcG9uc2UpOworCisgICAgc3dpdGNoICh3ZWJraXRfZG93bmxvYWRfZ2V0X3N0YXR1
cyhkb3dubG9hZCkpIHsKKyAgICBjYXNlIFdFQktJVF9ET1dOTE9BRF9TVEFUVVNfRVJST1I6Cisg
ICAgICAgIGdfYXNzZXJ0X2NtcGludChtZXNzYWdlLT5zdGF0dXNfY29kZSwgPT0sIDQwNCk7Cisg
ICAgICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
V0VCS0lUX0RPV05MT0FEX1NUQVRVU19GSU5JU0hFRDoKKyAgICBjYXNlIFdFQktJVF9ET1dOTE9B
RF9TVEFUVVNfQ0FOQ0VMTEVEOgorICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0
YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIgKnNlcnZlciwgU291cE1lc3NhZ2Ug
Km1lc3NhZ2UsIGNvbnN0IGNoYXIgKnBhdGgsIEdIYXNoVGFibGUgKnF1ZXJ5LCBTb3VwQ2xpZW50
Q29udGV4dCAqY29udGV4dCwgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgaWYgKG1lc3NhZ2Ut
Pm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9z
dGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBf
U1RBVFVTX05PVF9GT1VORCk7CisgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2Fn
ZS0+cmVzcG9uc2VfYm9keSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2Rvd25sb2Fk
X25vdF9mb3VuZCh2b2lkKQoreworICAgIFNvdXBTZXJ2ZXIgKnNlcnZlciA9IHNvdXBfc2VydmVy
X25ldyhTT1VQX1NFUlZFUl9QT1JULCAwLCBOVUxMKTsKKyAgICBzb3VwX3NlcnZlcl9ydW5fYXN5
bmMoc2VydmVyKTsKKyAgICBzb3VwX3NlcnZlcl9hZGRfaGFuZGxlcihzZXJ2ZXIsIE5VTEwsIHNl
cnZlckNhbGxiYWNrLCBOVUxMLCBOVUxMKTsKKyAgICBTb3VwVVJJICpiYXNlVVJJID0gc291cF91
cmlfbmV3KCJodHRwOi8vMTI3LjAuMC4xLyIpOworICAgIHNvdXBfdXJpX3NldF9wb3J0KGJhc2VV
UkksIHNvdXBfc2VydmVyX2dldF9wb3J0KHNlcnZlcikpOworCisgICAgU291cFVSSSAqdXJpID0g
c291cF91cmlfbmV3X3dpdGhfYmFzZShiYXNlVVJJLCAiL2ZvbyIpOworICAgIGNoYXIgKnVyaVN0
cmluZyA9IHNvdXBfdXJpX3RvX3N0cmluZyh1cmksIEZBTFNFKTsKKyAgICBzb3VwX3VyaV9mcmVl
KHVyaSk7CisKKyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworICAgIFdl
YktpdE5ldHdvcmtSZXF1ZXN0ICpyZXF1ZXN0ID0gd2Via2l0X25ldHdvcmtfcmVxdWVzdF9uZXco
dXJpU3RyaW5nKTsKKyAgICBnX2ZyZWUgKHVyaVN0cmluZyk7CisgICAgV2ViS2l0RG93bmxvYWQg
KmRvd25sb2FkID0gd2Via2l0X2Rvd25sb2FkX25ldyhyZXF1ZXN0KTsKKyAgICBnX29iamVjdF91
bnJlZihyZXF1ZXN0KTsKKworICAgIHdlYmtpdF9kb3dubG9hZF9zZXRfZGVzdGluYXRpb25fdXJp
KGRvd25sb2FkLCAiZmlsZTovLy90bXAvZm9vIik7CisgICAgZ19zaWduYWxfY29ubmVjdChkb3du
bG9hZCwgIm5vdGlmeTo6c3RhdHVzIiwgR19DQUxMQkFDSyhub3RpZnlEb3dubG9hZFN0YXR1c0Nh
bGxiYWNrKSwgTlVMTCk7CisKKyAgICB3ZWJraXRfZG93bmxvYWRfc3RhcnQoZG93bmxvYWQpOwor
ICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIGdfb2JqZWN0X3VucmVmKGRvd25sb2Fk
KTsKKyAgICBnX21haW5fbG9vcF91bnJlZihsb29wKTsKKyAgICBzb3VwX3VyaV9mcmVlKGJhc2VV
UkkpOworICAgIGdfb2JqZWN0X3VucmVmKHNlcnZlcik7Cit9CisKK2ludCBtYWluKGludCBhcmdj
LCBjaGFyKiogYXJndikKK3sKKyAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7
CisKKyAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOworICAg
IGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9kb3dubG9hZC9jcmVhdGUiLCB0ZXN0X3dlYmtpdF9k
b3dubG9hZF9jcmVhdGUpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9kb3dubG9hZC9z
eW5jaCIsIHRlc3Rfd2Via2l0X2Rvd25sb2FkX3N5bmNoKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMo
Ii93ZWJraXQvZG93bmxvYWQvYXN5bmNoIiwgdGVzdF93ZWJraXRfZG93bmxvYWRfYXN5bmNoKTsK
KyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvZG93bmxvYWQvZGF0YSIsIHRlc3Rfd2Via2l0
X2Rvd25sb2FkX2RhdGEpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9kb3dubG9hZC9u
b3QtZm91bmQiLCB0ZXN0X3dlYmtpdF9kb3dubG9hZF9ub3RfZm91bmQpOworICAgIHJldHVybiBn
X3Rlc3RfcnVuICgpOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRHdGsvdGVzdGZhdmljb25kYXRhYmFzZS5jIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRHdGsvdGVzdGZhdmljb25kYXRhYmFzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjQ3MmRhNDkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0ZmF2aWNvbmRhdGFiYXNlLmMKQEAgLTAsMCArMSwyNzYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgInRlc3RfdXRpbHMuaCIKKyNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgor
I2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx3ZWJr
aXQvd2Via2l0Lmg+CisKK2NvbnN0IGludCBnSWNvblNpemUgPSAxNjsKKworR01haW5Mb29wICps
b29wOworY2hhciAqYmFzZVVSSTsKKworc3RhdGljIHZvaWQKK3NlcnZlckNhbGxiYWNrKFNvdXBT
ZXJ2ZXIgKnNlcnZlciwgU291cE1lc3NhZ2UgKm1lc3NhZ2UsIGNvbnN0IGNoYXIgKnBhdGgsIEdI
YXNoVGFibGUgKnF1ZXJ5LCBTb3VwQ2xpZW50Q29udGV4dCAqY29udGV4dCwgdm9pZCAqZGF0YSkK
K3sKKyAgICBpZiAobWVzc2FnZS0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgeworICAgICAg
ICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVN
RU5URUQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc291cF9tZXNzYWdlX3NldF9z
dGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOworCisgICAgY2hhciAqY29udGVudHM7Cisg
ICAgZ3NpemUgbGVuZ3RoOworICAgIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2Zhdmljb24uaWNv
IikpIHsKKyAgICAgICAgR0Vycm9yICplcnJvciA9IE5VTEw7CisKKyAgICAgICAgZ19maWxlX2dl
dF9jb250ZW50cygiYmxhbmsuaWNvIiwgJmNvbnRlbnRzLCAmbGVuZ3RoLCAmZXJyb3IpOworICAg
ICAgICBnX2Fzc2VydCghZXJyb3IpOworICAgIH0gZWxzZSB7CisgICAgICAgIGNvbnRlbnRzID0g
Z19zdHJkdXAoIjxodG1sPjxib2R5PnRlc3Q8L2JvZHk+PC9odG1sPiIpOworICAgICAgICBsZW5n
dGggPSBzdHJsZW4oY29udGVudHMpOworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2Fw
cGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBjb250ZW50cywg
bGVuZ3RoKTsKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25z
ZV9ib2R5KTsKK30KKworc3RhdGljIHZvaWQgZGVsZXRlRGF0YWJhc2VGaWxlSWZFeGlzdHMoY29u
c3QgY2hhciAqZGF0YWJhc2VQYXRoKQoreworICAgIGlmICghZ19maWxlX3Rlc3QoZGF0YWJhc2VQ
YXRoLCBHX0ZJTEVfVEVTVF9JU19ESVIpKQorICAgICAgICByZXR1cm47CisKKyAgICBjaGFyICpk
YXRhYmFzZUZpbGVuYW1lID0gZ19idWlsZF9maWxlbmFtZShkYXRhYmFzZVBhdGgsICJXZWJwYWdl
SWNvbnMuZGIiLCBOVUxMKTsKKyAgICBpZiAoZ191bmxpbmsoZGF0YWJhc2VGaWxlbmFtZSkgPT0g
LTEpIHsKKyAgICAgICAgZ19mcmVlKGRhdGFiYXNlRmlsZW5hbWUpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgZ19mcmVlKGRhdGFiYXNlRmlsZW5hbWUpOworICAgIGdfcm1kaXIoZGF0
YWJhc2VQYXRoKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYktpdEZhdmljb25EYXRhYmFzZVNl
dFBhdGgoKQoreworICAgIGNoYXIgKmRhdGFiYXNlUGF0aCA9IGdfYnVpbGRfZmlsZW5hbWUoZ19n
ZXRfdG1wX2RpcigpLCAid2Via2l0LXRlc3RmYXZpY29uZGF0YWJhc2UiLCBOVUxMKTsKKyAgICBk
ZWxldGVEYXRhYmFzZUZpbGVJZkV4aXN0cyhkYXRhYmFzZVBhdGgpOworCisgICAgV2ViS2l0RmF2
aWNvbkRhdGFiYXNlICpkYXRhYmFzZSA9IHdlYmtpdF9nZXRfZmF2aWNvbl9kYXRhYmFzZSgpOwor
ICAgIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX3NldF9wYXRoKGRhdGFiYXNlLCBkYXRhYmFzZVBh
dGgpOworCisgICAgZ19hc3NlcnRfY21wc3RyKGRhdGFiYXNlUGF0aCwgPT0sIHdlYmtpdF9mYXZp
Y29uX2RhdGFiYXNlX2dldF9wYXRoKGRhdGFiYXNlKSk7CisKKyAgICBnX2ZyZWUoZGF0YWJhc2VQ
YXRoKTsKK30KKworLy8gU2VlIHRoZSBjb21tZW50IGluIG1haW4oKSBmdW5jdGlvbiB0aGF0IGdv
ZXMgd2l0aCB0aGlzIHNhbWUgZ3VhcmQuCisjaWZkZWYgTkRFQlVHCisKK3N0YXRpYyB2b2lkIGZh
dmljb25EYXRhYmFzZUdldFZhbGlkRmF2aWNvbkNhbGxiYWNrKEdPYmplY3QgKnNvdXJjZU9iamVj
dCwgR0FzeW5jUmVzdWx0ICpyZXN1bHQsIHZvaWQgKnVzZXJEYXRhKQoreworICAgIGdib29sZWFu
ICpiZWVuSGVyZSA9IChnYm9vbGVhbiopdXNlckRhdGE7CisgICAgR0Vycm9yICplcnJvciA9IE5V
TEw7CisgICAgR2RrUGl4YnVmICppY29uID0gd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zh
dmljb25fcGl4YnVmX2ZpbmlzaChXRUJLSVRfRkFWSUNPTl9EQVRBQkFTRShzb3VyY2VPYmplY3Qp
LCByZXN1bHQsICZlcnJvcik7CisgICAgZ19hc3NlcnQoaWNvbik7CisgICAgZ19vYmplY3RfdW5y
ZWYoaWNvbik7CisKKyAgICAqYmVlbkhlcmUgPSBUUlVFOworCisgICAgZ19tYWluX2xvb3BfcXVp
dChsb29wKTsKK30KKworc3RhdGljIHZvaWQgZmF2aWNvbkRhdGFiYXNlR2V0SW52YWxpZEZhdmlj
b25DYWxsYmFjayhHT2JqZWN0ICpzb3VyY2VPYmplY3QsIEdBc3luY1Jlc3VsdCAqcmVzdWx0LCB2
b2lkICp1c2VyRGF0YSkKK3sKKyAgICBnYm9vbGVhbiAqYmVlbkhlcmUgPSAoZ2Jvb2xlYW4qKXVz
ZXJEYXRhOworICAgIEdFcnJvciAqZXJyb3IgPSBOVUxMOworICAgIEdka1BpeGJ1ZiAqaWNvbiA9
IHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX3BpeGJ1Zl9maW5pc2goV0VCS0lU
X0ZBVklDT05fREFUQUJBU0Uoc291cmNlT2JqZWN0KSwgcmVzdWx0LCAmZXJyb3IpOworICAgIGdf
YXNzZXJ0KCFpY29uKTsKKworICAgICpiZWVuSGVyZSA9IFRSVUU7CisKKyAgICBnX21haW5fbG9v
cF9xdWl0KGxvb3ApOworfQorCitzdGF0aWMgdm9pZCBmYXZpY29uRGF0YWJhc2VHZXRGYXZpY29u
Q2FuY2VsbGVkQ2FsbGJhY2soR09iamVjdCAqc291cmNlT2JqZWN0LCBHQXN5bmNSZXN1bHQgKnJl
c3VsdCwgdm9pZCAqdXNlckRhdGEpCit7CisgICAgZ2Jvb2xlYW4gKmJlZW5IZXJlID0gKGdib29s
ZWFuKil1c2VyRGF0YTsKKyAgICBHRXJyb3IgKmVycm9yID0gTlVMTDsKKyAgICBHZGtQaXhidWYg
Kmljb24gPSB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl9waXhidWZfZmluaXNo
KFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFKHNvdXJjZU9iamVjdCksIHJlc3VsdCwgJmVycm9yKTsK
KyAgICBnX2Fzc2VydCghaWNvbik7CisgICAgZ19hc3NlcnQoZXJyb3IgJiYgZ19lcnJvcl9tYXRj
aGVzKGVycm9yLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX0NBTkNFTExFRCkpOworCisgICAgKmJl
ZW5IZXJlID0gVFJVRTsKKworICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Cit9CisKK3N0YXRp
YyBpbmxpbmUgdm9pZCBxdWl0TWFpbkxvb3BJZkxvYWRDb21wbGV0ZWQoZ2Jvb2xlYW4gKmljb25P
clBhZ2VMb2FkZWQpCit7CisgICAgaWYgKCppY29uT3JQYWdlTG9hZGVkKQorICAgICAgICBnX21h
aW5fbG9vcF9xdWl0KGxvb3ApOworICAgIGVsc2UKKyAgICAgICAgKmljb25PclBhZ2VMb2FkZWQg
PSBUUlVFOworfQorCitzdGF0aWMgdm9pZCBpZGxlUXVpdExvb3BDYWxsYmFjayhXZWJLaXRXZWJW
aWV3ICp3ZWJWaWV3LCBHUGFyYW1TcGVjICpwYXJhbVNwZWMsIGdib29sZWFuICppY29uT3JQYWdl
TG9hZGVkKQoreworICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3
X2dldF9sb2FkX3N0YXR1cyh3ZWJWaWV3KTsKKworICAgIGlmIChzdGF0dXMgPT0gV0VCS0lUX0xP
QURfRklOSVNIRUQgfHwgc3RhdHVzID09IFdFQktJVF9MT0FEX0ZBSUxFRCkKKyAgICAgICAgcXVp
dE1haW5Mb29wSWZMb2FkQ29tcGxldGVkKGljb25PclBhZ2VMb2FkZWQpOworfQorCitzdGF0aWMg
dm9pZCB3ZWJraXRXZWJWaWV3SWNvbkxvYWRlZChXZWJLaXRGYXZpY29uRGF0YWJhc2UgKmRhdGFi
YXNlLCBjb25zdCBjaGFyICpmcmFtZVVSSSwgZ2Jvb2xlYW4gKmljb25PclBhZ2VMb2FkZWQpCit7
CisgICAgcXVpdE1haW5Mb29wSWZMb2FkQ29tcGxldGVkKGljb25PclBhZ2VMb2FkZWQpOworfQor
CitzdGF0aWMgdm9pZCBsb2FkVVJJKGNvbnN0IGNoYXIgKnVyaSkKK3sKKyAgICBXZWJLaXRXZWJW
aWV3ICp2aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAg
Z2Jvb2xlYW4gaWNvbk9yUGFnZUxvYWRlZCA9IEZBTFNFOworCisgICAgd2Via2l0X3dlYl92aWV3
X2xvYWRfdXJpKHZpZXcsIHVyaSk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHZpZXcsICJub3Rp
Znk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhpZGxlUXVpdExvb3BDYWxsYmFjayksICZpY29u
T3JQYWdlTG9hZGVkKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KHZpZXcsICJpY29uLWxvYWRlZCIs
IEdfQ0FMTEJBQ0sod2Via2l0V2ViVmlld0ljb25Mb2FkZWQpLCAmaWNvbk9yUGFnZUxvYWRlZCk7
CisKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19k
aXNjb25uZWN0X21hdGNoZWQodmlldywgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwg
Jmljb25PclBhZ2VMb2FkZWQpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gZmF2aWNvbkRhdGFiYXNl
R2V0VmFsaWRGYXZpY29uSWRsZSh2b2lkICp1c2VyRGF0YSkKK3sKKyAgICB3ZWJraXRfZmF2aWNv
bl9kYXRhYmFzZV9nZXRfZmF2aWNvbl9waXhidWYod2Via2l0X2dldF9mYXZpY29uX2RhdGFiYXNl
KCksIGJhc2VVUkksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdJY29uU2l6ZSwgZ0ljb25TaXplLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmYXZpY29uRGF0YWJhc2VHZXRWYWxpZEZhdmljb25DYWxs
YmFjaywgdXNlckRhdGEpOworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGdib29sZWFu
IGZhdmljb25EYXRhYmFzZUdldEludmFsaWRGYXZpY29uSWRsZSh2b2lkICp1c2VyRGF0YSkKK3sK
KyAgICB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl9waXhidWYod2Via2l0X2dl
dF9mYXZpY29uX2RhdGFiYXNlKCksICJodHRwOi8vd3d3LndlYmtpdGd0ay5vcmcvIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ0ljb25TaXplLCBnSWNv
blNpemUsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZhdmljb25EYXRhYmFzZUdldEludmFsaWRGYXZpY29uQ2FsbGJhY2ssIHVzZXJEYXRhKTsK
KyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBmYXZpY29uRGF0YWJhc2VH
ZXRGYXZpY29uQ2FuY2VsbGVkSWRsZSh2b2lkICp1c2VyRGF0YSkKK3sKKyAgICBHQ2FuY2VsbGFi
bGUgKmNhbmNlbGxhYmxlID0gZ19jYW5jZWxsYWJsZV9uZXcoKTsKKyAgICB3ZWJraXRfZmF2aWNv
bl9kYXRhYmFzZV9nZXRfZmF2aWNvbl9waXhidWYod2Via2l0X2dldF9mYXZpY29uX2RhdGFiYXNl
KCksIGJhc2VVUkksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdJY29uU2l6ZSwgZ0ljb25TaXplLCBjYW5jZWxsYWJsZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNvbkNh
bmNlbGxlZENhbGxiYWNrLCB1c2VyRGF0YSk7CisgICAgZ19jYW5jZWxsYWJsZV9jYW5jZWwoY2Fu
Y2VsbGFibGUpOworICAgIGdfb2JqZWN0X3VucmVmKGNhbmNlbGxhYmxlKTsKKyAgICByZXR1cm4g
RkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VHZXRGYXZp
Y29uKCkKK3sKKyAgICBnYm9vbGVhbiBiZWVuVG9JY29uQ2FsbGJhY2s7CisKKyAgICBsb29wID0g
Z19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworCisgICAgLyogTG9hZCB1cmkgdG8gbWFrZSBz
dXJlIGZhdmljb24gaXMgYWRkZWQgdG8gZGF0YWJhc2UuICovCisgICAgbG9hZFVSSShiYXNlVVJJ
KTsKKworICAgIGJlZW5Ub0ljb25DYWxsYmFjayA9IEZBTFNFOworICAgIGdfaWRsZV9hZGQoKEdT
b3VyY2VGdW5jKWZhdmljb25EYXRhYmFzZUdldFZhbGlkRmF2aWNvbklkbGUsICZiZWVuVG9JY29u
Q2FsbGJhY2spOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKyAgICBnX2Fzc2VydChiZWVu
VG9JY29uQ2FsbGJhY2spOworCisgICAgYmVlblRvSWNvbkNhbGxiYWNrID0gRkFMU0U7CisgICAg
Z19pZGxlX2FkZCgoR1NvdXJjZUZ1bmMpZmF2aWNvbkRhdGFiYXNlR2V0SW52YWxpZEZhdmljb25J
ZGxlLCAmYmVlblRvSWNvbkNhbGxiYWNrKTsKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Cisg
ICAgZ19hc3NlcnQoYmVlblRvSWNvbkNhbGxiYWNrKTsKKworICAgIGJlZW5Ub0ljb25DYWxsYmFj
ayA9IEZBTFNFOworICAgIGdfaWRsZV9hZGQoKEdTb3VyY2VGdW5jKWZhdmljb25EYXRhYmFzZUdl
dEZhdmljb25DYW5jZWxsZWRJZGxlLCAmYmVlblRvSWNvbkNhbGxiYWNrKTsKKyAgICBnX21haW5f
bG9vcF9ydW4obG9vcCk7CisgICAgZ19hc3NlcnQoYmVlblRvSWNvbkNhbGxiYWNrKTsKK30KKwor
c3RhdGljIHZvaWQgdGVzdFdlYktpdEZhdmljb25EYXRhYmFzZUdldEZhdmljb25VUkkoKQorewor
ICAgIGNoYXIgKmljb25VUkkgPSB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl91
cmkod2Via2l0X2dldF9mYXZpY29uX2RhdGFiYXNlKCksIGJhc2VVUkkpOworICAgIGNoYXIgKmV4
cGVjdGVkVVJJID0gZ19zdHJkdXBfcHJpbnRmKCIlc2Zhdmljb24uaWNvIiwgYmFzZVVSSSk7Cisg
ICAgZ19hc3NlcnRfY21wc3RyKGljb25VUkksID09LCBleHBlY3RlZFVSSSk7CisgICAgZ19mcmVl
KGV4cGVjdGVkVVJJKTsKKyAgICBnX2ZyZWUoaWNvblVSSSk7Cit9CisKKyNlbmRpZgorCitzdGF0
aWMgdm9pZCB0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlUmVtb3ZlQWxsKHZvaWQpCit7CisgICAg
V2ViS2l0RmF2aWNvbkRhdGFiYXNlICpkYXRhYmFzZSA9IHdlYmtpdF9nZXRfZmF2aWNvbl9kYXRh
YmFzZSgpOworICAgIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2NsZWFyKGRhdGFiYXNlKTsKKyAg
ICBjaGFyICppY29uVVJJID0gd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fdXJp
KGRhdGFiYXNlLCBiYXNlVVJJKTsKKyAgICBnX2Fzc2VydCghaWNvblVSSSk7CisgICAgZ19mcmVl
KGljb25VUkkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlQ2xv
c2VEYXRhYmFzZSh2b2lkKQoreworICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSAqZGF0YWJhc2Ug
PSB3ZWJraXRfZ2V0X2Zhdmljb25fZGF0YWJhc2UoKTsKKyAgICBjaGFyICpkYXRhYmFzZVBhdGgg
PSBnX3N0cmR1cCh3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfcGF0aChkYXRhYmFzZSkpOwor
ICAgIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX3NldF9wYXRoKGRhdGFiYXNlLCAwKTsKKyAgICBk
ZWxldGVEYXRhYmFzZUZpbGVJZkV4aXN0cyhkYXRhYmFzZVBhdGgpOworICAgIGdfZnJlZShkYXRh
YmFzZVBhdGgpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAg
Z3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAgLyogVGhpcyBob3BlZnVs
bHkgbWFrZXMgdGhlIHRlc3QgaW5kZXBlbmRlbnQgb2YgdGhlIHBhdGggaXQncyBjYWxsZWQgZnJv
bS4gKi8KKyAgICB0ZXN0dXRpbHNfcmVsYXRpdmVfY2hkaXIoIlRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0R3RrL3Jlc291cmNlcy90ZXN0Lmh0bWwiLCBhcmd2WzBdKTsKKworICAgIFNv
dXBTZXJ2ZXIgKnNlcnZlciA9IHNvdXBfc2VydmVyX25ldyhTT1VQX1NFUlZFUl9QT1JULCAwLCBO
VUxMKTsKKyAgICBzb3VwX3NlcnZlcl9ydW5fYXN5bmMoc2VydmVyKTsKKworICAgIHNvdXBfc2Vy
dmVyX2FkZF9oYW5kbGVyKHNlcnZlciwgTlVMTCwgc2VydmVyQ2FsbGJhY2ssIE5VTEwsIE5VTEwp
OworCisgICAgU291cFVSSSAqc291cFVSSSA9IHNvdXBfdXJpX25ldygiaHR0cDovLzEyNy4wLjAu
MS8iKTsKKyAgICBzb3VwX3VyaV9zZXRfcG9ydChzb3VwVVJJLCBzb3VwX3NlcnZlcl9nZXRfcG9y
dChzZXJ2ZXIpKTsKKworICAgIGJhc2VVUkkgPSBzb3VwX3VyaV90b19zdHJpbmcoc291cFVSSSwg
RkFMU0UpOworICAgIHNvdXBfdXJpX2ZyZWUoc291cFVSSSk7CisKKyAgICBnX3Rlc3RfYnVnX2Jh
c2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dl
YmtpdC9mYXZpY29uZGF0YWJhc2Uvc2V0LXBhdGgiLCB0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNl
U2V0UGF0aCk7CisKKyAgICAvLyBUaGVzZSB0d28gdGVzdHMgd2lsbCB0cmlnZ2VyIGFuIEFTU0VS
VElPTiBvbiBkZWJ1ZyBidWlsZHMgZHVlCisgICAgLy8gdG8gaHR0cDovL3dlYmtpdC5vcmcvYi82
NzU4Mi4gUmVtb3ZlIHRoZSBndWFyZHMgb25jZSB0aGUgYnVnIGlzIGZpeGVkLgorI2lmZGVmIE5E
RUJVRworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9mYXZpY29uZGF0YWJhc2UvZ2V0LWZh
dmljb24iLCB0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNvbik7CisgICAgZ190ZXN0
X2FkZF9mdW5jKCIvd2Via2l0L2Zhdmljb25kYXRhYmFzZS9nZXQtZmF2aWNvbi11cmkiLCB0ZXN0
V2ViS2l0RmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNvblVSSSk7CisjZW5kaWYKKworICAgIGdfdGVz
dF9hZGRfZnVuYygiL3dlYmtpdC9mYXZpY29uZGF0YWJhc2UvcmVtb3ZlLWFsbCIsIHRlc3RXZWJL
aXRGYXZpY29uRGF0YWJhc2VSZW1vdmVBbGwpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtp
dC9mYXZpY29uZGF0YWJhc2UvY2xvc2UtZGIiLCB0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlQ2xv
c2VEYXRhYmFzZSk7CisKKyAgICByZXR1cm4gZ190ZXN0X3J1bigpOworfQpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGdsb2JhbHMuYyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RnbG9iYWxzLmMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI5ZWM0ZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RnbG9iYWxzLmMKQEAgLTAsMCArMSwx
MTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQ29sbGFib3JhIEx0ZC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAu
aD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+CisKKy8vIE1ha2Ugc3VyZSB0aGUgc2Vzc2lv
biBpcyBpbml0aWFsaXplZCBwcm9wZXJseSB3aGVuIHdlYmtpdF9nZXRfZGVmYXVsdF9zZXNzaW9u
KCkgaXMgY2FsbGVkLgorc3RhdGljIHZvaWQgdGVzdF9nbG9iYWxzX2RlZmF1bHRfc2Vzc2lvbigp
Cit7CisgICAgZ190ZXN0X2J1ZygiMzY3NTQiKTsKKworICAgIFNvdXBTZXNzaW9uKiBzZXNzaW9u
ID0gd2Via2l0X2dldF9kZWZhdWx0X3Nlc3Npb24oKTsKKyAgICBzb3VwX3Nlc3Npb25fcmVtb3Zl
X2ZlYXR1cmVfYnlfdHlwZShzZXNzaW9uLCBXRUJLSVRfVFlQRV9TT1VQX0FVVEhfRElBTE9HKTsK
KworICAgIC8vIFRoaXMgbWFrZXMgc3VyZSBvdXIgaW5pdGlhbGl6YXRpb24gcmFuLgorICAgIGdf
YXNzZXJ0KHNvdXBfc2Vzc2lvbl9nZXRfZmVhdHVyZShzZXNzaW9uLCBTT1VQX1RZUEVfQ09OVEVO
VF9ERUNPREVSKSAhPSBOVUxMKTsKKworICAgIC8vIENyZWF0aW5nIGEgV2ViVmlldyBzaG91bGQg
bWFrZSBzdXJlIHRoZSBzZXNzaW9uIGlzCisgICAgLy8gaW5pdGlhbGl6ZWQsIGFuZCBub3QgbWVz
cyB3aXRoIG91ciBjaGFuZ2VzLgorICAgIFdlYktpdFdlYlZpZXcqIHdlYl92aWV3ID0gV0VCS0lU
X1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmplY3RfcmVmX3Npbmso
d2ViX3ZpZXcpOworICAgIGdfb2JqZWN0X3VucmVmKHdlYl92aWV3KTsKKworICAgIC8vIFRoZXNl
IG1ha2VzIHN1cmUgb3VyIG1vZGlmaWNhdGlvbiB3YXMga2VwdC4KKyAgICBnX2Fzc2VydChzb3Vw
X3Nlc3Npb25fZ2V0X2ZlYXR1cmUoc2Vzc2lvbiwgU09VUF9UWVBFX0NPTlRFTlRfREVDT0RFUikg
IT0gTlVMTCk7CisgICAgZ19hc3NlcnQoc291cF9zZXNzaW9uX2dldF9mZWF0dXJlKHNlc3Npb24s
IFdFQktJVF9UWVBFX1NPVVBfQVVUSF9ESUFMT0cpID09IE5VTEwpOworfQorCitzdGF0aWMgdm9p
ZCB0ZXN0X2dsb2JhbHNfc2VjdXJpdHlfcG9saWN5KCkKK3sKKyAgICAvLyBDaGVjayBkZWZhdWx0
IHBvbGljeSBmb3Igd2VsbCBrbm93biBzY2hlbWVzLgorICAgIFdlYktpdFNlY3VyaXR5UG9saWN5
IHBvbGljeSA9IHdlYmtpdF9nZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJodHRw
Iik7CisgICAgZ3VpbnQgbWFzayA9IFdFQktJVF9TRUNVUklUWV9QT0xJQ1lfQ09SU19FTkFCTEVE
OworICAgIGdfYXNzZXJ0X2NtcHVpbnQocG9saWN5ICYgbWFzaywgPT0sIG1hc2spOworCisgICAg
cG9saWN5ID0gd2Via2l0X2dldF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUoImh0dHBz
Iik7CisgICAgbWFzayA9IFdFQktJVF9TRUNVUklUWV9QT0xJQ1lfU0VDVVJFIHwgV0VCS0lUX1NF
Q1VSSVRZX1BPTElDWV9DT1JTX0VOQUJMRUQ7CisgICAgZ19hc3NlcnRfY21wdWludChwb2xpY3kg
JiBtYXNrLCA9PSwgbWFzayk7CisKKyAgICBwb2xpY3kgPSB3ZWJraXRfZ2V0X3NlY3VyaXR5X3Bv
bGljeV9mb3JfdXJpX3NjaGVtZSgiZmlsZSIpOworICAgIG1hc2sgPSBXRUJLSVRfU0VDVVJJVFlf
UE9MSUNZX0xPQ0FMOworICAgIGdfYXNzZXJ0X2NtcHVpbnQocG9saWN5ICYgbWFzaywgPT0sIG1h
c2spOworCisgICAgcG9saWN5ID0gd2Via2l0X2dldF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9z
Y2hlbWUoImRhdGEiKTsKKyAgICBtYXNrID0gV0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9OT19BQ0NF
U1NfVE9fT1RIRVJfU0NIRU1FIHwgV0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9TRUNVUkU7CisgICAg
Z19hc3NlcnRfY21wdWludChwb2xpY3kgJiBtYXNrLCA9PSwgbWFzayk7CisKKyAgICBwb2xpY3kg
PSB3ZWJraXRfZ2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiYWJvdXQiKTsKKyAg
ICBtYXNrID0gV0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9OT19BQ0NFU1NfVE9fT1RIRVJfU0NIRU1F
IHwgV0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9TRUNVUkUgfCBXRUJLSVRfU0VDVVJJVFlfUE9MSUNZ
X0VNUFRZX0RPQ1VNRU5UOworICAgIGdfYXNzZXJ0X2NtcHVpbnQocG9saWN5ICYgbWFzaywgPT0s
IG1hc2spOworCisgICAgLy8gQ3VzdG9tIHNjaGVtZS4KKyAgICBwb2xpY3kgPSB3ZWJraXRfZ2V0
X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiZm9vIik7CisgICAgZ19hc3NlcnQoIXBv
bGljeSk7CisKKyAgICBwb2xpY3kgfD0gV0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9MT0NBTDsKKyAg
ICB3ZWJraXRfc2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiZm9vIiwgcG9saWN5
KTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9nZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91
cmlfc2NoZW1lKCJmb28iKSwgPT0sIHBvbGljeSk7CisKKyAgICBwb2xpY3kgfD0gV0VCS0lUX1NF
Q1VSSVRZX1BPTElDWV9OT19BQ0NFU1NfVE9fT1RIRVJfU0NIRU1FOworICAgIHdlYmtpdF9zZXRf
c2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJmb28iLCBwb2xpY3kpOworICAgIGdfYXNz
ZXJ0X2NtcHVpbnQod2Via2l0X2dldF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUoImZv
byIpLCA9PSwgcG9saWN5KTsKKworICAgIHBvbGljeSB8PSBXRUJLSVRfU0VDVVJJVFlfUE9MSUNZ
X0RJU1BMQVlfSVNPTEFURUQ7CisgICAgd2Via2l0X3NldF9zZWN1cml0eV9wb2xpY3lfZm9yX3Vy
aV9zY2hlbWUoImZvbyIsIHBvbGljeSk7CisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfZ2V0
X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiZm9vIiksID09LCBwb2xpY3kpOworCisg
ICAgcG9saWN5IHw9IFdFQktJVF9TRUNVUklUWV9QT0xJQ1lfU0VDVVJFOworICAgIHdlYmtpdF9z
ZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJmb28iLCBwb2xpY3kpOworICAgIGdf
YXNzZXJ0X2NtcHVpbnQod2Via2l0X2dldF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUo
ImZvbyIpLCA9PSwgcG9saWN5KTsKKworICAgIHBvbGljeSB8PSBXRUJLSVRfU0VDVVJJVFlfUE9M
SUNZX0NPUlNfRU5BQkxFRDsKKyAgICB3ZWJraXRfc2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJp
X3NjaGVtZSgiZm9vIiwgcG9saWN5KTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9nZXRf
c2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJmb28iKSwgPT0sIHBvbGljeSk7CisKKyAg
ICBwb2xpY3kgfD0gV0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9FTVBUWV9ET0NVTUVOVDsKKyAgICB3
ZWJraXRfc2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiZm9vIiwgcG9saWN5KTsK
KyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9nZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlf
c2NoZW1lKCJmb28iKSwgPT0sIHBvbGljeSk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFy
KiogYXJndikKK3sKKyAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7CisKKyAg
ICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOworICAgIGdfdGVz
dF9hZGRfZnVuYygiL3dlYmtpdC9nbG9iYWxzL2RlZmF1bHRfc2Vzc2lvbiIsCisgICAgICAgICAg
ICAgICAgICAgIHRlc3RfZ2xvYmFsc19kZWZhdWx0X3Nlc3Npb24pOworICAgIGdfdGVzdF9hZGRf
ZnVuYygiL3dlYmtpdC9nbG9iYWxzL3NlY3VyaXR5LXBvbGljeSIsCisgICAgICAgICAgICAgICAg
ICAgIHRlc3RfZ2xvYmFsc19zZWN1cml0eV9wb2xpY3kpOworICAgIHJldHVybiBnX3Rlc3RfcnVu
KCk7Cit9CisKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3Rr
L3Rlc3RoaXR0ZXN0cmVzdWx0LmMgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0
ay90ZXN0aGl0dGVzdHJlc3VsdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmNiZjAxMTAKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdEd0ay90ZXN0aGl0dGVzdHJlc3VsdC5jCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxnbGliL2dzdGRpby5o
PgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKwordHlwZWRlZiBzdHJ1Y3QgeworICBjaGFy
KiBkYXRhOworICBndWludCBmbGFnOworfSBUZXN0SW5mbzsKKworc3RhdGljIEdNYWluTG9vcCog
bG9vcDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXc7Cisg
ICAgVGVzdEluZm8qIGluZm87Cit9IEhpdFRlc3RSZXN1bHRGaXh0dXJlOworCitUZXN0SW5mbyoK
K3Rlc3RfaW5mb19uZXcoY29uc3QgY2hhciogZGF0YSwgZ3VpbnQgZmxhZykKK3sKKyAgICBUZXN0
SW5mbyogaW5mbzsKKworICAgIGluZm8gPSBnX3NsaWNlX25ldyhUZXN0SW5mbyk7CisgICAgaW5m
by0+ZGF0YSA9IGdfc3RyZHVwKGRhdGEpOworICAgIGluZm8tPmZsYWcgPSBmbGFnOworCisgICAg
cmV0dXJuIGluZm87Cit9CisKK3ZvaWQKK3Rlc3RfaW5mb19kZXN0cm95KFRlc3RJbmZvKiBpbmZv
KQoreworICAgIGdfZnJlZShpbmZvLT5kYXRhKTsKKyAgICBnX3NsaWNlX2ZyZWUoVGVzdEluZm8s
IGluZm8pOworfQorCitzdGF0aWMgdm9pZCBoaXRfdGVzdF9yZXN1bHRfZml4dHVyZV9zZXR1cChI
aXRUZXN0UmVzdWx0Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAg
IGZpeHR1cmUtPndlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygp
KTsKKyAgICBnX29iamVjdF9yZWZfc2luayhmaXh0dXJlLT53ZWJWaWV3KTsKKyAgICBsb29wID0g
Z19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworICAgIGZpeHR1cmUtPmluZm8gPSAoVGVzdElu
Zm8qKWRhdGE7Cit9CisKK3N0YXRpYyB2b2lkIGhpdF90ZXN0X3Jlc3VsdF9maXh0dXJlX3RlYXJk
b3duKEhpdFRlc3RSZXN1bHRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7
CisgICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+d2ViVmlldyk7CisgICAgZ19tYWluX2xvb3Bf
dW5yZWYobG9vcCk7CisgICAgdGVzdF9pbmZvX2Rlc3Ryb3koZml4dHVyZS0+aW5mbyk7Cit9CisK
K3N0YXRpYyB2b2lkCitsb2FkX3N0YXR1c19jYihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LAorICAg
ICAgICAgICAgICAgR1BhcmFtU3BlYyogc3BlYywKKyAgICAgICAgICAgICAgIGdwb2ludGVyIGRh
dGEpCit7CisgICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X2xvYWRfc3RhdHVzKHdlYlZpZXcpOworICAgIFRlc3RJbmZvKiBpbmZvID0gKFRlc3RJbmZvKilk
YXRhOworCisgICAgaWYgKHN0YXR1cyA9PSBXRUJLSVRfTE9BRF9GSU5JU0hFRCkgeworICAgICAg
ICBXZWJLaXRIaXRUZXN0UmVzdWx0KiByZXN1bHQ7CisgICAgICAgIGd1aW50IGNvbnRleHQ7Cisg
ICAgICAgIEdka0V2ZW50KiBldmVudCA9IGdka19ldmVudF9uZXcoR0RLX0JVVFRPTl9QUkVTUyk7
CisgICAgICAgIFdlYktpdERPTU5vZGUqIG5vZGU7CisgICAgICAgIGdpbnQgeCwgeTsKKworICAg
ICAgICAvKiBDbG9zZSBlbm91Z2ggdG8gMCwwICovCisgICAgICAgIGV2ZW50LT5idXR0b24ueCA9
IDU7CisgICAgICAgIGV2ZW50LT5idXR0b24ueSA9IDU7CisKKyAgICAgICAgcmVzdWx0ID0gd2Vi
a2l0X3dlYl92aWV3X2dldF9oaXRfdGVzdF9yZXN1bHQod2ViVmlldywgKEdka0V2ZW50QnV0dG9u
KikgZXZlbnQpOworICAgICAgICBnZGtfZXZlbnRfZnJlZShldmVudCk7CisgICAgICAgIGdfYXNz
ZXJ0KHJlc3VsdCk7CisKKyAgICAgICAgZ19vYmplY3RfZ2V0KHJlc3VsdCwgImNvbnRleHQiLCAm
Y29udGV4dCwgTlVMTCk7CisgICAgICAgIGdfYXNzZXJ0KGNvbnRleHQgJiBpbmZvLT5mbGFnKTsK
KworICAgICAgICBnX29iamVjdF9nZXQocmVzdWx0LCAiaW5uZXItbm9kZSIsICZub2RlLCBOVUxM
KTsKKyAgICAgICAgZ19hc3NlcnQobm9kZSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01f
SVNfTk9ERShub2RlKSk7CisKKyAgICAgICAgZ19vYmplY3RfZ2V0KHJlc3VsdCwgIngiLCAmeCwg
InkiLCAmeSwgTlVMTCk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludCh4LCA9PSwgNSk7CisgICAg
ICAgIGdfYXNzZXJ0X2NtcGludCh5LCA9PSwgNSk7CisKKyAgICAgICAgLyogV2UgY2FuIG9ubHkg
dGVzdCB0aGVzZSBub2RlIHR5cGVzIGF0IHRoZSBtb21lbnQuIEluIHRoZQorICAgICAgICAgKiBp
bnB1dCBjYXNlIHRoZXJlIHNlZW1zIHRvIGJlIGFuIGV4dHJhIGxheWVyIHdpdGggYSBESVYgb24K
KyAgICAgICAgICogdG9wIG9mIHRoZSBpbnB1dCwgd2hpY2ggZ2V0cyBhc3NpZ25lZCB0byB0aGUg
aW5uZXItbm9kZS4KKyAgICAgICAgICogdGFnICovCisgICAgICAgIGlmIChpbmZvLT5mbGFnID09
IFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9ET0NVTUVOVCkKKyAgICAgICAgICAgIGdf
YXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9IVE1MX0VMRU1FTlQobm9kZSkpOworICAgICAgICBl
bHNlIGlmIChpbmZvLT5mbGFnID09IFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9JTUFH
RSkKKyAgICAgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9JTUFHRV9FTEVNRU5U
KG5vZGUpKTsKKyAgICAgICAgZWxzZSBpZiAoaW5mby0+ZmxhZyA9PSBXRUJLSVRfSElUX1RFU1Rf
UkVTVUxUX0NPTlRFWFRfTElOSykgeworICAgICAgICAgICAgLyogVGhlIGhpdCB0ZXN0IHdpbGwg
Z2l2ZSB1cyB0aGUgaW5uZXIgdGV4dCBub2RlLCB3ZSB3YW50CisgICAgICAgICAgICAgKiB0aGUg
QSB0YWcgKi8KKyAgICAgICAgICAgIFdlYktpdERPTU5vZGUqIHBhcmVudCA9IHdlYmtpdF9kb21f
bm9kZV9nZXRfcGFyZW50X25vZGUobm9kZSk7CisgICAgICAgICAgICBnX2Fzc2VydChXRUJLSVRf
RE9NX0lTX0hUTUxfQU5DSE9SX0VMRU1FTlQocGFyZW50KSk7CisgICAgICAgIH0KKworICAgICAg
ICBnX29iamVjdF91bnJlZihyZXN1bHQpOworICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxvb3Ap
OworICAgIH0KK30KKworc3RhdGljIHZvaWQKK3Rlc3Rfd2Via2l0X2hpdF90ZXN0X3Jlc3VsdChI
aXRUZXN0UmVzdWx0Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAg
IFRlc3RJbmZvKiBpbmZvID0gKFRlc3RJbmZvKilkYXRhOworICAgIEd0a0FsbG9jYXRpb24gYWxs
b2NhdGlvbiA9IHsgMCwgMCwgNTAsIDUwIH07CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9z
dHJpbmcoZml4dHVyZS0+d2ViVmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW5mby0+ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRleHQvaHRtbCIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1dGYtOCIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJmaWxlOi8vIik7CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9j
YXRlKEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldyksICZhbGxvY2F0aW9uKTsKKyAgICBnX3Np
Z25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19D
QUxMQkFDSyhsb2FkX3N0YXR1c19jYiksIGluZm8pOworICAgIGdfbWFpbl9sb29wX3J1bihsb29w
KTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIGd0a190ZXN0
X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKKworICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvIik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2hpdHRlc3Ry
ZXN1bHQvZG9jdW1lbnQiLCBIaXRUZXN0UmVzdWx0Rml4dHVyZSwgCisgICAgICAgICAgICAgICB0
ZXN0X2luZm9fbmV3KCI8aHRtbD48Ym9keT48aDE+V2ViS2l0R1RLKyE8L2gxPjwvYm9keT48L2h0
bWw+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX0hJVF9URVNUX1JFU1VM
VF9DT05URVhUX0RPQ1VNRU5UKSwKKyAgICAgICAgICAgICAgIGhpdF90ZXN0X3Jlc3VsdF9maXh0
dXJlX3NldHVwLCB0ZXN0X3dlYmtpdF9oaXRfdGVzdF9yZXN1bHQsIGhpdF90ZXN0X3Jlc3VsdF9m
aXh0dXJlX3RlYXJkb3duKTsKKyAgICAvKiBXZSBoYXJkY29kZSBhbGwgZWxlbWVudHMgdG8gYmUg
YXQgMCwwIHNvIHRoYXQgd2Uga25vdyB3aGVyZSB0bworICAgICAqIGdlbmVyYXRlIHRoZSBidXR0
b24gZXZlbnRzICovCisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9oaXR0ZXN0cmVzdWx0L2ltYWdl
IiwgSGl0VGVzdFJlc3VsdEZpeHR1cmUsCisgICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KCI8
aHRtbD48Ym9keT48aW1nIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDowOyB0b3A6MCdz
cmM9JzB4ZGVhZGJlZWYnIHdpZHRoPTUwIGhlaWdodD01MD48L2ltZz48L2JvZHk+PC9odG1sPiIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09O
VEVYVF9JTUFHRSksCisgICAgICAgICAgICAgICBoaXRfdGVzdF9yZXN1bHRfZml4dHVyZV9zZXR1
cCwgdGVzdF93ZWJraXRfaGl0X3Rlc3RfcmVzdWx0LCBoaXRfdGVzdF9yZXN1bHRfZml4dHVyZV90
ZWFyZG93bik7CisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9oaXR0ZXN0cmVzdWx0L2VkaXRhYmxl
IiwgSGl0VGVzdFJlc3VsdEZpeHR1cmUsCisgICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KCI8
aHRtbD48Ym9keT48aW5wdXQgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjA7IHRvcDow
JyBzaXplPSczNSc+PC9pbnB1dD4+PC9ib2R5PjwvaHRtbD4iLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfRURJVEFCTEUpLAorICAg
ICAgICAgICAgICAgaGl0X3Rlc3RfcmVzdWx0X2ZpeHR1cmVfc2V0dXAsIHRlc3Rfd2Via2l0X2hp
dF90ZXN0X3Jlc3VsdCwgaGl0X3Rlc3RfcmVzdWx0X2ZpeHR1cmVfdGVhcmRvd24pOworICAgIGdf
dGVzdF9hZGQoIi93ZWJraXQvaGl0dGVzdHJlc3VsdC9saW5rIiwgSGl0VGVzdFJlc3VsdEZpeHR1
cmUsCisgICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KCI8aHRtbD48Ym9keT48YSBzdHlsZT0n
cG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MDsgdG9wOjAnIGhyZWY9J2h0dHA6Ly93d3cuZXhhbXBs
ZS5jb20nPkhFTExPIFdPUkxEPC9hPjwvYm9keT48L2h0bWw+IiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0xJTkspLAorICAgICAg
ICAgICAgICAgaGl0X3Rlc3RfcmVzdWx0X2ZpeHR1cmVfc2V0dXAsIHRlc3Rfd2Via2l0X2hpdF90
ZXN0X3Jlc3VsdCwgaGl0X3Rlc3RfcmVzdWx0X2ZpeHR1cmVfdGVhcmRvd24pOworICAgICAgICAg
ICAgICAgCisgICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7Cit9CisKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RodHRwYmFja2VuZC5jIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGh0dHBiYWNrZW5kLmMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM3NzY4NwotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RodHRwYmFja2VuZC5jCkBAIC0w
LDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR3VzdGF2byBOb3JvbmhhIFNp
bHZhCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHVu
aXN0ZC5oPgorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgorI2lu
Y2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+CisKKy8vIE5vdCB5
ZXQgcHVibGljIEFQSQorU291cE1lc3NhZ2UqIHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfZ2V0X21l
c3NhZ2UoV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QpOworCitzdGF0aWMgZ2Jvb2xlYW4g
bmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fcmVxdWVzdGVkX2NiKFdlYktpdFdlYlZpZXcqIHdl
Yl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBXZWJLaXRXZWJGcmFtZSogd2ViX2ZyYW1lLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXROZXR3b3JrUmVxdWVzdCog
cmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgV2ViS2l0V2ViTmF2aWdhdGlvbkFjdGlvbiogYWN0aW9uLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRXZWJQb2xp
Y3lEZWNpc2lvbiogZGVjaXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIGRhdGEpCit7CisgICAgU291cE1lc3NhZ2Uq
IG1lc3NhZ2UgPSB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X2dldF9tZXNzYWdlKHJlcXVlc3QpOwor
CisgICAgLyogMSAtPiB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X3dpdGhfY29yZV9yZXF1ZXN0Cisg
ICAgICoKKyAgICAgKiBUaGUgU291cE1lc3NhZ2UgaXMgY3JlYXRlZCBleGNsdXNpdmVseSBmb3Ig
dGhlIGVtaXNzaW9uIG9mIHRoaXMKKyAgICAgKiBzaWduYWwuCisgICAgICovCisgICAgZ19hc3Nl
cnRfY21waW50KEdfT0JKRUNUKG1lc3NhZ2UpLT5yZWZfY291bnQsID09LCAxKTsKKworICAgIHJl
dHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9zb3VwX21lc3NhZ2VfbGlmZXRpbWUo
KQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYl92aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtp
dF93ZWJfdmlld19uZXcoKSk7CisKKyAgICBnX29iamVjdF9yZWZfc2luayh3ZWJfdmlldyk7CisK
KyAgICBnX3NpZ25hbF9jb25uZWN0KHdlYl92aWV3LCAibmF2aWdhdGlvbi1wb2xpY3ktZGVjaXNp
b24tcmVxdWVzdGVkIiwKKyAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sobmF2aWdhdGlv
bl9wb2xpY3lfZGVjaXNpb25fcmVxdWVzdGVkX2NiKSwKKyAgICAgICAgICAgICAgICAgICAgIE5V
TEwpOworCisgICAgLyogbG9hZF91cmkgd2lsbCB0cmlnZ2VyIHRoZSBuYXZpZ2F0aW9uLXBvbGlj
eS1kZWNpc2lvbi1yZXF1ZXN0ZWQKKyAgICAgKiBzaWduYWwgZW1pc3Npb247CisgICAgICovCisg
ICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHdlYl92aWV3LCAiaHR0cDovLzEyNy4wLjAuMS8i
KTsKKworICAgIGdfb2JqZWN0X3VucmVmKHdlYl92aWV3KTsKK30KKworaW50IG1haW4oaW50IGFy
Z2MsIGNoYXIqKiBhcmd2KQoreworICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxM
KTsKKworICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Cisg
ICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3NvdXBtZXNzYWdlL2xpZmV0aW1lIiwgdGVzdF9z
b3VwX21lc3NhZ2VfbGlmZXRpbWUpOworICAgIHJldHVybiBnX3Rlc3RfcnVuICgpOworfQpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGtleWV2ZW50
cy5jIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGtleWV2ZW50cy5j
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjZDAxZjMKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0a2V5ZXZlbnRz
LmMKQEAgLTAsMCArMSwzOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgTWFy
dGluIFJvYmluc29uIDxtcm9iaW5zb25Ad2Via2l0Lm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0cmlu
Zy5oPgorI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5o
PgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+CisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNDb250ZXh0UmVmLmg+CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjaGFy
KiBwYWdlOworICAgIGNoYXIqIHRleHQ7CisgICAgZ2Jvb2xlYW4gc2hvdWxkQmVIYW5kbGVkOwor
fSBUZXN0SW5mbzsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIEd0a1dpZGdldCogd2luZG93Owor
ICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXc7CisgICAgR01haW5Mb29wKiBsb29wOworICAgIFRl
c3RJbmZvKiBpbmZvOworfSBLZXlFdmVudEZpeHR1cmU7CisKK1Rlc3RJbmZvKgordGVzdF9pbmZv
X25ldyhjb25zdCBjaGFyKiBwYWdlLCBnYm9vbGVhbiBzaG91bGRCZUhhbmRsZWQpCit7CisgICAg
VGVzdEluZm8qIGluZm87CisKKyAgICBpbmZvID0gZ19zbGljZV9uZXcoVGVzdEluZm8pOworICAg
IGluZm8tPnBhZ2UgPSBnX3N0cmR1cChwYWdlKTsKKyAgICBpbmZvLT5zaG91bGRCZUhhbmRsZWQg
PSBzaG91bGRCZUhhbmRsZWQ7CisgICAgaW5mby0+dGV4dCA9IDA7CisKKyAgICByZXR1cm4gaW5m
bzsKK30KKwordm9pZAordGVzdF9pbmZvX2Rlc3Ryb3koVGVzdEluZm8qIGluZm8pCit7CisgICAg
Z19mcmVlKGluZm8tPnBhZ2UpOworICAgIGdfZnJlZShpbmZvLT50ZXh0KTsKKyAgICBnX3NsaWNl
X2ZyZWUoVGVzdEluZm8sIGluZm8pOworfQorCitzdGF0aWMgdm9pZCBrZXlfZXZlbnRfZml4dHVy
ZV9zZXR1cChLZXlFdmVudEZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sK
KyAgICBmaXh0dXJlLT5sb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworCisgICAg
Zml4dHVyZS0+d2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7Cisg
ICAgZml4dHVyZS0+d2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3
KCkpOworCisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihmaXh0dXJlLT53aW5k
b3cpLCBHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpKTsKK30KKworc3RhdGljIHZvaWQga2V5
X2V2ZW50X2ZpeHR1cmVfdGVhcmRvd24oS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rw
b2ludGVyIGRhdGEpCit7CisgICAgZ3RrX3dpZGdldF9kZXN0cm95KGZpeHR1cmUtPndpbmRvdyk7
CisgICAgZ19tYWluX2xvb3BfdW5yZWYoZml4dHVyZS0+bG9vcCk7CisgICAgdGVzdF9pbmZvX2Rl
c3Ryb3koZml4dHVyZS0+aW5mbyk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBrZXlfcHJlc3NfZXZl
bnRfY2IoV2ViS2l0V2ViVmlldyogd2ViVmlldywgR2RrRXZlbnQqIGV2ZW50LCBncG9pbnRlciBk
YXRhKQoreworICAgIEtleUV2ZW50Rml4dHVyZSogZml4dHVyZSA9IChLZXlFdmVudEZpeHR1cmUq
KWRhdGE7CisgICAgZ2Jvb2xlYW4gaGFuZGxlZCA9IEdUS19XSURHRVRfR0VUX0NMQVNTKGZpeHR1
cmUtPndlYlZpZXcpLT5rZXlfcHJlc3NfZXZlbnQoR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3
KSwgJmV2ZW50LT5rZXkpOworICAgIGdfYXNzZXJ0X2NtcGludChoYW5kbGVkLCA9PSwgZml4dHVy
ZS0+aW5mby0+c2hvdWxkQmVIYW5kbGVkKTsKKworICAgIHJldHVybiBGQUxTRTsKK30KKworc3Rh
dGljIGdib29sZWFuIGtleV9yZWxlYXNlX2V2ZW50X2NiKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcs
IEdka0V2ZW50KiBldmVudCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICAvLyBXZWJDb3JlIG5ldmVy
IHNlZW1zIHRvIG1hcmsga2V5dXAgZXZlbnRzIGFzIGhhbmRsZWQuCisgICAgS2V5RXZlbnRGaXh0
dXJlKiBmaXh0dXJlID0gKEtleUV2ZW50Rml4dHVyZSopZGF0YTsKKyAgICBnYm9vbGVhbiBoYW5k
bGVkID0gR1RLX1dJREdFVF9HRVRfQ0xBU1MoZml4dHVyZS0+d2ViVmlldyktPmtleV9wcmVzc19l
dmVudChHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpLCAmZXZlbnQtPmtleSk7CisgICAgZ19h
c3NlcnQoIWhhbmRsZWQpOworCisgICAgZ19tYWluX2xvb3BfcXVpdChmaXh0dXJlLT5sb29wKTsK
KworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9rZXlwcmVzc19ldmVu
dHNfbG9hZF9zdGF0dXNfY2IoV2ViS2l0V2ViVmlldyogd2ViVmlldywgR1BhcmFtU3BlYyogc3Bl
YywgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBLZXlFdmVudEZpeHR1cmUqIGZpeHR1cmUgPSAoS2V5
RXZlbnRGaXh0dXJlKilkYXRhOworICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0
X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJWaWV3KTsKKyAgICBpZiAoc3RhdHVzID09IFdF
QktJVF9MT0FEX0ZJTklTSEVEKSB7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+
d2ViVmlldywgImtleS1wcmVzcy1ldmVudCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgR19D
QUxMQkFDSyhrZXlfcHJlc3NfZXZlbnRfY2IpLCBmaXh0dXJlKTsKKyAgICAgICAgZ19zaWduYWxf
Y29ubmVjdChmaXh0dXJlLT53ZWJWaWV3LCAia2V5LXJlbGVhc2UtZXZlbnQiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0soa2V5X3JlbGVhc2VfZXZlbnRfY2IpLCBmaXh0dXJl
KTsKKyAgICAgICAgaWYgKCFndGtfdGVzdF93aWRnZXRfc2VuZF9rZXkoR1RLX1dJREdFVChmaXh0
dXJlLT53ZWJWaWV3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Rr
X3VuaWNvZGVfdG9fa2V5dmFsKCdhJyksIDApKQorICAgICAgICAgICAgZ19hc3NlcnRfbm90X3Jl
YWNoZWQoKTsKKyAgICB9CisKK30KKworZ2Jvb2xlYW4gbWFwX2V2ZW50X2NiKEd0a1dpZGdldCAq
d2lkZ2V0LCBHZGtFdmVudCogZXZlbnQsIGdwb2ludGVyIGRhdGEpCit7CisgICAgS2V5RXZlbnRG
aXh0dXJlKiBmaXh0dXJlID0gKEtleUV2ZW50Rml4dHVyZSopZGF0YTsKKyAgICB3ZWJraXRfd2Vi
X3ZpZXdfbG9hZF9zdHJpbmcoZml4dHVyZS0+d2ViVmlldywgZml4dHVyZS0+aW5mby0+cGFnZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRleHQvaHRtbCIsICJ1dGYtOCIsICJm
aWxlOi8vIik7CisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZCBzZXR1cF9rZXll
dmVudF90ZXN0KEtleUV2ZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhLCBH
Q2FsbGJhY2sgbG9hZF9ldmVudF9jYWxsYmFjaykKK3sKKyAgICBmaXh0dXJlLT5pbmZvID0gKFRl
c3RJbmZvKilkYXRhOworICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2luZG93LCAibWFw
LWV2ZW50IiwKKyAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sobWFwX2V2ZW50X2NiKSwg
Zml4dHVyZSk7CisKKyAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMoR1RLX1dJREdFVChmaXh0dXJl
LT53ZWJWaWV3KSk7CisgICAgZ3RrX3dpZGdldF9zaG93KGZpeHR1cmUtPndpbmRvdyk7CisgICAg
Z3RrX3dpZGdldF9zaG93KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldykpOworICAgIGd0a193
aW5kb3dfcHJlc2VudChHVEtfV0lORE9XKGZpeHR1cmUtPndpbmRvdykpOworCisgICAgZ19zaWdu
YWxfY29ubmVjdChmaXh0dXJlLT53ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsCisgICAg
ICAgICAgICAgICAgICAgICBsb2FkX2V2ZW50X2NhbGxiYWNrLCBmaXh0dXJlKTsKKworICAgIGdf
bWFpbl9sb29wX3J1bihmaXh0dXJlLT5sb29wKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9rZXlw
cmVzc19ldmVudHMoS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEp
Cit7CisgICAgc2V0dXBfa2V5ZXZlbnRfdGVzdChmaXh0dXJlLCBkYXRhLCBHX0NBTExCQUNLKHRl
c3Rfa2V5cHJlc3NfZXZlbnRzX2xvYWRfc3RhdHVzX2NiKSk7Cit9CisKK3N0YXRpYyBnYm9vbGVh
biBlbGVtZW50X3RleHRfZXF1YWxfdG8oSlNDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IGdjaGFy
KiB0ZXh0KQoreworICAgIEpTU3RyaW5nUmVmIHNjcmlwdFN0cmluZyA9IEpTU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKAorICAgICAgIndpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChc
ImluXCIpLnZhbHVlOyIpOworICAgIEpTVmFsdWVSZWYgdmFsdWUgPSBKU0V2YWx1YXRlU2NyaXB0
KGNvbnRleHQsIHNjcmlwdFN0cmluZywgMCwgMCwgMCwgMCk7CisgICAgSlNTdHJpbmdSZWxlYXNl
KHNjcmlwdFN0cmluZyk7CisKKyAgICAvLyBJZiB0aGUgdmFsdWUgaXNuJ3QgYSBzdHJpbmcsIHRo
ZSBlbGVtZW50IGlzIHByb2JhYmx5IGEgZGl2CisgICAgLy8gc28gZ3JhYiB0aGUgaW5uZXJUZXh0
IGluc3RlYWQuCisgICAgaWYgKCFKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgdmFsdWUpKSB7Cisg
ICAgICAgIEpTU3RyaW5nUmVmIHNjcmlwdFN0cmluZyA9IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKAorICAgICAgICAgICJ3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJpblwi
KS5pbm5lclRleHQ7Iik7CisgICAgICAgIHZhbHVlID0gSlNFdmFsdWF0ZVNjcmlwdChjb250ZXh0
LCBzY3JpcHRTdHJpbmcsIDAsIDAsIDAsIDApOworICAgICAgICBKU1N0cmluZ1JlbGVhc2Uoc2Ny
aXB0U3RyaW5nKTsKKyAgICB9CisKKyAgICBnX2Fzc2VydChKU1ZhbHVlSXNTdHJpbmcoY29udGV4
dCwgdmFsdWUpKTsKKyAgICBKU1N0cmluZ1JlZiBpbnB1dFN0cmluZyA9IEpTVmFsdWVUb1N0cmlu
Z0NvcHkoY29udGV4dCwgdmFsdWUsIDApOworICAgIGdfYXNzZXJ0KGlucHV0U3RyaW5nKTsKKwor
ICAgIGdpbnQgc2l6ZSA9IEpTU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShpbnB1dFN0
cmluZyk7CisgICAgZ2NoYXIqIGNTdHJpbmcgPSBnX21hbGxvYyhzaXplKTsKKyAgICBKU1N0cmlu
Z0dldFVURjhDU3RyaW5nKGlucHV0U3RyaW5nLCBjU3RyaW5nLCBzaXplKTsKKyAgICBKU1N0cmlu
Z1JlbGVhc2UoaW5wdXRTdHJpbmcpOworCisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gZ191dGY4X2Nv
bGxhdGUoY1N0cmluZywgdGV4dCkgPT0gMDsKKyAgICBnX2ZyZWUoY1N0cmluZyk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgdGVzdF9pbWVfbG9hZF9zdGF0dXNfY2IoV2Vi
S2l0V2ViVmlldyogd2ViVmlldywgR1BhcmFtU3BlYyogc3BlYywgZ3BvaW50ZXIgZGF0YSkKK3sK
KyAgICBLZXlFdmVudEZpeHR1cmUqIGZpeHR1cmUgPSAoS2V5RXZlbnRGaXh0dXJlKilkYXRhOwor
ICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0
YXR1cyh3ZWJWaWV3KTsKKyAgICBpZiAoc3RhdHVzICE9IFdFQktJVF9MT0FEX0ZJTklTSEVEKQor
ICAgICAgICByZXR1cm47CisKKyAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCA9IHdlYmtp
dF93ZWJfZnJhbWVfZ2V0X2dsb2JhbF9jb250ZXh0KAorICAgICAgICB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X21haW5fZnJhbWUod2ViVmlldykpOworICAgIGdfYXNzZXJ0KGNvbnRleHQpOworCisgICAg
R3RrSU1Db250ZXh0KiBpbUNvbnRleHQgPSAwOworICAgIGdfb2JqZWN0X2dldCh3ZWJWaWV3LCAi
aW0tY29udGV4dCIsICZpbUNvbnRleHQsIE5VTEwpOworICAgIGdfYXNzZXJ0KGltQ29udGV4dCk7
CisKKyAgICAvLyBUZXN0IHRoYXQgY29tbWl0cyB0aGF0IGhhcHBlbiBvdXRzaWRlIG9mIGtleSBl
dmVudHMKKyAgICAvLyBjaGFuZ2UgdGhlIHRleHQgZmllbGQgaW1tZWRpYXRlbHkuIFRoaXMgY2xv
c2VseSByZXBsaWNhdGVzCisgICAgLy8gdGhlIGJlaGF2aW9yIG9mIFNDSU0uCisgICAgZ19hc3Nl
cnQoZWxlbWVudF90ZXh0X2VxdWFsX3RvKGNvbnRleHQsICIiKSk7CisgICAgZ19zaWduYWxfZW1p
dF9ieV9uYW1lKGltQ29udGV4dCwgImNvbW1pdCIsICJhIik7CisgICAgZ19hc3NlcnQoZWxlbWVu
dF90ZXh0X2VxdWFsX3RvKGNvbnRleHQsICJhIikpOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFt
ZShpbUNvbnRleHQsICJjb21taXQiLCAiYiIpOworICAgIGdfYXNzZXJ0KGVsZW1lbnRfdGV4dF9l
cXVhbF90byhjb250ZXh0LCAiYWIiKSk7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKGltQ29u
dGV4dCwgImNvbW1pdCIsICJjIik7CisgICAgZ19hc3NlcnQoZWxlbWVudF90ZXh0X2VxdWFsX3Rv
KGNvbnRleHQsICJhYmMiKSk7CisKKyAgICBnX29iamVjdF91bnJlZihpbUNvbnRleHQpOworICAg
IGdfbWFpbl9sb29wX3F1aXQoZml4dHVyZS0+bG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rf
aW1lKEtleUV2ZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAg
IHNldHVwX2tleWV2ZW50X3Rlc3QoZml4dHVyZSwgZGF0YSwgR19DQUxMQkFDSyh0ZXN0X2ltZV9s
b2FkX3N0YXR1c19jYikpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gdmVyaWZ5X2NvbnRlbnRzKGdw
b2ludGVyIGRhdGEpCit7CisgICAgS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJlID0gKEtleUV2ZW50
Rml4dHVyZSopZGF0YTsKKyAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCA9IHdlYmtpdF93
ZWJfZnJhbWVfZ2V0X2dsb2JhbF9jb250ZXh0KAorICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X21haW5fZnJhbWUoZml4dHVyZS0+d2ViVmlldykpOworICAgIGdfYXNzZXJ0KGNvbnRleHQpOwor
CisgICAgZ19hc3NlcnQoZWxlbWVudF90ZXh0X2VxdWFsX3RvKGNvbnRleHQsIGZpeHR1cmUtPmlu
Zm8tPnRleHQpKTsKKyAgICBnX21haW5fbG9vcF9xdWl0KGZpeHR1cmUtPmxvb3ApOworICAgIHJl
dHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9ibG9ja2luZ19sb2FkX3N0YXR1c19j
YihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHUGFyYW1TcGVjKiBzcGVjLCBncG9pbnRlciBkYXRh
KQoreworICAgIEtleUV2ZW50Rml4dHVyZSogZml4dHVyZSA9IChLZXlFdmVudEZpeHR1cmUqKWRh
dGE7CisgICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xv
YWRfc3RhdHVzKHdlYlZpZXcpOworICAgIGlmIChzdGF0dXMgIT0gV0VCS0lUX0xPQURfRklOSVNI
RUQpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSBmaXJzdCBrZXlwcmVzcyBldmVudCBz
aG91bGQgbm90IG1vZGlmeSB0aGUgZmllbGQuCisgICAgZml4dHVyZS0+aW5mby0+dGV4dCA9IGdf
c3RyZHVwKCJiYyIpOworICAgIGlmICghZ3RrX3Rlc3Rfd2lkZ2V0X3NlbmRfa2V5KEdUS19XSURH
RVQoZml4dHVyZS0+d2ViVmlldyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
ZGtfdW5pY29kZV90b19rZXl2YWwoJ2EnKSwgMCkpCisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFj
aGVkKCk7CisgICAgaWYgKCFndGtfdGVzdF93aWRnZXRfc2VuZF9rZXkoR1RLX1dJREdFVChmaXh0
dXJlLT53ZWJWaWV3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGtfdW5p
Y29kZV90b19rZXl2YWwoJ2InKSwgMCkpCisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7
CisgICAgaWYgKCFndGtfdGVzdF93aWRnZXRfc2VuZF9rZXkoR1RLX1dJREdFVChmaXh0dXJlLT53
ZWJWaWV3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGtfdW5pY29kZV90
b19rZXl2YWwoJ2MnKSwgMCkpCisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisKKyAg
ICBnX2lkbGVfYWRkKHZlcmlmeV9jb250ZW50cywgZml4dHVyZSk7Cit9CisKK3N0YXRpYyB2b2lk
IHRlc3RfYmxvY2tpbmcoS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRh
dGEpCit7CisgICAgc2V0dXBfa2V5ZXZlbnRfdGVzdChmaXh0dXJlLCBkYXRhLCBHX0NBTExCQUNL
KHRlc3RfYmxvY2tpbmdfbG9hZF9zdGF0dXNfY2IpKTsKK30KKworI2lmIGRlZmluZWQoR0RLX1dJ
TkRPV0lOR19YMTEpCitzdGF0aWMgdm9pZCB0ZXN0X3hpbV9sb2FkX3N0YXR1c19jYihXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3LCBHUGFyYW1TcGVjKiBzcGVjLCBncG9pbnRlciBkYXRhKQoreworICAg
IEtleUV2ZW50Rml4dHVyZSogZml4dHVyZSA9IChLZXlFdmVudEZpeHR1cmUqKWRhdGE7CisgICAg
V2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVz
KHdlYlZpZXcpOworICAgIGlmIChzdGF0dXMgIT0gV0VCS0lUX0xPQURfRklOSVNIRUQpCisgICAg
ICAgIHJldHVybjsKKworICAgIEd0a0lNQ29udGV4dCogaW1Db250ZXh0ID0gMDsKKyAgICBnX29i
amVjdF9nZXQod2ViVmlldywgImltLWNvbnRleHQiLCAmaW1Db250ZXh0LCBOVUxMKTsKKyAgICBn
X2Fzc2VydChpbUNvbnRleHQpOworCisgICAgZ2NoYXIqIG9yaWdpbmFsSWQgPSBnX3N0cmR1cChn
dGtfaW1fbXVsdGljb250ZXh0X2dldF9jb250ZXh0X2lkKEdUS19JTV9NVUxUSUNPTlRFWFQoaW1D
b250ZXh0KSkpOworICAgIGd0a19pbV9tdWx0aWNvbnRleHRfc2V0X2NvbnRleHRfaWQoR1RLX0lN
X01VTFRJQ09OVEVYVChpbUNvbnRleHQpLCAieGltIik7CisKKyAgICAvLyBUZXN0IHRoYXQgY29t
bWl0cyB0aGF0IGhhcHBlbiBvdXRzaWRlIG9mIGtleSBldmVudHMKKyAgICAvLyBjaGFuZ2UgdGhl
IHRleHQgZmllbGQgaW1tZWRpYXRlbHkuIFRoaXMgY2xvc2VseSByZXBsaWNhdGVzCisgICAgLy8g
dGhlIGJlaGF2aW9yIG9mIFNDSU0uCisgICAgZml4dHVyZS0+aW5mby0+dGV4dCA9IGdfc3RyZHVw
KCJkZWJpYW4iKTsKKyAgICBpZiAoIWd0a190ZXN0X3dpZGdldF9zZW5kX2tleShHVEtfV0lER0VU
KGZpeHR1cmUtPndlYlZpZXcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Rr
X3VuaWNvZGVfdG9fa2V5dmFsKCdkJyksIDApKQorICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hl
ZCgpOworICAgIGlmICghZ3RrX3Rlc3Rfd2lkZ2V0X3NlbmRfa2V5KEdUS19XSURHRVQoZml4dHVy
ZS0+d2ViVmlldyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdka191bmljb2RlX3Rv
X2tleXZhbCgnZScpLCAwKSkKKyAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICBp
ZiAoIWd0a190ZXN0X3dpZGdldF9zZW5kX2tleShHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGtfdW5pY29kZV90b19rZXl2YWwoJ2In
KSwgMCkpCisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgaWYgKCFndGtfdGVz
dF93aWRnZXRfc2VuZF9rZXkoR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2RrX3VuaWNvZGVfdG9fa2V5dmFsKCdpJyksIDApKQorICAg
ICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgIGlmICghZ3RrX3Rlc3Rfd2lkZ2V0X3Nl
bmRfa2V5KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldyksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdka191bmljb2RlX3RvX2tleXZhbCgnYScpLCAwKSkKKyAgICAgICAgZ19hc3Nl
cnRfbm90X3JlYWNoZWQoKTsKKyAgICBpZiAoIWd0a190ZXN0X3dpZGdldF9zZW5kX2tleShHVEtf
V0lER0VUKGZpeHR1cmUtPndlYlZpZXcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
ZGtfdW5pY29kZV90b19rZXl2YWwoJ24nKSwgMCkpCisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFj
aGVkKCk7CisKKyAgICBndGtfaW1fbXVsdGljb250ZXh0X3NldF9jb250ZXh0X2lkKEdUS19JTV9N
VUxUSUNPTlRFWFQoaW1Db250ZXh0KSwgb3JpZ2luYWxJZCk7CisgICAgZ19mcmVlKG9yaWdpbmFs
SWQpOworICAgIGdfb2JqZWN0X3VucmVmKGltQ29udGV4dCk7CisKKyAgICBnX2lkbGVfYWRkKHZl
cmlmeV9jb250ZW50cywgZml4dHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfeGltKEtleUV2
ZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIHNldHVwX2tl
eWV2ZW50X3Rlc3QoZml4dHVyZSwgZGF0YSwgR19DQUxMQkFDSyh0ZXN0X3hpbV9sb2FkX3N0YXR1
c19jYikpOworfQorI2VuZGlmCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sK
KyAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7CisKKyAgICBnX3Rlc3RfYnVn
X2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOworCisKKyAgICAvLyBXZSdsbCB0ZXN0
IGlucHV0IG9uIGEgc2xldyBvZiBkaWZmZXJlbnQgbm9kZSB0eXBlcy4gS2V5IGV2ZW50cyB0bwor
ICAgIC8vIHRleHQgaW5wdXRzIGFuZCBlZGl0YWJsZSBkaXZzIHNob3VsZCBiZSBtYXJrZWQgYXMg
aGFuZGxlZC4gS2V5IGV2ZW50cworICAgIC8vIHRvIGJ1dHRvbnMgYW5kIGxpbmtzIHNob3VsZCBu
b3QuCisgICAgY29uc3QgY2hhciogdGV4dGlucHV0X2h0bWwgPSAiPGh0bWw+PGJvZHk+PGlucHV0
IGlkPVwiaW5cIiB0eXBlPVwidGV4dFwiPiIKKyAgICAgICAgIjxzY3JpcHQ+ZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ2luJykuZm9jdXMoKTs8L3NjcmlwdD48L2JvZHk+PC9odG1sPiI7CisgICAg
Y29uc3QgY2hhciogYnV0dG9uX2h0bWwgPSAiPGh0bWw+PGJvZHk+PGlucHV0IGlkPVwiaW5cIiB0
eXBlPVwiYnV0dG9uXCI+IgorICAgICAgICAiPHNjcmlwdD5kb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnaW4nKS5mb2N1cygpOzwvc2NyaXB0PjwvYm9keT48L2h0bWw+IjsKKyAgICBjb25zdCBjaGFy
KiBsaW5rX2h0bWwgPSAiPGh0bWw+PGJvZHk+PGEgaHJlZj1cImh0dHA6Ly93d3cuZ25vbWUub3Jn
XCIgaWQ9XCJpblwiPiIKKyAgICAgICAgIkxJTktZIE1DTElOS0VSU09OPC9hPjxzY3JpcHQ+ZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2luJykuZm9jdXMoKTs8L3NjcmlwdD4iCisgICAgICAgICI8
L2JvZHk+PC9odG1sPiI7CisgICAgY29uc3QgY2hhciogZGl2X2h0bWwgPSAiPGh0bWw+PGJvZHk+
PGRpdiBpZD1cImluXCIgY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiPiIKKyAgICAgICAgIjxzY3Jp
cHQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2luJykuZm9jdXMoKTs8L3NjcmlwdD48L2JvZHk+
PC9odG1sPiI7CisKKyAgICAvLyBUaGVzZSBhcmUgc2ltaWxhciB0byB0aGUgYmxvY2tzIGFib3Zl
LCBidXQgdGhleSBzaG91bGQgYmxvY2sgdGhlIGZpcnN0CisgICAgLy8ga2V5cHJlc3MgbW9kaWZ5
aW5nIHRoZSBlZGl0YWJsZSBub2RlLgorICAgIGNvbnN0IGNoYXIqIHRleHRpbnB1dF9odG1sX2Js
b2NraW5nID0gIjxodG1sPjxib2R5PiIKKyAgICAgICAgIjxpbnB1dCBpZD1cImluXCIgdHlwZT1c
InRleHRcIiAiCisgICAgICAgICJvbmtleXByZXNzPVwiaWYgKGZpcnN0KSB7ZXZlbnQucHJldmVu
dERlZmF1bHQoKTtmaXJzdD1mYWxzZTt9XCI+IgorICAgICAgICAiPHNjcmlwdD5maXJzdCA9IHRy
dWU7XG5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW4nKS5mb2N1cygpOzwvc2NyaXB0PlxuIgor
ICAgICAgICAiPC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4iOworICAgIGNvbnN0IGNoYXIqIGRpdl9o
dG1sX2Jsb2NraW5nID0gIjxodG1sPjxib2R5PiIKKyAgICAgICAgIjxkaXYgaWQ9XCJpblwiIGNv
bnRlbnRlZGl0YWJsZT1cInRydWVcIiAiCisgICAgICAgICJvbmtleXByZXNzPVwiaWYgKGZpcnN0
KSB7ZXZlbnQucHJldmVudERlZmF1bHQoKTtmaXJzdD1mYWxzZTt9XCI+IgorICAgICAgICAiPHNj
cmlwdD5maXJzdCA9IHRydWU7IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbicpLmZvY3VzKCk7
PC9zY3JpcHQ+XG4iCisgICAgICAgICI8L3NjcmlwdD48L2JvZHk+PC9odG1sPiI7CisKKyAgICBn
X3Rlc3RfYWRkKCIvd2Via2l0L2tleWV2ZW50cy9ldmVudC10ZXh0aW5wdXQiLCBLZXlFdmVudEZp
eHR1cmUsCisgICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KHRleHRpbnB1dF9odG1sLCBUUlVF
KSwKKyAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3NldHVwLAorICAgICAgICAgICAg
ICAgdGVzdF9rZXlwcmVzc19ldmVudHMsCisgICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVy
ZV90ZWFyZG93bik7CisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9rZXlldmVudHMvZXZlbnQtYnV0
dG9ucyIsIEtleUV2ZW50Rml4dHVyZSwKKyAgICAgICAgICAgICAgIHRlc3RfaW5mb19uZXcoYnV0
dG9uX2h0bWwsIEZBTFNFKSwKKyAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3NldHVw
LAorICAgICAgICAgICAgICAgdGVzdF9rZXlwcmVzc19ldmVudHMsCisgICAgICAgICAgICAgICBr
ZXlfZXZlbnRfZml4dHVyZV90ZWFyZG93bik7CisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9rZXll
dmVudHMvZXZlbnQtbGluayIsIEtleUV2ZW50Rml4dHVyZSwKKyAgICAgICAgICAgICAgIHRlc3Rf
aW5mb19uZXcobGlua19odG1sLCBGQUxTRSksCisgICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4
dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3Rfa2V5cHJlc3NfZXZlbnRzLAorICAgICAg
ICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfdGVhcmRvd24pOworICAgIGdfdGVzdF9hZGQoIi93
ZWJraXQva2V5ZXZlbnQvZXZlbnQtZGl2IiwgS2V5RXZlbnRGaXh0dXJlLAorICAgICAgICAgICAg
ICAgdGVzdF9pbmZvX25ldyhkaXZfaHRtbCwgVFJVRSksCisgICAgICAgICAgICAgICBrZXlfZXZl
bnRfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3Rfa2V5cHJlc3NfZXZlbnRzLAor
ICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfdGVhcmRvd24pOworICAgIGdfdGVzdF9h
ZGQoIi93ZWJraXQva2V5ZXZlbnQvaW1lLXRleHRpbnB1dCIsIEtleUV2ZW50Rml4dHVyZSwKKyAg
ICAgICAgICAgICAgIHRlc3RfaW5mb19uZXcodGV4dGlucHV0X2h0bWwsIFRSVUUpLAorICAgICAg
ICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0X2lt
ZSwKKyAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3RlYXJkb3duKTsKKyAgICBnX3Rl
c3RfYWRkKCIvd2Via2l0L2tleWV2ZW50L2ltZS1kaXYiLCBLZXlFdmVudEZpeHR1cmUsCisgICAg
ICAgICAgICAgICB0ZXN0X2luZm9fbmV3KGRpdl9odG1sLCBUUlVFKSwKKyAgICAgICAgICAgICAg
IGtleV9ldmVudF9maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF9pbWUsCisgICAg
ICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV90ZWFyZG93bik7CisgICAgZ190ZXN0X2FkZCgi
L3dlYmtpdC9rZXlldmVudC9ibG9jay10ZXh0aW5wdXQiLCBLZXlFdmVudEZpeHR1cmUsCisgICAg
ICAgICAgICAgICB0ZXN0X2luZm9fbmV3KHRleHRpbnB1dF9odG1sX2Jsb2NraW5nLCBUUlVFKSwK
KyAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAg
dGVzdF9ibG9ja2luZywKKyAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3RlYXJkb3du
KTsKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2tleWV2ZW50L2Jsb2NrLWRpdiIsIEtleUV2ZW50
Rml4dHVyZSwKKyAgICAgICAgICAgICAgIHRlc3RfaW5mb19uZXcoZGl2X2h0bWxfYmxvY2tpbmcs
IFRSVUUpLAorICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfc2V0dXAsCisgICAgICAg
ICAgICAgICB0ZXN0X2Jsb2NraW5nLAorICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVf
dGVhcmRvd24pOworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpCisgICAgZ190ZXN0X2Fk
ZCgiL3dlYmtpdC9rZXlldmVudC94aW0tdGV4dGlucHV0IiwgS2V5RXZlbnRGaXh0dXJlLAorICAg
ICAgICAgICAgICAgdGVzdF9pbmZvX25ldyh0ZXh0aW5wdXRfaHRtbCwgVFJVRSksCisgICAgICAg
ICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3RfeGlt
LAorICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfdGVhcmRvd24pOworICAgIGdfdGVz
dF9hZGQoIi93ZWJraXQva2V5ZXZlbnQveGltLWRpdiIsIEtleUV2ZW50Rml4dHVyZSwKKyAgICAg
ICAgICAgICAgIHRlc3RfaW5mb19uZXcoZGl2X2h0bWwsIFRSVUUpLAorICAgICAgICAgICAgICAg
a2V5X2V2ZW50X2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0X3hpbSwKKyAgICAg
ICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3RlYXJkb3duKTsKKyNlbmRpZgorCisgICAgcmV0
dXJuIGdfdGVzdF9ydW4oKTsKK30KKwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRHdGsvdGVzdGxvYWRpbmcuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0R3RrL3Rlc3Rsb2FkaW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uYTBhOTIwZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0R3RrL3Rlc3Rsb2FkaW5nLmMKQEAgLTAsMCArMSw0MzUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDksIDIwMTAgR3VzdGF2byBOb3JvbmhhIFNpbHZhCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPGd0ay9ndGsu
aD4KKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNs
dWRlIDx3ZWJraXQvd2Via2l0Lmg+CisKKy8qIFRoaXMgc3RyaW5nIGhhcyB0byBiZSByYXRoZXIg
YmlnIGJlY2F1c2Ugb2YgdGhlIGNhbmNlbGxlZCB0ZXN0IC0gaXQKKyAqIGxvb2tzIGxpa2Ugc291
cCByZWZ1c2VzIHRvIHNlbmQgb3IgcmVjZWl2ZSBhIHRvbyBzbWFsbCBjaHVuayAqLworI2RlZmlu
ZSBIVE1MX1NUUklORyAiPGh0bWw+PGJvZHk+VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nITwvYm9keT48L2h0bWw+IgorCitTb3VwVVJJ
KiBiYXNlX3VyaTsKKworLyogRm9yIHJlYWwgcmVxdWVzdCB0ZXN0aW5nICovCitzdGF0aWMgdm9p
ZAorc2VydmVyX2NhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1zZywK
KyAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiBxdWVyeSwKKyAg
ICAgICAgICAgICAgICBTb3VwQ2xpZW50Q29udGV4dCogY29udGV4dCwgZ3BvaW50ZXIgZGF0YSkK
K3sKKyAgICBpZiAobXNnLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7CisgICAgICAgIHNv
dXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1zZywgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1z
ZywgU09VUF9TVEFUVVNfT0spOworCisgICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvdGVzdF9s
b2FkaW5nX3N0YXR1cyIpIHx8IGdfc3RyX2VxdWFsKHBhdGgsICIvdGVzdF9sb2FkaW5nX3N0YXR1
czIiKSkKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1zZy0+cmVzcG9uc2VfYm9k
eSwgU09VUF9NRU1PUllfU1RBVElDLCBIVE1MX1NUUklORywgc3RybGVuKEhUTUxfU1RSSU5HKSk7
CisgICAgZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi90ZXN0X2xvYWRfZXJyb3IiKSkgewor
ICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX0NBTlRfQ09O
TkVDVCk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3Rlc3RfbG9hZGluZ19j
YW5jZWxsZWQiKSkgeworICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19zZXRfZW5jb2Rpbmco
bXNnLT5yZXNwb25zZV9oZWFkZXJzLCBTT1VQX0VOQ09ESU5HX0NIVU5LRUQpOworICAgICAgICBz
b3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobXNnLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9T
VEFUSUMsIEhUTUxfU1RSSU5HLCBzdHJsZW4oSFRNTF9TVFJJTkcpKTsKKyAgICAgICAgc291cF9z
ZXJ2ZXJfdW5wYXVzZV9tZXNzYWdlKHNlcnZlciwgbXNnKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1zZy0+cmVzcG9uc2VfYm9keSk7
Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OworICAg
IEdNYWluTG9vcCAqbG9vcDsKKyAgICBnYm9vbGVhbiBoYXNfYmVlbl9wcm92aXNpb25hbDsKKyAg
ICBnYm9vbGVhbiBoYXNfYmVlbl9jb21taXR0ZWQ7CisgICAgZ2Jvb2xlYW4gaGFzX2JlZW5fZmly
c3RfdmlzdWFsbHlfbm9uX2VtcHR5X2xheW91dDsKKyAgICBnYm9vbGVhbiBoYXNfYmVlbl9maW5p
c2hlZDsKKyAgICBnYm9vbGVhbiBoYXNfYmVlbl9mYWlsZWQ7CisgICAgZ2Jvb2xlYW4gaGFzX2Jl
ZW5fbG9hZF9lcnJvcjsKK30gV2ViTG9hZGluZ0ZpeHR1cmU7CisKK3N0YXRpYyB2b2lkIHdlYl9s
b2FkaW5nX2ZpeHR1cmVfc2V0dXAoV2ViTG9hZGluZ0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBv
aW50ZXIgZGF0YSkKK3sKKyAgICBmaXh0dXJlLT53ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdl
YmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZml4dHVyZS0+bG9vcCA9IGdfbWFpbl9sb29wX25l
dyhOVUxMLCBUUlVFKTsKKyAgICBnX29iamVjdF9yZWZfc2luayhmaXh0dXJlLT53ZWJWaWV3KTsK
KyAgICBmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCA9IEZBTFNFOworICAgIGZpeHR1cmUt
Pmhhc19iZWVuX2NvbW1pdHRlZCA9IEZBTFNFOworICAgIGZpeHR1cmUtPmhhc19iZWVuX2ZpcnN0
X3Zpc3VhbGx5X25vbl9lbXB0eV9sYXlvdXQgPSBGQUxTRTsKKyAgICBmaXh0dXJlLT5oYXNfYmVl
bl9maW5pc2hlZCA9IEZBTFNFOworICAgIGZpeHR1cmUtPmhhc19iZWVuX2ZhaWxlZCA9IEZBTFNF
OworICAgIGZpeHR1cmUtPmhhc19iZWVuX2xvYWRfZXJyb3IgPSBGQUxTRTsKK30KKworc3RhdGlj
IHZvaWQgd2ViX2xvYWRpbmdfZml4dHVyZV90ZWFyZG93bihXZWJMb2FkaW5nRml4dHVyZSogZml4
dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUt
PndlYlZpZXcpOworICAgIGdfbWFpbl9sb29wX3VucmVmKGZpeHR1cmUtPmxvb3ApOworfQorCitz
dGF0aWMgY2hhciogZ2V0X3VyaV9mb3JfcGF0aChjb25zdCBjaGFyKiBwYXRoKQoreworICAgIFNv
dXBVUkkqIHVyaTsKKyAgICBjaGFyKiB1cmlfc3RyaW5nOworCisgICAgdXJpID0gc291cF91cmlf
bmV3X3dpdGhfYmFzZShiYXNlX3VyaSwgcGF0aCk7CisgICAgdXJpX3N0cmluZyA9IHNvdXBfdXJp
X3RvX3N0cmluZyh1cmksIEZBTFNFKTsKKyAgICBzb3VwX3VyaV9mcmVlICh1cmkpOworCisgICAg
cmV0dXJuIHVyaV9zdHJpbmc7Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRfZmluaXNoZWRfY2IoV2Vi
S2l0V2ViVmlldyogd2ViX3ZpZXcsIFdlYktpdFdlYkZyYW1lKiB3ZWJfZnJhbWUsIFdlYkxvYWRp
bmdGaXh0dXJlKiBmaXh0dXJlKQoreworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX3By
b3Zpc2lvbmFsKTsKKyAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9jb21taXR0ZWQpOwor
ICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX2ZpcnN0X3Zpc3VhbGx5X25vbl9lbXB0eV9s
YXlvdXQpOworCisgICAgZ19tYWluX2xvb3BfcXVpdChmaXh0dXJlLT5sb29wKTsKK30KKworCitz
dGF0aWMgdm9pZCBzdGF0dXNfY2hhbmdlZF9jYihHT2JqZWN0KiBvYmplY3QsIEdQYXJhbVNwZWMq
IHBzcGVjLCBXZWJMb2FkaW5nRml4dHVyZSogZml4dHVyZSkKK3sKKyAgICBXZWJLaXRMb2FkU3Rh
dHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMoV0VCS0lUX1dFQl9W
SUVXKG9iamVjdCkpOworCisgICAgc3dpdGNoIChzdGF0dXMpIHsKKyAgICBjYXNlIFdFQktJVF9M
T0FEX1BST1ZJU0lPTkFMOgorICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fcHJv
dmlzaW9uYWwpOworICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fY29tbWl0dGVk
KTsKKyAgICAgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX2ZpcnN0X3Zpc3VhbGx5X25v
bl9lbXB0eV9sYXlvdXQpOworICAgICAgICBmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCA9
IFRSVUU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0xPQURfQ09NTUlUVEVEOgor
ICAgICAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCk7CisgICAgICAg
IGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNfYmVlbl9jb21taXR0ZWQpOworICAgICAgICBnX2Fzc2Vy
dCghZml4dHVyZS0+aGFzX2JlZW5fZmlyc3RfdmlzdWFsbHlfbm9uX2VtcHR5X2xheW91dCk7Cisg
ICAgICAgIGZpeHR1cmUtPmhhc19iZWVuX2NvbW1pdHRlZCA9IFRSVUU7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgV0VCS0lUX0xPQURfRklSU1RfVklTVUFMTFlfTk9OX0VNUFRZX0xBWU9VVDoK
KyAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwpOworICAgICAg
ICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9jb21taXR0ZWQpOworICAgICAgICBnX2Fzc2Vy
dCghZml4dHVyZS0+aGFzX2JlZW5fZmlyc3RfdmlzdWFsbHlfbm9uX2VtcHR5X2xheW91dCk7Cisg
ICAgICAgIGZpeHR1cmUtPmhhc19iZWVuX2ZpcnN0X3Zpc3VhbGx5X25vbl9lbXB0eV9sYXlvdXQg
PSBUUlVFOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9MT0FEX0ZJTklTSEVEOgor
ICAgICAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCk7CisgICAgICAg
IGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX2NvbW1pdHRlZCk7CisgICAgICAgIGdfYXNzZXJ0
KGZpeHR1cmUtPmhhc19iZWVuX2ZpcnN0X3Zpc3VhbGx5X25vbl9lbXB0eV9sYXlvdXQpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgp
OworICAgIH0KK30KKworc3RhdGljIHZvaWQgdGVzdF9sb2FkaW5nX3N0YXR1cyhXZWJMb2FkaW5n
Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGNoYXIqIHVyaV9z
dHJpbmc7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0
YXR1cyhmaXh0dXJlLT53ZWJWaWV3KSwgPT0sIFdFQktJVF9MT0FEX1BST1ZJU0lPTkFMKTsKKwor
ICAgIGdfb2JqZWN0X2Nvbm5lY3QoR19PQkpFQ1QoZml4dHVyZS0+d2ViVmlldyksCisgICAgICAg
ICAgICAgICAgICAgICAic2lnbmFsOjpub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhz
dGF0dXNfY2hhbmdlZF9jYiksIGZpeHR1cmUsCisgICAgICAgICAgICAgICAgICAgICAic2lnbmFs
Ojpsb2FkLWZpbmlzaGVkIiwgR19DQUxMQkFDSyhsb2FkX2ZpbmlzaGVkX2NiKSwgZml4dHVyZSwK
KyAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgdXJpX3N0cmluZyA9IGdldF91cmlf
Zm9yX3BhdGgoIi90ZXN0X2xvYWRpbmdfc3RhdHVzIik7CisKKyAgICAvKiBsb2FkX3VyaSB3aWxs
IHRyaWdnZXIgdGhlIG5hdmlnYXRpb24tcG9saWN5LWRlY2lzaW9uLXJlcXVlc3RlZAorICAgICAq
IHNpZ25hbCBlbWlzc2lvbjsKKyAgICAgKi8KKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmko
Zml4dHVyZS0+d2ViVmlldywgdXJpX3N0cmluZyk7CisgICAgZ19mcmVlKHVyaV9zdHJpbmcpOwor
CisgICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1cmUtPmxvb3ApOworfQorCitzdGF0aWMgdm9pZCBs
b2FkX2Vycm9yX3N0YXR1c19jaGFuZ2VkX2NiKEdPYmplY3QqIG9iamVjdCwgR1BhcmFtU3BlYyog
cHNwZWMsIFdlYkxvYWRpbmdGaXh0dXJlKiBmaXh0dXJlKQoreworICAgIFdlYktpdExvYWRTdGF0
dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyhXRUJLSVRfV0VCX1ZJ
RVcob2JqZWN0KSk7CisKKyAgICBzd2l0Y2goc3RhdHVzKSB7CisgICAgY2FzZSBXRUJLSVRfTE9B
RF9QUk9WSVNJT05BTDoKKyAgICAgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX3Byb3Zp
c2lvbmFsKTsKKyAgICAgICAgZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwgPSBUUlVFOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9MT0FEX0NPTU1JVFRFRDoKKyAgICAgICAg
Z19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX2NvbW1pdHRlZCk7CisgICAgICAgIGZpeHR1cmUt
Pmhhc19iZWVuX2NvbW1pdHRlZCA9IFRSVUU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VC
S0lUX0xPQURfRklOSVNIRUQ6CisgICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX3By
b3Zpc2lvbmFsKTsKKyAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fbG9hZF9lcnJv
cik7CisgICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX2ZhaWxlZCk7CisgICAgICAg
IGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNfYmVlbl9maW5pc2hlZCk7CisgICAgICAgIGZpeHR1cmUt
Pmhhc19iZWVuX2ZpbmlzaGVkID0gVFJVRTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXRUJL
SVRfTE9BRF9GQUlMRUQ6CisgICAgICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNfYmVlbl9mYWls
ZWQpOworICAgICAgICBmaXh0dXJlLT5oYXNfYmVlbl9mYWlsZWQgPSBUUlVFOworICAgICAgICBn
X21haW5fbG9vcF9xdWl0KGZpeHR1cmUtPmxvb3ApOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBsb2FkX2Vy
cm9yX2NiKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFdlYkZyYW1lKiBmcmFtZSwgY29u
c3QgY2hhciogdXJpLCBHRXJyb3IgKmVycm9yLCBXZWJMb2FkaW5nRml4dHVyZSogZml4dHVyZSkK
K3sKKyAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCk7CisgICAgZ19h
c3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX2xvYWRfZXJyb3IpOworICAgIGZpeHR1cmUtPmhhc19i
ZWVuX2xvYWRfZXJyb3IgPSBUUlVFOworCisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMg
dm9pZCB0ZXN0X2xvYWRpbmdfZXJyb3IoV2ViTG9hZGluZ0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25z
dHBvaW50ZXIgZGF0YSkKK3sKKyAgICBjaGFyKiB1cmlfc3RyaW5nOworCisgICAgZ190ZXN0X2J1
ZygiMjg4NDIiKTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2ViVmlldywgImxv
YWQtZXJyb3IiLCBHX0NBTExCQUNLKGxvYWRfZXJyb3JfY2IpLCBmaXh0dXJlKTsKKyAgICBnX3Np
Z25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19D
QUxMQkFDSyhsb2FkX2Vycm9yX3N0YXR1c19jaGFuZ2VkX2NiKSwgZml4dHVyZSk7CisKKyAgICB1
cmlfc3RyaW5nID0gZ2V0X3VyaV9mb3JfcGF0aCgiL3Rlc3RfbG9hZF9lcnJvciIpOworICAgIHdl
YmtpdF93ZWJfdmlld19sb2FkX3VyaShmaXh0dXJlLT53ZWJWaWV3LCB1cmlfc3RyaW5nKTsKKyAg
ICBnX2ZyZWUodXJpX3N0cmluZyk7CisKKyAgICBnX21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9v
cCk7CisKKyAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCk7CisgICAg
Z19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX2NvbW1pdHRlZCk7CisgICAgZ19hc3NlcnQoZml4
dHVyZS0+aGFzX2JlZW5fbG9hZF9lcnJvcik7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2Jl
ZW5fZmFpbGVkKTsKKyAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fZmluaXNoZWQpOwor
fQorCisvKiBDYW5jZWxsZWQgbG9hZCAqLworCitzdGF0aWMgZ2Jvb2xlYW4gbG9hZF9jYW5jZWxs
ZWRfY2IoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLCBjb25z
dCBjaGFyKiB1cmksIEdFcnJvciAqZXJyb3IsIFdlYkxvYWRpbmdGaXh0dXJlKiBmaXh0dXJlKQor
eworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsKTsKKyAgICBnX2Fz
c2VydChmaXh0dXJlLT5oYXNfYmVlbl9mYWlsZWQpOworICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5o
YXNfYmVlbl9sb2FkX2Vycm9yKTsKKyAgICBnX2Fzc2VydChlcnJvci0+Y29kZSA9PSBXRUJLSVRf
TkVUV09SS19FUlJPUl9DQU5DRUxMRUQpOworICAgIGZpeHR1cmUtPmhhc19iZWVuX2xvYWRfZXJy
b3IgPSBUUlVFOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBzdG9w
X2xvYWQgKGdwb2ludGVyIGRhdGEpCit7CisgICAgd2Via2l0X3dlYl92aWV3X3N0b3BfbG9hZGlu
ZyhXRUJLSVRfV0VCX1ZJRVcoZGF0YSkpOworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGlj
IHZvaWQgbG9hZF9jYW5jZWxsZWRfc3RhdHVzX2NoYW5nZWRfY2IoR09iamVjdCogb2JqZWN0LCBH
UGFyYW1TcGVjKiBwc3BlYywgV2ViTG9hZGluZ0ZpeHR1cmUqIGZpeHR1cmUpCit7CisgICAgV2Vi
S2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKFdF
QktJVF9XRUJfVklFVyhvYmplY3QpKTsKKworICAgIHN3aXRjaChzdGF0dXMpIHsKKyAgICBjYXNl
IFdFQktJVF9MT0FEX1BST1ZJU0lPTkFMOgorICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFz
X2JlZW5fcHJvdmlzaW9uYWwpOworICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5f
ZmFpbGVkKTsKKyAgICAgICAgZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwgPSBUUlVFOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9MT0FEX0NPTU1JVFRFRDoKKyAgICAgICAg
Z19pZGxlX2FkZCAoc3RvcF9sb2FkLCBvYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFdFQktJVF9MT0FEX0ZBSUxFRDoKKyAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5f
cHJvdmlzaW9uYWwpOworICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fZmFpbGVk
KTsKKyAgICAgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX2xvYWRfZXJyb3IpOworICAg
ICAgICBmaXh0dXJlLT5oYXNfYmVlbl9mYWlsZWQgPSBUUlVFOworICAgICAgICBnX21haW5fbG9v
cF9xdWl0KGZpeHR1cmUtPmxvb3ApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9M
T0FEX0ZJTklTSEVEOgorICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2
b2lkIHRlc3RfbG9hZGluZ19jYW5jZWxsZWQoV2ViTG9hZGluZ0ZpeHR1cmUqIGZpeHR1cmUsIGdj
b25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBjaGFyKiB1cmlfc3RyaW5nOworCisgICAgZ190ZXN0
X2J1ZygiMjk2NDQiKTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2ViVmlldywg
ImxvYWQtZXJyb3IiLCBHX0NBTExCQUNLKGxvYWRfY2FuY2VsbGVkX2NiKSwgZml4dHVyZSk7Cisg
ICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1
cyIsIEdfQ0FMTEJBQ0sobG9hZF9jYW5jZWxsZWRfc3RhdHVzX2NoYW5nZWRfY2IpLCBmaXh0dXJl
KTsKKworICAgIHVyaV9zdHJpbmcgPSBnZXRfdXJpX2Zvcl9wYXRoKCIvdGVzdF9sb2FkaW5nX2Nh
bmNlbGxlZCIpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaShmaXh0dXJlLT53ZWJWaWV3
LCB1cmlfc3RyaW5nKTsKKyAgICBnX2ZyZWUodXJpX3N0cmluZyk7CisKKyAgICBnX21haW5fbG9v
cF9ydW4oZml4dHVyZS0+bG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRfZ29iYWNrX3N0YXR1
c19jaGFuZ2VkX2NiKEdPYmplY3QqIG9iamVjdCwgR1BhcmFtU3BlYyogcHNwZWMsIFdlYkxvYWRp
bmdGaXh0dXJlKiBmaXh0dXJlKQoreworICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Vi
a2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyhXRUJLSVRfV0VCX1ZJRVcob2JqZWN0KSk7CisK
KyAgICBzd2l0Y2goc3RhdHVzKSB7CisgICAgY2FzZSBXRUJLSVRfTE9BRF9QUk9WSVNJT05BTDoK
KyAgICAgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsKTsKKyAgICAg
ICAgZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwgPSBUUlVFOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFdFQktJVF9MT0FEX0NPTU1JVFRFRDoKKyAgICAgICAgZ19hc3NlcnQoZml4dHVy
ZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwpOworICAgICAgICBmaXh0dXJlLT5oYXNfYmVlbl9jb21t
aXR0ZWQgPSBUUlVFOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9MT0FEX0ZBSUxF
RDoKKyAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBXRUJLSVRfTE9BRF9GSU5JU0hFRDoKKyAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFz
X2JlZW5fcHJvdmlzaW9uYWwpOworICAgICAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9j
b21taXR0ZWQpOworICAgICAgICBmaXh0dXJlLT5oYXNfYmVlbl9maW5pc2hlZCA9IFRSVUU7Cisg
ICAgICAgIGdfbWFpbl9sb29wX3F1aXQoZml4dHVyZS0+bG9vcCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgbG9h
ZF93ZW50YmFja19zdGF0dXNfY2hhbmdlZF9jYihHT2JqZWN0KiBvYmplY3QsIEdQYXJhbVNwZWMq
IHBzcGVjLCBXZWJMb2FkaW5nRml4dHVyZSogZml4dHVyZSkKK3sKKyAgICBXZWJLaXRMb2FkU3Rh
dHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMoV0VCS0lUX1dFQl9W
SUVXKG9iamVjdCkpOworICAgIGNoYXIqIHVyaV9zdHJpbmc7CisgICAgY2hhciogdXJpX3N0cmlu
ZzI7CisKKyAgICB1cmlfc3RyaW5nID0gZ2V0X3VyaV9mb3JfcGF0aCgiL3Rlc3RfbG9hZGluZ19z
dGF0dXMiKTsKKyAgICB1cmlfc3RyaW5nMiA9IGdldF91cmlfZm9yX3BhdGgoIi90ZXN0X2xvYWRp
bmdfc3RhdHVzMiIpOworCisgICAgc3dpdGNoKHN0YXR1cykgeworICAgIGNhc2UgV0VCS0lUX0xP
QURfUFJPVklTSU9OQUw6CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdf
Z2V0X3VyaShmaXh0dXJlLT53ZWJWaWV3KSwgPT0sIHVyaV9zdHJpbmcyKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBXRUJLSVRfTE9BRF9DT01NSVRURUQ6CisgICAgICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaShmaXh0dXJlLT53ZWJWaWV3KSwgPT0sIHVyaV9z
dHJpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9MT0FEX0ZBSUxFRDoKKyAg
ICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBX
RUJLSVRfTE9BRF9GSU5JU0hFRDoKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJf
dmlld19nZXRfdXJpKGZpeHR1cmUtPndlYlZpZXcpLCA9PSwgdXJpX3N0cmluZyk7CisgICAgICAg
IGdfbWFpbl9sb29wX3F1aXQoZml4dHVyZS0+bG9vcCk7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGdfZnJlZSh1cmlfc3RyaW5nKTsK
KyAgICBnX2ZyZWUodXJpX3N0cmluZzIpOworfQorCitzdGF0aWMgdm9pZCBsb2FkX2Vycm9yX3Rl
c3QoV2ViS2l0V2ViVmlldyogd2VidmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLCBjb25zdCBj
aGFyKiB1cmksIEdFcnJvciogZXJyb3IpCit7CisgICAgZ19kZWJ1ZygiRXJyb3I6ICVzIiwgZXJy
b3ItPm1lc3NhZ2UpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2xvYWRpbmdfZ29iYWNrKFdlYkxv
YWRpbmdGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgY2hhciog
dXJpX3N0cmluZzsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2ViVmlldywgIm5v
dGlmeTo6bG9hZC1zdGF0dXMiLCBHX0NBTExCQUNLKGxvYWRfZ29iYWNrX3N0YXR1c19jaGFuZ2Vk
X2NiKSwgZml4dHVyZSk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcs
ICJsb2FkLWVycm9yIiwgR19DQUxMQkFDSyhsb2FkX2Vycm9yX3Rlc3QpLCBmaXh0dXJlKTsKKwor
ICAgIHVyaV9zdHJpbmcgPSBnZXRfdXJpX2Zvcl9wYXRoKCIvdGVzdF9sb2FkaW5nX3N0YXR1cyIp
OworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaShmaXh0dXJlLT53ZWJWaWV3LCB1cmlfc3Ry
aW5nKTsKKyAgICBnX2ZyZWUodXJpX3N0cmluZyk7CisKKyAgICBnX21haW5fbG9vcF9ydW4oZml4
dHVyZS0+bG9vcCk7CisKKyAgICBmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCA9IEZBTFNF
OworICAgIGZpeHR1cmUtPmhhc19iZWVuX2NvbW1pdHRlZCA9IEZBTFNFOworICAgIGZpeHR1cmUt
Pmhhc19iZWVuX2ZpcnN0X3Zpc3VhbGx5X25vbl9lbXB0eV9sYXlvdXQgPSBGQUxTRTsKKyAgICBm
aXh0dXJlLT5oYXNfYmVlbl9maW5pc2hlZCA9IEZBTFNFOworICAgIGZpeHR1cmUtPmhhc19iZWVu
X2ZhaWxlZCA9IEZBTFNFOworICAgIGZpeHR1cmUtPmhhc19iZWVuX2xvYWRfZXJyb3IgPSBGQUxT
RTsKKworICAgIHVyaV9zdHJpbmcgPSBnZXRfdXJpX2Zvcl9wYXRoKCIvdGVzdF9sb2FkaW5nX3N0
YXR1czIiKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkoZml4dHVyZS0+d2ViVmlldywg
dXJpX3N0cmluZyk7CisgICAgZ19mcmVlKHVyaV9zdHJpbmcpOworCisgICAgZ19tYWluX2xvb3Bf
cnVuKGZpeHR1cmUtPmxvb3ApOworCisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9i
eV9mdW5jKGZpeHR1cmUtPndlYlZpZXcsIGxvYWRfZ29iYWNrX3N0YXR1c19jaGFuZ2VkX2NiLCBm
aXh0dXJlKTsKKworICAgIGZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsID0gRkFMU0U7Cisg
ICAgZml4dHVyZS0+aGFzX2JlZW5fY29tbWl0dGVkID0gRkFMU0U7CisgICAgZml4dHVyZS0+aGFz
X2JlZW5fZmlyc3RfdmlzdWFsbHlfbm9uX2VtcHR5X2xheW91dCA9IEZBTFNFOworICAgIGZpeHR1
cmUtPmhhc19iZWVuX2ZpbmlzaGVkID0gRkFMU0U7CisgICAgZml4dHVyZS0+aGFzX2JlZW5fZmFp
bGVkID0gRkFMU0U7CisgICAgZml4dHVyZS0+aGFzX2JlZW5fbG9hZF9lcnJvciA9IEZBTFNFOwor
CisgICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0
YXR1cyIsIEdfQ0FMTEJBQ0sobG9hZF93ZW50YmFja19zdGF0dXNfY2hhbmdlZF9jYiksIGZpeHR1
cmUpOworICAgIHdlYmtpdF93ZWJfdmlld19nb19iYWNrKGZpeHR1cmUtPndlYlZpZXcpOworCisg
ICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1cmUtPmxvb3ApOworCisgICAgZ19zaWduYWxfaGFuZGxl
cnNfZGlzY29ubmVjdF9ieV9mdW5jKGZpeHR1cmUtPndlYlZpZXcsIGxvYWRfd2VudGJhY2tfc3Rh
dHVzX2NoYW5nZWRfY2IsIGZpeHR1cmUpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioq
IGFyZ3YpCit7CisgICAgU291cFNlcnZlciogc2VydmVyOworCisgICAgZ3RrX3Rlc3RfaW5pdCgm
YXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAgc2VydmVyID0gc291cF9zZXJ2ZXJfbmV3KFNPVVBf
U0VSVkVSX1BPUlQsIDAsIE5VTEwpOworICAgIHNvdXBfc2VydmVyX3J1bl9hc3luYyhzZXJ2ZXIp
OworCisgICAgc291cF9zZXJ2ZXJfYWRkX2hhbmRsZXIoc2VydmVyLCBOVUxMLCBzZXJ2ZXJfY2Fs
bGJhY2ssIE5VTEwsIE5VTEwpOworCisgICAgYmFzZV91cmkgPSBzb3VwX3VyaV9uZXcoImh0dHA6
Ly8xMjcuMC4wLjEvIik7CisgICAgc291cF91cmlfc2V0X3BvcnQoYmFzZV91cmksIHNvdXBfc2Vy
dmVyX2dldF9wb3J0KHNlcnZlcikpOworCisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2xvYWRpbmcvc3RhdHVz
IiwKKyAgICAgICAgICAgICAgIFdlYkxvYWRpbmdGaXh0dXJlLCBOVUxMLAorICAgICAgICAgICAg
ICAgd2ViX2xvYWRpbmdfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3RfbG9hZGlu
Z19zdGF0dXMsCisgICAgICAgICAgICAgICB3ZWJfbG9hZGluZ19maXh0dXJlX3RlYXJkb3duKTsK
KyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2xvYWRpbmcvZXJyb3IiLAorICAgICAgICAgICAgICAg
V2ViTG9hZGluZ0ZpeHR1cmUsIE5VTEwsCisgICAgICAgICAgICAgICB3ZWJfbG9hZGluZ19maXh0
dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF9sb2FkaW5nX2Vycm9yLAorICAgICAgICAg
ICAgICAgd2ViX2xvYWRpbmdfZml4dHVyZV90ZWFyZG93bik7CisgICAgZ190ZXN0X2FkZCgiL3dl
YmtpdC9sb2FkaW5nL2NhbmNlbGxlZCIsCisgICAgICAgICAgICAgICBXZWJMb2FkaW5nRml4dHVy
ZSwgTlVMTCwKKyAgICAgICAgICAgICAgIHdlYl9sb2FkaW5nX2ZpeHR1cmVfc2V0dXAsCisgICAg
ICAgICAgICAgICB0ZXN0X2xvYWRpbmdfY2FuY2VsbGVkLAorICAgICAgICAgICAgICAgd2ViX2xv
YWRpbmdfZml4dHVyZV90ZWFyZG93bik7CisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9sb2FkaW5n
L2dvYmFjayIsCisgICAgICAgICAgICAgICBXZWJMb2FkaW5nRml4dHVyZSwgTlVMTCwKKyAgICAg
ICAgICAgICAgIHdlYl9sb2FkaW5nX2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0
X2xvYWRpbmdfZ29iYWNrLAorICAgICAgICAgICAgICAgd2ViX2xvYWRpbmdfZml4dHVyZV90ZWFy
ZG93bik7CisgICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsKK30KKwpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdG1pbWVoYW5kbGluZy5jIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdG1pbWVoYW5kbGluZy5jCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjOTA2OTEKLS0tIC9kZXYvbnVsbAorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0bWltZWhhbmRsaW5nLmMKQEAg
LTAsMCArMSwyMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIE1pY2hhZWwgQWxv
bnpvCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR3VzdGF2byBOb3JvbmhhIFNpbHZhCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJ0ZXN0X3V0aWxzLmgiCisKKyNpbmNsdWRlIDxnbGliLmg+
CisjaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKyNp
bmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+CisjaW5jbHVkZSA8
dW5pc3RkLmg+CisKK0dNYWluTG9vcCogbG9vcDsKK1NvdXBTZXNzaW9uICpzZXNzaW9uOworY2hh
ciogYmFzZV91cmk7CisKKy8qIEZvciByZWFsIHJlcXVlc3QgdGVzdGluZyAqLworc3RhdGljIHZv
aWQKK3NlcnZlcl9jYWxsYmFjayhTb3VwU2VydmVyICpzZXJ2ZXIsIFNvdXBNZXNzYWdlICptc2cs
CisgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsIEdIYXNoVGFibGUgKnF1ZXJ5LAor
ICAgICAgICAgICAgICAgICBTb3VwQ2xpZW50Q29udGV4dCAqY29udGV4dCwgZ3BvaW50ZXIgZGF0
YSkKK3sKKyAgICBpZiAobXNnLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7CisgICAgICAg
IHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1zZywgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVE
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVz
KG1zZywgU09VUF9TVEFUVVNfT0spOworCisgICAgLyogUERGICovCisgICAgaWYgKGdfc3RyX2Vx
dWFsKHBhdGgsICIvcGRmIikpIHsKKyAgICAgICAgY2hhciogY29udGVudHM7CisgICAgICAgIGdz
aXplIGxlbmd0aDsKKyAgICAgICAgR0Vycm9yKiBlcnJvciA9IE5VTEw7CisKKyAgICAgICAgZ19m
aWxlX2dldF9jb250ZW50cygidGVzdC5wZGYiLCAmY29udGVudHMsICZsZW5ndGgsICZlcnJvcik7
CisgICAgICAgIGdfYXNzZXJ0KCFlcnJvcik7CisKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlf
YXBwZW5kKG1zZy0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgY29udGVudHMsIGxl
bmd0aCk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2h0bWwiKSkgeworICAg
ICAgICBjaGFyKiBjb250ZW50czsKKyAgICAgICAgZ3NpemUgbGVuZ3RoOworICAgICAgICBHRXJy
b3IqIGVycm9yID0gTlVMTDsKKworICAgICAgICBnX2ZpbGVfZ2V0X2NvbnRlbnRzKCJ0ZXN0Lmh0
bWwiLCAmY29udGVudHMsICZsZW5ndGgsICZlcnJvcik7CisgICAgICAgIGdfYXNzZXJ0KCFlcnJv
cik7CisKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1zZy0+cmVzcG9uc2VfYm9k
eSwgU09VUF9NRU1PUllfVEFLRSwgY29udGVudHMsIGxlbmd0aCk7CisgICAgfSBlbHNlIGlmIChn
X3N0cl9lcXVhbChwYXRoLCAiL3RleHQiKSkgeworICAgICAgICBjaGFyKiBjb250ZW50czsKKyAg
ICAgICAgZ3NpemUgbGVuZ3RoOworICAgICAgICBHRXJyb3IqIGVycm9yID0gTlVMTDsKKworICAg
ICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobXNnLT5yZXNwb25zZV9oZWFkZXJzLCAi
Q29udGVudC1EaXNwb3NpdGlvbiIsICJhdHRhY2htZW50OyBmaWxlbmFtZT10ZXN0LnR4dCIpOwor
CisgICAgICAgIGdfZmlsZV9nZXRfY29udGVudHMoInRlc3QudHh0IiwgJmNvbnRlbnRzLCAmbGVu
Z3RoLCAmZXJyb3IpOworICAgICAgICBnX2Fzc2VydCghZXJyb3IpOworCisgICAgICAgIHNvdXBf
bWVzc2FnZV9ib2R5X2FwcGVuZChtc2ctPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0Us
IGNvbnRlbnRzLCBsZW5ndGgpOworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBs
ZXRlKG1zZy0+cmVzcG9uc2VfYm9keSk7Cit9CisKK3N0YXRpYyB2b2lkIGlkbGVfcXVpdF9sb29w
X2NiKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBHUGFyYW1TcGVjKiBwc3BlYywgZ3BvaW50ZXIg
ZGF0YSkKK3sKKyAgICBpZiAod2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJfdmll
dykgPT0gV0VCS0lUX0xPQURfRklOSVNIRUQgfHwKKyAgICAgICAgd2Via2l0X3dlYl92aWV3X2dl
dF9sb2FkX3N0YXR1cyh3ZWJfdmlldykgPT0gV0VCS0lUX0xPQURfRkFJTEVEKQorICAgICAgICBn
X21haW5fbG9vcF9xdWl0KGxvb3ApOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gbWltZV90eXBlX3Bv
bGljeV9kZWNpc2lvbl9yZXF1ZXN0ZWRfY2IoV2ViS2l0V2ViVmlldyogdmlldywgV2ViS2l0V2Vi
RnJhbWUqIGZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0LCBjb25zdCBjaGFyKiBt
aW1lX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgV2ViS2l0V2ViUG9saWN5RGVjaXNpb24qIGRlY2lzaW9uLCBncG9pbnRlciBkYXRh
KQoreworICAgIGNoYXIqIHR5cGUgPSAoY2hhciopZGF0YTsKKworICAgIGlmIChnX3N0cl9lcXVh
bCh0eXBlLCAicGRmIikpIHsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKG1pbWVfdHlwZSwgPT0s
ICJhcHBsaWNhdGlvbi9wZGYiKTsKKyAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19j
YW5fc2hvd19taW1lX3R5cGUodmlldywgbWltZV90eXBlKSk7CisgICAgfSBlbHNlIGlmIChnX3N0
cl9lcXVhbCh0eXBlLCAiaHRtbCIpKSB7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cihtaW1lX3R5
cGUsID09LCAidGV4dC9odG1sIik7CisgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19j
YW5fc2hvd19taW1lX3R5cGUodmlldywgbWltZV90eXBlKSk7CisgICAgfSBlbHNlIGlmIChnX3N0
cl9lcXVhbCh0eXBlLCAidGV4dCIpKSB7CisgICAgICAgIFdlYktpdE5ldHdvcmtSZXNwb25zZSog
cmVzcG9uc2UgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9uZXR3b3JrX3Jlc3BvbnNlKGZyYW1lKTsK
KyAgICAgICAgU291cE1lc3NhZ2UqIG1lc3NhZ2UgPSB3ZWJraXRfbmV0d29ya19yZXNwb25zZV9n
ZXRfbWVzc2FnZShyZXNwb25zZSk7CisgICAgICAgIGNoYXIqIGRpc3Bvc2l0aW9uOworCisgICAg
ICAgIGdfYXNzZXJ0KG1lc3NhZ2UpOworICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRf
Y29udGVudF9kaXNwb3NpdGlvbihtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGlzcG9zaXRpb24s
IE5VTEwpOworICAgICAgICBnX29iamVjdF91bnJlZihyZXNwb25zZSk7CisKKyAgICAgICAgZ19h
c3NlcnRfY21wc3RyKGRpc3Bvc2l0aW9uLCA9PSwgImF0dGFjaG1lbnQiKTsKKyAgICAgICAgZ19m
cmVlKGRpc3Bvc2l0aW9uKTsKKworICAgICAgICBnX2Fzc2VydF9jbXBzdHIobWltZV90eXBlLCA9
PSwgInRleHQvcGxhaW4iKTsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2Nhbl9z
aG93X21pbWVfdHlwZSh2aWV3LCBtaW1lX3R5cGUpKTsKKyAgICB9CisKKyAgICBnX2ZyZWUodHlw
ZSk7CisKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RSZW1vdGVNaW1l
VHlwZShjb25zdCB2b2lkKiBkYXRhKQoreworICAgIGNvbnN0IGNoYXIqIG5hbWUgPSAoY29uc3Qg
Y2hhciopIGRhdGE7CisgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IFdFQktJVF9XRUJfVklFVyh3
ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKEdfT0JKRUNUKHZp
ZXcpKTsKKworICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisKKyAgICBn
X29iamVjdF9jb25uZWN0KEdfT0JKRUNUKHZpZXcpLAorICAgICAgICAgICAgICAgICAgICAgInNp
Z25hbDo6bm90aWZ5Ojpsb2FkLXN0YXR1cyIsIGlkbGVfcXVpdF9sb29wX2NiLCBOVUxMLAorICAg
ICAgICAgICAgICAgICAgICAgInNpZ25hbDo6bWltZS10eXBlLXBvbGljeS1kZWNpc2lvbi1yZXF1
ZXN0ZWQiLCBtaW1lX3R5cGVfcG9saWN5X2RlY2lzaW9uX3JlcXVlc3RlZF9jYiwgZ19zdHJkdXAo
bmFtZSksCisgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKworICAgIGNoYXIqIGVmZmVjdGl2
ZV91cmkgPSBnX3N0cmR1cF9wcmludGYoIiVzJXMiLCBiYXNlX3VyaSwgbmFtZSk7CisgICAgd2Vi
a2l0X3dlYl92aWV3X2xvYWRfdXJpKHZpZXcsIGVmZmVjdGl2ZV91cmkpOworICAgIGdfZnJlZShl
ZmZlY3RpdmVfdXJpKTsKKworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIGdfb2Jq
ZWN0X3VucmVmKHZpZXcpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0TG9jYWxNaW1lVHlwZShjb25z
dCB2b2lkKiBkYXRhKQoreworICAgICBjb25zdCBjaGFyKiB0eXBlTmFtZSA9IChjb25zdCBjaGFy
KikgZGF0YTsKKyAgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJr
aXRfd2ViX3ZpZXdfbmV3KCkpOworICAgICBnX29iamVjdF9yZWZfc2luayhHX09CSkVDVCh2aWV3
KSk7CisKKyAgICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKKworICAgICBn
X29iamVjdF9jb25uZWN0KEdfT0JKRUNUKHZpZXcpLAorICAgICAgICAgICAgICAgICAgICAgICJz
aWduYWw6Om5vdGlmeTo6bG9hZC1zdGF0dXMiLCBpZGxlX3F1aXRfbG9vcF9jYiwgTlVMTCwKKyAg
ICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjptaW1lLXR5cGUtcG9saWN5LWRlY2lzaW9uLXJl
cXVlc3RlZCIsIG1pbWVfdHlwZV9wb2xpY3lfZGVjaXNpb25fcmVxdWVzdGVkX2NiLCBnX3N0cmR1
cCh0eXBlTmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICAgZ2NoYXIq
IGZpbGVuYW1lID0gZ19zdHJkdXBfcHJpbnRmKCJ0ZXN0LiVzIiwgdHlwZU5hbWUpOworICAgICBH
RmlsZSogZmlsZSA9IGdfZmlsZV9uZXdfZm9yX3BhdGgoZmlsZW5hbWUpOworICAgICBnX2ZyZWUo
ZmlsZW5hbWUpOworCisgICAgIGdjaGFyKiBmaWxlVVJJID0gZ19maWxlX2dldF91cmkoZmlsZSk7
CisgICAgIGdfb2JqZWN0X3VucmVmKGZpbGUpOworCisgICAgIHdlYmtpdF93ZWJfdmlld19sb2Fk
X3VyaSh2aWV3LCBmaWxlVVJJKTsKKyAgICAgZ19mcmVlKGZpbGVVUkkpOworIAorICAgICBnX21h
aW5fbG9vcF9ydW4obG9vcCk7CisgICAgIGdfb2JqZWN0X3VucmVmKHZpZXcpOworfQorCitpbnQg
bWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgU291cFNlcnZlciogc2VydmVyOwor
ICAgIFNvdXBVUkkqIHNvdXBfdXJpOworCisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3Ys
IE5VTEwpOworCisgICAgLyogSG9wZWZ1bGx5IG1ha2UgdGVzdCBpbmRlcGVuZGVudCBvZiB0aGUg
cGF0aCBpdCdzIGNhbGxlZCBmcm9tLiAqLworICAgIHRlc3R1dGlsc19yZWxhdGl2ZV9jaGRpcigi
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvcmVzb3VyY2VzL3Rlc3QuaHRtbCIs
IGFyZ3ZbMF0pOworCisgICAgc2VydmVyID0gc291cF9zZXJ2ZXJfbmV3KFNPVVBfU0VSVkVSX1BP
UlQsIDAsIE5VTEwpOworICAgIHNvdXBfc2VydmVyX3J1bl9hc3luYyhzZXJ2ZXIpOworCisgICAg
c291cF9zZXJ2ZXJfYWRkX2hhbmRsZXIoc2VydmVyLCBOVUxMLCBzZXJ2ZXJfY2FsbGJhY2ssIE5V
TEwsIE5VTEwpOworCisgICAgc291cF91cmkgPSBzb3VwX3VyaV9uZXcoImh0dHA6Ly8xMjcuMC4w
LjEvIik7CisgICAgc291cF91cmlfc2V0X3BvcnQoc291cF91cmksIHNvdXBfc2VydmVyX2dldF9w
b3J0KHNlcnZlcikpOworCisgICAgYmFzZV91cmkgPSBzb3VwX3VyaV90b19zdHJpbmcoc291cF91
cmksIEZBTFNFKTsKKyAgICBzb3VwX3VyaV9mcmVlKHNvdXBfdXJpKTsKKworICAgIGdfdGVzdF9i
dWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7CisgICAgZ190ZXN0X2FkZF9kYXRh
X2Z1bmMoIi93ZWJraXQvbWltZS9yZW1vdGUtUERGIiwgInBkZiIsIHRlc3RSZW1vdGVNaW1lVHlw
ZSk7CisgICAgZ190ZXN0X2FkZF9kYXRhX2Z1bmMoIi93ZWJraXQvbWltZS9yZW1vdGUtSFRNTCIs
ICJodG1sIiwgdGVzdFJlbW90ZU1pbWVUeXBlKTsKKyAgICBnX3Rlc3RfYWRkX2RhdGFfZnVuYygi
L3dlYmtpdC9taW1lL3JlbW90ZS1URVhUIiwgInRleHQiLCB0ZXN0UmVtb3RlTWltZVR5cGUpOwor
ICAgIGdfdGVzdF9hZGRfZGF0YV9mdW5jKCIvd2Via2l0L21pbWUvbG9jYWwtUERGIiwgInBkZiIs
IHRlc3RMb2NhbE1pbWVUeXBlKTsKKyAgICBnX3Rlc3RfYWRkX2RhdGFfZnVuYygiL3dlYmtpdC9t
aW1lL2xvY2FsLUhUTUwiLCAiaHRtbCIsIHRlc3RMb2NhbE1pbWVUeXBlKTsKKyAgICBnX3Rlc3Rf
YWRkX2RhdGFfZnVuYygiL3dlYmtpdC9taW1lL2xvY2FsLVRFWFQiLCAidGV4dCIsIHRlc3RMb2Nh
bE1pbWVUeXBlKTsKKworICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7Cit9CmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0bmV0d29ya3JlcXVlc3QuYyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RuZXR3b3JrcmVxdWVzdC5j
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMmM5MGYKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0bmV0d29ya3Jl
cXVlc3QuYwpAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEd1c3Rh
dm8gTm9yb25oYSBTaWx2YQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8ZXJybm8uaD4K
KyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z2xpYi9n
c3RkaW8uaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5j
bHVkZSA8d2Via2l0L3dlYmtpdC5oPgorCitzdGF0aWMgdm9pZCB0ZXN0X25ldHdvcmtfcmVxdWVz
dF9jcmVhdGVfZGVzdHJveSgpCit7CisgICAgV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3Q7
CisgICAgU291cE1lc3NhZ2UqIG1lc3NhZ2U7CisKKyAgICAvKiBUZXN0IGNyZWF0aW9uIHdpdGgg
VVJJICovCisgICAgcmVxdWVzdCA9IFdFQktJVF9ORVRXT1JLX1JFUVVFU1QoZ19vYmplY3RfbmV3
KFdFQktJVF9UWVBFX05FVFdPUktfUkVRVUVTVCwgInVyaSIsICJodHRwOi8vZGViaWFuLm9yZy8i
LCBOVUxMKSk7CisgICAgZ19hc3NlcnQoV0VCS0lUX0lTX05FVFdPUktfUkVRVUVTVChyZXF1ZXN0
KSk7CisgICAgbWVzc2FnZSA9IHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfZ2V0X21lc3NhZ2UocmVx
dWVzdCk7CisgICAgZ19hc3NlcnQoIW1lc3NhZ2UpOworICAgIGdfb2JqZWN0X3VucmVmKHJlcXVl
c3QpOworCisgICAgLyogVGVzdCBjcmVhdGlvbiB3aXRoIFNvdXBNZXNzYWdlICovCisgICAgbWVz
c2FnZSA9IHNvdXBfbWVzc2FnZV9uZXcoIkdFVCIsICJodHRwOi8vZGViaWFuLm9yZy8iKTsKKyAg
ICByZXF1ZXN0ID0gV0VCS0lUX05FVFdPUktfUkVRVUVTVChnX29iamVjdF9uZXcoV0VCS0lUX1RZ
UEVfTkVUV09SS19SRVFVRVNULCAibWVzc2FnZSIsIG1lc3NhZ2UsIE5VTEwpKTsKKyAgICBnX2Fz
c2VydChXRUJLSVRfSVNfTkVUV09SS19SRVFVRVNUKHJlcXVlc3QpKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoR19PQkpFQ1QobWVzc2FnZSktPnJlZl9jb3VudCwgPT0sIDIpOworICAgIGdfb2JqZWN0
X3VucmVmKHJlcXVlc3QpOworICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChtZXNzYWdlKS0+
cmVmX2NvdW50LCA9PSwgMSk7CisgICAgZ19vYmplY3RfdW5yZWYobWVzc2FnZSk7CisKKyAgICAv
KiBUZXN0IGNyZWF0aW9uIHdpdGggYm90aCBTb3VwTWVzc2FnZSBhbmQgVVJJICovCisgICAgbWVz
c2FnZSA9IHNvdXBfbWVzc2FnZV9uZXcoIkdFVCIsICJodHRwOi8vZGViaWFuLm9yZy8iKTsKKyAg
ICByZXF1ZXN0ID0gV0VCS0lUX05FVFdPUktfUkVRVUVTVChnX29iamVjdF9uZXcoV0VCS0lUX1RZ
UEVfTkVUV09SS19SRVFVRVNULCAibWVzc2FnZSIsIG1lc3NhZ2UsICJ1cmkiLCAiaHR0cDovL2du
b21lLm9yZy8iLCBOVUxMKSk7CisgICAgZ19hc3NlcnQoV0VCS0lUX0lTX05FVFdPUktfUkVRVUVT
VChyZXF1ZXN0KSk7CisgICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKG1lc3NhZ2UpLT5yZWZf
Y291bnQsID09LCAyKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X25ldHdvcmtfcmVxdWVz
dF9nZXRfdXJpKHJlcXVlc3QpLCA9PSwgImh0dHA6Ly9nbm9tZS5vcmcvIik7CisgICAgZ19vYmpl
Y3RfdW5yZWYocmVxdWVzdCk7CisgICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKG1lc3NhZ2Up
LT5yZWZfY291bnQsID09LCAxKTsKKyAgICBnX29iamVjdF91bnJlZihtZXNzYWdlKTsKK30KKwor
c3RhdGljIHZvaWQgdGVzdF9uZXR3b3JrX3JlcXVlc3RfcHJvcGVydGllcygpCit7CisgICAgV2Vi
S2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3Q7CisgICAgU291cE1lc3NhZ2UqIG1lc3NhZ2U7Cisg
ICAgZ2NoYXIqIHNvdXBVUkk7CisKKyAgICAvKiBUZXN0IFVSSSBpcyBzZXQgY29ycmVjdGx5IHdo
ZW4gY3JlYXRpbmcgd2l0aCBVUkkgKi8KKyAgICByZXF1ZXN0ID0gd2Via2l0X25ldHdvcmtfcmVx
dWVzdF9uZXcoImh0dHA6Ly9kZWJpYW4ub3JnLyIpOworICAgIGdfYXNzZXJ0KFdFQktJVF9JU19O
RVRXT1JLX1JFUVVFU1QocmVxdWVzdCkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfbmV0
d29ya19yZXF1ZXN0X2dldF91cmkocmVxdWVzdCksID09LCAiaHR0cDovL2RlYmlhbi5vcmcvIik7
CisgICAgZ19vYmplY3RfdW5yZWYocmVxdWVzdCk7CisKKyAgICAvKiBUZXN0IFVSSSBpcyBzZXQg
Y29ycmVjdGx5IHdoZW4gY3JlYXRpbmcgd2l0aCBNZXNzYWdlICovCisgICAgbWVzc2FnZSA9IHNv
dXBfbWVzc2FnZV9uZXcoIkdFVCIsICJodHRwOi8vZGViaWFuLm9yZy8iKTsKKyAgICByZXF1ZXN0
ID0gV0VCS0lUX05FVFdPUktfUkVRVUVTVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfTkVUV09S
S19SRVFVRVNULCAibWVzc2FnZSIsIG1lc3NhZ2UsIE5VTEwpKTsKKyAgICBnX2Fzc2VydChXRUJL
SVRfSVNfTkVUV09SS19SRVFVRVNUKHJlcXVlc3QpKTsKKyAgICBnX29iamVjdF91bnJlZihtZXNz
YWdlKTsKKworICAgIG1lc3NhZ2UgPSB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X2dldF9tZXNzYWdl
KHJlcXVlc3QpOworICAgIHNvdXBVUkkgPSBzb3VwX3VyaV90b19zdHJpbmcoc291cF9tZXNzYWdl
X2dldF91cmkobWVzc2FnZSksIEZBTFNFKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc291cFVSSSwg
PT0sICJodHRwOi8vZGViaWFuLm9yZy8iKTsKKyAgICBnX2ZyZWUoc291cFVSSSk7CisKKyAgICBn
X2Fzc2VydF9jbXBzdHIod2Via2l0X25ldHdvcmtfcmVxdWVzdF9nZXRfdXJpKHJlcXVlc3QpLCA9
PSwgImh0dHA6Ly9kZWJpYW4ub3JnLyIpOworICAgIGdfb2JqZWN0X3VucmVmKHJlcXVlc3QpOwor
fQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgZ3RrX3Rlc3RfaW5p
dCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvbmV0d29ya3Jl
cXVlc3QvY3JlYXRlZGVzdHJveSIsIHRlc3RfbmV0d29ya19yZXF1ZXN0X2NyZWF0ZV9kZXN0cm95
KTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvbmV0d29ya3JlcXVlc3QvcHJvcGVydGll
cyIsIHRlc3RfbmV0d29ya19yZXF1ZXN0X3Byb3BlcnRpZXMpOworICAgIHJldHVybiBnX3Rlc3Rf
cnVuICgpOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRH
dGsvdGVzdG5ldHdvcmtyZXNwb25zZS5jIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRHdGsvdGVzdG5ldHdvcmtyZXNwb25zZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmI4MDZhYTEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdEd0ay90ZXN0bmV0d29ya3Jlc3BvbnNlLmMKQEAgLTAsMCArMSw5NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOSBHdXN0YXZvIE5vcm9uaGEgU2lsdmEKKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBDb2xsYWJvcmEgTHRkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8
ZXJybm8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVk
ZSA8Z2xpYi9nc3RkaW8uaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8c3RkbGli
Lmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgorCitzdGF0aWMgdm9pZCB0ZXN0X25ldHdv
cmtfcmVzcG9uc2VfY3JlYXRlX2Rlc3Ryb3koKQoreworICAgIFdlYktpdE5ldHdvcmtSZXNwb25z
ZSogcmVzcG9uc2U7CisgICAgU291cE1lc3NhZ2UqIG1lc3NhZ2U7CisKKyAgICAvKiBUZXN0IGNy
ZWF0aW9uIHdpdGggVVJJICovCisgICAgcmVzcG9uc2UgPSBXRUJLSVRfTkVUV09SS19SRVNQT05T
RShnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfTkVUV09SS19SRVNQT05TRSwgInVyaSIsICJodHRw
Oi8vZGViaWFuLm9yZy8iLCBOVUxMKSk7CisgICAgZ19hc3NlcnQoV0VCS0lUX0lTX05FVFdPUktf
UkVTUE9OU0UocmVzcG9uc2UpKTsKKyAgICBtZXNzYWdlID0gd2Via2l0X25ldHdvcmtfcmVzcG9u
c2VfZ2V0X21lc3NhZ2UocmVzcG9uc2UpOworICAgIGdfYXNzZXJ0KCFtZXNzYWdlKTsKKyAgICBn
X29iamVjdF91bnJlZihyZXNwb25zZSk7CisKKyAgICAvKiBUZXN0IGNyZWF0aW9uIHdpdGggU291
cE1lc3NhZ2UgKi8KKyAgICBtZXNzYWdlID0gc291cF9tZXNzYWdlX25ldygiR0VUIiwgImh0dHA6
Ly9kZWJpYW4ub3JnLyIpOworICAgIHJlc3BvbnNlID0gV0VCS0lUX05FVFdPUktfUkVTUE9OU0Uo
Z19vYmplY3RfbmV3KFdFQktJVF9UWVBFX05FVFdPUktfUkVTUE9OU0UsICJtZXNzYWdlIiwgbWVz
c2FnZSwgTlVMTCkpOworICAgIGdfYXNzZXJ0KFdFQktJVF9JU19ORVRXT1JLX1JFU1BPTlNFKHJl
c3BvbnNlKSk7CisgICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKG1lc3NhZ2UpLT5yZWZfY291
bnQsID09LCAyKTsKKyAgICBnX29iamVjdF91bnJlZihyZXNwb25zZSk7CisgICAgZ19hc3NlcnRf
Y21waW50KEdfT0JKRUNUKG1lc3NhZ2UpLT5yZWZfY291bnQsID09LCAxKTsKKyAgICBnX29iamVj
dF91bnJlZihtZXNzYWdlKTsKKworICAgIC8qIFRlc3QgY3JlYXRpb24gd2l0aCBib3RoIFNvdXBN
ZXNzYWdlIGFuZCBVUkkgKi8KKyAgICBtZXNzYWdlID0gc291cF9tZXNzYWdlX25ldygiR0VUIiwg
Imh0dHA6Ly9kZWJpYW4ub3JnLyIpOworICAgIHJlc3BvbnNlID0gV0VCS0lUX05FVFdPUktfUkVT
UE9OU0UoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX05FVFdPUktfUkVTUE9OU0UsICJtZXNzYWdl
IiwgbWVzc2FnZSwgInVyaSIsICJodHRwOi8vZ25vbWUub3JnLyIsIE5VTEwpKTsKKyAgICBnX2Fz
c2VydChXRUJLSVRfSVNfTkVUV09SS19SRVNQT05TRShyZXNwb25zZSkpOworICAgIGdfYXNzZXJ0
X2NtcGludChHX09CSkVDVChtZXNzYWdlKS0+cmVmX2NvdW50LCA9PSwgMik7CisgICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF9uZXR3b3JrX3Jlc3BvbnNlX2dldF91cmkocmVzcG9uc2UpLCA9PSwg
Imh0dHA6Ly9nbm9tZS5vcmcvIik7CisgICAgZ19vYmplY3RfdW5yZWYocmVzcG9uc2UpOworICAg
IGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChtZXNzYWdlKS0+cmVmX2NvdW50LCA9PSwgMSk7Cisg
ICAgZ19vYmplY3RfdW5yZWYobWVzc2FnZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfbmV0d29y
a19yZXNwb25zZV9wcm9wZXJ0aWVzKCkKK3sKKyAgICBXZWJLaXROZXR3b3JrUmVzcG9uc2UqIHJl
c3BvbnNlOworICAgIFNvdXBNZXNzYWdlKiBtZXNzYWdlOworICAgIGdjaGFyKiBzb3VwVVJJOwor
CisgICAgLyogVGVzdCBVUkkgaXMgc2V0IGNvcnJlY3RseSB3aGVuIGNyZWF0aW5nIHdpdGggVVJJ
ICovCisgICAgcmVzcG9uc2UgPSB3ZWJraXRfbmV0d29ya19yZXNwb25zZV9uZXcoImh0dHA6Ly9k
ZWJpYW4ub3JnLyIpOworICAgIGdfYXNzZXJ0KFdFQktJVF9JU19ORVRXT1JLX1JFU1BPTlNFKHJl
c3BvbnNlKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9uZXR3b3JrX3Jlc3BvbnNlX2dl
dF91cmkocmVzcG9uc2UpLCA9PSwgImh0dHA6Ly9kZWJpYW4ub3JnLyIpOworICAgIGdfb2JqZWN0
X3VucmVmKHJlc3BvbnNlKTsKKworICAgIC8qIFRlc3QgVVJJIGlzIHNldCBjb3JyZWN0bHkgd2hl
biBjcmVhdGluZyB3aXRoIE1lc3NhZ2UgKi8KKyAgICBtZXNzYWdlID0gc291cF9tZXNzYWdlX25l
dygiR0VUIiwgImh0dHA6Ly9kZWJpYW4ub3JnLyIpOworICAgIHJlc3BvbnNlID0gV0VCS0lUX05F
VFdPUktfUkVTUE9OU0UoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX05FVFdPUktfUkVTUE9OU0Us
ICJtZXNzYWdlIiwgbWVzc2FnZSwgTlVMTCkpOworICAgIGdfYXNzZXJ0KFdFQktJVF9JU19ORVRX
T1JLX1JFU1BPTlNFKHJlc3BvbnNlKSk7CisgICAgZ19vYmplY3RfdW5yZWYobWVzc2FnZSk7CisK
KyAgICBtZXNzYWdlID0gd2Via2l0X25ldHdvcmtfcmVzcG9uc2VfZ2V0X21lc3NhZ2UocmVzcG9u
c2UpOworICAgIHNvdXBVUkkgPSBzb3VwX3VyaV90b19zdHJpbmcoc291cF9tZXNzYWdlX2dldF91
cmkobWVzc2FnZSksIEZBTFNFKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc291cFVSSSwgPT0sICJo
dHRwOi8vZGViaWFuLm9yZy8iKTsKKyAgICBnX2ZyZWUoc291cFVSSSk7CisKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X25ldHdvcmtfcmVzcG9uc2VfZ2V0X3VyaShyZXNwb25zZSksID09LCAi
aHR0cDovL2RlYmlhbi5vcmcvIik7CisgICAgZ19vYmplY3RfdW5yZWYocmVzcG9uc2UpOworfQor
CitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgZ3RrX3Rlc3RfaW5pdCgm
YXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvbmV0d29ya3Jlc3Bv
bnNlL2NyZWF0ZWRlc3Ryb3kiLCB0ZXN0X25ldHdvcmtfcmVzcG9uc2VfY3JlYXRlX2Rlc3Ryb3kp
OworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9uZXR3b3JrcmVzcG9uc2UvcHJvcGVydGll
cyIsIHRlc3RfbmV0d29ya19yZXNwb25zZV9wcm9wZXJ0aWVzKTsKKyAgICByZXR1cm4gZ190ZXN0
X3J1biAoKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
R3RrL3Rlc3R3ZWJiYWNrZm9yd2FyZGxpc3QuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0R3RrL3Rlc3R3ZWJiYWNrZm9yd2FyZGxpc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi43NzgyZDQwCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYmJhY2tmb3J3YXJkbGlzdC5jCkBAIC0wLDAgKzEs
MzI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0
aGVyCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z3Rr
L2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKworc3RhdGljIHZvaWQgdGVzdF93
ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9saWZldGltZSh2b2lkKQoreworICAgIFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXc7CisgICAgV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExp
c3Q7CisgICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGN1cnJlbnRJdGVtOworICAgIFdlYktpdFdl
Ykhpc3RvcnlJdGVtKiBmb3J3YXJkSXRlbTsKKyAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogYmFj
a0l0ZW07CisgICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIG50aEl0ZW07CisgICAgV2ViS2l0V2Vi
SGlzdG9yeUl0ZW0qIGl0ZW0xOworICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBpdGVtMjsKKyAg
ICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogaXRlbTM7CisgICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0q
IGl0ZW00OworICAgIEdMaXN0KiBiYWNrTGlzdCA9IE5VTEw7CisgICAgR0xpc3QqIGZvcndhcmRM
aXN0ID0gTlVMTDsKKyAgICBnX3Rlc3RfYnVnKCIxOTg5OCIpOworCisgICAgd2ViVmlldyA9IFdF
QktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3JlZl9z
aW5rKHdlYlZpZXcpOworICAgIGJhY2tGb3J3YXJkTGlzdCA9IHdlYmtpdF93ZWJfdmlld19nZXRf
YmFja19mb3J3YXJkX2xpc3Qod2ViVmlldyk7CisgICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNU
KGJhY2tGb3J3YXJkTGlzdCktPnJlZl9jb3VudCwgPT0sIDEpOworCisgICAgLyogYWRkIHRlc3Qg
aXRlbXMgKi8KKyAgICBpdGVtMSA9IHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX25ld193aXRoX2Rh
dGEoImh0dHA6Ly9leGFtcGxlLmNvbS8xLyIsICJTaXRlIDEiKTsKKyAgICB3ZWJraXRfd2ViX2Jh
Y2tfZm9yd2FyZF9saXN0X2FkZF9pdGVtKGJhY2tGb3J3YXJkTGlzdCwgaXRlbTEpOworICAgIGdf
b2JqZWN0X3VucmVmKGl0ZW0xKTsKKworICAgIGl0ZW0yID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0
ZW1fbmV3X3dpdGhfZGF0YSgiaHR0cDovL2V4YW1wbGUuY29tLzIvIiwgIlNpdGUgMiIpOworICAg
IHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfYWRkX2l0ZW0oYmFja0ZvcndhcmRMaXN0LCBp
dGVtMik7CisgICAgZ19vYmplY3RfdW5yZWYoaXRlbTIpOworCisgICAgaXRlbTMgPSB3ZWJraXRf
d2ViX2hpc3RvcnlfaXRlbV9uZXdfd2l0aF9kYXRhKCJodHRwOi8vZXhhbXBsZS5jb20vMy8iLCAi
U2l0ZSAzIik7CisgICAgd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9hZGRfaXRlbShiYWNr
Rm9yd2FyZExpc3QsIGl0ZW0zKTsKKyAgICBnX29iamVjdF91bnJlZihpdGVtMyk7CisKKyAgICBp
dGVtNCA9IHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX25ld193aXRoX2RhdGEoImh0dHA6Ly9leGFt
cGxlLmNvbS80LyIsICJTaXRlIDQiKTsKKyAgICB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0
X2FkZF9pdGVtKGJhY2tGb3J3YXJkTGlzdCwgaXRlbTQpOworICAgIGdfb2JqZWN0X3VucmVmKGl0
ZW00KTsKKworICAgIC8qIG1ha2Ugc3VyZSB0aGVzZSBmdW5jdGlvbnMgZG9uJ3QgYWRkIHVubmVj
ZXNzYXJ5IHJlZiB0byB0aGUgaGlzdG9yeSBpdGVtICovCisgICAgYmFja0l0ZW0gPSB3ZWJraXRf
d2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2l0ZW0oYmFja0ZvcndhcmRMaXN0KTsKKyAg
ICBnX29iamVjdF9yZWYoYmFja0l0ZW0pOworICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChi
YWNrSXRlbSktPnJlZl9jb3VudCwgPT0sIDIpOworICAgIGdfb2JqZWN0X3VucmVmKGJhY2tJdGVt
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoYmFja0l0ZW0pLT5yZWZfY291bnQsID09
LCAxKTsKKworICAgIGN1cnJlbnRJdGVtID0gd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9n
ZXRfY3VycmVudF9pdGVtKGJhY2tGb3J3YXJkTGlzdCk7CisgICAgZ19vYmplY3RfcmVmKGN1cnJl
bnRJdGVtKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoY3VycmVudEl0ZW0pLT5yZWZf
Y291bnQsID09LCAyKTsKKyAgICBnX29iamVjdF91bnJlZihjdXJyZW50SXRlbSk7CisgICAgZ19h
c3NlcnRfY21waW50KEdfT0JKRUNUKGN1cnJlbnRJdGVtKS0+cmVmX2NvdW50LCA9PSwgMSk7CisK
KyAgICB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dvX3RvX2l0ZW0oYmFja0ZvcndhcmRM
aXN0LCBpdGVtMik7CisgICAgZm9yd2FyZEl0ZW0gPSB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9s
aXN0X2dldF9mb3J3YXJkX2l0ZW0oYmFja0ZvcndhcmRMaXN0KTsKKyAgICBnX29iamVjdF9yZWYo
Zm9yd2FyZEl0ZW0pOworICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChmb3J3YXJkSXRlbSkt
PnJlZl9jb3VudCwgPT0sIDIpOworICAgIGdfb2JqZWN0X3VucmVmKGZvcndhcmRJdGVtKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoZm9yd2FyZEl0ZW0pLT5yZWZfY291bnQsID09LCAx
KTsKKworICAgIG50aEl0ZW0gPSB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9udGhf
aXRlbShiYWNrRm9yd2FyZExpc3QsIDEpOworICAgIGdfb2JqZWN0X3JlZihudGhJdGVtKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QobnRoSXRlbSktPnJlZl9jb3VudCwgPT0sIDIpOwor
ICAgIGdfb2JqZWN0X3VucmVmKG50aEl0ZW0pOworICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVD
VChudGhJdGVtKS0+cmVmX2NvdW50LCA9PSwgMSk7CisKKyAgICBiYWNrTGlzdCA9IHdlYmtpdF93
ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGlzdF93aXRoX2xpbWl0KGJhY2tGb3J3YXJk
TGlzdCwgNSk7CisgICAgZm9yICg7IGJhY2tMaXN0OyBiYWNrTGlzdCA9IGJhY2tMaXN0LT5uZXh0
KQorICAgICAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoYmFja0xpc3QtPmRhdGEpLT5yZWZf
Y291bnQsID09LCAxKTsKKworICAgIGZvcndhcmRMaXN0ID0gd2Via2l0X3dlYl9iYWNrX2Zvcndh
cmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0X3dpdGhfbGltaXQoYmFja0ZvcndhcmRMaXN0LCA1KTsK
KyAgICBmb3IgKDsgZm9yd2FyZExpc3Q7IGZvcndhcmRMaXN0ID0gZm9yd2FyZExpc3QtPm5leHQp
CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChmb3J3YXJkTGlzdC0+ZGF0YSktPnJl
Zl9jb3VudCwgPT0sIDEpOworCisgICAgZ19saXN0X2ZyZWUoZm9yd2FyZExpc3QpOworICAgIGdf
bGlzdF9mcmVlKGJhY2tMaXN0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoaXRlbTEp
LT5yZWZfY291bnQsID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoaXRlbTIp
LT5yZWZfY291bnQsID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoaXRlbTMp
LT5yZWZfY291bnQsID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoaXRlbTQp
LT5yZWZfY291bnQsID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoYmFja0Zv
cndhcmRMaXN0KS0+cmVmX2NvdW50LCA9PSwgMSk7CisgICAgZ19vYmplY3RfdW5yZWYod2ViVmll
dyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9v
cmRlcih2b2lkKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXc7CisgICAgV2ViS2l0V2Vi
QmFja0ZvcndhcmRMaXN0KiB3ZWJCYWNrRm9yd2FyZExpc3Q7CisgICAgV2ViS2l0V2ViSGlzdG9y
eUl0ZW0qIGl0ZW0xOworICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBpdGVtMjsKKyAgICBXZWJL
aXRXZWJIaXN0b3J5SXRlbSogaXRlbTM7CisgICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGl0ZW00
OworICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBjdXJyZW50SXRlbTsKKyAgICBHTGlzdCogYmFj
a0xpc3QgPSBOVUxMOworICAgIEdMaXN0KiBmb3J3YXJkTGlzdCA9IE5VTEw7CisgICAgZ190ZXN0
X2J1ZygiMjI2OTQiKTsKKworICAgIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dl
Yl92aWV3X25ldygpKTsKKyAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKKworICAgIHdl
YmtpdF93ZWJfdmlld19zZXRfbWFpbnRhaW5zX2JhY2tfZm9yd2FyZF9saXN0KHdlYlZpZXcsIFRS
VUUpOworICAgIHdlYkJhY2tGb3J3YXJkTGlzdCA9IHdlYmtpdF93ZWJfdmlld19nZXRfYmFja19m
b3J3YXJkX2xpc3Qod2ViVmlldyk7CisgICAgZ19hc3NlcnQod2ViQmFja0ZvcndhcmRMaXN0KTsK
KworICAgIC8vIENoZWNrIHRoYXQgdGhlcmUgaXMgbm8gaXRlbS4KKyAgICBnX2Fzc2VydCghd2Vi
a2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKHdlYkJhY2tGb3J3YXJk
TGlzdCkpOworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0
X2dldF9mb3J3YXJkX2xlbmd0aCh3ZWJCYWNrRm9yd2FyZExpc3QpLCA9PSwgMCk7CisgICAgZ19h
c3NlcnRfY21waW50KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGVuZ3Ro
KHdlYkJhY2tGb3J3YXJkTGlzdCksID09LCAwKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92
aWV3X2Nhbl9nb19mb3J3YXJkKHdlYlZpZXcpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92
aWV3X2Nhbl9nb19iYWNrKHdlYlZpZXcpKTsKKworICAgIC8vIEFkZCBhIG5ldyBpdGVtcworICAg
IGl0ZW0xID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dpdGhfZGF0YSgiaHR0cDovL2V4
YW1wbGUuY29tLzEvIiwgIlNpdGUgMSIpOworICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xp
c3RfYWRkX2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0LCBpdGVtMSk7CisgICAgZ19vYmplY3RfdW5y
ZWYoaXRlbTEpOworICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY29u
dGFpbnNfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QsIGl0ZW0xKSk7CisKKyAgICBpdGVtMiA9IHdl
YmtpdF93ZWJfaGlzdG9yeV9pdGVtX25ld193aXRoX2RhdGEoImh0dHA6Ly9leGFtcGxlLmNvbS8y
LyIsICJTaXRlIDIiKTsKKyAgICB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2FkZF9pdGVt
KHdlYkJhY2tGb3J3YXJkTGlzdCwgaXRlbTIpOworICAgIGdfb2JqZWN0X3VucmVmKGl0ZW0yKTsK
KyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2NvbnRhaW5zX2l0ZW0o
d2ViQmFja0ZvcndhcmRMaXN0LCBpdGVtMikpOworCisgICAgaXRlbTMgPSB3ZWJraXRfd2ViX2hp
c3RvcnlfaXRlbV9uZXdfd2l0aF9kYXRhKCJodHRwOi8vZXhhbXBsZS5jb20vMy8iLCAiU2l0ZSAz
Iik7CisgICAgd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9hZGRfaXRlbSh3ZWJCYWNrRm9y
d2FyZExpc3QsIGl0ZW0zKTsKKyAgICBnX29iamVjdF91bnJlZihpdGVtMyk7CisgICAgZ19hc3Nl
cnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9jb250YWluc19pdGVtKHdlYkJhY2tGb3J3
YXJkTGlzdCwgaXRlbTMpKTsKKworICAgIGl0ZW00ID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1f
bmV3X3dpdGhfZGF0YSgiaHR0cDovL2V4YW1wbGUuY29tLzQvIiwgIlNpdGUgNCIpOworICAgIHdl
YmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfYWRkX2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0LCBp
dGVtNCk7CisgICAgZ19vYmplY3RfdW5yZWYoaXRlbTQpOworICAgIGdfYXNzZXJ0KHdlYmtpdF93
ZWJfYmFja19mb3J3YXJkX2xpc3RfY29udGFpbnNfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QsIGl0
ZW00KSk7CisKKyAgICAvLyBjaGVjayB0aGUgYmFjayBsaXN0IG9yZGVyCisgICAgYmFja0xpc3Qg
PSB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3Rfd2l0aF9saW1pdCh3
ZWJCYWNrRm9yd2FyZExpc3QsIDUpOworICAgIGdfYXNzZXJ0KGJhY2tMaXN0KTsKKworICAgIGN1
cnJlbnRJdGVtID0gV0VCS0lUX1dFQl9ISVNUT1JZX0lURU0oYmFja0xpc3QtPmRhdGEpOworICAg
IGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdXJpKGN1cnJlbnRJ
dGVtKSwgPT0sICJodHRwOi8vZXhhbXBsZS5jb20vMy8iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIo
d2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3RpdGxlKGN1cnJlbnRJdGVtKSwgPT0sICJTaXRl
IDMiKTsKKyAgICBiYWNrTGlzdCA9IGJhY2tMaXN0LT5uZXh0OworCisgICAgY3VycmVudEl0ZW0g
PSBXRUJLSVRfV0VCX0hJU1RPUllfSVRFTShiYWNrTGlzdC0+ZGF0YSk7CisgICAgZ19hc3NlcnRf
Y21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF91cmkoY3VycmVudEl0ZW0pLCA9PSwg
Imh0dHA6Ly9leGFtcGxlLmNvbS8yLyIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2Vi
X2hpc3RvcnlfaXRlbV9nZXRfdGl0bGUoY3VycmVudEl0ZW0pLCA9PSwgIlNpdGUgMiIpOworICAg
IGJhY2tMaXN0ID0gYmFja0xpc3QtPm5leHQ7CisKKyAgICBjdXJyZW50SXRlbSA9IFdFQktJVF9X
RUJfSElTVE9SWV9JVEVNKGJhY2tMaXN0LT5kYXRhKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Vi
a2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3VyaShjdXJyZW50SXRlbSksID09LCAiaHR0cDovL2V4
YW1wbGUuY29tLzEvIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9p
dGVtX2dldF90aXRsZShjdXJyZW50SXRlbSksID09LCAiU2l0ZSAxIik7CisgICAgZ19saXN0X2Zy
ZWUoYmFja0xpc3QpOworCisgICAgLy8gY2hlY2sgdGhlIGZvcndhcmQgbGlzdCBvcmRlcgorICAg
IGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19nb190b19iYWNrX2ZvcndhcmRfaXRlbSh3ZWJWaWV3
LCBpdGVtMSkpOworICAgIGZvcndhcmRMaXN0ID0gd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlz
dF9nZXRfZm9yd2FyZF9saXN0X3dpdGhfbGltaXQod2ViQmFja0ZvcndhcmRMaXN0LDUpOworICAg
IGdfYXNzZXJ0KGZvcndhcmRMaXN0KTsKKworICAgIGN1cnJlbnRJdGVtID0gV0VCS0lUX1dFQl9I
SVNUT1JZX0lURU0oZm9yd2FyZExpc3QtPmRhdGEpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJr
aXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdXJpKGN1cnJlbnRJdGVtKSwgPT0sICJodHRwOi8vZXhh
bXBsZS5jb20vNC8iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0
ZW1fZ2V0X3RpdGxlKGN1cnJlbnRJdGVtKSwgPT0sICJTaXRlIDQiKTsKKyAgICBmb3J3YXJkTGlz
dCA9IGZvcndhcmRMaXN0LT5uZXh0OworCisgICAgY3VycmVudEl0ZW0gPSBXRUJLSVRfV0VCX0hJ
U1RPUllfSVRFTShmb3J3YXJkTGlzdC0+ZGF0YSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtp
dF93ZWJfaGlzdG9yeV9pdGVtX2dldF91cmkoY3VycmVudEl0ZW0pLCA9PSwgImh0dHA6Ly9leGFt
cGxlLmNvbS8zLyIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRl
bV9nZXRfdGl0bGUoY3VycmVudEl0ZW0pLCA9PSwgIlNpdGUgMyIpOworICAgIGZvcndhcmRMaXN0
ID0gZm9yd2FyZExpc3QtPm5leHQ7CisKKyAgICBjdXJyZW50SXRlbSA9IFdFQktJVF9XRUJfSElT
VE9SWV9JVEVNKGZvcndhcmRMaXN0LT5kYXRhKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0
X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3VyaShjdXJyZW50SXRlbSksID09LCAiaHR0cDovL2V4YW1w
bGUuY29tLzIvIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVt
X2dldF90aXRsZShjdXJyZW50SXRlbSksID09LCAiU2l0ZSAyIik7CisKKyAgICBnX2xpc3RfZnJl
ZShmb3J3YXJkTGlzdCk7CisgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Cit9CisKK3N0YXRp
YyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9hZGRfaXRlbSh2b2lkKQor
eworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXc7CisgICAgV2ViS2l0V2ViQmFja0ZvcndhcmRM
aXN0KiB3ZWJCYWNrRm9yd2FyZExpc3Q7CisgICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGFkZEl0
ZW0xOworICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBhZGRJdGVtMjsKKyAgICBXZWJLaXRXZWJI
aXN0b3J5SXRlbSogYmFja0l0ZW07CisgICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGN1cnJlbnRJ
dGVtOworICAgIGdfdGVzdF9idWcoIjIyOTg4Iik7CisKKyAgICB3ZWJWaWV3ID0gV0VCS0lUX1dF
Ql9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmplY3RfcmVmX3Npbmsod2Vi
Vmlldyk7CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X21haW50YWluc19iYWNrX2ZvcndhcmRf
bGlzdCh3ZWJWaWV3LCBUUlVFKTsKKyAgICB3ZWJCYWNrRm9yd2FyZExpc3QgPSB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X2JhY2tfZm9yd2FyZF9saXN0KHdlYlZpZXcpOworICAgIGdfYXNzZXJ0KHdlYkJh
Y2tGb3J3YXJkTGlzdCk7CisKKyAgICAvLyBDaGVjayB0aGF0IHRoZXJlIGlzIG5vIGl0ZW0uCisg
ICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRl
bSh3ZWJCYWNrRm9yd2FyZExpc3QpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9i
YWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwg
PT0sIDApOworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0
X2dldF9iYWNrX2xlbmd0aCh3ZWJCYWNrRm9yd2FyZExpc3QpLCA9PSwgMCk7CisgICAgZ19hc3Nl
cnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh3ZWJWaWV3KSk7CisgICAgZ19hc3Nl
cnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayh3ZWJWaWV3KSk7CisKKyAgICAvLyBBZGQg
YSBuZXcgaXRlbQorICAgIGFkZEl0ZW0xID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dp
dGhfZGF0YSgiaHR0cDovL2V4YW1wbGUuY29tLyIsICJBZGRlZCBzaXRlIik7CisgICAgd2Via2l0
X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9hZGRfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QsIGFkZEl0
ZW0xKTsKKyAgICBnX29iamVjdF91bnJlZihhZGRJdGVtMSk7CisgICAgZ19hc3NlcnQod2Via2l0
X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9jb250YWluc19pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCwg
YWRkSXRlbTEpKTsKKworICAgIC8vIENoZWNrIHRoYXQgdGhlIGFkZGVkIGl0ZW0gaXMgdGhlIGN1
cnJlbnQgaXRlbS4KKyAgICBjdXJyZW50SXRlbSA9IHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xp
c3RfZ2V0X2N1cnJlbnRfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QpOworICAgIGdfYXNzZXJ0KGN1
cnJlbnRJdGVtKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRf
bGlzdF9nZXRfZm9yd2FyZF9sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDApOworICAg
IGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xl
bmd0aCh3ZWJCYWNrRm9yd2FyZExpc3QpLCA9PSwgMCk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93
ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh3ZWJWaWV3KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93
ZWJfdmlld19jYW5fZ29fYmFjayh3ZWJWaWV3KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtp
dF93ZWJfaGlzdG9yeV9pdGVtX2dldF91cmkoY3VycmVudEl0ZW0pLCA9PSwgImh0dHA6Ly9leGFt
cGxlLmNvbS8iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1f
Z2V0X3RpdGxlKGN1cnJlbnRJdGVtKSwgPT0sICJBZGRlZCBzaXRlIik7CisKKyAgICAvLyBBZGQg
YW5vdGhlciBpdGVtLgorICAgIGFkZEl0ZW0yID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3
X3dpdGhfZGF0YSgiaHR0cDovL2V4YW1wbGUuY29tLzIvIiwgIkFkZGVkIHNpdGUgMiIpOworICAg
IHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfYWRkX2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0
LCBhZGRJdGVtMik7CisgICAgZ19vYmplY3RfdW5yZWYoYWRkSXRlbTIpOworICAgIGdfYXNzZXJ0
KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY29udGFpbnNfaXRlbSh3ZWJCYWNrRm9yd2Fy
ZExpc3QsIGFkZEl0ZW0yKSk7CisKKyAgICAvLyBDaGVjayB0aGF0IHRoZSBhZGRlZCBpdGVtIGlz
IG5ldyBjdXJyZW50IGl0ZW0uCisgICAgY3VycmVudEl0ZW0gPSB3ZWJraXRfd2ViX2JhY2tfZm9y
d2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0KTsKKyAgICBnX2Fz
c2VydChjdXJyZW50SXRlbSk7CisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJfYmFja19m
b3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGVuZ3RoKHdlYkJhY2tGb3J3YXJkTGlzdCksID09LCAw
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRf
YmFja19sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDEpOworICAgIGdfYXNzZXJ0KCF3
ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQod2ViVmlldykpOworICAgIGdfYXNzZXJ0KHdl
YmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayh3ZWJWaWV3KSk7CisgICAgZ19hc3NlcnRfY21wc3Ry
KHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF91cmkoY3VycmVudEl0ZW0pLCA9PSwgImh0dHA6
Ly9leGFtcGxlLmNvbS8yLyIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3Rv
cnlfaXRlbV9nZXRfdGl0bGUoY3VycmVudEl0ZW0pLCA9PSwgIkFkZGVkIHNpdGUgMiIpOworCisg
ICAgYmFja0l0ZW0gPSB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2l0ZW0o
d2ViQmFja0ZvcndhcmRMaXN0KTsKKyAgICBnX2Fzc2VydChiYWNrSXRlbSk7CisgICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF91cmkoYmFja0l0ZW0pLCA9PSwg
Imh0dHA6Ly9leGFtcGxlLmNvbS8iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9o
aXN0b3J5X2l0ZW1fZ2V0X3RpdGxlKGJhY2tJdGVtKSwgPT0sICJBZGRlZCBzaXRlIik7CisKKyAg
ICAvLyBHbyB0byB0aGUgZmlyc3QgYWRkZWQgaXRlbS4KKyAgICBnX2Fzc2VydCh3ZWJraXRfd2Vi
X3ZpZXdfZ29fdG9fYmFja19mb3J3YXJkX2l0ZW0od2ViVmlldywgYWRkSXRlbTEpKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9s
ZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcGludCh3
ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xlbmd0aCh3ZWJCYWNrRm9yd2Fy
ZExpc3QpLCA9PSwgMCk7CisgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3
YXJkKHdlYlZpZXcpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNr
KHdlYlZpZXcpKTsKKworICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOworfQorCitzdGF0aWMg
dm9pZCB0ZXN0X3dlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY2xlYXIodm9pZCkKK3sKKyAg
ICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OworICAgIFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCog
d2ViQmFja0ZvcndhcmRMaXN0OworICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBhZGRJdGVtOwor
ICAgIGdfdGVzdF9idWcoIjM2MTczIik7CisKKyAgICB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVX
KHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7
CisKKyAgICB3ZWJCYWNrRm9yd2FyZExpc3QgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2JhY2tfZm9y
d2FyZF9saXN0KHdlYlZpZXcpOworICAgIGdfYXNzZXJ0KHdlYkJhY2tGb3J3YXJkTGlzdCk7CisK
KyAgICAvLyBDaGVjayB0aGF0IHRoZXJlIGlzIG5vIGl0ZW0uCisgICAgZ19hc3NlcnRfY21waW50
KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGVuZ3RoKHdlYkJhY2tG
b3J3YXJkTGlzdCksID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNr
X2ZvcndhcmRfbGlzdF9nZXRfYmFja19sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDAp
OworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50
X2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmll
d19jYW5fZ29fZm9yd2FyZCh3ZWJWaWV3KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmll
d19jYW5fZ29fYmFjayh3ZWJWaWV3KSk7CisKKyAgICAvLyBDaGVjayB0aGF0IGNsZWFyaW5nIHRo
ZSBlbXB0eSBsaXN0IGRvZXMgbm90IG1vZGlmeSBjb3VudGVycworICAgIHdlYmtpdF93ZWJfYmFj
a19mb3J3YXJkX2xpc3RfY2xlYXIod2ViQmFja0ZvcndhcmRMaXN0KTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9sZW5ndGgod2Vi
QmFja0ZvcndhcmRMaXN0KSwgPT0sIDApOworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2Vi
X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xlbmd0aCh3ZWJCYWNrRm9yd2FyZExpc3QpLCA9
PSwgMCk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1
cnJlbnRfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dl
Yl92aWV3X2Nhbl9nb19mb3J3YXJkKHdlYlZpZXcpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dl
Yl92aWV3X2Nhbl9nb19iYWNrKHdlYlZpZXcpKTsKKworICAgIC8vIEFkZCBhIG5ldyBpdGVtCisg
ICAgYWRkSXRlbSA9IHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX25ld193aXRoX2RhdGEoImh0dHA6
Ly9leGFtcGxlLmNvbS8iLCAiQWRkZWQgc2l0ZSIpOworICAgIHdlYmtpdF93ZWJfYmFja19mb3J3
YXJkX2xpc3RfYWRkX2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0LCBhZGRJdGVtKTsKKyAgICBnX29i
amVjdF91bnJlZihhZGRJdGVtKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2JhY2tfZm9yd2Fy
ZF9saXN0X2NvbnRhaW5zX2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0LCBhZGRJdGVtKSk7CisKKyAg
ICAvLyBDaGVjayB0aGF0IGFmdGVyIGNsZWFyaW5nIHRoZSBsaXN0IHRoZSBhZGRlZCBpdGVtIGlz
IG5vIGxvbmdlciBpbiB0aGUgbGlzdAorICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3Rf
Y2xlYXIod2ViQmFja0ZvcndhcmRMaXN0KTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl9iYWNr
X2ZvcndhcmRfbGlzdF9jb250YWluc19pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCwgYWRkSXRlbSkp
OworCisgICAgLy8gQ2hlY2sgdGhhdCBhZnRlciBjbGVhcmluZyBpdCwgdGhlIGxpc3QgaXMgZW1w
dHkKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRf
Zm9yd2FyZF9sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDApOworICAgIGdfYXNzZXJ0
X2NtcGludCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xlbmd0aCh3ZWJC
YWNrRm9yd2FyZExpc3QpLCA9PSwgMCk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfYmFja19m
b3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QpKTsKKyAgICBn
X2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHdlYlZpZXcpKTsKKyAgICBn
X2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrKHdlYlZpZXcpKTsKKworICAgIGdf
b2JqZWN0X3VucmVmKHdlYlZpZXcpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFy
Z3YpCit7CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAgZ190
ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYWRk
X2Z1bmMoIi93ZWJraXQvd2ViYmFja2ZvcndhcmRsaXN0L2FkZF9pdGVtIiwgdGVzdF93ZWJraXRf
d2ViX2JhY2tfZm9yd2FyZF9saXN0X2FkZF9pdGVtKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93
ZWJraXQvd2ViYmFja2ZvcndhcmRsaXN0L2xpc3Rfb3JkZXIiLCB0ZXN0X3dlYmtpdF93ZWJfYmFj
a19mb3J3YXJkX2xpc3Rfb3JkZXIpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJo
aXN0b3J5aXRlbS9saWZldGltZSIsIHRlc3Rfd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbGlmZXRp
bWUpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJiYWNrZm9yd2FyZGxpc3QvY2xl
YXIiLCB0ZXN0X3dlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY2xlYXIpOworICAgIHJldHVy
biBnX3Rlc3RfcnVuICgpOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRHdGsvdGVzdHdlYmRhdGFzb3VyY2UuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0R3RrL3Rlc3R3ZWJkYXRhc291cmNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMDU2NjI1NwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJkYXRhc291cmNlLmMKQEAgLTAsMCArMSwyNDIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIE1pY2hhZWwgQWxvbnpvCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1
ZGUgPHdlYmtpdC93ZWJraXQuaD4KKworc3RhdGljIGNvbnN0IGdzaG9ydCBkZWZhdWx0VGltZW91
dCA9IDEwOworZ3VpbnQgd2FpdFRpbWVyOworZ2Jvb2xlYW4gc2hvdWxkV2FpdDsKKwordHlwZWRl
ZiBzdHJ1Y3QgeworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXc7CisgICAgV2ViS2l0V2ViRnJh
bWUqIG1haW5GcmFtZTsKK30gV2ViRGF0YVNvdXJjZUZpeHR1cmU7CisKK3N0YXRpYyB2b2lkIHRl
c3Rfd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfaW5pdGlhbF9yZXF1ZXN0KCkKK3sKKyAgICBX
ZWJLaXRXZWJWaWV3KiB2aWV3OworICAgIFdlYktpdFdlYkZyYW1lKiBmcmFtZTsKKyAgICBXZWJL
aXRXZWJEYXRhU291cmNlKiBkYXRhU291cmNlOworICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiBp
bml0aWFsUmVxdWVzdDsKKworICAgIHZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92
aWV3X25ldygpKTsKKyAgICBnX29iamVjdF9yZWZfc2luayh2aWV3KTsKKyAgICBmcmFtZSA9IHdl
YmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh2aWV3KTsKKworICAgIFdlYktpdE5ldHdvcmtS
ZXF1ZXN0KiByZXF1ZXN0ID0gd2Via2l0X25ldHdvcmtfcmVxdWVzdF9uZXcoImh0dHA6Ly93d3cu
Z29vZ2xlLmNvbSIpOworICAgIHdlYmtpdF93ZWJfZnJhbWVfbG9hZF9yZXF1ZXN0KGZyYW1lLCBy
ZXF1ZXN0KTsKKyAgICBnX29iamVjdF91bnJlZihyZXF1ZXN0KTsKKworICAgIGRhdGFTb3VyY2Ug
PSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9wcm92aXNpb25hbF9kYXRhX3NvdXJjZShmcmFtZSk7Cisg
ICAgZ19hc3NlcnQoZGF0YVNvdXJjZSk7CisgICAgaW5pdGlhbFJlcXVlc3QgPSB3ZWJraXRfd2Vi
X2RhdGFfc291cmNlX2dldF9pbml0aWFsX3JlcXVlc3QoZGF0YVNvdXJjZSk7CisgICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfZ2V0X3VyaShpbml0aWFsUmVxdWVzdCks
ID09LCAiaHR0cDovL3d3dy5nb29nbGUuY29tLyIpOworCisgICAgZ19vYmplY3RfdW5yZWYodmll
dyk7Cit9CisKK3N0YXRpYyB2b2lkIG5vdGlmeV9sb2FkX3N0YXR1c191bnJlYWNoYWJsZV9jYihX
ZWJLaXRXZWJWaWV3KiB2aWV3LCBHUGFyYW1TcGVjKiBwc3BlYywgR01haW5Mb29wKiBsb29wKQor
eworICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2Fk
X3N0YXR1cyAodmlldyk7CisgICAgV2ViS2l0V2ViRnJhbWUqIGZyYW1lID0gd2Via2l0X3dlYl92
aWV3X2dldF9tYWluX2ZyYW1lKHZpZXcpOworCisgICAgZ19hc3NlcnQoc3RhdHVzICE9IFdFQktJ
VF9MT0FEX0ZJTklTSEVEKTsKKworICAgIGlmIChzdGF0dXMgIT0gV0VCS0lUX0xPQURfRkFJTEVE
KQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJLaXRXZWJEYXRhU291cmNlKiBkYXRhc291cmNl
ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfZGF0YV9zb3VyY2UoZnJhbWUpOworCisgICAgZ19hc3Nl
cnRfY21wc3RyKCJodHRwOi8vdGhpcy5ob3N0LmRvZXMubm90LmV4aXN0L2RvaXJlYWxseWV4aXN0
Lmh0bWwiLCA9PSwKKyAgICAgICAgICAgICAgICAgICAgd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9n
ZXRfdW5yZWFjaGFibGVfdXJpKGRhdGFzb3VyY2UpKTsKKworICAgIGdfbWFpbl9sb29wX3F1aXQo
bG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIG5vdGlmeV9sb2FkX3N0YXR1c19jYihXZWJLaXRXZWJW
aWV3KiB2aWV3LCBHUGFyYW1TcGVjKiBwc3BlYywgR01haW5Mb29wKiBsb29wKQoreworICAgIFdl
YktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyAo
dmlldyk7CisgICAgV2ViS2l0V2ViRnJhbWUqIGZyYW1lID0gd2Via2l0X3dlYl92aWV3X2dldF9t
YWluX2ZyYW1lKHZpZXcpOworICAgIFdlYktpdFdlYkRhdGFTb3VyY2UqIGRhdGFTb3VyY2UgPSB3
ZWJraXRfd2ViX2ZyYW1lX2dldF9kYXRhX3NvdXJjZShmcmFtZSk7CisKKyAgICBpZiAoc3RhdHVz
ID09IFdFQktJVF9MT0FEX0NPTU1JVFRFRCkgeworICAgICAgICBnX2Fzc2VydCh3ZWJraXRfd2Vi
X2RhdGFfc291cmNlX2lzX2xvYWRpbmcoZGF0YVNvdXJjZSkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGVsc2UgaWYgKHN0YXR1cyAhPSBXRUJLSVRfTE9BRF9GSU5JU0hFRCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLyogVGVzdCBnZXRfcmVxdWVzdCAqLworICAgIGdfdGVzdF9tZXNz
YWdlKCJUZXN0aW5nIHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X3JlcXVlc3QiKTsKKyAgICBX
ZWJLaXROZXR3b3JrUmVxdWVzdCogcmVxdWVzdCA9IHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0
X3JlcXVlc3QoZGF0YVNvdXJjZSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9uZXR3b3Jr
X3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KSwgPT0sICJodHRwOi8vd3d3LndlYmtpdC5vcmcvIik7
CisKKyAgICAvKiBUZXN0IGdldF9tYWluX3Jlc291cmNlICovCisgICAgZ190ZXN0X21lc3NhZ2Uo
IlRlc3Rpbmcgd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfbWFpbl9yZXNvdXJjZSIpOworICAg
IFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSA9IHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0
X21haW5fcmVzb3VyY2UoZGF0YVNvdXJjZSk7CisgICAgZ19hc3NlcnRfY21wc3RyKCJ0ZXh0L2h0
bWwiLCA9PSwgd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfbWltZV90eXBlKHJlc291cmNlKSk7Cisg
ICAgZ19hc3NlcnRfY21wc3RyKCJodHRwOi8vd3d3LndlYmtpdC5vcmcvIiwgPT0sIHdlYmtpdF93
ZWJfcmVzb3VyY2VfZ2V0X3VyaShyZXNvdXJjZSkpOworCisgICAgLyogVGVzdCBnZXRfZGF0YS4g
V2UganVzdCB0ZXN0IGlmIGRhdGEgaGFzIGNlcnRhaW4gc2l6ZSBmb3IgdGhlIG1lYW4gdGltZSAq
LworICAgIGdfdGVzdF9tZXNzYWdlKCJUZXN0aW5nIHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0
X2RhdGEgaGFzIGNlcnRhaW4gc2l6ZSIpOworICAgIEdTdHJpbmcqIGRhdGEgPSB3ZWJraXRfd2Vi
X2RhdGFfc291cmNlX2dldF9kYXRhKGRhdGFTb3VyY2UpOworICAgIGdfYXNzZXJ0KGRhdGEtPmxl
biA+IDEwMCk7CisKKyAgICAvKiBGSVhNRTogQWRkIHRlc3QgZm9yIGdldF9lbmNvZGluZyAqLwor
CisgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKK30KKworc3RhdGljIGdib29sZWFuIHdhaXRf
dGltZXJfZmlyZWQoR01haW5Mb29wKiBsb29wKQoreworICAgIHdhaXRUaW1lciA9IDA7CisgICAg
Z19tYWluX2xvb3BfcXVpdChsb29wKTsKKworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGlj
IHZvaWQgdGVzdF93ZWJraXRfd2ViX2RhdGFfc291cmNlKCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3
KiB2aWV3OworICAgIEdNYWluTG9vcCogbG9vcDsKKworICAgIHZpZXcgPSBXRUJLSVRfV0VCX1ZJ
RVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBnX29iamVjdF9yZWZfc2luayh2aWV3KTsK
KyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworICAgIGdfc2lnbmFsX2Nv
bm5lY3QodmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLCBHX0NBTExCQUNLKG5vdGlmeV9sb2Fk
X3N0YXR1c19jYiksIGxvb3ApOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh2aWV3LCAi
aHR0cDovL3d3dy53ZWJraXQub3JnIik7CisKKyAgICB3YWl0VGltZXIgPSBnX3RpbWVvdXRfYWRk
X3NlY29uZHMoZGVmYXVsdFRpbWVvdXQsIChHU291cmNlRnVuYyl3YWl0X3RpbWVyX2ZpcmVkLCBs
b29wKTsKKworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIGlmICh3YWl0VGltZXIp
CisgICAgICAgIGdfc291cmNlX3JlbW92ZSh3YWl0VGltZXIpOworCisgICAgd2FpdFRpbWVyID0g
MDsKKworICAgIGdfbWFpbl9sb29wX3VucmVmKGxvb3ApOworICAgIGdfb2JqZWN0X3VucmVmKHZp
ZXcpOworfQorCitzdGF0aWMgdm9pZCBub3RpZnlfbG9hZF9zdGF0dXNfbGlmZXRpbWVfY2IoV2Vi
S2l0V2ViVmlldyogdmlldywgR1BhcmFtU3BlYyogcHNwZWMsIEdNYWluTG9vcCogbG9vcCkKK3sK
KyAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9z
dGF0dXMgKHZpZXcpOworICAgIFdlYktpdFdlYkZyYW1lKiBmcmFtZSA9IHdlYmtpdF93ZWJfdmll
d19nZXRfbWFpbl9mcmFtZSh2aWV3KTsKKyAgICBXZWJLaXRXZWJEYXRhU291cmNlKiBkYXRhU291
cmNlID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfZGF0YV9zb3VyY2UoZnJhbWUpOworCisgICAgaWYg
KHN0YXR1cyA9PSBXRUJLSVRfTE9BRF9DT01NSVRURUQpIHsKKyAgICAgICAgZ19hc3NlcnQod2Vi
a2l0X3dlYl9kYXRhX3NvdXJjZV9pc19sb2FkaW5nKGRhdGFTb3VyY2UpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9IFdFQktJVF9MT0FEX0ZJTklTSEVEKQorICAg
ICAgICByZXR1cm47CisKKyAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworfQorCitzdGF0aWMg
dm9pZCB0ZXN0X3dlYmtpdF93ZWJfZGF0YV9zb3VyY2VfbGlmZXRpbWUoKQoreworICAgIFdlYktp
dFdlYlZpZXcqIHZpZXc7CisgICAgR01haW5Mb29wKiBsb29wOworCisgICAgdmlldyA9IFdFQktJ
VF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3JlZl9zaW5r
KHZpZXcpOworICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisgICAgZ19z
aWduYWxfY29ubmVjdCh2aWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0sobm90
aWZ5X2xvYWRfc3RhdHVzX2xpZmV0aW1lX2NiKSwgbG9vcCk7CisgICAgd2Via2l0X3dlYl92aWV3
X2xvYWRfdXJpKHZpZXcsICJodHRwOi8vd3d3LndlYmtpdC5vcmciKTsKKworICAgIHdhaXRUaW1l
ciA9IGdfdGltZW91dF9hZGRfc2Vjb25kcyhkZWZhdWx0VGltZW91dCwgKEdTb3VyY2VGdW5jKXdh
aXRfdGltZXJfZmlyZWQsIGxvb3ApOworCisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisg
ICAgV2ViS2l0V2ViRGF0YVNvdXJjZSogZGF0YVNvdXJjZSA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0
X2RhdGFfc291cmNlKHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh2aWV3KSk7CisgICAg
R0xpc3QqIHN1YlJlc291cmNlcyA9IHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X3N1YnJlc291
cmNlcyhkYXRhU291cmNlKTsKKyAgICBnaW50IG51bWJlck9mUmVzb3VyY2VzID0gZ19saXN0X2xl
bmd0aChzdWJSZXNvdXJjZXMpOworICAgIGdfbGlzdF9mcmVlKHN1YlJlc291cmNlcyk7CisKKyAg
ICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh2aWV3KSwg
PT0sIFdFQktJVF9MT0FEX0ZJTklTSEVEKTsKKworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3Vy
aSh2aWV3LCAiaHR0cDovL2dub21lLm9yZyIpOworCisgICAgZ19hc3NlcnRfY21waW50KHdlYmtp
dF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXModmlldyksID09LCBXRUJLSVRfTE9BRF9QUk9WSVNJ
T05BTCk7CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfc3RvcF9sb2FkaW5nKHZpZXcpOworCisgICAg
Z19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXModmlldyksID09
LCBXRUJLSVRfTE9BRF9GQUlMRUQpOworCisgICAgc3ViUmVzb3VyY2VzID0gd2Via2l0X3dlYl9k
YXRhX3NvdXJjZV9nZXRfc3VicmVzb3VyY2VzKGRhdGFTb3VyY2UpOworICAgIGdfYXNzZXJ0X2Nt
cGludChudW1iZXJPZlJlc291cmNlcywgPT0sIGdfbGlzdF9sZW5ndGgoc3ViUmVzb3VyY2VzKSk7
CisgICAgZ19saXN0X2ZyZWUoc3ViUmVzb3VyY2VzKTsKKworICAgIGlmICh3YWl0VGltZXIpCisg
ICAgICAgIGdfc291cmNlX3JlbW92ZSh3YWl0VGltZXIpOworCisgICAgd2FpdFRpbWVyID0gMDsK
KworICAgIGdfbWFpbl9sb29wX3VucmVmKGxvb3ApOworICAgIGdfb2JqZWN0X3VucmVmKHZpZXcp
OworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfZGF0YV9zb3VyY2VfdW5yZWFjaGFi
bGVfdXJpKCkKK3sKKyAgICAvKiBGSVhNRTogdGhpcyB0ZXN0IGZhaWxzIGN1cnJlbnRseS4gKi8K
KyAgICByZXR1cm47CisKKyAgICBXZWJLaXRXZWJWaWV3KiB2aWV3OworICAgIEdNYWluTG9vcCog
bG9vcDsKKworICAgIHZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygp
KTsKKyAgICBnX29iamVjdF9yZWZfc2luayh2aWV3KTsKKyAgICBsb29wID0gZ19tYWluX2xvb3Bf
bmV3KE5VTEwsIFRSVUUpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QodmlldywgIm5vdGlmeTo6bG9h
ZC1zdGF0dXMiLCBHX0NBTExCQUNLKG5vdGlmeV9sb2FkX3N0YXR1c191bnJlYWNoYWJsZV9jYiks
IGxvb3ApOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh2aWV3LCAiaHR0cDovL3RoaXMu
aG9zdC5kb2VzLm5vdC5leGlzdC9kb2lyZWFsbHlleGlzdC5odG1sIik7CisKKyAgICB3YWl0VGlt
ZXIgPSBnX3RpbWVvdXRfYWRkX3NlY29uZHMoZGVmYXVsdFRpbWVvdXQsIChHU291cmNlRnVuYyl3
YWl0X3RpbWVyX2ZpcmVkLCBsb29wKTsKKworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKwor
ICAgIGlmICh3YWl0VGltZXIpCisgICAgICAgIGdfc291cmNlX3JlbW92ZSh3YWl0VGltZXIpOwor
CisgICAgd2FpdFRpbWVyID0gMDsKKworICAgIGdfbWFpbl9sb29wX3VucmVmKGxvb3ApOworICAg
IGdfb2JqZWN0X3VucmVmKHZpZXcpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFy
Z3YpCit7CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAgZ190
ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYnVn
KCIyNDc1OCIpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJkYXRhc291cmNlL2dl
dF9pbml0aWFsX3JlcXVlc3QiLAorICAgICAgICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF93ZWJf
ZGF0YV9zb3VyY2VfZ2V0X2luaXRpYWxfcmVxdWVzdCk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIv
d2Via2l0L3dlYmRhdGFzb3VyY2UvYXBpIiwKKyAgICAgICAgICAgICAgICAgICAgdGVzdF93ZWJr
aXRfd2ViX2RhdGFfc291cmNlKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2ViZGF0
YXNvdXJjZS91bnJlYWNoYWJsZV91cmkiLAorICAgICAgICAgICAgICAgICAgICB0ZXN0X3dlYmtp
dF93ZWJfZGF0YV9zb3VyY2VfdW5yZWFjaGFibGVfdXJpKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMo
Ii93ZWJraXQvd2ViZGF0YXNvdXJjZS9saWZldGltZSIsCisgICAgICAgICAgICAgICAgICAgIHRl
c3Rfd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9saWZldGltZSk7CisKKyAgICByZXR1cm4gZ190ZXN0
X3J1biAoKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
R3RrL3Rlc3R3ZWJmcmFtZS5jIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsv
dGVzdHdlYmZyYW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEzMTg3
MwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3Rr
L3Rlc3R3ZWJmcmFtZS5jCkBAIC0wLDAgKzEsMjIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQ29s
bGFib3JhIEx0ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5j
bHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGdsaWIvZ3N0ZGlv
Lmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKwor
c3RhdGljIGludCBudW1iZXJPZkZyYW1lc0NyZWF0ZWQgPSAwOworCitzdGF0aWMgdm9pZCBjcmVh
dGVGcmFtZVNpZ25hbFRlc3RGcmFtZUNyZWF0ZWRDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3LCBXZWJLaXRXZWJGcmFtZSogZnJhbWUsIGdwb2ludGVyIGRhdGEpCit7CisgICAgbnVtYmVy
T2ZGcmFtZXNDcmVhdGVkKys7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBjcmVhdGVGcmFtZVNpZ25h
bFRlc3RUaW1lb3V0KGdwb2ludGVyIGRhdGEpCit7CisgICAgZ19hc3NlcnRfY21waW50KG51bWJl
ck9mRnJhbWVzQ3JlYXRlZCwgPT0sIDIpOworICAgIGdfbWFpbl9sb29wX3F1aXQoKEdNYWluTG9v
cCopIGRhdGEpOworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJr
aXRfd2ViX2ZyYW1lX2NyZWF0ZWRfc2lnbmFsKHZvaWQpCit7CisgICAgR3RrV2lkZ2V0KiB3ZWJW
aWV3OworICAgIEd0a1dpZGdldCogd2luZG93OworICAgIEdNYWluTG9vcCogbG9vcCA9IGdfbWFp
bl9sb29wX25ldyhOVUxMLCBUUlVFKTsKKworICAgIHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdU
S19XSU5ET1dfVE9QTEVWRUwpOworCisgICAgd2ViVmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXco
KTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJmcmFtZS1jcmVhdGVkIiwgR19DQUxM
QkFDSyhjcmVhdGVGcmFtZVNpZ25hbFRlc3RGcmFtZUNyZWF0ZWRDYWxsYmFjayksIGxvb3ApOwor
CisgICAgLy8gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCBleGFjdGx5IHR3byBjcmVhdGUtZnJhbWUg
c2lnbmFscyBhcmUKKyAgICAvLyBmaXJlZCBhbmQgbm8gbW9yZSwgc28gd2Ugc2V0IGEgdGltZW91
dCBoZXJlLiBUaGVyZSBkb2VzIG5vdCBhcHBlYXIKKyAgICAvLyB0byBiZSBhIHNpbXBsZSB3YXkg
dmlhIHRoZSBBUEkgdG8gZmlndXJlIG91dCB3aGVuIGFsbCBmcmFtZXMgaGF2ZQorICAgIC8vIGxv
YWRlZC4KKyAgICBnX3RpbWVvdXRfYWRkKDUwMCwgY3JlYXRlRnJhbWVTaWduYWxUZXN0VGltZW91
dCwgbG9vcCk7CisKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyks
IHdlYlZpZXcpOworICAgIGd0a193aWRnZXRfc2hvdyh3aW5kb3cpOworICAgIGd0a193aWRnZXRf
c2hvdyh3ZWJWaWV3KTsKKworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhXRUJLSVRf
V0VCX1ZJRVcod2ViVmlldyksCisgICAgICAgICI8aHRtbD48Ym9keT5GcmFtZXMhIgorICAgICAg
ICAiPGlmcmFtZT48L2lmcmFtZT4iCisgICAgICAgICI8aWZyYW1lPjwvaWZyYW1lPiIKKyAgICAg
ICAgIjwvYm9keT48L2h0bWw+IiwKKyAgICAgICAgInRleHQvaHRtbCIsICJ1dGYtOCIsICJmaWxl
Oi8vIik7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworfQorCitzdGF0aWMgdm9pZCB0ZXN0
X3dlYmtpdF93ZWJfZnJhbWVfY3JlYXRlX2Rlc3Ryb3kodm9pZCkKK3sKKyAgICBHdGtXaWRnZXQg
KndlYlZpZXc7CisgICAgR3RrV2lkZ2V0ICp3aW5kb3c7CisKKyAgICBnX3Rlc3RfYnVnKCIyMTgz
NyIpOworICAgIHdlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7CisgICAgZ19vYmplY3Rf
cmVmX3Npbmsod2ViVmlldyk7CisgICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKHdlYlZpZXcp
LT5yZWZfY291bnQsID09LCAxKTsKKyAgICAvLyBUaGlzIGNyYXNoZWQgd2l0aCB0aGUgb3JpZ2lu
YWwgdmVyc2lvbgorICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOworCisgICAgZ190ZXN0X2J1
ZygiMjUwNDIiKTsKKyAgICB3aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExF
VkVMKTsKKyAgICB3ZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygpOworICAgIGd0a19jb250
YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgd2ViVmlldyk7CisgICAgZ3RrX3dpZGdl
dF9zaG93KHdpbmRvdyk7CisgICAgZ3RrX3dpZGdldF9zaG93KHdlYlZpZXcpOworICAgIGd0a193
aWRnZXRfZGVzdHJveSh3ZWJWaWV3KTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2Vi
X2ZyYW1lX2xpZmV0aW1lKHZvaWQpCit7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldzsKKyAg
ICBXZWJLaXRXZWJGcmFtZSogd2ViRnJhbWU7CisgICAgZ190ZXN0X2J1ZygiMjE4MzciKTsKKwor
ICAgIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAg
ICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpF
Q1Qod2ViVmlldyktPnJlZl9jb3VudCwgPT0sIDEpOworICAgIHdlYkZyYW1lID0gd2Via2l0X3dl
Yl92aWV3X2dldF9tYWluX2ZyYW1lKHdlYlZpZXcpOworICAgIGdfYXNzZXJ0X2NtcGludChHX09C
SkVDVCh3ZWJGcmFtZSktPnJlZl9jb3VudCwgPT0sIDEpOworCisgICAgLy8gQWRkIGR1bW15IHJl
ZmVyZW5jZSBvbiB0aGUgV2ViS2l0V2ViRnJhbWUgdG8ga2VlcCBpdCBhbGl2ZQorICAgIGdfb2Jq
ZWN0X3JlZih3ZWJGcmFtZSk7CisgICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKHdlYkZyYW1l
KS0+cmVmX2NvdW50LCA9PSwgMik7CisKKyAgICAvLyBUaGlzIGNyYXNoZWQgd2l0aCB0aGUgb3Jp
Z2luYWwgdmVyc2lvbgorICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOworCisgICAgLy8gTWFr
ZSBzdXJlIHRoYXQgdGhlIGZyYW1lIGdvdCBkZWxldGVkIGFzIHdlbGwuIFdlIGRpZCB0aGlzCisg
ICAgLy8gYnkgYWRkaW5nIGFuIGV4dHJhIHJlZiBvbiB0aGUgV2ViS2l0V2ViRnJhbWUgYW5kIHdl
IHNob3VsZAorICAgIC8vIGJlIHRoZSBvbmUgaG9sZGluZyB0aGUgbGFzdCByZWZlcmVuY2UuCisg
ICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKHdlYkZyYW1lKS0+cmVmX2NvdW50LCA9PSwgMSk7
CisgICAgZ19vYmplY3RfdW5yZWYod2ViRnJhbWUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gcHJp
bnRfcmVxdWVzdGVkX2NiKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFdlYkZyYW1lKiB3
ZWJGcmFtZSwgR01haW5Mb29wKiBsb29wKQoreworICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JK
RUNUKHdlYlZpZXcpLCAic2lnbmFsLWhhbmRsZWQiLCBHSU5UX1RPX1BPSU5URVIoVFJVRSkpOwor
ICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRp
YyB2b2lkIHByaW50X3RpbWVvdXQoR01haW5Mb29wKiBsb29wKQoreworICAgIGlmIChnX21haW5f
bG9vcF9pc19ydW5uaW5nKGxvb3ApKQorICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwor
fQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfcHJpbnRpbmcodm9pZCkKK3sK
KyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OworCisgICAgd2ViVmlldyA9IFdFQktJVF9XRUJf
VklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZp
ZXcpOworICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVCh3ZWJWaWV3KS0+cmVmX2NvdW50LCA9
PSwgMSk7CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxodG1sPjxib2R5PjxoMT5XZWJLaXRHVEsrITwv
aDE+PC9ib2R5PjwvaHRtbD4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGV4
dC9odG1sIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInV0Zi04IiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGU6Ly8iKTsKKworICAgIEdNYWluTG9vcCog
bG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKKworICAgIC8vIERvZXMgamF2YXNj
cmlwdCBwcmludCgpIHdvcmsgY29ycmVjdGx5PworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmll
dywgInByaW50LXJlcXVlc3RlZCIsCisgICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKHBy
aW50X3JlcXVlc3RlZF9jYiksCisgICAgICAgICAgICAgICAgICAgICBsb29wKTsKKworICAgIGdf
b2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKHdlYlZpZXcpLCAic2lnbmFsLWhhbmRsZWQiLCBHSU5U
X1RPX1BPSU5URVIoRkFMU0UpKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfZXhlY3V0ZV9zY3JpcHQg
KHdlYlZpZXcsICJwcmludCgpOyIpOworCisgICAgLy8gR2l2ZSBqYXZhc2NyaXB0Y29yZSBzb21l
IHRpbWUgdG8gcHJvY2VzcyB0aGUgcHJpbnQgcmVxdWVzdCwgYnV0CisgICAgLy8gcHJlcGFyZSBh
IHRpbWVvdXQgdG8gYXZvaWQgaXQgcnVubmluZyBmb3JldmVyIGluIGNhc2UgdGhlIHNpZ25hbCBp
cworICAgIC8vIG5ldmVyIGVtaXR0ZWQuCisgICAgZ190aW1lb3V0X2FkZCgxMDAwLCAoR1NvdXJj
ZUZ1bmMpcHJpbnRfdGltZW91dCwgbG9vcCk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwor
CisgICAgZ19hc3NlcnRfY21waW50KEdQT0lOVEVSX1RPX0lOVChnX29iamVjdF9nZXRfZGF0YShH
X09CSkVDVCh3ZWJWaWV3KSwgInNpZ25hbC1oYW5kbGVkIikpLCA9PSwgVFJVRSk7CisKKyAgICAv
LyBEb2VzIHByaW50aW5nIGRpcmVjdGx5IHRvIGEgZmlsZT8KKyAgICBHRXJyb3IgKmVycm9yID0g
TlVMTDsKKyAgICBnY2hhciogdGVtcG9yYXJ5RmlsZW5hbWUgPSBOVUxMOworICAgIGdpbnQgZmQg
PSBnX2ZpbGVfb3Blbl90bXAgKCJ3ZWJraXQtdGVzdHdlYmZyYW1lLVhYWFhYWCIsICZ0ZW1wb3Jh
cnlGaWxlbmFtZSwgJmVycm9yKTsKKyAgICBjbG9zZShmZCk7CisKKyAgICBpZiAoZXJyb3IpIHsK
KyAgICAgICAgZ19jcml0aWNhbCgiRmFpbGVkIHRvIG9wZW4gYSB0ZW1wb3JhcnkgZmlsZSBmb3Ig
d3JpdGluZzogJXMuIiwgZXJyb3ItPm1lc3NhZ2UpOworICAgICAgICBnX2Vycm9yX2ZyZWUoZXJy
b3IpOworICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgICAgLy8gV2UgZGVsZXRlIHRo
ZSBmaWxlLCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgZmlndXJlIG91dCB0aGF0IHRoZQorICAgIC8v
IGZpbGUgZ290IHByaW50ZWQ7CisgICAgaWYgKGdfdW5saW5rKHRlbXBvcmFyeUZpbGVuYW1lKSA9
PSAtMSkgeworICAgICAgICBnX3dhcm5pbmcoIkZhaWxlZCB0byBkZWxldGUgdGhlIHRlbXBvcmFy
eSBmaWxlOiAlcy5cblRoaXMgbWF5IGNhdXNlIHRoZSB0ZXN0IHRvIGJlIGJvZ3VzLiIsIGdfc3Ry
ZXJyb3IoZXJybm8pKTsKKyAgICB9CisKKyAgICBXZWJLaXRXZWJGcmFtZSogd2ViRnJhbWUgPSB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUod2ViVmlldyk7CisgICAgR3RrUHJpbnRPcGVy
YXRpb24qIG9wZXJhdGlvbiA9IGd0a19wcmludF9vcGVyYXRpb25fbmV3KCk7CisgICAgR3RrUHJp
bnRPcGVyYXRpb25BY3Rpb24gYWN0aW9uID0gR1RLX1BSSU5UX09QRVJBVElPTl9BQ1RJT05fRVhQ
T1JUOworICAgIEd0a1ByaW50T3BlcmF0aW9uUmVzdWx0IHJlc3VsdDsKKworICAgIGd0a19wcmlu
dF9vcGVyYXRpb25fc2V0X2V4cG9ydF9maWxlbmFtZShvcGVyYXRpb24sIHRlbXBvcmFyeUZpbGVu
YW1lKTsKKyAgICByZXN1bHQgPSB3ZWJraXRfd2ViX2ZyYW1lX3ByaW50X2Z1bGwgKHdlYkZyYW1l
LCBvcGVyYXRpb24sIGFjdGlvbiwgTlVMTCk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQocmVzdWx0
LCA9PSwgR1RLX1BSSU5UX09QRVJBVElPTl9SRVNVTFRfQVBQTFkpOworICAgIGdfYXNzZXJ0X2Nt
cGludChnX2ZpbGVfdGVzdCh0ZW1wb3JhcnlGaWxlbmFtZSwgR19GSUxFX1RFU1RfSVNfUkVHVUxB
UiksID09LCBUUlVFKTsKKworICAgIGdfdW5saW5rKHRlbXBvcmFyeUZpbGVuYW1lKTsKKyAgICBn
X29iamVjdF91bnJlZihvcGVyYXRpb24pOworY2xlYW51cDoKKyAgICBnX29iamVjdF91bnJlZih3
ZWJWaWV3KTsKKyAgICBnX2ZyZWUodGVtcG9yYXJ5RmlsZW5hbWUpOworfQorCitzdGF0aWMgdm9p
ZCB0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfcmVzcG9uc2UoKQoreworICAgIFdlYktpdFdlYkZyYW1l
KiBmcmFtZSA9IGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfRlJBTUUsIE5VTEwpOworICAg
IFdlYktpdE5ldHdvcmtSZXNwb25zZSogcmVzcG9uc2UgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9u
ZXR3b3JrX3Jlc3BvbnNlKGZyYW1lKTsKKyAgICBnX2Fzc2VydCghcmVzcG9uc2UpOworICAgIGdf
b2JqZWN0X3VucmVmKGZyYW1lKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2
KQoreworICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKKworICAgIGdfdGVz
dF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7CisgICAgZ190ZXN0X2FkZF9m
dW5jKCIvd2Via2l0L3dlYnZpZXcvY3JlYXRlX2Rlc3Ryb3kiLCB0ZXN0X3dlYmtpdF93ZWJfZnJh
bWVfY3JlYXRlX2Rlc3Ryb3kpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJ2aWV3
L2ZyYW1lLWNyZWF0ZWRfc2lnbmFsIiwgdGVzdF93ZWJraXRfd2ViX2ZyYW1lX2NyZWF0ZWRfc2ln
bmFsKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2ViZnJhbWUvbGlmZXRpbWUiLCB0
ZXN0X3dlYmtpdF93ZWJfZnJhbWVfbGlmZXRpbWUpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dl
YmtpdC93ZWJ2aWV3L3ByaW50aW5nIiwgdGVzdF93ZWJraXRfd2ViX2ZyYW1lX3ByaW50aW5nKTsK
KyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vidmlldy9yZXNwb25zZSIsIHRlc3Rfd2Vi
a2l0X3dlYl9mcmFtZV9yZXNwb25zZSk7CisgICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7Cit9CmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2ViaGlz
dG9yeWl0ZW0uYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJo
aXN0b3J5aXRlbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyZTE5MWMK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90
ZXN0d2ViaGlzdG9yeWl0ZW0uYwpAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA5IEphbiBNaWNoYWVsIEFsb256bworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8
Z2xpYi5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+
CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogaXRlbTsKK30g
V2ViSGlzdG9yeUl0ZW1GaXh0dXJlOworCitzdGF0aWMgdm9pZCB3ZWJfaGlzdG9yeV9pdGVtX2Zp
eHR1cmVfc2V0dXAoV2ViSGlzdG9yeUl0ZW1GaXh0dXJlKiBmaXh0dXJlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAg
ICBmaXh0dXJlLT5pdGVtID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dpdGhfZGF0YSgi
aHR0cDovL2V4YW1wbGUuY29tLyIsICJFeGFtcGxlMSIpOworICAgIGdfYXNzZXJ0X2NtcGludChH
X09CSkVDVChmaXh0dXJlLT5pdGVtKS0+cmVmX2NvdW50LCA9PSAsIDEpOworICAgIGdfYXNzZXJ0
KGZpeHR1cmUtPml0ZW0gIT0gTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYl9oaXN0b3J5X2l0
ZW1fZml4dHVyZV90ZWFyZG93bihXZWJIaXN0b3J5SXRlbUZpeHR1cmUqIGZpeHR1cmUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NvbnN0cG9pbnRlciBk
YXRhKQoreworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPml0ZW0gIT0gTlVMTCk7CisgICAgZ19hc3Nl
cnRfY21waW50KEdfT0JKRUNUKGZpeHR1cmUtPml0ZW0pLT5yZWZfY291bnQsID09LCAxKTsKK30K
Kworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfZGF0YShXZWJI
aXN0b3J5SXRlbUZpeHR1cmUqIGZpeHR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3RpdGxlKGZpeHR1cmUtPml0ZW0p
LCA9PSwgIkV4YW1wbGUxIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9y
eV9pdGVtX2dldF91cmkoZml4dHVyZS0+aXRlbSksID09LCAiaHR0cDovL2V4YW1wbGUuY29tLyIp
OworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2FsdGVybmF0
ZV90aXRsZShXZWJIaXN0b3J5SXRlbUZpeHR1cmUqIGZpeHR1cmUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY29uc3Rwb2ludGVyIGRh
dGEpCit7CisgICAgd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fc2V0X2FsdGVybmF0ZV90aXRsZShm
aXh0dXJlLT5pdGVtLCAiQWx0ZXJuYXRlIHRpdGxlIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdl
YmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF9hbHRlcm5hdGVfdGl0bGUoZml4dHVyZS0+aXRlbSks
ID09LCAiQWx0ZXJuYXRlIHRpdGxlIik7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiog
YXJndikKK3sKKyAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7CisKKyAgICBn
X3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOworICAgIGdfdGVzdF9h
ZGQoIi93ZWJraXQvd2ViaGlzdG9yeWl0ZW0vZ2V0X2RhdGEiLAorICAgICAgICAgICAgICAgV2Vi
SGlzdG9yeUl0ZW1GaXh0dXJlLCAwLCB3ZWJfaGlzdG9yeV9pdGVtX2ZpeHR1cmVfc2V0dXAsCisg
ICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF9kYXRhLCB3ZWJf
aGlzdG9yeV9pdGVtX2ZpeHR1cmVfdGVhcmRvd24pOworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQv
d2ViaGlzdG9yeWl0ZW0vYWx0ZXJuYXRlX3RpdGxlIiwKKyAgICAgICAgICAgICAgIFdlYkhpc3Rv
cnlJdGVtRml4dHVyZSwgMCwgd2ViX2hpc3RvcnlfaXRlbV9maXh0dXJlX3NldHVwLAorICAgICAg
ICAgICAgICAgdGVzdF93ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9hbHRlcm5hdGVfdGl0bGUsIHdl
Yl9oaXN0b3J5X2l0ZW1fZml4dHVyZV90ZWFyZG93bik7CisgICAgcmV0dXJuIGdfdGVzdF9ydW4g
KCk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90
ZXN0d2ViaW5zcGVjdG9yLmMgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90
ZXN0d2ViaW5zcGVjdG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc0
MzgyZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
R3RrL3Rlc3R3ZWJpbnNwZWN0b3IuYwpAQCAtMCwwICsxLDE3MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9tZS5vcmc+CisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJ0ZXN0X3V0aWxzLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcu
aD4KKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdl
YmtpdC93ZWJraXQuaD4KKworR01haW5Mb29wICpsb29wOworR3RrV2lkZ2V0ICp3aW5kb3c7CisK
K3N0YXRpYyBnYm9vbGVhbiBxdWl0TG9vcChncG9pbnRlciBkYXRhKQoreworICAgIGdfbWFpbl9s
b29wX3F1aXQobG9vcCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKKy8qIElnbm9yZSBzaW1wbGUg
dHJhbnNsYXRpb24tcmVsYXRlZCBtZXNzYWdlcyBhbmQgdXBncmFkZSBvdGhlcgorICogbWVzc2Fn
ZXMgdG8gd2FybmluZ3MuCisgKi8KK3N0YXRpYyBnYm9vbGVhbiBjb25zb2xlTWVzc2FnZUNhbGxi
YWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIHVuc2lnbmVk
IGludCBsaW5lLCBjb25zdCBjaGFyKiBzb3VyY2VJZCkKK3sKKyAgICBpZiAoc3Ryc3RyKG1lc3Nh
Z2UsICJMb2NhbGl6ZWQgc3RyaW5nIikgfHwgc3Ryc3RyKG1lc3NhZ2UsICJQcm90b2NvbCBFcnJv
cjogdGhlIG1lc3NhZ2UgaXMgZm9yIG5vbi1leGlzdGluZyBkb21haW4gJ1Byb2ZpbGVyJyIpIHx8
CisgICAgICAgIHN0cnN0cihtZXNzYWdlLCAiRGlkbid0IGZpbmQgYSBUcmVlRWxlbWVudCBmb3Ig
YSByZXByZXNlbnRlZE9iamVjdCIpKQorICAgICAgICByZXR1cm4gVFJVRTsKKworICAgIGdfd2Fy
bmluZygiQ29uc29sZTogJXMgQCVkOiAlc1xuIiwgc291cmNlSWQsIGxpbmUsIG1lc3NhZ2UpOwor
ICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgV2ViS2l0V2ViVmlldyogaW5zcGVjdEVsZW1l
bnRDYWxsYmFjayhXZWJLaXRXZWJJbnNwZWN0b3IgKmluc3BlY3RvciwgV2ViS2l0V2ViVmlldyAq
aW5zcGVjdGVkV2ViVmlldywgaW50ICp0aW1lc0VsZW1lbnRJbnNwZWN0ZWQpCit7CisgICAgKnRp
bWVzRWxlbWVudEluc3BlY3RlZCA9ICp0aW1lc0VsZW1lbnRJbnNwZWN0ZWQgKyAxOworCisgICAg
d2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7CisKKyAgICBHdGtX
aWRnZXQgKm5ld1dlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7CisgICAgZ3RrX2NvbnRh
aW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCBuZXdXZWJWaWV3KTsKKworICAgIGdfc2ln
bmFsX2Nvbm5lY3QobmV3V2ViVmlldywgImNvbnNvbGUtbWVzc2FnZSIsCisgICAgICAgICAgICAg
ICAgICAgICBHX0NBTExCQUNLKGNvbnNvbGVNZXNzYWdlQ2FsbGJhY2spLCBOVUxMKTsKKworICAg
IHJldHVybiBXRUJLSVRfV0VCX1ZJRVcobmV3V2ViVmlldyk7Cit9CisKK3N0YXRpYyBnYm9vbGVh
biBjbG9zZUluc3BlY3RvcihXZWJLaXRXZWJJbnNwZWN0b3IgKmluc3BlY3RvciwgaW50ICp0aW1l
c0Nsb3NlZCkKK3sKKyAgICAqdGltZXNDbG9zZWQgPSAqdGltZXNDbG9zZWQgKyAxOworCisgICAg
Z3RrX3dpZGdldF9kZXN0cm95KHdpbmRvdyk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRp
YyBnYm9vbGVhbiBzaG93SW5zcGVjdG9yKFdlYktpdFdlYkluc3BlY3RvciAqaW5zcGVjdG9yLCBn
cG9pbnRlciBkYXRhKQoreworICAgIGdfaWRsZV9hZGQocXVpdExvb3AsIE5VTEwpOworICAgIHJl
dHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZCBsb2FkRmluaXNoZWQoV2ViS2l0V2ViVmlldyAq
d2ViVmlldywgV2ViS2l0V2ViRnJhbWUgKmZyYW1lLCBnYm9vbGVhbiAqaXNMb2FkRmluaXNoZWQp
Cit7CisgICAgKmlzTG9hZEZpbmlzaGVkID0gVFJVRTsKKyAgICBpZiAoZ19tYWluX2xvb3BfaXNf
cnVubmluZyhsb29wKSkKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKK30KKworc3Rh
dGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX2luc3BlY3Rvcl9jbG9zZV9hbmRfaW5zcGVjdCgpCit7
CisgICAgV2ViS2l0V2ViVmlldyAqd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2Vi
X3ZpZXdfbmV3KCkpOworICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisK
KyAgICBnYm9vbGVhbiBpc0xvYWRGaW5pc2hlZCA9IEZBTFNFOworICAgIGdfc2lnbmFsX2Nvbm5l
Y3Qod2ViVmlldywgImxvYWQtZmluaXNoZWQiLCBHX0NBTExCQUNLKGxvYWRGaW5pc2hlZCksICZp
c0xvYWRGaW5pc2hlZCk7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8aHRtbD48Ym9keT48cD53b29ob288
L3A+PC9ib2R5PjwvaHRtbD4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGV4
dC9odG1sIiwgIlVURi04IiwgImZpbGU6Ly8iKTsKKyAgICBpZiAoIWlzTG9hZEZpbmlzaGVkKQor
ICAgICAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICBnX29iamVjdF9zZXQod2Via2l0
X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3KSwgImVuYWJsZS1kZXZlbG9wZXItZXh0cmFz
IiwgVFJVRSwgTlVMTCk7CisgICAgV2ViS2l0V2ViSW5zcGVjdG9yICppbnNwZWN0b3IgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X2luc3BlY3Rvcih3ZWJWaWV3KTsKKworICAgIGludCB0aW1lc0VsZW1l
bnRJbnNwZWN0ZWQgPSAwOworICAgIGludCB0aW1lc0Nsb3NlZCA9IDA7CisgICAgZ19vYmplY3Rf
Y29ubmVjdChpbnNwZWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjppbnNwZWN0
LXdlYi12aWV3IiwgR19DQUxMQkFDSyhpbnNwZWN0RWxlbWVudENhbGxiYWNrKSwgJnRpbWVzRWxl
bWVudEluc3BlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6OnNob3ctd2luZG93
IiwgR19DQUxMQkFDSyhzaG93SW5zcGVjdG9yKSwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAg
ICJzaWduYWw6OmNsb3NlLXdpbmRvdyIsIEdfQ0FMTEJBQ0soY2xvc2VJbnNwZWN0b3IpLCAmdGlt
ZXNDbG9zZWQsCisgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKworICAgIHdlYmtpdF93ZWJf
aW5zcGVjdG9yX2luc3BlY3RfY29vcmRpbmF0ZXMoaW5zcGVjdG9yLCAwLjAsIDAuMCk7CisgICAg
Z19hc3NlcnRfY21waW50KHRpbWVzRWxlbWVudEluc3BlY3RlZCwgPT0sIDEpOworCisgICAgZ19t
YWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgd2Via2l0X3dlYl9pbnNwZWN0b3JfY2xvc2UoaW5z
cGVjdG9yKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGltZXNDbG9zZWQsID09LCAxKTsKKworICAg
IHdlYmtpdF93ZWJfaW5zcGVjdG9yX2luc3BlY3RfY29vcmRpbmF0ZXMoaW5zcGVjdG9yLCAwLjAs
IDAuMCk7CisgICAgZ19hc3NlcnRfY21waW50KHRpbWVzRWxlbWVudEluc3BlY3RlZCwgPT0sIDIp
OworCisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgZ3RrX3dpZGdldF9kZXN0cm95
KEdUS19XSURHRVQod2ViVmlldykpOworICAgIGdfYXNzZXJ0X2NtcGludCh0aW1lc0Nsb3NlZCwg
PT0sIDIpOworCisgICAgZ19tYWluX2xvb3BfdW5yZWYobG9vcCk7Cit9CisKK3N0YXRpYyB2b2lk
IHRlc3Rfd2Via2l0X3dlYl9pbnNwZWN0b3JfZGVzdHJveV9pbnNwZWN0ZWRfd2ViX3ZpZXcoKQor
eworICAgIFdlYktpdFdlYlZpZXcgKndlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dl
Yl92aWV3X25ldygpKTsKKyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwor
CisgICAgZ2Jvb2xlYW4gaXNMb2FkRmluaXNoZWQgPSBGQUxTRTsKKyAgICBnX3NpZ25hbF9jb25u
ZWN0KHdlYlZpZXcsICJsb2FkLWZpbmlzaGVkIiwgR19DQUxMQkFDSyhsb2FkRmluaXNoZWQpLCAm
aXNMb2FkRmluaXNoZWQpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGh0bWw+PGJvZHk+PHA+d29vaG9v
PC9wPjwvYm9keT48L2h0bWw+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRl
eHQvaHRtbCIsICJVVEYtOCIsICJmaWxlOi8vIik7CisgICAgaWYgKCFpc0xvYWRGaW5pc2hlZCkK
KyAgICAgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgZ19vYmplY3Rfc2V0KHdlYmtp
dF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmlldyksICJlbmFibGUtZGV2ZWxvcGVyLWV4dHJh
cyIsIFRSVUUsIE5VTEwpOworICAgIFdlYktpdFdlYkluc3BlY3RvciAqaW5zcGVjdG9yID0gd2Vi
a2l0X3dlYl92aWV3X2dldF9pbnNwZWN0b3Iod2ViVmlldyk7CisKKyAgICBpbnQgdGltZXNFbGVt
ZW50SW5zcGVjdGVkID0gMDsKKyAgICBpbnQgdGltZXNDbG9zZWQgPSAwOworICAgIGdfb2JqZWN0
X2Nvbm5lY3QoaW5zcGVjdG9yLAorICAgICAgICAgICAgICAgICAgICAgInNpZ25hbDo6aW5zcGVj
dC13ZWItdmlldyIsIEdfQ0FMTEJBQ0soaW5zcGVjdEVsZW1lbnRDYWxsYmFjayksICZ0aW1lc0Vs
ZW1lbnRJbnNwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjpzaG93LXdpbmRv
dyIsIEdfQ0FMTEJBQ0soc2hvd0luc3BlY3RvciksIE5VTEwsCisgICAgICAgICAgICAgICAgICAg
ICAic2lnbmFsOjpjbG9zZS13aW5kb3ciLCBHX0NBTExCQUNLKGNsb3NlSW5zcGVjdG9yKSwgJnRp
bWVzQ2xvc2VkLAorICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICB3ZWJraXRfd2Vi
X2luc3BlY3Rvcl9pbnNwZWN0X2Nvb3JkaW5hdGVzKGluc3BlY3RvciwgMC4wLCAwLjApOworICAg
IGdfYXNzZXJ0X2NtcGludCh0aW1lc0VsZW1lbnRJbnNwZWN0ZWQsID09LCAxKTsKKworICAgIGdf
bWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIGd0a193aWRnZXRfZGVzdHJveShHVEtfV0lER0VU
KHdlYlZpZXcpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGltZXNDbG9zZWQsID09LCAxKTsKKwor
ICAgIGdfbWFpbl9sb29wX3VucmVmKGxvb3ApOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hh
cioqIGFyZ3YpCit7CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisg
ICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBnX3Rl
c3RfYWRkX2Z1bmMoIi93ZWJraXQvd2ViaW5zcGVjdG9yL2Rlc3Ryb3ktaW5zcGVjdGVkLXdlYi12
aWV3IiwgdGVzdF93ZWJraXRfd2ViX2luc3BlY3Rvcl9kZXN0cm95X2luc3BlY3RlZF93ZWJfdmll
dyk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYmluc3BlY3Rvci9jbG9zZS1hbmQt
aW5zcGVjdCIsIHRlc3Rfd2Via2l0X3dlYl9pbnNwZWN0b3JfY2xvc2VfYW5kX2luc3BlY3QpOwor
CisgICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJwbHVnaW5kYXRhYmFzZS5jIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYnBsdWdpbmRhdGFiYXNlLmMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUyODExYgotLS0gL2Rldi9udWxsCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJwbHVnaW5kYXRhYmFz
ZS5jCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMu
TC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8Z2xp
Yi5oPgorI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2lu
Y2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKworLyogVGhpcyBmdW5jdGlvbiBpcyBub3QgcHVibGlj
LCBzbyB3ZSBuZWVkIGFuIGV4dGVybiBkZWNsYXJhdGlvbiAqLworZXh0ZXJuIHZvaWQgd2Via2l0
X3dlYl9zZXR0aW5nc19hZGRfZXh0cmFfcGx1Z2luX2RpcmVjdG9yeShXZWJLaXRXZWJWaWV3KiB2
aWV3LCBjb25zdCBnY2hhciogZGlyZWN0b3J5KTsKKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRf
d2ViX3BsdWdpbl9kYXRhYmFzZV9nZXRfcGx1Z2lucygpCit7CisgICAgV2ViS2l0V2ViVmlldyog
dmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIFdlYktp
dFdlYlBsdWdpbkRhdGFiYXNlKiBkYXRhYmFzZTsKKyAgICBHU0xpc3QqIHBsdWdpbkxpc3QsICpw
OworICAgIGdib29sZWFuIGZvdW5kID0gRkFMU0U7CisgICAgZ2Jvb2xlYW4gZW5hYmxlZCA9IEZB
TFNFOworCisgICAgd2Via2l0X3dlYl9zZXR0aW5nc19hZGRfZXh0cmFfcGx1Z2luX2RpcmVjdG9y
eSh2aWV3LCBURVNUX1BMVUdJTl9ESVIpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKEdfT0JKRUNU
KHZpZXcpKTsKKworICAgIGRhdGFiYXNlID0gd2Via2l0X2dldF93ZWJfcGx1Z2luX2RhdGFiYXNl
KCk7CisgICAgcGx1Z2luTGlzdCA9IHdlYmtpdF93ZWJfcGx1Z2luX2RhdGFiYXNlX2dldF9wbHVn
aW5zKGRhdGFiYXNlKTsKKyAgICBmb3IgKHAgPSBwbHVnaW5MaXN0OyBwOyBwID0gcC0+bmV4dCkg
eworICAgICAgICBXZWJLaXRXZWJQbHVnaW4qIHBsdWdpbiA9IChXZWJLaXRXZWJQbHVnaW4qKXAt
PmRhdGE7CisgICAgICAgIGlmICghZ19zdHJjbXAwKHdlYmtpdF93ZWJfcGx1Z2luX2dldF9uYW1l
KHBsdWdpbiksICJXZWJLaXQgVGVzdCBQbHVnSW4iKSAmJgorICAgICAgICAgICAgIWdfc3RyY21w
MCh3ZWJraXRfd2ViX3BsdWdpbl9nZXRfZGVzY3JpcHRpb24ocGx1Z2luKSwgIlNpbXBsZSBOZXRz
Y2FwZcKuIHBsdWctaW4gdGhhdCBoYW5kbGVzIHRlc3QgY29udGVudCBmb3IgV2ViS2l0IikpIHsK
KyAgICAgICAgICAgIGZvdW5kID0gVFJVRTsKKyAgICAgICAgICAgIGVuYWJsZWQgPSB3ZWJraXRf
d2ViX3BsdWdpbl9nZXRfZW5hYmxlZChwbHVnaW4pOworICAgICAgICAgICAgd2Via2l0X3dlYl9w
bHVnaW5fc2V0X2VuYWJsZWQocGx1Z2luLCBGQUxTRSk7CisgICAgICAgIH0KKyAgICB9CisgICAg
d2Via2l0X3dlYl9wbHVnaW5fZGF0YWJhc2VfcGx1Z2luc19saXN0X2ZyZWUocGx1Z2luTGlzdCk7
CisgICAgZ19hc3NlcnQoZm91bmQpOworICAgIGdfYXNzZXJ0KGVuYWJsZWQpOworCisgICAgd2Vi
a2l0X3dlYl9wbHVnaW5fZGF0YWJhc2VfcmVmcmVzaChkYXRhYmFzZSk7CisgICAgcGx1Z2luTGlz
dCA9IHdlYmtpdF93ZWJfcGx1Z2luX2RhdGFiYXNlX2dldF9wbHVnaW5zKGRhdGFiYXNlKTsKKwor
ICAgIGZvciAocCA9IHBsdWdpbkxpc3Q7IHA7IHAgPSBwLT5uZXh0KSB7CisgICAgICAgIFdlYktp
dFdlYlBsdWdpbiogcGx1Z2luID0gKFdlYktpdFdlYlBsdWdpbiopcC0+ZGF0YTsKKyAgICAgICAg
aWYgKCFnX3N0cmNtcDAod2Via2l0X3dlYl9wbHVnaW5fZ2V0X25hbWUocGx1Z2luKSwgIldlYktp
dCBUZXN0IFBsdWdJbiIpICYmCisgICAgICAgICAgICAhZ19zdHJjbXAwKHdlYmtpdF93ZWJfcGx1
Z2luX2dldF9kZXNjcmlwdGlvbihwbHVnaW4pLCAiU2ltcGxlIE5ldHNjYXBlwq4gcGx1Zy1pbiB0
aGF0IGhhbmRsZXMgdGVzdCBjb250ZW50IGZvciBXZWJLaXQiKSkKKyAgICAgICAgICAgIGVuYWJs
ZWQgPSB3ZWJraXRfd2ViX3BsdWdpbl9nZXRfZW5hYmxlZChwbHVnaW4pOworICAgIH0KKyAgICB3
ZWJraXRfd2ViX3BsdWdpbl9kYXRhYmFzZV9wbHVnaW5zX2xpc3RfZnJlZShwbHVnaW5MaXN0KTsK
KyAgICBnX2Fzc2VydCghZW5hYmxlZCk7CisKKyAgICBnX29iamVjdF91bnJlZih2aWV3KTsKK30K
KworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIGd0a190ZXN0X2luaXQo
JmFyZ2MsICZhcmd2LCBOVUxMKTsKKworICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvIik7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnBsdWdpbmRh
dGFiYXNlL2dldHBsdWdpbnMiLCB0ZXN0X3dlYmtpdF93ZWJfcGx1Z2luX2RhdGFiYXNlX2dldF9w
bHVnaW5zKTsKKyAgICByZXR1cm4gZ190ZXN0X3J1biAoKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJyZXNvdXJjZS5jIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYnJlc291cmNlLmMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM1OGI3YQotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJyZXNvdXJjZS5jCkBAIC0w
LDAgKzEsMzMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEphbiBNaWNoYWVsIEFsb256
bworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGd0ay9n
dGsuaD4KKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNp
bmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+CisKKyNkZWZpbmUgSU5ERVhfSFRNTCAiPGh0bWw+PC9o
dG1sPiIKKyNkZWZpbmUgTUFJTl9IVE1MICI8aHRtbD48aGVhZD48c2NyaXB0IGxhbmd1YWdlPVwi
amF2YXNjcmlwdFwiIHNyYz1cIi9qYXZhc2NyaXB0LmpzXCI+PC9zY3JpcHQ+PC9oZWFkPjxib2R5
PjxoMT5oYWg8L2gxPjwvaHRtbD4iCisjZGVmaW5lIEpBVkFTQ1JJUFQgImZ1bmN0aW9uIGJsYWgg
KCkgeyB2YXIgYSA9IDE7IH0iCisKK0dNYWluTG9vcCogbG9vcDsKK1NvdXBTZXNzaW9uICpzZXNz
aW9uOworY2hhciAqYmFzZV91cmk7CitXZWJLaXRXZWJSZXNvdXJjZSogbWFpbl9yZXNvdXJjZTsK
K1dlYktpdFdlYlJlc291cmNlKiBzdWJfcmVzb3VyY2U7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAg
ICBXZWJLaXRXZWJSZXNvdXJjZSogd2ViUmVzb3VyY2U7CisgICAgV2ViS2l0V2ViVmlldyogd2Vi
VmlldzsKK30gV2ViUmVzb3VyY2VGaXh0dXJlOworCisvKiBGb3IgcmVhbCByZXF1ZXN0IHRlc3Rp
bmcgKi8KK3N0YXRpYyB2b2lkCitzZXJ2ZXJfY2FsbGJhY2sgKFNvdXBTZXJ2ZXIgKnNlcnZlciwg
U291cE1lc3NhZ2UgKm1zZywKKyAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwgR0hh
c2hUYWJsZSAqcXVlcnksCisgICAgICAgICAgICAgICAgIFNvdXBDbGllbnRDb250ZXh0ICpjb250
ZXh0LCBncG9pbnRlciBkYXRhKQoreworICAgIGlmIChtc2ctPm1ldGhvZCAhPSBTT1VQX01FVEhP
RF9HRVQpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMgKG1zZywgU09VUF9TVEFU
VVNfTk9UX0lNUExFTUVOVEVEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNvdXBf
bWVzc2FnZV9zZXRfc3RhdHVzIChtc2csIFNPVVBfU1RBVFVTX09LKTsKKworICAgIC8qIFJlZGly
ZWN0ICovCisgICAgaWYgKGdfc3RyX2VxdWFsIChwYXRoLCAiLyIpKSB7CisgICAgICAgIHNvdXBf
bWVzc2FnZV9zZXRfc3RhdHVzIChtc2csIFNPVVBfU1RBVFVTX01PVkVEX1BFUk1BTkVOVExZKTsK
KworICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQgKG1zZy0+cmVzcG9uc2VfaGVh
ZGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTG9jYXRpb24iLCAi
L2luZGV4Lmh0bWwiKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsIChwYXRoLCAiL2luZGV4
Lmh0bWwiKSkgeworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQgKG1zZy0+cmVzcG9u
c2VfYm9keSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT1VQX01FTU9SWV9D
T1BZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOREVYX0hUTUwsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuIChJTkRFWF9IVE1MKSk7CisgICAg
fSBlbHNlIGlmIChnX3N0cl9lcXVhbCAocGF0aCwgIi9tYWluLmh0bWwiKSkgeworICAgICAgICBz
b3VwX21lc3NhZ2VfYm9keV9hcHBlbmQgKG1zZy0+cmVzcG9uc2VfYm9keSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTT1VQX01FTU9SWV9DT1BZLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE1BSU5fSFRNTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHJsZW4gKE1BSU5fSFRNTCkpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwg
KHBhdGgsICIvamF2YXNjcmlwdC5qcyIpKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2Fw
cGVuZCAobXNnLT5yZXNwb25zZV9ib2R5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFNPVVBfTUVNT1JZX0NPUFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SkFWQVNDUklQVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4gKEpB
VkFTQ1JJUFQpKTsKKyAgICB9CisKKworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlICht
c2ctPnJlc3BvbnNlX2JvZHkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJfcmVzb3VyY2VfZml4dHVy
ZV9zZXR1cChXZWJSZXNvdXJjZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkK
K3sKKyAgICBmaXh0dXJlLT53ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmll
d19uZXcoKSk7CisgICAgZ19vYmplY3RfcmVmX3NpbmsoZml4dHVyZS0+d2ViVmlldyk7CisgICAg
Y29uc3QgZ2NoYXIqIHdlYkRhdGEgPSAiPGh0bWw+PC9odG1sPiI7CisgICAgZml4dHVyZS0+d2Vi
UmVzb3VyY2UgPSB3ZWJraXRfd2ViX3Jlc291cmNlX25ldyh3ZWJEYXRhLCBzdHJsZW4od2ViRGF0
YSksICJodHRwOi8vZXhhbXBsZS5jb20vIiwgInRleHQvaHRtbCIsICJ1dGY4IiwgIkV4YW1wbGUu
Y29tIik7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+d2ViUmVzb3VyY2UpOworfQorCitzdGF0aWMg
dm9pZCB3ZWJfcmVzb3VyY2VfZml4dHVyZV90ZWFyZG93bihXZWJSZXNvdXJjZUZpeHR1cmUqIGZp
eHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBnX2Fzc2VydChmaXh0dXJlLT53ZWJS
ZXNvdXJjZSk7CisgICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+d2ViUmVzb3VyY2UpOworICAg
IGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPndlYlZpZXcpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0
X3dlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VybChXZWJSZXNvdXJjZUZpeHR1cmUqIGZpeHR1cmUs
IGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBnY2hhciogdXJsOworICAgIGdfb2JqZWN0X2dl
dChHX09CSkVDVChmaXh0dXJlLT53ZWJSZXNvdXJjZSksICJ1cmkiLCAmdXJsLCBOVUxMKTsKKyAg
ICBnX2Fzc2VydF9jbXBzdHIodXJsLCA9PSwgImh0dHA6Ly9leGFtcGxlLmNvbS8iKTsKKyAgICBn
X2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJpKGZpeHR1cmUtPndlYlJl
c291cmNlKSAsPT0sImh0dHA6Ly9leGFtcGxlLmNvbS8iKTsKKyAgICBnX2ZyZWUodXJsKTsKK30K
Kworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3Jlc291cmNlX2dldF9kYXRhKFdlYlJlc291
cmNlRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIEdTdHJpbmcq
IGNoYXJEYXRhID0gd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZGF0YShmaXh0dXJlLT53ZWJSZXNv
dXJjZSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGNoYXJEYXRhLT5zdHIsID09LCAiPGh0bWw+PC9o
dG1sPiIpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X21p
bWVfdHlwZShXZWJSZXNvdXJjZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkK
K3sKKyAgICBnY2hhciogbWltZV90eXBlOworICAgIGdfb2JqZWN0X2dldChHX09CSkVDVChmaXh0
dXJlLT53ZWJSZXNvdXJjZSksICJtaW1lLXR5cGUiLCAmbWltZV90eXBlLCBOVUxMKTsKKyAgICBn
X2Fzc2VydF9jbXBzdHIobWltZV90eXBlLCA9PSwgInRleHQvaHRtbCIpOworICAgIGdfYXNzZXJ0
X2NtcHN0cih3ZWJraXRfd2ViX3Jlc291cmNlX2dldF9taW1lX3R5cGUoZml4dHVyZS0+d2ViUmVz
b3VyY2UpLD09LCJ0ZXh0L2h0bWwiKTsKKyAgICBnX2ZyZWUobWltZV90eXBlKTsKK30KKworc3Rh
dGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3Jlc291cmNlX2dldF9lbmNvZGluZyhXZWJSZXNvdXJj
ZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBnY2hhciogdGV4
dF9lbmNvZGluZzsKKyAgICBnX29iamVjdF9nZXQoR19PQkpFQ1QoZml4dHVyZS0+d2ViUmVzb3Vy
Y2UpLCAiZW5jb2RpbmciLCAmdGV4dF9lbmNvZGluZywgTlVMTCk7CisgICAgZ19hc3NlcnRfY21w
c3RyKHRleHRfZW5jb2RpbmcsID09LCAidXRmOCIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJr
aXRfd2ViX3Jlc291cmNlX2dldF9lbmNvZGluZyhmaXh0dXJlLT53ZWJSZXNvdXJjZSksPT0sInV0
ZjgiKTsKKyAgICBnX2ZyZWUodGV4dF9lbmNvZGluZyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rf
d2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZnJhbWVfbmFtZShXZWJSZXNvdXJjZUZpeHR1cmUqIGZp
eHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBnY2hhciogZnJhbWVfbmFtZTsKKyAg
ICBnX29iamVjdF9nZXQoR19PQkpFQ1QoZml4dHVyZS0+d2ViUmVzb3VyY2UpLCAiZnJhbWUtbmFt
ZSIsICZmcmFtZV9uYW1lLCBOVUxMKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoZnJhbWVfbmFtZSwg
PT0sICJFeGFtcGxlLmNvbSIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3Jlc291
cmNlX2dldF9mcmFtZV9uYW1lKGZpeHR1cmUtPndlYlJlc291cmNlKSw9PSwiRXhhbXBsZS5jb20i
KTsKKyAgICBnX2ZyZWUoZnJhbWVfbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIHJlc291cmNlX3Jl
cXVlc3Rfc3RhcnRpbmdfY2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIFdlYktpdFdlYkZyYW1l
KiB3ZWJfZnJhbWUsIFdlYktpdFdlYlJlc291cmNlKiB3ZWJfcmVzb3VyY2UsIFdlYktpdE5ldHdv
cmtSZXF1ZXN0KiByZXF1ZXN0LCBXZWJLaXROZXR3b3JrUmVzcG9uc2UqIHJlc3BvbnNlLCBncG9p
bnRlciBkYXRhKQoreworICAgIGdpbnQqIGJlZW5fdGhlcmUgPSBkYXRhOworICAgICpiZWVuX3Ro
ZXJlID0gKmJlZW5fdGhlcmUgKyAxOworCisgICAgaWYgKCpiZWVuX3RoZXJlID09IDEpIHsKKyAg
ICAgICAgZ19hc3NlcnQoIW1haW5fcmVzb3VyY2UpOworICAgICAgICBtYWluX3Jlc291cmNlID0g
Z19vYmplY3RfcmVmKHdlYl9yZXNvdXJjZSk7CisKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdl
YmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaSh3ZWJfcmVzb3VyY2UpLCA9PSwgYmFzZV91cmkpOwor
CisgICAgICAgIC8qIFRoaXMgc2hvdWxkIGJlIGEgcmVkaXJlY3QsIHNvIHRoZSByZXNwb25zZSBt
dXN0IGJlIE5VTEwgKi8KKyAgICAgICAgZ19hc3NlcnQoIXJlc3BvbnNlKTsKKyAgICB9IGVsc2Ug
aWYgKCpiZWVuX3RoZXJlID09IDIpIHsKKyAgICAgICAgY2hhciogdXJpID0gZ19zdHJkdXBfcHJp
bnRmKCIlc2luZGV4Lmh0bWwiLCBiYXNlX3VyaSk7CisKKyAgICAgICAgZ19hc3NlcnRfY21wc3Ry
KHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaSh3ZWJfcmVzb3VyY2UpLCA9PSwgdXJpKTsKKwor
ICAgICAgICAvKiBDYW5jZWwgdGhlIHJlcXVlc3QuICovCisgICAgICAgIHdlYmtpdF9uZXR3b3Jr
X3JlcXVlc3Rfc2V0X3VyaShyZXF1ZXN0LCAiYWJvdXQ6YmxhbmsiKTsKKworICAgICAgICBnX2Zy
ZWUodXJpKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIG5vdGlmeV9sb2FkX3N0YXR1c19jYihX
ZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgR1BhcmFtU3BlYyogcHNwZWMsIGdwb2ludGVyIGRhdGEp
Cit7CisgICAgaWYgKHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMod2ViX3ZpZXcpID09
IFdFQktJVF9MT0FEX0ZJTklTSEVEKSB7CisgICAgICAgIGdib29sZWFuKiBiZWVuX3RoZXJlID0g
ZGF0YTsKKyAgICAgICAgKmJlZW5fdGhlcmUgPSBUUlVFOworCisgICAgICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSh3ZWJfdmlldyksID09LCAiYWJvdXQ6Ymxhbmsi
KTsKKworICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworICAgIH0KK30KKworc3RhdGlj
IHZvaWQgdGVzdF93ZWJfcmVzb3VyY2VfbG9hZGluZygpCit7CisgICAgV2ViS2l0V2ViVmlldyog
d2ViX3ZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBn
aW50IGJlZW5fdG9fcmVzb3VyY2VfcmVxdWVzdF9zdGFydGluZyA9IDA7CisgICAgZ2Jvb2xlYW4g
YmVlbl90b19sb2FkX2ZpbmlzaGVkID0gRkFMU0U7CisgICAgV2ViS2l0V2ViRnJhbWUqIHdlYl9m
cmFtZTsKKyAgICBXZWJLaXRXZWJEYXRhU291cmNlKiBkYXRhX3NvdXJjZTsKKworICAgIGxvb3Ag
PSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisKKyAgICBnX29iamVjdF9yZWZfc2luayh3
ZWJfdmlldyk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdlYl92aWV3LCAicmVzb3VyY2UtcmVx
dWVzdC1zdGFydGluZyIsCisgICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKHJlc291cmNl
X3JlcXVlc3Rfc3RhcnRpbmdfY2IpLAorICAgICAgICAgICAgICAgICAgICAgJmJlZW5fdG9fcmVz
b3VyY2VfcmVxdWVzdF9zdGFydGluZyk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdlYl92aWV3
LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsCisgICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNL
KG5vdGlmeV9sb2FkX3N0YXR1c19jYiksCisgICAgICAgICAgICAgICAgICAgICAmYmVlbl90b19s
b2FkX2ZpbmlzaGVkKTsKKworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh3ZWJfdmlldywg
YmFzZV91cmkpOworCisgICAgLyogV2Ugd29uJ3QgZ2V0IGZpbmlzaGVkIGltbWVkaWF0ZWx5LCBi
ZWNhdXNlIG9mIHRoZSByZWRpcmVjdCAqLworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKyAg
ICAKKyAgICB3ZWJfZnJhbWUgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUod2ViX3Zp
ZXcpOworICAgIGRhdGFfc291cmNlID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfZGF0YV9zb3VyY2Uo
d2ViX2ZyYW1lKTsKKworICAgIGdfYXNzZXJ0KG1haW5fcmVzb3VyY2UpOworICAgIGdfYXNzZXJ0
KHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X21haW5fcmVzb3VyY2UoZGF0YV9zb3VyY2UpID09
IG1haW5fcmVzb3VyY2UpOworICAgIGdfb2JqZWN0X3VucmVmKG1haW5fcmVzb3VyY2UpOworICAg
IAorICAgIGdfYXNzZXJ0X2NtcGludChiZWVuX3RvX3Jlc291cmNlX3JlcXVlc3Rfc3RhcnRpbmcs
ID09LCAyKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYmVlbl90b19sb2FkX2ZpbmlzaGVkLCA9PSwg
VFJVRSk7CisKKyAgICBnX29iamVjdF91bnJlZih3ZWJfdmlldyk7CisgICAgZ19tYWluX2xvb3Bf
dW5yZWYobG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlc291cmNlX3JlcXVlc3Rfc3RhcnRpbmdf
c3ViX2NiKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBXZWJLaXRXZWJGcmFtZSogd2ViX2ZyYW1l
LCBXZWJLaXRXZWJSZXNvdXJjZSogd2ViX3Jlc291cmNlLCBXZWJLaXROZXR3b3JrUmVxdWVzdCog
cmVxdWVzdCwgV2ViS2l0TmV0d29ya1Jlc3BvbnNlKiByZXNwb25zZSwgZ3BvaW50ZXIgZGF0YSkK
K3sKKyAgICBpZiAoIW1haW5fcmVzb3VyY2UpCisgICAgICAgIG1haW5fcmVzb3VyY2UgPSBnX29i
amVjdF9yZWYod2ViX3Jlc291cmNlKTsKKyAgICBlbHNlIGlmICghc3ViX3Jlc291cmNlKQorICAg
ICAgc3ViX3Jlc291cmNlID0gZ19vYmplY3RfcmVmKHdlYl9yZXNvdXJjZSk7Cit9CisKK3N0YXRp
YyB2b2lkIG5vdGlmeV9sb2FkX3N0YXR1c19zdWJfY2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcs
IEdQYXJhbVNwZWMqIHBzcGVjLCBncG9pbnRlciBkYXRhKQoreworICAgIGlmICh3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYl92aWV3KSA9PSBXRUJLSVRfTE9BRF9GSU5JU0hFRCkK
KyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKK30KKworc3RhdGljIGdib29sZWFuIGlk
bGVfcXVpdF9sb29wX2NiKGdwb2ludGVyIGRhdGEpCit7CisgICAgZ19tYWluX2xvb3BfcXVpdChs
b29wKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2ViX3Jlc291
cmNlX3N1Yl9yZXNvdXJjZV9sb2FkaW5nKCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJfdmll
dyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIFdlYktpdFdl
YkZyYW1lKiB3ZWJfZnJhbWU7CisgICAgV2ViS2l0V2ViRGF0YVNvdXJjZSogZGF0YV9zb3VyY2U7
CisgICAgR0xpc3QqIHN1Yl9yZXNvdXJjZXM7CisgICAgY2hhciogdXJpID0gZ19zdHJkdXBfcHJp
bnRmKCIlc21haW4uaHRtbCIsIGJhc2VfdXJpKTsKKworICAgIG1haW5fcmVzb3VyY2UgPSBOVUxM
OworICAgIAorICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisKKyAgICBn
X29iamVjdF9yZWZfc2luayh3ZWJfdmlldyk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdlYl92
aWV3LCAicmVzb3VyY2UtcmVxdWVzdC1zdGFydGluZyIsCisgICAgICAgICAgICAgICAgICAgICBH
X0NBTExCQUNLKHJlc291cmNlX3JlcXVlc3Rfc3RhcnRpbmdfc3ViX2NiKSwKKyAgICAgICAgICAg
ICAgICAgICAgIE5VTEwpOworCisgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJfdmlldywgIm5vdGlm
eTo6bG9hZC1zdGF0dXMiLAorICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhub3RpZnlf
bG9hZF9zdGF0dXNfc3ViX2NiKSwKKyAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAg
d2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHdlYl92aWV3LCB1cmkpOworCisgICAgZ19tYWluX2xv
b3BfcnVuKGxvb3ApOworCisgICAgLyogVGhlIG1haW4gcmVzb3VyY2Ugc2hvdWxkIGJlIGxvYWRl
ZDsgbm93IGxldCdzIHdhaXQgZm9yIHRoZSBzdWItcmVzb3VyY2UgdG8gbG9hZCAqLworICAgIGdf
aWRsZV9hZGQoaWRsZV9xdWl0X2xvb3BfY2IsIE5VTEwpOworICAgIGdfbWFpbl9sb29wX3J1bihs
b29wKTsKKyAgICAKKyAgICBnX2Fzc2VydChtYWluX3Jlc291cmNlICYmIHN1Yl9yZXNvdXJjZSk7
CisgICAgZ19hc3NlcnQobWFpbl9yZXNvdXJjZSAhPSBzdWJfcmVzb3VyY2UpOworCisgICAgd2Vi
X2ZyYW1lID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKHdlYl92aWV3KTsKKyAgICBk
YXRhX3NvdXJjZSA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X2RhdGFfc291cmNlKHdlYl9mcmFtZSk7
CisKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2RhdGFfc291cmNlX2dldF9tYWluX3Jlc291cmNl
KGRhdGFfc291cmNlKSA9PSBtYWluX3Jlc291cmNlKTsKKyAgICBnX29iamVjdF91bnJlZihtYWlu
X3Jlc291cmNlKTsKKworICAgIHN1Yl9yZXNvdXJjZXMgPSB3ZWJraXRfd2ViX2RhdGFfc291cmNl
X2dldF9zdWJyZXNvdXJjZXMoZGF0YV9zb3VyY2UpOworICAgIC8vIEV4cGVjdGVkIHJlc291cmNl
czogamF2YXNjcmlwdHMuanMsIGZhdmljb24uaWNvCisgICAgZ19hc3NlcnQoc3ViX3Jlc291cmNl
cyk7CisgICAgZ19hc3NlcnQoc3ViX3Jlc291cmNlcy0+bmV4dCk7CisgICAgZ19hc3NlcnQoIXN1
Yl9yZXNvdXJjZXMtPm5leHQtPm5leHQpOworCisgICAgLy8gVGVzdCB0aGF0IHRoZSBvYmplY3Qg
d2UgZ290IGZyb20gdGhlIGRhdGEgc291cmNlIGlzIHRoZSBzYW1lCisgICAgLy8gdGhhdCB3ZW50
IHRocm91Z2ggcmVzb3VyY2UtcmVxdWVzdC1zdGFydGluZy4gTm90ZSB0aGF0IHRoZSBvcmRlciBp
cworICAgIC8vIG5vdCBpbXBvcnRhbnQgKGFuZCBub3QgZ3VhcmFudGVlZCBzaW5jZSB0aGUgcmVz
b3VyY2VzIGFyZSBzdG9yZWQgaW4gYQorICAgIC8vIGhhc2h0YWJsZSkuCisgICAgZ19hc3NlcnQo
V0VCS0lUX1dFQl9SRVNPVVJDRShzdWJfcmVzb3VyY2VzLT5kYXRhKSA9PSBzdWJfcmVzb3VyY2UK
KyAgICAgICAgICAgICB8fCBXRUJLSVRfV0VCX1JFU09VUkNFKHN1Yl9yZXNvdXJjZXMtPm5leHQt
PmRhdGEpID09IHN1Yl9yZXNvdXJjZSk7CisKKyAgICBnX29iamVjdF91bnJlZih3ZWJfdmlldyk7
CisgICAgZ19tYWluX2xvb3BfdW5yZWYobG9vcCk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBj
aGFyKiogYXJndikKK3sKKyAgICBTb3VwU2VydmVyKiBzZXJ2ZXI7CisgICAgU291cFVSSSogc291
cF91cmk7CisKKyAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7CisKKyAgICBz
ZXJ2ZXIgPSBzb3VwX3NlcnZlcl9uZXcoU09VUF9TRVJWRVJfUE9SVCwgMCwgTlVMTCk7CisgICAg
c291cF9zZXJ2ZXJfcnVuX2FzeW5jKHNlcnZlcik7CisKKyAgICBzb3VwX3NlcnZlcl9hZGRfaGFu
ZGxlcihzZXJ2ZXIsIE5VTEwsIHNlcnZlcl9jYWxsYmFjaywgTlVMTCwgTlVMTCk7CisKKyAgICBz
b3VwX3VyaSA9IHNvdXBfdXJpX25ldygiaHR0cDovLzEyNy4wLjAuMS8iKTsKKyAgICBzb3VwX3Vy
aV9zZXRfcG9ydChzb3VwX3VyaSwgc291cF9zZXJ2ZXJfZ2V0X3BvcnQoc2VydmVyKSk7CisKKyAg
ICBiYXNlX3VyaSA9IHNvdXBfdXJpX3RvX3N0cmluZyhzb3VwX3VyaSwgRkFMU0UpOworICAgIHNv
dXBfdXJpX2ZyZWUoc291cF91cmkpOworCisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L3dlYnJlc291cmNlL2dl
dF91cmwiLAorICAgICAgICAgICAgICAgV2ViUmVzb3VyY2VGaXh0dXJlLCAwLCB3ZWJfcmVzb3Vy
Y2VfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X3dlYl9yZXNvdXJj
ZV9nZXRfdXJsLCB3ZWJfcmVzb3VyY2VfZml4dHVyZV90ZWFyZG93bik7CisgICAgZ190ZXN0X2Fk
ZCgiL3dlYmtpdC93ZWJyZXNvdXJjZS9nZXRfbWltZV90eXBlIiwKKyAgICAgICAgICAgICAgIFdl
YlJlc291cmNlRml4dHVyZSwgMCwgd2ViX3Jlc291cmNlX2ZpeHR1cmVfc2V0dXAsCisgICAgICAg
ICAgICAgICB0ZXN0X3dlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X21pbWVfdHlwZSwgd2ViX3Jlc291
cmNlX2ZpeHR1cmVfdGVhcmRvd24pOworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvd2VicmVzb3Vy
Y2UvZ2V0X3RleHRfZW5jb2RpbmdfbmFtZSIsCisgICAgICAgICAgICAgICBXZWJSZXNvdXJjZUZp
eHR1cmUsIDAsIHdlYl9yZXNvdXJjZV9maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVz
dF93ZWJraXRfd2ViX3Jlc291cmNlX2dldF9lbmNvZGluZywgd2ViX3Jlc291cmNlX2ZpeHR1cmVf
dGVhcmRvd24pOworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvd2VicmVzb3VyY2UvZ2V0X2ZyYW1l
X25hbWUiLAorICAgICAgICAgICAgICAgV2ViUmVzb3VyY2VGaXh0dXJlLCAwLCB3ZWJfcmVzb3Vy
Y2VfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X3dlYl9yZXNvdXJj
ZV9nZXRfZnJhbWVfbmFtZSwgd2ViX3Jlc291cmNlX2ZpeHR1cmVfdGVhcmRvd24pOworICAgIGdf
dGVzdF9hZGQoIi93ZWJraXQvd2VicmVzb3VyY2UvZ2V0X2RhdGEiLAorICAgICAgICAgICAgICAg
V2ViUmVzb3VyY2VGaXh0dXJlLCAwLCB3ZWJfcmVzb3VyY2VfZml4dHVyZV9zZXR1cCwKKyAgICAg
ICAgICAgICAgIHRlc3Rfd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZGF0YSwgd2ViX3Jlc291cmNl
X2ZpeHR1cmVfdGVhcmRvd24pOworCisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnJl
c291cmNlL2xvYWRpbmciLCB0ZXN0X3dlYl9yZXNvdXJjZV9sb2FkaW5nKTsKKyAgICBnX3Rlc3Rf
YWRkX2Z1bmMoIi93ZWJraXQvd2VicmVzb3VyY2Uvc3ViX3Jlc291cmNlX2xvYWRpbmciLCB0ZXN0
X3dlYl9yZXNvdXJjZV9zdWJfcmVzb3VyY2VfbG9hZGluZyk7CisKKyAgICByZXR1cm4gZ190ZXN0
X3J1biAoKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
R3RrL3Rlc3R3ZWJzZXR0aW5ncy5jIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRH
dGsvdGVzdHdlYnNldHRpbmdzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MzU0ODljZAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0R3RrL3Rlc3R3ZWJzZXR0aW5ncy5jCkBAIC0wLDAgKzEsMTU5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA5IEphbiBNaWNoYWVsIEFsb256bworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Vi
a2l0Lmg+CisKKy8qIFByaXZhdGUgQVBJICovCitjaGFyKiB3ZWJraXRXZWJTZXR0aW5nc1VzZXJB
Z2VudEZvclVSSShXZWJLaXRXZWJTZXR0aW5ncyAqc2V0dGluZ3MsIGNvbnN0IGNoYXIgKnVyaSk7
CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9zZXR0aW5nc19jb3B5KHZvaWQpCit7Cisg
ICAgV2ViS2l0V2ViU2V0dGluZ3MgKnNldHRpbmdzID0gd2Via2l0X3dlYl9zZXR0aW5nc19uZXco
KTsKKworICAgIC8vIFNldCBzb21lIG5vbi1kZWZhdWx0IHNldHRpbmdzIHRvIHZlcmlmeSB0aGF0
IHNldHRpbmdzIGFyZSBwcm9wZXJseSBjb3BpZWQuCisgICAgZ19vYmplY3Rfc2V0KHNldHRpbmdz
LAorICAgICAgICAgICAgICAgICAiZW5hYmxlLXdlYmdsIiwgVFJVRSwKKyAgICAgICAgICAgICAg
ICAgImVuYWJsZS1mdWxsc2NyZWVuIiwgVFJVRSwKKyAgICAgICAgICAgICAgICAgImF1dG8tbG9h
ZC1pbWFnZXMiLCBGQUxTRSwKKyAgICAgICAgICAgICAgICAgImRlZmF1bHQtZW5jb2RpbmciLCAi
dXRmLTgiLAorICAgICAgICAgICAgICAgICAiZW5hYmxlLW1lZGlhc291cmNlIiwgVFJVRSwKKyAg
ICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICBXZWJLaXRXZWJTZXR0aW5ncyAqY29weSA9IHdl
YmtpdF93ZWJfc2V0dGluZ3NfY29weShzZXR0aW5ncyk7CisKKyAgICBnYm9vbGVhbiBlbmFibGVX
ZWJHTCA9IEZBTFNFOworICAgIGdib29sZWFuIGVuYWJsZUZ1bGxzY3JlZW4gPSBGQUxTRTsKKyAg
ICBnYm9vbGVhbiBhdXRvTG9hZEltYWdlcyA9IEZBTFNFOworICAgIGdib29sZWFuIGVuYWJsZU1l
ZGlhU291cmNlID0gRkFMU0U7CisgICAgY2hhciAqZGVmYXVsdEVuY29kaW5nID0gMDsKKyAgICBn
X29iamVjdF9nZXQoY29weSwKKyAgICAgICAgICAgICAgICAgImVuYWJsZS1mdWxsc2NyZWVuIiwg
JmVuYWJsZUZ1bGxzY3JlZW4sCisgICAgICAgICAgICAgICAgICJlbmFibGUtd2ViZ2wiLCAmZW5h
YmxlV2ViR0wsCisgICAgICAgICAgICAgICAgICJhdXRvLWxvYWQtaW1hZ2VzIiwgJmF1dG9Mb2Fk
SW1hZ2VzLAorICAgICAgICAgICAgICAgICAiZGVmYXVsdC1lbmNvZGluZyIsICZkZWZhdWx0RW5j
b2RpbmcsCisgICAgICAgICAgICAgICAgICJlbmFibGUtbWVkaWFzb3VyY2UiLCAmZW5hYmxlTWVk
aWFTb3VyY2UsCisgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgZ19hc3NlcnQoZW5hYmxl
V2ViR0wpOworICAgIGdfYXNzZXJ0KGVuYWJsZUZ1bGxzY3JlZW4pOworICAgIGdfYXNzZXJ0KCFh
dXRvTG9hZEltYWdlcyk7CisgICAgZ19hc3NlcnRfY21wc3RyKGRlZmF1bHRFbmNvZGluZywgPT0s
ICJ1dGYtOCIpOworICAgIGdfYXNzZXJ0KGVuYWJsZU1lZGlhU291cmNlKTsKKyAgICBnX2ZyZWUo
ZGVmYXVsdEVuY29kaW5nKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9ub25fcXVpcmt5X3VzZXJf
YWdlbnRzKFdlYktpdFdlYlNldHRpbmdzICpzZXR0aW5ncywgY29uc3QgY2hhciAqZGVmYXVsdFVz
ZXJBZ2VudCkKK3sKKyAgICBjaGFyICp1c2VyQWdlbnQgPSAwOworCisgICAgLy8gdGVzdCBhIGN1
c3RvbSBVQSBzdHJpbmcKKyAgICB1c2VyQWdlbnQgPSAwOworICAgIGdfb2JqZWN0X3NldChzZXR0
aW5ncywgInVzZXItYWdlbnQiLCAidGVzdHdlYnNldHRpbmdzLzAuMSIsIE5VTEwpOworICAgIGdf
b2JqZWN0X2dldChzZXR0aW5ncywidXNlci1hZ2VudCIsICZ1c2VyQWdlbnQsIE5VTEwpOworICAg
IGdfYXNzZXJ0X2NtcHN0cih1c2VyQWdlbnQsID09LCAidGVzdHdlYnNldHRpbmdzLzAuMSIpOwor
ICAgIGdfZnJlZSh1c2VyQWdlbnQpOworCisgICAgLy8gc2V0dGluZyBpdCB0byBOVUxMIG9yIGFu
IGVtcHR5IHZhbHVlIHNob3VsZCBnaXZlIHVzIHRoZSBkZWZhdWx0IFVBIHN0cmluZworICAgIHVz
ZXJBZ2VudCA9IDA7CisgICAgZ19vYmplY3Rfc2V0KHNldHRpbmdzLCAidXNlci1hZ2VudCIsIDAs
IE5VTEwpOworICAgIGdfb2JqZWN0X2dldChzZXR0aW5ncywidXNlci1hZ2VudCIsICZ1c2VyQWdl
bnQsIE5VTEwpOworICAgIGdfYXNzZXJ0X2NtcHN0cih1c2VyQWdlbnQsID09LCBkZWZhdWx0VXNl
ckFnZW50KTsKKyAgICBnX2ZyZWUodXNlckFnZW50KTsKKworICAgIHVzZXJBZ2VudCA9IDA7Cisg
ICAgZ19vYmplY3Rfc2V0KHNldHRpbmdzLCAidXNlci1hZ2VudCIsICIiLCBOVUxMKTsKKyAgICBn
X29iamVjdF9nZXQoc2V0dGluZ3MsInVzZXItYWdlbnQiLCAmdXNlckFnZW50LCBOVUxMKTsKKyAg
ICBnX2Fzc2VydF9jbXBzdHIodXNlckFnZW50LCA9PSwgZGVmYXVsdFVzZXJBZ2VudCk7CisgICAg
Z19mcmVlKHVzZXJBZ2VudCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9zZXR0
aW5nc191c2VyX2FnZW50KHZvaWQpCit7CisgICAgV2ViS2l0V2ViU2V0dGluZ3MgKnNldHRpbmdz
OworICAgIEd0a1dpZGdldCAqd2ViVmlldzsKKyAgICBjaGFyICpkZWZhdWx0VXNlckFnZW50Owor
ICAgIGNoYXIgKnVzZXJBZ2VudCA9IDA7CisgICAgZ190ZXN0X2J1ZygiMTczNzUiKTsKKworICAg
IHdlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7CisgICAgZ19vYmplY3RfcmVmX3Npbmso
d2ViVmlldyk7CisKKyAgICBzZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mo
V0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpKTsKKyAgICBkZWZhdWx0VXNlckFnZW50ID0gZ19zdHJk
dXAod2Via2l0X3dlYl9zZXR0aW5nc19nZXRfdXNlcl9hZ2VudChzZXR0aW5ncykpOworCisgICAg
dGVzdF9ub25fcXVpcmt5X3VzZXJfYWdlbnRzKHNldHRpbmdzLCBkZWZhdWx0VXNlckFnZW50KTsK
KworICAgIC8qIFRlc3QgcXVpcmt5IGdvb2dsZSBkb21haW5zICovCisgICAgZ19vYmplY3Rfc2V0
KHNldHRpbmdzLCAidXNlci1hZ2VudCIsICJ0ZXN0d2Vic2V0dGluZ3MvMC4xIiwgTlVMTCk7CisK
KyAgICB1c2VyQWdlbnQgPSB3ZWJraXRXZWJTZXR0aW5nc1VzZXJBZ2VudEZvclVSSShzZXR0aW5n
cywgImh0dHA6Ly93d3cuZ29vZ2xlLmNvbS8iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodXNlckFn
ZW50LCA9PSwgInRlc3R3ZWJzZXR0aW5ncy8wLjEiKTsKKyAgICBnX2ZyZWUodXNlckFnZW50KTsK
KworICAgIHVzZXJBZ2VudCA9IHdlYmtpdFdlYlNldHRpbmdzVXNlckFnZW50Rm9yVVJJKHNldHRp
bmdzLCAiaHR0cDovL2dtYWlsLmNvbS8iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodXNlckFnZW50
LCA9PSwgInRlc3R3ZWJzZXR0aW5ncy8wLjEiKTsKKyAgICBnX2ZyZWUodXNlckFnZW50KTsKKwor
ICAgIHVzZXJBZ2VudCA9IHdlYmtpdFdlYlNldHRpbmdzVXNlckFnZW50Rm9yVVJJKHNldHRpbmdz
LCAiaHR0cDovL3d3dy5nb29nbGUuY29tLmJyLyIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih1c2Vy
QWdlbnQsID09LCAidGVzdHdlYnNldHRpbmdzLzAuMSIpOworICAgIGdfZnJlZSh1c2VyQWdlbnQp
OworCisgICAgdXNlckFnZW50ID0gd2Via2l0V2ViU2V0dGluZ3NVc2VyQWdlbnRGb3JVUkkoc2V0
dGluZ3MsICJodHRwOi8vY2FsZW5kYXIuZ29vZ2xlLmNvbS8iKTsKKyAgICBnX2Fzc2VydF9jbXBz
dHIodXNlckFnZW50LCA9PSwgInRlc3R3ZWJzZXR0aW5ncy8wLjEiKTsKKyAgICBnX2ZyZWUodXNl
ckFnZW50KTsKKworICAgIC8qIE5vdyBlbmFibGUgcXVpcmtzIGhhbmRsaW5nICovCisgICAgZ19v
YmplY3Rfc2V0KHNldHRpbmdzLCAiZW5hYmxlLXNpdGUtc3BlY2lmaWMtcXVpcmtzIiwgVFJVRSwg
TlVMTCk7CisKKyAgICB0ZXN0X25vbl9xdWlya3lfdXNlcl9hZ2VudHMoc2V0dGluZ3MsIGRlZmF1
bHRVc2VyQWdlbnQpOworCisgICAgZ19vYmplY3Rfc2V0KHNldHRpbmdzLCAidXNlci1hZ2VudCIs
ICJ0ZXN0d2Vic2V0dGluZ3MvMC4xIiwgTlVMTCk7CisKKyAgICB1c2VyQWdlbnQgPSB3ZWJraXRX
ZWJTZXR0aW5nc1VzZXJBZ2VudEZvclVSSShzZXR0aW5ncywgImh0dHA6Ly93d3cuZ29vZ2xlLmNv
bS8iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodXNlckFnZW50LCA9PSwgZGVmYXVsdFVzZXJBZ2Vu
dCk7CisgICAgZ19mcmVlKHVzZXJBZ2VudCk7CisKKyAgICB1c2VyQWdlbnQgPSB3ZWJraXRXZWJT
ZXR0aW5nc1VzZXJBZ2VudEZvclVSSShzZXR0aW5ncywgImh0dHA6Ly9nbWFpbC5jb20vIik7Cisg
ICAgZ19hc3NlcnRfY21wc3RyKHVzZXJBZ2VudCwgPT0sIGRlZmF1bHRVc2VyQWdlbnQpOworICAg
IGdfZnJlZSh1c2VyQWdlbnQpOworCisgICAgdXNlckFnZW50ID0gd2Via2l0V2ViU2V0dGluZ3NV
c2VyQWdlbnRGb3JVUkkoc2V0dGluZ3MsICJodHRwOi8vd3d3Lmdvb2dsZS5jb20uYnIvIik7Cisg
ICAgZ19hc3NlcnRfY21wc3RyKHVzZXJBZ2VudCwgPT0sIGRlZmF1bHRVc2VyQWdlbnQpOworICAg
IGdfZnJlZSh1c2VyQWdlbnQpOworCisgICAgdXNlckFnZW50ID0gd2Via2l0V2ViU2V0dGluZ3NV
c2VyQWdlbnRGb3JVUkkoc2V0dGluZ3MsICJodHRwOi8vd3d3Lmdvb2dsZS51ay5ub3QuY29tLmJy
LyIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih1c2VyQWdlbnQsID09LCAidGVzdHdlYnNldHRpbmdz
LzAuMSIpOworICAgIGdfZnJlZSh1c2VyQWdlbnQpOworCisgICAgZ19mcmVlKGRlZmF1bHRVc2Vy
QWdlbnQpOworICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOworfQorCitpbnQgbWFpbihpbnQg
YXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5V
TEwpOworCisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsK
KyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vic2V0dGluZ3MvdXNlcl9hZ2VudCIsIHRl
c3Rfd2Via2l0X3dlYl9zZXR0aW5nc191c2VyX2FnZW50KTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMo
Ii93ZWJraXQvd2Vic2V0dGluZ3MvY29weSIsIHRlc3Rfd2Via2l0X3dlYl9zZXR0aW5nc19jb3B5
KTsKKyAgICByZXR1cm4gZ190ZXN0X3J1biAoKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJ2aWV3LmMgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2Vidmlldy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjY0ZDkyYTIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2Vidmlldy5jCkBAIC0wLDAgKzEsNzQ2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDksIDIwMTAgQ29sbGFib3JhIEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAidGVzdF91dGlscy5o
IgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxz
dHJpbmcuaD4KKworI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgor
I2luY2x1ZGUgPGdkay9nZGsuaD4KKyNpbmNsdWRlIDxnZGsvZ2Rra2V5c3ltcy5oPgorI2luY2x1
ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+CisKK0dNYWluTG9vcCog
bG9vcDsKK1NvdXBTZXNzaW9uICpzZXNzaW9uOworY2hhciogYmFzZV91cmk7CisKKy8qIEZvciBy
ZWFsIHJlcXVlc3QgdGVzdGluZyAqLworc3RhdGljIHZvaWQKK3NlcnZlcl9jYWxsYmFjayhTb3Vw
U2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtc2csCisgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqIHF1ZXJ5LAorICAgICAgICAgICAgICAgICBTb3VwQ2xp
ZW50Q29udGV4dCogY29udGV4dCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBpZiAobXNnLT5tZXRo
b2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVz
KG1zZywgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1zZywgU09VUF9TVEFUVVNfT0spOwor
CisgICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvZmF2aWNvbi5pY28iKSkgeworICAgICAgICBj
aGFyKiBjb250ZW50czsKKyAgICAgICAgZ3NpemUgbGVuZ3RoOworICAgICAgICBHRXJyb3IqIGVy
cm9yID0gTlVMTDsKKworICAgICAgICBnX2ZpbGVfZ2V0X2NvbnRlbnRzKCJibGFuay5pY28iLCAm
Y29udGVudHMsICZsZW5ndGgsICZlcnJvcik7CisgICAgICAgIGdfYXNzZXJ0KCFlcnJvcik7CisK
KyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1zZy0+cmVzcG9uc2VfYm9keSwgU09V
UF9NRU1PUllfVEFLRSwgY29udGVudHMsIGxlbmd0aCk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9l
cXVhbChwYXRoLCAiL2JpZ2Rpdi5odG1sIikpIHsKKyAgICAgICAgY2hhciogY29udGVudHMgPSBn
X3N0cmR1cCgiPGh0bWw+PGJvZHk+PGEgaWQ9XCJsaW5rXCIgaHJlZj1cImh0dHA6Ly9hYmMuZGVm
XCI+dGVzdDwvYT48ZGl2IHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogZ3JlZW47IGhlaWdodDog
MTIwMHB4O1wiPjwvZGl2PjwvYm9keT48L2h0bWw+Iik7CisgICAgICAgIHNvdXBfbWVzc2FnZV9i
b2R5X2FwcGVuZChtc2ctPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGNvbnRlbnRz
LCBzdHJsZW4oY29udGVudHMpKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIv
aWZyYW1lLmh0bWwiKSkgeworICAgICAgICBjaGFyKiBjb250ZW50cyA9IGdfc3RyZHVwKCI8aHRt
bD48Ym9keSBpZD1cInNvbWUtY29udGVudFwiPjxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9y
OiBncmVlbjsgaGVpZ2h0OiA1MHB4O1wiPjwvZGl2PjxpZnJhbWUgc3JjPVwiYmlnZGl2Lmh0bWxc
Ij48L2lmcmFtZT48L2JvZHk+PC9odG1sPiIpOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9h
cHBlbmQobXNnLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBjb250ZW50cywgc3Ry
bGVuKGNvbnRlbnRzKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2hhciogY29udGVudHMgPSBn
X3N0cmR1cCgiPGh0bWw+PGJvZHk+dGVzdDwvYm9keT48L2h0bWw+Iik7CisgICAgICAgIHNvdXBf
bWVzc2FnZV9ib2R5X2FwcGVuZChtc2ctPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0Us
IGNvbnRlbnRzLCBzdHJsZW4oY29udGVudHMpKTsKKyAgICB9CisKKyAgICBzb3VwX21lc3NhZ2Vf
Ym9keV9jb21wbGV0ZShtc2ctPnJlc3BvbnNlX2JvZHkpOworfQorCitzdGF0aWMgdm9pZCBpZGxl
X3F1aXRfbG9vcF9jYihXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgR1BhcmFtU3BlYyogcHNwZWMs
IGdwb2ludGVyIGRhdGEpCit7CisgICAgaWYgKHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0
dXMod2ViX3ZpZXcpID09IFdFQktJVF9MT0FEX0ZJTklTSEVEIHx8CisgICAgICAgIHdlYmtpdF93
ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMod2ViX3ZpZXcpID09IFdFQktJVF9MT0FEX0ZBSUxFRCkK
KyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKK30KKworc3RhdGljIGdib29sZWFuIHRp
bWVvdXRfY2IoZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBnX2Vycm9yKCJEaWRuJ3QgZ2V0IGljb24t
dXJpIGJlZm9yZSB0aW1pbmcgb3V0LiIpOworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGlj
IHZvaWQgaWNvbl91cmlfY2hhbmdlZF9jYihXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgR1BhcmFt
U3BlYyogcHNwZWMsIGdwb2ludGVyIGRhdGEpCit7CisgICAgY2hhciogZXhwZWN0ZWRfdXJpOwor
CisgICAgZ19hc3NlcnRfY21wc3RyKGdfcGFyYW1fc3BlY19nZXRfbmFtZShwc3BlYyksID09LCAi
aWNvbi11cmkiKTsKKworICAgIGV4cGVjdGVkX3VyaSA9IGdfc3RyZHVwX3ByaW50ZigiJXNmYXZp
Y29uLmljbyIsIGJhc2VfdXJpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3
X2dldF9pY29uX3VyaSh3ZWJfdmlldyksID09LCBleHBlY3RlZF91cmkpOworICAgIGdfZnJlZShl
eHBlY3RlZF91cmkpOworCisgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKK30KKworc3RhdGlj
IHZvaWQgaWNvbl9sb2FkZWRfY2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIGNoYXIqIGljb25f
dXJpLCBncG9pbnRlciBkYXRhKQoreworICAgIGdib29sZWFuKiBiZWVuX2hlcmUgPSAoZ2Jvb2xl
YW4qKWRhdGE7CisgICAgY2hhciogZXhwZWN0ZWRfdXJpID0gZ19zdHJkdXBfcHJpbnRmKCIlc2Zh
dmljb24uaWNvIiwgYmFzZV91cmkpOworICAgIGdfYXNzZXJ0X2NtcHN0cihpY29uX3VyaSwgPT0s
IGV4cGVjdGVkX3VyaSk7CisgICAgZ19mcmVlKGV4cGVjdGVkX3VyaSk7CisKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIoaWNvbl91cmksID09LCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fdXJpKHdlYl92
aWV3KSk7CisKKyAgICAqYmVlbl9oZXJlID0gVFJVRTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93
ZWJraXRfd2ViX3ZpZXdfaWNvbl91cmkoKQoreworICAgIGdib29sZWFuIGJlZW5fdG9faWNvbl9s
b2FkZWQgPSBGQUxTRTsKKyAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gV0VCS0lUX1dFQl9WSUVX
KHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmplY3RfcmVmX3NpbmsoR19PQkpFQ1Qo
dmlldykpOworCisgICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKKworICAg
IGdfb2JqZWN0X2Nvbm5lY3QoR19PQkpFQ1QodmlldyksCisgICAgICAgICAgICAgICAgICAgICAi
c2lnbmFsOjpub3RpZnk6Omljb24tdXJpIiwgaWNvbl91cmlfY2hhbmdlZF9jYiwgTlVMTCwKKyAg
ICAgICAgICAgICAgICAgICAgICJzaWduYWw6Omljb24tbG9hZGVkIiwgaWNvbl9sb2FkZWRfY2Is
ICZiZWVuX3RvX2ljb25fbG9hZGVkLAorICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAg
ICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkodmlldywgYmFzZV91cmkpOworCisgICAgZ3VpbnQg
dGltZW91dF9pZCA9IGdfdGltZW91dF9hZGQoNTAwLCB0aW1lb3V0X2NiLCAwKTsKKworICAgIGdf
bWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIGdfc291cmNlX3JlbW92ZSh0aW1lb3V0X2lkKTsK
KworICAgIGdfYXNzZXJ0KGJlZW5fdG9faWNvbl9sb2FkZWQpOworCisgICAgZ19vYmplY3RfdW5y
ZWYodmlldyk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBtYXBfZXZlbnRfY2IoR3RrV2lkZ2V0ICp3
aWRnZXQsIEdka0V2ZW50KiBldmVudCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBHTWFpbkxvb3Aq
IGxvb3AgPSAoR01haW5Mb29wKilkYXRhOworICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7CisK
KyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBxdWl0X2FmdGVyX3Nob3J0
X2RlbGF5X2NiKGdwb2ludGVyIGRhdGEpCit7CisgICAgZ19tYWluX2xvb3BfcXVpdCgoR01haW5M
b29wKilkYXRhKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Vi
a2l0X3dlYl92aWV3X2dyYWJfZm9jdXMoKQoreworICAgIGNoYXIqIHVyaSA9IGdfc3RyY29uY2F0
KGJhc2VfdXJpLCAiaWZyYW1lLmh0bWwiLCBOVUxMKTsKKyAgICBHdGtXaWRnZXQqIHdpbmRvdyA9
IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfUE9QVVApOworICAgIEd0a1dpZGdldCogc2Nyb2xs
ZWRfd2luZG93ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19uZXcoTlVMTCwgTlVMTCk7CisgICAgV2Vi
S2l0V2ViVmlldyogdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkp
OworICAgIEd0a0FkanVzdG1lbnQqIGFkanVzdG1lbnQ7CisKKyAgICBndGtfd2luZG93X3NldF9k
ZWZhdWx0X3NpemUoR1RLX1dJTkRPVyh3aW5kb3cpLCA0MDAsIDIwMCk7CisKKyAgICBndGtfY29u
dGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHNjcm9sbGVkX3dpbmRvdyk7CisgICAg
Z3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihzY3JvbGxlZF93aW5kb3cpLCBHVEtfV0lE
R0VUKHZpZXcpKTsKKworICAgIGd0a19zY3JvbGxlZF93aW5kb3dfc2V0X3BvbGljeShHVEtfU0NS
T0xMRURfV0lORE9XKHNjcm9sbGVkX3dpbmRvdyksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdUS19QT0xJQ1lfQVVUT01BVElDLCBHVEtfUE9MSUNZX0FVVE9NQVRJQyk7CisK
KyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworCisgICAgZ19zaWduYWxf
Y29ubmVjdCh2aWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0soaWRsZV9xdWl0
X2xvb3BfY2IpLCBOVUxMKTsKKworICAgIC8qIFdhaXQgZm9yIHdpbmRvdyB0byBzaG93IHVwICov
CisgICAgZ3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
d2luZG93LCAibWFwLWV2ZW50IiwKKyAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sobWFw
X2V2ZW50X2NiKSwgbG9vcCk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgLyog
TG9hZCBhIHBhZ2Ugd2l0aCBhIGJpZyBkaXYgdGhhdCB3aWxsIGNhdXNlIHNjcm9sbGJhcnMgdG8g
YXBwZWFyICovCisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHZpZXcsIHVyaSk7CisgICAg
Z19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgYWRqdXN0bWVudCA9IGd0a19zY3JvbGxlZF93
aW5kb3dfZ2V0X3ZhZGp1c3RtZW50KEdUS19TQ1JPTExFRF9XSU5ET1coc2Nyb2xsZWRfd2luZG93
KSk7CisgICAgZ19hc3NlcnRfY21wZmxvYXQoZ3RrX2FkanVzdG1lbnRfZ2V0X3ZhbHVlKGFkanVz
dG1lbnQpLCA9PSwgMC4wKTsKKworICAgIC8qIFNpbmNlIHdlYmtpdF93ZWJfdmlld19leGVjdXRl
X3NjcmlwdCBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZSwKKyAgICAgICBpdCBpcyBpbXBvc3NpYmxl
IHRvIGtub3cgaWYgYW4gaW5uZXIgZG9jdW1lbnQgaGFzIGZvY3VzIGFmdGVyCisgICAgICAgYSBu
b2RlIG9mIGl0IHdhcyBmb2N1c2VkIHZpYSAuZm9jdXMoKSBtZXRob2QuCisgICAgICAgVGhlIGNv
ZGUgYmVsb3cgaXMgYW4gd29ya2Fyb3VuZDogaWYgdGhlIG5vZGUgaGFzIGZvY3VzLCBhIHNjcm9s
bAorICAgICAgIGFjdGlvbiBpcyBwZXJmb3JtZWQgYW5kIGFmdGVyd2FyZCBpdCBpcyBjaGVja2Vk
IGlmIHRoZSBhZGp1c3RtZW50CisgICAgICAgaGFzIHRvIGJlIGRpZmZlcmVudCBmcm9tIDAuCisg
ICAgKi8KKyAgICBjaGFyIHNjcmlwdFtdID0gInZhciBpbm5lckRvYyA9IGRvY3VtZW50LmRlZmF1
bHRWaWV3LmZyYW1lc1swXS5kb2N1bWVudDsgXAorICAgICAgICAgICAgICAgICAgICAgaW5uZXJE
b2MuZ2V0RWxlbWVudEJ5SWQoXCJsaW5rXCIpLmZvY3VzKCk7ICAgICAgICAgICAgICBcCisgICAg
ICAgICAgICAgICAgICAgICBpZiAoaW5uZXJEb2MuaGFzRm9jdXMoKSkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxC
eSgwLCAxMDApOyI7CisKKyAgICAvKiBGb2N1cyBhbiBlbGVtZW50IHVzaW5nIEphdmFTY3JpcHQg
Ki8KKyAgICB3ZWJraXRfd2ViX3ZpZXdfZXhlY3V0ZV9zY3JpcHQodmlldywgc2NyaXB0KTsKKwor
ICAgIC8qIEFkanVzdG1lbnRzIHVwZGF0ZSBhc3luY2hyb25vdXNseSwgc28gd2UgbXVzdCB3YWl0
IGEgYml0LiAqLworICAgIGdfdGltZW91dF9hZGQoMTAwLCBxdWl0X2FmdGVyX3Nob3J0X2RlbGF5
X2NiLCBsb29wKTsKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICAvKiBNYWtlIHN1
cmUgdGhlIFNjcm9sbGVkV2luZG93IG5vdGljZWQgdGhlIHNjcm9sbCAqLworICAgIGdfYXNzZXJ0
X2NtcGZsb2F0KGd0a19hZGp1c3RtZW50X2dldF92YWx1ZShhZGp1c3RtZW50KSwgIT0sIDAuMCk7
CisKKyAgICBnX2ZyZWUodXJpKTsKKyAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kod2luZG93KTsKK30K
Kworc3RhdGljIHZvaWQgZG9fdGVzdF93ZWJraXRfd2ViX3ZpZXdfYWRqdXN0bWVudHMoZ2Jvb2xl
YW4gd2l0aF9wYWdlX2NhY2hlKQoreworICAgIGNoYXIqIGVmZmVjdGl2ZV91cmkgPSBnX3N0cmNv
bmNhdChiYXNlX3VyaSwgImJpZ2Rpdi5odG1sIiwgTlVMTCk7CisgICAgY2hhciogc2Vjb25kX3Vy
aSA9IGdfc3RyY29uY2F0KGJhc2VfdXJpLCAiaWZyYW1lLmh0bWwiLCBOVUxMKTsKKyAgICBHdGtX
aWRnZXQqIHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOworICAg
IEd0a1dpZGdldCogc2Nyb2xsZWRfd2luZG93ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19uZXcoTlVM
TCwgTlVMTCk7CisgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJr
aXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIEd0a0FkanVzdG1lbnQqIGFkanVzdG1lbnQ7CisgICAg
ZG91YmxlIGxvd2VyOworICAgIGRvdWJsZSB1cHBlcjsKKworICAgIGlmICh3aXRoX3BhZ2VfY2Fj
aGUpIHsKKyAgICAgICAgV2ViS2l0V2ViU2V0dGluZ3MqIHNldHRpbmdzID0gd2Via2l0X3dlYl92
aWV3X2dldF9zZXR0aW5ncyh2aWV3KTsKKyAgICAgICAgZ19vYmplY3Rfc2V0KHNldHRpbmdzLCAi
ZW5hYmxlLXBhZ2UtY2FjaGUiLCBUUlVFLCBOVUxMKTsKKyAgICB9CisKKyAgICBndGtfd2luZG93
X3NldF9kZWZhdWx0X3NpemUoR1RLX1dJTkRPVyh3aW5kb3cpLCA0MDAsIDIwMCk7CisKKyAgICBn
dGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHNjcm9sbGVkX3dpbmRvdyk7
CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihzY3JvbGxlZF93aW5kb3cpLCBH
VEtfV0lER0VUKHZpZXcpKTsKKworICAgIGd0a19zY3JvbGxlZF93aW5kb3dfc2V0X3BvbGljeShH
VEtfU0NST0xMRURfV0lORE9XKHNjcm9sbGVkX3dpbmRvdyksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdUS19QT0xJQ1lfQVVUT01BVElDLCBHVEtfUE9MSUNZX0FVVE9NQVRJ
Qyk7CisKKyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworCisgICAgZ19v
YmplY3RfY29ubmVjdChHX09CSkVDVCh2aWV3KSwKKyAgICAgICAgICAgICAgICAgICAgICJzaWdu
YWw6Om5vdGlmeTo6bG9hZC1zdGF0dXMiLCBpZGxlX3F1aXRfbG9vcF9jYiwgTlVMTCwKKyAgICAg
ICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgLyogV2FpdCBmb3Igd2luZG93IHRvIHNob3cg
dXAgKi8KKyAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7CisgICAgZ19zaWduYWxfY29u
bmVjdCh3aW5kb3csICJtYXAtZXZlbnQiLAorICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFD
SyhtYXBfZXZlbnRfY2IpLCBsb29wKTsKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAg
ICAvKiBMb2FkIGEgcGFnZSB3aXRoIGEgYmlnIGRpdiB0aGF0IHdpbGwgY2F1c2Ugc2Nyb2xsYmFy
cyB0byBhcHBlYXIgKi8KKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkodmlldywgZWZmZWN0
aXZlX3VyaSk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgLyogQWRqdXN0bWVu
dHMgdXBkYXRlIGFzeW5jaHJvbm91c2x5LCBzbyB3ZSBtdXN0IHdhaXQgYSBiaXQuICovCisgICAg
Z190aW1lb3V0X2FkZCgxMDAsIHF1aXRfYWZ0ZXJfc2hvcnRfZGVsYXlfY2IsIGxvb3ApOworICAg
IGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIGFkanVzdG1lbnQgPSBndGtfc2Nyb2xsZWRf
d2luZG93X2dldF92YWRqdXN0bWVudChHVEtfU0NST0xMRURfV0lORE9XKHNjcm9sbGVkX3dpbmRv
dykpOworICAgIGdfYXNzZXJ0X2NtcGZsb2F0KGd0a19hZGp1c3RtZW50X2dldF92YWx1ZShhZGp1
c3RtZW50KSwgPT0sIDAuMCk7CisKKyAgICBsb3dlciA9IGd0a19hZGp1c3RtZW50X2dldF9sb3dl
cihhZGp1c3RtZW50KTsKKyAgICB1cHBlciA9IGd0a19hZGp1c3RtZW50X2dldF91cHBlcihhZGp1
c3RtZW50KTsKKworICAgIC8qIFNjcm9sbCB0aGUgdmlldyB1c2luZyBKYXZhU2NyaXB0ICovCisg
ICAgd2Via2l0X3dlYl92aWV3X2V4ZWN1dGVfc2NyaXB0KHZpZXcsICJ3aW5kb3cuc2Nyb2xsQnko
MCwgMTAwKSIpOworCisgICAgLyogQWRqdXN0bWVudHMgdXBkYXRlIGFzeW5jaHJvbm91c2x5LCBz
byB3ZSBtdXN0IHdhaXQgYSBiaXQuICovCisgICAgZ190aW1lb3V0X2FkZCgxMDAsIHF1aXRfYWZ0
ZXJfc2hvcnRfZGVsYXlfY2IsIGxvb3ApOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKwor
ICAgIC8qIE1ha2Ugc3VyZSB0aGUgU2Nyb2xsZWRXaW5kb3cgbm90aWNlZCB0aGUgc2Nyb2xsICov
CisgICAgZ19hc3NlcnRfY21wZmxvYXQoZ3RrX2FkanVzdG1lbnRfZ2V0X3ZhbHVlKGFkanVzdG1l
bnQpLCA9PSwgMTAwLjApOworCisgICAgLyogTG9hZCBhIHNlY29uZCBVUkkgKi8KKyAgICB3ZWJr
aXRfd2ViX3ZpZXdfbG9hZF91cmkodmlldywgc2Vjb25kX3VyaSk7CisgICAgZ19tYWluX2xvb3Bf
cnVuKGxvb3ApOworCisgICAgLyogVGhlIHBhZ2UgbG9hZGVkIGJ1dCB0aGUgYWRqdXN0bWVudHMg
bWF5IG5vdCBiZSB1cGRhdGVkIHlldC4gV2FpdCBhIGJpdC4gKi8KKyAgICBnX3RpbWVvdXRfYWRk
KDEwMCwgcXVpdF9hZnRlcl9zaG9ydF9kZWxheV9jYiwgbG9vcCk7CisgICAgZ19tYWluX2xvb3Bf
cnVuKGxvb3ApOworCisgICAgLyogTWFrZSBzdXJlIHRoZSBzY3JvbGxiYXIgaGFzIGJlZW4gcmVz
ZXQgKi8KKyAgICBnX2Fzc2VydF9jbXBmbG9hdChndGtfYWRqdXN0bWVudF9nZXRfdmFsdWUoYWRq
dXN0bWVudCksID09LCAwLjApOworCisgICAgLyogR28gYmFjayAqLworICAgIHdlYmtpdF93ZWJf
dmlld19nb19iYWNrKHZpZXcpOworCisgICAgLyogV2hlbiB1c2luZyBwYWdlIGNhY2hlLCBnb19i
YWNrIHdpbGwgcmV0dXJuIHN5bmNyb25vdXNseSAqLworICAgIGlmICghd2l0aF9wYWdlX2NhY2hl
KQorICAgICAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICAvKiBNYWtlIHN1cmUgR1RL
KyBoYXMgdGltZSB0byBwcm9jZXNzIHRoZSBjaGFuZ2VzIGluIHNpemUsIGZvciB0aGUgYWRqdXNt
ZW50cyAqLworICAgIHdoaWxlIChndGtfZXZlbnRzX3BlbmRpbmcoKSkKKyAgICAgICAgZ3RrX21h
aW5faXRlcmF0aW9uKCk7CisKKyAgICAvKiBNYWtlIHN1cmUgdXBwZXIgYW5kIGxvd2VyIGJvdW5k
cyBoYXZlIGJlZW4gcmVzdG9yZWQgY29ycmVjdGx5ICovCisgICAgZ19hc3NlcnRfY21wZmxvYXQo
bG93ZXIsID09LCBndGtfYWRqdXN0bWVudF9nZXRfbG93ZXIoYWRqdXN0bWVudCkpOworICAgIGdf
YXNzZXJ0X2NtcGZsb2F0KHVwcGVyLCA9PSwgZ3RrX2FkanVzdG1lbnRfZ2V0X3VwcGVyKGFkanVz
dG1lbnQpKTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdChndGtfYWRqdXN0bWVudF9nZXRfdmFsdWUo
YWRqdXN0bWVudCksID09LCAxMDAuMCk7CisKKyAgICBnX2ZyZWUoZWZmZWN0aXZlX3VyaSk7Cisg
ICAgZ19mcmVlKHNlY29uZF91cmkpOworCisgICAgZ3RrX3dpZGdldF9kZXN0cm95KHdpbmRvdyk7
Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl92aWV3X2FkanVzdG1lbnRzKCkKK3sK
KyAgICAvKiBUZXN0IHRoaXMgd2l0aCBwYWdlIGNhY2hlIGRpc2FibGVkLCBhbmQgZW5hYmxlZC4g
Ki8KKyAgICBkb190ZXN0X3dlYmtpdF93ZWJfdmlld19hZGp1c3RtZW50cyhGQUxTRSk7CisgICAg
ZG9fdGVzdF93ZWJraXRfd2ViX3ZpZXdfYWRqdXN0bWVudHMoVFJVRSk7Cit9CisKK2dib29sZWFu
IGRlbGF5ZWRfZGVzdHJveShncG9pbnRlciBkYXRhKQoreworICAgIGd0a193aWRnZXRfZGVzdHJv
eShHVEtfV0lER0VUKGRhdGEpKTsKKyAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworICAgIHJl
dHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3ZpZXdfZGVzdHJv
eSgpCit7CisgICAgR3RrV2lkZ2V0KiB3aW5kb3c7CisgICAgR3RrV2lkZ2V0KiB3ZWJfdmlldzsK
KworICAgIHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOworICAg
IHdlYl92aWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygpOworCisgICAgZ3RrX2NvbnRhaW5lcl9h
ZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB3ZWJfdmlldyk7CisKKyAgICBndGtfd2lkZ2V0X3No
b3dfYWxsKHdpbmRvdyk7CisKKyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUp
OworCisgICAgZ19zaWduYWxfY29ubmVjdCh3aW5kb3csICJtYXAtZXZlbnQiLAorICAgICAgICAg
ICAgICAgICAgICAgR19DQUxMQkFDSyhtYXBfZXZlbnRfY2IpLCBsb29wKTsKKyAgICBnX21haW5f
bG9vcF9ydW4obG9vcCk7CisKKyAgICBnX2lkbGVfYWRkKGRlbGF5ZWRfZGVzdHJveSwgd2ViX3Zp
ZXcpOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIGd0a193aWRnZXRfZGVzdHJv
eSh3aW5kb3cpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfdmlld193aW5kb3df
ZmVhdHVyZXMoKQoreworICAgIEd0a1dpZGdldCogd2luZG93OworICAgIEd0a1dpZGdldCogd2Vi
X3ZpZXc7CisgICAgCisgICAgd2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BM
RVZFTCk7CisgICAgd2ViX3ZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7CisgICAgCisgICAg
Z3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB3ZWJfdmlldyk7CisgICAg
CisgICAgZ3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpOworICAgIAorICAgIGxvb3AgPSBnX21h
aW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdpbmRvdywg
Im1hcC1ldmVudCIsCisgICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKG1hcF9ldmVudF9j
YiksIGxvb3ApOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKyAgICAKKyAgICAvKiBCdWcg
IzM2MTQ0ICovCisgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKHdlYl92aWV3KSwgIndpbmRvdy1m
ZWF0dXJlcyIsIE5VTEwsIE5VTEwpOworICAgIAorICAgIGd0a193aWRnZXRfZGVzdHJveSh3aW5k
b3cpOworfSAgICAKKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3ZpZXdfaW5fb2Zmc2Ny
ZWVuX3dpbmRvd19kb2VzX25vdF9jcmFzaCgpCit7CisgICAgbG9vcCA9IGdfbWFpbl9sb29wX25l
dyhOVUxMLCBUUlVFKTsKKworICAgIEd0a1dpZGdldCAqd2luZG93ID0gZ3RrX29mZnNjcmVlbl93
aW5kb3dfbmV3KCk7CisgICAgR3RrV2lkZ2V0ICp3ZWJfdmlldyA9IHdlYmtpdF93ZWJfdmlld19u
ZXcoKTsKKworICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgd2Vi
X3ZpZXcpOworICAgIGd0a193aWRnZXRfc2hvd19hbGwod2luZG93KTsKKyAgICBnX3NpZ25hbF9j
b25uZWN0KHdlYl92aWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0soaWRsZV9x
dWl0X2xvb3BfY2IpLCBOVUxMKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkoV0VCS0lU
X1dFQl9WSUVXKHdlYl92aWV3KSwgYmFzZV91cmkpOworCisgICAgZ19tYWluX2xvb3BfcnVuKGxv
b3ApOworCisgICAgZ3RrX3dpZGdldF9kZXN0cm95KHdpbmRvdyk7CisgICAgZ19tYWluX2xvb3Bf
dW5yZWYobG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl92aWV3X2RvZXNf
bm90X3N0ZWFsX2ZvY3VzKCkKK3sKKyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRS
VUUpOworCisgICAgR3RrV2lkZ2V0ICp3aW5kb3cgPSBndGtfb2Zmc2NyZWVuX3dpbmRvd19uZXco
KTsKKyAgICBHdGtXaWRnZXQgKndlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7CisgICAg
R3RrV2lkZ2V0ICplbnRyeSA9IGd0a19lbnRyeV9uZXcoKTsKKworI2lmZGVmIEdUS19BUElfVkVS
U0lPTl8yCisgICAgR3RrV2lkZ2V0ICpib3ggPSBndGtfaGJveF9uZXcoRkFMU0UsIDApOworI2Vs
c2UKKyAgICBHdGtXaWRnZXQgKmJveCA9IGd0a19ib3hfbmV3KEdUS19PUklFTlRBVElPTl9IT1JJ
Wk9OVEFMLCAwKTsKKyNlbmRpZgorCisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5F
Uihib3gpLCB3ZWJWaWV3KTsKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGJv
eCksIGVudHJ5KTsKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyks
IGJveCk7CisgICAgZ3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpOworCisgICAgZ3RrX3dpZGdl
dF9ncmFiX2ZvY3VzKGVudHJ5KTsKKyAgICBnX2Fzc2VydChndGtfd2lkZ2V0X2lzX2ZvY3VzKGVu
dHJ5KSk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJub3RpZnk6OmxvYWQtc3Rh
dHVzIiwgR19DQUxMQkFDSyhpZGxlX3F1aXRfbG9vcF9jYiksIE5VTEwpOworICAgIHdlYmtpdF93
ZWJfdmlld19sb2FkX2h0bWxfc3RyaW5nKFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3KSwKKyAgICAg
ICAgIjxodG1sPjxib2R5PiIKKyAgICAgICAgIiAgICA8aW5wdXQgaWQ9XCJlbnRyeVwiIHR5cGU9
XCJ0ZXh0XCIvPiIKKyAgICAgICAgIiAgICA8c2NyaXB0PiIKKyAgICAgICAgIiAgICAgICAgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJlbnRyeVwiKS5mb2N1cygpOyIKKyAgICAgICAgIiAgICA8
L3NjcmlwdD4iCisgICAgICAgICI8L2JvZHk+PC9odG1sPiIsICJmaWxlOi8vIik7CisKKyAgICBn
X21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICBnX2Fzc2VydChndGtfd2lkZ2V0X2lzX2ZvY3Vz
KGVudHJ5KSk7CisKKyAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kod2luZG93KTsKKyAgICBnX21haW5f
bG9vcF91bnJlZihsb29wKTsKK30KKworc3RhdGljIGdib29sZWFuIGVtaXRLZXlTdHJva2UoV2Vi
S2l0V2ViVmlldyogd2ViVmlldykKK3sKKyAgICBHZGtFdmVudCogcHJlc3NFdmVudCA9IGdka19l
dmVudF9uZXcoR0RLX0tFWV9QUkVTUyk7CisgICAgcHJlc3NFdmVudC0+a2V5LmtleXZhbCA9IEdE
S19LRVlfZjsKKyAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyhH
VEtfV0lER0VUKHdlYlZpZXcpKTsKKyAgICBwcmVzc0V2ZW50LT5rZXkud2luZG93ID0gd2luZG93
OworICAgIGdfb2JqZWN0X3JlZihwcmVzc0V2ZW50LT5rZXkud2luZG93KTsKKworI2lmbmRlZiBH
VEtfQVBJX1ZFUlNJT05fMgorICAgIEdka0RldmljZU1hbmFnZXIqIG1hbmFnZXIgPSBnZGtfZGlz
cGxheV9nZXRfZGV2aWNlX21hbmFnZXIoZ2RrX3dpbmRvd19nZXRfZGlzcGxheSh3aW5kb3cpKTsK
KyAgICBnZGtfZXZlbnRfc2V0X2RldmljZShwcmVzc0V2ZW50LCBnZGtfZGV2aWNlX21hbmFnZXJf
Z2V0X2NsaWVudF9wb2ludGVyKG1hbmFnZXIpKTsKKyNlbmRpZgorCisgICAgLy8gV2hlbiBzeW50
aGVzaXppbmcgYW4gZXZlbnQsIGFuIGludmFsaWQgaGFyZHdhcmVfa2V5Y29kZSB2YWx1ZQorICAg
IC8vIGNhbiBjYXVzZSBpdCB0byBiZSBiYWRseSBwcm9jZXNzZWQgYnkgR3RrKy4KKyAgICBHZGtL
ZXltYXBLZXkqIGtleXM7CisgICAgZ2ludCBuX2tleXM7CisgICAgaWYgKGdka19rZXltYXBfZ2V0
X2VudHJpZXNfZm9yX2tleXZhbChnZGtfa2V5bWFwX2dldF9kZWZhdWx0KCksIEdES19LRVlfZiwg
JmtleXMsICZuX2tleXMpKSB7CisgICAgICAgIHByZXNzRXZlbnQtPmtleS5oYXJkd2FyZV9rZXlj
b2RlID0ga2V5c1swXS5rZXljb2RlOworICAgICAgICBnX2ZyZWUoa2V5cyk7CisgICAgfQorCisg
ICAgR2RrRXZlbnQqIHJlbGVhc2VFdmVudCA9IGdka19ldmVudF9jb3B5KHByZXNzRXZlbnQpOwor
ICAgIGd0a19tYWluX2RvX2V2ZW50KHByZXNzRXZlbnQpOworICAgIGdka19ldmVudF9mcmVlKHBy
ZXNzRXZlbnQpOworICAgIHJlbGVhc2VFdmVudC0+a2V5LnR5cGUgPSBHREtfS0VZX1JFTEVBU0U7
CisgICAgZ3RrX21haW5fZG9fZXZlbnQocmVsZWFzZUV2ZW50KTsKKyAgICBnZGtfZXZlbnRfZnJl
ZShyZWxlYXNlRXZlbnQpOworCisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgZ2Jvb2xl
YW4gZW50ZXJpbmdfZnVsbHNjcmVlbl9jYihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHT2JqZWN0
KiBlbGVtZW50LCBnYm9vbGVhbiBibG9ja2VkKQoreworICAgIGlmIChibG9ja2VkKQorICAgICAg
ICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworICAgIGVsc2UKKyAgICAgICAgZ190aW1lb3V0X2Fk
ZCgyMDAsIChHU291cmNlRnVuYykgZW1pdEtleVN0cm9rZSwgd2ViVmlldyk7CisgICAgcmV0dXJu
IGJsb2NrZWQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBsZWF2aW5nX2Z1bGxzY3JlZW5fY2IoV2Vi
S2l0V2ViVmlldyogd2ViVmlldywgR09iamVjdCogZWxlbWVudCwgZ3BvaW50ZXIgZGF0YSkKK3sK
KyAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworICAgIHJldHVybiBGQUxTRTsKK30KKworc3Rh
dGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3ZpZXdfZnVsbHNjcmVlbihnY29uc3Rwb2ludGVyIGJs
b2NrZWQpCit7CisgICAgR3RrV2lkZ2V0KiB3aW5kb3c7CisgICAgR3RrV2lkZ2V0KiB3ZWJfdmll
dzsKKyAgICBXZWJLaXRXZWJTZXR0aW5ncyAqc2V0dGluZ3M7CisKKyAgICB3aW5kb3cgPSBndGtf
d2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKKyAgICB3ZWJfdmlldyA9IHdlYmtpdF93
ZWJfdmlld19uZXcoKTsKKworICAgIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0
aW5ncyhXRUJLSVRfV0VCX1ZJRVcod2ViX3ZpZXcpKTsKKyAgICBnX29iamVjdF9zZXQoc2V0dGlu
Z3MsICJlbmFibGUtZnVsbHNjcmVlbiIsIFRSVUUsIE5VTEwpOworICAgIHdlYmtpdF93ZWJfdmll
d19zZXRfc2V0dGluZ3MoV0VCS0lUX1dFQl9WSUVXKHdlYl92aWV3KSwgc2V0dGluZ3MpOworCisg
ICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB3ZWJfdmlldyk7CisK
KyAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7CisKKyAgICBsb29wID0gZ19tYWluX2xv
b3BfbmV3KE5VTEwsIFRSVUUpOworCisgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJfdmlldywgImVu
dGVyaW5nLWZ1bGxzY3JlZW4iLCBHX0NBTExCQUNLKGVudGVyaW5nX2Z1bGxzY3JlZW5fY2IpLCAo
Z3BvaW50ZXIpIGJsb2NrZWQpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViX3ZpZXcsICJsZWF2
aW5nLWZ1bGxzY3JlZW4iLCBHX0NBTExCQUNLKGxlYXZpbmdfZnVsbHNjcmVlbl9jYiksIE5VTEwp
OworCisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklFVyh3ZWJf
dmlldyksICI8aHRtbD48Ym9keT4iCisgICAgICAgICAgICAgICAgICAgIjxzY3JpcHQ+IgorICAg
ICAgICAgICAgICAgICAgICJ2YXIgZXZlbnROYW1lID0gJ2tleXByZXNzJzsiCisgICAgICAgICAg
ICAgICAgICAgImRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBmdW5jdGlvbiAo
KSB7IgorICAgICAgICAgICAgICAgICAgICIgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lndl
YmtpdFJlcXVlc3RGdWxsU2NyZWVuKCk7IgorICAgICAgICAgICAgICAgICAgICJ9LCBmYWxzZSk7
IgorICAgICAgICAgICAgICAgICAgICI8L3NjcmlwdD48L2JvZHk+PC9odG1sPiIsIE5VTEwsIE5V
TEwsIE5VTEwpOworCisgICAgZ190aW1lb3V0X2FkZCgxMDAsIChHU291cmNlRnVuYykgZW1pdEtl
eVN0cm9rZSwgV0VCS0lUX1dFQl9WSUVXKHdlYl92aWV3KSk7CisgICAgZ19tYWluX2xvb3BfcnVu
KGxvb3ApOworCisgICAgZ3RrX3dpZGdldF9kZXN0cm95KHdpbmRvdyk7Cit9CisKK3N0YXRpYyBn
Ym9vbGVhbiBjaGVja01pbWVUeXBlRm9yRmlsdGVyKEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciwgY29u
c3QgZ2NoYXIqIG1pbWVUeXBlKQoreworICAgIEd0a0ZpbGVGaWx0ZXJJbmZvIGZpbHRlcl9pbmZv
OworICAgIGZpbHRlcl9pbmZvLmNvbnRhaW5zID0gR1RLX0ZJTEVfRklMVEVSX01JTUVfVFlQRTsK
KyAgICBmaWx0ZXJfaW5mby5taW1lX3R5cGUgPSBtaW1lVHlwZTsKKyAgICByZXR1cm4gZ3RrX2Zp
bGVfZmlsdGVyX2ZpbHRlcihmaWx0ZXIsICZmaWx0ZXJfaW5mbyk7Cit9CisKK3N0YXRpYyBnYm9v
bGVhbiBydW5GaWxlQ2hvb3NlckNiTm9NdWx0aXNlbE5vTWltZShXZWJLaXRXZWJWaWV3KiB3ZWJ2
aWV3LCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QsIGdwb2ludGVyIGRhdGEpCit7
CisgICAgZ19hc3NlcnQoIXdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211
bHRpcGxlKHJlcXVlc3QpKTsKKworICAgIGNvbnN0IGdjaGFyKiBjb25zdCogbWltZVR5cGVzID0g
d2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKHJlcXVlc3QpOworICAg
IGdfYXNzZXJ0KCFtaW1lVHlwZXMpOworICAgIEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciA9IHdlYmtp
dF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIocmVxdWVzdCk7Cisg
ICAgZ19hc3NlcnQoIWZpbHRlcik7CisKKyAgICBjb25zdCBnY2hhciogY29uc3QqIHNlbGVjdGVk
RmlsZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKHJl
cXVlc3QpOworICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZpbGVzKTsKKworICAgIGdfbWFpbl9sb29w
X3F1aXQobG9vcCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBydW5G
aWxlQ2hvb3NlckNiTXVsdGlzZWxOb01pbWUoV2ViS2l0V2ViVmlldyogd2VidmlldywgV2ViS2l0
RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0LCBncG9pbnRlciBkYXRhKQoreworICAgIGdfYXNz
ZXJ0KHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxlKHJlcXVl
c3QpKTsKKworICAgIGNvbnN0IGdjaGFyKiBjb25zdCogbWltZVR5cGVzID0gd2Via2l0X2ZpbGVf
Y2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKHJlcXVlc3QpOworICAgIGdfYXNzZXJ0KCFt
aW1lVHlwZXMpOworICAgIEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciA9IHdlYmtpdF9maWxlX2Nob29z
ZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIocmVxdWVzdCk7CisgICAgZ19hc3NlcnQo
IWZpbHRlcik7CisgICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBzZWxlY3RlZEZpbGVzID0gd2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0KTsKKyAgICBn
X2Fzc2VydCghc2VsZWN0ZWRGaWxlcyk7CisKKyAgICAvLyBTZWxlY3Qgc29tZSBmaWxlcy4KKyAg
ICBjb25zdCBnY2hhciogZmlsZXNUb1NlbGVjdFs0XSA9IHsgIi9mb28iLCAiL2Zvby9iYXIiLCAi
L2Zvby9iYXIvYmF6IiwgMCB9OworICAgIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9zZWxl
Y3RfZmlsZXMocmVxdWVzdCwgZmlsZXNUb1NlbGVjdCk7CisKKyAgICAvLyBDaGVjayB0aGUgZmls
ZXMgdGhhdCBoYXZlIGJlZW4ganVzdCBzZWxlY3RlZC4KKyAgICBzZWxlY3RlZEZpbGVzID0gd2Vi
a2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0KTsKKyAg
ICBnX2Fzc2VydChzZWxlY3RlZEZpbGVzKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRG
aWxlc1swXSwgPT0sICIvZm9vIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNb
MV0sID09LCAiL2Zvby9iYXIiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1sy
XSwgPT0sICIvZm9vL2Jhci9iYXoiKTsKKyAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxlc1szXSk7
CisKKyAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworICAgIHJldHVybiBUUlVFOworfQorCitz
dGF0aWMgZ2Jvb2xlYW4gcnVuRmlsZUNob29zZXJDYlNlbGVjdGlvblJldGFpbmVkKFdlYktpdFdl
YlZpZXcqIHdlYnZpZXcsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCwgZ3BvaW50
ZXIgZGF0YSkKK3sKKyAgICBjb25zdCBnY2hhciogY29uc3QqIHNlbGVjdGVkRmlsZXMgPSB3ZWJr
aXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKHJlcXVlc3QpOworICAg
IGdfYXNzZXJ0KHNlbGVjdGVkRmlsZXMpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZp
bGVzWzBdLCA9PSwgIi9mb28iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1sx
XSwgPT0sICIvZm9vL2JhciIpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzJd
LCA9PSwgIi9mb28vYmFyL2JheiIpOworICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZpbGVzWzNdKTsK
KworICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0
YXRpYyBnYm9vbGVhbiBydW5GaWxlQ2hvb3NlckNiTm9NdWx0aXNlbEFjY2VwdFR5cGVzKFdlYktp
dFdlYlZpZXcqIHdlYnZpZXcsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCwgZ3Bv
aW50ZXIgZGF0YSkKK3sKKyAgICBnX2Fzc2VydCghd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X2dldF9zZWxlY3RfbXVsdGlwbGUocmVxdWVzdCkpOworCisgICAgY29uc3QgZ2NoYXIqIGNvbnN0
KiBtaW1lVHlwZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMo
cmVxdWVzdCk7CisgICAgZ19hc3NlcnQobWltZVR5cGVzKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIo
bWltZVR5cGVzWzBdLCA9PSwgImF1ZGlvLyoiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIobWltZVR5
cGVzWzFdLCA9PSwgInZpZGVvLyoiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIobWltZVR5cGVzWzJd
LCA9PSwgImltYWdlLyoiKTsKKyAgICBnX2Fzc2VydCghbWltZVR5cGVzWzNdKTsKKworICAgIEd0
a0ZpbGVGaWx0ZXIqIGZpbHRlciA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWlt
ZV90eXBlc19maWx0ZXIocmVxdWVzdCk7CisgICAgZ19hc3NlcnQoR1RLX0lTX0ZJTEVfRklMVEVS
KGZpbHRlcikpOworICAgIGdfYXNzZXJ0KGNoZWNrTWltZVR5cGVGb3JGaWx0ZXIoZmlsdGVyLCAi
YXVkaW8vKiIpKTsKKyAgICBnX2Fzc2VydChjaGVja01pbWVUeXBlRm9yRmlsdGVyKGZpbHRlciwg
InZpZGVvLyoiKSk7CisgICAgZ19hc3NlcnQoY2hlY2tNaW1lVHlwZUZvckZpbHRlcihmaWx0ZXIs
ICJpbWFnZS8qIikpOworCisgICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBzZWxlY3RlZEZpbGVzID0g
d2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0KTsK
KyAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxlcyk7CisKKyAgICBnX21haW5fbG9vcF9xdWl0KGxv
b3ApOworICAgIHJldHVybiBUUlVFOworfQorCit2b2lkIGRvTW91c2VCdXR0b25FdmVudChHdGtX
aWRnZXQqIHdpZGdldCwgR2RrRXZlbnRUeXBlIGV2ZW50VHlwZSwgaW50IHgsIGludCB5LCB1bnNp
Z25lZCBpbnQgYnV0dG9uLCB1bnNpZ25lZCBpbnQgbW9kaWZpZXJzKQoreworICAgIGdfYXNzZXJ0
KGd0a193aWRnZXRfZ2V0X3JlYWxpemVkKHdpZGdldCkpOworCisgICAgR2RrRXZlbnQqIGV2ZW50
ID0gZ2RrX2V2ZW50X25ldyhldmVudFR5cGUpOworICAgIGV2ZW50LT5idXR0b24ud2luZG93ID0g
Z3RrX3dpZGdldF9nZXRfd2luZG93KHdpZGdldCk7CisgICAgZ19vYmplY3RfcmVmKGV2ZW50LT5i
dXR0b24ud2luZG93KTsKKworICAgIGV2ZW50LT5idXR0b24udGltZSA9IEdES19DVVJSRU5UX1RJ
TUU7CisgICAgZXZlbnQtPmJ1dHRvbi54ID0geDsKKyAgICBldmVudC0+YnV0dG9uLnkgPSB5Owor
ICAgIGV2ZW50LT5idXR0b24uYXhlcyA9IDA7CisgICAgZXZlbnQtPmJ1dHRvbi5zdGF0ZSA9IG1v
ZGlmaWVyczsKKyAgICBldmVudC0+YnV0dG9uLmJ1dHRvbiA9IGJ1dHRvbjsKKworI2lmbmRlZiBH
VEtfQVBJX1ZFUlNJT05fMgorICAgIGV2ZW50LT5idXR0b24uZGV2aWNlID0gZ2RrX2RldmljZV9t
YW5hZ2VyX2dldF9jbGllbnRfcG9pbnRlcihnZGtfZGlzcGxheV9nZXRfZGV2aWNlX21hbmFnZXIo
Z3RrX3dpZGdldF9nZXRfZGlzcGxheSh3aWRnZXQpKSk7CisjZW5kaWYKKworICAgIGludCB4Um9v
dCwgeVJvb3Q7CisgICAgZ2RrX3dpbmRvd19nZXRfcm9vdF9jb29yZHMoZ3RrX3dpZGdldF9nZXRf
d2luZG93KHdpZGdldCksIHgsIHksICZ4Um9vdCwgJnlSb290KTsKKyAgICBldmVudC0+YnV0dG9u
Lnhfcm9vdCA9IHhSb290OworICAgIGV2ZW50LT5idXR0b24ueV9yb290ID0geVJvb3Q7CisgICAg
Z3RrX21haW5fZG9fZXZlbnQoZXZlbnQpOworfQorCitzdGF0aWMgdm9pZCBjbGlja01vdXNlQnV0
dG9uKEd0a1dpZGdldCogd2lkZ2V0LCBpbnQgeCwgaW50IHksIHVuc2lnbmVkIGludCBidXR0b24s
IHVuc2lnbmVkIGludCBtb2RpZmllcnMpCit7CisgICAgZG9Nb3VzZUJ1dHRvbkV2ZW50KHdpZGdl
dCwgR0RLX0JVVFRPTl9QUkVTUywgeCwgeSwgYnV0dG9uLCBtb2RpZmllcnMpOworICAgIGRvTW91
c2VCdXR0b25FdmVudCh3aWRnZXQsIEdES19CVVRUT05fUkVMRUFTRSwgeCwgeSwgYnV0dG9uLCBt
b2RpZmllcnMpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gY2xpY2tNb3VzZUJ1dHRvbkFuZFdhaXRG
b3JGaWxlQ2hvb3NlclJlcXVlc3QoV2ViS2l0V2ViVmlldyogd2ViVmlldykKK3sKKyAgICBjbGlj
a01vdXNlQnV0dG9uKEdUS19XSURHRVQod2ViVmlldyksIDUsIDUsIDEsIDApOworICAgIHJldHVy
biBUUlVFOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfdmlld19maWxlX2Nob29z
ZXIoKQoreworICAgIGNvbnN0IGdjaGFyKiBodG1sRm9ybWF0QmFzZSA9ICI8aHRtbD48Ym9keT4i
CisgICAgICAgICAgICAiPGlucHV0IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9w
OjA7bWFyZ2luOjA7cGFkZGluZzowJyB0eXBlPSdmaWxlJyAlcy8+IgorICAgICAgICAgICAgIjwv
Ym9keT48L2h0bWw+IjsKKworICAgIEd0a1dpZGdldCogd2luZG93ID0gZ3RrX3dpbmRvd19uZXco
R1RLX1dJTkRPV19UT1BMRVZFTCk7CisgICAgR3RrV2lkZ2V0KiB3ZWJWaWV3ID0gd2Via2l0X3dl
Yl92aWV3X25ldygpOworICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93
KSwgd2ViVmlldyk7CisgICAgZ3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpOworCisgICAgbG9v
cCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKKworICAgIC8vIE11bHRpcGxlIHNlbGVj
dGlvbnMgbm90IGFsbG93ZWQsIG5vIE1JTUUgZmlsdGVyaW5nLgorICAgIGd1bG9uZyBoYW5kbGVy
ID0gZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAicnVuLWZpbGUtY2hvb3NlciIsIEdfQ0FMTEJB
Q0socnVuRmlsZUNob29zZXJDYk5vTXVsdGlzZWxOb01pbWUpLCBOVUxMKTsKKyAgICBnY2hhciog
aHRtbEZvcm1hdCA9IGdfc3RyZHVwX3ByaW50ZihodG1sRm9ybWF0QmFzZSwgIiIpOworICAgIHdl
YmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldyksIGh0bWxG
b3JtYXQsIE5VTEwsIE5VTEwsIE5VTEwpOworICAgIGdfZnJlZShodG1sRm9ybWF0KTsKKworICAg
IGdfdGltZW91dF9hZGQoMTAwLCAoR1NvdXJjZUZ1bmMpIGNsaWNrTW91c2VCdXR0b25BbmRXYWl0
Rm9yRmlsZUNob29zZXJSZXF1ZXN0LCBXRUJLSVRfV0VCX1ZJRVcod2ViVmlldykpOworICAgIGdf
bWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdCh3
ZWJWaWV3LCBoYW5kbGVyKTsKKworICAgIC8vIE11bHRpcGxlIHNlbGVjdGlvbnMgYWxsb3dlZCwg
bm8gTUlNRSBmaWx0ZXJpbmcsIHNvbWUgcHJlLXNlbGVjdGVkIGZpbGVzLgorICAgIGhhbmRsZXIg
PSBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJydW4tZmlsZS1jaG9vc2VyIiwgR19DQUxMQkFD
SyhydW5GaWxlQ2hvb3NlckNiTXVsdGlzZWxOb01pbWUpLCBOVUxMKTsKKyAgICBodG1sRm9ybWF0
ID0gZ19zdHJkdXBfcHJpbnRmKGh0bWxGb3JtYXRCYXNlLCAibXVsdGlwbGUiKTsKKyAgICB3ZWJr
aXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpLCBodG1sRm9y
bWF0LCBOVUxMLCBOVUxMLCBOVUxMKTsKKyAgICBnX2ZyZWUoaHRtbEZvcm1hdCk7CisKKyAgICBn
X3RpbWVvdXRfYWRkKDEwMCwgKEdTb3VyY2VGdW5jKSBjbGlja01vdXNlQnV0dG9uQW5kV2FpdEZv
ckZpbGVDaG9vc2VyUmVxdWVzdCwgV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpKTsKKyAgICBnX21h
aW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3Qod2Vi
VmlldywgaGFuZGxlcik7CisKKyAgICAvLyBQZXJmb3JtIGFub3RoZXIgcmVxdWVzdCB0byBjaGVj
ayBpZiB0aGUgbGlzdCBvZiBmaWxlcyBzZWxlY3RlZAorICAgIC8vIGluIHRoZSBwcmV2aW91cyBz
dGVwIGFwcGVhcnMgbm93IGFzIHBhcnQgb2YgdGhlIG5ldyByZXF1ZXN0LgorICAgIGhhbmRsZXIg
PSBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJydW4tZmlsZS1jaG9vc2VyIiwgR19DQUxMQkFD
SyhydW5GaWxlQ2hvb3NlckNiU2VsZWN0aW9uUmV0YWluZWQpLCBOVUxMKTsKKyAgICBnX3RpbWVv
dXRfYWRkKDEwMCwgKEdTb3VyY2VGdW5jKSBjbGlja01vdXNlQnV0dG9uQW5kV2FpdEZvckZpbGVD
aG9vc2VyUmVxdWVzdCwgV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpKTsKKyAgICBnX21haW5fbG9v
cF9ydW4obG9vcCk7CisKKyAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3Qod2ViVmlldywg
aGFuZGxlcik7CisKKyAgICAvLyBNdWx0aXBsZSBzZWxlY3Rpb25zIG5vdCBhbGxvd2VkLCBvbmx5
IGFjY2VwdCBpbWFnZXMsIGF1ZGlvIGFuZCB2aWRlbyBmaWxlcy4KKyAgICBoYW5kbGVyID0gZ19z
aWduYWxfY29ubmVjdCh3ZWJWaWV3LCAicnVuLWZpbGUtY2hvb3NlciIsIEdfQ0FMTEJBQ0socnVu
RmlsZUNob29zZXJDYk5vTXVsdGlzZWxBY2NlcHRUeXBlcyksIE5VTEwpOworICAgIGh0bWxGb3Jt
YXQgPSBnX3N0cmR1cF9wcmludGYoaHRtbEZvcm1hdEJhc2UsICJhY2NlcHQ9J2F1ZGlvLyosdmlk
ZW8vKixpbWFnZS8qJyIpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhXRUJLSVRf
V0VCX1ZJRVcod2ViVmlldyksIGh0bWxGb3JtYXQsIE5VTEwsIE5VTEwsIE5VTEwpOworICAgIGdf
ZnJlZShodG1sRm9ybWF0KTsKKworICAgIGdfdGltZW91dF9hZGQoMTAwLCAoR1NvdXJjZUZ1bmMp
IGNsaWNrTW91c2VCdXR0b25BbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0LCBXRUJLSVRfV0VC
X1ZJRVcod2ViVmlldykpOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIGdfc2ln
bmFsX2hhbmRsZXJfZGlzY29ubmVjdCh3ZWJWaWV3LCBoYW5kbGVyKTsKKyAgICBndGtfd2lkZ2V0
X2Rlc3Ryb3kod2luZG93KTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3ZpZXdf
c291cmNlX21vZGUoKQoreworICAgIEd0a1dpZGdldCogd2ViX3ZpZXc7CisKKyAgICB3ZWJfdmll
dyA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKKworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0
cmluZyhXRUJLSVRfV0VCX1ZJRVcod2ViX3ZpZXcpLCAiPGh0bWw+PGJvZHk+PC9ib2R5PjwvaHRt
bD4iLCBOVUxMLCBOVUxMLCBOVUxMKTsKKworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdf
Z2V0X3ZpZXdfc291cmNlX21vZGUoV0VCS0lUX1dFQl9WSUVXKHdlYl92aWV3KSkpOworCisgICAg
d2Via2l0X3dlYl92aWV3X3NldF92aWV3X3NvdXJjZV9tb2RlKFdFQktJVF9XRUJfVklFVyh3ZWJf
dmlldyksIFRSVUUpOworCisgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dldF92aWV3X3Nv
dXJjZV9tb2RlKFdFQktJVF9XRUJfVklFVyh3ZWJfdmlldykpKTsKKworICAgIHdlYmtpdF93ZWJf
dmlld19zZXRfdmlld19zb3VyY2VfbW9kZShXRUJLSVRfV0VCX1ZJRVcod2ViX3ZpZXcpLCBGQUxT
RSk7CisKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2dldF92aWV3X3NvdXJjZV9tb2Rl
KFdFQktJVF9XRUJfVklFVyh3ZWJfdmlldykpKTsKKworICAgIGd0a193aWRnZXRfZGVzdHJveSh3
ZWJfdmlldyk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBT
b3VwU2VydmVyKiBzZXJ2ZXI7CisgICAgU291cFVSSSogc291cF91cmk7CisKKyAgICBndGtfdGVz
dF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7CisKKyAgICAvKiBIb3BlZnVsbHkgbWFrZSB0ZXN0
IGluZGVwZW5kZW50IG9mIHRoZSBwYXRoIGl0J3MgY2FsbGVkIGZyb20uICovCisgICAgdGVzdHV0
aWxzX3JlbGF0aXZlX2NoZGlyKCJUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9y
ZXNvdXJjZXMvdGVzdC5odG1sIiwgYXJndlswXSk7CisKKyAgICBzZXJ2ZXIgPSBzb3VwX3NlcnZl
cl9uZXcoU09VUF9TRVJWRVJfUE9SVCwgMCwgTlVMTCk7CisgICAgc291cF9zZXJ2ZXJfcnVuX2Fz
eW5jKHNlcnZlcik7CisKKyAgICBzb3VwX3NlcnZlcl9hZGRfaGFuZGxlcihzZXJ2ZXIsIE5VTEws
IHNlcnZlcl9jYWxsYmFjaywgTlVMTCwgTlVMTCk7CisKKyAgICBzb3VwX3VyaSA9IHNvdXBfdXJp
X25ldygiaHR0cDovLzEyNy4wLjAuMS8iKTsKKyAgICBzb3VwX3VyaV9zZXRfcG9ydChzb3VwX3Vy
aSwgc291cF9zZXJ2ZXJfZ2V0X3BvcnQoc2VydmVyKSk7CisKKyAgICBiYXNlX3VyaSA9IHNvdXBf
dXJpX3RvX3N0cmluZyhzb3VwX3VyaSwgRkFMU0UpOworICAgIHNvdXBfdXJpX2ZyZWUoc291cF91
cmkpOworCisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsK
KyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vidmlldy9pY29uLXVyaSIsIHRlc3Rfd2Vi
a2l0X3dlYl92aWV3X2ljb25fdXJpKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vi
dmlldy9hZGp1c3RtZW50cyIsIHRlc3Rfd2Via2l0X3dlYl92aWV3X2FkanVzdG1lbnRzKTsKKyAg
ICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vidmlldy9kZXN0cm95IiwgdGVzdF93ZWJraXRf
d2ViX3ZpZXdfZGVzdHJveSk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnZpZXcv
Z3JhYl9mb2N1cyIsIHRlc3Rfd2Via2l0X3dlYl92aWV3X2dyYWJfZm9jdXMpOworICAgIGdfdGVz
dF9hZGRfZnVuYygiL3dlYmtpdC93ZWJ2aWV3L3dpbmRvdy1mZWF0dXJlcyIsIHRlc3Rfd2Via2l0
X3dlYl92aWV3X3dpbmRvd19mZWF0dXJlcyk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0
L3dlYnZpZXcvd2Vidmlldy1pbi1vZmZzY3JlZW4td2luZG93LWRvZXMtbm90LWNyYXNoIiwgdGVz
dF93ZWJraXRfd2ViX3ZpZXdfaW5fb2Zmc2NyZWVuX3dpbmRvd19kb2VzX25vdF9jcmFzaCk7Cisg
ICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnZpZXcvd2Vidmlldy1kb2VzLW5vdC1zdGVh
bC1mb2N1cyIsIHRlc3Rfd2Via2l0X3dlYl92aWV3X2RvZXNfbm90X3N0ZWFsX2ZvY3VzKTsKKyAg
ICBnX3Rlc3RfYWRkX2RhdGFfZnVuYygiL3dlYmtpdC93ZWJ2aWV3L2Z1bGxzY3JlZW4iLCBHSU5U
X1RPX1BPSU5URVIoRkFMU0UpLCB0ZXN0X3dlYmtpdF93ZWJfdmlld19mdWxsc2NyZWVuKTsKKyAg
ICBnX3Rlc3RfYWRkX2RhdGFfZnVuYygiL3dlYmtpdC93ZWJ2aWV3L2Z1bGxzY3JlZW4tYmxvY2tl
ZCIsIEdJTlRfVE9fUE9JTlRFUihUUlVFKSwgdGVzdF93ZWJraXRfd2ViX3ZpZXdfZnVsbHNjcmVl
bik7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnZpZXcvZmlsZS1jaG9vc2VyIiwg
dGVzdF93ZWJraXRfd2ViX3ZpZXdfZmlsZV9jaG9vc2VyKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMo
Ii93ZWJraXQvd2Vidmlldy9zb3VyY2UtbW9kZSIsIHRlc3Rfd2Via2l0X3dlYl92aWV3X3NvdXJj
ZV9tb2RlKTsKKworICAgIHJldHVybiBnX3Rlc3RfcnVuICgpOworfQpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdpbmRvdy5jIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdpbmRvdy5jCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjVlZGE0N2IKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2luZG93LmMKQEAgLTAsMCArMSwxMTkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQ29sbGFib3JhIEx0ZC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+CisK
K3N0YXRpYyB2b2lkIG5vdGlmeV9sb2FkX3N0YXR1c19jYihXZWJLaXRXZWJWaWV3KiB3ZWJfdmll
dywgR1BhcmFtU3BlYyogcHNwZWMsIGdwb2ludGVyIGRhdGEpCit7CisgICAgaWYgKHdlYmtpdF93
ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMod2ViX3ZpZXcpID09IFdFQktJVF9MT0FEX0ZJTklTSEVE
KSB7CisgICAgICAgIEdNYWluTG9vcCogbG9vcCA9IChHTWFpbkxvb3AqKWRhdGE7CisKKyAgICAg
ICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rf
d2Via2l0X3dpbmRvd19zY3JvbGxiYXJfcG9saWN5KHZvaWQpCit7CisgICAgR01haW5Mb29wKiBs
b29wOworICAgIEd0a1dpZGdldCogc2Nyb2xsZWRXaW5kb3c7CisgICAgR3RrV2lkZ2V0KiB3ZWJW
aWV3OworICAgIFdlYktpdFdlYkZyYW1lKiBtYWluRnJhbWU7CisgICAgR3RrUG9saWN5VHlwZSBo
b3Jpem9udGFsUG9saWN5OworICAgIEd0a1BvbGljeVR5cGUgdmVydGljYWxQb2xpY3k7CisKKyAg
ICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworCisgICAgc2Nyb2xsZWRXaW5k
b3cgPSBndGtfc2Nyb2xsZWRfd2luZG93X25ldyhOVUxMLCBOVUxMKTsKKyAgICBndGtfc2Nyb2xs
ZWRfd2luZG93X3NldF9wb2xpY3koR1RLX1NDUk9MTEVEX1dJTkRPVyhzY3JvbGxlZFdpbmRvdyks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19QT0xJQ1lfQVVUT01BVElD
LCBHVEtfUE9MSUNZX0FVVE9NQVRJQyk7CisKKyAgICB3ZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3
X25ldygpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOworCisgICAgZ19zaWduYWxf
Y29ubmVjdCh3ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsCisgICAgICAgICAgICAgICAg
ICAgICBHX0NBTExCQUNLKG5vdGlmeV9sb2FkX3N0YXR1c19jYiksIGxvb3ApOworCisgICAgZ3Rr
X2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihzY3JvbGxlZFdpbmRvdyksIHdlYlZpZXcpOwor
CisgICAgbWFpbkZyYW1lID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKFdFQktJVF9X
RUJfVklFVyh3ZWJWaWV3KSk7CisKKyAgICAvKiBUZXN0IHdlIGNvcnJlY3RseSBhcHBseSBwb2xp
Y3kgZm9yIG5vdCBoYXZpbmcgc2Nyb2xsYmFyczsgVGhpcworICAgICAqIGNhc2UgaXMgc3BlY2lh
bCwgYmVjYXVzZSB3ZSB0dXJuIHRoZSBwb2xpY3kgZnJvbSBORVZFUiB0bworICAgICAqIEFVVE9N
QVRJQywgc2luY2Ugd2UgY2Fubm90IGVhc2lseSByZXByZXNlbnQgdGhlIHNhbWUgdGhpbmcKKyAg
ICAgKiB1c2luZyBHdGtTY3JvbGxlZFdpbmRvdyAqLworICAgIHdlYmtpdF93ZWJfdmlld19sb2Fk
X2h0bWxfc3RyaW5nKFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3KSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiPGh0bWw+PGJvZHk+V2ViS2l0ITwvYm9keT48c2NyaXB0PmRv
Y3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0uc3R5bGUub3ZlcmZsb3cgPSAn
aGlkZGVuJzs8L3NjcmlwdD48L2h0bWw+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiZmlsZTovLyIpOworCisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAg
Z3RrX3Njcm9sbGVkX3dpbmRvd19nZXRfcG9saWN5KEdUS19TQ1JPTExFRF9XSU5ET1coc2Nyb2xs
ZWRXaW5kb3cpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaG9yaXpvbnRh
bFBvbGljeSwgJnZlcnRpY2FsUG9saWN5KTsKKworICAgIGdfYXNzZXJ0KGhvcml6b250YWxQb2xp
Y3kgPT0gR1RLX1BPTElDWV9BVVRPTUFUSUMpOworICAgIGdfYXNzZXJ0KHZlcnRpY2FsUG9saWN5
ID09IEdUS19QT0xJQ1lfQVVUT01BVElDKTsKKworICAgIGdfYXNzZXJ0KEdUS19QT0xJQ1lfTkVW
RVIgPT0gd2Via2l0X3dlYl9mcmFtZV9nZXRfaG9yaXpvbnRhbF9zY3JvbGxiYXJfcG9saWN5KG1h
aW5GcmFtZSkpOworICAgIGdfYXNzZXJ0KEdUS19QT0xJQ1lfTkVWRVIgPT0gd2Via2l0X3dlYl9m
cmFtZV9nZXRfdmVydGljYWxfc2Nyb2xsYmFyX3BvbGljeShtYWluRnJhbWUpKTsKKworICAgIC8q
IFRlc3Qgd2UgY29ycmVjdGx5IGFwcGx5IHBvbGljeSBmb3IgYWx3YXlzIGhhdmluZyBzY3JvbGxi
YXJzICovCisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfaHRtbF9zdHJpbmcoV0VCS0lUX1dFQl9W
SUVXKHdlYlZpZXcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8aHRt
bD48Ym9keT5XZWJLaXQhPC9ib2R5PjxzY3JpcHQ+ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05h
bWUoJ2JvZHknKVswXS5zdHlsZS5vdmVyZmxvdyA9ICdzY3JvbGwnOzwvc2NyaXB0PjwvaHRtbD4i
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlOi8vIik7CisKKyAg
ICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICBndGtfc2Nyb2xsZWRfd2luZG93X2dldF9w
b2xpY3koR1RLX1NDUk9MTEVEX1dJTkRPVyhzY3JvbGxlZFdpbmRvdyksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZob3Jpem9udGFsUG9saWN5LCAmdmVydGljYWxQb2xpY3kp
OworCisgICAgZ19hc3NlcnQoaG9yaXpvbnRhbFBvbGljeSA9PSBHVEtfUE9MSUNZX0FMV0FZUyk7
CisgICAgZ19hc3NlcnQodmVydGljYWxQb2xpY3kgPT0gR1RLX1BPTElDWV9BTFdBWVMpOworCisg
ICAgZ19hc3NlcnQoaG9yaXpvbnRhbFBvbGljeSA9PSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9ob3Jp
em9udGFsX3Njcm9sbGJhcl9wb2xpY3kobWFpbkZyYW1lKSk7CisgICAgZ19hc3NlcnQodmVydGlj
YWxQb2xpY3kgPT0gd2Via2l0X3dlYl9mcmFtZV9nZXRfdmVydGljYWxfc2Nyb2xsYmFyX3BvbGlj
eShtYWluRnJhbWUpKTsKKworICAgIC8qIFRlc3Qgd2UgY29ycmVjdGx5IGFwcGx5IHBvbGljeSBm
b3IgaGF2aW5nIHNjcm9sbGJhcnMgd2hlbiBuZWVkZWQgKi8KKyAgICB3ZWJraXRfd2ViX3ZpZXdf
bG9hZF9odG1sX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldyksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIjxodG1sPjxib2R5PldlYktpdCE8L2JvZHk+PHNjcmlw
dD5kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdLnN0eWxlLm92ZXJmbG93
ID0gJ2F1dG8nOzwvc2NyaXB0PjwvaHRtbD4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJmaWxlOi8vIik7CisKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAg
ICBndGtfc2Nyb2xsZWRfd2luZG93X2dldF9wb2xpY3koR1RLX1NDUk9MTEVEX1dJTkRPVyhzY3Jv
bGxlZFdpbmRvdyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZob3Jpem9u
dGFsUG9saWN5LCAmdmVydGljYWxQb2xpY3kpOworCisgICAgZ19hc3NlcnQoaG9yaXpvbnRhbFBv
bGljeSA9PSBHVEtfUE9MSUNZX0FVVE9NQVRJQyk7CisgICAgZ19hc3NlcnQodmVydGljYWxQb2xp
Y3kgPT0gR1RLX1BPTElDWV9BVVRPTUFUSUMpOworCisgICAgZ19hc3NlcnQoaG9yaXpvbnRhbFBv
bGljeSA9PSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9ob3Jpem9udGFsX3Njcm9sbGJhcl9wb2xpY3ko
bWFpbkZyYW1lKSk7CisgICAgZ19hc3NlcnQodmVydGljYWxQb2xpY3kgPT0gd2Via2l0X3dlYl9m
cmFtZV9nZXRfdmVydGljYWxfc2Nyb2xsYmFyX3BvbGljeShtYWluRnJhbWUpKTsKKworICAgIGdf
b2JqZWN0X3VucmVmKHdlYlZpZXcpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFy
Z3YpCit7CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAgZ190
ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYWRk
X2Z1bmMoIi93ZWJraXQvd2luZG93L3Njcm9sbGJhcl9wb2xpY3kiLCB0ZXN0X3dlYmtpdF93aW5k
b3dfc2Nyb2xsYmFyX3BvbGljeSk7CisgICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7Cit9CmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL0xvYWRUcmFja2luZ1Rl
c3QuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9Mb2FkVHJhY2tpbmdU
ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjM0MjA0Ci0tLSAv
ZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9Mb2FkVHJh
Y2tpbmdUZXN0LmNwcApAQCAtMCwwICsxLDIwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTG9hZFRyYWNraW5n
VGVzdC5oIgorCisjaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+CisKK3N0YXRpYyB2b2lkIGxv
YWRDaGFuZ2VkQ2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0TG9hZEV2ZW50
IGxvYWRFdmVudCwgTG9hZFRyYWNraW5nVGVzdCogdGVzdCkKK3sKKyAgICBzd2l0Y2ggKGxvYWRF
dmVudCkgeworICAgIGNhc2UgV0VCS0lUX0xPQURfU1RBUlRFRDoKKyAgICAgICAgZ19hc3NlcnQo
d2Via2l0X3dlYl92aWV3X2lzX2xvYWRpbmcod2ViVmlldykpOworICAgICAgICBnX2Fzc2VydF9j
bXBzdHIodGVzdC0+bV9hY3RpdmVVUkkuZGF0YSgpLCA9PSwgd2Via2l0X3dlYl92aWV3X2dldF91
cmkod2ViVmlldykpOworICAgICAgICB0ZXN0LT5wcm92aXNpb25hbExvYWRTdGFydGVkKCk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0xPQURfUkVESVJFQ1RFRDoKKyAgICAgICAg
Z19hc3NlcnQod2Via2l0X3dlYl92aWV3X2lzX2xvYWRpbmcod2ViVmlldykpOworICAgICAgICB0
ZXN0LT5tX2FjdGl2ZVVSSSA9IHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKHdlYlZpZXcpOworICAg
ICAgICBpZiAoIXRlc3QtPm1fcmVkaXJlY3RVUkkuaXNOdWxsKCkpCisgICAgICAgICAgICBnX2Fz
c2VydF9jbXBzdHIodGVzdC0+bV9yZWRpcmVjdFVSSS5kYXRhKCksID09LCB0ZXN0LT5tX2FjdGl2
ZVVSSS5kYXRhKCkpOworICAgICAgICB0ZXN0LT5wcm92aXNpb25hbExvYWRSZWNlaXZlZFNlcnZl
clJlZGlyZWN0KCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0xPQURfQ09NTUlU
VEVEOiB7CisgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19pc19sb2FkaW5nKHdlYlZp
ZXcpKTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPm1fYWN0aXZlVVJJLmRhdGEoKSwg
PT0sIHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKHdlYlZpZXcpKTsKKworICAgICAgICAvLyBDaGVj
ayB0aGF0IG9uIGNvbW1pdHRlZCB3ZSBhbHdheXMgaGF2ZSBhIG1haW4gcmVzb3VyY2Ugd2l0aCBh
IHJlc3BvbnNlLgorICAgICAgICBXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UgPSB3ZWJraXRf
d2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2Uod2ViVmlldyk7CisgICAgICAgIGdfYXNzZXJ0KHJl
c291cmNlKTsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfcmVzcG9u
c2UocmVzb3VyY2UpKTsKKworICAgICAgICB0ZXN0LT5sb2FkQ29tbWl0dGVkKCk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBjYXNlIFdFQktJVF9MT0FEX0ZJTklTSEVEOgorICAgICAgICBn
X2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2lzX2xvYWRpbmcod2ViVmlldykpOworICAgICAgICBp
ZiAoIXRlc3QtPm1fbG9hZEZhaWxlZCkKKyAgICAgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXN0
LT5tX2FjdGl2ZVVSSS5kYXRhKCksID09LCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSh3ZWJWaWV3
KSk7CisgICAgICAgIHRlc3QtPmxvYWRGaW5pc2hlZCgpOworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgIH0KK30KKworc3Rh
dGljIHZvaWQgbG9hZEZhaWxlZENhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktp
dExvYWRFdmVudCBsb2FkRXZlbnQsIGNvbnN0IGNoYXIqIGZhaWxpbmdVUkksIEdFcnJvciogZXJy
b3IsIExvYWRUcmFja2luZ1Rlc3QqIHRlc3QpCit7CisgICAgdGVzdC0+bV9sb2FkRmFpbGVkID0g
dHJ1ZTsKKyAgICB0ZXN0LT5tX2Vycm9yLnNldChnX2Vycm9yX2NvcHkoZXJyb3IpKTsKKworICAg
IHN3aXRjaCAobG9hZEV2ZW50KSB7CisgICAgY2FzZSBXRUJLSVRfTE9BRF9TVEFSVEVEOgorICAg
ICAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2lzX2xvYWRpbmcod2ViVmlldykpOworICAg
ICAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9hY3RpdmVVUkkuZGF0YSgpLCA9PSwgd2Via2l0
X3dlYl92aWV3X2dldF91cmkod2ViVmlldykpOworICAgICAgICBnX2Fzc2VydChlcnJvcik7Cisg
ICAgICAgIHRlc3QtPnByb3Zpc2lvbmFsTG9hZEZhaWxlZChmYWlsaW5nVVJJLCBlcnJvcik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0xPQURfQ09NTUlUVEVEOgorICAgICAgICBn
X2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2lzX2xvYWRpbmcod2ViVmlldykpOworICAgICAgICBn
X2Fzc2VydF9jbXBzdHIodGVzdC0+bV9hY3RpdmVVUkkuZGF0YSgpLCA9PSwgd2Via2l0X3dlYl92
aWV3X2dldF91cmkod2ViVmlldykpOworICAgICAgICBnX2Fzc2VydChlcnJvcik7CisgICAgICAg
IHRlc3QtPmxvYWRGYWlsZWQoZmFpbGluZ1VSSSwgZXJyb3IpOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgIH0KK30KKwor
c3RhdGljIHZvaWQgZXN0aW1hdGVkUHJvZ3Jlc3NDaGFuZ2VkQ2FsbGJhY2soR09iamVjdCosIEdQ
YXJhbVNwZWMqLCBMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0KQoreworICAgIHRlc3QtPmVzdGltYXRl
ZFByb2dyZXNzQ2hhbmdlZCgpOworfQorCitMb2FkVHJhY2tpbmdUZXN0OjpMb2FkVHJhY2tpbmdU
ZXN0KCkKKyAgICA6IG1fcnVuTG9hZFVudGlsQ29tcGxldGlvbihmYWxzZSkKKyAgICAsIG1fbG9h
ZEZhaWxlZChmYWxzZSkKK3sKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImxvYWQt
Y2hhbmdlZCIsIEdfQ0FMTEJBQ0sobG9hZENoYW5nZWRDYWxsYmFjayksIHRoaXMpOworICAgIGdf
c2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAibG9hZC1mYWlsZWQiLCBHX0NBTExCQUNLKGxvYWRG
YWlsZWRDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAi
bm90aWZ5Ojplc3RpbWF0ZWQtbG9hZC1wcm9ncmVzcyIsIEdfQ0FMTEJBQ0soZXN0aW1hdGVkUHJv
Z3Jlc3NDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKKworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X3VyaShtX3dlYlZpZXcpKTsKK30KKworTG9hZFRyYWNraW5nVGVzdDo6fkxvYWRU
cmFja2luZ1Rlc3QoKQoreworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hl
ZChtX3dlYlZpZXcsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOworfQor
Cit2b2lkIExvYWRUcmFja2luZ1Rlc3Q6OndhaXRVbnRpbExvYWRGaW5pc2hlZCgpCit7CisgICAg
bV9lc3RpbWF0ZWRQcm9ncmVzcyA9IDA7CisgICAgbV9ydW5Mb2FkVW50aWxDb21wbGV0aW9uID0g
dHJ1ZTsKKyAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Cit9CisKK3ZvaWQgTG9hZFRy
YWNraW5nVGVzdDo6cHJvdmlzaW9uYWxMb2FkU3RhcnRlZCgpCit7CisgICAgbV9sb2FkRXZlbnRz
LmFwcGVuZChQcm92aXNpb25hbExvYWRTdGFydGVkKTsKK30KKwordm9pZCBMb2FkVHJhY2tpbmdU
ZXN0Ojpwcm92aXNpb25hbExvYWRSZWNlaXZlZFNlcnZlclJlZGlyZWN0KCkKK3sKKyAgICBtX2xv
YWRFdmVudHMuYXBwZW5kKFByb3Zpc2lvbmFsTG9hZFJlY2VpdmVkU2VydmVyUmVkaXJlY3QpOwor
fQorCit2b2lkIExvYWRUcmFja2luZ1Rlc3Q6OnByb3Zpc2lvbmFsTG9hZEZhaWxlZChjb25zdCBn
Y2hhciogZmFpbGluZ1VSSSwgR0Vycm9yKiBlcnJvcikKK3sKKyAgICBtX2xvYWRFdmVudHMuYXBw
ZW5kKFByb3Zpc2lvbmFsTG9hZEZhaWxlZCk7Cit9CisKK3ZvaWQgTG9hZFRyYWNraW5nVGVzdDo6
bG9hZENvbW1pdHRlZCgpCit7CisgICAgbV9sb2FkRXZlbnRzLmFwcGVuZChMb2FkQ29tbWl0dGVk
KTsKK30KKwordm9pZCBMb2FkVHJhY2tpbmdUZXN0Ojpsb2FkRmluaXNoZWQoKQoreworICAgIG1f
bG9hZEV2ZW50cy5hcHBlbmQoTG9hZEZpbmlzaGVkKTsKKyAgICBpZiAobV9ydW5Mb2FkVW50aWxD
b21wbGV0aW9uKQorICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3ApOworfQorCit2
b2lkIExvYWRUcmFja2luZ1Rlc3Q6OmxvYWRGYWlsZWQoY29uc3QgZ2NoYXIqIGZhaWxpbmdVUkks
IEdFcnJvciogZXJyb3IpCit7CisgICAgbV9sb2FkRXZlbnRzLmFwcGVuZChMb2FkRmFpbGVkKTsK
K30KKwordm9pZCBMb2FkVHJhY2tpbmdUZXN0Ojplc3RpbWF0ZWRQcm9ncmVzc0NoYW5nZWQoKQor
eworICAgIGRvdWJsZSBwcm9ncmVzcyA9IHdlYmtpdF93ZWJfdmlld19nZXRfZXN0aW1hdGVkX2xv
YWRfcHJvZ3Jlc3MobV93ZWJWaWV3KTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdChtX2VzdGltYXRl
ZFByb2dyZXNzLCA8LCBwcm9ncmVzcyk7CisgICAgbV9lc3RpbWF0ZWRQcm9ncmVzcyA9IHByb2dy
ZXNzOworfQorCit2b2lkIExvYWRUcmFja2luZ1Rlc3Q6OmxvYWRVUkkoY29uc3QgY2hhciogdXJp
KQoreworICAgIG1fbG9hZEV2ZW50cy5jbGVhcigpOworICAgIG1fZXN0aW1hdGVkUHJvZ3Jlc3Mg
PSAwOworICAgIG1fZXJyb3IuY2xlYXIoKTsKKyAgICBXZWJWaWV3VGVzdDo6bG9hZFVSSSh1cmkp
OworfQorCit2b2lkIExvYWRUcmFja2luZ1Rlc3Q6OmxvYWRIdG1sKGNvbnN0IGNoYXIqIGh0bWws
IGNvbnN0IGNoYXIqIGJhc2VVUkkpCit7CisgICAgbV9sb2FkRXZlbnRzLmNsZWFyKCk7CisgICAg
bV9lc3RpbWF0ZWRQcm9ncmVzcyA9IDA7CisgICAgbV9lcnJvci5jbGVhcigpOworICAgIFdlYlZp
ZXdUZXN0Ojpsb2FkSHRtbChodG1sLCBiYXNlVVJJKTsKK30KKwordm9pZCBMb2FkVHJhY2tpbmdU
ZXN0Ojpsb2FkUGxhaW5UZXh0KGNvbnN0IGNoYXIqIHBsYWluVGV4dCkKK3sKKyAgICBtX2xvYWRF
dmVudHMuY2xlYXIoKTsKKyAgICBtX2VzdGltYXRlZFByb2dyZXNzID0gMDsKKyAgICBtX2Vycm9y
LmNsZWFyKCk7CisgICAgV2ViVmlld1Rlc3Q6OmxvYWRQbGFpblRleHQocGxhaW5UZXh0KTsKK30K
Kwordm9pZCBMb2FkVHJhY2tpbmdUZXN0Ojpsb2FkUmVxdWVzdChXZWJLaXRVUklSZXF1ZXN0KiBy
ZXF1ZXN0KQoreworICAgIG1fbG9hZEV2ZW50cy5jbGVhcigpOworICAgIG1fZXN0aW1hdGVkUHJv
Z3Jlc3MgPSAwOworICAgIG1fZXJyb3IuY2xlYXIoKTsKKyAgICBXZWJWaWV3VGVzdDo6bG9hZFJl
cXVlc3QocmVxdWVzdCk7Cit9CisKK3ZvaWQgTG9hZFRyYWNraW5nVGVzdDo6cmVsb2FkKCkKK3sK
KyAgICBtX2xvYWRFdmVudHMuY2xlYXIoKTsKKyAgICBtX2VzdGltYXRlZFByb2dyZXNzID0gMDsK
KyAgICBtX2Vycm9yLmNsZWFyKCk7CisgICAgd2Via2l0X3dlYl92aWV3X3JlbG9hZChtX3dlYlZp
ZXcpOworfQorCit2b2lkIExvYWRUcmFja2luZ1Rlc3Q6OmdvQmFjaygpCit7CisgICAgbV9sb2Fk
RXZlbnRzLmNsZWFyKCk7CisgICAgbV9lc3RpbWF0ZWRQcm9ncmVzcyA9IDA7CisgICAgbV9lcnJv
ci5jbGVhcigpOworICAgIFdlYlZpZXdUZXN0Ojpnb0JhY2soKTsKK30KKwordm9pZCBMb2FkVHJh
Y2tpbmdUZXN0Ojpnb0ZvcndhcmQoKQoreworICAgIG1fbG9hZEV2ZW50cy5jbGVhcigpOworICAg
IG1fZXN0aW1hdGVkUHJvZ3Jlc3MgPSAwOworICAgIG1fZXJyb3IuY2xlYXIoKTsKKyAgICBXZWJW
aWV3VGVzdDo6Z29Gb3J3YXJkKCk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L2d0ay9XZWJLaXQyR3RrL0xvYWRUcmFja2luZ1Rlc3QuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
Z3RrL1dlYktpdDJHdGsvTG9hZFRyYWNraW5nVGVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmEzY2Y3ODQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL2d0ay9XZWJLaXQyR3RrL0xvYWRUcmFja2luZ1Rlc3QuaApAQCAtMCwwICsxLDY4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgTG9hZFRyYWNraW5n
VGVzdF9oCisjZGVmaW5lIExvYWRUcmFja2luZ1Rlc3RfaAorCisjaW5jbHVkZSAiVGVzdE1haW4u
aCIKKyNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
Y2xhc3MgTG9hZFRyYWNraW5nVGVzdCA6IHB1YmxpYyBXZWJWaWV3VGVzdCB7CitwdWJsaWM6Cisg
ICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShMb2FkVHJhY2tpbmdUZXN0KTsKKyAgICBMb2FkVHJh
Y2tpbmdUZXN0KCk7CisgICAgdmlydHVhbCB+TG9hZFRyYWNraW5nVGVzdCgpOworICAgIHZvaWQg
d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcHJvdmlzaW9uYWxM
b2FkU3RhcnRlZCgpOworICAgIHZpcnR1YWwgdm9pZCBwcm92aXNpb25hbExvYWRSZWNlaXZlZFNl
cnZlclJlZGlyZWN0KCk7CisgICAgdmlydHVhbCB2b2lkIHByb3Zpc2lvbmFsTG9hZEZhaWxlZChj
b25zdCBnY2hhciogZmFpbGluZ1VSSSwgR0Vycm9yKik7CisgICAgdmlydHVhbCB2b2lkIGxvYWRD
b21taXR0ZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZEZpbmlzaGVkKCk7CisgICAgdmlydHVh
bCB2b2lkIGxvYWRGYWlsZWQoY29uc3QgY2hhciogZmFpbGluZ1VSSSwgR0Vycm9yKik7CisgICAg
dmlydHVhbCB2b2lkIGVzdGltYXRlZFByb2dyZXNzQ2hhbmdlZCgpOworCisgICAgdm9pZCBsb2Fk
VVJJKGNvbnN0IGNoYXIqIHVyaSk7CisgICAgdm9pZCBsb2FkSHRtbChjb25zdCBjaGFyKiBodG1s
LCBjb25zdCBjaGFyKiBiYXNlVVJJKTsKKyAgICB2b2lkIGxvYWRQbGFpblRleHQoY29uc3QgY2hh
ciogcGxhaW5UZXh0KTsKKyAgICB2b2lkIGxvYWRSZXF1ZXN0KFdlYktpdFVSSVJlcXVlc3QqKTsK
KyAgICB2b2lkIHJlbG9hZCgpOworICAgIHZvaWQgZ29CYWNrKCk7CisgICAgdm9pZCBnb0Zvcndh
cmQoKTsKKworICAgIHZvaWQgc2V0UmVkaXJlY3RVUkkoY29uc3QgY2hhciogdXJpKSB7IG1fcmVk
aXJlY3RVUkkgPSB1cmk7IH0KKworICAgIGVudW0gTG9hZEV2ZW50cyB7CisgICAgICAgIFByb3Zp
c2lvbmFsTG9hZFN0YXJ0ZWQsCisgICAgICAgIFByb3Zpc2lvbmFsTG9hZFJlY2VpdmVkU2VydmVy
UmVkaXJlY3QsCisgICAgICAgIFByb3Zpc2lvbmFsTG9hZEZhaWxlZCwKKyAgICAgICAgTG9hZENv
bW1pdHRlZCwKKyAgICAgICAgTG9hZEZpbmlzaGVkLAorICAgICAgICBMb2FkRmFpbGVkCisgICAg
fTsKKyAgICBib29sIG1fcnVuTG9hZFVudGlsQ29tcGxldGlvbjsKKyAgICBib29sIG1fbG9hZEZh
aWxlZDsKKyAgICBHT3duUHRyPEdFcnJvcj4gbV9lcnJvcjsKKyAgICBWZWN0b3I8TG9hZEV2ZW50
cz4gbV9sb2FkRXZlbnRzOworICAgIGZsb2F0IG1fZXN0aW1hdGVkUHJvZ3Jlc3M7CisgICAgQ1N0
cmluZyBtX3JlZGlyZWN0VVJJOworfTsKKworI2VuZGlmIC8vIExvYWRUcmFja2luZ1Rlc3RfaApk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9UZXN0TWFpbi5j
cHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1Rlc3RNYWluLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjFmZmQ3Ci0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9UZXN0TWFpbi5jcHAKQEAgLTAs
MCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdE1haW4uaCIKKworI2luY2x1ZGUgPGdsaWIvZ3N0
ZGlvLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5o
PgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKwordm9pZCBiZWZvcmVBbGwoKTsK
K3ZvaWQgYWZ0ZXJBbGwoKTsKKworc3RhdGljIHZvaWQgcmVnaXN0ZXJHUmVzb3VyY2Uodm9pZCkK
K3sKKyAgICBHT3duUHRyPGNoYXI+IHJlc291cmNlc1BhdGgoZ19idWlsZF9maWxlbmFtZShXRUJL
SVRfRVhFQ19QQVRILCAiVGVzdFdlYktpdEFQSSIsICJXZWJLaXQyR3RrIiwgInJlc291cmNlcyIs
ICJ3ZWJraXQyZ3RrLXRlc3RzLXJlc291cmNlcy5ncmVzb3VyY2UiLCBOVUxMKSk7CisgICAgR1Jl
c291cmNlKiByZXNvdXJjZSA9IGdfcmVzb3VyY2VfbG9hZChyZXNvdXJjZXNQYXRoLmdldCgpLCAw
KTsKKyAgICBnX2Fzc2VydChyZXNvdXJjZSk7CisKKyAgICBnX3Jlc291cmNlc19yZWdpc3Rlcihy
ZXNvdXJjZSk7CisgICAgZ19yZXNvdXJjZV91bnJlZihyZXNvdXJjZSk7Cit9CisKK3N0YXRpYyB2
b2lkIHJlbW92ZU5vbkVtcHR5RGlyZWN0b3J5KGNvbnN0IGNoYXIqIGRpcmVjdG9yeVBhdGgpCit7
CisgICAgR0RpciogZGlyZWN0b3J5ID0gZ19kaXJfb3BlbihkaXJlY3RvcnlQYXRoLCAwLCAwKTsK
KyAgICBnX2Fzc2VydChkaXJlY3RvcnkpOworICAgIGNvbnN0IGNoYXIqIGZpbGVOYW1lOworICAg
IHdoaWxlICgoZmlsZU5hbWUgPSBnX2Rpcl9yZWFkX25hbWUoZGlyZWN0b3J5KSkpIHsKKyAgICAg
ICAgR093blB0cjxjaGFyPiBmaWxlUGF0aChnX2J1aWxkX2ZpbGVuYW1lKGRpcmVjdG9yeVBhdGgs
IGZpbGVOYW1lLCBOVUxMKSk7CisgICAgICAgIGdfdW5saW5rKGZpbGVQYXRoLmdldCgpKTsKKyAg
ICB9CisgICAgZ19kaXJfY2xvc2UoZGlyZWN0b3J5KTsKKyAgICBnX3JtZGlyKGRpcmVjdG9yeVBh
dGgpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgZ191bnNl
dGVudigiREJVU19TRVNTSU9OX0JVU19BRERSRVNTIik7CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJn
YywgJmFyZ3YsIDApOworICAgIGdfc2V0ZW52KCJXRUJLSVRfRVhFQ19QQVRIIiwgV0VCS0lUX0VY
RUNfUEFUSCwgRkFMU0UpOworICAgIGdfc2V0ZW52KCJXRUJLSVRfSU5KRUNURURfQlVORExFX1BB
VEgiLCBXRUJLSVRfSU5KRUNURURfQlVORExFX1BBVEgsIEZBTFNFKTsKKyAgICBnX3NldGVudigi
TENfQUxMIiwgIkMiLCBUUlVFKTsKKyAgICBnX3NldGVudigiR0lPX1VTRV9WRlMiLCAibG9jYWwi
LCBUUlVFKTsKKyAgICBnX3NldGVudigiR1NFVFRJTkdTX0JBQ0tFTkQiLCAibWVtb3J5IiwgVFJV
RSk7CisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKKwor
ICAgIHJlZ2lzdGVyR1Jlc291cmNlKCk7CisKKyAgICBHT3duUHRyPGNoYXI+IGRpc2tDYWNoZVRl
bXBEaXJlY3RvcnkoZ19kaXJfbWFrZV90bXAoIldlYktpdDJUZXN0c0Rpc2tDYWNoZS1YWFhYWFgi
LCAwKSk7CisgICAgZ19hc3NlcnQoZGlza0NhY2hlVGVtcERpcmVjdG9yeS5nZXQoKSk7CisgICAg
d2Via2l0X3dlYl9jb250ZXh0X3NldF9kaXNrX2NhY2hlX2RpcmVjdG9yeSh3ZWJraXRfd2ViX2Nv
bnRleHRfZ2V0X2RlZmF1bHQoKSwgZGlza0NhY2hlVGVtcERpcmVjdG9yeS5nZXQoKSk7CisKKyAg
ICBiZWZvcmVBbGwoKTsKKyAgICBpbnQgcmV0dXJuVmFsdWUgPSBnX3Rlc3RfcnVuKCk7CisgICAg
YWZ0ZXJBbGwoKTsKKworICAgIHJlbW92ZU5vbkVtcHR5RGlyZWN0b3J5KGRpc2tDYWNoZVRlbXBE
aXJlY3RvcnkuZ2V0KCkpOworCisgICAgcmV0dXJuIHJldHVyblZhbHVlOworfQpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9UZXN0TWFpbi5oIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9UZXN0TWFpbi5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjNhM2E0ODQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1Rlc3RNYWluLmgKQEAgLTAsMCArMSwxMTkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBUZXN0TWFpbl9oCisj
ZGVmaW5lIFRlc3RNYWluX2gKKworI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8Z2xpYi1v
YmplY3QuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0
L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNkZWZpbmUgTUFL
RV9HTElCX1RFU1RfRklYVFVSRShDbGFzc05hbWUpIFwKKyAgICBzdGF0aWMgdm9pZCBzZXRVcChD
bGFzc05hbWUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkgXAorICAgIHsgXAorICAgICAg
ICBuZXcgKGZpeHR1cmUpIENsYXNzTmFtZTsgXAorICAgIH0gXAorICAgIHN0YXRpYyB2b2lkIHRl
YXJEb3duKENsYXNzTmFtZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKSBcCisgICAgeyBc
CisgICAgICAgIGZpeHR1cmUtPn5DbGFzc05hbWUoKTsgXAorICAgIH0gXAorICAgIHN0YXRpYyB2
b2lkIGFkZChjb25zdCBjaGFyKiBzdWl0ZU5hbWUsIGNvbnN0IGNoYXIqIHRlc3ROYW1lLCB2b2lk
ICgqdGVzdEZ1bmMpKENsYXNzTmFtZSosIGNvbnN0IHZvaWQqKSkgXAorICAgIHsgXAorICAgICAg
ICBHT3duUHRyPGdjaGFyPiB0ZXN0UGF0aChnX3N0cmR1cF9wcmludGYoIi93ZWJraXQyLyVzLyVz
Iiwgc3VpdGVOYW1lLCB0ZXN0TmFtZSkpOyBcCisgICAgICAgIGdfdGVzdF9hZGQodGVzdFBhdGgu
Z2V0KCksIENsYXNzTmFtZSwgMCwgQ2xhc3NOYW1lOjpzZXRVcCwgdGVzdEZ1bmMsIENsYXNzTmFt
ZTo6dGVhckRvd24pOyBcCisgICAgfQorCisjZGVmaW5lIEFTU0VSVF9DTVBfQ1NUUklORyhzMSwg
Y21wLCBzMikgXAorICAgIGRvIHsgQ1N0cmluZyBfX3MxID0gKHMxKTsgQ1N0cmluZyBfX3MyID0g
KHMyKTsgXAorICAgICAgICBpZiAoZ19zdHJjbXAwKF9fczEuZGF0YSgpLCBfX3MyLmRhdGEoKSkg
Y21wIDApIDsgZWxzZSBcCisgICAgICAgICAgICBnX2Fzc2VydGlvbl9tZXNzYWdlX2NtcHN0cihH
X0xPR19ET01BSU4sIF9fRklMRV9fLCBfX0xJTkVfXywgR19TVFJGVU5DLCBcCisgICAgICAgICAg
ICAgICAgI3MxICIgIiAjY21wICIgIiAjczIsIF9fczEuZGF0YSgpLCAjY21wLCBfX3MyLmRhdGEo
KSk7IH0gd2hpbGUgKDApCisKK2NsYXNzIFRlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9U
RVNUX0ZJWFRVUkUoVGVzdCk7CisKKyAgICB+VGVzdCgpCisgICAgeworICAgICAgICBpZiAobV93
YXRjaGVkT2JqZWN0cy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
Z19wcmludCgiTGVha2VkIG9iamVjdHM6Iik7CisgICAgICAgIEhhc2hTZXQ8R09iamVjdCo+Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSBtX3dhdGNoZWRPYmplY3RzLmVuZCgpOworICAgICAgICBmb3Ig
KEhhc2hTZXQ8R09iamVjdCo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fd2F0Y2hlZE9iamVjdHMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgZ19wcmludCgiICVzKCVwKSIs
IGdfdHlwZV9uYW1lX2Zyb21faW5zdGFuY2UocmVpbnRlcnByZXRfY2FzdDxHVHlwZUluc3RhbmNl
Kj4oKml0KSksICppdCk7CisgICAgICAgIGdfcHJpbnQoIlxuIik7CisKKyAgICAgICAgZ19hc3Nl
cnQobV93YXRjaGVkT2JqZWN0cy5pc0VtcHR5KCkpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lk
IG9iamVjdEZpbmFsaXplZChUZXN0KiB0ZXN0LCBHT2JqZWN0KiBmaW5hbGl6ZWRPYmplY3QpCisg
ICAgeworICAgICAgICB0ZXN0LT5tX3dhdGNoZWRPYmplY3RzLnJlbW92ZShmaW5hbGl6ZWRPYmpl
Y3QpOworICAgIH0KKworICAgIHZvaWQgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5p
c2hlcyhHT2JqZWN0KiBvYmplY3QpCisgICAgeworICAgICAgICBtX3dhdGNoZWRPYmplY3RzLmFk
ZChvYmplY3QpOworICAgICAgICBnX29iamVjdF93ZWFrX3JlZihvYmplY3QsIHJlaW50ZXJwcmV0
X2Nhc3Q8R1dlYWtOb3RpZnk+KG9iamVjdEZpbmFsaXplZCksIHRoaXMpOworICAgIH0KKworICAg
IHN0YXRpYyBDU3RyaW5nIGdldFdlYktpdDFUZXN0UmVzb3VjZXNEaXIoKQorICAgIHsKKyAgICAg
ICAgR093blB0cjxjaGFyPiByZXNvdXJjZXNEaXIoZ19idWlsZF9maWxlbmFtZShXRUJLSVRfU1JD
X0RJUiwgIlRvb2xzIiwgIlRlc3RXZWJLaXRBUEkiLCAiVGVzdHMiLCAiV2ViS2l0R3RrIiwgInJl
c291cmNlcyIsIE5VTEwpKTsKKyAgICAgICAgcmV0dXJuIHJlc291cmNlc0Rpci5nZXQoKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgQ1N0cmluZyBnZXRSZXNvdXJjZXNEaXIoKQorICAgIHsKKyAgICAg
ICAgR093blB0cjxjaGFyPiByZXNvdXJjZXNEaXIoZ19idWlsZF9maWxlbmFtZShXRUJLSVRfU1JD
X0RJUiwgIlRvb2xzIiwgIlRlc3RXZWJLaXRBUEkiLCAiVGVzdHMiLCAiV2ViS2l0Mkd0ayIsICJy
ZXNvdXJjZXMiLCBOVUxMKSk7CisgICAgICAgIHJldHVybiByZXNvdXJjZXNEaXIuZ2V0KCk7Cisg
ICAgfQorCisgICAgdm9pZCBhZGRMb2dGYXRhbEZsYWcodW5zaWduZWQgZmxhZykKKyAgICB7Cisg
ICAgICAgIHVuc2lnbmVkIGZhdGFsTWFzayA9IGdfbG9nX3NldF9hbHdheXNfZmF0YWwoc3RhdGlj
X2Nhc3Q8R0xvZ0xldmVsRmxhZ3M+KEdfTE9HX0ZBVEFMX01BU0spKTsKKyAgICAgICAgZmF0YWxN
YXNrIHw9IGZsYWc7CisgICAgICAgIGdfbG9nX3NldF9hbHdheXNfZmF0YWwoc3RhdGljX2Nhc3Q8
R0xvZ0xldmVsRmxhZ3M+KGZhdGFsTWFzaykpOworICAgIH0KKworICAgIHZvaWQgcmVtb3ZlTG9n
RmF0YWxGbGFnKHVuc2lnbmVkIGZsYWcpCisgICAgeworICAgICAgICB1bnNpZ25lZCBmYXRhbE1h
c2sgPSBnX2xvZ19zZXRfYWx3YXlzX2ZhdGFsKHN0YXRpY19jYXN0PEdMb2dMZXZlbEZsYWdzPihH
X0xPR19GQVRBTF9NQVNLKSk7CisgICAgICAgIGZhdGFsTWFzayAmPSB+ZmxhZzsKKyAgICAgICAg
Z19sb2dfc2V0X2Fsd2F5c19mYXRhbChzdGF0aWNfY2FzdDxHTG9nTGV2ZWxGbGFncz4oZmF0YWxN
YXNrKSk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgY2Fpcm9TdXJmYWNlc0VxdWFsKGNhaXJv
X3N1cmZhY2VfdCogczEsIGNhaXJvX3N1cmZhY2VfdCogczIpCisgICAgeworICAgICAgICByZXR1
cm4gKGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2Zvcm1hdChzMSkgPT0gY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9nZXRfZm9ybWF0KHMyKQorICAgICAgICAgICAgJiYgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfd2lkdGgoczEpID09IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHMyKQorICAgICAg
ICAgICAgJiYgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHMxKSA9PSBjYWlyb19pbWFn
ZV9zdXJmYWNlX2dldF9oZWlnaHQoczIpCisgICAgICAgICAgICAmJiBjYWlyb19pbWFnZV9zdXJm
YWNlX2dldF9zdHJpZGUoczEpID09IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShzMikK
KyAgICAgICAgICAgICYmICFtZW1jbXAoY29uc3RfY2FzdDxjb25zdCB2b2lkKj4ocmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzMSkpKSwKKyAgICAg
ICAgICAgICAgICBjb25zdF9jYXN0PGNvbnN0IHZvaWQqPihyZWludGVycHJldF9jYXN0PHZvaWQq
PihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHMyKSkpLAorICAgICAgICAgICAgICAgIGNh
aXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzMSkqY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRf
c3RyaWRlKHMxKSkpOworICAgIH0KKworICAgIEhhc2hTZXQ8R09iamVjdCo+IG1fd2F0Y2hlZE9i
amVjdHM7Cit9OworCisjZW5kaWYgLy8gVGVzdE1haW5faApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9XZWJLaXRUZXN0QnVzLmNwcCBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViS2l0VGVzdEJ1cy5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uOGMyZDNmNgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViS2l0VGVzdEJ1cy5jcHAKQEAgLTAsMCArMSwx
MDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIldlYktpdFRlc3RCdXMuaCIKKworI2luY2x1ZGUgPHd0Zi9nb2Jq
ZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworV2ViS2l0
VGVzdEJ1czo6V2ViS2l0VGVzdEJ1cygpCisgICAgOiBtX3BpZCgtMSkKK3sKK30KKworYm9vbCBX
ZWJLaXRUZXN0QnVzOjpydW4oKQoreworICAgIC8vIEZJWE1FOiBVc2UgR1Rlc3REQnVzIHdoZW4g
d2UgYnVtcCBnbGliIHRvIDIuMzQuCisgICAgR093blB0cjxjaGFyPiBkYnVzTGF1bmNoKGdfZmlu
ZF9wcm9ncmFtX2luX3BhdGgoImRidXMtbGF1bmNoIikpOworICAgIGlmICghZGJ1c0xhdW5jaCkg
eworICAgICAgICBnX3dhcm5pbmcoIkVycm9yIHN0YXJ0aW5nIERCVVMgZGFlbW9uOiBkYnVzLWxh
dW5jaCBub3QgZm91bmQgaW4gcGF0aCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgR093blB0cjxjaGFyPiBvdXRwdXQ7CisgICAgR093blB0cjxHRXJyb3I+IGVycm9yOwor
ICAgIGlmICghZ19zcGF3bl9jb21tYW5kX2xpbmVfc3luYyhkYnVzTGF1bmNoLmdldCgpLCAmb3V0
cHV0Lm91dFB0cigpLCAwLCAwLCAmZXJyb3Iub3V0UHRyKCkpKSB7CisgICAgICAgIGdfd2Fybmlu
ZygiRXJyb3Igc3RhcnRpbmcgREJVUyBkYWVtb246ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgU3RyaW5nIG91dHB1dFN0cmluZyA9IFN0
cmluZzo6ZnJvbVVURjgob3V0cHV0LmdldCgpKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBsaW5lczsK
KyAgICBvdXRwdXRTdHJpbmcuc3BsaXQoVUNoYXIoJ1xuJyksIC8qIGFsbG93RW1wdHlFbnRyaWVz
ICovIGZhbHNlLCBsaW5lcyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaW5lcy5zaXpl
KCk7ICsraSkgeworICAgICAgICBjaGFyKioga2V5VmFsdWUgPSBnX3N0cnNwbGl0KGxpbmVzW2ld
LnV0ZjgoKS5kYXRhKCksICI9IiwgMik7CisgICAgICAgIGdfYXNzZXJ0X2NtcHVpbnQoZ19zdHJ2
X2xlbmd0aChrZXlWYWx1ZSksID09LCAyKTsKKyAgICAgICAgaWYgKCFnX3N0cmNtcDAoa2V5VmFs
dWVbMF0sICJEQlVTX1NFU1NJT05fQlVTX0FERFJFU1MiKSkgeworICAgICAgICAgICAgbV9hZGRy
ZXNzID0ga2V5VmFsdWVbMV07CisgICAgICAgICAgICBnX3NldGVudigiREJVU19TRVNTSU9OX0JV
U19BRERSRVNTIiwga2V5VmFsdWVbMV0sIFRSVUUpOworICAgICAgICB9IGVsc2UgaWYgKCFnX3N0
cmNtcDAoa2V5VmFsdWVbMF0sICJEQlVTX1NFU1NJT05fQlVTX1BJRCIpKQorICAgICAgICAgICAg
bV9waWQgPSBnX2FzY2lpX3N0cnRvbGwoa2V5VmFsdWVbMV0sIDAsIDEwKTsKKyAgICAgICAgZ19z
dHJmcmVldihrZXlWYWx1ZSk7CisgICAgfQorCisgICAgcmV0dXJuIG1fcGlkID4gMDsKK30KKwor
V2ViS2l0VGVzdEJ1czo6fldlYktpdFRlc3RCdXMoKQoreworICAgIGdfdW5zZXRlbnYoIkRCVVNf
U0VTU0lPTl9CVVNfQUREUkVTUyIpOworCisgICAgaWYgKG1fcGlkICE9IC0xKQorICAgICAgICBr
aWxsKG1fcGlkLCBTSUdURVJNKTsKK30KKworR0RCdXNDb25uZWN0aW9uKiBXZWJLaXRUZXN0QnVz
OjpnZXRPckNyZWF0ZUNvbm5lY3Rpb24oKQoreworICAgIGlmIChtX2Nvbm5lY3Rpb24pCisgICAg
ICAgIHJldHVybiBtX2Nvbm5lY3Rpb24uZ2V0KCk7CisKKyAgICBnX2Fzc2VydCghbV9hZGRyZXNz
LmlzTnVsbCgpKTsKKyAgICBtX2Nvbm5lY3Rpb24gPSBhZG9wdEdSZWYoZ19kYnVzX2Nvbm5lY3Rp
b25fbmV3X2Zvcl9hZGRyZXNzX3N5bmMobV9hZGRyZXNzLmRhdGEoKSwKKyAgICAgICAgc3RhdGlj
X2Nhc3Q8R0RCdXNDb25uZWN0aW9uRmxhZ3M+KEdfREJVU19DT05ORUNUSU9OX0ZMQUdTX0FVVEhF
TlRJQ0FUSU9OX0NMSUVOVCB8IEdfREJVU19DT05ORUNUSU9OX0ZMQUdTX01FU1NBR0VfQlVTX0NP
Tk5FQ1RJT04pLAorICAgICAgICAwLCAwLCAwKSk7CisgICAgcmV0dXJuIG1fY29ubmVjdGlvbi5n
ZXQoKTsKK30KKworc3RhdGljIHZvaWQgb25OYW1lQXBwZWFyZWQoR0RCdXNDb25uZWN0aW9uKiwg
Y29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBnX21h
aW5fbG9vcF9xdWl0KHN0YXRpY19jYXN0PEdNYWluTG9vcCo+KHVzZXJEYXRhKSk7Cit9CisKK0dE
QnVzUHJveHkqIFdlYktpdFRlc3RCdXM6OmNyZWF0ZVByb3h5KGNvbnN0IGNoYXIqIHNlcnZpY2VO
YW1lLCBjb25zdCBjaGFyKiBvYmplY3RQYXRoLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBH
TWFpbkxvb3AqIG1haW5Mb29wKQoreworICAgIHVuc2lnbmVkIHdhdGNoZXJJRCA9IGdfYnVzX3dh
dGNoX25hbWVfb25fY29ubmVjdGlvbihnZXRPckNyZWF0ZUNvbm5lY3Rpb24oKSwgc2VydmljZU5h
bWUsIEdfQlVTX05BTUVfV0FUQ0hFUl9GTEFHU19OT05FLCBvbk5hbWVBcHBlYXJlZCwgMCwgbWFp
bkxvb3AsIDApOworICAgIGdfbWFpbl9sb29wX3J1bihtYWluTG9vcCk7CisgICAgZ19idXNfdW53
YXRjaF9uYW1lKHdhdGNoZXJJRCk7CisKKyAgICBHREJ1c1Byb3h5KiBwcm94eSA9IGdfZGJ1c19w
cm94eV9uZXdfc3luYygKKyAgICAgICAgY29ubmVjdGlvbigpLAorICAgICAgICBHX0RCVVNfUFJP
WFlfRkxBR1NfRE9fTk9UX0FVVE9fU1RBUlQsCisgICAgICAgIDAsIC8vIEdEQnVzSW50ZXJmYWNl
SW5mbworICAgICAgICBzZXJ2aWNlTmFtZSwKKyAgICAgICAgb2JqZWN0UGF0aCwKKyAgICAgICAg
aW50ZXJmYWNlTmFtZSwKKyAgICAgICAgMCwgLy8gR0NhbmNlbGxhYmxlCisgICAgICAgIDApOwor
ICAgIGdfYXNzZXJ0KHByb3h5KTsKKyAgICByZXR1cm4gcHJveHk7Cit9CmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYktpdFRlc3RCdXMuaCBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViS2l0VGVzdEJ1cy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5Zjg1NmIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYktpdFRlc3RCdXMuaApAQCAtMCwwICsx
LDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2Vi
S2l0VGVzdEJ1c19oCisjZGVmaW5lIFdlYktpdFRlc3RCdXNfaAorCisjaW5jbHVkZSA8Z2lvL2dp
by5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKK2NsYXNzIFdlYktpdFRlc3RCdXMgeworcHVibGljOgorICAgIFdlYktp
dFRlc3RCdXMoKTsKKyAgICB2aXJ0dWFsIH5XZWJLaXRUZXN0QnVzKCk7CisKKyAgICBib29sIHJ1
bigpOworICAgIEdEQnVzUHJveHkqIGNyZWF0ZVByb3h5KGNvbnN0IGNoYXIqIHNlcnZpY2VOYW1l
LCBjb25zdCBjaGFyKiBvYmplY3RQYXRoLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBHTWFp
bkxvb3AqKTsKKyAgICBHREJ1c0Nvbm5lY3Rpb24qIGNvbm5lY3Rpb24oKSBjb25zdCB7IHJldHVy
biBtX2Nvbm5lY3Rpb24uZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBHREJ1c0Nvbm5lY3Rpb24q
IGdldE9yQ3JlYXRlQ29ubmVjdGlvbigpOworCisgICAgcGlkX3QgbV9waWQ7CisgICAgQ1N0cmlu
ZyBtX2FkZHJlc3M7CisgICAgR1JlZlB0cjxHREJ1c0Nvbm5lY3Rpb24+IG1fY29ubmVjdGlvbjsK
K307CisKKyNlbmRpZiAvLyBXZWJLaXRUZXN0QnVzX2gKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViS2l0VGVzdFNlcnZlci5jcHAgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYktpdFRlc3RTZXJ2ZXIuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4YjRhOWEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYktpdFRlc3RTZXJ2ZXIuY3BwCkBAIC0w
LDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKKworI2luY2x1ZGUg
IlRlc3RNYWluLmgiCisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorCitXZWJLaXRU
ZXN0U2VydmVyOjpXZWJLaXRUZXN0U2VydmVyKFNlcnZlclR5cGUgdHlwZSkKK3sKKyAgICBHT3du
UHRyPGNoYXI+IHNzbENlcnRpZmljYXRlRmlsZTsKKyAgICBHT3duUHRyPGNoYXI+IHNzbEtleUZp
bGU7CisgICAgaWYgKHR5cGUgPT0gU2VydmVySFRUUFMpIHsKKyAgICAgICAgQ1N0cmluZyByZXNv
dXJjZXNEaXIgPSBUZXN0OjpnZXRSZXNvdXJjZXNEaXIoKTsKKyAgICAgICAgc3NsQ2VydGlmaWNh
dGVGaWxlLnNldChnX2J1aWxkX2ZpbGVuYW1lKHJlc291cmNlc0Rpci5kYXRhKCksICJ0ZXN0LWNl
cnQucGVtIiwgTlVMTCkpOworICAgICAgICBzc2xLZXlGaWxlLnNldChnX2J1aWxkX2ZpbGVuYW1l
KHJlc291cmNlc0Rpci5kYXRhKCksICJ0ZXN0LWtleS5wZW0iLCBOVUxMKSk7CisgICAgfQorCisg
ICAgR1JlZlB0cjxTb3VwQWRkcmVzcz4gYWRkcmVzcyA9IGFkb3B0R1JlZihzb3VwX2FkZHJlc3Nf
bmV3KCIxMjcuMC4wLjEiLCBTT1VQX0FERFJFU1NfQU5ZX1BPUlQpKTsKKyAgICBzb3VwX2FkZHJl
c3NfcmVzb2x2ZV9zeW5jKGFkZHJlc3MuZ2V0KCksIDApOworCisgICAgbV9zb3VwU2VydmVyID0g
YWRvcHRHUmVmKHNvdXBfc2VydmVyX25ldyhTT1VQX1NFUlZFUl9JTlRFUkZBQ0UsIGFkZHJlc3Mu
Z2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT1VQ
X1NFUlZFUl9TU0xfQ0VSVF9GSUxFLCBzc2xDZXJ0aWZpY2F0ZUZpbGUuZ2V0KCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT1VQX1NFUlZFUl9TU0xfS0VZ
X0ZJTEUsIHNzbEtleUZpbGUuZ2V0KCksIE5VTEwpKTsKKyAgICBtX2Jhc2VVUkkgPSB0eXBlID09
IFNlcnZlckhUVFBTID8gc291cF91cmlfbmV3KCJodHRwczovLzEyNy4wLjAuMS8iKSA6IHNvdXBf
dXJpX25ldygiaHR0cDovLzEyNy4wLjAuMS8iKTsKKyAgICBzb3VwX3VyaV9zZXRfcG9ydChtX2Jh
c2VVUkksIHNvdXBfc2VydmVyX2dldF9wb3J0KG1fc291cFNlcnZlci5nZXQoKSkpOworfQorCitX
ZWJLaXRUZXN0U2VydmVyOjp+V2ViS2l0VGVzdFNlcnZlcigpCit7CisgICAgc291cF91cmlfZnJl
ZShtX2Jhc2VVUkkpOworfQorCit2b2lkIFdlYktpdFRlc3RTZXJ2ZXI6OnJ1bihTb3VwU2VydmVy
Q2FsbGJhY2sgc2VydmVyQ2FsbGJhY2spCit7CisgICAgc291cF9zZXJ2ZXJfcnVuX2FzeW5jKG1f
c291cFNlcnZlci5nZXQoKSk7CisgICAgc291cF9zZXJ2ZXJfYWRkX2hhbmRsZXIobV9zb3VwU2Vy
dmVyLmdldCgpLCAwLCBzZXJ2ZXJDYWxsYmFjaywgMCwgMCk7Cit9CisKK0NTdHJpbmcgV2ViS2l0
VGVzdFNlcnZlcjo6Z2V0VVJJRm9yUGF0aChjb25zdCBjaGFyKiBwYXRoKQoreworICAgIFNvdXBV
UkkqIHVyaSA9IHNvdXBfdXJpX25ld193aXRoX2Jhc2UobV9iYXNlVVJJLCBwYXRoKTsKKyAgICBH
T3duUHRyPGdjaGFyPiB1cmlTdHJpbmcoc291cF91cmlfdG9fc3RyaW5nKHVyaSwgRkFMU0UpKTsK
KyAgICBzb3VwX3VyaV9mcmVlKHVyaSk7CisgICAgcmV0dXJuIHVyaVN0cmluZy5nZXQoKTsKK30K
KwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9XZWJLaXRU
ZXN0U2VydmVyLmggYi9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYktpdFRl
c3RTZXJ2ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDYyNmY2Ci0t
LSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9XZWJL
aXRUZXN0U2VydmVyLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdFRlc3RTZXJ2ZXJfaAorI2RlZmluZSBXZWJLaXRU
ZXN0U2VydmVyX2gKKworI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgorI2luY2x1ZGUgPHdlYmtp
dDIvd2Via2l0Mi5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK2NsYXNzIFdlYktpdFRlc3RTZXJ2ZXIgeworcHVibGlj
OgorCisgICAgZW51bSBTZXJ2ZXJUeXBlIHsKKyAgICAgICAgU2VydmVySFRUUCwKKyAgICAgICAg
U2VydmVySFRUUFMKKyAgICB9OworCisgICAgV2ViS2l0VGVzdFNlcnZlcihTZXJ2ZXJUeXBlIHR5
cGUgPSBTZXJ2ZXJIVFRQKTsKKyAgICB2aXJ0dWFsIH5XZWJLaXRUZXN0U2VydmVyKCk7CisKKyAg
ICBTb3VwVVJJKiBiYXNlVVJJKCkgeyByZXR1cm4gbV9iYXNlVVJJOyB9CisKKyAgICBDU3RyaW5n
IGdldFVSSUZvclBhdGgoY29uc3QgY2hhciogcGF0aCk7CisgICAgdm9pZCBydW4oU291cFNlcnZl
ckNhbGxiYWNrKTsKKworcHJpdmF0ZToKKyAgICBHUmVmUHRyPFNvdXBTZXJ2ZXI+IG1fc291cFNl
cnZlcjsKKyAgICBTb3VwVVJJKiBtX2Jhc2VVUkk7Cit9OworCisjZW5kaWYgLy8gV2ViS2l0VGVz
dFNlcnZlcl9oCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3Rr
L1dlYlByb2Nlc3NUZXN0UnVubmVyLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1dlYktp
dDJHdGsvV2ViUHJvY2Vzc1Rlc3RSdW5uZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjRhM2NkOTYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L2d0ay9XZWJLaXQyR3RrL1dlYlByb2Nlc3NUZXN0UnVubmVyLmNwcApAQCAtMCwwICsxLDExNSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Rlc3RSdW5uZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9n
b2JqZWN0L0dPd25QdHIuaD4KKworV2ViUHJvY2Vzc1Rlc3RSdW5uZXI6OldlYlByb2Nlc3NUZXN0
UnVubmVyKCkKKyAgICA6IG1fbWFpbkxvb3AoZ19tYWluX2xvb3BfbmV3KDAsIFRSVUUpKQorICAg
ICwgbV9idXMoYWRvcHRHUmVmKGdfdGVzdF9kYnVzX25ldyhHX1RFU1RfREJVU19OT05FKSkpCit7
CisgICAgLy8gU2F2ZSB0aGUgRElTUExBWSBlbnYgdmFyIHRvIHJlc3RvcmUgaXQgYWZ0ZXIgY2Fs
bGluZyBnX3Rlc3RfZGJ1c191cCgpIHRoYXQgdW5zZXRzIGl0LgorICAgIC8vIFNlZSBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI1NjIxLgorICAgIGNvbnN0IGNoYXIq
IGRpc3BsYXkgPSBnX2dldGVudigiRElTUExBWSIpOworICAgIGdfdGVzdF9kYnVzX3VwKG1fYnVz
LmdldCgpKTsKKyAgICBnX3NldGVudigiRElTUExBWSIsIGRpc3BsYXksIEZBTFNFKTsKKyAgICBt
X2Nvbm5lY3Rpb24gPSBhZG9wdEdSZWYoZ19idXNfZ2V0X3N5bmMoR19CVVNfVFlQRV9TRVNTSU9O
LCAwLCAwKSk7Cit9CisKK1dlYlByb2Nlc3NUZXN0UnVubmVyOjp+V2ViUHJvY2Vzc1Rlc3RSdW5u
ZXIoKQoreworICAgIGdfbWFpbl9sb29wX3VucmVmKG1fbWFpbkxvb3ApOworCisgICAgLy8gZ190
ZXN0X2RidXNfZG93biB3YWl0cyB1bnRpbCB0aGUgY29ubmVjdGlvbiBpcyBmcmVlZCwgc28gcmVs
ZWFzZSBvdXIgcmVmcyBleHBsaWNpdGx5IGJlZm9yZSBjYWxsaW5nIGl0LgorICAgIG1fY29ubmVj
dGlvbiA9IDA7CisgICAgbV9wcm94eSA9IDA7CisgICAgZ190ZXN0X2RidXNfZG93bihtX2J1cy5n
ZXQoKSk7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzc1Rlc3RSdW5uZXI6OnByb3h5Q3JlYXRlZENhbGxi
YWNrKEdPYmplY3QqLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgV2ViUHJvY2Vzc1Rlc3RSdW5uZXIq
IHRlc3RSdW5uZXIpCit7CisgICAgdGVzdFJ1bm5lci0+bV9wcm94eSA9IGFkb3B0R1JlZihnX2Ri
dXNfcHJveHlfbmV3X2ZpbmlzaChyZXN1bHQsIDApKTsKKyAgICBnX21haW5fbG9vcF9xdWl0KHRl
c3RSdW5uZXItPm1fbWFpbkxvb3ApOworfQorCitHREJ1c1Byb3h5KiBXZWJQcm9jZXNzVGVzdFJ1
bm5lcjo6cHJveHkoKQoreworICAgIGlmIChtX3Byb3h5KQorICAgICAgICByZXR1cm4gbV9wcm94
eS5nZXQoKTsKKworICAgIGdfZGJ1c19wcm94eV9uZXcobV9jb25uZWN0aW9uLmdldCgpLCBHX0RC
VVNfUFJPWFlfRkxBR1NfRE9fTk9UX0FVVE9fU1RBUlQsIDAsCisgICAgICAgICJvcmcud2Via2l0
Lmd0ay5XZWJQcm9jZXNzVGVzdCIsICIvb3JnL3dlYmtpdC9ndGsvV2ViUHJvY2Vzc1Rlc3QiLCAi
b3JnLndlYmtpdC5ndGsuV2ViUHJvY2Vzc1Rlc3QiLAorICAgICAgICAwLCByZWludGVycHJldF9j
YXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KFdlYlByb2Nlc3NUZXN0UnVubmVyOjpwcm94eUNyZWF0
ZWRDYWxsYmFjayksIHRoaXMpOworICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAg
ICBnX2Fzc2VydChtX3Byb3h5LmdldCgpKTsKKworICAgIHJldHVybiBtX3Byb3h5LmdldCgpOwor
fQorCit2b2lkIFdlYlByb2Nlc3NUZXN0UnVubmVyOjpvbk5hbWVBcHBlYXJlZChHREJ1c0Nvbm5l
Y3Rpb24qLCBjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIGdwb2ludGVyIHVzZXJEYXRhKQorewor
ICAgIFdlYlByb2Nlc3NUZXN0UnVubmVyKiB0ZXN0UnVubmVyID0gc3RhdGljX2Nhc3Q8V2ViUHJv
Y2Vzc1Rlc3RSdW5uZXIqPih1c2VyRGF0YSk7CisgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0UnVu
bmVyLT5tX21haW5Mb29wKTsKK30KKwordm9pZCBXZWJQcm9jZXNzVGVzdFJ1bm5lcjo6b25OYW1l
VmFuaXNoZWQoR0RCdXNDb25uZWN0aW9uKiwgY29uc3QgY2hhciogbmFtZSwgZ3BvaW50ZXIgdXNl
ckRhdGEpCit7CisgICAgX2V4aXQoMSk7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzc1Rlc3RSdW5uZXI6
OnRlc3RGaW5pc2hlZENhbGxiYWNrKEdEQnVzUHJveHkqIHByb3h5LCBHQXN5bmNSZXN1bHQqIHJl
c3VsdCwgV2ViUHJvY2Vzc1Rlc3RSdW5uZXIqIHRlc3RSdW5uZXIpCit7CisgICAgR1JlZlB0cjxH
VmFyaWFudD4gcmV0dXJuVmFsdWUgPSBhZG9wdEdSZWYoZ19kYnVzX3Byb3h5X2NhbGxfZmluaXNo
KHByb3h5LCByZXN1bHQsIDApKTsKKyAgICBnX2Fzc2VydChyZXR1cm5WYWx1ZS5nZXQoKSk7Cisg
ICAgZ2Jvb2xlYW4gdGVzdFJlc3VsdDsKKyAgICBnX3ZhcmlhbnRfZ2V0KHJldHVyblZhbHVlLmdl
dCgpLCAiKGIpIiwgJnRlc3RSZXN1bHQpOworICAgIHRlc3RSdW5uZXItPmZpbmlzaFRlc3QodGVz
dFJlc3VsdCk7Cit9CisKK2Jvb2wgV2ViUHJvY2Vzc1Rlc3RSdW5uZXI6OnJ1blRlc3QoY29uc3Qg
Y2hhciogc3VpdGVOYW1lLCBjb25zdCBjaGFyKiB0ZXN0TmFtZSwgR1ZhcmlhbnQqIGFyZ3MpCit7
CisgICAgZ19hc3NlcnQoZ192YXJpYW50X2lzX29mX3R5cGUoYXJncywgR19WQVJJQU5UX1RZUEVf
VkFSRElDVCkpOworCisgICAgdW5zaWduZWQgd2F0Y2hlcklEID0gZ19idXNfd2F0Y2hfbmFtZV9v
bl9jb25uZWN0aW9uKG1fY29ubmVjdGlvbi5nZXQoKSwgIm9yZy53ZWJraXQuZ3RrLldlYlByb2Nl
c3NUZXN0IiwgR19CVVNfTkFNRV9XQVRDSEVSX0ZMQUdTX05PTkUsCisgICAgICAgIFdlYlByb2Nl
c3NUZXN0UnVubmVyOjpvbk5hbWVBcHBlYXJlZCwgV2ViUHJvY2Vzc1Rlc3RSdW5uZXI6Om9uTmFt
ZVZhbmlzaGVkLCB0aGlzLCAwKTsKKyAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisK
KyAgICBtX3Rlc3RSZXN1bHQgPSBmYWxzZTsKKyAgICBHT3duUHRyPGNoYXI+IHRlc3RQYXRoKGdf
c3RyZHVwX3ByaW50ZigiJXMvJXMiLCBzdWl0ZU5hbWUsIHRlc3ROYW1lKSk7CisgICAgZ19kYnVz
X3Byb3h5X2NhbGwoCisgICAgICAgIHByb3h5KCksCisgICAgICAgICJSdW5UZXN0IiwKKyAgICAg
ICAgZ192YXJpYW50X25ldygiKHNAYXtzdn0pIiwgdGVzdFBhdGguZ2V0KCksIGFyZ3MpLAorICAg
ICAgICBHX0RCVVNfQ0FMTF9GTEFHU19OT05FLAorICAgICAgICAtMSwgMCwKKyAgICAgICAgcmVp
bnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihXZWJQcm9jZXNzVGVzdFJ1bm5lcjo6
dGVzdEZpbmlzaGVkQ2FsbGJhY2spLAorICAgICAgICB0aGlzKTsKKyAgICBnX21haW5fbG9vcF9y
dW4obV9tYWluTG9vcCk7CisgICAgZ19idXNfdW53YXRjaF9uYW1lKHdhdGNoZXJJRCk7CisKKyAg
ICByZXR1cm4gbV90ZXN0UmVzdWx0OworfQorCit2b2lkIFdlYlByb2Nlc3NUZXN0UnVubmVyOjpm
aW5pc2hUZXN0KGJvb2wgcmVzdWx0KQoreworICAgIG1fdGVzdFJlc3VsdCA9IHJlc3VsdDsKKyAg
ICBnX21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3ApOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9XZWJQcm9jZXNzVGVzdFJ1bm5lci5oIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9XZWJQcm9jZXNzVGVzdFJ1bm5lci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MGZhOTYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYlByb2Nlc3NUZXN0UnVubmVy
LmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJZ2FsaWEgUy5M
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaWZuZGVmIFdlYlByb2Nlc3NUZXN0UnVubmVyX2gKKyNkZWZpbmUgV2ViUHJvY2Vzc1Rlc3RS
dW5uZXJfaAorCisjaW5jbHVkZSA8Z2lvL2dpby5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0
Mi5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKworY2xhc3MgV2ViUHJvY2Vz
c1Rlc3RSdW5uZXIgeworcHVibGljOgorICAgIFdlYlByb2Nlc3NUZXN0UnVubmVyKCk7CisgICAg
fldlYlByb2Nlc3NUZXN0UnVubmVyKCk7CisKKyAgICBib29sIHJ1blRlc3QoY29uc3QgY2hhciog
c3VpdGVOYW1lLCBjb25zdCBjaGFyKiB0ZXN0TmFtZSwgR1ZhcmlhbnQqIGFyZ3MpOworCitwcml2
YXRlOgorICAgIHN0YXRpYyB2b2lkIHByb3h5Q3JlYXRlZENhbGxiYWNrKEdPYmplY3QqLCBHQXN5
bmNSZXN1bHQqLCBXZWJQcm9jZXNzVGVzdFJ1bm5lciopOworICAgIHN0YXRpYyB2b2lkIG9uTmFt
ZUFwcGVhcmVkKEdEQnVzQ29ubmVjdGlvbiosIGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgZ3Bv
aW50ZXIpOworICAgIHN0YXRpYyB2b2lkIG9uTmFtZVZhbmlzaGVkKEdEQnVzQ29ubmVjdGlvbios
IGNvbnN0IGNoYXIqLCBncG9pbnRlcik7CisgICAgc3RhdGljIHZvaWQgdGVzdEZpbmlzaGVkQ2Fs
bGJhY2soR0RCdXNQcm94eSosIEdBc3luY1Jlc3VsdCosIFdlYlByb2Nlc3NUZXN0UnVubmVyKik7
CisKKyAgICBHREJ1c1Byb3h5KiBwcm94eSgpOworICAgIHZvaWQgZmluaXNoVGVzdChib29sIHJl
c3VsdCk7CisKKyAgICBHTWFpbkxvb3AqIG1fbWFpbkxvb3A7CisgICAgR1JlZlB0cjxHVGVzdERC
dXM+IG1fYnVzOworICAgIEdSZWZQdHI8R0RCdXNDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247Cisg
ICAgR1JlZlB0cjxHREJ1c1Byb3h5PiBtX3Byb3h5OworICAgIGJvb2wgbV90ZXN0UmVzdWx0Owor
fTsKKworI2VuZGlmIC8vIFdlYlByb2Nlc3NUZXN0UnVubmVyX2gKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViVmlld1Rlc3QuY3BwIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9XZWJWaWV3VGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uZTZjODQzNAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViVmlld1Rlc3QuY3BwCkBAIC0wLDAgKzEsNDQ0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKiBQb3J0aW9ucyBD
b3B5cmlnaHQgKGMpIDIwMTEgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgorCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0dPd25QdHJHdGsuaD4KKworV2ViVmlld1Rlc3Q6OldlYlZpZXdUZXN0KCkKKyAgICA6IG1fd2Vi
VmlldyhXRUJLSVRfV0VCX1ZJRVcoZ19vYmplY3RfcmVmX3Npbmsod2Via2l0X3dlYl92aWV3X25l
dygpKSkpCisgICAgLCBtX21haW5Mb29wKGdfbWFpbl9sb29wX25ldygwLCBUUlVFKSkKKyAgICAs
IG1fcGFyZW50V2luZG93KDApCisgICAgLCBtX2phdmFzY3JpcHRSZXN1bHQoMCkKKyAgICAsIG1f
cmVzb3VyY2VEYXRhU2l6ZSgwKQorICAgICwgbV9zdXJmYWNlKDApCit7CisgICAgYXNzZXJ0T2Jq
ZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChtX3dlYlZpZXcpKTsKK30KKwor
V2ViVmlld1Rlc3Q6On5XZWJWaWV3VGVzdCgpCit7CisgICAgaWYgKG1fcGFyZW50V2luZG93KQor
ICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV9wYXJlbnRXaW5kb3cpOworICAgIGlmIChtX2ph
dmFzY3JpcHRSZXN1bHQpCisgICAgICAgIHdlYmtpdF9qYXZhc2NyaXB0X3Jlc3VsdF91bnJlZiht
X2phdmFzY3JpcHRSZXN1bHQpOworICAgIGlmIChtX3N1cmZhY2UpCisgICAgICAgIGNhaXJvX3N1
cmZhY2VfZGVzdHJveShtX3N1cmZhY2UpOworICAgIGdfb2JqZWN0X3VucmVmKG1fd2ViVmlldyk7
CisgICAgZ19tYWluX2xvb3BfdW5yZWYobV9tYWluTG9vcCk7Cit9CisKK3ZvaWQgV2ViVmlld1Rl
c3Q6OmxvYWRVUkkoY29uc3QgY2hhciogdXJpKQoreworICAgIG1fYWN0aXZlVVJJID0gdXJpOwor
ICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaShtX3dlYlZpZXcsIHVyaSk7Cit9CisKK3ZvaWQg
V2ViVmlld1Rlc3Q6OmxvYWRIdG1sKGNvbnN0IGNoYXIqIGh0bWwsIGNvbnN0IGNoYXIqIGJhc2VV
UkkpCit7CisgICAgaWYgKCFiYXNlVVJJKQorICAgICAgICBtX2FjdGl2ZVVSSSA9ICJhYm91dDpi
bGFuayI7CisgICAgZWxzZQorICAgICAgICBtX2FjdGl2ZVVSSSA9IGJhc2VVUkk7CisgICAgd2Vi
a2l0X3dlYl92aWV3X2xvYWRfaHRtbChtX3dlYlZpZXcsIGh0bWwsIGJhc2VVUkkpOworfQorCit2
b2lkIFdlYlZpZXdUZXN0Ojpsb2FkUGxhaW5UZXh0KGNvbnN0IGNoYXIqIHBsYWluVGV4dCkKK3sK
KyAgICBtX2FjdGl2ZVVSSSA9ICJhYm91dDpibGFuayI7CisgICAgd2Via2l0X3dlYl92aWV3X2xv
YWRfcGxhaW5fdGV4dChtX3dlYlZpZXcsIHBsYWluVGV4dCk7Cit9CisKK3ZvaWQgV2ViVmlld1Rl
c3Q6OmxvYWRSZXF1ZXN0KFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgbV9hY3Rp
dmVVUkkgPSB3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KTsKKyAgICB3ZWJraXRf
d2ViX3ZpZXdfbG9hZF9yZXF1ZXN0KG1fd2ViVmlldywgcmVxdWVzdCk7Cit9CisKK3ZvaWQgV2Vi
Vmlld1Rlc3Q6OmxvYWRBbHRlcm5hdGVIVE1MKGNvbnN0IGNoYXIqIGh0bWwsIGNvbnN0IGNoYXIq
IGNvbnRlbnRVUkksIGNvbnN0IGNoYXIqIGJhc2VVUkkpCit7CisgICAgbV9hY3RpdmVVUkkgPSBj
b250ZW50VVJJOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX2FsdGVybmF0ZV9odG1sKG1fd2Vi
VmlldywgaHRtbCwgY29udGVudFVSSSwgYmFzZVVSSSk7Cit9CisKK3ZvaWQgV2ViVmlld1Rlc3Q6
OmdvQmFjaygpCit7CisgICAgaWYgKHdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayhtX3dlYlZp
ZXcpKSB7CisgICAgICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdCogbGlzdCA9IHdlYmtpdF93ZWJf
dmlld19nZXRfYmFja19mb3J3YXJkX2xpc3QobV93ZWJWaWV3KTsKKyAgICAgICAgV2ViS2l0QmFj
a0ZvcndhcmRMaXN0SXRlbSogaXRlbSA9IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbnRo
X2l0ZW0obGlzdCwgLTEpOworICAgICAgICBtX2FjdGl2ZVVSSSA9IHdlYmtpdF9iYWNrX2Zvcndh
cmRfbGlzdF9pdGVtX2dldF9vcmlnaW5hbF91cmkoaXRlbSk7CisgICAgfQorCisgICAgLy8gQ2Fs
bCBnb19iYWNrIGV2ZW4gd2hlbiBjYW5fZ29fYmFjayByZXR1cm5zIEZBTFNFIHRvIGNoZWNrIG5v
dGhpbmcgaGFwcGVucy4KKyAgICB3ZWJraXRfd2ViX3ZpZXdfZ29fYmFjayhtX3dlYlZpZXcpOwor
fQorCit2b2lkIFdlYlZpZXdUZXN0Ojpnb0ZvcndhcmQoKQoreworICAgIGlmICh3ZWJraXRfd2Vi
X3ZpZXdfY2FuX2dvX2ZvcndhcmQobV93ZWJWaWV3KSkgeworICAgICAgICBXZWJLaXRCYWNrRm9y
d2FyZExpc3QqIGxpc3QgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2JhY2tfZm9yd2FyZF9saXN0KG1f
d2ViVmlldyk7CisgICAgICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW0gPSB3ZWJr
aXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X250aF9pdGVtKGxpc3QsIDEpOworICAgICAgICBtX2Fj
dGl2ZVVSSSA9IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dldF9vcmlnaW5hbF91cmko
aXRlbSk7CisgICAgfQorCisgICAgLy8gQ2FsbCBnb19mb3J3YXJkIGV2ZW4gd2hlbiBjYW5fZ29f
Zm9yd2FyZCByZXR1cm5zIEZBTFNFIHRvIGNoZWNrIG5vdGhpbmcgaGFwcGVucy4KKyAgICB3ZWJr
aXRfd2ViX3ZpZXdfZ29fZm9yd2FyZChtX3dlYlZpZXcpOworfQorCit2b2lkIFdlYlZpZXdUZXN0
Ojpnb1RvQmFja0ZvcndhcmRMaXN0SXRlbShXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiBpdGVt
KQoreworICAgIG1fYWN0aXZlVVJJID0gd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0
X29yaWdpbmFsX3VyaShpdGVtKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfZ29fdG9fYmFja19mb3J3
YXJkX2xpc3RfaXRlbShtX3dlYlZpZXcsIGl0ZW0pOworfQorCit2b2lkIFdlYlZpZXdUZXN0Ojpx
dWl0TWFpbkxvb3AoKQoreworICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7Cit9CisK
K3ZvaWQgV2ViVmlld1Rlc3Q6OnF1aXRNYWluTG9vcEFmdGVyUHJvY2Vzc2luZ1BlbmRpbmdFdmVu
dHMoKQoreworICAgIHdoaWxlIChndGtfZXZlbnRzX3BlbmRpbmcoKSkKKyAgICAgICAgZ3RrX21h
aW5faXRlcmF0aW9uKCk7CisgICAgcXVpdE1haW5Mb29wKCk7Cit9CisKK3N0YXRpYyBnYm9vbGVh
biBxdWl0TWFpbkxvb3BJZGxlQ2FsbGJhY2soV2ViVmlld1Rlc3QqIHRlc3QpCit7CisgICAgdGVz
dC0+cXVpdE1haW5Mb29wKCk7CisgICAgcmV0dXJuIEZBTFNFOworfQorCit2b2lkIFdlYlZpZXdU
ZXN0Ojp3YWl0KGRvdWJsZSBzZWNvbmRzKQoreworICAgIGdfdGltZW91dF9hZGRfc2Vjb25kcyhz
ZWNvbmRzLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihxdWl0TWFpbkxvb3BJZGxlQ2Fs
bGJhY2spLCB0aGlzKTsKKyAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Cit9CisKK3N0
YXRpYyB2b2lkIGxvYWRDaGFuZ2VkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdExvYWRF
dmVudCBsb2FkRXZlbnQsIFdlYlZpZXdUZXN0KiB0ZXN0KQoreworICAgIGlmIChsb2FkRXZlbnQg
IT0gV0VCS0lUX0xPQURfRklOSVNIRUQpCisgICAgICAgIHJldHVybjsKKyAgICBnX3NpZ25hbF9o
YW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMod2ViVmlldywgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4obG9hZENoYW5nZWQpLCB0ZXN0KTsKKyAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFp
bkxvb3ApOworfQorCit2b2lkIFdlYlZpZXdUZXN0Ojp3YWl0VW50aWxMb2FkRmluaXNoZWQoKQor
eworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAibG9hZC1jaGFuZ2VkIiwgR19DQUxM
QkFDSyhsb2FkQ2hhbmdlZCksIHRoaXMpOworICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29w
KTsKK30KKworc3RhdGljIHZvaWQgdGl0bGVDaGFuZ2VkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcs
IEdQYXJhbVNwZWMqLCBXZWJWaWV3VGVzdCogdGVzdCkKK3sKKyAgICBpZiAoIXRlc3QtPm1fZXhw
ZWN0ZWRUaXRsZS5pc051bGwoKSAmJiB0ZXN0LT5tX2V4cGVjdGVkVGl0bGUgIT0gd2Via2l0X3dl
Yl92aWV3X2dldF90aXRsZSh3ZWJWaWV3KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ19zaWdu
YWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKHdlYlZpZXcsIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KHRpdGxlQ2hhbmdlZCksIHRlc3QpOworICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+
bV9tYWluTG9vcCk7Cit9CisKK3ZvaWQgV2ViVmlld1Rlc3Q6OndhaXRVbnRpbFRpdGxlQ2hhbmdl
ZFRvKGNvbnN0IGNoYXIqIGV4cGVjdGVkVGl0bGUpCit7CisgICAgbV9leHBlY3RlZFRpdGxlID0g
ZXhwZWN0ZWRUaXRsZTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgIm5vdGlmeTo6
dGl0bGUiLCBHX0NBTExCQUNLKHRpdGxlQ2hhbmdlZCksIHRoaXMpOworICAgIGdfbWFpbl9sb29w
X3J1bihtX21haW5Mb29wKTsKKyAgICBtX2V4cGVjdGVkVGl0bGUgPSBDU3RyaW5nKCk7Cit9CisK
K3ZvaWQgV2ViVmlld1Rlc3Q6OndhaXRVbnRpbFRpdGxlQ2hhbmdlZCgpCit7CisgICAgd2FpdFVu
dGlsVGl0bGVDaGFuZ2VkVG8oMCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBwYXJlbnRXaW5kb3dN
YXBwZWQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50KiwgV2ViVmlld1Rlc3QqIHRlc3QpCit7
CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKHdpZGdldCwgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4ocGFyZW50V2luZG93TWFwcGVkKSwgdGVzdCk7CisgICAgZ19tYWlu
X2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKworICAgIHJldHVybiBGQUxTRTsKK30KKwor
dm9pZCBXZWJWaWV3VGVzdDo6c2hvd0luV2luZG93KEd0a1dpbmRvd1R5cGUgd2luZG93VHlwZSkK
K3sKKyAgICBnX2Fzc2VydCghbV9wYXJlbnRXaW5kb3cpOworICAgIG1fcGFyZW50V2luZG93ID0g
Z3RrX3dpbmRvd19uZXcod2luZG93VHlwZSk7CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NP
TlRBSU5FUihtX3BhcmVudFdpbmRvdyksIEdUS19XSURHRVQobV93ZWJWaWV3KSk7CisgICAgZ3Rr
X3dpZGdldF9zaG93KEdUS19XSURHRVQobV93ZWJWaWV3KSk7CisgICAgZ3RrX3dpZGdldF9zaG93
KG1fcGFyZW50V2luZG93KTsKK30KKwordm9pZCBXZWJWaWV3VGVzdDo6c2hvd0luV2luZG93QW5k
V2FpdFVudGlsTWFwcGVkKEd0a1dpbmRvd1R5cGUgd2luZG93VHlwZSkKK3sKKyAgICBnX2Fzc2Vy
dCghbV9wYXJlbnRXaW5kb3cpOworICAgIG1fcGFyZW50V2luZG93ID0gZ3RrX3dpbmRvd19uZXco
d2luZG93VHlwZSk7CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihtX3BhcmVu
dFdpbmRvdyksIEdUS19XSURHRVQobV93ZWJWaWV3KSk7CisgICAgZ3RrX3dpZGdldF9zaG93KEdU
S19XSURHRVQobV93ZWJWaWV3KSk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fcGFyZW50V2lu
ZG93LCAibWFwLWV2ZW50IiwgR19DQUxMQkFDSyhwYXJlbnRXaW5kb3dNYXBwZWQpLCB0aGlzKTsK
KyAgICBndGtfd2lkZ2V0X3Nob3cobV9wYXJlbnRXaW5kb3cpOworICAgIGdfbWFpbl9sb29wX3J1
bihtX21haW5Mb29wKTsKK30KKwordm9pZCBXZWJWaWV3VGVzdDo6cmVzaXplVmlldyhpbnQgd2lk
dGgsIGludCBoZWlnaHQpCit7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uOworICAgIGd0
a193aWRnZXRfZ2V0X2FsbG9jYXRpb24oR1RLX1dJREdFVChtX3dlYlZpZXcpLCAmYWxsb2NhdGlv
bik7CisgICAgaWYgKHdpZHRoICE9IC0xKQorICAgICAgICBhbGxvY2F0aW9uLndpZHRoID0gd2lk
dGg7CisgICAgaWYgKGhlaWdodCAhPSAtMSkKKyAgICAgICAgYWxsb2NhdGlvbi5oZWlnaHQgPSBo
ZWlnaHQ7CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQobV93ZWJWaWV3
KSwgJmFsbG9jYXRpb24pOworfQorCit2b2lkIFdlYlZpZXdUZXN0OjpzZWxlY3RBbGwoKQorewor
ICAgIHdlYmtpdF93ZWJfdmlld19leGVjdXRlX2VkaXRpbmdfY29tbWFuZChtX3dlYlZpZXcsICJT
ZWxlY3RBbGwiKTsKK30KKworc3RhdGljIHZvaWQgcmVzb3VyY2VHZXREYXRhQ2FsbGJhY2soR09i
amVjdCogb2JqZWN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEpCit7
CisgICAgc2l6ZV90IGRhdGFTaXplOworICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICB1
bnNpZ25lZCBjaGFyKiBkYXRhID0gd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZGF0YV9maW5pc2go
V0VCS0lUX1dFQl9SRVNPVVJDRShvYmplY3QpLCByZXN1bHQsICZkYXRhU2l6ZSwgJmVycm9yLm91
dFB0cigpKTsKKyAgICBnX2Fzc2VydChkYXRhKTsKKworICAgIFdlYlZpZXdUZXN0KiB0ZXN0ID0g
c3RhdGljX2Nhc3Q8V2ViVmlld1Rlc3QqPih1c2VyRGF0YSk7CisgICAgdGVzdC0+bV9yZXNvdXJj
ZURhdGEuc2V0KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGRhdGEpKTsKKyAgICB0ZXN0LT5tX3Jl
c291cmNlRGF0YVNpemUgPSBkYXRhU2l6ZTsKKyAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1f
bWFpbkxvb3ApOworfQorCitjb25zdCBjaGFyKiBXZWJWaWV3VGVzdDo6bWFpblJlc291cmNlRGF0
YShzaXplX3QmIG1haW5SZXNvdXJjZURhdGFTaXplKQoreworICAgIG1fcmVzb3VyY2VEYXRhU2l6
ZSA9IDA7CisgICAgbV9yZXNvdXJjZURhdGEuY2xlYXIoKTsKKyAgICBXZWJLaXRXZWJSZXNvdXJj
ZSogcmVzb3VyY2UgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2UobV93ZWJWaWV3
KTsKKyAgICBnX2Fzc2VydChyZXNvdXJjZSk7CisKKyAgICB3ZWJraXRfd2ViX3Jlc291cmNlX2dl
dF9kYXRhKHJlc291cmNlLCAwLCByZXNvdXJjZUdldERhdGFDYWxsYmFjaywgdGhpcyk7CisgICAg
Z19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworCisgICAgbWFpblJlc291cmNlRGF0YVNpemUg
PSBtX3Jlc291cmNlRGF0YVNpemU7CisgICAgcmV0dXJuIG1fcmVzb3VyY2VEYXRhLmdldCgpOwor
fQorCit2b2lkIFdlYlZpZXdUZXN0Ojptb3VzZU1vdmVUbyhpbnQgeCwgaW50IHksIHVuc2lnbmVk
IGludCBtb3VzZU1vZGlmaWVycykKK3sKKyAgICBnX2Fzc2VydChtX3BhcmVudFdpbmRvdyk7Cisg
ICAgR3RrV2lkZ2V0KiB2aWV3V2lkZ2V0ID0gR1RLX1dJREdFVChtX3dlYlZpZXcpOworICAgIGdf
YXNzZXJ0KGd0a193aWRnZXRfZ2V0X3JlYWxpemVkKHZpZXdXaWRnZXQpKTsKKworICAgIEdPd25Q
dHI8R2RrRXZlbnQ+IGV2ZW50KGdka19ldmVudF9uZXcoR0RLX01PVElPTl9OT1RJRlkpKTsKKyAg
ICBldmVudC0+bW90aW9uLnggPSB4OworICAgIGV2ZW50LT5tb3Rpb24ueSA9IHk7CisKKyAgICBl
dmVudC0+bW90aW9uLnRpbWUgPSBHREtfQ1VSUkVOVF9USU1FOworICAgIGV2ZW50LT5tb3Rpb24u
d2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KHZpZXdXaWRnZXQpOworICAgIGdfb2JqZWN0
X3JlZihldmVudC0+bW90aW9uLndpbmRvdyk7CisgICAgZXZlbnQtPm1vdGlvbi5kZXZpY2UgPSBn
ZGtfZGV2aWNlX21hbmFnZXJfZ2V0X2NsaWVudF9wb2ludGVyKGdka19kaXNwbGF5X2dldF9kZXZp
Y2VfbWFuYWdlcihndGtfd2lkZ2V0X2dldF9kaXNwbGF5KHZpZXdXaWRnZXQpKSk7CisgICAgZXZl
bnQtPm1vdGlvbi5zdGF0ZSA9IG1vdXNlTW9kaWZpZXJzOworICAgIGV2ZW50LT5tb3Rpb24uYXhl
cyA9IDA7CisKKyAgICBpbnQgeFJvb3QsIHlSb290OworICAgIGdka193aW5kb3dfZ2V0X3Jvb3Rf
Y29vcmRzKGd0a193aWRnZXRfZ2V0X3dpbmRvdyh2aWV3V2lkZ2V0KSwgeCwgeSwgJnhSb290LCAm
eVJvb3QpOworICAgIGV2ZW50LT5tb3Rpb24ueF9yb290ID0geFJvb3Q7CisgICAgZXZlbnQtPm1v
dGlvbi55X3Jvb3QgPSB5Um9vdDsKKyAgICBndGtfbWFpbl9kb19ldmVudChldmVudC5nZXQoKSk7
Cit9CisKK3ZvaWQgV2ViVmlld1Rlc3Q6OmNsaWNrTW91c2VCdXR0b24oaW50IHgsIGludCB5LCB1
bnNpZ25lZCBpbnQgYnV0dG9uLCB1bnNpZ25lZCBpbnQgbW91c2VNb2RpZmllcnMpCit7CisgICAg
ZG9Nb3VzZUJ1dHRvbkV2ZW50KEdES19CVVRUT05fUFJFU1MsIHgsIHksIGJ1dHRvbiwgbW91c2VN
b2RpZmllcnMpOworICAgIGRvTW91c2VCdXR0b25FdmVudChHREtfQlVUVE9OX1JFTEVBU0UsIHgs
IHksIGJ1dHRvbiwgbW91c2VNb2RpZmllcnMpOworfQorCit2b2lkIFdlYlZpZXdUZXN0OjprZXlT
dHJva2UodW5zaWduZWQgaW50IGtleVZhbCwgdW5zaWduZWQgaW50IGtleU1vZGlmaWVycykKK3sK
KyAgICBnX2Fzc2VydChtX3BhcmVudFdpbmRvdyk7CisgICAgR3RrV2lkZ2V0KiB2aWV3V2lkZ2V0
ID0gR1RLX1dJREdFVChtX3dlYlZpZXcpOworICAgIGdfYXNzZXJ0KGd0a193aWRnZXRfZ2V0X3Jl
YWxpemVkKHZpZXdXaWRnZXQpKTsKKworICAgIEdPd25QdHI8R2RrRXZlbnQ+IGV2ZW50KGdka19l
dmVudF9uZXcoR0RLX0tFWV9QUkVTUykpOworICAgIGV2ZW50LT5rZXkua2V5dmFsID0ga2V5VmFs
OworCisgICAgZXZlbnQtPmtleS50aW1lID0gR0RLX0NVUlJFTlRfVElNRTsKKyAgICBldmVudC0+
a2V5LndpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyh2aWV3V2lkZ2V0KTsKKyAgICBnX29i
amVjdF9yZWYoZXZlbnQtPmtleS53aW5kb3cpOworICAgIGdka19ldmVudF9zZXRfZGV2aWNlKGV2
ZW50LmdldCgpLCBnZGtfZGV2aWNlX21hbmFnZXJfZ2V0X2NsaWVudF9wb2ludGVyKGdka19kaXNw
bGF5X2dldF9kZXZpY2VfbWFuYWdlcihndGtfd2lkZ2V0X2dldF9kaXNwbGF5KHZpZXdXaWRnZXQp
KSkpOworICAgIGV2ZW50LT5rZXkuc3RhdGUgPSBrZXlNb2RpZmllcnM7CisKKyAgICAvLyBXaGVu
IHN5bnRoZXNpemluZyBhbiBldmVudCwgYW4gaW52YWxpZCBoYXJkd2FyZV9rZXljb2RlIHZhbHVl
IGNhbiBjYXVzZSBpdCB0byBiZSBiYWRseSBwcm9jZXNzZWQgYnkgR1RLKy4KKyAgICBHT3duUHRy
PEdka0tleW1hcEtleT4ga2V5czsKKyAgICBpbnQga2V5c0NvdW50OworICAgIGlmIChnZGtfa2V5
bWFwX2dldF9lbnRyaWVzX2Zvcl9rZXl2YWwoZ2RrX2tleW1hcF9nZXRfZGVmYXVsdCgpLCBrZXlW
YWwsICZrZXlzLm91dFB0cigpLCAma2V5c0NvdW50KSkKKyAgICAgICAgZXZlbnQtPmtleS5oYXJk
d2FyZV9rZXljb2RlID0ga2V5cy5nZXQoKVswXS5rZXljb2RlOworCisgICAgZ3RrX21haW5fZG9f
ZXZlbnQoZXZlbnQuZ2V0KCkpOworICAgIGV2ZW50LT5rZXkudHlwZSA9IEdES19LRVlfUkVMRUFT
RTsKKyAgICBndGtfbWFpbl9kb19ldmVudChldmVudC5nZXQoKSk7Cit9CisKK3ZvaWQgV2ViVmll
d1Rlc3Q6OmRvTW91c2VCdXR0b25FdmVudChHZGtFdmVudFR5cGUgZXZlbnRUeXBlLCBpbnQgeCwg
aW50IHksIHVuc2lnbmVkIGludCBidXR0b24sIHVuc2lnbmVkIGludCBtb3VzZU1vZGlmaWVycykK
K3sKKyAgICBnX2Fzc2VydChtX3BhcmVudFdpbmRvdyk7CisgICAgR3RrV2lkZ2V0KiB2aWV3V2lk
Z2V0ID0gR1RLX1dJREdFVChtX3dlYlZpZXcpOworICAgIGdfYXNzZXJ0KGd0a193aWRnZXRfZ2V0
X3JlYWxpemVkKHZpZXdXaWRnZXQpKTsKKworICAgIEdPd25QdHI8R2RrRXZlbnQ+IGV2ZW50KGdk
a19ldmVudF9uZXcoZXZlbnRUeXBlKSk7CisgICAgZXZlbnQtPmJ1dHRvbi53aW5kb3cgPSBndGtf
d2lkZ2V0X2dldF93aW5kb3codmlld1dpZGdldCk7CisgICAgZ19vYmplY3RfcmVmKGV2ZW50LT5i
dXR0b24ud2luZG93KTsKKworICAgIGV2ZW50LT5idXR0b24udGltZSA9IEdES19DVVJSRU5UX1RJ
TUU7CisgICAgZXZlbnQtPmJ1dHRvbi54ID0geDsKKyAgICBldmVudC0+YnV0dG9uLnkgPSB5Owor
ICAgIGV2ZW50LT5idXR0b24uYXhlcyA9IDA7CisgICAgZXZlbnQtPmJ1dHRvbi5zdGF0ZSA9IG1v
dXNlTW9kaWZpZXJzOworICAgIGV2ZW50LT5idXR0b24uYnV0dG9uID0gYnV0dG9uOworCisgICAg
ZXZlbnQtPmJ1dHRvbi5kZXZpY2UgPSBnZGtfZGV2aWNlX21hbmFnZXJfZ2V0X2NsaWVudF9wb2lu
dGVyKGdka19kaXNwbGF5X2dldF9kZXZpY2VfbWFuYWdlcihndGtfd2lkZ2V0X2dldF9kaXNwbGF5
KHZpZXdXaWRnZXQpKSk7CisKKyAgICBpbnQgeFJvb3QsIHlSb290OworICAgIGdka193aW5kb3df
Z2V0X3Jvb3RfY29vcmRzKGd0a193aWRnZXRfZ2V0X3dpbmRvdyh2aWV3V2lkZ2V0KSwgeCwgeSwg
JnhSb290LCAmeVJvb3QpOworICAgIGV2ZW50LT5idXR0b24ueF9yb290ID0geFJvb3Q7CisgICAg
ZXZlbnQtPmJ1dHRvbi55X3Jvb3QgPSB5Um9vdDsKKyAgICBndGtfbWFpbl9kb19ldmVudChldmVu
dC5nZXQoKSk7Cit9CisKK3N0YXRpYyB2b2lkIHJ1bkphdmFTY3JpcHRSZWFkeUNhbGxiYWNrKEdP
YmplY3QqLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgV2ViVmlld1Rlc3QqIHRlc3QpCit7CisgICAg
dGVzdC0+bV9qYXZhc2NyaXB0UmVzdWx0ID0gd2Via2l0X3dlYl92aWV3X3J1bl9qYXZhc2NyaXB0
X2ZpbmlzaCh0ZXN0LT5tX3dlYlZpZXcsIHJlc3VsdCwgdGVzdC0+bV9qYXZhc2NyaXB0RXJyb3Ip
OworICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7Cit9CisKK3N0YXRpYyB2
b2lkIHJ1bkphdmFTY3JpcHRGcm9tR1Jlc291cmNlUmVhZHlDYWxsYmFjayhHT2JqZWN0KiwgR0Fz
eW5jUmVzdWx0KiByZXN1bHQsIFdlYlZpZXdUZXN0KiB0ZXN0KQoreworICAgIHRlc3QtPm1famF2
YXNjcmlwdFJlc3VsdCA9IHdlYmtpdF93ZWJfdmlld19ydW5famF2YXNjcmlwdF9mcm9tX2dyZXNv
dXJjZV9maW5pc2godGVzdC0+bV93ZWJWaWV3LCByZXN1bHQsIHRlc3QtPm1famF2YXNjcmlwdEVy
cm9yKTsKKyAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworfQorCitXZWJL
aXRKYXZhc2NyaXB0UmVzdWx0KiBXZWJWaWV3VGVzdDo6cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRp
bEZpbmlzaGVkKGNvbnN0IGNoYXIqIGphdmFzY3JpcHQsIEdFcnJvcioqIGVycm9yKQoreworICAg
IGlmIChtX2phdmFzY3JpcHRSZXN1bHQpCisgICAgICAgIHdlYmtpdF9qYXZhc2NyaXB0X3Jlc3Vs
dF91bnJlZihtX2phdmFzY3JpcHRSZXN1bHQpOworICAgIG1famF2YXNjcmlwdFJlc3VsdCA9IDA7
CisgICAgbV9qYXZhc2NyaXB0RXJyb3IgPSBlcnJvcjsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfcnVu
X2phdmFzY3JpcHQobV93ZWJWaWV3LCBqYXZhc2NyaXB0LCAwLCByZWludGVycHJldF9jYXN0PEdB
c3luY1JlYWR5Q2FsbGJhY2s+KHJ1bkphdmFTY3JpcHRSZWFkeUNhbGxiYWNrKSwgdGhpcyk7Cisg
ICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworCisgICAgcmV0dXJuIG1famF2YXNjcmlw
dFJlc3VsdDsKK30KKworV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCogV2ViVmlld1Rlc3Q6OnJ1bkph
dmFTY3JpcHRGcm9tR1Jlc291cmNlQW5kV2FpdFVudGlsRmluaXNoZWQoY29uc3QgY2hhciogcmVz
b3VyY2UsIEdFcnJvcioqIGVycm9yKQoreworICAgIGlmIChtX2phdmFzY3JpcHRSZXN1bHQpCisg
ICAgICAgIHdlYmtpdF9qYXZhc2NyaXB0X3Jlc3VsdF91bnJlZihtX2phdmFzY3JpcHRSZXN1bHQp
OworICAgIG1famF2YXNjcmlwdFJlc3VsdCA9IDA7CisgICAgbV9qYXZhc2NyaXB0RXJyb3IgPSBl
cnJvcjsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfcnVuX2phdmFzY3JpcHRfZnJvbV9ncmVzb3VyY2Uo
bV93ZWJWaWV3LCByZXNvdXJjZSwgMCwgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxi
YWNrPihydW5KYXZhU2NyaXB0RnJvbUdSZXNvdXJjZVJlYWR5Q2FsbGJhY2spLCB0aGlzKTsKKyAg
ICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisKKyAgICByZXR1cm4gbV9qYXZhc2NyaXB0
UmVzdWx0OworfQorCitzdGF0aWMgY2hhcioganNWYWx1ZVRvQ1N0cmluZyhKU0dsb2JhbENvbnRl
eHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKK3sKKyAgICBnX2Fzc2VydCh2YWx1ZSk7
CisgICAgZ19hc3NlcnQoSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIHZhbHVlKSk7CisKKyAgICBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gc3RyaW5nVmFsdWUoQWRvcHQsIEpTVmFsdWVUb1N0cmlu
Z0NvcHkoY29udGV4dCwgdmFsdWUsIDApKTsKKyAgICBnX2Fzc2VydChzdHJpbmdWYWx1ZSk7CisK
KyAgICBzaXplX3QgY1N0cmluZ0xlbmd0aCA9IEpTU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5n
U2l6ZShzdHJpbmdWYWx1ZS5nZXQoKSk7CisgICAgY2hhciogY1N0cmluZyA9IHN0YXRpY19jYXN0
PGNoYXIqPihnX21hbGxvYyhjU3RyaW5nTGVuZ3RoKSk7CisgICAgSlNTdHJpbmdHZXRVVEY4Q1N0
cmluZyhzdHJpbmdWYWx1ZS5nZXQoKSwgY1N0cmluZywgY1N0cmluZ0xlbmd0aCk7CisgICAgcmV0
dXJuIGNTdHJpbmc7Cit9CisKK2NoYXIqIFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9D
U3RyaW5nKFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQpCit7CisgICAg
SlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQgPSB3ZWJraXRfamF2YXNjcmlwdF9yZXN1bHRfZ2V0
X2dsb2JhbF9jb250ZXh0KGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KGNvbnRleHQp
OworICAgIHJldHVybiBqc1ZhbHVlVG9DU3RyaW5nKGNvbnRleHQsIHdlYmtpdF9qYXZhc2NyaXB0
X3Jlc3VsdF9nZXRfdmFsdWUoamF2YXNjcmlwdFJlc3VsdCkpOworfQorCitkb3VibGUgV2ViVmll
d1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb051bWJlcihXZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBq
YXZhc2NyaXB0UmVzdWx0KQoreworICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0ID0gd2Vi
a2l0X2phdmFzY3JpcHRfcmVzdWx0X2dldF9nbG9iYWxfY29udGV4dChqYXZhc2NyaXB0UmVzdWx0
KTsKKyAgICBnX2Fzc2VydChjb250ZXh0KTsKKyAgICBKU1ZhbHVlUmVmIHZhbHVlID0gd2Via2l0
X2phdmFzY3JpcHRfcmVzdWx0X2dldF92YWx1ZShqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fz
c2VydCh2YWx1ZSk7CisgICAgZ19hc3NlcnQoSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIHZhbHVl
KSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIHZhbHVlLCAwKTsKK30K
KworYm9vbCBXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQm9vbGVhbihXZWJLaXRKYXZh
c2NyaXB0UmVzdWx0KiBqYXZhc2NyaXB0UmVzdWx0KQoreworICAgIEpTR2xvYmFsQ29udGV4dFJl
ZiBjb250ZXh0ID0gd2Via2l0X2phdmFzY3JpcHRfcmVzdWx0X2dldF9nbG9iYWxfY29udGV4dChq
YXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydChjb250ZXh0KTsKKyAgICBKU1ZhbHVlUmVm
IHZhbHVlID0gd2Via2l0X2phdmFzY3JpcHRfcmVzdWx0X2dldF92YWx1ZShqYXZhc2NyaXB0UmVz
dWx0KTsKKyAgICBnX2Fzc2VydCh2YWx1ZSk7CisgICAgZ19hc3NlcnQoSlNWYWx1ZUlzQm9vbGVh
bihjb250ZXh0LCB2YWx1ZSkpOworCisgICAgcmV0dXJuIEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4
dCwgdmFsdWUpOworfQorCitib29sIFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0SXNOdWxs
KFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQpCit7CisgICAgSlNHbG9i
YWxDb250ZXh0UmVmIGNvbnRleHQgPSB3ZWJraXRfamF2YXNjcmlwdF9yZXN1bHRfZ2V0X2dsb2Jh
bF9jb250ZXh0KGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KGNvbnRleHQpOworICAg
IEpTVmFsdWVSZWYgdmFsdWUgPSB3ZWJraXRfamF2YXNjcmlwdF9yZXN1bHRfZ2V0X3ZhbHVlKGph
dmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KHZhbHVlKTsKKworICAgIHJldHVybiBKU1Zh
bHVlSXNOdWxsKGNvbnRleHQsIHZhbHVlKTsKK30KKworYm9vbCBXZWJWaWV3VGVzdDo6amF2YXNj
cmlwdFJlc3VsdElzVW5kZWZpbmVkKFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFzY3JpcHRS
ZXN1bHQpCit7CisgICAgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQgPSB3ZWJraXRfamF2YXNj
cmlwdF9yZXN1bHRfZ2V0X2dsb2JhbF9jb250ZXh0KGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdf
YXNzZXJ0KGNvbnRleHQpOworICAgIEpTVmFsdWVSZWYgdmFsdWUgPSB3ZWJraXRfamF2YXNjcmlw
dF9yZXN1bHRfZ2V0X3ZhbHVlKGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KHZhbHVl
KTsKKworICAgIHJldHVybiBKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwgdmFsdWUpOworfQor
CitzdGF0aWMgdm9pZCBvblNuYXBzaG90UmVhZHkoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIEdB
c3luY1Jlc3VsdCogcmVzLCBXZWJWaWV3VGVzdCogdGVzdCkKK3sKKyAgICBHT3duUHRyPEdFcnJv
cj4gZXJyb3I7CisgICAgdGVzdC0+bV9zdXJmYWNlID0gd2Via2l0X3dlYl92aWV3X2dldF9zbmFw
c2hvdF9maW5pc2god2ViX3ZpZXcsIHJlcywgJmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fzc2Vy
dCghdGVzdC0+bV9zdXJmYWNlIHx8ICFlcnJvci5nZXQoKSk7CisgICAgaWYgKGVycm9yKQorICAg
ICAgICBnX2Fzc2VydF9lcnJvcihlcnJvci5nZXQoKSwgV0VCS0lUX1NOQVBTSE9UX0VSUk9SLCBX
RUJLSVRfU05BUFNIT1RfRVJST1JfRkFJTEVEX1RPX0NSRUFURSk7CisgICAgdGVzdC0+cXVpdE1h
aW5Mb29wKCk7Cit9CisKK2NhaXJvX3N1cmZhY2VfdCogV2ViVmlld1Rlc3Q6OmdldFNuYXBzaG90
QW5kV2FpdFVudGlsUmVhZHkoV2ViS2l0U25hcHNob3RSZWdpb24gcmVnaW9uLCBXZWJLaXRTbmFw
c2hvdE9wdGlvbnMgb3B0aW9ucykKK3sKKyAgICBpZiAobV9zdXJmYWNlKQorICAgICAgICBjYWly
b19zdXJmYWNlX2Rlc3Ryb3kobV9zdXJmYWNlKTsKKyAgICBtX3N1cmZhY2UgPSAwOworICAgIHdl
YmtpdF93ZWJfdmlld19nZXRfc25hcHNob3QobV93ZWJWaWV3LCByZWdpb24sIG9wdGlvbnMsIDAs
IHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4ob25TbmFwc2hvdFJlYWR5KSwg
dGhpcyk7CisgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgIHJldHVybiBtX3N1
cmZhY2U7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3Rr
L1dlYlZpZXdUZXN0LmggYi9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYlZp
ZXdUZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ2MGUyMgotLS0g
L2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViVmll
d1Rlc3QuaApAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxp
YSBTLkwuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTEgTW90b3JvbGEgTW9iaWxpdHks
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViVmlld1Rlc3RfaAorI2RlZmlu
ZSBXZWJWaWV3VGVzdF9oCisKKyNpbmNsdWRlICJUZXN0TWFpbi5oIgorI2luY2x1ZGUgPHdlYmtp
dDIvd2Via2l0Mi5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworY2xhc3MgV2Vi
Vmlld1Rlc3Q6IHB1YmxpYyBUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhU
VVJFKFdlYlZpZXdUZXN0KTsKKyAgICBXZWJWaWV3VGVzdCgpOworICAgIHZpcnR1YWwgfldlYlZp
ZXdUZXN0KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFVSSShjb25zdCBjaGFyKiB1cmkpOwor
ICAgIHZpcnR1YWwgdm9pZCBsb2FkSHRtbChjb25zdCBjaGFyKiBodG1sLCBjb25zdCBjaGFyKiBi
YXNlVVJJKTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFBsYWluVGV4dChjb25zdCBjaGFyKiBwbGFp
blRleHQpOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVxdWVzdChXZWJLaXRVUklSZXF1ZXN0Kik7
CisgICAgdm9pZCBsb2FkQWx0ZXJuYXRlSFRNTChjb25zdCBjaGFyKiBodG1sLCBjb25zdCBjaGFy
KiBjb250ZW50VVJJLCBjb25zdCBjaGFyKiBiYXNlVVJJKTsKKyAgICB2b2lkIGdvQmFjaygpOwor
ICAgIHZvaWQgZ29Gb3J3YXJkKCk7CisgICAgdm9pZCBnb1RvQmFja0ZvcndhcmRMaXN0SXRlbShX
ZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKik7CisKKyAgICB2b2lkIHF1aXRNYWluTG9vcCgpOwor
ICAgIHZvaWQgcXVpdE1haW5Mb29wQWZ0ZXJQcm9jZXNzaW5nUGVuZGluZ0V2ZW50cygpOworICAg
IHZvaWQgd2FpdChkb3VibGUgc2Vjb25kcyk7CisgICAgdm9pZCB3YWl0VW50aWxMb2FkRmluaXNo
ZWQoKTsKKyAgICB2b2lkIHdhaXRVbnRpbFRpdGxlQ2hhbmdlZFRvKGNvbnN0IGNoYXIqIGV4cGVj
dGVkVGl0bGUpOworICAgIHZvaWQgd2FpdFVudGlsVGl0bGVDaGFuZ2VkKCk7CisgICAgdm9pZCBz
aG93SW5XaW5kb3coR3RrV2luZG93VHlwZSA9IEdUS19XSU5ET1dfUE9QVVApOworICAgIHZvaWQg
c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKEd0a1dpbmRvd1R5cGUgPSBHVEtfV0lORE9X
X1BPUFVQKTsKKyAgICB2b2lkIHJlc2l6ZVZpZXcoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKyAg
ICB2b2lkIHNlbGVjdEFsbCgpOworICAgIGNvbnN0IGNoYXIqIG1haW5SZXNvdXJjZURhdGEoc2l6
ZV90JiBtYWluUmVzb3VyY2VEYXRhU2l6ZSk7CisKKyAgICB2b2lkIG1vdXNlTW92ZVRvKGludCB4
LCBpbnQgeSwgdW5zaWduZWQgaW50IG1vdXNlTW9kaWZpZXJzID0gMCk7CisgICAgdm9pZCBjbGlj
a01vdXNlQnV0dG9uKGludCB4LCBpbnQgeSwgdW5zaWduZWQgaW50IGJ1dHRvbiA9IDEsIHVuc2ln
bmVkIGludCBtb3VzZU1vZGlmaWVycyA9IDApOworICAgIHZvaWQga2V5U3Ryb2tlKHVuc2lnbmVk
IGludCBrZXlWYWwsIHVuc2lnbmVkIGludCBrZXlNb2RpZmllcnMgPSAwKTsKKworICAgIFdlYktp
dEphdmFzY3JpcHRSZXN1bHQqIHJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZChjb25z
dCBjaGFyKiBqYXZhc2NyaXB0LCBHRXJyb3IqKik7CisgICAgV2ViS2l0SmF2YXNjcmlwdFJlc3Vs
dCogcnVuSmF2YVNjcmlwdEZyb21HUmVzb3VyY2VBbmRXYWl0VW50aWxGaW5pc2hlZChjb25zdCBj
aGFyKiByZXNvdXJjZSwgR0Vycm9yKiopOworCisgICAgLy8gSmF2YXNjcmlwdCByZXN1bHQgaGVs
cGVycy4KKyAgICBzdGF0aWMgY2hhciogamF2YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhXZWJLaXRK
YXZhc2NyaXB0UmVzdWx0Kik7CisgICAgc3RhdGljIGRvdWJsZSBqYXZhc2NyaXB0UmVzdWx0VG9O
dW1iZXIoV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCopOworICAgIHN0YXRpYyBib29sIGphdmFzY3Jp
cHRSZXN1bHRUb0Jvb2xlYW4oV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCopOworICAgIHN0YXRpYyBi
b29sIGphdmFzY3JpcHRSZXN1bHRJc051bGwoV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCopOworICAg
IHN0YXRpYyBib29sIGphdmFzY3JpcHRSZXN1bHRJc1VuZGVmaW5lZChXZWJLaXRKYXZhc2NyaXB0
UmVzdWx0Kik7CisKKyAgICBjYWlyb19zdXJmYWNlX3QqIGdldFNuYXBzaG90QW5kV2FpdFVudGls
UmVhZHkoV2ViS2l0U25hcHNob3RSZWdpb24sIFdlYktpdFNuYXBzaG90T3B0aW9ucyk7CisKKyAg
ICBXZWJLaXRXZWJWaWV3KiBtX3dlYlZpZXc7CisgICAgR01haW5Mb29wKiBtX21haW5Mb29wOwor
ICAgIENTdHJpbmcgbV9hY3RpdmVVUkk7CisgICAgR3RrV2lkZ2V0KiBtX3BhcmVudFdpbmRvdzsK
KyAgICBDU3RyaW5nIG1fZXhwZWN0ZWRUaXRsZTsKKyAgICBXZWJLaXRKYXZhc2NyaXB0UmVzdWx0
KiBtX2phdmFzY3JpcHRSZXN1bHQ7CisgICAgR0Vycm9yKiogbV9qYXZhc2NyaXB0RXJyb3I7Cisg
ICAgR093blB0cjxjaGFyPiBtX3Jlc291cmNlRGF0YTsKKyAgICBzaXplX3QgbV9yZXNvdXJjZURh
dGFTaXplOworICAgIGNhaXJvX3N1cmZhY2VfdCogbV9zdXJmYWNlOworCitwcml2YXRlOgorICAg
IHZvaWQgZG9Nb3VzZUJ1dHRvbkV2ZW50KEdka0V2ZW50VHlwZSwgaW50LCBpbnQsIHVuc2lnbmVk
IGludCwgdW5zaWduZWQgaW50KTsKK307CisKKyNlbmRpZiAvLyBXZWJWaWV3VGVzdF9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220314</attachid>
            <date>2014-01-03 10:01:26 -0800</date>
            <delta_ts>2014-01-04 02:00:58 -0800</delta_ts>
            <desc>Updated patch to try to fix the build without webkit1</desc>
            <filename>wk-test-webkit-api.diff</filename>
            <type>text/plain</type>
            <size>1832422</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAzZGMwYjliLi5kNDFkZDc2
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAK
KzIwMTQtMDEtMDMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgor
CisgICAgICAgIFtHVEtdIE1vdmUgYWxsIEdUSy9HT2JqZWN0IHVuaXQgdGVzdHMgdG8gVG9vbHMv
VGVzdFdlYktpdEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTI2MzQyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBHTlVtYWtlZmlsZS5hbTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZS4KKwogMjAxNC0w
MS0wMyAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CiAKICAgICAgICAg
W0NNYWtlXSBUaGUgZm9yd2FyZGluZyBoZWFkZXJzIGdlbmVyYXRlZCBieSBXZWJLaXRNYWNyb3Mu
bTQgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoZSBoZWFkZXJzIGdlbmVyYXRlZCBieSBnZW5lcmF0
ZS1mb3J3YXJkaW5nLWhlYWRlcnMucGwKZGlmZiAtLWdpdCBhL0dOVW1ha2VmaWxlLmFtIGIvR05V
bWFrZWZpbGUuYW0KaW5kZXggYjNmMGEwNC4uNTRkYTJiMSAxMDA2NDQKLS0tIGEvR05VbWFrZWZp
bGUuYW0KKysrIGIvR05VbWFrZWZpbGUuYW0KQEAgLTU5LDcgKzU5LDYgQEAgbm9pbnN0X0hFQURF
UlMgOj0KIG5vaW5zdF9MVExJQlJBUklFUyA6PQogbGliX0xUTElCUkFSSUVTIDo9CiBJRExfQklO
RElOR1MgOj0KLVRFU1RfUFJPR1MgOj0KIFBPRklMRVMgOj0KIFBPX0xJTkdVQVMgOj0KIFVTRVJf
TElOR1VBUyA6PQpAQCAtMjE0LDggKzIxMyw2IEBAIGluY2x1ZGUgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvR05VbWFrZWZpbGUuYW0KIGluY2x1ZGUgU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9H
TlVtYWtlZmlsZS5hbQogCiBpZiBFTkFCTEVfREVWRUxPUEVSX01PREUKLWluY2x1ZGUgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KLWluY2x1ZGUg
U291cmNlL1dlYktpdC9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KIGluY2x1ZGUgU291cmNlL1Ro
aXJkUGFydHkvZ3Rlc3QvR05VbWFrZWZpbGUuYW0KIGluY2x1ZGUgVG9vbHMvR05VbWFrZWZpbGUu
YW0KIGluY2x1ZGUgVG9vbHMvVGVzdFdlYktpdEFQSS9HTlVtYWtlZmlsZS5hbQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdl
TG9nCmluZGV4IGI0OTBhNjUuLmZjOTdkNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3Rr
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
MyBAQAorMjAxNC0wMS0wMyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5j
b20+CisKKyAgICAgICAgW0dUS10gTW92ZSBhbGwgR1RLL0dPYmplY3QgdW5pdCB0ZXN0cyB0byBU
b29scy9UZXN0V2ViS2l0QVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjYzNDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIHRlc3RzL0NNYWtlTGlzdHMudHh0OiBSZW1vdmVkLgorICAgICAgICAqIHRl
c3RzL0dOVW1ha2VmaWxlLmFtOiBSZW1vdmVkLgorCiAyMDE0LTAxLTAyICBDYXJsb3MgR2FyY2lh
IENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIxNjAz
MDQpOiBbR1RLXSBEaXNhYmxlIGxpYnRvb2wgZmFzdCBpbnN0YWxsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay90ZXN0cy9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rl
c3RzL0NNYWtlTGlzdHMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTFhOTlm
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL0NNYWtlTGlzdHMudHh0Cisr
KyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotYWRkX2RlZmluaXRpb25zKC1EVEVTVF9QTFVH
SU5fRElSPSIke0NNQUtFX0xJQlJBUllfT1VUUFVUX0RJUkVDVE9SWX0iKQotaW5jbHVkZV9kaXJl
Y3RvcmllcygKLSAgICAke0NNQUtFX0JJTkFSWV9ESVJ9Ci0gICAgJHtDTUFLRV9TT1VSQ0VfRElS
fS9Tb3VyY2UKLSAgICAke0NNQUtFX1NPVVJDRV9ESVJ9L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9G
b3J3YXJkaW5nSGVhZGVycwotICAgICR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNlL1dlYktpdC9n
dGsKLSAgICAke0NNQUtFX1NPVVJDRV9ESVJ9L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0awot
ICAgICR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNlL1dlYkNvcmUvcGxhdGZvcm0KLSAgICAke0NN
QUtFX1NPVVJDRV9ESVJ9L1NvdXJjZS9XVEYKLSAgICAke0RFUklWRURfU09VUkNFU19ESVJ9Ci0g
ICAgJHtERVJJVkVEX1NPVVJDRVNfV0VCS0lUR1RLX0RJUn0KLSAgICAke0dMSUJfSU5DTFVERV9E
SVJTfQotICAgICR7R1RLM19JTkNMVURFX0RJUlN9Ci0gICAgJHtMSUJTT1VQX0lOQ0xVREVfRElS
U30KLSkKLQotbWFjcm8oQUREX1dLMV9URVNUIHRlc3RfbmFtZSkKLSAgICBhZGRfZXhlY3V0YWJs
ZSgke3Rlc3RfbmFtZX0gJHtBUkdOfSkKLSAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoJHt0ZXN0
X25hbWV9Ci0gICAgICAgIEphdmFTY3JpcHRDb3JlCi0gICAgICAgIFdlYktpdAotICAgICAgICAk
e0dMSUJfTElCUkFSSUVTfQotICAgICAgICAke0dUSzNfTElCUkFSSUVTfQotICAgICAgICAke0xJ
QlNPVVBfTElCUkFSSUVTfQotICAgICkKLSAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoJHt0ZXN0
X25hbWV9IFBST1BFUlRJRVMKLSAgICAgICAgUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZICR7Q01B
S0VfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZfS9XZWJLaXQxR09iamVjdEFQSVRlc3RzCi0gICAg
KQotZW5kbWFjcm8oKQotCi1BRERfV0sxX1RFU1QodGVzdGFwcGxpY2F0aW9uY2FjaGUgdGVzdGFw
cGxpY2F0aW9uY2FjaGUuYykKLUFERF9XSzFfVEVTVCh0ZXN0YXRrcm9sZXMgdGVzdGF0a3JvbGVz
LmMpCi1BRERfV0sxX1RFU1QodGVzdGF0ayB0ZXN0YXRrLmMpCi1BRERfV0sxX1RFU1QodGVzdGNv
bnRleHRtZW51IHRlc3Rjb250ZXh0bWVudS5jKQotQUREX1dLMV9URVNUKHRlc3Rjb3B5YW5kcGFz
dGUgdGVzdGNvcHlhbmRwYXN0ZS5jICR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2d0ay9HdGtWZXJz
aW9uaW5nLmMpCi1BRERfV0sxX1RFU1QodGVzdGRvbWRvY3VtZW50IHRlc3Rkb21kb2N1bWVudC5j
KQotQUREX1dLMV9URVNUKHRlc3Rkb21kb213aW5kb3cgdGVzdGRvbWRvbXdpbmRvdy5jKQotQURE
X1dLMV9URVNUKHRlc3Rkb21ub2RlIHRlc3Rkb21ub2RlLmMpCi1BRERfV0sxX1RFU1QodGVzdGRv
d25sb2FkIHRlc3Rkb3dubG9hZC5jKQotQUREX1dLMV9URVNUKHRlc3RmYXZpY29uZGF0YWJhc2Ug
dGVzdGZhdmljb25kYXRhYmFzZS5jIHRlc3RfdXRpbHMuYykKLUFERF9XSzFfVEVTVCh0ZXN0Z2xv
YmFscyB0ZXN0Z2xvYmFscy5jKQotQUREX1dLMV9URVNUKHRlc3RoaXR0ZXN0cmVzdWx0IHRlc3Ro
aXR0ZXN0cmVzdWx0LmMpCi1BRERfV0sxX1RFU1QodGVzdGh0dHBiYWNrZW5kIHRlc3RodHRwYmFj
a2VuZC5jKQotQUREX1dLMV9URVNUKHRlc3RrZXlldmVudHMgdGVzdGtleWV2ZW50cy5jKQotQURE
X1dLMV9URVNUKHRlc3Rsb2FkaW5nIHRlc3Rsb2FkaW5nLmMpCi1BRERfV0sxX1RFU1QodGVzdG1p
bWVoYW5kbGluZyB0ZXN0bWltZWhhbmRsaW5nLmMgdGVzdF91dGlscy5jKQotQUREX1dLMV9URVNU
KHRlc3RuZXR3b3JrcmVxdWVzdCB0ZXN0bmV0d29ya3JlcXVlc3QuYykKLUFERF9XSzFfVEVTVCh0
ZXN0bmV0d29ya3Jlc3BvbnNlIHRlc3RuZXR3b3JrcmVzcG9uc2UuYykKLUFERF9XSzFfVEVTVCh0
ZXN0d2ViYmFja2ZvcndhcmRsaXN0IHRlc3R3ZWJiYWNrZm9yd2FyZGxpc3QuYykKLUFERF9XSzFf
VEVTVCh0ZXN0d2ViZGF0YXNvdXJjZSB0ZXN0d2ViZGF0YXNvdXJjZS5jKQotQUREX1dLMV9URVNU
KHRlc3R3ZWJmcmFtZSB0ZXN0d2ViZnJhbWUuYykKLUFERF9XSzFfVEVTVCh0ZXN0d2ViaGlzdG9y
eWl0ZW0gdGVzdHdlYmhpc3RvcnlpdGVtLmMpCi1BRERfV0sxX1RFU1QodGVzdHdlYmluc3BlY3Rv
ciB0ZXN0d2ViaW5zcGVjdG9yLmMgdGVzdF91dGlscy5jKQotQUREX1dLMV9URVNUKHRlc3R3ZWJw
bHVnaW5kYXRhYmFzZSB0ZXN0d2VicGx1Z2luZGF0YWJhc2UuYykKLUFERF9XSzFfVEVTVCh0ZXN0
d2VicmVzb3VyY2UgdGVzdHdlYnJlc291cmNlLmMpCi1BRERfV0sxX1RFU1QodGVzdHdlYnNldHRp
bmdzIHRlc3R3ZWJzZXR0aW5ncy5jKQotQUREX1dLMV9URVNUKHRlc3R3ZWJ2aWV3IHRlc3R3ZWJ2
aWV3LmMgdGVzdF91dGlscy5jKQotQUREX1dLMV9URVNUKHRlc3R3aW5kb3cgdGVzdHdpbmRvdy5j
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0gYi9T
b3VyY2UvV2ViS2l0L2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggOGI4NmE3My4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0
cy9HTlVtYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDIwOCArMCwwIEBACi0jIEJ1aWxk
IHVuaXQgdGVzdHMKLXdlYmtpdF90ZXN0c19jZmxhZ3MgPSBcCi0JLWZuby1zdHJpY3QtYWxpYXNp
bmcgXAotCS1JJChzcmNkaXIpL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Gb3J3YXJkaW5nSGVhZGVy
cyBcCi0JLUkkKFdlYktpdCkgXAotCS1JJChHRU5TT1VSQ0VTKSBcCi0JLUkkKHRvcF9idWlsZGRp
cikvU291cmNlL1dlYktpdC9ndGsgXAotCS1JJCh0b3Bfc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncyBcCi0JLUkkKHRvcF9zcmNkaXIpL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmpl
Y3QgXAotCSQoZ2xvYmFsX2NwcGZsYWdzKSBcCi0JJChnbG9iYWxfY2ZsYWdzKSBcCi0JJChqYXZh
c2NyaXB0Y29yZV9jcHBmbGFncykgXAotCSQoRlJFRVRZUEVfQ0ZMQUdTKSBcCi0JJChHTElCX0NG
TEFHUykgXAotCSQoR1RLX0NGTEFHUykgXAotCSQoTElCU09VUF9DRkxBR1MpIFwKLQkkKFhSRU5E
RVJfQ0ZMQUdTKSBcCi0JJChYVF9DRkxBR1MpCi0KLXdlYmtpdF90ZXN0c19sZGFkZCA9IFwKLQls
aWJqYXZhc2NyaXB0Y29yZWd0ay1AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQC5AV0VCS0lU
R1RLX0FQSV9NSU5PUl9WRVJTSU9OQC5sYSBcCi0JbGlid2Via2l0Z3RrLUBXRUJLSVRHVEtfQVBJ
X01BSk9SX1ZFUlNJT05ALkBXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05ALmxhIFwKLQkkKEZS
RUVUWVBFX0xJQlMpIFwKLQkkKEdUS19MSUJTKSBcCi0JJChHTElCX0xJQlMpIFwKLQkkKExJQlNP
VVBfTElCUykgXAotCSQoWFJFTkRFUl9MSUJTKQotCi13ZWJraXRfdGVzdHNfbGRmbGFncyA9IFwK
LQktbm8taW5zdGFsbAotCi1pZiBFTkFCTEVfV0VCS0lUMQotbm9pbnN0X1BST0dSQU1TICs9IFwK
LQlQcm9ncmFtcy9XZWJLaXQxR09iamVjdEFQSVRlc3RzL3Rlc3RhcHBsaWNhdGlvbmNhY2hlIFwK
LQlQcm9ncmFtcy9XZWJLaXQxR09iamVjdEFQSVRlc3RzL3Rlc3Rjb250ZXh0bWVudSBcCi0JUHJv
Z3JhbXMvV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0ZG9tZG9jdW1lbnQgXAotCVByb2dyYW1z
L1dlYktpdDFHT2JqZWN0QVBJVGVzdHMvdGVzdGRvbWRvbXdpbmRvdyBcCi0JUHJvZ3JhbXMvV2Vi
S2l0MUdPYmplY3RBUElUZXN0cy90ZXN0ZG9tbm9kZSBcCi0JUHJvZ3JhbXMvV2ViS2l0MUdPYmpl
Y3RBUElUZXN0cy90ZXN0aHR0cGJhY2tlbmQgXAotCVByb2dyYW1zL1dlYktpdDFHT2JqZWN0QVBJ
VGVzdHMvdGVzdGZhdmljb25kYXRhYmFzZSBcCi0JUHJvZ3JhbXMvV2ViS2l0MUdPYmplY3RBUElU
ZXN0cy90ZXN0bG9hZGluZyBcCi0JUHJvZ3JhbXMvV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0
Z2xvYmFscyBcCi0JUHJvZ3JhbXMvV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0bWltZWhhbmRs
aW5nIFwKLQlQcm9ncmFtcy9XZWJLaXQxR09iamVjdEFQSVRlc3RzL3Rlc3RuZXR3b3JrcmVxdWVz
dCBcCi0JUHJvZ3JhbXMvV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0bmV0d29ya3Jlc3BvbnNl
IFwKLQlQcm9ncmFtcy9XZWJLaXQxR09iamVjdEFQSVRlc3RzL3Rlc3R3ZWJmcmFtZSBcCi0JUHJv
Z3JhbXMvV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0d2ViYmFja2ZvcndhcmRsaXN0IFwKLQlQ
cm9ncmFtcy9XZWJLaXQxR09iamVjdEFQSVRlc3RzL3Rlc3R3ZWJoaXN0b3J5aXRlbSBcCi0JUHJv
Z3JhbXMvV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0d2luZG93IFwKLQlQcm9ncmFtcy9XZWJL
aXQxR09iamVjdEFQSVRlc3RzL3Rlc3Rkb3dubG9hZCBcCi0JUHJvZ3JhbXMvV2ViS2l0MUdPYmpl
Y3RBUElUZXN0cy90ZXN0YXRrIFwKLQlQcm9ncmFtcy9XZWJLaXQxR09iamVjdEFQSVRlc3RzL3Rl
c3RhdGtyb2xlcyBcCi0JUHJvZ3JhbXMvV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0aGl0dGVz
dHJlc3VsdCBcCi0JUHJvZ3JhbXMvV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0d2ViaW5zcGVj
dG9yIFwKLQlQcm9ncmFtcy9XZWJLaXQxR09iamVjdEFQSVRlc3RzL3Rlc3R3ZWJzZXR0aW5ncyBc
Ci0JUHJvZ3JhbXMvV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0d2VicmVzb3VyY2UgXAotCVBy
b2dyYW1zL1dlYktpdDFHT2JqZWN0QVBJVGVzdHMvdGVzdHdlYmRhdGFzb3VyY2UgXAotCVByb2dy
YW1zL1dlYktpdDFHT2JqZWN0QVBJVGVzdHMvdGVzdHdlYnBsdWdpbmRhdGFiYXNlIFwKLQlQcm9n
cmFtcy9XZWJLaXQxR09iamVjdEFQSVRlc3RzL3Rlc3R3ZWJ2aWV3IFwKLQlQcm9ncmFtcy9XZWJL
aXQxR09iamVjdEFQSVRlc3RzL3Rlc3RrZXlldmVudHMgXAotCVByb2dyYW1zL1dlYktpdDFHT2Jq
ZWN0QVBJVGVzdHMvdGVzdGNvcHlhbmRwYXN0ZQotZW5kaWYKLQotIyBBZGQgYWRkaXRpb25hbCB0
ZXN0cyBoZXJlCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RhcHBsaWNhdGlv
bmNhY2hlX1NPVVJDRVMgPSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXBwbGljYXRpb25j
YWNoZS5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RhcHBsaWNhdGlvbmNh
Y2hlX0NGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykKLVByb2dyYW1zX1dlYktpdDFHT2Jq
ZWN0QVBJVGVzdHNfdGVzdGFwcGxpY2F0aW9uY2FjaGVfTERBREQgPSAkKHdlYmtpdF90ZXN0c19s
ZGFkZCkKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGFwcGxpY2F0aW9uY2Fj
aGVfTERGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDFH
T2JqZWN0QVBJVGVzdHNfdGVzdGNvbnRleHRtZW51X1NPVVJDRVMgPSBTb3VyY2UvV2ViS2l0L2d0
ay90ZXN0cy90ZXN0Y29udGV4dG1lbnUuYwotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0
c190ZXN0Y29udGV4dG1lbnVfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQotUHJvZ3Jh
bXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0Y29udGV4dG1lbnVfTERBREQgPSAkKHdlYmtp
dF90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGNvbnRl
eHRtZW51X0xERkxBR1MgPSAkKHdlYmtpdF90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJL
aXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rkb21kb2N1bWVudF9TT1VSQ0VTID0gU291cmNlL1dlYktp
dC9ndGsvdGVzdHMvdGVzdGRvbWRvY3VtZW50LmMKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJ
VGVzdHNfdGVzdGRvbWRvY3VtZW50X0NGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykKLVBy
b2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGRvbWRvY3VtZW50X0xEQUREID0gJCh3
ZWJraXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rk
b21kb2N1bWVudF9MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNf
V2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0ZG9tZG9td2luZG93X1NPVVJDRVMgPSBTb3VyY2Uv
V2ViS2l0L2d0ay90ZXN0cy90ZXN0ZG9tZG9td2luZG93LmMKLVByb2dyYW1zX1dlYktpdDFHT2Jq
ZWN0QVBJVGVzdHNfdGVzdGRvbWRvbXdpbmRvd19DRkxBR1MgPSAkKHdlYmtpdF90ZXN0c19jZmxh
Z3MpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rkb21kb213aW5kb3dfTERB
REQgPSAkKHdlYmtpdF90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVz
dHNfdGVzdGRvbWRvbXdpbmRvd19MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFncykKLQot
UHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0ZG9tbm9kZV9TT1VSQ0VTID0gU291
cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvbW5vZGUuYwotUHJvZ3JhbXNfV2ViS2l0MUdPYmpl
Y3RBUElUZXN0c190ZXN0ZG9tbm9kZV9DRkxBR1MgPSAkKHdlYmtpdF90ZXN0c19jZmxhZ3MpCi1Q
cm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rkb21ub2RlX0xEQUREID0gJCh3ZWJr
aXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rkb21u
b2RlX0xERkxBR1MgPSAkKHdlYmtpdF90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQx
R09iamVjdEFQSVRlc3RzX3Rlc3RodHRwYmFja2VuZF9TT1VSQ0VTID0gU291cmNlL1dlYktpdC9n
dGsvdGVzdHMvdGVzdGh0dHBiYWNrZW5kLmMKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVz
dHNfdGVzdGh0dHBiYWNrZW5kX0NGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykKLVByb2dy
YW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGh0dHBiYWNrZW5kX0xEQUREID0gJCh3ZWJr
aXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RodHRw
YmFja2VuZF9MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2Vi
S2l0MUdPYmplY3RBUElUZXN0c190ZXN0ZmF2aWNvbmRhdGFiYXNlX1NPVVJDRVMgPSBTb3VyY2Uv
V2ViS2l0L2d0ay90ZXN0cy90ZXN0ZmF2aWNvbmRhdGFiYXNlLmMgU291cmNlL1dlYktpdC9ndGsv
dGVzdHMvdGVzdF91dGlscy5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rm
YXZpY29uZGF0YWJhc2VfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQotUHJvZ3JhbXNf
V2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0ZmF2aWNvbmRhdGFiYXNlX0xEQUREID0gJCh3ZWJr
aXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RmYXZp
Y29uZGF0YWJhc2VfTERGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1z
X1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGdsb2JhbHNfU09VUkNFUyA9IFNvdXJjZS9XZWJL
aXQvZ3RrL3Rlc3RzL3Rlc3RnbG9iYWxzLmMKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVz
dHNfdGVzdGdsb2JhbHNfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQotUHJvZ3JhbXNf
V2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0Z2xvYmFsc19MREFERCA9ICQod2Via2l0X3Rlc3Rz
X2xkYWRkKQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0Z2xvYmFsc19MREZM
QUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RB
UElUZXN0c190ZXN0bG9hZGluZ19TT1VSQ0VTID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVz
dGxvYWRpbmcuYwotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0bG9hZGluZ19D
RkxBR1MgPSAkKHdlYmtpdF90ZXN0c19jZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQ
SVRlc3RzX3Rlc3Rsb2FkaW5nX0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFt
c19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rsb2FkaW5nX0xERkxBR1MgPSAkKHdlYmtpdF90
ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RtaW1l
aGFuZGxpbmdfU09VUkNFUyA9IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RtaW1laGFuZGxp
bmcuYyBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0X3V0aWxzLmMKLVByb2dyYW1zX1dlYktp
dDFHT2JqZWN0QVBJVGVzdHNfdGVzdG1pbWVoYW5kbGluZ19DRkxBR1MgPSAkKHdlYmtpdF90ZXN0
c19jZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RtaW1laGFuZGxp
bmdfTERBREQgPSAkKHdlYmtpdF90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0
QVBJVGVzdHNfdGVzdG1pbWVoYW5kbGluZ19MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFn
cykKLQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0bmV0d29ya3JlcXVlc3Rf
U09VUkNFUyA9IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RuZXR3b3JrcmVxdWVzdC5jCi1Q
cm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RuZXR3b3JrcmVxdWVzdF9DRkxBR1Mg
PSAkKHdlYmtpdF90ZXN0c19jZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3Rz
X3Rlc3RuZXR3b3JrcmVxdWVzdF9MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQotUHJvZ3Jh
bXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0bmV0d29ya3JlcXVlc3RfTERGTEFHUyA9ICQo
d2Via2l0X3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNf
dGVzdG5ldHdvcmtyZXNwb25zZV9TT1VSQ0VTID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVz
dG5ldHdvcmtyZXNwb25zZS5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Ru
ZXR3b3JrcmVzcG9uc2VfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQotUHJvZ3JhbXNf
V2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0bmV0d29ya3Jlc3BvbnNlX0xEQUREID0gJCh3ZWJr
aXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RuZXR3
b3JrcmVzcG9uc2VfTERGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1z
X1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYmZyYW1lX1NPVVJDRVMgPSBTb3VyY2UvV2Vi
S2l0L2d0ay90ZXN0cy90ZXN0d2ViZnJhbWUuYwotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElU
ZXN0c190ZXN0d2ViZnJhbWVfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQotUHJvZ3Jh
bXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0d2ViZnJhbWVfTERBREQgPSAkKHdlYmtpdF90
ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYmZyYW1l
X0xERkxBR1MgPSAkKHdlYmtpdF90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQxR09i
amVjdEFQSVRlc3RzX3Rlc3R3ZWJwbHVnaW5kYXRhYmFzZV9TT1VSQ0VTID0gU291cmNlL1dlYktp
dC9ndGsvdGVzdHMvdGVzdHdlYnBsdWdpbmRhdGFiYXNlLmMKLVByb2dyYW1zX1dlYktpdDFHT2Jq
ZWN0QVBJVGVzdHNfdGVzdHdlYnBsdWdpbmRhdGFiYXNlX0NGTEFHUyA9IC1EVEVTVF9QTFVHSU5f
RElSPVwiJHtzaGVsbCBwd2R9LyR7dG9wX2J1aWxkZGlyfS9UZXN0TmV0c2NhcGVQbHVnaW4vLmxp
YnNcIiAkKHdlYmtpdF90ZXN0c19jZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRl
c3RzX3Rlc3R3ZWJwbHVnaW5kYXRhYmFzZV9MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQot
UHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0d2VicGx1Z2luZGF0YWJhc2VfTERG
TEFHUyA9ICQod2Via2l0X3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0
QVBJVGVzdHNfdGVzdHdlYmJhY2tmb3J3YXJkbGlzdF9TT1VSQ0VTID0gU291cmNlL1dlYktpdC9n
dGsvdGVzdHMvdGVzdHdlYmJhY2tmb3J3YXJkbGlzdC5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVj
dEFQSVRlc3RzX3Rlc3R3ZWJiYWNrZm9yd2FyZGxpc3RfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNf
Y2ZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0d2ViYmFja2Zvcndh
cmRsaXN0X0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQxR09i
amVjdEFQSVRlc3RzX3Rlc3R3ZWJiYWNrZm9yd2FyZGxpc3RfTERGTEFHUyA9ICQod2Via2l0X3Rl
c3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYmhp
c3RvcnlpdGVtX1NPVVJDRVMgPSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2ViaGlzdG9y
eWl0ZW0uYwotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0d2ViaGlzdG9yeWl0
ZW1fQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0MUdPYmpl
Y3RBUElUZXN0c190ZXN0d2ViaGlzdG9yeWl0ZW1fTERBREQgPSAkKHdlYmtpdF90ZXN0c19sZGFk
ZCkKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYmhpc3RvcnlpdGVtX0xE
RkxBR1MgPSAkKHdlYmtpdF90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQxR09iamVj
dEFQSVRlc3RzX3Rlc3R3aW5kb3dfU09VUkNFUyA9IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rl
c3R3aW5kb3cuYwotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0d2luZG93X0NG
TEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJ
VGVzdHNfdGVzdHdpbmRvd19MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNf
V2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0d2luZG93X0xERkxBR1MgPSAkKHdlYmtpdF90ZXN0
c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rkb3dubG9h
ZF9TT1VSQ0VTID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvd25sb2FkLmMKLVByb2dy
YW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGRvd25sb2FkX0NGTEFHUyA9ICQod2Via2l0
X3Rlc3RzX2NmbGFncykKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGRvd25s
b2FkX0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVj
dEFQSVRlc3RzX3Rlc3Rkb3dubG9hZF9MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFncykK
LQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0YXRrX1NPVVJDRVMgPSBTb3Vy
Y2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXRrLmMKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJ
VGVzdHNfdGVzdGF0a19DRkxBR1MgPSAkKHdlYmtpdF90ZXN0c19jZmxhZ3MpCi1Qcm9ncmFtc19X
ZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RhdGtfTERBREQgPSAkKHdlYmtpdF90ZXN0c19sZGFk
ZCkKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGF0a19MREZMQUdTID0gJCh3
ZWJraXRfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190
ZXN0YXRrcm9sZXNfU09VUkNFUyA9IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhdGtyb2xl
cy5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RhdGtyb2xlc19DRkxBR1Mg
PSAkKHdlYmtpdF90ZXN0c19jZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3Rz
X3Rlc3RhdGtyb2xlc19MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfV2Vi
S2l0MUdPYmplY3RBUElUZXN0c190ZXN0YXRrcm9sZXNfTERGTEFHUyA9ICQod2Via2l0X3Rlc3Rz
X2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYmluc3Bl
Y3Rvcl9TT1VSQ0VTID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYmluc3BlY3Rvci5j
IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RfdXRpbHMuYwotUHJvZ3JhbXNfV2ViS2l0MUdP
YmplY3RBUElUZXN0c190ZXN0d2ViaW5zcGVjdG9yX0NGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2Nm
bGFncykKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYmluc3BlY3Rvcl9M
REFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElU
ZXN0c190ZXN0d2ViaW5zcGVjdG9yX0xERkxBR1MgPSAkKHdlYmtpdF90ZXN0c19sZGZsYWdzKQot
Ci1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3R3ZWJzZXR0aW5nc19TT1VSQ0VT
ID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYnNldHRpbmdzLmMKLVByb2dyYW1zX1dl
YktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYnNldHRpbmdzX0NGTEFHUyA9ICQod2Via2l0X3Rl
c3RzX2NmbGFncykKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYnNldHRp
bmdzX0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVj
dEFQSVRlc3RzX3Rlc3R3ZWJzZXR0aW5nc19MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFn
cykKLQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0d2VicmVzb3VyY2VfU09V
UkNFUyA9IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJyZXNvdXJjZS5jCi1Qcm9ncmFt
c19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3R3ZWJyZXNvdXJjZV9DRkxBR1MgPSAkKHdlYmtp
dF90ZXN0c19jZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3R3ZWJy
ZXNvdXJjZV9MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQotCi1Qcm9ncmFtc19XZWJLaXQx
R09iamVjdEFQSVRlc3RzX3Rlc3R3ZWJkYXRhc291cmNlX1NPVVJDRVMgPSBTb3VyY2UvV2ViS2l0
L2d0ay90ZXN0cy90ZXN0d2ViZGF0YXNvdXJjZS5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQ
SVRlc3RzX3Rlc3R3ZWJkYXRhc291cmNlX0NGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykK
LVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYmRhdGFzb3VyY2VfTERBREQg
PSAkKHdlYmtpdF90ZXN0c19sZGFkZCkKLQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0
c190ZXN0d2Vidmlld19TT1VSQ0VTID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYnZp
ZXcuYyBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0X3V0aWxzLmMKLVByb2dyYW1zX1dlYktp
dDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYnZpZXdfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2Zs
YWdzKQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0d2Vidmlld19MREFERCA9
ICQod2Via2l0X3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190
ZXN0d2Vidmlld19MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNf
V2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0aGl0dGVzdHJlc3VsdF9TT1VSQ0VTID0gU291cmNl
L1dlYktpdC9ndGsvdGVzdHMvdGVzdGhpdHRlc3RyZXN1bHQuYwotUHJvZ3JhbXNfV2ViS2l0MUdP
YmplY3RBUElUZXN0c190ZXN0aGl0dGVzdHJlc3VsdF9DRkxBR1MgPSAkKHdlYmtpdF90ZXN0c19j
ZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RoaXR0ZXN0cmVzdWx0
X0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQpCi0KLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0
QVBJVGVzdHNfdGVzdGtleWV2ZW50c19TT1VSQ0VTID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMv
dGVzdGtleWV2ZW50cy5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RrZXll
dmVudHNfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0MUdP
YmplY3RBUElUZXN0c190ZXN0a2V5ZXZlbnRzX0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQp
Ci1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RrZXlldmVudHNfTERGTEFHUyA9
ICQod2Via2l0X3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVz
dHNfdGVzdGNvcHlhbmRwYXN0ZV9TT1VSQ0VTID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVz
dGNvcHlhbmRwYXN0ZS5jIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVmVyc2lv
bmluZy5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rjb3B5YW5kcGFzdGVf
Q0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKSBcCi0JLUkkKHNyY2RpcikvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrIFwKLQktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZQotUHJvZ3Jh
bXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0Y29weWFuZHBhc3RlX0xEQUREID0gJCh3ZWJr
aXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rjb3B5
YW5kcGFzdGVfTERGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2xkZmxhZ3MpCi0KLUVYVFJBX0RJU1Qg
Kz0gIFwKLQkkKFdlYktpdCkvdGVzdHMvcmVzb3VyY2VzLyogXAotCSQoV2ViS2l0KS90ZXN0cy90
ZXN0X3V0aWxzLmgKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvcmVzb3Vy
Y2VzL2JsYW5rLmljbyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Jlc291cmNlcy9ibGFuay5p
Y28KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhODQ4Yjk5MTZlNTkwODQ0MTNmYzFl
N2EwOTBkZWJmNWY0OTE0ZGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmxpdGVyYWwgMTk4CnBj
bVpRelU8NSh8MFZYaUxmcXtXUjQyVSY9U09BQz5mRVhsPzM7aDU4QUQwd2UjUX1SWTFWako7Cgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3QuaHRtbCBi
L1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Jlc291cmNlcy90ZXN0Lmh0bWwKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDk4ZjdkNGYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9n
dGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3QuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBA
QAotPGh0bWw+Ci08aGVhZD48dGl0bGU+dGVzdDwvdGl0bGU+PC9oZWFkPgotPGJvZHk+dGVzdDwv
Ym9keT4KLTwvaHRtbD4+PC9oZWFkPgotPGJvZHk+dGVzdDwvYm9keT4KLTwvaHRtbD4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Jlc291cmNlcy90ZXN0Lm9nZyBiL1NvdXJj
ZS9XZWJLaXQvZ3RrL3Rlc3RzL3Jlc291cmNlcy90ZXN0Lm9nZwpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggN2YzYTNiOWM1ZDY0N2M3MmExNGQzYjQ5NmNjNjI2ZDQxMmY4YjAwZi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMApHSVQgYmluYXJ5IHBhdGNoCmxp
dGVyYWwgMApIY21WP2QwMDAwMQoKbGl0ZXJhbCAzMDEzMQp6Y21lRlpjVVYpfF9BdENwOFgqS3NB
aSs+e0xNUjNaUE4pS3dOa1M0c0g5JiRQbVB0WX1HekcqbWooUzVpZ3VubS0KelFxJjJkMm9XNFd6
Jjx4MUFTZmI4NSRqK2JZJUBDSklRNVMyTEZlQjBlKXMhNUA5JXFfLX1DK1Y/cV9HOFVEbj9GCno+
e1pUTWQhMm88WnApVHZmQj03bVI1Q2VwQXVERU49JUo8MSZUV35CcjBvazgyeVdaTDFyOFk+ZktO
bH43SkJ8Rwp6RWNBcm41X2pMMEhBSWhoe31HVE1NcF47YE5SclooJWh6UllwezZEJlYmMEVXNFdA
Y0FuRX1pZCV6JWFBQW9LQGQKelM1OG4yMWg4PDhYQmMlKkhDYCRQZkI9QlokPF5YdVZ6NnNkTUxx
cXE+SSVVXlpqZjE2VH5SbmxpUEwleHtXR0VaCnojRkdJKTBUdGJ9cX5TPyRAPnN3WSVDZUc3VHxp
UVZ8MXFrR0NVUCNvd0VyaVV4VUozSSVfJj5RVCVFRHp2MW9YcQp6ZkYqRnFDcSpxSjNiaks0MXhe
bXdYQVYwWUpEaURnWXRpTjR5b1Jae1ZPfiFnNEBMdyZaRH1ZOGRgOW1jPWFfa1AKelVrP2ZNb1F7
YiphUklZd0BBazJQWng4PktuNyZeSjZ9fWVeI3dNUD8hN2RFMWM1U1pDZ29wYURFR2tnSiVMSHI3
CnpOV3E8P0UxbVhOQyFFJih6PSpXK28kJSZHaV45Y2wqcypFLSZWKEJ+Y2loO3lGU2FePSF8OHBv
cn1IPD09NVA4cgp6VXJzNmJFQj48WW8xWWlyYD13Sk1wbVBrVWRnIVhCKzNGdHo9I2hCXlozcXkq
ZkQpPXtJbkF9YUEtRmopYDl4QSgKenVrdl9yK0xiUUdsYGl+eTVDRmotM3FoQXUreC04RWlMcTQp
fDl4YUJodXJgUiNedDM5YCU0KjR5ZU93am5HQlFuCno3Izs+Tk88N1RsIUF6Z0Ura0d4PVVqQGd0
Uz1eQ3x1Jlp5djdYNmI1M3VGZz88IUx7ZFZMdCs2QmckaGsofDcmJAp6KWk8Xz4tKylvRWZSWD1t
JGJRYytASW9BcEJ2dko+dS0+S2VfaD9iVSEmMig4TEhHfGQhMnMmfE43VU4hKzg/aDUKelNreWsm
d1VYKjRgd0ImTSVnKGVgKlMpNzs+WF4rI24za0BXWVgpXlM8Rih0emc3TExZQTk5fnIpfHNAb1VX
ZTshCnp6Q0NPKVdGdj4rbENJYTl3QkQ0IWVQaFJLcFJ9QUkhTVZiVXhAQTNRTD82Y2NpIUU5PUEw
RiFxeERXUnp5ajdRUwp6IyZpPiRgISlYWGNVTWdwPmkmfmBTVE5uPnZ5YERESW47ZTY3ek4zcCsy
UD5RdFM+QU0+TzY7Qzg8IVRCQEl6WDIKemc7NiVrbnpDfTx1YmNgJTlecEx+fDEpe2QkeylENnYw
VVNKblNPSEE+azRCYlh9ZFRVX2BLc0hBcWVqWWIxfW1nCno9SGxYPkNyN3VSMm9SKCtefl59IW48
fUQwVCQ/XmY2aWlmVmQ/XzFhXklre19zeHZSVTkpcVJnLXdGNTE9XkFtIwp6I0p8T0J1azlsKG8j
OG0pPHFfP0BTfVlROy08Y01CWHZnaFNgSX1+VWR+OypwSCNkcXVVMG0+PWpQKTxjMGtGe0kKenlf
ZC1maDFUPVo7b0p6MD0/NFA7USp0cyRtJil1JSVBNypHb1dpZCZ1S3dWJj9uaj5xRF8qMmVjcjx5
XzFiTjQjCnpid2FlP3JiKnZ+TnBac1QmVi14MjJeJnVCaXx6ZU9VX09ZPUgjY190bzgmQnIycloh
R3BgYVl+emE+WFVGTH5mIQp6O3V1YCs2a0cxe1M9RS1wK1NaeipQaDBpNHxCeEp8PTIqNG5tfEY5
I3hgYlg+bH5oPTNJSE9PIWVCJH1wfDJGPGgKemFASi0jITRafW1VWiZIKE5zaUllSl93ZWtFPUty
fEFKKHtmMCFDO1NafUducTAwM2h0S0pAKV9Ccj9pbEk/OHVDCnolMG56I3tlUEFpeE9MaG1lOXtM
LVkkWDZUMDZjMUpwNHd3IXNWRUk3V0drYDMxTk1VKDFEX3NsKnIre0Y+Y3xnJQp6PUAzMGlLPW85
UTJqYFFmOSFRZ3lZIT8rM3g1bz9FOT0kX1I0diQrKjtLdj5vKVl8fXlPT1NteShtb1VrT1dyflYK
em8mQDB9PSZJRiV3dCQwaSFpUXpHbnF8Zk5RMmR7ekBJKmU1Q14tSCMzX1FfPDIlN051WWM2O2Vx
Y0BNYDE4YjgxCnpkSDY1cGl1OHJue283bkRwS3o4YXtDX152e35oN35WJksyVTBMPGMkMV5sei0p
SH1FJVJRP2IrQFFfdGI0U3dhTAp6aWk+QDxZUFc1ZSl0dG43KXVMTEgkJHZAKnRZQ2xlKn1aaHRx
R3I9bHBHOE1hdUhgMkUlTXR8QyYpfGxtRnRBe3UKejtvSDd7QC09KVR1Zm5YRk8oKmhfNXZ3Tmls
S09xKmhYNEJKUX47PFQ2UUJaQ21zJFYxcnZgeH4wUkg5aXY5TnQxCnpDe0tXWkRrMWkkMj58NUBw
RHEyYmh4enxyYHlVZlJEbW5sTV5iK2ZJYHp3ZiZ4TDgmPiElUCtuIWpaZGVTdE11eQp6N19vNDdj
MFNKNUNVbD44WEZ4IU14cGROJT5wcWM+e0h2T2hedXJtOSZgRUF0MCZEfm8odE99N0Ajd2RvSEpl
YGgKejVuZVo0cWZiSj4+SUZ0U2RJOVp6JGBGUXlQJnBnfHM3fUNtLUBvZWRYTGBCQHd4MH1fR1o8
SFg8VktSaHFzNXlKCnpKKE5eXlRkMWVrSFhGX15oYk94QlVQWnlpb3dEe3spanJgUV8kZHJPalc7
Yz5lTnduRWcyOGFZNDJHUWEzNU93WAp6cCFMZXk9MmlvJk5tJWF6cip+e3h0WGAteXp9Znx8MDNf
YVlxY1RDMjFvdTA4ZmBKciREQklgXmhHJUNfeEwqT1YKejBkPSE3QXI+PllRMGlnO0ZsVTRTKXJi
dW9ZM2FoK2dgYSl9TlZaKXhwb1YhdEQtWkUoIXBCKjFhUHsmcWo9Jio0CnpEJDMyWjNDRDRCdThk
Kn1uaWB8TExPaHpQcVI8WU48c3ElcSM7N1ApRypCKF5oa3BgbWVuQUB3YH5Ye2ZhVFNXdQp6Zk56
flJBKVplVFo/fC00cVFLQCZEPUJXbCM7R1h4Z3plO3JrZGJQKlpkcEAyNDByZm9SM0tidTBVSTF5
RmkyeFgKejZsZWJNY0cmKG4wKXMkK14jUitPKUNpYGY9c21qMHomTikrdUF8RmZiTylDPWV8Ql5r
WV99JHRILTR6OFUzS2oqCno/MDxJakZDMXJYZn5tMjlEQ2E4K0ctQD4lYUJ5aTdNcFhXU3k9eVEk
QDkkbH18Qlc1OytZODhsZSUxKSVlTWZATAp6PT5fJThGYXV5K0lzazRSQCpRfnheX0BtbyhJRlB9
V3U3UDI2fUd1QjR2aHFreiV7QDB8SD1ONDNodHZLe0l4XnoKeik1YHpLVyNJbU8qWWR5akZhTGsk
V35DfFpKdSFlWG1YQm5gPGBzTGxJVU9PRlU+NGhVU3B1dm5PbSgpfWJLYT88CnpKUzJxNyhGVnwr
RTMyZk1jOD1OOyt0ZkhFUDQlP0M3R1A0fVNSdks4X0NBMEsxbFBlIWsjMDB8WHNWREZkR3UyMQp6
UVhPRWJyTkRKQC1YVDQzOWxWcWpNI3Zlc3U1KngqUXB9XipaQ0dlY1k0PiR+eWdqc1lTe20yWjxJ
PG9sVSNNJkEKem5XMHJnY0AyQEc7YXFKVmJMZU1FVCR8XiYodTA9JHpidVhSZlBxdEJVVH07clpY
SkBzakFOUmhFJXVuTSpnbDJeCnp0a3dSMjx4RjhPdmtfYSU4JSE1M1JsTyg3OEYmdX52KTw0R2hi
ezBgUjNsfE8leDJXUWdgSFI8X0koMnpIWk5oQwp6Kn5JO2BwKzJ1WD5ONEQ4cCNoJUd4b1BTezVC
aD43OU1ieCloTmc7JnNQfSFiP0BlVFFFNHBCKlRFZV9yNWU0X2wKemh2KWNVSkhyVVUhRT9OQzIh
WGUoQiMhQmFoS2gwK3VJYUFeY3BgWkd6WiYzKTs5KS1XZkhNbXdjO3kxQExnc3ppCnp4eyFtNUFK
UHZFUDRHbDs8JWc8O2lRd1gyPEdyNyNCRmdQVTVxfHQ0N29MOE9aWE4+Pi1YflRlKXs/eCFTbnAq
UAp6LWt9anBJPWc0MiRGLVQ0Z00tX0hfX2p9VWprQ2NmNG4zMDQxUzxQLWFMQUR5dFNoRTlVK2RP
WGVYeHBpcjgpfCkKemFRRHA4ZGFlejRFYUZfRXo+bi00MEZYcDREPWRrWG9zOT9uRUl9eSg7TFB3
I0Y3akJjPHFpIS1VMyFAUnZMayl+Cnp1K3tHITM0ZDg9MDR6OFg3UFFjWVY2SG48SGNCV3w0Xmxu
clpSdXshTll4O15VQHNVUnBCMD10dHkrJVVJNms8Xgp6Z29FVn1hd1BVRiRrZ0JlZSE7U1B1ayEy
Oz4hTC1eU252PTRFQ3FBJHF3T1ozKGV5UEI9VUBFLU9vPXVRdUFUdkcKejtgYD42OzE+VntRN1d9
c2BOVGhQKWZ5SXUlTkstJU1GYDs9ZlpsNks3SiN0VzUxWX0yRzhYJjY+JW0mfnpXQDgxCnpVOWZC
SUM9WWB1OD5QfGooJSlAPXg5NDVLeVdEcDw/Kygxdnl4UiszOX15P1FOKFBmWHM5ay0jKktfVD57
a0JzTwp6e1NtKV9xRjYkVDV8X1RvP142fX16LWZJP0o2JFFCczZZTVU9KnkxenNaQ2RIJE1QITZI
eyNGeSY5emdzUUFydzQKemFsIytCbGUtZmJVd3o0TG9IQyREbEgrM1lLZ2V2XkJ9UGMhITlUeXBU
Q05PcXUrNSUzY2B3QUo9NGxuKHdHcmhACnphZGV3T0AkdlVad2FHUi1pcFhpfT1YYkJUeStMTF57
Z0hSLSp4Ulc3JGZjVyVkYiNLQmMwN3B9I3Y5fmJXKHtFYQp6ZSowWWVmYVRFV2BxUitZMFQwYyl6
USNYMmBQTnpCNEp1MChiJVptczErQSkmey1FJih7Si1vSnI7UFd9RX12KzcKej5CVVZqbX49Xjhg
Qk9RRUlrIThwP2pFUzA5RH1reVBULTxiSUBJbHZXcnkkSGJnLT9wN1M7RHt7fEZFR05vPjI3CnpL
MUorezBAKXUoUHw3MUUkMHg/Uldya0xjTSpnQFlOWmZ3Q2FNQDhyWlpNJUVJentQM2I9PlZ5YyZ9
JlR3eWZBWgp6WFRVdDhuKlEyZnpXKjM4WFhVJioxdDBtYHh9P354Q0ZYISh5MEFDTEs7e2t2Nl9z
X21NMyNQJF40c0xyUXVMNjwKelQ8VzRja2xhazh2S04oRkRfZ2t0eHBlZjlqYng1dSp0I2lNVk5a
OVIkOyRfYzI/Y0whZ0BiQEFRWGl2RzUweDhzCnowU29LJjY2RHwhaFk0d0pwR3FhPVApfTR0JX5E
K15OPl5gQXUjJHd3cGchKmt5OyRaezxQUW0/LWNEdFhsPj1UYQp6THhgP0F7aF8mTDw9TiF7dGkk
XjxWbCZxLXg2aDdYc34lMnFafGBjWEhSYlhIRnNOaUJWVWFFcVMte0k+PDM/em0KekhGPD1EPl8q
MS1YJj9ydUElWl8hWTNoO05QWjA4XmFsa3RMXkQ+OEl5XyhnQnU8bGx8UGVEUT0pQm8wYG9uI2Nt
CnoxTE4ybnNzZHR9UVNnKkRTUXhFZVR1aVVid3BeTTYwYzkheFlwQGtrV0VzLXZ6ZlBTRWFXU0Ni
PVZGJSlELXVJWQp6diVffE53MC1uZW9BMT08RzBSV3h5NiRJTTVlT0BILTFuWVhgK1lJYElXRnF0
UzY2RXlCQXI4dTMqezlfMHI+THYKekRvdTZlVX1zfk8kSF4pPT92X0Y0Y3xybDlJTjk3NUphM2Q+
KTNOaitkKGc3azxhKTZTKD1kNDVMKW9jYkR+fSk5CnpvcykkIT89UClBbzY8RkdAUUVRSiVCJCpg
a2tOXmlEKitxRkA3NkI8aUEtX0heREUpVnhkVG9RVnZEdjlVMiVpcgp6QEZKPEhQMjluLTtOenY2
OGdmcWhsSn1pPihTM0h+WmpXPGV1MVYkVGc3TGZvezJrPSheYkBPQlRPbyRCbUsxRXgKemVCfkhr
R3cxKX1wM0xMYDI/YWVhTlRzfWJiKUZmZzZiaWYmRT1mV0Q1T2MtQERRZ0ZrZF9LIWU8Kjk+Q3FF
YFZtCnpubmowbiR3cGIwT3xEXlRSJjV8XiYxSGM0XzRqfUtvQW5WNEc3I0YoP0ZReWkoRWRFSGN1
VXk+QmxmKEswSHFLagp6ODhMdXIzQXBNe1F2My1EMn1CM1RaQUopb24oOXZDejwjPXhQb3NMWDNr
SyRlbHB9bmo0OGM3NmBAeFJWbnYqTmAKeks1dV4jd0JnaDIhJChVRkdqbW41dD00dik7bEFPPURU
LX4lM3JFQGBeezBSRnh1XktIZl5jJVp1WGdsTWVwNm5KCnpNcDlsUSNucjYxKH4oMHBnaT07NlhJ
ZngqZVlTeWptRnlUOU81ZSEjZUNkNWlWfFJxXkxOUXZEWnJVP0ZXejhiLQp6MnpNYSlkeys1UlR9
ZGU9dWc7UXNvQ1oySTZsR0FQc31XMUpZfX1oOyF9RnZ5aVRCfT5DUHswNyNSUyVhY2FVbnUKelVk
RH4jTHwqaUk2a2soWStjUXxNOHliajMrJUJffSNKTF5NcFd6ZyFufnNyRj9QXzteOUk+cTc9Knlv
eGshdUpxCnpOO1c4UDBVM31yZ3FHU3E9I3R9VjMqMXphJkZTbEkzfWMjQ2NLaTB1S3BQTXMkcTd8
WTNJPiUwSWtSWDloSlhNeAp6JD5UKGJPOXRaejZedmFVSCpBaSVUSG1zeTxOSjl+al4yc0ZKUmV9
bGohME5zR2MtTkYoYGU0YHJ7QDRBT1hieXAKelBvZGpVXldMemhOPFBgRXMob09DVz5LbjU+PThn
MFlYKitldmoma3p2Kz50Nl55NmRgRWByP25hT0h8QGRHV3FxCnpOYDlMdVh4JE4qRj5DKkZ6Z087
KCEtbVIxI018V0JsQUxSPWA1cnhBeXMrIW97JjRWS3ZnR0JFSG1iOWFmNG5ORAp6RXBiQ2h1aGRh
YmNeaHtiUzBGdGRPXisoRkN7aWN9I15WTFVYSzlSKEBqT0NLdDBtWDZMKWs4Y143XkRgS0BMXzUK
ejUoJGpybz9COHVyfExrfkk3cVloYXBYTWNuTzl8SWh0PWZkNH5weW5md0lXUHVYeFFDK2ZmOGI5
LWxZbUZsT2BkCnpPLXc0NGYzUnpDRGpDXmcrblZ8fS14aDNQdlF7dDJJXnxUcWN6d0E3O1dgczZ2
VSswLXlaRFhtP15EdyEhfV42PAp6RlkqMktqdGlURHd4e0JzN2JmWF9PX0ZAKSU2I3kxTjVaYzRn
SVRCSWp1OC12JjY1PVJ4VWBXUWN7NUk/NStRUloKekc2KXMjdXBmKEZTR3EtckEqQUZXWTlJd0Vr
YDJzcks3eXorcXVMQDQmQnI2ZiFza0BuT3FocnBXKE1VbVFQfm94CnpsIzwjOGZnP2FDQSF+Sj5R
eWlZUVNufGB+SGFea2lgITcrTjd5KTRwcU47UU5iTyE+a25lS0JuK2QmUmQ3RitPcwp6bHdIaEc8
LWV7fXJTU1RkVFlsLVM7cVMyY3lWO0EkcndUa21hbTswUWNKYEtDXkU1VEY1M30reyRCSSR1aUQ+
aHgKej9rTWZsKzQhUENMQWlHSSUhfHpEdzE1I290UFlie1lmNXtBdCM/Q1BQZXI4OT9pMil0R1ct
TisyVHFqd1gmMGl0CnpLUkQjNiZeT3NpMkNOVzFPSCZXK0xEVldMbGd3ejhAK2VrJG5iMTFwJkxa
TzRyKHJLQGdRRykoWX05dVZxUT5CMQp6en0jN3lSdk5SY2QrbXtFRS01JiEkRm85KTtaMHsxbzh7
SjdGZjFicjU7RWgxc2glQkNfSHAkPlp2fTRNK3M2ckcKekZNMF4+RFN6N1JQOFJsMGNIZWhCZjhY
Y3hoQWxhJWx3ej9INUVicSZOMHFtdHVQT0pmPk01cExYU0VNOUh5Zn16CnoqfT1KSURxQEQhNUVq
VCQ5YUw2NWwjVCl2PFAxYkA1Zml4V3V+ZUw1UXtfZUB1NEJ0Um01U1dwTEIjdjE1TEkhZQp6MSRz
WHhvbzxGbDlMTElUQk1eRjlQYVRyYjs3Y1UrNmQxNntYS3JjTytjPlh+V2BuQz93eUdrSz1OMUZO
Z0g0ajkKemJrWjE8NDlRM2YqUjdCJj4obmwrX0R9QVpVdFhQZyp7UE8tb0F3c2J2TjYjS2lpQ0El
KCsxeGNaSENQK0plZT1HCnpGWUhwZ1BIdDlFTi1+LX5MUiFVPjh1SjxhPGZ1JGpWYkhUWlhOQX5Y
ISZBPDNoe1dUQkRKay1zYz9aS3NoRH0zZwp6WU1+OSV4c0l3eXQwVG1CYUIwYWMhSEJjTGd5SUdr
PnJtfXk7bCY8SVgoQjx8SU1wNGBRdCFBWEZULXUmd2wyR2wKenQ1dGM7UmFCdEh2Nl5RfDdjVWUz
ZTk/Nj4jN3ZzdXM1OWQoc3dFdU8yWWY2dF5AKXFJR0FGd3hiPj1sSyYjNHtxCnotYUhndWxsdF5u
IVUzUEhlZXNzJVU9VGw9dyVmRGcmZXdZRE51MyktWiVlO15WZyQqNz03eGNsRyRTc2BpcmA+LQp6
Pj56KkZaamhvZ3QkO0ExSmplI20jI2I9JmdHXyM9c3JWK2RebSVLLWFWZVlJSUcjUUNONj9+Oyhn
RUZrSnQ3NGMKej1OWSh6MUkxKWZHM0lWU2loQFc7QmFVZlpqTGxKNzUzfmZMTDFnOz1qdCYoTV5r
WThxXjNoUk50M1Z6P3FKQEE1CnowRjUmWEF9fT9BSlBIfGkzK1c5ZXRCfFohYGAxX1lAQmxYP1ha
RHVvZm8mYDg8aFFGJlpme20jdGNyZSplXzBGPgp6SkNsbjtebTReUCo+TypJZUlHVHFzbn1DRzxu
cWs5dW9hIVBUeWdud2EjUFMwPnhhdVpGTk58Klg3WilQanNxKz0KelBPaG5Rc3tHQGRzTGpzdGNP
PGEoemcmWVg4T31TZyo7ZDsjT3BTfnw5WSlwUU47V2YxZGtPVG1jPXAqQjQqZy12Cnp5dTFTKi1B
WnQxUFltamMrOWs7RShUPG9SbWcjZHtrQnhOVzlHakQ8MitWM04tQnlyOVRZKChiSHNeV1ZgQSlq
Swp6YlZgOV4yYzQ+cVg+e1pudG9KbSZ5O0FYakRVU35gb01oLX4kclB7UCFTYiNGa0lwUnpFWHsw
aSQtZE85WFRzPVgKejh8UVNrME85R0huRmM2VjlDd1c7c2JWJTVOMHE8fjduVmFudmFyQWIlcCRP
Jksye25hY35JM2MlaGFqfUdeI0M8CnolTyNsMGg+IyFmdDlwZWlfdzNTN08wcyhiKFpzZkE5TXJm
MlB5JHZlUSpYO3VWK2lBTmhKcShIbXc5azNWdG9EKAp6NlhgaXgxVjs1TGs9ZH5ZZlgpJkd4Vktf
cElpaWQ7RnJlUXl0Vk1EOz16UGxHcE1+dDsybmVAZHkoRVA5JGNhWkgKem9fdDUmPCtDWGZ2RDQ1
cHl7LTdfUHooOD8pUWI1MHE5bUBVXkMwOFd7KkVTKGxlYzc+OHIkbWg7ZmFiPzw9VWJzCnpjamRy
SVRhc3xGQlhnUlBoSFo+YmomaVg0aitKQ0pyKXk1PUsofGFxWClpZ0hVK1EoNnc2UDdjc0o4Qilp
STBKdwp6UVJDNVpSbk44fTVUI0FHdXRlPDVpbn5We1UhNkZXVTEjPkMlb1Y1Tk14JC1HalY3SSZ5
PT5xYGE/RyNSSlBDZjEKendzdnM7P2FBS0BadlNuYEM4cHppbjhiYlhyN2Q/ZCU7ZHJ3UEFfYGs7
bjM0RjhgQDAwb3c5Z1RyeHdxRllVbnFvCnohUEpkWjw+el4pZzY8cjB6OVQ0PkxsdzRWe2tja3xk
KiZpVkYlWiVYdFBQUT5LM2tHOWtrd3A5eihRTkZCUHQxbQp6KkYjMilpYTNHOSMjb1hgWjROKlpn
eS1ScmVGdlBMU3FAMSRkRzRISUBzUylnWjtMQns0SjF7UEReK0kjRFVDRVcKemg2VWZQcUw+Q1c3
JWhoa3hJe1MtM3FEcTVHcW5ocihBWn5OQj9NcHx6LXJsTjB5K3YmenB5SEQ7ajwoSio1eEMxCno5
ZloqfWZ6N3ZrUWw/WDk8aTc8UnB5YTl+Y0xxRHduUXZIQlAkVWp0eHBHb3lTTk8jPmgxMWx7cVZ9
ZHI1dUBFJQp6KzNSZW1RaDBkMldQMHg0OHY4ai0xTVk7KnA2a2lRd0EoellEYWZyZEIzN0UoZ2s4
M1hfOWB7Yk0jYldSSElqMk0KelpAPz1qPnFjQDwzLVlWajBaVkdLTiRnb2gmcXFGb1hidFhmPjhy
a3MjfURwP21PVll+dTN+YiFoWUZOJHg9VjlPCno8Tk1Fay0hYiUlSk9xbVA3czZfMWtEVG81ej08
JVNCUjx4T0BXQWxBc3VOd2hCZkM1VEFgQ2ItaG8lVWM4WGFodAp6Pz5jKWs+Ri15WVVVeEFMNCpv
ZSV3dUF5dSlaSGlpN1BYXjBGeGk2WGlSPTkxeEZ1QCRCdGN7PE1GUmpTQSEtKCgKenE1eCl8KGI8
dS1vQ29lJjZTJHxXOFN8VEgySG5SalVga2BEVV5td3I5NzBMWE0+ST8tMkszUWAqcE5abEkxKj9l
CnpNLTdeWUdZOS1kRHJwV2R4SCtaY1MqUW09ZE5qcGcybjttI0s/czVee01IcUt1ZCFKcCRURysl
X2YlPzNYcHImIwp6bjVuRiVYNFhFeWNKZEc5aDFtSkZaPFpfPUxAQDVCWEc5d2M4T2Q9OStoJWp+
ZitPdXhgfGpDV01hNSEtLXw2RDUKelRBNFVaSlY0OVI8PEs3WHtgOTc3UDJGS31GYG0lRkJHVj87
V01KLUtSR1BAbnlraER0YmhZUHFKcm8mNlplYUxOCnpsQHNST1NPY2BCVyZGRWxfPn4tNUl4JjB8
Yk51QkFCOWYwdlJfQEJ6bmZITGtYViZ0QGFza25WWkNmaXVHQm5WKQp6ck17fjklc2E3MU9iYXJe
KkIjSn1SOUNlX3xMR3EoZVE9UWJDUDVlfiNyeU83THZPMWBAPmRVMWhxMVFoXjY3ODgKel9PP1dy
SjAhRFM1KFZIZzlWUGdGVl44emxSXmtgT1paRD5Qe29AKnVyT3Y+ej9HX2B8SU1mc2UkVz5QSDA4
MnY+CnozQDhGMyRDOyhkTT08QTZ6QDE3ckgxclhzXyMqTyVoOTxHP3psY0UlTlpXOTtkMXwqQTs7
YHAxYUZMbDRzVCtZMQp6PmxLclBZRXY+V1MjRSRYd0hDNylCKnFxbXMlXyY7Qz5OVTxoKWVINCp9
fWU1KSo0JXdfWFN4YTRaRSp7TXRqVGYKekh9cHkkYVFZPEs9K2Z9Xz5FOD4hTyFoNlJ6QnJRQV57
WXFgIyR2cT8tNElaO0MjQjQoWmVJTzgmNTxRTHoyN1FRCno+Wkh5QWlkbVZeVEgmZCsxd2opamNX
NSZqe2ZQLW9yNno8PmcwUSpiWjs1KmA9Kk9YSnA9d0UpTGAkcSFWQjEpNgp6T2BMTzw/ZnEzLXF0
IUxCQjE8UHYjU1JSX2RVJntvKH5HM0Ypd2AqTG90Mng4SEV1RT1ZcmI1akl7UT1BUV97cVAKeihJ
JjFiRFhRSGxBdn5zVEl5WVgwYVF1QXg9NTU9eSl0amF8e3tHUD5mQTlXVGdPbU9lS0RfQWtZRnpR
el5VSVk+CnpLSFdLMlEyelMrT28hZlp1ailKPD1KXm4yY1JfWXhVcXIlJkxjN1paUXR9Njw0KHFR
SUFgNEVQMV48WmB1Nm5VYAp6IThfR0VIUzhJd2R7XzFefEpgVHJfUU83cz8wMjZve2g5TU4ja00t
VEA7akhscFVfX3FKeUthYHYkNzxYdWwzZmQKej9pQDZ7YjVwflBCXjRVd1o7ZHRLPntmYUMxQGIh
N15BWlAmU1dHOG9RRElHdHF8b0Jpb04qVktKVz1PejYqVyp+Cno2Y08tcmx1WmYqJGJmYDQmaWky
MTdHQFo2ekEqSjRHfVQoNDNIOENxTSh9dVVuTT8oSGFtMjYlMSo7QWhMPlcraAp6P0p6QEJxZD56
aGFYfnBLSkxnckNIZjZpTHd6JjN8e3IrOXVEPWp+RSFOOGhCb0hDJjlseGR9OSsheDg2K3praHMK
enU5TFE+bU5yU3FqLWpFRVZTRTx4RHsrKnNHKldEOEg/YlNuanowSyt6I3EybV57fVR8JUBXSF5B
JVQ1JmRWWWZaCno3c0gwRD43SkBpPWxrKTJ1UX0mQEFfY188Y2g/dXZ0U25KeHYmJm09NERQS2dL
amd8R3M4LTUtUlpVVVgzbUNveAp6SmRZfUc7I2g/PnhZcmw8OH1tITFrLWp8TnFaVngmaTxpQitJ
eXhGX2J2YUordkxIJjxQZDw8KXMkdENOQkZ+LWQKelpWfE47I2FSdFd3en54UExxNzdKejFCbzJn
KFJEVlJ8I0p7ODlWZEdxazYzYmJ7IzJ6cXt2Y1kheTJ6Xz5ZTHhGCnpCRCZgVGRIXiFwVEc9clNp
ZFl6PSU1ZW50P0ZyNFBOJjw/KFhPVTctQkhyNFNaYU1pbXVVdD9WR2luWm90KEMwagp6Xl9fS1Mh
VE1wYllCNChCWSVNUGxOKkE7N2BlKmckPH1qPkdKbXlMfCFSc0ojdV5wWVZkYWh6Yzh7IWs3TjtI
UzwKekM7eTVPJEUwOUxDWmJuTkkzeHVsV3FZQHtYQWBRXk10ezQlSj5fRVp5JmN0dj9haHtQdSlC
Zz5nelRqb0I+MmchCnpCWDFMUD5uajg9MjVidV9OfmNlQCtldGNVVE1OYV5eLShHOUwyYkwhNztP
ezZNTFIxayhNPWJYWXtkUVJEaU1lagp6XjIrJEVXUVp8O3BwJCtYVzV5OCNgS1JVOS0qdyV7dHY2
a2Q/JiFrYXdjXkpNOCozeF9ifkdGI3hYXzJFKz1mJD8Kel56P2BiNlRAaXRKYlJ1VzdjeUVBdXE0
fExuJWQhJCZzcEJtYzZNPitoSz0we1I7QU8wJVE8MGNDfGY/Xzk9X0o7Cnp0PmBMYXojcjhrYWl3
MT5AcDhjVTRoSkwyXz5ZOyMjckZHdVNle245dElNRFJFKThNRGZIMX4wLUteaHckSnNPTQp6Mkg2
OX1WO09FY0FsbUNHVlUldm13bihXSCtaKWgocTVqPUVZSjhlfFhKY01FXld3K1dfND1SPV4kdDFe
P1RgQDAKemtNRGZGU0BJREpYcUR5JDtXSDkqcldHPXFRMzdAcjElK3p8SSl1dUExPUVPQlpudW5a
MWRBfS1QdGJYckZnTUlgCnpVQmJRcTNGZGw0QXt1bld4V21lV3tec3QyOExSTjUpRkReRmUlQio0
QW9SYDhfYip7VE5wYS10QFh6cjFOMCFlMwp6Zz5rUjdLOzlWPjZaOStgWCRRaW1kfV40ZmxTMHEl
SXtEaUI2NXErYUZHXlI+Y3E9Rl9HWUtmR2dRYD8zcVB2XmgKemlKc29UbVN4VG8qSEF3KTdCOGBV
aH1zeDYmbkwoail3Rks0JDAjbXwjcUM7byQ3MC0jc1BnRDhePGpteGZfJHJyCnpNQSY4OTdQbGda
QFJyXiZIXmFAelRmWUdVVXpBM3E8V1l1ZjUyeUAmcytPKCMwJlRYSnNaTnVLZEZPWHYkTFUyagp6
JCptZ3EkUzd6YGpkTTZNcHlASFl8NU9pRkVadn47QF9Dayl8NjszbWAyN3d1VFk9fXxMZj0yZUpa
YCVUSDslPFQKel4pR3NXZUgtYDUzZiFeRU9MfmstSWYpYHpuYFdFWWtRN31MSTkyTVNJRlh2SVdP
aChrNlNmZHtuVkw5KEwrQX1CCnomP0ZCbU9ZMDJtdihXXkNJWXpgfEB7alJfZzkpdXJFe3lUVG8z
a2Y/M2dkYGJnMzsxM0VKeXc8MW4zQmgoaGZGIwp6bDlkZnUqKE5JM1RjPzF9WVh3MUl2cV8jMktC
ZCl4JEskPyp5bnRqczhxRDR6SzNoQVdabi1NantgMm8pJlFFZlQKemVYWipeTFp6U2ZBX0gqUVEx
O2daKVQqRl5pNSo5Sy1YMCUySXY/O05DWiVCRGBuQCU9VSYjLX0zbXJEcS1MZVNvCnptWD92OEdw
KUlLM1FqelVKPWM1SkxkRXYqYWlFJE0jcEhFTjxlfEQ9QiMxeE8/ZGN3V2ZNZDBvKmtLMXwlTVVl
ZQp6RnxNXmdzSHVIKD8jeD07OElQfnMweTZOTzd9WW9sTkNeWGhRPHl4cGEjMikxR3cldSlaTj1H
ZkZnRGNWNXlAOFoKelk+b0dwQHpIQTlyOV4+JCs+V2h7az00cyhPK0VyT0gxdEN0SWU1d0ImNGFh
aSomZiRGTnhtLU1GTEBZc0pYdktzCnpjdlA3Yz5CN3dxc2k1Uk9ARWt8VnhAZWJweEh3MFQ8cX4l
QUw3VnpxJj0mM0pIRlAhQE9kdjIjVDh3YldnMCtGIwp6WmlOKVU4IXwxTHhYSWVTcWt3OU5AZ1BL
dHleKEJCMXsjSUh0NzZmU14rS01IK3F7UCkkUmBePSE7MCpnVjJMODEKencqZFZoUDJFRH1XY1RU
YU5YWT8mJF88Qzw5eSt0N0VFbmwtNmZSaDElc194VTQzc0pwcG8pT2NpZms1Uy1DfD5sCnpPMFlL
fj9+bV5gWEBPdllzQUY8SUROT3NOP2MocFp1KWJIZXRvWngyc3xuMWFiMjEpNzxFbEo3UWt0SnZF
dnxjTQp6VXI+fSg+PlU7QUlqREY7M0gzZ0hfU3U/fkdlaG5AVmg8JVZDLWZ8PEYmIU55ckNCYSol
bWFKK3gtTXxxQ3M5KyUKem1QP2ttbEFzbmI8QEcpOTdjYSRqaUFOeFBETFpwcXJ8VSR3OUEtJkJ5
NWktQz4/ZStSOEZ5ZEFHdmFiRmkqJDQqCnpxeUR5UntYfWtecGIpZllvbz5CfFhlfk1HTy05RExn
cU5efDdOMCVvQUctNnAqKjY4cypTbSYkSWNVRkw+NmtBKgp6UC03b21iczQkMyh0SWpWLTV6Pigp
NkhjPVNNJjlPQ0h1VGl1SFJfQ2lgVnM8Xm9WUmM5dWFpND9+bHlnWU9Bd1kKellIKCFlR0lwei0q
SSl5YjRgbW9QKyV+bmUlfmA2WWJlTXhaSzwjMFMhY3F+cilFRT5sYz9sVl5CZDlkd0JKQE5kCnpX
TmsjU3l3dE8qdHB2TjwxKjtWJSZFeyY7QD5yWitRQzFDZj8yY0FnUU90bERBZDltQGNidzQ0QWds
dCUpUkJRVAp6a2VpeU9HLVFyVkt1RmZGWT9jfElIWjBKQzxPITkqdU16VU9MQFZKNGtZI1E4Tk9y
TCFBZnV4QVJwQ3hpJTk/fkgKelp+TysmZz9WKkd4NCpTK15FMFRZZU9ALTY3PDAzcG9GTWh9X0V+
UGp4VnowPHhfNzwzRjI/NSZVVm9nOUheal4hCnpvSGxFTiojNmxVVzNidC1uISlYa2M3cTZYbjxi
LSMtZ3Z4RWs9Vz47K1VKWCltQVlTZCVNeERwdjlZVlFncCQrMAp6S3hjb3x1VEFgfCppJSpTTlF+
RzRCQDMjOW10NGs8cEt1ZVpwZSglUTMwc1ZGP1d5fmw1NyhXJm00OTJAeSkrcmsKelJ9QiVaandQ
K0xjS28pT0FWfSVqOUEjUmd3WnIlei1NU0dPbFREMldVQStEZ2FaRTVCZSlDLUt7TEUxMXEkTjJ6
CnoqZXNJWjEjbzlDam42cyNKYkNyWERheFUle3ZueVZpeENpOGg7KGtoNmMtWkNXdTJ5QmJ5eTYk
X2BWNTMyX087Sgp6WGE8eH0kMjwjVThHITY2QSZQTEV7LVJxJkw4S0ZnOWctI0QwbmslR3J4I2hI
K0phQz5EUDlMdTt5JUBvc3h1PDUKejRyOXdnNFhOVnQ5RWBtVio1I0w2I3lVa24xMVFjQUxXS2Uy
QEhecilia1kjQ2RjbzUleWI8TVEhVjI2bz9SRlVwCnphYko5VyNCYS12SmNDJkNyTndQfjE+Uisr
bl88UXZqZUk+K3FeNDkre0JBIWh4RkEyLVIyLVdvVWxRYW8tUThXPQp6NSpPUT96ZDtkbEc7KyMz
I1NsUz1hLTVqSlZ0cVJMbE49WjQlfjsrNzdPUl8weDBlK1lVbURxcVR1UUp7djlaamAKejwqNnB9
TkQzeXJ5LX5uNFg5UTFBZG5FMUJLeiM7OGRxVk5EeWpvLVQoJUAldyV5UUZZPU9BZlJgc2E8QyVf
QmB4CnojTCtkS01Se0N6cEJuQVQ3NHxWKmBRfkZgX3FZMylNJExDQUlUKklWazwhdCpIWTNNMEBO
JXxPa1YxOENDdVpmUAp6TjZZVXx5TEpYX2FfPlMoVGpKV0F7dk5UZDYhfi1ka0w8czVVSlQ5UWI9
alQ5SmI5KEFPNFd6KiFZQnNFaDcqZDgKenAwaFkkM18lZjg0JnspcjJheikmJXE3e3s1c3U1KSZO
N1M0eWBlMilCczNmcU51RSZsRFZ+IVlzYlVudDQlfFRHCnome1pKTjkzeXNBcHYrWk5BQkw+Vi1p
VU5lciF9WmxVWUJpRXMqMzt3RzhhNWQ2T2kxT09KTHYlejRxd1pGdmpfPAp6VFZ4JTUxQWV6Nktr
YjxpKX0zZzBze0FyWSVidUdQXl89UUZXaEwmSkhKbjtzNnk5cjxZSSVOaz0kIVFpTHBPMHMKem1+
eWtxV3JSKl9XMUxPdnJ0d2kzMWBpKXdRZHo9bCt1TXxVNDE5Mj9paWl1a2VMO1hfJWdWZCp1dEpu
ZVdPMTM5Cnowe15Wdmt5JUByO2hzfF9ZcFlpO3gmSypycUVFTWQ7bSpoK2o0V2BIKCNsO3k+fkIw
UylVNVJ9SzJrJkhgaEJgTgp6NEs8fk5aX29lTUtAfEpePEk+ZGZiPy0jJnFtUEAwQk08WFEpQXEj
WG5HTHVSIXM0NkAteWgwbUpLZ25FdHFje3UKejM2JHZeQmg0M2UzRndyUDIzTmx+TlkoUDRQdWRT
MyVWYnBMX3t7MHAybHVFZ05jY0c3T0tpNSVOO1NCdHg9VXQrCnozUXV2amMwPlZAQ3NvTlpyalgp
X2wtKXgpVGB8NT9nRWl2fDBAa1BsWFZDKV4rY1JwITQ5SF8tTHlSZGRgRnViOAp6JTF3dkV3Izh+
eXlVYCNwdlRzSXttKnhUYz5PYjxFaj9iVnVIWExBck1GNDNKeUVDaS1fO2N+VmgrfDxSMVooRjkK
elBnR1Nic09xYV4+dHZPN152PkZxJi1VQEE0UCZESGkpWChqI0ZaQndgN09ONEwoeUYlQCtLKUhC
a2AtM2JTZE1SCnpWSEBAJipTSD1HMnpfJE0xflU7PiRtM3RVN3ZWdj9SUysyP0J2RmJkM1lTSlk0
cD0hdHl7N1RgeENHVj0zYy1vcgp6SVAwWHR3aEhzMkNIPFlRdHktYHt0fEhTaHJlKlJEK2gpOUxM
QXE7YHV2I2N3JUgqT0JHQ2lEIXFIZ0Y2ckclTjYKemVDaV9NVyhYXkcyYUsoeiVidyNuVmVDOz1S
WmdSbT9Xd2lPP21sYk96Vll5akEmQ2o0Wi1wclN0I31aJHNEQ2oxCnp7eDgyfFJsZX4mb19lbTt2
KHA/MTI/PnJaTE5tajU+ZiFHKnd7NnxMPSsyJilDcUhhbVQkP3dlIUlzYH5Ee1psXgp6PCtgSyVk
d2A2NTJiandhMEdBUi1oUT48QmdhSEUlcCowcyNteEt6NVZXSTNAJVMtQCY5RXc4dFFMQ3ZsMVg1
MlQKem03V3w8NVJ1S1hJK2RFTDA2dENUWUNhbDVvNihlYlJTcEg7fDJEeXprNSNOe1U/QzdQODJ9
YSM3X1Vjd3VOUkIlCnpWJXpaY3ZlenBmSjtiKTVFUjRWSjkhcWxLVkVoPUxVd1pjWm18dHwtXzhh
bytiP2NucjRWdlFFUTRkK1R4MU8mfQp6KEx+PDdETT53RUU1WXgwblp8ZypBRExZPk82b311WUFA
eSEkcnROTW1SYypQNWVIUn1vb0JmZCVmfVhkVGQkXyUKejJJZFZ9QlNkVmcqQXZgYWRNV0VGc3tU
cjFfSGRocDZZd1k/YyR5OzZMWFFfTSR4ZzFXMmsqT3VRaURidFFTTjlwCnp0O1hFQD4+VnBCWFlh
N0Q3Pn1xOEoxblB1Ykg0dkBackFHSUdsI3hBVUVDKEdSZCE4UG42SVdeYmxDOENWOWRQdQp6U3NE
RnVAPjZ4fEJ9dyFQLX1JYE5Zaio5RFo7aVJxUSt3c0p2SkpnRWE5PT1TKlNKTjtwdFMlVTY+U1V6
QzwqcFQKenRocXhXdEpeZEBNYTBVUjIrPWp9cSopdlpRSkk9OHJvWSozN2I/bHd2ZkpXVWUyI19J
Vnteaz1scWorVEEpVXM1Cnp6RkMkXz5uQG07JCpXcyg8bU47ayZ4RlBvcWdET2A3KX56SzRoY21w
KURvPTk3bDlGVG47bU5WOXl6OGZNcFlPegp6PHJqIz9pVUh1UEY5TFN4UDVDMHFZPUdBNHoqKVlv
K3wpUWY9MngyUGJiR2tnP1RPRUUtZlkmRTw7KjRLaU9pTUwKemVnNE09JDkkcCZKNF9SRXJZRygj
X2RQJURWcmlHIT5HX2Zvd2dQXnxDTEs5VTkkPCFVVD1IfmdSQGdlbjxNSkRsCnorbU9YLVg0aFJ1
Vj9CZERYcSM1PTdLM2swVCZ3fjA1USQ8LTEoYGB1QlY8T2hPJkBKZTQkWFZtSlZfNX50Y2BVdgp6
Sk1gME1vP0RtVV5GJHRiSDU/LVhxTXQ+bCpFcCZDJFBtfTk/QD5WfWVZRXxGJEZ6YXlzakpgS0Y7
M2ZYYHBeQEUKenU3VCgjSTJfPX12JDN8ZExnaSQ+UClFPXw1NWF0JUVSVnZ0V2NlJWhXRUtYflFK
ejt1P2pYKTFPUlpxeFNAdlZ9CnpATHhgaS1MTk1FNGh2MlZHPF5MNXNTYkFEMk9zKVN6ZiVpQjFw
PlpjWkFeQEd7ZCZvVV5fd0soNEtiV0I/blgpVQp6eVFwYFA7eUIlS2M3RGF2OVJrKD5ARDJuVXk0
P1lIRWg1YD9UO0JtdkoxVmIwKmdaZjl2NncpSyRLMkpaZ2dQRm4KeiZvOy1YIz8+RDclZlR2Z2tM
eV9ObE1FR3FGPk5UMiVvMjhFRX1DPFVCQlFQYWNFJSQ3M144fmUxLVRoeSRFfntoCnpXOERFKDFa
KnxRc284OTZ6LW1CKUtVWHZrSVRwcks2PDZvQzNCdEojWTlJO2EhZ0d6U1lyZGNpUT9xaHFwdmI0
ZQp6UVNaMHVidUBMQ1Bxa19GUEpeI3M+KGpfN3lga0EqRWN3JSRhZz47YiV6PFo5JX43WEB4Py1s
NDZVIzV+I2pHI2QKekNEUlQpdjwpfjgkRTU0UWl+e01BVDE1QCo1YSh3XkxqKVV1Tihpbl56dzgo
WXcxdXNDM0lebyp0ZFNSWTg9SmlJCnpsdHlXTCQ2ey1GWDV6VkJLTVFLNkd+JURsaj4kaVEzVVU3
QjhpMTZjWXxOcVdJTH1FfHYwNF9kYTt4WEs+WHolZAp6b141Zkxqdnk9TCZDfWs3dUNSRVM9SGxG
MHYtUE41KXpvXkE9R0lQKDR6K3l2d0xhU0ZPdURwSzUjd3JOJlAtVjQKemJNSXFeb247dF8qVjdP
QEp7KDIzS0phVl8hQ2J1QDhSNEYtKG9GXipOSEhob0dCOHg2aXNVZmJwKmlPfWtoMlZFCno2bzZ3
JkFkIzYkR057bVYyYkFYRFMkeGd9PkxHUXBBdiNyN2oyVnpFO2ohQlFWcyYjKzBub0w5al5rTH10
Z3AmSQp6P0k3aiFOdEAzXkpqeTZKOGJgdVcxPFpjaWFVQT5eM0lMKzQxcVZtZ1dASXZKZkxWMDB6
NmdfVU1wSXdmKW9YPXUKemRFfD0tYC1iUyhAVV5ycSF2MUFSP19NaF9XT2k9ISR3bXRvanl9bVZI
TEItVXR9TnRtKHpmO3ZiTCpnJlgqbyZUCnpyWD5rSW8jRzlRalo+cExnaUdTRyltX3ZYbmtKITRa
bSNyQUpCN0RTNkArUEFEej45QWNqTytmUDhnKko8WG51JQp6V2R1ZGdBYCMxQFNMe3dUMFR3TT4k
MyY+UUBHT2ZWNH59ZkFJT1kyaXZmOHJWOVNCVVFIajs5Qzdhd2Q9PzgkQ2sKelg7WXIpbEMwV29L
NU48SiMyVGxyTlBnLWd2NVU5dVZnLXY8bEltdCptQWZII0ZxWjsoaWZFYDFpciV4ZEhvLVFgCnpl
ZG1geEhvVHdUQnNwSExxX18rczd6a1VzRWd1bzY4KVJ3NV5FPi1nYGxxUFNQS0NESjk1fUUqN2JN
Qm5hIXIpZwp6QVYrfj5FI3BVZXlUa3E/JkBAY3Brcj9QSDZBWGR+JGxYSjMkPHNfRFZkT2V6NUtK
V1pDRmJXNGVHdTMjRkVIayYKemxXN3JUaVgjO2ZzfFZJRElUfEd6NyZMXmomJTNvKUZDRkQ+eSVz
RXpJVCpjeE48UnN9JS1pVHpfQmg3TVlsY0BSCnp0WTZCRyRBazw3eylQZWJKeSVjNkhoPE19QDVa
e0crRmk4JG1mTkNOZDFFRGFqO21jdHk+MUA2aCs0YjBacTQhYgp6VGM+KzFaZEsxe0c2KFJEKjtq
dGJCV08kMEhuK3V8NmlsX1pnd00xfGRRT0VkPyRrPUJISV55dkRhYjF7SkBoI3YKeldZSXh8VHYl
RyE7I1dPUjNOYmFLJCVIJHk0Plp2bmhFPUZpZTBUYnVAYWsyckRVYksrRkJZJl5zK2haQVhQeERK
CnorNlc3b29qUEZ6KmdDWGwjOUBoPkQkMVdEb1hFa2s4eC0tUnpFUFY0TyNrNCQqI3t8eW8oaTUz
aShTP1NeKVReYwp6KmJLeGZFdEpBampxPXRWa1lXMD4lJTdqQXteOEhHYUx0UFlWWnkkRVBnZ1c9
UkRFOSVRQkJFdmptPWg5PVkpQ0EKem5HPz4lO3VTMmUkfUFzYG1KMis0eDAtQGVFRVM0JW90PXAy
WFI7bjlSM2kkfTFlNiFXSDRFOVI2dnU2dGM5cGV9CnpeTkxzNlI/bzdiODVNVXhxaz9Fc3FkTE48
TG8/TXR0QGMjNlB6WG5eey1MPj48RndYTmgybns8ZzgrUExMKlZ4cgp6NWM7K3xBaXlZakEyRUpo
Xj5TPUo0T0tiZVMkKip6cHFgWVU/WCVJKnhhSDVqaWZjSGNuUnd1PiM2P0FSQDllNkcKenB9aEd+
dWRpRWkmaSg0JGh7Tn1HRyt4LTFIZCMtVnE9NTR0WGE9KypSfmRZNlRTIUAlYEl0b3k9a094Z0NW
OCslCnpYc1lfTV52Y2d6Zj8lMiF4JU5QRSgjVkY0PiFJNzxaZUZxRVk3dyNyWWN1aW5JZzZfQEBZ
VEowRn19PDQpYzY3Qwp6cENXPkFudlYreVR2eHsrPihmbnQxQVhLfSlmTUk3YXIqaGFZcmYhITVz
UjtEcmRtUi1tKUdpUk54am5APERNZGUKelgxaE1XMj8tUTdZVmBCVTsqTzFmQXBSaWxoJEpuM0Bw
dWpUbFh2OHdCME9UI2tZN0Y8VExpeEJ3PTlrRiZofFB+CnpMaXhjcFc2ckRvb0YrcUZvaXpOKypL
MjQlUXM+RmNLeDk2QWlvMHxUeGlpJiY1ZWZXWjw3JEYoKnZXZUl5fStifAp6SXQkJXlLanFAPlRv
PiZYcnBZKiopbTZ7KGpRdlQ8RlhfMCR6LUBUVlQ0Z202c3Jfb30maXZ9alN+X1g+VVZkUUIKel9U
cWc8RmF5clMjUTM/eVlqSWJpWTQoKU1MdDlwXklaaDlLOFNsPX09S1ZtfndXa356Vjh8Y1dCWDw8
QUYwSV5YCnpZRjFKNyVEJFZGYWw4NyQ+RFopWnlkYnBuP1RTVTFaYlVjdjAkeSt2e1hJQmtiSFFG
Zjk+SzJ5Oz1eajl0MjQ1Kwp6P1BfS2NtYDxwd2tQUE5hN00mU2l2U2tmfT11dVNLZVo5JUVxd1Ne
VFRNWGYzSW5RVXZIVGFxSHNLLS09eHJOe08KenZffnRXI3t3aHg7VW50RC04cXlWI0N9KHMrUiQ4
fEh1ZElxb0l4PmpeLVJ8fVVYPGYhYCZrcFdLaWE9eG57QDR5CnpqSml0fFJvV1FsTTNqMi1yKXB9
T05GNzhYY0ZjSEJgPUtCQyoycTxyI2o5PDl1SDlJTURmTnBPVDJ3bEEzJnA8Kgp6QkN2QFoqTyhR
OFJTblA5dVFUUk0lfCFJcW5nKXY2QzZ6JTVUVjJ9QGY2TlFOPUY0JTNuVWheOGgrQDEhSzZqck4K
ekpBYj5iX2RFM0c7UVcjdk0mOy07N2V+cDtYVURIfEcoXmhRMnJKP3YxeX1CNnt5RzNFaWJPVHB3
XnVmdS18NFhECnojJVN6YCQ5QzdBSihwZ05qeTBlXllQPjkxPCNCM18ybH0lXk9fWHpPbHNZRFUk
PE5ZZ1psM3A3UWdSQlViP3xLawp6QmlNTEohUExxKkMmeTsoQDhFVmBHNWxGWS04TDJ2TT4helpF
S1U9JipYPGpacnh0SCZjcDNGNlY9UnZKVFVfVSEKektZdiZzKElsV1A0PkxAc28xISgoUGl3VV5N
cmtnU1MldFBAZld0T0ZfNCVSUGBLO1FCPTtFTm43WiV1RyEwcDQtCnokQEU7Kzhvd3BXZTZDcHom
Tk9USXpVfjFYUUBFQyY5RE19YCYkY1o3KVVQP1M7ZGZ6QEwrNUQpc24mWHllX2o2LQp6a0c8KkZx
b0tJM2NuMiswYHRIfmBBVitOWUl7RENIcU1Va1dENyR8N3E9e2dDS2JuMTZWT2Mjc3FPVThJRz8z
bzMKekU3UnMlY0JVfDkwelIyb2hPPj9wdCMre2NDTiFtZiNgentZX3omKkdyNmpsRkduZEQ1NDNS
YHV6MWxULSVPZX0mCno3RnxsTTxQcClQKkNCUzdpYFU8UU4xSTdhZnZybGd5SERtT3MyKlRxJUI1
PmIxKWdxRSVSYiVxYEd0YmMrUSt3IQp6bTl7TkN8SHJvak1JJGBvJmEwd2pnTSk9SEhNPTlKeUJY
R0g/I21+b24jZGp2X1BsMylKaEd5VVpGZ3x6UFJiYUoKejJEM3x6IWY7dWE0SzNzc2p6Jn0mV3Fx
TmcqQ0tMelZiISYlbS1OazNSd21RMighYWs3Tml4MFNCQX49LV43R0xaCnpsX0lmQ3J5O1Y+d3hJ
PUBOJCEqNmtiIyFDPEJwYFVjOD0pYntZLTFfMzxQcn5FZGdOPnp4QER4XnluI2FyTU45Sgp6VGc9
UGR1c0YqN080Qz1ye3UpTnZkTGZZPWI+QHFQIXNVeExCYiRaWVZRckA/VWYwdGB0fldvUSV2b35N
PXlzREoKeno3ajdMbmUhS2NaaWwyVGl7X3hEe3BQX2RLYVUlS1lnVSV3Sn49JHhaQyVmXmVYKHVV
ckhob3tVaDhyR2BzdSpxCnpJaER+VHk3bmZsZDluT0pVUj9XMz4qSXpLWW9iUW1QOCZJZEsmbXhn
bCt3ckBrbipOUj92cndMPXV3K2lZKSpubwp6XzNIYHZFdDs9cyNOM2srTHMtPW5YXyNpalY9VUU5
OGFaKSVUNiVaIUMrdXQ3ZDJRPj8/QlM0aGNHZFFNZXduTWUKemsla3FtXyVyPW0xTXdjRWFxPytw
eVpScUB6d3loRCVScyZmJE49VCFNYiEyZTBVN2FtQHNGKWEqWCZiV0VwJi1JCnpuME11dWV4aTEt
WGh6a1gjU0AkSGFPU1AyLT41fmc3NT9YYz4kalpWd2I7RkZiRDtORDQtMmZQYyN2PHNRckowQQp6
bzgpRnRjM1kjbXM/dmpBcTN4SHBCbGxiZl5lP2oxU0AhZDtOYTRqNyRXKlJKej5FKyVDcU9QTS1Q
Uzdjc2M1KWkKelphQk4lWTQ3NjA3aERnYG9RLUxDX0poMnMyKGp9VUhtNjxyPTJuT31QQ1BMRT54
cHljOCFIMzlMUz5NVloqMCY9CnpGWnRWVWxRJkR5Vzt2eXdgKXYhSFgpaGViYXxjSjVFYHVfMmV5
JHNRR159eldkMlo9KGJ4JmJpX08kej4/UHQ9fAp6JUVobDxjR25PSDxEa08lQUQzQ0xATjtlUm1I
Z1l9dj9iV0hKS1NPYDB1TWRGckNgNSM+OUxWfHlnJW97YyF8UjAKek1vaUBvdExlXjkpaSFSbVpI
RHlnYEVURCRwamVGUjFoVWlUMzE/N2YwU15vfkNuPEVva0xKKUIwOyFFYWJ9aDdLCno1dm9JOFBD
MGxUQ0ghJHw0NjhKPWdqYiZ+eGE4cm10S3lfMyE8MFVNSkVOZUpvPTxTfWVJQEM4XzdCPmAwcHVV
Zgp6YD5lZDxES3hAZVopP1UyTGYjVHAkQS1VO01HRFM1cm5sWXlaTl4tMkEoX047dzU2fHFyZUNn
OGF5dXVMPyNiUWkKelJWOERKJUJhaEYqNnRtYmw8aF5UIUpiVzwyLThKRnE0bW9QY0VuendaXkAq
UHZoM2Nsenh2dWU+KjhLUGpwRTdiCnpkRWFmZ3lYaX1fdVF5WTZNXnhyKEk8amliPiRoKyVXQlR9
PiU8d19uakMlfXVXajhrN3hlSXZ6RnArb0RxLVhndgp6SCV7Kypla096ZWcqQl5yQEJ+aGkheVkk
YDhLRm5LVF5IUVgmQXVSNUoxamM7Sm9kSSp6JCVrRmRzMHI4cnErYFEKem9EK2YtKVJzVVdUP0BI
QkNZVlFfaispNGs5MXhwMWolb0pIR29efEg2N0lCJGtMRGZrfEU9IUFpa0tIRlV7cEFPCnp6JERR
O2JpfStvJURVIWIlR0hEWCVBP0ZkNDl+cU5AYnc+SyEqdWJwKT9Abjc3TG9wJjxne0M5ZiUrQThG
ODhFTwp6c1JIWm1rTWdRYkRYMTVzbypgWEtuXyZmaURtbW81dHpZa2haWjBpbTw/b0VxKFd2JnMj
OVBXNSk2aHUrPzhxYXQKemZSQTFsYEclOURMUWtqQCt0dkk9NDVWQk9hQFpwQXc1Iz5EOHhSJl4t
S3pIdD1TOHYhcGBHa3lSMyQwWTQyVXBgCnpkaiMmSjRCM1BYI1koKiQkZnpQSzd5K0djPX53S194
MkNmNHljflhBZXo+ZWZ1Zj56WVd5IURSZ0tnUGxsdzY7Mgp6N0xpalgjcGUtU29KYlUld2NJT1BB
RGdOaXZiTWNjaighVSQ2UUhFZUFBSi1rS2tpWkJDOHRmPCQwTGJtOGVmQ2oKendydj41MDUzQn5Y
dFhPb2IqN2FNKCNXTFl2P0Z3QkMjNlVPPCNwaFhDJlY2bHE7KisyYWZJcGY9LVpYbzBAbn19CnpX
NkdTUDBCPiYofDc4TjcwYi1LeTxMQyVHMl5LazhJUnJNez89SCh7OHZpZntnYlNNbjAhcV4jNGEr
VVJrZnNvNgp6dWVUMUdIRChneFQmU3tSMik4XyRGTWQqP15MdHckJno7dSQ/UTk7TDg1bTNVaDNw
YFFxdntJZzt8ITwjcnBPYWMKej5yJXhOdHZQZldDUGwtSDhQcTY2I3FfQXptYVgqTyk+Kll1T1Qr
RDZVRG9KcElhOSghJl4yT215TGc7UnFpRDE1Cnp5JlZlN1JiWVVUQDI8KDJ2Y3tBSzY+WVYjNEt5
TmkyeGU5ci1xemhpQTNmb0tWV3hTZChZKjtaMnMlRlFWPjJoRwp6cUp2eFNBUE98LXt1MGJPY2tT
MXdqMDQmM2k7WTl8cSgtdSY4RzNuT0lHbD4kYGNPPE1NfFpMJnVTNkRWYU4kS3EKemBDUl47RkF8
ZTVfTj8rQGx7X0JgXjlUVEhQWmIoNTBfYzdYcShfK1Njd21KKmJyS0wqcUdDMDxOSFJEeXFvSChp
CnpBfSUmOHd8dHRDSX16Mkh0TlhMdkc/aSshOzg3dGFRI2coUTRMdGI2dkc7JFAhNzdLezI1P3lM
QVlrQXR5KUl8LQp6JEFUYm5YaVVWcWImK0RCY3dNeDNlTjQxdXk/OHg4SXhJUm1RWWFPUkM2Y0ko
PnFSbF5WPmUwSCEoV3pFRUR6bVcKekp2Q2gtenI2Nz48MT1+R2BnMT42ajYqeHpkQmtqNE8pfTkt
KG03TElTNjg+aGA8Yisqa2hJVGlIdmR0PT40JGpoCnpOPiF4JG9eX0FVc2AmQDdiM2R4IWxlPWMw
bVNIbkEtVHRRbiZBdWRhX0ZHa3JXO0pNJkEkZTBZMXE3ZUBXSjh9Twp6TWw5bDBQVTcweTAqWU05
KHwqMjh5WTBeMitufXd8WXhEUWNxM0lSMEw2ZHB5JTByaXtMJl9lUWhjJk1ab25FJmgKenhxKzFX
VmA9R1pzPD5UfUJgYzJQbEV1ZTZSbGQ+fTZaRUhoZit6VFVPND89eSskY3FvX1ZTdHt2bnk/UjJz
OFJFCnpzZ1J0fEY3c3ZaOUtja18+VnVkOCVrb2M7U01HNSFTMzVpWGVQLW84JVNWVnVyck5OfFQz
NVp8WVZFRC1QckNHZAp6Tip+PFM3NE1wVWB8PElFS1U7bnFrX1lGbEYtJnJOZyZ1KzI5Y09FUCtu
V3M/PTcoLWgyKX1nc0V7VDZecUlgWXEKenEtVnBBNE8ySVEoIStPaThmUzBMbWcte0k2Um4rd21M
SytZTVFOM3RnU0hjIXdqYWheS3dqKiZAamYwVWlIV2sjCnpVK0g3Snd1KkJJUDBvfTAjS2VIeVNL
JDJlKSQzJD4+SGZDQUNHMHRCPG58OHZANDZ5UXp7S2lJRXoweSo+ajdGfAp6Rj5LXktIX352NUJg
MytQLT9OdGdQRUs3IzljWCgpWkZPRkpse1FQYVdlTH0tQmBHYCFlZTFIbFFDQyoxKVQmMm4KeipD
cWVEXiNJV2AqNWt9ZzN0RXkzbF80KUZKN1Nuc1JUdGNueWh1d0dAIUlQT0ktajRyX3ZeODdiXiQ2
Nl9yUERjCnpgQClhdzwzbkEoVXVzNlVuMjlnd2trZCRje0d4QnRQUn5+cjR+e0VHamBLTytsXjE3
amJIQ1ZUd2lyPGB0QHpsQAp6ckdlUEZKaDh9YW9gMVoyRHY7JE1VKFFDOFFeYyQwbj5IcCNVU3Yx
UTlKO1QlLWtRRERXOV5DJEA0KVV8UX1vVTEKel5uRDJTRlRYUFdkfWFKODM3cVFIY0NwVXAxRDBa
MSN2LUBGcFE+MFozVmtQNCZlWnZpdyRtJVBOQnVKbU8payQqCnoqMys4U0s2Vj5td18ldHEpOGQh
a05ncSkrVU5xOVY1bnI4bVE0anI1ajswLTNlPW5DbGRRRXp0en5YT3BUdH1VOQp6VmlBdF9ibV57
R183bWVKay1VamtGeyRCTnQ0alN7V3pfUHJuSHh0QkBsZmx4ckBmcWFUXiF6e0plQClKdj13SnoK
enxNcm9+PXwrQ2hDI3FWOSlBOTtpa05xQ1B5VXJgWnd3QT4lcWNSVSFKMmJSdEd8Qy1ubyFrMT4/
PlVIV3t5Z2MqCno/KDwpbCtVfFE2XnUqI3koVTtmUmtfSTwqQjtHNFYqa2dQNSE0cEhvQj53eXd2
dV9lRStgTF9ffEsmSHYtcn1+IQp6em48aihJKGpQXllEZDJ5YmtRKUxgVTNndDg9WWFvKDdMe0h2
JnVreDwlcj5uI21iTWIkVWk+RiFWVEYobmlqV0kKemVIMF8hKGJQak0pPCt1TTgqVk1kY0VefW0r
Zl47P15LR0JiODd5ZDhkcSRkaEpOSXB9LTVEejF1WW1XV1U5VSojCnpeZDBFLUIhO0ZFdFBiTyhx
eVlvSjg+P3Y3TV9RNChsfHhraDxgPTBQKjkxSmIpQjFKVXd8RyYrdTY/X15ZSlFiRgp6JDMqUDxg
dHkqUVUoSGV1bFZoVjU/I2w9cXQrWSorSU9ZP15BZDkraE52Q3F1JCpVVDtxSn03KWRFZGAmNTEh
S08KeiVBZllqZjRTQSRTTEIyPylBejtQeT5xVnArZntBK2V8IzB2YT54OVQ7YndDOER7KWducG1Y
V0RKOGRoTG5EazhiCnpXMXI/QDIpQ3RXSnFFZlcoJXNHTVZOKURDYG96a3NkJl8/QlJFfHp1WUB6
bCk2S0NWMlBEYHFDbk87RU41JVRIVQp6djl4aGlTamJtaiZtdnooZjlhPGBjPlZhdFomfk8yRlkj
VzxGNjZoa0I+SFl5PGlOe0N5VDkjeXRCYGV+cVQ1PHMKelRmRGVESHNQeTBCRmN8RVd0ayE+QjI7
LXZGWDglPE9Ua1FmWFM9NFNTM0Q/bkdSMjlhYzNycXhJaz89JHw2PEVSCnpVYXtXI0dvcFZxPDhF
TU5PT1pHVkA2YSR+K25IbXlzMylXMD9jVEtBeGh+UiFAI0lwNERUZ3VHcX1XOEJTYVR7dAp6bWNZ
bXp2fjghMUMjTWMjNFNNKj9zPHpFJHBBXzVwPUtaZ3QmTk04a0d+b05eQVBeIU5BUHswVWgpY01K
cmV3QVoKekQ0MSkzMHdJPG1FLTdrUlc2TS1DRlhEIVhyRG1wV2dTZG4hZyhnJiU0WCZBT3hNcGNp
K2NafHpZfVBjKighKUkwCnpiNnhNWmArVlU4b084SkV8Tlp+ez9rZW5le09xVU1EeUkhZyowNDRr
SjVqbiQ3XlpWYlhWbGU2WV4xS1F3Vn1iSgp6SGY+VDJ3V0BEJlRNezN7Wnt3ZEduSWBPNm9wYjVK
aChUXntkI2lUKlN9UzZxeG82SHEkTlclV0swQ1dLPF4wJiMKejE0diV0ZiQoaGZBRXVwP0x3MnIq
LTVrbSo4aWY1QmNqTWJCNXYzOTVZbmU+K3NeKyQ7KDdjIW41bSgzV2NfI31MCno+JWFOKjtgUDB7
K0ZxYCZaKj1ReFp6al8xJX52YXkpa0sjaypOd0k5c2w3PzkrNUYkb3hNUzZwVXUkTzF4d28jeAp6
NjNjcUAoQEkranY4NW9oT1I7YUJ3PnxfbENjck8hXlpVOHY2TFJkQHtDaTx7MkdVcXs/VFA3eDFt
UlN6I158djQKel9vRTxgcEd7M0BgNDcwSFRNdEswWkZ9d2U/YmUqMyRxXkN4aHY7MGQpeT1gNmJ0
bDxQOHo5TV9IeFNDcE0wZWUlCnpgPFE3RmV5XjRMPCohPUY5PWN1Sit3aHZIUmAlKT5PQnxOTnQ4
fEtlekFzfEZjMUEyKyohK0dzcWpKWmBuJX5+Pgp6S0V0N1ptVFlsKEkoS1ZTKzZrdVo/d0VjZzxv
ZypPYl8qfGdkVElvQFMmY3w/X2p6PjFDRXVjdSVgczxSa0NEUDIKek1DWGImPkFCJmhVWGVlJVJ0
dyRUcnI0IU1RNj08RFNqPnczaC1kVmR5eXUlNkplSUNnVWtxcnpJKExwVVFqS3lRCnptdiplLXYq
TztBTksleFdwbHs2UUl3MXQxXlBpN3JTOVcyfkdpX3Mzdn13QWJ6a1YkVypSO3tAb1lVITc4P0dg
ZAp6dHEqJnVjMlNwdVVpPVd+RSk3dW1YMClEVzFPQDF3PGIwIXEpZm5CPV5tVF5AKTBTTkImPWxY
K0kzfEkhOWFGLWwKemt9R28wMyVrZX5NQjUyKCU5Un5XdWFHYXwtYGc7RktoPHkzZUc0Y1NqKlFQ
N18zKHstN2RDOHxQSXtYPUxHJCZeCnpIU0tFTG0leX57QVd5JmgyM2d1PnQ5PC1kI0o/Tkktc3U/
P3tZMllhSXpMaGFpTDRqa1JBOEZxen5jcSZ7X25Gdwp6KHlnUG4peyEpMXk+SlZrPU5qZWskVj5j
R1JmKWtoTjxeJVF4Z2M3e2JwOEo3WipEZSE/QChPZVF2OGF4Y08rKGcKekNxdDAqdn52cHdSKWRy
YFJvQGN5bnFnXlN4NChDYSZxKGVNX3c0JW52fV5pSCg+N2hmck9ncXd5I2pmMEMxT2V8CnomeCt5
M3BrUjNaJTEwNHVAOD8/WUxRVHR9WDghIzkxfC1gUk8mcTs+LVhAe1pORDtRPDJjS2Y2R252ayl7
SUslSQp6JmZxbnhCRnxjJEhSVGtSK3RuPVBte0w1WEZiPFErOVFtbkpNe3VzdFAmTGY5IURfPkVU
RH5pYyopLShQS09NbkQKekwkUXZiYDloaHlEPzUxKyl6TG5IXkBTeyRwNCZHRyR9ZUgrXzZhP1Zx
QjlsZF9Jfk0tSCNJdTJCKlMpWlhKNGVBCno4WmpaK3l9UUZJRVE7a1AyYF9VJHpWcEB5akxKdlh1
Qz90c2VFTl5hYD5KanFhUk1mJWFFIUVAaHlGYzYrNzBHSgp6OUpvSFNgb3pXR3lZOXsoZUs1Vitj
eVhfbl5WbnxOblgjOz40cT90KUp3Pl5oLSMpNSZiU1J0R01jfkF3TWNnI0YKenlubT83U3Z4e0tJ
UHlCN0lPRFZeXzVhRTQhMlNMSHBzdEAxcTZMUDdES0spTCNwWD1saE5XZWV4d0pkS2MjVkhgCnph
KEhDYnVWNEsrbH5mY3hyZHYqUTNaNWN6QC1fWTVCekJIanNTdm1gK0RLKDE2WVFOQHBVT0FOISY8
e08lJXE7dAp6a3NDIXhqemM0QTgzSWcmeTg5PkJNfE1SVVp9LWZnJEZfVjdAbWZyTDdmZGh1JjJp
KUE/JT5ZWV9QeUBJbHxwVkMKem9OcV59aH5RUmEyOEg2bCNtK0V4QSFSQiRmNUMmM3pDQn5Ee1km
aHZPeEk+YWZLMmpfZHwhQ1Y4QEhXPFZzRSE/CnpeYUM0YnhOUSRiSkQrcVd7YD5JNExBKzxfaCpA
OU9qeF5iPnRnSDt+Z21Ed0luNTg7QUZKQ21lOWtAMChiS3d4VAp6b1BFNklNQSFwZF9PK0pkPTBA
KG1PMl5XbmZqQ2tvdDZsZjByUzdKeEVDKUQzdz55VkFqczE/YkA1WikmYXxyOEUKempvMj5eP00o
bUpwMlFOIU9ePCtoZHJTPVpjeTJFbzdKelpLOX5UO0w7M3A9YXI2VHxMSENSJm9QczglRHJ0cj91
Cnp3a20+TVdHZmVNNnlWP1IxMHA2KilBSCUlRUI0b28jMihxVF5VezF1WHslMjFFWk52O21mRUpV
bHVZKTdSQGctJAp6d1Y2YSoxTio/cChIRzJ3RkQjY0kyeWtpY3BMOVpEX2pLdmhHamBofVFgQXFD
KHg7QCpVQVFsZ3tRKjReWHQhZU0Kejw8Un14IyFjK21tNng3OG9TeXdDPDxFRnN4RSRRe0JRO2h6
WH1DbWUoUTVCe3dpSX1eQEU+KHdwcFFeZCoqeDctCnpeREFTWXlISVk2fEl5aVEkQStTLXklRyNO
aFRXQUpIMDllQCZiJiZGVWtZcmE5OVVuLTQ9K0UtVzNRQE9jZGwzMAp6ZCtXXiQ/SjlGZEtaRTM1
Q0hBbnp5T0pyakBEaDh0NTxpdDBneVM0KUtKJlU/NjVWPyRZKm5zYlojMjZBSWg1P08KenVCK0ZT
ZC1MWlh6ZlFuOFQ/YSZ5SyN7LVFqLWI4fCQ2cjFUJTFge0whSS1gKmN7OzA0QEQ3WT4hclE4Rloy
fXl4CnpPe2VSaSMmZERwSHZ3X1FTPkc2XypAM218K00/VSthJCQ5MzJPJHpBKHtjQVhiJW99Pz90
R0NBYDczIXtlJn5UNAp6NWpLYU9pWks3PypCO2pNLTFvRiFKQVN8MnN+bG0lWlUhYjRFNDlqXzlZ
TGAlMyY/VjlzOEx8Kys8ZlpPQSlMLUYKenA3R3xsI2c/P3pqb1ZfRVp3KTc9bDZQKDkyRW1OK0tn
YFpILUI/PVZYKlhCVXhucCE7YF9AeXc5fDctdyR9eyU4CnpaQClgellVZ2BJeCg8cmIwWWlPYkw3
ZXtYaihGKS1XJHtXeUQkZV5LT0h4RihRSkI4TC1AQ01BSV9ed3V3N3VrNAp6ZDAyYG4xOVNTd2Yl
RFNoZDAtblVXKjcxKmJ+NVpfbWhUTyg3dHkjOSpINGZNWj5YVUpRdW8hdHM5R2YjWldxcTsKeiVN
RjlSNXh5fXVhdlV+MjdDRmFZV35YQkFZRE5pSj4/YHBndmNgcTNDVEJGKT5LfGFDMS1QdFM0XiZ8
PTVKYjRXCnpWdD0jdUhAb1h6bEZITjlUO28wTHpOOUFvMHFMNDkzRlpOQShTSlRXNSotbFJDY0hU
aT8rNDR5I1BEPUY5fjVGRwp6SFNtdysraXlRVG03YUxzP1ctenAzTy0lcjhfXnlCcWlWWihWMHFA
PyVOTCt6NnRiUnZAakE4al8+TVpOJkRVd2sKelUrYiNfem08UXtGdDw9aj5WUmJEUz82U1BhIUo7
OW5qZjM1KChyMi16biR0O1BrZ2VRZWUqfSpfUlBjMk97bCYzCnpsT0skaCFuam92QXI/MSVMJSY1
YTR7TDA7OWhlN3NncVltYGNURzVRaSUoaGUwaHpZKD4hQlkpb2hDX0xMRClXRgp6Vlh6PzNUTyhg
PzJwIX57TSlkUFdhUVRrS3hyWU53cm4pMT54a1JyKiYoI0A2SFp8KSt5VVUkVTs9eyQ4OXYmRlcK
elpfNUlXa1dqXn0/MSY2cXlMSVped25PKHZaaUt6YWB3YXtlQ01PPkw+ZVU5SHppeG0pZGA4Q1l3
U2xxJkZLR1JMCno4QkRyeXtGa3ErMW8+Km1iLXxibHZRSnFgJEQ/JVRhLXd8MDJaQio/d3hfMmNZ
byRwbHVSODl3eDleO0wjZUd9agp6JHtrX0tYeUZuO3VyTnFWZDRmalJxYGB2NXlzMzA9Rzk+YnBQ
bUtXQSplP05sNzU5P2UmSUh1WW5mTXJNUm9TSEIKel45SCh2MDBeO3hncEc5XkRoakU2ciFAMHY0
WDJyIXB0PWxMNUsydHxETlc0fEFnMEY7OFlUJVNhI2g3IyZKc20wCnpLbHUxXnhIXjl5UEdqMU1y
WTdTTnNrUENQJn0oXyE/T2A1Z0NaVFB1dyphP2dXdChVaWQze00/dGFzNGs1bmc1Rgp6IXFyISVp
X1FeN1B4eT1RcFIrRWduKTROQT0lRzZANnx6MUdSJDB+eiY+JTl8ZkZ0QTVHTjg3UyooK3dAb0ty
Z3AKenNuLWQ8WU5mRjljbGsrPGtYbChgV29pcmtAeEJUai1jQm5EZkdud29MRns1UD88bCF3cGFM
UDIyTWBFQW85Knc8CnpEO2Y5OFJLU3ZOK3daIzdWQ1JzYnZOUWw0TTZ2PENeK01mc1FBSThlOXZ1
SDVlN2JFX2FsO0xfV3w0bD9xdk5LVgp6JUIwPCY4ZUdKMj1NRkBeSUomJiRCVkVGcSV5NE9HeXZ5
fW9nTGhucUo8d00wTE1rLXVPU1JwanlMV0orPXV9b3oKelR3QF41bSMlM149QDc9Xj9VPH1sQDYy
ezg4S0ZVdkx3eWxDPkZJVjZhKkRQVyZxekU/LVU4Si1wbUFuOyloZyR7CnpVKUNPMDRoQE5UQVVC
R0F6RDVjNDh+fHpfPmRvRmN2eXJQQ05hS2FmQEtETW81eig5dCprJU1WRTdJYWFEcUZudwp6R0wm
SzdYa1NVOXEzZThCUF5Fa1MwT3tfKStgV352NntxJmNCXj85ZDkmYTBodWAhXigpNEMxcW5ySDNH
O35ZSWMKektpcWApcVdMRjZ5U3lqQUwtcUZtc3VxMyFvMEklK1BfbzIyOUZFRjV6cFVvLSFPeFA8
OEsyV1c9VVR+O1okRUZkCnp2THVTbkVnZWhOeyF5fGxxe2U1a3BCNyNoPitBO2JTYjFHV0JzMH5I
IURIUnhjTDJBQmZkSFp6Uz9oNjU8I2AxTQp6PXA5JlE5VVIoKXBzNHdAemFlT1ZabHlma3JzO1VM
ZG4yRkNNRWNSXm1sWU4tLVNwKWFTVUBIZCRYOXxCTlpGfFQKejNKWDN3MDctS1QpUSo+bEZAVktS
N1M+NT87K04kVVRgTWFmUzdjVnVtdWF6KkQkYVQmdStpKHF1TVR+eDtofnBYCnpBVjAzTFVWIzV5
eXgxWmlVaEZ4cG8keVI3dHVkU0s+I2M9VGFfdlohPExgbjV7R1o2IVhScFhaY2goUFg9aXVFNAp6
Z3wxM3wwTUt0UlBLJGlebXJUI2RDI1JCZ3RhVzBmUWg/S3xyTT9JdTtOdmFBYUctaWBCNmtvemFQ
b1AkYkdkKk8KejNfPGpiajRnVjd4YmEjUyhKTCZKPDBsJThmQDFWYShaV1RvTkRzbjY4Y3I7OFNZ
UzJvaH45VlE9PVVFR1kqV0F4CnpyKWFaWkQodE5SUWFxOzF0YEtnWVUre1Z6Y2ZofGkoJXBfMnhx
ZzRnaUA/U0srcUV5ZWFVUkBHemwrKns2N1hnbQp6Tnd0aEcjdHklek99YUJea3B4PVlYPEw3SzE3
OHVqcjxZP2JjSmJSSk5KVG59dzdyLVRWUUctQDRfNmhySypWN1QKelZqOzlAeG1QKztXPF9VQjNJ
emMqOX1oQjA3MXM1KyoqX2RRSXUodGJrfmxYR01wJWQtaFhIbEtWMTJSR204K19BCnopYjVGYil3
YklQTGY8OEBwYStBYURoclMxSz4rSnNLTUQhNFJfZyg+Sm5wfXEtayZ5RU1UVjEkdzt+c2YlWk5T
cQp6emZpYVo5Z2d9PSNvQlNXVkR5PzMwWF9RViZja04rITEoeTZGTWFMIXJ+Uyo8SFdgU2tGQk0p
JVYhejI5Z1pJO04KelB+fVJ4YURaY01yVExJeipSNU5aYm95WSZSJWdlPD1tYU0zNFN9Nm5ENFdO
bSFrN1VISz9mVnROR2t0djx0X3JzCnorTlBsKkM8UnQzbjVwSylMPD57NntHQHlgI3IlQy1re1h+
YFFGYE5uZVlSfGc0PT9WMD1MKHdAR0JTWG8zeFpfLQp6ZU43NGNUejxeX0pwMSR6Si1hK2V7MHJ5
UlNEN2dgTDBKRXs0SGhiJFNkSmAkTGlgdXhvMGxLN1lwN0E4ZW0/VTQKellOIT4/XiNeNWVfbG54
OUAjfnJyISFlPDdGSH4hQWszeiNOKHpPNndlenAtSnp6PlFHQVR0UGc8aHRjK3ZZaHxFCno5JHA8
aGUpUnp6eTlIVk4qb216Tmx2PXZIWFk1aGBfXiM9ZERefmdXRXN5IzcmdXgxUigkYnZJYXI7VyRB
SkNmfQp6OFdFNlI/JTIlJlNleFRgZlNRPFR5e3tpOHEhbTRyWl9JWGFUSyo8JiVMIVkjLUtSYG1W
Q2Q5VmpqRUZFPVhMTCkKejljXiYoKXlaZXV5UVFeVDAkI2VsZH01Wnw4RitSOUE/NVFYbG1TUGw+
bH4mTXZ1THAxbiRSfF92Tj1VNT8ycnpeCnpKMW5qUVJWSXQkQ2tNUUFhNVJVe09mdzJ8NyY3PHpM
KzQrWkk1dTF+ISNwTX1XSlZ3IW1ZNT9gZX59bnIpfkU2Owp6Z2liV21CZDElSVZJb0l3TVc/ekVf
SkxmQ2s7eDs0R2FeVDhldjJwdUtIZWxaKHMtRytpfl5TO2Fucismc3cqPXwKeihoQiE1PSNWenR1
QWt4bFY3bGZ4bUl4VUNSMHAwZik5e1FgeX0xRih1KSYzVWlrJCgmYkJrJEB0eDN1RSk1PUxUCnpj
c3RESGoyWTdDWW80Q1QjIU1PYEZpOTkta2x3V1YpMHlGcCFvfT5nOERyTDhxdTE3UlgxcXVZdzFM
Z1FWNWUoYwp6UFRqZ2t7ajBVYEZ9VHtDPT0kajRfZjdZJF99RyVGI3FALThKQ2F6TG1jbGlgayhC
XlN5YmBCJnV+PU9TJlFAQ1AKeiMmQUxyeWYtLUx7UFcodSpWKlNOIUg1Zl5jPGFUWD5zIWtAbFVx
ZkVyZDFIWXtWMVZ7YXhiJHE2eS1IQWR4b31kCnpQdVFLPEl8R25zeUxpUE9Ae216Y1k4Vld0NGEx
clNidE5nfCkxNjBxdTZxMWN4LXhyJiM7aClDSzRQaClCNl52Ygp6VlgmYm09JXxBTXU3cnxQYlNJ
JE5aRGk8VTdhWlI8NEpkbVZPZks1fDM0VV50VzY8ZUhfK1RgQHM0bkt3V0FXcnMKemswbTdRP1c1
R2Z5QThrNzh6V3NSQWNLTClqMy1ZWEpxVzxDSjtWJUIzUCs1JW93WldVMHJzK2hXc3s5aUFqfkJk
CnpiQ3deUTA5NXIjSW4yOXRkOSZhcFhucDFQbzRjcUlXPiR2fCZ9SFZodi1yVkNOSit7ZDw/PjVI
TnlePFlENlg3Qgp6T3lebFI1SighLWwjZXdkM3FyY3JkUlk4QmcpbTZrdTw9WUY5XzljJitKfXhe
WUc/UHktJmFsREJVTUA1UGUxO2QKelh9UmRCLSNEOC0mMnFvSWFwfjQ2bmBZPH1hSk58QDFGZWxM
d1JFK1c2ZCFoTEVnWjh+UFc7TCErdW1OV3A/V1IjCnp1eyFkXmxJUjc9NF5ney07fTYmVTQzc3RJ
OW9vckMoJng0KzUoZVRzPldCZjNoeGFVN0tuPHE0OWk8QnYwP0p9cAp6SmpkKFZKMWYydCp7P2dp
dTN2KDI9Q3xxVmw3bDNacF9xNnNQWWpEbTBTTGtYZCg8MVA0NTwpVEA0I0JmTD8kMlkKem0/RW9A
PD0zeDh6XlowWEEtJkNOJV5MNElUUjdHPzZII20pTW5+X20kZk5fLWBmSDtVc3Q0SUlqNTxPWkMx
d2lnCnopdCZ9ez96T0UxISVxO3g3Pkl7LWJmVX15eyZrdCZRVWF3TkZSfD51JTJRUEIldm5OPWsh
MyNnU14jZHZham5IIQp6RE1OLU5MeTsoNHBzUnhDPWotTU4zK3pScjtTVEwwVlgmfEw/TlJSJUNF
fCg/dV5pU2VKVEM0YThXP1pXOUFadCEKekYlQWZgKm9MUyNGSWZgeTdTTnBCXytDUmFEK3E9IUxo
TXhWaXNNSzZaMWV5NStpenk1bzglTiY9V31tMGlePF5WCnpLN3M/KihscHRzTVB6YHpLJkN4WEhY
VEYtez1NU1hSTiMtKmN9ZT4qWXUrS0FyYnRWcWBDVShjQHY2YyVYbG9EKgp6V1VIPzw4TitwRUF1
MTd5RlgqTEhJJSZlRVM4MW5QcndlNH51aVZzRG5+V2hGbUJlZ3I8SjJLdmRUT0tiblJ+RGYKekJK
ekEjYU51USFPI2xsNlNyfCtxaXF9PWdkR0U+K3RGZSZrKUlXeCRjcV9KTFpTbkRidnBBRGYzXkdN
aytva282CnokQXhoTUw0Z1kzV2w0QnM0WHI3U3JyR1lnTDhHTXJrVmR8KmtaYCtHSTF0PD8qQG4w
QT1+QG12MjVhSXMtcy12Ngp6NmNMRTxwcGZhLXhecVpiIU5QZm9aQztKK0hjJmFOSj5GU0QjJG9+
WjM1bk4waW55YnReeDVeMEAke0c8ZXRDQXsKejszPVBIRkRTbDlXfFl0P3c8XkIkMzY4emtEUTE5
NzBNVUdPIVFUZnxBWlRjITM8NmtFRiZyRlZEZlItazFMUStjCnoyODNYUHpRQXQwUz9RJElOTCgx
fkh1Pn4/N3RBMkE3RFVhRlVYb0Y3Ri1LMzkzN3xIKnUoQEREXio9dSVleko+WAp6ZllkV2c4WjlS
VHVxcjh0RUVVTSQ+RzEkUkRJP2Z3MllKPGF0RlVzZFRwcWl7NWI7akRTNTRWOCM7Z0JnJXRybkYK
eitGd3ROejNNK2tKQ1Y/N3YqOD0+VSgqWWAtWU0yPjgjam84TShHKUQoaGI0LW9wWlc0cztPKTMl
cWRad2xWTGIpCnpDU3VvZHExZmlATkxSVTVHIWZzZnpBIVo4NShSYWdVJVU2ajIrPVhMaH1Qdlgp
Z1dkQ3pgNDZmKGZWJCQhQWc3NQp6T3VXPXJ7T2psMzY9YmtESn1xaGhmWThLXlZpKGVfXzt2fFJH
VE4lPHJ7UTc+KCZ5UXhMYk98XjkhVzluc2o+JEgKenR0UUQ2Mk9xe3c2VVFYIVJhdWVRX0teVSN3
TzN2TiVXXjlGcGJ7OGg1dXx3ZHUrUzg5YmlWMjgqI2tlM0wwTnY8Cnoodm5ZdWxyK0QxVER2e09T
YkF3aWw5RWJKVlgrJTJxTTBCaCslUl9MWjtvKTslQjg8UXpxekV4X1p8REZZczFoNwp6ZjElN1FH
SVojV2JtMitgPXRyZH1CQDZfR1g4ay1rIyUhSlpgNEpoSFZUSCtUNCNYSmZkSmVITE8qWUcqYTdI
ZkAKelBDJn41dCsocDswc3RfTlNmejRTRGBsb1ZLLVIjM3FLLT5DMEo4QyslfGBHIWU3WDRTMHs5
KXtzQkBtfGVQXyh4CnpkdU8xbGxISVd2SCk7ZkxeVTV9eTlidX08PlJybU5ee2c9bklSVTdFU2la
QkpyIzs9Q3pRMGFjU0dMYkxodHtxTwp6PUM/b1dRI05RYXtnaEp6MHwwamZ4QGF8O2M/JCg5Wll1
WVczU3d6KG1yRHtBX1IoUCpKUmtebHVReDQ5LUpGWU4KenlIVWlmc0VXISs3PHx5ZEg1YSZSRHFH
ZSVZJlpyc3ZxbE8pKU1nJTxrPV5Od2FXPW4hSEByVHc+SkBIcE4hYXdTCnphPlB8ZTlKZmRZdUtr
VThJMHJxUm1xNmAyaVRKTTs+cUQwPFNzI2dZJFBJQGE4Ry01UnhPIW5jNmdYLVJfbm1QaAp6TD40
Zi1iPFB9VSFQcFpeezYjQ3AxMSZPUHVEfWs/XzxDbkF0X0l7czs2ZWFjUVZzZTYzZllkWnI2OXhJ
JCp3JmQKeldibkRuJkZmVXtvOWItWT56TnhKKktHODd1dyElV3BYTk8hQTRWZDd4ZGVAVXpydDNR
cGs4N29LdFZTVzlzdTQ8CnpTIWE5bSYoakt7WkNaWW9KJEhIS3d5IVlLIyQrOEBKOWxFPU43dDVw
ZDBscSF5VUQoYHVPQ0V0N2lfO3liWD5pTQp6QC04WV5aIWJsRHB3azhBaXNgbWk2UF5CbmtZbGdF
KnNzSCpWJXBNOVB0cDckU1FFN0xwaDgmMkY3RlYoYUImMDgKek1YfUdpNWpwX3VBOSY0aXloWUMy
bW5zLVE2OE5sQExiJEEjS0BAKGRxdjF5Jj9hSEE+RmBwTn1jencqVmFrMyNICnpmbExpVWomNlhh
c1krIVh6Q2V5RGFMfThmK08mSHhpYHx8JENnYk1JeUBJdyUqMlU3aTMqeDImRTNJfVFaNHRwUQp6
Nl5uTXcoIXk1RD84RFNYKXJSUCooez1gcXMpdiVNOG9aIUgrWUNlJkxWbVFASUNPdCgqPDhzKUpy
QHJPdVQ8VkgKek5HczR4NShpRGc1U2U0VWFNKnN0NC0xJmdYbUU2T1IwUDlFUFN5bXBvV0x4KHdv
Z2pMc0tfRH12RTU1NCZYUENDCnpnRUBHRXdAZlg9KzUrS0woOGMzVik4MmBSKS1Ndkhefmc8TFJL
YiFaWit9Sj5zezRXZmJpNEtWMSh9Pkk0YHpicwp6ais3aTdhQVE4elEkRDx4SGhTdWt8RUliI2Ff
OTE+QFJ6QUs7P1gmTzYzLUVLZTQlZ3NkYUYzSnslQ3lKMzBjVUEKekU2eWVWWkRGRWY9eTNfTCZO
KUZqVH1MWnxfdCUkWS1PY2MhT1g2WkR0UHtia2x0JE91N041cD5vUEp0SW1QZjBGCnoqUmlZWWVv
T29MK2h6fUVLRU1UMGdlRzVQRHtIVCFEaGxBRiE7bGxRRHxXTUNWdVRYdDNyaCNkVH1yS3ozNWZz
aAp6eHI7ND0hZV8rRVRMKyFnSGk7PWpDcEVPZVp3WlQ+Q1pXTjBJWDJsdnMlJEZUQVlGQWJEOHhY
RUw/V0AmbkwkNVUKekpyRXZoJmM5fUI+KX5sNzNBbzREWmRZQlpPKz4yYW9wKDJLTDMmJEYkPXRE
MztvMXdrY2F5IT4tMyR1Ql9DZXIoCnphTVM/bTk7YWloNWVZT2xtfTZhUiFiKU5wWWFRfFJiLWZ4
QWJlcHdCJlAhJEhsYn5MfmF3fGohY1NhKjkjVSZ6Zgp6a2Y0TDg3b2VaKC1+clNjOz1DPT1zYDgx
aF9eKUl4JktIPmwhMnokdEo8UHVJOXRNfmgyIVIzdzJIQSNmNnxvflMKejByNG1USz1hS2ZBOzUk
I1BOQkJHKl5sMlh3NWNOJk10Kmw7I1ZwYGlAPkhga0A5cll3LVFELXV7NCp1cF5mJU9ICnopNHpX
Y09PUG45Wko1I3R2MnBxdz1kTDtGSDFDNkhpbHR3JlpYR1BhX2lsU3QjO0Vqel9eaHchP2lsNHtD
eWpmUAp6bU5VNU1uWihOUmZ0VzdiWDspVj5YKkBMTzM9SVIocDVsJkwybi1EVFI9THRBOy1vcD0q
MUx6ZTlHUyo/U29HVioKei0oNnx3Vlg+ZDBQbjUmUFZeV1YwYjVCdnk8eiNoOTtgKD8rO1hwVnd4
K0BuMl5Ea2tmVXxHdE93TGFIMyowdzMyCnp0Ozw3SnxEYUc1b3Zeb2F3YFUkUSg5I2QycGFhcUgq
Uy1ERnc5S0ZLPTReTHo2NmlsRkpsa1pOdE4ta257ZC1zRAp6I2JUNSEzfCZ6YHdsMTxIOVktdGNK
eXxlRjdfITlUPHo1PEMhaVM0N3RqaSVKbkhDTmo8QzZlQWVCaGJSMG17emQKenV6SGNtOCgjKm9x
JllyXyZfUm1RRksmUHtHPyRGI2o/YS1PcmB9QjRZTHBIamdEXj90Qn1DI1VOUHpTPjB4Pm5QCnpt
JX5Ja2JKTlYtYSNeY0otVH12ZV9LXntOZmQmWUpaNUQkLTVMcEkxYVc0U3VOQTJ4eHRQVTJkbHU9
YEtHcGRIPAp6ZkZkX1pMeCVpY18yYyNiUGM7N1hpazNLKiNwQTNaakYhKk1wSEZ9OHtIKiRYXjdI
WX03ZTFkbkgtRyRJQTxhZjMKemNZaXI+Y0cxRCRNZzxPUnVCPkUqKmIpQWA2Wigoa20oZlQwPiZw
SUVKMjB8e0o1WmswYVdqYkQ5eHghMGchSkM0Cno3RWZvJk40c3BOTFk4d25qYHtTQ08zUHQ4dWVN
YS08MGtGd2kjeTVGUHRCcGNqJEt8SGlDbkQlZ2FjfmpgKH1sMQp6RFVfd01rN3AyKisqRCsqS2tV
YnEwJFhfaTFzQXdxSlJ+MTUhT1JoPyFleG5RVHdFaGI4cTZ6b3ImQDdtOEswZDkKekJFeyZ6YTtJ
YTJPPCRreng/MFBZJjJgU088QW82WiFPVyQrcHA9IUhaOFA+NF5AK3g5c0NtYlZicEB8JV9uYEFl
CnpTc3ttPXA2cyo1YCotY2p5aiZpPFhOZDAjKUQxeDVkeDhLaEZhVzhqOyp0S3w2elhFKlowQGBA
c200UW9RQVJNZgp6JDJ3P1cpX3pyX3ZzcmxURSNPUEhDUz97UjE1SStuV2UxUW9nTEcxeFNnU0xL
RSNAWDFhQ1dJfURMQEY5dSp9YEUKenxGbEkwMjtkN2BBcGpPeHVNclpfJlY/NEAmMiRWOTNDQ21Q
ank3bigwNisqcEJAcFMzTGl0KyV4TTJWfE4oMm8yCnpVU0xgVDxEZSh6dGVMe3hXdCtiNlRpYDZR
dTsmWGdIWDFAN144V3o8NU03dEFaKk1leTtzayM7R0o1WGtLan4qXwp6PD1INz5FKGxiMjclI2FD
SDZ3ITleMFM1M1dsfGJXRUd+SCtiYHNnd1I4ezJhSGU4JDFzTFB0PDZ9YzhSeDlqemQKenlVdEkk
QzwpU2xONn1vQypwZmwoNmA8cHF4Q1gyPGBVeGkpNW1ydF57V3dgKTc1NkJnV0xOZTxaaHpGa1pF
cXhPCnpjOVdgfllNQFdLbz1EVVI/MDh0KXt2Rmhzc3w3WFppZFVGVDUhS2ZaNG1MI0NiPmFQPWh6
RERtNFVyU3JraWh0Xwp6dU40R0RAJGxlO0J9K1daOVNOZmp4emNTc1JeeXo4UVJrWWFRWll+aGVO
P1YoMj1kIyhkYmFhUyQyVkk7cFp4WmIKekt3NykpJSUpSEtlQnY8d1pqO1JYV2BLcFNnSEJaRUdR
Y1BGTC1Gdjc/eWhAXlRAaFNZYTQ/VD94Qkx9YFdEVk13CnpyNytsQ2dzclh+JUlIWHAxbm5HWV5P
IzY8WTdlMEdzPklPbmYybk5DYlFpV2xxaiohPEk/OGw5WjR7UmU1KkhCPQp6aThFOENRaU1yJkNv
eGxjJG5zJVA0c1BfTXhHPm8pVFR6N04xOT5vajNjMyVINl9pM1hQLVJtSWZzSnoyT0ctIS0KejhB
SnVuNFheZilPQzZBbT1sNXxvdVZ3UHlrK2E5NDxVI3RuR2ltUjBgRTQ1flhhN0VUfEVhbUZ2QUNl
MUI4NWE0Cno9WDN9cFRWckRhSnN9XjBlZHhMfUFyej5BMEghLXNMQiloO0lTVSlXdWA/M2JUd21w
OCt9Wkx8IVVuenlPSlpsfQp6MUYwcjBjVGs5dTZgKjZpX2R7SiUtTEhEJnFTUlolJGFAfWkjWD1+
ZV8lSmY3QE5uKTw1IXA9KTIlMnNgP3JoUSYKekNtQjduRkN0TUNUQVY9ejNFMXBSKDwoVVNKaWJr
Q21QfV9VMy1ze3tZJSlMQWwqWENgX05vJFB2e3c+cEA4JD94Cnp5TTJ0YyFCdSNIdjFtY3ZTXnMl
ciNvPlk3ZEZMWHwtfWBGa3MtRig1YEVMN1g7VyYhPzN1UH1kX09pNT1EPGBEeAp6eyEhOX1VMylo
UzB7Q3AzdkZHcz40TERiS3RgRWFQdk1FIVZgfTJWczFleEZtQFQ/JmZuKmxpWXZWeSp7KXlQRUwK
ekNNZlBLQW5lMTZtbHZ7R0RxZW1uT1o3ZnJrajgpVDBQV3RwYDJoP1RTWmMqITRVOW5ydFFkekUr
aU9tQkNJP1djCnooPFlmZVluJUdvZk5UWDVTUl5DeFctPWZ7IzUlRS07JUZnb1lOaWJsa1BRT05v
ZENgVExleHdEejJYeEckJC0pdgp6aiROQkBDb2UoTVB6TXwhdFg8aGx2KDBtWUJSd01MbCY/cTVl
RVdPaFZCSkF+bHJPNCh2JWFOSFB+T3VKbWQ/bEQKentqazY2Z1ZOWUxNSkt0d3xEZGs+QVFBZT5X
WGVOMEApdzZzYD5zQkQ+TTA+S3pKJCs/ODxnc19rXjw0ent6dEBSCnpAbXpRX20xZ2JWUmEoNSNE
OGZuR1k9bnY4aWdMfEwxSmcjcz9vaiV8czlqLXB0fTljUVQkcmZHdTNObzs5dXF2egp6WHBScUJx
fVlpMXpANFF9JGk8ZHZaO002V2tFSXoyc0R6YjJ0WFAtY1lXViY9TUV9KWF6ZT1UeyQ0XmpjbGpj
cloKenRIYTJ5eDsqQVhuYFNHYE08TlFqc2lnWDFzSHBKcUF9ZntVZkJkaFZ7WXs+SU1abiV3dyRB
ZitFYCpNfl80ejhpCnpKQmlhbjxUZjctNjEjLSNJVFR5KUppUUBQYVpDdFVmWHpiYiN7diokI2My
UkcyPEJVVHNTR0c8UXI7V05MWmtmQAp6MGReKUQ4N00+d1pJRDgodCozQn1ScjhWd0hYN3Z4Vmkq
N2NuZyRVSGMmfFlhakZATCZ0UWwqTEEzJH5nez5XdXYKentnOV4mZSlYTiVUXlZxdkJtQFFjQCZO
e1ZrX2NlMyFFK3pTPVZZTkowRzZUSWFAaFZnNWpZdzEjZE9LO3BLeXQjCnooJWsqO29eXlhUcVg+
VlZeVHM+Z3c/MDJUKzZ1azlfUispQkVvVWImeDNzNlVYTTQxeTV+PjAkc1NyPkJuVjk3Ygp6Mjtl
YT57a2Q1VXQhI3E2d1lnYmpkfXozJXAyeyY8ODJvNlQ9dlVVI2N9RUJ2TV5Gdz9zRz4mdSFlUiVQ
JnxaakQKenk1WkV1I3FvPC03U0hAPTVSMCFvQGJSdjI9az5RRmNfREYjZld+K2s1c0ZoUyVUen5Y
dlJhamlXd0VxfWgpbVhZCnopTDg8RXY2RHY+IVE9WUpIa3hYTFA/c2wmYShoZFpJPFh+aFhVNiYz
X34zaTI9a1owWTIqcnQoPVA+SXI2aEYxTgp6S28mRzBNSURqd1peWjhHRHxmT3dYWHp9U1lBbn16
TzxaZnl5SXdvZ3hzdW5mMDVPfWNhNSltK29lMExsaURRfWUKenAyamVuRFNWKHpmO1VVP0tyY2lG
cGdJRD9QP0A2bGk0bVk1TFIrWmJUSTs0QjVOai12UVYzSkE3QE9YMXZFaD5wCnpDNnBDTUNhI2BE
UGZEU01uTElTciZtTCtwbCZCVExQNTVAdkdNRXxlekJMJD96YF9gaDUqZiNZWHR1fTR0PXxPRQp6
MVlqTjtUPytZQyNzWGkoJTNKYGUoZ0NvfSpGbn1PPGxFdSNUY0VeQk19SElRI1B8eFJgPU1EWVYz
eShGUEJUSEcKenBsQGFyOTRremlkejhLQEF5IXAoe3pfODB1fntSUGxiWFMjZ3RzbmxISFJLX2J6
flpkOV9qcGltNTt6TCVaSnw7CnooQEhWNlglKX55RFhwWU4+OUNYKHV4bWdZemNxX21sa1ZxbF5C
WUFyYFBhV0taVldHYnB5PGBRKl8tb19jeXV9PQp6eyowXmIyVFNiNWAzXjxxQnhvbkVZUip2TTll
PWRhaCprb3g2Pz9XNHQlQHZXMWAqfXJwdyFpQW5EQXFrSWBgNn0Kej5NfHV9d2E3UF54NHd6bnNx
TC1FaENSKnVIVExEOXJeeXxHQzg5ejVVMWR7dXB1ZkxzenFSWFNYcjtabjw+OEhyCnp0QXx9dUMh
TV9gVSN5az1jPDBlLUo3fDQ8Xilla2hmSl95Y2hjeihCbCp3S1RmamkweVdVKE9FQ1RJYysqYTY5
SQp6Zk4mYjVsPEQySHZTaHhXI0ZDWUVAI3ohTGJPbzFCQjIzSzFiRChXZzRBPmlzNDU5UWRHKFUj
cykrMXppZHBYUG4KelpqaClqVTFGJThtP29QSEFAOWF5OT5mbCN5T2ZaIVJHfkZwVmM3dVVXZV80
ZEFGeF84bDkwZjtFOH5PVU10UEFGCnpfQ1FOMFYrfWRRe14jbj5Yc2oheEFAfGM/aXw/bUlVNl9E
M25VM0d6PHFiJW4xNGpxOFloMmtYQV53IyNDJD1LJQp6T2poVys7S0pQTm0oNm95ZVJFVD5MVHdm
NC0zTE5Dc2FgaVMqRWQkVm0oX3R9eXRhPlF6JGAkOSh3emZiRilMYFYKemdDLX5uTUdGaFFsV3s2
NG42c2FabnhhVS1pQm9iIS1XRD1gejtQY0ZGZGgqKXdoaCFnNW9maXdzLTVoTXg4WH0rCnpkfFVF
aGRAOVQ7MHA+JE4jdDt7MWM/UWhCX34rKFNyLStyZF5WJnwqWSlDPDwxMkZ4MlB2Y299LVFGd3Zq
ciFAVwp6cWFvaWNJfTQtK3teWjFvciR5fT9PNHdkfjVheHZGSm87P1o8Pz5GdUAwPTVXYFhhKWF2
JSN9QUAyUVQjQD1Xdm0KelZsa2ooa0B2bDNrbmB9NjV2dUgjTTxsOHBBYFMrSyExN2QpP1J+KGk1
T3xgTGM/PFhxezJNaTA7fFIxRHBJVTJKCnpFKDR4Zy1EYVd5N1IqPWcrRn1xY0JYJmB5I3I4bGcy
XmZWRGFUXmZOZiteem1laE5lSEl0aUkmTjhqNSsheHFTPgp6bTAmY0RXX0FUT2ZOQntDeFgxeXJA
S097QUNSPXxNcGNeRXE0ZD5neWQ/K0tkTV8xKkZieG02c3pqKzdDJkU7aX0KenpzPkpGIyhTMHBr
dTJHQm5QQH5OQUZ1NGB7Z3hWQFc0d0lISjlubnJGVnwyRjY5aGt4T2o8Sn17UGwheSFtYURrCnpz
WEhmd3tObnQ0RzlYOXxKMTJucmkyJFhyMlhtTGM3PXokTVZieVQtc0RIIzU1LTVVQG1MMTR5YTh0
VWZfQm9lIwp6YW1NVF9ILWw0RHolO3hsR2FWa3IweSlFWUlCQC0maXZeYXEtUVB6anpJbEc+IXUw
LSg/UXlnUWVUd0xmUlA3dVQKem9+P2FNdFhDZ2VLencpOHNie21iUDVEWTlTe3swclkjN2t3SlUh
cG16aj1Ncis8dD1MKEJCWllRNE9tPFQ+UmI3Cno8SkdCIzEzS0N7KHhXfUFqcVhGX3BwYXY5aFpU
NVBXdEZwVkxKcWYtIUtAKyRuTG1fYU8mT2JMWCFeIWFqKSlgKAp6KiN6TDZvI200VmJxcT81LSQy
WjYxcX1vTVJ8dTcqX2BhKHFQd14memFncyh8azc5I3ckZylmajM7LXgqRz9jN3AKejI4S2wzVG14
Wm1Aa2RYQTgxc1koNzF1M3kxMjYjRG9WazNYMUg9S0dDIXppMSEkPnFJPWd4WDBHV2xjcXhkTk9f
Cnp2ND1YI1VTKzBYV2Y5Qmd0UEB9c2cpSEFESXNMWU1fJXhlJGB1dk0pXjlJQGFFazhhaWJLNyVZ
Vm44YjBia1RSRQp6dlBrKmhKJWhOK2Jwe3o5NnAoMEI1Wl55JEZgZ2F1RlB1NThKZX1DK21oVnNM
JXA0VTN6bjFFaXA7Qm5aVTNHJFMKeio9YUI2MElsaCg8eWA/dHpubURsXiV5JWojWSpvdmNNa3dl
MiYlIVFla2dKZlFiNEFoallRVFpoZD04NER3RiNaCnowVGolYnZMZUtBS20yYF5EakRURDZqZHYr
TDZoS25Dd2hVXmtwfGolTSNmb1gjPU9oLW0rR284WW82ZXJMOD9pLQp6QThFUkB0c2ohUHxFd0ti
VUZMbmQ4KWUhZktBVT1mTn4kaTBvRXE/cUxpPTduPURTYHlIJmwxcVVzRTB7RT1FSG0KemBLVzxG
bzZjIz1nPylGPntae3FWMEY9b0M8dzgzXnYlY2dES20hbzEoTFc3ak4zPzBwTDx9d1hXUHEwM3tW
ZiFCCno4XmE3Vj9qQDd1dCRpWUpHSG51clorTCZ0NEUrKlJKJUJLTm8pbjBHU2l4ZmFAZz9+RHdV
d2RXYXQ8KjZ5SWkqSQp6eiVwbylRWWVObzJpSmlIaEc4MXV6K15DPjxPVXdGMjBMVX5JNGxuPUZw
Mj5+Rmo8RDZLaCMtdTU1cUJSVUB5PUMKelZoXjteNyRgRGkpKy1We1p1ZUxJKnUkNjdNJCp7fXtW
eXxicE1BJCNAMz57cG4pc3gpTDhEZlA8KDNaJF5jcm1OCnpedVVfdz8ha0wpWD9WQlBuQURwMHFZ
PHhiJWthVChYOVdpQkxWTSN2MSQpY0JTR0I9b3goQkw3dX4obGpKVy0qewp6TU1YTTEpSnN8fD5P
ZnsyZkYjNElYMnFhenNqVzNaRUVwJGBgfVljY0U0dmdjOWZqTXJuPDAjNDI9YXU9M3pFNmQKenlO
SF8rRlFhOTljOyRYKklRdnt2aCN2WWo8Sl9LQzJQKjgmNEJRV14rVHlke0ltKCM3Yj91fVJ4IXZZ
ZzFXcnQ8Cnp6QyZvd3R5a196dU1TVW5abX1kfTkob3tNa2Y+YnJzemlWbHdFN25FbTElZnB5VD1m
NTM/TXs4JE85YDFuJHBiQwp6SzhsVkFqTVlMMCNSNCpXY1pWMD5eaCp9WER3ayYjQk5POV9xM3pC
fUJEK3lpczYrTzc7U29ZcWpUKno/PCo/WjMKejkwc29EI0FZO1cocEFpYExyfUBZbk1SLWxnYjBA
YTlXN014REdRJEhUbVo+S2JyZ2dUKXYqfj9oODtqTEk8I1F7ClpHI01Ve1M9WE5CVmolU341KWZB
eCpGKHwze3tYZzFWKCRPfAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Jl
c291cmNlcy90ZXN0LnBkZiBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Jlc291cmNlcy90ZXN0
LnBkZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQyNGMxOWQ5OGI2MjFmZWFkZjNl
NGQ2MWY3YmZmNDcxMDdhMzc0ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKbGl0ZXJhbCA3NDIx
CnpjbWFpM2J5JD8hd15vckY1SlhUPzg1S2x3ZEklQU9mdVh4d1ZyWFZ5Mm11S0pOa0sjO2dgcT0y
UWpuQkpxKE0/Nwp6QzhRKC1yMVp7cyYrbylOX2RmU35vO353QFlwP3lUKnpld2R0aWBQXmdCRkFj
ITIjVEAqeyRgaFJqcHxOQz1kKzkKelM9YS1fI1gtcyN0Y3t5MzVKcj99ZzN4eDNaV3VmVz9QJV9Y
ay09RXZ0U31OMTA5UTlXI0BxP3VuWmd9VzJSSjhuCnpAJS0qIyM4ZExJQnd0UWlNaEBIaTlebV54
WWwoNikoRHMyek9oeyZXYT9tVWEybG11WVFqfWpZWG5ETDUmYHIxWQp6RjNKZyVvVF8tP1lWbzRX
e3ZBND0wR1NgVjFwPk50Yyh7Z1ltRC0xaU8jRVI2ZWdQe2lJWHF+V0wybE4hITcye0cKelY2RmJK
T25mNmIzbjJNT2RWeFM3cX1rc3gjSj9nent2VlAyNWgoO0gwKXZiRUoqLTgyVXY+ODdCPihCcGFS
WmI8Cno+Y3t0RSU9TDxiJnQ5aX4ySTt0a2UjR14tRUNAVkgjZEhyRU0qcW8yfE18d2B0TnUjdEND
O1l+WDVQek8lKylTOQp6WHpLblhKSUpHQ3B8VTE8aWZnUFU+NlU2PD97fENAYHdaT21eeWJ8OSgo
XnRRI0A0JnY2bGJId0hjWGEoKjJRQG8KejlRdmcjQTRuVzslSkkyPz1fYklHMC1rY1k3OE8yRVAw
N3drUVVKWWZoSEIwJGM1OXMqNTxiSlNKSEd4eUo5d0ctCnoqViFoJl5VcmVGWDhmJWo1OWVQLXBJ
ZWI9S1hxbD85PUR3XmVGYURkMjFBZjQ+RkV4S0A+aDBkcjJKMFh2e3pscAp6ZFhDJVF6Zig5b2gy
MVF9dF42e0g3VmpZMiluMGU0RDAjKVhkYDE5SD1efT1fe05TVEswb3sxNnZyZ2hwdGE0UCMKeihk
OT4pdlhVPnVgdSlWV1hvcXQwWkJgUGBgQDQwY0hDNFBxN1BWSWVFfVp5KCozUWN+NkljLTFiZik2
TkhYLVZpCnpadEh2ZlBJRSkmOyNLfjQkTTFTPjFwVFZteTZ7Nk5DOFhMTW9KRG55PmVkYGthZFgt
PEFUOWpgX0J6WD5jZnA3Swp6Ukw1N30xfEMoS0YhZVJMcmtPSmIrUlE+dlJ0T3I+VkRlfmxBJUEq
WXRsPHdFJDJpcz4mdW5MRHclRXw4N2NxQUAKem5JZ0t7VE45PDllJiMrVTd3PUNBK358NHVVUih8
bGA0WkFuPXVEdEJ8SDNydDx5fTBWSjQxOEMjbkVhPnVpU0ohCnpKNUZWOUFuekFvR1ZXSmYhUDkx
c0EyJXdTZSU2VmItVTV9MXJNeHJzSlBZeGFqajdSI0dtIUVDP2NOUWtJbFhONAp6XklWNVpHKCVD
VVhtOGFjSE8kVkBhalMyYC1NVShvM0hgVUohSjNBZjxKWSMxQ2s+NzJkcH0qWHBSQ1BzYWMjeyMK
em5xO2YpSFpVcDZtfSlmVHREdSYoanZhalZHSGM4WlZQSm9gNk1EWWpSMT9WZVZOb05BS09zPHhY
RUJFYlZEVyVECnp2cGcpYnNSM0VlcVNNcCVQX1YmUClGVWxOKnkqY0Qxc0ElRUl5cSR8KTlsalhu
RDJBWFV8UDQoNz5TTThCVXZ3bgp6ajBiI2h6MUx2VF92NE4kKk4+anVeMnQ9ciVydjlwTktRUEVe
SlQkRmx7bXlzJldxVX4xWGpNd3Vme3kqJno+T0gKekVRYDgqVVRiY3F5eT8tY1AmKW4hNH1WOChJ
YGAwMWlOZkJ8WiQrRVdUKUVSUzFDaVg+TWNDTWk3dGlMb1JJYUxxCnoofkxhWFJXcElLNWJ8JDYp
TWtzaSVOOVN1YUAxR3heWUQtZDZOYEhOIVV3LU5jbzAjI15WVjRLQFQ1RWx5KXBGJAp6c2spcWNK
LW4hI28hak43V2ZNTC1oa2k0ejRTTU8jPU59TXQ9JWNOXmVvOEl+bUBfcm4jMzFSQCYyWTR4LX1P
NVcKentZSW15UGA0dlpePmlFa0trIWkhUnVpSElzbXI7dzlQakpwck9hSFY/dkFfKlJCY2xhe0FK
eCRIRE0zaUUxNyZPCnpwPiU9amRgbSMkcSt7aWxtUkB9K0M5QnUjSjFJLUQ8Q1lFUU97PXJhdFRW
TU0tV0txI1dGXjw9XmQ+Kmxaa2JxTAp6cnwkMWdYfFVBWnghSTl0dWBfalRKK0h4eWsxSCRYKnIt
cT94Z1FvRHdkdlFjK2cyb289OC1rZmQwTHUyX0wqKisKel9ha09IQTYpWkpCYHY7NDxYI1EwbiZT
JkZaUFlALSR6YWN+MFR+OTBpPlZ7e2ZmJk5rYm17dXVefD5nXygpKU1uCnozK1FObHJhYXJCSm1z
fFljeHowPiQ2OTA+VD0xOGJuIVpjZCtwWi1mWXZ4VD4oOFJ7VVYydGM5cE58UXUwVWdoNAp6VFJ7
T2ZpeWJaS0xHS0FOX0tYPzFDXyQlanl+VXIwVFB1a0lHUjBZKklaQCV9Zyh+fnwzK0U0JTx+JHt4
OzQ9OTsKejZtJkxQPW9kKjwpNk8+MEExQ2Yhb0s4e1REbyZwaHNyJUlrKSpNZiEzbGlqVVNaOU91
PXVofjs7aEZibmYhRSg0Cno9UVI0dDloYC00JXRwTVp2VWlBT3h1dldCclVVKihhZ2clPnZ3cXVP
UDVyVntVZSZCVTlEI3dUOFYlVTVScCR1WAp6QWNFezZGdEU0bj9maG4pJU1QNyFYRTN4TzhadTFY
SHpzIzJeZHBvYGhhVFU0aCV6XjE1MDtZPkI/fTRrdlZRSVQKelpFb2AlanJscUQwekZuaEV7QylK
SHdyemgtVlglUUdwKktBTjNoUSF5Tn0/LVg4aHMmYEpRP2QjYm5FTEAyeGBvCnotdGR8TXBsJDAk
MmZ0d3JWVlN3ISlMVCQocHhlV0FsX2ZSN3lHMTFlQGZ6NCFCPT1Se1lkfUhscDs3OXsrciYzUQp6
QD9XZUQwdXhmIVMqaE14d1JPSVZaSjFNe0hKezhaS0JaYUhWRD9pdXpzMDgrcVdKMD1eYWpRQCt2
TDQxKTVBMy0Keig/X0RSLU1yXzVJY3VjdiNufGEkJlpBJDA/VUd6e0k/Xk1SeTZZbiV1XzgqY2pB
NC0xR2t6e0ZgdWRsVGQ2dSRICnpEPzZKNSEpRFhvJVM/dT4kYlkmKm1ETHlUdTM0YCRzI0w1IXQt
UlE0U0NqbXFxNylWdUVLKFRWJDlfODBEWFkzegp6YndOVHJ2ZnlhenQxeWkqJkd7Km5nbVJIeSZD
aHtgZCNjMFNAbHV6cj09MTRuWjA4OFAqJm9oVGRpPiQ7dChSUmAKeipvMDV5K2pAZHtvcHtGVEAj
a3Zhc2tNNykoaT4te188eip2JG9ubXJYZT1eKThGJHJCJkRDJFV5JiFJWSslaD08CnpgPT5+QG5r
fipPPlVzN0c1Pm4+T1c9cG8kMT1NS2tBOT9TeTY8fkxZZFNhUDlwYERCWTUzKDMoI0p3eS0taH5s
Xwp6eUBYX25LbHtNP1V2R1U7QXM4PXFrclV1cSQxYTQrVVUtZm0pQW15U2RjRl5fTFdHYSVsc2g5
WUJpXzdCbGQ1fG4KelpqKChJMUo0NWJReGAjN0p1VT45Un5UNlRSUWs0VnRXSjJ1Rk52T21XYXZq
JCFjPj10VkVmfXgyKUg9M2FJUWdvCnohQj15WklgPnBhNVZlJEt7JFhVUk40TXYmcWt4OXwzdktf
WGBWeGl6NlB3fGYlU0hedmNGd2U9YFJTMUV7X1YoVAp6TEw2a0Y8OyYlWj4rT3owRkloKGtnUWc+
PCF9IVUtdiRyVEtXZU8xJDhkcl4pWGk/WVRwcG0obWc9Xm4wOSZCKloKenYteWlCUFM2YnFXO21p
OFBRRUZQekhMVUY0eTJ4dTl+JVlZM1VPY3NqNkdSUURKdUpkKDVSR2hGdUIjNTVySHZiCnplSDZK
Xy09OTF0MGs2b31GWlNqP1BfQTB5djBCQDRrZXZJLXc7JF59ZGdOdm5xQVBLcVl+MkJQP3thcDFw
UUxjQwp6JjJHNUZGS3IzU3ZVbnBfQ2s4V1pnWVUpK2RBIyVoPyp7Yj9CVVliYF9rdmZBTWpaRno7
QFoyTkpfVVZXN2M5YikKeloqWH1JTmVmJm98MUBGfENSfFhiYV4tUVI3ak1hNmdVblFya34+e3pL
ISglO3lFfUhfeCNuNEhjOVpjMyYoJGkoCnoxQGY5QT9JbnY8VmVIUHdJNEpreTdtSEJ4c3drbGxY
WSRfZz1BcUcxcn1raCRgcHtJJGNNXnVEOVYyfj01N2BwWgp6Q1o8Z0tXQWp2PTA9QDIoRVFEYHxZ
T3wkIVMyV3ZxWlUzQSZoKDZoR2ptUmp1SXd7KiVfZHY0QnZlVTlJaiNCU2oKejEzeEVOdk9SZmla
ZiR6Kyk3c0tuVm40SUVQTHBHcVY+UVF7OXdVKnN5ZTcrb1FrQ3tRNXQzI24rS142VGdGfExxCnoy
OWloTEZ1UnYtdll7Z3x7V0YyezVrKi01ZHw9KXwoVyZgJCRYdippM3FgT30pZV5JV1pgd00ral9s
cE9pXl5VIwp6eXwlUWtrZ0w4JiV6SClvSmwraWVqcGtfPHhYQHJNITwtISNtZml4b0I2OXleQHA8
UCllekEpUGc7WVJpTzFIVzsKel41YTgqUWd8TCM+bEI/KD4kaVk+K0BxPWdDfDAkVT80bVNjY2xi
Zz5HPTByWWRSJip3REJ6KFg8JF9NNSs+UGlUCnoxOyUkMy1oRiRidlJOPkhSXyVkVm9hQmteeFMx
QHhII1JsU0o0aj0xamQ2e3lfSVRCPkt1Tkx0Q0I8WlltSVNabAp6QCFxU0oleEM+Py1qcig+ZVYw
JiN6OzBUclpxb2Q/YXU4TT5HZkBOfjdlJjxBYXpEYD5hQDs2fik9cWdLdCkzPmMKelIqMkgqLXtk
YlozUnheaThJflowXkx2TmIwbWA1Nilpbj5WZCRwRW4lVDF3enVIX3VuSGFFKlNeYEBoQWJXTCYz
CnpTNkA8Um5nTnF+dF9afk1wWjV8R0l+Z3pZLTBrO29lQTYqfm95RVNvRHclUGlNPXluYStQbTt6
ZT4rfGB3Tn07IQp6eGlXT1ItaD85OVErYDJGcnlUNHpje0ZUI2VYZSQyS2R4MUM+cSY1dj44eEpz
ckdwTElKeHhwI19QMUVOVHxJSyoKenZgZ1JmP2QxciVxSXg/Yy1DKns3TUhBZVE+c2lHKWJMa2R4
c1ZpNT1IdzcrNS1tOUI3VkFTckQpbT5haUVVXlI/CnpUcUQhdDtEYU97cysmdUJsaVFsIXBpNm1B
Kjd8KTEoWVYwRUNqUlgwRFhjIU0+e3lRbmN7ZEA0KT0yK2UkP31DZwp6PFdBek4kYCo/V2IkZShX
d3A1PV9RS2h5N3c5OTtyaGk+ejhVNUBSWmc3NyFEQUBYc0JXdldqdlBsZVlWczJkTTEKeiszSTNG
M29BUS1kRHEjMzc+LUJwSkMzYypqS1F1bm9YWHlyVGVtKGcrJkBAMVVVOyR9eSZqcFd0TU1oRFQ1
UD98CnprPmBucnokYURmNGNHayZrOWE7MTRNd1d7ZUctbVorVTF6elQrNV5UT2ZwPjRPanMpV0N9
MFF8cyFSaik3X1M3Xwp6YSs7fUUhZWxkSVRYQFkxM1FeKUsqX2BReFhRVHJpbEYya2dAQjckPDNE
TFRWSXpNdn4yK25NSihQM2QoXkh9TCMKens4dV8/cXgrcVE1NjV0OXdxLW89MlVwaU5qakRAWk5x
cWFVR2ZoUyprN1AlQDJLOW9SSzdhQiQ9OHo0aEtBPGZgCnpjeURfQXljKCViMSk/MFU3VWhAZHRV
XmhPWlV+Q2NeVkIoWCs5dyVtIzlwTng0UlBTSFJ+eUJAc25peCFPdVB7Iwp6cCliZSQkVCRrfXco
Kj1TZDthWlp6PGl5TkM2IUAqVEIkKVNCTlA5P2psemJhek1PY0c2YElOSmRMTD5iWDN5SWQKejJA
XzhVSj1gP2AtWiZTOSgjQSZFJTkkTjlBVipAcnBtZXNkYlVpfmtNN29WQ2U0dVJpRDY2QEtOPG1n
MEY1U3JQCnpnPW8yTHZEUDt8OCUjQktCUmxEZDVBVGt9Vl95YiQkdFUmOWJOTjU8TzVwc0lIQlFC
fXRKdVokLXA8U1JQR2BgTwp6QUZid1ZYeHAxUm9VVT5zV1Y3VzNNYH4qTGtXMnktTVopS1UpOTxg
RDlmKGJyJGo4d0g3ZXFRYG9WWHtBYUZ9VTIKej98Qz0keXx2PE4lVz00dkh3Rj1qZH5qPnNnUjxm
NzEra1Q9NF5sWUc0bH15SmtXTmBBSk4wY2g1JEFTKCRMdDRaCno8aDtvb3NwaXVpUVZzZHxYUHlQ
R3I0O3ZSSSoqWUwmMDRJbmY2eFFQd1MtN2xud1E7bXRYV14oMillQ3c2TGx2Zgp6ViFYYCUjMXp3
Q1ltSXl4dTFgMnNKZV9PTCtmUVhMbXswdlF4P0VFQD5idjI8WmZTTit6cSghUGIlUmhVVXhnMEUK
eldXdWxWZC1KWHw+PDVtVkI0dV4+IXlXREhyVXB4YCk7X34wSW82Yn1eU0goZ29pdVFxQU1YZldw
aHs9NXM8NU4jCnpqayNzbnF+VkNWaHUhZmY2Uy1SYzVkJVl5NHdvd04hPjxTSTRQS2ozZG5aVDVJ
PGxJKCp4Yz4kP1dOfTJwYHFPNwp6cktMSVJxYTtSeEAhQDZCYkdTTE5IX2hGeHE1fSpBdG5TcnJq
IVc1dHRPVUo5KUthbm5QPUVqVTNONDw/JXgkTkEKeiNLTnlwLT15YkdgLSRBNHleJnZJYWRJOWxw
VlQyKkt8ODAhKjhrTTNINiVBJE81VUlJSUh0fk9DUkkobWA+YXBrCnpJQCFeN1dMTVkjc0ptKUNS
QmtsI3l8M0J4JHt4enUxd1YzK2VmWjw/T0RoPCo9RSVBckdVdFZCKjdwdXV2e2dLdwp6YENEWjZK
ZVV5TSpOSD1xV1hsWS1vSDJkIV80MjIld2IzJlk/Vy1lRXgzZWJRdHF2d1ZyezkhTzgreWF3TDI4
MjsKenc3cjNzY2E/YFpDYl4pTWZiekt+dGNEalRlJjlwOzA8KlM4WHA3SW5jelhzNi0qWjJ1RSQt
eEM4KkFMRWx7WDlOCnozdDBGZjZWZ1hjKipYdkBEdXtRRGdyT0tPQ2NXeihwIzFfWnY5WX5eZ3VI
dHt6ITZyJml6LVlIRUFBYnp6bTImQQp6Yi1VdXpfU0RBcWcwXiFFWkU+KnNSNSkjTVh6dnNhc35H
I1dNTCRBQD53U2E4dTdSM1RCYV5rNDlCSWxiKlBAfiQKenZkWGxUUHZaNlV3MSRDSVR5cGNuUz0q
MXRrK0YlWDNUPkxQdXdrSnglcjhGKEx7dVYxRihUWChOKVRiPGJsKnN2CnpWcExtZUN3Ti1tOXJi
KXBXYEY4aTJ0THhQcFBCZGJkbXRXQHR6MkF+eVpMbX1aQDRSKWc7NlZmK300TExldz9RLQp6R1Ex
QUZkfHlDRSZfZy07RWpWTWwlWmlWMVp8K093YDB9YnRjIW9ab01DdjhXO1ZnQDkkKENjfDw2cT5C
OEpATj0KenpHN2tQJiVPbTdZQGxSfT9IY1QyNUhsUncxRF41TCsoeDskKmEqWiRAWXYrP1h1Z15k
IzIoREdoTUpUYFpjfE94CnpxT0VoTXtOKXFHcHpOR2NKVXBGd1chTnpwZHdZS35zT3AtNiVLZk1a
SV54S25FKl9mPiV9fnA1a3p6P049bDx5Kgp6QGB9cDY9fXlLfChlQkR3NHZ5anMoUTFRPV5uOSRH
Z2hZO3tpX3R3Q09xTXJxWmNpfVhrbldZX0ZKR2hRdUppOXoKej13ZFJ7PHVUX3RWQV88c1BMfkNv
emxNP3NgQj8yLTYyeHxiMEZJbmZWM0IlaFJ+ZmRAJkxocDxHd1k9KitWTyR+CnptaGFBNmItY30h
bmJNSlYmcVEtPi1aUXJgXmhLRipEY1JtYnJtbjAwNEJrdiNUIz9OfSomVERoaik7c2UyUWNVUAp6
cFBkI2JrVyp+MTslaHM1TkN7aWZ2NlA+YHotcVE4UHJGYyN0dH4tSWFyME9tOFJWQyMkPUVLTUAy
UHVwQiV0dm8KejA4NT0/JUVxMTNyZlFfaFM5VXkqRE9VI0lCYH00KWZLRkNnajJ1NT1zQj48RWU5
ejFPVCpqZWNGKVhTb04wOVFxCno1d3YwfGIwQDxKVD0xaUtHYD1uN1NLaWZ1RVVPM2R0Z2QtQylP
Y1pQP3UtQ284bHhAaSpedCVge2xVbHNedEctdwp6Y2l4WG9oQ2c1VkBybmZjNyFVSHFWTj8yZ3Mr
R2I7Z0J3UWorIWp8KSlDR29pZjZSKHIpOVBiNyUkfD5GUU1VTUMKelQtQGg+MntJS1YtKk5mR3dr
PTg3KnVGdiUjeU9tJVZWVElkbSVDZGZtUGglbTx3eG9CZXlWRy1NSG1ZQWsyVyZsCnprVjQ9Y1pA
dXJvb2NkbCV2UUNgUnZ3V3E/e2N2aEhxM2cmcGZBJikjQChBQGpfYCNze3FHejEqdj4kIX1TPnkz
Qwp6dGgjR2tPQDQoRGRONE9acEVOVTd6JDckWD47Mj93dCpGb0x5aF8jNUV5eHJYbj82KTFJNmhP
VUxXdyM0cWdYMj8Kejd5QzMldUchfnRmJT4oWT0+dyh5SkhGMVRAWmlffENKN31LLXgpay1ZdGZ1
PFJtVTQyPXMmcXslKjU8KSNmRXdMCnolOFlTK25XdXZXPzRZJG0oKDMwTnJ1eDM4Zm9CcWYmO3Rf
KnpvYU8/U2U4YSFwSUdYPG9XMkNuaFhqXkJuJnI+Uwp6Nll1PWB4VyZnemBOVW5aTEN5PFAjamRt
JCU+MEVxbk9KYEU8ND9aQSlMPDJBSiRHSTlzWGFFZ0UyM2V7XmRAKVAKenhLTUV8SihafExZez9+
MEg0VUApJjwoOCR7dHJxeXhhZnUoN3E5TEVUNVh3Rl5CRXs2YEdiQWJPdyQwZGl2dDVxCnowN3V4
VF9QJGJeQGp9T1ZZclRCIW01eCpOaWYkT2hqb01eV0Q4NGJiUDBXZUtfSVEyMlgyVmV+VTZaTmBj
WkdJQwp6eH59ZmpAVklWNl98cikxI3V4R3ZOK0Y4WjYjQlVJcHtyWElpY1NJVVFWd2JEU18zeFVT
Jm1yRmBMPmJ5VnB9NXUKekFTQHZsSXhpSFJPJTZ6XnhPbGxueD0tbCl6NmVMRVViKEpeYC1mejhu
T2kpVmh4Qio3Pm5OQEU2aitaYVpwQEtPCnpIJXxUZkBwWDg+YUVOem9AQTBDb2ZgNldQI04maVp1
SlNCT1J8RXpvKTBBXnhKUnRLNEs8QHlySE0/QXRNUmlxUAp6PFM0WHY9MkMhQ2NYN0Y+ciVHcEBl
QEA0amR1YklsO0NoPy1gQEpgRz9HYyg/UilZaW5XRVR9PD8qQV8oTztXTHYKelJMNFg+cH44UkdH
PT19Rlg9LX5wVj9ieWUpPWRXRVlLZ2FWY0ViXj92JjJ0VGIwLVcpVDhpfVdFOEFJTUBhQXJJCnpJ
SUk+MVopWGk0bTJZaWFmcEZwclFCenRQPVY+R2U1az4rOVZQRl4jMHRPPzFxOVBDemtiO31KcW4p
SmAqMldQNwp6MU9xQCl1OWdfQTgmRV9QMHN4VldrdjteVzVGYE1FR0l5NTgqeEFeK2s9Nmt+VDVj
RjhVNyFlWTI/P0g5Rn4mZkYKenEkO2M/djhNVztzO3RPZzUmVGhLaDliZkxQaiVWa25GX1dRY3Jv
fU9CQGp+XlIrPWlKJUg2RlFjazRPeHNtQUFQCnpYSWpVbEJGPnVFWio5PF5DS1hLe0g0Zkh5WmlT
PnlGNjs5NVBwMnxtXiVUMTtjKHVwYzwod15qKSh7c2NVJU8/Nwp6enJNWHEoN2dGbWFZZzg+aylU
JSZFZlVoV2VRZUg0OXlAUE87Q2lvdXZ0cVF7dUtUTD1YVGowd2B7eT83KDgoYysKekVHPjZIUTtq
PitFVldnfHZgJmotUE5nVCo1XyZZMU89NDxoNENvZmVubHFoeVJNfnl5QSleVU9zQyhXMTRWTCl0
CnpMMnZRUUZUQipQNFFnPWJuQlJ2JmNqIyYrV3Y2LTJEb09DQDgyYSUzbjhHJWxGRXtabjlmdD1C
K2RNOGhsR0x5Qwp6USlzP0FyP0shO1h0TWR+VldYbWkjQWxAOHo4KEp5S1Njalo8ZXlYa1h9TWR0
ayQ5bnZjZ09zZU59SWM0TlNwRDAKekdyfHQ8PlZ+cDQkQ0d3aSs1Q0BwNWRjV2YmZFNaISlkKz99
MEZlK2Q1RHRke1ZJcmJIc0ljKHdmZEdTbnF5YV5NCnpmaFBhRztlUWJrTmFDcGAwSGxyNiFQPTJ9
MXdoaWFZWGJocDEwdip+alJySVhOUSZtNF5OXyNJNjlYWDleUzI1fQp6OWdubHIhbmhmTWhga0d0
SHBiSjw8UjdxcXRAPDZteTE1TW9xOzhIVWFUWlBqMEJLQGVhcWY2YWo0S2RBR05CMWwKeiFDMlh1
bGEyeigwNzRXMjZvRXJjS3lyQVR5RUN4fnFEOVE1SW84I2cxWXpqfkxUTTM/ZlFPd1dNcEk1MnF5
VGd5Cno9Mj0xbGdkI2Rmd0JRT1BieDsxemM5S2NiQXRuTy0+NWVQbFVwQGYtYSlQK3ZQY0tNYFJr
RXtrSDNJKGpsPU8raAp6eHMhNzdfZUIxIVdBb2J2JUE5ejdhVz0lTFpIUGhzNGpLU2JiSC1xJEVK
LShrKFNLdXNeYkhKd1NhKE9xfE5hM0oKenY2YW9TSG4lWllLezt2T2YyOHozJUB0eDBRdG9jSElK
YEpvN0w1amo7bGcwQkZwJmVvRnllck4hOTwjWGdefFI2Cno7djV1QXlpSkk1cSRxS3F7KlhmP2h5
ZjVnTSNRVj80K3NQYWZ+WlNVYHdjO1lnQSZ6PHlLTG9kaVRSSG5vVHgrNgp6Z0E8e1ZCb219VGYr
bT9EdTdTIUR8QX0rSXY1MSU/XkR5RVpOZT10ZEVIUWMrVipCZDBqMkxsVjZhcG9CRUNMbVUKeiFV
ZSVsOXgjfVBfaXRKQyNBQj1oVT8ybnpBUl8obzBGZWo7MzwwelR7dmt1YzVYOV9+OXc3RVZHQjZs
SXIxSmxlCnpMQlloRnw1SnY5aXhTVnNLVkBKal5qfl5KaV5Ubz9yeWhiUntGaDdee3gzV3ZhWDA+
Xzl1a1dEdztvalZVcF54ZAp6cVdAbHQ2I2JpQkhAckZWZzIkN250ITN3cEEqS3FYaU5nYE9gVEdu
MktuaHJFOTF1ZHs0KUcjVGtPM00yI2dXM1kKemFGaSQqQ1dWQmRyS016e3ZMYXc4OFpIZiVLfWsh
JnBrUmFxO1F2PTQ5UmVBZ0NDVjBLPkVQPF8xT3k+YkQ2b2BfCnhDXylNP0R9cUtLTHtKRH1ESmM7
VjVkO2IlallMVklOS3wlcEdzbkNBLWNuKStBXj5oflN2NTReeld7bkBfV0orOwoKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Jlc291cmNlcy90ZXN0LnR4dCBiL1NvdXJjZS9X
ZWJLaXQvZ3RrL3Rlc3RzL3Jlc291cmNlcy90ZXN0LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggOWRhZWFmYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy9y
ZXNvdXJjZXMvdGVzdC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi10ZXN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0X3V0aWxzLmMgYi9Tb3VyY2UvV2Vi
S2l0L2d0ay90ZXN0cy90ZXN0X3V0aWxzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDZiYjY0NWQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdF91dGls
cy5jCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCBBcm5vIFJlbmV2aWVyCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJ0ZXN0X3V0aWxzLmgiCi0KLSNpbmNsdWRlIDxn
bGliLmg+Ci0jaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KLQotaW50IHRlc3R1dGlsc19yZWxhdGl2
ZV9jaGRpcihjb25zdCBnY2hhciAqdGFyZ2V0RmlsZW5hbWUsIGNvbnN0IGdjaGFyICpleGVjdXRh
YmxlUGF0aCkKLXsKLSAgICAvKiB1c2VyIGNhbiBzZXQgbG9jYXRpb24gb2YgdGhlIHdlYmtpdCBy
ZXBvc2l0b3J5IGRpcmVjdG9yeSBpZiBpdCBkaWZmZXJzIGZyb20gYnVpbGQgZGlyZWN0b3J5ICov
Ci0gICAgY29uc3QgZ2NoYXIgKnJlcG9QYXRoID0gZ19nZXRlbnYoIldFQktJVFJFUE9ESVIiKTsK
LSAgICBpZiAocmVwb1BhdGgpIHsKLSAgICAgICAgaWYgKGdfY2hkaXIocmVwb1BhdGgpKQotICAg
ICAgICAgICAgcmV0dXJuIC0xOwotICAgIH0gZWxzZSBpZiAoZ19jaGRpcihnX3BhdGhfZ2V0X2Rp
cm5hbWUoZXhlY3V0YWJsZVBhdGgpKSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLQotICAgIHdo
aWxlICghZ19maWxlX3Rlc3QodGFyZ2V0RmlsZW5hbWUsIEdfRklMRV9URVNUX0VYSVNUUykpIHsK
LSAgICAgICAgZ2NoYXIgKnBhdGhOYW1lOwotICAgICAgICBpZiAoZ19jaGRpcigiLi4iKSkKLSAg
ICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgZ19hc3NlcnQoIWdfc3RyX2VxdWFsKChwYXRo
TmFtZSA9IGdfZ2V0X2N1cnJlbnRfZGlyKCkpLCAiLyIpKTsKLSAgICAgICAgZ19mcmVlKHBhdGhO
YW1lKTsKLSAgICB9Ci0KLSAgICBnY2hhciAqZGlyTmFtZSA9IGdfcGF0aF9nZXRfZGlybmFtZSh0
YXJnZXRGaWxlbmFtZSk7Ci0gICAgaWYgKGdfY2hkaXIoZGlyTmFtZSkpIHsKLSAgICAgICAgZ19m
cmVlKGRpck5hbWUpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgZ19mcmVlKGRp
ck5hbWUpOwotICAgIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsv
dGVzdHMvdGVzdF91dGlscy5oIGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdF91dGlscy5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzYwZGEzLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RfdXRpbHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDMg
KzAsMCBAQAotI2luY2x1ZGUgPGdsaWIuaD4KLQotaW50IHRlc3R1dGlsc19yZWxhdGl2ZV9jaGRp
cihjb25zdCBnY2hhciAqdGFyZ2V0RmlsZW5hbWUsIGNvbnN0IGdjaGFyICpleGVjdXRhYmxlUGF0
aCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXBwbGljYXRpb25j
YWNoZS5jIGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGFwcGxpY2F0aW9uY2FjaGUuYwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzE4ZjQwMS4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXBwbGljYXRpb25jYWNoZS5jCisrKyAvZGV2L251bGwK
QEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBMdWthc3ogU2xhY2hj
aWFrCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGds
aWIvZ3ByaW50Zi5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3ZWJraXQvd2Vi
a2l0Lmg+Ci0KLXN0YXRpYyB2b2lkIHRlc3RfYXBwbGljYXRpb25fY2FjaGVfbWF4aW11bV9zaXpl
KCkKLXsKLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgbWF4U2l6ZSA9IDgxOTI7Ci0gICAgd2Via2l0
X2FwcGxpY2F0aW9uX2NhY2hlX3NldF9tYXhpbXVtX3NpemUobWF4U2l6ZSk7Ci0KLSAgICAvLyBD
cmVhdGluZyBhIFdlYlZpZXcgLSBtYWtlIHN1cmUgdGhhdCBpdCBkaWRuJ3QgY2hhbmdlIGFueXRo
aW5nCi0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRf
d2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOwotICAgIGdf
b2JqZWN0X3VucmVmKHdlYlZpZXcpOwotCi0gICAgZ19hc3NlcnQobWF4U2l6ZSA9PSB3ZWJraXRf
YXBwbGljYXRpb25fY2FjaGVfZ2V0X21heGltdW1fc2l6ZSgpKTsKLX0KLQotaW50IG1haW4oaW50
IGFyZ2MsIGNoYXIqKiBhcmd2KQotewotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBO
VUxMKTsKLQotICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7
Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2FwcGxpY2F0aW9uX2NhY2hlL21heGltdW1f
c2l6ZSIsCi0gICAgICAgICAgICAgICAgICAgIHRlc3RfYXBwbGljYXRpb25fY2FjaGVfbWF4aW11
bV9zaXplKTsKLQotICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7Ci19Ci0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhdGsuYyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3Rz
L3Rlc3RhdGsuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmEyZGI2MS4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXRrLmMKKysrIC9kZXYvbnVsbApA
QCAtMSwxNDc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSWdhbGlhIFMuTC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRl
IDxnbGliLmg+Ci0jaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+
Ci0jaW5jbHVkZSA8bG9jYWxlLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8d2Vi
a2l0L3dlYmtpdC5oPgotCi1zdGF0aWMgY29uc3QgY2hhciogY2VudGVyZWRDb250ZW50cyA9ICI8
aHRtbD48Ym9keT48cCBzdHlsZT0ndGV4dC1hbGlnbjogY2VudGVyOyc+U2hvcnQgbGluZTwvcD48
cCBzdHlsZT0ndGV4dC1hbGlnbjogY2VudGVyOyc+TG9uZy1zaXplIGxpbmUgd2l0aCBzb21lIGZv
byBiYXIgYmF6IGNvbnRlbnQ8L3A+PHAgc3R5bGU9J3RleHQtYWxpZ246IGNlbnRlcjsnPlNob3J0
IGxpbmU8L3A+PHAgc3R5bGU9J3RleHQtYWxpZ246IGNlbnRlcjsnPlRoaXMgaXMgYSBtdWx0aS1s
aW5lIHBhcmFncmFwaDxiciAvPndoZXJlIHRoZSBmaXJzdCBsaW5lPGJyIC8+aXMgdGhlIGJpZ2dl
c3Qgb25lPC9wPjwvYm9keT48L2h0bWw+IjsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnRlbnRz
ID0gIjxodG1sPjxib2R5PjxwPlRoaXMgaXMgYSB0ZXN0LiBUaGlzIGlzIHRoZSBzZWNvbmQgc2Vu
dGVuY2UuIEFuZCB0aGlzIHRoZSB0aGlyZC48L3A+PC9ib2R5PjwvaHRtbD4iOwotCi1zdGF0aWMg
Y29uc3QgY2hhciogY29udGVudHNJblRhYmxlV2l0aEhlYWRlcnMgPSAiPGh0bWw+PGJvZHk+PHRh
YmxlPjx0cj48dGg+Zm9vPC90aD48dGg+YmFyPC90aD48dGggY29sc3Bhbj0nMic+YmF6PC90aD48
L3RyPjx0cj48dGg+cXV4PC90aD48dGQ+MTwvdGQ+PHRkPjI8L3RkPjx0ZD4zPC90ZD48L3RyPjx0
cj48dGggcm93c3Bhbj0nMic+cXV1eDwvdGg+PHRkPjQ8L3RkPjx0ZD41PC90ZD48dGQ+NjwvdGQ+
PC90cj48dHI+PHRkPjY8L3RkPjx0ZD43PC90ZD48dGQ+ODwvdGQ+PC90cj48dHI+PHRoPmNvcmdl
PC90aD48dGQ+OTwvdGQ+PHRkPjEwPC90ZD48dGQ+MTE8L3RkPjwvdHI+PC90YWJsZT48dGFibGU+
PHRyPjx0ZD4xPC90ZD48dGQ+MjwvdGQ+PC90cj48dHI+PHRkPjM8L3RkPjx0ZD40PC90ZD48L3Ry
PjwvdGFibGU+PC9ib2R5PjwvaHRtbD4iOwotCi1zdGF0aWMgY29uc3QgY2hhciogY29udGVudHNX
aXRoRXh0cmFuZW91c1doaXRlU3BhY2VzID0gIjxodG1sPjxoZWFkPjxib2R5PjxwPlRoaXNcbiAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGFyYWdyYXBoXG4gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1xuICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvcmtlZCE8L3A+PC9ib2R5PjwvaHRtbD4iOwotCi1zdGF0aWMgY29uc3QgY2hhciogY29tYm9C
b3hTZWxlY3RvciA9ICI8aHRtbD48Ym9keT48c2VsZWN0PjxvcHRpb24gc2VsZWN0ZWQgdmFsdWU9
J2Zvbyc+Zm9vPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nYmFyJz5iYXI8L29wdGlvbj48L3NlbGVj
dD48L2JvZHk+PC9odG1sPiI7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBlbWJlZGRlZE9iamVjdHMg
PSAiPGh0bWw+PGJvZHk+PHA+Q2hvb3NlOiA8aW5wdXQgdmFsdWU9J2ZvbycgdHlwZT0nY2hlY2ti
b3gnLz5mb28gPGlucHV0IHZhbHVlPSdiYXInIHR5cGU9J2NoZWNrYm94Jy8+YmFyIChwaWNrIG9u
ZSk8L3A+PHA+Q2hvb3NlOiA8c2VsZWN0IG5hbWU9J2Zvbyc+PG9wdGlvbj5iYXI8L29wdGlvbj48
b3B0aW9uPmJhejwvb3B0aW9uPjwvc2VsZWN0PiAocGljayBvbmUpPC9wPjxwPjxpbnB1dCBuYW1l
PSdmb29iYXJidXR0b24nIHZhbHVlPSdmb29iYXInIHR5cGU9J2J1dHRvbicvPjwvcD48L2JvZHk+
PC9odG1sPiI7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBmb3JtV2l0aFRleHRJbnB1dHMgPSAiPGh0
bWw+PGJvZHk+PGZvcm0+PGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J2VudHJ5JyAvPjxpbnB1dCB0
eXBlPSdwYXNzd29yZCcgbmFtZT0ncGFzc3dvcmRFbnRyeScgLz48L2Zvcm0+PC9ib2R5PjwvaHRt
bD4iOwotCi1zdGF0aWMgY29uc3QgY2hhciogaHlwZXJ0ZXh0QW5kSHlwZXJsaW5rcyA9ICI8aHRt
bD48Ym9keT48cD5BIHBhcmFncmFwaCB3aXRoIG5vIGxpbmtzIGF0IGFsbDwvcD48cD48YSBocmVm
PSdodHRwOi8vZm9vLmJhci5iYXovJz5BIGxpbmU8L2E+IHdpdGggPGEgaHJlZj0naHR0cDovL2Jh
ci5iYXouZm9vLyc+YSBsaW5rIGluIHRoZSBtaWRkbGU8L2E+IGFzIHdlbGwgYXMgYXQgdGhlIGJl
Z2lubmluZyBhbmQgPGEgaHJlZj0naHR0cDovL2Jhei5mb28uYmFyLyc+YXQgdGhlIGVuZDwvYT48
L3A+PG9sPjxsaT5MaXN0IGl0ZW0gd2l0aCBhIDxzcGFuPjxhIGhyZWY9J2h0dHA6Ly9mb28uYmFy
LmJhei8nPmxpbmsgaW5zaWRlIGEgc3BhbiBub2RlPC9hPjwvc3Bhbj48L2xpPjwvb2w+PC9ib2R5
PjwvaHRtbD4iOwotCi1zdGF0aWMgY29uc3QgY2hhciogbGF5b3V0QW5kRGF0YVRhYmxlcyA9ICI8
aHRtbD48Ym9keT48dGFibGU+PHRyPjx0aD5PZGQ8L3RoPjx0aD5FdmVuPC90aD48L3RyPjx0cj48
dGQ+MTwvdGQ+PHRkPjI8L3RkPjwvdHI+PC90YWJsZT48dGFibGU+PHRyPjx0ZD5mb288L3RkPjx0
ZD5iYXI8L3RkPjwvdHI+PC90YWJsZT48L2JvZHk+PC9odG1sPiI7Ci0KLXN0YXRpYyBjb25zdCBj
aGFyKiBsaW5rc1dpdGhJbmxpbmVJbWFnZXMgPSAiPGh0bWw+PGhlYWQ+PHN0eWxlPmEuaHR0cDpi
ZWZvcmUge2NvbnRlbnQ6IHVybChuby1pbWFnZS5wbmcpO308L3N0eWxlPjxib2R5PjxwPjxhIGNs
YXNzPSdodHRwJyBocmVmPSdmb28nPmZvbzwvYT4gYmFyIGJhejwvcD48cD5mb28gPGEgY2xhc3M9
J2h0dHAnIGhyZWY9J2Jhcic+YmFyPC9hPiBiYXo8L3A+PHA+Zm9vIGJhciA8YSBjbGFzcz0naHR0
cCcgaHJlZj0nYmF6Jz5iYXo8L2E+PC9wPjwvYm9keT48L2h0bWw+IjsKLQotc3RhdGljIGNvbnN0
IGNoYXIqIGxpc3RzT2ZJdGVtcyA9ICI8aHRtbD48Ym9keT48dWw+PGxpPnRleHQgb25seTwvbGk+
PGxpPjxhIGhyZWY9J2Zvbyc+bGluayBvbmx5PC9hPjwvbGk+PGxpPnRleHQgYW5kIGEgPGEgaHJl
Zj0nYmFyJz5saW5rPC9hPjwvbGk+PC91bD48b2w+PGxpPnRleHQgb25seTwvbGk+PGxpPjxhIGhy
ZWY9J2Zvbyc+bGluayBvbmx5PC9hPjwvbGk+PGxpPnRleHQgYW5kIGEgPGEgaHJlZj0nYmFyJz5s
aW5rPC9hPjwvbGk+PC9vbD48L2JvZHk+PC9odG1sPiI7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiB0
ZXh0Rm9yQ2FyZXRCcm93c2luZyA9ICI8aHRtbD48Ym9keT48aDE+QSB0ZXh0IGhlYWRlcjwvaDE+
PHA+QSBwYXJhZ3JhcGggPGEgaHJlZj0naHR0cDovL2Zvby5iYXIuYmF6Lyc+d2l0aCBhIGxpbms8
L2E+IGluIHRoZSBtaWRkbGU8L3A+PG9sPjxsaT5BIGxpc3QgaXRlbTwvbGk+PGxpPjxzcGFuIHN0
eWxlPSdkaXNwbGF5OmJsb2NrOyc+QmxvY2sgc3BhbiBpbiBhIGxpc3QgaXRlbTwvc3Bhbj48c3Bh
bj5JbmxpbmUgc3BhbiBpbiBhIGxpc3QgaXRlbTwvc3Bhbj48L2xpPjxsaT48YSBocmVmPSdmb28n
PjxzcGFuIHN0eWxlPSdkaXNwbGF5OmJsb2NrOyc+QmxvY2sgc3BhbiBpbiBhIGxpbmsgaW4gYSBs
aXN0IGl0ZW08L3NwYW4+PHNwYW4+SW5saW5lIHNwYW4gaW4gYSBsaW5rIGluIGEgbGlzdCBpdGVt
PC9zcGFuPjwvYT48L2xpPjwvb2w+PHNlbGVjdD48b3B0aW9uIHNlbGVjdGVkIHZhbHVlPSdmb28n
PkFuIG9wdGlvbiBpbiBhIGNvbWJvIGJveDwvb3B0aW9uPjwvc2VsZWN0PjxpbnB1dCB0eXBlPSd0
ZXh0JyBuYW1lPSdmb28nIHZhbHVlPSdmb28gYmFyIGJheicgLz48dGFibGU+PHRyPjx0ZD5hIHRh
YmxlIGNlbGw8L3RkPjx0ZD48L3RkPjx0ZD48YSBocmVmPSdmb28nPjxzcGFuIHN0eWxlPSdkaXNw
bGF5OmJsb2NrOyc+QmxvY2sgc3BhbiBpbiBhIGxpbmsgaW4gYSB0YWJsZSBjZWxsPC9zcGFuPjxz
cGFuPklubGluZSBzcGFuIGluIGEgbGluayBpbiBhIHRhYmxlIGNlbGw8L3NwYW4+PC9hPjwvdGQ+
PHRkPjxzcGFuIHN0eWxlPSdkaXNwbGF5OmJsb2NrOyc+QmxvY2sgc3BhbiBpbiBhIHRhYmxlIGNl
bGw8L3NwYW4+PHNwYW4+SW5saW5lIHNwYW4gaW4gYSB0YWJsZSBjZWxsPC9zcGFuPjwvdGQ+PC90
cj48L3RhYmxlPjxoND48YSBocmVmPSdmb28nPjxzcGFuIHN0eWxlPSdkaXNwbGF5OmJsb2NrOyc+
QmxvY2sgc3BhbiBpbiBhIGxpbmsgaW4gYSBoZWFkaW5nPC9zcGFuPjxzcGFuPklubGluZSBzcGFu
IGluIGEgbGluayBpbiBhIGhlYWRpbmc8L3NwYW4+PC9oND48aDQ+PHNwYW4gc3R5bGU9J2Rpc3Bs
YXk6YmxvY2s7Jz5CbG9jayBzcGFuIGluIGEgaGVhZGluZzwvc3Bhbj48c3Bhbj5JbmxpbmUgc3Bh
biBpbiBhIGhlYWRpbmc8L3NwYW4+PC9oND48L2JvZHk+PC9odG1sPiI7Ci0KLXN0YXRpYyBjb25z
dCBjaGFyKiB0ZXh0Rm9yU2VsZWN0aW9ucyA9ICI8aHRtbD48Ym9keT48cD5BIHBhcmFncmFwaCB3
aXRoIHBsYWluIHRleHQ8L3A+PHA+QSBwYXJhZ3JhcGggd2l0aCA8YSBocmVmPSdodHRwOi8vd2Vi
a2l0Lm9yZyc+YSBsaW5rPC9hPiBpbiB0aGUgbWlkZGxlPC9wPjxvbD48bGk+QSBsaXN0IGl0ZW08
L2xpPjwvb2w+PHNlbGVjdD48L2JvZHk+PC9odG1sPiI7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiB0
ZXh0V2l0aEF0dHJpYnV0ZXMgPSAiPGh0bWw+PGhlYWQ+PHN0eWxlPi5zdDEge2ZvbnQtZmFtaWx5
OiBtb25vc3BhY2U7IGNvbG9yOnJnYigxMjAsMTIxLDEyMik7fSAuc3QyIHt0ZXh0LWRlY29yYXRp
b246dW5kZXJsaW5lOyBiYWNrZ3JvdW5kLWNvbG9yOnJnYig4MCw4MSw4Mik7fTwvc3R5bGU+PC9o
ZWFkPjxib2R5PjxwIHN0eWxlPVwiZm9udC1zaXplOjE0OyB0ZXh0LWFsaWduOnJpZ2h0O1wiPlRo
aXMgaXMgdGhlIDxpPmZpcnN0PC9pPjxiPiBzZW50ZW5jZSBvZiB0aGlzIHRleHQuPC9iPjwvcD48
cCBjbGFzcz1cInN0MVwiPlRoaXMgc2VudGVuY2Ugc2hvdWxkIGhhdmUgYW4gc3R5bGUgYXBwbGll
ZCA8c3BhbiBjbGFzcz1cInN0MlwiPmFuZCB0aGlzIHBhcnQgc2hvdWxkIGhhdmUgYW5vdGhlciBv
bmU8L3NwYW4+LjwvcD48cD54PHN1Yj4xPC9zdWI+PHN1cD4yPC9zdXA+PXg8c3ViPjI8L3N1Yj48
c3VwPjM8L3N1cD48L3A+PHAgc3R5bGU9XCJ0ZXh0LWFsaWduOmNlbnRlcjtcIj5UaGlzIHNlbnRl
bmNlIGlzIHRoZSA8c3RyaWtlPmxhc3Q8L3N0cmlrZT4gb25lLjwvcD48L2JvZHk+PC9odG1sPiI7
Ci0KLXN0YXRpYyBBdGtPYmplY3QqIGdldFdlYkFyZWFPYmplY3QoV2ViS2l0V2ViVmlldyogd2Vi
VmlldykKLXsKLSAgICAvKiBNYW51YWxseSBzcGluIHRoZSBtYWluIGNvbnRleHQgdG8gbWFrZSBz
dXJlIHRoZSBhY2Nlc3NpYmxlCi0gICAgICAgb2JqZWN0cyBhcmUgcHJvcGVybHkgY3JlYXRlZCBi
ZWZvcmUgY29udGludWluZy4gKi8KLSAgICB3aGlsZSAoZ19tYWluX2NvbnRleHRfcGVuZGluZygw
KSkKLSAgICAgICAgZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uKDAsIFRSVUUpOwotCi0gICAgQXRr
T2JqZWN0KiByb290T2JqZWN0ID0gZ3RrX3dpZGdldF9nZXRfYWNjZXNzaWJsZShHVEtfV0lER0VU
KHdlYlZpZXcpKTsKLSAgICBpZiAoIXJvb3RPYmplY3QpCi0gICAgICAgIHJldHVybiBOVUxMOwot
Ci0gICAgQXRrT2JqZWN0KiB3ZWJBcmVhT2JqZWN0ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJs
ZV9jaGlsZChyb290T2JqZWN0LCAwKTsKLSAgICBpZiAoIXdlYkFyZWFPYmplY3QpCi0gICAgICAg
IHJldHVybiBOVUxMOwotCi0gICAgLyogV2UgZG9uJ3QgbmVlZCB0aGUgZXh0cmEgcmVmIGhlcmUu
ICovCi0gICAgZ19vYmplY3RfdW5yZWYod2ViQXJlYU9iamVjdCk7Ci0KLSAgICByZXR1cm4gd2Vi
QXJlYU9iamVjdDsKLX0KLQotc3RhdGljIGdjaGFyKiB0ZXh0Q2FyZXRNb3ZlZFJlc3VsdCA9IDA7
Ci0KLXN0YXRpYyB2b2lkIHRleHRDYXJldE1vdmVkQ2FsbGJhY2soQXRrVGV4dCogdGV4dCwgZ2lu
dCBwb3MsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQodGV4dCkp
OwotCi0gICAgZ19mcmVlKHRleHRDYXJldE1vdmVkUmVzdWx0KTsKLSAgICBBdGtSb2xlIHJvbGUg
PSBhdGtfb2JqZWN0X2dldF9yb2xlKEFUS19PQkpFQ1QodGV4dCkpOwotICAgIHRleHRDYXJldE1v
dmVkUmVzdWx0ID0gZ19zdHJkdXBfcHJpbnRmKCJ8JXN8JWR8IiwgYXRrX3JvbGVfZ2V0X25hbWUo
cm9sZSksIHBvcyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtDYXJldE9mZnNldHMo
KQotewotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0
X3dlYl92aWV3X25ldygpKTsKLSAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKLSAgICBH
dGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDgwMCwgNjAwIH07Ci0gICAgZ3RrX3dp
ZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQod2ViVmlldyksICZhbGxvY2F0aW9uKTsKLSAg
ICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgdGV4dEZvckNhcmV0QnJvd3Np
bmcsIDAsIDAsIDApOwotCi0gICAgQXRrT2JqZWN0KiBvYmplY3QgPSBnZXRXZWJBcmVhT2JqZWN0
KHdlYlZpZXcpOwotICAgIGdfYXNzZXJ0KG9iamVjdCk7Ci0KLSAgICBBdGtPYmplY3QqIGhlYWRl
ciA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAwKTsKLSAgICBnX2Fz
c2VydChBVEtfSVNfVEVYVChoZWFkZXIpKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGhlYWRlciwg
InRleHQtY2FyZXQtbW92ZWQiLCBHX0NBTExCQUNLKHRleHRDYXJldE1vdmVkQ2FsbGJhY2spLCAw
KTsKLQotICAgIC8qIEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBwbGFjZSB0aGUgY2FyZXQgaW5z
aWRlIGEgaGVhZGVyLiAqLwotICAgIGdib29sZWFuIHJlc3VsdCA9IGF0a190ZXh0X3NldF9jYXJl
dF9vZmZzZXQoQVRLX1RFWFQoaGVhZGVyKSwgNSk7Ci0gICAgZ19hc3NlcnRfY21waW50KHJlc3Vs
dCwgPT0sIFRSVUUpOwotICAgIGdpbnQgb2Zmc2V0ID0gYXRrX3RleHRfZ2V0X2NhcmV0X29mZnNl
dChBVEtfVEVYVChoZWFkZXIpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQob2Zmc2V0LCA9PSwgNSk7
Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRleHRDYXJldE1vdmVkUmVzdWx0LCA9PSwgInxoZWFkaW5n
fDV8Iik7Ci0KLSAgICBBdGtPYmplY3QqIHBhcmFncmFwaCA9IGF0a19vYmplY3RfcmVmX2FjY2Vz
c2libGVfY2hpbGQob2JqZWN0LCAxKTsKLSAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChwYXJhZ3Jh
cGgpKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHBhcmFncmFwaCwgInRleHQtY2FyZXQtbW92ZWQi
LCBHX0NBTExCQUNLKHRleHRDYXJldE1vdmVkQ2FsbGJhY2spLCAwKTsKLQotICAgIC8qIEl0IHNo
b3VsZCBiZSBwb3NzaWJsZSB0byBwbGFjZSB0aGUgY2FyZXQgaW5zaWRlIGEgcGFyYWdyYXBoIGFu
ZCBhIGxpbmsuICovCi0gICAgcmVzdWx0ID0gYXRrX3RleHRfc2V0X2NhcmV0X29mZnNldChBVEtf
VEVYVChwYXJhZ3JhcGgpLCA1KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQocmVzdWx0LCA9PSwgVFJV
RSk7Ci0gICAgb2Zmc2V0ID0gYXRrX3RleHRfZ2V0X2NhcmV0X29mZnNldChBVEtfVEVYVChwYXJh
Z3JhcGgpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQob2Zmc2V0LCA9PSwgNSk7Ci0gICAgZ19hc3Nl
cnRfY21wc3RyKHRleHRDYXJldE1vdmVkUmVzdWx0LCA9PSwgInxwYXJhZ3JhcGh8NXwiKTsKLQot
ICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQocGFyYWdyYXBo
KSwgMjApOwotICAgIGdfYXNzZXJ0X2NtcGludChyZXN1bHQsID09LCBUUlVFKTsKLSAgICBvZmZz
ZXQgPSBhdGtfdGV4dF9nZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhUKHBhcmFncmFwaCkpOwotICAg
IGdfYXNzZXJ0X2NtcGludChvZmZzZXQsID09LCAyMCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRl
eHRDYXJldE1vdmVkUmVzdWx0LCA9PSwgInxwYXJhZ3JhcGh8MjB8Iik7Ci0KLSAgICByZXN1bHQg
PSBhdGtfdGV4dF9zZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhUKHBhcmFncmFwaCksIDMwKTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQocmVzdWx0LCA9PSwgVFJVRSk7Ci0gICAgb2Zmc2V0ID0gYXRrX3Rl
eHRfZ2V0X2NhcmV0X29mZnNldChBVEtfVEVYVChwYXJhZ3JhcGgpKTsKLSAgICBnX2Fzc2VydF9j
bXBpbnQob2Zmc2V0LCA9PSwgMzApOwotICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0Q2FyZXRNb3Zl
ZFJlc3VsdCwgPT0sICJ8cGFyYWdyYXBofDMwfCIpOwotCi0gICAgQXRrT2JqZWN0KiBsaW5rID0g
YXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChwYXJhZ3JhcGgsIDApOwotICAgIGdfYXNz
ZXJ0KEFUS19JU19URVhUKGxpbmspKTsKLQotICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9jYXJl
dF9vZmZzZXQoQVRLX1RFWFQobGluayksIDUpOwotICAgIGdfYXNzZXJ0X2NtcGludChyZXN1bHQs
ID09LCBUUlVFKTsKLSAgICBvZmZzZXQgPSBhdGtfdGV4dF9nZXRfY2FyZXRfb2Zmc2V0KEFUS19U
RVhUKGxpbmspKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQob2Zmc2V0LCA9PSwgNSk7Ci0gICAgLyog
UG9zaXRpb25zIGluc2lkZSBsaW5rcyBhcmUgcmVwb3J0ZWQgcmVsYXRpdmUgdG8gdGhlIHBhcmFn
cmFwaC4gKi8KLSAgICBnX2Fzc2VydF9jbXBzdHIodGV4dENhcmV0TW92ZWRSZXN1bHQsID09LCAi
fHBhcmFncmFwaHwxN3wiKTsKLQotICAgIEF0a09iamVjdCogbGlzdCA9IGF0a19vYmplY3RfcmVm
X2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAyKTsKLSAgICBnX2Fzc2VydChBVEtfT0JKRUNUKGxp
c3QpKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGxpc3QpID09IEFUS19ST0xF
X0xJU1QpOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfb2JqZWN0X2dldF9uX2FjY2Vzc2libGVf
Y2hpbGRyZW4obGlzdCksID09LCAzKTsKLQotICAgIEF0a09iamVjdCogbGlzdEl0ZW0gPSBhdGtf
b2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGxpc3QsIDApOwotICAgIGxpc3RJdGVtID0gYXRr
X29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChsaXN0LCAyKTsKLSAgICBnX2Fzc2VydChBVEtf
SVNfVEVYVChsaXN0SXRlbSkpOwotCi0gICAgLyogSXQncyBub3QgcG9zc2libGUgdG8gcGxhY2Ug
dGhlIGNhcmV0IGluc2lkZSBhbiBpdGVtJ3MgbWFya2VyLiAqLwotICAgIHJlc3VsdCA9IGF0a190
ZXh0X3NldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQobGlzdEl0ZW0pLCAxKTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQocmVzdWx0LCA9PSwgRkFMU0UpOwotCi0gICAgLyogSXQgc2hvdWxkIGJlIHBvc3Np
YmxlIHRvIHBsYWNlIHRoZSBjYXJldCBpbnNpZGUgYW4gaXRlbSdzIHRleHQuICovCi0gICAgcmVz
dWx0ID0gYXRrX3RleHRfc2V0X2NhcmV0X29mZnNldChBVEtfVEVYVChsaXN0SXRlbSksIDUpOwot
ICAgIGdfYXNzZXJ0X2NtcGludChyZXN1bHQsID09LCBUUlVFKTsKLSAgICBvZmZzZXQgPSBhdGtf
dGV4dF9nZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhUKGxpc3RJdGVtKSk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KG9mZnNldCwgPT0sIDUpOwotCi0gICAgQXRrT2JqZWN0KiBwYW5lbCA9IGF0a19vYmpl
Y3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAzKTsKLSAgICBnX2Fzc2VydChBVEtfSVNf
T0JKRUNUKHBhbmVsKSk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShwYW5lbCkg
PT0gQVRLX1JPTEVfUEFORUwpOwotCi0gICAgQXRrT2JqZWN0KiBjb21ib0JveCA9IGF0a19vYmpl
Y3RfcmVmX2FjY2Vzc2libGVfY2hpbGQocGFuZWwsIDApOwotICAgIGdfYXNzZXJ0KEFUS19JU19P
QkpFQ1QoY29tYm9Cb3gpKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGNvbWJv
Qm94KSA9PSBBVEtfUk9MRV9DT01CT19CT1gpOwotCi0gICAgQXRrT2JqZWN0KiBtZW51UG9wdXAg
PSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGNvbWJvQm94LCAwKTsKLSAgICBnX2Fz
c2VydChBVEtfSVNfT0JKRUNUKG1lbnVQb3B1cCkpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3Rf
Z2V0X3JvbGUobWVudVBvcHVwKSA9PSBBVEtfUk9MRV9NRU5VKTsKLQotICAgIEF0a09iamVjdCog
Y29tYm9Cb3hPcHRpb24gPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG1lbnVQb3B1
cCwgMCk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX09CSkVDVChjb21ib0JveE9wdGlvbikpOwotICAg
IGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoY29tYm9Cb3hPcHRpb24pID09IEFUS19ST0xF
X01FTlVfSVRFTSk7Ci0KLSAgICAvKiBJdCdzIG5vdCBwb3NzaWJsZSB0byBwbGFjZSB0aGUgY2Fy
ZXQgaW5zaWRlIGFuIG9wdGlvbiBmb3IgYSBjb21ib2JveC4gKi8KLSAgICByZXN1bHQgPSBhdGtf
dGV4dF9zZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhUKGNvbWJvQm94T3B0aW9uKSwgMSk7Ci0gICAg
Z19hc3NlcnRfY21waW50KHJlc3VsdCwgPT0sIEZBTFNFKTsKLQotICAgIEF0a09iamVjdCogdGV4
dEVudHJ5ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChwYW5lbCwgMSk7Ci0gICAg
Z19hc3NlcnQoQVRLX0lTX09CSkVDVCh0ZXh0RW50cnkpKTsKLSAgICBnX2Fzc2VydChhdGtfb2Jq
ZWN0X2dldF9yb2xlKHRleHRFbnRyeSkgPT0gQVRLX1JPTEVfRU5UUlkpOwotCi0gICAgcmVzdWx0
ID0gYXRrX3RleHRfc2V0X2NhcmV0X29mZnNldChBVEtfVEVYVCh0ZXh0RW50cnkpLCA1KTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQocmVzdWx0LCA9PSwgVFJVRSk7Ci0gICAgb2Zmc2V0ID0gYXRrX3Rl
eHRfZ2V0X2NhcmV0X29mZnNldChBVEtfVEVYVCh0ZXh0RW50cnkpKTsKLSAgICBnX2Fzc2VydF9j
bXBpbnQob2Zmc2V0LCA9PSwgNSk7Ci0KLSAgICBBdGtPYmplY3QqIHRhYmxlID0gYXRrX29iamVj
dF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDQpOwotICAgIGdfYXNzZXJ0KEFUS19JU19P
QkpFQ1QodGFibGUpKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKHRhYmxlKSA9
PSBBVEtfUk9MRV9UQUJMRSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a19vYmplY3RfZ2V0X25f
YWNjZXNzaWJsZV9jaGlsZHJlbih0YWJsZSksID09LCA0KTsKLQotICAgIEF0a09iamVjdCogdGFi
bGVDZWxsID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZCh0YWJsZSwgMCk7Ci0gICAg
Z19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZSh0YWJsZUNlbGwpID09IEFUS19ST0xFX1RBQkxF
X0NFTEwpOwotICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQo
dGFibGVDZWxsKSwgMik7Ci0gICAgZ19hc3NlcnRfY21waW50KHJlc3VsdCwgPT0sIFRSVUUpOwot
ICAgIG9mZnNldCA9IGF0a190ZXh0X2dldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQodGFibGVDZWxs
KSk7Ci0gICAgZ19hc3NlcnRfY21waW50KG9mZnNldCwgPT0sIDIpOwotCi0gICAgZ19mcmVlKHRl
eHRDYXJldE1vdmVkUmVzdWx0KTsKLQotICAgIGdfb2JqZWN0X3VucmVmKHBhcmFncmFwaCk7Ci0g
ICAgZ19vYmplY3RfdW5yZWYobGluayk7Ci0gICAgZ19vYmplY3RfdW5yZWYobGlzdCk7Ci0gICAg
Z19vYmplY3RfdW5yZWYobGlzdEl0ZW0pOwotICAgIGdfb2JqZWN0X3VucmVmKHBhbmVsKTsKLSAg
ICBnX29iamVjdF91bnJlZihjb21ib0JveCk7Ci0gICAgZ19vYmplY3RfdW5yZWYobWVudVBvcHVw
KTsKLSAgICBnX29iamVjdF91bnJlZihjb21ib0JveE9wdGlvbik7Ci0gICAgZ19vYmplY3RfdW5y
ZWYodGV4dEVudHJ5KTsKLSAgICBnX29iamVjdF91bnJlZih0YWJsZSk7Ci0gICAgZ19vYmplY3Rf
dW5yZWYodGFibGVDZWxsKTsKLSAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKLX0KLQotc3Rh
dGljIHZvaWQgdGVzdFdlYmtpdEF0a0NhcmV0T2Zmc2V0c0FuZEV4dHJhbm91c1doaXRlU3BhY2Vz
KCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtp
dF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7Ci0gICAg
R3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9OwotICAgIGd0a193
aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7Ci0g
ICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIGNvbnRlbnRzV2l0aEV4dHJh
bmVvdXNXaGl0ZVNwYWNlcywgMCwgMCwgMCk7Ci0KLSAgICAvKiBFbmFibGUgY2FyZXQgYnJvd3Np
bmcuICovCi0gICAgV2ViS2l0V2ViU2V0dGluZ3MqIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3
X2dldF9zZXR0aW5ncyh3ZWJWaWV3KTsKLSAgICBnX29iamVjdF9zZXQoR19PQkpFQ1Qoc2V0dGlu
Z3MpLCAiZW5hYmxlLWNhcmV0LWJyb3dzaW5nIiwgVFJVRSwgTlVMTCk7Ci0KLSAgICAvKiBHZXQg
dG8gdGhlIGlubmVyIEF0a1RleHQgb2JqZWN0LiAqLwotICAgIEF0a09iamVjdCogb2JqZWN0ID0g
Z2V0V2ViQXJlYU9iamVjdCh3ZWJWaWV3KTsKLSAgICBnX2Fzc2VydChvYmplY3QpOwotICAgIG9i
amVjdCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAwKTsKLSAgICBn
X2Fzc2VydChvYmplY3QpOwotCi0gICAgQXRrVGV4dCogdGV4dE9iamVjdCA9IEFUS19URVhUKG9i
amVjdCk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQodGV4dE9iamVjdCkpOwotCi0gICAgZ2lu
dCBjaGFyYWN0ZXJDb3VudCA9IGF0a190ZXh0X2dldF9jaGFyYWN0ZXJfY291bnQodGV4dE9iamVj
dCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGNoYXJhY3RlckNvdW50LCA9PSwgMjUpOwotCi0gICAg
Z2Jvb2xlYW4gcmVzdWx0ID0gYXRrX3RleHRfc2V0X2NhcmV0X29mZnNldCh0ZXh0T2JqZWN0LCBj
aGFyYWN0ZXJDb3VudCAtIDEpOwotICAgIGdfYXNzZXJ0X2NtcGludChyZXN1bHQsID09LCBUUlVF
KTsKLQotICAgIGdpbnQgY2FyZXRPZmZzZXQgPSBhdGtfdGV4dF9nZXRfY2FyZXRfb2Zmc2V0KHRl
eHRPYmplY3QpOwotICAgIGdfYXNzZXJ0X2NtcGludChjYXJldE9mZnNldCwgPT0sIGNoYXJhY3Rl
ckNvdW50IC0gMSk7Ci0KLSAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfY2FyZXRfb2Zmc2V0KHRl
eHRPYmplY3QsIGNoYXJhY3RlckNvdW50KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQocmVzdWx0LCA9
PSwgVFJVRSk7Ci0KLSAgICBjYXJldE9mZnNldCA9IGF0a190ZXh0X2dldF9jYXJldF9vZmZzZXQo
dGV4dE9iamVjdCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGNhcmV0T2Zmc2V0LCA9PSwgY2hhcmFj
dGVyQ291bnQpOwotCi0gICAgZ19vYmplY3RfdW5yZWYob2JqZWN0KTsKLSAgICBnX29iamVjdF91
bnJlZih3ZWJWaWV3KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0NvbWJvQm94KCkK
LXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93
ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7Ci0gICAgR3Rr
QWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9OwotICAgIGd0a193aWRn
ZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7Ci0gICAg
d2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIGNvbWJvQm94U2VsZWN0b3IsIDAs
IDAsIDApOwotCi0gICAgQXRrT2JqZWN0KiBvYmplY3QgPSBnZXRXZWJBcmVhT2JqZWN0KHdlYlZp
ZXcpOwotICAgIGdfYXNzZXJ0KG9iamVjdCk7Ci0KLSAgICBBdGtPYmplY3QqIGZvcm1PYmplY3Qg
PSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMCk7Ci0gICAgZ19hc3Nl
cnQoZm9ybU9iamVjdCk7Ci0KLSAgICBBdGtPYmplY3QqIGNvbWJvQm94ID0gYXRrX29iamVjdF9y
ZWZfYWNjZXNzaWJsZV9jaGlsZChmb3JtT2JqZWN0LCAwKTsKLSAgICBnX2Fzc2VydChBVEtfSVNf
T0JKRUNUKGNvbWJvQm94KSk7Ci0KLSAgICBBdGtPYmplY3QqIG1lbnVQb3B1cCA9IGF0a19vYmpl
Y3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoY29tYm9Cb3gsIDApOwotICAgIGdfYXNzZXJ0KEFUS19J
U19PQkpFQ1QobWVudVBvcHVwKSk7Ci0KLSAgICBBdGtPYmplY3QqIGl0ZW0xID0gYXRrX29iamVj
dF9yZWZfYWNjZXNzaWJsZV9jaGlsZChtZW51UG9wdXAsIDApOwotICAgIGdfYXNzZXJ0KEFUS19J
U19PQkpFQ1QoaXRlbTEpKTsKLQotICAgIEF0a09iamVjdCogaXRlbTIgPSBhdGtfb2JqZWN0X3Jl
Zl9hY2Nlc3NpYmxlX2NoaWxkKG1lbnVQb3B1cCwgMSk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX09C
SkVDVChpdGVtMikpOwotCi0gICAgLyogQ2hlY2sgcm9sZXMuICovCi0gICAgZ19hc3NlcnQoYXRr
X29iamVjdF9nZXRfcm9sZShjb21ib0JveCkgPT0gQVRLX1JPTEVfQ09NQk9fQk9YKTsKLSAgICBn
X2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKG1lbnVQb3B1cCkgPT0gQVRLX1JPTEVfTUVOVSk7
Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShpdGVtMSkgPT0gQVRLX1JPTEVfTUVO
VV9JVEVNKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGl0ZW0yKSA9PSBBVEtf
Uk9MRV9NRU5VX0lURU0pOwotCi0gICAgLyogQ2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRo
ZSBBdGtTZWxlY3Rpb24gaW50ZXJmYWNlLiAqLwotICAgIGdfYXNzZXJ0KEFUS19JU19TRUxFQ1RJ
T04oY29tYm9Cb3gpKTsKLSAgICBBdGtTZWxlY3Rpb24qIGF0a1NlbGVjdGlvbiA9IEFUS19TRUxF
Q1RJT04oY29tYm9Cb3gpOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfc2VsZWN0aW9uX2dldF9z
ZWxlY3Rpb25fY291bnQoYXRrU2VsZWN0aW9uKSwgPT0sIDEpOwotICAgIGdfYXNzZXJ0KGF0a19z
ZWxlY3Rpb25faXNfY2hpbGRfc2VsZWN0ZWQoYXRrU2VsZWN0aW9uLCAwKSk7Ci0gICAgZ19hc3Nl
cnQoIWF0a19zZWxlY3Rpb25faXNfY2hpbGRfc2VsZWN0ZWQoYXRrU2VsZWN0aW9uLCAxKSk7Ci0g
ICAgQXRrT2JqZWN0KiBzZWxlY3RlZEl0ZW0gPSBhdGtfc2VsZWN0aW9uX3JlZl9zZWxlY3Rpb24o
YXRrU2VsZWN0aW9uLCAwKTsKLSAgICBnX2Fzc2VydChzZWxlY3RlZEl0ZW0gPT0gaXRlbTEpOwot
ICAgIGdfb2JqZWN0X3VucmVmKHNlbGVjdGVkSXRlbSk7Ci0KLSAgICAvKiBDaGVjayB0aGF0IHRo
ZSBtZW51IHBvcHVwIGhhcyAwIGxpbmtzIGFuZCBkb2Vzbid0IGNyYXNoIGZyb20gY2hlY2tpbmcu
ICovCi0gICAgZ2ludCBuTGlua3MgPSBhdGtfaHlwZXJ0ZXh0X2dldF9uX2xpbmtzKEFUS19IWVBF
UlRFWFQobWVudVBvcHVwKSk7Ci0gICAgZ19hc3NlcnRfY21waW50KG5MaW5rcywgPT0sIDApOwot
Ci0gICAgLyogQ2hlY2sgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgQXRrQWN0aW9uIGludGVy
ZmFjZS4gKi8KLSAgICBnX2Fzc2VydChBVEtfSVNfQUNUSU9OKGNvbWJvQm94KSk7Ci0gICAgQXRr
QWN0aW9uKiBhdGtBY3Rpb24gPSBBVEtfQUNUSU9OKGNvbWJvQm94KTsKLSAgICBnX2Fzc2VydF9j
bXBpbnQoYXRrX2FjdGlvbl9nZXRfbl9hY3Rpb25zKGF0a0FjdGlvbiksID09LCAxKTsKLSAgICBn
X2Fzc2VydChhdGtfYWN0aW9uX2RvX2FjdGlvbihhdGtBY3Rpb24sIDApKTsKLQotICAgIGdfYXNz
ZXJ0KEFUS19JU19BQ1RJT04obWVudVBvcHVwKSk7Ci0gICAgYXRrQWN0aW9uID0gQVRLX0FDVElP
TihtZW51UG9wdXApOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfYWN0aW9uX2dldF9uX2FjdGlv
bnMoYXRrQWN0aW9uKSwgPT0sIDEpOwotICAgIGdfYXNzZXJ0KGF0a19hY3Rpb25fZG9fYWN0aW9u
KGF0a0FjdGlvbiwgMCkpOwotCi0gICAgZ19hc3NlcnQoQVRLX0lTX0FDVElPTihpdGVtMSkpOwot
ICAgIGF0a0FjdGlvbiA9IEFUS19BQ1RJT04oaXRlbTEpOwotICAgIGdfYXNzZXJ0X2NtcGludChh
dGtfYWN0aW9uX2dldF9uX2FjdGlvbnMoYXRrQWN0aW9uKSwgPT0sIDEpOwotICAgIGdfYXNzZXJ0
KGF0a19hY3Rpb25fZG9fYWN0aW9uKGF0a0FjdGlvbiwgMCkpOwotCi0gICAgZ19hc3NlcnQoQVRL
X0lTX0FDVElPTihpdGVtMikpOwotICAgIGF0a0FjdGlvbiA9IEFUS19BQ1RJT04oaXRlbTIpOwot
ICAgIGdfYXNzZXJ0X2NtcGludChhdGtfYWN0aW9uX2dldF9uX2FjdGlvbnMoYXRrQWN0aW9uKSwg
PT0sIDEpOwotICAgIGdfYXNzZXJ0KGF0a19hY3Rpb25fZG9fYWN0aW9uKGF0a0FjdGlvbiwgMCkp
OwotCi0gICAgLyogQWZ0ZXIgc2VsZWN0aW5nIHRoZSBzZWNvbmQgaXRlbSwgc2VsZWN0aW9uIHNo
b3VsZCBoYXZlIGNoYW5nZWQuICovCi0gICAgZ19hc3NlcnRfY21waW50KGF0a19zZWxlY3Rpb25f
Z2V0X3NlbGVjdGlvbl9jb3VudChhdGtTZWxlY3Rpb24pLCA9PSwgMSk7Ci0gICAgZ19hc3NlcnQo
IWF0a19zZWxlY3Rpb25faXNfY2hpbGRfc2VsZWN0ZWQoYXRrU2VsZWN0aW9uLCAwKSk7Ci0gICAg
Z19hc3NlcnQoYXRrX3NlbGVjdGlvbl9pc19jaGlsZF9zZWxlY3RlZChhdGtTZWxlY3Rpb24sIDEp
KTsKLSAgICBzZWxlY3RlZEl0ZW0gPSBhdGtfc2VsZWN0aW9uX3JlZl9zZWxlY3Rpb24oYXRrU2Vs
ZWN0aW9uLCAwKTsKLSAgICBnX2Fzc2VydChzZWxlY3RlZEl0ZW0gPT0gaXRlbTIpOwotICAgIGdf
b2JqZWN0X3VucmVmKHNlbGVjdGVkSXRlbSk7Ci0KLSAgICBnX29iamVjdF91bnJlZihmb3JtT2Jq
ZWN0KTsKLSAgICBnX29iamVjdF91bnJlZihjb21ib0JveCk7Ci0gICAgZ19vYmplY3RfdW5yZWYo
bWVudVBvcHVwKTsKLSAgICBnX29iamVjdF91bnJlZihpdGVtMSk7Ci0gICAgZ19vYmplY3RfdW5y
ZWYoaXRlbTIpOwotICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwotfQotCi1zdGF0aWMgZ2No
YXIqIGxvYWRpbmdFdmVudHNSZXN1bHQgPSAwOwotCi1zdGF0aWMgdm9pZCB1cGRhdGVMb2FkaW5n
RXZlbnRzUmVzdWx0KGNvbnN0IGdjaGFyKiBzaWduYWxOYW1lKQotewotICAgIGdfYXNzZXJ0KHNp
Z25hbE5hbWUpOwotCi0gICAgZ2NoYXIqIHByZXZpb3VzUmVzdWx0ID0gbG9hZGluZ0V2ZW50c1Jl
c3VsdDsKLSAgICBsb2FkaW5nRXZlbnRzUmVzdWx0ID0gZ19zdHJkdXBfcHJpbnRmKCIlc3wlcyIs
IHByZXZpb3VzUmVzdWx0LCBzaWduYWxOYW1lKTsKLSAgICBnX2ZyZWUocHJldmlvdXNSZXN1bHQp
OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gZG9jdW1lbnRMb2FkaW5nRXZlbnRDYWxsYmFjayhHU2ln
bmFsSW52b2NhdGlvbkhpbnQgKnNpZ25hbEhpbnQsIGd1aW50IG51bVBhcmFtVmFsdWVzLCBjb25z
dCBHVmFsdWUgKnBhcmFtVmFsdWVzLCBncG9pbnRlciBkYXRhKQotewotICAgIC8vIEF0IGxlYXN0
IHdlIHNob3VsZCByZWNlaXZlIHRoZSBpbnN0YW5jZSBlbWl0dGluZyB0aGUgc2lnbmFsLgotICAg
IGlmIChudW1QYXJhbVZhbHVlcyA8IDEpCi0gICAgICAgIHJldHVybiBUUlVFOwotCi0gICAgR1Np
Z25hbFF1ZXJ5IHNpZ25hbF9xdWVyeTsKLSAgICBnX3NpZ25hbF9xdWVyeShzaWduYWxIaW50LT5z
aWduYWxfaWQsICZzaWduYWxfcXVlcnkpOwotCi0gICAgdXBkYXRlTG9hZGluZ0V2ZW50c1Jlc3Vs
dChzaWduYWxfcXVlcnkuc2lnbmFsX25hbWUpOwotICAgIHJldHVybiBUUlVFOwotfQotCi1zdGF0
aWMgdm9pZCB0ZXN0V2Via2l0QXRrRG9jdW1lbnRMb2FkaW5nRXZlbnRzKCkKLXsKLSAgICBXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXco
KSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7Ci0gICAgR3RrQWxsb2NhdGlvbiBh
bGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9OwotICAgIGd0a193aWRnZXRfc2l6ZV9hbGxv
Y2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7Ci0KLSAgICAvKiBDb25uZWN0
IGdsb2JhbGx5IHRvIHNlZSB0aG9zZSBldmVudHMgZHVyaW5nIGEgZnV0dXJlIGxvYWQuICovCi0g
ICAgZ3VpbnQgbG9hZENvbXBsZXRlTGlzdGVuZXJJZCA9IGF0a19hZGRfZ2xvYmFsX2V2ZW50X2xp
c3RlbmVyKGRvY3VtZW50TG9hZGluZ0V2ZW50Q2FsbGJhY2ssICJBVEs6QXRrRG9jdW1lbnQ6bG9h
ZC1jb21wbGV0ZSIpOwotCi0gICAgLyogRG8gdGhlIGxvYWQsIHNvIHdlIGNhbiBzZWUgdGhvc2Ug
ZXZlbnRzIGhhcHBlbmluZy4gKi8KLSAgICBsb2FkaW5nRXZlbnRzUmVzdWx0ID0gZ19zdHJkdXAo
IiIpOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LCBjb250ZW50cywg
MCwgMCwgMCk7Ci0KLSAgICAvKiBUcmlnZ2VyIHRoZSBjcmVhdGlvbiBvZiB0aGUgZnVsbCBhY2Nl
c3NpYmlsaXR5IGhpZXJhcmNoeSBieQotICAgICAgIGFza2luZyBmb3IgdGhlIHdlYkFyZWEgb2Jq
ZWN0LCBzbyB3ZSBjYW4gbGlzdGVuIHRvIGV2ZW50cy4gKi8KLSAgICBnZXRXZWJBcmVhT2JqZWN0
KHdlYlZpZXcpOwotCi0gICAgYXRrX3JlbW92ZV9nbG9iYWxfZXZlbnRfbGlzdGVuZXIobG9hZENv
bXBsZXRlTGlzdGVuZXJJZCk7Ci0KLSAgICBnX2Fzc2VydF9jbXBzdHIobG9hZGluZ0V2ZW50c1Jl
c3VsdCwgPT0sICJ8bG9hZC1jb21wbGV0ZSIpOwotCi0gICAgZ19mcmVlKGxvYWRpbmdFdmVudHNS
ZXN1bHQpOwotICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwotfQotCi1zdGF0aWMgdm9pZCB0
ZXN0V2Via2l0QXRrRW1iZWRkZWRPYmplY3RzKCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmpl
Y3RfcmVmX3Npbmsod2ViVmlldyk7Ci0gICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAw
LCAwLCA4MDAsIDYwMCB9OwotICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VU
KHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5n
KHdlYlZpZXcsIGVtYmVkZGVkT2JqZWN0cywgMCwgMCwgMCk7Ci0KLSAgICBBdGtPYmplY3QqIG9i
amVjdCA9IGdldFdlYkFyZWFPYmplY3Qod2ViVmlldyk7Ci0gICAgZ19hc3NlcnQob2JqZWN0KTsK
LQotICAgIEF0a1RleHQqIHBhcmFncmFwaDEgPSBBVEtfVEVYVChhdGtfb2JqZWN0X3JlZl9hY2Nl
c3NpYmxlX2NoaWxkKG9iamVjdCwgMCkpOwotICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHBhcmFn
cmFwaDEpKTsKLSAgICBnX2Fzc2VydChBVEtfSVNfSFlQRVJURVhUKHBhcmFncmFwaDEpKTsKLQot
ICAgIGdpbnQgbkxpbmtzID0gYXRrX2h5cGVydGV4dF9nZXRfbl9saW5rcyhBVEtfSFlQRVJURVhU
KHBhcmFncmFwaDEpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQobkxpbmtzLCA9PSwgMik7Ci0KLSAg
ICBBdGtIeXBlcmxpbmsqIGhMaW5rID0gYXRrX2h5cGVydGV4dF9nZXRfbGluayhBVEtfSFlQRVJU
RVhUKHBhcmFncmFwaDEpLCAwKTsKLSAgICBnX2Fzc2VydChBVEtfSFlQRVJMSU5LKGhMaW5rKSk7
Ci0gICAgQXRrT2JqZWN0KiBoTGlua09iamVjdCA9IGF0a19oeXBlcmxpbmtfZ2V0X29iamVjdCho
TGluaywgMCk7Ci0gICAgZ19hc3NlcnQoQVRLX09CSkVDVChoTGlua09iamVjdCkpOwotICAgIGdf
YXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoaExpbmtPYmplY3QpID09IEFUS19ST0xFX0NIRUNL
X0JPWCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0X3N0YXJ0X2luZGV4
KGhMaW5rKSwgPT0sIDgpOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9l
bmRfaW5kZXgoaExpbmspLCA9PSwgOSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBlcmxp
bmtfZ2V0X25fYW5jaG9ycyhoTGluayksID09LCAxKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoYXRr
X2h5cGVybGlua19nZXRfdXJpKGhMaW5rLCAwKSwgPT0sIDApOwotCi0gICAgQXRrVGV4dCogcGFy
YWdyYXBoMiA9IEFUS19URVhUKGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0
LCAxKSk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX0hZUEVSVEVYVChwYXJhZ3JhcGgyKSk7Ci0KLSAg
ICBuTGlua3MgPSBhdGtfaHlwZXJ0ZXh0X2dldF9uX2xpbmtzKEFUS19IWVBFUlRFWFQocGFyYWdy
YXBoMikpOwotICAgIGdfYXNzZXJ0X2NtcGludChuTGlua3MsID09LCAxKTsKLQotICAgIGhMaW5r
ID0gYXRrX2h5cGVydGV4dF9nZXRfbGluayhBVEtfSFlQRVJURVhUKHBhcmFncmFwaDIpLCAwKTsK
LSAgICBnX2Fzc2VydChBVEtfSFlQRVJMSU5LKGhMaW5rKSk7Ci0gICAgaExpbmtPYmplY3QgPSBh
dGtfaHlwZXJsaW5rX2dldF9vYmplY3QoaExpbmssIDApOwotICAgIGdfYXNzZXJ0KEFUS19PQkpF
Q1QoaExpbmtPYmplY3QpKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGhMaW5r
T2JqZWN0KSA9PSBBVEtfUk9MRV9DT01CT19CT1gpOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtf
aHlwZXJsaW5rX2dldF9zdGFydF9pbmRleChoTGluayksID09LCA4KTsKLSAgICBnX2Fzc2VydF9j
bXBpbnQoYXRrX2h5cGVybGlua19nZXRfZW5kX2luZGV4KGhMaW5rKSwgPT0sIDkpOwotICAgIGdf
YXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9uX2FuY2hvcnMoaExpbmspLCA9PSwgMSk7
Ci0gICAgZ19hc3NlcnRfY21wc3RyKGF0a19oeXBlcmxpbmtfZ2V0X3VyaShoTGluaywgMCksID09
LCAwKTsKLQotICAgIEF0a1RleHQqIHBhcmFncmFwaDMgPSBBVEtfVEVYVChhdGtfb2JqZWN0X3Jl
Zl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMikpOwotICAgIGdfYXNzZXJ0KEFUS19JU19IWVBF
UlRFWFQocGFyYWdyYXBoMykpOwotCi0gICAgbkxpbmtzID0gYXRrX2h5cGVydGV4dF9nZXRfbl9s
aW5rcyhBVEtfSFlQRVJURVhUKHBhcmFncmFwaDMpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQobkxp
bmtzLCA9PSwgMSk7Ci0KLSAgICBoTGluayA9IGF0a19oeXBlcnRleHRfZ2V0X2xpbmsoQVRLX0hZ
UEVSVEVYVChwYXJhZ3JhcGgzKSwgMCk7Ci0gICAgZ19hc3NlcnQoQVRLX0hZUEVSTElOSyhoTGlu
aykpOwotICAgIGhMaW5rT2JqZWN0ID0gYXRrX2h5cGVybGlua19nZXRfb2JqZWN0KGhMaW5rLCAw
KTsKLSAgICBnX2Fzc2VydChBVEtfT0JKRUNUKGhMaW5rT2JqZWN0KSk7Ci0gICAgZ19hc3NlcnQo
YXRrX29iamVjdF9nZXRfcm9sZShoTGlua09iamVjdCkgPT0gQVRLX1JPTEVfUFVTSF9CVVRUT04p
OwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9zdGFydF9pbmRleChoTGlu
ayksID09LCAwKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfZW5kX2lu
ZGV4KGhMaW5rKSwgPT0sIDEpOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dl
dF9uX2FuY2hvcnMoaExpbmspLCA9PSwgMSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKGF0a19oeXBl
cmxpbmtfZ2V0X3VyaShoTGluaywgMCksID09LCAwKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKHBh
cmFncmFwaDEpOwotICAgIGdfb2JqZWN0X3VucmVmKHBhcmFncmFwaDIpOwotICAgIGdfb2JqZWN0
X3VucmVmKHBhcmFncmFwaDMpOwotICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwotfQotCi1z
dGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrR2V0SGVhZGVyc0luVGFibGUoKQotewotICAgIFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygp
KTsKLSAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKLSAgICBHdGtBbGxvY2F0aW9uIGFs
bG9jYXRpb24gPSB7IDAsIDAsIDgwMCwgNjAwIH07Ci0gICAgZ3RrX3dpZGdldF9zaXplX2FsbG9j
YXRlKEdUS19XSURHRVQod2ViVmlldyksICZhbGxvY2F0aW9uKTsKLSAgICB3ZWJraXRfd2ViX3Zp
ZXdfbG9hZF9zdHJpbmcod2ViVmlldywgY29udGVudHNJblRhYmxlV2l0aEhlYWRlcnMsIDAsIDAs
IDApOwotCi0gICAgQXRrT2JqZWN0KiBheFdlYlZpZXcgPSBnZXRXZWJBcmVhT2JqZWN0KHdlYlZp
ZXcpOwotICAgIGdfYXNzZXJ0KGF4V2ViVmlldyk7Ci0KLSAgICAvKiBDaGVjayB0YWJsZSB3aXRo
IGJvdGggY29sdW1uIGFuZCByb3cgaGVhZGVycy4gKi8KLSAgICBBdGtPYmplY3QqIHRhYmxlID0g
YXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChheFdlYlZpZXcsIDApOwotICAgIGdfYXNz
ZXJ0KHRhYmxlKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKHRhYmxlKSA9PSBB
VEtfUk9MRV9UQUJMRSk7Ci0KLSAgICBBdGtPYmplY3QqIGNvbEhlYWRlciA9IGF0a190YWJsZV9n
ZXRfY29sdW1uX2hlYWRlcihBVEtfVEFCTEUodGFibGUpLCAwKTsKLSAgICBnX2Fzc2VydChjb2xI
ZWFkZXIpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoY29sSGVhZGVyKSA9PSBB
VEtfUk9MRV9UQUJMRV9DRUxMKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9pbmRleF9p
bl9wYXJlbnQoY29sSGVhZGVyKSA9PSAwKTsKLQotICAgIGNvbEhlYWRlciA9IGF0a190YWJsZV9n
ZXRfY29sdW1uX2hlYWRlcihBVEtfVEFCTEUodGFibGUpLCAxKTsKLSAgICBnX2Fzc2VydChjb2xI
ZWFkZXIpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoY29sSGVhZGVyKSA9PSBB
VEtfUk9MRV9UQUJMRV9DRUxMKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9pbmRleF9p
bl9wYXJlbnQoY29sSGVhZGVyKSA9PSAxKTsKLQotICAgIGNvbEhlYWRlciA9IGF0a190YWJsZV9n
ZXRfY29sdW1uX2hlYWRlcihBVEtfVEFCTEUodGFibGUpLCAyKTsKLSAgICBnX2Fzc2VydChjb2xI
ZWFkZXIpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoY29sSGVhZGVyKSA9PSBB
VEtfUk9MRV9UQUJMRV9DRUxMKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9pbmRleF9p
bl9wYXJlbnQoY29sSGVhZGVyKSA9PSAyKTsKLQotICAgIGNvbEhlYWRlciA9IGF0a190YWJsZV9n
ZXRfY29sdW1uX2hlYWRlcihBVEtfVEFCTEUodGFibGUpLCAzKTsKLSAgICBnX2Fzc2VydChjb2xI
ZWFkZXIpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoY29sSGVhZGVyKSA9PSBB
VEtfUk9MRV9UQUJMRV9DRUxMKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9pbmRleF9p
bl9wYXJlbnQoY29sSGVhZGVyKSA9PSAyKTsKLQotICAgIEF0a09iamVjdCogcm93SGVhZGVyID0g
YXRrX3RhYmxlX2dldF9yb3dfaGVhZGVyKEFUS19UQUJMRSh0YWJsZSksIDApOwotICAgIGdfYXNz
ZXJ0KHJvd0hlYWRlcik7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShyb3dIZWFk
ZXIpID09IEFUS19ST0xFX1RBQkxFX0NFTEwpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0
X2luZGV4X2luX3BhcmVudChyb3dIZWFkZXIpID09IDApOwotCi0gICAgcm93SGVhZGVyID0gYXRr
X3RhYmxlX2dldF9yb3dfaGVhZGVyKEFUS19UQUJMRSh0YWJsZSksIDEpOwotICAgIGdfYXNzZXJ0
KHJvd0hlYWRlcik7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShyb3dIZWFkZXIp
ID09IEFUS19ST0xFX1RBQkxFX0NFTEwpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X2lu
ZGV4X2luX3BhcmVudChyb3dIZWFkZXIpID09IDMpOwotCi0gICAgcm93SGVhZGVyID0gYXRrX3Rh
YmxlX2dldF9yb3dfaGVhZGVyKEFUS19UQUJMRSh0YWJsZSksIDIpOwotICAgIGdfYXNzZXJ0KHJv
d0hlYWRlcik7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShyb3dIZWFkZXIpID09
IEFUS19ST0xFX1RBQkxFX0NFTEwpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X2luZGV4
X2luX3BhcmVudChyb3dIZWFkZXIpID09IDcpOwotCi0gICAgcm93SGVhZGVyID0gYXRrX3RhYmxl
X2dldF9yb3dfaGVhZGVyKEFUS19UQUJMRSh0YWJsZSksIDMpOwotICAgIGdfYXNzZXJ0KHJvd0hl
YWRlcik7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShyb3dIZWFkZXIpID09IEFU
S19ST0xFX1RBQkxFX0NFTEwpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X2luZGV4X2lu
X3BhcmVudChyb3dIZWFkZXIpID09IDcpOwotCi0gICAgZ19vYmplY3RfdW5yZWYodGFibGUpOwot
Ci0gICAgLyogQ2hlY2sgdGFibGUgd2l0aCBubyBoZWFkZXJzIGF0IGFsbC4gKi8KLSAgICB0YWJs
ZSA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoYXhXZWJWaWV3LCAxKTsKLSAgICBn
X2Fzc2VydCh0YWJsZSk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZSh0YWJsZSkg
PT0gQVRLX1JPTEVfVEFCTEUpOwotCi0gICAgY29sSGVhZGVyID0gYXRrX3RhYmxlX2dldF9jb2x1
bW5faGVhZGVyKEFUS19UQUJMRSh0YWJsZSksIDApOwotICAgIGdfYXNzZXJ0KGNvbEhlYWRlciA9
PSAwKTsKLQotICAgIGNvbEhlYWRlciA9IGF0a190YWJsZV9nZXRfY29sdW1uX2hlYWRlcihBVEtf
VEFCTEUodGFibGUpLCAxKTsKLSAgICBnX2Fzc2VydChjb2xIZWFkZXIgPT0gMCk7Ci0KLSAgICBy
b3dIZWFkZXIgPSBhdGtfdGFibGVfZ2V0X3Jvd19oZWFkZXIoQVRLX1RBQkxFKHRhYmxlKSwgMCk7
Ci0gICAgZ19hc3NlcnQocm93SGVhZGVyID09IDApOwotCi0gICAgcm93SGVhZGVyID0gYXRrX3Rh
YmxlX2dldF9yb3dfaGVhZGVyKEFUS19UQUJMRSh0YWJsZSksIDEpOwotICAgIGdfYXNzZXJ0KHJv
d0hlYWRlciA9PSAwKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKHRhYmxlKTsKLSAgICBnX29iamVj
dF91bnJlZih3ZWJWaWV3KTsKLX0KLQotc3RhdGljIGdpbnQgY29tcEF0a0F0dHJpYnV0ZShBdGtB
dHRyaWJ1dGUqIGExLCBBdGtBdHRyaWJ1dGUqIGEyKQotewotICAgIGdpbnQgc3RyY21wVmFsID0g
Z19zdHJjbXAwKGExLT5uYW1lLCBhMi0+bmFtZSk7Ci0gICAgaWYgKHN0cmNtcFZhbCkKLSAgICAg
ICAgcmV0dXJuIHN0cmNtcFZhbDsKLSAgICByZXR1cm4gZ19zdHJjbXAwKGExLT52YWx1ZSwgYTIt
PnZhbHVlKTsKLX0KLQotc3RhdGljIGdpbnQgY29tcEF0a0F0dHJpYnV0ZU5hbWUoQXRrQXR0cmli
dXRlKiBhMSwgQXRrQXR0cmlidXRlKiBhMikKLXsKLSAgICByZXR1cm4gZ19zdHJjbXAwKGExLT5u
YW1lLCBhMi0+bmFtZSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBhdGtBdHRyaWJ1dGVTZXRBdHRy
aWJ1dGVOYW1lSGFzVmFsdWUoQXRrQXR0cmlidXRlU2V0KiBzZXQsIGNvbnN0IGdjaGFyKiBhdHRy
aWJ1dGVOYW1lLCBjb25zdCBnY2hhciogdmFsdWUpCi17Ci0gICAgQXRrQXR0cmlidXRlIGF0Owot
ICAgIGF0Lm5hbWUgPSAoZ2NoYXIqKWF0dHJpYnV0ZU5hbWU7Ci0gICAgR1NMaXN0KiBlbGVtZW50
ID0gZ19zbGlzdF9maW5kX2N1c3RvbShzZXQsICZhdCwgKEdDb21wYXJlRnVuYyljb21wQXRrQXR0
cmlidXRlTmFtZSk7Ci0gICAgcmV0dXJuIGVsZW1lbnQgJiYgIWdfc3RyY21wMCgoKEF0a0F0dHJp
YnV0ZSopKGVsZW1lbnQtPmRhdGEpKS0+dmFsdWUsIHZhbHVlKTsKLX0KLQotc3RhdGljIGdib29s
ZWFuIGF0a0F0dHJpYnV0ZVNldENvbnRhaW5zQXR0cmlidXRlTmFtZShBdGtBdHRyaWJ1dGVTZXQq
IHNldCwgY29uc3QgZ2NoYXIqIGF0dHJpYnV0ZU5hbWUpCi17Ci0gICAgQXRrQXR0cmlidXRlIGF0
OwotICAgIGF0Lm5hbWUgPSAoZ2NoYXIqKWF0dHJpYnV0ZU5hbWU7Ci0gICAgcmV0dXJuIGdfc2xp
c3RfZmluZF9jdXN0b20oc2V0LCAmYXQsIChHQ29tcGFyZUZ1bmMpY29tcEF0a0F0dHJpYnV0ZU5h
bWUpID8gdHJ1ZSA6IGZhbHNlOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gYXRrQXR0cmlidXRlU2V0
QXR0cmlidXRlSGFzVmFsdWUoQXRrQXR0cmlidXRlU2V0KiBzZXQsIEF0a1RleHRBdHRyaWJ1dGUg
YXR0cmlidXRlLCBjb25zdCBnY2hhciogdmFsdWUpCi17Ci0gICAgcmV0dXJuIGF0a0F0dHJpYnV0
ZVNldEF0dHJpYnV0ZU5hbWVIYXNWYWx1ZShzZXQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFt
ZShhdHRyaWJ1dGUpLCB2YWx1ZSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBhdGtBdHRyaWJ1dGVT
ZXRBcmVFcXVhbChBdGtBdHRyaWJ1dGVTZXQqIHNldDEsIEF0a0F0dHJpYnV0ZVNldCogc2V0MikK
LXsKLSAgICBpZiAoIXNldDEpCi0gICAgICAgIHJldHVybiAhc2V0MjsKLQotICAgIHNldDEgPSBn
X3NsaXN0X3NvcnQoc2V0MSwgKEdDb21wYXJlRnVuYyljb21wQXRrQXR0cmlidXRlKTsKLSAgICBz
ZXQyID0gZ19zbGlzdF9zb3J0KHNldDIsIChHQ29tcGFyZUZ1bmMpY29tcEF0a0F0dHJpYnV0ZSk7
Ci0KLSAgICB3aGlsZSAoc2V0MSkgewotICAgICAgICBpZiAoIXNldDIgfHwgY29tcEF0a0F0dHJp
YnV0ZShzZXQxLT5kYXRhLCBzZXQyLT5kYXRhKSkKLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsK
LQotICAgICAgICBzZXQxID0gc2V0MS0+bmV4dDsKLSAgICAgICAgc2V0MiA9IHNldDItPm5leHQ7
Ci0gICAgfQotCi0gICAgcmV0dXJuICghc2V0Mik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJr
aXRBdGtUZXh0QXR0cmlidXRlcygpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdF
QktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0X3JlZl9z
aW5rKHdlYlZpZXcpOwotICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgODAw
LCA2MDAgfTsKLSAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3
KSwgJmFsbG9jYXRpb24pOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3
LCB0ZXh0V2l0aEF0dHJpYnV0ZXMsIDAsIDAsIDApOwotCi0gICAgQXRrT2JqZWN0KiBvYmplY3Qg
PSBnZXRXZWJBcmVhT2JqZWN0KHdlYlZpZXcpOwotICAgIGdfYXNzZXJ0KG9iamVjdCk7Ci0KLSAg
ICBBdGtPYmplY3QqIGNoaWxkID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmpl
Y3QsIDApOwotICAgIGdfYXNzZXJ0KGNoaWxkICYmIEFUS19JU19URVhUKGNoaWxkKSk7Ci0gICAg
QXRrVGV4dCogY2hpbGRUZXh0ID0gQVRLX1RFWFQoY2hpbGQpOwotCi0gICAgZ2ludCBzdGFydE9m
ZnNldDsKLSAgICBnaW50IGVuZE9mZnNldDsKLSAgICBBdGtBdHRyaWJ1dGVTZXQqIHNldDEgPSBh
dGtfdGV4dF9nZXRfcnVuX2F0dHJpYnV0ZXMoY2hpbGRUZXh0LCAwLCAmc3RhcnRPZmZzZXQsICZl
bmRPZmZzZXQpOwotICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDApOwotICAg
IGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCAxMik7Ci0gICAgZ19hc3NlcnQoYXRrQXR0
cmlidXRlU2V0QXJlRXF1YWwoc2V0MSwgMCkpOwotCi0gICAgQXRrQXR0cmlidXRlU2V0KiBzZXQy
ID0gYXRrX3RleHRfZ2V0X3J1bl9hdHRyaWJ1dGVzKGNoaWxkVGV4dCwgMTUsICZzdGFydE9mZnNl
dCwgJmVuZE9mZnNldCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMTIp
OwotICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCAxNyk7Ci0gICAgZ19hc3NlcnQo
YXRrQXR0cmlidXRlU2V0QXR0cmlidXRlSGFzVmFsdWUoc2V0MiwgQVRLX1RFWFRfQVRUUl9TVFlM
RSwgIml0YWxpYyIpKTsKLQotICAgIEF0a0F0dHJpYnV0ZVNldCogc2V0MyA9IGF0a190ZXh0X2dl
dF9ydW5fYXR0cmlidXRlcyhjaGlsZFRleHQsIDE3LCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQp
OwotICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDE3KTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgNDApOwotICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNl
dEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDMsIEFUS19URVhUX0FUVFJfV0VJR0hULCAiNzAwIikpOwot
Ci0gICAgQXRrQXR0cmlidXRlU2V0KiBzZXQ0ID0gYXRrX3RleHRfZ2V0X2RlZmF1bHRfYXR0cmli
dXRlcyhjaGlsZFRleHQpOwotICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhh
c1ZhbHVlKHNldDQsIEFUS19URVhUX0FUVFJfU1RZTEUsICJub3JtYWwiKSk7Ci0gICAgZ19hc3Nl
cnQoYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlSGFzVmFsdWUoc2V0NCwgQVRLX1RFWFRfQVRUUl9K
VVNUSUZJQ0FUSU9OLCAicmlnaHQiKSk7Ci0gICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0QXR0
cmlidXRlSGFzVmFsdWUoc2V0NCwgQVRLX1RFWFRfQVRUUl9TSVpFLCAiMTQiKSk7Ci0gICAgYXRr
X2F0dHJpYnV0ZV9zZXRfZnJlZShzZXQxKTsKLSAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHNl
dDIpOwotICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0Myk7Ci0gICAgYXRrX2F0dHJpYnV0
ZV9zZXRfZnJlZShzZXQ0KTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGNoaWxkKTsKLSAgICBjaGls
ZCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAxKTsKLSAgICBnX2Fz
c2VydChjaGlsZCAmJiBBVEtfSVNfVEVYVChjaGlsZCkpOwotICAgIGNoaWxkVGV4dCA9IEFUS19U
RVhUKGNoaWxkKTsKLQotICAgIHNldDEgPSBhdGtfdGV4dF9nZXRfZGVmYXVsdF9hdHRyaWJ1dGVz
KGNoaWxkVGV4dCk7Ci0gICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlSGFzVmFs
dWUoc2V0MSwgQVRLX1RFWFRfQVRUUl9GQU1JTFlfTkFNRSwgIm1vbm9zcGFjZSIpKTsKLSAgICBn
X2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVIYXNWYWx1ZShzZXQxLCBBVEtfVEVYVF9B
VFRSX1NUWUxFLCAibm9ybWFsIikpOwotICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEF0dHJp
YnV0ZUhhc1ZhbHVlKHNldDEsIEFUS19URVhUX0FUVFJfU1RSSUtFVEhST1VHSCwgImZhbHNlIikp
OwotICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDEsIEFU
S19URVhUX0FUVFJfV0VJR0hULCAiNDAwIikpOwotICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNl
dEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDEsIEFUS19URVhUX0FUVFJfRkdfQ09MT1IsICIxMjAsMTIx
LDEyMiIpKTsKLQotICAgIHNldDIgPSBhdGtfdGV4dF9nZXRfcnVuX2F0dHJpYnV0ZXMoY2hpbGRU
ZXh0LCA0MywgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
c3RhcnRPZmZzZXQsID09LCA0Myk7Ci0gICAgZ19hc3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0s
IDgwKTsKLSAgICAvKiBDaGVja3MgdGhhdCBkZWZhdWx0IGF0dHJpYnV0ZXMgb2YgdGV4dCBhcmUg
bm90IHJldHVybmVkIHdoZW4gY2FsbGVkIHRvIGF0a190ZXh0X2dldF9ydW5fYXR0cmlidXRlcy4g
Ki8KLSAgICBnX2Fzc2VydCghYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlSGFzVmFsdWUoc2V0Miwg
QVRLX1RFWFRfQVRUUl9GR19DT0xPUiwgIjEyMCwxMjEsMTIyIikpOwotICAgIGdfYXNzZXJ0KGF0
a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDIsIEFUS19URVhUX0FUVFJfVU5ERVJM
SU5FLCAic2luZ2xlIikpOwotICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhh
c1ZhbHVlKHNldDIsIEFUS19URVhUX0FUVFJfQkdfQ09MT1IsICI4MCw4MSw4MiIpKTsKLSAgICBh
dGtfYXR0cmlidXRlX3NldF9mcmVlKHNldDEpOwotICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUo
c2V0Mik7Ci0gICAgZ19vYmplY3RfdW5yZWYoY2hpbGQpOwotCi0gICAgY2hpbGQgPSBhdGtfb2Jq
ZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMik7Ci0gICAgZ19hc3NlcnQoY2hpbGQg
JiYgQVRLX0lTX1RFWFQoY2hpbGQpKTsKLSAgICBjaGlsZFRleHQgPSBBVEtfVEVYVChjaGlsZCk7
Ci0KLSAgICBzZXQxID0gYXRrX3RleHRfZ2V0X3J1bl9hdHRyaWJ1dGVzKGNoaWxkVGV4dCwgMCwg
JnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAgICBzZXQyID0gYXRrX3RleHRfZ2V0X3J1bl9h
dHRyaWJ1dGVzKGNoaWxkVGV4dCwgMywgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAgICBn
X2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBcmVFcXVhbChzZXQxLCBzZXQyKSk7Ci0gICAgYXRrX2F0
dHJpYnV0ZV9zZXRfZnJlZShzZXQyKTsKLQotICAgIHNldDIgPSBhdGtfdGV4dF9nZXRfcnVuX2F0
dHJpYnV0ZXMoY2hpbGRUZXh0LCAxLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOwotICAgIHNl
dDMgPSBhdGtfdGV4dF9nZXRfcnVuX2F0dHJpYnV0ZXMoY2hpbGRUZXh0LCA1LCAmc3RhcnRPZmZz
ZXQsICZlbmRPZmZzZXQpOwotICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEFyZUVxdWFsKHNl
dDIsIHNldDMpKTsKLSAgICBnX2Fzc2VydCghYXRrQXR0cmlidXRlU2V0QXJlRXF1YWwoc2V0MSwg
c2V0MikpOwotICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0Myk7Ci0KLSAgICBzZXQzID0g
YXRrX3RleHRfZ2V0X3J1bl9hdHRyaWJ1dGVzKGNoaWxkVGV4dCwgMiwgJnN0YXJ0T2Zmc2V0LCAm
ZW5kT2Zmc2V0KTsKLSAgICBzZXQ0ID0gYXRrX3RleHRfZ2V0X3J1bl9hdHRyaWJ1dGVzKGNoaWxk
VGV4dCwgNiwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAgICBnX2Fzc2VydChhdGtBdHRy
aWJ1dGVTZXRBcmVFcXVhbChzZXQzLCBzZXQ0KSk7Ci0gICAgZ19hc3NlcnQoIWF0a0F0dHJpYnV0
ZVNldEFyZUVxdWFsKHNldDEsIHNldDMpKTsKLSAgICBnX2Fzc2VydCghYXRrQXR0cmlidXRlU2V0
QXJlRXF1YWwoc2V0Miwgc2V0MykpOwotICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0MSk7
Ci0gICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJlZShzZXQyKTsKLSAgICBhdGtfYXR0cmlidXRlX3Nl
dF9mcmVlKHNldDMpOwotICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0NCk7Ci0gICAgZ19v
YmplY3RfdW5yZWYoY2hpbGQpOwotCi0gICAgY2hpbGQgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3Np
YmxlX2NoaWxkKG9iamVjdCwgMyk7Ci0gICAgZ19hc3NlcnQoY2hpbGQgJiYgQVRLX0lTX1RFWFQo
Y2hpbGQpKTsKLSAgICBjaGlsZFRleHQgPSBBVEtfVEVYVChjaGlsZCk7Ci0gICAgc2V0MSA9IGF0
a190ZXh0X2dldF9ydW5fYXR0cmlidXRlcyhjaGlsZFRleHQsIDI0LCAmc3RhcnRPZmZzZXQsICZl
bmRPZmZzZXQpOwotICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDIxKTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMjUpOwotICAgIGdfYXNzZXJ0KGF0a0F0
dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDEsIEFUS19URVhUX0FUVFJfU1RSSUtFVEhS
T1VHSCwgInRydWUiKSk7Ci0KLSAgICBzZXQyID0gYXRrX3RleHRfZ2V0X3J1bl9hdHRyaWJ1dGVz
KGNoaWxkVGV4dCwgMjUsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMjUpOwotICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZz
ZXQsID09LCAzMCk7Ci0gICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0QXJlRXF1YWwoc2V0Miwg
MCkpOwotCi0gICAgc2V0MyA9IGF0a190ZXh0X2dldF9kZWZhdWx0X2F0dHJpYnV0ZXMoY2hpbGRU
ZXh0KTsKLSAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVIYXNWYWx1ZShzZXQz
LCBBVEtfVEVYVF9BVFRSX0pVU1RJRklDQVRJT04sICJjZW50ZXIiKSk7Ci0gICAgYXRrX2F0dHJp
YnV0ZV9zZXRfZnJlZShzZXQxKTsKLSAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHNldDIpOwot
ICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0Myk7Ci0KLSAgICBnX29iamVjdF91bnJlZihj
aGlsZCk7Ci19Ci0KLXN0YXRpYyBnY2hhciogdGV4dFNlbGVjdGlvbkNoYW5nZWRSZXN1bHQgPSAw
OwotCi1zdGF0aWMgdm9pZCB0ZXh0U2VsZWN0aW9uQ2hhbmdlZENhbGxiYWNrKEF0a1RleHQqIHRl
eHQsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQodGV4dCkpOwot
Ci0gICAgZ19mcmVlKHRleHRTZWxlY3Rpb25DaGFuZ2VkUmVzdWx0KTsKLSAgICBBdGtSb2xlIHJv
bGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKEFUS19PQkpFQ1QodGV4dCkpOwotICAgIGludCBzdGFy
dE9mZnNldCA9IDA7Ci0gICAgaW50IGVuZE9mZnNldCA9IDA7Ci0gICAgYXRrX3RleHRfZ2V0X3Nl
bGVjdGlvbihBVEtfVEVYVCh0ZXh0KSwgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAg
ICB0ZXh0U2VsZWN0aW9uQ2hhbmdlZFJlc3VsdCA9IGdfc3RyZHVwX3ByaW50ZigifCVzfCVkfCVk
fCIsIGF0a19yb2xlX2dldF9uYW1lKHJvbGUpLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKLX0K
LQotc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a1RleHRTZWxlY3Rpb25zKCkKLXsKLSAgICBXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXco
KSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7Ci0gICAgR3RrQWxsb2NhdGlvbiBh
bGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9OwotICAgIGd0a193aWRnZXRfc2l6ZV9hbGxv
Y2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7Ci0gICAgd2Via2l0X3dlYl92
aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIHRleHRGb3JTZWxlY3Rpb25zLCAwLCAwLCAwKTsKLQot
ICAgIEF0a09iamVjdCogb2JqZWN0ID0gZ2V0V2ViQXJlYU9iamVjdCh3ZWJWaWV3KTsKLSAgICBn
X2Fzc2VydChvYmplY3QpOwotCi0gICAgQXRrVGV4dCogcGFyYWdyYXBoMSA9IEFUS19URVhUKGF0
a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAwKSk7Ci0gICAgZ19hc3NlcnQo
QVRLX0lTX1RFWFQocGFyYWdyYXBoMSkpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QocGFyYWdyYXBo
MSwgInRleHQtc2VsZWN0aW9uLWNoYW5nZWQiLCBHX0NBTExCQUNLKHRleHRTZWxlY3Rpb25DaGFu
Z2VkQ2FsbGJhY2spLCAwKTsKLQotICAgIEF0a1RleHQqIHBhcmFncmFwaDIgPSBBVEtfVEVYVChh
dGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMSkpOwotICAgIGdfYXNzZXJ0
KEFUS19JU19URVhUKHBhcmFncmFwaDIpKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHBhcmFncmFw
aDIsICJ0ZXh0LXNlbGVjdGlvbi1jaGFuZ2VkIiwgR19DQUxMQkFDSyh0ZXh0U2VsZWN0aW9uQ2hh
bmdlZENhbGxiYWNrKSwgMCk7Ci0KLSAgICBBdGtUZXh0KiBsaW5rID0gQVRLX1RFWFQoYXRrX29i
amVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChBVEtfT0JKRUNUKHBhcmFncmFwaDIpLCAwKSk7Ci0g
ICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQobGluaykpOwotCi0gICAgQXRrT2JqZWN0KiBsaXN0ID0g
YXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDIpOwotICAgIGdfYXNzZXJ0
KEFUS19PQkpFQ1QobGlzdCkpOwotCi0gICAgQXRrVGV4dCogbGlzdEl0ZW0gPSBBVEtfVEVYVChh
dGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGxpc3QsIDApKTsKLSAgICBnX2Fzc2VydChB
VEtfSVNfVEVYVChsaXN0SXRlbSkpOwotCi0gICAgLyogRmlyc3QgcGFyYWdyYXBoIChzaW1wbGUg
dGV4dCkuICovCi0KLSAgICAvKiBCYXNpYyBpbml0aWFsIGNoZWNrcy4gKi8KLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoYXRrX3RleHRfZ2V0X25fc2VsZWN0aW9ucyhwYXJhZ3JhcGgxKSwgPT0sIDApOwot
Ci0gICAgZ2ludCBzdGFydE9mZnNldDsKLSAgICBnaW50IGVuZE9mZnNldDsKLSAgICBnY2hhciog
c2VsZWN0ZWRUZXh0ID0gYXRrX3RleHRfZ2V0X3NlbGVjdGlvbihwYXJhZ3JhcGgxLCAwLCAmc3Rh
cnRPZmZzZXQsICZlbmRPZmZzZXQpOwotICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwg
PT0sIDApOwotICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCAwKTsKLSAgICBnX2Fz
c2VydF9jbXBzdHIoc2VsZWN0ZWRUZXh0LCA9PSwgMCk7Ci0gICAgZ19mcmVlIChzZWxlY3RlZFRl
eHQpOwotCi0gICAgLyogVHJ5IHJlbW92aW5nIGEgbm9uIGV4aXN0aW5nICh5ZXQpIHNlbGVjdGlv
bi4gKi8KLSAgICBnYm9vbGVhbiByZXN1bHQgPSBhdGtfdGV4dF9yZW1vdmVfc2VsZWN0aW9uKHBh
cmFncmFwaDEsIDApOwotICAgIGdfYXNzZXJ0KCFyZXN1bHQpOwotCi0gICAgLyogVHJ5IHNldHRp
bmcgYSAwLWNoYXIgc2VsZWN0aW9uLiAqLwotICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9zZWxl
Y3Rpb24ocGFyYWdyYXBoMSwgMCwgNSwgNSk7Ci0gICAgZ19hc3NlcnQocmVzdWx0KTsKLQotICAg
IC8qIE1ha2UgYSBzZWxlY3Rpb24gYW5kIHRlc3QgaXQuICovCi0gICAgcmVzdWx0ID0gYXRrX3Rl
eHRfc2V0X3NlbGVjdGlvbihwYXJhZ3JhcGgxLCAwLCA1LCAyNSk7Ci0gICAgZ19hc3NlcnQocmVz
dWx0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX3RleHRfZ2V0X25fc2VsZWN0aW9ucyhwYXJh
Z3JhcGgxKSwgPT0sIDEpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0U2VsZWN0aW9uQ2hhbmdl
ZFJlc3VsdCwgPT0sICJ8cGFyYWdyYXBofDV8MjV8Iik7Ci0gICAgc2VsZWN0ZWRUZXh0ID0gYXRr
X3RleHRfZ2V0X3NlbGVjdGlvbihwYXJhZ3JhcGgxLCAwLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZz
ZXQpOwotICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDUpOwotICAgIGdfYXNz
ZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCAyNSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHNlbGVj
dGVkVGV4dCwgPT0sICJhZ3JhcGggd2l0aCBwbGFpbiB0ZSIpOwotICAgIGdfZnJlZSAoc2VsZWN0
ZWRUZXh0KTsKLQotICAgIC8qIFRyeSByZW1vdmluZyB0aGUgc2VsZWN0aW9uIGZyb20gb3RoZXIg
QXRrVGV4dCBvYmplY3QgKHNob3VsZCBmYWlsKS4gKi8KLSAgICByZXN1bHQgPSBhdGtfdGV4dF9y
ZW1vdmVfc2VsZWN0aW9uKHBhcmFncmFwaDIsIDApOwotICAgIGdfYXNzZXJ0KCFyZXN1bHQpOwot
Ci0gICAgLyogUmVtb3ZlIHRoZSBzZWxlY3Rpb24gYW5kIHRlc3QgZXZlcnl0aGluZyBhZ2Fpbi4g
Ki8KLSAgICByZXN1bHQgPSBhdGtfdGV4dF9yZW1vdmVfc2VsZWN0aW9uKHBhcmFncmFwaDEsIDAp
OwotICAgIGdfYXNzZXJ0KHJlc3VsdCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a190ZXh0X2dl
dF9uX3NlbGVjdGlvbnMocGFyYWdyYXBoMSksID09LCAwKTsKLSAgICBzZWxlY3RlZFRleHQgPSBh
dGtfdGV4dF9nZXRfc2VsZWN0aW9uKHBhcmFncmFwaDEsIDAsICZzdGFydE9mZnNldCwgJmVuZE9m
ZnNldCk7Ci0gICAgLyogTm93IG9mZnNldHMgc2hvdWxkIGJlIHRoZSBzYW1lLCBzZXQgdG8gdGhl
IGxhc3QgcG9zaXRpb24gb2YgdGhlIGNhcmV0LiAqLwotICAgIGdfYXNzZXJ0X2NtcGludChzdGFy
dE9mZnNldCwgPT0sIGVuZE9mZnNldCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0
LCA9PSwgMjUpOwotICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCAyNSk7Ci0gICAg
Z19hc3NlcnRfY21wc3RyKHNlbGVjdGVkVGV4dCwgPT0sIDApOwotICAgIGdfZnJlZSAoc2VsZWN0
ZWRUZXh0KTsKLQotICAgIC8qIFNlY29uZCBwYXJhZ3JhcGggKHRleHQgKyBsaW5rICsgdGV4dCku
ICovCi0KLSAgICAvKiBTZXQgYSBzZWxlY3Rpb24gcGFydGlhbGx5IGNvdmVyaW5nIHRoZSBsaW5r
IGFuZCB0ZXN0IGl0LiAqLwotICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9zZWxlY3Rpb24ocGFy
YWdyYXBoMiwgMCwgNywgMjEpOwotICAgIGdfYXNzZXJ0KHJlc3VsdCk7Ci0KLSAgICAvKiBUZXN0
IHRoZSBwYXJhZ3JhcGggZmlyc3QuICovCi0gICAgZ19hc3NlcnRfY21waW50KGF0a190ZXh0X2dl
dF9uX3NlbGVjdGlvbnMocGFyYWdyYXBoMiksID09LCAxKTsKLSAgICBzZWxlY3RlZFRleHQgPSBh
dGtfdGV4dF9nZXRfc2VsZWN0aW9uKHBhcmFncmFwaDIsIDAsICZzdGFydE9mZnNldCwgJmVuZE9m
ZnNldCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgNyk7Ci0gICAgZ19h
c3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0sIDIxKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc2Vs
ZWN0ZWRUZXh0LCA9PSwgInJhcGggd2l0aCBhIGxpIik7Ci0gICAgZ19mcmVlIChzZWxlY3RlZFRl
eHQpOwotCi0gICAgLyogTm93IHRlc3QganVzdCB0aGUgbGluay4gKi8KLSAgICBnX2Fzc2VydF9j
bXBpbnQoYXRrX3RleHRfZ2V0X25fc2VsZWN0aW9ucyhsaW5rKSwgPT0sIDEpOwotICAgIHNlbGVj
dGVkVGV4dCA9IGF0a190ZXh0X2dldF9zZWxlY3Rpb24obGluaywgMCwgJnN0YXJ0T2Zmc2V0LCAm
ZW5kT2Zmc2V0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAwKTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgNCk7Ci0gICAgZ19hc3NlcnRfY21wc3Ry
KHNlbGVjdGVkVGV4dCwgPT0sICJhIGxpIik7Ci0gICAgZ19mcmVlIChzZWxlY3RlZFRleHQpOwot
Ci0gICAgLyogTWFrZSBhIHNlbGVjdGlvbiBhZnRlciB0aGUgbGluayBhbmQgY2hlY2sgc2VsZWN0
aW9uIGZvciB0aGUgd2hvbGUgcGFyYWdyYXBoLiAqLwotICAgIHJlc3VsdCA9IGF0a190ZXh0X3Nl
dF9zZWxlY3Rpb24ocGFyYWdyYXBoMiwgMCwgMjcsIDM3KTsKLSAgICBnX2Fzc2VydChyZXN1bHQp
OwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfdGV4dF9nZXRfbl9zZWxlY3Rpb25zKHBhcmFncmFw
aDIpLCA9PSwgMSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRleHRTZWxlY3Rpb25DaGFuZ2VkUmVz
dWx0LCA9PSwgInxwYXJhZ3JhcGh8Mjd8Mzd8Iik7Ci0gICAgc2VsZWN0ZWRUZXh0ID0gYXRrX3Rl
eHRfZ2V0X3NlbGVjdGlvbihwYXJhZ3JhcGgyLCAwLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQp
OwotICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDI3KTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMzcpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3Rl
ZFRleHQsID09LCAidGhlIG1pZGRsZSIpOwotICAgIGdfZnJlZSAoc2VsZWN0ZWRUZXh0KTsKLQot
ICAgIC8qIFJlbW92ZSBzZWxlY3Rpb25zIGFuZCB0ZXh0IGV2ZXJ5dGhpbmcgYWdhaW4uICovCi0g
ICAgcmVzdWx0ID0gYXRrX3RleHRfcmVtb3ZlX3NlbGVjdGlvbihwYXJhZ3JhcGgyLCAwKTsKLSAg
ICBnX2Fzc2VydChyZXN1bHQpOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfdGV4dF9nZXRfbl9z
ZWxlY3Rpb25zKHBhcmFncmFwaDIpLCA9PSwgMCk7Ci0gICAgc2VsZWN0ZWRUZXh0ID0gYXRrX3Rl
eHRfZ2V0X3NlbGVjdGlvbihwYXJhZ3JhcGgyLCAwLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQp
OwotICAgIC8qIE5vdyBvZmZzZXRzIHNob3VsZCBiZSB0aGUgc2FtZSAobm8gc2VsZWN0aW9uKS4g
Ki8KLSAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCBlbmRPZmZzZXQpOwotICAg
IGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZFRleHQsID09LCAwKTsKLSAgICBnX2ZyZWUgKHNlbGVj
dGVkVGV4dCk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX3RleHRfZ2V0X25fc2VsZWN0aW9u
cyhsaW5rKSwgPT0sIDApOwotICAgIHNlbGVjdGVkVGV4dCA9IGF0a190ZXh0X2dldF9zZWxlY3Rp
b24obGluaywgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAgICAvKiBOb3cgb2Zmc2V0
cyBzaG91bGQgYmUgdGhlIHNhbWUgKG5vIHNlbGVjdGlvbikuICovCi0gICAgZ19hc3NlcnRfY21w
aW50KHN0YXJ0T2Zmc2V0LCA9PSwgZW5kT2Zmc2V0KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc2Vs
ZWN0ZWRUZXh0LCA9PSwgMCk7Ci0gICAgZ19mcmVlIChzZWxlY3RlZFRleHQpOwotCi0gICAgLyog
TGlzdCBpdGVtICovCi0KLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGxpc3QpID09
IEFUS19ST0xFX0xJU1QpOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfb2JqZWN0X2dldF9uX2Fj
Y2Vzc2libGVfY2hpbGRyZW4obGlzdCksID09LCAxKTsKLQotICAgIC8qIEl0J3Mgbm90IHBvc3Np
YmxlIHRvIHNlbGVjdCB0ZXh0IGluc2lkZSBhbiBpdGVtJ3MgbWFya2VyLiAqLwotICAgIHJlc3Vs
dCA9IGF0a190ZXh0X3NldF9zZWxlY3Rpb24gKGxpc3RJdGVtLCAwLCAwLCA5KTsKLSAgICBnX2Fz
c2VydCghcmVzdWx0KTsKLSAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfc2VsZWN0aW9uIChsaXN0
SXRlbSwgMCwgOSwgMSk7Ci0gICAgZ19hc3NlcnQoIXJlc3VsdCk7Ci0KLSAgICAvKiBJdCBzaG91
bGQgYmUgcG9zc2libGUgdG8gc2VsZWN0IHRleHQgaW5zaWRlIGFuIGl0ZW0ncyB0ZXh0LiAqLwot
ICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9zZWxlY3Rpb24gKGxpc3RJdGVtLCAwLCAzLCA5KTsK
LSAgICBnX2Fzc2VydChyZXN1bHQpOwotCi0gICAgZ19hc3NlcnRfY21waW50KGF0a190ZXh0X2dl
dF9uX3NlbGVjdGlvbnMobGlzdEl0ZW0pLCA9PSwgMSk7Ci0gICAgc2VsZWN0ZWRUZXh0ID0gYXRr
X3RleHRfZ2V0X3NlbGVjdGlvbihsaXN0SXRlbSwgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0
KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAzKTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgOSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVk
VGV4dCwgPT0sICJBIGxpc3QiKTsKLSAgICBnX2ZyZWUgKHNlbGVjdGVkVGV4dCk7Ci0KLSAgICBn
X2ZyZWUodGV4dFNlbGVjdGlvbkNoYW5nZWRSZXN1bHQpOwotCi0gICAgZ19vYmplY3RfdW5yZWYo
cGFyYWdyYXBoMSk7Ci0gICAgZ19vYmplY3RfdW5yZWYocGFyYWdyYXBoMik7Ci0gICAgZ19vYmpl
Y3RfdW5yZWYobGluayk7Ci0gICAgZ19vYmplY3RfdW5yZWYobGlzdCk7Ci0gICAgZ19vYmplY3Rf
dW5yZWYobGlzdEl0ZW0pOwotICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwotfQotCi1zdGF0
aWMgdm9pZCB0ZXN0V2Via2l0QXRrR2V0RXh0ZW50cygpCi17Ci0gICAgV2ViS2l0V2ViVmlldyog
d2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdf
b2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOwotICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9
IHsgMCwgMCwgODAwLCA2MDAgfTsKLSAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJ
REdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0
cmluZyh3ZWJWaWV3LCBjZW50ZXJlZENvbnRlbnRzLCAwLCAwLCAwKTsKLQotICAgIEF0a09iamVj
dCogb2JqZWN0ID0gZ2V0V2ViQXJlYU9iamVjdCh3ZWJWaWV3KTsKLSAgICBnX2Fzc2VydChvYmpl
Y3QpOwotCi0gICAgQXRrVGV4dCogc2hvcnRUZXh0MSA9IEFUS19URVhUKGF0a19vYmplY3RfcmVm
X2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAwKSk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQo
c2hvcnRUZXh0MSkpOwotICAgIEF0a1RleHQqIGxvbmdUZXh0ID0gQVRLX1RFWFQoYXRrX29iamVj
dF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDEpKTsKLSAgICBnX2Fzc2VydChBVEtfSVNf
VEVYVChsb25nVGV4dCkpOwotICAgIEF0a1RleHQqIHNob3J0VGV4dDIgPSBBVEtfVEVYVChhdGtf
b2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMikpOwotICAgIGdfYXNzZXJ0KEFU
S19JU19URVhUKHNob3J0VGV4dDIpKTsKLSAgICBBdGtUZXh0KiBtdWx0aWxpbmVUZXh0ID0gQVRL
X1RFWFQoYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDMpKTsKLSAgICBn
X2Fzc2VydChBVEtfSVNfVEVYVChtdWx0aWxpbmVUZXh0KSk7Ci0KLSAgICAvKiBTdGFydCB3aXRo
IHdpbmRvdyBleHRlbnRzLiAqLwotICAgIEF0a1RleHRSZWN0YW5nbGUgc2xpbmVfd2luZG93MSwg
c2xpbmVfd2luZG93MiwgbGxpbmVfd2luZG93LCBtbGluZV93aW5kb3c7Ci0gICAgYXRrX3RleHRf
Z2V0X3JhbmdlX2V4dGVudHMoc2hvcnRUZXh0MSwgMCwgMTAsIEFUS19YWV9XSU5ET1csICZzbGlu
ZV93aW5kb3cxKTsKLSAgICBhdGtfdGV4dF9nZXRfcmFuZ2VfZXh0ZW50cyhsb25nVGV4dCwgMCwg
NDQsIEFUS19YWV9XSU5ET1csICZsbGluZV93aW5kb3cpOwotICAgIGF0a190ZXh0X2dldF9yYW5n
ZV9leHRlbnRzKHNob3J0VGV4dDIsIDAsIDEwLCBBVEtfWFlfV0lORE9XLCAmc2xpbmVfd2luZG93
Mik7Ci0gICAgYXRrX3RleHRfZ2V0X3JhbmdlX2V4dGVudHMobXVsdGlsaW5lVGV4dCwgMCwgNjAs
IEFUS19YWV9XSU5ET1csICZtbGluZV93aW5kb3cpOwotCi0gICAgLyogQ2hlY2sgdmVydGljYWwg
bGluZSBwb3NpdGlvbi4gKi8KLSAgICBnX2Fzc2VydF9jbXBpbnQoc2xpbmVfd2luZG93MS55ICsg
c2xpbmVfd2luZG93MS5oZWlnaHQsIDw9LCBsbGluZV93aW5kb3cueSk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KGxsaW5lX3dpbmRvdy55ICsgbGxpbmVfd2luZG93LmhlaWdodCArIHNsaW5lX3dpbmRv
dzIuaGVpZ2h0LCA8PSwgbWxpbmVfd2luZG93LnkpOwotCi0gICAgLyogUGFyYWdyYXBocyAxIGFu
ZCAzIGhhdmUgaWRlbnRpY2FsIHRleHQgYW5kIGFsaWdubWVudC4gKi8KLSAgICBnX2Fzc2VydF9j
bXBpbnQoc2xpbmVfd2luZG93MS54LCA9PSwgc2xpbmVfd2luZG93Mi54KTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoc2xpbmVfd2luZG93MS53aWR0aCwgPT0sIHNsaW5lX3dpbmRvdzIud2lkdGgpOwot
ICAgIGdfYXNzZXJ0X2NtcGludChzbGluZV93aW5kb3cxLmhlaWdodCwgPT0sIHNsaW5lX3dpbmRv
dzIuaGVpZ2h0KTsKLQotICAgIC8qIEFsbCBsaW5lcyBzaG91bGQgYmUgdGhlIHNhbWUgaGVpZ2h0
OyBsaW5lIDIgaXMgdGhlIHdpZGVzdCBsaW5lLiAqLwotICAgIGdfYXNzZXJ0X2NtcGludChzbGlu
ZV93aW5kb3cxLmhlaWdodCwgPT0sIGxsaW5lX3dpbmRvdy5oZWlnaHQpOwotICAgIGdfYXNzZXJ0
X2NtcGludChzbGluZV93aW5kb3cxLndpZHRoLCA8LCBsbGluZV93aW5kb3cud2lkdGgpOwotCi0g
ICAgLyogTWFrZSBzdXJlIHRoZSBjaGFyYWN0ZXIgZXh0ZW50cyBqaXZlIHdpdGggdGhlIHJhbmdl
IGV4dGVudHMuICovCi0gICAgZ2ludCB4OwotICAgIGdpbnQgeTsKLSAgICBnaW50IHdpZHRoOwot
ICAgIGdpbnQgaGVpZ2h0OwotCi0gICAgLyogRmlyc3QgcGFyYWdyYXBoIChzaG9ydCB0ZXh0KS4g
Ki8KLSAgICBhdGtfdGV4dF9nZXRfY2hhcmFjdGVyX2V4dGVudHMoc2hvcnRUZXh0MSwgMCwgJngs
ICZ5LCAmd2lkdGgsICZoZWlnaHQsIEFUS19YWV9XSU5ET1cpOwotICAgIGdfYXNzZXJ0X2NtcGlu
dCh4LCA9PSwgc2xpbmVfd2luZG93MS54KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoeSwgPT0sIHNs
aW5lX3dpbmRvdzEueSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGhlaWdodCwgPT0sIHNsaW5lX3dp
bmRvdzEuaGVpZ2h0KTsKLQotICAgIGF0a190ZXh0X2dldF9jaGFyYWN0ZXJfZXh0ZW50cyhzaG9y
dFRleHQxLCA5LCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCwgQVRLX1hZX1dJTkRPVyk7Ci0gICAg
Z19hc3NlcnRfY21waW50KHgsID09LCBzbGluZV93aW5kb3cxLnggKyBzbGluZV93aW5kb3cxLndp
ZHRoIC0gd2lkdGgpOwotICAgIGdfYXNzZXJ0X2NtcGludCh5LCA9PSwgc2xpbmVfd2luZG93MS55
KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoaGVpZ2h0LCA9PSwgc2xpbmVfd2luZG93MS5oZWlnaHQp
OwotCi0gICAgLyogU2Vjb25kIHBhcmFncmFwaCAobG9uZyB0ZXh0KS4gKi8KLSAgICBhdGtfdGV4
dF9nZXRfY2hhcmFjdGVyX2V4dGVudHMobG9uZ1RleHQsIDAsICZ4LCAmeSwgJndpZHRoLCAmaGVp
Z2h0LCBBVEtfWFlfV0lORE9XKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoeCwgPT0sIGxsaW5lX3dp
bmRvdy54KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoeSwgPT0sIGxsaW5lX3dpbmRvdy55KTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQoaGVpZ2h0LCA9PSwgbGxpbmVfd2luZG93LmhlaWdodCk7Ci0KLSAg
ICBhdGtfdGV4dF9nZXRfY2hhcmFjdGVyX2V4dGVudHMobG9uZ1RleHQsIDQzLCAmeCwgJnksICZ3
aWR0aCwgJmhlaWdodCwgQVRLX1hZX1dJTkRPVyk7Ci0gICAgZ19hc3NlcnRfY21waW50KHgsID09
LCBsbGluZV93aW5kb3cueCArIGxsaW5lX3dpbmRvdy53aWR0aCAtIHdpZHRoKTsKLSAgICBnX2Fz
c2VydF9jbXBpbnQoeSwgPT0sIGxsaW5lX3dpbmRvdy55KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
aGVpZ2h0LCA9PSwgbGxpbmVfd2luZG93LmhlaWdodCk7Ci0KLSAgICAvKiBUaGlyZCBwYXJhZ3Jh
cGggKHNob3J0IHRleHQpLiAqLwotICAgIGF0a190ZXh0X2dldF9jaGFyYWN0ZXJfZXh0ZW50cyhz
aG9ydFRleHQyLCAwLCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCwgQVRLX1hZX1dJTkRPVyk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KHgsID09LCBzbGluZV93aW5kb3cyLngpOwotICAgIGdfYXNzZXJ0
X2NtcGludCh5LCA9PSwgc2xpbmVfd2luZG93Mi55KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoaGVp
Z2h0LCA9PSwgc2xpbmVfd2luZG93Mi5oZWlnaHQpOwotCi0gICAgYXRrX3RleHRfZ2V0X2NoYXJh
Y3Rlcl9leHRlbnRzKHNob3J0VGV4dDIsIDksICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0LCBBVEtf
WFlfV0lORE9XKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoeCwgPT0sIHNsaW5lX3dpbmRvdzIueCAr
IHNsaW5lX3dpbmRvdzIud2lkdGggLSB3aWR0aCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHksID09
LCBzbGluZV93aW5kb3cyLnkpOwotICAgIGdfYXNzZXJ0X2NtcGludChoZWlnaHQsID09LCBzbGlu
ZV93aW5kb3cyLmhlaWdodCk7Ci0KLSAgICAvKiBGb3VyIHBhcmFncmFwaCAoMyBsaW5lcyBtdWx0
aS1saW5lIHRleHQpLiAqLwotICAgIGF0a190ZXh0X2dldF9jaGFyYWN0ZXJfZXh0ZW50cyhtdWx0
aWxpbmVUZXh0LCAwLCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCwgQVRLX1hZX1dJTkRPVyk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KHgsID09LCBtbGluZV93aW5kb3cueCk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KHksID09LCBtbGluZV93aW5kb3cueSk7Ci0gICAgZ19hc3NlcnRfY21waW50KDMgKiBo
ZWlnaHQsID09LCBtbGluZV93aW5kb3cuaGVpZ2h0KTsKLQotICAgIGF0a190ZXh0X2dldF9jaGFy
YWN0ZXJfZXh0ZW50cyhtdWx0aWxpbmVUZXh0LCA1OSwgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQs
IEFUS19YWV9XSU5ET1cpOwotICAgIC8qIExhc3QgbGluZSB3b24ndCBmaWxsIHRoZSB3aG9sZSB3
aWR0aCBvZiB0aGUgcmVjdGFuZ2xlLiAqLwotICAgIGdfYXNzZXJ0X2NtcGludCh4LCA8PSwgbWxp
bmVfd2luZG93LnggKyBtbGluZV93aW5kb3cud2lkdGggLSB3aWR0aCk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KHksID09LCBtbGluZV93aW5kb3cueSArIG1saW5lX3dpbmRvdy5oZWlnaHQgLSBoZWln
aHQpOwotICAgIGdfYXNzZXJ0X2NtcGludChoZWlnaHQsIDw9LCBtbGluZV93aW5kb3cuaGVpZ2h0
KTsKLQotICAgIC8qIENoZWNrIHRoYXQgZXh0ZW50IGZvciBhIGZ1bGwgbGluZSBhcmUgdGhlIHNh
bWUgaGVpZ2h0IHRoYW4gZm9yCi0gICAgICAgYSBwYXJ0aWFsIHNlY3Rpb24gb2YgdGhlIHNhbWUg
bGluZSAqLwotICAgIGdpbnQgc3RhcnRPZmZzZXQ7Ci0gICAgZ2ludCBlbmRPZmZzZXQ7Ci0KLSNp
ZiAhQVRLX0NIRUNLX1ZFUlNJT04oMiwgMTAsIDApCi0gICAgZ2NoYXIqIHRleHQgPSBhdGtfdGV4
dF9nZXRfdGV4dF9hdF9vZmZzZXQobXVsdGlsaW5lVGV4dCwgMCwgQVRLX1RFWFRfQk9VTkRBUllf
TElORV9TVEFSVCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAgICBnX2ZyZWUodGV4dCk7
Ci0jZWxzZQotICAgIGdjaGFyKiB0ZXh0ID0gYXRrX3RleHRfZ2V0X3N0cmluZ19hdF9vZmZzZXQo
bXVsdGlsaW5lVGV4dCwgMCwgQVRLX1RFWFRfR1JBTlVMQVJJVFlfTElORSwgJnN0YXJ0T2Zmc2V0
LCAmZW5kT2Zmc2V0KTsKLSAgICBnX2ZyZWUodGV4dCk7Ci0jZW5kaWYKLQotICAgIEF0a1RleHRS
ZWN0YW5nbGUgZmxpbmVfd2luZG93OwotICAgIEF0a1RleHRSZWN0YW5nbGUgYWZsaW5lX3dpbmRv
dzsKLSAgICBhdGtfdGV4dF9nZXRfcmFuZ2VfZXh0ZW50cyhtdWx0aWxpbmVUZXh0LCBzdGFydE9m
ZnNldCwgZW5kT2Zmc2V0LCBBVEtfWFlfV0lORE9XLCAmZmxpbmVfd2luZG93KTsKLSAgICBhdGtf
dGV4dF9nZXRfcmFuZ2VfZXh0ZW50cyhtdWx0aWxpbmVUZXh0LCBzdGFydE9mZnNldCwgZW5kT2Zm
c2V0IC0gMSwgQVRLX1hZX1dJTkRPVywgJmFmbGluZV93aW5kb3cpOwotICAgIGdfYXNzZXJ0X2Nt
cGludChmbGluZV93aW5kb3cueCwgPT0sIGFmbGluZV93aW5kb3cueCk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KGZsaW5lX3dpbmRvdy55LCA9PSwgYWZsaW5lX3dpbmRvdy55KTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoZmxpbmVfd2luZG93LmhlaWdodCwgPT0sIGFmbGluZV93aW5kb3cuaGVpZ2h0KTsK
LQotICAgIGdfb2JqZWN0X3VucmVmKHNob3J0VGV4dDEpOwotICAgIGdfb2JqZWN0X3VucmVmKHNo
b3J0VGV4dDIpOwotICAgIGdfb2JqZWN0X3VucmVmKGxvbmdUZXh0KTsKLSAgICBnX29iamVjdF91
bnJlZihtdWx0aWxpbmVUZXh0KTsKLSAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKLX0KLQot
c3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0xheW91dEFuZERhdGFUYWJsZXMoKQotewotICAgIFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25l
dygpKTsKLSAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKLSAgICBHdGtBbGxvY2F0aW9u
IGFsbG9jYXRpb24gPSB7IDAsIDAsIDgwMCwgNjAwIH07Ci0gICAgZ3RrX3dpZGdldF9zaXplX2Fs
bG9jYXRlKEdUS19XSURHRVQod2ViVmlldyksICZhbGxvY2F0aW9uKTsKLSAgICB3ZWJraXRfd2Vi
X3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgbGF5b3V0QW5kRGF0YVRhYmxlcywgMCwgMCwgMCk7
Ci0KLSAgICBBdGtPYmplY3QqIG9iamVjdCA9IGdldFdlYkFyZWFPYmplY3Qod2ViVmlldyk7Ci0g
ICAgZ19hc3NlcnQob2JqZWN0KTsKLQotICAgIC8qIENoZWNrIHRoZSBub24tbGF5b3V0IHRhYmxl
IChkYXRhIHRhYmxlKS4gKi8KLQotICAgIEF0a09iamVjdCogdGFibGUxID0gYXRrX29iamVjdF9y
ZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDApOwotICAgIGdfYXNzZXJ0KEFUS19JU19UQUJM
RSh0YWJsZTEpKTsKLSAgICBBdGtBdHRyaWJ1dGVTZXQqIHNldDEgPSBhdGtfb2JqZWN0X2dldF9h
dHRyaWJ1dGVzKHRhYmxlMSk7Ci0gICAgZ19hc3NlcnQoc2V0MSk7Ci0gICAgZ19hc3NlcnQoIWF0
a0F0dHJpYnV0ZVNldENvbnRhaW5zQXR0cmlidXRlTmFtZShzZXQxLCAibGF5b3V0LWd1ZXNzIikp
OwotICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0MSk7Ci0KLSAgICAvKiBDaGVjayB0aGUg
bGF5b3V0IHRhYmxlLiAqLwotCi0gICAgQXRrT2JqZWN0KiB0YWJsZTIgPSBhdGtfb2JqZWN0X3Jl
Zl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMSk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX1RBQkxF
KHRhYmxlMikpOwotICAgIEF0a0F0dHJpYnV0ZVNldCogc2V0MiA9IGF0a19vYmplY3RfZ2V0X2F0
dHJpYnV0ZXModGFibGUyKTsKLSAgICBnX2Fzc2VydChzZXQyKTsKLSAgICBnX2Fzc2VydChhdGtB
dHRyaWJ1dGVTZXRDb250YWluc0F0dHJpYnV0ZU5hbWUoc2V0MiwgImxheW91dC1ndWVzcyIpKTsK
LSAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVOYW1lSGFzVmFsdWUoc2V0Miwg
ImxheW91dC1ndWVzcyIsICJ0cnVlIikpOwotICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0
Mik7Ci0KLSAgICBnX29iamVjdF91bnJlZih0YWJsZTEpOwotICAgIGdfb2JqZWN0X3VucmVmKHRh
YmxlMik7Ci0gICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRl
c3RXZWJraXRBdGtMaW5rc1dpdGhJbmxpbmVJbWFnZXMoKQotewotICAgIFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBn
X29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24g
PSB7IDAsIDAsIDgwMCwgNjAwIH07Ci0gICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19X
SURHRVQod2ViVmlldyksICZhbGxvY2F0aW9uKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9z
dHJpbmcod2ViVmlldywgbGlua3NXaXRoSW5saW5lSW1hZ2VzLCAwLCAwLCAwKTsKLQotICAgIEF0
a09iamVjdCogb2JqZWN0ID0gZ2V0V2ViQXJlYU9iamVjdCh3ZWJWaWV3KTsKLSAgICBnX2Fzc2Vy
dChvYmplY3QpOwotCi0gICAgLyogRmlyc3QgcGFyYWdyYXBoIChsaW5rIGF0IHRoZSBiZWdpbm5p
bmcpLiAqLwotICAgIEF0a09iamVjdCogcGFyYWdyYXBoID0gYXRrX29iamVjdF9yZWZfYWNjZXNz
aWJsZV9jaGlsZChvYmplY3QsIDApOwotICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHBhcmFncmFw
aCkpOwotICAgIGdpbnQgc3RhcnRPZmZzZXQ7Ci0gICAgZ2ludCBlbmRPZmZzZXQ7Ci0KLSNpZiAh
QVRLX0NIRUNLX1ZFUlNJT04oMiwgMTAsIDApCi0gICAgZ2NoYXIqIHRleHQgPSBhdGtfdGV4dF9n
ZXRfdGV4dF9hdF9vZmZzZXQoQVRLX1RFWFQocGFyYWdyYXBoKSwgMCwgQVRLX1RFWFRfQk9VTkRB
UllfTElORV9TVEFSVCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAgICBnX2Fzc2VydCh0
ZXh0KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGV4dCwgPT0sICJmb28gYmFyIGJheiIpOwotICAg
IGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDApOwotICAgIGdfYXNzZXJ0X2NtcGlu
dChlbmRPZmZzZXQsID09LCAxMSk7Ci0gICAgZ19mcmVlKHRleHQpOwotI2Vsc2UKLSAgICBnY2hh
ciogdGV4dCA9IGF0a190ZXh0X2dldF9zdHJpbmdfYXRfb2Zmc2V0KEFUS19URVhUKHBhcmFncmFw
aCksIDAsIEFUS19URVhUX0dSQU5VTEFSSVRZX0xJTkUsICZzdGFydE9mZnNldCwgJmVuZE9mZnNl
dCk7Ci0gICAgZ19hc3NlcnQodGV4dCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09LCAi
Zm9vIGJhciBiYXoiKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAwKTsK
LSAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMTEpOwotICAgIGdfZnJlZSh0ZXh0
KTsKLSNlbmRpZgotCi0gICAgZ19vYmplY3RfdW5yZWYocGFyYWdyYXBoKTsKLQotICAgIC8qIFNl
Y29uZCBwYXJhZ3JhcGggKGxpbmsgaW4gdGhlIG1pZGRsZSkuICovCi0gICAgcGFyYWdyYXBoID0g
YXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDEpOwotICAgIGdfYXNzZXJ0
KEFUS19JU19URVhUKHBhcmFncmFwaCkpOwotCi0jaWYgIUFUS19DSEVDS19WRVJTSU9OKDIsIDEw
LCAwKQotICAgIHRleHQgPSBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQoQVRLX1RFWFQocGFy
YWdyYXBoKSwgMCwgQVRLX1RFWFRfQk9VTkRBUllfTElORV9TVEFSVCwgJnN0YXJ0T2Zmc2V0LCAm
ZW5kT2Zmc2V0KTsKLSAgICBnX2Fzc2VydCh0ZXh0KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGV4
dCwgPT0sICJmb28gYmFyIGJheiIpOwotICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwg
PT0sIDApOwotICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCAxMSk7Ci0gICAgZ19m
cmVlKHRleHQpOwotI2Vsc2UKLSAgICB0ZXh0ID0gYXRrX3RleHRfZ2V0X3N0cmluZ19hdF9vZmZz
ZXQoQVRLX1RFWFQocGFyYWdyYXBoKSwgMCwgQVRLX1RFWFRfR1JBTlVMQVJJVFlfTElORSwgJnN0
YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAgICBnX2Fzc2VydCh0ZXh0KTsKLSAgICBnX2Fzc2Vy
dF9jbXBzdHIodGV4dCwgPT0sICJmb28gYmFyIGJheiIpOwotICAgIGdfYXNzZXJ0X2NtcGludChz
dGFydE9mZnNldCwgPT0sIDApOwotICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCAx
MSk7Ci0gICAgZ19mcmVlKHRleHQpOwotI2VuZGlmCi0KLSAgICBnX29iamVjdF91bnJlZihwYXJh
Z3JhcGgpOwotCi0gICAgLyogVGhpcmQgcGFyYWdyYXBoIChsaW5rIGF0IHRoZSBlbmQpLiAqLwot
ICAgIHBhcmFncmFwaCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAy
KTsKLSAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChwYXJhZ3JhcGgpKTsKLQotI2lmICFBVEtfQ0hF
Q0tfVkVSU0lPTigyLCAxMCwgMCkKLSAgICB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zm
c2V0KEFUS19URVhUKHBhcmFncmFwaCksIDAsIEFUS19URVhUX0JPVU5EQVJZX0xJTkVfU1RBUlQs
ICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7Ci0gICAgZ19hc3NlcnQodGV4dCk7Ci0gICAgZ19h
c3NlcnRfY21wc3RyKHRleHQsID09LCAiZm9vIGJhciBiYXoiKTsKLSAgICBnX2Fzc2VydF9jbXBp
bnQoc3RhcnRPZmZzZXQsID09LCAwKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9
PSwgMTEpOwotICAgIGdfZnJlZSh0ZXh0KTsKLSNlbHNlCi0gICAgdGV4dCA9IGF0a190ZXh0X2dl
dF9zdHJpbmdfYXRfb2Zmc2V0KEFUS19URVhUKHBhcmFncmFwaCksIDAsIEFUS19URVhUX0dSQU5V
TEFSSVRZX0xJTkUsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7Ci0gICAgZ19hc3NlcnQodGV4
dCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09LCAiZm9vIGJhciBiYXoiKTsKLSAgICBn
X2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAwKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
ZW5kT2Zmc2V0LCA9PSwgMTEpOwotICAgIGdfZnJlZSh0ZXh0KTsKLSNlbmRpZgotCi0gICAgZ19v
YmplY3RfdW5yZWYocGFyYWdyYXBoKTsKLSAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKLX0K
LQotc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0h5cGVydGV4dEFuZEh5cGVybGlua3MoKQotewot
ICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92
aWV3X25ldygpKTsKLSAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKLSAgICBHdGtBbGxv
Y2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDgwMCwgNjAwIH07Ci0gICAgZ3RrX3dpZGdldF9z
aXplX2FsbG9jYXRlKEdUS19XSURHRVQod2ViVmlldyksICZhbGxvY2F0aW9uKTsKLSAgICB3ZWJr
aXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgaHlwZXJ0ZXh0QW5kSHlwZXJsaW5rcywg
MCwgMCwgMCk7Ci0KLSAgICBBdGtPYmplY3QqIG9iamVjdCA9IGdldFdlYkFyZWFPYmplY3Qod2Vi
Vmlldyk7Ci0gICAgZ19hc3NlcnQob2JqZWN0KTsKLQotICAgIEF0a09iamVjdCogcGFyYWdyYXBo
MSA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAwKTsKLSAgICBnX2Fz
c2VydChBVEtfT0JKRUNUKHBhcmFncmFwaDEpKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dl
dF9yb2xlKHBhcmFncmFwaDEpID09IEFUS19ST0xFX1BBUkFHUkFQSCk7Ci0gICAgZ19hc3NlcnQo
QVRLX0lTX0hZUEVSVEVYVChwYXJhZ3JhcGgxKSk7Ci0KLSAgICAvKiBObyBsaW5rcyBpbiB0aGUg
Zmlyc3QgcGFyYWdyYXBoLiAqLwotICAgIGdpbnQgbkxpbmtzID0gYXRrX2h5cGVydGV4dF9nZXRf
bl9saW5rcyhBVEtfSFlQRVJURVhUKHBhcmFncmFwaDEpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
bkxpbmtzLCA9PSwgMCk7Ci0KLSAgICBBdGtPYmplY3QqIHBhcmFncmFwaDIgPSBhdGtfb2JqZWN0
X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMSk7Ci0gICAgZ19hc3NlcnQoQVRLX09CSkVD
VChwYXJhZ3JhcGgyKSk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShwYXJhZ3Jh
cGgyKSA9PSBBVEtfUk9MRV9QQVJBR1JBUEgpOwotICAgIGdfYXNzZXJ0KEFUS19JU19IWVBFUlRF
WFQocGFyYWdyYXBoMikpOwotCi0gICAgLyogQ2hlY2sgbGlua3MgaW4gdGhlIHNlY29uZCBwYXJh
Z3JhcGguCi0gICAgICAgbkxpbmtzID0gYXRrX2h5cGVydGV4dF9nZXRfbl9saW5rcyhBVEtfSFlQ
RVJURVhUKHBhcmFncmFwaDIpKTsKLSAgICAgICBnX2Fzc2VydF9jbXBpbnQobkxpbmtzLCA9PSwg
Myk7ICovCi0KLSAgICBBdGtIeXBlcmxpbmsqIGhMaW5rMSA9IGF0a19oeXBlcnRleHRfZ2V0X2xp
bmsoQVRLX0hZUEVSVEVYVChwYXJhZ3JhcGgyKSwgMCk7Ci0gICAgZ19hc3NlcnQoQVRLX0hZUEVS
TElOSyhoTGluazEpKTsKLSAgICBBdGtPYmplY3QqIGhMaW5rT2JqZWN0MSA9IGF0a19oeXBlcmxp
bmtfZ2V0X29iamVjdChoTGluazEsIDApOwotICAgIGdfYXNzZXJ0KEFUS19PQkpFQ1QoaExpbmtP
YmplY3QxKSk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShoTGlua09iamVjdDEp
ID09IEFUS19ST0xFX0xJTkspOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dl
dF9zdGFydF9pbmRleChoTGluazEpLCA9PSwgMCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a19o
eXBlcmxpbmtfZ2V0X2VuZF9pbmRleChoTGluazEpLCA9PSwgNik7Ci0gICAgZ19hc3NlcnRfY21w
aW50KGF0a19oeXBlcmxpbmtfZ2V0X25fYW5jaG9ycyhoTGluazEpLCA9PSwgMSk7Ci0gICAgZ19h
c3NlcnRfY21wc3RyKGF0a19oeXBlcmxpbmtfZ2V0X3VyaShoTGluazEsIDApLCA9PSwgImh0dHA6
Ly9mb28uYmFyLmJhei8iKTsKLQotICAgIEF0a0h5cGVybGluayogaExpbmsyID0gYXRrX2h5cGVy
dGV4dF9nZXRfbGluayhBVEtfSFlQRVJURVhUKHBhcmFncmFwaDIpLCAxKTsKLSAgICBnX2Fzc2Vy
dChBVEtfSFlQRVJMSU5LKGhMaW5rMikpOwotICAgIEF0a09iamVjdCogaExpbmtPYmplY3QyID0g
YXRrX2h5cGVybGlua19nZXRfb2JqZWN0KGhMaW5rMiwgMCk7Ci0gICAgZ19hc3NlcnQoQVRLX09C
SkVDVChoTGlua09iamVjdDIpKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGhM
aW5rT2JqZWN0MikgPT0gQVRLX1JPTEVfTElOSyk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a19o
eXBlcmxpbmtfZ2V0X3N0YXJ0X2luZGV4KGhMaW5rMiksID09LCAxMik7Ci0gICAgZ19hc3NlcnRf
Y21waW50KGF0a19oeXBlcmxpbmtfZ2V0X2VuZF9pbmRleChoTGluazIpLCA9PSwgMzIpOwotICAg
IGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9uX2FuY2hvcnMoaExpbmsyKSwgPT0s
IDEpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihhdGtfaHlwZXJsaW5rX2dldF91cmkoaExpbmsyLCAw
KSwgPT0sICJodHRwOi8vYmFyLmJhei5mb28vIik7Ci0KLSAgICBBdGtIeXBlcmxpbmsqIGhMaW5r
MyA9IGF0a19oeXBlcnRleHRfZ2V0X2xpbmsoQVRLX0hZUEVSVEVYVChwYXJhZ3JhcGgyKSwgMik7
Ci0gICAgZ19hc3NlcnQoQVRLX0hZUEVSTElOSyhoTGluazMpKTsKLSAgICBBdGtPYmplY3QqIGhM
aW5rT2JqZWN0MyA9IGF0a19oeXBlcmxpbmtfZ2V0X29iamVjdChoTGluazMsIDApOwotICAgIGdf
YXNzZXJ0KEFUS19PQkpFQ1QoaExpbmtPYmplY3QzKSk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVj
dF9nZXRfcm9sZShoTGlua09iamVjdDMpID09IEFUS19ST0xFX0xJTkspOwotICAgIGdfYXNzZXJ0
X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9zdGFydF9pbmRleChoTGluazMpLCA9PSwgNjUpOwot
ICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9lbmRfaW5kZXgoaExpbmszKSwg
PT0sIDc1KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfbl9hbmNob3Jz
KGhMaW5rMyksID09LCAxKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoYXRrX2h5cGVybGlua19nZXRf
dXJpKGhMaW5rMywgMCksID09LCAiaHR0cDovL2Jhei5mb28uYmFyLyIpOwotCi0gICAgQXRrT2Jq
ZWN0KiBsaXN0ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDIpOwot
ICAgIGdfYXNzZXJ0KEFUS19PQkpFQ1QobGlzdCkpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3Rf
Z2V0X3JvbGUobGlzdCkgPT0gQVRLX1JPTEVfTElTVCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0
a19vYmplY3RfZ2V0X25fYWNjZXNzaWJsZV9jaGlsZHJlbihsaXN0KSwgPT0sIDEpOwotCi0gICAg
QXRrT2JqZWN0KiBsaXN0SXRlbSA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQobGlz
dCwgMCk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQobGlzdEl0ZW0pKTsKLSAgICBnX2Fzc2Vy
dChBVEtfSVNfSFlQRVJURVhUKGxpc3RJdGVtKSk7Ci0KLSAgICBBdGtIeXBlcmxpbmsqIGhMaW5r
SW5MaXN0SXRlbSA9IGF0a19oeXBlcnRleHRfZ2V0X2xpbmsoQVRLX0hZUEVSVEVYVChsaXN0SXRl
bSksIDApOwotICAgIGdfYXNzZXJ0KEFUS19IWVBFUkxJTksoaExpbmtJbkxpc3RJdGVtKSk7Ci0g
ICAgQXRrT2JqZWN0KiBoTGlua09iamVjdCA9IGF0a19oeXBlcmxpbmtfZ2V0X29iamVjdChoTGlu
a0luTGlzdEl0ZW0sIDApOwotICAgIGdfYXNzZXJ0KEFUS19PQkpFQ1QoaExpbmtPYmplY3QpKTsK
LSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGhMaW5rT2JqZWN0KSA9PSBBVEtfUk9M
RV9MSU5LKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfc3RhcnRfaW5k
ZXgoaExpbmtJbkxpc3RJdGVtKSwgPT0sIDIwKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5
cGVybGlua19nZXRfZW5kX2luZGV4KGhMaW5rSW5MaXN0SXRlbSksID09LCA0Myk7Ci0gICAgZ19h
c3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0X25fYW5jaG9ycyhoTGlua0luTGlzdEl0ZW0p
LCA9PSwgMSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKGF0a19oeXBlcmxpbmtfZ2V0X3VyaShoTGlu
a0luTGlzdEl0ZW0sIDApLCA9PSwgImh0dHA6Ly9mb28uYmFyLmJhei8iKTsKLQotICAgIC8qIEZp
bmFsbHkgY2hlY2sgdGhlIEF0a0FjdGlvbiBpbnRlcmZhY2UgZm9yIGEgZ2l2ZW4gQXRrSHlwZXJs
aW5rLiAqLwotICAgIGdfYXNzZXJ0KEFUS19JU19BQ1RJT04oaExpbmsxKSk7Ci0gICAgZ19hc3Nl
cnRfY21waW50KGF0a19hY3Rpb25fZ2V0X25fYWN0aW9ucyhBVEtfQUNUSU9OKGhMaW5rMSkpLCA9
PSwgMSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKGF0a19hY3Rpb25fZ2V0X2tleWJpbmRpbmcoQVRL
X0FDVElPTihoTGluazEpLCAwKSwgPT0sICIiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoYXRrX2Fj
dGlvbl9nZXRfbmFtZShBVEtfQUNUSU9OKGhMaW5rMSksIDApLCA9PSwgImp1bXAiKTsKLSAgICBn
X2Fzc2VydChhdGtfYWN0aW9uX2RvX2FjdGlvbihBVEtfQUNUSU9OKGhMaW5rMSksIDApKTsKLQot
ICAgIGdfb2JqZWN0X3VucmVmKHBhcmFncmFwaDEpOwotICAgIGdfb2JqZWN0X3VucmVmKHBhcmFn
cmFwaDIpOwotICAgIGdfb2JqZWN0X3VucmVmKGxpc3QpOwotICAgIGdfb2JqZWN0X3VucmVmKGxp
c3RJdGVtKTsKLSAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKLX0KLQotc3RhdGljIHZvaWQg
dGVzdFdlYmtpdEF0a0xpc3RzT2ZJdGVtcygpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmll
dyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0
X3JlZl9zaW5rKHdlYlZpZXcpOwotICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwg
MCwgODAwLCA2MDAgfTsKLSAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVCh3
ZWJWaWV3KSwgJmFsbG9jYXRpb24pOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3
ZWJWaWV3LCBsaXN0c09mSXRlbXMsIDAsIDAsIDApOwotCi0gICAgQXRrT2JqZWN0KiBvYmplY3Qg
PSBnZXRXZWJBcmVhT2JqZWN0KHdlYlZpZXcpOwotICAgIGdfYXNzZXJ0KG9iamVjdCk7Ci0KLSAg
ICAvKiBVbm9yZGVyZWQgbGlzdC4gKi8KLQotICAgIEF0a09iamVjdCogdUxpc3QgPSBhdGtfb2Jq
ZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMCk7Ci0gICAgZ19hc3NlcnQoQVRLX09C
SkVDVCh1TGlzdCkpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUodUxpc3QpID09
IEFUS19ST0xFX0xJU1QpOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfb2JqZWN0X2dldF9uX2Fj
Y2Vzc2libGVfY2hpbGRyZW4odUxpc3QpLCA9PSwgMyk7Ci0KLSAgICBBdGtPYmplY3QqIGl0ZW0x
ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZCh1TGlzdCwgMCk7Ci0gICAgQXRrT2Jq
ZWN0KiBpdGVtMiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQodUxpc3QsIDEpOwot
ICAgIEF0a09iamVjdCogaXRlbTMgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKHVM
aXN0LCAyKTsKLQotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfb2JqZWN0X2dldF9uX2FjY2Vzc2li
bGVfY2hpbGRyZW4oaXRlbTEpLCA9PSwgMCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a19vYmpl
Y3RfZ2V0X25fYWNjZXNzaWJsZV9jaGlsZHJlbihpdGVtMiksID09LCAxKTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoYXRrX29iamVjdF9nZXRfbl9hY2Nlc3NpYmxlX2NoaWxkcmVuKGl0ZW0zKSwgPT0s
IDEpOwotCi0gICAgZ19vYmplY3RfdW5yZWYoaXRlbTEpOwotICAgIGdfb2JqZWN0X3VucmVmKGl0
ZW0yKTsKLSAgICBnX29iamVjdF91bnJlZihpdGVtMyk7Ci0KLSAgICAvKiBPcmRlcmVkIGxpc3Qu
ICovCi0KLSAgICBBdGtPYmplY3QqIG9MaXN0ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9j
aGlsZChvYmplY3QsIDEpOwotICAgIGdfYXNzZXJ0KEFUS19PQkpFQ1Qob0xpc3QpKTsKLSAgICBn
X2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKG9MaXN0KSA9PSBBVEtfUk9MRV9MSVNUKTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQoYXRrX29iamVjdF9nZXRfbl9hY2Nlc3NpYmxlX2NoaWxkcmVuKG9M
aXN0KSwgPT0sIDMpOwotCi0gICAgaXRlbTEgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2No
aWxkKG9MaXN0LCAwKTsKLSAgICBpdGVtMiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hp
bGQob0xpc3QsIDEpOwotICAgIGl0ZW0zID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGls
ZChvTGlzdCwgMik7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX29iamVjdF9nZXRfbl9hY2Nl
c3NpYmxlX2NoaWxkcmVuKGl0ZW0xKSwgPT0sIDApOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtf
b2JqZWN0X2dldF9uX2FjY2Vzc2libGVfY2hpbGRyZW4oaXRlbTIpLCA9PSwgMSk7Ci0gICAgZ19h
c3NlcnRfY21waW50KGF0a19vYmplY3RfZ2V0X25fYWNjZXNzaWJsZV9jaGlsZHJlbihpdGVtMyks
ID09LCAxKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGl0ZW0xKTsKLSAgICBnX29iamVjdF91bnJl
ZihpdGVtMik7Ci0gICAgZ19vYmplY3RfdW5yZWYoaXRlbTMpOwotCi0gICAgZ19vYmplY3RfdW5y
ZWYodUxpc3QpOwotICAgIGdfb2JqZWN0X3VucmVmKG9MaXN0KTsKLSAgICBnX29iamVjdF91bnJl
Zih3ZWJWaWV3KTsKLX0KLQotdHlwZWRlZiBlbnVtIHsKLSAgVEVYVF9DSEFOR0VfSU5TRVJUID0g
MSwKLSAgVEVYVF9DSEFOR0VfUkVNT1ZFID0gMgotfSBUZXh0Q2hhbmdlVHlwZTsKLQotc3RhdGlj
IGdjaGFyKiB0ZXh0Q2hhbmdlZFJlc3VsdCA9IDA7Ci0KLXN0YXRpYyB2b2lkIHRleHRDaGFuZ2Vk
Q2IoQXRrVGV4dCogdGV4dCwgZ2ludCBwb3MsIGdpbnQgbGVuLCBnY2hhciogbW9kaWZpZWRUZXh0
LCBncG9pbnRlciBkYXRhKQotewotICAgIGdfYXNzZXJ0KHRleHQgJiYgQVRLX0lTX09CSkVDVCh0
ZXh0KSk7Ci0KLSAgICBUZXh0Q2hhbmdlVHlwZSB0eXBlID0gR1BPSU5URVJfVE9fSU5UKGRhdGEp
OwotICAgIGdfZnJlZSh0ZXh0Q2hhbmdlZFJlc3VsdCk7Ci0gICAgdGV4dENoYW5nZWRSZXN1bHQg
PSBnX3N0cmR1cF9wcmludGYoInwlZHwlZHwlZHwnJXMnfCIsIHR5cGUsIHBvcywgbGVuLCBtb2Rp
ZmllZFRleHQpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrVGV4dENoYW5nZWROb3Rp
ZmljYXRpb25zKCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9W
SUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmll
dyk7Ci0gICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9Owot
ICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2Nh
dGlvbik7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIGZvcm1XaXRo
VGV4dElucHV0cywgMCwgMCwgMCk7Ci0KLSAgICBBdGtPYmplY3QqIG9iamVjdCA9IGdldFdlYkFy
ZWFPYmplY3Qod2ViVmlldyk7Ci0gICAgZ19hc3NlcnQob2JqZWN0KTsKLQotICAgIEF0a09iamVj
dCogZm9ybSA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAwKTsKLSAg
ICBnX2Fzc2VydChBVEtfSVNfT0JKRUNUKGZvcm0pKTsKLQotICAgIC8qIEZpcnN0IGNoZWNrIG5v
cm1hbCB0ZXh0IGVudHJpZXMuICovCi0gICAgQXRrT2JqZWN0KiB0ZXh0RW50cnkgPSBhdGtfb2Jq
ZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZvcm0sIDApOwotICAgIGdfYXNzZXJ0KEFUS19JU19F
RElUQUJMRV9URVhUKHRleHRFbnRyeSkpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3Jv
bGUoQVRLX09CSkVDVCh0ZXh0RW50cnkpKSA9PSBBVEtfUk9MRV9FTlRSWSk7Ci0KLSAgICBnX3Np
Z25hbF9jb25uZWN0KHRleHRFbnRyeSwgInRleHQtaW5zZXJ0IiwKLSAgICAgICAgICAgICAgICAg
ICAgIEdfQ0FMTEJBQ0sodGV4dENoYW5nZWRDYiksCi0gICAgICAgICAgICAgICAgICAgICBHSU5U
X1RPX1BPSU5URVIoVEVYVF9DSEFOR0VfSU5TRVJUKSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdCh0
ZXh0RW50cnksICJ0ZXh0LXJlbW92ZSIsCi0gICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNL
KHRleHRDaGFuZ2VkQ2IpLAotICAgICAgICAgICAgICAgICAgICAgR0lOVF9UT19QT0lOVEVSKFRF
WFRfQ0hBTkdFX1JFTU9WRSkpOwotCi0gICAgZ2ludCBwb3MgPSAwOwotICAgIGF0a19lZGl0YWJs
ZV90ZXh0X2luc2VydF90ZXh0KEFUS19FRElUQUJMRV9URVhUKHRleHRFbnRyeSksICJmb28gYmFy
IGJheiIsIDExLCAmcG9zKTsKLSAgICBjaGFyKiB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHQoQVRL
X1RFWFQodGV4dEVudHJ5KSwgMCwgLTEpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwg
ImZvbyBiYXIgYmF6Iik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRleHRDaGFuZ2VkUmVzdWx0LCA9
PSwgInwxfDB8MTF8J2ZvbyBiYXIgYmF6J3wiKTsKLSAgICBnX2ZyZWUodGV4dCk7Ci0KLSAgICBh
dGtfZWRpdGFibGVfdGV4dF9kZWxldGVfdGV4dChBVEtfRURJVEFCTEVfVEVYVCh0ZXh0RW50cnkp
LCA0LCA3KTsKLSAgICB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHQoQVRLX1RFWFQodGV4dEVudHJ5
KSwgMCwgLTEpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwgImZvbyAgYmF6Iik7Ci0g
ICAgZ19hc3NlcnRfY21wc3RyKHRleHRDaGFuZ2VkUmVzdWx0LCA9PSwgInwyfDR8M3wnYmFyJ3wi
KTsKLSAgICBnX2ZyZWUodGV4dCk7Ci0KLSAgICBwb3MgPSA0OwotICAgIGF0a19lZGl0YWJsZV90
ZXh0X2luc2VydF90ZXh0KEFUS19FRElUQUJMRV9URVhUKHRleHRFbnRyeSksICJxdXggcXV1eCB0
b2JlaWdub3JlZCIsIDgsICZwb3MpOwotICAgIHRleHQgPSBhdGtfdGV4dF9nZXRfdGV4dChBVEtf
VEVYVCh0ZXh0RW50cnkpLCAwLCAtMSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09LCAi
Zm9vIHF1eCBxdXV4IGJheiIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0Q2hhbmdlZFJlc3Vs
dCwgPT0sICJ8MXw0fDh8J3F1eCBxdXV4J3wiKTsKLSAgICBnX2ZyZWUodGV4dCk7Ci0KLSAgICAv
KiBOb3cgY2hlY2sgZm9yIHBhc3N3b3JkIGVudHJpZXMuICovCi0gICAgQXRrT2JqZWN0KiBwYXNz
d29yZEVudHJ5ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmb3JtLCAxKTsKLSAg
ICBnX2Fzc2VydChBVEtfSVNfRURJVEFCTEVfVEVYVChwYXNzd29yZEVudHJ5KSk7Ci0gICAgZ19h
c3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShBVEtfT0JKRUNUKHBhc3N3b3JkRW50cnkpKSA9PSBB
VEtfUk9MRV9QQVNTV09SRF9URVhUKTsKLQotICAgIGdfc2lnbmFsX2Nvbm5lY3QocGFzc3dvcmRF
bnRyeSwgInRleHQtaW5zZXJ0IiwKLSAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sodGV4
dENoYW5nZWRDYiksCi0gICAgICAgICAgICAgICAgICAgICBHSU5UX1RPX1BPSU5URVIoVEVYVF9D
SEFOR0VfSU5TRVJUKSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChwYXNzd29yZEVudHJ5LCAidGV4
dC1yZW1vdmUiLAotICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyh0ZXh0Q2hhbmdlZENi
KSwKLSAgICAgICAgICAgICAgICAgICAgIEdJTlRfVE9fUE9JTlRFUihURVhUX0NIQU5HRV9SRU1P
VkUpKTsKLQotICAgIHBvcyA9IDA7Ci0gICAgLyogQSBzaW5nbGUgYnVsbGV0IGNoYXJhY3RlciBp
cyAnXDM0MlwyMDBcMjQyJyAqLwotICAgIGF0a19lZGl0YWJsZV90ZXh0X2luc2VydF90ZXh0KEFU
S19FRElUQUJMRV9URVhUKHBhc3N3b3JkRW50cnkpLCAiZm9vYmFyIiwgNiwgJnBvcyk7Ci0gICAg
Z19hc3NlcnRfY21wc3RyKHRleHRDaGFuZ2VkUmVzdWx0LCA9PSwgInwxfDB8NnwnXDM0MlwyMDBc
MjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0Mlwy
MDBcMjQyJ3wiKTsKLSAgICB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHQoQVRLX1RFWFQocGFzc3dv
cmRFbnRyeSksIDAsIC0xKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGV4dCwgPT0sICJcMzQyXDIw
MFwyNDJcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDJcMzQy
XDIwMFwyNDIiKTsKLSAgICBnX2ZyZWUodGV4dCk7Ci0KLSAgICBhdGtfZWRpdGFibGVfdGV4dF9k
ZWxldGVfdGV4dChBVEtfRURJVEFCTEVfVEVYVChwYXNzd29yZEVudHJ5KSwgMiwgNCk7Ci0gICAg
Z19hc3NlcnRfY21wc3RyKHRleHRDaGFuZ2VkUmVzdWx0LCA9PSwgInwyfDJ8MnwnXDM0MlwyMDBc
MjQyXDM0MlwyMDBcMjQyJ3wiKTsKLQotICAgIHRleHQgPSBhdGtfdGV4dF9nZXRfdGV4dChBVEtf
VEVYVChwYXNzd29yZEVudHJ5KSwgMCwgLTEpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9
PSwgIlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MiIpOwot
ICAgIGdfZnJlZSh0ZXh0KTsKLQotICAgIHBvcyA9IDM7Ci0gICAgYXRrX2VkaXRhYmxlX3RleHRf
aW5zZXJ0X3RleHQoQVRLX0VESVRBQkxFX1RFWFQocGFzc3dvcmRFbnRyeSksICJxdXggdG9iZWln
bm9yZWQiLCAzLCAmcG9zKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGV4dENoYW5nZWRSZXN1bHQs
ID09LCAifDF8M3wzfCdcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDInfCIpOwot
Ci0gICAgdGV4dCA9IGF0a190ZXh0X2dldF90ZXh0KEFUS19URVhUKHBhc3N3b3JkRW50cnkpLCAw
LCAtMSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09LCAiXDM0MlwyMDBcMjQyXDM0Mlwy
MDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0
MlwyMDBcMjQyIik7Ci0gICAgZ19mcmVlKHRleHQpOwotCi0gICAgZ19mcmVlKHRleHRDaGFuZ2Vk
UmVzdWx0KTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGZvcm0pOwotICAgIGdfb2JqZWN0X3VucmVm
KHRleHRFbnRyeSk7Ci0gICAgZ19vYmplY3RfdW5yZWYocGFzc3dvcmRFbnRyeSk7Ci0gICAgZ19v
YmplY3RfdW5yZWYod2ViVmlldyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtQYXJl
bnRGb3JSb290T2JqZWN0KCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lU
X1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgR3RrQWxsb2NhdGlvbiBhbGxv
Y2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9OwotICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0
ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7Ci0gICAgd2Via2l0X3dlYl92aWV3
X2xvYWRfc3RyaW5nKHdlYlZpZXcsIGNvbnRlbnRzLCAwLCAwLCAwKTsKLQotICAgIC8qIFdlIG5l
ZWQgYSBwYXJlbnQgY29udGFpbmVyIHdpZGdldCBmb3IgdGhlIHdlYnZpZXcuICovCi0gICAgR3Rr
V2lkZ2V0KiBwYXJlbnRDb250YWluZXIgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExF
VkVMKTsKLSAgICBnX29iamVjdF9yZWZfc2luayhwYXJlbnRDb250YWluZXIpOwotICAgIGd0a19j
b250YWluZXJfYWRkKEdUS19DT05UQUlORVIocGFyZW50Q29udGFpbmVyKSwgR1RLX1dJREdFVCh3
ZWJWaWV3KSk7Ci0KLSAgICBBdGtPYmplY3QqIGF4UGFyZW50ID0gZ3RrX3dpZGdldF9nZXRfYWNj
ZXNzaWJsZShwYXJlbnRDb250YWluZXIpOwotICAgIGdfYXNzZXJ0KEFUS19JU19PQkpFQ1QoYXhQ
YXJlbnQpKTsKLQotICAgIEF0a09iamVjdCogYXhSb290ID0gZ3RrX3dpZGdldF9nZXRfYWNjZXNz
aWJsZShHVEtfV0lER0VUKHdlYlZpZXcpKTsKLSAgICBnX2Fzc2VydChBVEtfSVNfT0JKRUNUKGF4
Um9vdCkpOwotCi0gICAgLyogVGhlIGNoaWxkIGZvciB0aGUgcGFyZW50IGNvbnRhaW5lcidzIGFj
Y2Vzc2liaWxpdHkgb2JqZWN0Ci0gICAgICAgc2hvdWxkIGJlIHRoZSBhY2Nlc3NpYmlsaXR5IG9i
amVjdCBmb3IgdGhlIFdlYlZpZXcncyByb290LiAqLwotICAgIEF0a09iamVjdCogYXhQYXJlbnRD
aGlsZCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoYXhQYXJlbnQsIDApOwotICAg
IGdfYXNzZXJ0KGF4UGFyZW50Q2hpbGQgPT0gYXhSb290KTsKLQotICAgIC8qIEJvdHRvbS11cCBu
YXZpZ2F0aW9uIHNob3VsZCBtYXRjaCB0b3AtZG93biBvbmUuICovCi0gICAgZ19hc3NlcnQoYXRr
X29iamVjdF9nZXRfcGFyZW50KGF4UGFyZW50Q2hpbGQpID09IGF4UGFyZW50KTsKLQotICAgIGdf
b2JqZWN0X3VucmVmKGF4UGFyZW50Q2hpbGQpOwotICAgIGdfb2JqZWN0X3VucmVmKHBhcmVudENv
bnRhaW5lcik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtTZXRQYXJlbnRGb3JPYmpl
Y3QoKQotewotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Vi
a2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAs
IDAsIDgwMCwgNjAwIH07Ci0gICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQo
d2ViVmlldyksICZhbGxvY2F0aW9uKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmco
d2ViVmlldywgY29udGVudHMsIDAsIDAsIDApOwotCi0gICAgLyogUHV0IHRoZSB3ZWJ2aWV3IGlu
IGEgcGFyZW50IGNvbnRhaW5lciB3aWRnZXQgdG8gY2hlY2sgdGhhdCB0aGUKLSAgICAgICBub3Jt
YWwgYmVoYXZpb3VyIGtlZXBzIHdvcmtpbmcgYXMgZXhwZWN0ZWQgYnkgZGVmYXVsdC4gKi8KLSAg
ICBHdGtXaWRnZXQqIHBhcmVudENvbnRhaW5lciA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1df
VE9QTEVWRUwpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKHBhcmVudENvbnRhaW5lcik7Ci0gICAg
Z3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihwYXJlbnRDb250YWluZXIpLCBHVEtfV0lE
R0VUKHdlYlZpZXcpKTsKLQotICAgIEF0a09iamVjdCogYXhSb290ID0gZ3RrX3dpZGdldF9nZXRf
YWNjZXNzaWJsZShHVEtfV0lER0VUKHdlYlZpZXcpKTsKLSAgICBnX2Fzc2VydChBVEtfSVNfT0JK
RUNUKGF4Um9vdCkpOwotCi0gICAgQXRrT2JqZWN0KiBheFBhcmVudCA9IGd0a193aWRnZXRfZ2V0
X2FjY2Vzc2libGUocGFyZW50Q29udGFpbmVyKTsKLSAgICBnX2Fzc2VydChBVEtfSVNfT0JKRUNU
KGF4UGFyZW50KSk7Ci0KLSAgICAvKiBUaGUgcGFyZW50IG9mIHRoZSByb290IG9iamVjdCBpcyB0
aGUgcGFyZW50IGNvbnRhaW5lcidzIGExMXkgb2JqZWN0LiAqLwotICAgIGdfYXNzZXJ0KGF0a19v
YmplY3RfZ2V0X3BhcmVudChheFJvb3QpID09IGF4UGFyZW50KTsKLQotICAgIC8qIFdlIG5vdyBu
ZWVkIHRvIHVzZSBzb21ldGhpbmcgYXMgYSBhbiBhbHRlcm5hdGl2ZSBwYXJlbnQgZm9yCi0gICAg
ICAgdGhlIGExMXkgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgcm9vdCBvZiB0aGUgRE9NIHRy
ZWUuICovCi0gICAgR3RrV2lkZ2V0KiBhbHRlcm5hdGl2ZVBhcmVudCA9IGd0a19idXR0b25fbmV3
KCk7Ci0gICAgZ19vYmplY3RfcmVmX3NpbmsoYWx0ZXJuYXRpdmVQYXJlbnQpOwotCi0gICAgQXRr
T2JqZWN0KiBheEFsdGVybmF0aXZlUGFyZW50ID0gZ3RrX3dpZGdldF9nZXRfYWNjZXNzaWJsZShh
bHRlcm5hdGl2ZVBhcmVudCk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX09CSkVDVChheEFsdGVybmF0
aXZlUGFyZW50KSk7Ci0KLSAgICAvKiBNYW51YWxseSBzZXQgdGhlIGFsdGVybmF0aXZlIHBhcmVu
dCdzIGFjY2Vzc2liaWxpdHkgb2JqZWN0IGFzCi0gICAgICAgdGhlIHBhcmVudCBmb3IgdGhlIFdl
YktpdCBhY2Nlc3NpYmlsaXR5IHJvb3Qgb2JqZWN0IGFuZCBjaGVjay4gKi8KLSAgICBhdGtfb2Jq
ZWN0X3NldF9wYXJlbnQoYXhSb290LCBheEFsdGVybmF0aXZlUGFyZW50KTsKLSAgICBnX2Fzc2Vy
dChhdGtfb2JqZWN0X2dldF9wYXJlbnQoYXhSb290KSA9PSBheEFsdGVybmF0aXZlUGFyZW50KTsK
LQotICAgIGdfb2JqZWN0X3VucmVmKGFsdGVybmF0aXZlUGFyZW50KTsKLSAgICBnX29iamVjdF91
bnJlZihwYXJlbnRDb250YWluZXIpOwotfQotCi0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLXN0
YXRpYyB2b2lkIGluaXRpYWxpemVUZXN0aW5nRnJhbWV3b3JrKGludCBhcmdjLCBjaGFyKiogYXJn
dikKLXsKLSAgICAvKiBFbnN1cmUgR0FJTCBpcyB0aGUgb25seSBtb2R1bGUgbG9hZGVkLiAqLwot
ICAgIGdfc2V0ZW52KCJHVEtfTU9EVUxFUyIsICJnYWlsIiwgVFJVRSk7Ci0KLSAgICAvKiBGb2xs
b3dpbmcgbGluZXMgd2VyZSB0YWtlbiBmcm9tIGd0a190ZXN0X2luaXQoKS4gKi8KLSAgICBnX3Rl
c3RfaW5pdCgmYXJnYywgJmFyZ3YsIDApOwotICAgIGd0a19kaXNhYmxlX3NldGxvY2FsZSgpOwot
ICAgIHNldGxvY2FsZShMQ19BTEwsICJDIik7Ci0KLSAgICBndGtfaW5pdCgmYXJnYywgJmFyZ3Yp
OwotfQotI2VuZGlmCi0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKLXsKLSNpZmRl
ZiBHVEtfQVBJX1ZFUlNJT05fMgotICAgIC8qIFdlIGNhbid0IGp1c3QgY2FsbCB0byBndGtfdGVz
dF9pbml0KCkgaW4gdGhpcyBjYXNlIGJlY2F1c2UgaXRzCi0gICAgICAgaW1wbGVtZW50YXRpb24g
bWFrZXMgc3VyZSB0aGF0IG5vIEdUSysgbW9kdWxlIHdpbGwgYmUgbG9hZGVkLCBhbmQKLSAgICAg
ICB3ZSB3aWxsIG5lZWQgdG8gbG9hZCBHQUlMIGZvciB0ZXN0cyB0aGF0IG5lZWQgdG8gdXNlIEF0
a09iamVjdHMKLSAgICAgICBmcm9tIG5vbi1XZWJLaXQgR3RrV2lkZ2V0cyAoZS5nIHBhcmVudEZv
clJvb3RPYmplY3QpLiovCi0gICAgaW5pdGlhbGl6ZVRlc3RpbmdGcmFtZXdvcmsoYXJnYywgYXJn
dik7Ci0jZWxzZQotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLSNlbmRp
ZgotCi0gICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKLSAg
ICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2NhcmV0T2Zmc2V0cyIsIHRlc3RXZWJraXRB
dGtDYXJldE9mZnNldHMpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvY2FyZXRP
ZmZzZXRzQW5kRXh0cmFub3VzV2hpdGVTcGFjZXMiLCB0ZXN0V2Via2l0QXRrQ2FyZXRPZmZzZXRz
QW5kRXh0cmFub3VzV2hpdGVTcGFjZXMpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9h
dGsvY29tYm9Cb3giLCB0ZXN0V2Via2l0QXRrQ29tYm9Cb3gpOwotICAgIGdfdGVzdF9hZGRfZnVu
YygiL3dlYmtpdC9hdGsvZG9jdW1lbnRMb2FkaW5nRXZlbnRzIiwgdGVzdFdlYmtpdEF0a0RvY3Vt
ZW50TG9hZGluZ0V2ZW50cyk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9lbWJl
ZGRlZE9iamVjdHMiLCB0ZXN0V2Via2l0QXRrRW1iZWRkZWRPYmplY3RzKTsKLSAgICBnX3Rlc3Rf
YWRkX2Z1bmMoIi93ZWJraXQvYXRrL2dldEhlYWRlcnNJblRhYmxlIiwgdGVzdFdlYmtpdEF0a0dl
dEhlYWRlcnNJblRhYmxlKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL3RleHRB
dHRyaWJ1dGVzIiwgdGVzdFdlYmtpdEF0a1RleHRBdHRyaWJ1dGVzKTsKLSAgICBnX3Rlc3RfYWRk
X2Z1bmMoIi93ZWJraXQvYXRrL3RleHRTZWxlY3Rpb25zIiwgdGVzdFdlYmtpdEF0a1RleHRTZWxl
Y3Rpb25zKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2dldEV4dGVudHMiLCB0
ZXN0V2Via2l0QXRrR2V0RXh0ZW50cyk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0
ay9oeXBlcnRleHRBbmRIeXBlcmxpbmtzIiwgdGVzdFdlYmtpdEF0a0h5cGVydGV4dEFuZEh5cGVy
bGlua3MpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvbGF5b3V0QW5kRGF0YVRh
YmxlcyIsIHRlc3RXZWJraXRBdGtMYXlvdXRBbmREYXRhVGFibGVzKTsKLSAgICBnX3Rlc3RfYWRk
X2Z1bmMoIi93ZWJraXQvYXRrL2xpbmtzV2l0aElubGluZUltYWdlcyIsIHRlc3RXZWJraXRBdGtM
aW5rc1dpdGhJbmxpbmVJbWFnZXMpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsv
bGlzdHNPZkl0ZW1zIiwgdGVzdFdlYmtpdEF0a0xpc3RzT2ZJdGVtcyk7Ci0gICAgZ190ZXN0X2Fk
ZF9mdW5jKCIvd2Via2l0L2F0ay90ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbnMiLCB0ZXN0V2Via2l0
QXRrVGV4dENoYW5nZWROb3RpZmljYXRpb25zKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJr
aXQvYXRrL3BhcmVudEZvclJvb3RPYmplY3QiLCB0ZXN0V2Via2l0QXRrUGFyZW50Rm9yUm9vdE9i
amVjdCk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9zZXRQYXJlbnRGb3JPYmpl
Y3QiLCB0ZXN0V2Via2l0QXRrU2V0UGFyZW50Rm9yT2JqZWN0KTsKLSAgICByZXR1cm4gZ190ZXN0
X3J1biAoKTsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGF0
a3JvbGVzLmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXRrcm9sZXMuYwpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODg4MTdjZi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2d0ay90ZXN0cy90ZXN0YXRrcm9sZXMuYworKysgL2Rldi9udWxsCkBAIC0xLDQyNiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IMKpIDIwMTAgSm9hbm1hcmllIERpZ2dzCi0gKiBDb3B5cmln
aHQgwqkgMjAxMCBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8Z2xp
Yi5oPgotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2lu
Y2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KLQotLyogTm9uIGZvcm0gcm9sZXMgKi8KLSNkZWZpbmUg
SFRNTF9ET0NVTUVOVF9GUkFNRSAiPGh0bWw+PGJvZHk+VGhpcyBpcyBhIHRlc3QuPC9ib2R5Pjwv
aHRtbD4iCi0jZGVmaW5lIEhUTUxfSEVBRElORyAiPGh0bWw+PGJvZHk+PGgxPjE8L2gxPjxoMj4y
PC9oMj48aDM+MzwvaDM+PGg0PjQ8L2g0PjxoNT41PC9oNT48aDY+NjwvaDY+PC9ib2R5PjwvaHRt
bD4iCi0jZGVmaW5lIEhUTUxfSU1BR0UgIjxodG1sPjxib2R5PjxpbWcgc3JjPSdmb29iYXIucG5n
JyBhbHQ9J1RoaXMgaXMgYSB0ZXN0LicvPjwvYm9keT48L2h0bWw+IgotI2RlZmluZSBIVE1MX0xJ
TktfVEVYVCAiPGh0bWw+PGJvZHk+PGEgaHJlZj0nZm9vYmFyLmh0bWwnPlRoaXMgaXMgYSB0ZXN0
LjwvYT48L2JvZHk+PC9odG1sPiIKLSNkZWZpbmUgSFRNTF9MSVNUICI8aHRtbD48Ym9keT48dWw+
PGxpPjE8L2xpPjxsaT4yPC9saT48L3VsPjxvbD48bGk+MTwvbGk+PGxpPjI8L2xpPjwvb2w+PC9i
b2R5PjwvaHRtbD4iCi0jZGVmaW5lIEhUTUxfUEFSQUdSQVBIICI8aHRtbD48Ym9keT48cD5UaGlz
IGlzIGEgdGVzdC48L3A+PC9ib2R5PjwvaHRtbD4iCi0jZGVmaW5lIEhUTUxfU0VDVElPTiAiPGh0
bWw+PGJvZHk+PGRpdj5UaGlzIGlzIGEgdGVzdC48L2Rpdj48L2JvZHk+PC9odG1sPiIKLSNkZWZp
bmUgSFRNTF9UQUJMRSAiPGh0bWw+PGJvZHk+PHRhYmxlIGJvcmRlcj0nMSc+PHRyPjx0ZD5UaGlz
IGlzPC90ZD48dGQ+YSB0ZXN0LjwvdGQ+PC90cj48L3RhYmxlPjwvYm9keT48L2h0bWw+IgotI2Rl
ZmluZSBIVE1MX1NFUEFSQVRPUiAiPGh0bWw+PGJvZHk+PGhyLz48L2JvZHk+PC9odG1sPiIKLSNk
ZWZpbmUgSFRNTF9DT01CT0JPWCAiPGh0bWw+PGJvZHk+PHNlbGVjdCBzaXplPScxJz48b3B0aW9u
Pm9uZTwvb3B0aW9uPjxvcHRpb24+dHdvPC9vcHRpb24+PG9wdGlvbj50aHJlZTwvb3B0aW9uPjwv
c2VsZWN0PjwvYm9keT48L2h0bWw+IgotLyogRm9ybSByb2xlcyAqLwotI2RlZmluZSBIVE1MX0ZP
Uk0gIjxodG1sPjxib2R5Pjxmb3JtPlRoaXMgaXMgYSB0ZXN0LjwvZm9ybT48L2JvZHk+PC9odG1s
PiIKLSNkZWZpbmUgSFRNTF9DSEVDS19CT1ggIjxodG1sPjxib2R5PjxpbnB1dCB0eXBlPSdjaGVj
a2JveCcgLz5UaGlzIGlzIGEgdGVzdC48L2JvZHk+PC9odG1sPiIKLSNkZWZpbmUgSFRNTF9MQUJF
TEVEX0VOVFJZICI8aHRtbD48Ym9keT48bGFiZWwgZm9yPSdmb28nPk5hbWU6PC9sYWJlbD48aW5w
dXQgdHlwZT0ndGV4dCcgaWQ9J2ZvbycgLz48L2JvZHk+PC9odG1sPiIKLSNkZWZpbmUgSFRNTF9M
SVNUQk9YICI8aHRtbD48Ym9keT48c2VsZWN0IHNpemU9JzMnPjxvcHRpb24+b25lPC9vcHRpb24+
PG9wdGlvbj50d288L29wdGlvbj48b3B0aW9uPnRocmVlPC9vcHRpb24+PC9zZWxlY3Q+PC9ib2R5
PjwvaHRtbD4iCi0jZGVmaW5lIEhUTUxfUEFTU1dPUkRfVEVYVCAiPGh0bWw+PGJvZHk+PGlucHV0
IHR5cGU9J3Bhc3N3b3JkJyAvPjwvYm9keT48L2h0bWw+IgotI2RlZmluZSBIVE1MX1BVU0hfQlVU
VE9OICI8aHRtbD48Ym9keT48aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nb2snIC8+VGhpcyBp
cyBhIHRlc3QuPC9ib2R5PjwvaHRtbD4iCi0jZGVmaW5lIEhUTUxfUkFESU9fQlVUVE9OICI8aHRt
bD48Ym9keT48aW5wdXQgdHlwZT0ncmFkaW8nIC8+VGhpcyBpcyBhIHRlc3QuPC9ib2R5PjwvaHRt
bD4iCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBBdGtPYmplY3QqIGRvY3VtZW50OwotICAgIEF0
a09iamVjdCogb2JqOwotICAgIEF0a1JvbGUgcm9sZTsKLSAgICBHdGtXaWRnZXQqIHdlYlZpZXc7
Ci0gICAgR3RrQWxsb2NhdGlvbiBhbGxvYzsKLSAgICBHTWFpbkxvb3AqIGxvb3A7Ci19IEF0a1Jv
bGVzRml4dHVyZTsKLQotc3RhdGljIGdib29sZWFuIGZpbmlzaF9sb2FkaW5nKEF0a1JvbGVzRml4
dHVyZSogZml4dHVyZSkKLXsKLSAgICBpZiAoZ19tYWluX2xvb3BfaXNfcnVubmluZyhmaXh0dXJl
LT5sb29wKSkKLSAgICAgICAgZ19tYWluX2xvb3BfcXVpdChmaXh0dXJlLT5sb29wKTsKLQotICAg
IC8vIFdpdGggdGhlIGNoYW5nZSB0byBzdXBwb3J0IFdLMiBhY2Nlc3NpYmlsaXR5LCB0aGUgcm9v
dCBvYmplY3QKLSAgICAvLyBoYXMgY2hhbmdlZCBhbmQgaXQncyBubyBsb25nZXIgdGhlIGRvY3Vt
ZW50IGZyYW1lLCBidXQgYSBzY3JvbGwKLSAgICAvLyBwYW5lIGNvbnRhaW5pbmcgdGhlIGRvY3Vt
ZW50IGZyYW1lIGFzIGl0cyBvbmx5IGNoaWxkLiBTZWUgdGhlCi0gICAgLy8gYnVnIDcyMzkwIGZv
ciBtb3JlIGRldGFpbHMgb24gdGhpcyBjaGFuZ2UuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTcyMzkwCi0gICAgQXRrT2JqZWN0KiByb290T2JqZWN0ID0g
Z3RrX3dpZGdldF9nZXRfYWNjZXNzaWJsZShmaXh0dXJlLT53ZWJWaWV3KTsKLSAgICBmaXh0dXJl
LT5kb2N1bWVudCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQocm9vdE9iamVjdCwg
MCk7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+ZG9jdW1lbnQpOwotCi0gICAgLy8gUmVtb3ZlIHRo
ZSByZWZlcmVuY2UgYWRkZWQgYnkgcmVmX2FjY2Vzc2libGVfY2hpbGQoKSBhbmQKLSAgICAvLyBy
ZXR1cm4sIHNpbmNlIHdlIGRvbid0IG5lZWQgdG8ga2VlcCB0aGF0IGV4dHJhIHJlZiBhdCBhbGwu
Ci0gICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+ZG9jdW1lbnQpOwotICAgIHJldHVybiBGQUxT
RTsKLX0KLQotc3RhdGljIHZvaWQgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAoQXRrUm9sZXNGaXh0
dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZml4dHVyZS0+bG9vcCA9
IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLSAgICBmaXh0dXJlLT5hbGxvYyA9IChHdGtB
bGxvY2F0aW9uKSB7IDAsIDAsIDgwMCwgNjAwIH07Ci0gICAgZml4dHVyZS0+d2ViVmlldyA9IHdl
YmtpdF93ZWJfdmlld19uZXcoKTsKLSAgICBnX29iamVjdF9yZWZfc2luayhmaXh0dXJlLT53ZWJW
aWV3KTsKLQotICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShmaXh0dXJlLT53ZWJWaWV3LCAm
Zml4dHVyZS0+YWxsb2MpOwotCi0gICAgaWYgKGRhdGEgIT0gTlVMTCkKLSAgICAgICAgd2Via2l0
X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklFVyAoZml4dHVyZS0+d2ViVmlldyks
IChjb25zdCBjaGFyKikgZGF0YSwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0KLSAgICBnX2lkbGVfYWRk
KChHU291cmNlRnVuYykgZmluaXNoX2xvYWRpbmcsIGZpeHR1cmUpOwotICAgIGdfbWFpbl9sb29w
X3J1bihmaXh0dXJlLT5sb29wKTsKLX0KLQotc3RhdGljIHZvaWQgYXRrX3JvbGVzX2ZpeHR1cmVf
dGVhcmRvd24oQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17
Ci0gICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+d2ViVmlldyk7Ci0gICAgZ19tYWluX2xvb3Bf
dW5yZWYoZml4dHVyZS0+bG9vcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdldF9jaGlsZF9hbmRfdGVz
dF9yb2xlKEF0a09iamVjdCogb2JqLCBnaW50IHBvcywgQXRrUm9sZSByb2xlKQotewotICAgIEF0
a09iamVjdCogY2hpbGQ7Ci0gICAgQXRrUm9sZSBjaGlsZF9yb2xlOwotCi0gICAgY2hpbGQgPSBh
dGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iaiwgcG9zKTsKLSAgICBnX2Fzc2VydChj
aGlsZCk7Ci0gICAgY2hpbGRfcm9sZSA9IGF0a19vYmplY3RfZ2V0X3JvbGUoY2hpbGQpOwotICAg
IGdfYXNzZXJ0KGNoaWxkX3JvbGUgPT0gcm9sZSk7Ci0KLSAgICBnX29iamVjdF91bnJlZihjaGls
ZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9kb2N1bWVudF9m
cmFtZShBdGtSb2xlc0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAg
ICBmaXh0dXJlLT5yb2xlID0gYXRrX29iamVjdF9nZXRfcm9sZShmaXh0dXJlLT5kb2N1bWVudCk7
Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+cm9sZSA9PSBBVEtfUk9MRV9ET0NVTUVOVF9XRUIpOwot
fQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfaGVhZGluZyhBdGtSb2xl
c0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBnZXRfY2hpbGRf
YW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5kb2N1bWVudCwgMCwgQVRLX1JPTEVfSEVBRElORyk7Ci0g
ICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+ZG9jdW1lbnQsIDEsIEFUS19ST0xF
X0hFQURJTkcpOwotICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPmRvY3VtZW50
LCAyLCBBVEtfUk9MRV9IRUFESU5HKTsKLSAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0
dXJlLT5kb2N1bWVudCwgMywgQVRLX1JPTEVfSEVBRElORyk7Ci0gICAgZ2V0X2NoaWxkX2FuZF90
ZXN0X3JvbGUoZml4dHVyZS0+ZG9jdW1lbnQsIDQsIEFUS19ST0xFX0hFQURJTkcpOwotICAgIGdl
dF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPmRvY3VtZW50LCA1LCBBVEtfUk9MRV9IRUFE
SU5HKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2ltYWdlKEF0
a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIC8vIFRo
aXMgaXMgYW4gZXh0cmFuZW91cyBvYmplY3Qgb2YgQVRLX1JPTEVfUEFORUwgd2hpY2ggd2Ugc2hv
dWxkIGdldCByaWQgb2YuCi0gICAgZml4dHVyZS0+b2JqID0gYXRrX29iamVjdF9yZWZfYWNjZXNz
aWJsZV9jaGlsZChmaXh0dXJlLT5kb2N1bWVudCwgMCk7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+
b2JqKTsKLQotICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPm9iaiwgMCwgQVRL
X1JPTEVfSU1BR0UpOwotCi0gICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+b2JqKTsKLX0KLQot
c3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xpbmsoQXRrUm9sZXNGaXh0dXJl
KiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgLy8gVGhpcyBpcyBhbiBleHRy
YW5lb3VzIG9iamVjdCBvZiBBVEtfUk9MRV9QQU5FTCB3aGljaCB3ZSBzaG91bGQgZ2V0IHJpZCBv
Zi4KLSAgICBmaXh0dXJlLT5vYmogPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZp
eHR1cmUtPmRvY3VtZW50LCAwKTsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT5vYmopOwotCi0gICAg
Z2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+b2JqLCAwLCBBVEtfUk9MRV9MSU5LKTsK
LQotICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9iaik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRl
c3Rfd2Via2l0X2F0a19nZXRfcm9sZV9saXN0X2FuZF9pdGVtKEF0a1JvbGVzRml4dHVyZSogZml4
dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIEF0a09iamVjdCogbGlzdE9iajsKLQot
ICAgIGxpc3RPYmogPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZpeHR1cmUtPmRv
Y3VtZW50LCAwKTsKLSAgICBnX2Fzc2VydChsaXN0T2JqKTsKLSAgICBmaXh0dXJlLT5yb2xlID0g
YXRrX29iamVjdF9nZXRfcm9sZShsaXN0T2JqKTsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT5yb2xl
ID09IEFUS19ST0xFX0xJU1QpOwotCi0gICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUobGlzdE9i
aiwgMCwgQVRLX1JPTEVfTElTVF9JVEVNKTsKLSAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShs
aXN0T2JqLCAxLCBBVEtfUk9MRV9MSVNUX0lURU0pOwotICAgIGdfb2JqZWN0X3VucmVmKGxpc3RP
YmopOwotCi0gICAgbGlzdE9iaiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoZml4
dHVyZS0+ZG9jdW1lbnQsIDEpOwotICAgIGdfYXNzZXJ0KGxpc3RPYmopOwotICAgIGZpeHR1cmUt
PnJvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKGxpc3RPYmopOwotICAgIGdfYXNzZXJ0KGZpeHR1
cmUtPnJvbGUgPT0gQVRLX1JPTEVfTElTVCk7Ci0KLSAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9s
ZShsaXN0T2JqLCAwLCBBVEtfUk9MRV9MSVNUX0lURU0pOwotICAgIGdldF9jaGlsZF9hbmRfdGVz
dF9yb2xlKGxpc3RPYmosIDEsIEFUS19ST0xFX0xJU1RfSVRFTSk7Ci0gICAgZ19vYmplY3RfdW5y
ZWYobGlzdE9iaik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9w
YXJhZ3JhcGgoQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17
Ci0gICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+ZG9jdW1lbnQsIDAsIEFUS19S
T0xFX1BBUkFHUkFQSCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9s
ZV9zZWN0aW9uKEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQot
ewotICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPmRvY3VtZW50LCAwLCBBVEtf
Uk9MRV9TRUNUSU9OKTsKLX0KLQotLy8gRG9lcyBub3QgeWV0IHRlc3QgdGFibGUgY2VsbHMgYmVj
YXVzZSBvZiBidWcgMzA4OTUuCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVf
dGFibGUoQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0g
ICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+ZG9jdW1lbnQsIDAsIEFUS19ST0xF
X1RBQkxFKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX3NlcGFy
YXRvcihBdGtSb2xlc0ZpeHR1cmUgKmZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAg
ICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5kb2N1bWVudCwgMCwgQVRLX1JPTEVf
U0VQQVJBVE9SKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2Nv
bWJvYm94KEF0a1JvbGVzRml4dHVyZSAqZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewot
ICAgIEF0a09iamVjdCogY29tYm9ib3hNZW51OwotCi0gICAgLy8gVGhpcyBpcyBhbiBleHRyYW5l
b3VzIG9iamVjdCBvZiBBVEtfUk9MRV9QQU5FTCB3aGljaCB3ZSBzaG91bGQgZ2V0IHJpZCBvZi4K
LSAgICBmaXh0dXJlLT5vYmogPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZpeHR1
cmUtPmRvY3VtZW50LCAwKTsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT5vYmopOwotCi0gICAgZml4
dHVyZS0+b2JqID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmaXh0dXJlLT5vYmos
IDApOwotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPm9iaik7Ci0gICAgZml4dHVyZS0+cm9sZSA9IGF0
a19vYmplY3RfZ2V0X3JvbGUoZml4dHVyZS0+b2JqKTsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT5y
b2xlID09IEFUS19ST0xFX0NPTUJPX0JPWCk7Ci0KLSAgICBjb21ib2JveE1lbnUgPSBhdGtfb2Jq
ZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZpeHR1cmUtPm9iaiwgMCk7Ci0gICAgZ19hc3NlcnQo
Y29tYm9ib3hNZW51KTsKLSAgICBmaXh0dXJlLT5yb2xlID0gYXRrX29iamVjdF9nZXRfcm9sZShj
b21ib2JveE1lbnUpOwotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPnJvbGUgPT0gQVRLX1JPTEVfTUVO
VSk7Ci0KLSAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShjb21ib2JveE1lbnUsIDAsIEFUS19S
T0xFX01FTlVfSVRFTSk7Ci0gICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoY29tYm9ib3hNZW51
LCAxLCBBVEtfUk9MRV9NRU5VX0lURU0pOwotICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGNv
bWJvYm94TWVudSwgMiwgQVRLX1JPTEVfTUVOVV9JVEVNKTsKLQotICAgIGdfb2JqZWN0X3VucmVm
KGZpeHR1cmUtPm9iaik7Ci0gICAgZ19vYmplY3RfdW5yZWYoY29tYm9ib3hNZW51KTsKLX0KLQot
LyogRm9ybSByb2xlcyAqLwotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2Zv
cm0oQXRrUm9sZXNGaXh0dXJlICpmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAg
Z2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+ZG9jdW1lbnQsIDAsIEFUS19ST0xFX0ZP
Uk0pOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfY2hlY2tfYm94
KEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIC8v
IFRoaXMgaXMgYW4gZXh0cmFuZW91cyBvYmplY3Qgb2YgQVRLX1JPTEVfUEFORUwgd2hpY2ggd2Ug
c2hvdWxkIGdldCByaWQgb2YuCi0gICAgZml4dHVyZS0+b2JqID0gYXRrX29iamVjdF9yZWZfYWNj
ZXNzaWJsZV9jaGlsZChmaXh0dXJlLT5kb2N1bWVudCwgMCk7Ci0gICAgZ19hc3NlcnQoZml4dHVy
ZS0+b2JqKTsKLQotICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPm9iaiwgMCwg
QVRLX1JPTEVfQ0hFQ0tfQk9YKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9iaik7
Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9lbnRyeShBdGtSb2xl
c0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICAvLyBUaGlzIGlz
IGFuIGV4dHJhbmVvdXMgb2JqZWN0IG9mIEFUS19ST0xFX1BBTkVMIHdoaWNoIHdlIHNob3VsZCBn
ZXQgcmlkIG9mLgotICAgIGZpeHR1cmUtPm9iaiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVf
Y2hpbGQoZml4dHVyZS0+ZG9jdW1lbnQsIDApOwotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPm9iaik7
Ci0KLSAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5vYmosIDEsIEFUS19ST0xF
X0VOVFJZKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9iaik7Ci19Ci0KLXN0YXRp
YyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9sYWJlbChBdGtSb2xlc0ZpeHR1cmUqIGZp
eHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICAvLyBUaGlzIGlzIGFuIGV4dHJhbmVv
dXMgb2JqZWN0IG9mIEFUS19ST0xFX1BBTkVMIHdoaWNoIHdlIHNob3VsZCBnZXQgcmlkIG9mLgot
ICAgIGZpeHR1cmUtPm9iaiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoZml4dHVy
ZS0+ZG9jdW1lbnQsIDApOwotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPm9iaik7Ci0KLSAgICBnZXRf
Y2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5vYmosIDAsIEFUS19ST0xFX0xBQkVMKTsKLQot
ICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9iaik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rf
d2Via2l0X2F0a19nZXRfcm9sZV9saXN0Ym94KEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2Nv
bnN0cG9pbnRlciBkYXRhKQotewotICAgIEF0a09iamVjdCogbGlzdGJveE9iajsKLSAgICAvLyBU
aGlzIGlzIGFuIGV4dHJhbmVvdXMgb2JqZWN0IG9mIEFUS19ST0xFX1BBTkVMIHdoaWNoIHdlIHNo
b3VsZCBnZXQgcmlkIG9mLgotICAgIGZpeHR1cmUtPm9iaiA9IGF0a19vYmplY3RfcmVmX2FjY2Vz
c2libGVfY2hpbGQoZml4dHVyZS0+ZG9jdW1lbnQsIDApOwotICAgIGdfYXNzZXJ0KGZpeHR1cmUt
Pm9iaik7Ci0KLSAgICBsaXN0Ym94T2JqID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGls
ZChmaXh0dXJlLT5vYmosIDApOwotICAgIGdfYXNzZXJ0KGxpc3Rib3hPYmopOwotICAgIGZpeHR1
cmUtPnJvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKGxpc3Rib3hPYmopOwotICAgIGdfYXNzZXJ0
KGZpeHR1cmUtPnJvbGUgPT0gQVRLX1JPTEVfTElTVCk7Ci0KLSAgICBnZXRfY2hpbGRfYW5kX3Rl
c3Rfcm9sZShsaXN0Ym94T2JqLCAwLCBBVEtfUk9MRV9MSVNUX0lURU0pOwotICAgIGdldF9jaGls
ZF9hbmRfdGVzdF9yb2xlKGxpc3Rib3hPYmosIDEsIEFUS19ST0xFX0xJU1RfSVRFTSk7Ci0gICAg
Z2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUobGlzdGJveE9iaiwgMiwgQVRLX1JPTEVfTElTVF9JVEVN
KTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9iaik7Ci0gICAgZ19vYmplY3RfdW5y
ZWYobGlzdGJveE9iaik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9s
ZV9wYXNzd29yZF90ZXh0KEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBk
YXRhKQotewotICAgIC8vIFRoaXMgaXMgYW4gZXh0cmFuZW91cyBvYmplY3Qgb2YgQVRLX1JPTEVf
UEFORUwgd2hpY2ggd2Ugc2hvdWxkIGdldCByaWQgb2YuCi0gICAgZml4dHVyZS0+b2JqID0gYXRr
X29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmaXh0dXJlLT5kb2N1bWVudCwgMCk7Ci0gICAg
Z19hc3NlcnQoZml4dHVyZS0+b2JqKTsKLQotICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZp
eHR1cmUtPm9iaiwgMCwgQVRLX1JPTEVfUEFTU1dPUkRfVEVYVCk7Ci0KLSAgICBnX29iamVjdF91
bnJlZihmaXh0dXJlLT5vYmopOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0
X3JvbGVfcHVzaF9idXR0b24oQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVy
IGRhdGEpCi17Ci0gICAgLy8gVGhpcyBpcyBhbiBleHRyYW5lb3VzIG9iamVjdCBvZiBBVEtfUk9M
RV9QQU5FTCB3aGljaCB3ZSBzaG91bGQgZ2V0IHJpZCBvZi4KLSAgICBmaXh0dXJlLT5vYmogPSBh
dGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZpeHR1cmUtPmRvY3VtZW50LCAwKTsKLSAg
ICBnX2Fzc2VydChmaXh0dXJlLT5vYmopOwotCi0gICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUo
Zml4dHVyZS0+b2JqLCAwLCBBVEtfUk9MRV9QVVNIX0JVVFRPTik7Ci0KLSAgICBnX29iamVjdF91
bnJlZihmaXh0dXJlLT5vYmopOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0
X3JvbGVfcmFkaW9fYnV0dG9uKEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRl
ciBkYXRhKQotewotICAgIC8vIFRoaXMgaXMgYW4gZXh0cmFuZW91cyBvYmplY3Qgb2YgQVRLX1JP
TEVfUEFORUwgd2hpY2ggd2Ugc2hvdWxkIGdldCByaWQgb2YuCi0gICAgZml4dHVyZS0+b2JqID0g
YXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmaXh0dXJlLT5kb2N1bWVudCwgMCk7Ci0g
ICAgZ19hc3NlcnQoZml4dHVyZS0+b2JqKTsKLQotICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xl
KGZpeHR1cmUtPm9iaiwgMCwgQVRLX1JPTEVfUkFESU9fQlVUVE9OKTsKLQotICAgIGdfb2JqZWN0
X3VucmVmKGZpeHR1cmUtPm9iaik7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJn
dikKLXsKLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAgICBnX3Rl
c3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwotCi0gICAgZ190ZXN0X2Fk
ZCgiL3dlYmtpdC9hdGsvdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2RvY3VtZW50X2ZyYW1lIiwK
LSAgICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVyZSwgSFRNTF9ET0NVTUVOVF9GUkFNRSwKLSAg
ICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVz
dF93ZWJraXRfYXRrX2dldF9yb2xlX2RvY3VtZW50X2ZyYW1lLAotICAgICAgICAgICAgICAgYXRr
X3JvbGVzX2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9hdGsv
dGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2hlYWRpbmciLAotICAgICAgICAgICAgICAgQXRrUm9s
ZXNGaXh0dXJlLCBIVE1MX0hFQURJTkcsCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVy
ZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9oZWFkaW5n
LAotICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAgZ190
ZXN0X2FkZCgiL3dlYmtpdC9hdGsvdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2ltYWdlIiwKLSAg
ICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVyZSwgSFRNTF9JTUFHRSwKLSAgICAgICAgICAgICAg
IGF0a19yb2xlc19maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRr
X2dldF9yb2xlX2ltYWdlLAotICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfdGVhcmRv
d24pOwotCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9hdGsvdGVzdF93ZWJraXRfYXRrX2dldF9y
b2xlX2xpbmsiLAotICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX0xJTktfVEVY
VCwKLSAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAotICAgICAgICAgICAg
ICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xpbmssCi0gICAgICAgICAgICAgICBhdGtfcm9s
ZXNfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0
X3dlYmtpdF9hdGtfZ2V0X3JvbGVfbGlzdF9hbmRfaXRlbSIsCi0gICAgICAgICAgICAgICBBdGtS
b2xlc0ZpeHR1cmUsIEhUTUxfTElTVCwKLSAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJl
X3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xpc3RfYW5k
X2l0ZW0sCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAg
ICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfcGFyYWdy
YXBoIiwKLSAgICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVyZSwgSFRNTF9QQVJBR1JBUEgsCi0g
ICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRl
c3Rfd2Via2l0X2F0a19nZXRfcm9sZV9wYXJhZ3JhcGgsCi0gICAgICAgICAgICAgICBhdGtfcm9s
ZXNfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0
X3dlYmtpdF9hdGtfZ2V0X3JvbGVfc2VjdGlvbiIsCi0gICAgICAgICAgICAgICBBdGtSb2xlc0Zp
eHR1cmUsIEhUTUxfU0VDVElPTiwKLSAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3Nl
dHVwLAotICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX3NlY3Rpb24sCi0g
ICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAgICBnX3Rlc3Rf
YWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfdGFibGUiLAotICAgICAg
ICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX1RBQkxFLAotICAgICAgICAgICAgICAgYXRr
X3JvbGVzX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF9hdGtfZ2V0
X3JvbGVfdGFibGUsCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7
Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVf
c2VwYXJhdG9yIiwKLSAgICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVyZSwgSFRNTF9TRVBBUkFU
T1IsCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAg
ICAgIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9zZXBhcmF0b3IsCi0gICAgICAgICAgICAgICBh
dGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0
ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfY29tYm9ib3giLAotICAgICAgICAgICAgICAgQXRr
Um9sZXNGaXh0dXJlLCBIVE1MX0NPTUJPQk9YLAotICAgICAgICAgICAgICAgYXRrX3JvbGVzX2Zp
eHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfY29t
Ym9ib3gsCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAg
ICAvKiBGb3JtIHJvbGVzICovCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9hdGsvdGVzdF93ZWJr
aXRfYXRrX2dldF9yb2xlX2Zvcm0iLAotICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBI
VE1MX0ZPUk0sCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV9zZXR1cCwKLSAgICAg
ICAgICAgICAgIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9mb3JtLAotICAgICAgICAgICAgICAg
YXRrX3JvbGVzX2ZpeHR1cmVfdGVhcmRvd24pOwotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvYXRr
L3Rlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9jaGVja19ib3giLAotICAgICAgICAgICAgICAgQXRr
Um9sZXNGaXh0dXJlLCBIVE1MX0NIRUNLX0JPWCwKLSAgICAgICAgICAgICAgIGF0a19yb2xlc19m
aXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2No
ZWNrX2JveCwKLSAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3RlYXJkb3duKTsKLQot
ICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvYXRrL3Rlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9lbnRy
eSIsCi0gICAgICAgICAgICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhUTUxfTEFCRUxFRF9FTlRSWSwK
LSAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAg
dGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2VudHJ5LAotICAgICAgICAgICAgICAgYXRrX3JvbGVz
X2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9hdGsvdGVzdF93
ZWJraXRfYXRrX2dldF9yb2xlX2xhYmVsIiwKLSAgICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVy
ZSwgSFRNTF9MQUJFTEVEX0VOVFJZLAotICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVf
c2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfbGFiZWwsCi0g
ICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAgICBnX3Rlc3Rf
YWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfbGlzdGJveCIsCi0gICAg
ICAgICAgICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhUTUxfTElTVEJPWCwKLSAgICAgICAgICAgICAg
IGF0a19yb2xlc19maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRr
X2dldF9yb2xlX2xpc3Rib3gsCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFy
ZG93bik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0
X3JvbGVfcGFzc3dvcmRfdGV4dCIsCi0gICAgICAgICAgICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhU
TUxfUEFTU1dPUkRfVEVYVCwKLSAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVw
LAotICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX3Bhc3N3b3JkX3RleHQs
Ci0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAgICBnX3Rl
c3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfcHVzaF9idXR0b24i
LAotICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX1BVU0hfQlVUVE9OLAotICAg
ICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0
X3dlYmtpdF9hdGtfZ2V0X3JvbGVfcHVzaF9idXR0b24sCi0gICAgICAgICAgICAgICBhdGtfcm9s
ZXNfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0
X3dlYmtpdF9hdGtfZ2V0X3JvbGVfcmFkaW9fYnV0dG9uIiwKLSAgICAgICAgICAgICAgIEF0a1Jv
bGVzRml4dHVyZSwgSFRNTF9SQURJT19CVVRUT04sCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNf
Zml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9y
YWRpb19idXR0b24sCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7
Ci0KLSAgICByZXR1cm4gZ190ZXN0X3J1bigpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9ndGsvdGVzdHMvdGVzdGNvbnRleHRtZW51LmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90
ZXN0Y29udGV4dG1lbnUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTRhYWE1Ny4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0Y29udGV4dG1lbnUuYwor
KysgL2Rldi9udWxsCkBAIC0xLDMxNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEy
IElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIsMSBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8d2Via2l0L3dlYmtp
dC5oPgotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgY2hhciAqZGF0YTsKLSAgICBndWludCBmbGFn
OwotfSBUZXN0SW5mbzsKLQotc3RhdGljIEdNYWluTG9vcCAqbG9vcDsKLQotdHlwZWRlZiBzdHJ1
Y3QgewotICAgIFdlYktpdFdlYlZpZXcgKndlYlZpZXc7Ci0gICAgVGVzdEluZm8gKmluZm87Ci19
IENvbnRleHRNZW51Rml4dHVyZTsKLQotc3RhdGljIFRlc3RJbmZvICp0ZXN0SW5mb05ldyhjb25z
dCBjaGFyICpkYXRhLCBndWludCBmbGFnKQotewotICAgIFRlc3RJbmZvICppbmZvID0gZ19zbGlj
ZV9uZXcoVGVzdEluZm8pOwotICAgIGluZm8tPmRhdGEgPSBnX3N0cmR1cChkYXRhKTsKLSAgICBp
bmZvLT5mbGFnID0gZmxhZzsKLQotICAgIHJldHVybiBpbmZvOwotfQotCi1zdGF0aWMgdm9pZCB0
ZXN0SW5mb0Rlc3Ryb3koVGVzdEluZm8gKmluZm8pCi17Ci0gICAgZ19mcmVlKGluZm8tPmRhdGEp
OwotICAgIGdfc2xpY2VfZnJlZShUZXN0SW5mbywgaW5mbyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNv
bnRleHRNZW51Rml4dHVyZVNldHVwKENvbnRleHRNZW51Rml4dHVyZSAqZml4dHVyZSwgZ2NvbnN0
cG9pbnRlciBkYXRhKQotewotICAgIGZpeHR1cmUtPndlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVco
d2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEws
IFRSVUUpOwotICAgIGZpeHR1cmUtPmluZm8gPSAoVGVzdEluZm8gKilkYXRhOwotfQotCi1zdGF0
aWMgdm9pZCBjb250ZXh0TWVudUZpeHR1cmVUZWFyZG93bihDb250ZXh0TWVudUZpeHR1cmUgKmZp
eHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBnX29iamVjdF91bnJlZihmaXh0dXJl
LT53ZWJWaWV3KTsKLSAgICBnX21haW5fbG9vcF91bnJlZihsb29wKTsKLSAgICB0ZXN0SW5mb0Rl
c3Ryb3koZml4dHVyZS0+aW5mbyk7Ci19Ci0KLXN0YXRpYyBHTGlzdCAqY2hlY2tBY3Rpb24oR0xp
c3QgKml0ZXIsIFdlYktpdENvbnRleHRNZW51QWN0aW9uIGFjdGlvbikKLXsKLSAgICBHdGtNZW51
SXRlbSAqaXRlbSA9IChHdGtNZW51SXRlbSAqKWl0ZXItPmRhdGE7Ci0KLSAgICBnX2Fzc2VydChH
VEtfSVNfTUVOVV9JVEVNKGl0ZW0pKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfY29udGV4dF9tZW51
X2l0ZW1fZ2V0X2FjdGlvbihpdGVtKSA9PSBhY3Rpb24pOwotCi0gICAgcmV0dXJuIGl0ZXItPm5l
eHQ7Ci19Ci0KLXN0YXRpYyBHTGlzdCAqY2hlY2tBY3Rpb25XaXRoU3VibWVudShHTGlzdCAqaXRl
ciwgV2ViS2l0Q29udGV4dE1lbnVBY3Rpb24gYWN0aW9uKQotewotICAgIEd0a01lbnVJdGVtICpp
dGVtID0gKEd0a01lbnVJdGVtICopaXRlci0+ZGF0YTsKLQotICAgIGdfYXNzZXJ0KEdUS19JU19N
RU5VX0lURU0oaXRlbSkpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9n
ZXRfYWN0aW9uKGl0ZW0pID09IGFjdGlvbik7Ci0gICAgZ19hc3NlcnQoR1RLX0lTX01FTlUoZ3Rr
X21lbnVfaXRlbV9nZXRfc3VibWVudShpdGVtKSkpOwotCi0gICAgcmV0dXJuIGl0ZXItPm5leHQ7
Ci19Ci0KLXN0YXRpYyBHTGlzdCAqY2hlY2tTZXBhcmF0b3IoR0xpc3QgKml0ZXIpCi17Ci0gICAg
R3RrTWVudUl0ZW0gKml0ZW0gPSAoR3RrTWVudUl0ZW0gKilpdGVyLT5kYXRhOwotCi0gICAgZ19h
c3NlcnQoR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkpOwotCi0gICAgcmV0dXJuIGl0
ZXItPm5leHQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBjb250ZXh0TWVudUNhbGxiYWNrKFdlYktp
dFdlYlZpZXcgKndlYlZpZXcsIEd0a1dpZGdldCAqZGVmYXVsdE1lbnUsIFdlYktpdEhpdFRlc3RS
ZXN1bHQgKmhpdFRlc3RSZXN1bHQsIGdib29sZWFuIGtleWJvYXJkTW9kZSwgZ3BvaW50ZXIgdXNl
ckRhdGEpCi17Ci0gICAgVGVzdEluZm8gKmluZm8gPSAoVGVzdEluZm8gKil1c2VyRGF0YTsKLSAg
ICBndWludCBjb250ZXh0OwotICAgIEdMaXN0ICppdGVtczsKLSAgICBHTGlzdCAqaXRlcjsKLQot
ICAgIC8qIENoZWNrIHNpZ25hbCBwYXJhbWV0ZXJzICovCi0gICAgZ19hc3NlcnQoV0VCS0lUX0lT
X1dFQl9WSUVXKHdlYlZpZXcpKTsKLSAgICBnX2Fzc2VydChHVEtfSVNfTUVOVShkZWZhdWx0TWVu
dSkpOwotICAgIGdfYXNzZXJ0KFdFQktJVF9JU19ISVRfVEVTVF9SRVNVTFQoaGl0VGVzdFJlc3Vs
dCkpOwotICAgIGdfYXNzZXJ0KCFrZXlib2FyZE1vZGUpOwotCi0gICAgZ19vYmplY3RfZ2V0KGhp
dFRlc3RSZXN1bHQsICJjb250ZXh0IiwgJmNvbnRleHQsIE5VTEwpOwotICAgIGdfYXNzZXJ0KGNv
bnRleHQgJiBpbmZvLT5mbGFnKTsKLQotICAgIGl0ZW1zID0gZ3RrX2NvbnRhaW5lcl9nZXRfY2hp
bGRyZW4oR1RLX0NPTlRBSU5FUihkZWZhdWx0TWVudSkpOwotICAgIHN3aXRjaCAoaW5mby0+Zmxh
ZykgewotICAgIGNhc2UgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0RPQ1VNRU5UOgot
ICAgICAgICBpdGVyID0gaXRlbXM7Ci0gICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9HT19CQUNLKTsKLSAgICAgICAgaXRlciA9IGNoZWNr
QWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0dPX0ZPUldBUkQpOwotICAg
ICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05f
U1RPUCk7Ci0gICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9N
RU5VX0FDVElPTl9SRUxPQUQpOwotICAgICAgICBnX2Fzc2VydCghaXRlcik7Ci0KLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfSU1BR0U6Ci0g
ICAgICAgIGl0ZXIgPSBpdGVtczsKLSAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdF
QktJVF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5fSU1BR0VfSU5fTkVXX1dJTkRPVyk7Ci0gICAg
ICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9E
T1dOTE9BRF9JTUFHRV9UT19ESVNLKTsKLSAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIs
IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFlfSU1BR0VfVE9fQ0xJUEJPQVJEKTsKLSAg
ICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9O
X0NPUFlfSU1BR0VfVVJMX1RPX0NMSVBCT0FSRCk7Ci0gICAgICAgIGdfYXNzZXJ0KCFpdGVyKTsK
LQotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVY
VF9FRElUQUJMRToKLSAgICAgICAgaXRlciA9IGl0ZW1zOwotICAgICAgICBpdGVyID0gY2hlY2tB
Y3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ1VUKTsKLSAgICAgICAgaXRl
ciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFkpOwot
ICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T05fUEFTVEUpOwotICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fREVMRVRFKTsKLSAgICAgICAgaXRlciA9IGNoZWNrU2VwYXJhdG9yKGl0
ZXIpOwotICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVO
VV9BQ1RJT05fU0VMRUNUX0FMTCk7Ci0gICAgICAgIGl0ZXIgPSBjaGVja1NlcGFyYXRvcihpdGVy
KTsKLSAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uV2l0aFN1Ym1lbnUoaXRlciwgV0VCS0lUX0NP
TlRFWFRfTUVOVV9BQ1RJT05fSU5QVVRfTUVUSE9EUyk7Ci0gICAgICAgIGl0ZXIgPSBjaGVja0Fj
dGlvbldpdGhTdWJtZW51KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1VOSUNPREUp
OwotICAgICAgICBnX2Fzc2VydCghaXRlcik7Ci0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBX
RUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfTElOSzoKLSAgICAgICAgaXRlciA9IGl0ZW1z
OwotICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9B
Q1RJT05fT1BFTl9MSU5LKTsKLSAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJ
VF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5fTElOS19JTl9ORVdfV0lORE9XKTsKLSAgICAgICAg
aXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0RPV05M
T0FEX0xJTktfVE9fRElTSyk7Ci0gICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX0xJTktfVE9fQ0xJUEJPQVJEKTsKLSAgICAgICAg
Z19hc3NlcnQoIWl0ZXIpOwotCi0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0gICAgfQotCi0gICAgZ19saXN0X2ZyZWUoaXRlbXMp
OwotICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci0KLSAgICByZXR1cm4gVFJVRTsKLX0KLQot
c3RhdGljIHZvaWQgcHVzaEV2ZW50KFdlYktpdFdlYlZpZXcgKndlYlZpZXcpCi17Ci0gICAgR2Rr
RXZlbnQgKmV2ZW50ID0gZ2RrX2V2ZW50X25ldyhHREtfQlVUVE9OX1BSRVNTKTsKLSNpZiBHVEtf
Q0hFQ0tfVkVSU0lPTigzLCAwLCAwKQotICAgIEdka0RldmljZU1hbmFnZXIgKmRldmljZU1hbmFn
ZXI7Ci0jZW5kaWYKLQotICAgIGV2ZW50LT5hbnkud2luZG93ID0gZ19vYmplY3RfcmVmKGd0a193
aWRnZXRfZ2V0X3dpbmRvdyhHVEtfV0lER0VUKHdlYlZpZXcpKSk7Ci0gICAgZXZlbnQtPmFueS5z
ZW5kX2V2ZW50ID0gRkFMU0U7Ci0gICAgZXZlbnQtPmJ1dHRvbi50aW1lID0gR0RLX0NVUlJFTlRf
VElNRTsKLSAgICBldmVudC0+YnV0dG9uLmJ1dHRvbiA9IDM7Ci0gICAgZXZlbnQtPmJ1dHRvbi54
ID0gZXZlbnQtPmJ1dHRvbi55ID0gNTsKLSAgICBldmVudC0+YnV0dG9uLnhfcm9vdCA9IGV2ZW50
LT5idXR0b24ueDsKLSAgICBldmVudC0+YnV0dG9uLnlfcm9vdCA9IGV2ZW50LT5idXR0b24ueTsK
LSNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAwLCAwKQotICAgIGRldmljZU1hbmFnZXIgPSBnZGtf
ZGlzcGxheV9nZXRfZGV2aWNlX21hbmFnZXIoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSk7Ci0g
ICAgZXZlbnQtPmJ1dHRvbi5kZXZpY2UgPSBnZGtfZGV2aWNlX21hbmFnZXJfZ2V0X2NsaWVudF9w
b2ludGVyKGRldmljZU1hbmFnZXIpOwotI2VuZGlmCi0KLSAgICBnZGtfZXZlbnRfcHV0KGV2ZW50
KTsKLSAgICBnZGtfZXZlbnRfZnJlZShldmVudCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGxvYWRTdGF0
dXNDYWxsYmFjayhXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3LCBHUGFyYW1TcGVjICpzcGVjLCBncG9p
bnRlciBkYXRhKQotewotICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92
aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJWaWV3KTsKLSAgICBUZXN0SW5mbyAqaW5mbyA9IChUZXN0
SW5mbyAqKWRhdGE7Ci0KLSAgICBnX2Fzc2VydChzdGF0dXMgIT0gV0VCS0lUX0xPQURfRkFJTEVE
KTsKLQotICAgIGlmIChzdGF0dXMgIT0gV0VCS0lUX0xPQURfRklOSVNIRUQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgImNvbnRleHQtbWVudSIsIEdf
Q0FMTEJBQ0soY29udGV4dE1lbnVDYWxsYmFjayksIGluZm8pOwotICAgIHB1c2hFdmVudCh3ZWJW
aWV3KTsKLX0KLQotc3RhdGljIGdib29sZWFuIG1hcEV2ZW50Q2FsbGJhY2soR3RrV2lkZ2V0ICp3
aWRnZXQsIEdka0V2ZW50ICpldmVudCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBndGtfd2lkZ2V0
X2dyYWJfZm9jdXMod2lkZ2V0KTsKLSAgICBDb250ZXh0TWVudUZpeHR1cmUgKmZpeHR1cmUgPSAo
Q29udGV4dE1lbnVGaXh0dXJlICopZGF0YTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJp
bmcoZml4dHVyZS0+d2ViVmlldywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4
dHVyZS0+aW5mby0+ZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRleHQv
aHRtbCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1dGYtOCIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlOi8vIik7Ci0gICAgZ19zaWduYWxfY29ubmVj
dChmaXh0dXJlLT53ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0sobG9h
ZFN0YXR1c0NhbGxiYWNrKSwgZml4dHVyZS0+aW5mbyk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQot
Ci1zdGF0aWMgdm9pZCB0ZXN0Q29udGV4dE1lbnUoQ29udGV4dE1lbnVGaXh0dXJlICpmaXh0dXJl
LCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0g
eyAwLCAwLCA1MCwgNTAgfTsKLSAgICBHdGtXaWRnZXQgKndpbmRvdyA9IGd0a193aW5kb3dfbmV3
KEdUS19XSU5ET1dfUE9QVVApOwotCi0gICAgZ3RrX3dpbmRvd19yZXNpemUoR1RLX1dJTkRPVyh3
aW5kb3cpLCA1MCwgNTApOwotICAgIGd0a193aW5kb3dfbW92ZShHVEtfV0lORE9XKHdpbmRvdyks
IDAsIDApOwotICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKGZpeHR1cmUt
PndlYlZpZXcpLCAmYWxsb2NhdGlvbik7Ci0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRB
SU5FUih3aW5kb3cpLCBHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpKTsKLSAgICBnX3NpZ25h
bF9jb25uZWN0KHdpbmRvdywgIm1hcC1ldmVudCIsIEdfQ0FMTEJBQ0sobWFwRXZlbnRDYWxsYmFj
ayksIGZpeHR1cmUpOwotICAgIGd0a193aWRnZXRfc2hvd19hbGwod2luZG93KTsKLQotICAgIGdf
bWFpbl9sb29wX3J1bihsb29wKTsKLX0KLQotc3RhdGljIGdib29sZWFuIGNvbnRleHRNZW51Q3Vz
dG9tSXRlbUNhbGxiYWNrKFdlYktpdFdlYlZpZXcgKndlYlZpZXcsIEd0a1dpZGdldCAqZGVmYXVs
dE1lbnUsIFdlYktpdEhpdFRlc3RSZXN1bHQgKmhpdFRlc3RSZXN1bHQsIGdib29sZWFuIGtleWJv
YXJkTW9kZSwgZ3BvaW50ZXIgdXNlckRhdGEpCi17Ci0gICAgVGVzdEluZm8gKmluZm8gPSAoVGVz
dEluZm8gKil1c2VyRGF0YTsKLSAgICBndWludCBjb250ZXh0OwotICAgIEdMaXN0ICppdGVtczsK
LSAgICBHTGlzdCAqaXRlcjsKLSAgICBHdGtXaWRnZXQgKm1lbnVJdGVtOwotICAgIEd0a0FjdGlv
biAqYWN0aW9uOwotCi0gICAgLyogQ2hlY2sgc2lnbmFsIHBhcmFtZXRlcnMgKi8KLSAgICBnX2Fz
c2VydChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldykpOwotICAgIGdfYXNzZXJ0KEdUS19JU19N
RU5VKGRlZmF1bHRNZW51KSk7Ci0gICAgZ19hc3NlcnQoV0VCS0lUX0lTX0hJVF9URVNUX1JFU1VM
VChoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIWtleWJvYXJkTW9kZSk7Ci0KLSAgICBn
X29iamVjdF9nZXQoaGl0VGVzdFJlc3VsdCwgImNvbnRleHQiLCAmY29udGV4dCwgTlVMTCk7Ci0g
ICAgZ19hc3NlcnQoY29udGV4dCAmIGluZm8tPmZsYWcpOwotCi0gICAgYWN0aW9uID0gZ3RrX2Fj
dGlvbl9uZXcoIlRlc3RBY3Rpb24iLCAiQ3VzdG9tIEFjdGlvbiIsICJDdXN0b20gQWN0aW9uIFRv
b2x0aXAiLCBOVUxMKTsKLSAgICBtZW51SXRlbSA9IGd0a19hY3Rpb25fY3JlYXRlX21lbnVfaXRl
bShhY3Rpb24pOwotICAgIGdfb2JqZWN0X3VucmVmKGFjdGlvbik7Ci0KLSAgICBndGtfbWVudV9z
aGVsbF9hcHBlbmQoR1RLX01FTlVfU0hFTEwoZGVmYXVsdE1lbnUpLCBtZW51SXRlbSk7Ci0gICAg
Z3RrX3dpZGdldF9zaG93KG1lbnVJdGVtKTsKLQotICAgIGl0ZW1zID0gZ3RrX2NvbnRhaW5lcl9n
ZXRfY2hpbGRyZW4oR1RLX0NPTlRBSU5FUihkZWZhdWx0TWVudSkpOwotICAgIGl0ZXIgPSBpdGVt
czsKLSAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T05fR09fQkFDSyk7Ci0gICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhU
X01FTlVfQUNUSU9OX0dPX0ZPUldBUkQpOwotICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9TVE9QKTsKLSAgICBpdGVyID0gY2hlY2tBY3Rpb24o
aXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fUkVMT0FEKTsKLSAgICBpdGVyID0gY2hl
Y2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fTk9fQUNUSU9OKTsKLSAg
ICBnX2Fzc2VydCghaXRlcik7Ci0KLSAgICBnX2xpc3RfZnJlZShpdGVtcyk7Ci0gICAgZ19tYWlu
X2xvb3BfcXVpdChsb29wKTsKLQotICAgIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZCB0
ZXN0Q29udGV4dE1lbnVDdXN0b21JdGVtKENvbnRleHRNZW51Rml4dHVyZSAqZml4dHVyZSwgZ2Nv
bnN0cG9pbnRlciBkYXRhKQotewotICAgIEd0a1dpZGdldCAqd2luZG93ID0gZ3RrX3dpbmRvd19u
ZXcoR1RLX1dJTkRPV19QT1BVUCk7Ci0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5F
Uih3aW5kb3cpLCBHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpKTsKLSAgICBndGtfd2lkZ2V0
X3Nob3dfYWxsKHdpbmRvdyk7Ci0gICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKEdUS19XSURHRVQo
Zml4dHVyZS0+d2ViVmlldykpOwotCi0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKGZp
eHR1cmUtPndlYlZpZXcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeHR1cmUt
PmluZm8tPmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXh0L2h0bWwi
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXRmLTgiLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiZmlsZTovLyIpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4
dHVyZS0+d2ViVmlldywgImNvbnRleHQtbWVudSIsIEdfQ0FMTEJBQ0soY29udGV4dE1lbnVDdXN0
b21JdGVtQ2FsbGJhY2spLCBmaXh0dXJlLT5pbmZvKTsKLSAgICBwdXNoRXZlbnQoZml4dHVyZS0+
d2ViVmlldyk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLXsKLSAgICBn
dGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAgICBnX3Rlc3RfYnVnX2Jhc2Uo
Imh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwotCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC90
ZXN0Y29udGV4dG1lbnUvZG9jdW1lbnQiLCBDb250ZXh0TWVudUZpeHR1cmUsCi0gICAgICAgICAg
ICAgICB0ZXN0SW5mb05ldygiPGh0bWw+PGJvZHk+PGgxPldlYktpdEdUSyshPC9oMT48L2JvZHk+
PC9odG1sPiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfSElUX1RFU1RfUkVT
VUxUX0NPTlRFWFRfRE9DVU1FTlQpLAotICAgICAgICAgICAgICAgY29udGV4dE1lbnVGaXh0dXJl
U2V0dXAsIHRlc3RDb250ZXh0TWVudSwgY29udGV4dE1lbnVGaXh0dXJlVGVhcmRvd24pOwotICAg
IC8qIFdlIGhhcmRjb2RlIGFsbCBlbGVtZW50cyB0byBiZSBhdCAwLDAgc28gdGhhdCB3ZSBrbm93
IHdoZXJlIHRvIGdlbmVyYXRlIHRoZSBidXR0b24gZXZlbnRzICovCi0gICAgZ190ZXN0X2FkZCgi
L3dlYmtpdC90ZXN0Y29udGV4dG1lbnUvaW1hZ2UiLCBDb250ZXh0TWVudUZpeHR1cmUsCi0gICAg
ICAgICAgICAgICB0ZXN0SW5mb05ldygiPGh0bWw+PGJvZHk+PGltZyBzdHlsZT0ncG9zaXRpb246
YWJzb2x1dGU7IGxlZnQ6MDsgdG9wOjAnIHNyYz0nMHhkZWFkYmVlZicgd2lkdGg9NTAgaGVpZ2h0
PTUwPjwvaW1nPjwvYm9keT48L2h0bWw+IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFdF
QktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9JTUFHRSksCi0gICAgICAgICAgICAgICBjb250
ZXh0TWVudUZpeHR1cmVTZXR1cCwgdGVzdENvbnRleHRNZW51LCBjb250ZXh0TWVudUZpeHR1cmVU
ZWFyZG93bik7Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC90ZXN0Y29udGV4dG1lbnUvZWRpdGFi
bGUiLCBDb250ZXh0TWVudUZpeHR1cmUsCi0gICAgICAgICAgICAgICB0ZXN0SW5mb05ldygiPGh0
bWw+PGJvZHk+PGlucHV0IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDowOyB0b3A6MCcg
c2l6ZT0nMzUnPjwvaW5wdXQ+PjwvYm9keT48L2h0bWw+IiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9FRElUQUJMRSksCi0gICAgICAg
ICAgICAgICBjb250ZXh0TWVudUZpeHR1cmVTZXR1cCwgdGVzdENvbnRleHRNZW51LCBjb250ZXh0
TWVudUZpeHR1cmVUZWFyZG93bik7Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC90ZXN0Y29udGV4
dG1lbnUvbGluayIsIENvbnRleHRNZW51Rml4dHVyZSwKLSAgICAgICAgICAgICAgIHRlc3RJbmZv
TmV3KCI8aHRtbD48Ym9keT48YSBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MDsgdG9w
OjAnIGhyZWY9J2h0dHA6Ly93d3cuZXhhbXBsZS5jb20nPkhFTExPIFdPUkxEPC9hPjwvYm9keT48
L2h0bWw+IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9ISVRfVEVTVF9SRVNV
TFRfQ09OVEVYVF9MSU5LKSwKLSAgICAgICAgICAgICAgIGNvbnRleHRNZW51Rml4dHVyZVNldHVw
LCB0ZXN0Q29udGV4dE1lbnUsIGNvbnRleHRNZW51Rml4dHVyZVRlYXJkb3duKTsKLSAgICBnX3Rl
c3RfYWRkKCIvd2Via2l0L3Rlc3Rjb250ZXh0bWVudS9jdXN0b21pdGVtIiwgQ29udGV4dE1lbnVG
aXh0dXJlLAotICAgICAgICAgICAgICAgdGVzdEluZm9OZXcoIjxodG1sPjxib2R5PjxoMT5XZWJL
aXRHVEsrITwvaDE+PC9ib2R5PjwvaHRtbD4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
V0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0RPQ1VNRU5UKSwKLSAgICAgICAgICAgICAg
IGNvbnRleHRNZW51Rml4dHVyZVNldHVwLCB0ZXN0Q29udGV4dE1lbnVDdXN0b21JdGVtLCBjb250
ZXh0TWVudUZpeHR1cmVUZWFyZG93bik7Ci0KLSAgICByZXR1cm4gZ190ZXN0X3J1bigpOwotfQot
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0Y29weWFuZHBhc3RlLmMg
Yi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0Y29weWFuZHBhc3RlLmMKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGJiMzhlYTYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9n
dGsvdGVzdHMvdGVzdGNvcHlhbmRwYXN0ZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjY2ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUg
PHN0cmluZy5oPgotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dl
YmtpdC5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+Ci0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0UmVmLmg+Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAg
ICBjaGFyKiBwYWdlOwotICAgIGNoYXIqIGV4cGVjdGVkQ29udGVudDsKLX0gVGVzdEluZm87Ci0K
LXR5cGVkZWYgc3RydWN0IHsKLSAgICBHdGtXaWRnZXQqIHdpbmRvdzsKLSAgICBXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3OwotICAgIEdNYWluTG9vcCogbG9vcDsKLSAgICBUZXN0SW5mbyogaW5mbzsK
LX0gQ29weUFuZFBhc3RlRml4dHVyZTsKLQotVGVzdEluZm8qCi10ZXN0X2luZm9fbmV3KGNvbnN0
IGNoYXIqIHBhZ2UsIGNvbnN0IGNoYXIqIGV4cGVjdGVkQ29udGVudCkKLXsKLSAgICBUZXN0SW5m
byogaW5mbzsKLSAgICBpbmZvID0gZ19zbGljZV9uZXcwKFRlc3RJbmZvKTsKLSAgICBpbmZvLT5w
YWdlID0gZ19zdHJkdXAocGFnZSk7Ci0gICAgaWYgKGV4cGVjdGVkQ29udGVudCkKLSAgICAgICAg
aW5mby0+ZXhwZWN0ZWRDb250ZW50ID0gZ19zdHJkdXAoZXhwZWN0ZWRDb250ZW50KTsKLSAgICBy
ZXR1cm4gaW5mbzsKLX0KLQotdm9pZAotdGVzdF9pbmZvX2Rlc3Ryb3koVGVzdEluZm8qIGluZm8p
Ci17Ci0gICAgZ19mcmVlKGluZm8tPnBhZ2UpOwotICAgIGdfZnJlZShpbmZvLT5leHBlY3RlZENv
bnRlbnQpOwotICAgIGdfc2xpY2VfZnJlZShUZXN0SW5mbywgaW5mbyk7Ci19Ci0KLXN0YXRpYyB2
b2lkIGNvcHlfYW5kX3Bhc3RlX2ZpeHR1cmVfc2V0dXAoQ29weUFuZFBhc3RlRml4dHVyZSogZml4
dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGZpeHR1cmUtPmxvb3AgPSBnX21haW5f
bG9vcF9uZXcoTlVMTCwgVFJVRSk7Ci0KLSAgICBmaXh0dXJlLT53aW5kb3cgPSBndGtfd2luZG93
X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKLSAgICBmaXh0dXJlLT53ZWJWaWV3ID0gV0VCS0lU
X1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0KLSAgICBndGtfY29udGFpbmVyX2Fk
ZChHVEtfQ09OVEFJTkVSKGZpeHR1cmUtPndpbmRvdyksIEdUS19XSURHRVQoZml4dHVyZS0+d2Vi
VmlldykpOwotfQotCi1zdGF0aWMgdm9pZCBjb3B5X2FuZF9wYXN0ZV9maXh0dXJlX3RlYXJkb3du
KENvcHlBbmRQYXN0ZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAg
ICBndGtfd2lkZ2V0X2Rlc3Ryb3koZml4dHVyZS0+d2luZG93KTsKLSAgICBnX21haW5fbG9vcF91
bnJlZihmaXh0dXJlLT5sb29wKTsKLSAgICB0ZXN0X2luZm9fZGVzdHJveShmaXh0dXJlLT5pbmZv
KTsKLX0KLQotc3RhdGljIHZvaWQgbG9hZF9zdGF0dXNfY2IoV2ViS2l0V2ViVmlldyogd2ViVmll
dywgR1BhcmFtU3BlYyogc3BlYywgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBDb3B5QW5kUGFzdGVG
aXh0dXJlKiBmaXh0dXJlID0gKENvcHlBbmRQYXN0ZUZpeHR1cmUqKWRhdGE7Ci0gICAgV2ViS2l0
TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYlZp
ZXcpOwotICAgIGlmIChzdGF0dXMgIT0gV0VCS0lUX0xPQURfRklOSVNIRUQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEd0a0NsaXBib2FyZCogY2xpcGJvYXJkID0gZ3RrX2NsaXBib2FyZF9nZXQo
R0RLX1NFTEVDVElPTl9DTElQQk9BUkQpOwotICAgIGd0a19jbGlwYm9hcmRfY2xlYXIoY2xpcGJv
YXJkKTsKLQotICAgIHdlYmtpdF93ZWJfdmlld19jb3B5X2NsaXBib2FyZCh3ZWJWaWV3KTsKLQot
ICAgIGdjaGFyKiB0ZXh0ID0gZ3RrX2NsaXBib2FyZF93YWl0X2Zvcl90ZXh0KGNsaXBib2FyZCk7
Ci0gICAgZ19hc3NlcnQodGV4dCB8fCAhZml4dHVyZS0+aW5mby0+ZXhwZWN0ZWRDb250ZW50KTsK
LSAgICBnX2Fzc2VydCghdGV4dCB8fCAhc3RyY21wKHRleHQsIGZpeHR1cmUtPmluZm8tPmV4cGVj
dGVkQ29udGVudCkpOwotICAgIGdfZnJlZSh0ZXh0KTsKLQotICAgIC8vIFZlcmlmeSB0aGF0IHRo
ZSBtYXJrdXAgc3RhcnRzIHdpdGggdGhlIHByb3BlciBjb250ZW50LXR5cGUgbWV0YSB0YWcgcHJl
Zml4LgotICAgIEd0a1NlbGVjdGlvbkRhdGEqIHNlbGVjdGlvbkRhdGEgPSBndGtfY2xpcGJvYXJk
X3dhaXRfZm9yX2NvbnRlbnRzKGNsaXBib2FyZCwgZ2RrX2F0b21faW50ZXJuKCJ0ZXh0L2h0bWwi
LCBGQUxTRSkpOwotICAgIGlmIChzZWxlY3Rpb25EYXRhKSB7Ci0gICAgICAgIHN0YXRpYyBjb25z
dCBjaGFyKiBtYXJrdXBQcmVmaXggPSAiPG1ldGEgaHR0cC1lcXVpdj1cImNvbnRlbnQtdHlwZVwi
IGNvbnRlbnQ9XCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLThcIj4iOwotICAgICAgICBjaGFyKiBt
YXJrdXAgPSBnX3N0cm5kdXAoKGNvbnN0IGNoYXIqKSBndGtfc2VsZWN0aW9uX2RhdGFfZ2V0X2Rh
dGEoc2VsZWN0aW9uRGF0YSksCi0gICAgICAgICAgICBndGtfc2VsZWN0aW9uX2RhdGFfZ2V0X2xl
bmd0aChzZWxlY3Rpb25EYXRhKSk7Ci0gICAgICAgIGdfYXNzZXJ0KHN0cmxlbihtYXJrdXBQcmVm
aXgpIDw9IHN0cmxlbihtYXJrdXApKTsKLSAgICAgICAgZ19hc3NlcnQoIXN0cm5jbXAobWFya3Vw
UHJlZml4LCBtYXJrdXAsIHN0cmxlbihtYXJrdXBQcmVmaXgpKSk7Ci0gICAgICAgIGdfZnJlZSht
YXJrdXApOwotICAgIH0KLQotICAgIGdfYXNzZXJ0KCFndGtfY2xpcGJvYXJkX3dhaXRfaXNfdXJp
c19hdmFpbGFibGUoY2xpcGJvYXJkKSk7Ci0gICAgZ19hc3NlcnQoIWd0a19jbGlwYm9hcmRfd2Fp
dF9pc19pbWFnZV9hdmFpbGFibGUoY2xpcGJvYXJkKSk7Ci0KLSAgICBnX21haW5fbG9vcF9xdWl0
KGZpeHR1cmUtPmxvb3ApOwotfQotCi1nYm9vbGVhbiBtYXBfZXZlbnRfY2IoR3RrV2lkZ2V0ICp3
aWRnZXQsIEdka0V2ZW50KiBldmVudCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBDb3B5QW5kUGFz
dGVGaXh0dXJlKiBmaXh0dXJlID0gKENvcHlBbmRQYXN0ZUZpeHR1cmUqKWRhdGE7Ci0gICAgd2Vi
a2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKGZpeHR1cmUtPndlYlZpZXcsIGZpeHR1cmUtPmluZm8t
PnBhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXh0L2h0bWwiLCAidXRm
LTgiLCAiZmlsZTovLyIpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQgdGVz
dF9jb3B5X2FuZF9wYXN0ZShDb3B5QW5kUGFzdGVGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2lu
dGVyIGRhdGEpCi17Ci0gICAgZml4dHVyZS0+aW5mbyA9IChUZXN0SW5mbyopZGF0YTsKLSAgICBn
X3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndpbmRvdywgIm1hcC1ldmVudCIsCi0gICAgICAgICAg
ICAgICAgICAgICBHX0NBTExCQUNLKG1hcF9ldmVudF9jYiksIGZpeHR1cmUpOwotCi0gICAgZ3Rr
X3dpZGdldF9zaG93KGZpeHR1cmUtPndpbmRvdyk7Ci0gICAgZ3RrX3dpZGdldF9zaG93KEdUS19X
SURHRVQoZml4dHVyZS0+d2ViVmlldykpOwotICAgIGd0a193aW5kb3dfcHJlc2VudChHVEtfV0lO
RE9XKGZpeHR1cmUtPndpbmRvdykpOwotICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1cyhHVEtfV0lE
R0VUKGZpeHR1cmUtPndlYlZpZXcpKTsKLQotICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+
d2ViVmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLAotICAgICAgICAgICAgICAgICAgICAgR19D
QUxMQkFDSyhsb2FkX3N0YXR1c19jYiksIGZpeHR1cmUpOwotCi0gICAgZ19tYWluX2xvb3BfcnVu
KGZpeHR1cmUtPmxvb3ApOwotfQotCi1zdGF0aWMgQ29weUFuZFBhc3RlRml4dHVyZSogY3VycmVu
dEZpeHR1cmU7Ci1zdGF0aWMgSlNWYWx1ZVJlZiBydW5QYXN0ZVRlc3RDYWxsYmFjayhKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmpl
Y3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBK
U1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKEdUS19X
SURHRVQoY3VycmVudEZpeHR1cmUtPndlYlZpZXcpKTsKLQotICAgIC8vIFNpbXVsYXRlIGEgcGFz
dGUga2V5Ym9hcmQgc2VxdWVuY2UuCi0gICAgR2RrRXZlbnQqIGV2ZW50ID0gZ2RrX2V2ZW50X25l
dyhHREtfS0VZX1BSRVNTKTsKLSAgICBldmVudC0+a2V5LmtleXZhbCA9IGdka191bmljb2RlX3Rv
X2tleXZhbCgndicpOwotICAgIGV2ZW50LT5rZXkuc3RhdGUgPSBHREtfQ09OVFJPTF9NQVNLOwot
ICAgIGV2ZW50LT5rZXkud2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KEdUS19XSURHRVQo
Y3VycmVudEZpeHR1cmUtPndlYlZpZXcpKTsKLSAgICBnX29iamVjdF9yZWYoZXZlbnQtPmtleS53
aW5kb3cpOwotI2lmbmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotICAgIEdka0RldmljZU1hbmFnZXIq
IG1hbmFnZXIgPSAgZ2RrX2Rpc3BsYXlfZ2V0X2RldmljZV9tYW5hZ2VyKGdka193aW5kb3dfZ2V0
X2Rpc3BsYXkoZXZlbnQtPmtleS53aW5kb3cpKTsKLSAgICBnZGtfZXZlbnRfc2V0X2RldmljZShl
dmVudCwgZ2RrX2RldmljZV9tYW5hZ2VyX2dldF9jbGllbnRfcG9pbnRlcihtYW5hZ2VyKSk7Ci0j
ZW5kaWYKLQotICAgIEdka0tleW1hcEtleSoga2V5czsKLSAgICBnaW50IG5fa2V5czsKLSAgICBp
ZiAoZ2RrX2tleW1hcF9nZXRfZW50cmllc19mb3Jfa2V5dmFsKGdka19rZXltYXBfZ2V0X2RlZmF1
bHQoKSwgZXZlbnQtPmtleS5rZXl2YWwsICZrZXlzLCAmbl9rZXlzKSkgewotICAgICAgICBldmVu
dC0+a2V5LmhhcmR3YXJlX2tleWNvZGUgPSBrZXlzWzBdLmtleWNvZGU7Ci0gICAgICAgIGdfZnJl
ZShrZXlzKTsKLSAgICB9Ci0KLSAgICBndGtfbWFpbl9kb19ldmVudChldmVudCk7Ci0gICAgZXZl
bnQtPmtleS50eXBlID0gR0RLX0tFWV9SRUxFQVNFOwotICAgIGd0a19tYWluX2RvX2V2ZW50KGV2
ZW50KTsKLSAgICBnZGtfZXZlbnRfZnJlZShldmVudCk7Ci0KLSAgICBKU1N0cmluZ1JlZiBzY3Jp
cHRTdHJpbmcgPSBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZG9jdW1lbnQuYm9keS5p
bm5lckhUTUw7Iik7Ci0gICAgSlNWYWx1ZVJlZiB2YWx1ZSA9IEpTRXZhbHVhdGVTY3JpcHQoY29u
dGV4dCwgc2NyaXB0U3RyaW5nLCAwLCAwLCAwLCAwKTsKLSAgICBKU1N0cmluZ1JlbGVhc2Uoc2Ny
aXB0U3RyaW5nKTsKLQotICAgIGdfYXNzZXJ0KEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCB2YWx1
ZSkpOwotICAgIEpTU3RyaW5nUmVmIGFjdHVhbCA9IEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4
dCwgdmFsdWUsIGV4Y2VwdGlvbik7Ci0gICAgZ19hc3NlcnQoIWV4Y2VwdGlvbiB8fCAhKmV4Y2Vw
dGlvbik7Ci0gICAgZ19hc3NlcnQoY3VycmVudEZpeHR1cmUtPmluZm8tPmV4cGVjdGVkQ29udGVu
dCk7Ci0gICAgSlNTdHJpbmdSZWYgZXhwZWN0ZWQgPSBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZyhjdXJyZW50Rml4dHVyZS0+aW5mby0+ZXhwZWN0ZWRDb250ZW50KTsKLSAgICBnX2Fzc2Vy
dChKU1N0cmluZ0lzRXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCkpOwotCi0gICAgSlNTdHJpbmdSZWxl
YXNlKGV4cGVjdGVkKTsKLSAgICBKU1N0cmluZ1JlbGVhc2UoYWN0dWFsKTsKLSAgICBnX21haW5f
bG9vcF9xdWl0KGN1cnJlbnRGaXh0dXJlLT5sb29wKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdpbmRvd19vYmplY3RfY2xlYXJl
ZF9jYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgV2ViS2l0V2ViRnJhbWUqIHdlYl9m
cmFtZSwgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHdpbmRvd19vYmpl
Y3QsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgSlNTdHJpbmdSZWYgbmFtZSA9IEpTU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJydW5UZXN0Iik7Ci0gICAgSlNPYmplY3RSZWYgdGVzdENvbXBs
ZXRlID0gSlNPYmplY3RNYWtlRnVuY3Rpb25XaXRoQ2FsbGJhY2soY29udGV4dCwgbmFtZSwgcnVu
UGFzdGVUZXN0Q2FsbGJhY2spOwotICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwgd2lu
ZG93X29iamVjdCwgbmFtZSwgdGVzdENvbXBsZXRlLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUs
IDApOwotICAgIEpTU3RyaW5nUmVsZWFzZShuYW1lKTsKLX0KLQotc3RhdGljIHZvaWQgcGFzdGlu
Z190ZXN0X2dldF9kYXRhX2NhbGxiYWNrKEd0a0NsaXBib2FyZCogY2xpcGJvYXJkLCBHdGtTZWxl
Y3Rpb25EYXRhKiBzZWxlY3Rpb25fZGF0YSwgZ3VpbnQgaW5mbywgZ3BvaW50ZXIgZGF0YSkKLXsK
LSAgICBndGtfc2VsZWN0aW9uX2RhdGFfc2V0KHNlbGVjdGlvbl9kYXRhLCBnZGtfYXRvbV9pbnRl
cm4oInRleHQvaHRtbCIsIEZBTFNFKSwgOCwgKGNvbnN0IGd1Y2hhciopIGRhdGEsIHN0cmxlbigo
Y2hhciopZGF0YSkgKyAxKTsKLX0KLQotc3RhdGljIHZvaWQgcGFzdGluZ190ZXN0X2NsZWFyX2Rh
dGFfY2FsbGJhY2soR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQsIGdwb2ludGVyIGRhdGEpCi17Ci0g
ICAgZ19mcmVlKGRhdGEpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3Bhc3RpbmdfbWFya3VwKENv
cHlBbmRQYXN0ZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBm
aXh0dXJlLT5pbmZvID0gKFRlc3RJbmZvKilkYXRhOwotICAgIGN1cnJlbnRGaXh0dXJlID0gZml4
dHVyZTsKLQotICAgIEd0a1RhcmdldExpc3QqIHRhcmdldExpc3QgPSBndGtfdGFyZ2V0X2xpc3Rf
bmV3KDAsIDApOwotICAgIGd0a190YXJnZXRfbGlzdF9hZGQodGFyZ2V0TGlzdCwgZ2RrX2F0b21f
aW50ZXJuKCJ0ZXh0L2h0bWwiLCBGQUxTRSksIDAsIDApOwotCi0gICAgaW50IG51bWJlck9mVGFy
Z2V0cyA9IDE7Ci0gICAgR3RrVGFyZ2V0RW50cnkqIHRhcmdldFRhYmxlID0gZ3RrX3RhcmdldF90
YWJsZV9uZXdfZnJvbV9saXN0KHRhcmdldExpc3QsICZudW1iZXJPZlRhcmdldHMpOwotICAgIGd0
a19jbGlwYm9hcmRfc2V0X3dpdGhfZGF0YShndGtfY2xpcGJvYXJkX2dldChHREtfU0VMRUNUSU9O
X0NMSVBCT0FSRCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFRhYmxl
LCBudW1iZXJPZlRhcmdldHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3Rp
bmdfdGVzdF9nZXRfZGF0YV9jYWxsYmFjaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFzdGluZ190ZXN0X2NsZWFyX2RhdGFfY2FsbGJhY2ssCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdfc3RyZHVwKGZpeHR1cmUtPmluZm8tPmV4cGVjdGVkQ29udGVudCkpOwot
ICAgIGd0a190YXJnZXRfbGlzdF91bnJlZih0YXJnZXRMaXN0KTsKLSAgICBndGtfdGFyZ2V0X3Rh
YmxlX2ZyZWUodGFyZ2V0VGFibGUsIG51bWJlck9mVGFyZ2V0cyk7Ci0KLSAgICBnX3NpZ25hbF9j
b25uZWN0KGZpeHR1cmUtPndpbmRvdywgIm1hcC1ldmVudCIsCi0gICAgICAgICAgICAgICAgICAg
ICBHX0NBTExCQUNLKG1hcF9ldmVudF9jYiksIGZpeHR1cmUpOwotICAgIGdfc2lnbmFsX2Nvbm5l
Y3QoZml4dHVyZS0+d2ViVmlldywgIndpbmRvdy1vYmplY3QtY2xlYXJlZCIsCi0gICAgICAgICAg
ICAgICAgICAgICBHX0NBTExCQUNLKHdpbmRvd19vYmplY3RfY2xlYXJlZF9jYWxsYmFjayksIGZp
eHR1cmUpOwotCi0gICAgZ3RrX3dpZGdldF9zaG93KGZpeHR1cmUtPndpbmRvdyk7Ci0gICAgZ3Rr
X3dpZGdldF9zaG93KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldykpOwotICAgIGd0a193aW5k
b3dfcHJlc2VudChHVEtfV0lORE9XKGZpeHR1cmUtPndpbmRvdykpOwotCi0gICAgZ19tYWluX2xv
b3BfcnVuKGZpeHR1cmUtPmxvb3ApOwotfQotCi0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiog
YXJndikKLXsKLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAgICBn
X3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwotICAgIGNvbnN0IGNo
YXIqIHNlbGVjdGVkX3NwYW5faHRtbCA9ICI8aHRtbD48Ym9keT4iCi0gICAgICAgICI8c3BhbiBp
ZD1cIm1haW5zcGFuXCI+QWxsIHdvcmsgYW5kIG5vIHBsYXkgPHNwYW4+bWFrZSBKYWNrIGEgZHVs
bDwvc3Bhbj4gYm95Ljwvc3Bhbj4iCi0gICAgICAgICI8c2NyaXB0PmRvY3VtZW50LmdldFNlbGVj
dGlvbigpLmNvbGxhcHNlKCk7XG4iCi0gICAgICAgICJkb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5z
ZWxlY3RBbGxDaGlsZHJlbihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbnNwYW4nKSk7XG4i
Ci0gICAgICAgICI8L3NjcmlwdD48L2JvZHk+PC9odG1sPiI7Ci0gICAgY29uc3QgY2hhciogbm9f
c2VsZWN0aW9uX2h0bWwgPSAiPGh0bWw+PGJvZHk+IgotICAgICAgICAiPHNwYW4gaWQ9XCJtYWlu
c3BhblwiPkFsbCB3b3JrIGFuZCBubyBwbGF5IDxzcGFuPm1ha2UgSmFjayBhIGR1bGw8L3NwYW4+
IGJveTwvc3Bhbj4iCi0gICAgICAgICI8c2NyaXB0PmRvY3VtZW50LmdldFNlbGVjdGlvbigpLmNv
bGxhcHNlKCk7XG4iCi0gICAgICAgICI8L3NjcmlwdD48L2JvZHk+PC9odG1sPiI7Ci0KLSAgICBn
X3Rlc3RfYWRkKCIvd2Via2l0L2NvcHlhbmRwYXN0ZS9zZWxlY3Rpb24iLCBDb3B5QW5kUGFzdGVG
aXh0dXJlLAotICAgICAgICAgICAgICAgdGVzdF9pbmZvX25ldyhzZWxlY3RlZF9zcGFuX2h0bWws
ICJBbGwgd29yayBhbmQgbm8gcGxheSBtYWtlIEphY2sgYSBkdWxsIGJveS4iKSwKLSAgICAgICAg
ICAgICAgIGNvcHlfYW5kX3Bhc3RlX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0
X2NvcHlfYW5kX3Bhc3RlLAotICAgICAgICAgICAgICAgY29weV9hbmRfcGFzdGVfZml4dHVyZV90
ZWFyZG93bik7Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9jb3B5YW5kcGFzdGUvbm8tc2VsZWN0
aW9uIiwgQ29weUFuZFBhc3RlRml4dHVyZSwKLSAgICAgICAgICAgICAgIHRlc3RfaW5mb19uZXco
bm9fc2VsZWN0aW9uX2h0bWwsIDApLAotICAgICAgICAgICAgICAgY29weV9hbmRfcGFzdGVfZml4
dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3RfY29weV9hbmRfcGFzdGUsCi0gICAgICAg
ICAgICAgICBjb3B5X2FuZF9wYXN0ZV9maXh0dXJlX3RlYXJkb3duKTsKLQotICAgIGNvbnN0IGNo
YXIqIHBhc3RlX3Rlc3RfaHRtbCA9ICI8aHRtbD4iCi0gICAgICAgICI8Ym9keSBvbkxvYWQ9XCJk
b2N1bWVudC5ib2R5LmZvY3VzKCk7IHJ1blRlc3QoKTtcIiBjb250ZW50RWRpdGFibGU9XCJ0cnVl
XCI+IgotICAgICAgICAiPC9ib2R5PjwvaHRtbD4iOwotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQv
Y29weWFuZHBhc3RlL3Bhc3RlLW1hcmt1cCIsIENvcHlBbmRQYXN0ZUZpeHR1cmUsCi0gICAgICAg
ICAgICAgICB0ZXN0X2luZm9fbmV3KHBhc3RlX3Rlc3RfaHRtbCwgImJvYmJ5IiksCi0gICAgICAg
ICAgICAgICBjb3B5X2FuZF9wYXN0ZV9maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVz
dF9wYXN0aW5nX21hcmt1cCwKLSAgICAgICAgICAgICAgIGNvcHlfYW5kX3Bhc3RlX2ZpeHR1cmVf
dGVhcmRvd24pOwotCi0gICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsKLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rkb21kb2N1bWVudC5jIGIvU291cmNlL1dlYktpdC9n
dGsvdGVzdHMvdGVzdGRvbWRvY3VtZW50LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDRjOTk3ZGQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvbWRv
Y3VtZW50LmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAidGVz
dF91dGlscy5oIgotCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+
Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KLQotI2Rl
ZmluZSBIVE1MX0RPQ1VNRU5UX1RJVExFICI8aHRtbD48aGVhZD48dGl0bGU+VGhpcyBpcyB0aGUg
dGl0bGU8L3RpdGxlPjwvaGVhZD48Ym9keT48L2JvZHk+PC9odG1sPiIKLSNkZWZpbmUgSFRNTF9E
T0NVTUVOVF9FTEVNRU5UUyAiPGh0bWw+PGJvZHk+PHVsPjxsaT4xPC9saT48bGk+MjwvbGk+PGxp
PjM8L2xpPjwvdWw+PC9ib2R5PjwvaHRtbD4iCi0jZGVmaW5lIEhUTUxfRE9DVU1FTlRfRUxFTUVO
VFNfQ0xBU1MgIjxodG1sPjxib2R5PjxkaXYgY2xhc3M9XCJ0ZXN0XCI+PC9kaXY+PGRpdiBjbGFz
cz1cInN0cmFuZ2VcIj48L2Rpdj48ZGl2IGNsYXNzPVwidGVzdFwiPjwvZGl2PjwvYm9keT48L2h0
bWw+IgotI2RlZmluZSBIVE1MX0RPQ1VNRU5UX0VMRU1FTlRTX0lEICI8aHRtbD48Ym9keT48ZGl2
IGlkPVwidGVzdG9rXCI+PC9kaXY+PGRpdiBpZD1cInRlc3RiYWRcIj5maXJzdDwvZGl2PjxkaXYg
aWQ9XCJ0ZXN0YmFkXCI+c2Vjb25kPC9kaXY+PC9ib2R5PjwvaHRtbD4iCi0jZGVmaW5lIEhUTUxf
RE9DVU1FTlRfTElOS1MgIjxodG1sPjxoZWFkPjx0aXRsZT5UaXRsZTwvdGl0bGU+PC9oZWFkPjxi
b2R5PjxhIGhyZWY9XCJhYm91dDpibGFua1wiPmJsYW5rPC9hPjxhIGhyZWY9XCJodHRwOi8vd3d3
Lmdvb2dsZS5jb21cIj5nb29nbGU8L2E+PGEgaHJlZj1cImh0dHA6Ly93d3cud2Via2l0Lm9yZ1wi
PndlYmtpdDwvYT48L2JvZHk+PC9odG1sPiIKLSNkZWZpbmUgSFRNTF9ET0NVTUVOVF9JRlJBTUUg
IjxodG1sPjxoZWFkPjx0aXRsZT5JRnJhbWU8L3RpdGxlPjwvaGVhZD48Ym9keT48aWZyYW1lIGlk
PSdpZnJhbWUnPjwvaWZyYW1lPjxkaXYgaWQ9J3Rlc3QnPjwvZGl2PjwvYm9keT48L2h0bWw+Igot
I2RlZmluZSBIVE1MX0RPQ1VNRU5UX1RBQkxFICI8aHRtbD48Ym9keT48dGFibGUgaWQ9XCJ0YWJs
ZVwiPjwvdGFibGU+PC9ib2R5PjwvaHRtbD4iCi0jZGVmaW5lIEhUTUxfRE9DVU1FTlRfRVZBTFVB
VEUgIjxodG1sPjxoZWFkPjx0aXRsZT48L3RpdGxlPjwvaGVhZD48Ym9keT48ZGl2PkZpcnN0IGRp
djwvZGl2PjxkaXY+U2Vjb25kIGRpdjwvZGl2PjwvYm9keT48L2h0bWw+IgotCi10eXBlZGVmIHN0
cnVjdCB7Ci0gICAgR3RrV2lkZ2V0KiB3ZWJWaWV3OwotICAgIEdNYWluTG9vcCogbG9vcDsKLX0g
RG9tRG9jdW1lbnRGaXh0dXJlOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZmluaXNoX2xvYWRpbmcoRG9t
RG9jdW1lbnRGaXh0dXJlKiBmaXh0dXJlKQotewotICAgIGlmIChnX21haW5fbG9vcF9pc19ydW5u
aW5nKGZpeHR1cmUtPmxvb3ApKQotICAgICAgICBnX21haW5fbG9vcF9xdWl0KGZpeHR1cmUtPmxv
b3ApOwotCi0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCBkb21fZG9jdW1lbnRf
Zml4dHVyZV9zZXR1cChEb21Eb2N1bWVudEZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIg
ZGF0YSkKLXsKLSAgICBmaXh0dXJlLT5sb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUp
OwotICAgIGZpeHR1cmUtPndlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7Ci0gICAgZ19v
YmplY3RfcmVmX3NpbmsoZml4dHVyZS0+d2ViVmlldyk7Ci0KLSAgICBpZiAoZGF0YSAhPSBOVUxM
KQotICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVXIChm
aXh0dXJlLT53ZWJWaWV3KSwgKGNvbnN0IGNoYXIqKSBkYXRhLCBOVUxMLCBOVUxMLCBOVUxMKTsK
LQotICAgIGdfaWRsZV9hZGQoKEdTb3VyY2VGdW5jKWZpbmlzaF9sb2FkaW5nLCBmaXh0dXJlKTsK
LSAgICBnX21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRv
bV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKERvbURvY3VtZW50Rml4dHVyZSogZml4dHVyZSwg
Z2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGlmIChmaXh0dXJlLT53ZWJWaWV3KQotICAgICAg
ICBnX29iamVjdF91bnJlZihmaXh0dXJlLT53ZWJWaWV3KTsKLSAgICBnX21haW5fbG9vcF91bnJl
ZihmaXh0dXJlLT5sb29wKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF9kb21fZG9jdW1lbnRfdGl0
bGUoRG9tRG9jdW1lbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0g
ICAgZ19hc3NlcnQoZml4dHVyZSk7Ci0gICAgV2ViS2l0V2ViVmlldyogdmlldyA9IChXZWJLaXRX
ZWJWaWV3KilmaXh0dXJlLT53ZWJWaWV3OwotICAgIGdfYXNzZXJ0KHZpZXcpOwotICAgIFdlYktp
dERPTURvY3VtZW50KiBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50
KHZpZXcpOwotICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsKLSAgICBnY2hhciogdGl0bGUgPSB3ZWJr
aXRfZG9tX2RvY3VtZW50X2dldF90aXRsZShkb2N1bWVudCk7Ci0gICAgZ19hc3NlcnQodGl0bGUp
OwotICAgIGdfYXNzZXJ0X2NtcHN0cih0aXRsZSwgPT0sICJUaGlzIGlzIHRoZSB0aXRsZSIpOwot
ICAgIGdfZnJlZSh0aXRsZSk7Ci0gICAgd2Via2l0X2RvbV9kb2N1bWVudF9zZXRfdGl0bGUoZG9j
dW1lbnQsICJUaGlzIGlzIHRoZSBzZWNvbmQgdGl0bGUiKTsKLSAgICB0aXRsZSA9IHdlYmtpdF9k
b21fZG9jdW1lbnRfZ2V0X3RpdGxlKGRvY3VtZW50KTsKLSAgICBnX2Fzc2VydCh0aXRsZSk7Ci0g
ICAgZ19hc3NlcnRfY21wc3RyKHRpdGxlLCA9PSwgIlRoaXMgaXMgdGhlIHNlY29uZCB0aXRsZSIp
OwotICAgIGdfZnJlZSh0aXRsZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RfZG9tX2RvY3VtZW50
X2dldF9lbGVtZW50c19ieV90YWdfbmFtZShEb21Eb2N1bWVudEZpeHR1cmUqIGZpeHR1cmUsIGdj
b25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBnX2Fzc2VydChmaXh0dXJlKTsKLSAgICBXZWJLaXRX
ZWJWaWV3KiB2aWV3ID0gKFdlYktpdFdlYlZpZXcqKWZpeHR1cmUtPndlYlZpZXc7Ci0gICAgZ19h
c3NlcnQodmlldyk7Ci0gICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50ID0gd2Via2l0X3dl
Yl92aWV3X2dldF9kb21fZG9jdW1lbnQodmlldyk7Ci0gICAgZ19hc3NlcnQoZG9jdW1lbnQpOwot
ICAgIFdlYktpdERPTU5vZGVMaXN0KiBsaXN0ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxl
bWVudHNfYnlfdGFnX25hbWUoZG9jdW1lbnQsICJsaSIpOwotICAgIGdfYXNzZXJ0KGxpc3QpOwot
ICAgIGd1bG9uZyBsZW5ndGggPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3Qp
OwotICAgIGdfYXNzZXJ0X2NtcGludChsZW5ndGgsID09LCAzKTsKLQotICAgIGd1aW50IGk7Ci0K
LSAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgV2ViS2l0RE9NTm9k
ZSogaXRlbSA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdCwgaSk7Ci0gICAgICAgIGdf
YXNzZXJ0KGl0ZW0pOwotICAgICAgICBXZWJLaXRET01FbGVtZW50KiBlbGVtZW50ID0gKFdlYktp
dERPTUVsZW1lbnQqKWl0ZW07Ci0gICAgICAgIGdfYXNzZXJ0KGVsZW1lbnQpOwotICAgICAgICBn
X2Fzc2VydF9jbXBzdHIod2Via2l0X2RvbV9lbGVtZW50X2dldF90YWdfbmFtZShlbGVtZW50KSwg
PT0sICJMSSIpOwotICAgICAgICBXZWJLaXRET01IVE1MRWxlbWVudCogaHRtbEVsZW1lbnQgPSAo
V2ViS2l0RE9NSFRNTEVsZW1lbnQqKWVsZW1lbnQ7Ci0gICAgICAgIGNoYXIqIG4gPSBnX3N0cmR1
cF9wcmludGYoIiVkIiwgaSsxKTsKLSAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9kb21f
aHRtbF9lbGVtZW50X2dldF9pbm5lcl90ZXh0KGh0bWxFbGVtZW50KSwgPT0sIG4pOwotICAgICAg
ICBnX2ZyZWUobik7Ci0gICAgfQotCi0gICAgZ19vYmplY3RfdW5yZWYobGlzdCk7Ci19Ci0KLXN0
YXRpYyB2b2lkIHRlc3RfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19ieV9jbGFzc19uYW1lKERv
bURvY3VtZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGdf
YXNzZXJ0KGZpeHR1cmUpOwotICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSAoV2ViS2l0V2ViVmll
dyopZml4dHVyZS0+d2ViVmlldzsKLSAgICBnX2Fzc2VydCh2aWV3KTsKLSAgICBXZWJLaXRET01E
b2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3
KTsKLSAgICBnX2Fzc2VydChkb2N1bWVudCk7Ci0gICAgV2ViS2l0RE9NTm9kZUxpc3QqIGxpc3Qg
PSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19ieV9jbGFzc19uYW1lKGRvY3VtZW50
LCAidGVzdCIpOwotICAgIGdfYXNzZXJ0KGxpc3QpOwotICAgIGd1bG9uZyBsZW5ndGggPSB3ZWJr
aXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QpOwotICAgIGdfYXNzZXJ0X2NtcGludChs
ZW5ndGgsID09LCAyKTsKLQotICAgIGd1aW50IGk7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgbGVu
Z3RoOyBpKyspIHsKLSAgICAgICAgV2ViS2l0RE9NTm9kZSogaXRlbSA9IHdlYmtpdF9kb21fbm9k
ZV9saXN0X2l0ZW0obGlzdCwgaSk7Ci0gICAgICAgIGdfYXNzZXJ0KGl0ZW0pOwotICAgICAgICBX
ZWJLaXRET01FbGVtZW50KiBlbGVtZW50ID0gKFdlYktpdERPTUVsZW1lbnQqKWl0ZW07Ci0gICAg
ICAgIGdfYXNzZXJ0KGVsZW1lbnQpOwotICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2Rv
bV9lbGVtZW50X2dldF90YWdfbmFtZShlbGVtZW50KSwgPT0sICJESVYiKTsKLSAgICB9Ci0KLSAg
ICBnX29iamVjdF91bnJlZihsaXN0KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF9kb21fZG9jdW1l
bnRfZ2V0X2VsZW1lbnRfYnlfaWQoRG9tRG9jdW1lbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rw
b2ludGVyIGRhdGEpCi17Ci0gICAgZ19hc3NlcnQoZml4dHVyZSk7Ci0gICAgV2ViS2l0V2ViVmll
dyogdmlldyA9IChXZWJLaXRXZWJWaWV3KilmaXh0dXJlLT53ZWJWaWV3OwotICAgIGdfYXNzZXJ0
KHZpZXcpOwotICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmll
d19nZXRfZG9tX2RvY3VtZW50KHZpZXcpOwotICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsKLSAgICBX
ZWJLaXRET01FbGVtZW50KiBlbGVtZW50ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVu
dF9ieV9pZChkb2N1bWVudCwgInRlc3RvayIpOwotICAgIGdfYXNzZXJ0KGVsZW1lbnQpOwotICAg
IGVsZW1lbnQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50X2J5X2lkKGRvY3VtZW50
LCAidGhpcy1pZC1kb2VzLW5vdC1leGlzdCIpOwotICAgIGdfYXNzZXJ0KGVsZW1lbnQgPT0gMCk7
Ci0gICAgLyogVGhlIERPTSBzcGVjIHNheXMgdGhlIHJldHVybiB2YWx1ZSBpcyB1bmRlZmluZWQg
d2hlbiB0aGVyZSdzCi0gICAgICogbW9yZSB0aGFuIG9uZSBlbGVtZW50IHdpdGggdGhlIHNhbWUg
aWQ7IGluIG91ciBjYXNlIHRoZSBmaXJzdAotICAgICAqIG9uZSB3aWxsIGJlIHJldHVybmVkICov
Ci0gICAgZWxlbWVudCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRfYnlfaWQoZG9j
dW1lbnQsICJ0ZXN0YmFkIik7Ci0gICAgZ19hc3NlcnQoZWxlbWVudCk7Ci0gICAgV2ViS2l0RE9N
SFRNTEVsZW1lbnQqIGh0bWxFbGVtZW50ID0gKFdlYktpdERPTUhUTUxFbGVtZW50KillbGVtZW50
OwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfaW5uZXJf
dGV4dChodG1sRWxlbWVudCksID09LCAiZmlyc3QiKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF9k
b21fZG9jdW1lbnRfZ2V0X2xpbmtzKERvbURvY3VtZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0
cG9pbnRlciBkYXRhKQotewotICAgIGdfYXNzZXJ0KGZpeHR1cmUpOwotICAgIFdlYktpdFdlYlZp
ZXcqIHZpZXcgPSAoV2ViS2l0V2ViVmlldyopZml4dHVyZS0+d2ViVmlldzsKLSAgICBnX2Fzc2Vy
dCh2aWV3KTsKLSAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKLSAgICBnX2Fzc2VydChkb2N1bWVudCk7Ci0gICAg
V2ViS2l0RE9NSFRNTENvbGxlY3Rpb24gKmNvbGxlY3Rpb24gPSB3ZWJraXRfZG9tX2RvY3VtZW50
X2dldF9saW5rcyhkb2N1bWVudCk7Ci0gICAgZ19hc3NlcnQoY29sbGVjdGlvbik7Ci0gICAgZ3Vs
b25nIGxlbmd0aCA9IHdlYmtpdF9kb21faHRtbF9jb2xsZWN0aW9uX2dldF9sZW5ndGgoY29sbGVj
dGlvbik7Ci0gICAgZ19hc3NlcnRfY21waW50KGxlbmd0aCwgPT0sIDMpOwotCi0gICAgZ3VpbnQg
aTsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBzdGF0aWMg
Y29uc3QgY2hhciogbmFtZXNbXSA9IHsgImJsYW5rIiwgImdvb2dsZSIsICJ3ZWJraXQiIH07Ci0g
ICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiB1cmlzW10gPSB7ICJhYm91dDpibGFuayIsICJodHRw
Oi8vd3d3Lmdvb2dsZS5jb20vIiwgImh0dHA6Ly93d3cud2Via2l0Lm9yZy8iIH07Ci0gICAgICAg
IFdlYktpdERPTU5vZGUgKm5vZGUgPSB3ZWJraXRfZG9tX2h0bWxfY29sbGVjdGlvbl9pdGVtKGNv
bGxlY3Rpb24sIGkpOwotICAgICAgICBnX2Fzc2VydChub2RlKTsKLSAgICAgICAgV2ViS2l0RE9N
RWxlbWVudCogZWxlbWVudCA9IChXZWJLaXRET01FbGVtZW50Kilub2RlOwotICAgICAgICBnX2Fz
c2VydF9jbXBzdHIod2Via2l0X2RvbV9lbGVtZW50X2dldF90YWdfbmFtZShlbGVtZW50KSwgPT0s
ICJBIik7Ci0gICAgICAgIFdlYktpdERPTUhUTUxFbGVtZW50ICpodG1sRWxlbWVudCA9IChXZWJL
aXRET01IVE1MRWxlbWVudCopZWxlbWVudDsKLSAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtp
dF9kb21faHRtbF9lbGVtZW50X2dldF9pbm5lcl90ZXh0KGh0bWxFbGVtZW50KSwgPT0sIG5hbWVz
W2ldKTsKLSAgICAgICAgV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQgKmFuY2hvciA9IChXZWJL
aXRET01IVE1MQW5jaG9yRWxlbWVudCopZWxlbWVudDsKLSAgICAgICAgZ19hc3NlcnRfY21wc3Ry
KHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfaHJlZihhbmNob3IpLCA9PSwgdXJp
c1tpXSk7Ci0gICAgfQotICAgIGdfb2JqZWN0X3VucmVmKGNvbGxlY3Rpb24pOwotfQotCi1zdGF0
aWMgdm9pZCB0ZXN0X2RvbV9kb2N1bWVudF9pbnNlcnRfcm93KERvbURvY3VtZW50Rml4dHVyZSog
Zml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGdfYXNzZXJ0KGZpeHR1cmUpOwot
ICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSAoV2ViS2l0V2ViVmlldyopZml4dHVyZS0+d2ViVmll
dzsKLSAgICBnX2Fzc2VydCh2aWV3KTsKLSAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQg
PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKLSAgICBnX2Fzc2VydChX
RUJLSVRfRE9NX0lTX0RPQ1VNRU5UKGRvY3VtZW50KSk7Ci0gICAgV2ViS2l0RE9NRWxlbWVudCog
dGFibGUgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50X2J5X2lkKGRvY3VtZW50LCAi
dGFibGUiKTsKLSAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVCh0YWJsZSkp
OwotICAgIFdlYktpdERPTUhUTUxDb2xsZWN0aW9uKiByb3dzID0gd2Via2l0X2RvbV9odG1sX3Rh
YmxlX2VsZW1lbnRfZ2V0X3Jvd3MoV0VCS0lUX0RPTV9IVE1MX1RBQkxFX0VMRU1FTlQodGFibGUp
KTsKLSAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfQ09MTEVDVElPTihyb3dzKSk7Ci0K
LSAgICAvLyBUYWJsZSBpcyBpbml0aWFsbHkgZW1wdHkuCi0gICAgZ19hc3NlcnRfY21waW50KHdl
YmtpdF9kb21faHRtbF9jb2xsZWN0aW9uX2dldF9sZW5ndGgocm93cyksID09LCAwKTsKLSAgICBX
ZWJLaXRET01IVE1MRWxlbWVudCogcm93ID0gd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRf
aW5zZXJ0X3JvdyhXRUJLSVRfRE9NX0hUTUxfVEFCTEVfRUxFTUVOVCh0YWJsZSksIC0xLCBOVUxM
KTsKLSAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfUk9XX0VMRU1FTlQocm93
KSk7Ci0gICAgcm93cyA9IHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2dldF9yb3dzKFdF
QktJVF9ET01fSFRNTF9UQUJMRV9FTEVNRU5UKHRhYmxlKSk7Ci0gICAgZ19hc3NlcnQoV0VCS0lU
X0RPTV9JU19IVE1MX0NPTExFQ1RJT04ocm93cykpOwotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJr
aXRfZG9tX2h0bWxfY29sbGVjdGlvbl9nZXRfbGVuZ3RoKHJvd3MpLCA9PSwgMSk7Ci19Ci0KLXN0
YXRpYyB2b2lkIHRlc3RfZG9tX2RvY3VtZW50X2V2YWx1YXRlKERvbURvY3VtZW50Rml4dHVyZSog
Zml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGdfYXNzZXJ0KGZpeHR1cmUpOwot
ICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSAoV2ViS2l0V2ViVmlldyopZml4dHVyZS0+d2ViVmll
dzsKLSAgICBnX2Fzc2VydCh2aWV3KTsKLSAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQg
PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKLSAgICBnX2Fzc2VydChX
RUJLSVRfRE9NX0lTX0RPQ1VNRU5UKGRvY3VtZW50KSk7Ci0gICAgV2ViS2l0RE9NTm9kZUxpc3Qq
IGxpc3QgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19ieV90YWdfbmFtZShkb2N1
bWVudCwgImh0bWwiKTsKLSAgICBnX2Fzc2VydChsaXN0KTsKLSAgICBndWxvbmcgbGVuZ3RoID0g
d2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChsaXN0KTsKLSAgICBnX2Fzc2VydF9jbXBp
bnQobGVuZ3RoLCA9PSwgMSk7Ci0gICAgV2ViS2l0RE9NTm9kZSogaHRtbCA9IHdlYmtpdF9kb21f
bm9kZV9saXN0X2l0ZW0obGlzdCwgMCk7Ci0gICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19OT0RF
KGh0bWwpKTsKLQotICAgIFdlYktpdERPTVhQYXRoUmVzdWx0KiByZXN1bHQgPSB3ZWJraXRfZG9t
X2RvY3VtZW50X2V2YWx1YXRlKGRvY3VtZW50LCAiLy9kaXYiLCBodG1sLCBOVUxMLCAwLCBOVUxM
LCBOVUxMKTsKLSAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX1hQQVRIX1JFU1VMVChyZXN1bHQp
KTsKLQotICAgIGludCBpID0gMDsKLSAgICBXZWJLaXRET01Ob2RlKiBub2RlOwotICAgIHdoaWxl
ICggKG5vZGUgPSB3ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9pdGVyYXRlX25leHQocmVzdWx0LCBO
VUxMKSkgIT0gTlVMTCkgewotICAgICAgICBnX2Fzc2VydChub2RlKTsKLSAgICAgICAgV2ViS2l0
RE9NRWxlbWVudCogZWxlbWVudCA9IChXZWJLaXRET01FbGVtZW50Kilub2RlOwotICAgICAgICBn
X2Fzc2VydF9jbXBzdHIod2Via2l0X2RvbV9lbGVtZW50X2dldF90YWdfbmFtZShlbGVtZW50KSwg
PT0sICJESVYiKTsKLSAgICAgICAgaSsrOwotICAgIH0KLSAgICBnX2Fzc2VydF9jbXBpbnQoaSwg
PT0sIDIpOwotCi0gICAgZ19vYmplY3RfdW5yZWYobGlzdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdl
YWtfbm90aWZ5KGdwb2ludGVyIGRhdGEsIEdPYmplY3QqIHpvbWJpZSkKLXsKLSAgICBndWludCog
Y291bnQgPSAoZ3VpbnQqKWRhdGE7Ci0gICAgKCpjb3VudCkrKzsKLX0KLQotc3RhdGljIHZvaWQg
dGVzdF9kb21fZG9jdW1lbnRfZ2FyYmFnZV9jb2xsZWN0aW9uKERvbURvY3VtZW50Rml4dHVyZSog
Zml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGd1aW50IGNvdW50ID0gMDsKLSAg
ICBnX2Fzc2VydChmaXh0dXJlKTsKLSAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gKFdlYktpdFdl
YlZpZXcqKWZpeHR1cmUtPndlYlZpZXc7Ci0gICAgZ19hc3NlcnQodmlldyk7Ci0gICAgV2ViS2l0
RE9NRG9jdW1lbnQqIGRvY3VtZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQo
dmlldyk7Ci0gICAgZ19hc3NlcnQoZG9jdW1lbnQpOwotICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdf
T0JKRUNUKGRvY3VtZW50KSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOwotICAg
IFdlYktpdERPTUhUTUxIZWFkRWxlbWVudCogaGVhZCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0
X2hlYWQoZG9jdW1lbnQpOwotICAgIGdfYXNzZXJ0KGhlYWQpOwotICAgIGdfb2JqZWN0X3dlYWtf
cmVmKEdfT0JKRUNUKGhlYWQpLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7Ci0g
ICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQqIGJvZHkgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9i
b2R5KGRvY3VtZW50KTsKLSAgICBnX2Fzc2VydChib2R5KTsKLSAgICBnX29iamVjdF93ZWFrX3Jl
ZihHX09CSkVDVChib2R5KSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOwotICAg
IFdlYktpdERPTUhUTUxDb2xsZWN0aW9uICpjb2xsZWN0aW9uID0gd2Via2l0X2RvbV9kb2N1bWVu
dF9nZXRfbGlua3MoZG9jdW1lbnQpOwotICAgIGdfYXNzZXJ0KGNvbGxlY3Rpb24pOwotICAgIGdf
b2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGNvbGxlY3Rpb24pLCAoR1dlYWtOb3RpZnkpd2Vha19u
b3RpZnksICZjb3VudCk7Ci0KLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoV0VCS0lU
X1dFQl9WSUVXKHZpZXcpLCBIVE1MX0RPQ1VNRU5UX0xJTktTLCBOVUxMLCBOVUxMLCBOVUxMKTsK
LQotICAgIHdoaWxlIChnX21haW5fY29udGV4dF9wZW5kaW5nKE5VTEwpKQotICAgICAgICBnX21h
aW5fY29udGV4dF9pdGVyYXRpb24oTlVMTCwgRkFMU0UpOwotCi0gICAgZ19hc3NlcnRfY21wdWlu
dChjb3VudCwgPT0sIDMpOwotCi0gICAgZ19vYmplY3RfdW5yZWYoY29sbGVjdGlvbik7Ci0gICAg
Z19hc3NlcnRfY21wdWludChjb3VudCwgPT0sIDQpOwotCi0gICAgY291bnQgPSAwOwotCi0gICAg
ZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKLSAgICBn
X2Fzc2VydChkb2N1bWVudCk7Ci0gICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1QoZG9jdW1l
bnQpLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7Ci0gICAgaGVhZCA9IHdlYmtp
dF9kb21fZG9jdW1lbnRfZ2V0X2hlYWQoZG9jdW1lbnQpOwotICAgIGdfYXNzZXJ0KGhlYWQpOwot
ICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGhlYWQpLCAoR1dlYWtOb3RpZnkpd2Vha19u
b3RpZnksICZjb3VudCk7Ci0gICAgYm9keSA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2JvZHko
ZG9jdW1lbnQpOwotICAgIGdfYXNzZXJ0KGJvZHkpOwotICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdf
T0JKRUNUKGJvZHkpLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7Ci0gICAgY29s
bGVjdGlvbiA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2xpbmtzKGRvY3VtZW50KTsKLSAgICBn
X2Fzc2VydChjb2xsZWN0aW9uKTsKLSAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVDVChjb2xs
ZWN0aW9uKSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOwotICAgIC8qIEFzayB0
d2ljZSBmb3IgdGhlIHNhbWUgb2JqZWN0ICovCi0gICAgV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24q
IGNvbGxlY3Rpb24yID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfbGlua3MoZG9jdW1lbnQpOwot
ICAgIGdfYXNzZXJ0KGNvbGxlY3Rpb24yKTsKLSAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVD
VChjb2xsZWN0aW9uMiksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKLQotICAg
IGdfb2JqZWN0X3VucmVmKGRvY3VtZW50KTsKLSAgICBnX29iamVjdF91bnJlZihoZWFkKTsKLSAg
ICBnX29iamVjdF91bnJlZihib2R5KTsKLSAgICBnX29iamVjdF91bnJlZihjb2xsZWN0aW9uKTsK
LSAgICBnX29iamVjdF91bnJlZihjb2xsZWN0aW9uMik7Ci0KLSAgICBnX2Fzc2VydF9jbXB1aW50
KGNvdW50LCA9PSwgNSk7Ci0KLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoV0VCS0lU
X1dFQl9WSUVXKHZpZXcpLCBIVE1MX0RPQ1VNRU5UX0lGUkFNRSwgTlVMTCwgTlVMTCwgTlVMTCk7
Ci0KLSAgICB3aGlsZSAoZ19tYWluX2NvbnRleHRfcGVuZGluZyhOVUxMKSkKLSAgICAgICAgZ19t
YWluX2NvbnRleHRfaXRlcmF0aW9uKE5VTEwsIEZBTFNFKTsKLQotICAgIGNvdW50ID0gMDsKLQot
ICAgIGRvY3VtZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQodmlldyk7Ci0g
ICAgV2ViS2l0RE9NRWxlbWVudCogZGl2ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVu
dF9ieV9pZChkb2N1bWVudCwgInRlc3QiKTsKLSAgICBnX2Fzc2VydChkaXYpOwotICAgIGdfb2Jq
ZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGRpdiksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNv
dW50KTsKLSAgICBXZWJLaXRET01FbGVtZW50KiBpZnJhbWUgPSB3ZWJraXRfZG9tX2RvY3VtZW50
X2dldF9lbGVtZW50X2J5X2lkKGRvY3VtZW50LCAiaWZyYW1lIik7Ci0gICAgZ19hc3NlcnQoaWZy
YW1lKTsKLQotICAgIHdlYmtpdF9kb21fZWxlbWVudF9zZXRfYXR0cmlidXRlKGlmcmFtZSwgInNy
YyIsICJkYXRhOjxodG1sPjxoZWFkPjwvaGVhZD48L2h0bWw+IiwgTlVMTCk7Ci0KLSAgICB3aGls
ZSAoZ19tYWluX2NvbnRleHRfcGVuZGluZyhOVUxMKSkKLSAgICAgICAgZ19tYWluX2NvbnRleHRf
aXRlcmF0aW9uKE5VTEwsIEZBTFNFKTsKLQotICAgIFdlYktpdERPTURvY3VtZW50KiBpZnJhbWVE
b2N1bWVudCA9IHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfY29udGVudF9kb2N1
bWVudChXRUJLSVRfRE9NX0hUTUxfSUZSQU1FX0VMRU1FTlQoaWZyYW1lKSk7Ci0gICAgZ19hc3Nl
cnQoaWZyYW1lRG9jdW1lbnQpOwotICAgIGhlYWQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9o
ZWFkKGlmcmFtZURvY3VtZW50KTsKLSAgICBnX2Fzc2VydChoZWFkKTsKLSAgICBnX29iamVjdF93
ZWFrX3JlZihHX09CSkVDVChoZWFkKSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQp
OwotCi0gICAgd2Via2l0X2RvbV9lbGVtZW50X3NldF9hdHRyaWJ1dGUoaWZyYW1lLCAic3JjIiwg
ImFib3V0OmJsYW5rIiwgTlVMTCk7Ci0KLSAgICB3aGlsZSAoZ19tYWluX2NvbnRleHRfcGVuZGlu
ZyhOVUxMKSkKLSAgICAgICAgZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uKE5VTEwsIEZBTFNFKTsK
LQotICAgIGdfYXNzZXJ0X2NtcHVpbnQoY291bnQsID09LCAxKTsKLQotICAgIHdlYmtpdF93ZWJf
dmlld19sb2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcodmlldyksIEhUTUxfRE9DVU1FTlRfTElO
S1MsIE5VTEwsIE5VTEwsIE5VTEwpOwotCi0gICAgd2hpbGUgKGdfbWFpbl9jb250ZXh0X3BlbmRp
bmcoTlVMTCkpCi0gICAgICAgIGdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbihOVUxMLCBGQUxTRSk7
Ci0KLSAgICBnX2Fzc2VydF9jbXB1aW50KGNvdW50LCA9PSwgMik7Ci0KLSAgICBjb3VudCA9IDA7
Ci0KLSAgICBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50KHZpZXcp
OwotICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsKLSAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVD
VChkb2N1bWVudCksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKLSAgICAvKiBB
c2sgdHdpY2UgZm9yIHRoZSBEb2N1bWVudCAqLwotICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1
bWVudDIgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKLSAgICBnX2Fz
c2VydChkb2N1bWVudDIpOwotICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGRvY3VtZW50
MiksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKLSAgICBoZWFkID0gd2Via2l0
X2RvbV9kb2N1bWVudF9nZXRfaGVhZChkb2N1bWVudCk7Ci0gICAgZ19hc3NlcnQoaGVhZCk7Ci0g
ICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1QoaGVhZCksIChHV2Vha05vdGlmeSl3ZWFrX25v
dGlmeSwgJmNvdW50KTsKLSAgICBib2R5ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfYm9keShk
b2N1bWVudCk7Ci0gICAgZ19hc3NlcnQoYm9keSk7Ci0gICAgZ19vYmplY3Rfd2Vha19yZWYoR19P
QkpFQ1QoYm9keSksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKLSAgICBjb2xs
ZWN0aW9uID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfbGlua3MoZG9jdW1lbnQpOwotICAgIGdf
YXNzZXJ0KGNvbGxlY3Rpb24pOwotICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGNvbGxl
Y3Rpb24pLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7Ci0KLSAgICBndGtfd2lk
Z2V0X2Rlc3Ryb3koZml4dHVyZS0+d2ViVmlldyk7Ci0gICAgZml4dHVyZS0+d2ViVmlldyA9IE5V
TEw7Ci0KLSAgICBnX2Fzc2VydF9jbXB1aW50KGNvdW50LCA9PSwgNCk7Ci0KLSAgICBnX29iamVj
dF91bnJlZihjb2xsZWN0aW9uKTsKLQotICAgIGdfYXNzZXJ0X2NtcHVpbnQoY291bnQsID09LCA1
KTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotewotICAgIGd0a190ZXN0
X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLQotICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2RvbWRvY3Vt
ZW50L3Rlc3RfdGl0bGUiLAotICAgICAgICAgICAgICAgRG9tRG9jdW1lbnRGaXh0dXJlLCBIVE1M
X0RPQ1VNRU5UX1RJVExFLAotICAgICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfc2V0
dXAsCi0gICAgICAgICAgICAgICB0ZXN0X2RvbV9kb2N1bWVudF90aXRsZSwKLSAgICAgICAgICAg
ICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKTsKLQotICAgIGdfdGVzdF9hZGQoIi93
ZWJraXQvZG9tZG9jdW1lbnQvdGVzdF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWUiLAotICAgICAg
ICAgICAgICAgRG9tRG9jdW1lbnRGaXh0dXJlLCBIVE1MX0RPQ1VNRU5UX0VMRU1FTlRTLAotICAg
ICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0
ZXN0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWUsCi0gICAgICAgICAgICAg
ICBkb21fZG9jdW1lbnRfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Vi
a2l0L2RvbWRvY3VtZW50L3Rlc3RfZ2V0X2VsZW1lbnRzX2J5X2NsYXNzX25hbWUiLAotICAgICAg
ICAgICAgICAgRG9tRG9jdW1lbnRGaXh0dXJlLCBIVE1MX0RPQ1VNRU5UX0VMRU1FTlRTX0NMQVNT
LAotICAgICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAg
ICAgICB0ZXN0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfY2xhc3NfbmFtZSwKLSAgICAg
ICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKTsKLQotICAgIGdfdGVzdF9h
ZGQoIi93ZWJraXQvZG9tZG9jdW1lbnQvdGVzdF9nZXRfZWxlbWVudF9ieV9pZCIsCi0gICAgICAg
ICAgICAgICBEb21Eb2N1bWVudEZpeHR1cmUsIEhUTUxfRE9DVU1FTlRfRUxFTUVOVFNfSUQsCi0g
ICAgICAgICAgICAgICBkb21fZG9jdW1lbnRfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAg
IHRlc3RfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50X2J5X2lkLAotICAgICAgICAgICAgICAgZG9t
X2RvY3VtZW50X2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9k
b21kb2N1bWVudC90ZXN0X2dldF9saW5rcyIsCi0gICAgICAgICAgICAgICBEb21Eb2N1bWVudEZp
eHR1cmUsIEhUTUxfRE9DVU1FTlRfTElOS1MsCi0gICAgICAgICAgICAgICBkb21fZG9jdW1lbnRf
Zml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3RfZG9tX2RvY3VtZW50X2dldF9saW5r
cywKLSAgICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKTsKLQotICAg
IGdfdGVzdF9hZGQoIi93ZWJraXQvZG9tZG9jdW1lbnQvdGVzdF90YWJsZV9pbnNlcnRfcm93IiwK
LSAgICAgICAgICAgICAgIERvbURvY3VtZW50Rml4dHVyZSwgSFRNTF9ET0NVTUVOVF9UQUJMRSwK
LSAgICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3NldHVwLAotICAgICAgICAgICAg
ICAgdGVzdF9kb21fZG9jdW1lbnRfaW5zZXJ0X3JvdywKLSAgICAgICAgICAgICAgIGRvbV9kb2N1
bWVudF9maXh0dXJlX3RlYXJkb3duKTsKLQotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvZG9tZG9j
dW1lbnQvdGVzdF9kb2N1bWVudF9ldmFsdWF0ZSIsCi0gICAgICAgICAgICAgICBEb21Eb2N1bWVu
dEZpeHR1cmUsIEhUTUxfRE9DVU1FTlRfRVZBTFVBVEUsCi0gICAgICAgICAgICAgICBkb21fZG9j
dW1lbnRfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3RfZG9tX2RvY3VtZW50X2V2
YWx1YXRlLAotICAgICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfdGVhcmRvd24pOwot
Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9kb21kb2N1bWVudC90ZXN0X2dhcmJhZ2VfY29sbGVj
dGlvbiIsCi0gICAgICAgICAgICAgICBEb21Eb2N1bWVudEZpeHR1cmUsIEhUTUxfRE9DVU1FTlRf
TElOS1MsCi0gICAgICAgICAgICAgICBkb21fZG9jdW1lbnRfZml4dHVyZV9zZXR1cCwKLSAgICAg
ICAgICAgICAgIHRlc3RfZG9tX2RvY3VtZW50X2dhcmJhZ2VfY29sbGVjdGlvbiwKLSAgICAgICAg
ICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKTsKLQotICAgIHJldHVybiBnX3Rl
c3RfcnVuKCk7Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rk
b21kb213aW5kb3cuYyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rkb21kb213aW5kb3cu
YwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRmY2QxOC4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0ZG9tZG9td2luZG93LmMKKysrIC9kZXYvbnVsbApA
QCAtMSwyNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAidGVzdF91dGlscy5oIgotCi0jaW5jbHVkZSA8
Z2xpYi5oPgotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgot
I2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KLQotI2RlZmluZSBIVE1MX0RPQ1VNRU5UICI8aHRt
bD48aGVhZD48dGl0bGU+PC90aXRsZT48L2hlYWQ+PHN0eWxlIHR5cGU9J3RleHQvY3NzJz4jdGVz
dCB7IGZvbnQtc2l6ZTogMTZweDsgfTwvc3R5bGU+PGJvZHk+PHAgaWQ9J3Rlc3QnPnRlc3Q8L3A+
PC9ib2R5PjwvaHRtbD4iCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBHdGtXaWRnZXQqIHdlYlZp
ZXc7Ci0gICAgR3RrV2lkZ2V0KiB3aW5kb3c7Ci0gICAgV2ViS2l0RE9NRE9NV2luZG93KiBkb21X
aW5kb3c7Ci0gICAgR01haW5Mb29wKiBsb29wOwotCi0gICAgZ2Jvb2xlYW4gbG9hZGVkOwotICAg
IGdib29sZWFuIGNsaWNrZWQ7Ci0gICAgZ2NvbnN0cG9pbnRlciBkYXRhOwotfSBEb21Eb212aWV3
Rml4dHVyZTsKLQotc3RhdGljIGdib29sZWFuIGZpbmlzaF9sb2FkaW5nKERvbURvbXZpZXdGaXh0
dXJlKiBmaXh0dXJlKQotewotICAgIGlmIChnX21haW5fbG9vcF9pc19ydW5uaW5nKGZpeHR1cmUt
Pmxvb3ApKQotICAgICAgICBnX21haW5fbG9vcF9xdWl0KGZpeHR1cmUtPmxvb3ApOwotCi0gICAg
cmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCBkb21fZG9tdmlld19maXh0dXJlX3NldHVw
KERvbURvbXZpZXdGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAg
Zml4dHVyZS0+bG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLSAgICBmaXh0dXJl
LT53aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKLSAgICBmaXh0
dXJlLT53ZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygpOwotICAgIGZpeHR1cmUtPmRhdGEg
PSBkYXRhOwotCi0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihmaXh0dXJlLT53
aW5kb3cpLCBHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpKTsKLX0KLQotc3RhdGljIHZvaWQg
ZG9tX2RvbXZpZXdfZml4dHVyZV90ZWFyZG93bihEb21Eb212aWV3Rml4dHVyZSogZml4dHVyZSwg
Z2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGd0a193aWRnZXRfZGVzdHJveShmaXh0dXJlLT53
aW5kb3cpOwotICAgIGdfbWFpbl9sb29wX3VucmVmKGZpeHR1cmUtPmxvb3ApOwotfQotCi1zdGF0
aWMgdm9pZCBkb21fZG9tX3dpbmRvd19maXh0dXJlX3NldHVwKERvbURvbXZpZXdGaXh0dXJlKiBm
aXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZml4dHVyZS0+bG9vcCA9IGdfbWFp
bl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLSAgICBmaXh0dXJlLT53ZWJWaWV3ID0gd2Via2l0X3dl
Yl92aWV3X25ldygpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKGZpeHR1cmUtPndlYlZpZXcpOwot
Ci0gICAgaWYgKGRhdGEgIT0gTlVMTCkKLSAgICAgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3Ry
aW5nKFdFQktJVF9XRUJfVklFVyAoZml4dHVyZS0+d2ViVmlldyksIChjb25zdCBjaGFyKikgZGF0
YSwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0KLSAgICBnX2lkbGVfYWRkKChHU291cmNlRnVuYylmaW5p
c2hfbG9hZGluZywgZml4dHVyZSk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1cmUtPmxvb3Ap
OwotfQotCi1zdGF0aWMgdm9pZCBkb21fZG9tX3dpbmRvd19maXh0dXJlX3RlYXJkb3duKERvbURv
bXZpZXdGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgaWYgKGZp
eHR1cmUtPndlYlZpZXcpCi0gICAgICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPndlYlZpZXcp
OwotICAgIGdfbWFpbl9sb29wX3VucmVmKGZpeHR1cmUtPmxvb3ApOwotfQotCi1zdGF0aWMgZ2Jv
b2xlYW4gbG9hZGVkQ2FsbGJhY2soV2ViS2l0RE9NRE9NV2luZG93KiB2aWV3LCBXZWJLaXRET01F
dmVudCogZXZlbnQsIERvbURvbXZpZXdGaXh0dXJlKiBmaXh0dXJlKQotewotICAgIGdfYXNzZXJ0
KGZpeHR1cmUtPmxvYWRlZCA9PSBGQUxTRSk7Ci0gICAgZml4dHVyZS0+bG9hZGVkID0gVFJVRTsK
LQotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGdib29sZWFuIGNsaWNrZWRDYWxsYmFj
ayhXZWJLaXRET01ET01XaW5kb3cqIHZpZXcsIFdlYktpdERPTUV2ZW50KiBldmVudCwgRG9tRG9t
dmlld0ZpeHR1cmUqIGZpeHR1cmUpCi17Ci0gICAgV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdl
dDsKLSAgICBndXNob3J0IHBoYXNlOwotCi0gICAgZ19hc3NlcnQoZXZlbnQpOwotICAgIGdfYXNz
ZXJ0KFdFQktJVF9ET01fSVNfRVZFTlQoZXZlbnQpKTsKLQotICAgIC8vIFdlIHNob3VsZCBjYXRj
aCB0aGlzIGluIHRoZSBidWJibGluZyB1cCBwaGFzZSwgc2luY2Ugd2UgYXJlIGNvbm5lY3Rpbmcg
dG8gdGhlIHRvcGxldmVsIG9iamVjdAotICAgIHBoYXNlID0gd2Via2l0X2RvbV9ldmVudF9nZXRf
ZXZlbnRfcGhhc2UoZXZlbnQpOwotICAgIGdfYXNzZXJ0X2NtcGludChwaGFzZSwgPT0sIDMpOwot
Ci0gICAgdGFyZ2V0ID0gd2Via2l0X2RvbV9ldmVudF9nZXRfY3VycmVudF90YXJnZXQoZXZlbnQp
OwotICAgIGdfYXNzZXJ0KHRhcmdldCA9PSBXRUJLSVRfRE9NX0VWRU5UX1RBUkdFVCh2aWV3KSk7
Ci0KLSAgICBnX2Fzc2VydChmaXh0dXJlLT5jbGlja2VkID09IEZBTFNFKTsKLSAgICBmaXh0dXJl
LT5jbGlja2VkID0gVFJVRTsKLQotICAgIGZpbmlzaF9sb2FkaW5nKGZpeHR1cmUpOwotCi0gICAg
cmV0dXJuIEZBTFNFOwotfQotCi1nYm9vbGVhbiBtYXBfZXZlbnRfY2IoR3RrV2lkZ2V0ICp3aWRn
ZXQsIEdka0V2ZW50KiBldmVudCwgRG9tRG9tdmlld0ZpeHR1cmUqIGZpeHR1cmUpCi17Ci0gICAg
d2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklFVyAoZml4dHVyZS0+d2Vi
VmlldyksIChjb25zdCBjaGFyKilmaXh0dXJlLT5kYXRhLCBOVUxMLCBOVUxMLCBOVUxMKTsKLQot
ICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQgbG9hZF9ldmVudF9jYWxsYmFjayhX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHUGFyYW1TcGVjKiBzcGVjLCBEb21Eb212aWV3Rml4dHVy
ZSogZml4dHVyZSkKLXsKLSAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJf
dmlld19nZXRfbG9hZF9zdGF0dXMod2ViVmlldyk7Ci0gICAgaWYgKHN0YXR1cyA9PSBXRUJLSVRf
TE9BRF9GSU5JU0hFRCkgewotICAgICAgICB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9hZGRfZXZl
bnRfbGlzdGVuZXIoV0VCS0lUX0RPTV9FVkVOVF9UQVJHRVQoZml4dHVyZS0+ZG9tV2luZG93KSwg
ImNsaWNrIiwgR19DQUxMQkFDSyhjbGlja2VkQ2FsbGJhY2spLCBmYWxzZSwgZml4dHVyZSk7Ci0K
LSAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+Y2xpY2tlZCA9PSBGQUxTRSk7Ci0gICAgICAgIGd0
a190ZXN0X3dpZGdldF9jbGljayhHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpLCAxLCAwKTsK
LSAgICB9Ci0KLX0KLQotc3RhdGljIHZvaWQgdGVzdF9kb21fZG9tdmlld19zaWduYWxzKERvbURv
bXZpZXdGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19hc3Nl
cnQoZml4dHVyZSk7Ci0gICAgV2ViS2l0V2ViVmlldyogdmlldyA9IChXZWJLaXRXZWJWaWV3Kilm
aXh0dXJlLT53ZWJWaWV3OwotICAgIGdfYXNzZXJ0KHZpZXcpOwotICAgIFdlYktpdERPTURvY3Vt
ZW50KiBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50KHZpZXcpOwot
ICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsKLSAgICBXZWJLaXRET01ET01XaW5kb3cqIGRvbVdpbmRv
dyA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2RlZmF1bHRfdmlldyhkb2N1bWVudCk7Ci0gICAg
Z19hc3NlcnQoZG9tV2luZG93KTsKLQotICAgIGZpeHR1cmUtPmRvbVdpbmRvdyA9IGRvbVdpbmRv
dzsKLQotICAgIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2FkZF9ldmVudF9saXN0ZW5lcihXRUJL
SVRfRE9NX0VWRU5UX1RBUkdFVChmaXh0dXJlLT5kb21XaW5kb3cpLCAibG9hZCIsIEdfQ0FMTEJB
Q0sobG9hZGVkQ2FsbGJhY2spLCBmYWxzZSwgZml4dHVyZSk7Ci0gICAgZ19zaWduYWxfY29ubmVj
dChmaXh0dXJlLT53aW5kb3csICJtYXAtZXZlbnQiLCBHX0NBTExCQUNLKG1hcF9ldmVudF9jYiks
IGZpeHR1cmUpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2ViVmlldywgIm5vdGlm
eTo6bG9hZC1zdGF0dXMiLCBHX0NBTExCQUNLKGxvYWRfZXZlbnRfY2FsbGJhY2spLCBmaXh0dXJl
KTsKLQotICAgIGd0a193aWRnZXRfc2hvd19hbGwoZml4dHVyZS0+d2luZG93KTsKLSAgICBndGtf
d2luZG93X3ByZXNlbnQoR1RLX1dJTkRPVyhmaXh0dXJlLT53aW5kb3cpKTsKLQotICAgIGdfbWFp
bl9sb29wX3J1bihmaXh0dXJlLT5sb29wKTsKLQotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmxvYWRl
ZCk7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+Y2xpY2tlZCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVh
bgotY2xpY2tlZF9jYihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVu
dCogZXZlbnQsIERvbURvbXZpZXdGaXh0dXJlKiBmaXh0dXJlKQotewotICAgIGdfYXNzZXJ0KGZp
eHR1cmUtPmNsaWNrZWQgPT0gRkFMU0UpOwotICAgIGZpeHR1cmUtPmNsaWNrZWQgPSBUUlVFOwot
ICAgIGZpbmlzaF9sb2FkaW5nKGZpeHR1cmUpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3Rh
dGljIHZvaWQgbG9hZF9zdGF0dXNfY2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgR1Bh
cmFtU3BlYyogc3BlYywgRG9tRG9tdmlld0ZpeHR1cmUqIGZpeHR1cmUpCi17Ci0gICAgV2ViS2l0
TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYlZp
ZXcpOwotICAgIGlmIChzdGF0dXMgPT0gV0VCS0lUX0xPQURfRklOSVNIRUQpIHsKLSAgICAgICAg
V2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50OwotICAgICAgICBXZWJLaXRET01ET01XaW5kb3cq
IGRvbVdpbmRvdzsKLSAgICAgICAgV2ViS2l0RE9NRWxlbWVudCogZWxlbWVudDsKLSAgICAgICAg
V2ViS2l0RE9NRXZlbnQqIGV2ZW50OwotICAgICAgICBnbG9uZyBjbGllbnRYLCBjbGllbnRZOwot
Ci0gICAgICAgIGRvY3VtZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQoV0VC
S0lUX1dFQl9WSUVXKGZpeHR1cmUtPndlYlZpZXcpKTsKLSAgICAgICAgZ19hc3NlcnQoZG9jdW1l
bnQpOwotICAgICAgICBkb21XaW5kb3cgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9kZWZhdWx0
X3ZpZXcoZG9jdW1lbnQpOwotICAgICAgICBnX2Fzc2VydChkb21XaW5kb3cpOwotICAgICAgICBm
aXh0dXJlLT5kb21XaW5kb3cgPSBkb21XaW5kb3c7Ci0KLSAgICAgICAgZWxlbWVudCA9IHdlYmtp
dF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRfYnlfaWQoZG9jdW1lbnQsICJ0ZXN0Iik7Ci0gICAg
ICAgIGdfYXNzZXJ0KGVsZW1lbnQpOwotICAgICAgICBldmVudCA9IHdlYmtpdF9kb21fZG9jdW1l
bnRfY3JlYXRlX2V2ZW50KGRvY3VtZW50LCAiTW91c2VFdmVudCIsIE5VTEwpOwotICAgICAgICBn
X2Fzc2VydChldmVudCk7Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfRVZFTlQoZXZl
bnQpKTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19NT1VTRV9FVkVOVChldmVudCkp
OwotICAgICAgICBjbGllbnRYID0gd2Via2l0X2RvbV9lbGVtZW50X2dldF9jbGllbnRfbGVmdChl
bGVtZW50KTsKLSAgICAgICAgY2xpZW50WSA9IHdlYmtpdF9kb21fZWxlbWVudF9nZXRfY2xpZW50
X3RvcChlbGVtZW50KTsKLSAgICAgICAgd2Via2l0X2RvbV9tb3VzZV9ldmVudF9pbml0X21vdXNl
X2V2ZW50KFdFQktJVF9ET01fTU9VU0VfRVZFTlQoZXZlbnQpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNsaWNrIiwgVFJVRSwgVFJVRSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeHR1cmUtPmRvbVdp
bmRvdywgMCwgMCwgMCwgY2xpZW50WCwgY2xpZW50WSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLCBGQUxTRSwgRkFMU0UsIEZBTFNFLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgV0VCS0lUX0RP
TV9FVkVOVF9UQVJHRVQoZWxlbWVudCkpOwotICAgICAgICB3ZWJraXRfZG9tX2V2ZW50X3Rhcmdl
dF9hZGRfZXZlbnRfbGlzdGVuZXIoV0VCS0lUX0RPTV9FVkVOVF9UQVJHRVQoZWxlbWVudCksICJj
bGljayIsIEdfQ0FMTEJBQ0soY2xpY2tlZF9jYiksIGZhbHNlLCBmaXh0dXJlKTsKLSAgICAgICAg
Z19hc3NlcnQoZml4dHVyZS0+Y2xpY2tlZCA9PSBGQUxTRSk7Ci0gICAgICAgIHdlYmtpdF9kb21f
ZXZlbnRfdGFyZ2V0X2Rpc3BhdGNoX2V2ZW50KFdFQktJVF9ET01fRVZFTlRfVEFSR0VUKGVsZW1l
bnQpLCBldmVudCwgTlVMTCk7Ci0gICAgfQotCi19Ci0KLXN0YXRpYyB2b2lkIHRlc3RfZG9tX2Rv
bXZpZXdfZGlzcGF0Y2hfZXZlbnQoRG9tRG9tdmlld0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBv
aW50ZXIgZGF0YSkKLXsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndpbmRvdywgIm1h
cC1ldmVudCIsIEdfQ0FMTEJBQ0sobWFwX2V2ZW50X2NiKSwgZml4dHVyZSk7Ci0gICAgZ19zaWdu
YWxfY29ubmVjdChmaXh0dXJlLT53ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FM
TEJBQ0sobG9hZF9zdGF0dXNfY2FsbGJhY2spLCBmaXh0dXJlKTsKLQotICAgIGd0a193aWRnZXRf
c2hvd19hbGwoZml4dHVyZS0+d2luZG93KTsKLSAgICBndGtfd2luZG93X3ByZXNlbnQoR1RLX1dJ
TkRPVyhmaXh0dXJlLT53aW5kb3cpKTsKLQotICAgIGdfbWFpbl9sb29wX3J1biAoZml4dHVyZS0+
bG9vcCk7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+Y2xpY2tlZCk7Ci19Ci0KLXN0YXRpYyB2b2lk
IHRlc3RfZG9tX2RvbV93aW5kb3dfZ2V0X2NvbXB1dGVkX3N0eWxlKERvbURvbXZpZXdGaXh0dXJl
KiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgV2ViS2l0RE9NRG9jdW1lbnQq
IGRvY3VtZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQoV0VCS0lUX1dFQl9W
SUVXKGZpeHR1cmUtPndlYlZpZXcpKTsKLSAgICBnX2Fzc2VydChkb2N1bWVudCk7Ci0gICAgV2Vi
S2l0RE9NRE9NV2luZG93KiBkb21XaW5kb3cgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9kZWZh
dWx0X3ZpZXcoZG9jdW1lbnQpOwotICAgIGdfYXNzZXJ0KGRvbVdpbmRvdyk7Ci0KLSAgICBXZWJL
aXRET01FbGVtZW50KiAgZWxlbWVudCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRf
YnlfaWQoZG9jdW1lbnQsICJ0ZXN0Iik7Ci0gICAgZ19hc3NlcnQoZWxlbWVudCk7Ci0gICAgZ19h
c3NlcnQoV0VCS0lUX0RPTV9JU19FTEVNRU5UKGVsZW1lbnQpKTsKLSAgICBXZWJLaXRET01DU1NT
dHlsZURlY2xhcmF0aW9uKiBjc3NTdHlsZSA9IHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfY29t
cHV0ZWRfc3R5bGUoZG9tV2luZG93LCBlbGVtZW50LCBOVUxMKTsKLSAgICBnY2hhciogZm9udFNp
emUgPSB3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlvbl9nZXRfcHJvcGVydHlfdmFsdWUo
Y3NzU3R5bGUsICJmb250LXNpemUiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoZm9udFNpemUsID09
LCAiMTZweCIpOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCi17Ci0gICAg
Z3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOwotCi0gICAgZ190ZXN0X2J1Z19iYXNl
KCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKLQotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQv
ZG9tZG9tdmlldy9zaWduYWxzIiwKLSAgICAgICAgICAgICAgIERvbURvbXZpZXdGaXh0dXJlLCBI
VE1MX0RPQ1VNRU5ULAotICAgICAgICAgICAgICAgZG9tX2RvbXZpZXdfZml4dHVyZV9zZXR1cCwK
LSAgICAgICAgICAgICAgIHRlc3RfZG9tX2RvbXZpZXdfc2lnbmFscywKLSAgICAgICAgICAgICAg
IGRvbV9kb212aWV3X2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtp
dC9kb21kb212aWV3L2Rpc3BhdGNoX2V2ZW50IiwKLSAgICAgICAgICAgICAgIERvbURvbXZpZXdG
aXh0dXJlLCBIVE1MX0RPQ1VNRU5ULAotICAgICAgICAgICAgICAgZG9tX2RvbXZpZXdfZml4dHVy
ZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3RfZG9tX2RvbXZpZXdfZGlzcGF0Y2hfZXZlbnQs
Ci0gICAgICAgICAgICAgICBkb21fZG9tdmlld19maXh0dXJlX3RlYXJkb3duKTsKLQotICAgIGdf
dGVzdF9hZGQoIi93ZWJraXQvZG9tZG9td2luZG93L2dldF9jb21wdXRlZF9zdHlsZSIsCi0gICAg
ICAgICAgICAgICBEb21Eb212aWV3Rml4dHVyZSwgSFRNTF9ET0NVTUVOVCwKLSAgICAgICAgICAg
ICAgIGRvbV9kb21fd2luZG93X2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X2Rv
bV9kb21fd2luZG93X2dldF9jb21wdXRlZF9zdHlsZSwKLSAgICAgICAgICAgICAgIGRvbV9kb21f
d2luZG93X2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsKLX0K
LQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvbW5vZGUuYyBiL1Nv
dXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rkb21ub2RlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGVkNGJjYmQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMv
dGVzdGRvbW5vZGUuYworKysgL2Rldi9udWxsCkBAIC0xLDIxOSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJ0ZXN0X3V0aWxzLmgiCi0KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z2xpYi9nc3Rk
aW8uaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgot
Ci0jZGVmaW5lIEhUTUxfRE9DVU1FTlRfSElFUkFSQ0hZX05BVklHQVRJT04gIjxodG1sPjxoZWFk
Pjx0aXRsZT5UaGlzIGlzIHRoZSB0aXRsZTwvdGl0bGU+PC9oZWFkPjxib2R5PjxwPjE8L3A+PHA+
MjwvcD48cD4zPC9wPjwvYm9keT48L2h0bWw+IgotI2RlZmluZSBIVE1MX0RPQ1VNRU5UX05PREVf
SU5TRVJUSU9OICI8aHRtbD48Ym9keT48L2JvZHk+PC9odG1sPiIKLQotdHlwZWRlZiBzdHJ1Y3Qg
ewotICAgIEd0a1dpZGdldCogd2ViVmlldzsKLSAgICBHTWFpbkxvb3AqIGxvb3A7Ci19IERvbU5v
ZGVGaXh0dXJlOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZmluaXNoX2xvYWRpbmcoRG9tTm9kZUZpeHR1
cmUqIGZpeHR1cmUpCi17Ci0gICAgaWYgKGdfbWFpbl9sb29wX2lzX3J1bm5pbmcoZml4dHVyZS0+
bG9vcCkpCi0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQoZml4dHVyZS0+bG9vcCk7Ci0KLSAgICBy
ZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lkIGRvbV9ub2RlX2ZpeHR1cmVfc2V0dXAoRG9t
Tm9kZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBmaXh0dXJl
LT5sb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotICAgIGZpeHR1cmUtPndlYlZp
ZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7Ci0gICAgZ19vYmplY3RfcmVmX3NpbmsoZml4dHVy
ZS0+d2ViVmlldyk7Ci0KLSAgICBpZiAoZGF0YSAhPSBOVUxMKQotICAgICAgICB3ZWJraXRfd2Vi
X3ZpZXdfbG9hZF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVXKGZpeHR1cmUtPndlYlZpZXcpLCAoY29u
c3QgY2hhciopZGF0YSwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0KLSAgICBnX2lkbGVfYWRkKChHU291
cmNlRnVuYylmaW5pc2hfbG9hZGluZywgZml4dHVyZSk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGZp
eHR1cmUtPmxvb3ApOwotfQotCi1zdGF0aWMgdm9pZCBkb21fbm9kZV9maXh0dXJlX3RlYXJkb3du
KERvbU5vZGVGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19v
YmplY3RfdW5yZWYoZml4dHVyZS0+d2ViVmlldyk7Ci0gICAgZ19tYWluX2xvb3BfdW5yZWYoZml4
dHVyZS0+bG9vcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RfZG9tX25vZGVfaGllcmFyY2h5X25h
dmlnYXRpb24oRG9tTm9kZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsK
LSAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQ7Ci0gICAgV2ViS2l0RE9NSFRNTEhlYWRF
bGVtZW50KiBoZWFkOwotICAgIFdlYktpdERPTUhUTUxCb2R5RWxlbWVudCogYm9keTsKLSAgICBX
ZWJLaXRET01Ob2RlTGlzdCogbGlzdDsKLSAgICBXZWJLaXRET01Ob2RlKiBwdHI7Ci0gICAgZ3Vs
b25nIGksIGxlbmd0aDsKLQotICAgIGRvY3VtZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9kb21f
ZG9jdW1lbnQoV0VCS0lUX1dFQl9WSUVXKGZpeHR1cmUtPndlYlZpZXcpKTsKLSAgICBnX2Fzc2Vy
dChkb2N1bWVudCk7Ci0gICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChkb2N1bWVu
dCkpOwotICAgIGhlYWQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9oZWFkKGRvY3VtZW50KTsK
LSAgICBnX2Fzc2VydChoZWFkKTsKLSAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfSEVB
RF9FTEVNRU5UKGhlYWQpKTsKLQotICAgIC8qIFRpdGxlLCBoZWFkJ3MgY2hpbGQgKi8KLSAgICBn
X2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaGFzX2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERSho
ZWFkKSkpOwotICAgIGxpc3QgPSB3ZWJraXRfZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVzKFdFQktJ
VF9ET01fTk9ERShoZWFkKSk7Ci0gICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9kb21fbm9kZV9s
aXN0X2dldF9sZW5ndGgobGlzdCksID09LCAxKTsKLSAgICBwdHIgPSB3ZWJraXRfZG9tX25vZGVf
bGlzdF9pdGVtKGxpc3QsIDApOwotICAgIGdfYXNzZXJ0KHB0cik7Ci0gICAgZ19hc3NlcnQoV0VC
S0lUX0RPTV9JU19IVE1MX1RJVExFX0VMRU1FTlQocHRyKSk7Ci0gICAgZ19vYmplY3RfdW5yZWYo
bGlzdCk7Ci0KLSAgICAvKiBCb2R5LCBIZWFkIHNpYmxpbmcgKi8KLSAgICBwdHIgPSB3ZWJraXRf
ZG9tX25vZGVfZ2V0X25leHRfc2libGluZyhXRUJLSVRfRE9NX05PREUoaGVhZCkpOwotICAgIGdf
YXNzZXJ0KHB0cik7Ci0gICAgYm9keSA9IFdFQktJVF9ET01fSFRNTF9CT0RZX0VMRU1FTlQocHRy
KTsKLSAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfQk9EWV9FTEVNRU5UKGJvZHkpKTsK
LQotICAgIC8qIFRoZXJlIGlzIG5vIHRoaXJkIHNpYmxpbmcgKi8KLSAgICBwdHIgPSB3ZWJraXRf
ZG9tX25vZGVfZ2V0X25leHRfc2libGluZyhwdHIpOwotICAgIGdfYXNzZXJ0KHB0ciA9PSBOVUxM
KTsKLQotICAgIC8qIEJvZHkncyBwcmV2aW91cyBzaWJsaW5nIGlzIEhlYWQgKi8KLSAgICBwdHIg
PSB3ZWJraXRfZG9tX25vZGVfZ2V0X3ByZXZpb3VzX3NpYmxpbmcoV0VCS0lUX0RPTV9OT0RFKGJv
ZHkpKTsKLSAgICBnX2Fzc2VydChwdHIpOwotICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRN
TF9IRUFEX0VMRU1FTlQocHRyKSk7Ci0KLSAgICAvKiBCb2R5IGhhcyAzIGNoaWxkcmVuICovCi0g
ICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2hhc19jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05P
REUoYm9keSkpKTsKLSAgICBsaXN0ID0gd2Via2l0X2RvbV9ub2RlX2dldF9jaGlsZF9ub2RlcyhX
RUJLSVRfRE9NX05PREUoYm9keSkpOwotICAgIGxlbmd0aCA9IHdlYmtpdF9kb21fbm9kZV9saXN0
X2dldF9sZW5ndGgobGlzdCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGxlbmd0aCwgPT0sIDMpOwot
Ci0gICAgLyogVGhlIHRocmVlIG9mIHRoZW0gYXJlIFAgdGFncyAqLwotICAgIGZvciAoaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBwdHIgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9p
dGVtKGxpc3QsIGkpOwotICAgICAgICBnX2Fzc2VydChwdHIpOwotICAgICAgICBnX2Fzc2VydChX
RUJLSVRfRE9NX0lTX0hUTUxfUEFSQUdSQVBIX0VMRU1FTlQocHRyKSk7Ci0gICAgfQotCi0gICAg
LyogR28gYmFja3dhcmRzICovCi0gICAgZm9yIChpID0gMDsgcHRyOyBwdHIgPSB3ZWJraXRfZG9t
X25vZGVfZ2V0X3ByZXZpb3VzX3NpYmxpbmcocHRyKSwgaSsrKQotICAgICAgICAvKiBOb3RoaW5n
ICovOwotCi0gICAgZ19hc3NlcnRfY21waW50KGksID09LCAzKTsKLSAgICBnX29iamVjdF91bnJl
ZihsaXN0KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF9kb21fbm9kZV9pbnNlcnRpb24oRG9tTm9k
ZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBXZWJLaXRET01E
b2N1bWVudCogZG9jdW1lbnQ7Ci0gICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQqIGJvZHk7Ci0gICAg
V2ViS2l0RE9NRWxlbWVudCogcCwgKmRpdjsKLSAgICBXZWJLaXRET01Ob2RlTGlzdCogbGlzdDsK
LSAgICBXZWJLaXRET01Ob2RlKiBub2RlOwotCi0gICAgZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X2RvbV9kb2N1bWVudChXRUJLSVRfV0VCX1ZJRVcoZml4dHVyZS0+d2ViVmlldykpOwot
ICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsKLSAgICBib2R5ID0gd2Via2l0X2RvbV9kb2N1bWVudF9n
ZXRfYm9keShkb2N1bWVudCk7Ci0gICAgZ19hc3NlcnQoYm9keSk7Ci0gICAgZ19hc3NlcnQoV0VC
S0lUX0RPTV9JU19IVE1MX0VMRU1FTlQoYm9keSkpOwotCi0gICAgLyogQm9keSBzaG91bGRuJ3Qg
aGF2ZSBhbnkgY2hpbGRyZW4gYXQgdGhpcyBwb2ludCAqLwotICAgIGdfYXNzZXJ0KHdlYmtpdF9k
b21fbm9kZV9oYXNfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKSA9PSBGQUxTRSk7
Ci0KLSAgICAvKiBJbnNlcnQgb25lIFAgZWxlbWVudCAqLwotICAgIHAgPSB3ZWJraXRfZG9tX2Rv
Y3VtZW50X2NyZWF0ZV9lbGVtZW50KGRvY3VtZW50LCAiUCIsIE5VTEwpOwotICAgIHdlYmtpdF9k
b21fbm9kZV9hcHBlbmRfY2hpbGQoV0VCS0lUX0RPTV9OT0RFKGJvZHkpLCBXRUJLSVRfRE9NX05P
REUocCksIE5VTEwpOwotCi0gICAgLyogTm93IGl0IHNob3VsZCBoYXZlIG9uZSwgdGhlIHNhbWUg
dGhhdCB3ZSBpbnNlcnRlZCAqLwotICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9oYXNfY2hp
bGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKSk7Ci0gICAgbGlzdCA9IHdlYmtpdF9kb21f
bm9kZV9nZXRfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQod2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChsaXN0KSwgPT0sIDEpOwot
ICAgIG5vZGUgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtKGxpc3QsIDApOwotICAgIGdfYXNz
ZXJ0KG5vZGUpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9pc19zYW1lX25vZGUoV0VC
S0lUX0RPTV9OT0RFKHApLCBub2RlKSk7Ci0gICAgZ19vYmplY3RfdW5yZWYobGlzdCk7Ci0KLSAg
ICAvKiBSZXBsYWNlIHRoZSBQIHRhZyB3aXRoIGEgRElWIHRhZyAqLwotICAgIGRpdiA9IHdlYmtp
dF9kb21fZG9jdW1lbnRfY3JlYXRlX2VsZW1lbnQoZG9jdW1lbnQsICJESVYiLCBOVUxMKTsKLSAg
ICB3ZWJraXRfZG9tX25vZGVfcmVwbGFjZV9jaGlsZChXRUJLSVRfRE9NX05PREUoYm9keSksIFdF
QktJVF9ET01fTk9ERShkaXYpLCBXRUJLSVRfRE9NX05PREUocCksIE5VTEwpOwotICAgIGdfYXNz
ZXJ0KHdlYmtpdF9kb21fbm9kZV9oYXNfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkp
KSk7Ci0gICAgbGlzdCA9IHdlYmtpdF9kb21fbm9kZV9nZXRfY2hpbGRfbm9kZXMoV0VCS0lUX0RP
TV9OT0RFKGJvZHkpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X2RvbV9ub2RlX2xpc3Rf
Z2V0X2xlbmd0aChsaXN0KSwgPT0sIDEpOwotICAgIG5vZGUgPSB3ZWJraXRfZG9tX25vZGVfbGlz
dF9pdGVtKGxpc3QsIDApOwotICAgIGdfYXNzZXJ0KG5vZGUpOwotICAgIGdfYXNzZXJ0KHdlYmtp
dF9kb21fbm9kZV9pc19zYW1lX25vZGUoV0VCS0lUX0RPTV9OT0RFKGRpdiksIG5vZGUpKTsKLSAg
ICBnX29iamVjdF91bnJlZihsaXN0KTsKLQotICAgIC8qIE5vdyByZW1vdmUgdGhlIHRhZyAqLwot
ICAgIHdlYmtpdF9kb21fbm9kZV9yZW1vdmVfY2hpbGQoV0VCS0lUX0RPTV9OT0RFKGJvZHkpLCBu
b2RlLCBOVUxMKTsKLSAgICBsaXN0ID0gd2Via2l0X2RvbV9ub2RlX2dldF9jaGlsZF9ub2RlcyhX
RUJLSVRfRE9NX05PREUoYm9keSkpOwotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfZG9tX25v
ZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QpLCA9PSwgMCk7Ci0gICAgZ19vYmplY3RfdW5yZWYobGlz
dCk7Ci0KLSAgICAvKiBUZXN0IGluc2VydF9iZWZvcmUgKi8KLQotICAgIC8qIElmIHJlZkNoaWxk
IGlzIG51bGwsIGluc2VydCBuZXdDaGlsZCBhcyBsYXN0IGVsZW1lbnQgb2YgcGFyZW50ICovCi0g
ICAgZGl2ID0gd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZWxlbWVudChkb2N1bWVudCwgIkRJ
ViIsIE5VTEwpOwotICAgIHdlYmtpdF9kb21fbm9kZV9pbnNlcnRfYmVmb3JlKFdFQktJVF9ET01f
Tk9ERShib2R5KSwgV0VCS0lUX0RPTV9OT0RFKGRpdiksIE5VTEwsIE5VTEwpOwotICAgIGdfYXNz
ZXJ0KHdlYmtpdF9kb21fbm9kZV9oYXNfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkp
KSk7Ci0gICAgbGlzdCA9IHdlYmtpdF9kb21fbm9kZV9nZXRfY2hpbGRfbm9kZXMoV0VCS0lUX0RP
TV9OT0RFKGJvZHkpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X2RvbV9ub2RlX2xpc3Rf
Z2V0X2xlbmd0aChsaXN0KSwgPT0sIDEpOwotICAgIG5vZGUgPSB3ZWJraXRfZG9tX25vZGVfbGlz
dF9pdGVtKGxpc3QsIDApOwotICAgIGdfYXNzZXJ0KG5vZGUpOwotICAgIGdfYXNzZXJ0KHdlYmtp
dF9kb21fbm9kZV9pc19zYW1lX25vZGUoV0VCS0lUX0RPTV9OT0RFKGRpdiksIG5vZGUpKTsKLSAg
ICBnX29iamVjdF91bnJlZihsaXN0KTsKLQotICAgIC8qIE5vdyBpbnNlcnQgYSAncCcgYmVmb3Jl
ICdkaXYnICovCi0gICAgcCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2VsZW1lbnQoZG9j
dW1lbnQsICJQIiwgTlVMTCk7Ci0gICAgd2Via2l0X2RvbV9ub2RlX2luc2VydF9iZWZvcmUoV0VC
S0lUX0RPTV9OT0RFKGJvZHkpLCBXRUJLSVRfRE9NX05PREUocCksIFdFQktJVF9ET01fTk9ERShk
aXYpLCBOVUxMKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaGFzX2NoaWxkX25vZGVz
KFdFQktJVF9ET01fTk9ERShib2R5KSkpOwotICAgIGxpc3QgPSB3ZWJraXRfZG9tX25vZGVfZ2V0
X2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSk7Ci0gICAgZ19hc3NlcnRfY21waW50
KHdlYmtpdF9kb21fbm9kZV9saXN0X2dldF9sZW5ndGgobGlzdCksID09LCAyKTsKLSAgICBub2Rl
ID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0LCAwKTsKLSAgICBnX2Fzc2VydChub2Rl
KTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaXNfc2FtZV9ub2RlKFdFQktJVF9ET01f
Tk9ERShwKSwgbm9kZSkpOwotICAgIG5vZGUgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtKGxp
c3QsIDEpOwotICAgIGdfYXNzZXJ0KG5vZGUpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9k
ZV9pc19zYW1lX25vZGUoV0VCS0lUX0RPTV9OT0RFKGRpdiksIG5vZGUpKTsKLSAgICBnX29iamVj
dF91bnJlZihsaXN0KTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotewot
ICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLQotICAgIGdfdGVzdF9idWdf
YmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Vi
a2l0L2RvbW5vZGUvdGVzdF9oaWVyYXJjaHlfbmF2aWdhdGlvbiIsCi0gICAgICAgICAgICAgICBE
b21Ob2RlRml4dHVyZSwgSFRNTF9ET0NVTUVOVF9ISUVSQVJDSFlfTkFWSUdBVElPTiwKLSAgICAg
ICAgICAgICAgIGRvbV9ub2RlX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X2Rv
bV9ub2RlX2hpZXJhcmNoeV9uYXZpZ2F0aW9uLAotICAgICAgICAgICAgICAgZG9tX25vZGVfZml4
dHVyZV90ZWFyZG93bik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2RvbW5vZGUvdGVzdF9p
bnNlcnRpb24iLAotICAgICAgICAgICAgICAgRG9tTm9kZUZpeHR1cmUsIEhUTUxfRE9DVU1FTlRf
Tk9ERV9JTlNFUlRJT04sCi0gICAgICAgICAgICAgICBkb21fbm9kZV9maXh0dXJlX3NldHVwLAot
ICAgICAgICAgICAgICAgdGVzdF9kb21fbm9kZV9pbnNlcnRpb24sCi0gICAgICAgICAgICAgICBk
b21fbm9kZV9maXh0dXJlX3RlYXJkb3duKTsKLQotICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7Ci19
Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rkb3dubG9hZC5jIGIv
U291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvd25sb2FkLmMKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGY4ZThkZWQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvdGVz
dHMvdGVzdGRvd25sb2FkLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMjIgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOSBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkB0d290b2FzdHMu
ZGU+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDx1
bmlzdGQuaD4KLSNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgotI2luY2x1ZGUgPHdlYmtpdC93ZWJr
aXQuaD4KLQotR01haW5Mb29wKiBsb29wOwotY2hhciogdGVtcG9yYXJ5RmlsZW5hbWUgPSBOVUxM
OwotV2ViS2l0RG93bmxvYWQqIHRoZURvd25sb2FkID0gTlVMTDsKLQotc3RhdGljIHZvaWQKLXRl
c3Rfd2Via2l0X2Rvd25sb2FkX2NyZWF0ZSh2b2lkKQotewotICAgIFdlYktpdE5ldHdvcmtSZXF1
ZXN0KiByZXF1ZXN0OwotICAgIFdlYktpdERvd25sb2FkKiBkb3dubG9hZDsKLSAgICBjb25zdCBn
Y2hhciogdXJpID0gImh0dHA6Ly9leGFtcGxlLmNvbSI7Ci0gICAgZ2NoYXIqIHRtcERpcjsKLQot
ICAgIHJlcXVlc3QgPSB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X25ldyh1cmkpOwotICAgIGRvd25s
b2FkID0gd2Via2l0X2Rvd25sb2FkX25ldyhyZXF1ZXN0KTsKLSAgICBnX29iamVjdF91bnJlZihy
ZXF1ZXN0KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2Rvd25sb2FkX2dldF91cmkoZG93
bmxvYWQpLCA9PSwgdXJpKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfZG93bmxvYWRfZ2V0X25ldHdv
cmtfcmVxdWVzdChkb3dubG9hZCkgPT0gcmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQoZ19zdHJyc3Ry
KHVyaSwgd2Via2l0X2Rvd25sb2FkX2dldF9zdWdnZXN0ZWRfZmlsZW5hbWUoZG93bmxvYWQpKSk7
Ci0gICAgZ19hc3NlcnQod2Via2l0X2Rvd25sb2FkX2dldF9zdGF0dXMoZG93bmxvYWQpID09IFdF
QktJVF9ET1dOTE9BRF9TVEFUVVNfQ1JFQVRFRCk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9kb3du
bG9hZF9nZXRfdG90YWxfc2l6ZShkb3dubG9hZCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG93
bmxvYWRfZ2V0X2N1cnJlbnRfc2l6ZShkb3dubG9hZCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRf
ZG93bmxvYWRfZ2V0X3Byb2dyZXNzKGRvd25sb2FkKSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9k
b3dubG9hZF9nZXRfZWxhcHNlZF90aW1lKGRvd25sb2FkKSk7Ci0gICAgdG1wRGlyID0gZ19maWxl
bmFtZV90b191cmkoZ19nZXRfdG1wX2RpcigpLCBOVUxMLCBOVUxMKTsKLSAgICB3ZWJraXRfZG93
bmxvYWRfc2V0X2Rlc3RpbmF0aW9uX3VyaShkb3dubG9hZCwgdG1wRGlyKTsKLSAgICBnX2Fzc2Vy
dF9jbXBzdHIodG1wRGlyLCA9PSwgd2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbl91cmko
ZG93bmxvYWQpKTs7Ci0gICAgZ19mcmVlKHRtcERpcik7Ci0gICAgZ19vYmplY3RfdW5yZWYoZG93
bmxvYWQpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLW5hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9u
X3JlcXVlc3RlZF9jYihXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRXZWJGcmFtZSogd2ViX2ZyYW1lLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiBy
ZXF1ZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFdl
Yk5hdmlnYXRpb25BY3Rpb24qIGFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBXZWJLaXRXZWJQb2xpY3lEZWNpc2lvbiogZGVjaXNpb24sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICB3ZWJr
aXRfd2ViX3BvbGljeV9kZWNpc2lvbl9kb3dubG9hZChkZWNpc2lvbik7Ci0gICAgcmV0dXJuIFRS
VUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1ub3RpZnlfc3RhdHVzX2NiKEdPYmplY3QqIG9iamVjdCwg
R1BhcmFtU3BlYyogcHNwZWMsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgV2ViS2l0RG93bmxvYWQq
IGRvd25sb2FkID0gV0VCS0lUX0RPV05MT0FEKG9iamVjdCk7Ci0gICAgc3dpdGNoICh3ZWJraXRf
ZG93bmxvYWRfZ2V0X3N0YXR1cyhkb3dubG9hZCkpIHsKLSAgICBjYXNlIFdFQktJVF9ET1dOTE9B
RF9TVEFUVVNfRklOSVNIRUQ6Ci0gICAgY2FzZSBXRUJLSVRfRE9XTkxPQURfU1RBVFVTX0VSUk9S
OgotICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIFdFQktJVF9ET1dOTE9BRF9TVEFUVVNfQ0FOQ0VMTEVEOgotICAgICAgICBnX2Fzc2VydF9u
b3RfcmVhY2hlZCgpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVh
azsKLSAgICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotc2V0X2ZpbGVuYW1lKGdjaGFyKiBmaWxl
bmFtZSkKLXsKLSAgICBnY2hhciAqdXJpID0gZ19maWxlbmFtZV90b191cmkoZmlsZW5hbWUsIE5V
TEwsIE5VTEwpOwotCi0gICAgd2Via2l0X2Rvd25sb2FkX3NldF9kZXN0aW5hdGlvbl91cmkodGhl
RG93bmxvYWQsIHVyaSk7Ci0gICAgZ19mcmVlKHVyaSk7Ci0KLSAgICB3ZWJraXRfZG93bmxvYWRf
c3RhcnQodGhlRG93bmxvYWQpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQK
LWhhbmRsZV9kb3dubG9hZF9yZXF1ZXN0ZWRfY2IoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiogYmVlblRoZXJlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiBhc3luY2gpCi17Ci0gICAgdGhlRG93bmxv
YWQgPSBkb3dubG9hZDsKLSAgICAqYmVlblRoZXJlID0gVFJVRTsKLQotICAgIGlmICh0ZW1wb3Jh
cnlGaWxlbmFtZSkgewotICAgICAgICBpZiAoYXN5bmNoKSB7Ci0gICAgICAgICAgICBnX2lkbGVf
YWRkKChHU291cmNlRnVuYylzZXRfZmlsZW5hbWUsIHRlbXBvcmFyeUZpbGVuYW1lKTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGdjaGFyICp1cmkgPSBnX2ZpbGVuYW1lX3RvX3VyaSh0
ZW1wb3JhcnlGaWxlbmFtZSwgTlVMTCwgTlVMTCk7Ci0gICAgICAgICAgICBpZiAodXJpKQotICAg
ICAgICAgICAgICAgIHdlYmtpdF9kb3dubG9hZF9zZXRfZGVzdGluYXRpb25fdXJpKGRvd25sb2Fk
LCB1cmkpOwotICAgICAgICAgICAgZ19mcmVlKHVyaSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBnX3NpZ25hbF9jb25uZWN0KGRvd25sb2FkLCAibm90aWZ5OjpzdGF0dXMiLAotICAgICAgICAg
ICAgICAgICAgICAgR19DQUxMQkFDSyhub3RpZnlfc3RhdHVzX2NiKSwgTlVMTCk7Ci19Ci0KLXN0
YXRpYyBnYm9vbGVhbgotZG93bmxvYWRfcmVxdWVzdGVkX2NiKFdlYktpdFdlYlZpZXcqIHdlYl92
aWV3LAotICAgICAgICAgICAgICAgICAgICAgIFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwKLSAg
ICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiogYmVlblRoZXJlKQotewotICAgIGhhbmRsZV9k
b3dubG9hZF9yZXF1ZXN0ZWRfY2IoZG93bmxvYWQsIGJlZW5UaGVyZSwgRkFMU0UpOwotICAgIHJl
dHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWRvd25sb2FkX3JlcXVlc3RlZF9hc3lu
Y2hfY2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2Jvb2xlYW4qIGJlZW5UaGVyZSkKLXsKLSAgICBoYW5kbGVfZG93bmxvYWRfcmVxdWVzdGVk
X2NiKGRvd25sb2FkLCBiZWVuVGhlcmUsIFRSVUUpOwotICAgIHJldHVybiBUUlVFOwotfQotCi1z
dGF0aWMgdm9pZAotdGVzdF93ZWJraXRfZG93bmxvYWRfcGVyZm9ybShnYm9vbGVhbiBhc3luY2gp
Ci17Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRf
d2ViX3ZpZXdfbmV3KCkpOwotICAgIEdDYWxsYmFjayBkb3dubG9hZFJlcXVlc3RDYWxsYmFjayA9
IE5VTEw7Ci0KLSAgICBnX29iamVjdF9yZWZfc2luayhHX09CSkVDVCh3ZWJWaWV3KSk7Ci0KLSAg
ICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJuYXZpZ2F0aW9uLXBvbGljeS1kZWNpc2lvbi1y
ZXF1ZXN0ZWQiLAotICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhuYXZpZ2F0aW9uX3Bv
bGljeV9kZWNpc2lvbl9yZXF1ZXN0ZWRfY2IpLAotICAgICAgICAgICAgICAgICAgICAgTlVMTCk7
Ci0KLSAgICBpZiAoYXN5bmNoKQotICAgICAgICBkb3dubG9hZFJlcXVlc3RDYWxsYmFjayA9IEdf
Q0FMTEJBQ0soZG93bmxvYWRfcmVxdWVzdGVkX2FzeW5jaF9jYik7Ci0gICAgZWxzZQotICAgICAg
ICBkb3dubG9hZFJlcXVlc3RDYWxsYmFjayA9IEdfQ0FMTEJBQ0soZG93bmxvYWRfcmVxdWVzdGVk
X2NiKTsKLQotICAgIGdib29sZWFuIGJlZW5UaGVyZSA9IEZBTFNFOwotICAgIGdfc2lnbmFsX2Nv
bm5lY3Qod2ViVmlldywgImRvd25sb2FkLXJlcXVlc3RlZCIsCi0gICAgICAgICAgICAgICAgICAg
ICBkb3dubG9hZFJlcXVlc3RDYWxsYmFjaywgJmJlZW5UaGVyZSk7Ci0KLSAgICAvKiBQcmVwYXJh
dGlvbjsgRklYTUU6IHdlIHNob3VsZCBtb3ZlIHRoaXMgY29kZSB0byBhIHRlc3QKLSAgICAgKiB1
dGlsaXRpZXMgZmlsZSwgYmVjYXVzZSB3ZSBoYXZlIGEgdmVyeSBzaW1pbGFyIG9uZSBpbgotICAg
ICAqIHRlc3R3ZWJmcmFtZS5jICovCi0gICAgR0Vycm9yICplcnJvciA9IE5VTEw7Ci0gICAgZ2No
YXIqIGZpbGVuYW1lOwotICAgIGludCBmZCA9IGdfZmlsZV9vcGVuX3RtcCgid2Via2l0LXRlc3R3
ZWJkb3dubG9hZC1YWFhYWFgiLCAmZmlsZW5hbWUsICZlcnJvcik7Ci0gICAgY2xvc2UoZmQpOwot
Ci0gICAgaWYgKGVycm9yKQotICAgICAgICBnX2NyaXRpY2FsKCJGYWlsZWQgdG8gb3BlbiBhIHRl
bXBvcmFyeSBmaWxlIGZvciB3cml0aW5nOiAlcy4iLCBlcnJvci0+bWVzc2FnZSk7Ci0KLSAgICBp
ZiAoZ191bmxpbmsoZmlsZW5hbWUpID09IC0xKQotICAgICAgICBnX2NyaXRpY2FsKCJGYWlsZWQg
dG8gZGVsZXRlIHRoZSB0ZW1wb3JhcnkgZmlsZTogJXMuIiwgZ19zdHJlcnJvcihlcnJubykpOwot
Ci0gICAgdGhlRG93bmxvYWQgPSBOVUxMOwotICAgIHRlbXBvcmFyeUZpbGVuYW1lID0gZmlsZW5h
bWU7Ci0KLSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotICAgIHdlYmtp
dF93ZWJfdmlld19sb2FkX3VyaSh3ZWJWaWV3LCAiaHR0cDovL2dub21lLm9yZy8iKTsKLSAgICBn
X21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQoYmVlblRoZXJlLCA9
PSwgVFJVRSk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQoZ19maWxlX3Rlc3QodGVtcG9yYXJ5Rmls
ZW5hbWUsIEdfRklMRV9URVNUX0lTX1JFR1VMQVIpLCA9PSwgVFJVRSk7Ci0KLSAgICBnX3VubGlu
ayh0ZW1wb3JhcnlGaWxlbmFtZSk7Ci0gICAgZ19mcmVlKHRlbXBvcmFyeUZpbGVuYW1lKTsKLSAg
ICB0ZW1wb3JhcnlGaWxlbmFtZSA9IE5VTEw7Ci0KLSAgICBnX21haW5fbG9vcF91bnJlZihsb29w
KTsKLSAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKLX0KLQotc3RhdGljIHZvaWQKLXRlc3Rf
d2Via2l0X2Rvd25sb2FkX3N5bmNoKHZvaWQpCi17Ci0gICAgdGVzdF93ZWJraXRfZG93bmxvYWRf
cGVyZm9ybShGQUxTRSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi10ZXN0X3dlYmtpdF9kb3dubG9hZF9h
c3luY2godm9pZCkKLXsKLSAgICB0ZXN0X3dlYmtpdF9kb3dubG9hZF9wZXJmb3JtKFRSVUUpOwot
fQotCi1zdGF0aWMgZ2Jvb2xlYW4gbWltZV90eXBlX3BvbGljeV9kZWNpc2lvbl9yZXF1ZXN0ZWRf
Y2IoV2ViS2l0V2ViVmlldyogdmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdE5ldHdv
cmtSZXF1ZXN0KiByZXF1ZXN0LCBjb25zdCBjaGFyKiBtaW1lX3R5cGUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0V2ViUG9saWN5
RGVjaXNpb24qIGRlY2lzaW9uLCBncG9pbnRlciBkYXRhKQotewotICAgIHdlYmtpdF93ZWJfcG9s
aWN5X2RlY2lzaW9uX2Rvd25sb2FkKGRlY2lzaW9uKTsKLSAgICByZXR1cm4gVFJVRTsKLX0KLQot
c3RhdGljIHZvaWQgaWRsZV9xdWl0X2xvb3BfY2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIEdQ
YXJhbVNwZWMqIHBzcGVjLCBncG9pbnRlciBkYXRhKQotewotICAgIGlmICh3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYl92aWV3KSA9PSBXRUJLSVRfTE9BRF9GSU5JU0hFRCB8fAot
ICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYl92aWV3KSA9PSBXRUJL
SVRfTE9BRF9GQUlMRUQpCi0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci19Ci0KLXN0
YXRpYyB2b2lkCi10ZXN0X3dlYmtpdF9kb3dubG9hZF9kYXRhKHZvaWQpCi17Ci0gICAgZ2Jvb2xl
YW4gYmVlblRoZXJlID0gRkFMU0U7Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJ
VF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5r
KHdlYlZpZXcpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAiZG93bmxvYWQtcmVx
dWVzdGVkIiwKLSAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0soZG93bmxvYWRfcmVxdWVz
dGVkX2NiKSwKLSAgICAgICAgICAgICAgICAgICAgICZiZWVuVGhlcmUpOwotCi0gICAgZ19zaWdu
YWxfY29ubmVjdCh3ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsCi0gICAgICAgICAgICAg
ICAgICAgICBHX0NBTExCQUNLKGlkbGVfcXVpdF9sb29wX2NiKSwKLSAgICAgICAgICAgICAgICAg
ICAgIE5VTEwpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAibWltZS10eXBlLXBv
bGljeS1kZWNpc2lvbi1yZXF1ZXN0ZWQiLAotICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFD
SyhtaW1lX3R5cGVfcG9saWN5X2RlY2lzaW9uX3JlcXVlc3RlZF9jYiksCi0gICAgICAgICAgICAg
ICAgICAgICBOVUxMKTsKLQotICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7
Ci0KLSAgICAvKiBXZSdyZSB0ZXN0aW5nIGZvciBhIGNyYXNoLCBzbyBqdXN0IG5vdCBjcmFzaGlu
ZyBpcyBhIHBhc3MgKi8KLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkod2ViVmlldywgImRh
dGE6YXBwbGljYXRpb24vb2N0ZWN0LXN0cmVhbSwiKTsKLSAgICBnX21haW5fbG9vcF9ydW4obG9v
cCk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQoYmVlblRoZXJlLCA9PSwgVFJVRSk7Ci0KLSAgICBn
X21haW5fbG9vcF91bnJlZihsb29wKTsKLSAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKLX0K
LQotc3RhdGljIHZvaWQgbm90aWZ5RG93bmxvYWRTdGF0dXNDYWxsYmFjayhHT2JqZWN0ICpvYmpl
Y3QsIEdQYXJhbVNwZWMgKnBzcGVjLCBncG9pbnRlciBkYXRhKQotewotICAgIFdlYktpdERvd25s
b2FkICpkb3dubG9hZCA9IFdFQktJVF9ET1dOTE9BRChvYmplY3QpOwotICAgIFdlYktpdE5ldHdv
cmtSZXNwb25zZSAqcmVzcG9uc2UgPSB3ZWJraXRfZG93bmxvYWRfZ2V0X25ldHdvcmtfcmVzcG9u
c2UoZG93bmxvYWQpOwotICAgIFNvdXBNZXNzYWdlICptZXNzYWdlID0gd2Via2l0X25ldHdvcmtf
cmVzcG9uc2VfZ2V0X21lc3NhZ2UocmVzcG9uc2UpOwotCi0gICAgc3dpdGNoICh3ZWJraXRfZG93
bmxvYWRfZ2V0X3N0YXR1cyhkb3dubG9hZCkpIHsKLSAgICBjYXNlIFdFQktJVF9ET1dOTE9BRF9T
VEFUVVNfRVJST1I6Ci0gICAgICAgIGdfYXNzZXJ0X2NtcGludChtZXNzYWdlLT5zdGF0dXNfY29k
ZSwgPT0sIDQwNCk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgV0VCS0lUX0RPV05MT0FEX1NUQVRVU19GSU5JU0hFRDoKLSAgICBjYXNl
IFdFQktJVF9ET1dOTE9BRF9TVEFUVVNfQ0FOQ0VMTEVEOgotICAgICAgICBnX2Fzc2VydF9ub3Rf
cmVhY2hlZCgpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsK
LSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIgKnNlcnZl
ciwgU291cE1lc3NhZ2UgKm1lc3NhZ2UsIGNvbnN0IGNoYXIgKnBhdGgsIEdIYXNoVGFibGUgKnF1
ZXJ5LCBTb3VwQ2xpZW50Q29udGV4dCAqY29udGV4dCwgZ3BvaW50ZXIgdXNlckRhdGEpCi17Ci0g
ICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKLSAgICAgICAgc291
cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVE
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVz
KG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7Ci0gICAgc291cF9tZXNzYWdlX2JvZHlf
Y29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rf
d2Via2l0X2Rvd25sb2FkX25vdF9mb3VuZCh2b2lkKQotewotICAgIFNvdXBTZXJ2ZXIgKnNlcnZl
ciA9IHNvdXBfc2VydmVyX25ldyhTT1VQX1NFUlZFUl9QT1JULCAwLCBOVUxMKTsKLSAgICBzb3Vw
X3NlcnZlcl9ydW5fYXN5bmMoc2VydmVyKTsKLSAgICBzb3VwX3NlcnZlcl9hZGRfaGFuZGxlcihz
ZXJ2ZXIsIE5VTEwsIHNlcnZlckNhbGxiYWNrLCBOVUxMLCBOVUxMKTsKLSAgICBTb3VwVVJJICpi
YXNlVVJJID0gc291cF91cmlfbmV3KCJodHRwOi8vMTI3LjAuMC4xLyIpOwotICAgIHNvdXBfdXJp
X3NldF9wb3J0KGJhc2VVUkksIHNvdXBfc2VydmVyX2dldF9wb3J0KHNlcnZlcikpOwotCi0gICAg
U291cFVSSSAqdXJpID0gc291cF91cmlfbmV3X3dpdGhfYmFzZShiYXNlVVJJLCAiL2ZvbyIpOwot
ICAgIGNoYXIgKnVyaVN0cmluZyA9IHNvdXBfdXJpX3RvX3N0cmluZyh1cmksIEZBTFNFKTsKLSAg
ICBzb3VwX3VyaV9mcmVlKHVyaSk7Ci0KLSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEws
IFRSVUUpOwotICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0ICpyZXF1ZXN0ID0gd2Via2l0X25ldHdv
cmtfcmVxdWVzdF9uZXcodXJpU3RyaW5nKTsKLSAgICBnX2ZyZWUgKHVyaVN0cmluZyk7Ci0gICAg
V2ViS2l0RG93bmxvYWQgKmRvd25sb2FkID0gd2Via2l0X2Rvd25sb2FkX25ldyhyZXF1ZXN0KTsK
LSAgICBnX29iamVjdF91bnJlZihyZXF1ZXN0KTsKLQotICAgIHdlYmtpdF9kb3dubG9hZF9zZXRf
ZGVzdGluYXRpb25fdXJpKGRvd25sb2FkLCAiZmlsZTovLy90bXAvZm9vIik7Ci0gICAgZ19zaWdu
YWxfY29ubmVjdChkb3dubG9hZCwgIm5vdGlmeTo6c3RhdHVzIiwgR19DQUxMQkFDSyhub3RpZnlE
b3dubG9hZFN0YXR1c0NhbGxiYWNrKSwgTlVMTCk7Ci0KLSAgICB3ZWJraXRfZG93bmxvYWRfc3Rh
cnQoZG93bmxvYWQpOwotICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLQotICAgIGdfb2JqZWN0
X3VucmVmKGRvd25sb2FkKTsKLSAgICBnX21haW5fbG9vcF91bnJlZihsb29wKTsKLSAgICBzb3Vw
X3VyaV9mcmVlKGJhc2VVUkkpOwotICAgIGdfb2JqZWN0X3VucmVmKHNlcnZlcik7Ci19Ci0KLWlu
dCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKLXsKLSAgICBndGtfdGVzdF9pbml0KCZhcmdj
LCAmYXJndiwgTlVMTCk7Ci0KLSAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJr
aXQub3JnLyIpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9kb3dubG9hZC9jcmVhdGUi
LCB0ZXN0X3dlYmtpdF9kb3dubG9hZF9jcmVhdGUpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dl
YmtpdC9kb3dubG9hZC9zeW5jaCIsIHRlc3Rfd2Via2l0X2Rvd25sb2FkX3N5bmNoKTsKLSAgICBn
X3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvZG93bmxvYWQvYXN5bmNoIiwgdGVzdF93ZWJraXRfZG93
bmxvYWRfYXN5bmNoKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvZG93bmxvYWQvZGF0
YSIsIHRlc3Rfd2Via2l0X2Rvd25sb2FkX2RhdGEpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dl
YmtpdC9kb3dubG9hZC9ub3QtZm91bmQiLCB0ZXN0X3dlYmtpdF9kb3dubG9hZF9ub3RfZm91bmQp
OwotICAgIHJldHVybiBnX3Rlc3RfcnVuICgpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9ndGsvdGVzdHMvdGVzdGZhdmljb25kYXRhYmFzZS5jIGIvU291cmNlL1dlYktpdC9ndGsvdGVz
dHMvdGVzdGZhdmljb25kYXRhYmFzZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAy
YmM2MDZhLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RmYXZpY29u
ZGF0YWJhc2UuYworKysgL2Rldi9udWxsCkBAIC0xLDI3NiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJ0
ZXN0X3V0aWxzLmgiCi0jaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRlIDxndGsvZ3Rr
Lmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgotCi1j
b25zdCBpbnQgZ0ljb25TaXplID0gMTY7Ci0KLUdNYWluTG9vcCAqbG9vcDsKLWNoYXIgKmJhc2VV
Ukk7Ci0KLXN0YXRpYyB2b2lkCi1zZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyICpzZXJ2ZXIsIFNv
dXBNZXNzYWdlICptZXNzYWdlLCBjb25zdCBjaGFyICpwYXRoLCBHSGFzaFRhYmxlICpxdWVyeSwg
U291cENsaWVudENvbnRleHQgKmNvbnRleHQsIHZvaWQgKmRhdGEpCi17Ci0gICAgaWYgKG1lc3Nh
Z2UtPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKLSAgICAgICAgc291cF9tZXNzYWdlX3Nl
dF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNP
VVBfU1RBVFVTX09LKTsKLQotICAgIGNoYXIgKmNvbnRlbnRzOwotICAgIGdzaXplIGxlbmd0aDsK
LSAgICBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9mYXZpY29uLmljbyIpKSB7Ci0gICAgICAgIEdF
cnJvciAqZXJyb3IgPSBOVUxMOwotCi0gICAgICAgIGdfZmlsZV9nZXRfY29udGVudHMoImJsYW5r
LmljbyIsICZjb250ZW50cywgJmxlbmd0aCwgJmVycm9yKTsKLSAgICAgICAgZ19hc3NlcnQoIWVy
cm9yKTsKLSAgICB9IGVsc2UgewotICAgICAgICBjb250ZW50cyA9IGdfc3RyZHVwKCI8aHRtbD48
Ym9keT50ZXN0PC9ib2R5PjwvaHRtbD4iKTsKLSAgICAgICAgbGVuZ3RoID0gc3RybGVuKGNvbnRl
bnRzKTsKLSAgICB9Ci0KLSAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVz
cG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgY29udGVudHMsIGxlbmd0aCk7Ci0gICAgc291
cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7Ci19Ci0KLXN0
YXRpYyB2b2lkIGRlbGV0ZURhdGFiYXNlRmlsZUlmRXhpc3RzKGNvbnN0IGNoYXIgKmRhdGFiYXNl
UGF0aCkKLXsKLSAgICBpZiAoIWdfZmlsZV90ZXN0KGRhdGFiYXNlUGF0aCwgR19GSUxFX1RFU1Rf
SVNfRElSKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2hhciAqZGF0YWJhc2VGaWxlbmFtZSA9
IGdfYnVpbGRfZmlsZW5hbWUoZGF0YWJhc2VQYXRoLCAiV2VicGFnZUljb25zLmRiIiwgTlVMTCk7
Ci0gICAgaWYgKGdfdW5saW5rKGRhdGFiYXNlRmlsZW5hbWUpID09IC0xKSB7Ci0gICAgICAgIGdf
ZnJlZShkYXRhYmFzZUZpbGVuYW1lKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGdf
ZnJlZShkYXRhYmFzZUZpbGVuYW1lKTsKLSAgICBnX3JtZGlyKGRhdGFiYXNlUGF0aCk7Ci19Ci0K
LXN0YXRpYyB2b2lkIHRlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VTZXRQYXRoKCkKLXsKLSAgICBj
aGFyICpkYXRhYmFzZVBhdGggPSBnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X3RtcF9kaXIoKSwgIndl
YmtpdC10ZXN0ZmF2aWNvbmRhdGFiYXNlIiwgTlVMTCk7Ci0gICAgZGVsZXRlRGF0YWJhc2VGaWxl
SWZFeGlzdHMoZGF0YWJhc2VQYXRoKTsKLQotICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSAqZGF0
YWJhc2UgPSB3ZWJraXRfZ2V0X2Zhdmljb25fZGF0YWJhc2UoKTsKLSAgICB3ZWJraXRfZmF2aWNv
bl9kYXRhYmFzZV9zZXRfcGF0aChkYXRhYmFzZSwgZGF0YWJhc2VQYXRoKTsKLQotICAgIGdfYXNz
ZXJ0X2NtcHN0cihkYXRhYmFzZVBhdGgsID09LCB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRf
cGF0aChkYXRhYmFzZSkpOwotCi0gICAgZ19mcmVlKGRhdGFiYXNlUGF0aCk7Ci19Ci0KLS8vIFNl
ZSB0aGUgY29tbWVudCBpbiBtYWluKCkgZnVuY3Rpb24gdGhhdCBnb2VzIHdpdGggdGhpcyBzYW1l
IGd1YXJkLgotI2lmZGVmIE5ERUJVRwotCi1zdGF0aWMgdm9pZCBmYXZpY29uRGF0YWJhc2VHZXRW
YWxpZEZhdmljb25DYWxsYmFjayhHT2JqZWN0ICpzb3VyY2VPYmplY3QsIEdBc3luY1Jlc3VsdCAq
cmVzdWx0LCB2b2lkICp1c2VyRGF0YSkKLXsKLSAgICBnYm9vbGVhbiAqYmVlbkhlcmUgPSAoZ2Jv
b2xlYW4qKXVzZXJEYXRhOwotICAgIEdFcnJvciAqZXJyb3IgPSBOVUxMOwotICAgIEdka1BpeGJ1
ZiAqaWNvbiA9IHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX3BpeGJ1Zl9maW5p
c2goV0VCS0lUX0ZBVklDT05fREFUQUJBU0Uoc291cmNlT2JqZWN0KSwgcmVzdWx0LCAmZXJyb3Ip
OwotICAgIGdfYXNzZXJ0KGljb24pOwotICAgIGdfb2JqZWN0X3VucmVmKGljb24pOwotCi0gICAg
KmJlZW5IZXJlID0gVFJVRTsKLQotICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci19Ci0KLXN0
YXRpYyB2b2lkIGZhdmljb25EYXRhYmFzZUdldEludmFsaWRGYXZpY29uQ2FsbGJhY2soR09iamVj
dCAqc291cmNlT2JqZWN0LCBHQXN5bmNSZXN1bHQgKnJlc3VsdCwgdm9pZCAqdXNlckRhdGEpCi17
Ci0gICAgZ2Jvb2xlYW4gKmJlZW5IZXJlID0gKGdib29sZWFuKil1c2VyRGF0YTsKLSAgICBHRXJy
b3IgKmVycm9yID0gTlVMTDsKLSAgICBHZGtQaXhidWYgKmljb24gPSB3ZWJraXRfZmF2aWNvbl9k
YXRhYmFzZV9nZXRfZmF2aWNvbl9waXhidWZfZmluaXNoKFdFQktJVF9GQVZJQ09OX0RBVEFCQVNF
KHNvdXJjZU9iamVjdCksIHJlc3VsdCwgJmVycm9yKTsKLSAgICBnX2Fzc2VydCghaWNvbik7Ci0K
LSAgICAqYmVlbkhlcmUgPSBUUlVFOwotCi0gICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKLX0K
LQotc3RhdGljIHZvaWQgZmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNvbkNhbmNlbGxlZENhbGxiYWNr
KEdPYmplY3QgKnNvdXJjZU9iamVjdCwgR0FzeW5jUmVzdWx0ICpyZXN1bHQsIHZvaWQgKnVzZXJE
YXRhKQotewotICAgIGdib29sZWFuICpiZWVuSGVyZSA9IChnYm9vbGVhbiopdXNlckRhdGE7Ci0g
ICAgR0Vycm9yICplcnJvciA9IE5VTEw7Ci0gICAgR2RrUGl4YnVmICppY29uID0gd2Via2l0X2Zh
dmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fcGl4YnVmX2ZpbmlzaChXRUJLSVRfRkFWSUNPTl9E
QVRBQkFTRShzb3VyY2VPYmplY3QpLCByZXN1bHQsICZlcnJvcik7Ci0gICAgZ19hc3NlcnQoIWlj
b24pOwotICAgIGdfYXNzZXJ0KGVycm9yICYmIGdfZXJyb3JfbWF0Y2hlcyhlcnJvciwgR19JT19F
UlJPUiwgR19JT19FUlJPUl9DQU5DRUxMRUQpKTsKLQotICAgICpiZWVuSGVyZSA9IFRSVUU7Ci0K
LSAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcXVp
dE1haW5Mb29wSWZMb2FkQ29tcGxldGVkKGdib29sZWFuICppY29uT3JQYWdlTG9hZGVkKQotewot
ICAgIGlmICgqaWNvbk9yUGFnZUxvYWRlZCkKLSAgICAgICAgZ19tYWluX2xvb3BfcXVpdChsb29w
KTsKLSAgICBlbHNlCi0gICAgICAgICppY29uT3JQYWdlTG9hZGVkID0gVFJVRTsKLX0KLQotc3Rh
dGljIHZvaWQgaWRsZVF1aXRMb29wQ2FsbGJhY2soV2ViS2l0V2ViVmlldyAqd2ViVmlldywgR1Bh
cmFtU3BlYyAqcGFyYW1TcGVjLCBnYm9vbGVhbiAqaWNvbk9yUGFnZUxvYWRlZCkKLXsKLSAgICBX
ZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMo
d2ViVmlldyk7Ci0KLSAgICBpZiAoc3RhdHVzID09IFdFQktJVF9MT0FEX0ZJTklTSEVEIHx8IHN0
YXR1cyA9PSBXRUJLSVRfTE9BRF9GQUlMRUQpCi0gICAgICAgIHF1aXRNYWluTG9vcElmTG9hZENv
bXBsZXRlZChpY29uT3JQYWdlTG9hZGVkKTsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0V2ViVmll
d0ljb25Mb2FkZWQoV2ViS2l0RmF2aWNvbkRhdGFiYXNlICpkYXRhYmFzZSwgY29uc3QgY2hhciAq
ZnJhbWVVUkksIGdib29sZWFuICppY29uT3JQYWdlTG9hZGVkKQotewotICAgIHF1aXRNYWluTG9v
cElmTG9hZENvbXBsZXRlZChpY29uT3JQYWdlTG9hZGVkKTsKLX0KLQotc3RhdGljIHZvaWQgbG9h
ZFVSSShjb25zdCBjaGFyICp1cmkpCi17Ci0gICAgV2ViS2l0V2ViVmlldyAqdmlldyA9IFdFQktJ
VF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdib29sZWFuIGljb25PclBh
Z2VMb2FkZWQgPSBGQUxTRTsKLQotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh2aWV3LCB1
cmkpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh2aWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIs
IEdfQ0FMTEJBQ0soaWRsZVF1aXRMb29wQ2FsbGJhY2spLCAmaWNvbk9yUGFnZUxvYWRlZCk7Ci0g
ICAgZ19zaWduYWxfY29ubmVjdCh2aWV3LCAiaWNvbi1sb2FkZWQiLCBHX0NBTExCQUNLKHdlYmtp
dFdlYlZpZXdJY29uTG9hZGVkKSwgJmljb25PclBhZ2VMb2FkZWQpOwotCi0gICAgZ19tYWluX2xv
b3BfcnVuKGxvb3ApOwotCi0gICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVk
KHZpZXcsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsICZpY29uT3JQYWdlTG9hZGVk
KTsKLX0KLQotc3RhdGljIGdib29sZWFuIGZhdmljb25EYXRhYmFzZUdldFZhbGlkRmF2aWNvbklk
bGUodm9pZCAqdXNlckRhdGEpCi17Ci0gICAgd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zh
dmljb25fcGl4YnVmKHdlYmtpdF9nZXRfZmF2aWNvbl9kYXRhYmFzZSgpLCBiYXNlVVJJLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnSWNvblNpemUsIGdJ
Y29uU2l6ZSwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmF2aWNvbkRhdGFiYXNlR2V0VmFsaWRGYXZpY29uQ2FsbGJhY2ssIHVzZXJEYXRhKTsK
LSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBmYXZpY29uRGF0YWJhc2VH
ZXRJbnZhbGlkRmF2aWNvbklkbGUodm9pZCAqdXNlckRhdGEpCi17Ci0gICAgd2Via2l0X2Zhdmlj
b25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fcGl4YnVmKHdlYmtpdF9nZXRfZmF2aWNvbl9kYXRhYmFz
ZSgpLCAiaHR0cDovL3d3dy53ZWJraXRndGsub3JnLyIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdJY29uU2l6ZSwgZ0ljb25TaXplLCBOVUxMLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYXZpY29uRGF0YWJh
c2VHZXRJbnZhbGlkRmF2aWNvbkNhbGxiYWNrLCB1c2VyRGF0YSk7Ci0gICAgcmV0dXJuIEZBTFNF
OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gZmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNvbkNhbmNlbGxl
ZElkbGUodm9pZCAqdXNlckRhdGEpCi17Ci0gICAgR0NhbmNlbGxhYmxlICpjYW5jZWxsYWJsZSA9
IGdfY2FuY2VsbGFibGVfbmV3KCk7Ci0gICAgd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zh
dmljb25fcGl4YnVmKHdlYmtpdF9nZXRfZmF2aWNvbl9kYXRhYmFzZSgpLCBiYXNlVVJJLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnSWNvblNpemUsIGdJ
Y29uU2l6ZSwgY2FuY2VsbGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZhdmljb25EYXRhYmFzZUdldEZhdmljb25DYW5jZWxsZWRDYWxsYmFjaywg
dXNlckRhdGEpOwotICAgIGdfY2FuY2VsbGFibGVfY2FuY2VsKGNhbmNlbGxhYmxlKTsKLSAgICBn
X29iamVjdF91bnJlZihjYW5jZWxsYWJsZSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0
aWMgdm9pZCB0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNvbigpCi17Ci0gICAgZ2Jv
b2xlYW4gYmVlblRvSWNvbkNhbGxiYWNrOwotCi0gICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhO
VUxMLCBUUlVFKTsKLQotICAgIC8qIExvYWQgdXJpIHRvIG1ha2Ugc3VyZSBmYXZpY29uIGlzIGFk
ZGVkIHRvIGRhdGFiYXNlLiAqLwotICAgIGxvYWRVUkkoYmFzZVVSSSk7Ci0KLSAgICBiZWVuVG9J
Y29uQ2FsbGJhY2sgPSBGQUxTRTsKLSAgICBnX2lkbGVfYWRkKChHU291cmNlRnVuYylmYXZpY29u
RGF0YWJhc2VHZXRWYWxpZEZhdmljb25JZGxlLCAmYmVlblRvSWNvbkNhbGxiYWNrKTsKLSAgICBn
X21haW5fbG9vcF9ydW4obG9vcCk7Ci0gICAgZ19hc3NlcnQoYmVlblRvSWNvbkNhbGxiYWNrKTsK
LQotICAgIGJlZW5Ub0ljb25DYWxsYmFjayA9IEZBTFNFOwotICAgIGdfaWRsZV9hZGQoKEdTb3Vy
Y2VGdW5jKWZhdmljb25EYXRhYmFzZUdldEludmFsaWRGYXZpY29uSWRsZSwgJmJlZW5Ub0ljb25D
YWxsYmFjayk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotICAgIGdfYXNzZXJ0KGJlZW5U
b0ljb25DYWxsYmFjayk7Ci0KLSAgICBiZWVuVG9JY29uQ2FsbGJhY2sgPSBGQUxTRTsKLSAgICBn
X2lkbGVfYWRkKChHU291cmNlRnVuYylmYXZpY29uRGF0YWJhc2VHZXRGYXZpY29uQ2FuY2VsbGVk
SWRsZSwgJmJlZW5Ub0ljb25DYWxsYmFjayk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwot
ICAgIGdfYXNzZXJ0KGJlZW5Ub0ljb25DYWxsYmFjayk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RX
ZWJLaXRGYXZpY29uRGF0YWJhc2VHZXRGYXZpY29uVVJJKCkKLXsKLSAgICBjaGFyICppY29uVVJJ
ID0gd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fdXJpKHdlYmtpdF9nZXRfZmF2
aWNvbl9kYXRhYmFzZSgpLCBiYXNlVVJJKTsKLSAgICBjaGFyICpleHBlY3RlZFVSSSA9IGdfc3Ry
ZHVwX3ByaW50ZigiJXNmYXZpY29uLmljbyIsIGJhc2VVUkkpOwotICAgIGdfYXNzZXJ0X2NtcHN0
cihpY29uVVJJLCA9PSwgZXhwZWN0ZWRVUkkpOwotICAgIGdfZnJlZShleHBlY3RlZFVSSSk7Ci0g
ICAgZ19mcmVlKGljb25VUkkpOwotfQotCi0jZW5kaWYKLQotc3RhdGljIHZvaWQgdGVzdFdlYktp
dEZhdmljb25EYXRhYmFzZVJlbW92ZUFsbCh2b2lkKQotewotICAgIFdlYktpdEZhdmljb25EYXRh
YmFzZSAqZGF0YWJhc2UgPSB3ZWJraXRfZ2V0X2Zhdmljb25fZGF0YWJhc2UoKTsKLSAgICB3ZWJr
aXRfZmF2aWNvbl9kYXRhYmFzZV9jbGVhcihkYXRhYmFzZSk7Ci0gICAgY2hhciAqaWNvblVSSSA9
IHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX3VyaShkYXRhYmFzZSwgYmFzZVVS
SSk7Ci0gICAgZ19hc3NlcnQoIWljb25VUkkpOwotICAgIGdfZnJlZShpY29uVVJJKTsKLX0KLQot
c3RhdGljIHZvaWQgdGVzdFdlYktpdEZhdmljb25EYXRhYmFzZUNsb3NlRGF0YWJhc2Uodm9pZCkK
LXsKLSAgICBXZWJLaXRGYXZpY29uRGF0YWJhc2UgKmRhdGFiYXNlID0gd2Via2l0X2dldF9mYXZp
Y29uX2RhdGFiYXNlKCk7Ci0gICAgY2hhciAqZGF0YWJhc2VQYXRoID0gZ19zdHJkdXAod2Via2l0
X2Zhdmljb25fZGF0YWJhc2VfZ2V0X3BhdGgoZGF0YWJhc2UpKTsKLSAgICB3ZWJraXRfZmF2aWNv
bl9kYXRhYmFzZV9zZXRfcGF0aChkYXRhYmFzZSwgMCk7Ci0gICAgZGVsZXRlRGF0YWJhc2VGaWxl
SWZFeGlzdHMoZGF0YWJhc2VQYXRoKTsKLSAgICBnX2ZyZWUoZGF0YWJhc2VQYXRoKTsKLX0KLQot
aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICAgIGd0a190ZXN0X2luaXQoJmFy
Z2MsICZhcmd2LCBOVUxMKTsKLQotICAgIC8qIFRoaXMgaG9wZWZ1bGx5IG1ha2VzIHRoZSB0ZXN0
IGluZGVwZW5kZW50IG9mIHRoZSBwYXRoIGl0J3MgY2FsbGVkIGZyb20uICovCi0gICAgdGVzdHV0
aWxzX3JlbGF0aXZlX2NoZGlyKCJTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy9yZXNvdXJjZXMvdGVz
dC5odG1sIiwgYXJndlswXSk7Ci0KLSAgICBTb3VwU2VydmVyICpzZXJ2ZXIgPSBzb3VwX3NlcnZl
cl9uZXcoU09VUF9TRVJWRVJfUE9SVCwgMCwgTlVMTCk7Ci0gICAgc291cF9zZXJ2ZXJfcnVuX2Fz
eW5jKHNlcnZlcik7Ci0KLSAgICBzb3VwX3NlcnZlcl9hZGRfaGFuZGxlcihzZXJ2ZXIsIE5VTEws
IHNlcnZlckNhbGxiYWNrLCBOVUxMLCBOVUxMKTsKLQotICAgIFNvdXBVUkkgKnNvdXBVUkkgPSBz
b3VwX3VyaV9uZXcoImh0dHA6Ly8xMjcuMC4wLjEvIik7Ci0gICAgc291cF91cmlfc2V0X3BvcnQo
c291cFVSSSwgc291cF9zZXJ2ZXJfZ2V0X3BvcnQoc2VydmVyKSk7Ci0KLSAgICBiYXNlVVJJID0g
c291cF91cmlfdG9fc3RyaW5nKHNvdXBVUkksIEZBTFNFKTsKLSAgICBzb3VwX3VyaV9mcmVlKHNv
dXBVUkkpOwotCi0gICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8i
KTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvZmF2aWNvbmRhdGFiYXNlL3NldC1wYXRo
IiwgdGVzdFdlYktpdEZhdmljb25EYXRhYmFzZVNldFBhdGgpOwotCi0gICAgLy8gVGhlc2UgdHdv
IHRlc3RzIHdpbGwgdHJpZ2dlciBhbiBBU1NFUlRJT04gb24gZGVidWcgYnVpbGRzIGR1ZQotICAg
IC8vIHRvIGh0dHA6Ly93ZWJraXQub3JnL2IvNjc1ODIuIFJlbW92ZSB0aGUgZ3VhcmRzIG9uY2Ug
dGhlIGJ1ZyBpcyBmaXhlZC4KLSNpZmRlZiBOREVCVUcKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93
ZWJraXQvZmF2aWNvbmRhdGFiYXNlL2dldC1mYXZpY29uIiwgdGVzdFdlYktpdEZhdmljb25EYXRh
YmFzZUdldEZhdmljb24pOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9mYXZpY29uZGF0
YWJhc2UvZ2V0LWZhdmljb24tdXJpIiwgdGVzdFdlYktpdEZhdmljb25EYXRhYmFzZUdldEZhdmlj
b25VUkkpOwotI2VuZGlmCi0KLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvZmF2aWNvbmRh
dGFiYXNlL3JlbW92ZS1hbGwiLCB0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlUmVtb3ZlQWxsKTsK
LSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvZmF2aWNvbmRhdGFiYXNlL2Nsb3NlLWRiIiwg
dGVzdFdlYktpdEZhdmljb25EYXRhYmFzZUNsb3NlRGF0YWJhc2UpOwotCi0gICAgcmV0dXJuIGdf
dGVzdF9ydW4oKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rn
bG9iYWxzLmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0Z2xvYmFscy5jCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjllYzRmLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQvZ3RrL3Rlc3RzL3Rlc3RnbG9iYWxzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBDb2xsYWJvcmEgTHRkLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgot
I2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KLQotLy8gTWFrZSBzdXJlIHRoZSBzZXNzaW9uIGlz
IGluaXRpYWxpemVkIHByb3Blcmx5IHdoZW4gd2Via2l0X2dldF9kZWZhdWx0X3Nlc3Npb24oKSBp
cyBjYWxsZWQuCi1zdGF0aWMgdm9pZCB0ZXN0X2dsb2JhbHNfZGVmYXVsdF9zZXNzaW9uKCkKLXsK
LSAgICBnX3Rlc3RfYnVnKCIzNjc1NCIpOwotCi0gICAgU291cFNlc3Npb24qIHNlc3Npb24gPSB3
ZWJraXRfZ2V0X2RlZmF1bHRfc2Vzc2lvbigpOwotICAgIHNvdXBfc2Vzc2lvbl9yZW1vdmVfZmVh
dHVyZV9ieV90eXBlKHNlc3Npb24sIFdFQktJVF9UWVBFX1NPVVBfQVVUSF9ESUFMT0cpOwotCi0g
ICAgLy8gVGhpcyBtYWtlcyBzdXJlIG91ciBpbml0aWFsaXphdGlvbiByYW4uCi0gICAgZ19hc3Nl
cnQoc291cF9zZXNzaW9uX2dldF9mZWF0dXJlKHNlc3Npb24sIFNPVVBfVFlQRV9DT05URU5UX0RF
Q09ERVIpICE9IE5VTEwpOwotCi0gICAgLy8gQ3JlYXRpbmcgYSBXZWJWaWV3IHNob3VsZCBtYWtl
IHN1cmUgdGhlIHNlc3Npb24gaXMKLSAgICAvLyBpbml0aWFsaXplZCwgYW5kIG5vdCBtZXNzIHdp
dGggb3VyIGNoYW5nZXMuCi0gICAgV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcgPSBXRUJLSVRfV0VC
X1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBnX29iamVjdF9yZWZfc2luayh3ZWJf
dmlldyk7Ci0gICAgZ19vYmplY3RfdW5yZWYod2ViX3ZpZXcpOwotCi0gICAgLy8gVGhlc2UgbWFr
ZXMgc3VyZSBvdXIgbW9kaWZpY2F0aW9uIHdhcyBrZXB0LgotICAgIGdfYXNzZXJ0KHNvdXBfc2Vz
c2lvbl9nZXRfZmVhdHVyZShzZXNzaW9uLCBTT1VQX1RZUEVfQ09OVEVOVF9ERUNPREVSKSAhPSBO
VUxMKTsKLSAgICBnX2Fzc2VydChzb3VwX3Nlc3Npb25fZ2V0X2ZlYXR1cmUoc2Vzc2lvbiwgV0VC
S0lUX1RZUEVfU09VUF9BVVRIX0RJQUxPRykgPT0gTlVMTCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRl
c3RfZ2xvYmFsc19zZWN1cml0eV9wb2xpY3koKQotewotICAgIC8vIENoZWNrIGRlZmF1bHQgcG9s
aWN5IGZvciB3ZWxsIGtub3duIHNjaGVtZXMuCi0gICAgV2ViS2l0U2VjdXJpdHlQb2xpY3kgcG9s
aWN5ID0gd2Via2l0X2dldF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUoImh0dHAiKTsK
LSAgICBndWludCBtYXNrID0gV0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9DT1JTX0VOQUJMRUQ7Ci0g
ICAgZ19hc3NlcnRfY21wdWludChwb2xpY3kgJiBtYXNrLCA9PSwgbWFzayk7Ci0KLSAgICBwb2xp
Y3kgPSB3ZWJraXRfZ2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiaHR0cHMiKTsK
LSAgICBtYXNrID0gV0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9TRUNVUkUgfCBXRUJLSVRfU0VDVVJJ
VFlfUE9MSUNZX0NPUlNfRU5BQkxFRDsKLSAgICBnX2Fzc2VydF9jbXB1aW50KHBvbGljeSAmIG1h
c2ssID09LCBtYXNrKTsKLQotICAgIHBvbGljeSA9IHdlYmtpdF9nZXRfc2VjdXJpdHlfcG9saWN5
X2Zvcl91cmlfc2NoZW1lKCJmaWxlIik7Ci0gICAgbWFzayA9IFdFQktJVF9TRUNVUklUWV9QT0xJ
Q1lfTE9DQUw7Ci0gICAgZ19hc3NlcnRfY21wdWludChwb2xpY3kgJiBtYXNrLCA9PSwgbWFzayk7
Ci0KLSAgICBwb2xpY3kgPSB3ZWJraXRfZ2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVt
ZSgiZGF0YSIpOwotICAgIG1hc2sgPSBXRUJLSVRfU0VDVVJJVFlfUE9MSUNZX05PX0FDQ0VTU19U
T19PVEhFUl9TQ0hFTUUgfCBXRUJLSVRfU0VDVVJJVFlfUE9MSUNZX1NFQ1VSRTsKLSAgICBnX2Fz
c2VydF9jbXB1aW50KHBvbGljeSAmIG1hc2ssID09LCBtYXNrKTsKLQotICAgIHBvbGljeSA9IHdl
YmtpdF9nZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJhYm91dCIpOwotICAgIG1h
c2sgPSBXRUJLSVRfU0VDVVJJVFlfUE9MSUNZX05PX0FDQ0VTU19UT19PVEhFUl9TQ0hFTUUgfCBX
RUJLSVRfU0VDVVJJVFlfUE9MSUNZX1NFQ1VSRSB8IFdFQktJVF9TRUNVUklUWV9QT0xJQ1lfRU1Q
VFlfRE9DVU1FTlQ7Ci0gICAgZ19hc3NlcnRfY21wdWludChwb2xpY3kgJiBtYXNrLCA9PSwgbWFz
ayk7Ci0KLSAgICAvLyBDdXN0b20gc2NoZW1lLgotICAgIHBvbGljeSA9IHdlYmtpdF9nZXRfc2Vj
dXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJmb28iKTsKLSAgICBnX2Fzc2VydCghcG9saWN5
KTsKLQotICAgIHBvbGljeSB8PSBXRUJLSVRfU0VDVVJJVFlfUE9MSUNZX0xPQ0FMOwotICAgIHdl
YmtpdF9zZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJmb28iLCBwb2xpY3kpOwot
ICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2dldF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9z
Y2hlbWUoImZvbyIpLCA9PSwgcG9saWN5KTsKLQotICAgIHBvbGljeSB8PSBXRUJLSVRfU0VDVVJJ
VFlfUE9MSUNZX05PX0FDQ0VTU19UT19PVEhFUl9TQ0hFTUU7Ci0gICAgd2Via2l0X3NldF9zZWN1
cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUoImZvbyIsIHBvbGljeSk7Ci0gICAgZ19hc3NlcnRf
Y21wdWludCh3ZWJraXRfZ2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiZm9vIiks
ID09LCBwb2xpY3kpOwotCi0gICAgcG9saWN5IHw9IFdFQktJVF9TRUNVUklUWV9QT0xJQ1lfRElT
UExBWV9JU09MQVRFRDsKLSAgICB3ZWJraXRfc2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3Nj
aGVtZSgiZm9vIiwgcG9saWN5KTsKLSAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9nZXRfc2Vj
dXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJmb28iKSwgPT0sIHBvbGljeSk7Ci0KLSAgICBw
b2xpY3kgfD0gV0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9TRUNVUkU7Ci0gICAgd2Via2l0X3NldF9z
ZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUoImZvbyIsIHBvbGljeSk7Ci0gICAgZ19hc3Nl
cnRfY21wdWludCh3ZWJraXRfZ2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiZm9v
IiksID09LCBwb2xpY3kpOwotCi0gICAgcG9saWN5IHw9IFdFQktJVF9TRUNVUklUWV9QT0xJQ1lf
Q09SU19FTkFCTEVEOwotICAgIHdlYmtpdF9zZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2No
ZW1lKCJmb28iLCBwb2xpY3kpOwotICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2dldF9zZWN1
cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUoImZvbyIpLCA9PSwgcG9saWN5KTsKLQotICAgIHBv
bGljeSB8PSBXRUJLSVRfU0VDVVJJVFlfUE9MSUNZX0VNUFRZX0RPQ1VNRU5UOwotICAgIHdlYmtp
dF9zZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJmb28iLCBwb2xpY3kpOwotICAg
IGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2dldF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hl
bWUoImZvbyIpLCA9PSwgcG9saWN5KTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBh
cmd2KQotewotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLQotICAgIGdf
dGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0gICAgZ190ZXN0X2Fk
ZF9mdW5jKCIvd2Via2l0L2dsb2JhbHMvZGVmYXVsdF9zZXNzaW9uIiwKLSAgICAgICAgICAgICAg
ICAgICAgdGVzdF9nbG9iYWxzX2RlZmF1bHRfc2Vzc2lvbik7Ci0gICAgZ190ZXN0X2FkZF9mdW5j
KCIvd2Via2l0L2dsb2JhbHMvc2VjdXJpdHktcG9saWN5IiwKLSAgICAgICAgICAgICAgICAgICAg
dGVzdF9nbG9iYWxzX3NlY3VyaXR5X3BvbGljeSk7Ci0gICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsK
LX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGhpdHRlc3RyZXN1
bHQuYyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RoaXR0ZXN0cmVzdWx0LmMKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiZjAxMTAuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdC9ndGsvdGVzdHMvdGVzdGhpdHRlc3RyZXN1bHQuYworKysgL2Rldi9udWxsCkBAIC0xLDE2
OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IElnYWxpYSBTLkwuCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNp
bmNsdWRlIDxnbGliL2dzdGRpby5oPgotI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KLQotdHlw
ZWRlZiBzdHJ1Y3QgewotICBjaGFyKiBkYXRhOwotICBndWludCBmbGFnOwotfSBUZXN0SW5mbzsK
LQotc3RhdGljIEdNYWluTG9vcCogbG9vcDsKLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIFdlYktp
dFdlYlZpZXcqIHdlYlZpZXc7Ci0gICAgVGVzdEluZm8qIGluZm87Ci19IEhpdFRlc3RSZXN1bHRG
aXh0dXJlOwotCi1UZXN0SW5mbyoKLXRlc3RfaW5mb19uZXcoY29uc3QgY2hhciogZGF0YSwgZ3Vp
bnQgZmxhZykKLXsKLSAgICBUZXN0SW5mbyogaW5mbzsKLQotICAgIGluZm8gPSBnX3NsaWNlX25l
dyhUZXN0SW5mbyk7Ci0gICAgaW5mby0+ZGF0YSA9IGdfc3RyZHVwKGRhdGEpOwotICAgIGluZm8t
PmZsYWcgPSBmbGFnOwotCi0gICAgcmV0dXJuIGluZm87Ci19Ci0KLXZvaWQKLXRlc3RfaW5mb19k
ZXN0cm95KFRlc3RJbmZvKiBpbmZvKQotewotICAgIGdfZnJlZShpbmZvLT5kYXRhKTsKLSAgICBn
X3NsaWNlX2ZyZWUoVGVzdEluZm8sIGluZm8pOwotfQotCi1zdGF0aWMgdm9pZCBoaXRfdGVzdF9y
ZXN1bHRfZml4dHVyZV9zZXR1cChIaXRUZXN0UmVzdWx0Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0
cG9pbnRlciBkYXRhKQotewotICAgIGZpeHR1cmUtPndlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVco
d2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBnX29iamVjdF9yZWZfc2luayhmaXh0dXJlLT53
ZWJWaWV3KTsKLSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotICAgIGZp
eHR1cmUtPmluZm8gPSAoVGVzdEluZm8qKWRhdGE7Ci19Ci0KLXN0YXRpYyB2b2lkIGhpdF90ZXN0
X3Jlc3VsdF9maXh0dXJlX3RlYXJkb3duKEhpdFRlc3RSZXN1bHRGaXh0dXJlKiBmaXh0dXJlLCBn
Y29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+d2ViVmll
dyk7Ci0gICAgZ19tYWluX2xvb3BfdW5yZWYobG9vcCk7Ci0gICAgdGVzdF9pbmZvX2Rlc3Ryb3ko
Zml4dHVyZS0+aW5mbyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1sb2FkX3N0YXR1c19jYihXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3LAotICAgICAgICAgICAgICAgR1BhcmFtU3BlYyogc3BlYywKLSAgICAg
ICAgICAgICAgIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMg
PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYlZpZXcpOwotICAgIFRlc3RJbmZv
KiBpbmZvID0gKFRlc3RJbmZvKilkYXRhOwotCi0gICAgaWYgKHN0YXR1cyA9PSBXRUJLSVRfTE9B
RF9GSU5JU0hFRCkgewotICAgICAgICBXZWJLaXRIaXRUZXN0UmVzdWx0KiByZXN1bHQ7Ci0gICAg
ICAgIGd1aW50IGNvbnRleHQ7Ci0gICAgICAgIEdka0V2ZW50KiBldmVudCA9IGdka19ldmVudF9u
ZXcoR0RLX0JVVFRPTl9QUkVTUyk7Ci0gICAgICAgIFdlYktpdERPTU5vZGUqIG5vZGU7Ci0gICAg
ICAgIGdpbnQgeCwgeTsKLQotICAgICAgICAvKiBDbG9zZSBlbm91Z2ggdG8gMCwwICovCi0gICAg
ICAgIGV2ZW50LT5idXR0b24ueCA9IDU7Ci0gICAgICAgIGV2ZW50LT5idXR0b24ueSA9IDU7Ci0K
LSAgICAgICAgcmVzdWx0ID0gd2Via2l0X3dlYl92aWV3X2dldF9oaXRfdGVzdF9yZXN1bHQod2Vi
VmlldywgKEdka0V2ZW50QnV0dG9uKikgZXZlbnQpOwotICAgICAgICBnZGtfZXZlbnRfZnJlZShl
dmVudCk7Ci0gICAgICAgIGdfYXNzZXJ0KHJlc3VsdCk7Ci0KLSAgICAgICAgZ19vYmplY3RfZ2V0
KHJlc3VsdCwgImNvbnRleHQiLCAmY29udGV4dCwgTlVMTCk7Ci0gICAgICAgIGdfYXNzZXJ0KGNv
bnRleHQgJiBpbmZvLT5mbGFnKTsKLQotICAgICAgICBnX29iamVjdF9nZXQocmVzdWx0LCAiaW5u
ZXItbm9kZSIsICZub2RlLCBOVUxMKTsKLSAgICAgICAgZ19hc3NlcnQobm9kZSk7Ci0gICAgICAg
IGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfTk9ERShub2RlKSk7Ci0KLSAgICAgICAgZ19vYmplY3Rf
Z2V0KHJlc3VsdCwgIngiLCAmeCwgInkiLCAmeSwgTlVMTCk7Ci0gICAgICAgIGdfYXNzZXJ0X2Nt
cGludCh4LCA9PSwgNSk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcGludCh5LCA9PSwgNSk7Ci0KLSAg
ICAgICAgLyogV2UgY2FuIG9ubHkgdGVzdCB0aGVzZSBub2RlIHR5cGVzIGF0IHRoZSBtb21lbnQu
IEluIHRoZQotICAgICAgICAgKiBpbnB1dCBjYXNlIHRoZXJlIHNlZW1zIHRvIGJlIGFuIGV4dHJh
IGxheWVyIHdpdGggYSBESVYgb24KLSAgICAgICAgICogdG9wIG9mIHRoZSBpbnB1dCwgd2hpY2gg
Z2V0cyBhc3NpZ25lZCB0byB0aGUgaW5uZXItbm9kZS4KLSAgICAgICAgICogdGFnICovCi0gICAg
ICAgIGlmIChpbmZvLT5mbGFnID09IFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9ET0NV
TUVOVCkKLSAgICAgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9IVE1MX0VMRU1F
TlQobm9kZSkpOwotICAgICAgICBlbHNlIGlmIChpbmZvLT5mbGFnID09IFdFQktJVF9ISVRfVEVT
VF9SRVNVTFRfQ09OVEVYVF9JTUFHRSkKLSAgICAgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01f
SVNfSFRNTF9JTUFHRV9FTEVNRU5UKG5vZGUpKTsKLSAgICAgICAgZWxzZSBpZiAoaW5mby0+Zmxh
ZyA9PSBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfTElOSykgewotICAgICAgICAgICAg
LyogVGhlIGhpdCB0ZXN0IHdpbGwgZ2l2ZSB1cyB0aGUgaW5uZXIgdGV4dCBub2RlLCB3ZSB3YW50
Ci0gICAgICAgICAgICAgKiB0aGUgQSB0YWcgKi8KLSAgICAgICAgICAgIFdlYktpdERPTU5vZGUq
IHBhcmVudCA9IHdlYmtpdF9kb21fbm9kZV9nZXRfcGFyZW50X25vZGUobm9kZSk7Ci0gICAgICAg
ICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfQU5DSE9SX0VMRU1FTlQocGFyZW50KSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBnX29iamVjdF91bnJlZihyZXN1bHQpOwotICAgICAgICBn
X21haW5fbG9vcF9xdWl0KGxvb3ApOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQKLXRlc3Rfd2Vi
a2l0X2hpdF90ZXN0X3Jlc3VsdChIaXRUZXN0UmVzdWx0Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0
cG9pbnRlciBkYXRhKQotewotICAgIFRlc3RJbmZvKiBpbmZvID0gKFRlc3RJbmZvKilkYXRhOwot
ICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgNTAsIDUwIH07Ci0KLSAgICB3
ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoZml4dHVyZS0+d2ViVmlldywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW5mby0+ZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgInRleHQvaHRtbCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1
dGYtOCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlOi8vIik7Ci0gICAg
Z3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldyksICZh
bGxvY2F0aW9uKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJub3Rp
Znk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhsb2FkX3N0YXR1c19jYiksIGluZm8pOwotICAg
IGdfbWFpbl9sb29wX3J1bihsb29wKTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBh
cmd2KQotewotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLQotICAgIGdf
dGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0KLSAgICBnX3Rlc3Rf
YWRkKCIvd2Via2l0L2hpdHRlc3RyZXN1bHQvZG9jdW1lbnQiLCBIaXRUZXN0UmVzdWx0Rml4dHVy
ZSwgCi0gICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KCI8aHRtbD48Ym9keT48aDE+V2ViS2l0
R1RLKyE8L2gxPjwvYm9keT48L2h0bWw+IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
V0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0RPQ1VNRU5UKSwKLSAgICAgICAgICAgICAg
IGhpdF90ZXN0X3Jlc3VsdF9maXh0dXJlX3NldHVwLCB0ZXN0X3dlYmtpdF9oaXRfdGVzdF9yZXN1
bHQsIGhpdF90ZXN0X3Jlc3VsdF9maXh0dXJlX3RlYXJkb3duKTsKLSAgICAvKiBXZSBoYXJkY29k
ZSBhbGwgZWxlbWVudHMgdG8gYmUgYXQgMCwwIHNvIHRoYXQgd2Uga25vdyB3aGVyZSB0bwotICAg
ICAqIGdlbmVyYXRlIHRoZSBidXR0b24gZXZlbnRzICovCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtp
dC9oaXR0ZXN0cmVzdWx0L2ltYWdlIiwgSGl0VGVzdFJlc3VsdEZpeHR1cmUsCi0gICAgICAgICAg
ICAgICB0ZXN0X2luZm9fbmV3KCI8aHRtbD48Ym9keT48aW1nIHN0eWxlPSdwb3NpdGlvbjphYnNv
bHV0ZTsgbGVmdDowOyB0b3A6MCdzcmM9JzB4ZGVhZGJlZWYnIHdpZHRoPTUwIGhlaWdodD01MD48
L2ltZz48L2JvZHk+PC9odG1sPiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJ
VF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9JTUFHRSksCi0gICAgICAgICAgICAgICBoaXRfdGVz
dF9yZXN1bHRfZml4dHVyZV9zZXR1cCwgdGVzdF93ZWJraXRfaGl0X3Rlc3RfcmVzdWx0LCBoaXRf
dGVzdF9yZXN1bHRfZml4dHVyZV90ZWFyZG93bik7Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9o
aXR0ZXN0cmVzdWx0L2VkaXRhYmxlIiwgSGl0VGVzdFJlc3VsdEZpeHR1cmUsCi0gICAgICAgICAg
ICAgICB0ZXN0X2luZm9fbmV3KCI8aHRtbD48Ym9keT48aW5wdXQgc3R5bGU9J3Bvc2l0aW9uOmFi
c29sdXRlOyBsZWZ0OjA7IHRvcDowJyBzaXplPSczNSc+PC9pbnB1dD4+PC9ib2R5PjwvaHRtbD4i
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NP
TlRFWFRfRURJVEFCTEUpLAotICAgICAgICAgICAgICAgaGl0X3Rlc3RfcmVzdWx0X2ZpeHR1cmVf
c2V0dXAsIHRlc3Rfd2Via2l0X2hpdF90ZXN0X3Jlc3VsdCwgaGl0X3Rlc3RfcmVzdWx0X2ZpeHR1
cmVfdGVhcmRvd24pOwotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvaGl0dGVzdHJlc3VsdC9saW5r
IiwgSGl0VGVzdFJlc3VsdEZpeHR1cmUsCi0gICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KCI8
aHRtbD48Ym9keT48YSBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MDsgdG9wOjAnIGhy
ZWY9J2h0dHA6Ly93d3cuZXhhbXBsZS5jb20nPkhFTExPIFdPUkxEPC9hPjwvYm9keT48L2h0bWw+
IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9D
T05URVhUX0xJTkspLAotICAgICAgICAgICAgICAgaGl0X3Rlc3RfcmVzdWx0X2ZpeHR1cmVfc2V0
dXAsIHRlc3Rfd2Via2l0X2hpdF90ZXN0X3Jlc3VsdCwgaGl0X3Rlc3RfcmVzdWx0X2ZpeHR1cmVf
dGVhcmRvd24pOwotICAgICAgICAgICAgICAgCi0gICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7Ci19
Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RodHRwYmFja2VuZC5j
IGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGh0dHBiYWNrZW5kLmMKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDkzNzc2ODcuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9n
dGsvdGVzdHMvdGVzdGh0dHBiYWNrZW5kLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEd1c3Rhdm8gTm9yb25oYSBTaWx2YQotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNp
bmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRlIDxndGsv
Z3RrLmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgotCi0vLyBOb3QgeWV0IHB1YmxpYyBB
UEkKLVNvdXBNZXNzYWdlKiB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X2dldF9tZXNzYWdlKFdlYktp
dE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0KTsKLQotc3RhdGljIGdib29sZWFuIG5hdmlnYXRpb25f
cG9saWN5X2RlY2lzaW9uX3JlcXVlc3RlZF9jYihXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2Vi
S2l0V2ViRnJhbWUqIHdlYl9mcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdl
YktpdFdlYk5hdmlnYXRpb25BY3Rpb24qIGFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0V2ViUG9saWN5RGVjaXNpb24q
IGRlY2lzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBncG9pbnRlciBkYXRhKQotewotICAgIFNvdXBNZXNzYWdlKiBtZXNzYWdlID0g
d2Via2l0X25ldHdvcmtfcmVxdWVzdF9nZXRfbWVzc2FnZShyZXF1ZXN0KTsKLQotICAgIC8qIDEg
LT4gd2Via2l0X25ldHdvcmtfcmVxdWVzdF93aXRoX2NvcmVfcmVxdWVzdAotICAgICAqCi0gICAg
ICogVGhlIFNvdXBNZXNzYWdlIGlzIGNyZWF0ZWQgZXhjbHVzaXZlbHkgZm9yIHRoZSBlbWlzc2lv
biBvZiB0aGlzCi0gICAgICogc2lnbmFsLgotICAgICAqLwotICAgIGdfYXNzZXJ0X2NtcGludChH
X09CSkVDVChtZXNzYWdlKS0+cmVmX2NvdW50LCA9PSwgMSk7Ci0KLSAgICByZXR1cm4gRkFMU0U7
Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfc291cF9tZXNzYWdlX2xpZmV0aW1lKCkKLXsKLSAgICBX
ZWJLaXRXZWJWaWV3KiB3ZWJfdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdf
bmV3KCkpOwotCi0gICAgZ19vYmplY3RfcmVmX3Npbmsod2ViX3ZpZXcpOwotCi0gICAgZ19zaWdu
YWxfY29ubmVjdCh3ZWJfdmlldywgIm5hdmlnYXRpb24tcG9saWN5LWRlY2lzaW9uLXJlcXVlc3Rl
ZCIsCi0gICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKG5hdmlnYXRpb25fcG9saWN5X2Rl
Y2lzaW9uX3JlcXVlc3RlZF9jYiksCi0gICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLQotICAg
IC8qIGxvYWRfdXJpIHdpbGwgdHJpZ2dlciB0aGUgbmF2aWdhdGlvbi1wb2xpY3ktZGVjaXNpb24t
cmVxdWVzdGVkCi0gICAgICogc2lnbmFsIGVtaXNzaW9uOwotICAgICAqLwotICAgIHdlYmtpdF93
ZWJfdmlld19sb2FkX3VyaSh3ZWJfdmlldywgImh0dHA6Ly8xMjcuMC4wLjEvIik7Ci0KLSAgICBn
X29iamVjdF91bnJlZih3ZWJfdmlldyk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiog
YXJndikKLXsKLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAgICBn
X3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwotICAgIGdfdGVzdF9h
ZGRfZnVuYygiL3dlYmtpdC9zb3VwbWVzc2FnZS9saWZldGltZSIsIHRlc3Rfc291cF9tZXNzYWdl
X2xpZmV0aW1lKTsKLSAgICByZXR1cm4gZ190ZXN0X3J1biAoKTsKLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RrZXlldmVudHMuYyBiL1NvdXJjZS9XZWJLaXQvZ3Rr
L3Rlc3RzL3Rlc3RrZXlldmVudHMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWNk
MDFmMy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0a2V5ZXZlbnRz
LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzOTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOSwgMjAxMCBNYXJ0aW4gUm9iaW5zb24gPG1yb2JpbnNvbkB3ZWJraXQub3JnPgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0j
aW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRlIDx3
ZWJraXQvd2Via2l0Lmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4K
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NvbnRleHRSZWYuaD4KLQotdHlwZWRlZiBzdHJ1
Y3QgewotICAgIGNoYXIqIHBhZ2U7Ci0gICAgY2hhciogdGV4dDsKLSAgICBnYm9vbGVhbiBzaG91
bGRCZUhhbmRsZWQ7Ci19IFRlc3RJbmZvOwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgR3RrV2lk
Z2V0KiB3aW5kb3c7Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldzsKLSAgICBHTWFpbkxvb3Aq
IGxvb3A7Ci0gICAgVGVzdEluZm8qIGluZm87Ci19IEtleUV2ZW50Rml4dHVyZTsKLQotVGVzdElu
Zm8qCi10ZXN0X2luZm9fbmV3KGNvbnN0IGNoYXIqIHBhZ2UsIGdib29sZWFuIHNob3VsZEJlSGFu
ZGxlZCkKLXsKLSAgICBUZXN0SW5mbyogaW5mbzsKLQotICAgIGluZm8gPSBnX3NsaWNlX25ldyhU
ZXN0SW5mbyk7Ci0gICAgaW5mby0+cGFnZSA9IGdfc3RyZHVwKHBhZ2UpOwotICAgIGluZm8tPnNo
b3VsZEJlSGFuZGxlZCA9IHNob3VsZEJlSGFuZGxlZDsKLSAgICBpbmZvLT50ZXh0ID0gMDsKLQot
ICAgIHJldHVybiBpbmZvOwotfQotCi12b2lkCi10ZXN0X2luZm9fZGVzdHJveShUZXN0SW5mbyog
aW5mbykKLXsKLSAgICBnX2ZyZWUoaW5mby0+cGFnZSk7Ci0gICAgZ19mcmVlKGluZm8tPnRleHQp
OwotICAgIGdfc2xpY2VfZnJlZShUZXN0SW5mbywgaW5mbyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGtl
eV9ldmVudF9maXh0dXJlX3NldHVwKEtleUV2ZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9p
bnRlciBkYXRhKQotewotICAgIGZpeHR1cmUtPmxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwg
VFJVRSk7Ci0KLSAgICBmaXh0dXJlLT53aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9X
X1RPUExFVkVMKTsKLSAgICBmaXh0dXJlLT53ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtp
dF93ZWJfdmlld19uZXcoKSk7Ci0KLSAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVS
KGZpeHR1cmUtPndpbmRvdyksIEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldykpOwotfQotCi1z
dGF0aWMgdm9pZCBrZXlfZXZlbnRfZml4dHVyZV90ZWFyZG93bihLZXlFdmVudEZpeHR1cmUqIGZp
eHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koZml4
dHVyZS0+d2luZG93KTsKLSAgICBnX21haW5fbG9vcF91bnJlZihmaXh0dXJlLT5sb29wKTsKLSAg
ICB0ZXN0X2luZm9fZGVzdHJveShmaXh0dXJlLT5pbmZvKTsKLX0KLQotc3RhdGljIGdib29sZWFu
IGtleV9wcmVzc19ldmVudF9jYihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHZGtFdmVudCogZXZl
bnQsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJlID0gKEtl
eUV2ZW50Rml4dHVyZSopZGF0YTsKLSAgICBnYm9vbGVhbiBoYW5kbGVkID0gR1RLX1dJREdFVF9H
RVRfQ0xBU1MoZml4dHVyZS0+d2ViVmlldyktPmtleV9wcmVzc19ldmVudChHVEtfV0lER0VUKGZp
eHR1cmUtPndlYlZpZXcpLCAmZXZlbnQtPmtleSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGhhbmRs
ZWQsID09LCBmaXh0dXJlLT5pbmZvLT5zaG91bGRCZUhhbmRsZWQpOwotCi0gICAgcmV0dXJuIEZB
TFNFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4ga2V5X3JlbGVhc2VfZXZlbnRfY2IoV2ViS2l0V2Vi
Vmlldyogd2ViVmlldywgR2RrRXZlbnQqIGV2ZW50LCBncG9pbnRlciBkYXRhKQotewotICAgIC8v
IFdlYkNvcmUgbmV2ZXIgc2VlbXMgdG8gbWFyayBrZXl1cCBldmVudHMgYXMgaGFuZGxlZC4KLSAg
ICBLZXlFdmVudEZpeHR1cmUqIGZpeHR1cmUgPSAoS2V5RXZlbnRGaXh0dXJlKilkYXRhOwotICAg
IGdib29sZWFuIGhhbmRsZWQgPSBHVEtfV0lER0VUX0dFVF9DTEFTUyhmaXh0dXJlLT53ZWJWaWV3
KS0+a2V5X3ByZXNzX2V2ZW50KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldyksICZldmVudC0+
a2V5KTsKLSAgICBnX2Fzc2VydCghaGFuZGxlZCk7Ci0KLSAgICBnX21haW5fbG9vcF9xdWl0KGZp
eHR1cmUtPmxvb3ApOwotCi0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0
X2tleXByZXNzX2V2ZW50c19sb2FkX3N0YXR1c19jYihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBH
UGFyYW1TcGVjKiBzcGVjLCBncG9pbnRlciBkYXRhKQotewotICAgIEtleUV2ZW50Rml4dHVyZSog
Zml4dHVyZSA9IChLZXlFdmVudEZpeHR1cmUqKWRhdGE7Ci0gICAgV2ViS2l0TG9hZFN0YXR1cyBz
dGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYlZpZXcpOwotICAgIGlm
IChzdGF0dXMgPT0gV0VCS0lUX0xPQURfRklOSVNIRUQpIHsKLSAgICAgICAgZ19zaWduYWxfY29u
bmVjdChmaXh0dXJlLT53ZWJWaWV3LCAia2V5LXByZXNzLWV2ZW50IiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICBHX0NBTExCQUNLKGtleV9wcmVzc19ldmVudF9jYiksIGZpeHR1cmUpOwotICAg
ICAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJrZXktcmVsZWFzZS1ldmVu
dCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhrZXlfcmVsZWFzZV9ldmVu
dF9jYiksIGZpeHR1cmUpOwotICAgICAgICBpZiAoIWd0a190ZXN0X3dpZGdldF9zZW5kX2tleShH
VEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnZGtfdW5pY29kZV90b19rZXl2YWwoJ2EnKSwgMCkpCi0gICAgICAgICAgICBn
X2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAgIH0KLQotfQotCi1nYm9vbGVhbiBtYXBfZXZlbnRf
Y2IoR3RrV2lkZ2V0ICp3aWRnZXQsIEdka0V2ZW50KiBldmVudCwgZ3BvaW50ZXIgZGF0YSkKLXsK
LSAgICBLZXlFdmVudEZpeHR1cmUqIGZpeHR1cmUgPSAoS2V5RXZlbnRGaXh0dXJlKilkYXRhOwot
ICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhmaXh0dXJlLT53ZWJWaWV3LCBmaXh0dXJl
LT5pbmZvLT5wYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGV4dC9odG1s
IiwgInV0Zi04IiwgImZpbGU6Ly8iKTsKLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2
b2lkIHNldHVwX2tleWV2ZW50X3Rlc3QoS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rw
b2ludGVyIGRhdGEsIEdDYWxsYmFjayBsb2FkX2V2ZW50X2NhbGxiYWNrKQotewotICAgIGZpeHR1
cmUtPmluZm8gPSAoVGVzdEluZm8qKWRhdGE7Ci0gICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJl
LT53aW5kb3csICJtYXAtZXZlbnQiLAotICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyht
YXBfZXZlbnRfY2IpLCBmaXh0dXJlKTsKLQotICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1cyhHVEtf
V0lER0VUKGZpeHR1cmUtPndlYlZpZXcpKTsKLSAgICBndGtfd2lkZ2V0X3Nob3coZml4dHVyZS0+
d2luZG93KTsKLSAgICBndGtfd2lkZ2V0X3Nob3coR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3
KSk7Ci0gICAgZ3RrX3dpbmRvd19wcmVzZW50KEdUS19XSU5ET1coZml4dHVyZS0+d2luZG93KSk7
Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJub3RpZnk6OmxvYWQt
c3RhdHVzIiwKLSAgICAgICAgICAgICAgICAgICAgIGxvYWRfZXZlbnRfY2FsbGJhY2ssIGZpeHR1
cmUpOwotCi0gICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1cmUtPmxvb3ApOwotfQotCi1zdGF0aWMg
dm9pZCB0ZXN0X2tleXByZXNzX2V2ZW50cyhLZXlFdmVudEZpeHR1cmUqIGZpeHR1cmUsIGdjb25z
dHBvaW50ZXIgZGF0YSkKLXsKLSAgICBzZXR1cF9rZXlldmVudF90ZXN0KGZpeHR1cmUsIGRhdGEs
IEdfQ0FMTEJBQ0sodGVzdF9rZXlwcmVzc19ldmVudHNfbG9hZF9zdGF0dXNfY2IpKTsKLX0KLQot
c3RhdGljIGdib29sZWFuIGVsZW1lbnRfdGV4dF9lcXVhbF90byhKU0NvbnRleHRSZWYgY29udGV4
dCwgY29uc3QgZ2NoYXIqIHRleHQpCi17Ci0gICAgSlNTdHJpbmdSZWYgc2NyaXB0U3RyaW5nID0g
SlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoCi0gICAgICAid2luZG93LmRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKFwiaW5cIikudmFsdWU7Iik7Ci0gICAgSlNWYWx1ZVJlZiB2YWx1ZSA9IEpT
RXZhbHVhdGVTY3JpcHQoY29udGV4dCwgc2NyaXB0U3RyaW5nLCAwLCAwLCAwLCAwKTsKLSAgICBK
U1N0cmluZ1JlbGVhc2Uoc2NyaXB0U3RyaW5nKTsKLQotICAgIC8vIElmIHRoZSB2YWx1ZSBpc24n
dCBhIHN0cmluZywgdGhlIGVsZW1lbnQgaXMgcHJvYmFibHkgYSBkaXYKLSAgICAvLyBzbyBncmFi
IHRoZSBpbm5lclRleHQgaW5zdGVhZC4KLSAgICBpZiAoIUpTVmFsdWVJc1N0cmluZyhjb250ZXh0
LCB2YWx1ZSkpIHsKLSAgICAgICAgSlNTdHJpbmdSZWYgc2NyaXB0U3RyaW5nID0gSlNTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoCi0gICAgICAgICAgIndpbmRvdy5kb2N1bWVudC5nZXRFbGVt
ZW50QnlJZChcImluXCIpLmlubmVyVGV4dDsiKTsKLSAgICAgICAgdmFsdWUgPSBKU0V2YWx1YXRl
U2NyaXB0KGNvbnRleHQsIHNjcmlwdFN0cmluZywgMCwgMCwgMCwgMCk7Ci0gICAgICAgIEpTU3Ry
aW5nUmVsZWFzZShzY3JpcHRTdHJpbmcpOwotICAgIH0KLQotICAgIGdfYXNzZXJ0KEpTVmFsdWVJ
c1N0cmluZyhjb250ZXh0LCB2YWx1ZSkpOwotICAgIEpTU3RyaW5nUmVmIGlucHV0U3RyaW5nID0g
SlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCB2YWx1ZSwgMCk7Ci0gICAgZ19hc3NlcnQoaW5w
dXRTdHJpbmcpOwotCi0gICAgZ2ludCBzaXplID0gSlNTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJp
bmdTaXplKGlucHV0U3RyaW5nKTsKLSAgICBnY2hhciogY1N0cmluZyA9IGdfbWFsbG9jKHNpemUp
OwotICAgIEpTU3RyaW5nR2V0VVRGOENTdHJpbmcoaW5wdXRTdHJpbmcsIGNTdHJpbmcsIHNpemUp
OwotICAgIEpTU3RyaW5nUmVsZWFzZShpbnB1dFN0cmluZyk7Ci0KLSAgICBnYm9vbGVhbiByZXN1
bHQgPSBnX3V0ZjhfY29sbGF0ZShjU3RyaW5nLCB0ZXh0KSA9PSAwOwotICAgIGdfZnJlZShjU3Ry
aW5nKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X2ltZV9sb2Fk
X3N0YXR1c19jYihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHUGFyYW1TcGVjKiBzcGVjLCBncG9p
bnRlciBkYXRhKQotewotICAgIEtleUV2ZW50Rml4dHVyZSogZml4dHVyZSA9IChLZXlFdmVudEZp
eHR1cmUqKWRhdGE7Ci0gICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYlZpZXcpOwotICAgIGlmIChzdGF0dXMgIT0gV0VCS0lUX0xP
QURfRklOSVNIRUQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEpTR2xvYmFsQ29udGV4dFJlZiBj
b250ZXh0ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfZ2xvYmFsX2NvbnRleHQoCi0gICAgICAgIHdl
YmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh3ZWJWaWV3KSk7Ci0gICAgZ19hc3NlcnQoY29u
dGV4dCk7Ci0KLSAgICBHdGtJTUNvbnRleHQqIGltQ29udGV4dCA9IDA7Ci0gICAgZ19vYmplY3Rf
Z2V0KHdlYlZpZXcsICJpbS1jb250ZXh0IiwgJmltQ29udGV4dCwgTlVMTCk7Ci0gICAgZ19hc3Nl
cnQoaW1Db250ZXh0KTsKLQotICAgIC8vIFRlc3QgdGhhdCBjb21taXRzIHRoYXQgaGFwcGVuIG91
dHNpZGUgb2Yga2V5IGV2ZW50cwotICAgIC8vIGNoYW5nZSB0aGUgdGV4dCBmaWVsZCBpbW1lZGlh
dGVseS4gVGhpcyBjbG9zZWx5IHJlcGxpY2F0ZXMKLSAgICAvLyB0aGUgYmVoYXZpb3Igb2YgU0NJ
TS4KLSAgICBnX2Fzc2VydChlbGVtZW50X3RleHRfZXF1YWxfdG8oY29udGV4dCwgIiIpKTsKLSAg
ICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoaW1Db250ZXh0LCAiY29tbWl0IiwgImEiKTsKLSAgICBn
X2Fzc2VydChlbGVtZW50X3RleHRfZXF1YWxfdG8oY29udGV4dCwgImEiKSk7Ci0gICAgZ19zaWdu
YWxfZW1pdF9ieV9uYW1lKGltQ29udGV4dCwgImNvbW1pdCIsICJiIik7Ci0gICAgZ19hc3NlcnQo
ZWxlbWVudF90ZXh0X2VxdWFsX3RvKGNvbnRleHQsICJhYiIpKTsKLSAgICBnX3NpZ25hbF9lbWl0
X2J5X25hbWUoaW1Db250ZXh0LCAiY29tbWl0IiwgImMiKTsKLSAgICBnX2Fzc2VydChlbGVtZW50
X3RleHRfZXF1YWxfdG8oY29udGV4dCwgImFiYyIpKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGlt
Q29udGV4dCk7Ci0gICAgZ19tYWluX2xvb3BfcXVpdChmaXh0dXJlLT5sb29wKTsKLX0KLQotc3Rh
dGljIHZvaWQgdGVzdF9pbWUoS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVy
IGRhdGEpCi17Ci0gICAgc2V0dXBfa2V5ZXZlbnRfdGVzdChmaXh0dXJlLCBkYXRhLCBHX0NBTExC
QUNLKHRlc3RfaW1lX2xvYWRfc3RhdHVzX2NiKSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiB2ZXJp
ZnlfY29udGVudHMoZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBLZXlFdmVudEZpeHR1cmUqIGZpeHR1
cmUgPSAoS2V5RXZlbnRGaXh0dXJlKilkYXRhOwotICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250
ZXh0ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfZ2xvYmFsX2NvbnRleHQoCi0gICAgICAgIHdlYmtp
dF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZShmaXh0dXJlLT53ZWJWaWV3KSk7Ci0gICAgZ19hc3Nl
cnQoY29udGV4dCk7Ci0KLSAgICBnX2Fzc2VydChlbGVtZW50X3RleHRfZXF1YWxfdG8oY29udGV4
dCwgZml4dHVyZS0+aW5mby0+dGV4dCkpOwotICAgIGdfbWFpbl9sb29wX3F1aXQoZml4dHVyZS0+
bG9vcCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X2Jsb2NraW5n
X2xvYWRfc3RhdHVzX2NiKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEdQYXJhbVNwZWMqIHNwZWMs
IGdwb2ludGVyIGRhdGEpCi17Ci0gICAgS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJlID0gKEtleUV2
ZW50Rml4dHVyZSopZGF0YTsKLSAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93
ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMod2ViVmlldyk7Ci0gICAgaWYgKHN0YXR1cyAhPSBXRUJL
SVRfTE9BRF9GSU5JU0hFRCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVGhlIGZpcnN0IGtl
eXByZXNzIGV2ZW50IHNob3VsZCBub3QgbW9kaWZ5IHRoZSBmaWVsZC4KLSAgICBmaXh0dXJlLT5p
bmZvLT50ZXh0ID0gZ19zdHJkdXAoImJjIik7Ci0gICAgaWYgKCFndGtfdGVzdF93aWRnZXRfc2Vu
ZF9rZXkoR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdka191bmljb2RlX3RvX2tleXZhbCgnYScpLCAwKSkKLSAgICAgICAgZ19h
c3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICBpZiAoIWd0a190ZXN0X3dpZGdldF9zZW5kX2tleShH
VEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdka191bmljb2RlX3RvX2tleXZhbCgnYicpLCAwKSkKLSAgICAgICAgZ19hc3NlcnRf
bm90X3JlYWNoZWQoKTsKLSAgICBpZiAoIWd0a190ZXN0X3dpZGdldF9zZW5kX2tleShHVEtfV0lE
R0VUKGZpeHR1cmUtPndlYlZpZXcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdka191bmljb2RlX3RvX2tleXZhbCgnYycpLCAwKSkKLSAgICAgICAgZ19hc3NlcnRfbm90X3Jl
YWNoZWQoKTsKLQotICAgIGdfaWRsZV9hZGQodmVyaWZ5X2NvbnRlbnRzLCBmaXh0dXJlKTsKLX0K
LQotc3RhdGljIHZvaWQgdGVzdF9ibG9ja2luZyhLZXlFdmVudEZpeHR1cmUqIGZpeHR1cmUsIGdj
b25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBzZXR1cF9rZXlldmVudF90ZXN0KGZpeHR1cmUsIGRh
dGEsIEdfQ0FMTEJBQ0sodGVzdF9ibG9ja2luZ19sb2FkX3N0YXR1c19jYikpOwotfQotCi0jaWYg
ZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkKLXN0YXRpYyB2b2lkIHRlc3RfeGltX2xvYWRfc3Rh
dHVzX2NiKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEdQYXJhbVNwZWMqIHNwZWMsIGdwb2ludGVy
IGRhdGEpCi17Ci0gICAgS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJlID0gKEtleUV2ZW50Rml4dHVy
ZSopZGF0YTsKLSAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJfdmlld19n
ZXRfbG9hZF9zdGF0dXMod2ViVmlldyk7Ci0gICAgaWYgKHN0YXR1cyAhPSBXRUJLSVRfTE9BRF9G
SU5JU0hFRCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3RrSU1Db250ZXh0KiBpbUNvbnRleHQg
PSAwOwotICAgIGdfb2JqZWN0X2dldCh3ZWJWaWV3LCAiaW0tY29udGV4dCIsICZpbUNvbnRleHQs
IE5VTEwpOwotICAgIGdfYXNzZXJ0KGltQ29udGV4dCk7Ci0KLSAgICBnY2hhciogb3JpZ2luYWxJ
ZCA9IGdfc3RyZHVwKGd0a19pbV9tdWx0aWNvbnRleHRfZ2V0X2NvbnRleHRfaWQoR1RLX0lNX01V
TFRJQ09OVEVYVChpbUNvbnRleHQpKSk7Ci0gICAgZ3RrX2ltX211bHRpY29udGV4dF9zZXRfY29u
dGV4dF9pZChHVEtfSU1fTVVMVElDT05URVhUKGltQ29udGV4dCksICJ4aW0iKTsKLQotICAgIC8v
IFRlc3QgdGhhdCBjb21taXRzIHRoYXQgaGFwcGVuIG91dHNpZGUgb2Yga2V5IGV2ZW50cwotICAg
IC8vIGNoYW5nZSB0aGUgdGV4dCBmaWVsZCBpbW1lZGlhdGVseS4gVGhpcyBjbG9zZWx5IHJlcGxp
Y2F0ZXMKLSAgICAvLyB0aGUgYmVoYXZpb3Igb2YgU0NJTS4KLSAgICBmaXh0dXJlLT5pbmZvLT50
ZXh0ID0gZ19zdHJkdXAoImRlYmlhbiIpOwotICAgIGlmICghZ3RrX3Rlc3Rfd2lkZ2V0X3NlbmRf
a2V5KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldyksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnZGtfdW5pY29kZV90b19rZXl2YWwoJ2QnKSwgMCkpCi0gICAgICAgIGdfYXNz
ZXJ0X25vdF9yZWFjaGVkKCk7Ci0gICAgaWYgKCFndGtfdGVzdF93aWRnZXRfc2VuZF9rZXkoR1RL
X1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2RrX3VuaWNvZGVfdG9fa2V5dmFsKCdlJyksIDApKQotICAgICAgICBnX2Fzc2VydF9ub3RfcmVh
Y2hlZCgpOwotICAgIGlmICghZ3RrX3Rlc3Rfd2lkZ2V0X3NlbmRfa2V5KEdUS19XSURHRVQoZml4
dHVyZS0+d2ViVmlldyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdka191bmljb2Rl
X3RvX2tleXZhbCgnYicpLCAwKSkKLSAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKLSAg
ICBpZiAoIWd0a190ZXN0X3dpZGdldF9zZW5kX2tleShHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZp
ZXcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGtfdW5pY29kZV90b19rZXl2YWwo
J2knKSwgMCkpCi0gICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0gICAgaWYgKCFndGtf
dGVzdF93aWRnZXRfc2VuZF9rZXkoR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ2RrX3VuaWNvZGVfdG9fa2V5dmFsKCdhJyksIDApKQot
ICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAgIGlmICghZ3RrX3Rlc3Rfd2lkZ2V0
X3NlbmRfa2V5KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldyksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdka191bmljb2RlX3RvX2tleXZhbCgnbicpLCAwKSkKLSAgICAgICAgZ19h
c3NlcnRfbm90X3JlYWNoZWQoKTsKLQotICAgIGd0a19pbV9tdWx0aWNvbnRleHRfc2V0X2NvbnRl
eHRfaWQoR1RLX0lNX01VTFRJQ09OVEVYVChpbUNvbnRleHQpLCBvcmlnaW5hbElkKTsKLSAgICBn
X2ZyZWUob3JpZ2luYWxJZCk7Ci0gICAgZ19vYmplY3RfdW5yZWYoaW1Db250ZXh0KTsKLQotICAg
IGdfaWRsZV9hZGQodmVyaWZ5X2NvbnRlbnRzLCBmaXh0dXJlKTsKLX0KLQotc3RhdGljIHZvaWQg
dGVzdF94aW0oS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17
Ci0gICAgc2V0dXBfa2V5ZXZlbnRfdGVzdChmaXh0dXJlLCBkYXRhLCBHX0NBTExCQUNLKHRlc3Rf
eGltX2xvYWRfc3RhdHVzX2NiKSk7Ci19Ci0jZW5kaWYKLQotaW50IG1haW4oaW50IGFyZ2MsIGNo
YXIqKiBhcmd2KQotewotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLQot
ICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0KLQotICAg
IC8vIFdlJ2xsIHRlc3QgaW5wdXQgb24gYSBzbGV3IG9mIGRpZmZlcmVudCBub2RlIHR5cGVzLiBL
ZXkgZXZlbnRzIHRvCi0gICAgLy8gdGV4dCBpbnB1dHMgYW5kIGVkaXRhYmxlIGRpdnMgc2hvdWxk
IGJlIG1hcmtlZCBhcyBoYW5kbGVkLiBLZXkgZXZlbnRzCi0gICAgLy8gdG8gYnV0dG9ucyBhbmQg
bGlua3Mgc2hvdWxkIG5vdC4KLSAgICBjb25zdCBjaGFyKiB0ZXh0aW5wdXRfaHRtbCA9ICI8aHRt
bD48Ym9keT48aW5wdXQgaWQ9XCJpblwiIHR5cGU9XCJ0ZXh0XCI+IgotICAgICAgICAiPHNjcmlw
dD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW4nKS5mb2N1cygpOzwvc2NyaXB0PjwvYm9keT48
L2h0bWw+IjsKLSAgICBjb25zdCBjaGFyKiBidXR0b25faHRtbCA9ICI8aHRtbD48Ym9keT48aW5w
dXQgaWQ9XCJpblwiIHR5cGU9XCJidXR0b25cIj4iCi0gICAgICAgICI8c2NyaXB0PmRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdpbicpLmZvY3VzKCk7PC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4iOwot
ICAgIGNvbnN0IGNoYXIqIGxpbmtfaHRtbCA9ICI8aHRtbD48Ym9keT48YSBocmVmPVwiaHR0cDov
L3d3dy5nbm9tZS5vcmdcIiBpZD1cImluXCI+IgotICAgICAgICAiTElOS1kgTUNMSU5LRVJTT048
L2E+PHNjcmlwdD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW4nKS5mb2N1cygpOzwvc2NyaXB0
PiIKLSAgICAgICAgIjwvYm9keT48L2h0bWw+IjsKLSAgICBjb25zdCBjaGFyKiBkaXZfaHRtbCA9
ICI8aHRtbD48Ym9keT48ZGl2IGlkPVwiaW5cIiBjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCI+Igot
ICAgICAgICAiPHNjcmlwdD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW4nKS5mb2N1cygpOzwv
c2NyaXB0PjwvYm9keT48L2h0bWw+IjsKLQotICAgIC8vIFRoZXNlIGFyZSBzaW1pbGFyIHRvIHRo
ZSBibG9ja3MgYWJvdmUsIGJ1dCB0aGV5IHNob3VsZCBibG9jayB0aGUgZmlyc3QKLSAgICAvLyBr
ZXlwcmVzcyBtb2RpZnlpbmcgdGhlIGVkaXRhYmxlIG5vZGUuCi0gICAgY29uc3QgY2hhciogdGV4
dGlucHV0X2h0bWxfYmxvY2tpbmcgPSAiPGh0bWw+PGJvZHk+IgotICAgICAgICAiPGlucHV0IGlk
PVwiaW5cIiB0eXBlPVwidGV4dFwiICIKLSAgICAgICAgIm9ua2V5cHJlc3M9XCJpZiAoZmlyc3Qp
IHtldmVudC5wcmV2ZW50RGVmYXVsdCgpO2ZpcnN0PWZhbHNlO31cIj4iCi0gICAgICAgICI8c2Ny
aXB0PmZpcnN0ID0gdHJ1ZTtcbmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbicpLmZvY3VzKCk7
PC9zY3JpcHQ+XG4iCi0gICAgICAgICI8L3NjcmlwdD48L2JvZHk+PC9odG1sPiI7Ci0gICAgY29u
c3QgY2hhciogZGl2X2h0bWxfYmxvY2tpbmcgPSAiPGh0bWw+PGJvZHk+IgotICAgICAgICAiPGRp
diBpZD1cImluXCIgY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiICIKLSAgICAgICAgIm9ua2V5cHJl
c3M9XCJpZiAoZmlyc3QpIHtldmVudC5wcmV2ZW50RGVmYXVsdCgpO2ZpcnN0PWZhbHNlO31cIj4i
Ci0gICAgICAgICI8c2NyaXB0PmZpcnN0ID0gdHJ1ZTsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J2luJykuZm9jdXMoKTs8L3NjcmlwdD5cbiIKLSAgICAgICAgIjwvc2NyaXB0PjwvYm9keT48L2h0
bWw+IjsKLQotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQva2V5ZXZlbnRzL2V2ZW50LXRleHRpbnB1
dCIsIEtleUV2ZW50Rml4dHVyZSwKLSAgICAgICAgICAgICAgIHRlc3RfaW5mb19uZXcodGV4dGlu
cHV0X2h0bWwsIFRSVUUpLAotICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfc2V0dXAs
Ci0gICAgICAgICAgICAgICB0ZXN0X2tleXByZXNzX2V2ZW50cywKLSAgICAgICAgICAgICAgIGtl
eV9ldmVudF9maXh0dXJlX3RlYXJkb3duKTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2tleWV2
ZW50cy9ldmVudC1idXR0b25zIiwgS2V5RXZlbnRGaXh0dXJlLAotICAgICAgICAgICAgICAgdGVz
dF9pbmZvX25ldyhidXR0b25faHRtbCwgRkFMU0UpLAotICAgICAgICAgICAgICAga2V5X2V2ZW50
X2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X2tleXByZXNzX2V2ZW50cywKLSAg
ICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3RlYXJkb3duKTsKLSAgICBnX3Rlc3RfYWRk
KCIvd2Via2l0L2tleWV2ZW50cy9ldmVudC1saW5rIiwgS2V5RXZlbnRGaXh0dXJlLAotICAgICAg
ICAgICAgICAgdGVzdF9pbmZvX25ldyhsaW5rX2h0bWwsIEZBTFNFKSwKLSAgICAgICAgICAgICAg
IGtleV9ldmVudF9maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF9rZXlwcmVzc19l
dmVudHMsCi0gICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV90ZWFyZG93bik7Ci0gICAg
Z190ZXN0X2FkZCgiL3dlYmtpdC9rZXlldmVudC9ldmVudC1kaXYiLCBLZXlFdmVudEZpeHR1cmUs
Ci0gICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KGRpdl9odG1sLCBUUlVFKSwKLSAgICAgICAg
ICAgICAgIGtleV9ldmVudF9maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF9rZXlw
cmVzc19ldmVudHMsCi0gICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV90ZWFyZG93bik7
Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9rZXlldmVudC9pbWUtdGV4dGlucHV0IiwgS2V5RXZl
bnRGaXh0dXJlLAotICAgICAgICAgICAgICAgdGVzdF9pbmZvX25ldyh0ZXh0aW5wdXRfaHRtbCwg
VFJVRSksCi0gICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV9zZXR1cCwKLSAgICAgICAg
ICAgICAgIHRlc3RfaW1lLAotICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfdGVhcmRv
d24pOwotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQva2V5ZXZlbnQvaW1lLWRpdiIsIEtleUV2ZW50
Rml4dHVyZSwKLSAgICAgICAgICAgICAgIHRlc3RfaW5mb19uZXcoZGl2X2h0bWwsIFRSVUUpLAot
ICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0
ZXN0X2ltZSwKLSAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3RlYXJkb3duKTsKLSAg
ICBnX3Rlc3RfYWRkKCIvd2Via2l0L2tleWV2ZW50L2Jsb2NrLXRleHRpbnB1dCIsIEtleUV2ZW50
Rml4dHVyZSwKLSAgICAgICAgICAgICAgIHRlc3RfaW5mb19uZXcodGV4dGlucHV0X2h0bWxfYmxv
Y2tpbmcsIFRSVUUpLAotICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfc2V0dXAsCi0g
ICAgICAgICAgICAgICB0ZXN0X2Jsb2NraW5nLAotICAgICAgICAgICAgICAga2V5X2V2ZW50X2Zp
eHR1cmVfdGVhcmRvd24pOwotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQva2V5ZXZlbnQvYmxvY2st
ZGl2IiwgS2V5RXZlbnRGaXh0dXJlLAotICAgICAgICAgICAgICAgdGVzdF9pbmZvX25ldyhkaXZf
aHRtbF9ibG9ja2luZywgVFJVRSksCi0gICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV9z
ZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3RfYmxvY2tpbmcsCi0gICAgICAgICAgICAgICBrZXlf
ZXZlbnRfZml4dHVyZV90ZWFyZG93bik7Ci0jaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkK
LSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2tleWV2ZW50L3hpbS10ZXh0aW5wdXQiLCBLZXlFdmVu
dEZpeHR1cmUsCi0gICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KHRleHRpbnB1dF9odG1sLCBU
UlVFKSwKLSAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3NldHVwLAotICAgICAgICAg
ICAgICAgdGVzdF94aW0sCi0gICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV90ZWFyZG93
bik7Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9rZXlldmVudC94aW0tZGl2IiwgS2V5RXZlbnRG
aXh0dXJlLAotICAgICAgICAgICAgICAgdGVzdF9pbmZvX25ldyhkaXZfaHRtbCwgVFJVRSksCi0g
ICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRl
c3RfeGltLAotICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfdGVhcmRvd24pOwotI2Vu
ZGlmCi0KLSAgICByZXR1cm4gZ190ZXN0X3J1bigpOwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2d0ay90ZXN0cy90ZXN0bG9hZGluZy5jIGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMv
dGVzdGxvYWRpbmcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBhOTIwZi4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0bG9hZGluZy5jCisrKyAvZGV2
L251bGwKQEAgLTEsNDM1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAg
R3VzdGF2byBOb3JvbmhhIFNpbHZhCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSWdhbGlhIFMuTC4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDxsaWJz
b3VwL3NvdXAuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0
Lmg+Ci0KLS8qIFRoaXMgc3RyaW5nIGhhcyB0byBiZSByYXRoZXIgYmlnIGJlY2F1c2Ugb2YgdGhl
IGNhbmNlbGxlZCB0ZXN0IC0gaXQKLSAqIGxvb2tzIGxpa2Ugc291cCByZWZ1c2VzIHRvIHNlbmQg
b3IgcmVjZWl2ZSBhIHRvbyBzbWFsbCBjaHVuayAqLwotI2RlZmluZSBIVE1MX1NUUklORyAiPGh0
bWw+PGJvZHk+VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nITwvYm9keT48L2h0bWw+IgotCi1Tb3VwVVJJKiBiYXNlX3VyaTsKLQotLyog
Rm9yIHJlYWwgcmVxdWVzdCB0ZXN0aW5nICovCi1zdGF0aWMgdm9pZAotc2VydmVyX2NhbGxiYWNr
KFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1zZywKLSAgICAgICAgICAgICAgICBj
b25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiBxdWVyeSwKLSAgICAgICAgICAgICAgICBTb3Vw
Q2xpZW50Q29udGV4dCogY29udGV4dCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBpZiAobXNnLT5t
ZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3Rh
dHVzKG1zZywgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1zZywgU09VUF9TVEFUVVNfT0sp
OwotCi0gICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvdGVzdF9sb2FkaW5nX3N0YXR1cyIpIHx8
IGdfc3RyX2VxdWFsKHBhdGgsICIvdGVzdF9sb2FkaW5nX3N0YXR1czIiKSkKLSAgICAgICAgc291
cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1zZy0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RB
VElDLCBIVE1MX1NUUklORywgc3RybGVuKEhUTUxfU1RSSU5HKSk7Ci0gICAgZWxzZSBpZiAoZ19z
dHJfZXF1YWwocGF0aCwgIi90ZXN0X2xvYWRfZXJyb3IiKSkgewotICAgICAgICBzb3VwX21lc3Nh
Z2Vfc2V0X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX0NBTlRfQ09OTkVDVCk7Ci0gICAgfSBlbHNl
IGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3Rlc3RfbG9hZGluZ19jYW5jZWxsZWQiKSkgewotICAg
ICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19zZXRfZW5jb2RpbmcobXNnLT5yZXNwb25zZV9oZWFk
ZXJzLCBTT1VQX0VOQ09ESU5HX0NIVU5LRUQpOwotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9h
cHBlbmQobXNnLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIEhUTUxfU1RSSU5H
LCBzdHJsZW4oSFRNTF9TVFJJTkcpKTsKLSAgICAgICAgc291cF9zZXJ2ZXJfdW5wYXVzZV9tZXNz
YWdlKHNlcnZlciwgbXNnKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNvdXBfbWVz
c2FnZV9ib2R5X2NvbXBsZXRlKG1zZy0+cmVzcG9uc2VfYm9keSk7Ci19Ci0KLXR5cGVkZWYgc3Ry
dWN0IHsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OwotICAgIEdNYWluTG9vcCAqbG9vcDsK
LSAgICBnYm9vbGVhbiBoYXNfYmVlbl9wcm92aXNpb25hbDsKLSAgICBnYm9vbGVhbiBoYXNfYmVl
bl9jb21taXR0ZWQ7Ci0gICAgZ2Jvb2xlYW4gaGFzX2JlZW5fZmlyc3RfdmlzdWFsbHlfbm9uX2Vt
cHR5X2xheW91dDsKLSAgICBnYm9vbGVhbiBoYXNfYmVlbl9maW5pc2hlZDsKLSAgICBnYm9vbGVh
biBoYXNfYmVlbl9mYWlsZWQ7Ci0gICAgZ2Jvb2xlYW4gaGFzX2JlZW5fbG9hZF9lcnJvcjsKLX0g
V2ViTG9hZGluZ0ZpeHR1cmU7Ci0KLXN0YXRpYyB2b2lkIHdlYl9sb2FkaW5nX2ZpeHR1cmVfc2V0
dXAoV2ViTG9hZGluZ0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAg
ICBmaXh0dXJlLT53ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXco
KSk7Ci0gICAgZml4dHVyZS0+bG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLSAg
ICBnX29iamVjdF9yZWZfc2luayhmaXh0dXJlLT53ZWJWaWV3KTsKLSAgICBmaXh0dXJlLT5oYXNf
YmVlbl9wcm92aXNpb25hbCA9IEZBTFNFOwotICAgIGZpeHR1cmUtPmhhc19iZWVuX2NvbW1pdHRl
ZCA9IEZBTFNFOwotICAgIGZpeHR1cmUtPmhhc19iZWVuX2ZpcnN0X3Zpc3VhbGx5X25vbl9lbXB0
eV9sYXlvdXQgPSBGQUxTRTsKLSAgICBmaXh0dXJlLT5oYXNfYmVlbl9maW5pc2hlZCA9IEZBTFNF
OwotICAgIGZpeHR1cmUtPmhhc19iZWVuX2ZhaWxlZCA9IEZBTFNFOwotICAgIGZpeHR1cmUtPmhh
c19iZWVuX2xvYWRfZXJyb3IgPSBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQgd2ViX2xvYWRpbmdf
Zml4dHVyZV90ZWFyZG93bihXZWJMb2FkaW5nRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRl
ciBkYXRhKQotewotICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPndlYlZpZXcpOwotICAgIGdf
bWFpbl9sb29wX3VucmVmKGZpeHR1cmUtPmxvb3ApOwotfQotCi1zdGF0aWMgY2hhciogZ2V0X3Vy
aV9mb3JfcGF0aChjb25zdCBjaGFyKiBwYXRoKQotewotICAgIFNvdXBVUkkqIHVyaTsKLSAgICBj
aGFyKiB1cmlfc3RyaW5nOwotCi0gICAgdXJpID0gc291cF91cmlfbmV3X3dpdGhfYmFzZShiYXNl
X3VyaSwgcGF0aCk7Ci0gICAgdXJpX3N0cmluZyA9IHNvdXBfdXJpX3RvX3N0cmluZyh1cmksIEZB
TFNFKTsKLSAgICBzb3VwX3VyaV9mcmVlICh1cmkpOwotCi0gICAgcmV0dXJuIHVyaV9zdHJpbmc7
Ci19Ci0KLXN0YXRpYyB2b2lkIGxvYWRfZmluaXNoZWRfY2IoV2ViS2l0V2ViVmlldyogd2ViX3Zp
ZXcsIFdlYktpdFdlYkZyYW1lKiB3ZWJfZnJhbWUsIFdlYkxvYWRpbmdGaXh0dXJlKiBmaXh0dXJl
KQotewotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsKTsKLSAgICBn
X2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9jb21taXR0ZWQpOwotICAgIGdfYXNzZXJ0KGZpeHR1
cmUtPmhhc19iZWVuX2ZpcnN0X3Zpc3VhbGx5X25vbl9lbXB0eV9sYXlvdXQpOwotCi0gICAgZ19t
YWluX2xvb3BfcXVpdChmaXh0dXJlLT5sb29wKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBzdGF0dXNf
Y2hhbmdlZF9jYihHT2JqZWN0KiBvYmplY3QsIEdQYXJhbVNwZWMqIHBzcGVjLCBXZWJMb2FkaW5n
Rml4dHVyZSogZml4dHVyZSkKLXsKLSAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtp
dF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMoV0VCS0lUX1dFQl9WSUVXKG9iamVjdCkpOwotCi0g
ICAgc3dpdGNoIChzdGF0dXMpIHsKLSAgICBjYXNlIFdFQktJVF9MT0FEX1BST1ZJU0lPTkFMOgot
ICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwpOwotICAgICAg
ICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fY29tbWl0dGVkKTsKLSAgICAgICAgZ19hc3Nl
cnQoIWZpeHR1cmUtPmhhc19iZWVuX2ZpcnN0X3Zpc3VhbGx5X25vbl9lbXB0eV9sYXlvdXQpOwot
ICAgICAgICBmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCA9IFRSVUU7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgV0VCS0lUX0xPQURfQ09NTUlUVEVEOgotICAgICAgICBnX2Fzc2VydChm
aXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCk7Ci0gICAgICAgIGdfYXNzZXJ0KCFmaXh0dXJl
LT5oYXNfYmVlbl9jb21taXR0ZWQpOwotICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2Jl
ZW5fZmlyc3RfdmlzdWFsbHlfbm9uX2VtcHR5X2xheW91dCk7Ci0gICAgICAgIGZpeHR1cmUtPmhh
c19iZWVuX2NvbW1pdHRlZCA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV0VCS0lU
X0xPQURfRklSU1RfVklTVUFMTFlfTk9OX0VNUFRZX0xBWU9VVDoKLSAgICAgICAgZ19hc3NlcnQo
Zml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwpOwotICAgICAgICBnX2Fzc2VydChmaXh0dXJl
LT5oYXNfYmVlbl9jb21taXR0ZWQpOwotICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2Jl
ZW5fZmlyc3RfdmlzdWFsbHlfbm9uX2VtcHR5X2xheW91dCk7Ci0gICAgICAgIGZpeHR1cmUtPmhh
c19iZWVuX2ZpcnN0X3Zpc3VhbGx5X25vbl9lbXB0eV9sYXlvdXQgPSBUUlVFOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFdFQktJVF9MT0FEX0ZJTklTSEVEOgotICAgICAgICBnX2Fzc2VydChm
aXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCk7Ci0gICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUt
Pmhhc19iZWVuX2NvbW1pdHRlZCk7Ci0gICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVu
X2ZpcnN0X3Zpc3VhbGx5X25vbl9lbXB0eV9sYXlvdXQpOwotICAgICAgICBicmVhazsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAgIH0KLX0KLQotc3Rh
dGljIHZvaWQgdGVzdF9sb2FkaW5nX3N0YXR1cyhXZWJMb2FkaW5nRml4dHVyZSogZml4dHVyZSwg
Z2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGNoYXIqIHVyaV9zdHJpbmc7Ci0KLSAgICBnX2Fz
c2VydF9jbXBpbnQod2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyhmaXh0dXJlLT53ZWJW
aWV3KSwgPT0sIFdFQktJVF9MT0FEX1BST1ZJU0lPTkFMKTsKLQotICAgIGdfb2JqZWN0X2Nvbm5l
Y3QoR19PQkpFQ1QoZml4dHVyZS0+d2ViVmlldyksCi0gICAgICAgICAgICAgICAgICAgICAic2ln
bmFsOjpub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhzdGF0dXNfY2hhbmdlZF9jYiks
IGZpeHR1cmUsCi0gICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjpsb2FkLWZpbmlzaGVkIiwg
R19DQUxMQkFDSyhsb2FkX2ZpbmlzaGVkX2NiKSwgZml4dHVyZSwKLSAgICAgICAgICAgICAgICAg
ICAgIE5VTEwpOwotCi0gICAgdXJpX3N0cmluZyA9IGdldF91cmlfZm9yX3BhdGgoIi90ZXN0X2xv
YWRpbmdfc3RhdHVzIik7Ci0KLSAgICAvKiBsb2FkX3VyaSB3aWxsIHRyaWdnZXIgdGhlIG5hdmln
YXRpb24tcG9saWN5LWRlY2lzaW9uLXJlcXVlc3RlZAotICAgICAqIHNpZ25hbCBlbWlzc2lvbjsK
LSAgICAgKi8KLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkoZml4dHVyZS0+d2ViVmlldywg
dXJpX3N0cmluZyk7Ci0gICAgZ19mcmVlKHVyaV9zdHJpbmcpOwotCi0gICAgZ19tYWluX2xvb3Bf
cnVuKGZpeHR1cmUtPmxvb3ApOwotfQotCi1zdGF0aWMgdm9pZCBsb2FkX2Vycm9yX3N0YXR1c19j
aGFuZ2VkX2NiKEdPYmplY3QqIG9iamVjdCwgR1BhcmFtU3BlYyogcHNwZWMsIFdlYkxvYWRpbmdG
aXh0dXJlKiBmaXh0dXJlKQotewotICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0
X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyhXRUJLSVRfV0VCX1ZJRVcob2JqZWN0KSk7Ci0KLSAg
ICBzd2l0Y2goc3RhdHVzKSB7Ci0gICAgY2FzZSBXRUJLSVRfTE9BRF9QUk9WSVNJT05BTDoKLSAg
ICAgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsKTsKLSAgICAgICAg
Zml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwgPSBUUlVFOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFdFQktJVF9MT0FEX0NPTU1JVFRFRDoKLSAgICAgICAgZ19hc3NlcnQoIWZpeHR1cmUt
Pmhhc19iZWVuX2NvbW1pdHRlZCk7Ci0gICAgICAgIGZpeHR1cmUtPmhhc19iZWVuX2NvbW1pdHRl
ZCA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV0VCS0lUX0xPQURfRklOSVNIRUQ6
Ci0gICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsKTsKLSAgICAg
ICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fbG9hZF9lcnJvcik7Ci0gICAgICAgIGdfYXNz
ZXJ0KGZpeHR1cmUtPmhhc19iZWVuX2ZhaWxlZCk7Ci0gICAgICAgIGdfYXNzZXJ0KCFmaXh0dXJl
LT5oYXNfYmVlbl9maW5pc2hlZCk7Ci0gICAgICAgIGZpeHR1cmUtPmhhc19iZWVuX2ZpbmlzaGVk
ID0gVFJVRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXRUJLSVRfTE9BRF9GQUlMRUQ6Ci0g
ICAgICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNfYmVlbl9mYWlsZWQpOwotICAgICAgICBmaXh0
dXJlLT5oYXNfYmVlbl9mYWlsZWQgPSBUUlVFOwotICAgICAgICBnX21haW5fbG9vcF9xdWl0KGZp
eHR1cmUtPmxvb3ApOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVh
azsKLSAgICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBsb2FkX2Vycm9yX2NiKFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcsIFdlYktpdFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgY2hhciogdXJpLCBHRXJy
b3IgKmVycm9yLCBXZWJMb2FkaW5nRml4dHVyZSogZml4dHVyZSkKLXsKLSAgICBnX2Fzc2VydChm
aXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCk7Ci0gICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhh
c19iZWVuX2xvYWRfZXJyb3IpOwotICAgIGZpeHR1cmUtPmhhc19iZWVuX2xvYWRfZXJyb3IgPSBU
UlVFOwotCi0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X2xvYWRpbmdf
ZXJyb3IoV2ViTG9hZGluZ0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsK
LSAgICBjaGFyKiB1cmlfc3RyaW5nOwotCi0gICAgZ190ZXN0X2J1ZygiMjg4NDIiKTsKLQotICAg
IGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2ViVmlldywgImxvYWQtZXJyb3IiLCBHX0NBTExC
QUNLKGxvYWRfZXJyb3JfY2IpLCBmaXh0dXJlKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1
cmUtPndlYlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhsb2FkX2Vycm9y
X3N0YXR1c19jaGFuZ2VkX2NiKSwgZml4dHVyZSk7Ci0KLSAgICB1cmlfc3RyaW5nID0gZ2V0X3Vy
aV9mb3JfcGF0aCgiL3Rlc3RfbG9hZF9lcnJvciIpOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2Fk
X3VyaShmaXh0dXJlLT53ZWJWaWV3LCB1cmlfc3RyaW5nKTsKLSAgICBnX2ZyZWUodXJpX3N0cmlu
Zyk7Ci0KLSAgICBnX21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7Ci0KLSAgICBnX2Fzc2Vy
dChmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCk7Ci0gICAgZ19hc3NlcnQoIWZpeHR1cmUt
Pmhhc19iZWVuX2NvbW1pdHRlZCk7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fbG9h
ZF9lcnJvcik7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fZmFpbGVkKTsKLSAgICBn
X2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fZmluaXNoZWQpOwotfQotCi0vKiBDYW5jZWxsZWQg
bG9hZCAqLwotCi1zdGF0aWMgZ2Jvb2xlYW4gbG9hZF9jYW5jZWxsZWRfY2IoV2ViS2l0V2ViVmll
dyogd2ViVmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLCBjb25zdCBjaGFyKiB1cmksIEdFcnJv
ciAqZXJyb3IsIFdlYkxvYWRpbmdGaXh0dXJlKiBmaXh0dXJlKQotewotICAgIGdfYXNzZXJ0KGZp
eHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsKTsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNf
YmVlbl9mYWlsZWQpOwotICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNfYmVlbl9sb2FkX2Vycm9y
KTsKLSAgICBnX2Fzc2VydChlcnJvci0+Y29kZSA9PSBXRUJLSVRfTkVUV09SS19FUlJPUl9DQU5D
RUxMRUQpOwotICAgIGZpeHR1cmUtPmhhc19iZWVuX2xvYWRfZXJyb3IgPSBUUlVFOwotCi0gICAg
cmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBzdG9wX2xvYWQgKGdwb2ludGVyIGRh
dGEpCi17Ci0gICAgd2Via2l0X3dlYl92aWV3X3N0b3BfbG9hZGluZyhXRUJLSVRfV0VCX1ZJRVco
ZGF0YSkpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQgbG9hZF9jYW5jZWxs
ZWRfc3RhdHVzX2NoYW5nZWRfY2IoR09iamVjdCogb2JqZWN0LCBHUGFyYW1TcGVjKiBwc3BlYywg
V2ViTG9hZGluZ0ZpeHR1cmUqIGZpeHR1cmUpCi17Ci0gICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0
dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKFdFQktJVF9XRUJfVklFVyhvYmpl
Y3QpKTsKLQotICAgIHN3aXRjaChzdGF0dXMpIHsKLSAgICBjYXNlIFdFQktJVF9MT0FEX1BST1ZJ
U0lPTkFMOgotICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwp
OwotICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fZmFpbGVkKTsKLSAgICAgICAg
Zml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwgPSBUUlVFOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFdFQktJVF9MT0FEX0NPTU1JVFRFRDoKLSAgICAgICAgZ19pZGxlX2FkZCAoc3RvcF9s
b2FkLCBvYmplY3QpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdFQktJVF9MT0FEX0ZBSUxF
RDoKLSAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwpOwotICAg
ICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fZmFpbGVkKTsKLSAgICAgICAgZ19hc3Nl
cnQoIWZpeHR1cmUtPmhhc19iZWVuX2xvYWRfZXJyb3IpOwotICAgICAgICBmaXh0dXJlLT5oYXNf
YmVlbl9mYWlsZWQgPSBUUlVFOwotICAgICAgICBnX21haW5fbG9vcF9xdWl0KGZpeHR1cmUtPmxv
b3ApOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdFQktJVF9MT0FEX0ZJTklTSEVEOgotICAg
ICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0
OgotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RfbG9hZGluZ19j
YW5jZWxsZWQoV2ViTG9hZGluZ0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkK
LXsKLSAgICBjaGFyKiB1cmlfc3RyaW5nOwotCi0gICAgZ190ZXN0X2J1ZygiMjk2NDQiKTsKLQot
ICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2ViVmlldywgImxvYWQtZXJyb3IiLCBHX0NB
TExCQUNLKGxvYWRfY2FuY2VsbGVkX2NiKSwgZml4dHVyZSk7Ci0gICAgZ19zaWduYWxfY29ubmVj
dChmaXh0dXJlLT53ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0sobG9h
ZF9jYW5jZWxsZWRfc3RhdHVzX2NoYW5nZWRfY2IpLCBmaXh0dXJlKTsKLQotICAgIHVyaV9zdHJp
bmcgPSBnZXRfdXJpX2Zvcl9wYXRoKCIvdGVzdF9sb2FkaW5nX2NhbmNlbGxlZCIpOwotICAgIHdl
YmtpdF93ZWJfdmlld19sb2FkX3VyaShmaXh0dXJlLT53ZWJWaWV3LCB1cmlfc3RyaW5nKTsKLSAg
ICBnX2ZyZWUodXJpX3N0cmluZyk7Ci0KLSAgICBnX21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9v
cCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGxvYWRfZ29iYWNrX3N0YXR1c19jaGFuZ2VkX2NiKEdPYmpl
Y3QqIG9iamVjdCwgR1BhcmFtU3BlYyogcHNwZWMsIFdlYkxvYWRpbmdGaXh0dXJlKiBmaXh0dXJl
KQotewotICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9s
b2FkX3N0YXR1cyhXRUJLSVRfV0VCX1ZJRVcob2JqZWN0KSk7Ci0KLSAgICBzd2l0Y2goc3RhdHVz
KSB7Ci0gICAgY2FzZSBXRUJLSVRfTE9BRF9QUk9WSVNJT05BTDoKLSAgICAgICAgZ19hc3NlcnQo
IWZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsKTsKLSAgICAgICAgZml4dHVyZS0+aGFzX2Jl
ZW5fcHJvdmlzaW9uYWwgPSBUUlVFOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdFQktJVF9M
T0FEX0NPTU1JVFRFRDoKLSAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlz
aW9uYWwpOwotICAgICAgICBmaXh0dXJlLT5oYXNfYmVlbl9jb21taXR0ZWQgPSBUUlVFOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIFdFQktJVF9MT0FEX0ZBSUxFRDoKLSAgICAgICAgZ19hc3Nl
cnRfbm90X3JlYWNoZWQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXRUJLSVRfTE9BRF9G
SU5JU0hFRDoKLSAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwp
OwotICAgICAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9jb21taXR0ZWQpOwotICAgICAg
ICBmaXh0dXJlLT5oYXNfYmVlbl9maW5pc2hlZCA9IFRSVUU7Ci0gICAgICAgIGdfbWFpbl9sb29w
X3F1aXQoZml4dHVyZS0+bG9vcCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgbG9hZF93ZW50YmFja19zdGF0dXNf
Y2hhbmdlZF9jYihHT2JqZWN0KiBvYmplY3QsIEdQYXJhbVNwZWMqIHBzcGVjLCBXZWJMb2FkaW5n
Rml4dHVyZSogZml4dHVyZSkKLXsKLSAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtp
dF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMoV0VCS0lUX1dFQl9WSUVXKG9iamVjdCkpOwotICAg
IGNoYXIqIHVyaV9zdHJpbmc7Ci0gICAgY2hhciogdXJpX3N0cmluZzI7Ci0KLSAgICB1cmlfc3Ry
aW5nID0gZ2V0X3VyaV9mb3JfcGF0aCgiL3Rlc3RfbG9hZGluZ19zdGF0dXMiKTsKLSAgICB1cmlf
c3RyaW5nMiA9IGdldF91cmlfZm9yX3BhdGgoIi90ZXN0X2xvYWRpbmdfc3RhdHVzMiIpOwotCi0g
ICAgc3dpdGNoKHN0YXR1cykgewotICAgIGNhc2UgV0VCS0lUX0xPQURfUFJPVklTSU9OQUw6Ci0g
ICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaShmaXh0dXJlLT53
ZWJWaWV3KSwgPT0sIHVyaV9zdHJpbmcyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXRUJL
SVRfTE9BRF9DT01NSVRURUQ6Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X3VyaShmaXh0dXJlLT53ZWJWaWV3KSwgPT0sIHVyaV9zdHJpbmcpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFdFQktJVF9MT0FEX0ZBSUxFRDoKLSAgICAgICAgZ19hc3NlcnRfbm90
X3JlYWNoZWQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXRUJLSVRfTE9BRF9GSU5JU0hF
RDoKLSAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKGZpeHR1
cmUtPndlYlZpZXcpLCA9PSwgdXJpX3N0cmluZyk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQo
Zml4dHVyZS0+bG9vcCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLQotICAgIGdfZnJlZSh1cmlfc3RyaW5nKTsKLSAgICBnX2ZyZWUodXJpX3N0
cmluZzIpOwotfQotCi1zdGF0aWMgdm9pZCBsb2FkX2Vycm9yX3Rlc3QoV2ViS2l0V2ViVmlldyog
d2VidmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLCBjb25zdCBjaGFyKiB1cmksIEdFcnJvciog
ZXJyb3IpCi17Ci0gICAgZ19kZWJ1ZygiRXJyb3I6ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOwotfQot
Ci1zdGF0aWMgdm9pZCB0ZXN0X2xvYWRpbmdfZ29iYWNrKFdlYkxvYWRpbmdGaXh0dXJlKiBmaXh0
dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgY2hhciogdXJpX3N0cmluZzsKLQotICAg
IGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2ViVmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMi
LCBHX0NBTExCQUNLKGxvYWRfZ29iYWNrX3N0YXR1c19jaGFuZ2VkX2NiKSwgZml4dHVyZSk7Ci0K
LSAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJsb2FkLWVycm9yIiwgR19D
QUxMQkFDSyhsb2FkX2Vycm9yX3Rlc3QpLCBmaXh0dXJlKTsKLQotICAgIHVyaV9zdHJpbmcgPSBn
ZXRfdXJpX2Zvcl9wYXRoKCIvdGVzdF9sb2FkaW5nX3N0YXR1cyIpOwotICAgIHdlYmtpdF93ZWJf
dmlld19sb2FkX3VyaShmaXh0dXJlLT53ZWJWaWV3LCB1cmlfc3RyaW5nKTsKLSAgICBnX2ZyZWUo
dXJpX3N0cmluZyk7Ci0KLSAgICBnX21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7Ci0KLSAg
ICBmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCA9IEZBTFNFOwotICAgIGZpeHR1cmUtPmhh
c19iZWVuX2NvbW1pdHRlZCA9IEZBTFNFOwotICAgIGZpeHR1cmUtPmhhc19iZWVuX2ZpcnN0X3Zp
c3VhbGx5X25vbl9lbXB0eV9sYXlvdXQgPSBGQUxTRTsKLSAgICBmaXh0dXJlLT5oYXNfYmVlbl9m
aW5pc2hlZCA9IEZBTFNFOwotICAgIGZpeHR1cmUtPmhhc19iZWVuX2ZhaWxlZCA9IEZBTFNFOwot
ICAgIGZpeHR1cmUtPmhhc19iZWVuX2xvYWRfZXJyb3IgPSBGQUxTRTsKLQotICAgIHVyaV9zdHJp
bmcgPSBnZXRfdXJpX2Zvcl9wYXRoKCIvdGVzdF9sb2FkaW5nX3N0YXR1czIiKTsKLSAgICB3ZWJr
aXRfd2ViX3ZpZXdfbG9hZF91cmkoZml4dHVyZS0+d2ViVmlldywgdXJpX3N0cmluZyk7Ci0gICAg
Z19mcmVlKHVyaV9zdHJpbmcpOwotCi0gICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1cmUtPmxvb3Ap
OwotCi0gICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKGZpeHR1cmUtPndl
YlZpZXcsIGxvYWRfZ29iYWNrX3N0YXR1c19jaGFuZ2VkX2NiLCBmaXh0dXJlKTsKLQotICAgIGZp
eHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsID0gRkFMU0U7Ci0gICAgZml4dHVyZS0+aGFzX2Jl
ZW5fY29tbWl0dGVkID0gRkFMU0U7Ci0gICAgZml4dHVyZS0+aGFzX2JlZW5fZmlyc3RfdmlzdWFs
bHlfbm9uX2VtcHR5X2xheW91dCA9IEZBTFNFOwotICAgIGZpeHR1cmUtPmhhc19iZWVuX2Zpbmlz
aGVkID0gRkFMU0U7Ci0gICAgZml4dHVyZS0+aGFzX2JlZW5fZmFpbGVkID0gRkFMU0U7Ci0gICAg
Zml4dHVyZS0+aGFzX2JlZW5fbG9hZF9lcnJvciA9IEZBTFNFOwotCi0gICAgZ19zaWduYWxfY29u
bmVjdChmaXh0dXJlLT53ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0so
bG9hZF93ZW50YmFja19zdGF0dXNfY2hhbmdlZF9jYiksIGZpeHR1cmUpOwotICAgIHdlYmtpdF93
ZWJfdmlld19nb19iYWNrKGZpeHR1cmUtPndlYlZpZXcpOwotCi0gICAgZ19tYWluX2xvb3BfcnVu
KGZpeHR1cmUtPmxvb3ApOwotCi0gICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9m
dW5jKGZpeHR1cmUtPndlYlZpZXcsIGxvYWRfd2VudGJhY2tfc3RhdHVzX2NoYW5nZWRfY2IsIGZp
eHR1cmUpOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCi17Ci0gICAgU291
cFNlcnZlciogc2VydmVyOwotCi0gICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwp
OwotCi0gICAgc2VydmVyID0gc291cF9zZXJ2ZXJfbmV3KFNPVVBfU0VSVkVSX1BPUlQsIDAsIE5V
TEwpOwotICAgIHNvdXBfc2VydmVyX3J1bl9hc3luYyhzZXJ2ZXIpOwotCi0gICAgc291cF9zZXJ2
ZXJfYWRkX2hhbmRsZXIoc2VydmVyLCBOVUxMLCBzZXJ2ZXJfY2FsbGJhY2ssIE5VTEwsIE5VTEwp
OwotCi0gICAgYmFzZV91cmkgPSBzb3VwX3VyaV9uZXcoImh0dHA6Ly8xMjcuMC4wLjEvIik7Ci0g
ICAgc291cF91cmlfc2V0X3BvcnQoYmFzZV91cmksIHNvdXBfc2VydmVyX2dldF9wb3J0KHNlcnZl
cikpOwotCi0gICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsK
LSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2xvYWRpbmcvc3RhdHVzIiwKLSAgICAgICAgICAgICAg
IFdlYkxvYWRpbmdGaXh0dXJlLCBOVUxMLAotICAgICAgICAgICAgICAgd2ViX2xvYWRpbmdfZml4
dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3RfbG9hZGluZ19zdGF0dXMsCi0gICAgICAg
ICAgICAgICB3ZWJfbG9hZGluZ19maXh0dXJlX3RlYXJkb3duKTsKLSAgICBnX3Rlc3RfYWRkKCIv
d2Via2l0L2xvYWRpbmcvZXJyb3IiLAotICAgICAgICAgICAgICAgV2ViTG9hZGluZ0ZpeHR1cmUs
IE5VTEwsCi0gICAgICAgICAgICAgICB3ZWJfbG9hZGluZ19maXh0dXJlX3NldHVwLAotICAgICAg
ICAgICAgICAgdGVzdF9sb2FkaW5nX2Vycm9yLAotICAgICAgICAgICAgICAgd2ViX2xvYWRpbmdf
Zml4dHVyZV90ZWFyZG93bik7Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9sb2FkaW5nL2NhbmNl
bGxlZCIsCi0gICAgICAgICAgICAgICBXZWJMb2FkaW5nRml4dHVyZSwgTlVMTCwKLSAgICAgICAg
ICAgICAgIHdlYl9sb2FkaW5nX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X2xv
YWRpbmdfY2FuY2VsbGVkLAotICAgICAgICAgICAgICAgd2ViX2xvYWRpbmdfZml4dHVyZV90ZWFy
ZG93bik7Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9sb2FkaW5nL2dvYmFjayIsCi0gICAgICAg
ICAgICAgICBXZWJMb2FkaW5nRml4dHVyZSwgTlVMTCwKLSAgICAgICAgICAgICAgIHdlYl9sb2Fk
aW5nX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X2xvYWRpbmdfZ29iYWNrLAot
ICAgICAgICAgICAgICAgd2ViX2xvYWRpbmdfZml4dHVyZV90ZWFyZG93bik7Ci0gICAgcmV0dXJu
IGdfdGVzdF9ydW4oKTsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMv
dGVzdG1pbWVoYW5kbGluZy5jIGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdG1pbWVoYW5k
bGluZy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDhlMWM2Li4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RtaW1laGFuZGxpbmcuYworKysgL2Rldi9u
dWxsCkBAIC0xLDIwMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEphbiBNaWNo
YWVsIEFsb256bwotICogQ29weXJpZ2h0IChDKSAyMDA5IEd1c3Rhdm8gTm9yb25oYSBTaWx2YQot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAidGVzdF91dGlscy5oIgotCi0jaW5jbHVkZSA8
Z2xpYi5oPgotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0jaW5jbHVkZSA8bGlic291cC9zb3Vw
Lmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgotI2lu
Y2x1ZGUgPHVuaXN0ZC5oPgotCi1HTWFpbkxvb3AqIGxvb3A7Ci1Tb3VwU2Vzc2lvbiAqc2Vzc2lv
bjsKLWNoYXIqIGJhc2VfdXJpOwotCi0vKiBGb3IgcmVhbCByZXF1ZXN0IHRlc3RpbmcgKi8KLXN0
YXRpYyB2b2lkCi1zZXJ2ZXJfY2FsbGJhY2soU291cFNlcnZlciAqc2VydmVyLCBTb3VwTWVzc2Fn
ZSAqbXNnLAotICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoLCBHSGFzaFRhYmxlICpx
dWVyeSwKLSAgICAgICAgICAgICAgICAgU291cENsaWVudENvbnRleHQgKmNvbnRleHQsIGdwb2lu
dGVyIGRhdGEpCi17Ci0gICAgaWYgKG1zZy0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgewot
ICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX05PVF9JTVBM
RU1FTlRFRCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzb3VwX21lc3NhZ2Vfc2V0
X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX09LKTsKLQotICAgIC8qIFBERiAqLwotICAgIGlmIChn
X3N0cl9lcXVhbChwYXRoLCAiL3BkZiIpKSB7Ci0gICAgICAgIGNoYXIqIGNvbnRlbnRzOwotICAg
ICAgICBnc2l6ZSBsZW5ndGg7Ci0gICAgICAgIEdFcnJvciogZXJyb3IgPSBOVUxMOwotCi0gICAg
ICAgIGdfZmlsZV9nZXRfY29udGVudHMoInRlc3QucGRmIiwgJmNvbnRlbnRzLCAmbGVuZ3RoLCAm
ZXJyb3IpOwotICAgICAgICBnX2Fzc2VydCghZXJyb3IpOwotCi0gICAgICAgIHNvdXBfbWVzc2Fn
ZV9ib2R5X2FwcGVuZChtc2ctPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGNvbnRl
bnRzLCBsZW5ndGgpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9odG1sIikp
IHsKLSAgICAgICAgY2hhciogY29udGVudHM7Ci0gICAgICAgIGdzaXplIGxlbmd0aDsKLSAgICAg
ICAgR0Vycm9yKiBlcnJvciA9IE5VTEw7Ci0KLSAgICAgICAgZ19maWxlX2dldF9jb250ZW50cygi
dGVzdC5odG1sIiwgJmNvbnRlbnRzLCAmbGVuZ3RoLCAmZXJyb3IpOwotICAgICAgICBnX2Fzc2Vy
dCghZXJyb3IpOwotCi0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtc2ctPnJlc3Bv
bnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGNvbnRlbnRzLCBsZW5ndGgpOwotICAgIH0gZWxz
ZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi90ZXh0IikpIHsKLSAgICAgICAgY2hhciogY29udGVu
dHM7Ci0gICAgICAgIGdzaXplIGxlbmd0aDsKLSAgICAgICAgR0Vycm9yKiBlcnJvciA9IE5VTEw7
Ci0KLSAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1zZy0+cmVzcG9uc2VfaGVh
ZGVycywgIkNvbnRlbnQtRGlzcG9zaXRpb24iLCAiYXR0YWNobWVudDsgZmlsZW5hbWU9dGVzdC50
eHQiKTsKLQotICAgICAgICBnX2ZpbGVfZ2V0X2NvbnRlbnRzKCJ0ZXN0LnR4dCIsICZjb250ZW50
cywgJmxlbmd0aCwgJmVycm9yKTsKLSAgICAgICAgZ19hc3NlcnQoIWVycm9yKTsKLQotICAgICAg
ICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobXNnLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9S
WV9UQUtFLCBjb250ZW50cywgbGVuZ3RoKTsKLSAgICB9Ci0KLSAgICBzb3VwX21lc3NhZ2VfYm9k
eV9jb21wbGV0ZShtc2ctPnJlc3BvbnNlX2JvZHkpOwotfQotCi1zdGF0aWMgdm9pZCBpZGxlX3F1
aXRfbG9vcF9jYihXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgR1BhcmFtU3BlYyogcHNwZWMsIGdw
b2ludGVyIGRhdGEpCi17Ci0gICAgaWYgKHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMo
d2ViX3ZpZXcpID09IFdFQktJVF9MT0FEX0ZJTklTSEVEIHx8Ci0gICAgICAgIHdlYmtpdF93ZWJf
dmlld19nZXRfbG9hZF9zdGF0dXMod2ViX3ZpZXcpID09IFdFQktJVF9MT0FEX0ZBSUxFRCkKLSAg
ICAgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKLX0KLQotc3RhdGljIGdib29sZWFuIG1pbWVf
dHlwZV9wb2xpY3lfZGVjaXNpb25fcmVxdWVzdGVkX2NiKFdlYktpdFdlYlZpZXcqIHZpZXcsIFdl
YktpdFdlYkZyYW1lKiBmcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBXZWJLaXROZXR3b3JrUmVxdWVzdCogcmVxdWVzdCwgY29uc3Qg
Y2hhciogbWltZV90eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFdlYktpdFdlYlBvbGljeURlY2lzaW9uKiBkZWNpc2lvbiwgZ3BvaW50
ZXIgZGF0YSkKLXsKLSAgICBjaGFyKiB0eXBlID0gKGNoYXIqKWRhdGE7Ci0KLSAgICBpZiAoZ19z
dHJfZXF1YWwodHlwZSwgInBkZiIpKSB7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cihtaW1lX3R5
cGUsID09LCAiYXBwbGljYXRpb24vcGRmIik7Ci0gICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2Vi
X3ZpZXdfY2FuX3Nob3dfbWltZV90eXBlKHZpZXcsIG1pbWVfdHlwZSkpOwotICAgIH0gZWxzZSBp
ZiAoZ19zdHJfZXF1YWwodHlwZSwgImh0bWwiKSkgewotICAgICAgICBnX2Fzc2VydF9jbXBzdHIo
bWltZV90eXBlLCA9PSwgInRleHQvaHRtbCIpOwotICAgICAgICBnX2Fzc2VydCh3ZWJraXRfd2Vi
X3ZpZXdfY2FuX3Nob3dfbWltZV90eXBlKHZpZXcsIG1pbWVfdHlwZSkpOwotICAgIH0gZWxzZSBp
ZiAoZ19zdHJfZXF1YWwodHlwZSwgInRleHQiKSkgewotICAgICAgICBXZWJLaXROZXR3b3JrUmVz
cG9uc2UqIHJlc3BvbnNlID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfbmV0d29ya19yZXNwb25zZShm
cmFtZSk7Ci0gICAgICAgIFNvdXBNZXNzYWdlKiBtZXNzYWdlID0gd2Via2l0X25ldHdvcmtfcmVz
cG9uc2VfZ2V0X21lc3NhZ2UocmVzcG9uc2UpOwotICAgICAgICBjaGFyKiBkaXNwb3NpdGlvbjsK
LQotICAgICAgICBnX2Fzc2VydChtZXNzYWdlKTsKLSAgICAgICAgc291cF9tZXNzYWdlX2hlYWRl
cnNfZ2V0X2NvbnRlbnRfZGlzcG9zaXRpb24obWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRpc3Bv
c2l0aW9uLCBOVUxMKTsKLSAgICAgICAgZ19vYmplY3RfdW5yZWYocmVzcG9uc2UpOwotCi0gICAg
ICAgIGdfYXNzZXJ0X2NtcHN0cihkaXNwb3NpdGlvbiwgPT0sICJhdHRhY2htZW50Iik7Ci0gICAg
ICAgIGdfZnJlZShkaXNwb3NpdGlvbik7Ci0KLSAgICAgICAgZ19hc3NlcnRfY21wc3RyKG1pbWVf
dHlwZSwgPT0sICJ0ZXh0L3BsYWluIik7Ci0gICAgICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmll
d19jYW5fc2hvd19taW1lX3R5cGUodmlldywgbWltZV90eXBlKSk7Ci0gICAgfQotCi0gICAgZ19m
cmVlKHR5cGUpOwotCi0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0UmVt
b3RlTWltZVR5cGUoY29uc3Qgdm9pZCogZGF0YSkKLXsKLSAgICBjb25zdCBjaGFyKiBuYW1lID0g
KGNvbnN0IGNoYXIqKSBkYXRhOwotICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSBXRUJLSVRfV0VC
X1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBnX29iamVjdF9yZWZfc2luayhHX09C
SkVDVCh2aWV3KSk7Ci0KLSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwot
Ci0gICAgZ19vYmplY3RfY29ubmVjdChHX09CSkVDVCh2aWV3KSwKLSAgICAgICAgICAgICAgICAg
ICAgICJzaWduYWw6Om5vdGlmeTo6bG9hZC1zdGF0dXMiLCBpZGxlX3F1aXRfbG9vcF9jYiwgTlVM
TCwKLSAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6Om1pbWUtdHlwZS1wb2xpY3ktZGVjaXNp
b24tcmVxdWVzdGVkIiwgbWltZV90eXBlX3BvbGljeV9kZWNpc2lvbl9yZXF1ZXN0ZWRfY2IsIGdf
c3RyZHVwKG5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0KLSAgICBjaGFyKiBl
ZmZlY3RpdmVfdXJpID0gZ19zdHJkdXBfcHJpbnRmKCIlcyVzIiwgYmFzZV91cmksIG5hbWUpOwot
ICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh2aWV3LCBlZmZlY3RpdmVfdXJpKTsKLSAgICBn
X2ZyZWUoZWZmZWN0aXZlX3VyaSk7Ci0KLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAg
ICBnX29iamVjdF91bnJlZih2aWV3KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdExvY2FsTWltZVR5
cGUoY29uc3Qgdm9pZCogZGF0YSkKLXsKLSAgICAgY29uc3QgY2hhciogdHlwZU5hbWUgPSAoY29u
c3QgY2hhciopIGRhdGE7Ci0gICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSBXRUJLSVRfV0VCX1ZJ
RVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICAgZ19vYmplY3RfcmVmX3NpbmsoR19PQkpF
Q1QodmlldykpOwotCi0gICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7Ci0K
LSAgICAgZ19vYmplY3RfY29ubmVjdChHX09CSkVDVCh2aWV3KSwKLSAgICAgICAgICAgICAgICAg
ICAgICAic2lnbmFsOjpub3RpZnk6OmxvYWQtc3RhdHVzIiwgaWRsZV9xdWl0X2xvb3BfY2IsIE5V
TEwsCi0gICAgICAgICAgICAgICAgICAgICAgInNpZ25hbDo6bWltZS10eXBlLXBvbGljeS1kZWNp
c2lvbi1yZXF1ZXN0ZWQiLCBtaW1lX3R5cGVfcG9saWN5X2RlY2lzaW9uX3JlcXVlc3RlZF9jYiwg
Z19zdHJkdXAodHlwZU5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotCi0gICAg
IGdjaGFyKiBmaWxlbmFtZSA9IGdfc3RyZHVwX3ByaW50ZigidGVzdC4lcyIsIHR5cGVOYW1lKTsK
LSAgICAgR0ZpbGUqIGZpbGUgPSBnX2ZpbGVfbmV3X2Zvcl9wYXRoKGZpbGVuYW1lKTsKLSAgICAg
Z19mcmVlKGZpbGVuYW1lKTsKLQotICAgICBnY2hhciogZmlsZVVSSSA9IGdfZmlsZV9nZXRfdXJp
KGZpbGUpOwotICAgICBnX29iamVjdF91bnJlZihmaWxlKTsKLQotICAgICB3ZWJraXRfd2ViX3Zp
ZXdfbG9hZF91cmkodmlldywgZmlsZVVSSSk7Ci0gICAgIGdfZnJlZShmaWxlVVJJKTsKLSAKLSAg
ICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotICAgICBnX29iamVjdF91bnJlZih2aWV3KTsKLX0K
LQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotewotICAgIFNvdXBTZXJ2ZXIqIHNl
cnZlcjsKLSAgICBTb3VwVVJJKiBzb3VwX3VyaTsKLQotICAgIGd0a190ZXN0X2luaXQoJmFyZ2Ms
ICZhcmd2LCBOVUxMKTsKLQotICAgIC8qIEhvcGVmdWxseSBtYWtlIHRlc3QgaW5kZXBlbmRlbnQg
b2YgdGhlIHBhdGggaXQncyBjYWxsZWQgZnJvbS4gKi8KLSAgICB0ZXN0dXRpbHNfcmVsYXRpdmVf
Y2hkaXIoIlNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Jlc291cmNlcy90ZXN0Lmh0bWwiLCBhcmd2
WzBdKTsKLQotICAgIHNlcnZlciA9IHNvdXBfc2VydmVyX25ldyhTT1VQX1NFUlZFUl9QT1JULCAw
LCBOVUxMKTsKLSAgICBzb3VwX3NlcnZlcl9ydW5fYXN5bmMoc2VydmVyKTsKLQotICAgIHNvdXBf
c2VydmVyX2FkZF9oYW5kbGVyKHNlcnZlciwgTlVMTCwgc2VydmVyX2NhbGxiYWNrLCBOVUxMLCBO
VUxMKTsKLQotICAgIHNvdXBfdXJpID0gc291cF91cmlfbmV3KCJodHRwOi8vMTI3LjAuMC4xLyIp
OwotICAgIHNvdXBfdXJpX3NldF9wb3J0KHNvdXBfdXJpLCBzb3VwX3NlcnZlcl9nZXRfcG9ydChz
ZXJ2ZXIpKTsKLQotICAgIGJhc2VfdXJpID0gc291cF91cmlfdG9fc3RyaW5nKHNvdXBfdXJpLCBG
QUxTRSk7Ci0gICAgc291cF91cmlfZnJlZShzb3VwX3VyaSk7Ci0KLSAgICBnX3Rlc3RfYnVnX2Jh
c2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwotICAgIGdfdGVzdF9hZGRfZGF0YV9mdW5j
KCIvd2Via2l0L21pbWUvcmVtb3RlLVBERiIsICJwZGYiLCB0ZXN0UmVtb3RlTWltZVR5cGUpOwot
ICAgIGdfdGVzdF9hZGRfZGF0YV9mdW5jKCIvd2Via2l0L21pbWUvcmVtb3RlLUhUTUwiLCAiaHRt
bCIsIHRlc3RSZW1vdGVNaW1lVHlwZSk7Ci0gICAgZ190ZXN0X2FkZF9kYXRhX2Z1bmMoIi93ZWJr
aXQvbWltZS9yZW1vdGUtVEVYVCIsICJ0ZXh0IiwgdGVzdFJlbW90ZU1pbWVUeXBlKTsKLSAgICBn
X3Rlc3RfYWRkX2RhdGFfZnVuYygiL3dlYmtpdC9taW1lL2xvY2FsLVBERiIsICJwZGYiLCB0ZXN0
TG9jYWxNaW1lVHlwZSk7Ci0gICAgZ190ZXN0X2FkZF9kYXRhX2Z1bmMoIi93ZWJraXQvbWltZS9s
b2NhbC1IVE1MIiwgImh0bWwiLCB0ZXN0TG9jYWxNaW1lVHlwZSk7Ci0gICAgZ190ZXN0X2FkZF9k
YXRhX2Z1bmMoIi93ZWJraXQvbWltZS9sb2NhbC1URVhUIiwgInRleHQiLCB0ZXN0TG9jYWxNaW1l
VHlwZSk7Ci0KLSAgICByZXR1cm4gZ190ZXN0X3J1bigpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9ndGsvdGVzdHMvdGVzdG5ldHdvcmtyZXF1ZXN0LmMgYi9Tb3VyY2UvV2ViS2l0L2d0
ay90ZXN0cy90ZXN0bmV0d29ya3JlcXVlc3QuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMWIyYzkwZi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0bmV0
d29ya3JlcXVlc3QuYworKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDkgR3VzdGF2byBOb3JvbmhhIFNpbHZhCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPGdsaWIu
aD4KLSNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNs
dWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+Ci0KLXN0YXRpYyB2b2lk
IHRlc3RfbmV0d29ya19yZXF1ZXN0X2NyZWF0ZV9kZXN0cm95KCkKLXsKLSAgICBXZWJLaXROZXR3
b3JrUmVxdWVzdCogcmVxdWVzdDsKLSAgICBTb3VwTWVzc2FnZSogbWVzc2FnZTsKLQotICAgIC8q
IFRlc3QgY3JlYXRpb24gd2l0aCBVUkkgKi8KLSAgICByZXF1ZXN0ID0gV0VCS0lUX05FVFdPUktf
UkVRVUVTVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfTkVUV09SS19SRVFVRVNULCAidXJpIiwg
Imh0dHA6Ly9kZWJpYW4ub3JnLyIsIE5VTEwpKTsKLSAgICBnX2Fzc2VydChXRUJLSVRfSVNfTkVU
V09SS19SRVFVRVNUKHJlcXVlc3QpKTsKLSAgICBtZXNzYWdlID0gd2Via2l0X25ldHdvcmtfcmVx
dWVzdF9nZXRfbWVzc2FnZShyZXF1ZXN0KTsKLSAgICBnX2Fzc2VydCghbWVzc2FnZSk7Ci0gICAg
Z19vYmplY3RfdW5yZWYocmVxdWVzdCk7Ci0KLSAgICAvKiBUZXN0IGNyZWF0aW9uIHdpdGggU291
cE1lc3NhZ2UgKi8KLSAgICBtZXNzYWdlID0gc291cF9tZXNzYWdlX25ldygiR0VUIiwgImh0dHA6
Ly9kZWJpYW4ub3JnLyIpOwotICAgIHJlcXVlc3QgPSBXRUJLSVRfTkVUV09SS19SRVFVRVNUKGdf
b2JqZWN0X25ldyhXRUJLSVRfVFlQRV9ORVRXT1JLX1JFUVVFU1QsICJtZXNzYWdlIiwgbWVzc2Fn
ZSwgTlVMTCkpOwotICAgIGdfYXNzZXJ0KFdFQktJVF9JU19ORVRXT1JLX1JFUVVFU1QocmVxdWVz
dCkpOwotICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChtZXNzYWdlKS0+cmVmX2NvdW50LCA9
PSwgMik7Ci0gICAgZ19vYmplY3RfdW5yZWYocmVxdWVzdCk7Ci0gICAgZ19hc3NlcnRfY21waW50
KEdfT0JKRUNUKG1lc3NhZ2UpLT5yZWZfY291bnQsID09LCAxKTsKLSAgICBnX29iamVjdF91bnJl
ZihtZXNzYWdlKTsKLQotICAgIC8qIFRlc3QgY3JlYXRpb24gd2l0aCBib3RoIFNvdXBNZXNzYWdl
IGFuZCBVUkkgKi8KLSAgICBtZXNzYWdlID0gc291cF9tZXNzYWdlX25ldygiR0VUIiwgImh0dHA6
Ly9kZWJpYW4ub3JnLyIpOwotICAgIHJlcXVlc3QgPSBXRUJLSVRfTkVUV09SS19SRVFVRVNUKGdf
b2JqZWN0X25ldyhXRUJLSVRfVFlQRV9ORVRXT1JLX1JFUVVFU1QsICJtZXNzYWdlIiwgbWVzc2Fn
ZSwgInVyaSIsICJodHRwOi8vZ25vbWUub3JnLyIsIE5VTEwpKTsKLSAgICBnX2Fzc2VydChXRUJL
SVRfSVNfTkVUV09SS19SRVFVRVNUKHJlcXVlc3QpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoR19P
QkpFQ1QobWVzc2FnZSktPnJlZl9jb3VudCwgPT0sIDIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3
ZWJraXRfbmV0d29ya19yZXF1ZXN0X2dldF91cmkocmVxdWVzdCksID09LCAiaHR0cDovL2dub21l
Lm9yZy8iKTsKLSAgICBnX29iamVjdF91bnJlZihyZXF1ZXN0KTsKLSAgICBnX2Fzc2VydF9jbXBp
bnQoR19PQkpFQ1QobWVzc2FnZSktPnJlZl9jb3VudCwgPT0sIDEpOwotICAgIGdfb2JqZWN0X3Vu
cmVmKG1lc3NhZ2UpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X25ldHdvcmtfcmVxdWVzdF9wcm9w
ZXJ0aWVzKCkKLXsKLSAgICBXZWJLaXROZXR3b3JrUmVxdWVzdCogcmVxdWVzdDsKLSAgICBTb3Vw
TWVzc2FnZSogbWVzc2FnZTsKLSAgICBnY2hhciogc291cFVSSTsKLQotICAgIC8qIFRlc3QgVVJJ
IGlzIHNldCBjb3JyZWN0bHkgd2hlbiBjcmVhdGluZyB3aXRoIFVSSSAqLwotICAgIHJlcXVlc3Qg
PSB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X25ldygiaHR0cDovL2RlYmlhbi5vcmcvIik7Ci0gICAg
Z19hc3NlcnQoV0VCS0lUX0lTX05FVFdPUktfUkVRVUVTVChyZXF1ZXN0KSk7Ci0gICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KSwgPT0sICJo
dHRwOi8vZGViaWFuLm9yZy8iKTsKLSAgICBnX29iamVjdF91bnJlZihyZXF1ZXN0KTsKLQotICAg
IC8qIFRlc3QgVVJJIGlzIHNldCBjb3JyZWN0bHkgd2hlbiBjcmVhdGluZyB3aXRoIE1lc3NhZ2Ug
Ki8KLSAgICBtZXNzYWdlID0gc291cF9tZXNzYWdlX25ldygiR0VUIiwgImh0dHA6Ly9kZWJpYW4u
b3JnLyIpOwotICAgIHJlcXVlc3QgPSBXRUJLSVRfTkVUV09SS19SRVFVRVNUKGdfb2JqZWN0X25l
dyhXRUJLSVRfVFlQRV9ORVRXT1JLX1JFUVVFU1QsICJtZXNzYWdlIiwgbWVzc2FnZSwgTlVMTCkp
OwotICAgIGdfYXNzZXJ0KFdFQktJVF9JU19ORVRXT1JLX1JFUVVFU1QocmVxdWVzdCkpOwotICAg
IGdfb2JqZWN0X3VucmVmKG1lc3NhZ2UpOwotCi0gICAgbWVzc2FnZSA9IHdlYmtpdF9uZXR3b3Jr
X3JlcXVlc3RfZ2V0X21lc3NhZ2UocmVxdWVzdCk7Ci0gICAgc291cFVSSSA9IHNvdXBfdXJpX3Rv
X3N0cmluZyhzb3VwX21lc3NhZ2VfZ2V0X3VyaShtZXNzYWdlKSwgRkFMU0UpOwotICAgIGdfYXNz
ZXJ0X2NtcHN0cihzb3VwVVJJLCA9PSwgImh0dHA6Ly9kZWJpYW4ub3JnLyIpOwotICAgIGdfZnJl
ZShzb3VwVVJJKTsKLQotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfbmV0d29ya19yZXF1ZXN0
X2dldF91cmkocmVxdWVzdCksID09LCAiaHR0cDovL2RlYmlhbi5vcmcvIik7Ci0gICAgZ19vYmpl
Y3RfdW5yZWYocmVxdWVzdCk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikK
LXsKLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAgICBnX3Rlc3Rf
YnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwotICAgIGdfdGVzdF9hZGRfZnVu
YygiL3dlYmtpdC9uZXR3b3JrcmVxdWVzdC9jcmVhdGVkZXN0cm95IiwgdGVzdF9uZXR3b3JrX3Jl
cXVlc3RfY3JlYXRlX2Rlc3Ryb3kpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9uZXR3
b3JrcmVxdWVzdC9wcm9wZXJ0aWVzIiwgdGVzdF9uZXR3b3JrX3JlcXVlc3RfcHJvcGVydGllcyk7
Ci0gICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2d0ay90ZXN0cy90ZXN0bmV0d29ya3Jlc3BvbnNlLmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0
cy90ZXN0bmV0d29ya3Jlc3BvbnNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4
MDZhYTEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdG5ldHdvcmty
ZXNwb25zZS5jCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOSBHdXN0YXZvIE5vcm9uaGEgU2lsdmEKLSAqIENvcHlyaWdodCAoQykgMjAwOSBD
b2xsYWJvcmEgTHRkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNp
bmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z2xpYi9nc3Rk
aW8uaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVk
ZSA8d2Via2l0L3dlYmtpdC5oPgotCi1zdGF0aWMgdm9pZCB0ZXN0X25ldHdvcmtfcmVzcG9uc2Vf
Y3JlYXRlX2Rlc3Ryb3koKQotewotICAgIFdlYktpdE5ldHdvcmtSZXNwb25zZSogcmVzcG9uc2U7
Ci0gICAgU291cE1lc3NhZ2UqIG1lc3NhZ2U7Ci0KLSAgICAvKiBUZXN0IGNyZWF0aW9uIHdpdGgg
VVJJICovCi0gICAgcmVzcG9uc2UgPSBXRUJLSVRfTkVUV09SS19SRVNQT05TRShnX29iamVjdF9u
ZXcoV0VCS0lUX1RZUEVfTkVUV09SS19SRVNQT05TRSwgInVyaSIsICJodHRwOi8vZGViaWFuLm9y
Zy8iLCBOVUxMKSk7Ci0gICAgZ19hc3NlcnQoV0VCS0lUX0lTX05FVFdPUktfUkVTUE9OU0UocmVz
cG9uc2UpKTsKLSAgICBtZXNzYWdlID0gd2Via2l0X25ldHdvcmtfcmVzcG9uc2VfZ2V0X21lc3Nh
Z2UocmVzcG9uc2UpOwotICAgIGdfYXNzZXJ0KCFtZXNzYWdlKTsKLSAgICBnX29iamVjdF91bnJl
ZihyZXNwb25zZSk7Ci0KLSAgICAvKiBUZXN0IGNyZWF0aW9uIHdpdGggU291cE1lc3NhZ2UgKi8K
LSAgICBtZXNzYWdlID0gc291cF9tZXNzYWdlX25ldygiR0VUIiwgImh0dHA6Ly9kZWJpYW4ub3Jn
LyIpOwotICAgIHJlc3BvbnNlID0gV0VCS0lUX05FVFdPUktfUkVTUE9OU0UoZ19vYmplY3RfbmV3
KFdFQktJVF9UWVBFX05FVFdPUktfUkVTUE9OU0UsICJtZXNzYWdlIiwgbWVzc2FnZSwgTlVMTCkp
OwotICAgIGdfYXNzZXJ0KFdFQktJVF9JU19ORVRXT1JLX1JFU1BPTlNFKHJlc3BvbnNlKSk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKG1lc3NhZ2UpLT5yZWZfY291bnQsID09LCAyKTsK
LSAgICBnX29iamVjdF91bnJlZihyZXNwb25zZSk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdfT0JK
RUNUKG1lc3NhZ2UpLT5yZWZfY291bnQsID09LCAxKTsKLSAgICBnX29iamVjdF91bnJlZihtZXNz
YWdlKTsKLQotICAgIC8qIFRlc3QgY3JlYXRpb24gd2l0aCBib3RoIFNvdXBNZXNzYWdlIGFuZCBV
UkkgKi8KLSAgICBtZXNzYWdlID0gc291cF9tZXNzYWdlX25ldygiR0VUIiwgImh0dHA6Ly9kZWJp
YW4ub3JnLyIpOwotICAgIHJlc3BvbnNlID0gV0VCS0lUX05FVFdPUktfUkVTUE9OU0UoZ19vYmpl
Y3RfbmV3KFdFQktJVF9UWVBFX05FVFdPUktfUkVTUE9OU0UsICJtZXNzYWdlIiwgbWVzc2FnZSwg
InVyaSIsICJodHRwOi8vZ25vbWUub3JnLyIsIE5VTEwpKTsKLSAgICBnX2Fzc2VydChXRUJLSVRf
SVNfTkVUV09SS19SRVNQT05TRShyZXNwb25zZSkpOwotICAgIGdfYXNzZXJ0X2NtcGludChHX09C
SkVDVChtZXNzYWdlKS0+cmVmX2NvdW50LCA9PSwgMik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdl
YmtpdF9uZXR3b3JrX3Jlc3BvbnNlX2dldF91cmkocmVzcG9uc2UpLCA9PSwgImh0dHA6Ly9nbm9t
ZS5vcmcvIik7Ci0gICAgZ19vYmplY3RfdW5yZWYocmVzcG9uc2UpOwotICAgIGdfYXNzZXJ0X2Nt
cGludChHX09CSkVDVChtZXNzYWdlKS0+cmVmX2NvdW50LCA9PSwgMSk7Ci0gICAgZ19vYmplY3Rf
dW5yZWYobWVzc2FnZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RfbmV0d29ya19yZXNwb25zZV9w
cm9wZXJ0aWVzKCkKLXsKLSAgICBXZWJLaXROZXR3b3JrUmVzcG9uc2UqIHJlc3BvbnNlOwotICAg
IFNvdXBNZXNzYWdlKiBtZXNzYWdlOwotICAgIGdjaGFyKiBzb3VwVVJJOwotCi0gICAgLyogVGVz
dCBVUkkgaXMgc2V0IGNvcnJlY3RseSB3aGVuIGNyZWF0aW5nIHdpdGggVVJJICovCi0gICAgcmVz
cG9uc2UgPSB3ZWJraXRfbmV0d29ya19yZXNwb25zZV9uZXcoImh0dHA6Ly9kZWJpYW4ub3JnLyIp
OwotICAgIGdfYXNzZXJ0KFdFQktJVF9JU19ORVRXT1JLX1JFU1BPTlNFKHJlc3BvbnNlKSk7Ci0g
ICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9uZXR3b3JrX3Jlc3BvbnNlX2dldF91cmkocmVzcG9u
c2UpLCA9PSwgImh0dHA6Ly9kZWJpYW4ub3JnLyIpOwotICAgIGdfb2JqZWN0X3VucmVmKHJlc3Bv
bnNlKTsKLQotICAgIC8qIFRlc3QgVVJJIGlzIHNldCBjb3JyZWN0bHkgd2hlbiBjcmVhdGluZyB3
aXRoIE1lc3NhZ2UgKi8KLSAgICBtZXNzYWdlID0gc291cF9tZXNzYWdlX25ldygiR0VUIiwgImh0
dHA6Ly9kZWJpYW4ub3JnLyIpOwotICAgIHJlc3BvbnNlID0gV0VCS0lUX05FVFdPUktfUkVTUE9O
U0UoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX05FVFdPUktfUkVTUE9OU0UsICJtZXNzYWdlIiwg
bWVzc2FnZSwgTlVMTCkpOwotICAgIGdfYXNzZXJ0KFdFQktJVF9JU19ORVRXT1JLX1JFU1BPTlNF
KHJlc3BvbnNlKSk7Ci0gICAgZ19vYmplY3RfdW5yZWYobWVzc2FnZSk7Ci0KLSAgICBtZXNzYWdl
ID0gd2Via2l0X25ldHdvcmtfcmVzcG9uc2VfZ2V0X21lc3NhZ2UocmVzcG9uc2UpOwotICAgIHNv
dXBVUkkgPSBzb3VwX3VyaV90b19zdHJpbmcoc291cF9tZXNzYWdlX2dldF91cmkobWVzc2FnZSks
IEZBTFNFKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc291cFVSSSwgPT0sICJodHRwOi8vZGViaWFu
Lm9yZy8iKTsKLSAgICBnX2ZyZWUoc291cFVSSSk7Ci0KLSAgICBnX2Fzc2VydF9jbXBzdHIod2Vi
a2l0X25ldHdvcmtfcmVzcG9uc2VfZ2V0X3VyaShyZXNwb25zZSksID09LCAiaHR0cDovL2RlYmlh
bi5vcmcvIik7Ci0gICAgZ19vYmplY3RfdW5yZWYocmVzcG9uc2UpOwotfQotCi1pbnQgbWFpbihp
bnQgYXJnYywgY2hhcioqIGFyZ3YpCi17Ci0gICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3Ys
IE5VTEwpOwotCi0gICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8i
KTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvbmV0d29ya3Jlc3BvbnNlL2NyZWF0ZWRl
c3Ryb3kiLCB0ZXN0X25ldHdvcmtfcmVzcG9uc2VfY3JlYXRlX2Rlc3Ryb3kpOwotICAgIGdfdGVz
dF9hZGRfZnVuYygiL3dlYmtpdC9uZXR3b3JrcmVzcG9uc2UvcHJvcGVydGllcyIsIHRlc3RfbmV0
d29ya19yZXNwb25zZV9wcm9wZXJ0aWVzKTsKLSAgICByZXR1cm4gZ190ZXN0X3J1biAoKTsKLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJiYWNrZm9yd2FyZGxp
c3QuYyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJiYWNrZm9yd2FyZGxpc3QuYwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzc4MmQ0MC4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2ViYmFja2ZvcndhcmRsaXN0LmMKKysrIC9kZXYvbnVs
bApAQCAtMSwzMjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBIb2xnZXIgSGFu
cyBQZXRlciBGcmV5dGhlcgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8Z2xpYi5oPgot
I2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+Ci0KLXN0YXRp
YyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbGlmZXRpbWUodm9pZCkKLXsKLSAg
ICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OwotICAgIFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCog
YmFja0ZvcndhcmRMaXN0OwotICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBjdXJyZW50SXRlbTsK
LSAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogZm9yd2FyZEl0ZW07Ci0gICAgV2ViS2l0V2ViSGlz
dG9yeUl0ZW0qIGJhY2tJdGVtOwotICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBudGhJdGVtOwot
ICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBpdGVtMTsKLSAgICBXZWJLaXRXZWJIaXN0b3J5SXRl
bSogaXRlbTI7Ci0gICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGl0ZW0zOwotICAgIFdlYktpdFdl
Ykhpc3RvcnlJdGVtKiBpdGVtNDsKLSAgICBHTGlzdCogYmFja0xpc3QgPSBOVUxMOwotICAgIEdM
aXN0KiBmb3J3YXJkTGlzdCA9IE5VTEw7Ci0gICAgZ190ZXN0X2J1ZygiMTk4OTgiKTsKLQotICAg
IHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBn
X29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKLSAgICBiYWNrRm9yd2FyZExpc3QgPSB3ZWJraXRf
d2ViX3ZpZXdfZ2V0X2JhY2tfZm9yd2FyZF9saXN0KHdlYlZpZXcpOwotICAgIGdfYXNzZXJ0X2Nt
cGludChHX09CSkVDVChiYWNrRm9yd2FyZExpc3QpLT5yZWZfY291bnQsID09LCAxKTsKLQotICAg
IC8qIGFkZCB0ZXN0IGl0ZW1zICovCi0gICAgaXRlbTEgPSB3ZWJraXRfd2ViX2hpc3RvcnlfaXRl
bV9uZXdfd2l0aF9kYXRhKCJodHRwOi8vZXhhbXBsZS5jb20vMS8iLCAiU2l0ZSAxIik7Ci0gICAg
d2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9hZGRfaXRlbShiYWNrRm9yd2FyZExpc3QsIGl0
ZW0xKTsKLSAgICBnX29iamVjdF91bnJlZihpdGVtMSk7Ci0KLSAgICBpdGVtMiA9IHdlYmtpdF93
ZWJfaGlzdG9yeV9pdGVtX25ld193aXRoX2RhdGEoImh0dHA6Ly9leGFtcGxlLmNvbS8yLyIsICJT
aXRlIDIiKTsKLSAgICB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2FkZF9pdGVtKGJhY2tG
b3J3YXJkTGlzdCwgaXRlbTIpOwotICAgIGdfb2JqZWN0X3VucmVmKGl0ZW0yKTsKLQotICAgIGl0
ZW0zID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dpdGhfZGF0YSgiaHR0cDovL2V4YW1w
bGUuY29tLzMvIiwgIlNpdGUgMyIpOwotICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3Rf
YWRkX2l0ZW0oYmFja0ZvcndhcmRMaXN0LCBpdGVtMyk7Ci0gICAgZ19vYmplY3RfdW5yZWYoaXRl
bTMpOwotCi0gICAgaXRlbTQgPSB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9uZXdfd2l0aF9kYXRh
KCJodHRwOi8vZXhhbXBsZS5jb20vNC8iLCAiU2l0ZSA0Iik7Ci0gICAgd2Via2l0X3dlYl9iYWNr
X2ZvcndhcmRfbGlzdF9hZGRfaXRlbShiYWNrRm9yd2FyZExpc3QsIGl0ZW00KTsKLSAgICBnX29i
amVjdF91bnJlZihpdGVtNCk7Ci0KLSAgICAvKiBtYWtlIHN1cmUgdGhlc2UgZnVuY3Rpb25zIGRv
bid0IGFkZCB1bm5lY2Vzc2FyeSByZWYgdG8gdGhlIGhpc3RvcnkgaXRlbSAqLwotICAgIGJhY2tJ
dGVtID0gd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19pdGVtKGJhY2tGb3J3
YXJkTGlzdCk7Ci0gICAgZ19vYmplY3RfcmVmKGJhY2tJdGVtKTsKLSAgICBnX2Fzc2VydF9jbXBp
bnQoR19PQkpFQ1QoYmFja0l0ZW0pLT5yZWZfY291bnQsID09LCAyKTsKLSAgICBnX29iamVjdF91
bnJlZihiYWNrSXRlbSk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKGJhY2tJdGVtKS0+
cmVmX2NvdW50LCA9PSwgMSk7Ci0KLSAgICBjdXJyZW50SXRlbSA9IHdlYmtpdF93ZWJfYmFja19m
b3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbShiYWNrRm9yd2FyZExpc3QpOwotICAgIGdfb2Jq
ZWN0X3JlZihjdXJyZW50SXRlbSk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKGN1cnJl
bnRJdGVtKS0+cmVmX2NvdW50LCA9PSwgMik7Ci0gICAgZ19vYmplY3RfdW5yZWYoY3VycmVudEl0
ZW0pOwotICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChjdXJyZW50SXRlbSktPnJlZl9jb3Vu
dCwgPT0sIDEpOwotCi0gICAgd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nb190b19pdGVt
KGJhY2tGb3J3YXJkTGlzdCwgaXRlbTIpOwotICAgIGZvcndhcmRJdGVtID0gd2Via2l0X3dlYl9i
YWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9pdGVtKGJhY2tGb3J3YXJkTGlzdCk7Ci0gICAg
Z19vYmplY3RfcmVmKGZvcndhcmRJdGVtKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1Qo
Zm9yd2FyZEl0ZW0pLT5yZWZfY291bnQsID09LCAyKTsKLSAgICBnX29iamVjdF91bnJlZihmb3J3
YXJkSXRlbSk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKGZvcndhcmRJdGVtKS0+cmVm
X2NvdW50LCA9PSwgMSk7Ci0KLSAgICBudGhJdGVtID0gd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRf
bGlzdF9nZXRfbnRoX2l0ZW0oYmFja0ZvcndhcmRMaXN0LCAxKTsKLSAgICBnX29iamVjdF9yZWYo
bnRoSXRlbSk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKG50aEl0ZW0pLT5yZWZfY291
bnQsID09LCAyKTsKLSAgICBnX29iamVjdF91bnJlZihudGhJdGVtKTsKLSAgICBnX2Fzc2VydF9j
bXBpbnQoR19PQkpFQ1QobnRoSXRlbSktPnJlZl9jb3VudCwgPT0sIDEpOwotCi0gICAgYmFja0xp
c3QgPSB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3Rfd2l0aF9saW1p
dChiYWNrRm9yd2FyZExpc3QsIDUpOwotICAgIGZvciAoOyBiYWNrTGlzdDsgYmFja0xpc3QgPSBi
YWNrTGlzdC0+bmV4dCkKLSAgICAgICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKGJhY2tMaXN0
LT5kYXRhKS0+cmVmX2NvdW50LCA9PSwgMSk7Ci0KLSAgICBmb3J3YXJkTGlzdCA9IHdlYmtpdF93
ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlzdF93aXRoX2xpbWl0KGJhY2tGb3J3
YXJkTGlzdCwgNSk7Ci0gICAgZm9yICg7IGZvcndhcmRMaXN0OyBmb3J3YXJkTGlzdCA9IGZvcndh
cmRMaXN0LT5uZXh0KQotICAgICAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoZm9yd2FyZExp
c3QtPmRhdGEpLT5yZWZfY291bnQsID09LCAxKTsKLQotICAgIGdfbGlzdF9mcmVlKGZvcndhcmRM
aXN0KTsKLSAgICBnX2xpc3RfZnJlZShiYWNrTGlzdCk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdf
T0JKRUNUKGl0ZW0xKS0+cmVmX2NvdW50LCA9PSwgMSk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdf
T0JKRUNUKGl0ZW0yKS0+cmVmX2NvdW50LCA9PSwgMSk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdf
T0JKRUNUKGl0ZW0zKS0+cmVmX2NvdW50LCA9PSwgMSk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdf
T0JKRUNUKGl0ZW00KS0+cmVmX2NvdW50LCA9PSwgMSk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdf
T0JKRUNUKGJhY2tGb3J3YXJkTGlzdCktPnJlZl9jb3VudCwgPT0sIDEpOwotICAgIGdfb2JqZWN0
X3VucmVmKHdlYlZpZXcpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfYmFja19m
b3J3YXJkX2xpc3Rfb3JkZXIodm9pZCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3Owot
ICAgIFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViQmFja0ZvcndhcmRMaXN0OwotICAgIFdl
YktpdFdlYkhpc3RvcnlJdGVtKiBpdGVtMTsKLSAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogaXRl
bTI7Ci0gICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGl0ZW0zOwotICAgIFdlYktpdFdlYkhpc3Rv
cnlJdGVtKiBpdGVtNDsKLSAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogY3VycmVudEl0ZW07Ci0g
ICAgR0xpc3QqIGJhY2tMaXN0ID0gTlVMTDsKLSAgICBHTGlzdCogZm9yd2FyZExpc3QgPSBOVUxM
OwotICAgIGdfdGVzdF9idWcoIjIyNjk0Iik7Ci0KLSAgICB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9W
SUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmll
dyk7Ci0KLSAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X21haW50YWluc19iYWNrX2ZvcndhcmRfbGlz
dCh3ZWJWaWV3LCBUUlVFKTsKLSAgICB3ZWJCYWNrRm9yd2FyZExpc3QgPSB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X2JhY2tfZm9yd2FyZF9saXN0KHdlYlZpZXcpOwotICAgIGdfYXNzZXJ0KHdlYkJhY2tG
b3J3YXJkTGlzdCk7Ci0KLSAgICAvLyBDaGVjayB0aGF0IHRoZXJlIGlzIG5vIGl0ZW0uCi0gICAg
Z19hc3NlcnQoIXdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh3
ZWJCYWNrRm9yd2FyZExpc3QpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNr
X2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0s
IDApOwotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dl
dF9iYWNrX2xlbmd0aCh3ZWJCYWNrRm9yd2FyZExpc3QpLCA9PSwgMCk7Ci0gICAgZ19hc3NlcnQo
IXdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh3ZWJWaWV3KSk7Ci0gICAgZ19hc3NlcnQo
IXdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayh3ZWJWaWV3KSk7Ci0KLSAgICAvLyBBZGQgYSBu
ZXcgaXRlbXMKLSAgICBpdGVtMSA9IHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX25ld193aXRoX2Rh
dGEoImh0dHA6Ly9leGFtcGxlLmNvbS8xLyIsICJTaXRlIDEiKTsKLSAgICB3ZWJraXRfd2ViX2Jh
Y2tfZm9yd2FyZF9saXN0X2FkZF9pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCwgaXRlbTEpOwotICAg
IGdfb2JqZWN0X3VucmVmKGl0ZW0xKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2JhY2tfZm9y
d2FyZF9saXN0X2NvbnRhaW5zX2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0LCBpdGVtMSkpOwotCi0g
ICAgaXRlbTIgPSB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9uZXdfd2l0aF9kYXRhKCJodHRwOi8v
ZXhhbXBsZS5jb20vMi8iLCAiU2l0ZSAyIik7Ci0gICAgd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRf
bGlzdF9hZGRfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QsIGl0ZW0yKTsKLSAgICBnX29iamVjdF91
bnJlZihpdGVtMik7Ci0gICAgZ19hc3NlcnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9j
b250YWluc19pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCwgaXRlbTIpKTsKLQotICAgIGl0ZW0zID0g
d2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dpdGhfZGF0YSgiaHR0cDovL2V4YW1wbGUuY29t
LzMvIiwgIlNpdGUgMyIpOwotICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfYWRkX2l0
ZW0od2ViQmFja0ZvcndhcmRMaXN0LCBpdGVtMyk7Ci0gICAgZ19vYmplY3RfdW5yZWYoaXRlbTMp
OwotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY29udGFpbnNfaXRl
bSh3ZWJCYWNrRm9yd2FyZExpc3QsIGl0ZW0zKSk7Ci0KLSAgICBpdGVtNCA9IHdlYmtpdF93ZWJf
aGlzdG9yeV9pdGVtX25ld193aXRoX2RhdGEoImh0dHA6Ly9leGFtcGxlLmNvbS80LyIsICJTaXRl
IDQiKTsKLSAgICB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2FkZF9pdGVtKHdlYkJhY2tG
b3J3YXJkTGlzdCwgaXRlbTQpOwotICAgIGdfb2JqZWN0X3VucmVmKGl0ZW00KTsKLSAgICBnX2Fz
c2VydCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2NvbnRhaW5zX2l0ZW0od2ViQmFja0Zv
cndhcmRMaXN0LCBpdGVtNCkpOwotCi0gICAgLy8gY2hlY2sgdGhlIGJhY2sgbGlzdCBvcmRlcgot
ICAgIGJhY2tMaXN0ID0gd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19saXN0
X3dpdGhfbGltaXQod2ViQmFja0ZvcndhcmRMaXN0LCA1KTsKLSAgICBnX2Fzc2VydChiYWNrTGlz
dCk7Ci0KLSAgICBjdXJyZW50SXRlbSA9IFdFQktJVF9XRUJfSElTVE9SWV9JVEVNKGJhY2tMaXN0
LT5kYXRhKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0
X3VyaShjdXJyZW50SXRlbSksID09LCAiaHR0cDovL2V4YW1wbGUuY29tLzMvIik7Ci0gICAgZ19h
c3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF90aXRsZShjdXJyZW50SXRl
bSksID09LCAiU2l0ZSAzIik7Ci0gICAgYmFja0xpc3QgPSBiYWNrTGlzdC0+bmV4dDsKLQotICAg
IGN1cnJlbnRJdGVtID0gV0VCS0lUX1dFQl9ISVNUT1JZX0lURU0oYmFja0xpc3QtPmRhdGEpOwot
ICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdXJpKGN1cnJl
bnRJdGVtKSwgPT0sICJodHRwOi8vZXhhbXBsZS5jb20vMi8iKTsKLSAgICBnX2Fzc2VydF9jbXBz
dHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3RpdGxlKGN1cnJlbnRJdGVtKSwgPT0sICJT
aXRlIDIiKTsKLSAgICBiYWNrTGlzdCA9IGJhY2tMaXN0LT5uZXh0OwotCi0gICAgY3VycmVudEl0
ZW0gPSBXRUJLSVRfV0VCX0hJU1RPUllfSVRFTShiYWNrTGlzdC0+ZGF0YSk7Ci0gICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF91cmkoY3VycmVudEl0ZW0pLCA9
PSwgImh0dHA6Ly9leGFtcGxlLmNvbS8xLyIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRf
d2ViX2hpc3RvcnlfaXRlbV9nZXRfdGl0bGUoY3VycmVudEl0ZW0pLCA9PSwgIlNpdGUgMSIpOwot
ICAgIGdfbGlzdF9mcmVlKGJhY2tMaXN0KTsKLQotICAgIC8vIGNoZWNrIHRoZSBmb3J3YXJkIGxp
c3Qgb3JkZXIKLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ29fdG9fYmFja19mb3J3YXJk
X2l0ZW0od2ViVmlldywgaXRlbTEpKTsKLSAgICBmb3J3YXJkTGlzdCA9IHdlYmtpdF93ZWJfYmFj
a19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlzdF93aXRoX2xpbWl0KHdlYkJhY2tGb3J3YXJk
TGlzdCw1KTsKLSAgICBnX2Fzc2VydChmb3J3YXJkTGlzdCk7Ci0KLSAgICBjdXJyZW50SXRlbSA9
IFdFQktJVF9XRUJfSElTVE9SWV9JVEVNKGZvcndhcmRMaXN0LT5kYXRhKTsKLSAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3VyaShjdXJyZW50SXRlbSksID09
LCAiaHR0cDovL2V4YW1wbGUuY29tLzQvIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93
ZWJfaGlzdG9yeV9pdGVtX2dldF90aXRsZShjdXJyZW50SXRlbSksID09LCAiU2l0ZSA0Iik7Ci0g
ICAgZm9yd2FyZExpc3QgPSBmb3J3YXJkTGlzdC0+bmV4dDsKLQotICAgIGN1cnJlbnRJdGVtID0g
V0VCS0lUX1dFQl9ISVNUT1JZX0lURU0oZm9yd2FyZExpc3QtPmRhdGEpOwotICAgIGdfYXNzZXJ0
X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdXJpKGN1cnJlbnRJdGVtKSwgPT0s
ICJodHRwOi8vZXhhbXBsZS5jb20vMy8iKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dl
Yl9oaXN0b3J5X2l0ZW1fZ2V0X3RpdGxlKGN1cnJlbnRJdGVtKSwgPT0sICJTaXRlIDMiKTsKLSAg
ICBmb3J3YXJkTGlzdCA9IGZvcndhcmRMaXN0LT5uZXh0OwotCi0gICAgY3VycmVudEl0ZW0gPSBX
RUJLSVRfV0VCX0hJU1RPUllfSVRFTShmb3J3YXJkTGlzdC0+ZGF0YSk7Ci0gICAgZ19hc3NlcnRf
Y21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF91cmkoY3VycmVudEl0ZW0pLCA9PSwg
Imh0dHA6Ly9leGFtcGxlLmNvbS8yLyIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2Vi
X2hpc3RvcnlfaXRlbV9nZXRfdGl0bGUoY3VycmVudEl0ZW0pLCA9PSwgIlNpdGUgMiIpOwotCi0g
ICAgZ19saXN0X2ZyZWUoZm9yd2FyZExpc3QpOwotICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcp
OwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfYWRk
X2l0ZW0odm9pZCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OwotICAgIFdlYktpdFdl
YkJhY2tGb3J3YXJkTGlzdCogd2ViQmFja0ZvcndhcmRMaXN0OwotICAgIFdlYktpdFdlYkhpc3Rv
cnlJdGVtKiBhZGRJdGVtMTsKLSAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogYWRkSXRlbTI7Ci0g
ICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGJhY2tJdGVtOwotICAgIFdlYktpdFdlYkhpc3RvcnlJ
dGVtKiBjdXJyZW50SXRlbTsKLSAgICBnX3Rlc3RfYnVnKCIyMjk4OCIpOwotCi0gICAgd2ViVmll
dyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0
X3JlZl9zaW5rKHdlYlZpZXcpOwotCi0gICAgd2Via2l0X3dlYl92aWV3X3NldF9tYWludGFpbnNf
YmFja19mb3J3YXJkX2xpc3Qod2ViVmlldywgVFJVRSk7Ci0gICAgd2ViQmFja0ZvcndhcmRMaXN0
ID0gd2Via2l0X3dlYl92aWV3X2dldF9iYWNrX2ZvcndhcmRfbGlzdCh3ZWJWaWV3KTsKLSAgICBn
X2Fzc2VydCh3ZWJCYWNrRm9yd2FyZExpc3QpOwotCi0gICAgLy8gQ2hlY2sgdGhhdCB0aGVyZSBp
cyBubyBpdGVtLgotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dl
dF9jdXJyZW50X2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0KSk7Ci0gICAgZ19hc3NlcnRfY21waW50
KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGVuZ3RoKHdlYkJhY2tG
b3J3YXJkTGlzdCksID09LCAwKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNr
X2ZvcndhcmRfbGlzdF9nZXRfYmFja19sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDAp
OwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQod2ViVmlldykp
OwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2sod2ViVmlldykpOwot
Ci0gICAgLy8gQWRkIGEgbmV3IGl0ZW0KLSAgICBhZGRJdGVtMSA9IHdlYmtpdF93ZWJfaGlzdG9y
eV9pdGVtX25ld193aXRoX2RhdGEoImh0dHA6Ly9leGFtcGxlLmNvbS8iLCAiQWRkZWQgc2l0ZSIp
OwotICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfYWRkX2l0ZW0od2ViQmFja0Zvcndh
cmRMaXN0LCBhZGRJdGVtMSk7Ci0gICAgZ19vYmplY3RfdW5yZWYoYWRkSXRlbTEpOwotICAgIGdf
YXNzZXJ0KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY29udGFpbnNfaXRlbSh3ZWJCYWNr
Rm9yd2FyZExpc3QsIGFkZEl0ZW0xKSk7Ci0KLSAgICAvLyBDaGVjayB0aGF0IHRoZSBhZGRlZCBp
dGVtIGlzIHRoZSBjdXJyZW50IGl0ZW0uCi0gICAgY3VycmVudEl0ZW0gPSB3ZWJraXRfd2ViX2Jh
Y2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0KTsKLSAg
ICBnX2Fzc2VydChjdXJyZW50SXRlbSk7Ci0gICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJf
YmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGVuZ3RoKHdlYkJhY2tGb3J3YXJkTGlzdCks
ID09LCAwKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlz
dF9nZXRfYmFja19sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDApOwotICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQod2ViVmlldykpOwotICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2sod2ViVmlldykpOwotICAgIGdfYXNzZXJ0
X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdXJpKGN1cnJlbnRJdGVtKSwgPT0s
ICJodHRwOi8vZXhhbXBsZS5jb20vIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJf
aGlzdG9yeV9pdGVtX2dldF90aXRsZShjdXJyZW50SXRlbSksID09LCAiQWRkZWQgc2l0ZSIpOwot
Ci0gICAgLy8gQWRkIGFub3RoZXIgaXRlbS4KLSAgICBhZGRJdGVtMiA9IHdlYmtpdF93ZWJfaGlz
dG9yeV9pdGVtX25ld193aXRoX2RhdGEoImh0dHA6Ly9leGFtcGxlLmNvbS8yLyIsICJBZGRlZCBz
aXRlIDIiKTsKLSAgICB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2FkZF9pdGVtKHdlYkJh
Y2tGb3J3YXJkTGlzdCwgYWRkSXRlbTIpOwotICAgIGdfb2JqZWN0X3VucmVmKGFkZEl0ZW0yKTsK
LSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2NvbnRhaW5zX2l0ZW0o
d2ViQmFja0ZvcndhcmRMaXN0LCBhZGRJdGVtMikpOwotCi0gICAgLy8gQ2hlY2sgdGhhdCB0aGUg
YWRkZWQgaXRlbSBpcyBuZXcgY3VycmVudCBpdGVtLgotICAgIGN1cnJlbnRJdGVtID0gd2Via2l0
X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKHdlYkJhY2tGb3J3YXJkTGlz
dCk7Ci0gICAgZ19hc3NlcnQoY3VycmVudEl0ZW0pOwotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJr
aXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xlbmd0aCh3ZWJCYWNrRm9yd2Fy
ZExpc3QpLCA9PSwgMCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJfYmFja19mb3J3
YXJkX2xpc3RfZ2V0X2JhY2tfbGVuZ3RoKHdlYkJhY2tGb3J3YXJkTGlzdCksID09LCAxKTsKLSAg
ICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHdlYlZpZXcpKTsKLSAg
ICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2sod2ViVmlldykpOwotICAgIGdf
YXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdXJpKGN1cnJlbnRJdGVt
KSwgPT0sICJodHRwOi8vZXhhbXBsZS5jb20vMi8iKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Vi
a2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3RpdGxlKGN1cnJlbnRJdGVtKSwgPT0sICJBZGRlZCBz
aXRlIDIiKTsKLQotICAgIGJhY2tJdGVtID0gd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9n
ZXRfYmFja19pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCk7Ci0gICAgZ19hc3NlcnQoYmFja0l0ZW0p
OwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdXJpKGJh
Y2tJdGVtKSwgPT0sICJodHRwOi8vZXhhbXBsZS5jb20vIik7Ci0gICAgZ19hc3NlcnRfY21wc3Ry
KHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF90aXRsZShiYWNrSXRlbSksID09LCAiQWRkZWQg
c2l0ZSIpOwotCi0gICAgLy8gR28gdG8gdGhlIGZpcnN0IGFkZGVkIGl0ZW0uCi0gICAgZ19hc3Nl
cnQod2Via2l0X3dlYl92aWV3X2dvX3RvX2JhY2tfZm9yd2FyZF9pdGVtKHdlYlZpZXcsIGFkZEl0
ZW0xKSk7Ci0gICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3Rf
Z2V0X2ZvcndhcmRfbGVuZ3RoKHdlYkJhY2tGb3J3YXJkTGlzdCksID09LCAxKTsKLSAgICBnX2Fz
c2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19sZW5ndGgo
d2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDApOwotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmll
d19jYW5fZ29fZm9yd2FyZCh3ZWJWaWV3KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmll
d19jYW5fZ29fYmFjayh3ZWJWaWV3KSk7Ci0KLSAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsK
LX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2NsZWFy
KHZvaWQpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldzsKLSAgICBXZWJLaXRXZWJCYWNr
Rm9yd2FyZExpc3QqIHdlYkJhY2tGb3J3YXJkTGlzdDsKLSAgICBXZWJLaXRXZWJIaXN0b3J5SXRl
bSogYWRkSXRlbTsKLSAgICBnX3Rlc3RfYnVnKCIzNjE3MyIpOwotCi0gICAgd2ViVmlldyA9IFdF
QktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0X3JlZl9z
aW5rKHdlYlZpZXcpOwotCi0gICAgd2ViQmFja0ZvcndhcmRMaXN0ID0gd2Via2l0X3dlYl92aWV3
X2dldF9iYWNrX2ZvcndhcmRfbGlzdCh3ZWJWaWV3KTsKLSAgICBnX2Fzc2VydCh3ZWJCYWNrRm9y
d2FyZExpc3QpOwotCi0gICAgLy8gQ2hlY2sgdGhhdCB0aGVyZSBpcyBubyBpdGVtLgotICAgIGdf
YXNzZXJ0X2NtcGludCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xl
bmd0aCh3ZWJCYWNrRm9yd2FyZExpc3QpLCA9PSwgMCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHdl
YmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGVuZ3RoKHdlYkJhY2tGb3J3YXJk
TGlzdCksID09LCAwKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlz
dF9nZXRfY3VycmVudF9pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCkpOwotICAgIGdfYXNzZXJ0KCF3
ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQod2ViVmlldykpOwotICAgIGdfYXNzZXJ0KCF3
ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2sod2ViVmlldykpOwotCi0gICAgLy8gQ2hlY2sgdGhh
dCBjbGVhcmluZyB0aGUgZW1wdHkgbGlzdCBkb2VzIG5vdCBtb2RpZnkgY291bnRlcnMKLSAgICB3
ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2NsZWFyKHdlYkJhY2tGb3J3YXJkTGlzdCk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2Zvcndh
cmRfbGVuZ3RoKHdlYkJhY2tGb3J3YXJkTGlzdCksID09LCAwKTsKLSAgICBnX2Fzc2VydF9jbXBp
bnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19sZW5ndGgod2ViQmFja0Zv
cndhcmRMaXN0KSwgPT0sIDApOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX2JhY2tfZm9yd2Fy
ZF9saXN0X2dldF9jdXJyZW50X2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0KSk7Ci0gICAgZ19hc3Nl
cnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh3ZWJWaWV3KSk7Ci0gICAgZ19hc3Nl
cnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayh3ZWJWaWV3KSk7Ci0KLSAgICAvLyBBZGQg
YSBuZXcgaXRlbQotICAgIGFkZEl0ZW0gPSB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9uZXdfd2l0
aF9kYXRhKCJodHRwOi8vZXhhbXBsZS5jb20vIiwgIkFkZGVkIHNpdGUiKTsKLSAgICB3ZWJraXRf
d2ViX2JhY2tfZm9yd2FyZF9saXN0X2FkZF9pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCwgYWRkSXRl
bSk7Ci0gICAgZ19vYmplY3RfdW5yZWYoYWRkSXRlbSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3dl
Yl9iYWNrX2ZvcndhcmRfbGlzdF9jb250YWluc19pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCwgYWRk
SXRlbSkpOwotCi0gICAgLy8gQ2hlY2sgdGhhdCBhZnRlciBjbGVhcmluZyB0aGUgbGlzdCB0aGUg
YWRkZWQgaXRlbSBpcyBubyBsb25nZXIgaW4gdGhlIGxpc3QKLSAgICB3ZWJraXRfd2ViX2JhY2tf
Zm9yd2FyZF9saXN0X2NsZWFyKHdlYkJhY2tGb3J3YXJkTGlzdCk7Ci0gICAgZ19hc3NlcnQoIXdl
YmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY29udGFpbnNfaXRlbSh3ZWJCYWNrRm9yd2FyZExp
c3QsIGFkZEl0ZW0pKTsKLQotICAgIC8vIENoZWNrIHRoYXQgYWZ0ZXIgY2xlYXJpbmcgaXQsIHRo
ZSBsaXN0IGlzIGVtcHR5Ci0gICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJfYmFja19mb3J3
YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGVuZ3RoKHdlYkJhY2tGb3J3YXJkTGlzdCksID09LCAwKTsK
LSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFj
a19sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDApOwotICAgIGdfYXNzZXJ0KCF3ZWJr
aXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0od2ViQmFja0ZvcndhcmRM
aXN0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh3ZWJW
aWV3KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayh3ZWJWaWV3
KSk7Ci0KLSAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKLX0KLQotaW50IG1haW4oaW50IGFy
Z2MsIGNoYXIqKiBhcmd2KQotewotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxM
KTsKLQotICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0g
ICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYmJhY2tmb3J3YXJkbGlzdC9hZGRfaXRlbSIs
IHRlc3Rfd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9hZGRfaXRlbSk7Ci0gICAgZ190ZXN0
X2FkZF9mdW5jKCIvd2Via2l0L3dlYmJhY2tmb3J3YXJkbGlzdC9saXN0X29yZGVyIiwgdGVzdF93
ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X29yZGVyKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMo
Ii93ZWJraXQvd2ViaGlzdG9yeWl0ZW0vbGlmZXRpbWUiLCB0ZXN0X3dlYmtpdF93ZWJfaGlzdG9y
eV9pdGVtX2xpZmV0aW1lKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2ViYmFja2Zv
cndhcmRsaXN0L2NsZWFyIiwgdGVzdF93ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2NsZWFy
KTsKLSAgICByZXR1cm4gZ190ZXN0X3J1biAoKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJkYXRhc291cmNlLmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0
cy90ZXN0d2ViZGF0YXNvdXJjZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTY2
MjU3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJkYXRhc291
cmNlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOSBKYW4gTWljaGFlbCBBbG9uem8KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
PGdsaWIuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5o
PgotCi1zdGF0aWMgY29uc3QgZ3Nob3J0IGRlZmF1bHRUaW1lb3V0ID0gMTA7Ci1ndWludCB3YWl0
VGltZXI7Ci1nYm9vbGVhbiBzaG91bGRXYWl0OwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgV2Vi
S2l0V2ViVmlldyogd2ViVmlldzsKLSAgICBXZWJLaXRXZWJGcmFtZSogbWFpbkZyYW1lOwotfSBX
ZWJEYXRhU291cmNlRml4dHVyZTsKLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX2RhdGFf
c291cmNlX2dldF9pbml0aWFsX3JlcXVlc3QoKQotewotICAgIFdlYktpdFdlYlZpZXcqIHZpZXc7
Ci0gICAgV2ViS2l0V2ViRnJhbWUqIGZyYW1lOwotICAgIFdlYktpdFdlYkRhdGFTb3VyY2UqIGRh
dGFTb3VyY2U7Ci0gICAgV2ViS2l0TmV0d29ya1JlcXVlc3QqIGluaXRpYWxSZXF1ZXN0OwotCi0g
ICAgdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdf
b2JqZWN0X3JlZl9zaW5rKHZpZXcpOwotICAgIGZyYW1lID0gd2Via2l0X3dlYl92aWV3X2dldF9t
YWluX2ZyYW1lKHZpZXcpOwotCi0gICAgV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QgPSB3
ZWJraXRfbmV0d29ya19yZXF1ZXN0X25ldygiaHR0cDovL3d3dy5nb29nbGUuY29tIik7Ci0gICAg
d2Via2l0X3dlYl9mcmFtZV9sb2FkX3JlcXVlc3QoZnJhbWUsIHJlcXVlc3QpOwotICAgIGdfb2Jq
ZWN0X3VucmVmKHJlcXVlc3QpOwotCi0gICAgZGF0YVNvdXJjZSA9IHdlYmtpdF93ZWJfZnJhbWVf
Z2V0X3Byb3Zpc2lvbmFsX2RhdGFfc291cmNlKGZyYW1lKTsKLSAgICBnX2Fzc2VydChkYXRhU291
cmNlKTsKLSAgICBpbml0aWFsUmVxdWVzdCA9IHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X2lu
aXRpYWxfcmVxdWVzdChkYXRhU291cmNlKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X25l
dHdvcmtfcmVxdWVzdF9nZXRfdXJpKGluaXRpYWxSZXF1ZXN0KSwgPT0sICJodHRwOi8vd3d3Lmdv
b2dsZS5jb20vIik7Ci0KLSAgICBnX29iamVjdF91bnJlZih2aWV3KTsKLX0KLQotc3RhdGljIHZv
aWQgbm90aWZ5X2xvYWRfc3RhdHVzX3VucmVhY2hhYmxlX2NiKFdlYktpdFdlYlZpZXcqIHZpZXcs
IEdQYXJhbVNwZWMqIHBzcGVjLCBHTWFpbkxvb3AqIGxvb3ApCi17Ci0gICAgV2ViS2l0TG9hZFN0
YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzICh2aWV3KTsKLSAg
ICBXZWJLaXRXZWJGcmFtZSogZnJhbWUgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUo
dmlldyk7Ci0KLSAgICBnX2Fzc2VydChzdGF0dXMgIT0gV0VCS0lUX0xPQURfRklOSVNIRUQpOwot
Ci0gICAgaWYgKHN0YXR1cyAhPSBXRUJLSVRfTE9BRF9GQUlMRUQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFdlYktpdFdlYkRhdGFTb3VyY2UqIGRhdGFzb3VyY2UgPSB3ZWJraXRfd2ViX2ZyYW1l
X2dldF9kYXRhX3NvdXJjZShmcmFtZSk7Ci0KLSAgICBnX2Fzc2VydF9jbXBzdHIoImh0dHA6Ly90
aGlzLmhvc3QuZG9lcy5ub3QuZXhpc3QvZG9pcmVhbGx5ZXhpc3QuaHRtbCIsID09LAotICAgICAg
ICAgICAgICAgICAgICB3ZWJraXRfd2ViX2RhdGFfc291cmNlX2dldF91bnJlYWNoYWJsZV91cmko
ZGF0YXNvdXJjZSkpOwotCi0gICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKLX0KLQotc3RhdGlj
IHZvaWQgbm90aWZ5X2xvYWRfc3RhdHVzX2NiKFdlYktpdFdlYlZpZXcqIHZpZXcsIEdQYXJhbVNw
ZWMqIHBzcGVjLCBHTWFpbkxvb3AqIGxvb3ApCi17Ci0gICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0
dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzICh2aWV3KTsKLSAgICBXZWJLaXRX
ZWJGcmFtZSogZnJhbWUgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUodmlldyk7Ci0g
ICAgV2ViS2l0V2ViRGF0YVNvdXJjZSogZGF0YVNvdXJjZSA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0
X2RhdGFfc291cmNlKGZyYW1lKTsKLQotICAgIGlmIChzdGF0dXMgPT0gV0VCS0lUX0xPQURfQ09N
TUlUVEVEKSB7Ci0gICAgICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfaXNfbG9h
ZGluZyhkYXRhU291cmNlKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZWxzZSBpZiAo
c3RhdHVzICE9IFdFQktJVF9MT0FEX0ZJTklTSEVEKQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
KiBUZXN0IGdldF9yZXF1ZXN0ICovCi0gICAgZ190ZXN0X21lc3NhZ2UoIlRlc3Rpbmcgd2Via2l0
X3dlYl9kYXRhX3NvdXJjZV9nZXRfcmVxdWVzdCIpOwotICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0
KiByZXF1ZXN0ID0gd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfcmVxdWVzdChkYXRhU291cmNl
KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X25ldHdvcmtfcmVxdWVzdF9nZXRfdXJpKHJl
cXVlc3QpLCA9PSwgImh0dHA6Ly93d3cud2Via2l0Lm9yZy8iKTsKLQotICAgIC8qIFRlc3QgZ2V0
X21haW5fcmVzb3VyY2UgKi8KLSAgICBnX3Rlc3RfbWVzc2FnZSgiVGVzdGluZyB3ZWJraXRfd2Vi
X2RhdGFfc291cmNlX2dldF9tYWluX3Jlc291cmNlIik7Ci0gICAgV2ViS2l0V2ViUmVzb3VyY2Uq
IHJlc291cmNlID0gd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfbWFpbl9yZXNvdXJjZShkYXRh
U291cmNlKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoInRleHQvaHRtbCIsID09LCB3ZWJraXRfd2Vi
X3Jlc291cmNlX2dldF9taW1lX3R5cGUocmVzb3VyY2UpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIo
Imh0dHA6Ly93d3cud2Via2l0Lm9yZy8iLCA9PSwgd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJp
KHJlc291cmNlKSk7Ci0KLSAgICAvKiBUZXN0IGdldF9kYXRhLiBXZSBqdXN0IHRlc3QgaWYgZGF0
YSBoYXMgY2VydGFpbiBzaXplIGZvciB0aGUgbWVhbiB0aW1lICovCi0gICAgZ190ZXN0X21lc3Nh
Z2UoIlRlc3Rpbmcgd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfZGF0YSBoYXMgY2VydGFpbiBz
aXplIik7Ci0gICAgR1N0cmluZyogZGF0YSA9IHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X2Rh
dGEoZGF0YVNvdXJjZSk7Ci0gICAgZ19hc3NlcnQoZGF0YS0+bGVuID4gMTAwKTsKLQotICAgIC8q
IEZJWE1FOiBBZGQgdGVzdCBmb3IgZ2V0X2VuY29kaW5nICovCi0KLSAgICBnX21haW5fbG9vcF9x
dWl0KGxvb3ApOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gd2FpdF90aW1lcl9maXJlZChHTWFpbkxv
b3AqIGxvb3ApCi17Ci0gICAgd2FpdFRpbWVyID0gMDsKLSAgICBnX21haW5fbG9vcF9xdWl0KGxv
b3ApOwotCi0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93
ZWJfZGF0YV9zb3VyY2UoKQotewotICAgIFdlYktpdFdlYlZpZXcqIHZpZXc7Ci0gICAgR01haW5M
b29wKiBsb29wOwotCi0gICAgdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdf
bmV3KCkpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKHZpZXcpOwotICAgIGxvb3AgPSBnX21haW5f
bG9vcF9uZXcoTlVMTCwgVFJVRSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdCh2aWV3LCAibm90aWZ5
Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0sobm90aWZ5X2xvYWRfc3RhdHVzX2NiKSwgbG9vcCk7
Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHZpZXcsICJodHRwOi8vd3d3LndlYmtpdC5v
cmciKTsKLQotICAgIHdhaXRUaW1lciA9IGdfdGltZW91dF9hZGRfc2Vjb25kcyhkZWZhdWx0VGlt
ZW91dCwgKEdTb3VyY2VGdW5jKXdhaXRfdGltZXJfZmlyZWQsIGxvb3ApOwotCi0gICAgZ19tYWlu
X2xvb3BfcnVuKGxvb3ApOwotCi0gICAgaWYgKHdhaXRUaW1lcikKLSAgICAgICAgZ19zb3VyY2Vf
cmVtb3ZlKHdhaXRUaW1lcik7Ci0KLSAgICB3YWl0VGltZXIgPSAwOwotCi0gICAgZ19tYWluX2xv
b3BfdW5yZWYobG9vcCk7Ci0gICAgZ19vYmplY3RfdW5yZWYodmlldyk7Ci19Ci0KLXN0YXRpYyB2
b2lkIG5vdGlmeV9sb2FkX3N0YXR1c19saWZldGltZV9jYihXZWJLaXRXZWJWaWV3KiB2aWV3LCBH
UGFyYW1TcGVjKiBwc3BlYywgR01haW5Mb29wKiBsb29wKQotewotICAgIFdlYktpdExvYWRTdGF0
dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyAodmlldyk7Ci0gICAg
V2ViS2l0V2ViRnJhbWUqIGZyYW1lID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKHZp
ZXcpOwotICAgIFdlYktpdFdlYkRhdGFTb3VyY2UqIGRhdGFTb3VyY2UgPSB3ZWJraXRfd2ViX2Zy
YW1lX2dldF9kYXRhX3NvdXJjZShmcmFtZSk7Ci0KLSAgICBpZiAoc3RhdHVzID09IFdFQktJVF9M
T0FEX0NPTU1JVFRFRCkgewotICAgICAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2RhdGFfc291cmNl
X2lzX2xvYWRpbmcoZGF0YVNvdXJjZSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlm
IChzdGF0dXMgIT0gV0VCS0lUX0xPQURfRklOSVNIRUQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dl
Yl9kYXRhX3NvdXJjZV9saWZldGltZSgpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogdmlldzsKLSAg
ICBHTWFpbkxvb3AqIGxvb3A7Ci0KLSAgICB2aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93
ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsodmlldyk7Ci0gICAgbG9vcCA9
IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHZpZXcs
ICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhub3RpZnlfbG9hZF9zdGF0dXNfbGlm
ZXRpbWVfY2IpLCBsb29wKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkodmlldywgImh0
dHA6Ly93d3cud2Via2l0Lm9yZyIpOwotCi0gICAgd2FpdFRpbWVyID0gZ190aW1lb3V0X2FkZF9z
ZWNvbmRzKGRlZmF1bHRUaW1lb3V0LCAoR1NvdXJjZUZ1bmMpd2FpdF90aW1lcl9maXJlZCwgbG9v
cCk7Ci0KLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICBXZWJLaXRXZWJEYXRhU291
cmNlKiBkYXRhU291cmNlID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfZGF0YV9zb3VyY2Uod2Via2l0
X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKHZpZXcpKTsKLSAgICBHTGlzdCogc3ViUmVzb3VyY2Vz
ID0gd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfc3VicmVzb3VyY2VzKGRhdGFTb3VyY2UpOwot
ICAgIGdpbnQgbnVtYmVyT2ZSZXNvdXJjZXMgPSBnX2xpc3RfbGVuZ3RoKHN1YlJlc291cmNlcyk7
Ci0gICAgZ19saXN0X2ZyZWUoc3ViUmVzb3VyY2VzKTsKLQotICAgIGdfYXNzZXJ0X2NtcGludCh3
ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHZpZXcpLCA9PSwgV0VCS0lUX0xPQURfRklO
SVNIRUQpOwotCi0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHZpZXcsICJodHRwOi8vZ25v
bWUub3JnIik7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl92aWV3X2dldF9sb2Fk
X3N0YXR1cyh2aWV3KSwgPT0sIFdFQktJVF9MT0FEX1BST1ZJU0lPTkFMKTsKLQotICAgIHdlYmtp
dF93ZWJfdmlld19zdG9wX2xvYWRpbmcodmlldyk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQod2Vi
a2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh2aWV3KSwgPT0sIFdFQktJVF9MT0FEX0ZBSUxF
RCk7Ci0KLSAgICBzdWJSZXNvdXJjZXMgPSB3ZWJraXRfd2ViX2RhdGFfc291cmNlX2dldF9zdWJy
ZXNvdXJjZXMoZGF0YVNvdXJjZSk7Ci0gICAgZ19hc3NlcnRfY21waW50KG51bWJlck9mUmVzb3Vy
Y2VzLCA9PSwgZ19saXN0X2xlbmd0aChzdWJSZXNvdXJjZXMpKTsKLSAgICBnX2xpc3RfZnJlZShz
dWJSZXNvdXJjZXMpOwotCi0gICAgaWYgKHdhaXRUaW1lcikKLSAgICAgICAgZ19zb3VyY2VfcmVt
b3ZlKHdhaXRUaW1lcik7Ci0KLSAgICB3YWl0VGltZXIgPSAwOwotCi0gICAgZ19tYWluX2xvb3Bf
dW5yZWYobG9vcCk7Ci0gICAgZ19vYmplY3RfdW5yZWYodmlldyk7Ci19Ci0KLXN0YXRpYyB2b2lk
IHRlc3Rfd2Via2l0X3dlYl9kYXRhX3NvdXJjZV91bnJlYWNoYWJsZV91cmkoKQotewotICAgIC8q
IEZJWE1FOiB0aGlzIHRlc3QgZmFpbHMgY3VycmVudGx5LiAqLwotICAgIHJldHVybjsKLQotICAg
IFdlYktpdFdlYlZpZXcqIHZpZXc7Ci0gICAgR01haW5Mb29wKiBsb29wOwotCi0gICAgdmlldyA9
IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0X3Jl
Zl9zaW5rKHZpZXcpOwotICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7Ci0g
ICAgZ19zaWduYWxfY29ubmVjdCh2aWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJB
Q0sobm90aWZ5X2xvYWRfc3RhdHVzX3VucmVhY2hhYmxlX2NiKSwgbG9vcCk7Ci0gICAgd2Via2l0
X3dlYl92aWV3X2xvYWRfdXJpKHZpZXcsICJodHRwOi8vdGhpcy5ob3N0LmRvZXMubm90LmV4aXN0
L2RvaXJlYWxseWV4aXN0Lmh0bWwiKTsKLQotICAgIHdhaXRUaW1lciA9IGdfdGltZW91dF9hZGRf
c2Vjb25kcyhkZWZhdWx0VGltZW91dCwgKEdTb3VyY2VGdW5jKXdhaXRfdGltZXJfZmlyZWQsIGxv
b3ApOwotCi0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAgaWYgKHdhaXRUaW1lcikK
LSAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKHdhaXRUaW1lcik7Ci0KLSAgICB3YWl0VGltZXIgPSAw
OwotCi0gICAgZ19tYWluX2xvb3BfdW5yZWYobG9vcCk7Ci0gICAgZ19vYmplY3RfdW5yZWYodmll
dyk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKLXsKLSAgICBndGtfdGVz
dF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBz
Oi8vYnVncy53ZWJraXQub3JnLyIpOwotICAgIGdfdGVzdF9idWcoIjI0NzU4Iik7Ci0gICAgZ190
ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYmRhdGFzb3VyY2UvZ2V0X2luaXRpYWxfcmVxdWVzdCIs
Ci0gICAgICAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfaW5p
dGlhbF9yZXF1ZXN0KTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2ViZGF0YXNvdXJj
ZS9hcGkiLAotICAgICAgICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF93ZWJfZGF0YV9zb3VyY2Up
OwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJkYXRhc291cmNlL3VucmVhY2hhYmxl
X3VyaSIsCi0gICAgICAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X3dlYl9kYXRhX3NvdXJjZV91
bnJlYWNoYWJsZV91cmkpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJkYXRhc291
cmNlL2xpZmV0aW1lIiwKLSAgICAgICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfd2ViX2RhdGFf
c291cmNlX2xpZmV0aW1lKTsKLQotICAgIHJldHVybiBnX3Rlc3RfcnVuICgpOwotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYmZyYW1lLmMgYi9Tb3VyY2UvV2Vi
S2l0L2d0ay90ZXN0cy90ZXN0d2ViZnJhbWUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMTEzMTg3My4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2Vi
ZnJhbWUuYworKysgL2Rldi9udWxsCkBAIC0xLDIyMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgQ29sbGFib3JhIEx0ZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgPGVycm5vLmg+
Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGdsaWIv
Z3N0ZGlvLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQu
aD4KLQotc3RhdGljIGludCBudW1iZXJPZkZyYW1lc0NyZWF0ZWQgPSAwOwotCi1zdGF0aWMgdm9p
ZCBjcmVhdGVGcmFtZVNpZ25hbFRlc3RGcmFtZUNyZWF0ZWRDYWxsYmFjayhXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3LCBXZWJLaXRXZWJGcmFtZSogZnJhbWUsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAg
bnVtYmVyT2ZGcmFtZXNDcmVhdGVkKys7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBjcmVhdGVGcmFt
ZVNpZ25hbFRlc3RUaW1lb3V0KGdwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19hc3NlcnRfY21waW50
KG51bWJlck9mRnJhbWVzQ3JlYXRlZCwgPT0sIDIpOwotICAgIGdfbWFpbl9sb29wX3F1aXQoKEdN
YWluTG9vcCopIGRhdGEpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQgdGVz
dF93ZWJraXRfd2ViX2ZyYW1lX2NyZWF0ZWRfc2lnbmFsKHZvaWQpCi17Ci0gICAgR3RrV2lkZ2V0
KiB3ZWJWaWV3OwotICAgIEd0a1dpZGdldCogd2luZG93OwotICAgIEdNYWluTG9vcCogbG9vcCA9
IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLQotICAgIHdpbmRvdyA9IGd0a193aW5kb3df
bmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOwotCi0gICAgd2ViVmlldyA9IHdlYmtpdF93ZWJfdmll
d19uZXcoKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJmcmFtZS1jcmVhdGVkIiwg
R19DQUxMQkFDSyhjcmVhdGVGcmFtZVNpZ25hbFRlc3RGcmFtZUNyZWF0ZWRDYWxsYmFjayksIGxv
b3ApOwotCi0gICAgLy8gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCBleGFjdGx5IHR3byBjcmVhdGUt
ZnJhbWUgc2lnbmFscyBhcmUKLSAgICAvLyBmaXJlZCBhbmQgbm8gbW9yZSwgc28gd2Ugc2V0IGEg
dGltZW91dCBoZXJlLiBUaGVyZSBkb2VzIG5vdCBhcHBlYXIKLSAgICAvLyB0byBiZSBhIHNpbXBs
ZSB3YXkgdmlhIHRoZSBBUEkgdG8gZmlndXJlIG91dCB3aGVuIGFsbCBmcmFtZXMgaGF2ZQotICAg
IC8vIGxvYWRlZC4KLSAgICBnX3RpbWVvdXRfYWRkKDUwMCwgY3JlYXRlRnJhbWVTaWduYWxUZXN0
VGltZW91dCwgbG9vcCk7Ci0KLSAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdp
bmRvdyksIHdlYlZpZXcpOwotICAgIGd0a193aWRnZXRfc2hvdyh3aW5kb3cpOwotICAgIGd0a193
aWRnZXRfc2hvdyh3ZWJWaWV3KTsKLQotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhX
RUJLSVRfV0VCX1ZJRVcod2ViVmlldyksCi0gICAgICAgICI8aHRtbD48Ym9keT5GcmFtZXMhIgot
ICAgICAgICAiPGlmcmFtZT48L2lmcmFtZT4iCi0gICAgICAgICI8aWZyYW1lPjwvaWZyYW1lPiIK
LSAgICAgICAgIjwvYm9keT48L2h0bWw+IiwKLSAgICAgICAgInRleHQvaHRtbCIsICJ1dGYtOCIs
ICJmaWxlOi8vIik7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotfQotCi1zdGF0aWMgdm9p
ZCB0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfY3JlYXRlX2Rlc3Ryb3kodm9pZCkKLXsKLSAgICBHdGtX
aWRnZXQgKndlYlZpZXc7Ci0gICAgR3RrV2lkZ2V0ICp3aW5kb3c7Ci0KLSAgICBnX3Rlc3RfYnVn
KCIyMTgzNyIpOwotICAgIHdlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7Ci0gICAgZ19v
YmplY3RfcmVmX3Npbmsod2ViVmlldyk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKHdl
YlZpZXcpLT5yZWZfY291bnQsID09LCAxKTsKLSAgICAvLyBUaGlzIGNyYXNoZWQgd2l0aCB0aGUg
b3JpZ2luYWwgdmVyc2lvbgotICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwotCi0gICAgZ190
ZXN0X2J1ZygiMjUwNDIiKTsKLSAgICB3aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9X
X1RPUExFVkVMKTsKLSAgICB3ZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygpOwotICAgIGd0
a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgd2ViVmlldyk7Ci0gICAgZ3Rr
X3dpZGdldF9zaG93KHdpbmRvdyk7Ci0gICAgZ3RrX3dpZGdldF9zaG93KHdlYlZpZXcpOwotICAg
IGd0a193aWRnZXRfZGVzdHJveSh3ZWJWaWV3KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJr
aXRfd2ViX2ZyYW1lX2xpZmV0aW1lKHZvaWQpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmll
dzsKLSAgICBXZWJLaXRXZWJGcmFtZSogd2ViRnJhbWU7Ci0gICAgZ190ZXN0X2J1ZygiMjE4Mzci
KTsKLQotICAgIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygp
KTsKLSAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
R19PQkpFQ1Qod2ViVmlldyktPnJlZl9jb3VudCwgPT0sIDEpOwotICAgIHdlYkZyYW1lID0gd2Vi
a2l0X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKHdlYlZpZXcpOwotICAgIGdfYXNzZXJ0X2NtcGlu
dChHX09CSkVDVCh3ZWJGcmFtZSktPnJlZl9jb3VudCwgPT0sIDEpOwotCi0gICAgLy8gQWRkIGR1
bW15IHJlZmVyZW5jZSBvbiB0aGUgV2ViS2l0V2ViRnJhbWUgdG8ga2VlcCBpdCBhbGl2ZQotICAg
IGdfb2JqZWN0X3JlZih3ZWJGcmFtZSk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKHdl
YkZyYW1lKS0+cmVmX2NvdW50LCA9PSwgMik7Ci0KLSAgICAvLyBUaGlzIGNyYXNoZWQgd2l0aCB0
aGUgb3JpZ2luYWwgdmVyc2lvbgotICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwotCi0gICAg
Ly8gTWFrZSBzdXJlIHRoYXQgdGhlIGZyYW1lIGdvdCBkZWxldGVkIGFzIHdlbGwuIFdlIGRpZCB0
aGlzCi0gICAgLy8gYnkgYWRkaW5nIGFuIGV4dHJhIHJlZiBvbiB0aGUgV2ViS2l0V2ViRnJhbWUg
YW5kIHdlIHNob3VsZAotICAgIC8vIGJlIHRoZSBvbmUgaG9sZGluZyB0aGUgbGFzdCByZWZlcmVu
Y2UuCi0gICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKHdlYkZyYW1lKS0+cmVmX2NvdW50LCA9
PSwgMSk7Ci0gICAgZ19vYmplY3RfdW5yZWYod2ViRnJhbWUpOwotfQotCi1zdGF0aWMgZ2Jvb2xl
YW4gcHJpbnRfcmVxdWVzdGVkX2NiKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFdlYkZy
YW1lKiB3ZWJGcmFtZSwgR01haW5Mb29wKiBsb29wKQotewotICAgIGdfb2JqZWN0X3NldF9kYXRh
KEdfT0JKRUNUKHdlYlZpZXcpLCAic2lnbmFsLWhhbmRsZWQiLCBHSU5UX1RPX1BPSU5URVIoVFJV
RSkpOwotICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0K
LXN0YXRpYyB2b2lkIHByaW50X3RpbWVvdXQoR01haW5Mb29wKiBsb29wKQotewotICAgIGlmIChn
X21haW5fbG9vcF9pc19ydW5uaW5nKGxvb3ApKQotICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxv
b3ApOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfcHJpbnRpbmcodm9p
ZCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OwotCi0gICAgd2ViVmlldyA9IFdFQktJ
VF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5r
KHdlYlZpZXcpOwotICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVCh3ZWJWaWV3KS0+cmVmX2Nv
dW50LCA9PSwgMSk7Ci0KLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxodG1sPjxib2R5PjxoMT5XZWJLaXRH
VEsrITwvaDE+PC9ib2R5PjwvaHRtbD4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAidGV4dC9odG1sIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInV0Zi04IiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGU6Ly8iKTsKLQotICAgIEdNYWlu
TG9vcCogbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLQotICAgIC8vIERvZXMg
amF2YXNjcmlwdCBwcmludCgpIHdvcmsgY29ycmVjdGx5PwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
d2ViVmlldywgInByaW50LXJlcXVlc3RlZCIsCi0gICAgICAgICAgICAgICAgICAgICBHX0NBTExC
QUNLKHByaW50X3JlcXVlc3RlZF9jYiksCi0gICAgICAgICAgICAgICAgICAgICBsb29wKTsKLQot
ICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKHdlYlZpZXcpLCAic2lnbmFsLWhhbmRsZWQi
LCBHSU5UX1RPX1BPSU5URVIoRkFMU0UpKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfZXhlY3V0ZV9z
Y3JpcHQgKHdlYlZpZXcsICJwcmludCgpOyIpOwotCi0gICAgLy8gR2l2ZSBqYXZhc2NyaXB0Y29y
ZSBzb21lIHRpbWUgdG8gcHJvY2VzcyB0aGUgcHJpbnQgcmVxdWVzdCwgYnV0Ci0gICAgLy8gcHJl
cGFyZSBhIHRpbWVvdXQgdG8gYXZvaWQgaXQgcnVubmluZyBmb3JldmVyIGluIGNhc2UgdGhlIHNp
Z25hbCBpcwotICAgIC8vIG5ldmVyIGVtaXR0ZWQuCi0gICAgZ190aW1lb3V0X2FkZCgxMDAwLCAo
R1NvdXJjZUZ1bmMpcHJpbnRfdGltZW91dCwgbG9vcCk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGxv
b3ApOwotCi0gICAgZ19hc3NlcnRfY21waW50KEdQT0lOVEVSX1RPX0lOVChnX29iamVjdF9nZXRf
ZGF0YShHX09CSkVDVCh3ZWJWaWV3KSwgInNpZ25hbC1oYW5kbGVkIikpLCA9PSwgVFJVRSk7Ci0K
LSAgICAvLyBEb2VzIHByaW50aW5nIGRpcmVjdGx5IHRvIGEgZmlsZT8KLSAgICBHRXJyb3IgKmVy
cm9yID0gTlVMTDsKLSAgICBnY2hhciogdGVtcG9yYXJ5RmlsZW5hbWUgPSBOVUxMOwotICAgIGdp
bnQgZmQgPSBnX2ZpbGVfb3Blbl90bXAgKCJ3ZWJraXQtdGVzdHdlYmZyYW1lLVhYWFhYWCIsICZ0
ZW1wb3JhcnlGaWxlbmFtZSwgJmVycm9yKTsKLSAgICBjbG9zZShmZCk7Ci0KLSAgICBpZiAoZXJy
b3IpIHsKLSAgICAgICAgZ19jcml0aWNhbCgiRmFpbGVkIHRvIG9wZW4gYSB0ZW1wb3JhcnkgZmls
ZSBmb3Igd3JpdGluZzogJXMuIiwgZXJyb3ItPm1lc3NhZ2UpOwotICAgICAgICBnX2Vycm9yX2Zy
ZWUoZXJyb3IpOwotICAgICAgICBnb3RvIGNsZWFudXA7Ci0gICAgfQotCi0gICAgLy8gV2UgZGVs
ZXRlIHRoZSBmaWxlLCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgZmlndXJlIG91dCB0aGF0IHRoZQot
ICAgIC8vIGZpbGUgZ290IHByaW50ZWQ7Ci0gICAgaWYgKGdfdW5saW5rKHRlbXBvcmFyeUZpbGVu
YW1lKSA9PSAtMSkgewotICAgICAgICBnX3dhcm5pbmcoIkZhaWxlZCB0byBkZWxldGUgdGhlIHRl
bXBvcmFyeSBmaWxlOiAlcy5cblRoaXMgbWF5IGNhdXNlIHRoZSB0ZXN0IHRvIGJlIGJvZ3VzLiIs
IGdfc3RyZXJyb3IoZXJybm8pKTsKLSAgICB9Ci0KLSAgICBXZWJLaXRXZWJGcmFtZSogd2ViRnJh
bWUgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUod2ViVmlldyk7Ci0gICAgR3RrUHJp
bnRPcGVyYXRpb24qIG9wZXJhdGlvbiA9IGd0a19wcmludF9vcGVyYXRpb25fbmV3KCk7Ci0gICAg
R3RrUHJpbnRPcGVyYXRpb25BY3Rpb24gYWN0aW9uID0gR1RLX1BSSU5UX09QRVJBVElPTl9BQ1RJ
T05fRVhQT1JUOwotICAgIEd0a1ByaW50T3BlcmF0aW9uUmVzdWx0IHJlc3VsdDsKLQotICAgIGd0
a19wcmludF9vcGVyYXRpb25fc2V0X2V4cG9ydF9maWxlbmFtZShvcGVyYXRpb24sIHRlbXBvcmFy
eUZpbGVuYW1lKTsKLSAgICByZXN1bHQgPSB3ZWJraXRfd2ViX2ZyYW1lX3ByaW50X2Z1bGwgKHdl
YkZyYW1lLCBvcGVyYXRpb24sIGFjdGlvbiwgTlVMTCk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQo
cmVzdWx0LCA9PSwgR1RLX1BSSU5UX09QRVJBVElPTl9SRVNVTFRfQVBQTFkpOwotICAgIGdfYXNz
ZXJ0X2NtcGludChnX2ZpbGVfdGVzdCh0ZW1wb3JhcnlGaWxlbmFtZSwgR19GSUxFX1RFU1RfSVNf
UkVHVUxBUiksID09LCBUUlVFKTsKLQotICAgIGdfdW5saW5rKHRlbXBvcmFyeUZpbGVuYW1lKTsK
LSAgICBnX29iamVjdF91bnJlZihvcGVyYXRpb24pOwotY2xlYW51cDoKLSAgICBnX29iamVjdF91
bnJlZih3ZWJWaWV3KTsKLSAgICBnX2ZyZWUodGVtcG9yYXJ5RmlsZW5hbWUpOwotfQotCi1zdGF0
aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfcmVzcG9uc2UoKQotewotICAgIFdlYktpdFdl
YkZyYW1lKiBmcmFtZSA9IGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfRlJBTUUsIE5VTEwp
OwotICAgIFdlYktpdE5ldHdvcmtSZXNwb25zZSogcmVzcG9uc2UgPSB3ZWJraXRfd2ViX2ZyYW1l
X2dldF9uZXR3b3JrX3Jlc3BvbnNlKGZyYW1lKTsKLSAgICBnX2Fzc2VydCghcmVzcG9uc2UpOwot
ICAgIGdfb2JqZWN0X3VucmVmKGZyYW1lKTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIq
KiBhcmd2KQotewotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLQotICAg
IGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0gICAgZ190ZXN0
X2FkZF9mdW5jKCIvd2Via2l0L3dlYnZpZXcvY3JlYXRlX2Rlc3Ryb3kiLCB0ZXN0X3dlYmtpdF93
ZWJfZnJhbWVfY3JlYXRlX2Rlc3Ryb3kpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93
ZWJ2aWV3L2ZyYW1lLWNyZWF0ZWRfc2lnbmFsIiwgdGVzdF93ZWJraXRfd2ViX2ZyYW1lX2NyZWF0
ZWRfc2lnbmFsKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2ViZnJhbWUvbGlmZXRp
bWUiLCB0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfbGlmZXRpbWUpOwotICAgIGdfdGVzdF9hZGRfZnVu
YygiL3dlYmtpdC93ZWJ2aWV3L3ByaW50aW5nIiwgdGVzdF93ZWJraXRfd2ViX2ZyYW1lX3ByaW50
aW5nKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vidmlldy9yZXNwb25zZSIsIHRl
c3Rfd2Via2l0X3dlYl9mcmFtZV9yZXNwb25zZSk7Ci0gICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2ViaGlzdG9yeWl0
ZW0uYyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJoaXN0b3J5aXRlbS5jCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmUxOTFjLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJoaXN0b3J5aXRlbS5jCisrKyAvZGV2L251bGwKQEAgLTEs
NzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4gTWljaGFlbCBBbG9uem8K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxndGsvZ3Rr
Lmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAg
V2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGl0ZW07Ci19IFdlYkhpc3RvcnlJdGVtRml4dHVyZTsKLQot
c3RhdGljIHZvaWQgd2ViX2hpc3RvcnlfaXRlbV9maXh0dXJlX3NldHVwKFdlYkhpc3RvcnlJdGVt
Rml4dHVyZSogZml4dHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZml4dHVyZS0+aXRlbSA9IHdlYmtpdF93
ZWJfaGlzdG9yeV9pdGVtX25ld193aXRoX2RhdGEoImh0dHA6Ly9leGFtcGxlLmNvbS8iLCAiRXhh
bXBsZTEiKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoZml4dHVyZS0+aXRlbSktPnJl
Zl9jb3VudCwgPT0gLCAxKTsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT5pdGVtICE9IE5VTEwpOwot
fQotCi1zdGF0aWMgdm9pZCB3ZWJfaGlzdG9yeV9pdGVtX2ZpeHR1cmVfdGVhcmRvd24oV2ViSGlz
dG9yeUl0ZW1GaXh0dXJlKiBmaXh0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBnX2Fzc2VydChmaXh0
dXJlLT5pdGVtICE9IE5VTEwpOwotICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChmaXh0dXJl
LT5pdGVtKS0+cmVmX2NvdW50LCA9PSwgMSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0
X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X2RhdGEoV2ViSGlzdG9yeUl0ZW1GaXh0dXJlKiBmaXh0dXJl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY29u
c3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9y
eV9pdGVtX2dldF90aXRsZShmaXh0dXJlLT5pdGVtKSwgPT0sICJFeGFtcGxlMSIpOwotICAgIGdf
YXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdXJpKGZpeHR1cmUtPml0
ZW0pLCA9PSwgImh0dHA6Ly9leGFtcGxlLmNvbS8iKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93
ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9hbHRlcm5hdGVfdGl0bGUoV2ViSGlzdG9yeUl0ZW1GaXh0
dXJlKiBmaXh0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIHdlYmtpdF93ZWJfaGlz
dG9yeV9pdGVtX3NldF9hbHRlcm5hdGVfdGl0bGUoZml4dHVyZS0+aXRlbSwgIkFsdGVybmF0ZSB0
aXRsZSIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRf
YWx0ZXJuYXRlX3RpdGxlKGZpeHR1cmUtPml0ZW0pLCA9PSwgIkFsdGVybmF0ZSB0aXRsZSIpOwot
fQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCi17Ci0gICAgZ3RrX3Rlc3RfaW5p
dCgmYXJnYywgJmFyZ3YsIE5VTEwpOwotCi0gICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy8iKTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L3dlYmhpc3RvcnlpdGVt
L2dldF9kYXRhIiwKLSAgICAgICAgICAgICAgIFdlYkhpc3RvcnlJdGVtRml4dHVyZSwgMCwgd2Vi
X2hpc3RvcnlfaXRlbV9maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF93ZWJraXRf
d2ViX2hpc3RvcnlfaXRlbV9nZXRfZGF0YSwgd2ViX2hpc3RvcnlfaXRlbV9maXh0dXJlX3RlYXJk
b3duKTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L3dlYmhpc3RvcnlpdGVtL2FsdGVybmF0ZV90
aXRsZSIsCi0gICAgICAgICAgICAgICBXZWJIaXN0b3J5SXRlbUZpeHR1cmUsIDAsIHdlYl9oaXN0
b3J5X2l0ZW1fZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X3dlYl9o
aXN0b3J5X2l0ZW1fYWx0ZXJuYXRlX3RpdGxlLCB3ZWJfaGlzdG9yeV9pdGVtX2ZpeHR1cmVfdGVh
cmRvd24pOwotICAgIHJldHVybiBnX3Rlc3RfcnVuICgpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYmluc3BlY3Rvci5jIGIvU291cmNlL1dlYktpdC9ndGsv
dGVzdHMvdGVzdHdlYmluc3BlY3Rvci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBh
NzQzODJmLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJpbnNw
ZWN0b3IuYworKysgL2Rldi9udWxsCkBAIC0xLDE3MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEyIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSA8Z25zQGdub21lLm9yZz4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgInRlc3RfdXRpbHMuaCIKLQotI2luY2x1ZGUgPHN0cmluZy5o
PgotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d2Vi
a2l0L3dlYmtpdC5oPgotCi1HTWFpbkxvb3AgKmxvb3A7Ci1HdGtXaWRnZXQgKndpbmRvdzsKLQot
c3RhdGljIGdib29sZWFuIHF1aXRMb29wKGdwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19tYWluX2xv
b3BfcXVpdChsb29wKTsKLSAgICByZXR1cm4gVFJVRTsKLX0KLQotLyogSWdub3JlIHNpbXBsZSB0
cmFuc2xhdGlvbi1yZWxhdGVkIG1lc3NhZ2VzIGFuZCB1cGdyYWRlIG90aGVyCi0gKiBtZXNzYWdl
cyB0byB3YXJuaW5ncy4KLSAqLwotc3RhdGljIGdib29sZWFuIGNvbnNvbGVNZXNzYWdlQ2FsbGJh
Y2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgY29uc3QgY2hhciogbWVzc2FnZSwgdW5zaWduZWQg
aW50IGxpbmUsIGNvbnN0IGNoYXIqIHNvdXJjZUlkKQotewotICAgIGlmIChzdHJzdHIobWVzc2Fn
ZSwgIkxvY2FsaXplZCBzdHJpbmciKSB8fCBzdHJzdHIobWVzc2FnZSwgIlByb3RvY29sIEVycm9y
OiB0aGUgbWVzc2FnZSBpcyBmb3Igbm9uLWV4aXN0aW5nIGRvbWFpbiAnUHJvZmlsZXInIikgfHwK
LSAgICAgICAgc3Ryc3RyKG1lc3NhZ2UsICJEaWRuJ3QgZmluZCBhIFRyZWVFbGVtZW50IGZvciBh
IHJlcHJlc2VudGVkT2JqZWN0IikpCi0gICAgICAgIHJldHVybiBUUlVFOwotCi0gICAgZ193YXJu
aW5nKCJDb25zb2xlOiAlcyBAJWQ6ICVzXG4iLCBzb3VyY2VJZCwgbGluZSwgbWVzc2FnZSk7Ci0g
ICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBXZWJLaXRXZWJWaWV3KiBpbnNwZWN0RWxlbWVu
dENhbGxiYWNrKFdlYktpdFdlYkluc3BlY3RvciAqaW5zcGVjdG9yLCBXZWJLaXRXZWJWaWV3ICpp
bnNwZWN0ZWRXZWJWaWV3LCBpbnQgKnRpbWVzRWxlbWVudEluc3BlY3RlZCkKLXsKLSAgICAqdGlt
ZXNFbGVtZW50SW5zcGVjdGVkID0gKnRpbWVzRWxlbWVudEluc3BlY3RlZCArIDE7Ci0KLSAgICB3
aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKLQotICAgIEd0a1dp
ZGdldCAqbmV3V2ViVmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKLSAgICBndGtfY29udGFp
bmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIG5ld1dlYlZpZXcpOwotCi0gICAgZ19zaWdu
YWxfY29ubmVjdChuZXdXZWJWaWV3LCAiY29uc29sZS1tZXNzYWdlIiwKLSAgICAgICAgICAgICAg
ICAgICAgIEdfQ0FMTEJBQ0soY29uc29sZU1lc3NhZ2VDYWxsYmFjayksIE5VTEwpOwotCi0gICAg
cmV0dXJuIFdFQktJVF9XRUJfVklFVyhuZXdXZWJWaWV3KTsKLX0KLQotc3RhdGljIGdib29sZWFu
IGNsb3NlSW5zcGVjdG9yKFdlYktpdFdlYkluc3BlY3RvciAqaW5zcGVjdG9yLCBpbnQgKnRpbWVz
Q2xvc2VkKQotewotICAgICp0aW1lc0Nsb3NlZCA9ICp0aW1lc0Nsb3NlZCArIDE7Ci0KLSAgICBn
dGtfd2lkZ2V0X2Rlc3Ryb3kod2luZG93KTsKLSAgICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGlj
IGdib29sZWFuIHNob3dJbnNwZWN0b3IoV2ViS2l0V2ViSW5zcGVjdG9yICppbnNwZWN0b3IsIGdw
b2ludGVyIGRhdGEpCi17Ci0gICAgZ19pZGxlX2FkZChxdWl0TG9vcCwgTlVMTCk7Ci0gICAgcmV0
dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkIGxvYWRGaW5pc2hlZChXZWJLaXRXZWJWaWV3ICp3
ZWJWaWV3LCBXZWJLaXRXZWJGcmFtZSAqZnJhbWUsIGdib29sZWFuICppc0xvYWRGaW5pc2hlZCkK
LXsKLSAgICAqaXNMb2FkRmluaXNoZWQgPSBUUlVFOwotICAgIGlmIChnX21haW5fbG9vcF9pc19y
dW5uaW5nKGxvb3ApKQotICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwotfQotCi1zdGF0
aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfaW5zcGVjdG9yX2Nsb3NlX2FuZF9pbnNwZWN0KCkKLXsK
LSAgICBXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJf
dmlld19uZXcoKSk7Ci0gICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLQot
ICAgIGdib29sZWFuIGlzTG9hZEZpbmlzaGVkID0gRkFMU0U7Ci0gICAgZ19zaWduYWxfY29ubmVj
dCh3ZWJWaWV3LCAibG9hZC1maW5pc2hlZCIsIEdfQ0FMTEJBQ0sobG9hZEZpbmlzaGVkKSwgJmlz
TG9hZEZpbmlzaGVkKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxodG1sPjxib2R5PjxwPndvb2hvbzwv
cD48L2JvZHk+PC9odG1sPiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXh0
L2h0bWwiLCAiVVRGLTgiLCAiZmlsZTovLyIpOwotICAgIGlmICghaXNMb2FkRmluaXNoZWQpCi0g
ICAgICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLQotICAgIGdfb2JqZWN0X3NldCh3ZWJraXRf
d2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdlYlZpZXcpLCAiZW5hYmxlLWRldmVsb3Blci1leHRyYXMi
LCBUUlVFLCBOVUxMKTsKLSAgICBXZWJLaXRXZWJJbnNwZWN0b3IgKmluc3BlY3RvciA9IHdlYmtp
dF93ZWJfdmlld19nZXRfaW5zcGVjdG9yKHdlYlZpZXcpOwotCi0gICAgaW50IHRpbWVzRWxlbWVu
dEluc3BlY3RlZCA9IDA7Ci0gICAgaW50IHRpbWVzQ2xvc2VkID0gMDsKLSAgICBnX29iamVjdF9j
b25uZWN0KGluc3BlY3RvciwKLSAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6Omluc3BlY3Qt
d2ViLXZpZXciLCBHX0NBTExCQUNLKGluc3BlY3RFbGVtZW50Q2FsbGJhY2spLCAmdGltZXNFbGVt
ZW50SW5zcGVjdGVkLAotICAgICAgICAgICAgICAgICAgICAgInNpZ25hbDo6c2hvdy13aW5kb3ci
LCBHX0NBTExCQUNLKHNob3dJbnNwZWN0b3IpLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAg
InNpZ25hbDo6Y2xvc2Utd2luZG93IiwgR19DQUxMQkFDSyhjbG9zZUluc3BlY3RvciksICZ0aW1l
c0Nsb3NlZCwKLSAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotCi0gICAgd2Via2l0X3dlYl9p
bnNwZWN0b3JfaW5zcGVjdF9jb29yZGluYXRlcyhpbnNwZWN0b3IsIDAuMCwgMC4wKTsKLSAgICBn
X2Fzc2VydF9jbXBpbnQodGltZXNFbGVtZW50SW5zcGVjdGVkLCA9PSwgMSk7Ci0KLSAgICBnX21h
aW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICB3ZWJraXRfd2ViX2luc3BlY3Rvcl9jbG9zZShpbnNw
ZWN0b3IpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0aW1lc0Nsb3NlZCwgPT0sIDEpOwotCi0gICAg
d2Via2l0X3dlYl9pbnNwZWN0b3JfaW5zcGVjdF9jb29yZGluYXRlcyhpbnNwZWN0b3IsIDAuMCwg
MC4wKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGltZXNFbGVtZW50SW5zcGVjdGVkLCA9PSwgMik7
Ci0KLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICBndGtfd2lkZ2V0X2Rlc3Ryb3ko
R1RLX1dJREdFVCh3ZWJWaWV3KSk7Ci0gICAgZ19hc3NlcnRfY21waW50KHRpbWVzQ2xvc2VkLCA9
PSwgMik7Ci0KLSAgICBnX21haW5fbG9vcF91bnJlZihsb29wKTsKLX0KLQotc3RhdGljIHZvaWQg
dGVzdF93ZWJraXRfd2ViX2luc3BlY3Rvcl9kZXN0cm95X2luc3BlY3RlZF93ZWJfdmlldygpCi17
Ci0gICAgV2ViS2l0V2ViVmlldyAqd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2Vi
X3ZpZXdfbmV3KCkpOwotICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7Ci0K
LSAgICBnYm9vbGVhbiBpc0xvYWRGaW5pc2hlZCA9IEZBTFNFOwotICAgIGdfc2lnbmFsX2Nvbm5l
Y3Qod2ViVmlldywgImxvYWQtZmluaXNoZWQiLCBHX0NBTExCQUNLKGxvYWRGaW5pc2hlZCksICZp
c0xvYWRGaW5pc2hlZCk7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8aHRtbD48Ym9keT48cD53b29ob288
L3A+PC9ib2R5PjwvaHRtbD4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGV4
dC9odG1sIiwgIlVURi04IiwgImZpbGU6Ly8iKTsKLSAgICBpZiAoIWlzTG9hZEZpbmlzaGVkKQot
ICAgICAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICBnX29iamVjdF9zZXQod2Via2l0
X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3KSwgImVuYWJsZS1kZXZlbG9wZXItZXh0cmFz
IiwgVFJVRSwgTlVMTCk7Ci0gICAgV2ViS2l0V2ViSW5zcGVjdG9yICppbnNwZWN0b3IgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X2luc3BlY3Rvcih3ZWJWaWV3KTsKLQotICAgIGludCB0aW1lc0VsZW1l
bnRJbnNwZWN0ZWQgPSAwOwotICAgIGludCB0aW1lc0Nsb3NlZCA9IDA7Ci0gICAgZ19vYmplY3Rf
Y29ubmVjdChpbnNwZWN0b3IsCi0gICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjppbnNwZWN0
LXdlYi12aWV3IiwgR19DQUxMQkFDSyhpbnNwZWN0RWxlbWVudENhbGxiYWNrKSwgJnRpbWVzRWxl
bWVudEluc3BlY3RlZCwKLSAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6OnNob3ctd2luZG93
IiwgR19DQUxMQkFDSyhzaG93SW5zcGVjdG9yKSwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAg
ICJzaWduYWw6OmNsb3NlLXdpbmRvdyIsIEdfQ0FMTEJBQ0soY2xvc2VJbnNwZWN0b3IpLCAmdGlt
ZXNDbG9zZWQsCi0gICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLQotICAgIHdlYmtpdF93ZWJf
aW5zcGVjdG9yX2luc3BlY3RfY29vcmRpbmF0ZXMoaW5zcGVjdG9yLCAwLjAsIDAuMCk7Ci0gICAg
Z19hc3NlcnRfY21waW50KHRpbWVzRWxlbWVudEluc3BlY3RlZCwgPT0sIDEpOwotCi0gICAgZ19t
YWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAgZ3RrX3dpZGdldF9kZXN0cm95KEdUS19XSURHRVQo
d2ViVmlldykpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0aW1lc0Nsb3NlZCwgPT0sIDEpOwotCi0g
ICAgZ19tYWluX2xvb3BfdW5yZWYobG9vcCk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFy
KiogYXJndikKLXsKLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAg
ICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwotICAgIGdfdGVz
dF9hZGRfZnVuYygiL3dlYmtpdC93ZWJpbnNwZWN0b3IvZGVzdHJveS1pbnNwZWN0ZWQtd2ViLXZp
ZXciLCB0ZXN0X3dlYmtpdF93ZWJfaW5zcGVjdG9yX2Rlc3Ryb3lfaW5zcGVjdGVkX3dlYl92aWV3
KTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2ViaW5zcGVjdG9yL2Nsb3NlLWFuZC1p
bnNwZWN0IiwgdGVzdF93ZWJraXRfd2ViX2luc3BlY3Rvcl9jbG9zZV9hbmRfaW5zcGVjdCk7Ci0K
LSAgICByZXR1cm4gZ190ZXN0X3J1bigpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9n
dGsvdGVzdHMvdGVzdHdlYnBsdWdpbmRhdGFiYXNlLmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0
cy90ZXN0d2VicGx1Z2luZGF0YWJhc2UuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NjUyODExYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2VicGx1
Z2luZGF0YWJhc2UuYworKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
PGVycm5vLmg+Ci0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0j
aW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KLQotLyogVGhp
cyBmdW5jdGlvbiBpcyBub3QgcHVibGljLCBzbyB3ZSBuZWVkIGFuIGV4dGVybiBkZWNsYXJhdGlv
biAqLwotZXh0ZXJuIHZvaWQgd2Via2l0X3dlYl9zZXR0aW5nc19hZGRfZXh0cmFfcGx1Z2luX2Rp
cmVjdG9yeShXZWJLaXRXZWJWaWV3KiB2aWV3LCBjb25zdCBnY2hhciogZGlyZWN0b3J5KTsKLQot
c3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3BsdWdpbl9kYXRhYmFzZV9nZXRfcGx1Z2lucygp
Ci17Ci0gICAgV2ViS2l0V2ViVmlldyogdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2Vi
X3ZpZXdfbmV3KCkpOwotICAgIFdlYktpdFdlYlBsdWdpbkRhdGFiYXNlKiBkYXRhYmFzZTsKLSAg
ICBHU0xpc3QqIHBsdWdpbkxpc3QsICpwOwotICAgIGdib29sZWFuIGZvdW5kID0gRkFMU0U7Ci0g
ICAgZ2Jvb2xlYW4gZW5hYmxlZCA9IEZBTFNFOwotCi0gICAgd2Via2l0X3dlYl9zZXR0aW5nc19h
ZGRfZXh0cmFfcGx1Z2luX2RpcmVjdG9yeSh2aWV3LCBURVNUX1BMVUdJTl9ESVIpOwotICAgIGdf
b2JqZWN0X3JlZl9zaW5rKEdfT0JKRUNUKHZpZXcpKTsKLQotICAgIGRhdGFiYXNlID0gd2Via2l0
X2dldF93ZWJfcGx1Z2luX2RhdGFiYXNlKCk7Ci0gICAgcGx1Z2luTGlzdCA9IHdlYmtpdF93ZWJf
cGx1Z2luX2RhdGFiYXNlX2dldF9wbHVnaW5zKGRhdGFiYXNlKTsKLSAgICBmb3IgKHAgPSBwbHVn
aW5MaXN0OyBwOyBwID0gcC0+bmV4dCkgewotICAgICAgICBXZWJLaXRXZWJQbHVnaW4qIHBsdWdp
biA9IChXZWJLaXRXZWJQbHVnaW4qKXAtPmRhdGE7Ci0gICAgICAgIGlmICghZ19zdHJjbXAwKHdl
YmtpdF93ZWJfcGx1Z2luX2dldF9uYW1lKHBsdWdpbiksICJXZWJLaXQgVGVzdCBQbHVnSW4iKSAm
JgotICAgICAgICAgICAgIWdfc3RyY21wMCh3ZWJraXRfd2ViX3BsdWdpbl9nZXRfZGVzY3JpcHRp
b24ocGx1Z2luKSwgIlNpbXBsZSBOZXRzY2FwZcKuIHBsdWctaW4gdGhhdCBoYW5kbGVzIHRlc3Qg
Y29udGVudCBmb3IgV2ViS2l0IikpIHsKLSAgICAgICAgICAgIGZvdW5kID0gVFJVRTsKLSAgICAg
ICAgICAgIGVuYWJsZWQgPSB3ZWJraXRfd2ViX3BsdWdpbl9nZXRfZW5hYmxlZChwbHVnaW4pOwot
ICAgICAgICAgICAgd2Via2l0X3dlYl9wbHVnaW5fc2V0X2VuYWJsZWQocGx1Z2luLCBGQUxTRSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgd2Via2l0X3dlYl9wbHVnaW5fZGF0YWJhc2VfcGx1Z2lu
c19saXN0X2ZyZWUocGx1Z2luTGlzdCk7Ci0gICAgZ19hc3NlcnQoZm91bmQpOwotICAgIGdfYXNz
ZXJ0KGVuYWJsZWQpOwotCi0gICAgd2Via2l0X3dlYl9wbHVnaW5fZGF0YWJhc2VfcmVmcmVzaChk
YXRhYmFzZSk7Ci0gICAgcGx1Z2luTGlzdCA9IHdlYmtpdF93ZWJfcGx1Z2luX2RhdGFiYXNlX2dl
dF9wbHVnaW5zKGRhdGFiYXNlKTsKLQotICAgIGZvciAocCA9IHBsdWdpbkxpc3Q7IHA7IHAgPSBw
LT5uZXh0KSB7Ci0gICAgICAgIFdlYktpdFdlYlBsdWdpbiogcGx1Z2luID0gKFdlYktpdFdlYlBs
dWdpbiopcC0+ZGF0YTsKLSAgICAgICAgaWYgKCFnX3N0cmNtcDAod2Via2l0X3dlYl9wbHVnaW5f
Z2V0X25hbWUocGx1Z2luKSwgIldlYktpdCBUZXN0IFBsdWdJbiIpICYmCi0gICAgICAgICAgICAh
Z19zdHJjbXAwKHdlYmtpdF93ZWJfcGx1Z2luX2dldF9kZXNjcmlwdGlvbihwbHVnaW4pLCAiU2lt
cGxlIE5ldHNjYXBlwq4gcGx1Zy1pbiB0aGF0IGhhbmRsZXMgdGVzdCBjb250ZW50IGZvciBXZWJL
aXQiKSkKLSAgICAgICAgICAgIGVuYWJsZWQgPSB3ZWJraXRfd2ViX3BsdWdpbl9nZXRfZW5hYmxl
ZChwbHVnaW4pOwotICAgIH0KLSAgICB3ZWJraXRfd2ViX3BsdWdpbl9kYXRhYmFzZV9wbHVnaW5z
X2xpc3RfZnJlZShwbHVnaW5MaXN0KTsKLSAgICBnX2Fzc2VydCghZW5hYmxlZCk7Ci0KLSAgICBn
X29iamVjdF91bnJlZih2aWV3KTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2
KQotewotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLQotICAgIGdfdGVz
dF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0gICAgZ190ZXN0X2FkZF9m
dW5jKCIvd2Via2l0L3dlYnBsdWdpbmRhdGFiYXNlL2dldHBsdWdpbnMiLCB0ZXN0X3dlYmtpdF93
ZWJfcGx1Z2luX2RhdGFiYXNlX2dldF9wbHVnaW5zKTsKLSAgICByZXR1cm4gZ190ZXN0X3J1biAo
KTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJyZXNvdXJj
ZS5jIGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYnJlc291cmNlLmMKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjNThiN2EuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dC9ndGsvdGVzdHMvdGVzdHdlYnJlc291cmNlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMzEgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4gTWljaGFlbCBBbG9uem8KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0j
aW5jbHVkZSA8bGlic291cC9zb3VwLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8
d2Via2l0L3dlYmtpdC5oPgotCi0jZGVmaW5lIElOREVYX0hUTUwgIjxodG1sPjwvaHRtbD4iCi0j
ZGVmaW5lIE1BSU5fSFRNTCAiPGh0bWw+PGhlYWQ+PHNjcmlwdCBsYW5ndWFnZT1cImphdmFzY3Jp
cHRcIiBzcmM9XCIvamF2YXNjcmlwdC5qc1wiPjwvc2NyaXB0PjwvaGVhZD48Ym9keT48aDE+aGFo
PC9oMT48L2h0bWw+IgotI2RlZmluZSBKQVZBU0NSSVBUICJmdW5jdGlvbiBibGFoICgpIHsgdmFy
IGEgPSAxOyB9IgotCi1HTWFpbkxvb3AqIGxvb3A7Ci1Tb3VwU2Vzc2lvbiAqc2Vzc2lvbjsKLWNo
YXIgKmJhc2VfdXJpOwotV2ViS2l0V2ViUmVzb3VyY2UqIG1haW5fcmVzb3VyY2U7Ci1XZWJLaXRX
ZWJSZXNvdXJjZSogc3ViX3Jlc291cmNlOwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgV2ViS2l0
V2ViUmVzb3VyY2UqIHdlYlJlc291cmNlOwotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXc7Ci19
IFdlYlJlc291cmNlRml4dHVyZTsKLQotLyogRm9yIHJlYWwgcmVxdWVzdCB0ZXN0aW5nICovCi1z
dGF0aWMgdm9pZAotc2VydmVyX2NhbGxiYWNrIChTb3VwU2VydmVyICpzZXJ2ZXIsIFNvdXBNZXNz
YWdlICptc2csCi0gICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsIEdIYXNoVGFibGUg
KnF1ZXJ5LAotICAgICAgICAgICAgICAgICBTb3VwQ2xpZW50Q29udGV4dCAqY29udGV4dCwgZ3Bv
aW50ZXIgZGF0YSkKLXsKLSAgICBpZiAobXNnLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7
Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzIChtc2csIFNPVVBfU1RBVFVTX05PVF9J
TVBMRU1FTlRFRCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzb3VwX21lc3NhZ2Vf
c2V0X3N0YXR1cyAobXNnLCBTT1VQX1NUQVRVU19PSyk7Ci0KLSAgICAvKiBSZWRpcmVjdCAqLwot
ICAgIGlmIChnX3N0cl9lcXVhbCAocGF0aCwgIi8iKSkgewotICAgICAgICBzb3VwX21lc3NhZ2Vf
c2V0X3N0YXR1cyAobXNnLCBTT1VQX1NUQVRVU19NT1ZFRF9QRVJNQU5FTlRMWSk7Ci0KLSAgICAg
ICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kIChtc2ctPnJlc3BvbnNlX2hlYWRlcnMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxvY2F0aW9uIiwgIi9pbmRleC5o
dG1sIik7Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbCAocGF0aCwgIi9pbmRleC5odG1sIikp
IHsKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kIChtc2ctPnJlc3BvbnNlX2JvZHks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU09VUF9NRU1PUllfQ09QWSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkRFWF9IVE1MLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiAoSU5ERVhfSFRNTCkpOwotICAgIH0gZWxzZSBp
ZiAoZ19zdHJfZXF1YWwgKHBhdGgsICIvbWFpbi5odG1sIikpIHsKLSAgICAgICAgc291cF9tZXNz
YWdlX2JvZHlfYXBwZW5kIChtc2ctPnJlc3BvbnNlX2JvZHksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU09VUF9NRU1PUllfQ09QWSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBNQUlOX0hUTUwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RybGVuIChNQUlOX0hUTUwpKTsKLSAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsIChwYXRoLCAi
L2phdmFzY3JpcHQuanMiKSkgewotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQgKG1z
Zy0+cmVzcG9uc2VfYm9keSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT1VQ
X01FTU9SWV9DT1BZLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpBVkFTQ1JJ
UFQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuIChKQVZBU0NSSVBU
KSk7Ci0gICAgfQotCi0KLSAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZSAobXNnLT5yZXNw
b25zZV9ib2R5KTsKLX0KLQotc3RhdGljIHZvaWQgd2ViX3Jlc291cmNlX2ZpeHR1cmVfc2V0dXAo
V2ViUmVzb3VyY2VGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAg
Zml4dHVyZS0+d2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkp
OwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKGZpeHR1cmUtPndlYlZpZXcpOwotICAgIGNvbnN0IGdj
aGFyKiB3ZWJEYXRhID0gIjxodG1sPjwvaHRtbD4iOwotICAgIGZpeHR1cmUtPndlYlJlc291cmNl
ID0gd2Via2l0X3dlYl9yZXNvdXJjZV9uZXcod2ViRGF0YSwgc3RybGVuKHdlYkRhdGEpLCAiaHR0
cDovL2V4YW1wbGUuY29tLyIsICJ0ZXh0L2h0bWwiLCAidXRmOCIsICJFeGFtcGxlLmNvbSIpOwot
ICAgIGdfYXNzZXJ0KGZpeHR1cmUtPndlYlJlc291cmNlKTsKLX0KLQotc3RhdGljIHZvaWQgd2Vi
X3Jlc291cmNlX2ZpeHR1cmVfdGVhcmRvd24oV2ViUmVzb3VyY2VGaXh0dXJlKiBmaXh0dXJlLCBn
Y29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+d2ViUmVzb3VyY2Up
OwotICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPndlYlJlc291cmNlKTsKLSAgICBnX29iamVj
dF91bnJlZihmaXh0dXJlLT53ZWJWaWV3KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRf
d2ViX3Jlc291cmNlX2dldF91cmwoV2ViUmVzb3VyY2VGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rw
b2ludGVyIGRhdGEpCi17Ci0gICAgZ2NoYXIqIHVybDsKLSAgICBnX29iamVjdF9nZXQoR19PQkpF
Q1QoZml4dHVyZS0+d2ViUmVzb3VyY2UpLCAidXJpIiwgJnVybCwgTlVMTCk7Ci0gICAgZ19hc3Nl
cnRfY21wc3RyKHVybCwgPT0sICJodHRwOi8vZXhhbXBsZS5jb20vIik7Ci0gICAgZ19hc3NlcnRf
Y21wc3RyKHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaShmaXh0dXJlLT53ZWJSZXNvdXJjZSkg
LD09LCJodHRwOi8vZXhhbXBsZS5jb20vIik7Ci0gICAgZ19mcmVlKHVybCk7Ci19Ci0KLXN0YXRp
YyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZGF0YShXZWJSZXNvdXJjZUZpeHR1
cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBHU3RyaW5nKiBjaGFyRGF0
YSA9IHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X2RhdGEoZml4dHVyZS0+d2ViUmVzb3VyY2UpOwot
ICAgIGdfYXNzZXJ0X2NtcHN0cihjaGFyRGF0YS0+c3RyLCA9PSwgIjxodG1sPjwvaHRtbD4iKTsK
LX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3Jlc291cmNlX2dldF9taW1lX3R5cGUo
V2ViUmVzb3VyY2VGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAg
Z2NoYXIqIG1pbWVfdHlwZTsKLSAgICBnX29iamVjdF9nZXQoR19PQkpFQ1QoZml4dHVyZS0+d2Vi
UmVzb3VyY2UpLCAibWltZS10eXBlIiwgJm1pbWVfdHlwZSwgTlVMTCk7Ci0gICAgZ19hc3NlcnRf
Y21wc3RyKG1pbWVfdHlwZSwgPT0sICJ0ZXh0L2h0bWwiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIo
d2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfbWltZV90eXBlKGZpeHR1cmUtPndlYlJlc291cmNlKSw9
PSwidGV4dC9odG1sIik7Ci0gICAgZ19mcmVlKG1pbWVfdHlwZSk7Ci19Ci0KLXN0YXRpYyB2b2lk
IHRlc3Rfd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZW5jb2RpbmcoV2ViUmVzb3VyY2VGaXh0dXJl
KiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ2NoYXIqIHRleHRfZW5jb2Rp
bmc7Ci0gICAgZ19vYmplY3RfZ2V0KEdfT0JKRUNUKGZpeHR1cmUtPndlYlJlc291cmNlKSwgImVu
Y29kaW5nIiwgJnRleHRfZW5jb2RpbmcsIE5VTEwpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0
X2VuY29kaW5nLCA9PSwgInV0ZjgiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9y
ZXNvdXJjZV9nZXRfZW5jb2RpbmcoZml4dHVyZS0+d2ViUmVzb3VyY2UpLD09LCJ1dGY4Iik7Ci0g
ICAgZ19mcmVlKHRleHRfZW5jb2RpbmcpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93
ZWJfcmVzb3VyY2VfZ2V0X2ZyYW1lX25hbWUoV2ViUmVzb3VyY2VGaXh0dXJlKiBmaXh0dXJlLCBn
Y29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ2NoYXIqIGZyYW1lX25hbWU7Ci0gICAgZ19vYmpl
Y3RfZ2V0KEdfT0JKRUNUKGZpeHR1cmUtPndlYlJlc291cmNlKSwgImZyYW1lLW5hbWUiLCAmZnJh
bWVfbmFtZSwgTlVMTCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKGZyYW1lX25hbWUsID09LCAiRXhh
bXBsZS5jb20iKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9yZXNvdXJjZV9nZXRf
ZnJhbWVfbmFtZShmaXh0dXJlLT53ZWJSZXNvdXJjZSksPT0sIkV4YW1wbGUuY29tIik7Ci0gICAg
Z19mcmVlKGZyYW1lX25hbWUpOwotfQotCi1zdGF0aWMgdm9pZCByZXNvdXJjZV9yZXF1ZXN0X3N0
YXJ0aW5nX2NiKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBXZWJLaXRXZWJGcmFtZSogd2ViX2Zy
YW1lLCBXZWJLaXRXZWJSZXNvdXJjZSogd2ViX3Jlc291cmNlLCBXZWJLaXROZXR3b3JrUmVxdWVz
dCogcmVxdWVzdCwgV2ViS2l0TmV0d29ya1Jlc3BvbnNlKiByZXNwb25zZSwgZ3BvaW50ZXIgZGF0
YSkKLXsKLSAgICBnaW50KiBiZWVuX3RoZXJlID0gZGF0YTsKLSAgICAqYmVlbl90aGVyZSA9ICpi
ZWVuX3RoZXJlICsgMTsKLQotICAgIGlmICgqYmVlbl90aGVyZSA9PSAxKSB7Ci0gICAgICAgIGdf
YXNzZXJ0KCFtYWluX3Jlc291cmNlKTsKLSAgICAgICAgbWFpbl9yZXNvdXJjZSA9IGdfb2JqZWN0
X3JlZih3ZWJfcmVzb3VyY2UpOwotCi0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2Vi
X3Jlc291cmNlX2dldF91cmkod2ViX3Jlc291cmNlKSwgPT0sIGJhc2VfdXJpKTsKLQotICAgICAg
ICAvKiBUaGlzIHNob3VsZCBiZSBhIHJlZGlyZWN0LCBzbyB0aGUgcmVzcG9uc2UgbXVzdCBiZSBO
VUxMICovCi0gICAgICAgIGdfYXNzZXJ0KCFyZXNwb25zZSk7Ci0gICAgfSBlbHNlIGlmICgqYmVl
bl90aGVyZSA9PSAyKSB7Ci0gICAgICAgIGNoYXIqIHVyaSA9IGdfc3RyZHVwX3ByaW50ZigiJXNp
bmRleC5odG1sIiwgYmFzZV91cmkpOwotCi0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRf
d2ViX3Jlc291cmNlX2dldF91cmkod2ViX3Jlc291cmNlKSwgPT0sIHVyaSk7Ci0KLSAgICAgICAg
LyogQ2FuY2VsIHRoZSByZXF1ZXN0LiAqLwotICAgICAgICB3ZWJraXRfbmV0d29ya19yZXF1ZXN0
X3NldF91cmkocmVxdWVzdCwgImFib3V0OmJsYW5rIik7Ci0KLSAgICAgICAgZ19mcmVlKHVyaSk7
Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBub3RpZnlfbG9hZF9zdGF0dXNfY2IoV2ViS2l0V2Vi
Vmlldyogd2ViX3ZpZXcsIEdQYXJhbVNwZWMqIHBzcGVjLCBncG9pbnRlciBkYXRhKQotewotICAg
IGlmICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYl92aWV3KSA9PSBXRUJLSVRf
TE9BRF9GSU5JU0hFRCkgewotICAgICAgICBnYm9vbGVhbiogYmVlbl90aGVyZSA9IGRhdGE7Ci0g
ICAgICAgICpiZWVuX3RoZXJlID0gVFJVRTsKLQotICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Vi
a2l0X3dlYl92aWV3X2dldF91cmkod2ViX3ZpZXcpLCA9PSwgImFib3V0OmJsYW5rIik7Ci0KLSAg
ICAgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHRl
c3Rfd2ViX3Jlc291cmNlX2xvYWRpbmcoKQotewotICAgIFdlYktpdFdlYlZpZXcqIHdlYl92aWV3
ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZ2ludCBiZWVu
X3RvX3Jlc291cmNlX3JlcXVlc3Rfc3RhcnRpbmcgPSAwOwotICAgIGdib29sZWFuIGJlZW5fdG9f
bG9hZF9maW5pc2hlZCA9IEZBTFNFOwotICAgIFdlYktpdFdlYkZyYW1lKiB3ZWJfZnJhbWU7Ci0g
ICAgV2ViS2l0V2ViRGF0YVNvdXJjZSogZGF0YV9zb3VyY2U7Ci0KLSAgICBsb29wID0gZ19tYWlu
X2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotCi0gICAgZ19vYmplY3RfcmVmX3Npbmsod2ViX3ZpZXcp
OwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh3ZWJfdmlldywgInJlc291cmNlLXJlcXVlc3Qtc3Rh
cnRpbmciLAotICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhyZXNvdXJjZV9yZXF1ZXN0
X3N0YXJ0aW5nX2NiKSwKLSAgICAgICAgICAgICAgICAgICAgICZiZWVuX3RvX3Jlc291cmNlX3Jl
cXVlc3Rfc3RhcnRpbmcpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh3ZWJfdmlldywgIm5vdGlm
eTo6bG9hZC1zdGF0dXMiLAotICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhub3RpZnlf
bG9hZF9zdGF0dXNfY2IpLAotICAgICAgICAgICAgICAgICAgICAgJmJlZW5fdG9fbG9hZF9maW5p
c2hlZCk7Ci0KLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkod2ViX3ZpZXcsIGJhc2VfdXJp
KTsKLQotICAgIC8qIFdlIHdvbid0IGdldCBmaW5pc2hlZCBpbW1lZGlhdGVseSwgYmVjYXVzZSBv
ZiB0aGUgcmVkaXJlY3QgKi8KLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0gICAgCi0gICAg
d2ViX2ZyYW1lID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKHdlYl92aWV3KTsKLSAg
ICBkYXRhX3NvdXJjZSA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X2RhdGFfc291cmNlKHdlYl9mcmFt
ZSk7Ci0KLSAgICBnX2Fzc2VydChtYWluX3Jlc291cmNlKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRf
d2ViX2RhdGFfc291cmNlX2dldF9tYWluX3Jlc291cmNlKGRhdGFfc291cmNlKSA9PSBtYWluX3Jl
c291cmNlKTsKLSAgICBnX29iamVjdF91bnJlZihtYWluX3Jlc291cmNlKTsKLSAgICAKLSAgICBn
X2Fzc2VydF9jbXBpbnQoYmVlbl90b19yZXNvdXJjZV9yZXF1ZXN0X3N0YXJ0aW5nLCA9PSwgMik7
Ci0gICAgZ19hc3NlcnRfY21waW50KGJlZW5fdG9fbG9hZF9maW5pc2hlZCwgPT0sIFRSVUUpOwot
Ci0gICAgZ19vYmplY3RfdW5yZWYod2ViX3ZpZXcpOwotICAgIGdfbWFpbl9sb29wX3VucmVmKGxv
b3ApOwotfQotCi1zdGF0aWMgdm9pZCByZXNvdXJjZV9yZXF1ZXN0X3N0YXJ0aW5nX3N1Yl9jYihX
ZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgV2ViS2l0V2ViRnJhbWUqIHdlYl9mcmFtZSwgV2ViS2l0
V2ViUmVzb3VyY2UqIHdlYl9yZXNvdXJjZSwgV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3Qs
IFdlYktpdE5ldHdvcmtSZXNwb25zZSogcmVzcG9uc2UsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAg
aWYgKCFtYWluX3Jlc291cmNlKQotICAgICAgICBtYWluX3Jlc291cmNlID0gZ19vYmplY3RfcmVm
KHdlYl9yZXNvdXJjZSk7Ci0gICAgZWxzZSBpZiAoIXN1Yl9yZXNvdXJjZSkKLSAgICAgIHN1Yl9y
ZXNvdXJjZSA9IGdfb2JqZWN0X3JlZih3ZWJfcmVzb3VyY2UpOwotfQotCi1zdGF0aWMgdm9pZCBu
b3RpZnlfbG9hZF9zdGF0dXNfc3ViX2NiKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBHUGFyYW1T
cGVjKiBwc3BlYywgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBpZiAod2Via2l0X3dlYl92aWV3X2dl
dF9sb2FkX3N0YXR1cyh3ZWJfdmlldykgPT0gV0VCS0lUX0xPQURfRklOSVNIRUQpCi0gICAgICAg
IGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBpZGxlX3F1aXRf
bG9vcF9jYihncG9pbnRlciBkYXRhKQotewotICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci0g
ICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYl9yZXNvdXJjZV9zdWJf
cmVzb3VyY2VfbG9hZGluZygpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcgPSBXRUJL
SVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBXZWJLaXRXZWJGcmFtZSog
d2ViX2ZyYW1lOwotICAgIFdlYktpdFdlYkRhdGFTb3VyY2UqIGRhdGFfc291cmNlOwotICAgIEdM
aXN0KiBzdWJfcmVzb3VyY2VzOwotICAgIGNoYXIqIHVyaSA9IGdfc3RyZHVwX3ByaW50ZigiJXNt
YWluLmh0bWwiLCBiYXNlX3VyaSk7Ci0KLSAgICBtYWluX3Jlc291cmNlID0gTlVMTDsKLSAgICAK
LSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotCi0gICAgZ19vYmplY3Rf
cmVmX3Npbmsod2ViX3ZpZXcpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh3ZWJfdmlldywgInJl
c291cmNlLXJlcXVlc3Qtc3RhcnRpbmciLAotICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFD
SyhyZXNvdXJjZV9yZXF1ZXN0X3N0YXJ0aW5nX3N1Yl9jYiksCi0gICAgICAgICAgICAgICAgICAg
ICBOVUxMKTsKLQotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViX3ZpZXcsICJub3RpZnk6OmxvYWQt
c3RhdHVzIiwKLSAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sobm90aWZ5X2xvYWRfc3Rh
dHVzX3N1Yl9jYiksCi0gICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLQotICAgIHdlYmtpdF93
ZWJfdmlld19sb2FkX3VyaSh3ZWJfdmlldywgdXJpKTsKLQotICAgIGdfbWFpbl9sb29wX3J1bihs
b29wKTsKLQotICAgIC8qIFRoZSBtYWluIHJlc291cmNlIHNob3VsZCBiZSBsb2FkZWQ7IG5vdyBs
ZXQncyB3YWl0IGZvciB0aGUgc3ViLXJlc291cmNlIHRvIGxvYWQgKi8KLSAgICBnX2lkbGVfYWRk
KGlkbGVfcXVpdF9sb29wX2NiLCBOVUxMKTsKLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0g
ICAgCi0gICAgZ19hc3NlcnQobWFpbl9yZXNvdXJjZSAmJiBzdWJfcmVzb3VyY2UpOwotICAgIGdf
YXNzZXJ0KG1haW5fcmVzb3VyY2UgIT0gc3ViX3Jlc291cmNlKTsKLQotICAgIHdlYl9mcmFtZSA9
IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh3ZWJfdmlldyk7Ci0gICAgZGF0YV9zb3Vy
Y2UgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9kYXRhX3NvdXJjZSh3ZWJfZnJhbWUpOwotCi0gICAg
Z19hc3NlcnQod2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfbWFpbl9yZXNvdXJjZShkYXRhX3Nv
dXJjZSkgPT0gbWFpbl9yZXNvdXJjZSk7Ci0gICAgZ19vYmplY3RfdW5yZWYobWFpbl9yZXNvdXJj
ZSk7Ci0KLSAgICBzdWJfcmVzb3VyY2VzID0gd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfc3Vi
cmVzb3VyY2VzKGRhdGFfc291cmNlKTsKLSAgICAvLyBFeHBlY3RlZCByZXNvdXJjZXM6IGphdmFz
Y3JpcHRzLmpzLCBmYXZpY29uLmljbwotICAgIGdfYXNzZXJ0KHN1Yl9yZXNvdXJjZXMpOwotICAg
IGdfYXNzZXJ0KHN1Yl9yZXNvdXJjZXMtPm5leHQpOwotICAgIGdfYXNzZXJ0KCFzdWJfcmVzb3Vy
Y2VzLT5uZXh0LT5uZXh0KTsKLQotICAgIC8vIFRlc3QgdGhhdCB0aGUgb2JqZWN0IHdlIGdvdCBm
cm9tIHRoZSBkYXRhIHNvdXJjZSBpcyB0aGUgc2FtZQotICAgIC8vIHRoYXQgd2VudCB0aHJvdWdo
IHJlc291cmNlLXJlcXVlc3Qtc3RhcnRpbmcuIE5vdGUgdGhhdCB0aGUgb3JkZXIgaXMKLSAgICAv
LyBub3QgaW1wb3J0YW50IChhbmQgbm90IGd1YXJhbnRlZWQgc2luY2UgdGhlIHJlc291cmNlcyBh
cmUgc3RvcmVkIGluIGEKLSAgICAvLyBoYXNodGFibGUpLgotICAgIGdfYXNzZXJ0KFdFQktJVF9X
RUJfUkVTT1VSQ0Uoc3ViX3Jlc291cmNlcy0+ZGF0YSkgPT0gc3ViX3Jlc291cmNlCi0gICAgICAg
ICAgICAgfHwgV0VCS0lUX1dFQl9SRVNPVVJDRShzdWJfcmVzb3VyY2VzLT5uZXh0LT5kYXRhKSA9
PSBzdWJfcmVzb3VyY2UpOwotCi0gICAgZ19vYmplY3RfdW5yZWYod2ViX3ZpZXcpOwotICAgIGdf
bWFpbl9sb29wX3VucmVmKGxvb3ApOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFy
Z3YpCi17Ci0gICAgU291cFNlcnZlciogc2VydmVyOwotICAgIFNvdXBVUkkqIHNvdXBfdXJpOwot
Ci0gICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOwotCi0gICAgc2VydmVyID0g
c291cF9zZXJ2ZXJfbmV3KFNPVVBfU0VSVkVSX1BPUlQsIDAsIE5VTEwpOwotICAgIHNvdXBfc2Vy
dmVyX3J1bl9hc3luYyhzZXJ2ZXIpOwotCi0gICAgc291cF9zZXJ2ZXJfYWRkX2hhbmRsZXIoc2Vy
dmVyLCBOVUxMLCBzZXJ2ZXJfY2FsbGJhY2ssIE5VTEwsIE5VTEwpOwotCi0gICAgc291cF91cmkg
PSBzb3VwX3VyaV9uZXcoImh0dHA6Ly8xMjcuMC4wLjEvIik7Ci0gICAgc291cF91cmlfc2V0X3Bv
cnQoc291cF91cmksIHNvdXBfc2VydmVyX2dldF9wb3J0KHNlcnZlcikpOwotCi0gICAgYmFzZV91
cmkgPSBzb3VwX3VyaV90b19zdHJpbmcoc291cF91cmksIEZBTFNFKTsKLSAgICBzb3VwX3VyaV9m
cmVlKHNvdXBfdXJpKTsKLQotICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvIik7Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC93ZWJyZXNvdXJjZS9nZXRfdXJsIiwK
LSAgICAgICAgICAgICAgIFdlYlJlc291cmNlRml4dHVyZSwgMCwgd2ViX3Jlc291cmNlX2ZpeHR1
cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3Vy
bCwgd2ViX3Jlc291cmNlX2ZpeHR1cmVfdGVhcmRvd24pOwotICAgIGdfdGVzdF9hZGQoIi93ZWJr
aXQvd2VicmVzb3VyY2UvZ2V0X21pbWVfdHlwZSIsCi0gICAgICAgICAgICAgICBXZWJSZXNvdXJj
ZUZpeHR1cmUsIDAsIHdlYl9yZXNvdXJjZV9maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAg
dGVzdF93ZWJraXRfd2ViX3Jlc291cmNlX2dldF9taW1lX3R5cGUsIHdlYl9yZXNvdXJjZV9maXh0
dXJlX3RlYXJkb3duKTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L3dlYnJlc291cmNlL2dldF90
ZXh0X2VuY29kaW5nX25hbWUiLAotICAgICAgICAgICAgICAgV2ViUmVzb3VyY2VGaXh0dXJlLCAw
LCB3ZWJfcmVzb3VyY2VfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0
X3dlYl9yZXNvdXJjZV9nZXRfZW5jb2RpbmcsIHdlYl9yZXNvdXJjZV9maXh0dXJlX3RlYXJkb3du
KTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L3dlYnJlc291cmNlL2dldF9mcmFtZV9uYW1lIiwK
LSAgICAgICAgICAgICAgIFdlYlJlc291cmNlRml4dHVyZSwgMCwgd2ViX3Jlc291cmNlX2ZpeHR1
cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X2Zy
YW1lX25hbWUsIHdlYl9yZXNvdXJjZV9maXh0dXJlX3RlYXJkb3duKTsKLSAgICBnX3Rlc3RfYWRk
KCIvd2Via2l0L3dlYnJlc291cmNlL2dldF9kYXRhIiwKLSAgICAgICAgICAgICAgIFdlYlJlc291
cmNlRml4dHVyZSwgMCwgd2ViX3Jlc291cmNlX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAg
ICB0ZXN0X3dlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X2RhdGEsIHdlYl9yZXNvdXJjZV9maXh0dXJl
X3RlYXJkb3duKTsKLQotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJyZXNvdXJjZS9s
b2FkaW5nIiwgdGVzdF93ZWJfcmVzb3VyY2VfbG9hZGluZyk7Ci0gICAgZ190ZXN0X2FkZF9mdW5j
KCIvd2Via2l0L3dlYnJlc291cmNlL3N1Yl9yZXNvdXJjZV9sb2FkaW5nIiwgdGVzdF93ZWJfcmVz
b3VyY2Vfc3ViX3Jlc291cmNlX2xvYWRpbmcpOwotCi0gICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2Vic2V0dGluZ3Mu
YyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJzZXR0aW5ncy5jCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAzNTQ4OWNkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQv
Z3RrL3Rlc3RzL3Rlc3R3ZWJzZXR0aW5ncy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTU5ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIE1pY2hhZWwgQWxvbnpvCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2lu
Y2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KLQotLyogUHJpdmF0ZSBBUEkgKi8KLWNoYXIqIHdlYmtp
dFdlYlNldHRpbmdzVXNlckFnZW50Rm9yVVJJKFdlYktpdFdlYlNldHRpbmdzICpzZXR0aW5ncywg
Y29uc3QgY2hhciAqdXJpKTsKLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3NldHRpbmdz
X2NvcHkodm9pZCkKLXsKLSAgICBXZWJLaXRXZWJTZXR0aW5ncyAqc2V0dGluZ3MgPSB3ZWJraXRf
d2ViX3NldHRpbmdzX25ldygpOwotCi0gICAgLy8gU2V0IHNvbWUgbm9uLWRlZmF1bHQgc2V0dGlu
Z3MgdG8gdmVyaWZ5IHRoYXQgc2V0dGluZ3MgYXJlIHByb3Blcmx5IGNvcGllZC4KLSAgICBnX29i
amVjdF9zZXQoc2V0dGluZ3MsCi0gICAgICAgICAgICAgICAgICJlbmFibGUtd2ViZ2wiLCBUUlVF
LAotICAgICAgICAgICAgICAgICAiZW5hYmxlLWZ1bGxzY3JlZW4iLCBUUlVFLAotICAgICAgICAg
ICAgICAgICAiYXV0by1sb2FkLWltYWdlcyIsIEZBTFNFLAotICAgICAgICAgICAgICAgICAiZGVm
YXVsdC1lbmNvZGluZyIsICJ1dGYtOCIsCi0gICAgICAgICAgICAgICAgICJlbmFibGUtbWVkaWFz
b3VyY2UiLCBUUlVFLAotICAgICAgICAgICAgICAgICBOVUxMKTsKLQotICAgIFdlYktpdFdlYlNl
dHRpbmdzICpjb3B5ID0gd2Via2l0X3dlYl9zZXR0aW5nc19jb3B5KHNldHRpbmdzKTsKLQotICAg
IGdib29sZWFuIGVuYWJsZVdlYkdMID0gRkFMU0U7Ci0gICAgZ2Jvb2xlYW4gZW5hYmxlRnVsbHNj
cmVlbiA9IEZBTFNFOwotICAgIGdib29sZWFuIGF1dG9Mb2FkSW1hZ2VzID0gRkFMU0U7Ci0gICAg
Z2Jvb2xlYW4gZW5hYmxlTWVkaWFTb3VyY2UgPSBGQUxTRTsKLSAgICBjaGFyICpkZWZhdWx0RW5j
b2RpbmcgPSAwOwotICAgIGdfb2JqZWN0X2dldChjb3B5LAotICAgICAgICAgICAgICAgICAiZW5h
YmxlLWZ1bGxzY3JlZW4iLCAmZW5hYmxlRnVsbHNjcmVlbiwKLSAgICAgICAgICAgICAgICAgImVu
YWJsZS13ZWJnbCIsICZlbmFibGVXZWJHTCwKLSAgICAgICAgICAgICAgICAgImF1dG8tbG9hZC1p
bWFnZXMiLCAmYXV0b0xvYWRJbWFnZXMsCi0gICAgICAgICAgICAgICAgICJkZWZhdWx0LWVuY29k
aW5nIiwgJmRlZmF1bHRFbmNvZGluZywKLSAgICAgICAgICAgICAgICAgImVuYWJsZS1tZWRpYXNv
dXJjZSIsICZlbmFibGVNZWRpYVNvdXJjZSwKLSAgICAgICAgICAgICAgICAgTlVMTCk7Ci0KLSAg
ICBnX2Fzc2VydChlbmFibGVXZWJHTCk7Ci0gICAgZ19hc3NlcnQoZW5hYmxlRnVsbHNjcmVlbik7
Ci0gICAgZ19hc3NlcnQoIWF1dG9Mb2FkSW1hZ2VzKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoZGVm
YXVsdEVuY29kaW5nLCA9PSwgInV0Zi04Iik7Ci0gICAgZ19hc3NlcnQoZW5hYmxlTWVkaWFTb3Vy
Y2UpOwotICAgIGdfZnJlZShkZWZhdWx0RW5jb2RpbmcpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0
X25vbl9xdWlya3lfdXNlcl9hZ2VudHMoV2ViS2l0V2ViU2V0dGluZ3MgKnNldHRpbmdzLCBjb25z
dCBjaGFyICpkZWZhdWx0VXNlckFnZW50KQotewotICAgIGNoYXIgKnVzZXJBZ2VudCA9IDA7Ci0K
LSAgICAvLyB0ZXN0IGEgY3VzdG9tIFVBIHN0cmluZwotICAgIHVzZXJBZ2VudCA9IDA7Ci0gICAg
Z19vYmplY3Rfc2V0KHNldHRpbmdzLCAidXNlci1hZ2VudCIsICJ0ZXN0d2Vic2V0dGluZ3MvMC4x
IiwgTlVMTCk7Ci0gICAgZ19vYmplY3RfZ2V0KHNldHRpbmdzLCJ1c2VyLWFnZW50IiwgJnVzZXJB
Z2VudCwgTlVMTCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHVzZXJBZ2VudCwgPT0sICJ0ZXN0d2Vi
c2V0dGluZ3MvMC4xIik7Ci0gICAgZ19mcmVlKHVzZXJBZ2VudCk7Ci0KLSAgICAvLyBzZXR0aW5n
IGl0IHRvIE5VTEwgb3IgYW4gZW1wdHkgdmFsdWUgc2hvdWxkIGdpdmUgdXMgdGhlIGRlZmF1bHQg
VUEgc3RyaW5nCi0gICAgdXNlckFnZW50ID0gMDsKLSAgICBnX29iamVjdF9zZXQoc2V0dGluZ3Ms
ICJ1c2VyLWFnZW50IiwgMCwgTlVMTCk7Ci0gICAgZ19vYmplY3RfZ2V0KHNldHRpbmdzLCJ1c2Vy
LWFnZW50IiwgJnVzZXJBZ2VudCwgTlVMTCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHVzZXJBZ2Vu
dCwgPT0sIGRlZmF1bHRVc2VyQWdlbnQpOwotICAgIGdfZnJlZSh1c2VyQWdlbnQpOwotCi0gICAg
dXNlckFnZW50ID0gMDsKLSAgICBnX29iamVjdF9zZXQoc2V0dGluZ3MsICJ1c2VyLWFnZW50Iiwg
IiIsIE5VTEwpOwotICAgIGdfb2JqZWN0X2dldChzZXR0aW5ncywidXNlci1hZ2VudCIsICZ1c2Vy
QWdlbnQsIE5VTEwpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih1c2VyQWdlbnQsID09LCBkZWZhdWx0
VXNlckFnZW50KTsKLSAgICBnX2ZyZWUodXNlckFnZW50KTsKLX0KLQotc3RhdGljIHZvaWQgdGVz
dF93ZWJraXRfd2ViX3NldHRpbmdzX3VzZXJfYWdlbnQodm9pZCkKLXsKLSAgICBXZWJLaXRXZWJT
ZXR0aW5ncyAqc2V0dGluZ3M7Ci0gICAgR3RrV2lkZ2V0ICp3ZWJWaWV3OwotICAgIGNoYXIgKmRl
ZmF1bHRVc2VyQWdlbnQ7Ci0gICAgY2hhciAqdXNlckFnZW50ID0gMDsKLSAgICBnX3Rlc3RfYnVn
KCIxNzM3NSIpOwotCi0gICAgd2ViVmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKLSAgICBn
X29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKLQotICAgIHNldHRpbmdzID0gd2Via2l0X3dlYl92
aWV3X2dldF9zZXR0aW5ncyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldykpOwotICAgIGRlZmF1bHRV
c2VyQWdlbnQgPSBnX3N0cmR1cCh3ZWJraXRfd2ViX3NldHRpbmdzX2dldF91c2VyX2FnZW50KHNl
dHRpbmdzKSk7Ci0KLSAgICB0ZXN0X25vbl9xdWlya3lfdXNlcl9hZ2VudHMoc2V0dGluZ3MsIGRl
ZmF1bHRVc2VyQWdlbnQpOwotCi0gICAgLyogVGVzdCBxdWlya3kgZ29vZ2xlIGRvbWFpbnMgKi8K
LSAgICBnX29iamVjdF9zZXQoc2V0dGluZ3MsICJ1c2VyLWFnZW50IiwgInRlc3R3ZWJzZXR0aW5n
cy8wLjEiLCBOVUxMKTsKLQotICAgIHVzZXJBZ2VudCA9IHdlYmtpdFdlYlNldHRpbmdzVXNlckFn
ZW50Rm9yVVJJKHNldHRpbmdzLCAiaHR0cDovL3d3dy5nb29nbGUuY29tLyIpOwotICAgIGdfYXNz
ZXJ0X2NtcHN0cih1c2VyQWdlbnQsID09LCAidGVzdHdlYnNldHRpbmdzLzAuMSIpOwotICAgIGdf
ZnJlZSh1c2VyQWdlbnQpOwotCi0gICAgdXNlckFnZW50ID0gd2Via2l0V2ViU2V0dGluZ3NVc2Vy
QWdlbnRGb3JVUkkoc2V0dGluZ3MsICJodHRwOi8vZ21haWwuY29tLyIpOwotICAgIGdfYXNzZXJ0
X2NtcHN0cih1c2VyQWdlbnQsID09LCAidGVzdHdlYnNldHRpbmdzLzAuMSIpOwotICAgIGdfZnJl
ZSh1c2VyQWdlbnQpOwotCi0gICAgdXNlckFnZW50ID0gd2Via2l0V2ViU2V0dGluZ3NVc2VyQWdl
bnRGb3JVUkkoc2V0dGluZ3MsICJodHRwOi8vd3d3Lmdvb2dsZS5jb20uYnIvIik7Ci0gICAgZ19h
c3NlcnRfY21wc3RyKHVzZXJBZ2VudCwgPT0sICJ0ZXN0d2Vic2V0dGluZ3MvMC4xIik7Ci0gICAg
Z19mcmVlKHVzZXJBZ2VudCk7Ci0KLSAgICB1c2VyQWdlbnQgPSB3ZWJraXRXZWJTZXR0aW5nc1Vz
ZXJBZ2VudEZvclVSSShzZXR0aW5ncywgImh0dHA6Ly9jYWxlbmRhci5nb29nbGUuY29tLyIpOwot
ICAgIGdfYXNzZXJ0X2NtcHN0cih1c2VyQWdlbnQsID09LCAidGVzdHdlYnNldHRpbmdzLzAuMSIp
OwotICAgIGdfZnJlZSh1c2VyQWdlbnQpOwotCi0gICAgLyogTm93IGVuYWJsZSBxdWlya3MgaGFu
ZGxpbmcgKi8KLSAgICBnX29iamVjdF9zZXQoc2V0dGluZ3MsICJlbmFibGUtc2l0ZS1zcGVjaWZp
Yy1xdWlya3MiLCBUUlVFLCBOVUxMKTsKLQotICAgIHRlc3Rfbm9uX3F1aXJreV91c2VyX2FnZW50
cyhzZXR0aW5ncywgZGVmYXVsdFVzZXJBZ2VudCk7Ci0KLSAgICBnX29iamVjdF9zZXQoc2V0dGlu
Z3MsICJ1c2VyLWFnZW50IiwgInRlc3R3ZWJzZXR0aW5ncy8wLjEiLCBOVUxMKTsKLQotICAgIHVz
ZXJBZ2VudCA9IHdlYmtpdFdlYlNldHRpbmdzVXNlckFnZW50Rm9yVVJJKHNldHRpbmdzLCAiaHR0
cDovL3d3dy5nb29nbGUuY29tLyIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih1c2VyQWdlbnQsID09
LCBkZWZhdWx0VXNlckFnZW50KTsKLSAgICBnX2ZyZWUodXNlckFnZW50KTsKLQotICAgIHVzZXJB
Z2VudCA9IHdlYmtpdFdlYlNldHRpbmdzVXNlckFnZW50Rm9yVVJJKHNldHRpbmdzLCAiaHR0cDov
L2dtYWlsLmNvbS8iKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodXNlckFnZW50LCA9PSwgZGVmYXVs
dFVzZXJBZ2VudCk7Ci0gICAgZ19mcmVlKHVzZXJBZ2VudCk7Ci0KLSAgICB1c2VyQWdlbnQgPSB3
ZWJraXRXZWJTZXR0aW5nc1VzZXJBZ2VudEZvclVSSShzZXR0aW5ncywgImh0dHA6Ly93d3cuZ29v
Z2xlLmNvbS5ici8iKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodXNlckFnZW50LCA9PSwgZGVmYXVs
dFVzZXJBZ2VudCk7Ci0gICAgZ19mcmVlKHVzZXJBZ2VudCk7Ci0KLSAgICB1c2VyQWdlbnQgPSB3
ZWJraXRXZWJTZXR0aW5nc1VzZXJBZ2VudEZvclVSSShzZXR0aW5ncywgImh0dHA6Ly93d3cuZ29v
Z2xlLnVrLm5vdC5jb20uYnIvIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHVzZXJBZ2VudCwgPT0s
ICJ0ZXN0d2Vic2V0dGluZ3MvMC4xIik7Ci0gICAgZ19mcmVlKHVzZXJBZ2VudCk7Ci0KLSAgICBn
X2ZyZWUoZGVmYXVsdFVzZXJBZ2VudCk7Ci0gICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Ci19
Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLXsKLSAgICBndGtfdGVzdF9pbml0
KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVn
cy53ZWJraXQub3JnLyIpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJzZXR0aW5n
cy91c2VyX2FnZW50IiwgdGVzdF93ZWJraXRfd2ViX3NldHRpbmdzX3VzZXJfYWdlbnQpOwotICAg
IGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJzZXR0aW5ncy9jb3B5IiwgdGVzdF93ZWJraXRf
d2ViX3NldHRpbmdzX2NvcHkpOwotICAgIHJldHVybiBnX3Rlc3RfcnVuICgpOwotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYnZpZXcuYyBiL1NvdXJjZS9XZWJL
aXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJ2aWV3LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDE3MDM3MmMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYnZp
ZXcuYworKysgL2Rldi9udWxsCkBAIC0xLDc0NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDks
IDIwMTAgQ29sbGFib3JhIEx0ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAidGVzdF91dGlscy5oIgotCi0jaW5jbHVkZSA8
ZXJybm8uaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2lu
Y2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgotI2luY2x1ZGUgPGdkay9n
ZGsuaD4KLSNpbmNsdWRlIDxnZGsvZ2Rra2V5c3ltcy5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4K
LSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+Ci0KLUdNYWluTG9vcCogbG9vcDsKLVNvdXBTZXNz
aW9uICpzZXNzaW9uOwotY2hhciogYmFzZV91cmk7Ci0KLS8qIEZvciByZWFsIHJlcXVlc3QgdGVz
dGluZyAqLwotc3RhdGljIHZvaWQKLXNlcnZlcl9jYWxsYmFjayhTb3VwU2VydmVyKiBzZXJ2ZXIs
IFNvdXBNZXNzYWdlKiBtc2csCi0gICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHBhdGgsIEdI
YXNoVGFibGUqIHF1ZXJ5LAotICAgICAgICAgICAgICAgICBTb3VwQ2xpZW50Q29udGV4dCogY29u
dGV4dCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBpZiAobXNnLT5tZXRob2QgIT0gU09VUF9NRVRI
T0RfR0VUKSB7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1zZywgU09VUF9TVEFU
VVNfTk9UX0lNUExFTUVOVEVEKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNvdXBf
bWVzc2FnZV9zZXRfc3RhdHVzKG1zZywgU09VUF9TVEFUVVNfT0spOwotCi0gICAgaWYgKGdfc3Ry
X2VxdWFsKHBhdGgsICIvZmF2aWNvbi5pY28iKSkgewotICAgICAgICBjaGFyKiBjb250ZW50czsK
LSAgICAgICAgZ3NpemUgbGVuZ3RoOwotICAgICAgICBHRXJyb3IqIGVycm9yID0gTlVMTDsKLQot
ICAgICAgICBnX2ZpbGVfZ2V0X2NvbnRlbnRzKCJibGFuay5pY28iLCAmY29udGVudHMsICZsZW5n
dGgsICZlcnJvcik7Ci0gICAgICAgIGdfYXNzZXJ0KCFlcnJvcik7Ci0KLSAgICAgICAgc291cF9t
ZXNzYWdlX2JvZHlfYXBwZW5kKG1zZy0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwg
Y29udGVudHMsIGxlbmd0aCk7Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2Jp
Z2Rpdi5odG1sIikpIHsKLSAgICAgICAgY2hhciogY29udGVudHMgPSBnX3N0cmR1cCgiPGh0bWw+
PGJvZHk+PGEgaWQ9XCJsaW5rXCIgaHJlZj1cImh0dHA6Ly9hYmMuZGVmXCI+dGVzdDwvYT48ZGl2
IHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogZ3JlZW47IGhlaWdodDogMTIwMHB4O1wiPjwvZGl2
PjwvYm9keT48L2h0bWw+Iik7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtc2ct
PnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGNvbnRlbnRzLCBzdHJsZW4oY29udGVu
dHMpKTsKLSAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvaWZyYW1lLmh0bWwiKSkg
ewotICAgICAgICBjaGFyKiBjb250ZW50cyA9IGdfc3RyZHVwKCI8aHRtbD48Ym9keSBpZD1cInNv
bWUtY29udGVudFwiPjxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiBncmVlbjsgaGVpZ2h0
OiA1MHB4O1wiPjwvZGl2PjxpZnJhbWUgc3JjPVwiYmlnZGl2Lmh0bWxcIj48L2lmcmFtZT48L2Jv
ZHk+PC9odG1sPiIpOwotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobXNnLT5yZXNw
b25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBjb250ZW50cywgc3RybGVuKGNvbnRlbnRzKSk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY2hhciogY29udGVudHMgPSBnX3N0cmR1cCgiPGh0bWw+
PGJvZHk+dGVzdDwvYm9keT48L2h0bWw+Iik7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2Fw
cGVuZChtc2ctPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGNvbnRlbnRzLCBzdHJs
ZW4oY29udGVudHMpKTsKLSAgICB9Ci0KLSAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZSht
c2ctPnJlc3BvbnNlX2JvZHkpOwotfQotCi1zdGF0aWMgdm9pZCBpZGxlX3F1aXRfbG9vcF9jYihX
ZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgR1BhcmFtU3BlYyogcHNwZWMsIGdwb2ludGVyIGRhdGEp
Ci17Ci0gICAgaWYgKHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMod2ViX3ZpZXcpID09
IFdFQktJVF9MT0FEX0ZJTklTSEVEIHx8Ci0gICAgICAgIHdlYmtpdF93ZWJfdmlld19nZXRfbG9h
ZF9zdGF0dXMod2ViX3ZpZXcpID09IFdFQktJVF9MT0FEX0ZBSUxFRCkKLSAgICAgICAgZ19tYWlu
X2xvb3BfcXVpdChsb29wKTsKLX0KLQotc3RhdGljIGdib29sZWFuIHRpbWVvdXRfY2IoZ3BvaW50
ZXIgZGF0YSkKLXsKLSAgICBnX2Vycm9yKCJEaWRuJ3QgZ2V0IGljb24tdXJpIGJlZm9yZSB0aW1p
bmcgb3V0LiIpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQgaWNvbl91cmlf
Y2hhbmdlZF9jYihXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgR1BhcmFtU3BlYyogcHNwZWMsIGdw
b2ludGVyIGRhdGEpCi17Ci0gICAgY2hhciogZXhwZWN0ZWRfdXJpOwotCi0gICAgZ19hc3NlcnRf
Y21wc3RyKGdfcGFyYW1fc3BlY19nZXRfbmFtZShwc3BlYyksID09LCAiaWNvbi11cmkiKTsKLQot
ICAgIGV4cGVjdGVkX3VyaSA9IGdfc3RyZHVwX3ByaW50ZigiJXNmYXZpY29uLmljbyIsIGJhc2Vf
dXJpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dldF9pY29uX3VyaSh3
ZWJfdmlldyksID09LCBleHBlY3RlZF91cmkpOwotICAgIGdfZnJlZShleHBlY3RlZF91cmkpOwot
Ci0gICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKLX0KLQotc3RhdGljIHZvaWQgaWNvbl9sb2Fk
ZWRfY2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIGNoYXIqIGljb25fdXJpLCBncG9pbnRlciBk
YXRhKQotewotICAgIGdib29sZWFuKiBiZWVuX2hlcmUgPSAoZ2Jvb2xlYW4qKWRhdGE7Ci0gICAg
Y2hhciogZXhwZWN0ZWRfdXJpID0gZ19zdHJkdXBfcHJpbnRmKCIlc2Zhdmljb24uaWNvIiwgYmFz
ZV91cmkpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihpY29uX3VyaSwgPT0sIGV4cGVjdGVkX3VyaSk7
Ci0gICAgZ19mcmVlKGV4cGVjdGVkX3VyaSk7Ci0KLSAgICBnX2Fzc2VydF9jbXBzdHIoaWNvbl91
cmksID09LCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fdXJpKHdlYl92aWV3KSk7Ci0KLSAgICAq
YmVlbl9oZXJlID0gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3ZpZXdf
aWNvbl91cmkoKQotewotICAgIGdib29sZWFuIGJlZW5fdG9faWNvbl9sb2FkZWQgPSBGQUxTRTsK
LSAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmll
d19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3NpbmsoR19PQkpFQ1QodmlldykpOwotCi0gICAg
bG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLQotICAgIGdfb2JqZWN0X2Nvbm5l
Y3QoR19PQkpFQ1QodmlldyksCi0gICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjpub3RpZnk6
Omljb24tdXJpIiwgaWNvbl91cmlfY2hhbmdlZF9jYiwgTlVMTCwKLSAgICAgICAgICAgICAgICAg
ICAgICJzaWduYWw6Omljb24tbG9hZGVkIiwgaWNvbl9sb2FkZWRfY2IsICZiZWVuX3RvX2ljb25f
bG9hZGVkLAotICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0KLSAgICB3ZWJraXRfd2ViX3Zp
ZXdfbG9hZF91cmkodmlldywgYmFzZV91cmkpOwotCi0gICAgZ3VpbnQgdGltZW91dF9pZCA9IGdf
dGltZW91dF9hZGQoNTAwLCB0aW1lb3V0X2NiLCAwKTsKLQotICAgIGdfbWFpbl9sb29wX3J1bihs
b29wKTsKLQotICAgIGdfc291cmNlX3JlbW92ZSh0aW1lb3V0X2lkKTsKLQotICAgIGdfYXNzZXJ0
KGJlZW5fdG9faWNvbl9sb2FkZWQpOwotCi0gICAgZ19vYmplY3RfdW5yZWYodmlldyk7Ci19Ci0K
LXN0YXRpYyBnYm9vbGVhbiBtYXBfZXZlbnRfY2IoR3RrV2lkZ2V0ICp3aWRnZXQsIEdka0V2ZW50
KiBldmVudCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBHTWFpbkxvb3AqIGxvb3AgPSAoR01haW5M
b29wKilkYXRhOwotICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci0KLSAgICByZXR1cm4gRkFM
U0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBxdWl0X2FmdGVyX3Nob3J0X2RlbGF5X2NiKGdwb2lu
dGVyIGRhdGEpCi17Ci0gICAgZ19tYWluX2xvb3BfcXVpdCgoR01haW5Mb29wKilkYXRhKTsKLSAg
ICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl92aWV3X2dy
YWJfZm9jdXMoKQotewotICAgIGNoYXIqIHVyaSA9IGdfc3RyY29uY2F0KGJhc2VfdXJpLCAiaWZy
YW1lLmh0bWwiLCBOVUxMKTsKLSAgICBHdGtXaWRnZXQqIHdpbmRvdyA9IGd0a193aW5kb3dfbmV3
KEdUS19XSU5ET1dfUE9QVVApOwotICAgIEd0a1dpZGdldCogc2Nyb2xsZWRfd2luZG93ID0gZ3Rr
X3Njcm9sbGVkX3dpbmRvd19uZXcoTlVMTCwgTlVMTCk7Ci0gICAgV2ViS2l0V2ViVmlldyogdmll
dyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIEd0a0FkanVz
dG1lbnQqIGFkanVzdG1lbnQ7Ci0KLSAgICBndGtfd2luZG93X3NldF9kZWZhdWx0X3NpemUoR1RL
X1dJTkRPVyh3aW5kb3cpLCA0MDAsIDIwMCk7Ci0KLSAgICBndGtfY29udGFpbmVyX2FkZChHVEtf
Q09OVEFJTkVSKHdpbmRvdyksIHNjcm9sbGVkX3dpbmRvdyk7Ci0gICAgZ3RrX2NvbnRhaW5lcl9h
ZGQoR1RLX0NPTlRBSU5FUihzY3JvbGxlZF93aW5kb3cpLCBHVEtfV0lER0VUKHZpZXcpKTsKLQot
ICAgIGd0a19zY3JvbGxlZF93aW5kb3dfc2V0X3BvbGljeShHVEtfU0NST0xMRURfV0lORE9XKHNj
cm9sbGVkX3dpbmRvdyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19Q
T0xJQ1lfQVVUT01BVElDLCBHVEtfUE9MSUNZX0FVVE9NQVRJQyk7Ci0KLSAgICBsb29wID0gZ19t
YWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh2aWV3LCAi
bm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0soaWRsZV9xdWl0X2xvb3BfY2IpLCBOVUxM
KTsKLQotICAgIC8qIFdhaXQgZm9yIHdpbmRvdyB0byBzaG93IHVwICovCi0gICAgZ3RrX3dpZGdl
dF9zaG93X2FsbCh3aW5kb3cpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2luZG93LCAibWFwLWV2
ZW50IiwKLSAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sobWFwX2V2ZW50X2NiKSwgbG9v
cCk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAgLyogTG9hZCBhIHBhZ2Ugd2l0
aCBhIGJpZyBkaXYgdGhhdCB3aWxsIGNhdXNlIHNjcm9sbGJhcnMgdG8gYXBwZWFyICovCi0gICAg
d2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHZpZXcsIHVyaSk7Ci0gICAgZ19tYWluX2xvb3BfcnVu
KGxvb3ApOwotCi0gICAgYWRqdXN0bWVudCA9IGd0a19zY3JvbGxlZF93aW5kb3dfZ2V0X3ZhZGp1
c3RtZW50KEdUS19TQ1JPTExFRF9XSU5ET1coc2Nyb2xsZWRfd2luZG93KSk7Ci0gICAgZ19hc3Nl
cnRfY21wZmxvYXQoZ3RrX2FkanVzdG1lbnRfZ2V0X3ZhbHVlKGFkanVzdG1lbnQpLCA9PSwgMC4w
KTsKLQotICAgIC8qIFNpbmNlIHdlYmtpdF93ZWJfdmlld19leGVjdXRlX3NjcmlwdCBkb2VzIG5v
dCByZXR1cm4gYSB2YWx1ZSwKLSAgICAgICBpdCBpcyBpbXBvc3NpYmxlIHRvIGtub3cgaWYgYW4g
aW5uZXIgZG9jdW1lbnQgaGFzIGZvY3VzIGFmdGVyCi0gICAgICAgYSBub2RlIG9mIGl0IHdhcyBm
b2N1c2VkIHZpYSAuZm9jdXMoKSBtZXRob2QuCi0gICAgICAgVGhlIGNvZGUgYmVsb3cgaXMgYW4g
d29ya2Fyb3VuZDogaWYgdGhlIG5vZGUgaGFzIGZvY3VzLCBhIHNjcm9sbAotICAgICAgIGFjdGlv
biBpcyBwZXJmb3JtZWQgYW5kIGFmdGVyd2FyZCBpdCBpcyBjaGVja2VkIGlmIHRoZSBhZGp1c3Rt
ZW50Ci0gICAgICAgaGFzIHRvIGJlIGRpZmZlcmVudCBmcm9tIDAuCi0gICAgKi8KLSAgICBjaGFy
IHNjcmlwdFtdID0gInZhciBpbm5lckRvYyA9IGRvY3VtZW50LmRlZmF1bHRWaWV3LmZyYW1lc1sw
XS5kb2N1bWVudDsgXAotICAgICAgICAgICAgICAgICAgICAgaW5uZXJEb2MuZ2V0RWxlbWVudEJ5
SWQoXCJsaW5rXCIpLmZvY3VzKCk7ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAg
ICBpZiAoaW5uZXJEb2MuaGFzRm9jdXMoKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxCeSgwLCAxMDApOyI7Ci0K
LSAgICAvKiBGb2N1cyBhbiBlbGVtZW50IHVzaW5nIEphdmFTY3JpcHQgKi8KLSAgICB3ZWJraXRf
d2ViX3ZpZXdfZXhlY3V0ZV9zY3JpcHQodmlldywgc2NyaXB0KTsKLQotICAgIC8qIEFkanVzdG1l
bnRzIHVwZGF0ZSBhc3luY2hyb25vdXNseSwgc28gd2UgbXVzdCB3YWl0IGEgYml0LiAqLwotICAg
IGdfdGltZW91dF9hZGQoMTAwLCBxdWl0X2FmdGVyX3Nob3J0X2RlbGF5X2NiLCBsb29wKTsKLSAg
ICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICAvKiBNYWtlIHN1cmUgdGhlIFNjcm9sbGVk
V2luZG93IG5vdGljZWQgdGhlIHNjcm9sbCAqLwotICAgIGdfYXNzZXJ0X2NtcGZsb2F0KGd0a19h
ZGp1c3RtZW50X2dldF92YWx1ZShhZGp1c3RtZW50KSwgIT0sIDAuMCk7Ci0KLSAgICBnX2ZyZWUo
dXJpKTsKLSAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kod2luZG93KTsKLX0KLQotc3RhdGljIHZvaWQg
ZG9fdGVzdF93ZWJraXRfd2ViX3ZpZXdfYWRqdXN0bWVudHMoZ2Jvb2xlYW4gd2l0aF9wYWdlX2Nh
Y2hlKQotewotICAgIGNoYXIqIGVmZmVjdGl2ZV91cmkgPSBnX3N0cmNvbmNhdChiYXNlX3VyaSwg
ImJpZ2Rpdi5odG1sIiwgTlVMTCk7Ci0gICAgY2hhciogc2Vjb25kX3VyaSA9IGdfc3RyY29uY2F0
KGJhc2VfdXJpLCAiaWZyYW1lLmh0bWwiLCBOVUxMKTsKLSAgICBHdGtXaWRnZXQqIHdpbmRvdyA9
IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOwotICAgIEd0a1dpZGdldCogc2Ny
b2xsZWRfd2luZG93ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19uZXcoTlVMTCwgTlVMTCk7Ci0gICAg
V2ViS2l0V2ViVmlldyogdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3
KCkpOwotICAgIEd0a0FkanVzdG1lbnQqIGFkanVzdG1lbnQ7Ci0gICAgZG91YmxlIGxvd2VyOwot
ICAgIGRvdWJsZSB1cHBlcjsKLQotICAgIGlmICh3aXRoX3BhZ2VfY2FjaGUpIHsKLSAgICAgICAg
V2ViS2l0V2ViU2V0dGluZ3MqIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5n
cyh2aWV3KTsKLSAgICAgICAgZ19vYmplY3Rfc2V0KHNldHRpbmdzLCAiZW5hYmxlLXBhZ2UtY2Fj
aGUiLCBUUlVFLCBOVUxMKTsKLSAgICB9Ci0KLSAgICBndGtfd2luZG93X3NldF9kZWZhdWx0X3Np
emUoR1RLX1dJTkRPVyh3aW5kb3cpLCA0MDAsIDIwMCk7Ci0KLSAgICBndGtfY29udGFpbmVyX2Fk
ZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHNjcm9sbGVkX3dpbmRvdyk7Ci0gICAgZ3RrX2NvbnRh
aW5lcl9hZGQoR1RLX0NPTlRBSU5FUihzY3JvbGxlZF93aW5kb3cpLCBHVEtfV0lER0VUKHZpZXcp
KTsKLQotICAgIGd0a19zY3JvbGxlZF93aW5kb3dfc2V0X3BvbGljeShHVEtfU0NST0xMRURfV0lO
RE9XKHNjcm9sbGVkX3dpbmRvdyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdUS19QT0xJQ1lfQVVUT01BVElDLCBHVEtfUE9MSUNZX0FVVE9NQVRJQyk7Ci0KLSAgICBsb29w
ID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotCi0gICAgZ19vYmplY3RfY29ubmVjdChH
X09CSkVDVCh2aWV3KSwKLSAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6Om5vdGlmeTo6bG9h
ZC1zdGF0dXMiLCBpZGxlX3F1aXRfbG9vcF9jYiwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAg
IE5VTEwpOwotCi0gICAgLyogV2FpdCBmb3Igd2luZG93IHRvIHNob3cgdXAgKi8KLSAgICBndGtf
d2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdCh3aW5kb3csICJt
YXAtZXZlbnQiLAotICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhtYXBfZXZlbnRfY2Ip
LCBsb29wKTsKLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICAvKiBMb2FkIGEgcGFn
ZSB3aXRoIGEgYmlnIGRpdiB0aGF0IHdpbGwgY2F1c2Ugc2Nyb2xsYmFycyB0byBhcHBlYXIgKi8K
LSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkodmlldywgZWZmZWN0aXZlX3VyaSk7Ci0gICAg
Z19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAgLyogQWRqdXN0bWVudHMgdXBkYXRlIGFzeW5j
aHJvbm91c2x5LCBzbyB3ZSBtdXN0IHdhaXQgYSBiaXQuICovCi0gICAgZ190aW1lb3V0X2FkZCgx
MDAsIHF1aXRfYWZ0ZXJfc2hvcnRfZGVsYXlfY2IsIGxvb3ApOwotICAgIGdfbWFpbl9sb29wX3J1
bihsb29wKTsKLQotICAgIGFkanVzdG1lbnQgPSBndGtfc2Nyb2xsZWRfd2luZG93X2dldF92YWRq
dXN0bWVudChHVEtfU0NST0xMRURfV0lORE9XKHNjcm9sbGVkX3dpbmRvdykpOwotICAgIGdfYXNz
ZXJ0X2NtcGZsb2F0KGd0a19hZGp1c3RtZW50X2dldF92YWx1ZShhZGp1c3RtZW50KSwgPT0sIDAu
MCk7Ci0KLSAgICBsb3dlciA9IGd0a19hZGp1c3RtZW50X2dldF9sb3dlcihhZGp1c3RtZW50KTsK
LSAgICB1cHBlciA9IGd0a19hZGp1c3RtZW50X2dldF91cHBlcihhZGp1c3RtZW50KTsKLQotICAg
IC8qIFNjcm9sbCB0aGUgdmlldyB1c2luZyBKYXZhU2NyaXB0ICovCi0gICAgd2Via2l0X3dlYl92
aWV3X2V4ZWN1dGVfc2NyaXB0KHZpZXcsICJ3aW5kb3cuc2Nyb2xsQnkoMCwgMTAwKSIpOwotCi0g
ICAgLyogQWRqdXN0bWVudHMgdXBkYXRlIGFzeW5jaHJvbm91c2x5LCBzbyB3ZSBtdXN0IHdhaXQg
YSBiaXQuICovCi0gICAgZ190aW1lb3V0X2FkZCgxMDAsIHF1aXRfYWZ0ZXJfc2hvcnRfZGVsYXlf
Y2IsIGxvb3ApOwotICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLQotICAgIC8qIE1ha2Ugc3Vy
ZSB0aGUgU2Nyb2xsZWRXaW5kb3cgbm90aWNlZCB0aGUgc2Nyb2xsICovCi0gICAgZ19hc3NlcnRf
Y21wZmxvYXQoZ3RrX2FkanVzdG1lbnRfZ2V0X3ZhbHVlKGFkanVzdG1lbnQpLCA9PSwgMTAwLjAp
OwotCi0gICAgLyogTG9hZCBhIHNlY29uZCBVUkkgKi8KLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9h
ZF91cmkodmlldywgc2Vjb25kX3VyaSk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0g
ICAgLyogVGhlIHBhZ2UgbG9hZGVkIGJ1dCB0aGUgYWRqdXN0bWVudHMgbWF5IG5vdCBiZSB1cGRh
dGVkIHlldC4gV2FpdCBhIGJpdC4gKi8KLSAgICBnX3RpbWVvdXRfYWRkKDEwMCwgcXVpdF9hZnRl
cl9zaG9ydF9kZWxheV9jYiwgbG9vcCk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0g
ICAgLyogTWFrZSBzdXJlIHRoZSBzY3JvbGxiYXIgaGFzIGJlZW4gcmVzZXQgKi8KLSAgICBnX2Fz
c2VydF9jbXBmbG9hdChndGtfYWRqdXN0bWVudF9nZXRfdmFsdWUoYWRqdXN0bWVudCksID09LCAw
LjApOwotCi0gICAgLyogR28gYmFjayAqLwotICAgIHdlYmtpdF93ZWJfdmlld19nb19iYWNrKHZp
ZXcpOwotCi0gICAgLyogV2hlbiB1c2luZyBwYWdlIGNhY2hlLCBnb19iYWNrIHdpbGwgcmV0dXJu
IHN5bmNyb25vdXNseSAqLwotICAgIGlmICghd2l0aF9wYWdlX2NhY2hlKQotICAgICAgICBnX21h
aW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICAvKiBNYWtlIHN1cmUgR1RLKyBoYXMgdGltZSB0byBw
cm9jZXNzIHRoZSBjaGFuZ2VzIGluIHNpemUsIGZvciB0aGUgYWRqdXNtZW50cyAqLwotICAgIHdo
aWxlIChndGtfZXZlbnRzX3BlbmRpbmcoKSkKLSAgICAgICAgZ3RrX21haW5faXRlcmF0aW9uKCk7
Ci0KLSAgICAvKiBNYWtlIHN1cmUgdXBwZXIgYW5kIGxvd2VyIGJvdW5kcyBoYXZlIGJlZW4gcmVz
dG9yZWQgY29ycmVjdGx5ICovCi0gICAgZ19hc3NlcnRfY21wZmxvYXQobG93ZXIsID09LCBndGtf
YWRqdXN0bWVudF9nZXRfbG93ZXIoYWRqdXN0bWVudCkpOwotICAgIGdfYXNzZXJ0X2NtcGZsb2F0
KHVwcGVyLCA9PSwgZ3RrX2FkanVzdG1lbnRfZ2V0X3VwcGVyKGFkanVzdG1lbnQpKTsKLSAgICBn
X2Fzc2VydF9jbXBmbG9hdChndGtfYWRqdXN0bWVudF9nZXRfdmFsdWUoYWRqdXN0bWVudCksID09
LCAxMDAuMCk7Ci0KLSAgICBnX2ZyZWUoZWZmZWN0aXZlX3VyaSk7Ci0gICAgZ19mcmVlKHNlY29u
ZF91cmkpOwotCi0gICAgZ3RrX3dpZGdldF9kZXN0cm95KHdpbmRvdyk7Ci19Ci0KLXN0YXRpYyB2
b2lkIHRlc3Rfd2Via2l0X3dlYl92aWV3X2FkanVzdG1lbnRzKCkKLXsKLSAgICAvKiBUZXN0IHRo
aXMgd2l0aCBwYWdlIGNhY2hlIGRpc2FibGVkLCBhbmQgZW5hYmxlZC4gKi8KLSAgICBkb190ZXN0
X3dlYmtpdF93ZWJfdmlld19hZGp1c3RtZW50cyhGQUxTRSk7Ci0gICAgZG9fdGVzdF93ZWJraXRf
d2ViX3ZpZXdfYWRqdXN0bWVudHMoVFJVRSk7Ci19Ci0KLWdib29sZWFuIGRlbGF5ZWRfZGVzdHJv
eShncG9pbnRlciBkYXRhKQotewotICAgIGd0a193aWRnZXRfZGVzdHJveShHVEtfV0lER0VUKGRh
dGEpKTsKLSAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwotICAgIHJldHVybiBGQUxTRTsKLX0K
LQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3ZpZXdfZGVzdHJveSgpCi17Ci0gICAgR3Rr
V2lkZ2V0KiB3aW5kb3c7Ci0gICAgR3RrV2lkZ2V0KiB3ZWJfdmlldzsKLQotICAgIHdpbmRvdyA9
IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOwotICAgIHdlYl92aWV3ID0gd2Vi
a2l0X3dlYl92aWV3X25ldygpOwotCi0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5F
Uih3aW5kb3cpLCB3ZWJfdmlldyk7Ci0KLSAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7
Ci0KLSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotCi0gICAgZ19zaWdu
YWxfY29ubmVjdCh3aW5kb3csICJtYXAtZXZlbnQiLAotICAgICAgICAgICAgICAgICAgICAgR19D
QUxMQkFDSyhtYXBfZXZlbnRfY2IpLCBsb29wKTsKLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7
Ci0KLSAgICBnX2lkbGVfYWRkKGRlbGF5ZWRfZGVzdHJveSwgd2ViX3ZpZXcpOwotICAgIGdfbWFp
bl9sb29wX3J1bihsb29wKTsKLQotICAgIGd0a193aWRnZXRfZGVzdHJveSh3aW5kb3cpOwotfQot
Ci1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfdmlld193aW5kb3dfZmVhdHVyZXMoKQotewot
ICAgIEd0a1dpZGdldCogd2luZG93OwotICAgIEd0a1dpZGdldCogd2ViX3ZpZXc7Ci0gICAgCi0g
ICAgd2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7Ci0gICAgd2Vi
X3ZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7Ci0gICAgCi0gICAgZ3RrX2NvbnRhaW5lcl9h
ZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB3ZWJfdmlldyk7Ci0gICAgCi0gICAgZ3RrX3dpZGdl
dF9zaG93X2FsbCh3aW5kb3cpOwotICAgIAotICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVM
TCwgVFJVRSk7Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KHdpbmRvdywgIm1hcC1ldmVudCIsCi0g
ICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKG1hcF9ldmVudF9jYiksIGxvb3ApOwotICAg
IGdfbWFpbl9sb29wX3J1bihsb29wKTsKLSAgICAKLSAgICAvKiBCdWcgIzM2MTQ0ICovCi0gICAg
Z19vYmplY3Rfc2V0KEdfT0JKRUNUKHdlYl92aWV3KSwgIndpbmRvdy1mZWF0dXJlcyIsIE5VTEws
IE5VTEwpOwotICAgIAotICAgIGd0a193aWRnZXRfZGVzdHJveSh3aW5kb3cpOwotfSAgICAKLQot
c3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3ZpZXdfaW5fb2Zmc2NyZWVuX3dpbmRvd19kb2Vz
X25vdF9jcmFzaCgpCi17Ci0gICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsK
LQotICAgIEd0a1dpZGdldCAqd2luZG93ID0gZ3RrX29mZnNjcmVlbl93aW5kb3dfbmV3KCk7Ci0g
ICAgR3RrV2lkZ2V0ICp3ZWJfdmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKLQotICAgIGd0
a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgd2ViX3ZpZXcpOwotICAgIGd0
a193aWRnZXRfc2hvd19hbGwod2luZG93KTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHdlYl92aWV3
LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0soaWRsZV9xdWl0X2xvb3BfY2IpLCBO
VUxMKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkoV0VCS0lUX1dFQl9WSUVXKHdlYl92
aWV3KSwgYmFzZV91cmkpOwotCi0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAgZ3Rr
X3dpZGdldF9kZXN0cm95KHdpbmRvdyk7Ci0gICAgZ19tYWluX2xvb3BfdW5yZWYobG9vcCk7Ci19
Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl92aWV3X2RvZXNfbm90X3N0ZWFsX2ZvY3Vz
KCkKLXsKLSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotCi0gICAgR3Rr
V2lkZ2V0ICp3aW5kb3cgPSBndGtfb2Zmc2NyZWVuX3dpbmRvd19uZXcoKTsKLSAgICBHdGtXaWRn
ZXQgKndlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7Ci0gICAgR3RrV2lkZ2V0ICplbnRy
eSA9IGd0a19lbnRyeV9uZXcoKTsKLQotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi0gICAgR3Rr
V2lkZ2V0ICpib3ggPSBndGtfaGJveF9uZXcoRkFMU0UsIDApOwotI2Vsc2UKLSAgICBHdGtXaWRn
ZXQgKmJveCA9IGd0a19ib3hfbmV3KEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFMLCAwKTsKLSNl
bmRpZgotCi0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihib3gpLCB3ZWJWaWV3
KTsKLSAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGJveCksIGVudHJ5KTsKLSAg
ICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIGJveCk7Ci0gICAgZ3Rr
X3dpZGdldF9zaG93X2FsbCh3aW5kb3cpOwotCi0gICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKGVu
dHJ5KTsKLSAgICBnX2Fzc2VydChndGtfd2lkZ2V0X2lzX2ZvY3VzKGVudHJ5KSk7Ci0KLSAgICBn
X3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFD
SyhpZGxlX3F1aXRfbG9vcF9jYiksIE5VTEwpOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX2h0
bWxfc3RyaW5nKFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3KSwKLSAgICAgICAgIjxodG1sPjxib2R5
PiIKLSAgICAgICAgIiAgICA8aW5wdXQgaWQ9XCJlbnRyeVwiIHR5cGU9XCJ0ZXh0XCIvPiIKLSAg
ICAgICAgIiAgICA8c2NyaXB0PiIKLSAgICAgICAgIiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoXCJlbnRyeVwiKS5mb2N1cygpOyIKLSAgICAgICAgIiAgICA8L3NjcmlwdD4iCi0gICAg
ICAgICI8L2JvZHk+PC9odG1sPiIsICJmaWxlOi8vIik7Ci0KLSAgICBnX21haW5fbG9vcF9ydW4o
bG9vcCk7Ci0KLSAgICBnX2Fzc2VydChndGtfd2lkZ2V0X2lzX2ZvY3VzKGVudHJ5KSk7Ci0KLSAg
ICBndGtfd2lkZ2V0X2Rlc3Ryb3kod2luZG93KTsKLSAgICBnX21haW5fbG9vcF91bnJlZihsb29w
KTsKLX0KLQotc3RhdGljIGdib29sZWFuIGVtaXRLZXlTdHJva2UoV2ViS2l0V2ViVmlldyogd2Vi
VmlldykKLXsKLSAgICBHZGtFdmVudCogcHJlc3NFdmVudCA9IGdka19ldmVudF9uZXcoR0RLX0tF
WV9QUkVTUyk7Ci0gICAgcHJlc3NFdmVudC0+a2V5LmtleXZhbCA9IEdES19LRVlfZjsKLSAgICBH
ZGtXaW5kb3cqIHdpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyhHVEtfV0lER0VUKHdlYlZp
ZXcpKTsKLSAgICBwcmVzc0V2ZW50LT5rZXkud2luZG93ID0gd2luZG93OwotICAgIGdfb2JqZWN0
X3JlZihwcmVzc0V2ZW50LT5rZXkud2luZG93KTsKLQotI2lmbmRlZiBHVEtfQVBJX1ZFUlNJT05f
MgotICAgIEdka0RldmljZU1hbmFnZXIqIG1hbmFnZXIgPSBnZGtfZGlzcGxheV9nZXRfZGV2aWNl
X21hbmFnZXIoZ2RrX3dpbmRvd19nZXRfZGlzcGxheSh3aW5kb3cpKTsKLSAgICBnZGtfZXZlbnRf
c2V0X2RldmljZShwcmVzc0V2ZW50LCBnZGtfZGV2aWNlX21hbmFnZXJfZ2V0X2NsaWVudF9wb2lu
dGVyKG1hbmFnZXIpKTsKLSNlbmRpZgotCi0gICAgLy8gV2hlbiBzeW50aGVzaXppbmcgYW4gZXZl
bnQsIGFuIGludmFsaWQgaGFyZHdhcmVfa2V5Y29kZSB2YWx1ZQotICAgIC8vIGNhbiBjYXVzZSBp
dCB0byBiZSBiYWRseSBwcm9jZXNzZWQgYnkgR3RrKy4KLSAgICBHZGtLZXltYXBLZXkqIGtleXM7
Ci0gICAgZ2ludCBuX2tleXM7Ci0gICAgaWYgKGdka19rZXltYXBfZ2V0X2VudHJpZXNfZm9yX2tl
eXZhbChnZGtfa2V5bWFwX2dldF9kZWZhdWx0KCksIEdES19LRVlfZiwgJmtleXMsICZuX2tleXMp
KSB7Ci0gICAgICAgIHByZXNzRXZlbnQtPmtleS5oYXJkd2FyZV9rZXljb2RlID0ga2V5c1swXS5r
ZXljb2RlOwotICAgICAgICBnX2ZyZWUoa2V5cyk7Ci0gICAgfQotCi0gICAgR2RrRXZlbnQqIHJl
bGVhc2VFdmVudCA9IGdka19ldmVudF9jb3B5KHByZXNzRXZlbnQpOwotICAgIGd0a19tYWluX2Rv
X2V2ZW50KHByZXNzRXZlbnQpOwotICAgIGdka19ldmVudF9mcmVlKHByZXNzRXZlbnQpOwotICAg
IHJlbGVhc2VFdmVudC0+a2V5LnR5cGUgPSBHREtfS0VZX1JFTEVBU0U7Ci0gICAgZ3RrX21haW5f
ZG9fZXZlbnQocmVsZWFzZUV2ZW50KTsKLSAgICBnZGtfZXZlbnRfZnJlZShyZWxlYXNlRXZlbnQp
OwotCi0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gZW50ZXJpbmdfZnVs
bHNjcmVlbl9jYihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHT2JqZWN0KiBlbGVtZW50LCBnYm9v
bGVhbiBibG9ja2VkKQotewotICAgIGlmIChibG9ja2VkKQotICAgICAgICBnX21haW5fbG9vcF9x
dWl0KGxvb3ApOwotICAgIGVsc2UKLSAgICAgICAgZ190aW1lb3V0X2FkZCgyMDAsIChHU291cmNl
RnVuYykgZW1pdEtleVN0cm9rZSwgd2ViVmlldyk7Ci0gICAgcmV0dXJuIGJsb2NrZWQ7Ci19Ci0K
LXN0YXRpYyBnYm9vbGVhbiBsZWF2aW5nX2Z1bGxzY3JlZW5fY2IoV2ViS2l0V2ViVmlldyogd2Vi
VmlldywgR09iamVjdCogZWxlbWVudCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBnX21haW5fbG9v
cF9xdWl0KGxvb3ApOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93
ZWJraXRfd2ViX3ZpZXdfZnVsbHNjcmVlbihnY29uc3Rwb2ludGVyIGJsb2NrZWQpCi17Ci0gICAg
R3RrV2lkZ2V0KiB3aW5kb3c7Ci0gICAgR3RrV2lkZ2V0KiB3ZWJfdmlldzsKLSAgICBXZWJLaXRX
ZWJTZXR0aW5ncyAqc2V0dGluZ3M7Ci0KLSAgICB3aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtf
V0lORE9XX1RPUExFVkVMKTsKLSAgICB3ZWJfdmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsK
LQotICAgIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyhXRUJLSVRfV0VC
X1ZJRVcod2ViX3ZpZXcpKTsKLSAgICBnX29iamVjdF9zZXQoc2V0dGluZ3MsICJlbmFibGUtZnVs
bHNjcmVlbiIsIFRSVUUsIE5VTEwpOwotICAgIHdlYmtpdF93ZWJfdmlld19zZXRfc2V0dGluZ3Mo
V0VCS0lUX1dFQl9WSUVXKHdlYl92aWV3KSwgc2V0dGluZ3MpOwotCi0gICAgZ3RrX2NvbnRhaW5l
cl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB3ZWJfdmlldyk7Ci0KLSAgICBndGtfd2lkZ2V0
X3Nob3dfYWxsKHdpbmRvdyk7Ci0KLSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRS
VUUpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh3ZWJfdmlldywgImVudGVyaW5nLWZ1bGxzY3Jl
ZW4iLCBHX0NBTExCQUNLKGVudGVyaW5nX2Z1bGxzY3JlZW5fY2IpLCAoZ3BvaW50ZXIpIGJsb2Nr
ZWQpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViX3ZpZXcsICJsZWF2aW5nLWZ1bGxzY3JlZW4i
LCBHX0NBTExCQUNLKGxlYXZpbmdfZnVsbHNjcmVlbl9jYiksIE5VTEwpOwotCi0gICAgd2Via2l0
X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklFVyh3ZWJfdmlldyksICI8aHRtbD48
Ym9keT4iCi0gICAgICAgICAgICAgICAgICAgIjxzY3JpcHQ+IgotICAgICAgICAgICAgICAgICAg
ICJ2YXIgZXZlbnROYW1lID0gJ2tleXByZXNzJzsiCi0gICAgICAgICAgICAgICAgICAgImRvY3Vt
ZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBmdW5jdGlvbiAoKSB7IgotICAgICAgICAg
ICAgICAgICAgICIgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LndlYmtpdFJlcXVlc3RGdWxs
U2NyZWVuKCk7IgotICAgICAgICAgICAgICAgICAgICJ9LCBmYWxzZSk7IgotICAgICAgICAgICAg
ICAgICAgICI8L3NjcmlwdD48L2JvZHk+PC9odG1sPiIsIE5VTEwsIE5VTEwsIE5VTEwpOwotCi0g
ICAgZ190aW1lb3V0X2FkZCgxMDAsIChHU291cmNlRnVuYykgZW1pdEtleVN0cm9rZSwgV0VCS0lU
X1dFQl9WSUVXKHdlYl92aWV3KSk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAg
Z3RrX3dpZGdldF9kZXN0cm95KHdpbmRvdyk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBjaGVja01p
bWVUeXBlRm9yRmlsdGVyKEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciwgY29uc3QgZ2NoYXIqIG1pbWVU
eXBlKQotewotICAgIEd0a0ZpbGVGaWx0ZXJJbmZvIGZpbHRlcl9pbmZvOwotICAgIGZpbHRlcl9p
bmZvLmNvbnRhaW5zID0gR1RLX0ZJTEVfRklMVEVSX01JTUVfVFlQRTsKLSAgICBmaWx0ZXJfaW5m
by5taW1lX3R5cGUgPSBtaW1lVHlwZTsKLSAgICByZXR1cm4gZ3RrX2ZpbGVfZmlsdGVyX2ZpbHRl
cihmaWx0ZXIsICZmaWx0ZXJfaW5mbyk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBydW5GaWxlQ2hv
b3NlckNiTm9NdWx0aXNlbE5vTWltZShXZWJLaXRXZWJWaWV3KiB3ZWJ2aWV3LCBXZWJLaXRGaWxl
Q2hvb3NlclJlcXVlc3QqIHJlcXVlc3QsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19hc3NlcnQo
IXdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxlKHJlcXVlc3Qp
KTsKLQotICAgIGNvbnN0IGdjaGFyKiBjb25zdCogbWltZVR5cGVzID0gd2Via2l0X2ZpbGVfY2hv
b3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKHJlcXVlc3QpOwotICAgIGdfYXNzZXJ0KCFtaW1l
VHlwZXMpOwotICAgIEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciA9IHdlYmtpdF9maWxlX2Nob29zZXJf
cmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIocmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQoIWZp
bHRlcik7Ci0KLSAgICBjb25zdCBnY2hhciogY29uc3QqIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRf
ZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKHJlcXVlc3QpOwotICAgIGdf
YXNzZXJ0KCFzZWxlY3RlZEZpbGVzKTsKLQotICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci0g
ICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBydW5GaWxlQ2hvb3NlckNiTXVs
dGlzZWxOb01pbWUoV2ViS2l0V2ViVmlldyogd2VidmlldywgV2ViS2l0RmlsZUNob29zZXJSZXF1
ZXN0KiByZXF1ZXN0LCBncG9pbnRlciBkYXRhKQotewotICAgIGdfYXNzZXJ0KHdlYmtpdF9maWxl
X2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxlKHJlcXVlc3QpKTsKLQotICAgIGNv
bnN0IGdjaGFyKiBjb25zdCogbWltZVR5cGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X2dldF9taW1lX3R5cGVzKHJlcXVlc3QpOwotICAgIGdfYXNzZXJ0KCFtaW1lVHlwZXMpOwotICAg
IEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRf
bWltZV90eXBlc19maWx0ZXIocmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQoIWZpbHRlcik7Ci0gICAg
Y29uc3QgZ2NoYXIqIGNvbnN0KiBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9y
ZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0KTsKLSAgICBnX2Fzc2VydCghc2VsZWN0
ZWRGaWxlcyk7Ci0KLSAgICAvLyBTZWxlY3Qgc29tZSBmaWxlcy4KLSAgICBjb25zdCBnY2hhciog
ZmlsZXNUb1NlbGVjdFs0XSA9IHsgIi9mb28iLCAiL2Zvby9iYXIiLCAiL2Zvby9iYXIvYmF6Iiwg
MCB9OwotICAgIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9zZWxlY3RfZmlsZXMocmVxdWVz
dCwgZmlsZXNUb1NlbGVjdCk7Ci0KLSAgICAvLyBDaGVjayB0aGUgZmlsZXMgdGhhdCBoYXZlIGJl
ZW4ganVzdCBzZWxlY3RlZC4KLSAgICBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0KTsKLSAgICBnX2Fzc2VydChzZWxl
Y3RlZEZpbGVzKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1swXSwgPT0sICIv
Zm9vIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMV0sID09LCAiL2Zvby9i
YXIiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1syXSwgPT0sICIvZm9vL2Jh
ci9iYXoiKTsKLSAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxlc1szXSk7Ci0KLSAgICBnX21haW5f
bG9vcF9xdWl0KGxvb3ApOwotICAgIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4g
cnVuRmlsZUNob29zZXJDYlNlbGVjdGlvblJldGFpbmVkKFdlYktpdFdlYlZpZXcqIHdlYnZpZXcs
IFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAg
ICBjb25zdCBnY2hhciogY29uc3QqIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2Vy
X3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKHJlcXVlc3QpOwotICAgIGdfYXNzZXJ0KHNlbGVj
dGVkRmlsZXMpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzBdLCA9PSwgIi9m
b28iKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1sxXSwgPT0sICIvZm9vL2Jh
ciIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzJdLCA9PSwgIi9mb28vYmFy
L2JheiIpOwotICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZpbGVzWzNdKTsKLQotICAgIGdfbWFpbl9s
b29wX3F1aXQobG9vcCk7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBy
dW5GaWxlQ2hvb3NlckNiTm9NdWx0aXNlbEFjY2VwdFR5cGVzKFdlYktpdFdlYlZpZXcqIHdlYnZp
ZXcsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCwgZ3BvaW50ZXIgZGF0YSkKLXsK
LSAgICBnX2Fzc2VydCghd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RfbXVs
dGlwbGUocmVxdWVzdCkpOwotCi0gICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBtaW1lVHlwZXMgPSB3
ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMocmVxdWVzdCk7Ci0gICAg
Z19hc3NlcnQobWltZVR5cGVzKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIobWltZVR5cGVzWzBdLCA9
PSwgImF1ZGlvLyoiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIobWltZVR5cGVzWzFdLCA9PSwgInZp
ZGVvLyoiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIobWltZVR5cGVzWzJdLCA9PSwgImltYWdlLyoi
KTsKLSAgICBnX2Fzc2VydCghbWltZVR5cGVzWzNdKTsKLQotICAgIEd0a0ZpbGVGaWx0ZXIqIGZp
bHRlciA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIo
cmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQoR1RLX0lTX0ZJTEVfRklMVEVSKGZpbHRlcikpOwotICAg
IGdfYXNzZXJ0KGNoZWNrTWltZVR5cGVGb3JGaWx0ZXIoZmlsdGVyLCAiYXVkaW8vKiIpKTsKLSAg
ICBnX2Fzc2VydChjaGVja01pbWVUeXBlRm9yRmlsdGVyKGZpbHRlciwgInZpZGVvLyoiKSk7Ci0g
ICAgZ19hc3NlcnQoY2hlY2tNaW1lVHlwZUZvckZpbHRlcihmaWx0ZXIsICJpbWFnZS8qIikpOwot
Ci0gICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2ZpbGVfY2hv
b3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0KTsKLSAgICBnX2Fzc2VydCgh
c2VsZWN0ZWRGaWxlcyk7Ci0KLSAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwotICAgIHJldHVy
biBUUlVFOwotfQotCi12b2lkIGRvTW91c2VCdXR0b25FdmVudChHdGtXaWRnZXQqIHdpZGdldCwg
R2RrRXZlbnRUeXBlIGV2ZW50VHlwZSwgaW50IHgsIGludCB5LCB1bnNpZ25lZCBpbnQgYnV0dG9u
LCB1bnNpZ25lZCBpbnQgbW9kaWZpZXJzKQotewotICAgIGdfYXNzZXJ0KGd0a193aWRnZXRfZ2V0
X3JlYWxpemVkKHdpZGdldCkpOwotCi0gICAgR2RrRXZlbnQqIGV2ZW50ID0gZ2RrX2V2ZW50X25l
dyhldmVudFR5cGUpOwotICAgIGV2ZW50LT5idXR0b24ud2luZG93ID0gZ3RrX3dpZGdldF9nZXRf
d2luZG93KHdpZGdldCk7Ci0gICAgZ19vYmplY3RfcmVmKGV2ZW50LT5idXR0b24ud2luZG93KTsK
LQotICAgIGV2ZW50LT5idXR0b24udGltZSA9IEdES19DVVJSRU5UX1RJTUU7Ci0gICAgZXZlbnQt
PmJ1dHRvbi54ID0geDsKLSAgICBldmVudC0+YnV0dG9uLnkgPSB5OwotICAgIGV2ZW50LT5idXR0
b24uYXhlcyA9IDA7Ci0gICAgZXZlbnQtPmJ1dHRvbi5zdGF0ZSA9IG1vZGlmaWVyczsKLSAgICBl
dmVudC0+YnV0dG9uLmJ1dHRvbiA9IGJ1dHRvbjsKLQotI2lmbmRlZiBHVEtfQVBJX1ZFUlNJT05f
MgotICAgIGV2ZW50LT5idXR0b24uZGV2aWNlID0gZ2RrX2RldmljZV9tYW5hZ2VyX2dldF9jbGll
bnRfcG9pbnRlcihnZGtfZGlzcGxheV9nZXRfZGV2aWNlX21hbmFnZXIoZ3RrX3dpZGdldF9nZXRf
ZGlzcGxheSh3aWRnZXQpKSk7Ci0jZW5kaWYKLQotICAgIGludCB4Um9vdCwgeVJvb3Q7Ci0gICAg
Z2RrX3dpbmRvd19nZXRfcm9vdF9jb29yZHMoZ3RrX3dpZGdldF9nZXRfd2luZG93KHdpZGdldCks
IHgsIHksICZ4Um9vdCwgJnlSb290KTsKLSAgICBldmVudC0+YnV0dG9uLnhfcm9vdCA9IHhSb290
OwotICAgIGV2ZW50LT5idXR0b24ueV9yb290ID0geVJvb3Q7Ci0gICAgZ3RrX21haW5fZG9fZXZl
bnQoZXZlbnQpOwotfQotCi1zdGF0aWMgdm9pZCBjbGlja01vdXNlQnV0dG9uKEd0a1dpZGdldCog
d2lkZ2V0LCBpbnQgeCwgaW50IHksIHVuc2lnbmVkIGludCBidXR0b24sIHVuc2lnbmVkIGludCBt
b2RpZmllcnMpCi17Ci0gICAgZG9Nb3VzZUJ1dHRvbkV2ZW50KHdpZGdldCwgR0RLX0JVVFRPTl9Q
UkVTUywgeCwgeSwgYnV0dG9uLCBtb2RpZmllcnMpOwotICAgIGRvTW91c2VCdXR0b25FdmVudCh3
aWRnZXQsIEdES19CVVRUT05fUkVMRUFTRSwgeCwgeSwgYnV0dG9uLCBtb2RpZmllcnMpOwotfQot
Ci1zdGF0aWMgZ2Jvb2xlYW4gY2xpY2tNb3VzZUJ1dHRvbkFuZFdhaXRGb3JGaWxlQ2hvb3NlclJl
cXVlc3QoV2ViS2l0V2ViVmlldyogd2ViVmlldykKLXsKLSAgICBjbGlja01vdXNlQnV0dG9uKEdU
S19XSURHRVQod2ViVmlldyksIDUsIDUsIDEsIDApOwotICAgIHJldHVybiBUUlVFOwotfQotCi1z
dGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfdmlld19maWxlX2Nob29zZXIoKQotewotICAgIGNv
bnN0IGdjaGFyKiBodG1sRm9ybWF0QmFzZSA9ICI8aHRtbD48Ym9keT4iCi0gICAgICAgICAgICAi
PGlucHV0IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjA7bWFyZ2luOjA7cGFk
ZGluZzowJyB0eXBlPSdmaWxlJyAlcy8+IgotICAgICAgICAgICAgIjwvYm9keT48L2h0bWw+IjsK
LQotICAgIEd0a1dpZGdldCogd2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BM
RVZFTCk7Ci0gICAgR3RrV2lkZ2V0KiB3ZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygpOwot
ICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgd2ViVmlldyk7Ci0g
ICAgZ3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpOwotCi0gICAgbG9vcCA9IGdfbWFpbl9sb29w
X25ldyhOVUxMLCBUUlVFKTsKLQotICAgIC8vIE11bHRpcGxlIHNlbGVjdGlvbnMgbm90IGFsbG93
ZWQsIG5vIE1JTUUgZmlsdGVyaW5nLgotICAgIGd1bG9uZyBoYW5kbGVyID0gZ19zaWduYWxfY29u
bmVjdCh3ZWJWaWV3LCAicnVuLWZpbGUtY2hvb3NlciIsIEdfQ0FMTEJBQ0socnVuRmlsZUNob29z
ZXJDYk5vTXVsdGlzZWxOb01pbWUpLCBOVUxMKTsKLSAgICBnY2hhciogaHRtbEZvcm1hdCA9IGdf
c3RyZHVwX3ByaW50ZihodG1sRm9ybWF0QmFzZSwgIiIpOwotICAgIHdlYmtpdF93ZWJfdmlld19s
b2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldyksIGh0bWxGb3JtYXQsIE5VTEwsIE5V
TEwsIE5VTEwpOwotICAgIGdfZnJlZShodG1sRm9ybWF0KTsKLQotICAgIGdfdGltZW91dF9hZGQo
MTAwLCAoR1NvdXJjZUZ1bmMpIGNsaWNrTW91c2VCdXR0b25BbmRXYWl0Rm9yRmlsZUNob29zZXJS
ZXF1ZXN0LCBXRUJLSVRfV0VCX1ZJRVcod2ViVmlldykpOwotICAgIGdfbWFpbl9sb29wX3J1bihs
b29wKTsKLQotICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdCh3ZWJWaWV3LCBoYW5kbGVy
KTsKLQotICAgIC8vIE11bHRpcGxlIHNlbGVjdGlvbnMgYWxsb3dlZCwgbm8gTUlNRSBmaWx0ZXJp
bmcsIHNvbWUgcHJlLXNlbGVjdGVkIGZpbGVzLgotICAgIGhhbmRsZXIgPSBnX3NpZ25hbF9jb25u
ZWN0KHdlYlZpZXcsICJydW4tZmlsZS1jaG9vc2VyIiwgR19DQUxMQkFDSyhydW5GaWxlQ2hvb3Nl
ckNiTXVsdGlzZWxOb01pbWUpLCBOVUxMKTsKLSAgICBodG1sRm9ybWF0ID0gZ19zdHJkdXBfcHJp
bnRmKGh0bWxGb3JtYXRCYXNlLCAibXVsdGlwbGUiKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9h
ZF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpLCBodG1sRm9ybWF0LCBOVUxMLCBOVUxM
LCBOVUxMKTsKLSAgICBnX2ZyZWUoaHRtbEZvcm1hdCk7Ci0KLSAgICBnX3RpbWVvdXRfYWRkKDEw
MCwgKEdTb3VyY2VGdW5jKSBjbGlja01vdXNlQnV0dG9uQW5kV2FpdEZvckZpbGVDaG9vc2VyUmVx
dWVzdCwgV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpKTsKLSAgICBnX21haW5fbG9vcF9ydW4obG9v
cCk7Ci0KLSAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3Qod2ViVmlldywgaGFuZGxlcik7
Ci0KLSAgICAvLyBQZXJmb3JtIGFub3RoZXIgcmVxdWVzdCB0byBjaGVjayBpZiB0aGUgbGlzdCBv
ZiBmaWxlcyBzZWxlY3RlZAotICAgIC8vIGluIHRoZSBwcmV2aW91cyBzdGVwIGFwcGVhcnMgbm93
IGFzIHBhcnQgb2YgdGhlIG5ldyByZXF1ZXN0LgotICAgIGhhbmRsZXIgPSBnX3NpZ25hbF9jb25u
ZWN0KHdlYlZpZXcsICJydW4tZmlsZS1jaG9vc2VyIiwgR19DQUxMQkFDSyhydW5GaWxlQ2hvb3Nl
ckNiU2VsZWN0aW9uUmV0YWluZWQpLCBOVUxMKTsKLSAgICBnX3RpbWVvdXRfYWRkKDEwMCwgKEdT
b3VyY2VGdW5jKSBjbGlja01vdXNlQnV0dG9uQW5kV2FpdEZvckZpbGVDaG9vc2VyUmVxdWVzdCwg
V0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpKTsKLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0K
LSAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3Qod2ViVmlldywgaGFuZGxlcik7Ci0KLSAg
ICAvLyBNdWx0aXBsZSBzZWxlY3Rpb25zIG5vdCBhbGxvd2VkLCBvbmx5IGFjY2VwdCBpbWFnZXMs
IGF1ZGlvIGFuZCB2aWRlbyBmaWxlcy4KLSAgICBoYW5kbGVyID0gZ19zaWduYWxfY29ubmVjdCh3
ZWJWaWV3LCAicnVuLWZpbGUtY2hvb3NlciIsIEdfQ0FMTEJBQ0socnVuRmlsZUNob29zZXJDYk5v
TXVsdGlzZWxBY2NlcHRUeXBlcyksIE5VTEwpOwotICAgIGh0bWxGb3JtYXQgPSBnX3N0cmR1cF9w
cmludGYoaHRtbEZvcm1hdEJhc2UsICJhY2NlcHQ9J2F1ZGlvLyosdmlkZW8vKixpbWFnZS8qJyIp
OwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcod2ViVmll
dyksIGh0bWxGb3JtYXQsIE5VTEwsIE5VTEwsIE5VTEwpOwotICAgIGdfZnJlZShodG1sRm9ybWF0
KTsKLQotICAgIGdfdGltZW91dF9hZGQoMTAwLCAoR1NvdXJjZUZ1bmMpIGNsaWNrTW91c2VCdXR0
b25BbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0LCBXRUJLSVRfV0VCX1ZJRVcod2ViVmlldykp
OwotICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLQotICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlz
Y29ubmVjdCh3ZWJWaWV3LCBoYW5kbGVyKTsKLSAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kod2luZG93
KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3ZpZXdfc291cmNlX21vZGUoKQot
ewotICAgIEd0a1dpZGdldCogd2ViX3ZpZXc7Ci0KLSAgICB3ZWJfdmlldyA9IHdlYmtpdF93ZWJf
dmlld19uZXcoKTsKLQotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhXRUJLSVRfV0VC
X1ZJRVcod2ViX3ZpZXcpLCAiPGh0bWw+PGJvZHk+PC9ib2R5PjwvaHRtbD4iLCBOVUxMLCBOVUxM
LCBOVUxMKTsKLQotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfZ2V0X3ZpZXdfc291cmNl
X21vZGUoV0VCS0lUX1dFQl9WSUVXKHdlYl92aWV3KSkpOwotCi0gICAgd2Via2l0X3dlYl92aWV3
X3NldF92aWV3X3NvdXJjZV9tb2RlKFdFQktJVF9XRUJfVklFVyh3ZWJfdmlldyksIFRSVUUpOwot
Ci0gICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dldF92aWV3X3NvdXJjZV9tb2RlKFdFQktJ
VF9XRUJfVklFVyh3ZWJfdmlldykpKTsKLQotICAgIHdlYmtpdF93ZWJfdmlld19zZXRfdmlld19z
b3VyY2VfbW9kZShXRUJLSVRfV0VCX1ZJRVcod2ViX3ZpZXcpLCBGQUxTRSk7Ci0KLSAgICBnX2Fz
c2VydCghd2Via2l0X3dlYl92aWV3X2dldF92aWV3X3NvdXJjZV9tb2RlKFdFQktJVF9XRUJfVklF
Vyh3ZWJfdmlldykpKTsKLQotICAgIGd0a193aWRnZXRfZGVzdHJveSh3ZWJfdmlldyk7Ci19Ci0K
LWludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKLXsKLSAgICBTb3VwU2VydmVyKiBzZXJ2
ZXI7Ci0gICAgU291cFVSSSogc291cF91cmk7Ci0KLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAm
YXJndiwgTlVMTCk7Ci0KLSAgICAvKiBIb3BlZnVsbHkgbWFrZSB0ZXN0IGluZGVwZW5kZW50IG9m
IHRoZSBwYXRoIGl0J3MgY2FsbGVkIGZyb20uICovCi0gICAgdGVzdHV0aWxzX3JlbGF0aXZlX2No
ZGlyKCJTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy9yZXNvdXJjZXMvdGVzdC5odG1sIiwgYXJndlsw
XSk7Ci0KLSAgICBzZXJ2ZXIgPSBzb3VwX3NlcnZlcl9uZXcoU09VUF9TRVJWRVJfUE9SVCwgMCwg
TlVMTCk7Ci0gICAgc291cF9zZXJ2ZXJfcnVuX2FzeW5jKHNlcnZlcik7Ci0KLSAgICBzb3VwX3Nl
cnZlcl9hZGRfaGFuZGxlcihzZXJ2ZXIsIE5VTEwsIHNlcnZlcl9jYWxsYmFjaywgTlVMTCwgTlVM
TCk7Ci0KLSAgICBzb3VwX3VyaSA9IHNvdXBfdXJpX25ldygiaHR0cDovLzEyNy4wLjAuMS8iKTsK
LSAgICBzb3VwX3VyaV9zZXRfcG9ydChzb3VwX3VyaSwgc291cF9zZXJ2ZXJfZ2V0X3BvcnQoc2Vy
dmVyKSk7Ci0KLSAgICBiYXNlX3VyaSA9IHNvdXBfdXJpX3RvX3N0cmluZyhzb3VwX3VyaSwgRkFM
U0UpOwotICAgIHNvdXBfdXJpX2ZyZWUoc291cF91cmkpOwotCi0gICAgZ190ZXN0X2J1Z19iYXNl
KCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJr
aXQvd2Vidmlldy9pY29uLXVyaSIsIHRlc3Rfd2Via2l0X3dlYl92aWV3X2ljb25fdXJpKTsKLSAg
ICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vidmlldy9hZGp1c3RtZW50cyIsIHRlc3Rfd2Vi
a2l0X3dlYl92aWV3X2FkanVzdG1lbnRzKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQv
d2Vidmlldy9kZXN0cm95IiwgdGVzdF93ZWJraXRfd2ViX3ZpZXdfZGVzdHJveSk7Ci0gICAgZ190
ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnZpZXcvZ3JhYl9mb2N1cyIsIHRlc3Rfd2Via2l0X3dl
Yl92aWV3X2dyYWJfZm9jdXMpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJ2aWV3
L3dpbmRvdy1mZWF0dXJlcyIsIHRlc3Rfd2Via2l0X3dlYl92aWV3X3dpbmRvd19mZWF0dXJlcyk7
Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnZpZXcvd2Vidmlldy1pbi1vZmZzY3Jl
ZW4td2luZG93LWRvZXMtbm90LWNyYXNoIiwgdGVzdF93ZWJraXRfd2ViX3ZpZXdfaW5fb2Zmc2Ny
ZWVuX3dpbmRvd19kb2VzX25vdF9jcmFzaCk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0
L3dlYnZpZXcvd2Vidmlldy1kb2VzLW5vdC1zdGVhbC1mb2N1cyIsIHRlc3Rfd2Via2l0X3dlYl92
aWV3X2RvZXNfbm90X3N0ZWFsX2ZvY3VzKTsKLSAgICBnX3Rlc3RfYWRkX2RhdGFfZnVuYygiL3dl
YmtpdC93ZWJ2aWV3L2Z1bGxzY3JlZW4iLCBHSU5UX1RPX1BPSU5URVIoRkFMU0UpLCB0ZXN0X3dl
YmtpdF93ZWJfdmlld19mdWxsc2NyZWVuKTsKLSAgICBnX3Rlc3RfYWRkX2RhdGFfZnVuYygiL3dl
YmtpdC93ZWJ2aWV3L2Z1bGxzY3JlZW4tYmxvY2tlZCIsIEdJTlRfVE9fUE9JTlRFUihUUlVFKSwg
dGVzdF93ZWJraXRfd2ViX3ZpZXdfZnVsbHNjcmVlbik7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIv
d2Via2l0L3dlYnZpZXcvZmlsZS1jaG9vc2VyIiwgdGVzdF93ZWJraXRfd2ViX3ZpZXdfZmlsZV9j
aG9vc2VyKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vidmlldy9zb3VyY2UtbW9k
ZSIsIHRlc3Rfd2Via2l0X3dlYl92aWV3X3NvdXJjZV9tb2RlKTsKLQotICAgIHJldHVybiBnX3Rl
c3RfcnVuICgpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdp
bmRvdy5jIGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdpbmRvdy5jCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA1ZWRhNDdiLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQv
Z3RrL3Rlc3RzL3Rlc3R3aW5kb3cuYworKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA5IENvbGxhYm9yYSBMdGQuCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgotCi1z
dGF0aWMgdm9pZCBub3RpZnlfbG9hZF9zdGF0dXNfY2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcs
IEdQYXJhbVNwZWMqIHBzcGVjLCBncG9pbnRlciBkYXRhKQotewotICAgIGlmICh3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYl92aWV3KSA9PSBXRUJLSVRfTE9BRF9GSU5JU0hFRCkg
ewotICAgICAgICBHTWFpbkxvb3AqIGxvb3AgPSAoR01haW5Mb29wKilkYXRhOwotCi0gICAgICAg
IGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dl
YmtpdF93aW5kb3dfc2Nyb2xsYmFyX3BvbGljeSh2b2lkKQotewotICAgIEdNYWluTG9vcCogbG9v
cDsKLSAgICBHdGtXaWRnZXQqIHNjcm9sbGVkV2luZG93OwotICAgIEd0a1dpZGdldCogd2ViVmll
dzsKLSAgICBXZWJLaXRXZWJGcmFtZSogbWFpbkZyYW1lOwotICAgIEd0a1BvbGljeVR5cGUgaG9y
aXpvbnRhbFBvbGljeTsKLSAgICBHdGtQb2xpY3lUeXBlIHZlcnRpY2FsUG9saWN5OwotCi0gICAg
bG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLQotICAgIHNjcm9sbGVkV2luZG93
ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19uZXcoTlVMTCwgTlVMTCk7Ci0gICAgZ3RrX3Njcm9sbGVk
X3dpbmRvd19zZXRfcG9saWN5KEdUS19TQ1JPTExFRF9XSU5ET1coc2Nyb2xsZWRXaW5kb3cpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfUE9MSUNZX0FVVE9NQVRJQywg
R1RLX1BPTElDWV9BVVRPTUFUSUMpOwotCi0gICAgd2ViVmlldyA9IHdlYmtpdF93ZWJfdmlld19u
ZXcoKTsKLSAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKLQotICAgIGdfc2lnbmFsX2Nv
bm5lY3Qod2ViVmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLAotICAgICAgICAgICAgICAgICAg
ICAgR19DQUxMQkFDSyhub3RpZnlfbG9hZF9zdGF0dXNfY2IpLCBsb29wKTsKLQotICAgIGd0a19j
b250YWluZXJfYWRkKEdUS19DT05UQUlORVIoc2Nyb2xsZWRXaW5kb3cpLCB3ZWJWaWV3KTsKLQot
ICAgIG1haW5GcmFtZSA9IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZShXRUJLSVRfV0VC
X1ZJRVcod2ViVmlldykpOwotCi0gICAgLyogVGVzdCB3ZSBjb3JyZWN0bHkgYXBwbHkgcG9saWN5
IGZvciBub3QgaGF2aW5nIHNjcm9sbGJhcnM7IFRoaXMKLSAgICAgKiBjYXNlIGlzIHNwZWNpYWws
IGJlY2F1c2Ugd2UgdHVybiB0aGUgcG9saWN5IGZyb20gTkVWRVIgdG8KLSAgICAgKiBBVVRPTUFU
SUMsIHNpbmNlIHdlIGNhbm5vdCBlYXNpbHkgcmVwcmVzZW50IHRoZSBzYW1lIHRoaW5nCi0gICAg
ICogdXNpbmcgR3RrU2Nyb2xsZWRXaW5kb3cgKi8KLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9o
dG1sX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldyksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIjxodG1sPjxib2R5PldlYktpdCE8L2JvZHk+PHNjcmlwdD5kb2N1
bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdLnN0eWxlLm92ZXJmbG93ID0gJ2hp
ZGRlbic7PC9zY3JpcHQ+PC9odG1sPiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImZpbGU6Ly8iKTsKLQotICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLQotICAgIGd0
a19zY3JvbGxlZF93aW5kb3dfZ2V0X3BvbGljeShHVEtfU0NST0xMRURfV0lORE9XKHNjcm9sbGVk
V2luZG93KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhvcml6b250YWxQ
b2xpY3ksICZ2ZXJ0aWNhbFBvbGljeSk7Ci0KLSAgICBnX2Fzc2VydChob3Jpem9udGFsUG9saWN5
ID09IEdUS19QT0xJQ1lfQVVUT01BVElDKTsKLSAgICBnX2Fzc2VydCh2ZXJ0aWNhbFBvbGljeSA9
PSBHVEtfUE9MSUNZX0FVVE9NQVRJQyk7Ci0KLSAgICBnX2Fzc2VydChHVEtfUE9MSUNZX05FVkVS
ID09IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X2hvcml6b250YWxfc2Nyb2xsYmFyX3BvbGljeShtYWlu
RnJhbWUpKTsKLSAgICBnX2Fzc2VydChHVEtfUE9MSUNZX05FVkVSID09IHdlYmtpdF93ZWJfZnJh
bWVfZ2V0X3ZlcnRpY2FsX3Njcm9sbGJhcl9wb2xpY3kobWFpbkZyYW1lKSk7Ci0KLSAgICAvKiBU
ZXN0IHdlIGNvcnJlY3RseSBhcHBseSBwb2xpY3kgZm9yIGFsd2F5cyBoYXZpbmcgc2Nyb2xsYmFy
cyAqLwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX2h0bWxfc3RyaW5nKFdFQktJVF9XRUJfVklF
Vyh3ZWJWaWV3KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGh0bWw+
PGJvZHk+V2ViS2l0ITwvYm9keT48c2NyaXB0PmRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1l
KCdib2R5JylbMF0uc3R5bGUub3ZlcmZsb3cgPSAnc2Nyb2xsJzs8L3NjcmlwdD48L2h0bWw+IiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZTovLyIpOwotCi0gICAg
Z19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAgZ3RrX3Njcm9sbGVkX3dpbmRvd19nZXRfcG9s
aWN5KEdUS19TQ1JPTExFRF9XSU5ET1coc2Nyb2xsZWRXaW5kb3cpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmaG9yaXpvbnRhbFBvbGljeSwgJnZlcnRpY2FsUG9saWN5KTsK
LQotICAgIGdfYXNzZXJ0KGhvcml6b250YWxQb2xpY3kgPT0gR1RLX1BPTElDWV9BTFdBWVMpOwot
ICAgIGdfYXNzZXJ0KHZlcnRpY2FsUG9saWN5ID09IEdUS19QT0xJQ1lfQUxXQVlTKTsKLQotICAg
IGdfYXNzZXJ0KGhvcml6b250YWxQb2xpY3kgPT0gd2Via2l0X3dlYl9mcmFtZV9nZXRfaG9yaXpv
bnRhbF9zY3JvbGxiYXJfcG9saWN5KG1haW5GcmFtZSkpOwotICAgIGdfYXNzZXJ0KHZlcnRpY2Fs
UG9saWN5ID09IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3ZlcnRpY2FsX3Njcm9sbGJhcl9wb2xpY3ko
bWFpbkZyYW1lKSk7Ci0KLSAgICAvKiBUZXN0IHdlIGNvcnJlY3RseSBhcHBseSBwb2xpY3kgZm9y
IGhhdmluZyBzY3JvbGxiYXJzIHdoZW4gbmVlZGVkICovCi0gICAgd2Via2l0X3dlYl92aWV3X2xv
YWRfaHRtbF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICI8aHRtbD48Ym9keT5XZWJLaXQhPC9ib2R5PjxzY3JpcHQ+
ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHknKVswXS5zdHlsZS5vdmVyZmxvdyA9
ICdhdXRvJzs8L3NjcmlwdD48L2h0bWw+IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiZmlsZTovLyIpOwotCi0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAg
Z3RrX3Njcm9sbGVkX3dpbmRvd19nZXRfcG9saWN5KEdUS19TQ1JPTExFRF9XSU5ET1coc2Nyb2xs
ZWRXaW5kb3cpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaG9yaXpvbnRh
bFBvbGljeSwgJnZlcnRpY2FsUG9saWN5KTsKLQotICAgIGdfYXNzZXJ0KGhvcml6b250YWxQb2xp
Y3kgPT0gR1RLX1BPTElDWV9BVVRPTUFUSUMpOwotICAgIGdfYXNzZXJ0KHZlcnRpY2FsUG9saWN5
ID09IEdUS19QT0xJQ1lfQVVUT01BVElDKTsKLQotICAgIGdfYXNzZXJ0KGhvcml6b250YWxQb2xp
Y3kgPT0gd2Via2l0X3dlYl9mcmFtZV9nZXRfaG9yaXpvbnRhbF9zY3JvbGxiYXJfcG9saWN5KG1h
aW5GcmFtZSkpOwotICAgIGdfYXNzZXJ0KHZlcnRpY2FsUG9saWN5ID09IHdlYmtpdF93ZWJfZnJh
bWVfZ2V0X3ZlcnRpY2FsX3Njcm9sbGJhcl9wb2xpY3kobWFpbkZyYW1lKSk7Ci0KLSAgICBnX29i
amVjdF91bnJlZih3ZWJWaWV3KTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2
KQotewotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLQotICAgIGdfdGVz
dF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0gICAgZ190ZXN0X2FkZF9m
dW5jKCIvd2Via2l0L3dpbmRvdy9zY3JvbGxiYXJfcG9saWN5IiwgdGVzdF93ZWJraXRfd2luZG93
X3Njcm9sbGJhcl9wb2xpY3kpOwotICAgIHJldHVybiBnX3Rlc3RfcnVuICgpOwotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CmluZGV4IGExZTc4ZmUuLjQ0OWRhNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAx
NC0wMS0wMyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAg
ICAgICAgW0dUS10gTW92ZSBhbGwgR1RLL0dPYmplY3QgdW5pdCB0ZXN0cyB0byBUb29scy9UZXN0
V2ViS2l0QVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMjYzNDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0NNYWtlTGlzdHMudHh0OiBSZW1vdmVkLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtOiBSZW1vdmVkLgor
CiAyMDE0LTAxLTAzICBKaW53b28gU29uZyAgPGppbndvbzcuc29uZ0BzYW1zdW5nLmNvbT4KIAog
ICAgICAgICBWaWJyYXRpb25QYXR0ZXJuIHNob3VsZCBhbGxvY2F0ZSBhbiBzaW5nbGUgdmVjdG9y
IGluc3RhbmNlIGZvciBzaW5nbGUgaW50ZWdlciBpbnB1dApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvQWNjZXNzaWJpbGl0eVRlc3RTZXJ2ZXIuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvQWNjZXNzaWJpbGl0eVRl
c3RTZXJ2ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTUwMDUwLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0FjY2Vzc2li
aWxpdHlUZXN0U2VydmVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQot
I2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdDIuaD4KLQotc3Rh
dGljIHZvaWQgbG9hZENoYW5nZWRDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiwgV2ViS2l0TG9hZEV2
ZW50IGxvYWRFdmVudCwgZ3BvaW50ZXIpCi17Ci0gICAgLy8gU2VuZCBhIG1lc3NhZ2UgdG8gdGhl
IHBhcmVudCBwcm9jZXNzIHdoZW4gd2UncmUgcmVhZHkuCi0gICAgaWYgKGxvYWRFdmVudCA9PSBX
RUJLSVRfTE9BRF9GSU5JU0hFRCkKLSAgICAgICAgZ19wcmludCgiT0siKTsKLX0KLQotaW50IG1h
aW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotewotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBB
VEsgYnJpZGdlIGlzIGxvYWRlZC4KLSAgICBnX3NldGVudigiR1RLX01PRFVMRVMiLCAiYXRrLWJy
aWRnZSIsIFRSVUUpOwotCi0gICAgZ3RrX2luaXQoJmFyZ2MsICZhcmd2KTsKLQotICAgIFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygp
KTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9odG1sKHdlYlZpZXcsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiPGh0bWw+IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IiAgPGJvZHk+IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgIDxoMT5UaGlzIGlz
IGEgdGVzdDwvaDE+IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgIDxwPlRoaXMg
aXMgYSBwYXJhZ3JhcGggd2l0aCBzb21lIHBsYWluIHRleHQuPC9wPiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICIgICA8cD5UaGlzIHBhcmFncmFwaCBjb250YWlucyA8YSBocmVmPVwi
aHR0cDovL3d3dy53ZWJraXRndGsub3JnXCI+YSBsaW5rPC9hPiBpbiB0aGUgbWlkZGxlLjwvcD4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICA8L2JvZHk+IgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIjwvaHRtbD4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMCk7Ci0KLSAgICBHdGtXaWRnZXQqIHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5E
T1dfVE9QTEVWRUwpOwotICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93
KSwgR1RLX1dJREdFVCh3ZWJWaWV3KSk7Ci0gICAgZ3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cp
OwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh3aW5kb3csICJkZWxldGUtZXZlbnQiLCBHX0NBTExC
QUNLKGd0a19tYWluX3F1aXQpLCAwKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJs
b2FkLWNoYW5nZWQiLCBHX0NBTExCQUNLKGxvYWRDaGFuZ2VkQ2FsbGJhY2spLCAwKTsKLQotICAg
IGd0a19tYWluKCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL0NNYWtlTGlzdHMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBi
Y2IwY2ZkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL0NNYWtlTGlzdHMudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLXNldChU
RVNUX0xJQlJBUllfRElSICR7Q01BS0VfTElCUkFSWV9PVVRQVVRfRElSRUNUT1JZfS9XZWJLaXQy
R09iamVjdEFQSVRlc3RzKQotc2V0KFRFU1RfUkVTT1VSQ0VTX0RJUiAke0NNQUtFX1JVTlRJTUVf
T1VUUFVUX0RJUkVDVE9SWX0vcmVzb3VyY2VzKQotZmlsZShNQUtFX0RJUkVDVE9SWSAke1RFU1Rf
UkVTT1VSQ0VTX0RJUn0pCi0KLWFkZF9kZWZpbml0aW9ucygKLSAgICAtRFdFQktJVF9URVNUX1BM
VUdJTl9ESVI9IiR7Q01BS0VfTElCUkFSWV9PVVRQVVRfRElSRUNUT1JZfSIKLSAgICAtRFdFQktJ
VF9FWEVDX1BBVEg9IiR7Q01BS0VfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZfSIKLSAgICAtRFdF
QktJVF9TUkNfRElSPSIke0NNQUtFX1NPVVJDRV9ESVJ9IgotICAgIC1EV0VCS0lUX1RFU1RfV0VC
X0VYVEVOU0lPTlNfRElSPSIke1RFU1RfTElCUkFSWV9ESVJ9IgotICAgIC1EV0VCS0lUX0lOSkVD
VEVEX0JVTkRMRV9QQVRIPSIke0NNQUtFX0xJQlJBUllfT1VUUFVUX0RJUkVDVE9SWX0iCi0pCi0K
LWluY2x1ZGVfZGlyZWN0b3JpZXMoCi0gICAgJHtDTUFLRV9CSU5BUllfRElSfQotICAgICR7Q01B
S0VfU09VUkNFX0RJUn0vU291cmNlCi0gICAgJHtDTUFLRV9TT1VSQ0VfRElSfS9Tb3VyY2UvV1RG
Ci0gICAgJHtERVJJVkVEX1NPVVJDRVNfRElSfQotICAgICR7REVSSVZFRF9TT1VSQ0VTX1dFQktJ
VDJHVEtfRElSfQotICAgICR7Rk9SV0FSRElOR19IRUFERVJTX0RJUn0KLSAgICAke0ZPUldBUkRJ
TkdfSEVBREVSU19XRUJLSVQyR1RLX0RJUn0KLSAgICAke0ZPUldBUkRJTkdfSEVBREVSU19XRUJL
SVQyR1RLX0VYVEVOU0lPTl9ESVJ9Ci0gICAgJHtBVFNQSV9JTkNMVURFX0RJUlN9Ci0gICAgJHtH
TElCX0lOQ0xVREVfRElSU30KLSAgICAke0dUSzNfSU5DTFVERV9ESVJTfQotICAgICR7TElCU09V
UF9JTkNMVURFX0RJUlN9Ci0pCi0KLWFkZF9saWJyYXJ5KFdlYktpdDJBUElUZXN0Q29yZSBTVEFU
SUMKLSAgICBMb2FkVHJhY2tpbmdUZXN0LmNwcAotICAgIFdlYktpdFRlc3RCdXMuY3BwCi0gICAg
V2ViS2l0VGVzdFNlcnZlci5jcHAKLSAgICBXZWJQcm9jZXNzVGVzdFJ1bm5lci5jcHAKLSAgICBU
ZXN0TWFpbi5jcHAKLSAgICBXZWJWaWV3VGVzdC5jcHAKLSkKLWFkZF9kZXBlbmRlbmNpZXMoV2Vi
S2l0MkFQSVRlc3RDb3JlIFdlYktpdDIpCi0KLWFkZF9jdXN0b21fdGFyZ2V0KHRlc3QtZ3Jlc291
cmNlLWJ1bmRsZQotICAgIERFUEVORFMgcmVzb3VyY2VzL3dlYmtpdDJndGstdGVzdHMuZ3Jlc291
cmNlLnhtbAotICAgICAgICAgICAgcmVzb3VyY2VzL2xpbmstdGl0bGUuanMKLSAgICBDT01NQU5E
IGdsaWItY29tcGlsZS1yZXNvdXJjZXMgLS10YXJnZXQ9JHtURVNUX1JFU09VUkNFU19ESVJ9L3dl
YmtpdDJndGstdGVzdHMtcmVzb3VyY2VzLmdyZXNvdXJjZSAtLXNvdXJjZWRpcj0ke0NNQUtFX1NP
VVJDRV9ESVJ9ICR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvcmVzb3VyY2VzL3dlYmtpdDJndGstdGVzdHMuZ3Jlc291cmNlLnhtbAotKQot
Ci1tYWNybyhBRERfV0syX1RFU1RfV0VCX0VYVEVOU0lPTiBleHRlbnNpb25fbmFtZSkKLSAgICBh
ZGRfbGlicmFyeSgke2V4dGVuc2lvbl9uYW1lfSBNT0RVTEUgJHtBUkdOfSkKLSAgICBzZXRfcHJv
cGVydHkoCi0gICAgICAgIFRBUkdFVCAke2V4dGVuc2lvbl9uYW1lfQotICAgICAgICBBUFBFTkQK
LSAgICAgICAgUFJPUEVSVFkgQ09NUElMRV9ERUZJTklUSU9OUyBXRUJLSVQyX0NPTVBJTEFUSU9O
Ci0gICAgKQotICAgIHNldF90YXJnZXRfcHJvcGVydGllcygke2V4dGVuc2lvbl9uYW1lfSBQUk9Q
RVJUSUVTCi0gICAgICAgIExJQlJBUllfT1VUUFVUX0RJUkVDVE9SWSAke1RFU1RfTElCUkFSWV9E
SVJ9Ci0gICAgKQotZW5kbWFjcm8oKQotCi1tYWNybyhBRERfV0syX1RFU1QgdGVzdF9uYW1lKQot
ICAgIGFkZF9leGVjdXRhYmxlKCR7dGVzdF9uYW1lfSAke0FSR059KQotICAgIGFkZF9kZXBlbmRl
bmNpZXMoJHt0ZXN0X25hbWV9Ci0gICAgICAgIHRlc3QtZ3Jlc291cmNlLWJ1bmRsZQotICAgICAg
ICBXZWJFeHRlbnNpb25UZXN0Ci0gICAgKQotICAgIHRhcmdldF9saW5rX2xpYnJhcmllcygke3Rl
c3RfbmFtZX0KLSAgICAgICAgSmF2YVNjcmlwdENvcmUKLSAgICAgICAgV2ViS2l0MgotICAgICAg
ICBXZWJLaXQyQVBJVGVzdENvcmUKLSAgICAgICAgJHtBVFNQSV9MSUJSQVJJRVN9Ci0gICAgICAg
ICR7R0xJQl9MSUJSQVJJRVN9Ci0gICAgICAgICR7R1RLM19MSUJSQVJJRVN9Ci0gICAgICAgICR7
TElCU09VUF9MSUJSQVJJRVN9Ci0gICAgKQotICAgIHNldF90YXJnZXRfcHJvcGVydGllcygke3Rl
c3RfbmFtZX0gUFJPUEVSVElFUwotICAgICAgICBSVU5USU1FX09VVFBVVF9ESVJFQ1RPUlkgJHtD
TUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUll9L1dlYktpdDJHT2JqZWN0QVBJVGVzdHMKLSAg
ICApCi1lbmRtYWNybygpCi0KLUFERF9XSzJfVEVTVF9XRUJfRVhURU5TSU9OKFdlYkV4dGVuc2lv
blRlc3QgV2ViRXh0ZW5zaW9uVGVzdC5jcHApCi1BRERfV0syX1RFU1RfV0VCX0VYVEVOU0lPTihX
ZWJQcm9jZXNzVGVzdCBET01Ob2RlVGVzdC5jcHAgRnJhbWVUZXN0LmNwcCBXZWJQcm9jZXNzVGVz
dC5jcHApCi0KLUFERF9XSzJfVEVTVChJbnNwZWN0b3JUZXN0U2VydmVyIEluc3BlY3RvclRlc3RT
ZXJ2ZXIuY3BwKQotQUREX1dLMl9URVNUKFRlc3RCYWNrRm9yd2FyZExpc3QgVGVzdEJhY2tGb3J3
YXJkTGlzdC5jcHApCi1BRERfV0syX1RFU1QoVGVzdENvbnRleHRNZW51IFRlc3RDb250ZXh0TWVu
dS5jcHApCi1BRERfV0syX1RFU1QoVGVzdENvb2tpZU1hbmFnZXIgVGVzdENvb2tpZU1hbmFnZXIu
Y3BwKQotQUREX1dLMl9URVNUKFRlc3RET01Ob2RlIFRlc3RET01Ob2RlLmNwcCkKLUFERF9XSzJf
VEVTVChUZXN0RG93bmxvYWRzIFRlc3REb3dubG9hZHMuY3BwKQotQUREX1dLMl9URVNUKFRlc3RG
cmFtZSBUZXN0RnJhbWUuY3BwKQotQUREX1dLMl9URVNUKFRlc3RJbnNwZWN0b3IgVGVzdEluc3Bl
Y3Rvci5jcHApCi1BRERfV0syX1RFU1QoVGVzdEluc3BlY3RvclNlcnZlciBUZXN0SW5zcGVjdG9y
U2VydmVyLmNwcCkKLUFERF9XSzJfVEVTVChUZXN0TG9hZGVyQ2xpZW50IFRlc3RMb2FkZXJDbGll
bnQuY3BwKQotQUREX1dLMl9URVNUKFRlc3RQcmludGluZyBUZXN0UHJpbnRpbmcuY3BwKQotQURE
X1dLMl9URVNUKFRlc3RTU0wgVGVzdFNTTC5jcHApCi1BRERfV0syX1RFU1QoVGVzdFdlYkV4dGVu
c2lvbnMgVGVzdFdlYkV4dGVuc2lvbnMuY3BwKQotQUREX1dLMl9URVNUKFRlc3RXZWJLaXRQb2xp
Y3lDbGllbnQgVGVzdFdlYktpdFBvbGljeUNsaWVudC5jcHApCi1BRERfV0syX1RFU1QoVGVzdFdl
YktpdFNldHRpbmdzIFRlc3RXZWJLaXRTZXR0aW5ncy5jcHApCi1BRERfV0syX1RFU1QoVGVzdFdl
YktpdFZlcnNpb24gVGVzdFdlYktpdFZlcnNpb24uY3BwKQotQUREX1dLMl9URVNUKFRlc3RXZWJL
aXRXZWJWaWV3R3JvdXAgVGVzdFdlYktpdFdlYlZpZXdHcm91cC5jcHApCi1BRERfV0syX1RFU1Qo
VGVzdFdlYktpdFdlYkNvbnRleHQgVGVzdFdlYktpdFdlYkNvbnRleHQuY3BwKQotQUREX1dLMl9U
RVNUKFRlc3RXZWJLaXRXZWJWaWV3IFRlc3RXZWJLaXRXZWJWaWV3LmNwcCkKLQotaWYgKEFUU1BJ
X0ZPVU5EKQotICAgIEFERF9XSzJfVEVTVChBY2Nlc3NpYmlsaXR5VGVzdFNlcnZlciBBY2Nlc3Np
YmlsaXR5VGVzdFNlcnZlci5jcHApCi0gICAgQUREX1dLMl9URVNUKFRlc3RXZWJLaXRBY2Nlc3Np
YmlsaXR5IFRlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5LmNwcCkKLWVuZGlmICgpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9ET01Ob2RlVGVzdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9ET01Ob2RlVGVzdC5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxNzU0Y2YuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvRE9NTm9kZVRlc3QuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMjE2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgSWdh
bGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiV2ViUHJvY2Vzc1Rlc3Qu
aCIKLSNpbmNsdWRlIDxnaW8vZ2lvLmg+Ci0jaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQtd2ViLWV4
dGVuc2lvbi5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KLQotY2xhc3MgV2Vi
S2l0RE9NTm9kZVRlc3QgOiBwdWJsaWMgV2ViUHJvY2Vzc1Rlc3QgewotcHVibGljOgotICAgIHN0
YXRpYyBQYXNzT3duUHRyPFdlYlByb2Nlc3NUZXN0PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0
cihuZXcgV2ViS2l0RE9NTm9kZVRlc3QoKSk7IH0KLQotcHJpdmF0ZToKLSAgICBndWludDY0IHdl
YlBhZ2VGcm9tQXJncyhHVmFyaWFudCogYXJncykKLSAgICB7Ci0gICAgICAgIEdWYXJpYW50SXRl
ciBpdGVyOwotICAgICAgICBnX3ZhcmlhbnRfaXRlcl9pbml0KCZpdGVyLCBhcmdzKTsKLQotICAg
ICAgICBjb25zdCBjaGFyKiBrZXk7Ci0gICAgICAgIEdWYXJpYW50KiB2YWx1ZTsKLSAgICAgICAg
d2hpbGUgKGdfdmFyaWFudF9pdGVyX2xvb3AoJml0ZXIsICJ7JnN2fSIsICZrZXksICZ2YWx1ZSkp
IHsKLSAgICAgICAgICAgIGlmICghc3RyY21wKGtleSwgInBhZ2VJRCIpICYmIGdfdmFyaWFudF9j
bGFzc2lmeSh2YWx1ZSkgPT0gR19WQVJJQU5UX0NMQVNTX1VJTlQ2NCkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZ192YXJpYW50X2dldF91aW50NjQodmFsdWUpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0g
ICAgYm9vbCB0ZXN0SGllcmFyY2h5TmF2aWdhdGlvbihXZWJLaXRXZWJFeHRlbnNpb24qIGV4dGVu
c2lvbiwgR1ZhcmlhbnQqIGFyZ3MpCi0gICAgewotICAgICAgICBXZWJLaXRXZWJQYWdlKiBwYWdl
ID0gd2Via2l0X3dlYl9leHRlbnNpb25fZ2V0X3BhZ2UoZXh0ZW5zaW9uLCB3ZWJQYWdlRnJvbUFy
Z3MoYXJncykpOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfV0VCX1BBR0UocGFnZSkpOwot
ICAgICAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3BhZ2VfZ2V0
X2RvbV9kb2N1bWVudChwYWdlKTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19ET0NV
TUVOVChkb2N1bWVudCkpOwotCi0gICAgICAgIFdlYktpdERPTUhUTUxIZWFkRWxlbWVudCogaGVh
ZCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2hlYWQoZG9jdW1lbnQpOwotICAgICAgICBnX2Fz
c2VydChXRUJLSVRfRE9NX0lTX0hUTUxfSEVBRF9FTEVNRU5UKGhlYWQpKTsKLQotICAgICAgICAv
LyBUaXRsZSwgaGVhZCdzIGNoaWxkLgotICAgICAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVf
aGFzX2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShoZWFkKSkpOwotICAgICAgICBHUmVmUHRy
PFdlYktpdERPTU5vZGVMaXN0PiBsaXN0ID0gYWRvcHRHUmVmKHdlYmtpdF9kb21fbm9kZV9nZXRf
Y2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGhlYWQpKSk7Ci0gICAgICAgIGdfYXNzZXJ0KFdF
QktJVF9ET01fSVNfTk9ERV9MSVNUKGxpc3QuZ2V0KCkpKTsKLSAgICAgICAgZ19hc3NlcnRfY21w
aW50KHdlYmtpdF9kb21fbm9kZV9saXN0X2dldF9sZW5ndGgobGlzdC5nZXQoKSksID09LCAxKTsK
LSAgICAgICAgV2ViS2l0RE9NTm9kZSogbm9kZSA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0o
bGlzdC5nZXQoKSwgMCk7Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9USVRM
RV9FTEVNRU5UKG5vZGUpKTsKLQotICAgICAgICAvLyBCb2R5LCBIZWFkIHNpYmxpbmcuCi0gICAg
ICAgIG5vZGUgPSB3ZWJraXRfZG9tX25vZGVfZ2V0X25leHRfc2libGluZyhXRUJLSVRfRE9NX05P
REUoaGVhZCkpOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfQk9EWV9FTEVN
RU5UKG5vZGUpKTsKLSAgICAgICAgV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50KiBib2R5ID0gV0VC
S0lUX0RPTV9IVE1MX0JPRFlfRUxFTUVOVChub2RlKTsKLQotICAgICAgICAvLyBUaGVyZSBpcyBu
byB0aGlyZCBzaWJsaW5nCi0gICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG9tX25vZGVfZ2V0X25l
eHRfc2libGluZyhub2RlKSk7Ci0KLSAgICAgICAgLy8gQm9keSdzIHByZXZpb3VzIHNpYmxpbmcg
aXMgSGVhZC4KLSAgICAgICAgbm9kZSA9IHdlYmtpdF9kb21fbm9kZV9nZXRfcHJldmlvdXNfc2li
bGluZyhXRUJLSVRfRE9NX05PREUoYm9keSkpOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9N
X0lTX0hUTUxfSEVBRF9FTEVNRU5UKG5vZGUpKTsKLQotICAgICAgICAvLyBCb2R5IGhhcyAzIGNo
aWxkcmVuLgotICAgICAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaGFzX2NoaWxkX25vZGVz
KFdFQktJVF9ET01fTk9ERShib2R5KSkpOwotICAgICAgICBsaXN0ID0gYWRvcHRHUmVmKHdlYmtp
dF9kb21fbm9kZV9nZXRfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKSk7Ci0gICAg
ICAgIHVuc2lnbmVkIGxvbmcgbGVuZ3RoID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0
aChsaXN0LmdldCgpKTsKLSAgICAgICAgZ19hc3NlcnRfY21waW50KGxlbmd0aCwgPT0sIDMpOwot
Ci0gICAgICAgIC8vIFRoZSB0aHJlZSBvZiB0aGVtIGFyZSBQIHRhZ3MuCi0gICAgICAgIGZvciAo
dW5zaWduZWQgbG9uZyBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBub2Rl
ID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0LmdldCgpLCBpKTsKLSAgICAgICAgICAg
IGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9QQVJBR1JBUEhfRUxFTUVOVChub2RlKSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLyBHbyBiYWNrd2FyZHMKLSAgICAgICAgdW5zaWduZWQgaTsK
LSAgICAgICAgZm9yIChpID0gMDsgbm9kZTsgbm9kZSA9IHdlYmtpdF9kb21fbm9kZV9nZXRfcHJl
dmlvdXNfc2libGluZyhub2RlKSwgaSsrKSB7IH0KLSAgICAgICAgZ19hc3NlcnRfY21waW50KGks
ID09LCAzKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBib29sIHRlc3RJ
bnNlcnRpb24oV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24sIEdWYXJpYW50KiBhcmdzKQot
ICAgIHsKLSAgICAgICAgV2ViS2l0V2ViUGFnZSogcGFnZSA9IHdlYmtpdF93ZWJfZXh0ZW5zaW9u
X2dldF9wYWdlKGV4dGVuc2lvbiwgd2ViUGFnZUZyb21BcmdzKGFyZ3MpKTsKLSAgICAgICAgZ19h
c3NlcnQoV0VCS0lUX0lTX1dFQl9QQUdFKHBhZ2UpKTsKLSAgICAgICAgV2ViS2l0RE9NRG9jdW1l
bnQqIGRvY3VtZW50ID0gd2Via2l0X3dlYl9wYWdlX2dldF9kb21fZG9jdW1lbnQocGFnZSk7Ci0g
ICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfRE9DVU1FTlQoZG9jdW1lbnQpKTsKLQotICAg
ICAgICBXZWJLaXRET01IVE1MRWxlbWVudCogYm9keSA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0
X2JvZHkoZG9jdW1lbnQpOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfRUxF
TUVOVChib2R5KSk7Ci0KLSAgICAgICAgLy8gQm9keSBzaG91bGRuJ3QgaGF2ZSBhbnkgY2hpbGRy
ZW4gYXQgdGhpcyBwb2ludC4KLSAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9kb21fbm9kZV9oYXNf
Y2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKSk7Ci0KLSAgICAgICAgLy8gSW5zZXJ0
IG9uZSBQIGVsZW1lbnQuCi0gICAgICAgIFdlYktpdERPTUVsZW1lbnQqIHAgPSB3ZWJraXRfZG9t
X2RvY3VtZW50X2NyZWF0ZV9lbGVtZW50KGRvY3VtZW50LCAiUCIsIDApOwotICAgICAgICBnX2Fz
c2VydChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChwKSk7Ci0gICAgICAgIHdlYmtpdF9kb21f
bm9kZV9hcHBlbmRfY2hpbGQoV0VCS0lUX0RPTV9OT0RFKGJvZHkpLCBXRUJLSVRfRE9NX05PREUo
cCksIDApOwotCi0gICAgICAgIC8vIE5vdyBpdCBzaG91bGQgaGF2ZSBvbmUsIHRoZSBzYW1lIHRo
YXQgd2UgaW5zZXJ0ZWQuCi0gICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9oYXNfY2hp
bGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKSk7Ci0gICAgICAgIEdSZWZQdHI8V2ViS2l0
RE9NTm9kZUxpc3Q+IGxpc3QgPSBhZG9wdEdSZWYod2Via2l0X2RvbV9ub2RlX2dldF9jaGlsZF9u
b2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpKTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RP
TV9JU19OT0RFX0xJU1QobGlzdC5nZXQoKSkpOwotICAgICAgICBnX2Fzc2VydF9jbXBpbnQod2Vi
a2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChsaXN0LmdldCgpKSwgPT0sIDEpOwotICAgICAg
ICBXZWJLaXRET01Ob2RlKiBub2RlID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0Lmdl
dCgpLCAwKTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0VMRU1FTlQobm9k
ZSkpOwotICAgICAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaXNfc2FtZV9ub2RlKFdFQktJ
VF9ET01fTk9ERShwKSwgbm9kZSkpOwotCi0gICAgICAgIC8vIFJlcGxhY2UgdGhlIFAgdGFnIHdp
dGggYSBESVYgdGFnLgotICAgICAgICBXZWJLaXRET01FbGVtZW50KiBkaXYgPSB3ZWJraXRfZG9t
X2RvY3VtZW50X2NyZWF0ZV9lbGVtZW50KGRvY3VtZW50LCAiRElWIiwgMCk7Ci0gICAgICAgIGdf
YXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKGRpdikpOwotICAgICAgICB3ZWJraXRf
ZG9tX25vZGVfcmVwbGFjZV9jaGlsZChXRUJLSVRfRE9NX05PREUoYm9keSksIFdFQktJVF9ET01f
Tk9ERShkaXYpLCBXRUJLSVRfRE9NX05PREUocCksIDApOwotICAgICAgICBnX2Fzc2VydCh3ZWJr
aXRfZG9tX25vZGVfaGFzX2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSkpOwotICAg
ICAgICBsaXN0ID0gYWRvcHRHUmVmKHdlYmtpdF9kb21fbm9kZV9nZXRfY2hpbGRfbm9kZXMoV0VC
S0lUX0RPTV9OT0RFKGJvZHkpKSk7Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfTk9E
RV9MSVNUKGxpc3QuZ2V0KCkpKTsKLSAgICAgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9kb21f
bm9kZV9saXN0X2dldF9sZW5ndGgobGlzdC5nZXQoKSksID09LCAxKTsKLSAgICAgICAgbm9kZSA9
IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdC5nZXQoKSwgMCk7Ci0gICAgICAgIGdfYXNz
ZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKG5vZGUpKTsKLSAgICAgICAgZ19hc3NlcnQo
d2Via2l0X2RvbV9ub2RlX2lzX3NhbWVfbm9kZShXRUJLSVRfRE9NX05PREUoZGl2KSwgbm9kZSkp
OwotCi0gICAgICAgIC8vIE5vdyByZW1vdmUgdGhlIHRhZy4KLSAgICAgICAgd2Via2l0X2RvbV9u
b2RlX3JlbW92ZV9jaGlsZChXRUJLSVRfRE9NX05PREUoYm9keSksIG5vZGUsIDApOwotICAgICAg
ICBsaXN0ID0gYWRvcHRHUmVmKHdlYmtpdF9kb21fbm9kZV9nZXRfY2hpbGRfbm9kZXMoV0VCS0lU
X0RPTV9OT0RFKGJvZHkpKSk7Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfTk9ERV9M
SVNUKGxpc3QuZ2V0KCkpKTsKLSAgICAgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9kb21fbm9k
ZV9saXN0X2dldF9sZW5ndGgobGlzdC5nZXQoKSksID09LCAwKTsKLQotICAgICAgICAvLyBUZXN0
IGluc2VydCBiZWZvcmUuIElmIHJlZkNoaWxkIGlzIG51bGwsIGluc2VydCBuZXdDaGlsZCBhcyBs
YXN0IGVsZW1lbnQgb2YgcGFyZW50LgotICAgICAgICBkaXYgPSB3ZWJraXRfZG9tX2RvY3VtZW50
X2NyZWF0ZV9lbGVtZW50KGRvY3VtZW50LCAiRElWIiwgMCk7Ci0gICAgICAgIGdfYXNzZXJ0KFdF
QktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKGRpdikpOwotICAgICAgICB3ZWJraXRfZG9tX25vZGVf
aW5zZXJ0X2JlZm9yZShXRUJLSVRfRE9NX05PREUoYm9keSksIFdFQktJVF9ET01fTk9ERShkaXYp
LCAwLCAwKTsKLSAgICAgICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2hhc19jaGlsZF9ub2Rl
cyhXRUJLSVRfRE9NX05PREUoYm9keSkpKTsKLSAgICAgICAgbGlzdCA9IGFkb3B0R1JlZih3ZWJr
aXRfZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSkpOwotICAg
ICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX05PREVfTElTVChsaXN0LmdldCgpKSk7Ci0gICAg
ICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3Qu
Z2V0KCkpLCA9PSwgMSk7Ci0gICAgICAgIG5vZGUgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVt
KGxpc3QuZ2V0KCksIDApOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfRUxF
TUVOVChub2RlKSk7Ci0gICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9pc19zYW1lX25v
ZGUoV0VCS0lUX0RPTV9OT0RFKGRpdiksIG5vZGUpKTsKLQotICAgICAgICAvLyBOb3cgaW5zZXJ0
IGEgJ3AnIGJlZm9yZSAnZGl2Jy4KLSAgICAgICAgcCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfY3Jl
YXRlX2VsZW1lbnQoZG9jdW1lbnQsICJQIiwgMCk7Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJVF9E
T01fSVNfSFRNTF9FTEVNRU5UKHApKTsKLSAgICAgICAgd2Via2l0X2RvbV9ub2RlX2luc2VydF9i
ZWZvcmUoV0VCS0lUX0RPTV9OT0RFKGJvZHkpLCBXRUJLSVRfRE9NX05PREUocCksIFdFQktJVF9E
T01fTk9ERShkaXYpLCAwKTsKLSAgICAgICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2hhc19j
aGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpKTsKLSAgICAgICAgbGlzdCA9IGFkb3B0
R1JlZih3ZWJraXRfZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5
KSkpOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX05PREVfTElTVChsaXN0LmdldCgp
KSk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVu
Z3RoKGxpc3QuZ2V0KCkpLCA9PSwgMik7Ci0gICAgICAgIG5vZGUgPSB3ZWJraXRfZG9tX25vZGVf
bGlzdF9pdGVtKGxpc3QuZ2V0KCksIDApOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lT
X0hUTUxfRUxFTUVOVChub2RlKSk7Ci0gICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9p
c19zYW1lX25vZGUoV0VCS0lUX0RPTV9OT0RFKHApLCBub2RlKSk7Ci0gICAgICAgIG5vZGUgPSB3
ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtKGxpc3QuZ2V0KCksIDEpOwotICAgICAgICBnX2Fzc2Vy
dChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChub2RlKSk7Ci0gICAgICAgIGdfYXNzZXJ0KHdl
YmtpdF9kb21fbm9kZV9pc19zYW1lX25vZGUoV0VCS0lUX0RPTV9OT0RFKGRpdiksIG5vZGUpKTsK
LQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBib29sIHRlc3RUYWdOYW1lcyhX
ZWJLaXRXZWJFeHRlbnNpb24qIGV4dGVuc2lvbiwgR1ZhcmlhbnQqIGFyZ3MpCi0gICAgewotICAg
ICAgICBzdGF0aWMgY29uc3QgY2hhciogZXhwZWN0ZWRUYWdOYW1lc1tdID0geyAiSFRNTCIsICJI
RUFEIiwgIkJPRFkiLCAiVklERU8iLCAiU09VUkNFIiwgIlZJREVPIiwgIlNPVVJDRSIsICJJTlBV
VCIgfTsKLQotICAgICAgICBXZWJLaXRXZWJQYWdlKiBwYWdlID0gd2Via2l0X3dlYl9leHRlbnNp
b25fZ2V0X3BhZ2UoZXh0ZW5zaW9uLCB3ZWJQYWdlRnJvbUFyZ3MoYXJncykpOwotICAgICAgICBn
X2Fzc2VydChXRUJLSVRfSVNfV0VCX1BBR0UocGFnZSkpOwotICAgICAgICBXZWJLaXRET01Eb2N1
bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3BhZ2VfZ2V0X2RvbV9kb2N1bWVudChwYWdlKTsK
LSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChkb2N1bWVudCkpOwotCi0g
ICAgICAgIFdlYktpdERPTU5vZGVMaXN0KiBsaXN0ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRf
ZWxlbWVudHNfYnlfdGFnX25hbWUoZG9jdW1lbnQsICIqIik7Ci0gICAgICAgIGd1bG9uZyBub2Rl
Q291bnQgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QpOwotICAgICAgICBn
X2Fzc2VydF9jbXB1aW50KG5vZGVDb3VudCwgPT0sIEdfTl9FTEVNRU5UUyhleHBlY3RlZFRhZ05h
bWVzKSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2RlQ291bnQ7IGkrKykg
ewotICAgICAgICAgICAgV2ViS2l0RE9NTm9kZSogbm9kZSA9IHdlYmtpdF9kb21fbm9kZV9saXN0
X2l0ZW0obGlzdCwgaSk7Ci0gICAgICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX05PREUo
bm9kZSkpOwotICAgICAgICAgICAgR093blB0cjxjaGFyPiB0YWdOYW1lKHdlYmtpdF9kb21fbm9k
ZV9nZXRfbm9kZV9uYW1lKG5vZGUpKTsKLSAgICAgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih0YWdO
YW1lLmdldCgpLCA9PSwgZXhwZWN0ZWRUYWdOYW1lc1tpXSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcnVuVGVzdChjb25zdCBj
aGFyKiB0ZXN0TmFtZSwgV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24sIEdWYXJpYW50KiBh
cmdzKQotICAgIHsKLSAgICAgICAgaWYgKCFzdHJjbXAodGVzdE5hbWUsICJoaWVyYXJjaHktbmF2
aWdhdGlvbiIpKQotICAgICAgICAgICAgcmV0dXJuIHRlc3RIaWVyYXJjaHlOYXZpZ2F0aW9uKGV4
dGVuc2lvbiwgYXJncyk7Ci0gICAgICAgIGlmICghc3RyY21wKHRlc3ROYW1lLCAiaW5zZXJ0aW9u
IikpCi0gICAgICAgICAgICByZXR1cm4gdGVzdEluc2VydGlvbihleHRlbnNpb24sIGFyZ3MpOwot
ICAgICAgICBpZiAoIXN0cmNtcCh0ZXN0TmFtZSwgInRhZy1uYW1lcyIpKQotICAgICAgICAgICAg
cmV0dXJuIHRlc3RUYWdOYW1lcyhleHRlbnNpb24sIGFyZ3MpOwotCi0gICAgICAgIGdfYXNzZXJ0
X25vdF9yZWFjaGVkKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19OwotCi1zdGF0
aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChjb25zdHJ1Y3RvcikpIHJlZ2lzdGVyVGVzdHMoKQotewot
ICAgIFJFR0lTVEVSX1RFU1QoV2ViS2l0RE9NTm9kZVRlc3QsICJXZWJLaXRET01Ob2RlL2hpZXJh
cmNoeS1uYXZpZ2F0aW9uIik7Ci0gICAgUkVHSVNURVJfVEVTVChXZWJLaXRET01Ob2RlVGVzdCwg
IldlYktpdERPTU5vZGUvaW5zZXJ0aW9uIik7Ci0gICAgUkVHSVNURVJfVEVTVChXZWJLaXRET01O
b2RlVGVzdCwgIldlYktpdERPTU5vZGUvdGFnLW5hbWVzIik7Ci19Ci0KLQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvRnJhbWVUZXN0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0ZyYW1lVGVzdC5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkNDg1MGYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvRnJhbWVUZXN0LmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDEwMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwu
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIldlYlByb2Nlc3NUZXN0LmgiCi0jaW5j
bHVkZSA8Z2lvL2dpby5oPgotI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0LXdlYi1leHRlbnNpb24u
aD4KLQotY2xhc3MgV2ViS2l0RnJhbWVUZXN0IDogcHVibGljIFdlYlByb2Nlc3NUZXN0IHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxXZWJQcm9jZXNzVGVzdD4gY3JlYXRlKCkgeyBy
ZXR1cm4gYWRvcHRQdHIobmV3IFdlYktpdEZyYW1lVGVzdCgpKTsgfQotCi1wcml2YXRlOgotICAg
IGd1aW50NjQgd2ViUGFnZUZyb21BcmdzKEdWYXJpYW50KiBhcmdzKQotICAgIHsKLSAgICAgICAg
R1ZhcmlhbnRJdGVyIGl0ZXI7Ci0gICAgICAgIGdfdmFyaWFudF9pdGVyX2luaXQoJml0ZXIsIGFy
Z3MpOwotCi0gICAgICAgIGNvbnN0IGNoYXIqIGtleTsKLSAgICAgICAgR1ZhcmlhbnQqIHZhbHVl
OwotICAgICAgICB3aGlsZSAoZ192YXJpYW50X2l0ZXJfbG9vcCgmaXRlciwgInsmc3Z9IiwgJmtl
eSwgJnZhbHVlKSkgewotICAgICAgICAgICAgaWYgKCFzdHJjbXAoa2V5LCAicGFnZUlEIikgJiYg
Z192YXJpYW50X2NsYXNzaWZ5KHZhbHVlKSA9PSBHX1ZBUklBTlRfQ0xBU1NfVUlOVDY0KQotICAg
ICAgICAgICAgICAgIHJldHVybiBnX3ZhcmlhbnRfZ2V0X3VpbnQ2NCh2YWx1ZSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAgICAgICByZXR1cm4gMDsK
LSAgICB9Ci0KLSAgICBib29sIHRlc3RNYWluRnJhbWUoV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRl
bnNpb24sIEdWYXJpYW50KiBhcmdzKQotICAgIHsKLSAgICAgICAgV2ViS2l0V2ViUGFnZSogcGFn
ZSA9IHdlYmtpdF93ZWJfZXh0ZW5zaW9uX2dldF9wYWdlKGV4dGVuc2lvbiwgd2ViUGFnZUZyb21B
cmdzKGFyZ3MpKTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX1dFQl9QQUdFKHBhZ2UpKTsK
LQotICAgICAgICBXZWJLaXRGcmFtZSogZnJhbWUgPSB3ZWJraXRfd2ViX3BhZ2VfZ2V0X21haW5f
ZnJhbWUocGFnZSk7Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19GUkFNRShmcmFtZSkpOwot
ICAgICAgICBnX2Fzc2VydCh3ZWJraXRfZnJhbWVfaXNfbWFpbl9mcmFtZShmcmFtZSkpOwotCi0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGJvb2wgdGVzdFVSSShXZWJLaXRXZWJF
eHRlbnNpb24qIGV4dGVuc2lvbiwgR1ZhcmlhbnQqIGFyZ3MpCi0gICAgewotICAgICAgICBXZWJL
aXRXZWJQYWdlKiBwYWdlID0gd2Via2l0X3dlYl9leHRlbnNpb25fZ2V0X3BhZ2UoZXh0ZW5zaW9u
LCB3ZWJQYWdlRnJvbUFyZ3MoYXJncykpOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfV0VC
X1BBR0UocGFnZSkpOwotCi0gICAgICAgIFdlYktpdEZyYW1lKiBmcmFtZSA9IHdlYmtpdF93ZWJf
cGFnZV9nZXRfbWFpbl9mcmFtZShwYWdlKTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX0ZS
QU1FKGZyYW1lKSk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3BhZ2VfZ2V0
X3VyaShwYWdlKSwgPT0sIHdlYmtpdF9mcmFtZV9nZXRfdXJpKGZyYW1lKSk7Ci0KLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgYm9vbCB0ZXN0SmF2YVNjcmlwdENvbnRleHQoV2Vi
S2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24sIEdWYXJpYW50KiBhcmdzKQotICAgIHsKLSAgICAg
ICAgV2ViS2l0V2ViUGFnZSogcGFnZSA9IHdlYmtpdF93ZWJfZXh0ZW5zaW9uX2dldF9wYWdlKGV4
dGVuc2lvbiwgd2ViUGFnZUZyb21BcmdzKGFyZ3MpKTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lU
X0lTX1dFQl9QQUdFKHBhZ2UpKTsKLQotICAgICAgICBXZWJLaXRGcmFtZSogZnJhbWUgPSB3ZWJr
aXRfd2ViX3BhZ2VfZ2V0X21haW5fZnJhbWUocGFnZSk7Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJ
VF9JU19GUkFNRShmcmFtZSkpOwotICAgICAgICBnX2Fzc2VydCh3ZWJraXRfZnJhbWVfZ2V0X2ph
dmFzY3JpcHRfZ2xvYmFsX2NvbnRleHQoZnJhbWUpKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcnVuVGVzdChjb25zdCBjaGFyKiB0ZXN0TmFtZSwg
V2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24sIEdWYXJpYW50KiBhcmdzKQotICAgIHsKLSAg
ICAgICAgaWYgKCFzdHJjbXAodGVzdE5hbWUsICJtYWluLWZyYW1lIikpCi0gICAgICAgICAgICBy
ZXR1cm4gdGVzdE1haW5GcmFtZShleHRlbnNpb24sIGFyZ3MpOwotICAgICAgICBpZiAoIXN0cmNt
cCh0ZXN0TmFtZSwgInVyaSIpKQotICAgICAgICAgICAgcmV0dXJuIHRlc3RVUkkoZXh0ZW5zaW9u
LCBhcmdzKTsKLSAgICAgICAgaWYgKCFzdHJjbXAodGVzdE5hbWUsICJqYXZhc2NyaXB0LWNvbnRl
eHQiKSkKLSAgICAgICAgICAgIHJldHVybiB0ZXN0SmF2YVNjcmlwdENvbnRleHQoZXh0ZW5zaW9u
LCBhcmdzKTsKLQotICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotfTsKLQotc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXygoY29uc3Ry
dWN0b3IpKSByZWdpc3RlclRlc3RzKCkKLXsKLSAgICBSRUdJU1RFUl9URVNUKFdlYktpdEZyYW1l
VGVzdCwgIldlYktpdEZyYW1lL21haW4tZnJhbWUiKTsKLSAgICBSRUdJU1RFUl9URVNUKFdlYktp
dEZyYW1lVGVzdCwgIldlYktpdEZyYW1lL3VyaSIpOwotICAgIFJFR0lTVEVSX1RFU1QoV2ViS2l0
RnJhbWVUZXN0LCAiV2ViS2l0RnJhbWUvamF2YXNjcmlwdC1jb250ZXh0Iik7Ci19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5h
bSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFt
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNWVjN2QxLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtCisrKyAv
ZGV2L251bGwKQEAgLTEsMzI2ICswLDAgQEAKLWlmIEVOQUJMRV9XRUJLSVQyCi0KLVRFU1RfUFJP
R1MgKz0gXAotCVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVzdHMvSW5zcGVjdG9yVGVzdFNl
cnZlciBcCi0JUHJvZ3JhbXMvV2ViS2l0MkdPYmplY3RBUElUZXN0cy9UZXN0QXV0aGVudGljYXRp
b24gXAotCVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdEJhY2tGb3J3YXJkTGlz
dCBcCi0JUHJvZ3JhbXMvV2ViS2l0MkdPYmplY3RBUElUZXN0cy9UZXN0Q29udGV4dE1lbnUgXAot
CVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdENvb2tpZU1hbmFnZXIgXAotCVBy
b2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdERPTU5vZGUgXAotCVByb2dyYW1zL1dl
YktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdERvd25sb2FkcyBcCi0JUHJvZ3JhbXMvV2ViS2l0MkdP
YmplY3RBUElUZXN0cy9UZXN0RnJhbWUgXAotCVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVz
dHMvVGVzdEluc3BlY3RvciBcCi0JUHJvZ3JhbXMvV2ViS2l0MkdPYmplY3RBUElUZXN0cy9UZXN0
SW5zcGVjdG9yU2VydmVyIFwKLQlQcm9ncmFtcy9XZWJLaXQyR09iamVjdEFQSVRlc3RzL1Rlc3RM
b2FkZXJDbGllbnQgXAotCVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdFByaW50
aW5nIFwKLQlQcm9ncmFtcy9XZWJLaXQyR09iamVjdEFQSVRlc3RzL1Rlc3RSZXNvdXJjZXMgXAot
CVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdFNTTCBcCi0JUHJvZ3JhbXMvV2Vi
S2l0MkdPYmplY3RBUElUZXN0cy9UZXN0VUlDbGllbnQgXAotCVByb2dyYW1zL1dlYktpdDJHT2Jq
ZWN0QVBJVGVzdHMvVGVzdFdlYkV4dGVuc2lvbnMgXAotCVByb2dyYW1zL1dlYktpdDJHT2JqZWN0
QVBJVGVzdHMvVGVzdFdlYktpdFZlcnNpb24gXAotCVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJ
VGVzdHMvVGVzdFdlYktpdEZhdmljb25EYXRhYmFzZSBcCi0JUHJvZ3JhbXMvV2ViS2l0MkdPYmpl
Y3RBUElUZXN0cy9UZXN0V2ViS2l0RmluZENvbnRyb2xsZXIgXAotCVByb2dyYW1zL1dlYktpdDJH
T2JqZWN0QVBJVGVzdHMvVGVzdFdlYktpdFBvbGljeUNsaWVudCBcCi0JUHJvZ3JhbXMvV2ViS2l0
MkdPYmplY3RBUElUZXN0cy9UZXN0V2ViS2l0U2V0dGluZ3MgXAotCVByb2dyYW1zL1dlYktpdDJH
T2JqZWN0QVBJVGVzdHMvVGVzdFdlYktpdFdlYkNvbnRleHQgXAotCVByb2dyYW1zL1dlYktpdDJH
T2JqZWN0QVBJVGVzdHMvVGVzdFdlYktpdFdlYlZpZXcgXAotCVByb2dyYW1zL1dlYktpdDJHT2Jq
ZWN0QVBJVGVzdHMvVGVzdFdlYktpdFdlYlZpZXdHcm91cCBcCi0JUHJvZ3JhbXMvV2ViS2l0MkdP
YmplY3RBUElUZXN0cy9UZXN0V2ViVmlld0VkaXRvcgotCi1ub2luc3RfUFJPR1JBTVMgKz0gJChU
RVNUX1BST0dTKQotCi1pZiBIQVZFX0FUU1BJMgotVEVTVF9QUk9HUyArPSBQcm9ncmFtcy9XZWJL
aXQyR09iamVjdEFQSVRlc3RzL1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5Ci0KLW5vaW5zdF9QUk9H
UkFNUyArPSBQcm9ncmFtcy9XZWJLaXQyR09iamVjdEFQSVRlc3RzL0FjY2Vzc2liaWxpdHlUZXN0
U2VydmVyCi1lbmRpZgotCi13ZWJraXQyX3Rlc3RzX2NwcGZsYWdzID0gXAotCS1EV0VCS0lUX0VY
RUNfUEFUSD1cIiR7c2hlbGwgcHdkfS8kKHRvcF9idWlsZGRpcikvUHJvZ3JhbXNcIiBcCi0JLURX
RUJLSVRfU1JDX0RJUj1cIiR7c2hlbGwgcHdkfS8ke3NyY2Rpcn1cIiBcCi0JLURXRUJLSVRfREVS
SVZFRF9TUkNfRElSPVwiJHtzaGVsbCBwd2R9LyR7dG9wX2J1aWxkZGlyfS9EZXJpdmVkU291cmNl
c1wiIFwKLQktRFdFQktJVF9URVNUX1BMVUdJTl9ESVI9XCIke3NoZWxsIHB3ZH0vJHt0b3BfYnVp
bGRkaXJ9L1Rlc3ROZXRzY2FwZVBsdWdpbi8ubGlic1wiIFwKLQktRFdFQktJVF9URVNUX1dFQl9F
WFRFTlNJT05TX0RJUj1cIiR7c2hlbGwgcHdkfS8ke3RvcF9idWlsZGRpcn0vTGlicmFyaWVzL1dl
YkV4dGVuc2lvbnMvLmxpYnNcIiBcCi0JLURXRUJLSVRfSU5KRUNURURfQlVORExFX1BBVEg9XCIk
e3NoZWxsIHB3ZH0vJCh0b3BfYnVpbGRkaXIpLy5saWJzXCIgXAotCSQoamF2YXNjcmlwdGNvcmVf
Y3BwZmxhZ3MpIFwKLQktSSQoc3JjZGlyKS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUgXAotCS1JJChz
cmNkaXIpL1NvdXJjZSBcCi0JLUkkKHNyY2RpcikvU291cmNlL1dlYktpdDIgXAotCS1JJCh0b3Bf
YnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvaW5jbHVkZSBcCi0JLUkkKHRvcF9idWls
ZGRpcikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi93ZWJraXQyZ3RrIFwKLQktSSQodG9wX2J1aWxk
ZGlyKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL3dlYmtpdDJndGsvaW5jbHVkZSBcCi0JLUkkKHNy
Y2RpcikvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsgXAotCSQoZ2xvYmFsX2NwcGZs
YWdzKSBcCi0JJChGUkVFVFlQRV9DRkxBR1MpIFwKLQkkKEdMSUJfQ0ZMQUdTKSBcCi0JJChHVEtf
Q0ZMQUdTKSBcCi0JJChMSUJTT1VQX0NGTEFHUykKLQotd2Via2l0Ml90ZXN0c19sZGFkZCA9IFwK
LQlMaWJyYXJpZXMvbGliV2ViS2l0MkFQSVRlc3RDb3JlLmxhIFwKLQlsaWJqYXZhc2NyaXB0Y29y
ZWd0ay1AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQC5AV0VCS0lUR1RLX0FQSV9NSU5PUl9W
RVJTSU9OQC5sYSBcCi0JbGlid2Via2l0Mmd0ay1AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9O
QC5AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQC5sYSBcCi0JJChGUkVFVFlQRV9MSUJTKSBc
Ci0JJChHRU9DTFVFX0xJQlMpIFwKLQkkKEdMSUJfTElCUykgXAotCSQoR1RLX0xJQlMpIFwKLQkk
KExJQlNPVVBfTElCUykKLQotd2Via2l0Ml90ZXN0c19sZGZsYWdzID0gXAotCS1uby1pbnN0YWxs
Ci0KLVByb2dyYW1zL3Jlc291cmNlcy93ZWJraXQyZ3RrLXRlc3RzLXJlc291cmNlcy5ncmVzb3Vy
Y2U6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL3Jlc291cmNlcy93ZWJr
aXQyZ3RrLXRlc3RzLmdyZXNvdXJjZS54bWwgJChzaGVsbCAkKEdMSUJfQ09NUElMRV9SRVNPVVJD
RVMpIC0tc291cmNlZGlyPSQoc3JjZGlyKSAtLWdlbmVyYXRlLWRlcGVuZGVuY2llcyAkKHNyY2Rp
cikvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvcmVzb3VyY2VzL3dlYmtp
dDJndGstdGVzdHMuZ3Jlc291cmNlLnhtbCkKLQkkKEFNX1ZfYXQpbWtkaXIgLXAgJHtHRU5QUk9H
UkFNU30vcmVzb3VyY2VzCi0JJChBTV9WX0dFTikgJChHTElCX0NPTVBJTEVfUkVTT1VSQ0VTKSAt
LXRhcmdldD0kQCAtLXNvdXJjZWRpcj0kKHNyY2RpcikgJDwKLQotUHJvZ3JhbXMvcmVzb3VyY2Vz
L2luc3BlY3Rvci9pbnNwZWN0b3JQYWdlSW5kZXguaHRtbDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0luc3BlY3RvclNlcnZlci9mcm9udC1lbmQvaW5zcGVjdG9yUGFnZUluZGV4Lmh0bWwKLQkk
KEFNX1ZfYXQpbWtkaXIgLXAgJHtHRU5QUk9HUkFNU30vcmVzb3VyY2VzL2luc3BlY3RvcgotCSQo
QU1fVl9HRU4pY3AgJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JT
ZXJ2ZXIvZnJvbnQtZW5kL2luc3BlY3RvclBhZ2VJbmRleC5odG1sICR7R0VOUFJPR1JBTVN9L3Jl
c291cmNlcy9pbnNwZWN0b3IKLQotRElTVENMRUFORklMRVMgKz0gXAotCVByb2dyYW1zL3Jlc291
cmNlcy93ZWJraXQyZ3RrLXRlc3RzLXJlc291cmNlcy5ncmVzb3VyY2UgXAotCVByb2dyYW1zL3Jl
c291cmNlcy9pbnNwZWN0b3IvaW5zcGVjdG9yUGFnZUluZGV4Lmh0bWwKLQotbm9pbnN0X0RBVEEg
Kz0gXAotCVByb2dyYW1zL3Jlc291cmNlcy93ZWJraXQyZ3RrLXRlc3RzLXJlc291cmNlcy5ncmVz
b3VyY2UgXAotCVByb2dyYW1zL3Jlc291cmNlcy9pbnNwZWN0b3IvaW5zcGVjdG9yUGFnZUluZGV4
Lmh0bWwKLQotbm9pbnN0X0xUTElCUkFSSUVTICs9IExpYnJhcmllcy9saWJXZWJLaXQyQVBJVGVz
dENvcmUubGEKLUxpYnJhcmllc19saWJXZWJLaXQyQVBJVGVzdENvcmVfbGFfU09VUkNFUyA9IFwK
LQlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9Mb2FkVHJhY2tpbmdUZXN0
LmNwcCBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvTG9hZFRyYWNr
aW5nVGVzdC5oIFwKLQlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJL
aXRUZXN0QnVzLmNwcCBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
V2ViS2l0VGVzdEJ1cy5oIFwKLQlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0
cy9XZWJLaXRUZXN0U2VydmVyLmNwcCBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvV2ViS2l0VGVzdFNlcnZlci5oIFwKLQlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9XZWJQcm9jZXNzVGVzdFJ1bm5lci5jcHAgXAotCVNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlByb2Nlc3NUZXN0UnVubmVyLmggXAotCVNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RNYWluLmNwcCBcCi0JU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdE1haW4uaCBcCi0JU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwIFwKLQlTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5oCi1MaWJyYXJpZXNf
bGliV2ViS2l0MkFQSVRlc3RDb3JlX2xhX0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZs
YWdzKQotCi1ub2luc3RfTFRMSUJSQVJJRVMgKz0gTGlicmFyaWVzL1dlYkV4dGVuc2lvbnMvbGli
V2ViRXh0ZW5zaW9uVGVzdC5sYQotTGlicmFyaWVzX1dlYkV4dGVuc2lvbnNfbGliV2ViRXh0ZW5z
aW9uVGVzdF9sYV9TT1VSQ0VTID0gXAotCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL1dlYkV4dGVuc2lvblRlc3QuY3BwCi0KLUxpYnJhcmllc19XZWJFeHRlbnNpb25zX2xp
YldlYkV4dGVuc2lvblRlc3RfbGFfTERGTEFHUyA9IFwKLQktcnBhdGggJHtzaGVsbCBwd2R9LyQo
dG9wX2J1aWxkZGlyKS9MaWJyYXJpZXMvV2ViRXh0ZW5zaW9ucy8ubGlicyBcCi0JJChub191bmRl
ZmluZWQpIFwKLQktYXZvaWQtdmVyc2lvbiBcCi0JLW1vZHVsZQotCi1MaWJyYXJpZXNfV2ViRXh0
ZW5zaW9uc19saWJXZWJFeHRlbnNpb25UZXN0X2xhX0NQUEZMQUdTID0gXAotCS1JJChzcmNkaXIp
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ayBcCi0JLUkk
KHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJjZXMgXAotCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2
ZWRTb3VyY2VzL1dlYktpdDIvd2Via2l0MmV4dGVuc2lvbi9pbmNsdWRlIFwKLQktRFdFQktJVDJf
Q09NUElMQVRJT04gXAotCSQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKLQotTGlicmFyaWVzX1dl
YkV4dGVuc2lvbnNfbGliV2ViRXh0ZW5zaW9uVGVzdF9sYV9DWFhGTEFHUyA9IFwKLSAgICAgICAg
JChnbG9iYWxfY3h4ZmxhZ3MpCi0KLUxpYnJhcmllc19XZWJFeHRlbnNpb25zX2xpYldlYkV4dGVu
c2lvblRlc3RfbGFfQ0ZMQUdTID0gXAotICAgICAgICAkKGdsb2JhbF9jZmxhZ3MpCi0KLQotbm9p
bnN0X0xUTElCUkFSSUVTICs9IExpYnJhcmllcy9XZWJFeHRlbnNpb25zL2xpYldlYlByb2Nlc3NU
ZXN0LmxhCi1MaWJyYXJpZXNfV2ViRXh0ZW5zaW9uc19saWJXZWJQcm9jZXNzVGVzdF9sYV9TT1VS
Q0VTID0gXAotCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0RPTU5vZGVU
ZXN0LmNwcCBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvRnJhbWVU
ZXN0LmNwcCBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViUHJv
Y2Vzc1Rlc3QuY3BwIFwKLQlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9X
ZWJQcm9jZXNzVGVzdC5oCi0KLUxpYnJhcmllc19XZWJFeHRlbnNpb25zX2xpYldlYlByb2Nlc3NU
ZXN0X2xhX0xERkxBR1MgPSBcCi0JLXJwYXRoICR7c2hlbGwgcHdkfS8kKHRvcF9idWlsZGRpcikv
TGlicmFyaWVzL1dlYkV4dGVuc2lvbnMvLmxpYnMgXAotCSQobm9fdW5kZWZpbmVkKSBcCi0JLWF2
b2lkLXZlcnNpb24gXAotCS1tb2R1bGUKLQotTGlicmFyaWVzX1dlYkV4dGVuc2lvbnNfbGliV2Vi
UHJvY2Vzc1Rlc3RfbGFfQ1BQRkxBR1MgPSBcCi0JLUkkKHNyY2RpcikvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrIFwKLQktSSQodG9wX2J1aWxkZGlyKS9E
ZXJpdmVkU291cmNlcyBcCi0JLUkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0
Mi93ZWJraXQyZXh0ZW5zaW9uL2luY2x1ZGUgXAotCS1EV0VCS0lUMl9DT01QSUxBVElPTiBcCi0J
JCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKQotCi1MaWJyYXJpZXNfV2ViRXh0ZW5zaW9uc19saWJX
ZWJQcm9jZXNzVGVzdF9sYV9DWFhGTEFHUyA9IFwKLQkkKGdsb2JhbF9jeHhmbGFncykKLQotTGli
cmFyaWVzX1dlYkV4dGVuc2lvbnNfbGliV2ViUHJvY2Vzc1Rlc3RfbGFfQ0ZMQUdTID0gXAotCSQo
Z2xvYmFsX2NmbGFncykKLQotCi1FWFRSQV9ESVNUICs9IFwKLQlTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9yZXNvdXJjZXMvdGVzdC1jZXJ0LnBlbSBcCi0JU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3Qta2V5LnBlbSBcCi0J
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvcmVzb3VyY2VzL3dlYmtpdDJn
dGstdGVzdHMuZ3Jlc291cmNlLnhtbCBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvcmVzb3VyY2VzL2xpbmstdGl0bGUuanMKLQotUHJvZ3JhbXNfV2ViS2l0MkdPYmpl
Y3RBUElUZXN0c19UZXN0V2ViS2l0V2ViQ29udGV4dF9TT1VSQ0VTID0gXAotCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJDb250ZXh0LmNwcAotUHJv
Z3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2ViS2l0V2ViQ29udGV4dF9DUFBGTEFH
UyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJ
VGVzdHNfVGVzdFdlYktpdFdlYkNvbnRleHRfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQp
Ci1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJLaXRXZWJDb250ZXh0X0xE
RkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MkdPYmpl
Y3RBUElUZXN0c19UZXN0V2ViS2l0V2ViVmlld19TT1VSQ0VTID0gXAotCVNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcAotUHJvZ3JhbXNf
V2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2ViS2l0V2ViVmlld19DUFBGTEFHUyA9ICQod2Vi
a2l0Ml90ZXN0c19jcHBmbGFncykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVz
dFdlYktpdFdlYlZpZXdfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19X
ZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJLaXRXZWJWaWV3X0xERkxBR1MgPSAkKHdlYmtp
dDJfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0
TG9hZGVyQ2xpZW50X1NPVVJDRVMgPSBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvVGVzdExvYWRlckNsaWVudC5jcHAKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJ
VGVzdHNfVGVzdExvYWRlckNsaWVudF9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFn
cykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdExvYWRlckNsaWVudF9MREFE
RCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVz
dHNfVGVzdExvYWRlckNsaWVudF9MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCi0K
LVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktpdFNldHRpbmdzX1NPVVJD
RVMgPSBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktp
dFNldHRpbmdzLmNwcAotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2ViS2l0
U2V0dGluZ3NfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MpCi1Qcm9ncmFtc19X
ZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJLaXRTZXR0aW5nc19MREFERCA9ICQod2Via2l0
Ml90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktp
dFNldHRpbmdzX0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNf
V2ViS2l0MkdPYmplY3RBUElUZXN0c19JbnNwZWN0b3JUZXN0U2VydmVyX1NPVVJDRVMgPSBcCi0J
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvSW5zcGVjdG9yVGVzdFNlcnZl
ci5jcHAKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfSW5zcGVjdG9yVGVzdFNlcnZl
cl9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKLVByb2dyYW1zX1dlYktpdDJH
T2JqZWN0QVBJVGVzdHNfSW5zcGVjdG9yVGVzdFNlcnZlcl9MREFERCA9ICQod2Via2l0Ml90ZXN0
c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfSW5zcGVjdG9yVGVzdFNl
cnZlcl9MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktp
dDJHT2JqZWN0QVBJVGVzdHNfVGVzdEJhY2tGb3J3YXJkTGlzdF9TT1VSQ0VTID0gXAotICAgICAg
ICBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0QmFja0ZvcndhcmRM
aXN0LmNwcAotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0QmFja0ZvcndhcmRM
aXN0X0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0
MkdPYmplY3RBUElUZXN0c19UZXN0QmFja0ZvcndhcmRMaXN0X0xEQUREID0gJCh3ZWJraXQyX3Rl
c3RzX2xkYWRkKQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0QmFja0Zvcndh
cmRMaXN0X0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2Vi
S2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2ViS2l0UG9saWN5Q2xpZW50X1NPVVJDRVMgPSBcCi0g
ICAgICAgIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRQ
b2xpY3lDbGllbnQuY3BwCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJL
aXRQb2xpY3lDbGllbnRfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MpCi1Qcm9n
cmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJLaXRQb2xpY3lDbGllbnRfTERBREQg
PSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3Rz
X1Rlc3RXZWJLaXRQb2xpY3lDbGllbnRfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdz
KQotCi1pZiBIQVZFX0FUU1BJMgotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19BY2Nl
c3NpYmlsaXR5VGVzdFNlcnZlcl9TT1VSQ0VTID0gXAotCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyLmNwcAotUHJvZ3JhbXNfV2Vi
S2l0MkdPYmplY3RBUElUZXN0c19BY2Nlc3NpYmlsaXR5VGVzdFNlcnZlcl9DUFBGTEFHUyA9ICQo
d2Via2l0Ml90ZXN0c19jcHBmbGFncykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNf
QWNjZXNzaWJpbGl0eVRlc3RTZXJ2ZXJfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCi1Q
cm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyX0xE
RkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MkdPYmpl
Y3RBUElUZXN0c19UZXN0V2ViS2l0QWNjZXNzaWJpbGl0eV9TT1VSQ0VTID0gXAotCVNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5LmNw
cAotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2ViS2l0QWNjZXNzaWJpbGl0
eV9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykgJChBVFNQSTJfQ0ZMQUdTKQot
UHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2ViS2l0QWNjZXNzaWJpbGl0eV9M
REFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkgJChBVFNQSTJfTElCUykKLVByb2dyYW1zX1dl
YktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktpdEFjY2Vzc2liaWxpdHlfTERGTEFHUyA9ICQo
d2Via2l0Ml90ZXN0c19sZGZsYWdzKQotZW5kaWYKLQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RB
UElUZXN0c19UZXN0RG93bmxvYWRzX1NPVVJDRVMgPSBcCi0gICAgICAgIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3REb3dubG9hZHMuY3BwCi1Qcm9ncmFtc19XZWJL
aXQyR09iamVjdEFQSVRlc3RzX1Rlc3REb3dubG9hZHNfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVz
dHNfY3BwZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3REb3dubG9h
ZHNfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVj
dEFQSVRlc3RzX1Rlc3REb3dubG9hZHNfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdz
KQotCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJWaWV3RWRpdG9yX1NP
VVJDRVMgPSBcCi0gICAgICAgIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L1Rlc3RXZWJWaWV3RWRpdG9yLmNwcAotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19U
ZXN0V2ViVmlld0VkaXRvcl9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKLVBy
b2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYlZpZXdFZGl0b3JfTERBREQgPSAk
KHdlYmtpdDJfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rl
c3RXZWJWaWV3RWRpdG9yX0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKLQotUHJv
Z3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0UHJpbnRpbmdfU09VUkNFUyA9IFwKLSAg
ICAgICAgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFByaW50aW5n
LmNwcAotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0UHJpbnRpbmdfQ1BQRkxB
R1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MpICQoR1RLX1VOSVhfUFJJTlRJTkdfQ0ZMQUdT
KQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0UHJpbnRpbmdfTERBREQgPSAk
KHdlYmtpdDJfdGVzdHNfbGRhZGQpICQoR1RLX1VOSVhfUFJJTlRJTkdfTElCUykKLVByb2dyYW1z
X1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFByaW50aW5nX0xERkxBR1MgPSAkKHdlYmtpdDJf
dGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2Vi
S2l0RmF2aWNvbkRhdGFiYXNlX1NPVVJDRVMgPSBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdEZhdmljb25EYXRhYmFzZS5jcHAKLVByb2dyYW1zX1dl
YktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktpdEZhdmljb25EYXRhYmFzZV9DUFBGTEFHUyA9
ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVz
dHNfVGVzdFdlYktpdEZhdmljb25EYXRhYmFzZV9MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFk
ZCkKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktpdEZhdmljb25EYXRh
YmFzZV9MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktp
dDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktpdEZpbmRDb250cm9sbGVyX1NPVVJDRVMgPSBcCi0J
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdEZpbmRDb250
cm9sbGVyLmNwcAotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2ViS2l0Rmlu
ZENvbnRyb2xsZXJfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MpCi1Qcm9ncmFt
c19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxlcl9MREFERCA9
ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNf
VGVzdFdlYktpdEZpbmRDb250cm9sbGVyX0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFn
cykKLQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0UmVzb3VyY2VzX1NPVVJD
RVMgPSBcCi0gICAgICAgIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rl
c3RSZXNvdXJjZXMuY3BwCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RSZXNv
dXJjZXNfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MpCi1Qcm9ncmFtc19XZWJL
aXQyR09iamVjdEFQSVRlc3RzX1Rlc3RSZXNvdXJjZXNfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNf
bGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RSZXNvdXJjZXNfTERG
TEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQyR09iamVj
dEFQSVRlc3RzX1Rlc3RDb29raWVNYW5hZ2VyX1NPVVJDRVMgPSBcCi0gICAgICAgIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RDb29raWVNYW5hZ2VyLmNwcAotUHJv
Z3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0Q29va2llTWFuYWdlcl9DUFBGTEFHUyA9
ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVz
dHNfVGVzdENvb2tpZU1hbmFnZXJfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCi1Qcm9n
cmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RDb29raWVNYW5hZ2VyX0xERkxBR1MgPSAk
KHdlYmtpdDJfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0
c19UZXN0SW5zcGVjdG9yX1NPVVJDRVMgPSBcCi0gICAgICAgIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RJbnNwZWN0b3IuY3BwCi1Qcm9ncmFtc19XZWJLaXQyR09i
amVjdEFQSVRlc3RzX1Rlc3RJbnNwZWN0b3JfQ1BQRkxBR1MgPSBcCi0JJCh3ZWJraXQyX3Rlc3Rz
X2NwcGZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0SW5zcGVjdG9y
X0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RB
UElUZXN0c19UZXN0SW5zcGVjdG9yX0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykK
LQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0SW5zcGVjdG9yU2VydmVyX1NP
VVJDRVMgPSBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdElu
c3BlY3RvclNlcnZlci5jcHAKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdElu
c3BlY3RvclNlcnZlcl9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKLVByb2dy
YW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdEluc3BlY3RvclNlcnZlcl9MREFERCA9ICQo
d2Via2l0Ml90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVz
dEluc3BlY3RvclNlcnZlcl9MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCi0KLVBy
b2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktpdFZlcnNpb25fU09VUkNFUyA9
IFwKLSAgICAgICAgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdl
YktpdFZlcnNpb24uY3BwCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJL
aXRWZXJzaW9uX0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKQotUHJvZ3JhbXNf
V2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2ViS2l0VmVyc2lvbl9MREFERCA9ICQod2Via2l0
Ml90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktp
dFZlcnNpb25fTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19X
ZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RDb250ZXh0TWVudV9TT1VSQ0VTID0gXAotICAgICAg
ICBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0Q29udGV4dE1lbnUu
Y3BwCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RDb250ZXh0TWVudV9DUFBG
TEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0
QVBJVGVzdHNfVGVzdENvbnRleHRNZW51X0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQot
UHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0Q29udGV4dE1lbnVfTERGTEFHUyA9
ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRl
c3RzX1Rlc3RTU0xfU09VUkNFUyA9IFwKLSAgICAgICAgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvVGVzdFNTTC5jcHAKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVz
dHNfVGVzdFNTTF9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKLVByb2dyYW1z
X1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFNTTF9MREFERCA9ICQod2Via2l0Ml90ZXN0c19s
ZGFkZCkKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFNTTF9MREZMQUdTID0g
JCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVz
dHNfVGVzdFdlYkV4dGVuc2lvbnNfU09VUkNFUyA9IFwKLSAgICAgICAgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYkV4dGVuc2lvbnMuY3BwCi1Qcm9ncmFtc19X
ZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJFeHRlbnNpb25zX0NQUEZMQUdTID0gJCh3ZWJr
aXQyX3Rlc3RzX2NwcGZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0
V2ViRXh0ZW5zaW9uc19MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dl
YktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYkV4dGVuc2lvbnNfTERGTEFHUyA9ICQod2Via2l0
Ml90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RX
ZWJLaXRXZWJWaWV3R3JvdXBfU09VUkNFUyA9IFwKLSAgICAgICAgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXdHcm91cC5jcHAKLVByb2dyYW1z
X1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktpdFdlYlZpZXdHcm91cF9DUFBGTEFHUyA9
ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVz
dHNfVGVzdFdlYktpdFdlYlZpZXdHcm91cF9MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkK
LVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktpdFdlYlZpZXdHcm91cF9M
REZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDJHT2Jq
ZWN0QVBJVGVzdHNfVGVzdERPTU5vZGVfU09VUkNFUyA9IFwKLSAgICAgICAgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdERPTU5vZGUuY3BwCi1Qcm9ncmFtc19XZWJL
aXQyR09iamVjdEFQSVRlc3RzX1Rlc3RET01Ob2RlX0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3Rz
X2NwcGZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0RE9NTm9kZV9M
REFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJ
VGVzdHNfVGVzdERPTU5vZGVfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQotCi1Q
cm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RGcmFtZV9TT1VSQ0VTID0gXAotICAg
ICAgICBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0RnJhbWUuY3Bw
Ci1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RGcmFtZV9DUFBGTEFHUyA9ICQo
d2Via2l0Ml90ZXN0c19jcHBmbGFncykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNf
VGVzdEZyYW1lX0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfV2ViS2l0
MkdPYmplY3RBUElUZXN0c19UZXN0RnJhbWVfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZs
YWdzKQotCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RBdXRoZW50aWNhdGlv
bl9TT1VSQ0VTID0gXAotICAgICAgICBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9UZXN0QXV0aGVudGljYXRpb24uY3BwCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRl
c3RzX1Rlc3RBdXRoZW50aWNhdGlvbl9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFn
cykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdEF1dGhlbnRpY2F0aW9uX0xE
QUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElU
ZXN0c19UZXN0QXV0aGVudGljYXRpb25fTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdz
KQotCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RVSUNsaWVudF9TT1VSQ0VT
ID0gXAotICAgICAgICBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0
VUlDbGllbnQuY3BwCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RVSUNsaWVu
dF9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKLVByb2dyYW1zX1dlYktpdDJH
T2JqZWN0QVBJVGVzdHNfVGVzdFVJQ2xpZW50X0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRk
KQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0VUlDbGllbnRfTERGTEFHUyA9
ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQotCi1lbmRpZiAjIEVOQUJMRV9XRUJLSVQyCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9JbnNwZWN0b3JU
ZXN0U2VydmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0lu
c3BlY3RvclRlc3RTZXJ2ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTNi
MDQzLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L0luc3BlY3RvclRlc3RTZXJ2ZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzIEx0ZC4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECi0g
KiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUgotICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0j
aW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgotCi1zdGF0
aWMgdm9pZCBsb2FkQ2hhbmdlZENhbGxiYWNrKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRMb2FkRXZl
bnQgbG9hZEV2ZW50LCBncG9pbnRlcikKLXsKLSAgICAvLyBTZW5kIGEgbWVzc2FnZSB0byB0aGUg
cGFyZW50IHByb2Nlc3Mgd2hlbiB3ZSdyZSByZWFkeS4KLSAgICBpZiAobG9hZEV2ZW50ID09IFdF
QktJVF9MT0FEX0ZJTklTSEVEKQotICAgICAgICBnX3ByaW50KCJPSyIpOwotfQotCi1pbnQgbWFp
bihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCi17Ci0gICAgZ3RrX2luaXQoJmFyZ2MsICZhcmd2KTsK
LQotICAgIC8vIE92ZXJ3cml0ZSBXRUJLSVRfSU5TUEVDVE9SX1NFUlZFUiB2YXJpYWJsZSB3aXRo
IGRlZmF1bHQgdmFsdWUuCi0gICAgZ19zZXRlbnYoIldFQktJVF9JTlNQRUNUT1JfU0VSVkVSIiwg
IjEyNy4wLjAuMToyOTk5IiwgVFJVRSk7Ci0KLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0g
V0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgd2Via2l0X3NldHRp
bmdzX3NldF9lbmFibGVfZGV2ZWxvcGVyX2V4dHJhcyh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRp
bmdzKHdlYlZpZXcpLCBUUlVFKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9odG1sKHdlYlZp
ZXcsCi0gICAgICAgICI8aHRtbD48Ym9keT48cD5XZWJLaXRHVEsrIEluc3BlY3RvciBUZXN0IFNl
cnZlcjwvcD48L2JvZHk+PC9odG1sPiIsCi0gICAgICAgICJodHRwOi8vMTI3LjAuMC4xOjI5OTkv
Iik7Ci0KLSAgICBHdGtXaWRnZXQqIHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1df
VE9QTEVWRUwpOwotICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwg
R1RLX1dJREdFVCh3ZWJWaWV3KSk7Ci0gICAgZ3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpOwot
Ci0gICAgZ19zaWduYWxfY29ubmVjdCh3aW5kb3csICJkZWxldGUtZXZlbnQiLCBHX0NBTExCQUNL
KGd0a19tYWluX3F1aXQpLCAwKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJsb2Fk
LWNoYW5nZWQiLCBHX0NBTExCQUNLKGxvYWRDaGFuZ2VkQ2FsbGJhY2spLCAwKTsKLQotICAgIGd0
a19tYWluKCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9Mb2FkVHJhY2tpbmdUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL0xvYWRUcmFja2luZ1Rlc3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBkZjM0MjA0Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL0xvYWRUcmFja2luZ1Rlc3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjA3
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkxvYWRUcmFja2luZ1Rlc3QuaCIKLQotI2luY2x1ZGUgPHdl
YmtpdDIvd2Via2l0Mi5oPgotCi1zdGF0aWMgdm9pZCBsb2FkQ2hhbmdlZENhbGxiYWNrKFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdExvYWRFdmVudCBsb2FkRXZlbnQsIExvYWRUcmFja2lu
Z1Rlc3QqIHRlc3QpCi17Ci0gICAgc3dpdGNoIChsb2FkRXZlbnQpIHsKLSAgICBjYXNlIFdFQktJ
VF9MT0FEX1NUQVJURUQ6Ci0gICAgICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19pc19sb2Fk
aW5nKHdlYlZpZXcpKTsKLSAgICAgICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPm1fYWN0aXZlVVJJ
LmRhdGEoKSwgPT0sIHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKHdlYlZpZXcpKTsKLSAgICAgICAg
dGVzdC0+cHJvdmlzaW9uYWxMb2FkU3RhcnRlZCgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IFdFQktJVF9MT0FEX1JFRElSRUNURUQ6Ci0gICAgICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmll
d19pc19sb2FkaW5nKHdlYlZpZXcpKTsKLSAgICAgICAgdGVzdC0+bV9hY3RpdmVVUkkgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X3VyaSh3ZWJWaWV3KTsKLSAgICAgICAgaWYgKCF0ZXN0LT5tX3JlZGly
ZWN0VVJJLmlzTnVsbCgpKQotICAgICAgICAgICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPm1fcmVk
aXJlY3RVUkkuZGF0YSgpLCA9PSwgdGVzdC0+bV9hY3RpdmVVUkkuZGF0YSgpKTsKLSAgICAgICAg
dGVzdC0+cHJvdmlzaW9uYWxMb2FkUmVjZWl2ZWRTZXJ2ZXJSZWRpcmVjdCgpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFdFQktJVF9MT0FEX0NPTU1JVFRFRDogewotICAgICAgICBnX2Fzc2Vy
dCh3ZWJraXRfd2ViX3ZpZXdfaXNfbG9hZGluZyh3ZWJWaWV3KSk7Ci0gICAgICAgIGdfYXNzZXJ0
X2NtcHN0cih0ZXN0LT5tX2FjdGl2ZVVSSS5kYXRhKCksID09LCB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X3VyaSh3ZWJWaWV3KSk7Ci0KLSAgICAgICAgLy8gQ2hlY2sgdGhhdCBvbiBjb21taXR0ZWQgd2Ug
YWx3YXlzIGhhdmUgYSBtYWluIHJlc291cmNlIHdpdGggYSByZXNwb25zZS4KLSAgICAgICAgV2Vi
S2l0V2ViUmVzb3VyY2UqIHJlc291cmNlID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX3Jlc291
cmNlKHdlYlZpZXcpOwotICAgICAgICBnX2Fzc2VydChyZXNvdXJjZSk7Ci0gICAgICAgIGdfYXNz
ZXJ0KHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3Jlc3BvbnNlKHJlc291cmNlKSk7Ci0KLSAgICAg
ICAgdGVzdC0+bG9hZENvbW1pdHRlZCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2Fz
ZSBXRUJLSVRfTE9BRF9GSU5JU0hFRDoKLSAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmll
d19pc19sb2FkaW5nKHdlYlZpZXcpKTsKLSAgICAgICAgaWYgKCF0ZXN0LT5tX2xvYWRGYWlsZWQp
Ci0gICAgICAgICAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9hY3RpdmVVUkkuZGF0YSgpLCA9
PSwgd2Via2l0X3dlYl92aWV3X2dldF91cmkod2ViVmlldykpOwotICAgICAgICB0ZXN0LT5sb2Fk
RmluaXNoZWQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgZ19hc3Nl
cnRfbm90X3JlYWNoZWQoKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGxvYWRGYWlsZWRDYWxs
YmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRMb2FkRXZlbnQgbG9hZEV2ZW50LCBj
b25zdCBjaGFyKiBmYWlsaW5nVVJJLCBHRXJyb3IqIGVycm9yLCBMb2FkVHJhY2tpbmdUZXN0KiB0
ZXN0KQotewotICAgIHRlc3QtPm1fbG9hZEZhaWxlZCA9IHRydWU7Ci0gICAgdGVzdC0+bV9lcnJv
ci5zZXQoZ19lcnJvcl9jb3B5KGVycm9yKSk7Ci0KLSAgICBzd2l0Y2ggKGxvYWRFdmVudCkgewot
ICAgIGNhc2UgV0VCS0lUX0xPQURfU1RBUlRFRDoKLSAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF93
ZWJfdmlld19pc19sb2FkaW5nKHdlYlZpZXcpKTsKLSAgICAgICAgZ19hc3NlcnRfY21wc3RyKHRl
c3QtPm1fYWN0aXZlVVJJLmRhdGEoKSwgPT0sIHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKHdlYlZp
ZXcpKTsKLSAgICAgICAgZ19hc3NlcnQoZXJyb3IpOwotICAgICAgICB0ZXN0LT5wcm92aXNpb25h
bExvYWRGYWlsZWQoZmFpbGluZ1VSSSwgZXJyb3IpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IFdFQktJVF9MT0FEX0NPTU1JVFRFRDoKLSAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmll
d19pc19sb2FkaW5nKHdlYlZpZXcpKTsKLSAgICAgICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPm1f
YWN0aXZlVVJJLmRhdGEoKSwgPT0sIHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKHdlYlZpZXcpKTsK
LSAgICAgICAgZ19hc3NlcnQoZXJyb3IpOwotICAgICAgICB0ZXN0LT5sb2FkRmFpbGVkKGZhaWxp
bmdVUkksIGVycm9yKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgZ19h
c3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGVzdGltYXRlZFBy
b2dyZXNzQ2hhbmdlZENhbGxiYWNrKEdPYmplY3QqLCBHUGFyYW1TcGVjKiwgTG9hZFRyYWNraW5n
VGVzdCogdGVzdCkKLXsKLSAgICB0ZXN0LT5lc3RpbWF0ZWRQcm9ncmVzc0NoYW5nZWQoKTsKLX0K
LQotTG9hZFRyYWNraW5nVGVzdDo6TG9hZFRyYWNraW5nVGVzdCgpCi0gICAgOiBtX3J1bkxvYWRV
bnRpbENvbXBsZXRpb24oZmFsc2UpCi0gICAgLCBtX2xvYWRGYWlsZWQoZmFsc2UpCi17Ci0gICAg
Z19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJsb2FkLWNoYW5nZWQiLCBHX0NBTExCQUNLKGxv
YWRDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmll
dywgImxvYWQtZmFpbGVkIiwgR19DQUxMQkFDSyhsb2FkRmFpbGVkQ2FsbGJhY2spLCB0aGlzKTsK
LSAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgIm5vdGlmeTo6ZXN0aW1hdGVkLWxvYWQt
cHJvZ3Jlc3MiLCBHX0NBTExCQUNLKGVzdGltYXRlZFByb2dyZXNzQ2hhbmdlZENhbGxiYWNrKSwg
dGhpcyk7Ci0KLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2dldF91cmkobV93ZWJWaWV3
KSk7Ci19Ci0KLUxvYWRUcmFja2luZ1Rlc3Q6On5Mb2FkVHJhY2tpbmdUZXN0KCkKLXsKLSAgICBn
X3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV93ZWJWaWV3LCBHX1NJR05BTF9N
QVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKLX0KLQotdm9pZCBMb2FkVHJhY2tpbmdUZXN0
Ojp3YWl0VW50aWxMb2FkRmluaXNoZWQoKQotewotICAgIG1fZXN0aW1hdGVkUHJvZ3Jlc3MgPSAw
OwotICAgIG1fcnVuTG9hZFVudGlsQ29tcGxldGlvbiA9IHRydWU7Ci0gICAgZ19tYWluX2xvb3Bf
cnVuKG1fbWFpbkxvb3ApOwotfQotCi12b2lkIExvYWRUcmFja2luZ1Rlc3Q6OnByb3Zpc2lvbmFs
TG9hZFN0YXJ0ZWQoKQotewotICAgIG1fbG9hZEV2ZW50cy5hcHBlbmQoUHJvdmlzaW9uYWxMb2Fk
U3RhcnRlZCk7Ci19Ci0KLXZvaWQgTG9hZFRyYWNraW5nVGVzdDo6cHJvdmlzaW9uYWxMb2FkUmVj
ZWl2ZWRTZXJ2ZXJSZWRpcmVjdCgpCi17Ci0gICAgbV9sb2FkRXZlbnRzLmFwcGVuZChQcm92aXNp
b25hbExvYWRSZWNlaXZlZFNlcnZlclJlZGlyZWN0KTsKLX0KLQotdm9pZCBMb2FkVHJhY2tpbmdU
ZXN0Ojpwcm92aXNpb25hbExvYWRGYWlsZWQoY29uc3QgZ2NoYXIqIGZhaWxpbmdVUkksIEdFcnJv
ciogZXJyb3IpCi17Ci0gICAgbV9sb2FkRXZlbnRzLmFwcGVuZChQcm92aXNpb25hbExvYWRGYWls
ZWQpOwotfQotCi12b2lkIExvYWRUcmFja2luZ1Rlc3Q6OmxvYWRDb21taXR0ZWQoKQotewotICAg
IG1fbG9hZEV2ZW50cy5hcHBlbmQoTG9hZENvbW1pdHRlZCk7Ci19Ci0KLXZvaWQgTG9hZFRyYWNr
aW5nVGVzdDo6bG9hZEZpbmlzaGVkKCkKLXsKLSAgICBtX2xvYWRFdmVudHMuYXBwZW5kKExvYWRG
aW5pc2hlZCk7Ci0gICAgaWYgKG1fcnVuTG9hZFVudGlsQ29tcGxldGlvbikKLSAgICAgICAgZ19t
YWluX2xvb3BfcXVpdChtX21haW5Mb29wKTsKLX0KLQotdm9pZCBMb2FkVHJhY2tpbmdUZXN0Ojps
b2FkRmFpbGVkKGNvbnN0IGdjaGFyKiBmYWlsaW5nVVJJLCBHRXJyb3IqIGVycm9yKQotewotICAg
IG1fbG9hZEV2ZW50cy5hcHBlbmQoTG9hZEZhaWxlZCk7Ci19Ci0KLXZvaWQgTG9hZFRyYWNraW5n
VGVzdDo6ZXN0aW1hdGVkUHJvZ3Jlc3NDaGFuZ2VkKCkKLXsKLSAgICBkb3VibGUgcHJvZ3Jlc3Mg
PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2VzdGltYXRlZF9sb2FkX3Byb2dyZXNzKG1fd2ViVmlldyk7
Ci0gICAgZ19hc3NlcnRfY21wZmxvYXQobV9lc3RpbWF0ZWRQcm9ncmVzcywgPCwgcHJvZ3Jlc3Mp
OwotICAgIG1fZXN0aW1hdGVkUHJvZ3Jlc3MgPSBwcm9ncmVzczsKLX0KLQotdm9pZCBMb2FkVHJh
Y2tpbmdUZXN0Ojpsb2FkVVJJKGNvbnN0IGNoYXIqIHVyaSkKLXsKLSAgICBtX2xvYWRFdmVudHMu
Y2xlYXIoKTsKLSAgICBtX2VzdGltYXRlZFByb2dyZXNzID0gMDsKLSAgICBtX2Vycm9yLmNsZWFy
KCk7Ci0gICAgV2ViVmlld1Rlc3Q6OmxvYWRVUkkodXJpKTsKLX0KLQotdm9pZCBMb2FkVHJhY2tp
bmdUZXN0Ojpsb2FkSHRtbChjb25zdCBjaGFyKiBodG1sLCBjb25zdCBjaGFyKiBiYXNlVVJJKQot
ewotICAgIG1fbG9hZEV2ZW50cy5jbGVhcigpOwotICAgIG1fZXN0aW1hdGVkUHJvZ3Jlc3MgPSAw
OwotICAgIG1fZXJyb3IuY2xlYXIoKTsKLSAgICBXZWJWaWV3VGVzdDo6bG9hZEh0bWwoaHRtbCwg
YmFzZVVSSSk7Ci19Ci0KLXZvaWQgTG9hZFRyYWNraW5nVGVzdDo6bG9hZFBsYWluVGV4dChjb25z
dCBjaGFyKiBwbGFpblRleHQpCi17Ci0gICAgbV9sb2FkRXZlbnRzLmNsZWFyKCk7Ci0gICAgbV9l
c3RpbWF0ZWRQcm9ncmVzcyA9IDA7Ci0gICAgbV9lcnJvci5jbGVhcigpOwotICAgIFdlYlZpZXdU
ZXN0Ojpsb2FkUGxhaW5UZXh0KHBsYWluVGV4dCk7Ci19Ci0KLXZvaWQgTG9hZFRyYWNraW5nVGVz
dDo6bG9hZFJlcXVlc3QoV2ViS2l0VVJJUmVxdWVzdCogcmVxdWVzdCkKLXsKLSAgICBtX2xvYWRF
dmVudHMuY2xlYXIoKTsKLSAgICBtX2VzdGltYXRlZFByb2dyZXNzID0gMDsKLSAgICBtX2Vycm9y
LmNsZWFyKCk7Ci0gICAgV2ViVmlld1Rlc3Q6OmxvYWRSZXF1ZXN0KHJlcXVlc3QpOwotfQotCi12
b2lkIExvYWRUcmFja2luZ1Rlc3Q6OnJlbG9hZCgpCi17Ci0gICAgbV9sb2FkRXZlbnRzLmNsZWFy
KCk7Ci0gICAgbV9lc3RpbWF0ZWRQcm9ncmVzcyA9IDA7Ci0gICAgbV9lcnJvci5jbGVhcigpOwot
ICAgIHdlYmtpdF93ZWJfdmlld19yZWxvYWQobV93ZWJWaWV3KTsKLX0KLQotdm9pZCBMb2FkVHJh
Y2tpbmdUZXN0Ojpnb0JhY2soKQotewotICAgIG1fbG9hZEV2ZW50cy5jbGVhcigpOwotICAgIG1f
ZXN0aW1hdGVkUHJvZ3Jlc3MgPSAwOwotICAgIG1fZXJyb3IuY2xlYXIoKTsKLSAgICBXZWJWaWV3
VGVzdDo6Z29CYWNrKCk7Ci19Ci0KLXZvaWQgTG9hZFRyYWNraW5nVGVzdDo6Z29Gb3J3YXJkKCkK
LXsKLSAgICBtX2xvYWRFdmVudHMuY2xlYXIoKTsKLSAgICBtX2VzdGltYXRlZFByb2dyZXNzID0g
MDsKLSAgICBtX2Vycm9yLmNsZWFyKCk7Ci0gICAgV2ViVmlld1Rlc3Q6OmdvRm9yd2FyZCgpOwot
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvTG9h
ZFRyYWNraW5nVGVzdC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
TG9hZFRyYWNraW5nVGVzdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2NmNzg0
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0xv
YWRUcmFja2luZ1Rlc3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBMb2FkVHJhY2tpbmdUZXN0X2gK
LSNkZWZpbmUgTG9hZFRyYWNraW5nVGVzdF9oCi0KLSNpbmNsdWRlICJUZXN0TWFpbi5oIgotI2lu
Y2x1ZGUgIldlYlZpZXdUZXN0LmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1jbGFzcyBM
b2FkVHJhY2tpbmdUZXN0IDogcHVibGljIFdlYlZpZXdUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtF
X0dMSUJfVEVTVF9GSVhUVVJFKExvYWRUcmFja2luZ1Rlc3QpOwotICAgIExvYWRUcmFja2luZ1Rl
c3QoKTsKLSAgICB2aXJ0dWFsIH5Mb2FkVHJhY2tpbmdUZXN0KCk7Ci0gICAgdm9pZCB3YWl0VW50
aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBwcm92aXNpb25hbExvYWRTdGFy
dGVkKCk7Ci0gICAgdmlydHVhbCB2b2lkIHByb3Zpc2lvbmFsTG9hZFJlY2VpdmVkU2VydmVyUmVk
aXJlY3QoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcHJvdmlzaW9uYWxMb2FkRmFpbGVkKGNvbnN0IGdj
aGFyKiBmYWlsaW5nVVJJLCBHRXJyb3IqKTsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZENvbW1pdHRl
ZCgpOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkRmluaXNoZWQoKTsKLSAgICB2aXJ0dWFsIHZvaWQg
bG9hZEZhaWxlZChjb25zdCBjaGFyKiBmYWlsaW5nVVJJLCBHRXJyb3IqKTsKLSAgICB2aXJ0dWFs
IHZvaWQgZXN0aW1hdGVkUHJvZ3Jlc3NDaGFuZ2VkKCk7Ci0KLSAgICB2b2lkIGxvYWRVUkkoY29u
c3QgY2hhciogdXJpKTsKLSAgICB2b2lkIGxvYWRIdG1sKGNvbnN0IGNoYXIqIGh0bWwsIGNvbnN0
IGNoYXIqIGJhc2VVUkkpOwotICAgIHZvaWQgbG9hZFBsYWluVGV4dChjb25zdCBjaGFyKiBwbGFp
blRleHQpOwotICAgIHZvaWQgbG9hZFJlcXVlc3QoV2ViS2l0VVJJUmVxdWVzdCopOwotICAgIHZv
aWQgcmVsb2FkKCk7Ci0gICAgdm9pZCBnb0JhY2soKTsKLSAgICB2b2lkIGdvRm9yd2FyZCgpOwot
Ci0gICAgdm9pZCBzZXRSZWRpcmVjdFVSSShjb25zdCBjaGFyKiB1cmkpIHsgbV9yZWRpcmVjdFVS
SSA9IHVyaTsgfQotCi0gICAgZW51bSBMb2FkRXZlbnRzIHsKLSAgICAgICAgUHJvdmlzaW9uYWxM
b2FkU3RhcnRlZCwKLSAgICAgICAgUHJvdmlzaW9uYWxMb2FkUmVjZWl2ZWRTZXJ2ZXJSZWRpcmVj
dCwKLSAgICAgICAgUHJvdmlzaW9uYWxMb2FkRmFpbGVkLAotICAgICAgICBMb2FkQ29tbWl0dGVk
LAotICAgICAgICBMb2FkRmluaXNoZWQsCi0gICAgICAgIExvYWRGYWlsZWQKLSAgICB9OwotICAg
IGJvb2wgbV9ydW5Mb2FkVW50aWxDb21wbGV0aW9uOwotICAgIGJvb2wgbV9sb2FkRmFpbGVkOwot
ICAgIEdPd25QdHI8R0Vycm9yPiBtX2Vycm9yOwotICAgIFZlY3RvcjxMb2FkRXZlbnRzPiBtX2xv
YWRFdmVudHM7Ci0gICAgZmxvYXQgbV9lc3RpbWF0ZWRQcm9ncmVzczsKLSAgICBDU3RyaW5nIG1f
cmVkaXJlY3RVUkk7Ci19OwotCi0jZW5kaWYgLy8gTG9hZFRyYWNraW5nVGVzdF9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0QXV0aGVudGlj
YXRpb24uY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdEF1
dGhlbnRpY2F0aW9uLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWRlNDIyNS4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0
QXV0aGVudGljYXRpb24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjg2ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJMb2FkVHJhY2tpbmdUZXN0LmgiCi0jaW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5o
IgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLQotc3RhdGljIFdlYktpdFRlc3RT
ZXJ2ZXIqIGtTZXJ2ZXI7Ci0KLWNsYXNzIEF1dGhlbnRpY2F0aW9uVGVzdDogcHVibGljIExvYWRU
cmFja2luZ1Rlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoQXV0aGVu
dGljYXRpb25UZXN0KTsKLQotICAgIEF1dGhlbnRpY2F0aW9uVGVzdCgpCi0gICAgewotICAgICAg
ICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImF1dGhlbnRpY2F0ZSIsIEdfQ0FMTEJBQ0so
cnVuQXV0aGVudGljYXRpb25DYWxsYmFjayksIHRoaXMpOwotICAgIH0KLQotICAgIH5BdXRoZW50
aWNhdGlvblRlc3QoKQotICAgIHsKLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVj
dF9tYXRjaGVkKG1fd2ViVmlldywgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhp
cyk7Ci0gICAgfQotCi0gICAgc3RhdGljIGludCBhdXRoZW50aWNhdGlvblJldHJpZXM7Ci0gICAg
c3RhdGljIGJvb2wgYXV0aGVudGljYXRpb25DYW5jZWxsZWRSZWNlaXZlZDsKLQotICAgIHZvaWQg
bG9hZFVSSShjb25zdCBjaGFyKiB1cmkpCi0gICAgewotICAgICAgICAvLyBSZXNldCB0aGUgcmV0
cnkgY291bnQgb2YgdGhlIGZha2Ugc2VydmVyIHdoZW4gYSBwYWdlIGlzIGxvYWRlZC4KLSAgICAg
ICAgYXV0aGVudGljYXRpb25SZXRyaWVzID0gMDsKLSAgICAgICAgYXV0aGVudGljYXRpb25DYW5j
ZWxsZWRSZWNlaXZlZCA9IGZhbHNlOwotICAgICAgICBMb2FkVHJhY2tpbmdUZXN0Ojpsb2FkVVJJ
KHVyaSk7Ci0gICAgfQotCi0gICAgc3RhdGljIGdib29sZWFuIHJ1bkF1dGhlbnRpY2F0aW9uQ2Fs
bGJhY2soV2ViS2l0V2ViVmlldyosIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVz
dCwgQXV0aGVudGljYXRpb25UZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgZ19zaWduYWxfY29u
bmVjdChyZXF1ZXN0LCAiY2FuY2VsbGVkIiwgR19DQUxMQkFDSyhhdXRoZW50aWNhdGlvbkNhbmNl
bGxlZENhbGxiYWNrKSwgdGVzdCk7Ci0gICAgICAgIHRlc3QtPnJ1bkF1dGhlbnRpY2F0aW9uKHJl
cXVlc3QpOwotICAgICAgICByZXR1cm4gVFJVRTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBh
dXRoZW50aWNhdGlvbkNhbmNlbGxlZENhbGxiYWNrKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVz
dCosIEF1dGhlbnRpY2F0aW9uVGVzdCopCi0gICAgewotICAgICAgICBhdXRoZW50aWNhdGlvbkNh
bmNlbGxlZFJlY2VpdmVkID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2b2lkIHJ1bkF1dGhlbnRpY2F0
aW9uKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCkKLSAgICB7Ci0gICAgICAg
IGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QocmVxdWVzdCkp
OwotICAgICAgICBtX2F1dGhlbnRpY2F0aW9uUmVxdWVzdCA9IHJlcXVlc3Q7Ci0gICAgICAgIGdf
bWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgV2ViS2l0QXV0aGVudGlj
YXRpb25SZXF1ZXN0KiB3YWl0Rm9yQXV0aGVudGljYXRpb25SZXF1ZXN0KCkKLSAgICB7Ci0gICAg
ICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAgICAgICAgcmV0dXJuIG1fYXV0aGVu
dGljYXRpb25SZXF1ZXN0LmdldCgpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBHUmVmUHRyPFdl
YktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdD4gbV9hdXRoZW50aWNhdGlvblJlcXVlc3Q7Ci19Owot
Ci1pbnQgQXV0aGVudGljYXRpb25UZXN0OjphdXRoZW50aWNhdGlvblJldHJpZXMgPSAwOwotYm9v
bCBBdXRoZW50aWNhdGlvblRlc3Q6OmF1dGhlbnRpY2F0aW9uQ2FuY2VsbGVkUmVjZWl2ZWQgPSBm
YWxzZTsKLQotc3RhdGljIGNvbnN0IGNoYXIgYXV0aFRlc3RVc2VybmFtZVtdID0gInVzZXJuYW1l
IjsKLXN0YXRpYyBjb25zdCBjaGFyIGF1dGhUZXN0UGFzc3dvcmRbXSA9ICJwYXNzd29yZCI7Ci1z
dGF0aWMgY29uc3QgY2hhciBhdXRoRXhwZWN0ZWRTdWNjZXNzVGl0bGVbXSA9ICJXZWJLaXQyR3Rr
KyBBdXRoZW50aWNhdGlvbiB0ZXN0IjsKLXN0YXRpYyBjb25zdCBjaGFyIGF1dGhFeHBlY3RlZEZh
aWx1cmVUaXRsZVtdID0gIjQwMSBBdXRob3JpemF0aW9uIFJlcXVpcmVkIjsKLXN0YXRpYyBjb25z
dCBjaGFyIGF1dGhFeHBlY3RlZEF1dGhvcml6YXRpb25bXSA9ICJCYXNpYyBkWE5sY201aGJXVTZj
R0Z6YzNkdmNtUT0iOyAvLyBCYXNlNjQgZW5jb2Rpbmcgb2YgInVzZXJuYW1lOnBhc3N3b3JkIi4K
LXN0YXRpYyBjb25zdCBjaGFyIGF1dGhTdWNjZXNzSFRNTFN0cmluZ1tdID0KLSAgICAiPGh0bWw+
IgotICAgICI8aGVhZD48dGl0bGU+V2ViS2l0Mkd0aysgQXV0aGVudGljYXRpb24gdGVzdDwvdGl0
bGU+PC9oZWFkPiIKLSAgICAiPGJvZHk+PC9ib2R5PjwvaHRtbD4iOwotc3RhdGljIGNvbnN0IGNo
YXIgYXV0aEZhaWx1cmVIVE1MU3RyaW5nW10gPQotICAgICI8aHRtbD4iCi0gICAgIjxoZWFkPjx0
aXRsZT40MDEgQXV0aG9yaXphdGlvbiBSZXF1aXJlZDwvdGl0bGU+PC9oZWFkPiIKLSAgICAiPGJv
ZHk+PC9ib2R5PjwvaHRtbD4iOwotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0
aW9uUmVxdWVzdChBdXRoZW50aWNhdGlvblRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0g
ICAgLy8gVGVzdCBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IGdldHRlcnMgbWF0Y2ggc291cCBhdXRo
ZW50aWNhdGlvbiBoZWFkZXIuCi0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQ
YXRoKCIvYXV0aC10ZXN0Lmh0bWwiKS5kYXRhKCkpOwotICAgIFdlYktpdEF1dGhlbnRpY2F0aW9u
UmVxdWVzdCogcmVxdWVzdCA9IHRlc3QtPndhaXRGb3JBdXRoZW50aWNhdGlvblJlcXVlc3QoKTsK
LSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X2hv
c3QocmVxdWVzdCksID09LCBzb3VwX3VyaV9nZXRfaG9zdChrU2VydmVyLT5iYXNlVVJJKCkpKTsK
LSAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9w
b3J0KHJlcXVlc3QpLCA9PSwgc291cF91cmlfZ2V0X3BvcnQoa1NlcnZlci0+YmFzZVVSSSgpKSk7
Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9y
ZWFsbShyZXF1ZXN0KSwgPT0sICJteSByZWFsbSIpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9hdXRo
ZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9zY2hlbWUocmVxdWVzdCkgPT0gV0VCS0lUX0FVVEhFTlRJ
Q0FUSU9OX1NDSEVNRV9IVFRQX0JBU0lDKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2F1dGhlbnRp
Y2F0aW9uX3JlcXVlc3RfaXNfZm9yX3Byb3h5KHJlcXVlc3QpKTsKLSAgICBnX2Fzc2VydCghd2Vi
a2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfaXNfcmV0cnkocmVxdWVzdCkpOwotfQotCi1zdGF0
aWMgdm9pZCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uQ2FuY2VsKEF1dGhlbnRpY2F0aW9uVGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICAvLyBUZXN0IGNhbmNlbC4KLSAgICB0ZXN0
LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9hdXRoLXRlc3QuaHRtbCIpLmRhdGEo
KSk7Ci0gICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0ID0gdGVzdC0+d2Fp
dEZvckF1dGhlbnRpY2F0aW9uUmVxdWVzdCgpOwotICAgIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9y
ZXF1ZXN0X2NhbmNlbChyZXF1ZXN0KTsKLSAgICAvLyBTZXJ2ZXIgZG9lc24ndCBhc2sgZm9yIG5l
dyBjcmVkZW50aWFscy4KLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAg
IGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHMuc2l6ZSgpLCA9PSwgMyk7Ci0gICAg
Z19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1swXSwgPT0sIExvYWRUcmFja2luZ1Rl
c3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5t
X2xvYWRFdmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRGYWls
ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMl0sID09LCBMb2Fk
VHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOwotCi0gICAgZ19hc3NlcnRfZXJyb3IodGVzdC0+
bV9lcnJvci5nZXQoKSwgV0VCS0lUX05FVFdPUktfRVJST1IsIFdFQktJVF9ORVRXT1JLX0VSUk9S
X0NBTkNFTExFRCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25M
b2FkQ2FuY2VsbGVkKEF1dGhlbnRpY2F0aW9uVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsK
LSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9hdXRoLXRlc3QuaHRt
bCIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdEZvckF1dGhlbnRpY2F0aW9uUmVxdWVzdCgpOwot
ICAgIHdlYmtpdF93ZWJfdmlld19zdG9wX2xvYWRpbmcodGVzdC0+bV93ZWJWaWV3KTsKLSAgICAv
LyBFeHBlY3QgZW1wdHkgcGFnZS4KLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsK
LSAgICBnX2Fzc2VydCh0ZXN0LT5hdXRoZW50aWNhdGlvbkNhbmNlbGxlZFJlY2VpdmVkKTsKLQot
ICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHMuc2l6ZSgpLCA9PSwgMyk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1swXSwgPT0sIExvYWRUcmFja2lu
Z1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0
LT5tX2xvYWRFdmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRG
YWlsZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMl0sID09LCBM
b2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOwotCi0gICAgZ19hc3NlcnRfZXJyb3IodGVz
dC0+bV9lcnJvci5nZXQoKSwgV0VCS0lUX05FVFdPUktfRVJST1IsIFdFQktJVF9ORVRXT1JLX0VS
Uk9SX0NBTkNFTExFRCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3QXV0aGVudGljYXRp
b25GYWlsdXJlKEF1dGhlbnRpY2F0aW9uVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAg
ICAvLyBUZXN0IGF1dGhlbnRpY2F0aW9uIGZhaWx1cmVzLgotICAgIHRlc3QtPmxvYWRVUkkoa1Nl
cnZlci0+Z2V0VVJJRm9yUGF0aCgiL2F1dGgtdGVzdC5odG1sIikuZGF0YSgpKTsKLSAgICBXZWJL
aXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QgPSB0ZXN0LT53YWl0Rm9yQXV0aGVudGlj
YXRpb25SZXF1ZXN0KCk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1
ZXN0X2lzX3JldHJ5KHJlcXVlc3QpKTsKLSAgICBXZWJLaXRDcmVkZW50aWFsKiBjcmVkZW50aWFs
ID0gd2Via2l0X2NyZWRlbnRpYWxfbmV3KGF1dGhUZXN0VXNlcm5hbWUsICJ3cm9uZ3Bhc3N3b3Jk
IiwgV0VCS0lUX0NSRURFTlRJQUxfUEVSU0lTVEVOQ0VfTk9ORSk7Ci0gICAgd2Via2l0X2F1dGhl
bnRpY2F0aW9uX3JlcXVlc3RfYXV0aGVudGljYXRlKHJlcXVlc3QsIGNyZWRlbnRpYWwpOwotICAg
IHdlYmtpdF9jcmVkZW50aWFsX2ZyZWUoY3JlZGVudGlhbCk7Ci0gICAgLy8gRXhwZWN0IGEgc2Vj
b25kIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QuCi0gICAgcmVxdWVzdCA9IHRlc3QtPndhaXRGb3JB
dXRoZW50aWNhdGlvblJlcXVlc3QoKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfYXV0aGVudGljYXRp
b25fcmVxdWVzdF9pc19yZXRyeShyZXF1ZXN0KSk7Ci0gICAgLy8gVGVzdCBzZWNvbmQgZmFpbHVy
ZS4KLSAgICBjcmVkZW50aWFsID0gd2Via2l0X2NyZWRlbnRpYWxfbmV3KGF1dGhUZXN0VXNlcm5h
bWUsICJ3cm9uZ3Bhc3N3b3JkMiIsIFdFQktJVF9DUkVERU5USUFMX1BFUlNJU1RFTkNFX05PTkUp
OwotICAgIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2F1dGhlbnRpY2F0ZShyZXF1ZXN0
LCBjcmVkZW50aWFsKTsKLSAgICB3ZWJraXRfY3JlZGVudGlhbF9mcmVlKGNyZWRlbnRpYWwpOwot
ICAgIC8vIEV4cGVjdCBhdXRoZW50aWNhdGlvbiBmYWlsZWQgcGFnZS4KLSAgICB0ZXN0LT53YWl0
VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRF
dmVudHMuc2l6ZSgpLCA9PSwgMyk7Ci0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2
ZW50c1swXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOwot
ICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMV0sID09LCBMb2FkVHJhY2tp
bmdUZXN0OjpMb2FkQ29tbWl0dGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2Fk
RXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKLSAgICBnX2Fz
c2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dldF90aXRsZSh0ZXN0LT5tX3dlYlZpZXcpLCA9
PSwgYXV0aEV4cGVjdGVkRmFpbHVyZVRpdGxlKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYlZp
ZXdBdXRoZW50aWNhdGlvbk5vQ3JlZGVudGlhbChBdXRoZW50aWNhdGlvblRlc3QqIHRlc3QsIGdj
b25zdHBvaW50ZXIpCi17Ci0gICAgLy8gVGVzdCBjb250aW51ZSB3aXRob3V0IGNyZWRlbnRpYWxz
LgotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2F1dGgtdGVzdC5o
dG1sIikuZGF0YSgpKTsKLSAgICBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3Qg
PSB0ZXN0LT53YWl0Rm9yQXV0aGVudGljYXRpb25SZXF1ZXN0KCk7Ci0gICAgd2Via2l0X2F1dGhl
bnRpY2F0aW9uX3JlcXVlc3RfYXV0aGVudGljYXRlKHJlcXVlc3QsIDApOwotICAgIC8vIFNlcnZl
ciBkb2Vzbid0IGFzayBmb3IgbmV3IGNyZWRlbnRpYWxzLgotICAgIHRlc3QtPndhaXRVbnRpbExv
YWRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50cy5z
aXplKCksID09LCAzKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzBd
LCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7Ci0gICAgZ19h
c3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6
OkxvYWRDb21taXR0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNb
Ml0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOwotICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3RpdGxlKHRlc3QtPm1fd2ViVmlldyksID09LCBhdXRo
RXhwZWN0ZWRGYWlsdXJlVGl0bGUpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0F1dGhl
bnRpY2F0aW9uU3RvcmFnZShBdXRoZW50aWNhdGlvblRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIp
Ci17Ci0gICAgLy8gRW5hYmxlIHByaXZhdGUgYnJvd3NpbmcgYmVmb3JlIGF1dGhlbnRpY2F0aW9u
IHJlcXVlc3QgdG8gdGVzdCB0aGF0IGNyZWRlbnRpYWxzIGNhbid0IGJlIHNhdmVkLgotICAgIHdl
YmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX3ByaXZhdGVfYnJvd3Npbmcod2Via2l0X3dlYl92aWV3
X2dldF9zZXR0aW5ncyh0ZXN0LT5tX3dlYlZpZXcpLCBUUlVFKTsKLSAgICB0ZXN0LT5sb2FkVVJJ
KGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9hdXRoLXRlc3QuaHRtbCIpLmRhdGEoKSk7Ci0gICAg
V2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0ID0gdGVzdC0+d2FpdEZvckF1dGhl
bnRpY2F0aW9uUmVxdWVzdCgpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfYXV0aGVudGljYXRpb25f
cmVxdWVzdF9nZXRfcHJvcG9zZWRfY3JlZGVudGlhbChyZXF1ZXN0KSk7Ci0gICAgZ19hc3NlcnQo
IXdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2Nhbl9zYXZlX2NyZWRlbnRpYWxzKHJlcXVl
c3QpKTsKLQotICAgIC8vIElmIFdlYktpdCBoYXMgYmVlbiBjb21waWxlZCB3aXRoIGxpYnNlY3Jl
dCwgYW5kIHByaXZhdGUgYnJvd3NpbmcgaXMgZGlzYWJsZWQKLSAgICAvLyB0aGVuIGNoZWNrIHRo
YXQgY3JlZGVudGlhbHMgY2FuIGJlIHNhdmVkLgotI2lmIEVOQUJMRShDUkVERU5USUFMX1NUT1JB
R0UpCi0gICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfcHJpdmF0ZV9icm93c2luZyh3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHRlc3QtPm1fd2ViVmlldyksIEZBTFNFKTsKLSAgICB0
ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9hdXRoLXRlc3QuaHRtbCIpLmRh
dGEoKSk7Ci0gICAgcmVxdWVzdCA9IHRlc3QtPndhaXRGb3JBdXRoZW50aWNhdGlvblJlcXVlc3Qo
KTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3Byb3Bv
c2VkX2NyZWRlbnRpYWwocmVxdWVzdCkpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9hdXRoZW50aWNh
dGlvbl9yZXF1ZXN0X2Nhbl9zYXZlX2NyZWRlbnRpYWxzKHJlcXVlc3QpKTsKLSNlbmRpZgotfQot
Ci1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uU3VjY2VzcyhBdXRoZW50aWNh
dGlvblRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgLy8gVGVzdCBjb3JyZWN0IGF1
dGhlbnRpY2F0aW9uLgotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgi
L2F1dGgtdGVzdC5odG1sIikuZGF0YSgpKTsKLSAgICBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVl
c3QqIHJlcXVlc3QgPSB0ZXN0LT53YWl0Rm9yQXV0aGVudGljYXRpb25SZXF1ZXN0KCk7Ci0gICAg
V2ViS2l0Q3JlZGVudGlhbCogY3JlZGVudGlhbCA9IHdlYmtpdF9jcmVkZW50aWFsX25ldyhhdXRo
VGVzdFVzZXJuYW1lLCBhdXRoVGVzdFBhc3N3b3JkLCBXRUJLSVRfQ1JFREVOVElBTF9QRVJTSVNU
RU5DRV9GT1JfU0VTU0lPTik7Ci0gICAgd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfYXV0
aGVudGljYXRlKHJlcXVlc3QsIGNyZWRlbnRpYWwpOwotICAgIHdlYmtpdF9jcmVkZW50aWFsX2Zy
ZWUoY3JlZGVudGlhbCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAg
ICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0sIDMpOwotICAg
IGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdU
ZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+
bV9sb2FkRXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZENvbW1pdHRlZCk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1syXSwgPT0sIExvYWRUcmFja2lu
Z1Rlc3Q6OkxvYWRGaW5pc2hlZCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmll
d19nZXRfdGl0bGUodGVzdC0+bV93ZWJWaWV3KSwgPT0sIGF1dGhFeHBlY3RlZFN1Y2Nlc3NUaXRs
ZSk7Ci0KLSAgICAvLyBUZXN0IGxvYWRpbmcgdGhlIHNhbWUgKGF1dGhvcml6ZWQpIHBhZ2UgYWdh
aW4uCi0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvYXV0aC10ZXN0
Lmh0bWwiKS5kYXRhKCkpOwotICAgIC8vIFRoZXJlIGlzIG5vIGF1dGhlbnRpY2F0aW9uIGNoYWxs
ZW5nZS4KLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0
X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHMuc2l6ZSgpLCA9PSwgMyk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1swXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zp
c2lvbmFsTG9hZFN0YXJ0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVu
dHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkQ29tbWl0dGVkKTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9h
ZEZpbmlzaGVkKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dldF90aXRs
ZSh0ZXN0LT5tX3dlYlZpZXcpLCA9PSwgYXV0aEV4cGVjdGVkU3VjY2Vzc1RpdGxlKTsKLX0KLQot
c3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciosIFNvdXBNZXNzYWdlKiBtZXNz
YWdlLCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiwgU291cENsaWVudENvbnRleHQqLCB2
b2lkKikKLXsKLSAgICBpZiAobWVzc2FnZS0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgewot
ICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1Rf
SU1QTEVNRU5URUQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFzdHJjbXAo
cGF0aCwgIi9hdXRoLXRlc3QuaHRtbCIpKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGF1dGhvcml6
YXRpb24gPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfb25lKG1lc3NhZ2UtPnJlcXVlc3RfaGVh
ZGVycywgIkF1dGhvcml6YXRpb24iKTsKLSAgICAgICAgLy8gUmVxdWlyZSBhdXRoZW50aWNhdGlv
bi4KLSAgICAgICAgaWYgKCFnX3N0cmNtcDAoYXV0aG9yaXphdGlvbiwgYXV0aEV4cGVjdGVkQXV0
aG9yaXphdGlvbikpIHsKLSAgICAgICAgICAgIC8vIFN1Y2Nlc3NmdWwgYXV0aGVudGljYXRpb24u
Ci0gICAgICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRV
U19PSyk7Ci0gICAgICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVz
cG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBhdXRoU3VjY2Vzc0hUTUxTdHJpbmcsIHN0
cmxlbihhdXRoU3VjY2Vzc0hUTUxTdHJpbmcpKTsKLSAgICAgICAgICAgIEF1dGhlbnRpY2F0aW9u
VGVzdDo6YXV0aGVudGljYXRpb25SZXRyaWVzID0gMDsKLSAgICAgICAgfSBlbHNlIGlmICgrK0F1
dGhlbnRpY2F0aW9uVGVzdDo6YXV0aGVudGljYXRpb25SZXRyaWVzIDwgMykgewotICAgICAgICAg
ICAgLy8gTm8gb3IgaW52YWxpZCBhdXRob3JpemF0aW9uIGhlYWRlciBwcm92aWRlZCBieSB0aGUg
Y2xpZW50LCByZXF1ZXN0IGF1dGhlbnRpY2F0aW9uIHR3aWNlIHRoZW4gZmFpbC4KLSAgICAgICAg
ICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX1VOQVVUSE9S
SVpFRCk7Ci0gICAgICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobWVzc2FnZS0+
cmVzcG9uc2VfaGVhZGVycywgIldXVy1BdXRoZW50aWNhdGUiLCAiQmFzaWMgcmVhbG09XCJteSBy
ZWFsbVwiIik7Ci0gICAgICAgICAgICAvLyBJbmNsdWRlIGEgZmFpbHVyZSBtZXNzYWdlIGluIGNh
c2UgdGhlIHVzZXIgYXR0ZW1wdHMgdG8gcHJvY2VlZCB3aXRob3V0IGF1dGhlbnRpY2F0aW9uLgot
ICAgICAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2Jv
ZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgYXV0aEZhaWx1cmVIVE1MU3RyaW5nLCBzdHJsZW4oYXV0
aEZhaWx1cmVIVE1MU3RyaW5nKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBB
dXRoZW50aWNhdGlvbiBub3Qgc3VjY2Vzc2Z1bCwgZGlzcGxheSBhICI0MDEgQXV0aG9yaXphdGlv
biBSZXF1aXJlZCIgcGFnZS4KLSAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1l
c3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKLSAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2Fw
cGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGF1dGhGYWls
dXJlSFRNTFN0cmluZywgc3RybGVuKGF1dGhGYWlsdXJlSFRNTFN0cmluZykpOwotICAgICAgICB9
Ci0gICAgfSBlbHNlCi0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNP
VVBfU1RBVFVTX05PVF9GT1VORCk7Ci0KLSAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZSht
ZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKLX0KLQotdm9pZCBiZWZvcmVBbGwoKQotewotICAgIGtT
ZXJ2ZXIgPSBuZXcgV2ViS2l0VGVzdFNlcnZlcigpOwotICAgIGtTZXJ2ZXItPnJ1bihzZXJ2ZXJD
YWxsYmFjayk7Ci0KLSAgICBBdXRoZW50aWNhdGlvblRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIs
ICJhdXRoZW50aWNhdGlvbi1yZXF1ZXN0IiwgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvblJlcXVl
c3QpOwotICAgIEF1dGhlbnRpY2F0aW9uVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImF1dGhl
bnRpY2F0aW9uLWNhbmNlbCIsIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25DYW5jZWwpOwotICAg
IEF1dGhlbnRpY2F0aW9uVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImF1dGhlbnRpY2F0aW9u
LWxvYWQtY2FuY2VsbGVkIiwgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvbkxvYWRDYW5jZWxsZWQp
OwotICAgIEF1dGhlbnRpY2F0aW9uVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImF1dGhlbnRp
Y2F0aW9uLWZhaWx1cmUiLCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uRmFpbHVyZSk7Ci0gICAg
QXV0aGVudGljYXRpb25UZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiYXV0aGVudGljYXRpb24t
bm8tY3JlZGVudGlhbCIsIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25Ob0NyZWRlbnRpYWwpOwot
ICAgIEF1dGhlbnRpY2F0aW9uVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImF1dGhlbnRpY2F0
aW9uLXN0b3JhZ2UiLCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uU3RvcmFnZSk7Ci0gICAgLy8g
VGVzdGluZyBhdXRoZW50aWNhdGlvbiBzdWNjZXNzIG11c3QgYmUgZG9uZSBsYXN0IGJlY2F1c2Ug
bGlic291cCB3aWxsIG5ldmVyIGZpcmUKLSAgICAvLyB0aGUgYXV0aGVudGljYXRlIHNpZ25hbCBh
Z2FpbiBvbmNlIGF1dGhlbnRpY2F0aW9uIGlzIHN1Y2Nlc3NmdWwuCi0gICAgQXV0aGVudGljYXRp
b25UZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiYXV0aGVudGljYXRpb24tc3VjY2VzcyIsIHRl
c3RXZWJWaWV3QXV0aGVudGljYXRpb25TdWNjZXNzKTsKLX0KLQotdm9pZCBhZnRlckFsbCgpCi17
Ci0gICAgZGVsZXRlIGtTZXJ2ZXI7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0QmFja0ZvcndhcmRMaXN0LmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RCYWNrRm9yd2FyZExpc3QuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDc5MzY2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RCYWNrRm9yd2FyZExpc3QuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsMjgwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
SWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiV2ViS2l0VGVzdFNl
cnZlci5oIgotI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgot
I2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUg
PHdlYmtpdDIvd2Via2l0Mi5oPgotCi0vLyBCYWNrIGZvcndhcmQgbGlzdCBsaW1pdCBpcyAxMDAg
YnkgZGVmYXVsdC4KLXN0YXRpYyBjb25zdCBpbnQga0JhY2tGb3J3YXJkTGlzdExpbWl0ID0gMTAw
OwotCi1zdGF0aWMgV2ViS2l0VGVzdFNlcnZlcioga1NlcnZlcjsKLQotc3RhdGljIHZvaWQgc2Vy
dmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbXNnLCBjb25zdCBj
aGFyKiBwYXRoLCBHSGFzaFRhYmxlKiBxdWVyeSwgU291cENsaWVudENvbnRleHQqIGNvbnRleHQs
IGdwb2ludGVyIGRhdGEpCi17Ci0gICAgaWYgKG1zZy0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dF
VCkgewotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX05P
VF9JTVBMRU1FTlRFRCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoZ19zdHJf
aGFzX3N1ZmZpeChwYXRoLCAiZmF2aWNvbi5pY28iKSkgewotICAgICAgICBzb3VwX21lc3NhZ2Vf
c2V0X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX09L
KTsKLQotICAgIGNoYXIqIGJvZHkgPSBnX3N0cmR1cF9wcmludGYoIjxodG1sPjx0aXRsZT4lczwv
dGl0bGU+PGJvZHk+JXM8L2JvZHk+PC9odG1sPiIsIHBhdGggKyAxLCBwYXRoICsgMSk7Ci0gICAg
c291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1zZy0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllf
VEFLRSwgYm9keSwgc3RybGVuKGJvZHkpKTsKLQotICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBs
ZXRlKG1zZy0+cmVzcG9uc2VfYm9keSk7Ci19Ci0KLWNsYXNzIEJhY2tGb3J3YXJkTGlzdFRlc3Q6
IHB1YmxpYyBXZWJWaWV3VGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVS
RShCYWNrRm9yd2FyZExpc3RUZXN0KTsKLQotICAgIGVudW0gewotICAgICAgICBCYWNrd2FyZCwK
LSAgICAgICAgRm9yd2FyZAotICAgIH07Ci0KLSAgICBlbnVtIHsKLSAgICAgICAgQ3VycmVudEl0
ZW0gID0gMSA8PCAwLAotICAgICAgICBBZGRlZEl0ZW0gICAgPSAxIDw8IDEsCi0gICAgICAgIFJl
bW92ZWRJdGVtcyA9IDEgPDwgMgotICAgIH07Ci0KLSAgICBzdGF0aWMgdm9pZCBjaGVja0l0ZW0o
V2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSogaXRlbSwgY29uc3QgY2hhciogdGl0bGUsIGNvbnN0
IGNoYXIqIHVyaSwgY29uc3QgY2hhciogb3JpZ2luYWxVUkkpCi0gICAgewotICAgICAgICBnX2Fz
c2VydChpdGVtKTsKLSAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9iYWNrX2ZvcndhcmRf
bGlzdF9pdGVtX2dldF91cmkoaXRlbSksID09LCB1cmkpOwotICAgICAgICBnX2Fzc2VydF9jbXBz
dHIod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0X3RpdGxlKGl0ZW0pLCA9PSAsIHRp
dGxlKTsKLSAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9p
dGVtX2dldF9vcmlnaW5hbF91cmkoaXRlbSksID09LCBvcmlnaW5hbFVSSSk7Ci0gICAgfQotCi0g
ICAgc3RhdGljIHZvaWQgY2hlY2tJdGVtSW5kZXgoV2ViS2l0QmFja0ZvcndhcmRMaXN0KiBsaXN0
KQotICAgIHsKLSAgICAgICAgZ19hc3NlcnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9u
dGhfaXRlbShsaXN0LCAtMSkgPT0gd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2l0
ZW0obGlzdCkpOwotICAgICAgICBnX2Fzc2VydCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0
X250aF9pdGVtKGxpc3QsIDApID09IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVu
dF9pdGVtKGxpc3QpKTsKLSAgICAgICAgZ19hc3NlcnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0
X2dldF9udGhfaXRlbShsaXN0LCAxKSA9PSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2Zv
cndhcmRfaXRlbShsaXN0KSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgY2hlY2tMaXN0KFdl
YktpdEJhY2tGb3J3YXJkTGlzdCogbGlzdCwgdW5zaWduZWQgdHlwZSwgV2ViS2l0QmFja0Zvcndh
cmRMaXN0SXRlbSoqIGl0ZW1zLCB1bnNpZ25lZCBuSXRlbXMpCi0gICAgewotICAgICAgICBHTGlz
dCogbGlzdEl0ZW1zID0gdHlwZSA9PSBCYWNrRm9yd2FyZExpc3RUZXN0OjpCYWNrd2FyZCA/IHdl
YmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19saXN0KGxpc3QpIDoKLSAgICAgICAgICAg
IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0KGxpc3QpOwotICAgICAg
ICBnX2Fzc2VydChsaXN0SXRlbXMpOwotCi0gICAgICAgIHVuc2lnbmVkIGkgPSAwOwotICAgICAg
ICBmb3IgKEdMaXN0KiBsaXN0SXRlbSA9IGxpc3RJdGVtczsgbGlzdEl0ZW07IGxpc3RJdGVtID0g
Z19saXN0X25leHQobGlzdEl0ZW0pLCBpKyspIHsKLSAgICAgICAgICAgIGdfYXNzZXJ0X2NtcHVp
bnQoaSwgPCwgbkl0ZW1zKTsKLSAgICAgICAgICAgIGdfYXNzZXJ0KGxpc3RJdGVtLT5kYXRhID09
IGl0ZW1zW2ldKTsKLSAgICAgICAgfQotICAgICAgICBnX2xpc3RfZnJlZShsaXN0SXRlbXMpOwot
ICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGJhY2tGb3J3YXJkTGlzdENoYW5nZWQoV2ViS2l0QmFj
a0ZvcndhcmRMaXN0KiBsaXN0LCBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiBhZGRlZEl0ZW0s
IEdMaXN0KiByZW1vdmVkSXRlbXMsIEJhY2tGb3J3YXJkTGlzdFRlc3QqIHRlc3QpCi0gICAgewot
ICAgICAgICB0ZXN0LT5tX2hhc0NoYW5nZWQgPSB0cnVlOwotCi0gICAgICAgIGlmICh0ZXN0LT5t
X2NoYW5nZWRGbGFncyAmIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OkFkZGVkSXRlbSkgewotICAgICAg
ICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX0JBQ0tfRk9SV0FSRF9MSVNUX0lURU0oYWRkZWRJdGVt
KSk7Ci0gICAgICAgICAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlz
aGVzKEdfT0JKRUNUKGFkZGVkSXRlbSkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGdf
YXNzZXJ0KCFhZGRlZEl0ZW0pOwotCi0gICAgICAgIGlmICh0ZXN0LT5tX2NoYW5nZWRGbGFncyAm
IEJhY2tGb3J3YXJkTGlzdFRlc3Q6OlJlbW92ZWRJdGVtcykgewotICAgICAgICAgICAgZ19hc3Nl
cnQocmVtb3ZlZEl0ZW1zKTsKLSAgICAgICAgICAgIGZvciAoR0xpc3QqIGl0ZXIgPSByZW1vdmVk
SXRlbXM7IGl0ZXI7IGl0ZXIgPSBpdGVyLT5uZXh0KSB7Ci0gICAgICAgICAgICAgICAgZ19hc3Nl
cnQoV0VCS0lUX0lTX0JBQ0tfRk9SV0FSRF9MSVNUX0lURU0oaXRlci0+ZGF0YSkpOwotICAgICAg
ICAgICAgICAgIGlmICh0ZXN0LT5tX2V4cGVjdGVkUmVtb3ZlZEl0ZW1zKQotICAgICAgICAgICAg
ICAgICAgICBnX2Fzc2VydChnX2xpc3RfZmluZCh0ZXN0LT5tX2V4cGVjdGVkUmVtb3ZlZEl0ZW1z
LCBpdGVyLT5kYXRhKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICBnX2Fzc2VydCghcmVtb3ZlZEl0ZW1zKTsKLSAgICB9Ci0KLSAgICBCYWNrRm9yd2FyZExp
c3RUZXN0KCkKLSAgICAgICAgOiBtX2xpc3Qod2Via2l0X3dlYl92aWV3X2dldF9iYWNrX2Zvcndh
cmRfbGlzdChtX3dlYlZpZXcpKQotICAgICAgICAsIG1fY2hhbmdlZEZsYWdzKDApCi0gICAgICAg
ICwgbV9oYXNDaGFuZ2VkKGZhbHNlKQotICAgICAgICAsIG1fZXhwZWN0ZWRSZW1vdmVkSXRlbXMo
MCkKLSAgICB7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9saXN0LCAiY2hhbmdlZCIsIEdf
Q0FMTEJBQ0soYmFja0ZvcndhcmRMaXN0Q2hhbmdlZCksIHRoaXMpOwotICAgICAgICBhc3NlcnRP
YmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKG1fbGlzdCkpOwotICAgIH0K
LQotICAgIH5CYWNrRm9yd2FyZExpc3RUZXN0KCkKLSAgICB7Ci0gICAgICAgIGdfc2lnbmFsX2hh
bmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX2xpc3QsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAs
IDAsIDAsIDAsIHRoaXMpOwotICAgIH0KLQotICAgIHZvaWQgd2FpdFVudGlsTG9hZEZpbmlzaGVk
KCkKLSAgICB7Ci0gICAgICAgIG1faGFzQ2hhbmdlZCA9IGZhbHNlOwotICAgICAgICBXZWJWaWV3
VGVzdDo6d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgICAgIGdfYXNzZXJ0KG1faGFzQ2hh
bmdlZCk7Ci0gICAgfQotCi0gICAgdm9pZCB3YWl0VW50aWxMb2FkRmluaXNoZWRBbmRDaGVja1Jl
bW92ZWRJdGVtcyhHTGlzdCogcmVtb3ZlZEl0ZW1zKQotICAgIHsKLSAgICAgICAgbV9leHBlY3Rl
ZFJlbW92ZWRJdGVtcyA9IHJlbW92ZWRJdGVtczsKLSAgICAgICAgd2FpdFVudGlsTG9hZEZpbmlz
aGVkKCk7Ci0gICAgICAgIG1fZXhwZWN0ZWRSZW1vdmVkSXRlbXMgPSAwOwotICAgIH0KLQotICAg
IFdlYktpdEJhY2tGb3J3YXJkTGlzdCogbV9saXN0OwotICAgIHVuc2lnbmVkIGxvbmcgbV9jaGFu
Z2VkRmxhZ3M7Ci0gICAgYm9vbCBtX2hhc0NoYW5nZWQ7Ci0gICAgR0xpc3QqIG1fZXhwZWN0ZWRS
ZW1vdmVkSXRlbXM7Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0QmFja0ZvcndhcmRMaXN0TmF2aWdh
dGlvbihCYWNrRm9yd2FyZExpc3RUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIFdl
YktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW1zWzFdOwotCi0gICAgZ19hc3NlcnQoIXdlYmtp
dF93ZWJfdmlld19jYW5fZ29fYmFjayh0ZXN0LT5tX3dlYlZpZXcpKTsKLSAgICBnX2Fzc2VydCgh
d2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHRlc3QtPm1fd2ViVmlldykpOwotCi0gICAg
Z19hc3NlcnRfY21wdWludCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2xlbmd0aCh0ZXN0
LT5tX2xpc3QpLCA9PSwgMCk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlz
dF9nZXRfY3VycmVudF9pdGVtKHRlc3QtPm1fbGlzdCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRf
YmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfaXRlbSh0ZXN0LT5tX2xpc3QpKTsKLSAgICBnX2Fz
c2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2l0ZW0odGVzdC0+bV9s
aXN0KSk7Ci0gICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tJdGVtSW5kZXgodGVzdC0+bV9s
aXN0KTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xp
c3QodGVzdC0+bV9saXN0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlz
dF9nZXRfZm9yd2FyZF9saXN0KHRlc3QtPm1fbGlzdCkpOwotCi0gICAgQ1N0cmluZyB1cmlQYWdl
MSA9IGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9QYWdlMSIpOwotICAgIHRlc3QtPm1fY2hhbmdl
ZEZsYWdzID0gQmFja0ZvcndhcmRMaXN0VGVzdDo6Q3VycmVudEl0ZW0gfCBCYWNrRm9yd2FyZExp
c3RUZXN0OjpBZGRlZEl0ZW07Ci0gICAgdGVzdC0+bG9hZFVSSSh1cmlQYWdlMS5kYXRhKCkpOwot
ICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3NlcnQoIXdlYmtp
dF93ZWJfdmlld19jYW5fZ29fYmFjayh0ZXN0LT5tX3dlYlZpZXcpKTsKLSAgICBnX2Fzc2VydCgh
d2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHRlc3QtPm1fd2ViVmlldykpOwotCi0gICAg
Z19hc3NlcnRfY21wdWludCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2xlbmd0aCh0ZXN0
LT5tX2xpc3QpLCA9PSwgMSk7Ci0gICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSogaXRlbVBh
Z2UxID0gd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0odGVzdC0+bV9s
aXN0KTsKLSAgICBCYWNrRm9yd2FyZExpc3RUZXN0OjpjaGVja0l0ZW0oaXRlbVBhZ2UxLCAiUGFn
ZTEiLCB1cmlQYWdlMS5kYXRhKCksIHVyaVBhZ2UxLmRhdGEoKSk7Ci0gICAgZ19hc3NlcnQoIXdl
YmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19pdGVtKHRlc3QtPm1fbGlzdCkpOwotICAg
IGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRlbSh0ZXN0
LT5tX2xpc3QpKTsKLSAgICBCYWNrRm9yd2FyZExpc3RUZXN0OjpjaGVja0l0ZW1JbmRleCh0ZXN0
LT5tX2xpc3QpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2Jh
Y2tfbGlzdCh0ZXN0LT5tX2xpc3QpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2Fy
ZF9saXN0X2dldF9mb3J3YXJkX2xpc3QodGVzdC0+bV9saXN0KSk7Ci0KLSAgICBDU3RyaW5nIHVy
aVBhZ2UyID0ga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL1BhZ2UyIik7Ci0gICAgdGVzdC0+bV9j
aGFuZ2VkRmxhZ3MgPSBCYWNrRm9yd2FyZExpc3RUZXN0OjpDdXJyZW50SXRlbSB8IEJhY2tGb3J3
YXJkTGlzdFRlc3Q6OkFkZGVkSXRlbTsKLSAgICB0ZXN0LT5sb2FkVVJJKHVyaVBhZ2UyLmRhdGEo
KSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBnX2Fzc2VydCh3
ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2sodGVzdC0+bV93ZWJWaWV3KSk7Ci0gICAgZ19hc3Nl
cnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh0ZXN0LT5tX3dlYlZpZXcpKTsKLQot
ICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9sZW5ndGgo
dGVzdC0+bV9saXN0KSwgPT0sIDIpOwotICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0
ZW1QYWdlMiA9IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKHRlc3Qt
Pm1fbGlzdCk7Ci0gICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tJdGVtKGl0ZW1QYWdlMiwg
IlBhZ2UyIiwgdXJpUGFnZTIuZGF0YSgpLCB1cmlQYWdlMi5kYXRhKCkpOwotICAgIGdfYXNzZXJ0
KHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19pdGVtKHRlc3QtPm1fbGlzdCkgPT0g
aXRlbVBhZ2UxKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9m
b3J3YXJkX2l0ZW0odGVzdC0+bV9saXN0KSk7Ci0gICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hl
Y2tJdGVtSW5kZXgodGVzdC0+bV9saXN0KTsKLSAgICBpdGVtc1swXSA9IGl0ZW1QYWdlMTsKLSAg
ICBCYWNrRm9yd2FyZExpc3RUZXN0OjpjaGVja0xpc3QodGVzdC0+bV9saXN0LCBCYWNrRm9yd2Fy
ZExpc3RUZXN0OjpCYWNrd2FyZCwgaXRlbXMsIDEpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFj
a19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlzdCh0ZXN0LT5tX2xpc3QpKTsKLQotICAgIHRl
c3QtPm1fY2hhbmdlZEZsYWdzID0gQmFja0ZvcndhcmRMaXN0VGVzdDo6Q3VycmVudEl0ZW07Ci0g
ICAgdGVzdC0+Z29CYWNrKCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0K
LSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrKHRlc3QtPm1fd2ViVmll
dykpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh0ZXN0LT5t
X3dlYlZpZXcpKTsKLQotICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2JhY2tfZm9yd2FyZF9s
aXN0X2dldF9sZW5ndGgodGVzdC0+bV9saXN0KSwgPT0sIDIpOwotICAgIGdfYXNzZXJ0KGl0ZW1Q
YWdlMSA9PSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh0ZXN0LT5t
X2xpc3QpKTsKLSAgICBCYWNrRm9yd2FyZExpc3RUZXN0OjpjaGVja0l0ZW0od2Via2l0X2JhY2tf
Zm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0odGVzdC0+bV9saXN0KSwgIlBhZ2UxIiwgdXJp
UGFnZTEuZGF0YSgpLCB1cmlQYWdlMS5kYXRhKCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFj
a19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfaXRlbSh0ZXN0LT5tX2xpc3QpKTsKLSAgICBnX2Fzc2Vy
dCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRlbSh0ZXN0LT5tX2xpc3Qp
ID09IGl0ZW1QYWdlMik7Ci0gICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tJdGVtSW5kZXgo
dGVzdC0+bV9saXN0KTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dl
dF9iYWNrX2xpc3QodGVzdC0+bV9saXN0KSk7Ci0gICAgaXRlbXNbMF0gPSBpdGVtUGFnZTI7Ci0g
ICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tMaXN0KHRlc3QtPm1fbGlzdCwgQmFja0Zvcndh
cmRMaXN0VGVzdDo6Rm9yd2FyZCwgaXRlbXMsIDEpOwotCi0gICAgdGVzdC0+bV9jaGFuZ2VkRmxh
Z3MgPSBCYWNrRm9yd2FyZExpc3RUZXN0OjpDdXJyZW50SXRlbTsKLSAgICB0ZXN0LT5nb0Zvcndh
cmQoKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0
KHdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayh0ZXN0LT5tX3dlYlZpZXcpKTsKLSAgICBnX2Fz
c2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHRlc3QtPm1fd2ViVmlldykpOwot
Ci0gICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2xlbmd0
aCh0ZXN0LT5tX2xpc3QpLCA9PSwgMik7Ci0gICAgZ19hc3NlcnQoaXRlbVBhZ2UyID09IHdlYmtp
dF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKHRlc3QtPm1fbGlzdCkpOwotICAg
IEJhY2tGb3J3YXJkTGlzdFRlc3Q6OmNoZWNrSXRlbSh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3Rf
Z2V0X2N1cnJlbnRfaXRlbSh0ZXN0LT5tX2xpc3QpLCAiUGFnZTIiLCB1cmlQYWdlMi5kYXRhKCks
IHVyaVBhZ2UyLmRhdGEoKSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0
X2dldF9iYWNrX2l0ZW0odGVzdC0+bV9saXN0KSA9PSBpdGVtUGFnZTEpOwotICAgIGdfYXNzZXJ0
KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRlbSh0ZXN0LT5tX2xpc3Qp
KTsKLSAgICBCYWNrRm9yd2FyZExpc3RUZXN0OjpjaGVja0l0ZW1JbmRleCh0ZXN0LT5tX2xpc3Qp
OwotICAgIGl0ZW1zWzBdID0gaXRlbVBhZ2UxOwotICAgIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OmNo
ZWNrTGlzdCh0ZXN0LT5tX2xpc3QsIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OkJhY2t3YXJkLCBpdGVt
cywgMSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2Fy
ZF9saXN0KHRlc3QtPm1fbGlzdCkpOwotCi0gICAgdGVzdC0+bV9jaGFuZ2VkRmxhZ3MgPSBCYWNr
Rm9yd2FyZExpc3RUZXN0OjpDdXJyZW50SXRlbTsKLSAgICB0ZXN0LT5nb1RvQmFja0ZvcndhcmRM
aXN0SXRlbShpdGVtUGFnZTEpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwot
Ci0gICAgZ19hc3NlcnQoaXRlbVBhZ2UxID09IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRf
Y3VycmVudF9pdGVtKHRlc3QtPm1fbGlzdCkpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0QmFja0Zv
cndhcmRMaXN0TGltaXRBbmRDYWNoZShCYWNrRm9yd2FyZExpc3RUZXN0KiB0ZXN0LCBnY29uc3Rw
b2ludGVyKQotewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwga0JhY2tGb3J3YXJkTGlzdExpbWl0
OyBpKyspIHsKLSAgICAgICAgR093blB0cjxjaGFyPiBwYXRoKGdfc3RyZHVwX3ByaW50ZigiL1Bh
Z2UlZCIsIGkpKTsKLSAgICAgICAgdGVzdC0+bV9jaGFuZ2VkRmxhZ3MgPSBCYWNrRm9yd2FyZExp
c3RUZXN0OjpDdXJyZW50SXRlbSB8IEJhY2tGb3J3YXJkTGlzdFRlc3Q6OkFkZGVkSXRlbTsKLSAg
ICAgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKHBhdGguZ2V0KCkpLmRh
dGEoKSk7Ci0gICAgICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIH0KLQot
ICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9sZW5ndGgo
dGVzdC0+bV9saXN0KSwgPT0sIGtCYWNrRm9yd2FyZExpc3RMaW1pdCk7Ci0gICAgV2ViS2l0QmFj
a0ZvcndhcmRMaXN0SXRlbSogaXRlbVBhZ2VGaXJzdCA9IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlz
dF9nZXRfbnRoX2l0ZW0odGVzdC0+bV9saXN0LCAtKGtCYWNrRm9yd2FyZExpc3RMaW1pdCAtIDEp
KTsKLSAgICBHT3duUHRyPEdMaXN0PiByZW1vdmVkSXRlbXMoZ19saXN0X3ByZXBlbmQoMCwgaXRl
bVBhZ2VGaXJzdCkpOwotCi0gICAgR093blB0cjxjaGFyPiBwYXRoKGdfc3RyZHVwX3ByaW50Zigi
L1BhZ2UlZCIsIGtCYWNrRm9yd2FyZExpc3RMaW1pdCkpOwotICAgIHRlc3QtPm1fY2hhbmdlZEZs
YWdzID0gQmFja0ZvcndhcmRMaXN0VGVzdDo6Q3VycmVudEl0ZW0gfCBCYWNrRm9yd2FyZExpc3RU
ZXN0OjpBZGRlZEl0ZW0gfCBCYWNrRm9yd2FyZExpc3RUZXN0OjpSZW1vdmVkSXRlbXM7Ci0gICAg
dGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKHBhdGguZ2V0KCkpLmRhdGEoKSk7
Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkQW5kQ2hlY2tSZW1vdmVkSXRlbXMocmVt
b3ZlZEl0ZW1zLmdldCgpKTsKLQotICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2JhY2tfZm9y
d2FyZF9saXN0X2dldF9sZW5ndGgodGVzdC0+bV9saXN0KSwgPT0sIGtCYWNrRm9yd2FyZExpc3RM
aW1pdCk7Ci19Ci0KLXZvaWQgYmVmb3JlQWxsKCkKLXsKLSAgICBrU2VydmVyID0gbmV3IFdlYktp
dFRlc3RTZXJ2ZXIoKTsKLSAgICBrU2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2spOwotCi0gICAg
QmFja0ZvcndhcmRMaXN0VGVzdDo6YWRkKCJCYWNrRm9yd2FyZExpc3QiLCAibmF2aWdhdGlvbiIs
IHRlc3RCYWNrRm9yd2FyZExpc3ROYXZpZ2F0aW9uKTsKLSAgICBCYWNrRm9yd2FyZExpc3RUZXN0
OjphZGQoIkJhY2tGb3J3YXJkTGlzdCIsICJsaXN0LWxpbWl0LWFuZC1jYWNoZSIsIHRlc3RCYWNr
Rm9yd2FyZExpc3RMaW1pdEFuZENhY2hlKTsKLX0KLQotdm9pZCBhZnRlckFsbCgpCi17Ci0gICAg
ZGVsZXRlIGtTZXJ2ZXI7Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL1Rlc3RDb250ZXh0TWVudS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0Q29udGV4dE1lbnUuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBhMjMyOWI5Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RDb250ZXh0TWVudS5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw4NjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCi0jaW5jbHVkZSA8d3Rm
L2dvYmplY3QvR1JlZlB0ci5oPgotCi1jbGFzcyBDb250ZXh0TWVudVRlc3Q6IHB1YmxpYyBXZWJW
aWV3VGVzdCB7Ci1wdWJsaWM6Ci0gICAgZW51bSBDb250ZXh0TWVudUl0ZW1TdGF0ZUZsYWdzIHsK
LSAgICAgICAgVmlzaWJsZSA9IDEgPDwgMCwKLSAgICAgICAgRW5hYmxlZCA9IDEgPDwgMSwKLSAg
ICAgICAgQ2hlY2tlZCA9IDEgPDwgMgotICAgIH07Ci0KLSAgICB2b2lkIGNoZWNrQ29udGV4dE1l
bnVFdmVudChHZGtFdmVudCogZXZlbnQpCi0gICAgewotICAgICAgICBnX2Fzc2VydChldmVudCk7
Ci0gICAgICAgIGdfYXNzZXJ0X2NtcGludChldmVudC0+dHlwZSwgPT0sIEdES19CVVRUT05fUFJF
U1MpOwotICAgICAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnQtPmJ1dHRvbi5idXR0b24sID09LCAz
KTsKLSAgICAgICAgZ19hc3NlcnRfY21waW50KGV2ZW50LT5idXR0b24ueCwgPT0sIG1fbWVudVBv
c2l0aW9uWCk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcGludChldmVudC0+YnV0dG9uLnksID09LCBt
X21lbnVQb3NpdGlvblkpOwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiBjb250ZXh0TWVu
dUNhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdENvbnRleHRNZW51KiBjb250
ZXh0TWVudSwgR2RrRXZlbnQqIGV2ZW50LCBXZWJLaXRIaXRUZXN0UmVzdWx0KiBoaXRUZXN0UmVz
dWx0LCBDb250ZXh0TWVudVRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICBnX2Fzc2VydChXRUJL
SVRfSVNfQ09OVEVYVF9NRU5VKGNvbnRleHRNZW51KSk7Ci0gICAgICAgIHRlc3QtPmFzc2VydE9i
amVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QoY29udGV4dE1lbnUpKTsKLSAg
ICAgICAgdGVzdC0+Y2hlY2tDb250ZXh0TWVudUV2ZW50KGV2ZW50KTsKLSAgICAgICAgZ19hc3Nl
cnQoV0VCS0lUX0lTX0hJVF9URVNUX1JFU1VMVChoaXRUZXN0UmVzdWx0KSk7Ci0gICAgICAgIHRl
c3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QoaGl0VGVz
dFJlc3VsdCkpOwotCi0gICAgICAgIHJldHVybiB0ZXN0LT5jb250ZXh0TWVudShjb250ZXh0TWVu
dSwgZXZlbnQsIGhpdFRlc3RSZXN1bHQpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGNvbnRl
eHRNZW51RGlzbWlzc2VkQ2FsbGJhY2soV2ViS2l0V2ViVmlldyosIENvbnRleHRNZW51VGVzdCog
dGVzdCkKLSAgICB7Ci0gICAgICAgIHRlc3QtPmNvbnRleHRNZW51RGlzbWlzc2VkKCk7Ci0gICAg
fQotCi0gICAgQ29udGV4dE1lbnVUZXN0KCkKLSAgICAgICAgOiBtX21lbnVQb3NpdGlvblgoMCkK
LSAgICAgICAgLCBtX21lbnVQb3NpdGlvblkoMCkKLSAgICB7Ci0gICAgICAgIGdfc2lnbmFsX2Nv
bm5lY3QobV93ZWJWaWV3LCAiY29udGV4dC1tZW51IiwgR19DQUxMQkFDSyhjb250ZXh0TWVudUNh
bGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAiY29u
dGV4dC1tZW51LWRpc21pc3NlZCIsIEdfQ0FMTEJBQ0soY29udGV4dE1lbnVEaXNtaXNzZWRDYWxs
YmFjayksIHRoaXMpOwotICAgIH0KLQotICAgIH5Db250ZXh0TWVudVRlc3QoKQotICAgIHsKLSAg
ICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fd2ViVmlldywgR19T
SUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7Ci0gICAgfQotCi0gICAgdmlydHVh
bCBib29sIGNvbnRleHRNZW51KFdlYktpdENvbnRleHRNZW51KiwgR2RrRXZlbnQqLCBXZWJLaXRI
aXRUZXN0UmVzdWx0KikgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGNvbnRleHRNZW51RGlzbWlz
c2VkKCkKLSAgICB7Ci0gICAgICAgIHF1aXRNYWluTG9vcCgpOwotICAgIH0KLQotICAgIEd0a01l
bnUqIGdldFBvcHVwTWVudSgpCi0gICAgewotICAgICAgICBHT3duUHRyPEdMaXN0PiB0b3BsZXZl
bHMoZ3RrX3dpbmRvd19saXN0X3RvcGxldmVscygpKTsKLSAgICAgICAgZm9yIChHTGlzdCogaXRl
ciA9IHRvcGxldmVscy5nZXQoKTsgaXRlcjsgaXRlciA9IGdfbGlzdF9uZXh0KGl0ZXIpKSB7Ci0g
ICAgICAgICAgICBpZiAoIUdUS19JU19XSU5ET1coaXRlci0+ZGF0YSkpCi0gICAgICAgICAgICAg
ICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIEd0a1dpZGdldCogY2hpbGQgPSBndGtfYmluX2dl
dF9jaGlsZChHVEtfQklOKGl0ZXItPmRhdGEpKTsKLSAgICAgICAgICAgIGlmICghR1RLX0lTX01F
TlUoY2hpbGQpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBpZiAo
Z3RrX21lbnVfZ2V0X2F0dGFjaF93aWRnZXQoR1RLX01FTlUoY2hpbGQpKSA9PSBHVEtfV0lER0VU
KG1fd2ViVmlldykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdUS19NRU5VKGNoaWxkKTsKLSAg
ICAgICAgfQotICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAgICAgICByZXR1cm4g
MDsKLSAgICB9Ci0KLSAgICBib29sIHNob3VsZFNob3dJbnB1dE1ldGhvZHNNZW51KCkKLSAgICB7
Ci0gICAgICAgIEd0a1NldHRpbmdzKiBzZXR0aW5ncyA9IGd0a193aWRnZXRfZ2V0X3NldHRpbmdz
KEdUS19XSURHRVQobV93ZWJWaWV3KSk7Ci0gICAgICAgIGlmICghc2V0dGluZ3MpCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICBnYm9vbGVhbiBzaG93SW5wdXRNZXRob2RNZW51
OwotICAgICAgICBnX29iamVjdF9nZXQoc2V0dGluZ3MsICJndGstc2hvdy1pbnB1dC1tZXRob2Qt
bWVudSIsICZzaG93SW5wdXRNZXRob2RNZW51LCBOVUxMKTsKLSAgICAgICAgcmV0dXJuIHNob3dJ
bnB1dE1ldGhvZE1lbnU7Ci0gICAgfQotCi0gICAgdm9pZCBjaGVja0FjdGlvblN0YXRlKEd0a0Fj
dGlvbiogYWN0aW9uLCB1bnNpZ25lZCBzdGF0ZSkKLSAgICB7Ci0gICAgICAgIGlmIChzdGF0ZSAm
IFZpc2libGUpCi0gICAgICAgICAgICBnX2Fzc2VydChndGtfYWN0aW9uX2dldF92aXNpYmxlKGFj
dGlvbikpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBnX2Fzc2VydCghZ3RrX2FjdGlvbl9n
ZXRfdmlzaWJsZShhY3Rpb24pKTsKLQotICAgICAgICBpZiAoc3RhdGUgJiBFbmFibGVkKQotICAg
ICAgICAgICAgZ19hc3NlcnQoZ3RrX2FjdGlvbl9nZXRfc2Vuc2l0aXZlKGFjdGlvbikpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBnX2Fzc2VydCghZ3RrX2FjdGlvbl9nZXRfc2Vuc2l0aXZl
KGFjdGlvbikpOwotCi0gICAgICAgIGlmIChHVEtfSVNfVE9HR0xFX0FDVElPTihhY3Rpb24pKSB7
Ci0gICAgICAgICAgICBpZiAoc3RhdGUgJiBDaGVja2VkKQotICAgICAgICAgICAgICAgIGdfYXNz
ZXJ0KGd0a190b2dnbGVfYWN0aW9uX2dldF9hY3RpdmUoR1RLX1RPR0dMRV9BQ1RJT04oYWN0aW9u
KSkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGdfYXNzZXJ0KCFndGtfdG9n
Z2xlX2FjdGlvbl9nZXRfYWN0aXZlKEdUS19UT0dHTEVfQUNUSU9OKGFjdGlvbikpKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIEdMaXN0KiBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFu
ZEdldE5leHQoR0xpc3QqIGl0ZW1zLCBXZWJLaXRDb250ZXh0TWVudUFjdGlvbiBzdG9ja0FjdGlv
biwgdW5zaWduZWQgc3RhdGUpCi0gICAgewotICAgICAgICBnX2Fzc2VydChpdGVtcyk7Ci0gICAg
ICAgIGdfYXNzZXJ0KFdFQktJVF9JU19DT05URVhUX01FTlVfSVRFTShpdGVtcy0+ZGF0YSkpOwot
Ci0gICAgICAgIFdlYktpdENvbnRleHRNZW51SXRlbSogaXRlbSA9IFdFQktJVF9DT05URVhUX01F
TlVfSVRFTShpdGVtcy0+ZGF0YSk7Ci0gICAgICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5U
ZXN0RmluaXNoZXMoR19PQkpFQ1QoaXRlbSkpOwotCi0gICAgICAgIEd0a0FjdGlvbiogYWN0aW9u
ID0gd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9hY3Rpb24oaXRlbSk7Ci0gICAgICAgIGdf
YXNzZXJ0KEdUS19JU19BQ1RJT04oYWN0aW9uKSk7Ci0KLSAgICAgICAgZ19hc3NlcnRfY21waW50
KHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRfc3RvY2tfYWN0aW9uKGl0ZW0pLCA9PSwgc3Rv
Y2tBY3Rpb24pOwotCi0gICAgICAgIGNoZWNrQWN0aW9uU3RhdGUoYWN0aW9uLCBzdGF0ZSk7Ci0K
LSAgICAgICAgcmV0dXJuIGdfbGlzdF9uZXh0KGl0ZW1zKTsKLSAgICB9Ci0KLSAgICBHTGlzdCog
Y2hlY2tDdXJyZW50SXRlbUlzQ3VzdG9tQWN0aW9uQW5kR2V0TmV4dChHTGlzdCogaXRlbXMsIGNv
bnN0IGNoYXIqIGxhYmVsLCB1bnNpZ25lZCBzdGF0ZSkKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0
KGl0ZW1zKTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX0NPTlRFWFRfTUVOVV9JVEVNKGl0
ZW1zLT5kYXRhKSk7Ci0KLSAgICAgICAgV2ViS2l0Q29udGV4dE1lbnVJdGVtKiBpdGVtID0gV0VC
S0lUX0NPTlRFWFRfTUVOVV9JVEVNKGl0ZW1zLT5kYXRhKTsKLSAgICAgICAgYXNzZXJ0T2JqZWN0
SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChpdGVtKSk7Ci0KLSAgICAgICAgR3Rr
QWN0aW9uKiBhY3Rpb24gPSB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X2FjdGlvbihpdGVt
KTsKLSAgICAgICAgZ19hc3NlcnQoR1RLX0lTX0FDVElPTihhY3Rpb24pKTsKLQotICAgICAgICBn
X2Fzc2VydF9jbXBpbnQod2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9zdG9ja19hY3Rpb24o
aXRlbSksID09LCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DVVNUT00pOwotICAgICAgICBn
X2Fzc2VydF9jbXBzdHIoZ3RrX2FjdGlvbl9nZXRfbGFiZWwoYWN0aW9uKSwgPT0sIGxhYmVsKTsK
LQotICAgICAgICBjaGVja0FjdGlvblN0YXRlKGFjdGlvbiwgc3RhdGUpOwotCi0gICAgICAgIHJl
dHVybiBnX2xpc3RfbmV4dChpdGVtcyk7Ci0gICAgfQotCi0gICAgR0xpc3QqIGNoZWNrQ3VycmVu
dEl0ZW1Jc1N1Yk1lbnVBbmRHZXROZXh0KEdMaXN0KiBpdGVtcywgY29uc3QgY2hhciogbGFiZWws
IHVuc2lnbmVkIHN0YXRlLCBHTGlzdCoqIHN1Yk1lbnVJdGVyKQotICAgIHsKLSAgICAgICAgZ19h
c3NlcnQoaXRlbXMpOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfQ09OVEVYVF9NRU5VX0lU
RU0oaXRlbXMtPmRhdGEpKTsKLQotICAgICAgICBXZWJLaXRDb250ZXh0TWVudUl0ZW0qIGl0ZW0g
PSBXRUJLSVRfQ09OVEVYVF9NRU5VX0lURU0oaXRlbXMtPmRhdGEpOwotICAgICAgICBhc3NlcnRP
YmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKGl0ZW0pKTsKLQotICAgICAg
ICBHdGtBY3Rpb24qIGFjdGlvbiA9IHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRfYWN0aW9u
KGl0ZW0pOwotICAgICAgICBnX2Fzc2VydChHVEtfSVNfQUNUSU9OKGFjdGlvbikpOwotCi0gICAg
ICAgIGdfYXNzZXJ0X2NtcHN0cihndGtfYWN0aW9uX2dldF9sYWJlbChhY3Rpb24pLCA9PSwgbGFi
ZWwpOwotICAgICAgICBjaGVja0FjdGlvblN0YXRlKGFjdGlvbiwgc3RhdGUpOwotCi0gICAgICAg
IFdlYktpdENvbnRleHRNZW51KiBzdWJNZW51ID0gd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dl
dF9zdWJtZW51KGl0ZW0pOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfQ09OVEVYVF9NRU5V
KHN1Yk1lbnUpKTsKLSAgICAgICAgaWYgKHN1Yk1lbnVJdGVyKQotICAgICAgICAgICAgKnN1Yk1l
bnVJdGVyID0gd2Via2l0X2NvbnRleHRfbWVudV9nZXRfaXRlbXMoc3ViTWVudSk7Ci0KLSAgICAg
ICAgcmV0dXJuIGdfbGlzdF9uZXh0KGl0ZW1zKTsKLSAgICB9Ci0KLSAgICBHTGlzdCogY2hlY2tD
dXJyZW50SXRlbUlzU2VwYXJhdG9yQW5kR2V0TmV4dChHTGlzdCogaXRlbXMpCi0gICAgewotICAg
ICAgICBnX2Fzc2VydChpdGVtcyk7Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19DT05URVhU
X01FTlVfSVRFTShpdGVtcy0+ZGF0YSkpOwotCi0gICAgICAgIFdlYktpdENvbnRleHRNZW51SXRl
bSogaXRlbSA9IFdFQktJVF9DT05URVhUX01FTlVfSVRFTShpdGVtcy0+ZGF0YSk7Ci0gICAgICAg
IGdfYXNzZXJ0KHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9pc19zZXBhcmF0b3IoaXRlbSkpOwot
Ci0gICAgICAgIHJldHVybiBnX2xpc3RfbmV4dChpdGVtcyk7Ci0gICAgfQotCi0gICAgc3RhdGlj
IGdib29sZWFuIGRvUmlnaHRDbGlja0lkbGVDYWxsYmFjayhDb250ZXh0TWVudVRlc3QqIHRlc3Qp
Ci0gICAgewotICAgICAgICB0ZXN0LT5jbGlja01vdXNlQnV0dG9uKHRlc3QtPm1fbWVudVBvc2l0
aW9uWCwgdGVzdC0+bV9tZW51UG9zaXRpb25ZLCAzKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOwot
ICAgIH0KLQotICAgIHZvaWQgc2hvd0NvbnRleHRNZW51QXRQb3NpdGlvbkFuZFdhaXRVbnRpbEZp
bmlzaGVkKGludCB4LCBpbnQgeSkKLSAgICB7Ci0gICAgICAgIG1fbWVudVBvc2l0aW9uWCA9IHg7
Ci0gICAgICAgIG1fbWVudVBvc2l0aW9uWSA9IHk7Ci0gICAgICAgIGdfaWRsZV9hZGQocmVpbnRl
cnByZXRfY2FzdDxHU291cmNlRnVuYz4oZG9SaWdodENsaWNrSWRsZUNhbGxiYWNrKSwgdGhpcyk7
Ci0gICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAgICB9Ci0KLSAgICB2b2lk
IHNob3dDb250ZXh0TWVudUFuZFdhaXRVbnRpbEZpbmlzaGVkKCkKLSAgICB7Ci0gICAgICAgIHNo
b3dDb250ZXh0TWVudUF0UG9zaXRpb25BbmRXYWl0VW50aWxGaW5pc2hlZCgwLCAwKTsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgZ2Jvb2xlYW4gc2ltdWxhdGVFc2NLZXlJZGxlQ2FsbGJhY2soQ29udGV4
dE1lbnVUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+a2V5U3Ryb2tlKEdES19LRVlf
RXNjYXBlKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQotICAgIHZvaWQgZGlzbWlz
c0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmluaXNoZWQoKQotICAgIHsKLSAgICAgICAgZ19pZGxl
X2FkZChyZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihzaW11bGF0ZUVzY0tleUlkbGVDYWxs
YmFjayksIHRoaXMpOwotICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Ci0gICAg
fQotCi0gICAgZG91YmxlIG1fbWVudVBvc2l0aW9uWDsKLSAgICBkb3VibGUgbV9tZW51UG9zaXRp
b25ZOwotfTsKLQotY2xhc3MgQ29udGV4dE1lbnVEZWZhdWx0VGVzdDogcHVibGljIENvbnRleHRN
ZW51VGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShDb250ZXh0TWVu
dURlZmF1bHRUZXN0KTsKLQotICAgIGVudW0gRGVmYXVsdE1lbnVUeXBlIHsKLSAgICAgICAgTmF2
aWdhdGlvbiwKLSAgICAgICAgTGluaywKLSAgICAgICAgSW1hZ2UsCi0gICAgICAgIExpbmtJbWFn
ZSwKLSAgICAgICAgVmlkZW8sCi0gICAgICAgIEF1ZGlvLAotICAgICAgICBFZGl0YWJsZQotICAg
IH07Ci0KLSAgICBDb250ZXh0TWVudURlZmF1bHRUZXN0KCkKLSAgICAgICAgOiBtX2V4cGVjdGVk
TWVudVR5cGUoTmF2aWdhdGlvbikKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBjb250ZXh0TWVu
dShXZWJLaXRDb250ZXh0TWVudSogY29udGV4dE1lbnUsIEdka0V2ZW50KiBldmVudCwgV2ViS2l0
SGl0VGVzdFJlc3VsdCogaGl0VGVzdFJlc3VsdCkKLSAgICB7Ci0gICAgICAgIEdMaXN0KiBpdGVy
ID0gd2Via2l0X2NvbnRleHRfbWVudV9nZXRfaXRlbXMoY29udGV4dE1lbnUpOwotCi0gICAgICAg
IHN3aXRjaCAobV9leHBlY3RlZE1lbnVUeXBlKSB7Ci0gICAgICAgIGNhc2UgTmF2aWdhdGlvbjoK
LSAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNf
bGluayhoaXRUZXN0UmVzdWx0KSk7Ci0gICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90
ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQpKTsKLSAgICAgICAgICAg
IGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbWVkaWEoaGl0VGVz
dFJlc3VsdCkpOwotICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRf
Y29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgICAgICAgICBpdGVyID0g
Y2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05U
RVhUX01FTlVfQUNUSU9OX0dPX0JBQ0ssIFZpc2libGUpOwotICAgICAgICAgICAgaXRlciA9IGNo
ZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVY
VF9NRU5VX0FDVElPTl9HT19GT1JXQVJELCBWaXNpYmxlKTsKLSAgICAgICAgICAgIGl0ZXIgPSBj
aGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fU1RPUCwgVmlzaWJsZSk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tD
dXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01F
TlVfQUNUSU9OX1JFTE9BRCwgVmlzaWJsZSB8IEVuYWJsZWQpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgTGluazoKLSAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVz
dF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RSZXN1bHQpKTsKLSAgICAgICAgICAgIGdf
YXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJl
c3VsdCkpOwotICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29u
dGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgICAgICAgICBnX2Fzc2VydCghd2Vi
a2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsK
LSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5l
eHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9MSU5LLCBWaXNpYmxlIHwg
RW5hYmxlZCk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rp
b25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5fTElOS19J
Tl9ORVdfV0lORE9XLCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgICAgICBpdGVyID0gY2hl
Y2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhU
X01FTlVfQUNUSU9OX0RPV05MT0FEX0xJTktfVE9fRElTSywgVmlzaWJsZSB8IEVuYWJsZWQpOwot
ICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4
dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX0xJTktfVE9fQ0xJUEJPQVJE
LCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJ
bWFnZToKLSAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRl
eHRfaXNfbGluayhoaXRUZXN0UmVzdWx0KSk7Ci0gICAgICAgICAgICBnX2Fzc2VydCh3ZWJraXRf
aGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkpOwotICAgICAg
ICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYSho
aXRUZXN0UmVzdWx0KSk7Ci0gICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jl
c3VsdF9jb250ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKLSAgICAgICAgICAgIGl0
ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lU
X0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9JTUFHRV9JTl9ORVdfV0lORE9XLCBWaXNpYmxlIHwg
RW5hYmxlZCk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rp
b25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0RPV05MT0FEX0lN
QUdFX1RPX0RJU0ssIFZpc2libGUgfCBFbmFibGVkKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVj
a0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRf
TUVOVV9BQ1RJT05fQ09QWV9JTUFHRV9UT19DTElQQk9BUkQsIFZpc2libGUgfCBFbmFibGVkKTsK
LSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5l
eHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9JTUFHRV9VUkxfVE9fQ0xJ
UEJPQVJELCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBMaW5rSW1hZ2U6Ci0gICAgICAgICAgICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVz
dWx0X2NvbnRleHRfaXNfbGluayhoaXRUZXN0UmVzdWx0KSk7Ci0gICAgICAgICAgICBnX2Fzc2Vy
dCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkp
OwotICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9p
c19tZWRpYShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hp
dF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKLSAgICAg
ICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRl
ciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9MSU5LLCBWaXNpYmxlIHwgRW5hYmxl
ZCk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRH
ZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5fTElOS19JTl9ORVdf
V0lORE9XLCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJy
ZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVf
QUNUSU9OX0RPV05MT0FEX0xJTktfVE9fRElTSywgVmlzaWJsZSB8IEVuYWJsZWQpOwotICAgICAg
ICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVy
LCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX0xJTktfVE9fQ0xJUEJPQVJELCBWaXNp
YmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU2Vw
YXJhdG9yQW5kR2V0TmV4dChpdGVyKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJ
dGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T05fT1BFTl9JTUFHRV9JTl9ORVdfV0lORE9XLCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAg
ICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIs
IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0RPV05MT0FEX0lNQUdFX1RPX0RJU0ssIFZpc2li
bGUgfCBFbmFibGVkKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9j
a0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9J
TUFHRV9UT19DTElQQk9BUkQsIFZpc2libGUgfCBFbmFibGVkKTsKLSAgICAgICAgICAgIGl0ZXIg
PSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NP
TlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9JTUFHRV9VUkxfVE9fQ0xJUEJPQVJELCBWaXNpYmxlIHwg
RW5hYmxlZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBWaWRlbzoKLSAgICAg
ICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluayho
aXRUZXN0UmVzdWx0KSk7Ci0gICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jl
c3VsdF9jb250ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQpKTsKLSAgICAgICAgICAgIGdfYXNz
ZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0
KSk7Ci0gICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0
X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1
cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVO
VV9BQ1RJT05fTUVESUFfUExBWSwgVmlzaWJsZSB8IEVuYWJsZWQpOwotICAgICAgICAgICAgaXRl
ciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRf
Q09OVEVYVF9NRU5VX0FDVElPTl9NRURJQV9NVVRFLCBWaXNpYmxlKTsKLSAgICAgICAgICAgIGl0
ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lU
X0NPTlRFWFRfTUVOVV9BQ1RJT05fVE9HR0xFX01FRElBX0NPTlRST0xTLCBWaXNpYmxlIHwgRW5h
YmxlZCB8IENoZWNrZWQpOwotICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0
b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9UT0dH
TEVfTUVESUFfTE9PUCwgVmlzaWJsZSB8IEVuYWJsZWQpOwotICAgICAgICAgICAgaXRlciA9IGNo
ZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVY
VF9NRU5VX0FDVElPTl9FTlRFUl9WSURFT19GVUxMU0NSRUVOLCBWaXNpYmxlIHwgRW5hYmxlZCk7
Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU2VwYXJhdG9yQW5kR2V0TmV4
dChpdGVyKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlv
bkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9WSURFT19M
SU5LX1RPX0NMSVBCT0FSRCwgVmlzaWJsZSB8IEVuYWJsZWQpOwotICAgICAgICAgICAgaXRlciA9
IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09O
VEVYVF9NRU5VX0FDVElPTl9PUEVOX1ZJREVPX0lOX05FV19XSU5ET1csIFZpc2libGUgfCBFbmFi
bGVkKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFu
ZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRE9XTkxPQURfVklERU9f
VE9fRElTSywgVmlzaWJsZSB8IEVuYWJsZWQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQXVkaW86Ci0gICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3Vs
dF9jb250ZXh0X2lzX2xpbmsoaGl0VGVzdFJlc3VsdCkpOwotICAgICAgICAgICAgZ19hc3NlcnQo
IXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0KSk7
Ci0gICAgICAgICAgICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNf
bWVkaWEoaGl0VGVzdFJlc3VsdCkpOwotICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRf
dGVzdF9yZXN1bHRfY29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgICAg
ICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIs
IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX01FRElBX1BMQVksIFZpc2libGUgfCBFbmFibGVk
KTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdl
dE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fTUVESUFfTVVURSwgVmlzaWJs
ZSk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRH
ZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1RPR0dMRV9NRURJQV9DT05U
Uk9MUywgVmlzaWJsZSB8IEVuYWJsZWQgfCBDaGVja2VkKTsKLSAgICAgICAgICAgIGl0ZXIgPSBj
aGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fVE9HR0xFX01FRElBX0xPT1AsIFZpc2libGUgfCBFbmFibGVkKTsKLSAg
ICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQo
aXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRU5URVJfVklERU9fRlVMTFNDUkVFTiwg
VmlzaWJsZSk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU2VwYXJhdG9y
QW5kR2V0TmV4dChpdGVyKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNT
dG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09Q
WV9BVURJT19MSU5LX1RPX0NMSVBCT0FSRCwgVmlzaWJsZSB8IEVuYWJsZWQpOwotICAgICAgICAg
ICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0FVRElPX0lOX05FV19XSU5ET1csIFZpc2li
bGUgfCBFbmFibGVkKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9j
a0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRE9XTkxP
QURfQVVESU9fVE9fRElTSywgVmlzaWJsZSB8IEVuYWJsZWQpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgRWRpdGFibGU6Ci0gICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hp
dF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xpbmsoaGl0VGVzdFJlc3VsdCkpOwotICAgICAgICAg
ICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFnZShoaXRU
ZXN0UmVzdWx0KSk7Ci0gICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3Vs
dF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQpKTsKLSAgICAgICAgICAgIGdfYXNzZXJ0
KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0UmVzdWx0
KSk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRH
ZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NVVCwgVmlzaWJsZSk7Ci0g
ICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0
KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFksIFZpc2libGUpOwotICAgICAg
ICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVy
LCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9QQVNURSwgVmlzaWJsZSB8IEVuYWJsZWQpOwot
ICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4
dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9ERUxFVEUsIFZpc2libGUpOwotICAg
ICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1NlcGFyYXRvckFuZEdldE5leHQoaXRl
cik7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRH
ZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1NFTEVDVF9BTEwsIFZpc2li
bGUgfCBFbmFibGVkKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTZXBh
cmF0b3JBbmRHZXROZXh0KGl0ZXIpOwotICAgICAgICAgICAgaWYgKHNob3VsZFNob3dJbnB1dE1l
dGhvZHNNZW51KCkpCi0gICAgICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0
b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9JTlBV
VF9NRVRIT0RTLCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tD
dXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01F
TlVfQUNUSU9OX1VOSUNPREUsIFZpc2libGUgfCBFbmFibGVkKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmICh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9kZXZl
bG9wZXJfZXh0cmFzKHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3MobV93ZWJWaWV3KSkpIHsK
LSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTZXBhcmF0b3JBbmRHZXROZXh0
KGl0ZXIpOwotICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9u
QW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9JTlNQRUNUX0VMRU1F
TlQsIFZpc2libGUgfCBFbmFibGVkKTsKLSAgICAgICAgfQotICAgICAgICBnX2Fzc2VydCghaXRl
cik7Ci0KLSAgICAgICAgcXVpdE1haW5Mb29wKCk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotCi0gICAgRGVmYXVsdE1lbnVUeXBlIG1fZXhwZWN0ZWRNZW51VHlwZTsKLX07Ci0KLXN0
YXRpYyB2b2lkIHRlc3RDb250ZXh0TWVudURlZmF1bHRNZW51KENvbnRleHRNZW51RGVmYXVsdFRl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2Fp
dFVudGlsTWFwcGVkKCk7Ci0KLSAgICBjb25zdCBjaGFyKiBsaW5rc0hUTUwgPQotICAgICAgICAi
PGh0bWw+PGJvZHk+IgotICAgICAgICAiIDxhIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVm
dDoxOyB0b3A6MScgaHJlZj0naHR0cDovL3d3dy53ZWJraXRndGsub3JnJyB0aXRsZT0nV2ViS2l0
R1RLKyBUaXRsZSc+V2ViS2l0R1RLKyBXZWJzaXRlPC9hPiIKLSAgICAgICAgIiA8aW1nIHN0eWxl
PSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6MTAnIHNyYz0nMHhkZWFkYmVlZicgd2lk
dGg9NSBoZWlnaHQ9NT48L2ltZz4iCi0gICAgICAgICIgPGEgc3R5bGU9J3Bvc2l0aW9uOmFic29s
dXRlOyBsZWZ0OjE7IHRvcDoyMCcgaHJlZj0naHR0cDovL3d3dy53ZWJraXRndGsub3JnL2xvZ28n
IHRpdGxlPSdXZWJLaXRHVEsrIExvZ28nPjxpbWcgc3JjPScweGRlYWRiZWVmJyB3aWR0aD01IGhl
aWdodD01PjwvaW1nPjwvYT4iCi0gICAgICAgICIgPGlucHV0IHN0eWxlPSdwb3NpdGlvbjphYnNv
bHV0ZTsgbGVmdDoxOyB0b3A6MzAnIHNpemU9JzEwJz48L2lucHV0PiIKLSAgICAgICAgIiA8dmlk
ZW8gc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRvcDo1MCcgd2lkdGg9JzMwMCcg
aGVpZ2h0PSczMDAnIGNvbnRyb2xzPSdjb250cm9scycgcHJlbG9hZD0nbm9uZSc+PHNvdXJjZSBz
cmM9J21vdmllLm9nZycgdHlwZT0ndmlkZW8vb2dnJyAvPjwvdmlkZW8+IgotICAgICAgICAiIDxh
dWRpbyBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjYwJyB3aWR0aD0nNTAn
IGhlaWdodD0nMjAnIGNvbnRyb2xzPSdjb250cm9scycgcHJlbG9hZD0nbm9uZSc+PHNvdXJjZSBz
cmM9J3RyYWNrLm1wMycgdHlwZT0nYXVkaW8vbXAzJyAvPjwvYXVkaW8+IgotICAgICAgICAiPC9i
b2R5PjwvaHRtbD4iOwotICAgIHRlc3QtPmxvYWRIdG1sKGxpbmtzSFRNTCwgImZpbGU6Ly8vIik7
Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICAvLyBDb250ZXh0IG1l
bnUgZm9yIGRvY3VtZW50LgotICAgIHRlc3QtPm1fZXhwZWN0ZWRNZW51VHlwZSA9IENvbnRleHRN
ZW51RGVmYXVsdFRlc3Q6Ok5hdmlnYXRpb247Ci0gICAgdGVzdC0+c2hvd0NvbnRleHRNZW51QXRQ
b3NpdGlvbkFuZFdhaXRVbnRpbEZpbmlzaGVkKDAsIDApOwotCi0gICAgLy8gQ29udGV4dCBtZW51
IGZvciBsaW5rLgotICAgIHRlc3QtPm1fZXhwZWN0ZWRNZW51VHlwZSA9IENvbnRleHRNZW51RGVm
YXVsdFRlc3Q6Okxpbms7Ci0gICAgdGVzdC0+c2hvd0NvbnRleHRNZW51QXRQb3NpdGlvbkFuZFdh
aXRVbnRpbEZpbmlzaGVkKDEsIDEpOwotCi0gICAgLy8gQ29udGV4dCBtZW51IGZvciBpbWFnZS4K
LSAgICB0ZXN0LT5tX2V4cGVjdGVkTWVudVR5cGUgPSBDb250ZXh0TWVudURlZmF1bHRUZXN0OjpJ
bWFnZTsKLSAgICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBdFBvc2l0aW9uQW5kV2FpdFVudGlsRmlu
aXNoZWQoMSwgMTApOwotCi0gICAgLy8gRW5hYmxlIGRldmVsb3BlciBleHRyYXMgbm93LCBzbyB0
aGF0IGluc3BlY3RvciBlbGVtZW50Ci0gICAgLy8gd2lsbCBiZSBzaG93biBpbiB0aGUgZGVmYXVs
dCBjb250ZXh0IG1lbnUuCi0gICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfZGV2ZWxvcGVy
X2V4dHJhcyh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHRlc3QtPm1fd2ViVmlldyksIFRS
VUUpOwotCi0gICAgLy8gQ29udGV4dCBtZW51IGZvciBpbWFnZSBsaW5rLgotICAgIHRlc3QtPm1f
ZXhwZWN0ZWRNZW51VHlwZSA9IENvbnRleHRNZW51RGVmYXVsdFRlc3Q6OkxpbmtJbWFnZTsKLSAg
ICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBdFBvc2l0aW9uQW5kV2FpdFVudGlsRmluaXNoZWQoMSwg
MjApOwotCi0gICAgLy8gQ29udGV4dCBtZW51IGZvciB2aWRlby4KLSAgICB0ZXN0LT5tX2V4cGVj
dGVkTWVudVR5cGUgPSBDb250ZXh0TWVudURlZmF1bHRUZXN0OjpWaWRlbzsKLSAgICB0ZXN0LT5z
aG93Q29udGV4dE1lbnVBdFBvc2l0aW9uQW5kV2FpdFVudGlsRmluaXNoZWQoMSwgNTApOwotCi0g
ICAgLy8gQ29udGV4dCBtZW51IGZvciBhdWRpby4KLSAgICB0ZXN0LT5tX2V4cGVjdGVkTWVudVR5
cGUgPSBDb250ZXh0TWVudURlZmF1bHRUZXN0OjpBdWRpbzsKLSAgICB0ZXN0LT5zaG93Q29udGV4
dE1lbnVBdFBvc2l0aW9uQW5kV2FpdFVudGlsRmluaXNoZWQoMSwgNjApOwotCi0gICAgLy8gQ29u
dGV4dCBtZW51IGZvciBlZGl0YWJsZS4KLSAgICB0ZXN0LT5tX2V4cGVjdGVkTWVudVR5cGUgPSBD
b250ZXh0TWVudURlZmF1bHRUZXN0OjpFZGl0YWJsZTsKLSAgICB0ZXN0LT5zaG93Q29udGV4dE1l
bnVBdFBvc2l0aW9uQW5kV2FpdFVudGlsRmluaXNoZWQoNSwgMzUpOwotfQotCi1jbGFzcyBDb250
ZXh0TWVudUN1c3RvbVRlc3Q6IHB1YmxpYyBDb250ZXh0TWVudVRlc3QgewotcHVibGljOgotICAg
IE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoQ29udGV4dE1lbnVDdXN0b21UZXN0KTsKLQotICAgIENv
bnRleHRNZW51Q3VzdG9tVGVzdCgpCi0gICAgICAgIDogbV9pdGVtVG9BY3RpdmF0ZUxhYmVsKDAp
Ci0gICAgICAgICwgbV9hY3RpdmF0ZWQoZmFsc2UpCi0gICAgICAgICwgbV90b2dnbGVkKGZhbHNl
KQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGNvbnRleHRNZW51KFdlYktpdENvbnRleHRNZW51
KiBjb250ZXh0TWVudSwgR2RrRXZlbnQqLCBXZWJLaXRIaXRUZXN0UmVzdWx0KiBoaXRUZXN0UmVz
dWx0KQotICAgIHsKLSAgICAgICAgLy8gQXBwZW5kIG91ciBjdXN0b20gaXRlbSB0byB0aGUgZGVm
YXVsdCBtZW51LgotICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVu
dSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ldyhtX2FjdGlvbi5nZXQoKSkpOwotICAgICAg
ICBxdWl0TWFpbkxvb3AoKTsKLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
R3RrTWVudUl0ZW0qIGdldE1lbnVJdGVtKEd0a01lbnUqIG1lbnUsIGNvbnN0IGdjaGFyKiBpdGVt
TGFiZWwpCi0gICAgewotICAgICAgICBHT3duUHRyPEdMaXN0PiBpdGVtcyhndGtfY29udGFpbmVy
X2dldF9jaGlsZHJlbihHVEtfQ09OVEFJTkVSKG1lbnUpKSk7Ci0gICAgICAgIGZvciAoR0xpc3Qq
IGl0ZXIgPSBpdGVtcy5nZXQoKTsgaXRlcjsgaXRlciA9IGdfbGlzdF9uZXh0KGl0ZXIpKSB7Ci0g
ICAgICAgICAgICBHdGtNZW51SXRlbSogY2hpbGQgPSBHVEtfTUVOVV9JVEVNKGl0ZXItPmRhdGEp
OwotICAgICAgICAgICAgaWYgKGdfc3RyX2VxdWFsKGl0ZW1MYWJlbCwgZ3RrX21lbnVfaXRlbV9n
ZXRfbGFiZWwoY2hpbGQpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQ7Ci0gICAgICAg
IH0KLSAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQotCi0gICAgdm9pZCBhY3RpdmF0ZU1lbnVJdGVtKCkKLSAgICB7Ci0gICAgICAgIGdfYXNz
ZXJ0KG1faXRlbVRvQWN0aXZhdGVMYWJlbCk7Ci0gICAgICAgIEd0a01lbnUqIG1lbnUgPSBnZXRQ
b3B1cE1lbnUoKTsKLSAgICAgICAgR3RrTWVudUl0ZW0qIGl0ZW0gPSBnZXRNZW51SXRlbShtZW51
LCBtX2l0ZW1Ub0FjdGl2YXRlTGFiZWwpOwotICAgICAgICBndGtfbWVudV9zaGVsbF9hY3RpdmF0
ZV9pdGVtKEdUS19NRU5VX1NIRUxMKG1lbnUpLCBHVEtfV0lER0VUKGl0ZW0pLCBUUlVFKTsKLSAg
ICAgICAgbV9pdGVtVG9BY3RpdmF0ZUxhYmVsID0gMDsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZ2Jv
b2xlYW4gYWN0aXZhdGVNZW51SXRlbUlkbGVDYWxsYmFjayhncG9pbnRlciB1c2VyRGF0YSkKLSAg
ICB7Ci0gICAgICAgIENvbnRleHRNZW51Q3VzdG9tVGVzdCogdGVzdCA9IHN0YXRpY19jYXN0PENv
bnRleHRNZW51Q3VzdG9tVGVzdCo+KHVzZXJEYXRhKTsKLSAgICAgICAgdGVzdC0+YWN0aXZhdGVN
ZW51SXRlbSgpOwotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gICAgdm9pZCBhY3Rp
dmF0ZUN1c3RvbU1lbnVJdGVtQW5kV2FpdFVudGlsQWN0aXZhdGVkKGNvbnN0IGNoYXIqIGFjdGlv
bkxhYmVsKQotICAgIHsKLSAgICAgICAgbV9hY3RpdmF0ZWQgPSBtX3RvZ2dsZWQgPSBmYWxzZTsK
LSAgICAgICAgbV9pdGVtVG9BY3RpdmF0ZUxhYmVsID0gYWN0aW9uTGFiZWw7Ci0gICAgICAgIGdf
aWRsZV9hZGQoYWN0aXZhdGVNZW51SXRlbUlkbGVDYWxsYmFjaywgdGhpcyk7Ci0gICAgICAgIGdf
bWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAgICB9Ci0KLSAgICB2b2lkIHRvZ2dsZUN1c3Rv
bU1lbnVJdGVtQW5kV2FpdFVudGlsVG9nZ2xlZChjb25zdCBjaGFyKiBhY3Rpb25MYWJlbCkKLSAg
ICB7Ci0gICAgICAgIGFjdGl2YXRlQ3VzdG9tTWVudUl0ZW1BbmRXYWl0VW50aWxBY3RpdmF0ZWQo
YWN0aW9uTGFiZWwpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGFjdGlvbkFjdGl2YXRlZENh
bGxiYWNrKEd0a0FjdGlvbiosIENvbnRleHRNZW51Q3VzdG9tVGVzdCogdGVzdCkKLSAgICB7Ci0g
ICAgICAgIHRlc3QtPm1fYWN0aXZhdGVkID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9p
ZCBhY3Rpb25Ub2dnbGVkQ2FsbGJhY2soR3RrQWN0aW9uKiwgQ29udGV4dE1lbnVDdXN0b21UZXN0
KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+bV90b2dnbGVkID0gdHJ1ZTsKLSAgICB9Ci0K
LSAgICB2b2lkIHNldEFjdGlvbihHdGtBY3Rpb24qIGFjdGlvbikKLSAgICB7Ci0gICAgICAgIG1f
YWN0aW9uID0gYWN0aW9uOwotICAgICAgICBpZiAoR1RLX0lTX1RPR0dMRV9BQ1RJT04oYWN0aW9u
KSkKLSAgICAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoYWN0aW9uLCAidG9nZ2xlZCIsIEdfQ0FM
TEJBQ0soYWN0aW9uVG9nZ2xlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoYWN0aW9uLCAiYWN0aXZhdGUiLCBHX0NBTExCQUNLKGFj
dGlvbkFjdGl2YXRlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgfQotCi0gICAgR1JlZlB0cjxHdGtB
Y3Rpb24+IG1fYWN0aW9uOwotICAgIGNvbnN0IGNoYXIqIG1faXRlbVRvQWN0aXZhdGVMYWJlbDsK
LSAgICBib29sIG1fYWN0aXZhdGVkOwotICAgIGJvb2wgbV90b2dnbGVkOwotfTsKLQotc3RhdGlj
IHZvaWQgdGVzdENvbnRleHRNZW51UG9wdWxhdGVNZW51KENvbnRleHRNZW51Q3VzdG9tVGVzdCog
dGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50
aWxNYXBwZWQoKTsKLQotICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keT5XZWJLaXRHVEsr
IENvbnRleHQgbWVudSB0ZXN0czwvYm9keT48L2h0bWw+IiwgImZpbGU6Ly8vIik7Ci0gICAgdGVz
dC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICAvLyBDcmVhdGUgYSBjdXN0b20gbWVu
dSBpdGVtLgotICAgIEdSZWZQdHI8R3RrQWN0aW9uPiBhY3Rpb24gPSBhZG9wdEdSZWYoZ3RrX2Fj
dGlvbl9uZXcoIldlYktpdEdUSytDdXN0b21BY3Rpb24iLCAiQ3VzdG9tIF9BY3Rpb24iLCAwLCAw
KSk7Ci0gICAgdGVzdC0+c2V0QWN0aW9uKGFjdGlvbi5nZXQoKSk7Ci0gICAgdGVzdC0+c2hvd0Nv
bnRleHRNZW51QW5kV2FpdFVudGlsRmluaXNoZWQoKTsKLSAgICB0ZXN0LT5hY3RpdmF0ZUN1c3Rv
bU1lbnVJdGVtQW5kV2FpdFVudGlsQWN0aXZhdGVkKGd0a19hY3Rpb25fZ2V0X2xhYmVsKGFjdGlv
bi5nZXQoKSkpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fYWN0aXZhdGVkKTsKLSAgICBnX2Fzc2Vy
dCghdGVzdC0+bV90b2dnbGVkKTsKLQotICAgIC8vIENyZWF0ZSBhIGN1c3RvbSB0b2dnbGUgbWVu
dSBpdGVtLgotICAgIEdSZWZQdHI8R3RrQWN0aW9uPiB0b2dnbGVBY3Rpb24gPSBhZG9wdEdSZWYo
R1RLX0FDVElPTihndGtfdG9nZ2xlX2FjdGlvbl9uZXcoIldlYktpdEdUSytDdXN0b21Ub2dnbGVB
Y3Rpb24iLCAiQ3VzdG9tIF9Ub2dnbGUgQWN0aW9uIiwgMCwgMCkpKTsKLSAgICB0ZXN0LT5zZXRB
Y3Rpb24odG9nZ2xlQWN0aW9uLmdldCgpKTsKLSAgICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBbmRX
YWl0VW50aWxGaW5pc2hlZCgpOwotICAgIHRlc3QtPnRvZ2dsZUN1c3RvbU1lbnVJdGVtQW5kV2Fp
dFVudGlsVG9nZ2xlZChndGtfYWN0aW9uX2dldF9sYWJlbCh0b2dnbGVBY3Rpb24uZ2V0KCkpKTsK
LSAgICBnX2Fzc2VydCghdGVzdC0+bV9hY3RpdmF0ZWQpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1f
dG9nZ2xlZCk7Ci19Ci0KLWNsYXNzIENvbnRleHRNZW51Q3VzdG9tRnVsbFRlc3Q6IHB1YmxpYyBD
b250ZXh0TWVudVRlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoQ29u
dGV4dE1lbnVDdXN0b21GdWxsVGVzdCk7Ci0KLSAgICBib29sIGNvbnRleHRNZW51KFdlYktpdENv
bnRleHRNZW51KiBjb250ZXh0TWVudSwgR2RrRXZlbnQqLCBXZWJLaXRIaXRUZXN0UmVzdWx0KikK
LSAgICB7Ci0gICAgICAgIC8vIENsZWFyIHByb3Bvc2VkIG1lbnUgYW5kIGJ1aWxkIG91ciBvd24u
Ci0gICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfcmVtb3ZlX2FsbChjb250ZXh0TWVudSk7Ci0g
ICAgICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfY29udGV4dF9tZW51X2dldF9uX2l0ZW1zKGNv
bnRleHRNZW51KSwgPT0sIDApOwotCi0gICAgICAgIC8vIEFkZCBhY3Rpb25zIGZyb20gc3RvY2su
Ci0gICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfcHJlcGVuZChjb250ZXh0TWVudSwgd2Via2l0
X2NvbnRleHRfbWVudV9pdGVtX25ld19mcm9tX3N0b2NrX2FjdGlvbihXRUJLSVRfQ09OVEVYVF9N
RU5VX0FDVElPTl9HT19CQUNLKSk7Ci0gICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5k
KGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X2Zyb21fc3RvY2tfYWN0
aW9uKFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0dPX0ZPUldBUkQpKTsKLSAgICAgICAgd2Vi
a2l0X2NvbnRleHRfbWVudV9pbnNlcnQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVf
aXRlbV9uZXdfc2VwYXJhdG9yKCksIDIpOwotCi0gICAgICAgIC8vIEFkZCBjdXN0b20gYWN0aW9u
cy4KLSAgICAgICAgR1JlZlB0cjxHdGtBY3Rpb24+IGFjdGlvbiA9IGFkb3B0R1JlZihndGtfYWN0
aW9uX25ldygiV2ViS2l0R1RLK0N1c3RvbUFjdGlvbiIsICJDdXN0b20gX0FjdGlvbiIsIDAsIDAp
KTsKLSAgICAgICAgZ3RrX2FjdGlvbl9zZXRfc2Vuc2l0aXZlKGFjdGlvbi5nZXQoKSwgRkFMU0Up
OwotICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2luc2VydChjb250ZXh0TWVudSwgd2Via2l0
X2NvbnRleHRfbWVudV9pdGVtX25ldyhhY3Rpb24uZ2V0KCkpLCAtMSk7Ci0gICAgICAgIEdSZWZQ
dHI8R3RrQWN0aW9uPiB0b2dnbGVBY3Rpb24gPSBhZG9wdEdSZWYoR1RLX0FDVElPTihndGtfdG9n
Z2xlX2FjdGlvbl9uZXcoIldlYktpdEdUSytDdXN0b21Ub2dnbGVBY3Rpb24iLCAiQ3VzdG9tIF9U
b2dnbGUgQWN0aW9uIiwgMCwgMCkpKTsKLSAgICAgICAgZ3RrX3RvZ2dsZV9hY3Rpb25fc2V0X2Fj
dGl2ZShHVEtfVE9HR0xFX0FDVElPTih0b2dnbGVBY3Rpb24uZ2V0KCkpLCBUUlVFKTsKLSAgICAg
ICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBlbmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0
X21lbnVfaXRlbV9uZXcodG9nZ2xlQWN0aW9uLmdldCgpKSk7Ci0gICAgICAgIHdlYmtpdF9jb250
ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3
X3NlcGFyYXRvcigpKTsKLQotICAgICAgICAvLyBBZGQgYSBzdWJtZW51LgotICAgICAgICBHUmVm
UHRyPFdlYktpdENvbnRleHRNZW51PiBzdWJNZW51ID0gYWRvcHRHUmVmKHdlYmtpdF9jb250ZXh0
X21lbnVfbmV3KCkpOwotICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlz
aGVzKEdfT0JKRUNUKHN1Yk1lbnUuZ2V0KCkpKTsKLSAgICAgICAgd2Via2l0X2NvbnRleHRfbWVu
dV9pbnNlcnQoc3ViTWVudS5nZXQoKSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19mcm9t
X3N0b2NrX2FjdGlvbl93aXRoX2xhYmVsKFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1NUT1As
ICJTdG9wIExvYWQiKSwgMCk7Ci0gICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfaW5zZXJ0KHN1
Yk1lbnUuZ2V0KCksIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfZnJvbV9zdG9ja19hY3Rp
b24oV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fUkVMT0FEKSwgLTEpOwotICAgICAgICB3ZWJr
aXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9p
dGVtX25ld193aXRoX3N1Ym1lbnUoIkxvYWQgb3B0aW9ucyIsIHN1Yk1lbnUuZ2V0KCkpKTsKLSAg
ICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBlbmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250
ZXh0X21lbnVfaXRlbV9uZXdfc2VwYXJhdG9yKCkpOwotCi0gICAgICAgIC8vIE1vdmUgTG9hZCBz
dWJtZW51IGJlZm9yZSBjdXN0b20gYWN0aW9ucy4KLSAgICAgICAgd2Via2l0X2NvbnRleHRfbWVu
dV9tb3ZlX2l0ZW0oY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfbGFzdChjb250ZXh0
TWVudSksIDMpOwotICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X21vdmVfaXRlbShjb250ZXh0
TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9sYXN0KGNvbnRleHRNZW51KSwgMyk7Ci0KLSAgICAg
ICAgLy8gSWYgbGFzdCBpdGVtIGlzIGEgc2VwYXJhdG9yLCByZW1vdmUgaXQuCi0gICAgICAgIGlm
ICh3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1faXNfc2VwYXJhdG9yKHdlYmtpdF9jb250ZXh0X21l
bnVfbGFzdChjb250ZXh0TWVudSkpKQotICAgICAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9y
ZW1vdmUoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfbGFzdChjb250ZXh0TWVudSkp
OwotCi0gICAgICAgIC8vIENoZWNrIHRoZSBtZW51LgotICAgICAgICBHTGlzdCogaXRlciA9IHdl
YmtpdF9jb250ZXh0X21lbnVfZ2V0X2l0ZW1zKGNvbnRleHRNZW51KTsKLQotICAgICAgICBpdGVy
ID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9D
T05URVhUX01FTlVfQUNUSU9OX0dPX0JBQ0ssIFZpc2libGUgfCBFbmFibGVkKTsKLSAgICAgICAg
aXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9HT19GT1JXQVJELCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0g
ICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTZXBhcmF0b3JBbmRHZXROZXh0KGl0ZXIp
OwotCi0gICAgICAgIEdMaXN0KiBzdWJNZW51SXRlciA9IDA7Ci0gICAgICAgIGl0ZXIgPSBjaGVj
a0N1cnJlbnRJdGVtSXNTdWJNZW51QW5kR2V0TmV4dChpdGVyLCAiTG9hZCBvcHRpb25zIiwgVmlz
aWJsZSB8IEVuYWJsZWQsICZzdWJNZW51SXRlcik7Ci0gICAgICAgIHN1Yk1lbnVJdGVyID0gY2hl
Y2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KHN1Yk1lbnVJdGVyLCBXRUJLSVRf
Q09OVEVYVF9NRU5VX0FDVElPTl9TVE9QLCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgIHN1
Yk1lbnVJdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KHN1Yk1l
bnVJdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9SRUxPQUQsIFZpc2libGUgfCBFbmFi
bGVkKTsKLSAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1NlcGFyYXRvckFuZEdldE5l
eHQoaXRlcik7Ci0KLSAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc0N1c3RvbUFjdGlv
bkFuZEdldE5leHQoaXRlciwgIkN1c3RvbSBfQWN0aW9uIiwgVmlzaWJsZSk7Ci0gICAgICAgIGl0
ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNDdXN0b21BY3Rpb25BbmRHZXROZXh0KGl0ZXIsICJDdXN0
b20gX1RvZ2dsZSBBY3Rpb24iLCBWaXNpYmxlIHwgRW5hYmxlZCB8IENoZWNrZWQpOwotICAgICAg
ICBnX2Fzc2VydCghaXRlcik7Ci0KLSAgICAgICAgcXVpdE1haW5Mb29wKCk7Ci0KLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotfTsKLQotc3RhdGljIHZvaWQgdGVzdENvbnRleHRNZW51Q3Vz
dG9tTWVudShDb250ZXh0TWVudUN1c3RvbUZ1bGxUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQot
ewotICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOwotCi0gICAgdGVz
dC0+bG9hZEh0bWwoIjxodG1sPjxib2R5PldlYktpdEdUSysgQ29udGV4dCBtZW51IHRlc3RzPC9i
b2R5PjwvaHRtbD4iLCAiZmlsZTovLy8iKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNo
ZWQoKTsKLQotICAgIHRlc3QtPnNob3dDb250ZXh0TWVudUFuZFdhaXRVbnRpbEZpbmlzaGVkKCk7
Ci19Ci0KLWNsYXNzIENvbnRleHRNZW51RGlzYWJsZWRUZXN0OiBwdWJsaWMgQ29udGV4dE1lbnVU
ZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKENvbnRleHRNZW51RGlz
YWJsZWRUZXN0KTsKLQotICAgIGVudW0gRGlzYWJsZU1vZGUgewotICAgICAgICBJZ25vcmVDbGlj
a3MsCi0gICAgICAgIElnbm9yZURlZmF1bHRNZW51Ci0gICAgfTsKLQotICAgIHN0YXRpYyBnYm9v
bGVhbiBidXR0b25QcmVzc0V2ZW50Q2FsbGJhY2soR3RrV2lkZ2V0KiwgR2RrRXZlbnQqIGV2ZW50
LCBDb250ZXh0TWVudURpc2FibGVkVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIGlmIChldmVu
dC0+YnV0dG9uLmJ1dHRvbiAhPSAzKQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAg
ICByZXR1cm4gdGVzdC0+cmlnaHRCdXR0b25QcmVzc2VkKCk7Ci0gICAgfQotCi0gICAgQ29udGV4
dE1lbnVEaXNhYmxlZFRlc3QoKQotICAgICAgICA6IG1fZGlzYWJsZU1vZGUoSWdub3JlQ2xpY2tz
KQotICAgIHsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJidXR0b24tcHJl
c3MtZXZlbnQiLCBHX0NBTExCQUNLKGJ1dHRvblByZXNzRXZlbnRDYWxsYmFjayksIHRoaXMpOwot
ICAgIH0KLQotICAgIGJvb2wgY29udGV4dE1lbnUoV2ViS2l0Q29udGV4dE1lbnUqIGNvbnRleHRN
ZW51LCBHZGtFdmVudCosIFdlYktpdEhpdFRlc3RSZXN1bHQqKQotICAgIHsKLSAgICAgICAgaWYg
KG1fZGlzYWJsZU1vZGUgPT0gSWdub3JlQ2xpY2tzKQotICAgICAgICAgICAgZ19hc3NlcnRfbm90
X3JlYWNoZWQoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcXVpdE1haW5Mb29wKCk7Ci0K
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgYm9vbCByaWdodEJ1dHRvblByZXNz
ZWQoKQotICAgIHsKLSAgICAgICAgaWYgKG1fZGlzYWJsZU1vZGUgPT0gSWdub3JlQ2xpY2tzKSB7
Ci0gICAgICAgICAgICBxdWl0TWFpbkxvb3BBZnRlclByb2Nlc3NpbmdQZW5kaW5nRXZlbnRzKCk7
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgRGlzYWJsZU1vZGUgbV9kaXNhYmxlTW9kZTsKLX07Ci0KLXN0YXRp
YyB2b2lkIHRlc3RDb250ZXh0TWVudURpc2FibGVNZW51KENvbnRleHRNZW51RGlzYWJsZWRUZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRV
bnRpbE1hcHBlZCgpOwotCi0gICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxib2R5PldlYktpdEdU
SysgQ29udGV4dCBtZW51IHRlc3RzPC9ib2R5PjwvaHRtbD4iLCAiZmlsZTovLy8iKTsKLSAgICB0
ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIHRlc3QtPm1fZGlzYWJsZU1vZGUg
PSBDb250ZXh0TWVudURpc2FibGVkVGVzdDo6SWdub3JlRGVmYXVsdE1lbnU7Ci0gICAgdGVzdC0+
c2hvd0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmluaXNoZWQoKTsKLQotICAgIHRlc3QtPm1fZGlz
YWJsZU1vZGUgPSBDb250ZXh0TWVudURpc2FibGVkVGVzdDo6SWdub3JlQ2xpY2tzOwotICAgIHRl
c3QtPnNob3dDb250ZXh0TWVudUFuZFdhaXRVbnRpbEZpbmlzaGVkKCk7Ci19Ci0KLWNsYXNzIENv
bnRleHRNZW51U3VibWVudVRlc3Q6IHB1YmxpYyBDb250ZXh0TWVudVRlc3QgewotcHVibGljOgot
ICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoQ29udGV4dE1lbnVTdWJtZW51VGVzdCk7Ci0KLSAg
ICBib29sIGNvbnRleHRNZW51KFdlYktpdENvbnRleHRNZW51KiBjb250ZXh0TWVudSwgR2RrRXZl
bnQqLCBXZWJLaXRIaXRUZXN0UmVzdWx0KikKLSAgICB7Ci0gICAgICAgIHNpemVfdCBtZW51U2l6
ZSA9IHdlYmtpdF9jb250ZXh0X21lbnVfZ2V0X25faXRlbXMoY29udGV4dE1lbnUpOwotICAgICAg
ICBHUmVmUHRyPFdlYktpdENvbnRleHRNZW51PiBzdWJNZW51ID0gYWRvcHRHUmVmKHdlYmtpdF9j
b250ZXh0X21lbnVfbmV3KCkpOwotICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChj
b250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld193aXRoX3N1Ym1lbnUoIlN1
Yk1lbnVJdGVtIiwgc3ViTWVudS5nZXQoKSkpOwotICAgICAgICBnX2Fzc2VydF9jbXB1aW50KHdl
YmtpdF9jb250ZXh0X21lbnVfZ2V0X25faXRlbXMoY29udGV4dE1lbnUpLCA9PSwgbWVudVNpemUg
KyAxKTsKLQotICAgICAgICBHUmVmUHRyPFdlYktpdENvbnRleHRNZW51PiBzdWJNZW51MiA9IGFk
b3B0R1JlZih3ZWJraXRfY29udGV4dF9tZW51X25ldygpKTsKLSAgICAgICAgR1JlZlB0cjxXZWJL
aXRDb250ZXh0TWVudUl0ZW0+IGl0ZW0gPSB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X2Zy
b21fc3RvY2tfYWN0aW9uKFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5fTElOSyk7Ci0K
LSAgICAgICAgLy8gQWRkIHN1Ym1lbnUgdG8gbmV3bHkgY3JlYXRlZCBpdGVtLgotICAgICAgICBn
X2Fzc2VydCghd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9zdWJtZW51KGl0ZW0uZ2V0KCkp
KTsKLSAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX3NldF9zdWJtZW51KGl0ZW0uZ2V0
KCksIHN1Yk1lbnUyLmdldCgpKTsKLSAgICAgICAgZ19hc3NlcnQod2Via2l0X2NvbnRleHRfbWVu
dV9pdGVtX2dldF9zdWJtZW51KGl0ZW0uZ2V0KCkpID09IHN1Yk1lbnUyLmdldCgpKTsKLQotICAg
ICAgICAvLyBSZXBsYWNlIHRoZSBzdWJtZW51LgotICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51
X2l0ZW1fc2V0X3N1Ym1lbnUoaXRlbS5nZXQoKSwgMCk7Ci0gICAgICAgIGdfYXNzZXJ0KCF3ZWJr
aXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X3N1Ym1lbnUoaXRlbS5nZXQoKSkpOwotCi0gICAgICAg
IC8vIFRyeSB0byBhZGQgYSBzdWJtZW51IGFscmVhZHkgYWRkZWQgdG8gYW5vdGhlciBpdGVtLgot
ICAgICAgICByZW1vdmVMb2dGYXRhbEZsYWcoR19MT0dfTEVWRUxfV0FSTklORyk7Ci0gICAgICAg
IHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9zZXRfc3VibWVudShpdGVtLmdldCgpLCBzdWJNZW51
LmdldCgpKTsKLSAgICAgICAgYWRkTG9nRmF0YWxGbGFnKEdfTE9HX0xFVkVMX1dBUk5JTkcpOwot
ICAgICAgICBnX2Fzc2VydCghd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9zdWJtZW51KGl0
ZW0uZ2V0KCkpKTsKLQotICAgICAgICAvLyBBIHJlbW92ZWQgc3VibWVudSBzaG91bGRuJ3QgaGF2
ZSBhIHBhcmVudC4KLSAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX3NldF9zdWJtZW51
KGl0ZW0uZ2V0KCksIHN1Yk1lbnUyLmdldCgpKTsKLSAgICAgICAgZ19hc3NlcnQod2Via2l0X2Nv
bnRleHRfbWVudV9pdGVtX2dldF9zdWJtZW51KGl0ZW0uZ2V0KCkpID09IHN1Yk1lbnUyLmdldCgp
KTsKLQotICAgICAgICBxdWl0TWFpbkxvb3AoKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0Q29udGV4dE1lbnVTdWJNZW51KENvbnRleHRNZW51
U3VibWVudVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+c2hvd0luV2lu
ZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7Ci0KLSAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJv
ZHk+V2ViS2l0R1RLKyBDb250ZXh0IG1lbnUgdGVzdHM8L2JvZHk+PC9odG1sPiIsICJmaWxlOi8v
LyIpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgdGVzdC0+c2hv
d0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmluaXNoZWQoKTsKLX0KLQotY2xhc3MgQ29udGV4dE1l
bnVEaXNtaXNzZWRUZXN0OiBwdWJsaWMgQ29udGV4dE1lbnVUZXN0IHsKLXB1YmxpYzoKLSAgICBN
QUtFX0dMSUJfVEVTVF9GSVhUVVJFKENvbnRleHRNZW51RGlzbWlzc2VkVGVzdCk7Ci0KLSAgICBD
b250ZXh0TWVudURpc21pc3NlZFRlc3QoKQotICAgICAgICA6IG1fZGlzbWlzc2VkKGZhbHNlKQot
ICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGNvbnRleHRNZW51KFdlYktpdENvbnRleHRNZW51KiBj
b250ZXh0TWVudSwgR2RrRXZlbnQqLCBXZWJLaXRIaXRUZXN0UmVzdWx0KikKLSAgICB7Ci0gICAg
ICAgIHF1aXRNYWluTG9vcCgpOwotICAgICAgICAvLyBTaG93IHRoZSBkZWZhdWx0IGNvbnRleHQg
bWVudS4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHZvaWQgY29udGV4dE1l
bnVEaXNtaXNzZWQoKQotICAgIHsKLSAgICAgICAgbV9kaXNtaXNzZWQgPSB0cnVlOwotICAgICAg
ICBDb250ZXh0TWVudVRlc3Q6OmNvbnRleHRNZW51RGlzbWlzc2VkKCk7Ci0gICAgfQotCi0gICAg
dm9pZCBzaG93Q29udGV4dE1lbnVBbmRXYWl0VW50aWxEaXNtaXNzZWQoKQotICAgIHsKLSAgICAg
ICAgc2hvd0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmluaXNoZWQoKTsKLSAgICAgICAgZGlzbWlz
c0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmluaXNoZWQoKTsKLSAgICB9Ci0KLSAgICBib29sIG1f
ZGlzbWlzc2VkOwotfTsKLQotc3RhdGljIHZvaWQgdGVzdENvbnRleHRNZW51RGlzbWlzc2VkKENv
bnRleHRNZW51RGlzbWlzc2VkVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0
LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKLQotICAgIHRlc3QtPmxvYWRIdG1s
KCI8aHRtbD48Ym9keT5XZWJLaXRHVEsrIENvbnRleHQgbWVudSB0ZXN0czwvYm9keT48L2h0bWw+
IiwgImZpbGU6Ly8vIik7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAg
ICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBbmRXYWl0VW50aWxEaXNtaXNzZWQoKTsKLSAgICBnX2Fz
c2VydCh0ZXN0LT5tX2Rpc21pc3NlZCk7Ci19Ci0KLWNsYXNzIENvbnRleHRNZW51U21hcnRTZXBh
cmF0b3JzVGVzdDogcHVibGljIENvbnRleHRNZW51VGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9H
TElCX1RFU1RfRklYVFVSRShDb250ZXh0TWVudVNtYXJ0U2VwYXJhdG9yc1Rlc3QpOwotCi0gICAg
Ym9vbCBjb250ZXh0TWVudShXZWJLaXRDb250ZXh0TWVudSogY29udGV4dE1lbnUsIEdka0V2ZW50
KiwgV2ViS2l0SGl0VGVzdFJlc3VsdCopCi0gICAgewotICAgICAgICB3ZWJraXRfY29udGV4dF9t
ZW51X3JlbW92ZV9hbGwoY29udGV4dE1lbnUpOwotCi0gICAgICAgIHdlYmtpdF9jb250ZXh0X21l
bnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X3NlcGFy
YXRvcigpKTsKLSAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBlbmQoY29udGV4dE1lbnUs
IHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfc2VwYXJhdG9yKCkpOwotICAgICAgICB3ZWJr
aXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9p
dGVtX25ld19mcm9tX3N0b2NrX2FjdGlvbihXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9HT19C
QUNLKSk7Ci0gICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3
ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X2Zyb21fc3RvY2tfYWN0aW9uKFdFQktJVF9DT05U
RVhUX01FTlVfQUNUSU9OX0dPX0ZPUldBUkQpKTsKLSAgICAgICAgd2Via2l0X2NvbnRleHRfbWVu
dV9hcHBlbmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfc2VwYXJh
dG9yKCkpOwotICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwg
d2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19zZXBhcmF0b3IoKSk7Ci0gICAgICAgIHdlYmtp
dF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0
ZW1fbmV3X2Zyb21fc3RvY2tfYWN0aW9uKFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFkp
KTsKLSAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBlbmQoY29udGV4dE1lbnUsIHdlYmtp
dF9jb250ZXh0X21lbnVfaXRlbV9uZXdfc2VwYXJhdG9yKCkpOwotICAgICAgICB3ZWJraXRfY29u
dGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25l
d19mcm9tX3N0b2NrX2FjdGlvbihXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9JTlNQRUNUX0VM
RU1FTlQpKTsKLSAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBlbmQoY29udGV4dE1lbnUs
IHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfc2VwYXJhdG9yKCkpOwotICAgICAgICB3ZWJr
aXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9p
dGVtX25ld19zZXBhcmF0b3IoKSk7Ci0KLSAgICAgICAgcXVpdE1haW5Mb29wKCk7Ci0KLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEd0a01lbnUqIHNob3dDb250ZXh0TWVudUFu
ZEdldEd0a01lbnUoKQotICAgIHsKLSAgICAgICAgc2hvd0NvbnRleHRNZW51QW5kV2FpdFVudGls
RmluaXNoZWQoKTsKLSAgICAgICAgcmV0dXJuIGdldFBvcHVwTWVudSgpOwotICAgIH0KLX07Ci0K
LXN0YXRpYyB2b2lkIHRlc3RDb250ZXh0TWVudVNtYXJ0U2VwYXJhdG9ycyhDb250ZXh0TWVudVNt
YXJ0U2VwYXJhdG9yc1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+c2hv
d0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7Ci0KLSAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0
bWw+PGJvZHk+V2ViS2l0R1RLKyBDb250ZXh0IG1lbnUgdGVzdHM8L2JvZHk+PC9odG1sPiIsICJm
aWxlOi8vLyIpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgR3Rr
TWVudSogbWVudSA9IHRlc3QtPnNob3dDb250ZXh0TWVudUFuZEdldEd0a01lbnUoKTsKLSAgICBn
X2Fzc2VydChtZW51KTsKLQotICAgIC8vIExlYWRpbmcgYW5kIHRyYWlsaW5nIHNlcGFyYXRvcnMg
YXJlIG5vdCBhZGRlZCB0byB0aGUgY29udGV4dCBtZW51LgotICAgIEdPd25QdHI8R0xpc3Q+IG1l
bnVJdGVtcyhndGtfY29udGFpbmVyX2dldF9jaGlsZHJlbihHVEtfQ09OVEFJTkVSKG1lbnUpKSk7
Ci0gICAgZ19hc3NlcnRfY21wdWludChnX2xpc3RfbGVuZ3RoKG1lbnVJdGVtcy5nZXQoKSksID09
LCA2KTsKLSAgICBHdGtXaWRnZXQqIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YSht
ZW51SXRlbXMuZ2V0KCksIDApKTsKLSAgICBnX2Fzc2VydCghR1RLX0lTX1NFUEFSQVRPUl9NRU5V
X0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7Ci0gICAgaXRlbSA9
IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgMSkpOwotICAgIGdf
YXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0X2dl
dF92aXNpYmxlKGl0ZW0pKTsKLSAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEo
bWVudUl0ZW1zLmdldCgpLCAyKSk7Ci0gICAgZ19hc3NlcnQoR1RLX0lTX1NFUEFSQVRPUl9NRU5V
X0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7Ci0gICAgaXRlbSA9
IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgMykpOwotICAgIGdf
YXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0X2dl
dF92aXNpYmxlKGl0ZW0pKTsKLSAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEo
bWVudUl0ZW1zLmdldCgpLCA0KSk7Ci0gICAgZ19hc3NlcnQoR1RLX0lTX1NFUEFSQVRPUl9NRU5V
X0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7Ci0gICAgaXRlbSA9
IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgNSkpOwotICAgIGdf
YXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0X2dl
dF92aXNpYmxlKGl0ZW0pKTsKLQotICAgIC8vIEhpZGluZyBhIG1lbnUgaXRlbSBiZXR3ZWVuIHR3
byBzZXBhcmF0b3JzIGhpZGVzIHRoZSBmb2xsb3dpbmcgc2VwYXJhdG9yLgotICAgIEd0a0FjdGlv
biogYWN0aW9uID0gZ3RrX2FjdGl2YXRhYmxlX2dldF9yZWxhdGVkX2FjdGlvbihHVEtfQUNUSVZB
VEFCTEUoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgMykpKTsKLSAgICBndGtfYWN0
aW9uX3NldF92aXNpYmxlKGFjdGlvbiwgRkFMU0UpOwotICAgIG1lbnVJdGVtcy5zZXQoZ3RrX2Nv
bnRhaW5lcl9nZXRfY2hpbGRyZW4oR1RLX0NPTlRBSU5FUihtZW51KSkpOwotICAgIGdfYXNzZXJ0
X2NtcHVpbnQoZ19saXN0X2xlbmd0aChtZW51SXRlbXMuZ2V0KCkpLCA9PSwgNik7Ci0gICAgaXRl
bSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgMCkpOwotICAg
IGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0
X2dldF92aXNpYmxlKGl0ZW0pKTsKLSAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2Rh
dGEobWVudUl0ZW1zLmdldCgpLCAxKSk7Ci0gICAgZ19hc3NlcnQoIUdUS19JU19TRVBBUkFUT1Jf
TUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOwotICAgIGl0
ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDIpKTsKLSAg
ICBnX2Fzc2VydChHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0
X2dldF92aXNpYmxlKGl0ZW0pKTsKLSAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2Rh
dGEobWVudUl0ZW1zLmdldCgpLCAzKSk7Ci0gICAgZ19hc3NlcnQoIUdUS19JU19TRVBBUkFUT1Jf
TUVOVV9JVEVNKGl0ZW0pICYmICFndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKLSAgICBp
dGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCA0KSk7Ci0g
ICAgZ19hc3NlcnQoR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgIWd0a193aWRn
ZXRfZ2V0X3Zpc2libGUoaXRlbSkpOwotICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhf
ZGF0YShtZW51SXRlbXMuZ2V0KCksIDUpKTsKLSAgICBnX2Fzc2VydCghR1RLX0lTX1NFUEFSQVRP
Ul9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7Ci0gICAg
Z3RrX2FjdGlvbl9zZXRfdmlzaWJsZShhY3Rpb24sIFRSVUUpOwotCi0gICAgLy8gU2hvd2luZyBh
biBhY3Rpb24gYmV0d2VlbiB0d28gc2VwYXJhdG9ycyBzaG93cyB0aGUgaGlkZGVuIHNlcGFyYXRv
ci4KLSAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgp
LCAwKSk7Ci0gICAgZ19hc3NlcnQoIUdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYm
IGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOwotICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdf
bGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDEpKTsKLSAgICBnX2Fzc2VydCghR1RLX0lT
X1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVt
KSk7Ci0gICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQo
KSwgMikpOwotICAgIGdfYXNzZXJ0KEdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYm
IGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOwotICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdf
bGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDMpKTsKLSAgICBnX2Fzc2VydCghR1RLX0lT
X1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVt
KSk7Ci0gICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQo
KSwgNCkpOwotICAgIGdfYXNzZXJ0KEdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYm
IGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOwotICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdf
bGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDUpKTsKLSAgICBnX2Fzc2VydCghR1RLX0lT
X1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVt
KSk7Ci0KLSAgICAvLyBUcmFpbGluZyBzZXBhcmF0b3JzIGFyZSBoaWRkZW4gdG9vLgotICAgIGFj
dGlvbiA9IGd0a19hY3RpdmF0YWJsZV9nZXRfcmVsYXRlZF9hY3Rpb24oR1RLX0FDVElWQVRBQkxF
KGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDUpKSk7Ci0gICAgZ3RrX2FjdGlvbl9z
ZXRfdmlzaWJsZShhY3Rpb24sIEZBTFNFKTsKLSAgICBtZW51SXRlbXMuc2V0KGd0a19jb250YWlu
ZXJfZ2V0X2NoaWxkcmVuKEdUS19DT05UQUlORVIobWVudSkpKTsKLSAgICBpdGVtID0gR1RLX1dJ
REdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCAwKSk7Ci0gICAgZ19hc3NlcnQo
IUdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2li
bGUoaXRlbSkpOwotICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRl
bXMuZ2V0KCksIDEpKTsKLSAgICBnX2Fzc2VydCghR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0o
aXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7Ci0gICAgaXRlbSA9IEdUS19X
SURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgMikpOwotICAgIGdfYXNzZXJ0
KEdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2li
bGUoaXRlbSkpOwotICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRl
bXMuZ2V0KCksIDMpKTsKLSAgICBnX2Fzc2VydCghR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0o
aXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7Ci0gICAgaXRlbSA9IEdUS19X
SURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgNCkpOwotICAgIGdfYXNzZXJ0
KEdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmICFndGtfd2lkZ2V0X2dldF92aXNp
YmxlKGl0ZW0pKTsKLSAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0
ZW1zLmdldCgpLCA1KSk7Ci0gICAgZ19hc3NlcnQoIUdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVN
KGl0ZW0pICYmICFndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKLX0KLQotdm9pZCBiZWZv
cmVBbGwoKQotewotICAgIENvbnRleHRNZW51RGVmYXVsdFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmll
dyIsICJkZWZhdWx0LW1lbnUiLCB0ZXN0Q29udGV4dE1lbnVEZWZhdWx0TWVudSk7Ci0gICAgQ29u
dGV4dE1lbnVDdXN0b21UZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAicG9wdWxhdGUtbWVudSIs
IHRlc3RDb250ZXh0TWVudVBvcHVsYXRlTWVudSk7Ci0gICAgQ29udGV4dE1lbnVDdXN0b21GdWxs
VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImN1c3RvbS1tZW51IiwgdGVzdENvbnRleHRNZW51
Q3VzdG9tTWVudSk7Ci0gICAgQ29udGV4dE1lbnVEaXNhYmxlZFRlc3Q6OmFkZCgiV2ViS2l0V2Vi
VmlldyIsICJkaXNhYmxlLW1lbnUiLCB0ZXN0Q29udGV4dE1lbnVEaXNhYmxlTWVudSk7Ci0gICAg
Q29udGV4dE1lbnVTdWJtZW51VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInN1Ym1lbnUiLCB0
ZXN0Q29udGV4dE1lbnVTdWJNZW51KTsKLSAgICBDb250ZXh0TWVudURpc21pc3NlZFRlc3Q6OmFk
ZCgiV2ViS2l0V2ViVmlldyIsICJtZW51LWRpc21pc3NlZCIsIHRlc3RDb250ZXh0TWVudURpc21p
c3NlZCk7Ci0gICAgQ29udGV4dE1lbnVTbWFydFNlcGFyYXRvcnNUZXN0OjphZGQoIldlYktpdFdl
YlZpZXciLCAic21hcnQtc2VwYXJhdG9ycyIsIHRlc3RDb250ZXh0TWVudVNtYXJ0U2VwYXJhdG9y
cyk7Ci19Ci0KLXZvaWQgYWZ0ZXJBbGwoKQotewotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdENvb2tpZU1hbmFnZXIuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdENvb2tpZU1hbmFnZXIuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZGM2YjViLi4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RDb29raWVNYW5hZ2VyLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDMzMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEy
IElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIldlYktpdFRlc3RT
ZXJ2ZXIuaCIKLSNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlv
Lmg+Ci0KLXN0YXRpYyBXZWJLaXRUZXN0U2VydmVyKiBrU2VydmVyOwotc3RhdGljIGNoYXIqIGtU
ZW1wRGlyZWN0b3J5OwotCi1zdGF0aWMgY29uc3QgY2hhcioga0ZpcnN0UGFydHlEb21haW4gPSAi
MTI3LjAuMC4xIjsKLXN0YXRpYyBjb25zdCBjaGFyKiBrVGhpcmRQYXJ0eURvbWFpbiA9ICJsb2Nh
bGhvc3QiOwotc3RhdGljIGNvbnN0IGNoYXIqIGtJbmRleEh0bWxGb3JtYXQgPQotICAgICI8aHRt
bD48Ym9keT4iCi0gICAgIiA8cD5XZWJLaXRHVEsrIENvb2tpZSBNYW5hZ2VyIHRlc3Q8L3A+Igot
ICAgICIgPGltZyBzcmM9J2h0dHA6Ly9sb2NhbGhvc3Q6JXUvaW1hZ2UucG5nJyB3aWR0aD01IGhl
aWdodD01PjwvaW1nPiIKLSAgICAiPC9ib2R5PjwvaHRtbD4iOwotCi1jbGFzcyBDb29raWVNYW5h
Z2VyVGVzdDogcHVibGljIFdlYlZpZXdUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVT
VF9GSVhUVVJFKENvb2tpZU1hbmFnZXJUZXN0KTsKLQotICAgIHN0YXRpYyB2b2lkIGNvb2tpZXND
aGFuZ2VkQ2FsbGJhY2soV2ViS2l0Q29va2llTWFuYWdlciosIENvb2tpZU1hbmFnZXJUZXN0KiB0
ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+bV9jb29raWVzQ2hhbmdlZCA9IHRydWU7Ci0gICAg
ICAgIGlmICh0ZXN0LT5tX2ZpbmlzaExvb3BXaGVuQ29va2llc0NoYW5nZSkKLSAgICAgICAgICAg
IGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgQ29va2ll
TWFuYWdlclRlc3QoKQotICAgICAgICA6IFdlYlZpZXdUZXN0KCkKLSAgICAgICAgLCBtX2Nvb2tp
ZU1hbmFnZXIod2Via2l0X3dlYl9jb250ZXh0X2dldF9jb29raWVfbWFuYWdlcih3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X2NvbnRleHQobV93ZWJWaWV3KSkpCi0gICAgICAgICwgbV9hY2NlcHRQb2xpY3ko
V0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX05PX1RISVJEX1BBUlRZKQotICAgICAgICAsIG1f
ZG9tYWlucygwKQotICAgICAgICAsIG1fY29va2llc0NoYW5nZWQoZmFsc2UpCi0gICAgICAgICwg
bV9maW5pc2hMb29wV2hlbkNvb2tpZXNDaGFuZ2UoZmFsc2UpCi0gICAgewotICAgICAgICBnX3Np
Z25hbF9jb25uZWN0KG1fY29va2llTWFuYWdlciwgImNoYW5nZWQiLCBHX0NBTExCQUNLKGNvb2tp
ZXNDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKLSAgICB9Ci0KLSAgICB+Q29va2llTWFuYWdlclRl
c3QoKQotICAgIHsKLSAgICAgICAgZ19zdHJmcmVldihtX2RvbWFpbnMpOwotICAgICAgICBnX3Np
Z25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9jb29raWVNYW5hZ2VyLCBHX1NJR05B
TF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKLSAgICAgICAgaWYgKG1fY29va2llc1Rl
eHRGaWxlKQotICAgICAgICAgICAgZ191bmxpbmsobV9jb29raWVzVGV4dEZpbGUuZ2V0KCkpOwot
ICAgICAgICBpZiAobV9jb29raWVzU1FMaXRlRmlsZSkKLSAgICAgICAgICAgIGdfdW5saW5rKG1f
Y29va2llc1NRTGl0ZUZpbGUuZ2V0KCkpOwotICAgIH0KLQotICAgIHZvaWQgc2V0UGVyc2lzdGVu
dFN0b3JhZ2UoV2ViS2l0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Ugc3RvcmFnZSkKLSAgICB7Ci0g
ICAgICAgIGNvbnN0IGNoYXIqIGZpbGVuYW1lID0gMDsKLSAgICAgICAgc3dpdGNoIChzdG9yYWdl
KSB7Ci0gICAgICAgIGNhc2UgV0VCS0lUX0NPT0tJRV9QRVJTSVNURU5UX1NUT1JBR0VfVEVYVDoK
LSAgICAgICAgICAgIGlmICghbV9jb29raWVzVGV4dEZpbGUpCi0gICAgICAgICAgICAgICAgbV9j
b29raWVzVGV4dEZpbGUuc2V0KGdfYnVpbGRfZmlsZW5hbWUoa1RlbXBEaXJlY3RvcnksICJjb29r
aWVzLnR4dCIsIE5VTEwpKTsKLSAgICAgICAgICAgIGZpbGVuYW1lID0gbV9jb29raWVzVGV4dEZp
bGUuZ2V0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXRUJLSVRfQ09PS0lF
X1BFUlNJU1RFTlRfU1RPUkFHRV9TUUxJVEU6Ci0gICAgICAgICAgICBpZiAoIW1fY29va2llc1NR
TGl0ZUZpbGUpCi0gICAgICAgICAgICAgICAgbV9jb29raWVzU1FMaXRlRmlsZS5zZXQoZ19idWls
ZF9maWxlbmFtZShrVGVtcERpcmVjdG9yeSwgImNvb2tpZXMuZGIiLCBOVUxMKSk7Ci0gICAgICAg
ICAgICBmaWxlbmFtZSA9IG1fY29va2llc1NRTGl0ZUZpbGUuZ2V0KCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVk
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX3NldF9wZXJzaXN0
ZW50X3N0b3JhZ2UobV9jb29raWVNYW5hZ2VyLCBmaWxlbmFtZSwgc3RvcmFnZSk7Ci0gICAgfQot
Ci0gICAgc3RhdGljIHZvaWQgZ2V0QWNjZXB0UG9saWN5UmVhZHlDYWxsYmFjayhHT2JqZWN0KiBv
YmplY3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkKLSAgICB7Ci0g
ICAgICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKLSAgICAgICAgV2ViS2l0Q29va2llQWNjZXB0
UG9saWN5IHBvbGljeSA9IHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfYWNjZXB0X3BvbGljeV9m
aW5pc2goV0VCS0lUX0NPT0tJRV9NQU5BR0VSKG9iamVjdCksIHJlc3VsdCwgJmVycm9yLm91dFB0
cigpKTsKLSAgICAgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKLQotICAgICAgICBDb29raWVN
YW5hZ2VyVGVzdCogdGVzdCA9IHN0YXRpY19jYXN0PENvb2tpZU1hbmFnZXJUZXN0Kj4odXNlckRh
dGEpOwotICAgICAgICB0ZXN0LT5tX2FjY2VwdFBvbGljeSA9IHBvbGljeTsKLSAgICAgICAgZ19t
YWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKLSAgICB9Ci0KLSAgICBXZWJLaXRDb29r
aWVBY2NlcHRQb2xpY3kgZ2V0QWNjZXB0UG9saWN5KCkKLSAgICB7Ci0gICAgICAgIG1fYWNjZXB0
UG9saWN5ID0gV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX05PX1RISVJEX1BBUlRZOwotICAg
ICAgICB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2FjY2VwdF9wb2xpY3kobV9jb29raWVNYW5h
Z2VyLCAwLCBnZXRBY2NlcHRQb2xpY3lSZWFkeUNhbGxiYWNrLCB0aGlzKTsKLSAgICAgICAgZ19t
YWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotCi0gICAgICAgIHJldHVybiBtX2FjY2VwdFBvbGlj
eTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldEFjY2VwdFBvbGljeShXZWJLaXRDb29raWVBY2NlcHRQ
b2xpY3kgcG9saWN5KQotICAgIHsKLSAgICAgICAgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX3NldF9h
Y2NlcHRfcG9saWN5KG1fY29va2llTWFuYWdlciwgcG9saWN5KTsKLSAgICB9Ci0KLSAgICBzdGF0
aWMgdm9pZCBnZXREb21haW5zUmVhZHlDYWxsYmFjayhHT2JqZWN0KiBvYmplY3QsIEdBc3luY1Jl
c3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkKLSAgICB7Ci0gICAgICAgIEdPd25QdHI8
R0Vycm9yPiBlcnJvcjsKLSAgICAgICAgY2hhcioqIGRvbWFpbnMgPSB3ZWJraXRfY29va2llX21h
bmFnZXJfZ2V0X2RvbWFpbnNfd2l0aF9jb29raWVzX2ZpbmlzaChXRUJLSVRfQ09PS0lFX01BTkFH
RVIob2JqZWN0KSwgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpOwotICAgICAgICBnX2Fzc2VydCgh
ZXJyb3IuZ2V0KCkpOwotCi0gICAgICAgIENvb2tpZU1hbmFnZXJUZXN0KiB0ZXN0ID0gc3RhdGlj
X2Nhc3Q8Q29va2llTWFuYWdlclRlc3QqPih1c2VyRGF0YSk7Ci0gICAgICAgIHRlc3QtPm1fZG9t
YWlucyA9IGRvbWFpbnM7Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9v
cCk7Ci0gICAgfQotCi0gICAgY2hhcioqIGdldERvbWFpbnMoKQotICAgIHsKLSAgICAgICAgZ19z
dHJmcmVldihtX2RvbWFpbnMpOwotICAgICAgICBtX2RvbWFpbnMgPSAwOwotICAgICAgICB3ZWJr
aXRfY29va2llX21hbmFnZXJfZ2V0X2RvbWFpbnNfd2l0aF9jb29raWVzKG1fY29va2llTWFuYWdl
ciwgMCwgZ2V0RG9tYWluc1JlYWR5Q2FsbGJhY2ssIHRoaXMpOwotICAgICAgICBnX21haW5fbG9v
cF9ydW4obV9tYWluTG9vcCk7Ci0KLSAgICAgICAgcmV0dXJuIG1fZG9tYWluczsKLSAgICB9Ci0K
LSAgICBib29sIGhhc0RvbWFpbihjb25zdCBjaGFyKiBkb21haW4pCi0gICAgewotICAgICAgICBp
ZiAoIW1fZG9tYWlucykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgbV9kb21haW5zW2ldOyArK2kpCi0gICAgICAgICAgICBpZiAoZ19zdHJf
ZXF1YWwobV9kb21haW5zW2ldLCBkb21haW4pKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgdm9pZCBkZWxldGVDb29raWVz
Rm9yRG9tYWluKGNvbnN0IGNoYXIqIGRvbWFpbikKLSAgICB7Ci0gICAgICAgIHdlYmtpdF9jb29r
aWVfbWFuYWdlcl9kZWxldGVfY29va2llc19mb3JfZG9tYWluKG1fY29va2llTWFuYWdlciwgZG9t
YWluKTsKLSAgICB9Ci0KLSAgICB2b2lkIGRlbGV0ZUFsbENvb2tpZXMoKQotICAgIHsKLSAgICAg
ICAgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9hbGxfY29va2llcyhtX2Nvb2tpZU1hbmFn
ZXIpOwotICAgIH0KLQotICAgIHZvaWQgd2FpdFVudGlsQ29va2llc0NoYW5nZWQoKQotICAgIHsK
LSAgICAgICAgbV9jb29raWVzQ2hhbmdlZCA9IGZhbHNlOwotICAgICAgICBtX2ZpbmlzaExvb3BX
aGVuQ29va2llc0NoYW5nZSA9IHRydWU7Ci0gICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5M
b29wKTsKLSAgICAgICAgbV9maW5pc2hMb29wV2hlbkNvb2tpZXNDaGFuZ2UgPSBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBXZWJLaXRDb29raWVNYW5hZ2VyKiBtX2Nvb2tpZU1hbmFnZXI7Ci0gICAgV2Vi
S2l0Q29va2llQWNjZXB0UG9saWN5IG1fYWNjZXB0UG9saWN5OwotICAgIGNoYXIqKiBtX2RvbWFp
bnM7Ci0gICAgYm9vbCBtX2Nvb2tpZXNDaGFuZ2VkOwotICAgIGJvb2wgbV9maW5pc2hMb29wV2hl
bkNvb2tpZXNDaGFuZ2U7Ci0gICAgR093blB0cjxjaGFyPiBtX2Nvb2tpZXNUZXh0RmlsZTsKLSAg
ICBHT3duUHRyPGNoYXI+IG1fY29va2llc1NRTGl0ZUZpbGU7Ci19OwotCi1zdGF0aWMgdm9pZCB0
ZXN0Q29va2llTWFuYWdlckFjY2VwdFBvbGljeShDb29raWVNYW5hZ2VyVGVzdCogdGVzdCwgZ2Nv
bnN0cG9pbnRlcikKLXsKLSAgICAvLyBEZWZhdWx0IHBvbGljeSBpcyBOT19USElSRF9QQVJUWS4K
LSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+Z2V0QWNjZXB0UG9saWN5KCksID09LCBXRUJLSVRf
Q09PS0lFX1BPTElDWV9BQ0NFUFRfTk9fVEhJUkRfUEFSVFkpOwotICAgIHRlc3QtPmxvYWRVUkko
a1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2luZGV4Lmh0bWwiKS5kYXRhKCkpOwotICAgIHRlc3Qt
PndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGNoYXIqKiBkb21haW5zID0gdGVzdC0+Z2V0
RG9tYWlucygpOwotICAgIGdfYXNzZXJ0KGRvbWFpbnMpOwotICAgIGdfYXNzZXJ0X2NtcGludChn
X3N0cnZfbGVuZ3RoKGRvbWFpbnMpLCA9PSwgMSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKGRvbWFp
bnNbMF0sID09LCBrRmlyc3RQYXJ0eURvbWFpbik7Ci0gICAgdGVzdC0+ZGVsZXRlQWxsQ29va2ll
cygpOwotCi0gICAgdGVzdC0+c2V0QWNjZXB0UG9saWN5KFdFQktJVF9DT09LSUVfUE9MSUNZX0FD
Q0VQVF9BTFdBWVMpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5nZXRBY2NlcHRQb2xpY3ko
KSwgPT0sIFdFQktJVF9DT09LSUVfUE9MSUNZX0FDQ0VQVF9BTFdBWVMpOwotICAgIHRlc3QtPmxv
YWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2luZGV4Lmh0bWwiKS5kYXRhKCkpOwotICAg
IHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGRvbWFpbnMgPSB0ZXN0LT5nZXRE
b21haW5zKCk7Ci0gICAgZ19hc3NlcnQoZG9tYWlucyk7Ci0gICAgZ19hc3NlcnRfY21waW50KGdf
c3Rydl9sZW5ndGgoZG9tYWlucyksID09LCAyKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5oYXNEb21h
aW4oa0ZpcnN0UGFydHlEb21haW4pKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5oYXNEb21haW4oa1Ro
aXJkUGFydHlEb21haW4pKTsKLSAgICB0ZXN0LT5kZWxldGVBbGxDb29raWVzKCk7Ci0KLSAgICB0
ZXN0LT5zZXRBY2NlcHRQb2xpY3koV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX05FVkVSKTsK
LSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+Z2V0QWNjZXB0UG9saWN5KCksID09LCBXRUJLSVRf
Q09PS0lFX1BPTElDWV9BQ0NFUFRfTkVWRVIpOwotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+
Z2V0VVJJRm9yUGF0aCgiL2luZGV4Lmh0bWwiKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRp
bExvYWRGaW5pc2hlZCgpOwotICAgIGRvbWFpbnMgPSB0ZXN0LT5nZXREb21haW5zKCk7Ci0gICAg
Z19hc3NlcnQoZG9tYWlucyk7Ci0gICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgoZG9t
YWlucyksID09LCAwKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdENvb2tpZU1hbmFnZXJEZWxldGVD
b29raWVzKENvb2tpZU1hbmFnZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRl
c3QtPnNldEFjY2VwdFBvbGljeShXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfQUxXQVlTKTsK
LSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbmRleC5odG1sIiku
ZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0LT5nZXREb21haW5zKCkpLCA9PSwgMik7Ci0KLSAg
ICAvLyBEZWxldGUgZmlyc3QgcGFydHkgY29va2llcy4KLSAgICB0ZXN0LT5kZWxldGVDb29raWVz
Rm9yRG9tYWluKGtGaXJzdFBhcnR5RG9tYWluKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2
X2xlbmd0aCh0ZXN0LT5nZXREb21haW5zKCkpLCA9PSwgMSk7Ci0KLSAgICAvLyBEZWxldGUgdGhp
cmQgcGFydHkgY29va2llcy4KLSAgICB0ZXN0LT5kZWxldGVDb29raWVzRm9yRG9tYWluKGtUaGly
ZFBhcnR5RG9tYWluKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0LT5n
ZXREb21haW5zKCkpLCA9PSwgMCk7Ci0KLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVS
SUZvclBhdGgoIi9pbmRleC5odG1sIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2Fk
RmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0LT5nZXRE
b21haW5zKCkpLCA9PSwgMik7Ci0KLSAgICAvLyBEZWxldGUgYWxsIGNvb2tpZXMuCi0gICAgdGVz
dC0+ZGVsZXRlQWxsQ29va2llcygpOwotICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3Ro
KHRlc3QtPmdldERvbWFpbnMoKSksID09LCAwKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdENvb2tp
ZU1hbmFnZXJDb29raWVzQ2hhbmdlZChDb29raWVNYW5hZ2VyVGVzdCogdGVzdCwgZ2NvbnN0cG9p
bnRlcikKLXsKLSAgICBnX2Fzc2VydCghdGVzdC0+bV9jb29raWVzQ2hhbmdlZCk7Ci0gICAgdGVz
dC0+c2V0QWNjZXB0UG9saWN5KFdFQktJVF9DT09LSUVfUE9MSUNZX0FDQ0VQVF9BTFdBWVMpOwot
ICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2luZGV4Lmh0bWwiKS5k
YXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGdfYXNzZXJ0
KHRlc3QtPm1fY29va2llc0NoYW5nZWQpOwotCi0gICAgdGVzdC0+ZGVsZXRlQ29va2llc0ZvckRv
bWFpbihrRmlyc3RQYXJ0eURvbWFpbik7Ci0gICAgdGVzdC0+d2FpdFVudGlsQ29va2llc0NoYW5n
ZWQoKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX2Nvb2tpZXNDaGFuZ2VkKTsKLQotICAgIHRlc3Qt
PmRlbGV0ZUFsbENvb2tpZXMoKTsKLSAgICB0ZXN0LT53YWl0VW50aWxDb29raWVzQ2hhbmdlZCgp
OwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fY29va2llc0NoYW5nZWQpOwotfQotCi1zdGF0aWMgdm9p
ZCB0ZXN0Q29va2llTWFuYWdlclBlcnNpc3RlbnRTdG9yYWdlKENvb2tpZU1hbmFnZXJUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPnNldEFjY2VwdFBvbGljeShXRUJLSVRf
Q09PS0lFX1BPTElDWV9BQ0NFUFRfQUxXQVlTKTsKLQotICAgIC8vIFRleHQgc3RvcmFnZSB1c2lu
ZyBhIG5ldyBmaWxlLgotICAgIHRlc3QtPnNldFBlcnNpc3RlbnRTdG9yYWdlKFdFQktJVF9DT09L
SUVfUEVSU0lTVEVOVF9TVE9SQUdFX1RFWFQpOwotICAgIGNoYXIqKiBkb21haW5zID0gdGVzdC0+
Z2V0RG9tYWlucygpOwotICAgIGdfYXNzZXJ0KGRvbWFpbnMpOwotICAgIGdfYXNzZXJ0X2NtcGlu
dChnX3N0cnZfbGVuZ3RoKGRvbWFpbnMpLCA9PSwgMCk7Ci0KLSAgICB0ZXN0LT5sb2FkVVJJKGtT
ZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbmRleC5odG1sIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53
YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX2Nvb2tpZXNDaGFu
Z2VkKTsKLSAgICBkb21haW5zID0gdGVzdC0+Z2V0RG9tYWlucygpOwotICAgIGdfYXNzZXJ0KGRv
bWFpbnMpOwotICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKGRvbWFpbnMpLCA9PSwg
Mik7Ci0KLQotICAgIC8vIFNRTGl0ZSBzdG9yYWdlIHVzaW5nIGEgbmV3IGZpbGUuCi0gICAgdGVz
dC0+c2V0UGVyc2lzdGVudFN0b3JhZ2UoV0VCS0lUX0NPT0tJRV9QRVJTSVNURU5UX1NUT1JBR0Vf
U1FMSVRFKTsKLSAgICBkb21haW5zID0gdGVzdC0+Z2V0RG9tYWlucygpOwotICAgIGdfYXNzZXJ0
KGRvbWFpbnMpOwotICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKGRvbWFpbnMpLCA9
PSwgMCk7Ci0KLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbmRl
eC5odG1sIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAg
ICBnX2Fzc2VydCh0ZXN0LT5tX2Nvb2tpZXNDaGFuZ2VkKTsKLSAgICBkb21haW5zID0gdGVzdC0+
Z2V0RG9tYWlucygpOwotICAgIGdfYXNzZXJ0KGRvbWFpbnMpOwotICAgIGdfYXNzZXJ0X2NtcGlu
dChnX3N0cnZfbGVuZ3RoKGRvbWFpbnMpLCA9PSwgMik7Ci0KLSAgICAvLyBUZXh0IHN0b3JhZ2Ug
dXNpbmcgYW4gZXhpc3RpbmcgZmlsZS4KLSAgICB0ZXN0LT5zZXRQZXJzaXN0ZW50U3RvcmFnZShX
RUJLSVRfQ09PS0lFX1BFUlNJU1RFTlRfU1RPUkFHRV9URVhUKTsKLSAgICBkb21haW5zID0gdGVz
dC0+Z2V0RG9tYWlucygpOwotICAgIGdfYXNzZXJ0KGRvbWFpbnMpOwotICAgIGdfYXNzZXJ0X2Nt
cGludChnX3N0cnZfbGVuZ3RoKGRvbWFpbnMpLCA9PSwgMik7Ci0gICAgdGVzdC0+ZGVsZXRlQWxs
Q29va2llcygpOwotICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKHRlc3QtPmdldERv
bWFpbnMoKSksID09LCAwKTsKLQotICAgIC8vIFNRTGl0ZSBzdG9yYWdlIHdpdGggYW4gZXhpc3Rp
bmcgZmlsZS4KLSAgICB0ZXN0LT5zZXRQZXJzaXN0ZW50U3RvcmFnZShXRUJLSVRfQ09PS0lFX1BF
UlNJU1RFTlRfU1RPUkFHRV9TUUxJVEUpOwotICAgIGRvbWFpbnMgPSB0ZXN0LT5nZXREb21haW5z
KCk7Ci0gICAgZ19hc3NlcnQoZG9tYWlucyk7Ci0gICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9s
ZW5ndGgoZG9tYWlucyksID09LCAyKTsKLSAgICB0ZXN0LT5kZWxldGVBbGxDb29raWVzKCk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlucygpKSwgPT0s
IDApOwotfQotCi1zdGF0aWMgdm9pZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBzZXJ2ZXIs
IFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiwgU291
cENsaWVudENvbnRleHQqLCBncG9pbnRlcikKLXsKLSAgICBpZiAobWVzc2FnZS0+bWV0aG9kICE9
IFNPVVBfTUVUSE9EX0dFVCkgewotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNz
YWdlLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0sp
OwotICAgIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2luZGV4Lmh0bWwiKSkgewotICAgICAgICBj
aGFyKiBpbmRleEh0bWwgPSBnX3N0cmR1cF9wcmludGYoa0luZGV4SHRtbEZvcm1hdCwgc291cF9z
ZXJ2ZXJfZ2V0X3BvcnQoc2VydmVyKSk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX3Jl
cGxhY2UobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIlNldC1Db29raWUiLCAiZm9vPWJhcjsg
TWF4LUFnZT02MCIpOwotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+
cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgaW5kZXhIdG1sLCBzdHJsZW4oaW5kZXhI
dG1sKSk7Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2ltYWdlLnBuZyIpKQot
ICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19yZXBsYWNlKG1lc3NhZ2UtPnJlc3BvbnNlX2hl
YWRlcnMsICJTZXQtQ29va2llIiwgImJhej1xdXg7IE1heC1BZ2U9NjAiKTsKLSAgICBlbHNlCi0g
ICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9G
T1VORCk7Ci0gICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2Vf
Ym9keSk7Ci19Ci0KLXZvaWQgYmVmb3JlQWxsKCkKLXsKLSAgICBrU2VydmVyID0gbmV3IFdlYktp
dFRlc3RTZXJ2ZXIoKTsKLSAgICBrU2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2spOwotCi0gICAg
a1RlbXBEaXJlY3RvcnkgPSBnX2Rpcl9tYWtlX3RtcCgiV2ViS2l0MlRlc3RzLVhYWFhYWCIsIDAp
OwotICAgIGdfYXNzZXJ0KGtUZW1wRGlyZWN0b3J5KTsKLQotICAgIENvb2tpZU1hbmFnZXJUZXN0
OjphZGQoIldlYktpdENvb2tpZU1hbmFnZXIiLCAiYWNjZXB0LXBvbGljeSIsIHRlc3RDb29raWVN
YW5hZ2VyQWNjZXB0UG9saWN5KTsKLSAgICBDb29raWVNYW5hZ2VyVGVzdDo6YWRkKCJXZWJLaXRD
b29raWVNYW5hZ2VyIiwgImRlbGV0ZS1jb29raWVzIiwgdGVzdENvb2tpZU1hbmFnZXJEZWxldGVD
b29raWVzKTsKLSAgICBDb29raWVNYW5hZ2VyVGVzdDo6YWRkKCJXZWJLaXRDb29raWVNYW5hZ2Vy
IiwgImNvb2tpZXMtY2hhbmdlZCIsIHRlc3RDb29raWVNYW5hZ2VyQ29va2llc0NoYW5nZWQpOwot
ICAgIENvb2tpZU1hbmFnZXJUZXN0OjphZGQoIldlYktpdENvb2tpZU1hbmFnZXIiLCAicGVyc2lz
dGVudC1zdG9yYWdlIiwgdGVzdENvb2tpZU1hbmFnZXJQZXJzaXN0ZW50U3RvcmFnZSk7Ci19Ci0K
LXZvaWQgYWZ0ZXJBbGwoKQotewotICAgIGRlbGV0ZSBrU2VydmVyOwotICAgIGdfcm1kaXIoa1Rl
bXBEaXJlY3RvcnkpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvVGVzdERPTU5vZGUuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvVGVzdERPTU5vZGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBiZDMyMDc3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL1Rlc3RET01Ob2RlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LQotI2luY2x1ZGUgIldlYlByb2Nlc3NUZXN0UnVubmVyLmgiCi0jaW5jbHVkZSAiV2ViVmlld1Rl
c3QuaCIKLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+
Ci0KLXN0YXRpYyBXZWJQcm9jZXNzVGVzdFJ1bm5lciogdGVzdFJ1bm5lcjsKLQotc3RhdGljIHZv
aWQgdGVzdFdlYktpdERPTU5vZGVIaWVyYXJjaHlOYXZpZ2F0aW9uKFdlYlZpZXdUZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQotewotICAgIHN0YXRpYyBjb25zdCBjaGFyKiB0ZXN0SFRNTCA9ICI8
aHRtbD48aGVhZD48dGl0bGU+VGhpcyBpcyB0aGUgdGl0bGU8L3RpdGxlPjwvaGVhZD48Ym9keT48
cD4xPC9wPjxwPjI8L3A+PHA+MzwvcD48L2JvZHk+PC9odG1sPiI7Ci0gICAgdGVzdC0+bG9hZEh0
bWwodGVzdEhUTUwsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0g
ICAgR1ZhcmlhbnRCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgZ192YXJpYW50X2J1aWxkZXJfaW5pdCgm
YnVpbGRlciwgR19WQVJJQU5UX1RZUEVfVkFSRElDVCk7Ci0gICAgZ192YXJpYW50X2J1aWxkZXJf
YWRkKCZidWlsZGVyLCAie3N2fSIsICJwYWdlSUQiLCBnX3ZhcmlhbnRfbmV3X3VpbnQ2NCh3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X3BhZ2VfaWQodGVzdC0+bV93ZWJWaWV3KSkpOwotICAgIGdfYXNzZXJ0
KHRlc3RSdW5uZXItPnJ1blRlc3QoIldlYktpdERPTU5vZGUiLCAiaGllcmFyY2h5LW5hdmlnYXRp
b24iLCBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQoJmJ1aWxkZXIpKSk7Ci19Ci0KLXN0YXRpYyB2b2lk
IHRlc3RXZWJLaXRET01Ob2RlSW5zZXJ0aW9uKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2lu
dGVyKQotewotICAgIHN0YXRpYyBjb25zdCBjaGFyKiB0ZXN0SFRNTCA9ICI8aHRtbD48Ym9keT48
L2JvZHk+PC9odG1sPiI7Ci0gICAgdGVzdC0+bG9hZEh0bWwodGVzdEhUTUwsIDApOwotICAgIHRl
c3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgR1ZhcmlhbnRCdWlsZGVyIGJ1aWxk
ZXI7Ci0gICAgZ192YXJpYW50X2J1aWxkZXJfaW5pdCgmYnVpbGRlciwgR19WQVJJQU5UX1RZUEVf
VkFSRElDVCk7Ci0gICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKCZidWlsZGVyLCAie3N2fSIsICJw
YWdlSUQiLCBnX3ZhcmlhbnRfbmV3X3VpbnQ2NCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3BhZ2VfaWQo
dGVzdC0+bV93ZWJWaWV3KSkpOwotICAgIGdfYXNzZXJ0KHRlc3RSdW5uZXItPnJ1blRlc3QoIldl
YktpdERPTU5vZGUiLCAiaW5zZXJ0aW9uIiwgZ192YXJpYW50X2J1aWxkZXJfZW5kKCZidWlsZGVy
KSkpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViS2l0RE9NTm9kZVRhZ05hbWVzKFdlYlZpZXdU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHN0YXRpYyBjb25zdCBjaGFyKiB0ZXN0
SFRNTCA9ICI8aHRtbD48aGVhZD48L2hlYWQ+PGJvZHk+IgotICAgICAgICAiPHZpZGVvIGlkPSd2
aWRlbycgcHJlbG9hZD0nbm9uZSc+IgotICAgICAgICAiICAgIDxzb3VyY2Ugc3JjPSdtb3ZpZS5v
Z2cnIHR5cGU9J3ZpZGVvL29nZyc+IgotICAgICAgICAiICAgICAgICBZb3VyIGJyb3dzZXIgZG9l
cyBub3Qgc3VwcG9ydCB0aGUgdmlkZW8gdGFnLiIKLSAgICAgICAgIjwvdmlkZW8+IgotICAgICAg
ICAiPHZpZGVvIGlkPSd2aWRlbzInIHByZWxvYWQ9J25vbmUnPiIKLSAgICAgICAgIiAgICAgPHNv
dXJjZSBzcmM9J21vdmllLm9nZycgdHlwZT0ndmlkZW8vb2dnJz4iCi0gICAgICAgICIgICAgICAg
IFlvdXIgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSB2aWRlbyB0YWcuIgotICAgICAgICAi
PC92aWRlbz4iCi0gICAgICAgICI8aW5wdXQgdHlwZT0naGlkZGVuJyBpZD0ndGVzdCcgbmFtZT0n
ZmluaXNoJyB2YWx1ZT0nZmFsc2UnPjwvYm9keT48L2h0bWw+IjsKLSAgICB0ZXN0LT5sb2FkSHRt
bCh0ZXN0SFRNTCwgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAg
ICBHVmFyaWFudEJ1aWxkZXIgYnVpbGRlcjsKLSAgICBnX3ZhcmlhbnRfYnVpbGRlcl9pbml0KCZi
dWlsZGVyLCBHX1ZBUklBTlRfVFlQRV9WQVJESUNUKTsKLSAgICBnX3ZhcmlhbnRfYnVpbGRlcl9h
ZGQoJmJ1aWxkZXIsICJ7c3Z9IiwgInBhZ2VJRCIsIGdfdmFyaWFudF9uZXdfdWludDY0KHdlYmtp
dF93ZWJfdmlld19nZXRfcGFnZV9pZCh0ZXN0LT5tX3dlYlZpZXcpKSk7Ci0gICAgZ19hc3NlcnQo
dGVzdFJ1bm5lci0+cnVuVGVzdCgiV2ViS2l0RE9NTm9kZSIsICJ0YWctbmFtZXMiLCBnX3Zhcmlh
bnRfYnVpbGRlcl9lbmQoJmJ1aWxkZXIpKSk7Ci19Ci0KLXZvaWQgYmVmb3JlQWxsKCkKLXsKLSAg
ICB0ZXN0UnVubmVyID0gbmV3IFdlYlByb2Nlc3NUZXN0UnVubmVyKCk7Ci0gICAgd2Via2l0X3dl
Yl9jb250ZXh0X3NldF93ZWJfZXh0ZW5zaW9uc19kaXJlY3Rvcnkod2Via2l0X3dlYl9jb250ZXh0
X2dldF9kZWZhdWx0KCksIFdFQktJVF9URVNUX1dFQl9FWFRFTlNJT05TX0RJUik7Ci0KLSAgICBX
ZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRET01Ob2RlIiwgImhpZXJhcmNoeS1uYXZpZ2F0aW9uIiwg
dGVzdFdlYktpdERPTU5vZGVIaWVyYXJjaHlOYXZpZ2F0aW9uKTsKLSAgICBXZWJWaWV3VGVzdDo6
YWRkKCJXZWJLaXRET01Ob2RlIiwgImluc2VydGlvbiIsIHRlc3RXZWJLaXRET01Ob2RlSW5zZXJ0
aW9uKTsKLSAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRET01Ob2RlIiwgInRhZy1uYW1lcyIs
IHRlc3RXZWJLaXRET01Ob2RlVGFnTmFtZXMpOwotfQotCi12b2lkIGFmdGVyQWxsKCkKLXsKLSAg
ICBkZWxldGUgdGVzdFJ1bm5lcjsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3REb3dubG9hZHMuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdERvd25sb2Fkcy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGNlMTU5OTAuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvVGVzdERvd25sb2Fkcy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1
MjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJXZWJLaXRUZXN0U2VydmVyLmgiCi0jaW5jbHVkZSAi
V2ViVmlld1Rlc3QuaCIKLSNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgotI2luY2x1ZGUgPGd0ay9n
dGsuaD4KLSNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNp
bmNsdWRlIDx3ZWJraXQyL3dlYmtpdDIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5j
bHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQ
dHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLXN0YXRpYyBjaGFyKiBrVGVt
cERpcmVjdG9yeTsKLQotY2xhc3MgRG93bmxvYWRUZXN0OiBwdWJsaWMgVGVzdCB7Ci1wdWJsaWM6
Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShEb3dubG9hZFRlc3QpOwotCi0gICAgZW51bSBE
b3dubG9hZEV2ZW50IHsKLSAgICAgICAgU3RhcnRlZCwKLSAgICAgICAgUmVjZWl2ZWRSZXNwb25z
ZSwKLSAgICAgICAgQ3JlYXRlZERlc3RpbmF0aW9uLAotICAgICAgICBSZWNlaXZlZERhdGEsCi0g
ICAgICAgIEZhaWxlZCwKLSAgICAgICAgRmluaXNoZWQKLSAgICB9OwotCi0gICAgc3RhdGljIHZv
aWQgcmVjZWl2ZWRSZXNwb25zZUNhbGxiYWNrKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgR1Bh
cmFtU3BlYyosIERvd25sb2FkVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0KHdl
YmtpdF9kb3dubG9hZF9nZXRfcmVzcG9uc2UoZG93bmxvYWQpKTsKLSAgICAgICAgdGVzdC0+cmVj
ZWl2ZWRSZXNwb25zZShkb3dubG9hZCk7Ci0gICAgfQotCi0gICAgc3RhdGljIGdib29sZWFuIGNy
ZWF0ZWREZXN0aW5hdGlvbkNhbGxiYWNrKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgY29uc3Qg
Z2NoYXIqIGRlc3RpbmF0aW9uLCBEb3dubG9hZFRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICBn
X2Fzc2VydCh3ZWJraXRfZG93bmxvYWRfZ2V0X2Rlc3RpbmF0aW9uKGRvd25sb2FkKSk7Ci0gICAg
ICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfZG93bmxvYWRfZ2V0X2Rlc3RpbmF0aW9uKGRvd25s
b2FkKSwgPT0sIGRlc3RpbmF0aW9uKTsKLSAgICAgICAgdGVzdC0+Y3JlYXRlZERlc3RpbmF0aW9u
KGRvd25sb2FkLCBkZXN0aW5hdGlvbik7Ci0gICAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQot
ICAgIHN0YXRpYyBnYm9vbGVhbiByZWNlaXZlZERhdGFDYWxsYmFjayhXZWJLaXREb3dubG9hZCog
ZG93bmxvYWQsIGd1aW50NjQgZGF0YUxlbmd0aCwgRG93bmxvYWRUZXN0KiB0ZXN0KQotICAgIHsK
LSAgICAgICAgdGVzdC0+cmVjZWl2ZWREYXRhKGRvd25sb2FkLCBkYXRhTGVuZ3RoKTsKLSAgICAg
ICAgcmV0dXJuIFRSVUU7Ci0gICAgfQotCi0gICAgc3RhdGljIGdib29sZWFuIGZpbmlzaGVkQ2Fs
bGJhY2soV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBEb3dubG9hZFRlc3QqIHRlc3QpCi0gICAg
ewotICAgICAgICB0ZXN0LT5maW5pc2hlZChkb3dubG9hZCk7Ci0gICAgICAgIHJldHVybiBUUlVF
OwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiBmYWlsZWRDYWxsYmFjayhXZWJLaXREb3du
bG9hZCogZG93bmxvYWQsIEdFcnJvciogZXJyb3IsIERvd25sb2FkVGVzdCogdGVzdCkKLSAgICB7
Ci0gICAgICAgIGdfYXNzZXJ0KGVycm9yKTsKLSAgICAgICAgdGVzdC0+ZmFpbGVkKGRvd25sb2Fk
LCBlcnJvcik7Ci0gICAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9v
bGVhbiBkZWNpZGVEZXN0aW5hdGlvbkNhbGxiYWNrKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwg
Y29uc3QgZ2NoYXIqIHN1Z2dlc3RlZEZpbGVuYW1lLCBEb3dubG9hZFRlc3QqIHRlc3QpCi0gICAg
ewotICAgICAgICBnX2Fzc2VydChzdWdnZXN0ZWRGaWxlbmFtZSk7Ci0gICAgICAgIHRlc3QtPmRl
Y2lkZURlc3RpbmF0aW9uKGRvd25sb2FkLCBzdWdnZXN0ZWRGaWxlbmFtZSk7Ci0gICAgICAgIHJl
dHVybiBUUlVFOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGRvd25sb2FkU3RhcnRlZENhbGxi
YWNrKFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwg
RG93bmxvYWRUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgZ19hc3NlcnQod2Via2l0X2Rvd25s
b2FkX2dldF9yZXF1ZXN0KGRvd25sb2FkKSk7Ci0gICAgICAgIHRlc3QtPnN0YXJ0ZWQoZG93bmxv
YWQpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGRvd25sb2FkLCAibm90aWZ5OjpyZXNwb25z
ZSIsIEdfQ0FMTEJBQ0socmVjZWl2ZWRSZXNwb25zZUNhbGxiYWNrKSwgdGVzdCk7Ci0gICAgICAg
IGdfc2lnbmFsX2Nvbm5lY3QoZG93bmxvYWQsICJjcmVhdGVkLWRlc3RpbmF0aW9uIiwgR19DQUxM
QkFDSyhjcmVhdGVkRGVzdGluYXRpb25DYWxsYmFjayksIHRlc3QpOwotICAgICAgICBnX3NpZ25h
bF9jb25uZWN0KGRvd25sb2FkLCAicmVjZWl2ZWQtZGF0YSIsIEdfQ0FMTEJBQ0socmVjZWl2ZWRE
YXRhQ2FsbGJhY2spLCB0ZXN0KTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChkb3dubG9hZCwg
ImZpbmlzaGVkIiwgR19DQUxMQkFDSyhmaW5pc2hlZENhbGxiYWNrKSwgdGVzdCk7Ci0gICAgICAg
IGdfc2lnbmFsX2Nvbm5lY3QoZG93bmxvYWQsICJmYWlsZWQiLCBHX0NBTExCQUNLKGZhaWxlZENh
bGxiYWNrKSwgdGVzdCk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoZG93bmxvYWQsICJkZWNp
ZGUtZGVzdGluYXRpb24iLCBHX0NBTExCQUNLKGRlY2lkZURlc3RpbmF0aW9uQ2FsbGJhY2spLCB0
ZXN0KTsKLSAgICB9Ci0KLSAgICBEb3dubG9hZFRlc3QoKQotICAgICAgICA6IG1fd2ViQ29udGV4
dCh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSkKLSAgICAgICAgLCBtX21haW5Mb29w
KGdfbWFpbl9sb29wX25ldygwLCBUUlVFKSkKLSAgICAgICAgLCBtX2Rvd25sb2FkU2l6ZSgwKQot
ICAgIHsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYkNvbnRleHQsICJkb3dubG9hZC1z
dGFydGVkIiwgR19DQUxMQkFDSyhkb3dubG9hZFN0YXJ0ZWRDYWxsYmFjayksIHRoaXMpOwotICAg
IH0KLQotICAgIH5Eb3dubG9hZFRlc3QoKQotICAgIHsKLSAgICAgICAgZ19zaWduYWxfaGFuZGxl
cnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fd2ViQ29udGV4dCwgR19TSUdOQUxfTUFUQ0hfREFUQSwg
MCwgMCwgMCwgMCwgdGhpcyk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3VucmVmKG1fbWFpbkxvb3Ap
OwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBzdGFydGVkKFdlYktpdERvd25sb2FkKiBkb3du
bG9hZCkKLSAgICB7Ci0gICAgICAgIG1fZG93bmxvYWRFdmVudHMuYXBwZW5kKFN0YXJ0ZWQpOwot
ICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlZFJlc3BvbnNlKFdlYktpdERvd25sb2Fk
KiBkb3dubG9hZCkKLSAgICB7Ci0gICAgICAgIG1fZG93bmxvYWRFdmVudHMuYXBwZW5kKFJlY2Vp
dmVkUmVzcG9uc2UpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVkRGVzdGluYXRp
b24oV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBjb25zdCBjaGFyKiBkZXN0aW5hdGlvbikKLSAg
ICB7Ci0gICAgICAgIG1fZG93bmxvYWRFdmVudHMuYXBwZW5kKENyZWF0ZWREZXN0aW5hdGlvbik7
Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHJlY2VpdmVkRGF0YShXZWJLaXREb3dubG9hZCog
ZG93bmxvYWQsIGd1aW50NjQgZGF0YUxlbmd0aCkKLSAgICB7Ci0gICAgICAgIG1fZG93bmxvYWRT
aXplICs9IGRhdGFMZW5ndGg7Ci0gICAgICAgIGlmICghbV9kb3dubG9hZEV2ZW50cy5jb250YWlu
cyhSZWNlaXZlZERhdGEpKQotICAgICAgICAgICAgbV9kb3dubG9hZEV2ZW50cy5hcHBlbmQoUmVj
ZWl2ZWREYXRhKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZmluaXNoZWQoV2ViS2l0RG93
bmxvYWQqIGRvd25sb2FkKQotICAgIHsKLSAgICAgICAgZ19hc3NlcnRfY21wdWludChtX2Rvd25s
b2FkU2l6ZSwgPT0sIHdlYmtpdF9kb3dubG9hZF9nZXRfcmVjZWl2ZWRfZGF0YV9sZW5ndGgoZG93
bmxvYWQpKTsKLSAgICAgICAgbV9kb3dubG9hZEV2ZW50cy5hcHBlbmQoRmluaXNoZWQpOwotICAg
ICAgICBnX21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIHZpcnR1YWwg
dm9pZCBmYWlsZWQoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBHRXJyb3IqIGVycm9yKQotICAg
IHsKLSAgICAgICAgbV9kb3dubG9hZEV2ZW50cy5hcHBlbmQoRmFpbGVkKTsKLSAgICB9Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgZGVjaWRlRGVzdGluYXRpb24oV2ViS2l0RG93bmxvYWQqIGRvd25sb2Fk
LCBjb25zdCBnY2hhciogc3VnZ2VzdGVkRmlsZW5hbWUpCi0gICAgewotICAgICAgICBHT3duUHRy
PGNoYXI+IGRlc3RpbmF0aW9uKGdfYnVpbGRfZmlsZW5hbWUoa1RlbXBEaXJlY3RvcnksIHN1Z2dl
c3RlZEZpbGVuYW1lLCBOVUxMKSk7Ci0gICAgICAgIEdPd25QdHI8Y2hhcj4gZGVzdGluYXRpb25V
UkkoZ19maWxlbmFtZV90b191cmkoZGVzdGluYXRpb24uZ2V0KCksIDAsIDApKTsKLSAgICAgICAg
d2Via2l0X2Rvd25sb2FkX3NldF9kZXN0aW5hdGlvbihkb3dubG9hZCwgZGVzdGluYXRpb25VUkku
Z2V0KCkpOwotICAgIH0KLQotICAgIFdlYktpdERvd25sb2FkKiBkb3dubG9hZFVSSUFuZFdhaXRV
bnRpbEZpbmlzaGVzKGNvbnN0IENTdHJpbmcmIHJlcXVlc3RVUkkpCi0gICAgewotICAgICAgICBX
ZWJLaXREb3dubG9hZCogZG93bmxvYWQgPSB3ZWJraXRfd2ViX2NvbnRleHRfZG93bmxvYWRfdXJp
KG1fd2ViQ29udGV4dCwgcmVxdWVzdFVSSS5kYXRhKCkpOwotICAgICAgICBhc3NlcnRPYmplY3RJ
c0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKGRvd25sb2FkKSk7Ci0KLSAgICAgICAg
V2ViS2l0VVJJUmVxdWVzdCogcmVxdWVzdCA9IHdlYmtpdF9kb3dubG9hZF9nZXRfcmVxdWVzdChk
b3dubG9hZCk7Ci0gICAgICAgIGdfYXNzZXJ0KHJlcXVlc3QpOwotICAgICAgICBBU1NFUlRfQ01Q
X0NTVFJJTkcod2Via2l0X3VyaV9yZXF1ZXN0X2dldF91cmkocmVxdWVzdCksID09LCByZXF1ZXN0
VVJJKTsKLQotICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Ci0KLSAgICAgICAg
cmV0dXJuIGRvd25sb2FkOwotICAgIH0KLQotICAgIHZvaWQgY2hlY2tEZXN0aW5hdGlvbkFuZERl
bGV0ZUZpbGUoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBjb25zdCBjaGFyKiBleHBlY3RlZE5h
bWUpCi0gICAgewotICAgICAgICBpZiAoIXdlYmtpdF9kb3dubG9hZF9nZXRfZGVzdGluYXRpb24o
ZG93bmxvYWQpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBHUmVmUHRyPEdGaWxlPiBk
ZXN0RmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl91cmkod2Via2l0X2Rvd25sb2FkX2dl
dF9kZXN0aW5hdGlvbihkb3dubG9hZCkpKTsKLSAgICAgICAgR093blB0cjxjaGFyPiBkZXN0QmFz
ZW5hbWUoZ19maWxlX2dldF9iYXNlbmFtZShkZXN0RmlsZS5nZXQoKSkpOwotICAgICAgICBnX2Fz
c2VydF9jbXBzdHIoZGVzdEJhc2VuYW1lLmdldCgpLCA9PSwgZXhwZWN0ZWROYW1lKTsKLQotICAg
ICAgICBnX2ZpbGVfZGVsZXRlKGRlc3RGaWxlLmdldCgpLCAwLCAwKTsKLSAgICB9Ci0KLSAgICBX
ZWJLaXRXZWJDb250ZXh0KiBtX3dlYkNvbnRleHQ7Ci0gICAgR01haW5Mb29wKiBtX21haW5Mb29w
OwotICAgIFZlY3RvcjxEb3dubG9hZEV2ZW50PiBtX2Rvd25sb2FkRXZlbnRzOwotICAgIGd1aW50
NjQgbV9kb3dubG9hZFNpemU7Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0RG93bmxvYWRMb2NhbEZp
bGUoRG93bmxvYWRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIEdPd25QdHI8Y2hh
cj4gc291cmNlUGF0aChnX2J1aWxkX2ZpbGVuYW1lKFRlc3Q6OmdldFdlYktpdDFUZXN0UmVzb3Vj
ZXNEaXIoKS5kYXRhKCksICJ0ZXN0LnBkZiIsIE5VTEwpKTsKLSAgICBHUmVmUHRyPEdGaWxlPiBz
b3VyY2UgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0aChzb3VyY2VQYXRoLmdldCgpKSk7
Ci0gICAgR1JlZlB0cjxHRmlsZUluZm8+IHNvdXJjZUluZm8gPSBhZG9wdEdSZWYoZ19maWxlX3F1
ZXJ5X2luZm8oc291cmNlLmdldCgpLCBHX0ZJTEVfQVRUUklCVVRFX1NUQU5EQVJEX1NJWkUsIHN0
YXRpY19jYXN0PEdGaWxlUXVlcnlJbmZvRmxhZ3M+KDApLCAwLCAwKSk7Ci0gICAgR093blB0cjxj
aGFyPiBzb3VyY2VVUkkoZ19maWxlX2dldF91cmkoc291cmNlLmdldCgpKSk7Ci0gICAgR1JlZlB0
cjxXZWJLaXREb3dubG9hZD4gZG93bmxvYWQgPSBhZG9wdEdSZWYodGVzdC0+ZG93bmxvYWRVUklB
bmRXYWl0VW50aWxGaW5pc2hlcyhzb3VyY2VVUkkuZ2V0KCkpKTsKLSAgICBnX2Fzc2VydCghd2Vi
a2l0X2Rvd25sb2FkX2dldF93ZWJfdmlldyhkb3dubG9hZC5nZXQoKSkpOwotCi0gICAgVmVjdG9y
PERvd25sb2FkVGVzdDo6RG93bmxvYWRFdmVudD4mIGV2ZW50cyA9IHRlc3QtPm1fZG93bmxvYWRF
dmVudHM7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCA1KTsKLSAgICBn
X2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgRG93bmxvYWRUZXN0OjpTdGFydGVkKTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgRG93bmxvYWRUZXN0OjpSZWNlaXZlZFJl
c3BvbnNlKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgRG93bmxvYWRUZXN0
OjpDcmVhdGVkRGVzdGluYXRpb24pOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbM10sID09
LCBEb3dubG9hZFRlc3Q6OlJlY2VpdmVkRGF0YSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50
c1s0XSwgPT0sIERvd25sb2FkVGVzdDo6RmluaXNoZWQpOwotCi0gICAgV2ViS2l0VVJJUmVxdWVz
dCogcmVxdWVzdCA9IHdlYmtpdF9kb3dubG9hZF9nZXRfcmVxdWVzdChkb3dubG9hZC5nZXQoKSk7
Ci0gICAgZ19hc3NlcnQocmVxdWVzdCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF91cmlf
cmVxdWVzdF9nZXRfdXJpKHJlcXVlc3QpLCA9PSwgc291cmNlVVJJLmdldCgpKTsKLQotICAgIGdf
YXNzZXJ0X2NtcGludCh0ZXN0LT5tX2Rvd25sb2FkU2l6ZSwgPT0sIGdfZmlsZV9pbmZvX2dldF9z
aXplKHNvdXJjZUluZm8uZ2V0KCkpKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfZG93bmxvYWRfZ2V0
X2Rlc3RpbmF0aW9uKGRvd25sb2FkLmdldCgpKSk7Ci0gICAgZ19hc3NlcnRfY21wZmxvYXQod2Vi
a2l0X2Rvd25sb2FkX2dldF9lc3RpbWF0ZWRfcHJvZ3Jlc3MoZG93bmxvYWQuZ2V0KCkpLCA9PSwg
MSk7Ci0gICAgdGVzdC0+Y2hlY2tEZXN0aW5hdGlvbkFuZERlbGV0ZUZpbGUoZG93bmxvYWQuZ2V0
KCksICJ0ZXN0LnBkZiIpOwotfQotCi1jbGFzcyBEb3dubG9hZEVycm9yVGVzdDogcHVibGljIERv
d25sb2FkVGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShEb3dubG9h
ZEVycm9yVGVzdCk7Ci0KLSAgICBEb3dubG9hZEVycm9yVGVzdCgpCi0gICAgICAgIDogbV9leHBl
Y3RlZEVycm9yKFdFQktJVF9ET1dOTE9BRF9FUlJPUl9ORVRXT1JLKQotICAgIHsKLSAgICB9Ci0K
LSAgICB2b2lkIHJlY2VpdmVkUmVzcG9uc2UoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQotICAg
IHsKLSAgICAgICAgRG93bmxvYWRUZXN0OjpyZWNlaXZlZFJlc3BvbnNlKGRvd25sb2FkKTsKLSAg
ICAgICAgaWYgKG1fZXhwZWN0ZWRFcnJvciA9PSBXRUJLSVRfRE9XTkxPQURfRVJST1JfQ0FOQ0VM
TEVEX0JZX1VTRVIpCi0gICAgICAgICAgICB3ZWJraXRfZG93bmxvYWRfY2FuY2VsKGRvd25sb2Fk
KTsKLSAgICB9Ci0KLSAgICB2b2lkIGNyZWF0ZWREZXN0aW5hdGlvbihXZWJLaXREb3dubG9hZCog
ZG93bmxvYWQsIGNvbnN0IGNoYXIqIGRlc3RpbmF0aW9uKQotICAgIHsKLSAgICAgICAgZ19hc3Nl
cnRfbm90X3JlYWNoZWQoKTsKLSAgICB9Ci0KLSAgICB2b2lkIGZhaWxlZChXZWJLaXREb3dubG9h
ZCogZG93bmxvYWQsIEdFcnJvciogZXJyb3IpCi0gICAgewotICAgICAgICBnX2Fzc2VydChnX2Vy
cm9yX21hdGNoZXMoZXJyb3IsIFdFQktJVF9ET1dOTE9BRF9FUlJPUiwgbV9leHBlY3RlZEVycm9y
KSk7Ci0gICAgICAgIERvd25sb2FkVGVzdDo6ZmFpbGVkKGRvd25sb2FkLCBlcnJvcik7Ci0gICAg
fQotCi0gICAgdm9pZCBkZWNpZGVEZXN0aW5hdGlvbihXZWJLaXREb3dubG9hZCogZG93bmxvYWQs
IGNvbnN0IGdjaGFyKiBzdWdnZXN0ZWRGaWxlbmFtZSkKLSAgICB7Ci0gICAgICAgIGlmIChtX2V4
cGVjdGVkRXJyb3IgIT0gV0VCS0lUX0RPV05MT0FEX0VSUk9SX0RFU1RJTkFUSU9OKSB7Ci0gICAg
ICAgICAgICBEb3dubG9hZFRlc3Q6OmRlY2lkZURlc3RpbmF0aW9uKGRvd25sb2FkLCBzdWdnZXN0
ZWRGaWxlbmFtZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgd2Vi
a2l0X2Rvd25sb2FkX3NldF9kZXN0aW5hdGlvbihkb3dubG9hZCwgImZpbGU6Ly8vZm9vL2JhciIp
OwotICAgIH0KLQotICAgIFdlYktpdERvd25sb2FkRXJyb3IgbV9leHBlY3RlZEVycm9yOwotfTsK
LQotc3RhdGljIHZvaWQgdGVzdERvd25sb2FkTG9jYWxGaWxlRXJyb3IoRG93bmxvYWRFcnJvclRl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+bV9leHBlY3RlZEVycm9yID0g
V0VCS0lUX0RPV05MT0FEX0VSUk9SX05FVFdPUks7Ci0gICAgR1JlZlB0cjxXZWJLaXREb3dubG9h
ZD4gZG93bmxvYWQgPSBhZG9wdEdSZWYodGVzdC0+ZG93bmxvYWRVUklBbmRXYWl0VW50aWxGaW5p
c2hlcygiZmlsZTovLy9mb28vYmFyIikpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG93bmxvYWRf
Z2V0X3dlYl92aWV3KGRvd25sb2FkLmdldCgpKSk7Ci0KLSAgICBWZWN0b3I8RG93bmxvYWRUZXN0
OjpEb3dubG9hZEV2ZW50PiYgZXZlbnRzID0gdGVzdC0+bV9kb3dubG9hZEV2ZW50czsKLSAgICBn
X2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDMpOwotICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHNbMF0sID09LCBEb3dubG9hZFRlc3Q6OlN0YXJ0ZWQpOwotICAgIGdfYXNzZXJ0X2Nt
cGludChldmVudHNbMV0sID09LCBEb3dubG9hZFRlc3Q6OkZhaWxlZCk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KGV2ZW50c1syXSwgPT0sIERvd25sb2FkVGVzdDo6RmluaXNoZWQpOwotICAgIGV2ZW50
cy5jbGVhcigpOwotICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0
aW1hdGVkX3Byb2dyZXNzKGRvd25sb2FkLmdldCgpKSwgPCwgMSk7Ci0KLSAgICB0ZXN0LT5tX2V4
cGVjdGVkRXJyb3IgPSBXRUJLSVRfRE9XTkxPQURfRVJST1JfREVTVElOQVRJT047Ci0gICAgR093
blB0cjxjaGFyPiBwYXRoKGdfYnVpbGRfZmlsZW5hbWUoVGVzdDo6Z2V0V2ViS2l0MVRlc3RSZXNv
dWNlc0RpcigpLmRhdGEoKSwgInRlc3QucGRmIiwgTlVMTCkpOwotICAgIEdSZWZQdHI8R0ZpbGU+
IGZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0aChwYXRoLmdldCgpKSk7Ci0gICAg
R093blB0cjxjaGFyPiB1cmkoZ19maWxlX2dldF91cmkoZmlsZS5nZXQoKSkpOwotICAgIGRvd25s
b2FkID0gYWRvcHRHUmVmKHRlc3QtPmRvd25sb2FkVVJJQW5kV2FpdFVudGlsRmluaXNoZXModXJp
LmdldCgpKSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9kb3dubG9hZF9nZXRfd2ViX3ZpZXcoZG93
bmxvYWQuZ2V0KCkpKTsKLQotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwg
NCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIERvd25sb2FkVGVzdDo6U3Rh
cnRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIERvd25sb2FkVGVzdDo6
UmVjZWl2ZWRSZXNwb25zZSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIERv
d25sb2FkVGVzdDo6RmFpbGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzNdLCA9PSwg
RG93bmxvYWRUZXN0OjpGaW5pc2hlZCk7Ci0gICAgZXZlbnRzLmNsZWFyKCk7Ci0gICAgZ19hc3Nl
cnRfY21wZmxvYXQod2Via2l0X2Rvd25sb2FkX2dldF9lc3RpbWF0ZWRfcHJvZ3Jlc3MoZG93bmxv
YWQuZ2V0KCkpLCA8LCAxKTsKLSAgICB0ZXN0LT5jaGVja0Rlc3RpbmF0aW9uQW5kRGVsZXRlRmls
ZShkb3dubG9hZC5nZXQoKSwgImJhciIpOwotCi0gICAgdGVzdC0+bV9leHBlY3RlZEVycm9yID0g
V0VCS0lUX0RPV05MT0FEX0VSUk9SX0NBTkNFTExFRF9CWV9VU0VSOwotICAgIGRvd25sb2FkID0g
YWRvcHRHUmVmKHRlc3QtPmRvd25sb2FkVVJJQW5kV2FpdFVudGlsRmluaXNoZXModXJpLmdldCgp
KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9kb3dubG9hZF9nZXRfd2ViX3ZpZXcoZG93bmxvYWQu
Z2V0KCkpKTsKLQotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgNCk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIERvd25sb2FkVGVzdDo6U3RhcnRlZCk7
Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIERvd25sb2FkVGVzdDo6UmVjZWl2
ZWRSZXNwb25zZSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIERvd25sb2Fk
VGVzdDo6RmFpbGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzNdLCA9PSwgRG93bmxv
YWRUZXN0OjpGaW5pc2hlZCk7Ci0gICAgZXZlbnRzLmNsZWFyKCk7Ci0gICAgZ19hc3NlcnRfY21w
ZmxvYXQod2Via2l0X2Rvd25sb2FkX2dldF9lc3RpbWF0ZWRfcHJvZ3Jlc3MoZG93bmxvYWQuZ2V0
KCkpLCA8LCAxKTsKLSAgICB0ZXN0LT5jaGVja0Rlc3RpbmF0aW9uQW5kRGVsZXRlRmlsZShkb3du
bG9hZC5nZXQoKSwgInRlc3QucGRmIik7Ci19Ci0KLXN0YXRpYyBXZWJLaXRUZXN0U2VydmVyKiBr
U2VydmVyOwotc3RhdGljIGNvbnN0IGNoYXIqIGtTZXJ2ZXJTdWdnZXN0ZWRGaWxlbmFtZSA9ICJ3
ZWJraXQtZG93bmxvYWRlZC1maWxlIjsKLQotc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291
cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwg
R0hhc2hUYWJsZSosIFNvdXBDbGllbnRDb250ZXh0KiwgZ3BvaW50ZXIpCi17Ci0gICAgaWYgKG1l
c3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKLSAgICAgICAgc291cF9tZXNzYWdl
X3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIEdPd25QdHI8Y2hhcj4gZmlsZVBhdGgoZ19idWlsZF9m
aWxlbmFtZShUZXN0OjpnZXRXZWJLaXQxVGVzdFJlc291Y2VzRGlyKCkuZGF0YSgpLCBwYXRoLCBO
VUxMKSk7Ci0gICAgY2hhciogY29udGVudHM7Ci0gICAgZ3NpemUgY29udGVudHNMZW5ndGg7Ci0g
ICAgaWYgKCFnX2ZpbGVfZ2V0X2NvbnRlbnRzKGZpbGVQYXRoLmdldCgpLCAmY29udGVudHMsICZj
b250ZW50c0xlbmd0aCwgMCkpIHsKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVz
c2FnZSwgU09VUF9TVEFUVVNfTk9UX0ZPVU5EKTsKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlf
Y29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7
Ci0KLSAgICBHT3duUHRyPGNoYXI+IGNvbnRlbnREaXNwb3NpdGlvbihnX3N0cmR1cF9wcmludGYo
ImZpbGVuYW1lPSVzIiwga1NlcnZlclN1Z2dlc3RlZEZpbGVuYW1lKSk7Ci0gICAgc291cF9tZXNz
YWdlX2hlYWRlcnNfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJDb250ZW50LURp
c3Bvc2l0aW9uIiwgY29udGVudERpc3Bvc2l0aW9uLmdldCgpKTsKLSAgICBzb3VwX21lc3NhZ2Vf
Ym9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgY29u
dGVudHMsIGNvbnRlbnRzTGVuZ3RoKTsKLQotICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRl
KG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0RG93bmxvYWRS
ZW1vdGVGaWxlKERvd25sb2FkVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBHUmVm
UHRyPFdlYktpdERvd25sb2FkPiBkb3dubG9hZCA9IGFkb3B0R1JlZih0ZXN0LT5kb3dubG9hZFVS
SUFuZFdhaXRVbnRpbEZpbmlzaGVzKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi90ZXN0LnBkZiIp
KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9kb3dubG9hZF9nZXRfd2ViX3ZpZXcoZG93bmxvYWQu
Z2V0KCkpKTsKLQotICAgIFZlY3RvcjxEb3dubG9hZFRlc3Q6OkRvd25sb2FkRXZlbnQ+JiBldmVu
dHMgPSB0ZXN0LT5tX2Rvd25sb2FkRXZlbnRzOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMu
c2l6ZSgpLCA9PSwgNSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIERvd25s
b2FkVGVzdDo6U3RhcnRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIERv
d25sb2FkVGVzdDo6UmVjZWl2ZWRSZXNwb25zZSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50
c1syXSwgPT0sIERvd25sb2FkVGVzdDo6Q3JlYXRlZERlc3RpbmF0aW9uKTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoZXZlbnRzWzNdLCA9PSwgRG93bmxvYWRUZXN0OjpSZWNlaXZlZERhdGEpOwotICAg
IGdfYXNzZXJ0X2NtcGludChldmVudHNbNF0sID09LCBEb3dubG9hZFRlc3Q6OkZpbmlzaGVkKTsK
LSAgICBldmVudHMuY2xlYXIoKTsKLQotICAgIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QgPSB3
ZWJraXRfZG93bmxvYWRfZ2V0X3JlcXVlc3QoZG93bmxvYWQuZ2V0KCkpOwotICAgIGdfYXNzZXJ0
KHJlcXVlc3QpOwotICAgIEFTU0VSVF9DTVBfQ1NUUklORyh3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0
X3VyaShyZXF1ZXN0KSwgPT0sIGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi90ZXN0LnBkZiIpKTsK
LQotICAgIGdfYXNzZXJ0KHdlYmtpdF9kb3dubG9hZF9nZXRfZGVzdGluYXRpb24oZG93bmxvYWQu
Z2V0KCkpKTsKLSAgICBnX2Fzc2VydF9jbXBmbG9hdCh3ZWJraXRfZG93bmxvYWRfZ2V0X2VzdGlt
YXRlZF9wcm9ncmVzcyhkb3dubG9hZC5nZXQoKSksID09LCAxKTsKLSAgICB0ZXN0LT5jaGVja0Rl
c3RpbmF0aW9uQW5kRGVsZXRlRmlsZShkb3dubG9hZC5nZXQoKSwga1NlcnZlclN1Z2dlc3RlZEZp
bGVuYW1lKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdERvd25sb2FkUmVtb3RlRmlsZUVycm9yKERv
d25sb2FkRXJyb3JUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPm1fZXhw
ZWN0ZWRFcnJvciA9IFdFQktJVF9ET1dOTE9BRF9FUlJPUl9ORVRXT1JLOwotICAgIEdSZWZQdHI8
V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkID0gYWRvcHRHUmVmKHRlc3QtPmRvd25sb2FkVVJJQW5k
V2FpdFVudGlsRmluaXNoZXMoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2ZvbyIpKSk7Ci0gICAg
Z19hc3NlcnQoIXdlYmtpdF9kb3dubG9hZF9nZXRfd2ViX3ZpZXcoZG93bmxvYWQuZ2V0KCkpKTsK
LQotICAgIFZlY3RvcjxEb3dubG9hZFRlc3Q6OkRvd25sb2FkRXZlbnQ+JiBldmVudHMgPSB0ZXN0
LT5tX2Rvd25sb2FkRXZlbnRzOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9
PSwgNCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIERvd25sb2FkVGVzdDo6
U3RhcnRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIERvd25sb2FkVGVz
dDo6UmVjZWl2ZWRSZXNwb25zZSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0s
IERvd25sb2FkVGVzdDo6RmFpbGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzNdLCA9
PSwgRG93bmxvYWRUZXN0OjpGaW5pc2hlZCk7Ci0gICAgZXZlbnRzLmNsZWFyKCk7Ci0gICAgV2Vi
S2l0VVJJUmVzcG9uc2UqIHJlc3BvbnNlID0gd2Via2l0X2Rvd25sb2FkX2dldF9yZXNwb25zZShk
b3dubG9hZC5nZXQoKSk7Ci0gICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfdXJpX3Jlc3BvbnNl
X2dldF9zdGF0dXNfY29kZShyZXNwb25zZSksID09LCA0MDQpOwotICAgIGdfYXNzZXJ0X2NtcGZs
b2F0KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNzKGRvd25sb2FkLmdldCgp
KSwgPCwgMSk7Ci0KLSAgICB0ZXN0LT5tX2V4cGVjdGVkRXJyb3IgPSBXRUJLSVRfRE9XTkxPQURf
RVJST1JfREVTVElOQVRJT047Ci0gICAgZG93bmxvYWQgPSBhZG9wdEdSZWYodGVzdC0+ZG93bmxv
YWRVUklBbmRXYWl0VW50aWxGaW5pc2hlcyhrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvdGVzdC5w
ZGYiKSkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG93bmxvYWRfZ2V0X3dlYl92aWV3KGRvd25s
b2FkLmdldCgpKSk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDQp
OwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBEb3dubG9hZFRlc3Q6OlN0YXJ0
ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBEb3dubG9hZFRlc3Q6OlJl
Y2VpdmVkUmVzcG9uc2UpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBEb3du
bG9hZFRlc3Q6OkZhaWxlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1szXSwgPT0sIERv
d25sb2FkVGVzdDo6RmluaXNoZWQpOwotICAgIGV2ZW50cy5jbGVhcigpOwotICAgIGdfYXNzZXJ0
X2NtcGZsb2F0KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNzKGRvd25sb2Fk
LmdldCgpKSwgPCwgMSk7Ci0gICAgdGVzdC0+Y2hlY2tEZXN0aW5hdGlvbkFuZERlbGV0ZUZpbGUo
ZG93bmxvYWQuZ2V0KCksICJiYXIiKTsKLQotICAgIHRlc3QtPm1fZXhwZWN0ZWRFcnJvciA9IFdF
QktJVF9ET1dOTE9BRF9FUlJPUl9DQU5DRUxMRURfQllfVVNFUjsKLSAgICBkb3dubG9hZCA9IGFk
b3B0R1JlZih0ZXN0LT5kb3dubG9hZFVSSUFuZFdhaXRVbnRpbEZpbmlzaGVzKGtTZXJ2ZXItPmdl
dFVSSUZvclBhdGgoIi90ZXN0LnBkZiIpKSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9kb3dubG9h
ZF9nZXRfd2ViX3ZpZXcoZG93bmxvYWQuZ2V0KCkpKTsKLQotICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHMuc2l6ZSgpLCA9PSwgNCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0s
IERvd25sb2FkVGVzdDo6U3RhcnRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwg
PT0sIERvd25sb2FkVGVzdDo6UmVjZWl2ZWRSZXNwb25zZSk7Ci0gICAgZ19hc3NlcnRfY21waW50
KGV2ZW50c1syXSwgPT0sIERvd25sb2FkVGVzdDo6RmFpbGVkKTsKLSAgICBnX2Fzc2VydF9jbXBp
bnQoZXZlbnRzWzNdLCA9PSwgRG93bmxvYWRUZXN0OjpGaW5pc2hlZCk7Ci0gICAgZXZlbnRzLmNs
ZWFyKCk7Ci0gICAgZ19hc3NlcnRfY21wZmxvYXQod2Via2l0X2Rvd25sb2FkX2dldF9lc3RpbWF0
ZWRfcHJvZ3Jlc3MoZG93bmxvYWQuZ2V0KCkpLCA8LCAxKTsKLSAgICB0ZXN0LT5jaGVja0Rlc3Rp
bmF0aW9uQW5kRGVsZXRlRmlsZShkb3dubG9hZC5nZXQoKSwga1NlcnZlclN1Z2dlc3RlZEZpbGVu
YW1lKTsKLX0KLQotY2xhc3MgV2ViVmlld0Rvd25sb2FkVGVzdDogcHVibGljIFdlYlZpZXdUZXN0
IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFdlYlZpZXdEb3dubG9hZFRl
c3QpOwotCi0gICAgc3RhdGljIHZvaWQgZG93bmxvYWRTdGFydGVkQ2FsbGJhY2soV2ViS2l0V2Vi
Q29udGV4dCogY29udGV4dCwgV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBXZWJWaWV3RG93bmxv
YWRUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+bV9kb3dubG9hZCA9IGRvd25sb2Fk
OwotICAgICAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdf
T0JKRUNUKGRvd25sb2FkKSk7Ci0gICAgICAgIHRlc3QtPnF1aXRNYWluTG9vcCgpOwotICAgIH0K
LQotICAgIFdlYlZpZXdEb3dubG9hZFRlc3QoKQotICAgIHsKLSAgICAgICAgZ19zaWduYWxfY29u
bmVjdCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQobV93ZWJWaWV3KSwgImRvd25sb2FkLXN0
YXJ0ZWQiLCBHX0NBTExCQUNLKGRvd25sb2FkU3RhcnRlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAg
fQotCi0gICAgfldlYlZpZXdEb3dubG9hZFRlc3QoKQotICAgIHsKLSAgICAgICAgZ19zaWduYWxf
aGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dCht
X3dlYlZpZXcpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKLSAgICB9
Ci0KLSAgICB2b2lkIHdhaXRVbnRpbERvd25sb2FkU3RhcnRlZCgpCi0gICAgewotICAgICAgICBt
X2Rvd25sb2FkID0gMDsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotICAg
ICAgICBnX2Fzc2VydChtX2Rvd25sb2FkLmdldCgpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZ2Jv
b2xlYW4gZG93bmxvYWREZWNpZGVEZXN0aW5hdGlvbkNhbGxiYWNrKFdlYktpdERvd25sb2FkKiBk
b3dubG9hZCwgY29uc3QgZ2NoYXIqIHN1Z2dlc3RlZEZpbGVuYW1lLCBXZWJWaWV3RG93bmxvYWRU
ZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgR093blB0cjxjaGFyPiBkZXN0aW5hdGlvbihnX2J1
aWxkX2ZpbGVuYW1lKGtUZW1wRGlyZWN0b3J5LCBzdWdnZXN0ZWRGaWxlbmFtZSwgTlVMTCkpOwot
ICAgICAgICBHT3duUHRyPGNoYXI+IGRlc3RpbmF0aW9uVVJJKGdfZmlsZW5hbWVfdG9fdXJpKGRl
c3RpbmF0aW9uLmdldCgpLCAwLCAwKSk7Ci0gICAgICAgIHdlYmtpdF9kb3dubG9hZF9zZXRfZGVz
dGluYXRpb24oZG93bmxvYWQsIGRlc3RpbmF0aW9uVVJJLmdldCgpKTsKLSAgICAgICAgcmV0dXJu
IFRSVUU7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgZG93bmxvYWRGaW5pc2hlZENhbGxiYWNr
KFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgV2ViVmlld0Rvd25sb2FkVGVzdCogdGVzdCkKLSAg
ICB7Ci0gICAgICAgIHRlc3QtPnF1aXRNYWluTG9vcCgpOwotICAgIH0KLQotICAgIHZvaWQgd2Fp
dFVudGlsRG93bmxvYWRGaW5pc2hlZCgpCi0gICAgewotICAgICAgICBnX3NpZ25hbF9jb25uZWN0
KG1fZG93bmxvYWQuZ2V0KCksICJkZWNpZGUtZGVzdGluYXRpb24iLCBHX0NBTExCQUNLKGRvd25s
b2FkRGVjaWRlRGVzdGluYXRpb25DYWxsYmFjayksIHRoaXMpOwotICAgICAgICBnX3NpZ25hbF9j
b25uZWN0KG1fZG93bmxvYWQuZ2V0KCksICJmaW5pc2hlZCIsIEdfQ0FMTEJBQ0soZG93bmxvYWRG
aW5pc2hlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5M
b29wKTsKLSAgICB9Ci0KLSAgICBHUmVmUHRyPFdlYktpdERvd25sb2FkPiBtX2Rvd25sb2FkOwot
fTsKLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdEb3dubG9hZFVSSShXZWJWaWV3RG93bmxvYWRU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+
IGRvd25sb2FkID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJfdmlld19kb3dubG9hZF91cmkodGVzdC0+
bV93ZWJWaWV3LCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvdGVzdC5wZGYiKS5kYXRhKCkpKTsK
LSAgICB0ZXN0LT53YWl0VW50aWxEb3dubG9hZFN0YXJ0ZWQoKTsKLSAgICBnX2Fzc2VydCh0ZXN0
LT5tX3dlYlZpZXcgPT0gd2Via2l0X2Rvd25sb2FkX2dldF93ZWJfdmlldyhkb3dubG9hZC5nZXQo
KSkpOwotICAgIHRlc3QtPndhaXRVbnRpbERvd25sb2FkRmluaXNoZWQoKTsKLQotICAgIEdSZWZQ
dHI8R0ZpbGU+IGRvd25sb2FkRmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl91cmkod2Vi
a2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbihkb3dubG9hZC5nZXQoKSkpKTsKLSAgICBHUmVm
UHRyPEdGaWxlSW5mbz4gZG93bmxvYWRGaWxlSW5mbyA9IGFkb3B0R1JlZihnX2ZpbGVfcXVlcnlf
aW5mbyhkb3dubG9hZEZpbGUuZ2V0KCksIEdfRklMRV9BVFRSSUJVVEVfU1RBTkRBUkRfU0laRSwg
c3RhdGljX2Nhc3Q8R0ZpbGVRdWVyeUluZm9GbGFncz4oMCksIDAsIDApKTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoZ19maWxlX2luZm9fZ2V0X3NpemUoZG93bmxvYWRGaWxlSW5mby5nZXQoKSksID4s
IDApOwotICAgIGdfZmlsZV9kZWxldGUoZG93bmxvYWRGaWxlLmdldCgpLCAwLCAwKTsKLX0KLQot
Y2xhc3MgUG9saWN5UmVzcG9uc2VEb3dubG9hZFRlc3Q6IHB1YmxpYyBXZWJWaWV3RG93bmxvYWRU
ZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFBvbGljeVJlc3BvbnNl
RG93bmxvYWRUZXN0KTsKLQotICAgIHN0YXRpYyBnYm9vbGVhbiBkZWNpZGVQb2xpY3lDYWxsYmFj
ayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRQb2xpY3lEZWNpc2lvbiogZGVjaXNpb24s
IFdlYktpdFBvbGljeURlY2lzaW9uVHlwZSB0eXBlLCBQb2xpY3lSZXNwb25zZURvd25sb2FkVGVz
dCogdGVzdCkKLSAgICB7Ci0gICAgICAgIGlmICh0eXBlICE9IFdFQktJVF9QT0xJQ1lfREVDSVNJ
T05fVFlQRV9SRVNQT05TRSkKLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsKLQotICAgICAgICB3
ZWJraXRfcG9saWN5X2RlY2lzaW9uX2Rvd25sb2FkKGRlY2lzaW9uKTsKLSAgICAgICAgcmV0dXJu
IFRSVUU7Ci0gICAgfQotCi0gICAgUG9saWN5UmVzcG9uc2VEb3dubG9hZFRlc3QoKQotICAgIHsK
LSAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJkZWNpZGUtcG9saWN5IiwgR19D
QUxMQkFDSyhkZWNpZGVQb2xpY3lDYWxsYmFjayksIHRoaXMpOwotICAgIH0KLQotICAgIH5Qb2xp
Y3lSZXNwb25zZURvd25sb2FkVGVzdCgpCi0gICAgewotICAgICAgICBnX3NpZ25hbF9oYW5kbGVy
c19kaXNjb25uZWN0X21hdGNoZWQobV93ZWJWaWV3LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAw
LCAwLCAwLCB0aGlzKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNhbmNlbERvd25sb2FkQW5kV2FpdFVu
dGlsRmluaXNoZWQoKQotICAgIHsKLSAgICAgICAgd2Via2l0X2Rvd25sb2FkX2NhbmNlbChtX2Rv
d25sb2FkLmdldCgpKTsKLSAgICAgICAgd2FpdFVudGlsRG93bmxvYWRGaW5pc2hlZCgpOwotICAg
ICAgICBtX2Rvd25sb2FkID0gMDsKLSAgICB9Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0UG9saWN5
UmVzcG9uc2VEb3dubG9hZChQb2xpY3lSZXNwb25zZURvd25sb2FkVGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKLXsKLSAgICAvLyBUZXN0IHRoYXQgYSBkb3dubG9hZCBzdGFydGVkIGJ5IHRoZSB0
aGUgcG9saWN5IGNoZWNrZXIgY29udGFpbnMgdGhlIHdlYiB2aWV3LgotICAgIENTdHJpbmcgcmVx
dWVzdFVSSSA9IGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi90ZXN0LnBkZiIpLmRhdGEoKTsKLSAg
ICB0ZXN0LT5sb2FkVVJJKHJlcXVlc3RVUkkuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxE
b3dubG9hZFN0YXJ0ZWQoKTsKLQotICAgIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QgPSB3ZWJr
aXRfZG93bmxvYWRfZ2V0X3JlcXVlc3QodGVzdC0+bV9kb3dubG9hZC5nZXQoKSk7Ci0gICAgZ19h
c3NlcnQocmVxdWVzdCk7Ci0gICAgQVNTRVJUX0NNUF9DU1RSSU5HKHdlYmtpdF91cmlfcmVxdWVz
dF9nZXRfdXJpKHJlcXVlc3QpLCA9PSwgcmVxdWVzdFVSSSk7Ci0KLSAgICBnX2Fzc2VydCh0ZXN0
LT5tX3dlYlZpZXcgPT0gd2Via2l0X2Rvd25sb2FkX2dldF93ZWJfdmlldyh0ZXN0LT5tX2Rvd25s
b2FkLmdldCgpKSk7Ci0gICAgdGVzdC0+Y2FuY2VsRG93bmxvYWRBbmRXYWl0VW50aWxGaW5pc2hl
ZCgpOwotfQotCi12b2lkIGJlZm9yZUFsbCgpCi17Ci0gICAga1NlcnZlciA9IG5ldyBXZWJLaXRU
ZXN0U2VydmVyKCk7Ci0gICAga1NlcnZlci0+cnVuKHNlcnZlckNhbGxiYWNrKTsKLQotICAgIGtU
ZW1wRGlyZWN0b3J5ID0gZ19kaXJfbWFrZV90bXAoIldlYktpdDJUZXN0cy1YWFhYWFgiLCAwKTsK
LSAgICBnX2Fzc2VydChrVGVtcERpcmVjdG9yeSk7Ci0KLSAgICBEb3dubG9hZFRlc3Q6OmFkZCgi
RG93bmxvYWRzIiwgImxvY2FsLWZpbGUiLCB0ZXN0RG93bmxvYWRMb2NhbEZpbGUpOwotICAgIERv
d25sb2FkRXJyb3JUZXN0OjphZGQoIkRvd25sb2FkcyIsICJsb2NhbC1maWxlLWVycm9yIiwgdGVz
dERvd25sb2FkTG9jYWxGaWxlRXJyb3IpOwotICAgIERvd25sb2FkVGVzdDo6YWRkKCJEb3dubG9h
ZHMiLCAicmVtb3RlLWZpbGUiLCB0ZXN0RG93bmxvYWRSZW1vdGVGaWxlKTsKLSAgICBEb3dubG9h
ZEVycm9yVGVzdDo6YWRkKCJEb3dubG9hZHMiLCAicmVtb3RlLWZpbGUtZXJyb3IiLCB0ZXN0RG93
bmxvYWRSZW1vdGVGaWxlRXJyb3IpOwotICAgIFdlYlZpZXdEb3dubG9hZFRlc3Q6OmFkZCgiV2Vi
S2l0V2ViVmlldyIsICJkb3dubG9hZC11cmkiLCB0ZXN0V2ViVmlld0Rvd25sb2FkVVJJKTsKLSAg
ICBQb2xpY3lSZXNwb25zZURvd25sb2FkVGVzdDo6YWRkKCJEb3dubG9hZHMiLCAicG9saWN5LWRl
Y2lzaW9uLWRvd25sb2FkIiwgdGVzdFBvbGljeVJlc3BvbnNlRG93bmxvYWQpOwotfQotCi12b2lk
IGFmdGVyQWxsKCkKLXsKLSAgICBkZWxldGUga1NlcnZlcjsKLSAgICBnX3JtZGlyKGtUZW1wRGly
ZWN0b3J5KTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL1Rlc3RGcmFtZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9UZXN0RnJhbWUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjNiMDc5
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rl
c3RGcmFtZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2
ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRl
ICJXZWJQcm9jZXNzVGVzdFJ1bm5lci5oIgotI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCi0jaW5j
bHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgotCi1zdGF0aWMg
V2ViUHJvY2Vzc1Rlc3RSdW5uZXIqIHRlc3RSdW5uZXI7Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdEZy
YW1lVGVzdFJ1bihXZWJWaWV3VGVzdCogdGVzdCwgY29uc3QgY2hhciogdGVzdE5hbWUpCi17Ci0g
ICAgc3RhdGljIGNvbnN0IGNoYXIqIHRlc3RIVE1MID0gIjxodG1sPjxib2R5PjwvYm9keT48L2h0
bWw+IjsKLSAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0SFRNTCwgMCk7Ci0gICAgdGVzdC0+d2FpdFVu
dGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBHVmFyaWFudEJ1aWxkZXIgYnVpbGRlcjsKLSAgICBn
X3ZhcmlhbnRfYnVpbGRlcl9pbml0KCZidWlsZGVyLCBHX1ZBUklBTlRfVFlQRV9WQVJESUNUKTsK
LSAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoJmJ1aWxkZXIsICJ7c3Z9IiwgInBhZ2VJRCIsIGdf
dmFyaWFudF9uZXdfdWludDY0KHdlYmtpdF93ZWJfdmlld19nZXRfcGFnZV9pZCh0ZXN0LT5tX3dl
YlZpZXcpKSk7Ci0gICAgZ19hc3NlcnQodGVzdFJ1bm5lci0+cnVuVGVzdCgiV2ViS2l0RnJhbWUi
LCB0ZXN0TmFtZSwgZ192YXJpYW50X2J1aWxkZXJfZW5kKCZidWlsZGVyKSkpOwotfQotCi1zdGF0
aWMgdm9pZCB0ZXN0V2ViS2l0RnJhbWVNYWluRnJhbWUoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25z
dHBvaW50ZXIpCi17Ci0gICAgd2Via2l0RnJhbWVUZXN0UnVuKHRlc3QsICJtYWluLWZyYW1lIik7
Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJLaXRGcmFtZVVSSShXZWJWaWV3VGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKLXsKLSAgICB3ZWJraXRGcmFtZVRlc3RSdW4odGVzdCwgInVyaSIpOwot
fQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViS2l0RnJhbWVKYXZhU2NyaXB0Q29udGV4dChXZWJWaWV3
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB3ZWJraXRGcmFtZVRlc3RSdW4odGVz
dCwgImphdmFzY3JpcHQtY29udGV4dCIpOwotfQotCi12b2lkIGJlZm9yZUFsbCgpCi17Ci0gICAg
dGVzdFJ1bm5lciA9IG5ldyBXZWJQcm9jZXNzVGVzdFJ1bm5lcigpOwotICAgIHdlYmtpdF93ZWJf
Y29udGV4dF9zZXRfd2ViX2V4dGVuc2lvbnNfZGlyZWN0b3J5KHdlYmtpdF93ZWJfY29udGV4dF9n
ZXRfZGVmYXVsdCgpLCBXRUJLSVRfVEVTVF9XRUJfRVhURU5TSU9OU19ESVIpOwotCi0gICAgV2Vi
Vmlld1Rlc3Q6OmFkZCgiV2ViS2l0RnJhbWUiLCAibWFpbi1mcmFtZSIsIHRlc3RXZWJLaXRGcmFt
ZU1haW5GcmFtZSk7Ci0gICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0RnJhbWUiLCAidXJpIiwg
dGVzdFdlYktpdEZyYW1lVVJJKTsKLSAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRGcmFtZSIs
ICJqYXZhc2NyaXB0LWNvbnRleHQiLCB0ZXN0V2ViS2l0RnJhbWVKYXZhU2NyaXB0Q29udGV4dCk7
Ci19Ci0KLXZvaWQgYWZ0ZXJBbGwoKQotewotICAgIGRlbGV0ZSB0ZXN0UnVubmVyOwotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdEluc3Bl
Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0SW5z
cGVjdG9yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWYwNDMwMy4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0SW5zcGVj
dG9yLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM1NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIldl
YlZpZXdUZXN0LmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi9nb2Jq
ZWN0L0dSZWZQdHIuaD4KLQotY2xhc3MgSW5zcGVjdG9yVGVzdDogcHVibGljIFdlYlZpZXdUZXN0
IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKEluc3BlY3RvclRlc3QpOwot
Ci0gICAgZW51bSBJbnNwZWN0b3JFdmVudHMgewotICAgICAgICBPcGVuV2luZG93LAotICAgICAg
ICBCcmluZ1RvRnJvbnQsCi0gICAgICAgIENsb3NlZCwKLSAgICAgICAgQXR0YWNoLAotICAgICAg
ICBEZXRhY2gKLSAgICB9OwotCi0gICAgc3RhdGljIGdib29sZWFuIG9wZW5XaW5kb3dDYWxsYmFj
ayhXZWJLaXRXZWJJbnNwZWN0b3IqLCBJbnNwZWN0b3JUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRlc3QtPm9wZW5XaW5kb3coKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZ2Jvb2xl
YW4gYnJpbmdUb0Zyb250Q2FsbGJhY2soV2ViS2l0V2ViSW5zcGVjdG9yKiwgSW5zcGVjdG9yVGVz
dCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0ZXN0LT5icmluZ1RvRnJvbnQoKTsKLSAg
ICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBjbG9zZWRDYWxsYmFjayhXZWJLaXRXZWJJbnNwZWN0b3Iq
LCBJbnNwZWN0b3JUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRlc3QtPmNsb3Nl
ZCgpOwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiBhdHRhY2hDYWxsYmFjayhXZWJLaXRX
ZWJJbnNwZWN0b3IqLCBJbnNwZWN0b3JUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHRlc3QtPmF0dGFjaCgpOwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiBkZXRhY2hDYWxs
YmFjayhXZWJLaXRXZWJJbnNwZWN0b3IqLCBJbnNwZWN0b3JUZXN0KiB0ZXN0KQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHRlc3QtPmRldGFjaCgpOwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBnTWluaW11bUF0dGFjaGVkSW5zcGVjdG9yV2lkdGggPSA3NTA7Ci0gICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIGdNaW5pbXVtQXR0YWNoZWRJbnNwZWN0b3JIZWlnaHQgPSAyNTA7Ci0K
LSAgICBJbnNwZWN0b3JUZXN0KCkKLSAgICAgICAgOiBXZWJWaWV3VGVzdCgpCi0gICAgICAgICwg
bV9pbnNwZWN0b3Iod2Via2l0X3dlYl92aWV3X2dldF9pbnNwZWN0b3IobV93ZWJWaWV3KSkKLSAg
ICB7Ci0gICAgICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX2RldmVsb3Blcl9leHRyYXMo
d2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyhtX3dlYlZpZXcpLCBUUlVFKTsKLSAgICAgICAg
YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChtX2luc3BlY3Rv
cikpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1faW5zcGVjdG9yLCAib3Blbi13aW5kb3ci
LCBHX0NBTExCQUNLKG9wZW5XaW5kb3dDYWxsYmFjayksIHRoaXMpOwotICAgICAgICBnX3NpZ25h
bF9jb25uZWN0KG1faW5zcGVjdG9yLCAiYnJpbmctdG8tZnJvbnQiLCBHX0NBTExCQUNLKGJyaW5n
VG9Gcm9udENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9pbnNw
ZWN0b3IsICJjbG9zZWQiLCBHX0NBTExCQUNLKGNsb3NlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAg
ICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9pbnNwZWN0b3IsICJhdHRhY2giLCBHX0NBTExCQUNLKGF0
dGFjaENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9pbnNwZWN0
b3IsICJkZXRhY2giLCBHX0NBTExCQUNLKGRldGFjaENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgfQot
Ci0gICAgfkluc3BlY3RvclRlc3QoKQotICAgIHsKLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNf
ZGlzY29ubmVjdF9tYXRjaGVkKG1faW5zcGVjdG9yLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAw
LCAwLCAwLCB0aGlzKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgb3BlbldpbmRvdygpCi0g
ICAgewotICAgICAgICBtX2V2ZW50cy5hcHBlbmQoT3BlbldpbmRvdyk7Ci0gICAgICAgIGdfbWFp
bl9sb29wX3F1aXQobV9tYWluTG9vcCk7Ci0gICAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQot
ICAgIHZpcnR1YWwgYm9vbCBicmluZ1RvRnJvbnQoKQotICAgIHsKLSAgICAgICAgbV9ldmVudHMu
YXBwZW5kKEJyaW5nVG9Gcm9udCk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9v
cCk7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY2xv
c2VkKCkKLSAgICB7Ci0gICAgICAgIG1fZXZlbnRzLmFwcGVuZChDbG9zZWQpOwotICAgIH0KLQot
ICAgIHZpcnR1YWwgYm9vbCBhdHRhY2goKQotICAgIHsKLSAgICAgICAgbV9ldmVudHMuYXBwZW5k
KEF0dGFjaCk7Ci0gICAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQotICAgIHZpcnR1YWwgYm9v
bCBkZXRhY2goKQotICAgIHsKLSAgICAgICAgbV9ldmVudHMuYXBwZW5kKERldGFjaCk7Ci0gICAg
ICAgIHJldHVybiBUUlVFOwotICAgIH0KLQotCi0gICAgc3RhdGljIGdib29sZWFuIHNob3dJZGxl
KEluc3BlY3RvclRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICB3ZWJraXRfd2ViX2luc3BlY3Rv
cl9zaG93KHRlc3QtPm1faW5zcGVjdG9yKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0K
LQotICAgIHZvaWQgc2hvdygpCi0gICAgewotICAgICAgICBnX2lkbGVfYWRkKHJlaW50ZXJwcmV0
X2Nhc3Q8R1NvdXJjZUZ1bmM+KHNob3dJZGxlKSwgdGhpcyk7Ci0gICAgICAgIGdfbWFpbl9sb29w
X3J1bihtX21haW5Mb29wKTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlc2l6ZVZpZXdBbmRBdHRhY2go
KQotICAgIHsKLSAgICAgICAgLy8gUmVzaXplIHRoZSB2aWV3IHRvIG1ha2Ugcm9vbSBmb3IgdGhl
IGluc3BlY3Rvci4KLSAgICAgICAgcmVzaXplVmlldyhnTWluaW11bUF0dGFjaGVkSW5zcGVjdG9y
V2lkdGgsIChnTWluaW11bUF0dGFjaGVkSW5zcGVjdG9ySGVpZ2h0ICsgMSkgKiA0IC8gMyk7Ci0g
ICAgICAgIHdlYmtpdF93ZWJfaW5zcGVjdG9yX2F0dGFjaChtX2luc3BlY3Rvcik7Ci0gICAgfQot
Ci0gICAgc3RhdGljIGdib29sZWFuIGRldGFjaElkbGUoSW5zcGVjdG9yVGVzdCogdGVzdCkKLSAg
ICB7Ci0gICAgICAgIHdlYmtpdF93ZWJfaW5zcGVjdG9yX2RldGFjaCh0ZXN0LT5tX2luc3BlY3Rv
cik7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAgICB2b2lkIGRldGFjaEFuZFdh
aXRVbnRpbFdpbmRvd09wZW5lZCgpCi0gICAgewotICAgICAgICBnX2lkbGVfYWRkKHJlaW50ZXJw
cmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KGRldGFjaElkbGUpLCB0aGlzKTsKLSAgICAgICAgZ19tYWlu
X2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIHZvaWQgY2xvc2UoKQotICAgIHsK
LSAgICAgICAgd2Via2l0X3dlYl9pbnNwZWN0b3JfY2xvc2UobV9pbnNwZWN0b3IpOwotICAgIH0K
LQotICAgIFdlYktpdFdlYkluc3BlY3RvciogbV9pbnNwZWN0b3I7Ci0gICAgVmVjdG9yPEluc3Bl
Y3RvckV2ZW50cz4gbV9ldmVudHM7Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0SW5zcGVjdG9yRGVm
YXVsdChJbnNwZWN0b3JUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPnNo
b3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZChHVEtfV0lORE9XX1RPUExFVkVMKTsKLSAgICB0
ZXN0LT5yZXNpemVWaWV3KDIwMCwgMjAwKTsKLSAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJv
ZHk+PHA+V2ViS2l0R1RLKyBJbnNwZWN0b3IgdGVzdDwvcD48L2JvZHk+PC9odG1sPiIsIDApOwot
ICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgdGVzdC0+c2hvdygpOwot
ICAgIC8vIFdlIGRvbid0IGFkZCB0aGUgdmlldyB0byBhIGNvbnRhaW5lciwgc28gY29uc3VtZSB0
aGUgd2VhayByZWYgd2l0aCBHUmVmUHRyLgotICAgIEdSZWZQdHI8V2ViS2l0V2ViVmlld0Jhc2U+
IGluc3BlY3RvclZpZXcgPSB3ZWJraXRfd2ViX2luc3BlY3Rvcl9nZXRfd2ViX3ZpZXcodGVzdC0+
bV9pbnNwZWN0b3IpOwotICAgIGdfYXNzZXJ0KGluc3BlY3RvclZpZXcuZ2V0KCkpOwotICAgIHRl
c3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QoaW5zcGVj
dG9yVmlldy5nZXQoKSkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX2luc3BlY3Rvcl9pc19h
dHRhY2hlZCh0ZXN0LT5tX2luc3BlY3RvcikpOwotICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0
X3dlYl9pbnNwZWN0b3JfZ2V0X2F0dGFjaGVkX2hlaWdodCh0ZXN0LT5tX2luc3BlY3RvciksID09
LCAwKTsKLSAgICBWZWN0b3I8SW5zcGVjdG9yVGVzdDo6SW5zcGVjdG9yRXZlbnRzPiYgZXZlbnRz
ID0gdGVzdC0+bV9ldmVudHM7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09
LCAxKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgSW5zcGVjdG9yVGVzdDo6
T3BlbldpbmRvdyk7Ci0gICAgdGVzdC0+bV9ldmVudHMuY2xlYXIoKTsKLQotICAgIHRlc3QtPnNo
b3coKTsKLSAgICBldmVudHMgPSB0ZXN0LT5tX2V2ZW50czsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
ZXZlbnRzLnNpemUoKSwgPT0sIDEpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09
LCBJbnNwZWN0b3JUZXN0OjpCcmluZ1RvRnJvbnQpOwotICAgIHRlc3QtPm1fZXZlbnRzLmNsZWFy
KCk7Ci0KLSAgICB0ZXN0LT5yZXNpemVWaWV3QW5kQXR0YWNoKCk7Ci0gICAgZ19hc3NlcnQod2Vi
a2l0X3dlYl9pbnNwZWN0b3JfaXNfYXR0YWNoZWQodGVzdC0+bV9pbnNwZWN0b3IpKTsKLSAgICBn
X2Fzc2VydF9jbXB1aW50KHdlYmtpdF93ZWJfaW5zcGVjdG9yX2dldF9hdHRhY2hlZF9oZWlnaHQo
dGVzdC0+bV9pbnNwZWN0b3IpLCA+PSwgSW5zcGVjdG9yVGVzdDo6Z01pbmltdW1BdHRhY2hlZElu
c3BlY3RvckhlaWdodCk7Ci0gICAgZXZlbnRzID0gdGVzdC0+bV9ldmVudHM7Ci0gICAgZ19hc3Nl
cnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAxKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZl
bnRzWzBdLCA9PSwgSW5zcGVjdG9yVGVzdDo6QXR0YWNoKTsKLSAgICB0ZXN0LT5tX2V2ZW50cy5j
bGVhcigpOwotCi0gICAgdGVzdC0+ZGV0YWNoQW5kV2FpdFVudGlsV2luZG93T3BlbmVkKCk7Ci0g
ICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfaW5zcGVjdG9yX2lzX2F0dGFjaGVkKHRlc3QtPm1faW5z
cGVjdG9yKSk7Ci0gICAgZXZlbnRzID0gdGVzdC0+bV9ldmVudHM7Ci0gICAgZ19hc3NlcnRfY21w
aW50KGV2ZW50cy5zaXplKCksID09LCAyKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBd
LCA9PSwgSW5zcGVjdG9yVGVzdDo6RGV0YWNoKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRz
WzFdLCA9PSwgSW5zcGVjdG9yVGVzdDo6T3BlbldpbmRvdyk7Ci0gICAgdGVzdC0+bV9ldmVudHMu
Y2xlYXIoKTsKLQotICAgIHRlc3QtPmNsb3NlKCk7Ci0gICAgZXZlbnRzID0gdGVzdC0+bV9ldmVu
dHM7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAxKTsKLSAgICBnX2Fz
c2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgSW5zcGVjdG9yVGVzdDo6Q2xvc2VkKTsKLSAgICB0
ZXN0LT5tX2V2ZW50cy5jbGVhcigpOwotfQotCi1jbGFzcyBDdXN0b21JbnNwZWN0b3JUZXN0OiBw
dWJsaWMgSW5zcGVjdG9yVGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVS
RShDdXN0b21JbnNwZWN0b3JUZXN0KTsKLQotICAgIEN1c3RvbUluc3BlY3RvclRlc3QoKQotICAg
ICAgICA6IEluc3BlY3RvclRlc3QoKQotICAgICAgICAsIG1faW5zcGVjdG9yV2luZG93KDApCi0g
ICAgewotICAgIH0KLQotICAgIH5DdXN0b21JbnNwZWN0b3JUZXN0KCkKLSAgICB7Ci0gICAgICAg
IGlmIChtX2luc3BlY3RvcldpbmRvdykKLSAgICAgICAgICAgIGd0a193aWRnZXRfZGVzdHJveSht
X2luc3BlY3RvcldpbmRvdyk7Ci0gICAgfQotCi0gICAgYm9vbCBvcGVuV2luZG93KCkKLSAgICB7
Ci0gICAgICAgIGdfYXNzZXJ0KCFtX2luc3BlY3RvcldpbmRvdyk7Ci0gICAgICAgIG1faW5zcGVj
dG9yV2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7Ci0gICAgICAg
IFdlYktpdFdlYlZpZXdCYXNlKiBpbnNwZWN0b3JWaWV3ID0gd2Via2l0X3dlYl9pbnNwZWN0b3Jf
Z2V0X3dlYl92aWV3KG1faW5zcGVjdG9yKTsKLSAgICAgICAgZ19hc3NlcnQoaW5zcGVjdG9yVmll
dyk7Ci0gICAgICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIobV9pbnNwZWN0b3JX
aW5kb3cpLCBHVEtfV0lER0VUKGluc3BlY3RvclZpZXcpKTsKLSAgICAgICAgZ3RrX3dpZGdldF9z
aG93X2FsbChtX2luc3BlY3RvcldpbmRvdyk7Ci0KLSAgICAgICAgcmV0dXJuIEluc3BlY3RvclRl
c3Q6Om9wZW5XaW5kb3coKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsb3NlZCgpCi0gICAgewotICAg
ICAgICBpZiAobV9pbnNwZWN0b3JXaW5kb3cpIHsKLSAgICAgICAgICAgIGd0a193aWRnZXRfZGVz
dHJveShtX2luc3BlY3RvcldpbmRvdyk7Ci0gICAgICAgICAgICBtX2luc3BlY3RvcldpbmRvdyA9
IDA7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gSW5zcGVjdG9yVGVzdDo6Y2xvc2VkKCk7
Ci0gICAgfQotCi0gICAgYm9vbCBhdHRhY2goKQotICAgIHsKLSAgICAgICAgR1JlZlB0cjxXZWJL
aXRXZWJWaWV3QmFzZT4gaW5zcGVjdG9yVmlldyA9IHdlYmtpdF93ZWJfaW5zcGVjdG9yX2dldF93
ZWJfdmlldyhtX2luc3BlY3Rvcik7Ci0gICAgICAgIGlmIChtX2luc3BlY3RvcldpbmRvdykgewot
ICAgICAgICAgICAgZ3RrX2NvbnRhaW5lcl9yZW1vdmUoR1RLX0NPTlRBSU5FUihtX2luc3BlY3Rv
cldpbmRvdyksIEdUS19XSURHRVQoaW5zcGVjdG9yVmlldy5nZXQoKSkpOwotICAgICAgICAgICAg
Z3RrX3dpZGdldF9kZXN0cm95KG1faW5zcGVjdG9yV2luZG93KTsKLSAgICAgICAgICAgIG1faW5z
cGVjdG9yV2luZG93ID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgIEd0a1dpZGdldCogcGFuZTsK
LSAgICAgICAgaWYgKGd0a19iaW5fZ2V0X2NoaWxkKEdUS19CSU4obV9wYXJlbnRXaW5kb3cpKSA9
PSBHVEtfV0lER0VUKG1fd2ViVmlldykpIHsKLSAgICAgICAgICAgIEdSZWZQdHI8V2ViS2l0V2Vi
Vmlldz4gaW5zcGVjdGVkVmlldyA9IG1fd2ViVmlldzsKLSAgICAgICAgICAgIGd0a19jb250YWlu
ZXJfcmVtb3ZlKEdUS19DT05UQUlORVIobV9wYXJlbnRXaW5kb3cpLCBHVEtfV0lER0VUKG1fd2Vi
VmlldykpOwotICAgICAgICAgICAgcGFuZSA9IGd0a19wYW5lZF9uZXcoR1RLX09SSUVOVEFUSU9O
X1ZFUlRJQ0FMKTsKLSAgICAgICAgICAgIGd0a19wYW5lZF9hZGQxKEdUS19QQU5FRChwYW5lKSwg
R1RLX1dJREdFVChtX3dlYlZpZXcpKTsKLSAgICAgICAgICAgIGd0a19jb250YWluZXJfYWRkKEdU
S19DT05UQUlORVIobV9wYXJlbnRXaW5kb3cpLCBwYW5lKTsKLSAgICAgICAgICAgIGd0a193aWRn
ZXRfc2hvd19hbGwocGFuZSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcGFuZSA9IGd0
a19iaW5fZ2V0X2NoaWxkKEdUS19CSU4obV9wYXJlbnRXaW5kb3cpKTsKLSAgICAgICAgZ3RrX3Bh
bmVkX3NldF9wb3NpdGlvbihHVEtfUEFORUQocGFuZSksIHdlYmtpdF93ZWJfaW5zcGVjdG9yX2dl
dF9hdHRhY2hlZF9oZWlnaHQobV9pbnNwZWN0b3IpKTsKLSAgICAgICAgZ3RrX3BhbmVkX2FkZDIo
R1RLX1BBTkVEKHBhbmUpLCBHVEtfV0lER0VUKGluc3BlY3RvclZpZXcuZ2V0KCkpKTsKLQotICAg
ICAgICByZXR1cm4gSW5zcGVjdG9yVGVzdDo6YXR0YWNoKCk7Ci0gICAgfQotCi0gICAgYm9vbCBk
ZXRhY2goKQotICAgIHsKLSAgICAgICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3QmFzZT4gaW5zcGVj
dG9yVmlldyA9IHdlYmtpdF93ZWJfaW5zcGVjdG9yX2dldF93ZWJfdmlldyhtX2luc3BlY3Rvcik7
Ci0gICAgICAgIEd0a1dpZGdldCogcGFuZSA9IGd0a19iaW5fZ2V0X2NoaWxkKEdUS19CSU4obV9w
YXJlbnRXaW5kb3cpKTsKLSAgICAgICAgZ19hc3NlcnQoR1RLX0lTX1BBTkVEKHBhbmUpKTsKLSAg
ICAgICAgZ3RrX2NvbnRhaW5lcl9yZW1vdmUoR1RLX0NPTlRBSU5FUihwYW5lKSwgR1RLX1dJREdF
VChpbnNwZWN0b3JWaWV3LmdldCgpKSk7Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3JUZXN0Ojpk
ZXRhY2goKTsKLSAgICB9Ci0KLSAgICB2b2lkIGRlc3Ryb3lXaW5kb3coKQotICAgIHsKLSAgICAg
ICAgZ19hc3NlcnQobV9pbnNwZWN0b3JXaW5kb3cpOwotICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ry
b3kobV9pbnNwZWN0b3JXaW5kb3cpOwotICAgICAgICBtX2luc3BlY3RvcldpbmRvdyA9IDA7Ci0g
ICAgfQotCi0gICAgR3RrV2lkZ2V0KiBtX2luc3BlY3RvcldpbmRvdzsKLX07Ci0KLXN0YXRpYyB2
b2lkIHRlc3RJbnNwZWN0b3JNYW51YWxBdHRhY2hEZXRhY2goQ3VzdG9tSW5zcGVjdG9yVGVzdCog
dGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50
aWxNYXBwZWQoR1RLX1dJTkRPV19UT1BMRVZFTCk7Ci0gICAgdGVzdC0+cmVzaXplVmlldygyMDAs
IDIwMCk7Ci0gICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxib2R5PjxwPldlYktpdEdUSysgSW5z
cGVjdG9yIHRlc3Q8L3A+PC9ib2R5PjwvaHRtbD4iLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxM
b2FkRmluaXNoZWQoKTsKLQotICAgIHRlc3QtPnNob3coKTsKLSAgICB0ZXN0LT5hc3NlcnRPYmpl
Y3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHdlYmtpdF93ZWJfaW5zcGVjdG9y
X2dldF93ZWJfdmlldyh0ZXN0LT5tX2luc3BlY3RvcikpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0
X3dlYl9pbnNwZWN0b3JfaXNfYXR0YWNoZWQodGVzdC0+bV9pbnNwZWN0b3IpKTsKLSAgICBWZWN0
b3I8SW5zcGVjdG9yVGVzdDo6SW5zcGVjdG9yRXZlbnRzPiYgZXZlbnRzID0gdGVzdC0+bV9ldmVu
dHM7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAxKTsKLSAgICBnX2Fz
c2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgSW5zcGVjdG9yVGVzdDo6T3BlbldpbmRvdyk7Ci0g
ICAgdGVzdC0+bV9ldmVudHMuY2xlYXIoKTsKLQotICAgIHRlc3QtPnJlc2l6ZVZpZXdBbmRBdHRh
Y2goKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2luc3BlY3Rvcl9pc19hdHRhY2hlZCh0ZXN0
LT5tX2luc3BlY3RvcikpOwotICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X3dlYl9pbnNwZWN0
b3JfZ2V0X2F0dGFjaGVkX2hlaWdodCh0ZXN0LT5tX2luc3BlY3RvciksID49LCBJbnNwZWN0b3JU
ZXN0OjpnTWluaW11bUF0dGFjaGVkSW5zcGVjdG9ySGVpZ2h0KTsKLSAgICBldmVudHMgPSB0ZXN0
LT5tX2V2ZW50czsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDEpOwot
ICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBJbnNwZWN0b3JUZXN0OjpBdHRhY2gp
OwotICAgIHRlc3QtPm1fZXZlbnRzLmNsZWFyKCk7Ci0KLSAgICB0ZXN0LT5kZXRhY2hBbmRXYWl0
VW50aWxXaW5kb3dPcGVuZWQoKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl9pbnNwZWN0b3Jf
aXNfYXR0YWNoZWQodGVzdC0+bV9pbnNwZWN0b3IpKTsKLSAgICBldmVudHMgPSB0ZXN0LT5tX2V2
ZW50czsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDIpOwotICAgIGdf
YXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBJbnNwZWN0b3JUZXN0OjpEZXRhY2gpOwotICAg
IGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBJbnNwZWN0b3JUZXN0OjpPcGVuV2luZG93
KTsKLSAgICB0ZXN0LT5tX2V2ZW50cy5jbGVhcigpOwotCi0gICAgdGVzdC0+cmVzaXplVmlld0Fu
ZEF0dGFjaCgpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfaW5zcGVjdG9yX2lzX2F0dGFjaGVk
KHRlc3QtPm1faW5zcGVjdG9yKSk7Ci0gICAgdGVzdC0+bV9ldmVudHMuY2xlYXIoKTsKLSAgICB0
ZXN0LT5jbG9zZSgpOwotICAgIGV2ZW50cyA9IHRlc3QtPm1fZXZlbnRzOwotICAgIGdfYXNzZXJ0
X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgMik7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50
c1swXSwgPT0sIEluc3BlY3RvclRlc3Q6OkRldGFjaCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2
ZW50c1sxXSwgPT0sIEluc3BlY3RvclRlc3Q6OkNsb3NlZCk7Ci0gICAgdGVzdC0+bV9ldmVudHMu
Y2xlYXIoKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdEluc3BlY3RvckN1c3RvbUNvbnRhaW5lckRl
c3Ryb3llZChDdXN0b21JbnNwZWN0b3JUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAg
IHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZChHVEtfV0lORE9XX1RPUExFVkVM
KTsKLSAgICB0ZXN0LT5yZXNpemVWaWV3KDIwMCwgMjAwKTsKLSAgICB0ZXN0LT5sb2FkSHRtbCgi
PGh0bWw+PGJvZHk+PHA+V2ViS2l0R1RLKyBJbnNwZWN0b3IgdGVzdDwvcD48L2JvZHk+PC9odG1s
PiIsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgdGVzdC0+
c2hvdygpOwotICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMo
R19PQkpFQ1Qod2Via2l0X3dlYl9pbnNwZWN0b3JfZ2V0X3dlYl92aWV3KHRlc3QtPm1faW5zcGVj
dG9yKSkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX2luc3BlY3Rvcl9pc19hdHRhY2hlZCh0
ZXN0LT5tX2luc3BlY3RvcikpOwotCi0gICAgdGVzdC0+bV9ldmVudHMuY2xlYXIoKTsKLSAgICB0
ZXN0LT5kZXN0cm95V2luZG93KCk7Ci0gICAgVmVjdG9yPEluc3BlY3RvclRlc3Q6Okluc3BlY3Rv
ckV2ZW50cz4mIGV2ZW50cyA9IHRlc3QtPm1fZXZlbnRzOwotICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHMuc2l6ZSgpLCA9PSwgMSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0s
IEluc3BlY3RvclRlc3Q6OkNsb3NlZCk7Ci0gICAgdGVzdC0+bV9ldmVudHMuY2xlYXIoKTsKLX0K
LQotdm9pZCBiZWZvcmVBbGwoKQotewotICAgIEluc3BlY3RvclRlc3Q6OmFkZCgiV2ViS2l0V2Vi
SW5zcGVjdG9yIiwgImRlZmF1bHQiLCB0ZXN0SW5zcGVjdG9yRGVmYXVsdCk7Ci0gICAgQ3VzdG9t
SW5zcGVjdG9yVGVzdDo6YWRkKCJXZWJLaXRXZWJJbnNwZWN0b3IiLCAibWFudWFsLWF0dGFjaC1k
ZXRhY2giLCB0ZXN0SW5zcGVjdG9yTWFudWFsQXR0YWNoRGV0YWNoKTsKLSAgICBDdXN0b21JbnNw
ZWN0b3JUZXN0OjphZGQoIldlYktpdFdlYkluc3BlY3RvciIsICJjdXN0b20tY29udGFpbmVyLWRl
c3Ryb3llZCIsIHRlc3RJbnNwZWN0b3JDdXN0b21Db250YWluZXJEZXN0cm95ZWQpOwotfQotCi12
b2lkIGFmdGVyQWxsKCkKLXsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL1Rlc3RJbnNwZWN0b3JTZXJ2ZXIuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdEluc3BlY3RvclNlcnZlci5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmNGJmNTQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdEluc3BlY3RvclNlcnZlci5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwyOTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1z
dW5nIEVsZWN0cm9uaWNzIEx0ZC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotICogQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKLSNpbmNs
dWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+Ci0KLS8vIE5hbWUgb2YgdGhlIHRlc3Qgc2VydmVyIGFwcGxpY2F0aW9uIGNyZWF0aW5nIHRo
ZSB3ZWJWaWV3IG9iamVjdC4KLXN0YXRpYyBjb25zdCBjaGFyKiBnVGVzdFNlcnZlckFwcE5hbWUg
PSAiSW5zcGVjdG9yVGVzdFNlcnZlciI7Ci0KLS8vIE1heCBzZWNvbmRzIHRvIHdhaXQgZm9yIHRo
ZSB0ZXN0IHNlcnZlciBiZWZvcmUgaW5zcGVjdGluZyBpdC4KLXN0YXRpYyBjb25zdCBpbnQgZ01h
eFdhaXRGb3JDaGlsZCA9IDU7Ci0KLS8vIFRoZSBQSUQgZm9yIHRoZSB0ZXN0IHNlcnZlciBydW5u
aW5nLCBzbyB3ZSBjYW4ga2lsbCBpdCBpZiBuZWVkZWQuCi1zdGF0aWMgR1BpZCBnQ2hpbGRQcm9j
ZXNzUGlkID0gMDsKLQotLy8gV2hldGhlciB0aGUgY2hpbGQgaGFzIHJlcGxpZWQgYW5kIGl0J3Mg
cmVhZHkuCi1zdGF0aWMgYm9vbCBnQ2hpbGRJc1JlYWR5ID0gZmFsc2U7Ci0KLXN0YXRpYyB2b2lk
IHN0b3BUZXN0U2VydmVyKCkKLXsKLSAgICAvLyBEbyBub3RoaW5nIGlmIHRoZXJlJ3Mgbm8gc2Vy
dmVyIHJ1bm5pbmcuCi0gICAgaWYgKCFnQ2hpbGRQcm9jZXNzUGlkKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBnX3NwYXduX2Nsb3NlX3BpZChnQ2hpbGRQcm9jZXNzUGlkKTsKLSAgICBraWxsKGdD
aGlsZFByb2Nlc3NQaWQsIFNJR1RFUk0pOwotICAgIGdDaGlsZFByb2Nlc3NQaWQgPSAwOwotfQot
Ci1zdGF0aWMgdm9pZCBzaWdBYm9ydEhhbmRsZXIoaW50IHNpZ051bSkKLXsKLSAgICAvLyBKdXN0
IHN0b3AgdGhlIHRlc3Qgc2VydmVyIGlmIFNJR0FCUlQgd2FzIHJlY2VpdmVkLgotICAgIHN0b3BU
ZXN0U2VydmVyKCk7Ci19Ci0KLXN0YXRpYyBncG9pbnRlciB0ZXN0U2VydmVyTW9uaXRvclRocmVh
ZEZ1bmMoZ3BvaW50ZXIpCi17Ci0gICAgLy8gV2FpdCBmb3IgdGhlIHNwZWNpZmllZCB0aW1lb3V0
IHRvIGhhcHBlbi4KLSAgICBnX3VzbGVlcChnTWF4V2FpdEZvckNoaWxkICogR19VU0VDX1BFUl9T
RUMpOwotCi0gICAgLy8gS2lsbCB0aGUgY2hpbGQgcHJvY2VzcyBpZiBub3QgcmVhZHkgeWV0Lgot
ICAgIGlmICghZ0NoaWxkSXNSZWFkeSkKLSAgICAgICAgc3RvcFRlc3RTZXJ2ZXIoKTsKLQotICAg
IGdfdGhyZWFkX2V4aXQoMCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0YXJ0
VGVzdFNlcnZlck1vbml0b3IoKQotewotICAgIGdDaGlsZElzUmVhZHkgPSBmYWxzZTsKLSAgICBn
X3RocmVhZF9uZXcoIlRlc3RTZXJ2ZXJNb25pdG9yIiwgdGVzdFNlcnZlck1vbml0b3JUaHJlYWRG
dW5jLCAwKTsKLX0KLQotc3RhdGljIHZvaWQgc3RhcnRUZXN0U2VydmVyKCkKLXsKLSAgICAvLyBQ
cmVwYXJlIGFyZ3ZbXSBmb3Igc3Bhd25pbmcgdGhlIHNlcnZlciBwcm9jZXNzLgotICAgIEdPd25Q
dHI8Y2hhcj4gdGVzdFNlcnZlclBhdGgoZ19idWlsZF9maWxlbmFtZShXRUJLSVRfRVhFQ19QQVRI
LCAiV2ViS2l0MkdPYmplY3RBUElUZXN0cyIsIGdUZXN0U2VydmVyQXBwTmFtZSwgTlVMTCkpOwot
Ci0gICAgLy8gV2UgaW5zdGFsbCBhIGhhbmRsZXIgdG8gZW5zdXJlIHRoYXQgd2Uga2lsbCB0aGUg
Y2hpbGQgcHJvY2VzcwotICAgIC8vIGlmIHRoZSBwYXJlbnQgZGllcyBiZWNhdXNlIG9mIHdoYXRl
dmVyIHRoZSByZWFzb24gaXMuCi0gICAgc2lnbmFsKFNJR0FCUlQsIHNpZ0Fib3J0SGFuZGxlcik7
Ci0KLSAgICBjaGFyKiB0ZXN0U2VydmVyQXJndlsyXTsKLSAgICB0ZXN0U2VydmVyQXJndlswXSA9
IHRlc3RTZXJ2ZXJQYXRoLmdldCgpOwotICAgIHRlc3RTZXJ2ZXJBcmd2WzFdID0gMDsKLQotICAg
IC8vIFNwYXduIHRoZSBzZXJ2ZXIsIGdldHRpbmcgaXRzIHN0ZG91dCBmaWxlIGRlc2NyaXB0b3Ig
dG8gc2V0IGEKLSAgICAvLyBjb21tdW5pY2F0aW9uIGNoYW5uZWwsIHNvIHdlIGtub3cgd2hlbiBp
dCdzIHJlYWR5LgotICAgIGludCBjaGlsZFN0ZG91dCA9IDA7Ci0gICAgZ19hc3NlcnQoZ19zcGF3
bl9hc3luY193aXRoX3BpcGVzKDAsIHRlc3RTZXJ2ZXJBcmd2LCAwLCBzdGF0aWNfY2FzdDxHU3Bh
d25GbGFncz4oMCksIDAsIDAsCi0gICAgICAgICZnQ2hpbGRQcm9jZXNzUGlkLCAwLCAmY2hpbGRT
dGRvdXQsIDAsIDApKTsKLQotICAgIC8vIFN0YXJ0IG1vbml0b3JpbmcgdGhlIHRlc3Qgc2VydmVy
IChpbiBhIHNlcGFyYXRlIHRocmVhZCkgdG8KLSAgICAvLyBlbnN1cmUgd2UgZG9uJ3QgYmxvY2sg
b24gdGhlIGNoaWxkIHByb2Nlc3MgbW9yZSB0aGFuIGEgdGltZW91dC4KLSAgICBzdGFydFRlc3RT
ZXJ2ZXJNb25pdG9yKCk7Ci0KLSAgICBjaGFyIG1zZ1syXTsKLSAgICBHSU9DaGFubmVsKiBpb0No
YW5uZWwgPSBnX2lvX2NoYW5uZWxfdW5peF9uZXcoY2hpbGRTdGRvdXQpOwotICAgIGlmIChnX2lv
X2NoYW5uZWxfcmVhZF9jaGFycyhpb0NoYW5uZWwsIG1zZywgMiwgMCwgMCkgPT0gR19JT19TVEFU
VVNfTk9STUFMKSB7Ci0gICAgICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlIHNlcnZlciBzZW50IGEg
bWVzc2FnZSBzYXlpbmcgaXQncyByZWFkeQotICAgICAgICAvLyBhbmQgc3RvcmUgdGhlIHJlc3Vs
dCBnbG9iYWxseSwgc28gdGhlIG1vbml0b3IgY2FuIHNlZSBpdC4KLSAgICAgICAgZ0NoaWxkSXNS
ZWFkeSA9IG1zZ1swXSA9PSAnTycgJiYgbXNnWzFdID09ICdLJzsKLSAgICB9Ci0gICAgZ19pb19j
aGFubmVsX3VucmVmKGlvQ2hhbm5lbCk7Ci0gICAgY2xvc2UoY2hpbGRTdGRvdXQpOwotCi0gICAg
Ly8gVGhlIHRpbWVvdXQgd2FzIHJlYWNoZWQgYW5kIHRoZSBzZXJ2ZXIgaXMgbm90IHJlYWR5IHll
dCwgc28KLSAgICAvLyBzdG9wIGl0IGlubWVkaWF0ZWx5LCBhbmQgbGV0IHRoZSB1bml0IHRlc3Rz
IGZhaWwuCi0gICAgaWYgKCFnQ2hpbGRJc1JlYWR5KQotICAgICAgICBzdG9wVGVzdFNlcnZlcigp
OwotfQotCi1jbGFzcyBJbnNwZWN0b3JTZXJ2ZXJUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3Qgewot
cHVibGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoSW5zcGVjdG9yU2VydmVyVGVzdCk7
Ci0KLSAgICBJbnNwZWN0b3JTZXJ2ZXJUZXN0KCkKLSAgICAgICAgOiBXZWJWaWV3VGVzdCgpCi0g
ICAgewotICAgIH0KLQotICAgIGJvb2wgZ2V0UGFnZUxpc3QoKQotICAgIHsKLSAgICAgICAgbG9h
ZEh0bWwoIjxzY3JpcHQgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiPlxuIgotICAgICAgICAgICAg
InZhciBwYWdlcztcbiIKLSAgICAgICAgICAgICJ2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0
O1xuIgotICAgICAgICAgICAgInhoci5vcGVuKFwiR0VUXCIsIFwiL3BhZ2VsaXN0Lmpzb25cIik7
XG4iCi0gICAgICAgICAgICAieGhyLm9ubG9hZCA9IGZ1bmN0aW9uKGUpIHtcbiIKLSAgICAgICAg
ICAgICAgICAiaWYgKHhoci5zdGF0dXMgPT0gMjAwKSB7XG4iCi0gICAgICAgICAgICAgICAgICAg
ICJwYWdlcyA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4iCi0gICAgICAgICAgICAg
ICAgICAgICJkb2N1bWVudC50aXRsZSA9IFwiT0tcIjtcbiIKLSAgICAgICAgICAgICAgICAifSBl
bHNlIFxuIgotICAgICAgICAgICAgICAgICAgICAiZG9jdW1lbnQudGl0bGUgPSBcIkZBSUxcIjtc
biIKLSAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgInhoci5zZW5kKCk7XG4iCi0g
ICAgICAgICAgICAiPC9zY3JpcHQ+XG4iLAotICAgICAgICAgICAgImh0dHA6Ly8xMjcuMC4wLjE6
Mjk5OS8iKTsKLQotICAgICAgICB3YWl0VW50aWxUaXRsZUNoYW5nZWQoKTsKLQotICAgICAgICBp
ZiAoIXN0cmNtcCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3RpdGxlKG1fd2ViVmlldyksICJPSyIpKQot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIH5JbnNwZWN0b3JTZXJ2ZXJUZXN0KCkKLSAgICB7Ci0gICAgfQotfTsKLQotLy8gVGVz
dCB0byBnZXQgaW5zcGVjdG9yIHNlcnZlciBwYWdlIGxpc3QgZnJvbSB0aGUgdGVzdCBzZXJ2ZXIu
Ci0vLyBTaG91bGQgY29udGFpbiBvbmx5IG9uZSBlbnRyeSBwb2ludGluZyB0byBodHRwOi8vMTI3
LjAuMC4xOjI5OTkvd2ViaW5zcGVjdG9yL01haW4uaHRtbD9wYWdlPTEKLXN0YXRpYyB2b2lkIHRl
c3RJbnNwZWN0b3JTZXJ2ZXJQYWdlTGlzdChJbnNwZWN0b3JTZXJ2ZXJUZXN0KiB0ZXN0LCBnY29u
c3Rwb2ludGVyKQotewotICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKLQotICAgIHRlc3QtPnNo
b3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZChHVEtfV0lORE9XX1RPUExFVkVMKTsKLSAgICBn
X2Fzc2VydCh0ZXN0LT5nZXRQYWdlTGlzdCgpKTsKLQotICAgIFdlYktpdEphdmFzY3JpcHRSZXN1
bHQqIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmlu
aXNoZWQoInBhZ2VzLmxlbmd0aDsiLCAmZXJyb3Iub3V0UHRyKCkpOwotICAgIGdfYXNzZXJ0KGph
dmFzY3JpcHRSZXN1bHQpOwotICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7Ci0gICAgZ19hc3Nl
cnRfY21waW50KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9OdW1iZXIoamF2YXNjcmlw
dFJlc3VsdCksID09LCAxKTsKLQotICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZh
U2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoInBhZ2VzWzBdLmlkOyIsICZlcnJvci5vdXRQdHIo
KSk7Ci0gICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAgZ19hc3NlcnQoIWVycm9y
LmdldCgpKTsKLSAgICBpbnQgcGFnZUlkID0gV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRU
b051bWJlcihqYXZhc2NyaXB0UmVzdWx0KTsKLQotICAgIEdPd25QdHI8Y2hhcj4gdmFsdWVTdHJp
bmc7Ci0gICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50
aWxGaW5pc2hlZCgicGFnZXNbMF0udXJsOyIsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgZ19hc3Nl
cnQoamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKLSAgICB2
YWx1ZVN0cmluZy5zZXQoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0NTdHJpbmcoamF2
YXNjcmlwdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih2YWx1ZVN0cmluZy5nZXQoKSwg
PT0sICJodHRwOi8vMTI3LjAuMC4xOjI5OTkvIik7Ci0KLSAgICBqYXZhc2NyaXB0UmVzdWx0ID0g
dGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJwYWdlc1swXS5pbnNwZWN0
b3JVcmw7IiwgJmVycm9yLm91dFB0cigpKTsKLSAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0
KTsKLSAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOwotICAgIHZhbHVlU3RyaW5nLnNldChXZWJW
aWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7Ci0g
ICAgU3RyaW5nIHZhbGlkSW5zcGVjdG9yVVJMID0gU3RyaW5nKCIvTWFpbi5odG1sP3BhZ2U9Iikg
KyBTdHJpbmc6Om51bWJlcihwYWdlSWQpOwotICAgIEFTU0VSVF9DTVBfQ1NUUklORyh2YWx1ZVN0
cmluZy5nZXQoKSwgPT0sIHZhbGlkSW5zcGVjdG9yVVJMLnV0ZjgoKSk7Ci19Ci0KLS8vIFRlc3Qg
c2VuZGluZyBhIHJhdyByZW1vdGUgZGVidWdnaW5nIG1lc3NhZ2UgdGhyb3VnaCBvdXIgd2ViIHNv
Y2tldCBzZXJ2ZXIuCi0vLyBGb3IgdGhpcyBzcGVjaWZpYyBtZXNzYWdlIHNlZTogaHR0cDovL2Nv
ZGUuZ29vZ2xlLmNvbS9jaHJvbWUvZGV2dG9vbHMvZG9jcy9wcm90b2NvbC90b3QvcnVudGltZS5o
dG1sI2NvbW1hbmQtZXZhbHVhdGUKLXN0YXRpYyB2b2lkIHRlc3RSZW1vdGVEZWJ1Z2dpbmdNZXNz
YWdlKEluc3BlY3RvclNlcnZlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVz
dC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKEdUS19XSU5ET1dfVE9QTEVWRUwpOwot
Ci0gICAgdGVzdC0+bG9hZEh0bWwoIjxzY3JpcHQgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiPlxu
IgotICAgICAgICAidmFyIHNvY2tldCA9IG5ldyBXZWJTb2NrZXQoJ3dzOi8vMTI3LjAuMC4xOjI5
OTkvZGV2dG9vbHMvcGFnZS8xJyk7XG4iCi0gICAgICAgICJzb2NrZXQub25tZXNzYWdlID0gZnVu
Y3Rpb24obWVzc2FnZSkge1xuIgotICAgICAgICAgICAgInZhciByZXNwb25zZSA9IEpTT04ucGFy
c2UobWVzc2FnZS5kYXRhKTtcbiIKLSAgICAgICAgICAgICJpZiAocmVzcG9uc2UuaWQgPT09IDEp
XG4iCi0gICAgICAgICAgICAgICAgImRvY3VtZW50LnRpdGxlID0gcmVzcG9uc2UucmVzdWx0LnJl
c3VsdC52YWx1ZTtcbiIKLSAgICAgICAgICAgICJlbHNlXG4iCi0gICAgICAgICAgICAgICAgImRv
Y3VtZW50LnRpdGxlID0gXCJGQUlMXCI7XG4iCi0gICAgICAgICAgICAifVxuIgotICAgICAgICAg
ICAgInNvY2tldC5vbm9wZW4gPSBmdW5jdGlvbigpIHtcbiIKLSAgICAgICAgICAgICJzb2NrZXQu
c2VuZCgne1wiaWRcIjogMSwgXCJtZXRob2RcIjogXCJSdW50aW1lLmV2YWx1YXRlXCIsIFwicGFy
YW1zXCI6IHtcImV4cHJlc3Npb25cIjogXCIyICsgMlwiIH0gfScpO1xuIgotICAgICAgICAifVxu
IgotICAgICAgICAiPC9zY3JpcHQ+IiwKLSAgICAgICAgImh0dHA6Ly8xMjcuMC4wLjE6Mjk5OS8i
KTsKLSAgICB0ZXN0LT53YWl0VW50aWxUaXRsZUNoYW5nZWQoKTsKLQotICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3RpdGxlKHRlc3QtPm1fd2ViVmlldyksID09LCAiNCIp
OwotfQotCi1zdGF0aWMgdm9pZCBvcGVuUmVtb3RlRGVidWdnaW5nU2Vzc2lvbihJbnNwZWN0b3JT
ZXJ2ZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIC8vIFRvIHRlc3QgdGhlIHdo
b2xlIHBpcGVsaW5lIHRoaXMgZXhwbG9pdHMgYSBiZWhhdmlvciBvZiB0aGUgaW5zcGVjdG9yIGZy
b250LWVuZCB3aGljaCB3b24ndCBwcm92aWRlIHRoZSBwYWdlIGFkZHJlc3MgYXMgdGl0bGUgdW5s
ZXNzIHRoZQotICAgIC8vIGRlYnVnZ2luZyBzZXNzaW9uIHdhcyBlc3RhYmxpc2hlZCBjb3JyZWN0
bHkgdGhyb3VnaCB3ZWIgc29ja2V0LgotICAgIC8vIEluIG91ciBjYXNlIHBhZ2UgVVJMIHNob3Vs
ZCBiZSBodHRwOi8vMTI3LjAuMC4xOjI5OTkvCi0gICAgLy8gU28gdGhpcyB0ZXN0IGNhc2Ugd2ls
bCBmYWlsIGlmOgotICAgIC8vIC0gVGhlIHBhZ2UgbGlzdCBkaWRuJ3QgcmV0dXJuIGEgdmFsaWQg
aW5zcGVjdG9yIFVSTAotICAgIC8vIC0gT3IgdGhlIGZyb250LWVuZCBjb3VsZG4ndCBiZSBsb2Fk
ZWQgdGhyb3VnaCB0aGUgaW5zcGVjdG9yIEhUVFAgc2VydmVyCi0gICAgLy8gLSBPciB0aGUgd2Vi
IHNvY2tldCBjb25uZWN0aW9uIGNvdWxkbid0IGJlIGVzdGFibGlzaGVkIGJldHdlZW4gdGhlIGZy
b250LWVuZCBhbmQgdGhlIHBhZ2UgdGhyb3VnaCB0aGUgaW5zcGVjdG9yIHNlcnZlcgotICAgIC8v
IExldCdzIHNlZSBpZiB0aGlzIHRlc3QgaXNuJ3QgcmFpc2luZyB0b28gbWFueSBmYWxzZSBwb3Np
dGl2ZXMsIGluIHdoaWNoIGNhc2Ugd2Ugc2hvdWxkIHVzZSBhIGJldHRlciBwcmVkaWNhdGUgaWYg
YXZhaWxhYmxlLgotCi0gICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKEdU
S19XSU5ET1dfVE9QTEVWRUwpOwotCi0gICAgZ19hc3NlcnQodGVzdC0+Z2V0UGFnZUxpc3QoKSk7
Ci0KLSAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgV2ViS2l0SmF2YXNjcmlwdFJlc3Vs
dCogamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5p
c2hlZCgicGFnZXNbMF0uaW5zcGVjdG9yVXJsOyIsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgZ19h
c3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKLQot
ICAgIFN0cmluZyByZXNvbHZlZFVSTCA9IFN0cmluZygiaHR0cDovLzEyNy4wLjAuMToyOTk5LyIp
ICsgU3RyaW5nOjpmcm9tVVRGOChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmlu
ZyhqYXZhc2NyaXB0UmVzdWx0KSk7Ci0gICAgdGVzdC0+bG9hZFVSSShyZXNvbHZlZFVSTC51dGY4
KCkuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIGph
dmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQo
IndpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnbGknKVswXS50aXRsZSIsICZl
cnJvci5vdXRQdHIoKSk7Ci0gICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAgZ19h
c3NlcnQoIWVycm9yLmdldCgpKTsKLQotICAgIEdPd25QdHI8Y2hhcj4gdGl0bGUoV2ViVmlld1Rl
c3Q6OmphdmFzY3JpcHRSZXN1bHRUb0NTdHJpbmcoamF2YXNjcmlwdFJlc3VsdCkpOwotICAgIGdf
YXNzZXJ0X2NtcHN0cih0aXRsZS5nZXQoKSwgPT0sICJodHRwOi8vMTI3LjAuMC4xOjI5OTkvIik7
Ci19Ci0KLXN0YXRpYyB2b2lkIHNlbmRJbmNvbXBsZXRlUmVxdWVzdChJbnNwZWN0b3JTZXJ2ZXJU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsK
LQotICAgIC8vIENvbm5lY3QgdG8gdGhlIGluc3BlY3RvciBzZXJ2ZXIuCi0gICAgR1JlZlB0cjxH
U29ja2V0Q2xpZW50PiBjbGllbnQgPSBhZG9wdEdSZWYoZ19zb2NrZXRfY2xpZW50X25ldygpKTsK
LSAgICBHUmVmUHRyPEdTb2NrZXRDb25uZWN0aW9uPiBjb25uZWN0aW9uID0gYWRvcHRHUmVmKGdf
c29ja2V0X2NsaWVudF9jb25uZWN0X3RvX2hvc3QoY2xpZW50LmdldCgpLCAiMTI3LjAuMC4xIiwg
Mjk5OSwgMCwgJmVycm9yLm91dFB0cigpKSk7Ci0gICAgZ19hc3NlcnRfbm9fZXJyb3IoZXJyb3Iu
Z2V0KCkpOwotCi0gICAgLy8gU2VuZCBpbmNvbXBsZXRlIHJlcXVlc3QgKG1pc3NpbmcgYmxhbmsg
bGluZSBhZnRlciBoZWFkZXJzKSBhbmQgY2hlY2sgaWYgaW5zcGVjdG9yIHNlcnZlcgotICAgIC8v
IHJlcGxpZXMuIFRoZSBzZXJ2ZXIgc2hvdWxkIG5vdCByZXBseSB0byBhbiBpbmNvbXBsZXRlIHJl
cXVlc3QgYW5kIHRoZSB0ZXN0IHNob3VsZCB0aW1lb3V0Ci0gICAgLy8gb24gcmVhZC4KLSAgICBH
T3V0cHV0U3RyZWFtKiBvc3RyZWFtID0gZ19pb19zdHJlYW1fZ2V0X291dHB1dF9zdHJlYW0oR19J
T19TVFJFQU0oY29ubmVjdGlvbi5nZXQoKSkpOwotICAgIC8vIFJlcXVlc3QgbWlzc2luZyBibGFu
ayBsaW5lIGFmdGVyIGhlYWRlcnMuCi0gICAgY29uc3QgZ2NoYXIqIGluY29tcGxldGVSZXF1ZXN0
ID0gIkdFVCAvZGV2dG9vbHMvcGFnZS8xIEhUVFAvMS4xXHJcbkhvc3Q6IExvY2FsaG9zdFxyXG4i
OwotICAgIGdfb3V0cHV0X3N0cmVhbV93cml0ZShvc3RyZWFtLCBpbmNvbXBsZXRlUmVxdWVzdCwg
c3RybGVuKGluY29tcGxldGVSZXF1ZXN0KSwgMCwgJmVycm9yLm91dFB0cigpKTsKLSAgICBnX2Fz
c2VydF9ub19lcnJvcihlcnJvci5nZXQoKSk7Ci0KLSAgICBHSW5wdXRTdHJlYW0qIGlzdHJlYW0g
PSBnX2lvX3N0cmVhbV9nZXRfaW5wdXRfc3RyZWFtKEdfSU9fU1RSRUFNKGNvbm5lY3Rpb24uZ2V0
KCkpKTsKLSAgICBjaGFyIHJlc3BvbnNlWzE2XTsKLSAgICBtZW1zZXQocmVzcG9uc2UsIDAsIHNp
emVvZihyZXNwb25zZSkpOwotICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBjYW5jZWwgPSBhZG9w
dEdSZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSk7Ci0gICAgZ19pbnB1dF9zdHJlYW1fcmVhZF9hc3lu
Yyhpc3RyZWFtLCByZXNwb25zZSwgc2l6ZW9mKHJlc3BvbnNlKSAtIDEsIEdfUFJJT1JJVFlfREVG
QVVMVCwgY2FuY2VsLmdldCgpLCAwLCAwKTsKLSAgICAvLyBHaXZlIGEgY2hhbmNlIGZvciB0aGUg
c2VydmVyIHRvIHJlcGx5LgotICAgIHRlc3QtPndhaXQoMSk7Ci0gICAgZ19jYW5jZWxsYWJsZV9j
YW5jZWwoY2FuY2VsLmdldCgpKTsKLSAgICAvLyBJZiB3ZSBnb3QgYW55IGFuc3dlciBpdCBtZWFu
cyB0aGUgc2VydmVyIHJlcGxpZWQgdG8gYW4gaW5jb21wbGV0ZSByZXF1ZXN0LCBsZXRzIGZhaWwu
Ci0gICAgZ19hc3NlcnQocmVzcG9uc2VbMF0gPT0gJ1wwJyk7Ci19Ci0KLXZvaWQgYmVmb3JlQWxs
KCkKLXsKLSAgICAvLyBPdmVyd3JpdGUgV0VCS0lUX0lOU1BFQ1RPUl9TRVJWRVIgdmFyaWFibGUg
d2l0aCBkZWZhdWx0IElQIGFkZHJlc3MgYnV0IGRpZmZlcmVudCBwb3J0IHRvIGF2b2lkIGNvbmZs
aWN0IHdpdGggdGhlIHRlc3QgaW5zcGVjdG9yIHNlcnZlciBwYWdlLgotICAgIGdfc2V0ZW52KCJX
RUJLSVRfSU5TUEVDVE9SX1NFUlZFUiIsICIxMjcuMC4wLjE6Mjk5OCIsIFRSVUUpOwotCi0gICAg
c3RhcnRUZXN0U2VydmVyKCk7Ci0gICAgSW5zcGVjdG9yU2VydmVyVGVzdDo6YWRkKCJXZWJLaXRX
ZWJJbnNwZWN0b3JTZXJ2ZXIiLCAidGVzdC1wYWdlLWxpc3QiLCB0ZXN0SW5zcGVjdG9yU2VydmVy
UGFnZUxpc3QpOwotICAgIEluc3BlY3RvclNlcnZlclRlc3Q6OmFkZCgiV2ViS2l0V2ViSW5zcGVj
dG9yU2VydmVyIiwgInRlc3QtcmVtb3RlLWRlYnVnZ2luZy1tZXNzYWdlIiwgdGVzdFJlbW90ZURl
YnVnZ2luZ01lc3NhZ2UpOwotICAgIEluc3BlY3RvclNlcnZlclRlc3Q6OmFkZCgiV2ViS2l0V2Vi
SW5zcGVjdG9yU2VydmVyIiwgInRlc3Qtb3Blbi1kZWJ1Z2dpbmctc2Vzc2lvbiIsIG9wZW5SZW1v
dGVEZWJ1Z2dpbmdTZXNzaW9uKTsKLSAgICBJbnNwZWN0b3JTZXJ2ZXJUZXN0OjphZGQoIldlYktp
dFdlYkluc3BlY3RvclNlcnZlciIsICJ0ZXN0LWluY29tcGxldGUtcmVxdWVzdCIsIHNlbmRJbmNv
bXBsZXRlUmVxdWVzdCk7Ci0KLX0KLQotdm9pZCBhZnRlckFsbCgpCi17Ci0gICAgc3RvcFRlc3RT
ZXJ2ZXIoKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL1Rlc3RMb2FkZXJDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvVGVzdExvYWRlckNsaWVudC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDMzMTkxNWUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvVGVzdExvYWRlckNsaWVudC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NjUg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBHdXN0YXZvIE5vcm9uaGEg
U2lsdmEKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBJZ2FsaWEgUy5MLgotICogUG9ydGlv
bnMgQ29weXJpZ2h0IChjKSAyMDExIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJMb2FkVHJhY2tpbmdU
ZXN0LmgiCi0jaW5jbHVkZSAiV2ViS2l0VGVzdEJ1cy5oIgotI2luY2x1ZGUgIldlYktpdFRlc3RT
ZXJ2ZXIuaCIKLSNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgotI2luY2x1ZGUgPGd0ay9ndGsuaD4K
LSNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
Ci0KLXN0YXRpYyBXZWJLaXRUZXN0QnVzKiBidXM7Ci1zdGF0aWMgV2ViS2l0VGVzdFNlcnZlciog
a1NlcnZlcjsKLQotY29uc3QgY2hhcioga0ROVEhlYWRlck5vdFByZXNlbnQgPSAiRE5UIGhlYWRl
ciBub3QgcHJlc2VudCI7Ci0KLXN0YXRpYyB2b2lkIHRlc3RMb2FkaW5nU3RhdHVzKExvYWRUcmFj
a2luZ1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICB0ZXN0LT5zZXRSZWRp
cmVjdFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvbm9ybWFsIikuZGF0YSgpKTsKLSAgICB0
ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9yZWRpcmVjdCIpLmRhdGEoKSk7
Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBWZWN0b3I8TG9hZFRy
YWNraW5nVGVzdDo6TG9hZEV2ZW50cz4mIGV2ZW50cyA9IHRlc3QtPm1fbG9hZEV2ZW50czsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDQpOwotICAgIGdfYXNzZXJ0X2Nt
cGludChldmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFy
dGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVz
dDo6UHJvdmlzaW9uYWxMb2FkUmVjZWl2ZWRTZXJ2ZXJSZWRpcmVjdCk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KGV2ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRDb21taXR0ZWQpOwot
ICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbM10sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2Fk
RmluaXNoZWQpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0TG9hZGluZ0Vycm9yKExvYWRUcmFja2lu
Z1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVy
LT5nZXRVUklGb3JQYXRoKCIvZXJyb3IiKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExv
YWRGaW5pc2hlZCgpOwotCi0gICAgVmVjdG9yPExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRFdmVudHM+
JiBldmVudHMgPSB0ZXN0LT5tX2xvYWRFdmVudHM7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50
cy5zaXplKCksID09LCAzKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgTG9h
ZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7Ci0gICAgZ19hc3NlcnRfY21w
aW50KGV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZEZhaWxl
ZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6
OkxvYWRGaW5pc2hlZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFzc2VydE5vcm1hbExvYWRIYXBwZW5l
ZChWZWN0b3I8TG9hZFRyYWNraW5nVGVzdDo6TG9hZEV2ZW50cz4mIGV2ZW50cykKLXsKLSAgICBn
X2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDMpOwotICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVk
KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6
TG9hZENvbW1pdHRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIExvYWRU
cmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RMb2FkSHRt
bChMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxv
YWRIdG1sKCI8aHRtbD48Ym9keT5IZWxsbyBXZWJLaXQtR1RLKzwvYm9keT48L2h0bWw+IiwgMCk7
Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgYXNzZXJ0Tm9ybWFsTG9h
ZEhhcHBlbmVkKHRlc3QtPm1fbG9hZEV2ZW50cyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RMb2Fk
QWx0ZXJuYXRlSFRNTChMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewot
ICAgIHRlc3QtPmxvYWRBbHRlcm5hdGVIVE1MKCI8aHRtbD48Ym9keT5BbHRlcm5hdGUgcGFnZTwv
Ym9keT48L2h0bWw+IiwgImh0dHA6Ly9lcnJvci1wYWdlLmZvby8iLCAwKTsKLSAgICB0ZXN0LT53
YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBhc3NlcnROb3JtYWxMb2FkSGFwcGVuZWQodGVz
dC0+bV9sb2FkRXZlbnRzKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdExvYWRQbGFpblRleHQoTG9h
ZFRyYWNraW5nVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5sb2FkUGxh
aW5UZXh0KCJIZWxsbyBXZWJLaXQtR1RLKyIpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5p
c2hlZCgpOwotICAgIGFzc2VydE5vcm1hbExvYWRIYXBwZW5lZCh0ZXN0LT5tX2xvYWRFdmVudHMp
OwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0TG9hZFJlcXVlc3QoTG9hZFRyYWNraW5nVGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBHUmVmUHRyPFdlYktpdFVSSVJlcXVlc3Q+IHJlcXVl
c3Qod2Via2l0X3VyaV9yZXF1ZXN0X25ldyhrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvbm9ybWFs
IikuZGF0YSgpKSk7Ci0gICAgdGVzdC0+bG9hZFJlcXVlc3QocmVxdWVzdC5nZXQoKSk7Ci0gICAg
dGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgYXNzZXJ0Tm9ybWFsTG9hZEhhcHBl
bmVkKHRlc3QtPm1fbG9hZEV2ZW50cyk7Ci19Ci0KLWNsYXNzIExvYWRTdG9wVHJhY2tpbmdUZXN0
IDogcHVibGljIExvYWRUcmFja2luZ1Rlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJQl9URVNU
X0ZJWFRVUkUoTG9hZFN0b3BUcmFja2luZ1Rlc3QpOwotCi0gICAgdmlydHVhbCB2b2lkIGxvYWRD
b21taXR0ZWQoKQotICAgIHsKLSAgICAgICAgTG9hZFRyYWNraW5nVGVzdDo6bG9hZENvbW1pdHRl
ZCgpOwotICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfc3RvcF9sb2FkaW5nKG1fd2ViVmlldyk7Ci0g
ICAgfQotICAgIHZpcnR1YWwgdm9pZCBsb2FkRmFpbGVkKGNvbnN0IGdjaGFyKiBmYWlsaW5nVVJJ
LCBHRXJyb3IqIGVycm9yKQotICAgIHsKLSAgICAgICAgZ19hc3NlcnQoZ19lcnJvcl9tYXRjaGVz
KGVycm9yLCBXRUJLSVRfTkVUV09SS19FUlJPUiwgV0VCS0lUX05FVFdPUktfRVJST1JfQ0FOQ0VM
TEVEKSk7Ci0gICAgICAgIExvYWRUcmFja2luZ1Rlc3Q6OmxvYWRGYWlsZWQoZmFpbGluZ1VSSSwg
ZXJyb3IpOwotICAgIH0KLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RMb2FkQ2FuY2VsbGVkKExvYWRT
dG9wVHJhY2tpbmdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxvYWRV
Ukkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2NhbmNlbGxlZCIpLmRhdGEoKSk7Ci0gICAgdGVz
dC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBWZWN0b3I8TG9hZFRyYWNraW5nVGVz
dDo6TG9hZEV2ZW50cz4mIGV2ZW50cyA9IHRlc3QtPm1fbG9hZEV2ZW50czsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVu
dHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZENv
bW1pdHRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIExvYWRUcmFja2lu
Z1Rlc3Q6OkxvYWRGYWlsZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbM10sID09LCBM
b2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2Vi
Vmlld1RpdGxlKExvYWRUcmFja2luZ1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAg
Z19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19nZXRfdGl0bGUodGVzdC0+bV93ZWJWaWV3KSk7Ci0g
ICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxoZWFkPjx0aXRsZT5XZWxjb21lIHRvIFdlYktpdC1H
VEsrITwvdGl0bGU+PC9oZWFkPjwvaHRtbD4iLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2Fk
RmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dldF90aXRs
ZSh0ZXN0LT5tX3dlYlZpZXcpLCA9PSwgIldlbGNvbWUgdG8gV2ViS2l0LUdUSyshIik7Ci19Ci0K
LXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3UmVsb2FkKExvYWRUcmFja2luZ1Rlc3QqIHRlc3QsIGdj
b25zdHBvaW50ZXIpCi17Ci0gICAgLy8gQ2hlY2sgdGhhdCBub3RoaW5nIGhhcHBlbnMgd2hlbiB0
aGVyZSdzIG5vdGhpbmcgdG8gcmVsb2FkLgotICAgIHRlc3QtPnJlbG9hZCgpOwotICAgIHRlc3Qt
PndhaXQoMC4yNSk7IC8vIFdhaXQgZm9yIGEgcXVhcnRlciBvZiBhIHNlY29uZC4KLQotICAgIHRl
c3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL25vcm1hbCIpLmRhdGEoKSk7Ci0g
ICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgYXNzZXJ0Tm9ybWFsTG9hZEhh
cHBlbmVkKHRlc3QtPm1fbG9hZEV2ZW50cyk7Ci0KLSAgICB0ZXN0LT5yZWxvYWQoKTsKLSAgICB0
ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBhc3NlcnROb3JtYWxMb2FkSGFwcGVu
ZWQodGVzdC0+bV9sb2FkRXZlbnRzKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdExvYWRQcm9ncmVz
cyhMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxv
YWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL25vcm1hbCIpLmRhdGEoKSk7Ci0gICAgdGVz
dC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgZ19hc3NlcnRfY21wZmxvYXQodGVzdC0+
bV9lc3RpbWF0ZWRQcm9ncmVzcywgPT0sIDEpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmll
d0hpc3RvcnlMb2FkKExvYWRUcmFja2luZ1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0g
ICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvbm9ybWFsIikuZGF0YSgp
KTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBhc3NlcnROb3JtYWxM
b2FkSGFwcGVuZWQodGVzdC0+bV9sb2FkRXZlbnRzKTsKLQotICAgIHRlc3QtPmxvYWRVUkkoa1Nl
cnZlci0+Z2V0VVJJRm9yUGF0aCgiL25vcm1hbDIiKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRV
bnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGFzc2VydE5vcm1hbExvYWRIYXBwZW5lZCh0ZXN0LT5t
X2xvYWRFdmVudHMpOwotCi0gICAgLy8gQ2hlY2sgdGhhdCBsb2FkIHByb2Nlc3MgaXMgdGhlIHNh
bWUgZm9yIHBhZ2VzIGxvYWRlZCBmcm9tIGhpc3RvcnkgY2FjaGUuCi0gICAgdGVzdC0+Z29CYWNr
KCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgYXNzZXJ0Tm9ybWFs
TG9hZEhhcHBlbmVkKHRlc3QtPm1fbG9hZEV2ZW50cyk7Ci0KLSAgICB0ZXN0LT5nb0ZvcndhcmQo
KTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBhc3NlcnROb3JtYWxM
b2FkSGFwcGVuZWQodGVzdC0+bV9sb2FkRXZlbnRzKTsKLX0KLQotY2xhc3MgVmlld1VSSVRyYWNr
aW5nVGVzdDogcHVibGljIExvYWRUcmFja2luZ1Rlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJ
Ql9URVNUX0ZJWFRVUkUoVmlld1VSSVRyYWNraW5nVGVzdCk7Ci0KLSAgICBzdGF0aWMgdm9pZCB1
cmlDaGFuZ2VkKEdPYmplY3QqLCBHUGFyYW1TcGVjKiwgVmlld1VSSVRyYWNraW5nVGVzdCogdGVz
dCkKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXN0LT5tX2FjdGl2ZVVSSS5kYXRh
KCksICE9LCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSh0ZXN0LT5tX3dlYlZpZXcpKTsKLSAgICAg
ICAgdGVzdC0+bV9hY3RpdmVVUkkgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSh0ZXN0LT5tX3dl
YlZpZXcpOwotICAgIH0KLQotICAgIFZpZXdVUklUcmFja2luZ1Rlc3QoKQotICAgICAgICA6IG1f
YWN0aXZlVVJJKHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKG1fd2ViVmlldykpCi0gICAgewotICAg
ICAgICBnX2Fzc2VydChtX2FjdGl2ZVVSSS5pc051bGwoKSk7Ci0gICAgICAgIGdfc2lnbmFsX2Nv
bm5lY3QobV93ZWJWaWV3LCAibm90aWZ5Ojp1cmkiLCBHX0NBTExCQUNLKHVyaUNoYW5nZWQpLCB0
aGlzKTsKLSAgICB9Ci0KLSAgICB2b2lkIHByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQoKQotICAgIHsK
LSAgICAgICAgY2hlY2tBY3RpdmVVUkkoIi9yZWRpcmVjdCIpOwotICAgIH0KLQotICAgIHZvaWQg
cHJvdmlzaW9uYWxMb2FkUmVjZWl2ZWRTZXJ2ZXJSZWRpcmVjdCgpCi0gICAgewotICAgICAgICBj
aGVja0FjdGl2ZVVSSSgiL25vcm1hbCIpOwotICAgIH0KLQotICAgIHZvaWQgbG9hZENvbW1pdHRl
ZCgpCi0gICAgewotICAgICAgICBjaGVja0FjdGl2ZVVSSSgiL25vcm1hbCIpOwotICAgIH0KLQot
ICAgIHZvaWQgbG9hZEZpbmlzaGVkKCkKLSAgICB7Ci0gICAgICAgIGNoZWNrQWN0aXZlVVJJKCIv
bm9ybWFsIik7Ci0gICAgICAgIExvYWRUcmFja2luZ1Rlc3Q6OmxvYWRGaW5pc2hlZCgpOwotICAg
IH0KLQotICAgIENTdHJpbmcgbV9hY3RpdmVVUkk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBjaGVj
a0FjdGl2ZVVSSShjb25zdCBjaGFyKiB1cmkpCi0gICAgewotICAgICAgICBBU1NFUlRfQ01QX0NT
VFJJTkcobV9hY3RpdmVVUkksID09LCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKHVyaSkpOwotICAg
IH0KLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3QWN0aXZlVVJJKFZpZXdVUklUcmFja2lu
Z1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVy
LT5nZXRVUklGb3JQYXRoKCIvcmVkaXJlY3QiKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRp
bExvYWRGaW5pc2hlZCgpOwotfQotCi1jbGFzcyBWaWV3SXNMb2FkaW5nVGVzdDogcHVibGljIExv
YWRUcmFja2luZ1Rlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoVmll
d0lzTG9hZGluZ1Rlc3QpOwotCi0gICAgc3RhdGljIHZvaWQgaXNMb2FkaW5nQ2hhbmdlZChHT2Jq
ZWN0KiwgR1BhcmFtU3BlYyosIFZpZXdJc0xvYWRpbmdUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAg
ICAgaWYgKHdlYmtpdF93ZWJfdmlld19pc19sb2FkaW5nKHRlc3QtPm1fd2ViVmlldykpCi0gICAg
ICAgICAgICB0ZXN0LT5iZWdpbkxvYWQoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGVz
dC0+ZW5kTG9hZCgpOwotICAgIH0KLQotICAgIFZpZXdJc0xvYWRpbmdUZXN0KCkKLSAgICB7Ci0g
ICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAibm90aWZ5Ojppcy1sb2FkaW5nIiwg
R19DQUxMQkFDSyhpc0xvYWRpbmdDaGFuZ2VkKSwgdGhpcyk7Ci0gICAgfQotCi0gICAgdm9pZCBi
ZWdpbkxvYWQoKQotICAgIHsKLSAgICAgICAgLy8gTmV3IGxvYWQsIGxvYWQtc3RhcnRlZCBoYXNu
J3QgYmVlbiBlbWl0dGVkIHlldC4KLSAgICAgICAgZ19hc3NlcnQobV9sb2FkRXZlbnRzLmlzRW1w
dHkoKSk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSht
X3dlYlZpZXcpLCA9PSwgbV9hY3RpdmVVUkkuZGF0YSgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGVu
ZExvYWQoKQotICAgIHsKLSAgICAgICAgLy8gTG9hZCBmaW5pc2gsIGxvYWQtZmluaXNoZWQgYW5k
IGxvYWQtZmFpbGVkIGhhdmVuJ3QgYmVlbiBlbWl0dGVkIHlldC4KLSAgICAgICAgZ19hc3NlcnQo
IW1fbG9hZEV2ZW50cy5pc0VtcHR5KCkpOwotICAgICAgICBnX2Fzc2VydCghbV9sb2FkRXZlbnRz
LmNvbnRhaW5zKExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCkpOwotICAgICAgICBnX2Fz
c2VydCghbV9sb2FkRXZlbnRzLmNvbnRhaW5zKExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGYWlsZWQp
KTsKLSAgICB9Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0lzTG9hZGluZyhWaWV3SXNM
b2FkaW5nVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5sb2FkVVJJKGtT
ZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9ub3JtYWwiKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRV
bnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgdGVzdC0+cmVsb2FkKCk7Ci0gICAgdGVzdC0+d2Fp
dFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVS
SUZvclBhdGgoIi9lcnJvciIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlz
aGVkKCk7Ci0KLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9ub3Jt
YWwiKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIHRl
c3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL25vcm1hbDIiKS5kYXRhKCkpOwot
ICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgdGVzdC0+Z29CYWNrKCk7
Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICB0ZXN0LT5nb0Zvcndh
cmQoKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLX0KLQotY2xhc3MgV2Vi
UGFnZVVSSVRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElC
X1RFU1RfRklYVFVSRShXZWJQYWdlVVJJVGVzdCk7Ci0KLSAgICBzdGF0aWMgdm9pZCB3ZWJQYWdl
VVJJQ2hhbmdlZENhbGxiYWNrKEdEQnVzQ29ubmVjdGlvbiosIGNvbnN0IGNoYXIqLCBjb25zdCBj
aGFyKiwgY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBHVmFyaWFudCogcmVzdWx0LCBXZWJQYWdl
VVJJVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIHVyaTsKLSAgICAgICAg
Z192YXJpYW50X2dldChyZXN1bHQsICIoJnMpIiwgJnVyaSk7Ci0gICAgICAgIHRlc3QtPm1fd2Vi
UGFnZVVSSXMuYXBwZW5kKHVyaSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgd2ViVmlld1VS
SUNoYW5nZWQoR09iamVjdCosIEdQYXJhbVNwZWMqLCBXZWJQYWdlVVJJVGVzdCogdGVzdCkKLSAg
ICB7Ci0gICAgICAgIHRlc3QtPm1fd2ViVmlld1VSSXMuYXBwZW5kKHdlYmtpdF93ZWJfdmlld19n
ZXRfdXJpKHRlc3QtPm1fd2ViVmlldykpOwotICAgIH0KLQotICAgIFdlYlBhZ2VVUklUZXN0KCkK
LSAgICB7Ci0gICAgICAgIEdSZWZQdHI8R0RCdXNQcm94eT4gcHJveHkgPSBhZG9wdEdSZWYoYnVz
LT5jcmVhdGVQcm94eSgib3JnLndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9uVGVzdCIsCi0gICAgICAg
ICAgICAiL29yZy93ZWJraXQvZ3RrL1dlYkV4dGVuc2lvblRlc3QiLCAib3JnLndlYmtpdC5ndGsu
V2ViRXh0ZW5zaW9uVGVzdCIsIG1fbWFpbkxvb3ApKTsKLSAgICAgICAgbV91cmlDaGFuZ2VkU2ln
bmFsSUQgPSBnX2RidXNfY29ubmVjdGlvbl9zaWduYWxfc3Vic2NyaWJlKAotICAgICAgICAgICAg
Z19kYnVzX3Byb3h5X2dldF9jb25uZWN0aW9uKHByb3h5LmdldCgpKSwKLSAgICAgICAgICAgIDAs
Ci0gICAgICAgICAgICAib3JnLndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9uVGVzdCIsCi0gICAgICAg
ICAgICAiVVJJQ2hhbmdlZCIsCi0gICAgICAgICAgICAiL29yZy93ZWJraXQvZ3RrL1dlYkV4dGVu
c2lvblRlc3QiLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIEdfREJVU19TSUdOQUxfRkxB
R1NfTk9ORSwKLSAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0RCdXNTaWduYWxDYWxsYmFj
az4od2ViUGFnZVVSSUNoYW5nZWRDYWxsYmFjayksCi0gICAgICAgICAgICB0aGlzLAotICAgICAg
ICAgICAgMCk7Ci0gICAgICAgIGdfYXNzZXJ0KG1fdXJpQ2hhbmdlZFNpZ25hbElEKTsKLQotICAg
ICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgIm5vdGlmeTo6dXJpIiwgR19DQUxMQkFD
Syh3ZWJWaWV3VVJJQ2hhbmdlZCksIHRoaXMpOwotICAgIH0KLQotICAgIH5XZWJQYWdlVVJJVGVz
dCgpCi0gICAgewotICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQo
bV93ZWJWaWV3LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKLSAgICAg
ICAgZ19kYnVzX2Nvbm5lY3Rpb25fc2lnbmFsX3Vuc3Vic2NyaWJlKGJ1cy0+Y29ubmVjdGlvbigp
LCBtX3VyaUNoYW5nZWRTaWduYWxJRCk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgbV91cmlDaGFu
Z2VkU2lnbmFsSUQ7Ci0gICAgVmVjdG9yPENTdHJpbmc+IG1fd2ViUGFnZVVSSXM7Ci0gICAgVmVj
dG9yPENTdHJpbmc+IG1fd2ViVmlld1VSSXM7Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViUGFn
ZVVSSShXZWJQYWdlVVJJVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5s
b2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9yZWRpcmVjdCIpLmRhdGEoKSk7Ci0gICAg
dGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQodGVz
dC0+bV93ZWJQYWdlVVJJcy5zaXplKCksID09LCB0ZXN0LT5tX3dlYlZpZXdVUklzLnNpemUoKSk7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0ZXN0LT5tX3dlYlBhZ2VVUklzLnNpemUoKTsg
KytpKQotICAgICAgICBBU1NFUlRfQ01QX0NTVFJJTkcodGVzdC0+bV93ZWJQYWdlVVJJc1tpXSwg
PT0sIHRlc3QtPm1fd2ViVmlld1VSSXNbaV0pOwotCi0gICAgZ19hc3NlcnRfY21waW50KHRlc3Qt
Pm1fd2ViUGFnZVVSSXMuc2l6ZSgpLCA9PSwgMik7Ci0gICAgQVNTRVJUX0NNUF9DU1RSSU5HKHRl
c3QtPm1fd2ViUGFnZVVSSXNbMF0sID09LCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvcmVkaXJl
Y3QiKSk7Ci0gICAgQVNTRVJUX0NNUF9DU1RSSU5HKHRlc3QtPm1fd2ViUGFnZVVSSXNbMV0sID09
LCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvbm9ybWFsIikpOwotCi19Ci0KLXN0YXRpYyB2b2lk
IHRlc3RVUklSZXF1ZXN0SFRUUEhlYWRlcnMoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCi17Ci0gICAgR1JlZlB0cjxXZWJLaXRVUklSZXF1ZXN0PiB1cmlSZXF1ZXN0ID0gYWRvcHRH
UmVmKHdlYmtpdF91cmlfcmVxdWVzdF9uZXcoImZpbGU6Ly8vZm9vL2JhciIpKTsKLSAgICBnX2Fz
c2VydCh1cmlSZXF1ZXN0LmdldCgpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3VyaV9y
ZXF1ZXN0X2dldF91cmkodXJpUmVxdWVzdC5nZXQoKSksID09LCAiZmlsZTovLy9mb28vYmFyIik7
Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF91cmlfcmVxdWVzdF9nZXRfaHR0cF9oZWFkZXJzKHVyaVJl
cXVlc3QuZ2V0KCkpKTsKLQotICAgIC8vIExvYWQgYSByZXF1ZXN0IHdpdGggbm8gRG8gTm90IFRy
YWNrIGhlYWRlci4KLSAgICB3ZWJraXRfdXJpX3JlcXVlc3Rfc2V0X3VyaSh1cmlSZXF1ZXN0Lmdl
dCgpLCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvZG8tbm90LXRyYWNrLWhlYWRlciIpLmRhdGEo
KSk7Ci0gICAgdGVzdC0+bG9hZFJlcXVlc3QodXJpUmVxdWVzdC5nZXQoKSk7Ci0gICAgdGVzdC0+
d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBzaXplX3QgbWFpblJlc291cmNlRGF0YVNp
emUgPSAwOwotICAgIGNvbnN0IGNoYXIqIG1haW5SZXNvdXJjZURhdGEgPSB0ZXN0LT5tYWluUmVz
b3VyY2VEYXRhKG1haW5SZXNvdXJjZURhdGFTaXplKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQobWFp
blJlc291cmNlRGF0YVNpemUsID09LCBzdHJsZW4oa0ROVEhlYWRlck5vdFByZXNlbnQpKTsKLSAg
ICBnX2Fzc2VydCghc3RybmNtcChtYWluUmVzb3VyY2VEYXRhLCBrRE5USGVhZGVyTm90UHJlc2Vu
dCwgbWFpblJlc291cmNlRGF0YVNpemUpKTsKLQotICAgIC8vIEFkZCB0aGUgRG8gTm90IFRyYWNr
IGhlYWRlciBhbmQgbG9hZCB0aGUgcmVxdWVzdCBhZ2Fpbi4KLSAgICBTb3VwTWVzc2FnZUhlYWRl
cnMqIGhlYWRlcnMgPSB3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X2h0dHBfaGVhZGVycyh1cmlSZXF1
ZXN0LmdldCgpKTsKLSAgICBnX2Fzc2VydChoZWFkZXJzKTsKLSAgICBzb3VwX21lc3NhZ2VfaGVh
ZGVyc19hcHBlbmQoaGVhZGVycywgIkROVCIsICIxIik7Ci0gICAgdGVzdC0+bG9hZFJlcXVlc3Qo
dXJpUmVxdWVzdC5nZXQoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0K
LSAgICBtYWluUmVzb3VyY2VEYXRhID0gdGVzdC0+bWFpblJlc291cmNlRGF0YShtYWluUmVzb3Vy
Y2VEYXRhU2l6ZSk7Ci0gICAgZ19hc3NlcnRfY21waW50KG1haW5SZXNvdXJjZURhdGFTaXplLCA9
PSwgMSk7Ci0gICAgZ19hc3NlcnQoIXN0cm5jbXAobWFpblJlc291cmNlRGF0YSwgIjEiLCBtYWlu
UmVzb3VyY2VEYXRhU2l6ZSkpOwotCi0gICAgLy8gTG9hZCBhIFVSSSBmb3Igd2hpY2ggdGhlIHdl
YiBleHRlbnNpb24gd2lsbCBhZGQgdGhlIERvIE5vdCBUcmFjayBoZWFkZXIuCi0gICAgdGVzdC0+
bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvYWRkLWRvLW5vdC10cmFjay1oZWFkZXIi
KS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgbWFp
blJlc291cmNlRGF0YSA9IHRlc3QtPm1haW5SZXNvdXJjZURhdGEobWFpblJlc291cmNlRGF0YVNp
emUpOwotICAgIGdfYXNzZXJ0X2NtcGludChtYWluUmVzb3VyY2VEYXRhU2l6ZSwgPT0sIDEpOwot
ICAgIGdfYXNzZXJ0KCFzdHJuY21wKG1haW5SZXNvdXJjZURhdGEsICIxIiwgbWFpblJlc291cmNl
RGF0YVNpemUpKTsKLX0KLQotc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciog
c2VydmVyLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJs
ZSosIFNvdXBDbGllbnRDb250ZXh0KiwgZ3BvaW50ZXIpCi17Ci0gICAgc3RhdGljIGNvbnN0IGNo
YXIqIHJlc3BvbnNlU3RyaW5nID0gIjxodG1sPjxib2R5PlRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchIgotICAgICAgICAiVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchIgotICAgICAgICAiVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchIgotICAgICAgICAiVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchIgotICAgICAgICAiVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchIgotICAgICAgICAiVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchIgotICAgICAgICAiVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchIgot
ICAgICAgICAiVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchPC9ib2R5Pjwv
aHRtbD4iOwotCi0gICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsK
LSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9U
X0lNUExFTUVOVEVEKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNvdXBfbWVzc2Fn
ZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKLQotICAgIGlmIChnX3N0cl9o
YXNfcHJlZml4KHBhdGgsICIvbm9ybWFsIikpCi0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2Fw
cGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIHJlc3BvbnNl
U3RyaW5nLCBzdHJsZW4ocmVzcG9uc2VTdHJpbmcpKTsKLSAgICBlbHNlIGlmIChnX3N0cl9lcXVh
bChwYXRoLCAiL2Vycm9yIikpCi0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3Nh
Z2UsIFNPVVBfU1RBVFVTX0NBTlRfQ09OTkVDVCk7Ci0gICAgZWxzZSBpZiAoZ19zdHJfZXF1YWwo
cGF0aCwgIi9yZWRpcmVjdCIpKSB7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1l
c3NhZ2UsIFNPVVBfU1RBVFVTX01PVkVEX1BFUk1BTkVOVExZKTsKLSAgICAgICAgc291cF9tZXNz
YWdlX2hlYWRlcnNfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJMb2NhdGlvbiIs
ICIvbm9ybWFsIik7Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2NhbmNlbGxl
ZCIpKSB7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX3NldF9lbmNvZGluZyhtZXNzYWdl
LT5yZXNwb25zZV9oZWFkZXJzLCBTT1VQX0VOQ09ESU5HX0NIVU5LRUQpOwotICAgICAgICBzb3Vw
X21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllf
U1RBVElDLCByZXNwb25zZVN0cmluZywgc3RybGVuKHJlc3BvbnNlU3RyaW5nKSk7Ci0gICAgICAg
IHNvdXBfc2VydmVyX3VucGF1c2VfbWVzc2FnZShzZXJ2ZXIsIG1lc3NhZ2UpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2RvLW5vdC10cmFjay1o
ZWFkZXIiKSB8fCBnX3N0cl9lcXVhbChwYXRoLCAiL2FkZC1kby1ub3QtdHJhY2staGVhZGVyIikp
IHsKLSAgICAgICAgY29uc3QgY2hhciogZG9Ob3RUcmFjayA9IHNvdXBfbWVzc2FnZV9oZWFkZXJz
X2dldF9vbmUobWVzc2FnZS0+cmVxdWVzdF9oZWFkZXJzLCAiRE5UIik7Ci0gICAgICAgIGlmIChk
b05vdFRyYWNrKQotICAgICAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2Ut
PnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX0NPUFksIGRvTm90VHJhY2ssIHN0cmxlbihkb05v
dFRyYWNrKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2Fw
cGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGtETlRIZWFk
ZXJOb3RQcmVzZW50LCBzdHJsZW4oa0ROVEhlYWRlck5vdFByZXNlbnQpKTsKLSAgICAgICAgc291
cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOwotICAgIH0gZWxz
ZQotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19O
T1RfRk9VTkQpOwotCi0gICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVz
cG9uc2VfYm9keSk7Ci19Ci0KLXZvaWQgYmVmb3JlQWxsKCkKLXsKLSAgICB3ZWJraXRfd2ViX2Nv
bnRleHRfc2V0X3dlYl9leHRlbnNpb25zX2RpcmVjdG9yeSh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0
X2RlZmF1bHQoKSwgV0VCS0lUX1RFU1RfV0VCX0VYVEVOU0lPTlNfRElSKTsKLSAgICBidXMgPSBu
ZXcgV2ViS2l0VGVzdEJ1cygpOwotICAgIGlmICghYnVzLT5ydW4oKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAga1NlcnZlciA9IG5ldyBXZWJLaXRUZXN0U2VydmVyKCk7Ci0gICAga1NlcnZlci0+
cnVuKHNlcnZlckNhbGxiYWNrKTsKLQotICAgIExvYWRUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0
V2ViVmlldyIsICJsb2FkaW5nLXN0YXR1cyIsIHRlc3RMb2FkaW5nU3RhdHVzKTsKLSAgICBMb2Fk
VHJhY2tpbmdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAibG9hZGluZy1lcnJvciIsIHRlc3RM
b2FkaW5nRXJyb3IpOwotICAgIExvYWRUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIs
ICJsb2FkLWh0bWwiLCB0ZXN0TG9hZEh0bWwpOwotICAgIExvYWRUcmFja2luZ1Rlc3Q6OmFkZCgi
V2ViS2l0V2ViVmlldyIsICJsb2FkLWFsdGVybmF0ZS1odG1sIiwgdGVzdExvYWRBbHRlcm5hdGVI
VE1MKTsKLSAgICBMb2FkVHJhY2tpbmdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAibG9hZC1w
bGFpbi10ZXh0IiwgdGVzdExvYWRQbGFpblRleHQpOwotICAgIExvYWRUcmFja2luZ1Rlc3Q6OmFk
ZCgiV2ViS2l0V2ViVmlldyIsICJsb2FkLXJlcXVlc3QiLCB0ZXN0TG9hZFJlcXVlc3QpOwotICAg
IExvYWRTdG9wVHJhY2tpbmdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAic3RvcC1sb2FkaW5n
IiwgdGVzdExvYWRDYW5jZWxsZWQpOwotICAgIExvYWRUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0
V2ViVmlldyIsICJ0aXRsZSIsIHRlc3RXZWJWaWV3VGl0bGUpOwotICAgIExvYWRUcmFja2luZ1Rl
c3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJwcm9ncmVzcyIsIHRlc3RMb2FkUHJvZ3Jlc3MpOwot
ICAgIExvYWRUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJyZWxvYWQiLCB0ZXN0
V2ViVmlld1JlbG9hZCk7Ci0gICAgTG9hZFRyYWNraW5nVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3
IiwgImhpc3RvcnktbG9hZCIsIHRlc3RXZWJWaWV3SGlzdG9yeUxvYWQpOwotCi0gICAgLy8gVGhp
cyB0ZXN0IGNoZWNrcyB0aGF0IHdlYiB2aWV3IG5vdGlmeTo6dXJpIHNpZ25hbCBpcyBjb3JyZWN0
bHkgZW1pdHRlZAotICAgIC8vIGFuZCB0aGUgdXJpIGlzIGFscmVhZHkgdXBkYXRlZCB3aGVuIGxv
YWRlciBjbGllbnQgc2lnbmFscyBhcmUgZW1pdHRlZC4KLSAgICBWaWV3VVJJVHJhY2tpbmdUZXN0
OjphZGQoIldlYktpdFdlYlZpZXciLCAiYWN0aXZlLXVyaSIsIHRlc3RXZWJWaWV3QWN0aXZlVVJJ
KTsKLQotICAgIFZpZXdJc0xvYWRpbmdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiaXMtbG9h
ZGluZyIsIHRlc3RXZWJWaWV3SXNMb2FkaW5nKTsKLSAgICBXZWJQYWdlVVJJVGVzdDo6YWRkKCJX
ZWJLaXRXZWJQYWdlIiwgImdldC11cmkiLCB0ZXN0V2ViUGFnZVVSSSk7Ci0gICAgV2ViVmlld1Rl
c3Q6OmFkZCgiV2ViS2l0VVJJUmVxdWVzdCIsICJodHRwLWhlYWRlcnMiLCB0ZXN0VVJJUmVxdWVz
dEhUVFBIZWFkZXJzKTsKLX0KLQotdm9pZCBhZnRlckFsbCgpCi17Ci0gICAgZGVsZXRlIGJ1czsK
LSAgICBkZWxldGUga1NlcnZlcjsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RNYWluLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL1Rlc3RNYWluLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDc4MTljZi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9UZXN0TWFpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJUZXN0TWFpbi5oIgotCi0jaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRl
IDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+Ci0jaW5jbHVkZSA8d3Rm
L2dvYmplY3QvR093blB0ci5oPgotCi12b2lkIGJlZm9yZUFsbCgpOwotdm9pZCBhZnRlckFsbCgp
OwotCi1zdGF0aWMgdm9pZCByZWdpc3RlckdSZXNvdXJjZSh2b2lkKQotewotICAgIEdPd25QdHI8
Y2hhcj4gcmVzb3VyY2VzUGF0aChnX2J1aWxkX2ZpbGVuYW1lKFdFQktJVF9FWEVDX1BBVEgsICJy
ZXNvdXJjZXMiLCAid2Via2l0Mmd0ay10ZXN0cy1yZXNvdXJjZXMuZ3Jlc291cmNlIiwgTlVMTCkp
OwotICAgIEdSZXNvdXJjZSogcmVzb3VyY2UgPSBnX3Jlc291cmNlX2xvYWQocmVzb3VyY2VzUGF0
aC5nZXQoKSwgMCk7Ci0gICAgZ19hc3NlcnQocmVzb3VyY2UpOwotCi0gICAgZ19yZXNvdXJjZXNf
cmVnaXN0ZXIocmVzb3VyY2UpOwotICAgIGdfcmVzb3VyY2VfdW5yZWYocmVzb3VyY2UpOwotfQot
Ci1zdGF0aWMgdm9pZCByZW1vdmVOb25FbXB0eURpcmVjdG9yeShjb25zdCBjaGFyKiBkaXJlY3Rv
cnlQYXRoKQotewotICAgIEdEaXIqIGRpcmVjdG9yeSA9IGdfZGlyX29wZW4oZGlyZWN0b3J5UGF0
aCwgMCwgMCk7Ci0gICAgZ19hc3NlcnQoZGlyZWN0b3J5KTsKLSAgICBjb25zdCBjaGFyKiBmaWxl
TmFtZTsKLSAgICB3aGlsZSAoKGZpbGVOYW1lID0gZ19kaXJfcmVhZF9uYW1lKGRpcmVjdG9yeSkp
KSB7Ci0gICAgICAgIEdPd25QdHI8Y2hhcj4gZmlsZVBhdGgoZ19idWlsZF9maWxlbmFtZShkaXJl
Y3RvcnlQYXRoLCBmaWxlTmFtZSwgTlVMTCkpOwotICAgICAgICBnX3VubGluayhmaWxlUGF0aC5n
ZXQoKSk7Ci0gICAgfQotICAgIGdfZGlyX2Nsb3NlKGRpcmVjdG9yeSk7Ci0gICAgZ19ybWRpcihk
aXJlY3RvcnlQYXRoKTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotewot
ICAgIGdfdW5zZXRlbnYoIkRCVVNfU0VTU0lPTl9CVVNfQUREUkVTUyIpOwotICAgIGd0a190ZXN0
X2luaXQoJmFyZ2MsICZhcmd2LCAwKTsKLSAgICBnX3NldGVudigiV0VCS0lUX0VYRUNfUEFUSCIs
IFdFQktJVF9FWEVDX1BBVEgsIEZBTFNFKTsKLSAgICBnX3NldGVudigiV0VCS0lUX0lOSkVDVEVE
X0JVTkRMRV9QQVRIIiwgV0VCS0lUX0lOSkVDVEVEX0JVTkRMRV9QQVRILCBGQUxTRSk7Ci0gICAg
Z19zZXRlbnYoIkxDX0FMTCIsICJDIiwgVFJVRSk7Ci0gICAgZ19zZXRlbnYoIkdJT19VU0VfVkZT
IiwgImxvY2FsIiwgVFJVRSk7Ci0gICAgZ19zZXRlbnYoIkdTRVRUSU5HU19CQUNLRU5EIiwgIm1l
bW9yeSIsIFRSVUUpOwotICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvIik7Ci0KLSAgICByZWdpc3RlckdSZXNvdXJjZSgpOwotCi0gICAgR093blB0cjxjaGFyPiBk
aXNrQ2FjaGVUZW1wRGlyZWN0b3J5KGdfZGlyX21ha2VfdG1wKCJXZWJLaXQyVGVzdHNEaXNrQ2Fj
aGUtWFhYWFhYIiwgMCkpOwotICAgIGdfYXNzZXJ0KGRpc2tDYWNoZVRlbXBEaXJlY3RvcnkuZ2V0
KCkpOwotICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfZGlza19jYWNoZV9kaXJlY3Rvcnkod2Vi
a2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCksIGRpc2tDYWNoZVRlbXBEaXJlY3RvcnkuZ2V0
KCkpOwotCi0gICAgYmVmb3JlQWxsKCk7Ci0gICAgaW50IHJldHVyblZhbHVlID0gZ190ZXN0X3J1
bigpOwotICAgIGFmdGVyQWxsKCk7Ci0KLSAgICByZW1vdmVOb25FbXB0eURpcmVjdG9yeShkaXNr
Q2FjaGVUZW1wRGlyZWN0b3J5LmdldCgpKTsKLQotICAgIHJldHVybiByZXR1cm5WYWx1ZTsKLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RN
YWluLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0TWFpbi5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMmM5MDcwLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RNYWluLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwxMTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEg
Uy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAq
LwotCi0jaWZuZGVmIFRlc3RNYWluX2gKLSNkZWZpbmUgVGVzdE1haW5faAotCi0jaW5jbHVkZSA8
Y2Fpcm8uaD4KLSNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLQotI2RlZmluZSBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKENsYXNzTmFtZSkg
XAotICAgIHN0YXRpYyB2b2lkIHNldFVwKENsYXNzTmFtZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRl
ciBkYXRhKSBcCi0gICAgeyBcCi0gICAgICAgIG5ldyAoZml4dHVyZSkgQ2xhc3NOYW1lOyBcCi0g
ICAgfSBcCi0gICAgc3RhdGljIHZvaWQgdGVhckRvd24oQ2xhc3NOYW1lKiBmaXh0dXJlLCBnY29u
c3Rwb2ludGVyIGRhdGEpIFwKLSAgICB7IFwKLSAgICAgICAgZml4dHVyZS0+fkNsYXNzTmFtZSgp
OyBcCi0gICAgfSBcCi0gICAgc3RhdGljIHZvaWQgYWRkKGNvbnN0IGNoYXIqIHN1aXRlTmFtZSwg
Y29uc3QgY2hhciogdGVzdE5hbWUsIHZvaWQgKCp0ZXN0RnVuYykoQ2xhc3NOYW1lKiwgY29uc3Qg
dm9pZCopKSBcCi0gICAgeyBcCi0gICAgICAgIEdPd25QdHI8Z2NoYXI+IHRlc3RQYXRoKGdfc3Ry
ZHVwX3ByaW50ZigiL3dlYmtpdDIvJXMvJXMiLCBzdWl0ZU5hbWUsIHRlc3ROYW1lKSk7IFwKLSAg
ICAgICAgZ190ZXN0X2FkZCh0ZXN0UGF0aC5nZXQoKSwgQ2xhc3NOYW1lLCAwLCBDbGFzc05hbWU6
OnNldFVwLCB0ZXN0RnVuYywgQ2xhc3NOYW1lOjp0ZWFyRG93bik7IFwKLSAgICB9Ci0KLSNkZWZp
bmUgQVNTRVJUX0NNUF9DU1RSSU5HKHMxLCBjbXAsIHMyKSBcCi0gICAgZG8geyBDU3RyaW5nIF9f
czEgPSAoczEpOyBDU3RyaW5nIF9fczIgPSAoczIpOyBcCi0gICAgICAgIGlmIChnX3N0cmNtcDAo
X19zMS5kYXRhKCksIF9fczIuZGF0YSgpKSBjbXAgMCkgOyBlbHNlIFwKLSAgICAgICAgICAgIGdf
YXNzZXJ0aW9uX21lc3NhZ2VfY21wc3RyKEdfTE9HX0RPTUFJTiwgX19GSUxFX18sIF9fTElORV9f
LCBHX1NUUkZVTkMsIFwKLSAgICAgICAgICAgICAgICAjczEgIiAiICNjbXAgIiAiICNzMiwgX19z
MS5kYXRhKCksICNjbXAsIF9fczIuZGF0YSgpKTsgfSB3aGlsZSAoMCkKLQotY2xhc3MgVGVzdCB7
Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShUZXN0KTsKLQotICAgIH5UZXN0
KCkKLSAgICB7Ci0gICAgICAgIGlmIChtX3dhdGNoZWRPYmplY3RzLmlzRW1wdHkoKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICBnX3ByaW50KCJMZWFrZWQgb2JqZWN0czoiKTsKLSAg
ICAgICAgSGFzaFNldDxHT2JqZWN0Kj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fd2F0Y2hlZE9i
amVjdHMuZW5kKCk7Ci0gICAgICAgIGZvciAoSGFzaFNldDxHT2JqZWN0Kj46OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV93YXRjaGVkT2JqZWN0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAg
ICAgICAgICBnX3ByaW50KCIgJXMoJXApIiwgZ190eXBlX25hbWVfZnJvbV9pbnN0YW5jZShyZWlu
dGVycHJldF9jYXN0PEdUeXBlSW5zdGFuY2UqPigqaXQpKSwgKml0KTsKLSAgICAgICAgZ19wcmlu
dCgiXG4iKTsKLQotICAgICAgICBnX2Fzc2VydChtX3dhdGNoZWRPYmplY3RzLmlzRW1wdHkoKSk7
Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgb2JqZWN0RmluYWxpemVkKFRlc3QqIHRlc3QsIEdP
YmplY3QqIGZpbmFsaXplZE9iamVjdCkKLSAgICB7Ci0gICAgICAgIHRlc3QtPm1fd2F0Y2hlZE9i
amVjdHMucmVtb3ZlKGZpbmFsaXplZE9iamVjdCk7Ci0gICAgfQotCi0gICAgdm9pZCBhc3NlcnRP
YmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdPYmplY3QqIG9iamVjdCkKLSAgICB7Ci0g
ICAgICAgIG1fd2F0Y2hlZE9iamVjdHMuYWRkKG9iamVjdCk7Ci0gICAgICAgIGdfb2JqZWN0X3dl
YWtfcmVmKG9iamVjdCwgcmVpbnRlcnByZXRfY2FzdDxHV2Vha05vdGlmeT4ob2JqZWN0RmluYWxp
emVkKSwgdGhpcyk7Ci0gICAgfQotCi0gICAgc3RhdGljIENTdHJpbmcgZ2V0V2ViS2l0MVRlc3RS
ZXNvdWNlc0RpcigpCi0gICAgewotICAgICAgICBHT3duUHRyPGNoYXI+IHJlc291cmNlc0Rpcihn
X2J1aWxkX2ZpbGVuYW1lKFdFQktJVF9TUkNfRElSLCAiU291cmNlIiwgIldlYktpdCIsICJndGsi
LCAidGVzdHMiLCAicmVzb3VyY2VzIiwgTlVMTCkpOwotICAgICAgICByZXR1cm4gcmVzb3VyY2Vz
RGlyLmdldCgpOwotICAgIH0KLQotICAgIHN0YXRpYyBDU3RyaW5nIGdldFJlc291cmNlc0Rpcigp
Ci0gICAgewotICAgICAgICBHT3duUHRyPGNoYXI+IHJlc291cmNlc0RpcihnX2J1aWxkX2ZpbGVu
YW1lKFdFQktJVF9TUkNfRElSLCAiU291cmNlIiwgIldlYktpdDIiLCAiVUlQcm9jZXNzIiwgIkFQ
SSIsICJndGsiLCAidGVzdHMiLCAicmVzb3VyY2VzIiwgTlVMTCkpOwotICAgICAgICByZXR1cm4g
cmVzb3VyY2VzRGlyLmdldCgpOwotICAgIH0KLQotICAgIHZvaWQgYWRkTG9nRmF0YWxGbGFnKHVu
c2lnbmVkIGZsYWcpCi0gICAgewotICAgICAgICB1bnNpZ25lZCBmYXRhbE1hc2sgPSBnX2xvZ19z
ZXRfYWx3YXlzX2ZhdGFsKHN0YXRpY19jYXN0PEdMb2dMZXZlbEZsYWdzPihHX0xPR19GQVRBTF9N
QVNLKSk7Ci0gICAgICAgIGZhdGFsTWFzayB8PSBmbGFnOwotICAgICAgICBnX2xvZ19zZXRfYWx3
YXlzX2ZhdGFsKHN0YXRpY19jYXN0PEdMb2dMZXZlbEZsYWdzPihmYXRhbE1hc2spKTsKLSAgICB9
Ci0KLSAgICB2b2lkIHJlbW92ZUxvZ0ZhdGFsRmxhZyh1bnNpZ25lZCBmbGFnKQotICAgIHsKLSAg
ICAgICAgdW5zaWduZWQgZmF0YWxNYXNrID0gZ19sb2dfc2V0X2Fsd2F5c19mYXRhbChzdGF0aWNf
Y2FzdDxHTG9nTGV2ZWxGbGFncz4oR19MT0dfRkFUQUxfTUFTSykpOwotICAgICAgICBmYXRhbE1h
c2sgJj0gfmZsYWc7Ci0gICAgICAgIGdfbG9nX3NldF9hbHdheXNfZmF0YWwoc3RhdGljX2Nhc3Q8
R0xvZ0xldmVsRmxhZ3M+KGZhdGFsTWFzaykpOwotICAgIH0KLQotICAgIHN0YXRpYyBib29sIGNh
aXJvU3VyZmFjZXNFcXVhbChjYWlyb19zdXJmYWNlX3QqIHMxLCBjYWlyb19zdXJmYWNlX3QqIHMy
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIChjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9mb3JtYXQo
czEpID09IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2Zvcm1hdChzMikKLSAgICAgICAgICAgICYm
IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHMxKSA9PSBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF93aWR0aChzMikKLSAgICAgICAgICAgICYmIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hl
aWdodChzMSkgPT0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHMyKQotICAgICAgICAg
ICAgJiYgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKHMxKSA9PSBjYWlyb19pbWFnZV9z
dXJmYWNlX2dldF9zdHJpZGUoczIpCi0gICAgICAgICAgICAmJiAhbWVtY21wKGNvbnN0X2Nhc3Q8
Y29uc3Qgdm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X2RhdGEoczEpKSksCi0gICAgICAgICAgICAgICAgY29uc3RfY2FzdDxjb25zdCB2b2lkKj4o
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzMikp
KSwKLSAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoczEpKmNh
aXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShzMSkpKTsKLSAgICB9Ci0KLSAgICBIYXNoU2V0
PEdPYmplY3QqPiBtX3dhdGNoZWRPYmplY3RzOwotfTsKLQotI2VuZGlmIC8vIFRlc3RNYWluX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RQ
cmludGluZy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0
UHJpbnRpbmcuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmMyY2ZiLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RQcmlu
dGluZy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVy
c2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldl
YlZpZXdUZXN0LmgiCi0jaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRlIDx3dGYvZ29i
amVjdC9HUmVmUHRyLmg+Ci0KLSNpZmRlZiBIQVZFX0dUS19VTklYX1BSSU5USU5HCi0jaW5jbHVk
ZSA8Z3RrL2d0a3VuaXhwcmludC5oPgotI2VuZGlmCi0KLXN0YXRpYyBjaGFyKiBrVGVtcERpcmVj
dG9yeTsKLQotc3RhdGljIHZvaWQgdGVzdFByaW50T3BlcmF0aW9uUHJpbnRTZXR0aW5ncyhXZWJW
aWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBHUmVmUHRyPFdlYktpdFByaW50
T3BlcmF0aW9uPiBwcmludE9wZXJhdGlvbiA9IGFkb3B0R1JlZih3ZWJraXRfcHJpbnRfb3BlcmF0
aW9uX25ldyh0ZXN0LT5tX3dlYlZpZXcpKTsKLSAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0
ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHByaW50T3BlcmF0aW9uLmdldCgpKSk7Ci0KLSAg
ICBnX2Fzc2VydCghd2Via2l0X3ByaW50X29wZXJhdGlvbl9nZXRfcHJpbnRfc2V0dGluZ3MocHJp
bnRPcGVyYXRpb24uZ2V0KCkpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3ByaW50X29wZXJhdGlv
bl9nZXRfcGFnZV9zZXR1cChwcmludE9wZXJhdGlvbi5nZXQoKSkpOwotCi0gICAgR1JlZlB0cjxH
dGtQcmludFNldHRpbmdzPiBwcmludFNldHRpbmdzID0gYWRvcHRHUmVmKGd0a19wcmludF9zZXR0
aW5nc19uZXcoKSk7Ci0gICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5p
c2hlcyhHX09CSkVDVChwcmludFNldHRpbmdzLmdldCgpKSk7Ci0KLSAgICBHUmVmUHRyPEd0a1Bh
Z2VTZXR1cD4gcGFnZVNldHVwID0gYWRvcHRHUmVmKGd0a19wYWdlX3NldHVwX25ldygpKTsKLSAg
ICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHBh
Z2VTZXR1cC5nZXQoKSkpOwotCi0gICAgd2Via2l0X3ByaW50X29wZXJhdGlvbl9zZXRfcHJpbnRf
c2V0dGluZ3MocHJpbnRPcGVyYXRpb24uZ2V0KCksIHByaW50U2V0dGluZ3MuZ2V0KCkpOwotICAg
IHdlYmtpdF9wcmludF9vcGVyYXRpb25fc2V0X3BhZ2Vfc2V0dXAocHJpbnRPcGVyYXRpb24uZ2V0
KCksIHBhZ2VTZXR1cC5nZXQoKSk7Ci0KLSAgICBnX2Fzc2VydCh3ZWJraXRfcHJpbnRfb3BlcmF0
aW9uX2dldF9wcmludF9zZXR0aW5ncyhwcmludE9wZXJhdGlvbi5nZXQoKSkgPT0gcHJpbnRTZXR0
aW5ncy5nZXQoKSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3ByaW50X29wZXJhdGlvbl9nZXRfcGFn
ZV9zZXR1cChwcmludE9wZXJhdGlvbi5nZXQoKSkgPT0gcGFnZVNldHVwLmdldCgpKTsKLX0KLQot
c3RhdGljIGdib29sZWFuIHdlYlZpZXdQcmludENhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcsIFdlYktpdFByaW50T3BlcmF0aW9uKiBwcmludE9wZXJhdGlvbiwgV2ViVmlld1Rlc3QqIHRl
c3QpCi17Ci0gICAgZ19hc3NlcnQod2ViVmlldyA9PSB0ZXN0LT5tX3dlYlZpZXcpOwotCi0gICAg
Z19hc3NlcnQoV0VCS0lUX0lTX1BSSU5UX09QRVJBVElPTihwcmludE9wZXJhdGlvbikpOwotICAg
IHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QocHJp
bnRPcGVyYXRpb24pKTsKLQotICAgIGdfYXNzZXJ0KCF3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX2dl
dF9wcmludF9zZXR0aW5ncyhwcmludE9wZXJhdGlvbikpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRf
cHJpbnRfb3BlcmF0aW9uX2dldF9wYWdlX3NldHVwKHByaW50T3BlcmF0aW9uKSk7Ci0KLSAgICBn
X21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOwotCi0gICAgcmV0dXJuIFRSVUU7Ci19
Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3UHJpbnQoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25z
dHBvaW50ZXIpCi17Ci0gICAgZ19zaWduYWxfY29ubmVjdCh0ZXN0LT5tX3dlYlZpZXcsICJwcmlu
dCIsIEdfQ0FMTEJBQ0sod2ViVmlld1ByaW50Q2FsbGJhY2spLCB0ZXN0KTsKLSAgICB0ZXN0LT5s
b2FkSHRtbCgiPGh0bWw+PGJvZHkgb25Mb2FkPVwicHJpbnQoKTtcIj5XZWJLaXRHVEsrIHByaW50
aW5nIHRlc3Q8L2JvZHk+PC9odG1sPiIsIDApOwotICAgIGdfbWFpbl9sb29wX3J1bih0ZXN0LT5t
X21haW5Mb29wKTsKLX0KLQotI2lmZGVmIEhBVkVfR1RLX1VOSVhfUFJJTlRJTkcKLWNsYXNzIFBy
aW50VGVzdDogcHVibGljIFdlYlZpZXdUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVT
VF9GSVhUVVJFKFByaW50VGVzdCk7Ci0KLSAgICBzdGF0aWMgdm9pZCBwcmludEZpbmlzaGVkQ2Fs
bGJhY2soV2ViS2l0UHJpbnRPcGVyYXRpb24qLCBQcmludFRlc3QqIHRlc3QpCi0gICAgewotICAg
ICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIHN0
YXRpYyB2b2lkIHByaW50RmFpbGVkQ2FsbGJhY2soV2ViS2l0UHJpbnRPcGVyYXRpb24qLCBHRXJy
b3IqIGVycm9yLCBQcmludFRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICBnX2Fzc2VydCh0ZXN0
LT5tX2V4cGVjdGVkRXJyb3IpOwotICAgICAgICBnX2Fzc2VydChlcnJvcik7Ci0gICAgICAgIGdf
YXNzZXJ0KGdfZXJyb3JfbWF0Y2hlcyhlcnJvciwgV0VCS0lUX1BSSU5UX0VSUk9SLCB0ZXN0LT5t
X2V4cGVjdGVkRXJyb3IpKTsKLSAgICB9Ci0KLSAgICBQcmludFRlc3QoKQotICAgICAgICA6IG1f
ZXhwZWN0ZWRFcnJvcigwKQotICAgIHsKLSAgICAgICAgbV9wcmludE9wZXJhdGlvbiA9IGFkb3B0
R1JlZih3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX25ldyhtX3dlYlZpZXcpKTsKLSAgICAgICAgYXNz
ZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChtX3ByaW50T3BlcmF0
aW9uLmdldCgpKSk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9wcmludE9wZXJhdGlvbi5n
ZXQoKSwgImZpbmlzaGVkIiwgR19DQUxMQkFDSyhwcmludEZpbmlzaGVkQ2FsbGJhY2spLCB0aGlz
KTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3ByaW50T3BlcmF0aW9uLmdldCgpLCAiZmFp
bGVkIiwgR19DQUxMQkFDSyhwcmludEZhaWxlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgfQotCi0g
ICAgc3RhdGljIGdib29sZWFuIHRlc3RQcmludE9wZXJhdGlvblByaW50UHJpbnRlcihHdGtQcmlu
dGVyKiBwcmludGVyLCBncG9pbnRlciB1c2VyRGF0YSkKLSAgICB7Ci0gICAgICAgIGlmIChzdHJj
bXAoZ3RrX3ByaW50ZXJfZ2V0X25hbWUocHJpbnRlciksICJQcmludCB0byBGaWxlIikpCi0gICAg
ICAgICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICAgICAgR3RrUHJpbnRlcioqIGZvdW5kUHJpbnRl
ciA9IHN0YXRpY19jYXN0PEd0a1ByaW50ZXIqKj4odXNlckRhdGEpOwotICAgICAgICAqZm91bmRQ
cmludGVyID0gc3RhdGljX2Nhc3Q8R3RrUHJpbnRlcio+KGdfb2JqZWN0X3JlZihwcmludGVyKSk7
Ci0gICAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQotICAgIEd0a1ByaW50ZXIqIGZpbmRQcmlu
dFRvRmlsZVByaW50ZXIoKQotICAgIHsKLSAgICAgICAgR3RrUHJpbnRlciogcHJpbnRlciA9IDA7
Ci0gICAgICAgIGd0a19lbnVtZXJhdGVfcHJpbnRlcnModGVzdFByaW50T3BlcmF0aW9uUHJpbnRQ
cmludGVyLCAmcHJpbnRlciwgMCwgVFJVRSk7Ci0gICAgICAgIHJldHVybiBwcmludGVyOwotICAg
IH0KLQotICAgIHZvaWQgd2FpdFVudGlsUHJpbnRGaW5pc2hlZCgpCi0gICAgewotICAgICAgICBn
X21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgR1JlZlB0cjxXZWJLaXRQ
cmludE9wZXJhdGlvbj4gbV9wcmludE9wZXJhdGlvbjsKLSAgICB1bnNpZ25lZCBpbnQgbV9leHBl
Y3RlZEVycm9yOwotfTsKLQotc3RhdGljIHZvaWQgdGVzdFByaW50T3BlcmF0aW9uUHJpbnQoUHJp
bnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRt
bD48Ym9keT5XZWJLaXRHVEsrIHByaW50aW5nIHRlc3Q8L2JvZHk+PC9odG1sPiIsIDApOwotICAg
IHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgR1JlZlB0cjxHdGtQcmludGVy
PiBwcmludGVyID0gYWRvcHRHUmVmKHRlc3QtPmZpbmRQcmludFRvRmlsZVByaW50ZXIoKSk7Ci0g
ICAgaWYgKCFwcmludGVyKSB7Ci0gICAgICAgIGdfbWVzc2FnZSgiJXMiLCAiQ2Fubm90IHRlc3Qg
V2ViS2l0UHJpbnRPcGVyYXRpb24vcHJpbnQ6IG5vIHN1aXRhYmxlIHByaW50ZXIgZm91bmQiKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEdPd25QdHI8Y2hhcj4gb3V0cHV0RmlsZW5h
bWUoZ19idWlsZF9maWxlbmFtZShrVGVtcERpcmVjdG9yeSwgIndlYmtpdC1wcmludC5wZGYiLCBO
VUxMKSk7Ci0gICAgR1JlZlB0cjxHRmlsZT4gb3V0cHV0RmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVf
bmV3X2Zvcl9wYXRoKG91dHB1dEZpbGVuYW1lLmdldCgpKSk7Ci0gICAgR093blB0cjxjaGFyPiBv
dXRwdXRVUkkoZ19maWxlX2dldF91cmkob3V0cHV0RmlsZS5nZXQoKSkpOwotCi0gICAgR1JlZlB0
cjxHdGtQcmludFNldHRpbmdzPiBwcmludFNldHRpbmdzID0gYWRvcHRHUmVmKGd0a19wcmludF9z
ZXR0aW5nc19uZXcoKSk7Ci0gICAgZ3RrX3ByaW50X3NldHRpbmdzX3NldF9wcmludGVyKHByaW50
U2V0dGluZ3MuZ2V0KCksIGd0a19wcmludGVyX2dldF9uYW1lKHByaW50ZXIuZ2V0KCkpKTsKLSAg
ICBndGtfcHJpbnRfc2V0dGluZ3Nfc2V0KHByaW50U2V0dGluZ3MuZ2V0KCksIEdUS19QUklOVF9T
RVRUSU5HU19PVVRQVVRfVVJJLCBvdXRwdXRVUkkuZ2V0KCkpOwotCi0gICAgd2Via2l0X3ByaW50
X29wZXJhdGlvbl9zZXRfcHJpbnRfc2V0dGluZ3ModGVzdC0+bV9wcmludE9wZXJhdGlvbi5nZXQo
KSwgcHJpbnRTZXR0aW5ncy5nZXQoKSk7Ci0gICAgd2Via2l0X3ByaW50X29wZXJhdGlvbl9wcmlu
dCh0ZXN0LT5tX3ByaW50T3BlcmF0aW9uLmdldCgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxQcmlu
dEZpbmlzaGVkKCk7Ci0KLSAgICBHUmVmUHRyPEdGaWxlSW5mbz4gZmlsZUluZm8gPSBhZG9wdEdS
ZWYoZ19maWxlX3F1ZXJ5X2luZm8ob3V0cHV0RmlsZS5nZXQoKSwgR19GSUxFX0FUVFJJQlVURV9T
VEFOREFSRF9TSVpFICIsIiBHX0ZJTEVfQVRUUklCVVRFX1NUQU5EQVJEX0NPTlRFTlRfVFlQRSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8R0ZpbGVRdWVyeUluZm9GbGFncz4oMCksIDAsIDApKTsKLSAgICBn
X2Fzc2VydChmaWxlSW5mby5nZXQoKSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGdfZmlsZV9pbmZv
X2dldF9zaXplKGZpbGVJbmZvLmdldCgpKSwgPiwgMCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKGdf
ZmlsZV9pbmZvX2dldF9jb250ZW50X3R5cGUoZmlsZUluZm8uZ2V0KCkpLCA9PSwgImFwcGxpY2F0
aW9uL3BkZiIpOwotCi0gICAgZ19maWxlX2RlbGV0ZShvdXRwdXRGaWxlLmdldCgpLCAwLCAwKTsK
LX0KLQotc3RhdGljIHZvaWQgdGVzdFByaW50T3BlcmF0aW9uRXJyb3JzKFByaW50VGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHk+V2Vi
S2l0R1RLKyBwcmludGluZyBlcnJvcnMgdGVzdDwvYm9keT48L2h0bWw+IiwgMCk7Ci0gICAgdGVz
dC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBHUmVmUHRyPEd0a1ByaW50ZXI+IHBy
aW50ZXIgPSBhZG9wdEdSZWYodGVzdC0+ZmluZFByaW50VG9GaWxlUHJpbnRlcigpKTsKLSAgICBp
ZiAoIXByaW50ZXIpIHsKLSAgICAgICAgZ19tZXNzYWdlKCIlcyIsICJDYW5ub3QgdGVzdCBXZWJL
aXRQcmludE9wZXJhdGlvbi9wcmludDogbm8gc3VpdGFibGUgcHJpbnRlciBmb3VuZCIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gR2VuZXJhbCBFcnJvcjogaW52YWxpZCBmaWxl
bmFtZS4KLSAgICB0ZXN0LT5tX2V4cGVjdGVkRXJyb3IgPSBXRUJLSVRfUFJJTlRfRVJST1JfR0VO
RVJBTDsKLSAgICBHUmVmUHRyPEd0a1ByaW50U2V0dGluZ3M+IHByaW50U2V0dGluZ3MgPSBhZG9w
dEdSZWYoZ3RrX3ByaW50X3NldHRpbmdzX25ldygpKTsKLSAgICBndGtfcHJpbnRfc2V0dGluZ3Nf
c2V0X3ByaW50ZXIocHJpbnRTZXR0aW5ncy5nZXQoKSwgZ3RrX3ByaW50ZXJfZ2V0X25hbWUocHJp
bnRlci5nZXQoKSkpOwotICAgIGd0a19wcmludF9zZXR0aW5nc19zZXQocHJpbnRTZXR0aW5ncy5n
ZXQoKSwgR1RLX1BSSU5UX1NFVFRJTkdTX09VVFBVVF9VUkksICJmaWxlOi8vL2Zvby9iYXIiKTsK
LSAgICB3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX3NldF9wcmludF9zZXR0aW5ncyh0ZXN0LT5tX3By
aW50T3BlcmF0aW9uLmdldCgpLCBwcmludFNldHRpbmdzLmdldCgpKTsKLSAgICB3ZWJraXRfcHJp
bnRfb3BlcmF0aW9uX3ByaW50KHRlc3QtPm1fcHJpbnRPcGVyYXRpb24uZ2V0KCkpOwotICAgIHRl
c3QtPndhaXRVbnRpbFByaW50RmluaXNoZWQoKTsKLQotICAgIC8vIFByaW50ZXIgbm90IGZvdW5k
IGVycm9yLgotICAgIHRlc3QtPm1fZXhwZWN0ZWRFcnJvciA9IFdFQktJVF9QUklOVF9FUlJPUl9Q
UklOVEVSX05PVF9GT1VORDsKLSAgICBndGtfcHJpbnRfc2V0dGluZ3Nfc2V0X3ByaW50ZXIocHJp
bnRTZXR0aW5ncy5nZXQoKSwgIlRoZSBmYWtlIFdlYktpdCBwcmludGVyIik7Ci0gICAgd2Via2l0
X3ByaW50X29wZXJhdGlvbl9wcmludCh0ZXN0LT5tX3ByaW50T3BlcmF0aW9uLmdldCgpKTsKLSAg
ICB0ZXN0LT53YWl0VW50aWxQcmludEZpbmlzaGVkKCk7Ci0KLSAgICAvLyBObyBwYWdlcyB0byBw
cmludDogcHJpbnQgZXZlbiBwYWdlcyBmb3IgYSBzaW5nbGUgcGFnZSBkb2N1bWVudC4KLSAgICB0
ZXN0LT5tX2V4cGVjdGVkRXJyb3IgPSBXRUJLSVRfUFJJTlRfRVJST1JfSU5WQUxJRF9QQUdFX1JB
TkdFOwotICAgIGd0a19wcmludF9zZXR0aW5nc19zZXRfcHJpbnRlcihwcmludFNldHRpbmdzLmdl
dCgpLCBndGtfcHJpbnRlcl9nZXRfbmFtZShwcmludGVyLmdldCgpKSk7Ci0gICAgZ3RrX3ByaW50
X3NldHRpbmdzX3NldF9wYWdlX3NldChwcmludFNldHRpbmdzLmdldCgpLCBHVEtfUEFHRV9TRVRf
RVZFTik7Ci0gICAgd2Via2l0X3ByaW50X29wZXJhdGlvbl9wcmludCh0ZXN0LT5tX3ByaW50T3Bl
cmF0aW9uLmdldCgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxQcmludEZpbmlzaGVkKCk7Ci19Ci0j
ZW5kaWYgLy8gSEFWRV9HVEtfVU5JWF9QUklOVElORwotCi12b2lkIGJlZm9yZUFsbCgpCi17Ci0g
ICAga1RlbXBEaXJlY3RvcnkgPSBnX2Rpcl9tYWtlX3RtcCgiV2ViS2l0MlRlc3RzLVhYWFhYWCIs
IDApOwotICAgIGdfYXNzZXJ0KGtUZW1wRGlyZWN0b3J5KTsKLQotICAgIFdlYlZpZXdUZXN0Ojph
ZGQoIldlYktpdFByaW50T3BlcmF0aW9uIiwgInByaW50aW5nLXNldHRpbmdzIiwgdGVzdFByaW50
T3BlcmF0aW9uUHJpbnRTZXR0aW5ncyk7Ci0gICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2Vi
VmlldyIsICJwcmludCIsIHRlc3RXZWJWaWV3UHJpbnQpOwotI2lmZGVmIEhBVkVfR1RLX1VOSVhf
UFJJTlRJTkcKLSAgICBQcmludFRlc3Q6OmFkZCgiV2ViS2l0UHJpbnRPcGVyYXRpb24iLCAicHJp
bnQiLCB0ZXN0UHJpbnRPcGVyYXRpb25QcmludCk7Ci0gICAgUHJpbnRUZXN0OjphZGQoIldlYktp
dFByaW50T3BlcmF0aW9uIiwgInByaW50LWVycm9ycyIsIHRlc3RQcmludE9wZXJhdGlvbkVycm9y
cyk7Ci0jZW5kaWYKLX0KLQotdm9pZCBhZnRlckFsbCgpCi17Ci0gICAgZ19ybWRpcihrVGVtcERp
cmVjdG9yeSk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9UZXN0UmVzb3VyY2VzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL1Rlc3RSZXNvdXJjZXMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA1N2YxODJjLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL1Rlc3RSZXNvdXJjZXMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzg5ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotCi0jaW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5oIgotI2luY2x1ZGUgIldlYlZpZXdUZXN0
LmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQ
dHIuaD4KLQotc3RhdGljIFdlYktpdFRlc3RTZXJ2ZXIqIGtTZXJ2ZXI7Ci0KLXN0YXRpYyBjb25z
dCBjaGFyKiBrSW5kZXhIdG1sID0KLSAgICAiPGh0bWw+PGhlYWQ+IgotICAgICIgPGxpbmsgcmVs
PSdzdHlsZXNoZWV0JyBocmVmPScvc3R5bGUuY3NzJyB0eXBlPSd0ZXh0L2Nzcyc+IgotICAgICIg
PHNjcmlwdCBsYW5ndWFnZT0namF2YXNjcmlwdCcgc3JjPScvamF2YXNjcmlwdC5qcyc+PC9zY3Jp
cHQ+IgotICAgICI8L2hlYWQ+PGJvZHk+V2ViS2l0R1RLKyByZXNvdXJjZXMgdGVzdDwvYm9keT48
L2h0bWw+IjsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGtTdHlsZUNTUyA9Ci0gICAgImJvZHkgeyIK
LSAgICAiICAgIG1hcmdpbjogMHB4OyIKLSAgICAiICAgIHBhZGRpbmc6IDBweDsiCi0gICAgIiAg
ICBmb250LWZhbWlseTogc2Fucy1zZXJpZjsiCi0gICAgIiAgICBiYWNrZ3JvdW5kOiB1cmwoL2Js
YW5rLmljbykgMCAwIG5vLXJlcGVhdDsiCi0gICAgIiAgICBjb2xvcjogYmxhY2s7IgotICAgICJ9
IjsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGtKYXZhc2NyaXB0ID0gImZ1bmN0aW9uIGZvbyAoKSB7
IHZhciBhID0gMTsgfSI7Ci0KLWNsYXNzIFJlc291cmNlc1Rlc3Q6IHB1YmxpYyBXZWJWaWV3VGVz
dCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShSZXNvdXJjZXNUZXN0KTsK
LQotICAgIHN0YXRpYyB2b2lkIHJlc291cmNlU2VudFJlcXVlc3RDYWxsYmFjayhXZWJLaXRXZWJS
ZXNvdXJjZSogcmVzb3VyY2UsIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QsIFdlYktpdFVSSVJl
c3BvbnNlKiByZWRpcmVjdFJlc3BvbnNlLCBSZXNvdXJjZXNUZXN0KiB0ZXN0KQotICAgIHsKLSAg
ICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVD
VChyZXF1ZXN0KSk7Ci0gICAgICAgIGlmIChyZWRpcmVjdFJlc3BvbnNlKQotICAgICAgICAgICAg
dGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChyZWRp
cmVjdFJlc3BvbnNlKSk7Ci0gICAgICAgIHRlc3QtPnJlc291cmNlU2VudFJlcXVlc3QocmVzb3Vy
Y2UsIHJlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lk
IHJlc291cmNlUmVjZWl2ZWRSZXNwb25zZUNhbGxiYWNrKFdlYktpdFdlYlJlc291cmNlKiByZXNv
dXJjZSwgR1BhcmFtU3BlYyosIFJlc291cmNlc1Rlc3QqIHRlc3QpCi0gICAgewotICAgICAgICBn
X2Fzc2VydCh3ZWJraXRfd2ViX3Jlc291cmNlX2dldF9yZXNwb25zZShyZXNvdXJjZSkpOwotICAg
ICAgICB0ZXN0LT5yZXNvdXJjZVJlY2VpdmVkUmVzcG9uc2UocmVzb3VyY2UpOwotICAgIH0KLQot
ICAgIHN0YXRpYyB2b2lkIHJlc291cmNlUmVjZWl2ZWREYXRhQ2FsbGJhY2soV2ViS2l0V2ViUmVz
b3VyY2UqIHJlc291cmNlLCBndWludDY0IGJ5dGVzUmVjZWl2ZWQsIFJlc291cmNlc1Rlc3QqIHRl
c3QpCi0gICAgewotICAgICAgICB0ZXN0LT5yZXNvdXJjZVJlY2VpdmVkRGF0YShyZXNvdXJjZSwg
Ynl0ZXNSZWNlaXZlZCk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgcmVzb3VyY2VGaW5pc2hl
ZENhbGxiYWNrKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgUmVzb3VyY2VzVGVzdCogdGVz
dCkKLSAgICB7Ci0gICAgICAgIHRlc3QtPnJlc291cmNlRmluaXNoZWQocmVzb3VyY2UpOwotICAg
IH0KLQotICAgIHN0YXRpYyB2b2lkIHJlc291cmNlRmFpbGVkQ2FsbGJhY2soV2ViS2l0V2ViUmVz
b3VyY2UqIHJlc291cmNlLCBHRXJyb3IqIGVycm9yLCBSZXNvdXJjZXNUZXN0KiB0ZXN0KQotICAg
IHsKLSAgICAgICAgZ19hc3NlcnQoZXJyb3IpOwotICAgICAgICB0ZXN0LT5yZXNvdXJjZUZhaWxl
ZChyZXNvdXJjZSwgZXJyb3IpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHJlc291cmNlTG9h
ZFN0YXJ0ZWRDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRXZWJSZXNvdXJj
ZSogcmVzb3VyY2UsIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QsIFJlc291cmNlc1Rlc3QqIHRl
c3QpCi0gICAgewotICAgICAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZp
bmlzaGVzKEdfT0JKRUNUKHJlc291cmNlKSk7Ci0gICAgICAgIHRlc3QtPmFzc2VydE9iamVjdElz
RGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QocmVxdWVzdCkpOwotCi0gICAgICAgIC8v
IElnbm9yZSBmYXZpY29ucy4KLSAgICAgICAgaWYgKGdfc3RyX2hhc19zdWZmaXgod2Via2l0X3Vy
aV9yZXF1ZXN0X2dldF91cmkocmVxdWVzdCksICJmYXZpY29uLmljbyIpKQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIHRlc3QtPnJlc291cmNlTG9hZFN0YXJ0ZWQocmVzb3VyY2UsIHJl
cXVlc3QpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KHJlc291cmNlLCAic2VudC1yZXF1ZXN0
IiwgR19DQUxMQkFDSyhyZXNvdXJjZVNlbnRSZXF1ZXN0Q2FsbGJhY2spLCB0ZXN0KTsKLSAgICAg
ICAgZ19zaWduYWxfY29ubmVjdChyZXNvdXJjZSwgIm5vdGlmeTo6cmVzcG9uc2UiLCBHX0NBTExC
QUNLKHJlc291cmNlUmVjZWl2ZWRSZXNwb25zZUNhbGxiYWNrKSwgdGVzdCk7Ci0gICAgICAgIGdf
c2lnbmFsX2Nvbm5lY3QocmVzb3VyY2UsICJyZWNlaXZlZC1kYXRhIiwgR19DQUxMQkFDSyhyZXNv
dXJjZVJlY2VpdmVkRGF0YUNhbGxiYWNrKSwgdGVzdCk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5l
Y3QocmVzb3VyY2UsICJmaW5pc2hlZCIsIEdfQ0FMTEJBQ0socmVzb3VyY2VGaW5pc2hlZENhbGxi
YWNrKSwgdGVzdCk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QocmVzb3VyY2UsICJmYWlsZWQi
LCBHX0NBTExCQUNLKHJlc291cmNlRmFpbGVkQ2FsbGJhY2spLCB0ZXN0KTsKLSAgICB9Ci0KLSAg
ICB2b2lkIGNsZWFyU3VicmVzb3VyY2VzKCkKLSAgICB7Ci0gICAgICAgIGdfbGlzdF9mcmVlX2Z1
bGwobV9zdWJyZXNvdXJjZXMsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGdfb2Jq
ZWN0X3VucmVmKSk7Ci0gICAgICAgIG1fc3VicmVzb3VyY2VzID0gMDsKLSAgICB9Ci0KLSAgICBS
ZXNvdXJjZXNUZXN0KCkKLSAgICAgICAgOiBXZWJWaWV3VGVzdCgpCi0gICAgICAgICwgbV9yZXNv
dXJjZXNMb2FkZWQoMCkKLSAgICAgICAgLCBtX3Jlc291cmNlc1RvTG9hZCgwKQotICAgICAgICAs
IG1fcmVzb3VyY2VEYXRhU2l6ZSgwKQotICAgICAgICAsIG1fc3VicmVzb3VyY2VzKDApCi0gICAg
ewotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgInJlc291cmNlLWxvYWQtc3Rh
cnRlZCIsIEdfQ0FMTEJBQ0socmVzb3VyY2VMb2FkU3RhcnRlZENhbGxiYWNrKSwgdGhpcyk7Ci0g
ICAgfQotCi0gICAgflJlc291cmNlc1Rlc3QoKQotICAgIHsKLSAgICAgICAgY2xlYXJTdWJyZXNv
dXJjZXMoKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcmVzb3VyY2VMb2FkU3RhcnRlZChX
ZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QpCi0g
ICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCByZXNvdXJjZVNlbnRSZXF1ZXN0KFdlYktp
dFdlYlJlc291cmNlKiByZXNvdXJjZSwgV2ViS2l0VVJJUmVxdWVzdCogcmVxdWVzdCwgV2ViS2l0
VVJJUmVzcG9uc2UqIHJlZGlyZWN0UmVzcG9uc2UpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1
YWwgdm9pZCByZXNvdXJjZVJlY2VpdmVkUmVzcG9uc2UoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291
cmNlKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcmVzb3VyY2VSZWNlaXZlZERh
dGEoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBndWludDY0IGJ5dGVzUmVjZWl2ZWQpCi0g
ICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCByZXNvdXJjZUZpbmlzaGVkKFdlYktpdFdl
YlJlc291cmNlKiByZXNvdXJjZSkKLSAgICB7Ci0gICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rp
c2Nvbm5lY3RfbWF0Y2hlZChyZXNvdXJjZSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwg
MCwgdGhpcyk7Ci0gICAgICAgIGlmICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2Uo
bV93ZWJWaWV3KSAhPSByZXNvdXJjZSkKLSAgICAgICAgICAgIG1fc3VicmVzb3VyY2VzID0gZ19s
aXN0X3ByZXBlbmQobV9zdWJyZXNvdXJjZXMsIGdfb2JqZWN0X3JlZihyZXNvdXJjZSkpOwotICAg
ICAgICBpZiAoKyttX3Jlc291cmNlc0xvYWRlZCA9PSBtX3Jlc291cmNlc1RvTG9hZCkKLSAgICAg
ICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgdmlydHVh
bCB2b2lkIHJlc291cmNlRmFpbGVkKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgR0Vycm9y
KiBlcnJvcikKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0gICAgfQot
Ci0gICAgdm9pZCB3YWl0VW50aWxSZXNvdXJjZXNMb2FkZWQoc2l6ZV90IHJlc291cmNlc0NvdW50
KQotICAgIHsKLSAgICAgICAgbV9yZXNvdXJjZXNMb2FkZWQgPSAwOwotICAgICAgICBtX3Jlc291
cmNlc1RvTG9hZCA9IHJlc291cmNlc0NvdW50OwotICAgICAgICBjbGVhclN1YnJlc291cmNlcygp
OwotICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgR0xp
c3QqIHN1YnJlc291cmNlcygpCi0gICAgewotICAgICAgICByZXR1cm4gbV9zdWJyZXNvdXJjZXM7
Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgcmVzb3VyY2VHZXREYXRhQ2FsbGJhY2soR09iamVj
dCogb2JqZWN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEpCi0gICAg
ewotICAgICAgICBzaXplX3QgZGF0YVNpemU7Ci0gICAgICAgIEdPd25QdHI8R0Vycm9yPiBlcnJv
cjsKLSAgICAgICAgdW5zaWduZWQgY2hhciogZGF0YSA9IHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0
X2RhdGFfZmluaXNoKFdFQktJVF9XRUJfUkVTT1VSQ0Uob2JqZWN0KSwgcmVzdWx0LCAmZGF0YVNp
emUsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7Ci0g
ICAgICAgIGdfYXNzZXJ0KGRhdGEpOwotICAgICAgICBnX2Fzc2VydF9jbXBpbnQoZGF0YVNpemUs
ID4sIDApOwotCi0gICAgICAgIFJlc291cmNlc1Rlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxSZXNv
dXJjZXNUZXN0Kj4odXNlckRhdGEpOwotICAgICAgICB0ZXN0LT5tX3Jlc291cmNlRGF0YS5zZXQo
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZGF0YSkpOwotICAgICAgICB0ZXN0LT5tX3Jlc291cmNl
RGF0YVNpemUgPSBkYXRhU2l6ZTsKLSAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21h
aW5Mb29wKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNoZWNrUmVzb3VyY2VEYXRhKFdlYktpdFdlYlJl
c291cmNlKiByZXNvdXJjZSkKLSAgICB7Ci0gICAgICAgIG1fcmVzb3VyY2VEYXRhU2l6ZSA9IDA7
Ci0gICAgICAgIHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X2RhdGEocmVzb3VyY2UsIDAsIHJlc291
cmNlR2V0RGF0YUNhbGxiYWNrLCB0aGlzKTsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFp
bkxvb3ApOwotCi0gICAgICAgIGNvbnN0IGNoYXIqIHVyaSA9IHdlYmtpdF93ZWJfcmVzb3VyY2Vf
Z2V0X3VyaShyZXNvdXJjZSk7Ci0gICAgICAgIGlmICh1cmkgPT0ga1NlcnZlci0+Z2V0VVJJRm9y
UGF0aCgiLyIpKSB7Ci0gICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQobV9yZXNvdXJjZURhdGFT
aXplLCA9PSwgc3RybGVuKGtJbmRleEh0bWwpKTsKLSAgICAgICAgICAgIGdfYXNzZXJ0KCFzdHJu
Y21wKG1fcmVzb3VyY2VEYXRhLmdldCgpLCBrSW5kZXhIdG1sLCBtX3Jlc291cmNlRGF0YVNpemUp
KTsKLSAgICAgICAgfSBlbHNlIGlmICh1cmkgPT0ga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3N0
eWxlLmNzcyIpKSB7Ci0gICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQobV9yZXNvdXJjZURhdGFT
aXplLCA9PSwgc3RybGVuKGtTdHlsZUNTUykpOwotICAgICAgICAgICAgZ19hc3NlcnQoIXN0cm5j
bXAobV9yZXNvdXJjZURhdGEuZ2V0KCksIGtTdHlsZUNTUywgbV9yZXNvdXJjZURhdGFTaXplKSk7
Ci0gICAgICAgIH0gZWxzZSBpZiAodXJpID09IGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9qYXZh
c2NyaXB0LmpzIikpIHsKLSAgICAgICAgICAgIGdfYXNzZXJ0X2NtcGludChtX3Jlc291cmNlRGF0
YVNpemUsID09LCBzdHJsZW4oa0phdmFzY3JpcHQpKTsKLSAgICAgICAgICAgIGdfYXNzZXJ0KCFz
dHJuY21wKG1fcmVzb3VyY2VEYXRhLmdldCgpLCBrSmF2YXNjcmlwdCwgbV9yZXNvdXJjZURhdGFT
aXplKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQo
KTsKLSAgICAgICAgbV9yZXNvdXJjZURhdGEuY2xlYXIoKTsKLSAgICB9Ci0KLSAgICBzaXplX3Qg
bV9yZXNvdXJjZXNMb2FkZWQ7Ci0gICAgc2l6ZV90IG1fcmVzb3VyY2VzVG9Mb2FkOwotICAgIEdP
d25QdHI8Y2hhcj4gbV9yZXNvdXJjZURhdGE7Ci0gICAgc2l6ZV90IG1fcmVzb3VyY2VEYXRhU2l6
ZTsKLSAgICBHTGlzdCogbV9zdWJyZXNvdXJjZXM7Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0V2Vi
Vmlld1Jlc291cmNlcyhSZXNvdXJjZXNUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAg
IC8vIE5vdGhpbmcgbG9hZGVkIHlldCwgdGhlcmUgc2hvdWxuZCd0IGJlIHJlc291cmNlcy4KLSAg
ICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2dldF9tYWluX3Jlc291cmNlKHRlc3QtPm1fd2Vi
VmlldykpOwotICAgIGdfYXNzZXJ0KCF0ZXN0LT5zdWJyZXNvdXJjZXMoKSk7Ci0KLSAgICAvLyBM
b2FkIHNpbXBsZSBwYWdlIHdpdGhvdXQgc3VicmVzb3VyY2VzLgotICAgIHRlc3QtPmxvYWRIdG1s
KCI8aHRtbD48Ym9keT5UZXN0aW5nIFdlYktpdEdUSys8L2JvZHk+PC9odG1sPiIsIDApOwotICAg
IHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIFdlYktpdFdlYlJlc291cmNlKiBy
ZXNvdXJjZSA9IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9yZXNvdXJjZSh0ZXN0LT5tX3dlYlZp
ZXcpOwotICAgIGdfYXNzZXJ0KHJlc291cmNlKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0
X3dlYl92aWV3X2dldF91cmkodGVzdC0+bV93ZWJWaWV3KSwgPT0sIHdlYmtpdF93ZWJfcmVzb3Vy
Y2VfZ2V0X3VyaShyZXNvdXJjZSkpOwotICAgIGdfYXNzZXJ0KCF0ZXN0LT5zdWJyZXNvdXJjZXMo
KSk7Ci0KLSAgICAvLyBMb2FkIHNpbXBsZSBwYWdlIHdpdGggc3VicmVzb3VyY2VzLgotICAgIHRl
c3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7Ci0gICAgdGVz
dC0+d2FpdFVudGlsUmVzb3VyY2VzTG9hZGVkKDQpOwotCi0gICAgcmVzb3VyY2UgPSB3ZWJraXRf
d2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2UodGVzdC0+bV93ZWJWaWV3KTsKLSAgICBnX2Fzc2Vy
dChyZXNvdXJjZSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRfdXJp
KHRlc3QtPm1fd2ViVmlldyksID09LCB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF91cmkocmVzb3Vy
Y2UpKTsKLSAgICBHTGlzdCogc3VicmVzb3VyY2VzID0gdGVzdC0+c3VicmVzb3VyY2VzKCk7Ci0g
ICAgZ19hc3NlcnQoc3VicmVzb3VyY2VzKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZ19saXN0X2xl
bmd0aChzdWJyZXNvdXJjZXMpLCA9PSwgMyk7Ci0KLSNpZiAwCi0gICAgLy8gTG9hZCB0aGUgc2Ft
ZSBVUkkgYWdhaW4uCi0gICAgLy8gRklYTUU6IHdlIG5lZWQgYSB3b3JrYXJvdW5kIGZvciBidWcg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NTEwLgotICAgIHRlc3Qt
PmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+
d2FpdFVudGlsUmVzb3VyY2VzTG9hZGVkKDQpOwotI2VuZGlmCi0KLSAgICAvLyBSZWxvYWQuCi0g
ICAgd2Via2l0X3dlYl92aWV3X3JlbG9hZF9ieXBhc3NfY2FjaGUodGVzdC0+bV93ZWJWaWV3KTsK
LSAgICB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZXNMb2FkZWQoNCk7Ci19Ci0KLWNsYXNzIFNpbmds
ZVJlc291cmNlTG9hZFRlc3Q6IHB1YmxpYyBSZXNvdXJjZXNUZXN0IHsKLXB1YmxpYzoKLSAgICBN
QUtFX0dMSUJfVEVTVF9GSVhUVVJFKFNpbmdsZVJlc291cmNlTG9hZFRlc3QpOwotCi0gICAgZW51
bSBMb2FkRXZlbnRzIHsKLSAgICAgICAgU3RhcnRlZCwKLSAgICAgICAgU2VudFJlcXVlc3QsCi0g
ICAgICAgIFJlZGlyZWN0ZWQsCi0gICAgICAgIFJlY2VpdmVkUmVzcG9uc2UsCi0gICAgICAgIFJl
Y2VpdmVkRGF0YSwKLSAgICAgICAgRmluaXNoZWQsCi0gICAgICAgIEZhaWxlZAotICAgIH07Ci0K
LSAgICBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0KCkKLSAgICAgICAgOiBSZXNvdXJjZXNUZXN0KCkK
LSAgICAgICAgLCBtX3Jlc291cmNlRGF0YVJlY2VpdmVkKDApCi0gICAgewotICAgICAgICAgbV9y
ZXNvdXJjZXNUb0xvYWQgPSAyOwotICAgIH0KLQotICAgIHZvaWQgcmVzb3VyY2VMb2FkU3RhcnRl
ZChXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3Qp
Ci0gICAgewotICAgICAgICBpZiAocmVzb3VyY2UgPT0gd2Via2l0X3dlYl92aWV3X2dldF9tYWlu
X3Jlc291cmNlKG1fd2ViVmlldykpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9y
ZXNvdXJjZURhdGFSZWNlaXZlZCA9IDA7Ci0gICAgICAgIG1fcmVzb3VyY2UgPSByZXNvdXJjZTsK
LSAgICAgICAgbV9sb2FkRXZlbnRzLmFwcGVuZChTdGFydGVkKTsKLSAgICB9Ci0KLSAgICB2b2lk
IHJlc291cmNlU2VudFJlcXVlc3QoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBXZWJLaXRV
UklSZXF1ZXN0KiByZXF1ZXN0LCBXZWJLaXRVUklSZXNwb25zZSogcmVkaXJlY3RSZXNwb25zZSkK
LSAgICB7Ci0gICAgICAgIGlmIChyZXNvdXJjZSAhPSBtX3Jlc291cmNlKQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIGlmIChyZWRpcmVjdFJlc3BvbnNlKQotICAgICAgICAgICAgbV9s
b2FkRXZlbnRzLmFwcGVuZChSZWRpcmVjdGVkKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
bV9sb2FkRXZlbnRzLmFwcGVuZChTZW50UmVxdWVzdCk7Ci0gICAgfQotCi0gICAgdm9pZCByZXNv
dXJjZVJlY2VpdmVkUmVzcG9uc2UoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlKQotICAgIHsK
LSAgICAgICAgaWYgKHJlc291cmNlICE9IG1fcmVzb3VyY2UpCi0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgbV9sb2FkRXZlbnRzLmFwcGVuZChSZWNlaXZlZFJlc3BvbnNlKTsKLSAgICB9
Ci0KLSAgICB2b2lkIHJlc291cmNlUmVjZWl2ZWREYXRhKFdlYktpdFdlYlJlc291cmNlKiByZXNv
dXJjZSwgZ3VpbnQ2NCBieXRlc1JlY2VpdmVkKQotICAgIHsKLSAgICAgICAgaWYgKHJlc291cmNl
ICE9IG1fcmVzb3VyY2UpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9yZXNvdXJj
ZURhdGFSZWNlaXZlZCArPSBieXRlc1JlY2VpdmVkOwotICAgICAgICBpZiAoIW1fbG9hZEV2ZW50
cy5jb250YWlucyhSZWNlaXZlZERhdGEpKQotICAgICAgICAgICAgbV9sb2FkRXZlbnRzLmFwcGVu
ZChSZWNlaXZlZERhdGEpOwotICAgIH0KLQotICAgIHZvaWQgcmVzb3VyY2VGaW5pc2hlZChXZWJL
aXRXZWJSZXNvdXJjZSogcmVzb3VyY2UpCi0gICAgewotICAgICAgICBpZiAocmVzb3VyY2UgIT0g
bV9yZXNvdXJjZSkgewotICAgICAgICAgICAgUmVzb3VyY2VzVGVzdDo6cmVzb3VyY2VGaW5pc2hl
ZChyZXNvdXJjZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoIW1fbG9hZEV2ZW50cy5jb250YWlucyhGYWlsZWQpKSB7Ci0gICAgICAgICAgICBXZWJLaXRV
UklSZXNwb25zZSogcmVzcG9uc2UgPSB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF9yZXNwb25zZSht
X3Jlc291cmNlLmdldCgpKTsKLSAgICAgICAgICAgIGdfYXNzZXJ0KHJlc3BvbnNlKTsKLSAgICAg
ICAgICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF9jb250ZW50X2xl
bmd0aChyZXNwb25zZSksID09LCBtX3Jlc291cmNlRGF0YVJlY2VpdmVkKTsKLSAgICAgICAgfQot
ICAgICAgICBtX2xvYWRFdmVudHMuYXBwZW5kKEZpbmlzaGVkKTsKLSAgICAgICAgUmVzb3VyY2Vz
VGVzdDo6cmVzb3VyY2VGaW5pc2hlZChyZXNvdXJjZSk7Ci0gICAgfQotCi0gICAgdm9pZCByZXNv
dXJjZUZhaWxlZChXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIEdFcnJvciogZXJyb3IpCi0g
ICAgewotICAgICAgICBpZiAocmVzb3VyY2UgPT0gbV9yZXNvdXJjZSkKLSAgICAgICAgICAgIG1f
bG9hZEV2ZW50cy5hcHBlbmQoRmFpbGVkKTsKLSAgICB9Ci0KLSAgICB2b2lkIHdhaXRVbnRpbFJl
c291cmNlTG9hZEZpbmlzaGVkKCkKLSAgICB7Ci0gICAgICAgIG1fcmVzb3VyY2UgPSAwOwotICAg
ICAgICBtX3Jlc291cmNlc0xvYWRlZCA9IDA7Ci0gICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21h
aW5Mb29wKTsKLSAgICB9Ci0KLSAgICBXZWJLaXRVUklSZXNwb25zZSogd2FpdFVudGlsUmVzb3Vy
Y2VMb2FkRmluaXNoZWRBbmRSZXR1cm5VUklSZXNwb25zZSgpCi0gICAgewotICAgICAgICB3YWl0
VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZCgpOwotICAgICAgICBnX2Fzc2VydChtX3Jlc291cmNl
KTsKLSAgICAgICAgcmV0dXJuIHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3Jlc3BvbnNlKG1fcmVz
b3VyY2UuZ2V0KCkpOwotICAgIH0KLQotICAgIEdSZWZQdHI8V2ViS2l0V2ViUmVzb3VyY2U+IG1f
cmVzb3VyY2U7Ci0gICAgVmVjdG9yPExvYWRFdmVudHM+IG1fbG9hZEV2ZW50czsKLSAgICBndWlu
dDY0IG1fcmVzb3VyY2VEYXRhUmVjZWl2ZWQ7Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViUmVz
b3VyY2VMb2FkaW5nKFNpbmdsZVJlc291cmNlTG9hZFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIp
Ci17Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvamF2YXNjcmlw
dC5odG1sIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hl
ZCgpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fcmVzb3VyY2UpOwotICAgIFZlY3RvcjxTaW5nbGVS
ZXNvdXJjZUxvYWRUZXN0OjpMb2FkRXZlbnRzPiYgZXZlbnRzID0gdGVzdC0+bV9sb2FkRXZlbnRz
OwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgNSk7Ci0gICAgZ19hc3Nl
cnRfY21waW50KGV2ZW50c1swXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlN0YXJ0ZWQp
OwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRU
ZXN0OjpTZW50UmVxdWVzdCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIFNp
bmdsZVJlc291cmNlTG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOwotICAgIGdfYXNzZXJ0X2Nt
cGludChldmVudHNbM10sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpSZWNlaXZlZERhdGEp
OwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbNF0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRU
ZXN0OjpGaW5pc2hlZCk7Ci0gICAgZXZlbnRzLmNsZWFyKCk7Ci0KLSAgICB0ZXN0LT5sb2FkVVJJ
KGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9yZWRpcmVjdGVkLWNzcy5odG1sIikuZGF0YSgpKTsK
LSAgICB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZCgpOwotICAgIGdfYXNzZXJ0
KHRlc3QtPm1fcmVzb3VyY2UpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9
PSwgNik7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIFNpbmdsZVJlc291cmNl
TG9hZFRlc3Q6OlN0YXJ0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBT
aW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpTZW50UmVxdWVzdCk7Ci0gICAgZ19hc3NlcnRfY21waW50
KGV2ZW50c1syXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlJlZGlyZWN0ZWQpOwotICAg
IGdfYXNzZXJ0X2NtcGludChldmVudHNbM10sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpS
ZWNlaXZlZFJlc3BvbnNlKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzRdLCA9PSwgU2lu
Z2xlUmVzb3VyY2VMb2FkVGVzdDo6UmVjZWl2ZWREYXRhKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
ZXZlbnRzWzVdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6RmluaXNoZWQpOwotICAgIGV2
ZW50cy5jbGVhcigpOwotCi0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRo
KCIvaW52YWxpZC1jc3MuaHRtbCIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsUmVzb3Vy
Y2VMb2FkRmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX3Jlc291cmNlKTsKLSAgICBn
X2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDQpOwotICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHNbMF0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpTdGFydGVkKTsKLSAgICBn
X2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6U2Vu
dFJlcXVlc3QpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBTaW5nbGVSZXNv
dXJjZUxvYWRUZXN0OjpGYWlsZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbM10sID09
LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpGaW5pc2hlZCk7Ci0gICAgZXZlbnRzLmNsZWFyKCk7
Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJSZXNvdXJjZVJlc3BvbnNlKFNpbmdsZVJlc291cmNl
TG9hZFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgLy8gTm8gY2FjaGVkIHJlc291
cmNlOiBGaXJzdCBsb2FkLgotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0
aCgiL2phdmFzY3JpcHQuaHRtbCIpLmRhdGEoKSk7Ci0gICAgV2ViS2l0VVJJUmVzcG9uc2UqIHJl
c3BvbnNlID0gdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWRBbmRSZXR1cm5VUklS
ZXNwb25zZSgpOwotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF9z
dGF0dXNfY29kZShyZXNwb25zZSksID09LCBTT1VQX1NUQVRVU19PSyk7Ci0KLSAgICAvLyBObyBj
YWNoZWQgcmVzb3VyY2U6IFNlY29uZCBsb2FkLgotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+
Z2V0VVJJRm9yUGF0aCgiL2phdmFzY3JpcHQuaHRtbCIpLmRhdGEoKSk7Ci0gICAgcmVzcG9uc2Ug
PSB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZEFuZFJldHVyblVSSVJlc3BvbnNl
KCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0X3N0YXR1c19j
b2RlKHJlc3BvbnNlKSwgPT0sIFNPVVBfU1RBVFVTX09LKTsKLQotICAgIC8vIE5vIGNhY2hlZCBy
ZXNvdXJjZTogUmVsb2FkLgotICAgIHdlYmtpdF93ZWJfdmlld19yZWxvYWQodGVzdC0+bV93ZWJW
aWV3KTsKLSAgICByZXNwb25zZSA9IHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlzaGVk
QW5kUmV0dXJuVVJJUmVzcG9uc2UoKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3VyaV9y
ZXNwb25zZV9nZXRfc3RhdHVzX2NvZGUocmVzcG9uc2UpLCA9PSwgU09VUF9TVEFUVVNfT0spOwot
Ci0gICAgLy8gQ2FjaGVkIHJlc291cmNlOiBGaXJzdCBsb2FkLgotICAgIHRlc3QtPmxvYWRVUkko
a1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2ltYWdlLmh0bWwiKS5kYXRhKCkpOwotICAgIHJlc3Bv
bnNlID0gdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWRBbmRSZXR1cm5VUklSZXNw
b25zZSgpOwotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF9zdGF0
dXNfY29kZShyZXNwb25zZSksID09LCBTT1VQX1NUQVRVU19PSyk7Ci0KLSAgICAvLyBDYWNoZWQg
cmVzb3VyY2U6IFNlY29uZCBsb2FkLgotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJ
Rm9yUGF0aCgiL2ltYWdlLmh0bWwiKS5kYXRhKCkpOwotICAgIHJlc3BvbnNlID0gdGVzdC0+d2Fp
dFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWRBbmRSZXR1cm5VUklSZXNwb25zZSgpOwotICAgIGdf
YXNzZXJ0X2NtcGludCh3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF9zdGF0dXNfY29kZShyZXNwb25z
ZSksID09LCBTT1VQX1NUQVRVU19PSyk7Ci0KLSAgICAvLyBDYWNoZWQgcmVzb3VyY2U6IFJlbG9h
ZC4KLSAgICB3ZWJraXRfd2ViX3ZpZXdfcmVsb2FkKHRlc3QtPm1fd2ViVmlldyk7Ci0gICAgcmVz
cG9uc2UgPSB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZEFuZFJldHVyblVSSVJl
c3BvbnNlKCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0X3N0
YXR1c19jb2RlKHJlc3BvbnNlKSwgPT0sIFNPVVBfU1RBVFVTX05PVF9NT0RJRklFRCk7Ci19Ci0K
LXN0YXRpYyB2b2lkIHRlc3RXZWJSZXNvdXJjZU1pbWVUeXBlKFNpbmdsZVJlc291cmNlTG9hZFRl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5n
ZXRVUklGb3JQYXRoKCIvamF2YXNjcmlwdC5odG1sIikuZGF0YSgpKTsKLSAgICBXZWJLaXRVUklS
ZXNwb25zZSogcmVzcG9uc2UgPSB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZEFu
ZFJldHVyblVSSVJlc3BvbnNlKCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF91cmlfcmVz
cG9uc2VfZ2V0X21pbWVfdHlwZShyZXNwb25zZSksID09LCAidGV4dC9qYXZhc2NyaXB0Iik7Ci0K
LSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbWFnZS5odG1sIiku
ZGF0YSgpKTsKLSAgICByZXNwb25zZSA9IHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlz
aGVkQW5kUmV0dXJuVVJJUmVzcG9uc2UoKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3Vy
aV9yZXNwb25zZV9nZXRfbWltZV90eXBlKHJlc3BvbnNlKSwgPT0sICJpbWFnZS92bmQubWljcm9z
b2Z0Lmljb24iKTsKLQotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgi
L3JlZGlyZWN0ZWQtY3NzLmh0bWwiKS5kYXRhKCkpOwotICAgIHJlc3BvbnNlID0gdGVzdC0+d2Fp
dFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWRBbmRSZXR1cm5VUklSZXNwb25zZSgpOwotICAgIGdf
YXNzZXJ0X2NtcHN0cih3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF9taW1lX3R5cGUocmVzcG9uc2Up
LCA9PSwgInRleHQvY3NzIik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJSZXNvdXJjZVN1Z2dl
c3RlZEZpbGVuYW1lKFNpbmdsZVJlc291cmNlTG9hZFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIp
Ci17Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvamF2YXNjcmlw
dC5odG1sIikuZGF0YSgpKTsKLSAgICBXZWJLaXRVUklSZXNwb25zZSogcmVzcG9uc2UgPSB0ZXN0
LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZEFuZFJldHVyblVSSVJlc3BvbnNlKCk7Ci0g
ICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0X3N1Z2dlc3RlZF9maWxl
bmFtZShyZXNwb25zZSksID09LCAiSmF2YVNjcmlwdC5qcyIpOwotCi0gICAgdGVzdC0+bG9hZFVS
SShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvaW1hZ2UuaHRtbCIpLmRhdGEoKSk7Ci0gICAgcmVz
cG9uc2UgPSB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZEFuZFJldHVyblVSSVJl
c3BvbnNlKCk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0X3N1Z2dlc3Rl
ZF9maWxlbmFtZShyZXNwb25zZSkpOwotfQotCi1jbGFzcyBSZXNvdXJjZVVSSVRyYWNraW5nVGVz
dDogcHVibGljIFNpbmdsZVJlc291cmNlTG9hZFRlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJ
Ql9URVNUX0ZJWFRVUkUoUmVzb3VyY2VVUklUcmFja2luZ1Rlc3QpOwotCi0gICAgUmVzb3VyY2VV
UklUcmFja2luZ1Rlc3QoKQotICAgICAgICA6IFNpbmdsZVJlc291cmNlTG9hZFRlc3QoKQotICAg
IHsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCB1cmlDaGFuZ2VkKFdlYktpdFdlYlJlc291cmNl
KiByZXNvdXJjZSwgR1BhcmFtU3BlYyosIFJlc291cmNlVVJJVHJhY2tpbmdUZXN0KiB0ZXN0KQot
ICAgIHsKLSAgICAgICAgZ19hc3NlcnQocmVzb3VyY2UgPT0gdGVzdC0+bV9yZXNvdXJjZS5nZXQo
KSk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXN0LT5tX2FjdGl2ZVVSSS5kYXRhKCksICE9
LCB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF91cmkodGVzdC0+bV9yZXNvdXJjZS5nZXQoKSkpOwot
ICAgICAgICB0ZXN0LT5tX2FjdGl2ZVVSSSA9IHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaSh0
ZXN0LT5tX3Jlc291cmNlLmdldCgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlc291cmNlTG9hZFN0
YXJ0ZWQoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBXZWJLaXRVUklSZXF1ZXN0KiByZXF1
ZXN0KQotICAgIHsKLSAgICAgICAgaWYgKHJlc291cmNlID09IHdlYmtpdF93ZWJfdmlld19nZXRf
bWFpbl9yZXNvdXJjZShtX3dlYlZpZXcpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IG1fcmVzb3VyY2UgPSByZXNvdXJjZTsKLSAgICAgICAgbV9hY3RpdmVVUkkgPSB3ZWJraXRfd2Vi
X3Jlc291cmNlX2dldF91cmkocmVzb3VyY2UpOwotICAgICAgICBjaGVja0FjdGl2ZVVSSSgiL3Jl
ZGlyZWN0ZWQuY3NzIik7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cihtX2FjdGl2ZVVSSS5kYXRh
KCksID09LCB3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KSk7Ci0gICAgICAgIGdf
c2lnbmFsX2Nvbm5lY3QocmVzb3VyY2UsICJub3RpZnk6OnVyaSIsIEdfQ0FMTEJBQ0sodXJpQ2hh
bmdlZCksIHRoaXMpOwotICAgIH0KLQotICAgIHZvaWQgcmVzb3VyY2VTZW50UmVxdWVzdChXZWJL
aXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QsIFdlYktp
dFVSSVJlc3BvbnNlKiByZWRpcmVjdFJlc3BvbnNlKQotICAgIHsKLSAgICAgICAgaWYgKHJlc291
cmNlICE9IG1fcmVzb3VyY2UpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKHJl
ZGlyZWN0UmVzcG9uc2UpCi0gICAgICAgICAgICBjaGVja0FjdGl2ZVVSSSgiL3NpbXBsZS1zdHls
ZS5jc3MiKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2hlY2tBY3RpdmVVUkkoIi9yZWRp
cmVjdGVkLmNzcyIpOwotICAgICAgICBnX2Fzc2VydF9jbXBzdHIobV9hY3RpdmVVUkkuZGF0YSgp
LCA9PSwgd2Via2l0X3VyaV9yZXF1ZXN0X2dldF91cmkocmVxdWVzdCkpOwotICAgIH0KLQotICAg
IHZvaWQgcmVzb3VyY2VSZWNlaXZlZFJlc3BvbnNlKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJj
ZSkKLSAgICB7Ci0gICAgICAgIGlmIChyZXNvdXJjZSAhPSBtX3Jlc291cmNlKQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIGNoZWNrQWN0aXZlVVJJKCIvc2ltcGxlLXN0eWxlLmNzcyIp
OwotICAgIH0KLQotICAgIHZvaWQgcmVzb3VyY2VSZWNlaXZlZERhdGEoV2ViS2l0V2ViUmVzb3Vy
Y2UqIHJlc291cmNlLCBndWludDY0IGJ5dGVzUmVjZWl2ZWQpCi0gICAgewotICAgIH0KLQotICAg
IHZvaWQgcmVzb3VyY2VGaW5pc2hlZChXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UpCi0gICAg
ewotICAgICAgICBpZiAocmVzb3VyY2UgPT0gbV9yZXNvdXJjZSkKLSAgICAgICAgICAgIGNoZWNr
QWN0aXZlVVJJKCIvc2ltcGxlLXN0eWxlLmNzcyIpOwotICAgICAgICBSZXNvdXJjZXNUZXN0Ojpy
ZXNvdXJjZUZpbmlzaGVkKHJlc291cmNlKTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlc291cmNlRmFp
bGVkKFdlYktpdFdlYlJlc291cmNlKiwgR0Vycm9yKikKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0
X25vdF9yZWFjaGVkKCk7Ci0gICAgfQotCi0gICAgQ1N0cmluZyBtX2FjdGl2ZVVSSTsKLQotcHJp
dmF0ZToKLSAgICB2b2lkIGNoZWNrQWN0aXZlVVJJKGNvbnN0IGNoYXIqIHVyaSkKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVF9DTVBfQ1NUUklORyhtX2FjdGl2ZVVSSSwgPT0sIGtTZXJ2ZXItPmdldFVS
SUZvclBhdGgodXJpKSk7Ci0gICAgfQotfTsKLQotc3RhdGljIHZvaWQgdGVzdFdlYlJlc291cmNl
QWN0aXZlVVJJKFJlc291cmNlVVJJVHJhY2tpbmdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQot
ewotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3JlZGlyZWN0ZWQt
Y3NzLmh0bWwiKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlz
aGVkKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJSZXNvdXJjZUdldERhdGEoUmVzb3VyY2Vz
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXIt
PmdldFVSSUZvclBhdGgoIi8iKS5kYXRhKCkpOwotICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBi
ZSA0IGluc3RlYWQgb2YgMywgYnV0IHdlIGRvbid0IGdldCB0aGUgY3NzIGltYWdlIHJlc291cmNl
Ci0gICAgLy8gZHVlIHRvIGJ1ZyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Nzg1MTAuCi0gICAgdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VzTG9hZGVkKDMpOwotCi0gICAg
V2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX3Jl
c291cmNlKHRlc3QtPm1fd2ViVmlldyk7Ci0gICAgZ19hc3NlcnQocmVzb3VyY2UpOwotICAgIHRl
c3QtPmNoZWNrUmVzb3VyY2VEYXRhKHJlc291cmNlKTsKLQotICAgIEdMaXN0KiBzdWJyZXNvdXJj
ZXMgPSB0ZXN0LT5zdWJyZXNvdXJjZXMoKTsKLSAgICBmb3IgKEdMaXN0KiBpdGVtID0gc3VicmVz
b3VyY2VzOyBpdGVtOyBpdGVtID0gZ19saXN0X25leHQoaXRlbSkpCi0gICAgICAgIHRlc3QtPmNo
ZWNrUmVzb3VyY2VEYXRhKFdFQktJVF9XRUJfUkVTT1VSQ0UoaXRlbS0+ZGF0YSkpOwotfQotCi1z
dGF0aWMgdm9pZCB0ZXN0V2ViVmlld1Jlc291cmNlc0hpc3RvcnlDYWNoZShTaW5nbGVSZXNvdXJj
ZUxvYWRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIENTdHJpbmcgamF2YXNjcmlw
dFVSSSA9IGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9qYXZhc2NyaXB0Lmh0bWwiKTsKLSAgICB0
ZXN0LT5sb2FkVVJJKGphdmFzY3JpcHRVUkkuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxS
ZXNvdXJjZUxvYWRGaW5pc2hlZCgpOwotICAgIFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSA9
IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9yZXNvdXJjZSh0ZXN0LT5tX3dlYlZpZXcpOwotICAg
IGdfYXNzZXJ0KHJlc291cmNlKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9yZXNv
dXJjZV9nZXRfdXJpKHJlc291cmNlKSwgPT0sIGphdmFzY3JpcHRVUkkuZGF0YSgpKTsKLQotICAg
IENTdHJpbmcgc2ltcGxlU3R5bGVDU1NVUkkgPSBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvc2lt
cGxlLXN0eWxlLWNzcy5odG1sIik7Ci0gICAgdGVzdC0+bG9hZFVSSShzaW1wbGVTdHlsZUNTU1VS
SS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlzaGVkKCk7Ci0g
ICAgcmVzb3VyY2UgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2UodGVzdC0+bV93
ZWJWaWV3KTsKLSAgICBnX2Fzc2VydChyZXNvdXJjZSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdl
YmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaShyZXNvdXJjZSksID09LCBzaW1wbGVTdHlsZUNTU1VS
SS5kYXRhKCkpOwotCi0gICAgdGVzdC0+Z29CYWNrKCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsUmVz
b3VyY2VMb2FkRmluaXNoZWQoKTsKLSAgICByZXNvdXJjZSA9IHdlYmtpdF93ZWJfdmlld19nZXRf
bWFpbl9yZXNvdXJjZSh0ZXN0LT5tX3dlYlZpZXcpOwotICAgIGdfYXNzZXJ0KHJlc291cmNlKTsK
LSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJpKHJlc291cmNl
KSwgPT0sIGphdmFzY3JpcHRVUkkuZGF0YSgpKTsKLQotICAgIHRlc3QtPmdvRm9yd2FyZCgpOwot
ICAgIHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlzaGVkKCk7Ci0gICAgcmVzb3VyY2Ug
PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2UodGVzdC0+bV93ZWJWaWV3KTsKLSAg
ICBnX2Fzc2VydChyZXNvdXJjZSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfcmVz
b3VyY2VfZ2V0X3VyaShyZXNvdXJjZSksID09LCBzaW1wbGVTdHlsZUNTU1VSSS5kYXRhKCkpOwot
fQotCi1jbGFzcyBTZW5kUmVxdWVzdFRlc3Q6IHB1YmxpYyBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0
IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFNlbmRSZXF1ZXN0VGVzdCk7
Ci0KLSAgICB2b2lkIHJlc291cmNlU2VudFJlcXVlc3QoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291
cmNlLCBXZWJLaXRVUklSZXF1ZXN0KiByZXF1ZXN0LCBXZWJLaXRVUklSZXNwb25zZSogcmVkaXJl
Y3RSZXNwb25zZSkKLSAgICB7Ci0gICAgICAgIGlmIChyZXNvdXJjZSAhPSBtX3Jlc291cmNlKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChyZWRpcmVjdFJlc3BvbnNlKQotICAg
ICAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfdXJpKHJlcXVl
c3QpLCA9PSwgbV9leHBlY3RlZE5ld1Jlc291cmNlVVJJQWZ0ZXJSZWRpcmVjdGlvbi5kYXRhKCkp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3VyaV9y
ZXF1ZXN0X2dldF91cmkocmVxdWVzdCksID09LCBtX2V4cGVjdGVkTmV3UmVzb3VyY2VVUkkuZGF0
YSgpKTsKLSAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfdXJp
KHJlcXVlc3QpLCA9PSwgd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJpKHJlc291cmNlKSk7Ci0K
LSAgICAgICAgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6cmVzb3VyY2VTZW50UmVxdWVzdChyZXNv
dXJjZSwgcmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7Ci0gICAgfQotCi0gICAgdm9pZCByZXNv
dXJjZUZhaWxlZChXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIEdFcnJvciogZXJyb3IpCi0g
ICAgewotICAgICAgICBpZiAocmVzb3VyY2UgIT0gbV9yZXNvdXJjZSkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9yZXNvdXJjZV9nZXRf
dXJpKHJlc291cmNlKSwgPT0sIG1fZXhwZWN0ZWRDYW5jZWxsZWRSZXNvdXJjZVVSSS5kYXRhKCkp
OwotICAgICAgICBnX2Fzc2VydF9lcnJvcihlcnJvciwgV0VCS0lUX05FVFdPUktfRVJST1IsIFdF
QktJVF9ORVRXT1JLX0VSUk9SX0NBTkNFTExFRCk7Ci0KLSAgICAgICAgU2luZ2xlUmVzb3VyY2VM
b2FkVGVzdDo6cmVzb3VyY2VGYWlsZWQocmVzb3VyY2UsIGVycm9yKTsKLSAgICB9Ci0KLSAgICB2
b2lkIHNldEV4cGVjdGVkTmV3UmVzb3VyY2VVUkkoY29uc3QgQ1N0cmluZyYgdXJpKQotICAgIHsK
LSAgICAgICAgbV9leHBlY3RlZE5ld1Jlc291cmNlVVJJID0gdXJpOwotICAgIH0KLQotICAgIHZv
aWQgc2V0RXhwZWN0ZWRDYW5jZWxsZWRSZXNvdXJjZVVSSShjb25zdCBDU3RyaW5nJiB1cmkpCi0g
ICAgewotICAgICAgICBtX2V4cGVjdGVkQ2FuY2VsbGVkUmVzb3VyY2VVUkkgPSB1cmk7Ci0gICAg
fQotCi0gICAgdm9pZCBzZXRFeHBlY3RlZE5ld1Jlc291cmNlVVJJQWZ0ZXJSZWRpcmVjdGlvbihj
b25zdCBDU3RyaW5nJiB1cmkpCi0gICAgewotICAgICAgICBtX2V4cGVjdGVkTmV3UmVzb3VyY2VV
UklBZnRlclJlZGlyZWN0aW9uID0gdXJpOwotICAgIH0KLQotICAgIENTdHJpbmcgbV9leHBlY3Rl
ZE5ld1Jlc291cmNlVVJJOwotICAgIENTdHJpbmcgbV9leHBlY3RlZENhbmNlbGxlZFJlc291cmNl
VVJJOwotICAgIENTdHJpbmcgbV9leHBlY3RlZE5ld1Jlc291cmNlVVJJQWZ0ZXJSZWRpcmVjdGlv
bjsKLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJSZXNvdXJjZVNlbmRSZXF1ZXN0KFNlbmRSZXF1
ZXN0VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5zZXRFeHBlY3RlZE5l
d1Jlc291cmNlVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9qYXZhc2NyaXB0LmpzIikpOwot
ICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgicmVsYXRpdmUtamF2YXNj
cmlwdC5odG1sIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5p
c2hlZCgpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fcmVzb3VyY2UpOwotCi0gICAgVmVjdG9yPFNp
bmdsZVJlc291cmNlTG9hZFRlc3Q6OkxvYWRFdmVudHM+JiBldmVudHMgPSB0ZXN0LT5tX2xvYWRF
dmVudHM7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCA1KTsKLSAgICBn
X2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6U3Rh
cnRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIFNpbmdsZVJlc291cmNl
TG9hZFRlc3Q6OlNlbnRSZXF1ZXN0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9
PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6UmVjZWl2ZWRSZXNwb25zZSk7Ci0gICAgZ19hc3Nl
cnRfY21waW50KGV2ZW50c1szXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlJlY2VpdmVk
RGF0YSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1s0XSwgPT0sIFNpbmdsZVJlc291cmNl
TG9hZFRlc3Q6OkZpbmlzaGVkKTsKLSAgICBldmVudHMuY2xlYXIoKTsKLQotICAgIC8vIENhbmNl
bCByZXF1ZXN0LgotICAgIHRlc3QtPnNldEV4cGVjdGVkQ2FuY2VsbGVkUmVzb3VyY2VVUkkoa1Nl
cnZlci0+Z2V0VVJJRm9yUGF0aCgiL2NhbmNlbC10aGlzLmpzIikpOwotICAgIHRlc3QtPmxvYWRV
Ukkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3Jlc291cmNlLXRvLWNhbmNlbC5odG1sIikuZGF0
YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZCgpOwotICAgIGdf
YXNzZXJ0KHRlc3QtPm1fcmVzb3VyY2UpOwotCi0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5z
aXplKCksID09LCAzKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgU2luZ2xl
UmVzb3VyY2VMb2FkVGVzdDo6U3RhcnRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sx
XSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OkZhaWxlZCk7Ci0gICAgZ19hc3NlcnRfY21w
aW50KGV2ZW50c1syXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OkZpbmlzaGVkKTsKLSAg
ICBldmVudHMuY2xlYXIoKTsKLQotICAgIC8vIFVSSSBjaGFuZ2VkIGFmdGVyIGEgcmVkaXJlY3Qu
Ci0gICAgdGVzdC0+c2V0RXhwZWN0ZWROZXdSZXNvdXJjZVVSSShrU2VydmVyLT5nZXRVUklGb3JQ
YXRoKCIvcmVkaXJlY3RlZC5qcyIpKTsKLSAgICB0ZXN0LT5zZXRFeHBlY3RlZE5ld1Jlc291cmNl
VVJJQWZ0ZXJSZWRpcmVjdGlvbihrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvamF2YXNjcmlwdC5q
cyIpKTsKLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoInJlZGlyZWN0
ZWQtamF2YXNjcmlwdC5odG1sIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxSZXNvdXJj
ZUxvYWRGaW5pc2hlZCgpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fcmVzb3VyY2UpOwotCi0gICAg
Z19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCA2KTsKLSAgICBnX2Fzc2VydF9jbXBp
bnQoZXZlbnRzWzBdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6U3RhcnRlZCk7Ci0gICAg
Z19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlNl
bnRSZXF1ZXN0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgU2luZ2xlUmVz
b3VyY2VMb2FkVGVzdDo6UmVkaXJlY3RlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sz
XSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOwotICAgIGdf
YXNzZXJ0X2NtcGludChldmVudHNbNF0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpSZWNl
aXZlZERhdGEpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbNV0sID09LCBTaW5nbGVSZXNv
dXJjZUxvYWRUZXN0OjpGaW5pc2hlZCk7Ci0gICAgZXZlbnRzLmNsZWFyKCk7Ci0KLSAgICAvLyBD
YW5jZWwgYWZ0ZXIgYSByZWRpcmVjdC4KLSAgICB0ZXN0LT5zZXRFeHBlY3RlZE5ld1Jlc291cmNl
VVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9yZWRpcmVjdGVkLXRvLWNhbmNlbC5qcyIpKTsK
LSAgICB0ZXN0LT5zZXRFeHBlY3RlZENhbmNlbGxlZFJlc291cmNlVVJJKGtTZXJ2ZXItPmdldFVS
SUZvclBhdGgoIi9yZWRpcmVjdGVkLXRvLWNhbmNlbC5qcyIpKTsKLSAgICB0ZXN0LT5sb2FkVVJJ
KGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9yZWRpcmVjdGVkLXRvLWNhbmNlbC5odG1sIikuZGF0
YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZCgpOwotICAgIGdf
YXNzZXJ0KHRlc3QtPm1fcmVzb3VyY2UpOwotCi0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5z
aXplKCksID09LCA0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgU2luZ2xl
UmVzb3VyY2VMb2FkVGVzdDo6U3RhcnRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sx
XSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlNlbnRSZXF1ZXN0KTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6RmFpbGVkKTsK
LSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzNdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVz
dDo6RmluaXNoZWQpOwotICAgIGV2ZW50cy5jbGVhcigpOwotfQotCi1zdGF0aWMgdm9pZCBhZGRD
YWNoZUhUVFBIZWFkZXJzVG9SZXNwb25zZShTb3VwTWVzc2FnZSogbWVzc2FnZSkKLXsKLSAgICAv
LyBUaGUgYWN0dWFsIGRhdGUgZG9lc24ndCByZWFsbHkgbWF0dGVyLgotICAgIFNvdXBEYXRlKiBz
b3VwRGF0ZSA9IHNvdXBfZGF0ZV9uZXdfZnJvbV9ub3coMCk7Ci0gICAgR093blB0cjxjaGFyPiBk
YXRlKHNvdXBfZGF0ZV90b19zdHJpbmcoc291cERhdGUsIFNPVVBfREFURV9IVFRQKSk7Ci0gICAg
c291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJM
YXN0LU1vZGlmaWVkIiwgZGF0ZS5nZXQoKSk7Ci0gICAgc291cF9kYXRlX2ZyZWUoc291cERhdGUp
OwotICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9oZWFk
ZXJzLCAiQ2FjaGUtY29udHJvbCIsICJwdWJsaWMsIG1heC1hZ2U9MzE1MzYwMDAiKTsKLSAgICBz
b3VwRGF0ZSA9IHNvdXBfZGF0ZV9uZXdfZnJvbV9ub3coMzYwMCk7Ci0gICAgZGF0ZS5zZXQoc291
cF9kYXRlX3RvX3N0cmluZyhzb3VwRGF0ZSwgU09VUF9EQVRFX0hUVFApKTsKLSAgICBzb3VwX21l
c3NhZ2VfaGVhZGVyc19hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIkV4cGlyZXMi
LCBkYXRlLmdldCgpKTsKLSAgICBzb3VwX2RhdGVfZnJlZShzb3VwRGF0ZSk7Ci19Ci0KLXN0YXRp
YyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1l
c3NhZ2UsIGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqLCBTb3VwQ2xpZW50Q29udGV4dCos
IGdwb2ludGVyKQotewotICAgIGlmIChtZXNzYWdlLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VU
KSB7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVT
X05PVF9JTVBMRU1FTlRFRCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzb3VwX21l
c3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7Ci0KLSAgICBpZiAoc291
cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X29uZShtZXNzYWdlLT5yZXF1ZXN0X2hlYWRlcnMsICJJZi1N
b2RpZmllZC1TaW5jZSIpKSB7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3Nh
Z2UsIFNPVVBfU1RBVFVTX05PVF9NT0RJRklFRCk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5
X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvIikpIHsKLSAgICAgICAgc291cF9tZXNz
YWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJ
Qywga0luZGV4SHRtbCwgc3RybGVuKGtJbmRleEh0bWwpKTsKLSAgICB9IGVsc2UgaWYgKGdfc3Ry
X2VxdWFsKHBhdGgsICIvamF2YXNjcmlwdC5odG1sIikpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0
IGNoYXIqIGphdmFzY3JpcHRIdG1sID0gIjxodG1sPjxoZWFkPjxzY3JpcHQgbGFuZ3VhZ2U9J2ph
dmFzY3JpcHQnIHNyYz0nL2phdmFzY3JpcHQuanMnPjwvc2NyaXB0PjwvaGVhZD48Ym9keT48L2Jv
ZHk+PC9odG1sPiI7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5y
ZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGphdmFzY3JpcHRIdG1sLCBzdHJsZW4o
amF2YXNjcmlwdEh0bWwpKTsKLSAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvaW1h
Z2UuaHRtbCIpKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBpbWFnZUhUTUwgPSAiPGh0
bWw+PGJvZHk+PGltZyBzcmM9Jy9ibGFuay5pY28nPjwvaW1nPjwvYm9keT48L2h0bWw+IjsKLSAg
ICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNP
VVBfTUVNT1JZX1NUQVRJQywgaW1hZ2VIVE1MLCBzdHJsZW4oaW1hZ2VIVE1MKSk7Ci0gICAgfSBl
bHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3JlZGlyZWN0ZWQtY3NzLmh0bWwiKSkgewotICAg
ICAgICBzdGF0aWMgY29uc3QgY2hhciogcmVkaXJlY3RlZENTU0h0bWwgPSAiPGh0bWw+PGhlYWQ+
PGxpbmsgcmVsPSdzdHlsZXNoZWV0JyBocmVmPScvcmVkaXJlY3RlZC5jc3MnIHR5cGU9J3RleHQv
Y3NzJz48L2hlYWQ+PGJvZHk+PC9odG1sPiI7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2Fw
cGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIHJlZGlyZWN0
ZWRDU1NIdG1sLCBzdHJsZW4ocmVkaXJlY3RlZENTU0h0bWwpKTsKLSAgICB9IGVsc2UgaWYgKGdf
c3RyX2VxdWFsKHBhdGgsICIvaW52YWxpZC1jc3MuaHRtbCIpKSB7Ci0gICAgICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBpbnZhbGlkQ1NTSHRtbCA9ICI8aHRtbD48aGVhZD48bGluayByZWw9J3N0eWxl
c2hlZXQnIGhyZWY9Jy9pbnZhbGlkLmNzcycgdHlwZT0ndGV4dC9jc3MnPjwvaGVhZD48Ym9keT48
L2h0bWw+IjsKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3Bv
bnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgaW52YWxpZENTU0h0bWwsIHN0cmxlbihpbnZh
bGlkQ1NTSHRtbCkpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9zaW1wbGUt
c3R5bGUtY3NzLmh0bWwiKSkgewotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogc2ltcGxlU3R5
bGVDU1NIdG1sID0gIjxodG1sPjxoZWFkPjxsaW5rIHJlbD0nc3R5bGVzaGVldCcgaHJlZj0nL3Np
bXBsZS1zdHlsZS5jc3MnIHR5cGU9J3RleHQvY3NzJz48L2hlYWQ+PGJvZHk+PC9odG1sPiI7Ci0g
ICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBT
T1VQX01FTU9SWV9TVEFUSUMsIHNpbXBsZVN0eWxlQ1NTSHRtbCwgc3RybGVuKHNpbXBsZVN0eWxl
Q1NTSHRtbCkpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9zdHlsZS5jc3Mi
KSkgewotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2Vf
Ym9keSwgU09VUF9NRU1PUllfU1RBVElDLCBrU3R5bGVDU1MsIHN0cmxlbihrU3R5bGVDU1MpKTsK
LSAgICAgICAgYWRkQ2FjaGVIVFRQSGVhZGVyc1RvUmVzcG9uc2UobWVzc2FnZSk7Ci0gICAgICAg
IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAi
Q29udGVudC1UeXBlIiwgInRleHQvY3NzIik7Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChw
YXRoLCAiL2phdmFzY3JpcHQuanMiKSkgewotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBl
bmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBrSmF2YXNjcmlw
dCwgc3RybGVuKGtKYXZhc2NyaXB0KSk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2Fw
cGVuZChtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiQ29udGVudC1UeXBlIiwgInRleHQvamF2
YXNjcmlwdCIpOwotICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobWVzc2FnZS0+
cmVzcG9uc2VfaGVhZGVycywgIkNvbnRlbnQtRGlzcG9zaXRpb24iLCAiZmlsZW5hbWU9SmF2YVNj
cmlwdC5qcyIpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9yZWxhdGl2ZS1q
YXZhc2NyaXB0Lmh0bWwiKSkgewotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogamF2YXNjcmlw
dFJlbGF0aXZlSFRNTCA9ICI8aHRtbD48aGVhZD48c2NyaXB0IGxhbmd1YWdlPSdqYXZhc2NyaXB0
JyBzcmM9J3JlbW92ZS10aGlzL2phdmFzY3JpcHQuanMnPjwvc2NyaXB0PjwvaGVhZD48Ym9keT48
L2JvZHk+PC9odG1sPiI7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdl
LT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGphdmFzY3JpcHRSZWxhdGl2ZUhU
TUwsIHN0cmxlbihqYXZhc2NyaXB0UmVsYXRpdmVIVE1MKSk7Ci0gICAgfSBlbHNlIGlmIChnX3N0
cl9lcXVhbChwYXRoLCAiL3Jlc291cmNlLXRvLWNhbmNlbC5odG1sIikpIHsKLSAgICAgICAgc3Rh
dGljIGNvbnN0IGNoYXIqIHJlc291cmNlVG9DYW5jZWxIVE1MID0gIjxodG1sPjxoZWFkPjxzY3Jp
cHQgbGFuZ3VhZ2U9J2phdmFzY3JpcHQnIHNyYz0nY2FuY2VsLXRoaXMuanMnPjwvc2NyaXB0Pjwv
aGVhZD48Ym9keT48L2JvZHk+PC9odG1sPiI7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2Fw
cGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIHJlc291cmNl
VG9DYW5jZWxIVE1MLCBzdHJsZW4ocmVzb3VyY2VUb0NhbmNlbEhUTUwpKTsKLSAgICB9IGVsc2Ug
aWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvcmVkaXJlY3RlZC1qYXZhc2NyaXB0Lmh0bWwiKSkgewot
ICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogamF2YXNjcmlwdFJlbGF0aXZlSFRNTCA9ICI8aHRt
bD48aGVhZD48c2NyaXB0IGxhbmd1YWdlPSdqYXZhc2NyaXB0JyBzcmM9Jy9yZWRpcmVjdGVkLmpz
Jz48L3NjcmlwdD48L2hlYWQ+PGJvZHk+PC9ib2R5PjwvaHRtbD4iOwotICAgICAgICBzb3VwX21l
c3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RB
VElDLCBqYXZhc2NyaXB0UmVsYXRpdmVIVE1MLCBzdHJsZW4oamF2YXNjcmlwdFJlbGF0aXZlSFRN
TCkpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9yZWRpcmVjdGVkLXRvLWNh
bmNlbC5odG1sIikpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGphdmFzY3JpcHRSZWxh
dGl2ZUhUTUwgPSAiPGh0bWw+PGhlYWQ+PHNjcmlwdCBsYW5ndWFnZT0namF2YXNjcmlwdCcgc3Jj
PScvcmVkaXJlY3RlZC10by1jYW5jZWwuanMnPjwvc2NyaXB0PjwvaGVhZD48Ym9keT48L2JvZHk+
PC9odG1sPiI7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNw
b25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGphdmFzY3JpcHRSZWxhdGl2ZUhUTUwsIHN0
cmxlbihqYXZhc2NyaXB0UmVsYXRpdmVIVE1MKSk7Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9lcXVh
bChwYXRoLCAiL2JsYW5rLmljbyIpKSB7Ci0gICAgICAgIEdPd25QdHI8Y2hhcj4gZmlsZVBhdGgo
Z19idWlsZF9maWxlbmFtZShUZXN0OjpnZXRXZWJLaXQxVGVzdFJlc291Y2VzRGlyKCkuZGF0YSgp
LCBwYXRoLCBOVUxMKSk7Ci0gICAgICAgIGNoYXIqIGNvbnRlbnRzOwotICAgICAgICBnc2l6ZSBj
b250ZW50c0xlbmd0aDsKLSAgICAgICAgZ19maWxlX2dldF9jb250ZW50cyhmaWxlUGF0aC5nZXQo
KSwgJmNvbnRlbnRzLCAmY29udGVudHNMZW5ndGgsIDApOwotICAgICAgICBzb3VwX21lc3NhZ2Vf
Ym9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgY29u
dGVudHMsIGNvbnRlbnRzTGVuZ3RoKTsKLSAgICAgICAgYWRkQ2FjaGVIVFRQSGVhZGVyc1RvUmVz
cG9uc2UobWVzc2FnZSk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChtZXNz
YWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiQ29udGVudC1UeXBlIiwgImltYWdlL3ZuZC5taWNyb3Nv
ZnQuaWNvbiIpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9zaW1wbGUtc3R5
bGUuY3NzIikpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHNpbXBsZUNTUyA9Ci0gICAg
ICAgICAgICAiYm9keSB7IgotICAgICAgICAgICAgIiAgICBtYXJnaW46IDBweDsiCi0gICAgICAg
ICAgICAiICAgIHBhZGRpbmc6IDBweDsiCi0gICAgICAgICAgICAifSI7Ci0gICAgICAgIHNvdXBf
bWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9T
VEFUSUMsIHNpbXBsZUNTUywgc3RybGVuKHNpbXBsZUNTUykpOwotICAgICAgICBzb3VwX21lc3Nh
Z2VfaGVhZGVyc19hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIkNvbnRlbnQtVHlw
ZSIsICJ0ZXh0L2NzcyIpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9yZWRp
cmVjdGVkLmNzcyIpKSB7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2Us
IFNPVVBfU1RBVFVTX01PVkVEX1BFUk1BTkVOVExZKTsKLSAgICAgICAgc291cF9tZXNzYWdlX2hl
YWRlcnNfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJMb2NhdGlvbiIsICIvc2lt
cGxlLXN0eWxlLmNzcyIpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9yZWRp
cmVjdGVkLmpzIikpIHsKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwg
U09VUF9TVEFUVVNfTU9WRURfUEVSTUFORU5UTFkpOwotICAgICAgICBzb3VwX21lc3NhZ2VfaGVh
ZGVyc19hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIkxvY2F0aW9uIiwgIi9yZW1v
dmUtdGhpcy9qYXZhc2NyaXB0LmpzIik7Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRo
LCAiL3JlZGlyZWN0ZWQtdG8tY2FuY2VsLmpzIikpIHsKLSAgICAgICAgc291cF9tZXNzYWdlX3Nl
dF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTU9WRURfUEVSTUFORU5UTFkpOwotICAgICAg
ICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywg
IkxvY2F0aW9uIiwgIi9jYW5jZWwtdGhpcy5qcyIpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1
YWwocGF0aCwgIi9pbnZhbGlkLmNzcyIpKQotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1
cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19DQU5UX0NPTk5FQ1QpOwotICAgIGVsc2UKLSAgICAgICAg
c291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0ZPVU5EKTsK
LSAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsK
LX0KLQotdm9pZCBiZWZvcmVBbGwoKQotewotICAgIGtTZXJ2ZXIgPSBuZXcgV2ViS2l0VGVzdFNl
cnZlcigpOwotICAgIGtTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFjayk7Ci0KLSAgICB3ZWJraXRf
d2ViX2NvbnRleHRfc2V0X3dlYl9leHRlbnNpb25zX2RpcmVjdG9yeSh3ZWJraXRfd2ViX2NvbnRl
eHRfZ2V0X2RlZmF1bHQoKSwgV0VCS0lUX1RFU1RfV0VCX0VYVEVOU0lPTlNfRElSKTsKLQotICAg
IFJlc291cmNlc1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJyZXNvdXJjZXMiLCB0ZXN0V2Vi
Vmlld1Jlc291cmNlcyk7Ci0gICAgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6YWRkKCJXZWJLaXRX
ZWJSZXNvdXJjZSIsICJsb2FkaW5nIiwgdGVzdFdlYlJlc291cmNlTG9hZGluZyk7Ci0gICAgU2lu
Z2xlUmVzb3VyY2VMb2FkVGVzdDo6YWRkKCJXZWJLaXRXZWJSZXNvdXJjZSIsICJyZXNwb25zZSIs
IHRlc3RXZWJSZXNvdXJjZVJlc3BvbnNlKTsKLSAgICBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0Ojph
ZGQoIldlYktpdFdlYlJlc291cmNlIiwgIm1pbWUtdHlwZSIsIHRlc3RXZWJSZXNvdXJjZU1pbWVU
eXBlKTsKLSAgICBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjphZGQoIldlYktpdFdlYlJlc291cmNl
IiwgInN1Z2dlc3RlZC1maWxlbmFtZSIsIHRlc3RXZWJSZXNvdXJjZVN1Z2dlc3RlZEZpbGVuYW1l
KTsKLSAgICBSZXNvdXJjZVVSSVRyYWNraW5nVGVzdDo6YWRkKCJXZWJLaXRXZWJSZXNvdXJjZSIs
ICJhY3RpdmUtdXJpIiwgdGVzdFdlYlJlc291cmNlQWN0aXZlVVJJKTsKLSAgICBSZXNvdXJjZXNU
ZXN0OjphZGQoIldlYktpdFdlYlJlc291cmNlIiwgImdldC1kYXRhIiwgdGVzdFdlYlJlc291cmNl
R2V0RGF0YSk7Ci0gICAgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3
IiwgImhpc3RvcnktY2FjaGUiLCB0ZXN0V2ViVmlld1Jlc291cmNlc0hpc3RvcnlDYWNoZSk7Ci0g
ICAgU2VuZFJlcXVlc3RUZXN0OjphZGQoIldlYktpdFdlYlBhZ2UiLCAic2VuZC1yZXF1ZXN0Iiwg
dGVzdFdlYlJlc291cmNlU2VuZFJlcXVlc3QpOwotfQotCi12b2lkIGFmdGVyQWxsKCkKLXsKLSAg
ICBkZWxldGUga1NlcnZlcjsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL1Rlc3RTU0wuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvVGVzdFNTTC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUz
MTgwYzUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvVGVzdFNTTC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyOTAgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNs
dWRlICJMb2FkVHJhY2tpbmdUZXN0LmgiCi0jaW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5oIgot
I2luY2x1ZGUgPGd0ay9ndGsuaD4KLQotc3RhdGljIFdlYktpdFRlc3RTZXJ2ZXIqIGtIdHRwc1Nl
cnZlcjsKLXN0YXRpYyBXZWJLaXRUZXN0U2VydmVyKiBrSHR0cFNlcnZlcjsKLQotc3RhdGljIGNv
bnN0IGNoYXIqIGluZGV4SFRNTCA9ICI8aHRtbD48Ym9keT5UZXN0aW5nIFdlYktpdDJHVEsrIFNT
TDwvYm9keT48L2h0bWxsPiI7Ci1zdGF0aWMgY29uc3QgY2hhciogaW5zZWN1cmVDb250ZW50SFRN
TCA9ICI8aHRtbD48c2NyaXB0IHNyYz1cIiVzXCI+PC9zY3JpcHQ+PGJvZHk+PHA+VGV4dCArIGlt
YWdlIDxpbWcgc3JjPVwiJXNcIiBhbGlnbj1cInJpZ2h0XCIvPjwvcD48L2JvZHk+PC9odG1sPiI7
Ci1zdGF0aWMgY29uc3QgY2hhciBUTFNFeHBlY3RlZFN1Y2Nlc3NUaXRsZVtdID0gIldlYktpdDJH
dGsrIFRMUyBwZXJtaXNzaW9uIHRlc3QiOwotc3RhdGljIGNvbnN0IGNoYXIgVExTU3VjY2Vzc0hU
TUxTdHJpbmdbXSA9ICI8aHRtbD48aGVhZD48dGl0bGU+V2ViS2l0Mkd0aysgVExTIHBlcm1pc3Np
b24gdGVzdDwvdGl0bGU+PC9oZWFkPjxib2R5PjwvYm9keT48L2h0bWw+IjsKLQotY2xhc3MgU1NM
VGVzdDogcHVibGljIExvYWRUcmFja2luZ1Rlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJQl9U
RVNUX0ZJWFRVUkUoU1NMVGVzdCk7Ci0KLSAgICBTU0xUZXN0KCkKLSAgICAgICAgOiBtX3Rsc0Vy
cm9ycyhzdGF0aWNfY2FzdDxHVGxzQ2VydGlmaWNhdGVGbGFncz4oMCkpCi0gICAgewotICAgIH0K
LQotICAgIHZpcnR1YWwgdm9pZCBwcm92aXNpb25hbExvYWRGYWlsZWQoY29uc3QgZ2NoYXIqIGZh
aWxpbmdVUkksIEdFcnJvciogZXJyb3IpCi0gICAgewotICAgICAgICBnX2Fzc2VydF9lcnJvcihl
cnJvciwgU09VUF9IVFRQX0VSUk9SLCBTT1VQX1NUQVRVU19TU0xfRkFJTEVEKTsKLSAgICAgICAg
TG9hZFRyYWNraW5nVGVzdDo6cHJvdmlzaW9uYWxMb2FkRmFpbGVkKGZhaWxpbmdVUkksIGVycm9y
KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgbG9hZENvbW1pdHRlZCgpCi0gICAgewotICAg
ICAgICBHVGxzQ2VydGlmaWNhdGUqIGNlcnRpZmljYXRlID0gMDsKLSAgICAgICAgd2Via2l0X3dl
Yl92aWV3X2dldF90bHNfaW5mbyhtX3dlYlZpZXcsICZjZXJ0aWZpY2F0ZSwgJm1fdGxzRXJyb3Jz
KTsKLSAgICAgICAgbV9jZXJ0aWZpY2F0ZSA9IGNlcnRpZmljYXRlOwotICAgICAgICBMb2FkVHJh
Y2tpbmdUZXN0Ojpsb2FkQ29tbWl0dGVkKCk7Ci0gICAgfQotCi0gICAgdm9pZCB3YWl0VW50aWxM
b2FkRmluaXNoZWQoKQotICAgIHsKLSAgICAgICAgbV9jZXJ0aWZpY2F0ZSA9IDA7Ci0gICAgICAg
IG1fdGxzRXJyb3JzID0gc3RhdGljX2Nhc3Q8R1Rsc0NlcnRpZmljYXRlRmxhZ3M+KDApOwotICAg
ICAgICBMb2FkVHJhY2tpbmdUZXN0Ojp3YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICB9Ci0K
LSAgICBHUmVmUHRyPEdUbHNDZXJ0aWZpY2F0ZT4gbV9jZXJ0aWZpY2F0ZTsKLSAgICBHVGxzQ2Vy
dGlmaWNhdGVGbGFncyBtX3Rsc0Vycm9yczsKLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RTU0woU1NM
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5sb2FkVVJJKGtIdHRwc1Nl
cnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9h
ZEZpbmlzaGVkKCk7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV9jZXJ0aWZpY2F0ZSk7Ci0gICAgLy8g
V2UgYWx3YXlzIGV4cGVjdCBlcnJvcnMgYmVjYXVzZSB3ZSBhcmUgdXNpbmcgYSBzZWxmLXNpZ25l
ZCBjZXJ0aWZpY2F0ZSwKLSAgICAvLyBidXQgb25seSBHX1RMU19DRVJUSUZJQ0FURV9VTktOT1dO
X0NBIGZsYWdzIHNob3VsZCBiZSBwcmVzZW50LgotICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGxzRXJy
b3JzKTsKLSAgICBnX2Fzc2VydF9jbXB1aW50KHRlc3QtPm1fdGxzRXJyb3JzLCA9PSwgR19UTFNf
Q0VSVElGSUNBVEVfVU5LTk9XTl9DQSk7Ci0KLSAgICAvLyBOb24gSFRUUFMgbG9hZHMgc2hvdWxk
bid0IGhhdmUgYSBjZXJ0aWZpY2F0ZSBub3IgZXJyb3JzLgotICAgIHRlc3QtPmxvYWRIdG1sKGlu
ZGV4SFRNTCwgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgZ19h
c3NlcnQoIXRlc3QtPm1fY2VydGlmaWNhdGUpOwotICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX3Rsc0Vy
cm9ycyk7Ci19Ci0KLWNsYXNzIEluc2VjdXJlQ29udGVudFRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVz
dCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShJbnNlY3VyZUNvbnRlbnRU
ZXN0KTsKLQotICAgIEluc2VjdXJlQ29udGVudFRlc3QoKQotICAgICAgICA6IG1faW5zZWN1cmVD
b250ZW50UnVuKGZhbHNlKQotICAgICAgICAsIG1faW5zZWN1cmVDb250ZW50RGlzcGxheWVkKGZh
bHNlKQotICAgIHsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJpbnNlY3Vy
ZS1jb250ZW50LWRldGVjdGVkIiwgR19DQUxMQkFDSyhpbnNlY3VyZUNvbnRlbnREZXRlY3RlZENh
bGxiYWNrKSwgdGhpcyk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgaW5zZWN1cmVDb250ZW50
RGV0ZWN0ZWRDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRJbnNlY3VyZUNv
bnRlbnRFdmVudCBldmVudCwgSW5zZWN1cmVDb250ZW50VGVzdCogdGVzdCkKLSAgICB7Ci0gICAg
ICAgIGdfYXNzZXJ0KHdlYlZpZXcgPT0gdGVzdC0+bV93ZWJWaWV3KTsKLQotICAgICAgICBpZiAo
ZXZlbnQgPT0gV0VCS0lUX0lOU0VDVVJFX0NPTlRFTlRfUlVOKQotICAgICAgICAgICAgdGVzdC0+
bV9pbnNlY3VyZUNvbnRlbnRSdW4gPSB0cnVlOwotCi0gICAgICAgIGlmIChldmVudCA9PSBXRUJL
SVRfSU5TRUNVUkVfQ09OVEVOVF9ESVNQTEFZRUQpCi0gICAgICAgICAgICB0ZXN0LT5tX2luc2Vj
dXJlQ29udGVudERpc3BsYXllZCA9IHRydWU7Ci0gICAgfQotCi0gICAgYm9vbCBtX2luc2VjdXJl
Q29udGVudFJ1bjsKLSAgICBib29sIG1faW5zZWN1cmVDb250ZW50RGlzcGxheWVkOwotfTsKLQot
c3RhdGljIHZvaWQgdGVzdEluc2VjdXJlQ29udGVudChJbnNlY3VyZUNvbnRlbnRUZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxvYWRVUkkoa0h0dHBzU2VydmVyLT5nZXRV
UklGb3JQYXRoKCIvaW5zZWN1cmUtY29udGVudC8iKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRV
bnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3NlcnQodGVzdC0+bV9pbnNlY3VyZUNvbnRl
bnRSdW4pOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1faW5zZWN1cmVDb250ZW50RGlzcGxheWVkKTsK
LX0KLQotc3RhdGljIHZvaWQgdGVzdFRMU0Vycm9yc1BvbGljeShTU0xUZXN0KiB0ZXN0LCBnY29u
c3Rwb2ludGVyKQotewotICAgIFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQgPSB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X2NvbnRleHQodGVzdC0+bV93ZWJWaWV3KTsKLSAgICAvLyBUTFMgZXJyb3JzIGFy
ZSBpZ25vcmVkIGJ5IGRlZmF1bHQuCi0gICAgZ19hc3NlcnQod2Via2l0X3dlYl9jb250ZXh0X2dl
dF90bHNfZXJyb3JzX3BvbGljeShjb250ZXh0KSA9PSBXRUJLSVRfVExTX0VSUk9SU19QT0xJQ1lf
SUdOT1JFKTsKLSAgICB0ZXN0LT5sb2FkVVJJKGtIdHRwc1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgi
LyIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgZ19h
c3NlcnQoIXRlc3QtPm1fbG9hZEZhaWxlZCk7Ci0KLSAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0
X3Rsc19lcnJvcnNfcG9saWN5KGNvbnRleHQsIFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9GQUlM
KTsKLSAgICB0ZXN0LT5sb2FkVVJJKGtIdHRwc1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRh
dGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgZ19hc3NlcnQo
dGVzdC0+bV9sb2FkRmFpbGVkKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX2xvYWRFdmVudHMuY29u
dGFpbnMoTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkRmFpbGVkKSk7Ci0gICAgZ19h
c3NlcnQoIXRlc3QtPm1fbG9hZEV2ZW50cy5jb250YWlucyhMb2FkVHJhY2tpbmdUZXN0OjpMb2Fk
Q29tbWl0dGVkKSk7Ci19Ci0KLWNsYXNzIFRMU0Vycm9yc1Rlc3Q6IHB1YmxpYyBTU0xUZXN0IHsK
LXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFRMU0Vycm9yc1Rlc3QpOwotCi0g
ICAgVExTRXJyb3JzVGVzdCgpCi0gICAgewotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2Vi
VmlldywgImxvYWQtZmFpbGVkLXdpdGgtdGxzLWVycm9ycyIsIEdfQ0FMTEJBQ0socnVuTG9hZEZh
aWxlZFdpdGhUTFNFcnJvcnNDYWxsYmFjayksIHRoaXMpOwotICAgIH0KLQotICAgIH5UTFNFcnJv
cnNUZXN0KCkKLSAgICB7Ci0gICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0
Y2hlZChtX3dlYlZpZXcsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOwot
ICAgICAgICBpZiAobV9jZXJ0aWZpY2F0ZUluZm8pCi0gICAgICAgICAgICB3ZWJraXRfY2VydGlm
aWNhdGVfaW5mb19mcmVlKG1fY2VydGlmaWNhdGVJbmZvKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMg
Z2Jvb2xlYW4gcnVuTG9hZEZhaWxlZFdpdGhUTFNFcnJvcnNDYWxsYmFjayhXZWJLaXRXZWJWaWV3
KiwgV2ViS2l0Q2VydGlmaWNhdGVJbmZvKiBpbmZvLCBjb25zdCBjaGFyKiBob3N0LCBUTFNFcnJv
cnNUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+cnVuTG9hZEZhaWxlZFdpdGhUTFNF
cnJvcnMoaW5mbywgaG9zdCk7Ci0gICAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQotICAgIHZv
aWQgcnVuTG9hZEZhaWxlZFdpdGhUTFNFcnJvcnMoV2ViS2l0Q2VydGlmaWNhdGVJbmZvKiBpbmZv
LCBjb25zdCBjaGFyKiBob3N0KQotICAgIHsKLSAgICAgICAgaWYgKG1fY2VydGlmaWNhdGVJbmZv
KQotICAgICAgICAgICAgd2Via2l0X2NlcnRpZmljYXRlX2luZm9fZnJlZShtX2NlcnRpZmljYXRl
SW5mbyk7Ci0gICAgICAgIG1fY2VydGlmaWNhdGVJbmZvID0gd2Via2l0X2NlcnRpZmljYXRlX2lu
Zm9fY29weShpbmZvKTsKLSAgICAgICAgbV9ob3N0LnNldChnX3N0cmR1cChob3N0KSk7Ci0gICAg
ICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgdm9pZCB3YWl0
VW50aWxMb2FkRmFpbGVkV2l0aFRMU0Vycm9ycygpCi0gICAgewotICAgICAgICBnX21haW5fbG9v
cF9ydW4obV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgV2ViS2l0Q2VydGlmaWNhdGVJbmZvKiBj
ZXJ0aWZpY2F0ZUluZm8oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fY2VydGlmaWNhdGVJbmZv
OwotICAgIH0KLQotICAgIGNvbnN0IGNoYXIqIGhvc3QoKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1faG9zdC5nZXQoKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgV2ViS2l0Q2VydGlmaWNhdGVJ
bmZvKiBtX2NlcnRpZmljYXRlSW5mbzsKLSAgICBHT3duUHRyPGNoYXI+IG1faG9zdDsKLX07Ci0K
LXN0YXRpYyB2b2lkIHRlc3RMb2FkRmFpbGVkV2l0aFRMU0Vycm9ycyhUTFNFcnJvcnNUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQgPSB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQodGVzdC0+bV93ZWJWaWV3KTsKLSAgICB3ZWJraXRf
d2ViX2NvbnRleHRfc2V0X3Rsc19lcnJvcnNfcG9saWN5KGNvbnRleHQsIFdFQktJVF9UTFNfRVJS
T1JTX1BPTElDWV9GQUlMKTsKLQotICAgIC8vIFRoZSBsb2FkLWZhaWxlZC13aXRoLXRscy1lcnJv
cnMgc2lnbmFsIHNob3VsZCBiZSBlbWl0dGVkIHdoZW4gdGhlcmUgaXMgYSBUTFMgZmFpbHVyZS4K
LSAgICB0ZXN0LT5sb2FkVVJJKGtIdHRwc1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3Rlc3QtdGxz
LyIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZhaWxlZFdpdGhUTFNFcnJvcnMo
KTsKLSAgICAvLyBUZXN0IHRoZSBXZWJLaXRDZXJ0aWZpY2F0ZUluZm8gQVBJLgotICAgIGdfYXNz
ZXJ0KEdfSVNfVExTX0NFUlRJRklDQVRFKHdlYmtpdF9jZXJ0aWZpY2F0ZV9pbmZvX2dldF90bHNf
Y2VydGlmaWNhdGUodGVzdC0+Y2VydGlmaWNhdGVJbmZvKCkpKSk7Ci0gICAgZ19hc3NlcnRfY21w
dWludCh3ZWJraXRfY2VydGlmaWNhdGVfaW5mb19nZXRfdGxzX2Vycm9ycyh0ZXN0LT5jZXJ0aWZp
Y2F0ZUluZm8oKSksID09LCBHX1RMU19DRVJUSUZJQ0FURV9VTktOT1dOX0NBKTsKLSAgICBnX2Fz
c2VydF9jbXBzdHIodGVzdC0+aG9zdCgpLCA9PSwgc291cF91cmlfZ2V0X2hvc3Qoa0h0dHBzU2Vy
dmVyLT5iYXNlVVJJKCkpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRz
WzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7Ci0gICAg
Z19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rl
c3Q6OkxvYWRGaW5pc2hlZCk7Ci0KLSAgICAvLyBUZXN0IGFsbG93aW5nIGFuIGV4Y2VwdGlvbiBm
b3IgdGhpcyBjZXJ0aWZpY2F0ZSBvbiB0aGlzIGhvc3QuCi0gICAgd2Via2l0X3dlYl9jb250ZXh0
X2FsbG93X3Rsc19jZXJ0aWZpY2F0ZV9mb3JfaG9zdChjb250ZXh0LCB0ZXN0LT5jZXJ0aWZpY2F0
ZUluZm8oKSwgdGVzdC0+aG9zdCgpKTsKLSAgICAvLyBUaGUgcGFnZSBzaG91bGQgbm93IGxvYWQg
d2l0aG91dCBlcnJvcnMuCi0gICAgdGVzdC0+bG9hZFVSSShrSHR0cHNTZXJ2ZXItPmdldFVSSUZv
clBhdGgoIi90ZXN0LXRscy8iKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5p
c2hlZCgpOwotCi0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1swXSwgPT0s
IExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOwotICAgIGdfYXNzZXJ0
X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2Fk
Q29tbWl0dGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzJdLCA9
PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIo
d2Via2l0X3dlYl92aWV3X2dldF90aXRsZSh0ZXN0LT5tX3dlYlZpZXcpLCA9PSwgVExTRXhwZWN0
ZWRTdWNjZXNzVGl0bGUpOwotfQotCi0KLXN0YXRpYyB2b2lkIGh0dHBzU2VydmVyQ2FsbGJhY2so
U291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0
aCwgR0hhc2hUYWJsZSosIFNvdXBDbGllbnRDb250ZXh0KiwgZ3BvaW50ZXIpCi17Ci0gICAgaWYg
KG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKLSAgICAgICAgc291cF9tZXNz
YWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiLyIpKSB7
Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09L
KTsKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2Jv
ZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgaW5kZXhIVE1MLCBzdHJsZW4oaW5kZXhIVE1MKSk7Ci0g
ICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkp
OwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9pbnNlY3VyZS1jb250ZW50LyIp
KSB7Ci0gICAgICAgIEdPd25QdHI8Y2hhcj4gcmVzcG9uc2VIVE1MKGdfc3RyZHVwX3ByaW50Zihp
bnNlY3VyZUNvbnRlbnRIVE1MLCBrSHR0cFNlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3Rlc3Qtc2Ny
aXB0IikuZGF0YSgpLCBrSHR0cFNlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3Rlc3QtaW1hZ2UiKS5k
YXRhKCkpKTsKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3Bv
bnNlX2JvZHksIFNPVVBfTUVNT1JZX0NPUFksIHJlc3BvbnNlSFRNTC5nZXQoKSwgc3RybGVuKHJl
c3BvbnNlSFRNTC5nZXQoKSkpOwotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNz
YWdlLCBTT1VQX1NUQVRVU19PSyk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRl
KG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0
aCwgIi90ZXN0LXRscy8iKSkgewotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNz
YWdlLCBTT1VQX1NUQVRVU19PSyk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZCht
ZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIFRMU1N1Y2Nlc3NIVE1M
U3RyaW5nLCBzdHJsZW4oVExTU3VjY2Vzc0hUTUxTdHJpbmcpKTsKLSAgICAgICAgc291cF9tZXNz
YWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7Ci0gICAgfSBlbHNlCi0g
ICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9G
T1VORCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGh0dHBTZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBz
ZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxl
KiwgU291cENsaWVudENvbnRleHQqLCBncG9pbnRlcikKLXsKLSAgICBpZiAobWVzc2FnZS0+bWV0
aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgewotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1
cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvdGVzdC1zY3JpcHQiKSkgewot
ICAgICAgICBHT3duUHRyPGNoYXI+IHBhdGhUb0ZpbGUoZ19idWlsZF9maWxlbmFtZShUZXN0Ojpn
ZXRSZXNvdXJjZXNEaXIoKS5kYXRhKCksICJsaW5rLXRpdGxlLmpzIiwgTlVMTCkpOwotICAgICAg
ICBjaGFyKiBjb250ZW50czsKLSAgICAgICAgZ3NpemUgbGVuZ3RoOwotICAgICAgICBnX2ZpbGVf
Z2V0X2NvbnRlbnRzKHBhdGhUb0ZpbGUuZ2V0KCksICZjb250ZW50cywgJmxlbmd0aCwgMCk7Ci0K
LSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHks
IFNPVVBfTUVNT1JZX1RBS0UsIGNvbnRlbnRzLCBsZW5ndGgpOwotICAgICAgICBzb3VwX21lc3Nh
Z2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7Ci0gICAgICAgIHNvdXBfbWVz
c2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOwotICAgIH0gZWxzZSBp
ZiAoZ19zdHJfZXF1YWwocGF0aCwgIi90ZXN0LWltYWdlIikpIHsKLSAgICAgICAgR093blB0cjxj
aGFyPiBwYXRoVG9GaWxlKGdfYnVpbGRfZmlsZW5hbWUoVGVzdDo6Z2V0V2ViS2l0MVRlc3RSZXNv
dWNlc0RpcigpLmRhdGEoKSwgImJsYW5rLmljbyIsIE5VTEwpKTsKLSAgICAgICAgY2hhciogY29u
dGVudHM7Ci0gICAgICAgIGdzaXplIGxlbmd0aDsKLSAgICAgICAgZ19maWxlX2dldF9jb250ZW50
cyhwYXRoVG9GaWxlLmdldCgpLCAmY29udGVudHMsICZsZW5ndGgsIDApOwotCi0gICAgICAgIHNv
dXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9S
WV9UQUtFLCBjb250ZW50cywgbGVuZ3RoKTsKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0
dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOwotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9j
b21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKLSAgICB9IGVsc2UKLSAgICAgICAgc291
cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0ZPVU5EKTsKLX0K
LQotdm9pZCBiZWZvcmVBbGwoKQotewotICAgIGtIdHRwc1NlcnZlciA9IG5ldyBXZWJLaXRUZXN0
U2VydmVyKFdlYktpdFRlc3RTZXJ2ZXI6OlNlcnZlckhUVFBTKTsKLSAgICBrSHR0cHNTZXJ2ZXIt
PnJ1bihodHRwc1NlcnZlckNhbGxiYWNrKTsKLQotICAgIGtIdHRwU2VydmVyID0gbmV3IFdlYktp
dFRlc3RTZXJ2ZXIoV2ViS2l0VGVzdFNlcnZlcjo6U2VydmVySFRUUCk7Ci0gICAga0h0dHBTZXJ2
ZXItPnJ1bihodHRwU2VydmVyQ2FsbGJhY2spOwotCi0gICAgU1NMVGVzdDo6YWRkKCJXZWJLaXRX
ZWJWaWV3IiwgInNzbCIsIHRlc3RTU0wpOwotICAgIEluc2VjdXJlQ29udGVudFRlc3Q6OmFkZCgi
V2ViS2l0V2ViVmlldyIsICJpbnNlY3VyZS1jb250ZW50IiwgdGVzdEluc2VjdXJlQ29udGVudCk7
Ci0gICAgLy8gSW4gdGhpcyBjYXNlIHRoZSBvcmRlciBvZiB0aGUgdGVzdHMgZG9lcyBtYXR0ZXIg
YmVjYXVzZSB0bHMtZXJyb3JzLXBvbGljeSB0ZXN0cyB0aGUgZGVmYXVsdCBwb2xpY3ksCi0gICAg
Ly8gYW5kIGV4cGVjdHMgdGhhdCBubyBleGNlcHRpb24gd2lsbCBoYXZlIGJlZW4gYWRkZWQgZm9y
IHRoaXMgY2VydGlmaWNhdGUgYW5kIGhvc3QgcGFpciBhcyBpcwotICAgIC8vIGRvbmUgaW4gdGhl
IHRscy1wZXJtaXNzaW9uLXJlcXVlc3QgdGVzdC4KLSAgICBTU0xUZXN0OjphZGQoIldlYktpdFdl
YlZpZXciLCAidGxzLWVycm9ycy1wb2xpY3kiLCB0ZXN0VExTRXJyb3JzUG9saWN5KTsKLSAgICBU
TFNFcnJvcnNUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAibG9hZC1mYWlsZWQtd2l0aC10bHMt
ZXJyb3JzIiwgdGVzdExvYWRGYWlsZWRXaXRoVExTRXJyb3JzKTsKLX0KLQotdm9pZCBhZnRlckFs
bCgpCi17Ci0gICAgZGVsZXRlIGtIdHRwc1NlcnZlcjsKLSAgICBkZWxldGUga0h0dHBTZXJ2ZXI7
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9U
ZXN0VUlDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
VGVzdFVJQ2xpZW50LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmMzMGQ2ZC4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0
VUlDbGllbnQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjc5ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
IHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJXZWJWaWV3VGVzdC5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3Rm
L2dvYmplY3QvR1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLQot
c3RhdGljIGNvbnN0IGNoYXIqIGtBbGVydERpYWxvZ01lc3NhZ2UgPSAiV2ViS2l0R1RLKyBhbGVy
dCBkaWFsb2cgbWVzc2FnZSI7Ci1zdGF0aWMgY29uc3QgY2hhcioga0NvbmZpcm1EaWFsb2dNZXNz
YWdlID0gIldlYktpdEdUSysgY29uZmlybSBkaWFsb2cgbWVzc2FnZSI7Ci1zdGF0aWMgY29uc3Qg
Y2hhcioga1Byb21wdERpYWxvZ01lc3NhZ2UgPSAiV2ViS2l0R1RLKyBwcm9tcHQgZGlhbG9nIG1l
c3NhZ2UiOwotc3RhdGljIGNvbnN0IGNoYXIqIGtQcm9tcHREaWFsb2dSZXR1cm5lZFRleHQgPSAi
V2ViS2l0R1RLKyBwcm9tcHQgZGlhbG9nIHJldHVybmVkIHRleHQiOwotCi1jbGFzcyBVSUNsaWVu
dFRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1Rf
RklYVFVSRShVSUNsaWVudFRlc3QpOwotCi0gICAgZW51bSBXZWJWaWV3RXZlbnRzIHsKLSAgICAg
ICAgQ3JlYXRlLAotICAgICAgICBSZWFkeVRvU2hvdywKLSAgICAgICAgUnVuQXNNb2RhbCwKLSAg
ICAgICAgQ2xvc2UKLSAgICB9OwotCi0gICAgY2xhc3MgV2luZG93UHJvcGVydGllcyB7Ci0gICAg
cHVibGljOgotICAgICAgICBXaW5kb3dQcm9wZXJ0aWVzKCkKLSAgICAgICAgICAgIDogbV9pc051
bGwodHJ1ZSkKLSAgICAgICAgICAgICwgbV90b29sYmFyVmlzaWJsZSh0cnVlKQotICAgICAgICAg
ICAgLCBtX3N0YXR1c2JhclZpc2libGUodHJ1ZSkKLSAgICAgICAgICAgICwgbV9zY3JvbGxiYXJz
VmlzaWJsZSh0cnVlKQotICAgICAgICAgICAgLCBtX21lbnViYXJWaXNpYmxlKHRydWUpCi0gICAg
ICAgICAgICAsIG1fbG9jYXRpb25iYXJWaXNpYmxlKHRydWUpCi0gICAgICAgICAgICAsIG1fcmVz
aXphYmxlKHRydWUpCi0gICAgICAgICAgICAsIG1fZnVsbHNjcmVlbihmYWxzZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgbWVtc2V0KCZtX2dlb21ldHJ5LCAwLCBzaXplb2YoR2RrUmVjdGFuZ2xl
KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBXaW5kb3dQcm9wZXJ0aWVzKFdlYktpdFdpbmRvd1By
b3BlcnRpZXMqIHdpbmRvd1Byb3BlcnRpZXMpCi0gICAgICAgICAgICA6IG1faXNOdWxsKGZhbHNl
KQotICAgICAgICAgICAgLCBtX3Rvb2xiYXJWaXNpYmxlKHdlYmtpdF93aW5kb3dfcHJvcGVydGll
c19nZXRfdG9vbGJhcl92aXNpYmxlKHdpbmRvd1Byb3BlcnRpZXMpKQotICAgICAgICAgICAgLCBt
X3N0YXR1c2JhclZpc2libGUod2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF9zdGF0dXNiYXJf
dmlzaWJsZSh3aW5kb3dQcm9wZXJ0aWVzKSkKLSAgICAgICAgICAgICwgbV9zY3JvbGxiYXJzVmlz
aWJsZSh3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X3Njcm9sbGJhcnNfdmlzaWJsZSh3aW5k
b3dQcm9wZXJ0aWVzKSkKLSAgICAgICAgICAgICwgbV9tZW51YmFyVmlzaWJsZSh3ZWJraXRfd2lu
ZG93X3Byb3BlcnRpZXNfZ2V0X21lbnViYXJfdmlzaWJsZSh3aW5kb3dQcm9wZXJ0aWVzKSkKLSAg
ICAgICAgICAgICwgbV9sb2NhdGlvbmJhclZpc2libGUod2Via2l0X3dpbmRvd19wcm9wZXJ0aWVz
X2dldF9sb2NhdGlvbmJhcl92aXNpYmxlKHdpbmRvd1Byb3BlcnRpZXMpKQotICAgICAgICAgICAg
LCBtX3Jlc2l6YWJsZSh3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X3Jlc2l6YWJsZSh3aW5k
b3dQcm9wZXJ0aWVzKSkKLSAgICAgICAgICAgICwgbV9mdWxsc2NyZWVuKHdlYmtpdF93aW5kb3df
cHJvcGVydGllc19nZXRfZnVsbHNjcmVlbih3aW5kb3dQcm9wZXJ0aWVzKSkKLSAgICAgICAgewot
ICAgICAgICAgICAgd2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF9nZW9tZXRyeSh3aW5kb3dQ
cm9wZXJ0aWVzLCAmbV9nZW9tZXRyeSk7Ci0gICAgICAgIH0KLQotICAgICAgICBXaW5kb3dQcm9w
ZXJ0aWVzKEdka1JlY3RhbmdsZSogZ2VvbWV0cnksIGJvb2wgdG9vbGJhclZpc2libGUsIGJvb2wg
c3RhdHVzYmFyVmlzaWJsZSwgYm9vbCBzY3JvbGxiYXJzVmlzaWJsZSwgYm9vbCBtZW51YmFyVmlz
aWJsZSwgYm9vbCBsb2NhdGlvbmJhclZpc2libGUsIGJvb2wgcmVzaXphYmxlLCBib29sIGZ1bGxz
Y3JlZW4pCi0gICAgICAgICAgICA6IG1faXNOdWxsKGZhbHNlKQotICAgICAgICAgICAgLCBtX2dl
b21ldHJ5KCpnZW9tZXRyeSkKLSAgICAgICAgICAgICwgbV90b29sYmFyVmlzaWJsZSh0b29sYmFy
VmlzaWJsZSkKLSAgICAgICAgICAgICwgbV9zdGF0dXNiYXJWaXNpYmxlKHN0YXR1c2JhclZpc2li
bGUpCi0gICAgICAgICAgICAsIG1fc2Nyb2xsYmFyc1Zpc2libGUoc2Nyb2xsYmFyc1Zpc2libGUp
Ci0gICAgICAgICAgICAsIG1fbWVudWJhclZpc2libGUobWVudWJhclZpc2libGUpCi0gICAgICAg
ICAgICAsIG1fbG9jYXRpb25iYXJWaXNpYmxlKGxvY2F0aW9uYmFyVmlzaWJsZSkKLSAgICAgICAg
ICAgICwgbV9yZXNpemFibGUocmVzaXphYmxlKQotICAgICAgICAgICAgLCBtX2Z1bGxzY3JlZW4o
ZnVsbHNjcmVlbikKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBpc051bGwo
KSBjb25zdCB7IHJldHVybiBtX2lzTnVsbDsgfQotCi0gICAgICAgIHZvaWQgYXNzZXJ0RXF1YWwo
Y29uc3QgV2luZG93UHJvcGVydGllcyYgb3RoZXIpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIGdfYXNzZXJ0X2NtcGludChtX2dlb21ldHJ5LngsID09LCBvdGhlci5tX2dlb21ldHJ5Lngp
OwotICAgICAgICAgICAgZ19hc3NlcnRfY21waW50KG1fZ2VvbWV0cnkueSwgPT0sIG90aGVyLm1f
Z2VvbWV0cnkueSk7Ci0gICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQobV9nZW9tZXRyeS53aWR0
aCwgPT0sIG90aGVyLm1fZ2VvbWV0cnkud2lkdGgpOwotICAgICAgICAgICAgZ19hc3NlcnRfY21w
aW50KG1fZ2VvbWV0cnkuaGVpZ2h0LCA9PSwgb3RoZXIubV9nZW9tZXRyeS5oZWlnaHQpOwotICAg
ICAgICAgICAgZ19hc3NlcnRfY21waW50KHN0YXRpY19jYXN0PGludD4obV90b29sYmFyVmlzaWJs
ZSksID09LCBzdGF0aWNfY2FzdDxpbnQ+KG90aGVyLm1fdG9vbGJhclZpc2libGUpKTsKLSAgICAg
ICAgICAgIGdfYXNzZXJ0X2NtcGludChzdGF0aWNfY2FzdDxpbnQ+KG1fc3RhdHVzYmFyVmlzaWJs
ZSksID09LCBzdGF0aWNfY2FzdDxpbnQ+KG90aGVyLm1fc3RhdHVzYmFyVmlzaWJsZSkpOwotICAg
ICAgICAgICAgZ19hc3NlcnRfY21waW50KHN0YXRpY19jYXN0PGludD4obV9zY3JvbGxiYXJzVmlz
aWJsZSksID09LCBzdGF0aWNfY2FzdDxpbnQ+KG90aGVyLm1fc2Nyb2xsYmFyc1Zpc2libGUpKTsK
LSAgICAgICAgICAgIGdfYXNzZXJ0X2NtcGludChzdGF0aWNfY2FzdDxpbnQ+KG1fbWVudWJhclZp
c2libGUpLCA9PSwgc3RhdGljX2Nhc3Q8aW50PihvdGhlci5tX21lbnViYXJWaXNpYmxlKSk7Ci0g
ICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQoc3RhdGljX2Nhc3Q8aW50PihtX2xvY2F0aW9uYmFy
VmlzaWJsZSksID09LCBzdGF0aWNfY2FzdDxpbnQ+KG90aGVyLm1fbG9jYXRpb25iYXJWaXNpYmxl
KSk7Ci0gICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQoc3RhdGljX2Nhc3Q8aW50PihtX3Jlc2l6
YWJsZSksID09LCBzdGF0aWNfY2FzdDxpbnQ+KG90aGVyLm1fcmVzaXphYmxlKSk7Ci0gICAgICAg
ICAgICBnX2Fzc2VydF9jbXBpbnQoc3RhdGljX2Nhc3Q8aW50PihtX2Z1bGxzY3JlZW4pLCA9PSwg
c3RhdGljX2Nhc3Q8aW50PihvdGhlci5tX2Z1bGxzY3JlZW4pKTsKLSAgICAgICAgfQotCi0gICAg
cHJpdmF0ZToKLSAgICAgICAgYm9vbCBtX2lzTnVsbDsKLQotICAgICAgICBHZGtSZWN0YW5nbGUg
bV9nZW9tZXRyeTsKLQotICAgICAgICBib29sIG1fdG9vbGJhclZpc2libGU7Ci0gICAgICAgIGJv
b2wgbV9zdGF0dXNiYXJWaXNpYmxlOwotICAgICAgICBib29sIG1fc2Nyb2xsYmFyc1Zpc2libGU7
Ci0gICAgICAgIGJvb2wgbV9tZW51YmFyVmlzaWJsZTsKLSAgICAgICAgYm9vbCBtX2xvY2F0aW9u
YmFyVmlzaWJsZTsKLQotICAgICAgICBib29sIG1fcmVzaXphYmxlOwotICAgICAgICBib29sIG1f
ZnVsbHNjcmVlbjsKLSAgICB9OwotCi0gICAgc3RhdGljIHZvaWQgd2luZG93UHJvcGVydGllc05v
dGlmeUNhbGxiYWNrKEdPYmplY3QqLCBHUGFyYW1TcGVjKiBwYXJhbVNwZWMsIFVJQ2xpZW50VGVz
dCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHRlc3QtPm1fd2luZG93UHJvcGVydGllc0NoYW5nZWQu
YWRkKGdfcGFyYW1fc3BlY19nZXRfbmFtZShwYXJhbVNwZWMpKTsKLSAgICB9Ci0KLSAgICBzdGF0
aWMgR3RrV2lkZ2V0KiB2aWV3Q3JlYXRlQ2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywg
VUlDbGllbnRUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRlc3QtPnZpZXdDcmVh
dGUod2ViVmlldyk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgdmlld1JlYWR5VG9TaG93Q2Fs
bGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgVUlDbGllbnRUZXN0KiB0ZXN0KQotICAgIHsK
LSAgICAgICAgdGVzdC0+dmlld1JlYWR5VG9TaG93KHdlYlZpZXcpOwotICAgIH0KLQotICAgIHN0
YXRpYyB2b2lkIHZpZXdDbG9zZUNhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFVJQ2xp
ZW50VGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHRlc3QtPnZpZXdDbG9zZSh3ZWJWaWV3KTsK
LSAgICB9Ci0KLSAgICB2b2lkIHNjcmlwdEFsZXJ0KFdlYktpdFNjcmlwdERpYWxvZyogZGlhbG9n
KQotICAgIHsKLSAgICAgICAgc3dpdGNoIChtX3NjcmlwdERpYWxvZ1R5cGUpIHsKLSAgICAgICAg
Y2FzZSBXRUJLSVRfU0NSSVBUX0RJQUxPR19BTEVSVDoKLSAgICAgICAgICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfc2NyaXB0X2RpYWxvZ19nZXRfbWVzc2FnZShkaWFsb2cpLCA9PSwga0FsZXJ0
RGlhbG9nTWVzc2FnZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXRUJLSVRf
U0NSSVBUX0RJQUxPR19DT05GSVJNOgotICAgICAgICAgICAgZ19hc3NlcnQobV9zY3JpcHREaWFs
b2dDb25maXJtZWQpOwotICAgICAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zY3JpcHRf
ZGlhbG9nX2dldF9tZXNzYWdlKGRpYWxvZyksID09LCAiY29uZmlybWVkIik7Ci0KLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdFQktJVF9TQ1JJUFRfRElBTE9HX1BST01QVDoKLSAg
ICAgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2NyaXB0X2RpYWxvZ19nZXRfbWVzc2Fn
ZShkaWFsb2cpLCA9PSwga1Byb21wdERpYWxvZ1JldHVybmVkVGV4dCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7
Ci0gICAgfQotCi0gICAgdm9pZCBzY3JpcHRDb25maXJtKFdlYktpdFNjcmlwdERpYWxvZyogZGlh
bG9nKQotICAgIHsKLSAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zY3JpcHRfZGlhbG9n
X2dldF9tZXNzYWdlKGRpYWxvZyksID09LCBrQ29uZmlybURpYWxvZ01lc3NhZ2UpOwotICAgICAg
ICBtX3NjcmlwdERpYWxvZ0NvbmZpcm1lZCA9ICFtX3NjcmlwdERpYWxvZ0NvbmZpcm1lZDsKLSAg
ICAgICAgd2Via2l0X3NjcmlwdF9kaWFsb2dfY29uZmlybV9zZXRfY29uZmlybWVkKGRpYWxvZywg
bV9zY3JpcHREaWFsb2dDb25maXJtZWQpOwotICAgIH0KLQotICAgIHZvaWQgc2NyaXB0UHJvbXB0
KFdlYktpdFNjcmlwdERpYWxvZyogZGlhbG9nKQotICAgIHsKLSAgICAgICAgZ19hc3NlcnRfY21w
c3RyKHdlYmtpdF9zY3JpcHRfZGlhbG9nX2dldF9tZXNzYWdlKGRpYWxvZyksID09LCBrUHJvbXB0
RGlhbG9nTWVzc2FnZSk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2NyaXB0X2Rp
YWxvZ19wcm9tcHRfZ2V0X2RlZmF1bHRfdGV4dChkaWFsb2cpLCA9PSwgImRlZmF1bHQiKTsKLSAg
ICAgICAgd2Via2l0X3NjcmlwdF9kaWFsb2dfcHJvbXB0X3NldF90ZXh0KGRpYWxvZywga1Byb21w
dERpYWxvZ1JldHVybmVkVGV4dCk7Ci0gICAgfQotCi0gICAgc3RhdGljIGdib29sZWFuIHNjcmlw
dERpYWxvZyhXZWJLaXRXZWJWaWV3KiwgV2ViS2l0U2NyaXB0RGlhbG9nKiBkaWFsb2csIFVJQ2xp
ZW50VGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAod2Via2l0X3NjcmlwdF9kaWFs
b2dfZ2V0X2RpYWxvZ190eXBlKGRpYWxvZykpIHsKLSAgICAgICAgY2FzZSBXRUJLSVRfU0NSSVBU
X0RJQUxPR19BTEVSVDoKLSAgICAgICAgICAgIHRlc3QtPnNjcmlwdEFsZXJ0KGRpYWxvZyk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXRUJLSVRfU0NSSVBUX0RJQUxPR19DT05G
SVJNOgotICAgICAgICAgICAgdGVzdC0+c2NyaXB0Q29uZmlybShkaWFsb2cpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV0VCS0lUX1NDUklQVF9ESUFMT0dfUFJPTVBUOgotICAg
ICAgICAgICAgdGVzdC0+c2NyaXB0UHJvbXB0KGRpYWxvZyk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQotICAgIHN0YXRpYyB2
b2lkIG1vdXNlVGFyZ2V0Q2hhbmdlZChXZWJLaXRXZWJWaWV3KiwgV2ViS2l0SGl0VGVzdFJlc3Vs
dCogaGl0VGVzdFJlc3VsdCwgZ3VpbnQgbW9kaWZpZXJzLCBVSUNsaWVudFRlc3QqIHRlc3QpCi0g
ICAgewotICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfSElUX1RFU1RfUkVTVUxUKGhpdFRlc3RS
ZXN1bHQpKTsKLSAgICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5p
c2hlcyhHX09CSkVDVChoaXRUZXN0UmVzdWx0KSk7Ci0KLSAgICAgICAgdGVzdC0+bV9tb3VzZVRh
cmdldEhpdFRlc3RSZXN1bHQgPSBoaXRUZXN0UmVzdWx0OwotICAgICAgICB0ZXN0LT5tX21vdXNl
VGFyZ2V0TW9kaWZpZXJzID0gbW9kaWZpZXJzOwotICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRl
c3QtPm1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiBwZXJtaXNzaW9u
UmVxdWVzdGVkKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRQZXJtaXNzaW9uUmVxdWVzdCogcmVxdWVz
dCwgVUlDbGllbnRUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lT
X1BFUk1JU1NJT05fUkVRVUVTVChyZXF1ZXN0KSk7Ci0gICAgICAgIHRlc3QtPmFzc2VydE9iamVj
dElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QocmVxdWVzdCkpOwotCi0gICAgICAg
IGlmICh0ZXN0LT5tX2FsbG93UGVybWlzc2lvblJlcXVlc3RzKQotICAgICAgICAgICAgd2Via2l0
X3Blcm1pc3Npb25fcmVxdWVzdF9hbGxvdyhyZXF1ZXN0KTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgd2Via2l0X3Blcm1pc3Npb25fcmVxdWVzdF9kZW55KHJlcXVlc3QpOwotCi0gICAgICAg
IHJldHVybiBUUlVFOwotICAgIH0KLQotICAgIFVJQ2xpZW50VGVzdCgpCi0gICAgICAgIDogbV9z
Y3JpcHREaWFsb2dUeXBlKFdFQktJVF9TQ1JJUFRfRElBTE9HX0FMRVJUKQotICAgICAgICAsIG1f
c2NyaXB0RGlhbG9nQ29uZmlybWVkKHRydWUpCi0gICAgICAgICwgbV9hbGxvd1Blcm1pc3Npb25S
ZXF1ZXN0cyhmYWxzZSkKLSAgICAgICAgLCBtX21vdXNlVGFyZ2V0TW9kaWZpZXJzKDApCi0gICAg
ewotICAgICAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2phdmFzY3JpcHRfY2FuX29wZW5fd2luZG93
c19hdXRvbWF0aWNhbGx5KHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3MobV93ZWJWaWV3KSwg
VFJVRSk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAiY3JlYXRlIiwgR19D
QUxMQkFDSyh2aWV3Q3JlYXRlQ2FsbGJhY2spLCB0aGlzKTsKLSAgICAgICAgZ19zaWduYWxfY29u
bmVjdChtX3dlYlZpZXcsICJzY3JpcHQtZGlhbG9nIiwgR19DQUxMQkFDSyhzY3JpcHREaWFsb2cp
LCB0aGlzKTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJtb3VzZS10YXJn
ZXQtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sobW91c2VUYXJnZXRDaGFuZ2VkKSwgdGhpcyk7Ci0gICAg
ICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAicGVybWlzc2lvbi1yZXF1ZXN0IiwgR19D
QUxMQkFDSyhwZXJtaXNzaW9uUmVxdWVzdGVkKSwgdGhpcyk7Ci0gICAgfQotCi0gICAgflVJQ2xp
ZW50VGVzdCgpCi0gICAgewotICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21h
dGNoZWQobV93ZWJWaWV3LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsK
LSAgICB9Ci0KLSAgICB2b2lkIHdhaXRVbnRpbE1haW5Mb29wRmluaXNoZXMoKQotICAgIHsKLSAg
ICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIHZvaWQgc2V0
RXhwZWN0ZWRXaW5kb3dQcm9wZXJ0aWVzKGNvbnN0IFdpbmRvd1Byb3BlcnRpZXMmIHdpbmRvd1By
b3BlcnRpZXMpCi0gICAgewotICAgICAgICBtX3dpbmRvd1Byb3BlcnRpZXMgPSB3aW5kb3dQcm9w
ZXJ0aWVzOwotICAgIH0KLQotICAgIFdlYktpdEhpdFRlc3RSZXN1bHQqIG1vdmVNb3VzZUFuZFdh
aXRVbnRpbE1vdXNlVGFyZ2V0Q2hhbmdlZChpbnQgeCwgaW50IHksIHVuc2lnbmVkIG1vdXNlTW9k
aWZpZXJzID0gMCkKLSAgICB7Ci0gICAgICAgIG1vdXNlTW92ZVRvKHgsIHksIG1vdXNlTW9kaWZp
ZXJzKTsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotICAgICAgICByZXR1
cm4gbV9tb3VzZVRhcmdldEhpdFRlc3RSZXN1bHQuZ2V0KCk7Ci0gICAgfQotCi0gICAgdmlydHVh
bCBHdGtXaWRnZXQqIHZpZXdDcmVhdGUoV2ViS2l0V2ViVmlldyogd2ViVmlldykKLSAgICB7Ci0g
ICAgICAgIGdfYXNzZXJ0KHdlYlZpZXcgPT0gbV93ZWJWaWV3KTsKLQotICAgICAgICBHdGtXaWRn
ZXQqIG5ld1dlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3X3dpdGhfY29udGV4dCh3ZWJraXRf
d2ViX3ZpZXdfZ2V0X2NvbnRleHQod2ViVmlldykpOwotICAgICAgICBnX29iamVjdF9yZWZfc2lu
ayhuZXdXZWJWaWV3KTsKLQotICAgICAgICBtX3dlYlZpZXdFdmVudHMuYXBwZW5kKENyZWF0ZSk7
Ci0KLSAgICAgICAgV2ViS2l0V2luZG93UHJvcGVydGllcyogd2luZG93UHJvcGVydGllcyA9IHdl
YmtpdF93ZWJfdmlld19nZXRfd2luZG93X3Byb3BlcnRpZXMoV0VCS0lUX1dFQl9WSUVXKG5ld1dl
YlZpZXcpKTsKLSAgICAgICAgZ19hc3NlcnQod2luZG93UHJvcGVydGllcyk7Ci0gICAgICAgIGFz
c2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1Qod2luZG93UHJvcGVy
dGllcykpOwotICAgICAgICBtX3dpbmRvd1Byb3BlcnRpZXNDaGFuZ2VkLmNsZWFyKCk7Ci0KLSAg
ICAgICAgZ19zaWduYWxfY29ubmVjdCh3aW5kb3dQcm9wZXJ0aWVzLCAibm90aWZ5IiwgR19DQUxM
QkFDSyh3aW5kb3dQcm9wZXJ0aWVzTm90aWZ5Q2FsbGJhY2spLCB0aGlzKTsKLSAgICAgICAgZ19z
aWduYWxfY29ubmVjdChuZXdXZWJWaWV3LCAicmVhZHktdG8tc2hvdyIsIEdfQ0FMTEJBQ0sodmll
d1JlYWR5VG9TaG93Q2FsbGJhY2spLCB0aGlzKTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChu
ZXdXZWJWaWV3LCAiY2xvc2UiLCBHX0NBTExCQUNLKHZpZXdDbG9zZUNhbGxiYWNrKSwgdGhpcyk7
Ci0KLSAgICAgICAgcmV0dXJuIG5ld1dlYlZpZXc7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lk
IHZpZXdSZWFkeVRvU2hvdyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQotICAgIHsKLSAgICAgICAg
Z19hc3NlcnQod2ViVmlldyAhPSBtX3dlYlZpZXcpOwotCi0gICAgICAgIFdlYktpdFdpbmRvd1By
b3BlcnRpZXMqIHdpbmRvd1Byb3BlcnRpZXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19w
cm9wZXJ0aWVzKHdlYlZpZXcpOwotICAgICAgICBnX2Fzc2VydCh3aW5kb3dQcm9wZXJ0aWVzKTsK
LSAgICAgICAgaWYgKCFtX3dpbmRvd1Byb3BlcnRpZXMuaXNOdWxsKCkpCi0gICAgICAgICAgICBX
aW5kb3dQcm9wZXJ0aWVzKHdpbmRvd1Byb3BlcnRpZXMpLmFzc2VydEVxdWFsKG1fd2luZG93UHJv
cGVydGllcyk7Ci0KLSAgICAgICAgbV93ZWJWaWV3RXZlbnRzLmFwcGVuZChSZWFkeVRvU2hvdyk7
Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpZXdDbG9zZShXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3KQotICAgIHsKLSAgICAgICAgZ19hc3NlcnQod2ViVmlldyAhPSBtX3dlYlZpZXcpOwotCi0g
ICAgICAgIG1fd2ViVmlld0V2ZW50cy5hcHBlbmQoQ2xvc2UpOwotICAgICAgICBnX29iamVjdF91
bnJlZih3ZWJWaWV3KTsKLQotICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3ApOwot
ICAgIH0KLQotICAgIFZlY3RvcjxXZWJWaWV3RXZlbnRzPiBtX3dlYlZpZXdFdmVudHM7Ci0gICAg
V2ViS2l0U2NyaXB0RGlhbG9nVHlwZSBtX3NjcmlwdERpYWxvZ1R5cGU7Ci0gICAgYm9vbCBtX3Nj
cmlwdERpYWxvZ0NvbmZpcm1lZDsKLSAgICBib29sIG1fYWxsb3dQZXJtaXNzaW9uUmVxdWVzdHM7
Ci0gICAgV2luZG93UHJvcGVydGllcyBtX3dpbmRvd1Byb3BlcnRpZXM7Ci0gICAgSGFzaFNldDxX
VEY6OlN0cmluZz4gbV93aW5kb3dQcm9wZXJ0aWVzQ2hhbmdlZDsKLSAgICBHUmVmUHRyPFdlYktp
dEhpdFRlc3RSZXN1bHQ+IG1fbW91c2VUYXJnZXRIaXRUZXN0UmVzdWx0OwotICAgIHVuc2lnbmVk
IG1fbW91c2VUYXJnZXRNb2RpZmllcnM7Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0Ny
ZWF0ZVJlYWR5Q2xvc2UoVUlDbGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAg
IHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keSBvbkxvYWQ9XCJ3aW5kb3cub3BlbigpLmNsb3Nl
KCk7XCI+PC9odG1sPiIsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbE1haW5Mb29wRmluaXNoZXMo
KTsKLQotICAgIFZlY3RvcjxVSUNsaWVudFRlc3Q6OldlYlZpZXdFdmVudHM+JiBldmVudHMgPSB0
ZXN0LT5tX3dlYlZpZXdFdmVudHM7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCks
ID09LCAzKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgVUlDbGllbnRUZXN0
OjpDcmVhdGUpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBVSUNsaWVudFRl
c3Q6OlJlYWR5VG9TaG93KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgVUlD
bGllbnRUZXN0OjpDbG9zZSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBjaGVja01pbWVUeXBlRm9y
RmlsdGVyKEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciwgY29uc3QgZ2NoYXIqIG1pbWVUeXBlKQotewot
ICAgIEd0a0ZpbGVGaWx0ZXJJbmZvIGZpbHRlckluZm87Ci0gICAgZmlsdGVySW5mby5jb250YWlu
cyA9IEdUS19GSUxFX0ZJTFRFUl9NSU1FX1RZUEU7Ci0gICAgZmlsdGVySW5mby5taW1lX3R5cGUg
PSBtaW1lVHlwZTsKLSAgICByZXR1cm4gZ3RrX2ZpbGVfZmlsdGVyX2ZpbHRlcihmaWx0ZXIsICZm
aWx0ZXJJbmZvKTsKLX0KLQotY2xhc3MgTW9kYWxEaWFsb2dzVGVzdDogcHVibGljIFVJQ2xpZW50
VGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShNb2RhbERpYWxvZ3NU
ZXN0KTsKLQotICAgIHN0YXRpYyB2b2lkIGRpYWxvZ1J1bkFzTW9kYWxDYWxsYmFjayhXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3LCBNb2RhbERpYWxvZ3NUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAg
Z19hc3NlcnQod2ViVmlldyAhPSB0ZXN0LT5tX3dlYlZpZXcpOwotICAgICAgICB0ZXN0LT5tX3dl
YlZpZXdFdmVudHMuYXBwZW5kKFJ1bkFzTW9kYWwpOwotICAgIH0KLQotICAgIEd0a1dpZGdldCog
dmlld0NyZWF0ZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQotICAgIHsKLSAgICAgICAgZ19hc3Nl
cnQod2ViVmlldyA9PSBtX3dlYlZpZXcpOwotCi0gICAgICAgIEd0a1dpZGdldCogbmV3V2ViVmll
dyA9IFVJQ2xpZW50VGVzdDo6dmlld0NyZWF0ZSh3ZWJWaWV3KTsKLSAgICAgICAgZ19zaWduYWxf
Y29ubmVjdChuZXdXZWJWaWV3LCAicnVuLWFzLW1vZGFsIiwgR19DQUxMQkFDSyhkaWFsb2dSdW5B
c01vZGFsQ2FsbGJhY2spLCB0aGlzKTsKLSAgICAgICAgcmV0dXJuIG5ld1dlYlZpZXc7Ci0gICAg
fQotCi0gICAgdm9pZCB2aWV3UmVhZHlUb1Nob3coV2ViS2l0V2ViVmlldyogd2ViVmlldykKLSAg
ICB7Ci0gICAgICAgIGdfYXNzZXJ0KHdlYlZpZXcgIT0gbV93ZWJWaWV3KTsKLSAgICAgICAgbV93
ZWJWaWV3RXZlbnRzLmFwcGVuZChSZWFkeVRvU2hvdyk7Ci0gICAgfQotfTsKLQotc3RhdGljIHZv
aWQgdGVzdFdlYlZpZXdBbGxvd01vZGFsRGlhbG9ncyhNb2RhbERpYWxvZ3NUZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQotewotICAgIFdlYktpdFNldHRpbmdzKiBzZXR0aW5ncyA9IHdlYmtpdF93
ZWJfdmlld19nZXRfc2V0dGluZ3ModGVzdC0+bV93ZWJWaWV3KTsKLSAgICB3ZWJraXRfc2V0dGlu
Z3Nfc2V0X2FsbG93X21vZGFsX2RpYWxvZ3Moc2V0dGluZ3MsIFRSVUUpOwotCi0gICAgdGVzdC0+
bG9hZEh0bWwoIjxodG1sPjxib2R5IG9ubG9hZD1cIndpbmRvdy5zaG93TW9kYWxEaWFsb2coJ2Rh
dGE6dGV4dC9odG1sLDxodG1sPjxib2R5Lz48c2NyaXB0PndpbmRvdy5jbG9zZSgpOzwvc2NyaXB0
PjwvaHRtbD4nKVwiPjwvYm9keT48L2h0bWw+IiwgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTWFp
bkxvb3BGaW5pc2hlcygpOwotCi0gICAgVmVjdG9yPFVJQ2xpZW50VGVzdDo6V2ViVmlld0V2ZW50
cz4mIGV2ZW50cyA9IHRlc3QtPm1fd2ViVmlld0V2ZW50czsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
ZXZlbnRzLnNpemUoKSwgPT0sIDQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09
LCBVSUNsaWVudFRlc3Q6OkNyZWF0ZSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwg
PT0sIFVJQ2xpZW50VGVzdDo6UmVhZHlUb1Nob3cpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVu
dHNbMl0sID09LCBVSUNsaWVudFRlc3Q6OlJ1bkFzTW9kYWwpOwotICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHNbM10sID09LCBVSUNsaWVudFRlc3Q6OkNsb3NlKTsKLX0KLQotc3RhdGljIHZvaWQg
dGVzdFdlYlZpZXdEaXNhbGxvd01vZGFsRGlhbG9ncyhNb2RhbERpYWxvZ3NUZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQotewotICAgIFdlYktpdFNldHRpbmdzKiBzZXR0aW5ncyA9IHdlYmtpdF93
ZWJfdmlld19nZXRfc2V0dGluZ3ModGVzdC0+bV93ZWJWaWV3KTsKLSAgICB3ZWJraXRfc2V0dGlu
Z3Nfc2V0X2FsbG93X21vZGFsX2RpYWxvZ3Moc2V0dGluZ3MsIEZBTFNFKTsKLQotICAgIHRlc3Qt
PmxvYWRIdG1sKCI8aHRtbD48Ym9keSBvbmxvYWQ9XCJ3aW5kb3cuc2hvd01vZGFsRGlhbG9nKCdk
YXRhOnRleHQvaHRtbCw8aHRtbD48Ym9keS8+PHNjcmlwdD53aW5kb3cuY2xvc2UoKTs8L3Njcmlw
dD48L2h0bWw+JylcIj48L2JvZHk+PC9odG1sPiIsIDApOwotICAgIC8vIFdlIG5lZWQgdG8gdXNl
IGEgdGltZW91dCBoZXJlIGJlY2F1c2UgdGhlIHZpZXdDbG9zZSgpIGZ1bmN0aW9uCi0gICAgLy8g
d29uJ3QgZXZlciBiZSBjYWxsZWQgYXMgdGhlIGRpYWxvZyB3b24ndCBiZSBjcmVhdGVkLgotICAg
IHRlc3QtPndhaXQoMSk7Ci0KLSAgICBWZWN0b3I8VUlDbGllbnRUZXN0OjpXZWJWaWV3RXZlbnRz
PiYgZXZlbnRzID0gdGVzdC0+bV93ZWJWaWV3RXZlbnRzOwotICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHMuc2l6ZSgpLCA9PSwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3SmF2YVNj
cmlwdERpYWxvZ3MoVUlDbGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHN0
YXRpYyBjb25zdCBjaGFyKiBodG1sT25Mb2FkRm9ybWF0ID0gIjxodG1sPjxib2R5IG9uTG9hZD1c
IiVzXCI+PC9ib2R5PjwvaHRtbD4iOwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBqc0FsZXJ0Rm9y
bWF0ID0gImFsZXJ0KCclcycpIjsKLSAgICBzdGF0aWMgY29uc3QgY2hhcioganNDb25maXJtRm9y
bWF0ID0gImRvIHsgY29uZmlybWVkID0gY29uZmlybSgnJXMnKTsgfSB3aGlsZSAoIWNvbmZpcm1l
ZCk7IGFsZXJ0KCdjb25maXJtZWQnKTsiOwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBqc1Byb21w
dEZvcm1hdCA9ICJhbGVydChwcm9tcHQoJyVzJywgJ2RlZmF1bHQnKSk7IjsKLQotICAgIHRlc3Qt
Pm1fc2NyaXB0RGlhbG9nVHlwZSA9IFdFQktJVF9TQ1JJUFRfRElBTE9HX0FMRVJUOwotICAgIEdP
d25QdHI8Y2hhcj4gYWxlcnREaWFsb2dNZXNzYWdlKGdfc3RyZHVwX3ByaW50Zihqc0FsZXJ0Rm9y
bWF0LCBrQWxlcnREaWFsb2dNZXNzYWdlKSk7Ci0gICAgR093blB0cjxjaGFyPiBhbGVydEhUTUwo
Z19zdHJkdXBfcHJpbnRmKGh0bWxPbkxvYWRGb3JtYXQsIGFsZXJ0RGlhbG9nTWVzc2FnZS5nZXQo
KSkpOwotICAgIHRlc3QtPmxvYWRIdG1sKGFsZXJ0SFRNTC5nZXQoKSwgMCk7Ci0gICAgdGVzdC0+
d2FpdFVudGlsTWFpbkxvb3BGaW5pc2hlcygpOwotCi0gICAgdGVzdC0+bV9zY3JpcHREaWFsb2dU
eXBlID0gV0VCS0lUX1NDUklQVF9ESUFMT0dfQ09ORklSTTsKLSAgICBHT3duUHRyPGNoYXI+IGNv
bmZpcm1EaWFsb2dNZXNzYWdlKGdfc3RyZHVwX3ByaW50Zihqc0NvbmZpcm1Gb3JtYXQsIGtDb25m
aXJtRGlhbG9nTWVzc2FnZSkpOwotICAgIEdPd25QdHI8Y2hhcj4gY29uZmlybUhUTUwoZ19zdHJk
dXBfcHJpbnRmKGh0bWxPbkxvYWRGb3JtYXQsIGNvbmZpcm1EaWFsb2dNZXNzYWdlLmdldCgpKSk7
Ci0gICAgdGVzdC0+bG9hZEh0bWwoY29uZmlybUhUTUwuZ2V0KCksIDApOwotICAgIHRlc3QtPndh
aXRVbnRpbE1haW5Mb29wRmluaXNoZXMoKTsKLQotICAgIHRlc3QtPm1fc2NyaXB0RGlhbG9nVHlw
ZSA9IFdFQktJVF9TQ1JJUFRfRElBTE9HX1BST01QVDsKLSAgICBHT3duUHRyPGNoYXI+IHByb21w
dERpYWxvZ01lc3NhZ2UoZ19zdHJkdXBfcHJpbnRmKGpzUHJvbXB0Rm9ybWF0LCBrUHJvbXB0RGlh
bG9nTWVzc2FnZSkpOwotICAgIEdPd25QdHI8Y2hhcj4gcHJvbXB0SFRNTChnX3N0cmR1cF9wcmlu
dGYoaHRtbE9uTG9hZEZvcm1hdCwgcHJvbXB0RGlhbG9nTWVzc2FnZS5nZXQoKSkpOwotICAgIHRl
c3QtPmxvYWRIdG1sKHByb21wdEhUTUwuZ2V0KCksIDApOwotICAgIHRlc3QtPndhaXRVbnRpbE1h
aW5Mb29wRmluaXNoZXMoKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdXaW5kb3dQcm9w
ZXJ0aWVzKFVJQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBzdGF0aWMg
Y29uc3QgY2hhciogd2luZG93UHJvcnBlcnRpZXNTdHJpbmcgPSAibGVmdD0xMDAsdG9wPTE1MCx3
aWR0aD00MDAsaGVpZ2h0PTQwMCxsb2NhdGlvbj1ubyxtZW51YmFyPW5vLHN0YXR1cz1ubyx0b29s
YmFyPW5vLHNjcm9sbGJhcnM9bm8iOwotICAgIEdka1JlY3RhbmdsZSBnZW9tZXRyeSA9IHsgMTAw
LCAxNTAsIDQwMCwgNDAwIH07Ci0gICAgdGVzdC0+c2V0RXhwZWN0ZWRXaW5kb3dQcm9wZXJ0aWVz
KFVJQ2xpZW50VGVzdDo6V2luZG93UHJvcGVydGllcygmZ2VvbWV0cnksIGZhbHNlLCBmYWxzZSwg
ZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UpKTsKLQotICAgIEdPd25QdHI8Y2hhcj4g
aHRtbFN0cmluZyhnX3N0cmR1cF9wcmludGYoIjxodG1sPjxib2R5IG9uTG9hZD1cIndpbmRvdy5v
cGVuKCcnLCAnJywgJyVzJykuY2xvc2UoKTtcIj48L2JvZHk+PC9odG1sPiIsIHdpbmRvd1Byb3Jw
ZXJ0aWVzU3RyaW5nKSk7Ci0gICAgdGVzdC0+bG9hZEh0bWwoaHRtbFN0cmluZy5nZXQoKSwgMCk7
Ci0gICAgdGVzdC0+d2FpdFVudGlsTWFpbkxvb3BGaW5pc2hlcygpOwotCi0gICAgc3RhdGljIGNv
bnN0IGNoYXIqIHByb3BlcnRpZXNDaGFuZ2VkW10gPSB7Ci0gICAgICAgICJnZW9tZXRyeSIsICJs
b2NhdGlvbmJhci12aXNpYmxlIiwgIm1lbnViYXItdmlzaWJsZSIsICJzdGF0dXNiYXItdmlzaWJs
ZSIsICJ0b29sYmFyLXZpc2libGUiLCAic2Nyb2xsYmFycy12aXNpYmxlIgotICAgIH07Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMocHJvcGVydGllc0NoYW5nZWQpOyAr
K2kpCi0gICAgICAgIGdfYXNzZXJ0KHRlc3QtPm1fd2luZG93UHJvcGVydGllc0NoYW5nZWQuY29u
dGFpbnMocHJvcGVydGllc0NoYW5nZWRbaV0pKTsKLQotICAgIFZlY3RvcjxVSUNsaWVudFRlc3Q6
OldlYlZpZXdFdmVudHM+JiBldmVudHMgPSB0ZXN0LT5tX3dlYlZpZXdFdmVudHM7Ci0gICAgZ19h
c3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAzKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
ZXZlbnRzWzBdLCA9PSwgVUlDbGllbnRUZXN0OjpDcmVhdGUpOwotICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHNbMV0sID09LCBVSUNsaWVudFRlc3Q6OlJlYWR5VG9TaG93KTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgVUlDbGllbnRUZXN0OjpDbG9zZSk7Ci19Ci0KLXN0YXRp
YyB2b2lkIHRlc3RXZWJWaWV3TW91c2VUYXJnZXQoVUlDbGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rw
b2ludGVyKQotewotICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZChHVEtf
V0lORE9XX1RPUExFVkVMKTsKLQotICAgIGNvbnN0IGNoYXIqIGxpbmtzSG92ZXJlZEhUTUwgPQot
ICAgICAgICAiPGh0bWw+PGJvZHk+IgotICAgICAgICAiIDxhIHN0eWxlPSdwb3NpdGlvbjphYnNv
bHV0ZTsgbGVmdDoxOyB0b3A6MScgaHJlZj0naHR0cDovL3d3dy53ZWJraXRndGsub3JnJyB0aXRs
ZT0nV2ViS2l0R1RLKyBUaXRsZSc+V2ViS2l0R1RLKyBXZWJzaXRlPC9hPiIKLSAgICAgICAgIiA8
aW1nIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6MTAnIHNyYz0nMHhkZWFk
YmVlZicgd2lkdGg9NSBoZWlnaHQ9NT48L2ltZz4iCi0gICAgICAgICIgPGEgc3R5bGU9J3Bvc2l0
aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRvcDoyMCcgaHJlZj0naHR0cDovL3d3dy53ZWJraXRndGsu
b3JnL2xvZ28nIHRpdGxlPSdXZWJLaXRHVEsrIExvZ28nPjxpbWcgc3JjPScweGRlYWRiZWVmJyB3
aWR0aD01IGhlaWdodD01PjwvaW1nPjwvYT4iCi0gICAgICAgICIgPGlucHV0IHN0eWxlPSdwb3Np
dGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6MzAnIHNpemU9JzEwJz48L2lucHV0PiIKLSAgICAg
ICAgIiA8ZGl2IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6NTA7IHdpZHRo
OjMwOyBoZWlnaHQ6MzA7IG92ZXJmbG93OnNjcm9sbCc+Jm5ic3A7PC9kaXY+IgotICAgICAgICAi
IDx2aWRlbyBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjEwMCcgd2lkdGg9
JzMwMCcgaGVpZ2h0PSczMDAnIGNvbnRyb2xzPSdjb250cm9scycgcHJlbG9hZD0nbm9uZSc+PHNv
dXJjZSBzcmM9J21vdmllLm9nZycgdHlwZT0ndmlkZW8vb2dnJyAvPjwvdmlkZW8+IgotICAgICAg
ICAiPC9ib2R5PjwvaHRtbD4iOwotCi0gICAgdGVzdC0+bG9hZEh0bWwobGlua3NIb3ZlcmVkSFRN
TCwgImZpbGU6Ly8vIik7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAg
ICAvLyBNb3ZlIG92ZXIgbGluay4KLSAgICBXZWJLaXRIaXRUZXN0UmVzdWx0KiBoaXRUZXN0UmVz
dWx0ID0gdGVzdC0+bW92ZU1vdXNlQW5kV2FpdFVudGlsTW91c2VUYXJnZXRDaGFuZ2VkKDEsIDEp
OwotICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhp
dFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250
ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90
ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2Vy
dCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1
bHQpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfbGlu
a191cmkoaGl0VGVzdFJlc3VsdCksID09LCAiaHR0cDovL3d3dy53ZWJraXRndGsub3JnLyIpOwot
ICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9saW5rX3RpdGxl
KGhpdFRlc3RSZXN1bHQpLCA9PSwgIldlYktpdEdUSysgVGl0bGUiKTsKLSAgICBnX2Fzc2VydF9j
bXBzdHIod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfbGlua19sYWJlbChoaXRUZXN0UmVzdWx0
KSwgPT0sICJXZWJLaXRHVEsrIFdlYnNpdGUiKTsKLSAgICBnX2Fzc2VydCghdGVzdC0+bV9tb3Vz
ZVRhcmdldE1vZGlmaWVycyk7Ci0KLSAgICAvLyBNb3ZlIG91dCBvZiB0aGUgbGluay4KLSAgICBo
aXRUZXN0UmVzdWx0ID0gdGVzdC0+bW92ZU1vdXNlQW5kV2FpdFVudGlsTW91c2VUYXJnZXRDaGFu
Z2VkKDAsIDApOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRf
aXNfbGluayhoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9y
ZXN1bHRfY29udGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIXdl
YmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7Ci0g
ICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19lZGl0YWJsZSho
aXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIXRlc3QtPm1fbW91c2VUYXJnZXRNb2RpZmll
cnMpOwotCi0gICAgLy8gTW92ZSBvdmVyIGltYWdlIHdpdGggR0RLX0NPTlRST0xfTUFTSy4KLSAg
ICBoaXRUZXN0UmVzdWx0ID0gdGVzdC0+bW92ZU1vdXNlQW5kV2FpdFVudGlsTW91c2VUYXJnZXRD
aGFuZ2VkKDEsIDEwLCBHREtfQ09OVFJPTF9NQVNLKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2hp
dF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xpbmsoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNz
ZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0
KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRp
YShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRf
Y29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtp
dF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19zY3JvbGxiYXIoaGl0VGVzdFJlc3VsdCkpOwot
ICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9pbWFnZV91cmko
aGl0VGVzdFJlc3VsdCksID09LCAiZmlsZTovLy8weGRlYWRiZWVmIik7Ci0gICAgZ19hc3NlcnQo
dGVzdC0+bV9tb3VzZVRhcmdldE1vZGlmaWVycyAmIEdES19DT05UUk9MX01BU0spOwotCi0gICAg
Ly8gTW92ZSBvdmVyIGltYWdlIGxpbmsuCi0gICAgaGl0VGVzdFJlc3VsdCA9IHRlc3QtPm1vdmVN
b3VzZUFuZFdhaXRVbnRpbE1vdXNlVGFyZ2V0Q2hhbmdlZCgxLCAyMCk7Ci0gICAgZ19hc3NlcnQo
d2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xpbmsoaGl0VGVzdFJlc3VsdCkpOwot
ICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFnZShoaXRU
ZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4
dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVz
dF9yZXN1bHRfY29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3Nl
cnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19zY3JvbGxiYXIoaGl0VGVzdFJl
c3VsdCkpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9s
aW5rX3VyaShoaXRUZXN0UmVzdWx0KSwgPT0sICJodHRwOi8vd3d3LndlYmtpdGd0ay5vcmcvbG9n
byIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9pbWFn
ZV91cmkoaGl0VGVzdFJlc3VsdCksID09LCAiZmlsZTovLy8weGRlYWRiZWVmIik7Ci0gICAgZ19h
c3NlcnRfY21wc3RyKHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2xpbmtfdGl0bGUoaGl0VGVz
dFJlc3VsdCksID09LCAiV2ViS2l0R1RLKyBMb2dvIik7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9o
aXRfdGVzdF9yZXN1bHRfZ2V0X2xpbmtfbGFiZWwoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNz
ZXJ0KCF0ZXN0LT5tX21vdXNlVGFyZ2V0TW9kaWZpZXJzKTsKLQotICAgIC8vIE1vdmUgb3ZlciBt
ZWRpYS4KLSAgICBoaXRUZXN0UmVzdWx0ID0gdGVzdC0+bW92ZU1vdXNlQW5kV2FpdFVudGlsTW91
c2VUYXJnZXRDaGFuZ2VkKDEsIDEwMCk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9y
ZXN1bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCghd2Vi
a2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQpKTsKLSAg
ICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbWVkaWEoaGl0VGVz
dFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRf
aXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rl
c3RfcmVzdWx0X2NvbnRleHRfaXNfc2Nyb2xsYmFyKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fz
c2VydF9jbXBzdHIod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfbWVkaWFfdXJpKGhpdFRlc3RS
ZXN1bHQpLCA9PSwgImZpbGU6Ly8vbW92aWUub2dnIik7Ci0gICAgZ19hc3NlcnQoIXRlc3QtPm1f
bW91c2VUYXJnZXRNb2RpZmllcnMpOwotCi0gICAgLy8gTW92ZXIgb3ZlciBpbnB1dC4KLSAgICBo
aXRUZXN0UmVzdWx0ID0gdGVzdC0+bW92ZU1vdXNlQW5kV2FpdFVudGlsTW91c2VUYXJnZXRDaGFu
Z2VkKDUsIDM1KTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0
X2lzX2xpbmsoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3Rf
cmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0KCF3
ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbWVkaWEoaGl0VGVzdFJlc3VsdCkpOwot
ICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfc2Nyb2xsYmFy
KGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2Nv
bnRleHRfaXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0KCF0ZXN0LT5t
X21vdXNlVGFyZ2V0TW9kaWZpZXJzKTsKLQotICAgIC8vIE1vdmUgb3ZlciBzY3JvbGxiYXIuCi0g
ICAgaGl0VGVzdFJlc3VsdCA9IHRlc3QtPm1vdmVNb3VzZUFuZFdhaXRVbnRpbE1vdXNlVGFyZ2V0
Q2hhbmdlZCg1LCA3NSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29u
dGV4dF9pc19saW5rKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90
ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2Vy
dCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQp
KTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRh
YmxlKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0
X2NvbnRleHRfaXNfc2Nyb2xsYmFyKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCghdGVz
dC0+bV9tb3VzZVRhcmdldE1vZGlmaWVycyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3
UGVybWlzc2lvblJlcXVlc3RzKFVJQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsK
LSAgICAvLyBTb21lIHZlcnNpb25zIG9mIGdlb2NsdWUgZ2l2ZSBhIHJ1bnRpbWUgd2FybmluZyBi
ZWNhdXNlIGl0IHRyaWVzCi0gICAgLy8gdG8gcmVnaXN0ZXIgdGhlIGVycm9yIHF1YXJrIHR3aWNl
LiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5ODU4LgotICAg
IC8vIE1ha2Ugd2FybmluZ3Mgbm9uLWZhdGFsIGZvciB0aGlzIHRlc3QgdG8gbWFrZSBpdCBwYXNz
LgotICAgIHRlc3QtPnJlbW92ZUxvZ0ZhdGFsRmxhZyhHX0xPR19MRVZFTF9XQVJOSU5HKTsKLSAg
ICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKLSAgICBzdGF0aWMgY29u
c3QgY2hhciogZ2VvbG9jYXRpb25SZXF1ZXN0SFRNTCA9Ci0gICAgICAgICI8aHRtbD4iCi0gICAg
ICAgICIgIDxzY3JpcHQ+IgotICAgICAgICAiICBmdW5jdGlvbiBydW5UZXN0KCkiCi0gICAgICAg
ICIgIHsiCi0gICAgICAgICIgICAgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3Np
dGlvbihmdW5jdGlvbihwKSB7IGRvY3VtZW50LnRpdGxlID0gXCJPS1wiIH0sIgotICAgICAgICAi
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oZSkg
eyBkb2N1bWVudC50aXRsZSA9IGUuY29kZSB9KTsiCi0gICAgICAgICIgIH0iCi0gICAgICAgICIg
IDwvc2NyaXB0PiIKLSAgICAgICAgIiAgPGJvZHkgb25sb2FkPSdydW5UZXN0KCk7Jz48L2JvZHk+
IgotICAgICAgICAiPC9odG1sPiI7Ci0KLSAgICAvLyBUZXN0IGRlbnlpbmcgYSBwZXJtaXNzaW9u
IHJlcXVlc3QuCi0gICAgdGVzdC0+bV9hbGxvd1Blcm1pc3Npb25SZXF1ZXN0cyA9IGZhbHNlOwot
ICAgIHRlc3QtPmxvYWRIdG1sKGdlb2xvY2F0aW9uUmVxdWVzdEhUTUwsIDApOwotICAgIHRlc3Qt
PndhaXRVbnRpbFRpdGxlQ2hhbmdlZCgpOwotCi0gICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBHZW9s
b2NhdGlvbiBBUEkgc3BlY2lmaWNhdGlvbiwgJzEnIGlzIHRoZQotICAgIC8vIGVycm9yIGNvZGUg
cmV0dXJuZWQgZm9yIHRoZSBQRVJNSVNTSU9OX0RFTklFRCBlcnJvci4KLSAgICAvLyBodHRwOi8v
ZGV2LnczLm9yZy9nZW8vYXBpL3NwZWMtc291cmNlLmh0bWwjcG9zaXRpb25fZXJyb3JfaW50ZXJm
YWNlCi0gICAgY29uc3QgZ2NoYXIqIHJlc3VsdCA9IHdlYmtpdF93ZWJfdmlld19nZXRfdGl0bGUo
dGVzdC0+bV93ZWJWaWV3KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIocmVzdWx0LCA9PSwgIjEiKTsK
LQotICAgIC8vIFRlc3QgYWxsb3dpbmcgYSBwZXJtaXNzaW9uIHJlcXVlc3QuCi0gICAgdGVzdC0+
bV9hbGxvd1Blcm1pc3Npb25SZXF1ZXN0cyA9IHRydWU7Ci0gICAgdGVzdC0+bG9hZEh0bWwoZ2Vv
bG9jYXRpb25SZXF1ZXN0SFRNTCwgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsVGl0bGVDaGFuZ2Vk
KCk7Ci0KLSAgICAvLyBDaGVjayB0aGF0IHdlIGRpZCBub3QgZ2V0IHRoZSBQRVJNSVNTSU9OX0RF
TklFRCBlcnJvciBub3cuCi0gICAgcmVzdWx0ID0gd2Via2l0X3dlYl92aWV3X2dldF90aXRsZSh0
ZXN0LT5tX3dlYlZpZXcpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihyZXN1bHQsICE9LCAiMSIpOwot
ICAgIHRlc3QtPmFkZExvZ0ZhdGFsRmxhZyhHX0xPR19MRVZFTF9XQVJOSU5HKTsKLX0KLQotY2xh
c3MgRmlsZUNob29zZXJUZXN0OiBwdWJsaWMgVUlDbGllbnRUZXN0IHsKLXB1YmxpYzoKLSAgICBN
QUtFX0dMSUJfVEVTVF9GSVhUVVJFKEZpbGVDaG9vc2VyVGVzdCk7Ci0KLSAgICBGaWxlQ2hvb3Nl
clRlc3QoKQotICAgIHsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJydW4t
ZmlsZS1jaG9vc2VyIiwgR19DQUxMQkFDSyhydW5GaWxlQ2hvb3NlckNhbGxiYWNrKSwgdGhpcyk7
Ci0gICAgfQotCi0gICAgc3RhdGljIGdib29sZWFuIHJ1bkZpbGVDaG9vc2VyQ2FsbGJhY2soV2Vi
S2l0V2ViVmlldyosIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCwgRmlsZUNob29z
ZXJUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+cnVuRmlsZUNob29zZXIocmVxdWVz
dCk7Ci0gICAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQotICAgIHZvaWQgcnVuRmlsZUNob29z
ZXIoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0KQotICAgIHsKLSAgICAgICAgYXNz
ZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChyZXF1ZXN0KSk7Ci0g
ICAgICAgIG1fZmlsZUNob29zZXJSZXF1ZXN0ID0gcmVxdWVzdDsKLSAgICAgICAgZ19tYWluX2xv
b3BfcXVpdChtX21haW5Mb29wKTsKLSAgICB9Ci0KLSAgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVl
c3QqIGNsaWNrTW91c2VCdXR0b25BbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0KGludCB4LCBp
bnQgeSkKLSAgICB7Ci0gICAgICAgIGNsaWNrTW91c2VCdXR0b24oeCwgeSk7Ci0gICAgICAgIGdf
bWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAgICAgICAgcmV0dXJuIG1fZmlsZUNob29zZXJS
ZXF1ZXN0LmdldCgpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBHUmVmUHRyPFdlYktpdEZpbGVD
aG9vc2VyUmVxdWVzdD4gbV9maWxlQ2hvb3NlclJlcXVlc3Q7Ci19OwotCi1zdGF0aWMgdm9pZCB0
ZXN0V2ViVmlld0ZpbGVDaG9vc2VyUmVxdWVzdChGaWxlQ2hvb3NlclRlc3QqIHRlc3QsIGdjb25z
dHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7
Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGZpbGVDaG9vc2VySFRNTEZvcm1hdCA9ICI8aHRtbD48
Ym9keT48aW5wdXQgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MDttYXJnaW46
MDtwYWRkaW5nOjAnIHR5cGU9J2ZpbGUnICVzLz48L2JvZHk+PC9odG1sPiI7Ci0KLSAgICAvLyBN
dWx0aXBsZSBzZWxlY3Rpb25zIG5vdCBhbGxvd2VkLCBubyBNSU1FIGZpbHRlcmluZy4KLSAgICBH
T3duUHRyPGNoYXI+IHNpbXBsZUZpbGVVcGxvYWRIVE1MKGdfc3RyZHVwX3ByaW50ZihmaWxlQ2hv
b3NlckhUTUxGb3JtYXQsICIiKSk7Ci0gICAgdGVzdC0+bG9hZEh0bWwoc2ltcGxlRmlsZVVwbG9h
ZEhUTUwuZ2V0KCksIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAg
IFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogZmlsZUNob29zZXJSZXF1ZXN0ID0gdGVzdC0+Y2xp
Y2tNb3VzZUJ1dHRvbkFuZFdhaXRGb3JGaWxlQ2hvb3NlclJlcXVlc3QoNSwgNSk7Ci0gICAgZ19h
c3NlcnQoIXdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxlKGZp
bGVDaG9vc2VyUmVxdWVzdCkpOwotCi0gICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBtaW1lVHlwZXMg
PSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMoZmlsZUNob29zZXJS
ZXF1ZXN0KTsKLSAgICBnX2Fzc2VydCghbWltZVR5cGVzKTsKLSAgICBHdGtGaWxlRmlsdGVyKiBm
aWx0ZXIgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVy
KGZpbGVDaG9vc2VyUmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQoIWZpbHRlcik7Ci0gICAgY29uc3Qg
Z2NoYXIqIGNvbnN0KiBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X2dldF9zZWxlY3RlZF9maWxlcyhmaWxlQ2hvb3NlclJlcXVlc3QpOwotICAgIGdfYXNzZXJ0KCFz
ZWxlY3RlZEZpbGVzKTsKLSAgICB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2FuY2VsKGZp
bGVDaG9vc2VyUmVxdWVzdCk7Ci0KLSAgICAvLyBNdWx0aXBsZSBzZWxlY3Rpb25zIGFsbG93ZWQs
IG5vIE1JTUUgZmlsdGVyaW5nLCBzb21lIHByZS1zZWxlY3RlZCBmaWxlcy4KLSAgICBHT3duUHRy
PGNoYXI+IG11bHRpcGxlU2VsZWN0aW9uRmlsZVVwbG9hZEhUTUwoZ19zdHJkdXBfcHJpbnRmKGZp
bGVDaG9vc2VySFRNTEZvcm1hdCwgIm11bHRpcGxlIikpOwotICAgIHRlc3QtPmxvYWRIdG1sKG11
bHRpcGxlU2VsZWN0aW9uRmlsZVVwbG9hZEhUTUwuZ2V0KCksIDApOwotICAgIHRlc3QtPndhaXRV
bnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGZpbGVDaG9vc2VyUmVxdWVzdCA9IHRlc3QtPmNsaWNr
TW91c2VCdXR0b25BbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0KDUsIDUpOwotICAgIGdfYXNz
ZXJ0KHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxlKGZpbGVD
aG9vc2VyUmVxdWVzdCkpOwotCi0gICAgbWltZVR5cGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9y
ZXF1ZXN0X2dldF9taW1lX3R5cGVzKGZpbGVDaG9vc2VyUmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQo
IW1pbWVUeXBlcyk7Ci0gICAgZmlsdGVyID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dl
dF9taW1lX3R5cGVzX2ZpbHRlcihmaWxlQ2hvb3NlclJlcXVlc3QpOwotICAgIGdfYXNzZXJ0KCFm
aWx0ZXIpOwotICAgIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rf
Z2V0X3NlbGVjdGVkX2ZpbGVzKGZpbGVDaG9vc2VyUmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQoIXNl
bGVjdGVkRmlsZXMpOwotCi0gICAgLy8gU2VsZWN0IHNvbWUgZmlsZXMuCi0gICAgY29uc3QgZ2No
YXIqIGZpbGVzVG9TZWxlY3RbNF0gPSB7ICIvZm9vIiwgIi9mb28vYmFyIiwgIi9mb28vYmFyL2Jh
eiIsIDAgfTsKLSAgICB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rfc2VsZWN0X2ZpbGVzKGZp
bGVDaG9vc2VyUmVxdWVzdCwgZmlsZXNUb1NlbGVjdCk7Ci0KLSAgICAvLyBDaGVjayB0aGUgZmls
ZXMgdGhhdCBoYXZlIGJlZW4ganVzdCBzZWxlY3RlZC4KLSAgICBzZWxlY3RlZEZpbGVzID0gd2Vi
a2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhmaWxlQ2hvb3NlclJl
cXVlc3QpOwotICAgIGdfYXNzZXJ0KHNlbGVjdGVkRmlsZXMpOwotICAgIGdfYXNzZXJ0X2NtcHN0
cihzZWxlY3RlZEZpbGVzWzBdLCA9PSwgIi9mb28iKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc2Vs
ZWN0ZWRGaWxlc1sxXSwgPT0sICIvZm9vL2JhciIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxl
Y3RlZEZpbGVzWzJdLCA9PSwgIi9mb28vYmFyL2JheiIpOwotICAgIGdfYXNzZXJ0KCFzZWxlY3Rl
ZEZpbGVzWzNdKTsKLQotICAgIC8vIFBlcmZvcm0gYW5vdGhlciByZXF1ZXN0IHRvIGNoZWNrIGlm
IHRoZSBsaXN0IG9mIGZpbGVzIHNlbGVjdGVkCi0gICAgLy8gaW4gdGhlIHByZXZpb3VzIHN0ZXAg
YXBwZWFycyBub3cgYXMgcGFydCBvZiB0aGUgbmV3IHJlcXVlc3QuCi0gICAgZmlsZUNob29zZXJS
ZXF1ZXN0ID0gdGVzdC0+Y2xpY2tNb3VzZUJ1dHRvbkFuZFdhaXRGb3JGaWxlQ2hvb3NlclJlcXVl
c3QoNSwgNSk7Ci0gICAgc2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVz
dF9nZXRfc2VsZWN0ZWRfZmlsZXMoZmlsZUNob29zZXJSZXF1ZXN0KTsKLSAgICBnX2Fzc2VydChz
ZWxlY3RlZEZpbGVzKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1swXSwgPT0s
ICIvZm9vIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMV0sID09LCAiL2Zv
by9iYXIiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1syXSwgPT0sICIvZm9v
L2Jhci9iYXoiKTsKLSAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxlc1szXSk7Ci0gICAgd2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNlbChmaWxlQ2hvb3NlclJlcXVlc3QpOwotCi0gICAg
Ly8gTXVsdGlwbGUgc2VsZWN0aW9ucyBub3QgYWxsb3dlZCwgb25seSBhY2NlcHQgaW1hZ2VzLCBh
dWRpbyBhbmQgdmlkZW8gZmlsZXMuLgotICAgIEdPd25QdHI8Y2hhcj4gbWltZUZpbHRlcmVkRmls
ZVVwbG9hZEhUTUwoZ19zdHJkdXBfcHJpbnRmKGZpbGVDaG9vc2VySFRNTEZvcm1hdCwgImFjY2Vw
dD0nYXVkaW8vKix2aWRlby8qLGltYWdlLyonIikpOwotICAgIHRlc3QtPmxvYWRIdG1sKG1pbWVG
aWx0ZXJlZEZpbGVVcGxvYWRIVE1MLmdldCgpLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2Fk
RmluaXNoZWQoKTsKLSAgICBmaWxlQ2hvb3NlclJlcXVlc3QgPSB0ZXN0LT5jbGlja01vdXNlQnV0
dG9uQW5kV2FpdEZvckZpbGVDaG9vc2VyUmVxdWVzdCg1LCA1KTsKLSAgICBnX2Fzc2VydCghd2Vi
a2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RfbXVsdGlwbGUoZmlsZUNob29zZXJS
ZXF1ZXN0KSk7Ci0KLSAgICBtaW1lVHlwZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rf
Z2V0X21pbWVfdHlwZXMoZmlsZUNob29zZXJSZXF1ZXN0KTsKLSAgICBnX2Fzc2VydChtaW1lVHlw
ZXMpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihtaW1lVHlwZXNbMF0sID09LCAiYXVkaW8vKiIpOwot
ICAgIGdfYXNzZXJ0X2NtcHN0cihtaW1lVHlwZXNbMV0sID09LCAidmlkZW8vKiIpOwotICAgIGdf
YXNzZXJ0X2NtcHN0cihtaW1lVHlwZXNbMl0sID09LCAiaW1hZ2UvKiIpOwotICAgIGdfYXNzZXJ0
KCFtaW1lVHlwZXNbM10pOwotCi0gICAgZmlsdGVyID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1
ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcihmaWxlQ2hvb3NlclJlcXVlc3QpOwotICAgIGdfYXNz
ZXJ0KEdUS19JU19GSUxFX0ZJTFRFUihmaWx0ZXIpKTsKLSAgICBnX2Fzc2VydChjaGVja01pbWVU
eXBlRm9yRmlsdGVyKGZpbHRlciwgImF1ZGlvLyoiKSk7Ci0gICAgZ19hc3NlcnQoY2hlY2tNaW1l
VHlwZUZvckZpbHRlcihmaWx0ZXIsICJ2aWRlby8qIikpOwotICAgIGdfYXNzZXJ0KGNoZWNrTWlt
ZVR5cGVGb3JGaWx0ZXIoZmlsdGVyLCAiaW1hZ2UvKiIpKTsKLQotICAgIHNlbGVjdGVkRmlsZXMg
PSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKGZpbGVDaG9v
c2VyUmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQoIXNlbGVjdGVkRmlsZXMpOwotICAgIHdlYmtpdF9m
aWxlX2Nob29zZXJfcmVxdWVzdF9jYW5jZWwoZmlsZUNob29zZXJSZXF1ZXN0KTsKLX0KLQotdm9p
ZCBiZWZvcmVBbGwoKQotewotICAgIFVJQ2xpZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3Iiwg
ImNyZWF0ZS1yZWFkeS1jbG9zZSIsIHRlc3RXZWJWaWV3Q3JlYXRlUmVhZHlDbG9zZSk7Ci0gICAg
TW9kYWxEaWFsb2dzVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImFsbG93LW1vZGFsLWRpYWxv
Z3MiLCB0ZXN0V2ViVmlld0FsbG93TW9kYWxEaWFsb2dzKTsKLSAgICBNb2RhbERpYWxvZ3NUZXN0
OjphZGQoIldlYktpdFdlYlZpZXciLCAiZGlzYWxsb3ctbW9kYWwtZGlhbG9ncyIsIHRlc3RXZWJW
aWV3RGlzYWxsb3dNb2RhbERpYWxvZ3MpOwotICAgIFVJQ2xpZW50VGVzdDo6YWRkKCJXZWJLaXRX
ZWJWaWV3IiwgImphdmFzY3JpcHQtZGlhbG9ncyIsIHRlc3RXZWJWaWV3SmF2YVNjcmlwdERpYWxv
Z3MpOwotICAgIFVJQ2xpZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgIndpbmRvdy1wcm9w
ZXJ0aWVzIiwgdGVzdFdlYlZpZXdXaW5kb3dQcm9wZXJ0aWVzKTsKLSAgICBVSUNsaWVudFRlc3Q6
OmFkZCgiV2ViS2l0V2ViVmlldyIsICJtb3VzZS10YXJnZXQiLCB0ZXN0V2ViVmlld01vdXNlVGFy
Z2V0KTsKLSAgICBVSUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJwZXJtaXNzaW9u
LXJlcXVlc3RzIiwgdGVzdFdlYlZpZXdQZXJtaXNzaW9uUmVxdWVzdHMpOwotICAgIEZpbGVDaG9v
c2VyVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImZpbGUtY2hvb3Nlci1yZXF1ZXN0IiwgdGVz
dFdlYlZpZXdGaWxlQ2hvb3NlclJlcXVlc3QpOwotfQotCi12b2lkIGFmdGVyQWxsKCkKLXsKLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RX
ZWJFeHRlbnNpb25zLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L1Rlc3RXZWJFeHRlbnNpb25zLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTFj
YjdhYS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0
cy9UZXN0V2ViRXh0ZW5zaW9ucy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxOTUgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
LSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotCi0jaW5jbHVkZSAiV2ViS2l0VGVzdEJ1cy5oIgotI2luY2x1ZGUgIldlYlZpZXdUZXN0Lmgi
Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgotCi1zdGF0aWMgV2ViS2l0VGVzdEJ1
cyogYnVzOwotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViRXh0ZW5zaW9uR2V0VGl0bGUoV2ViVmlld1Rl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxo
ZWFkPjx0aXRsZT5XZWJLaXRHVEsrIFdlYiBFeHRlbnNpb25zIFRlc3Q8L3RpdGxlPjwvaGVhZD48
Ym9keT48L2JvZHk+PC9odG1sPiIsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hl
ZCgpOwotCi0gICAgR1JlZlB0cjxHREJ1c1Byb3h5PiBwcm94eSA9IGFkb3B0R1JlZihidXMtPmNy
ZWF0ZVByb3h5KCJvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwKLSAgICAgICAgIi9v
cmcvd2Via2l0L2d0ay9XZWJFeHRlbnNpb25UZXN0IiAsICJvcmcud2Via2l0Lmd0ay5XZWJFeHRl
bnNpb25UZXN0IiwgdGVzdC0+bV9tYWluTG9vcCkpOwotICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHJl
c3VsdCA9IGFkb3B0R1JlZihnX2RidXNfcHJveHlfY2FsbF9zeW5jKAotICAgICAgICBwcm94eS5n
ZXQoKSwKLSAgICAgICAgIkdldFRpdGxlIiwKLSAgICAgICAgZ192YXJpYW50X25ldygiKHQpIiwg
d2Via2l0X3dlYl92aWV3X2dldF9wYWdlX2lkKHRlc3QtPm1fd2ViVmlldykpLAotICAgICAgICBH
X0RCVVNfQ0FMTF9GTEFHU19OT05FLAotICAgICAgICAtMSwgMCwgMCkpOwotICAgIGdfYXNzZXJ0
KHJlc3VsdCk7Ci0KLSAgICBjb25zdCBjaGFyKiB0aXRsZTsKLSAgICBnX3ZhcmlhbnRfZ2V0KHJl
c3VsdC5nZXQoKSwgIigmcykiLCAmdGl0bGUpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih0aXRsZSwg
PT0sICJXZWJLaXRHVEsrIFdlYiBFeHRlbnNpb25zIFRlc3QiKTsKLX0KLQotc3RhdGljIHZvaWQg
ZG9jdW1lbnRMb2FkZWRDYWxsYmFjayhHREJ1c0Nvbm5lY3Rpb24qLCBjb25zdCBjaGFyKiwgY29u
c3QgY2hhciosIGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgR1ZhcmlhbnQqLCBXZWJWaWV3VGVz
dCogdGVzdCkKLXsKLSAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOwotfQot
Ci1zdGF0aWMgdm9pZCB0ZXN0RG9jdW1lbnRMb2FkZWRTaWduYWwoV2ViVmlld1Rlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIpCi17Ci0gICAgR1JlZlB0cjxHREJ1c1Byb3h5PiBwcm94eSA9IGFkb3B0
R1JlZihidXMtPmNyZWF0ZVByb3h5KCJvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwK
LSAgICAgICAgIi9vcmcvd2Via2l0L2d0ay9XZWJFeHRlbnNpb25UZXN0IiwgIm9yZy53ZWJraXQu
Z3RrLldlYkV4dGVuc2lvblRlc3QiLCB0ZXN0LT5tX21haW5Mb29wKSk7Ci0gICAgR0RCdXNDb25u
ZWN0aW9uKiBjb25uZWN0aW9uID0gZ19kYnVzX3Byb3h5X2dldF9jb25uZWN0aW9uKHByb3h5Lmdl
dCgpKTsKLSAgICBndWludCBpZCA9IGdfZGJ1c19jb25uZWN0aW9uX3NpZ25hbF9zdWJzY3JpYmUo
Y29ubmVjdGlvbiwKLSAgICAgICAgMCwKLSAgICAgICAgIm9yZy53ZWJraXQuZ3RrLldlYkV4dGVu
c2lvblRlc3QiLAotICAgICAgICAiRG9jdW1lbnRMb2FkZWQiLAotICAgICAgICAiL29yZy93ZWJr
aXQvZ3RrL1dlYkV4dGVuc2lvblRlc3QiLAotICAgICAgICAwLAotICAgICAgICBHX0RCVVNfU0lH
TkFMX0ZMQUdTX05PTkUsCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0RCdXNTaWduYWxDYWxs
YmFjaz4oZG9jdW1lbnRMb2FkZWRDYWxsYmFjayksCi0gICAgICAgIHRlc3QsCi0gICAgICAgIDAp
OwotICAgIGdfYXNzZXJ0KGlkKTsKLQotICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48aGVhZD48
dGl0bGU+V2ViS2l0R1RLKyBXZWIgRXh0ZW5zaW9ucyBUZXN0PC90aXRsZT48L2hlYWQ+PGJvZHk+
PC9ib2R5PjwvaHRtbD4iLCAwKTsKLSAgICBnX21haW5fbG9vcF9ydW4odGVzdC0+bV9tYWluTG9v
cCk7Ci0gICAgZ19kYnVzX2Nvbm5lY3Rpb25fc2lnbmFsX3Vuc3Vic2NyaWJlKGNvbm5lY3Rpb24s
IGlkKTsKLX0KLQotc3RhdGljIGdib29sZWFuIHdlYlByb2Nlc3NDcmFzaGVkQ2FsbGJhY2soV2Vi
S2l0V2ViVmlldyosIFdlYlZpZXdUZXN0KiB0ZXN0KQotewotICAgIHRlc3QtPnF1aXRNYWluTG9v
cCgpOwotCi0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViS2l0V2Vi
Vmlld1Byb2Nlc3NDcmFzaGVkKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewot
ICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48L2h0bWw+IiwgMCk7Ci0gICAgdGVzdC0+d2FpdFVu
dGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KHRlc3QtPm1fd2ViVmll
dywgIndlYi1wcm9jZXNzLWNyYXNoZWQiLAotICAgICAgICBHX0NBTExCQUNLKHdlYlByb2Nlc3ND
cmFzaGVkQ2FsbGJhY2spLCB0ZXN0KTsKLQotICAgIEdSZWZQdHI8R0RCdXNQcm94eT4gcHJveHkg
PSBhZG9wdEdSZWYoYnVzLT5jcmVhdGVQcm94eSgib3JnLndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9u
VGVzdCIsCi0gICAgICAgICIvb3JnL3dlYmtpdC9ndGsvV2ViRXh0ZW5zaW9uVGVzdCIsICJvcmcu
d2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwgdGVzdC0+bV9tYWluTG9vcCkpOwotCi0gICAg
R1JlZlB0cjxHVmFyaWFudD4gcmVzdWx0ID0gYWRvcHRHUmVmKGdfZGJ1c19wcm94eV9jYWxsX3N5
bmMoCi0gICAgICAgIHByb3h5LmdldCgpLAotICAgICAgICAiQWJvcnRQcm9jZXNzIiwKLSAgICAg
ICAgMCwKLSAgICAgICAgR19EQlVTX0NBTExfRkxBR1NfTk9ORSwKLSAgICAgICAgLTEsIDAsIDAp
KTsKLSAgICBnX2Fzc2VydCghcmVzdWx0KTsKLSAgICBnX21haW5fbG9vcF9ydW4odGVzdC0+bV9t
YWluTG9vcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJFeHRlbnNpb25XaW5kb3dPYmplY3RD
bGVhcmVkKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxv
YWRIdG1sKCI8aHRtbD48aGVhZGVyPjwvaGVhZGVyPjxib2R5PjwvYm9keT48L2h0bWw+IiwgMCk7
Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBHT3duUHRyPEdFcnJv
cj4gZXJyb3I7Ci0gICAgV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCogamF2YXNjcmlwdFJlc3VsdCA9
IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgid2luZG93LmVjaG8oJ0Zv
bycpOyIsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7
Ci0gICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKLSAgICBHT3duUHRyPGNoYXI+IHZhbHVlU3Ry
aW5nKFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1
bHQpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAiRm9vIik7
Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBzY3JpcHREaWFsb2dDYWxsYmFjayhXZWJLaXRXZWJWaWV3
KiwgV2ViS2l0U2NyaXB0RGlhbG9nKiBkaWFsb2csIGNoYXIqKiByZXN1bHQpCi17Ci0gICAgZ19h
c3NlcnRfY21wdWludCh3ZWJraXRfc2NyaXB0X2RpYWxvZ19nZXRfZGlhbG9nX3R5cGUoZGlhbG9n
KSwgPT0sIFdFQktJVF9TQ1JJUFRfRElBTE9HX0FMRVJUKTsKLSAgICBnX2Fzc2VydCghKnJlc3Vs
dCk7Ci0gICAgKnJlc3VsdCA9IGdfc3RyZHVwKHdlYmtpdF9zY3JpcHRfZGlhbG9nX2dldF9tZXNz
YWdlKGRpYWxvZykpOwotICAgIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZCBydW5KYXZh
U2NyaXB0SW5Jc29sYXRlZFdvcmxkRmluaXNoZWRDYWxsYmFjayhHREJ1c1Byb3h5KiBwcm94eSwg
R0FzeW5jUmVzdWx0KiByZXN1bHQsIFdlYlZpZXdUZXN0KiB0ZXN0KQotewotICAgIGdfZGJ1c19w
cm94eV9jYWxsX2ZpbmlzaChwcm94eSwgcmVzdWx0LCAwKTsKLSAgICBnX21haW5fbG9vcF9xdWl0
KHRlc3QtPm1fbWFpbkxvb3ApOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViRXh0ZW5zaW9uSXNv
bGF0ZWRXb3JsZChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0
LT5sb2FkSHRtbCgiPGh0bWw+PGhlYWRlcj48L2hlYWRlcj48Ym9keT48ZGl2IGlkPSdjb25zb2xl
Jz48L2Rpdj48L2JvZHk+PC9odG1sPiIsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5p
c2hlZCgpOwotCi0gICAgR093blB0cjxjaGFyPiByZXN1bHQ7Ci0gICAgZ3Vsb25nIHNjcmlwdERp
YWxvZ0lEID0gZ19zaWduYWxfY29ubmVjdCh0ZXN0LT5tX3dlYlZpZXcsICJzY3JpcHQtZGlhbG9n
IiwgR19DQUxMQkFDSyhzY3JpcHREaWFsb2dDYWxsYmFjayksICZyZXN1bHQub3V0UHRyKCkpOwot
Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIgKm1haW5Xb3JsZFNjcmlwdCA9Ci0gICAgICAgICJ0b3Au
Zm9vID0gJ0Zvbyc7XG4iCi0gICAgICAgICJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29s
ZScpLmlubmVySFRNTCA9IHRvcC5mb287XG4iCi0gICAgICAgICJ3aW5kb3cub3BlbiA9IGZ1bmN0
aW9uICgpIHsgYWxlcnQoJ01haW4gV29ybGQnKTsgfVxuIgotICAgICAgICAiZG9jdW1lbnQub3Bl
bigxLCAyLCAzKTsiOwotICAgIHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hl
ZChtYWluV29ybGRTY3JpcHQsIDApOwotICAgIGdfYXNzZXJ0X2NtcHN0cihyZXN1bHQuZ2V0KCks
ID09LCAiTWFpbiBXb3JsZCIpOwotICAgIHJlc3VsdC5jbGVhcigpOwotCi0gICAgV2ViS2l0SmF2
YXNjcmlwdFJlc3VsdCogamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRX
YWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5pbm5l
ckhUTUwiLCAwKTsKLSAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBHT3duUHRy
PGNoYXI+IHZhbHVlU3RyaW5nKFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5n
KGphdmFzY3JpcHRSZXN1bHQpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0
KCksID09LCAiRm9vIik7Ci0KLSAgICBzdGF0aWMgY29uc3QgY2hhciAqaXNvbGF0ZWRXb3JsZFNj
cmlwdCA9Ci0gICAgICAgICJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmlubmVy
SFRNTCA9IHRvcC5mb287XG4iCi0gICAgICAgICJ3aW5kb3cub3BlbiA9IGZ1bmN0aW9uICgpIHsg
YWxlcnQoJ0lzb2xhdGVkIFdvcmxkJyk7IH1cbiIKLSAgICAgICAgImRvY3VtZW50Lm9wZW4oMSwg
MiwgMyk7IjsKLSAgICBHUmVmUHRyPEdEQnVzUHJveHk+IHByb3h5ID0gYWRvcHRHUmVmKGJ1cy0+
Y3JlYXRlUHJveHkoIm9yZy53ZWJraXQuZ3RrLldlYkV4dGVuc2lvblRlc3QiLAotICAgICAgICAi
L29yZy93ZWJraXQvZ3RrL1dlYkV4dGVuc2lvblRlc3QiICwgIm9yZy53ZWJraXQuZ3RrLldlYkV4
dGVuc2lvblRlc3QiLCB0ZXN0LT5tX21haW5Mb29wKSk7Ci0gICAgZ19kYnVzX3Byb3h5X2NhbGwo
cHJveHkuZ2V0KCksCi0gICAgICAgICJSdW5KYXZhU2NyaXB0SW5Jc29sYXRlZFdvcmxkIiwKLSAg
ICAgICAgZ192YXJpYW50X25ldygiKHQmcykiLCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3BhZ2VfaWQo
dGVzdC0+bV93ZWJWaWV3KSwgaXNvbGF0ZWRXb3JsZFNjcmlwdCksCi0gICAgICAgIEdfREJVU19D
QUxMX0ZMQUdTX05PTkUsCi0gICAgICAgIC0xLCAwLAotICAgICAgICByZWludGVycHJldF9jYXN0
PEdBc3luY1JlYWR5Q2FsbGJhY2s+KHJ1bkphdmFTY3JpcHRJbklzb2xhdGVkV29ybGRGaW5pc2hl
ZENhbGxiYWNrKSwKLSAgICAgICAgdGVzdCk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKHRlc3QtPm1f
bWFpbkxvb3ApOwotICAgIGdfYXNzZXJ0X2NtcHN0cihyZXN1bHQuZ2V0KCksID09LCAiSXNvbGF0
ZWQgV29ybGQiKTsKLSAgICByZXN1bHQuY2xlYXIoKTsKLQotICAgIC8vIENoZWNrIHRoYXQgJ3Rv
cC5mb28nIGRlZmluZWQgaW4gbWFpbiB3b3JsZCBpcyBub3QgdmlzaWJsZSBpbiBpc29sYXRlZCB3
b3JsZC4KLSAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRV
bnRpbEZpbmlzaGVkKCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmlubmVySFRN
TCIsIDApOwotICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOwotICAgIHZhbHVlU3RyaW5n
LnNldChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVz
dWx0KSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgInVuZGVm
aW5lZCIpOwotCi0gICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KHRlc3QtPm1fd2ViVmll
dywgc2NyaXB0RGlhbG9nSUQpOwotfQotCi12b2lkIGJlZm9yZUFsbCgpCi17Ci0gICAgd2Via2l0
X3dlYl9jb250ZXh0X3NldF93ZWJfZXh0ZW5zaW9uc19kaXJlY3Rvcnkod2Via2l0X3dlYl9jb250
ZXh0X2dldF9kZWZhdWx0KCksIFdFQktJVF9URVNUX1dFQl9FWFRFTlNJT05TX0RJUik7Ci0gICAg
YnVzID0gbmV3IFdlYktpdFRlc3RCdXMoKTsKLSAgICBpZiAoIWJ1cy0+cnVuKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYkV4dGVuc2lvbiIsICJk
b20tZG9jdW1lbnQtdGl0bGUiLCB0ZXN0V2ViRXh0ZW5zaW9uR2V0VGl0bGUpOwotICAgIFdlYlZp
ZXdUZXN0OjphZGQoIldlYktpdFdlYkV4dGVuc2lvbiIsICJkb2N1bWVudC1sb2FkZWQtc2lnbmFs
IiwgdGVzdERvY3VtZW50TG9hZGVkU2lnbmFsKTsKLSAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJL
aXRXZWJWaWV3IiwgIndlYi1wcm9jZXNzLWNyYXNoZWQiLCB0ZXN0V2ViS2l0V2ViVmlld1Byb2Nl
c3NDcmFzaGVkKTsKLSAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJFeHRlbnNpb24iLCAi
d2luZG93LW9iamVjdC1jbGVhcmVkIiwgdGVzdFdlYkV4dGVuc2lvbldpbmRvd09iamVjdENsZWFy
ZWQpOwotICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYkV4dGVuc2lvbiIsICJpc29sYXRl
ZC13b3JsZCIsIHRlc3RXZWJFeHRlbnNpb25Jc29sYXRlZFdvcmxkKTsKLX0KLQotdm9pZCBhZnRl
ckFsbCgpCi17Ci0gICAgZGVsZXRlIGJ1czsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRBY2Nlc3NpYmls
aXR5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFiZDM4My4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0QWNj
ZXNzaWJpbGl0eS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMjUgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5j
bHVkZSAiVGVzdE1haW4uaCIKLSNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgotCi0vLyBUaGUgbGli
YXRzcGkgaGVhZGVycyBkb24ndCB1c2UgR19CRUdJTl9ERUNMUwotZXh0ZXJuICJDIiB7Ci0jaW5j
bHVkZSA8YXRzcGkvYXRzcGkuaD4KLX0KLQotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8
ZmNudGwuaD4KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0jaW5jbHVk
ZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYv
Z29iamVjdC9HT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgotCi0v
LyBOYW1lIG9mIHRoZSB0ZXN0IHNlcnZlciBhcHBsaWNhdGlvbiBjcmVhdGluZyB0aGUgd2ViVmll
dyBvYmplY3QuCi1zdGF0aWMgY29uc3QgY2hhcioga1Rlc3RTZXJ2ZXJBcHBOYW1lID0gIkFjY2Vz
c2liaWxpdHlUZXN0U2VydmVyIjsKLQotLy8gTWF4IHNlY29uZHMgdG8gd2FpdCBmb3IgdGhlIHRl
c3Qgc2VydmVyIGJlZm9yZSBpbnNwZWN0aW5nIGl0Lgotc3RhdGljIGNvbnN0IGludCBrTWF4V2Fp
dEZvckNoaWxkID0gNTsKLQotLy8gVGhlIFBJRCBmb3IgdGhlIHRlc3Qgc2VydmVyIHJ1bm5pbmcs
IHNvIHdlIGNhbiBraWxsIGl0IGlmIG5lZWRlZC4KLXN0YXRpYyBHUGlkIGtDaGlsZFByb2Nlc3NQ
aWQgPSAwOwotCi0vLyBXaGV0aGVyIHRoZSBjaGlsZCBoYXMgcmVwbGllZCBhbmQgaXQncyByZWFk
eS4KLXN0YXRpYyBib29sIGtDaGlsZElzUmVhZHkgPSBmYWxzZTsKLQotc3RhdGljIHZvaWQgc3Rv
cFRlc3RTZXJ2ZXIoKQotewotICAgIC8vIERvIG5vdGhpbmcgaWYgdGhlcmUncyBubyBzZXJ2ZXIg
cnVubmluZy4KLSAgICBpZiAoIWtDaGlsZFByb2Nlc3NQaWQpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGdfc3Bhd25fY2xvc2VfcGlkKGtDaGlsZFByb2Nlc3NQaWQpOwotICAgIGtpbGwoa0NoaWxk
UHJvY2Vzc1BpZCwgU0lHVEVSTSk7Ci0gICAga0NoaWxkUHJvY2Vzc1BpZCA9IDA7Ci19Ci0KLXN0
YXRpYyB2b2lkIHNpZ0Fib3J0SGFuZGxlcihpbnQgc2lnTnVtKQotewotICAgIC8vIEp1c3Qgc3Rv
cCB0aGUgdGVzdCBzZXJ2ZXIgaWYgU0lHQUJSVCB3YXMgcmVjZWl2ZWQuCi0gICAgc3RvcFRlc3RT
ZXJ2ZXIoKTsKLX0KLQotc3RhdGljIGdwb2ludGVyIHRlc3RTZXJ2ZXJNb25pdG9yVGhyZWFkRnVu
YyhncG9pbnRlcikKLXsKLSAgICAvLyBXYWl0IGZvciB0aGUgc3BlY2lmaWVkIHRpbWVvdXQgdG8g
aGFwcGVuLgotICAgIGdfdXNsZWVwKGtNYXhXYWl0Rm9yQ2hpbGQgKiBHX1VTRUNfUEVSX1NFQyk7
Ci0KLSAgICAvLyBLaWxsIHRoZSBjaGlsZCBwcm9jZXNzIGlmIG5vdCByZWFkeSB5ZXQuCi0gICAg
aWYgKCFrQ2hpbGRJc1JlYWR5KQotICAgICAgICBzdG9wVGVzdFNlcnZlcigpOwotCi0gICAgZ190
aHJlYWRfZXhpdCgwKTsKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgc3RhcnRUZXN0
U2VydmVyTW9uaXRvcigpCi17Ci0gICAga0NoaWxkSXNSZWFkeSA9IGZhbHNlOwotICAgIGdfdGhy
ZWFkX25ldygiVGVzdFNlcnZlck1vbml0b3IiLCB0ZXN0U2VydmVyTW9uaXRvclRocmVhZEZ1bmMs
IDApOwotfQotCi1zdGF0aWMgdm9pZCBzdGFydFRlc3RTZXJ2ZXIoKQotewotICAgIC8vIFByZXBh
cmUgYXJndltdIGZvciBzcGF3bmluZyB0aGUgc2VydmVyIHByb2Nlc3MuCi0gICAgR093blB0cjxj
aGFyPiB0ZXN0U2VydmVyUGF0aChnX2J1aWxkX2ZpbGVuYW1lKFdFQktJVF9FWEVDX1BBVEgsICJX
ZWJLaXQyR09iamVjdEFQSVRlc3RzIiwga1Rlc3RTZXJ2ZXJBcHBOYW1lLCBOVUxMKSk7Ci0KLSAg
ICBjaGFyKiB0ZXN0U2VydmVyQXJndlsyXTsKLSAgICB0ZXN0U2VydmVyQXJndlswXSA9IHRlc3RT
ZXJ2ZXJQYXRoLmdldCgpOwotICAgIHRlc3RTZXJ2ZXJBcmd2WzFdID0gMDsKLQotICAgIC8vIFNw
YXduIHRoZSBzZXJ2ZXIsIGdldHRpbmcgaXRzIHN0ZG91dCBmaWxlIGRlc2NyaXB0b3IgdG8gc2V0
IGEKLSAgICAvLyBjb21tdW5pY2F0aW9uIGNoYW5uZWwsIHNvIHdlIGtub3cgd2hlbiBpdCdzIHJl
YWR5LgotICAgIGludCBjaGlsZFN0ZG91dCA9IDA7Ci0gICAgaWYgKCFnX3NwYXduX2FzeW5jX3dp
dGhfcGlwZXMoMCwgdGVzdFNlcnZlckFyZ3YsIDAsIHN0YXRpY19jYXN0PEdTcGF3bkZsYWdzPigw
KSwgMCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma0NoaWxkUHJvY2Vz
c1BpZCwgMCwgJmNoaWxkU3Rkb3V0LCAwLCAwKSkgewotICAgICAgICBjbG9zZShjaGlsZFN0ZG91
dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBTdGFydCBtb25pdG9yaW5nIHRo
ZSB0ZXN0IHNlcnZlciAoaW4gYSBzZXBhcmF0ZSB0aHJlYWQpIHRvCi0gICAgLy8gZW5zdXJlIHdl
IGRvbid0IGJsb2NrIG9uIHRoZSBjaGlsZCBwcm9jZXNzIG1vcmUgdGhhbiBhIHRpbWVvdXQuCi0g
ICAgc3RhcnRUZXN0U2VydmVyTW9uaXRvcigpOwotCi0gICAgY2hhciBtc2dbMl07Ci0gICAgR0lP
Q2hhbm5lbCogaW9DaGFubmVsID0gZ19pb19jaGFubmVsX3VuaXhfbmV3KGNoaWxkU3Rkb3V0KTsK
LSAgICBpZiAoZ19pb19jaGFubmVsX3JlYWRfY2hhcnMoaW9DaGFubmVsLCBtc2csIDIsIDAsIDAp
ID09IEdfSU9fU1RBVFVTX05PUk1BTCkgewotICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBz
ZXJ2ZXIgc2VudCBhIG1lc3NhZ2Ugc2F5aW5nIGl0J3MgcmVhZHkKLSAgICAgICAgLy8gYW5kIHN0
b3JlIHRoZSByZXN1bHQgZ2xvYmFsbHksIHNvIHRoZSBtb25pdG9yIGNhbiBzZWUgaXQuCi0gICAg
ICAgIGtDaGlsZElzUmVhZHkgPSBtc2dbMF0gPT0gJ08nICYmIG1zZ1sxXSA9PSAnSyc7Ci0gICAg
fQotICAgIGdfaW9fY2hhbm5lbF91bnJlZihpb0NoYW5uZWwpOwotICAgIGNsb3NlKGNoaWxkU3Rk
b3V0KTsKLQotICAgIC8vIFRoZSB0aW1lb3V0IHdhcyByZWFjaGVkIGFuZCB0aGUgc2VydmVyIGlz
IG5vdCByZWFkeSB5ZXQsIHNvCi0gICAgLy8gc3RvcCBpdCBpbm1lZGlhdGVseSwgYW5kIGxldCB0
aGUgdW5pdCB0ZXN0cyBmYWlsLgotICAgIGlmICgha0NoaWxkSXNSZWFkeSkKLSAgICAgICAgc3Rv
cFRlc3RTZXJ2ZXIoKTsKLX0KLQotc3RhdGljIHZvaWQgY2hlY2tBdHNwaUFjY2Vzc2libGUoQXRz
cGlBY2Nlc3NpYmxlKiBhY2Nlc3NpYmxlLCBjb25zdCBjaGFyKiB0YXJnZXROYW1lLCBBdHNwaVJv
bGUgdGFyZ2V0Um9sZSkKLXsKLSAgICBnX2Fzc2VydChBVFNQSV9JU19BQ0NFU1NJQkxFKGFjY2Vz
c2libGUpKTsKLQotICAgIEdPd25QdHI8Y2hhcj4gbmFtZShhdHNwaV9hY2Nlc3NpYmxlX2dldF9u
YW1lKGFjY2Vzc2libGUsIDApKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGFyZ2V0TmFtZSwgPT0s
IG5hbWUuZ2V0KCkpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0YXJnZXRSb2xlLCA9PSwgYXRzcGlf
YWNjZXNzaWJsZV9nZXRfcm9sZShhY2Nlc3NpYmxlLCAwKSk7Ci19Ci0KLXN0YXRpYyBHUmVmUHRy
PEF0c3BpQWNjZXNzaWJsZT4gZmluZFRlc3RTZXJ2ZXJBcHBsaWNhdGlvbigpCi17Ci0gICAgLy8g
T25seSBvbmUgZGVza3RvcCBpcyBzdXBwb3J0ZWQgYnkgQVRTUEkgYXQgdGhlIG1vbWVudC4KLSAg
ICBHUmVmUHRyPEF0c3BpQWNjZXNzaWJsZT4gZGVza3RvcCA9IGFkb3B0R1JlZihhdHNwaV9nZXRf
ZGVza3RvcCgwKSk7Ci0KLSAgICAvLyBMb29rIGZvciB0aGUgc2VydmVyIGFwcGxpY2F0aW9uIGlu
IHRoZSBsaXN0IG9mIGFwcHMuCi0gICAgR1JlZlB0cjxBdHNwaUFjY2Vzc2libGU+IGN1cnJlbnQ7
Ci0gICAgaW50IGNoaWxkQ291bnQgPSBhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9jb3VudChk
ZXNrdG9wLmdldCgpLCAwKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkQ291bnQ7IGkr
KykgewotICAgICAgICBjdXJyZW50ID0gYWRvcHRHUmVmKGF0c3BpX2FjY2Vzc2libGVfZ2V0X2No
aWxkX2F0X2luZGV4KGRlc2t0b3AuZ2V0KCksIGksIDApKTsKLSAgICAgICAgaWYgKCFnX3N0cmNt
cDAoYXRzcGlfYWNjZXNzaWJsZV9nZXRfbmFtZShjdXJyZW50LmdldCgpLCAwKSwga1Rlc3RTZXJ2
ZXJBcHBOYW1lKSkKLSAgICAgICAgICAgIHJldHVybiBjdXJyZW50OwotICAgIH0KLQotICAgIHJl
dHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0QXRzcGlCYXNpY0hpZXJhcmNoeShXZWJWaWV3
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICAvLyBUaGUgdGVzdCBzZXJ2ZXIncyBh
Y2Nlc3NpYmlsaXR5IG9iamVjdCAoVUkgUHJvY2VzcykuCi0gICAgR1JlZlB0cjxBdHNwaUFjY2Vz
c2libGU+IHRlc3RTZXJ2ZXJBcHAgPSBmaW5kVGVzdFNlcnZlckFwcGxpY2F0aW9uKCk7Ci0gICAg
Z19hc3NlcnQoQVRTUElfSVNfQUNDRVNTSUJMRSh0ZXN0U2VydmVyQXBwLmdldCgpKSk7Ci0gICAg
Y2hlY2tBdHNwaUFjY2Vzc2libGUodGVzdFNlcnZlckFwcC5nZXQoKSwgIkFjY2Vzc2liaWxpdHlU
ZXN0U2VydmVyIiwgQVRTUElfUk9MRV9BUFBMSUNBVElPTik7Ci0KLSAgICAvLyBUaGUgbWFpbiB3
aW5kb3cncyBhY2Nlc3NpYmlsaXR5IG9iamVjdCAoVUkgUHJvY2VzcykuCi0gICAgR1JlZlB0cjxB
dHNwaUFjY2Vzc2libGU+IGN1cnJlbnRQYXJlbnQgPSB0ZXN0U2VydmVyQXBwOwotICAgIEdSZWZQ
dHI8QXRzcGlBY2Nlc3NpYmxlPiBjdXJyZW50Q2hpbGQgPSBhZG9wdEdSZWYoYXRzcGlfYWNjZXNz
aWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoY3VycmVudFBhcmVudC5nZXQoKSwgMCwgMCkpOwotICAg
IGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY3VycmVudENoaWxkLmdldCgpKSk7Ci0gICAg
Y2hlY2tBdHNwaUFjY2Vzc2libGUoY3VycmVudENoaWxkLmdldCgpLCAiIiwgQVRTUElfUk9MRV9G
UkFNRSk7Ci0KLSAgICAvLyBUaGUgV2ViVmlldydzIGFjY2Vzc2liaWxpdHkgb2JqZWN0IChVSSBQ
cm9jZXNzKS4KLSAgICBjdXJyZW50UGFyZW50ID0gY3VycmVudENoaWxkOwotICAgIGN1cnJlbnRD
aGlsZCA9IGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQYXJlbnQu
Z2V0KCksIDAsIDApOwotICAgIGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY3VycmVudENo
aWxkLmdldCgpKSk7Ci0gICAgY2hlY2tBdHNwaUFjY2Vzc2libGUoY3VycmVudENoaWxkLmdldCgp
LCAiIiwgQVRTUElfUk9MRV9GSUxMRVIpOwotCi0gICAgLy8gVGhlIFdlYlBhZ2UncyBhY2Nlc3Np
YmlsaXR5IG9iamVjdCAoV2ViIFByb2Nlc3MpLgotICAgIGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50
Q2hpbGQ7Ci0gICAgY3VycmVudENoaWxkID0gYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRf
aW5kZXgoY3VycmVudFBhcmVudC5nZXQoKSwgMCwgMCk7Ci0gICAgZ19hc3NlcnQoQVRTUElfSVNf
QUNDRVNTSUJMRShjdXJyZW50Q2hpbGQuZ2V0KCkpKTsKLSAgICBjaGVja0F0c3BpQWNjZXNzaWJs
ZShjdXJyZW50Q2hpbGQuZ2V0KCksICIiLCBBVFNQSV9ST0xFX0ZJTExFUik7Ci0KLSAgICAvLyBI
VE1MIHJvb3QgZWxlbWVudCdzIGFjY2Vzc2libGUgZWxlbWVudCAoV2ViIFByb2Nlc3MpLgotICAg
IGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50Q2hpbGQ7Ci0gICAgY3VycmVudENoaWxkID0gYXRzcGlf
YWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoY3VycmVudFBhcmVudC5nZXQoKSwgMCwgMCk7
Ci0gICAgZ19hc3NlcnQoQVRTUElfSVNfQUNDRVNTSUJMRShjdXJyZW50Q2hpbGQuZ2V0KCkpKTsK
LQotICAgIC8vIEhUTUwgYm9keSdzIGFjY2Vzc2libGUgZWxlbWVudCAoV2ViIFByb2Nlc3MpLgot
ICAgIGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50Q2hpbGQ7Ci0gICAgY3VycmVudENoaWxkID0gYXRz
cGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoY3VycmVudFBhcmVudC5nZXQoKSwgMCwg
MCk7Ci0gICAgZ19hc3NlcnQoQVRTUElfSVNfQUNDRVNTSUJMRShjdXJyZW50Q2hpbGQuZ2V0KCkp
KTsKLSAgICBjaGVja0F0c3BpQWNjZXNzaWJsZShjdXJyZW50Q2hpbGQuZ2V0KCksICIiLCBBVFNQ
SV9ST0xFX0RPQ1VNRU5UX1dFQik7Ci0KLSAgICAvLyBIVE1MIEgxJ3MgYWNjZXNzaWJsZSBlbGVt
ZW50IChXZWIgUHJvY2VzcykuCi0gICAgY3VycmVudFBhcmVudCA9IGN1cnJlbnRDaGlsZDsKLSAg
ICBjdXJyZW50Q2hpbGQgPSBhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChjdXJy
ZW50UGFyZW50LmdldCgpLCAwLCAwKTsKLSAgICBnX2Fzc2VydChBVFNQSV9JU19BQ0NFU1NJQkxF
KGN1cnJlbnRDaGlsZC5nZXQoKSkpOwotICAgIGNoZWNrQXRzcGlBY2Nlc3NpYmxlKGN1cnJlbnRD
aGlsZC5nZXQoKSwgIlRoaXMgaXMgYSB0ZXN0IiwgQVRTUElfUk9MRV9IRUFESU5HKTsKLQotICAg
IC8vIEhUTUwgZmlyc3QgcGFyYWdyYXBoJ3MgYWNjZXNzaWJsZSBlbGVtZW50IChXZWIgUHJvY2Vz
cykuCi0gICAgY3VycmVudENoaWxkID0gYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5k
ZXgoY3VycmVudFBhcmVudC5nZXQoKSwgMSwgMCk7Ci0gICAgZ19hc3NlcnQoQVRTUElfSVNfQUND
RVNTSUJMRShjdXJyZW50Q2hpbGQuZ2V0KCkpKTsKLSAgICBjaGVja0F0c3BpQWNjZXNzaWJsZShj
dXJyZW50Q2hpbGQuZ2V0KCksICIiLCBBVFNQSV9ST0xFX1BBUkFHUkFQSCk7Ci0KLSAgICAvLyBI
VE1MIHNlY29uZCBwYXJhZ3JhcGgncyBhY2Nlc3NpYmxlIGVsZW1lbnQgKFdlYiBQcm9jZXNzKS4K
LSAgICBjdXJyZW50Q2hpbGQgPSBhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChj
dXJyZW50UGFyZW50LmdldCgpLCAyLCAwKTsKLSAgICBnX2Fzc2VydChBVFNQSV9JU19BQ0NFU1NJ
QkxFKGN1cnJlbnRDaGlsZC5nZXQoKSkpOwotICAgIGNoZWNrQXRzcGlBY2Nlc3NpYmxlKGN1cnJl
bnRDaGlsZC5nZXQoKSwgIiIsIEFUU1BJX1JPTEVfUEFSQUdSQVBIKTsKLQotICAgIC8vIEhUTUwg
bGluaydzIGFjY2Vzc2libGUgZWxlbWVudCAoV2ViIFByb2Nlc3MpLgotICAgIGN1cnJlbnRQYXJl
bnQgPSBjdXJyZW50Q2hpbGQ7Ci0gICAgY3VycmVudENoaWxkID0gYXRzcGlfYWNjZXNzaWJsZV9n
ZXRfY2hpbGRfYXRfaW5kZXgoY3VycmVudFBhcmVudC5nZXQoKSwgMCwgMCk7Ci0gICAgZ19hc3Nl
cnQoQVRTUElfSVNfQUNDRVNTSUJMRShjdXJyZW50Q2hpbGQuZ2V0KCkpKTsKLSAgICBjaGVja0F0
c3BpQWNjZXNzaWJsZShjdXJyZW50Q2hpbGQuZ2V0KCksICJhIGxpbmsiLCBBVFNQSV9ST0xFX0xJ
TkspOwotfQotCi12b2lkIGJlZm9yZUFsbCgpCi17Ci0gICAgLy8gV2UgaW5zdGFsbCBhIGhhbmRs
ZXIgdG8gZW5zdXJlIHRoYXQgd2Uga2lsbCB0aGUgY2hpbGQgcHJvY2VzcwotICAgIC8vIGlmIHRo
ZSBwYXJlbnQgZGllcyBiZWNhdXNlIG9mIHdoYXRldmVyIHRoZSByZWFzb24gaXMuCi0gICAgc2ln
bmFsKFNJR0FCUlQsIHNpZ0Fib3J0SGFuZGxlcik7Ci0KLSAgICAvLyBTdGFydCB0aGUgYWNjZXNz
aWJpbGl0eSB0ZXN0IHNlcnZlciBhbmQgbG9hZCB0aGUgdGVzdHMuCi0gICAgc3RhcnRUZXN0U2Vy
dmVyKCk7Ci0gICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0QWNjZXNzaWJpbGl0eSIsICJhdHNw
aS1iYXNpYy1oaWVyYXJjaHkiLCB0ZXN0QXRzcGlCYXNpY0hpZXJhcmNoeSk7Ci19Ci0KLXZvaWQg
YWZ0ZXJBbGwoKQotewotICAgIC8vIEVuc3VyZSB3ZSBzdG9wIHRoZSBzZXJ2ZXIuCi0gICAgc3Rv
cFRlc3RTZXJ2ZXIoKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdEZhdmljb25EYXRhYmFzZS5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhMDZmNzQuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdEZhdmljb25EYXRh
YmFzZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVy
c2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAi
V2ViS2l0VGVzdFNlcnZlci5oIgotI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCi0jaW5jbHVkZSA8
Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KLSNpbmNsdWRlIDx3dGYv
Z29iamVjdC9HT3duUHRyLmg+Ci0KLXN0YXRpYyBXZWJLaXRUZXN0U2VydmVyKiBrU2VydmVyOwot
c3RhdGljIGNoYXIqIGtUZW1wRGlyZWN0b3J5OwotCi1jbGFzcyBGYXZpY29uRGF0YWJhc2VUZXN0
OiBwdWJsaWMgV2ViVmlld1Rlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRV
UkUoRmF2aWNvbkRhdGFiYXNlVGVzdCk7Ci0KLSAgICBGYXZpY29uRGF0YWJhc2VUZXN0KCkKLSAg
ICAgICAgOiBtX3dlYkNvbnRleHQod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCkpCi0g
ICAgICAgICwgbV9mYXZpY29uKDApCi0gICAgICAgICwgbV9lcnJvcigwKQotICAgICAgICAsIG1f
ZmF2aWNvbk5vdGlmaWNhdGlvblJlY2VpdmVkKGZhbHNlKQotICAgIHsKLSAgICAgICAgV2ViS2l0
RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZmF2aWNv
bl9kYXRhYmFzZShtX3dlYkNvbnRleHQpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGRhdGFi
YXNlLCAiZmF2aWNvbi1jaGFuZ2VkIiwgR19DQUxMQkFDSyhmYXZpY29uQ2hhbmdlZENhbGxiYWNr
KSwgdGhpcyk7Ci0gICAgfQotCi0gICAgfkZhdmljb25EYXRhYmFzZVRlc3QoKQotICAgIHsKLSAg
ICAgICAgaWYgKG1fZmF2aWNvbikKLSAgICAgICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveSht
X2Zhdmljb24pOwotCi0gICAgICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3
ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2UobV93ZWJDb250ZXh0KTsKLSAg
ICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKGRhdGFiYXNlLCBHX1NJ
R05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMg
dm9pZCBmYXZpY29uQ2hhbmdlZENhbGxiYWNrKFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJh
c2UsIGNvbnN0IGNoYXIqIHBhZ2VVUkksIGNvbnN0IGNoYXIqIGZhdmljb25VUkksIEZhdmljb25E
YXRhYmFzZVRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICBpZiAoIWdfc3RyY21wMCh3ZWJraXRf
d2ViX3ZpZXdfZ2V0X3VyaSh0ZXN0LT5tX3dlYlZpZXcpLCBwYWdlVVJJKSkKLSAgICAgICAgICAg
IHRlc3QtPm1fZmF2aWNvblVSSSA9IGZhdmljb25VUkk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZv
aWQgdmlld0Zhdmljb25DaGFuZ2VkQ2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgR1Bh
cmFtU3BlYyogcHNwZWMsIGdwb2ludGVyIGRhdGEpCi0gICAgewotICAgICAgICBGYXZpY29uRGF0
YWJhc2VUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8RmF2aWNvbkRhdGFiYXNlVGVzdCo+KGRhdGEp
OwotICAgICAgICBnX2Fzc2VydCh0ZXN0LT5tX3dlYlZpZXcgPT0gd2ViVmlldyk7Ci0gICAgICAg
IHRlc3QtPm1fZmF2aWNvbk5vdGlmaWNhdGlvblJlY2VpdmVkID0gdHJ1ZTsKLSAgICAgICAgdGVz
dC0+cXVpdE1haW5Mb29wKCk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgZ2V0RmF2aWNvbkNh
bGxiYWNrKEdPYmplY3QqIHNvdXJjZU9iamVjdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIHZvaWQq
IGRhdGEpCi0gICAgewotICAgICAgICBGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0ID0gc3RhdGlj
X2Nhc3Q8RmF2aWNvbkRhdGFiYXNlVGVzdCo+KGRhdGEpOwotICAgICAgICBXZWJLaXRGYXZpY29u
RGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2RhdGFi
YXNlKHRlc3QtPm1fd2ViQ29udGV4dCk7Ci0gICAgICAgIHRlc3QtPm1fZmF2aWNvbiA9IHdlYmtp
dF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX2ZpbmlzaChkYXRhYmFzZSwgcmVzdWx0LCAm
dGVzdC0+bV9lcnJvci5vdXRQdHIoKSk7Ci0gICAgICAgIHRlc3QtPnF1aXRNYWluTG9vcCgpOwot
ICAgIH0KLQotICAgIHZvaWQgd2FpdFVudGlsRmF2aWNvbkNoYW5nZWQoKQotICAgIHsKLSAgICAg
ICAgbV9mYXZpY29uTm90aWZpY2F0aW9uUmVjZWl2ZWQgPSBmYWxzZTsKLSAgICAgICAgdW5zaWdu
ZWQgbG9uZyBoYW5kbGVySUQgPSBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgIm5vdGlmeTo6
ZmF2aWNvbiIsIEdfQ0FMTEJBQ0sodmlld0Zhdmljb25DaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsK
LSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotICAgICAgICBnX3NpZ25hbF9o
YW5kbGVyX2Rpc2Nvbm5lY3QobV93ZWJWaWV3LCBoYW5kbGVySUQpOwotICAgIH0KLQotICAgIHZv
aWQgZ2V0RmF2aWNvbkZvclBhZ2VVUklBbmRXYWl0VW50aWxSZWFkeShjb25zdCBjaGFyKiBwYWdl
VVJJKQotICAgIHsKLSAgICAgICAgbV9lcnJvci5jbGVhcigpOwotICAgICAgICBpZiAobV9mYXZp
Y29uKSB7Ci0gICAgICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3kobV9mYXZpY29uKTsKLSAg
ICAgICAgICAgIG1fZmF2aWNvbiA9IDA7Ci0gICAgICAgIH0KLQotICAgICAgICBXZWJLaXRGYXZp
Y29uRGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2Rh
dGFiYXNlKG1fd2ViQ29udGV4dCk7Ci0gICAgICAgIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dl
dF9mYXZpY29uKGRhdGFiYXNlLCBwYWdlVVJJLCAwLCBnZXRGYXZpY29uQ2FsbGJhY2ssIHRoaXMp
OwotICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgV2Vi
S2l0V2ViQ29udGV4dCogbV93ZWJDb250ZXh0OwotICAgIGNhaXJvX3N1cmZhY2VfdCogbV9mYXZp
Y29uOwotICAgIENTdHJpbmcgbV9mYXZpY29uVVJJOwotICAgIEdPd25QdHI8R0Vycm9yPiBtX2Vy
cm9yOwotICAgIGJvb2wgbV9mYXZpY29uTm90aWZpY2F0aW9uUmVjZWl2ZWQ7Ci19OwotCi1zdGF0
aWMgdm9pZAotc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSog
bWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSogcXVlcnksIFNvdXBDbGllbnRD
b250ZXh0KiBjb250ZXh0LCB2b2lkKiBkYXRhKQotewotICAgIGlmIChtZXNzYWdlLT5tZXRob2Qg
IT0gU09VUF9NRVRIT0RfR0VUKSB7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1l
c3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9mYXZpY29uLmljbyIpKSB7Ci0gICAg
ICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9GT1VO
RCk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNl
X2JvZHkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY2hhciogY29udGVudHM7Ci0g
ICAgZ3NpemUgbGVuZ3RoOwotICAgIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2ljb24vZmF2aWNv
bi5pY28iKSkgewotICAgICAgICBHT3duUHRyPGNoYXI+IHBhdGhUb0Zhdmljb24oZ19idWlsZF9m
aWxlbmFtZShUZXN0OjpnZXRXZWJLaXQxVGVzdFJlc291Y2VzRGlyKCkuZGF0YSgpLCAiYmxhbmsu
aWNvIiwgTlVMTCkpOwotICAgICAgICBnX2ZpbGVfZ2V0X2NvbnRlbnRzKHBhdGhUb0Zhdmljb24u
Z2V0KCksICZjb250ZW50cywgJmxlbmd0aCwgMCk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5
X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBjb250ZW50
cywgbGVuZ3RoKTsKLSAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvbm9mYXZpY29u
IikpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIG5vRmF2aWNvbkhUTUwgPSAiPGh0bWw+
PGhlYWQ+PGJvZHk+dGVzdDwvYm9keT48L2h0bWw+IjsKLSAgICAgICAgc291cF9tZXNzYWdlX2Jv
ZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgbm9G
YXZpY29uSFRNTCwgc3RybGVuKG5vRmF2aWNvbkhUTUwpKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBzdGF0aWMgY29uc3QgY2hhciogY29udGVudHNIVE1MID0gIjxodG1sPjxoZWFkPjxsaW5rIHJl
bD0naWNvbicgaHJlZj0nL2ljb24vZmF2aWNvbi5pY28nIHR5cGU9J2ltYWdlL3gtaWNvOyBjaGFy
c2V0PWJpbmFyeSc+PC9oZWFkPjxib2R5PnRlc3Q8L2JvZHk+PC9odG1sPiI7Ci0gICAgICAgIHNv
dXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9S
WV9TVEFUSUMsIGNvbnRlbnRzSFRNTCwgc3RybGVuKGNvbnRlbnRzSFRNTCkpOwotICAgIH0KLQot
ICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKLSAg
ICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKLX0K
LQotc3RhdGljIHZvaWQgdGVzdE5vdEluaXRpYWxpemVkKEZhdmljb25EYXRhYmFzZVRlc3QqIHRl
c3QpCi17Ci0gICAgLy8gVHJ5IHRvIHJldHJpZXZlIGEgdmFsaWQgZmF2aWNvbiBmcm9tIGEgbm90
IGluaXRpYWxpemVkIGRhdGFiYXNlLgotICAgIHRlc3QtPmdldEZhdmljb25Gb3JQYWdlVVJJQW5k
V2FpdFVudGlsUmVhZHkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2ZvbyIpLmRhdGEoKSk7Ci0g
ICAgZ19hc3NlcnQoIXRlc3QtPm1fZmF2aWNvbik7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV9lcnJv
cik7Ci0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fZXJyb3ItPmNvZGUsID09LCBXRUJLSVRf
RkFWSUNPTl9EQVRBQkFTRV9FUlJPUl9OT1RfSU5JVElBTElaRUQpOwotfQotCi1zdGF0aWMgdm9p
ZCB0ZXN0U2V0RGlyZWN0b3J5KEZhdmljb25EYXRhYmFzZVRlc3QqIHRlc3QpCi17Ci0gICAgd2Vi
a2l0X3dlYl9jb250ZXh0X3NldF9mYXZpY29uX2RhdGFiYXNlX2RpcmVjdG9yeSh0ZXN0LT5tX3dl
YkNvbnRleHQsIGtUZW1wRGlyZWN0b3J5KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoa1RlbXBEaXJl
Y3RvcnksID09LCB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2VfZGlyZWN0
b3J5KHRlc3QtPm1fd2ViQ29udGV4dCkpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0Q2xlYXJEYXRh
YmFzZShGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0KQotewotICAgIFdlYktpdEZhdmljb25EYXRh
YmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2Uo
dGVzdC0+bV93ZWJDb250ZXh0KTsKLSAgICB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9jbGVhcihk
YXRhYmFzZSk7Ci0KLSAgICBHT3duUHRyPGNoYXI+IGljb25VUkkod2Via2l0X2Zhdmljb25fZGF0
YWJhc2VfZ2V0X2Zhdmljb25fdXJpKGRhdGFiYXNlLCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIv
Zm9vIikuZGF0YSgpKSk7Ci0gICAgZ19hc3NlcnQoIWljb25VUkkpOwotfQotCi1zdGF0aWMgdm9p
ZCB0ZXN0R2V0RmF2aWNvbihGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0KQotewotICAgIC8vIFdl
IG5lZWQgdG8gbG9hZCB0aGUgcGFnZSBmaXJzdCB0byBlbnN1cmUgdGhlIGljb24gZGF0YSB3aWxs
IGJlCi0gICAgLy8gaW4gdGhlIGRhdGFiYXNlIGluIGNhc2UgdGhlcmUncyBhbiBhc3NvY2lhdGVk
IGZhdmljb24uCi0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvZm9v
IikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxGYXZpY29uQ2hhbmdlZCgpOwotICAgIENT
dHJpbmcgZmF2aWNvblVSSSA9IGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pY29uL2Zhdmljb24u
aWNvIik7Ci0KLSAgICAvLyBDaGVjayB0aGUgQVBJIHJldHJpZXZpbmcgYSB2YWxpZCBmYXZpY29u
LgotICAgIHRlc3QtPmdldEZhdmljb25Gb3JQYWdlVVJJQW5kV2FpdFVudGlsUmVhZHkoa1NlcnZl
ci0+Z2V0VVJJRm9yUGF0aCgiL2ZvbyIpLmRhdGEoKSk7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV9m
YXZpY29uKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9mYXZpY29uVVJJLmRhdGEoKSwg
PT0sIGZhdmljb25VUkkuZGF0YSgpKTsKLSAgICBnX2Fzc2VydCghdGVzdC0+bV9lcnJvcik7Ci0K
LSAgICAvLyBDaGVjayB0aGF0IHdpZHRoIGFuZCBoZWlnaHQgbWF0Y2ggdGhvc2UgZnJvbSBibGFu
ay5pY28gKDE2eDE2IGZhdmljb24pLgotICAgIGdfYXNzZXJ0X2NtcGludChjYWlyb19pbWFnZV9z
dXJmYWNlX2dldF93aWR0aCh0ZXN0LT5tX2Zhdmljb24pLCA9PSwgMTYpOwotICAgIGdfYXNzZXJ0
X2NtcGludChjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQodGVzdC0+bV9mYXZpY29uKSwg
PT0sIDE2KTsKLQotICAgIC8vIENoZWNrIHRoYXQgYW5vdGhlciBwYWdlIHdpdGggdGhlIHNhbWUg
ZmF2aWNvbiByZXR1cm4gdGhlIHNhbWUgaWNvbi4KLSAgICBjYWlyb19zdXJmYWNlX3QqIGZhdmlj
b24gPSBjYWlyb19zdXJmYWNlX3JlZmVyZW5jZSh0ZXN0LT5tX2Zhdmljb24pOwotICAgIHRlc3Qt
PmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2JhciIpLmRhdGEoKSk7Ci0gICAgLy8g
SXQncyBhIG5ldyBwYWdlIGluIHRoZSBkYXRhYmFzZSwgc28gZmF2aWNvbiB3aWxsIGNoYW5nZSB0
d2ljZSwgZmlyc3QgdG8gcmVzZXQgaXQKLSAgICAvLyBhbmQgdGhlbiB3aGVuIHRoZSBpY29uIGlz
IGxvYWRlZC4KLSAgICB0ZXN0LT53YWl0VW50aWxGYXZpY29uQ2hhbmdlZCgpOwotICAgIHRlc3Qt
PndhaXRVbnRpbEZhdmljb25DaGFuZ2VkKCk7Ci0gICAgdGVzdC0+Z2V0RmF2aWNvbkZvclBhZ2VV
UklBbmRXYWl0VW50aWxSZWFkeShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvYmFyIikuZGF0YSgp
KTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX2Zhdmljb24pOwotICAgIGdfYXNzZXJ0X2NtcHN0cih0
ZXN0LT5tX2Zhdmljb25VUkkuZGF0YSgpLCA9PSwgZmF2aWNvblVSSS5kYXRhKCkpOwotICAgIGdf
YXNzZXJ0KHRlc3QtPm1fZmF2aWNvbiA9PSBmYXZpY29uKTsKLSAgICBnX2Fzc2VydCghdGVzdC0+
bV9lcnJvcik7Ci0gICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KGZhdmljb24pOwotCi0gICAgLy8g
Q2hlY2sgdGhlIEFQSSByZXRyaWV2aW5nIGFuIGludmFsaWQgZmF2aWNvbi4KLSAgICB0ZXN0LT5s
b2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9ub2Zhdmljb24iKS5kYXRhKCkpOwotICAg
IHRlc3QtPndhaXRVbnRpbEZhdmljb25DaGFuZ2VkKCk7Ci0KLSAgICB0ZXN0LT5nZXRGYXZpY29u
Rm9yUGFnZVVSSUFuZFdhaXRVbnRpbFJlYWR5KGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9ub2Zh
dmljb24iKS5kYXRhKCkpOwotICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX2Zhdmljb24pOwotICAgIGdf
YXNzZXJ0KHRlc3QtPm1fZXJyb3IpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0R2V0RmF2aWNvblVS
SShGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0KQotewotICAgIFdlYktpdEZhdmljb25EYXRhYmFz
ZSogZGF0YWJhc2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2UodGVz
dC0+bV93ZWJDb250ZXh0KTsKLQotICAgIENTdHJpbmcgYmFzZVVSSSA9IGtTZXJ2ZXItPmdldFVS
SUZvclBhdGgoIi9mb28iKTsKLSAgICBHT3duUHRyPGNoYXI+IGljb25VUkkod2Via2l0X2Zhdmlj
b25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fdXJpKGRhdGFiYXNlLCBiYXNlVVJJLmRhdGEoKSkpOwot
ICAgIEFTU0VSVF9DTVBfQ1NUUklORyhpY29uVVJJLmdldCgpLCA9PSwga1NlcnZlci0+Z2V0VVJJ
Rm9yUGF0aCgiL2ljb24vZmF2aWNvbi5pY28iKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJW
aWV3RmF2aWNvbihGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0KQotewotICAgIHRlc3QtPm1fZmF2
aWNvblVSSSA9IENTdHJpbmcoKTsKLQotICAgIGNhaXJvX3N1cmZhY2VfdCogaWNvbkZyb21XZWJW
aWV3ID0gd2Via2l0X3dlYl92aWV3X2dldF9mYXZpY29uKHRlc3QtPm1fd2ViVmlldyk7Ci0gICAg
Z19hc3NlcnQoIWljb25Gcm9tV2ViVmlldyk7Ci0KLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXIt
PmdldFVSSUZvclBhdGgoIi9mb28iKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbEZhdmlj
b25DaGFuZ2VkKCk7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV9mYXZpY29uTm90aWZpY2F0aW9uUmVj
ZWl2ZWQpOwotICAgIC8vIFRoZSBpY29uIGlzIGtub3duIGFuZCBoYXNuJ3QgY2hhbmdlZCBpbiB0
aGUgZGF0YWJhc2UsIHNvIG5vdGlmeTo6ZmF2aWNvbiBpcyBlbWl0dGVkCi0gICAgLy8gYnV0IFdl
YktpdEZhdmljb25EYXRhYmFzZTo6aWNvbi1jaGFuZ2VkIGlzbid0LgotICAgIGdfYXNzZXJ0KHRl
c3QtPm1fZmF2aWNvblVSSS5pc051bGwoKSk7Ci0KLSAgICBpY29uRnJvbVdlYlZpZXcgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X2Zhdmljb24odGVzdC0+bV93ZWJWaWV3KTsKLSAgICBnX2Fzc2VydChp
Y29uRnJvbVdlYlZpZXcpOwotICAgIGdfYXNzZXJ0X2NtcHVpbnQoY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9nZXRfd2lkdGgoaWNvbkZyb21XZWJWaWV3KSwgPT0sIDE2KTsKLSAgICBnX2Fzc2VydF9jbXB1
aW50KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChpY29uRnJvbVdlYlZpZXcpLCA9PSwg
MTYpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0RmF2aWNvbkRhdGFiYXNlKEZhdmljb25EYXRhYmFz
ZVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgLy8gVGhlc2UgdGVzdHMgZGVwZW5k
IG9uIHRoaXMgb3JkZXIgdG8gcnVuIHByb3Blcmx5IHNvIHdlIGRlY2xhcmUgdGhlbSBpbiBhIHNp
bmdsZSBvbmUuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMTE0MzQuCi0gICAgdGVzdE5vdEluaXRpYWxpemVkKHRlc3QpOwotICAgIHRlc3RTZXRE
aXJlY3RvcnkodGVzdCk7Ci0gICAgdGVzdEdldEZhdmljb24odGVzdCk7Ci0gICAgdGVzdEdldEZh
dmljb25VUkkodGVzdCk7Ci0gICAgdGVzdFdlYlZpZXdGYXZpY29uKHRlc3QpOwotICAgIHRlc3RD
bGVhckRhdGFiYXNlKHRlc3QpOwotfQotCi12b2lkIGJlZm9yZUFsbCgpCi17Ci0gICAgLy8gU3Rh
cnQgYSBzb3VwIHNlcnZlciBmb3IgdGVzdGluZy4KLSAgICBrU2VydmVyID0gbmV3IFdlYktpdFRl
c3RTZXJ2ZXIoKTsKLSAgICBrU2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2spOwotCi0gICAga1Rl
bXBEaXJlY3RvcnkgPSBnX2Rpcl9tYWtlX3RtcCgiV2ViS2l0MlRlc3RzLVhYWFhYWCIsIDApOwot
ICAgIGdfYXNzZXJ0KGtUZW1wRGlyZWN0b3J5KTsKLQotICAgIC8vIEFkZCB0ZXN0cyB0byB0aGUg
c3VpdGUuCi0gICAgRmF2aWNvbkRhdGFiYXNlVGVzdDo6YWRkKCJXZWJLaXRGYXZpY29uRGF0YWJh
c2UiLCAiZmF2aWNvbi1kYXRhYmFzZS10ZXN0IiwgdGVzdEZhdmljb25EYXRhYmFzZSk7Ci19Ci0K
LXN0YXRpYyB2b2lkIHdlYmtpdEZhdmljb25EYXRhYmFzZUZpbmFsaXplZENhbGxiYWNrKGdwb2lu
dGVyLCBHT2JqZWN0KikKLXsKLSAgICBpZiAoIWdfZmlsZV90ZXN0KGtUZW1wRGlyZWN0b3J5LCBH
X0ZJTEVfVEVTVF9JU19ESVIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHT3duUHRyPGNoYXI+
IGZpbGVuYW1lKGdfYnVpbGRfZmlsZW5hbWUoa1RlbXBEaXJlY3RvcnksICJXZWJwYWdlSWNvbnMu
ZGIiLCBOVUxMKSk7Ci0gICAgZ191bmxpbmsoZmlsZW5hbWUuZ2V0KCkpOwotCi0gICAgZ19ybWRp
cihrVGVtcERpcmVjdG9yeSk7Ci19Ci0KLXZvaWQgYWZ0ZXJBbGwoKQotewotICAgIGRlbGV0ZSBr
U2VydmVyOwotCi0gICAgLy8gRGVsZXRlIHRoZSB0ZW1wb3JhcnkgZmlsZXMgYWZ0ZXIgdGhlIElj
b25EYXRhYmFzZSBoYXMgYmVlbgotICAgIC8vIGNsb3NlZCwgdGhhdCBpcywgb25jZSBXZWJLaXRG
YXZpY29uRGF0YWJhc2UgaXMgYmVpbmcgZGVzdHJveWVkLgotICAgIFdlYktpdEZhdmljb25EYXRh
YmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2Uo
d2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCkpOwotICAgIGdfb2JqZWN0X3dlYWtfcmVm
KEdfT0JKRUNUKGRhdGFiYXNlKSwgd2Via2l0RmF2aWNvbkRhdGFiYXNlRmluYWxpemVkQ2FsbGJh
Y2ssIDApOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvVGVzdFdlYktpdEZpbmRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxlci5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyZWVmNGMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdEZpbmRDb250cm9sbGVyLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDMzNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEy
IElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIsMSBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJMb2FkVHJhY2tp
bmdUZXN0LmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0
Mi5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLQotc3RhdGljIGNvbnN0IGNo
YXIqIHRlc3RTdHJpbmcgPSAiPGh0bWw+PGJvZHk+Zmlyc3QgdGVzdGluZyBzZWNvbmQgdGVzdGlu
ZyBzZWNvbmRIYWxmPC9ib2R5PjwvaHRtbD4iOwotCi1jbGFzcyBGaW5kQ29udHJvbGxlclRlc3Q6
IHB1YmxpYyBXZWJWaWV3VGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVS
RShGaW5kQ29udHJvbGxlclRlc3QpOwotCi0gICAgRmluZENvbnRyb2xsZXJUZXN0KCkKLSAgICAg
ICAgOiBtX2ZpbmRDb250cm9sbGVyKHdlYmtpdF93ZWJfdmlld19nZXRfZmluZF9jb250cm9sbGVy
KG1fd2ViVmlldykpCi0gICAgICAgICwgbV9ydW5GaW5kVW50aWxDb21wbGV0aW9uKGZhbHNlKQot
ICAgIHsKLSAgICAgICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09C
SkVDVChtX2ZpbmRDb250cm9sbGVyLmdldCgpKSk7Ci0gICAgfQotCi0gICAgfkZpbmRDb250cm9s
bGVyVGVzdCgpCi0gICAgewotICAgICAgICBpZiAobV9maW5kQ29udHJvbGxlcikKLSAgICAgICAg
ICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX2ZpbmRDb250cm9sbGVy
LmdldCgpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKLSAgICB9Ci0K
LSAgICB2b2lkIGZpbmQoY29uc3QgY2hhciogc2VhcmNoVGV4dCwgZ3VpbnQzMiBmaW5kT3B0aW9u
cywgZ3VpbnQgbWF4TWF0Y2hDb3VudCkKLSAgICB7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
bV9maW5kQ29udHJvbGxlci5nZXQoKSwgImZvdW5kLXRleHQiLCBHX0NBTExCQUNLKGZvdW5kVGV4
dENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9maW5kQ29udHJv
bGxlci5nZXQoKSwgImZhaWxlZC10by1maW5kLXRleHQiLCBHX0NBTExCQUNLKGZhaWxlZFRvRmlu
ZFRleHRDYWxsYmFjayksIHRoaXMpOwotICAgICAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX3Nl
YXJjaChtX2ZpbmRDb250cm9sbGVyLmdldCgpLCBzZWFyY2hUZXh0LCBmaW5kT3B0aW9ucywgbWF4
TWF0Y2hDb3VudCk7Ci0gICAgfQotCi0gICAgdm9pZCBjb3VudChjb25zdCBjaGFyKiBzZWFyY2hU
ZXh0LCBndWludDMyIGZpbmRPcHRpb25zLCBndWludCBtYXhNYXRjaENvdW50KQotICAgIHsKLSAg
ICAgICAgZ19zaWduYWxfY29ubmVjdChtX2ZpbmRDb250cm9sbGVyLmdldCgpLCAiY291bnRlZC1t
YXRjaGVzIiwgR19DQUxMQkFDSyhjb3VudGVkTWF0Y2hlc0NhbGxiYWNrKSwgdGhpcyk7Ci0gICAg
ICAgIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfY291bnRfbWF0Y2hlcyhtX2ZpbmRDb250cm9sbGVy
LmdldCgpLCBzZWFyY2hUZXh0LCBmaW5kT3B0aW9ucywgbWF4TWF0Y2hDb3VudCk7Ci0gICAgfQot
Ci0gICAgdm9pZCB3YWl0VW50aWxGaW5kRmluaXNoZWQoKQotICAgIHsKLSAgICAgICAgbV9ydW5G
aW5kVW50aWxDb21wbGV0aW9uID0gdHJ1ZTsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFp
bkxvb3ApOwotICAgIH0KLQotICAgIEdSZWZQdHI8V2ViS2l0RmluZENvbnRyb2xsZXI+IG1fZmlu
ZENvbnRyb2xsZXI7Ci0gICAgYm9vbCBtX3RleHRGb3VuZDsKLSAgICB1bnNpZ25lZCBtX21hdGNo
Q291bnQ7Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBtX3J1bkZpbmRVbnRpbENvbXBsZXRpb247Ci0K
LSAgICBzdGF0aWMgdm9pZCBmb3VuZFRleHRDYWxsYmFjayhXZWJLaXRGaW5kQ29udHJvbGxlcios
IGd1aW50IG1hdGNoQ291bnQsIEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCkKLSAgICB7Ci0gICAg
ICAgIHRlc3QtPm1fdGV4dEZvdW5kID0gdHJ1ZTsKLSAgICAgICAgdGVzdC0+bV9tYXRjaENvdW50
ID0gbWF0Y2hDb3VudDsKLSAgICAgICAgaWYgKHRlc3QtPm1fcnVuRmluZFVudGlsQ29tcGxldGlv
bikKLSAgICAgICAgICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7Ci0gICAg
fQotCi0gICAgc3RhdGljIHZvaWQgZmFpbGVkVG9GaW5kVGV4dENhbGxiYWNrKFdlYktpdEZpbmRD
b250cm9sbGVyKiwgRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVz
dC0+bV90ZXh0Rm91bmQgPSBmYWxzZTsKLSAgICAgICAgaWYgKHRlc3QtPm1fcnVuRmluZFVudGls
Q29tcGxldGlvbikKLSAgICAgICAgICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9v
cCk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgY291bnRlZE1hdGNoZXNDYWxsYmFjayhXZWJL
aXRGaW5kQ29udHJvbGxlciosIGd1aW50IG1hdGNoQ291bnQsIEZpbmRDb250cm9sbGVyVGVzdCog
dGVzdCkKLSAgICB7Ci0gICAgICAgIHRlc3QtPm1fbWF0Y2hDb3VudCA9IG1hdGNoQ291bnQ7Ci0g
ICAgICAgIGlmICh0ZXN0LT5tX3J1bkZpbmRVbnRpbENvbXBsZXRpb24pCi0gICAgICAgICAgICBn
X21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOwotICAgIH0KLX07Ci0KLXN0YXRpYyB2
b2lkIHRlc3RGaW5kQ29udHJvbGxlclRleHRGb3VuZChGaW5kQ29udHJvbGxlclRlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+bG9hZEh0bWwodGVzdFN0cmluZywgMCk7Ci0g
ICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICB0ZXN0LT5maW5kKCJ0ZXN0
aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAxKTsKLSAgICB0ZXN0LT53YWl0VW50aWxG
aW5kRmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKLX0KLQot
c3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVyVGV4dE5vdEZvdW5kKEZpbmRDb250cm9sbGVy
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0U3Ry
aW5nLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIHRlc3Qt
PmZpbmQoIm5vdEZvdW5kIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAxKTsKLSAgICB0ZXN0
LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX3RleHRG
b3VuZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RGaW5kQ29udHJvbGxlck1hdGNoQ291bnQoRmlu
ZENvbnRyb2xsZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxvYWRI
dG1sKHRlc3RTdHJpbmcsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwot
Ci0gICAgdGVzdC0+ZmluZCgidGVzdGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwgMik7
Ci0gICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7Ci0KLSAgICBnX2Fzc2VydCh0ZXN0
LT5tX21hdGNoQ291bnQgPT0gMik7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOwot
fQotCi1zdGF0aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xsZXJNYXhNYXRjaENvdW50KEZpbmRDb250
cm9sbGVyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5sb2FkSHRtbCh0
ZXN0U3RyaW5nLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAg
IHRlc3QtPmZpbmQoInRlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUsIDEpOwotICAg
IHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3NlcnQodGVzdC0+bV9t
YXRjaENvdW50ID09IEdfTUFYVUlOVCk7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQp
OwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xsZXJOZXh0KEZpbmRDb250cm9sbGVy
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0U3Ry
aW5nLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIHRlc3Qt
PmZpbmQoInRlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUsIDIpOwotICAgIHRlc3Qt
PndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91
bmQpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fbWF0Y2hDb3VudCA9PSAyKTsKLQotICAgIHdlYmtp
dF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX25leHQodGVzdC0+bV9maW5kQ29udHJvbGxlci5nZXQo
KSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7Ci0KLSAgICBnX2Fzc2VydCh0
ZXN0LT5tX3RleHRGb3VuZCk7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09IDEp
OwotICAgIGdfYXNzZXJ0KCEod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfb3B0aW9ucyh0ZXN0
LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKSAmIFdFQktJVF9GSU5EX09QVElPTlNfQkFDS1dBUkRT
KSk7Ci0KLSAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF9uZXh0KHRlc3QtPm1fZmlu
ZENvbnRyb2xsZXIuZ2V0KCkpOwotICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOwot
Ci0gICAgZ19hc3NlcnQoIXRlc3QtPm1fdGV4dEZvdW5kKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5t
X21hdGNoQ291bnQgPT0gMSk7Ci0gICAgZ19hc3NlcnQoISh3ZWJraXRfZmluZF9jb250cm9sbGVy
X2dldF9vcHRpb25zKHRlc3QtPm1fZmluZENvbnRyb2xsZXIuZ2V0KCkpICYgV0VCS0lUX0ZJTkRf
T1BUSU9OU19CQUNLV0FSRFMpKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVy
UHJldmlvdXMoRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAg
IHRlc3QtPmxvYWRIdG1sKHRlc3RTdHJpbmcsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRG
aW5pc2hlZCgpOwotCi0gICAgdGVzdC0+ZmluZCgidGVzdGluZyIsIFdFQktJVF9GSU5EX09QVElP
TlNfTk9ORSwgMik7Ci0gICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7Ci0KLSAgICBn
X2Fzc2VydCh0ZXN0LT5tX21hdGNoQ291bnQgPT0gMik7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV90
ZXh0Rm91bmQpOwotCi0gICAgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfbmV4dCh0ZXN0
LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNo
ZWQoKTsKLQotICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKLSAgICBnX2Fzc2VydCh0
ZXN0LT5tX21hdGNoQ291bnQgPT0gMSk7Ci0gICAgZ19hc3NlcnQoISh3ZWJraXRfZmluZF9jb250
cm9sbGVyX2dldF9vcHRpb25zKHRlc3QtPm1fZmluZENvbnRyb2xsZXIuZ2V0KCkpICYgV0VCS0lU
X0ZJTkRfT1BUSU9OU19CQUNLV0FSRFMpKTsKLQotICAgIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJf
c2VhcmNoX3ByZXZpb3VzKHRlc3QtPm1fZmluZENvbnRyb2xsZXIuZ2V0KCkpOwotICAgIHRlc3Qt
PndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91
bmQpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fbWF0Y2hDb3VudCA9PSAxKTsKLSAgICBnX2Fzc2Vy
dCh3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9vcHRpb25zKHRlc3QtPm1fZmluZENvbnRyb2xs
ZXIuZ2V0KCkpICYgV0VCS0lUX0ZJTkRfT1BUSU9OU19CQUNLV0FSRFMpOwotfQotCi1zdGF0aWMg
dm9pZCB0ZXN0RmluZENvbnRyb2xsZXJDb3VudGVkTWF0Y2hlcyhGaW5kQ29udHJvbGxlclRlc3Qq
IHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+bG9hZEh0bWwodGVzdFN0cmluZywg
MCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICB0ZXN0LT5jb3Vu
dCgidGVzdGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwgMik7Ci0gICAgdGVzdC0+d2Fp
dFVudGlsRmluZEZpbmlzaGVkKCk7Ci0KLSAgICBnX2Fzc2VydCh0ZXN0LT5tX21hdGNoQ291bnQg
PT0gMik7Ci0KLSAgICB0ZXN0LT5jb3VudCgiZmlyc3QiLCBXRUJLSVRfRklORF9PUFRJT05TX05P
TkUsIDIpOwotICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3Nl
cnQodGVzdC0+bV9tYXRjaENvdW50ID09IDEpOwotCi0gICAgdGVzdC0+Y291bnQoIm5vdEZvdW5k
IiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAyKTsKLSAgICB0ZXN0LT53YWl0VW50aWxGaW5k
RmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX21hdGNoQ291bnQpOwotfQotCi1z
dGF0aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xsZXJPcHRpb25zKEZpbmRDb250cm9sbGVyVGVzdCog
dGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0U3RyaW5nLCAw
KTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIHRlc3QtPmZpbmQo
IlRlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUsIDIpOwotICAgIHRlc3QtPndhaXRV
bnRpbEZpbmRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3NlcnQoIXRlc3QtPm1fdGV4dEZvdW5kKTsK
LQotICAgIHRlc3QtPmZpbmQoIlRlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05TX0NBU0VfSU5T
RU5TSVRJVkUsIDIpOwotICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOwotCi0gICAg
Z19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOwotCi0gICAgdGVzdC0+ZmluZCgiZXN0aW5nIiwg
V0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAyKTsKLSAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmlu
aXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKLQotICAgIHRlc3Qt
PmZpbmQoImVzdGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNfQVRfV09SRF9TVEFSVFMsIDIpOwot
ICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3NlcnQoIXRlc3Qt
Pm1fdGV4dEZvdW5kKTsKLQotICAgIHRlc3QtPmZpbmQoIkhhbGYiLCBXRUJLSVRfRklORF9PUFRJ
T05TX0FUX1dPUkRfU1RBUlRTLCAyKTsKLSAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQo
KTsKLQotICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX3RleHRGb3VuZCk7Ci0KLSAgICB0ZXN0LT5maW5k
KCJIYWxmIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19BVF9XT1JEX1NUQVJUUyB8IFdFQktJVF9GSU5E
X09QVElPTlNfVFJFQVRfTUVESUFMX0NBUElUQUxfQVNfV09SRF9TVEFSVCwgMik7Ci0gICAgdGVz
dC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7Ci0KLSAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRG
b3VuZCk7Ci0KLSAgICB0ZXN0LT5maW5kKCJ0ZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19X
UkFQX0FST1VORCwgMyk7Ci0gICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7Ci0gICAg
Z19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOwotCi0gICAgd2Via2l0X2ZpbmRfY29udHJvbGxl
cl9zZWFyY2hfbmV4dCh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKTsKLSAgICB0ZXN0LT53
YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7
Ci0KLSAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF9uZXh0KHRlc3QtPm1fZmluZENv
bnRyb2xsZXIuZ2V0KCkpOwotICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOwotICAg
IGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdEZpbmRD
b250cm9sbGVySGlkZShGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17
Ci0gICAgdGVzdC0+bG9hZEh0bWwodGVzdFN0cmluZywgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGls
TG9hZEZpbmlzaGVkKCk7Ci0KLSAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBw
ZWQoKTsKLQotICAgIGNhaXJvX3N1cmZhY2VfdCogb3JpZ2luYWxTdXJmYWNlID0gY2Fpcm9fc3Vy
ZmFjZV9yZWZlcmVuY2UoCi0gICAgICAgIHRlc3QtPmdldFNuYXBzaG90QW5kV2FpdFVudGlsUmVh
ZHkoV0VCS0lUX1NOQVBTSE9UX1JFR0lPTl9GVUxMX0RPQ1VNRU5ULCBXRUJLSVRfU05BUFNIT1Rf
T1BUSU9OU19OT05FKSk7Ci0gICAgZ19hc3NlcnQob3JpZ2luYWxTdXJmYWNlKTsKLQotICAgIHRl
c3QtPmZpbmQoInRlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUsIDEpOwotICAgIHRl
c3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZv
dW5kKTsKLQotICAgIGNhaXJvX3N1cmZhY2VfdCogaGlnaGxpZ2h0U3VyZmFjZSA9IGNhaXJvX3N1
cmZhY2VfcmVmZXJlbmNlKAotICAgICAgICB0ZXN0LT5nZXRTbmFwc2hvdEFuZFdhaXRVbnRpbFJl
YWR5KFdFQktJVF9TTkFQU0hPVF9SRUdJT05fRlVMTF9ET0NVTUVOVCwgV0VCS0lUX1NOQVBTSE9U
X09QVElPTlNfTk9ORSkpOwotICAgIGdfYXNzZXJ0KGhpZ2hsaWdodFN1cmZhY2UpOwotICAgIGdf
YXNzZXJ0KCFUZXN0OjpjYWlyb1N1cmZhY2VzRXF1YWwob3JpZ2luYWxTdXJmYWNlLCBoaWdobGln
aHRTdXJmYWNlKSk7Ci0KLSAgICBXZWJLaXRGaW5kQ29udHJvbGxlciogZmluZENvbnRyb2xsZXIg
PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ZpbmRfY29udHJvbGxlcih0ZXN0LT5tX3dlYlZpZXcpOwot
ICAgIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX2ZpbmlzaChmaW5kQ29udHJvbGxlcik7
Ci0gICAgd2Via2l0X3dlYl92aWV3X2V4ZWN1dGVfZWRpdGluZ19jb21tYW5kKHRlc3QtPm1fd2Vi
VmlldywgIlVuc2VsZWN0Iik7Ci0KLSAgICBjYWlyb19zdXJmYWNlX3QqIHVuaGlnaGxpZ2h0U3Vy
ZmFjZSA9IGNhaXJvX3N1cmZhY2VfcmVmZXJlbmNlKAotICAgICAgICB0ZXN0LT5nZXRTbmFwc2hv
dEFuZFdhaXRVbnRpbFJlYWR5KFdFQktJVF9TTkFQU0hPVF9SRUdJT05fRlVMTF9ET0NVTUVOVCwg
V0VCS0lUX1NOQVBTSE9UX09QVElPTlNfTk9ORSkpOwotICAgIGdfYXNzZXJ0KHVuaGlnaGxpZ2h0
U3VyZmFjZSk7Ci0gICAgZ19hc3NlcnQoVGVzdDo6Y2Fpcm9TdXJmYWNlc0VxdWFsKG9yaWdpbmFs
U3VyZmFjZSwgdW5oaWdobGlnaHRTdXJmYWNlKSk7Ci0KLSAgICBjYWlyb19zdXJmYWNlX2Rlc3Ry
b3kob3JpZ2luYWxTdXJmYWNlKTsKLSAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koaGlnaGxpZ2h0
U3VyZmFjZSk7Ci0gICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KHVuaGlnaGxpZ2h0U3VyZmFjZSk7
Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RGaW5kQ29udHJvbGxlckluc3RhbmNlKEZpbmRDb250cm9s
bGVyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBXZWJLaXRGaW5kQ29udHJvbGxl
ciogZmluZENvbnRyb2xsZXIxID0gd2Via2l0X3dlYl92aWV3X2dldF9maW5kX2NvbnRyb2xsZXIo
dGVzdC0+bV93ZWJWaWV3KTsKLSAgICBXZWJLaXRGaW5kQ29udHJvbGxlciogZmluZENvbnRyb2xs
ZXIyID0gd2Via2l0X3dlYl92aWV3X2dldF9maW5kX2NvbnRyb2xsZXIodGVzdC0+bV93ZWJWaWV3
KTsKLQotICAgIGdfYXNzZXJ0KGZpbmRDb250cm9sbGVyMSA9PSBmaW5kQ29udHJvbGxlcjIpOwot
fQotCi1zdGF0aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xsZXJHZXR0ZXJzKEZpbmRDb250cm9sbGVy
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBjb25zdCBjaGFyKiBzZWFyY2hUZXh0
ID0gInRlc3RpbmciOwotICAgIGd1aW50IG1heE1hdGNoQ291bnQgPSAxOwotICAgIGd1aW50MzIg
ZmluZE9wdGlvbnMgPSBXRUJLSVRfRklORF9PUFRJT05TX1dSQVBfQVJPVU5EIHwgV0VCS0lUX0ZJ
TkRfT1BUSU9OU19BVF9XT1JEX1NUQVJUUzsKLSAgICBXZWJLaXRGaW5kQ29udHJvbGxlciogZmlu
ZENvbnRyb2xsZXIgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ZpbmRfY29udHJvbGxlcih0ZXN0LT5t
X3dlYlZpZXcpOwotCi0gICAgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2goZmluZENvbnRy
b2xsZXIsIHNlYXJjaFRleHQsIGZpbmRPcHRpb25zLCBtYXhNYXRjaENvdW50KTsKLSAgICBnX2Fz
c2VydCh3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF93ZWJfdmlldyhmaW5kQ29udHJvbGxlcikg
PT0gdGVzdC0+bV93ZWJWaWV3KTsKLSAgICBnX2Fzc2VydCghZ19zdHJjbXAwKHdlYmtpdF9maW5k
X2NvbnRyb2xsZXJfZ2V0X3NlYXJjaF90ZXh0KGZpbmRDb250cm9sbGVyKSwgc2VhcmNoVGV4dCkp
OwotICAgIGdfYXNzZXJ0KHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X21heF9tYXRjaF9jb3Vu
dChmaW5kQ29udHJvbGxlcikgPT0gbWF4TWF0Y2hDb3VudCk7Ci0gICAgZ19hc3NlcnQod2Via2l0
X2ZpbmRfY29udHJvbGxlcl9nZXRfb3B0aW9ucyhmaW5kQ29udHJvbGxlcikgPT0gZmluZE9wdGlv
bnMpOwotfQotCi12b2lkIGJlZm9yZUFsbCgpCi17Ci0gICAgRmluZENvbnRyb2xsZXJUZXN0Ojph
ZGQoIldlYktpdEZpbmRDb250cm9sbGVyIiwgImdldHRlcnMiLCB0ZXN0RmluZENvbnRyb2xsZXJH
ZXR0ZXJzKTsKLSAgICBGaW5kQ29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRyb2xs
ZXIiLCAiaW5zdGFuY2UiLCB0ZXN0RmluZENvbnRyb2xsZXJJbnN0YW5jZSk7Ci0gICAgRmluZENv
bnRyb2xsZXJUZXN0OjphZGQoIldlYktpdEZpbmRDb250cm9sbGVyIiwgInRleHQtZm91bmQiLCB0
ZXN0RmluZENvbnRyb2xsZXJUZXh0Rm91bmQpOwotICAgIEZpbmRDb250cm9sbGVyVGVzdDo6YWRk
KCJXZWJLaXRGaW5kQ29udHJvbGxlciIsICJ0ZXh0LW5vdC1mb3VuZCIsIHRlc3RGaW5kQ29udHJv
bGxlclRleHROb3RGb3VuZCk7Ci0gICAgRmluZENvbnRyb2xsZXJUZXN0OjphZGQoIldlYktpdEZp
bmRDb250cm9sbGVyIiwgIm1hdGNoLWNvdW50IiwgdGVzdEZpbmRDb250cm9sbGVyTWF0Y2hDb3Vu
dCk7Ci0gICAgRmluZENvbnRyb2xsZXJUZXN0OjphZGQoIldlYktpdEZpbmRDb250cm9sbGVyIiwg
Im1heC1tYXRjaC1jb3VudCIsIHRlc3RGaW5kQ29udHJvbGxlck1heE1hdGNoQ291bnQpOwotICAg
IEZpbmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udHJvbGxlciIsICJuZXh0Iiwg
dGVzdEZpbmRDb250cm9sbGVyTmV4dCk7Ci0gICAgRmluZENvbnRyb2xsZXJUZXN0OjphZGQoIldl
YktpdEZpbmRDb250cm9sbGVyIiwgInByZXZpb3VzIiwgdGVzdEZpbmRDb250cm9sbGVyUHJldmlv
dXMpOwotICAgIEZpbmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udHJvbGxlciIs
ICJjb3VudGVkLW1hdGNoZXMiLCB0ZXN0RmluZENvbnRyb2xsZXJDb3VudGVkTWF0Y2hlcyk7Ci0g
ICAgRmluZENvbnRyb2xsZXJUZXN0OjphZGQoIldlYktpdEZpbmRDb250cm9sbGVyIiwgIm9wdGlv
bnMiLCB0ZXN0RmluZENvbnRyb2xsZXJPcHRpb25zKTsKLSAgICBGaW5kQ29udHJvbGxlclRlc3Q6
OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIiLCAiaGlkZSIsIHRlc3RGaW5kQ29udHJvbGxlckhp
ZGUpOwotfQotCi12b2lkIGFmdGVyQWxsKCkKLXsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRQb2xpY3lDbGllbnQuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFBvbGljeUNs
aWVudC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwOWVhMDQuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFBv
bGljeUNsaWVudC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNjcgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNs
dWRlICJMb2FkVHJhY2tpbmdUZXN0LmgiCi0jaW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5oIgot
I2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+Ci0KLXN0YXRpYyBXZWJLaXRUZXN0U2VydmVyKiBrU2VydmVyOwotCi1jbGFzcyBQb2xp
Y3lDbGllbnRUZXN0OiBwdWJsaWMgTG9hZFRyYWNraW5nVGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFL
RV9HTElCX1RFU1RfRklYVFVSRShQb2xpY3lDbGllbnRUZXN0KTsKLQotICAgIGVudW0gUG9saWN5
RGVjaXNpb25SZXNwb25zZSB7Ci0gICAgICAgIFVzZSwKLSAgICAgICAgSWdub3JlLAotICAgICAg
ICBEb3dubG9hZCwKLSAgICAgICAgTm9uZQotICAgIH07Ci0KLSAgICBQb2xpY3lDbGllbnRUZXN0
KCkKLSAgICAgICAgOiBMb2FkVHJhY2tpbmdUZXN0KCkKLSAgICAgICAgLCBtX3BvbGljeURlY2lz
aW9uUmVzcG9uc2UoTm9uZSkKLSAgICAgICAgLCBtX3BvbGljeURlY2lzaW9uVHlwZUZpbHRlcigw
KQotICAgICAgICAsIG1fcmVzcG9uZFRvUG9saWN5RGVjaXNpb25Bc3luY2hyb25vdXNseShmYWxz
ZSkKLSAgICAgICAgLCBtX2hhbHRNYWluTG9vcEFmdGVyTWFraW5nRGVjaXNpb24oZmFsc2UpCi0g
ICAgewotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImRlY2lkZS1wb2xpY3ki
LCBHX0NBTExCQUNLKGRlY2lkZVBvbGljeUNhbGxiYWNrKSwgdGhpcyk7Ci0gICAgfQotCi0gICAg
c3RhdGljIGdib29sZWFuIHF1aXRNYWluTG9vcExhdGVyKEdNYWluTG9vcCogbG9vcCkKLSAgICB7
Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci0gICAgICAgIHJldHVybiBGQUxTRTsK
LSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCByZXNwb25kVG9Qb2xpY3lEZWNpc2lvbihQb2xpY3lD
bGllbnRUZXN0KiB0ZXN0LCBXZWJLaXRQb2xpY3lEZWNpc2lvbiogZGVjaXNpb24pCi0gICAgewot
ICAgICAgICBzd2l0Y2ggKHRlc3QtPm1fcG9saWN5RGVjaXNpb25SZXNwb25zZSkgewotICAgICAg
ICBjYXNlIFVzZToKLSAgICAgICAgICAgIHdlYmtpdF9wb2xpY3lfZGVjaXNpb25fdXNlKGRlY2lz
aW9uKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElnbm9yZToKLSAgICAgICAg
ICAgIHdlYmtpdF9wb2xpY3lfZGVjaXNpb25faWdub3JlKGRlY2lzaW9uKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIERvd25sb2FkOgotICAgICAgICAgICAgd2Via2l0X3BvbGlj
eV9kZWNpc2lvbl9kb3dubG9hZChkZWNpc2lvbik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBOb25lOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAodGVzdC0+bV9oYWx0TWFpbkxvb3BBZnRlck1ha2luZ0RlY2lzaW9uKQotICAgICAgICAgICAg
Z19pZGxlX2FkZChyZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihxdWl0TWFpbkxvb3BMYXRl
ciksIHRlc3QtPm1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiByZXNw
b25kVG9Qb2xpY3lEZWNpc2lvbkxhdGVyKFBvbGljeUNsaWVudFRlc3QqIHRlc3QpCi0gICAgewot
ICAgICAgICByZXNwb25kVG9Qb2xpY3lEZWNpc2lvbih0ZXN0LCB0ZXN0LT5tX3ByZXZpb3VzUG9s
aWN5RGVjaXNpb24uZ2V0KCkpOwotICAgICAgICB0ZXN0LT5tX3ByZXZpb3VzUG9saWN5RGVjaXNp
b24gPSAwOwotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gICAgc3RhdGljIGdib29s
ZWFuIGRlY2lkZVBvbGljeUNhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFBv
bGljeURlY2lzaW9uKiBkZWNpc2lvbiwgV2ViS2l0UG9saWN5RGVjaXNpb25UeXBlIHR5cGUsIFBv
bGljeUNsaWVudFRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICBpZiAodGVzdC0+bV9wb2xpY3lE
ZWNpc2lvblR5cGVGaWx0ZXIgIT0gdHlwZSkKLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsKLQot
ICAgICAgICB0ZXN0LT5tX3ByZXZpb3VzUG9saWN5RGVjaXNpb24gPSBkZWNpc2lvbjsKLSAgICAg
ICAgaWYgKHRlc3QtPm1fcmVzcG9uZFRvUG9saWN5RGVjaXNpb25Bc3luY2hyb25vdXNseSkgewot
ICAgICAgICAgICAgZ19pZGxlX2FkZChyZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihyZXNw
b25kVG9Qb2xpY3lEZWNpc2lvbkxhdGVyKSwgdGVzdCk7Ci0gICAgICAgICAgICByZXR1cm4gVFJV
RTsKLSAgICAgICAgfQotCi0gICAgICAgIHJlc3BvbmRUb1BvbGljeURlY2lzaW9uKHRlc3QsIGRl
Y2lzaW9uKTsKLQotICAgICAgICAvLyBXZSByZXR1cm4gRkFMU0UgaGVyZSB0byBlbnN1cmUgdGhh
dCB0aGUgZGVmYXVsdCBwb2xpY3kgZGVjaXNpb24KLSAgICAgICAgLy8gaGFuZGxlciBkb2Vzbid0
IG92ZXJyaWRlIHdoYXRldmVyIHdlIHVzZSBoZXJlLgotICAgICAgICByZXR1cm4gRkFMU0U7Ci0g
ICAgfQotCi0gICAgUG9saWN5RGVjaXNpb25SZXNwb25zZSBtX3BvbGljeURlY2lzaW9uUmVzcG9u
c2U7Ci0gICAgaW50IG1fcG9saWN5RGVjaXNpb25UeXBlRmlsdGVyOwotICAgIGJvb2wgbV9yZXNw
b25kVG9Qb2xpY3lEZWNpc2lvbkFzeW5jaHJvbm91c2x5OwotICAgIGJvb2wgbV9oYWx0TWFpbkxv
b3BBZnRlck1ha2luZ0RlY2lzaW9uOwotICAgIEdSZWZQdHI8V2ViS2l0UG9saWN5RGVjaXNpb24+
IG1fcHJldmlvdXNQb2xpY3lEZWNpc2lvbjsKLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3ROYXZpZ2F0
aW9uUG9saWN5KFBvbGljeUNsaWVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAg
dGVzdC0+bV9wb2xpY3lEZWNpc2lvblR5cGVGaWx0ZXIgPSBXRUJLSVRfUE9MSUNZX0RFQ0lTSU9O
X1RZUEVfTkFWSUdBVElPTl9BQ1RJT047Ci0KLSAgICB0ZXN0LT5tX3BvbGljeURlY2lzaW9uUmVz
cG9uc2UgPSBQb2xpY3lDbGllbnRUZXN0OjpVc2U7Ci0gICAgdGVzdC0+bG9hZEh0bWwoIjxodG1s
Lz4iLCAiaHR0cDovL3dlYmtpdGd0ay5vcmcvIik7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZp
bmlzaGVkKCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50cy5zaXplKCks
ID09LCAzKTsKLQotICAgIC8vIElkZWFsbHkgd2UnZCBsaWtlIHRvIGhhdmUgYSBtb3JlIGludGVu
c2l2ZSB0ZXN0IGhlcmUsIGJ1dCBpdCdzIHN0aWxsIHByZXR0eSB0cmlja3kKLSAgICAvLyB0byB0
cmlnZ2VyIGRpZmZlcmVudCB0eXBlcyBvZiBuYXZpZ2F0aW9ucyB3aXRoIHRoZSBHVEsrIFdlYktp
dDIgQVBJLgotICAgIFdlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbiogZGVjaXNpb24gPSBX
RUJLSVRfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJT04odGVzdC0+bV9wcmV2aW91c1BvbGljeURl
Y2lzaW9uLmdldCgpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X25hdmlnYXRpb25fcG9s
aWN5X2RlY2lzaW9uX2dldF9uYXZpZ2F0aW9uX3R5cGUoZGVjaXNpb24pLCA9PSwgV0VCS0lUX05B
VklHQVRJT05fVFlQRV9PVEhFUik7Ci0gICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9uYXZpZ2F0
aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRfbW91c2VfYnV0dG9uKGRlY2lzaW9uKSwgPT0sIDApOwot
ICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0
X21vZGlmaWVycyhkZWNpc2lvbiksID09LCAwKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0
X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF9mcmFtZV9uYW1lKGRlY2lzaW9uKSwgPT0s
IDApOwotICAgIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QgPSB3ZWJraXRfbmF2aWdhdGlvbl9w
b2xpY3lfZGVjaXNpb25fZ2V0X3JlcXVlc3QoZGVjaXNpb24pOwotICAgIGdfYXNzZXJ0X2NtcHN0
cih3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KSwgPT0sICJodHRwOi8vd2Via2l0
Z3RrLm9yZy8iKTsKLQotICAgIHRlc3QtPm1fcG9saWN5RGVjaXNpb25SZXNwb25zZSA9IFBvbGlj
eUNsaWVudFRlc3Q6OlVzZTsKLSAgICB0ZXN0LT5tX3Jlc3BvbmRUb1BvbGljeURlY2lzaW9uQXN5
bmNocm9ub3VzbHkgPSB0cnVlOwotICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbC8+IiwgImh0dHA6
Ly93ZWJraXRndGsub3JnLyIpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwot
ICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHMuc2l6ZSgpLCA9PSwgMyk7Ci0K
LSAgICAvLyBJZiB3ZSBhcmUgd2FpdGluZyB1bnRpbCBsb2FkIGNvbXBsZXRpb24sIGl0IHdpbGwg
bmV2ZXIgY29tcGxldGUgaWYgd2UgaWdub3JlIHRoZQotICAgIC8vIG5hdmlnYXRpb24uIFNvIHdl
IHRlbGwgdGhlIG1haW4gbG9vcCB0byBxdWl0IHNvbWV0aW1lIGxhdGVyLgotICAgIHRlc3QtPm1f
cG9saWN5RGVjaXNpb25SZXNwb25zZSA9IFBvbGljeUNsaWVudFRlc3Q6Oklnbm9yZTsKLSAgICB0
ZXN0LT5tX3Jlc3BvbmRUb1BvbGljeURlY2lzaW9uQXN5bmNocm9ub3VzbHkgPSBmYWxzZTsKLSAg
ICB0ZXN0LT5tX2hhbHRNYWluTG9vcEFmdGVyTWFraW5nRGVjaXNpb24gPSB0cnVlOwotICAgIHRl
c3QtPmxvYWRIdG1sKCI8aHRtbC8+IiwgImh0dHA6Ly93ZWJraXRndGsub3JnLyIpOwotICAgIHRl
c3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5t
X2xvYWRFdmVudHMuc2l6ZSgpLCA9PSwgMCk7Ci0KLSAgICB0ZXN0LT5tX3BvbGljeURlY2lzaW9u
UmVzcG9uc2UgPSBQb2xpY3lDbGllbnRUZXN0OjpJZ25vcmU7Ci0gICAgdGVzdC0+bG9hZEh0bWwo
IjxodG1sLz4iLCAiaHR0cDovL3dlYmtpdGd0ay5vcmcvIik7Ci0gICAgdGVzdC0+d2FpdFVudGls
TG9hZEZpbmlzaGVkKCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50cy5z
aXplKCksID09LCAwKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFJlc3BvbnNlUG9saWN5KFBvbGlj
eUNsaWVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+bV9wb2xpY3lE
ZWNpc2lvblR5cGVGaWx0ZXIgPSBXRUJLSVRfUE9MSUNZX0RFQ0lTSU9OX1RZUEVfUkVTUE9OU0U7
Ci0KLSAgICB0ZXN0LT5tX3BvbGljeURlY2lzaW9uUmVzcG9uc2UgPSBQb2xpY3lDbGllbnRUZXN0
OjpVc2U7Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIikuZGF0
YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydF9j
bXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0sIDMpOwotICAgIGdfYXNzZXJ0X2Nt
cGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNp
b25hbExvYWRTdGFydGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRz
WzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZENvbW1pdHRlZCk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRG
aW5pc2hlZCk7Ci0KLSAgICBXZWJLaXRSZXNwb25zZVBvbGljeURlY2lzaW9uKiBkZWNpc2lvbiA9
IFdFQktJVF9SRVNQT05TRV9QT0xJQ1lfREVDSVNJT04odGVzdC0+bV9wcmV2aW91c1BvbGljeURl
Y2lzaW9uLmdldCgpKTsKLSAgICBXZWJLaXRVUklSZXF1ZXN0KiByZXF1ZXN0ID0gd2Via2l0X3Jl
c3BvbnNlX3BvbGljeV9kZWNpc2lvbl9nZXRfcmVxdWVzdChkZWNpc2lvbik7Ci0gICAgZ19hc3Nl
cnQoV0VCS0lUX0lTX1VSSV9SRVFVRVNUKHJlcXVlc3QpKTsKLSAgICBBU1NFUlRfQ01QX0NTVFJJ
Tkcod2Via2l0X3VyaV9yZXF1ZXN0X2dldF91cmkocmVxdWVzdCksID09LCBrU2VydmVyLT5nZXRV
UklGb3JQYXRoKCIvIikpOwotICAgIFdlYktpdFVSSVJlc3BvbnNlKiByZXNwb25zZSA9IHdlYmtp
dF9yZXNwb25zZV9wb2xpY3lfZGVjaXNpb25fZ2V0X3Jlc3BvbnNlKGRlY2lzaW9uKTsKLSAgICBn
X2Fzc2VydChXRUJLSVRfSVNfVVJJX1JFU1BPTlNFKHJlc3BvbnNlKSk7Ci0gICAgQVNTRVJUX0NN
UF9DU1RSSU5HKHdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0X3VyaShyZXNwb25zZSksID09LCBrU2Vy
dmVyLT5nZXRVUklGb3JQYXRoKCIvIikpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19j
YW5fc2hvd19taW1lX3R5cGUodGVzdC0+bV93ZWJWaWV3LCB3ZWJraXRfdXJpX3Jlc3BvbnNlX2dl
dF9taW1lX3R5cGUocmVzcG9uc2UpKSA9PQotICAgICAgICB3ZWJraXRfcmVzcG9uc2VfcG9saWN5
X2RlY2lzaW9uX2lzX21pbWVfdHlwZV9zdXBwb3J0ZWQoZGVjaXNpb24pKTsKLQotICAgIHRlc3Qt
Pm1fcmVzcG9uZFRvUG9saWN5RGVjaXNpb25Bc3luY2hyb25vdXNseSA9IHRydWU7Ci0gICAgdGVz
dC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIikuZGF0YSgpKTsKLSAgICB0ZXN0
LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9s
b2FkRXZlbnRzLnNpemUoKSwgPT0sIDMpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xv
YWRFdmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVk
KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzFdLCA9PSwgTG9hZFRy
YWNraW5nVGVzdDo6TG9hZENvbW1pdHRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1f
bG9hZEV2ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7Ci0KLSAg
ICB0ZXN0LT5tX3Jlc3BvbmRUb1BvbGljeURlY2lzaW9uQXN5bmNocm9ub3VzbHkgPSBmYWxzZTsK
LSAgICB0ZXN0LT5tX3BvbGljeURlY2lzaW9uUmVzcG9uc2UgPSBQb2xpY3lDbGllbnRUZXN0OjpJ
Z25vcmU7Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIikuZGF0
YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0
X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHMuc2l6ZSgpLCA9PSwgMyk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1swXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zp
c2lvbmFsTG9hZFN0YXJ0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVu
dHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRGYWlsZWQpOwotICAg
IGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMl0sID09LCBMb2FkVHJhY2tpbmdU
ZXN0OjpMb2FkRmluaXNoZWQpOwotfQotCi1zdHJ1Y3QgQ3JlYXRlQ2FsbGJhY2tEYXRhIHsKLSAg
ICBib29sIHRyaWVkVG9PcGVuV2luZG93OwotICAgIEdNYWluTG9vcCogbWFpbkxvb3A7Ci19Owot
Ci1zdGF0aWMgV2ViS2l0V2ViVmlldyogY3JlYXRlQ2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2Vi
VmlldywgQ3JlYXRlQ2FsbGJhY2tEYXRhKiBkYXRhKQotewotICAgIGRhdGEtPnRyaWVkVG9PcGVu
V2luZG93ID0gdHJ1ZTsKLSAgICBnX21haW5fbG9vcF9xdWl0KGRhdGEtPm1haW5Mb29wKTsKLSAg
ICByZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgdGVzdE5ld1dpbmRvd1BvbGljeShQb2xpY3lD
bGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHN0YXRpYyBjb25zdCBjaGFy
KiB3aW5kb3dPcGVuaW5nSFRNTCA9Ci0gICAgICAgICI8aHRtbD48Ym9keT4iCi0gICAgICAgICIg
ICAgPGEgaWQ9XCJsaW5rXCIgaHJlZj1cImh0dHA6Ly93d3cuZ29vZ2xlLmNvbVwiIHRhcmdldD1c
Il9ibGFua1wiPkxpbms8L2E+IgotICAgICAgICAiICAgIDxzY3JpcHQ+IgotICAgICAgICAiICAg
ICAgICB2YXIgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnTW91c2VFdmVudHMnKTsiCi0g
ICAgICAgICIgICAgICAgIGV2ZW50LmluaXRFdmVudCgnY2xpY2snLCB0cnVlLCBmYWxzZSk7Igot
ICAgICAgICAiICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGluaycpLmRpc3BhdGNo
RXZlbnQoZXZlbnQpOyIKLSAgICAgICAgIiAgICA8L3NjcmlwdD4iCi0gICAgICAgICI8L2JvZHk+
PC9odG1sPiI7Ci0gICAgdGVzdC0+bV9wb2xpY3lEZWNpc2lvblR5cGVGaWx0ZXIgPSBXRUJLSVRf
UE9MSUNZX0RFQ0lTSU9OX1RZUEVfTkVXX1dJTkRPV19BQ1RJT047Ci0gICAgd2Via2l0X3NldHRp
bmdzX3NldF9qYXZhc2NyaXB0X2Nhbl9vcGVuX3dpbmRvd3NfYXV0b21hdGljYWxseSh3ZWJraXRf
d2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHRlc3QtPm1fd2ViVmlldyksIFRSVUUpOwotCi0gICAgQ3Jl
YXRlQ2FsbGJhY2tEYXRhIGRhdGE7Ci0gICAgZGF0YS50cmllZFRvT3BlbldpbmRvdyA9IGZhbHNl
OwotICAgIGRhdGEubWFpbkxvb3AgPSB0ZXN0LT5tX21haW5Mb29wOwotCi0gICAgZ19zaWduYWxf
Y29ubmVjdCh0ZXN0LT5tX3dlYlZpZXcsICJjcmVhdGUiLCBHX0NBTExCQUNLKGNyZWF0ZUNhbGxi
YWNrKSwgJmRhdGEpOwotICAgIHRlc3QtPm1fcG9saWN5RGVjaXNpb25SZXNwb25zZSA9IFBvbGlj
eUNsaWVudFRlc3Q6OlVzZTsKLSAgICB0ZXN0LT5sb2FkSHRtbCh3aW5kb3dPcGVuaW5nSFRNTCwg
Imh0dHA6Ly93ZWJraXRndGsub3JnLyIpOwotICAgIHRlc3QtPndhaXQoMSk7Ci0gICAgZ19hc3Nl
cnQoZGF0YS50cmllZFRvT3BlbldpbmRvdyk7Ci0KLSAgICBXZWJLaXROYXZpZ2F0aW9uUG9saWN5
RGVjaXNpb24qIGRlY2lzaW9uID0gV0VCS0lUX05BVklHQVRJT05fUE9MSUNZX0RFQ0lTSU9OKHRl
c3QtPm1fcHJldmlvdXNQb2xpY3lEZWNpc2lvbi5nZXQoKSk7Ci0gICAgZ19hc3NlcnRfY21wc3Ry
KHdlYmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRfZnJhbWVfbmFtZShkZWNpc2lv
biksID09LCAiX2JsYW5rIik7Ci0KLSAgICAvLyBVc2luZyBhIHNob3J0IHRpbWVvdXQgaXMgYSBi
aXQgdWdseSBoZXJlLCBidXQgaXQncyBoYXJkIHRvIGdldCBhcm91bmQgYmVjYXVzZSBpZiB3ZSBi
bG9jawotICAgIC8vIHRoZSBuZXcgd2luZG93IHNpZ25hbCB3ZSBjYW5ub3QgaGFsdCB0aGUgbWFp
biBsb29wIGluIHRoZSBjcmVhdGUgY2FsbGJhY2suIElmIHdlCi0gICAgLy8gaGFsdCB0aGUgbWFp
biBsb29wIGluIHRoZSBwb2xpY3kgZGVjaXNpb24sIHRoZSBjcmVhdGUgY2FsbGJhY2sgbmV2ZXIg
ZXhlY3V0ZXMuCi0gICAgZGF0YS50cmllZFRvT3BlbldpbmRvdyA9IGZhbHNlOwotICAgIHRlc3Qt
Pm1fcG9saWN5RGVjaXNpb25SZXNwb25zZSA9IFBvbGljeUNsaWVudFRlc3Q6Oklnbm9yZTsKLSAg
ICB0ZXN0LT5sb2FkSHRtbCh3aW5kb3dPcGVuaW5nSFRNTCwgImh0dHA6Ly93ZWJraXRndGsub3Jn
LyIpOwotICAgIHRlc3QtPndhaXQoLjIpOwotICAgIGdfYXNzZXJ0KCFkYXRhLnRyaWVkVG9PcGVu
V2luZG93KTsKLX0KLQotc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2Vy
dmVyLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSos
IFNvdXBDbGllbnRDb250ZXh0KiwgZ3BvaW50ZXIpCi17Ci0gICAgaWYgKG1lc3NhZ2UtPm1ldGhv
ZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMo
bWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiLyIpKSB7Ci0gICAgICAgIHN0YXRp
YyBjb25zdCBjaGFyKiByZXNwb25zZVN0cmluZyA9ICI8aHRtbD48Ym9keT5UZXN0aW5nITwvYm9k
eT48L2h0bWw+IjsKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09V
UF9TVEFUVVNfT0spOwotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+
cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCByZXNwb25zZVN0cmluZywgc3RybGVu
KHJlc3BvbnNlU3RyaW5nKSk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1l
c3NhZ2UtPnJlc3BvbnNlX2JvZHkpOwotICAgIH0gZWxzZQotICAgICAgICBzb3VwX21lc3NhZ2Vf
c2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfRk9VTkQpOwotfQotCi12b2lkIGJl
Zm9yZUFsbCgpCi17Ci0gICAga1NlcnZlciA9IG5ldyBXZWJLaXRUZXN0U2VydmVyKCk7Ci0gICAg
a1NlcnZlci0+cnVuKHNlcnZlckNhbGxiYWNrKTsKLQotICAgIFBvbGljeUNsaWVudFRlc3Q6OmFk
ZCgiV2ViS2l0UG9saWN5Q2xpZW50IiwgIm5hdmlnYXRpb24tcG9saWN5IiwgdGVzdE5hdmlnYXRp
b25Qb2xpY3kpOwotICAgIFBvbGljeUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0UG9saWN5Q2xpZW50
IiwgInJlc3BvbnNlLXBvbGljeSIsIHRlc3RSZXNwb25zZVBvbGljeSk7Ci0gICAgUG9saWN5Q2xp
ZW50VGVzdDo6YWRkKCJXZWJLaXRQb2xpY3lDbGllbnQiLCAibmV3LXdpbmRvdy1wb2xpY3kiLCB0
ZXN0TmV3V2luZG93UG9saWN5KTsKLX0KLQotdm9pZCBhZnRlckFsbCgpCi17Ci0gICAgZGVsZXRl
IGtTZXJ2ZXI7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9UZXN0V2ViS2l0U2V0dGluZ3MuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFNldHRpbmdzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYzFkMzAxOC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0U2V0dGluZ3MuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMzcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTEgTW90b3JvbGEgTW9iaWxp
dHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNh
dGlvbiwgCi0gKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZSBtZXQ6Ci0gKgotICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKLSAqIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKgotICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQg
bm90aWNlLCAKLSAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIAotICogb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgCi0gKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IAotICogc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCAKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIAotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSAKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIAotICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIAotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotCi0jaW5jbHVkZSAiVGVzdE1haW4uaCIKLSNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgotI2lu
Y2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVk
ZSA8d2Via2l0Mi93ZWJraXQyLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgot
Ci1zdGF0aWMgV2ViS2l0VGVzdFNlcnZlciogZ1NlcnZlcjsKLQotc3RhdGljIHZvaWQgdGVzdFdl
YktpdFNldHRpbmdzKFRlc3QqLCBnY29uc3Rwb2ludGVyKQotewotICAgIFdlYktpdFNldHRpbmdz
KiBzZXR0aW5ncyA9IHdlYmtpdF9zZXR0aW5nc19uZXcoKTsKLQotICAgIC8vIEphdmFTY3JpcHQg
aXMgZW5hYmxlZCBieSBkZWZhdWx0LgotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRf
ZW5hYmxlX2phdmFzY3JpcHQoc2V0dGluZ3MpKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2Vu
YWJsZV9qYXZhc2NyaXB0KHNldHRpbmdzLCBGQUxTRSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9z
ZXR0aW5nc19nZXRfZW5hYmxlX2phdmFzY3JpcHQoc2V0dGluZ3MpKTsKLQotICAgIC8vIEJ5IGRl
ZmF1bHQgYXV0by1sb2FkLWltYWdlIGlzIHRydWUuCi0gICAgZ19hc3NlcnQod2Via2l0X3NldHRp
bmdzX2dldF9hdXRvX2xvYWRfaW1hZ2VzKHNldHRpbmdzKSk7Ci0gICAgd2Via2l0X3NldHRpbmdz
X3NldF9hdXRvX2xvYWRfaW1hZ2VzKHNldHRpbmdzLCBGQUxTRSk7Ci0gICAgZ19hc3NlcnQoIXdl
YmtpdF9zZXR0aW5nc19nZXRfYXV0b19sb2FkX2ltYWdlcyhzZXR0aW5ncykpOwotCi0gICAgLy8g
bG9hZC1pY29ucy1pZ25vcmluZy1pbWFnZS1sb2FkLXNldHRpbmcgaXMgZmFsc2UgYnkgZGVmYXVs
dC4KLSAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9sb2FkX2ljb25zX2lnbm9yaW5n
X2ltYWdlX2xvYWRfc2V0dGluZyhzZXR0aW5ncykpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRf
bG9hZF9pY29uc19pZ25vcmluZ19pbWFnZV9sb2FkX3NldHRpbmcoc2V0dGluZ3MsIFRSVUUpOwot
ICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfbG9hZF9pY29uc19pZ25vcmluZ19pbWFn
ZV9sb2FkX3NldHRpbmcoc2V0dGluZ3MpKTsKLSAgICAKLSAgICAvLyBPZmZsaW5lIGFwcGxpY2F0
aW9uIGNhY2hlIGlzIHRydWUgYnkgZGVmYXVsdC4KLSAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGlu
Z3NfZ2V0X2VuYWJsZV9vZmZsaW5lX3dlYl9hcHBsaWNhdGlvbl9jYWNoZShzZXR0aW5ncykpOwot
ICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX29mZmxpbmVfd2ViX2FwcGxpY2F0aW9uX2Nh
Y2hlKHNldHRpbmdzLCBGQUxTRSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRf
ZW5hYmxlX29mZmxpbmVfd2ViX2FwcGxpY2F0aW9uX2NhY2hlKHNldHRpbmdzKSk7Ci0KLSAgICAv
LyBMb2NhbCBzdG9yYWdlIGlzIGVuYWJsZSBieSBkZWZhdWx0LgotICAgIGdfYXNzZXJ0KHdlYmtp
dF9zZXR0aW5nc19nZXRfZW5hYmxlX2h0bWw1X2xvY2FsX3N0b3JhZ2Uoc2V0dGluZ3MpKTsKLSAg
ICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9odG1sNV9sb2NhbF9zdG9yYWdlKHNldHRpbmdz
LCBGQUxTRSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2h0bWw1
X2xvY2FsX3N0b3JhZ2Uoc2V0dGluZ3MpKTsKLQotICAgIC8vIEhUTUw1IGRhdGFiYXNlIGlzIGVu
YWJsZWQgYnkgZGVmYXVsdC4KLSAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJs
ZV9odG1sNV9kYXRhYmFzZShzZXR0aW5ncykpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5h
YmxlX2h0bWw1X2RhdGFiYXNlKHNldHRpbmdzLCBGQUxTRSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtp
dF9zZXR0aW5nc19nZXRfZW5hYmxlX2h0bWw1X2RhdGFiYXNlKHNldHRpbmdzKSk7Ci0KLSAgICAv
LyBYU1MgQXVkaXRvciBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCi0gICAgZ19hc3NlcnQod2Via2l0
X3NldHRpbmdzX2dldF9lbmFibGVfeHNzX2F1ZGl0b3Ioc2V0dGluZ3MpKTsKLSAgICB3ZWJraXRf
c2V0dGluZ3Nfc2V0X2VuYWJsZV94c3NfYXVkaXRvcihzZXR0aW5ncywgRkFMU0UpOwotICAgIGdf
YXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV94c3NfYXVkaXRvcihzZXR0aW5ncykp
OwotCi0gICAgLy8gRnJhbWUgZmxhdHRlbmluZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgotICAg
IGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9mcmFtZV9mbGF0dGVuaW5nKHNl
dHRpbmdzKSk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfZnJhbWVfZmxhdHRlbmlu
ZyhzZXR0aW5ncywgVFJVRSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFi
bGVfZnJhbWVfZmxhdHRlbmluZyhzZXR0aW5ncykpOwotCi0gICAgLy8gUGx1Z2lucyBhcmUgZW5h
YmxlZCBieSBkZWZhdWx0LgotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxl
X3BsdWdpbnMoc2V0dGluZ3MpKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9wbHVn
aW5zKHNldHRpbmdzLCBGQUxTRSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRf
ZW5hYmxlX3BsdWdpbnMoc2V0dGluZ3MpKTsKLQotICAgIC8vIEphdmEgaXMgZW5hYmxlZCBieSBk
ZWZhdWx0LgotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2phdmEoc2V0
dGluZ3MpKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9qYXZhKHNldHRpbmdzLCBG
QUxTRSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2phdmEoc2V0
dGluZ3MpKTsKLQotICAgIC8vIEJ5IGRlZmF1bHQsIEphdmFTY3JpcHQgY2FuIG9wZW4gd2luZG93
cyBhdXRvbWF0aWNhbGx5IGlzIGRpc2FibGVkLgotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGlu
Z3NfZ2V0X2phdmFzY3JpcHRfY2FuX29wZW5fd2luZG93c19hdXRvbWF0aWNhbGx5KHNldHRpbmdz
KSk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9qYXZhc2NyaXB0X2Nhbl9vcGVuX3dpbmRvd3Nf
YXV0b21hdGljYWxseShzZXR0aW5ncywgVFJVRSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3NldHRp
bmdzX2dldF9qYXZhc2NyaXB0X2Nhbl9vcGVuX3dpbmRvd3NfYXV0b21hdGljYWxseShzZXR0aW5n
cykpOwotCi0gICAgLy8gQnkgZGVmYXVsdCBoeXBlciBsaW5rIGF1ZGl0aW5nIGlzIGRpc2FibGVk
LgotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9oeXBlcmxpbmtfYXVk
aXRpbmcoc2V0dGluZ3MpKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9oeXBlcmxp
bmtfYXVkaXRpbmcoc2V0dGluZ3MsIFRSVUUpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5n
c19nZXRfZW5hYmxlX2h5cGVybGlua19hdWRpdGluZyhzZXR0aW5ncykpOwotCi0gICAgLy8gRGVm
YXVsdCBmb250IGZhbWlseSBpcyAic2Fucy1zZXJpZiIuCi0gICAgZ19hc3NlcnRfY21wc3RyKHdl
YmtpdF9zZXR0aW5nc19nZXRfZGVmYXVsdF9mb250X2ZhbWlseShzZXR0aW5ncyksID09LCAic2Fu
cy1zZXJpZiIpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZGVmYXVsdF9mb250X2ZhbWlseShz
ZXR0aW5ncywgIm1vbm9zcGFjZSIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2V0dGlu
Z3NfZ2V0X2RlZmF1bHRfZm9udF9mYW1pbHkoc2V0dGluZ3MpLCA9PSwgIm1vbm9zcGFjZSIpOwot
Ci0gICAgLy8gRGVmYXVsdCBtb25vc3BhY2UgZm9udCBmYW1pbHkgZm9udCBmYW1pbHkgaXMgIm1v
bm9zcGFjZSIuCi0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zZXR0aW5nc19nZXRfbW9ub3Nw
YWNlX2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJtb25vc3BhY2UiKTsKLSAgICB3ZWJraXRf
c2V0dGluZ3Nfc2V0X21vbm9zcGFjZV9mb250X2ZhbWlseShzZXR0aW5ncywgInNhbnMtc2VyaWYi
KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NldHRpbmdzX2dldF9tb25vc3BhY2VfZm9u
dF9mYW1pbHkoc2V0dGluZ3MpLCA9PSwgInNhbnMtc2VyaWYiKTsKLQotICAgIC8vIERlZmF1bHQg
c2VyaWYgZm9udCBmYW1pbHkgaXMgInNlcmlmIi4KLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0
X3NldHRpbmdzX2dldF9zZXJpZl9mb250X2ZhbWlseShzZXR0aW5ncyksID09LCAic2VyaWYiKTsK
LSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X3NlcmlmX2ZvbnRfZmFtaWx5KHNldHRpbmdzLCAic2Fu
cy1zZXJpZiIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2V0dGluZ3NfZ2V0X3Nlcmlm
X2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJzYW5zLXNlcmlmIik7Ci0KLSAgICAvLyBEZWZh
dWx0IHNhbnMgc2VyaWYgZm9udCBmYW1pbHkgaXMgInNhbnMtc2VyaWYiLgotICAgIGdfYXNzZXJ0
X2NtcHN0cih3ZWJraXRfc2V0dGluZ3NfZ2V0X3NhbnNfc2VyaWZfZm9udF9mYW1pbHkoc2V0dGlu
Z3MpLCA9PSwgInNhbnMtc2VyaWYiKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X3NhbnNfc2Vy
aWZfZm9udF9mYW1pbHkoc2V0dGluZ3MsICJzZXJpZiIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3
ZWJraXRfc2V0dGluZ3NfZ2V0X3NhbnNfc2VyaWZfZm9udF9mYW1pbHkoc2V0dGluZ3MpLCA9PSwg
InNlcmlmIik7Ci0KLSAgICAvLyBEZWZhdWx0IGN1cnNpdmUgZm9udCBmYW1pbHkgInNlcmlmIi4K
LSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NldHRpbmdzX2dldF9jdXJzaXZlX2ZvbnRfZmFt
aWx5KHNldHRpbmdzKSwgPT0sICJzZXJpZiIpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfY3Vy
c2l2ZV9mb250X2ZhbWlseShzZXR0aW5ncywgInNhbnMtc2VyaWYiKTsKLSAgICBnX2Fzc2VydF9j
bXBzdHIod2Via2l0X3NldHRpbmdzX2dldF9jdXJzaXZlX2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwg
PT0sICJzYW5zLXNlcmlmIik7Ci0KLSAgICAvLyBEZWZhdWx0IGZhbnRhc3kgZm9udCBmYW1pbHkg
aXMgInNlcmlmIi4KLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NldHRpbmdzX2dldF9mYW50
YXN5X2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJzZXJpZiIpOwotICAgIHdlYmtpdF9zZXR0
aW5nc19zZXRfZmFudGFzeV9mb250X2ZhbWlseShzZXR0aW5ncywgInNhbnMtc2VyaWYiKTsKLSAg
ICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NldHRpbmdzX2dldF9mYW50YXN5X2ZvbnRfZmFtaWx5
KHNldHRpbmdzKSwgPT0sICJzYW5zLXNlcmlmIik7Ci0KLSAgICAvLyBEZWZhdWx0IHBpY3RvZ3Jh
cGggZm9udCBmYW1pbHkgaXMgInNlcmlmIi4KLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3Nl
dHRpbmdzX2dldF9waWN0b2dyYXBoX2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJzZXJpZiIp
OwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfcGljdG9ncmFwaF9mb250X2ZhbWlseShzZXR0aW5n
cywgInNhbnMtc2VyaWYiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NldHRpbmdzX2dl
dF9waWN0b2dyYXBoX2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJzYW5zLXNlcmlmIik7Ci0K
LSAgICAvLyBEZWZhdWx0IGZvbnQgc2l6ZSBpcyAxNi4KLSAgICBnX2Fzc2VydF9jbXB1aW50KHdl
YmtpdF9zZXR0aW5nc19nZXRfZGVmYXVsdF9mb250X3NpemUoc2V0dGluZ3MpLCA9PSwgMTYpOwot
ICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZGVmYXVsdF9mb250X3NpemUoc2V0dGluZ3MsIDE0KTsK
LSAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9zZXR0aW5nc19nZXRfZGVmYXVsdF9mb250X3Np
emUoc2V0dGluZ3MpLCA9PSwgMTQpOwotCi0gICAgLy8gRGVmYXVsdCBtb25vc3BhY2UgZm9udCBz
aXplIGlzIDEzLgotICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X3NldHRpbmdzX2dldF9kZWZh
dWx0X21vbm9zcGFjZV9mb250X3NpemUoc2V0dGluZ3MpLCA9PSwgMTMpOwotICAgIHdlYmtpdF9z
ZXR0aW5nc19zZXRfZGVmYXVsdF9tb25vc3BhY2VfZm9udF9zaXplKHNldHRpbmdzLCAxMCk7Ci0g
ICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2RlZmF1bHRfbW9ub3NwYWNl
X2ZvbnRfc2l6ZShzZXR0aW5ncyksID09LCAxMCk7Ci0KLSAgICAvLyBEZWZhdWx0IG1pbmltdW0g
Zm9udCBzaXplIGlzIDAuCi0gICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfc2V0dGluZ3NfZ2V0
X21pbmltdW1fZm9udF9zaXplKHNldHRpbmdzKSwgPT0sIDApOwotICAgIHdlYmtpdF9zZXR0aW5n
c19zZXRfbWluaW11bV9mb250X3NpemUoc2V0dGluZ3MsIDcpOwotICAgIGdfYXNzZXJ0X2NtcHVp
bnQod2Via2l0X3NldHRpbmdzX2dldF9taW5pbXVtX2ZvbnRfc2l6ZShzZXR0aW5ncyksID09LCA3
KTsKLQotICAgIC8vIERlZmF1bHQgY2hhcnNldCBpcyAiaXNvLTg4NTktMSIuCi0gICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF9zZXR0aW5nc19nZXRfZGVmYXVsdF9jaGFyc2V0KHNldHRpbmdzKSwg
PT0sICJpc28tODg1OS0xIik7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9kZWZhdWx0X2NoYXJz
ZXQoc2V0dGluZ3MsICJ1dGY4Iik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zZXR0aW5n
c19nZXRfZGVmYXVsdF9jaGFyc2V0KHNldHRpbmdzKSwgPT0sICJ1dGY4Iik7Ci0KLSAgICBnX2Fz
c2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfcHJpdmF0ZV9icm93c2luZyhzZXR0aW5n
cykpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX3ByaXZhdGVfYnJvd3Npbmcoc2V0
dGluZ3MsIFRSVUUpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3By
aXZhdGVfYnJvd3Npbmcoc2V0dGluZ3MpKTsKLQotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGlu
Z3NfZ2V0X2VuYWJsZV9kZXZlbG9wZXJfZXh0cmFzKHNldHRpbmdzKSk7Ci0gICAgd2Via2l0X3Nl
dHRpbmdzX3NldF9lbmFibGVfZGV2ZWxvcGVyX2V4dHJhcyhzZXR0aW5ncywgVFJVRSk7Ci0gICAg
Z19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfZGV2ZWxvcGVyX2V4dHJhcyhzZXR0
aW5ncykpOwotCi0gICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfcmVzaXph
YmxlX3RleHRfYXJlYXMoc2V0dGluZ3MpKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJs
ZV9yZXNpemFibGVfdGV4dF9hcmVhcyhzZXR0aW5ncywgRkFMU0UpOwotICAgIGdfYXNzZXJ0KCF3
ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9yZXNpemFibGVfdGV4dF9hcmVhcyhzZXR0aW5ncykp
OwotCi0gICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfdGFic190b19saW5r
cyhzZXR0aW5ncykpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX3RhYnNfdG9fbGlu
a3Moc2V0dGluZ3MsIEZBTFNFKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9l
bmFibGVfdGFic190b19saW5rcyhzZXR0aW5ncykpOwotCi0gICAgZ19hc3NlcnQoIXdlYmtpdF9z
ZXR0aW5nc19nZXRfZW5hYmxlX2Ruc19wcmVmZXRjaGluZyhzZXR0aW5ncykpOwotICAgIHdlYmtp
dF9zZXR0aW5nc19zZXRfZW5hYmxlX2Ruc19wcmVmZXRjaGluZyhzZXR0aW5ncywgVFJVRSk7Ci0g
ICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfZG5zX3ByZWZldGNoaW5nKHNl
dHRpbmdzKSk7Ci0KLSAgICAvLyBDYXJldCBicm93c2luZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0
LgotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9jYXJldF9icm93c2lu
ZyhzZXR0aW5ncykpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX2NhcmV0X2Jyb3dz
aW5nKHNldHRpbmdzLCBUUlVFKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2Vu
YWJsZV9jYXJldF9icm93c2luZyhzZXR0aW5ncykpOwotCi0gICAgLy8gRnVsbHNjcmVlbiBKYXZh
U2NyaXB0IEFQSSBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCi0gICAgZ19hc3NlcnQod2Via2l0X3Nl
dHRpbmdzX2dldF9lbmFibGVfZnVsbHNjcmVlbihzZXR0aW5ncykpOwotICAgIHdlYmtpdF9zZXR0
aW5nc19zZXRfZW5hYmxlX2Z1bGxzY3JlZW4oc2V0dGluZ3MsIEZBTFNFKTsKLSAgICBnX2Fzc2Vy
dCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfZnVsbHNjcmVlbihzZXR0aW5ncykpOwotCi0g
ICAgLy8gUHJpbnQgYmFja2dyb3VuZHMgaXMgZW5hYmxlZCBieSBkZWZhdWx0Ci0gICAgZ19hc3Nl
cnQod2Via2l0X3NldHRpbmdzX2dldF9wcmludF9iYWNrZ3JvdW5kcyhzZXR0aW5ncykpOwotICAg
IHdlYmtpdF9zZXR0aW5nc19zZXRfcHJpbnRfYmFja2dyb3VuZHMoc2V0dGluZ3MsIEZBTFNFKTsK
LSAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9wcmludF9iYWNrZ3JvdW5kcyhzZXR0
aW5ncykpOwotCi0gICAgLy8gV2ViQXVkaW8gaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KLSAgICBn
X2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfd2ViYXVkaW8oc2V0dGluZ3MpKTsK
LSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV93ZWJhdWRpbyhzZXR0aW5ncywgVFJVRSk7
Ci0gICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfd2ViYXVkaW8oc2V0dGlu
Z3MpKTsKLQotICAgIC8vIFdlYkdMIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCi0gICAgZ19hc3Nl
cnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3dlYmdsKHNldHRpbmdzKSk7Ci0gICAgd2Vi
a2l0X3NldHRpbmdzX3NldF9lbmFibGVfd2ViZ2woc2V0dGluZ3MsIFRSVUUpOwotICAgIGdfYXNz
ZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3dlYmdsKHNldHRpbmdzKSk7Ci0KLSAgICAv
LyBBbGxvdyBNb2RhbCBEaWFsb2dzIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCi0gICAgZ19hc3Nl
cnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfYWxsb3dfbW9kYWxfZGlhbG9ncyhzZXR0aW5ncykpOwot
ICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfYWxsb3dfbW9kYWxfZGlhbG9ncyhzZXR0aW5ncywgVFJV
RSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9hbGxvd19tb2RhbF9kaWFsb2dz
KHNldHRpbmdzKSk7Ci0KLSAgICAvLyBab29tIHRleHQgb25seSBpcyBkaXNhYmxlZCBieSBkZWZh
dWx0LgotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X3pvb21fdGV4dF9vbmx5KHNl
dHRpbmdzKSk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF96b29tX3RleHRfb25seShzZXR0aW5n
cywgVFJVRSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF96b29tX3RleHRfb25s
eShzZXR0aW5ncykpOwotCi0gICAgLy8gQnkgZGVmYXVsdCwgSmF2YVNjcmlwdCBjYW5ub3QgYWNj
ZXNzIHRoZSBjbGlwYm9hcmQuCi0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfamF2
YXNjcmlwdF9jYW5fYWNjZXNzX2NsaXBib2FyZChzZXR0aW5ncykpOwotICAgIHdlYmtpdF9zZXR0
aW5nc19zZXRfamF2YXNjcmlwdF9jYW5fYWNjZXNzX2NsaXBib2FyZChzZXR0aW5ncywgVFJVRSk7
Ci0gICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9qYXZhc2NyaXB0X2Nhbl9hY2Nlc3Nf
Y2xpcGJvYXJkKHNldHRpbmdzKSk7Ci0KLSAgICAvLyBCeSBkZWZhdWx0LCBtZWRpYSBwbGF5YmFj
ayBkb2Vzbid0IHJlcXVpcmUgdXNlciBnZXN0dXJlcy4KLSAgICBnX2Fzc2VydCghd2Via2l0X3Nl
dHRpbmdzX2dldF9tZWRpYV9wbGF5YmFja19yZXF1aXJlc191c2VyX2dlc3R1cmUoc2V0dGluZ3Mp
KTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X21lZGlhX3BsYXliYWNrX3JlcXVpcmVzX3VzZXJf
Z2VzdHVyZShzZXR0aW5ncywgVFJVRSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dl
dF9tZWRpYV9wbGF5YmFja19yZXF1aXJlc191c2VyX2dlc3R1cmUoc2V0dGluZ3MpKTsKLQotICAg
IC8vIEJ5IGRlZmF1bHQsIGlubGluZSBtZWRpYSBwbGF5YmFjayBpcyBhbGxvd2VkCi0gICAgZ19h
c3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9tZWRpYV9wbGF5YmFja19hbGxvd3NfaW5saW5lKHNl
dHRpbmdzKSk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9tZWRpYV9wbGF5YmFja19hbGxvd3Nf
aW5saW5lKHNldHRpbmdzLCBGQUxTRSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19n
ZXRfbWVkaWFfcGxheWJhY2tfYWxsb3dzX2lubGluZShzZXR0aW5ncykpOwotCi0gICAgLy8gQnkg
ZGVmYXVsdCwgZGVidWcgaW5kaWNhdG9ycyBhcmUgZGlzYWJsZWQuCi0gICAgZ19hc3NlcnQoIXdl
YmtpdF9zZXR0aW5nc19nZXRfZHJhd19jb21wb3NpdGluZ19pbmRpY2F0b3JzKHNldHRpbmdzKSk7
Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9kcmF3X2NvbXBvc2l0aW5nX2luZGljYXRvcnMoc2V0
dGluZ3MsIFRSVUUpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZHJhd19jb21w
b3NpdGluZ19pbmRpY2F0b3JzKHNldHRpbmdzKSk7Ci0KLSAgICAvLyBCeSBkZWZhdWx0LCBzaXRl
IHNwZWNpZmljIHF1aXJrcyBhcmUgZGlzYWJsZWQuCi0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0
aW5nc19nZXRfZW5hYmxlX3NpdGVfc3BlY2lmaWNfcXVpcmtzKHNldHRpbmdzKSk7Ci0gICAgd2Vi
a2l0X3NldHRpbmdzX3NldF9lbmFibGVfc2l0ZV9zcGVjaWZpY19xdWlya3Moc2V0dGluZ3MsIFRS
VUUpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3NpdGVfc3BlY2lm
aWNfcXVpcmtzKHNldHRpbmdzKSk7Ci0KLSAgICAvLyBCeSBkZWZhdWx0LCBwYWdlIGNhY2hlIGlz
IGVuYWJsZWQuCi0gICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfcGFnZV9j
YWNoZShzZXR0aW5ncykpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX3BhZ2VfY2Fj
aGUoc2V0dGluZ3MsIEZBTFNFKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9l
bmFibGVfcGFnZV9jYWNoZShzZXR0aW5ncykpOwotCi0gICAgLy8gQnkgZGVmYXVsdCwgc21vb3Ro
IHNjcm9sbGluZyBpcyBkaXNhYmxlZC4KLSAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dl
dF9lbmFibGVfc21vb3RoX3Njcm9sbGluZyhzZXR0aW5ncykpOwotICAgIHdlYmtpdF9zZXR0aW5n
c19zZXRfZW5hYmxlX3Ntb290aF9zY3JvbGxpbmcoc2V0dGluZ3MsIFRSVUUpOwotICAgIGdfYXNz
ZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3Ntb290aF9zY3JvbGxpbmcoc2V0dGluZ3Mp
KTsKLQotICAgIC8vIEJ5IGRlZmF1bHQsIGFjY2VsZXJhdGVkIDJEIGNhbnZhcyBpcyBkaXNhYmxl
ZC4KLSAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfYWNjZWxlcmF0ZWRf
MmRfY2FudmFzKHNldHRpbmdzKSk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfYWNj
ZWxlcmF0ZWRfMmRfY2FudmFzKHNldHRpbmdzLCBUUlVFKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRf
c2V0dGluZ3NfZ2V0X2VuYWJsZV9hY2NlbGVyYXRlZF8yZF9jYW52YXMoc2V0dGluZ3MpKTsKLQot
ICAgIC8vIEJ5IGRlZmF1bHQsIHdyaXRpbmcgb2YgY29uc29sZSBtZXNzYWdlcyB0byBzdGRvdXQg
aXMgZGlzYWJsZWQuCi0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3dy
aXRlX2NvbnNvbGVfbWVzc2FnZXNfdG9fc3Rkb3V0KHNldHRpbmdzKSk7Ci0gICAgd2Via2l0X3Nl
dHRpbmdzX3NldF9lbmFibGVfd3JpdGVfY29uc29sZV9tZXNzYWdlc190b19zdGRvdXQoc2V0dGlu
Z3MsIFRSVUUpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3dyaXRl
X2NvbnNvbGVfbWVzc2FnZXNfdG9fc3Rkb3V0KHNldHRpbmdzKSk7Ci0KLSAgICAvLyBNZWRpYVN0
cmVhbSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGlu
Z3NfZ2V0X2VuYWJsZV9tZWRpYV9zdHJlYW0oc2V0dGluZ3MpKTsKLSAgICB3ZWJraXRfc2V0dGlu
Z3Nfc2V0X2VuYWJsZV9tZWRpYV9zdHJlYW0oc2V0dGluZ3MsIFRSVUUpOwotICAgIGdfYXNzZXJ0
KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX21lZGlhX3N0cmVhbShzZXR0aW5ncykpOwotCi0g
ICAgLy8gQnkgZGVmYXVsdCwgU3BhdGlhbE5hdmlnYXRpb24gaXMgZGlzYWJsZWQKLSAgICBnX2Fz
c2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfc3BhdGlhbF9uYXZpZ2F0aW9uKHNldHRp
bmdzKSk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfc3BhdGlhbF9uYXZpZ2F0aW9u
KHNldHRpbmdzLCBUUlVFKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJs
ZV9zcGF0aWFsX25hdmlnYXRpb24oc2V0dGluZ3MpKTsKLQotICAgIC8vIE1lZGlhU291cmNlIGlz
IGRpc2FibGVkIGJ5IGRlZmF1bHQKLSAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9l
bmFibGVfbWVkaWFzb3VyY2Uoc2V0dGluZ3MpKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2Vu
YWJsZV9tZWRpYXNvdXJjZShzZXR0aW5ncywgVFJVRSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3Nl
dHRpbmdzX2dldF9lbmFibGVfbWVkaWFzb3VyY2Uoc2V0dGluZ3MpKTsKLQotICAgIGdfb2JqZWN0
X3VucmVmKEdfT0JKRUNUKHNldHRpbmdzKSk7Ci19Ci0KLXZvaWQgdGVzdFdlYktpdFNldHRpbmdz
TmV3V2l0aFNldHRpbmdzKFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgR1JlZlB0
cjxXZWJLaXRTZXR0aW5ncz4gc2V0dGluZ3MgPSBhZG9wdEdSZWYod2Via2l0X3NldHRpbmdzX25l
d193aXRoX3NldHRpbmdzKCJlbmFibGUtamF2YXNjcmlwdCIsIEZBTFNFLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiYXV0by1sb2FkLWltYWdlcyIsIEZBTFNFLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAibG9hZC1pY29ucy1pZ25vcmluZy1pbWFnZS1sb2FkLXNldHRpbmciLCBUUlVF
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKSk7Ci0gICAgdGVzdC0+YXNzZXJ0T2Jq
ZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChzZXR0aW5ncy5nZXQoKSkpOwot
ICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9qYXZhc2NyaXB0KHNldHRp
bmdzLmdldCgpKSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfYXV0b19sb2Fk
X2ltYWdlcyhzZXR0aW5ncy5nZXQoKSkpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19n
ZXRfbG9hZF9pY29uc19pZ25vcmluZ19pbWFnZV9sb2FkX3NldHRpbmcoc2V0dGluZ3MuZ2V0KCkp
KTsKLX0KLQotc3RhdGljIENTdHJpbmcgY29udmVydFdlYlZpZXdNYWluUmVzb3VyY2VEYXRhVG9D
U3RyaW5nKFdlYlZpZXdUZXN0KiB0ZXN0KQotewotICAgIHNpemVfdCBtYWluUmVzb3VyY2VEYXRh
U2l6ZSA9IDA7Ci0gICAgY29uc3QgY2hhciogbWFpblJlc291cmNlRGF0YSA9IHRlc3QtPm1haW5S
ZXNvdXJjZURhdGEobWFpblJlc291cmNlRGF0YVNpemUpOwotICAgIHJldHVybiBDU3RyaW5nKG1h
aW5SZXNvdXJjZURhdGEsIG1haW5SZXNvdXJjZURhdGFTaXplKTsKLX0KLQotc3RhdGljIHZvaWQg
YXNzZXJ0VGhhdFVzZXJBZ2VudElzU2VudEluSGVhZGVycyhXZWJWaWV3VGVzdCogdGVzdCwgY29u
c3QgQ1N0cmluZyYgdXNlckFnZW50KQotewotICAgIHRlc3QtPmxvYWRVUkkoZ1NlcnZlci0+Z2V0
VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVk
KCk7Ci0gICAgQVNTRVJUX0NNUF9DU1RSSU5HKGNvbnZlcnRXZWJWaWV3TWFpblJlc291cmNlRGF0
YVRvQ1N0cmluZyh0ZXN0KSwgPT0sIHVzZXJBZ2VudCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RX
ZWJLaXRTZXR0aW5nc1VzZXJBZ2VudChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikK
LXsKLSAgICBHUmVmUHRyPFdlYktpdFNldHRpbmdzPiBzZXR0aW5ncyA9IGFkb3B0R1JlZih3ZWJr
aXRfc2V0dGluZ3NfbmV3KCkpOwotICAgIENTdHJpbmcgZGVmYXVsdFVzZXJBZ2VudCA9IHdlYmtp
dF9zZXR0aW5nc19nZXRfdXNlcl9hZ2VudChzZXR0aW5ncy5nZXQoKSk7Ci0gICAgd2Via2l0X3dl
Yl92aWV3X3NldF9zZXR0aW5ncyh0ZXN0LT5tX3dlYlZpZXcsIHNldHRpbmdzLmdldCgpKTsKLQot
ICAgIGdfYXNzZXJ0KGdfc3Ryc3RyX2xlbihkZWZhdWx0VXNlckFnZW50LmRhdGEoKSwgLTEsICJB
cHBsZVdlYktpdCIpKTsKLSAgICBnX2Fzc2VydChnX3N0cnN0cl9sZW4oZGVmYXVsdFVzZXJBZ2Vu
dC5kYXRhKCksIC0xLCAiU2FmYXJpIikpOwotCi0gICAgd2Via2l0X3NldHRpbmdzX3NldF91c2Vy
X2FnZW50KHNldHRpbmdzLmdldCgpLCAwKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoZGVmYXVsdFVz
ZXJBZ2VudC5kYXRhKCksID09LCB3ZWJraXRfc2V0dGluZ3NfZ2V0X3VzZXJfYWdlbnQoc2V0dGlu
Z3MuZ2V0KCkpKTsKLSAgICBhc3NlcnRUaGF0VXNlckFnZW50SXNTZW50SW5IZWFkZXJzKHRlc3Qs
IGRlZmF1bHRVc2VyQWdlbnQuZGF0YSgpKTsKLQotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfdXNl
cl9hZ2VudChzZXR0aW5ncy5nZXQoKSwgIiIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihkZWZhdWx0
VXNlckFnZW50LmRhdGEoKSwgPT0sIHdlYmtpdF9zZXR0aW5nc19nZXRfdXNlcl9hZ2VudChzZXR0
aW5ncy5nZXQoKSkpOwotCi0gICAgY29uc3QgY2hhciogZnVua3lVc2VyQWdlbnQgPSAiRnVua3kh
IjsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X3VzZXJfYWdlbnQoc2V0dGluZ3MuZ2V0KCksIGZ1
bmt5VXNlckFnZW50KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoZnVua3lVc2VyQWdlbnQsID09LCB3
ZWJraXRfc2V0dGluZ3NfZ2V0X3VzZXJfYWdlbnQoc2V0dGluZ3MuZ2V0KCkpKTsKLSAgICBhc3Nl
cnRUaGF0VXNlckFnZW50SXNTZW50SW5IZWFkZXJzKHRlc3QsIGZ1bmt5VXNlckFnZW50KTsKLQot
ICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfdXNlcl9hZ2VudF93aXRoX2FwcGxpY2F0aW9uX2RldGFp
bHMoc2V0dGluZ3MuZ2V0KCksICJXZWJLaXRHVEsrIiwgMCk7Ci0gICAgY29uc3QgY2hhciogdXNl
ckFnZW50V2l0aE51bGxWZXJzaW9uID0gd2Via2l0X3NldHRpbmdzX2dldF91c2VyX2FnZW50KHNl
dHRpbmdzLmdldCgpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoZ19zdHJzdHJfbGVuKHVzZXJBZ2Vu
dFdpdGhOdWxsVmVyc2lvbiwgLTEsIGRlZmF1bHRVc2VyQWdlbnQuZGF0YSgpKSwgPT0sIHVzZXJB
Z2VudFdpdGhOdWxsVmVyc2lvbik7Ci0gICAgZ19hc3NlcnQoZ19zdHJzdHJfbGVuKHVzZXJBZ2Vu
dFdpdGhOdWxsVmVyc2lvbiwgLTEsICJXZWJLaXRHVEsrIikpOwotCi0gICAgd2Via2l0X3NldHRp
bmdzX3NldF91c2VyX2FnZW50X3dpdGhfYXBwbGljYXRpb25fZGV0YWlscyhzZXR0aW5ncy5nZXQo
KSwgIldlYktpdEdUSysiLCAiIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zZXR0aW5n
c19nZXRfdXNlcl9hZ2VudChzZXR0aW5ncy5nZXQoKSksID09LCB1c2VyQWdlbnRXaXRoTnVsbFZl
cnNpb24pOwotCi0gICAgd2Via2l0X3NldHRpbmdzX3NldF91c2VyX2FnZW50X3dpdGhfYXBwbGlj
YXRpb25fZGV0YWlscyhzZXR0aW5ncy5nZXQoKSwgIldlYkNhdEdUSysiLCAiMy40LjUiKTsKLSAg
ICBjb25zdCBjaGFyKiBuZXdVc2VyQWdlbnQgPSB3ZWJraXRfc2V0dGluZ3NfZ2V0X3VzZXJfYWdl
bnQoc2V0dGluZ3MuZ2V0KCkpOwotICAgIGdfYXNzZXJ0KGdfc3Ryc3RyX2xlbihuZXdVc2VyQWdl
bnQsIC0xLCAiMy40LjUiKSk7Ci0gICAgZ19hc3NlcnQoZ19zdHJzdHJfbGVuKG5ld1VzZXJBZ2Vu
dCwgLTEsICJXZWJDYXRHVEsrIikpOwotfQotCi1zdGF0aWMgdm9pZCBzZXJ2ZXJDYWxsYmFjayhT
b3VwU2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBjaGFyKiBwYXRo
LCBHSGFzaFRhYmxlKiwgU291cENsaWVudENvbnRleHQqLCBncG9pbnRlcikKLXsKLSAgICBpZiAo
bWVzc2FnZS0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgewotICAgICAgICBzb3VwX21lc3Nh
Z2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvIikpIHsK
LSAgICAgICAgY29uc3QgY2hhciogdXNlckFnZW50ID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0
X29uZShtZXNzYWdlLT5yZXF1ZXN0X2hlYWRlcnMsICJVc2VyLUFnZW50Iik7Ci0gICAgICAgIHNv
dXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKLSAgICAgICAg
c291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVN
T1JZX0NPUFksIHVzZXJBZ2VudCwgc3RybGVuKHVzZXJBZ2VudCkpOwotICAgICAgICBzb3VwX21l
c3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKLSAgICB9IGVsc2UK
LSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9U
X0ZPVU5EKTsKLX0KLQotdm9pZCBiZWZvcmVBbGwoKQotewotICAgIGdTZXJ2ZXIgPSBuZXcgV2Vi
S2l0VGVzdFNlcnZlcigpOwotICAgIGdTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFjayk7Ci0KLSAg
ICBUZXN0OjphZGQoIldlYktpdFNldHRpbmdzIiwgIndlYmtpdC1zZXR0aW5ncyIsIHRlc3RXZWJL
aXRTZXR0aW5ncyk7Ci0gICAgVGVzdDo6YWRkKCJXZWJLaXRTZXR0aW5ncyIsICJuZXctd2l0aC1z
ZXR0aW5ncyIsIHRlc3RXZWJLaXRTZXR0aW5nc05ld1dpdGhTZXR0aW5ncyk7Ci0gICAgV2ViVmll
d1Rlc3Q6OmFkZCgiV2ViS2l0U2V0dGluZ3MiLCAidXNlci1hZ2VudCIsIHRlc3RXZWJLaXRTZXR0
aW5nc1VzZXJBZ2VudCk7Ci19Ci0KLXZvaWQgYWZ0ZXJBbGwoKQotewotICAgIGRlbGV0ZSBnU2Vy
dmVyOwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9UZXN0V2ViS2l0VmVyc2lvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9UZXN0V2ViS2l0VmVyc2lvbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGU3NDdmZjkuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvVGVzdFdlYktpdFZlcnNpb24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTAg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiVGVzdE1haW4uaCIKLSNpbmNsdWRlIDxndGsvZ3RrLmg+
Ci0jaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+Ci0KLQotc3RhdGljIHZvaWQgdGVzdFdlYktp
dFZlcnNpb24oVGVzdCosIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgZ19hc3NlcnRfY21wdWludCh3
ZWJraXRfZ2V0X21ham9yX3ZlcnNpb24oKSwgPT0sIFdFQktJVF9NQUpPUl9WRVJTSU9OKTsKLSAg
ICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9nZXRfbWlub3JfdmVyc2lvbigpLCA9PSwgV0VCS0lU
X01JTk9SX1ZFUlNJT04pOwotICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2dldF9taWNyb192
ZXJzaW9uKCksID09LCBXRUJLSVRfTUlDUk9fVkVSU0lPTik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRl
c3RXZWJLaXRDaGVja1ZlcnNpb24oVGVzdCosIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgZ19hc3Nl
cnQoV0VCS0lUX0NIRUNLX1ZFUlNJT04oV0VCS0lUX01BSk9SX1ZFUlNJT04sIFdFQktJVF9NSU5P
Ul9WRVJTSU9OLCBXRUJLSVRfTUlDUk9fVkVSU0lPTikpOwotICAgIGdfYXNzZXJ0KCFXRUJLSVRf
Q0hFQ0tfVkVSU0lPTihXRUJLSVRfTUFKT1JfVkVSU0lPTiArIDEsIFdFQktJVF9NSU5PUl9WRVJT
SU9OLCBXRUJLSVRfTUlDUk9fVkVSU0lPTikpOwotICAgIGdfYXNzZXJ0KCFXRUJLSVRfQ0hFQ0tf
VkVSU0lPTihXRUJLSVRfTUFKT1JfVkVSU0lPTiwgV0VCS0lUX01JTk9SX1ZFUlNJT04gKyAxLCBX
RUJLSVRfTUlDUk9fVkVSU0lPTikpOwotICAgIGdfYXNzZXJ0KCFXRUJLSVRfQ0hFQ0tfVkVSU0lP
TihXRUJLSVRfTUFKT1JfVkVSU0lPTiwgV0VCS0lUX01JTk9SX1ZFUlNJT04sIFdFQktJVF9NSUNS
T19WRVJTSU9OICsgMSkpOwotfQotCi12b2lkIGJlZm9yZUFsbCgpCi17Ci0gICAgVGVzdDo6YWRk
KCJXZWJLaXRWZXJzaW9uIiwgInZlcnNpb24iLCB0ZXN0V2ViS2l0VmVyc2lvbik7Ci0gICAgVGVz
dDo6YWRkKCJXZWJLaXRWZXJzaW9uIiwgImNoZWNrLXZlcnNpb24iLCB0ZXN0V2ViS2l0Q2hlY2tW
ZXJzaW9uKTsKLX0KLQotdm9pZCBhZnRlckFsbCgpCi17Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViQ29udGV4dC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViQ29u
dGV4dC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzMGY0MDYuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdl
YkNvbnRleHQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDI1ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
IHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1
ZGUgIkxvYWRUcmFja2luZ1Rlc3QuaCIKLSNpbmNsdWRlICJXZWJLaXRUZXN0U2VydmVyLmgiCi0j
aW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgotI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdI
YXNoLmg+Ci0KLXN0YXRpYyBXZWJLaXRUZXN0U2VydmVyKiBrU2VydmVyOwotCi1zdGF0aWMgdm9p
ZCB0ZXN0V2ViQ29udGV4dERlZmF1bHQoVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAg
ICAvLyBDaGVjayB0aGVyZSdzIGEgc2luZ2xlIGluc3RhbmNlIG9mIHRoZSBkZWZhdWx0IHdlYiBj
b250ZXh0LgotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpID09
IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpKTsKLX0KLQotY2xhc3MgUGx1Z2luc1Rl
c3Q6IHB1YmxpYyBUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFBs
dWdpbnNUZXN0KTsKLQotICAgIFBsdWdpbnNUZXN0KCkKLSAgICAgICAgOiBtX2NvbnRleHQod2Vi
a2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCkpCi0gICAgICAgICwgbV9tYWluTG9vcChnX21h
aW5fbG9vcF9uZXcoMCwgVFJVRSkpCi0gICAgICAgICwgbV9wbHVnaW5zKDApCi0gICAgewotICAg
ICAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X2FkZGl0aW9uYWxfcGx1Z2luc19kaXJlY3Rvcnko
bV9jb250ZXh0LCBXRUJLSVRfVEVTVF9QTFVHSU5fRElSKTsKLSAgICB9Ci0KLSAgICB+UGx1Z2lu
c1Rlc3QoKQotICAgIHsKLSAgICAgICAgZ19tYWluX2xvb3BfdW5yZWYobV9tYWluTG9vcCk7Ci0g
ICAgICAgIGdfbGlzdF9mcmVlX2Z1bGwobV9wbHVnaW5zLCBnX29iamVjdF91bnJlZik7Ci0gICAg
fQotCi0gICAgc3RhdGljIHZvaWQgZ2V0UGx1Z2luc0FzeW5jUmVhZHlDYWxsYmFjayhHT2JqZWN0
KiwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIFBsdWdpbnNUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAg
ICAgdGVzdC0+bV9wbHVnaW5zID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9wbHVnaW5zX2Zpbmlz
aCh0ZXN0LT5tX2NvbnRleHQsIHJlc3VsdCwgMCk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQo
dGVzdC0+bV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgR0xpc3QqIGdldFBsdWdpbnMoKQotICAg
IHsKLSAgICAgICAgZ19saXN0X2ZyZWVfZnVsbChtX3BsdWdpbnMsIGdfb2JqZWN0X3VucmVmKTsK
LSAgICAgICAgd2Via2l0X3dlYl9jb250ZXh0X2dldF9wbHVnaW5zKG1fY29udGV4dCwgMCwgcmVp
bnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihnZXRQbHVnaW5zQXN5bmNSZWFkeUNh
bGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAg
ICAgICAgcmV0dXJuIG1fcGx1Z2luczsKLSAgICB9Ci0KLSAgICBXZWJLaXRXZWJDb250ZXh0KiBt
X2NvbnRleHQ7Ci0gICAgR01haW5Mb29wKiBtX21haW5Mb29wOwotICAgIEdMaXN0KiBtX3BsdWdp
bnM7Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViQ29udGV4dEdldFBsdWdpbnMoUGx1Z2luc1Rl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgR0xpc3QqIHBsdWdpbnMgPSB0ZXN0LT5n
ZXRQbHVnaW5zKCk7Ci0gICAgZ19hc3NlcnQocGx1Z2lucyk7Ci0KLSAgICBHUmVmUHRyPFdlYktp
dFBsdWdpbj4gdGVzdFBsdWdpbjsKLSAgICBmb3IgKEdMaXN0KiBpdGVtID0gcGx1Z2luczsgaXRl
bTsgaXRlbSA9IGdfbGlzdF9uZXh0KGl0ZW0pKSB7Ci0gICAgICAgIFdlYktpdFBsdWdpbiogcGx1
Z2luID0gV0VCS0lUX1BMVUdJTihpdGVtLT5kYXRhKTsKLSAgICAgICAgdGVzdC0+YXNzZXJ0T2Jq
ZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChwbHVnaW4pKTsKLSAgICAgICAg
aWYgKCFnX3N0cmNtcDAod2Via2l0X3BsdWdpbl9nZXRfbmFtZShwbHVnaW4pLCAiV2ViS2l0IFRl
c3QgUGx1Z0luIikpIHsKLSAgICAgICAgICAgIHRlc3RQbHVnaW4gPSBwbHVnaW47Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBnX2Fzc2VydChXRUJLSVRfSVNfUExV
R0lOKHRlc3RQbHVnaW4uZ2V0KCkpKTsKLQotICAgIEdPd25QdHI8Y2hhcj4gcGx1Z2luUGF0aChn
X2J1aWxkX2ZpbGVuYW1lKFdFQktJVF9URVNUX1BMVUdJTl9ESVIsICJsaWJUZXN0TmV0c2NhcGVQ
bHVnaW4uc28iLCBOVUxMKSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9wbHVnaW5fZ2V0
X3BhdGgodGVzdFBsdWdpbi5nZXQoKSksID09LCBwbHVnaW5QYXRoLmdldCgpKTsKLSAgICBnX2Fz
c2VydF9jbXBzdHIod2Via2l0X3BsdWdpbl9nZXRfZGVzY3JpcHRpb24odGVzdFBsdWdpbi5nZXQo
KSksID09LCAiU2ltcGxlIE5ldHNjYXBlwq4gcGx1Zy1pbiB0aGF0IGhhbmRsZXMgdGVzdCBjb250
ZW50IGZvciBXZWJLaXQiKTsKLSAgICBHTGlzdCogbWltZUluZm9MaXN0ID0gd2Via2l0X3BsdWdp
bl9nZXRfbWltZV9pbmZvX2xpc3QodGVzdFBsdWdpbi5nZXQoKSk7Ci0gICAgZ19hc3NlcnQobWlt
ZUluZm9MaXN0KTsKLSAgICBnX2Fzc2VydF9jbXB1aW50KGdfbGlzdF9sZW5ndGgobWltZUluZm9M
aXN0KSwgPT0sIDIpOwotCi0gICAgV2ViS2l0TWltZUluZm8qIG1pbWVJbmZvID0gc3RhdGljX2Nh
c3Q8V2ViS2l0TWltZUluZm8qPihtaW1lSW5mb0xpc3QtPmRhdGEpOwotICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfbWltZV9pbmZvX2dldF9taW1lX3R5cGUobWltZUluZm8pLCA9PSwgImltYWdl
L3BuZyIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfbWltZV9pbmZvX2dldF9kZXNjcmlw
dGlvbihtaW1lSW5mbyksID09LCAicG5nIGltYWdlIik7Ci0gICAgY29uc3QgZ2NoYXIqIGNvbnN0
KiBleHRlbnNpb25zID0gd2Via2l0X21pbWVfaW5mb19nZXRfZXh0ZW5zaW9ucyhtaW1lSW5mbyk7
Ci0gICAgZ19hc3NlcnQoZXh0ZW5zaW9ucyk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKGV4dGVuc2lv
bnNbMF0sID09LCAicG5nIik7Ci0KLSAgICBtaW1lSW5mb0xpc3QgPSBnX2xpc3RfbmV4dChtaW1l
SW5mb0xpc3QpOwotICAgIG1pbWVJbmZvID0gc3RhdGljX2Nhc3Q8V2ViS2l0TWltZUluZm8qPiht
aW1lSW5mb0xpc3QtPmRhdGEpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfbWltZV9pbmZv
X2dldF9taW1lX3R5cGUobWltZUluZm8pLCA9PSwgImFwcGxpY2F0aW9uL3gtd2Via2l0LXRlc3Qt
bmV0c2NhcGUiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X21pbWVfaW5mb19nZXRfZGVz
Y3JpcHRpb24obWltZUluZm8pLCA9PSwgInRlc3QgbmV0c2NhcGUgY29udGVudCIpOwotICAgIGV4
dGVuc2lvbnMgPSB3ZWJraXRfbWltZV9pbmZvX2dldF9leHRlbnNpb25zKG1pbWVJbmZvKTsKLSAg
ICBnX2Fzc2VydChleHRlbnNpb25zKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoZXh0ZW5zaW9uc1sw
XSwgPT0sICJ0ZXN0bmV0c2NhcGUiKTsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIqIGtCYXJIVE1M
ID0gIjxodG1sPjxib2R5PkJhcjwvYm9keT48L2h0bWw+IjsKLXN0YXRpYyBjb25zdCBjaGFyKiBr
RWNob0hUTUxGb3JtYXQgPSAiPGh0bWw+PGJvZHk+JXM8L2JvZHk+PC9odG1sPiI7Ci1zdGF0aWMg
Y29uc3QgY2hhciogZXJyb3JEb21haW4gPSAidGVzdCI7Ci1zdGF0aWMgY29uc3QgaW50IGVycm9y
Q29kZSA9IDEwOwotc3RhdGljIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSA9ICJFcnJvciBtZXNz
YWdlLiI7Ci0KLWNsYXNzIFVSSVNjaGVtZVRlc3Q6IHB1YmxpYyBMb2FkVHJhY2tpbmdUZXN0IHsK
LXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFVSSVNjaGVtZVRlc3QpOwotCi0g
ICAgc3RydWN0IFVSSVNjaGVtZUhhbmRsZXIgewotICAgICAgICBVUklTY2hlbWVIYW5kbGVyKCkK
LSAgICAgICAgICAgIDogcmVwbHlMZW5ndGgoMCkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAg
ICAgICAgVVJJU2NoZW1lSGFuZGxlcihjb25zdCBjaGFyKiByZXBseSwgaW50IHJlcGx5TGVuZ3Ro
LCBjb25zdCBjaGFyKiBtaW1lVHlwZSkKLSAgICAgICAgICAgIDogcmVwbHkocmVwbHkpCi0gICAg
ICAgICAgICAsIHJlcGx5TGVuZ3RoKHJlcGx5TGVuZ3RoKQotICAgICAgICAgICAgLCBtaW1lVHlw
ZShtaW1lVHlwZSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgQ1N0cmluZyByZXBs
eTsKLSAgICAgICAgaW50IHJlcGx5TGVuZ3RoOwotICAgICAgICBDU3RyaW5nIG1pbWVUeXBlOwot
ICAgIH07Ci0KLSAgICBzdGF0aWMgdm9pZCB1cmlTY2hlbWVSZXF1ZXN0Q2FsbGJhY2soV2ViS2l0
VVJJU2NoZW1lUmVxdWVzdCogcmVxdWVzdCwgZ3BvaW50ZXIgdXNlckRhdGEpCi0gICAgewotICAg
ICAgICBVUklTY2hlbWVUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8VVJJU2NoZW1lVGVzdCo+KHVz
ZXJEYXRhKTsKLSAgICAgICAgdGVzdC0+bV91cmlTY2hlbWVSZXF1ZXN0ID0gcmVxdWVzdDsKLSAg
ICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVD
VChyZXF1ZXN0KSk7Ci0KLSAgICAgICAgZ19hc3NlcnQod2Via2l0X3VyaV9zY2hlbWVfcmVxdWVz
dF9nZXRfd2ViX3ZpZXcocmVxdWVzdCkgPT0gdGVzdC0+bV93ZWJWaWV3KTsKLQotICAgICAgICBH
UmVmUHRyPEdJbnB1dFN0cmVhbT4gaW5wdXRTdHJlYW0gPSBhZG9wdEdSZWYoZ19tZW1vcnlfaW5w
dXRfc3RyZWFtX25ldygpKTsKLSAgICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hl
blRlc3RGaW5pc2hlcyhHX09CSkVDVChpbnB1dFN0cmVhbS5nZXQoKSkpOwotCi0gICAgICAgIGNv
bnN0IGNoYXIqIHNjaGVtZSA9IHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0X3NjaGVtZShy
ZXF1ZXN0KTsKLSAgICAgICAgZ19hc3NlcnQoc2NoZW1lKTsKLSAgICAgICAgZ19hc3NlcnQodGVz
dC0+bV9oYW5kbGVyc01hcC5jb250YWlucyhTdHJpbmc6OmZyb21VVEY4KHNjaGVtZSkpKTsKLQot
ICAgICAgICBpZiAoIWdfc3RyY21wMChzY2hlbWUsICJlcnJvciIpKSB7Ci0gICAgICAgICAgICBH
T3duUHRyPEdFcnJvcj4gZXJyb3IoZ19lcnJvcl9uZXdfbGl0ZXJhbChnX3F1YXJrX2Zyb21fc3Ry
aW5nKGVycm9yRG9tYWluKSwgZXJyb3JDb2RlLCBlcnJvck1lc3NhZ2UpKTsKLSAgICAgICAgICAg
IHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZmluaXNoX2Vycm9yKHJlcXVlc3QsIGVycm9yLmdl
dCgpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IFVS
SVNjaGVtZUhhbmRsZXImIGhhbmRsZXIgPSB0ZXN0LT5tX2hhbmRsZXJzTWFwLmdldChTdHJpbmc6
OmZyb21VVEY4KHNjaGVtZSkpOwotCi0gICAgICAgIGlmICghZ19zdHJjbXAwKHNjaGVtZSwgImVj
aG8iKSkgewotICAgICAgICAgICAgY2hhciogcmVwbHlIVE1MID0gZ19zdHJkdXBfcHJpbnRmKGhh
bmRsZXIucmVwbHkuZGF0YSgpLCB3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dldF9wYXRoKHJl
cXVlc3QpKTsKLSAgICAgICAgICAgIGdfbWVtb3J5X2lucHV0X3N0cmVhbV9hZGRfZGF0YShHX01F
TU9SWV9JTlBVVF9TVFJFQU0oaW5wdXRTdHJlYW0uZ2V0KCkpLCByZXBseUhUTUwsIHN0cmxlbihy
ZXBseUhUTUwpLCBnX2ZyZWUpOwotICAgICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAoc2NoZW1l
LCAiY2xvc2VkIikpCi0gICAgICAgICAgICBnX2lucHV0X3N0cmVhbV9jbG9zZShpbnB1dFN0cmVh
bS5nZXQoKSwgMCwgMCk7Ci0gICAgICAgIGVsc2UgaWYgKCFoYW5kbGVyLnJlcGx5LmlzTnVsbCgp
KQotICAgICAgICAgICAgZ19tZW1vcnlfaW5wdXRfc3RyZWFtX2FkZF9kYXRhKEdfTUVNT1JZX0lO
UFVUX1NUUkVBTShpbnB1dFN0cmVhbS5nZXQoKSksIGhhbmRsZXIucmVwbHkuZGF0YSgpLCBoYW5k
bGVyLnJlcGx5Lmxlbmd0aCgpLCAwKTsKLQotICAgICAgICB3ZWJraXRfdXJpX3NjaGVtZV9yZXF1
ZXN0X2ZpbmlzaChyZXF1ZXN0LCBpbnB1dFN0cmVhbS5nZXQoKSwgaGFuZGxlci5yZXBseUxlbmd0
aCwgaGFuZGxlci5taW1lVHlwZS5kYXRhKCkpOwotICAgIH0KLQotICAgIHZvaWQgcmVnaXN0ZXJV
UklTY2hlbWVIYW5kbGVyKGNvbnN0IGNoYXIqIHNjaGVtZSwgY29uc3QgY2hhciogcmVwbHksIGlu
dCByZXBseUxlbmd0aCwgY29uc3QgY2hhciogbWltZVR5cGUpCi0gICAgewotICAgICAgICBtX2hh
bmRsZXJzTWFwLnNldChTdHJpbmc6OmZyb21VVEY4KHNjaGVtZSksIFVSSVNjaGVtZUhhbmRsZXIo
cmVwbHksIHJlcGx5TGVuZ3RoLCBtaW1lVHlwZSkpOwotICAgICAgICB3ZWJraXRfd2ViX2NvbnRl
eHRfcmVnaXN0ZXJfdXJpX3NjaGVtZSh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSwg
c2NoZW1lLCB1cmlTY2hlbWVSZXF1ZXN0Q2FsbGJhY2ssIHRoaXMsIDApOwotICAgIH0KLQotICAg
IEdSZWZQdHI8V2ViS2l0VVJJU2NoZW1lUmVxdWVzdD4gbV91cmlTY2hlbWVSZXF1ZXN0OwotICAg
IEhhc2hNYXA8U3RyaW5nLCBVUklTY2hlbWVIYW5kbGVyPiBtX2hhbmRsZXJzTWFwOwotfTsKLQot
c3RhdGljIHZvaWQgdGVzdFdlYkNvbnRleHRVUklTY2hlbWUoVVJJU2NoZW1lVGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5yZWdpc3RlclVSSVNjaGVtZUhhbmRsZXIoImZv
byIsIGtCYXJIVE1MLCBzdHJsZW4oa0JhckhUTUwpLCAidGV4dC9odG1sIik7Ci0gICAgdGVzdC0+
bG9hZFVSSSgiZm9vOmJsYW5rIik7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7
Ci0gICAgc2l6ZV90IG1haW5SZXNvdXJjZURhdGFTaXplID0gMDsKLSAgICBjb25zdCBjaGFyKiBt
YWluUmVzb3VyY2VEYXRhID0gdGVzdC0+bWFpblJlc291cmNlRGF0YShtYWluUmVzb3VyY2VEYXRh
U2l6ZSk7Ci0gICAgZ19hc3NlcnRfY21waW50KG1haW5SZXNvdXJjZURhdGFTaXplLCA9PSwgc3Ry
bGVuKGtCYXJIVE1MKSk7Ci0gICAgZ19hc3NlcnQoIXN0cm5jbXAobWFpblJlc291cmNlRGF0YSwg
a0JhckhUTUwsIG1haW5SZXNvdXJjZURhdGFTaXplKSk7Ci0KLSAgICB0ZXN0LT5yZWdpc3RlclVS
SVNjaGVtZUhhbmRsZXIoImVjaG8iLCBrRWNob0hUTUxGb3JtYXQsIC0xLCAidGV4dC9odG1sIik7
Ci0gICAgdGVzdC0+bG9hZFVSSSgiZWNobzpoZWxsbyB3b3JsZCIpOwotICAgIHRlc3QtPndhaXRV
bnRpbExvYWRGaW5pc2hlZCgpOwotICAgIEdPd25QdHI8Y2hhcj4gZWNob0hUTUwoZ19zdHJkdXBf
cHJpbnRmKGtFY2hvSFRNTEZvcm1hdCwgd2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9nZXRfcGF0
aCh0ZXN0LT5tX3VyaVNjaGVtZVJlcXVlc3QuZ2V0KCkpKSk7Ci0gICAgbWFpblJlc291cmNlRGF0
YVNpemUgPSAwOwotICAgIG1haW5SZXNvdXJjZURhdGEgPSB0ZXN0LT5tYWluUmVzb3VyY2VEYXRh
KG1haW5SZXNvdXJjZURhdGFTaXplKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQobWFpblJlc291cmNl
RGF0YVNpemUsID09LCBzdHJsZW4oZWNob0hUTUwuZ2V0KCkpKTsKLSAgICBnX2Fzc2VydCghc3Ry
bmNtcChtYWluUmVzb3VyY2VEYXRhLCBlY2hvSFRNTC5nZXQoKSwgbWFpblJlc291cmNlRGF0YVNp
emUpKTsKLQotICAgIHRlc3QtPnJlZ2lzdGVyVVJJU2NoZW1lSGFuZGxlcigibm9taW1lIiwga0Jh
ckhUTUwsIC0xLCAwKTsKLSAgICB0ZXN0LT5tX2xvYWRFdmVudHMuY2xlYXIoKTsKLSAgICB0ZXN0
LT5sb2FkVVJJKCJub21pbWU6Zm9vIGJhciIpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5p
c2hlZCgpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fbG9hZEV2ZW50cy5jb250YWlucyhMb2FkVHJh
Y2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRGYWlsZWQpKTsKLQotICAgIHRlc3QtPnJlZ2lzdGVy
VVJJU2NoZW1lSGFuZGxlcigiZW1wdHkiLCAwLCAwLCAidGV4dC9odG1sIik7Ci0gICAgdGVzdC0+
bV9sb2FkRXZlbnRzLmNsZWFyKCk7Ci0gICAgdGVzdC0+bG9hZFVSSSgiZW1wdHk6bm90aGluZyIp
OwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGdfYXNzZXJ0KCF0ZXN0
LT5tX2xvYWRFdmVudHMuY29udGFpbnMoTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2Fk
RmFpbGVkKSk7Ci0gICAgZ19hc3NlcnQoIXRlc3QtPm1fbG9hZEV2ZW50cy5jb250YWlucyhMb2Fk
VHJhY2tpbmdUZXN0OjpMb2FkRmFpbGVkKSk7Ci0KLSAgICB0ZXN0LT5yZWdpc3RlclVSSVNjaGVt
ZUhhbmRsZXIoImVycm9yIiwgMCwgMCwgMCk7Ci0gICAgdGVzdC0+bV9sb2FkRXZlbnRzLmNsZWFy
KCk7Ci0gICAgdGVzdC0+bG9hZFVSSSgiZXJyb3I6ZXJyb3IiKTsKLSAgICB0ZXN0LT53YWl0VW50
aWxMb2FkRmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX2xvYWRFdmVudHMuY29udGFp
bnMoTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkRmFpbGVkKSk7Ci0gICAgZ19hc3Nl
cnQodGVzdC0+bV9sb2FkRmFpbGVkKTsKLSAgICBnX2Fzc2VydF9lcnJvcih0ZXN0LT5tX2Vycm9y
LmdldCgpLCBnX3F1YXJrX2Zyb21fc3RyaW5nKGVycm9yRG9tYWluKSwgZXJyb3JDb2RlKTsKLSAg
ICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9lcnJvci0+bWVzc2FnZSwgPT0sIGVycm9yTWVzc2Fn
ZSk7Ci0KLSAgICB0ZXN0LT5yZWdpc3RlclVSSVNjaGVtZUhhbmRsZXIoImNsb3NlZCIsIDAsIDAs
IDApOwotICAgIHRlc3QtPm1fbG9hZEV2ZW50cy5jbGVhcigpOwotICAgIHRlc3QtPmxvYWRVUkko
ImNsb3NlZDppbnB1dC1zdHJlYW0iKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQo
KTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX2xvYWRFdmVudHMuY29udGFpbnMoTG9hZFRyYWNraW5n
VGVzdDo6UHJvdmlzaW9uYWxMb2FkRmFpbGVkKSk7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV9sb2Fk
RmFpbGVkKTsKLSAgICBnX2Fzc2VydF9lcnJvcih0ZXN0LT5tX2Vycm9yLmdldCgpLCBHX0lPX0VS
Uk9SLCBHX0lPX0VSUk9SX0NMT1NFRCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJDb250ZXh0
U3BlbGxDaGVja2VyKFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgV2ViS2l0V2Vi
Q29udGV4dCogd2ViQ29udGV4dCA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpOwot
Ci0gICAgLy8gQ2hlY2sgd2hhdCBoYXBwZW5zIGlmIG5vIHNwZWxsIGNoZWNraW5nIGxhbmd1YWdl
IGhhcyBiZWVuIHNldC4KLSAgICBjb25zdCBnY2hhciogY29uc3QqIGN1cnJlbnRMYW5ndWFnZSA9
IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKHdlYkNvbnRl
eHQpOwotICAgIGdfYXNzZXJ0KCFjdXJyZW50TGFuZ3VhZ2UpOwotCi0gICAgLy8gU2V0IHRoZSBs
YW5ndWFnZSB0byBhIHNwZWNpZmljIG9uZS4KLSAgICBHUmVmUHRyPEdQdHJBcnJheT4gbGFuZ3Vh
Z2VzID0gYWRvcHRHUmVmKGdfcHRyX2FycmF5X25ldygpKTsKLSAgICBnX3B0cl9hcnJheV9hZGQo
bGFuZ3VhZ2VzLmdldCgpLCBjb25zdF9jYXN0PGdwb2ludGVyPihzdGF0aWNfY2FzdDxjb25zdCB2
b2lkKj4oImVuX1VTIikpKTsKLSAgICBnX3B0cl9hcnJheV9hZGQobGFuZ3VhZ2VzLmdldCgpLCAw
KTsKLSAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyh3
ZWJDb250ZXh0LCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqIGNvbnN0Kj4obGFuZ3VhZ2Vz
LT5wZGF0YSkpOwotICAgIGN1cnJlbnRMYW5ndWFnZSA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRf
c3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKHdlYkNvbnRleHQpOwotICAgIGdfYXNzZXJ0X2NtcHVp
bnQoZ19zdHJ2X2xlbmd0aChjb25zdF9jYXN0PGNoYXIqKj4oY3VycmVudExhbmd1YWdlKSksID09
LCAxKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoY3VycmVudExhbmd1YWdlWzBdLCA9PSwgImVuX1VT
Iik7Ci0KLSAgICAvLyBTZXQgdGhlIGxhbmd1YWdlIHN0cmluZyB0byBsaXN0IG9mIHZhbGlkIGxh
bmd1YWdlcy4KLSAgICBnX3B0cl9hcnJheV9yZW1vdmVfaW5kZXhfZmFzdChsYW5ndWFnZXMuZ2V0
KCksIGxhbmd1YWdlcy0+bGVuIC0gMSk7Ci0gICAgZ19wdHJfYXJyYXlfYWRkKGxhbmd1YWdlcy5n
ZXQoKSwgY29uc3RfY2FzdDxncG9pbnRlcj4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KCJlbl9H
QiIpKSk7Ci0gICAgZ19wdHJfYXJyYXlfYWRkKGxhbmd1YWdlcy5nZXQoKSwgMCk7Ci0gICAgd2Vi
a2l0X3dlYl9jb250ZXh0X3NldF9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMod2ViQ29udGV4dCwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKiBjb25zdCo+KGxhbmd1YWdlcy0+cGRhdGEpKTsK
LSAgICBjdXJyZW50TGFuZ3VhZ2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3NwZWxsX2NoZWNr
aW5nX2xhbmd1YWdlcyh3ZWJDb250ZXh0KTsKLSAgICBnX2Fzc2VydF9jbXB1aW50KGdfc3Rydl9s
ZW5ndGgoY29uc3RfY2FzdDxjaGFyKio+KGN1cnJlbnRMYW5ndWFnZSkpLCA9PSwgMik7Ci0gICAg
Z19hc3NlcnRfY21wc3RyKGN1cnJlbnRMYW5ndWFnZVswXSwgPT0sICJlbl9VUyIpOwotICAgIGdf
YXNzZXJ0X2NtcHN0cihjdXJyZW50TGFuZ3VhZ2VbMV0sID09LCAiZW5fR0IiKTsKLQotICAgIC8v
IFRyeSBwYXNzaW5nIGEgd3JvbmcgbGFuZ3VhZ2UgYWxvbmcgd2l0aCBnb29kIG9uZXMuCi0gICAg
Z19wdHJfYXJyYXlfcmVtb3ZlX2luZGV4X2Zhc3QobGFuZ3VhZ2VzLmdldCgpLCBsYW5ndWFnZXMt
PmxlbiAtIDEpOwotICAgIGdfcHRyX2FycmF5X2FkZChsYW5ndWFnZXMuZ2V0KCksIGNvbnN0X2Nh
c3Q8Z3BvaW50ZXI+KHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqPigiYmRfV1IiKSkpOwotICAgIGdf
cHRyX2FycmF5X2FkZChsYW5ndWFnZXMuZ2V0KCksIDApOwotICAgIHdlYmtpdF93ZWJfY29udGV4
dF9zZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKHdlYkNvbnRleHQsIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgY2hhciogY29uc3QqPihsYW5ndWFnZXMtPnBkYXRhKSk7Ci0gICAgY3VycmVudExh
bmd1YWdlID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMo
d2ViQ29udGV4dCk7Ci0gICAgZ19hc3NlcnRfY21wdWludChnX3N0cnZfbGVuZ3RoKGNvbnN0X2Nh
c3Q8Y2hhcioqPihjdXJyZW50TGFuZ3VhZ2UpKSwgPT0sIDIpOwotICAgIGdfYXNzZXJ0X2NtcHN0
cihjdXJyZW50TGFuZ3VhZ2VbMF0sID09LCAiZW5fVVMiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIo
Y3VycmVudExhbmd1YWdlWzFdLCA9PSwgImVuX0dCIik7Ci0KLSAgICAvLyBUcnkgcGFzc2luZyBh
IGxpc3Qgd2l0aCBvbmx5IHdyb25nIGxhbmd1YWdlcy4KLSAgICBsYW5ndWFnZXMgPSBhZG9wdEdS
ZWYoZ19wdHJfYXJyYXlfbmV3KCkpOwotICAgIGdfcHRyX2FycmF5X2FkZChsYW5ndWFnZXMuZ2V0
KCksIGNvbnN0X2Nhc3Q8Z3BvaW50ZXI+KHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqPigiYmRfV1Ii
KSkpOwotICAgIGdfcHRyX2FycmF5X2FkZChsYW5ndWFnZXMuZ2V0KCksIGNvbnN0X2Nhc3Q8Z3Bv
aW50ZXI+KHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqPigid3JfQkQiKSkpOwotICAgIGdfcHRyX2Fy
cmF5X2FkZChsYW5ndWFnZXMuZ2V0KCksIDApOwotICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRf
c3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKHdlYkNvbnRleHQsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgY2hhciogY29uc3QqPihsYW5ndWFnZXMtPnBkYXRhKSk7Ci0gICAgY3VycmVudExhbmd1YWdl
ID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMod2ViQ29u
dGV4dCk7Ci0gICAgZ19hc3NlcnQoIWN1cnJlbnRMYW5ndWFnZSk7Ci0KLSAgICAvLyBDaGVjayBk
aXNhYmxpbmcgYW5kIHJlLWVuYWJsaW5nIHNwZWxsIGNoZWNraW5nLgotICAgIHdlYmtpdF93ZWJf
Y29udGV4dF9zZXRfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZCh3ZWJDb250ZXh0LCBGQUxTRSk7Ci0g
ICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hlY2tpbmdfZW5hYmxl
ZCh3ZWJDb250ZXh0KSk7Ci0gICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF9zcGVsbF9jaGVja2lu
Z19lbmFibGVkKHdlYkNvbnRleHQsIFRSVUUpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfY29u
dGV4dF9nZXRfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZCh3ZWJDb250ZXh0KSk7Ci19Ci0KLXN0YXRp
YyB2b2lkIHRlc3RXZWJDb250ZXh0TGFuZ3VhZ2VzKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rw
b2ludGVyKQotewotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBleHBlY3RlZERlZmF1bHRMYW5ndWFn
ZSA9ICJlbiI7Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIiku
ZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBzaXplX3Qg
bWFpblJlc291cmNlRGF0YVNpemUgPSAwOwotICAgIGNvbnN0IGNoYXIqIG1haW5SZXNvdXJjZURh
dGEgPSB0ZXN0LT5tYWluUmVzb3VyY2VEYXRhKG1haW5SZXNvdXJjZURhdGFTaXplKTsKLSAgICBn
X2Fzc2VydF9jbXB1aW50KG1haW5SZXNvdXJjZURhdGFTaXplLCA9PSwgc3RybGVuKGV4cGVjdGVk
RGVmYXVsdExhbmd1YWdlKSk7Ci0gICAgZ19hc3NlcnQoIXN0cm5jbXAobWFpblJlc291cmNlRGF0
YSwgZXhwZWN0ZWREZWZhdWx0TGFuZ3VhZ2UsIG1haW5SZXNvdXJjZURhdGFTaXplKSk7Ci0KLSAg
ICBHUmVmUHRyPEdQdHJBcnJheT4gbGFuZ3VhZ2VzID0gYWRvcHRHUmVmKGdfcHRyX2FycmF5X25l
dygpKTsKLSAgICBnX3B0cl9hcnJheV9hZGQobGFuZ3VhZ2VzLmdldCgpLCBjb25zdF9jYXN0PGdw
b2ludGVyPihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4oImVuIikpKTsKLSAgICBnX3B0cl9hcnJh
eV9hZGQobGFuZ3VhZ2VzLmdldCgpLCBjb25zdF9jYXN0PGdwb2ludGVyPihzdGF0aWNfY2FzdDxj
b25zdCB2b2lkKj4oIkVTX2VzIikpKTsKLSAgICBnX3B0cl9hcnJheV9hZGQobGFuZ3VhZ2VzLmdl
dCgpLCBjb25zdF9jYXN0PGdwb2ludGVyPihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4oImRFIikp
KTsKLSAgICBnX3B0cl9hcnJheV9hZGQobGFuZ3VhZ2VzLmdldCgpLCAwKTsKLSAgICB3ZWJraXRf
d2ViX2NvbnRleHRfc2V0X3ByZWZlcnJlZF9sYW5ndWFnZXMod2Via2l0X3dlYl9jb250ZXh0X2dl
dF9kZWZhdWx0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhciogY29uc3QqPihsYW5ndWFn
ZXMtPnBkYXRhKSk7Ci0KLSAgICBzdGF0aWMgY29uc3QgY2hhciogZXhwZWN0ZWRMYW5ndWFnZXMg
PSAiZW4sIGVzLWVzO3E9MC45MCwgZGU7cT0wLjgwIjsKLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2
ZXItPmdldFVSSUZvclBhdGgoIi8iKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRG
aW5pc2hlZCgpOwotICAgIG1haW5SZXNvdXJjZURhdGFTaXplID0gMDsKLSAgICBtYWluUmVzb3Vy
Y2VEYXRhID0gdGVzdC0+bWFpblJlc291cmNlRGF0YShtYWluUmVzb3VyY2VEYXRhU2l6ZSk7Ci0g
ICAgZ19hc3NlcnRfY21wdWludChtYWluUmVzb3VyY2VEYXRhU2l6ZSwgPT0sIHN0cmxlbihleHBl
Y3RlZExhbmd1YWdlcykpOwotICAgIGdfYXNzZXJ0KCFzdHJuY21wKG1haW5SZXNvdXJjZURhdGEs
IGV4cGVjdGVkTGFuZ3VhZ2VzLCBtYWluUmVzb3VyY2VEYXRhU2l6ZSkpOwotfQotCi1zdGF0aWMg
dm9pZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtZXNz
YWdlLCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiwgU291cENsaWVudENvbnRleHQqLCBn
cG9pbnRlcikKLXsKLSAgICBpZiAobWVzc2FnZS0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkg
ewotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19O
T1RfSU1QTEVNRU5URUQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGdfc3Ry
X2VxdWFsKHBhdGgsICIvIikpIHsKLSAgICAgICAgY29uc3QgY2hhciogYWNjZXB0TGFuZ3VhZ2Ug
PSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfb25lKG1lc3NhZ2UtPnJlcXVlc3RfaGVhZGVycywg
IkFjY2VwdC1MYW5ndWFnZSIpOwotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNz
YWdlLCBTT1VQX1NUQVRVU19PSyk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZCht
ZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9DT1BZLCBhY2NlcHRMYW5ndWFnZSwg
c3RybGVuKGFjY2VwdExhbmd1YWdlKSk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBs
ZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOwotICAgIH0gZWxzZQotICAgICAgICBzb3VwX21l
c3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfRk9VTkQpOwotfQotCi1j
bGFzcyBTZWN1cml0eVBvbGljeVRlc3Q6IHB1YmxpYyBUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtF
X0dMSUJfVEVTVF9GSVhUVVJFKFNlY3VyaXR5UG9saWN5VGVzdCk7Ci0KLSAgICBlbnVtIFNlY3Vy
aXR5UG9saWN5IHsKLSAgICAgICAgTG9jYWwgPSAxIDw8IDEsCi0gICAgICAgIE5vQWNjZXNzID0g
MSA8PCAyLAotICAgICAgICBEaXNwbGF5SXNvbGF0ZWQgPSAxIDw8IDMsCi0gICAgICAgIFNlY3Vy
ZSA9IDEgPDwgNCwKLSAgICAgICAgQ09SU0VuYWJsZWQgPSAxIDw8IDUsCi0gICAgICAgIEVtcHR5
RG9jdW1lbnQgPSAxIDw8IDYKLSAgICB9OwotCi0gICAgU2VjdXJpdHlQb2xpY3lUZXN0KCkKLSAg
ICAgICAgOiBtX21hbmFnZXIod2Via2l0X3dlYl9jb250ZXh0X2dldF9zZWN1cml0eV9tYW5hZ2Vy
KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpKSkKLSAgICB7Ci0gICAgfQotCi0gICAg
dm9pZCB2ZXJpZnlUaGF0U2NoZW1lTWF0Y2hlc1BvbGljeShjb25zdCBjaGFyKiBzY2hlbWUsIHVu
c2lnbmVkIHBvbGljeSkKLSAgICB7Ci0gICAgICAgIGlmIChwb2xpY3kgJiBMb2NhbCkKLSAgICAg
ICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9zZWN1cml0eV9tYW5hZ2VyX3VyaV9zY2hlbWVfaXNfbG9j
YWwobV9tYW5hZ2VyLCBzY2hlbWUpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZ19hc3Nl
cnQoIXdlYmtpdF9zZWN1cml0eV9tYW5hZ2VyX3VyaV9zY2hlbWVfaXNfbG9jYWwobV9tYW5hZ2Vy
LCBzY2hlbWUpKTsKLSAgICAgICAgaWYgKHBvbGljeSAmIE5vQWNjZXNzKQotICAgICAgICAgICAg
Z19hc3NlcnQod2Via2l0X3NlY3VyaXR5X21hbmFnZXJfdXJpX3NjaGVtZV9pc19ub19hY2Nlc3Mo
bV9tYW5hZ2VyLCBzY2hlbWUpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZ19hc3NlcnQo
IXdlYmtpdF9zZWN1cml0eV9tYW5hZ2VyX3VyaV9zY2hlbWVfaXNfbm9fYWNjZXNzKG1fbWFuYWdl
ciwgc2NoZW1lKSk7Ci0gICAgICAgIGlmIChwb2xpY3kgJiBEaXNwbGF5SXNvbGF0ZWQpCi0gICAg
ICAgICAgICBnX2Fzc2VydCh3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl91cmlfc2NoZW1lX2lzX2Rp
c3BsYXlfaXNvbGF0ZWQobV9tYW5hZ2VyLCBzY2hlbWUpKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgZ19hc3NlcnQoIXdlYmtpdF9zZWN1cml0eV9tYW5hZ2VyX3VyaV9zY2hlbWVfaXNfZGlz
cGxheV9pc29sYXRlZChtX21hbmFnZXIsIHNjaGVtZSkpOwotICAgICAgICBpZiAocG9saWN5ICYg
U2VjdXJlKQotICAgICAgICAgICAgZ19hc3NlcnQod2Via2l0X3NlY3VyaXR5X21hbmFnZXJfdXJp
X3NjaGVtZV9pc19zZWN1cmUobV9tYW5hZ2VyLCBzY2hlbWUpKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9zZWN1cml0eV9tYW5hZ2VyX3VyaV9zY2hlbWVfaXNf
c2VjdXJlKG1fbWFuYWdlciwgc2NoZW1lKSk7Ci0gICAgICAgIGlmIChwb2xpY3kgJiBDT1JTRW5h
YmxlZCkKLSAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9zZWN1cml0eV9tYW5hZ2VyX3VyaV9z
Y2hlbWVfaXNfY29yc19lbmFibGVkKG1fbWFuYWdlciwgc2NoZW1lKSk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl91cmlfc2NoZW1l
X2lzX2NvcnNfZW5hYmxlZChtX21hbmFnZXIsIHNjaGVtZSkpOwotICAgICAgICBpZiAocG9saWN5
ICYgRW1wdHlEb2N1bWVudCkKLSAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9zZWN1cml0eV9t
YW5hZ2VyX3VyaV9zY2hlbWVfaXNfZW1wdHlfZG9jdW1lbnQobV9tYW5hZ2VyLCBzY2hlbWUpKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9zZWN1cml0eV9tYW5h
Z2VyX3VyaV9zY2hlbWVfaXNfZW1wdHlfZG9jdW1lbnQobV9tYW5hZ2VyLCBzY2hlbWUpKTsKLSAg
ICB9Ci0KLSAgICBXZWJLaXRTZWN1cml0eU1hbmFnZXIqIG1fbWFuYWdlcjsKLX07Ci0KLXN0YXRp
YyB2b2lkIHRlc3RXZWJDb250ZXh0U2VjdXJpdHlQb2xpY3koU2VjdXJpdHlQb2xpY3lUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIC8vIFZlcmlmeVRoYXRTY2hlbWVNYXRjaGVzUG9s
aWN5IGRlZmF1bHQgcG9saWN5IGZvciB3ZWxsIGtub3duIHNjaGVtZXMuCi0gICAgdGVzdC0+dmVy
aWZ5VGhhdFNjaGVtZU1hdGNoZXNQb2xpY3koImh0dHAiLCBTZWN1cml0eVBvbGljeVRlc3Q6OkNP
UlNFbmFibGVkKTsKLSAgICB0ZXN0LT52ZXJpZnlUaGF0U2NoZW1lTWF0Y2hlc1BvbGljeSgiaHR0
cHMiLCBTZWN1cml0eVBvbGljeVRlc3Q6OkNPUlNFbmFibGVkIHwgU2VjdXJpdHlQb2xpY3lUZXN0
OjpTZWN1cmUpOwotICAgIHRlc3QtPnZlcmlmeVRoYXRTY2hlbWVNYXRjaGVzUG9saWN5KCJmaWxl
IiwgU2VjdXJpdHlQb2xpY3lUZXN0OjpMb2NhbCk7Ci0gICAgdGVzdC0+dmVyaWZ5VGhhdFNjaGVt
ZU1hdGNoZXNQb2xpY3koImRhdGEiLCBTZWN1cml0eVBvbGljeVRlc3Q6Ok5vQWNjZXNzIHwgU2Vj
dXJpdHlQb2xpY3lUZXN0OjpTZWN1cmUpOwotICAgIHRlc3QtPnZlcmlmeVRoYXRTY2hlbWVNYXRj
aGVzUG9saWN5KCJhYm91dCIsIFNlY3VyaXR5UG9saWN5VGVzdDo6Tm9BY2Nlc3MgfCBTZWN1cml0
eVBvbGljeVRlc3Q6OlNlY3VyZSB8IFNlY3VyaXR5UG9saWN5VGVzdDo6RW1wdHlEb2N1bWVudCk7
Ci0KLSAgICAvLyBDdXN0b20gc2NoZW1lLgotICAgIHRlc3QtPnZlcmlmeVRoYXRTY2hlbWVNYXRj
aGVzUG9saWN5KCJmb28iLCAwKTsKLQotICAgIHdlYmtpdF9zZWN1cml0eV9tYW5hZ2VyX3JlZ2lz
dGVyX3VyaV9zY2hlbWVfYXNfbG9jYWwodGVzdC0+bV9tYW5hZ2VyLCAiZm9vIik7Ci0gICAgdGVz
dC0+dmVyaWZ5VGhhdFNjaGVtZU1hdGNoZXNQb2xpY3koImZvbyIsIFNlY3VyaXR5UG9saWN5VGVz
dDo6TG9jYWwpOwotICAgIHdlYmtpdF9zZWN1cml0eV9tYW5hZ2VyX3JlZ2lzdGVyX3VyaV9zY2hl
bWVfYXNfbm9fYWNjZXNzKHRlc3QtPm1fbWFuYWdlciwgImZvbyIpOwotICAgIHRlc3QtPnZlcmlm
eVRoYXRTY2hlbWVNYXRjaGVzUG9saWN5KCJmb28iLCBTZWN1cml0eVBvbGljeVRlc3Q6OkxvY2Fs
IHwgU2VjdXJpdHlQb2xpY3lUZXN0OjpOb0FjY2Vzcyk7Ci0gICAgd2Via2l0X3NlY3VyaXR5X21h
bmFnZXJfcmVnaXN0ZXJfdXJpX3NjaGVtZV9hc19kaXNwbGF5X2lzb2xhdGVkKHRlc3QtPm1fbWFu
YWdlciwgImZvbyIpOwotICAgIHRlc3QtPnZlcmlmeVRoYXRTY2hlbWVNYXRjaGVzUG9saWN5KCJm
b28iLCBTZWN1cml0eVBvbGljeVRlc3Q6OkxvY2FsIHwgU2VjdXJpdHlQb2xpY3lUZXN0OjpOb0Fj
Y2VzcyB8IFNlY3VyaXR5UG9saWN5VGVzdDo6RGlzcGxheUlzb2xhdGVkKTsKLSAgICB3ZWJraXRf
c2VjdXJpdHlfbWFuYWdlcl9yZWdpc3Rlcl91cmlfc2NoZW1lX2FzX3NlY3VyZSh0ZXN0LT5tX21h
bmFnZXIsICJmb28iKTsKLSAgICB0ZXN0LT52ZXJpZnlUaGF0U2NoZW1lTWF0Y2hlc1BvbGljeSgi
Zm9vIiwgU2VjdXJpdHlQb2xpY3lUZXN0OjpMb2NhbCB8IFNlY3VyaXR5UG9saWN5VGVzdDo6Tm9B
Y2Nlc3MgfCBTZWN1cml0eVBvbGljeVRlc3Q6OkRpc3BsYXlJc29sYXRlZCB8IFNlY3VyaXR5UG9s
aWN5VGVzdDo6U2VjdXJlKTsKLSAgICB3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl9yZWdpc3Rlcl91
cmlfc2NoZW1lX2FzX2NvcnNfZW5hYmxlZCh0ZXN0LT5tX21hbmFnZXIsICJmb28iKTsKLSAgICB0
ZXN0LT52ZXJpZnlUaGF0U2NoZW1lTWF0Y2hlc1BvbGljeSgiZm9vIiwgU2VjdXJpdHlQb2xpY3lU
ZXN0OjpMb2NhbCB8IFNlY3VyaXR5UG9saWN5VGVzdDo6Tm9BY2Nlc3MgfCBTZWN1cml0eVBvbGlj
eVRlc3Q6OkRpc3BsYXlJc29sYXRlZCB8IFNlY3VyaXR5UG9saWN5VGVzdDo6U2VjdXJlCi0gICAg
ICAgICAgICAgICAgfCBTZWN1cml0eVBvbGljeVRlc3Q6OkNPUlNFbmFibGVkKTsKLSAgICB3ZWJr
aXRfc2VjdXJpdHlfbWFuYWdlcl9yZWdpc3Rlcl91cmlfc2NoZW1lX2FzX2VtcHR5X2RvY3VtZW50
KHRlc3QtPm1fbWFuYWdlciwgImZvbyIpOwotICAgIHRlc3QtPnZlcmlmeVRoYXRTY2hlbWVNYXRj
aGVzUG9saWN5KCJmb28iLCBTZWN1cml0eVBvbGljeVRlc3Q6OkxvY2FsIHwgU2VjdXJpdHlQb2xp
Y3lUZXN0OjpOb0FjY2VzcyB8IFNlY3VyaXR5UG9saWN5VGVzdDo6RGlzcGxheUlzb2xhdGVkIHwg
U2VjdXJpdHlQb2xpY3lUZXN0OjpTZWN1cmUKLSAgICAgICAgICAgICAgICB8IFNlY3VyaXR5UG9s
aWN5VGVzdDo6Q09SU0VuYWJsZWQgfCBTZWN1cml0eVBvbGljeVRlc3Q6OkVtcHR5RG9jdW1lbnQp
OwotfQotCi12b2lkIGJlZm9yZUFsbCgpCi17Ci0gICAga1NlcnZlciA9IG5ldyBXZWJLaXRUZXN0
U2VydmVyKCk7Ci0gICAga1NlcnZlci0+cnVuKHNlcnZlckNhbGxiYWNrKTsKLQotICAgIFRlc3Q6
OmFkZCgiV2ViS2l0V2ViQ29udGV4dCIsICJkZWZhdWx0LWNvbnRleHQiLCB0ZXN0V2ViQ29udGV4
dERlZmF1bHQpOwotICAgIFBsdWdpbnNUZXN0OjphZGQoIldlYktpdFdlYkNvbnRleHQiLCAiZ2V0
LXBsdWdpbnMiLCB0ZXN0V2ViQ29udGV4dEdldFBsdWdpbnMpOwotICAgIFVSSVNjaGVtZVRlc3Q6
OmFkZCgiV2ViS2l0V2ViQ29udGV4dCIsICJ1cmktc2NoZW1lIiwgdGVzdFdlYkNvbnRleHRVUklT
Y2hlbWUpOwotICAgIFRlc3Q6OmFkZCgiV2ViS2l0V2ViQ29udGV4dCIsICJzcGVsbC1jaGVja2Vy
IiwgdGVzdFdlYkNvbnRleHRTcGVsbENoZWNrZXIpOwotICAgIFdlYlZpZXdUZXN0OjphZGQoIldl
YktpdFdlYkNvbnRleHQiLCAibGFuZ3VhZ2VzIiwgdGVzdFdlYkNvbnRleHRMYW5ndWFnZXMpOwot
ICAgIFNlY3VyaXR5UG9saWN5VGVzdDo6YWRkKCJXZWJLaXRTZWN1cml0eU1hbmFnZXIiLCAic2Vj
dXJpdHktcG9saWN5IiwgdGVzdFdlYkNvbnRleHRTZWN1cml0eVBvbGljeSk7Ci19Ci0KLXZvaWQg
YWZ0ZXJBbGwoKQotewotICAgIGRlbGV0ZSBrU2VydmVyOwotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzBiMGEyLi4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDYwOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDExIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9u
IDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViVmll
d1Rlc3QuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oPgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0pTVmFsdWVSZWYuaD4KLSNpbmNsdWRlIDxnbGliL2dzdGRpby5o
PgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLQotc3RhdGljIHZvaWQgdGVzdFdl
YlZpZXdEZWZhdWx0Q29udGV4dChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsK
LSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQodGVzdC0+bV93ZWJWaWV3
KSA9PSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSk7Ci0KLSAgICAvLyBDaGVjayB0
aGF0IGEgd2ViIHZpZXcgY3JlYXRlZCB3aXRoIGdfb2JqZWN0X25ldyBoYXMgdGhlIGRlZmF1bHQg
Y29udGV4dC4KLSAgICBHUmVmUHRyPFdlYktpdFdlYlZpZXc+IHdlYlZpZXcgPSBXRUJLSVRfV0VC
X1ZJRVcoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQl9WSUVXLCBOVUxMKSk7Ci0gICAgZ19h
c3NlcnQod2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KHdlYlZpZXcuZ2V0KCkpID09IHdlYmtp
dF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYlZp
ZXdDdXN0b21DaGFyc2V0KFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAg
IGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfZ2V0X2N1c3RvbV9jaGFyc2V0KHRlc3QtPm1fd2Vi
VmlldykpOwotICAgIHdlYmtpdF93ZWJfdmlld19zZXRfY3VzdG9tX2NoYXJzZXQodGVzdC0+bV93
ZWJWaWV3LCAidXRmOCIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0
X2N1c3RvbV9jaGFyc2V0KHRlc3QtPm1fd2ViVmlldyksID09LCAidXRmOCIpOwotICAgIC8vIEdv
IGJhY2sgdG8gdGhlIGRlZmF1bHQgY2hhcnNldC4KLSAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X2N1
c3RvbV9jaGFyc2V0KHRlc3QtPm1fd2ViVmlldywgMCk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93
ZWJfdmlld19nZXRfY3VzdG9tX2NoYXJzZXQodGVzdC0+bV93ZWJWaWV3KSk7Ci19Ci0KLXN0YXRp
YyB2b2lkIHRlc3RXZWJWaWV3U2V0dGluZ3MoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCi17Ci0gICAgV2ViS2l0U2V0dGluZ3MqIGRlZmF1bHRTZXR0aW5ncyA9IHdlYmtpdF93ZWJf
dmlld19nZXRfc2V0dGluZ3ModGVzdC0+bV93ZWJWaWV3KTsKLSAgICBnX2Fzc2VydChkZWZhdWx0
U2V0dGluZ3MpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2phdmFz
Y3JpcHQoZGVmYXVsdFNldHRpbmdzKSk7Ci0KLSAgICBHUmVmUHRyPFdlYktpdFNldHRpbmdzPiBu
ZXdTZXR0aW5ncyA9IGFkb3B0R1JlZih3ZWJraXRfc2V0dGluZ3NfbmV3KCkpOwotICAgIGdfb2Jq
ZWN0X3NldChHX09CSkVDVChuZXdTZXR0aW5ncy5nZXQoKSksICJlbmFibGUtamF2YXNjcmlwdCIs
IEZBTFNFLCBOVUxMKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X3NldHRpbmdzKHRlc3QtPm1f
d2ViVmlldywgbmV3U2V0dGluZ3MuZ2V0KCkpOwotCi0gICAgV2ViS2l0U2V0dGluZ3MqIHNldHRp
bmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh0ZXN0LT5tX3dlYlZpZXcpOwotICAg
IGdfYXNzZXJ0KHNldHRpbmdzICE9IGRlZmF1bHRTZXR0aW5ncyk7Ci0gICAgZ19hc3NlcnQoIXdl
YmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2phdmFzY3JpcHQoc2V0dGluZ3MpKTsKLQotICAgIEdS
ZWZQdHI8R3RrV2lkZ2V0PiB3ZWJWaWV3MiA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKLSAgICB0
ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHdlYlZp
ZXcyLmdldCgpKSk7Ci0gICAgd2Via2l0X3dlYl92aWV3X3NldF9zZXR0aW5ncyhXRUJLSVRfV0VC
X1ZJRVcod2ViVmlldzIuZ2V0KCkpLCBzZXR0aW5ncyk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3dl
Yl92aWV3X2dldF9zZXR0aW5ncyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldzIuZ2V0KCkpKSA9PSBz
ZXR0aW5ncyk7Ci0KLSAgICBHUmVmUHRyPFdlYktpdFNldHRpbmdzPiBuZXdTZXR0aW5nczIgPSBh
ZG9wdEdSZWYod2Via2l0X3NldHRpbmdzX25ldygpKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0
X3NldHRpbmdzKFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3Mi5nZXQoKSksIG5ld1NldHRpbmdzMi5n
ZXQoKSk7Ci0gICAgc2V0dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKFdFQktJ
VF9XRUJfVklFVyh3ZWJWaWV3Mi5nZXQoKSkpOwotICAgIGdfYXNzZXJ0KHNldHRpbmdzID09IG5l
d1NldHRpbmdzMi5nZXQoKSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFi
bGVfamF2YXNjcmlwdChzZXR0aW5ncykpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1pv
b21MZXZlbChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBnX2Fzc2Vy
dF9jbXBmbG9hdCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3pvb21fbGV2ZWwodGVzdC0+bV93ZWJWaWV3
KSwgPT0sIDEpOwotICAgIHdlYmtpdF93ZWJfdmlld19zZXRfem9vbV9sZXZlbCh0ZXN0LT5tX3dl
YlZpZXcsIDIuNSk7Ci0gICAgZ19hc3NlcnRfY21wZmxvYXQod2Via2l0X3dlYl92aWV3X2dldF96
b29tX2xldmVsKHRlc3QtPm1fd2ViVmlldyksID09LCAyLjUpOwotCi0gICAgd2Via2l0X3NldHRp
bmdzX3NldF96b29tX3RleHRfb25seSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHRlc3Qt
Pm1fd2ViVmlldyksIFRSVUUpOwotICAgIC8vIFRoZSB6b29tIGxldmVsIHNob3VsZG4ndCBjaGFu
Z2Ugd2hlbiB6b29tLXRleHQtb25seSBzZXR0aW5nIGNoYW5nZXMuCi0gICAgZ19hc3NlcnRfY21w
ZmxvYXQod2Via2l0X3dlYl92aWV3X2dldF96b29tX2xldmVsKHRlc3QtPm1fd2ViVmlldyksID09
LCAyLjUpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1J1bkphdmFTY3JpcHQoV2ViVmll
d1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGh0
bWwgPSAiPGh0bWw+PGJvZHk+PGEgaWQ9J1dlYktpdExpbmsnIGhyZWY9J2h0dHA6Ly93d3cud2Vi
a2l0Z3RrLm9yZy8nIHRpdGxlPSdXZWJLaXRHVEsrIFRpdGxlJz5XZWJLaXRHVEsrIFdlYnNpdGU8
L2E+PC9ib2R5PjwvaHRtbD4iOwotICAgIHRlc3QtPmxvYWRIdG1sKGh0bWwsIDApOwotICAgIHRl
c3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgR093blB0cjxHRXJyb3I+IGVycm9y
OwotICAgIFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5y
dW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoIndpbmRvdy5kb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnV2ViS2l0TGluaycpLnRpdGxlOyIsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgZ19h
c3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKLSAg
ICBHT3duUHRyPGNoYXI+IHZhbHVlU3RyaW5nKFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0
VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVT
dHJpbmcuZ2V0KCksID09LCAiV2ViS2l0R1RLKyBUaXRsZSIpOwotCi0gICAgamF2YXNjcmlwdFJl
c3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgid2luZG93LmRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdXZWJLaXRMaW5rJykuaHJlZjsiLCAmZXJyb3Iub3V0UHRy
KCkpOwotICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOwotICAgIGdfYXNzZXJ0KCFlcnJv
ci5nZXQoKSk7Ci0gICAgdmFsdWVTdHJpbmcuc2V0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVz
dWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodmFs
dWVTdHJpbmcuZ2V0KCksID09LCAiaHR0cDovL3d3dy53ZWJraXRndGsub3JnLyIpOwotCi0gICAg
amF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hl
ZCgid2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdXZWJLaXRMaW5rJykudGV4dENvbnRl
bnQiLCAmZXJyb3Iub3V0UHRyKCkpOwotICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOwot
ICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7Ci0gICAgdmFsdWVTdHJpbmcuc2V0KFdlYlZpZXdU
ZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKLSAgICBn
X2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAiV2ViS2l0R1RLKyBXZWJzaXRl
Iik7Ci0KLSAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRV
bnRpbEZpbmlzaGVkKCJhID0gMjU7IiwgJmVycm9yLm91dFB0cigpKTsKLSAgICBnX2Fzc2VydChq
YXZhc2NyaXB0UmVzdWx0KTsKLSAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOwotICAgIGdfYXNz
ZXJ0X2NtcGZsb2F0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9OdW1iZXIoamF2YXNj
cmlwdFJlc3VsdCksID09LCAyNSk7Ci0KLSAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVu
SmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJhID0gMi41OyIsICZlcnJvci5vdXRQdHIo
KSk7Ci0gICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAgZ19hc3NlcnQoIWVycm9y
LmdldCgpKTsKLSAgICBnX2Fzc2VydF9jbXBmbG9hdChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJl
c3VsdFRvTnVtYmVyKGphdmFzY3JpcHRSZXN1bHQpLCA9PSwgMi41KTsKLQotICAgIGphdmFzY3Jp
cHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImEgPSB0
cnVlIiwgJmVycm9yLm91dFB0cigpKTsKLSAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsK
LSAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOwotICAgIGdfYXNzZXJ0KFdlYlZpZXdUZXN0Ojpq
YXZhc2NyaXB0UmVzdWx0VG9Cb29sZWFuKGphdmFzY3JpcHRSZXN1bHQpKTsKLQotICAgIGphdmFz
Y3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImEg
PSBmYWxzZSIsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3Vs
dCk7Ci0gICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKLSAgICBnX2Fzc2VydCghV2ViVmlld1Rl
c3Q6OmphdmFzY3JpcHRSZXN1bHRUb0Jvb2xlYW4oamF2YXNjcmlwdFJlc3VsdCkpOwotCi0gICAg
amF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hl
ZCgiYSA9IG51bGwiLCAmZXJyb3Iub3V0UHRyKCkpOwotICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRS
ZXN1bHQpOwotICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7Ci0gICAgZ19hc3NlcnQoV2ViVmll
d1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRJc051bGwoamF2YXNjcmlwdFJlc3VsdCkpOwotCi0gICAg
amF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hl
ZCgiZnVuY3Rpb24gRm9vKCkgeyBhID0gMjU7IH0gRm9vKCk7IiwgJmVycm9yLm91dFB0cigpKTsK
LSAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBnX2Fzc2VydCghZXJyb3IuZ2V0
KCkpOwotICAgIGdfYXNzZXJ0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0SXNVbmRlZmlu
ZWQoamF2YXNjcmlwdFJlc3VsdCkpOwotCi0gICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1
bkphdmFTY3JpcHRGcm9tR1Jlc291cmNlQW5kV2FpdFVudGlsRmluaXNoZWQoIi9vcmcvd2Via2l0
L3dlYmtpdDJndGsvdGVzdHMvbGluay10aXRsZS5qcyIsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAg
Z19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsK
LSAgICB2YWx1ZVN0cmluZy5zZXQoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0NTdHJp
bmcoamF2YXNjcmlwdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih2YWx1ZVN0cmluZy5n
ZXQoKSwgPT0sICJXZWJLaXRHVEsrIFRpdGxlIik7Ci0KLSAgICBqYXZhc2NyaXB0UmVzdWx0ID0g
dGVzdC0+cnVuSmF2YVNjcmlwdEZyb21HUmVzb3VyY2VBbmRXYWl0VW50aWxGaW5pc2hlZCgiL3dy
b25nL3BhdGgvdG8vcmVzb3VyY2UuanMiLCAmZXJyb3Iub3V0UHRyKCkpOwotICAgIGdfYXNzZXJ0
KCFqYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBnX2Fzc2VydF9lcnJvcihlcnJvci5nZXQoKSwgR19S
RVNPVVJDRV9FUlJPUiwgR19SRVNPVVJDRV9FUlJPUl9OT1RfRk9VTkQpOwotICAgIGVycm9yLmNs
ZWFyKCk7Ci0KLSAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdh
aXRVbnRpbEZpbmlzaGVkKCJmb28oKTsiLCAmZXJyb3Iub3V0UHRyKCkpOwotICAgIGdfYXNzZXJ0
KCFqYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBnX2Fzc2VydF9lcnJvcihlcnJvci5nZXQoKSwgV0VC
S0lUX0pBVkFTQ1JJUFRfRVJST1IsIFdFQktJVF9KQVZBU0NSSVBUX0VSUk9SX1NDUklQVF9GQUlM
RUQpOwotfQotCi1jbGFzcyBGdWxsU2NyZWVuQ2xpZW50VGVzdDogcHVibGljIFdlYlZpZXdUZXN0
IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKEZ1bGxTY3JlZW5DbGllbnRU
ZXN0KTsKLQotICAgIGVudW0gRnVsbFNjcmVlbkV2ZW50IHsKLSAgICAgICAgTm9uZSwKLSAgICAg
ICAgRW50ZXIsCi0gICAgICAgIExlYXZlCi0gICAgfTsKLQotICAgIHN0YXRpYyBnYm9vbGVhbiB2
aWV3RW50ZXJGdWxsU2NyZWVuQ2FsbGJhY2soV2ViS2l0V2ViVmlldyosIEZ1bGxTY3JlZW5DbGll
bnRUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+bV9ldmVudCA9IEVudGVyOwotICAg
ICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOwotICAgICAgICByZXR1cm4g
RkFMU0U7Ci0gICAgfQotCi0gICAgc3RhdGljIGdib29sZWFuIHZpZXdMZWF2ZUZ1bGxTY3JlZW5D
YWxsYmFjayhXZWJLaXRXZWJWaWV3KiwgRnVsbFNjcmVlbkNsaWVudFRlc3QqIHRlc3QpCi0gICAg
ewotICAgICAgICB0ZXN0LT5tX2V2ZW50ID0gTGVhdmU7Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1
aXQodGVzdC0+bV9tYWluTG9vcCk7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAg
ICBGdWxsU2NyZWVuQ2xpZW50VGVzdCgpCi0gICAgICAgIDogbV9ldmVudChOb25lKQotICAgIHsK
LSAgICAgICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfZnVsbHNjcmVlbih3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X3NldHRpbmdzKG1fd2ViVmlldyksIFRSVUUpOwotICAgICAgICBnX3NpZ25hbF9j
b25uZWN0KG1fd2ViVmlldywgImVudGVyLWZ1bGxzY3JlZW4iLCBHX0NBTExCQUNLKHZpZXdFbnRl
ckZ1bGxTY3JlZW5DYWxsYmFjayksIHRoaXMpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1f
d2ViVmlldywgImxlYXZlLWZ1bGxzY3JlZW4iLCBHX0NBTExCQUNLKHZpZXdMZWF2ZUZ1bGxTY3Jl
ZW5DYWxsYmFjayksIHRoaXMpOwotICAgIH0KLQotICAgIH5GdWxsU2NyZWVuQ2xpZW50VGVzdCgp
Ci0gICAgewotICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV93
ZWJWaWV3LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKLSAgICB9Ci0K
LSAgICB2b2lkIHJlcXVlc3RGdWxsU2NyZWVuQW5kV2FpdFVudGlsRW50ZXJlZEZ1bGxTY3JlZW4o
KQotICAgIHsKLSAgICAgICAgbV9ldmVudCA9IE5vbmU7Ci0gICAgICAgIHdlYmtpdF93ZWJfdmll
d19ydW5famF2YXNjcmlwdChtX3dlYlZpZXcsICJkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQud2Vi
a2l0UmVxdWVzdEZ1bGxTY3JlZW4oKTsiLCAwLCAwLCAwKTsKLSAgICAgICAgZ19tYWluX2xvb3Bf
cnVuKG1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiBsZWF2ZUZ1bGxT
Y3JlZW5JZGxlKEZ1bGxTY3JlZW5DbGllbnRUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVz
dC0+a2V5U3Ryb2tlKEdES19LRVlfRXNjYXBlKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAg
IH0KLQotICAgIHZvaWQgbGVhdmVGdWxsU2NyZWVuQW5kV2FpdFVudGlsTGVmdEZ1bGxTY3JlZW4o
KQotICAgIHsKLSAgICAgICAgbV9ldmVudCA9IE5vbmU7Ci0gICAgICAgIGdfaWRsZV9hZGQocmVp
bnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4obGVhdmVGdWxsU2NyZWVuSWRsZSksIHRoaXMpOwot
ICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgRnVsbFNj
cmVlbkV2ZW50IG1fZXZlbnQ7Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0Z1bGxTY3Jl
ZW4oRnVsbFNjcmVlbkNsaWVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVz
dC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7Ci0gICAgdGVzdC0+bG9hZEh0bWwo
IjxodG1sPjxib2R5PkZ1bGxTY3JlZW4gdGVzdDwvYm9keT48L2h0bWw+IiwgMCk7Ci0gICAgdGVz
dC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgdGVzdC0+cmVxdWVzdEZ1bGxTY3JlZW5B
bmRXYWl0VW50aWxFbnRlcmVkRnVsbFNjcmVlbigpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0
LT5tX2V2ZW50LCA9PSwgRnVsbFNjcmVlbkNsaWVudFRlc3Q6OkVudGVyKTsKLSAgICB0ZXN0LT5s
ZWF2ZUZ1bGxTY3JlZW5BbmRXYWl0VW50aWxMZWZ0RnVsbFNjcmVlbigpOwotICAgIGdfYXNzZXJ0
X2NtcGludCh0ZXN0LT5tX2V2ZW50LCA9PSwgRnVsbFNjcmVlbkNsaWVudFRlc3Q6OkxlYXZlKTsK
LX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdDYW5TaG93TUlNRVR5cGUoV2ViVmlld1Rlc3Qq
IHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgLy8gU3VwcG9ydGVkIE1JTUUgdHlwZXMuCi0g
ICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2Nhbl9zaG93X21pbWVfdHlwZSh0ZXN0LT5tX3dl
YlZpZXcsICJ0ZXh0L2h0bWwiKSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2Nhbl9z
aG93X21pbWVfdHlwZSh0ZXN0LT5tX3dlYlZpZXcsICJ0ZXh0L3BsYWluIikpOwotICAgIGdfYXNz
ZXJ0KHdlYmtpdF93ZWJfdmlld19jYW5fc2hvd19taW1lX3R5cGUodGVzdC0+bV93ZWJWaWV3LCAi
aW1hZ2UvanBlZyIpKTsKLQotICAgIC8vIFVuc3VwcG9ydGVkIE1JTUUgdHlwZXMuCi0gICAgZ19h
c3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fc2hvd19taW1lX3R5cGUodGVzdC0+bV93ZWJWaWV3
LCAidGV4dC92Y2FyZCIpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9zaG93
X21pbWVfdHlwZSh0ZXN0LT5tX3dlYlZpZXcsICJhcHBsaWNhdGlvbi9wZGYiKSk7Ci0gICAgZ19h
c3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fc2hvd19taW1lX3R5cGUodGVzdC0+bV93ZWJWaWV3
LCAiYXBwbGljYXRpb24vemlwIikpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2Fu
X3Nob3dfbWltZV90eXBlKHRlc3QtPm1fd2ViVmlldywgImFwcGxpY2F0aW9uL29jdGV0LXN0cmVh
bSIpKTsKLQotICAgIC8vIFBsdWdpbnMgYXJlIG9ubHkgc3VwcG9ydGVkIHdoZW4gZW5hYmxlZC4K
LSAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X2FkZGl0aW9uYWxfcGx1Z2luc19kaXJlY3Rvcnko
d2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KHRlc3QtPm1fd2ViVmlldyksIFdFQktJVF9URVNU
X1BMVUdJTl9ESVIpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19jYW5fc2hvd19taW1l
X3R5cGUodGVzdC0+bV93ZWJWaWV3LCAiYXBwbGljYXRpb24veC13ZWJraXQtdGVzdC1uZXRzY2Fw
ZSIpKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9wbHVnaW5zKHdlYmtpdF93ZWJf
dmlld19nZXRfc2V0dGluZ3ModGVzdC0+bV93ZWJWaWV3KSwgRkFMU0UpOwotICAgIGdfYXNzZXJ0
KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX3Nob3dfbWltZV90eXBlKHRlc3QtPm1fd2ViVmlldywgImFw
cGxpY2F0aW9uL3gtd2Via2l0LXRlc3QtbmV0c2NhcGUiKSk7Ci19Ci0KLWNsYXNzIEZvcm1DbGll
bnRUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJQl9URVNU
X0ZJWFRVUkUoRm9ybUNsaWVudFRlc3QpOwotCi0gICAgc3RhdGljIHZvaWQgc3VibWl0Rm9ybUNh
bGxiYWNrKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRGb3JtU3VibWlzc2lvblJlcXVlc3QqIHJlcXVl
c3QsIEZvcm1DbGllbnRUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+c3VibWl0Rm9y
bShyZXF1ZXN0KTsKLSAgICB9Ci0KLSAgICBGb3JtQ2xpZW50VGVzdCgpCi0gICAgICAgIDogbV9z
dWJtaXRQb3NpdGlvblgoMCkKLSAgICAgICAgLCBtX3N1Ym1pdFBvc2l0aW9uWSgwKQotICAgIHsK
LSAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJzdWJtaXQtZm9ybSIsIEdfQ0FM
TEJBQ0soc3VibWl0Rm9ybUNhbGxiYWNrKSwgdGhpcyk7Ci0gICAgfQotCi0gICAgfkZvcm1DbGll
bnRUZXN0KCkKLSAgICB7Ci0gICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0
Y2hlZChtX3dlYlZpZXcsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOwot
ICAgIH0KLQotICAgIHZvaWQgc3VibWl0Rm9ybShXZWJLaXRGb3JtU3VibWlzc2lvblJlcXVlc3Qq
IHJlcXVlc3QpCi0gICAgewotICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZp
bmlzaGVzKEdfT0JKRUNUKHJlcXVlc3QpKTsKLSAgICAgICAgbV9yZXF1ZXN0ID0gcmVxdWVzdDsK
LSAgICAgICAgd2Via2l0X2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0X3N1Ym1pdChyZXF1ZXN0KTsK
LSAgICAgICAgcXVpdE1haW5Mb29wKCk7Ci0gICAgfQotCi0gICAgR0hhc2hUYWJsZSogd2FpdFVu
dGlsRm9ybVN1Ym1pdHRlZEFuZEdldFRleHRGaWVsZHMoKQotICAgIHsKLSAgICAgICAgZ19tYWlu
X2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotICAgICAgICByZXR1cm4gd2Via2l0X2Zvcm1fc3VibWlz
c2lvbl9yZXF1ZXN0X2dldF90ZXh0X2ZpZWxkcyhtX3JlcXVlc3QuZ2V0KCkpOwotICAgIH0KLQot
ICAgIHN0YXRpYyBnYm9vbGVhbiBkb0NsaWNrSWRsZUNhbGxiYWNrKEZvcm1DbGllbnRUZXN0KiB0
ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+Y2xpY2tNb3VzZUJ1dHRvbih0ZXN0LT5tX3N1Ym1p
dFBvc2l0aW9uWCwgdGVzdC0+bV9zdWJtaXRQb3NpdGlvblksIDEpOwotICAgICAgICByZXR1cm4g
RkFMU0U7Ci0gICAgfQotCi0gICAgdm9pZCBzdWJtaXRGb3JtQXRQb3NpdGlvbihpbnQgeCwgaW50
IHkpCi0gICAgewotICAgICAgICBtX3N1Ym1pdFBvc2l0aW9uWCA9IHg7Ci0gICAgICAgIG1fc3Vi
bWl0UG9zaXRpb25ZID0geTsKLSAgICAgICAgZ19pZGxlX2FkZChyZWludGVycHJldF9jYXN0PEdT
b3VyY2VGdW5jPihkb0NsaWNrSWRsZUNhbGxiYWNrKSwgdGhpcyk7Ci0gICAgfQotCi0gICAgaW50
IG1fc3VibWl0UG9zaXRpb25YOwotICAgIGludCBtX3N1Ym1pdFBvc2l0aW9uWTsKLSAgICBHUmVm
UHRyPFdlYktpdEZvcm1TdWJtaXNzaW9uUmVxdWVzdD4gbV9yZXF1ZXN0OwotfTsKLQotc3RhdGlj
IHZvaWQgdGVzdFdlYlZpZXdTdWJtaXRGb3JtKEZvcm1DbGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rw
b2ludGVyKQotewotICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOwot
Ci0gICAgY29uc3QgY2hhciogZm9ybUhUTUwgPQotICAgICAgICAiPGh0bWw+PGJvZHk+IgotICAg
ICAgICAiIDxmb3JtIGFjdGlvbj0nIyc+IgotICAgICAgICAiICA8aW5wdXQgdHlwZT0ndGV4dCcg
bmFtZT0ndGV4dDEnIHZhbHVlPSd2YWx1ZTEnPiIKLSAgICAgICAgIiAgPGlucHV0IHR5cGU9J3Rl
eHQnIG5hbWU9J3RleHQyJyB2YWx1ZT0ndmFsdWUyJz4iCi0gICAgICAgICIgIDxpbnB1dCB0eXBl
PSdwYXNzd29yZCcgbmFtZT0ncGFzc3dvcmQnIHZhbHVlPSdzZWNyZXQnPiIKLSAgICAgICAgIiAg
PHRleHRhcmVhIGNvbHM9JzUnIHJvd3M9JzUnIG5hbWU9J3RleHRhcmVhJz5UZXh0PC90ZXh0YXJl
YT4iCi0gICAgICAgICIgIDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2hpZGRlbjEnIHZhbHVl
PSdoaWRkZW4xJz4iCi0gICAgICAgICIgIDxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPSdTdWJt
aXQnIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6MScgc2l6ZT0nMTAnPiIK
LSAgICAgICAgIiA8L2Zvcm0+IgotICAgICAgICAiPC9ib2R5PjwvaHRtbD4iOwotCi0gICAgdGVz
dC0+bG9hZEh0bWwoZm9ybUhUTUwsICJmaWxlOi8vLyIpOwotICAgIHRlc3QtPndhaXRVbnRpbExv
YWRGaW5pc2hlZCgpOwotCi0gICAgdGVzdC0+c3VibWl0Rm9ybUF0UG9zaXRpb24oNSwgNSk7Ci0g
ICAgR0hhc2hUYWJsZSogdmFsdWVzID0gdGVzdC0+d2FpdFVudGlsRm9ybVN1Ym1pdHRlZEFuZEdl
dFRleHRGaWVsZHMoKTsKLSAgICBnX2Fzc2VydCh2YWx1ZXMpOwotICAgIGdfYXNzZXJ0X2NtcHVp
bnQoZ19oYXNoX3RhYmxlX3NpemUodmFsdWVzKSwgPT0sIDMpOwotICAgIGdfYXNzZXJ0X2NtcHN0
cihzdGF0aWNfY2FzdDxjaGFyKj4oZ19oYXNoX3RhYmxlX2xvb2t1cCh2YWx1ZXMsICJ0ZXh0MSIp
KSwgPT0sICJ2YWx1ZTEiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc3RhdGljX2Nhc3Q8Y2hhcio+
KGdfaGFzaF90YWJsZV9sb29rdXAodmFsdWVzLCAidGV4dDIiKSksID09LCAidmFsdWUyIik7Ci0g
ICAgZ19hc3NlcnRfY21wc3RyKHN0YXRpY19jYXN0PGNoYXIqPihnX2hhc2hfdGFibGVfbG9va3Vw
KHZhbHVlcywgInBhc3N3b3JkIikpLCA9PSwgInNlY3JldCIpOwotfQotCi1jbGFzcyBTYXZlV2Vi
Vmlld1Rlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RF
U1RfRklYVFVSRShTYXZlV2ViVmlld1Rlc3QpOwotCi0gICAgU2F2ZVdlYlZpZXdUZXN0KCkKLSAg
ICAgICAgOiBtX3RlbXBEaXJlY3RvcnkoZ19kaXJfbWFrZV90bXAoIldlYktpdDJTYXZlVmlld1Rl
c3QtWFhYWFhYIiwgMCkpCi0gICAgewotICAgIH0KLQotICAgIH5TYXZlV2ViVmlld1Rlc3QoKQot
ICAgIHsKLSAgICAgICAgaWYgKEdfSVNfRklMRShtX2ZpbGUuZ2V0KCkpKQotICAgICAgICAgICAg
Z19maWxlX2RlbGV0ZShtX2ZpbGUuZ2V0KCksIDAsIDApOwotCi0gICAgICAgIGlmIChHX0lTX0lO
UFVUX1NUUkVBTShtX2lucHV0U3RyZWFtLmdldCgpKSkKLSAgICAgICAgICAgIGdfaW5wdXRfc3Ry
ZWFtX2Nsb3NlKG1faW5wdXRTdHJlYW0uZ2V0KCksIDAsIDApOwotCi0gICAgICAgIGlmIChtX3Rl
bXBEaXJlY3RvcnkpCi0gICAgICAgICAgICBnX3JtZGlyKG1fdGVtcERpcmVjdG9yeS5nZXQoKSk7
Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgd2ViVmlld1NhdmVkVG9TdHJlYW1DYWxsYmFjayhH
T2JqZWN0KiBvYmplY3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBTYXZlV2ViVmlld1Rlc3QqIHRl
c3QpCi0gICAgewotICAgICAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgICAgIHRlc3Qt
Pm1faW5wdXRTdHJlYW0gPSBhZG9wdEdSZWYod2Via2l0X3dlYl92aWV3X3NhdmVfZmluaXNoKHRl
c3QtPm1fd2ViVmlldywgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpKTsKLSAgICAgICAgZ19hc3Nl
cnQoR19JU19JTlBVVF9TVFJFQU0odGVzdC0+bV9pbnB1dFN0cmVhbS5nZXQoKSkpOwotICAgICAg
ICBnX2Fzc2VydCghZXJyb3IpOwotCi0gICAgICAgIHRlc3QtPnF1aXRNYWluTG9vcCgpOwotICAg
IH0KLQotICAgIHN0YXRpYyB2b2lkIHdlYlZpZXdTYXZlZFRvRmlsZUNhbGxiYWNrKEdPYmplY3Qq
IG9iamVjdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIFNhdmVXZWJWaWV3VGVzdCogdGVzdCkKLSAg
ICB7Ci0gICAgICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKLSAgICAgICAgZ19hc3NlcnQod2Vi
a2l0X3dlYl92aWV3X3NhdmVfdG9fZmlsZV9maW5pc2godGVzdC0+bV93ZWJWaWV3LCByZXN1bHQs
ICZlcnJvci5vdXRQdHIoKSkpOwotICAgICAgICBnX2Fzc2VydCghZXJyb3IpOwotCi0gICAgICAg
IHRlc3QtPnF1aXRNYWluTG9vcCgpOwotICAgIH0KLQotICAgIHZvaWQgc2F2ZUFuZFdhaXRGb3JT
dHJlYW0oKQotICAgIHsKLSAgICAgICAgd2Via2l0X3dlYl92aWV3X3NhdmUobV93ZWJWaWV3LCBX
RUJLSVRfU0FWRV9NT0RFX01IVE1MLCAwLCByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2Fs
bGJhY2s+KHdlYlZpZXdTYXZlZFRvU3RyZWFtQ2FsbGJhY2spLCB0aGlzKTsKLSAgICAgICAgZ19t
YWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIHZvaWQgc2F2ZUFuZFdhaXRG
b3JGaWxlKCkKLSAgICB7Ci0gICAgICAgIG1fc2F2ZURlc3RpbmF0aW9uRmlsZVBhdGguc2V0KGdf
YnVpbGRfZmlsZW5hbWUobV90ZW1wRGlyZWN0b3J5LmdldCgpLCAidGVzdFdlYlZpZXdTYXZlUmVz
dWx0Lm1odCIsIE5VTEwpKTsKLSAgICAgICAgbV9maWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdf
Zm9yX3BhdGgobV9zYXZlRGVzdGluYXRpb25GaWxlUGF0aC5nZXQoKSkpOwotICAgICAgICB3ZWJr
aXRfd2ViX3ZpZXdfc2F2ZV90b19maWxlKG1fd2ViVmlldywgbV9maWxlLmdldCgpLCBXRUJLSVRf
U0FWRV9NT0RFX01IVE1MLCAwLCByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+
KHdlYlZpZXdTYXZlZFRvRmlsZUNhbGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIGdfbWFpbl9sb29w
X3J1bihtX21haW5Mb29wKTsKLSAgICB9Ci0KLSAgICBHT3duUHRyPGNoYXI+IG1fdGVtcERpcmVj
dG9yeTsKLSAgICBHT3duUHRyPGNoYXI+IG1fc2F2ZURlc3RpbmF0aW9uRmlsZVBhdGg7Ci0gICAg
R1JlZlB0cjxHSW5wdXRTdHJlYW0+IG1faW5wdXRTdHJlYW07Ci0gICAgR1JlZlB0cjxHRmlsZT4g
bV9maWxlOwotfTsKLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdTYXZlKFNhdmVXZWJWaWV3VGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+Igot
ICAgICAgICAgICAgICAgICAgICI8Ym9keT4iCi0gICAgICAgICAgICAgICAgICAgIiAgPHA+QSBw
YXJhZ3JhcGggd2l0aCBwbGFpbiB0ZXh0PC9wPiIKLSAgICAgICAgICAgICAgICAgICAiICA8cD4i
Ci0gICAgICAgICAgICAgICAgICAgIiAgICBBIHJlZCBib3g6IDxpbWcgc3JjPSdkYXRhOmltYWdl
L3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFJQUFBQUNDQUlBQUFEOTFKcHpB
QUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUIzUkpUVVVIM0FZV0RUTVZ3blNabndBQUFC
MXBWRmgwUTI5dGJXVnVkQUFBQUFBQVEzSmxZWFJsWkNCM2FYUm9JRWRKVFZCa0xtVUhBQUFBRmts
RVFWUUkxMlA4ejhEQXdNREF4TURBd01EQUFBQU5IUUVESyttbXlBQUFBQUJKUlU1RXJrSmdnZz09
Jz48L2JyPiIKLSAgICAgICAgICAgICAgICAgICAiICAgIEEgYmx1ZSBib3g6IDxpbWcgc3JjPSdk
YXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFJQUFBQUNDQUlB
QUFEOTFKcHpBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUIzUkpUVVVIM0FZV0RUTXZC
SGhBTFFBQUFCMXBWRmgwUTI5dGJXVnVkQUFBQUFBQVEzSmxZWFJsWkNCM2FYUm9JRWRKVFZCa0xt
VUhBQUFBRmtsRVFWUUkxMk5rNFBuUHdNREF4TURBd01EQUFBQUxyd0VQUElzMXBnQUFBQUJKUlU1
RXJrSmdnZz09Jz4iCi0gICAgICAgICAgICAgICAgICAgIiAgPC9wPiIKLSAgICAgICAgICAgICAg
ICAgICAiPC9ib2R5PiIKLSAgICAgICAgICAgICAgICAgICAiPC9odG1sPiIsIDApOwotICAgIHRl
c3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgLy8gV3JpdGUgdG8gYSBmaWxlIGFu
ZCB0byBhbiBpbnB1dCBzdHJlYW0uCi0gICAgdGVzdC0+c2F2ZUFuZFdhaXRGb3JGaWxlKCk7Ci0g
ICAgdGVzdC0+c2F2ZUFuZFdhaXRGb3JTdHJlYW0oKTsKLQotICAgIC8vIFdlIHNob3VsZCBoYXZl
IGV4YWN0bHkgdGhlIHNhbWUgYW1vdW50IG9mIGJ5dGVzIGluIHRoZSBmaWxlCi0gICAgLy8gdGhh
biB0aG9zZSBjb21pbmcgZnJvbSB0aGUgR0lucHV0U3RyZWFtLiBXZSBkb24ndCBjb21wYXJlIHRo
ZQotICAgIC8vIHN0cmluZ3MgcmVhZCBzaW5jZSB0aGUgJ0RhdGUnIGZpZWxkIGFuZCB0aGUgYm91
bmRhcmllcyB3aWxsIGJlCi0gICAgLy8gZGlmZmVyZW50IG9uIGVhY2ggY2FzZS4gTUhUTUwgZnVu
Y3Rpb25hbGl0eSB3aWxsIGJlIHRlc3RlZCBieQotICAgIC8vIExheW91dCB0ZXN0cywgc28gY2hl
Y2tpbmcgdGhlIGFtb3VudCBvZiBieXRlcyBpcyBlbm91Z2guCi0gICAgR093blB0cjxHRXJyb3I+
IGVycm9yOwotICAgIGdjaGFyIGJ1ZmZlcls1MTJdID0geyAwIH07Ci0gICAgZ3NzaXplIHJlYWRC
eXRlcyA9IDA7Ci0gICAgZ3NzaXplIHRvdGFsQnl0ZXNGcm9tU3RyZWFtID0gMDsKLSAgICB3aGls
ZSAocmVhZEJ5dGVzID0gZ19pbnB1dF9zdHJlYW1fcmVhZCh0ZXN0LT5tX2lucHV0U3RyZWFtLmdl
dCgpLCAmYnVmZmVyLCA1MTIsIDAsICZlcnJvci5vdXRQdHIoKSkpIHsKLSAgICAgICAgZ19hc3Nl
cnQoIWVycm9yKTsKLSAgICAgICAgdG90YWxCeXRlc0Zyb21TdHJlYW0gKz0gcmVhZEJ5dGVzOwot
ICAgIH0KLQotICAgIC8vIENoZWNrIHRoYXQgdGhlIGZpbGUgZXhpc3RzIGFuZCB0aGF0IGl0IGNv
bnRhaW5zIHRoZSBzYW1lIGFtb3VudCBvZiBieXRlcy4KLSAgICBHUmVmUHRyPEdGaWxlSW5mbz4g
ZmlsZUluZm8gPSBhZG9wdEdSZWYoZ19maWxlX3F1ZXJ5X2luZm8odGVzdC0+bV9maWxlLmdldCgp
LCBHX0ZJTEVfQVRUUklCVVRFX1NUQU5EQVJEX1NJWkUsIHN0YXRpY19jYXN0PEdGaWxlUXVlcnlJ
bmZvRmxhZ3M+KDApLCAwLCAwKSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGdfZmlsZV9pbmZvX2dl
dF9zaXplKGZpbGVJbmZvLmdldCgpKSwgPT0sIHRvdGFsQnl0ZXNGcm9tU3RyZWFtKTsKLX0KLQot
c3RhdGljIHZvaWQgdGVzdFdlYlZpZXdNb2RlKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2lu
dGVyKQotewotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBpbmRleEhUTUwgPSAiPGh0bWw+PGJvZHk+
PHA+VGVzdCBXZWIgVmlldyBNb2RlPC9wPjwvYm9keT48L2h0bWw+IjsKLQotICAgIC8vIFdlYiBt
b2RlLgotICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X3dlYl92aWV3X2dldF92aWV3X21vZGUo
dGVzdC0+bV93ZWJWaWV3KSwgPT0sIFdFQktJVF9WSUVXX01PREVfV0VCKTsKLSAgICB0ZXN0LT5s
b2FkSHRtbChpbmRleEhUTUwsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgp
OwotICAgIFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5y
dW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoIndpbmRvdy5kb2N1bWVudC5ib2R5LnRl
eHRDb250ZW50OyIsIDApOwotICAgIEdPd25QdHI8Y2hhcj4gdmFsdWVTdHJpbmcoV2ViVmlld1Rl
c3Q6OmphdmFzY3JpcHRSZXN1bHRUb0NTdHJpbmcoamF2YXNjcmlwdFJlc3VsdCkpOwotICAgIGdf
YXNzZXJ0X2NtcHN0cih2YWx1ZVN0cmluZy5nZXQoKSwgPT0sICJUZXN0IFdlYiBWaWV3IE1vZGUi
KTsKLQotICAgIC8vIFNvdXJjZSBtb2RlLgotICAgIHdlYmtpdF93ZWJfdmlld19zZXRfdmlld19t
b2RlKHRlc3QtPm1fd2ViVmlldywgV0VCS0lUX1ZJRVdfTU9ERV9TT1VSQ0UpOwotICAgIHRlc3Qt
PmxvYWRIdG1sKGluZGV4SFRNTCwgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVk
KCk7Ci0gICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50
aWxGaW5pc2hlZCgid2luZG93LmRvY3VtZW50LmJvZHkudGV4dENvbnRlbnQ7IiwgMCk7Ci0gICAg
dmFsdWVTdHJpbmcuc2V0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGph
dmFzY3JpcHRSZXN1bHQpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCks
ID09LCBpbmRleEhUTUwpOwotfQotCi0vLyBUbyB0ZXN0IHBhZ2UgdmlzaWJpbGl0eSBBUEkuIEN1
cnJlbnRseSBvbmx5ICd2aXNpYmxlJyBhbmQgJ2hpZGRlbicgc3RhdGVzIGFyZSBpbXBsZW1lbnRl
ZCBmdWxseSBpbiBXZWJDb3JlLgotLy8gU2VlIGFsc28gaHR0cDovL3d3dy53My5vcmcvVFIvMjAx
MS9XRC1wYWdlLXZpc2liaWxpdHktMjAxMTA2MDIvIGFuZCBodHRwczovL2RldmVsb3BlcnMuZ29v
Z2xlLmNvbS9jaHJvbWUvd2hpdGVwYXBlcnMvcGFnZXZpc2liaWxpdHkKLXN0YXRpYyB2b2lkIHRl
c3RXZWJWaWV3UGFnZVZpc2liaWxpdHkoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIp
Ci17Ci0gICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjx0aXRsZT48L3RpdGxlPiIKLSAgICAgICAg
Ijxib2R5PjxwPlRlc3QgV2ViIFBhZ2UgVmlzaWJpbGl0eTwvcD4iCi0gICAgICAgICI8c2NyaXB0
PiIKLSAgICAgICAgImRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdl
XCIsIG9uVmlzaWJpbGl0eUNoYW5nZSwgZmFsc2UpOyIKLSAgICAgICAgImZ1bmN0aW9uIG9uVmlz
aWJpbGl0eUNoYW5nZSgpIHsiCi0gICAgICAgICIgICAgZG9jdW1lbnQudGl0bGUgPSBkb2N1bWVu
dC52aXNpYmlsaXR5U3RhdGU7IgotICAgICAgICAifSIKLSAgICAgICAgIjwvc2NyaXB0PiIKLSAg
ICAgICAgIjwvYm9keT48L2h0bWw+IiwKLSAgICAgICAgMCk7Ci0KLSAgICAvLyBXYWl0IHVudGls
bCB0aGUgcGFnZSBpcyBsb2FkZWQuIEluaXRpYWwgdmlzaWJpbGl0eSBzaG91bGQgYmUgJ2hpZGRl
bicuCi0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBHT3duUHRyPEdF
cnJvcj4gZXJyb3I7Ci0gICAgV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCogamF2YXNjcmlwdFJlc3Vs
dCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQudmlz
aWJpbGl0eVN0YXRlOyIsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgZ19hc3NlcnQoamF2YXNjcmlw
dFJlc3VsdCk7Ci0gICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKLSAgICBHT3duUHRyPGNoYXI+
IHZhbHVlU3RyaW5nKFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFz
Y3JpcHRSZXN1bHQpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09
LCAiaGlkZGVuIik7Ci0KLSAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlw
dEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVudC5oaWRkZW47IiwgJmVycm9yLm91dFB0cigp
KTsKLSAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBnX2Fzc2VydCghZXJyb3Iu
Z2V0KCkpOwotICAgIGdfYXNzZXJ0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9Cb29s
ZWFuKGphdmFzY3JpcHRSZXN1bHQpKTsKLQotICAgIC8vIFNob3cgdGhlIHBhZ2UuIFRoZSB2aXNp
YmlsaXR5IHNob3VsZCBiZSB1cGRhdGVkIHRvICd2aXNpYmxlJy4KLSAgICB0ZXN0LT5zaG93SW5X
aW5kb3coKTsKLSAgICB0ZXN0LT53YWl0VW50aWxUaXRsZUNoYW5nZWQoKTsKLQotICAgIGphdmFz
Y3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImRv
Y3VtZW50LnZpc2liaWxpdHlTdGF0ZTsiLCAmZXJyb3Iub3V0UHRyKCkpOwotICAgIGdfYXNzZXJ0
KGphdmFzY3JpcHRSZXN1bHQpOwotICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7Ci0gICAgdmFs
dWVTdHJpbmcuc2V0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFz
Y3JpcHRSZXN1bHQpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09
LCAidmlzaWJsZSIpOwotCi0gICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3Jp
cHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQuaGlkZGVuOyIsICZlcnJvci5vdXRQdHIo
KSk7Ci0gICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAgZ19hc3NlcnQoIWVycm9y
LmdldCgpKTsKLSAgICBnX2Fzc2VydCghV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0Jv
b2xlYW4oamF2YXNjcmlwdFJlc3VsdCkpOwotCi0gICAgLy8gSGlkZSB0aGUgcGFnZS4gVGhlIHZp
c2liaWxpdHkgc2hvdWxkIGJlIHVwZGF0ZWQgdG8gJ2hpZGRlbicuCi0gICAgZ3RrX3dpZGdldF9o
aWRlKEdUS19XSURHRVQodGVzdC0+bV93ZWJWaWV3KSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsVGl0
bGVDaGFuZ2VkKCk7Ci0KLSAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlw
dEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU7IiwgJmVycm9y
Lm91dFB0cigpKTsKLSAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBnX2Fzc2Vy
dCghZXJyb3IuZ2V0KCkpOwotICAgIHZhbHVlU3RyaW5nLnNldChXZWJWaWV3VGVzdDo6amF2YXNj
cmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnRfY21w
c3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgImhpZGRlbiIpOwotCi0gICAgamF2YXNjcmlwdFJl
c3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQu
aGlkZGVuOyIsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3Vs
dCk7Ci0gICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKLSAgICBnX2Fzc2VydChXZWJWaWV3VGVz
dDo6amF2YXNjcmlwdFJlc3VsdFRvQm9vbGVhbihqYXZhc2NyaXB0UmVzdWx0KSk7Ci19Ci0KLWNs
YXNzIFNuYXBzaG90V2ViVmlld1Rlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7Ci1wdWJsaWM6Ci0g
ICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShTbmFwc2hvdFdlYlZpZXdUZXN0KTsKLQotICAgIHN0
YXRpYyB2b2lkIG9uU25hcHNob3RDYW5jZWxsZWRSZWFkeShXZWJLaXRXZWJWaWV3KiB3ZWJfdmll
dywgR0FzeW5jUmVzdWx0KiByZXMsIFNuYXBzaG90V2ViVmlld1Rlc3QqIHRlc3QpCi0gICAgewot
ICAgICAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgICAgIHRlc3QtPm1fc3VyZmFjZSA9
IHdlYmtpdF93ZWJfdmlld19nZXRfc25hcHNob3RfZmluaXNoKHdlYl92aWV3LCByZXMsICZlcnJv
ci5vdXRQdHIoKSk7Ci0gICAgICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX3N1cmZhY2UpOwotICAgICAg
ICBnX2Fzc2VydF9lcnJvcihlcnJvci5nZXQoKSwgR19JT19FUlJPUiwgR19JT19FUlJPUl9DQU5D
RUxMRUQpOwotICAgICAgICB0ZXN0LT5xdWl0TWFpbkxvb3AoKTsKLSAgICB9Ci0KLSAgICBnYm9v
bGVhbiBnZXRTbmFwc2hvdEFuZENhbmNlbCgpCi0gICAgewotICAgICAgICBpZiAobV9zdXJmYWNl
KQotICAgICAgICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KG1fc3VyZmFjZSk7Ci0gICAgICAg
IG1fc3VyZmFjZSA9IDA7Ci0gICAgICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBjYW5jZWxsYWJs
ZSA9IGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKTsKLSAgICAgICAgd2Via2l0X3dlYl92
aWV3X2dldF9zbmFwc2hvdChtX3dlYlZpZXcsIFdFQktJVF9TTkFQU0hPVF9SRUdJT05fVklTSUJM
RSwgV0VCS0lUX1NOQVBTSE9UX09QVElPTlNfTk9ORSwgY2FuY2VsbGFibGUuZ2V0KCksIHJlaW50
ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4ob25TbmFwc2hvdENhbmNlbGxlZFJlYWR5
KSwgdGhpcyk7Ci0gICAgICAgIGdfY2FuY2VsbGFibGVfY2FuY2VsKGNhbmNlbGxhYmxlLmdldCgp
KTsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotCi0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotfTsKLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdTbmFwc2hvdChT
bmFwc2hvdFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxv
YWRIdG1sKCI8aHRtbD48Ym9keT48cD5XaGF0ZXZlcjwvcD48L2JvZHk+PC9odG1sPiIsIDApOwot
ICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgLy8gV2ViVmlldyBub3Qg
dmlzaWJsZS4KLSAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UxID0gdGVzdC0+Z2V0U25hcHNo
b3RBbmRXYWl0VW50aWxSZWFkeShXRUJLSVRfU05BUFNIT1RfUkVHSU9OX1ZJU0lCTEUsIFdFQktJ
VF9TTkFQU0hPVF9PUFRJT05TX05PTkUpOwotICAgIGdfYXNzZXJ0KCFzdXJmYWNlMSk7Ci0KLSAg
ICAvLyBTaG93IHN1cmZhY2UsIHJlc2l6ZSB0byA1MHg1MCwgdHJ5IGFnYWluLgotICAgIHRlc3Qt
PnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOwotICAgIHRlc3QtPnJlc2l6ZVZpZXco
NTAsIDUwKTsKLSAgICBzdXJmYWNlMSA9IHRlc3QtPmdldFNuYXBzaG90QW5kV2FpdFVudGlsUmVh
ZHkoV0VCS0lUX1NOQVBTSE9UX1JFR0lPTl9WSVNJQkxFLCBXRUJLSVRfU05BUFNIT1RfT1BUSU9O
U19OT05FKTsKLSAgICBnX2Fzc2VydChzdXJmYWNlMSk7Ci0KLSAgICAvLyBvYnRhaW5lZCBzdXJm
YWNlIHNob3VsZCBiZSBhdCB0aGUgbW9zdCA1MHg1MC4gU3RvcmUgdGhlIHNpemUKLSAgICAvLyBm
b3IgY29tcGFyaXNvbiBsYXRlci4KLSAgICBpbnQgd2lkdGggPSBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF93aWR0aChzdXJmYWNlMSk7Ci0gICAgaW50IGhlaWdodCA9IGNhaXJvX2ltYWdlX3N1cmZh
Y2VfZ2V0X2hlaWdodChzdXJmYWNlMSk7Ci0gICAgZ19hc3NlcnRfY21waW50KHdpZHRoLCA8PSwg
NTApOwotICAgIGdfYXNzZXJ0X2NtcGludChoZWlnaHQsIDw9LCA1MCk7Ci0KLSAgICAvLyBTZWxl
Y3QgYWxsIHRleHQgaW4gdGhlIFdlYlZpZXcsIHJlcXVlc3QgYSBzbmFwc2hvdCBpZ25vcmluZyBz
ZWxlY3Rpb24uCi0gICAgdGVzdC0+c2VsZWN0QWxsKCk7Ci0gICAgc3VyZmFjZTEgPSBjYWlyb19z
dXJmYWNlX3JlZmVyZW5jZSh0ZXN0LT5nZXRTbmFwc2hvdEFuZFdhaXRVbnRpbFJlYWR5KFdFQktJ
VF9TTkFQU0hPVF9SRUdJT05fVklTSUJMRSwgV0VCS0lUX1NOQVBTSE9UX09QVElPTlNfTk9ORSkp
OwotICAgIGdfYXNzZXJ0KHN1cmZhY2UxKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZTEpLCA9PSwgd2lkdGgpOwotICAgIGdfYXNzZXJ0
X2NtcGludChjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZTEpLCA9PSwgaGVp
Z2h0KTsKLQotICAgIC8vIENyZWF0ZSBpZGVudGljYWwgc3VyZmFjZS4KLSAgICBjYWlyb19zdXJm
YWNlX3QqIHN1cmZhY2UyID0gdGVzdC0+Z2V0U25hcHNob3RBbmRXYWl0VW50aWxSZWFkeShXRUJL
SVRfU05BUFNIT1RfUkVHSU9OX1ZJU0lCTEUsIFdFQktJVF9TTkFQU0hPVF9PUFRJT05TX05PTkUp
OwotICAgIGdfYXNzZXJ0KHN1cmZhY2UyKTsKLQotICAgIC8vIENvbXBhcmUgdGhlc2UgdHdvLCB0
aGV5IHNob3VsZCBiZSBpZGVudGljYWwuCi0gICAgZ19hc3NlcnQoVGVzdDo6Y2Fpcm9TdXJmYWNl
c0VxdWFsKHN1cmZhY2UxLCBzdXJmYWNlMikpOwotCi0gICAgLy8gUmVxdWVzdCBhIG5ldyBzbmFw
c2hvdCwgaW5jbHVkaW5nIHRoZSBzZWxlY3Rpb24gdGhpcyB0aW1lLiBUaGUKLSAgICAvLyBzaXpl
IHNob3VsZCBiZSB0aGUgc2FtZSBidXQgdGhlIHJlc3VsdCBtdXN0IGJlIGRpZmZlcmVudCB0byB0
aGUKLSAgICAvLyBvbmUgcHJldmlvdXNseSBvYnRhaW5lZC4KLSAgICBzdXJmYWNlMiA9IHRlc3Qt
PmdldFNuYXBzaG90QW5kV2FpdFVudGlsUmVhZHkoV0VCS0lUX1NOQVBTSE9UX1JFR0lPTl9WSVNJ
QkxFLCBXRUJLSVRfU05BUFNIT1RfT1BUSU9OU19JTkNMVURFX1NFTEVDVElPTl9ISUdITElHSFRJ
TkcpOwotICAgIGdfYXNzZXJ0KHN1cmZhY2UyKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZTIpLCA9PSwgd2lkdGgpOwotICAgIGdfYXNz
ZXJ0X2NtcGludChjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZTIpLCA9PSwg
aGVpZ2h0KTsKLSAgICBnX2Fzc2VydCghVGVzdDo6Y2Fpcm9TdXJmYWNlc0VxdWFsKHN1cmZhY2Ux
LCBzdXJmYWNlMikpOwotCi0gICAgLy8gUmVxdWVzdCBhIHNuYXBzaG90IG9mIHRoZSB3aG9sZSBk
b2N1bWVudCBpbiB0aGUgV2ViVmlldy4gVGhlCi0gICAgLy8gcmVzdWx0IHNob3VsZCBiZSBkaWZm
ZXJlbnQgZnJvbSB0aGUgc2l6ZSBvYnRhaW5lZCBwcmV2aW91c2x5LgotICAgIHN1cmZhY2UyID0g
dGVzdC0+Z2V0U25hcHNob3RBbmRXYWl0VW50aWxSZWFkeShXRUJLSVRfU05BUFNIT1RfUkVHSU9O
X0ZVTExfRE9DVU1FTlQsIFdFQktJVF9TTkFQU0hPVF9PUFRJT05TX05PTkUpOwotICAgIGdfYXNz
ZXJ0KHN1cmZhY2UyKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfd2lkdGgoc3VyZmFjZTIpLCAgPiwgd2lkdGgpOwotICAgIGdfYXNzZXJ0X2NtcGludChjYWly
b19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZTIpLCA+LCBoZWlnaHQpOwotICAgIGdf
YXNzZXJ0KCFUZXN0OjpjYWlyb1N1cmZhY2VzRXF1YWwoc3VyZmFjZTEsIHN1cmZhY2UyKSk7Ci0K
LSAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koc3VyZmFjZTEpOwotCi0gICAgZ19hc3NlcnQodGVz
dC0+Z2V0U25hcHNob3RBbmRDYW5jZWwoKSk7Ci19Ci0KLXZvaWQgYmVmb3JlQWxsKCkKLXsKLSAg
ICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImRlZmF1bHQtY29udGV4dCIsIHRl
c3RXZWJWaWV3RGVmYXVsdENvbnRleHQpOwotICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdl
YlZpZXciLCAiY3VzdG9tLWNoYXJzZXQiLCB0ZXN0V2ViVmlld0N1c3RvbUNoYXJzZXQpOwotICAg
IFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAic2V0dGluZ3MiLCB0ZXN0V2ViVmll
d1NldHRpbmdzKTsKLSAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInpvb20t
bGV2ZWwiLCB0ZXN0V2ViVmlld1pvb21MZXZlbCk7Ci0gICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2Vi
S2l0V2ViVmlldyIsICJydW4tamF2YXNjcmlwdCIsIHRlc3RXZWJWaWV3UnVuSmF2YVNjcmlwdCk7
Ci0gICAgRnVsbFNjcmVlbkNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJmdWxsc2Ny
ZWVuIiwgdGVzdFdlYlZpZXdGdWxsU2NyZWVuKTsKLSAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJL
aXRXZWJWaWV3IiwgImNhbi1zaG93LW1pbWUtdHlwZSIsIHRlc3RXZWJWaWV3Q2FuU2hvd01JTUVU
eXBlKTsKLSAgICBGb3JtQ2xpZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInN1Ym1pdC1m
b3JtIiwgdGVzdFdlYlZpZXdTdWJtaXRGb3JtKTsKLSAgICBTYXZlV2ViVmlld1Rlc3Q6OmFkZCgi
V2ViS2l0V2ViVmlldyIsICJzYXZlIiwgdGVzdFdlYlZpZXdTYXZlKTsKLSAgICBXZWJWaWV3VGVz
dDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInZpZXctbW9kZSIsIHRlc3RXZWJWaWV3TW9kZSk7Ci0g
ICAgU25hcHNob3RXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInNuYXBzaG90Iiwg
dGVzdFdlYlZpZXdTbmFwc2hvdCk7Ci0gICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmll
dyIsICJwYWdlLXZpc2liaWxpdHkiLCB0ZXN0V2ViVmlld1BhZ2VWaXNpYmlsaXR5KTsKLX0KLQot
dm9pZCBhZnRlckFsbCgpCi17Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlld0dyb3VwLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3R3JvdXAuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjZjNWM1Li4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3R3JvdXAu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjA2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24g
MiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIldlYktp
dFRlc3RTZXJ2ZXIuaCIKLSNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgotI2luY2x1ZGUgPGNzdGRh
cmc+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgot
I2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLQotc3RhdGljIFdlYktpdFRlc3RTZXJ2
ZXIqIGtTZXJ2ZXI7Ci0KLS8vIFRoZXNlIGFyZSBhbGwgaGVyZSBzbyB0aGF0IHRoZXkgY2FuIGJl
IGNoYW5nZWQgZWFzaWx5LCBpZiBuZWNlc3NhcnkuCi1zdGF0aWMgY29uc3QgY2hhcioga1N0eWxl
U2hlZXRIVE1MID0gIjxodG1sPjxkaXYgaWQ9XCJzdHlsZWRFbGVtZW50XCI+U3dlZXQgc3R5bGV6
ITwvZGl2PjwvaHRtbD4iOwotc3RhdGljIGNvbnN0IGNoYXIqIGtJbmplY3RlZFN0eWxlU2hlZXQg
PSAiI3N0eWxlZEVsZW1lbnQgeyBmb250LXdlaWdodDogYm9sZDsgfSI7Ci1zdGF0aWMgY29uc3Qg
Y2hhcioga1N0eWxlU2hlZXRUZXN0U2NyaXB0ID0gImdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ3N0eWxlZEVsZW1lbnQnKSlbJ2ZvbnQtd2VpZ2h0J10iOwotc3RhdGlj
IGNvbnN0IGNoYXIqIGtTdHlsZVNoZWV0VGVzdFNjcmlwdFJlc3VsdCA9ICJib2xkIjsKLQotc3Rh
dGljIHZvaWQgdGVzdFdlYlZpZXdHcm91cERlZmF1bHQoVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRl
cikKLXsKLSAgICAvLyBEZWZhdWx0IGdyb3VwIGlzIHNoYXJlZCBieSBhbGwgV2ViVmlld3MgYnkg
ZGVmYXVsdC4KLSAgICBHUmVmUHRyPFdlYktpdFdlYlZpZXc+IHdlYlZpZXcxID0gV0VCS0lUX1dF
Ql9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3
PiB3ZWJWaWV3MiA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAg
IGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19nZXRfZ3JvdXAod2ViVmlldzEuZ2V0KCkpID09IHdl
YmtpdF93ZWJfdmlld19nZXRfZ3JvdXAod2ViVmlldzIuZ2V0KCkpKTsKLQotICAgIC8vIFNldHRp
bmdzIGFyZSBzaGFyZWQgYnkgYWxsIHdlYiB2aWV3IGluIHRoZSBzYW1lIGdyb3VwLgotICAgIGdf
YXNzZXJ0KHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmlldzEuZ2V0KCkpID09IHdl
YmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmlldzIuZ2V0KCkpKTsKLSAgICBnX2Fzc2Vy
dCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdlYlZpZXcxLmdldCgpKSA9PSB3ZWJraXRf
d2ViX3ZpZXdfZ3JvdXBfZ2V0X3NldHRpbmdzKHdlYmtpdF93ZWJfdmlld19nZXRfZ3JvdXAod2Vi
VmlldzIuZ2V0KCkpKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3R3JvdXBOZXdHcm91
cChUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIC8vIFBhc3NpbmcgMCBhcyBncm91
cCBuYW1lIGdlbmVyYXRlcyB0aGUgbmFtZSBhdXRvbWF0aWNhbGx5LgotICAgIEdSZWZQdHI8V2Vi
S2l0V2ViVmlld0dyb3VwPiB2aWV3R3JvdXAxID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJfdmlld19n
cm91cF9uZXcoMCkpOwotICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0Rmlu
aXNoZXMoR19PQkpFQ1Qodmlld0dyb3VwMS5nZXQoKSkpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF93
ZWJfdmlld19ncm91cF9nZXRfbmFtZSh2aWV3R3JvdXAxLmdldCgpKSk7Ci0KLSAgICAvLyBOZXcg
Z3JvdXAgd2l0aCBhIGdpdmVuIG5hbWUuCi0gICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3R3JvdXA+
IHZpZXdHcm91cDIgPSBhZG9wdEdSZWYod2Via2l0X3dlYl92aWV3X2dyb3VwX25ldygiVGVzdEdy
b3VwMiIpKTsKLSAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVz
KEdfT0JKRUNUKHZpZXdHcm91cDIuZ2V0KCkpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0
X3dlYl92aWV3X2dyb3VwX2dldF9uYW1lKHZpZXdHcm91cDIuZ2V0KCkpLCA9PSwgIlRlc3RHcm91
cDIiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dyb3VwX2dldF9uYW1l
KHZpZXdHcm91cDIuZ2V0KCkpLCAhPSwgd2Via2l0X3dlYl92aWV3X2dyb3VwX2dldF9uYW1lKHZp
ZXdHcm91cDEuZ2V0KCkpKTsKLQotICAgIC8vIEV2ZXJ5IGdyb3VwIGhhcyBpdHMgb3duIHNldHRp
bmdzLgotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19ncm91cF9nZXRfc2V0dGluZ3Modmll
d0dyb3VwMS5nZXQoKSkgIT0gd2Via2l0X3dlYl92aWV3X2dyb3VwX2dldF9zZXR0aW5ncyh2aWV3
R3JvdXAyLmdldCgpKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3TmV3V2l0aEdyb3Vw
KFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3
R3JvdXA+IHZpZXdHcm91cDEgPSBhZG9wdEdSZWYod2Via2l0X3dlYl92aWV3X2dyb3VwX25ldygi
VGVzdEdyb3VwMSIpKTsKLSAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZp
bmlzaGVzKEdfT0JKRUNUKHZpZXdHcm91cDEuZ2V0KCkpKTsKLSAgICBHUmVmUHRyPFdlYktpdFdl
YlZpZXc+IHdlYlZpZXcxID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXdfd2l0
aF9ncm91cCh2aWV3R3JvdXAxLmdldCgpKSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3
X2dldF9ncm91cCh3ZWJWaWV3MS5nZXQoKSkgPT0gdmlld0dyb3VwMS5nZXQoKSk7Ci0KLSAgICBH
UmVmUHRyPFdlYktpdFdlYlZpZXc+IHdlYlZpZXcyID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93
ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dldF9ncm91cCh3
ZWJWaWV3Mi5nZXQoKSkgIT0gdmlld0dyb3VwMS5nZXQoKSk7Ci0KLSAgICAvLyBTZXR0aW5ncyBz
aG91bGQgYmUgZGlmZmVyZW50IGZvciB2aWV3cyBpbiBkaWZmZXJlbnQgZ3JvdXBzLgotICAgIGdf
YXNzZXJ0KHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmlldzEuZ2V0KCkpICE9IHdl
YmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmlldzIuZ2V0KCkpKTsKLX0KLQotc3RhdGlj
IHZvaWQgdGVzdFdlYlZpZXdHcm91cFNldHRpbmdzKFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIp
Ci17Ci0gICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3R3JvdXA+IHZpZXdHcm91cDEgPSBhZG9wdEdS
ZWYod2Via2l0X3dlYl92aWV3X2dyb3VwX25ldygiVGVzdEdyb3VwMSIpKTsKLSAgICB0ZXN0LT5h
c3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHZpZXdHcm91cDEu
Z2V0KCkpKTsKLSAgICBHUmVmUHRyPFdlYktpdFNldHRpbmdzPiBuZXdTZXR0aW5ncyA9IGFkb3B0
R1JlZih3ZWJraXRfc2V0dGluZ3NfbmV3X3dpdGhfc2V0dGluZ3MoImVuYWJsZS1qYXZhc2NyaXB0
IiwgRkFMU0UsIE5VTEwpKTsKLSAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVz
dEZpbmlzaGVzKEdfT0JKRUNUKG5ld1NldHRpbmdzLmdldCgpKSk7Ci0gICAgd2Via2l0X3dlYl92
aWV3X2dyb3VwX3NldF9zZXR0aW5ncyh2aWV3R3JvdXAxLmdldCgpLCBuZXdTZXR0aW5ncy5nZXQo
KSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dyb3VwX2dldF9zZXR0aW5ncyh2aWV3
R3JvdXAxLmdldCgpKSA9PSBuZXdTZXR0aW5ncy5nZXQoKSk7Ci0KLSAgICBHUmVmUHRyPFdlYktp
dFdlYlZpZXc+IHdlYlZpZXcxID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXdf
d2l0aF9ncm91cCh2aWV3R3JvdXAxLmdldCgpKSk7Ci0gICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3
PiB3ZWJWaWV3MiA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAg
IFdlYktpdFNldHRpbmdzKiB3ZWJWaWV3MVNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9z
ZXR0aW5ncyh3ZWJWaWV3MS5nZXQoKSk7Ci0gICAgV2ViS2l0U2V0dGluZ3MqIHdlYlZpZXcyU2V0
dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdlYlZpZXcyLmdldCgpKTsKLSAg
ICBnX2Fzc2VydCh3ZWJWaWV3MVNldHRpbmdzICE9IHdlYlZpZXcyU2V0dGluZ3MpOwotICAgIGdf
YXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2phdmFzY3JpcHQod2ViVmlldzFTZXR0
aW5ncykgIT0gd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfamF2YXNjcmlwdCh3ZWJWaWV3MlNl
dHRpbmdzKSk7Ci0KLSAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X3NldHRpbmdzKHdlYlZpZXcxLmdl
dCgpLCB3ZWJWaWV3MlNldHRpbmdzKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ2V0
X3NldHRpbmdzKHdlYlZpZXcxLmdldCgpKSA9PSB3ZWJWaWV3MlNldHRpbmdzKTsKLSAgICBnX2Fz
c2VydCh3ZWJraXRfd2ViX3ZpZXdfZ3JvdXBfZ2V0X3NldHRpbmdzKHdlYmtpdF93ZWJfdmlld19n
ZXRfZ3JvdXAod2ViVmlldzEuZ2V0KCkpKSA9PSB3ZWJWaWV3MlNldHRpbmdzKTsKLX0KLQotc3Rh
dGljIGJvb2wgaXNTdHlsZVNoZWV0SW5qZWN0ZWRGb3JVUkxBdFBhdGgoV2ViVmlld1Rlc3QqIHRl
c3QsIGNvbnN0IGNoYXIqIHBhdGgpCi17Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRV
UklGb3JQYXRoKHBhdGgpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVk
KCk7Ci0KLSAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgV2ViS2l0SmF2YXNjcmlwdFJl
c3VsdCogamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxG
aW5pc2hlZChrU3R5bGVTaGVldFRlc3RTY3JpcHQsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgZ19h
c3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKLQot
ICAgIEdPd25QdHI8Y2hhcj4gcmVzdWx0U3RyaW5nKFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVz
dWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKLSAgICByZXR1cm4gIWdfc3RyY21wMChy
ZXN1bHRTdHJpbmcuZ2V0KCksIGtTdHlsZVNoZWV0VGVzdFNjcmlwdFJlc3VsdCk7Ci19Ci0KLXN0
YXRpYyB2b2lkIGZpbGxVUkxMaXN0RnJvbVBhdGhzKGNoYXIqKiBsaXN0LCBjb25zdCBjaGFyKiBw
YXRoLCAuLi4pCi17Ci0gICAgdmFfbGlzdCBhcmd1bWVudExpc3Q7Ci0gICAgdmFfc3RhcnQoYXJn
dW1lbnRMaXN0LCBwYXRoKTsKLQotICAgIGludCBpID0gMDsKLSAgICB3aGlsZSAocGF0aCkgewot
ICAgICAgICAvLyBGSVhNRTogV2UgbXVzdCB1c2UgYSB3aWxkY2FyZCBmb3IgdGhlIGhvc3QgaGVy
ZSB1bnRpbCBodHRwOi8vd2tidWcuY29tLzExMjQ3NiBpcyBmaXhlZC4KLSAgICAgICAgLy8gVW50
aWwgdGhhdCB0aW1lIHBhdHRlcm5zIHdpdGggcG9ydCBudW1iZXJzIGluIHRoZW0gd2lsbCBub3Qg
cHJvcGVybHkgbWF0Y2ggVVJMcyB3aXRoIHBvcnQgbnVtYmVycy4KLSAgICAgICAgbGlzdFtpKytd
ID0gZ19zdHJkdXBfcHJpbnRmKCJodHRwOi8vKi8lcyoiLCBwYXRoKTsKLSAgICAgICAgcGF0aCA9
IHZhX2FyZyhhcmd1bWVudExpc3QsIGNvbnN0IGNoYXIqKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2
b2lkIHJlbW92ZU9sZEluamVjdGVkU3R5bGVTaGVldHNBbmRSZXNldExpc3RzKFdlYktpdFdlYlZp
ZXdHcm91cCogZ3JvdXAsIGNoYXIqKiB3aGl0ZWxpc3QsIGNoYXIqKiBibGFja2xpc3QpCi17Ci0g
ICAgd2Via2l0X3dlYl92aWV3X2dyb3VwX3JlbW92ZV9hbGxfdXNlcl9zdHlsZV9zaGVldHMoZ3Jv
dXApOwotCi0gICAgd2hpbGUgKCp3aGl0ZWxpc3QpIHsKLSAgICAgICAgZ19mcmVlKCp3aGl0ZWxp
c3QpOwotICAgICAgICAqd2hpdGVsaXN0ID0gMDsKLSAgICAgICAgd2hpdGVsaXN0Kys7Ci0gICAg
fQotCi0gICAgd2hpbGUgKCpibGFja2xpc3QpIHsKLSAgICAgICAgZ19mcmVlKCpibGFja2xpc3Qp
OwotICAgICAgICAqYmxhY2tsaXN0ID0gMDsKLSAgICAgICAgYmxhY2tsaXN0Kys7Ci0gICAgfQot
fQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0dyb3VwSW5qZWN0ZWRTdHlsZVNoZWV0KFdlYlZp
ZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIFdlYktpdFdlYlZpZXdHcm91cCog
Z3JvdXAgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2dyb3VwKHRlc3QtPm1fd2ViVmlldyk7Ci0gICAg
Y2hhciogd2hpdGVsaXN0WzNdID0geyAwLCAwLCAwIH07Ci0gICAgY2hhciogYmxhY2tsaXN0WzNd
ID0geyAwLCAwLCAwIH07Ci0KLSAgICByZW1vdmVPbGRJbmplY3RlZFN0eWxlU2hlZXRzQW5kUmVz
ZXRMaXN0cyhncm91cCwgd2hpdGVsaXN0LCBibGFja2xpc3QpOwotCi0gICAgLy8gV2l0aG91dCBh
IHdoaXRlbGlzdCBvciBhIGJsYWNrbGlzdCBhbGwgVVJMcyBzaG91bGQgaGF2ZSB0aGUgaW5qZWN0
ZWQgc3R5bGUgc2hlZXQuCi0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHJhbmRvbVBhdGggPSAic29t
ZXJhbmRvbXBhdGgiOwotICAgIGdfYXNzZXJ0KCFpc1N0eWxlU2hlZXRJbmplY3RlZEZvclVSTEF0
UGF0aCh0ZXN0LCByYW5kb21QYXRoKSk7Ci0gICAgd2Via2l0X3dlYl92aWV3X2dyb3VwX2FkZF91
c2VyX3N0eWxlX3NoZWV0KGdyb3VwLCBrSW5qZWN0ZWRTdHlsZVNoZWV0LCAwLCAwLCAwLCBXRUJL
SVRfSU5KRUNURURfQ09OVEVOVF9GUkFNRVNfQUxMKTsKLSAgICBnX2Fzc2VydChpc1N0eWxlU2hl
ZXRJbmplY3RlZEZvclVSTEF0UGF0aCh0ZXN0LCByYW5kb21QYXRoKSk7Ci0KLSAgICByZW1vdmVP
bGRJbmplY3RlZFN0eWxlU2hlZXRzQW5kUmVzZXRMaXN0cyhncm91cCwgd2hpdGVsaXN0LCBibGFj
a2xpc3QpOwotCi0gICAgZmlsbFVSTExpc3RGcm9tUGF0aHMoYmxhY2tsaXN0LCByYW5kb21QYXRo
LCAwKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfZ3JvdXBfYWRkX3VzZXJfc3R5bGVfc2hlZXQoZ3Jv
dXAsIGtJbmplY3RlZFN0eWxlU2hlZXQsIDAsIDAsIGJsYWNrbGlzdCwgV0VCS0lUX0lOSkVDVEVE
X0NPTlRFTlRfRlJBTUVTX0FMTCk7Ci0gICAgZ19hc3NlcnQoIWlzU3R5bGVTaGVldEluamVjdGVk
Rm9yVVJMQXRQYXRoKHRlc3QsIHJhbmRvbVBhdGgpKTsKLSAgICBnX2Fzc2VydChpc1N0eWxlU2hl
ZXRJbmplY3RlZEZvclVSTEF0UGF0aCh0ZXN0LCAic29tZW90aGVycmFuZG9tcGF0aCIpKTsKLQot
ICAgIHJlbW92ZU9sZEluamVjdGVkU3R5bGVTaGVldHNBbmRSZXNldExpc3RzKGdyb3VwLCB3aGl0
ZWxpc3QsIGJsYWNrbGlzdCk7Ci0KLSAgICBzdGF0aWMgY29uc3QgY2hhciogaW5UaGVXaGl0ZUxp
c3QgPSAiaW50aGV3aGl0ZWxpc3QiOwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBub3RJbldoaXRl
bGlzdCA9ICJub3RpbnRoZXdoaXRlbGlzdCI7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGluVGhl
V2hpdGVMaXN0QW5kQmxhY2tMaXN0ID0gImludGhld2hpdGVsaXN0YW5kYmxhY2tsaXN0IjsKLQot
ICAgIGZpbGxVUkxMaXN0RnJvbVBhdGhzKHdoaXRlbGlzdCwgaW5UaGVXaGl0ZUxpc3QsIGluVGhl
V2hpdGVMaXN0QW5kQmxhY2tMaXN0LCAwKTsKLSAgICBmaWxsVVJMTGlzdEZyb21QYXRocyhibGFj
a2xpc3QsIGluVGhlV2hpdGVMaXN0QW5kQmxhY2tMaXN0LCAwKTsKLSAgICB3ZWJraXRfd2ViX3Zp
ZXdfZ3JvdXBfYWRkX3VzZXJfc3R5bGVfc2hlZXQoZ3JvdXAsIGtJbmplY3RlZFN0eWxlU2hlZXQs
IDAsIHdoaXRlbGlzdCwgYmxhY2tsaXN0LCBXRUJLSVRfSU5KRUNURURfQ09OVEVOVF9GUkFNRVNf
QUxMKTsKLSAgICBnX2Fzc2VydChpc1N0eWxlU2hlZXRJbmplY3RlZEZvclVSTEF0UGF0aCh0ZXN0
LCBpblRoZVdoaXRlTGlzdCkpOwotICAgIGdfYXNzZXJ0KCFpc1N0eWxlU2hlZXRJbmplY3RlZEZv
clVSTEF0UGF0aCh0ZXN0LCBpblRoZVdoaXRlTGlzdEFuZEJsYWNrTGlzdCkpOwotICAgIGdfYXNz
ZXJ0KCFpc1N0eWxlU2hlZXRJbmplY3RlZEZvclVSTEF0UGF0aCh0ZXN0LCBub3RJbldoaXRlbGlz
dCkpOwotCi0gICAgLy8gSXQncyBpbXBvcnRhbnQgdG8gY2xlYW4gdXAgdGhlIGVudmlyb25tZW50
IGJlZm9yZSBvdGhlciB0ZXN0cy4KLSAgICByZW1vdmVPbGRJbmplY3RlZFN0eWxlU2hlZXRzQW5k
UmVzZXRMaXN0cyhncm91cCwgd2hpdGVsaXN0LCBibGFja2xpc3QpOwotfQotCi1zdGF0aWMgdm9p
ZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtZXNzYWdl
LCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiwgU291cENsaWVudENvbnRleHQqLCBncG9p
bnRlcikKLXsKLSAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRV
U19PSyk7Ci0gICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2Jv
ZHksIFNPVVBfTUVNT1JZX1NUQVRJQywga1N0eWxlU2hlZXRIVE1MLCBzdHJsZW4oa1N0eWxlU2hl
ZXRIVE1MKSk7Ci0gICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9u
c2VfYm9keSk7Ci19Ci0KLXZvaWQgYmVmb3JlQWxsKCkKLXsKLSAgICBrU2VydmVyID0gbmV3IFdl
YktpdFRlc3RTZXJ2ZXIoKTsKLSAgICBrU2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2spOwotCi0g
ICAgVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3R3JvdXAiLCAiZGVmYXVsdC1ncm91cCIsIHRlc3RX
ZWJWaWV3R3JvdXBEZWZhdWx0KTsKLSAgICBUZXN0OjphZGQoIldlYktpdFdlYlZpZXdHcm91cCIs
ICJuZXctZ3JvdXAiLCB0ZXN0V2ViVmlld0dyb3VwTmV3R3JvdXApOwotICAgIFRlc3Q6OmFkZCgi
V2ViS2l0V2ViVmlldyIsICJuZXctd2l0aC1ncm91cCIsIHRlc3RXZWJWaWV3TmV3V2l0aEdyb3Vw
KTsKLSAgICBUZXN0OjphZGQoIldlYktpdFdlYlZpZXdHcm91cCIsICJzZXR0aW5ncyIsIHRlc3RX
ZWJWaWV3R3JvdXBTZXR0aW5ncyk7Ci0gICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmll
d0dyb3VwIiwgImluamVjdGVkLXN0eWxlLXNoZWV0IiwgdGVzdFdlYlZpZXdHcm91cEluamVjdGVk
U3R5bGVTaGVldCk7Ci19Ci0KLXZvaWQgYWZ0ZXJBbGwoKQotewotICAgIGRlbGV0ZSBrU2VydmVy
OwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
VGVzdFdlYlZpZXdFZGl0b3IuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvVGVzdFdlYlZpZXdFZGl0b3IuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA5MzMxNWRiLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL1Rlc3RXZWJWaWV3RWRpdG9yLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIwMiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9H
UmVmUHRyLmg+Ci0KLWNsYXNzIEVkaXRvclRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7Ci1wdWJs
aWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShFZGl0b3JUZXN0KTsKLQotICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBpbnQga0NsaXBib2FyZFdhaXRUaW1lb3V0ID0gNTA7Ci0gICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIGludCBrQ2xpcGJvYXJkV2FpdE1heFRyaWVzID0gMjsKLQotICAg
IEVkaXRvclRlc3QoKQotICAgICAgICA6IG1fY2xpcGJvYXJkKGd0a19jbGlwYm9hcmRfZ2V0KEdE
S19TRUxFQ1RJT05fQ0xJUEJPQVJEKSkKLSAgICAgICAgLCBtX2NhbkV4ZWN1dGVFZGl0aW5nQ29t
bWFuZChmYWxzZSkKLSAgICAgICAgLCBtX3RyaWVzQ291bnQoMCkKLSAgICB7Ci0gICAgICAgIGd0
a19jbGlwYm9hcmRfY2xlYXIobV9jbGlwYm9hcmQpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lk
IGNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZFJlYWR5Q2FsbGJhY2soR09iamVjdCosIEdBc3luY1Jl
c3VsdCogcmVzdWx0LCBFZGl0b3JUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgR093blB0cjxH
RXJyb3I+IGVycm9yOwotICAgICAgICB0ZXN0LT5tX2NhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZCA9
IHdlYmtpdF93ZWJfdmlld19jYW5fZXhlY3V0ZV9lZGl0aW5nX2NvbW1hbmRfZmluaXNoKHRlc3Qt
Pm1fd2ViVmlldywgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpOwotICAgICAgICBnX2Fzc2VydCgh
ZXJyb3IuZ2V0KCkpOwotICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3Ap
OwotICAgIH0KLQotICAgIGJvb2wgY2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kKGNvbnN0IGNoYXIq
IGNvbW1hbmQpCi0gICAgewotICAgICAgICBtX2NhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZCA9IGZh
bHNlOwotICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfY2FuX2V4ZWN1dGVfZWRpdGluZ19jb21tYW5k
KG1fd2ViVmlldywgY29tbWFuZCwgMCwgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxi
YWNrPihjYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmRSZWFkeUNhbGxiYWNrKSwgdGhpcyk7Ci0gICAg
ICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAgICAgICAgcmV0dXJuIG1fY2FuRXhl
Y3V0ZUVkaXRpbmdDb21tYW5kOwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiB3YWl0Rm9y
Q2xpcGJvYXJkVGV4dChFZGl0b3JUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+bV90
cmllc0NvdW50Kys7Ci0gICAgICAgIGlmIChndGtfY2xpcGJvYXJkX3dhaXRfaXNfdGV4dF9hdmFp
bGFibGUodGVzdC0+bV9jbGlwYm9hcmQpIHx8IHRlc3QtPm1fdHJpZXNDb3VudCA+IGtDbGlwYm9h
cmRXYWl0TWF4VHJpZXMpIHsKLSAgICAgICAgICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9t
YWluTG9vcCk7Ci0gICAgICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICAgIH0KLQotICAgICAg
ICByZXR1cm4gVFJVRTsKLSAgICB9Ci0KLSAgICB2b2lkIGNvcHlDbGlwYm9hcmQoKQotICAgIHsK
LSAgICAgICAgd2Via2l0X3dlYl92aWV3X2V4ZWN1dGVfZWRpdGluZ19jb21tYW5kKG1fd2ViVmll
dywgV0VCS0lUX0VESVRJTkdfQ09NTUFORF9DT1BZKTsKLSAgICAgICAgLy8gVGhlcmUncyBubyB3
YXkgdG8ga25vdyB3aGVuIHRoZSBzZWxlY3Rpb24gaGFzIGJlZW4gY29waWVkIHRvCi0gICAgICAg
IC8vIHRoZSBjbGlwYm9hcmQsIHNvIHVzZSBhIHRpbWVvdXQgc291cmNlIHRvIHF1ZXJ5IHRoZSBj
bGlwYm9hcmQuCi0gICAgICAgIG1fdHJpZXNDb3VudCA9IDA7Ci0gICAgICAgIGdfdGltZW91dF9h
ZGQoa0NsaXBib2FyZFdhaXRUaW1lb3V0LCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPih3
YWl0Rm9yQ2xpcGJvYXJkVGV4dCksIHRoaXMpOwotICAgICAgICBnX21haW5fbG9vcF9ydW4obV9t
YWluTG9vcCk7Ci0gICAgfQotCi0gICAgR3RrQ2xpcGJvYXJkKiBtX2NsaXBib2FyZDsKLSAgICBi
b29sIG1fY2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kOwotICAgIHNpemVfdCBtX3RyaWVzQ291bnQ7
Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0VkaXRvckN1dENvcHlQYXN0ZU5vbkVkaXRh
YmxlKEVkaXRvclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgc3RhdGljIGNvbnN0
IGNoYXIqIHNlbGVjdGVkU3BhbkhUTUwgPSAiPGh0bWw+PGJvZHkgY29udGVudEVkaXRhYmxlPVwi
ZmFsc2VcIj4iCi0gICAgICAgICI8c3BhbiBpZD1cIm1haW5zcGFuXCI+QWxsIHdvcmsgYW5kIG5v
IHBsYXkgPHNwYW4gaWQ9XCJzdWJzcGFuXCI+bWFrZSBKYWNrIGEgZHVsbDwvc3Bhbj4gYm95Ljwv
c3Bhbj4iCi0gICAgICAgICI8c2NyaXB0PmRvY3VtZW50LmdldFNlbGVjdGlvbigpLmNvbGxhcHNl
KCk7XG4iCi0gICAgICAgICJkb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJl
bihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3Vic3BhbicpKTtcbiIKLSAgICAgICAgIjwvc2Ny
aXB0PjwvYm9keT48L2h0bWw+IjsKLQotICAgIC8vIE5vdGhpbmcgbG9hZGVkIHlldC4KLSAgICBn
X2Fzc2VydCghdGVzdC0+Y2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kKFdFQktJVF9FRElUSU5HX0NP
TU1BTkRfQ1VUKSk7Ci0gICAgZ19hc3NlcnQoIXRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFu
ZChXRUJLSVRfRURJVElOR19DT01NQU5EX0NPUFkpKTsKLSAgICBnX2Fzc2VydCghdGVzdC0+Y2Fu
RXhlY3V0ZUVkaXRpbmdDb21tYW5kKFdFQktJVF9FRElUSU5HX0NPTU1BTkRfUEFTVEUpKTsKLQot
ICAgIHRlc3QtPmxvYWRIdG1sKHNlbGVjdGVkU3BhbkhUTUwsIDApOwotICAgIHRlc3QtPndhaXRV
bnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3NlcnQodGVzdC0+Y2FuRXhlY3V0ZUVkaXRp
bmdDb21tYW5kKFdFQktJVF9FRElUSU5HX0NPTU1BTkRfQ09QWSkpOwotICAgIC8vIEl0J3Mgbm90
IHBvc3NpYmxlIHRvIGN1dCBhbmQgcGFzdGUgd2hlbiBjb250ZW50IGlzIG5vdCBlZGl0YWJsZQot
ICAgIC8vIGV2ZW4gaWYgdGhlcmUncyBhIHNlbGVjdGlvbi4KLSAgICBnX2Fzc2VydCghdGVzdC0+
Y2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kKFdFQktJVF9FRElUSU5HX0NPTU1BTkRfQ1VUKSk7Ci0g
ICAgZ19hc3NlcnQoIXRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElO
R19DT01NQU5EX1BBU1RFKSk7Ci0KLSAgICB0ZXN0LT5jb3B5Q2xpcGJvYXJkKCk7Ci0gICAgR093
blB0cjxjaGFyPiBjbGlwYm9hcmRUZXh0KGd0a19jbGlwYm9hcmRfd2FpdF9mb3JfdGV4dCh0ZXN0
LT5tX2NsaXBib2FyZCkpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihjbGlwYm9hcmRUZXh0LmdldCgp
LCA9PSwgIm1ha2UgSmFjayBhIGR1bGwiKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdF
ZGl0b3JDdXRDb3B5UGFzdGVFZGl0YWJsZShFZGl0b3JUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVy
KQotewotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzZWxlY3RlZFNwYW5IVE1MID0gIjxodG1sPjxi
b2R5IGNvbnRlbnRFZGl0YWJsZT1cInRydWVcIj4iCi0gICAgICAgICI8c3BhbiBpZD1cIm1haW5z
cGFuXCI+QWxsIHdvcmsgYW5kIG5vIHBsYXkgPHNwYW4+bWFrZSBKYWNrIGEgZHVsbDwvc3Bhbj4g
Ym95Ljwvc3Bhbj4iCi0gICAgICAgICI8c2NyaXB0PmRvY3VtZW50LmdldFNlbGVjdGlvbigpLmNv
bGxhcHNlKCk7XG4iCi0gICAgICAgICJkb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxD
aGlsZHJlbihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbnNwYW4nKSk7XG4iCi0gICAgICAg
ICI8L3NjcmlwdD48L2JvZHk+PC9odG1sPiI7Ci0KLSAgICAvLyBOb3RoaW5nIGxvYWRlZCB5ZXQu
Ci0gICAgZ19hc3NlcnQoIXRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJ
VElOR19DT01NQU5EX0NVVCkpOwotICAgIGdfYXNzZXJ0KCF0ZXN0LT5jYW5FeGVjdXRlRWRpdGlu
Z0NvbW1hbmQoV0VCS0lUX0VESVRJTkdfQ09NTUFORF9DT1BZKSk7Ci0gICAgZ19hc3NlcnQoIXRl
c3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElOR19DT01NQU5EX1BBU1RF
KSk7Ci0KLSAgICB0ZXN0LT5sb2FkSHRtbChzZWxlY3RlZFNwYW5IVE1MLCAwKTsKLSAgICB0ZXN0
LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIC8vIFRoZXJlJ3MgYSBzZWxlY3Rpb24u
Ci0gICAgZ19hc3NlcnQodGVzdC0+Y2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kKFdFQktJVF9FRElU
SU5HX0NPTU1BTkRfQ1VUKSk7Ci0gICAgZ19hc3NlcnQodGVzdC0+Y2FuRXhlY3V0ZUVkaXRpbmdD
b21tYW5kKFdFQktJVF9FRElUSU5HX0NPTU1BTkRfQ09QWSkpOwotICAgIGdfYXNzZXJ0KHRlc3Qt
PmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElOR19DT01NQU5EX1BBU1RFKSk7
Ci0KLSAgICB0ZXN0LT5jb3B5Q2xpcGJvYXJkKCk7Ci0gICAgR093blB0cjxjaGFyPiBjbGlwYm9h
cmRUZXh0KGd0a19jbGlwYm9hcmRfd2FpdF9mb3JfdGV4dCh0ZXN0LT5tX2NsaXBib2FyZCkpOwot
ICAgIGdfYXNzZXJ0X2NtcHN0cihjbGlwYm9hcmRUZXh0LmdldCgpLCA9PSwgIkFsbCB3b3JrIGFu
ZCBubyBwbGF5IG1ha2UgSmFjayBhIGR1bGwgYm95LiIpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0
V2ViVmlld0VkaXRvclNlbGVjdEFsbE5vbkVkaXRhYmxlKEVkaXRvclRlc3QqIHRlc3QsIGdjb25z
dHBvaW50ZXIpCi17Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHNlbGVjdGVkU3BhbkhUTUwgPSAi
PGh0bWw+PGJvZHkgY29udGVudEVkaXRhYmxlPVwiZmFsc2VcIj4iCi0gICAgICAgICI8c3BhbiBp
ZD1cIm1haW5zcGFuXCI+QWxsIHdvcmsgYW5kIG5vIHBsYXkgPHNwYW4gaWQ9XCJzdWJzcGFuXCI+
bWFrZSBKYWNrIGEgZHVsbDwvc3Bhbj4gYm95Ljwvc3Bhbj4iCi0gICAgICAgICI8c2NyaXB0PmRv
Y3VtZW50LmdldFNlbGVjdGlvbigpLmNvbGxhcHNlKCk7XG4iCi0gICAgICAgICJkb2N1bWVudC5n
ZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJlbihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
c3Vic3BhbicpKTtcbiIKLSAgICAgICAgIjwvc2NyaXB0PjwvYm9keT48L2h0bWw+IjsKLQotICAg
IGdfYXNzZXJ0KHRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElOR19D
T01NQU5EX1NFTEVDVF9BTEwpKTsKLQotICAgIHRlc3QtPmxvYWRIdG1sKHNlbGVjdGVkU3BhbkhU
TUwsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3Nl
cnQodGVzdC0+Y2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kKFdFQktJVF9FRElUSU5HX0NPTU1BTkRf
U0VMRUNUX0FMTCkpOwotCi0gICAgdGVzdC0+Y29weUNsaXBib2FyZCgpOwotICAgIEdPd25QdHI8
Y2hhcj4gY2xpcGJvYXJkVGV4dChndGtfY2xpcGJvYXJkX3dhaXRfZm9yX3RleHQodGVzdC0+bV9j
bGlwYm9hcmQpKTsKLQotICAgIC8vIEluaXRpYWxseSBvbmx5IHRoZSBzdWJzcGFuIGlzIHNlbGVj
dGVkLgotICAgIGdfYXNzZXJ0X2NtcHN0cihjbGlwYm9hcmRUZXh0LmdldCgpLCA9PSwgIm1ha2Ug
SmFjayBhIGR1bGwiKTsKLQotICAgIHdlYmtpdF93ZWJfdmlld19leGVjdXRlX2VkaXRpbmdfY29t
bWFuZCh0ZXN0LT5tX3dlYlZpZXcsIFdFQktJVF9FRElUSU5HX0NPTU1BTkRfU0VMRUNUX0FMTCk7
Ci0gICAgdGVzdC0+Y29weUNsaXBib2FyZCgpOwotICAgIGNsaXBib2FyZFRleHQuc2V0KGd0a19j
bGlwYm9hcmRfd2FpdF9mb3JfdGV4dCh0ZXN0LT5tX2NsaXBib2FyZCkpOwotCi0gICAgLy8gVGhl
IG1haW5zcGFuIHNob3VsZCBiZSBzZWxlY3RlZCBhZnRlciBjYWxsaW5nIFNFTEVDVF9BTEwuCi0g
ICAgZ19hc3NlcnRfY21wc3RyKGNsaXBib2FyZFRleHQuZ2V0KCksID09LCAiQWxsIHdvcmsgYW5k
IG5vIHBsYXkgbWFrZSBKYWNrIGEgZHVsbCBib3kuIik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RX
ZWJWaWV3RWRpdG9yU2VsZWN0QWxsRWRpdGFibGUoRWRpdG9yVGVzdCogdGVzdCwgZ2NvbnN0cG9p
bnRlcikKLXsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogc2VsZWN0ZWRTcGFuSFRNTCA9ICI8aHRt
bD48Ym9keSBjb250ZW50RWRpdGFibGU9XCJ0cnVlXCI+IgotICAgICAgICAiPHNwYW4gaWQ9XCJt
YWluc3BhblwiPkFsbCB3b3JrIGFuZCBubyBwbGF5IDxzcGFuIGlkPVwic3Vic3BhblwiPm1ha2Ug
SmFjayBhIGR1bGw8L3NwYW4+IGJveS48L3NwYW4+IgotICAgICAgICAiPHNjcmlwdD5kb2N1bWVu
dC5nZXRTZWxlY3Rpb24oKS5jb2xsYXBzZSgpO1xuIgotICAgICAgICAiZG9jdW1lbnQuZ2V0U2Vs
ZWN0aW9uKCkuc2VsZWN0QWxsQ2hpbGRyZW4oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1YnNw
YW4nKSk7XG4iCi0gICAgICAgICI8L3NjcmlwdD48L2JvZHk+PC9odG1sPiI7Ci0KLSAgICBnX2Fz
c2VydCh0ZXN0LT5jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQoV0VCS0lUX0VESVRJTkdfQ09NTUFO
RF9TRUxFQ1RfQUxMKSk7Ci0KLSAgICB0ZXN0LT5sb2FkSHRtbChzZWxlY3RlZFNwYW5IVE1MLCAw
KTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0KHRl
c3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElOR19DT01NQU5EX1NFTEVD
VF9BTEwpKTsKLQotICAgIHRlc3QtPmNvcHlDbGlwYm9hcmQoKTsKLSAgICBHT3duUHRyPGNoYXI+
IGNsaXBib2FyZFRleHQoZ3RrX2NsaXBib2FyZF93YWl0X2Zvcl90ZXh0KHRlc3QtPm1fY2xpcGJv
YXJkKSk7Ci0KLSAgICAvLyBJbml0aWFsbHkgb25seSB0aGUgc3Vic3BhbiBpcyBzZWxlY3RlZC4K
LSAgICBnX2Fzc2VydF9jbXBzdHIoY2xpcGJvYXJkVGV4dC5nZXQoKSwgPT0sICJtYWtlIEphY2sg
YSBkdWxsIik7Ci0KLSAgICB3ZWJraXRfd2ViX3ZpZXdfZXhlY3V0ZV9lZGl0aW5nX2NvbW1hbmQo
dGVzdC0+bV93ZWJWaWV3LCBXRUJLSVRfRURJVElOR19DT01NQU5EX1NFTEVDVF9BTEwpOwotICAg
IHRlc3QtPmNvcHlDbGlwYm9hcmQoKTsKLSAgICBjbGlwYm9hcmRUZXh0LnNldChndGtfY2xpcGJv
YXJkX3dhaXRfZm9yX3RleHQodGVzdC0+bV9jbGlwYm9hcmQpKTsKLQotICAgIC8vIFRoZSBtYWlu
c3BhbiBzaG91bGQgYmUgc2VsZWN0ZWQgYWZ0ZXIgY2FsbGluZyBTRUxFQ1RfQUxMLgotICAgIGdf
YXNzZXJ0X2NtcHN0cihjbGlwYm9hcmRUZXh0LmdldCgpLCA9PSwgIkFsbCB3b3JrIGFuZCBubyBw
bGF5IG1ha2UgSmFjayBhIGR1bGwgYm95LiIpOwotfQotCi12b2lkIGJlZm9yZUFsbCgpCi17Ci0g
ICAgRWRpdG9yVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImN1dC1jb3B5LXBhc3RlL25vbi1l
ZGl0YWJsZSIsIHRlc3RXZWJWaWV3RWRpdG9yQ3V0Q29weVBhc3RlTm9uRWRpdGFibGUpOwotICAg
IEVkaXRvclRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJjdXQtY29weS1wYXN0ZS9lZGl0YWJs
ZSIsIHRlc3RXZWJWaWV3RWRpdG9yQ3V0Q29weVBhc3RlRWRpdGFibGUpOwotICAgIEVkaXRvclRl
c3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJzZWxlY3QtYWxsL25vbi1lZGl0YWJsZSIsIHRlc3RX
ZWJWaWV3RWRpdG9yU2VsZWN0QWxsTm9uRWRpdGFibGUpOwotICAgIEVkaXRvclRlc3Q6OmFkZCgi
V2ViS2l0V2ViVmlldyIsICJzZWxlY3QtYWxsL2VkaXRhYmxlIiwgdGVzdFdlYlZpZXdFZGl0b3JT
ZWxlY3RBbGxFZGl0YWJsZSk7Ci19Ci0KLXZvaWQgYWZ0ZXJBbGwoKQotewotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViRXh0ZW5zaW9uVGVz
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJFeHRlbnNp
b25UZXN0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDIxMmUyYi4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJFeHRlbnNp
b25UZXN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI2NyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dFJlZi5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8Z2lvL2dpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5o
PgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0LXdlYi1leHRl
bnNpb24uaD4KLSNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3du
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KLQotc3RhdGljIGNvbnN0IGNoYXIgaW50cm9zcGVjdGlvblhNTFtdID0K
LSAgICAiPG5vZGU+IgotICAgICIgPGludGVyZmFjZSBuYW1lPSdvcmcud2Via2l0Lmd0ay5XZWJF
eHRlbnNpb25UZXN0Jz4iCi0gICAgIiAgPG1ldGhvZCBuYW1lPSdHZXRUaXRsZSc+IgotICAgICIg
ICA8YXJnIHR5cGU9J3QnIG5hbWU9J3BhZ2VJRCcgZGlyZWN0aW9uPSdpbicvPiIKLSAgICAiICAg
PGFyZyB0eXBlPSdzJyBuYW1lPSd0aXRsZScgZGlyZWN0aW9uPSdvdXQnLz4iCi0gICAgIiAgPC9t
ZXRob2Q+IgotICAgICIgIDxtZXRob2QgbmFtZT0nQWJvcnRQcm9jZXNzJz4iCi0gICAgIiAgPC9t
ZXRob2Q+IgotICAgICIgIDxtZXRob2QgbmFtZT0nUnVuSmF2YVNjcmlwdEluSXNvbGF0ZWRXb3Js
ZCc+IgotICAgICIgICA8YXJnIHR5cGU9J3QnIG5hbWU9J3BhZ2VJRCcgZGlyZWN0aW9uPSdpbicv
PiIKLSAgICAiICAgPGFyZyB0eXBlPSdzJyBuYW1lPSdzY3JpcHQnIGRpcmVjdGlvbj0naW4nLz4i
Ci0gICAgIiAgPC9tZXRob2Q+IgotICAgICIgIDxzaWduYWwgbmFtZT0nRG9jdW1lbnRMb2FkZWQn
Lz4iCi0gICAgIiAgPHNpZ25hbCBuYW1lPSdVUklDaGFuZ2VkJz4iCi0gICAgIiAgIDxhcmcgdHlw
ZT0ncycgbmFtZT0ndXJpJyBkaXJlY3Rpb249J291dCcvPiIKLSAgICAiICA8L3NpZ25hbD4iCi0g
ICAgIiA8L2ludGVyZmFjZT4iCi0gICAgIjwvbm9kZT4iOwotCi10eXBlZGVmIGVudW0gewotICAg
IERvY3VtZW50TG9hZGVkU2lnbmFsLAotICAgIFVSSUNoYW5nZWRTaWduYWwsCi19IERlbGF5ZWRT
aWduYWxUeXBlOwotCi1zdHJ1Y3QgRGVsYXllZFNpZ25hbCB7Ci0gICAgRGVsYXllZFNpZ25hbChE
ZWxheWVkU2lnbmFsVHlwZSB0eXBlKQotICAgICAgICA6IHR5cGUodHlwZSkKLSAgICB7Ci0gICAg
fQotCi0gICAgRGVsYXllZFNpZ25hbChEZWxheWVkU2lnbmFsVHlwZSB0eXBlLCBjb25zdCBjaGFy
KiB1cmkpCi0gICAgICAgIDogdHlwZSh0eXBlKQotICAgICAgICAsIHVyaSh1cmkpCi0gICAgewot
ICAgIH0KLQotICAgIERlbGF5ZWRTaWduYWxUeXBlIHR5cGU7Ci0gICAgQ1N0cmluZyB1cmk7Ci19
OwotCi1EZXF1ZTxPd25QdHI8RGVsYXllZFNpZ25hbD4+IGRlbGF5ZWRTaWduYWxzUXVldWU7Ci0K
LXN0YXRpYyB2b2lkIGVtaXREb2N1bWVudExvYWRlZChHREJ1c0Nvbm5lY3Rpb24qIGNvbm5lY3Rp
b24pCi17Ci0gICAgYm9vbCBvayA9IGdfZGJ1c19jb25uZWN0aW9uX2VtaXRfc2lnbmFsKAotICAg
ICAgICBjb25uZWN0aW9uLAotICAgICAgICAwLAotICAgICAgICAiL29yZy93ZWJraXQvZ3RrL1dl
YkV4dGVuc2lvblRlc3QiLAotICAgICAgICAib3JnLndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9uVGVz
dCIsCi0gICAgICAgICJEb2N1bWVudExvYWRlZCIsCi0gICAgICAgIDAsCi0gICAgICAgIDApOwot
ICAgIGdfYXNzZXJ0KG9rKTsKLX0KLQotc3RhdGljIHZvaWQgZG9jdW1lbnRMb2FkZWRDYWxsYmFj
ayhXZWJLaXRXZWJQYWdlKiwgV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24pCi17Ci0gICAg
Z3BvaW50ZXIgZGF0YSA9IGdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKGV4dGVuc2lvbiksICJk
YnVzLWNvbm5lY3Rpb24iKTsKLSAgICBpZiAoZGF0YSkKLSAgICAgICAgZW1pdERvY3VtZW50TG9h
ZGVkKEdfREJVU19DT05ORUNUSU9OKGRhdGEpKTsKLSAgICBlbHNlCi0gICAgICAgIGRlbGF5ZWRT
aWduYWxzUXVldWUuYXBwZW5kKGFkb3B0UHRyKG5ldyBEZWxheWVkU2lnbmFsKERvY3VtZW50TG9h
ZGVkU2lnbmFsKSkpOwotfQotCi1zdGF0aWMgdm9pZCBlbWl0VVJJQ2hhbmdlZChHREJ1c0Nvbm5l
Y3Rpb24qIGNvbm5lY3Rpb24sIGNvbnN0IGNoYXIqIHVyaSkKLXsKLSAgICBib29sIG9rID0gZ19k
YnVzX2Nvbm5lY3Rpb25fZW1pdF9zaWduYWwoCi0gICAgICAgIGNvbm5lY3Rpb24sCi0gICAgICAg
IDAsCi0gICAgICAgICIvb3JnL3dlYmtpdC9ndGsvV2ViRXh0ZW5zaW9uVGVzdCIsCi0gICAgICAg
ICJvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwKLSAgICAgICAgIlVSSUNoYW5nZWQi
LAotICAgICAgICBnX3ZhcmlhbnRfbmV3KCIocykiLCB1cmkpLAotICAgICAgICAwKTsKLSAgICBn
X2Fzc2VydChvayk7Ci19Ci0KLXN0YXRpYyB2b2lkIHVyaUNoYW5nZWRDYWxsYmFjayhXZWJLaXRX
ZWJQYWdlKiB3ZWJQYWdlLCBHUGFyYW1TcGVjKiBwc3BlYywgV2ViS2l0V2ViRXh0ZW5zaW9uKiBl
eHRlbnNpb24pCi17Ci0gICAgZ3BvaW50ZXIgZGF0YSA9IGdfb2JqZWN0X2dldF9kYXRhKEdfT0JK
RUNUKGV4dGVuc2lvbiksICJkYnVzLWNvbm5lY3Rpb24iKTsKLSAgICBpZiAoZGF0YSkKLSAgICAg
ICAgZW1pdFVSSUNoYW5nZWQoR19EQlVTX0NPTk5FQ1RJT04oZGF0YSksIHdlYmtpdF93ZWJfcGFn
ZV9nZXRfdXJpKHdlYlBhZ2UpKTsKLSAgICBlbHNlCi0gICAgICAgIGRlbGF5ZWRTaWduYWxzUXVl
dWUuYXBwZW5kKGFkb3B0UHRyKG5ldyBEZWxheWVkU2lnbmFsKFVSSUNoYW5nZWRTaWduYWwsIHdl
YmtpdF93ZWJfcGFnZV9nZXRfdXJpKHdlYlBhZ2UpKSkpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4g
c2VuZFJlcXVlc3RDYWxsYmFjayhXZWJLaXRXZWJQYWdlKiwgV2ViS2l0VVJJUmVxdWVzdCogcmVx
dWVzdCwgV2ViS2l0VVJJUmVzcG9uc2UqLCBncG9pbnRlcikKLXsKLSAgICBjb25zdCBjaGFyKiBy
ZXF1ZXN0VVJJID0gd2Via2l0X3VyaV9yZXF1ZXN0X2dldF91cmkocmVxdWVzdCk7Ci0gICAgZ19h
c3NlcnQocmVxdWVzdFVSSSk7Ci0KLSAgICBpZiAoY29uc3QgY2hhciogc3VmZml4ID0gZ19zdHJy
c3RyKHJlcXVlc3RVUkksICIvcmVtb3ZlLXRoaXMvamF2YXNjcmlwdC5qcyIpKSB7Ci0gICAgICAg
IEdPd25QdHI8Y2hhcj4gcHJlZml4KGdfc3RybmR1cChyZXF1ZXN0VVJJLCBzdHJsZW4ocmVxdWVz
dFVSSSkgLSBzdHJsZW4oc3VmZml4KSkpOwotICAgICAgICBHT3duUHRyPGNoYXI+IG5ld1VSSShn
X3N0cmR1cF9wcmludGYoIiVzL2phdmFzY3JpcHQuanMiLCBwcmVmaXguZ2V0KCkpKTsKLSAgICAg
ICAgd2Via2l0X3VyaV9yZXF1ZXN0X3NldF91cmkocmVxdWVzdCwgbmV3VVJJLmdldCgpKTsKLSAg
ICB9IGVsc2UgaWYgKGdfc3RyX2hhc19zdWZmaXgocmVxdWVzdFVSSSwgIi9hZGQtZG8tbm90LXRy
YWNrLWhlYWRlciIpKSB7Ci0gICAgICAgIFNvdXBNZXNzYWdlSGVhZGVycyogaGVhZGVycyA9IHdl
YmtpdF91cmlfcmVxdWVzdF9nZXRfaHR0cF9oZWFkZXJzKHJlcXVlc3QpOwotICAgICAgICBnX2Fz
c2VydChoZWFkZXJzKTsKLSAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKGhlYWRl
cnMsICJETlQiLCAiMSIpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfaGFzX3N1ZmZpeChyZXF1ZXN0
VVJJLCAiL2NhbmNlbC10aGlzLmpzIikpCi0gICAgICAgIHJldHVybiBUUlVFOwotCi0gICAgcmV0
dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCBwYWdlQ3JlYXRlZENhbGxiYWNrKFdlYktpdFdl
YkV4dGVuc2lvbiogZXh0ZW5zaW9uLCBXZWJLaXRXZWJQYWdlKiB3ZWJQYWdlLCBncG9pbnRlcikK
LXsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlBhZ2UsICJkb2N1bWVudC1sb2FkZWQiLCBHX0NB
TExCQUNLKGRvY3VtZW50TG9hZGVkQ2FsbGJhY2spLCBleHRlbnNpb24pOwotICAgIGdfc2lnbmFs
X2Nvbm5lY3Qod2ViUGFnZSwgIm5vdGlmeTo6dXJpIiwgR19DQUxMQkFDSyh1cmlDaGFuZ2VkQ2Fs
bGJhY2spLCBleHRlbnNpb24pOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViUGFnZSwgInNlbmQt
cmVxdWVzdCIsIEdfQ0FMTEJBQ0soc2VuZFJlcXVlc3RDYWxsYmFjayksIDApOwotfQotCi1zdGF0
aWMgSlNWYWx1ZVJlZiBlY2hvQ2FsbGJhY2soSlNDb250ZXh0UmVmIGpzQ29udGV4dCwgSlNPYmpl
Y3RSZWYsIEpTT2JqZWN0UmVmLCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJl
ZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiopCi17Ci0gICAgaWYgKGFyZ3VtZW50Q291bnQgPD0g
MCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGpzQ29udGV4dCk7Ci0KLSAg
ICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gc3RyaW5nKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdD
b3B5KGpzQ29udGV4dCwgYXJndW1lbnRzWzBdLCAwKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtl
U3RyaW5nKGpzQ29udGV4dCwgc3RyaW5nLmdldCgpKTsKLX0KLQotc3RhdGljIHZvaWQgd2luZG93
T2JqZWN0Q2xlYXJlZChXZWJLaXRTY3JpcHRXb3JsZCogd29ybGQsIFdlYktpdFdlYlBhZ2UqIHBh
Z2UsIFdlYktpdEZyYW1lKiBmcmFtZSwgZ3BvaW50ZXIpCi17Ci0gICAgSlNHbG9iYWxDb250ZXh0
UmVmIGpzQ29udGV4dCA9IHdlYmtpdF9mcmFtZV9nZXRfamF2YXNjcmlwdF9jb250ZXh0X2Zvcl9z
Y3JpcHRfd29ybGQoZnJhbWUsIHdvcmxkKTsKLSAgICBnX2Fzc2VydChqc0NvbnRleHQpOwotICAg
IEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCA9IEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChqc0Nv
bnRleHQpOwotICAgIGdfYXNzZXJ0KGdsb2JhbE9iamVjdCk7Ci0KLSAgICBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gZnVuY3Rpb25OYW1lKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiZWNobyIpKTsKLSAgICBKU09iamVjdFJlZiBmdW5jdGlvbiA9IEpTT2JqZWN0TWFrZUZ1
bmN0aW9uV2l0aENhbGxiYWNrKGpzQ29udGV4dCwgZnVuY3Rpb25OYW1lLmdldCgpLCBlY2hvQ2Fs
bGJhY2spOwotICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoanNDb250ZXh0LCBnbG9iYWxPYmplY3Qs
IGZ1bmN0aW9uTmFtZS5nZXQoKSwgZnVuY3Rpb24sIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERl
bGV0ZSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHksIDApOwotfQotCi1zdGF0aWMgV2Vi
S2l0V2ViUGFnZSogZ2V0V2ViUGFnZShXZWJLaXRXZWJFeHRlbnNpb24qIGV4dGVuc2lvbiwgdWlu
dDY0X3QgcGFnZUlELCBHREJ1c01ldGhvZEludm9jYXRpb24qIGludm9jYXRpb24pCi17Ci0gICAg
V2ViS2l0V2ViUGFnZSogcGFnZSA9IHdlYmtpdF93ZWJfZXh0ZW5zaW9uX2dldF9wYWdlKGV4dGVu
c2lvbiwgcGFnZUlEKTsKLSAgICBpZiAoIXBhZ2UpIHsKLSAgICAgICAgZ19kYnVzX21ldGhvZF9p
bnZvY2F0aW9uX3JldHVybl9lcnJvcigKLSAgICAgICAgICAgIGludm9jYXRpb24sIEdfREJVU19F
UlJPUiwgR19EQlVTX0VSUk9SX0lOVkFMSURfQVJHUywKLSAgICAgICAgICAgICJJbnZhbGlkIHBh
Z2UgSUQ6ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIHBhZ2VJRCk7Ci0gICAgICAgIHJldHVybiAwOwot
ICAgIH0KLQotICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X3dlYl9wYWdlX2dldF9pZChwYWdl
KSwgPT0sIHBhZ2VJRCk7Ci0gICAgcmV0dXJuIHBhZ2U7Ci19Ci0KLXN0YXRpYyB2b2lkIG1ldGhv
ZENhbGxDYWxsYmFjayhHREJ1c0Nvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIGNvbnN0IGNoYXIqIHNl
bmRlciwgY29uc3QgY2hhciogb2JqZWN0UGF0aCwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwg
Y29uc3QgY2hhciogbWV0aG9kTmFtZSwgR1ZhcmlhbnQqIHBhcmFtZXRlcnMsIEdEQnVzTWV0aG9k
SW52b2NhdGlvbiogaW52b2NhdGlvbiwgZ3BvaW50ZXIgdXNlckRhdGEpCi17Ci0gICAgaWYgKGdf
c3RyY21wMChpbnRlcmZhY2VOYW1lLCAib3JnLndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9uVGVzdCIp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAiR2V0
VGl0bGUiKSkgewotICAgICAgICB1aW50NjRfdCBwYWdlSUQ7Ci0gICAgICAgIGdfdmFyaWFudF9n
ZXQocGFyYW1ldGVycywgIih0KSIsICZwYWdlSUQpOwotICAgICAgICBXZWJLaXRXZWJQYWdlKiBw
YWdlID0gZ2V0V2ViUGFnZShXRUJLSVRfV0VCX0VYVEVOU0lPTih1c2VyRGF0YSksIHBhZ2VJRCwg
aW52b2NhdGlvbik7Ci0gICAgICAgIGlmICghcGFnZSkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3BhZ2VfZ2V0
X2RvbV9kb2N1bWVudChwYWdlKTsKLSAgICAgICAgR093blB0cjxjaGFyPiB0aXRsZSh3ZWJraXRf
ZG9tX2RvY3VtZW50X2dldF90aXRsZShkb2N1bWVudCkpOwotICAgICAgICBnX2RidXNfbWV0aG9k
X2ludm9jYXRpb25fcmV0dXJuX3ZhbHVlKGludm9jYXRpb24sIGdfdmFyaWFudF9uZXcoIihzKSIs
IHRpdGxlLmdldCgpKSk7Ci0gICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJS
dW5KYXZhU2NyaXB0SW5Jc29sYXRlZFdvcmxkIikpIHsKLSAgICAgICAgdWludDY0X3QgcGFnZUlE
OwotICAgICAgICBjb25zdCBjaGFyKiBzY3JpcHQ7Ci0gICAgICAgIGdfdmFyaWFudF9nZXQocGFy
YW1ldGVycywgIih0JnMpIiwgJnBhZ2VJRCwgJnNjcmlwdCk7Ci0gICAgICAgIFdlYktpdFdlYlBh
Z2UqIHBhZ2UgPSBnZXRXZWJQYWdlKFdFQktJVF9XRUJfRVhURU5TSU9OKHVzZXJEYXRhKSwgcGFn
ZUlELCBpbnZvY2F0aW9uKTsKLSAgICAgICAgaWYgKCFwYWdlKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIEdSZWZQdHI8V2ViS2l0U2NyaXB0V29ybGQ+IHdvcmxkID0gYWRvcHRHUmVm
KHdlYmtpdF9zY3JpcHRfd29ybGRfbmV3KCkpOwotICAgICAgICBnX2Fzc2VydCh3ZWJraXRfc2Ny
aXB0X3dvcmxkX2dldF9kZWZhdWx0KCkgIT0gd29ybGQuZ2V0KCkpOwotICAgICAgICBXZWJLaXRG
cmFtZSogZnJhbWUgPSB3ZWJraXRfd2ViX3BhZ2VfZ2V0X21haW5fZnJhbWUocGFnZSk7Ci0gICAg
ICAgIEpTR2xvYmFsQ29udGV4dFJlZiBqc0NvbnRleHQgPSB3ZWJraXRfZnJhbWVfZ2V0X2phdmFz
Y3JpcHRfY29udGV4dF9mb3Jfc2NyaXB0X3dvcmxkKGZyYW1lLCB3b3JsZC5nZXQoKSk7Ci0gICAg
ICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBqc1NjcmlwdChBZG9wdCwgSlNTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoc2NyaXB0KSk7Ci0gICAgICAgIEpTRXZhbHVhdGVTY3JpcHQoanND
b250ZXh0LCBqc1NjcmlwdC5nZXQoKSwgMCwgMCwgMCwgMCk7Ci0gICAgICAgIGdfZGJ1c19tZXRo
b2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUoaW52b2NhdGlvbiwgMCk7Ci0gICAgfSBlbHNlIGlm
ICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJBYm9ydFByb2Nlc3MiKSkgewotICAgICAgICBhYm9y
dCgpOwotICAgIH0KLX0KLQotc3RhdGljIGNvbnN0IEdEQnVzSW50ZXJmYWNlVlRhYmxlIGludGVy
ZmFjZVZpcnR1YWxUYWJsZSA9IHsKLSAgICBtZXRob2RDYWxsQ2FsbGJhY2ssIDAsIDAsIHsgMCwg
fQotfTsKLQotc3RhdGljIHZvaWQgYnVzQWNxdWlyZWRDYWxsYmFjayhHREJ1c0Nvbm5lY3Rpb24q
IGNvbm5lY3Rpb24sIGNvbnN0IGNoYXIqIG5hbWUsIGdwb2ludGVyIHVzZXJEYXRhKQotewotICAg
IHN0YXRpYyBHREJ1c05vZGVJbmZvICppbnRyb3NwZWN0aW9uRGF0YSA9IDA7Ci0gICAgaWYgKCFp
bnRyb3NwZWN0aW9uRGF0YSkKLSAgICAgICAgaW50cm9zcGVjdGlvbkRhdGEgPSBnX2RidXNfbm9k
ZV9pbmZvX25ld19mb3JfeG1sKGludHJvc3BlY3Rpb25YTUwsIDApOwotCi0gICAgR093blB0cjxH
RXJyb3I+IGVycm9yOwotICAgIHVuc2lnbmVkIHJlZ2lzdHJhdGlvbklEID0gZ19kYnVzX2Nvbm5l
Y3Rpb25fcmVnaXN0ZXJfb2JqZWN0KAotICAgICAgICBjb25uZWN0aW9uLAotICAgICAgICAiL29y
Zy93ZWJraXQvZ3RrL1dlYkV4dGVuc2lvblRlc3QiLAotICAgICAgICBpbnRyb3NwZWN0aW9uRGF0
YS0+aW50ZXJmYWNlc1swXSwKLSAgICAgICAgJmludGVyZmFjZVZpcnR1YWxUYWJsZSwKLSAgICAg
ICAgZ19vYmplY3RfcmVmKHVzZXJEYXRhKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8R0Rlc3Ryb3lO
b3RpZnk+KGdfb2JqZWN0X3VucmVmKSwKLSAgICAgICAgJmVycm9yLm91dFB0cigpKTsKLSAgICBp
ZiAoIXJlZ2lzdHJhdGlvbklEKQotICAgICAgICBnX3dhcm5pbmcoIkZhaWxlZCB0byByZWdpc3Rl
ciBvYmplY3Q6ICVzXG4iLCBlcnJvci0+bWVzc2FnZSk7Ci0KLSAgICBnX29iamVjdF9zZXRfZGF0
YShHX09CSkVDVCh1c2VyRGF0YSksICJkYnVzLWNvbm5lY3Rpb24iLCBjb25uZWN0aW9uKTsKLSAg
ICB3aGlsZSAoZGVsYXllZFNpZ25hbHNRdWV1ZS5zaXplKCkpIHsKLSAgICAgICAgT3duUHRyPERl
bGF5ZWRTaWduYWw+IGRlbGF5ZWRTaWduYWwgPSBkZWxheWVkU2lnbmFsc1F1ZXVlLnRha2VGaXJz
dCgpOwotICAgICAgICBzd2l0Y2ggKGRlbGF5ZWRTaWduYWwtPnR5cGUpIHsKLSAgICAgICAgY2Fz
ZSBEb2N1bWVudExvYWRlZFNpZ25hbDoKLSAgICAgICAgICAgIGVtaXREb2N1bWVudExvYWRlZChj
b25uZWN0aW9uKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFVSSUNoYW5nZWRT
aWduYWw6Ci0gICAgICAgICAgICBlbWl0VVJJQ2hhbmdlZChjb25uZWN0aW9uLCBkZWxheWVkU2ln
bmFsLT51cmkuZGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQot
fQotCi1leHRlcm4gIkMiIHZvaWQgd2Via2l0X3dlYl9leHRlbnNpb25faW5pdGlhbGl6ZShXZWJL
aXRXZWJFeHRlbnNpb24qIGV4dGVuc2lvbikKLXsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGV4dGVu
c2lvbiwgInBhZ2UtY3JlYXRlZCIsIEdfQ0FMTEJBQ0socGFnZUNyZWF0ZWRDYWxsYmFjayksIGV4
dGVuc2lvbik7Ci0gICAgZ19zaWduYWxfY29ubmVjdCh3ZWJraXRfc2NyaXB0X3dvcmxkX2dldF9k
ZWZhdWx0KCksICJ3aW5kb3ctb2JqZWN0LWNsZWFyZWQiLCBHX0NBTExCQUNLKHdpbmRvd09iamVj
dENsZWFyZWQpLCAwKTsKLQotICAgIGdfYnVzX293bl9uYW1lKAotICAgICAgICBHX0JVU19UWVBF
X1NFU1NJT04sCi0gICAgICAgICJvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwKLSAg
ICAgICAgR19CVVNfTkFNRV9PV05FUl9GTEFHU19OT05FLAotICAgICAgICBidXNBY3F1aXJlZENh
bGxiYWNrLAotICAgICAgICAwLCAwLAotICAgICAgICBnX29iamVjdF9yZWYoZXh0ZW5zaW9uKSwK
LSAgICAgICAgc3RhdGljX2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGdfb2JqZWN0X3VucmVmKSk7Ci19
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJL
aXRUZXN0QnVzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dl
YktpdFRlc3RCdXMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzJkM2Y2Li4w
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYktp
dFRlc3RCdXMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IldlYktpdFRlc3RCdXMuaCIKLQotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotV2ViS2l0VGVzdEJ1czo6V2ViS2l0VGVz
dEJ1cygpCi0gICAgOiBtX3BpZCgtMSkKLXsKLX0KLQotYm9vbCBXZWJLaXRUZXN0QnVzOjpydW4o
KQotewotICAgIC8vIEZJWE1FOiBVc2UgR1Rlc3REQnVzIHdoZW4gd2UgYnVtcCBnbGliIHRvIDIu
MzQuCi0gICAgR093blB0cjxjaGFyPiBkYnVzTGF1bmNoKGdfZmluZF9wcm9ncmFtX2luX3BhdGgo
ImRidXMtbGF1bmNoIikpOwotICAgIGlmICghZGJ1c0xhdW5jaCkgewotICAgICAgICBnX3dhcm5p
bmcoIkVycm9yIHN0YXJ0aW5nIERCVVMgZGFlbW9uOiBkYnVzLWxhdW5jaCBub3QgZm91bmQgaW4g
cGF0aCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgR093blB0cjxjaGFy
PiBvdXRwdXQ7Ci0gICAgR093blB0cjxHRXJyb3I+IGVycm9yOwotICAgIGlmICghZ19zcGF3bl9j
b21tYW5kX2xpbmVfc3luYyhkYnVzTGF1bmNoLmdldCgpLCAmb3V0cHV0Lm91dFB0cigpLCAwLCAw
LCAmZXJyb3Iub3V0UHRyKCkpKSB7Ci0gICAgICAgIGdfd2FybmluZygiRXJyb3Igc3RhcnRpbmcg
REJVUyBkYWVtb246ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgU3RyaW5nIG91dHB1dFN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgob3V0
cHV0LmdldCgpKTsKLSAgICBWZWN0b3I8U3RyaW5nPiBsaW5lczsKLSAgICBvdXRwdXRTdHJpbmcu
c3BsaXQoVUNoYXIoJ1xuJyksIC8qIGFsbG93RW1wdHlFbnRyaWVzICovIGZhbHNlLCBsaW5lcyk7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaW5lcy5zaXplKCk7ICsraSkgewotICAgICAg
ICBjaGFyKioga2V5VmFsdWUgPSBnX3N0cnNwbGl0KGxpbmVzW2ldLnV0ZjgoKS5kYXRhKCksICI9
IiwgMik7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHVpbnQoZ19zdHJ2X2xlbmd0aChrZXlWYWx1ZSks
ID09LCAyKTsKLSAgICAgICAgaWYgKCFnX3N0cmNtcDAoa2V5VmFsdWVbMF0sICJEQlVTX1NFU1NJ
T05fQlVTX0FERFJFU1MiKSkgewotICAgICAgICAgICAgbV9hZGRyZXNzID0ga2V5VmFsdWVbMV07
Ci0gICAgICAgICAgICBnX3NldGVudigiREJVU19TRVNTSU9OX0JVU19BRERSRVNTIiwga2V5VmFs
dWVbMV0sIFRSVUUpOwotICAgICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAoa2V5VmFsdWVbMF0s
ICJEQlVTX1NFU1NJT05fQlVTX1BJRCIpKQotICAgICAgICAgICAgbV9waWQgPSBnX2FzY2lpX3N0
cnRvbGwoa2V5VmFsdWVbMV0sIDAsIDEwKTsKLSAgICAgICAgZ19zdHJmcmVldihrZXlWYWx1ZSk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIG1fcGlkID4gMDsKLX0KLQotV2ViS2l0VGVzdEJ1czo6fldl
YktpdFRlc3RCdXMoKQotewotICAgIGdfdW5zZXRlbnYoIkRCVVNfU0VTU0lPTl9CVVNfQUREUkVT
UyIpOwotCi0gICAgaWYgKG1fcGlkICE9IC0xKQotICAgICAgICBraWxsKG1fcGlkLCBTSUdURVJN
KTsKLX0KLQotR0RCdXNDb25uZWN0aW9uKiBXZWJLaXRUZXN0QnVzOjpnZXRPckNyZWF0ZUNvbm5l
Y3Rpb24oKQotewotICAgIGlmIChtX2Nvbm5lY3Rpb24pCi0gICAgICAgIHJldHVybiBtX2Nvbm5l
Y3Rpb24uZ2V0KCk7Ci0KLSAgICBnX2Fzc2VydCghbV9hZGRyZXNzLmlzTnVsbCgpKTsKLSAgICBt
X2Nvbm5lY3Rpb24gPSBhZG9wdEdSZWYoZ19kYnVzX2Nvbm5lY3Rpb25fbmV3X2Zvcl9hZGRyZXNz
X3N5bmMobV9hZGRyZXNzLmRhdGEoKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8R0RCdXNDb25uZWN0
aW9uRmxhZ3M+KEdfREJVU19DT05ORUNUSU9OX0ZMQUdTX0FVVEhFTlRJQ0FUSU9OX0NMSUVOVCB8
IEdfREJVU19DT05ORUNUSU9OX0ZMQUdTX01FU1NBR0VfQlVTX0NPTk5FQ1RJT04pLAotICAgICAg
ICAwLCAwLCAwKSk7Ci0gICAgcmV0dXJuIG1fY29ubmVjdGlvbi5nZXQoKTsKLX0KLQotc3RhdGlj
IHZvaWQgb25OYW1lQXBwZWFyZWQoR0RCdXNDb25uZWN0aW9uKiwgY29uc3QgY2hhciosIGNvbnN0
IGNoYXIqLCBncG9pbnRlciB1c2VyRGF0YSkKLXsKLSAgICBnX21haW5fbG9vcF9xdWl0KHN0YXRp
Y19jYXN0PEdNYWluTG9vcCo+KHVzZXJEYXRhKSk7Ci19Ci0KLUdEQnVzUHJveHkqIFdlYktpdFRl
c3RCdXM6OmNyZWF0ZVByb3h5KGNvbnN0IGNoYXIqIHNlcnZpY2VOYW1lLCBjb25zdCBjaGFyKiBv
YmplY3RQYXRoLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBHTWFpbkxvb3AqIG1haW5Mb29w
KQotewotICAgIHVuc2lnbmVkIHdhdGNoZXJJRCA9IGdfYnVzX3dhdGNoX25hbWVfb25fY29ubmVj
dGlvbihnZXRPckNyZWF0ZUNvbm5lY3Rpb24oKSwgc2VydmljZU5hbWUsIEdfQlVTX05BTUVfV0FU
Q0hFUl9GTEFHU19OT05FLCBvbk5hbWVBcHBlYXJlZCwgMCwgbWFpbkxvb3AsIDApOwotICAgIGdf
bWFpbl9sb29wX3J1bihtYWluTG9vcCk7Ci0gICAgZ19idXNfdW53YXRjaF9uYW1lKHdhdGNoZXJJ
RCk7Ci0KLSAgICBHREJ1c1Byb3h5KiBwcm94eSA9IGdfZGJ1c19wcm94eV9uZXdfc3luYygKLSAg
ICAgICAgY29ubmVjdGlvbigpLAotICAgICAgICBHX0RCVVNfUFJPWFlfRkxBR1NfRE9fTk9UX0FV
VE9fU1RBUlQsCi0gICAgICAgIDAsIC8vIEdEQnVzSW50ZXJmYWNlSW5mbwotICAgICAgICBzZXJ2
aWNlTmFtZSwKLSAgICAgICAgb2JqZWN0UGF0aCwKLSAgICAgICAgaW50ZXJmYWNlTmFtZSwKLSAg
ICAgICAgMCwgLy8gR0NhbmNlbGxhYmxlCi0gICAgICAgIDApOwotICAgIGdfYXNzZXJ0KHByb3h5
KTsKLSAgICByZXR1cm4gcHJveHk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJLaXRUZXN0QnVzLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJLaXRUZXN0QnVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGI5Zjg1NmIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvV2ViS2l0VGVzdEJ1cy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFdlYktp
dFRlc3RCdXNfaAotI2RlZmluZSBXZWJLaXRUZXN0QnVzX2gKLQotI2luY2x1ZGUgPGdpby9naW8u
aD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgotCi1jbGFzcyBXZWJLaXRUZXN0QnVzIHsKLXB1YmxpYzoKLSAgICBXZWJLaXRU
ZXN0QnVzKCk7Ci0gICAgdmlydHVhbCB+V2ViS2l0VGVzdEJ1cygpOwotCi0gICAgYm9vbCBydW4o
KTsKLSAgICBHREJ1c1Byb3h5KiBjcmVhdGVQcm94eShjb25zdCBjaGFyKiBzZXJ2aWNlTmFtZSwg
Y29uc3QgY2hhciogb2JqZWN0UGF0aCwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgR01haW5M
b29wKik7Ci0gICAgR0RCdXNDb25uZWN0aW9uKiBjb25uZWN0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9jb25uZWN0aW9uLmdldCgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgR0RCdXNDb25uZWN0aW9uKiBn
ZXRPckNyZWF0ZUNvbm5lY3Rpb24oKTsKLQotICAgIHBpZF90IG1fcGlkOwotICAgIENTdHJpbmcg
bV9hZGRyZXNzOwotICAgIEdSZWZQdHI8R0RCdXNDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247Ci19
OwotCi0jZW5kaWYgLy8gV2ViS2l0VGVzdEJ1c19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJLaXRUZXN0U2VydmVyLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYktpdFRlc3RTZXJ2ZXIuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGI0YTlhLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYktpdFRlc3RTZXJ2ZXIuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2Fs
aWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5o
IgotCi0jaW5jbHVkZSAiVGVzdE1haW4uaCIKLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRy
Lmg+Ci0KLVdlYktpdFRlc3RTZXJ2ZXI6OldlYktpdFRlc3RTZXJ2ZXIoU2VydmVyVHlwZSB0eXBl
KQotewotICAgIEdPd25QdHI8Y2hhcj4gc3NsQ2VydGlmaWNhdGVGaWxlOwotICAgIEdPd25QdHI8
Y2hhcj4gc3NsS2V5RmlsZTsKLSAgICBpZiAodHlwZSA9PSBTZXJ2ZXJIVFRQUykgewotICAgICAg
ICBDU3RyaW5nIHJlc291cmNlc0RpciA9IFRlc3Q6OmdldFJlc291cmNlc0RpcigpOwotICAgICAg
ICBzc2xDZXJ0aWZpY2F0ZUZpbGUuc2V0KGdfYnVpbGRfZmlsZW5hbWUocmVzb3VyY2VzRGlyLmRh
dGEoKSwgInRlc3QtY2VydC5wZW0iLCBOVUxMKSk7Ci0gICAgICAgIHNzbEtleUZpbGUuc2V0KGdf
YnVpbGRfZmlsZW5hbWUocmVzb3VyY2VzRGlyLmRhdGEoKSwgInRlc3Qta2V5LnBlbSIsIE5VTEwp
KTsKLSAgICB9Ci0KLSAgICBHUmVmUHRyPFNvdXBBZGRyZXNzPiBhZGRyZXNzID0gYWRvcHRHUmVm
KHNvdXBfYWRkcmVzc19uZXcoIjEyNy4wLjAuMSIsIFNPVVBfQUREUkVTU19BTllfUE9SVCkpOwot
ICAgIHNvdXBfYWRkcmVzc19yZXNvbHZlX3N5bmMoYWRkcmVzcy5nZXQoKSwgMCk7Ci0KLSAgICBt
X3NvdXBTZXJ2ZXIgPSBhZG9wdEdSZWYoc291cF9zZXJ2ZXJfbmV3KFNPVVBfU0VSVkVSX0lOVEVS
RkFDRSwgYWRkcmVzcy5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFNPVVBfU0VSVkVSX1NTTF9DRVJUX0ZJTEUsIHNzbENlcnRpZmljYXRlRmlsZS5n
ZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPVVBf
U0VSVkVSX1NTTF9LRVlfRklMRSwgc3NsS2V5RmlsZS5nZXQoKSwgTlVMTCkpOwotICAgIG1fYmFz
ZVVSSSA9IHR5cGUgPT0gU2VydmVySFRUUFMgPyBzb3VwX3VyaV9uZXcoImh0dHBzOi8vMTI3LjAu
MC4xLyIpIDogc291cF91cmlfbmV3KCJodHRwOi8vMTI3LjAuMC4xLyIpOwotICAgIHNvdXBfdXJp
X3NldF9wb3J0KG1fYmFzZVVSSSwgc291cF9zZXJ2ZXJfZ2V0X3BvcnQobV9zb3VwU2VydmVyLmdl
dCgpKSk7Ci19Ci0KLVdlYktpdFRlc3RTZXJ2ZXI6On5XZWJLaXRUZXN0U2VydmVyKCkKLXsKLSAg
ICBzb3VwX3VyaV9mcmVlKG1fYmFzZVVSSSk7Ci19Ci0KLXZvaWQgV2ViS2l0VGVzdFNlcnZlcjo6
cnVuKFNvdXBTZXJ2ZXJDYWxsYmFjayBzZXJ2ZXJDYWxsYmFjaykKLXsKLSAgICBzb3VwX3NlcnZl
cl9ydW5fYXN5bmMobV9zb3VwU2VydmVyLmdldCgpKTsKLSAgICBzb3VwX3NlcnZlcl9hZGRfaGFu
ZGxlcihtX3NvdXBTZXJ2ZXIuZ2V0KCksIDAsIHNlcnZlckNhbGxiYWNrLCAwLCAwKTsKLX0KLQot
Q1N0cmluZyBXZWJLaXRUZXN0U2VydmVyOjpnZXRVUklGb3JQYXRoKGNvbnN0IGNoYXIqIHBhdGgp
Ci17Ci0gICAgU291cFVSSSogdXJpID0gc291cF91cmlfbmV3X3dpdGhfYmFzZShtX2Jhc2VVUkks
IHBhdGgpOwotICAgIEdPd25QdHI8Z2NoYXI+IHVyaVN0cmluZyhzb3VwX3VyaV90b19zdHJpbmco
dXJpLCBGQUxTRSkpOwotICAgIHNvdXBfdXJpX2ZyZWUodXJpKTsKLSAgICByZXR1cm4gdXJpU3Ry
aW5nLmdldCgpOwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9XZWJLaXRUZXN0U2VydmVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9XZWJLaXRUZXN0U2VydmVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGQ0NjI2ZjYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvV2ViS2l0VGVzdFNlcnZlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFdlYktp
dFRlc3RTZXJ2ZXJfaAotI2RlZmluZSBXZWJLaXRUZXN0U2VydmVyX2gKLQotI2luY2x1ZGUgPGxp
YnNvdXAvc291cC5oPgotI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgotI2luY2x1ZGUgPHd0
Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLWNs
YXNzIFdlYktpdFRlc3RTZXJ2ZXIgewotcHVibGljOgotCi0gICAgZW51bSBTZXJ2ZXJUeXBlIHsK
LSAgICAgICAgU2VydmVySFRUUCwKLSAgICAgICAgU2VydmVySFRUUFMKLSAgICB9OwotCi0gICAg
V2ViS2l0VGVzdFNlcnZlcihTZXJ2ZXJUeXBlIHR5cGUgPSBTZXJ2ZXJIVFRQKTsKLSAgICB2aXJ0
dWFsIH5XZWJLaXRUZXN0U2VydmVyKCk7Ci0KLSAgICBTb3VwVVJJKiBiYXNlVVJJKCkgeyByZXR1
cm4gbV9iYXNlVVJJOyB9Ci0KLSAgICBDU3RyaW5nIGdldFVSSUZvclBhdGgoY29uc3QgY2hhciog
cGF0aCk7Ci0gICAgdm9pZCBydW4oU291cFNlcnZlckNhbGxiYWNrKTsKLQotcHJpdmF0ZToKLSAg
ICBHUmVmUHRyPFNvdXBTZXJ2ZXI+IG1fc291cFNlcnZlcjsKLSAgICBTb3VwVVJJKiBtX2Jhc2VV
Ukk7Ci19OwotCi0jZW5kaWYgLy8gV2ViS2l0VGVzdFNlcnZlcl9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJQcm9jZXNzVGVzdC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJQcm9jZXNzVGVzdC5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5MWE2ZTcuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViUHJvY2Vzc1Rlc3QuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
SWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NUZXN0
LmgiCi0KLSNpbmNsdWRlIDxnaW8vZ2lvLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0
ci5oPgotCi10eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBzdGQ6OmZ1bmN0aW9uPFBhc3NPd25QdHI8
V2ViUHJvY2Vzc1Rlc3Q+ICgpPj4gVGVzdHNNYXA7Ci1zdGF0aWMgVGVzdHNNYXAmIHRlc3RzTWFw
KCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFRlc3RzTWFwLCBzX3Rlc3RzTWFwLCAoKSk7
Ci0gICAgcmV0dXJuIHNfdGVzdHNNYXA7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Rlc3Q6OmFkZChj
b25zdCBTdHJpbmcmIHRlc3ROYW1lLCBzdGQ6OmZ1bmN0aW9uPFBhc3NPd25QdHI8V2ViUHJvY2Vz
c1Rlc3Q+ICgpPiBjbG9zdXJlKQotewotICAgIHRlc3RzTWFwKCkuYWRkKHRlc3ROYW1lLCBzdGQ6
OmZvcndhcmQ8c3RkOjpmdW5jdGlvbjxQYXNzT3duUHRyPFdlYlByb2Nlc3NUZXN0PiAoKT4+KGNs
b3N1cmUpKTsKLX0KLQotUGFzc093blB0cjxXZWJQcm9jZXNzVGVzdD4gV2ViUHJvY2Vzc1Rlc3Q6
OmNyZWF0ZShjb25zdCBTdHJpbmcmIHRlc3ROYW1lKQotewotICAgIGdfYXNzZXJ0KHRlc3RzTWFw
KCkuY29udGFpbnModGVzdE5hbWUpKTsKLSAgICByZXR1cm4gdGVzdHNNYXAoKS5nZXQodGVzdE5h
bWUpKCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyIGludHJvc3BlY3Rpb25YTUxbXSA9Ci0gICAg
Ijxub2RlPiIKLSAgICAiIDxpbnRlcmZhY2UgbmFtZT0nb3JnLndlYmtpdC5ndGsuV2ViUHJvY2Vz
c1Rlc3QnPiIKLSAgICAiICA8bWV0aG9kIG5hbWU9J1J1blRlc3QnPiIKLSAgICAiICAgPGFyZyB0
eXBlPSdzJyBuYW1lPSdwYXRoJyBkaXJlY3Rpb249J2luJy8+IgotICAgICIgICA8YXJnIHR5cGU9
J2F7c3Z9JyBuYW1lPSdhcmdzJyBkaXJlY3Rpb249J2luJy8+IgotICAgICIgICA8YXJnIHR5cGU9
J2InIG5hbWU9J3Jlc3VsdCcgZGlyZWN0aW9uPSdvdXQnLz4iCi0gICAgIiAgPC9tZXRob2Q+Igot
ICAgICIgPC9pbnRlcmZhY2U+IgotICAgICI8L25vZGU+IjsKLQotc3RhdGljIHZvaWQgbWV0aG9k
Q2FsbENhbGxiYWNrKEdEQnVzQ29ubmVjdGlvbiogY29ubmVjdGlvbiwgY29uc3QgY2hhciogc2Vu
ZGVyLCBjb25zdCBjaGFyKiBvYmplY3RQYXRoLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBj
b25zdCBjaGFyKiBtZXRob2ROYW1lLCBHVmFyaWFudCogcGFyYW1ldGVycywgR0RCdXNNZXRob2RJ
bnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBncG9pbnRlciB1c2VyRGF0YSkKLXsKLSAgICBpZiAoZ19z
dHJjbXAwKGludGVyZmFjZU5hbWUsICJvcmcud2Via2l0Lmd0ay5XZWJQcm9jZXNzVGVzdCIpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAiUnVuVGVz
dCIpKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIHRlc3RQYXRoOwotICAgICAgICBHVmFyaWFudCog
YXJnczsKLSAgICAgICAgZ192YXJpYW50X2dldChwYXJhbWV0ZXJzLCAiKCZzQGF7c3Z9KSIsICZ0
ZXN0UGF0aCwgJmFyZ3MpOwotICAgICAgICBPd25QdHI8V2ViUHJvY2Vzc1Rlc3Q+IHRlc3QgPSBX
ZWJQcm9jZXNzVGVzdDo6Y3JlYXRlKFN0cmluZzo6ZnJvbVVURjgodGVzdFBhdGgpKTsKLSAgICAg
ICAgYm9vbCByZXN1bHQgPSB0ZXN0LT5ydW5UZXN0KGdfc3RycnN0cih0ZXN0UGF0aCwgIi8iKSAr
IDEsIFdFQktJVF9XRUJfRVhURU5TSU9OKHVzZXJEYXRhKSwgYXJncyk7Ci0gICAgICAgIGdfdmFy
aWFudF91bnJlZihhcmdzKTsKLQotICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9jYXRpb25fcmV0
dXJuX3ZhbHVlKGludm9jYXRpb24sIGdfdmFyaWFudF9uZXcoIihiKSIsIHJlc3VsdCkpOwotICAg
IH0gZWxzZQotICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotfQotCi1zdGF0aWMgY29u
c3QgR0RCdXNJbnRlcmZhY2VWVGFibGUgaW50ZXJmYWNlVmlydHVhbFRhYmxlID0gewotICAgIG1l
dGhvZENhbGxDYWxsYmFjaywgMCwgMCwgeyAwLCB9Ci19OwotCi1zdGF0aWMgdm9pZCBidXNBY3F1
aXJlZENhbGxiYWNrKEdEQnVzQ29ubmVjdGlvbiogY29ubmVjdGlvbiwgY29uc3QgY2hhciogbmFt
ZSwgZ3BvaW50ZXIgdXNlckRhdGEpCi17Ci0gICAgc3RhdGljIEdEQnVzTm9kZUluZm8gKmludHJv
c3BlY3Rpb25EYXRhID0gMDsKLSAgICBpZiAoIWludHJvc3BlY3Rpb25EYXRhKQotICAgICAgICBp
bnRyb3NwZWN0aW9uRGF0YSA9IGdfZGJ1c19ub2RlX2luZm9fbmV3X2Zvcl94bWwoaW50cm9zcGVj
dGlvblhNTCwgMCk7Ci0KLSAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgdW5zaWduZWQg
cmVnaXN0cmF0aW9uSUQgPSBnX2RidXNfY29ubmVjdGlvbl9yZWdpc3Rlcl9vYmplY3QoCi0gICAg
ICAgIGNvbm5lY3Rpb24sCi0gICAgICAgICIvb3JnL3dlYmtpdC9ndGsvV2ViUHJvY2Vzc1Rlc3Qi
LAotICAgICAgICBpbnRyb3NwZWN0aW9uRGF0YS0+aW50ZXJmYWNlc1swXSwKLSAgICAgICAgJmlu
dGVyZmFjZVZpcnR1YWxUYWJsZSwKLSAgICAgICAgZ19vYmplY3RfcmVmKHVzZXJEYXRhKSwKLSAg
ICAgICAgc3RhdGljX2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGdfb2JqZWN0X3VucmVmKSwKLSAgICAg
ICAgJmVycm9yLm91dFB0cigpKTsKLSAgICBpZiAoIXJlZ2lzdHJhdGlvbklEKQotICAgICAgICBn
X3dhcm5pbmcoIkZhaWxlZCB0byByZWdpc3RlciBvYmplY3Q6ICVzXG4iLCBlcnJvci0+bWVzc2Fn
ZSk7Ci19Ci0KLWV4dGVybiAiQyIgdm9pZCB3ZWJraXRfd2ViX2V4dGVuc2lvbl9pbml0aWFsaXpl
KFdlYktpdFdlYkV4dGVuc2lvbiogZXh0ZW5zaW9uKQotewotICAgIGdfYnVzX293bl9uYW1lKAot
ICAgICAgICBHX0JVU19UWVBFX1NFU1NJT04sCi0gICAgICAgICJvcmcud2Via2l0Lmd0ay5XZWJQ
cm9jZXNzVGVzdCIsCi0gICAgICAgIEdfQlVTX05BTUVfT1dORVJfRkxBR1NfTk9ORSwKLSAgICAg
ICAgYnVzQWNxdWlyZWRDYWxsYmFjaywKLSAgICAgICAgMCwgMCwKLSAgICAgICAgZ19vYmplY3Rf
cmVmKGV4dGVuc2lvbiksCi0gICAgICAgIHN0YXRpY19jYXN0PEdEZXN0cm95Tm90aWZ5PihnX29i
amVjdF91bnJlZikpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvV2ViUHJvY2Vzc1Rlc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL1dlYlByb2Nlc3NUZXN0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGUzZWVkZDAuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvV2ViUHJvY2Vzc1Rlc3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPHdlYmtpdDIv
d2Via2l0LXdlYi1leHRlbnNpb24uaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1
ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KLQotY2xhc3MgV2ViUHJvY2Vzc1Rlc3QgewotcHVibGljOgotICAgIHZpcnR1YWwg
fldlYlByb2Nlc3NUZXN0KCkgeyB9Ci0gICAgdmlydHVhbCBib29sIHJ1blRlc3QoY29uc3QgY2hh
ciogdGVzdE5hbWUsIFdlYktpdFdlYkV4dGVuc2lvbiosIEdWYXJpYW50KiBhcmdzKSA9IDA7Ci0K
LSAgICBzdGF0aWMgdm9pZCBhZGQoY29uc3QgU3RyaW5nJiB0ZXN0TmFtZSwgc3RkOjpmdW5jdGlv
bjxQYXNzT3duUHRyPFdlYlByb2Nlc3NUZXN0PiAoKT4pOwotICAgIHN0YXRpYyBQYXNzT3duUHRy
PFdlYlByb2Nlc3NUZXN0PiBjcmVhdGUoY29uc3QgU3RyaW5nJiB0ZXN0TmFtZSk7Ci19OwotCi0j
ZGVmaW5lIFJFR0lTVEVSX1RFU1QoQ2xhc3NOYW1lLCBUZXN0TmFtZSkgXAotICAgIFdlYlByb2Nl
c3NUZXN0OjphZGQoU3RyaW5nOjpmcm9tVVRGOChUZXN0TmFtZSksIENsYXNzTmFtZTo6Y3JlYXRl
KQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9X
ZWJQcm9jZXNzVGVzdFJ1bm5lci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9XZWJQcm9jZXNzVGVzdFJ1bm5lci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDRhM2NkOTYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvV2ViUHJvY2Vzc1Rlc3RSdW5uZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MTE1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgSWdhbGlhIFMuTC4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NUZXN0UnVubmVyLmgiCi0KLSNpbmNs
dWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0KLVdlYlByb2Nlc3NUZXN0UnVubmVyOjpXZWJQ
cm9jZXNzVGVzdFJ1bm5lcigpCi0gICAgOiBtX21haW5Mb29wKGdfbWFpbl9sb29wX25ldygwLCBU
UlVFKSkKLSAgICAsIG1fYnVzKGFkb3B0R1JlZihnX3Rlc3RfZGJ1c19uZXcoR19URVNUX0RCVVNf
Tk9ORSkpKQotewotICAgIC8vIFNhdmUgdGhlIERJU1BMQVkgZW52IHZhciB0byByZXN0b3JlIGl0
IGFmdGVyIGNhbGxpbmcgZ190ZXN0X2RidXNfdXAoKSB0aGF0IHVuc2V0cyBpdC4KLSAgICAvLyBT
ZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNTYyMS4KLSAgICBj
b25zdCBjaGFyKiBkaXNwbGF5ID0gZ19nZXRlbnYoIkRJU1BMQVkiKTsKLSAgICBnX3Rlc3RfZGJ1
c191cChtX2J1cy5nZXQoKSk7Ci0gICAgZ19zZXRlbnYoIkRJU1BMQVkiLCBkaXNwbGF5LCBGQUxT
RSk7Ci0gICAgbV9jb25uZWN0aW9uID0gYWRvcHRHUmVmKGdfYnVzX2dldF9zeW5jKEdfQlVTX1RZ
UEVfU0VTU0lPTiwgMCwgMCkpOwotfQotCi1XZWJQcm9jZXNzVGVzdFJ1bm5lcjo6fldlYlByb2Nl
c3NUZXN0UnVubmVyKCkKLXsKLSAgICBnX21haW5fbG9vcF91bnJlZihtX21haW5Mb29wKTsKLQot
ICAgIC8vIGdfdGVzdF9kYnVzX2Rvd24gd2FpdHMgdW50aWwgdGhlIGNvbm5lY3Rpb24gaXMgZnJl
ZWQsIHNvIHJlbGVhc2Ugb3VyIHJlZnMgZXhwbGljaXRseSBiZWZvcmUgY2FsbGluZyBpdC4KLSAg
ICBtX2Nvbm5lY3Rpb24gPSAwOwotICAgIG1fcHJveHkgPSAwOwotICAgIGdfdGVzdF9kYnVzX2Rv
d24obV9idXMuZ2V0KCkpOwotfQotCi12b2lkIFdlYlByb2Nlc3NUZXN0UnVubmVyOjpwcm94eUNy
ZWF0ZWRDYWxsYmFjayhHT2JqZWN0KiwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIFdlYlByb2Nlc3NU
ZXN0UnVubmVyKiB0ZXN0UnVubmVyKQotewotICAgIHRlc3RSdW5uZXItPm1fcHJveHkgPSBhZG9w
dEdSZWYoZ19kYnVzX3Byb3h5X25ld19maW5pc2gocmVzdWx0LCAwKSk7Ci0gICAgZ19tYWluX2xv
b3BfcXVpdCh0ZXN0UnVubmVyLT5tX21haW5Mb29wKTsKLX0KLQotR0RCdXNQcm94eSogV2ViUHJv
Y2Vzc1Rlc3RSdW5uZXI6OnByb3h5KCkKLXsKLSAgICBpZiAobV9wcm94eSkKLSAgICAgICAgcmV0
dXJuIG1fcHJveHkuZ2V0KCk7Ci0KLSAgICBnX2RidXNfcHJveHlfbmV3KG1fY29ubmVjdGlvbi5n
ZXQoKSwgR19EQlVTX1BST1hZX0ZMQUdTX0RPX05PVF9BVVRPX1NUQVJULCAwLAotICAgICAgICAi
b3JnLndlYmtpdC5ndGsuV2ViUHJvY2Vzc1Rlc3QiLCAiL29yZy93ZWJraXQvZ3RrL1dlYlByb2Nl
c3NUZXN0IiwgIm9yZy53ZWJraXQuZ3RrLldlYlByb2Nlc3NUZXN0IiwKLSAgICAgICAgMCwgcmVp
bnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihXZWJQcm9jZXNzVGVzdFJ1bm5lcjo6
cHJveHlDcmVhdGVkQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX21haW5fbG9vcF9ydW4obV9tYWlu
TG9vcCk7Ci0gICAgZ19hc3NlcnQobV9wcm94eS5nZXQoKSk7Ci0KLSAgICByZXR1cm4gbV9wcm94
eS5nZXQoKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzVGVzdFJ1bm5lcjo6b25OYW1lQXBwZWFyZWQo
R0RCdXNDb25uZWN0aW9uKiwgY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBncG9pbnRlciB1c2Vy
RGF0YSkKLXsKLSAgICBXZWJQcm9jZXNzVGVzdFJ1bm5lciogdGVzdFJ1bm5lciA9IHN0YXRpY19j
YXN0PFdlYlByb2Nlc3NUZXN0UnVubmVyKj4odXNlckRhdGEpOwotICAgIGdfbWFpbl9sb29wX3F1
aXQodGVzdFJ1bm5lci0+bV9tYWluTG9vcCk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Rlc3RSdW5u
ZXI6Om9uTmFtZVZhbmlzaGVkKEdEQnVzQ29ubmVjdGlvbiosIGNvbnN0IGNoYXIqIG5hbWUsIGdw
b2ludGVyIHVzZXJEYXRhKQotewotICAgIF9leGl0KDEpOwotfQotCi12b2lkIFdlYlByb2Nlc3NU
ZXN0UnVubmVyOjp0ZXN0RmluaXNoZWRDYWxsYmFjayhHREJ1c1Byb3h5KiBwcm94eSwgR0FzeW5j
UmVzdWx0KiByZXN1bHQsIFdlYlByb2Nlc3NUZXN0UnVubmVyKiB0ZXN0UnVubmVyKQotewotICAg
IEdSZWZQdHI8R1ZhcmlhbnQ+IHJldHVyblZhbHVlID0gYWRvcHRHUmVmKGdfZGJ1c19wcm94eV9j
YWxsX2ZpbmlzaChwcm94eSwgcmVzdWx0LCAwKSk7Ci0gICAgZ19hc3NlcnQocmV0dXJuVmFsdWUu
Z2V0KCkpOwotICAgIGdib29sZWFuIHRlc3RSZXN1bHQ7Ci0gICAgZ192YXJpYW50X2dldChyZXR1
cm5WYWx1ZS5nZXQoKSwgIihiKSIsICZ0ZXN0UmVzdWx0KTsKLSAgICB0ZXN0UnVubmVyLT5maW5p
c2hUZXN0KHRlc3RSZXN1bHQpOwotfQotCi1ib29sIFdlYlByb2Nlc3NUZXN0UnVubmVyOjpydW5U
ZXN0KGNvbnN0IGNoYXIqIHN1aXRlTmFtZSwgY29uc3QgY2hhciogdGVzdE5hbWUsIEdWYXJpYW50
KiBhcmdzKQotewotICAgIGdfYXNzZXJ0KGdfdmFyaWFudF9pc19vZl90eXBlKGFyZ3MsIEdfVkFS
SUFOVF9UWVBFX1ZBUkRJQ1QpKTsKLQotICAgIHVuc2lnbmVkIHdhdGNoZXJJRCA9IGdfYnVzX3dh
dGNoX25hbWVfb25fY29ubmVjdGlvbihtX2Nvbm5lY3Rpb24uZ2V0KCksICJvcmcud2Via2l0Lmd0
ay5XZWJQcm9jZXNzVGVzdCIsIEdfQlVTX05BTUVfV0FUQ0hFUl9GTEFHU19OT05FLAotICAgICAg
ICBXZWJQcm9jZXNzVGVzdFJ1bm5lcjo6b25OYW1lQXBwZWFyZWQsIFdlYlByb2Nlc3NUZXN0UnVu
bmVyOjpvbk5hbWVWYW5pc2hlZCwgdGhpcywgMCk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKG1fbWFp
bkxvb3ApOwotCi0gICAgbV90ZXN0UmVzdWx0ID0gZmFsc2U7Ci0gICAgR093blB0cjxjaGFyPiB0
ZXN0UGF0aChnX3N0cmR1cF9wcmludGYoIiVzLyVzIiwgc3VpdGVOYW1lLCB0ZXN0TmFtZSkpOwot
ICAgIGdfZGJ1c19wcm94eV9jYWxsKAotICAgICAgICBwcm94eSgpLAotICAgICAgICAiUnVuVGVz
dCIsCi0gICAgICAgIGdfdmFyaWFudF9uZXcoIihzQGF7c3Z9KSIsIHRlc3RQYXRoLmdldCgpLCBh
cmdzKSwKLSAgICAgICAgR19EQlVTX0NBTExfRkxBR1NfTk9ORSwKLSAgICAgICAgLTEsIDAsCi0g
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4oV2ViUHJvY2Vzc1Rl
c3RSdW5uZXI6OnRlc3RGaW5pc2hlZENhbGxiYWNrKSwKLSAgICAgICAgdGhpcyk7Ci0gICAgZ19t
YWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotICAgIGdfYnVzX3Vud2F0Y2hfbmFtZSh3YXRjaGVy
SUQpOwotCi0gICAgcmV0dXJuIG1fdGVzdFJlc3VsdDsKLX0KLQotdm9pZCBXZWJQcm9jZXNzVGVz
dFJ1bm5lcjo6ZmluaXNoVGVzdChib29sIHJlc3VsdCkKLXsKLSAgICBtX3Rlc3RSZXN1bHQgPSBy
ZXN1bHQ7Ci0gICAgZ19tYWluX2xvb3BfcXVpdChtX21haW5Mb29wKTsKLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlByb2Nlc3NUZXN0UnVu
bmVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJQcm9jZXNz
VGVzdFJ1bm5lci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDBmYTk2Li4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlByb2Nl
c3NUZXN0UnVubmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgV2ViUHJvY2Vzc1Rlc3RSdW5uZXJf
aAotI2RlZmluZSBXZWJQcm9jZXNzVGVzdFJ1bm5lcl9oCi0KLSNpbmNsdWRlIDxnaW8vZ2lvLmg+
Ci0jaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1Jl
ZlB0ci5oPgotCi1jbGFzcyBXZWJQcm9jZXNzVGVzdFJ1bm5lciB7Ci1wdWJsaWM6Ci0gICAgV2Vi
UHJvY2Vzc1Rlc3RSdW5uZXIoKTsKLSAgICB+V2ViUHJvY2Vzc1Rlc3RSdW5uZXIoKTsKLQotICAg
IGJvb2wgcnVuVGVzdChjb25zdCBjaGFyKiBzdWl0ZU5hbWUsIGNvbnN0IGNoYXIqIHRlc3ROYW1l
LCBHVmFyaWFudCogYXJncyk7Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIHZvaWQgcHJveHlDcmVh
dGVkQ2FsbGJhY2soR09iamVjdCosIEdBc3luY1Jlc3VsdCosIFdlYlByb2Nlc3NUZXN0UnVubmVy
Kik7Ci0gICAgc3RhdGljIHZvaWQgb25OYW1lQXBwZWFyZWQoR0RCdXNDb25uZWN0aW9uKiwgY29u
c3QgY2hhciosIGNvbnN0IGNoYXIqLCBncG9pbnRlcik7Ci0gICAgc3RhdGljIHZvaWQgb25OYW1l
VmFuaXNoZWQoR0RCdXNDb25uZWN0aW9uKiwgY29uc3QgY2hhciosIGdwb2ludGVyKTsKLSAgICBz
dGF0aWMgdm9pZCB0ZXN0RmluaXNoZWRDYWxsYmFjayhHREJ1c1Byb3h5KiwgR0FzeW5jUmVzdWx0
KiwgV2ViUHJvY2Vzc1Rlc3RSdW5uZXIqKTsKLQotICAgIEdEQnVzUHJveHkqIHByb3h5KCk7Ci0g
ICAgdm9pZCBmaW5pc2hUZXN0KGJvb2wgcmVzdWx0KTsKLQotICAgIEdNYWluTG9vcCogbV9tYWlu
TG9vcDsKLSAgICBHUmVmUHRyPEdUZXN0REJ1cz4gbV9idXM7Ci0gICAgR1JlZlB0cjxHREJ1c0Nv
bm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKLSAgICBHUmVmUHRyPEdEQnVzUHJveHk+IG1fcHJveHk7
Ci0gICAgYm9vbCBtX3Rlc3RSZXN1bHQ7Ci19OwotCi0jZW5kaWYgLy8gV2ViUHJvY2Vzc1Rlc3RS
dW5uZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvV2ViVmlld1Rlc3QuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvV2ViVmlld1Rlc3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmM4NDM0
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dl
YlZpZXdUZXN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ0NCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIw
MTEgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgotCi0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dPd25QdHJHdGsuaD4K
LQotV2ViVmlld1Rlc3Q6OldlYlZpZXdUZXN0KCkKLSAgICA6IG1fd2ViVmlldyhXRUJLSVRfV0VC
X1ZJRVcoZ19vYmplY3RfcmVmX3Npbmsod2Via2l0X3dlYl92aWV3X25ldygpKSkpCi0gICAgLCBt
X21haW5Mb29wKGdfbWFpbl9sb29wX25ldygwLCBUUlVFKSkKLSAgICAsIG1fcGFyZW50V2luZG93
KDApCi0gICAgLCBtX2phdmFzY3JpcHRSZXN1bHQoMCkKLSAgICAsIG1fcmVzb3VyY2VEYXRhU2l6
ZSgwKQotICAgICwgbV9zdXJmYWNlKDApCi17Ci0gICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hl
blRlc3RGaW5pc2hlcyhHX09CSkVDVChtX3dlYlZpZXcpKTsKLX0KLQotV2ViVmlld1Rlc3Q6On5X
ZWJWaWV3VGVzdCgpCi17Ci0gICAgaWYgKG1fcGFyZW50V2luZG93KQotICAgICAgICBndGtfd2lk
Z2V0X2Rlc3Ryb3kobV9wYXJlbnRXaW5kb3cpOwotICAgIGlmIChtX2phdmFzY3JpcHRSZXN1bHQp
Ci0gICAgICAgIHdlYmtpdF9qYXZhc2NyaXB0X3Jlc3VsdF91bnJlZihtX2phdmFzY3JpcHRSZXN1
bHQpOwotICAgIGlmIChtX3N1cmZhY2UpCi0gICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveSht
X3N1cmZhY2UpOwotICAgIGdfb2JqZWN0X3VucmVmKG1fd2ViVmlldyk7Ci0gICAgZ19tYWluX2xv
b3BfdW5yZWYobV9tYWluTG9vcCk7Ci19Ci0KLXZvaWQgV2ViVmlld1Rlc3Q6OmxvYWRVUkkoY29u
c3QgY2hhciogdXJpKQotewotICAgIG1fYWN0aXZlVVJJID0gdXJpOwotICAgIHdlYmtpdF93ZWJf
dmlld19sb2FkX3VyaShtX3dlYlZpZXcsIHVyaSk7Ci19Ci0KLXZvaWQgV2ViVmlld1Rlc3Q6Omxv
YWRIdG1sKGNvbnN0IGNoYXIqIGh0bWwsIGNvbnN0IGNoYXIqIGJhc2VVUkkpCi17Ci0gICAgaWYg
KCFiYXNlVVJJKQotICAgICAgICBtX2FjdGl2ZVVSSSA9ICJhYm91dDpibGFuayI7Ci0gICAgZWxz
ZQotICAgICAgICBtX2FjdGl2ZVVSSSA9IGJhc2VVUkk7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xv
YWRfaHRtbChtX3dlYlZpZXcsIGh0bWwsIGJhc2VVUkkpOwotfQotCi12b2lkIFdlYlZpZXdUZXN0
Ojpsb2FkUGxhaW5UZXh0KGNvbnN0IGNoYXIqIHBsYWluVGV4dCkKLXsKLSAgICBtX2FjdGl2ZVVS
SSA9ICJhYm91dDpibGFuayI7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfcGxhaW5fdGV4dCht
X3dlYlZpZXcsIHBsYWluVGV4dCk7Ci19Ci0KLXZvaWQgV2ViVmlld1Rlc3Q6OmxvYWRSZXF1ZXN0
KFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QpCi17Ci0gICAgbV9hY3RpdmVVUkkgPSB3ZWJraXRf
dXJpX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9y
ZXF1ZXN0KG1fd2ViVmlldywgcmVxdWVzdCk7Ci19Ci0KLXZvaWQgV2ViVmlld1Rlc3Q6OmxvYWRB
bHRlcm5hdGVIVE1MKGNvbnN0IGNoYXIqIGh0bWwsIGNvbnN0IGNoYXIqIGNvbnRlbnRVUkksIGNv
bnN0IGNoYXIqIGJhc2VVUkkpCi17Ci0gICAgbV9hY3RpdmVVUkkgPSBjb250ZW50VVJJOwotICAg
IHdlYmtpdF93ZWJfdmlld19sb2FkX2FsdGVybmF0ZV9odG1sKG1fd2ViVmlldywgaHRtbCwgY29u
dGVudFVSSSwgYmFzZVVSSSk7Ci19Ci0KLXZvaWQgV2ViVmlld1Rlc3Q6OmdvQmFjaygpCi17Ci0g
ICAgaWYgKHdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayhtX3dlYlZpZXcpKSB7Ci0gICAgICAg
IFdlYktpdEJhY2tGb3J3YXJkTGlzdCogbGlzdCA9IHdlYmtpdF93ZWJfdmlld19nZXRfYmFja19m
b3J3YXJkX2xpc3QobV93ZWJWaWV3KTsKLSAgICAgICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRl
bSogaXRlbSA9IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbnRoX2l0ZW0obGlzdCwgLTEp
OwotICAgICAgICBtX2FjdGl2ZVVSSSA9IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dl
dF9vcmlnaW5hbF91cmkoaXRlbSk7Ci0gICAgfQotCi0gICAgLy8gQ2FsbCBnb19iYWNrIGV2ZW4g
d2hlbiBjYW5fZ29fYmFjayByZXR1cm5zIEZBTFNFIHRvIGNoZWNrIG5vdGhpbmcgaGFwcGVucy4K
LSAgICB3ZWJraXRfd2ViX3ZpZXdfZ29fYmFjayhtX3dlYlZpZXcpOwotfQotCi12b2lkIFdlYlZp
ZXdUZXN0Ojpnb0ZvcndhcmQoKQotewotICAgIGlmICh3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2Zv
cndhcmQobV93ZWJWaWV3KSkgewotICAgICAgICBXZWJLaXRCYWNrRm9yd2FyZExpc3QqIGxpc3Qg
PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2JhY2tfZm9yd2FyZF9saXN0KG1fd2ViVmlldyk7Ci0gICAg
ICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW0gPSB3ZWJraXRfYmFja19mb3J3YXJk
X2xpc3RfZ2V0X250aF9pdGVtKGxpc3QsIDEpOwotICAgICAgICBtX2FjdGl2ZVVSSSA9IHdlYmtp
dF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dldF9vcmlnaW5hbF91cmkoaXRlbSk7Ci0gICAgfQot
Ci0gICAgLy8gQ2FsbCBnb19mb3J3YXJkIGV2ZW4gd2hlbiBjYW5fZ29fZm9yd2FyZCByZXR1cm5z
IEZBTFNFIHRvIGNoZWNrIG5vdGhpbmcgaGFwcGVucy4KLSAgICB3ZWJraXRfd2ViX3ZpZXdfZ29f
Zm9yd2FyZChtX3dlYlZpZXcpOwotfQotCi12b2lkIFdlYlZpZXdUZXN0Ojpnb1RvQmFja0Zvcndh
cmRMaXN0SXRlbShXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiBpdGVtKQotewotICAgIG1fYWN0
aXZlVVJJID0gd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0X29yaWdpbmFsX3VyaShp
dGVtKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfZ29fdG9fYmFja19mb3J3YXJkX2xpc3RfaXRlbSht
X3dlYlZpZXcsIGl0ZW0pOwotfQotCi12b2lkIFdlYlZpZXdUZXN0OjpxdWl0TWFpbkxvb3AoKQot
ewotICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7Ci19Ci0KLXZvaWQgV2ViVmlld1Rl
c3Q6OnF1aXRNYWluTG9vcEFmdGVyUHJvY2Vzc2luZ1BlbmRpbmdFdmVudHMoKQotewotICAgIHdo
aWxlIChndGtfZXZlbnRzX3BlbmRpbmcoKSkKLSAgICAgICAgZ3RrX21haW5faXRlcmF0aW9uKCk7
Ci0gICAgcXVpdE1haW5Mb29wKCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBxdWl0TWFpbkxvb3BJ
ZGxlQ2FsbGJhY2soV2ViVmlld1Rlc3QqIHRlc3QpCi17Ci0gICAgdGVzdC0+cXVpdE1haW5Mb29w
KCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCi12b2lkIFdlYlZpZXdUZXN0Ojp3YWl0KGRvdWJs
ZSBzZWNvbmRzKQotewotICAgIGdfdGltZW91dF9hZGRfc2Vjb25kcyhzZWNvbmRzLCByZWludGVy
cHJldF9jYXN0PEdTb3VyY2VGdW5jPihxdWl0TWFpbkxvb3BJZGxlQ2FsbGJhY2spLCB0aGlzKTsK
LSAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGxvYWRD
aGFuZ2VkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdExvYWRFdmVudCBsb2FkRXZlbnQs
IFdlYlZpZXdUZXN0KiB0ZXN0KQotewotICAgIGlmIChsb2FkRXZlbnQgIT0gV0VCS0lUX0xPQURf
RklOSVNIRUQpCi0gICAgICAgIHJldHVybjsKLSAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25u
ZWN0X2J5X2Z1bmMod2ViVmlldywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obG9hZENoYW5nZWQp
LCB0ZXN0KTsKLSAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOwotfQotCi12
b2lkIFdlYlZpZXdUZXN0Ojp3YWl0VW50aWxMb2FkRmluaXNoZWQoKQotewotICAgIGdfc2lnbmFs
X2Nvbm5lY3QobV93ZWJWaWV3LCAibG9hZC1jaGFuZ2VkIiwgR19DQUxMQkFDSyhsb2FkQ2hhbmdl
ZCksIHRoaXMpOwotICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLX0KLQotc3RhdGlj
IHZvaWQgdGl0bGVDaGFuZ2VkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEdQYXJhbVNwZWMqLCBX
ZWJWaWV3VGVzdCogdGVzdCkKLXsKLSAgICBpZiAoIXRlc3QtPm1fZXhwZWN0ZWRUaXRsZS5pc051
bGwoKSAmJiB0ZXN0LT5tX2V4cGVjdGVkVGl0bGUgIT0gd2Via2l0X3dlYl92aWV3X2dldF90aXRs
ZSh3ZWJWaWV3KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZ19zaWduYWxfaGFuZGxlcnNfZGlz
Y29ubmVjdF9ieV9mdW5jKHdlYlZpZXcsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHRpdGxlQ2hh
bmdlZCksIHRlc3QpOwotICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7Ci19
Ci0KLXZvaWQgV2ViVmlld1Rlc3Q6OndhaXRVbnRpbFRpdGxlQ2hhbmdlZFRvKGNvbnN0IGNoYXIq
IGV4cGVjdGVkVGl0bGUpCi17Ci0gICAgbV9leHBlY3RlZFRpdGxlID0gZXhwZWN0ZWRUaXRsZTsK
LSAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgIm5vdGlmeTo6dGl0bGUiLCBHX0NBTExC
QUNLKHRpdGxlQ2hhbmdlZCksIHRoaXMpOwotICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29w
KTsKLSAgICBtX2V4cGVjdGVkVGl0bGUgPSBDU3RyaW5nKCk7Ci19Ci0KLXZvaWQgV2ViVmlld1Rl
c3Q6OndhaXRVbnRpbFRpdGxlQ2hhbmdlZCgpCi17Ci0gICAgd2FpdFVudGlsVGl0bGVDaGFuZ2Vk
VG8oMCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBwYXJlbnRXaW5kb3dNYXBwZWQoR3RrV2lkZ2V0
KiB3aWRnZXQsIEdka0V2ZW50KiwgV2ViVmlld1Rlc3QqIHRlc3QpCi17Ci0gICAgZ19zaWduYWxf
aGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKHdpZGdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4ocGFyZW50V2luZG93TWFwcGVkKSwgdGVzdCk7Ci0gICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0
LT5tX21haW5Mb29wKTsKLQotICAgIHJldHVybiBGQUxTRTsKLX0KLQotdm9pZCBXZWJWaWV3VGVz
dDo6c2hvd0luV2luZG93KEd0a1dpbmRvd1R5cGUgd2luZG93VHlwZSkKLXsKLSAgICBnX2Fzc2Vy
dCghbV9wYXJlbnRXaW5kb3cpOwotICAgIG1fcGFyZW50V2luZG93ID0gZ3RrX3dpbmRvd19uZXco
d2luZG93VHlwZSk7Ci0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihtX3BhcmVu
dFdpbmRvdyksIEdUS19XSURHRVQobV93ZWJWaWV3KSk7Ci0gICAgZ3RrX3dpZGdldF9zaG93KEdU
S19XSURHRVQobV93ZWJWaWV3KSk7Ci0gICAgZ3RrX3dpZGdldF9zaG93KG1fcGFyZW50V2luZG93
KTsKLX0KLQotdm9pZCBXZWJWaWV3VGVzdDo6c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVk
KEd0a1dpbmRvd1R5cGUgd2luZG93VHlwZSkKLXsKLSAgICBnX2Fzc2VydCghbV9wYXJlbnRXaW5k
b3cpOwotICAgIG1fcGFyZW50V2luZG93ID0gZ3RrX3dpbmRvd19uZXcod2luZG93VHlwZSk7Ci0g
ICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihtX3BhcmVudFdpbmRvdyksIEdUS19X
SURHRVQobV93ZWJWaWV3KSk7Ci0gICAgZ3RrX3dpZGdldF9zaG93KEdUS19XSURHRVQobV93ZWJW
aWV3KSk7Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fcGFyZW50V2luZG93LCAibWFwLWV2ZW50
IiwgR19DQUxMQkFDSyhwYXJlbnRXaW5kb3dNYXBwZWQpLCB0aGlzKTsKLSAgICBndGtfd2lkZ2V0
X3Nob3cobV9wYXJlbnRXaW5kb3cpOwotICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsK
LX0KLQotdm9pZCBXZWJWaWV3VGVzdDo6cmVzaXplVmlldyhpbnQgd2lkdGgsIGludCBoZWlnaHQp
Ci17Ci0gICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uOwotICAgIGd0a193aWRnZXRfZ2V0X2Fs
bG9jYXRpb24oR1RLX1dJREdFVChtX3dlYlZpZXcpLCAmYWxsb2NhdGlvbik7Ci0gICAgaWYgKHdp
ZHRoICE9IC0xKQotICAgICAgICBhbGxvY2F0aW9uLndpZHRoID0gd2lkdGg7Ci0gICAgaWYgKGhl
aWdodCAhPSAtMSkKLSAgICAgICAgYWxsb2NhdGlvbi5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgZ3Rr
X3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQobV93ZWJWaWV3KSwgJmFsbG9jYXRpb24p
OwotfQotCi12b2lkIFdlYlZpZXdUZXN0OjpzZWxlY3RBbGwoKQotewotICAgIHdlYmtpdF93ZWJf
dmlld19leGVjdXRlX2VkaXRpbmdfY29tbWFuZChtX3dlYlZpZXcsICJTZWxlY3RBbGwiKTsKLX0K
LQotc3RhdGljIHZvaWQgcmVzb3VyY2VHZXREYXRhQ2FsbGJhY2soR09iamVjdCogb2JqZWN0LCBH
QXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEpCi17Ci0gICAgc2l6ZV90IGRh
dGFTaXplOwotICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKLSAgICB1bnNpZ25lZCBjaGFyKiBk
YXRhID0gd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZGF0YV9maW5pc2goV0VCS0lUX1dFQl9SRVNP
VVJDRShvYmplY3QpLCByZXN1bHQsICZkYXRhU2l6ZSwgJmVycm9yLm91dFB0cigpKTsKLSAgICBn
X2Fzc2VydChkYXRhKTsKLQotICAgIFdlYlZpZXdUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8V2Vi
Vmlld1Rlc3QqPih1c2VyRGF0YSk7Ci0gICAgdGVzdC0+bV9yZXNvdXJjZURhdGEuc2V0KHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KGRhdGEpKTsKLSAgICB0ZXN0LT5tX3Jlc291cmNlRGF0YVNpemUg
PSBkYXRhU2l6ZTsKLSAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOwotfQot
Ci1jb25zdCBjaGFyKiBXZWJWaWV3VGVzdDo6bWFpblJlc291cmNlRGF0YShzaXplX3QmIG1haW5S
ZXNvdXJjZURhdGFTaXplKQotewotICAgIG1fcmVzb3VyY2VEYXRhU2l6ZSA9IDA7Ci0gICAgbV9y
ZXNvdXJjZURhdGEuY2xlYXIoKTsKLSAgICBXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UgPSB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2UobV93ZWJWaWV3KTsKLSAgICBnX2Fzc2Vy
dChyZXNvdXJjZSk7Ci0KLSAgICB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF9kYXRhKHJlc291cmNl
LCAwLCByZXNvdXJjZUdldERhdGFDYWxsYmFjaywgdGhpcyk7Ci0gICAgZ19tYWluX2xvb3BfcnVu
KG1fbWFpbkxvb3ApOwotCi0gICAgbWFpblJlc291cmNlRGF0YVNpemUgPSBtX3Jlc291cmNlRGF0
YVNpemU7Ci0gICAgcmV0dXJuIG1fcmVzb3VyY2VEYXRhLmdldCgpOwotfQotCi12b2lkIFdlYlZp
ZXdUZXN0Ojptb3VzZU1vdmVUbyhpbnQgeCwgaW50IHksIHVuc2lnbmVkIGludCBtb3VzZU1vZGlm
aWVycykKLXsKLSAgICBnX2Fzc2VydChtX3BhcmVudFdpbmRvdyk7Ci0gICAgR3RrV2lkZ2V0KiB2
aWV3V2lkZ2V0ID0gR1RLX1dJREdFVChtX3dlYlZpZXcpOwotICAgIGdfYXNzZXJ0KGd0a193aWRn
ZXRfZ2V0X3JlYWxpemVkKHZpZXdXaWRnZXQpKTsKLQotICAgIEdPd25QdHI8R2RrRXZlbnQ+IGV2
ZW50KGdka19ldmVudF9uZXcoR0RLX01PVElPTl9OT1RJRlkpKTsKLSAgICBldmVudC0+bW90aW9u
LnggPSB4OwotICAgIGV2ZW50LT5tb3Rpb24ueSA9IHk7Ci0KLSAgICBldmVudC0+bW90aW9uLnRp
bWUgPSBHREtfQ1VSUkVOVF9USU1FOwotICAgIGV2ZW50LT5tb3Rpb24ud2luZG93ID0gZ3RrX3dp
ZGdldF9nZXRfd2luZG93KHZpZXdXaWRnZXQpOwotICAgIGdfb2JqZWN0X3JlZihldmVudC0+bW90
aW9uLndpbmRvdyk7Ci0gICAgZXZlbnQtPm1vdGlvbi5kZXZpY2UgPSBnZGtfZGV2aWNlX21hbmFn
ZXJfZ2V0X2NsaWVudF9wb2ludGVyKGdka19kaXNwbGF5X2dldF9kZXZpY2VfbWFuYWdlcihndGtf
d2lkZ2V0X2dldF9kaXNwbGF5KHZpZXdXaWRnZXQpKSk7Ci0gICAgZXZlbnQtPm1vdGlvbi5zdGF0
ZSA9IG1vdXNlTW9kaWZpZXJzOwotICAgIGV2ZW50LT5tb3Rpb24uYXhlcyA9IDA7Ci0KLSAgICBp
bnQgeFJvb3QsIHlSb290OwotICAgIGdka193aW5kb3dfZ2V0X3Jvb3RfY29vcmRzKGd0a193aWRn
ZXRfZ2V0X3dpbmRvdyh2aWV3V2lkZ2V0KSwgeCwgeSwgJnhSb290LCAmeVJvb3QpOwotICAgIGV2
ZW50LT5tb3Rpb24ueF9yb290ID0geFJvb3Q7Ci0gICAgZXZlbnQtPm1vdGlvbi55X3Jvb3QgPSB5
Um9vdDsKLSAgICBndGtfbWFpbl9kb19ldmVudChldmVudC5nZXQoKSk7Ci19Ci0KLXZvaWQgV2Vi
Vmlld1Rlc3Q6OmNsaWNrTW91c2VCdXR0b24oaW50IHgsIGludCB5LCB1bnNpZ25lZCBpbnQgYnV0
dG9uLCB1bnNpZ25lZCBpbnQgbW91c2VNb2RpZmllcnMpCi17Ci0gICAgZG9Nb3VzZUJ1dHRvbkV2
ZW50KEdES19CVVRUT05fUFJFU1MsIHgsIHksIGJ1dHRvbiwgbW91c2VNb2RpZmllcnMpOwotICAg
IGRvTW91c2VCdXR0b25FdmVudChHREtfQlVUVE9OX1JFTEVBU0UsIHgsIHksIGJ1dHRvbiwgbW91
c2VNb2RpZmllcnMpOwotfQotCi12b2lkIFdlYlZpZXdUZXN0OjprZXlTdHJva2UodW5zaWduZWQg
aW50IGtleVZhbCwgdW5zaWduZWQgaW50IGtleU1vZGlmaWVycykKLXsKLSAgICBnX2Fzc2VydCht
X3BhcmVudFdpbmRvdyk7Ci0gICAgR3RrV2lkZ2V0KiB2aWV3V2lkZ2V0ID0gR1RLX1dJREdFVCht
X3dlYlZpZXcpOwotICAgIGdfYXNzZXJ0KGd0a193aWRnZXRfZ2V0X3JlYWxpemVkKHZpZXdXaWRn
ZXQpKTsKLQotICAgIEdPd25QdHI8R2RrRXZlbnQ+IGV2ZW50KGdka19ldmVudF9uZXcoR0RLX0tF
WV9QUkVTUykpOwotICAgIGV2ZW50LT5rZXkua2V5dmFsID0ga2V5VmFsOwotCi0gICAgZXZlbnQt
PmtleS50aW1lID0gR0RLX0NVUlJFTlRfVElNRTsKLSAgICBldmVudC0+a2V5LndpbmRvdyA9IGd0
a193aWRnZXRfZ2V0X3dpbmRvdyh2aWV3V2lkZ2V0KTsKLSAgICBnX29iamVjdF9yZWYoZXZlbnQt
PmtleS53aW5kb3cpOwotICAgIGdka19ldmVudF9zZXRfZGV2aWNlKGV2ZW50LmdldCgpLCBnZGtf
ZGV2aWNlX21hbmFnZXJfZ2V0X2NsaWVudF9wb2ludGVyKGdka19kaXNwbGF5X2dldF9kZXZpY2Vf
bWFuYWdlcihndGtfd2lkZ2V0X2dldF9kaXNwbGF5KHZpZXdXaWRnZXQpKSkpOwotICAgIGV2ZW50
LT5rZXkuc3RhdGUgPSBrZXlNb2RpZmllcnM7Ci0KLSAgICAvLyBXaGVuIHN5bnRoZXNpemluZyBh
biBldmVudCwgYW4gaW52YWxpZCBoYXJkd2FyZV9rZXljb2RlIHZhbHVlIGNhbiBjYXVzZSBpdCB0
byBiZSBiYWRseSBwcm9jZXNzZWQgYnkgR1RLKy4KLSAgICBHT3duUHRyPEdka0tleW1hcEtleT4g
a2V5czsKLSAgICBpbnQga2V5c0NvdW50OwotICAgIGlmIChnZGtfa2V5bWFwX2dldF9lbnRyaWVz
X2Zvcl9rZXl2YWwoZ2RrX2tleW1hcF9nZXRfZGVmYXVsdCgpLCBrZXlWYWwsICZrZXlzLm91dFB0
cigpLCAma2V5c0NvdW50KSkKLSAgICAgICAgZXZlbnQtPmtleS5oYXJkd2FyZV9rZXljb2RlID0g
a2V5cy5nZXQoKVswXS5rZXljb2RlOwotCi0gICAgZ3RrX21haW5fZG9fZXZlbnQoZXZlbnQuZ2V0
KCkpOwotICAgIGV2ZW50LT5rZXkudHlwZSA9IEdES19LRVlfUkVMRUFTRTsKLSAgICBndGtfbWFp
bl9kb19ldmVudChldmVudC5nZXQoKSk7Ci19Ci0KLXZvaWQgV2ViVmlld1Rlc3Q6OmRvTW91c2VC
dXR0b25FdmVudChHZGtFdmVudFR5cGUgZXZlbnRUeXBlLCBpbnQgeCwgaW50IHksIHVuc2lnbmVk
IGludCBidXR0b24sIHVuc2lnbmVkIGludCBtb3VzZU1vZGlmaWVycykKLXsKLSAgICBnX2Fzc2Vy
dChtX3BhcmVudFdpbmRvdyk7Ci0gICAgR3RrV2lkZ2V0KiB2aWV3V2lkZ2V0ID0gR1RLX1dJREdF
VChtX3dlYlZpZXcpOwotICAgIGdfYXNzZXJ0KGd0a193aWRnZXRfZ2V0X3JlYWxpemVkKHZpZXdX
aWRnZXQpKTsKLQotICAgIEdPd25QdHI8R2RrRXZlbnQ+IGV2ZW50KGdka19ldmVudF9uZXcoZXZl
bnRUeXBlKSk7Ci0gICAgZXZlbnQtPmJ1dHRvbi53aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5k
b3codmlld1dpZGdldCk7Ci0gICAgZ19vYmplY3RfcmVmKGV2ZW50LT5idXR0b24ud2luZG93KTsK
LQotICAgIGV2ZW50LT5idXR0b24udGltZSA9IEdES19DVVJSRU5UX1RJTUU7Ci0gICAgZXZlbnQt
PmJ1dHRvbi54ID0geDsKLSAgICBldmVudC0+YnV0dG9uLnkgPSB5OwotICAgIGV2ZW50LT5idXR0
b24uYXhlcyA9IDA7Ci0gICAgZXZlbnQtPmJ1dHRvbi5zdGF0ZSA9IG1vdXNlTW9kaWZpZXJzOwot
ICAgIGV2ZW50LT5idXR0b24uYnV0dG9uID0gYnV0dG9uOwotCi0gICAgZXZlbnQtPmJ1dHRvbi5k
ZXZpY2UgPSBnZGtfZGV2aWNlX21hbmFnZXJfZ2V0X2NsaWVudF9wb2ludGVyKGdka19kaXNwbGF5
X2dldF9kZXZpY2VfbWFuYWdlcihndGtfd2lkZ2V0X2dldF9kaXNwbGF5KHZpZXdXaWRnZXQpKSk7
Ci0KLSAgICBpbnQgeFJvb3QsIHlSb290OwotICAgIGdka193aW5kb3dfZ2V0X3Jvb3RfY29vcmRz
KGd0a193aWRnZXRfZ2V0X3dpbmRvdyh2aWV3V2lkZ2V0KSwgeCwgeSwgJnhSb290LCAmeVJvb3Qp
OwotICAgIGV2ZW50LT5idXR0b24ueF9yb290ID0geFJvb3Q7Ci0gICAgZXZlbnQtPmJ1dHRvbi55
X3Jvb3QgPSB5Um9vdDsKLSAgICBndGtfbWFpbl9kb19ldmVudChldmVudC5nZXQoKSk7Ci19Ci0K
LXN0YXRpYyB2b2lkIHJ1bkphdmFTY3JpcHRSZWFkeUNhbGxiYWNrKEdPYmplY3QqLCBHQXN5bmNS
ZXN1bHQqIHJlc3VsdCwgV2ViVmlld1Rlc3QqIHRlc3QpCi17Ci0gICAgdGVzdC0+bV9qYXZhc2Ny
aXB0UmVzdWx0ID0gd2Via2l0X3dlYl92aWV3X3J1bl9qYXZhc2NyaXB0X2ZpbmlzaCh0ZXN0LT5t
X3dlYlZpZXcsIHJlc3VsdCwgdGVzdC0+bV9qYXZhc2NyaXB0RXJyb3IpOwotICAgIGdfbWFpbl9s
b29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ1bkphdmFTY3Jp
cHRGcm9tR1Jlc291cmNlUmVhZHlDYWxsYmFjayhHT2JqZWN0KiwgR0FzeW5jUmVzdWx0KiByZXN1
bHQsIFdlYlZpZXdUZXN0KiB0ZXN0KQotewotICAgIHRlc3QtPm1famF2YXNjcmlwdFJlc3VsdCA9
IHdlYmtpdF93ZWJfdmlld19ydW5famF2YXNjcmlwdF9mcm9tX2dyZXNvdXJjZV9maW5pc2godGVz
dC0+bV93ZWJWaWV3LCByZXN1bHQsIHRlc3QtPm1famF2YXNjcmlwdEVycm9yKTsKLSAgICBnX21h
aW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOwotfQotCi1XZWJLaXRKYXZhc2NyaXB0UmVz
dWx0KiBXZWJWaWV3VGVzdDo6cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKGNvbnN0
IGNoYXIqIGphdmFzY3JpcHQsIEdFcnJvcioqIGVycm9yKQotewotICAgIGlmIChtX2phdmFzY3Jp
cHRSZXN1bHQpCi0gICAgICAgIHdlYmtpdF9qYXZhc2NyaXB0X3Jlc3VsdF91bnJlZihtX2phdmFz
Y3JpcHRSZXN1bHQpOwotICAgIG1famF2YXNjcmlwdFJlc3VsdCA9IDA7Ci0gICAgbV9qYXZhc2Ny
aXB0RXJyb3IgPSBlcnJvcjsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfcnVuX2phdmFzY3JpcHQobV93
ZWJWaWV3LCBqYXZhc2NyaXB0LCAwLCByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJh
Y2s+KHJ1bkphdmFTY3JpcHRSZWFkeUNhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19tYWluX2xvb3Bf
cnVuKG1fbWFpbkxvb3ApOwotCi0gICAgcmV0dXJuIG1famF2YXNjcmlwdFJlc3VsdDsKLX0KLQot
V2ViS2l0SmF2YXNjcmlwdFJlc3VsdCogV2ViVmlld1Rlc3Q6OnJ1bkphdmFTY3JpcHRGcm9tR1Jl
c291cmNlQW5kV2FpdFVudGlsRmluaXNoZWQoY29uc3QgY2hhciogcmVzb3VyY2UsIEdFcnJvcioq
IGVycm9yKQotewotICAgIGlmIChtX2phdmFzY3JpcHRSZXN1bHQpCi0gICAgICAgIHdlYmtpdF9q
YXZhc2NyaXB0X3Jlc3VsdF91bnJlZihtX2phdmFzY3JpcHRSZXN1bHQpOwotICAgIG1famF2YXNj
cmlwdFJlc3VsdCA9IDA7Ci0gICAgbV9qYXZhc2NyaXB0RXJyb3IgPSBlcnJvcjsKLSAgICB3ZWJr
aXRfd2ViX3ZpZXdfcnVuX2phdmFzY3JpcHRfZnJvbV9ncmVzb3VyY2UobV93ZWJWaWV3LCByZXNv
dXJjZSwgMCwgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihydW5KYXZhU2Ny
aXB0RnJvbUdSZXNvdXJjZVJlYWR5Q2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX21haW5fbG9vcF9y
dW4obV9tYWluTG9vcCk7Ci0KLSAgICByZXR1cm4gbV9qYXZhc2NyaXB0UmVzdWx0OwotfQotCi1z
dGF0aWMgY2hhcioganNWYWx1ZVRvQ1N0cmluZyhKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCwg
SlNWYWx1ZVJlZiB2YWx1ZSkKLXsKLSAgICBnX2Fzc2VydCh2YWx1ZSk7Ci0gICAgZ19hc3NlcnQo
SlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIHZhbHVlKSk7Ci0KLSAgICBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gc3RyaW5nVmFsdWUoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwg
dmFsdWUsIDApKTsKLSAgICBnX2Fzc2VydChzdHJpbmdWYWx1ZSk7Ci0KLSAgICBzaXplX3QgY1N0
cmluZ0xlbmd0aCA9IEpTU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShzdHJpbmdWYWx1
ZS5nZXQoKSk7Ci0gICAgY2hhciogY1N0cmluZyA9IHN0YXRpY19jYXN0PGNoYXIqPihnX21hbGxv
YyhjU3RyaW5nTGVuZ3RoKSk7Ci0gICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhzdHJpbmdWYWx1
ZS5nZXQoKSwgY1N0cmluZywgY1N0cmluZ0xlbmd0aCk7Ci0gICAgcmV0dXJuIGNTdHJpbmc7Ci19
Ci0KLWNoYXIqIFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKFdlYktpdEph
dmFzY3JpcHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQpCi17Ci0gICAgSlNHbG9iYWxDb250ZXh0
UmVmIGNvbnRleHQgPSB3ZWJraXRfamF2YXNjcmlwdF9yZXN1bHRfZ2V0X2dsb2JhbF9jb250ZXh0
KGphdmFzY3JpcHRSZXN1bHQpOwotICAgIGdfYXNzZXJ0KGNvbnRleHQpOwotICAgIHJldHVybiBq
c1ZhbHVlVG9DU3RyaW5nKGNvbnRleHQsIHdlYmtpdF9qYXZhc2NyaXB0X3Jlc3VsdF9nZXRfdmFs
dWUoamF2YXNjcmlwdFJlc3VsdCkpOwotfQotCi1kb3VibGUgV2ViVmlld1Rlc3Q6OmphdmFzY3Jp
cHRSZXN1bHRUb051bWJlcihXZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBqYXZhc2NyaXB0UmVzdWx0
KQotewotICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0ID0gd2Via2l0X2phdmFzY3JpcHRf
cmVzdWx0X2dldF9nbG9iYWxfY29udGV4dChqYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBnX2Fzc2Vy
dChjb250ZXh0KTsKLSAgICBKU1ZhbHVlUmVmIHZhbHVlID0gd2Via2l0X2phdmFzY3JpcHRfcmVz
dWx0X2dldF92YWx1ZShqYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBnX2Fzc2VydCh2YWx1ZSk7Ci0g
ICAgZ19hc3NlcnQoSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIHZhbHVlKSk7Ci0KLSAgICByZXR1
cm4gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIHZhbHVlLCAwKTsKLX0KLQotYm9vbCBXZWJWaWV3
VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQm9vbGVhbihXZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBq
YXZhc2NyaXB0UmVzdWx0KQotewotICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0ID0gd2Vi
a2l0X2phdmFzY3JpcHRfcmVzdWx0X2dldF9nbG9iYWxfY29udGV4dChqYXZhc2NyaXB0UmVzdWx0
KTsKLSAgICBnX2Fzc2VydChjb250ZXh0KTsKLSAgICBKU1ZhbHVlUmVmIHZhbHVlID0gd2Via2l0
X2phdmFzY3JpcHRfcmVzdWx0X2dldF92YWx1ZShqYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBnX2Fz
c2VydCh2YWx1ZSk7Ci0gICAgZ19hc3NlcnQoSlNWYWx1ZUlzQm9vbGVhbihjb250ZXh0LCB2YWx1
ZSkpOwotCi0gICAgcmV0dXJuIEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgdmFsdWUpOwotfQot
Ci1ib29sIFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0SXNOdWxsKFdlYktpdEphdmFzY3Jp
cHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQpCi17Ci0gICAgSlNHbG9iYWxDb250ZXh0UmVmIGNv
bnRleHQgPSB3ZWJraXRfamF2YXNjcmlwdF9yZXN1bHRfZ2V0X2dsb2JhbF9jb250ZXh0KGphdmFz
Y3JpcHRSZXN1bHQpOwotICAgIGdfYXNzZXJ0KGNvbnRleHQpOwotICAgIEpTVmFsdWVSZWYgdmFs
dWUgPSB3ZWJraXRfamF2YXNjcmlwdF9yZXN1bHRfZ2V0X3ZhbHVlKGphdmFzY3JpcHRSZXN1bHQp
OwotICAgIGdfYXNzZXJ0KHZhbHVlKTsKLQotICAgIHJldHVybiBKU1ZhbHVlSXNOdWxsKGNvbnRl
eHQsIHZhbHVlKTsKLX0KLQotYm9vbCBXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdElzVW5k
ZWZpbmVkKFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQpCi17Ci0gICAg
SlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQgPSB3ZWJraXRfamF2YXNjcmlwdF9yZXN1bHRfZ2V0
X2dsb2JhbF9jb250ZXh0KGphdmFzY3JpcHRSZXN1bHQpOwotICAgIGdfYXNzZXJ0KGNvbnRleHQp
OwotICAgIEpTVmFsdWVSZWYgdmFsdWUgPSB3ZWJraXRfamF2YXNjcmlwdF9yZXN1bHRfZ2V0X3Zh
bHVlKGphdmFzY3JpcHRSZXN1bHQpOwotICAgIGdfYXNzZXJ0KHZhbHVlKTsKLQotICAgIHJldHVy
biBKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwgdmFsdWUpOwotfQotCi1zdGF0aWMgdm9pZCBv
blNuYXBzaG90UmVhZHkoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIEdBc3luY1Jlc3VsdCogcmVz
LCBXZWJWaWV3VGVzdCogdGVzdCkKLXsKLSAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAg
dGVzdC0+bV9zdXJmYWNlID0gd2Via2l0X3dlYl92aWV3X2dldF9zbmFwc2hvdF9maW5pc2god2Vi
X3ZpZXcsIHJlcywgJmVycm9yLm91dFB0cigpKTsKLSAgICBnX2Fzc2VydCghdGVzdC0+bV9zdXJm
YWNlIHx8ICFlcnJvci5nZXQoKSk7Ci0gICAgaWYgKGVycm9yKQotICAgICAgICBnX2Fzc2VydF9l
cnJvcihlcnJvci5nZXQoKSwgV0VCS0lUX1NOQVBTSE9UX0VSUk9SLCBXRUJLSVRfU05BUFNIT1Rf
RVJST1JfRkFJTEVEX1RPX0NSRUFURSk7Ci0gICAgdGVzdC0+cXVpdE1haW5Mb29wKCk7Ci19Ci0K
LWNhaXJvX3N1cmZhY2VfdCogV2ViVmlld1Rlc3Q6OmdldFNuYXBzaG90QW5kV2FpdFVudGlsUmVh
ZHkoV2ViS2l0U25hcHNob3RSZWdpb24gcmVnaW9uLCBXZWJLaXRTbmFwc2hvdE9wdGlvbnMgb3B0
aW9ucykKLXsKLSAgICBpZiAobV9zdXJmYWNlKQotICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ry
b3kobV9zdXJmYWNlKTsKLSAgICBtX3N1cmZhY2UgPSAwOwotICAgIHdlYmtpdF93ZWJfdmlld19n
ZXRfc25hcHNob3QobV93ZWJWaWV3LCByZWdpb24sIG9wdGlvbnMsIDAsIHJlaW50ZXJwcmV0X2Nh
c3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4ob25TbmFwc2hvdFJlYWR5KSwgdGhpcyk7Ci0gICAgZ19t
YWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotICAgIHJldHVybiBtX3N1cmZhY2U7Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVz
dC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3Qu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ2MGUyMi4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5oCisrKyAv
ZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2Fs
aWEgUy5MLgotICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDExIE1vdG9yb2xhIE1vYmlsaXR5
LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFdlYlZpZXdUZXN0X2gKLSNkZWZp
bmUgV2ViVmlld1Rlc3RfaAotCi0jaW5jbHVkZSAiVGVzdE1haW4uaCIKLSNpbmNsdWRlIDx3ZWJr
aXQyL3dlYmtpdDIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLWNsYXNzIFdl
YlZpZXdUZXN0OiBwdWJsaWMgVGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklY
VFVSRShXZWJWaWV3VGVzdCk7Ci0gICAgV2ViVmlld1Rlc3QoKTsKLSAgICB2aXJ0dWFsIH5XZWJW
aWV3VGVzdCgpOwotCi0gICAgdmlydHVhbCB2b2lkIGxvYWRVUkkoY29uc3QgY2hhciogdXJpKTsK
LSAgICB2aXJ0dWFsIHZvaWQgbG9hZEh0bWwoY29uc3QgY2hhciogaHRtbCwgY29uc3QgY2hhciog
YmFzZVVSSSk7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRQbGFpblRleHQoY29uc3QgY2hhciogcGxh
aW5UZXh0KTsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlcXVlc3QoV2ViS2l0VVJJUmVxdWVzdCop
OwotICAgIHZvaWQgbG9hZEFsdGVybmF0ZUhUTUwoY29uc3QgY2hhciogaHRtbCwgY29uc3QgY2hh
ciogY29udGVudFVSSSwgY29uc3QgY2hhciogYmFzZVVSSSk7Ci0gICAgdm9pZCBnb0JhY2soKTsK
LSAgICB2b2lkIGdvRm9yd2FyZCgpOwotICAgIHZvaWQgZ29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW0o
V2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSopOwotCi0gICAgdm9pZCBxdWl0TWFpbkxvb3AoKTsK
LSAgICB2b2lkIHF1aXRNYWluTG9vcEFmdGVyUHJvY2Vzc2luZ1BlbmRpbmdFdmVudHMoKTsKLSAg
ICB2b2lkIHdhaXQoZG91YmxlIHNlY29uZHMpOwotICAgIHZvaWQgd2FpdFVudGlsTG9hZEZpbmlz
aGVkKCk7Ci0gICAgdm9pZCB3YWl0VW50aWxUaXRsZUNoYW5nZWRUbyhjb25zdCBjaGFyKiBleHBl
Y3RlZFRpdGxlKTsKLSAgICB2b2lkIHdhaXRVbnRpbFRpdGxlQ2hhbmdlZCgpOwotICAgIHZvaWQg
c2hvd0luV2luZG93KEd0a1dpbmRvd1R5cGUgPSBHVEtfV0lORE9XX1BPUFVQKTsKLSAgICB2b2lk
IHNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZChHdGtXaW5kb3dUeXBlID0gR1RLX1dJTkRP
V19QT1BVUCk7Ci0gICAgdm9pZCByZXNpemVWaWV3KGludCB3aWR0aCwgaW50IGhlaWdodCk7Ci0g
ICAgdm9pZCBzZWxlY3RBbGwoKTsKLSAgICBjb25zdCBjaGFyKiBtYWluUmVzb3VyY2VEYXRhKHNp
emVfdCYgbWFpblJlc291cmNlRGF0YVNpemUpOwotCi0gICAgdm9pZCBtb3VzZU1vdmVUbyhpbnQg
eCwgaW50IHksIHVuc2lnbmVkIGludCBtb3VzZU1vZGlmaWVycyA9IDApOwotICAgIHZvaWQgY2xp
Y2tNb3VzZUJ1dHRvbihpbnQgeCwgaW50IHksIHVuc2lnbmVkIGludCBidXR0b24gPSAxLCB1bnNp
Z25lZCBpbnQgbW91c2VNb2RpZmllcnMgPSAwKTsKLSAgICB2b2lkIGtleVN0cm9rZSh1bnNpZ25l
ZCBpbnQga2V5VmFsLCB1bnNpZ25lZCBpbnQga2V5TW9kaWZpZXJzID0gMCk7Ci0KLSAgICBXZWJL
aXRKYXZhc2NyaXB0UmVzdWx0KiBydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoY29u
c3QgY2hhciogamF2YXNjcmlwdCwgR0Vycm9yKiopOwotICAgIFdlYktpdEphdmFzY3JpcHRSZXN1
bHQqIHJ1bkphdmFTY3JpcHRGcm9tR1Jlc291cmNlQW5kV2FpdFVudGlsRmluaXNoZWQoY29uc3Qg
Y2hhciogcmVzb3VyY2UsIEdFcnJvcioqKTsKLQotICAgIC8vIEphdmFzY3JpcHQgcmVzdWx0IGhl
bHBlcnMuCi0gICAgc3RhdGljIGNoYXIqIGphdmFzY3JpcHRSZXN1bHRUb0NTdHJpbmcoV2ViS2l0
SmF2YXNjcmlwdFJlc3VsdCopOwotICAgIHN0YXRpYyBkb3VibGUgamF2YXNjcmlwdFJlc3VsdFRv
TnVtYmVyKFdlYktpdEphdmFzY3JpcHRSZXN1bHQqKTsKLSAgICBzdGF0aWMgYm9vbCBqYXZhc2Ny
aXB0UmVzdWx0VG9Cb29sZWFuKFdlYktpdEphdmFzY3JpcHRSZXN1bHQqKTsKLSAgICBzdGF0aWMg
Ym9vbCBqYXZhc2NyaXB0UmVzdWx0SXNOdWxsKFdlYktpdEphdmFzY3JpcHRSZXN1bHQqKTsKLSAg
ICBzdGF0aWMgYm9vbCBqYXZhc2NyaXB0UmVzdWx0SXNVbmRlZmluZWQoV2ViS2l0SmF2YXNjcmlw
dFJlc3VsdCopOwotCi0gICAgY2Fpcm9fc3VyZmFjZV90KiBnZXRTbmFwc2hvdEFuZFdhaXRVbnRp
bFJlYWR5KFdlYktpdFNuYXBzaG90UmVnaW9uLCBXZWJLaXRTbmFwc2hvdE9wdGlvbnMpOwotCi0g
ICAgV2ViS2l0V2ViVmlldyogbV93ZWJWaWV3OwotICAgIEdNYWluTG9vcCogbV9tYWluTG9vcDsK
LSAgICBDU3RyaW5nIG1fYWN0aXZlVVJJOwotICAgIEd0a1dpZGdldCogbV9wYXJlbnRXaW5kb3c7
Ci0gICAgQ1N0cmluZyBtX2V4cGVjdGVkVGl0bGU7Ci0gICAgV2ViS2l0SmF2YXNjcmlwdFJlc3Vs
dCogbV9qYXZhc2NyaXB0UmVzdWx0OwotICAgIEdFcnJvcioqIG1famF2YXNjcmlwdEVycm9yOwot
ICAgIEdPd25QdHI8Y2hhcj4gbV9yZXNvdXJjZURhdGE7Ci0gICAgc2l6ZV90IG1fcmVzb3VyY2VE
YXRhU2l6ZTsKLSAgICBjYWlyb19zdXJmYWNlX3QqIG1fc3VyZmFjZTsKLQotcHJpdmF0ZToKLSAg
ICB2b2lkIGRvTW91c2VCdXR0b25FdmVudChHZGtFdmVudFR5cGUsIGludCwgaW50LCB1bnNpZ25l
ZCBpbnQsIHVuc2lnbmVkIGludCk7Ci19OwotCi0jZW5kaWYgLy8gV2ViVmlld1Rlc3RfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvcmVzb3VyY2Vz
L2xpbmstdGl0bGUuanMgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9y
ZXNvdXJjZXMvbGluay10aXRsZS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmM4
MjRkYS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0
cy9yZXNvdXJjZXMvbGluay10aXRsZS5qcworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXdp
bmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnV2ViS2l0TGluaycpLnRpdGxlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvcmVzb3VyY2VzL3Rl
c3QtY2VydC5wZW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9yZXNv
dXJjZXMvdGVzdC1jZXJ0LnBlbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjM0MzAx
Zi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9y
ZXNvdXJjZXMvdGVzdC1jZXJ0LnBlbQorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLS0t
LS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQotTUlJQjlqQ0NBVitnQXdJQkFnSUpBTGV1WEJvK3Z3
ejlNQTBHQ1NxR1NJYjNEUUVCQlFVQU1CUXhFakFRQmdOVgotQkFNTUNURXlOeTR3TGpBdU1UQWVG
dzB4TWpBM01USXhNalE0TWpSYUZ3MHlNakEzTVRBeE1qUTRNalJhTUJReAotRWpBUUJnTlZCQU1N
Q1RFeU55NHdMakF1TVRDQm56QU5CZ2txaGtpRzl3MEJBUUVGQUFPQmpRQXdnWWtDZ1lFQQotMFRV
ek9ReEhCSUtERDJta3VxK3RVOTJtUXZEWmc3M0IwRytOaHIyVDJHNk1iY0xxSXdqZzFRWXRCWldK
ODN0WgoteE1NRWZpd2VITEY4NVo5b2hhdkFneEpsS0c3WW12Wk83OUtrRnBtalYyVzVDVlJtMGVZ
TVBuem14TkNvYVlxbwotRExsMHpzSDZLWk9MUEt1L2ZYNGVEWDlYcEFQMWY4M2hXQjFVRkJtSEtO
OENBd0VBQWFOUU1FNHdIUVlEVlIwTwotQkJZRUZESHY1WlExQmRtaHpUc0RVRW9ZNTVFWHlVZEtN
QjhHQTFVZEl3UVlNQmFBRkRIdjVaUTFCZG1oelRzRAotVUVvWTU1RVh5VWRLTUF3R0ExVWRFd1FG
TUFNQkFmOHdEUVlKS29aSWh2Y05BUUVGQlFBRGdZRUFoM3FNQng3dgotalNvZE1mM095VHFUTEU3
ZGVMbm1uQ2VCVnBnenhSWkVvaXpjR3FZY2ppcU8yN2k1TjVaNktWUXNuSVRuTGl5QwotbVV0dVI1
S25GNjl1VEtVdzRtL3VnWmU1d2hqaWc1TXEybDQxMEtWSzZFZUc0dGRMbGZYUit3aTRVNUs0S2pQ
NgotcDRuY2hRVVhMYTJ6Y2JKbitWQmV4Sm42Lzl3ZGhyK0RVR1k9Ci0tLS0tLUVORCBDRVJUSUZJ
Q0FURS0tLS0tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9yZXNvdXJjZXMvdGVzdC1rZXkucGVtIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3Qta2V5LnBlbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggOTAzNjIyMi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9yZXNvdXJjZXMvdGVzdC1rZXkucGVtCisrKyAvZGV2L251bGwKQEAgLTEs
MTYgKzAsMCBAQAotLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCi1NSUlDZHdJQkFEQU5CZ2tx
aGtpRzl3MEJBUUVGQUFTQ0FtRXdnZ0pkQWdFQUFvR0JBTkUxTXprTVJ3U0NndzlwCi1wTHF2clZQ
ZHBrTHcyWU85d2RCdmpZYTlrOWh1akczQzZpTUk0TlVHTFFXVmlmTjdXY1REQkg0c0hoeXhmT1dm
Ci1hSVdyd0lNU1pTaHUySnIyVHUvU3BCYVpvMWRsdVFsVVp0SG1ERDU4NXNUUXFHbUtxQXk1ZE03
QitpbVRpenlyCi12MzErSGcxL1Y2UUQ5WC9ONFZnZFZCUVpoeWpmQWdNQkFBRUNnWUIyUXdPVXNS
c0lNcHJSd0o5dEpOZnZPN0c3Ci16NWkxL3pPcmx4UEM0akhNUEJuSUJsSUN3Z2NPaExJNG9PTGRy
NUg4UjEybjBWcW9UN0RSd1AzOTZpd2xKaXBGCi1pTzFoZURNbi84ejhMUEd3a0NLLytjazA0ck1E
a3N4V0lkTXdZS0JYdDlhaG5KL3hSTHpRMS8zQUppQUdub2U1Ci0vUUxYUXdlb2ZkNG1tZnNqS1FK
QkFPMkN3VDd1TVA2bk1qWGd0Vk1KcTVRUDhVYmVDUzFzRU9QSkpiSHVEeEpCCi0vSGVQUUhCanE0
a3pHNkNMNG9PN1QrNWZEdjRnK2ZJSUh6dVhlclowaW1zQ1FRRGhmbWlUSWM5T3VjRUlmZzYvCi1t
czBKaUtTbVdjK3FvaU9DdHJJTHVRdkZvTndKUmNpUUFOcWVKczZ3cGFEdmV2U1V2QkxHZkcvN2Iz
SHZhRTVYCi1pcUJkQWtCRVFJdnAycWNIdHVKTjYwb1FGN3BQclJrbnhVeWIyZThzbGpRWDRwSkFL
K2d5TDE5VUxNQXhpQmRMCi1Wb2Q4VllxTnRKRnBZKzZQcDlmWjF4anpiNkFMQWtFQTRKenJEQXcw
bFFYQSszV2R1VXc0aXhPYWRyMmxkeUcwCi0zNktlYmNEd3NmWk8xOG0wUTRVbVB6MEd5N3pnTjB3
eHp1b2NoYXcwVzYraVBVaVlLT2xFWFFKQkFNV1FyUGx1Ci1ycmlub1pTMmY4ZG9KOUJOTlVhK1JO
cE11ZzZVWGM1NXFvVUpseWlYRWgrdHU0QWFNT3R4dUdJeUMwc0FjdXc2Ci1YZEFQVlBYS2Q3TW5l
NzA9Ci0tLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9yZXNvdXJjZXMvd2Via2l0Mmd0ay10ZXN0cy5ncmVz
b3VyY2UueG1sIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvcmVzb3Vy
Y2VzL3dlYmtpdDJndGstdGVzdHMuZ3Jlc291cmNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNGYxZTVhNi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9yZXNvdXJjZXMvd2Via2l0Mmd0ay10ZXN0cy5ncmVzb3VyY2UueG1sCisr
KyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5n
PSJVVEYtOCI/PgotPGdyZXNvdXJjZXM+Ci0gIDxncmVzb3VyY2UgcHJlZml4PSIvb3JnL3dlYmtp
dC93ZWJraXQyZ3RrL3Rlc3RzLyI+Ci0gICAgPGZpbGUgYWxpYXM9ImxpbmstdGl0bGUuanMiPlNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL3Jlc291cmNlcy9saW5rLXRpdGxl
LmpzPC9maWxlPgotICA8L2dyZXNvdXJjZT4KLTwvZ3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL1Rv
b2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAzOTNjNzBhLi5mMjhlMTQwIDEw
MDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUg
KzEsNzc1IEBACiAyMDE0LTAxLTAzICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdh
bGlhLmNvbT4KIAorICAgICAgICBbR1RLXSBNb3ZlIGFsbCBHVEsvR09iamVjdCB1bml0IHRlc3Rz
IHRvIFRvb2xzL1Rlc3RXZWJLaXRBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEyNjM0MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogU2NyaXB0cy9ydW4tZ3RrLXRlc3RzOgorICAgICAgICAoVGVzdFJ1
bm5lcik6CisgICAgICAgIChUZXN0UnVubmVyLl9faW5pdF9fKToKKyAgICAgICAgKFRlc3RSdW5u
ZXIuX3Rlc3RfcHJvZ3JhbXNfYmFzZV9kaXIpOgorICAgICAgICAoVGVzdFJ1bm5lci5fZ2V0X3Rl
c3RzKToKKyAgICAgICAgKFRlc3RSdW5uZXIuX3J1bl90ZXN0KToKKyAgICAgICAgKFRlc3RSdW5u
ZXIucnVuX3Rlc3RzKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIu
cHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyX3VuaXR0ZXN0LnB5
OgorICAgICAgICAoQ2hlY2tlckRpc3BhdGNoZXJTa2lwVGVzdC50ZXN0X3Nob3VsZF9za2lwX3dp
dGhfd2FybmluZyk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9HTlVtYWtlZmlsZS5hbToKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvQWNjZXNzaWJpbGl0eVRlc3RT
ZXJ2ZXIuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvQWNjZXNzaWJpbGl0eVRlc3RTZXJ2ZXIuY3BwLgorICAgICAgICAobG9hZENoYW5nZWRD
YWxsYmFjayk6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdDJHdGsvRE9NRE9NV2luZG93VGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
RE9NRE9NV2luZG93VGVzdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdERPTURPTVdpbmRvd1Rl
c3Q6OndlYlBhZ2VGcm9tQXJncyk6CisgICAgICAgIChXZWJLaXRET01ET01XaW5kb3dUZXN0Ojp0
ZXN0U2lnbmFscyk6CisgICAgICAgIChXZWJLaXRET01ET01XaW5kb3dUZXN0Ojp0ZXN0RGlzcGF0
Y2hFdmVudCk6CisgICAgICAgIChXZWJLaXRET01ET01XaW5kb3dUZXN0Ojp0ZXN0R2V0Q29tcHV0
ZWRTdHlsZSk6CisgICAgICAgIChXZWJLaXRET01ET01XaW5kb3dUZXN0OjpydW5UZXN0KToKKyAg
ICAgICAgKHJlZ2lzdGVyVGVzdHMpOgorICAgICAgICAobG9hZGVkQ2FsbGJhY2spOgorICAgICAg
ICAoY2xpY2tlZENhbGxiYWNrKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dDJHdGsvRE9NTm9kZVRlc3QuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvRE9NTm9kZVRlc3QuY3BwLgorICAgICAgICAoV2ViS2l0RE9NTm9k
ZVRlc3Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXRET01Ob2RlVGVzdDo6d2ViUGFnZUZyb21B
cmdzKToKKyAgICAgICAgKFdlYktpdERPTU5vZGVUZXN0Ojp0ZXN0SGllcmFyY2h5TmF2aWdhdGlv
bik6CisgICAgICAgIChXZWJLaXRET01Ob2RlVGVzdDo6dGVzdEluc2VydGlvbik6CisgICAgICAg
IChXZWJLaXRET01Ob2RlVGVzdDo6dGVzdFRhZ05hbWVzKToKKyAgICAgICAgKFdlYktpdERPTU5v
ZGVUZXN0OjpydW5UZXN0KToKKyAgICAgICAgKHJlZ2lzdGVyVGVzdHMpOgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9GcmFtZVRlc3QuY3BwOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvRnJhbWVUZXN0LmNwcC4KKyAg
ICAgICAgKFdlYktpdEZyYW1lVGVzdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdEZyYW1lVGVz
dDo6d2ViUGFnZUZyb21BcmdzKToKKyAgICAgICAgKFdlYktpdEZyYW1lVGVzdDo6dGVzdE1haW5G
cmFtZSk6CisgICAgICAgIChXZWJLaXRGcmFtZVRlc3Q6OnRlc3RVUkkpOgorICAgICAgICAoV2Vi
S2l0RnJhbWVUZXN0Ojp0ZXN0SmF2YVNjcmlwdENvbnRleHQpOgorICAgICAgICAoV2ViS2l0RnJh
bWVUZXN0OjpydW5UZXN0KToKKyAgICAgICAgKHJlZ2lzdGVyVGVzdHMpOgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9JbnNwZWN0b3JUZXN0U2VydmVyLmNwcDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0luc3BlY3Rv
clRlc3RTZXJ2ZXIuY3BwLgorICAgICAgICAobG9hZENoYW5nZWRDYWxsYmFjayk6CisgICAgICAg
IChtYWluKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdEF1
dGhlbnRpY2F0aW9uLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL1Rlc3RBdXRoZW50aWNhdGlvbi5jcHAuCisgICAgICAgICh0ZXN0V2ViVmll
d0F1dGhlbnRpY2F0aW9uUmVxdWVzdCk6CisgICAgICAgICh0ZXN0V2ViVmlld0F1dGhlbnRpY2F0
aW9uQ2FuY2VsKToKKyAgICAgICAgKHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25Mb2FkQ2FuY2Vs
bGVkKToKKyAgICAgICAgKHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25GYWlsdXJlKToKKyAgICAg
ICAgKHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25Ob0NyZWRlbnRpYWwpOgorICAgICAgICAodGVz
dFdlYlZpZXdBdXRoZW50aWNhdGlvblN0b3JhZ2UpOgorICAgICAgICAodGVzdFdlYlZpZXdBdXRo
ZW50aWNhdGlvblN1Y2Nlc3MpOgorICAgICAgICAoc2VydmVyQ2FsbGJhY2spOgorICAgICAgICAo
YmVmb3JlQWxsKToKKyAgICAgICAgKGFmdGVyQWxsKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdDJHdGsvVGVzdEJhY2tGb3J3YXJkTGlzdC5jcHA6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0QmFja0ZvcndhcmRMaXN0
LmNwcC4KKyAgICAgICAgKHNlcnZlckNhbGxiYWNrKToKKyAgICAgICAgKHRlc3RCYWNrRm9yd2Fy
ZExpc3ROYXZpZ2F0aW9uKToKKyAgICAgICAgKHRlc3RCYWNrRm9yd2FyZExpc3RMaW1pdEFuZENh
Y2hlKToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAgIChhZnRlckFsbCk6CisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RDb250ZXh0TWVudS5jcHA6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0Q29u
dGV4dE1lbnUuY3BwLgorICAgICAgICAodGVzdENvbnRleHRNZW51RGVmYXVsdE1lbnUpOgorICAg
ICAgICAodGVzdENvbnRleHRNZW51UG9wdWxhdGVNZW51KToKKyAgICAgICAgKHRlc3RDb250ZXh0
TWVudUN1c3RvbU1lbnUpOgorICAgICAgICAodGVzdENvbnRleHRNZW51RGlzYWJsZU1lbnUpOgor
ICAgICAgICAodGVzdENvbnRleHRNZW51U3ViTWVudSk6CisgICAgICAgICh0ZXN0Q29udGV4dE1l
bnVEaXNtaXNzZWQpOgorICAgICAgICAodGVzdENvbnRleHRNZW51U21hcnRTZXBhcmF0b3JzKToK
KyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAgIChhZnRlckFsbCk6CisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RDb29raWVNYW5hZ2VyLmNwcDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RDb29raWVN
YW5hZ2VyLmNwcC4KKyAgICAgICAgKHRlc3RDb29raWVNYW5hZ2VyQWNjZXB0UG9saWN5KToKKyAg
ICAgICAgKHRlc3RDb29raWVNYW5hZ2VyRGVsZXRlQ29va2llcyk6CisgICAgICAgICh0ZXN0Q29v
a2llTWFuYWdlckNvb2tpZXNDaGFuZ2VkKToKKyAgICAgICAgKHRlc3RDb29raWVNYW5hZ2VyUGVy
c2lzdGVudFN0b3JhZ2UpOgorICAgICAgICAoc2VydmVyQ2FsbGJhY2spOgorICAgICAgICAoYmVm
b3JlQWxsKToKKyAgICAgICAgKGFmdGVyQWxsKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdDJHdGsvVGVzdERPTURPTVdpbmRvdy5jcHA6IEFkZGVkLgorICAgICAgICAoc2ln
bmFsc05vdGlmeUNhbGxiYWNrKToKKyAgICAgICAgKGRpc3BhdGNoRXZlbnROb3RpZnlDYWxsYmFj
ayk6CisgICAgICAgICh0ZXN0V2ViS2l0RE9NRE9NV2luZG93U2lnbmFscyk6CisgICAgICAgICh0
ZXN0V2ViS2l0RE9NRE9NV2luZG93RGlzcGF0Y2hFdmVudCk6CisgICAgICAgICh0ZXN0V2ViS2l0
RE9NRE9NV2luZG93R2V0Q29tcHV0ZWRTdHlsZSk6CisgICAgICAgIChiZWZvcmVBbGwpOgorICAg
ICAgICAoYWZ0ZXJBbGwpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0
ay9UZXN0RE9NTm9kZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9UZXN0RE9NTm9kZS5jcHAuCisgICAgICAgICh0ZXN0V2ViS2l0RE9NTm9k
ZUhpZXJhcmNoeU5hdmlnYXRpb24pOgorICAgICAgICAodGVzdFdlYktpdERPTU5vZGVJbnNlcnRp
b24pOgorICAgICAgICAodGVzdFdlYktpdERPTU5vZGVUYWdOYW1lcyk6CisgICAgICAgIChiZWZv
cmVBbGwpOgorICAgICAgICAoYWZ0ZXJBbGwpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Mkd0ay9UZXN0RG93bmxvYWRzLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3REb3dubG9hZHMuY3BwLgorICAgICAgICAo
dGVzdERvd25sb2FkTG9jYWxGaWxlKToKKyAgICAgICAgKHRlc3REb3dubG9hZExvY2FsRmlsZUVy
cm9yKToKKyAgICAgICAgKHNlcnZlckNhbGxiYWNrKToKKyAgICAgICAgKHRlc3REb3dubG9hZFJl
bW90ZUZpbGUpOgorICAgICAgICAodGVzdERvd25sb2FkUmVtb3RlRmlsZUVycm9yKToKKyAgICAg
ICAgKHRlc3RXZWJWaWV3RG93bmxvYWRVUkkpOgorICAgICAgICAodGVzdFBvbGljeVJlc3BvbnNl
RG93bmxvYWQpOgorICAgICAgICAoYmVmb3JlQWxsKToKKyAgICAgICAgKGFmdGVyQWxsKToKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdEZyYW1lLmNwcDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RGcmFt
ZS5jcHAuCisgICAgICAgICh3ZWJraXRGcmFtZVRlc3RSdW4pOgorICAgICAgICAodGVzdFdlYktp
dEZyYW1lTWFpbkZyYW1lKToKKyAgICAgICAgKHRlc3RXZWJLaXRGcmFtZVVSSSk6CisgICAgICAg
ICh0ZXN0V2ViS2l0RnJhbWVKYXZhU2NyaXB0Q29udGV4dCk6CisgICAgICAgIChiZWZvcmVBbGwp
OgorICAgICAgICAoYWZ0ZXJBbGwpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Mkd0ay9UZXN0SW5zcGVjdG9yLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RJbnNwZWN0b3IuY3BwLgorICAgICAgICAodGVzdElu
c3BlY3RvckRlZmF1bHQpOgorICAgICAgICAodGVzdEluc3BlY3Rvck1hbnVhbEF0dGFjaERldGFj
aCk6CisgICAgICAgICh0ZXN0SW5zcGVjdG9yQ3VzdG9tQ29udGFpbmVyRGVzdHJveWVkKToKKyAg
ICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAgIChhZnRlckFsbCk6CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RJbnNwZWN0b3JTZXJ2ZXIuY3BwOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdEluc3BlY3Rv
clNlcnZlci5jcHAuCisgICAgICAgIChzdG9wVGVzdFNlcnZlcik6CisgICAgICAgIChzaWdBYm9y
dEhhbmRsZXIpOgorICAgICAgICAodGVzdFNlcnZlck1vbml0b3JUaHJlYWRGdW5jKToKKyAgICAg
ICAgKHN0YXJ0VGVzdFNlcnZlck1vbml0b3IpOgorICAgICAgICAoc3RhcnRUZXN0U2VydmVyKToK
KyAgICAgICAgKHRlc3RJbnNwZWN0b3JTZXJ2ZXJQYWdlTGlzdCk6CisgICAgICAgICh0ZXN0UmVt
b3RlRGVidWdnaW5nTWVzc2FnZSk6CisgICAgICAgIChvcGVuUmVtb3RlRGVidWdnaW5nU2Vzc2lv
bik6CisgICAgICAgIChzZW5kSW5jb21wbGV0ZVJlcXVlc3QpOgorICAgICAgICAoYmVmb3JlQWxs
KToKKyAgICAgICAgKGFmdGVyQWxsKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdDJHdGsvVGVzdExvYWRlckNsaWVudC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0TG9hZGVyQ2xpZW50LmNwcC4KKyAgICAgICAg
KHRlc3RMb2FkaW5nU3RhdHVzKToKKyAgICAgICAgKHRlc3RMb2FkaW5nRXJyb3IpOgorICAgICAg
ICAoYXNzZXJ0Tm9ybWFsTG9hZEhhcHBlbmVkKToKKyAgICAgICAgKHRlc3RMb2FkSHRtbCk6Cisg
ICAgICAgICh0ZXN0TG9hZEFsdGVybmF0ZUhUTUwpOgorICAgICAgICAodGVzdExvYWRQbGFpblRl
eHQpOgorICAgICAgICAodGVzdExvYWRSZXF1ZXN0KToKKyAgICAgICAgKExvYWRTdG9wVHJhY2tp
bmdUZXN0Ojpsb2FkQ29tbWl0dGVkKToKKyAgICAgICAgKExvYWRTdG9wVHJhY2tpbmdUZXN0Ojps
b2FkRmFpbGVkKToKKyAgICAgICAgKHRlc3RMb2FkQ2FuY2VsbGVkKToKKyAgICAgICAgKHRlc3RX
ZWJWaWV3VGl0bGUpOgorICAgICAgICAodGVzdFdlYlZpZXdSZWxvYWQpOgorICAgICAgICAodGVz
dExvYWRQcm9ncmVzcyk6CisgICAgICAgICh0ZXN0V2ViVmlld0hpc3RvcnlMb2FkKToKKyAgICAg
ICAgKHRlc3RXZWJWaWV3QWN0aXZlVVJJKToKKyAgICAgICAgKHRlc3RXZWJWaWV3SXNMb2FkaW5n
KToKKyAgICAgICAgKHRlc3RXZWJQYWdlVVJJKToKKyAgICAgICAgKHRlc3RVUklSZXF1ZXN0SFRU
UEhlYWRlcnMpOgorICAgICAgICAoc2VydmVyQ2FsbGJhY2spOgorICAgICAgICAoYmVmb3JlQWxs
KToKKyAgICAgICAgKGFmdGVyQWxsKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdDJHdGsvVGVzdFByaW50aW5nLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RQcmludGluZy5jcHAuCisgICAgICAgICh0ZXN0UHJp
bnRPcGVyYXRpb25QcmludFNldHRpbmdzKToKKyAgICAgICAgKHdlYlZpZXdQcmludENhbGxiYWNr
KToKKyAgICAgICAgKHRlc3RXZWJWaWV3UHJpbnQpOgorICAgICAgICAodGVzdFByaW50T3BlcmF0
aW9uUHJpbnQpOgorICAgICAgICAodGVzdFByaW50T3BlcmF0aW9uRXJyb3JzKToKKyAgICAgICAg
KGJlZm9yZUFsbCk6CisgICAgICAgIChhZnRlckFsbCk6CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RSZXNvdXJjZXMuY3BwOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFJlc291cmNlcy5jcHAuCisgICAg
ICAgICh0ZXN0V2ViVmlld1Jlc291cmNlcyk6CisgICAgICAgICh0ZXN0V2ViUmVzb3VyY2VMb2Fk
aW5nKToKKyAgICAgICAgKHRlc3RXZWJSZXNvdXJjZVJlc3BvbnNlKToKKyAgICAgICAgKHRlc3RX
ZWJSZXNvdXJjZU1pbWVUeXBlKToKKyAgICAgICAgKHRlc3RXZWJSZXNvdXJjZVN1Z2dlc3RlZEZp
bGVuYW1lKToKKyAgICAgICAgKHRlc3RXZWJSZXNvdXJjZUFjdGl2ZVVSSSk6CisgICAgICAgICh0
ZXN0V2ViUmVzb3VyY2VHZXREYXRhKToKKyAgICAgICAgKHRlc3RXZWJWaWV3UmVzb3VyY2VzSGlz
dG9yeUNhY2hlKToKKyAgICAgICAgKHRlc3RXZWJSZXNvdXJjZVNlbmRSZXF1ZXN0KToKKyAgICAg
ICAgKGFkZENhY2hlSFRUUEhlYWRlcnNUb1Jlc3BvbnNlKToKKyAgICAgICAgKHNlcnZlckNhbGxi
YWNrKToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAgIChhZnRlckFsbCk6CisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RTU0wuY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFNTTC5jcHAuCisg
ICAgICAgICh0ZXN0U1NMKToKKyAgICAgICAgKHRlc3RJbnNlY3VyZUNvbnRlbnQpOgorICAgICAg
ICAodGVzdFRMU0Vycm9yc1BvbGljeSk6CisgICAgICAgICh0ZXN0TG9hZEZhaWxlZFdpdGhUTFNF
cnJvcnMpOgorICAgICAgICAoaHR0cHNTZXJ2ZXJDYWxsYmFjayk6CisgICAgICAgIChodHRwU2Vy
dmVyQ2FsbGJhY2spOgorICAgICAgICAoYmVmb3JlQWxsKToKKyAgICAgICAgKGFmdGVyQWxsKToK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFVJQ2xpZW50LmNw
cDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rl
c3RVSUNsaWVudC5jcHAuCisgICAgICAgICh0ZXN0V2ViVmlld0NyZWF0ZVJlYWR5Q2xvc2UpOgor
ICAgICAgICAoY2hlY2tNaW1lVHlwZUZvckZpbHRlcik6CisgICAgICAgICh0ZXN0V2ViVmlld0Fs
bG93TW9kYWxEaWFsb2dzKToKKyAgICAgICAgKHRlc3RXZWJWaWV3RGlzYWxsb3dNb2RhbERpYWxv
Z3MpOgorICAgICAgICAodGVzdFdlYlZpZXdKYXZhU2NyaXB0RGlhbG9ncyk6CisgICAgICAgICh0
ZXN0V2ViVmlld1dpbmRvd1Byb3BlcnRpZXMpOgorICAgICAgICAodGVzdFdlYlZpZXdNb3VzZVRh
cmdldCk6CisgICAgICAgICh0ZXN0V2ViVmlld1Blcm1pc3Npb25SZXF1ZXN0cyk6CisgICAgICAg
ICh0ZXN0V2ViVmlld0ZpbGVDaG9vc2VyUmVxdWVzdCk6CisgICAgICAgIChiZWZvcmVBbGwpOgor
ICAgICAgICAoYWZ0ZXJBbGwpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Mkd0ay9UZXN0V2ViRXh0ZW5zaW9ucy5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViRXh0ZW5zaW9ucy5jcHAuCisgICAgICAgICh0
ZXN0V2ViRXh0ZW5zaW9uR2V0VGl0bGUpOgorICAgICAgICAoZG9jdW1lbnRMb2FkZWRDYWxsYmFj
ayk6CisgICAgICAgICh0ZXN0RG9jdW1lbnRMb2FkZWRTaWduYWwpOgorICAgICAgICAod2ViUHJv
Y2Vzc0NyYXNoZWRDYWxsYmFjayk6CisgICAgICAgICh0ZXN0V2ViS2l0V2ViVmlld1Byb2Nlc3ND
cmFzaGVkKToKKyAgICAgICAgKHRlc3RXZWJFeHRlbnNpb25XaW5kb3dPYmplY3RDbGVhcmVkKToK
KyAgICAgICAgKHNjcmlwdERpYWxvZ0NhbGxiYWNrKToKKyAgICAgICAgKHJ1bkphdmFTY3JpcHRJ
bklzb2xhdGVkV29ybGRGaW5pc2hlZENhbGxiYWNrKToKKyAgICAgICAgKHRlc3RXZWJFeHRlbnNp
b25Jc29sYXRlZFdvcmxkKToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAgIChhZnRlckFs
bCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRB
Y2Nlc3NpYmlsaXR5LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5LmNwcC4KKyAgICAgICAgKHN0b3BU
ZXN0U2VydmVyKToKKyAgICAgICAgKHNpZ0Fib3J0SGFuZGxlcik6CisgICAgICAgICh0ZXN0U2Vy
dmVyTW9uaXRvclRocmVhZEZ1bmMpOgorICAgICAgICAoc3RhcnRUZXN0U2VydmVyTW9uaXRvcik6
CisgICAgICAgIChzdGFydFRlc3RTZXJ2ZXIpOgorICAgICAgICAoY2hlY2tBdHNwaUFjY2Vzc2li
bGUpOgorICAgICAgICAoZmluZFRlc3RTZXJ2ZXJBcHBsaWNhdGlvbik6CisgICAgICAgICh0ZXN0
QXRzcGlCYXNpY0hpZXJhcmNoeSk6CisgICAgICAgIChiZWZvcmVBbGwpOgorICAgICAgICAoYWZ0
ZXJBbGwpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2Vi
S2l0RmF2aWNvbkRhdGFiYXNlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2UuY3BwLgorICAgICAg
ICAoc2VydmVyQ2FsbGJhY2spOgorICAgICAgICAodGVzdE5vdEluaXRpYWxpemVkKToKKyAgICAg
ICAgKHRlc3RTZXREaXJlY3RvcnkpOgorICAgICAgICAodGVzdENsZWFyRGF0YWJhc2UpOgorICAg
ICAgICAodGVzdEdldEZhdmljb24pOgorICAgICAgICAodGVzdEdldEZhdmljb25VUkkpOgorICAg
ICAgICAodGVzdFdlYlZpZXdGYXZpY29uKToKKyAgICAgICAgKHRlc3RGYXZpY29uRGF0YWJhc2Up
OgorICAgICAgICAoYmVmb3JlQWxsKToKKyAgICAgICAgKHdlYmtpdEZhdmljb25EYXRhYmFzZUZp
bmFsaXplZENhbGxiYWNrKToKKyAgICAgICAgKGFmdGVyQWxsKToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdEZpbmRDb250cm9sbGVyLmNwcDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJL
aXRGaW5kQ29udHJvbGxlci5jcHAuCisgICAgICAgICh0ZXN0RmluZENvbnRyb2xsZXJUZXh0Rm91
bmQpOgorICAgICAgICAodGVzdEZpbmRDb250cm9sbGVyVGV4dE5vdEZvdW5kKToKKyAgICAgICAg
KHRlc3RGaW5kQ29udHJvbGxlck1hdGNoQ291bnQpOgorICAgICAgICAodGVzdEZpbmRDb250cm9s
bGVyTWF4TWF0Y2hDb3VudCk6CisgICAgICAgICh0ZXN0RmluZENvbnRyb2xsZXJOZXh0KToKKyAg
ICAgICAgKHRlc3RGaW5kQ29udHJvbGxlclByZXZpb3VzKToKKyAgICAgICAgKHRlc3RGaW5kQ29u
dHJvbGxlckNvdW50ZWRNYXRjaGVzKToKKyAgICAgICAgKHRlc3RGaW5kQ29udHJvbGxlck9wdGlv
bnMpOgorICAgICAgICAodGVzdEZpbmRDb250cm9sbGVySGlkZSk6CisgICAgICAgICh0ZXN0Rmlu
ZENvbnRyb2xsZXJJbnN0YW5jZSk6CisgICAgICAgICh0ZXN0RmluZENvbnRyb2xsZXJHZXR0ZXJz
KToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAgIChhZnRlckFsbCk6CisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRQb2xpY3lDbGllbnQuY3Bw
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVz
dFdlYktpdFBvbGljeUNsaWVudC5jcHAuCisgICAgICAgICh0ZXN0TmF2aWdhdGlvblBvbGljeSk6
CisgICAgICAgICh0ZXN0UmVzcG9uc2VQb2xpY3kpOgorICAgICAgICAoY3JlYXRlQ2FsbGJhY2sp
OgorICAgICAgICAodGVzdE5ld1dpbmRvd1BvbGljeSk6CisgICAgICAgIChzZXJ2ZXJDYWxsYmFj
ayk6CisgICAgICAgIChiZWZvcmVBbGwpOgorICAgICAgICAoYWZ0ZXJBbGwpOgorICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0U2V0dGluZ3MuY3BwOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdl
YktpdFNldHRpbmdzLmNwcC4KKyAgICAgICAgKHRlc3RXZWJLaXRTZXR0aW5ncyk6CisgICAgICAg
ICh0ZXN0V2ViS2l0U2V0dGluZ3NOZXdXaXRoU2V0dGluZ3MpOgorICAgICAgICAoY29udmVydFdl
YlZpZXdNYWluUmVzb3VyY2VEYXRhVG9DU3RyaW5nKToKKyAgICAgICAgKGFzc2VydFRoYXRVc2Vy
QWdlbnRJc1NlbnRJbkhlYWRlcnMpOgorICAgICAgICAodGVzdFdlYktpdFNldHRpbmdzVXNlckFn
ZW50KToKKyAgICAgICAgKHNlcnZlckNhbGxiYWNrKToKKyAgICAgICAgKGJlZm9yZUFsbCk6Cisg
ICAgICAgIChhZnRlckFsbCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQy
R3RrL1Rlc3RXZWJLaXRWZXJzaW9uLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRWZXJzaW9uLmNwcC4KKyAgICAgICAgKHRl
c3RXZWJLaXRWZXJzaW9uKToKKyAgICAgICAgKHRlc3RXZWJLaXRDaGVja1ZlcnNpb24pOgorICAg
ICAgICAoYmVmb3JlQWxsKToKKyAgICAgICAgKGFmdGVyQWxsKToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFdlYkNvbnRleHQuY3BwOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdl
YkNvbnRleHQuY3BwLgorICAgICAgICAodGVzdFdlYkNvbnRleHREZWZhdWx0KToKKyAgICAgICAg
KHRlc3RXZWJDb250ZXh0R2V0UGx1Z2lucyk6CisgICAgICAgICh0ZXN0V2ViQ29udGV4dFVSSVNj
aGVtZSk6CisgICAgICAgICh0ZXN0V2ViQ29udGV4dFNwZWxsQ2hlY2tlcik6CisgICAgICAgICh0
ZXN0V2ViQ29udGV4dExhbmd1YWdlcyk6CisgICAgICAgIChzZXJ2ZXJDYWxsYmFjayk6CisgICAg
ICAgICh0ZXN0V2ViQ29udGV4dFNlY3VyaXR5UG9saWN5KToKKyAgICAgICAgKGJlZm9yZUFsbCk6
CisgICAgICAgIChhZnRlckFsbCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXQyR3RrL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcC4KKyAgICAgICAg
KHRlc3RXZWJWaWV3RGVmYXVsdENvbnRleHQpOgorICAgICAgICAodGVzdFdlYlZpZXdDdXN0b21D
aGFyc2V0KToKKyAgICAgICAgKHRlc3RXZWJWaWV3U2V0dGluZ3MpOgorICAgICAgICAodGVzdFdl
YlZpZXdab29tTGV2ZWwpOgorICAgICAgICAodGVzdFdlYlZpZXdSdW5KYXZhU2NyaXB0KToKKyAg
ICAgICAgKHRlc3RXZWJWaWV3RnVsbFNjcmVlbik6CisgICAgICAgICh0ZXN0V2ViVmlld0NhblNo
b3dNSU1FVHlwZSk6CisgICAgICAgICh0ZXN0V2ViVmlld1N1Ym1pdEZvcm0pOgorICAgICAgICAo
dGVzdFdlYlZpZXdTYXZlKToKKyAgICAgICAgKHRlc3RXZWJWaWV3TW9kZSk6CisgICAgICAgICh0
ZXN0V2ViVmlld1BhZ2VWaXNpYmlsaXR5KToKKyAgICAgICAgKHRlc3RXZWJWaWV3U25hcHNob3Qp
OgorICAgICAgICAoYmVmb3JlQWxsKToKKyAgICAgICAgKGFmdGVyQWxsKToKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFdlYlZpZXdHcm91cC5jcHA6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0
V2ViS2l0V2ViVmlld0dyb3VwLmNwcC4KKyAgICAgICAgKHRlc3RXZWJWaWV3R3JvdXBEZWZhdWx0
KToKKyAgICAgICAgKHRlc3RXZWJWaWV3R3JvdXBOZXdHcm91cCk6CisgICAgICAgICh0ZXN0V2Vi
Vmlld05ld1dpdGhHcm91cCk6CisgICAgICAgICh0ZXN0V2ViVmlld0dyb3VwU2V0dGluZ3MpOgor
ICAgICAgICAoaXNTdHlsZVNoZWV0SW5qZWN0ZWRGb3JVUkxBdFBhdGgpOgorICAgICAgICAoZmls
bFVSTExpc3RGcm9tUGF0aHMpOgorICAgICAgICAocmVtb3ZlT2xkSW5qZWN0ZWRTdHlsZVNoZWV0
c0FuZFJlc2V0TGlzdHMpOgorICAgICAgICAodGVzdFdlYlZpZXdHcm91cEluamVjdGVkU3R5bGVT
aGVldCk6CisgICAgICAgIChzZXJ2ZXJDYWxsYmFjayk6CisgICAgICAgIChiZWZvcmVBbGwpOgor
ICAgICAgICAoYWZ0ZXJBbGwpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Mkd0ay9UZXN0V2ViVmlld0VkaXRvci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViVmlld0VkaXRvci5jcHAuCisgICAgICAgICh0
ZXN0V2ViVmlld0VkaXRvckN1dENvcHlQYXN0ZU5vbkVkaXRhYmxlKToKKyAgICAgICAgKHRlc3RX
ZWJWaWV3RWRpdG9yQ3V0Q29weVBhc3RlRWRpdGFibGUpOgorICAgICAgICAodGVzdFdlYlZpZXdF
ZGl0b3JTZWxlY3RBbGxOb25FZGl0YWJsZSk6CisgICAgICAgICh0ZXN0V2ViVmlld0VkaXRvclNl
bGVjdEFsbEVkaXRhYmxlKToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAgIChhZnRlckFs
bCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1dlYkV4dGVuc2lv
blRlc3QuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvV2ViRXh0ZW5zaW9uVGVzdC5jcHAuCisgICAgICAgIChEZWxheWVkU2lnbmFsOjpEZWxh
eWVkU2lnbmFsKToKKyAgICAgICAgKGVtaXREb2N1bWVudExvYWRlZCk6CisgICAgICAgIChkb2N1
bWVudExvYWRlZENhbGxiYWNrKToKKyAgICAgICAgKGVtaXRVUklDaGFuZ2VkKToKKyAgICAgICAg
KHVyaUNoYW5nZWRDYWxsYmFjayk6CisgICAgICAgIChzZW5kUmVxdWVzdENhbGxiYWNrKToKKyAg
ICAgICAgKHBhZ2VDcmVhdGVkQ2FsbGJhY2spOgorICAgICAgICAoZWNob0NhbGxiYWNrKToKKyAg
ICAgICAgKHdpbmRvd09iamVjdENsZWFyZWQpOgorICAgICAgICAoZ2V0V2ViUGFnZSk6CisgICAg
ICAgIChtZXRob2RDYWxsQ2FsbGJhY2spOgorICAgICAgICAod2Via2l0X3dlYl9leHRlbnNpb25f
aW5pdGlhbGl6ZSk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1dl
YlByb2Nlc3NUZXN0LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL1dlYlByb2Nlc3NUZXN0LmNwcC4KKyAgICAgICAgKHRlc3RzTWFwKToKKyAg
ICAgICAgKFdlYlByb2Nlc3NUZXN0OjphZGQpOgorICAgICAgICAoV2ViUHJvY2Vzc1Rlc3Q6OmNy
ZWF0ZSk6CisgICAgICAgIChtZXRob2RDYWxsQ2FsbGJhY2spOgorICAgICAgICAod2Via2l0X3dl
Yl9leHRlbnNpb25faW5pdGlhbGl6ZSk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyR3RrL1dlYlByb2Nlc3NUZXN0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJQcm9jZXNzVGVzdC5oLgorICAgICAgICAoV2ViUHJv
Y2Vzc1Rlc3Q6On5XZWJQcm9jZXNzVGVzdCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXQyR3RrL3Jlc291cmNlcy9saW5rLXRpdGxlLmpzOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvcmVzb3VyY2VzL2xpbmstdGl0bGUuanMu
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL3Jlc291cmNlcy90ZXN0
LWNlcnQucGVtOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvcmVzb3VyY2VzL3Rlc3QtY2VydC5wZW0uCisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXQyR3RrL3Jlc291cmNlcy90ZXN0LWtleS5wZW06IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9yZXNvdXJjZXMvdGVzdC1rZXkucGVt
LgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9yZXNvdXJjZXMvd2Vi
a2l0Mmd0ay10ZXN0cy5ncmVzb3VyY2UueG1sOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvcmVzb3VyY2VzL3dlYmtpdDJndGstdGVzdHMuZ3Jlc291
cmNlLnhtbC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9yZXNvdXJj
ZXMvYmxhbmsuaWNvOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvcmVzb3Vy
Y2VzL2JsYW5rLmljby4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9y
ZXNvdXJjZXMvdGVzdC5odG1sOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9ndGsvdGVzdHMv
cmVzb3VyY2VzL3Rlc3QuaHRtbC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dEd0ay9yZXNvdXJjZXMvdGVzdC5vZ2c6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2d0ay90
ZXN0cy9yZXNvdXJjZXMvdGVzdC5vZ2cuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRHdGsvcmVzb3VyY2VzL3Rlc3QucGRmOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9n
dGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3QucGRmLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0R3RrL3Jlc291cmNlcy90ZXN0LnR4dDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJL
aXQvZ3RrL3Rlc3RzL3Jlc291cmNlcy90ZXN0LnR4dC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdEd0ay90ZXN0X3V0aWxzLmM6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
L2d0ay90ZXN0cy90ZXN0X3V0aWxzLmMuCisgICAgICAgICh0ZXN0dXRpbHNfcmVsYXRpdmVfY2hk
aXIpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RfdXRpbHMu
aDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RfdXRpbHMuaC4KKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0YXBwbGljYXRpb25jYWNo
ZS5jOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGFwcGxpY2F0aW9u
Y2FjaGUuYy4KKyAgICAgICAgKHRlc3RfYXBwbGljYXRpb25fY2FjaGVfbWF4aW11bV9zaXplKToK
KyAgICAgICAgKG1haW4pOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3Rr
L3Rlc3RhdGsuYzogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhdGsu
Yy4KKyAgICAgICAgKGdldFdlYkFyZWFPYmplY3QpOgorICAgICAgICAodGV4dENhcmV0TW92ZWRD
YWxsYmFjayk6CisgICAgICAgICh0ZXN0V2Via2l0QXRrQ2FyZXRPZmZzZXRzKToKKyAgICAgICAg
KHRlc3RXZWJraXRBdGtDYXJldE9mZnNldHNBbmRFeHRyYW5vdXNXaGl0ZVNwYWNlcyk6CisgICAg
ICAgICh0ZXN0V2Via2l0QXRrQ29tYm9Cb3gpOgorICAgICAgICAodXBkYXRlTG9hZGluZ0V2ZW50
c1Jlc3VsdCk6CisgICAgICAgIChkb2N1bWVudExvYWRpbmdFdmVudENhbGxiYWNrKToKKyAgICAg
ICAgKHRlc3RXZWJraXRBdGtEb2N1bWVudExvYWRpbmdFdmVudHMpOgorICAgICAgICAodGVzdFdl
YmtpdEF0a0VtYmVkZGVkT2JqZWN0cyk6CisgICAgICAgICh0ZXN0V2Via2l0QXRrR2V0SGVhZGVy
c0luVGFibGUpOgorICAgICAgICAoY29tcEF0a0F0dHJpYnV0ZSk6CisgICAgICAgIChjb21wQXRr
QXR0cmlidXRlTmFtZSk6CisgICAgICAgIChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVOYW1lSGFz
VmFsdWUpOgorICAgICAgICAoYXRrQXR0cmlidXRlU2V0Q29udGFpbnNBdHRyaWJ1dGVOYW1lKToK
KyAgICAgICAgKGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKToKKyAgICAgICAgKGF0
a0F0dHJpYnV0ZVNldEFyZUVxdWFsKToKKyAgICAgICAgKHRlc3RXZWJraXRBdGtUZXh0QXR0cmli
dXRlcyk6CisgICAgICAgICh0ZXh0U2VsZWN0aW9uQ2hhbmdlZENhbGxiYWNrKToKKyAgICAgICAg
KHRlc3RXZWJraXRBdGtUZXh0U2VsZWN0aW9ucyk6CisgICAgICAgICh0ZXN0V2Via2l0QXRrR2V0
RXh0ZW50cyk6CisgICAgICAgICh0ZXN0V2Via2l0QXRrTGF5b3V0QW5kRGF0YVRhYmxlcyk6Cisg
ICAgICAgICh0ZXN0V2Via2l0QXRrTGlua3NXaXRoSW5saW5lSW1hZ2VzKToKKyAgICAgICAgKHRl
c3RXZWJraXRBdGtIeXBlcnRleHRBbmRIeXBlcmxpbmtzKToKKyAgICAgICAgKHRlc3RXZWJraXRB
dGtMaXN0c09mSXRlbXMpOgorICAgICAgICAodGV4dENoYW5nZWRDYik6CisgICAgICAgICh0ZXN0
V2Via2l0QXRrVGV4dENoYW5nZWROb3RpZmljYXRpb25zKToKKyAgICAgICAgKHRlc3RXZWJraXRB
dGtQYXJlbnRGb3JSb290T2JqZWN0KToKKyAgICAgICAgKHRlc3RXZWJraXRBdGtTZXRQYXJlbnRG
b3JPYmplY3QpOgorICAgICAgICAoaW5pdGlhbGl6ZVRlc3RpbmdGcmFtZXdvcmspOgorICAgICAg
ICAobWFpbik6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGF0
a3JvbGVzLmM6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXRrcm9s
ZXMuYy4KKyAgICAgICAgKGZpbmlzaF9sb2FkaW5nKToKKyAgICAgICAgKGF0a19yb2xlc19maXh0
dXJlX3NldHVwKToKKyAgICAgICAgKGF0a19yb2xlc19maXh0dXJlX3RlYXJkb3duKToKKyAgICAg
ICAgKGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKToKKyAgICAgICAgKHRlc3Rfd2Via2l0X2F0a19n
ZXRfcm9sZV9kb2N1bWVudF9mcmFtZSk6CisgICAgICAgICh0ZXN0X3dlYmtpdF9hdGtfZ2V0X3Jv
bGVfaGVhZGluZyk6CisgICAgICAgICh0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfaW1hZ2UpOgor
ICAgICAgICAodGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xpbmspOgorICAgICAgICAodGVzdF93
ZWJraXRfYXRrX2dldF9yb2xlX2xpc3RfYW5kX2l0ZW0pOgorICAgICAgICAodGVzdF93ZWJraXRf
YXRrX2dldF9yb2xlX3BhcmFncmFwaCk6CisgICAgICAgICh0ZXN0X3dlYmtpdF9hdGtfZ2V0X3Jv
bGVfc2VjdGlvbik6CisgICAgICAgICh0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfdGFibGUpOgor
ICAgICAgICAodGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX3NlcGFyYXRvcik6CisgICAgICAgICh0
ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfY29tYm9ib3gpOgorICAgICAgICAodGVzdF93ZWJraXRf
YXRrX2dldF9yb2xlX2Zvcm0pOgorICAgICAgICAodGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2No
ZWNrX2JveCk6CisgICAgICAgICh0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfZW50cnkpOgorICAg
ICAgICAodGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xhYmVsKToKKyAgICAgICAgKHRlc3Rfd2Vi
a2l0X2F0a19nZXRfcm9sZV9saXN0Ym94KToKKyAgICAgICAgKHRlc3Rfd2Via2l0X2F0a19nZXRf
cm9sZV9wYXNzd29yZF90ZXh0KToKKyAgICAgICAgKHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9w
dXNoX2J1dHRvbik6CisgICAgICAgICh0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfcmFkaW9fYnV0
dG9uKToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0R3RrL3Rlc3Rjb250ZXh0bWVudS5jOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9ndGsv
dGVzdHMvdGVzdGNvbnRleHRtZW51LmMuCisgICAgICAgICh0ZXN0SW5mb05ldyk6CisgICAgICAg
ICh0ZXN0SW5mb0Rlc3Ryb3kpOgorICAgICAgICAoY29udGV4dE1lbnVGaXh0dXJlU2V0dXApOgor
ICAgICAgICAoY29udGV4dE1lbnVGaXh0dXJlVGVhcmRvd24pOgorICAgICAgICAoY2hlY2tBY3Rp
b24pOgorICAgICAgICAoY2hlY2tBY3Rpb25XaXRoU3VibWVudSk6CisgICAgICAgIChjaGVja1Nl
cGFyYXRvcik6CisgICAgICAgIChjb250ZXh0TWVudUNhbGxiYWNrKToKKyAgICAgICAgKHB1c2hF
dmVudCk6CisgICAgICAgIChsb2FkU3RhdHVzQ2FsbGJhY2spOgorICAgICAgICAobWFwRXZlbnRD
YWxsYmFjayk6CisgICAgICAgICh0ZXN0Q29udGV4dE1lbnUpOgorICAgICAgICAoY29udGV4dE1l
bnVDdXN0b21JdGVtQ2FsbGJhY2spOgorICAgICAgICAodGVzdENvbnRleHRNZW51Q3VzdG9tSXRl
bSk6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dEd0ay90ZXN0Y29weWFuZHBhc3RlLmM6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2d0ay90
ZXN0cy90ZXN0Y29weWFuZHBhc3RlLmMuCisgICAgICAgICh0ZXN0X2luZm9fbmV3KToKKyAgICAg
ICAgKHRlc3RfaW5mb19kZXN0cm95KToKKyAgICAgICAgKGNvcHlfYW5kX3Bhc3RlX2ZpeHR1cmVf
c2V0dXApOgorICAgICAgICAoY29weV9hbmRfcGFzdGVfZml4dHVyZV90ZWFyZG93bik6CisgICAg
ICAgIChsb2FkX3N0YXR1c19jYik6CisgICAgICAgIChtYXBfZXZlbnRfY2IpOgorICAgICAgICAo
dGVzdF9jb3B5X2FuZF9wYXN0ZSk6CisgICAgICAgIChydW5QYXN0ZVRlc3RDYWxsYmFjayk6Cisg
ICAgICAgICh3aW5kb3dfb2JqZWN0X2NsZWFyZWRfY2FsbGJhY2spOgorICAgICAgICAocGFzdGlu
Z190ZXN0X2dldF9kYXRhX2NhbGxiYWNrKToKKyAgICAgICAgKHBhc3RpbmdfdGVzdF9jbGVhcl9k
YXRhX2NhbGxiYWNrKToKKyAgICAgICAgKHRlc3RfcGFzdGluZ19tYXJrdXApOgorICAgICAgICAo
bWFpbik6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGRvbWRv
Y3VtZW50LmM6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0ZG9tZG9j
dW1lbnQuYy4KKyAgICAgICAgKGZpbmlzaF9sb2FkaW5nKToKKyAgICAgICAgKGRvbV9kb2N1bWVu
dF9maXh0dXJlX3NldHVwKToKKyAgICAgICAgKGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3du
KToKKyAgICAgICAgKHRlc3RfZG9tX2RvY3VtZW50X3RpdGxlKToKKyAgICAgICAgKHRlc3RfZG9t
X2RvY3VtZW50X2dldF9lbGVtZW50c19ieV90YWdfbmFtZSk6CisgICAgICAgICh0ZXN0X2RvbV9k
b2N1bWVudF9nZXRfZWxlbWVudHNfYnlfY2xhc3NfbmFtZSk6CisgICAgICAgICh0ZXN0X2RvbV9k
b2N1bWVudF9nZXRfZWxlbWVudF9ieV9pZCk6CisgICAgICAgICh0ZXN0X2RvbV9kb2N1bWVudF9n
ZXRfbGlua3MpOgorICAgICAgICAodGVzdF9kb21fZG9jdW1lbnRfaW5zZXJ0X3Jvdyk6CisgICAg
ICAgICh0ZXN0X2RvbV9kb2N1bWVudF9ldmFsdWF0ZSk6CisgICAgICAgICh3ZWFrX25vdGlmeSk6
CisgICAgICAgICh0ZXN0X2RvbV9kb2N1bWVudF9nYXJiYWdlX2NvbGxlY3Rpb24pOgorICAgICAg
ICAobWFpbik6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGRv
bWRvbXdpbmRvdy5jOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRv
bWRvbXdpbmRvdy5jLgorICAgICAgICAoZmluaXNoX2xvYWRpbmcpOgorICAgICAgICAoZG9tX2Rv
bXZpZXdfZml4dHVyZV9zZXR1cCk6CisgICAgICAgIChkb21fZG9tdmlld19maXh0dXJlX3RlYXJk
b3duKToKKyAgICAgICAgKGRvbV9kb21fd2luZG93X2ZpeHR1cmVfc2V0dXApOgorICAgICAgICAo
ZG9tX2RvbV93aW5kb3dfZml4dHVyZV90ZWFyZG93bik6CisgICAgICAgIChsb2FkZWRDYWxsYmFj
ayk6CisgICAgICAgIChjbGlja2VkQ2FsbGJhY2spOgorICAgICAgICAobWFwX2V2ZW50X2NiKToK
KyAgICAgICAgKGxvYWRfZXZlbnRfY2FsbGJhY2spOgorICAgICAgICAodGVzdF9kb21fZG9tdmll
d19zaWduYWxzKToKKyAgICAgICAgKGNsaWNrZWRfY2IpOgorICAgICAgICAobG9hZF9zdGF0dXNf
Y2FsbGJhY2spOgorICAgICAgICAodGVzdF9kb21fZG9tdmlld19kaXNwYXRjaF9ldmVudCk6Cisg
ICAgICAgICh0ZXN0X2RvbV9kb21fd2luZG93X2dldF9jb21wdXRlZF9zdHlsZSk6CisgICAgICAg
IChtYWluKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0ZG9t
bm9kZS5jOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvbW5vZGUu
Yy4KKyAgICAgICAgKGZpbmlzaF9sb2FkaW5nKToKKyAgICAgICAgKGRvbV9ub2RlX2ZpeHR1cmVf
c2V0dXApOgorICAgICAgICAoZG9tX25vZGVfZml4dHVyZV90ZWFyZG93bik6CisgICAgICAgICh0
ZXN0X2RvbV9ub2RlX2hpZXJhcmNoeV9uYXZpZ2F0aW9uKToKKyAgICAgICAgKHRlc3RfZG9tX25v
ZGVfaW5zZXJ0aW9uKToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0R3RrL3Rlc3Rkb3dubG9hZC5jOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktp
dC9ndGsvdGVzdHMvdGVzdGRvd25sb2FkLmMuCisgICAgICAgICh0ZXN0X3dlYmtpdF9kb3dubG9h
ZF9jcmVhdGUpOgorICAgICAgICAobmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fcmVxdWVzdGVk
X2NiKToKKyAgICAgICAgKG5vdGlmeV9zdGF0dXNfY2IpOgorICAgICAgICAoc2V0X2ZpbGVuYW1l
KToKKyAgICAgICAgKGhhbmRsZV9kb3dubG9hZF9yZXF1ZXN0ZWRfY2IpOgorICAgICAgICAoZG93
bmxvYWRfcmVxdWVzdGVkX2NiKToKKyAgICAgICAgKGRvd25sb2FkX3JlcXVlc3RlZF9hc3luY2hf
Y2IpOgorICAgICAgICAodGVzdF93ZWJraXRfZG93bmxvYWRfcGVyZm9ybSk6CisgICAgICAgICh0
ZXN0X3dlYmtpdF9kb3dubG9hZF9zeW5jaCk6CisgICAgICAgICh0ZXN0X3dlYmtpdF9kb3dubG9h
ZF9hc3luY2gpOgorICAgICAgICAobWltZV90eXBlX3BvbGljeV9kZWNpc2lvbl9yZXF1ZXN0ZWRf
Y2IpOgorICAgICAgICAoaWRsZV9xdWl0X2xvb3BfY2IpOgorICAgICAgICAodGVzdF93ZWJraXRf
ZG93bmxvYWRfZGF0YSk6CisgICAgICAgIChub3RpZnlEb3dubG9hZFN0YXR1c0NhbGxiYWNrKToK
KyAgICAgICAgKHNlcnZlckNhbGxiYWNrKToKKyAgICAgICAgKHRlc3Rfd2Via2l0X2Rvd25sb2Fk
X25vdF9mb3VuZCk6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdEd0ay90ZXN0ZmF2aWNvbmRhdGFiYXNlLmM6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0L2d0ay90ZXN0cy90ZXN0ZmF2aWNvbmRhdGFiYXNlLmMuCisgICAgICAgIChzZXJ2ZXJD
YWxsYmFjayk6CisgICAgICAgIChkZWxldGVEYXRhYmFzZUZpbGVJZkV4aXN0cyk6CisgICAgICAg
ICh0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlU2V0UGF0aCk6CisgICAgICAgIChmYXZpY29uRGF0
YWJhc2VHZXRWYWxpZEZhdmljb25DYWxsYmFjayk6CisgICAgICAgIChmYXZpY29uRGF0YWJhc2VH
ZXRJbnZhbGlkRmF2aWNvbkNhbGxiYWNrKToKKyAgICAgICAgKGZhdmljb25EYXRhYmFzZUdldEZh
dmljb25DYW5jZWxsZWRDYWxsYmFjayk6CisgICAgICAgIChxdWl0TWFpbkxvb3BJZkxvYWRDb21w
bGV0ZWQpOgorICAgICAgICAoaWRsZVF1aXRMb29wQ2FsbGJhY2spOgorICAgICAgICAod2Via2l0
V2ViVmlld0ljb25Mb2FkZWQpOgorICAgICAgICAobG9hZFVSSSk6CisgICAgICAgIChmYXZpY29u
RGF0YWJhc2VHZXRWYWxpZEZhdmljb25JZGxlKToKKyAgICAgICAgKGZhdmljb25EYXRhYmFzZUdl
dEludmFsaWRGYXZpY29uSWRsZSk6CisgICAgICAgIChmYXZpY29uRGF0YWJhc2VHZXRGYXZpY29u
Q2FuY2VsbGVkSWRsZSk6CisgICAgICAgICh0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlR2V0RmF2
aWNvbik6CisgICAgICAgICh0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNvblVSSSk6
CisgICAgICAgICh0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlUmVtb3ZlQWxsKToKKyAgICAgICAg
KHRlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VDbG9zZURhdGFiYXNlKToKKyAgICAgICAgKG1haW4p
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RnbG9iYWxzLmM6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0Z2xvYmFscy5jLgorICAg
ICAgICAodGVzdF9nbG9iYWxzX2RlZmF1bHRfc2Vzc2lvbik6CisgICAgICAgICh0ZXN0X2dsb2Jh
bHNfc2VjdXJpdHlfcG9saWN5KToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RoaXR0ZXN0cmVzdWx0LmM6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0aGl0dGVzdHJlc3VsdC5jLgorICAgICAgICAodGVz
dF9pbmZvX25ldyk6CisgICAgICAgICh0ZXN0X2luZm9fZGVzdHJveSk6CisgICAgICAgIChoaXRf
dGVzdF9yZXN1bHRfZml4dHVyZV9zZXR1cCk6CisgICAgICAgIChoaXRfdGVzdF9yZXN1bHRfZml4
dHVyZV90ZWFyZG93bik6CisgICAgICAgIChsb2FkX3N0YXR1c19jYik6CisgICAgICAgICh0ZXN0
X3dlYmtpdF9oaXRfdGVzdF9yZXN1bHQpOgorICAgICAgICAobWFpbik6CisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGh0dHBiYWNrZW5kLmM6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0aHR0cGJhY2tlbmQuYy4KKyAgICAgICAgKG5h
dmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX3JlcXVlc3RlZF9jYik6CisgICAgICAgICh0ZXN0X3Nv
dXBfbWVzc2FnZV9saWZldGltZSk6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0a2V5ZXZlbnRzLmM6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0a2V5ZXZlbnRzLmMuCisgICAgICAgICh0ZXN0X2luZm9f
bmV3KToKKyAgICAgICAgKHRlc3RfaW5mb19kZXN0cm95KToKKyAgICAgICAgKGtleV9ldmVudF9m
aXh0dXJlX3NldHVwKToKKyAgICAgICAgKGtleV9ldmVudF9maXh0dXJlX3RlYXJkb3duKToKKyAg
ICAgICAgKGtleV9wcmVzc19ldmVudF9jYik6CisgICAgICAgIChrZXlfcmVsZWFzZV9ldmVudF9j
Yik6CisgICAgICAgICh0ZXN0X2tleXByZXNzX2V2ZW50c19sb2FkX3N0YXR1c19jYik6CisgICAg
ICAgIChtYXBfZXZlbnRfY2IpOgorICAgICAgICAoc2V0dXBfa2V5ZXZlbnRfdGVzdCk6CisgICAg
ICAgICh0ZXN0X2tleXByZXNzX2V2ZW50cyk6CisgICAgICAgIChlbGVtZW50X3RleHRfZXF1YWxf
dG8pOgorICAgICAgICAodGVzdF9pbWVfbG9hZF9zdGF0dXNfY2IpOgorICAgICAgICAodGVzdF9p
bWUpOgorICAgICAgICAodmVyaWZ5X2NvbnRlbnRzKToKKyAgICAgICAgKHRlc3RfYmxvY2tpbmdf
bG9hZF9zdGF0dXNfY2IpOgorICAgICAgICAodGVzdF9ibG9ja2luZyk6CisgICAgICAgICh0ZXN0
X3hpbV9sb2FkX3N0YXR1c19jYik6CisgICAgICAgICh0ZXN0X3hpbSk6CisgICAgICAgIChtYWlu
KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0bG9hZGluZy5j
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGxvYWRpbmcuYy4KKyAg
ICAgICAgKHNlcnZlcl9jYWxsYmFjayk6CisgICAgICAgICh3ZWJfbG9hZGluZ19maXh0dXJlX3Nl
dHVwKToKKyAgICAgICAgKHdlYl9sb2FkaW5nX2ZpeHR1cmVfdGVhcmRvd24pOgorICAgICAgICAo
Z2V0X3VyaV9mb3JfcGF0aCk6CisgICAgICAgIChsb2FkX2ZpbmlzaGVkX2NiKToKKyAgICAgICAg
KHN0YXR1c19jaGFuZ2VkX2NiKToKKyAgICAgICAgKHRlc3RfbG9hZGluZ19zdGF0dXMpOgorICAg
ICAgICAobG9hZF9lcnJvcl9zdGF0dXNfY2hhbmdlZF9jYik6CisgICAgICAgIChsb2FkX2Vycm9y
X2NiKToKKyAgICAgICAgKHRlc3RfbG9hZGluZ19lcnJvcik6CisgICAgICAgIChsb2FkX2NhbmNl
bGxlZF9jYik6CisgICAgICAgIChzdG9wX2xvYWQpOgorICAgICAgICAobG9hZF9jYW5jZWxsZWRf
c3RhdHVzX2NoYW5nZWRfY2IpOgorICAgICAgICAodGVzdF9sb2FkaW5nX2NhbmNlbGxlZCk6Cisg
ICAgICAgIChsb2FkX2dvYmFja19zdGF0dXNfY2hhbmdlZF9jYik6CisgICAgICAgIChsb2FkX3dl
bnRiYWNrX3N0YXR1c19jaGFuZ2VkX2NiKToKKyAgICAgICAgKGxvYWRfZXJyb3JfdGVzdCk6Cisg
ICAgICAgICh0ZXN0X2xvYWRpbmdfZ29iYWNrKToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RtaW1laGFuZGxpbmcuYzogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RtaW1laGFuZGxpbmcuYy4KKyAgICAg
ICAgKHNlcnZlcl9jYWxsYmFjayk6CisgICAgICAgIChpZGxlX3F1aXRfbG9vcF9jYik6CisgICAg
ICAgIChtaW1lX3R5cGVfcG9saWN5X2RlY2lzaW9uX3JlcXVlc3RlZF9jYik6CisgICAgICAgICh0
ZXN0UmVtb3RlTWltZVR5cGUpOgorICAgICAgICAodGVzdExvY2FsTWltZVR5cGUpOgorICAgICAg
ICAobWFpbik6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdG5l
dHdvcmtyZXF1ZXN0LmM6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0
bmV0d29ya3JlcXVlc3QuYy4KKyAgICAgICAgKHRlc3RfbmV0d29ya19yZXF1ZXN0X2NyZWF0ZV9k
ZXN0cm95KToKKyAgICAgICAgKHRlc3RfbmV0d29ya19yZXF1ZXN0X3Byb3BlcnRpZXMpOgorICAg
ICAgICAobWFpbik6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVz
dG5ldHdvcmtyZXNwb25zZS5jOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9ndGsvdGVzdHMv
dGVzdG5ldHdvcmtyZXNwb25zZS5jLgorICAgICAgICAodGVzdF9uZXR3b3JrX3Jlc3BvbnNlX2Ny
ZWF0ZV9kZXN0cm95KToKKyAgICAgICAgKHRlc3RfbmV0d29ya19yZXNwb25zZV9wcm9wZXJ0aWVz
KToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
R3RrL3Rlc3R3ZWJiYWNrZm9yd2FyZGxpc3QuYzogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQv
Z3RrL3Rlc3RzL3Rlc3R3ZWJiYWNrZm9yd2FyZGxpc3QuYy4KKyAgICAgICAgKHRlc3Rfd2Via2l0
X3dlYl9oaXN0b3J5X2l0ZW1fbGlmZXRpbWUpOgorICAgICAgICAodGVzdF93ZWJraXRfd2ViX2Jh
Y2tfZm9yd2FyZF9saXN0X29yZGVyKToKKyAgICAgICAgKHRlc3Rfd2Via2l0X3dlYl9iYWNrX2Zv
cndhcmRfbGlzdF9hZGRfaXRlbSk6CisgICAgICAgICh0ZXN0X3dlYmtpdF93ZWJfYmFja19mb3J3
YXJkX2xpc3RfY2xlYXIpOgorICAgICAgICAobWFpbik6CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYmRhdGFzb3VyY2UuYzogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJkYXRhc291cmNlLmMuCisgICAgICAgICh0ZXN0X3dl
YmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X2luaXRpYWxfcmVxdWVzdCk6CisgICAgICAgIChub3Rp
ZnlfbG9hZF9zdGF0dXNfdW5yZWFjaGFibGVfY2IpOgorICAgICAgICAobm90aWZ5X2xvYWRfc3Rh
dHVzX2NiKToKKyAgICAgICAgKHdhaXRfdGltZXJfZmlyZWQpOgorICAgICAgICAodGVzdF93ZWJr
aXRfd2ViX2RhdGFfc291cmNlKToKKyAgICAgICAgKG5vdGlmeV9sb2FkX3N0YXR1c19saWZldGlt
ZV9jYik6CisgICAgICAgICh0ZXN0X3dlYmtpdF93ZWJfZGF0YV9zb3VyY2VfbGlmZXRpbWUpOgor
ICAgICAgICAodGVzdF93ZWJraXRfd2ViX2RhdGFfc291cmNlX3VucmVhY2hhYmxlX3VyaSk6Cisg
ICAgICAgIChtYWluKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90
ZXN0d2ViZnJhbWUuYzogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3
ZWJmcmFtZS5jLgorICAgICAgICAoY3JlYXRlRnJhbWVTaWduYWxUZXN0RnJhbWVDcmVhdGVkQ2Fs
bGJhY2spOgorICAgICAgICAoY3JlYXRlRnJhbWVTaWduYWxUZXN0VGltZW91dCk6CisgICAgICAg
ICh0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfY3JlYXRlZF9zaWduYWwpOgorICAgICAgICAodGVzdF93
ZWJraXRfd2ViX2ZyYW1lX2NyZWF0ZV9kZXN0cm95KToKKyAgICAgICAgKHRlc3Rfd2Via2l0X3dl
Yl9mcmFtZV9saWZldGltZSk6CisgICAgICAgIChwcmludF9yZXF1ZXN0ZWRfY2IpOgorICAgICAg
ICAocHJpbnRfdGltZW91dCk6CisgICAgICAgICh0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfcHJpbnRp
bmcpOgorICAgICAgICAodGVzdF93ZWJraXRfd2ViX2ZyYW1lX3Jlc3BvbnNlKToKKyAgICAgICAg
KG1haW4pOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJo
aXN0b3J5aXRlbS5jOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdl
Ymhpc3RvcnlpdGVtLmMuCisgICAgICAgICh3ZWJfaGlzdG9yeV9pdGVtX2ZpeHR1cmVfc2V0dXAp
OgorICAgICAgICAod2ViX2hpc3RvcnlfaXRlbV9maXh0dXJlX3RlYXJkb3duKToKKyAgICAgICAg
KHRlc3Rfd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X2RhdGEpOgorICAgICAgICAodGVzdF93
ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9hbHRlcm5hdGVfdGl0bGUpOgorICAgICAgICAobWFpbik6
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYmluc3BlY3Rv
ci5jOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYmluc3BlY3Rv
ci5jLgorICAgICAgICAocXVpdExvb3ApOgorICAgICAgICAoY29uc29sZU1lc3NhZ2VDYWxsYmFj
ayk6CisgICAgICAgIChpbnNwZWN0RWxlbWVudENhbGxiYWNrKToKKyAgICAgICAgKGNsb3NlSW5z
cGVjdG9yKToKKyAgICAgICAgKHNob3dJbnNwZWN0b3IpOgorICAgICAgICAobG9hZEZpbmlzaGVk
KToKKyAgICAgICAgKHRlc3Rfd2Via2l0X3dlYl9pbnNwZWN0b3JfY2xvc2VfYW5kX2luc3BlY3Qp
OgorICAgICAgICAodGVzdF93ZWJraXRfd2ViX2luc3BlY3Rvcl9kZXN0cm95X2luc3BlY3RlZF93
ZWJfdmlldyk6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdEd0ay90ZXN0d2VicGx1Z2luZGF0YWJhc2UuYzogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJwbHVnaW5kYXRhYmFzZS5jLgorICAgICAgICAodGVzdF93
ZWJraXRfd2ViX3BsdWdpbl9kYXRhYmFzZV9nZXRfcGx1Z2lucyk6CisgICAgICAgIChtYWluKToK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2VicmVzb3VyY2Uu
YzogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJyZXNvdXJjZS5j
LgorICAgICAgICAoc2VydmVyX2NhbGxiYWNrKToKKyAgICAgICAgKHdlYl9yZXNvdXJjZV9maXh0
dXJlX3NldHVwKToKKyAgICAgICAgKHdlYl9yZXNvdXJjZV9maXh0dXJlX3RlYXJkb3duKToKKyAg
ICAgICAgKHRlc3Rfd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJsKToKKyAgICAgICAgKHRlc3Rf
d2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZGF0YSk6CisgICAgICAgICh0ZXN0X3dlYmtpdF93ZWJf
cmVzb3VyY2VfZ2V0X21pbWVfdHlwZSk6CisgICAgICAgICh0ZXN0X3dlYmtpdF93ZWJfcmVzb3Vy
Y2VfZ2V0X2VuY29kaW5nKToKKyAgICAgICAgKHRlc3Rfd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRf
ZnJhbWVfbmFtZSk6CisgICAgICAgIChyZXNvdXJjZV9yZXF1ZXN0X3N0YXJ0aW5nX2NiKToKKyAg
ICAgICAgKG5vdGlmeV9sb2FkX3N0YXR1c19jYik6CisgICAgICAgICh0ZXN0X3dlYl9yZXNvdXJj
ZV9sb2FkaW5nKToKKyAgICAgICAgKHJlc291cmNlX3JlcXVlc3Rfc3RhcnRpbmdfc3ViX2NiKToK
KyAgICAgICAgKG5vdGlmeV9sb2FkX3N0YXR1c19zdWJfY2IpOgorICAgICAgICAoaWRsZV9xdWl0
X2xvb3BfY2IpOgorICAgICAgICAodGVzdF93ZWJfcmVzb3VyY2Vfc3ViX3Jlc291cmNlX2xvYWRp
bmcpOgorICAgICAgICAobWFpbik6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRHdGsvdGVzdHdlYnNldHRpbmdzLmM6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2d0ay90
ZXN0cy90ZXN0d2Vic2V0dGluZ3MuYy4KKyAgICAgICAgKHRlc3Rfd2Via2l0X3dlYl9zZXR0aW5n
c19jb3B5KToKKyAgICAgICAgKHRlc3Rfbm9uX3F1aXJreV91c2VyX2FnZW50cyk6CisgICAgICAg
ICh0ZXN0X3dlYmtpdF93ZWJfc2V0dGluZ3NfdXNlcl9hZ2VudCk6CisgICAgICAgIChtYWluKToK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2Vidmlldy5jOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYnZpZXcuYy4KKyAgICAg
ICAgKHNlcnZlcl9jYWxsYmFjayk6CisgICAgICAgIChpZGxlX3F1aXRfbG9vcF9jYik6CisgICAg
ICAgICh0aW1lb3V0X2NiKToKKyAgICAgICAgKGljb25fdXJpX2NoYW5nZWRfY2IpOgorICAgICAg
ICAoaWNvbl9sb2FkZWRfY2IpOgorICAgICAgICAodGVzdF93ZWJraXRfd2ViX3ZpZXdfaWNvbl91
cmkpOgorICAgICAgICAobWFwX2V2ZW50X2NiKToKKyAgICAgICAgKHF1aXRfYWZ0ZXJfc2hvcnRf
ZGVsYXlfY2IpOgorICAgICAgICAodGVzdF93ZWJraXRfd2ViX3ZpZXdfZ3JhYl9mb2N1cyk6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdpbmRvdy5jOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdpbmRvdy5jLgorICAgICAgICAo
bm90aWZ5X2xvYWRfc3RhdHVzX2NiKToKKyAgICAgICAgKHRlc3Rfd2Via2l0X3dpbmRvd19zY3Jv
bGxiYXJfcG9saWN5KToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
Z3RrL1dlYktpdDJHdGsvTG9hZFRyYWNraW5nVGVzdC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9Mb2FkVHJhY2tpbmdUZXN0LmNwcC4KKyAg
ICAgICAgKGxvYWRDaGFuZ2VkQ2FsbGJhY2spOgorICAgICAgICAobG9hZEZhaWxlZENhbGxiYWNr
KToKKyAgICAgICAgKGVzdGltYXRlZFByb2dyZXNzQ2hhbmdlZENhbGxiYWNrKToKKyAgICAgICAg
KExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRUcmFja2luZ1Rlc3QpOgorICAgICAgICAoTG9hZFRyYWNr
aW5nVGVzdDo6fkxvYWRUcmFja2luZ1Rlc3QpOgorICAgICAgICAoTG9hZFRyYWNraW5nVGVzdDo6
d2FpdFVudGlsTG9hZEZpbmlzaGVkKToKKyAgICAgICAgKExvYWRUcmFja2luZ1Rlc3Q6OnByb3Zp
c2lvbmFsTG9hZFN0YXJ0ZWQpOgorICAgICAgICAoTG9hZFRyYWNraW5nVGVzdDo6cHJvdmlzaW9u
YWxMb2FkUmVjZWl2ZWRTZXJ2ZXJSZWRpcmVjdCk6CisgICAgICAgIChMb2FkVHJhY2tpbmdUZXN0
Ojpwcm92aXNpb25hbExvYWRGYWlsZWQpOgorICAgICAgICAoTG9hZFRyYWNraW5nVGVzdDo6bG9h
ZENvbW1pdHRlZCk6CisgICAgICAgIChMb2FkVHJhY2tpbmdUZXN0Ojpsb2FkRmluaXNoZWQpOgor
ICAgICAgICAoTG9hZFRyYWNraW5nVGVzdDo6bG9hZEZhaWxlZCk6CisgICAgICAgIChMb2FkVHJh
Y2tpbmdUZXN0Ojplc3RpbWF0ZWRQcm9ncmVzc0NoYW5nZWQpOgorICAgICAgICAoTG9hZFRyYWNr
aW5nVGVzdDo6bG9hZFVSSSk6CisgICAgICAgIChMb2FkVHJhY2tpbmdUZXN0Ojpsb2FkSHRtbCk6
CisgICAgICAgIChMb2FkVHJhY2tpbmdUZXN0Ojpsb2FkUGxhaW5UZXh0KToKKyAgICAgICAgKExv
YWRUcmFja2luZ1Rlc3Q6OmxvYWRSZXF1ZXN0KToKKyAgICAgICAgKExvYWRUcmFja2luZ1Rlc3Q6
OnJlbG9hZCk6CisgICAgICAgIChMb2FkVHJhY2tpbmdUZXN0Ojpnb0JhY2spOgorICAgICAgICAo
TG9hZFRyYWNraW5nVGVzdDo6Z29Gb3J3YXJkKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2d0
ay9XZWJLaXQyR3RrL0xvYWRUcmFja2luZ1Rlc3QuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0xvYWRUcmFja2luZ1Rlc3QuaC4KKyAgICAgICAg
KExvYWRUcmFja2luZ1Rlc3Q6OnNldFJlZGlyZWN0VVJJKToKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL2d0ay9XZWJLaXQyR3RrL1Rlc3RNYWluLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RNYWluLmNwcC4KKyAgICAgICAgKHJlZ2lz
dGVyR1Jlc291cmNlKToKKyAgICAgICAgKHJlbW92ZU5vbkVtcHR5RGlyZWN0b3J5KToKKyAgICAg
ICAgKG1haW4pOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvVGVzdE1h
aW4uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L1Rlc3RNYWluLmguCisgICAgICAgIChUZXN0Ojp+VGVzdCk6CisgICAgICAgIChUZXN0OjpvYmpl
Y3RGaW5hbGl6ZWQpOgorICAgICAgICAoVGVzdDo6YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRl
c3RGaW5pc2hlcyk6CisgICAgICAgIChUZXN0OjpnZXRXZWJLaXQxVGVzdFJlc291Y2VzRGlyKToK
KyAgICAgICAgKFRlc3Q6OmdldFJlc291cmNlc0Rpcik6CisgICAgICAgIChUZXN0OjphZGRMb2dG
YXRhbEZsYWcpOgorICAgICAgICAoVGVzdDo6cmVtb3ZlTG9nRmF0YWxGbGFnKToKKyAgICAgICAg
KFRlc3Q6OmNhaXJvU3VyZmFjZXNFcXVhbCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9ndGsv
V2ViS2l0Mkd0ay9XZWJLaXRUZXN0QnVzLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYktpdFRlc3RCdXMuY3BwLgorICAgICAgICAoV2Vi
S2l0VGVzdEJ1czo6V2ViS2l0VGVzdEJ1cyk6CisgICAgICAgIChXZWJLaXRUZXN0QnVzOjpydW4p
OgorICAgICAgICAoV2ViS2l0VGVzdEJ1czo6fldlYktpdFRlc3RCdXMpOgorICAgICAgICAoV2Vi
S2l0VGVzdEJ1czo6Z2V0T3JDcmVhdGVDb25uZWN0aW9uKToKKyAgICAgICAgKG9uTmFtZUFwcGVh
cmVkKToKKyAgICAgICAgKFdlYktpdFRlc3RCdXM6OmNyZWF0ZVByb3h5KToKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYktpdFRlc3RCdXMuaDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYktpdFRlc3RCdXMuaC4K
KyAgICAgICAgKFdlYktpdFRlc3RCdXM6OmNvbm5lY3Rpb24pOgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViS2l0VGVzdFNlcnZlci5jcHA6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJLaXRUZXN0U2VydmVyLmNw
cC4KKyAgICAgICAgKFdlYktpdFRlc3RTZXJ2ZXI6OldlYktpdFRlc3RTZXJ2ZXIpOgorICAgICAg
ICAoV2ViS2l0VGVzdFNlcnZlcjo6fldlYktpdFRlc3RTZXJ2ZXIpOgorICAgICAgICAoV2ViS2l0
VGVzdFNlcnZlcjo6cnVuKToKKyAgICAgICAgKFdlYktpdFRlc3RTZXJ2ZXI6OmdldFVSSUZvclBh
dGgpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViS2l0VGVzdFNl
cnZlci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvV2ViS2l0VGVzdFNlcnZlci5oLgorICAgICAgICAoV2ViS2l0VGVzdFNlcnZlcjo6YmFzZVVS
SSk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9XZWJQcm9jZXNzVGVz
dFJ1bm5lci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9XZWJQcm9jZXNzVGVzdFJ1bm5lci5jcHAuCisgICAgICAgIChXZWJQcm9jZXNzVGVz
dFJ1bm5lcjo6V2ViUHJvY2Vzc1Rlc3RSdW5uZXIpOgorICAgICAgICAoV2ViUHJvY2Vzc1Rlc3RS
dW5uZXI6On5XZWJQcm9jZXNzVGVzdFJ1bm5lcik6CisgICAgICAgIChXZWJQcm9jZXNzVGVzdFJ1
bm5lcjo6cHJveHlDcmVhdGVkQ2FsbGJhY2spOgorICAgICAgICAoV2ViUHJvY2Vzc1Rlc3RSdW5u
ZXI6OnByb3h5KToKKyAgICAgICAgKFdlYlByb2Nlc3NUZXN0UnVubmVyOjpvbk5hbWVBcHBlYXJl
ZCk6CisgICAgICAgIChXZWJQcm9jZXNzVGVzdFJ1bm5lcjo6b25OYW1lVmFuaXNoZWQpOgorICAg
ICAgICAoV2ViUHJvY2Vzc1Rlc3RSdW5uZXI6OnRlc3RGaW5pc2hlZENhbGxiYWNrKToKKyAgICAg
ICAgKFdlYlByb2Nlc3NUZXN0UnVubmVyOjpydW5UZXN0KToKKyAgICAgICAgKFdlYlByb2Nlc3NU
ZXN0UnVubmVyOjpmaW5pc2hUZXN0KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2d0ay9XZWJL
aXQyR3RrL1dlYlByb2Nlc3NUZXN0UnVubmVyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJQcm9jZXNzVGVzdFJ1bm5lci5oLgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViVmlld1Rlc3QuY3BwOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3Qu
Y3BwLgorICAgICAgICAoV2ViVmlld1Rlc3Q6OldlYlZpZXdUZXN0KToKKyAgICAgICAgKFdlYlZp
ZXdUZXN0Ojp+V2ViVmlld1Rlc3QpOgorICAgICAgICAoV2ViVmlld1Rlc3Q6OmxvYWRVUkkpOgor
ICAgICAgICAoV2ViVmlld1Rlc3Q6OmxvYWRIdG1sKToKKyAgICAgICAgKFdlYlZpZXdUZXN0Ojps
b2FkUGxhaW5UZXh0KToKKyAgICAgICAgKFdlYlZpZXdUZXN0Ojpsb2FkUmVxdWVzdCk6CisgICAg
ICAgIChXZWJWaWV3VGVzdDo6bG9hZEFsdGVybmF0ZUhUTUwpOgorICAgICAgICAoV2ViVmlld1Rl
c3Q6OmdvQmFjayk6CisgICAgICAgIChXZWJWaWV3VGVzdDo6Z29Gb3J3YXJkKToKKyAgICAgICAg
KFdlYlZpZXdUZXN0Ojpnb1RvQmFja0ZvcndhcmRMaXN0SXRlbSk6CisgICAgICAgIChXZWJWaWV3
VGVzdDo6cXVpdE1haW5Mb29wKToKKyAgICAgICAgKFdlYlZpZXdUZXN0OjpxdWl0TWFpbkxvb3BB
ZnRlclByb2Nlc3NpbmdQZW5kaW5nRXZlbnRzKToKKyAgICAgICAgKHF1aXRNYWluTG9vcElkbGVD
YWxsYmFjayk6CisgICAgICAgIChXZWJWaWV3VGVzdDo6d2FpdCk6CisgICAgICAgIChsb2FkQ2hh
bmdlZCk6CisgICAgICAgIChXZWJWaWV3VGVzdDo6d2FpdFVudGlsTG9hZEZpbmlzaGVkKToKKyAg
ICAgICAgKHRpdGxlQ2hhbmdlZCk6CisgICAgICAgIChXZWJWaWV3VGVzdDo6d2FpdFVudGlsVGl0
bGVDaGFuZ2VkVG8pOgorICAgICAgICAoV2ViVmlld1Rlc3Q6OndhaXRVbnRpbFRpdGxlQ2hhbmdl
ZCk6CisgICAgICAgIChwYXJlbnRXaW5kb3dNYXBwZWQpOgorICAgICAgICAoV2ViVmlld1Rlc3Q6
OnNob3dJbldpbmRvdyk6CisgICAgICAgIChXZWJWaWV3VGVzdDo6c2hvd0luV2luZG93QW5kV2Fp
dFVudGlsTWFwcGVkKToKKyAgICAgICAgKFdlYlZpZXdUZXN0OjpyZXNpemVWaWV3KToKKyAgICAg
ICAgKFdlYlZpZXdUZXN0OjpzZWxlY3RBbGwpOgorICAgICAgICAocmVzb3VyY2VHZXREYXRhQ2Fs
bGJhY2spOgorICAgICAgICAoV2ViVmlld1Rlc3Q6Om1haW5SZXNvdXJjZURhdGEpOgorICAgICAg
ICAoV2ViVmlld1Rlc3Q6Om1vdXNlTW92ZVRvKToKKyAgICAgICAgKFdlYlZpZXdUZXN0OjpjbGlj
a01vdXNlQnV0dG9uKToKKyAgICAgICAgKFdlYlZpZXdUZXN0OjprZXlTdHJva2UpOgorICAgICAg
ICAoV2ViVmlld1Rlc3Q6OmRvTW91c2VCdXR0b25FdmVudCk6CisgICAgICAgIChydW5KYXZhU2Ny
aXB0UmVhZHlDYWxsYmFjayk6CisgICAgICAgIChydW5KYXZhU2NyaXB0RnJvbUdSZXNvdXJjZVJl
YWR5Q2FsbGJhY2spOgorICAgICAgICAoV2ViVmlld1Rlc3Q6OnJ1bkphdmFTY3JpcHRBbmRXYWl0
VW50aWxGaW5pc2hlZCk6CisgICAgICAgIChXZWJWaWV3VGVzdDo6cnVuSmF2YVNjcmlwdEZyb21H
UmVzb3VyY2VBbmRXYWl0VW50aWxGaW5pc2hlZCk6CisgICAgICAgIChqc1ZhbHVlVG9DU3RyaW5n
KToKKyAgICAgICAgKFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKToKKyAg
ICAgICAgKFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9OdW1iZXIpOgorICAgICAgICAo
V2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0Jvb2xlYW4pOgorICAgICAgICAoV2ViVmll
d1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRJc051bGwpOgorICAgICAgICAoV2ViVmlld1Rlc3Q6Omph
dmFzY3JpcHRSZXN1bHRJc1VuZGVmaW5lZCk6CisgICAgICAgIChvblNuYXBzaG90UmVhZHkpOgor
ICAgICAgICAoV2ViVmlld1Rlc3Q6OmdldFNuYXBzaG90QW5kV2FpdFVudGlsUmVhZHkpOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViVmlld1Rlc3QuaDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0
LmguCisKKzIwMTQtMDEtMDMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEu
Y29tPgorCiAgICAgICAgIFJFR1JFU1NJT04ocjE2MTIxNCk6IFtHVEtdIFdlYktpdDIgQyBBUEkg
dGVzdHMgZmFpbCB0byBydW4gYWZ0ZXIgcjE2MTIxNAogICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI2NDMwCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvcnVuLWd0ay10ZXN0cyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWd0ay10ZXN0cwppbmRleCA1MjRl
N2UzLi44MmZhMzZjIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3J1bi1ndGstdGVzdHMKKysr
IGIvVG9vbHMvU2NyaXB0cy9ydW4tZ3RrLXRlc3RzCkBAIC01OCwzNSArNTgsMzUgQEAgY2xhc3Mg
VGVzdFRpbWVvdXQoRXhjZXB0aW9uKToKICAgICBwYXNzCiAKIGNsYXNzIFRlc3RSdW5uZXI6Ci0g
ICAgVEVTVF9ESVJTID0gWyAiV2ViS2l0MUdPYmplY3RBUElUZXN0cyIsICJXZWJLaXQyR09iamVj
dEFQSVRlc3RzIiwgIlRlc3RXZWJLaXRBUEkiIF0KKyAgICBURVNUX0RJUlMgPSBbICJXZWJLaXQy
R3RrIiwgIldlYktpdEd0ayIsICJXZWJLaXQyIiwgIkphdmFTY3JpcHRDb3JlIiwgIldURiIsICJX
ZWJDb3JlIiwgICJXZWJDb3JlR3RrIiBdCiAKICAgICBTS0lQUEVEID0gWwotICAgICAgICBTa2lw
cGVkVGVzdCgiV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0ZG93bmxvYWQiLCAiL3dlYmtpdC9k
b3dubG9hZC9ub3QtZm91bmQiLCAiVGVzdCBmYWlscyBpbiBHVEsgTGludXggNjQtYml0IFJlbGVh
c2UgYm90IiwgODIzMjkpLAotICAgICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0MUdPYmplY3RBUElU
ZXN0cy90ZXN0d2ViaW5zcGVjdG9yIiwgIi93ZWJraXQvd2ViaW5zcGVjdG9yL2Nsb3NlLWFuZC1p
bnNwZWN0IiwgIlRlc3QgaXMgZmxha3kgaW4gR1RLIExpbnV4IDMyLWJpdCBSZWxlYXNlIGJvdCIs
IDgyODY5KSwKLSAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdDFHT2JqZWN0QVBJVGVzdHMvdGVz
dHdlYnJlc291cmNlIiwgIi93ZWJraXQvd2VicmVzb3VyY2UvbG9hZGluZyIsICJUZXN0IGZhaWxz
IiwgMTA0Njg5KSwKLSAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdDFHT2JqZWN0QVBJVGVzdHMv
dGVzdHdlYnJlc291cmNlIiwgIi93ZWJraXQvd2VicmVzb3VyY2Uvc3ViX3Jlc291cmNlX2xvYWRp
bmciLCAiVGVzdCBmYWlscyBpbiBHVEsgTGludXggNjQtYml0IFJlbGVhc2UgYm90IiwgODIzMzAp
LAotICAgICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0d2Vidmll
dyIsICIvd2Via2l0L3dlYnZpZXcvaWNvbi11cmkiLCAiVGVzdCB0aW1lcyBvdXQgaW4gR1RLIExp
bnV4IDY0LWJpdCBSZWxlYXNlIGJvdCIsIDgyMzI4KSwKLSAgICAgICAgU2tpcHBlZFRlc3QoIldl
YktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdFJlc291cmNlcyIsICIvd2Via2l0Mi9XZWJLaXRXZWJW
aWV3L3Jlc291cmNlcyIsICJUZXN0IGlzIGZsYWt5IGluIEdUSyBMaW51eCAzMi1iaXQgUmVsZWFz
ZSBib3QiLCA4Mjg2OCksCi0gICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXQyR09iamVjdEFQSVRl
c3RzL1Rlc3RVSUNsaWVudCIsICIvd2Via2l0Mi9XZWJLaXRXZWJWaWV3L21vdXNlLXRhcmdldCIs
ICJUZXN0IHRpbWVzIG91dCBhZnRlciByMTUwODkwIiwgMTE3Njg5KSwKLSAgICAgICAgU2tpcHBl
ZFRlc3QoIldlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdEF1dGhlbnRpY2F0aW9uIiwgU2tpcHBl
ZFRlc3QuRU5USVJFX1NVSVRFLCAiVGVzdCB0aW1lcyBvdXQgYWZ0ZXIgcjE1MDg5MCIsIDExNzY4
OSksCi0gICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXQyR09iamVjdEFQSVRlc3RzL1Rlc3RDb250
ZXh0TWVudSIsIFNraXBwZWRUZXN0LkVOVElSRV9TVUlURSwgIlRlc3QgdGltZXMgb3V0IGFmdGVy
IHIxNTA4OTAiLCAxMTc2ODkpLAotICAgICAgICBTa2lwcGVkVGVzdCgiVGVzdFdlYktpdEFQSS9U
ZXN0V2ViS2l0MiIsICJXZWJLaXQyLk1vdXNlTW92ZUFmdGVyQ3Jhc2giLCAiVGVzdCBpcyBmbGFr
eSIsIDg1MDY2KSwKLSAgICAgICAgU2tpcHBlZFRlc3QoIlRlc3RXZWJLaXRBUEkvVGVzdFdlYktp
dDIiLCAiV2ViS2l0Mi5OZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXMiLCAi
VGVzdCBpcyBmbGFreSIsIDg1MDY2KSwKLSAgICAgICAgU2tpcHBlZFRlc3QoIlRlc3RXZWJLaXRB
UEkvVGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5OZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRG
cmFtZXMiLCAiVGVzdCBmYWlscyIsIDg1MDM3KSwKLSAgICAgICAgU2tpcHBlZFRlc3QoIlRlc3RX
ZWJLaXRBUEkvVGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5SZXN0b3JlU2Vzc2lvblN0YXRlQ29udGFp
bmluZ0Zvcm1EYXRhIiwgIlNlc3Npb24gU3RhdGUgaXMgbm90IGltcGxlbWVudGVkIGluIEdUSysg
cG9ydCIsIDg0OTYwKSwKLSAgICAgICAgU2tpcHBlZFRlc3QoIlRlc3RXZWJLaXRBUEkvVGVzdFdl
YktpdDIiLCAiV2ViS2l0Mi5TcGFjZWJhclNjcm9sbGluZyIsICJUZXN0IGZhaWxzIiwgODQ5NjEp
LAotICAgICAgICBTa2lwcGVkVGVzdCgiVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0MiIsICJXZWJL
aXQyLldLQ29ubmVjdGlvbiIsICJUZXN0cyBmYWlsIGFuZCB0aW1lIG91dCBvdXQiLCA4NDk1OSks
Ci0gICAgICAgIFNraXBwZWRUZXN0KCJUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXQyIiwgIldlYktp
dDIuV0tQYWdlR2V0U2NhbGVGYWN0b3JOb3RaZXJvIiwgIlRlc3QgZmFpbHMgYW5kIHRpbWVzIG91
dCIsIDg4NDU1KSwKLSAgICAgICAgU2tpcHBlZFRlc3QoIlRlc3RXZWJLaXRBUEkvVGVzdFdlYktp
dDIiLCAiV2ViS2l0Mi5Gb3JjZVJlcGFpbnQiLCAiVGVzdCB0aW1lcyBvdXQiLCAxMDU1MzIpLAot
ICAgICAgICBTa2lwcGVkVGVzdCgiVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0MiIsICJXZWJLaXQy
LlJlbG9hZFBhZ2VBZnRlckNyYXNoIiwgIlRlc3QgZmxha2lseSB0aW1lcyBvdXQiLCAxMTAxMjkp
LAotICAgICAgICBTa2lwcGVkVGVzdCgiVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0MiIsICJXZWJL
aXQyLkRpZEFzc29jaWF0ZUZvcm1Db250cm9scyIsICJUZXN0IHRpbWVzIG91dCIsIDEyMDMwMiks
Ci0gICAgICAgIFNraXBwZWRUZXN0KCJUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXQyIiwgIldlYktp
dDIuSW5qZWN0ZWRCdW5kbGVGcmFtZUhpdFRlc3QiLCAiVGVzdCB0aW1lcyBvdXQiLCAxMjAzMDMp
LAotICAgICAgICBTa2lwcGVkVGVzdCgiVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0MiIsICJXZWJL
aXQyLlJlc2l6ZVJldmVyc2VQYWdpbmF0ZWRXZWJWaWV3IiwgIlRlc3QgZmFpbHMiLCAxMjAzMDUp
LAotICAgICAgICBTa2lwcGVkVGVzdCgiVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0MiIsICJXZWJL
aXQyLlNjcm9sbFBpbm5pbmdCZWhhdmlvcnMiLCAiVGVzdCBmYWlscyIsIDEyMDMwNiksCi0gICAg
ICAgIFNraXBwZWRUZXN0KCJUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXQyIiwgIldlYktpdDIuVGVy
bWluYXRlVHdpY2UiLCAiVGVzdCBjYXVzZXMgY3Jhc2ggb24gdGhlIG5leHQgdGVzdCIsIDEyMTk3
MCksCi0gICAgICAgIFNraXBwZWRUZXN0KCJUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXQyIiwgIldl
YktpdDIuR2VvbG9jYXRpb25UcmFuc2l0aW9uVG9IaWdoQWNjdXJhY3kiLCAiVGVzdCBjYXVzZXMg
Y3Jhc2ggb24gdGhlIG5leHQgdGVzdCIsIDEyNTA2OCksCi0gICAgICAgIFNraXBwZWRUZXN0KCJU
ZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXQyIiwgIldlYktpdDIuR2VvbG9jYXRpb25UcmFuc2l0aW9u
VG9Mb3dBY2N1cmFjeSIsICJUZXN0IGNhdXNlcyBjcmFzaCBvbiB0aGUgbmV4dCB0ZXN0IiwgMTI1
MDY4KSwKLSAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdElu
c3BlY3RvclNlcnZlciIsIFNraXBwZWRUZXN0LkVOVElSRV9TVUlURSwgIlRpbWluZyBvdXQgb24g
dGhlIGJvdCIsIDEyMjU3MSksCisgICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXRHdGsvdGVzdGRv
d25sb2FkIiwgIi93ZWJraXQvZG93bmxvYWQvbm90LWZvdW5kIiwgIlRlc3QgZmFpbHMgaW4gR1RL
IExpbnV4IDY0LWJpdCBSZWxlYXNlIGJvdCIsIDgyMzI5KSwKKyAgICAgICAgU2tpcHBlZFRlc3Qo
IldlYktpdEd0ay90ZXN0d2ViaW5zcGVjdG9yIiwgIi93ZWJraXQvd2ViaW5zcGVjdG9yL2Nsb3Nl
LWFuZC1pbnNwZWN0IiwgIlRlc3QgaXMgZmxha3kgaW4gR1RLIExpbnV4IDMyLWJpdCBSZWxlYXNl
IGJvdCIsIDgyODY5KSwKKyAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdEd0ay90ZXN0d2VicmVz
b3VyY2UiLCAiL3dlYmtpdC93ZWJyZXNvdXJjZS9sb2FkaW5nIiwgIlRlc3QgZmFpbHMiLCAxMDQ2
ODkpLAorICAgICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0R3RrL3Rlc3R3ZWJyZXNvdXJjZSIsICIv
d2Via2l0L3dlYnJlc291cmNlL3N1Yl9yZXNvdXJjZV9sb2FkaW5nIiwgIlRlc3QgZmFpbHMgaW4g
R1RLIExpbnV4IDY0LWJpdCBSZWxlYXNlIGJvdCIsIDgyMzMwKSwKKyAgICAgICAgU2tpcHBlZFRl
c3QoIldlYktpdEd0ay90ZXN0d2VidmlldyIsICIvd2Via2l0L3dlYnZpZXcvaWNvbi11cmkiLCAi
VGVzdCB0aW1lcyBvdXQgaW4gR1RLIExpbnV4IDY0LWJpdCBSZWxlYXNlIGJvdCIsIDgyMzI4KSwK
KyAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdDJHdGsvVGVzdFJlc291cmNlcyIsICIvd2Via2l0
Mi9XZWJLaXRXZWJWaWV3L3Jlc291cmNlcyIsICJUZXN0IGlzIGZsYWt5IGluIEdUSyBMaW51eCAz
Mi1iaXQgUmVsZWFzZSBib3QiLCA4Mjg2OCksCisgICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXQy
R3RrL1Rlc3RVSUNsaWVudCIsICIvd2Via2l0Mi9XZWJLaXRXZWJWaWV3L21vdXNlLXRhcmdldCIs
ICJUZXN0IHRpbWVzIG91dCBhZnRlciByMTUwODkwIiwgMTE3Njg5KSwKKyAgICAgICAgU2tpcHBl
ZFRlc3QoIldlYktpdDJHdGsvVGVzdEF1dGhlbnRpY2F0aW9uIiwgU2tpcHBlZFRlc3QuRU5USVJF
X1NVSVRFLCAiVGVzdCB0aW1lcyBvdXQgYWZ0ZXIgcjE1MDg5MCIsIDExNzY4OSksCisgICAgICAg
IFNraXBwZWRUZXN0KCJXZWJLaXQyR3RrL1Rlc3RDb250ZXh0TWVudSIsIFNraXBwZWRUZXN0LkVO
VElSRV9TVUlURSwgIlRlc3QgdGltZXMgb3V0IGFmdGVyIHIxNTA4OTAiLCAxMTc2ODkpLAorICAg
ICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0Mi9UZXN0V2ViS2l0MiIsICJXZWJLaXQyLk1vdXNlTW92
ZUFmdGVyQ3Jhc2giLCAiVGVzdCBpcyBmbGFreSIsIDg1MDY2KSwKKyAgICAgICAgU2tpcHBlZFRl
c3QoIldlYktpdDIvVGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5OZXdGaXJzdFZpc3VhbGx5Tm9uRW1w
dHlMYXlvdXRGb3JJbWFnZXMiLCAiVGVzdCBpcyBmbGFreSIsIDg1MDY2KSwKKyAgICAgICAgU2tp
cHBlZFRlc3QoIldlYktpdDIvVGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5OZXdGaXJzdFZpc3VhbGx5
Tm9uRW1wdHlMYXlvdXRGcmFtZXMiLCAiVGVzdCBmYWlscyIsIDg1MDM3KSwKKyAgICAgICAgU2tp
cHBlZFRlc3QoIldlYktpdDIvVGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5SZXN0b3JlU2Vzc2lvblN0
YXRlQ29udGFpbmluZ0Zvcm1EYXRhIiwgIlNlc3Npb24gU3RhdGUgaXMgbm90IGltcGxlbWVudGVk
IGluIEdUSysgcG9ydCIsIDg0OTYwKSwKKyAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdDIvVGVz
dFdlYktpdDIiLCAiV2ViS2l0Mi5TcGFjZWJhclNjcm9sbGluZyIsICJUZXN0IGZhaWxzIiwgODQ5
NjEpLAorICAgICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0Mi9UZXN0V2ViS2l0MiIsICJXZWJLaXQy
LldLQ29ubmVjdGlvbiIsICJUZXN0cyBmYWlsIGFuZCB0aW1lIG91dCBvdXQiLCA4NDk1OSksCisg
ICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXQyL1Rlc3RXZWJLaXQyIiwgIldlYktpdDIuV0tQYWdl
R2V0U2NhbGVGYWN0b3JOb3RaZXJvIiwgIlRlc3QgZmFpbHMgYW5kIHRpbWVzIG91dCIsIDg4NDU1
KSwKKyAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdDIvVGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5G
b3JjZVJlcGFpbnQiLCAiVGVzdCB0aW1lcyBvdXQiLCAxMDU1MzIpLAorICAgICAgICBTa2lwcGVk
VGVzdCgiV2ViS2l0Mi9UZXN0V2ViS2l0MiIsICJXZWJLaXQyLlJlbG9hZFBhZ2VBZnRlckNyYXNo
IiwgIlRlc3QgZmxha2lseSB0aW1lcyBvdXQiLCAxMTAxMjkpLAorICAgICAgICBTa2lwcGVkVGVz
dCgiV2ViS2l0Mi9UZXN0V2ViS2l0MiIsICJXZWJLaXQyLkRpZEFzc29jaWF0ZUZvcm1Db250cm9s
cyIsICJUZXN0IHRpbWVzIG91dCIsIDEyMDMwMiksCisgICAgICAgIFNraXBwZWRUZXN0KCJXZWJL
aXQyL1Rlc3RXZWJLaXQyIiwgIldlYktpdDIuSW5qZWN0ZWRCdW5kbGVGcmFtZUhpdFRlc3QiLCAi
VGVzdCB0aW1lcyBvdXQiLCAxMjAzMDMpLAorICAgICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0Mi9U
ZXN0V2ViS2l0MiIsICJXZWJLaXQyLlJlc2l6ZVJldmVyc2VQYWdpbmF0ZWRXZWJWaWV3IiwgIlRl
c3QgZmFpbHMiLCAxMjAzMDUpLAorICAgICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0Mi9UZXN0V2Vi
S2l0MiIsICJXZWJLaXQyLlNjcm9sbFBpbm5pbmdCZWhhdmlvcnMiLCAiVGVzdCBmYWlscyIsIDEy
MDMwNiksCisgICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXQyL1Rlc3RXZWJLaXQyIiwgIldlYktp
dDIuVGVybWluYXRlVHdpY2UiLCAiVGVzdCBjYXVzZXMgY3Jhc2ggb24gdGhlIG5leHQgdGVzdCIs
IDEyMTk3MCksCisgICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXQyL1Rlc3RXZWJLaXQyIiwgIldl
YktpdDIuR2VvbG9jYXRpb25UcmFuc2l0aW9uVG9IaWdoQWNjdXJhY3kiLCAiVGVzdCBjYXVzZXMg
Y3Jhc2ggb24gdGhlIG5leHQgdGVzdCIsIDEyNTA2OCksCisgICAgICAgIFNraXBwZWRUZXN0KCJX
ZWJLaXQyL1Rlc3RXZWJLaXQyIiwgIldlYktpdDIuR2VvbG9jYXRpb25UcmFuc2l0aW9uVG9Mb3dB
Y2N1cmFjeSIsICJUZXN0IGNhdXNlcyBjcmFzaCBvbiB0aGUgbmV4dCB0ZXN0IiwgMTI1MDY4KSwK
KyAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdDJHdGsvVGVzdEluc3BlY3RvclNlcnZlciIsIFNr
aXBwZWRUZXN0LkVOVElSRV9TVUlURSwgIlRpbWluZyBvdXQgb24gdGhlIGJvdCIsIDEyMjU3MSks
CiAgICAgXQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbnMsIHRlc3RzPVtdKToKQEAg
LTEwNiw2ICsxMDYsOSBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICBzZWxmLl9zcGlfcmVn
aXN0cnlkID0gTm9uZQogICAgICAgICBzZWxmLl9zcGlfYnVzX2xhdW5jaGVyID0gTm9uZQogCisg
ICAgZGVmIF90ZXN0X3Byb2dyYW1zX2Jhc2VfZGlyKHNlbGYpOgorICAgICAgICByZXR1cm4gb3Mu
cGF0aC5qb2luKHNlbGYuX3Byb2dyYW1zX3BhdGgsICJUZXN0V2ViS2l0QVBJIikKKwogICAgIGRl
ZiBfZ2V0X3Rlc3RzX2Zyb21fZGlyKHNlbGYsIHRlc3RfZGlyKToKICAgICAgICAgaWYgbm90IG9z
LnBhdGguaXNkaXIodGVzdF9kaXIpOgogICAgICAgICAgICAgcmV0dXJuIFtdCkBAIC0xMzEsNyAr
MTM0LDcgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKIAogICAgICAgICB0ZXN0cyA9IFtdCiAgICAgICAg
IGZvciB0ZXN0X2RpciBpbiBzZWxmLlRFU1RfRElSUzoKLSAgICAgICAgICAgIGFic29sdXRlX3Rl
c3RfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuX3Byb2dyYW1zX3BhdGgsIHRlc3RfZGlyKQorICAg
ICAgICAgICAgYWJzb2x1dGVfdGVzdF9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5fdGVzdF9wcm9n
cmFtc19iYXNlX2RpcigpLCB0ZXN0X2RpcikKICAgICAgICAgICAgIHRlc3RzLmV4dGVuZChzZWxm
Ll9nZXRfdGVzdHNfZnJvbV9kaXIoYWJzb2x1dGVfdGVzdF9kaXIpKQogICAgICAgICByZXR1cm4g
dGVzdHMKIApAQCAtMzYxLDE3ICszNjQsMTggQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAg
cmV0dXJuIDAKIAogICAgIGRlZiBfcnVuX3Rlc3Qoc2VsZiwgdGVzdF9wcm9ncmFtKToKLSAgICAg
ICAgaWYgIkdPYmplY3RBUElUZXN0IiBpbiB0ZXN0X3Byb2dyYW06CisgICAgICAgIGJhc2VkaXIg
PSBvcy5wYXRoLmJhc2VuYW1lKG9zLnBhdGguZGlybmFtZSh0ZXN0X3Byb2dyYW0pKQorICAgICAg
ICBpZiBiYXNlZGlyIGluIFsiV2ViS2l0Mkd0ayIsICJXZWJLaXRHdGsiXToKICAgICAgICAgICAg
IHJldHVybiBzZWxmLl9ydW5fdGVzdF9nbGliKHRlc3RfcHJvZ3JhbSkKIAotICAgICAgICBpZiAi
VGVzdFdlYktpdEFQSSIgaW4gdGVzdF9wcm9ncmFtOgorICAgICAgICBpZiBiYXNlZGlyIGluIFsi
V2ViS2l0MiIsICJKYXZhU2NyaXB0Q29yZSIsICJXVEYiLCAiV2ViQ29yZSIsICAiV2ViQ29yZUd0
ayJdOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9nb29nbGVfdGVzdF9zdWl0ZSh0ZXN0
X3Byb2dyYW0pCiAKICAgICAgICAgcmV0dXJuIDEKIAogICAgIGRlZiBydW5fdGVzdHMoc2VsZik6
CiAgICAgICAgIGlmIG5vdCBzZWxmLl90ZXN0czoKLSAgICAgICAgICAgIHN5cy5zdGRlcnIud3Jp
dGUoIkVSUk9SOiB0ZXN0cyBub3QgZm91bmQgaW4gJXMuXG4iICUgKHNlbGYuX3Byb2dyYW1zX3Bh
dGgpKQorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiRVJST1I6IHRlc3RzIG5vdCBmb3Vu
ZCBpbiAlcy5cbiIgJSAoc2VsZi5fdGVzdF9wcm9ncmFtc19iYXNlX2RpcigpKSkKICAgICAgICAg
ICAgIHN5cy5zdGRlcnIuZmx1c2goKQogICAgICAgICAgICAgcmV0dXJuIDEKIApAQCAtNDA1LDE3
ICs0MDksMTcgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgICAgIHNlbGYuX3RlYXJfZG93
bl90ZXN0aW5nX2Vudmlyb25tZW50KCkKIAogICAgICAgICBpZiBmYWlsZWRfdGVzdHM6Ci0gICAg
ICAgICAgICBuYW1lcyA9IFt0ZXN0LnJlcGxhY2Uoc2VsZi5fcHJvZ3JhbXNfcGF0aCwgJycsIDEp
IGZvciB0ZXN0IGluIGZhaWxlZF90ZXN0c10KKyAgICAgICAgICAgIG5hbWVzID0gW3Rlc3QucmVw
bGFjZShzZWxmLl90ZXN0X3Byb2dyYW1zX2Jhc2VfZGlyKCksICcnLCAxKSBmb3IgdGVzdCBpbiBm
YWlsZWRfdGVzdHNdCiAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJUZXN0cyBmYWlsZWQg
KCVkKTogJXNcbiIgJSAobGVuKG5hbWVzKSwgIiwgIi5qb2luKG5hbWVzKSkpCiAgICAgICAgICAg
ICBzeXMuc3Rkb3V0LmZsdXNoKCkKIAogICAgICAgICBpZiBjcmFzaGVkX3Rlc3RzOgotICAgICAg
ICAgICAgbmFtZXMgPSBbdGVzdC5yZXBsYWNlKHNlbGYuX3Byb2dyYW1zX3BhdGgsICcnLCAxKSBm
b3IgdGVzdCBpbiBjcmFzaGVkX3Rlc3RzXQorICAgICAgICAgICAgbmFtZXMgPSBbdGVzdC5yZXBs
YWNlKHNlbGYuX3Rlc3RfcHJvZ3JhbXNfYmFzZV9kaXIoKSwgJycsIDEpIGZvciB0ZXN0IGluIGNy
YXNoZWRfdGVzdHNdCiAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJUZXN0cyB0aGF0IGNy
YXNoZWQgKCVkKTogJXNcbiIgJSAobGVuKG5hbWVzKSwgIiwgIi5qb2luKG5hbWVzKSkpCiAgICAg
ICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKIAogICAgICAgICBpZiB0aW1lZF9vdXRfdGVzdHM6
Ci0gICAgICAgICAgICBuYW1lcyA9IFt0ZXN0LnJlcGxhY2Uoc2VsZi5fcHJvZ3JhbXNfcGF0aCwg
JycsIDEpIGZvciB0ZXN0IGluIHRpbWVkX291dF90ZXN0c10KKyAgICAgICAgICAgIG5hbWVzID0g
W3Rlc3QucmVwbGFjZShzZWxmLl90ZXN0X3Byb2dyYW1zX2Jhc2VfZGlyKCksICcnLCAxKSBmb3Ig
dGVzdCBpbiB0aW1lZF9vdXRfdGVzdHNdCiAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJU
ZXN0cyB0aGF0IHRpbWVkIG91dCAoJWQpOiAlc1xuIiAlIChsZW4obmFtZXMpLCAiLCAiLmpvaW4o
bmFtZXMpKSkKICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQogCmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKaW5kZXggNDIxZWYyNy4uY2MzZGEyNSAxMDA2NDQKLS0t
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CisrKyBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQpAQCAtMzE3LDcgKzMxNyw3IEBAIF9DTUFL
RV9GSUxFX0VYVEVOU0lPTiA9ICdjbWFrZScKICMgV2ViS2l0IG1haW50YWlucyBzb21lIGZpbGVz
IGluIE1vemlsbGEgc3R5bGUgb24gcHVycG9zZSB0byBlYXNlCiAjIGZ1dHVyZSBtZXJnZXMuCiBf
U0tJUFBFRF9GSUxFU19XSVRIX1dBUk5JTkcgPSBbCi0gICAgIlNvdXJjZS9XZWJLaXQvZ3RrL3Rl
c3RzLyIsCisgICAgIlRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrLyIsCiAgICAg
IyBBbGwgV2ViS2l0Ki5oIGZpbGVzIGluIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
LAogICAgICMgZXhjZXB0IHRob3NlIGVuZGluZyBpbiAuLi5Qcml2YXRlLmggYXJlIEdUSysgQVBJ
IGhlYWRlcnMsCiAgICAgIyB3aGljaCBkaWZmZXIgZ3JlYXRseSBmcm9tIFdlYktpdCBjb2Rpbmcg
c3R5bGUuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJf
dW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJfdW5pdHRl
c3QucHkKaW5kZXggOTQ1YWZmOS4uYjk1NGU2YiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9zdHlsZS9jaGVja2VyX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvc3R5bGUvY2hlY2tlcl91bml0dGVzdC5weQpAQCAtMjgwLDcgKzI4MCw3IEBAIGNsYXNz
IENoZWNrZXJEaXNwYXRjaGVyU2tpcFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAi
IiJUZXN0IHNob3VsZF9za2lwX3dpdGhfd2FybmluZygpLiIiIgogICAgICAgICAjIENoZWNrIHNr
aXBwZWQgZmlsZXMuCiAgICAgICAgIHBhdGhzX3RvX3NraXAgPSBbCi0gICAgICAgICAgICJTb3Vy
Y2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXRrLmMiLAorICAgICAgICAgICAiVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGF0ay5jIiwKICAgICAgICAgICAgIlNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaCIsCiAgICAgICAgICAgICJTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgiLAogICAgICAgICAgICAi
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TG9hZGVyLmgiLApAQCAtMjk3
LDggKzI5Nyw4IEBAIGNsYXNzIENoZWNrZXJEaXNwYXRjaGVyU2tpcFRlc3QodW5pdHRlc3QuVGVz
dENhc2UpOgogICAgICAgICAgICAiU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvSGVs
cGVyQ2xhc3MuaCIsCiAgICAgICAgICAgICJTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3LmNwcCIsCiAgICAgICAgICAgICJTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oIiwKLSAgICAgICAgICAgIlNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcCIsCi0gICAgICAg
ICAgICJTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5o
IiwKKyAgICAgICAgICAgIlRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9XZWJW
aWV3VGVzdC5jcHAiLAorICAgICAgICAgICAiVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXQyR3RrL1dlYlZpZXdUZXN0LmgiLAogICAgICAgICAgICAgXQogCiAgICAgICAgIGZvciBwYXRo
IGluIHBhdGhzX25vdF90b19za2lwOgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9H
TlVtYWtlZmlsZS5hbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvR05VbWFrZWZpbGUuYW0KaW5kZXgg
MmVhMTA0MC4uMDQ5YWMzZSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9HTlVtYWtl
ZmlsZS5hbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0dOVW1ha2VmaWxlLmFtCkBAIC0xLDYg
KzEsMTEgQEAKIG5vaW5zdF9MVExJQlJBUklFUyArPSBcCiAJTGlicmFyaWVzL2xpYlRlc3RXZWJL
aXRBUElNYWluLmxhCiAKK2lmIEVOQUJMRV9XRUJLSVQyCitub2luc3RfTFRMSUJSQVJJRVMgKz0g
XAorCUxpYnJhcmllcy9saWJUZXN0V2ViS2l0Mkd0a0FQSS5sYQorZW5kaWYKKwogTGlicmFyaWVz
X2xpYlRlc3RXZWJLaXRBUElNYWluX2xhX1NPVVJDRVMgPSBcCiAJVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0LmggXAogCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHNDb250cm9sbGVyLmNwcCBcCkBA
IC0yMCwzNyArMjUsMTg0IEBAIExpYnJhcmllc19saWJUZXN0V2ViS2l0QVBJTWFpbl9sYV9DUFBG
TEFHUyA9IFwKIAkkKGphdmFzY3JpcHRjb3JlX2NwcGZsYWdzKSBcCiAJJChHVEtfQ0ZMQUdTKQog
Cit3ZWJraXRndGtfdGVzdHNfY2ZsYWdzID0gXAorCS1mbm8tc3RyaWN0LWFsaWFzaW5nIFwKKwkt
RFRFU1RfUExVR0lOX0RJUj1cIiR7c2hlbGwgcHdkfS8ke3RvcF9idWlsZGRpcn0vVGVzdE5ldHNj
YXBlUGx1Z2luLy5saWJzXCIgXAorCS1JJChzcmNkaXIpL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9G
b3J3YXJkaW5nSGVhZGVycyBcCisJLUkkKFdlYktpdCkgXAorCS1JJChHRU5TT1VSQ0VTKSBcCisJ
LUkkKHRvcF9idWlsZGRpcikvU291cmNlL1dlYktpdC9ndGsgXAorCS1JJCh0b3Bfc3JjZGlyKS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncyBcCisJLUkkKHRvcF9zcmNkaXIpL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2dvYmplY3QgXAorCSQoZ2xvYmFsX2NwcGZsYWdzKSBcCisJJChnbG9iYWxfY2Zs
YWdzKSBcCisJJChqYXZhc2NyaXB0Y29yZV9jcHBmbGFncykgXAorCSQoRlJFRVRZUEVfQ0ZMQUdT
KSBcCisJJChHTElCX0NGTEFHUykgXAorCSQoR1RLX0NGTEFHUykgXAorCSQoTElCU09VUF9DRkxB
R1MpIFwKKwkkKFhSRU5ERVJfQ0ZMQUdTKSBcCisJJChYVF9DRkxBR1MpCisKK3dlYmtpdGd0a190
ZXN0c19sZGFkZCA9IFwKKwlsaWJqYXZhc2NyaXB0Y29yZWd0ay1AV0VCS0lUR1RLX0FQSV9NQUpP
Ul9WRVJTSU9OQC5AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQC5sYSBcCisJbGlid2Via2l0
Z3RrLUBXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05ALkBXRUJLSVRHVEtfQVBJX01JTk9SX1ZF
UlNJT05ALmxhIFwKKwkkKEZSRUVUWVBFX0xJQlMpIFwKKwkkKEdUS19MSUJTKSBcCisJJChHTElC
X0xJQlMpIFwKKwkkKExJQlNPVVBfTElCUykgXAorCSQoWFJFTkRFUl9MSUJTKQorCit3ZWJraXRn
dGtfdGVzdHNfbGRmbGFncyA9IFwKKwktbm8taW5zdGFsbAorCisKK3dlYmtpdDJndGtfdGVzdHNf
Y3BwZmxhZ3MgPSBcCisJLURXRUJLSVRfRVhFQ19QQVRIPVwiJHtzaGVsbCBwd2R9LyQodG9wX2J1
aWxkZGlyKS9Qcm9ncmFtc1wiIFwKKwktRFdFQktJVF9TUkNfRElSPVwiJHtzaGVsbCBwd2R9LyR7
c3JjZGlyfVwiIFwKKwktRFdFQktJVF9ERVJJVkVEX1NSQ19ESVI9XCIke3NoZWxsIHB3ZH0vJHt0
b3BfYnVpbGRkaXJ9L0Rlcml2ZWRTb3VyY2VzXCIgXAorCS1EV0VCS0lUX1RFU1RfUExVR0lOX0RJ
Uj1cIiR7c2hlbGwgcHdkfS8ke3RvcF9idWlsZGRpcn0vVGVzdE5ldHNjYXBlUGx1Z2luLy5saWJz
XCIgXAorCS1EV0VCS0lUX1RFU1RfV0VCX0VYVEVOU0lPTlNfRElSPVwiJHtzaGVsbCBwd2R9LyR7
dG9wX2J1aWxkZGlyfS9MaWJyYXJpZXMvV2ViRXh0ZW5zaW9ucy8ubGlic1wiIFwKKwktRFdFQktJ
VF9JTkpFQ1RFRF9CVU5ETEVfUEFUSD1cIiR7c2hlbGwgcHdkfS8kKHRvcF9idWlsZGRpcikvLmxp
YnNcIiBcCisJJChqYXZhc2NyaXB0Y29yZV9jcHBmbGFncykgXAorCS1JJChzcmNkaXIpL1NvdXJj
ZSBcCisJLUkkKHNyY2RpcikvU291cmNlL1dlYktpdDIgXAorCS1JJChzcmNkaXIpL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZSBcCisJLUkkKHNyY2RpcikvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2Vi
S2l0Mkd0ayBcCisJLUkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9pbmNs
dWRlIFwKKwktSSQodG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL3dlYmtpdDJn
dGsgXAorCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvd2Via2l0Mmd0
ay9pbmNsdWRlIFwKKwktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ayBcCisJJChnbG9iYWxfY3BwZmxhZ3MpIFwKKwkkKEZSRUVUWVBFX0NGTEFHUykgXAorCSQoR0xJ
Ql9DRkxBR1MpIFwKKwkkKEdUS19DRkxBR1MpIFwKKwkkKExJQlNPVVBfQ0ZMQUdTKQorCit3ZWJr
aXQyZ3RrX3Rlc3RzX2xkYWRkID0gXAorCUxpYnJhcmllcy9saWJUZXN0V2ViS2l0Mkd0a0FQSS5s
YSBcCisJbGliamF2YXNjcmlwdGNvcmVndGstQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkAu
QFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkAubGEgXAorCWxpYndlYmtpdDJndGstQFdFQktJ
VEdUS19BUElfTUFKT1JfVkVSU0lPTkAuQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkAubGEg
XAorCSQoRlJFRVRZUEVfTElCUykgXAorCSQoR0VPQ0xVRV9MSUJTKSBcCisJJChHTElCX0xJQlMp
IFwKKwkkKEdUS19MSUJTKSBcCisJJChMSUJTT1VQX0xJQlMpCisKK3dlYmtpdDJndGtfdGVzdHNf
bGRmbGFncyA9IFwKKwktbm8taW5zdGFsbAorCitMaWJyYXJpZXNfbGliVGVzdFdlYktpdDJHdGtB
UElfbGFfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL0xv
YWRUcmFja2luZ1Rlc3QuY3BwIFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3Rr
L0xvYWRUcmFja2luZ1Rlc3QuaCBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0
ay9XZWJLaXRUZXN0QnVzLmNwcCBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0
ay9XZWJLaXRUZXN0QnVzLmggXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsv
V2ViS2l0VGVzdFNlcnZlci5jcHAgXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJH
dGsvV2ViS2l0VGVzdFNlcnZlci5oIFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQy
R3RrL1dlYlByb2Nlc3NUZXN0UnVubmVyLmNwcCBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsv
V2ViS2l0Mkd0ay9XZWJQcm9jZXNzVGVzdFJ1bm5lci5oIFwKKwlUb29scy9UZXN0V2ViS2l0QVBJ
L2d0ay9XZWJLaXQyR3RrL1Rlc3RNYWluLmNwcCBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsv
V2ViS2l0Mkd0ay9UZXN0TWFpbi5oIFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQy
R3RrL1dlYlZpZXdUZXN0LmNwcCBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0
ay9XZWJWaWV3VGVzdC5oCisKK0xpYnJhcmllc19saWJUZXN0V2ViS2l0Mkd0a0FQSV9sYV9DUFBG
TEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19jcHBmbGFncykKKworCiBub2luc3RfUFJPR1JBTVMg
Kz0gXAotCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvVGVzdFdURiBcCi0JUHJvZ3JhbXMvVGVzdFdl
YktpdEFQSS9UZXN0SmF2YVNjcmlwdENvcmUgXAotCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvVGVz
dFdlYkNvcmUgXAotCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvVGVzdEd0aworCVByb2dyYW1zL1Rl
c3RXZWJLaXRBUEkvV1RGL1Rlc3RXVEYgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvSmF2YVNj
cmlwdENvcmUvVGVzdEphdmFTY3JpcHRDb3JlIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dl
YkNvcmUvVGVzdFdlYkNvcmUgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViQ29yZUd0ay9U
ZXN0V2ViQ29yZUd0aworCitpZiBFTkFCTEVfV0VCS0lUMQorbm9pbnN0X1BST0dSQU1TICs9IFwK
KwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdEd0ay90ZXN0YXBwbGljYXRpb25jYWNoZSBc
CisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXRHdGsvdGVzdGNvbnRleHRtZW51IFwKKwlQ
cm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdEd0ay90ZXN0ZG9tZG9jdW1lbnQgXAorCVByb2dy
YW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0R3RrL3Rlc3Rkb21kb213aW5kb3cgXAorCVByb2dyYW1z
L1Rlc3RXZWJLaXRBUEkvV2ViS2l0R3RrL3Rlc3Rkb21ub2RlIFwKKwlQcm9ncmFtcy9UZXN0V2Vi
S2l0QVBJL1dlYktpdEd0ay90ZXN0aHR0cGJhY2tlbmQgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRB
UEkvV2ViS2l0R3RrL3Rlc3RmYXZpY29uZGF0YWJhc2UgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRB
UEkvV2ViS2l0R3RrL3Rlc3Rsb2FkaW5nIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktp
dEd0ay90ZXN0Z2xvYmFscyBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXRHdGsvdGVz
dG1pbWVoYW5kbGluZyBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXRHdGsvdGVzdG5l
dHdvcmtyZXF1ZXN0IFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdEd0ay90ZXN0bmV0
d29ya3Jlc3BvbnNlIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdEd0ay90ZXN0d2Vi
ZnJhbWUgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0R3RrL3Rlc3R3ZWJiYWNrZm9y
d2FyZGxpc3QgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0R3RrL3Rlc3R3ZWJoaXN0
b3J5aXRlbSBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXRHdGsvdGVzdHdpbmRvdyBc
CisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXRHdGsvdGVzdGRvd25sb2FkIFwKKwlQcm9n
cmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdEd0ay90ZXN0YXRrIFwKKwlQcm9ncmFtcy9UZXN0V2Vi
S2l0QVBJL1dlYktpdEd0ay90ZXN0YXRrcm9sZXMgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkv
V2ViS2l0R3RrL3Rlc3RoaXR0ZXN0cmVzdWx0IFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dl
YktpdEd0ay90ZXN0d2ViaW5zcGVjdG9yIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktp
dEd0ay90ZXN0d2Vic2V0dGluZ3MgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0R3Rr
L3Rlc3R3ZWJyZXNvdXJjZSBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXRHdGsvdGVz
dHdlYmRhdGFzb3VyY2UgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0R3RrL3Rlc3R3
ZWJwbHVnaW5kYXRhYmFzZSBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXRHdGsvdGVz
dHdlYnZpZXcgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0R3RrL3Rlc3RrZXlldmVu
dHMgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0R3RrL3Rlc3Rjb3B5YW5kcGFzdGUK
K2VuZGlmCiAKIGlmIEVOQUJMRV9XRUJLSVQyCiBub2luc3RfUFJPR1JBTVMgKz0gXAotCVByb2dy
YW1zL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdDIKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dl
YktpdDIvVGVzdFdlYktpdDIgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0Mkd0ay9J
bnNwZWN0b3JUZXN0U2VydmVyIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdDJHdGsv
VGVzdEF1dGhlbnRpY2F0aW9uIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdDJHdGsv
VGVzdEJhY2tGb3J3YXJkTGlzdCBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXQyR3Rr
L1Rlc3RDb250ZXh0TWVudSBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXQyR3RrL1Rl
c3RDb29raWVNYW5hZ2VyIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdDJHdGsvVGVz
dERPTU5vZGUgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0Mkd0ay9UZXN0RG93bmxv
YWRzIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdDJHdGsvVGVzdEZyYW1lIFwKKwlQ
cm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdDJHdGsvVGVzdEluc3BlY3RvciBcCisJUHJvZ3Jh
bXMvVGVzdFdlYktpdEFQSS9XZWJLaXQyR3RrL1Rlc3RJbnNwZWN0b3JTZXJ2ZXIgXAorCVByb2dy
YW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0Mkd0ay9UZXN0TG9hZGVyQ2xpZW50IFwKKwlQcm9ncmFt
cy9UZXN0V2ViS2l0QVBJL1dlYktpdDJHdGsvVGVzdFByaW50aW5nIFwKKwlQcm9ncmFtcy9UZXN0
V2ViS2l0QVBJL1dlYktpdDJHdGsvVGVzdFJlc291cmNlcyBcCisJUHJvZ3JhbXMvVGVzdFdlYktp
dEFQSS9XZWJLaXQyR3RrL1Rlc3RTU0wgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0
Mkd0ay9UZXN0VUlDbGllbnQgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0Mkd0ay9U
ZXN0V2ViRXh0ZW5zaW9ucyBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXQyR3RrL1Rl
c3RXZWJLaXRWZXJzaW9uIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdDJHdGsvVGVz
dFdlYktpdEZhdmljb25EYXRhYmFzZSBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXQy
R3RrL1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxlciBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9X
ZWJLaXQyR3RrL1Rlc3RXZWJLaXRQb2xpY3lDbGllbnQgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRB
UEkvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0U2V0dGluZ3MgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRB
UEkvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0V2ViQ29udGV4dCBcCisJUHJvZ3JhbXMvVGVzdFdlYktp
dEFQSS9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRXZWJWaWV3IFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0
QVBJL1dlYktpdDJHdGsvVGVzdFdlYktpdFdlYlZpZXdHcm91cCBcCisJUHJvZ3JhbXMvVGVzdFdl
YktpdEFQSS9XZWJLaXQyR3RrL1Rlc3RXZWJWaWV3RWRpdG9yCisKK2lmIEhBVkVfQVRTUEkyCitu
b2luc3RfUFJPR1JBTVMgKz0gXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0Mkd0ay9B
Y2Nlc3NpYmlsaXR5VGVzdFNlcnZlciBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXQy
R3RrL1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5CitlbmRpZgogZW5kaWYgIyBFTkFCTEVfV0VCS0lU
MgogCi1Qcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RXVEZfQ1BQRkxBR1MgPSBcCitQcm9ncmFt
c19UZXN0V2ViS2l0QVBJX1dURl9UZXN0V1RGX0NQUEZMQUdTID0gXAogCSQoTGlicmFyaWVzX2xp
YlRlc3RXZWJLaXRBUElNYWluX2xhX0NQUEZMQUdTKSBcCiAJJChHTElCX0xJQlMpIFwKIAkkKENB
SVJPX0NGTEFHUykKIAotUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0V1RGX0NYWEZMQUdTID0g
XAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XVEZfVGVzdFdURl9DWFhGTEFHUyA9IFwKIAktREdU
RVNUX0hBU19SVFRJPTAgXAogCSQoZ2xvYmFsX2N4eGZsYWdzKQogCi1Qcm9ncmFtc19UZXN0V2Vi
S2l0QVBJX1Rlc3RXVEZfTERBREQgPSBcCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dURl9UZXN0
V1RGX0xEQUREID0gXAogCUxpYnJhcmllcy9saWJUZXN0V2ViS2l0QVBJTWFpbi5sYSBcCiAJTGli
cmFyaWVzL2xpYmd0ZXN0LmxhIFwKIAlsaWJXVEYubGEgXAogCSQoR1RLX0xJQlMpIFwKIAkkKEdM
SUJfTElCUykKIAotUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0V1RGX0xERkxBR1MgPSBcCitQ
cm9ncmFtc19UZXN0V2ViS2l0QVBJX1dURl9UZXN0V1RGX0xERkxBR1MgPSBcCiAJLW5vLWluc3Rh
bGwKIAotUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0V1RGX1NPVVJDRVMgPSBcCitQcm9ncmFt
c19UZXN0V2ViS2l0QVBJX1dURl9UZXN0V1RGX1NPVVJDRVMgPSBcCiAJVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XVEYvQXRvbWljU3RyaW5nLmNwcCBcCiAJVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvQ1N0cmluZy5jcHAgXAogCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0No
ZWNrZWRBcml0aG1ldGljT3BlcmF0aW9ucy5jcHAgXApAQCAtNzgsMjMgKzIzMCwyMyBAQCBQcm9n
cmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RXVEZfU09VUkNFUyA9IFwKIAlUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9WZWN0b3IuY3BwIFwKIAlUb29scy9UZXN0V2ViS2l0QVBJL1dURlN0cmlu
Z1V0aWxpdGllcy5oCiAKLVByb2dyYW1zX1Rlc3RXZWJLaXRBUElfVGVzdEphdmFTY3JpcHRDb3Jl
X0NQUEZMQUdTID0gXAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9KYXZhU2NyaXB0Q29yZV9UZXN0
SmF2YVNjcmlwdENvcmVfQ1BQRkxBR1MgPSBcCiAJJChMaWJyYXJpZXNfbGliVGVzdFdlYktpdEFQ
SU1haW5fbGFfQ1BQRkxBR1MpCiAKLVByb2dyYW1zX1Rlc3RXZWJLaXRBUElfVGVzdEphdmFTY3Jp
cHRDb3JlX0NYWEZMQUdTID0gXAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9KYXZhU2NyaXB0Q29y
ZV9UZXN0SmF2YVNjcmlwdENvcmVfQ1hYRkxBR1MgPSBcCiAJLURHVEVTVF9IQVNfUlRUST0wIFwK
IAkkKGdsb2JhbF9jeHhmbGFncykKIAotUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0SmF2YVNj
cmlwdENvcmVfTERBREQgPSBcCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX0phdmFTY3JpcHRDb3Jl
X1Rlc3RKYXZhU2NyaXB0Q29yZV9MREFERCA9IFwKIAlMaWJyYXJpZXMvbGliVGVzdFdlYktpdEFQ
SU1haW4ubGEgXAogCUxpYnJhcmllcy9saWJndGVzdC5sYSBcCiAJbGliV1RGLmxhIFwKIAkkKEdU
S19MSUJTKQogCi1Qcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RKYXZhU2NyaXB0Q29yZV9MREZM
QUdTID0gXAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9KYXZhU2NyaXB0Q29yZV9UZXN0SmF2YVNj
cmlwdENvcmVfTERGTEFHUyA9IFwKIAktbm8taW5zdGFsbAogCi1Qcm9ncmFtc19UZXN0V2ViS2l0
QVBJX1Rlc3RKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTID0gXAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQ
SV9KYXZhU2NyaXB0Q29yZV9UZXN0SmF2YVNjcmlwdENvcmVfU09VUkNFUyA9IFwKIAlUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL0phdmFTY3JpcHRDb3JlL1ZNSW5zcGVjdG9yLmNwcAogCiB3ZWJj
b3JlX2xheWVyX2RlcHMgPSBcCkBAIC0xMjksMTUgKzI4MSwxNSBAQCBsaWJXZWJDb3JlTGF5ZXIu
YTogJCh3ZWJjb3JlX2xheWVyX2RlcHMpCiBESVNUQ0xFQU5GSUxFUyArPSBcCiAJJCh0b3BfYnVp
bGRkaXIpL2xpYldlYkNvcmVMYXllci5hCiAKLVByb2dyYW1zX1Rlc3RXZWJLaXRBUElfVGVzdFdl
YkNvcmVfQ1BQRkxBR1MgPSBcCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYkNvcmVfVGVzdFdl
YkNvcmVfQ1BQRkxBR1MgPSBcCiAJJChMaWJyYXJpZXNfbGliVGVzdFdlYktpdEFQSU1haW5fbGFf
Q1BQRkxBR1MpIFwKIAktSSQodG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL2lu
Y2x1ZGUKIAotUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0V2ViQ29yZV9DWFhGTEFHUyA9IFwK
K1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViQ29yZV9UZXN0V2ViQ29yZV9DWFhGTEFHUyA9IFwK
IAktREdURVNUX0hBU19SVFRJPTAgXAogCSQoZ2xvYmFsX2N4eGZsYWdzKQogCi1Qcm9ncmFtc19U
ZXN0V2ViS2l0QVBJX1Rlc3RXZWJDb3JlX0xEQUREID0gXAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQ
SV9XZWJDb3JlX1Rlc3RXZWJDb3JlX0xEQUREID0gXAogCUxpYnJhcmllcy9saWJUZXN0V2ViS2l0
QVBJTWFpbi5sYSBcCiAJTGlicmFyaWVzL2xpYmd0ZXN0LmxhIFwKIAlsaWJqYXZhc2NyaXB0Y29y
ZWd0ay1AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQC5AV0VCS0lUR1RLX0FQSV9NSU5PUl9W
RVJTSU9OQC5sYSBcCkBAIC0xNjQsMTUgKzMxNiwxNSBAQCBQcm9ncmFtc19UZXN0V2ViS2l0QVBJ
X1Rlc3RXZWJDb3JlX0xEQUREID0gXAogCSQoWFRfTElCUykgXAogCSQoWkxJQl9MSUJTKQogCi1Q
cm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RXZWJDb3JlX0xERkxBR1MgPSBcCitQcm9ncmFtc19U
ZXN0V2ViS2l0QVBJX1dlYkNvcmVfVGVzdFdlYkNvcmVfTERGTEFHUyA9IFwKIAktbm8taW5zdGFs
bAogCi1Qcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RXZWJDb3JlX1NPVVJDRVMgPSBcCitQcm9n
cmFtc19UZXN0V2ViS2l0QVBJX1dlYkNvcmVfVGVzdFdlYkNvcmVfU09VUkNFUyA9IFwKIAlUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvVVJMLmNwcCBcCiAJVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL0xheW91dFVuaXQuY3BwCiAKLVByb2dyYW1zX1Rlc3RXZWJLaXRB
UElfVGVzdEd0a19DUFBGTEFHUyA9IFwKLQkkKFByb2dyYW1zX1Rlc3RXZWJLaXRBUElfVGVzdFdU
Rl9DUFBGTEFHUykgXAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJDb3JlR3RrX1Rlc3RXZWJD
b3JlR3RrX0NQUEZMQUdTID0gXAorCSQoUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XVEZfVGVzdFdU
Rl9DUFBGTEFHUykgXAogCSQocGxhdGZvcm1fY3BwZmxhZ3MpIFwKIAkkKHBsYXRmb3JtZ3RrX2Nw
cGZsYWdzKSBcCiAJJCh3ZWJjb3JlX2NwcGZsYWdzKSBcCkBAIC0xODIsMTEgKzMzNCwxMSBAQCBQ
cm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RHdGtfQ1BQRkxBR1MgPSBcCiAJJChHVEtfQ0ZMQUdT
KSBcCiAJJChMSUJTT1VQX0NGTEFHUykKIAotUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0R3Rr
X0NYWEZMQUdTID0gXAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJDb3JlR3RrX1Rlc3RXZWJD
b3JlR3RrX0NYWEZMQUdTID0gXAogCS1ER1RFU1RfSEFTX1JUVEk9MCBcCiAJJChnbG9iYWxfY3h4
ZmxhZ3MpCiAKLVByb2dyYW1zX1Rlc3RXZWJLaXRBUElfVGVzdEd0a19MREFERCA9IFwKK1Byb2dy
YW1zX1Rlc3RXZWJLaXRBUElfV2ViQ29yZUd0a19UZXN0V2ViQ29yZUd0a19MREFERCA9IFwKIAlM
aWJyYXJpZXMvbGliVGVzdFdlYktpdEFQSU1haW4ubGEgXAogCUxpYnJhcmllcy9saWJndGVzdC5s
YSBcCiAJbGliamF2YXNjcmlwdGNvcmVndGstQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkAu
QFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkAubGEgXApAQCAtMTk4LDEwICszNTAsMTAgQEAg
UHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0R3RrX0xEQUREID0gXAogCSQoR1RLX0xJQlMpIFwK
IAkkKExJQlNPVVBfTElCUykKIAotUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0R3RrX0xERkxB
R1MgPSBcCi0JJChQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RXVEZfTERGTEFHUykKK1Byb2dy
YW1zX1Rlc3RXZWJLaXRBUElfV2ViQ29yZUd0a19UZXN0V2ViQ29yZUd0a19MREZMQUdTID0gXAor
CSQoUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XVEZfVGVzdFdURl9MREZMQUdTKQogCi1Qcm9ncmFt
c19UZXN0V2ViS2l0QVBJX1Rlc3RHdGtfU09VUkNFUyA9IFwKK1Byb2dyYW1zX1Rlc3RXZWJLaXRB
UElfV2ViQ29yZUd0a19UZXN0V2ViQ29yZUd0a19TT1VSQ0VTID0gXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW50UmVjdC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ludFNpemUuY3BwIFwKQEAgLTIxMSwxOSArMzYzLDE5MiBAQCBQcm9ncmFtc19UZXN0V2Vi
S2l0QVBJX1Rlc3RHdGtfU09VUkNFUyA9IFwKIAlUb29scy9UZXN0V2ViS2l0QVBJL2NvbmZpZy5o
IFwKIAlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2d0ay9JbnB1dE1ldGhvZEZpbHRlci5jcHAK
IAotUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0V2ViS2l0Ml9DUFBGTEFHUyA9IFwKLQkkKFBy
b2dyYW1zX1Rlc3RXZWJLaXRBUElfVGVzdFdURl9DUFBGTEFHUykgXAorUHJvZ3JhbXNfVGVzdFdl
YktpdEFQSV9XZWJLaXRHdGtfdGVzdGFwcGxpY2F0aW9uY2FjaGVfU09VUkNFUyA9IFwKKwlUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0YXBwbGljYXRpb25jYWNoZS5jCitQ
cm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0YXBwbGljYXRpb25jYWNoZV9DRkxB
R1MgPSAkKHdlYmtpdGd0a190ZXN0c19jZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dl
YktpdEd0a190ZXN0YXBwbGljYXRpb25jYWNoZV9MREFERCA9ICQod2Via2l0Z3RrX3Rlc3RzX2xk
YWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGFwcGxpY2F0aW9uY2Fj
aGVfTERGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RX
ZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3Rjb250ZXh0bWVudV9TT1VSQ0VTID0gXAorCVRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3Rjb250ZXh0bWVudS5jCitQcm9ncmFtc19U
ZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0Y29udGV4dG1lbnVfQ0ZMQUdTID0gJCh3ZWJraXRn
dGtfdGVzdHNfY2ZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGNv
bnRleHRtZW51X0xEQUREID0gJCh3ZWJraXRndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0
V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0Y29udGV4dG1lbnVfTERGTEFHUyA9ICQod2Via2l0Z3Rr
X3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3Rk
b21kb2N1bWVudF9TT1VSQ0VTID0gXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
R3RrL3Rlc3Rkb21kb2N1bWVudC5jCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190
ZXN0ZG9tZG9jdW1lbnRfQ0ZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfY2ZsYWdzKQorUHJvZ3Jh
bXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGRvbWRvY3VtZW50X0xEQUREID0gJCh3ZWJr
aXRndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0
ZG9tZG9jdW1lbnRfTERGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dy
YW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3Rkb21kb213aW5kb3dfU09VUkNFUyA9IFwK
KwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0ZG9tZG9td2luZG93LmMK
K1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3Rkb21kb213aW5kb3dfQ0ZMQUdT
ID0gJCh3ZWJraXRndGtfdGVzdHNfY2ZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJL
aXRHdGtfdGVzdGRvbWRvbXdpbmRvd19MREFERCA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkYWRkKQor
UHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGRvbWRvbXdpbmRvd19MREZMQUdT
ID0gJCh3ZWJraXRndGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9X
ZWJLaXRHdGtfdGVzdGRvbW5vZGVfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdEd0ay90ZXN0ZG9tbm9kZS5jCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktp
dEd0a190ZXN0ZG9tbm9kZV9DRkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19jZmxhZ3MpCitQcm9n
cmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0ZG9tbm9kZV9MREFERCA9ICQod2Via2l0
Z3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGRv
bW5vZGVfTERGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rl
c3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3RodHRwYmFja2VuZF9TT1VSQ0VTID0gXAorCVRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RodHRwYmFja2VuZC5jCitQcm9ncmFt
c19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0aHR0cGJhY2tlbmRfQ0ZMQUdTID0gJCh3ZWJr
aXRndGtfdGVzdHNfY2ZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVz
dGh0dHBiYWNrZW5kX0xEQUREID0gJCh3ZWJraXRndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19U
ZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0aHR0cGJhY2tlbmRfTERGTEFHUyA9ICQod2Via2l0
Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rl
c3RmYXZpY29uZGF0YWJhc2VfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdEd0ay90ZXN0ZmF2aWNvbmRhdGFiYXNlLmMgXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0R3RrL3Rlc3RfdXRpbHMuYworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJL
aXRHdGtfdGVzdGZhdmljb25kYXRhYmFzZV9DRkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19jZmxh
Z3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0ZmF2aWNvbmRhdGFiYXNl
X0xEQUREID0gJCh3ZWJraXRndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJ
X1dlYktpdEd0a190ZXN0ZmF2aWNvbmRhdGFiYXNlX0xERkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0
c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0Z2xvYmFs
c19TT1VSQ0VTID0gXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3Rn
bG9iYWxzLmMKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3RnbG9iYWxzX0NG
TEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2NmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElf
V2ViS2l0R3RrX3Rlc3RnbG9iYWxzX0xEQUREID0gJCh3ZWJraXRndGtfdGVzdHNfbGRhZGQpCitQ
cm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0Z2xvYmFsc19MREZMQUdTID0gJCh3
ZWJraXRndGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRH
dGtfdGVzdGxvYWRpbmdfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdEd0ay90ZXN0bG9hZGluZy5jCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190
ZXN0bG9hZGluZ19DRkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19jZmxhZ3MpCitQcm9ncmFtc19U
ZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0bG9hZGluZ19MREFERCA9ICQod2Via2l0Z3RrX3Rl
c3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGxvYWRpbmdf
TERGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJL
aXRBUElfV2ViS2l0R3RrX3Rlc3RtaW1laGFuZGxpbmdfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0bWltZWhhbmRsaW5nLmMgXAorCVRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RfdXRpbHMuYworUHJvZ3JhbXNfVGVzdFdl
YktpdEFQSV9XZWJLaXRHdGtfdGVzdG1pbWVoYW5kbGluZ19DRkxBR1MgPSAkKHdlYmtpdGd0a190
ZXN0c19jZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0bWltZWhh
bmRsaW5nX0xEQUREID0gJCh3ZWJraXRndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2Vi
S2l0QVBJX1dlYktpdEd0a190ZXN0bWltZWhhbmRsaW5nX0xERkxBR1MgPSAkKHdlYmtpdGd0a190
ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0bmV0
d29ya3JlcXVlc3RfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dEd0ay90ZXN0bmV0d29ya3JlcXVlc3QuYworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRH
dGtfdGVzdG5ldHdvcmtyZXF1ZXN0X0NGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2NmbGFncykK
K1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3RuZXR3b3JrcmVxdWVzdF9MREFE
RCA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJL
aXRHdGtfdGVzdG5ldHdvcmtyZXF1ZXN0X0xERkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19sZGZs
YWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0bmV0d29ya3Jlc3Bv
bnNlX1NPVVJDRVMgPSBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVz
dG5ldHdvcmtyZXNwb25zZS5jCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0
bmV0d29ya3Jlc3BvbnNlX0NGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2NmbGFncykKK1Byb2dy
YW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3RuZXR3b3JrcmVzcG9uc2VfTERBREQgPSAk
KHdlYmtpdGd0a190ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3Rr
X3Rlc3RuZXR3b3JrcmVzcG9uc2VfTERGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3Mp
CisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3R3ZWJmcmFtZV9TT1VSQ0VT
ID0gXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJmcmFtZS5j
CitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0d2ViZnJhbWVfQ0ZMQUdTID0g
JCh3ZWJraXRndGtfdGVzdHNfY2ZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRH
dGtfdGVzdHdlYmZyYW1lX0xEQUREID0gJCh3ZWJraXRndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFt
c19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0d2ViZnJhbWVfTERGTEFHUyA9ICQod2Via2l0
Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rl
c3R3ZWJwbHVnaW5kYXRhYmFzZV9TT1VSQ0VTID0gXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0R3RrL3Rlc3R3ZWJwbHVnaW5kYXRhYmFzZS5jCitQcm9ncmFtc19UZXN0V2ViS2l0
QVBJX1dlYktpdEd0a190ZXN0d2VicGx1Z2luZGF0YWJhc2VfQ0ZMQUdTID0gJCh3ZWJraXRndGtf
dGVzdHNfY2ZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdHdlYnBs
dWdpbmRhdGFiYXNlX0xEQUREID0gJCh3ZWJraXRndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19U
ZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0d2VicGx1Z2luZGF0YWJhc2VfTERGTEFHUyA9ICQo
d2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0
R3RrX3Rlc3R3ZWJiYWNrZm9yd2FyZGxpc3RfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2ViYmFja2ZvcndhcmRsaXN0LmMKK1Byb2dyYW1zX1Rl
c3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3R3ZWJiYWNrZm9yd2FyZGxpc3RfQ0ZMQUdTID0gJCh3
ZWJraXRndGtfdGVzdHNfY2ZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtf
dGVzdHdlYmJhY2tmb3J3YXJkbGlzdF9MREFERCA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkYWRkKQor
UHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdHdlYmJhY2tmb3J3YXJkbGlzdF9M
REZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktp
dEFQSV9XZWJLaXRHdGtfdGVzdHdlYmhpc3RvcnlpdGVtX1NPVVJDRVMgPSBcCisJVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYmhpc3RvcnlpdGVtLmMKK1Byb2dyYW1z
X1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3R3ZWJoaXN0b3J5aXRlbV9DRkxBR1MgPSAkKHdl
YmtpdGd0a190ZXN0c19jZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190
ZXN0d2ViaGlzdG9yeWl0ZW1fTERBREQgPSAkKHdlYmtpdGd0a190ZXN0c19sZGFkZCkKK1Byb2dy
YW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3R3ZWJoaXN0b3J5aXRlbV9MREZMQUdTID0g
JCh3ZWJraXRndGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJL
aXRHdGtfdGVzdHdpbmRvd19TT1VSQ0VTID0gXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0R3RrL3Rlc3R3aW5kb3cuYworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtf
dGVzdHdpbmRvd19DRkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19jZmxhZ3MpCitQcm9ncmFtc19U
ZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0d2luZG93X0xEQUREID0gJCh3ZWJraXRndGtfdGVz
dHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0d2luZG93X0xE
RkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0
QVBJX1dlYktpdEd0a190ZXN0ZG93bmxvYWRfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0ZG93bmxvYWQuYworUHJvZ3JhbXNfVGVzdFdlYktpdEFQ
SV9XZWJLaXRHdGtfdGVzdGRvd25sb2FkX0NGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2NmbGFn
cykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3Rkb3dubG9hZF9MREFERCA9
ICQod2Via2l0Z3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRH
dGtfdGVzdGRvd25sb2FkX0xERkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19sZGZsYWdzKQorCitQ
cm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0YXRrX1NPVVJDRVMgPSBcCisJVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGF0ay5jCitQcm9ncmFtc19UZXN0
V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0YXRrX0NGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2Nm
bGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3RhdGtfTERBREQgPSAk
KHdlYmtpdGd0a190ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3Rr
X3Rlc3RhdGtfTERGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1z
X1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3RhdGtyb2xlc19TT1VSQ0VTID0gXAorCVRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RhdGtyb2xlcy5jCitQcm9ncmFtc19U
ZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0YXRrcm9sZXNfQ0ZMQUdTID0gJCh3ZWJraXRndGtf
dGVzdHNfY2ZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGF0a3Jv
bGVzX0xEQUREID0gJCh3ZWJraXRndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0
QVBJX1dlYktpdEd0a190ZXN0YXRrcm9sZXNfTERGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2xk
ZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3R3ZWJpbnNwZWN0
b3JfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0
d2ViaW5zcGVjdG9yLmMgXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rl
c3RfdXRpbHMuYworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdHdlYmluc3Bl
Y3Rvcl9DRkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19jZmxhZ3MpCitQcm9ncmFtc19UZXN0V2Vi
S2l0QVBJX1dlYktpdEd0a190ZXN0d2ViaW5zcGVjdG9yX0xEQUREID0gJCh3ZWJraXRndGtfdGVz
dHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0d2ViaW5zcGVj
dG9yX0xERkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0
V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0d2Vic2V0dGluZ3NfU09VUkNFUyA9IFwKKwlUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2Vic2V0dGluZ3MuYworUHJvZ3JhbXNf
VGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdHdlYnNldHRpbmdzX0NGTEFHUyA9ICQod2Via2l0
Z3RrX3Rlc3RzX2NmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3R3
ZWJzZXR0aW5nc19MREFERCA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVz
dFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdHdlYnNldHRpbmdzX0xERkxBR1MgPSAkKHdlYmtpdGd0
a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0
d2VicmVzb3VyY2VfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dEd0ay90ZXN0d2VicmVzb3VyY2UuYworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtf
dGVzdHdlYnJlc291cmNlX0NGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2NmbGFncykKK1Byb2dy
YW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3R3ZWJyZXNvdXJjZV9MREFERCA9ICQod2Vi
a2l0Z3RrX3Rlc3RzX2xkYWRkKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190
ZXN0d2ViZGF0YXNvdXJjZV9TT1VSQ0VTID0gXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0R3RrL3Rlc3R3ZWJkYXRhc291cmNlLmMKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2Vi
S2l0R3RrX3Rlc3R3ZWJkYXRhc291cmNlX0NGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2NmbGFn
cykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3R3ZWJkYXRhc291cmNlX0xE
QUREID0gJCh3ZWJraXRndGtfdGVzdHNfbGRhZGQpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElf
V2ViS2l0R3RrX3Rlc3R3ZWJ2aWV3X1NPVVJDRVMgPSBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRHdGsvdGVzdHdlYnZpZXcuYyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdEd0ay90ZXN0X3V0aWxzLmMKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rl
c3R3ZWJ2aWV3X0NGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2NmbGFncykKK1Byb2dyYW1zX1Rl
c3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3R3ZWJ2aWV3X0xEQUREID0gJCh3ZWJraXRndGtfdGVz
dHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0d2Vidmlld19M
REZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktp
dEFQSV9XZWJLaXRHdGtfdGVzdGhpdHRlc3RyZXN1bHRfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0aGl0dGVzdHJlc3VsdC5jCitQcm9ncmFtc19U
ZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0aGl0dGVzdHJlc3VsdF9DRkxBR1MgPSAkKHdlYmtp
dGd0a190ZXN0c19jZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0
aGl0dGVzdHJlc3VsdF9MREFERCA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkYWRkKQorCitQcm9ncmFt
c19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0a2V5ZXZlbnRzX1NPVVJDRVMgPSBcCisJVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGtleWV2ZW50cy5jCitQcm9ncmFt
c19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0a2V5ZXZlbnRzX0NGTEFHUyA9ICQod2Via2l0
Z3RrX3Rlc3RzX2NmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3Rr
ZXlldmVudHNfTERBREQgPSAkKHdlYmtpdGd0a190ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1Rlc3RX
ZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3RrZXlldmVudHNfTERGTEFHUyA9ICQod2Via2l0Z3RrX3Rl
c3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3Rjb3B5
YW5kcGFzdGVfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0
ay90ZXN0Y29weWFuZHBhc3RlLmMgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtW
ZXJzaW9uaW5nLmMKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3Rjb3B5YW5k
cGFzdGVfQ0ZMQUdTID0gXAorCSQod2Via2l0Z3RrX3Rlc3RzX2NmbGFncykgXAorCS1JJChzcmNk
aXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ayBcCisJLUkkKHNyY2RpcikvU291cmNlL1dl
YkNvcmUKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3Rjb3B5YW5kcGFzdGVf
TERBREQgPSAkKHdlYmtpdGd0a190ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElf
V2ViS2l0R3RrX3Rlc3Rjb3B5YW5kcGFzdGVfTERGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2xk
ZmxhZ3MpCisKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyX1Rlc3RXZWJLaXQyX0NQ
UEZMQUdTID0gXAorCSQoUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XVEZfVGVzdFdURl9DUFBGTEFH
UykgXAogCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvaW5jbHVkZSBc
CiAJJChGUkVFVFlQRV9DRkxBR1MpIFwKIAkkKEdMSUJfQ0ZMQUdTKSBcCiAJJChHVEtfQ0ZMQUdT
KSBcCiAJJChMSUJTT1VQX0NGTEFHUykKIAotUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0V2Vi
S2l0Ml9DWFhGTEFHUyA9IFwKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Ml9UZXN0V2Vi
S2l0Ml9DWFhGTEFHUyA9IFwKIAktREdURVNUX0hBU19SVFRJPTAgXAogCSQoZ2xvYmFsX2N4eGZs
YWdzKQogCi1Qcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RXZWJLaXQyX0xEQUREID0gXAorUHJv
Z3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyX1Rlc3RXZWJLaXQyX0xEQUREID0gXAogCUxpYnJh
cmllcy9saWJUZXN0V2ViS2l0QVBJTWFpbi5sYSBcCiAJTGlicmFyaWVzL2xpYmd0ZXN0LmxhIFwK
IAlsaWJqYXZhc2NyaXB0Y29yZWd0ay1AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQC5AV0VC
S0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQC5sYSBcCkBAIC0yMzMsMTAgKzU1OCwxMCBAQCBQcm9n
cmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RXZWJLaXQyX0xEQUREID0gXAogCSQoR1RLX0xJQlMpIFwK
IAkkKExJQlNPVVBfTElCUykKIAotUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0V2ViS2l0Ml9M
REZMQUdTID0gXAotCSQoUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0V1RGX0xERkxBR1MpCitQ
cm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJfVGVzdFdlYktpdDJfTERGTEFHUyA9IFwKKwkk
KFByb2dyYW1zX1Rlc3RXZWJLaXRBUElfV1RGX1Rlc3RXVEZfTERGTEFHUykKIAotUHJvZ3JhbXNf
VGVzdFdlYktpdEFQSV9UZXN0V2ViS2l0Ml9TT1VSQ0VTID0gXAorUHJvZ3JhbXNfVGVzdFdlYktp
dEFQSV9XZWJLaXQyX1Rlc3RXZWJLaXQyX1NPVVJDRVMgPSBcCiAJVG9vbHMvVGVzdFdlYktpdEFQ
SS9jb25maWcuaCBcCiAJVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvUGxhdGZvcm1VdGlsaXRpZXNH
dGsuY3BwIFwKIAlUb29scy9UZXN0V2ViS2l0QVBJL2d0ay9QbGF0Zm9ybVdlYlZpZXdHdGsuY3Bw
IFwKQEAgLTM1NywxMSArNjgyLDI0NSBAQCBMaWJyYXJpZXNfbGliVGVzdFdlYktpdEFQSUluamVj
dGVkQnVuZGxlX2xhX0NGTEFHUyA9IFwKIAkkKGdsb2JhbF9jZmxhZ3MpCiAKIAotc3RhbXAtdGVz
dHdlYmtpdGFwaS13ZWJjb3JlLWZvcndhcmRpbmctaGVhZGVyczogJChXZWJLaXQyKS9TY3JpcHRz
L2dlbmVyYXRlLWZvcndhcmRpbmctaGVhZGVycy5wbCAkKFByb2dyYW1zX1Rlc3RXZWJLaXRBUElf
VGVzdFdlYkNvcmVfU09VUkNFUykKK2lmIEVOQUJMRV9XRUJLSVQyCitub2luc3RfTFRMSUJSQVJJ
RVMgKz0gTGlicmFyaWVzL1dlYkV4dGVuc2lvbnMvbGliV2ViRXh0ZW5zaW9uVGVzdC5sYQorZW5k
aWYKKworTGlicmFyaWVzX1dlYkV4dGVuc2lvbnNfbGliV2ViRXh0ZW5zaW9uVGVzdF9sYV9TT1VS
Q0VTID0gXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9XZWJFeHRlbnNp
b25UZXN0LmNwcAorCitMaWJyYXJpZXNfV2ViRXh0ZW5zaW9uc19saWJXZWJFeHRlbnNpb25UZXN0
X2xhX0xERkxBR1MgPSBcCisJLXJwYXRoICR7c2hlbGwgcHdkfS8kKHRvcF9idWlsZGRpcikvTGli
cmFyaWVzL1dlYkV4dGVuc2lvbnMvLmxpYnMgXAorCSQobm9fdW5kZWZpbmVkKSBcCisJLWF2b2lk
LXZlcnNpb24gXAorCS1tb2R1bGUKKworTGlicmFyaWVzX1dlYkV4dGVuc2lvbnNfbGliV2ViRXh0
ZW5zaW9uVGVzdF9sYV9DUFBGTEFHUyA9IFwKKwktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsgXAorCS1JJCh0b3BfYnVpbGRkaXIpL0Rl
cml2ZWRTb3VyY2VzIFwKKwktSSQodG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcy9XZWJLaXQy
L3dlYmtpdDJleHRlbnNpb24vaW5jbHVkZSBcCisJLURXRUJLSVQyX0NPTVBJTEFUSU9OIFwKKwkk
KHdlYmtpdDJndGtfdGVzdHNfY3BwZmxhZ3MpCisKK0xpYnJhcmllc19XZWJFeHRlbnNpb25zX2xp
YldlYkV4dGVuc2lvblRlc3RfbGFfQ1hYRkxBR1MgPSBcCisgICAgICAgICQoZ2xvYmFsX2N4eGZs
YWdzKQorCitMaWJyYXJpZXNfV2ViRXh0ZW5zaW9uc19saWJXZWJFeHRlbnNpb25UZXN0X2xhX0NG
TEFHUyA9IFwKKyAgICAgICAgJChnbG9iYWxfY2ZsYWdzKQorCisKK2lmIEVOQUJMRV9XRUJLSVQy
Citub2luc3RfTFRMSUJSQVJJRVMgKz0gTGlicmFyaWVzL1dlYkV4dGVuc2lvbnMvbGliV2ViUHJv
Y2Vzc1Rlc3QubGEKK2VuZGlmCisKK0xpYnJhcmllc19XZWJFeHRlbnNpb25zX2xpYldlYlByb2Nl
c3NUZXN0X2xhX1NPVVJDRVMgPSBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQy
R3RrL0RPTU5vZGVUZXN0LmNwcCBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQy
R3RrL0ZyYW1lVGVzdC5jcHAgXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0
ay9XZWJQcm9jZXNzVGVzdC5jcHAgXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Mkd0ay9XZWJQcm9jZXNzVGVzdC5oCisKK0xpYnJhcmllc19XZWJFeHRlbnNpb25zX2xpYldlYlBy
b2Nlc3NUZXN0X2xhX0xERkxBR1MgPSBcCisJLXJwYXRoICR7c2hlbGwgcHdkfS8kKHRvcF9idWls
ZGRpcikvTGlicmFyaWVzL1dlYkV4dGVuc2lvbnMvLmxpYnMgXAorCSQobm9fdW5kZWZpbmVkKSBc
CisJLWF2b2lkLXZlcnNpb24gXAorCS1tb2R1bGUKKworTGlicmFyaWVzX1dlYkV4dGVuc2lvbnNf
bGliV2ViUHJvY2Vzc1Rlc3RfbGFfQ1BQRkxBR1MgPSBcCisJLUkkKHNyY2RpcikvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrIFwKKwktSSQodG9wX2J1aWxk
ZGlyKS9EZXJpdmVkU291cmNlcyBcCisJLUkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJjZXMv
V2ViS2l0Mi93ZWJraXQyZXh0ZW5zaW9uL2luY2x1ZGUgXAorCS1EV0VCS0lUMl9DT01QSUxBVElP
TiBcCisJJCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQorCitMaWJyYXJpZXNfV2ViRXh0ZW5z
aW9uc19saWJXZWJQcm9jZXNzVGVzdF9sYV9DWFhGTEFHUyA9IFwKKwkkKGdsb2JhbF9jeHhmbGFn
cykKKworTGlicmFyaWVzX1dlYkV4dGVuc2lvbnNfbGliV2ViUHJvY2Vzc1Rlc3RfbGFfQ0ZMQUdT
ID0gXAorCSQoZ2xvYmFsX2NmbGFncykKKworCitQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktp
dDJHdGsvcmVzb3VyY2VzL3dlYmtpdDJndGstdGVzdHMtcmVzb3VyY2VzLmdyZXNvdXJjZTogVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL3Jlc291cmNlcy93ZWJraXQyZ3RrLXRl
c3RzLmdyZXNvdXJjZS54bWwgJChzaGVsbCAkKEdMSUJfQ09NUElMRV9SRVNPVVJDRVMpIC0tc291
cmNlZGlyPSQoc3JjZGlyKSAtLWdlbmVyYXRlLWRlcGVuZGVuY2llcyAkKHNyY2RpcikvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL3Jlc291cmNlcy93ZWJraXQyZ3RrLXRlc3Rz
LmdyZXNvdXJjZS54bWwpCisJJChBTV9WX2F0KW1rZGlyIC1wICR7R0VOUFJPR1JBTVN9L1Rlc3RX
ZWJLaXRBUEkvV2ViS2l0Mkd0ay9yZXNvdXJjZXMKKwkkKEFNX1ZfR0VOKSAkKEdMSUJfQ09NUElM
RV9SRVNPVVJDRVMpIC0tdGFyZ2V0PSRAIC0tc291cmNlZGlyPSQoc3JjZGlyKSAkPAorCitESVNU
Q0xFQU5GSUxFUyArPSBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXQyR3RrL3Jlc291
cmNlcy93ZWJraXQyZ3RrLXRlc3RzLXJlc291cmNlcy5ncmVzb3VyY2UKKworbm9pbnN0X0RBVEEg
Kz0gXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0Mkd0ay9yZXNvdXJjZXMvd2Via2l0
Mmd0ay10ZXN0cy1yZXNvdXJjZXMuZ3Jlc291cmNlCisKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQ
SV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRXZWJDb250ZXh0X1NPVVJDRVMgPSBcCisJVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRXZWJDb250ZXh0LmNwcAorUHJv
Z3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRXZWJDb250ZXh0X0NQUEZM
QUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQ
SV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRXZWJDb250ZXh0X0xEQUREID0gJCh3ZWJraXQyZ3RrX3Rl
c3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRX
ZWJDb250ZXh0X0xERkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3Jh
bXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRXZWJWaWV3X1NPVVJDRVMgPSBc
CisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRXZWJWaWV3
LmNwcAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRXZWJWaWV3
X0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdl
YktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRXZWJWaWV3X0xEQUREID0gJCh3ZWJraXQyZ3Rr
X3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJL
aXRXZWJWaWV3X0xERkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3Jh
bXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RMb2FkZXJDbGllbnRfU09VUkNFUyA9IFwK
KwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdExvYWRlckNsaWVudC5j
cHAKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0TG9hZGVyQ2xpZW50X0NQ
UEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktp
dEFQSV9XZWJLaXQyR3RrX1Rlc3RMb2FkZXJDbGllbnRfTERBREQgPSAkKHdlYmtpdDJndGtfdGVz
dHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdExvYWRlckNs
aWVudF9MREZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rl
c3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0V2ViS2l0U2V0dGluZ3NfU09VUkNFUyA9IFwKKwlU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFNldHRpbmdzLmNw
cAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRTZXR0aW5nc19D
UFBGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19jcHBmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJL
aXRBUElfV2ViS2l0Mkd0a19UZXN0V2ViS2l0U2V0dGluZ3NfTERBREQgPSAkKHdlYmtpdDJndGtf
dGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYktp
dFNldHRpbmdzX0xERkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3Jh
bXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX0luc3BlY3RvclRlc3RTZXJ2ZXJfU09VUkNFUyA9
IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvSW5zcGVjdG9yVGVzdFNl
cnZlci5jcHAKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19JbnNwZWN0b3JUZXN0
U2VydmVyX0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNf
VGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX0luc3BlY3RvclRlc3RTZXJ2ZXJfTERBREQgPSAkKHdl
YmtpdDJndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtf
SW5zcGVjdG9yVGVzdFNlcnZlcl9MREZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkZmxhZ3Mp
CisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0QmFja0ZvcndhcmRMaXN0
X1NPVVJDRVMgPSBcCisgICAgICAgIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0
ay9UZXN0QmFja0ZvcndhcmRMaXN0LmNwcAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQy
R3RrX1Rlc3RCYWNrRm9yd2FyZExpc3RfQ1BQRkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfY3Bw
ZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdEJhY2tGb3J3YXJk
TGlzdF9MREFERCA9ICQod2Via2l0Mmd0a190ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1Rlc3RXZWJL
aXRBUElfV2ViS2l0Mkd0a19UZXN0QmFja0ZvcndhcmRMaXN0X0xERkxBR1MgPSAkKHdlYmtpdDJn
dGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rl
c3RXZWJLaXRQb2xpY3lDbGllbnRfU09VUkNFUyA9IFwKKyAgICAgICAgVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRQb2xpY3lDbGllbnQuY3BwCitQcm9ncmFt
c19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYktpdFBvbGljeUNsaWVudF9DUFBGTEFH
UyA9ICQod2Via2l0Mmd0a190ZXN0c19jcHBmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElf
V2ViS2l0Mkd0a19UZXN0V2ViS2l0UG9saWN5Q2xpZW50X0xEQUREID0gJCh3ZWJraXQyZ3RrX3Rl
c3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRQ
b2xpY3lDbGllbnRfTERGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19sZGZsYWdzKQorCitpZiBI
QVZFX0FUU1BJMgorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX0FjY2Vzc2liaWxp
dHlUZXN0U2VydmVyX1NPVVJDRVMgPSBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXQyR3RrL0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyLmNwcAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQ
SV9XZWJLaXQyR3RrX0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyX0NQUEZMQUdTID0gJCh3ZWJraXQy
Z3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX0Fj
Y2Vzc2liaWxpdHlUZXN0U2VydmVyX0xEQUREID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkYWRkKQor
UHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX0FjY2Vzc2liaWxpdHlUZXN0U2VydmVy
X0xERkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdl
YktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5X1NPVVJDRVMgPSBcCisJ
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRBY2Nlc3NpYmls
aXR5LmNwcAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRBY2Nl
c3NpYmlsaXR5X0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKSAkKEFUU1BJ
Ml9DRkxBR1MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYktpdEFj
Y2Vzc2liaWxpdHlfTERBREQgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRhZGQpICQoQVRTUEkyX0xJ
QlMpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYktpdEFjY2Vzc2li
aWxpdHlfTERGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19sZGZsYWdzKQorZW5kaWYKKworUHJv
Z3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3REb3dubG9hZHNfU09VUkNFUyA9IFwK
KyAgICAgICAgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3REb3dubG9h
ZHMuY3BwCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdERvd25sb2Fkc19D
UFBGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19jcHBmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJL
aXRBUElfV2ViS2l0Mkd0a19UZXN0RG93bmxvYWRzX0xEQUREID0gJCh3ZWJraXQyZ3RrX3Rlc3Rz
X2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3REb3dubG9hZHNf
TERGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2Vi
S2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYlZpZXdFZGl0b3JfU09VUkNFUyA9IFwKKyAgICAgICAg
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJWaWV3RWRpdG9yLmNw
cAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJWaWV3RWRpdG9yX0NQ
UEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktp
dEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJWaWV3RWRpdG9yX0xEQUREID0gJCh3ZWJraXQyZ3RrX3Rl
c3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJWaWV3
RWRpdG9yX0xERkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNf
VGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RQcmludGluZ19TT1VSQ0VTID0gXAorICAgICAg
ICBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFByaW50aW5nLmNwcAor
UHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RQcmludGluZ19DUFBGTEFHUyA9
ICQod2Via2l0Mmd0a190ZXN0c19jcHBmbGFncykgJChHVEtfVU5JWF9QUklOVElOR19DRkxBR1Mp
CitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFByaW50aW5nX0xEQUREID0g
JCh3ZWJraXQyZ3RrX3Rlc3RzX2xkYWRkKSAkKEdUS19VTklYX1BSSU5USU5HX0xJQlMpCitQcm9n
cmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFByaW50aW5nX0xERkxBR1MgPSAkKHdl
YmtpdDJndGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQy
R3RrX1Rlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdEZhdmljb25EYXRhYmFzZS5jcHAKK1By
b2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNl
X0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdl
YktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VfTERBREQgPSAkKHdl
YmtpdDJndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtf
VGVzdFdlYktpdEZhdmljb25EYXRhYmFzZV9MREZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xk
ZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0V2ViS2l0Rmlu
ZENvbnRyb2xsZXJfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dDJHdGsvVGVzdFdlYktpdEZpbmRDb250cm9sbGVyLmNwcAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQ
SV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxlcl9DUFBGTEFHUyA9ICQod2Via2l0
Mmd0a190ZXN0c19jcHBmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19U
ZXN0V2ViS2l0RmluZENvbnRyb2xsZXJfTERBREQgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRhZGQp
CitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYktpdEZpbmRDb250cm9s
bGVyX0xERkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVz
dFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RSZXNvdXJjZXNfU09VUkNFUyA9IFwKKyAgICAgICAg
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RSZXNvdXJjZXMuY3BwCitQ
cm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFJlc291cmNlc19DUFBGTEFHUyA9
ICQod2Via2l0Mmd0a190ZXN0c19jcHBmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2Vi
S2l0Mkd0a19UZXN0UmVzb3VyY2VzX0xEQUREID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkYWRkKQor
UHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RSZXNvdXJjZXNfTERGTEFHUyA9
ICQod2Via2l0Mmd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dl
YktpdDJHdGtfVGVzdENvb2tpZU1hbmFnZXJfU09VUkNFUyA9IFwKKyAgICAgICAgVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RDb29raWVNYW5hZ2VyLmNwcAorUHJvZ3Jh
bXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RDb29raWVNYW5hZ2VyX0NQUEZMQUdTID0g
JCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJL
aXQyR3RrX1Rlc3RDb29raWVNYW5hZ2VyX0xEQUREID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkYWRk
KQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RDb29raWVNYW5hZ2VyX0xE
RkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktp
dEFQSV9XZWJLaXQyR3RrX1Rlc3RJbnNwZWN0b3JfU09VUkNFUyA9IFwKKyAgICAgICAgVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RJbnNwZWN0b3IuY3BwCitQcm9ncmFt
c19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdEluc3BlY3Rvcl9DUFBGTEFHUyA9IFwKKwkk
KHdlYmtpdDJndGtfdGVzdHNfY3BwZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktp
dDJHdGtfVGVzdEluc3BlY3Rvcl9MREFERCA9ICQod2Via2l0Mmd0a190ZXN0c19sZGFkZCkKK1By
b2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0SW5zcGVjdG9yX0xERkxBR1MgPSAk
KHdlYmtpdDJndGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJL
aXQyR3RrX1Rlc3RJbnNwZWN0b3JTZXJ2ZXJfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdEluc3BlY3RvclNlcnZlci5jcHAKK1Byb2dyYW1zX1Rl
c3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0SW5zcGVjdG9yU2VydmVyX0NQUEZMQUdTID0gJCh3
ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQy
R3RrX1Rlc3RJbnNwZWN0b3JTZXJ2ZXJfTERBREQgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRhZGQp
CitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdEluc3BlY3RvclNlcnZlcl9M
REZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJL
aXRBUElfV2ViS2l0Mkd0a19UZXN0V2ViS2l0VmVyc2lvbl9TT1VSQ0VTID0gXAorICAgICAgICBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFZlcnNpb24uY3Bw
CitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYktpdFZlcnNpb25fQ1BQ
RkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfY3BwZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0
QVBJX1dlYktpdDJHdGtfVGVzdFdlYktpdFZlcnNpb25fTERBREQgPSAkKHdlYmtpdDJndGtfdGVz
dHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYktpdFZl
cnNpb25fTERGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19U
ZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdENvbnRleHRNZW51X1NPVVJDRVMgPSBcCisgICAg
ICAgIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0Q29udGV4dE1lbnUu
Y3BwCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdENvbnRleHRNZW51X0NQ
UEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktp
dEFQSV9XZWJLaXQyR3RrX1Rlc3RDb250ZXh0TWVudV9MREFERCA9ICQod2Via2l0Mmd0a190ZXN0
c19sZGFkZCkKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0Q29udGV4dE1l
bnVfTERGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0
V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFNTTF9TT1VSQ0VTID0gXAorICAgICAgICBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFNTTC5jcHAKK1Byb2dyYW1zX1Rlc3RX
ZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0U1NMX0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3Rz
X2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RTU0xfTERB
REQgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dl
YktpdDJHdGtfVGVzdFNTTF9MREZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkZmxhZ3MpCisK
K1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0V2ViRXh0ZW5zaW9uc19TT1VS
Q0VTID0gXAorICAgICAgICBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVz
dFdlYkV4dGVuc2lvbnMuY3BwCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVz
dFdlYkV4dGVuc2lvbnNfQ1BQRkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfY3BwZmxhZ3MpCitQ
cm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYkV4dGVuc2lvbnNfTERBREQg
PSAkKHdlYmtpdDJndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktp
dDJHdGtfVGVzdFdlYkV4dGVuc2lvbnNfTERGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19sZGZs
YWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYktpdFdlYlZp
ZXdHcm91cF9TT1VSQ0VTID0gXAorICAgICAgICBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdDJHdGsvVGVzdFdlYktpdFdlYlZpZXdHcm91cC5jcHAKK1Byb2dyYW1zX1Rlc3RXZWJLaXRB
UElfV2ViS2l0Mkd0a19UZXN0V2ViS2l0V2ViVmlld0dyb3VwX0NQUEZMQUdTID0gJCh3ZWJraXQy
Z3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rl
c3RXZWJLaXRXZWJWaWV3R3JvdXBfTERBREQgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRhZGQpCitQ
cm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYktpdFdlYlZpZXdHcm91cF9M
REZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJL
aXRBUElfV2ViS2l0Mkd0a19UZXN0RE9NTm9kZV9TT1VSQ0VTID0gXAorICAgICAgICBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdERPTU5vZGUuY3BwCitQcm9ncmFtc19U
ZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdERPTU5vZGVfQ1BQRkxBR1MgPSAkKHdlYmtpdDJn
dGtfdGVzdHNfY3BwZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVz
dERPTU5vZGVfTERBREQgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0
V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdERPTU5vZGVfTERGTEFHUyA9ICQod2Via2l0Mmd0a190
ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdEZy
YW1lX1NPVVJDRVMgPSBcCisgICAgICAgIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Mkd0ay9UZXN0RnJhbWUuY3BwCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVz
dEZyYW1lX0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNf
VGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RGcmFtZV9MREFERCA9ICQod2Via2l0Mmd0a190
ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0RnJhbWVf
TERGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2Vi
S2l0QVBJX1dlYktpdDJHdGtfVGVzdEF1dGhlbnRpY2F0aW9uX1NPVVJDRVMgPSBcCisgICAgICAg
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0QXV0aGVudGljYXRpb24u
Y3BwCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdEF1dGhlbnRpY2F0aW9u
X0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdl
YktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RBdXRoZW50aWNhdGlvbl9MREFERCA9ICQod2Via2l0Mmd0
a190ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0QXV0
aGVudGljYXRpb25fTERGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19sZGZsYWdzKQorCitQcm9n
cmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFVJQ2xpZW50X1NPVVJDRVMgPSBcCisg
ICAgICAgIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0VUlDbGllbnQu
Y3BwCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFVJQ2xpZW50X0NQUEZM
QUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQ
SV9XZWJLaXQyR3RrX1Rlc3RVSUNsaWVudF9MREFERCA9ICQod2Via2l0Mmd0a190ZXN0c19sZGFk
ZCkKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0VUlDbGllbnRfTERGTEFH
UyA9ICQod2Via2l0Mmd0a190ZXN0c19sZGZsYWdzKQorCisKK3N0YW1wLXRlc3R3ZWJraXRhcGkt
d2ViY29yZS1mb3J3YXJkaW5nLWhlYWRlcnM6ICQoV2ViS2l0MikvU2NyaXB0cy9nZW5lcmF0ZS1m
b3J3YXJkaW5nLWhlYWRlcnMucGwgJChQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYkNvcmVfVGVz
dFdlYkNvcmVfU09VUkNFUykKIAkkKEFNX1ZfR0VOKSQoUEVSTCkgJDwgJChzcmNkaXIpL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZSAkKEdFTlNPVVJDRVNfV0VCQ09SRSkvaW5jbHVk
ZSBndGsgXAogCSYmIGVjaG8gdGltZXN0YW1wID4gJChARikKIAotc3RhbXAtdGVzdHdlYmtpdGFw
aS13ZWJraXQyLWZvcndhcmRpbmctaGVhZGVyczogJChXZWJLaXQyKS9TY3JpcHRzL2dlbmVyYXRl
LWZvcndhcmRpbmctaGVhZGVycy5wbCAkKFByb2dyYW1zX1Rlc3RXZWJLaXRBUElfVGVzdFdlYktp
dDJfU09VUkNFUykgJChMaWJyYXJpZXNfbGliVGVzdFdlYktpdEFQSUluamVjdGVkQnVuZGxlX2xh
X1NPVVJDRVMpCitzdGFtcC10ZXN0d2Via2l0YXBpLXdlYmtpdDItZm9yd2FyZGluZy1oZWFkZXJz
OiAkKFdlYktpdDIpL1NjcmlwdHMvZ2VuZXJhdGUtZm9yd2FyZGluZy1oZWFkZXJzLnBsICQoUHJv
Z3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyX1Rlc3RXZWJLaXQyX1NPVVJDRVMpICQoTGlicmFy
aWVzX2xpYlRlc3RXZWJLaXRBUElJbmplY3RlZEJ1bmRsZV9sYV9TT1VSQ0VTKQogCSQoQU1fVl9H
RU4pJChQRVJMKSAkPCAkKHNyY2RpcikvVG9vbHMvVGVzdFdlYktpdEFQSSAkKEdFTlNPVVJDRVNf
V0VCS0lUMikvaW5jbHVkZSBndGsgXAogCSYmIGVjaG8gdGltZXN0YW1wID4gJChARikKIApAQCAt
Mzg2LDQgKzk0NSwxNCBAQCBFWFRSQV9ESVNUICs9IFwKIAlUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdDIvc2ltcGxlLmh0bWwgXAogCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Mi9zaW1wbGUtaWZyYW1lLmh0bWwgXAogCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Mi9zaW1wbGUtdGFsbC5odG1sIFwKLQlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dDIvc3BhY2ViYXItc2Nyb2xsaW5nLmh0bWwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdDIvc3BhY2ViYXItc2Nyb2xsaW5nLmh0bWwgXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Mkd0ay9yZXNvdXJjZXMvdGVzdC1jZXJ0LnBlbSBcCisJVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQyR3RrL3Jlc291cmNlcy90ZXN0LWtleS5wZW0gXAorCVRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9yZXNvdXJjZXMvd2Via2l0Mmd0ay10ZXN0cy5n
cmVzb3VyY2UueG1sIFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvcmVz
b3VyY2VzL2xpbmstdGl0bGUuanMgXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
R3RrL3Rlc3RfdXRpbHMuaCBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsv
cmVzb3VyY2VzL2JsYW5rLmljbyBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRH
dGsvcmVzb3VyY2VzL3Rlc3QuaHRtbCBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRHdGsvcmVzb3VyY2VzL3Rlc3Qub2dnIFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdEd0ay9yZXNvdXJjZXMvdGVzdC5wZGYgXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0R3RrL3Jlc291cmNlcy90ZXN0LnR4dApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQyR3RrL0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyLmNwcCBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9BY2Nlc3NpYmlsaXR5VGVzdFNlcnZlci5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU1MDA1MAotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9BY2Nlc3NpYmls
aXR5VGVzdFNlcnZlci5jcHAKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
LDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8Z3RrL2d0
ay5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgorCitzdGF0aWMgdm9pZCBsb2FkQ2hh
bmdlZENhbGxiYWNrKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRMb2FkRXZlbnQgbG9hZEV2ZW50LCBn
cG9pbnRlcikKK3sKKyAgICAvLyBTZW5kIGEgbWVzc2FnZSB0byB0aGUgcGFyZW50IHByb2Nlc3Mg
d2hlbiB3ZSdyZSByZWFkeS4KKyAgICBpZiAobG9hZEV2ZW50ID09IFdFQktJVF9MT0FEX0ZJTklT
SEVEKQorICAgICAgICBnX3ByaW50KCJPSyIpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hh
cioqIGFyZ3YpCit7CisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIEFUSyBicmlkZ2UgaXMgbG9h
ZGVkLgorICAgIGdfc2V0ZW52KCJHVEtfTU9EVUxFUyIsICJhdGstYnJpZGdlIiwgVFJVRSk7CisK
KyAgICBndGtfaW5pdCgmYXJnYywgJmFyZ3YpOworCisgICAgV2ViS2l0V2ViVmlldyogd2ViVmll
dyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIHdlYmtpdF93
ZWJfdmlld19sb2FkX2h0bWwod2ViVmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICI8aHRtbD4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICA8Ym9keT4iCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgPGgxPlRoaXMgaXMgYSB0ZXN0PC9oMT4iCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgPHA+VGhpcyBpcyBhIHBhcmFncmFwaCB3
aXRoIHNvbWUgcGxhaW4gdGV4dC48L3A+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IiAgIDxwPlRoaXMgcGFyYWdyYXBoIGNvbnRhaW5zIDxhIGhyZWY9XCJodHRwOi8vd3d3LndlYmtp
dGd0ay5vcmdcIj5hIGxpbms8L2E+IGluIHRoZSBtaWRkbGUuPC9wPiIKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICIgIDwvYm9keT4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiPC9odG1sPiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKKworICAgIEd0
a1dpZGdldCogd2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7Cisg
ICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCBHVEtfV0lER0VUKHdl
YlZpZXcpKTsKKyAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7CisKKyAgICBnX3NpZ25h
bF9jb25uZWN0KHdpbmRvdywgImRlbGV0ZS1ldmVudCIsIEdfQ0FMTEJBQ0soZ3RrX21haW5fcXVp
dCksIDApOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgImxvYWQtY2hhbmdlZCIsIEdf
Q0FMTEJBQ0sobG9hZENoYW5nZWRDYWxsYmFjayksIDApOworCisgICAgZ3RrX21haW4oKTsKK30K
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9ET01ET01X
aW5kb3dUZXN0LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9ET01E
T01XaW5kb3dUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2Fh
ZDU0Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQy
R3RrL0RPTURPTVdpbmRvd1Rlc3QuY3BwCkBAIC0wLDAgKzEsMjIxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUg
IldlYlByb2Nlc3NUZXN0LmgiCisjaW5jbHVkZSA8Z2lvL2dpby5oPgorI2luY2x1ZGUgPHdlYmtp
dDIvd2Via2l0LXdlYi1leHRlbnNpb24uaD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgorCitj
bGFzcyBXZWJLaXRET01ET01XaW5kb3dUZXN0Oworc3RhdGljIGdib29sZWFuIGxvYWRlZENhbGxi
YWNrKFdlYktpdERPTURPTVdpbmRvdyosIFdlYktpdERPTUV2ZW50KiwgV2ViS2l0RE9NRE9NV2lu
ZG93VGVzdCopOworc3RhdGljIGdib29sZWFuIGNsaWNrZWRDYWxsYmFjayhXZWJLaXRET01ET01X
aW5kb3cqLCBXZWJLaXRET01FdmVudCosIFdlYktpdERPTURPTVdpbmRvd1Rlc3QqKTsKKworY2xh
c3MgV2ViS2l0RE9NRE9NV2luZG93VGVzdCA6IHB1YmxpYyBXZWJQcm9jZXNzVGVzdCB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8V2ViUHJvY2Vzc1Rlc3Q+IGNyZWF0ZSgpIHsgcmV0
dXJuIGFkb3B0UHRyKG5ldyBXZWJLaXRET01ET01XaW5kb3dUZXN0KCkpOyB9CisKK3ByaXZhdGU6
CisgICAgZ3VpbnQ2NCB3ZWJQYWdlRnJvbUFyZ3MoR1ZhcmlhbnQqIGFyZ3MpCisgICAgeworICAg
ICAgICBHVmFyaWFudEl0ZXIgaXRlcjsKKyAgICAgICAgZ192YXJpYW50X2l0ZXJfaW5pdCgmaXRl
ciwgYXJncyk7CisKKyAgICAgICAgY29uc3QgY2hhcioga2V5OworICAgICAgICBHVmFyaWFudCog
dmFsdWU7CisgICAgICAgIHdoaWxlIChnX3ZhcmlhbnRfaXRlcl9sb29wKCZpdGVyLCAieyZzdn0i
LCAma2V5LCAmdmFsdWUpKSB7CisgICAgICAgICAgICBpZiAoIXN0cmNtcChrZXksICJwYWdlSUQi
KSAmJiBnX3ZhcmlhbnRfY2xhc3NpZnkodmFsdWUpID09IEdfVkFSSUFOVF9DTEFTU19VSU5UNjQp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdfdmFyaWFudF9nZXRfdWludDY0KHZhbHVlKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KKworICAgIGJvb2wgdGVzdFNpZ25hbHMoV2ViS2l0V2ViRXh0ZW5zaW9uKiBl
eHRlbnNpb24sIEdWYXJpYW50KiBhcmdzKQorICAgIHsKKyAgICAgICAgbm90aWZ5KCJyZWFkeSIs
ICIiKTsKKworICAgICAgICBXZWJLaXRXZWJQYWdlKiBwYWdlID0gd2Via2l0X3dlYl9leHRlbnNp
b25fZ2V0X3BhZ2UoZXh0ZW5zaW9uLCB3ZWJQYWdlRnJvbUFyZ3MoYXJncykpOworICAgICAgICBn
X2Fzc2VydChXRUJLSVRfSVNfV0VCX1BBR0UocGFnZSkpOworICAgICAgICBXZWJLaXRET01Eb2N1
bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3BhZ2VfZ2V0X2RvbV9kb2N1bWVudChwYWdlKTsK
KyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChkb2N1bWVudCkpOworCisg
ICAgICAgIFdlYktpdERPTURPTVdpbmRvdyogZG9tV2luZG93ID0gd2Via2l0X2RvbV9kb2N1bWVu
dF9nZXRfZGVmYXVsdF92aWV3KGRvY3VtZW50KTsKKyAgICAgICAgZ19hc3NlcnQoZG9tV2luZG93
KTsKKworICAgICAgICAvLyBUaGUgImxvYWQiIFdlYktpdERPTURPTVdpbmRvdyBzaWduYWwgaXMg
aXNzdWVkIGJlZm9yZSB0aGlzIHRlc3QgaXMKKyAgICAgICAgLy8gY2FsbGVkLiBUaGVyZSdzIG5v
IHdheSB0byBjYXB0dXJlIGl0IGhlcmUuIFdlIHNpbXBseSBhc3N1bWUgdGhhdAorICAgICAgICAv
LyB0aGUgZG9jdW1lbnQgaXMgbG9hZGVkIGFuZCBub3RpZnkgdGhlIHVpcHJvY2VzcyBhY2NvcmRp
bmdseQorICAgICAgICAvLyBub3RpZnkoImxvYWRlZCIsICIiKTsKKworICAgICAgICB3ZWJraXRf
ZG9tX2V2ZW50X3RhcmdldF9hZGRfZXZlbnRfbGlzdGVuZXIoCisgICAgICAgICAgICBXRUJLSVRf
RE9NX0VWRU5UX1RBUkdFVChkb21XaW5kb3cpLAorICAgICAgICAgICAgImxvYWQiLAorICAgICAg
ICAgICAgR19DQUxMQkFDSyhsb2FkZWRDYWxsYmFjayksCisgICAgICAgICAgICBmYWxzZSwKKyAg
ICAgICAgICAgIHRoaXMpOworCisgICAgICAgIC8vIGxvYWRlZENhbGxiYWNrKCkgd2lsbCBzdG9w
IHRoaXMgbG9vcAorICAgICAgICBSdW5Mb29wOjpydW4oKTsKKworICAgICAgICBkb2N1bWVudCA9
IHdlYmtpdF93ZWJfcGFnZV9nZXRfZG9tX2RvY3VtZW50KHBhZ2UpOworICAgICAgICBnX2Fzc2Vy
dChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKGRvY3VtZW50KSk7CisKKyAgICAgICAgV2ViS2l0RE9N
RWxlbWVudCogZWxlbWVudCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRfYnlfaWQo
ZG9jdW1lbnQsICJ0ZXN0Iik7CisgICAgICAgIGdfYXNzZXJ0KGVsZW1lbnQpOworCisgICAgICAg
IHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2FkZF9ldmVudF9saXN0ZW5lcigKKyAgICAgICAgICAg
IFdFQktJVF9ET01fRVZFTlRfVEFSR0VUKGVsZW1lbnQpLAorICAgICAgICAgICAgImNsaWNrIiwK
KyAgICAgICAgICAgIEdfQ0FMTEJBQ0soY2xpY2tlZENhbGxiYWNrKSwKKyAgICAgICAgICAgIGZh
bHNlLAorICAgICAgICAgICAgdGhpcyk7CisKKyAgICAgICAgLy8gVGhlICJjbGljayIgYWN0aW9u
IHdpbGwgYmUgaXNzdWVkIGluIHRoZSB1aXByb2Nlc3MgYW5kIHRoYXQgd2lsbAorICAgICAgICAv
LyB0cmlnZ2VyIHRoZSBkb20gZXZlbnQgaGVyZS4KKyAgICAgICAgLy8gY2xpY2tlZENhbGxiYWNr
KCkgd2lsbCBzdG9wIHRoaXMgbG9vcAorICAgICAgICBSdW5Mb29wOjpydW4oKTsKKworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIHRlc3REaXNwYXRjaEV2ZW50KFdlYktp
dFdlYkV4dGVuc2lvbiogZXh0ZW5zaW9uLCBHVmFyaWFudCogYXJncykKKyAgICB7CisgICAgICAg
IG5vdGlmeSgicmVhZHkiLCAiIik7CisKKyAgICAgICAgV2ViS2l0V2ViUGFnZSogcGFnZSA9IHdl
YmtpdF93ZWJfZXh0ZW5zaW9uX2dldF9wYWdlKGV4dGVuc2lvbiwgd2ViUGFnZUZyb21BcmdzKGFy
Z3MpKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX1dFQl9QQUdFKHBhZ2UpKTsKKyAgICAg
ICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50ID0gd2Via2l0X3dlYl9wYWdlX2dldF9kb21f
ZG9jdW1lbnQocGFnZSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfRE9DVU1FTlQo
ZG9jdW1lbnQpKTsKKworICAgICAgICBXZWJLaXRET01ET01XaW5kb3cqIGRvbVdpbmRvdyA9IHdl
YmtpdF9kb21fZG9jdW1lbnRfZ2V0X2RlZmF1bHRfdmlldyhkb2N1bWVudCk7CisgICAgICAgIGdf
YXNzZXJ0KGRvbVdpbmRvdyk7CisKKyAgICAgICAgLy8gVGhlICJsb2FkIiBXZWJLaXRET01ET01X
aW5kb3cgc2lnbmFsIGlzIGlzc3VlZCBiZWZvcmUgdGhpcyB0ZXN0IGlzCisgICAgICAgIC8vIGNh
bGxlZC4gVGhlcmUncyBubyB3YXkgdG8gY2FwdHVyZSBpdCBoZXJlLiBXZSBzaW1wbHkgYXNzdW1l
IHRoYXQKKyAgICAgICAgLy8gdGhlIGRvY3VtZW50IGlzIGxvYWRlZCBhbmQgbm90aWZ5IHRoZSB1
aXByb2Nlc3MgYWNjb3JkaW5nbHkKKyAgICAgICAgLy8gbm90aWZ5KCJsb2FkZWQiLCAiIik7CisK
KyAgICAgICAgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfYWRkX2V2ZW50X2xpc3RlbmVyKAorICAg
ICAgICAgICAgV0VCS0lUX0RPTV9FVkVOVF9UQVJHRVQoZG9tV2luZG93KSwKKyAgICAgICAgICAg
ICJsb2FkIiwKKyAgICAgICAgICAgIEdfQ0FMTEJBQ0sobG9hZGVkQ2FsbGJhY2spLAorICAgICAg
ICAgICAgZmFsc2UsCisgICAgICAgICAgICB0aGlzKTsKKworICAgICAgICAvLyBsb2FkZWRDYWxs
YmFjaygpIHdpbGwgc3RvcCB0aGlzIGxvb3AKKyAgICAgICAgUnVuTG9vcDo6cnVuKCk7CisKKyAg
ICAgICAgZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3BhZ2VfZ2V0X2RvbV9kb2N1bWVudChwYWdlKTsK
KyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChkb2N1bWVudCkpOworCisg
ICAgICAgIFdlYktpdERPTUVsZW1lbnQqIGVsZW1lbnQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dl
dF9lbGVtZW50X2J5X2lkKGRvY3VtZW50LCAidGVzdCIpOworICAgICAgICBnX2Fzc2VydChlbGVt
ZW50KTsKKworICAgICAgICBXZWJLaXRET01FdmVudCogZXZlbnQgPSB3ZWJraXRfZG9tX2RvY3Vt
ZW50X2NyZWF0ZV9ldmVudChkb2N1bWVudCwgIk1vdXNlRXZlbnQiLCAwKTsKKyAgICAgICAgZ19h
c3NlcnQoZXZlbnQpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0VWRU5UKGV2ZW50
KSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfTU9VU0VfRVZFTlQoZXZlbnQpKTsK
KworICAgICAgICBnbG9uZyBjbGllbnRYLCBjbGllbnRZOworICAgICAgICBjbGllbnRYID0gd2Vi
a2l0X2RvbV9lbGVtZW50X2dldF9jbGllbnRfbGVmdChlbGVtZW50KTsKKyAgICAgICAgY2xpZW50
WSA9IHdlYmtpdF9kb21fZWxlbWVudF9nZXRfY2xpZW50X3RvcChlbGVtZW50KTsKKworICAgICAg
ICB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9hZGRfZXZlbnRfbGlzdGVuZXIoCisgICAgICAgICAg
ICBXRUJLSVRfRE9NX0VWRU5UX1RBUkdFVChlbGVtZW50KSwKKyAgICAgICAgICAgICJjbGljayIs
CisgICAgICAgICAgICBHX0NBTExCQUNLKGNsaWNrZWRDYWxsYmFjayksCisgICAgICAgICAgICBm
YWxzZSwKKyAgICAgICAgICAgIHRoaXMpOworCisgICAgICAgIHdlYmtpdF9kb21fbW91c2VfZXZl
bnRfaW5pdF9tb3VzZV9ldmVudChXRUJLSVRfRE9NX01PVVNFX0VWRU5UKGV2ZW50KSwKKyAgICAg
ICAgICAgICJjbGljayIsIFRSVUUsIFRSVUUsCisgICAgICAgICAgICBkb21XaW5kb3csIDAsIDAs
IDAsIGNsaWVudFgsIGNsaWVudFksCisgICAgICAgICAgICBGQUxTRSwgRkFMU0UsIEZBTFNFLCBG
QUxTRSwKKyAgICAgICAgICAgIDEsIFdFQktJVF9ET01fRVZFTlRfVEFSR0VUKGVsZW1lbnQpKTsK
KworICAgICAgICB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9kaXNwYXRjaF9ldmVudChXRUJLSVRf
RE9NX0VWRU5UX1RBUkdFVChlbGVtZW50KSwgZXZlbnQsIDApOworCisgICAgICAgIC8vIGNsaWNr
ZWRDYWxsYmFjaygpIHdpbGwgc3RvcCB0aGlzIGxvb3AKKyAgICAgICAgUnVuTG9vcDo6cnVuKCk7
CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCB0ZXN0R2V0Q29tcHV0
ZWRTdHlsZShXZWJLaXRXZWJFeHRlbnNpb24qIGV4dGVuc2lvbiwgR1ZhcmlhbnQqIGFyZ3MpCisg
ICAgeworICAgICAgICBXZWJLaXRXZWJQYWdlKiBwYWdlID0gd2Via2l0X3dlYl9leHRlbnNpb25f
Z2V0X3BhZ2UoZXh0ZW5zaW9uLCB3ZWJQYWdlRnJvbUFyZ3MoYXJncykpOworICAgICAgICBnX2Fz
c2VydChXRUJLSVRfSVNfV0VCX1BBR0UocGFnZSkpOworICAgICAgICBXZWJLaXRET01Eb2N1bWVu
dCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3BhZ2VfZ2V0X2RvbV9kb2N1bWVudChwYWdlKTsKKyAg
ICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChkb2N1bWVudCkpOworICAgICAg
ICBXZWJLaXRET01ET01XaW5kb3cqIGRvbVdpbmRvdyA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0
X2RlZmF1bHRfdmlldyhkb2N1bWVudCk7CisgICAgICAgIGdfYXNzZXJ0KGRvbVdpbmRvdyk7Cisg
ICAgICAgIFdlYktpdERPTUVsZW1lbnQqIGVsZW1lbnQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dl
dF9lbGVtZW50X2J5X2lkKGRvY3VtZW50LCAidGVzdCIpOworICAgICAgICBnX2Fzc2VydChlbGVt
ZW50KTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19FTEVNRU5UKGVsZW1lbnQpKTsK
KyAgICAgICAgV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiogY3NzU3R5bGUgPSB3ZWJraXRf
ZG9tX2RvbV93aW5kb3dfZ2V0X2NvbXB1dGVkX3N0eWxlKGRvbVdpbmRvdywgZWxlbWVudCwgMCk7
CisgICAgICAgIGdjaGFyKiBmb250U2l6ZSA9IHdlYmtpdF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0
aW9uX2dldF9wcm9wZXJ0eV92YWx1ZShjc3NTdHlsZSwgImZvbnQtc2l6ZSIpOworICAgICAgICBn
X2Fzc2VydF9jbXBzdHIoZm9udFNpemUsID09LCAiMTZweCIpOworCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBydW5UZXN0KGNvbnN0IGNoYXIqIHRlc3RO
YW1lLCBXZWJLaXRXZWJFeHRlbnNpb24qIGV4dGVuc2lvbiwgR1ZhcmlhbnQqIGFyZ3MpCisgICAg
eworICAgICAgICBpZiAoIXN0cmNtcCh0ZXN0TmFtZSwgInNpZ25hbHMiKSkKKyAgICAgICAgICAg
IHJldHVybiB0ZXN0U2lnbmFscyhleHRlbnNpb24sIGFyZ3MpOworICAgICAgICBpZiAoIXN0cmNt
cCh0ZXN0TmFtZSwgImRpc3BhdGNoLWV2ZW50IikpCisgICAgICAgICAgICByZXR1cm4gdGVzdERp
c3BhdGNoRXZlbnQoZXh0ZW5zaW9uLCBhcmdzKTsKKyAgICAgICAgaWYgKCFzdHJjbXAodGVzdE5h
bWUsICJnZXQtY29tcHV0ZWQtc3R5bGUiKSkKKyAgICAgICAgICAgIHJldHVybiB0ZXN0R2V0Q29t
cHV0ZWRTdHlsZShleHRlbnNpb24sIGFyZ3MpOworCisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFj
aGVkKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9OworCitzdGF0aWMgdm9pZCBf
X2F0dHJpYnV0ZV9fKChjb25zdHJ1Y3RvcikpIHJlZ2lzdGVyVGVzdHMoKQoreworICAgIFJFR0lT
VEVSX1RFU1QoV2ViS2l0RE9NRE9NV2luZG93VGVzdCwgIldlYktpdERPTURPTVdpbmRvdy9zaWdu
YWxzIik7CisgICAgUkVHSVNURVJfVEVTVChXZWJLaXRET01ET01XaW5kb3dUZXN0LCAiV2ViS2l0
RE9NRE9NV2luZG93L2Rpc3BhdGNoLWV2ZW50Iik7CisgICAgUkVHSVNURVJfVEVTVChXZWJLaXRE
T01ET01XaW5kb3dUZXN0LCAiV2ViS2l0RE9NRE9NV2luZG93L2dldC1jb21wdXRlZC1zdHlsZSIp
OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gbG9hZGVkQ2FsbGJhY2soV2ViS2l0RE9NRE9NV2luZG93
KiB2aWV3LCBXZWJLaXRET01FdmVudCogZXZlbnQsIFdlYktpdERPTURPTVdpbmRvd1Rlc3QqIHRl
c3QpCit7CisgICAgdGVzdC0+bm90aWZ5KCJsb2FkZWQiLCAiIik7CisKKyAgICAvLyBTdG9wIHRo
ZSBsb29wIGFuZCBsZXQgdGVzdFNpZ25hbHMoKSBvciB0ZXN0RGlzcGF0Y2hFdmVudCgpIGNvbnRp
bnVlIGl0cyBjb3Vyc2UKKyAgICBSdW5Mb29wOjpjdXJyZW50KCktPnN0b3AoKTsKKworICAgIHJl
dHVybiBGQUxTRTsKK30KKworc3RhdGljIGdib29sZWFuIGNsaWNrZWRDYWxsYmFjayhXZWJLaXRE
T01ET01XaW5kb3cqIHZpZXcsIFdlYktpdERPTUV2ZW50KiBldmVudCwgV2ViS2l0RE9NRE9NV2lu
ZG93VGVzdCogdGVzdCkKK3sKKyAgICB0ZXN0LT5ub3RpZnkoImNsaWNrZWQiLCAiIik7CisgICAg
dGVzdC0+bm90aWZ5KCJmaW5pc2giLCAiIik7CisKKyAgICAvLyBTdG9wIHRoZSBsb29wIGFuZCBs
ZXQgdGVzdFNpZ25hbHMoKSBvciB0ZXN0RGlzcGF0Y2hFdmVudCgpIGNvbnRpbnVlIGl0cyBjb3Vy
c2UKKyAgICBSdW5Mb29wOjpjdXJyZW50KCktPnN0b3AoKTsKKworICAgIHJldHVybiBGQUxTRTsK
K30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9ET01O
b2RlVGVzdC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvRE9NTm9k
ZVRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNzU0Y2YKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvRE9N
Tm9kZVRlc3QuY3BwCkBAIC0wLDAgKzEsMjE2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIldlYlByb2Nlc3NU
ZXN0LmgiCisjaW5jbHVkZSA8Z2lvL2dpby5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0LXdl
Yi1leHRlbnNpb24uaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisKK2NsYXNz
IFdlYktpdERPTU5vZGVUZXN0IDogcHVibGljIFdlYlByb2Nlc3NUZXN0IHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc093blB0cjxXZWJQcm9jZXNzVGVzdD4gY3JlYXRlKCkgeyByZXR1cm4gYWRv
cHRQdHIobmV3IFdlYktpdERPTU5vZGVUZXN0KCkpOyB9CisKK3ByaXZhdGU6CisgICAgZ3VpbnQ2
NCB3ZWJQYWdlRnJvbUFyZ3MoR1ZhcmlhbnQqIGFyZ3MpCisgICAgeworICAgICAgICBHVmFyaWFu
dEl0ZXIgaXRlcjsKKyAgICAgICAgZ192YXJpYW50X2l0ZXJfaW5pdCgmaXRlciwgYXJncyk7CisK
KyAgICAgICAgY29uc3QgY2hhcioga2V5OworICAgICAgICBHVmFyaWFudCogdmFsdWU7CisgICAg
ICAgIHdoaWxlIChnX3ZhcmlhbnRfaXRlcl9sb29wKCZpdGVyLCAieyZzdn0iLCAma2V5LCAmdmFs
dWUpKSB7CisgICAgICAgICAgICBpZiAoIXN0cmNtcChrZXksICJwYWdlSUQiKSAmJiBnX3Zhcmlh
bnRfY2xhc3NpZnkodmFsdWUpID09IEdfVkFSSUFOVF9DTEFTU19VSU5UNjQpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGdfdmFyaWFudF9nZXRfdWludDY0KHZhbHVlKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KworICAgIGJvb2wgdGVzdEhpZXJhcmNoeU5hdmlnYXRpb24oV2ViS2l0V2ViRXh0ZW5zaW9uKiBl
eHRlbnNpb24sIEdWYXJpYW50KiBhcmdzKQorICAgIHsKKyAgICAgICAgV2ViS2l0V2ViUGFnZSog
cGFnZSA9IHdlYmtpdF93ZWJfZXh0ZW5zaW9uX2dldF9wYWdlKGV4dGVuc2lvbiwgd2ViUGFnZUZy
b21BcmdzKGFyZ3MpKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX1dFQl9QQUdFKHBhZ2Up
KTsKKyAgICAgICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50ID0gd2Via2l0X3dlYl9wYWdl
X2dldF9kb21fZG9jdW1lbnQocGFnZSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNf
RE9DVU1FTlQoZG9jdW1lbnQpKTsKKworICAgICAgICBXZWJLaXRET01IVE1MSGVhZEVsZW1lbnQq
IGhlYWQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9oZWFkKGRvY3VtZW50KTsKKyAgICAgICAg
Z19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0hFQURfRUxFTUVOVChoZWFkKSk7CisKKyAgICAg
ICAgLy8gVGl0bGUsIGhlYWQncyBjaGlsZC4KKyAgICAgICAgZ19hc3NlcnQod2Via2l0X2RvbV9u
b2RlX2hhc19jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoaGVhZCkpKTsKKyAgICAgICAgR1Jl
ZlB0cjxXZWJLaXRET01Ob2RlTGlzdD4gbGlzdCA9IGFkb3B0R1JlZih3ZWJraXRfZG9tX25vZGVf
Z2V0X2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShoZWFkKSkpOworICAgICAgICBnX2Fzc2Vy
dChXRUJLSVRfRE9NX0lTX05PREVfTElTVChsaXN0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0
X2NtcGludCh3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QuZ2V0KCkpLCA9PSwg
MSk7CisgICAgICAgIFdlYktpdERPTU5vZGUqIG5vZGUgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9p
dGVtKGxpc3QuZ2V0KCksIDApOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxf
VElUTEVfRUxFTUVOVChub2RlKSk7CisKKyAgICAgICAgLy8gQm9keSwgSGVhZCBzaWJsaW5nLgor
ICAgICAgICBub2RlID0gd2Via2l0X2RvbV9ub2RlX2dldF9uZXh0X3NpYmxpbmcoV0VCS0lUX0RP
TV9OT0RFKGhlYWQpKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0JPRFlf
RUxFTUVOVChub2RlKSk7CisgICAgICAgIFdlYktpdERPTUhUTUxCb2R5RWxlbWVudCogYm9keSA9
IFdFQktJVF9ET01fSFRNTF9CT0RZX0VMRU1FTlQobm9kZSk7CisKKyAgICAgICAgLy8gVGhlcmUg
aXMgbm8gdGhpcmQgc2libGluZworICAgICAgICBnX2Fzc2VydCghd2Via2l0X2RvbV9ub2RlX2dl
dF9uZXh0X3NpYmxpbmcobm9kZSkpOworCisgICAgICAgIC8vIEJvZHkncyBwcmV2aW91cyBzaWJs
aW5nIGlzIEhlYWQuCisgICAgICAgIG5vZGUgPSB3ZWJraXRfZG9tX25vZGVfZ2V0X3ByZXZpb3Vz
X3NpYmxpbmcoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lU
X0RPTV9JU19IVE1MX0hFQURfRUxFTUVOVChub2RlKSk7CisKKyAgICAgICAgLy8gQm9keSBoYXMg
MyBjaGlsZHJlbi4KKyAgICAgICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2hhc19jaGlsZF9u
b2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpKTsKKyAgICAgICAgbGlzdCA9IGFkb3B0R1JlZih3
ZWJraXRfZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSkpOwor
ICAgICAgICB1bnNpZ25lZCBsb25nIGxlbmd0aCA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2dldF9s
ZW5ndGgobGlzdC5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChsZW5ndGgsID09LCAz
KTsKKworICAgICAgICAvLyBUaGUgdGhyZWUgb2YgdGhlbSBhcmUgUCB0YWdzLgorICAgICAgICBm
b3IgKHVuc2lnbmVkIGxvbmcgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAg
bm9kZSA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdC5nZXQoKSwgaSk7CisgICAgICAg
ICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfUEFSQUdSQVBIX0VMRU1FTlQobm9kZSkp
OworICAgICAgICB9CisKKyAgICAgICAgLy8gR28gYmFja3dhcmRzCisgICAgICAgIHVuc2lnbmVk
IGk7CisgICAgICAgIGZvciAoaSA9IDA7IG5vZGU7IG5vZGUgPSB3ZWJraXRfZG9tX25vZGVfZ2V0
X3ByZXZpb3VzX3NpYmxpbmcobm9kZSksIGkrKykgeyB9CisgICAgICAgIGdfYXNzZXJ0X2NtcGlu
dChpLCA9PSwgMyk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCB0
ZXN0SW5zZXJ0aW9uKFdlYktpdFdlYkV4dGVuc2lvbiogZXh0ZW5zaW9uLCBHVmFyaWFudCogYXJn
cykKKyAgICB7CisgICAgICAgIFdlYktpdFdlYlBhZ2UqIHBhZ2UgPSB3ZWJraXRfd2ViX2V4dGVu
c2lvbl9nZXRfcGFnZShleHRlbnNpb24sIHdlYlBhZ2VGcm9tQXJncyhhcmdzKSk7CisgICAgICAg
IGdfYXNzZXJ0KFdFQktJVF9JU19XRUJfUEFHRShwYWdlKSk7CisgICAgICAgIFdlYktpdERPTURv
Y3VtZW50KiBkb2N1bWVudCA9IHdlYmtpdF93ZWJfcGFnZV9nZXRfZG9tX2RvY3VtZW50KHBhZ2Up
OworICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKGRvY3VtZW50KSk7CisK
KyAgICAgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQqIGJvZHkgPSB3ZWJraXRfZG9tX2RvY3VtZW50
X2dldF9ib2R5KGRvY3VtZW50KTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1M
X0VMRU1FTlQoYm9keSkpOworCisgICAgICAgIC8vIEJvZHkgc2hvdWxkbid0IGhhdmUgYW55IGNo
aWxkcmVuIGF0IHRoaXMgcG9pbnQuCisgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG9tX25vZGVf
aGFzX2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSkpOworCisgICAgICAgIC8vIElu
c2VydCBvbmUgUCBlbGVtZW50LgorICAgICAgICBXZWJLaXRET01FbGVtZW50KiBwID0gd2Via2l0
X2RvbV9kb2N1bWVudF9jcmVhdGVfZWxlbWVudChkb2N1bWVudCwgIlAiLCAwKTsKKyAgICAgICAg
Z19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0VMRU1FTlQocCkpOworICAgICAgICB3ZWJraXRf
ZG9tX25vZGVfYXBwZW5kX2NoaWxkKFdFQktJVF9ET01fTk9ERShib2R5KSwgV0VCS0lUX0RPTV9O
T0RFKHApLCAwKTsKKworICAgICAgICAvLyBOb3cgaXQgc2hvdWxkIGhhdmUgb25lLCB0aGUgc2Ft
ZSB0aGF0IHdlIGluc2VydGVkLgorICAgICAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaGFz
X2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSkpOworICAgICAgICBHUmVmUHRyPFdl
YktpdERPTU5vZGVMaXN0PiBsaXN0ID0gYWRvcHRHUmVmKHdlYmtpdF9kb21fbm9kZV9nZXRfY2hp
bGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJ
VF9ET01fSVNfTk9ERV9MSVNUKGxpc3QuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50
KHdlYmtpdF9kb21fbm9kZV9saXN0X2dldF9sZW5ndGgobGlzdC5nZXQoKSksID09LCAxKTsKKyAg
ICAgICAgV2ViS2l0RE9NTm9kZSogbm9kZSA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlz
dC5nZXQoKSwgMCk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5U
KG5vZGUpKTsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2lzX3NhbWVfbm9kZShX
RUJLSVRfRE9NX05PREUocCksIG5vZGUpKTsKKworICAgICAgICAvLyBSZXBsYWNlIHRoZSBQIHRh
ZyB3aXRoIGEgRElWIHRhZy4KKyAgICAgICAgV2ViS2l0RE9NRWxlbWVudCogZGl2ID0gd2Via2l0
X2RvbV9kb2N1bWVudF9jcmVhdGVfZWxlbWVudChkb2N1bWVudCwgIkRJViIsIDApOworICAgICAg
ICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChkaXYpKTsKKyAgICAgICAgd2Vi
a2l0X2RvbV9ub2RlX3JlcGxhY2VfY2hpbGQoV0VCS0lUX0RPTV9OT0RFKGJvZHkpLCBXRUJLSVRf
RE9NX05PREUoZGl2KSwgV0VCS0lUX0RPTV9OT0RFKHApLCAwKTsKKyAgICAgICAgZ19hc3NlcnQo
d2Via2l0X2RvbV9ub2RlX2hhc19jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpKTsK
KyAgICAgICAgbGlzdCA9IGFkb3B0R1JlZih3ZWJraXRfZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVz
KFdFQktJVF9ET01fTk9ERShib2R5KSkpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lT
X05PREVfTElTVChsaXN0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRf
ZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QuZ2V0KCkpLCA9PSwgMSk7CisgICAgICAgIG5v
ZGUgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtKGxpc3QuZ2V0KCksIDApOworICAgICAgICBn
X2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChub2RlKSk7CisgICAgICAgIGdfYXNz
ZXJ0KHdlYmtpdF9kb21fbm9kZV9pc19zYW1lX25vZGUoV0VCS0lUX0RPTV9OT0RFKGRpdiksIG5v
ZGUpKTsKKworICAgICAgICAvLyBOb3cgcmVtb3ZlIHRoZSB0YWcuCisgICAgICAgIHdlYmtpdF9k
b21fbm9kZV9yZW1vdmVfY2hpbGQoV0VCS0lUX0RPTV9OT0RFKGJvZHkpLCBub2RlLCAwKTsKKyAg
ICAgICAgbGlzdCA9IGFkb3B0R1JlZih3ZWJraXRfZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVzKFdF
QktJVF9ET01fTk9ERShib2R5KSkpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX05P
REVfTElTVChsaXN0LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfZG9t
X25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QuZ2V0KCkpLCA9PSwgMCk7CisKKyAgICAgICAgLy8g
VGVzdCBpbnNlcnQgYmVmb3JlLiBJZiByZWZDaGlsZCBpcyBudWxsLCBpbnNlcnQgbmV3Q2hpbGQg
YXMgbGFzdCBlbGVtZW50IG9mIHBhcmVudC4KKyAgICAgICAgZGl2ID0gd2Via2l0X2RvbV9kb2N1
bWVudF9jcmVhdGVfZWxlbWVudChkb2N1bWVudCwgIkRJViIsIDApOworICAgICAgICBnX2Fzc2Vy
dChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChkaXYpKTsKKyAgICAgICAgd2Via2l0X2RvbV9u
b2RlX2luc2VydF9iZWZvcmUoV0VCS0lUX0RPTV9OT0RFKGJvZHkpLCBXRUJLSVRfRE9NX05PREUo
ZGl2KSwgMCwgMCk7CisgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9oYXNfY2hpbGRf
bm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKSk7CisgICAgICAgIGxpc3QgPSBhZG9wdEdSZWYo
d2Via2l0X2RvbV9ub2RlX2dldF9jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpKTsK
KyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19OT0RFX0xJU1QobGlzdC5nZXQoKSkpOwor
ICAgICAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChs
aXN0LmdldCgpKSwgPT0sIDEpOworICAgICAgICBub2RlID0gd2Via2l0X2RvbV9ub2RlX2xpc3Rf
aXRlbShsaXN0LmdldCgpLCAwKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1M
X0VMRU1FTlQobm9kZSkpOworICAgICAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaXNfc2Ft
ZV9ub2RlKFdFQktJVF9ET01fTk9ERShkaXYpLCBub2RlKSk7CisKKyAgICAgICAgLy8gTm93IGlu
c2VydCBhICdwJyBiZWZvcmUgJ2RpdicuCisgICAgICAgIHAgPSB3ZWJraXRfZG9tX2RvY3VtZW50
X2NyZWF0ZV9lbGVtZW50KGRvY3VtZW50LCAiUCIsIDApOworICAgICAgICBnX2Fzc2VydChXRUJL
SVRfRE9NX0lTX0hUTUxfRUxFTUVOVChwKSk7CisgICAgICAgIHdlYmtpdF9kb21fbm9kZV9pbnNl
cnRfYmVmb3JlKFdFQktJVF9ET01fTk9ERShib2R5KSwgV0VCS0lUX0RPTV9OT0RFKHApLCBXRUJL
SVRfRE9NX05PREUoZGl2KSwgMCk7CisgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9o
YXNfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKSk7CisgICAgICAgIGxpc3QgPSBh
ZG9wdEdSZWYod2Via2l0X2RvbV9ub2RlX2dldF9jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUo
Ym9keSkpKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19OT0RFX0xJU1QobGlzdC5n
ZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0
X2xlbmd0aChsaXN0LmdldCgpKSwgPT0sIDIpOworICAgICAgICBub2RlID0gd2Via2l0X2RvbV9u
b2RlX2xpc3RfaXRlbShsaXN0LmdldCgpLCAwKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RP
TV9JU19IVE1MX0VMRU1FTlQobm9kZSkpOworICAgICAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25v
ZGVfaXNfc2FtZV9ub2RlKFdFQktJVF9ET01fTk9ERShwKSwgbm9kZSkpOworICAgICAgICBub2Rl
ID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0LmdldCgpLCAxKTsKKyAgICAgICAgZ19h
c3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0VMRU1FTlQobm9kZSkpOworICAgICAgICBnX2Fzc2Vy
dCh3ZWJraXRfZG9tX25vZGVfaXNfc2FtZV9ub2RlKFdFQktJVF9ET01fTk9ERShkaXYpLCBub2Rl
KSk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCB0ZXN0VGFnTmFt
ZXMoV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24sIEdWYXJpYW50KiBhcmdzKQorICAgIHsK
KyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGV4cGVjdGVkVGFnTmFtZXNbXSA9IHsgIkhUTUwi
LCAiSEVBRCIsICJCT0RZIiwgIlZJREVPIiwgIlNPVVJDRSIsICJWSURFTyIsICJTT1VSQ0UiLCAi
SU5QVVQiIH07CisKKyAgICAgICAgV2ViS2l0V2ViUGFnZSogcGFnZSA9IHdlYmtpdF93ZWJfZXh0
ZW5zaW9uX2dldF9wYWdlKGV4dGVuc2lvbiwgd2ViUGFnZUZyb21BcmdzKGFyZ3MpKTsKKyAgICAg
ICAgZ19hc3NlcnQoV0VCS0lUX0lTX1dFQl9QQUdFKHBhZ2UpKTsKKyAgICAgICAgV2ViS2l0RE9N
RG9jdW1lbnQqIGRvY3VtZW50ID0gd2Via2l0X3dlYl9wYWdlX2dldF9kb21fZG9jdW1lbnQocGFn
ZSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfRE9DVU1FTlQoZG9jdW1lbnQpKTsK
KworICAgICAgICBXZWJLaXRET01Ob2RlTGlzdCogbGlzdCA9IHdlYmtpdF9kb21fZG9jdW1lbnRf
Z2V0X2VsZW1lbnRzX2J5X3RhZ19uYW1lKGRvY3VtZW50LCAiKiIpOworICAgICAgICBndWxvbmcg
bm9kZUNvdW50ID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChsaXN0KTsKKyAgICAg
ICAgZ19hc3NlcnRfY21wdWludChub2RlQ291bnQsID09LCBHX05fRUxFTUVOVFMoZXhwZWN0ZWRU
YWdOYW1lcykpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZUNvdW50OyBp
KyspIHsKKyAgICAgICAgICAgIFdlYktpdERPTU5vZGUqIG5vZGUgPSB3ZWJraXRfZG9tX25vZGVf
bGlzdF9pdGVtKGxpc3QsIGkpOworICAgICAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19O
T0RFKG5vZGUpKTsKKyAgICAgICAgICAgIEdPd25QdHI8Y2hhcj4gdGFnTmFtZSh3ZWJraXRfZG9t
X25vZGVfZ2V0X25vZGVfbmFtZShub2RlKSk7CisgICAgICAgICAgICBnX2Fzc2VydF9jbXBzdHIo
dGFnTmFtZS5nZXQoKSwgPT0sIGV4cGVjdGVkVGFnTmFtZXNbaV0pOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIHJ1blRlc3QoY29u
c3QgY2hhciogdGVzdE5hbWUsIFdlYktpdFdlYkV4dGVuc2lvbiogZXh0ZW5zaW9uLCBHVmFyaWFu
dCogYXJncykKKyAgICB7CisgICAgICAgIGlmICghc3RyY21wKHRlc3ROYW1lLCAiaGllcmFyY2h5
LW5hdmlnYXRpb24iKSkKKyAgICAgICAgICAgIHJldHVybiB0ZXN0SGllcmFyY2h5TmF2aWdhdGlv
bihleHRlbnNpb24sIGFyZ3MpOworICAgICAgICBpZiAoIXN0cmNtcCh0ZXN0TmFtZSwgImluc2Vy
dGlvbiIpKQorICAgICAgICAgICAgcmV0dXJuIHRlc3RJbnNlcnRpb24oZXh0ZW5zaW9uLCBhcmdz
KTsKKyAgICAgICAgaWYgKCFzdHJjbXAodGVzdE5hbWUsICJ0YWctbmFtZXMiKSkKKyAgICAgICAg
ICAgIHJldHVybiB0ZXN0VGFnTmFtZXMoZXh0ZW5zaW9uLCBhcmdzKTsKKworICAgICAgICBnX2Fz
c2VydF9ub3RfcmVhY2hlZCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfTsKKwor
c3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXygoY29uc3RydWN0b3IpKSByZWdpc3RlclRlc3RzKCkK
K3sKKyAgICBSRUdJU1RFUl9URVNUKFdlYktpdERPTU5vZGVUZXN0LCAiV2ViS2l0RE9NTm9kZS9o
aWVyYXJjaHktbmF2aWdhdGlvbiIpOworICAgIFJFR0lTVEVSX1RFU1QoV2ViS2l0RE9NTm9kZVRl
c3QsICJXZWJLaXRET01Ob2RlL2luc2VydGlvbiIpOworICAgIFJFR0lTVEVSX1RFU1QoV2ViS2l0
RE9NTm9kZVRlc3QsICJXZWJLaXRET01Ob2RlL3RhZy1uYW1lcyIpOworfQorCisKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9GcmFtZVRlc3QuY3BwIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL0ZyYW1lVGVzdC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ0ODUwZgotLS0gL2Rldi9udWxsCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9GcmFtZVRlc3QuY3BwCkBAIC0w
LDAgKzEsMTAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIldlYlByb2Nlc3NUZXN0LmgiCisjaW5jbHVkZSA8
Z2lvL2dpby5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0LXdlYi1leHRlbnNpb24uaD4KKwor
Y2xhc3MgV2ViS2l0RnJhbWVUZXN0IDogcHVibGljIFdlYlByb2Nlc3NUZXN0IHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc093blB0cjxXZWJQcm9jZXNzVGVzdD4gY3JlYXRlKCkgeyByZXR1cm4g
YWRvcHRQdHIobmV3IFdlYktpdEZyYW1lVGVzdCgpKTsgfQorCitwcml2YXRlOgorICAgIGd1aW50
NjQgd2ViUGFnZUZyb21BcmdzKEdWYXJpYW50KiBhcmdzKQorICAgIHsKKyAgICAgICAgR1Zhcmlh
bnRJdGVyIGl0ZXI7CisgICAgICAgIGdfdmFyaWFudF9pdGVyX2luaXQoJml0ZXIsIGFyZ3MpOwor
CisgICAgICAgIGNvbnN0IGNoYXIqIGtleTsKKyAgICAgICAgR1ZhcmlhbnQqIHZhbHVlOworICAg
ICAgICB3aGlsZSAoZ192YXJpYW50X2l0ZXJfbG9vcCgmaXRlciwgInsmc3Z9IiwgJmtleSwgJnZh
bHVlKSkgeworICAgICAgICAgICAgaWYgKCFzdHJjbXAoa2V5LCAicGFnZUlEIikgJiYgZ192YXJp
YW50X2NsYXNzaWZ5KHZhbHVlKSA9PSBHX1ZBUklBTlRfQ0xBU1NfVUlOVDY0KQorICAgICAgICAg
ICAgICAgIHJldHVybiBnX3ZhcmlhbnRfZ2V0X3VpbnQ2NCh2YWx1ZSk7CisgICAgICAgIH0KKwor
ICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9
CisKKyAgICBib29sIHRlc3RNYWluRnJhbWUoV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24s
IEdWYXJpYW50KiBhcmdzKQorICAgIHsKKyAgICAgICAgV2ViS2l0V2ViUGFnZSogcGFnZSA9IHdl
YmtpdF93ZWJfZXh0ZW5zaW9uX2dldF9wYWdlKGV4dGVuc2lvbiwgd2ViUGFnZUZyb21BcmdzKGFy
Z3MpKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX1dFQl9QQUdFKHBhZ2UpKTsKKworICAg
ICAgICBXZWJLaXRGcmFtZSogZnJhbWUgPSB3ZWJraXRfd2ViX3BhZ2VfZ2V0X21haW5fZnJhbWUo
cGFnZSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19GUkFNRShmcmFtZSkpOworICAgICAg
ICBnX2Fzc2VydCh3ZWJraXRfZnJhbWVfaXNfbWFpbl9mcmFtZShmcmFtZSkpOworCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgdGVzdFVSSShXZWJLaXRXZWJFeHRlbnNp
b24qIGV4dGVuc2lvbiwgR1ZhcmlhbnQqIGFyZ3MpCisgICAgeworICAgICAgICBXZWJLaXRXZWJQ
YWdlKiBwYWdlID0gd2Via2l0X3dlYl9leHRlbnNpb25fZ2V0X3BhZ2UoZXh0ZW5zaW9uLCB3ZWJQ
YWdlRnJvbUFyZ3MoYXJncykpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfV0VCX1BBR0Uo
cGFnZSkpOworCisgICAgICAgIFdlYktpdEZyYW1lKiBmcmFtZSA9IHdlYmtpdF93ZWJfcGFnZV9n
ZXRfbWFpbl9mcmFtZShwYWdlKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX0ZSQU1FKGZy
YW1lKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3BhZ2VfZ2V0X3VyaShw
YWdlKSwgPT0sIHdlYmtpdF9mcmFtZV9nZXRfdXJpKGZyYW1lKSk7CisKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgYm9vbCB0ZXN0SmF2YVNjcmlwdENvbnRleHQoV2ViS2l0V2Vi
RXh0ZW5zaW9uKiBleHRlbnNpb24sIEdWYXJpYW50KiBhcmdzKQorICAgIHsKKyAgICAgICAgV2Vi
S2l0V2ViUGFnZSogcGFnZSA9IHdlYmtpdF93ZWJfZXh0ZW5zaW9uX2dldF9wYWdlKGV4dGVuc2lv
biwgd2ViUGFnZUZyb21BcmdzKGFyZ3MpKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX1dF
Ql9QQUdFKHBhZ2UpKTsKKworICAgICAgICBXZWJLaXRGcmFtZSogZnJhbWUgPSB3ZWJraXRfd2Vi
X3BhZ2VfZ2V0X21haW5fZnJhbWUocGFnZSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19G
UkFNRShmcmFtZSkpOworICAgICAgICBnX2Fzc2VydCh3ZWJraXRfZnJhbWVfZ2V0X2phdmFzY3Jp
cHRfZ2xvYmFsX2NvbnRleHQoZnJhbWUpKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIGJvb2wgcnVuVGVzdChjb25zdCBjaGFyKiB0ZXN0TmFtZSwgV2ViS2l0
V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24sIEdWYXJpYW50KiBhcmdzKQorICAgIHsKKyAgICAgICAg
aWYgKCFzdHJjbXAodGVzdE5hbWUsICJtYWluLWZyYW1lIikpCisgICAgICAgICAgICByZXR1cm4g
dGVzdE1haW5GcmFtZShleHRlbnNpb24sIGFyZ3MpOworICAgICAgICBpZiAoIXN0cmNtcCh0ZXN0
TmFtZSwgInVyaSIpKQorICAgICAgICAgICAgcmV0dXJuIHRlc3RVUkkoZXh0ZW5zaW9uLCBhcmdz
KTsKKyAgICAgICAgaWYgKCFzdHJjbXAodGVzdE5hbWUsICJqYXZhc2NyaXB0LWNvbnRleHQiKSkK
KyAgICAgICAgICAgIHJldHVybiB0ZXN0SmF2YVNjcmlwdENvbnRleHQoZXh0ZW5zaW9uLCBhcmdz
KTsKKworICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorfTsKKworc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXygoY29uc3RydWN0b3Ip
KSByZWdpc3RlclRlc3RzKCkKK3sKKyAgICBSRUdJU1RFUl9URVNUKFdlYktpdEZyYW1lVGVzdCwg
IldlYktpdEZyYW1lL21haW4tZnJhbWUiKTsKKyAgICBSRUdJU1RFUl9URVNUKFdlYktpdEZyYW1l
VGVzdCwgIldlYktpdEZyYW1lL3VyaSIpOworICAgIFJFR0lTVEVSX1RFU1QoV2ViS2l0RnJhbWVU
ZXN0LCAiV2ViS2l0RnJhbWUvamF2YXNjcmlwdC1jb250ZXh0Iik7Cit9CmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvSW5zcGVjdG9yVGVzdFNlcnZlci5j
cHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvSW5zcGVjdG9yVGVzdFNl
cnZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjEzYjA0MwotLS0g
L2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9JbnNw
ZWN0b3JUZXN0U2VydmVyLmNwcApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MgTHRkLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisg
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxndGsvZ3RrLmg+
CisjaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+CisKK3N0YXRpYyB2b2lkIGxvYWRDaGFuZ2Vk
Q2FsbGJhY2soV2ViS2l0V2ViVmlldyosIFdlYktpdExvYWRFdmVudCBsb2FkRXZlbnQsIGdwb2lu
dGVyKQoreworICAgIC8vIFNlbmQgYSBtZXNzYWdlIHRvIHRoZSBwYXJlbnQgcHJvY2VzcyB3aGVu
IHdlJ3JlIHJlYWR5LgorICAgIGlmIChsb2FkRXZlbnQgPT0gV0VCS0lUX0xPQURfRklOSVNIRUQp
CisgICAgICAgIGdfcHJpbnQoIk9LIik7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiog
YXJndikKK3sKKyAgICBndGtfaW5pdCgmYXJnYywgJmFyZ3YpOworCisgICAgLy8gT3ZlcndyaXRl
IFdFQktJVF9JTlNQRUNUT1JfU0VSVkVSIHZhcmlhYmxlIHdpdGggZGVmYXVsdCB2YWx1ZS4KKyAg
ICBnX3NldGVudigiV0VCS0lUX0lOU1BFQ1RPUl9TRVJWRVIiLCAiMTI3LjAuMC4xOjI5OTkiLCBU
UlVFKTsKKworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Vi
a2l0X3dlYl92aWV3X25ldygpKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9kZXZl
bG9wZXJfZXh0cmFzKHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmlldyksIFRSVUUp
OworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX2h0bWwod2ViVmlldywKKyAgICAgICAgIjxodG1s
Pjxib2R5PjxwPldlYktpdEdUSysgSW5zcGVjdG9yIFRlc3QgU2VydmVyPC9wPjwvYm9keT48L2h0
bWw+IiwKKyAgICAgICAgImh0dHA6Ly8xMjcuMC4wLjE6Mjk5OS8iKTsKKworICAgIEd0a1dpZGdl
dCogd2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7CisgICAgZ3Rr
X2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCBHVEtfV0lER0VUKHdlYlZpZXcp
KTsKKyAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7CisKKyAgICBnX3NpZ25hbF9jb25u
ZWN0KHdpbmRvdywgImRlbGV0ZS1ldmVudCIsIEdfQ0FMTEJBQ0soZ3RrX21haW5fcXVpdCksIDAp
OworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgImxvYWQtY2hhbmdlZCIsIEdfQ0FMTEJB
Q0sobG9hZENoYW5nZWRDYWxsYmFjayksIDApOworCisgICAgZ3RrX21haW4oKTsKK30KZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0QXV0aGVudGlj
YXRpb24uY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RBdXRo
ZW50aWNhdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRlNDIy
NQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0
ay9UZXN0QXV0aGVudGljYXRpb24uY3BwCkBAIC0wLDAgKzEsMjg2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
TG9hZFRyYWNraW5nVGVzdC5oIgorI2luY2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKKyNpbmNs
dWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisKK3N0YXRpYyBXZWJLaXRUZXN0U2VydmVyKiBr
U2VydmVyOworCitjbGFzcyBBdXRoZW50aWNhdGlvblRlc3Q6IHB1YmxpYyBMb2FkVHJhY2tpbmdU
ZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKEF1dGhlbnRpY2F0aW9u
VGVzdCk7CisKKyAgICBBdXRoZW50aWNhdGlvblRlc3QoKQorICAgIHsKKyAgICAgICAgZ19zaWdu
YWxfY29ubmVjdChtX3dlYlZpZXcsICJhdXRoZW50aWNhdGUiLCBHX0NBTExCQUNLKHJ1bkF1dGhl
bnRpY2F0aW9uQ2FsbGJhY2spLCB0aGlzKTsKKyAgICB9CisKKyAgICB+QXV0aGVudGljYXRpb25U
ZXN0KCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hl
ZChtX3dlYlZpZXcsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOworICAg
IH0KKworICAgIHN0YXRpYyBpbnQgYXV0aGVudGljYXRpb25SZXRyaWVzOworICAgIHN0YXRpYyBi
b29sIGF1dGhlbnRpY2F0aW9uQ2FuY2VsbGVkUmVjZWl2ZWQ7CisKKyAgICB2b2lkIGxvYWRVUkko
Y29uc3QgY2hhciogdXJpKQorICAgIHsKKyAgICAgICAgLy8gUmVzZXQgdGhlIHJldHJ5IGNvdW50
IG9mIHRoZSBmYWtlIHNlcnZlciB3aGVuIGEgcGFnZSBpcyBsb2FkZWQuCisgICAgICAgIGF1dGhl
bnRpY2F0aW9uUmV0cmllcyA9IDA7CisgICAgICAgIGF1dGhlbnRpY2F0aW9uQ2FuY2VsbGVkUmVj
ZWl2ZWQgPSBmYWxzZTsKKyAgICAgICAgTG9hZFRyYWNraW5nVGVzdDo6bG9hZFVSSSh1cmkpOwor
ICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBydW5BdXRoZW50aWNhdGlvbkNhbGxiYWNrKFdl
YktpdFdlYlZpZXcqLCBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QsIEF1dGhl
bnRpY2F0aW9uVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QocmVx
dWVzdCwgImNhbmNlbGxlZCIsIEdfQ0FMTEJBQ0soYXV0aGVudGljYXRpb25DYW5jZWxsZWRDYWxs
YmFjayksIHRlc3QpOworICAgICAgICB0ZXN0LT5ydW5BdXRoZW50aWNhdGlvbihyZXF1ZXN0KTsK
KyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgYXV0aGVudGlj
YXRpb25DYW5jZWxsZWRDYWxsYmFjayhXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqLCBBdXRo
ZW50aWNhdGlvblRlc3QqKQorICAgIHsKKyAgICAgICAgYXV0aGVudGljYXRpb25DYW5jZWxsZWRS
ZWNlaXZlZCA9IHRydWU7CisgICAgfQorCisgICAgdm9pZCBydW5BdXRoZW50aWNhdGlvbihXZWJL
aXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QpCisgICAgeworICAgICAgICBhc3NlcnRP
YmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHJlcXVlc3QpKTsKKyAgICAg
ICAgbV9hdXRoZW50aWNhdGlvblJlcXVlc3QgPSByZXF1ZXN0OworICAgICAgICBnX21haW5fbG9v
cF9xdWl0KG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVx
dWVzdCogd2FpdEZvckF1dGhlbnRpY2F0aW9uUmVxdWVzdCgpCisgICAgeworICAgICAgICBnX21h
aW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgICAgIHJldHVybiBtX2F1dGhlbnRpY2F0aW9u
UmVxdWVzdC5nZXQoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR1JlZlB0cjxXZWJLaXRBdXRo
ZW50aWNhdGlvblJlcXVlc3Q+IG1fYXV0aGVudGljYXRpb25SZXF1ZXN0OworfTsKKworaW50IEF1
dGhlbnRpY2F0aW9uVGVzdDo6YXV0aGVudGljYXRpb25SZXRyaWVzID0gMDsKK2Jvb2wgQXV0aGVu
dGljYXRpb25UZXN0OjphdXRoZW50aWNhdGlvbkNhbmNlbGxlZFJlY2VpdmVkID0gZmFsc2U7CisK
K3N0YXRpYyBjb25zdCBjaGFyIGF1dGhUZXN0VXNlcm5hbWVbXSA9ICJ1c2VybmFtZSI7CitzdGF0
aWMgY29uc3QgY2hhciBhdXRoVGVzdFBhc3N3b3JkW10gPSAicGFzc3dvcmQiOworc3RhdGljIGNv
bnN0IGNoYXIgYXV0aEV4cGVjdGVkU3VjY2Vzc1RpdGxlW10gPSAiV2ViS2l0Mkd0aysgQXV0aGVu
dGljYXRpb24gdGVzdCI7CitzdGF0aWMgY29uc3QgY2hhciBhdXRoRXhwZWN0ZWRGYWlsdXJlVGl0
bGVbXSA9ICI0MDEgQXV0aG9yaXphdGlvbiBSZXF1aXJlZCI7CitzdGF0aWMgY29uc3QgY2hhciBh
dXRoRXhwZWN0ZWRBdXRob3JpemF0aW9uW10gPSAiQmFzaWMgZFhObGNtNWhiV1U2Y0dGemMzZHZj
bVE9IjsgLy8gQmFzZTY0IGVuY29kaW5nIG9mICJ1c2VybmFtZTpwYXNzd29yZCIuCitzdGF0aWMg
Y29uc3QgY2hhciBhdXRoU3VjY2Vzc0hUTUxTdHJpbmdbXSA9CisgICAgIjxodG1sPiIKKyAgICAi
PGhlYWQ+PHRpdGxlPldlYktpdDJHdGsrIEF1dGhlbnRpY2F0aW9uIHRlc3Q8L3RpdGxlPjwvaGVh
ZD4iCisgICAgIjxib2R5PjwvYm9keT48L2h0bWw+IjsKK3N0YXRpYyBjb25zdCBjaGFyIGF1dGhG
YWlsdXJlSFRNTFN0cmluZ1tdID0KKyAgICAiPGh0bWw+IgorICAgICI8aGVhZD48dGl0bGU+NDAx
IEF1dGhvcml6YXRpb24gUmVxdWlyZWQ8L3RpdGxlPjwvaGVhZD4iCisgICAgIjxib2R5PjwvYm9k
eT48L2h0bWw+IjsKKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvblJlcXVl
c3QoQXV0aGVudGljYXRpb25UZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIC8vIFRl
c3QgYXV0aGVudGljYXRpb24gcmVxdWVzdCBnZXR0ZXJzIG1hdGNoIHNvdXAgYXV0aGVudGljYXRp
b24gaGVhZGVyLgorICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2F1
dGgtdGVzdC5odG1sIikuZGF0YSgpKTsKKyAgICBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3Qq
IHJlcXVlc3QgPSB0ZXN0LT53YWl0Rm9yQXV0aGVudGljYXRpb25SZXF1ZXN0KCk7CisgICAgZ19h
c3NlcnRfY21wc3RyKHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9ob3N0KHJlcXVl
c3QpLCA9PSwgc291cF91cmlfZ2V0X2hvc3Qoa1NlcnZlci0+YmFzZVVSSSgpKSk7CisgICAgZ19h
c3NlcnRfY21wdWludCh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcG9ydChyZXF1
ZXN0KSwgPT0sIHNvdXBfdXJpX2dldF9wb3J0KGtTZXJ2ZXItPmJhc2VVUkkoKSkpOworICAgIGdf
YXNzZXJ0X2NtcHN0cih3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcmVhbG0ocmVx
dWVzdCksID09LCAibXkgcmVhbG0iKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfYXV0aGVudGljYXRp
b25fcmVxdWVzdF9nZXRfc2NoZW1lKHJlcXVlc3QpID09IFdFQktJVF9BVVRIRU5USUNBVElPTl9T
Q0hFTUVfSFRUUF9CQVNJQyk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9hdXRoZW50aWNhdGlvbl9y
ZXF1ZXN0X2lzX2Zvcl9wcm94eShyZXF1ZXN0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9hdXRo
ZW50aWNhdGlvbl9yZXF1ZXN0X2lzX3JldHJ5KHJlcXVlc3QpKTsKK30KKworc3RhdGljIHZvaWQg
dGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvbkNhbmNlbChBdXRoZW50aWNhdGlvblRlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8gVGVzdCBjYW5jZWwuCisgICAgdGVzdC0+bG9hZFVS
SShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvYXV0aC10ZXN0Lmh0bWwiKS5kYXRhKCkpOworICAg
IFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCA9IHRlc3QtPndhaXRGb3JBdXRo
ZW50aWNhdGlvblJlcXVlc3QoKTsKKyAgICB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9j
YW5jZWwocmVxdWVzdCk7CisgICAgLy8gU2VydmVyIGRvZXNuJ3QgYXNrIGZvciBuZXcgY3JlZGVu
dGlhbHMuCisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0sIDMpOworICAgIGdfYXNzZXJ0
X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92
aXNpb25hbExvYWRTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZl
bnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkRmFpbGVkKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5n
VGVzdDo6TG9hZEZpbmlzaGVkKTsKKworICAgIGdfYXNzZXJ0X2Vycm9yKHRlc3QtPm1fZXJyb3Iu
Z2V0KCksIFdFQktJVF9ORVRXT1JLX0VSUk9SLCBXRUJLSVRfTkVUV09SS19FUlJPUl9DQU5DRUxM
RUQpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uTG9hZENhbmNl
bGxlZChBdXRoZW50aWNhdGlvblRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVz
dC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvYXV0aC10ZXN0Lmh0bWwiKS5kYXRh
KCkpOworICAgIHRlc3QtPndhaXRGb3JBdXRoZW50aWNhdGlvblJlcXVlc3QoKTsKKyAgICB3ZWJr
aXRfd2ViX3ZpZXdfc3RvcF9sb2FkaW5nKHRlc3QtPm1fd2ViVmlldyk7CisgICAgLy8gRXhwZWN0
IGVtcHR5IHBhZ2UuCisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZ19h
c3NlcnQodGVzdC0+YXV0aGVudGljYXRpb25DYW5jZWxsZWRSZWNlaXZlZCk7CisKKyAgICBnX2Fz
c2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0sIDMpOworICAgIGdfYXNz
ZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQ
cm92aXNpb25hbExvYWRTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2Fk
RXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkRmFpbGVkKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNr
aW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKKworICAgIGdfYXNzZXJ0X2Vycm9yKHRlc3QtPm1fZXJy
b3IuZ2V0KCksIFdFQktJVF9ORVRXT1JLX0VSUk9SLCBXRUJLSVRfTkVUV09SS19FUlJPUl9DQU5D
RUxMRUQpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uRmFpbHVy
ZShBdXRoZW50aWNhdGlvblRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8gVGVz
dCBhdXRoZW50aWNhdGlvbiBmYWlsdXJlcy4KKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdl
dFVSSUZvclBhdGgoIi9hdXRoLXRlc3QuaHRtbCIpLmRhdGEoKSk7CisgICAgV2ViS2l0QXV0aGVu
dGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0ID0gdGVzdC0+d2FpdEZvckF1dGhlbnRpY2F0aW9uUmVx
dWVzdCgpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9pc19y
ZXRyeShyZXF1ZXN0KSk7CisgICAgV2ViS2l0Q3JlZGVudGlhbCogY3JlZGVudGlhbCA9IHdlYmtp
dF9jcmVkZW50aWFsX25ldyhhdXRoVGVzdFVzZXJuYW1lLCAid3JvbmdwYXNzd29yZCIsIFdFQktJ
VF9DUkVERU5USUFMX1BFUlNJU1RFTkNFX05PTkUpOworICAgIHdlYmtpdF9hdXRoZW50aWNhdGlv
bl9yZXF1ZXN0X2F1dGhlbnRpY2F0ZShyZXF1ZXN0LCBjcmVkZW50aWFsKTsKKyAgICB3ZWJraXRf
Y3JlZGVudGlhbF9mcmVlKGNyZWRlbnRpYWwpOworICAgIC8vIEV4cGVjdCBhIHNlY29uZCBhdXRo
ZW50aWNhdGlvbiByZXF1ZXN0LgorICAgIHJlcXVlc3QgPSB0ZXN0LT53YWl0Rm9yQXV0aGVudGlj
YXRpb25SZXF1ZXN0KCk7CisgICAgZ19hc3NlcnQod2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVl
c3RfaXNfcmV0cnkocmVxdWVzdCkpOworICAgIC8vIFRlc3Qgc2Vjb25kIGZhaWx1cmUuCisgICAg
Y3JlZGVudGlhbCA9IHdlYmtpdF9jcmVkZW50aWFsX25ldyhhdXRoVGVzdFVzZXJuYW1lLCAid3Jv
bmdwYXNzd29yZDIiLCBXRUJLSVRfQ1JFREVOVElBTF9QRVJTSVNURU5DRV9OT05FKTsKKyAgICB3
ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9hdXRoZW50aWNhdGUocmVxdWVzdCwgY3JlZGVu
dGlhbCk7CisgICAgd2Via2l0X2NyZWRlbnRpYWxfZnJlZShjcmVkZW50aWFsKTsKKyAgICAvLyBF
eHBlY3QgYXV0aGVudGljYXRpb24gZmFpbGVkIHBhZ2UuCisgICAgdGVzdC0+d2FpdFVudGlsTG9h
ZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzLnNp
emUoKSwgPT0sIDMpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMF0s
ID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6
TG9hZENvbW1pdHRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1sy
XSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7CisgICAgZ19hc3NlcnRfY21w
c3RyKHdlYmtpdF93ZWJfdmlld19nZXRfdGl0bGUodGVzdC0+bV93ZWJWaWV3KSwgPT0sIGF1dGhF
eHBlY3RlZEZhaWx1cmVUaXRsZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3QXV0aGVu
dGljYXRpb25Ob0NyZWRlbnRpYWwoQXV0aGVudGljYXRpb25UZXN0KiB0ZXN0LCBnY29uc3Rwb2lu
dGVyKQoreworICAgIC8vIFRlc3QgY29udGludWUgd2l0aG91dCBjcmVkZW50aWFscy4KKyAgICB0
ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9hdXRoLXRlc3QuaHRtbCIpLmRh
dGEoKSk7CisgICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0ID0gdGVzdC0+
d2FpdEZvckF1dGhlbnRpY2F0aW9uUmVxdWVzdCgpOworICAgIHdlYmtpdF9hdXRoZW50aWNhdGlv
bl9yZXF1ZXN0X2F1dGhlbnRpY2F0ZShyZXF1ZXN0LCAwKTsKKyAgICAvLyBTZXJ2ZXIgZG9lc24n
dCBhc2sgZm9yIG5ldyBjcmVkZW50aWFscy4KKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNo
ZWQoKTsKKworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHMuc2l6ZSgpLCA9
PSwgMyk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1swXSwgPT0sIExv
YWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2Nt
cGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkQ29t
bWl0dGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzJdLCA9PSwg
TG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Vi
a2l0X3dlYl92aWV3X2dldF90aXRsZSh0ZXN0LT5tX3dlYlZpZXcpLCA9PSwgYXV0aEV4cGVjdGVk
RmFpbHVyZVRpdGxlKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlv
blN0b3JhZ2UoQXV0aGVudGljYXRpb25UZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAg
IC8vIEVuYWJsZSBwcml2YXRlIGJyb3dzaW5nIGJlZm9yZSBhdXRoZW50aWNhdGlvbiByZXF1ZXN0
IHRvIHRlc3QgdGhhdCBjcmVkZW50aWFscyBjYW4ndCBiZSBzYXZlZC4KKyAgICB3ZWJraXRfc2V0
dGluZ3Nfc2V0X2VuYWJsZV9wcml2YXRlX2Jyb3dzaW5nKHdlYmtpdF93ZWJfdmlld19nZXRfc2V0
dGluZ3ModGVzdC0+bV93ZWJWaWV3KSwgVFJVRSk7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVy
LT5nZXRVUklGb3JQYXRoKCIvYXV0aC10ZXN0Lmh0bWwiKS5kYXRhKCkpOworICAgIFdlYktpdEF1
dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCA9IHRlc3QtPndhaXRGb3JBdXRoZW50aWNhdGlv
blJlcXVlc3QoKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3Rf
Z2V0X3Byb3Bvc2VkX2NyZWRlbnRpYWwocmVxdWVzdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRf
YXV0aGVudGljYXRpb25fcmVxdWVzdF9jYW5fc2F2ZV9jcmVkZW50aWFscyhyZXF1ZXN0KSk7CisK
KyAgICAvLyBJZiBXZWJLaXQgaGFzIGJlZW4gY29tcGlsZWQgd2l0aCBsaWJzZWNyZXQsIGFuZCBw
cml2YXRlIGJyb3dzaW5nIGlzIGRpc2FibGVkCisgICAgLy8gdGhlbiBjaGVjayB0aGF0IGNyZWRl
bnRpYWxzIGNhbiBiZSBzYXZlZC4KKyNpZiBFTkFCTEUoQ1JFREVOVElBTF9TVE9SQUdFKQorICAg
IHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX3ByaXZhdGVfYnJvd3Npbmcod2Via2l0X3dlYl92
aWV3X2dldF9zZXR0aW5ncyh0ZXN0LT5tX3dlYlZpZXcpLCBGQUxTRSk7CisgICAgdGVzdC0+bG9h
ZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvYXV0aC10ZXN0Lmh0bWwiKS5kYXRhKCkpOwor
ICAgIHJlcXVlc3QgPSB0ZXN0LT53YWl0Rm9yQXV0aGVudGljYXRpb25SZXF1ZXN0KCk7CisgICAg
Z19hc3NlcnQoIXdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9wcm9wb3NlZF9jcmVk
ZW50aWFsKHJlcXVlc3QpKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVx
dWVzdF9jYW5fc2F2ZV9jcmVkZW50aWFscyhyZXF1ZXN0KSk7CisjZW5kaWYKK30KKworc3RhdGlj
IHZvaWQgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvblN1Y2Nlc3MoQXV0aGVudGljYXRpb25UZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIC8vIFRlc3QgY29ycmVjdCBhdXRoZW50aWNh
dGlvbi4KKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9hdXRoLXRl
c3QuaHRtbCIpLmRhdGEoKSk7CisgICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1
ZXN0ID0gdGVzdC0+d2FpdEZvckF1dGhlbnRpY2F0aW9uUmVxdWVzdCgpOworICAgIFdlYktpdENy
ZWRlbnRpYWwqIGNyZWRlbnRpYWwgPSB3ZWJraXRfY3JlZGVudGlhbF9uZXcoYXV0aFRlc3RVc2Vy
bmFtZSwgYXV0aFRlc3RQYXNzd29yZCwgV0VCS0lUX0NSRURFTlRJQUxfUEVSU0lTVEVOQ0VfRk9S
X1NFU1NJT04pOworICAgIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2F1dGhlbnRpY2F0
ZShyZXF1ZXN0LCBjcmVkZW50aWFsKTsKKyAgICB3ZWJraXRfY3JlZGVudGlhbF9mcmVlKGNyZWRl
bnRpYWwpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgZ19hc3Nl
cnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50cy5zaXplKCksID09LCAzKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJv
dmlzaW9uYWxMb2FkU3RhcnRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2
ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRDb21taXR0ZWQpOworICAgIGdfYXNz
ZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMl0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpM
b2FkRmluaXNoZWQpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3Rp
dGxlKHRlc3QtPm1fd2ViVmlldyksID09LCBhdXRoRXhwZWN0ZWRTdWNjZXNzVGl0bGUpOworCisg
ICAgLy8gVGVzdCBsb2FkaW5nIHRoZSBzYW1lIChhdXRob3JpemVkKSBwYWdlIGFnYWluLgorICAg
IHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2F1dGgtdGVzdC5odG1sIiku
ZGF0YSgpKTsKKyAgICAvLyBUaGVyZSBpcyBubyBhdXRoZW50aWNhdGlvbiBjaGFsbGVuZ2UuCisg
ICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQo
dGVzdC0+bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0sIDMpOworICAgIGdfYXNzZXJ0X2NtcGludCh0
ZXN0LT5tX2xvYWRFdmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExv
YWRTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzFdLCA9
PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZENvbW1pdHRlZCk7CisgICAgZ19hc3NlcnRfY21waW50
KHRlc3QtPm1fbG9hZEV2ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hl
ZCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRfdGl0bGUodGVzdC0+
bV93ZWJWaWV3KSwgPT0sIGF1dGhFeHBlY3RlZFN1Y2Nlc3NUaXRsZSk7Cit9CisKK3N0YXRpYyB2
b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29u
c3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSosIFNvdXBDbGllbnRDb250ZXh0Kiwgdm9pZCopCit7
CisgICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKKyAgICAgICAg
c291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVO
VEVEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghc3RyY21wKHBhdGgsICIv
YXV0aC10ZXN0Lmh0bWwiKSkgeworICAgICAgICBjb25zdCBjaGFyKiBhdXRob3JpemF0aW9uID0g
c291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X29uZShtZXNzYWdlLT5yZXF1ZXN0X2hlYWRlcnMsICJB
dXRob3JpemF0aW9uIik7CisgICAgICAgIC8vIFJlcXVpcmUgYXV0aGVudGljYXRpb24uCisgICAg
ICAgIGlmICghZ19zdHJjbXAwKGF1dGhvcml6YXRpb24sIGF1dGhFeHBlY3RlZEF1dGhvcml6YXRp
b24pKSB7CisgICAgICAgICAgICAvLyBTdWNjZXNzZnVsIGF1dGhlbnRpY2F0aW9uLgorICAgICAg
ICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOwor
ICAgICAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2Jv
ZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgYXV0aFN1Y2Nlc3NIVE1MU3RyaW5nLCBzdHJsZW4oYXV0
aFN1Y2Nlc3NIVE1MU3RyaW5nKSk7CisgICAgICAgICAgICBBdXRoZW50aWNhdGlvblRlc3Q6OmF1
dGhlbnRpY2F0aW9uUmV0cmllcyA9IDA7CisgICAgICAgIH0gZWxzZSBpZiAoKytBdXRoZW50aWNh
dGlvblRlc3Q6OmF1dGhlbnRpY2F0aW9uUmV0cmllcyA8IDMpIHsKKyAgICAgICAgICAgIC8vIE5v
IG9yIGludmFsaWQgYXV0aG9yaXphdGlvbiBoZWFkZXIgcHJvdmlkZWQgYnkgdGhlIGNsaWVudCwg
cmVxdWVzdCBhdXRoZW50aWNhdGlvbiB0d2ljZSB0aGVuIGZhaWwuCisgICAgICAgICAgICBzb3Vw
X21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19VTkFVVEhPUklaRUQpOwor
ICAgICAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNl
X2hlYWRlcnMsICJXV1ctQXV0aGVudGljYXRlIiwgIkJhc2ljIHJlYWxtPVwibXkgcmVhbG1cIiIp
OworICAgICAgICAgICAgLy8gSW5jbHVkZSBhIGZhaWx1cmUgbWVzc2FnZSBpbiBjYXNlIHRoZSB1
c2VyIGF0dGVtcHRzIHRvIHByb2NlZWQgd2l0aG91dCBhdXRoZW50aWNhdGlvbi4KKyAgICAgICAg
ICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQ
X01FTU9SWV9TVEFUSUMsIGF1dGhGYWlsdXJlSFRNTFN0cmluZywgc3RybGVuKGF1dGhGYWlsdXJl
SFRNTFN0cmluZykpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gQXV0aGVudGlj
YXRpb24gbm90IHN1Y2Nlc3NmdWwsIGRpc3BsYXkgYSAiNDAxIEF1dGhvcml6YXRpb24gUmVxdWly
ZWQiIHBhZ2UuCisgICAgICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBT
T1VQX1NUQVRVU19PSyk7CisgICAgICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVz
c2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBhdXRoRmFpbHVyZUhUTUxT
dHJpbmcsIHN0cmxlbihhdXRoRmFpbHVyZUhUTUxTdHJpbmcpKTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZQorICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRV
U19OT1RfRk9VTkQpOworCisgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+
cmVzcG9uc2VfYm9keSk7Cit9CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICBrU2VydmVyID0g
bmV3IFdlYktpdFRlc3RTZXJ2ZXIoKTsKKyAgICBrU2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2sp
OworCisgICAgQXV0aGVudGljYXRpb25UZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiYXV0aGVu
dGljYXRpb24tcmVxdWVzdCIsIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25SZXF1ZXN0KTsKKyAg
ICBBdXRoZW50aWNhdGlvblRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJhdXRoZW50aWNhdGlv
bi1jYW5jZWwiLCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uQ2FuY2VsKTsKKyAgICBBdXRoZW50
aWNhdGlvblRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJhdXRoZW50aWNhdGlvbi1sb2FkLWNh
bmNlbGxlZCIsIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25Mb2FkQ2FuY2VsbGVkKTsKKyAgICBB
dXRoZW50aWNhdGlvblRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJhdXRoZW50aWNhdGlvbi1m
YWlsdXJlIiwgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvbkZhaWx1cmUpOworICAgIEF1dGhlbnRp
Y2F0aW9uVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImF1dGhlbnRpY2F0aW9uLW5vLWNyZWRl
bnRpYWwiLCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uTm9DcmVkZW50aWFsKTsKKyAgICBBdXRo
ZW50aWNhdGlvblRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJhdXRoZW50aWNhdGlvbi1zdG9y
YWdlIiwgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvblN0b3JhZ2UpOworICAgIC8vIFRlc3Rpbmcg
YXV0aGVudGljYXRpb24gc3VjY2VzcyBtdXN0IGJlIGRvbmUgbGFzdCBiZWNhdXNlIGxpYnNvdXAg
d2lsbCBuZXZlciBmaXJlCisgICAgLy8gdGhlIGF1dGhlbnRpY2F0ZSBzaWduYWwgYWdhaW4gb25j
ZSBhdXRoZW50aWNhdGlvbiBpcyBzdWNjZXNzZnVsLgorICAgIEF1dGhlbnRpY2F0aW9uVGVzdDo6
YWRkKCJXZWJLaXRXZWJWaWV3IiwgImF1dGhlbnRpY2F0aW9uLXN1Y2Nlc3MiLCB0ZXN0V2ViVmll
d0F1dGhlbnRpY2F0aW9uU3VjY2Vzcyk7Cit9CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworICAgIGRl
bGV0ZSBrU2VydmVyOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyR3RrL1Rlc3RCYWNrRm9yd2FyZExpc3QuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXQyR3RrL1Rlc3RCYWNrRm9yd2FyZExpc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmI0NzkzNjYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdEJhY2tGb3J3YXJkTGlzdC5jcHAKQEAgLTAs
MCArMSwyODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5oIgorI2luY2x1ZGUg
IldlYlZpZXdUZXN0LmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPGxpYnNvdXAv
c291cC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5o
PgorCisvLyBCYWNrIGZvcndhcmQgbGlzdCBsaW1pdCBpcyAxMDAgYnkgZGVmYXVsdC4KK3N0YXRp
YyBjb25zdCBpbnQga0JhY2tGb3J3YXJkTGlzdExpbWl0ID0gMTAwOworCitzdGF0aWMgV2ViS2l0
VGVzdFNlcnZlcioga1NlcnZlcjsKKworc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNl
cnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbXNnLCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRh
YmxlKiBxdWVyeSwgU291cENsaWVudENvbnRleHQqIGNvbnRleHQsIGdwb2ludGVyIGRhdGEpCit7
CisgICAgaWYgKG1zZy0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgeworICAgICAgICBzb3Vw
X21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZ19zdHJfaGFzX3N1ZmZpeChwYXRoLCAi
ZmF2aWNvbi5pY28iKSkgeworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2csIFNP
VVBfU1RBVFVTX05PVF9GT1VORCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzb3Vw
X21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX09LKTsKKworICAgIGNoYXIqIGJv
ZHkgPSBnX3N0cmR1cF9wcmludGYoIjxodG1sPjx0aXRsZT4lczwvdGl0bGU+PGJvZHk+JXM8L2Jv
ZHk+PC9odG1sPiIsIHBhdGggKyAxLCBwYXRoICsgMSk7CisgICAgc291cF9tZXNzYWdlX2JvZHlf
YXBwZW5kKG1zZy0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgYm9keSwgc3RybGVu
KGJvZHkpKTsKKworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1zZy0+cmVzcG9uc2Vf
Ym9keSk7Cit9CisKK2NsYXNzIEJhY2tGb3J3YXJkTGlzdFRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVz
dCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShCYWNrRm9yd2FyZExpc3RU
ZXN0KTsKKworICAgIGVudW0geworICAgICAgICBCYWNrd2FyZCwKKyAgICAgICAgRm9yd2FyZAor
ICAgIH07CisKKyAgICBlbnVtIHsKKyAgICAgICAgQ3VycmVudEl0ZW0gID0gMSA8PCAwLAorICAg
ICAgICBBZGRlZEl0ZW0gICAgPSAxIDw8IDEsCisgICAgICAgIFJlbW92ZWRJdGVtcyA9IDEgPDwg
MgorICAgIH07CisKKyAgICBzdGF0aWMgdm9pZCBjaGVja0l0ZW0oV2ViS2l0QmFja0ZvcndhcmRM
aXN0SXRlbSogaXRlbSwgY29uc3QgY2hhciogdGl0bGUsIGNvbnN0IGNoYXIqIHVyaSwgY29uc3Qg
Y2hhciogb3JpZ2luYWxVUkkpCisgICAgeworICAgICAgICBnX2Fzc2VydChpdGVtKTsKKyAgICAg
ICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dldF91cmko
aXRlbSksID09LCB1cmkpOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2JhY2tfZm9y
d2FyZF9saXN0X2l0ZW1fZ2V0X3RpdGxlKGl0ZW0pLCA9PSAsIHRpdGxlKTsKKyAgICAgICAgZ19h
c3NlcnRfY21wc3RyKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dldF9vcmlnaW5hbF91
cmkoaXRlbSksID09LCBvcmlnaW5hbFVSSSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgY2hl
Y2tJdGVtSW5kZXgoV2ViS2l0QmFja0ZvcndhcmRMaXN0KiBsaXN0KQorICAgIHsKKyAgICAgICAg
Z19hc3NlcnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9udGhfaXRlbShsaXN0LCAtMSkg
PT0gd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2l0ZW0obGlzdCkpOworICAgICAg
ICBnX2Fzc2VydCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X250aF9pdGVtKGxpc3QsIDAp
ID09IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKGxpc3QpKTsKKyAg
ICAgICAgZ19hc3NlcnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9udGhfaXRlbShsaXN0
LCAxKSA9PSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRlbShsaXN0KSk7
CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgY2hlY2tMaXN0KFdlYktpdEJhY2tGb3J3YXJkTGlz
dCogbGlzdCwgdW5zaWduZWQgdHlwZSwgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSoqIGl0ZW1z
LCB1bnNpZ25lZCBuSXRlbXMpCisgICAgeworICAgICAgICBHTGlzdCogbGlzdEl0ZW1zID0gdHlw
ZSA9PSBCYWNrRm9yd2FyZExpc3RUZXN0OjpCYWNrd2FyZCA/IHdlYmtpdF9iYWNrX2ZvcndhcmRf
bGlzdF9nZXRfYmFja19saXN0KGxpc3QpIDoKKyAgICAgICAgICAgIHdlYmtpdF9iYWNrX2Zvcndh
cmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0KGxpc3QpOworICAgICAgICBnX2Fzc2VydChsaXN0SXRl
bXMpOworCisgICAgICAgIHVuc2lnbmVkIGkgPSAwOworICAgICAgICBmb3IgKEdMaXN0KiBsaXN0
SXRlbSA9IGxpc3RJdGVtczsgbGlzdEl0ZW07IGxpc3RJdGVtID0gZ19saXN0X25leHQobGlzdEl0
ZW0pLCBpKyspIHsKKyAgICAgICAgICAgIGdfYXNzZXJ0X2NtcHVpbnQoaSwgPCwgbkl0ZW1zKTsK
KyAgICAgICAgICAgIGdfYXNzZXJ0KGxpc3RJdGVtLT5kYXRhID09IGl0ZW1zW2ldKTsKKyAgICAg
ICAgfQorICAgICAgICBnX2xpc3RfZnJlZShsaXN0SXRlbXMpOworICAgIH0KKworICAgIHN0YXRp
YyB2b2lkIGJhY2tGb3J3YXJkTGlzdENoYW5nZWQoV2ViS2l0QmFja0ZvcndhcmRMaXN0KiBsaXN0
LCBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiBhZGRlZEl0ZW0sIEdMaXN0KiByZW1vdmVkSXRl
bXMsIEJhY2tGb3J3YXJkTGlzdFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT5tX2hh
c0NoYW5nZWQgPSB0cnVlOworCisgICAgICAgIGlmICh0ZXN0LT5tX2NoYW5nZWRGbGFncyAmIEJh
Y2tGb3J3YXJkTGlzdFRlc3Q6OkFkZGVkSXRlbSkgeworICAgICAgICAgICAgZ19hc3NlcnQoV0VC
S0lUX0lTX0JBQ0tfRk9SV0FSRF9MSVNUX0lURU0oYWRkZWRJdGVtKSk7CisgICAgICAgICAgICB0
ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKGFkZGVk
SXRlbSkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGdfYXNzZXJ0KCFhZGRlZEl0ZW0p
OworCisgICAgICAgIGlmICh0ZXN0LT5tX2NoYW5nZWRGbGFncyAmIEJhY2tGb3J3YXJkTGlzdFRl
c3Q6OlJlbW92ZWRJdGVtcykgeworICAgICAgICAgICAgZ19hc3NlcnQocmVtb3ZlZEl0ZW1zKTsK
KyAgICAgICAgICAgIGZvciAoR0xpc3QqIGl0ZXIgPSByZW1vdmVkSXRlbXM7IGl0ZXI7IGl0ZXIg
PSBpdGVyLT5uZXh0KSB7CisgICAgICAgICAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX0JBQ0tf
Rk9SV0FSRF9MSVNUX0lURU0oaXRlci0+ZGF0YSkpOworICAgICAgICAgICAgICAgIGlmICh0ZXN0
LT5tX2V4cGVjdGVkUmVtb3ZlZEl0ZW1zKQorICAgICAgICAgICAgICAgICAgICBnX2Fzc2VydChn
X2xpc3RfZmluZCh0ZXN0LT5tX2V4cGVjdGVkUmVtb3ZlZEl0ZW1zLCBpdGVyLT5kYXRhKSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBnX2Fzc2VydCghcmVt
b3ZlZEl0ZW1zKTsKKyAgICB9CisKKyAgICBCYWNrRm9yd2FyZExpc3RUZXN0KCkKKyAgICAgICAg
OiBtX2xpc3Qod2Via2l0X3dlYl92aWV3X2dldF9iYWNrX2ZvcndhcmRfbGlzdChtX3dlYlZpZXcp
KQorICAgICAgICAsIG1fY2hhbmdlZEZsYWdzKDApCisgICAgICAgICwgbV9oYXNDaGFuZ2VkKGZh
bHNlKQorICAgICAgICAsIG1fZXhwZWN0ZWRSZW1vdmVkSXRlbXMoMCkKKyAgICB7CisgICAgICAg
IGdfc2lnbmFsX2Nvbm5lY3QobV9saXN0LCAiY2hhbmdlZCIsIEdfQ0FMTEJBQ0soYmFja0Zvcndh
cmRMaXN0Q2hhbmdlZCksIHRoaXMpOworICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVu
VGVzdEZpbmlzaGVzKEdfT0JKRUNUKG1fbGlzdCkpOworICAgIH0KKworICAgIH5CYWNrRm9yd2Fy
ZExpc3RUZXN0KCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3Rf
bWF0Y2hlZChtX2xpc3QsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOwor
ICAgIH0KKworICAgIHZvaWQgd2FpdFVudGlsTG9hZEZpbmlzaGVkKCkKKyAgICB7CisgICAgICAg
IG1faGFzQ2hhbmdlZCA9IGZhbHNlOworICAgICAgICBXZWJWaWV3VGVzdDo6d2FpdFVudGlsTG9h
ZEZpbmlzaGVkKCk7CisgICAgICAgIGdfYXNzZXJ0KG1faGFzQ2hhbmdlZCk7CisgICAgfQorCisg
ICAgdm9pZCB3YWl0VW50aWxMb2FkRmluaXNoZWRBbmRDaGVja1JlbW92ZWRJdGVtcyhHTGlzdCog
cmVtb3ZlZEl0ZW1zKQorICAgIHsKKyAgICAgICAgbV9leHBlY3RlZFJlbW92ZWRJdGVtcyA9IHJl
bW92ZWRJdGVtczsKKyAgICAgICAgd2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgICAgIG1f
ZXhwZWN0ZWRSZW1vdmVkSXRlbXMgPSAwOworICAgIH0KKworICAgIFdlYktpdEJhY2tGb3J3YXJk
TGlzdCogbV9saXN0OworICAgIHVuc2lnbmVkIGxvbmcgbV9jaGFuZ2VkRmxhZ3M7CisgICAgYm9v
bCBtX2hhc0NoYW5nZWQ7CisgICAgR0xpc3QqIG1fZXhwZWN0ZWRSZW1vdmVkSXRlbXM7Cit9Owor
CitzdGF0aWMgdm9pZCB0ZXN0QmFja0ZvcndhcmRMaXN0TmF2aWdhdGlvbihCYWNrRm9yd2FyZExp
c3RUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIFdlYktpdEJhY2tGb3J3YXJkTGlz
dEl0ZW0qIGl0ZW1zWzFdOworCisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29f
YmFjayh0ZXN0LT5tX3dlYlZpZXcpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nh
bl9nb19mb3J3YXJkKHRlc3QtPm1fd2ViVmlldykpOworCisgICAgZ19hc3NlcnRfY21wdWludCh3
ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2xlbmd0aCh0ZXN0LT5tX2xpc3QpLCA9PSwgMCk7
CisgICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVt
KHRlc3QtPm1fbGlzdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3Rf
Z2V0X2JhY2tfaXRlbSh0ZXN0LT5tX2xpc3QpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tf
Zm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2l0ZW0odGVzdC0+bV9saXN0KSk7CisgICAgQmFja0Zv
cndhcmRMaXN0VGVzdDo6Y2hlY2tJdGVtSW5kZXgodGVzdC0+bV9saXN0KTsKKyAgICBnX2Fzc2Vy
dCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3QodGVzdC0+bV9saXN0KSk7
CisgICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0
KHRlc3QtPm1fbGlzdCkpOworCisgICAgQ1N0cmluZyB1cmlQYWdlMSA9IGtTZXJ2ZXItPmdldFVS
SUZvclBhdGgoIi9QYWdlMSIpOworICAgIHRlc3QtPm1fY2hhbmdlZEZsYWdzID0gQmFja0Zvcndh
cmRMaXN0VGVzdDo6Q3VycmVudEl0ZW0gfCBCYWNrRm9yd2FyZExpc3RUZXN0OjpBZGRlZEl0ZW07
CisgICAgdGVzdC0+bG9hZFVSSSh1cmlQYWdlMS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRp
bExvYWRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29f
YmFjayh0ZXN0LT5tX3dlYlZpZXcpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nh
bl9nb19mb3J3YXJkKHRlc3QtPm1fd2ViVmlldykpOworCisgICAgZ19hc3NlcnRfY21wdWludCh3
ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2xlbmd0aCh0ZXN0LT5tX2xpc3QpLCA9PSwgMSk7
CisgICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSogaXRlbVBhZ2UxID0gd2Via2l0X2JhY2tf
Zm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0odGVzdC0+bV9saXN0KTsKKyAgICBCYWNrRm9y
d2FyZExpc3RUZXN0OjpjaGVja0l0ZW0oaXRlbVBhZ2UxLCAiUGFnZTEiLCB1cmlQYWdlMS5kYXRh
KCksIHVyaVBhZ2UxLmRhdGEoKSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRf
bGlzdF9nZXRfYmFja19pdGVtKHRlc3QtPm1fbGlzdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRf
YmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRlbSh0ZXN0LT5tX2xpc3QpKTsKKyAgICBC
YWNrRm9yd2FyZExpc3RUZXN0OjpjaGVja0l0ZW1JbmRleCh0ZXN0LT5tX2xpc3QpOworICAgIGdf
YXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGlzdCh0ZXN0LT5tX2xp
c3QpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJk
X2xpc3QodGVzdC0+bV9saXN0KSk7CisKKyAgICBDU3RyaW5nIHVyaVBhZ2UyID0ga1NlcnZlci0+
Z2V0VVJJRm9yUGF0aCgiL1BhZ2UyIik7CisgICAgdGVzdC0+bV9jaGFuZ2VkRmxhZ3MgPSBCYWNr
Rm9yd2FyZExpc3RUZXN0OjpDdXJyZW50SXRlbSB8IEJhY2tGb3J3YXJkTGlzdFRlc3Q6OkFkZGVk
SXRlbTsKKyAgICB0ZXN0LT5sb2FkVVJJKHVyaVBhZ2UyLmRhdGEoKSk7CisgICAgdGVzdC0+d2Fp
dFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfY2Fu
X2dvX2JhY2sodGVzdC0+bV93ZWJWaWV3KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmll
d19jYW5fZ29fZm9yd2FyZCh0ZXN0LT5tX3dlYlZpZXcpKTsKKworICAgIGdfYXNzZXJ0X2NtcHVp
bnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9sZW5ndGgodGVzdC0+bV9saXN0KSwgPT0s
IDIpOworICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW1QYWdlMiA9IHdlYmtpdF9i
YWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKHRlc3QtPm1fbGlzdCk7CisgICAgQmFj
a0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tJdGVtKGl0ZW1QYWdlMiwgIlBhZ2UyIiwgdXJpUGFnZTIu
ZGF0YSgpLCB1cmlQYWdlMi5kYXRhKCkpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9iYWNrX2Zvcndh
cmRfbGlzdF9nZXRfYmFja19pdGVtKHRlc3QtPm1fbGlzdCkgPT0gaXRlbVBhZ2UxKTsKKyAgICBn
X2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2l0ZW0odGVzdC0+
bV9saXN0KSk7CisgICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tJdGVtSW5kZXgodGVzdC0+
bV9saXN0KTsKKyAgICBpdGVtc1swXSA9IGl0ZW1QYWdlMTsKKyAgICBCYWNrRm9yd2FyZExpc3RU
ZXN0OjpjaGVja0xpc3QodGVzdC0+bV9saXN0LCBCYWNrRm9yd2FyZExpc3RUZXN0OjpCYWNrd2Fy
ZCwgaXRlbXMsIDEpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0
X2ZvcndhcmRfbGlzdCh0ZXN0LT5tX2xpc3QpKTsKKworICAgIHRlc3QtPm1fY2hhbmdlZEZsYWdz
ID0gQmFja0ZvcndhcmRMaXN0VGVzdDo6Q3VycmVudEl0ZW07CisgICAgdGVzdC0+Z29CYWNrKCk7
CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCghd2Vi
a2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrKHRlc3QtPm1fd2ViVmlldykpOworICAgIGdfYXNzZXJ0
KHdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh0ZXN0LT5tX3dlYlZpZXcpKTsKKworICAg
IGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9sZW5ndGgodGVz
dC0+bV9saXN0KSwgPT0sIDIpOworICAgIGdfYXNzZXJ0KGl0ZW1QYWdlMSA9PSB3ZWJraXRfYmFj
a19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh0ZXN0LT5tX2xpc3QpKTsKKyAgICBCYWNr
Rm9yd2FyZExpc3RUZXN0OjpjaGVja0l0ZW0od2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9j
dXJyZW50X2l0ZW0odGVzdC0+bV9saXN0KSwgIlBhZ2UxIiwgdXJpUGFnZTEuZGF0YSgpLCB1cmlQ
YWdlMS5kYXRhKCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0
X2JhY2tfaXRlbSh0ZXN0LT5tX2xpc3QpKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfYmFja19mb3J3
YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRlbSh0ZXN0LT5tX2xpc3QpID09IGl0ZW1QYWdlMik7Cisg
ICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tJdGVtSW5kZXgodGVzdC0+bV9saXN0KTsKKyAg
ICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3QodGVzdC0+
bV9saXN0KSk7CisgICAgaXRlbXNbMF0gPSBpdGVtUGFnZTI7CisgICAgQmFja0ZvcndhcmRMaXN0
VGVzdDo6Y2hlY2tMaXN0KHRlc3QtPm1fbGlzdCwgQmFja0ZvcndhcmRMaXN0VGVzdDo6Rm9yd2Fy
ZCwgaXRlbXMsIDEpOworCisgICAgdGVzdC0+bV9jaGFuZ2VkRmxhZ3MgPSBCYWNrRm9yd2FyZExp
c3RUZXN0OjpDdXJyZW50SXRlbTsKKyAgICB0ZXN0LT5nb0ZvcndhcmQoKTsKKyAgICB0ZXN0LT53
YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19j
YW5fZ29fYmFjayh0ZXN0LT5tX3dlYlZpZXcpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92
aWV3X2Nhbl9nb19mb3J3YXJkKHRlc3QtPm1fd2ViVmlldykpOworCisgICAgZ19hc3NlcnRfY21w
dWludCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2xlbmd0aCh0ZXN0LT5tX2xpc3QpLCA9
PSwgMik7CisgICAgZ19hc3NlcnQoaXRlbVBhZ2UyID09IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlz
dF9nZXRfY3VycmVudF9pdGVtKHRlc3QtPm1fbGlzdCkpOworICAgIEJhY2tGb3J3YXJkTGlzdFRl
c3Q6OmNoZWNrSXRlbSh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh0
ZXN0LT5tX2xpc3QpLCAiUGFnZTIiLCB1cmlQYWdlMi5kYXRhKCksIHVyaVBhZ2UyLmRhdGEoKSk7
CisgICAgZ19hc3NlcnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2l0ZW0odGVz
dC0+bV9saXN0KSA9PSBpdGVtUGFnZTEpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3
YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRlbSh0ZXN0LT5tX2xpc3QpKTsKKyAgICBCYWNrRm9yd2Fy
ZExpc3RUZXN0OjpjaGVja0l0ZW1JbmRleCh0ZXN0LT5tX2xpc3QpOworICAgIGl0ZW1zWzBdID0g
aXRlbVBhZ2UxOworICAgIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OmNoZWNrTGlzdCh0ZXN0LT5tX2xp
c3QsIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OkJhY2t3YXJkLCBpdGVtcywgMSk7CisgICAgZ19hc3Nl
cnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0KHRlc3QtPm1fbGlz
dCkpOworCisgICAgdGVzdC0+bV9jaGFuZ2VkRmxhZ3MgPSBCYWNrRm9yd2FyZExpc3RUZXN0OjpD
dXJyZW50SXRlbTsKKyAgICB0ZXN0LT5nb1RvQmFja0ZvcndhcmRMaXN0SXRlbShpdGVtUGFnZTEp
OworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQoaXRl
bVBhZ2UxID09IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKHRlc3Qt
Pm1fbGlzdCkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0QmFja0ZvcndhcmRMaXN0TGltaXRBbmRD
YWNoZShCYWNrRm9yd2FyZExpc3RUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwga0JhY2tGb3J3YXJkTGlzdExpbWl0OyBpKyspIHsKKyAgICAgICAg
R093blB0cjxjaGFyPiBwYXRoKGdfc3RyZHVwX3ByaW50ZigiL1BhZ2UlZCIsIGkpKTsKKyAgICAg
ICAgdGVzdC0+bV9jaGFuZ2VkRmxhZ3MgPSBCYWNrRm9yd2FyZExpc3RUZXN0OjpDdXJyZW50SXRl
bSB8IEJhY2tGb3J3YXJkTGlzdFRlc3Q6OkFkZGVkSXRlbTsKKyAgICAgICAgdGVzdC0+bG9hZFVS
SShrU2VydmVyLT5nZXRVUklGb3JQYXRoKHBhdGguZ2V0KCkpLmRhdGEoKSk7CisgICAgICAgIHRl
c3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIH0KKworICAgIGdfYXNzZXJ0X2NtcHVp
bnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9sZW5ndGgodGVzdC0+bV9saXN0KSwgPT0s
IGtCYWNrRm9yd2FyZExpc3RMaW1pdCk7CisgICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSog
aXRlbVBhZ2VGaXJzdCA9IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbnRoX2l0ZW0odGVz
dC0+bV9saXN0LCAtKGtCYWNrRm9yd2FyZExpc3RMaW1pdCAtIDEpKTsKKyAgICBHT3duUHRyPEdM
aXN0PiByZW1vdmVkSXRlbXMoZ19saXN0X3ByZXBlbmQoMCwgaXRlbVBhZ2VGaXJzdCkpOworCisg
ICAgR093blB0cjxjaGFyPiBwYXRoKGdfc3RyZHVwX3ByaW50ZigiL1BhZ2UlZCIsIGtCYWNrRm9y
d2FyZExpc3RMaW1pdCkpOworICAgIHRlc3QtPm1fY2hhbmdlZEZsYWdzID0gQmFja0ZvcndhcmRM
aXN0VGVzdDo6Q3VycmVudEl0ZW0gfCBCYWNrRm9yd2FyZExpc3RUZXN0OjpBZGRlZEl0ZW0gfCBC
YWNrRm9yd2FyZExpc3RUZXN0OjpSZW1vdmVkSXRlbXM7CisgICAgdGVzdC0+bG9hZFVSSShrU2Vy
dmVyLT5nZXRVUklGb3JQYXRoKHBhdGguZ2V0KCkpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVu
dGlsTG9hZEZpbmlzaGVkQW5kQ2hlY2tSZW1vdmVkSXRlbXMocmVtb3ZlZEl0ZW1zLmdldCgpKTsK
KworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9sZW5n
dGgodGVzdC0+bV9saXN0KSwgPT0sIGtCYWNrRm9yd2FyZExpc3RMaW1pdCk7Cit9CisKK3ZvaWQg
YmVmb3JlQWxsKCkKK3sKKyAgICBrU2VydmVyID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIoKTsKKyAg
ICBrU2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2spOworCisgICAgQmFja0ZvcndhcmRMaXN0VGVz
dDo6YWRkKCJCYWNrRm9yd2FyZExpc3QiLCAibmF2aWdhdGlvbiIsIHRlc3RCYWNrRm9yd2FyZExp
c3ROYXZpZ2F0aW9uKTsKKyAgICBCYWNrRm9yd2FyZExpc3RUZXN0OjphZGQoIkJhY2tGb3J3YXJk
TGlzdCIsICJsaXN0LWxpbWl0LWFuZC1jYWNoZSIsIHRlc3RCYWNrRm9yd2FyZExpc3RMaW1pdEFu
ZENhY2hlKTsKK30KKwordm9pZCBhZnRlckFsbCgpCit7CisgICAgZGVsZXRlIGtTZXJ2ZXI7Cit9
CisKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0
Q29udGV4dE1lbnUuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rl
c3RDb250ZXh0TWVudS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIz
MjliOQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Mkd0ay9UZXN0Q29udGV4dE1lbnUuY3BwCkBAIC0wLDAgKzEsODY3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V2ViVmlld1Rlc3QuaCIKKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisKK2NsYXNz
IENvbnRleHRNZW51VGVzdDogcHVibGljIFdlYlZpZXdUZXN0IHsKK3B1YmxpYzoKKyAgICBlbnVt
IENvbnRleHRNZW51SXRlbVN0YXRlRmxhZ3MgeworICAgICAgICBWaXNpYmxlID0gMSA8PCAwLAor
ICAgICAgICBFbmFibGVkID0gMSA8PCAxLAorICAgICAgICBDaGVja2VkID0gMSA8PCAyCisgICAg
fTsKKworICAgIHZvaWQgY2hlY2tDb250ZXh0TWVudUV2ZW50KEdka0V2ZW50KiBldmVudCkKKyAg
ICB7CisgICAgICAgIGdfYXNzZXJ0KGV2ZW50KTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGV2
ZW50LT50eXBlLCA9PSwgR0RLX0JVVFRPTl9QUkVTUyk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudC0+YnV0dG9uLmJ1dHRvbiwgPT0sIDMpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQo
ZXZlbnQtPmJ1dHRvbi54LCA9PSwgbV9tZW51UG9zaXRpb25YKTsKKyAgICAgICAgZ19hc3NlcnRf
Y21waW50KGV2ZW50LT5idXR0b24ueSwgPT0sIG1fbWVudVBvc2l0aW9uWSk7CisgICAgfQorCisg
ICAgc3RhdGljIGdib29sZWFuIGNvbnRleHRNZW51Q2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2Vi
VmlldywgV2ViS2l0Q29udGV4dE1lbnUqIGNvbnRleHRNZW51LCBHZGtFdmVudCogZXZlbnQsIFdl
YktpdEhpdFRlc3RSZXN1bHQqIGhpdFRlc3RSZXN1bHQsIENvbnRleHRNZW51VGVzdCogdGVzdCkK
KyAgICB7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19DT05URVhUX01FTlUoY29udGV4dE1l
bnUpKTsKKyAgICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hl
cyhHX09CSkVDVChjb250ZXh0TWVudSkpOworICAgICAgICB0ZXN0LT5jaGVja0NvbnRleHRNZW51
RXZlbnQoZXZlbnQpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfSElUX1RFU1RfUkVTVUxU
KGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hl
blRlc3RGaW5pc2hlcyhHX09CSkVDVChoaXRUZXN0UmVzdWx0KSk7CisKKyAgICAgICAgcmV0dXJu
IHRlc3QtPmNvbnRleHRNZW51KGNvbnRleHRNZW51LCBldmVudCwgaGl0VGVzdFJlc3VsdCk7Cisg
ICAgfQorCisgICAgc3RhdGljIHZvaWQgY29udGV4dE1lbnVEaXNtaXNzZWRDYWxsYmFjayhXZWJL
aXRXZWJWaWV3KiwgQ29udGV4dE1lbnVUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+
Y29udGV4dE1lbnVEaXNtaXNzZWQoKTsKKyAgICB9CisKKyAgICBDb250ZXh0TWVudVRlc3QoKQor
ICAgICAgICA6IG1fbWVudVBvc2l0aW9uWCgwKQorICAgICAgICAsIG1fbWVudVBvc2l0aW9uWSgw
KQorICAgIHsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJjb250ZXh0LW1l
bnUiLCBHX0NBTExCQUNLKGNvbnRleHRNZW51Q2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgZ19z
aWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJjb250ZXh0LW1lbnUtZGlzbWlzc2VkIiwgR19DQUxM
QkFDSyhjb250ZXh0TWVudURpc21pc3NlZENhbGxiYWNrKSwgdGhpcyk7CisgICAgfQorCisgICAg
fkNvbnRleHRNZW51VGVzdCgpCisgICAgeworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNj
b25uZWN0X21hdGNoZWQobV93ZWJWaWV3LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAw
LCB0aGlzKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgY29udGV4dE1lbnUoV2ViS2l0Q29u
dGV4dE1lbnUqLCBHZGtFdmVudCosIFdlYktpdEhpdFRlc3RSZXN1bHQqKSA9IDA7CisKKyAgICB2
aXJ0dWFsIHZvaWQgY29udGV4dE1lbnVEaXNtaXNzZWQoKQorICAgIHsKKyAgICAgICAgcXVpdE1h
aW5Mb29wKCk7CisgICAgfQorCisgICAgR3RrTWVudSogZ2V0UG9wdXBNZW51KCkKKyAgICB7Cisg
ICAgICAgIEdPd25QdHI8R0xpc3Q+IHRvcGxldmVscyhndGtfd2luZG93X2xpc3RfdG9wbGV2ZWxz
KCkpOworICAgICAgICBmb3IgKEdMaXN0KiBpdGVyID0gdG9wbGV2ZWxzLmdldCgpOyBpdGVyOyBp
dGVyID0gZ19saXN0X25leHQoaXRlcikpIHsKKyAgICAgICAgICAgIGlmICghR1RLX0lTX1dJTkRP
VyhpdGVyLT5kYXRhKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAg
R3RrV2lkZ2V0KiBjaGlsZCA9IGd0a19iaW5fZ2V0X2NoaWxkKEdUS19CSU4oaXRlci0+ZGF0YSkp
OworICAgICAgICAgICAgaWYgKCFHVEtfSVNfTUVOVShjaGlsZCkpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgICAgIGlmIChndGtfbWVudV9nZXRfYXR0YWNoX3dpZGdldChH
VEtfTUVOVShjaGlsZCkpID09IEdUS19XSURHRVQobV93ZWJWaWV3KSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gR1RLX01FTlUoY2hpbGQpOworICAgICAgICB9CisgICAgICAgIGdfYXNzZXJ0X25v
dF9yZWFjaGVkKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGJvb2wgc2hvdWxk
U2hvd0lucHV0TWV0aG9kc01lbnUoKQorICAgIHsKKyAgICAgICAgR3RrU2V0dGluZ3MqIHNldHRp
bmdzID0gZ3RrX3dpZGdldF9nZXRfc2V0dGluZ3MoR1RLX1dJREdFVChtX3dlYlZpZXcpKTsKKyAg
ICAgICAgaWYgKCFzZXR0aW5ncykKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAg
IGdib29sZWFuIHNob3dJbnB1dE1ldGhvZE1lbnU7CisgICAgICAgIGdfb2JqZWN0X2dldChzZXR0
aW5ncywgImd0ay1zaG93LWlucHV0LW1ldGhvZC1tZW51IiwgJnNob3dJbnB1dE1ldGhvZE1lbnUs
IE5VTEwpOworICAgICAgICByZXR1cm4gc2hvd0lucHV0TWV0aG9kTWVudTsKKyAgICB9CisKKyAg
ICB2b2lkIGNoZWNrQWN0aW9uU3RhdGUoR3RrQWN0aW9uKiBhY3Rpb24sIHVuc2lnbmVkIHN0YXRl
KQorICAgIHsKKyAgICAgICAgaWYgKHN0YXRlICYgVmlzaWJsZSkKKyAgICAgICAgICAgIGdfYXNz
ZXJ0KGd0a19hY3Rpb25fZ2V0X3Zpc2libGUoYWN0aW9uKSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGdfYXNzZXJ0KCFndGtfYWN0aW9uX2dldF92aXNpYmxlKGFjdGlvbikpOworCisgICAg
ICAgIGlmIChzdGF0ZSAmIEVuYWJsZWQpCisgICAgICAgICAgICBnX2Fzc2VydChndGtfYWN0aW9u
X2dldF9zZW5zaXRpdmUoYWN0aW9uKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdfYXNz
ZXJ0KCFndGtfYWN0aW9uX2dldF9zZW5zaXRpdmUoYWN0aW9uKSk7CisKKyAgICAgICAgaWYgKEdU
S19JU19UT0dHTEVfQUNUSU9OKGFjdGlvbikpIHsKKyAgICAgICAgICAgIGlmIChzdGF0ZSAmIENo
ZWNrZWQpCisgICAgICAgICAgICAgICAgZ19hc3NlcnQoZ3RrX3RvZ2dsZV9hY3Rpb25fZ2V0X2Fj
dGl2ZShHVEtfVE9HR0xFX0FDVElPTihhY3Rpb24pKSk7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgZ19hc3NlcnQoIWd0a190b2dnbGVfYWN0aW9uX2dldF9hY3RpdmUoR1RLX1RP
R0dMRV9BQ1RJT04oYWN0aW9uKSkpOworICAgICAgICB9CisgICAgfQorCisgICAgR0xpc3QqIGNo
ZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChHTGlzdCogaXRlbXMsIFdlYktp
dENvbnRleHRNZW51QWN0aW9uIHN0b2NrQWN0aW9uLCB1bnNpZ25lZCBzdGF0ZSkKKyAgICB7Cisg
ICAgICAgIGdfYXNzZXJ0KGl0ZW1zKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX0NPTlRF
WFRfTUVOVV9JVEVNKGl0ZW1zLT5kYXRhKSk7CisKKyAgICAgICAgV2ViS2l0Q29udGV4dE1lbnVJ
dGVtKiBpdGVtID0gV0VCS0lUX0NPTlRFWFRfTUVOVV9JVEVNKGl0ZW1zLT5kYXRhKTsKKyAgICAg
ICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChpdGVtKSk7
CisKKyAgICAgICAgR3RrQWN0aW9uKiBhY3Rpb24gPSB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1f
Z2V0X2FjdGlvbihpdGVtKTsKKyAgICAgICAgZ19hc3NlcnQoR1RLX0lTX0FDVElPTihhY3Rpb24p
KTsKKworICAgICAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dl
dF9zdG9ja19hY3Rpb24oaXRlbSksID09LCBzdG9ja0FjdGlvbik7CisKKyAgICAgICAgY2hlY2tB
Y3Rpb25TdGF0ZShhY3Rpb24sIHN0YXRlKTsKKworICAgICAgICByZXR1cm4gZ19saXN0X25leHQo
aXRlbXMpOworICAgIH0KKworICAgIEdMaXN0KiBjaGVja0N1cnJlbnRJdGVtSXNDdXN0b21BY3Rp
b25BbmRHZXROZXh0KEdMaXN0KiBpdGVtcywgY29uc3QgY2hhciogbGFiZWwsIHVuc2lnbmVkIHN0
YXRlKQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQoaXRlbXMpOworICAgICAgICBnX2Fzc2VydChX
RUJLSVRfSVNfQ09OVEVYVF9NRU5VX0lURU0oaXRlbXMtPmRhdGEpKTsKKworICAgICAgICBXZWJL
aXRDb250ZXh0TWVudUl0ZW0qIGl0ZW0gPSBXRUJLSVRfQ09OVEVYVF9NRU5VX0lURU0oaXRlbXMt
PmRhdGEpOworICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdf
T0JKRUNUKGl0ZW0pKTsKKworICAgICAgICBHdGtBY3Rpb24qIGFjdGlvbiA9IHdlYmtpdF9jb250
ZXh0X21lbnVfaXRlbV9nZXRfYWN0aW9uKGl0ZW0pOworICAgICAgICBnX2Fzc2VydChHVEtfSVNf
QUNUSU9OKGFjdGlvbikpOworCisgICAgICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfY29udGV4
dF9tZW51X2l0ZW1fZ2V0X3N0b2NrX2FjdGlvbihpdGVtKSwgPT0sIFdFQktJVF9DT05URVhUX01F
TlVfQUNUSU9OX0NVU1RPTSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cihndGtfYWN0aW9uX2dl
dF9sYWJlbChhY3Rpb24pLCA9PSwgbGFiZWwpOworCisgICAgICAgIGNoZWNrQWN0aW9uU3RhdGUo
YWN0aW9uLCBzdGF0ZSk7CisKKyAgICAgICAgcmV0dXJuIGdfbGlzdF9uZXh0KGl0ZW1zKTsKKyAg
ICB9CisKKyAgICBHTGlzdCogY2hlY2tDdXJyZW50SXRlbUlzU3ViTWVudUFuZEdldE5leHQoR0xp
c3QqIGl0ZW1zLCBjb25zdCBjaGFyKiBsYWJlbCwgdW5zaWduZWQgc3RhdGUsIEdMaXN0Kiogc3Vi
TWVudUl0ZXIpCisgICAgeworICAgICAgICBnX2Fzc2VydChpdGVtcyk7CisgICAgICAgIGdfYXNz
ZXJ0KFdFQktJVF9JU19DT05URVhUX01FTlVfSVRFTShpdGVtcy0+ZGF0YSkpOworCisgICAgICAg
IFdlYktpdENvbnRleHRNZW51SXRlbSogaXRlbSA9IFdFQktJVF9DT05URVhUX01FTlVfSVRFTShp
dGVtcy0+ZGF0YSk7CisgICAgICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNo
ZXMoR19PQkpFQ1QoaXRlbSkpOworCisgICAgICAgIEd0a0FjdGlvbiogYWN0aW9uID0gd2Via2l0
X2NvbnRleHRfbWVudV9pdGVtX2dldF9hY3Rpb24oaXRlbSk7CisgICAgICAgIGdfYXNzZXJ0KEdU
S19JU19BQ1RJT04oYWN0aW9uKSk7CisKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKGd0a19hY3Rp
b25fZ2V0X2xhYmVsKGFjdGlvbiksID09LCBsYWJlbCk7CisgICAgICAgIGNoZWNrQWN0aW9uU3Rh
dGUoYWN0aW9uLCBzdGF0ZSk7CisKKyAgICAgICAgV2ViS2l0Q29udGV4dE1lbnUqIHN1Yk1lbnUg
PSB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X3N1Ym1lbnUoaXRlbSk7CisgICAgICAgIGdf
YXNzZXJ0KFdFQktJVF9JU19DT05URVhUX01FTlUoc3ViTWVudSkpOworICAgICAgICBpZiAoc3Vi
TWVudUl0ZXIpCisgICAgICAgICAgICAqc3ViTWVudUl0ZXIgPSB3ZWJraXRfY29udGV4dF9tZW51
X2dldF9pdGVtcyhzdWJNZW51KTsKKworICAgICAgICByZXR1cm4gZ19saXN0X25leHQoaXRlbXMp
OworICAgIH0KKworICAgIEdMaXN0KiBjaGVja0N1cnJlbnRJdGVtSXNTZXBhcmF0b3JBbmRHZXRO
ZXh0KEdMaXN0KiBpdGVtcykKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KGl0ZW1zKTsKKyAgICAg
ICAgZ19hc3NlcnQoV0VCS0lUX0lTX0NPTlRFWFRfTUVOVV9JVEVNKGl0ZW1zLT5kYXRhKSk7CisK
KyAgICAgICAgV2ViS2l0Q29udGV4dE1lbnVJdGVtKiBpdGVtID0gV0VCS0lUX0NPTlRFWFRfTUVO
VV9JVEVNKGl0ZW1zLT5kYXRhKTsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X2NvbnRleHRfbWVu
dV9pdGVtX2lzX3NlcGFyYXRvcihpdGVtKSk7CisKKyAgICAgICAgcmV0dXJuIGdfbGlzdF9uZXh0
KGl0ZW1zKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gZG9SaWdodENsaWNrSWRsZUNh
bGxiYWNrKENvbnRleHRNZW51VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPmNsaWNr
TW91c2VCdXR0b24odGVzdC0+bV9tZW51UG9zaXRpb25YLCB0ZXN0LT5tX21lbnVQb3NpdGlvblks
IDMpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgdm9pZCBzaG93Q29udGV4
dE1lbnVBdFBvc2l0aW9uQW5kV2FpdFVudGlsRmluaXNoZWQoaW50IHgsIGludCB5KQorICAgIHsK
KyAgICAgICAgbV9tZW51UG9zaXRpb25YID0geDsKKyAgICAgICAgbV9tZW51UG9zaXRpb25ZID0g
eTsKKyAgICAgICAgZ19pZGxlX2FkZChyZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihkb1Jp
Z2h0Q2xpY2tJZGxlQ2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1f
bWFpbkxvb3ApOworICAgIH0KKworICAgIHZvaWQgc2hvd0NvbnRleHRNZW51QW5kV2FpdFVudGls
RmluaXNoZWQoKQorICAgIHsKKyAgICAgICAgc2hvd0NvbnRleHRNZW51QXRQb3NpdGlvbkFuZFdh
aXRVbnRpbEZpbmlzaGVkKDAsIDApOworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBzaW11
bGF0ZUVzY0tleUlkbGVDYWxsYmFjayhDb250ZXh0TWVudVRlc3QqIHRlc3QpCisgICAgeworICAg
ICAgICB0ZXN0LT5rZXlTdHJva2UoR0RLX0tFWV9Fc2NhcGUpOworICAgICAgICByZXR1cm4gRkFM
U0U7CisgICAgfQorCisgICAgdm9pZCBkaXNtaXNzQ29udGV4dE1lbnVBbmRXYWl0VW50aWxGaW5p
c2hlZCgpCisgICAgeworICAgICAgICBnX2lkbGVfYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJj
ZUZ1bmM+KHNpbXVsYXRlRXNjS2V5SWRsZUNhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIGdfbWFp
bl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBkb3VibGUgbV9tZW51UG9zaXRp
b25YOworICAgIGRvdWJsZSBtX21lbnVQb3NpdGlvblk7Cit9OworCitjbGFzcyBDb250ZXh0TWVu
dURlZmF1bHRUZXN0OiBwdWJsaWMgQ29udGV4dE1lbnVUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtF
X0dMSUJfVEVTVF9GSVhUVVJFKENvbnRleHRNZW51RGVmYXVsdFRlc3QpOworCisgICAgZW51bSBE
ZWZhdWx0TWVudVR5cGUgeworICAgICAgICBOYXZpZ2F0aW9uLAorICAgICAgICBMaW5rLAorICAg
ICAgICBJbWFnZSwKKyAgICAgICAgTGlua0ltYWdlLAorICAgICAgICBWaWRlbywKKyAgICAgICAg
QXVkaW8sCisgICAgICAgIEVkaXRhYmxlCisgICAgfTsKKworICAgIENvbnRleHRNZW51RGVmYXVs
dFRlc3QoKQorICAgICAgICA6IG1fZXhwZWN0ZWRNZW51VHlwZShOYXZpZ2F0aW9uKQorICAgIHsK
KyAgICB9CisKKyAgICBib29sIGNvbnRleHRNZW51KFdlYktpdENvbnRleHRNZW51KiBjb250ZXh0
TWVudSwgR2RrRXZlbnQqIGV2ZW50LCBXZWJLaXRIaXRUZXN0UmVzdWx0KiBoaXRUZXN0UmVzdWx0
KQorICAgIHsKKyAgICAgICAgR0xpc3QqIGl0ZXIgPSB3ZWJraXRfY29udGV4dF9tZW51X2dldF9p
dGVtcyhjb250ZXh0TWVudSk7CisKKyAgICAgICAgc3dpdGNoIChtX2V4cGVjdGVkTWVudVR5cGUp
IHsKKyAgICAgICAgY2FzZSBOYXZpZ2F0aW9uOgorICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtp
dF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAg
ICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2Uo
aGl0VGVzdFJlc3VsdCkpOworICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9y
ZXN1bHRfY29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7CisgICAgICAgICAgICBnX2Fz
c2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RS
ZXN1bHQpKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlv
bkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fR09fQkFDSywgVmlz
aWJsZSk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25B
bmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0dPX0ZPUldBUkQsIFZp
c2libGUpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9u
QW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9TVE9QLCBWaXNpYmxl
KTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdl
dE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fUkVMT0FELCBWaXNpYmxlIHwg
RW5hYmxlZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMaW5rOgorICAgICAg
ICAgICAgZ19hc3NlcnQod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xpbmsoaGl0
VGVzdFJlc3VsdCkpOworICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1
bHRfY29udGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0KSk7CisgICAgICAgICAgICBnX2Fzc2Vy
dCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQp
KTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRf
aXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3Vy
cmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5V
X0FDVElPTl9PUEVOX0xJTkssIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGl0ZXIg
PSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NP
TlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9MSU5LX0lOX05FV19XSU5ET1csIFZpc2libGUgfCBFbmFi
bGVkKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFu
ZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRE9XTkxPQURfTElOS19U
T19ESVNLLCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJy
ZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVf
QUNUSU9OX0NPUFlfTElOS19UT19DTElQQk9BUkQsIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEltYWdlOgorICAgICAgICAgICAgZ19hc3NlcnQo
IXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RSZXN1bHQpKTsK
KyAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19p
bWFnZShoaXRUZXN0UmVzdWx0KSk7CisgICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90
ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAg
IGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfZWRpdGFibGUoaGl0
VGVzdFJlc3VsdCkpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2Nr
QWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0lN
QUdFX0lOX05FV19XSU5ET1csIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGl0ZXIg
PSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NP
TlRFWFRfTUVOVV9BQ1RJT05fRE9XTkxPQURfSU1BR0VfVE9fRElTSywgVmlzaWJsZSB8IEVuYWJs
ZWQpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5k
R2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX0lNQUdFX1RPX0NM
SVBCT0FSRCwgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3Vy
cmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5V
X0FDVElPTl9DT1BZX0lNQUdFX1VSTF9UT19DTElQQk9BUkQsIFZpc2libGUgfCBFbmFibGVkKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExpbmtJbWFnZToKKyAgICAgICAgICAg
IGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RS
ZXN1bHQpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29u
dGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0KSk7CisgICAgICAgICAgICBnX2Fzc2VydCghd2Vi
a2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQpKTsKKyAg
ICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfZWRp
dGFibGUoaGl0VGVzdFJlc3VsdCkpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0
ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
Tl9PUEVOX0xJTkssIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVj
a0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRf
TUVOVV9BQ1RJT05fT1BFTl9MSU5LX0lOX05FV19XSU5ET1csIFZpc2libGUgfCBFbmFibGVkKTsK
KyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5l
eHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRE9XTkxPQURfTElOS19UT19ESVNL
LCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRl
bUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9O
X0NPUFlfTElOS19UT19DTElQQk9BUkQsIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAg
IGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTZXBhcmF0b3JBbmRHZXROZXh0KGl0ZXIpOworICAg
ICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChp
dGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0lNQUdFX0lOX05FV19XSU5ET1cs
IFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVt
SXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05f
RE9XTkxPQURfSU1BR0VfVE9fRElTSywgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICAgICAg
aXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX0lNQUdFX1RPX0NMSVBCT0FSRCwgVmlzaWJsZSB8
IEVuYWJsZWQpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0
aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX0lNQUdF
X1VSTF9UT19DTElQQk9BUkQsIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFZpZGVvOgorICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRf
dGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAg
IGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVz
dFJlc3VsdCkpOworICAgICAgICAgICAgZ19hc3NlcnQod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9j
b250ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3
ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkp
OworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0
TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9NRURJQV9QTEFZLCBWaXNpYmxl
IHwgRW5hYmxlZCk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tB
Y3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX01FRElBX01V
VEUsIFZpc2libGUpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2Nr
QWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9UT0dHTEVf
TUVESUFfQ09OVFJPTFMsIFZpc2libGUgfCBFbmFibGVkIHwgQ2hlY2tlZCk7CisgICAgICAgICAg
ICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdF
QktJVF9DT05URVhUX01FTlVfQUNUSU9OX1RPR0dMRV9NRURJQV9MT09QLCBWaXNpYmxlIHwgRW5h
YmxlZCk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25B
bmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0VOVEVSX1ZJREVPX0ZV
TExTQ1JFRU4sIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1
cnJlbnRJdGVtSXNTZXBhcmF0b3JBbmRHZXROZXh0KGl0ZXIpOworICAgICAgICAgICAgaXRlciA9
IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09O
VEVYVF9NRU5VX0FDVElPTl9DT1BZX1ZJREVPX0xJTktfVE9fQ0xJUEJPQVJELCBWaXNpYmxlIHwg
RW5hYmxlZCk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rp
b25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5fVklERU9f
SU5fTkVXX1dJTkRPVywgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICAgICAgaXRlciA9IGNo
ZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVY
VF9NRU5VX0FDVElPTl9ET1dOTE9BRF9WSURFT19UT19ESVNLLCBWaXNpYmxlIHwgRW5hYmxlZCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBdWRpbzoKKyAgICAgICAgICAgIGdf
YXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluayhoaXRUZXN0UmVz
dWx0KSk7CisgICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250
ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtp
dF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7CisgICAg
ICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRh
YmxlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVt
SXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05f
TUVESUFfUExBWSwgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICAgICAgaXRlciA9IGNoZWNr
Q3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9N
RU5VX0FDVElPTl9NRURJQV9NVVRFLCBWaXNpYmxlKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVj
a0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRf
TUVOVV9BQ1RJT05fVE9HR0xFX01FRElBX0NPTlRST0xTLCBWaXNpYmxlIHwgRW5hYmxlZCB8IENo
ZWNrZWQpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9u
QW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9UT0dHTEVfTUVESUFf
TE9PUCwgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVu
dEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FD
VElPTl9FTlRFUl9WSURFT19GVUxMU0NSRUVOLCBWaXNpYmxlKTsKKyAgICAgICAgICAgIGl0ZXIg
PSBjaGVja0N1cnJlbnRJdGVtSXNTZXBhcmF0b3JBbmRHZXROZXh0KGl0ZXIpOworICAgICAgICAg
ICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX0FVRElPX0xJTktfVE9fQ0xJUEJPQVJELCBW
aXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlz
U3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX09Q
RU5fQVVESU9fSU5fTkVXX1dJTkRPVywgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICAgICAg
aXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9ET1dOTE9BRF9BVURJT19UT19ESVNLLCBWaXNpYmxlIHwg
RW5hYmxlZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFZGl0YWJsZToKKyAg
ICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGlu
ayhoaXRUZXN0UmVzdWx0KSk7CisgICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0
X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGdf
YXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbWVkaWEoaGl0VGVzdFJl
c3VsdCkpOworICAgICAgICAgICAgZ19hc3NlcnQod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250
ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVj
a0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRf
TUVOVV9BQ1RJT05fQ1VULCBWaXNpYmxlKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJl
bnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9B
Q1RJT05fQ09QWSwgVmlzaWJsZSk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRl
bUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9O
X1BBU1RFLCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJy
ZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVf
QUNUSU9OX0RFTEVURSwgVmlzaWJsZSk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50
SXRlbUlzU2VwYXJhdG9yQW5kR2V0TmV4dChpdGVyKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVj
a0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRf
TUVOVV9BQ1RJT05fU0VMRUNUX0FMTCwgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICAgICAg
aXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1NlcGFyYXRvckFuZEdldE5leHQoaXRlcik7CisgICAg
ICAgICAgICBpZiAoc2hvdWxkU2hvd0lucHV0TWV0aG9kc01lbnUoKSkKKyAgICAgICAgICAgICAg
ICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdF
QktJVF9DT05URVhUX01FTlVfQUNUSU9OX0lOUFVUX01FVEhPRFMsIFZpc2libGUgfCBFbmFibGVk
KTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdl
dE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fVU5JQ09ERSwgVmlzaWJsZSB8
IEVuYWJsZWQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHdl
YmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2RldmVsb3Blcl9leHRyYXMod2Via2l0X3dlYl92aWV3
X2dldF9zZXR0aW5ncyhtX3dlYlZpZXcpKSkgeworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3Vy
cmVudEl0ZW1Jc1NlcGFyYXRvckFuZEdldE5leHQoaXRlcik7CisgICAgICAgICAgICBpdGVyID0g
Y2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05U
RVhUX01FTlVfQUNUSU9OX0lOU1BFQ1RfRUxFTUVOVCwgVmlzaWJsZSB8IEVuYWJsZWQpOworICAg
ICAgICB9CisgICAgICAgIGdfYXNzZXJ0KCFpdGVyKTsKKworICAgICAgICBxdWl0TWFpbkxvb3Ao
KTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBEZWZhdWx0TWVudVR5cGUg
bV9leHBlY3RlZE1lbnVUeXBlOworfTsKKworc3RhdGljIHZvaWQgdGVzdENvbnRleHRNZW51RGVm
YXVsdE1lbnUoQ29udGV4dE1lbnVEZWZhdWx0VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sK
KyAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKKworICAgIGNvbnN0
IGNoYXIqIGxpbmtzSFRNTCA9CisgICAgICAgICI8aHRtbD48Ym9keT4iCisgICAgICAgICIgPGEg
c3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRvcDoxJyBocmVmPSdodHRwOi8vd3d3
LndlYmtpdGd0ay5vcmcnIHRpdGxlPSdXZWJLaXRHVEsrIFRpdGxlJz5XZWJLaXRHVEsrIFdlYnNp
dGU8L2E+IgorICAgICAgICAiIDxpbWcgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7
IHRvcDoxMCcgc3JjPScweGRlYWRiZWVmJyB3aWR0aD01IGhlaWdodD01PjwvaW1nPiIKKyAgICAg
ICAgIiA8YSBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjIwJyBocmVmPSdo
dHRwOi8vd3d3LndlYmtpdGd0ay5vcmcvbG9nbycgdGl0bGU9J1dlYktpdEdUSysgTG9nbyc+PGlt
ZyBzcmM9JzB4ZGVhZGJlZWYnIHdpZHRoPTUgaGVpZ2h0PTU+PC9pbWc+PC9hPiIKKyAgICAgICAg
IiA8aW5wdXQgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRvcDozMCcgc2l6ZT0n
MTAnPjwvaW5wdXQ+IgorICAgICAgICAiIDx2aWRlbyBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7
IGxlZnQ6MTsgdG9wOjUwJyB3aWR0aD0nMzAwJyBoZWlnaHQ9JzMwMCcgY29udHJvbHM9J2NvbnRy
b2xzJyBwcmVsb2FkPSdub25lJz48c291cmNlIHNyYz0nbW92aWUub2dnJyB0eXBlPSd2aWRlby9v
Z2cnIC8+PC92aWRlbz4iCisgICAgICAgICIgPGF1ZGlvIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0
ZTsgbGVmdDoxOyB0b3A6NjAnIHdpZHRoPSc1MCcgaGVpZ2h0PScyMCcgY29udHJvbHM9J2NvbnRy
b2xzJyBwcmVsb2FkPSdub25lJz48c291cmNlIHNyYz0ndHJhY2subXAzJyB0eXBlPSdhdWRpby9t
cDMnIC8+PC9hdWRpbz4iCisgICAgICAgICI8L2JvZHk+PC9odG1sPiI7CisgICAgdGVzdC0+bG9h
ZEh0bWwobGlua3NIVE1MLCAiZmlsZTovLy8iKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmlu
aXNoZWQoKTsKKworICAgIC8vIENvbnRleHQgbWVudSBmb3IgZG9jdW1lbnQuCisgICAgdGVzdC0+
bV9leHBlY3RlZE1lbnVUeXBlID0gQ29udGV4dE1lbnVEZWZhdWx0VGVzdDo6TmF2aWdhdGlvbjsK
KyAgICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBdFBvc2l0aW9uQW5kV2FpdFVudGlsRmluaXNoZWQo
MCwgMCk7CisKKyAgICAvLyBDb250ZXh0IG1lbnUgZm9yIGxpbmsuCisgICAgdGVzdC0+bV9leHBl
Y3RlZE1lbnVUeXBlID0gQ29udGV4dE1lbnVEZWZhdWx0VGVzdDo6TGluazsKKyAgICB0ZXN0LT5z
aG93Q29udGV4dE1lbnVBdFBvc2l0aW9uQW5kV2FpdFVudGlsRmluaXNoZWQoMSwgMSk7CisKKyAg
ICAvLyBDb250ZXh0IG1lbnUgZm9yIGltYWdlLgorICAgIHRlc3QtPm1fZXhwZWN0ZWRNZW51VHlw
ZSA9IENvbnRleHRNZW51RGVmYXVsdFRlc3Q6OkltYWdlOworICAgIHRlc3QtPnNob3dDb250ZXh0
TWVudUF0UG9zaXRpb25BbmRXYWl0VW50aWxGaW5pc2hlZCgxLCAxMCk7CisKKyAgICAvLyBFbmFi
bGUgZGV2ZWxvcGVyIGV4dHJhcyBub3csIHNvIHRoYXQgaW5zcGVjdG9yIGVsZW1lbnQKKyAgICAv
LyB3aWxsIGJlIHNob3duIGluIHRoZSBkZWZhdWx0IGNvbnRleHQgbWVudS4KKyAgICB3ZWJraXRf
c2V0dGluZ3Nfc2V0X2VuYWJsZV9kZXZlbG9wZXJfZXh0cmFzKHdlYmtpdF93ZWJfdmlld19nZXRf
c2V0dGluZ3ModGVzdC0+bV93ZWJWaWV3KSwgVFJVRSk7CisKKyAgICAvLyBDb250ZXh0IG1lbnUg
Zm9yIGltYWdlIGxpbmsuCisgICAgdGVzdC0+bV9leHBlY3RlZE1lbnVUeXBlID0gQ29udGV4dE1l
bnVEZWZhdWx0VGVzdDo6TGlua0ltYWdlOworICAgIHRlc3QtPnNob3dDb250ZXh0TWVudUF0UG9z
aXRpb25BbmRXYWl0VW50aWxGaW5pc2hlZCgxLCAyMCk7CisKKyAgICAvLyBDb250ZXh0IG1lbnUg
Zm9yIHZpZGVvLgorICAgIHRlc3QtPm1fZXhwZWN0ZWRNZW51VHlwZSA9IENvbnRleHRNZW51RGVm
YXVsdFRlc3Q6OlZpZGVvOworICAgIHRlc3QtPnNob3dDb250ZXh0TWVudUF0UG9zaXRpb25BbmRX
YWl0VW50aWxGaW5pc2hlZCgxLCA1MCk7CisKKyAgICAvLyBDb250ZXh0IG1lbnUgZm9yIGF1ZGlv
LgorICAgIHRlc3QtPm1fZXhwZWN0ZWRNZW51VHlwZSA9IENvbnRleHRNZW51RGVmYXVsdFRlc3Q6
OkF1ZGlvOworICAgIHRlc3QtPnNob3dDb250ZXh0TWVudUF0UG9zaXRpb25BbmRXYWl0VW50aWxG
aW5pc2hlZCgxLCA2MCk7CisKKyAgICAvLyBDb250ZXh0IG1lbnUgZm9yIGVkaXRhYmxlLgorICAg
IHRlc3QtPm1fZXhwZWN0ZWRNZW51VHlwZSA9IENvbnRleHRNZW51RGVmYXVsdFRlc3Q6OkVkaXRh
YmxlOworICAgIHRlc3QtPnNob3dDb250ZXh0TWVudUF0UG9zaXRpb25BbmRXYWl0VW50aWxGaW5p
c2hlZCg1LCAzNSk7Cit9CisKK2NsYXNzIENvbnRleHRNZW51Q3VzdG9tVGVzdDogcHVibGljIENv
bnRleHRNZW51VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShDb250
ZXh0TWVudUN1c3RvbVRlc3QpOworCisgICAgQ29udGV4dE1lbnVDdXN0b21UZXN0KCkKKyAgICAg
ICAgOiBtX2l0ZW1Ub0FjdGl2YXRlTGFiZWwoMCkKKyAgICAgICAgLCBtX2FjdGl2YXRlZChmYWxz
ZSkKKyAgICAgICAgLCBtX3RvZ2dsZWQoZmFsc2UpCisgICAgeworICAgIH0KKworICAgIGJvb2wg
Y29udGV4dE1lbnUoV2ViS2l0Q29udGV4dE1lbnUqIGNvbnRleHRNZW51LCBHZGtFdmVudCosIFdl
YktpdEhpdFRlc3RSZXN1bHQqIGhpdFRlc3RSZXN1bHQpCisgICAgeworICAgICAgICAvLyBBcHBl
bmQgb3VyIGN1c3RvbSBpdGVtIHRvIHRoZSBkZWZhdWx0IG1lbnUuCisgICAgICAgIHdlYmtpdF9j
b250ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1f
bmV3KG1fYWN0aW9uLmdldCgpKSk7CisgICAgICAgIHF1aXRNYWluTG9vcCgpOworCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBHdGtNZW51SXRlbSogZ2V0TWVudUl0ZW0oR3Rr
TWVudSogbWVudSwgY29uc3QgZ2NoYXIqIGl0ZW1MYWJlbCkKKyAgICB7CisgICAgICAgIEdPd25Q
dHI8R0xpc3Q+IGl0ZW1zKGd0a19jb250YWluZXJfZ2V0X2NoaWxkcmVuKEdUS19DT05UQUlORVIo
bWVudSkpKTsKKyAgICAgICAgZm9yIChHTGlzdCogaXRlciA9IGl0ZW1zLmdldCgpOyBpdGVyOyBp
dGVyID0gZ19saXN0X25leHQoaXRlcikpIHsKKyAgICAgICAgICAgIEd0a01lbnVJdGVtKiBjaGls
ZCA9IEdUS19NRU5VX0lURU0oaXRlci0+ZGF0YSk7CisgICAgICAgICAgICBpZiAoZ19zdHJfZXF1
YWwoaXRlbUxhYmVsLCBndGtfbWVudV9pdGVtX2dldF9sYWJlbChjaGlsZCkpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBjaGlsZDsKKyAgICAgICAgfQorICAgICAgICBnX2Fzc2VydF9ub3RfcmVh
Y2hlZCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB2b2lkIGFjdGl2YXRlTWVu
dUl0ZW0oKQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQobV9pdGVtVG9BY3RpdmF0ZUxhYmVsKTsK
KyAgICAgICAgR3RrTWVudSogbWVudSA9IGdldFBvcHVwTWVudSgpOworICAgICAgICBHdGtNZW51
SXRlbSogaXRlbSA9IGdldE1lbnVJdGVtKG1lbnUsIG1faXRlbVRvQWN0aXZhdGVMYWJlbCk7Cisg
ICAgICAgIGd0a19tZW51X3NoZWxsX2FjdGl2YXRlX2l0ZW0oR1RLX01FTlVfU0hFTEwobWVudSks
IEdUS19XSURHRVQoaXRlbSksIFRSVUUpOworICAgICAgICBtX2l0ZW1Ub0FjdGl2YXRlTGFiZWwg
PSAwOworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBhY3RpdmF0ZU1lbnVJdGVtSWRsZUNh
bGxiYWNrKGdwb2ludGVyIHVzZXJEYXRhKQorICAgIHsKKyAgICAgICAgQ29udGV4dE1lbnVDdXN0
b21UZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8Q29udGV4dE1lbnVDdXN0b21UZXN0Kj4odXNlckRh
dGEpOworICAgICAgICB0ZXN0LT5hY3RpdmF0ZU1lbnVJdGVtKCk7CisgICAgICAgIHJldHVybiBG
QUxTRTsKKyAgICB9CisKKyAgICB2b2lkIGFjdGl2YXRlQ3VzdG9tTWVudUl0ZW1BbmRXYWl0VW50
aWxBY3RpdmF0ZWQoY29uc3QgY2hhciogYWN0aW9uTGFiZWwpCisgICAgeworICAgICAgICBtX2Fj
dGl2YXRlZCA9IG1fdG9nZ2xlZCA9IGZhbHNlOworICAgICAgICBtX2l0ZW1Ub0FjdGl2YXRlTGFi
ZWwgPSBhY3Rpb25MYWJlbDsKKyAgICAgICAgZ19pZGxlX2FkZChhY3RpdmF0ZU1lbnVJdGVtSWRs
ZUNhbGxiYWNrLCB0aGlzKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwor
ICAgIH0KKworICAgIHZvaWQgdG9nZ2xlQ3VzdG9tTWVudUl0ZW1BbmRXYWl0VW50aWxUb2dnbGVk
KGNvbnN0IGNoYXIqIGFjdGlvbkxhYmVsKQorICAgIHsKKyAgICAgICAgYWN0aXZhdGVDdXN0b21N
ZW51SXRlbUFuZFdhaXRVbnRpbEFjdGl2YXRlZChhY3Rpb25MYWJlbCk7CisgICAgfQorCisgICAg
c3RhdGljIHZvaWQgYWN0aW9uQWN0aXZhdGVkQ2FsbGJhY2soR3RrQWN0aW9uKiwgQ29udGV4dE1l
bnVDdXN0b21UZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+bV9hY3RpdmF0ZWQgPSB0
cnVlOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGFjdGlvblRvZ2dsZWRDYWxsYmFjayhHdGtB
Y3Rpb24qLCBDb250ZXh0TWVudUN1c3RvbVRlc3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0
LT5tX3RvZ2dsZWQgPSB0cnVlOworICAgIH0KKworICAgIHZvaWQgc2V0QWN0aW9uKEd0a0FjdGlv
biogYWN0aW9uKQorICAgIHsKKyAgICAgICAgbV9hY3Rpb24gPSBhY3Rpb247CisgICAgICAgIGlm
IChHVEtfSVNfVE9HR0xFX0FDVElPTihhY3Rpb24pKQorICAgICAgICAgICAgZ19zaWduYWxfY29u
bmVjdChhY3Rpb24sICJ0b2dnbGVkIiwgR19DQUxMQkFDSyhhY3Rpb25Ub2dnbGVkQ2FsbGJhY2sp
LCB0aGlzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ19zaWduYWxfY29ubmVjdChhY3Rp
b24sICJhY3RpdmF0ZSIsIEdfQ0FMTEJBQ0soYWN0aW9uQWN0aXZhdGVkQ2FsbGJhY2spLCB0aGlz
KTsKKyAgICB9CisKKyAgICBHUmVmUHRyPEd0a0FjdGlvbj4gbV9hY3Rpb247CisgICAgY29uc3Qg
Y2hhciogbV9pdGVtVG9BY3RpdmF0ZUxhYmVsOworICAgIGJvb2wgbV9hY3RpdmF0ZWQ7CisgICAg
Ym9vbCBtX3RvZ2dsZWQ7Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0Q29udGV4dE1lbnVQb3B1bGF0
ZU1lbnUoQ29udGV4dE1lbnVDdXN0b21UZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAg
IHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOworCisgICAgdGVzdC0+bG9h
ZEh0bWwoIjxodG1sPjxib2R5PldlYktpdEdUSysgQ29udGV4dCBtZW51IHRlc3RzPC9ib2R5Pjwv
aHRtbD4iLCAiZmlsZTovLy8iKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsK
KworICAgIC8vIENyZWF0ZSBhIGN1c3RvbSBtZW51IGl0ZW0uCisgICAgR1JlZlB0cjxHdGtBY3Rp
b24+IGFjdGlvbiA9IGFkb3B0R1JlZihndGtfYWN0aW9uX25ldygiV2ViS2l0R1RLK0N1c3RvbUFj
dGlvbiIsICJDdXN0b20gX0FjdGlvbiIsIDAsIDApKTsKKyAgICB0ZXN0LT5zZXRBY3Rpb24oYWN0
aW9uLmdldCgpKTsKKyAgICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBbmRXYWl0VW50aWxGaW5pc2hl
ZCgpOworICAgIHRlc3QtPmFjdGl2YXRlQ3VzdG9tTWVudUl0ZW1BbmRXYWl0VW50aWxBY3RpdmF0
ZWQoZ3RrX2FjdGlvbl9nZXRfbGFiZWwoYWN0aW9uLmdldCgpKSk7CisgICAgZ19hc3NlcnQodGVz
dC0+bV9hY3RpdmF0ZWQpOworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX3RvZ2dsZWQpOworCisgICAg
Ly8gQ3JlYXRlIGEgY3VzdG9tIHRvZ2dsZSBtZW51IGl0ZW0uCisgICAgR1JlZlB0cjxHdGtBY3Rp
b24+IHRvZ2dsZUFjdGlvbiA9IGFkb3B0R1JlZihHVEtfQUNUSU9OKGd0a190b2dnbGVfYWN0aW9u
X25ldygiV2ViS2l0R1RLK0N1c3RvbVRvZ2dsZUFjdGlvbiIsICJDdXN0b20gX1RvZ2dsZSBBY3Rp
b24iLCAwLCAwKSkpOworICAgIHRlc3QtPnNldEFjdGlvbih0b2dnbGVBY3Rpb24uZ2V0KCkpOwor
ICAgIHRlc3QtPnNob3dDb250ZXh0TWVudUFuZFdhaXRVbnRpbEZpbmlzaGVkKCk7CisgICAgdGVz
dC0+dG9nZ2xlQ3VzdG9tTWVudUl0ZW1BbmRXYWl0VW50aWxUb2dnbGVkKGd0a19hY3Rpb25fZ2V0
X2xhYmVsKHRvZ2dsZUFjdGlvbi5nZXQoKSkpOworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX2FjdGl2
YXRlZCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV90b2dnbGVkKTsKK30KKworY2xhc3MgQ29udGV4
dE1lbnVDdXN0b21GdWxsVGVzdDogcHVibGljIENvbnRleHRNZW51VGVzdCB7CitwdWJsaWM6Cisg
ICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShDb250ZXh0TWVudUN1c3RvbUZ1bGxUZXN0KTsKKwor
ICAgIGJvb2wgY29udGV4dE1lbnUoV2ViS2l0Q29udGV4dE1lbnUqIGNvbnRleHRNZW51LCBHZGtF
dmVudCosIFdlYktpdEhpdFRlc3RSZXN1bHQqKQorICAgIHsKKyAgICAgICAgLy8gQ2xlYXIgcHJv
cG9zZWQgbWVudSBhbmQgYnVpbGQgb3VyIG93bi4KKyAgICAgICAgd2Via2l0X2NvbnRleHRfbWVu
dV9yZW1vdmVfYWxsKGNvbnRleHRNZW51KTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KHdlYmtp
dF9jb250ZXh0X21lbnVfZ2V0X25faXRlbXMoY29udGV4dE1lbnUpLCA9PSwgMCk7CisKKyAgICAg
ICAgLy8gQWRkIGFjdGlvbnMgZnJvbSBzdG9jay4KKyAgICAgICAgd2Via2l0X2NvbnRleHRfbWVu
dV9wcmVwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X2Zyb21f
c3RvY2tfYWN0aW9uKFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0dPX0JBQ0spKTsKKyAgICAg
ICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBlbmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0
X21lbnVfaXRlbV9uZXdfZnJvbV9zdG9ja19hY3Rpb24oV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T05fR09fRk9SV0FSRCkpOworICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2luc2VydChjb250
ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19zZXBhcmF0b3IoKSwgMik7CisK
KyAgICAgICAgLy8gQWRkIGN1c3RvbSBhY3Rpb25zLgorICAgICAgICBHUmVmUHRyPEd0a0FjdGlv
bj4gYWN0aW9uID0gYWRvcHRHUmVmKGd0a19hY3Rpb25fbmV3KCJXZWJLaXRHVEsrQ3VzdG9tQWN0
aW9uIiwgIkN1c3RvbSBfQWN0aW9uIiwgMCwgMCkpOworICAgICAgICBndGtfYWN0aW9uX3NldF9z
ZW5zaXRpdmUoYWN0aW9uLmdldCgpLCBGQUxTRSk7CisgICAgICAgIHdlYmtpdF9jb250ZXh0X21l
bnVfaW5zZXJ0KGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3KGFjdGlv
bi5nZXQoKSksIC0xKTsKKyAgICAgICAgR1JlZlB0cjxHdGtBY3Rpb24+IHRvZ2dsZUFjdGlvbiA9
IGFkb3B0R1JlZihHVEtfQUNUSU9OKGd0a190b2dnbGVfYWN0aW9uX25ldygiV2ViS2l0R1RLK0N1
c3RvbVRvZ2dsZUFjdGlvbiIsICJDdXN0b20gX1RvZ2dsZSBBY3Rpb24iLCAwLCAwKSkpOworICAg
ICAgICBndGtfdG9nZ2xlX2FjdGlvbl9zZXRfYWN0aXZlKEdUS19UT0dHTEVfQUNUSU9OKHRvZ2ds
ZUFjdGlvbi5nZXQoKSksIFRSVUUpOworICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVu
ZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ldyh0b2dnbGVBY3Rpb24u
Z2V0KCkpKTsKKyAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBlbmQoY29udGV4dE1lbnUs
IHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfc2VwYXJhdG9yKCkpOworCisgICAgICAgIC8v
IEFkZCBhIHN1Ym1lbnUuCisgICAgICAgIEdSZWZQdHI8V2ViS2l0Q29udGV4dE1lbnU+IHN1Yk1l
bnUgPSBhZG9wdEdSZWYod2Via2l0X2NvbnRleHRfbWVudV9uZXcoKSk7CisgICAgICAgIGFzc2Vy
dE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1Qoc3ViTWVudS5nZXQoKSkp
OworICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2luc2VydChzdWJNZW51LmdldCgpLCB3ZWJr
aXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X2Zyb21fc3RvY2tfYWN0aW9uX3dpdGhfbGFiZWwoV0VC
S0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fU1RPUCwgIlN0b3AgTG9hZCIpLCAwKTsKKyAgICAgICAg
d2Via2l0X2NvbnRleHRfbWVudV9pbnNlcnQoc3ViTWVudS5nZXQoKSwgd2Via2l0X2NvbnRleHRf
bWVudV9pdGVtX25ld19mcm9tX3N0b2NrX2FjdGlvbihXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
Tl9SRUxPQUQpLCAtMSk7CisgICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRl
eHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X3dpdGhfc3VibWVudSgiTG9hZCBv
cHRpb25zIiwgc3ViTWVudS5nZXQoKSkpOworICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2Fw
cGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19zZXBhcmF0b3Io
KSk7CisKKyAgICAgICAgLy8gTW92ZSBMb2FkIHN1Ym1lbnUgYmVmb3JlIGN1c3RvbSBhY3Rpb25z
LgorICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X21vdmVfaXRlbShjb250ZXh0TWVudSwgd2Vi
a2l0X2NvbnRleHRfbWVudV9sYXN0KGNvbnRleHRNZW51KSwgMyk7CisgICAgICAgIHdlYmtpdF9j
b250ZXh0X21lbnVfbW92ZV9pdGVtKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2xh
c3QoY29udGV4dE1lbnUpLCAzKTsKKworICAgICAgICAvLyBJZiBsYXN0IGl0ZW0gaXMgYSBzZXBh
cmF0b3IsIHJlbW92ZSBpdC4KKyAgICAgICAgaWYgKHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9p
c19zZXBhcmF0b3Iod2Via2l0X2NvbnRleHRfbWVudV9sYXN0KGNvbnRleHRNZW51KSkpCisgICAg
ICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X3JlbW92ZShjb250ZXh0TWVudSwgd2Via2l0X2Nv
bnRleHRfbWVudV9sYXN0KGNvbnRleHRNZW51KSk7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhlIG1l
bnUuCisgICAgICAgIEdMaXN0KiBpdGVyID0gd2Via2l0X2NvbnRleHRfbWVudV9nZXRfaXRlbXMo
Y29udGV4dE1lbnUpOworCisgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0Fj
dGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fR09fQkFDSywg
VmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3Rv
Y2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0dPX0ZP
UldBUkQsIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0
ZW1Jc1NlcGFyYXRvckFuZEdldE5leHQoaXRlcik7CisKKyAgICAgICAgR0xpc3QqIHN1Yk1lbnVJ
dGVyID0gMDsKKyAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N1Yk1lbnVBbmRHZXRO
ZXh0KGl0ZXIsICJMb2FkIG9wdGlvbnMiLCBWaXNpYmxlIHwgRW5hYmxlZCwgJnN1Yk1lbnVJdGVy
KTsKKyAgICAgICAgc3ViTWVudUl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFu
ZEdldE5leHQoc3ViTWVudUl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1NUT1AsIFZp
c2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgc3ViTWVudUl0ZXIgPSBjaGVja0N1cnJlbnRJdGVt
SXNTdG9ja0FjdGlvbkFuZEdldE5leHQoc3ViTWVudUl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVf
QUNUSU9OX1JFTE9BRCwgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICBpdGVyID0gY2hlY2tD
dXJyZW50SXRlbUlzU2VwYXJhdG9yQW5kR2V0TmV4dChpdGVyKTsKKworICAgICAgICBpdGVyID0g
Y2hlY2tDdXJyZW50SXRlbUlzQ3VzdG9tQWN0aW9uQW5kR2V0TmV4dChpdGVyLCAiQ3VzdG9tIF9B
Y3Rpb24iLCBWaXNpYmxlKTsKKyAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc0N1c3Rv
bUFjdGlvbkFuZEdldE5leHQoaXRlciwgIkN1c3RvbSBfVG9nZ2xlIEFjdGlvbiIsIFZpc2libGUg
fCBFbmFibGVkIHwgQ2hlY2tlZCk7CisgICAgICAgIGdfYXNzZXJ0KCFpdGVyKTsKKworICAgICAg
ICBxdWl0TWFpbkxvb3AoKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCitz
dGF0aWMgdm9pZCB0ZXN0Q29udGV4dE1lbnVDdXN0b21NZW51KENvbnRleHRNZW51Q3VzdG9tRnVs
bFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+c2hvd0luV2luZG93QW5k
V2FpdFVudGlsTWFwcGVkKCk7CisKKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHk+V2Vi
S2l0R1RLKyBDb250ZXh0IG1lbnUgdGVzdHM8L2JvZHk+PC9odG1sPiIsICJmaWxlOi8vLyIpOwor
ICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+c2hvd0NvbnRl
eHRNZW51QW5kV2FpdFVudGlsRmluaXNoZWQoKTsKK30KKworY2xhc3MgQ29udGV4dE1lbnVEaXNh
YmxlZFRlc3Q6IHB1YmxpYyBDb250ZXh0TWVudVRlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJ
Ql9URVNUX0ZJWFRVUkUoQ29udGV4dE1lbnVEaXNhYmxlZFRlc3QpOworCisgICAgZW51bSBEaXNh
YmxlTW9kZSB7CisgICAgICAgIElnbm9yZUNsaWNrcywKKyAgICAgICAgSWdub3JlRGVmYXVsdE1l
bnUKKyAgICB9OworCisgICAgc3RhdGljIGdib29sZWFuIGJ1dHRvblByZXNzRXZlbnRDYWxsYmFj
ayhHdGtXaWRnZXQqLCBHZGtFdmVudCogZXZlbnQsIENvbnRleHRNZW51RGlzYWJsZWRUZXN0KiB0
ZXN0KQorICAgIHsKKyAgICAgICAgaWYgKGV2ZW50LT5idXR0b24uYnV0dG9uICE9IDMpCisgICAg
ICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIHJldHVybiB0ZXN0LT5yaWdodEJ1dHRvblBy
ZXNzZWQoKTsKKyAgICB9CisKKyAgICBDb250ZXh0TWVudURpc2FibGVkVGVzdCgpCisgICAgICAg
IDogbV9kaXNhYmxlTW9kZShJZ25vcmVDbGlja3MpCisgICAgeworICAgICAgICBnX3NpZ25hbF9j
b25uZWN0KG1fd2ViVmlldywgImJ1dHRvbi1wcmVzcy1ldmVudCIsIEdfQ0FMTEJBQ0soYnV0dG9u
UHJlc3NFdmVudENhbGxiYWNrKSwgdGhpcyk7CisgICAgfQorCisgICAgYm9vbCBjb250ZXh0TWVu
dShXZWJLaXRDb250ZXh0TWVudSogY29udGV4dE1lbnUsIEdka0V2ZW50KiwgV2ViS2l0SGl0VGVz
dFJlc3VsdCopCisgICAgeworICAgICAgICBpZiAobV9kaXNhYmxlTW9kZSA9PSBJZ25vcmVDbGlj
a3MpCisgICAgICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBxdWl0TWFpbkxvb3AoKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICBib29sIHJpZ2h0QnV0dG9uUHJlc3NlZCgpCisgICAgeworICAgICAgICBpZiAobV9k
aXNhYmxlTW9kZSA9PSBJZ25vcmVDbGlja3MpIHsKKyAgICAgICAgICAgIHF1aXRNYWluTG9vcEFm
dGVyUHJvY2Vzc2luZ1BlbmRpbmdFdmVudHMoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBEaXNhYmxlTW9k
ZSBtX2Rpc2FibGVNb2RlOworfTsKKworc3RhdGljIHZvaWQgdGVzdENvbnRleHRNZW51RGlzYWJs
ZU1lbnUoQ29udGV4dE1lbnVEaXNhYmxlZFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7Cisg
ICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7CisKKyAgICB0ZXN0LT5s
b2FkSHRtbCgiPGh0bWw+PGJvZHk+V2ViS2l0R1RLKyBDb250ZXh0IG1lbnUgdGVzdHM8L2JvZHk+
PC9odG1sPiIsICJmaWxlOi8vLyIpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgp
OworCisgICAgdGVzdC0+bV9kaXNhYmxlTW9kZSA9IENvbnRleHRNZW51RGlzYWJsZWRUZXN0OjpJ
Z25vcmVEZWZhdWx0TWVudTsKKyAgICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBbmRXYWl0VW50aWxG
aW5pc2hlZCgpOworCisgICAgdGVzdC0+bV9kaXNhYmxlTW9kZSA9IENvbnRleHRNZW51RGlzYWJs
ZWRUZXN0OjpJZ25vcmVDbGlja3M7CisgICAgdGVzdC0+c2hvd0NvbnRleHRNZW51QW5kV2FpdFVu
dGlsRmluaXNoZWQoKTsKK30KKworY2xhc3MgQ29udGV4dE1lbnVTdWJtZW51VGVzdDogcHVibGlj
IENvbnRleHRNZW51VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShD
b250ZXh0TWVudVN1Ym1lbnVUZXN0KTsKKworICAgIGJvb2wgY29udGV4dE1lbnUoV2ViS2l0Q29u
dGV4dE1lbnUqIGNvbnRleHRNZW51LCBHZGtFdmVudCosIFdlYktpdEhpdFRlc3RSZXN1bHQqKQor
ICAgIHsKKyAgICAgICAgc2l6ZV90IG1lbnVTaXplID0gd2Via2l0X2NvbnRleHRfbWVudV9nZXRf
bl9pdGVtcyhjb250ZXh0TWVudSk7CisgICAgICAgIEdSZWZQdHI8V2ViS2l0Q29udGV4dE1lbnU+
IHN1Yk1lbnUgPSBhZG9wdEdSZWYod2Via2l0X2NvbnRleHRfbWVudV9uZXcoKSk7CisgICAgICAg
IHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9t
ZW51X2l0ZW1fbmV3X3dpdGhfc3VibWVudSgiU3ViTWVudUl0ZW0iLCBzdWJNZW51LmdldCgpKSk7
CisgICAgICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2NvbnRleHRfbWVudV9nZXRfbl9pdGVt
cyhjb250ZXh0TWVudSksID09LCBtZW51U2l6ZSArIDEpOworCisgICAgICAgIEdSZWZQdHI8V2Vi
S2l0Q29udGV4dE1lbnU+IHN1Yk1lbnUyID0gYWRvcHRHUmVmKHdlYmtpdF9jb250ZXh0X21lbnVf
bmV3KCkpOworICAgICAgICBHUmVmUHRyPFdlYktpdENvbnRleHRNZW51SXRlbT4gaXRlbSA9IHdl
YmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfZnJvbV9zdG9ja19hY3Rpb24oV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fT1BFTl9MSU5LKTsKKworICAgICAgICAvLyBBZGQgc3VibWVudSB0byBu
ZXdseSBjcmVhdGVkIGl0ZW0uCisgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfY29udGV4dF9tZW51
X2l0ZW1fZ2V0X3N1Ym1lbnUoaXRlbS5nZXQoKSkpOworICAgICAgICB3ZWJraXRfY29udGV4dF9t
ZW51X2l0ZW1fc2V0X3N1Ym1lbnUoaXRlbS5nZXQoKSwgc3ViTWVudTIuZ2V0KCkpOworICAgICAg
ICBnX2Fzc2VydCh3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X3N1Ym1lbnUoaXRlbS5nZXQo
KSkgPT0gc3ViTWVudTIuZ2V0KCkpOworCisgICAgICAgIC8vIFJlcGxhY2UgdGhlIHN1Ym1lbnUu
CisgICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9zZXRfc3VibWVudShpdGVtLmdldCgp
LCAwKTsKKyAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRfc3Vi
bWVudShpdGVtLmdldCgpKSk7CisKKyAgICAgICAgLy8gVHJ5IHRvIGFkZCBhIHN1Ym1lbnUgYWxy
ZWFkeSBhZGRlZCB0byBhbm90aGVyIGl0ZW0uCisgICAgICAgIHJlbW92ZUxvZ0ZhdGFsRmxhZyhH
X0xPR19MRVZFTF9XQVJOSU5HKTsKKyAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX3Nl
dF9zdWJtZW51KGl0ZW0uZ2V0KCksIHN1Yk1lbnUuZ2V0KCkpOworICAgICAgICBhZGRMb2dGYXRh
bEZsYWcoR19MT0dfTEVWRUxfV0FSTklORyk7CisgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfY29u
dGV4dF9tZW51X2l0ZW1fZ2V0X3N1Ym1lbnUoaXRlbS5nZXQoKSkpOworCisgICAgICAgIC8vIEEg
cmVtb3ZlZCBzdWJtZW51IHNob3VsZG4ndCBoYXZlIGEgcGFyZW50LgorICAgICAgICB3ZWJraXRf
Y29udGV4dF9tZW51X2l0ZW1fc2V0X3N1Ym1lbnUoaXRlbS5nZXQoKSwgc3ViTWVudTIuZ2V0KCkp
OworICAgICAgICBnX2Fzc2VydCh3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X3N1Ym1lbnUo
aXRlbS5nZXQoKSkgPT0gc3ViTWVudTIuZ2V0KCkpOworCisgICAgICAgIHF1aXRNYWluTG9vcCgp
OworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisKK3N0YXRpYyB2b2lkIHRlc3RD
b250ZXh0TWVudVN1Yk1lbnUoQ29udGV4dE1lbnVTdWJtZW51VGVzdCogdGVzdCwgZ2NvbnN0cG9p
bnRlcikKK3sKKyAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKKwor
ICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keT5XZWJLaXRHVEsrIENvbnRleHQgbWVudSB0
ZXN0czwvYm9keT48L2h0bWw+IiwgImZpbGU6Ly8vIik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9h
ZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBbmRXYWl0VW50aWxGaW5p
c2hlZCgpOworfQorCitjbGFzcyBDb250ZXh0TWVudURpc21pc3NlZFRlc3Q6IHB1YmxpYyBDb250
ZXh0TWVudVRlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoQ29udGV4
dE1lbnVEaXNtaXNzZWRUZXN0KTsKKworICAgIENvbnRleHRNZW51RGlzbWlzc2VkVGVzdCgpCisg
ICAgICAgIDogbV9kaXNtaXNzZWQoZmFsc2UpCisgICAgeworICAgIH0KKworICAgIGJvb2wgY29u
dGV4dE1lbnUoV2ViS2l0Q29udGV4dE1lbnUqIGNvbnRleHRNZW51LCBHZGtFdmVudCosIFdlYktp
dEhpdFRlc3RSZXN1bHQqKQorICAgIHsKKyAgICAgICAgcXVpdE1haW5Mb29wKCk7CisgICAgICAg
IC8vIFNob3cgdGhlIGRlZmF1bHQgY29udGV4dCBtZW51LgorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgdm9pZCBjb250ZXh0TWVudURpc21pc3NlZCgpCisgICAgeworICAgICAg
ICBtX2Rpc21pc3NlZCA9IHRydWU7CisgICAgICAgIENvbnRleHRNZW51VGVzdDo6Y29udGV4dE1l
bnVEaXNtaXNzZWQoKTsKKyAgICB9CisKKyAgICB2b2lkIHNob3dDb250ZXh0TWVudUFuZFdhaXRV
bnRpbERpc21pc3NlZCgpCisgICAgeworICAgICAgICBzaG93Q29udGV4dE1lbnVBbmRXYWl0VW50
aWxGaW5pc2hlZCgpOworICAgICAgICBkaXNtaXNzQ29udGV4dE1lbnVBbmRXYWl0VW50aWxGaW5p
c2hlZCgpOworICAgIH0KKworICAgIGJvb2wgbV9kaXNtaXNzZWQ7Cit9OworCitzdGF0aWMgdm9p
ZCB0ZXN0Q29udGV4dE1lbnVEaXNtaXNzZWQoQ29udGV4dE1lbnVEaXNtaXNzZWRUZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1h
cHBlZCgpOworCisgICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxib2R5PldlYktpdEdUSysgQ29u
dGV4dCBtZW51IHRlc3RzPC9ib2R5PjwvaHRtbD4iLCAiZmlsZTovLy8iKTsKKyAgICB0ZXN0LT53
YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3QtPnNob3dDb250ZXh0TWVudUFuZFdh
aXRVbnRpbERpc21pc3NlZCgpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fZGlzbWlzc2VkKTsKK30K
KworY2xhc3MgQ29udGV4dE1lbnVTbWFydFNlcGFyYXRvcnNUZXN0OiBwdWJsaWMgQ29udGV4dE1l
bnVUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKENvbnRleHRNZW51
U21hcnRTZXBhcmF0b3JzVGVzdCk7CisKKyAgICBib29sIGNvbnRleHRNZW51KFdlYktpdENvbnRl
eHRNZW51KiBjb250ZXh0TWVudSwgR2RrRXZlbnQqLCBXZWJLaXRIaXRUZXN0UmVzdWx0KikKKyAg
ICB7CisgICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfcmVtb3ZlX2FsbChjb250ZXh0TWVudSk7
CisKKyAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBlbmQoY29udGV4dE1lbnUsIHdlYmtp
dF9jb250ZXh0X21lbnVfaXRlbV9uZXdfc2VwYXJhdG9yKCkpOworICAgICAgICB3ZWJraXRfY29u
dGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25l
d19zZXBhcmF0b3IoKSk7CisgICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRl
eHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X2Zyb21fc3RvY2tfYWN0aW9uKFdF
QktJVF9DT05URVhUX01FTlVfQUNUSU9OX0dPX0JBQ0spKTsKKyAgICAgICAgd2Via2l0X2NvbnRl
eHRfbWVudV9hcHBlbmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdf
ZnJvbV9zdG9ja19hY3Rpb24oV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fR09fRk9SV0FSRCkp
OworICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0
X2NvbnRleHRfbWVudV9pdGVtX25ld19zZXBhcmF0b3IoKSk7CisgICAgICAgIHdlYmtpdF9jb250
ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3
X3NlcGFyYXRvcigpKTsKKyAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBlbmQoY29udGV4
dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfZnJvbV9zdG9ja19hY3Rpb24oV0VC
S0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWSkpOworICAgICAgICB3ZWJraXRfY29udGV4dF9t
ZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19zZXBh
cmF0b3IoKSk7CisgICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51
LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X2Zyb21fc3RvY2tfYWN0aW9uKFdFQktJVF9D
T05URVhUX01FTlVfQUNUSU9OX0lOU1BFQ1RfRUxFTUVOVCkpOworICAgICAgICB3ZWJraXRfY29u
dGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25l
d19zZXBhcmF0b3IoKSk7CisgICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRl
eHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X3NlcGFyYXRvcigpKTsKKworICAg
ICAgICBxdWl0TWFpbkxvb3AoKTsKKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgR3RrTWVudSogc2hvd0NvbnRleHRNZW51QW5kR2V0R3RrTWVudSgpCisgICAgeworICAgICAg
ICBzaG93Q29udGV4dE1lbnVBbmRXYWl0VW50aWxGaW5pc2hlZCgpOworICAgICAgICByZXR1cm4g
Z2V0UG9wdXBNZW51KCk7CisgICAgfQorfTsKKworc3RhdGljIHZvaWQgdGVzdENvbnRleHRNZW51
U21hcnRTZXBhcmF0b3JzKENvbnRleHRNZW51U21hcnRTZXBhcmF0b3JzVGVzdCogdGVzdCwgZ2Nv
bnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQo
KTsKKworICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keT5XZWJLaXRHVEsrIENvbnRleHQg
bWVudSB0ZXN0czwvYm9keT48L2h0bWw+IiwgImZpbGU6Ly8vIik7CisgICAgdGVzdC0+d2FpdFVu
dGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBHdGtNZW51KiBtZW51ID0gdGVzdC0+c2hvd0NvbnRl
eHRNZW51QW5kR2V0R3RrTWVudSgpOworICAgIGdfYXNzZXJ0KG1lbnUpOworCisgICAgLy8gTGVh
ZGluZyBhbmQgdHJhaWxpbmcgc2VwYXJhdG9ycyBhcmUgbm90IGFkZGVkIHRvIHRoZSBjb250ZXh0
IG1lbnUuCisgICAgR093blB0cjxHTGlzdD4gbWVudUl0ZW1zKGd0a19jb250YWluZXJfZ2V0X2No
aWxkcmVuKEdUS19DT05UQUlORVIobWVudSkpKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGdfbGlz
dF9sZW5ndGgobWVudUl0ZW1zLmdldCgpKSwgPT0sIDYpOworICAgIEd0a1dpZGdldCogaXRlbSA9
IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgMCkpOworICAgIGdf
YXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0X2dl
dF92aXNpYmxlKGl0ZW0pKTsKKyAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEo
bWVudUl0ZW1zLmdldCgpLCAxKSk7CisgICAgZ19hc3NlcnQoIUdUS19JU19TRVBBUkFUT1JfTUVO
VV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOworICAgIGl0ZW0g
PSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDIpKTsKKyAgICBn
X2Fzc2VydChHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0X2dl
dF92aXNpYmxlKGl0ZW0pKTsKKyAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEo
bWVudUl0ZW1zLmdldCgpLCAzKSk7CisgICAgZ19hc3NlcnQoIUdUS19JU19TRVBBUkFUT1JfTUVO
VV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOworICAgIGl0ZW0g
PSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDQpKTsKKyAgICBn
X2Fzc2VydChHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0X2dl
dF92aXNpYmxlKGl0ZW0pKTsKKyAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEo
bWVudUl0ZW1zLmdldCgpLCA1KSk7CisgICAgZ19hc3NlcnQoIUdUS19JU19TRVBBUkFUT1JfTUVO
VV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOworCisgICAgLy8g
SGlkaW5nIGEgbWVudSBpdGVtIGJldHdlZW4gdHdvIHNlcGFyYXRvcnMgaGlkZXMgdGhlIGZvbGxv
d2luZyBzZXBhcmF0b3IuCisgICAgR3RrQWN0aW9uKiBhY3Rpb24gPSBndGtfYWN0aXZhdGFibGVf
Z2V0X3JlbGF0ZWRfYWN0aW9uKEdUS19BQ1RJVkFUQUJMRShnX2xpc3RfbnRoX2RhdGEobWVudUl0
ZW1zLmdldCgpLCAzKSkpOworICAgIGd0a19hY3Rpb25fc2V0X3Zpc2libGUoYWN0aW9uLCBGQUxT
RSk7CisgICAgbWVudUl0ZW1zLnNldChndGtfY29udGFpbmVyX2dldF9jaGlsZHJlbihHVEtfQ09O
VEFJTkVSKG1lbnUpKSk7CisgICAgZ19hc3NlcnRfY21wdWludChnX2xpc3RfbGVuZ3RoKG1lbnVJ
dGVtcy5nZXQoKSksID09LCA2KTsKKyAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2Rh
dGEobWVudUl0ZW1zLmdldCgpLCAwKSk7CisgICAgZ19hc3NlcnQoIUdUS19JU19TRVBBUkFUT1Jf
TUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOworICAgIGl0
ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDEpKTsKKyAg
ICBnX2Fzc2VydCghR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdl
dF9nZXRfdmlzaWJsZShpdGVtKSk7CisgICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9k
YXRhKG1lbnVJdGVtcy5nZXQoKSwgMikpOworICAgIGdfYXNzZXJ0KEdUS19JU19TRVBBUkFUT1Jf
TUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOworICAgIGl0
ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDMpKTsKKyAg
ICBnX2Fzc2VydCghR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgIWd0a193aWRn
ZXRfZ2V0X3Zpc2libGUoaXRlbSkpOworICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhf
ZGF0YShtZW51SXRlbXMuZ2V0KCksIDQpKTsKKyAgICBnX2Fzc2VydChHVEtfSVNfU0VQQVJBVE9S
X01FTlVfSVRFTShpdGVtKSAmJiAhZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7CisgICAg
aXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgNSkpOwor
ICAgIGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAmJiBndGtfd2lk
Z2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKKyAgICBndGtfYWN0aW9uX3NldF92aXNpYmxlKGFjdGlv
biwgVFJVRSk7CisKKyAgICAvLyBTaG93aW5nIGFuIGFjdGlvbiBiZXR3ZWVuIHR3byBzZXBhcmF0
b3JzIHNob3dzIHRoZSBoaWRkZW4gc2VwYXJhdG9yLgorICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdf
bGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDApKTsKKyAgICBnX2Fzc2VydCghR1RLX0lT
X1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVt
KSk7CisgICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQo
KSwgMSkpOworICAgIGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAm
JiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKKyAgICBpdGVtID0gR1RLX1dJREdFVChn
X2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCAyKSk7CisgICAgZ19hc3NlcnQoR1RLX0lT
X1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVt
KSk7CisgICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQo
KSwgMykpOworICAgIGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAm
JiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKKyAgICBpdGVtID0gR1RLX1dJREdFVChn
X2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCA0KSk7CisgICAgZ19hc3NlcnQoR1RLX0lT
X1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVt
KSk7CisgICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQo
KSwgNSkpOworICAgIGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAm
JiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKKworICAgIC8vIFRyYWlsaW5nIHNlcGFy
YXRvcnMgYXJlIGhpZGRlbiB0b28uCisgICAgYWN0aW9uID0gZ3RrX2FjdGl2YXRhYmxlX2dldF9y
ZWxhdGVkX2FjdGlvbihHVEtfQUNUSVZBVEFCTEUoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5n
ZXQoKSwgNSkpKTsKKyAgICBndGtfYWN0aW9uX3NldF92aXNpYmxlKGFjdGlvbiwgRkFMU0UpOwor
ICAgIG1lbnVJdGVtcy5zZXQoZ3RrX2NvbnRhaW5lcl9nZXRfY2hpbGRyZW4oR1RLX0NPTlRBSU5F
UihtZW51KSkpOworICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRl
bXMuZ2V0KCksIDApKTsKKyAgICBnX2Fzc2VydCghR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0o
aXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7CisgICAgaXRlbSA9IEdUS19X
SURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgMSkpOworICAgIGdfYXNzZXJ0
KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0X2dldF92aXNp
YmxlKGl0ZW0pKTsKKyAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0
ZW1zLmdldCgpLCAyKSk7CisgICAgZ19hc3NlcnQoR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0o
aXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7CisgICAgaXRlbSA9IEdUS19X
SURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgMykpOworICAgIGdfYXNzZXJ0
KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0X2dldF92aXNp
YmxlKGl0ZW0pKTsKKyAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0
ZW1zLmdldCgpLCA0KSk7CisgICAgZ19hc3NlcnQoR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0o
aXRlbSkgJiYgIWd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOworICAgIGl0ZW0gPSBHVEtf
V0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDUpKTsKKyAgICBnX2Fzc2Vy
dCghR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgIWd0a193aWRnZXRfZ2V0X3Zp
c2libGUoaXRlbSkpOworfQorCit2b2lkIGJlZm9yZUFsbCgpCit7CisgICAgQ29udGV4dE1lbnVE
ZWZhdWx0VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImRlZmF1bHQtbWVudSIsIHRlc3RDb250
ZXh0TWVudURlZmF1bHRNZW51KTsKKyAgICBDb250ZXh0TWVudUN1c3RvbVRlc3Q6OmFkZCgiV2Vi
S2l0V2ViVmlldyIsICJwb3B1bGF0ZS1tZW51IiwgdGVzdENvbnRleHRNZW51UG9wdWxhdGVNZW51
KTsKKyAgICBDb250ZXh0TWVudUN1c3RvbUZ1bGxUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAi
Y3VzdG9tLW1lbnUiLCB0ZXN0Q29udGV4dE1lbnVDdXN0b21NZW51KTsKKyAgICBDb250ZXh0TWVu
dURpc2FibGVkVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImRpc2FibGUtbWVudSIsIHRlc3RD
b250ZXh0TWVudURpc2FibGVNZW51KTsKKyAgICBDb250ZXh0TWVudVN1Ym1lbnVUZXN0OjphZGQo
IldlYktpdFdlYlZpZXciLCAic3VibWVudSIsIHRlc3RDb250ZXh0TWVudVN1Yk1lbnUpOworICAg
IENvbnRleHRNZW51RGlzbWlzc2VkVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgIm1lbnUtZGlz
bWlzc2VkIiwgdGVzdENvbnRleHRNZW51RGlzbWlzc2VkKTsKKyAgICBDb250ZXh0TWVudVNtYXJ0
U2VwYXJhdG9yc1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJzbWFydC1zZXBhcmF0b3JzIiwg
dGVzdENvbnRleHRNZW51U21hcnRTZXBhcmF0b3JzKTsKK30KKwordm9pZCBhZnRlckFsbCgpCit7
Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVz
dENvb2tpZU1hbmFnZXIuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3Rr
L1Rlc3RDb29raWVNYW5hZ2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5hZGM2YjViCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyR3RrL1Rlc3RDb29raWVNYW5hZ2VyLmNwcApAQCAtMCwwICsxLDMzMSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
bmNsdWRlICJXZWJLaXRUZXN0U2VydmVyLmgiCisjaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKKyNp
bmNsdWRlIDxnbGliL2dzdGRpby5oPgorCitzdGF0aWMgV2ViS2l0VGVzdFNlcnZlcioga1NlcnZl
cjsKK3N0YXRpYyBjaGFyKiBrVGVtcERpcmVjdG9yeTsKKworc3RhdGljIGNvbnN0IGNoYXIqIGtG
aXJzdFBhcnR5RG9tYWluID0gIjEyNy4wLjAuMSI7CitzdGF0aWMgY29uc3QgY2hhcioga1RoaXJk
UGFydHlEb21haW4gPSAibG9jYWxob3N0IjsKK3N0YXRpYyBjb25zdCBjaGFyKiBrSW5kZXhIdG1s
Rm9ybWF0ID0KKyAgICAiPGh0bWw+PGJvZHk+IgorICAgICIgPHA+V2ViS2l0R1RLKyBDb29raWUg
TWFuYWdlciB0ZXN0PC9wPiIKKyAgICAiIDxpbWcgc3JjPSdodHRwOi8vbG9jYWxob3N0OiV1L2lt
YWdlLnBuZycgd2lkdGg9NSBoZWlnaHQ9NT48L2ltZz4iCisgICAgIjwvYm9keT48L2h0bWw+IjsK
KworY2xhc3MgQ29va2llTWFuYWdlclRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7CitwdWJsaWM6
CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShDb29raWVNYW5hZ2VyVGVzdCk7CisKKyAgICBz
dGF0aWMgdm9pZCBjb29raWVzQ2hhbmdlZENhbGxiYWNrKFdlYktpdENvb2tpZU1hbmFnZXIqLCBD
b29raWVNYW5hZ2VyVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPm1fY29va2llc0No
YW5nZWQgPSB0cnVlOworICAgICAgICBpZiAodGVzdC0+bV9maW5pc2hMb29wV2hlbkNvb2tpZXND
aGFuZ2UpCisgICAgICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOwor
ICAgIH0KKworICAgIENvb2tpZU1hbmFnZXJUZXN0KCkKKyAgICAgICAgOiBXZWJWaWV3VGVzdCgp
CisgICAgICAgICwgbV9jb29raWVNYW5hZ2VyKHdlYmtpdF93ZWJfY29udGV4dF9nZXRfY29va2ll
X21hbmFnZXIod2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KG1fd2ViVmlldykpKQorICAgICAg
ICAsIG1fYWNjZXB0UG9saWN5KFdFQktJVF9DT09LSUVfUE9MSUNZX0FDQ0VQVF9OT19USElSRF9Q
QVJUWSkKKyAgICAgICAgLCBtX2RvbWFpbnMoMCkKKyAgICAgICAgLCBtX2Nvb2tpZXNDaGFuZ2Vk
KGZhbHNlKQorICAgICAgICAsIG1fZmluaXNoTG9vcFdoZW5Db29raWVzQ2hhbmdlKGZhbHNlKQor
ICAgIHsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX2Nvb2tpZU1hbmFnZXIsICJjaGFuZ2Vk
IiwgR19DQUxMQkFDSyhjb29raWVzQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CisgICAgfQorCisg
ICAgfkNvb2tpZU1hbmFnZXJUZXN0KCkKKyAgICB7CisgICAgICAgIGdfc3RyZnJlZXYobV9kb21h
aW5zKTsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fY29v
a2llTWFuYWdlciwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7CisgICAg
ICAgIGlmIChtX2Nvb2tpZXNUZXh0RmlsZSkKKyAgICAgICAgICAgIGdfdW5saW5rKG1fY29va2ll
c1RleHRGaWxlLmdldCgpKTsKKyAgICAgICAgaWYgKG1fY29va2llc1NRTGl0ZUZpbGUpCisgICAg
ICAgICAgICBnX3VubGluayhtX2Nvb2tpZXNTUUxpdGVGaWxlLmdldCgpKTsKKyAgICB9CisKKyAg
ICB2b2lkIHNldFBlcnNpc3RlbnRTdG9yYWdlKFdlYktpdENvb2tpZVBlcnNpc3RlbnRTdG9yYWdl
IHN0b3JhZ2UpCisgICAgeworICAgICAgICBjb25zdCBjaGFyKiBmaWxlbmFtZSA9IDA7CisgICAg
ICAgIHN3aXRjaCAoc3RvcmFnZSkgeworICAgICAgICBjYXNlIFdFQktJVF9DT09LSUVfUEVSU0lT
VEVOVF9TVE9SQUdFX1RFWFQ6CisgICAgICAgICAgICBpZiAoIW1fY29va2llc1RleHRGaWxlKQor
ICAgICAgICAgICAgICAgIG1fY29va2llc1RleHRGaWxlLnNldChnX2J1aWxkX2ZpbGVuYW1lKGtU
ZW1wRGlyZWN0b3J5LCAiY29va2llcy50eHQiLCBOVUxMKSk7CisgICAgICAgICAgICBmaWxlbmFt
ZSA9IG1fY29va2llc1RleHRGaWxlLmdldCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgV0VCS0lUX0NPT0tJRV9QRVJTSVNURU5UX1NUT1JBR0VfU1FMSVRFOgorICAgICAgICAg
ICAgaWYgKCFtX2Nvb2tpZXNTUUxpdGVGaWxlKQorICAgICAgICAgICAgICAgIG1fY29va2llc1NR
TGl0ZUZpbGUuc2V0KGdfYnVpbGRfZmlsZW5hbWUoa1RlbXBEaXJlY3RvcnksICJjb29raWVzLmRi
IiwgTlVMTCkpOworICAgICAgICAgICAgZmlsZW5hbWUgPSBtX2Nvb2tpZXNTUUxpdGVGaWxlLmdl
dCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBn
X2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgICAgICB9CisgICAgICAgIHdlYmtpdF9jb29raWVf
bWFuYWdlcl9zZXRfcGVyc2lzdGVudF9zdG9yYWdlKG1fY29va2llTWFuYWdlciwgZmlsZW5hbWUs
IHN0b3JhZ2UpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGdldEFjY2VwdFBvbGljeVJlYWR5
Q2FsbGJhY2soR09iamVjdCogb2JqZWN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIg
dXNlckRhdGEpCisgICAgeworICAgICAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgICAg
IFdlYktpdENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kgPSB3ZWJraXRfY29va2llX21hbmFnZXJf
Z2V0X2FjY2VwdF9wb2xpY3lfZmluaXNoKFdFQktJVF9DT09LSUVfTUFOQUdFUihvYmplY3QpLCBy
ZXN1bHQsICZlcnJvci5vdXRQdHIoKSk7CisgICAgICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7
CisKKyAgICAgICAgQ29va2llTWFuYWdlclRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxDb29raWVN
YW5hZ2VyVGVzdCo+KHVzZXJEYXRhKTsKKyAgICAgICAgdGVzdC0+bV9hY2NlcHRQb2xpY3kgPSBw
b2xpY3k7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7CisgICAg
fQorCisgICAgV2ViS2l0Q29va2llQWNjZXB0UG9saWN5IGdldEFjY2VwdFBvbGljeSgpCisgICAg
eworICAgICAgICBtX2FjY2VwdFBvbGljeSA9IFdFQktJVF9DT09LSUVfUE9MSUNZX0FDQ0VQVF9O
T19USElSRF9QQVJUWTsKKyAgICAgICAgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9hY2NlcHRf
cG9saWN5KG1fY29va2llTWFuYWdlciwgMCwgZ2V0QWNjZXB0UG9saWN5UmVhZHlDYWxsYmFjaywg
dGhpcyk7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKworICAgICAgICBy
ZXR1cm4gbV9hY2NlcHRQb2xpY3k7CisgICAgfQorCisgICAgdm9pZCBzZXRBY2NlcHRQb2xpY3ko
V2ViS2l0Q29va2llQWNjZXB0UG9saWN5IHBvbGljeSkKKyAgICB7CisgICAgICAgIHdlYmtpdF9j
b29raWVfbWFuYWdlcl9zZXRfYWNjZXB0X3BvbGljeShtX2Nvb2tpZU1hbmFnZXIsIHBvbGljeSk7
CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZ2V0RG9tYWluc1JlYWR5Q2FsbGJhY2soR09iamVj
dCogb2JqZWN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEpCisgICAg
eworICAgICAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgICAgIGNoYXIqKiBkb21haW5z
ID0gd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9kb21haW5zX3dpdGhfY29va2llc19maW5pc2go
V0VCS0lUX0NPT0tJRV9NQU5BR0VSKG9iamVjdCksIHJlc3VsdCwgJmVycm9yLm91dFB0cigpKTsK
KyAgICAgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKworICAgICAgICBDb29raWVNYW5hZ2Vy
VGVzdCogdGVzdCA9IHN0YXRpY19jYXN0PENvb2tpZU1hbmFnZXJUZXN0Kj4odXNlckRhdGEpOwor
ICAgICAgICB0ZXN0LT5tX2RvbWFpbnMgPSBkb21haW5zOworICAgICAgICBnX21haW5fbG9vcF9x
dWl0KHRlc3QtPm1fbWFpbkxvb3ApOworICAgIH0KKworICAgIGNoYXIqKiBnZXREb21haW5zKCkK
KyAgICB7CisgICAgICAgIGdfc3RyZnJlZXYobV9kb21haW5zKTsKKyAgICAgICAgbV9kb21haW5z
ID0gMDsKKyAgICAgICAgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9kb21haW5zX3dpdGhfY29v
a2llcyhtX2Nvb2tpZU1hbmFnZXIsIDAsIGdldERvbWFpbnNSZWFkeUNhbGxiYWNrLCB0aGlzKTsK
KyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworCisgICAgICAgIHJldHVybiBt
X2RvbWFpbnM7CisgICAgfQorCisgICAgYm9vbCBoYXNEb21haW4oY29uc3QgY2hhciogZG9tYWlu
KQorICAgIHsKKyAgICAgICAgaWYgKCFtX2RvbWFpbnMpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IG1fZG9tYWluc1tpXTsgKytpKQorICAg
ICAgICAgICAgaWYgKGdfc3RyX2VxdWFsKG1fZG9tYWluc1tpXSwgZG9tYWluKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IHZvaWQgZGVsZXRlQ29va2llc0ZvckRvbWFpbihjb25zdCBjaGFyKiBkb21haW4pCisgICAgewor
ICAgICAgICB3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZXNfZm9yX2RvbWFpbiht
X2Nvb2tpZU1hbmFnZXIsIGRvbWFpbik7CisgICAgfQorCisgICAgdm9pZCBkZWxldGVBbGxDb29r
aWVzKCkKKyAgICB7CisgICAgICAgIHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfYWxsX2Nv
b2tpZXMobV9jb29raWVNYW5hZ2VyKTsKKyAgICB9CisKKyAgICB2b2lkIHdhaXRVbnRpbENvb2tp
ZXNDaGFuZ2VkKCkKKyAgICB7CisgICAgICAgIG1fY29va2llc0NoYW5nZWQgPSBmYWxzZTsKKyAg
ICAgICAgbV9maW5pc2hMb29wV2hlbkNvb2tpZXNDaGFuZ2UgPSB0cnVlOworICAgICAgICBnX21h
aW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgICAgIG1fZmluaXNoTG9vcFdoZW5Db29raWVz
Q2hhbmdlID0gZmFsc2U7CisgICAgfQorCisgICAgV2ViS2l0Q29va2llTWFuYWdlciogbV9jb29r
aWVNYW5hZ2VyOworICAgIFdlYktpdENvb2tpZUFjY2VwdFBvbGljeSBtX2FjY2VwdFBvbGljeTsK
KyAgICBjaGFyKiogbV9kb21haW5zOworICAgIGJvb2wgbV9jb29raWVzQ2hhbmdlZDsKKyAgICBi
b29sIG1fZmluaXNoTG9vcFdoZW5Db29raWVzQ2hhbmdlOworICAgIEdPd25QdHI8Y2hhcj4gbV9j
b29raWVzVGV4dEZpbGU7CisgICAgR093blB0cjxjaGFyPiBtX2Nvb2tpZXNTUUxpdGVGaWxlOwor
fTsKKworc3RhdGljIHZvaWQgdGVzdENvb2tpZU1hbmFnZXJBY2NlcHRQb2xpY3koQ29va2llTWFu
YWdlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8gRGVmYXVsdCBwb2xpY3kg
aXMgTk9fVEhJUkRfUEFSVFkuCisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPmdldEFjY2VwdFBv
bGljeSgpLCA9PSwgV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX05PX1RISVJEX1BBUlRZKTsK
KyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbmRleC5odG1sIiku
ZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBjaGFyKiog
ZG9tYWlucyA9IHRlc3QtPmdldERvbWFpbnMoKTsKKyAgICBnX2Fzc2VydChkb21haW5zKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aChkb21haW5zKSwgPT0sIDEpOworICAgIGdf
YXNzZXJ0X2NtcHN0cihkb21haW5zWzBdLCA9PSwga0ZpcnN0UGFydHlEb21haW4pOworICAgIHRl
c3QtPmRlbGV0ZUFsbENvb2tpZXMoKTsKKworICAgIHRlc3QtPnNldEFjY2VwdFBvbGljeShXRUJL
SVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfQUxXQVlTKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVz
dC0+Z2V0QWNjZXB0UG9saWN5KCksID09LCBXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfQUxX
QVlTKTsKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbmRleC5o
dG1sIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBk
b21haW5zID0gdGVzdC0+Z2V0RG9tYWlucygpOworICAgIGdfYXNzZXJ0KGRvbWFpbnMpOworICAg
IGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKGRvbWFpbnMpLCA9PSwgMik7CisgICAgZ19h
c3NlcnQodGVzdC0+aGFzRG9tYWluKGtGaXJzdFBhcnR5RG9tYWluKSk7CisgICAgZ19hc3NlcnQo
dGVzdC0+aGFzRG9tYWluKGtUaGlyZFBhcnR5RG9tYWluKSk7CisgICAgdGVzdC0+ZGVsZXRlQWxs
Q29va2llcygpOworCisgICAgdGVzdC0+c2V0QWNjZXB0UG9saWN5KFdFQktJVF9DT09LSUVfUE9M
SUNZX0FDQ0VQVF9ORVZFUik7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPmdldEFjY2VwdFBv
bGljeSgpLCA9PSwgV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX05FVkVSKTsKKyAgICB0ZXN0
LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbmRleC5odG1sIikuZGF0YSgpKTsK
KyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBkb21haW5zID0gdGVzdC0+
Z2V0RG9tYWlucygpOworICAgIGdfYXNzZXJ0KGRvbWFpbnMpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChnX3N0cnZfbGVuZ3RoKGRvbWFpbnMpLCA9PSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RD
b29raWVNYW5hZ2VyRGVsZXRlQ29va2llcyhDb29raWVNYW5hZ2VyVGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5zZXRBY2NlcHRQb2xpY3koV0VCS0lUX0NPT0tJRV9QT0xJ
Q1lfQUNDRVBUX0FMV0FZUyk7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQ
YXRoKCIvaW5kZXguaHRtbCIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlz
aGVkKCk7CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlu
cygpKSwgPT0sIDIpOworCisgICAgLy8gRGVsZXRlIGZpcnN0IHBhcnR5IGNvb2tpZXMuCisgICAg
dGVzdC0+ZGVsZXRlQ29va2llc0ZvckRvbWFpbihrRmlyc3RQYXJ0eURvbWFpbik7CisgICAgZ19h
c3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlucygpKSwgPT0sIDEpOwor
CisgICAgLy8gRGVsZXRlIHRoaXJkIHBhcnR5IGNvb2tpZXMuCisgICAgdGVzdC0+ZGVsZXRlQ29v
a2llc0ZvckRvbWFpbihrVGhpcmRQYXJ0eURvbWFpbik7CisgICAgZ19hc3NlcnRfY21waW50KGdf
c3Rydl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlucygpKSwgPT0sIDApOworCisgICAgdGVzdC0+bG9h
ZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvaW5kZXguaHRtbCIpLmRhdGEoKSk7CisgICAg
dGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Ry
dl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlucygpKSwgPT0sIDIpOworCisgICAgLy8gRGVsZXRlIGFs
bCBjb29raWVzLgorICAgIHRlc3QtPmRlbGV0ZUFsbENvb2tpZXMoKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0LT5nZXREb21haW5zKCkpLCA9PSwgMCk7Cit9CisKK3N0
YXRpYyB2b2lkIHRlc3RDb29raWVNYW5hZ2VyQ29va2llc0NoYW5nZWQoQ29va2llTWFuYWdlclRl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgZ19hc3NlcnQoIXRlc3QtPm1fY29va2ll
c0NoYW5nZWQpOworICAgIHRlc3QtPnNldEFjY2VwdFBvbGljeShXRUJLSVRfQ09PS0lFX1BPTElD
WV9BQ0NFUFRfQUxXQVlTKTsKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBh
dGgoIi9pbmRleC5odG1sIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNo
ZWQoKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX2Nvb2tpZXNDaGFuZ2VkKTsKKworICAgIHRlc3Qt
PmRlbGV0ZUNvb2tpZXNGb3JEb21haW4oa0ZpcnN0UGFydHlEb21haW4pOworICAgIHRlc3QtPndh
aXRVbnRpbENvb2tpZXNDaGFuZ2VkKCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9jb29raWVzQ2hh
bmdlZCk7CisKKyAgICB0ZXN0LT5kZWxldGVBbGxDb29raWVzKCk7CisgICAgdGVzdC0+d2FpdFVu
dGlsQ29va2llc0NoYW5nZWQoKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX2Nvb2tpZXNDaGFuZ2Vk
KTsKK30KKworc3RhdGljIHZvaWQgdGVzdENvb2tpZU1hbmFnZXJQZXJzaXN0ZW50U3RvcmFnZShD
b29raWVNYW5hZ2VyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5zZXRB
Y2NlcHRQb2xpY3koV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX0FMV0FZUyk7CisKKyAgICAv
LyBUZXh0IHN0b3JhZ2UgdXNpbmcgYSBuZXcgZmlsZS4KKyAgICB0ZXN0LT5zZXRQZXJzaXN0ZW50
U3RvcmFnZShXRUJLSVRfQ09PS0lFX1BFUlNJU1RFTlRfU1RPUkFHRV9URVhUKTsKKyAgICBjaGFy
KiogZG9tYWlucyA9IHRlc3QtPmdldERvbWFpbnMoKTsKKyAgICBnX2Fzc2VydChkb21haW5zKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aChkb21haW5zKSwgPT0sIDApOworCisg
ICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvaW5kZXguaHRtbCIpLmRh
dGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnQo
dGVzdC0+bV9jb29raWVzQ2hhbmdlZCk7CisgICAgZG9tYWlucyA9IHRlc3QtPmdldERvbWFpbnMo
KTsKKyAgICBnX2Fzc2VydChkb21haW5zKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xl
bmd0aChkb21haW5zKSwgPT0sIDIpOworCisKKyAgICAvLyBTUUxpdGUgc3RvcmFnZSB1c2luZyBh
IG5ldyBmaWxlLgorICAgIHRlc3QtPnNldFBlcnNpc3RlbnRTdG9yYWdlKFdFQktJVF9DT09LSUVf
UEVSU0lTVEVOVF9TVE9SQUdFX1NRTElURSk7CisgICAgZG9tYWlucyA9IHRlc3QtPmdldERvbWFp
bnMoKTsKKyAgICBnX2Fzc2VydChkb21haW5zKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2
X2xlbmd0aChkb21haW5zKSwgPT0sIDApOworCisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5n
ZXRVUklGb3JQYXRoKCIvaW5kZXguaHRtbCIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGls
TG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9jb29raWVzQ2hhbmdlZCk7Cisg
ICAgZG9tYWlucyA9IHRlc3QtPmdldERvbWFpbnMoKTsKKyAgICBnX2Fzc2VydChkb21haW5zKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aChkb21haW5zKSwgPT0sIDIpOworCisg
ICAgLy8gVGV4dCBzdG9yYWdlIHVzaW5nIGFuIGV4aXN0aW5nIGZpbGUuCisgICAgdGVzdC0+c2V0
UGVyc2lzdGVudFN0b3JhZ2UoV0VCS0lUX0NPT0tJRV9QRVJTSVNURU5UX1NUT1JBR0VfVEVYVCk7
CisgICAgZG9tYWlucyA9IHRlc3QtPmdldERvbWFpbnMoKTsKKyAgICBnX2Fzc2VydChkb21haW5z
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aChkb21haW5zKSwgPT0sIDIpOwor
ICAgIHRlc3QtPmRlbGV0ZUFsbENvb2tpZXMoKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2
X2xlbmd0aCh0ZXN0LT5nZXREb21haW5zKCkpLCA9PSwgMCk7CisKKyAgICAvLyBTUUxpdGUgc3Rv
cmFnZSB3aXRoIGFuIGV4aXN0aW5nIGZpbGUuCisgICAgdGVzdC0+c2V0UGVyc2lzdGVudFN0b3Jh
Z2UoV0VCS0lUX0NPT0tJRV9QRVJTSVNURU5UX1NUT1JBR0VfU1FMSVRFKTsKKyAgICBkb21haW5z
ID0gdGVzdC0+Z2V0RG9tYWlucygpOworICAgIGdfYXNzZXJ0KGRvbWFpbnMpOworICAgIGdfYXNz
ZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKGRvbWFpbnMpLCA9PSwgMik7CisgICAgdGVzdC0+ZGVs
ZXRlQWxsQ29va2llcygpOworICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKHRlc3Qt
PmdldERvbWFpbnMoKSksID09LCAwKTsKK30KKworc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2so
U291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0
aCwgR0hhc2hUYWJsZSosIFNvdXBDbGllbnRDb250ZXh0KiwgZ3BvaW50ZXIpCit7CisgICAgaWYg
KG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKKyAgICAgICAgc291cF9tZXNz
YWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3Nh
Z2UsIFNPVVBfU1RBVFVTX09LKTsKKyAgICBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9pbmRleC5o
dG1sIikpIHsKKyAgICAgICAgY2hhciogaW5kZXhIdG1sID0gZ19zdHJkdXBfcHJpbnRmKGtJbmRl
eEh0bWxGb3JtYXQsIHNvdXBfc2VydmVyX2dldF9wb3J0KHNlcnZlcikpOworICAgICAgICBzb3Vw
X21lc3NhZ2VfaGVhZGVyc19yZXBsYWNlKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJTZXQt
Q29va2llIiwgImZvbz1iYXI7IE1heC1BZ2U9NjAiKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2Jv
ZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGluZGV4
SHRtbCwgc3RybGVuKGluZGV4SHRtbCkpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0
aCwgIi9pbWFnZS5wbmciKSkKKyAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfcmVwbGFjZSht
ZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiU2V0LUNvb2tpZSIsICJiYXo9cXV4OyBNYXgtQWdl
PTYwIik7CisgICAgZWxzZQorICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdl
LCBTT1VQX1NUQVRVU19OT1RfRk9VTkQpOworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRl
KG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOworfQorCit2b2lkIGJlZm9yZUFsbCgpCit7CisgICAg
a1NlcnZlciA9IG5ldyBXZWJLaXRUZXN0U2VydmVyKCk7CisgICAga1NlcnZlci0+cnVuKHNlcnZl
ckNhbGxiYWNrKTsKKworICAgIGtUZW1wRGlyZWN0b3J5ID0gZ19kaXJfbWFrZV90bXAoIldlYktp
dDJUZXN0cy1YWFhYWFgiLCAwKTsKKyAgICBnX2Fzc2VydChrVGVtcERpcmVjdG9yeSk7CisKKyAg
ICBDb29raWVNYW5hZ2VyVGVzdDo6YWRkKCJXZWJLaXRDb29raWVNYW5hZ2VyIiwgImFjY2VwdC1w
b2xpY3kiLCB0ZXN0Q29va2llTWFuYWdlckFjY2VwdFBvbGljeSk7CisgICAgQ29va2llTWFuYWdl
clRlc3Q6OmFkZCgiV2ViS2l0Q29va2llTWFuYWdlciIsICJkZWxldGUtY29va2llcyIsIHRlc3RD
b29raWVNYW5hZ2VyRGVsZXRlQ29va2llcyk7CisgICAgQ29va2llTWFuYWdlclRlc3Q6OmFkZCgi
V2ViS2l0Q29va2llTWFuYWdlciIsICJjb29raWVzLWNoYW5nZWQiLCB0ZXN0Q29va2llTWFuYWdl
ckNvb2tpZXNDaGFuZ2VkKTsKKyAgICBDb29raWVNYW5hZ2VyVGVzdDo6YWRkKCJXZWJLaXRDb29r
aWVNYW5hZ2VyIiwgInBlcnNpc3RlbnQtc3RvcmFnZSIsIHRlc3RDb29raWVNYW5hZ2VyUGVyc2lz
dGVudFN0b3JhZ2UpOworfQorCit2b2lkIGFmdGVyQWxsKCkKK3sKKyAgICBkZWxldGUga1NlcnZl
cjsKKyAgICBnX3JtZGlyKGtUZW1wRGlyZWN0b3J5KTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0RE9NRE9NV2luZG93LmNwcCBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0RE9NRE9NV2luZG93LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGM2ZTEwCi0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RET01ET01XaW5kb3cu
Y3BwCkBAIC0wLDAgKzEsMTUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBT
LkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJXZWJQcm9jZXNzVGVzdFJ1bm5l
ci5oIgorI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2lu
Y2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgorCisjZGVmaW5lIEhUTUxfRE9DVU1FTlQgIjxodG1s
PjxoZWFkPjx0aXRsZT48L3RpdGxlPjwvaGVhZD48c3R5bGUgdHlwZT0ndGV4dC9jc3MnPiN0ZXN0
IHsgZm9udC1zaXplOiAxNnB4OyB9PC9zdHlsZT48Ym9keT48cCBpZD0ndGVzdCc+dGVzdDwvcD48
L2JvZHk+PC9odG1sPiIKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGdib29sZWFuIGxvYWRlZDsK
KyAgICBnYm9vbGVhbiBjbGlja2VkOworICAgIFdlYlByb2Nlc3NUZXN0UnVubmVyKiB0ZXN0UnVu
bmVyOworICAgIFdlYlZpZXdUZXN0KiB0ZXN0OworfSBEb21Eb21XaW5kb3dUZXN0U3RhdHVzOwor
CitzdGF0aWMgRG9tRG9tV2luZG93VGVzdFN0YXR1cyBzdGF0dXM7CisKK3N0YXRpYyB2b2lkIHNp
Z25hbHNOb3RpZnlDYWxsYmFjayhjb25zdCBnY2hhciAqa2V5LCBjb25zdCBnY2hhciAqdmFsdWUs
IGdjb25zdHBvaW50ZXIpCit7CisgICAgaWYgKGdfc3RyX2VxdWFsKGtleSwgInJlYWR5IikpIHsK
KyAgICAgICAgLy8gVGhlIGRvY3VtZW50IHdhcyBhbHJlYWR5IGxvYWRlZCBpbiB0aGUgd2VicHJv
Y2VzcywgYW5kIGl0cyAibG9hZCIKKyAgICAgICAgLy8gc2lnbmFsIGNvdWxkbid0IGJlIGNhcHR1
cmVkIG9uIHRpbWUgKHdhcyBpc3N1ZWQgYmVmb3JlIHRoZSB0ZXN0CisgICAgICAgIC8vIHN0YXJ0
ZWQpLiBXZSBsb2FkIGl0IGFnYWluIHRvIGZvcmNlIGEgbmV3ICJsb2FkIiBzaWduYWwgaW4gdGhl
CisgICAgICAgIC8vIHdlYnByb2Nlc3MsIHdoaWNoIHdpbGwgYmUgY2FwdHVyZWQgdGhpcyB0aW1l
CisgICAgICAgIHN0YXR1cy50ZXN0LT5sb2FkSHRtbChIVE1MX0RPQ1VNRU5ULCAwKTsKKyAgICB9
CisKKyAgICBpZiAoZ19zdHJfZXF1YWwoa2V5LCAibG9hZGVkIikpIHsKKyAgICAgICAgc3RhdHVz
LmxvYWRlZCA9IFRSVUU7CisgICAgICAgIHN0YXR1cy50ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0
VW50aWxNYXBwZWQoKTsKKworICAgICAgICAvLyBDbGljayBpbiBhIGtub3duIGxvY2F0aW9uIHdo
ZXJlIHRoZSB0ZXh0IGlzCisgICAgICAgIHN0YXR1cy50ZXN0LT5jbGlja01vdXNlQnV0dG9uKDIw
LCAxOCwgMSwgMCk7CisgICAgfQorCisgICAgaWYgKGdfc3RyX2VxdWFsKGtleSwgImNsaWNrZWQi
KSkKKyAgICAgICAgc3RhdHVzLmNsaWNrZWQgPSBUUlVFOworCisgICAgaWYgKGdfc3RyX2VxdWFs
KGtleSwgImZpbmlzaCIpKSB7CisgICAgICAgIHN0YXR1cy50ZXN0ID0gMDsKKyAgICAgICAgc3Rh
dHVzLnRlc3RSdW5uZXItPmZpbmlzaFRlc3Qoc3RhdHVzLmxvYWRlZCAmJiBzdGF0dXMuY2xpY2tl
ZCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBkaXNwYXRjaEV2ZW50Tm90aWZ5Q2FsbGJhY2so
Y29uc3QgZ2NoYXIgKmtleSwgY29uc3QgZ2NoYXIgKnZhbHVlLCBnY29uc3Rwb2ludGVyKQorewor
ICAgIGlmIChnX3N0cl9lcXVhbChrZXksICJyZWFkeSIpKSB7CisgICAgICAgIC8vIFRoZSBkb2N1
bWVudCB3YXMgYWxyZWFkeSBsb2FkZWQgaW4gdGhlIHdlYnByb2Nlc3MsIGFuZCBpdHMgImxvYWQi
CisgICAgICAgIC8vIHNpZ25hbCBjb3VsZG4ndCBiZSBjYXB0dXJlZCBvbiB0aW1lICh3YXMgaXNz
dWVkIGJlZm9yZSB0aGUgdGVzdAorICAgICAgICAvLyBzdGFydGVkKS4gV2UgbG9hZCBpdCBhZ2Fp
biB0byBmb3JjZSBhIG5ldyAibG9hZCIgc2lnbmFsIGluIHRoZQorICAgICAgICAvLyB3ZWJwcm9j
ZXNzLCB3aGljaCB3aWxsIGJlIGNhcHR1cmVkIHRoaXMgdGltZQorICAgICAgICBzdGF0dXMudGVz
dC0+bG9hZEh0bWwoSFRNTF9ET0NVTUVOVCwgMCk7CisgICAgfQorCisgICAgaWYgKGdfc3RyX2Vx
dWFsKGtleSwgImxvYWRlZCIpKQorICAgICAgICBzdGF0dXMubG9hZGVkID0gVFJVRTsKKworICAg
IGlmIChnX3N0cl9lcXVhbChrZXksICJjbGlja2VkIikpCisgICAgICAgIHN0YXR1cy5jbGlja2Vk
ID0gVFJVRTsKKworICAgIGlmIChnX3N0cl9lcXVhbChrZXksICJmaW5pc2giKSkgeworICAgICAg
ICBzdGF0dXMudGVzdCA9IDA7CisgICAgICAgIHN0YXR1cy50ZXN0UnVubmVyLT5maW5pc2hUZXN0
KHN0YXR1cy5sb2FkZWQgJiYgc3RhdHVzLmNsaWNrZWQpOworICAgIH0KK30KKworc3RhdGljIHZv
aWQgdGVzdFdlYktpdERPTURPTVdpbmRvd1NpZ25hbHMoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25z
dHBvaW50ZXIpCit7CisgICAgc3RhdHVzLmxvYWRlZCA9IEZBTFNFOworICAgIHN0YXR1cy5jbGlj
a2VkID0gRkFMU0U7CisgICAgc3RhdHVzLnRlc3QgPSB0ZXN0OworCisgICAgc3RhdHVzLnRlc3RS
dW5uZXItPnNldE5vdGlmeUNhbGxiYWNrKEdfQ0FMTEJBQ0soc2lnbmFsc05vdGlmeUNhbGxiYWNr
KSwgMCk7CisKKyAgICAvLyBUaGUgSFRNTCBkb2N1bWVudCB3aWxsIHdlIGxvYWRlZCBsYXRlciwg
d2hlbiB0aGUgdGVzdCBpcyAicmVhZHkiIGJlY2F1c2UKKyAgICAvLyB3ZSB3YW50IHRvIHRlc3Qg
dGhlICJsb2FkIiBzaWduYWwKKworICAgIEdWYXJpYW50QnVpbGRlciBidWlsZGVyOworICAgIGdf
dmFyaWFudF9idWlsZGVyX2luaXQoJmJ1aWxkZXIsIEdfVkFSSUFOVF9UWVBFX1ZBUkRJQ1QpOwor
ICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZCgmYnVpbGRlciwgIntzdn0iLCAicGFnZUlEIiwgZ192
YXJpYW50X25ld191aW50NjQod2Via2l0X3dlYl92aWV3X2dldF9wYWdlX2lkKHN0YXR1cy50ZXN0
LT5tX3dlYlZpZXcpKSk7CisgICAgc3RhdHVzLnRlc3RSdW5uZXItPnJ1blRlc3RBbmRXYWl0KCJX
ZWJLaXRET01ET01XaW5kb3ciLCAic2lnbmFscyIsIGdfdmFyaWFudF9idWlsZGVyX2VuZCgmYnVp
bGRlcikpOworICAgIGdfYXNzZXJ0KHN0YXR1cy50ZXN0UnVubmVyLT5nZXRUZXN0UmVzdWx0KCkp
OworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViS2l0RE9NRE9NV2luZG93RGlzcGF0Y2hFdmVudChX
ZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBzdGF0dXMubG9hZGVkID0g
RkFMU0U7CisgICAgc3RhdHVzLmNsaWNrZWQgPSBGQUxTRTsKKyAgICBzdGF0dXMudGVzdCA9IHRl
c3Q7CisKKyAgICBzdGF0dXMudGVzdFJ1bm5lci0+c2V0Tm90aWZ5Q2FsbGJhY2soR19DQUxMQkFD
SyhkaXNwYXRjaEV2ZW50Tm90aWZ5Q2FsbGJhY2spLCAwKTsKKworICAgIC8vIFRoZSBIVE1MIGRv
Y3VtZW50IHdpbGwgd2UgbG9hZGVkIGxhdGVyLCB3aGVuIHRoZSB0ZXN0IGlzICJyZWFkeSIgYmVj
YXVzZQorICAgIC8vIHdlIHdhbnQgdG8gdGVzdCB0aGUgImxvYWQiIHNpZ25hbAorCisgICAgR1Zh
cmlhbnRCdWlsZGVyIGJ1aWxkZXI7CisgICAgZ192YXJpYW50X2J1aWxkZXJfaW5pdCgmYnVpbGRl
ciwgR19WQVJJQU5UX1RZUEVfVkFSRElDVCk7CisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKCZi
dWlsZGVyLCAie3N2fSIsICJwYWdlSUQiLCBnX3ZhcmlhbnRfbmV3X3VpbnQ2NCh3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X3BhZ2VfaWQoc3RhdHVzLnRlc3QtPm1fd2ViVmlldykpKTsKKyAgICBzdGF0dXMu
dGVzdFJ1bm5lci0+cnVuVGVzdEFuZFdhaXQoIldlYktpdERPTURPTVdpbmRvdyIsICJkaXNwYXRj
aC1ldmVudCIsIGdfdmFyaWFudF9idWlsZGVyX2VuZCgmYnVpbGRlcikpOworICAgIGdfYXNzZXJ0
KHN0YXR1cy50ZXN0UnVubmVyLT5nZXRUZXN0UmVzdWx0KCkpOworfQorCitzdGF0aWMgdm9pZCB0
ZXN0V2ViS2l0RE9NRE9NV2luZG93R2V0Q29tcHV0ZWRTdHlsZShXZWJWaWV3VGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKK3sKKyAgICBzdGF0dXMubG9hZGVkID0gRkFMU0U7CisgICAgc3RhdHVz
LmNsaWNrZWQgPSBGQUxTRTsKKyAgICBzdGF0dXMudGVzdCA9IHRlc3Q7CisKKyAgICBzdGF0aWMg
Y29uc3QgY2hhciogdGVzdEhUTUwgPSBIVE1MX0RPQ1VNRU5UOworICAgIHN0YXR1cy50ZXN0LT5s
b2FkSHRtbCh0ZXN0SFRNTCwgMCk7CisgICAgc3RhdHVzLnRlc3QtPndhaXRVbnRpbExvYWRGaW5p
c2hlZCgpOworCisgICAgR1ZhcmlhbnRCdWlsZGVyIGJ1aWxkZXI7CisgICAgZ192YXJpYW50X2J1
aWxkZXJfaW5pdCgmYnVpbGRlciwgR19WQVJJQU5UX1RZUEVfVkFSRElDVCk7CisgICAgZ192YXJp
YW50X2J1aWxkZXJfYWRkKCZidWlsZGVyLCAie3N2fSIsICJwYWdlSUQiLCBnX3ZhcmlhbnRfbmV3
X3VpbnQ2NCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3BhZ2VfaWQoc3RhdHVzLnRlc3QtPm1fd2ViVmll
dykpKTsKKyAgICBnX2Fzc2VydChzdGF0dXMudGVzdFJ1bm5lci0+cnVuVGVzdCgiV2ViS2l0RE9N
RE9NV2luZG93IiwgImdldC1jb21wdXRlZC1zdHlsZSIsIGdfdmFyaWFudF9idWlsZGVyX2VuZCgm
YnVpbGRlcikpKTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQoreworICAgIHN0YXR1cy50ZXN0UnVu
bmVyID0gbmV3IFdlYlByb2Nlc3NUZXN0UnVubmVyKCk7CisgICAgd2Via2l0X3dlYl9jb250ZXh0
X3NldF93ZWJfZXh0ZW5zaW9uc19kaXJlY3Rvcnkod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZh
dWx0KCksIFdFQktJVF9URVNUX1dFQl9FWFRFTlNJT05TX0RJUik7CisKKyAgICBXZWJWaWV3VGVz
dDo6YWRkKCJXZWJLaXRET01ET01XaW5kb3ciLCAic2lnbmFscyIsIHRlc3RXZWJLaXRET01ET01X
aW5kb3dTaWduYWxzKTsKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRET01ET01XaW5kb3ci
LCAiZGlzcGF0Y2gtZXZlbnQiLCB0ZXN0V2ViS2l0RE9NRE9NV2luZG93RGlzcGF0Y2hFdmVudCk7
CisgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0RE9NRE9NV2luZG93IiwgImdldC1jb21wdXRl
ZC1zdHlsZSIsIHRlc3RXZWJLaXRET01ET01XaW5kb3dHZXRDb21wdXRlZFN0eWxlKTsKK30KKwor
dm9pZCBhZnRlckFsbCgpCit7CisgICAgZGVsZXRlIHN0YXR1cy50ZXN0UnVubmVyOworfQpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RET01Ob2Rl
LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0RE9NTm9kZS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQzMjA3NwotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0RE9NTm9k
ZS5jcHAKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJZ2FsaWEg
Uy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Rlc3RSdW5u
ZXIuaCIKKyNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNp
bmNsdWRlIDx3ZWJraXQyL3dlYmtpdDIuaD4KKworc3RhdGljIFdlYlByb2Nlc3NUZXN0UnVubmVy
KiB0ZXN0UnVubmVyOworCitzdGF0aWMgdm9pZCB0ZXN0V2ViS2l0RE9NTm9kZUhpZXJhcmNoeU5h
dmlnYXRpb24oV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgc3RhdGlj
IGNvbnN0IGNoYXIqIHRlc3RIVE1MID0gIjxodG1sPjxoZWFkPjx0aXRsZT5UaGlzIGlzIHRoZSB0
aXRsZTwvdGl0bGU+PC9oZWFkPjxib2R5PjxwPjE8L3A+PHA+MjwvcD48cD4zPC9wPjwvYm9keT48
L2h0bWw+IjsKKyAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0SFRNTCwgMCk7CisgICAgdGVzdC0+d2Fp
dFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBHVmFyaWFudEJ1aWxkZXIgYnVpbGRlcjsKKyAg
ICBnX3ZhcmlhbnRfYnVpbGRlcl9pbml0KCZidWlsZGVyLCBHX1ZBUklBTlRfVFlQRV9WQVJESUNU
KTsKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoJmJ1aWxkZXIsICJ7c3Z9IiwgInBhZ2VJRCIs
IGdfdmFyaWFudF9uZXdfdWludDY0KHdlYmtpdF93ZWJfdmlld19nZXRfcGFnZV9pZCh0ZXN0LT5t
X3dlYlZpZXcpKSk7CisgICAgZ19hc3NlcnQodGVzdFJ1bm5lci0+cnVuVGVzdCgiV2ViS2l0RE9N
Tm9kZSIsICJoaWVyYXJjaHktbmF2aWdhdGlvbiIsIGdfdmFyaWFudF9idWlsZGVyX2VuZCgmYnVp
bGRlcikpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYktpdERPTU5vZGVJbnNlcnRpb24oV2Vi
Vmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIq
IHRlc3RIVE1MID0gIjxodG1sPjxib2R5PjwvYm9keT48L2h0bWw+IjsKKyAgICB0ZXN0LT5sb2Fk
SHRtbCh0ZXN0SFRNTCwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisK
KyAgICBHVmFyaWFudEJ1aWxkZXIgYnVpbGRlcjsKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9pbml0
KCZidWlsZGVyLCBHX1ZBUklBTlRfVFlQRV9WQVJESUNUKTsKKyAgICBnX3ZhcmlhbnRfYnVpbGRl
cl9hZGQoJmJ1aWxkZXIsICJ7c3Z9IiwgInBhZ2VJRCIsIGdfdmFyaWFudF9uZXdfdWludDY0KHdl
YmtpdF93ZWJfdmlld19nZXRfcGFnZV9pZCh0ZXN0LT5tX3dlYlZpZXcpKSk7CisgICAgZ19hc3Nl
cnQodGVzdFJ1bm5lci0+cnVuVGVzdCgiV2ViS2l0RE9NTm9kZSIsICJpbnNlcnRpb24iLCBnX3Zh
cmlhbnRfYnVpbGRlcl9lbmQoJmJ1aWxkZXIpKSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJL
aXRET01Ob2RlVGFnTmFtZXMoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7Cisg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIHRlc3RIVE1MID0gIjxodG1sPjxoZWFkPjwvaGVhZD48Ym9k
eT4iCisgICAgICAgICI8dmlkZW8gaWQ9J3ZpZGVvJyBwcmVsb2FkPSdub25lJz4iCisgICAgICAg
ICIgICAgPHNvdXJjZSBzcmM9J21vdmllLm9nZycgdHlwZT0ndmlkZW8vb2dnJz4iCisgICAgICAg
ICIgICAgICAgIFlvdXIgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSB2aWRlbyB0YWcuIgor
ICAgICAgICAiPC92aWRlbz4iCisgICAgICAgICI8dmlkZW8gaWQ9J3ZpZGVvMicgcHJlbG9hZD0n
bm9uZSc+IgorICAgICAgICAiICAgICA8c291cmNlIHNyYz0nbW92aWUub2dnJyB0eXBlPSd2aWRl
by9vZ2cnPiIKKyAgICAgICAgIiAgICAgICAgWW91ciBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQg
dGhlIHZpZGVvIHRhZy4iCisgICAgICAgICI8L3ZpZGVvPiIKKyAgICAgICAgIjxpbnB1dCB0eXBl
PSdoaWRkZW4nIGlkPSd0ZXN0JyBuYW1lPSdmaW5pc2gnIHZhbHVlPSdmYWxzZSc+PC9ib2R5Pjwv
aHRtbD4iOworICAgIHRlc3QtPmxvYWRIdG1sKHRlc3RIVE1MLCAwKTsKKyAgICB0ZXN0LT53YWl0
VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIEdWYXJpYW50QnVpbGRlciBidWlsZGVyOworICAg
IGdfdmFyaWFudF9idWlsZGVyX2luaXQoJmJ1aWxkZXIsIEdfVkFSSUFOVF9UWVBFX1ZBUkRJQ1Qp
OworICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZCgmYnVpbGRlciwgIntzdn0iLCAicGFnZUlEIiwg
Z192YXJpYW50X25ld191aW50NjQod2Via2l0X3dlYl92aWV3X2dldF9wYWdlX2lkKHRlc3QtPm1f
d2ViVmlldykpKTsKKyAgICBnX2Fzc2VydCh0ZXN0UnVubmVyLT5ydW5UZXN0KCJXZWJLaXRET01O
b2RlIiwgInRhZy1uYW1lcyIsIGdfdmFyaWFudF9idWlsZGVyX2VuZCgmYnVpbGRlcikpKTsKK30K
Kwordm9pZCBiZWZvcmVBbGwoKQoreworICAgIHRlc3RSdW5uZXIgPSBuZXcgV2ViUHJvY2Vzc1Rl
c3RSdW5uZXIoKTsKKyAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3dlYl9leHRlbnNpb25zX2Rp
cmVjdG9yeSh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSwgV0VCS0lUX1RFU1RfV0VC
X0VYVEVOU0lPTlNfRElSKTsKKworICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdERPTU5vZGUi
LCAiaGllcmFyY2h5LW5hdmlnYXRpb24iLCB0ZXN0V2ViS2l0RE9NTm9kZUhpZXJhcmNoeU5hdmln
YXRpb24pOworICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdERPTU5vZGUiLCAiaW5zZXJ0aW9u
IiwgdGVzdFdlYktpdERPTU5vZGVJbnNlcnRpb24pOworICAgIFdlYlZpZXdUZXN0OjphZGQoIldl
YktpdERPTU5vZGUiLCAidGFnLW5hbWVzIiwgdGVzdFdlYktpdERPTU5vZGVUYWdOYW1lcyk7Cit9
CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworICAgIGRlbGV0ZSB0ZXN0UnVubmVyOworfQpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3REb3dubG9hZHMu
Y3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3REb3dubG9hZHMu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMTU5OTAKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdERvd25s
b2Fkcy5jcHAKQEAgLTAsMCArMSw1MjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdh
bGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZl
ci5oIgorI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCisjaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4K
KyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CisjaW5jbHVk
ZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3
dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCitz
dGF0aWMgY2hhcioga1RlbXBEaXJlY3Rvcnk7CisKK2NsYXNzIERvd25sb2FkVGVzdDogcHVibGlj
IFRlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoRG93bmxvYWRUZXN0
KTsKKworICAgIGVudW0gRG93bmxvYWRFdmVudCB7CisgICAgICAgIFN0YXJ0ZWQsCisgICAgICAg
IFJlY2VpdmVkUmVzcG9uc2UsCisgICAgICAgIENyZWF0ZWREZXN0aW5hdGlvbiwKKyAgICAgICAg
UmVjZWl2ZWREYXRhLAorICAgICAgICBGYWlsZWQsCisgICAgICAgIEZpbmlzaGVkCisgICAgfTsK
KworICAgIHN0YXRpYyB2b2lkIHJlY2VpdmVkUmVzcG9uc2VDYWxsYmFjayhXZWJLaXREb3dubG9h
ZCogZG93bmxvYWQsIEdQYXJhbVNwZWMqLCBEb3dubG9hZFRlc3QqIHRlc3QpCisgICAgeworICAg
ICAgICBnX2Fzc2VydCh3ZWJraXRfZG93bmxvYWRfZ2V0X3Jlc3BvbnNlKGRvd25sb2FkKSk7Cisg
ICAgICAgIHRlc3QtPnJlY2VpdmVkUmVzcG9uc2UoZG93bmxvYWQpOworICAgIH0KKworICAgIHN0
YXRpYyBnYm9vbGVhbiBjcmVhdGVkRGVzdGluYXRpb25DYWxsYmFjayhXZWJLaXREb3dubG9hZCog
ZG93bmxvYWQsIGNvbnN0IGdjaGFyKiBkZXN0aW5hdGlvbiwgRG93bmxvYWRUZXN0KiB0ZXN0KQor
ICAgIHsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbihk
b3dubG9hZCkpOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2Rvd25sb2FkX2dldF9k
ZXN0aW5hdGlvbihkb3dubG9hZCksID09LCBkZXN0aW5hdGlvbik7CisgICAgICAgIHRlc3QtPmNy
ZWF0ZWREZXN0aW5hdGlvbihkb3dubG9hZCwgZGVzdGluYXRpb24pOworICAgICAgICByZXR1cm4g
VFJVRTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gcmVjZWl2ZWREYXRhQ2FsbGJhY2so
V2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBndWludDY0IGRhdGFMZW5ndGgsIERvd25sb2FkVGVz
dCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPnJlY2VpdmVkRGF0YShkb3dubG9hZCwgZGF0
YUxlbmd0aCk7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKworICAgIHN0YXRpYyBnYm9v
bGVhbiBmaW5pc2hlZENhbGxiYWNrKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgRG93bmxvYWRU
ZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+ZmluaXNoZWQoZG93bmxvYWQpOworICAg
ICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gZmFpbGVkQ2Fs
bGJhY2soV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBHRXJyb3IqIGVycm9yLCBEb3dubG9hZFRl
c3QqIHRlc3QpCisgICAgeworICAgICAgICBnX2Fzc2VydChlcnJvcik7CisgICAgICAgIHRlc3Qt
PmZhaWxlZChkb3dubG9hZCwgZXJyb3IpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisK
KyAgICBzdGF0aWMgZ2Jvb2xlYW4gZGVjaWRlRGVzdGluYXRpb25DYWxsYmFjayhXZWJLaXREb3du
bG9hZCogZG93bmxvYWQsIGNvbnN0IGdjaGFyKiBzdWdnZXN0ZWRGaWxlbmFtZSwgRG93bmxvYWRU
ZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQoc3VnZ2VzdGVkRmlsZW5hbWUpOwor
ICAgICAgICB0ZXN0LT5kZWNpZGVEZXN0aW5hdGlvbihkb3dubG9hZCwgc3VnZ2VzdGVkRmlsZW5h
bWUpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBkb3du
bG9hZFN0YXJ0ZWRDYWxsYmFjayhXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0LCBXZWJLaXREb3du
bG9hZCogZG93bmxvYWQsIERvd25sb2FkVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIGdfYXNz
ZXJ0KHdlYmtpdF9kb3dubG9hZF9nZXRfcmVxdWVzdChkb3dubG9hZCkpOworICAgICAgICB0ZXN0
LT5zdGFydGVkKGRvd25sb2FkKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChkb3dubG9hZCwg
Im5vdGlmeTo6cmVzcG9uc2UiLCBHX0NBTExCQUNLKHJlY2VpdmVkUmVzcG9uc2VDYWxsYmFjayks
IHRlc3QpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGRvd25sb2FkLCAiY3JlYXRlZC1kZXN0
aW5hdGlvbiIsIEdfQ0FMTEJBQ0soY3JlYXRlZERlc3RpbmF0aW9uQ2FsbGJhY2spLCB0ZXN0KTsK
KyAgICAgICAgZ19zaWduYWxfY29ubmVjdChkb3dubG9hZCwgInJlY2VpdmVkLWRhdGEiLCBHX0NB
TExCQUNLKHJlY2VpdmVkRGF0YUNhbGxiYWNrKSwgdGVzdCk7CisgICAgICAgIGdfc2lnbmFsX2Nv
bm5lY3QoZG93bmxvYWQsICJmaW5pc2hlZCIsIEdfQ0FMTEJBQ0soZmluaXNoZWRDYWxsYmFjayks
IHRlc3QpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGRvd25sb2FkLCAiZmFpbGVkIiwgR19D
QUxMQkFDSyhmYWlsZWRDYWxsYmFjayksIHRlc3QpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0
KGRvd25sb2FkLCAiZGVjaWRlLWRlc3RpbmF0aW9uIiwgR19DQUxMQkFDSyhkZWNpZGVEZXN0aW5h
dGlvbkNhbGxiYWNrKSwgdGVzdCk7CisgICAgfQorCisgICAgRG93bmxvYWRUZXN0KCkKKyAgICAg
ICAgOiBtX3dlYkNvbnRleHQod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCkpCisgICAg
ICAgICwgbV9tYWluTG9vcChnX21haW5fbG9vcF9uZXcoMCwgVFJVRSkpCisgICAgICAgICwgbV9k
b3dubG9hZFNpemUoMCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJDb250
ZXh0LCAiZG93bmxvYWQtc3RhcnRlZCIsIEdfQ0FMTEJBQ0soZG93bmxvYWRTdGFydGVkQ2FsbGJh
Y2spLCB0aGlzKTsKKyAgICB9CisKKyAgICB+RG93bmxvYWRUZXN0KCkKKyAgICB7CisgICAgICAg
IGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3dlYkNvbnRleHQsIEdfU0lH
TkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOworICAgICAgICBnX21haW5fbG9vcF91
bnJlZihtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRlZChXZWJL
aXREb3dubG9hZCogZG93bmxvYWQpCisgICAgeworICAgICAgICBtX2Rvd25sb2FkRXZlbnRzLmFw
cGVuZChTdGFydGVkKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRSZXNwb25z
ZShXZWJLaXREb3dubG9hZCogZG93bmxvYWQpCisgICAgeworICAgICAgICBtX2Rvd25sb2FkRXZl
bnRzLmFwcGVuZChSZWNlaXZlZFJlc3BvbnNlKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
Y3JlYXRlZERlc3RpbmF0aW9uKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgY29uc3QgY2hhciog
ZGVzdGluYXRpb24pCisgICAgeworICAgICAgICBtX2Rvd25sb2FkRXZlbnRzLmFwcGVuZChDcmVh
dGVkRGVzdGluYXRpb24pOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlZERhdGEo
V2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBndWludDY0IGRhdGFMZW5ndGgpCisgICAgeworICAg
ICAgICBtX2Rvd25sb2FkU2l6ZSArPSBkYXRhTGVuZ3RoOworICAgICAgICBpZiAoIW1fZG93bmxv
YWRFdmVudHMuY29udGFpbnMoUmVjZWl2ZWREYXRhKSkKKyAgICAgICAgICAgIG1fZG93bmxvYWRF
dmVudHMuYXBwZW5kKFJlY2VpdmVkRGF0YSk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGZp
bmlzaGVkKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0
X2NtcHVpbnQobV9kb3dubG9hZFNpemUsID09LCB3ZWJraXRfZG93bmxvYWRfZ2V0X3JlY2VpdmVk
X2RhdGFfbGVuZ3RoKGRvd25sb2FkKSk7CisgICAgICAgIG1fZG93bmxvYWRFdmVudHMuYXBwZW5k
KEZpbmlzaGVkKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX21haW5Mb29wKTsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgZmFpbGVkKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgR0Vy
cm9yKiBlcnJvcikKKyAgICB7CisgICAgICAgIG1fZG93bmxvYWRFdmVudHMuYXBwZW5kKEZhaWxl
ZCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRlY2lkZURlc3RpbmF0aW9uKFdlYktpdERv
d25sb2FkKiBkb3dubG9hZCwgY29uc3QgZ2NoYXIqIHN1Z2dlc3RlZEZpbGVuYW1lKQorICAgIHsK
KyAgICAgICAgR093blB0cjxjaGFyPiBkZXN0aW5hdGlvbihnX2J1aWxkX2ZpbGVuYW1lKGtUZW1w
RGlyZWN0b3J5LCBzdWdnZXN0ZWRGaWxlbmFtZSwgTlVMTCkpOworICAgICAgICBHT3duUHRyPGNo
YXI+IGRlc3RpbmF0aW9uVVJJKGdfZmlsZW5hbWVfdG9fdXJpKGRlc3RpbmF0aW9uLmdldCgpLCAw
LCAwKSk7CisgICAgICAgIHdlYmtpdF9kb3dubG9hZF9zZXRfZGVzdGluYXRpb24oZG93bmxvYWQs
IGRlc3RpbmF0aW9uVVJJLmdldCgpKTsKKyAgICB9CisKKyAgICBXZWJLaXREb3dubG9hZCogZG93
bmxvYWRVUklBbmRXYWl0VW50aWxGaW5pc2hlcyhjb25zdCBDU3RyaW5nJiByZXF1ZXN0VVJJKQor
ICAgIHsKKyAgICAgICAgV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkID0gd2Via2l0X3dlYl9jb250
ZXh0X2Rvd25sb2FkX3VyaShtX3dlYkNvbnRleHQsIHJlcXVlc3RVUkkuZGF0YSgpKTsKKyAgICAg
ICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChkb3dubG9h
ZCkpOworCisgICAgICAgIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QgPSB3ZWJraXRfZG93bmxv
YWRfZ2V0X3JlcXVlc3QoZG93bmxvYWQpOworICAgICAgICBnX2Fzc2VydChyZXF1ZXN0KTsKKyAg
ICAgICAgQVNTRVJUX0NNUF9DU1RSSU5HKHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfdXJpKHJlcXVl
c3QpLCA9PSwgcmVxdWVzdFVSSSk7CisKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxv
b3ApOworCisgICAgICAgIHJldHVybiBkb3dubG9hZDsKKyAgICB9CisKKyAgICB2b2lkIGNoZWNr
RGVzdGluYXRpb25BbmREZWxldGVGaWxlKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgY29uc3Qg
Y2hhciogZXhwZWN0ZWROYW1lKQorICAgIHsKKyAgICAgICAgaWYgKCF3ZWJraXRfZG93bmxvYWRf
Z2V0X2Rlc3RpbmF0aW9uKGRvd25sb2FkKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
R1JlZlB0cjxHRmlsZT4gZGVzdEZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfdXJpKHdl
YmtpdF9kb3dubG9hZF9nZXRfZGVzdGluYXRpb24oZG93bmxvYWQpKSk7CisgICAgICAgIEdPd25Q
dHI8Y2hhcj4gZGVzdEJhc2VuYW1lKGdfZmlsZV9nZXRfYmFzZW5hbWUoZGVzdEZpbGUuZ2V0KCkp
KTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKGRlc3RCYXNlbmFtZS5nZXQoKSwgPT0sIGV4cGVj
dGVkTmFtZSk7CisKKyAgICAgICAgZ19maWxlX2RlbGV0ZShkZXN0RmlsZS5nZXQoKSwgMCwgMCk7
CisgICAgfQorCisgICAgV2ViS2l0V2ViQ29udGV4dCogbV93ZWJDb250ZXh0OworICAgIEdNYWlu
TG9vcCogbV9tYWluTG9vcDsKKyAgICBWZWN0b3I8RG93bmxvYWRFdmVudD4gbV9kb3dubG9hZEV2
ZW50czsKKyAgICBndWludDY0IG1fZG93bmxvYWRTaXplOworfTsKKworc3RhdGljIHZvaWQgdGVz
dERvd25sb2FkTG9jYWxGaWxlKERvd25sb2FkVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sK
KyAgICBHT3duUHRyPGNoYXI+IHNvdXJjZVBhdGgoZ19idWlsZF9maWxlbmFtZShUZXN0OjpnZXRX
ZWJLaXQxVGVzdFJlc291Y2VzRGlyKCkuZGF0YSgpLCAidGVzdC5wZGYiLCBOVUxMKSk7CisgICAg
R1JlZlB0cjxHRmlsZT4gc291cmNlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgoc291
cmNlUGF0aC5nZXQoKSkpOworICAgIEdSZWZQdHI8R0ZpbGVJbmZvPiBzb3VyY2VJbmZvID0gYWRv
cHRHUmVmKGdfZmlsZV9xdWVyeV9pbmZvKHNvdXJjZS5nZXQoKSwgR19GSUxFX0FUVFJJQlVURV9T
VEFOREFSRF9TSVpFLCBzdGF0aWNfY2FzdDxHRmlsZVF1ZXJ5SW5mb0ZsYWdzPigwKSwgMCwgMCkp
OworICAgIEdPd25QdHI8Y2hhcj4gc291cmNlVVJJKGdfZmlsZV9nZXRfdXJpKHNvdXJjZS5nZXQo
KSkpOworICAgIEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkID0gYWRvcHRHUmVmKHRl
c3QtPmRvd25sb2FkVVJJQW5kV2FpdFVudGlsRmluaXNoZXMoc291cmNlVVJJLmdldCgpKSk7Cisg
ICAgZ19hc3NlcnQoIXdlYmtpdF9kb3dubG9hZF9nZXRfd2ViX3ZpZXcoZG93bmxvYWQuZ2V0KCkp
KTsKKworICAgIFZlY3RvcjxEb3dubG9hZFRlc3Q6OkRvd25sb2FkRXZlbnQ+JiBldmVudHMgPSB0
ZXN0LT5tX2Rvd25sb2FkRXZlbnRzOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgp
LCA9PSwgNSk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIERvd25sb2FkVGVz
dDo6U3RhcnRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIERvd25sb2Fk
VGVzdDo6UmVjZWl2ZWRSZXNwb25zZSk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwg
PT0sIERvd25sb2FkVGVzdDo6Q3JlYXRlZERlc3RpbmF0aW9uKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoZXZlbnRzWzNdLCA9PSwgRG93bmxvYWRUZXN0OjpSZWNlaXZlZERhdGEpOworICAgIGdfYXNz
ZXJ0X2NtcGludChldmVudHNbNF0sID09LCBEb3dubG9hZFRlc3Q6OkZpbmlzaGVkKTsKKworICAg
IFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QgPSB3ZWJraXRfZG93bmxvYWRfZ2V0X3JlcXVlc3Qo
ZG93bmxvYWQuZ2V0KCkpOworICAgIGdfYXNzZXJ0KHJlcXVlc3QpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KSwgPT0sIHNvdXJjZVVSSS5n
ZXQoKSk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9kb3dubG9hZFNpemUsID09LCBn
X2ZpbGVfaW5mb19nZXRfc2l6ZShzb3VyY2VJbmZvLmdldCgpKSk7CisgICAgZ19hc3NlcnQod2Vi
a2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbihkb3dubG9hZC5nZXQoKSkpOworICAgIGdfYXNz
ZXJ0X2NtcGZsb2F0KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNzKGRvd25s
b2FkLmdldCgpKSwgPT0sIDEpOworICAgIHRlc3QtPmNoZWNrRGVzdGluYXRpb25BbmREZWxldGVG
aWxlKGRvd25sb2FkLmdldCgpLCAidGVzdC5wZGYiKTsKK30KKworY2xhc3MgRG93bmxvYWRFcnJv
clRlc3Q6IHB1YmxpYyBEb3dubG9hZFRlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNU
X0ZJWFRVUkUoRG93bmxvYWRFcnJvclRlc3QpOworCisgICAgRG93bmxvYWRFcnJvclRlc3QoKQor
ICAgICAgICA6IG1fZXhwZWN0ZWRFcnJvcihXRUJLSVRfRE9XTkxPQURfRVJST1JfTkVUV09SSykK
KyAgICB7CisgICAgfQorCisgICAgdm9pZCByZWNlaXZlZFJlc3BvbnNlKFdlYktpdERvd25sb2Fk
KiBkb3dubG9hZCkKKyAgICB7CisgICAgICAgIERvd25sb2FkVGVzdDo6cmVjZWl2ZWRSZXNwb25z
ZShkb3dubG9hZCk7CisgICAgICAgIGlmIChtX2V4cGVjdGVkRXJyb3IgPT0gV0VCS0lUX0RPV05M
T0FEX0VSUk9SX0NBTkNFTExFRF9CWV9VU0VSKQorICAgICAgICAgICAgd2Via2l0X2Rvd25sb2Fk
X2NhbmNlbChkb3dubG9hZCk7CisgICAgfQorCisgICAgdm9pZCBjcmVhdGVkRGVzdGluYXRpb24o
V2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBjb25zdCBjaGFyKiBkZXN0aW5hdGlvbikKKyAgICB7
CisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgfQorCisgICAgdm9pZCBmYWls
ZWQoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBHRXJyb3IqIGVycm9yKQorICAgIHsKKyAgICAg
ICAgZ19hc3NlcnQoZ19lcnJvcl9tYXRjaGVzKGVycm9yLCBXRUJLSVRfRE9XTkxPQURfRVJST1Is
IG1fZXhwZWN0ZWRFcnJvcikpOworICAgICAgICBEb3dubG9hZFRlc3Q6OmZhaWxlZChkb3dubG9h
ZCwgZXJyb3IpOworICAgIH0KKworICAgIHZvaWQgZGVjaWRlRGVzdGluYXRpb24oV2ViS2l0RG93
bmxvYWQqIGRvd25sb2FkLCBjb25zdCBnY2hhciogc3VnZ2VzdGVkRmlsZW5hbWUpCisgICAgewor
ICAgICAgICBpZiAobV9leHBlY3RlZEVycm9yICE9IFdFQktJVF9ET1dOTE9BRF9FUlJPUl9ERVNU
SU5BVElPTikgeworICAgICAgICAgICAgRG93bmxvYWRUZXN0OjpkZWNpZGVEZXN0aW5hdGlvbihk
b3dubG9hZCwgc3VnZ2VzdGVkRmlsZW5hbWUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIHdlYmtpdF9kb3dubG9hZF9zZXRfZGVzdGluYXRpb24oZG93bmxvYWQsICJm
aWxlOi8vL2Zvby9iYXIiKTsKKyAgICB9CisKKyAgICBXZWJLaXREb3dubG9hZEVycm9yIG1fZXhw
ZWN0ZWRFcnJvcjsKK307CisKK3N0YXRpYyB2b2lkIHRlc3REb3dubG9hZExvY2FsRmlsZUVycm9y
KERvd25sb2FkRXJyb3JUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPm1f
ZXhwZWN0ZWRFcnJvciA9IFdFQktJVF9ET1dOTE9BRF9FUlJPUl9ORVRXT1JLOworICAgIEdSZWZQ
dHI8V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkID0gYWRvcHRHUmVmKHRlc3QtPmRvd25sb2FkVVJJ
QW5kV2FpdFVudGlsRmluaXNoZXMoImZpbGU6Ly8vZm9vL2JhciIpKTsKKyAgICBnX2Fzc2VydCgh
d2Via2l0X2Rvd25sb2FkX2dldF93ZWJfdmlldyhkb3dubG9hZC5nZXQoKSkpOworCisgICAgVmVj
dG9yPERvd25sb2FkVGVzdDo6RG93bmxvYWRFdmVudD4mIGV2ZW50cyA9IHRlc3QtPm1fZG93bmxv
YWRFdmVudHM7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAzKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgRG93bmxvYWRUZXN0OjpTdGFydGVkKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgRG93bmxvYWRUZXN0OjpGYWlsZWQp
OworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBEb3dubG9hZFRlc3Q6OkZpbmlz
aGVkKTsKKyAgICBldmVudHMuY2xlYXIoKTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdCh3ZWJraXRf
ZG93bmxvYWRfZ2V0X2VzdGltYXRlZF9wcm9ncmVzcyhkb3dubG9hZC5nZXQoKSksIDwsIDEpOwor
CisgICAgdGVzdC0+bV9leHBlY3RlZEVycm9yID0gV0VCS0lUX0RPV05MT0FEX0VSUk9SX0RFU1RJ
TkFUSU9OOworICAgIEdPd25QdHI8Y2hhcj4gcGF0aChnX2J1aWxkX2ZpbGVuYW1lKFRlc3Q6Omdl
dFdlYktpdDFUZXN0UmVzb3VjZXNEaXIoKS5kYXRhKCksICJ0ZXN0LnBkZiIsIE5VTEwpKTsKKyAg
ICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgocGF0
aC5nZXQoKSkpOworICAgIEdPd25QdHI8Y2hhcj4gdXJpKGdfZmlsZV9nZXRfdXJpKGZpbGUuZ2V0
KCkpKTsKKyAgICBkb3dubG9hZCA9IGFkb3B0R1JlZih0ZXN0LT5kb3dubG9hZFVSSUFuZFdhaXRV
bnRpbEZpbmlzaGVzKHVyaS5nZXQoKSkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG93bmxvYWRf
Z2V0X3dlYl92aWV3KGRvd25sb2FkLmdldCgpKSk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZl
bnRzLnNpemUoKSwgPT0sIDQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBE
b3dubG9hZFRlc3Q6OlN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09
LCBEb3dubG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOworICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHNbMl0sID09LCBEb3dubG9hZFRlc3Q6OkZhaWxlZCk7CisgICAgZ19hc3NlcnRfY21waW50
KGV2ZW50c1szXSwgPT0sIERvd25sb2FkVGVzdDo6RmluaXNoZWQpOworICAgIGV2ZW50cy5jbGVh
cigpOworICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVk
X3Byb2dyZXNzKGRvd25sb2FkLmdldCgpKSwgPCwgMSk7CisgICAgdGVzdC0+Y2hlY2tEZXN0aW5h
dGlvbkFuZERlbGV0ZUZpbGUoZG93bmxvYWQuZ2V0KCksICJiYXIiKTsKKworICAgIHRlc3QtPm1f
ZXhwZWN0ZWRFcnJvciA9IFdFQktJVF9ET1dOTE9BRF9FUlJPUl9DQU5DRUxMRURfQllfVVNFUjsK
KyAgICBkb3dubG9hZCA9IGFkb3B0R1JlZih0ZXN0LT5kb3dubG9hZFVSSUFuZFdhaXRVbnRpbEZp
bmlzaGVzKHVyaS5nZXQoKSkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG93bmxvYWRfZ2V0X3dl
Yl92aWV3KGRvd25sb2FkLmdldCgpKSk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNp
emUoKSwgPT0sIDQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBEb3dubG9h
ZFRlc3Q6OlN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBEb3du
bG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNb
Ml0sID09LCBEb3dubG9hZFRlc3Q6OkZhaWxlZCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50
c1szXSwgPT0sIERvd25sb2FkVGVzdDo6RmluaXNoZWQpOworICAgIGV2ZW50cy5jbGVhcigpOwor
ICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dy
ZXNzKGRvd25sb2FkLmdldCgpKSwgPCwgMSk7CisgICAgdGVzdC0+Y2hlY2tEZXN0aW5hdGlvbkFu
ZERlbGV0ZUZpbGUoZG93bmxvYWQuZ2V0KCksICJ0ZXN0LnBkZiIpOworfQorCitzdGF0aWMgV2Vi
S2l0VGVzdFNlcnZlcioga1NlcnZlcjsKK3N0YXRpYyBjb25zdCBjaGFyKiBrU2VydmVyU3VnZ2Vz
dGVkRmlsZW5hbWUgPSAid2Via2l0LWRvd25sb2FkZWQtZmlsZSI7CisKK3N0YXRpYyB2b2lkIHNl
cnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1lc3NhZ2UsIGNv
bnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqLCBTb3VwQ2xpZW50Q29udGV4dCosIGdwb2ludGVy
KQoreworICAgIGlmIChtZXNzYWdlLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7CisgICAg
ICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9JTVBM
RU1FTlRFRCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBHT3duUHRyPGNoYXI+IGZp
bGVQYXRoKGdfYnVpbGRfZmlsZW5hbWUoVGVzdDo6Z2V0V2ViS2l0MVRlc3RSZXNvdWNlc0Rpcigp
LmRhdGEoKSwgcGF0aCwgTlVMTCkpOworICAgIGNoYXIqIGNvbnRlbnRzOworICAgIGdzaXplIGNv
bnRlbnRzTGVuZ3RoOworICAgIGlmICghZ19maWxlX2dldF9jb250ZW50cyhmaWxlUGF0aC5nZXQo
KSwgJmNvbnRlbnRzLCAmY29udGVudHNMZW5ndGgsIDApKSB7CisgICAgICAgIHNvdXBfbWVzc2Fn
ZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7CisgICAgICAgIHNv
dXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwg
U09VUF9TVEFUVVNfT0spOworCisgICAgR093blB0cjxjaGFyPiBjb250ZW50RGlzcG9zaXRpb24o
Z19zdHJkdXBfcHJpbnRmKCJmaWxlbmFtZT0lcyIsIGtTZXJ2ZXJTdWdnZXN0ZWRGaWxlbmFtZSkp
OworICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9oZWFk
ZXJzLCAiQ29udGVudC1EaXNwb3NpdGlvbiIsIGNvbnRlbnREaXNwb3NpdGlvbi5nZXQoKSk7Cisg
ICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBf
TUVNT1JZX1RBS0UsIGNvbnRlbnRzLCBjb250ZW50c0xlbmd0aCk7CisKKyAgICBzb3VwX21lc3Nh
Z2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKK30KKworc3RhdGljIHZv
aWQgdGVzdERvd25sb2FkUmVtb3RlRmlsZShEb3dubG9hZFRlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCit7CisgICAgR1JlZlB0cjxXZWJLaXREb3dubG9hZD4gZG93bmxvYWQgPSBhZG9wdEdSZWYo
dGVzdC0+ZG93bmxvYWRVUklBbmRXYWl0VW50aWxGaW5pc2hlcyhrU2VydmVyLT5nZXRVUklGb3JQ
YXRoKCIvdGVzdC5wZGYiKSkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG93bmxvYWRfZ2V0X3dl
Yl92aWV3KGRvd25sb2FkLmdldCgpKSk7CisKKyAgICBWZWN0b3I8RG93bmxvYWRUZXN0OjpEb3du
bG9hZEV2ZW50PiYgZXZlbnRzID0gdGVzdC0+bV9kb3dubG9hZEV2ZW50czsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDUpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVu
dHNbMF0sID09LCBEb3dubG9hZFRlc3Q6OlN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHNbMV0sID09LCBEb3dubG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOworICAgIGdfYXNz
ZXJ0X2NtcGludChldmVudHNbMl0sID09LCBEb3dubG9hZFRlc3Q6OkNyZWF0ZWREZXN0aW5hdGlv
bik7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1szXSwgPT0sIERvd25sb2FkVGVzdDo6UmVj
ZWl2ZWREYXRhKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzRdLCA9PSwgRG93bmxvYWRU
ZXN0OjpGaW5pc2hlZCk7CisgICAgZXZlbnRzLmNsZWFyKCk7CisKKyAgICBXZWJLaXRVUklSZXF1
ZXN0KiByZXF1ZXN0ID0gd2Via2l0X2Rvd25sb2FkX2dldF9yZXF1ZXN0KGRvd25sb2FkLmdldCgp
KTsKKyAgICBnX2Fzc2VydChyZXF1ZXN0KTsKKyAgICBBU1NFUlRfQ01QX0NTVFJJTkcod2Via2l0
X3VyaV9yZXF1ZXN0X2dldF91cmkocmVxdWVzdCksID09LCBrU2VydmVyLT5nZXRVUklGb3JQYXRo
KCIvdGVzdC5wZGYiKSk7CisKKyAgICBnX2Fzc2VydCh3ZWJraXRfZG93bmxvYWRfZ2V0X2Rlc3Rp
bmF0aW9uKGRvd25sb2FkLmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21wZmxvYXQod2Via2l0X2Rv
d25sb2FkX2dldF9lc3RpbWF0ZWRfcHJvZ3Jlc3MoZG93bmxvYWQuZ2V0KCkpLCA9PSwgMSk7Cisg
ICAgdGVzdC0+Y2hlY2tEZXN0aW5hdGlvbkFuZERlbGV0ZUZpbGUoZG93bmxvYWQuZ2V0KCksIGtT
ZXJ2ZXJTdWdnZXN0ZWRGaWxlbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3REb3dubG9hZFJl
bW90ZUZpbGVFcnJvcihEb3dubG9hZEVycm9yVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sK
KyAgICB0ZXN0LT5tX2V4cGVjdGVkRXJyb3IgPSBXRUJLSVRfRE9XTkxPQURfRVJST1JfTkVUV09S
SzsKKyAgICBHUmVmUHRyPFdlYktpdERvd25sb2FkPiBkb3dubG9hZCA9IGFkb3B0R1JlZih0ZXN0
LT5kb3dubG9hZFVSSUFuZFdhaXRVbnRpbEZpbmlzaGVzKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgo
Ii9mb28iKSkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG93bmxvYWRfZ2V0X3dlYl92aWV3KGRv
d25sb2FkLmdldCgpKSk7CisKKyAgICBWZWN0b3I8RG93bmxvYWRUZXN0OjpEb3dubG9hZEV2ZW50
PiYgZXZlbnRzID0gdGVzdC0+bV9kb3dubG9hZEV2ZW50czsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
ZXZlbnRzLnNpemUoKSwgPT0sIDQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09
LCBEb3dubG9hZFRlc3Q6OlN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0s
ID09LCBEb3dubG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHNbMl0sID09LCBEb3dubG9hZFRlc3Q6OkZhaWxlZCk7CisgICAgZ19hc3NlcnRfY21w
aW50KGV2ZW50c1szXSwgPT0sIERvd25sb2FkVGVzdDo6RmluaXNoZWQpOworICAgIGV2ZW50cy5j
bGVhcigpOworICAgIFdlYktpdFVSSVJlc3BvbnNlKiByZXNwb25zZSA9IHdlYmtpdF9kb3dubG9h
ZF9nZXRfcmVzcG9uc2UoZG93bmxvYWQuZ2V0KCkpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Vi
a2l0X3VyaV9yZXNwb25zZV9nZXRfc3RhdHVzX2NvZGUocmVzcG9uc2UpLCA9PSwgNDA0KTsKKyAg
ICBnX2Fzc2VydF9jbXBmbG9hdCh3ZWJraXRfZG93bmxvYWRfZ2V0X2VzdGltYXRlZF9wcm9ncmVz
cyhkb3dubG9hZC5nZXQoKSksIDwsIDEpOworCisgICAgdGVzdC0+bV9leHBlY3RlZEVycm9yID0g
V0VCS0lUX0RPV05MT0FEX0VSUk9SX0RFU1RJTkFUSU9OOworICAgIGRvd25sb2FkID0gYWRvcHRH
UmVmKHRlc3QtPmRvd25sb2FkVVJJQW5kV2FpdFVudGlsRmluaXNoZXMoa1NlcnZlci0+Z2V0VVJJ
Rm9yUGF0aCgiL3Rlc3QucGRmIikpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2Rvd25sb2FkX2dl
dF93ZWJfdmlldyhkb3dubG9hZC5nZXQoKSkpOworCisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50
cy5zaXplKCksID09LCA0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgRG93
bmxvYWRUZXN0OjpTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwg
RG93bmxvYWRUZXN0OjpSZWNlaXZlZFJlc3BvbnNlKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZl
bnRzWzJdLCA9PSwgRG93bmxvYWRUZXN0OjpGYWlsZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHNbM10sID09LCBEb3dubG9hZFRlc3Q6OkZpbmlzaGVkKTsKKyAgICBldmVudHMuY2xlYXIo
KTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdCh3ZWJraXRfZG93bmxvYWRfZ2V0X2VzdGltYXRlZF9w
cm9ncmVzcyhkb3dubG9hZC5nZXQoKSksIDwsIDEpOworICAgIHRlc3QtPmNoZWNrRGVzdGluYXRp
b25BbmREZWxldGVGaWxlKGRvd25sb2FkLmdldCgpLCAiYmFyIik7CisKKyAgICB0ZXN0LT5tX2V4
cGVjdGVkRXJyb3IgPSBXRUJLSVRfRE9XTkxPQURfRVJST1JfQ0FOQ0VMTEVEX0JZX1VTRVI7Cisg
ICAgZG93bmxvYWQgPSBhZG9wdEdSZWYodGVzdC0+ZG93bmxvYWRVUklBbmRXYWl0VW50aWxGaW5p
c2hlcyhrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvdGVzdC5wZGYiKSkpOworICAgIGdfYXNzZXJ0
KCF3ZWJraXRfZG93bmxvYWRfZ2V0X3dlYl92aWV3KGRvd25sb2FkLmdldCgpKSk7CisKKyAgICBn
X2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDQpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHNbMF0sID09LCBEb3dubG9hZFRlc3Q6OlN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2Nt
cGludChldmVudHNbMV0sID09LCBEb3dubG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOworICAg
IGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBEb3dubG9hZFRlc3Q6OkZhaWxlZCk7Cisg
ICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1szXSwgPT0sIERvd25sb2FkVGVzdDo6RmluaXNoZWQp
OworICAgIGV2ZW50cy5jbGVhcigpOworICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHdlYmtpdF9kb3du
bG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNzKGRvd25sb2FkLmdldCgpKSwgPCwgMSk7CisgICAg
dGVzdC0+Y2hlY2tEZXN0aW5hdGlvbkFuZERlbGV0ZUZpbGUoZG93bmxvYWQuZ2V0KCksIGtTZXJ2
ZXJTdWdnZXN0ZWRGaWxlbmFtZSk7Cit9CisKK2NsYXNzIFdlYlZpZXdEb3dubG9hZFRlc3Q6IHB1
YmxpYyBXZWJWaWV3VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShX
ZWJWaWV3RG93bmxvYWRUZXN0KTsKKworICAgIHN0YXRpYyB2b2lkIGRvd25sb2FkU3RhcnRlZENh
bGxiYWNrKFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYktpdERvd25sb2FkKiBkb3dubG9h
ZCwgV2ViVmlld0Rvd25sb2FkVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPm1fZG93
bmxvYWQgPSBkb3dubG9hZDsKKyAgICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hl
blRlc3RGaW5pc2hlcyhHX09CSkVDVChkb3dubG9hZCkpOworICAgICAgICB0ZXN0LT5xdWl0TWFp
bkxvb3AoKTsKKyAgICB9CisKKyAgICBXZWJWaWV3RG93bmxvYWRUZXN0KCkKKyAgICB7CisgICAg
ICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KG1fd2ViVmll
dyksICJkb3dubG9hZC1zdGFydGVkIiwgR19DQUxMQkFDSyhkb3dubG9hZFN0YXJ0ZWRDYWxsYmFj
ayksIHRoaXMpOworICAgIH0KKworICAgIH5XZWJWaWV3RG93bmxvYWRUZXN0KCkKKyAgICB7Cisg
ICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZCh3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X2NvbnRleHQobV93ZWJWaWV3KSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwg
MCwgdGhpcyk7CisgICAgfQorCisgICAgdm9pZCB3YWl0VW50aWxEb3dubG9hZFN0YXJ0ZWQoKQor
ICAgIHsKKyAgICAgICAgbV9kb3dubG9hZCA9IDA7CisgICAgICAgIGdfbWFpbl9sb29wX3J1biht
X21haW5Mb29wKTsKKyAgICAgICAgZ19hc3NlcnQobV9kb3dubG9hZC5nZXQoKSk7CisgICAgfQor
CisgICAgc3RhdGljIGdib29sZWFuIGRvd25sb2FkRGVjaWRlRGVzdGluYXRpb25DYWxsYmFjayhX
ZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IGdjaGFyKiBzdWdnZXN0ZWRGaWxlbmFtZSwg
V2ViVmlld0Rvd25sb2FkVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIEdPd25QdHI8Y2hhcj4g
ZGVzdGluYXRpb24oZ19idWlsZF9maWxlbmFtZShrVGVtcERpcmVjdG9yeSwgc3VnZ2VzdGVkRmls
ZW5hbWUsIE5VTEwpKTsKKyAgICAgICAgR093blB0cjxjaGFyPiBkZXN0aW5hdGlvblVSSShnX2Zp
bGVuYW1lX3RvX3VyaShkZXN0aW5hdGlvbi5nZXQoKSwgMCwgMCkpOworICAgICAgICB3ZWJraXRf
ZG93bmxvYWRfc2V0X2Rlc3RpbmF0aW9uKGRvd25sb2FkLCBkZXN0aW5hdGlvblVSSS5nZXQoKSk7
CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGRvd25sb2Fk
RmluaXNoZWRDYWxsYmFjayhXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIFdlYlZpZXdEb3dubG9h
ZFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT5xdWl0TWFpbkxvb3AoKTsKKyAgICB9
CisKKyAgICB2b2lkIHdhaXRVbnRpbERvd25sb2FkRmluaXNoZWQoKQorICAgIHsKKyAgICAgICAg
Z19zaWduYWxfY29ubmVjdChtX2Rvd25sb2FkLmdldCgpLCAiZGVjaWRlLWRlc3RpbmF0aW9uIiwg
R19DQUxMQkFDSyhkb3dubG9hZERlY2lkZURlc3RpbmF0aW9uQ2FsbGJhY2spLCB0aGlzKTsKKyAg
ICAgICAgZ19zaWduYWxfY29ubmVjdChtX2Rvd25sb2FkLmdldCgpLCAiZmluaXNoZWQiLCBHX0NB
TExCQUNLKGRvd25sb2FkRmluaXNoZWRDYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX21haW5f
bG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgfQorCisgICAgR1JlZlB0cjxXZWJLaXREb3dubG9h
ZD4gbV9kb3dubG9hZDsKK307CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3RG93bmxvYWRVUkko
V2ViVmlld0Rvd25sb2FkVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBHUmVmUHRy
PFdlYktpdERvd25sb2FkPiBkb3dubG9hZCA9IGFkb3B0R1JlZih3ZWJraXRfd2ViX3ZpZXdfZG93
bmxvYWRfdXJpKHRlc3QtPm1fd2ViVmlldywga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3Rlc3Qu
cGRmIikuZGF0YSgpKSk7CisgICAgdGVzdC0+d2FpdFVudGlsRG93bmxvYWRTdGFydGVkKCk7Cisg
ICAgZ19hc3NlcnQodGVzdC0+bV93ZWJWaWV3ID09IHdlYmtpdF9kb3dubG9hZF9nZXRfd2ViX3Zp
ZXcoZG93bmxvYWQuZ2V0KCkpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxEb3dubG9hZEZpbmlzaGVk
KCk7CisKKyAgICBHUmVmUHRyPEdGaWxlPiBkb3dubG9hZEZpbGUgPSBhZG9wdEdSZWYoZ19maWxl
X25ld19mb3JfdXJpKHdlYmtpdF9kb3dubG9hZF9nZXRfZGVzdGluYXRpb24oZG93bmxvYWQuZ2V0
KCkpKSk7CisgICAgR1JlZlB0cjxHRmlsZUluZm8+IGRvd25sb2FkRmlsZUluZm8gPSBhZG9wdEdS
ZWYoZ19maWxlX3F1ZXJ5X2luZm8oZG93bmxvYWRGaWxlLmdldCgpLCBHX0ZJTEVfQVRUUklCVVRF
X1NUQU5EQVJEX1NJWkUsIHN0YXRpY19jYXN0PEdGaWxlUXVlcnlJbmZvRmxhZ3M+KDApLCAwLCAw
KSk7CisgICAgZ19hc3NlcnRfY21waW50KGdfZmlsZV9pbmZvX2dldF9zaXplKGRvd25sb2FkRmls
ZUluZm8uZ2V0KCkpLCA+LCAwKTsKKyAgICBnX2ZpbGVfZGVsZXRlKGRvd25sb2FkRmlsZS5nZXQo
KSwgMCwgMCk7Cit9CisKK2NsYXNzIFBvbGljeVJlc3BvbnNlRG93bmxvYWRUZXN0OiBwdWJsaWMg
V2ViVmlld0Rvd25sb2FkVGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVS
RShQb2xpY3lSZXNwb25zZURvd25sb2FkVGVzdCk7CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gZGVj
aWRlUG9saWN5Q2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0UG9saWN5RGVj
aXNpb24qIGRlY2lzaW9uLCBXZWJLaXRQb2xpY3lEZWNpc2lvblR5cGUgdHlwZSwgUG9saWN5UmVz
cG9uc2VEb3dubG9hZFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICBpZiAodHlwZSAhPSBXRUJL
SVRfUE9MSUNZX0RFQ0lTSU9OX1RZUEVfUkVTUE9OU0UpCisgICAgICAgICAgICByZXR1cm4gRkFM
U0U7CisKKyAgICAgICAgd2Via2l0X3BvbGljeV9kZWNpc2lvbl9kb3dubG9hZChkZWNpc2lvbik7
CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKworICAgIFBvbGljeVJlc3BvbnNlRG93bmxv
YWRUZXN0KCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAiZGVj
aWRlLXBvbGljeSIsIEdfQ0FMTEJBQ0soZGVjaWRlUG9saWN5Q2FsbGJhY2spLCB0aGlzKTsKKyAg
ICB9CisKKyAgICB+UG9saWN5UmVzcG9uc2VEb3dubG9hZFRlc3QoKQorICAgIHsKKyAgICAgICAg
Z19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fd2ViVmlldywgR19TSUdOQUxf
TUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7CisgICAgfQorCisgICAgdm9pZCBjYW5jZWxE
b3dubG9hZEFuZFdhaXRVbnRpbEZpbmlzaGVkKCkKKyAgICB7CisgICAgICAgIHdlYmtpdF9kb3du
bG9hZF9jYW5jZWwobV9kb3dubG9hZC5nZXQoKSk7CisgICAgICAgIHdhaXRVbnRpbERvd25sb2Fk
RmluaXNoZWQoKTsKKyAgICAgICAgbV9kb3dubG9hZCA9IDA7CisgICAgfQorfTsKKworc3RhdGlj
IHZvaWQgdGVzdFBvbGljeVJlc3BvbnNlRG93bmxvYWQoUG9saWN5UmVzcG9uc2VEb3dubG9hZFRl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8gVGVzdCB0aGF0IGEgZG93bmxvYWQg
c3RhcnRlZCBieSB0aGUgdGhlIHBvbGljeSBjaGVja2VyIGNvbnRhaW5zIHRoZSB3ZWIgdmlldy4K
KyAgICBDU3RyaW5nIHJlcXVlc3RVUkkgPSBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvdGVzdC5w
ZGYiKS5kYXRhKCk7CisgICAgdGVzdC0+bG9hZFVSSShyZXF1ZXN0VVJJLmRhdGEoKSk7CisgICAg
dGVzdC0+d2FpdFVudGlsRG93bmxvYWRTdGFydGVkKCk7CisKKyAgICBXZWJLaXRVUklSZXF1ZXN0
KiByZXF1ZXN0ID0gd2Via2l0X2Rvd25sb2FkX2dldF9yZXF1ZXN0KHRlc3QtPm1fZG93bmxvYWQu
Z2V0KCkpOworICAgIGdfYXNzZXJ0KHJlcXVlc3QpOworICAgIEFTU0VSVF9DTVBfQ1NUUklORyh3
ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KSwgPT0sIHJlcXVlc3RVUkkpOworCisg
ICAgZ19hc3NlcnQodGVzdC0+bV93ZWJWaWV3ID09IHdlYmtpdF9kb3dubG9hZF9nZXRfd2ViX3Zp
ZXcodGVzdC0+bV9kb3dubG9hZC5nZXQoKSkpOworICAgIHRlc3QtPmNhbmNlbERvd25sb2FkQW5k
V2FpdFVudGlsRmluaXNoZWQoKTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQoreworICAgIGtTZXJ2
ZXIgPSBuZXcgV2ViS2l0VGVzdFNlcnZlcigpOworICAgIGtTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxs
YmFjayk7CisKKyAgICBrVGVtcERpcmVjdG9yeSA9IGdfZGlyX21ha2VfdG1wKCJXZWJLaXQyVGVz
dHMtWFhYWFhYIiwgMCk7CisgICAgZ19hc3NlcnQoa1RlbXBEaXJlY3RvcnkpOworCisgICAgRG93
bmxvYWRUZXN0OjphZGQoIkRvd25sb2FkcyIsICJsb2NhbC1maWxlIiwgdGVzdERvd25sb2FkTG9j
YWxGaWxlKTsKKyAgICBEb3dubG9hZEVycm9yVGVzdDo6YWRkKCJEb3dubG9hZHMiLCAibG9jYWwt
ZmlsZS1lcnJvciIsIHRlc3REb3dubG9hZExvY2FsRmlsZUVycm9yKTsKKyAgICBEb3dubG9hZFRl
c3Q6OmFkZCgiRG93bmxvYWRzIiwgInJlbW90ZS1maWxlIiwgdGVzdERvd25sb2FkUmVtb3RlRmls
ZSk7CisgICAgRG93bmxvYWRFcnJvclRlc3Q6OmFkZCgiRG93bmxvYWRzIiwgInJlbW90ZS1maWxl
LWVycm9yIiwgdGVzdERvd25sb2FkUmVtb3RlRmlsZUVycm9yKTsKKyAgICBXZWJWaWV3RG93bmxv
YWRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiZG93bmxvYWQtdXJpIiwgdGVzdFdlYlZpZXdE
b3dubG9hZFVSSSk7CisgICAgUG9saWN5UmVzcG9uc2VEb3dubG9hZFRlc3Q6OmFkZCgiRG93bmxv
YWRzIiwgInBvbGljeS1kZWNpc2lvbi1kb3dubG9hZCIsIHRlc3RQb2xpY3lSZXNwb25zZURvd25s
b2FkKTsKK30KKwordm9pZCBhZnRlckFsbCgpCit7CisgICAgZGVsZXRlIGtTZXJ2ZXI7CisgICAg
Z19ybWRpcihrVGVtcERpcmVjdG9yeSk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdEZyYW1lLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Mkd0ay9UZXN0RnJhbWUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmE2M2IwNzkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdDJHdGsvVGVzdEZyYW1lLmNwcApAQCAtMCwwICsxLDY5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
bmNsdWRlICJXZWJQcm9jZXNzVGVzdFJ1bm5lci5oIgorI2luY2x1ZGUgIldlYlZpZXdUZXN0Lmgi
CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgorCitz
dGF0aWMgV2ViUHJvY2Vzc1Rlc3RSdW5uZXIqIHRlc3RSdW5uZXI7CisKK3N0YXRpYyB2b2lkIHdl
YmtpdEZyYW1lVGVzdFJ1bihXZWJWaWV3VGVzdCogdGVzdCwgY29uc3QgY2hhciogdGVzdE5hbWUp
Cit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHRlc3RIVE1MID0gIjxodG1sPjxib2R5PjwvYm9k
eT48L2h0bWw+IjsKKyAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0SFRNTCwgMCk7CisgICAgdGVzdC0+
d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBHVmFyaWFudEJ1aWxkZXIgYnVpbGRlcjsK
KyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9pbml0KCZidWlsZGVyLCBHX1ZBUklBTlRfVFlQRV9WQVJE
SUNUKTsKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoJmJ1aWxkZXIsICJ7c3Z9IiwgInBhZ2VJ
RCIsIGdfdmFyaWFudF9uZXdfdWludDY0KHdlYmtpdF93ZWJfdmlld19nZXRfcGFnZV9pZCh0ZXN0
LT5tX3dlYlZpZXcpKSk7CisgICAgZ19hc3NlcnQodGVzdFJ1bm5lci0+cnVuVGVzdCgiV2ViS2l0
RnJhbWUiLCB0ZXN0TmFtZSwgZ192YXJpYW50X2J1aWxkZXJfZW5kKCZidWlsZGVyKSkpOworfQor
CitzdGF0aWMgdm9pZCB0ZXN0V2ViS2l0RnJhbWVNYWluRnJhbWUoV2ViVmlld1Rlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIpCit7CisgICAgd2Via2l0RnJhbWVUZXN0UnVuKHRlc3QsICJtYWluLWZy
YW1lIik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJLaXRGcmFtZVVSSShXZWJWaWV3VGVzdCog
dGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB3ZWJraXRGcmFtZVRlc3RSdW4odGVzdCwgInVy
aSIpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViS2l0RnJhbWVKYXZhU2NyaXB0Q29udGV4dChX
ZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB3ZWJraXRGcmFtZVRlc3RS
dW4odGVzdCwgImphdmFzY3JpcHQtY29udGV4dCIpOworfQorCit2b2lkIGJlZm9yZUFsbCgpCit7
CisgICAgdGVzdFJ1bm5lciA9IG5ldyBXZWJQcm9jZXNzVGVzdFJ1bm5lcigpOworICAgIHdlYmtp
dF93ZWJfY29udGV4dF9zZXRfd2ViX2V4dGVuc2lvbnNfZGlyZWN0b3J5KHdlYmtpdF93ZWJfY29u
dGV4dF9nZXRfZGVmYXVsdCgpLCBXRUJLSVRfVEVTVF9XRUJfRVhURU5TSU9OU19ESVIpOworCisg
ICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0RnJhbWUiLCAibWFpbi1mcmFtZSIsIHRlc3RXZWJL
aXRGcmFtZU1haW5GcmFtZSk7CisgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0RnJhbWUiLCAi
dXJpIiwgdGVzdFdlYktpdEZyYW1lVVJJKTsKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRG
cmFtZSIsICJqYXZhc2NyaXB0LWNvbnRleHQiLCB0ZXN0V2ViS2l0RnJhbWVKYXZhU2NyaXB0Q29u
dGV4dCk7Cit9CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworICAgIGRlbGV0ZSB0ZXN0UnVubmVyOwor
fQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RJ
bnNwZWN0b3IuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RJ
bnNwZWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMDQzMDMK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsv
VGVzdEluc3BlY3Rvci5jcHAKQEAgLTAsMCArMSwzNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiV2ViVmll
d1Rlc3QuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3Qv
R1JlZlB0ci5oPgorCitjbGFzcyBJbnNwZWN0b3JUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3Qgewor
cHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoSW5zcGVjdG9yVGVzdCk7CisKKyAg
ICBlbnVtIEluc3BlY3RvckV2ZW50cyB7CisgICAgICAgIE9wZW5XaW5kb3csCisgICAgICAgIEJy
aW5nVG9Gcm9udCwKKyAgICAgICAgQ2xvc2VkLAorICAgICAgICBBdHRhY2gsCisgICAgICAgIERl
dGFjaAorICAgIH07CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gb3BlbldpbmRvd0NhbGxiYWNrKFdl
YktpdFdlYkluc3BlY3RvciosIEluc3BlY3RvclRlc3QqIHRlc3QpCisgICAgeworICAgICAgICBy
ZXR1cm4gdGVzdC0+b3BlbldpbmRvdygpOworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBi
cmluZ1RvRnJvbnRDYWxsYmFjayhXZWJLaXRXZWJJbnNwZWN0b3IqLCBJbnNwZWN0b3JUZXN0KiB0
ZXN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRlc3QtPmJyaW5nVG9Gcm9udCgpOworICAgIH0K
KworICAgIHN0YXRpYyB2b2lkIGNsb3NlZENhbGxiYWNrKFdlYktpdFdlYkluc3BlY3RvciosIElu
c3BlY3RvclRlc3QqIHRlc3QpCisgICAgeworICAgICAgICByZXR1cm4gdGVzdC0+Y2xvc2VkKCk7
CisgICAgfQorCisgICAgc3RhdGljIGdib29sZWFuIGF0dGFjaENhbGxiYWNrKFdlYktpdFdlYklu
c3BlY3RvciosIEluc3BlY3RvclRlc3QqIHRlc3QpCisgICAgeworICAgICAgICByZXR1cm4gdGVz
dC0+YXR0YWNoKCk7CisgICAgfQorCisgICAgc3RhdGljIGdib29sZWFuIGRldGFjaENhbGxiYWNr
KFdlYktpdFdlYkluc3BlY3RvciosIEluc3BlY3RvclRlc3QqIHRlc3QpCisgICAgeworICAgICAg
ICByZXR1cm4gdGVzdC0+ZGV0YWNoKCk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIGdNaW5pbXVtQXR0YWNoZWRJbnNwZWN0b3JXaWR0aCA9IDc1MDsKKyAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgZ01pbmltdW1BdHRhY2hlZEluc3BlY3RvckhlaWdodCA9IDI1MDsKKworICAg
IEluc3BlY3RvclRlc3QoKQorICAgICAgICA6IFdlYlZpZXdUZXN0KCkKKyAgICAgICAgLCBtX2lu
c3BlY3Rvcih3ZWJraXRfd2ViX3ZpZXdfZ2V0X2luc3BlY3RvcihtX3dlYlZpZXcpKQorICAgIHsK
KyAgICAgICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfZGV2ZWxvcGVyX2V4dHJhcyh3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKG1fd2ViVmlldyksIFRSVUUpOworICAgICAgICBhc3Nl
cnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKG1faW5zcGVjdG9yKSk7
CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9pbnNwZWN0b3IsICJvcGVuLXdpbmRvdyIsIEdf
Q0FMTEJBQ0sob3BlbldpbmRvd0NhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIGdfc2lnbmFsX2Nv
bm5lY3QobV9pbnNwZWN0b3IsICJicmluZy10by1mcm9udCIsIEdfQ0FMTEJBQ0soYnJpbmdUb0Zy
b250Q2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX2luc3BlY3Rv
ciwgImNsb3NlZCIsIEdfQ0FMTEJBQ0soY2xvc2VkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAg
Z19zaWduYWxfY29ubmVjdChtX2luc3BlY3RvciwgImF0dGFjaCIsIEdfQ0FMTEJBQ0soYXR0YWNo
Q2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX2luc3BlY3Rvciwg
ImRldGFjaCIsIEdfQ0FMTEJBQ0soZGV0YWNoQ2FsbGJhY2spLCB0aGlzKTsKKyAgICB9CisKKyAg
ICB+SW5zcGVjdG9yVGVzdCgpCisgICAgeworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNj
b25uZWN0X21hdGNoZWQobV9pbnNwZWN0b3IsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAs
IDAsIHRoaXMpOworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBvcGVuV2luZG93KCkKKyAgICB7
CisgICAgICAgIG1fZXZlbnRzLmFwcGVuZChPcGVuV2luZG93KTsKKyAgICAgICAgZ19tYWluX2xv
b3BfcXVpdChtX21haW5Mb29wKTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAg
dmlydHVhbCBib29sIGJyaW5nVG9Gcm9udCgpCisgICAgeworICAgICAgICBtX2V2ZW50cy5hcHBl
bmQoQnJpbmdUb0Zyb250KTsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX21haW5Mb29wKTsK
KyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBjbG9zZWQo
KQorICAgIHsKKyAgICAgICAgbV9ldmVudHMuYXBwZW5kKENsb3NlZCk7CisgICAgfQorCisgICAg
dmlydHVhbCBib29sIGF0dGFjaCgpCisgICAgeworICAgICAgICBtX2V2ZW50cy5hcHBlbmQoQXR0
YWNoKTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIGRl
dGFjaCgpCisgICAgeworICAgICAgICBtX2V2ZW50cy5hcHBlbmQoRGV0YWNoKTsKKyAgICAgICAg
cmV0dXJuIFRSVUU7CisgICAgfQorCisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gc2hvd0lkbGUoSW5z
cGVjdG9yVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHdlYmtpdF93ZWJfaW5zcGVjdG9yX3No
b3codGVzdC0+bV9pbnNwZWN0b3IpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisg
ICAgdm9pZCBzaG93KCkKKyAgICB7CisgICAgICAgIGdfaWRsZV9hZGQocmVpbnRlcnByZXRfY2Fz
dDxHU291cmNlRnVuYz4oc2hvd0lkbGUpLCB0aGlzKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVu
KG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIHZvaWQgcmVzaXplVmlld0FuZEF0dGFjaCgpCisg
ICAgeworICAgICAgICAvLyBSZXNpemUgdGhlIHZpZXcgdG8gbWFrZSByb29tIGZvciB0aGUgaW5z
cGVjdG9yLgorICAgICAgICByZXNpemVWaWV3KGdNaW5pbXVtQXR0YWNoZWRJbnNwZWN0b3JXaWR0
aCwgKGdNaW5pbXVtQXR0YWNoZWRJbnNwZWN0b3JIZWlnaHQgKyAxKSAqIDQgLyAzKTsKKyAgICAg
ICAgd2Via2l0X3dlYl9pbnNwZWN0b3JfYXR0YWNoKG1faW5zcGVjdG9yKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgZ2Jvb2xlYW4gZGV0YWNoSWRsZShJbnNwZWN0b3JUZXN0KiB0ZXN0KQorICAgIHsK
KyAgICAgICAgd2Via2l0X3dlYl9pbnNwZWN0b3JfZGV0YWNoKHRlc3QtPm1faW5zcGVjdG9yKTsK
KyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIHZvaWQgZGV0YWNoQW5kV2FpdFVu
dGlsV2luZG93T3BlbmVkKCkKKyAgICB7CisgICAgICAgIGdfaWRsZV9hZGQocmVpbnRlcnByZXRf
Y2FzdDxHU291cmNlRnVuYz4oZGV0YWNoSWRsZSksIHRoaXMpOworICAgICAgICBnX21haW5fbG9v
cF9ydW4obV9tYWluTG9vcCk7CisgICAgfQorCisgICAgdm9pZCBjbG9zZSgpCisgICAgeworICAg
ICAgICB3ZWJraXRfd2ViX2luc3BlY3Rvcl9jbG9zZShtX2luc3BlY3Rvcik7CisgICAgfQorCisg
ICAgV2ViS2l0V2ViSW5zcGVjdG9yKiBtX2luc3BlY3RvcjsKKyAgICBWZWN0b3I8SW5zcGVjdG9y
RXZlbnRzPiBtX2V2ZW50czsKK307CisKK3N0YXRpYyB2b2lkIHRlc3RJbnNwZWN0b3JEZWZhdWx0
KEluc3BlY3RvclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+c2hvd0lu
V2luZG93QW5kV2FpdFVudGlsTWFwcGVkKEdUS19XSU5ET1dfVE9QTEVWRUwpOworICAgIHRlc3Qt
PnJlc2l6ZVZpZXcoMjAwLCAyMDApOworICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keT48
cD5XZWJLaXRHVEsrIEluc3BlY3RvciB0ZXN0PC9wPjwvYm9keT48L2h0bWw+IiwgMCk7CisgICAg
dGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5zaG93KCk7CisgICAg
Ly8gV2UgZG9uJ3QgYWRkIHRoZSB2aWV3IHRvIGEgY29udGFpbmVyLCBzbyBjb25zdW1lIHRoZSB3
ZWFrIHJlZiB3aXRoIEdSZWZQdHIuCisgICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3QmFzZT4gaW5z
cGVjdG9yVmlldyA9IHdlYmtpdF93ZWJfaW5zcGVjdG9yX2dldF93ZWJfdmlldyh0ZXN0LT5tX2lu
c3BlY3Rvcik7CisgICAgZ19hc3NlcnQoaW5zcGVjdG9yVmlldy5nZXQoKSk7CisgICAgdGVzdC0+
YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChpbnNwZWN0b3JW
aWV3LmdldCgpKSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfaW5zcGVjdG9yX2lzX2F0dGFj
aGVkKHRlc3QtPm1faW5zcGVjdG9yKSk7CisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfd2Vi
X2luc3BlY3Rvcl9nZXRfYXR0YWNoZWRfaGVpZ2h0KHRlc3QtPm1faW5zcGVjdG9yKSwgPT0sIDAp
OworICAgIFZlY3RvcjxJbnNwZWN0b3JUZXN0OjpJbnNwZWN0b3JFdmVudHM+JiBldmVudHMgPSB0
ZXN0LT5tX2V2ZW50czsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDEp
OworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBJbnNwZWN0b3JUZXN0OjpPcGVu
V2luZG93KTsKKyAgICB0ZXN0LT5tX2V2ZW50cy5jbGVhcigpOworCisgICAgdGVzdC0+c2hvdygp
OworICAgIGV2ZW50cyA9IHRlc3QtPm1fZXZlbnRzOworICAgIGdfYXNzZXJ0X2NtcGludChldmVu
dHMuc2l6ZSgpLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIElu
c3BlY3RvclRlc3Q6OkJyaW5nVG9Gcm9udCk7CisgICAgdGVzdC0+bV9ldmVudHMuY2xlYXIoKTsK
KworICAgIHRlc3QtPnJlc2l6ZVZpZXdBbmRBdHRhY2goKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRf
d2ViX2luc3BlY3Rvcl9pc19hdHRhY2hlZCh0ZXN0LT5tX2luc3BlY3RvcikpOworICAgIGdfYXNz
ZXJ0X2NtcHVpbnQod2Via2l0X3dlYl9pbnNwZWN0b3JfZ2V0X2F0dGFjaGVkX2hlaWdodCh0ZXN0
LT5tX2luc3BlY3RvciksID49LCBJbnNwZWN0b3JUZXN0OjpnTWluaW11bUF0dGFjaGVkSW5zcGVj
dG9ySGVpZ2h0KTsKKyAgICBldmVudHMgPSB0ZXN0LT5tX2V2ZW50czsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNb
MF0sID09LCBJbnNwZWN0b3JUZXN0OjpBdHRhY2gpOworICAgIHRlc3QtPm1fZXZlbnRzLmNsZWFy
KCk7CisKKyAgICB0ZXN0LT5kZXRhY2hBbmRXYWl0VW50aWxXaW5kb3dPcGVuZWQoKTsKKyAgICBn
X2Fzc2VydCghd2Via2l0X3dlYl9pbnNwZWN0b3JfaXNfYXR0YWNoZWQodGVzdC0+bV9pbnNwZWN0
b3IpKTsKKyAgICBldmVudHMgPSB0ZXN0LT5tX2V2ZW50czsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
ZXZlbnRzLnNpemUoKSwgPT0sIDIpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09
LCBJbnNwZWN0b3JUZXN0OjpEZXRhY2gpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0s
ID09LCBJbnNwZWN0b3JUZXN0OjpPcGVuV2luZG93KTsKKyAgICB0ZXN0LT5tX2V2ZW50cy5jbGVh
cigpOworCisgICAgdGVzdC0+Y2xvc2UoKTsKKyAgICBldmVudHMgPSB0ZXN0LT5tX2V2ZW50czsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0
X2NtcGludChldmVudHNbMF0sID09LCBJbnNwZWN0b3JUZXN0OjpDbG9zZWQpOworICAgIHRlc3Qt
Pm1fZXZlbnRzLmNsZWFyKCk7Cit9CisKK2NsYXNzIEN1c3RvbUluc3BlY3RvclRlc3Q6IHB1Ymxp
YyBJbnNwZWN0b3JUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKEN1
c3RvbUluc3BlY3RvclRlc3QpOworCisgICAgQ3VzdG9tSW5zcGVjdG9yVGVzdCgpCisgICAgICAg
IDogSW5zcGVjdG9yVGVzdCgpCisgICAgICAgICwgbV9pbnNwZWN0b3JXaW5kb3coMCkKKyAgICB7
CisgICAgfQorCisgICAgfkN1c3RvbUluc3BlY3RvclRlc3QoKQorICAgIHsKKyAgICAgICAgaWYg
KG1faW5zcGVjdG9yV2luZG93KQorICAgICAgICAgICAgZ3RrX3dpZGdldF9kZXN0cm95KG1faW5z
cGVjdG9yV2luZG93KTsKKyAgICB9CisKKyAgICBib29sIG9wZW5XaW5kb3coKQorICAgIHsKKyAg
ICAgICAgZ19hc3NlcnQoIW1faW5zcGVjdG9yV2luZG93KTsKKyAgICAgICAgbV9pbnNwZWN0b3JX
aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKKyAgICAgICAgV2Vi
S2l0V2ViVmlld0Jhc2UqIGluc3BlY3RvclZpZXcgPSB3ZWJraXRfd2ViX2luc3BlY3Rvcl9nZXRf
d2ViX3ZpZXcobV9pbnNwZWN0b3IpOworICAgICAgICBnX2Fzc2VydChpbnNwZWN0b3JWaWV3KTsK
KyAgICAgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihtX2luc3BlY3RvcldpbmRv
dyksIEdUS19XSURHRVQoaW5zcGVjdG9yVmlldykpOworICAgICAgICBndGtfd2lkZ2V0X3Nob3df
YWxsKG1faW5zcGVjdG9yV2luZG93KTsKKworICAgICAgICByZXR1cm4gSW5zcGVjdG9yVGVzdDo6
b3BlbldpbmRvdygpOworICAgIH0KKworICAgIHZvaWQgY2xvc2VkKCkKKyAgICB7CisgICAgICAg
IGlmIChtX2luc3BlY3RvcldpbmRvdykgeworICAgICAgICAgICAgZ3RrX3dpZGdldF9kZXN0cm95
KG1faW5zcGVjdG9yV2luZG93KTsKKyAgICAgICAgICAgIG1faW5zcGVjdG9yV2luZG93ID0gMDsK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBJbnNwZWN0b3JUZXN0OjpjbG9zZWQoKTsKKyAg
ICB9CisKKyAgICBib29sIGF0dGFjaCgpCisgICAgeworICAgICAgICBHUmVmUHRyPFdlYktpdFdl
YlZpZXdCYXNlPiBpbnNwZWN0b3JWaWV3ID0gd2Via2l0X3dlYl9pbnNwZWN0b3JfZ2V0X3dlYl92
aWV3KG1faW5zcGVjdG9yKTsKKyAgICAgICAgaWYgKG1faW5zcGVjdG9yV2luZG93KSB7CisgICAg
ICAgICAgICBndGtfY29udGFpbmVyX3JlbW92ZShHVEtfQ09OVEFJTkVSKG1faW5zcGVjdG9yV2lu
ZG93KSwgR1RLX1dJREdFVChpbnNwZWN0b3JWaWV3LmdldCgpKSk7CisgICAgICAgICAgICBndGtf
d2lkZ2V0X2Rlc3Ryb3kobV9pbnNwZWN0b3JXaW5kb3cpOworICAgICAgICAgICAgbV9pbnNwZWN0
b3JXaW5kb3cgPSAwOworICAgICAgICB9CisKKyAgICAgICAgR3RrV2lkZ2V0KiBwYW5lOworICAg
ICAgICBpZiAoZ3RrX2Jpbl9nZXRfY2hpbGQoR1RLX0JJTihtX3BhcmVudFdpbmRvdykpID09IEdU
S19XSURHRVQobV93ZWJWaWV3KSkgeworICAgICAgICAgICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3
PiBpbnNwZWN0ZWRWaWV3ID0gbV93ZWJWaWV3OworICAgICAgICAgICAgZ3RrX2NvbnRhaW5lcl9y
ZW1vdmUoR1RLX0NPTlRBSU5FUihtX3BhcmVudFdpbmRvdyksIEdUS19XSURHRVQobV93ZWJWaWV3
KSk7CisgICAgICAgICAgICBwYW5lID0gZ3RrX3BhbmVkX25ldyhHVEtfT1JJRU5UQVRJT05fVkVS
VElDQUwpOworICAgICAgICAgICAgZ3RrX3BhbmVkX2FkZDEoR1RLX1BBTkVEKHBhbmUpLCBHVEtf
V0lER0VUKG1fd2ViVmlldykpOworICAgICAgICAgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NP
TlRBSU5FUihtX3BhcmVudFdpbmRvdyksIHBhbmUpOworICAgICAgICAgICAgZ3RrX3dpZGdldF9z
aG93X2FsbChwYW5lKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBwYW5lID0gZ3RrX2Jp
bl9nZXRfY2hpbGQoR1RLX0JJTihtX3BhcmVudFdpbmRvdykpOworICAgICAgICBndGtfcGFuZWRf
c2V0X3Bvc2l0aW9uKEdUS19QQU5FRChwYW5lKSwgd2Via2l0X3dlYl9pbnNwZWN0b3JfZ2V0X2F0
dGFjaGVkX2hlaWdodChtX2luc3BlY3RvcikpOworICAgICAgICBndGtfcGFuZWRfYWRkMihHVEtf
UEFORUQocGFuZSksIEdUS19XSURHRVQoaW5zcGVjdG9yVmlldy5nZXQoKSkpOworCisgICAgICAg
IHJldHVybiBJbnNwZWN0b3JUZXN0OjphdHRhY2goKTsKKyAgICB9CisKKyAgICBib29sIGRldGFj
aCgpCisgICAgeworICAgICAgICBHUmVmUHRyPFdlYktpdFdlYlZpZXdCYXNlPiBpbnNwZWN0b3JW
aWV3ID0gd2Via2l0X3dlYl9pbnNwZWN0b3JfZ2V0X3dlYl92aWV3KG1faW5zcGVjdG9yKTsKKyAg
ICAgICAgR3RrV2lkZ2V0KiBwYW5lID0gZ3RrX2Jpbl9nZXRfY2hpbGQoR1RLX0JJTihtX3BhcmVu
dFdpbmRvdykpOworICAgICAgICBnX2Fzc2VydChHVEtfSVNfUEFORUQocGFuZSkpOworICAgICAg
ICBndGtfY29udGFpbmVyX3JlbW92ZShHVEtfQ09OVEFJTkVSKHBhbmUpLCBHVEtfV0lER0VUKGlu
c3BlY3RvclZpZXcuZ2V0KCkpKTsKKyAgICAgICAgcmV0dXJuIEluc3BlY3RvclRlc3Q6OmRldGFj
aCgpOworICAgIH0KKworICAgIHZvaWQgZGVzdHJveVdpbmRvdygpCisgICAgeworICAgICAgICBn
X2Fzc2VydChtX2luc3BlY3RvcldpbmRvdyk7CisgICAgICAgIGd0a193aWRnZXRfZGVzdHJveSht
X2luc3BlY3RvcldpbmRvdyk7CisgICAgICAgIG1faW5zcGVjdG9yV2luZG93ID0gMDsKKyAgICB9
CisKKyAgICBHdGtXaWRnZXQqIG1faW5zcGVjdG9yV2luZG93OworfTsKKworc3RhdGljIHZvaWQg
dGVzdEluc3BlY3Rvck1hbnVhbEF0dGFjaERldGFjaChDdXN0b21JbnNwZWN0b3JUZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1h
cHBlZChHVEtfV0lORE9XX1RPUExFVkVMKTsKKyAgICB0ZXN0LT5yZXNpemVWaWV3KDIwMCwgMjAw
KTsKKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHk+PHA+V2ViS2l0R1RLKyBJbnNwZWN0
b3IgdGVzdDwvcD48L2JvZHk+PC9odG1sPiIsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRG
aW5pc2hlZCgpOworCisgICAgdGVzdC0+c2hvdygpOworICAgIHRlc3QtPmFzc2VydE9iamVjdElz
RGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1Qod2Via2l0X3dlYl9pbnNwZWN0b3JfZ2V0
X3dlYl92aWV3KHRlc3QtPm1faW5zcGVjdG9yKSkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2Vi
X2luc3BlY3Rvcl9pc19hdHRhY2hlZCh0ZXN0LT5tX2luc3BlY3RvcikpOworICAgIFZlY3RvcjxJ
bnNwZWN0b3JUZXN0OjpJbnNwZWN0b3JFdmVudHM+JiBldmVudHMgPSB0ZXN0LT5tX2V2ZW50czsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0
X2NtcGludChldmVudHNbMF0sID09LCBJbnNwZWN0b3JUZXN0OjpPcGVuV2luZG93KTsKKyAgICB0
ZXN0LT5tX2V2ZW50cy5jbGVhcigpOworCisgICAgdGVzdC0+cmVzaXplVmlld0FuZEF0dGFjaCgp
OworICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfaW5zcGVjdG9yX2lzX2F0dGFjaGVkKHRlc3QtPm1f
aW5zcGVjdG9yKSk7CisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfd2ViX2luc3BlY3Rvcl9n
ZXRfYXR0YWNoZWRfaGVpZ2h0KHRlc3QtPm1faW5zcGVjdG9yKSwgPj0sIEluc3BlY3RvclRlc3Q6
OmdNaW5pbXVtQXR0YWNoZWRJbnNwZWN0b3JIZWlnaHQpOworICAgIGV2ZW50cyA9IHRlc3QtPm1f
ZXZlbnRzOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgMSk7CisgICAg
Z19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIEluc3BlY3RvclRlc3Q6OkF0dGFjaCk7Cisg
ICAgdGVzdC0+bV9ldmVudHMuY2xlYXIoKTsKKworICAgIHRlc3QtPmRldGFjaEFuZFdhaXRVbnRp
bFdpbmRvd09wZW5lZCgpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX2luc3BlY3Rvcl9pc19h
dHRhY2hlZCh0ZXN0LT5tX2luc3BlY3RvcikpOworICAgIGV2ZW50cyA9IHRlc3QtPm1fZXZlbnRz
OworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgMik7CisgICAgZ19hc3Nl
cnRfY21waW50KGV2ZW50c1swXSwgPT0sIEluc3BlY3RvclRlc3Q6OkRldGFjaCk7CisgICAgZ19h
c3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIEluc3BlY3RvclRlc3Q6Ok9wZW5XaW5kb3cpOwor
ICAgIHRlc3QtPm1fZXZlbnRzLmNsZWFyKCk7CisKKyAgICB0ZXN0LT5yZXNpemVWaWV3QW5kQXR0
YWNoKCk7CisgICAgZ19hc3NlcnQod2Via2l0X3dlYl9pbnNwZWN0b3JfaXNfYXR0YWNoZWQodGVz
dC0+bV9pbnNwZWN0b3IpKTsKKyAgICB0ZXN0LT5tX2V2ZW50cy5jbGVhcigpOworICAgIHRlc3Qt
PmNsb3NlKCk7CisgICAgZXZlbnRzID0gdGVzdC0+bV9ldmVudHM7CisgICAgZ19hc3NlcnRfY21w
aW50KGV2ZW50cy5zaXplKCksID09LCAyKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBd
LCA9PSwgSW5zcGVjdG9yVGVzdDo6RGV0YWNoKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRz
WzFdLCA9PSwgSW5zcGVjdG9yVGVzdDo6Q2xvc2VkKTsKKyAgICB0ZXN0LT5tX2V2ZW50cy5jbGVh
cigpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0SW5zcGVjdG9yQ3VzdG9tQ29udGFpbmVyRGVzdHJv
eWVkKEN1c3RvbUluc3BlY3RvclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVz
dC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKEdUS19XSU5ET1dfVE9QTEVWRUwpOwor
ICAgIHRlc3QtPnJlc2l6ZVZpZXcoMjAwLCAyMDApOworICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRt
bD48Ym9keT48cD5XZWJLaXRHVEsrIEluc3BlY3RvciB0ZXN0PC9wPjwvYm9keT48L2h0bWw+Iiwg
MCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5zaG93
KCk7CisgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09C
SkVDVCh3ZWJraXRfd2ViX2luc3BlY3Rvcl9nZXRfd2ViX3ZpZXcodGVzdC0+bV9pbnNwZWN0b3Ip
KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfaW5zcGVjdG9yX2lzX2F0dGFjaGVkKHRlc3Qt
Pm1faW5zcGVjdG9yKSk7CisKKyAgICB0ZXN0LT5tX2V2ZW50cy5jbGVhcigpOworICAgIHRlc3Qt
PmRlc3Ryb3lXaW5kb3coKTsKKyAgICBWZWN0b3I8SW5zcGVjdG9yVGVzdDo6SW5zcGVjdG9yRXZl
bnRzPiYgZXZlbnRzID0gdGVzdC0+bV9ldmVudHM7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50
cy5zaXplKCksID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgSW5z
cGVjdG9yVGVzdDo6Q2xvc2VkKTsKKyAgICB0ZXN0LT5tX2V2ZW50cy5jbGVhcigpOworfQorCit2
b2lkIGJlZm9yZUFsbCgpCit7CisgICAgSW5zcGVjdG9yVGVzdDo6YWRkKCJXZWJLaXRXZWJJbnNw
ZWN0b3IiLCAiZGVmYXVsdCIsIHRlc3RJbnNwZWN0b3JEZWZhdWx0KTsKKyAgICBDdXN0b21JbnNw
ZWN0b3JUZXN0OjphZGQoIldlYktpdFdlYkluc3BlY3RvciIsICJtYW51YWwtYXR0YWNoLWRldGFj
aCIsIHRlc3RJbnNwZWN0b3JNYW51YWxBdHRhY2hEZXRhY2gpOworICAgIEN1c3RvbUluc3BlY3Rv
clRlc3Q6OmFkZCgiV2ViS2l0V2ViSW5zcGVjdG9yIiwgImN1c3RvbS1jb250YWluZXItZGVzdHJv
eWVkIiwgdGVzdEluc3BlY3RvckN1c3RvbUNvbnRhaW5lckRlc3Ryb3llZCk7Cit9CisKK3ZvaWQg
YWZ0ZXJBbGwoKQoreworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyR3RrL1Rlc3RJbnNwZWN0b3JTZXJ2ZXIuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXQyR3RrL1Rlc3RJbnNwZWN0b3JTZXJ2ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmZiYjYyY2UKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdEluc3BlY3RvclNlcnZlci5jcHAKQEAgLTAs
MCArMSwyOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmlj
cyBMdGQuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCisjaW5jbHVkZSA8d3RmL2dvYmpl
Y3QvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCisvLyBOYW1l
IG9mIHRoZSB0ZXN0IHNlcnZlciBhcHBsaWNhdGlvbiBjcmVhdGluZyB0aGUgd2ViVmlldyBvYmpl
Y3QuCitzdGF0aWMgY29uc3QgY2hhciogZ1Rlc3RTZXJ2ZXJBcHBOYW1lID0gIkluc3BlY3RvclRl
c3RTZXJ2ZXIiOworCisvLyBNYXggc2Vjb25kcyB0byB3YWl0IGZvciB0aGUgdGVzdCBzZXJ2ZXIg
YmVmb3JlIGluc3BlY3RpbmcgaXQuCitzdGF0aWMgY29uc3QgaW50IGdNYXhXYWl0Rm9yQ2hpbGQg
PSA1OworCisvLyBUaGUgUElEIGZvciB0aGUgdGVzdCBzZXJ2ZXIgcnVubmluZywgc28gd2UgY2Fu
IGtpbGwgaXQgaWYgbmVlZGVkLgorc3RhdGljIEdQaWQgZ0NoaWxkUHJvY2Vzc1BpZCA9IDA7CisK
Ky8vIFdoZXRoZXIgdGhlIGNoaWxkIGhhcyByZXBsaWVkIGFuZCBpdCdzIHJlYWR5Lgorc3RhdGlj
IGJvb2wgZ0NoaWxkSXNSZWFkeSA9IGZhbHNlOworCitzdGF0aWMgdm9pZCBzdG9wVGVzdFNlcnZl
cigpCit7CisgICAgLy8gRG8gbm90aGluZyBpZiB0aGVyZSdzIG5vIHNlcnZlciBydW5uaW5nLgor
ICAgIGlmICghZ0NoaWxkUHJvY2Vzc1BpZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ19zcGF3
bl9jbG9zZV9waWQoZ0NoaWxkUHJvY2Vzc1BpZCk7CisgICAga2lsbChnQ2hpbGRQcm9jZXNzUGlk
LCBTSUdURVJNKTsKKyAgICBnQ2hpbGRQcm9jZXNzUGlkID0gMDsKK30KKworc3RhdGljIHZvaWQg
c2lnQWJvcnRIYW5kbGVyKGludCBzaWdOdW0pCit7CisgICAgLy8gSnVzdCBzdG9wIHRoZSB0ZXN0
IHNlcnZlciBpZiBTSUdBQlJUIHdhcyByZWNlaXZlZC4KKyAgICBzdG9wVGVzdFNlcnZlcigpOwor
fQorCitzdGF0aWMgZ3BvaW50ZXIgdGVzdFNlcnZlck1vbml0b3JUaHJlYWRGdW5jKGdwb2ludGVy
KQoreworICAgIC8vIFdhaXQgZm9yIHRoZSBzcGVjaWZpZWQgdGltZW91dCB0byBoYXBwZW4uCisg
ICAgZ191c2xlZXAoZ01heFdhaXRGb3JDaGlsZCAqIEdfVVNFQ19QRVJfU0VDKTsKKworICAgIC8v
IEtpbGwgdGhlIGNoaWxkIHByb2Nlc3MgaWYgbm90IHJlYWR5IHlldC4KKyAgICBpZiAoIWdDaGls
ZElzUmVhZHkpCisgICAgICAgIHN0b3BUZXN0U2VydmVyKCk7CisKKyAgICBnX3RocmVhZF9leGl0
KDApOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzdGFydFRlc3RTZXJ2ZXJNb25p
dG9yKCkKK3sKKyAgICBnQ2hpbGRJc1JlYWR5ID0gZmFsc2U7CisgICAgZ190aHJlYWRfbmV3KCJU
ZXN0U2VydmVyTW9uaXRvciIsIHRlc3RTZXJ2ZXJNb25pdG9yVGhyZWFkRnVuYywgMCk7Cit9CisK
K3N0YXRpYyB2b2lkIHN0YXJ0VGVzdFNlcnZlcigpCit7CisgICAgLy8gUHJlcGFyZSBhcmd2W10g
Zm9yIHNwYXduaW5nIHRoZSBzZXJ2ZXIgcHJvY2Vzcy4KKyAgICBHT3duUHRyPGNoYXI+IHRlc3RT
ZXJ2ZXJQYXRoKGdfYnVpbGRfZmlsZW5hbWUoV0VCS0lUX0VYRUNfUEFUSCwgIlRlc3RXZWJLaXRB
UEkiLCAiV2ViS2l0Mkd0ayIsIGdUZXN0U2VydmVyQXBwTmFtZSwgTlVMTCkpOworCisgICAgLy8g
V2UgaW5zdGFsbCBhIGhhbmRsZXIgdG8gZW5zdXJlIHRoYXQgd2Uga2lsbCB0aGUgY2hpbGQgcHJv
Y2VzcworICAgIC8vIGlmIHRoZSBwYXJlbnQgZGllcyBiZWNhdXNlIG9mIHdoYXRldmVyIHRoZSBy
ZWFzb24gaXMuCisgICAgc2lnbmFsKFNJR0FCUlQsIHNpZ0Fib3J0SGFuZGxlcik7CisKKyAgICBj
aGFyKiB0ZXN0U2VydmVyQXJndlsyXTsKKyAgICB0ZXN0U2VydmVyQXJndlswXSA9IHRlc3RTZXJ2
ZXJQYXRoLmdldCgpOworICAgIHRlc3RTZXJ2ZXJBcmd2WzFdID0gMDsKKworICAgIC8vIFNwYXdu
IHRoZSBzZXJ2ZXIsIGdldHRpbmcgaXRzIHN0ZG91dCBmaWxlIGRlc2NyaXB0b3IgdG8gc2V0IGEK
KyAgICAvLyBjb21tdW5pY2F0aW9uIGNoYW5uZWwsIHNvIHdlIGtub3cgd2hlbiBpdCdzIHJlYWR5
LgorICAgIGludCBjaGlsZFN0ZG91dCA9IDA7CisgICAgZ19hc3NlcnQoZ19zcGF3bl9hc3luY193
aXRoX3BpcGVzKDAsIHRlc3RTZXJ2ZXJBcmd2LCAwLCBzdGF0aWNfY2FzdDxHU3Bhd25GbGFncz4o
MCksIDAsIDAsCisgICAgICAgICZnQ2hpbGRQcm9jZXNzUGlkLCAwLCAmY2hpbGRTdGRvdXQsIDAs
IDApKTsKKworICAgIC8vIFN0YXJ0IG1vbml0b3JpbmcgdGhlIHRlc3Qgc2VydmVyIChpbiBhIHNl
cGFyYXRlIHRocmVhZCkgdG8KKyAgICAvLyBlbnN1cmUgd2UgZG9uJ3QgYmxvY2sgb24gdGhlIGNo
aWxkIHByb2Nlc3MgbW9yZSB0aGFuIGEgdGltZW91dC4KKyAgICBzdGFydFRlc3RTZXJ2ZXJNb25p
dG9yKCk7CisKKyAgICBjaGFyIG1zZ1syXTsKKyAgICBHSU9DaGFubmVsKiBpb0NoYW5uZWwgPSBn
X2lvX2NoYW5uZWxfdW5peF9uZXcoY2hpbGRTdGRvdXQpOworICAgIGlmIChnX2lvX2NoYW5uZWxf
cmVhZF9jaGFycyhpb0NoYW5uZWwsIG1zZywgMiwgMCwgMCkgPT0gR19JT19TVEFUVVNfTk9STUFM
KSB7CisgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlIHNlcnZlciBzZW50IGEgbWVzc2FnZSBz
YXlpbmcgaXQncyByZWFkeQorICAgICAgICAvLyBhbmQgc3RvcmUgdGhlIHJlc3VsdCBnbG9iYWxs
eSwgc28gdGhlIG1vbml0b3IgY2FuIHNlZSBpdC4KKyAgICAgICAgZ0NoaWxkSXNSZWFkeSA9IG1z
Z1swXSA9PSAnTycgJiYgbXNnWzFdID09ICdLJzsKKyAgICB9CisgICAgZ19pb19jaGFubmVsX3Vu
cmVmKGlvQ2hhbm5lbCk7CisgICAgY2xvc2UoY2hpbGRTdGRvdXQpOworCisgICAgLy8gVGhlIHRp
bWVvdXQgd2FzIHJlYWNoZWQgYW5kIHRoZSBzZXJ2ZXIgaXMgbm90IHJlYWR5IHlldCwgc28KKyAg
ICAvLyBzdG9wIGl0IGlubWVkaWF0ZWx5LCBhbmQgbGV0IHRoZSB1bml0IHRlc3RzIGZhaWwuCisg
ICAgaWYgKCFnQ2hpbGRJc1JlYWR5KQorICAgICAgICBzdG9wVGVzdFNlcnZlcigpOworfQorCitj
bGFzcyBJbnNwZWN0b3JTZXJ2ZXJUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3QgeworcHVibGljOgor
ICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoSW5zcGVjdG9yU2VydmVyVGVzdCk7CisKKyAgICBJ
bnNwZWN0b3JTZXJ2ZXJUZXN0KCkKKyAgICAgICAgOiBXZWJWaWV3VGVzdCgpCisgICAgeworICAg
IH0KKworICAgIGJvb2wgZ2V0UGFnZUxpc3QoKQorICAgIHsKKyAgICAgICAgbG9hZEh0bWwoIjxz
Y3JpcHQgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiPlxuIgorICAgICAgICAgICAgInZhciBwYWdl
cztcbiIKKyAgICAgICAgICAgICJ2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0O1xuIgorICAg
ICAgICAgICAgInhoci5vcGVuKFwiR0VUXCIsIFwiL3BhZ2VsaXN0Lmpzb25cIik7XG4iCisgICAg
ICAgICAgICAieGhyLm9ubG9hZCA9IGZ1bmN0aW9uKGUpIHtcbiIKKyAgICAgICAgICAgICAgICAi
aWYgKHhoci5zdGF0dXMgPT0gMjAwKSB7XG4iCisgICAgICAgICAgICAgICAgICAgICJwYWdlcyA9
IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4iCisgICAgICAgICAgICAgICAgICAgICJk
b2N1bWVudC50aXRsZSA9IFwiT0tcIjtcbiIKKyAgICAgICAgICAgICAgICAifSBlbHNlIFxuIgor
ICAgICAgICAgICAgICAgICAgICAiZG9jdW1lbnQudGl0bGUgPSBcIkZBSUxcIjtcbiIKKyAgICAg
ICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgInhoci5zZW5kKCk7XG4iCisgICAgICAgICAg
ICAiPC9zY3JpcHQ+XG4iLAorICAgICAgICAgICAgImh0dHA6Ly8xMjcuMC4wLjE6Mjk5OS8iKTsK
KworICAgICAgICB3YWl0VW50aWxUaXRsZUNoYW5nZWQoKTsKKworICAgICAgICBpZiAoIXN0cmNt
cCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3RpdGxlKG1fd2ViVmlldyksICJPSyIpKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIH5J
bnNwZWN0b3JTZXJ2ZXJUZXN0KCkKKyAgICB7CisgICAgfQorfTsKKworLy8gVGVzdCB0byBnZXQg
aW5zcGVjdG9yIHNlcnZlciBwYWdlIGxpc3QgZnJvbSB0aGUgdGVzdCBzZXJ2ZXIuCisvLyBTaG91
bGQgY29udGFpbiBvbmx5IG9uZSBlbnRyeSBwb2ludGluZyB0byBodHRwOi8vMTI3LjAuMC4xOjI5
OTkvd2ViaW5zcGVjdG9yL01haW4uaHRtbD9wYWdlPTEKK3N0YXRpYyB2b2lkIHRlc3RJbnNwZWN0
b3JTZXJ2ZXJQYWdlTGlzdChJbnNwZWN0b3JTZXJ2ZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVy
KQoreworICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKworICAgIHRlc3QtPnNob3dJbldpbmRv
d0FuZFdhaXRVbnRpbE1hcHBlZChHVEtfV0lORE9XX1RPUExFVkVMKTsKKyAgICBnX2Fzc2VydCh0
ZXN0LT5nZXRQYWdlTGlzdCgpKTsKKworICAgIFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFz
Y3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoInBh
Z2VzLmxlbmd0aDsiLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRS
ZXN1bHQpOworICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7CisgICAgZ19hc3NlcnRfY21waW50
KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9OdW1iZXIoamF2YXNjcmlwdFJlc3VsdCks
ID09LCAxKTsKKworICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5k
V2FpdFVudGlsRmluaXNoZWQoInBhZ2VzWzBdLmlkOyIsICZlcnJvci5vdXRQdHIoKSk7CisgICAg
Z19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsK
KyAgICBpbnQgcGFnZUlkID0gV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb051bWJlcihq
YXZhc2NyaXB0UmVzdWx0KTsKKworICAgIEdPd25QdHI8Y2hhcj4gdmFsdWVTdHJpbmc7CisgICAg
amF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hl
ZCgicGFnZXNbMF0udXJsOyIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQoamF2YXNj
cmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKyAgICB2YWx1ZVN0cmlu
Zy5zZXQoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0NTdHJpbmcoamF2YXNjcmlwdFJl
c3VsdCkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih2YWx1ZVN0cmluZy5nZXQoKSwgPT0sICJodHRw
Oi8vMTI3LjAuMC4xOjI5OTkvIik7CisKKyAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVu
SmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJwYWdlc1swXS5pbnNwZWN0b3JVcmw7Iiwg
JmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBn
X2Fzc2VydCghZXJyb3IuZ2V0KCkpOworICAgIHZhbHVlU3RyaW5nLnNldChXZWJWaWV3VGVzdDo6
amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7CisgICAgU3RyaW5n
IHZhbGlkSW5zcGVjdG9yVVJMID0gU3RyaW5nKCIvTWFpbi5odG1sP3BhZ2U9IikgKyBTdHJpbmc6
Om51bWJlcihwYWdlSWQpOworICAgIEFTU0VSVF9DTVBfQ1NUUklORyh2YWx1ZVN0cmluZy5nZXQo
KSwgPT0sIHZhbGlkSW5zcGVjdG9yVVJMLnV0ZjgoKSk7Cit9CisKKy8vIFRlc3Qgc2VuZGluZyBh
IHJhdyByZW1vdGUgZGVidWdnaW5nIG1lc3NhZ2UgdGhyb3VnaCBvdXIgd2ViIHNvY2tldCBzZXJ2
ZXIuCisvLyBGb3IgdGhpcyBzcGVjaWZpYyBtZXNzYWdlIHNlZTogaHR0cDovL2NvZGUuZ29vZ2xl
LmNvbS9jaHJvbWUvZGV2dG9vbHMvZG9jcy9wcm90b2NvbC90b3QvcnVudGltZS5odG1sI2NvbW1h
bmQtZXZhbHVhdGUKK3N0YXRpYyB2b2lkIHRlc3RSZW1vdGVEZWJ1Z2dpbmdNZXNzYWdlKEluc3Bl
Y3RvclNlcnZlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+c2hvd0lu
V2luZG93QW5kV2FpdFVudGlsTWFwcGVkKEdUS19XSU5ET1dfVE9QTEVWRUwpOworCisgICAgdGVz
dC0+bG9hZEh0bWwoIjxzY3JpcHQgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiPlxuIgorICAgICAg
ICAidmFyIHNvY2tldCA9IG5ldyBXZWJTb2NrZXQoJ3dzOi8vMTI3LjAuMC4xOjI5OTkvZGV2dG9v
bHMvcGFnZS8xJyk7XG4iCisgICAgICAgICJzb2NrZXQub25tZXNzYWdlID0gZnVuY3Rpb24obWVz
c2FnZSkge1xuIgorICAgICAgICAgICAgInZhciByZXNwb25zZSA9IEpTT04ucGFyc2UobWVzc2Fn
ZS5kYXRhKTtcbiIKKyAgICAgICAgICAgICJpZiAocmVzcG9uc2UuaWQgPT09IDEpXG4iCisgICAg
ICAgICAgICAgICAgImRvY3VtZW50LnRpdGxlID0gcmVzcG9uc2UucmVzdWx0LnJlc3VsdC52YWx1
ZTtcbiIKKyAgICAgICAgICAgICJlbHNlXG4iCisgICAgICAgICAgICAgICAgImRvY3VtZW50LnRp
dGxlID0gXCJGQUlMXCI7XG4iCisgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgInNvY2tl
dC5vbm9wZW4gPSBmdW5jdGlvbigpIHtcbiIKKyAgICAgICAgICAgICJzb2NrZXQuc2VuZCgne1wi
aWRcIjogMSwgXCJtZXRob2RcIjogXCJSdW50aW1lLmV2YWx1YXRlXCIsIFwicGFyYW1zXCI6IHtc
ImV4cHJlc3Npb25cIjogXCIyICsgMlwiIH0gfScpO1xuIgorICAgICAgICAifVxuIgorICAgICAg
ICAiPC9zY3JpcHQ+IiwKKyAgICAgICAgImh0dHA6Ly8xMjcuMC4wLjE6Mjk5OS8iKTsKKyAgICB0
ZXN0LT53YWl0VW50aWxUaXRsZUNoYW5nZWQoKTsKKworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X3RpdGxlKHRlc3QtPm1fd2ViVmlldyksID09LCAiNCIpOworfQorCitz
dGF0aWMgdm9pZCBvcGVuUmVtb3RlRGVidWdnaW5nU2Vzc2lvbihJbnNwZWN0b3JTZXJ2ZXJUZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIC8vIFRvIHRlc3QgdGhlIHdob2xlIHBpcGVs
aW5lIHRoaXMgZXhwbG9pdHMgYSBiZWhhdmlvciBvZiB0aGUgaW5zcGVjdG9yIGZyb250LWVuZCB3
aGljaCB3b24ndCBwcm92aWRlIHRoZSBwYWdlIGFkZHJlc3MgYXMgdGl0bGUgdW5sZXNzIHRoZQor
ICAgIC8vIGRlYnVnZ2luZyBzZXNzaW9uIHdhcyBlc3RhYmxpc2hlZCBjb3JyZWN0bHkgdGhyb3Vn
aCB3ZWIgc29ja2V0LgorICAgIC8vIEluIG91ciBjYXNlIHBhZ2UgVVJMIHNob3VsZCBiZSBodHRw
Oi8vMTI3LjAuMC4xOjI5OTkvCisgICAgLy8gU28gdGhpcyB0ZXN0IGNhc2Ugd2lsbCBmYWlsIGlm
OgorICAgIC8vIC0gVGhlIHBhZ2UgbGlzdCBkaWRuJ3QgcmV0dXJuIGEgdmFsaWQgaW5zcGVjdG9y
IFVSTAorICAgIC8vIC0gT3IgdGhlIGZyb250LWVuZCBjb3VsZG4ndCBiZSBsb2FkZWQgdGhyb3Vn
aCB0aGUgaW5zcGVjdG9yIEhUVFAgc2VydmVyCisgICAgLy8gLSBPciB0aGUgd2ViIHNvY2tldCBj
b25uZWN0aW9uIGNvdWxkbid0IGJlIGVzdGFibGlzaGVkIGJldHdlZW4gdGhlIGZyb250LWVuZCBh
bmQgdGhlIHBhZ2UgdGhyb3VnaCB0aGUgaW5zcGVjdG9yIHNlcnZlcgorICAgIC8vIExldCdzIHNl
ZSBpZiB0aGlzIHRlc3QgaXNuJ3QgcmFpc2luZyB0b28gbWFueSBmYWxzZSBwb3NpdGl2ZXMsIGlu
IHdoaWNoIGNhc2Ugd2Ugc2hvdWxkIHVzZSBhIGJldHRlciBwcmVkaWNhdGUgaWYgYXZhaWxhYmxl
LgorCisgICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKEdUS19XSU5ET1df
VE9QTEVWRUwpOworCisgICAgZ19hc3NlcnQodGVzdC0+Z2V0UGFnZUxpc3QoKSk7CisKKyAgICBH
T3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCogamF2YXNj
cmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgicGFn
ZXNbMF0uaW5zcGVjdG9yVXJsOyIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQoamF2
YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKworICAgIFN0cmlu
ZyByZXNvbHZlZFVSTCA9IFN0cmluZygiaHR0cDovLzEyNy4wLjAuMToyOTk5LyIpICsgU3RyaW5n
Ojpmcm9tVVRGOChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZhc2Ny
aXB0UmVzdWx0KSk7CisgICAgdGVzdC0+bG9hZFVSSShyZXNvbHZlZFVSTC51dGY4KCkuZGF0YSgp
KTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIGphdmFzY3JpcHRS
ZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoIndpbmRvdy5k
b2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnbGknKVswXS50aXRsZSIsICZlcnJvci5vdXRQ
dHIoKSk7CisgICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVy
cm9yLmdldCgpKTsKKworICAgIEdPd25QdHI8Y2hhcj4gdGl0bGUoV2ViVmlld1Rlc3Q6OmphdmFz
Y3JpcHRSZXN1bHRUb0NTdHJpbmcoamF2YXNjcmlwdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cih0aXRsZS5nZXQoKSwgPT0sICJodHRwOi8vMTI3LjAuMC4xOjI5OTkvIik7Cit9CisKK3N0
YXRpYyB2b2lkIHNlbmRJbmNvbXBsZXRlUmVxdWVzdChJbnNwZWN0b3JTZXJ2ZXJUZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQoreworICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKworICAgIC8v
IENvbm5lY3QgdG8gdGhlIGluc3BlY3RvciBzZXJ2ZXIuCisgICAgR1JlZlB0cjxHU29ja2V0Q2xp
ZW50PiBjbGllbnQgPSBhZG9wdEdSZWYoZ19zb2NrZXRfY2xpZW50X25ldygpKTsKKyAgICBHUmVm
UHRyPEdTb2NrZXRDb25uZWN0aW9uPiBjb25uZWN0aW9uID0gYWRvcHRHUmVmKGdfc29ja2V0X2Ns
aWVudF9jb25uZWN0X3RvX2hvc3QoY2xpZW50LmdldCgpLCAiMTI3LjAuMC4xIiwgMjk5OSwgMCwg
JmVycm9yLm91dFB0cigpKSk7CisgICAgZ19hc3NlcnRfbm9fZXJyb3IoZXJyb3IuZ2V0KCkpOwor
CisgICAgLy8gU2VuZCBpbmNvbXBsZXRlIHJlcXVlc3QgKG1pc3NpbmcgYmxhbmsgbGluZSBhZnRl
ciBoZWFkZXJzKSBhbmQgY2hlY2sgaWYgaW5zcGVjdG9yIHNlcnZlcgorICAgIC8vIHJlcGxpZXMu
IFRoZSBzZXJ2ZXIgc2hvdWxkIG5vdCByZXBseSB0byBhbiBpbmNvbXBsZXRlIHJlcXVlc3QgYW5k
IHRoZSB0ZXN0IHNob3VsZCB0aW1lb3V0CisgICAgLy8gb24gcmVhZC4KKyAgICBHT3V0cHV0U3Ry
ZWFtKiBvc3RyZWFtID0gZ19pb19zdHJlYW1fZ2V0X291dHB1dF9zdHJlYW0oR19JT19TVFJFQU0o
Y29ubmVjdGlvbi5nZXQoKSkpOworICAgIC8vIFJlcXVlc3QgbWlzc2luZyBibGFuayBsaW5lIGFm
dGVyIGhlYWRlcnMuCisgICAgY29uc3QgZ2NoYXIqIGluY29tcGxldGVSZXF1ZXN0ID0gIkdFVCAv
ZGV2dG9vbHMvcGFnZS8xIEhUVFAvMS4xXHJcbkhvc3Q6IExvY2FsaG9zdFxyXG4iOworICAgIGdf
b3V0cHV0X3N0cmVhbV93cml0ZShvc3RyZWFtLCBpbmNvbXBsZXRlUmVxdWVzdCwgc3RybGVuKGlu
Y29tcGxldGVSZXF1ZXN0KSwgMCwgJmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fzc2VydF9ub19l
cnJvcihlcnJvci5nZXQoKSk7CisKKyAgICBHSW5wdXRTdHJlYW0qIGlzdHJlYW0gPSBnX2lvX3N0
cmVhbV9nZXRfaW5wdXRfc3RyZWFtKEdfSU9fU1RSRUFNKGNvbm5lY3Rpb24uZ2V0KCkpKTsKKyAg
ICBjaGFyIHJlc3BvbnNlWzE2XTsKKyAgICBtZW1zZXQocmVzcG9uc2UsIDAsIHNpemVvZihyZXNw
b25zZSkpOworICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBjYW5jZWwgPSBhZG9wdEdSZWYoZ19j
YW5jZWxsYWJsZV9uZXcoKSk7CisgICAgZ19pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyhpc3RyZWFt
LCByZXNwb25zZSwgc2l6ZW9mKHJlc3BvbnNlKSAtIDEsIEdfUFJJT1JJVFlfREVGQVVMVCwgY2Fu
Y2VsLmdldCgpLCAwLCAwKTsKKyAgICAvLyBHaXZlIGEgY2hhbmNlIGZvciB0aGUgc2VydmVyIHRv
IHJlcGx5LgorICAgIHRlc3QtPndhaXQoMSk7CisgICAgZ19jYW5jZWxsYWJsZV9jYW5jZWwoY2Fu
Y2VsLmdldCgpKTsKKyAgICAvLyBJZiB3ZSBnb3QgYW55IGFuc3dlciBpdCBtZWFucyB0aGUgc2Vy
dmVyIHJlcGxpZWQgdG8gYW4gaW5jb21wbGV0ZSByZXF1ZXN0LCBsZXRzIGZhaWwuCisgICAgZ19h
c3NlcnQocmVzcG9uc2VbMF0gPT0gJ1wwJyk7Cit9CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAg
ICAvLyBPdmVyd3JpdGUgV0VCS0lUX0lOU1BFQ1RPUl9TRVJWRVIgdmFyaWFibGUgd2l0aCBkZWZh
dWx0IElQIGFkZHJlc3MgYnV0IGRpZmZlcmVudCBwb3J0IHRvIGF2b2lkIGNvbmZsaWN0IHdpdGgg
dGhlIHRlc3QgaW5zcGVjdG9yIHNlcnZlciBwYWdlLgorICAgIGdfc2V0ZW52KCJXRUJLSVRfSU5T
UEVDVE9SX1NFUlZFUiIsICIxMjcuMC4wLjE6Mjk5OCIsIFRSVUUpOworCisgICAgc3RhcnRUZXN0
U2VydmVyKCk7CisgICAgSW5zcGVjdG9yU2VydmVyVGVzdDo6YWRkKCJXZWJLaXRXZWJJbnNwZWN0
b3JTZXJ2ZXIiLCAidGVzdC1wYWdlLWxpc3QiLCB0ZXN0SW5zcGVjdG9yU2VydmVyUGFnZUxpc3Qp
OworICAgIEluc3BlY3RvclNlcnZlclRlc3Q6OmFkZCgiV2ViS2l0V2ViSW5zcGVjdG9yU2VydmVy
IiwgInRlc3QtcmVtb3RlLWRlYnVnZ2luZy1tZXNzYWdlIiwgdGVzdFJlbW90ZURlYnVnZ2luZ01l
c3NhZ2UpOworICAgIEluc3BlY3RvclNlcnZlclRlc3Q6OmFkZCgiV2ViS2l0V2ViSW5zcGVjdG9y
U2VydmVyIiwgInRlc3Qtb3Blbi1kZWJ1Z2dpbmctc2Vzc2lvbiIsIG9wZW5SZW1vdGVEZWJ1Z2dp
bmdTZXNzaW9uKTsKKyAgICBJbnNwZWN0b3JTZXJ2ZXJUZXN0OjphZGQoIldlYktpdFdlYkluc3Bl
Y3RvclNlcnZlciIsICJ0ZXN0LWluY29tcGxldGUtcmVxdWVzdCIsIHNlbmRJbmNvbXBsZXRlUmVx
dWVzdCk7CisKK30KKwordm9pZCBhZnRlckFsbCgpCit7CisgICAgc3RvcFRlc3RTZXJ2ZXIoKTsK
K30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0
TG9hZGVyQ2xpZW50LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9U
ZXN0TG9hZGVyQ2xpZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4z
MzE5MTVlCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXQyR3RrL1Rlc3RMb2FkZXJDbGllbnQuY3BwCkBAIC0wLDAgKzEsNDY1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA5LCAyMDEwIEd1c3Rhdm8gTm9yb25oYSBTaWx2YQorICogQ29weXJpZ2h0
IChDKSAyMDA5LCAyMDExIElnYWxpYSBTLkwuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIw
MTEgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2luY2x1ZGUgIkxvYWRUcmFja2luZ1Rlc3QuaCIKKyNpbmNsdWRlICJX
ZWJLaXRUZXN0QnVzLmgiCisjaW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5oIgorI2luY2x1ZGUg
IldlYlZpZXdUZXN0LmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPGxpYnNvdXAv
c291cC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworc3RhdGljIFdlYktpdFRl
c3RCdXMqIGJ1czsKK3N0YXRpYyBXZWJLaXRUZXN0U2VydmVyKiBrU2VydmVyOworCitjb25zdCBj
aGFyKiBrRE5USGVhZGVyTm90UHJlc2VudCA9ICJETlQgaGVhZGVyIG5vdCBwcmVzZW50IjsKKwor
c3RhdGljIHZvaWQgdGVzdExvYWRpbmdTdGF0dXMoTG9hZFRyYWNraW5nVGVzdCogdGVzdCwgZ2Nv
bnN0cG9pbnRlciBkYXRhKQoreworICAgIHRlc3QtPnNldFJlZGlyZWN0VVJJKGtTZXJ2ZXItPmdl
dFVSSUZvclBhdGgoIi9ub3JtYWwiKS5kYXRhKCkpOworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZl
ci0+Z2V0VVJJRm9yUGF0aCgiL3JlZGlyZWN0IikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50
aWxMb2FkRmluaXNoZWQoKTsKKworICAgIFZlY3RvcjxMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRXZl
bnRzPiYgZXZlbnRzID0gdGVzdC0+bV9sb2FkRXZlbnRzOworICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHMuc2l6ZSgpLCA9PSwgNCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0s
IExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0
X2NtcGludChldmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRS
ZWNlaXZlZFNlcnZlclJlZGlyZWN0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9
PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZENvbW1pdHRlZCk7CisgICAgZ19hc3NlcnRfY21waW50
KGV2ZW50c1szXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7Cit9CisKK3N0
YXRpYyB2b2lkIHRlc3RMb2FkaW5nRXJyb3IoTG9hZFRyYWNraW5nVGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9l
cnJvciIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAg
ICBWZWN0b3I8TG9hZFRyYWNraW5nVGVzdDo6TG9hZEV2ZW50cz4mIGV2ZW50cyA9IHRlc3QtPm1f
bG9hZEV2ZW50czsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDMpOwor
ICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92
aXNpb25hbExvYWRTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwg
TG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkRmFpbGVkKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoZXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKK30K
Kworc3RhdGljIHZvaWQgYXNzZXJ0Tm9ybWFsTG9hZEhhcHBlbmVkKFZlY3RvcjxMb2FkVHJhY2tp
bmdUZXN0OjpMb2FkRXZlbnRzPiYgZXZlbnRzKQoreworICAgIGdfYXNzZXJ0X2NtcGludChldmVu
dHMuc2l6ZSgpLCA9PSwgMyk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIExv
YWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2Nt
cGludChldmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkQ29tbWl0dGVkKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZp
bmlzaGVkKTsKK30KKworc3RhdGljIHZvaWQgdGVzdExvYWRIdG1sKExvYWRUcmFja2luZ1Rlc3Qq
IHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxib2R5
PkhlbGxvIFdlYktpdC1HVEsrPC9ib2R5PjwvaHRtbD4iLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50
aWxMb2FkRmluaXNoZWQoKTsKKyAgICBhc3NlcnROb3JtYWxMb2FkSGFwcGVuZWQodGVzdC0+bV9s
b2FkRXZlbnRzKTsKK30KKworc3RhdGljIHZvaWQgdGVzdExvYWRBbHRlcm5hdGVIVE1MKExvYWRU
cmFja2luZ1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEFsdGVy
bmF0ZUhUTUwoIjxodG1sPjxib2R5PkFsdGVybmF0ZSBwYWdlPC9ib2R5PjwvaHRtbD4iLCAiaHR0
cDovL2Vycm9yLXBhZ2UuZm9vLyIsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hl
ZCgpOworICAgIGFzc2VydE5vcm1hbExvYWRIYXBwZW5lZCh0ZXN0LT5tX2xvYWRFdmVudHMpOwor
fQorCitzdGF0aWMgdm9pZCB0ZXN0TG9hZFBsYWluVGV4dChMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRQbGFpblRleHQoIkhlbGxvIFdlYktp
dC1HVEsrIik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgYXNzZXJ0
Tm9ybWFsTG9hZEhhcHBlbmVkKHRlc3QtPm1fbG9hZEV2ZW50cyk7Cit9CisKK3N0YXRpYyB2b2lk
IHRlc3RMb2FkUmVxdWVzdChMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQor
eworICAgIEdSZWZQdHI8V2ViS2l0VVJJUmVxdWVzdD4gcmVxdWVzdCh3ZWJraXRfdXJpX3JlcXVl
c3RfbmV3KGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9ub3JtYWwiKS5kYXRhKCkpKTsKKyAgICB0
ZXN0LT5sb2FkUmVxdWVzdChyZXF1ZXN0LmdldCgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2Fk
RmluaXNoZWQoKTsKKyAgICBhc3NlcnROb3JtYWxMb2FkSGFwcGVuZWQodGVzdC0+bV9sb2FkRXZl
bnRzKTsKK30KKworY2xhc3MgTG9hZFN0b3BUcmFja2luZ1Rlc3QgOiBwdWJsaWMgTG9hZFRyYWNr
aW5nVGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShMb2FkU3RvcFRy
YWNraW5nVGVzdCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZENvbW1pdHRlZCgpCisgICAgewor
ICAgICAgICBMb2FkVHJhY2tpbmdUZXN0Ojpsb2FkQ29tbWl0dGVkKCk7CisgICAgICAgIHdlYmtp
dF93ZWJfdmlld19zdG9wX2xvYWRpbmcobV93ZWJWaWV3KTsKKyAgICB9CisgICAgdmlydHVhbCB2
b2lkIGxvYWRGYWlsZWQoY29uc3QgZ2NoYXIqIGZhaWxpbmdVUkksIEdFcnJvciogZXJyb3IpCisg
ICAgeworICAgICAgICBnX2Fzc2VydChnX2Vycm9yX21hdGNoZXMoZXJyb3IsIFdFQktJVF9ORVRX
T1JLX0VSUk9SLCBXRUJLSVRfTkVUV09SS19FUlJPUl9DQU5DRUxMRUQpKTsKKyAgICAgICAgTG9h
ZFRyYWNraW5nVGVzdDo6bG9hZEZhaWxlZChmYWlsaW5nVVJJLCBlcnJvcik7CisgICAgfQorfTsK
Kworc3RhdGljIHZvaWQgdGVzdExvYWRDYW5jZWxsZWQoTG9hZFN0b3BUcmFja2luZ1Rlc3QqIHRl
c3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklG
b3JQYXRoKCIvY2FuY2VsbGVkIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmlu
aXNoZWQoKTsKKworICAgIFZlY3RvcjxMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRXZlbnRzPiYgZXZl
bnRzID0gdGVzdC0+bV9sb2FkRXZlbnRzOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6
ZSgpLCA9PSwgNCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIExvYWRUcmFj
a2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkQ29tbWl0dGVkKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZhaWxlZCk7
CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1szXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6Okxv
YWRGaW5pc2hlZCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3VGl0bGUoTG9hZFRyYWNr
aW5nVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBnX2Fzc2VydCghd2Via2l0X3dl
Yl92aWV3X2dldF90aXRsZSh0ZXN0LT5tX3dlYlZpZXcpKTsKKyAgICB0ZXN0LT5sb2FkSHRtbCgi
PGh0bWw+PGhlYWQ+PHRpdGxlPldlbGNvbWUgdG8gV2ViS2l0LUdUSyshPC90aXRsZT48L2hlYWQ+
PC9odG1sPiIsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIGdf
YXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3RpdGxlKHRlc3QtPm1fd2ViVmlldyks
ID09LCAiV2VsY29tZSB0byBXZWJLaXQtR1RLKyEiKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdl
YlZpZXdSZWxvYWQoTG9hZFRyYWNraW5nVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAg
ICAvLyBDaGVjayB0aGF0IG5vdGhpbmcgaGFwcGVucyB3aGVuIHRoZXJlJ3Mgbm90aGluZyB0byBy
ZWxvYWQuCisgICAgdGVzdC0+cmVsb2FkKCk7CisgICAgdGVzdC0+d2FpdCgwLjI1KTsgLy8gV2Fp
dCBmb3IgYSBxdWFydGVyIG9mIGEgc2Vjb25kLgorCisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVy
LT5nZXRVUklGb3JQYXRoKCIvbm9ybWFsIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxM
b2FkRmluaXNoZWQoKTsKKyAgICBhc3NlcnROb3JtYWxMb2FkSGFwcGVuZWQodGVzdC0+bV9sb2Fk
RXZlbnRzKTsKKworICAgIHRlc3QtPnJlbG9hZCgpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRG
aW5pc2hlZCgpOworICAgIGFzc2VydE5vcm1hbExvYWRIYXBwZW5lZCh0ZXN0LT5tX2xvYWRFdmVu
dHMpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0TG9hZFByb2dyZXNzKExvYWRUcmFja2luZ1Rlc3Qq
IHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRV
UklGb3JQYXRoKCIvbm9ybWFsIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmlu
aXNoZWQoKTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdCh0ZXN0LT5tX2VzdGltYXRlZFByb2dyZXNz
LCA9PSwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3SGlzdG9yeUxvYWQoTG9hZFRy
YWNraW5nVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkVVJJKGtT
ZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9ub3JtYWwiKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRV
bnRpbExvYWRGaW5pc2hlZCgpOworICAgIGFzc2VydE5vcm1hbExvYWRIYXBwZW5lZCh0ZXN0LT5t
X2xvYWRFdmVudHMpOworCisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRo
KCIvbm9ybWFsMiIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7
CisgICAgYXNzZXJ0Tm9ybWFsTG9hZEhhcHBlbmVkKHRlc3QtPm1fbG9hZEV2ZW50cyk7CisKKyAg
ICAvLyBDaGVjayB0aGF0IGxvYWQgcHJvY2VzcyBpcyB0aGUgc2FtZSBmb3IgcGFnZXMgbG9hZGVk
IGZyb20gaGlzdG9yeSBjYWNoZS4KKyAgICB0ZXN0LT5nb0JhY2soKTsKKyAgICB0ZXN0LT53YWl0
VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBhc3NlcnROb3JtYWxMb2FkSGFwcGVuZWQodGVzdC0+
bV9sb2FkRXZlbnRzKTsKKworICAgIHRlc3QtPmdvRm9yd2FyZCgpOworICAgIHRlc3QtPndhaXRV
bnRpbExvYWRGaW5pc2hlZCgpOworICAgIGFzc2VydE5vcm1hbExvYWRIYXBwZW5lZCh0ZXN0LT5t
X2xvYWRFdmVudHMpOworfQorCitjbGFzcyBWaWV3VVJJVHJhY2tpbmdUZXN0OiBwdWJsaWMgTG9h
ZFRyYWNraW5nVGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShWaWV3
VVJJVHJhY2tpbmdUZXN0KTsKKworICAgIHN0YXRpYyB2b2lkIHVyaUNoYW5nZWQoR09iamVjdCos
IEdQYXJhbVNwZWMqLCBWaWV3VVJJVHJhY2tpbmdUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAg
Z19hc3NlcnRfY21wc3RyKHRlc3QtPm1fYWN0aXZlVVJJLmRhdGEoKSwgIT0sIHdlYmtpdF93ZWJf
dmlld19nZXRfdXJpKHRlc3QtPm1fd2ViVmlldykpOworICAgICAgICB0ZXN0LT5tX2FjdGl2ZVVS
SSA9IHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKHRlc3QtPm1fd2ViVmlldyk7CisgICAgfQorCisg
ICAgVmlld1VSSVRyYWNraW5nVGVzdCgpCisgICAgICAgIDogbV9hY3RpdmVVUkkod2Via2l0X3dl
Yl92aWV3X2dldF91cmkobV93ZWJWaWV3KSkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KG1fYWN0
aXZlVVJJLmlzTnVsbCgpKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJu
b3RpZnk6OnVyaSIsIEdfQ0FMTEJBQ0sodXJpQ2hhbmdlZCksIHRoaXMpOworICAgIH0KKworICAg
IHZvaWQgcHJvdmlzaW9uYWxMb2FkU3RhcnRlZCgpCisgICAgeworICAgICAgICBjaGVja0FjdGl2
ZVVSSSgiL3JlZGlyZWN0Iik7CisgICAgfQorCisgICAgdm9pZCBwcm92aXNpb25hbExvYWRSZWNl
aXZlZFNlcnZlclJlZGlyZWN0KCkKKyAgICB7CisgICAgICAgIGNoZWNrQWN0aXZlVVJJKCIvbm9y
bWFsIik7CisgICAgfQorCisgICAgdm9pZCBsb2FkQ29tbWl0dGVkKCkKKyAgICB7CisgICAgICAg
IGNoZWNrQWN0aXZlVVJJKCIvbm9ybWFsIik7CisgICAgfQorCisgICAgdm9pZCBsb2FkRmluaXNo
ZWQoKQorICAgIHsKKyAgICAgICAgY2hlY2tBY3RpdmVVUkkoIi9ub3JtYWwiKTsKKyAgICAgICAg
TG9hZFRyYWNraW5nVGVzdDo6bG9hZEZpbmlzaGVkKCk7CisgICAgfQorCisgICAgQ1N0cmluZyBt
X2FjdGl2ZVVSSTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGNoZWNrQWN0aXZlVVJJKGNvbnN0IGNo
YXIqIHVyaSkKKyAgICB7CisgICAgICAgIEFTU0VSVF9DTVBfQ1NUUklORyhtX2FjdGl2ZVVSSSwg
PT0sIGtTZXJ2ZXItPmdldFVSSUZvclBhdGgodXJpKSk7CisgICAgfQorfTsKKworc3RhdGljIHZv
aWQgdGVzdFdlYlZpZXdBY3RpdmVVUkkoVmlld1VSSVRyYWNraW5nVGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9y
ZWRpcmVjdCIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Cit9
CisKK2NsYXNzIFZpZXdJc0xvYWRpbmdUZXN0OiBwdWJsaWMgTG9hZFRyYWNraW5nVGVzdCB7Citw
dWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShWaWV3SXNMb2FkaW5nVGVzdCk7CisK
KyAgICBzdGF0aWMgdm9pZCBpc0xvYWRpbmdDaGFuZ2VkKEdPYmplY3QqLCBHUGFyYW1TcGVjKiwg
Vmlld0lzTG9hZGluZ1Rlc3QqIHRlc3QpCisgICAgeworICAgICAgICBpZiAod2Via2l0X3dlYl92
aWV3X2lzX2xvYWRpbmcodGVzdC0+bV93ZWJWaWV3KSkKKyAgICAgICAgICAgIHRlc3QtPmJlZ2lu
TG9hZCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0ZXN0LT5lbmRMb2FkKCk7CisgICAg
fQorCisgICAgVmlld0lzTG9hZGluZ1Rlc3QoKQorICAgIHsKKyAgICAgICAgZ19zaWduYWxfY29u
bmVjdChtX3dlYlZpZXcsICJub3RpZnk6OmlzLWxvYWRpbmciLCBHX0NBTExCQUNLKGlzTG9hZGlu
Z0NoYW5nZWQpLCB0aGlzKTsKKyAgICB9CisKKyAgICB2b2lkIGJlZ2luTG9hZCgpCisgICAgewor
ICAgICAgICAvLyBOZXcgbG9hZCwgbG9hZC1zdGFydGVkIGhhc24ndCBiZWVuIGVtaXR0ZWQgeWV0
LgorICAgICAgICBnX2Fzc2VydChtX2xvYWRFdmVudHMuaXNFbXB0eSgpKTsKKyAgICAgICAgZ19h
c3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKG1fd2ViVmlldyksID09LCBtX2Fj
dGl2ZVVSSS5kYXRhKCkpOworICAgIH0KKworICAgIHZvaWQgZW5kTG9hZCgpCisgICAgeworICAg
ICAgICAvLyBMb2FkIGZpbmlzaCwgbG9hZC1maW5pc2hlZCBhbmQgbG9hZC1mYWlsZWQgaGF2ZW4n
dCBiZWVuIGVtaXR0ZWQgeWV0LgorICAgICAgICBnX2Fzc2VydCghbV9sb2FkRXZlbnRzLmlzRW1w
dHkoKSk7CisgICAgICAgIGdfYXNzZXJ0KCFtX2xvYWRFdmVudHMuY29udGFpbnMoTG9hZFRyYWNr
aW5nVGVzdDo6TG9hZEZpbmlzaGVkKSk7CisgICAgICAgIGdfYXNzZXJ0KCFtX2xvYWRFdmVudHMu
Y29udGFpbnMoTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZhaWxlZCkpOworICAgIH0KK307CisKK3N0
YXRpYyB2b2lkIHRlc3RXZWJWaWV3SXNMb2FkaW5nKFZpZXdJc0xvYWRpbmdUZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0
aCgiL25vcm1hbCIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7
CisKKyAgICB0ZXN0LT5yZWxvYWQoKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQo
KTsKKworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2Vycm9yIiku
ZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3Qt
PmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL25vcm1hbCIpLmRhdGEoKSk7CisgICAg
dGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVy
LT5nZXRVUklGb3JQYXRoKCIvbm9ybWFsMiIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGls
TG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5nb0JhY2soKTsKKyAgICB0ZXN0LT53YWl0VW50
aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3QtPmdvRm9yd2FyZCgpOworICAgIHRlc3QtPndh
aXRVbnRpbExvYWRGaW5pc2hlZCgpOworfQorCitjbGFzcyBXZWJQYWdlVVJJVGVzdDogcHVibGlj
IFdlYlZpZXdUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFdlYlBh
Z2VVUklUZXN0KTsKKworICAgIHN0YXRpYyB2b2lkIHdlYlBhZ2VVUklDaGFuZ2VkQ2FsbGJhY2so
R0RCdXNDb25uZWN0aW9uKiwgY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwg
Y29uc3QgY2hhciosIEdWYXJpYW50KiByZXN1bHQsIFdlYlBhZ2VVUklUZXN0KiB0ZXN0KQorICAg
IHsKKyAgICAgICAgY29uc3QgY2hhciogdXJpOworICAgICAgICBnX3ZhcmlhbnRfZ2V0KHJlc3Vs
dCwgIigmcykiLCAmdXJpKTsKKyAgICAgICAgdGVzdC0+bV93ZWJQYWdlVVJJcy5hcHBlbmQodXJp
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCB3ZWJWaWV3VVJJQ2hhbmdlZChHT2JqZWN0Kiwg
R1BhcmFtU3BlYyosIFdlYlBhZ2VVUklUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+
bV93ZWJWaWV3VVJJcy5hcHBlbmQod2Via2l0X3dlYl92aWV3X2dldF91cmkodGVzdC0+bV93ZWJW
aWV3KSk7CisgICAgfQorCisgICAgV2ViUGFnZVVSSVRlc3QoKQorICAgIHsKKyAgICAgICAgR1Jl
ZlB0cjxHREJ1c1Byb3h5PiBwcm94eSA9IGFkb3B0R1JlZihidXMtPmNyZWF0ZVByb3h5KCJvcmcu
d2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwKKyAgICAgICAgICAgICIvb3JnL3dlYmtpdC9n
dGsvV2ViRXh0ZW5zaW9uVGVzdCIsICJvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0Iiwg
bV9tYWluTG9vcCkpOworICAgICAgICBtX3VyaUNoYW5nZWRTaWduYWxJRCA9IGdfZGJ1c19jb25u
ZWN0aW9uX3NpZ25hbF9zdWJzY3JpYmUoCisgICAgICAgICAgICBnX2RidXNfcHJveHlfZ2V0X2Nv
bm5lY3Rpb24ocHJveHkuZ2V0KCkpLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICJvcmcu
d2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwKKyAgICAgICAgICAgICJVUklDaGFuZ2VkIiwK
KyAgICAgICAgICAgICIvb3JnL3dlYmtpdC9ndGsvV2ViRXh0ZW5zaW9uVGVzdCIsCisgICAgICAg
ICAgICAwLAorICAgICAgICAgICAgR19EQlVTX1NJR05BTF9GTEFHU19OT05FLAorICAgICAgICAg
ICAgcmVpbnRlcnByZXRfY2FzdDxHREJ1c1NpZ25hbENhbGxiYWNrPih3ZWJQYWdlVVJJQ2hhbmdl
ZENhbGxiYWNrKSwKKyAgICAgICAgICAgIHRoaXMsCisgICAgICAgICAgICAwKTsKKyAgICAgICAg
Z19hc3NlcnQobV91cmlDaGFuZ2VkU2lnbmFsSUQpOworCisgICAgICAgIGdfc2lnbmFsX2Nvbm5l
Y3QobV93ZWJWaWV3LCAibm90aWZ5Ojp1cmkiLCBHX0NBTExCQUNLKHdlYlZpZXdVUklDaGFuZ2Vk
KSwgdGhpcyk7CisgICAgfQorCisgICAgfldlYlBhZ2VVUklUZXN0KCkKKyAgICB7CisgICAgICAg
IGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3dlYlZpZXcsIEdfU0lHTkFM
X01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOworICAgICAgICBnX2RidXNfY29ubmVjdGlv
bl9zaWduYWxfdW5zdWJzY3JpYmUoYnVzLT5jb25uZWN0aW9uKCksIG1fdXJpQ2hhbmdlZFNpZ25h
bElEKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBtX3VyaUNoYW5nZWRTaWduYWxJRDsKKyAgICBW
ZWN0b3I8Q1N0cmluZz4gbV93ZWJQYWdlVVJJczsKKyAgICBWZWN0b3I8Q1N0cmluZz4gbV93ZWJW
aWV3VVJJczsKK307CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJQYWdlVVJJKFdlYlBhZ2VVUklUZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0
VVJJRm9yUGF0aCgiL3JlZGlyZWN0IikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2Fk
RmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX3dlYlBhZ2VVUklzLnNp
emUoKSwgPT0sIHRlc3QtPm1fd2ViVmlld1VSSXMuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHRlc3QtPm1fd2ViUGFnZVVSSXMuc2l6ZSgpOyArK2kpCisgICAgICAgIEFTU0VS
VF9DTVBfQ1NUUklORyh0ZXN0LT5tX3dlYlBhZ2VVUklzW2ldLCA9PSwgdGVzdC0+bV93ZWJWaWV3
VVJJc1tpXSk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV93ZWJQYWdlVVJJcy5zaXpl
KCksID09LCAyKTsKKyAgICBBU1NFUlRfQ01QX0NTVFJJTkcodGVzdC0+bV93ZWJQYWdlVVJJc1sw
XSwgPT0sIGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9yZWRpcmVjdCIpKTsKKyAgICBBU1NFUlRf
Q01QX0NTVFJJTkcodGVzdC0+bV93ZWJQYWdlVVJJc1sxXSwgPT0sIGtTZXJ2ZXItPmdldFVSSUZv
clBhdGgoIi9ub3JtYWwiKSk7CisKK30KKworc3RhdGljIHZvaWQgdGVzdFVSSVJlcXVlc3RIVFRQ
SGVhZGVycyhXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBHUmVmUHRy
PFdlYktpdFVSSVJlcXVlc3Q+IHVyaVJlcXVlc3QgPSBhZG9wdEdSZWYod2Via2l0X3VyaV9yZXF1
ZXN0X25ldygiZmlsZTovLy9mb28vYmFyIikpOworICAgIGdfYXNzZXJ0KHVyaVJlcXVlc3QuZ2V0
KCkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3VyaSh1cmlS
ZXF1ZXN0LmdldCgpKSwgPT0sICJmaWxlOi8vL2Zvby9iYXIiKTsKKyAgICBnX2Fzc2VydCghd2Vi
a2l0X3VyaV9yZXF1ZXN0X2dldF9odHRwX2hlYWRlcnModXJpUmVxdWVzdC5nZXQoKSkpOworCisg
ICAgLy8gTG9hZCBhIHJlcXVlc3Qgd2l0aCBubyBEbyBOb3QgVHJhY2sgaGVhZGVyLgorICAgIHdl
YmtpdF91cmlfcmVxdWVzdF9zZXRfdXJpKHVyaVJlcXVlc3QuZ2V0KCksIGtTZXJ2ZXItPmdldFVS
SUZvclBhdGgoIi9kby1ub3QtdHJhY2staGVhZGVyIikuZGF0YSgpKTsKKyAgICB0ZXN0LT5sb2Fk
UmVxdWVzdCh1cmlSZXF1ZXN0LmdldCgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNo
ZWQoKTsKKworICAgIHNpemVfdCBtYWluUmVzb3VyY2VEYXRhU2l6ZSA9IDA7CisgICAgY29uc3Qg
Y2hhciogbWFpblJlc291cmNlRGF0YSA9IHRlc3QtPm1haW5SZXNvdXJjZURhdGEobWFpblJlc291
cmNlRGF0YVNpemUpOworICAgIGdfYXNzZXJ0X2NtcGludChtYWluUmVzb3VyY2VEYXRhU2l6ZSwg
PT0sIHN0cmxlbihrRE5USGVhZGVyTm90UHJlc2VudCkpOworICAgIGdfYXNzZXJ0KCFzdHJuY21w
KG1haW5SZXNvdXJjZURhdGEsIGtETlRIZWFkZXJOb3RQcmVzZW50LCBtYWluUmVzb3VyY2VEYXRh
U2l6ZSkpOworCisgICAgLy8gQWRkIHRoZSBEbyBOb3QgVHJhY2sgaGVhZGVyIGFuZCBsb2FkIHRo
ZSByZXF1ZXN0IGFnYWluLgorICAgIFNvdXBNZXNzYWdlSGVhZGVycyogaGVhZGVycyA9IHdlYmtp
dF91cmlfcmVxdWVzdF9nZXRfaHR0cF9oZWFkZXJzKHVyaVJlcXVlc3QuZ2V0KCkpOworICAgIGdf
YXNzZXJ0KGhlYWRlcnMpOworICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChoZWFkZXJz
LCAiRE5UIiwgIjEiKTsKKyAgICB0ZXN0LT5sb2FkUmVxdWVzdCh1cmlSZXF1ZXN0LmdldCgpKTsK
KyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIG1haW5SZXNvdXJjZURh
dGEgPSB0ZXN0LT5tYWluUmVzb3VyY2VEYXRhKG1haW5SZXNvdXJjZURhdGFTaXplKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQobWFpblJlc291cmNlRGF0YVNpemUsID09LCAxKTsKKyAgICBnX2Fzc2Vy
dCghc3RybmNtcChtYWluUmVzb3VyY2VEYXRhLCAiMSIsIG1haW5SZXNvdXJjZURhdGFTaXplKSk7
CisKKyAgICAvLyBMb2FkIGEgVVJJIGZvciB3aGljaCB0aGUgd2ViIGV4dGVuc2lvbiB3aWxsIGFk
ZCB0aGUgRG8gTm90IFRyYWNrIGhlYWRlci4KKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdl
dFVSSUZvclBhdGgoIi9hZGQtZG8tbm90LXRyYWNrLWhlYWRlciIpLmRhdGEoKSk7CisgICAgdGVz
dC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBtYWluUmVzb3VyY2VEYXRhID0gdGVz
dC0+bWFpblJlc291cmNlRGF0YShtYWluUmVzb3VyY2VEYXRhU2l6ZSk7CisgICAgZ19hc3NlcnRf
Y21waW50KG1haW5SZXNvdXJjZURhdGFTaXplLCA9PSwgMSk7CisgICAgZ19hc3NlcnQoIXN0cm5j
bXAobWFpblJlc291cmNlRGF0YSwgIjEiLCBtYWluUmVzb3VyY2VEYXRhU2l6ZSkpOworfQorCitz
dGF0aWMgdm9pZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdl
KiBtZXNzYWdlLCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiwgU291cENsaWVudENvbnRl
eHQqLCBncG9pbnRlcikKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciogcmVzcG9uc2VTdHJpbmcg
PSAiPGh0bWw+PGJvZHk+VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyEiCisgICAgICAgICJUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyEiCisgICAgICAgICJUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyEiCisgICAgICAgICJUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyEiCisg
ICAgICAgICJUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyEiCisgICAgICAg
ICJUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyEiCisgICAgICAgICJUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyEiCisgICAgICAgICJUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyE8L2JvZHk+PC9odG1sPiI7CisKKyAgICBpZiAo
bWVzc2FnZS0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgeworICAgICAgICBzb3VwX21lc3Nh
Z2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2Fn
ZSwgU09VUF9TVEFUVVNfT0spOworCisgICAgaWYgKGdfc3RyX2hhc19wcmVmaXgocGF0aCwgIi9u
b3JtYWwiKSkKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3Bv
bnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgcmVzcG9uc2VTdHJpbmcsIHN0cmxlbihyZXNw
b25zZVN0cmluZykpOworICAgIGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvZXJyb3IiKSkK
KyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfQ0FO
VF9DT05ORUNUKTsKKyAgICBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3JlZGlyZWN0Iikp
IHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNf
TU9WRURfUEVSTUFORU5UTFkpOworICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQo
bWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIkxvY2F0aW9uIiwgIi9ub3JtYWwiKTsKKyAgICB9
IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvY2FuY2VsbGVkIikpIHsKKyAgICAgICAgc291
cF9tZXNzYWdlX2hlYWRlcnNfc2V0X2VuY29kaW5nKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMs
IFNPVVBfRU5DT0RJTkdfQ0hVTktFRCk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVu
ZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIHJlc3BvbnNlU3Ry
aW5nLCBzdHJsZW4ocmVzcG9uc2VTdHJpbmcpKTsKKyAgICAgICAgc291cF9zZXJ2ZXJfdW5wYXVz
ZV9tZXNzYWdlKHNlcnZlciwgbWVzc2FnZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9IGVsc2Ug
aWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvZG8tbm90LXRyYWNrLWhlYWRlciIpIHx8IGdfc3RyX2Vx
dWFsKHBhdGgsICIvYWRkLWRvLW5vdC10cmFjay1oZWFkZXIiKSkgeworICAgICAgICBjb25zdCBj
aGFyKiBkb05vdFRyYWNrID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X29uZShtZXNzYWdlLT5y
ZXF1ZXN0X2hlYWRlcnMsICJETlQiKTsKKyAgICAgICAgaWYgKGRvTm90VHJhY2spCisgICAgICAg
ICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09V
UF9NRU1PUllfQ09QWSwgZG9Ob3RUcmFjaywgc3RybGVuKGRvTm90VHJhY2spKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3Bv
bnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywga0ROVEhlYWRlck5vdFByZXNlbnQsIHN0cmxl
bihrRE5USGVhZGVyTm90UHJlc2VudCkpOworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1
cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7CisgICAgfSBlbHNlCisgICAgICAgIHNvdXBfbWVz
c2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7CisKKyAgICBz
b3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKK30KKwor
dm9pZCBiZWZvcmVBbGwoKQoreworICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfd2ViX2V4dGVu
c2lvbnNfZGlyZWN0b3J5KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpLCBXRUJLSVRf
VEVTVF9XRUJfRVhURU5TSU9OU19ESVIpOworICAgIGJ1cyA9IG5ldyBXZWJLaXRUZXN0QnVzKCk7
CisgICAgaWYgKCFidXMtPnJ1bigpKQorICAgICAgICByZXR1cm47CisKKyAgICBrU2VydmVyID0g
bmV3IFdlYktpdFRlc3RTZXJ2ZXIoKTsKKyAgICBrU2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2sp
OworCisgICAgTG9hZFRyYWNraW5nVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImxvYWRpbmct
c3RhdHVzIiwgdGVzdExvYWRpbmdTdGF0dXMpOworICAgIExvYWRUcmFja2luZ1Rlc3Q6OmFkZCgi
V2ViS2l0V2ViVmlldyIsICJsb2FkaW5nLWVycm9yIiwgdGVzdExvYWRpbmdFcnJvcik7CisgICAg
TG9hZFRyYWNraW5nVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImxvYWQtaHRtbCIsIHRlc3RM
b2FkSHRtbCk7CisgICAgTG9hZFRyYWNraW5nVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImxv
YWQtYWx0ZXJuYXRlLWh0bWwiLCB0ZXN0TG9hZEFsdGVybmF0ZUhUTUwpOworICAgIExvYWRUcmFj
a2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJsb2FkLXBsYWluLXRleHQiLCB0ZXN0TG9h
ZFBsYWluVGV4dCk7CisgICAgTG9hZFRyYWNraW5nVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3Iiwg
ImxvYWQtcmVxdWVzdCIsIHRlc3RMb2FkUmVxdWVzdCk7CisgICAgTG9hZFN0b3BUcmFja2luZ1Rl
c3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJzdG9wLWxvYWRpbmciLCB0ZXN0TG9hZENhbmNlbGxl
ZCk7CisgICAgTG9hZFRyYWNraW5nVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInRpdGxlIiwg
dGVzdFdlYlZpZXdUaXRsZSk7CisgICAgTG9hZFRyYWNraW5nVGVzdDo6YWRkKCJXZWJLaXRXZWJW
aWV3IiwgInByb2dyZXNzIiwgdGVzdExvYWRQcm9ncmVzcyk7CisgICAgTG9hZFRyYWNraW5nVGVz
dDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInJlbG9hZCIsIHRlc3RXZWJWaWV3UmVsb2FkKTsKKyAg
ICBMb2FkVHJhY2tpbmdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiaGlzdG9yeS1sb2FkIiwg
dGVzdFdlYlZpZXdIaXN0b3J5TG9hZCk7CisKKyAgICAvLyBUaGlzIHRlc3QgY2hlY2tzIHRoYXQg
d2ViIHZpZXcgbm90aWZ5Ojp1cmkgc2lnbmFsIGlzIGNvcnJlY3RseSBlbWl0dGVkCisgICAgLy8g
YW5kIHRoZSB1cmkgaXMgYWxyZWFkeSB1cGRhdGVkIHdoZW4gbG9hZGVyIGNsaWVudCBzaWduYWxz
IGFyZSBlbWl0dGVkLgorICAgIFZpZXdVUklUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmll
dyIsICJhY3RpdmUtdXJpIiwgdGVzdFdlYlZpZXdBY3RpdmVVUkkpOworCisgICAgVmlld0lzTG9h
ZGluZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJpcy1sb2FkaW5nIiwgdGVzdFdlYlZpZXdJ
c0xvYWRpbmcpOworICAgIFdlYlBhZ2VVUklUZXN0OjphZGQoIldlYktpdFdlYlBhZ2UiLCAiZ2V0
LXVyaSIsIHRlc3RXZWJQYWdlVVJJKTsKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRVUklS
ZXF1ZXN0IiwgImh0dHAtaGVhZGVycyIsIHRlc3RVUklSZXF1ZXN0SFRUUEhlYWRlcnMpOworfQor
Cit2b2lkIGFmdGVyQWxsKCkKK3sKKyAgICBkZWxldGUgYnVzOworICAgIGRlbGV0ZSBrU2VydmVy
OworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rl
c3RQcmludGluZy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVz
dFByaW50aW5nLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmMyY2Zi
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3Rr
L1Rlc3RQcmludGluZy5jcHAKQEAgLTAsMCArMSwyMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJWaWV3
VGVzdC5oIgorI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3Qv
R1JlZlB0ci5oPgorCisjaWZkZWYgSEFWRV9HVEtfVU5JWF9QUklOVElORworI2luY2x1ZGUgPGd0
ay9ndGt1bml4cHJpbnQuaD4KKyNlbmRpZgorCitzdGF0aWMgY2hhcioga1RlbXBEaXJlY3Rvcnk7
CisKK3N0YXRpYyB2b2lkIHRlc3RQcmludE9wZXJhdGlvblByaW50U2V0dGluZ3MoV2ViVmlld1Rl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgR1JlZlB0cjxXZWJLaXRQcmludE9wZXJh
dGlvbj4gcHJpbnRPcGVyYXRpb24gPSBhZG9wdEdSZWYod2Via2l0X3ByaW50X29wZXJhdGlvbl9u
ZXcodGVzdC0+bV93ZWJWaWV3KSk7CisgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hl
blRlc3RGaW5pc2hlcyhHX09CSkVDVChwcmludE9wZXJhdGlvbi5nZXQoKSkpOworCisgICAgZ19h
c3NlcnQoIXdlYmtpdF9wcmludF9vcGVyYXRpb25fZ2V0X3ByaW50X3NldHRpbmdzKHByaW50T3Bl
cmF0aW9uLmdldCgpKSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9wcmludF9vcGVyYXRpb25fZ2V0
X3BhZ2Vfc2V0dXAocHJpbnRPcGVyYXRpb24uZ2V0KCkpKTsKKworICAgIEdSZWZQdHI8R3RrUHJp
bnRTZXR0aW5ncz4gcHJpbnRTZXR0aW5ncyA9IGFkb3B0R1JlZihndGtfcHJpbnRfc2V0dGluZ3Nf
bmV3KCkpOworICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMo
R19PQkpFQ1QocHJpbnRTZXR0aW5ncy5nZXQoKSkpOworCisgICAgR1JlZlB0cjxHdGtQYWdlU2V0
dXA+IHBhZ2VTZXR1cCA9IGFkb3B0R1JlZihndGtfcGFnZV9zZXR1cF9uZXcoKSk7CisgICAgdGVz
dC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChwYWdlU2V0
dXAuZ2V0KCkpKTsKKworICAgIHdlYmtpdF9wcmludF9vcGVyYXRpb25fc2V0X3ByaW50X3NldHRp
bmdzKHByaW50T3BlcmF0aW9uLmdldCgpLCBwcmludFNldHRpbmdzLmdldCgpKTsKKyAgICB3ZWJr
aXRfcHJpbnRfb3BlcmF0aW9uX3NldF9wYWdlX3NldHVwKHByaW50T3BlcmF0aW9uLmdldCgpLCBw
YWdlU2V0dXAuZ2V0KCkpOworCisgICAgZ19hc3NlcnQod2Via2l0X3ByaW50X29wZXJhdGlvbl9n
ZXRfcHJpbnRfc2V0dGluZ3MocHJpbnRPcGVyYXRpb24uZ2V0KCkpID09IHByaW50U2V0dGluZ3Mu
Z2V0KCkpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9wcmludF9vcGVyYXRpb25fZ2V0X3BhZ2Vfc2V0
dXAocHJpbnRPcGVyYXRpb24uZ2V0KCkpID09IHBhZ2VTZXR1cC5nZXQoKSk7Cit9CisKK3N0YXRp
YyBnYm9vbGVhbiB3ZWJWaWV3UHJpbnRDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBX
ZWJLaXRQcmludE9wZXJhdGlvbiogcHJpbnRPcGVyYXRpb24sIFdlYlZpZXdUZXN0KiB0ZXN0KQor
eworICAgIGdfYXNzZXJ0KHdlYlZpZXcgPT0gdGVzdC0+bV93ZWJWaWV3KTsKKworICAgIGdfYXNz
ZXJ0KFdFQktJVF9JU19QUklOVF9PUEVSQVRJT04ocHJpbnRPcGVyYXRpb24pKTsKKyAgICB0ZXN0
LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHByaW50T3Bl
cmF0aW9uKSk7CisKKyAgICBnX2Fzc2VydCghd2Via2l0X3ByaW50X29wZXJhdGlvbl9nZXRfcHJp
bnRfc2V0dGluZ3MocHJpbnRPcGVyYXRpb24pKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3ByaW50
X29wZXJhdGlvbl9nZXRfcGFnZV9zZXR1cChwcmludE9wZXJhdGlvbikpOworCisgICAgZ19tYWlu
X2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKworICAgIHJldHVybiBUUlVFOworfQorCitz
dGF0aWMgdm9pZCB0ZXN0V2ViVmlld1ByaW50KFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2lu
dGVyKQoreworICAgIGdfc2lnbmFsX2Nvbm5lY3QodGVzdC0+bV93ZWJWaWV3LCAicHJpbnQiLCBH
X0NBTExCQUNLKHdlYlZpZXdQcmludENhbGxiYWNrKSwgdGVzdCk7CisgICAgdGVzdC0+bG9hZEh0
bWwoIjxodG1sPjxib2R5IG9uTG9hZD1cInByaW50KCk7XCI+V2ViS2l0R1RLKyBwcmludGluZyB0
ZXN0PC9ib2R5PjwvaHRtbD4iLCAwKTsKKyAgICBnX21haW5fbG9vcF9ydW4odGVzdC0+bV9tYWlu
TG9vcCk7Cit9CisKKyNpZmRlZiBIQVZFX0dUS19VTklYX1BSSU5USU5HCitjbGFzcyBQcmludFRl
c3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklY
VFVSRShQcmludFRlc3QpOworCisgICAgc3RhdGljIHZvaWQgcHJpbnRGaW5pc2hlZENhbGxiYWNr
KFdlYktpdFByaW50T3BlcmF0aW9uKiwgUHJpbnRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAg
Z19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBzdGF0aWMg
dm9pZCBwcmludEZhaWxlZENhbGxiYWNrKFdlYktpdFByaW50T3BlcmF0aW9uKiwgR0Vycm9yKiBl
cnJvciwgUHJpbnRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQodGVzdC0+bV9l
eHBlY3RlZEVycm9yKTsKKyAgICAgICAgZ19hc3NlcnQoZXJyb3IpOworICAgICAgICBnX2Fzc2Vy
dChnX2Vycm9yX21hdGNoZXMoZXJyb3IsIFdFQktJVF9QUklOVF9FUlJPUiwgdGVzdC0+bV9leHBl
Y3RlZEVycm9yKSk7CisgICAgfQorCisgICAgUHJpbnRUZXN0KCkKKyAgICAgICAgOiBtX2V4cGVj
dGVkRXJyb3IoMCkKKyAgICB7CisgICAgICAgIG1fcHJpbnRPcGVyYXRpb24gPSBhZG9wdEdSZWYo
d2Via2l0X3ByaW50X29wZXJhdGlvbl9uZXcobV93ZWJWaWV3KSk7CisgICAgICAgIGFzc2VydE9i
amVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QobV9wcmludE9wZXJhdGlvbi5n
ZXQoKSkpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fcHJpbnRPcGVyYXRpb24uZ2V0KCks
ICJmaW5pc2hlZCIsIEdfQ0FMTEJBQ0socHJpbnRGaW5pc2hlZENhbGxiYWNrKSwgdGhpcyk7Cisg
ICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9wcmludE9wZXJhdGlvbi5nZXQoKSwgImZhaWxlZCIs
IEdfQ0FMTEJBQ0socHJpbnRGYWlsZWRDYWxsYmFjayksIHRoaXMpOworICAgIH0KKworICAgIHN0
YXRpYyBnYm9vbGVhbiB0ZXN0UHJpbnRPcGVyYXRpb25QcmludFByaW50ZXIoR3RrUHJpbnRlciog
cHJpbnRlciwgZ3BvaW50ZXIgdXNlckRhdGEpCisgICAgeworICAgICAgICBpZiAoc3RyY21wKGd0
a19wcmludGVyX2dldF9uYW1lKHByaW50ZXIpLCAiUHJpbnQgdG8gRmlsZSIpKQorICAgICAgICAg
ICAgcmV0dXJuIEZBTFNFOworCisgICAgICAgIEd0a1ByaW50ZXIqKiBmb3VuZFByaW50ZXIgPSBz
dGF0aWNfY2FzdDxHdGtQcmludGVyKio+KHVzZXJEYXRhKTsKKyAgICAgICAgKmZvdW5kUHJpbnRl
ciA9IHN0YXRpY19jYXN0PEd0a1ByaW50ZXIqPihnX29iamVjdF9yZWYocHJpbnRlcikpOworICAg
ICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICBHdGtQcmludGVyKiBmaW5kUHJpbnRUb0Zp
bGVQcmludGVyKCkKKyAgICB7CisgICAgICAgIEd0a1ByaW50ZXIqIHByaW50ZXIgPSAwOworICAg
ICAgICBndGtfZW51bWVyYXRlX3ByaW50ZXJzKHRlc3RQcmludE9wZXJhdGlvblByaW50UHJpbnRl
ciwgJnByaW50ZXIsIDAsIFRSVUUpOworICAgICAgICByZXR1cm4gcHJpbnRlcjsKKyAgICB9CisK
KyAgICB2b2lkIHdhaXRVbnRpbFByaW50RmluaXNoZWQoKQorICAgIHsKKyAgICAgICAgZ19tYWlu
X2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIEdSZWZQdHI8V2ViS2l0UHJpbnRP
cGVyYXRpb24+IG1fcHJpbnRPcGVyYXRpb247CisgICAgdW5zaWduZWQgaW50IG1fZXhwZWN0ZWRF
cnJvcjsKK307CisKK3N0YXRpYyB2b2lkIHRlc3RQcmludE9wZXJhdGlvblByaW50KFByaW50VGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJv
ZHk+V2ViS2l0R1RLKyBwcmludGluZyB0ZXN0PC9ib2R5PjwvaHRtbD4iLCAwKTsKKyAgICB0ZXN0
LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIEdSZWZQdHI8R3RrUHJpbnRlcj4gcHJp
bnRlciA9IGFkb3B0R1JlZih0ZXN0LT5maW5kUHJpbnRUb0ZpbGVQcmludGVyKCkpOworICAgIGlm
ICghcHJpbnRlcikgeworICAgICAgICBnX21lc3NhZ2UoIiVzIiwgIkNhbm5vdCB0ZXN0IFdlYktp
dFByaW50T3BlcmF0aW9uL3ByaW50OiBubyBzdWl0YWJsZSBwcmludGVyIGZvdW5kIik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBHT3duUHRyPGNoYXI+IG91dHB1dEZpbGVuYW1lKGdf
YnVpbGRfZmlsZW5hbWUoa1RlbXBEaXJlY3RvcnksICJ3ZWJraXQtcHJpbnQucGRmIiwgTlVMTCkp
OworICAgIEdSZWZQdHI8R0ZpbGU+IG91dHB1dEZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19m
b3JfcGF0aChvdXRwdXRGaWxlbmFtZS5nZXQoKSkpOworICAgIEdPd25QdHI8Y2hhcj4gb3V0cHV0
VVJJKGdfZmlsZV9nZXRfdXJpKG91dHB1dEZpbGUuZ2V0KCkpKTsKKworICAgIEdSZWZQdHI8R3Rr
UHJpbnRTZXR0aW5ncz4gcHJpbnRTZXR0aW5ncyA9IGFkb3B0R1JlZihndGtfcHJpbnRfc2V0dGlu
Z3NfbmV3KCkpOworICAgIGd0a19wcmludF9zZXR0aW5nc19zZXRfcHJpbnRlcihwcmludFNldHRp
bmdzLmdldCgpLCBndGtfcHJpbnRlcl9nZXRfbmFtZShwcmludGVyLmdldCgpKSk7CisgICAgZ3Rr
X3ByaW50X3NldHRpbmdzX3NldChwcmludFNldHRpbmdzLmdldCgpLCBHVEtfUFJJTlRfU0VUVElO
R1NfT1VUUFVUX1VSSSwgb3V0cHV0VVJJLmdldCgpKTsKKworICAgIHdlYmtpdF9wcmludF9vcGVy
YXRpb25fc2V0X3ByaW50X3NldHRpbmdzKHRlc3QtPm1fcHJpbnRPcGVyYXRpb24uZ2V0KCksIHBy
aW50U2V0dGluZ3MuZ2V0KCkpOworICAgIHdlYmtpdF9wcmludF9vcGVyYXRpb25fcHJpbnQodGVz
dC0+bV9wcmludE9wZXJhdGlvbi5nZXQoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsUHJpbnRGaW5p
c2hlZCgpOworCisgICAgR1JlZlB0cjxHRmlsZUluZm8+IGZpbGVJbmZvID0gYWRvcHRHUmVmKGdf
ZmlsZV9xdWVyeV9pbmZvKG91dHB1dEZpbGUuZ2V0KCksIEdfRklMRV9BVFRSSUJVVEVfU1RBTkRB
UkRfU0laRSAiLCIgR19GSUxFX0FUVFJJQlVURV9TVEFOREFSRF9DT05URU5UX1RZUEUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PEdGaWxlUXVlcnlJbmZvRmxhZ3M+KDApLCAwLCAwKSk7CisgICAgZ19hc3Nl
cnQoZmlsZUluZm8uZ2V0KCkpOworICAgIGdfYXNzZXJ0X2NtcGludChnX2ZpbGVfaW5mb19nZXRf
c2l6ZShmaWxlSW5mby5nZXQoKSksID4sIDApOworICAgIGdfYXNzZXJ0X2NtcHN0cihnX2ZpbGVf
aW5mb19nZXRfY29udGVudF90eXBlKGZpbGVJbmZvLmdldCgpKSwgPT0sICJhcHBsaWNhdGlvbi9w
ZGYiKTsKKworICAgIGdfZmlsZV9kZWxldGUob3V0cHV0RmlsZS5nZXQoKSwgMCwgMCk7Cit9CisK
K3N0YXRpYyB2b2lkIHRlc3RQcmludE9wZXJhdGlvbkVycm9ycyhQcmludFRlc3QqIHRlc3QsIGdj
b25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxib2R5PldlYktpdEdU
SysgcHJpbnRpbmcgZXJyb3JzIHRlc3Q8L2JvZHk+PC9odG1sPiIsIDApOworICAgIHRlc3QtPndh
aXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgR1JlZlB0cjxHdGtQcmludGVyPiBwcmludGVy
ID0gYWRvcHRHUmVmKHRlc3QtPmZpbmRQcmludFRvRmlsZVByaW50ZXIoKSk7CisgICAgaWYgKCFw
cmludGVyKSB7CisgICAgICAgIGdfbWVzc2FnZSgiJXMiLCAiQ2Fubm90IHRlc3QgV2ViS2l0UHJp
bnRPcGVyYXRpb24vcHJpbnQ6IG5vIHN1aXRhYmxlIHByaW50ZXIgZm91bmQiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIC8vIEdlbmVyYWwgRXJyb3I6IGludmFsaWQgZmlsZW5hbWUu
CisgICAgdGVzdC0+bV9leHBlY3RlZEVycm9yID0gV0VCS0lUX1BSSU5UX0VSUk9SX0dFTkVSQUw7
CisgICAgR1JlZlB0cjxHdGtQcmludFNldHRpbmdzPiBwcmludFNldHRpbmdzID0gYWRvcHRHUmVm
KGd0a19wcmludF9zZXR0aW5nc19uZXcoKSk7CisgICAgZ3RrX3ByaW50X3NldHRpbmdzX3NldF9w
cmludGVyKHByaW50U2V0dGluZ3MuZ2V0KCksIGd0a19wcmludGVyX2dldF9uYW1lKHByaW50ZXIu
Z2V0KCkpKTsKKyAgICBndGtfcHJpbnRfc2V0dGluZ3Nfc2V0KHByaW50U2V0dGluZ3MuZ2V0KCks
IEdUS19QUklOVF9TRVRUSU5HU19PVVRQVVRfVVJJLCAiZmlsZTovLy9mb28vYmFyIik7CisgICAg
d2Via2l0X3ByaW50X29wZXJhdGlvbl9zZXRfcHJpbnRfc2V0dGluZ3ModGVzdC0+bV9wcmludE9w
ZXJhdGlvbi5nZXQoKSwgcHJpbnRTZXR0aW5ncy5nZXQoKSk7CisgICAgd2Via2l0X3ByaW50X29w
ZXJhdGlvbl9wcmludCh0ZXN0LT5tX3ByaW50T3BlcmF0aW9uLmdldCgpKTsKKyAgICB0ZXN0LT53
YWl0VW50aWxQcmludEZpbmlzaGVkKCk7CisKKyAgICAvLyBQcmludGVyIG5vdCBmb3VuZCBlcnJv
ci4KKyAgICB0ZXN0LT5tX2V4cGVjdGVkRXJyb3IgPSBXRUJLSVRfUFJJTlRfRVJST1JfUFJJTlRF
Ul9OT1RfRk9VTkQ7CisgICAgZ3RrX3ByaW50X3NldHRpbmdzX3NldF9wcmludGVyKHByaW50U2V0
dGluZ3MuZ2V0KCksICJUaGUgZmFrZSBXZWJLaXQgcHJpbnRlciIpOworICAgIHdlYmtpdF9wcmlu
dF9vcGVyYXRpb25fcHJpbnQodGVzdC0+bV9wcmludE9wZXJhdGlvbi5nZXQoKSk7CisgICAgdGVz
dC0+d2FpdFVudGlsUHJpbnRGaW5pc2hlZCgpOworCisgICAgLy8gTm8gcGFnZXMgdG8gcHJpbnQ6
IHByaW50IGV2ZW4gcGFnZXMgZm9yIGEgc2luZ2xlIHBhZ2UgZG9jdW1lbnQuCisgICAgdGVzdC0+
bV9leHBlY3RlZEVycm9yID0gV0VCS0lUX1BSSU5UX0VSUk9SX0lOVkFMSURfUEFHRV9SQU5HRTsK
KyAgICBndGtfcHJpbnRfc2V0dGluZ3Nfc2V0X3ByaW50ZXIocHJpbnRTZXR0aW5ncy5nZXQoKSwg
Z3RrX3ByaW50ZXJfZ2V0X25hbWUocHJpbnRlci5nZXQoKSkpOworICAgIGd0a19wcmludF9zZXR0
aW5nc19zZXRfcGFnZV9zZXQocHJpbnRTZXR0aW5ncy5nZXQoKSwgR1RLX1BBR0VfU0VUX0VWRU4p
OworICAgIHdlYmtpdF9wcmludF9vcGVyYXRpb25fcHJpbnQodGVzdC0+bV9wcmludE9wZXJhdGlv
bi5nZXQoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsUHJpbnRGaW5pc2hlZCgpOworfQorI2VuZGlm
IC8vIEhBVkVfR1RLX1VOSVhfUFJJTlRJTkcKKwordm9pZCBiZWZvcmVBbGwoKQoreworICAgIGtU
ZW1wRGlyZWN0b3J5ID0gZ19kaXJfbWFrZV90bXAoIldlYktpdDJUZXN0cy1YWFhYWFgiLCAwKTsK
KyAgICBnX2Fzc2VydChrVGVtcERpcmVjdG9yeSk7CisKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJX
ZWJLaXRQcmludE9wZXJhdGlvbiIsICJwcmludGluZy1zZXR0aW5ncyIsIHRlc3RQcmludE9wZXJh
dGlvblByaW50U2V0dGluZ3MpOworICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYlZpZXci
LCAicHJpbnQiLCB0ZXN0V2ViVmlld1ByaW50KTsKKyNpZmRlZiBIQVZFX0dUS19VTklYX1BSSU5U
SU5HCisgICAgUHJpbnRUZXN0OjphZGQoIldlYktpdFByaW50T3BlcmF0aW9uIiwgInByaW50Iiwg
dGVzdFByaW50T3BlcmF0aW9uUHJpbnQpOworICAgIFByaW50VGVzdDo6YWRkKCJXZWJLaXRQcmlu
dE9wZXJhdGlvbiIsICJwcmludC1lcnJvcnMiLCB0ZXN0UHJpbnRPcGVyYXRpb25FcnJvcnMpOwor
I2VuZGlmCit9CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworICAgIGdfcm1kaXIoa1RlbXBEaXJlY3Rv
cnkpOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3Rr
L1Rlc3RSZXNvdXJjZXMuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3Rr
L1Rlc3RSZXNvdXJjZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3
ZjE4MmMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dDJHdGsvVGVzdFJlc291cmNlcy5jcHAKQEAgLTAsMCArMSw3ODkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAi
V2ViS2l0VGVzdFNlcnZlci5oIgorI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKworc3RhdGlj
IFdlYktpdFRlc3RTZXJ2ZXIqIGtTZXJ2ZXI7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBrSW5kZXhI
dG1sID0KKyAgICAiPGh0bWw+PGhlYWQ+IgorICAgICIgPGxpbmsgcmVsPSdzdHlsZXNoZWV0JyBo
cmVmPScvc3R5bGUuY3NzJyB0eXBlPSd0ZXh0L2Nzcyc+IgorICAgICIgPHNjcmlwdCBsYW5ndWFn
ZT0namF2YXNjcmlwdCcgc3JjPScvamF2YXNjcmlwdC5qcyc+PC9zY3JpcHQ+IgorICAgICI8L2hl
YWQ+PGJvZHk+V2ViS2l0R1RLKyByZXNvdXJjZXMgdGVzdDwvYm9keT48L2h0bWw+IjsKKworc3Rh
dGljIGNvbnN0IGNoYXIqIGtTdHlsZUNTUyA9CisgICAgImJvZHkgeyIKKyAgICAiICAgIG1hcmdp
bjogMHB4OyIKKyAgICAiICAgIHBhZGRpbmc6IDBweDsiCisgICAgIiAgICBmb250LWZhbWlseTog
c2Fucy1zZXJpZjsiCisgICAgIiAgICBiYWNrZ3JvdW5kOiB1cmwoL2JsYW5rLmljbykgMCAwIG5v
LXJlcGVhdDsiCisgICAgIiAgICBjb2xvcjogYmxhY2s7IgorICAgICJ9IjsKKworc3RhdGljIGNv
bnN0IGNoYXIqIGtKYXZhc2NyaXB0ID0gImZ1bmN0aW9uIGZvbyAoKSB7IHZhciBhID0gMTsgfSI7
CisKK2NsYXNzIFJlc291cmNlc1Rlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7CitwdWJsaWM6Cisg
ICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShSZXNvdXJjZXNUZXN0KTsKKworICAgIHN0YXRpYyB2
b2lkIHJlc291cmNlU2VudFJlcXVlc3RDYWxsYmFjayhXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3Vy
Y2UsIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QsIFdlYktpdFVSSVJlc3BvbnNlKiByZWRpcmVj
dFJlc3BvbnNlLCBSZXNvdXJjZXNUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+YXNz
ZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChyZXF1ZXN0KSk7Cisg
ICAgICAgIGlmIChyZWRpcmVjdFJlc3BvbnNlKQorICAgICAgICAgICAgdGVzdC0+YXNzZXJ0T2Jq
ZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChyZWRpcmVjdFJlc3BvbnNlKSk7
CisgICAgICAgIHRlc3QtPnJlc291cmNlU2VudFJlcXVlc3QocmVzb3VyY2UsIHJlcXVlc3QsIHJl
ZGlyZWN0UmVzcG9uc2UpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHJlc291cmNlUmVjZWl2
ZWRSZXNwb25zZUNhbGxiYWNrKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgR1BhcmFtU3Bl
YyosIFJlc291cmNlc1Rlc3QqIHRlc3QpCisgICAgeworICAgICAgICBnX2Fzc2VydCh3ZWJraXRf
d2ViX3Jlc291cmNlX2dldF9yZXNwb25zZShyZXNvdXJjZSkpOworICAgICAgICB0ZXN0LT5yZXNv
dXJjZVJlY2VpdmVkUmVzcG9uc2UocmVzb3VyY2UpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lk
IHJlc291cmNlUmVjZWl2ZWREYXRhQ2FsbGJhY2soV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNl
LCBndWludDY0IGJ5dGVzUmVjZWl2ZWQsIFJlc291cmNlc1Rlc3QqIHRlc3QpCisgICAgeworICAg
ICAgICB0ZXN0LT5yZXNvdXJjZVJlY2VpdmVkRGF0YShyZXNvdXJjZSwgYnl0ZXNSZWNlaXZlZCk7
CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVzb3VyY2VGaW5pc2hlZENhbGxiYWNrKFdlYktp
dFdlYlJlc291cmNlKiByZXNvdXJjZSwgUmVzb3VyY2VzVGVzdCogdGVzdCkKKyAgICB7CisgICAg
ICAgIHRlc3QtPnJlc291cmNlRmluaXNoZWQocmVzb3VyY2UpOworICAgIH0KKworICAgIHN0YXRp
YyB2b2lkIHJlc291cmNlRmFpbGVkQ2FsbGJhY2soV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNl
LCBHRXJyb3IqIGVycm9yLCBSZXNvdXJjZXNUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgZ19h
c3NlcnQoZXJyb3IpOworICAgICAgICB0ZXN0LT5yZXNvdXJjZUZhaWxlZChyZXNvdXJjZSwgZXJy
b3IpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHJlc291cmNlTG9hZFN0YXJ0ZWRDYWxsYmFj
ayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIFdl
YktpdFVSSVJlcXVlc3QqIHJlcXVlc3QsIFJlc291cmNlc1Rlc3QqIHRlc3QpCisgICAgeworICAg
ICAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNU
KHJlc291cmNlKSk7CisgICAgICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0
RmluaXNoZXMoR19PQkpFQ1QocmVxdWVzdCkpOworCisgICAgICAgIC8vIElnbm9yZSBmYXZpY29u
cy4KKyAgICAgICAgaWYgKGdfc3RyX2hhc19zdWZmaXgod2Via2l0X3VyaV9yZXF1ZXN0X2dldF91
cmkocmVxdWVzdCksICJmYXZpY29uLmljbyIpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIHRlc3QtPnJlc291cmNlTG9hZFN0YXJ0ZWQocmVzb3VyY2UsIHJlcXVlc3QpOworICAgICAg
ICBnX3NpZ25hbF9jb25uZWN0KHJlc291cmNlLCAic2VudC1yZXF1ZXN0IiwgR19DQUxMQkFDSyhy
ZXNvdXJjZVNlbnRSZXF1ZXN0Q2FsbGJhY2spLCB0ZXN0KTsKKyAgICAgICAgZ19zaWduYWxfY29u
bmVjdChyZXNvdXJjZSwgIm5vdGlmeTo6cmVzcG9uc2UiLCBHX0NBTExCQUNLKHJlc291cmNlUmVj
ZWl2ZWRSZXNwb25zZUNhbGxiYWNrKSwgdGVzdCk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
cmVzb3VyY2UsICJyZWNlaXZlZC1kYXRhIiwgR19DQUxMQkFDSyhyZXNvdXJjZVJlY2VpdmVkRGF0
YUNhbGxiYWNrKSwgdGVzdCk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QocmVzb3VyY2UsICJm
aW5pc2hlZCIsIEdfQ0FMTEJBQ0socmVzb3VyY2VGaW5pc2hlZENhbGxiYWNrKSwgdGVzdCk7Cisg
ICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QocmVzb3VyY2UsICJmYWlsZWQiLCBHX0NBTExCQUNLKHJl
c291cmNlRmFpbGVkQ2FsbGJhY2spLCB0ZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyU3Vi
cmVzb3VyY2VzKCkKKyAgICB7CisgICAgICAgIGdfbGlzdF9mcmVlX2Z1bGwobV9zdWJyZXNvdXJj
ZXMsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGdfb2JqZWN0X3VucmVmKSk7Cisg
ICAgICAgIG1fc3VicmVzb3VyY2VzID0gMDsKKyAgICB9CisKKyAgICBSZXNvdXJjZXNUZXN0KCkK
KyAgICAgICAgOiBXZWJWaWV3VGVzdCgpCisgICAgICAgICwgbV9yZXNvdXJjZXNMb2FkZWQoMCkK
KyAgICAgICAgLCBtX3Jlc291cmNlc1RvTG9hZCgwKQorICAgICAgICAsIG1fcmVzb3VyY2VEYXRh
U2l6ZSgwKQorICAgICAgICAsIG1fc3VicmVzb3VyY2VzKDApCisgICAgeworICAgICAgICBnX3Np
Z25hbF9jb25uZWN0KG1fd2ViVmlldywgInJlc291cmNlLWxvYWQtc3RhcnRlZCIsIEdfQ0FMTEJB
Q0socmVzb3VyY2VMb2FkU3RhcnRlZENhbGxiYWNrKSwgdGhpcyk7CisgICAgfQorCisgICAgflJl
c291cmNlc1Rlc3QoKQorICAgIHsKKyAgICAgICAgY2xlYXJTdWJyZXNvdXJjZXMoKTsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVzb3VyY2VMb2FkU3RhcnRlZChXZWJLaXRXZWJSZXNvdXJj
ZSogcmVzb3VyY2UsIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QpCisgICAgeworICAgIH0KKwor
ICAgIHZpcnR1YWwgdm9pZCByZXNvdXJjZVNlbnRSZXF1ZXN0KFdlYktpdFdlYlJlc291cmNlKiBy
ZXNvdXJjZSwgV2ViS2l0VVJJUmVxdWVzdCogcmVxdWVzdCwgV2ViS2l0VVJJUmVzcG9uc2UqIHJl
ZGlyZWN0UmVzcG9uc2UpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCByZXNvdXJj
ZVJlY2VpdmVkUmVzcG9uc2UoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlKQorICAgIHsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVzb3VyY2VSZWNlaXZlZERhdGEoV2ViS2l0V2ViUmVz
b3VyY2UqIHJlc291cmNlLCBndWludDY0IGJ5dGVzUmVjZWl2ZWQpCisgICAgeworICAgIH0KKwor
ICAgIHZpcnR1YWwgdm9pZCByZXNvdXJjZUZpbmlzaGVkKFdlYktpdFdlYlJlc291cmNlKiByZXNv
dXJjZSkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hl
ZChyZXNvdXJjZSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7CisgICAg
ICAgIGlmICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2UobV93ZWJWaWV3KSAhPSBy
ZXNvdXJjZSkKKyAgICAgICAgICAgIG1fc3VicmVzb3VyY2VzID0gZ19saXN0X3ByZXBlbmQobV9z
dWJyZXNvdXJjZXMsIGdfb2JqZWN0X3JlZihyZXNvdXJjZSkpOworICAgICAgICBpZiAoKyttX3Jl
c291cmNlc0xvYWRlZCA9PSBtX3Jlc291cmNlc1RvTG9hZCkKKyAgICAgICAgICAgIGdfbWFpbl9s
b29wX3F1aXQobV9tYWluTG9vcCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHJlc291cmNl
RmFpbGVkKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgR0Vycm9yKiBlcnJvcikKKyAgICB7
CisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgfQorCisgICAgdm9pZCB3YWl0
VW50aWxSZXNvdXJjZXNMb2FkZWQoc2l6ZV90IHJlc291cmNlc0NvdW50KQorICAgIHsKKyAgICAg
ICAgbV9yZXNvdXJjZXNMb2FkZWQgPSAwOworICAgICAgICBtX3Jlc291cmNlc1RvTG9hZCA9IHJl
c291cmNlc0NvdW50OworICAgICAgICBjbGVhclN1YnJlc291cmNlcygpOworICAgICAgICBnX21h
aW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgfQorCisgICAgR0xpc3QqIHN1YnJlc291cmNl
cygpCisgICAgeworICAgICAgICByZXR1cm4gbV9zdWJyZXNvdXJjZXM7CisgICAgfQorCisgICAg
c3RhdGljIHZvaWQgcmVzb3VyY2VHZXREYXRhQ2FsbGJhY2soR09iamVjdCogb2JqZWN0LCBHQXN5
bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEpCisgICAgeworICAgICAgICBzaXpl
X3QgZGF0YVNpemU7CisgICAgICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICAgICAgdW5z
aWduZWQgY2hhciogZGF0YSA9IHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X2RhdGFfZmluaXNoKFdF
QktJVF9XRUJfUkVTT1VSQ0Uob2JqZWN0KSwgcmVzdWx0LCAmZGF0YVNpemUsICZlcnJvci5vdXRQ
dHIoKSk7CisgICAgICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0
KGRhdGEpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoZGF0YVNpemUsID4sIDApOworCisgICAg
ICAgIFJlc291cmNlc1Rlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZXNUZXN0Kj4odXNl
ckRhdGEpOworICAgICAgICB0ZXN0LT5tX3Jlc291cmNlRGF0YS5zZXQocmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oZGF0YSkpOworICAgICAgICB0ZXN0LT5tX3Jlc291cmNlRGF0YVNpemUgPSBkYXRh
U2l6ZTsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9
CisKKyAgICB2b2lkIGNoZWNrUmVzb3VyY2VEYXRhKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJj
ZSkKKyAgICB7CisgICAgICAgIG1fcmVzb3VyY2VEYXRhU2l6ZSA9IDA7CisgICAgICAgIHdlYmtp
dF93ZWJfcmVzb3VyY2VfZ2V0X2RhdGEocmVzb3VyY2UsIDAsIHJlc291cmNlR2V0RGF0YUNhbGxi
YWNrLCB0aGlzKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworCisgICAg
ICAgIGNvbnN0IGNoYXIqIHVyaSA9IHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaShyZXNvdXJj
ZSk7CisgICAgICAgIGlmICh1cmkgPT0ga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpKSB7Cisg
ICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQobV9yZXNvdXJjZURhdGFTaXplLCA9PSwgc3RybGVu
KGtJbmRleEh0bWwpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KCFzdHJuY21wKG1fcmVzb3VyY2VE
YXRhLmdldCgpLCBrSW5kZXhIdG1sLCBtX3Jlc291cmNlRGF0YVNpemUpKTsKKyAgICAgICAgfSBl
bHNlIGlmICh1cmkgPT0ga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3N0eWxlLmNzcyIpKSB7Cisg
ICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQobV9yZXNvdXJjZURhdGFTaXplLCA9PSwgc3RybGVu
KGtTdHlsZUNTUykpOworICAgICAgICAgICAgZ19hc3NlcnQoIXN0cm5jbXAobV9yZXNvdXJjZURh
dGEuZ2V0KCksIGtTdHlsZUNTUywgbV9yZXNvdXJjZURhdGFTaXplKSk7CisgICAgICAgIH0gZWxz
ZSBpZiAodXJpID09IGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9qYXZhc2NyaXB0LmpzIikpIHsK
KyAgICAgICAgICAgIGdfYXNzZXJ0X2NtcGludChtX3Jlc291cmNlRGF0YVNpemUsID09LCBzdHJs
ZW4oa0phdmFzY3JpcHQpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KCFzdHJuY21wKG1fcmVzb3Vy
Y2VEYXRhLmdldCgpLCBrSmF2YXNjcmlwdCwgbV9yZXNvdXJjZURhdGFTaXplKSk7CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICAgICAgbV9y
ZXNvdXJjZURhdGEuY2xlYXIoKTsKKyAgICB9CisKKyAgICBzaXplX3QgbV9yZXNvdXJjZXNMb2Fk
ZWQ7CisgICAgc2l6ZV90IG1fcmVzb3VyY2VzVG9Mb2FkOworICAgIEdPd25QdHI8Y2hhcj4gbV9y
ZXNvdXJjZURhdGE7CisgICAgc2l6ZV90IG1fcmVzb3VyY2VEYXRhU2l6ZTsKKyAgICBHTGlzdCog
bV9zdWJyZXNvdXJjZXM7Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1Jlc291cmNlcyhS
ZXNvdXJjZXNUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIC8vIE5vdGhpbmcgbG9h
ZGVkIHlldCwgdGhlcmUgc2hvdWxuZCd0IGJlIHJlc291cmNlcy4KKyAgICBnX2Fzc2VydCghd2Vi
a2l0X3dlYl92aWV3X2dldF9tYWluX3Jlc291cmNlKHRlc3QtPm1fd2ViVmlldykpOworICAgIGdf
YXNzZXJ0KCF0ZXN0LT5zdWJyZXNvdXJjZXMoKSk7CisKKyAgICAvLyBMb2FkIHNpbXBsZSBwYWdl
IHdpdGhvdXQgc3VicmVzb3VyY2VzLgorICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keT5U
ZXN0aW5nIFdlYktpdEdUSys8L2JvZHk+PC9odG1sPiIsIDApOworICAgIHRlc3QtPndhaXRVbnRp
bExvYWRGaW5pc2hlZCgpOworICAgIFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSA9IHdlYmtp
dF93ZWJfdmlld19nZXRfbWFpbl9yZXNvdXJjZSh0ZXN0LT5tX3dlYlZpZXcpOworICAgIGdfYXNz
ZXJ0KHJlc291cmNlKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dldF91
cmkodGVzdC0+bV93ZWJWaWV3KSwgPT0sIHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaShyZXNv
dXJjZSkpOworICAgIGdfYXNzZXJ0KCF0ZXN0LT5zdWJyZXNvdXJjZXMoKSk7CisKKyAgICAvLyBM
b2FkIHNpbXBsZSBwYWdlIHdpdGggc3VicmVzb3VyY2VzLgorICAgIHRlc3QtPmxvYWRVUkkoa1Nl
cnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsUmVz
b3VyY2VzTG9hZGVkKDQpOworCisgICAgcmVzb3VyY2UgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21h
aW5fcmVzb3VyY2UodGVzdC0+bV93ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChyZXNvdXJjZSk7Cisg
ICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKHRlc3QtPm1fd2ViVmll
dyksID09LCB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF91cmkocmVzb3VyY2UpKTsKKyAgICBHTGlz
dCogc3VicmVzb3VyY2VzID0gdGVzdC0+c3VicmVzb3VyY2VzKCk7CisgICAgZ19hc3NlcnQoc3Vi
cmVzb3VyY2VzKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19saXN0X2xlbmd0aChzdWJyZXNvdXJj
ZXMpLCA9PSwgMyk7CisKKyNpZiAwCisgICAgLy8gTG9hZCB0aGUgc2FtZSBVUkkgYWdhaW4uCisg
ICAgLy8gRklYTUU6IHdlIG5lZWQgYSB3b3JrYXJvdW5kIGZvciBidWcgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NTEwLgorICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZl
ci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsUmVzb3Vy
Y2VzTG9hZGVkKDQpOworI2VuZGlmCisKKyAgICAvLyBSZWxvYWQuCisgICAgd2Via2l0X3dlYl92
aWV3X3JlbG9hZF9ieXBhc3NfY2FjaGUodGVzdC0+bV93ZWJWaWV3KTsKKyAgICB0ZXN0LT53YWl0
VW50aWxSZXNvdXJjZXNMb2FkZWQoNCk7Cit9CisKK2NsYXNzIFNpbmdsZVJlc291cmNlTG9hZFRl
c3Q6IHB1YmxpYyBSZXNvdXJjZXNUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9G
SVhUVVJFKFNpbmdsZVJlc291cmNlTG9hZFRlc3QpOworCisgICAgZW51bSBMb2FkRXZlbnRzIHsK
KyAgICAgICAgU3RhcnRlZCwKKyAgICAgICAgU2VudFJlcXVlc3QsCisgICAgICAgIFJlZGlyZWN0
ZWQsCisgICAgICAgIFJlY2VpdmVkUmVzcG9uc2UsCisgICAgICAgIFJlY2VpdmVkRGF0YSwKKyAg
ICAgICAgRmluaXNoZWQsCisgICAgICAgIEZhaWxlZAorICAgIH07CisKKyAgICBTaW5nbGVSZXNv
dXJjZUxvYWRUZXN0KCkKKyAgICAgICAgOiBSZXNvdXJjZXNUZXN0KCkKKyAgICAgICAgLCBtX3Jl
c291cmNlRGF0YVJlY2VpdmVkKDApCisgICAgeworICAgICAgICAgbV9yZXNvdXJjZXNUb0xvYWQg
PSAyOworICAgIH0KKworICAgIHZvaWQgcmVzb3VyY2VMb2FkU3RhcnRlZChXZWJLaXRXZWJSZXNv
dXJjZSogcmVzb3VyY2UsIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QpCisgICAgeworICAgICAg
ICBpZiAocmVzb3VyY2UgPT0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX3Jlc291cmNlKG1fd2Vi
VmlldykpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9yZXNvdXJjZURhdGFSZWNl
aXZlZCA9IDA7CisgICAgICAgIG1fcmVzb3VyY2UgPSByZXNvdXJjZTsKKyAgICAgICAgbV9sb2Fk
RXZlbnRzLmFwcGVuZChTdGFydGVkKTsKKyAgICB9CisKKyAgICB2b2lkIHJlc291cmNlU2VudFJl
cXVlc3QoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBXZWJLaXRVUklSZXF1ZXN0KiByZXF1
ZXN0LCBXZWJLaXRVUklSZXNwb25zZSogcmVkaXJlY3RSZXNwb25zZSkKKyAgICB7CisgICAgICAg
IGlmIChyZXNvdXJjZSAhPSBtX3Jlc291cmNlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIGlmIChyZWRpcmVjdFJlc3BvbnNlKQorICAgICAgICAgICAgbV9sb2FkRXZlbnRzLmFwcGVu
ZChSZWRpcmVjdGVkKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9sb2FkRXZlbnRzLmFw
cGVuZChTZW50UmVxdWVzdCk7CisgICAgfQorCisgICAgdm9pZCByZXNvdXJjZVJlY2VpdmVkUmVz
cG9uc2UoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlKQorICAgIHsKKyAgICAgICAgaWYgKHJl
c291cmNlICE9IG1fcmVzb3VyY2UpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9s
b2FkRXZlbnRzLmFwcGVuZChSZWNlaXZlZFJlc3BvbnNlKTsKKyAgICB9CisKKyAgICB2b2lkIHJl
c291cmNlUmVjZWl2ZWREYXRhKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgZ3VpbnQ2NCBi
eXRlc1JlY2VpdmVkKQorICAgIHsKKyAgICAgICAgaWYgKHJlc291cmNlICE9IG1fcmVzb3VyY2Up
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9yZXNvdXJjZURhdGFSZWNlaXZlZCAr
PSBieXRlc1JlY2VpdmVkOworICAgICAgICBpZiAoIW1fbG9hZEV2ZW50cy5jb250YWlucyhSZWNl
aXZlZERhdGEpKQorICAgICAgICAgICAgbV9sb2FkRXZlbnRzLmFwcGVuZChSZWNlaXZlZERhdGEp
OworICAgIH0KKworICAgIHZvaWQgcmVzb3VyY2VGaW5pc2hlZChXZWJLaXRXZWJSZXNvdXJjZSog
cmVzb3VyY2UpCisgICAgeworICAgICAgICBpZiAocmVzb3VyY2UgIT0gbV9yZXNvdXJjZSkgewor
ICAgICAgICAgICAgUmVzb3VyY2VzVGVzdDo6cmVzb3VyY2VGaW5pc2hlZChyZXNvdXJjZSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1fbG9hZEV2ZW50
cy5jb250YWlucyhGYWlsZWQpKSB7CisgICAgICAgICAgICBXZWJLaXRVUklSZXNwb25zZSogcmVz
cG9uc2UgPSB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF9yZXNwb25zZShtX3Jlc291cmNlLmdldCgp
KTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KHJlc3BvbnNlKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0
X2NtcGludCh3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF9jb250ZW50X2xlbmd0aChyZXNwb25zZSks
ID09LCBtX3Jlc291cmNlRGF0YVJlY2VpdmVkKTsKKyAgICAgICAgfQorICAgICAgICBtX2xvYWRF
dmVudHMuYXBwZW5kKEZpbmlzaGVkKTsKKyAgICAgICAgUmVzb3VyY2VzVGVzdDo6cmVzb3VyY2VG
aW5pc2hlZChyZXNvdXJjZSk7CisgICAgfQorCisgICAgdm9pZCByZXNvdXJjZUZhaWxlZChXZWJL
aXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIEdFcnJvciogZXJyb3IpCisgICAgeworICAgICAgICBp
ZiAocmVzb3VyY2UgPT0gbV9yZXNvdXJjZSkKKyAgICAgICAgICAgIG1fbG9hZEV2ZW50cy5hcHBl
bmQoRmFpbGVkKTsKKyAgICB9CisKKyAgICB2b2lkIHdhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlz
aGVkKCkKKyAgICB7CisgICAgICAgIG1fcmVzb3VyY2UgPSAwOworICAgICAgICBtX3Jlc291cmNl
c0xvYWRlZCA9IDA7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICB9
CisKKyAgICBXZWJLaXRVUklSZXNwb25zZSogd2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWRB
bmRSZXR1cm5VUklSZXNwb25zZSgpCisgICAgeworICAgICAgICB3YWl0VW50aWxSZXNvdXJjZUxv
YWRGaW5pc2hlZCgpOworICAgICAgICBnX2Fzc2VydChtX3Jlc291cmNlKTsKKyAgICAgICAgcmV0
dXJuIHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3Jlc3BvbnNlKG1fcmVzb3VyY2UuZ2V0KCkpOwor
ICAgIH0KKworICAgIEdSZWZQdHI8V2ViS2l0V2ViUmVzb3VyY2U+IG1fcmVzb3VyY2U7CisgICAg
VmVjdG9yPExvYWRFdmVudHM+IG1fbG9hZEV2ZW50czsKKyAgICBndWludDY0IG1fcmVzb3VyY2VE
YXRhUmVjZWl2ZWQ7Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0V2ViUmVzb3VyY2VMb2FkaW5nKFNp
bmdsZVJlc291cmNlTG9hZFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+
bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvamF2YXNjcmlwdC5odG1sIikuZGF0YSgp
KTsKKyAgICB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZCgpOworICAgIGdfYXNz
ZXJ0KHRlc3QtPm1fcmVzb3VyY2UpOworICAgIFZlY3RvcjxTaW5nbGVSZXNvdXJjZUxvYWRUZXN0
OjpMb2FkRXZlbnRzPiYgZXZlbnRzID0gdGVzdC0+bV9sb2FkRXZlbnRzOworICAgIGdfYXNzZXJ0
X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgNSk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50
c1swXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0
X2NtcGludChldmVudHNbMV0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpTZW50UmVxdWVz
dCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIFNpbmdsZVJlc291cmNlTG9h
ZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbM10s
ID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpSZWNlaXZlZERhdGEpOworICAgIGdfYXNzZXJ0
X2NtcGludChldmVudHNbNF0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpGaW5pc2hlZCk7
CisgICAgZXZlbnRzLmNsZWFyKCk7CisKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVS
SUZvclBhdGgoIi9yZWRpcmVjdGVkLWNzcy5odG1sIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0
VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fcmVzb3Vy
Y2UpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgNik7CisgICAgZ19h
c3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlN0YXJ0
ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBTaW5nbGVSZXNvdXJjZUxv
YWRUZXN0OjpTZW50UmVxdWVzdCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0s
IFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlJlZGlyZWN0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHNbM10sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpSZWNlaXZlZFJlc3BvbnNl
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzRdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2Fk
VGVzdDo6UmVjZWl2ZWREYXRhKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzVdLCA9PSwg
U2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6RmluaXNoZWQpOworICAgIGV2ZW50cy5jbGVhcigpOwor
CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvaW52YWxpZC1jc3Mu
aHRtbCIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWQo
KTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3Jlc291cmNlKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
ZXZlbnRzLnNpemUoKSwgPT0sIDQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09
LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
ZXZlbnRzWzFdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6U2VudFJlcXVlc3QpOworICAg
IGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpG
YWlsZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbM10sID09LCBTaW5nbGVSZXNvdXJj
ZUxvYWRUZXN0OjpGaW5pc2hlZCk7CisgICAgZXZlbnRzLmNsZWFyKCk7Cit9CisKK3N0YXRpYyB2
b2lkIHRlc3RXZWJSZXNvdXJjZVJlc3BvbnNlKFNpbmdsZVJlc291cmNlTG9hZFRlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8gTm8gY2FjaGVkIHJlc291cmNlOiBGaXJzdCBsb2Fk
LgorICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2phdmFzY3JpcHQu
aHRtbCIpLmRhdGEoKSk7CisgICAgV2ViS2l0VVJJUmVzcG9uc2UqIHJlc3BvbnNlID0gdGVzdC0+
d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWRBbmRSZXR1cm5VUklSZXNwb25zZSgpOworICAg
IGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF9zdGF0dXNfY29kZShyZXNw
b25zZSksID09LCBTT1VQX1NUQVRVU19PSyk7CisKKyAgICAvLyBObyBjYWNoZWQgcmVzb3VyY2U6
IFNlY29uZCBsb2FkLgorICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgi
L2phdmFzY3JpcHQuaHRtbCIpLmRhdGEoKSk7CisgICAgcmVzcG9uc2UgPSB0ZXN0LT53YWl0VW50
aWxSZXNvdXJjZUxvYWRGaW5pc2hlZEFuZFJldHVyblVSSVJlc3BvbnNlKCk7CisgICAgZ19hc3Nl
cnRfY21waW50KHdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0X3N0YXR1c19jb2RlKHJlc3BvbnNlKSwg
PT0sIFNPVVBfU1RBVFVTX09LKTsKKworICAgIC8vIE5vIGNhY2hlZCByZXNvdXJjZTogUmVsb2Fk
LgorICAgIHdlYmtpdF93ZWJfdmlld19yZWxvYWQodGVzdC0+bV93ZWJWaWV3KTsKKyAgICByZXNw
b25zZSA9IHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlzaGVkQW5kUmV0dXJuVVJJUmVz
cG9uc2UoKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3VyaV9yZXNwb25zZV9nZXRfc3Rh
dHVzX2NvZGUocmVzcG9uc2UpLCA9PSwgU09VUF9TVEFUVVNfT0spOworCisgICAgLy8gQ2FjaGVk
IHJlc291cmNlOiBGaXJzdCBsb2FkLgorICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJ
Rm9yUGF0aCgiL2ltYWdlLmh0bWwiKS5kYXRhKCkpOworICAgIHJlc3BvbnNlID0gdGVzdC0+d2Fp
dFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWRBbmRSZXR1cm5VUklSZXNwb25zZSgpOworICAgIGdf
YXNzZXJ0X2NtcGludCh3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF9zdGF0dXNfY29kZShyZXNwb25z
ZSksID09LCBTT1VQX1NUQVRVU19PSyk7CisKKyAgICAvLyBDYWNoZWQgcmVzb3VyY2U6IFNlY29u
ZCBsb2FkLgorICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2ltYWdl
Lmh0bWwiKS5kYXRhKCkpOworICAgIHJlc3BvbnNlID0gdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VM
b2FkRmluaXNoZWRBbmRSZXR1cm5VUklSZXNwb25zZSgpOworICAgIGdfYXNzZXJ0X2NtcGludCh3
ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF9zdGF0dXNfY29kZShyZXNwb25zZSksID09LCBTT1VQX1NU
QVRVU19PSyk7CisKKyAgICAvLyBDYWNoZWQgcmVzb3VyY2U6IFJlbG9hZC4KKyAgICB3ZWJraXRf
d2ViX3ZpZXdfcmVsb2FkKHRlc3QtPm1fd2ViVmlldyk7CisgICAgcmVzcG9uc2UgPSB0ZXN0LT53
YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZEFuZFJldHVyblVSSVJlc3BvbnNlKCk7CisgICAg
Z19hc3NlcnRfY21waW50KHdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0X3N0YXR1c19jb2RlKHJlc3Bv
bnNlKSwgPT0sIFNPVVBfU1RBVFVTX05PVF9NT0RJRklFRCk7Cit9CisKK3N0YXRpYyB2b2lkIHRl
c3RXZWJSZXNvdXJjZU1pbWVUeXBlKFNpbmdsZVJlc291cmNlTG9hZFRlc3QqIHRlc3QsIGdjb25z
dHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIv
amF2YXNjcmlwdC5odG1sIikuZGF0YSgpKTsKKyAgICBXZWJLaXRVUklSZXNwb25zZSogcmVzcG9u
c2UgPSB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZEFuZFJldHVyblVSSVJlc3Bv
bnNlKCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0X21pbWVf
dHlwZShyZXNwb25zZSksID09LCAidGV4dC9qYXZhc2NyaXB0Iik7CisKKyAgICB0ZXN0LT5sb2Fk
VVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbWFnZS5odG1sIikuZGF0YSgpKTsKKyAgICBy
ZXNwb25zZSA9IHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlzaGVkQW5kUmV0dXJuVVJJ
UmVzcG9uc2UoKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3VyaV9yZXNwb25zZV9nZXRf
bWltZV90eXBlKHJlc3BvbnNlKSwgPT0sICJpbWFnZS92bmQubWljcm9zb2Z0Lmljb24iKTsKKwor
ICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3JlZGlyZWN0ZWQtY3Nz
Lmh0bWwiKS5kYXRhKCkpOworICAgIHJlc3BvbnNlID0gdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VM
b2FkRmluaXNoZWRBbmRSZXR1cm5VUklSZXNwb25zZSgpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3
ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF9taW1lX3R5cGUocmVzcG9uc2UpLCA9PSwgInRleHQvY3Nz
Iik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJSZXNvdXJjZVN1Z2dlc3RlZEZpbGVuYW1lKFNp
bmdsZVJlc291cmNlTG9hZFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+
bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvamF2YXNjcmlwdC5odG1sIikuZGF0YSgp
KTsKKyAgICBXZWJLaXRVUklSZXNwb25zZSogcmVzcG9uc2UgPSB0ZXN0LT53YWl0VW50aWxSZXNv
dXJjZUxvYWRGaW5pc2hlZEFuZFJldHVyblVSSVJlc3BvbnNlKCk7CisgICAgZ19hc3NlcnRfY21w
c3RyKHdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0X3N1Z2dlc3RlZF9maWxlbmFtZShyZXNwb25zZSks
ID09LCAiSmF2YVNjcmlwdC5qcyIpOworCisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRV
UklGb3JQYXRoKCIvaW1hZ2UuaHRtbCIpLmRhdGEoKSk7CisgICAgcmVzcG9uc2UgPSB0ZXN0LT53
YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZEFuZFJldHVyblVSSVJlc3BvbnNlKCk7CisgICAg
Z19hc3NlcnQoIXdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0X3N1Z2dlc3RlZF9maWxlbmFtZShyZXNw
b25zZSkpOworfQorCitjbGFzcyBSZXNvdXJjZVVSSVRyYWNraW5nVGVzdDogcHVibGljIFNpbmds
ZVJlc291cmNlTG9hZFRlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUo
UmVzb3VyY2VVUklUcmFja2luZ1Rlc3QpOworCisgICAgUmVzb3VyY2VVUklUcmFja2luZ1Rlc3Qo
KQorICAgICAgICA6IFNpbmdsZVJlc291cmNlTG9hZFRlc3QoKQorICAgIHsKKyAgICB9CisKKyAg
ICBzdGF0aWMgdm9pZCB1cmlDaGFuZ2VkKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgR1Bh
cmFtU3BlYyosIFJlc291cmNlVVJJVHJhY2tpbmdUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAg
Z19hc3NlcnQocmVzb3VyY2UgPT0gdGVzdC0+bV9yZXNvdXJjZS5nZXQoKSk7CisgICAgICAgIGdf
YXNzZXJ0X2NtcHN0cih0ZXN0LT5tX2FjdGl2ZVVSSS5kYXRhKCksICE9LCB3ZWJraXRfd2ViX3Jl
c291cmNlX2dldF91cmkodGVzdC0+bV9yZXNvdXJjZS5nZXQoKSkpOworICAgICAgICB0ZXN0LT5t
X2FjdGl2ZVVSSSA9IHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaSh0ZXN0LT5tX3Jlc291cmNl
LmdldCgpKTsKKyAgICB9CisKKyAgICB2b2lkIHJlc291cmNlTG9hZFN0YXJ0ZWQoV2ViS2l0V2Vi
UmVzb3VyY2UqIHJlc291cmNlLCBXZWJLaXRVUklSZXF1ZXN0KiByZXF1ZXN0KQorICAgIHsKKyAg
ICAgICAgaWYgKHJlc291cmNlID09IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9yZXNvdXJjZSht
X3dlYlZpZXcpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fcmVzb3VyY2UgPSBy
ZXNvdXJjZTsKKyAgICAgICAgbV9hY3RpdmVVUkkgPSB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF91
cmkocmVzb3VyY2UpOworICAgICAgICBjaGVja0FjdGl2ZVVSSSgiL3JlZGlyZWN0ZWQuY3NzIik7
CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cihtX2FjdGl2ZVVSSS5kYXRhKCksID09LCB3ZWJraXRf
dXJpX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KSk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
cmVzb3VyY2UsICJub3RpZnk6OnVyaSIsIEdfQ0FMTEJBQ0sodXJpQ2hhbmdlZCksIHRoaXMpOwor
ICAgIH0KKworICAgIHZvaWQgcmVzb3VyY2VTZW50UmVxdWVzdChXZWJLaXRXZWJSZXNvdXJjZSog
cmVzb3VyY2UsIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QsIFdlYktpdFVSSVJlc3BvbnNlKiBy
ZWRpcmVjdFJlc3BvbnNlKQorICAgIHsKKyAgICAgICAgaWYgKHJlc291cmNlICE9IG1fcmVzb3Vy
Y2UpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKHJlZGlyZWN0UmVzcG9uc2Up
CisgICAgICAgICAgICBjaGVja0FjdGl2ZVVSSSgiL3NpbXBsZS1zdHlsZS5jc3MiKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgY2hlY2tBY3RpdmVVUkkoIi9yZWRpcmVjdGVkLmNzcyIpOwor
ICAgICAgICBnX2Fzc2VydF9jbXBzdHIobV9hY3RpdmVVUkkuZGF0YSgpLCA9PSwgd2Via2l0X3Vy
aV9yZXF1ZXN0X2dldF91cmkocmVxdWVzdCkpOworICAgIH0KKworICAgIHZvaWQgcmVzb3VyY2VS
ZWNlaXZlZFJlc3BvbnNlKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSkKKyAgICB7CisgICAg
ICAgIGlmIChyZXNvdXJjZSAhPSBtX3Jlc291cmNlKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIGNoZWNrQWN0aXZlVVJJKCIvc2ltcGxlLXN0eWxlLmNzcyIpOworICAgIH0KKworICAg
IHZvaWQgcmVzb3VyY2VSZWNlaXZlZERhdGEoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBn
dWludDY0IGJ5dGVzUmVjZWl2ZWQpCisgICAgeworICAgIH0KKworICAgIHZvaWQgcmVzb3VyY2VG
aW5pc2hlZChXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UpCisgICAgeworICAgICAgICBpZiAo
cmVzb3VyY2UgPT0gbV9yZXNvdXJjZSkKKyAgICAgICAgICAgIGNoZWNrQWN0aXZlVVJJKCIvc2lt
cGxlLXN0eWxlLmNzcyIpOworICAgICAgICBSZXNvdXJjZXNUZXN0OjpyZXNvdXJjZUZpbmlzaGVk
KHJlc291cmNlKTsKKyAgICB9CisKKyAgICB2b2lkIHJlc291cmNlRmFpbGVkKFdlYktpdFdlYlJl
c291cmNlKiwgR0Vycm9yKikKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7
CisgICAgfQorCisgICAgQ1N0cmluZyBtX2FjdGl2ZVVSSTsKKworcHJpdmF0ZToKKyAgICB2b2lk
IGNoZWNrQWN0aXZlVVJJKGNvbnN0IGNoYXIqIHVyaSkKKyAgICB7CisgICAgICAgIEFTU0VSVF9D
TVBfQ1NUUklORyhtX2FjdGl2ZVVSSSwgPT0sIGtTZXJ2ZXItPmdldFVSSUZvclBhdGgodXJpKSk7
CisgICAgfQorfTsKKworc3RhdGljIHZvaWQgdGVzdFdlYlJlc291cmNlQWN0aXZlVVJJKFJlc291
cmNlVVJJVHJhY2tpbmdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxv
YWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3JlZGlyZWN0ZWQtY3NzLmh0bWwiKS5kYXRh
KCkpOworICAgIHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlzaGVkKCk7Cit9CisKK3N0
YXRpYyB2b2lkIHRlc3RXZWJSZXNvdXJjZUdldERhdGEoUmVzb3VyY2VzVGVzdCogdGVzdCwgZ2Nv
bnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgo
Ii8iKS5kYXRhKCkpOworICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSA0IGluc3RlYWQgb2Yg
MywgYnV0IHdlIGRvbid0IGdldCB0aGUgY3NzIGltYWdlIHJlc291cmNlCisgICAgLy8gZHVlIHRv
IGJ1ZyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg1MTAuCisgICAg
dGVzdC0+d2FpdFVudGlsUmVzb3VyY2VzTG9hZGVkKDMpOworCisgICAgV2ViS2l0V2ViUmVzb3Vy
Y2UqIHJlc291cmNlID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX3Jlc291cmNlKHRlc3QtPm1f
d2ViVmlldyk7CisgICAgZ19hc3NlcnQocmVzb3VyY2UpOworICAgIHRlc3QtPmNoZWNrUmVzb3Vy
Y2VEYXRhKHJlc291cmNlKTsKKworICAgIEdMaXN0KiBzdWJyZXNvdXJjZXMgPSB0ZXN0LT5zdWJy
ZXNvdXJjZXMoKTsKKyAgICBmb3IgKEdMaXN0KiBpdGVtID0gc3VicmVzb3VyY2VzOyBpdGVtOyBp
dGVtID0gZ19saXN0X25leHQoaXRlbSkpCisgICAgICAgIHRlc3QtPmNoZWNrUmVzb3VyY2VEYXRh
KFdFQktJVF9XRUJfUkVTT1VSQ0UoaXRlbS0+ZGF0YSkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0
V2ViVmlld1Jlc291cmNlc0hpc3RvcnlDYWNoZShTaW5nbGVSZXNvdXJjZUxvYWRUZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQoreworICAgIENTdHJpbmcgamF2YXNjcmlwdFVSSSA9IGtTZXJ2ZXIt
PmdldFVSSUZvclBhdGgoIi9qYXZhc2NyaXB0Lmh0bWwiKTsKKyAgICB0ZXN0LT5sb2FkVVJJKGph
dmFzY3JpcHRVUkkuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5p
c2hlZCgpOworICAgIFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSA9IHdlYmtpdF93ZWJfdmll
d19nZXRfbWFpbl9yZXNvdXJjZSh0ZXN0LT5tX3dlYlZpZXcpOworICAgIGdfYXNzZXJ0KHJlc291
cmNlKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJpKHJl
c291cmNlKSwgPT0sIGphdmFzY3JpcHRVUkkuZGF0YSgpKTsKKworICAgIENTdHJpbmcgc2ltcGxl
U3R5bGVDU1NVUkkgPSBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvc2ltcGxlLXN0eWxlLWNzcy5o
dG1sIik7CisgICAgdGVzdC0+bG9hZFVSSShzaW1wbGVTdHlsZUNTU1VSSS5kYXRhKCkpOworICAg
IHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlzaGVkKCk7CisgICAgcmVzb3VyY2UgPSB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2UodGVzdC0+bV93ZWJWaWV3KTsKKyAgICBn
X2Fzc2VydChyZXNvdXJjZSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfcmVzb3Vy
Y2VfZ2V0X3VyaShyZXNvdXJjZSksID09LCBzaW1wbGVTdHlsZUNTU1VSSS5kYXRhKCkpOworCisg
ICAgdGVzdC0+Z29CYWNrKCk7CisgICAgdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNo
ZWQoKTsKKyAgICByZXNvdXJjZSA9IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9yZXNvdXJjZSh0
ZXN0LT5tX3dlYlZpZXcpOworICAgIGdfYXNzZXJ0KHJlc291cmNlKTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIod2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJpKHJlc291cmNlKSwgPT0sIGphdmFzY3Jp
cHRVUkkuZGF0YSgpKTsKKworICAgIHRlc3QtPmdvRm9yd2FyZCgpOworICAgIHRlc3QtPndhaXRV
bnRpbFJlc291cmNlTG9hZEZpbmlzaGVkKCk7CisgICAgcmVzb3VyY2UgPSB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X21haW5fcmVzb3VyY2UodGVzdC0+bV93ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChyZXNv
dXJjZSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaShy
ZXNvdXJjZSksID09LCBzaW1wbGVTdHlsZUNTU1VSSS5kYXRhKCkpOworfQorCitjbGFzcyBTZW5k
UmVxdWVzdFRlc3Q6IHB1YmxpYyBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0IHsKK3B1YmxpYzoKKyAg
ICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFNlbmRSZXF1ZXN0VGVzdCk7CisKKyAgICB2b2lkIHJl
c291cmNlU2VudFJlcXVlc3QoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBXZWJLaXRVUklS
ZXF1ZXN0KiByZXF1ZXN0LCBXZWJLaXRVUklSZXNwb25zZSogcmVkaXJlY3RSZXNwb25zZSkKKyAg
ICB7CisgICAgICAgIGlmIChyZXNvdXJjZSAhPSBtX3Jlc291cmNlKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIGlmIChyZWRpcmVjdFJlc3BvbnNlKQorICAgICAgICAgICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfdXJpKHJlcXVlc3QpLCA9PSwgbV9leHBl
Y3RlZE5ld1Jlc291cmNlVVJJQWZ0ZXJSZWRpcmVjdGlvbi5kYXRhKCkpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3VyaV9yZXF1ZXN0X2dldF91cmko
cmVxdWVzdCksID09LCBtX2V4cGVjdGVkTmV3UmVzb3VyY2VVUkkuZGF0YSgpKTsKKyAgICAgICAg
Z19hc3NlcnRfY21wc3RyKHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfdXJpKHJlcXVlc3QpLCA9PSwg
d2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJpKHJlc291cmNlKSk7CisKKyAgICAgICAgU2luZ2xl
UmVzb3VyY2VMb2FkVGVzdDo6cmVzb3VyY2VTZW50UmVxdWVzdChyZXNvdXJjZSwgcmVxdWVzdCwg
cmVkaXJlY3RSZXNwb25zZSk7CisgICAgfQorCisgICAgdm9pZCByZXNvdXJjZUZhaWxlZChXZWJL
aXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIEdFcnJvciogZXJyb3IpCisgICAgeworICAgICAgICBp
ZiAocmVzb3VyY2UgIT0gbV9yZXNvdXJjZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJpKHJlc291cmNlKSwg
PT0sIG1fZXhwZWN0ZWRDYW5jZWxsZWRSZXNvdXJjZVVSSS5kYXRhKCkpOworICAgICAgICBnX2Fz
c2VydF9lcnJvcihlcnJvciwgV0VCS0lUX05FVFdPUktfRVJST1IsIFdFQktJVF9ORVRXT1JLX0VS
Uk9SX0NBTkNFTExFRCk7CisKKyAgICAgICAgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6cmVzb3Vy
Y2VGYWlsZWQocmVzb3VyY2UsIGVycm9yKTsKKyAgICB9CisKKyAgICB2b2lkIHNldEV4cGVjdGVk
TmV3UmVzb3VyY2VVUkkoY29uc3QgQ1N0cmluZyYgdXJpKQorICAgIHsKKyAgICAgICAgbV9leHBl
Y3RlZE5ld1Jlc291cmNlVVJJID0gdXJpOworICAgIH0KKworICAgIHZvaWQgc2V0RXhwZWN0ZWRD
YW5jZWxsZWRSZXNvdXJjZVVSSShjb25zdCBDU3RyaW5nJiB1cmkpCisgICAgeworICAgICAgICBt
X2V4cGVjdGVkQ2FuY2VsbGVkUmVzb3VyY2VVUkkgPSB1cmk7CisgICAgfQorCisgICAgdm9pZCBz
ZXRFeHBlY3RlZE5ld1Jlc291cmNlVVJJQWZ0ZXJSZWRpcmVjdGlvbihjb25zdCBDU3RyaW5nJiB1
cmkpCisgICAgeworICAgICAgICBtX2V4cGVjdGVkTmV3UmVzb3VyY2VVUklBZnRlclJlZGlyZWN0
aW9uID0gdXJpOworICAgIH0KKworICAgIENTdHJpbmcgbV9leHBlY3RlZE5ld1Jlc291cmNlVVJJ
OworICAgIENTdHJpbmcgbV9leHBlY3RlZENhbmNlbGxlZFJlc291cmNlVVJJOworICAgIENTdHJp
bmcgbV9leHBlY3RlZE5ld1Jlc291cmNlVVJJQWZ0ZXJSZWRpcmVjdGlvbjsKK307CisKK3N0YXRp
YyB2b2lkIHRlc3RXZWJSZXNvdXJjZVNlbmRSZXF1ZXN0KFNlbmRSZXF1ZXN0VGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5zZXRFeHBlY3RlZE5ld1Jlc291cmNlVVJJKGtT
ZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9qYXZhc2NyaXB0LmpzIikpOworICAgIHRlc3QtPmxvYWRV
Ukkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgicmVsYXRpdmUtamF2YXNjcmlwdC5odG1sIikuZGF0
YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZCgpOworICAgIGdf
YXNzZXJ0KHRlc3QtPm1fcmVzb3VyY2UpOworCisgICAgVmVjdG9yPFNpbmdsZVJlc291cmNlTG9h
ZFRlc3Q6OkxvYWRFdmVudHM+JiBldmVudHMgPSB0ZXN0LT5tX2xvYWRFdmVudHM7CisgICAgZ19h
c3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCA1KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
ZXZlbnRzWzBdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6U3RhcnRlZCk7CisgICAgZ19h
c3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlNlbnRS
ZXF1ZXN0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgU2luZ2xlUmVzb3Vy
Y2VMb2FkVGVzdDo6UmVjZWl2ZWRSZXNwb25zZSk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50
c1szXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlJlY2VpdmVkRGF0YSk7CisgICAgZ19h
c3NlcnRfY21waW50KGV2ZW50c1s0XSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OkZpbmlz
aGVkKTsKKyAgICBldmVudHMuY2xlYXIoKTsKKworICAgIC8vIENhbmNlbCByZXF1ZXN0LgorICAg
IHRlc3QtPnNldEV4cGVjdGVkQ2FuY2VsbGVkUmVzb3VyY2VVUkkoa1NlcnZlci0+Z2V0VVJJRm9y
UGF0aCgiL2NhbmNlbC10aGlzLmpzIikpOworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0
VVJJRm9yUGF0aCgiL3Jlc291cmNlLXRvLWNhbmNlbC5odG1sIikuZGF0YSgpKTsKKyAgICB0ZXN0
LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1f
cmVzb3VyY2UpOworCisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAzKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVz
dDo6U3RhcnRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIFNpbmdsZVJl
c291cmNlTG9hZFRlc3Q6OkZhaWxlZCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwg
PT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OkZpbmlzaGVkKTsKKyAgICBldmVudHMuY2xlYXIo
KTsKKworICAgIC8vIFVSSSBjaGFuZ2VkIGFmdGVyIGEgcmVkaXJlY3QuCisgICAgdGVzdC0+c2V0
RXhwZWN0ZWROZXdSZXNvdXJjZVVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvcmVkaXJlY3Rl
ZC5qcyIpKTsKKyAgICB0ZXN0LT5zZXRFeHBlY3RlZE5ld1Jlc291cmNlVVJJQWZ0ZXJSZWRpcmVj
dGlvbihrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvamF2YXNjcmlwdC5qcyIpKTsKKyAgICB0ZXN0
LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoInJlZGlyZWN0ZWQtamF2YXNjcmlwdC5o
dG1sIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZCgp
OworICAgIGdfYXNzZXJ0KHRlc3QtPm1fcmVzb3VyY2UpOworCisgICAgZ19hc3NlcnRfY21waW50
KGV2ZW50cy5zaXplKCksID09LCA2KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9
PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6U3RhcnRlZCk7CisgICAgZ19hc3NlcnRfY21waW50
KGV2ZW50c1sxXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlNlbnRSZXF1ZXN0KTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6
UmVkaXJlY3RlZCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1szXSwgPT0sIFNpbmdsZVJl
c291cmNlTG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOworICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHNbNF0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpSZWNlaXZlZERhdGEpOworICAg
IGdfYXNzZXJ0X2NtcGludChldmVudHNbNV0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpG
aW5pc2hlZCk7CisgICAgZXZlbnRzLmNsZWFyKCk7CisKKyAgICAvLyBDYW5jZWwgYWZ0ZXIgYSBy
ZWRpcmVjdC4KKyAgICB0ZXN0LT5zZXRFeHBlY3RlZE5ld1Jlc291cmNlVVJJKGtTZXJ2ZXItPmdl
dFVSSUZvclBhdGgoIi9yZWRpcmVjdGVkLXRvLWNhbmNlbC5qcyIpKTsKKyAgICB0ZXN0LT5zZXRF
eHBlY3RlZENhbmNlbGxlZFJlc291cmNlVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9yZWRp
cmVjdGVkLXRvLWNhbmNlbC5qcyIpKTsKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVS
SUZvclBhdGgoIi9yZWRpcmVjdGVkLXRvLWNhbmNlbC5odG1sIikuZGF0YSgpKTsKKyAgICB0ZXN0
LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1f
cmVzb3VyY2UpOworCisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCA0KTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVz
dDo6U3RhcnRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIFNpbmdsZVJl
c291cmNlTG9hZFRlc3Q6OlNlbnRSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRz
WzJdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6RmFpbGVkKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoZXZlbnRzWzNdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6RmluaXNoZWQpOwor
ICAgIGV2ZW50cy5jbGVhcigpOworfQorCitzdGF0aWMgdm9pZCBhZGRDYWNoZUhUVFBIZWFkZXJz
VG9SZXNwb25zZShTb3VwTWVzc2FnZSogbWVzc2FnZSkKK3sKKyAgICAvLyBUaGUgYWN0dWFsIGRh
dGUgZG9lc24ndCByZWFsbHkgbWF0dGVyLgorICAgIFNvdXBEYXRlKiBzb3VwRGF0ZSA9IHNvdXBf
ZGF0ZV9uZXdfZnJvbV9ub3coMCk7CisgICAgR093blB0cjxjaGFyPiBkYXRlKHNvdXBfZGF0ZV90
b19zdHJpbmcoc291cERhdGUsIFNPVVBfREFURV9IVFRQKSk7CisgICAgc291cF9tZXNzYWdlX2hl
YWRlcnNfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJMYXN0LU1vZGlmaWVkIiwg
ZGF0ZS5nZXQoKSk7CisgICAgc291cF9kYXRlX2ZyZWUoc291cERhdGUpOworICAgIHNvdXBfbWVz
c2FnZV9oZWFkZXJzX2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiQ2FjaGUtY29u
dHJvbCIsICJwdWJsaWMsIG1heC1hZ2U9MzE1MzYwMDAiKTsKKyAgICBzb3VwRGF0ZSA9IHNvdXBf
ZGF0ZV9uZXdfZnJvbV9ub3coMzYwMCk7CisgICAgZGF0ZS5zZXQoc291cF9kYXRlX3RvX3N0cmlu
Zyhzb3VwRGF0ZSwgU09VUF9EQVRFX0hUVFApKTsKKyAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19h
cHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIkV4cGlyZXMiLCBkYXRlLmdldCgpKTsK
KyAgICBzb3VwX2RhdGVfZnJlZShzb3VwRGF0ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHNlcnZlckNh
bGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IGNo
YXIqIHBhdGgsIEdIYXNoVGFibGUqLCBTb3VwQ2xpZW50Q29udGV4dCosIGdwb2ludGVyKQorewor
ICAgIGlmIChtZXNzYWdlLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7CisgICAgICAgIHNv
dXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9JTVBMRU1FTlRF
RCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1
cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7CisKKyAgICBpZiAoc291cF9tZXNzYWdlX2hlYWRl
cnNfZ2V0X29uZShtZXNzYWdlLT5yZXF1ZXN0X2hlYWRlcnMsICJJZi1Nb2RpZmllZC1TaW5jZSIp
KSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVT
X05PVF9NT0RJRklFRCk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3Nh
Z2UtPnJlc3BvbnNlX2JvZHkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGdf
c3RyX2VxdWFsKHBhdGgsICIvIikpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5k
KG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywga0luZGV4SHRtbCwg
c3RybGVuKGtJbmRleEh0bWwpKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIv
amF2YXNjcmlwdC5odG1sIikpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGphdmFzY3Jp
cHRIdG1sID0gIjxodG1sPjxoZWFkPjxzY3JpcHQgbGFuZ3VhZ2U9J2phdmFzY3JpcHQnIHNyYz0n
L2phdmFzY3JpcHQuanMnPjwvc2NyaXB0PjwvaGVhZD48Ym9keT48L2JvZHk+PC9odG1sPiI7Cisg
ICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBT
T1VQX01FTU9SWV9TVEFUSUMsIGphdmFzY3JpcHRIdG1sLCBzdHJsZW4oamF2YXNjcmlwdEh0bWwp
KTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvaW1hZ2UuaHRtbCIpKSB7Cisg
ICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBpbWFnZUhUTUwgPSAiPGh0bWw+PGJvZHk+PGltZyBz
cmM9Jy9ibGFuay5pY28nPjwvaW1nPjwvYm9keT48L2h0bWw+IjsKKyAgICAgICAgc291cF9tZXNz
YWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJ
QywgaW1hZ2VIVE1MLCBzdHJsZW4oaW1hZ2VIVE1MKSk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9l
cXVhbChwYXRoLCAiL3JlZGlyZWN0ZWQtY3NzLmh0bWwiKSkgeworICAgICAgICBzdGF0aWMgY29u
c3QgY2hhciogcmVkaXJlY3RlZENTU0h0bWwgPSAiPGh0bWw+PGhlYWQ+PGxpbmsgcmVsPSdzdHls
ZXNoZWV0JyBocmVmPScvcmVkaXJlY3RlZC5jc3MnIHR5cGU9J3RleHQvY3NzJz48L2hlYWQ+PGJv
ZHk+PC9odG1sPiI7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5y
ZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIHJlZGlyZWN0ZWRDU1NIdG1sLCBzdHJs
ZW4ocmVkaXJlY3RlZENTU0h0bWwpKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgs
ICIvaW52YWxpZC1jc3MuaHRtbCIpKSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBpbnZh
bGlkQ1NTSHRtbCA9ICI8aHRtbD48aGVhZD48bGluayByZWw9J3N0eWxlc2hlZXQnIGhyZWY9Jy9p
bnZhbGlkLmNzcycgdHlwZT0ndGV4dC9jc3MnPjwvaGVhZD48Ym9keT48L2h0bWw+IjsKKyAgICAg
ICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBf
TUVNT1JZX1NUQVRJQywgaW52YWxpZENTU0h0bWwsIHN0cmxlbihpbnZhbGlkQ1NTSHRtbCkpOwor
ICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9zaW1wbGUtc3R5bGUtY3NzLmh0bWwi
KSkgeworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogc2ltcGxlU3R5bGVDU1NIdG1sID0gIjxo
dG1sPjxoZWFkPjxsaW5rIHJlbD0nc3R5bGVzaGVldCcgaHJlZj0nL3NpbXBsZS1zdHlsZS5jc3Mn
IHR5cGU9J3RleHQvY3NzJz48L2hlYWQ+PGJvZHk+PC9odG1sPiI7CisgICAgICAgIHNvdXBfbWVz
c2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFU
SUMsIHNpbXBsZVN0eWxlQ1NTSHRtbCwgc3RybGVuKHNpbXBsZVN0eWxlQ1NTSHRtbCkpOworICAg
IH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9zdHlsZS5jc3MiKSkgeworICAgICAgICBz
b3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1P
UllfU1RBVElDLCBrU3R5bGVDU1MsIHN0cmxlbihrU3R5bGVDU1MpKTsKKyAgICAgICAgYWRkQ2Fj
aGVIVFRQSGVhZGVyc1RvUmVzcG9uc2UobWVzc2FnZSk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9o
ZWFkZXJzX2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiQ29udGVudC1UeXBlIiwg
InRleHQvY3NzIik7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2phdmFzY3Jp
cHQuanMiKSkgeworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVz
cG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBrSmF2YXNjcmlwdCwgc3RybGVuKGtKYXZh
c2NyaXB0KSk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChtZXNzYWdlLT5y
ZXNwb25zZV9oZWFkZXJzLCAiQ29udGVudC1UeXBlIiwgInRleHQvamF2YXNjcmlwdCIpOworICAg
ICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVy
cywgIkNvbnRlbnQtRGlzcG9zaXRpb24iLCAiZmlsZW5hbWU9SmF2YVNjcmlwdC5qcyIpOworICAg
IH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9yZWxhdGl2ZS1qYXZhc2NyaXB0Lmh0bWwi
KSkgeworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogamF2YXNjcmlwdFJlbGF0aXZlSFRNTCA9
ICI8aHRtbD48aGVhZD48c2NyaXB0IGxhbmd1YWdlPSdqYXZhc2NyaXB0JyBzcmM9J3JlbW92ZS10
aGlzL2phdmFzY3JpcHQuanMnPjwvc2NyaXB0PjwvaGVhZD48Ym9keT48L2JvZHk+PC9odG1sPiI7
CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5
LCBTT1VQX01FTU9SWV9TVEFUSUMsIGphdmFzY3JpcHRSZWxhdGl2ZUhUTUwsIHN0cmxlbihqYXZh
c2NyaXB0UmVsYXRpdmVIVE1MKSk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAi
L3Jlc291cmNlLXRvLWNhbmNlbC5odG1sIikpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIq
IHJlc291cmNlVG9DYW5jZWxIVE1MID0gIjxodG1sPjxoZWFkPjxzY3JpcHQgbGFuZ3VhZ2U9J2ph
dmFzY3JpcHQnIHNyYz0nY2FuY2VsLXRoaXMuanMnPjwvc2NyaXB0PjwvaGVhZD48Ym9keT48L2Jv
ZHk+PC9odG1sPiI7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5y
ZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIHJlc291cmNlVG9DYW5jZWxIVE1MLCBz
dHJsZW4ocmVzb3VyY2VUb0NhbmNlbEhUTUwpKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFs
KHBhdGgsICIvcmVkaXJlY3RlZC1qYXZhc2NyaXB0Lmh0bWwiKSkgeworICAgICAgICBzdGF0aWMg
Y29uc3QgY2hhciogamF2YXNjcmlwdFJlbGF0aXZlSFRNTCA9ICI8aHRtbD48aGVhZD48c2NyaXB0
IGxhbmd1YWdlPSdqYXZhc2NyaXB0JyBzcmM9Jy9yZWRpcmVjdGVkLmpzJz48L3NjcmlwdD48L2hl
YWQ+PGJvZHk+PC9ib2R5PjwvaHRtbD4iOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBl
bmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBqYXZhc2NyaXB0
UmVsYXRpdmVIVE1MLCBzdHJsZW4oamF2YXNjcmlwdFJlbGF0aXZlSFRNTCkpOworICAgIH0gZWxz
ZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9yZWRpcmVjdGVkLXRvLWNhbmNlbC5odG1sIikpIHsK
KyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGphdmFzY3JpcHRSZWxhdGl2ZUhUTUwgPSAiPGh0
bWw+PGhlYWQ+PHNjcmlwdCBsYW5ndWFnZT0namF2YXNjcmlwdCcgc3JjPScvcmVkaXJlY3RlZC10
by1jYW5jZWwuanMnPjwvc2NyaXB0PjwvaGVhZD48Ym9keT48L2JvZHk+PC9odG1sPiI7CisgICAg
ICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQ
X01FTU9SWV9TVEFUSUMsIGphdmFzY3JpcHRSZWxhdGl2ZUhUTUwsIHN0cmxlbihqYXZhc2NyaXB0
UmVsYXRpdmVIVE1MKSk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2JsYW5r
LmljbyIpKSB7CisgICAgICAgIEdPd25QdHI8Y2hhcj4gZmlsZVBhdGgoZ19idWlsZF9maWxlbmFt
ZShUZXN0OjpnZXRXZWJLaXQxVGVzdFJlc291Y2VzRGlyKCkuZGF0YSgpLCBwYXRoLCBOVUxMKSk7
CisgICAgICAgIGNoYXIqIGNvbnRlbnRzOworICAgICAgICBnc2l6ZSBjb250ZW50c0xlbmd0aDsK
KyAgICAgICAgZ19maWxlX2dldF9jb250ZW50cyhmaWxlUGF0aC5nZXQoKSwgJmNvbnRlbnRzLCAm
Y29udGVudHNMZW5ndGgsIDApOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVz
c2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgY29udGVudHMsIGNvbnRlbnRz
TGVuZ3RoKTsKKyAgICAgICAgYWRkQ2FjaGVIVFRQSGVhZGVyc1RvUmVzcG9uc2UobWVzc2FnZSk7
CisgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9o
ZWFkZXJzLCAiQ29udGVudC1UeXBlIiwgImltYWdlL3ZuZC5taWNyb3NvZnQuaWNvbiIpOworICAg
IH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9zaW1wbGUtc3R5bGUuY3NzIikpIHsKKyAg
ICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHNpbXBsZUNTUyA9CisgICAgICAgICAgICAiYm9keSB7
IgorICAgICAgICAgICAgIiAgICBtYXJnaW46IDBweDsiCisgICAgICAgICAgICAiICAgIHBhZGRp
bmc6IDBweDsiCisgICAgICAgICAgICAifSI7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2Fw
cGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIHNpbXBsZUNT
Uywgc3RybGVuKHNpbXBsZUNTUykpOworICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBl
bmQobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIkNvbnRlbnQtVHlwZSIsICJ0ZXh0L2NzcyIp
OworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9yZWRpcmVjdGVkLmNzcyIpKSB7
CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX01P
VkVEX1BFUk1BTkVOVExZKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1l
c3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJMb2NhdGlvbiIsICIvc2ltcGxlLXN0eWxlLmNzcyIp
OworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9yZWRpcmVjdGVkLmpzIikpIHsK
KyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTU9W
RURfUEVSTUFORU5UTFkpOworICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobWVz
c2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIkxvY2F0aW9uIiwgIi9yZW1vdmUtdGhpcy9qYXZhc2Ny
aXB0LmpzIik7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3JlZGlyZWN0ZWQt
dG8tY2FuY2VsLmpzIikpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2Fn
ZSwgU09VUF9TVEFUVVNfTU9WRURfUEVSTUFORU5UTFkpOworICAgICAgICBzb3VwX21lc3NhZ2Vf
aGVhZGVyc19hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIkxvY2F0aW9uIiwgIi9j
YW5jZWwtdGhpcy5qcyIpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9pbnZh
bGlkLmNzcyIpKQorICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQ
X1NUQVRVU19DQU5UX0NPTk5FQ1QpOworICAgIGVsc2UKKyAgICAgICAgc291cF9tZXNzYWdlX3Nl
dF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0ZPVU5EKTsKKyAgICBzb3VwX21lc3Nh
Z2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKK30KKwordm9pZCBiZWZv
cmVBbGwoKQoreworICAgIGtTZXJ2ZXIgPSBuZXcgV2ViS2l0VGVzdFNlcnZlcigpOworICAgIGtT
ZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFjayk7CisKKyAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0
X3dlYl9leHRlbnNpb25zX2RpcmVjdG9yeSh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQo
KSwgV0VCS0lUX1RFU1RfV0VCX0VYVEVOU0lPTlNfRElSKTsKKworICAgIFJlc291cmNlc1Rlc3Q6
OmFkZCgiV2ViS2l0V2ViVmlldyIsICJyZXNvdXJjZXMiLCB0ZXN0V2ViVmlld1Jlc291cmNlcyk7
CisgICAgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6YWRkKCJXZWJLaXRXZWJSZXNvdXJjZSIsICJs
b2FkaW5nIiwgdGVzdFdlYlJlc291cmNlTG9hZGluZyk7CisgICAgU2luZ2xlUmVzb3VyY2VMb2Fk
VGVzdDo6YWRkKCJXZWJLaXRXZWJSZXNvdXJjZSIsICJyZXNwb25zZSIsIHRlc3RXZWJSZXNvdXJj
ZVJlc3BvbnNlKTsKKyAgICBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjphZGQoIldlYktpdFdlYlJl
c291cmNlIiwgIm1pbWUtdHlwZSIsIHRlc3RXZWJSZXNvdXJjZU1pbWVUeXBlKTsKKyAgICBTaW5n
bGVSZXNvdXJjZUxvYWRUZXN0OjphZGQoIldlYktpdFdlYlJlc291cmNlIiwgInN1Z2dlc3RlZC1m
aWxlbmFtZSIsIHRlc3RXZWJSZXNvdXJjZVN1Z2dlc3RlZEZpbGVuYW1lKTsKKyAgICBSZXNvdXJj
ZVVSSVRyYWNraW5nVGVzdDo6YWRkKCJXZWJLaXRXZWJSZXNvdXJjZSIsICJhY3RpdmUtdXJpIiwg
dGVzdFdlYlJlc291cmNlQWN0aXZlVVJJKTsKKyAgICBSZXNvdXJjZXNUZXN0OjphZGQoIldlYktp
dFdlYlJlc291cmNlIiwgImdldC1kYXRhIiwgdGVzdFdlYlJlc291cmNlR2V0RGF0YSk7CisgICAg
U2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImhpc3RvcnktY2Fj
aGUiLCB0ZXN0V2ViVmlld1Jlc291cmNlc0hpc3RvcnlDYWNoZSk7CisgICAgU2VuZFJlcXVlc3RU
ZXN0OjphZGQoIldlYktpdFdlYlBhZ2UiLCAic2VuZC1yZXF1ZXN0IiwgdGVzdFdlYlJlc291cmNl
U2VuZFJlcXVlc3QpOworfQorCit2b2lkIGFmdGVyQWxsKCkKK3sKKyAgICBkZWxldGUga1NlcnZl
cjsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9U
ZXN0U1NMLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0U1NM
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzE4MGM1Ci0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RTU0wu
Y3BwCkBAIC0wLDAgKzEsMjkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBT
LkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkxvYWRUcmFja2luZ1Rlc3QuaCIK
KyNpbmNsdWRlICJXZWJLaXRUZXN0U2VydmVyLmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCitz
dGF0aWMgV2ViS2l0VGVzdFNlcnZlcioga0h0dHBzU2VydmVyOworc3RhdGljIFdlYktpdFRlc3RT
ZXJ2ZXIqIGtIdHRwU2VydmVyOworCitzdGF0aWMgY29uc3QgY2hhciogaW5kZXhIVE1MID0gIjxo
dG1sPjxib2R5PlRlc3RpbmcgV2ViS2l0MkdUSysgU1NMPC9ib2R5PjwvaHRtbGw+IjsKK3N0YXRp
YyBjb25zdCBjaGFyKiBpbnNlY3VyZUNvbnRlbnRIVE1MID0gIjxodG1sPjxzY3JpcHQgc3JjPVwi
JXNcIj48L3NjcmlwdD48Ym9keT48cD5UZXh0ICsgaW1hZ2UgPGltZyBzcmM9XCIlc1wiIGFsaWdu
PVwicmlnaHRcIi8+PC9wPjwvYm9keT48L2h0bWw+IjsKK3N0YXRpYyBjb25zdCBjaGFyIFRMU0V4
cGVjdGVkU3VjY2Vzc1RpdGxlW10gPSAiV2ViS2l0Mkd0aysgVExTIHBlcm1pc3Npb24gdGVzdCI7
CitzdGF0aWMgY29uc3QgY2hhciBUTFNTdWNjZXNzSFRNTFN0cmluZ1tdID0gIjxodG1sPjxoZWFk
Pjx0aXRsZT5XZWJLaXQyR3RrKyBUTFMgcGVybWlzc2lvbiB0ZXN0PC90aXRsZT48L2hlYWQ+PGJv
ZHk+PC9ib2R5PjwvaHRtbD4iOworCitjbGFzcyBTU0xUZXN0OiBwdWJsaWMgTG9hZFRyYWNraW5n
VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShTU0xUZXN0KTsKKwor
ICAgIFNTTFRlc3QoKQorICAgICAgICA6IG1fdGxzRXJyb3JzKHN0YXRpY19jYXN0PEdUbHNDZXJ0
aWZpY2F0ZUZsYWdzPigwKSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHByb3Zp
c2lvbmFsTG9hZEZhaWxlZChjb25zdCBnY2hhciogZmFpbGluZ1VSSSwgR0Vycm9yKiBlcnJvcikK
KyAgICB7CisgICAgICAgIGdfYXNzZXJ0X2Vycm9yKGVycm9yLCBTT1VQX0hUVFBfRVJST1IsIFNP
VVBfU1RBVFVTX1NTTF9GQUlMRUQpOworICAgICAgICBMb2FkVHJhY2tpbmdUZXN0Ojpwcm92aXNp
b25hbExvYWRGYWlsZWQoZmFpbGluZ1VSSSwgZXJyb3IpOworICAgIH0KKworICAgIHZpcnR1YWwg
dm9pZCBsb2FkQ29tbWl0dGVkKCkKKyAgICB7CisgICAgICAgIEdUbHNDZXJ0aWZpY2F0ZSogY2Vy
dGlmaWNhdGUgPSAwOworICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3Rsc19pbmZvKG1fd2Vi
VmlldywgJmNlcnRpZmljYXRlLCAmbV90bHNFcnJvcnMpOworICAgICAgICBtX2NlcnRpZmljYXRl
ID0gY2VydGlmaWNhdGU7CisgICAgICAgIExvYWRUcmFja2luZ1Rlc3Q6OmxvYWRDb21taXR0ZWQo
KTsKKyAgICB9CisKKyAgICB2b2lkIHdhaXRVbnRpbExvYWRGaW5pc2hlZCgpCisgICAgeworICAg
ICAgICBtX2NlcnRpZmljYXRlID0gMDsKKyAgICAgICAgbV90bHNFcnJvcnMgPSBzdGF0aWNfY2Fz
dDxHVGxzQ2VydGlmaWNhdGVGbGFncz4oMCk7CisgICAgICAgIExvYWRUcmFja2luZ1Rlc3Q6Ondh
aXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIH0KKworICAgIEdSZWZQdHI8R1Rsc0NlcnRpZmlj
YXRlPiBtX2NlcnRpZmljYXRlOworICAgIEdUbHNDZXJ0aWZpY2F0ZUZsYWdzIG1fdGxzRXJyb3Jz
OworfTsKKworc3RhdGljIHZvaWQgdGVzdFNTTChTU0xUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVy
KQoreworICAgIHRlc3QtPmxvYWRVUkkoa0h0dHBzU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIiku
ZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2Vy
dCh0ZXN0LT5tX2NlcnRpZmljYXRlKTsKKyAgICAvLyBXZSBhbHdheXMgZXhwZWN0IGVycm9ycyBi
ZWNhdXNlIHdlIGFyZSB1c2luZyBhIHNlbGYtc2lnbmVkIGNlcnRpZmljYXRlLAorICAgIC8vIGJ1
dCBvbmx5IEdfVExTX0NFUlRJRklDQVRFX1VOS05PV05fQ0EgZmxhZ3Mgc2hvdWxkIGJlIHByZXNl
bnQuCisgICAgZ19hc3NlcnQodGVzdC0+bV90bHNFcnJvcnMpOworICAgIGdfYXNzZXJ0X2NtcHVp
bnQodGVzdC0+bV90bHNFcnJvcnMsID09LCBHX1RMU19DRVJUSUZJQ0FURV9VTktOT1dOX0NBKTsK
KworICAgIC8vIE5vbiBIVFRQUyBsb2FkcyBzaG91bGRuJ3QgaGF2ZSBhIGNlcnRpZmljYXRlIG5v
ciBlcnJvcnMuCisgICAgdGVzdC0+bG9hZEh0bWwoaW5kZXhIVE1MLCAwKTsKKyAgICB0ZXN0LT53
YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydCghdGVzdC0+bV9jZXJ0aWZpY2F0
ZSk7CisgICAgZ19hc3NlcnQoIXRlc3QtPm1fdGxzRXJyb3JzKTsKK30KKworY2xhc3MgSW5zZWN1
cmVDb250ZW50VGVzdDogcHVibGljIFdlYlZpZXdUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dM
SUJfVEVTVF9GSVhUVVJFKEluc2VjdXJlQ29udGVudFRlc3QpOworCisgICAgSW5zZWN1cmVDb250
ZW50VGVzdCgpCisgICAgICAgIDogbV9pbnNlY3VyZUNvbnRlbnRSdW4oZmFsc2UpCisgICAgICAg
ICwgbV9pbnNlY3VyZUNvbnRlbnREaXNwbGF5ZWQoZmFsc2UpCisgICAgeworICAgICAgICBnX3Np
Z25hbF9jb25uZWN0KG1fd2ViVmlldywgImluc2VjdXJlLWNvbnRlbnQtZGV0ZWN0ZWQiLCBHX0NB
TExCQUNLKGluc2VjdXJlQ29udGVudERldGVjdGVkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgdm9pZCBpbnNlY3VyZUNvbnRlbnREZXRlY3RlZENhbGxiYWNrKFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcsIFdlYktpdEluc2VjdXJlQ29udGVudEV2ZW50IGV2ZW50LCBJbnNlY3Vy
ZUNvbnRlbnRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQod2ViVmlldyA9PSB0
ZXN0LT5tX3dlYlZpZXcpOworCisgICAgICAgIGlmIChldmVudCA9PSBXRUJLSVRfSU5TRUNVUkVf
Q09OVEVOVF9SVU4pCisgICAgICAgICAgICB0ZXN0LT5tX2luc2VjdXJlQ29udGVudFJ1biA9IHRy
dWU7CisKKyAgICAgICAgaWYgKGV2ZW50ID09IFdFQktJVF9JTlNFQ1VSRV9DT05URU5UX0RJU1BM
QVlFRCkKKyAgICAgICAgICAgIHRlc3QtPm1faW5zZWN1cmVDb250ZW50RGlzcGxheWVkID0gdHJ1
ZTsKKyAgICB9CisKKyAgICBib29sIG1faW5zZWN1cmVDb250ZW50UnVuOworICAgIGJvb2wgbV9p
bnNlY3VyZUNvbnRlbnREaXNwbGF5ZWQ7Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0SW5zZWN1cmVD
b250ZW50KEluc2VjdXJlQ29udGVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAg
dGVzdC0+bG9hZFVSSShrSHR0cHNTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbnNlY3VyZS1jb250
ZW50LyIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAg
ICBnX2Fzc2VydCh0ZXN0LT5tX2luc2VjdXJlQ29udGVudFJ1bik7CisgICAgZ19hc3NlcnQodGVz
dC0+bV9pbnNlY3VyZUNvbnRlbnREaXNwbGF5ZWQpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0VExT
RXJyb3JzUG9saWN5KFNTTFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgV2ViS2l0
V2ViQ29udGV4dCogY29udGV4dCA9IHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dCh0ZXN0LT5t
X3dlYlZpZXcpOworICAgIC8vIFRMUyBlcnJvcnMgYXJlIGlnbm9yZWQgYnkgZGVmYXVsdC4KKyAg
ICBnX2Fzc2VydCh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3Rsc19lcnJvcnNfcG9saWN5KGNvbnRl
eHQpID09IFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9JR05PUkUpOworICAgIHRlc3QtPmxvYWRV
Ukkoa0h0dHBzU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53
YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydCghdGVzdC0+bV9sb2FkRmFpbGVk
KTsKKworICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfdGxzX2Vycm9yc19wb2xpY3koY29udGV4
dCwgV0VCS0lUX1RMU19FUlJPUlNfUE9MSUNZX0ZBSUwpOworICAgIHRlc3QtPmxvYWRVUkkoa0h0
dHBzU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50
aWxMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX2xvYWRGYWlsZWQpOworICAg
IGdfYXNzZXJ0KHRlc3QtPm1fbG9hZEV2ZW50cy5jb250YWlucyhMb2FkVHJhY2tpbmdUZXN0OjpQ
cm92aXNpb25hbExvYWRGYWlsZWQpKTsKKyAgICBnX2Fzc2VydCghdGVzdC0+bV9sb2FkRXZlbnRz
LmNvbnRhaW5zKExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRDb21taXR0ZWQpKTsKK30KKworY2xhc3Mg
VExTRXJyb3JzVGVzdDogcHVibGljIFNTTFRlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9U
RVNUX0ZJWFRVUkUoVExTRXJyb3JzVGVzdCk7CisKKyAgICBUTFNFcnJvcnNUZXN0KCkKKyAgICB7
CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAibG9hZC1mYWlsZWQtd2l0aC10
bHMtZXJyb3JzIiwgR19DQUxMQkFDSyhydW5Mb2FkRmFpbGVkV2l0aFRMU0Vycm9yc0NhbGxiYWNr
KSwgdGhpcyk7CisgICAgfQorCisgICAgflRMU0Vycm9yc1Rlc3QoKQorICAgIHsKKyAgICAgICAg
Z19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fd2ViVmlldywgR19TSUdOQUxf
TUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7CisgICAgICAgIGlmIChtX2NlcnRpZmljYXRl
SW5mbykKKyAgICAgICAgICAgIHdlYmtpdF9jZXJ0aWZpY2F0ZV9pbmZvX2ZyZWUobV9jZXJ0aWZp
Y2F0ZUluZm8pOworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBydW5Mb2FkRmFpbGVkV2l0
aFRMU0Vycm9yc0NhbGxiYWNrKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRDZXJ0aWZpY2F0ZUluZm8q
IGluZm8sIGNvbnN0IGNoYXIqIGhvc3QsIFRMU0Vycm9yc1Rlc3QqIHRlc3QpCisgICAgeworICAg
ICAgICB0ZXN0LT5ydW5Mb2FkRmFpbGVkV2l0aFRMU0Vycm9ycyhpbmZvLCBob3N0KTsKKyAgICAg
ICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgdm9pZCBydW5Mb2FkRmFpbGVkV2l0aFRMU0Vy
cm9ycyhXZWJLaXRDZXJ0aWZpY2F0ZUluZm8qIGluZm8sIGNvbnN0IGNoYXIqIGhvc3QpCisgICAg
eworICAgICAgICBpZiAobV9jZXJ0aWZpY2F0ZUluZm8pCisgICAgICAgICAgICB3ZWJraXRfY2Vy
dGlmaWNhdGVfaW5mb19mcmVlKG1fY2VydGlmaWNhdGVJbmZvKTsKKyAgICAgICAgbV9jZXJ0aWZp
Y2F0ZUluZm8gPSB3ZWJraXRfY2VydGlmaWNhdGVfaW5mb19jb3B5KGluZm8pOworICAgICAgICBt
X2hvc3Quc2V0KGdfc3RyZHVwKGhvc3QpKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX21h
aW5Mb29wKTsKKyAgICB9CisKKyAgICB2b2lkIHdhaXRVbnRpbExvYWRGYWlsZWRXaXRoVExTRXJy
b3JzKCkKKyAgICB7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICB9
CisKKyAgICBXZWJLaXRDZXJ0aWZpY2F0ZUluZm8qIGNlcnRpZmljYXRlSW5mbygpCisgICAgewor
ICAgICAgICByZXR1cm4gbV9jZXJ0aWZpY2F0ZUluZm87CisgICAgfQorCisgICAgY29uc3QgY2hh
ciogaG9zdCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9ob3N0LmdldCgpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBXZWJLaXRDZXJ0aWZpY2F0ZUluZm8qIG1fY2VydGlmaWNhdGVJbmZvOwor
ICAgIEdPd25QdHI8Y2hhcj4gbV9ob3N0OworfTsKKworc3RhdGljIHZvaWQgdGVzdExvYWRGYWls
ZWRXaXRoVExTRXJyb3JzKFRMU0Vycm9yc1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7Cisg
ICAgV2ViS2l0V2ViQ29udGV4dCogY29udGV4dCA9IHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4
dCh0ZXN0LT5tX3dlYlZpZXcpOworICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfdGxzX2Vycm9y
c19wb2xpY3koY29udGV4dCwgV0VCS0lUX1RMU19FUlJPUlNfUE9MSUNZX0ZBSUwpOworCisgICAg
Ly8gVGhlIGxvYWQtZmFpbGVkLXdpdGgtdGxzLWVycm9ycyBzaWduYWwgc2hvdWxkIGJlIGVtaXR0
ZWQgd2hlbiB0aGVyZSBpcyBhIFRMUyBmYWlsdXJlLgorICAgIHRlc3QtPmxvYWRVUkkoa0h0dHBz
U2VydmVyLT5nZXRVUklGb3JQYXRoKCIvdGVzdC10bHMvIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53
YWl0VW50aWxMb2FkRmFpbGVkV2l0aFRMU0Vycm9ycygpOworICAgIC8vIFRlc3QgdGhlIFdlYktp
dENlcnRpZmljYXRlSW5mbyBBUEkuCisgICAgZ19hc3NlcnQoR19JU19UTFNfQ0VSVElGSUNBVEUo
d2Via2l0X2NlcnRpZmljYXRlX2luZm9fZ2V0X3Rsc19jZXJ0aWZpY2F0ZSh0ZXN0LT5jZXJ0aWZp
Y2F0ZUluZm8oKSkpKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9jZXJ0aWZpY2F0ZV9p
bmZvX2dldF90bHNfZXJyb3JzKHRlc3QtPmNlcnRpZmljYXRlSW5mbygpKSwgPT0sIEdfVExTX0NF
UlRJRklDQVRFX1VOS05PV05fQ0EpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXN0LT5ob3N0KCks
ID09LCBzb3VwX3VyaV9nZXRfaG9zdChrSHR0cHNTZXJ2ZXItPmJhc2VVUkkoKSkpOworICAgIGdf
YXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0
OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9s
b2FkRXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKKworICAg
IC8vIFRlc3QgYWxsb3dpbmcgYW4gZXhjZXB0aW9uIGZvciB0aGlzIGNlcnRpZmljYXRlIG9uIHRo
aXMgaG9zdC4KKyAgICB3ZWJraXRfd2ViX2NvbnRleHRfYWxsb3dfdGxzX2NlcnRpZmljYXRlX2Zv
cl9ob3N0KGNvbnRleHQsIHRlc3QtPmNlcnRpZmljYXRlSW5mbygpLCB0ZXN0LT5ob3N0KCkpOwor
ICAgIC8vIFRoZSBwYWdlIHNob3VsZCBub3cgbG9hZCB3aXRob3V0IGVycm9ycy4KKyAgICB0ZXN0
LT5sb2FkVVJJKGtIdHRwc1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3Rlc3QtdGxzLyIpLmRhdGEo
KSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydF9j
bXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlz
aW9uYWxMb2FkU3RhcnRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50
c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRDb21taXR0ZWQpOworICAgIGdfYXNzZXJ0
X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMl0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2Fk
RmluaXNoZWQpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3RpdGxl
KHRlc3QtPm1fd2ViVmlldyksID09LCBUTFNFeHBlY3RlZFN1Y2Nlc3NUaXRsZSk7Cit9CisKKwor
c3RhdGljIHZvaWQgaHR0cHNTZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBzZXJ2ZXIsIFNvdXBN
ZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiwgU291cENsaWVu
dENvbnRleHQqLCBncG9pbnRlcikKK3sKKyAgICBpZiAobWVzc2FnZS0+bWV0aG9kICE9IFNPVVBf
TUVUSE9EX0dFVCkgeworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBT
T1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvIikpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3Nl
dF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOworICAgICAgICBzb3VwX21lc3NhZ2Vf
Ym9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBp
bmRleEhUTUwsIHN0cmxlbihpbmRleEhUTUwpKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlf
Y29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9l
cXVhbChwYXRoLCAiL2luc2VjdXJlLWNvbnRlbnQvIikpIHsKKyAgICAgICAgR093blB0cjxjaGFy
PiByZXNwb25zZUhUTUwoZ19zdHJkdXBfcHJpbnRmKGluc2VjdXJlQ29udGVudEhUTUwsIGtIdHRw
U2VydmVyLT5nZXRVUklGb3JQYXRoKCIvdGVzdC1zY3JpcHQiKS5kYXRhKCksIGtIdHRwU2VydmVy
LT5nZXRVUklGb3JQYXRoKCIvdGVzdC1pbWFnZSIpLmRhdGEoKSkpOworICAgICAgICBzb3VwX21l
c3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfQ09Q
WSwgcmVzcG9uc2VIVE1MLmdldCgpLCBzdHJsZW4ocmVzcG9uc2VIVE1MLmdldCgpKSk7CisgICAg
ICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKKyAg
ICAgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7
CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3Rlc3QtdGxzLyIpKSB7CisgICAg
ICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKKyAg
ICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNP
VVBfTUVNT1JZX1NUQVRJQywgVExTU3VjY2Vzc0hUTUxTdHJpbmcsIHN0cmxlbihUTFNTdWNjZXNz
SFRNTFN0cmluZykpOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdl
LT5yZXNwb25zZV9ib2R5KTsKKyAgICB9IGVsc2UKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9z
dGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0ZPVU5EKTsKK30KKworc3RhdGljIHZvaWQg
aHR0cFNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1lc3Nh
Z2UsIGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqLCBTb3VwQ2xpZW50Q29udGV4dCosIGdw
b2ludGVyKQoreworICAgIGlmIChtZXNzYWdlLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7
CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05P
VF9JTVBMRU1FTlRFRCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZ19zdHJf
ZXF1YWwocGF0aCwgIi90ZXN0LXNjcmlwdCIpKSB7CisgICAgICAgIEdPd25QdHI8Y2hhcj4gcGF0
aFRvRmlsZShnX2J1aWxkX2ZpbGVuYW1lKFRlc3Q6OmdldFJlc291cmNlc0RpcigpLmRhdGEoKSwg
ImxpbmstdGl0bGUuanMiLCBOVUxMKSk7CisgICAgICAgIGNoYXIqIGNvbnRlbnRzOworICAgICAg
ICBnc2l6ZSBsZW5ndGg7CisgICAgICAgIGdfZmlsZV9nZXRfY29udGVudHMocGF0aFRvRmlsZS5n
ZXQoKSwgJmNvbnRlbnRzLCAmbGVuZ3RoLCAwKTsKKworICAgICAgICBzb3VwX21lc3NhZ2VfYm9k
eV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgY29udGVu
dHMsIGxlbmd0aCk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNP
VVBfU1RBVFVTX09LKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2Fn
ZS0+cmVzcG9uc2VfYm9keSk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3Rl
c3QtaW1hZ2UiKSkgeworICAgICAgICBHT3duUHRyPGNoYXI+IHBhdGhUb0ZpbGUoZ19idWlsZF9m
aWxlbmFtZShUZXN0OjpnZXRXZWJLaXQxVGVzdFJlc291Y2VzRGlyKCkuZGF0YSgpLCAiYmxhbmsu
aWNvIiwgTlVMTCkpOworICAgICAgICBjaGFyKiBjb250ZW50czsKKyAgICAgICAgZ3NpemUgbGVu
Z3RoOworICAgICAgICBnX2ZpbGVfZ2V0X2NvbnRlbnRzKHBhdGhUb0ZpbGUuZ2V0KCksICZjb250
ZW50cywgJmxlbmd0aCwgMCk7CisKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1l
c3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGNvbnRlbnRzLCBsZW5ndGgp
OworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19P
Syk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNl
X2JvZHkpOworICAgIH0gZWxzZQorICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNz
YWdlLCBTT1VQX1NUQVRVU19OT1RfRk9VTkQpOworfQorCit2b2lkIGJlZm9yZUFsbCgpCit7Cisg
ICAga0h0dHBzU2VydmVyID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIoV2ViS2l0VGVzdFNlcnZlcjo6
U2VydmVySFRUUFMpOworICAgIGtIdHRwc1NlcnZlci0+cnVuKGh0dHBzU2VydmVyQ2FsbGJhY2sp
OworCisgICAga0h0dHBTZXJ2ZXIgPSBuZXcgV2ViS2l0VGVzdFNlcnZlcihXZWJLaXRUZXN0U2Vy
dmVyOjpTZXJ2ZXJIVFRQKTsKKyAgICBrSHR0cFNlcnZlci0+cnVuKGh0dHBTZXJ2ZXJDYWxsYmFj
ayk7CisKKyAgICBTU0xUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAic3NsIiwgdGVzdFNTTCk7
CisgICAgSW5zZWN1cmVDb250ZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImluc2VjdXJl
LWNvbnRlbnQiLCB0ZXN0SW5zZWN1cmVDb250ZW50KTsKKyAgICAvLyBJbiB0aGlzIGNhc2UgdGhl
IG9yZGVyIG9mIHRoZSB0ZXN0cyBkb2VzIG1hdHRlciBiZWNhdXNlIHRscy1lcnJvcnMtcG9saWN5
IHRlc3RzIHRoZSBkZWZhdWx0IHBvbGljeSwKKyAgICAvLyBhbmQgZXhwZWN0cyB0aGF0IG5vIGV4
Y2VwdGlvbiB3aWxsIGhhdmUgYmVlbiBhZGRlZCBmb3IgdGhpcyBjZXJ0aWZpY2F0ZSBhbmQgaG9z
dCBwYWlyIGFzIGlzCisgICAgLy8gZG9uZSBpbiB0aGUgdGxzLXBlcm1pc3Npb24tcmVxdWVzdCB0
ZXN0LgorICAgIFNTTFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJ0bHMtZXJyb3JzLXBvbGlj
eSIsIHRlc3RUTFNFcnJvcnNQb2xpY3kpOworICAgIFRMU0Vycm9yc1Rlc3Q6OmFkZCgiV2ViS2l0
V2ViVmlldyIsICJsb2FkLWZhaWxlZC13aXRoLXRscy1lcnJvcnMiLCB0ZXN0TG9hZEZhaWxlZFdp
dGhUTFNFcnJvcnMpOworfQorCit2b2lkIGFmdGVyQWxsKCkKK3sKKyAgICBkZWxldGUga0h0dHBz
U2VydmVyOworICAgIGRlbGV0ZSBrSHR0cFNlcnZlcjsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0VUlDbGllbnQuY3BwIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RVSUNsaWVudC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMzMGQ2ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0VUlDbGllbnQuY3BwCkBAIC0wLDAg
KzEsNjc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKKyNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdIYXNoLmg+CisKK3N0YXRpYyBjb25zdCBjaGFyKiBrQWxlcnREaWFsb2dNZXNz
YWdlID0gIldlYktpdEdUSysgYWxlcnQgZGlhbG9nIG1lc3NhZ2UiOworc3RhdGljIGNvbnN0IGNo
YXIqIGtDb25maXJtRGlhbG9nTWVzc2FnZSA9ICJXZWJLaXRHVEsrIGNvbmZpcm0gZGlhbG9nIG1l
c3NhZ2UiOworc3RhdGljIGNvbnN0IGNoYXIqIGtQcm9tcHREaWFsb2dNZXNzYWdlID0gIldlYktp
dEdUSysgcHJvbXB0IGRpYWxvZyBtZXNzYWdlIjsKK3N0YXRpYyBjb25zdCBjaGFyKiBrUHJvbXB0
RGlhbG9nUmV0dXJuZWRUZXh0ID0gIldlYktpdEdUSysgcHJvbXB0IGRpYWxvZyByZXR1cm5lZCB0
ZXh0IjsKKworY2xhc3MgVUlDbGllbnRUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3QgeworcHVibGlj
OgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoVUlDbGllbnRUZXN0KTsKKworICAgIGVudW0g
V2ViVmlld0V2ZW50cyB7CisgICAgICAgIENyZWF0ZSwKKyAgICAgICAgUmVhZHlUb1Nob3csCisg
ICAgICAgIFJ1bkFzTW9kYWwsCisgICAgICAgIENsb3NlCisgICAgfTsKKworICAgIGNsYXNzIFdp
bmRvd1Byb3BlcnRpZXMgeworICAgIHB1YmxpYzoKKyAgICAgICAgV2luZG93UHJvcGVydGllcygp
CisgICAgICAgICAgICA6IG1faXNOdWxsKHRydWUpCisgICAgICAgICAgICAsIG1fdG9vbGJhclZp
c2libGUodHJ1ZSkKKyAgICAgICAgICAgICwgbV9zdGF0dXNiYXJWaXNpYmxlKHRydWUpCisgICAg
ICAgICAgICAsIG1fc2Nyb2xsYmFyc1Zpc2libGUodHJ1ZSkKKyAgICAgICAgICAgICwgbV9tZW51
YmFyVmlzaWJsZSh0cnVlKQorICAgICAgICAgICAgLCBtX2xvY2F0aW9uYmFyVmlzaWJsZSh0cnVl
KQorICAgICAgICAgICAgLCBtX3Jlc2l6YWJsZSh0cnVlKQorICAgICAgICAgICAgLCBtX2Z1bGxz
Y3JlZW4oZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lbXNldCgmbV9nZW9tZXRyeSwg
MCwgc2l6ZW9mKEdka1JlY3RhbmdsZSkpOworICAgICAgICB9CisKKyAgICAgICAgV2luZG93UHJv
cGVydGllcyhXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzKiB3aW5kb3dQcm9wZXJ0aWVzKQorICAgICAg
ICAgICAgOiBtX2lzTnVsbChmYWxzZSkKKyAgICAgICAgICAgICwgbV90b29sYmFyVmlzaWJsZSh3
ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X3Rvb2xiYXJfdmlzaWJsZSh3aW5kb3dQcm9wZXJ0
aWVzKSkKKyAgICAgICAgICAgICwgbV9zdGF0dXNiYXJWaXNpYmxlKHdlYmtpdF93aW5kb3dfcHJv
cGVydGllc19nZXRfc3RhdHVzYmFyX3Zpc2libGUod2luZG93UHJvcGVydGllcykpCisgICAgICAg
ICAgICAsIG1fc2Nyb2xsYmFyc1Zpc2libGUod2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF9z
Y3JvbGxiYXJzX3Zpc2libGUod2luZG93UHJvcGVydGllcykpCisgICAgICAgICAgICAsIG1fbWVu
dWJhclZpc2libGUod2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF9tZW51YmFyX3Zpc2libGUo
d2luZG93UHJvcGVydGllcykpCisgICAgICAgICAgICAsIG1fbG9jYXRpb25iYXJWaXNpYmxlKHdl
YmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRfbG9jYXRpb25iYXJfdmlzaWJsZSh3aW5kb3dQcm9w
ZXJ0aWVzKSkKKyAgICAgICAgICAgICwgbV9yZXNpemFibGUod2Via2l0X3dpbmRvd19wcm9wZXJ0
aWVzX2dldF9yZXNpemFibGUod2luZG93UHJvcGVydGllcykpCisgICAgICAgICAgICAsIG1fZnVs
bHNjcmVlbih3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X2Z1bGxzY3JlZW4od2luZG93UHJv
cGVydGllcykpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdlYmtpdF93aW5kb3dfcHJvcGVydGll
c19nZXRfZ2VvbWV0cnkod2luZG93UHJvcGVydGllcywgJm1fZ2VvbWV0cnkpOworICAgICAgICB9
CisKKyAgICAgICAgV2luZG93UHJvcGVydGllcyhHZGtSZWN0YW5nbGUqIGdlb21ldHJ5LCBib29s
IHRvb2xiYXJWaXNpYmxlLCBib29sIHN0YXR1c2JhclZpc2libGUsIGJvb2wgc2Nyb2xsYmFyc1Zp
c2libGUsIGJvb2wgbWVudWJhclZpc2libGUsIGJvb2wgbG9jYXRpb25iYXJWaXNpYmxlLCBib29s
IHJlc2l6YWJsZSwgYm9vbCBmdWxsc2NyZWVuKQorICAgICAgICAgICAgOiBtX2lzTnVsbChmYWxz
ZSkKKyAgICAgICAgICAgICwgbV9nZW9tZXRyeSgqZ2VvbWV0cnkpCisgICAgICAgICAgICAsIG1f
dG9vbGJhclZpc2libGUodG9vbGJhclZpc2libGUpCisgICAgICAgICAgICAsIG1fc3RhdHVzYmFy
VmlzaWJsZShzdGF0dXNiYXJWaXNpYmxlKQorICAgICAgICAgICAgLCBtX3Njcm9sbGJhcnNWaXNp
YmxlKHNjcm9sbGJhcnNWaXNpYmxlKQorICAgICAgICAgICAgLCBtX21lbnViYXJWaXNpYmxlKG1l
bnViYXJWaXNpYmxlKQorICAgICAgICAgICAgLCBtX2xvY2F0aW9uYmFyVmlzaWJsZShsb2NhdGlv
bmJhclZpc2libGUpCisgICAgICAgICAgICAsIG1fcmVzaXphYmxlKHJlc2l6YWJsZSkKKyAgICAg
ICAgICAgICwgbV9mdWxsc2NyZWVuKGZ1bGxzY3JlZW4pCisgICAgICAgIHsKKyAgICAgICAgfQor
CisgICAgICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV9pc051bGw7IH0KKworICAg
ICAgICB2b2lkIGFzc2VydEVxdWFsKGNvbnN0IFdpbmRvd1Byb3BlcnRpZXMmIG90aGVyKSBjb25z
dAorICAgICAgICB7CisgICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQobV9nZW9tZXRyeS54LCA9
PSwgb3RoZXIubV9nZW9tZXRyeS54KTsKKyAgICAgICAgICAgIGdfYXNzZXJ0X2NtcGludChtX2dl
b21ldHJ5LnksID09LCBvdGhlci5tX2dlb21ldHJ5LnkpOworICAgICAgICAgICAgZ19hc3NlcnRf
Y21waW50KG1fZ2VvbWV0cnkud2lkdGgsID09LCBvdGhlci5tX2dlb21ldHJ5LndpZHRoKTsKKyAg
ICAgICAgICAgIGdfYXNzZXJ0X2NtcGludChtX2dlb21ldHJ5LmhlaWdodCwgPT0sIG90aGVyLm1f
Z2VvbWV0cnkuaGVpZ2h0KTsKKyAgICAgICAgICAgIGdfYXNzZXJ0X2NtcGludChzdGF0aWNfY2Fz
dDxpbnQ+KG1fdG9vbGJhclZpc2libGUpLCA9PSwgc3RhdGljX2Nhc3Q8aW50PihvdGhlci5tX3Rv
b2xiYXJWaXNpYmxlKSk7CisgICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQoc3RhdGljX2Nhc3Q8
aW50PihtX3N0YXR1c2JhclZpc2libGUpLCA9PSwgc3RhdGljX2Nhc3Q8aW50PihvdGhlci5tX3N0
YXR1c2JhclZpc2libGUpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0X2NtcGludChzdGF0aWNfY2Fz
dDxpbnQ+KG1fc2Nyb2xsYmFyc1Zpc2libGUpLCA9PSwgc3RhdGljX2Nhc3Q8aW50PihvdGhlci5t
X3Njcm9sbGJhcnNWaXNpYmxlKSk7CisgICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQoc3RhdGlj
X2Nhc3Q8aW50PihtX21lbnViYXJWaXNpYmxlKSwgPT0sIHN0YXRpY19jYXN0PGludD4ob3RoZXIu
bV9tZW51YmFyVmlzaWJsZSkpOworICAgICAgICAgICAgZ19hc3NlcnRfY21waW50KHN0YXRpY19j
YXN0PGludD4obV9sb2NhdGlvbmJhclZpc2libGUpLCA9PSwgc3RhdGljX2Nhc3Q8aW50PihvdGhl
ci5tX2xvY2F0aW9uYmFyVmlzaWJsZSkpOworICAgICAgICAgICAgZ19hc3NlcnRfY21waW50KHN0
YXRpY19jYXN0PGludD4obV9yZXNpemFibGUpLCA9PSwgc3RhdGljX2Nhc3Q8aW50PihvdGhlci5t
X3Jlc2l6YWJsZSkpOworICAgICAgICAgICAgZ19hc3NlcnRfY21waW50KHN0YXRpY19jYXN0PGlu
dD4obV9mdWxsc2NyZWVuKSwgPT0sIHN0YXRpY19jYXN0PGludD4ob3RoZXIubV9mdWxsc2NyZWVu
KSk7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIGJvb2wgbV9pc051bGw7CisK
KyAgICAgICAgR2RrUmVjdGFuZ2xlIG1fZ2VvbWV0cnk7CisKKyAgICAgICAgYm9vbCBtX3Rvb2xi
YXJWaXNpYmxlOworICAgICAgICBib29sIG1fc3RhdHVzYmFyVmlzaWJsZTsKKyAgICAgICAgYm9v
bCBtX3Njcm9sbGJhcnNWaXNpYmxlOworICAgICAgICBib29sIG1fbWVudWJhclZpc2libGU7Cisg
ICAgICAgIGJvb2wgbV9sb2NhdGlvbmJhclZpc2libGU7CisKKyAgICAgICAgYm9vbCBtX3Jlc2l6
YWJsZTsKKyAgICAgICAgYm9vbCBtX2Z1bGxzY3JlZW47CisgICAgfTsKKworICAgIHN0YXRpYyB2
b2lkIHdpbmRvd1Byb3BlcnRpZXNOb3RpZnlDYWxsYmFjayhHT2JqZWN0KiwgR1BhcmFtU3BlYyog
cGFyYW1TcGVjLCBVSUNsaWVudFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT5tX3dp
bmRvd1Byb3BlcnRpZXNDaGFuZ2VkLmFkZChnX3BhcmFtX3NwZWNfZ2V0X25hbWUocGFyYW1TcGVj
KSk7CisgICAgfQorCisgICAgc3RhdGljIEd0a1dpZGdldCogdmlld0NyZWF0ZUNhbGxiYWNrKFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcsIFVJQ2xpZW50VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAg
IHJldHVybiB0ZXN0LT52aWV3Q3JlYXRlKHdlYlZpZXcpOworICAgIH0KKworICAgIHN0YXRpYyB2
b2lkIHZpZXdSZWFkeVRvU2hvd0NhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFVJQ2xp
ZW50VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPnZpZXdSZWFkeVRvU2hvdyh3ZWJW
aWV3KTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCB2aWV3Q2xvc2VDYWxsYmFjayhXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3LCBVSUNsaWVudFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0
LT52aWV3Q2xvc2Uod2ViVmlldyk7CisgICAgfQorCisgICAgdm9pZCBzY3JpcHRBbGVydChXZWJL
aXRTY3JpcHREaWFsb2cqIGRpYWxvZykKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV9zY3JpcHRE
aWFsb2dUeXBlKSB7CisgICAgICAgIGNhc2UgV0VCS0lUX1NDUklQVF9ESUFMT0dfQUxFUlQ6Cisg
ICAgICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NjcmlwdF9kaWFsb2dfZ2V0X21lc3Nh
Z2UoZGlhbG9nKSwgPT0sIGtBbGVydERpYWxvZ01lc3NhZ2UpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgV0VCS0lUX1NDUklQVF9ESUFMT0dfQ09ORklSTToKKyAgICAgICAgICAg
IGdfYXNzZXJ0KG1fc2NyaXB0RGlhbG9nQ29uZmlybWVkKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0
X2NtcHN0cih3ZWJraXRfc2NyaXB0X2RpYWxvZ19nZXRfbWVzc2FnZShkaWFsb2cpLCA9PSwgImNv
bmZpcm1lZCIpOworCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXRUJLSVRfU0NS
SVBUX0RJQUxPR19QUk9NUFQ6CisgICAgICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3Nj
cmlwdF9kaWFsb2dfZ2V0X21lc3NhZ2UoZGlhbG9nKSwgPT0sIGtQcm9tcHREaWFsb2dSZXR1cm5l
ZFRleHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBnX21haW5f
bG9vcF9xdWl0KG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIHZvaWQgc2NyaXB0Q29uZmlybShX
ZWJLaXRTY3JpcHREaWFsb2cqIGRpYWxvZykKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0
cih3ZWJraXRfc2NyaXB0X2RpYWxvZ19nZXRfbWVzc2FnZShkaWFsb2cpLCA9PSwga0NvbmZpcm1E
aWFsb2dNZXNzYWdlKTsKKyAgICAgICAgbV9zY3JpcHREaWFsb2dDb25maXJtZWQgPSAhbV9zY3Jp
cHREaWFsb2dDb25maXJtZWQ7CisgICAgICAgIHdlYmtpdF9zY3JpcHRfZGlhbG9nX2NvbmZpcm1f
c2V0X2NvbmZpcm1lZChkaWFsb2csIG1fc2NyaXB0RGlhbG9nQ29uZmlybWVkKTsKKyAgICB9CisK
KyAgICB2b2lkIHNjcmlwdFByb21wdChXZWJLaXRTY3JpcHREaWFsb2cqIGRpYWxvZykKKyAgICB7
CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2NyaXB0X2RpYWxvZ19nZXRfbWVzc2Fn
ZShkaWFsb2cpLCA9PSwga1Byb21wdERpYWxvZ01lc3NhZ2UpOworICAgICAgICBnX2Fzc2VydF9j
bXBzdHIod2Via2l0X3NjcmlwdF9kaWFsb2dfcHJvbXB0X2dldF9kZWZhdWx0X3RleHQoZGlhbG9n
KSwgPT0sICJkZWZhdWx0Iik7CisgICAgICAgIHdlYmtpdF9zY3JpcHRfZGlhbG9nX3Byb21wdF9z
ZXRfdGV4dChkaWFsb2csIGtQcm9tcHREaWFsb2dSZXR1cm5lZFRleHQpOworICAgIH0KKworICAg
IHN0YXRpYyBnYm9vbGVhbiBzY3JpcHREaWFsb2coV2ViS2l0V2ViVmlldyosIFdlYktpdFNjcmlw
dERpYWxvZyogZGlhbG9nLCBVSUNsaWVudFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICBzd2l0
Y2ggKHdlYmtpdF9zY3JpcHRfZGlhbG9nX2dldF9kaWFsb2dfdHlwZShkaWFsb2cpKSB7CisgICAg
ICAgIGNhc2UgV0VCS0lUX1NDUklQVF9ESUFMT0dfQUxFUlQ6CisgICAgICAgICAgICB0ZXN0LT5z
Y3JpcHRBbGVydChkaWFsb2cpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0VC
S0lUX1NDUklQVF9ESUFMT0dfQ09ORklSTToKKyAgICAgICAgICAgIHRlc3QtPnNjcmlwdENvbmZp
cm0oZGlhbG9nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdFQktJVF9TQ1JJ
UFRfRElBTE9HX1BST01QVDoKKyAgICAgICAgICAgIHRlc3QtPnNjcmlwdFByb21wdChkaWFsb2cp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gVFJVRTsK
KyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBtb3VzZVRhcmdldENoYW5nZWQoV2ViS2l0V2ViVmll
dyosIFdlYktpdEhpdFRlc3RSZXN1bHQqIGhpdFRlc3RSZXN1bHQsIGd1aW50IG1vZGlmaWVycywg
VUlDbGllbnRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX0hJ
VF9URVNUX1JFU1VMVChoaXRUZXN0UmVzdWx0KSk7CisgICAgICAgIHRlc3QtPmFzc2VydE9iamVj
dElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QoaGl0VGVzdFJlc3VsdCkpOworCisg
ICAgICAgIHRlc3QtPm1fbW91c2VUYXJnZXRIaXRUZXN0UmVzdWx0ID0gaGl0VGVzdFJlc3VsdDsK
KyAgICAgICAgdGVzdC0+bV9tb3VzZVRhcmdldE1vZGlmaWVycyA9IG1vZGlmaWVyczsKKyAgICAg
ICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgZ2Jvb2xlYW4gcGVybWlzc2lvblJlcXVlc3RlZChXZWJLaXRXZWJWaWV3KiwgV2ViS2l0UGVy
bWlzc2lvblJlcXVlc3QqIHJlcXVlc3QsIFVJQ2xpZW50VGVzdCogdGVzdCkKKyAgICB7CisgICAg
ICAgIGdfYXNzZXJ0KFdFQktJVF9JU19QRVJNSVNTSU9OX1JFUVVFU1QocmVxdWVzdCkpOworICAg
ICAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNU
KHJlcXVlc3QpKTsKKworICAgICAgICBpZiAodGVzdC0+bV9hbGxvd1Blcm1pc3Npb25SZXF1ZXN0
cykKKyAgICAgICAgICAgIHdlYmtpdF9wZXJtaXNzaW9uX3JlcXVlc3RfYWxsb3cocmVxdWVzdCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHdlYmtpdF9wZXJtaXNzaW9uX3JlcXVlc3RfZGVu
eShyZXF1ZXN0KTsKKworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICBVSUNsaWVu
dFRlc3QoKQorICAgICAgICA6IG1fc2NyaXB0RGlhbG9nVHlwZShXRUJLSVRfU0NSSVBUX0RJQUxP
R19BTEVSVCkKKyAgICAgICAgLCBtX3NjcmlwdERpYWxvZ0NvbmZpcm1lZCh0cnVlKQorICAgICAg
ICAsIG1fYWxsb3dQZXJtaXNzaW9uUmVxdWVzdHMoZmFsc2UpCisgICAgICAgICwgbV9tb3VzZVRh
cmdldE1vZGlmaWVycygwKQorICAgIHsKKyAgICAgICAgd2Via2l0X3NldHRpbmdzX3NldF9qYXZh
c2NyaXB0X2Nhbl9vcGVuX3dpbmRvd3NfYXV0b21hdGljYWxseSh3ZWJraXRfd2ViX3ZpZXdfZ2V0
X3NldHRpbmdzKG1fd2ViVmlldyksIFRSVUUpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1f
d2ViVmlldywgImNyZWF0ZSIsIEdfQ0FMTEJBQ0sodmlld0NyZWF0ZUNhbGxiYWNrKSwgdGhpcyk7
CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAic2NyaXB0LWRpYWxvZyIsIEdf
Q0FMTEJBQ0soc2NyaXB0RGlhbG9nKSwgdGhpcyk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
bV93ZWJWaWV3LCAibW91c2UtdGFyZ2V0LWNoYW5nZWQiLCBHX0NBTExCQUNLKG1vdXNlVGFyZ2V0
Q2hhbmdlZCksIHRoaXMpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgInBl
cm1pc3Npb24tcmVxdWVzdCIsIEdfQ0FMTEJBQ0socGVybWlzc2lvblJlcXVlc3RlZCksIHRoaXMp
OworICAgIH0KKworICAgIH5VSUNsaWVudFRlc3QoKQorICAgIHsKKyAgICAgICAgZ19zaWduYWxf
aGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fd2ViVmlldywgR19TSUdOQUxfTUFUQ0hfREFU
QSwgMCwgMCwgMCwgMCwgdGhpcyk7CisgICAgfQorCisgICAgdm9pZCB3YWl0VW50aWxNYWluTG9v
cEZpbmlzaGVzKCkKKyAgICB7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsK
KyAgICB9CisKKyAgICB2b2lkIHNldEV4cGVjdGVkV2luZG93UHJvcGVydGllcyhjb25zdCBXaW5k
b3dQcm9wZXJ0aWVzJiB3aW5kb3dQcm9wZXJ0aWVzKQorICAgIHsKKyAgICAgICAgbV93aW5kb3dQ
cm9wZXJ0aWVzID0gd2luZG93UHJvcGVydGllczsKKyAgICB9CisKKyAgICBXZWJLaXRIaXRUZXN0
UmVzdWx0KiBtb3ZlTW91c2VBbmRXYWl0VW50aWxNb3VzZVRhcmdldENoYW5nZWQoaW50IHgsIGlu
dCB5LCB1bnNpZ25lZCBtb3VzZU1vZGlmaWVycyA9IDApCisgICAgeworICAgICAgICBtb3VzZU1v
dmVUbyh4LCB5LCBtb3VzZU1vZGlmaWVycyk7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21h
aW5Mb29wKTsKKyAgICAgICAgcmV0dXJuIG1fbW91c2VUYXJnZXRIaXRUZXN0UmVzdWx0LmdldCgp
OworICAgIH0KKworICAgIHZpcnR1YWwgR3RrV2lkZ2V0KiB2aWV3Q3JlYXRlKFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcpCisgICAgeworICAgICAgICBnX2Fzc2VydCh3ZWJWaWV3ID09IG1fd2ViVmll
dyk7CisKKyAgICAgICAgR3RrV2lkZ2V0KiBuZXdXZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X25l
d193aXRoX2NvbnRleHQod2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KHdlYlZpZXcpKTsKKyAg
ICAgICAgZ19vYmplY3RfcmVmX3NpbmsobmV3V2ViVmlldyk7CisKKyAgICAgICAgbV93ZWJWaWV3
RXZlbnRzLmFwcGVuZChDcmVhdGUpOworCisgICAgICAgIFdlYktpdFdpbmRvd1Byb3BlcnRpZXMq
IHdpbmRvd1Byb3BlcnRpZXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9wZXJ0aWVz
KFdFQktJVF9XRUJfVklFVyhuZXdXZWJWaWV3KSk7CisgICAgICAgIGdfYXNzZXJ0KHdpbmRvd1By
b3BlcnRpZXMpOworICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVz
KEdfT0JKRUNUKHdpbmRvd1Byb3BlcnRpZXMpKTsKKyAgICAgICAgbV93aW5kb3dQcm9wZXJ0aWVz
Q2hhbmdlZC5jbGVhcigpOworCisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2luZG93UHJvcGVy
dGllcywgIm5vdGlmeSIsIEdfQ0FMTEJBQ0sod2luZG93UHJvcGVydGllc05vdGlmeUNhbGxiYWNr
KSwgdGhpcyk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobmV3V2ViVmlldywgInJlYWR5LXRv
LXNob3ciLCBHX0NBTExCQUNLKHZpZXdSZWFkeVRvU2hvd0NhbGxiYWNrKSwgdGhpcyk7CisgICAg
ICAgIGdfc2lnbmFsX2Nvbm5lY3QobmV3V2ViVmlldywgImNsb3NlIiwgR19DQUxMQkFDSyh2aWV3
Q2xvc2VDYWxsYmFjayksIHRoaXMpOworCisgICAgICAgIHJldHVybiBuZXdXZWJWaWV3OworICAg
IH0KKworICAgIHZpcnR1YWwgdm9pZCB2aWV3UmVhZHlUb1Nob3coV2ViS2l0V2ViVmlldyogd2Vi
VmlldykKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KHdlYlZpZXcgIT0gbV93ZWJWaWV3KTsKKwor
ICAgICAgICBXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzKiB3aW5kb3dQcm9wZXJ0aWVzID0gd2Via2l0
X3dlYl92aWV3X2dldF93aW5kb3dfcHJvcGVydGllcyh3ZWJWaWV3KTsKKyAgICAgICAgZ19hc3Nl
cnQod2luZG93UHJvcGVydGllcyk7CisgICAgICAgIGlmICghbV93aW5kb3dQcm9wZXJ0aWVzLmlz
TnVsbCgpKQorICAgICAgICAgICAgV2luZG93UHJvcGVydGllcyh3aW5kb3dQcm9wZXJ0aWVzKS5h
c3NlcnRFcXVhbChtX3dpbmRvd1Byb3BlcnRpZXMpOworCisgICAgICAgIG1fd2ViVmlld0V2ZW50
cy5hcHBlbmQoUmVhZHlUb1Nob3cpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCB2aWV3Q2xv
c2UoV2ViS2l0V2ViVmlldyogd2ViVmlldykKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KHdlYlZp
ZXcgIT0gbV93ZWJWaWV3KTsKKworICAgICAgICBtX3dlYlZpZXdFdmVudHMuYXBwZW5kKENsb3Nl
KTsKKyAgICAgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7CisKKyAgICAgICAgZ19tYWluX2xv
b3BfcXVpdChtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBWZWN0b3I8V2ViVmlld0V2ZW50cz4g
bV93ZWJWaWV3RXZlbnRzOworICAgIFdlYktpdFNjcmlwdERpYWxvZ1R5cGUgbV9zY3JpcHREaWFs
b2dUeXBlOworICAgIGJvb2wgbV9zY3JpcHREaWFsb2dDb25maXJtZWQ7CisgICAgYm9vbCBtX2Fs
bG93UGVybWlzc2lvblJlcXVlc3RzOworICAgIFdpbmRvd1Byb3BlcnRpZXMgbV93aW5kb3dQcm9w
ZXJ0aWVzOworICAgIEhhc2hTZXQ8V1RGOjpTdHJpbmc+IG1fd2luZG93UHJvcGVydGllc0NoYW5n
ZWQ7CisgICAgR1JlZlB0cjxXZWJLaXRIaXRUZXN0UmVzdWx0PiBtX21vdXNlVGFyZ2V0SGl0VGVz
dFJlc3VsdDsKKyAgICB1bnNpZ25lZCBtX21vdXNlVGFyZ2V0TW9kaWZpZXJzOworfTsKKworc3Rh
dGljIHZvaWQgdGVzdFdlYlZpZXdDcmVhdGVSZWFkeUNsb3NlKFVJQ2xpZW50VGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHkgb25Mb2Fk
PVwid2luZG93Lm9wZW4oKS5jbG9zZSgpO1wiPjwvaHRtbD4iLCAwKTsKKyAgICB0ZXN0LT53YWl0
VW50aWxNYWluTG9vcEZpbmlzaGVzKCk7CisKKyAgICBWZWN0b3I8VUlDbGllbnRUZXN0OjpXZWJW
aWV3RXZlbnRzPiYgZXZlbnRzID0gdGVzdC0+bV93ZWJWaWV3RXZlbnRzOworICAgIGdfYXNzZXJ0
X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgMyk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50
c1swXSwgPT0sIFVJQ2xpZW50VGVzdDo6Q3JlYXRlKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZl
bnRzWzFdLCA9PSwgVUlDbGllbnRUZXN0OjpSZWFkeVRvU2hvdyk7CisgICAgZ19hc3NlcnRfY21w
aW50KGV2ZW50c1syXSwgPT0sIFVJQ2xpZW50VGVzdDo6Q2xvc2UpOworfQorCitzdGF0aWMgZ2Jv
b2xlYW4gY2hlY2tNaW1lVHlwZUZvckZpbHRlcihHdGtGaWxlRmlsdGVyKiBmaWx0ZXIsIGNvbnN0
IGdjaGFyKiBtaW1lVHlwZSkKK3sKKyAgICBHdGtGaWxlRmlsdGVySW5mbyBmaWx0ZXJJbmZvOwor
ICAgIGZpbHRlckluZm8uY29udGFpbnMgPSBHVEtfRklMRV9GSUxURVJfTUlNRV9UWVBFOworICAg
IGZpbHRlckluZm8ubWltZV90eXBlID0gbWltZVR5cGU7CisgICAgcmV0dXJuIGd0a19maWxlX2Zp
bHRlcl9maWx0ZXIoZmlsdGVyLCAmZmlsdGVySW5mbyk7Cit9CisKK2NsYXNzIE1vZGFsRGlhbG9n
c1Rlc3Q6IHB1YmxpYyBVSUNsaWVudFRlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNU
X0ZJWFRVUkUoTW9kYWxEaWFsb2dzVGVzdCk7CisKKyAgICBzdGF0aWMgdm9pZCBkaWFsb2dSdW5B
c01vZGFsQ2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgTW9kYWxEaWFsb2dzVGVzdCog
dGVzdCkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KHdlYlZpZXcgIT0gdGVzdC0+bV93ZWJWaWV3
KTsKKyAgICAgICAgdGVzdC0+bV93ZWJWaWV3RXZlbnRzLmFwcGVuZChSdW5Bc01vZGFsKTsKKyAg
ICB9CisKKyAgICBHdGtXaWRnZXQqIHZpZXdDcmVhdGUoV2ViS2l0V2ViVmlldyogd2ViVmlldykK
KyAgICB7CisgICAgICAgIGdfYXNzZXJ0KHdlYlZpZXcgPT0gbV93ZWJWaWV3KTsKKworICAgICAg
ICBHdGtXaWRnZXQqIG5ld1dlYlZpZXcgPSBVSUNsaWVudFRlc3Q6OnZpZXdDcmVhdGUod2ViVmll
dyk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobmV3V2ViVmlldywgInJ1bi1hcy1tb2RhbCIs
IEdfQ0FMTEJBQ0soZGlhbG9nUnVuQXNNb2RhbENhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIHJl
dHVybiBuZXdXZWJWaWV3OworICAgIH0KKworICAgIHZvaWQgdmlld1JlYWR5VG9TaG93KFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcpCisgICAgeworICAgICAgICBnX2Fzc2VydCh3ZWJWaWV3ICE9IG1f
d2ViVmlldyk7CisgICAgICAgIG1fd2ViVmlld0V2ZW50cy5hcHBlbmQoUmVhZHlUb1Nob3cpOwor
ICAgIH0KK307CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3QWxsb3dNb2RhbERpYWxvZ3MoTW9k
YWxEaWFsb2dzVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBXZWJLaXRTZXR0aW5n
cyogc2V0dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHRlc3QtPm1fd2ViVmll
dyk7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9hbGxvd19tb2RhbF9kaWFsb2dzKHNldHRpbmdz
LCBUUlVFKTsKKworICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keSBvbmxvYWQ9XCJ3aW5k
b3cuc2hvd01vZGFsRGlhbG9nKCdkYXRhOnRleHQvaHRtbCw8aHRtbD48Ym9keS8+PHNjcmlwdD53
aW5kb3cuY2xvc2UoKTs8L3NjcmlwdD48L2h0bWw+JylcIj48L2JvZHk+PC9odG1sPiIsIDApOwor
ICAgIHRlc3QtPndhaXRVbnRpbE1haW5Mb29wRmluaXNoZXMoKTsKKworICAgIFZlY3RvcjxVSUNs
aWVudFRlc3Q6OldlYlZpZXdFdmVudHM+JiBldmVudHMgPSB0ZXN0LT5tX3dlYlZpZXdFdmVudHM7
CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCA0KTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgVUlDbGllbnRUZXN0OjpDcmVhdGUpOworICAgIGdfYXNz
ZXJ0X2NtcGludChldmVudHNbMV0sID09LCBVSUNsaWVudFRlc3Q6OlJlYWR5VG9TaG93KTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgVUlDbGllbnRUZXN0OjpSdW5Bc01vZGFs
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzNdLCA9PSwgVUlDbGllbnRUZXN0OjpDbG9z
ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3RGlzYWxsb3dNb2RhbERpYWxvZ3MoTW9k
YWxEaWFsb2dzVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBXZWJLaXRTZXR0aW5n
cyogc2V0dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHRlc3QtPm1fd2ViVmll
dyk7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9hbGxvd19tb2RhbF9kaWFsb2dzKHNldHRpbmdz
LCBGQUxTRSk7CisKKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHkgb25sb2FkPVwid2lu
ZG93LnNob3dNb2RhbERpYWxvZygnZGF0YTp0ZXh0L2h0bWwsPGh0bWw+PGJvZHkvPjxzY3JpcHQ+
d2luZG93LmNsb3NlKCk7PC9zY3JpcHQ+PC9odG1sPicpXCI+PC9ib2R5PjwvaHRtbD4iLCAwKTsK
KyAgICAvLyBXZSBuZWVkIHRvIHVzZSBhIHRpbWVvdXQgaGVyZSBiZWNhdXNlIHRoZSB2aWV3Q2xv
c2UoKSBmdW5jdGlvbgorICAgIC8vIHdvbid0IGV2ZXIgYmUgY2FsbGVkIGFzIHRoZSBkaWFsb2cg
d29uJ3QgYmUgY3JlYXRlZC4KKyAgICB0ZXN0LT53YWl0KDEpOworCisgICAgVmVjdG9yPFVJQ2xp
ZW50VGVzdDo6V2ViVmlld0V2ZW50cz4mIGV2ZW50cyA9IHRlc3QtPm1fd2ViVmlld0V2ZW50czsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDApOworfQorCitzdGF0aWMg
dm9pZCB0ZXN0V2ViVmlld0phdmFTY3JpcHREaWFsb2dzKFVJQ2xpZW50VGVzdCogdGVzdCwgZ2Nv
bnN0cG9pbnRlcikKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciogaHRtbE9uTG9hZEZvcm1hdCA9
ICI8aHRtbD48Ym9keSBvbkxvYWQ9XCIlc1wiPjwvYm9keT48L2h0bWw+IjsKKyAgICBzdGF0aWMg
Y29uc3QgY2hhcioganNBbGVydEZvcm1hdCA9ICJhbGVydCgnJXMnKSI7CisgICAgc3RhdGljIGNv
bnN0IGNoYXIqIGpzQ29uZmlybUZvcm1hdCA9ICJkbyB7IGNvbmZpcm1lZCA9IGNvbmZpcm0oJyVz
Jyk7IH0gd2hpbGUgKCFjb25maXJtZWQpOyBhbGVydCgnY29uZmlybWVkJyk7IjsKKyAgICBzdGF0
aWMgY29uc3QgY2hhcioganNQcm9tcHRGb3JtYXQgPSAiYWxlcnQocHJvbXB0KCclcycsICdkZWZh
dWx0JykpOyI7CisKKyAgICB0ZXN0LT5tX3NjcmlwdERpYWxvZ1R5cGUgPSBXRUJLSVRfU0NSSVBU
X0RJQUxPR19BTEVSVDsKKyAgICBHT3duUHRyPGNoYXI+IGFsZXJ0RGlhbG9nTWVzc2FnZShnX3N0
cmR1cF9wcmludGYoanNBbGVydEZvcm1hdCwga0FsZXJ0RGlhbG9nTWVzc2FnZSkpOworICAgIEdP
d25QdHI8Y2hhcj4gYWxlcnRIVE1MKGdfc3RyZHVwX3ByaW50ZihodG1sT25Mb2FkRm9ybWF0LCBh
bGVydERpYWxvZ01lc3NhZ2UuZ2V0KCkpKTsKKyAgICB0ZXN0LT5sb2FkSHRtbChhbGVydEhUTUwu
Z2V0KCksIDApOworICAgIHRlc3QtPndhaXRVbnRpbE1haW5Mb29wRmluaXNoZXMoKTsKKworICAg
IHRlc3QtPm1fc2NyaXB0RGlhbG9nVHlwZSA9IFdFQktJVF9TQ1JJUFRfRElBTE9HX0NPTkZJUk07
CisgICAgR093blB0cjxjaGFyPiBjb25maXJtRGlhbG9nTWVzc2FnZShnX3N0cmR1cF9wcmludGYo
anNDb25maXJtRm9ybWF0LCBrQ29uZmlybURpYWxvZ01lc3NhZ2UpKTsKKyAgICBHT3duUHRyPGNo
YXI+IGNvbmZpcm1IVE1MKGdfc3RyZHVwX3ByaW50ZihodG1sT25Mb2FkRm9ybWF0LCBjb25maXJt
RGlhbG9nTWVzc2FnZS5nZXQoKSkpOworICAgIHRlc3QtPmxvYWRIdG1sKGNvbmZpcm1IVE1MLmdl
dCgpLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxNYWluTG9vcEZpbmlzaGVzKCk7CisKKyAgICB0
ZXN0LT5tX3NjcmlwdERpYWxvZ1R5cGUgPSBXRUJLSVRfU0NSSVBUX0RJQUxPR19QUk9NUFQ7Cisg
ICAgR093blB0cjxjaGFyPiBwcm9tcHREaWFsb2dNZXNzYWdlKGdfc3RyZHVwX3ByaW50Zihqc1By
b21wdEZvcm1hdCwga1Byb21wdERpYWxvZ01lc3NhZ2UpKTsKKyAgICBHT3duUHRyPGNoYXI+IHBy
b21wdEhUTUwoZ19zdHJkdXBfcHJpbnRmKGh0bWxPbkxvYWRGb3JtYXQsIHByb21wdERpYWxvZ01l
c3NhZ2UuZ2V0KCkpKTsKKyAgICB0ZXN0LT5sb2FkSHRtbChwcm9tcHRIVE1MLmdldCgpLCAwKTsK
KyAgICB0ZXN0LT53YWl0VW50aWxNYWluTG9vcEZpbmlzaGVzKCk7Cit9CisKK3N0YXRpYyB2b2lk
IHRlc3RXZWJWaWV3V2luZG93UHJvcGVydGllcyhVSUNsaWVudFRlc3QqIHRlc3QsIGdjb25zdHBv
aW50ZXIpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHdpbmRvd1Byb3JwZXJ0aWVzU3RyaW5n
ID0gImxlZnQ9MTAwLHRvcD0xNTAsd2lkdGg9NDAwLGhlaWdodD00MDAsbG9jYXRpb249bm8sbWVu
dWJhcj1ubyxzdGF0dXM9bm8sdG9vbGJhcj1ubyxzY3JvbGxiYXJzPW5vIjsKKyAgICBHZGtSZWN0
YW5nbGUgZ2VvbWV0cnkgPSB7IDEwMCwgMTUwLCA0MDAsIDQwMCB9OworICAgIHRlc3QtPnNldEV4
cGVjdGVkV2luZG93UHJvcGVydGllcyhVSUNsaWVudFRlc3Q6OldpbmRvd1Byb3BlcnRpZXMoJmdl
b21ldHJ5LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlKSk7
CisKKyAgICBHT3duUHRyPGNoYXI+IGh0bWxTdHJpbmcoZ19zdHJkdXBfcHJpbnRmKCI8aHRtbD48
Ym9keSBvbkxvYWQ9XCJ3aW5kb3cub3BlbignJywgJycsICclcycpLmNsb3NlKCk7XCI+PC9ib2R5
PjwvaHRtbD4iLCB3aW5kb3dQcm9ycGVydGllc1N0cmluZykpOworICAgIHRlc3QtPmxvYWRIdG1s
KGh0bWxTdHJpbmcuZ2V0KCksIDApOworICAgIHRlc3QtPndhaXRVbnRpbE1haW5Mb29wRmluaXNo
ZXMoKTsKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBwcm9wZXJ0aWVzQ2hhbmdlZFtdID0gewor
ICAgICAgICAiZ2VvbWV0cnkiLCAibG9jYXRpb25iYXItdmlzaWJsZSIsICJtZW51YmFyLXZpc2li
bGUiLCAic3RhdHVzYmFyLXZpc2libGUiLCAidG9vbGJhci12aXNpYmxlIiwgInNjcm9sbGJhcnMt
dmlzaWJsZSIKKyAgICB9OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgR19OX0VMRU1FTlRT
KHByb3BlcnRpZXNDaGFuZ2VkKTsgKytpKQorICAgICAgICBnX2Fzc2VydCh0ZXN0LT5tX3dpbmRv
d1Byb3BlcnRpZXNDaGFuZ2VkLmNvbnRhaW5zKHByb3BlcnRpZXNDaGFuZ2VkW2ldKSk7CisKKyAg
ICBWZWN0b3I8VUlDbGllbnRUZXN0OjpXZWJWaWV3RXZlbnRzPiYgZXZlbnRzID0gdGVzdC0+bV93
ZWJWaWV3RXZlbnRzOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgMyk7
CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIFVJQ2xpZW50VGVzdDo6Q3JlYXRl
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgVUlDbGllbnRUZXN0OjpSZWFk
eVRvU2hvdyk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIFVJQ2xpZW50VGVz
dDo6Q2xvc2UpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld01vdXNlVGFyZ2V0KFVJQ2xp
ZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5zaG93SW5XaW5kb3dB
bmRXYWl0VW50aWxNYXBwZWQoR1RLX1dJTkRPV19UT1BMRVZFTCk7CisKKyAgICBjb25zdCBjaGFy
KiBsaW5rc0hvdmVyZWRIVE1MID0KKyAgICAgICAgIjxodG1sPjxib2R5PiIKKyAgICAgICAgIiA8
YSBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjEnIGhyZWY9J2h0dHA6Ly93
d3cud2Via2l0Z3RrLm9yZycgdGl0bGU9J1dlYktpdEdUSysgVGl0bGUnPldlYktpdEdUSysgV2Vi
c2l0ZTwvYT4iCisgICAgICAgICIgPGltZyBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6
MTsgdG9wOjEwJyBzcmM9JzB4ZGVhZGJlZWYnIHdpZHRoPTUgaGVpZ2h0PTU+PC9pbWc+IgorICAg
ICAgICAiIDxhIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6MjAnIGhyZWY9
J2h0dHA6Ly93d3cud2Via2l0Z3RrLm9yZy9sb2dvJyB0aXRsZT0nV2ViS2l0R1RLKyBMb2dvJz48
aW1nIHNyYz0nMHhkZWFkYmVlZicgd2lkdGg9NSBoZWlnaHQ9NT48L2ltZz48L2E+IgorICAgICAg
ICAiIDxpbnB1dCBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjMwJyBzaXpl
PScxMCc+PC9pbnB1dD4iCisgICAgICAgICIgPGRpdiBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7
IGxlZnQ6MTsgdG9wOjUwOyB3aWR0aDozMDsgaGVpZ2h0OjMwOyBvdmVyZmxvdzpzY3JvbGwnPiZu
YnNwOzwvZGl2PiIKKyAgICAgICAgIiA8dmlkZW8gc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBs
ZWZ0OjE7IHRvcDoxMDAnIHdpZHRoPSczMDAnIGhlaWdodD0nMzAwJyBjb250cm9scz0nY29udHJv
bHMnIHByZWxvYWQ9J25vbmUnPjxzb3VyY2Ugc3JjPSdtb3ZpZS5vZ2cnIHR5cGU9J3ZpZGVvL29n
ZycgLz48L3ZpZGVvPiIKKyAgICAgICAgIjwvYm9keT48L2h0bWw+IjsKKworICAgIHRlc3QtPmxv
YWRIdG1sKGxpbmtzSG92ZXJlZEhUTUwsICJmaWxlOi8vLyIpOworICAgIHRlc3QtPndhaXRVbnRp
bExvYWRGaW5pc2hlZCgpOworCisgICAgLy8gTW92ZSBvdmVyIGxpbmsuCisgICAgV2ViS2l0SGl0
VGVzdFJlc3VsdCogaGl0VGVzdFJlc3VsdCA9IHRlc3QtPm1vdmVNb3VzZUFuZFdhaXRVbnRpbE1v
dXNlVGFyZ2V0Q2hhbmdlZCgxLCAxKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVz
dWx0X2NvbnRleHRfaXNfbGluayhoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtp
dF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0KSk7CisgICAg
Z19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYShoaXRUZXN0
UmVzdWx0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9p
c19lZGl0YWJsZShoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9o
aXRfdGVzdF9yZXN1bHRfZ2V0X2xpbmtfdXJpKGhpdFRlc3RSZXN1bHQpLCA9PSwgImh0dHA6Ly93
d3cud2Via2l0Z3RrLm9yZy8iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2hpdF90ZXN0
X3Jlc3VsdF9nZXRfbGlua190aXRsZShoaXRUZXN0UmVzdWx0KSwgPT0sICJXZWJLaXRHVEsrIFRp
dGxlIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2xp
bmtfbGFiZWwoaGl0VGVzdFJlc3VsdCksID09LCAiV2ViS2l0R1RLKyBXZWJzaXRlIik7CisgICAg
Z19hc3NlcnQoIXRlc3QtPm1fbW91c2VUYXJnZXRNb2RpZmllcnMpOworCisgICAgLy8gTW92ZSBv
dXQgb2YgdGhlIGxpbmsuCisgICAgaGl0VGVzdFJlc3VsdCA9IHRlc3QtPm1vdmVNb3VzZUFuZFdh
aXRVbnRpbE1vdXNlVGFyZ2V0Q2hhbmdlZCgwLCAwKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hp
dF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xpbmsoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3Vs
dCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbWVk
aWEoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0
X2NvbnRleHRfaXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF0ZXN0
LT5tX21vdXNlVGFyZ2V0TW9kaWZpZXJzKTsKKworICAgIC8vIE1vdmUgb3ZlciBpbWFnZSB3aXRo
IEdES19DT05UUk9MX01BU0suCisgICAgaGl0VGVzdFJlc3VsdCA9IHRlc3QtPm1vdmVNb3VzZUFu
ZFdhaXRVbnRpbE1vdXNlVGFyZ2V0Q2hhbmdlZCgxLCAxMCwgR0RLX0NPTlRST0xfTUFTSyk7Cisg
ICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhpdFRl
c3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRf
aXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3Rf
cmVzdWx0X2NvbnRleHRfaXNfbWVkaWEoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF3
ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkp
OworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfc2Nyb2xs
YmFyKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2hpdF90ZXN0
X3Jlc3VsdF9nZXRfaW1hZ2VfdXJpKGhpdFRlc3RSZXN1bHQpLCA9PSwgImZpbGU6Ly8vMHhkZWFk
YmVlZiIpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fbW91c2VUYXJnZXRNb2RpZmllcnMgJiBHREtf
Q09OVFJPTF9NQVNLKTsKKworICAgIC8vIE1vdmUgb3ZlciBpbWFnZSBsaW5rLgorICAgIGhpdFRl
c3RSZXN1bHQgPSB0ZXN0LT5tb3ZlTW91c2VBbmRXYWl0VW50aWxNb3VzZVRhcmdldENoYW5nZWQo
MSwgMjApOworICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19s
aW5rKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0
X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRf
aGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbWVkaWEoaGl0VGVzdFJlc3VsdCkpOworICAgIGdf
YXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfZWRpdGFibGUoaGl0VGVz
dFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRf
aXNfc2Nyb2xsYmFyKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0
X2hpdF90ZXN0X3Jlc3VsdF9nZXRfbGlua191cmkoaGl0VGVzdFJlc3VsdCksID09LCAiaHR0cDov
L3d3dy53ZWJraXRndGsub3JnL2xvZ28iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2hp
dF90ZXN0X3Jlc3VsdF9nZXRfaW1hZ2VfdXJpKGhpdFRlc3RSZXN1bHQpLCA9PSwgImZpbGU6Ly8v
MHhkZWFkYmVlZiIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0
X2dldF9saW5rX3RpdGxlKGhpdFRlc3RSZXN1bHQpLCA9PSwgIldlYktpdEdUSysgTG9nbyIpOwor
ICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9saW5rX2xhYmVsKGhpdFRl
c3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCghdGVzdC0+bV9tb3VzZVRhcmdldE1vZGlmaWVycyk7
CisKKyAgICAvLyBNb3ZlIG92ZXIgbWVkaWEuCisgICAgaGl0VGVzdFJlc3VsdCA9IHRlc3QtPm1v
dmVNb3VzZUFuZFdhaXRVbnRpbE1vdXNlVGFyZ2V0Q2hhbmdlZCgxLCAxMDApOworICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluayhoaXRUZXN0UmVzdWx0
KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFn
ZShoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9j
b250ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hp
dF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBn
X2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX3Njcm9sbGJhcihoaXRU
ZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRf
Z2V0X21lZGlhX3VyaShoaXRUZXN0UmVzdWx0KSwgPT0sICJmaWxlOi8vL21vdmllLm9nZyIpOwor
ICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX21vdXNlVGFyZ2V0TW9kaWZpZXJzKTsKKworICAgIC8vIE1v
dmVyIG92ZXIgaW5wdXQuCisgICAgaGl0VGVzdFJlc3VsdCA9IHRlc3QtPm1vdmVNb3VzZUFuZFdh
aXRVbnRpbE1vdXNlVGFyZ2V0Q2hhbmdlZCg1LCAzNSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9o
aXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fz
c2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1
bHQpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21l
ZGlhKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3Vs
dF9jb250ZXh0X2lzX3Njcm9sbGJhcihoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQod2Vi
a2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsK
KyAgICBnX2Fzc2VydCghdGVzdC0+bV9tb3VzZVRhcmdldE1vZGlmaWVycyk7CisKKyAgICAvLyBN
b3ZlIG92ZXIgc2Nyb2xsYmFyLgorICAgIGhpdFRlc3RSZXN1bHQgPSB0ZXN0LT5tb3ZlTW91c2VB
bmRXYWl0VW50aWxNb3VzZVRhcmdldENoYW5nZWQoNSwgNzUpOworICAgIGdfYXNzZXJ0KCF3ZWJr
aXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluayhoaXRUZXN0UmVzdWx0KSk7CisgICAg
Z19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFnZShoaXRUZXN0
UmVzdWx0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9p
c19tZWRpYShoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9y
ZXN1bHRfY29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQo
d2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX3Njcm9sbGJhcihoaXRUZXN0UmVzdWx0
KSk7CisgICAgZ19hc3NlcnQoIXRlc3QtPm1fbW91c2VUYXJnZXRNb2RpZmllcnMpOworfQorCitz
dGF0aWMgdm9pZCB0ZXN0V2ViVmlld1Blcm1pc3Npb25SZXF1ZXN0cyhVSUNsaWVudFRlc3QqIHRl
c3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBnZW9jbHVlIGdp
dmUgYSBydW50aW1lIHdhcm5pbmcgYmVjYXVzZSBpdCB0cmllcworICAgIC8vIHRvIHJlZ2lzdGVy
IHRoZSBlcnJvciBxdWFyayB0d2ljZS4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD04OTg1OC4KKyAgICAvLyBNYWtlIHdhcm5pbmdzIG5vbi1mYXRhbCBmb3IgdGhp
cyB0ZXN0IHRvIG1ha2UgaXQgcGFzcy4KKyAgICB0ZXN0LT5yZW1vdmVMb2dGYXRhbEZsYWcoR19M
T0dfTEVWRUxfV0FSTklORyk7CisgICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFw
cGVkKCk7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGdlb2xvY2F0aW9uUmVxdWVzdEhUTUwgPQor
ICAgICAgICAiPGh0bWw+IgorICAgICAgICAiICA8c2NyaXB0PiIKKyAgICAgICAgIiAgZnVuY3Rp
b24gcnVuVGVzdCgpIgorICAgICAgICAiICB7IgorICAgICAgICAiICAgIG5hdmlnYXRvci5nZW9s
b2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZnVuY3Rpb24ocCkgeyBkb2N1bWVudC50aXRsZSA9
IFwiT0tcIiB9LCIKKyAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZ1bmN0aW9uKGUpIHsgZG9jdW1lbnQudGl0bGUgPSBlLmNvZGUgfSk7IgorICAg
ICAgICAiICB9IgorICAgICAgICAiICA8L3NjcmlwdD4iCisgICAgICAgICIgIDxib2R5IG9ubG9h
ZD0ncnVuVGVzdCgpOyc+PC9ib2R5PiIKKyAgICAgICAgIjwvaHRtbD4iOworCisgICAgLy8gVGVz
dCBkZW55aW5nIGEgcGVybWlzc2lvbiByZXF1ZXN0LgorICAgIHRlc3QtPm1fYWxsb3dQZXJtaXNz
aW9uUmVxdWVzdHMgPSBmYWxzZTsKKyAgICB0ZXN0LT5sb2FkSHRtbChnZW9sb2NhdGlvblJlcXVl
c3RIVE1MLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxUaXRsZUNoYW5nZWQoKTsKKworICAgIC8v
IEFjY29yZGluZyB0byB0aGUgR2VvbG9jYXRpb24gQVBJIHNwZWNpZmljYXRpb24sICcxJyBpcyB0
aGUKKyAgICAvLyBlcnJvciBjb2RlIHJldHVybmVkIGZvciB0aGUgUEVSTUlTU0lPTl9ERU5JRUQg
ZXJyb3IuCisgICAgLy8gaHR0cDovL2Rldi53My5vcmcvZ2VvL2FwaS9zcGVjLXNvdXJjZS5odG1s
I3Bvc2l0aW9uX2Vycm9yX2ludGVyZmFjZQorICAgIGNvbnN0IGdjaGFyKiByZXN1bHQgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X3RpdGxlKHRlc3QtPm1fd2ViVmlldyk7CisgICAgZ19hc3NlcnRfY21w
c3RyKHJlc3VsdCwgPT0sICIxIik7CisKKyAgICAvLyBUZXN0IGFsbG93aW5nIGEgcGVybWlzc2lv
biByZXF1ZXN0LgorICAgIHRlc3QtPm1fYWxsb3dQZXJtaXNzaW9uUmVxdWVzdHMgPSB0cnVlOwor
ICAgIHRlc3QtPmxvYWRIdG1sKGdlb2xvY2F0aW9uUmVxdWVzdEhUTUwsIDApOworICAgIHRlc3Qt
PndhaXRVbnRpbFRpdGxlQ2hhbmdlZCgpOworCisgICAgLy8gQ2hlY2sgdGhhdCB3ZSBkaWQgbm90
IGdldCB0aGUgUEVSTUlTU0lPTl9ERU5JRUQgZXJyb3Igbm93LgorICAgIHJlc3VsdCA9IHdlYmtp
dF93ZWJfdmlld19nZXRfdGl0bGUodGVzdC0+bV93ZWJWaWV3KTsKKyAgICBnX2Fzc2VydF9jbXBz
dHIocmVzdWx0LCAhPSwgIjEiKTsKKyAgICB0ZXN0LT5hZGRMb2dGYXRhbEZsYWcoR19MT0dfTEVW
RUxfV0FSTklORyk7Cit9CisKK2NsYXNzIEZpbGVDaG9vc2VyVGVzdDogcHVibGljIFVJQ2xpZW50
VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShGaWxlQ2hvb3NlclRl
c3QpOworCisgICAgRmlsZUNob29zZXJUZXN0KCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2Nv
bm5lY3QobV93ZWJWaWV3LCAicnVuLWZpbGUtY2hvb3NlciIsIEdfQ0FMTEJBQ0socnVuRmlsZUNo
b29zZXJDYWxsYmFjayksIHRoaXMpOworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBydW5G
aWxlQ2hvb3NlckNhbGxiYWNrKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVl
c3QqIHJlcXVlc3QsIEZpbGVDaG9vc2VyVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3Qt
PnJ1bkZpbGVDaG9vc2VyKHJlcXVlc3QpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisK
KyAgICB2b2lkIHJ1bkZpbGVDaG9vc2VyKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVz
dCkKKyAgICB7CisgICAgICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMo
R19PQkpFQ1QocmVxdWVzdCkpOworICAgICAgICBtX2ZpbGVDaG9vc2VyUmVxdWVzdCA9IHJlcXVl
c3Q7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7CisgICAgfQorCisgICAg
V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiBjbGlja01vdXNlQnV0dG9uQW5kV2FpdEZvckZpbGVD
aG9vc2VyUmVxdWVzdChpbnQgeCwgaW50IHkpCisgICAgeworICAgICAgICBjbGlja01vdXNlQnV0
dG9uKHgsIHkpOworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgICAg
IHJldHVybiBtX2ZpbGVDaG9vc2VyUmVxdWVzdC5nZXQoKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgR1JlZlB0cjxXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q+IG1fZmlsZUNob29zZXJSZXF1ZXN0
OworfTsKKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdGaWxlQ2hvb3NlclJlcXVlc3QoRmlsZUNo
b29zZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPnNob3dJbldpbmRv
d0FuZFdhaXRVbnRpbE1hcHBlZCgpOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmaWxlQ2hvb3Nl
ckhUTUxGb3JtYXQgPSAiPGh0bWw+PGJvZHk+PGlucHV0IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0
ZTtsZWZ0OjA7dG9wOjA7bWFyZ2luOjA7cGFkZGluZzowJyB0eXBlPSdmaWxlJyAlcy8+PC9ib2R5
PjwvaHRtbD4iOworCisgICAgLy8gTXVsdGlwbGUgc2VsZWN0aW9ucyBub3QgYWxsb3dlZCwgbm8g
TUlNRSBmaWx0ZXJpbmcuCisgICAgR093blB0cjxjaGFyPiBzaW1wbGVGaWxlVXBsb2FkSFRNTChn
X3N0cmR1cF9wcmludGYoZmlsZUNob29zZXJIVE1MRm9ybWF0LCAiIikpOworICAgIHRlc3QtPmxv
YWRIdG1sKHNpbXBsZUZpbGVVcGxvYWRIVE1MLmdldCgpLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50
aWxMb2FkRmluaXNoZWQoKTsKKyAgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIGZpbGVDaG9v
c2VyUmVxdWVzdCA9IHRlc3QtPmNsaWNrTW91c2VCdXR0b25BbmRXYWl0Rm9yRmlsZUNob29zZXJS
ZXF1ZXN0KDUsIDUpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rf
Z2V0X3NlbGVjdF9tdWx0aXBsZShmaWxlQ2hvb3NlclJlcXVlc3QpKTsKKworICAgIGNvbnN0IGdj
aGFyKiBjb25zdCogbWltZVR5cGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9t
aW1lX3R5cGVzKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIW1pbWVUeXBlcyk7
CisgICAgR3RrRmlsZUZpbHRlciogZmlsdGVyID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X2dldF9taW1lX3R5cGVzX2ZpbHRlcihmaWxlQ2hvb3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0
KCFmaWx0ZXIpOworICAgIGNvbnN0IGdjaGFyKiBjb25zdCogc2VsZWN0ZWRGaWxlcyA9IHdlYmtp
dF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMoZmlsZUNob29zZXJSZXF1
ZXN0KTsKKyAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxlcyk7CisgICAgd2Via2l0X2ZpbGVfY2hv
b3Nlcl9yZXF1ZXN0X2NhbmNlbChmaWxlQ2hvb3NlclJlcXVlc3QpOworCisgICAgLy8gTXVsdGlw
bGUgc2VsZWN0aW9ucyBhbGxvd2VkLCBubyBNSU1FIGZpbHRlcmluZywgc29tZSBwcmUtc2VsZWN0
ZWQgZmlsZXMuCisgICAgR093blB0cjxjaGFyPiBtdWx0aXBsZVNlbGVjdGlvbkZpbGVVcGxvYWRI
VE1MKGdfc3RyZHVwX3ByaW50ZihmaWxlQ2hvb3NlckhUTUxGb3JtYXQsICJtdWx0aXBsZSIpKTsK
KyAgICB0ZXN0LT5sb2FkSHRtbChtdWx0aXBsZVNlbGVjdGlvbkZpbGVVcGxvYWRIVE1MLmdldCgp
LCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBmaWxlQ2hvb3Nl
clJlcXVlc3QgPSB0ZXN0LT5jbGlja01vdXNlQnV0dG9uQW5kV2FpdEZvckZpbGVDaG9vc2VyUmVx
dWVzdCg1LCA1KTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0
X3NlbGVjdF9tdWx0aXBsZShmaWxlQ2hvb3NlclJlcXVlc3QpKTsKKworICAgIG1pbWVUeXBlcyA9
IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcyhmaWxlQ2hvb3NlclJl
cXVlc3QpOworICAgIGdfYXNzZXJ0KCFtaW1lVHlwZXMpOworICAgIGZpbHRlciA9IHdlYmtpdF9m
aWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIoZmlsZUNob29zZXJSZXF1
ZXN0KTsKKyAgICBnX2Fzc2VydCghZmlsdGVyKTsKKyAgICBzZWxlY3RlZEZpbGVzID0gd2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhmaWxlQ2hvb3NlclJlcXVl
c3QpOworICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZpbGVzKTsKKworICAgIC8vIFNlbGVjdCBzb21l
IGZpbGVzLgorICAgIGNvbnN0IGdjaGFyKiBmaWxlc1RvU2VsZWN0WzRdID0geyAiL2ZvbyIsICIv
Zm9vL2JhciIsICIvZm9vL2Jhci9iYXoiLCAwIH07CisgICAgd2Via2l0X2ZpbGVfY2hvb3Nlcl9y
ZXF1ZXN0X3NlbGVjdF9maWxlcyhmaWxlQ2hvb3NlclJlcXVlc3QsIGZpbGVzVG9TZWxlY3QpOwor
CisgICAgLy8gQ2hlY2sgdGhlIGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGp1c3Qgc2VsZWN0ZWQuCisg
ICAgc2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0
ZWRfZmlsZXMoZmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydChzZWxlY3RlZEZpbGVz
KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1swXSwgPT0sICIvZm9vIik7Cisg
ICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMV0sID09LCAiL2Zvby9iYXIiKTsKKyAg
ICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1syXSwgPT0sICIvZm9vL2Jhci9iYXoiKTsK
KyAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxlc1szXSk7CisKKyAgICAvLyBQZXJmb3JtIGFub3Ro
ZXIgcmVxdWVzdCB0byBjaGVjayBpZiB0aGUgbGlzdCBvZiBmaWxlcyBzZWxlY3RlZAorICAgIC8v
IGluIHRoZSBwcmV2aW91cyBzdGVwIGFwcGVhcnMgbm93IGFzIHBhcnQgb2YgdGhlIG5ldyByZXF1
ZXN0LgorICAgIGZpbGVDaG9vc2VyUmVxdWVzdCA9IHRlc3QtPmNsaWNrTW91c2VCdXR0b25BbmRX
YWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0KDUsIDUpOworICAgIHNlbGVjdGVkRmlsZXMgPSB3ZWJr
aXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKGZpbGVDaG9vc2VyUmVx
dWVzdCk7CisgICAgZ19hc3NlcnQoc2VsZWN0ZWRGaWxlcyk7CisgICAgZ19hc3NlcnRfY21wc3Ry
KHNlbGVjdGVkRmlsZXNbMF0sID09LCAiL2ZvbyIpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxl
Y3RlZEZpbGVzWzFdLCA9PSwgIi9mb28vYmFyIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVj
dGVkRmlsZXNbMl0sID09LCAiL2Zvby9iYXIvYmF6Iik7CisgICAgZ19hc3NlcnQoIXNlbGVjdGVk
RmlsZXNbM10pOworICAgIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9jYW5jZWwoZmlsZUNo
b29zZXJSZXF1ZXN0KTsKKworICAgIC8vIE11bHRpcGxlIHNlbGVjdGlvbnMgbm90IGFsbG93ZWQs
IG9ubHkgYWNjZXB0IGltYWdlcywgYXVkaW8gYW5kIHZpZGVvIGZpbGVzLi4KKyAgICBHT3duUHRy
PGNoYXI+IG1pbWVGaWx0ZXJlZEZpbGVVcGxvYWRIVE1MKGdfc3RyZHVwX3ByaW50ZihmaWxlQ2hv
b3NlckhUTUxGb3JtYXQsICJhY2NlcHQ9J2F1ZGlvLyosdmlkZW8vKixpbWFnZS8qJyIpKTsKKyAg
ICB0ZXN0LT5sb2FkSHRtbChtaW1lRmlsdGVyZWRGaWxlVXBsb2FkSFRNTC5nZXQoKSwgMCk7Cisg
ICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZmlsZUNob29zZXJSZXF1ZXN0
ID0gdGVzdC0+Y2xpY2tNb3VzZUJ1dHRvbkFuZFdhaXRGb3JGaWxlQ2hvb3NlclJlcXVlc3QoNSwg
NSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0
X211bHRpcGxlKGZpbGVDaG9vc2VyUmVxdWVzdCkpOworCisgICAgbWltZVR5cGVzID0gd2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKGZpbGVDaG9vc2VyUmVxdWVzdCk7
CisgICAgZ19hc3NlcnQobWltZVR5cGVzKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIobWltZVR5cGVz
WzBdLCA9PSwgImF1ZGlvLyoiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIobWltZVR5cGVzWzFdLCA9
PSwgInZpZGVvLyoiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIobWltZVR5cGVzWzJdLCA9PSwgImlt
YWdlLyoiKTsKKyAgICBnX2Fzc2VydCghbWltZVR5cGVzWzNdKTsKKworICAgIGZpbHRlciA9IHdl
YmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIoZmlsZUNob29z
ZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydChHVEtfSVNfRklMRV9GSUxURVIoZmlsdGVyKSk7Cisg
ICAgZ19hc3NlcnQoY2hlY2tNaW1lVHlwZUZvckZpbHRlcihmaWx0ZXIsICJhdWRpby8qIikpOwor
ICAgIGdfYXNzZXJ0KGNoZWNrTWltZVR5cGVGb3JGaWx0ZXIoZmlsdGVyLCAidmlkZW8vKiIpKTsK
KyAgICBnX2Fzc2VydChjaGVja01pbWVUeXBlRm9yRmlsdGVyKGZpbHRlciwgImltYWdlLyoiKSk7
CisKKyAgICBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9z
ZWxlY3RlZF9maWxlcyhmaWxlQ2hvb3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0KCFzZWxlY3Rl
ZEZpbGVzKTsKKyAgICB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2FuY2VsKGZpbGVDaG9v
c2VyUmVxdWVzdCk7Cit9CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICBVSUNsaWVudFRlc3Q6
OmFkZCgiV2ViS2l0V2ViVmlldyIsICJjcmVhdGUtcmVhZHktY2xvc2UiLCB0ZXN0V2ViVmlld0Ny
ZWF0ZVJlYWR5Q2xvc2UpOworICAgIE1vZGFsRGlhbG9nc1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmll
dyIsICJhbGxvdy1tb2RhbC1kaWFsb2dzIiwgdGVzdFdlYlZpZXdBbGxvd01vZGFsRGlhbG9ncyk7
CisgICAgTW9kYWxEaWFsb2dzVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImRpc2FsbG93LW1v
ZGFsLWRpYWxvZ3MiLCB0ZXN0V2ViVmlld0Rpc2FsbG93TW9kYWxEaWFsb2dzKTsKKyAgICBVSUNs
aWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJqYXZhc2NyaXB0LWRpYWxvZ3MiLCB0ZXN0
V2ViVmlld0phdmFTY3JpcHREaWFsb2dzKTsKKyAgICBVSUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0
V2ViVmlldyIsICJ3aW5kb3ctcHJvcGVydGllcyIsIHRlc3RXZWJWaWV3V2luZG93UHJvcGVydGll
cyk7CisgICAgVUlDbGllbnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAibW91c2UtdGFyZ2V0
IiwgdGVzdFdlYlZpZXdNb3VzZVRhcmdldCk7CisgICAgVUlDbGllbnRUZXN0OjphZGQoIldlYktp
dFdlYlZpZXciLCAicGVybWlzc2lvbi1yZXF1ZXN0cyIsIHRlc3RXZWJWaWV3UGVybWlzc2lvblJl
cXVlc3RzKTsKKyAgICBGaWxlQ2hvb3NlclRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJmaWxl
LWNob29zZXItcmVxdWVzdCIsIHRlc3RXZWJWaWV3RmlsZUNob29zZXJSZXF1ZXN0KTsKK30KKwor
dm9pZCBhZnRlckFsbCgpCit7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdDJHdGsvVGVzdFdlYkV4dGVuc2lvbnMuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJFeHRlbnNpb25zLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi45MWNiN2FhCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJFeHRlbnNpb25zLmNwcApAQCAtMCww
ICsxLDE5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiV2ViS2l0VGVzdEJ1cy5oIgorI2luY2x1ZGUgIldl
YlZpZXdUZXN0LmgiCisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCitzdGF0aWMg
V2ViS2l0VGVzdEJ1cyogYnVzOworCitzdGF0aWMgdm9pZCB0ZXN0V2ViRXh0ZW5zaW9uR2V0VGl0
bGUoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0
bWwoIjxodG1sPjxoZWFkPjx0aXRsZT5XZWJLaXRHVEsrIFdlYiBFeHRlbnNpb25zIFRlc3Q8L3Rp
dGxlPjwvaGVhZD48Ym9keT48L2JvZHk+PC9odG1sPiIsIDApOworICAgIHRlc3QtPndhaXRVbnRp
bExvYWRGaW5pc2hlZCgpOworCisgICAgR1JlZlB0cjxHREJ1c1Byb3h5PiBwcm94eSA9IGFkb3B0
R1JlZihidXMtPmNyZWF0ZVByb3h5KCJvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwK
KyAgICAgICAgIi9vcmcvd2Via2l0L2d0ay9XZWJFeHRlbnNpb25UZXN0IiAsICJvcmcud2Via2l0
Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwgdGVzdC0+bV9tYWluTG9vcCkpOworICAgIEdSZWZQdHI8
R1ZhcmlhbnQ+IHJlc3VsdCA9IGFkb3B0R1JlZihnX2RidXNfcHJveHlfY2FsbF9zeW5jKAorICAg
ICAgICBwcm94eS5nZXQoKSwKKyAgICAgICAgIkdldFRpdGxlIiwKKyAgICAgICAgZ192YXJpYW50
X25ldygiKHQpIiwgd2Via2l0X3dlYl92aWV3X2dldF9wYWdlX2lkKHRlc3QtPm1fd2ViVmlldykp
LAorICAgICAgICBHX0RCVVNfQ0FMTF9GTEFHU19OT05FLAorICAgICAgICAtMSwgMCwgMCkpOwor
ICAgIGdfYXNzZXJ0KHJlc3VsdCk7CisKKyAgICBjb25zdCBjaGFyKiB0aXRsZTsKKyAgICBnX3Zh
cmlhbnRfZ2V0KHJlc3VsdC5nZXQoKSwgIigmcykiLCAmdGl0bGUpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cih0aXRsZSwgPT0sICJXZWJLaXRHVEsrIFdlYiBFeHRlbnNpb25zIFRlc3QiKTsKK30KKwor
c3RhdGljIHZvaWQgZG9jdW1lbnRMb2FkZWRDYWxsYmFjayhHREJ1c0Nvbm5lY3Rpb24qLCBjb25z
dCBjaGFyKiwgY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgR1ZhcmlhbnQq
LCBXZWJWaWV3VGVzdCogdGVzdCkKK3sKKyAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFp
bkxvb3ApOworfQorCitzdGF0aWMgdm9pZCB0ZXN0RG9jdW1lbnRMb2FkZWRTaWduYWwoV2ViVmll
d1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgR1JlZlB0cjxHREJ1c1Byb3h5PiBw
cm94eSA9IGFkb3B0R1JlZihidXMtPmNyZWF0ZVByb3h5KCJvcmcud2Via2l0Lmd0ay5XZWJFeHRl
bnNpb25UZXN0IiwKKyAgICAgICAgIi9vcmcvd2Via2l0L2d0ay9XZWJFeHRlbnNpb25UZXN0Iiwg
Im9yZy53ZWJraXQuZ3RrLldlYkV4dGVuc2lvblRlc3QiLCB0ZXN0LT5tX21haW5Mb29wKSk7Cisg
ICAgR0RCdXNDb25uZWN0aW9uKiBjb25uZWN0aW9uID0gZ19kYnVzX3Byb3h5X2dldF9jb25uZWN0
aW9uKHByb3h5LmdldCgpKTsKKyAgICBndWludCBpZCA9IGdfZGJ1c19jb25uZWN0aW9uX3NpZ25h
bF9zdWJzY3JpYmUoY29ubmVjdGlvbiwKKyAgICAgICAgMCwKKyAgICAgICAgIm9yZy53ZWJraXQu
Z3RrLldlYkV4dGVuc2lvblRlc3QiLAorICAgICAgICAiRG9jdW1lbnRMb2FkZWQiLAorICAgICAg
ICAiL29yZy93ZWJraXQvZ3RrL1dlYkV4dGVuc2lvblRlc3QiLAorICAgICAgICAwLAorICAgICAg
ICBHX0RCVVNfU0lHTkFMX0ZMQUdTX05PTkUsCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0RC
dXNTaWduYWxDYWxsYmFjaz4oZG9jdW1lbnRMb2FkZWRDYWxsYmFjayksCisgICAgICAgIHRlc3Qs
CisgICAgICAgIDApOworICAgIGdfYXNzZXJ0KGlkKTsKKworICAgIHRlc3QtPmxvYWRIdG1sKCI8
aHRtbD48aGVhZD48dGl0bGU+V2ViS2l0R1RLKyBXZWIgRXh0ZW5zaW9ucyBUZXN0PC90aXRsZT48
L2hlYWQ+PGJvZHk+PC9ib2R5PjwvaHRtbD4iLCAwKTsKKyAgICBnX21haW5fbG9vcF9ydW4odGVz
dC0+bV9tYWluTG9vcCk7CisgICAgZ19kYnVzX2Nvbm5lY3Rpb25fc2lnbmFsX3Vuc3Vic2NyaWJl
KGNvbm5lY3Rpb24sIGlkKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYlByb2Nlc3NDcmFzaGVk
Q2FsbGJhY2soV2ViS2l0V2ViVmlldyosIFdlYlZpZXdUZXN0KiB0ZXN0KQoreworICAgIHRlc3Qt
PnF1aXRNYWluTG9vcCgpOworCisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZCB0
ZXN0V2ViS2l0V2ViVmlld1Byb2Nlc3NDcmFzaGVkKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rw
b2ludGVyKQoreworICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48L2h0bWw+IiwgMCk7CisgICAg
dGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHRl
c3QtPm1fd2ViVmlldywgIndlYi1wcm9jZXNzLWNyYXNoZWQiLAorICAgICAgICBHX0NBTExCQUNL
KHdlYlByb2Nlc3NDcmFzaGVkQ2FsbGJhY2spLCB0ZXN0KTsKKworICAgIEdSZWZQdHI8R0RCdXNQ
cm94eT4gcHJveHkgPSBhZG9wdEdSZWYoYnVzLT5jcmVhdGVQcm94eSgib3JnLndlYmtpdC5ndGsu
V2ViRXh0ZW5zaW9uVGVzdCIsCisgICAgICAgICIvb3JnL3dlYmtpdC9ndGsvV2ViRXh0ZW5zaW9u
VGVzdCIsICJvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwgdGVzdC0+bV9tYWluTG9v
cCkpOworCisgICAgR1JlZlB0cjxHVmFyaWFudD4gcmVzdWx0ID0gYWRvcHRHUmVmKGdfZGJ1c19w
cm94eV9jYWxsX3N5bmMoCisgICAgICAgIHByb3h5LmdldCgpLAorICAgICAgICAiQWJvcnRQcm9j
ZXNzIiwKKyAgICAgICAgMCwKKyAgICAgICAgR19EQlVTX0NBTExfRkxBR1NfTk9ORSwKKyAgICAg
ICAgLTEsIDAsIDApKTsKKyAgICBnX2Fzc2VydCghcmVzdWx0KTsKKyAgICBnX21haW5fbG9vcF9y
dW4odGVzdC0+bV9tYWluTG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJFeHRlbnNpb25X
aW5kb3dPYmplY3RDbGVhcmVkKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQorewor
ICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48aGVhZGVyPjwvaGVhZGVyPjxib2R5PjwvYm9keT48
L2h0bWw+IiwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBH
T3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCogamF2YXNj
cmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgid2lu
ZG93LmVjaG8oJ0ZvbycpOyIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQoamF2YXNj
cmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKyAgICBHT3duUHRyPGNo
YXI+IHZhbHVlU3RyaW5nKFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGph
dmFzY3JpcHRSZXN1bHQpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCks
ID09LCAiRm9vIik7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBzY3JpcHREaWFsb2dDYWxsYmFjayhX
ZWJLaXRXZWJWaWV3KiwgV2ViS2l0U2NyaXB0RGlhbG9nKiBkaWFsb2csIGNoYXIqKiByZXN1bHQp
Cit7CisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfc2NyaXB0X2RpYWxvZ19nZXRfZGlhbG9n
X3R5cGUoZGlhbG9nKSwgPT0sIFdFQktJVF9TQ1JJUFRfRElBTE9HX0FMRVJUKTsKKyAgICBnX2Fz
c2VydCghKnJlc3VsdCk7CisgICAgKnJlc3VsdCA9IGdfc3RyZHVwKHdlYmtpdF9zY3JpcHRfZGlh
bG9nX2dldF9tZXNzYWdlKGRpYWxvZykpOworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMg
dm9pZCBydW5KYXZhU2NyaXB0SW5Jc29sYXRlZFdvcmxkRmluaXNoZWRDYWxsYmFjayhHREJ1c1By
b3h5KiBwcm94eSwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIFdlYlZpZXdUZXN0KiB0ZXN0KQorewor
ICAgIGdfZGJ1c19wcm94eV9jYWxsX2ZpbmlzaChwcm94eSwgcmVzdWx0LCAwKTsKKyAgICBnX21h
aW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2Vi
RXh0ZW5zaW9uSXNvbGF0ZWRXb3JsZChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikK
K3sKKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGhlYWRlcj48L2hlYWRlcj48Ym9keT48ZGl2
IGlkPSdjb25zb2xlJz48L2Rpdj48L2JvZHk+PC9odG1sPiIsIDApOworICAgIHRlc3QtPndhaXRV
bnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgR093blB0cjxjaGFyPiByZXN1bHQ7CisgICAgZ3Vs
b25nIHNjcmlwdERpYWxvZ0lEID0gZ19zaWduYWxfY29ubmVjdCh0ZXN0LT5tX3dlYlZpZXcsICJz
Y3JpcHQtZGlhbG9nIiwgR19DQUxMQkFDSyhzY3JpcHREaWFsb2dDYWxsYmFjayksICZyZXN1bHQu
b3V0UHRyKCkpOworCisgICAgc3RhdGljIGNvbnN0IGNoYXIgKm1haW5Xb3JsZFNjcmlwdCA9Cisg
ICAgICAgICJ0b3AuZm9vID0gJ0Zvbyc7XG4iCisgICAgICAgICJkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnY29uc29sZScpLmlubmVySFRNTCA9IHRvcC5mb287XG4iCisgICAgICAgICJ3aW5kb3cu
b3BlbiA9IGZ1bmN0aW9uICgpIHsgYWxlcnQoJ01haW4gV29ybGQnKTsgfVxuIgorICAgICAgICAi
ZG9jdW1lbnQub3BlbigxLCAyLCAzKTsiOworICAgIHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0
VW50aWxGaW5pc2hlZChtYWluV29ybGRTY3JpcHQsIDApOworICAgIGdfYXNzZXJ0X2NtcHN0cihy
ZXN1bHQuZ2V0KCksID09LCAiTWFpbiBXb3JsZCIpOworICAgIHJlc3VsdC5jbGVhcigpOworCisg
ICAgV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCogamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkph
dmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Nv
bnNvbGUnKS5pbm5lckhUTUwiLCAwKTsKKyAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsK
KyAgICBHT3duUHRyPGNoYXI+IHZhbHVlU3RyaW5nKFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVz
dWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodmFs
dWVTdHJpbmcuZ2V0KCksID09LCAiRm9vIik7CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqaXNv
bGF0ZWRXb3JsZFNjcmlwdCA9CisgICAgICAgICJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29u
c29sZScpLmlubmVySFRNTCA9IHRvcC5mb287XG4iCisgICAgICAgICJ3aW5kb3cub3BlbiA9IGZ1
bmN0aW9uICgpIHsgYWxlcnQoJ0lzb2xhdGVkIFdvcmxkJyk7IH1cbiIKKyAgICAgICAgImRvY3Vt
ZW50Lm9wZW4oMSwgMiwgMyk7IjsKKyAgICBHUmVmUHRyPEdEQnVzUHJveHk+IHByb3h5ID0gYWRv
cHRHUmVmKGJ1cy0+Y3JlYXRlUHJveHkoIm9yZy53ZWJraXQuZ3RrLldlYkV4dGVuc2lvblRlc3Qi
LAorICAgICAgICAiL29yZy93ZWJraXQvZ3RrL1dlYkV4dGVuc2lvblRlc3QiICwgIm9yZy53ZWJr
aXQuZ3RrLldlYkV4dGVuc2lvblRlc3QiLCB0ZXN0LT5tX21haW5Mb29wKSk7CisgICAgZ19kYnVz
X3Byb3h5X2NhbGwocHJveHkuZ2V0KCksCisgICAgICAgICJSdW5KYXZhU2NyaXB0SW5Jc29sYXRl
ZFdvcmxkIiwKKyAgICAgICAgZ192YXJpYW50X25ldygiKHQmcykiLCB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X3BhZ2VfaWQodGVzdC0+bV93ZWJWaWV3KSwgaXNvbGF0ZWRXb3JsZFNjcmlwdCksCisgICAg
ICAgIEdfREJVU19DQUxMX0ZMQUdTX05PTkUsCisgICAgICAgIC0xLCAwLAorICAgICAgICByZWlu
dGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KHJ1bkphdmFTY3JpcHRJbklzb2xhdGVk
V29ybGRGaW5pc2hlZENhbGxiYWNrKSwKKyAgICAgICAgdGVzdCk7CisgICAgZ19tYWluX2xvb3Bf
cnVuKHRlc3QtPm1fbWFpbkxvb3ApOworICAgIGdfYXNzZXJ0X2NtcHN0cihyZXN1bHQuZ2V0KCks
ID09LCAiSXNvbGF0ZWQgV29ybGQiKTsKKyAgICByZXN1bHQuY2xlYXIoKTsKKworICAgIC8vIENo
ZWNrIHRoYXQgJ3RvcC5mb28nIGRlZmluZWQgaW4gbWFpbiB3b3JsZCBpcyBub3QgdmlzaWJsZSBp
biBpc29sYXRlZCB3b3JsZC4KKyAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNj
cmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29s
ZScpLmlubmVySFRNTCIsIDApOworICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOworICAg
IHZhbHVlU3RyaW5nLnNldChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhq
YXZhc2NyaXB0UmVzdWx0KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgp
LCA9PSwgInVuZGVmaW5lZCIpOworCisgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KHRl
c3QtPm1fd2ViVmlldywgc2NyaXB0RGlhbG9nSUQpOworfQorCit2b2lkIGJlZm9yZUFsbCgpCit7
CisgICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF93ZWJfZXh0ZW5zaW9uc19kaXJlY3Rvcnkod2Vi
a2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCksIFdFQktJVF9URVNUX1dFQl9FWFRFTlNJT05T
X0RJUik7CisgICAgYnVzID0gbmV3IFdlYktpdFRlc3RCdXMoKTsKKyAgICBpZiAoIWJ1cy0+cnVu
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYkV4
dGVuc2lvbiIsICJkb20tZG9jdW1lbnQtdGl0bGUiLCB0ZXN0V2ViRXh0ZW5zaW9uR2V0VGl0bGUp
OworICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYkV4dGVuc2lvbiIsICJkb2N1bWVudC1s
b2FkZWQtc2lnbmFsIiwgdGVzdERvY3VtZW50TG9hZGVkU2lnbmFsKTsKKyAgICBXZWJWaWV3VGVz
dDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgIndlYi1wcm9jZXNzLWNyYXNoZWQiLCB0ZXN0V2ViS2l0
V2ViVmlld1Byb2Nlc3NDcmFzaGVkKTsKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJF
eHRlbnNpb24iLCAid2luZG93LW9iamVjdC1jbGVhcmVkIiwgdGVzdFdlYkV4dGVuc2lvbldpbmRv
d09iamVjdENsZWFyZWQpOworICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYkV4dGVuc2lv
biIsICJpc29sYXRlZC13b3JsZCIsIHRlc3RXZWJFeHRlbnNpb25Jc29sYXRlZFdvcmxkKTsKK30K
Kwordm9pZCBhZnRlckFsbCgpCit7CisgICAgZGVsZXRlIGJ1czsKK30KZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0QWNjZXNzaWJpbGl0
eS5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdEFj
Y2Vzc2liaWxpdHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ZWUw
NGIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJH
dGsvVGVzdFdlYktpdEFjY2Vzc2liaWxpdHkuY3BwCkBAIC0wLDAgKzEsMjI1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
bmNsdWRlICJUZXN0TWFpbi5oIgorI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCisKKy8vIFRoZSBs
aWJhdHNwaSBoZWFkZXJzIGRvbid0IHVzZSBHX0JFR0lOX0RFQ0xTCitleHRlcm4gIkMiIHsKKyNp
bmNsdWRlIDxhdHNwaS9hdHNwaS5oPgorfQorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRl
IDxmY250bC5oPgorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNs
dWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisK
Ky8vIE5hbWUgb2YgdGhlIHRlc3Qgc2VydmVyIGFwcGxpY2F0aW9uIGNyZWF0aW5nIHRoZSB3ZWJW
aWV3IG9iamVjdC4KK3N0YXRpYyBjb25zdCBjaGFyKiBrVGVzdFNlcnZlckFwcE5hbWUgPSAiQWNj
ZXNzaWJpbGl0eVRlc3RTZXJ2ZXIiOworCisvLyBNYXggc2Vjb25kcyB0byB3YWl0IGZvciB0aGUg
dGVzdCBzZXJ2ZXIgYmVmb3JlIGluc3BlY3RpbmcgaXQuCitzdGF0aWMgY29uc3QgaW50IGtNYXhX
YWl0Rm9yQ2hpbGQgPSA1OworCisvLyBUaGUgUElEIGZvciB0aGUgdGVzdCBzZXJ2ZXIgcnVubmlu
Zywgc28gd2UgY2FuIGtpbGwgaXQgaWYgbmVlZGVkLgorc3RhdGljIEdQaWQga0NoaWxkUHJvY2Vz
c1BpZCA9IDA7CisKKy8vIFdoZXRoZXIgdGhlIGNoaWxkIGhhcyByZXBsaWVkIGFuZCBpdCdzIHJl
YWR5Lgorc3RhdGljIGJvb2wga0NoaWxkSXNSZWFkeSA9IGZhbHNlOworCitzdGF0aWMgdm9pZCBz
dG9wVGVzdFNlcnZlcigpCit7CisgICAgLy8gRG8gbm90aGluZyBpZiB0aGVyZSdzIG5vIHNlcnZl
ciBydW5uaW5nLgorICAgIGlmICgha0NoaWxkUHJvY2Vzc1BpZCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgZ19zcGF3bl9jbG9zZV9waWQoa0NoaWxkUHJvY2Vzc1BpZCk7CisgICAga2lsbChrQ2hp
bGRQcm9jZXNzUGlkLCBTSUdURVJNKTsKKyAgICBrQ2hpbGRQcm9jZXNzUGlkID0gMDsKK30KKwor
c3RhdGljIHZvaWQgc2lnQWJvcnRIYW5kbGVyKGludCBzaWdOdW0pCit7CisgICAgLy8gSnVzdCBz
dG9wIHRoZSB0ZXN0IHNlcnZlciBpZiBTSUdBQlJUIHdhcyByZWNlaXZlZC4KKyAgICBzdG9wVGVz
dFNlcnZlcigpOworfQorCitzdGF0aWMgZ3BvaW50ZXIgdGVzdFNlcnZlck1vbml0b3JUaHJlYWRG
dW5jKGdwb2ludGVyKQoreworICAgIC8vIFdhaXQgZm9yIHRoZSBzcGVjaWZpZWQgdGltZW91dCB0
byBoYXBwZW4uCisgICAgZ191c2xlZXAoa01heFdhaXRGb3JDaGlsZCAqIEdfVVNFQ19QRVJfU0VD
KTsKKworICAgIC8vIEtpbGwgdGhlIGNoaWxkIHByb2Nlc3MgaWYgbm90IHJlYWR5IHlldC4KKyAg
ICBpZiAoIWtDaGlsZElzUmVhZHkpCisgICAgICAgIHN0b3BUZXN0U2VydmVyKCk7CisKKyAgICBn
X3RocmVhZF9leGl0KDApOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzdGFydFRl
c3RTZXJ2ZXJNb25pdG9yKCkKK3sKKyAgICBrQ2hpbGRJc1JlYWR5ID0gZmFsc2U7CisgICAgZ190
aHJlYWRfbmV3KCJUZXN0U2VydmVyTW9uaXRvciIsIHRlc3RTZXJ2ZXJNb25pdG9yVGhyZWFkRnVu
YywgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHN0YXJ0VGVzdFNlcnZlcigpCit7CisgICAgLy8gUHJl
cGFyZSBhcmd2W10gZm9yIHNwYXduaW5nIHRoZSBzZXJ2ZXIgcHJvY2Vzcy4KKyAgICBHT3duUHRy
PGNoYXI+IHRlc3RTZXJ2ZXJQYXRoKGdfYnVpbGRfZmlsZW5hbWUoV0VCS0lUX0VYRUNfUEFUSCwg
IlRlc3RXZWJLaXRBUEkiLCAiV2ViS2l0Mkd0ayIsIGtUZXN0U2VydmVyQXBwTmFtZSwgTlVMTCkp
OworCisgICAgY2hhciogdGVzdFNlcnZlckFyZ3ZbMl07CisgICAgdGVzdFNlcnZlckFyZ3ZbMF0g
PSB0ZXN0U2VydmVyUGF0aC5nZXQoKTsKKyAgICB0ZXN0U2VydmVyQXJndlsxXSA9IDA7CisKKyAg
ICAvLyBTcGF3biB0aGUgc2VydmVyLCBnZXR0aW5nIGl0cyBzdGRvdXQgZmlsZSBkZXNjcmlwdG9y
IHRvIHNldCBhCisgICAgLy8gY29tbXVuaWNhdGlvbiBjaGFubmVsLCBzbyB3ZSBrbm93IHdoZW4g
aXQncyByZWFkeS4KKyAgICBpbnQgY2hpbGRTdGRvdXQgPSAwOworICAgIGlmICghZ19zcGF3bl9h
c3luY193aXRoX3BpcGVzKDAsIHRlc3RTZXJ2ZXJBcmd2LCAwLCBzdGF0aWNfY2FzdDxHU3Bhd25G
bGFncz4oMCksIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtDaGls
ZFByb2Nlc3NQaWQsIDAsICZjaGlsZFN0ZG91dCwgMCwgMCkpIHsKKyAgICAgICAgY2xvc2UoY2hp
bGRTdGRvdXQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gU3RhcnQgbW9uaXRv
cmluZyB0aGUgdGVzdCBzZXJ2ZXIgKGluIGEgc2VwYXJhdGUgdGhyZWFkKSB0bworICAgIC8vIGVu
c3VyZSB3ZSBkb24ndCBibG9jayBvbiB0aGUgY2hpbGQgcHJvY2VzcyBtb3JlIHRoYW4gYSB0aW1l
b3V0LgorICAgIHN0YXJ0VGVzdFNlcnZlck1vbml0b3IoKTsKKworICAgIGNoYXIgbXNnWzJdOwor
ICAgIEdJT0NoYW5uZWwqIGlvQ2hhbm5lbCA9IGdfaW9fY2hhbm5lbF91bml4X25ldyhjaGlsZFN0
ZG91dCk7CisgICAgaWYgKGdfaW9fY2hhbm5lbF9yZWFkX2NoYXJzKGlvQ2hhbm5lbCwgbXNnLCAy
LCAwLCAwKSA9PSBHX0lPX1NUQVRVU19OT1JNQUwpIHsKKyAgICAgICAgLy8gQ2hlY2sgd2hldGhl
ciB0aGUgc2VydmVyIHNlbnQgYSBtZXNzYWdlIHNheWluZyBpdCdzIHJlYWR5CisgICAgICAgIC8v
IGFuZCBzdG9yZSB0aGUgcmVzdWx0IGdsb2JhbGx5LCBzbyB0aGUgbW9uaXRvciBjYW4gc2VlIGl0
LgorICAgICAgICBrQ2hpbGRJc1JlYWR5ID0gbXNnWzBdID09ICdPJyAmJiBtc2dbMV0gPT0gJ0sn
OworICAgIH0KKyAgICBnX2lvX2NoYW5uZWxfdW5yZWYoaW9DaGFubmVsKTsKKyAgICBjbG9zZShj
aGlsZFN0ZG91dCk7CisKKyAgICAvLyBUaGUgdGltZW91dCB3YXMgcmVhY2hlZCBhbmQgdGhlIHNl
cnZlciBpcyBub3QgcmVhZHkgeWV0LCBzbworICAgIC8vIHN0b3AgaXQgaW5tZWRpYXRlbHksIGFu
ZCBsZXQgdGhlIHVuaXQgdGVzdHMgZmFpbC4KKyAgICBpZiAoIWtDaGlsZElzUmVhZHkpCisgICAg
ICAgIHN0b3BUZXN0U2VydmVyKCk7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrQXRzcGlBY2Nlc3Np
YmxlKEF0c3BpQWNjZXNzaWJsZSogYWNjZXNzaWJsZSwgY29uc3QgY2hhciogdGFyZ2V0TmFtZSwg
QXRzcGlSb2xlIHRhcmdldFJvbGUpCit7CisgICAgZ19hc3NlcnQoQVRTUElfSVNfQUNDRVNTSUJM
RShhY2Nlc3NpYmxlKSk7CisKKyAgICBHT3duUHRyPGNoYXI+IG5hbWUoYXRzcGlfYWNjZXNzaWJs
ZV9nZXRfbmFtZShhY2Nlc3NpYmxlLCAwKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRhcmdldE5h
bWUsID09LCBuYW1lLmdldCgpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGFyZ2V0Um9sZSwgPT0s
IGF0c3BpX2FjY2Vzc2libGVfZ2V0X3JvbGUoYWNjZXNzaWJsZSwgMCkpOworfQorCitzdGF0aWMg
R1JlZlB0cjxBdHNwaUFjY2Vzc2libGU+IGZpbmRUZXN0U2VydmVyQXBwbGljYXRpb24oKQorewor
ICAgIC8vIE9ubHkgb25lIGRlc2t0b3AgaXMgc3VwcG9ydGVkIGJ5IEFUU1BJIGF0IHRoZSBtb21l
bnQuCisgICAgR1JlZlB0cjxBdHNwaUFjY2Vzc2libGU+IGRlc2t0b3AgPSBhZG9wdEdSZWYoYXRz
cGlfZ2V0X2Rlc2t0b3AoMCkpOworCisgICAgLy8gTG9vayBmb3IgdGhlIHNlcnZlciBhcHBsaWNh
dGlvbiBpbiB0aGUgbGlzdCBvZiBhcHBzLgorICAgIEdSZWZQdHI8QXRzcGlBY2Nlc3NpYmxlPiBj
dXJyZW50OworICAgIGludCBjaGlsZENvdW50ID0gYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRf
Y291bnQoZGVza3RvcC5nZXQoKSwgMCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZENv
dW50OyBpKyspIHsKKyAgICAgICAgY3VycmVudCA9IGFkb3B0R1JlZihhdHNwaV9hY2Nlc3NpYmxl
X2dldF9jaGlsZF9hdF9pbmRleChkZXNrdG9wLmdldCgpLCBpLCAwKSk7CisgICAgICAgIGlmICgh
Z19zdHJjbXAwKGF0c3BpX2FjY2Vzc2libGVfZ2V0X25hbWUoY3VycmVudC5nZXQoKSwgMCksIGtU
ZXN0U2VydmVyQXBwTmFtZSkpCisgICAgICAgICAgICByZXR1cm4gY3VycmVudDsKKyAgICB9CisK
KyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdGVzdEF0c3BpQmFzaWNIaWVyYXJjaHko
V2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8gVGhlIHRlc3Qgc2Vy
dmVyJ3MgYWNjZXNzaWJpbGl0eSBvYmplY3QgKFVJIFByb2Nlc3MpLgorICAgIEdSZWZQdHI8QXRz
cGlBY2Nlc3NpYmxlPiB0ZXN0U2VydmVyQXBwID0gZmluZFRlc3RTZXJ2ZXJBcHBsaWNhdGlvbigp
OworICAgIGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUodGVzdFNlcnZlckFwcC5nZXQoKSkp
OworICAgIGNoZWNrQXRzcGlBY2Nlc3NpYmxlKHRlc3RTZXJ2ZXJBcHAuZ2V0KCksICJBY2Nlc3Np
YmlsaXR5VGVzdFNlcnZlciIsIEFUU1BJX1JPTEVfQVBQTElDQVRJT04pOworCisgICAgLy8gVGhl
IG1haW4gd2luZG93J3MgYWNjZXNzaWJpbGl0eSBvYmplY3QgKFVJIFByb2Nlc3MpLgorICAgIEdS
ZWZQdHI8QXRzcGlBY2Nlc3NpYmxlPiBjdXJyZW50UGFyZW50ID0gdGVzdFNlcnZlckFwcDsKKyAg
ICBHUmVmUHRyPEF0c3BpQWNjZXNzaWJsZT4gY3VycmVudENoaWxkID0gYWRvcHRHUmVmKGF0c3Bp
X2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQYXJlbnQuZ2V0KCksIDAsIDAp
KTsKKyAgICBnX2Fzc2VydChBVFNQSV9JU19BQ0NFU1NJQkxFKGN1cnJlbnRDaGlsZC5nZXQoKSkp
OworICAgIGNoZWNrQXRzcGlBY2Nlc3NpYmxlKGN1cnJlbnRDaGlsZC5nZXQoKSwgIiIsIEFUU1BJ
X1JPTEVfRlJBTUUpOworCisgICAgLy8gVGhlIFdlYlZpZXcncyBhY2Nlc3NpYmlsaXR5IG9iamVj
dCAoVUkgUHJvY2VzcykuCisgICAgY3VycmVudFBhcmVudCA9IGN1cnJlbnRDaGlsZDsKKyAgICBj
dXJyZW50Q2hpbGQgPSBhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChjdXJyZW50
UGFyZW50LmdldCgpLCAwLCAwKTsKKyAgICBnX2Fzc2VydChBVFNQSV9JU19BQ0NFU1NJQkxFKGN1
cnJlbnRDaGlsZC5nZXQoKSkpOworICAgIGNoZWNrQXRzcGlBY2Nlc3NpYmxlKGN1cnJlbnRDaGls
ZC5nZXQoKSwgIiIsIEFUU1BJX1JPTEVfRklMTEVSKTsKKworICAgIC8vIFRoZSBXZWJQYWdlJ3Mg
YWNjZXNzaWJpbGl0eSBvYmplY3QgKFdlYiBQcm9jZXNzKS4KKyAgICBjdXJyZW50UGFyZW50ID0g
Y3VycmVudENoaWxkOworICAgIGN1cnJlbnRDaGlsZCA9IGF0c3BpX2FjY2Vzc2libGVfZ2V0X2No
aWxkX2F0X2luZGV4KGN1cnJlbnRQYXJlbnQuZ2V0KCksIDAsIDApOworICAgIGdfYXNzZXJ0KEFU
U1BJX0lTX0FDQ0VTU0lCTEUoY3VycmVudENoaWxkLmdldCgpKSk7CisgICAgY2hlY2tBdHNwaUFj
Y2Vzc2libGUoY3VycmVudENoaWxkLmdldCgpLCAiIiwgQVRTUElfUk9MRV9GSUxMRVIpOworCisg
ICAgLy8gSFRNTCByb290IGVsZW1lbnQncyBhY2Nlc3NpYmxlIGVsZW1lbnQgKFdlYiBQcm9jZXNz
KS4KKyAgICBjdXJyZW50UGFyZW50ID0gY3VycmVudENoaWxkOworICAgIGN1cnJlbnRDaGlsZCA9
IGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQYXJlbnQuZ2V0KCks
IDAsIDApOworICAgIGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY3VycmVudENoaWxkLmdl
dCgpKSk7CisKKyAgICAvLyBIVE1MIGJvZHkncyBhY2Nlc3NpYmxlIGVsZW1lbnQgKFdlYiBQcm9j
ZXNzKS4KKyAgICBjdXJyZW50UGFyZW50ID0gY3VycmVudENoaWxkOworICAgIGN1cnJlbnRDaGls
ZCA9IGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQYXJlbnQuZ2V0
KCksIDAsIDApOworICAgIGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY3VycmVudENoaWxk
LmdldCgpKSk7CisgICAgY2hlY2tBdHNwaUFjY2Vzc2libGUoY3VycmVudENoaWxkLmdldCgpLCAi
IiwgQVRTUElfUk9MRV9ET0NVTUVOVF9XRUIpOworCisgICAgLy8gSFRNTCBIMSdzIGFjY2Vzc2li
bGUgZWxlbWVudCAoV2ViIFByb2Nlc3MpLgorICAgIGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50Q2hp
bGQ7CisgICAgY3VycmVudENoaWxkID0gYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5k
ZXgoY3VycmVudFBhcmVudC5nZXQoKSwgMCwgMCk7CisgICAgZ19hc3NlcnQoQVRTUElfSVNfQUND
RVNTSUJMRShjdXJyZW50Q2hpbGQuZ2V0KCkpKTsKKyAgICBjaGVja0F0c3BpQWNjZXNzaWJsZShj
dXJyZW50Q2hpbGQuZ2V0KCksICJUaGlzIGlzIGEgdGVzdCIsIEFUU1BJX1JPTEVfSEVBRElORyk7
CisKKyAgICAvLyBIVE1MIGZpcnN0IHBhcmFncmFwaCdzIGFjY2Vzc2libGUgZWxlbWVudCAoV2Vi
IFByb2Nlc3MpLgorICAgIGN1cnJlbnRDaGlsZCA9IGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxk
X2F0X2luZGV4KGN1cnJlbnRQYXJlbnQuZ2V0KCksIDEsIDApOworICAgIGdfYXNzZXJ0KEFUU1BJ
X0lTX0FDQ0VTU0lCTEUoY3VycmVudENoaWxkLmdldCgpKSk7CisgICAgY2hlY2tBdHNwaUFjY2Vz
c2libGUoY3VycmVudENoaWxkLmdldCgpLCAiIiwgQVRTUElfUk9MRV9QQVJBR1JBUEgpOworCisg
ICAgLy8gSFRNTCBzZWNvbmQgcGFyYWdyYXBoJ3MgYWNjZXNzaWJsZSBlbGVtZW50IChXZWIgUHJv
Y2VzcykuCisgICAgY3VycmVudENoaWxkID0gYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRf
aW5kZXgoY3VycmVudFBhcmVudC5nZXQoKSwgMiwgMCk7CisgICAgZ19hc3NlcnQoQVRTUElfSVNf
QUNDRVNTSUJMRShjdXJyZW50Q2hpbGQuZ2V0KCkpKTsKKyAgICBjaGVja0F0c3BpQWNjZXNzaWJs
ZShjdXJyZW50Q2hpbGQuZ2V0KCksICIiLCBBVFNQSV9ST0xFX1BBUkFHUkFQSCk7CisKKyAgICAv
LyBIVE1MIGxpbmsncyBhY2Nlc3NpYmxlIGVsZW1lbnQgKFdlYiBQcm9jZXNzKS4KKyAgICBjdXJy
ZW50UGFyZW50ID0gY3VycmVudENoaWxkOworICAgIGN1cnJlbnRDaGlsZCA9IGF0c3BpX2FjY2Vz
c2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQYXJlbnQuZ2V0KCksIDAsIDApOworICAg
IGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY3VycmVudENoaWxkLmdldCgpKSk7CisgICAg
Y2hlY2tBdHNwaUFjY2Vzc2libGUoY3VycmVudENoaWxkLmdldCgpLCAiYSBsaW5rIiwgQVRTUElf
Uk9MRV9MSU5LKTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQoreworICAgIC8vIFdlIGluc3RhbGwg
YSBoYW5kbGVyIHRvIGVuc3VyZSB0aGF0IHdlIGtpbGwgdGhlIGNoaWxkIHByb2Nlc3MKKyAgICAv
LyBpZiB0aGUgcGFyZW50IGRpZXMgYmVjYXVzZSBvZiB3aGF0ZXZlciB0aGUgcmVhc29uIGlzLgor
ICAgIHNpZ25hbChTSUdBQlJULCBzaWdBYm9ydEhhbmRsZXIpOworCisgICAgLy8gU3RhcnQgdGhl
IGFjY2Vzc2liaWxpdHkgdGVzdCBzZXJ2ZXIgYW5kIGxvYWQgdGhlIHRlc3RzLgorICAgIHN0YXJ0
VGVzdFNlcnZlcigpOworICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdEFjY2Vzc2liaWxpdHki
LCAiYXRzcGktYmFzaWMtaGllcmFyY2h5IiwgdGVzdEF0c3BpQmFzaWNIaWVyYXJjaHkpOworfQor
Cit2b2lkIGFmdGVyQWxsKCkKK3sKKyAgICAvLyBFbnN1cmUgd2Ugc3RvcCB0aGUgc2VydmVyLgor
ICAgIHN0b3BUZXN0U2VydmVyKCk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdEZhdmljb25EYXRhYmFzZS5jcHAgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdEZhdmljb25EYXRhYmFzZS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEwNmY3NAotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0
RmF2aWNvbkRhdGFiYXNlLmNwcApAQCAtMCwwICsxLDI3NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiV2Vi
S2l0VGVzdFNlcnZlci5oIgorI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCisjaW5jbHVkZSA8Z2xp
Yi9nc3RkaW8uaD4KKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKyNpbmNsdWRlIDx3dGYvZ29i
amVjdC9HT3duUHRyLmg+CisKK3N0YXRpYyBXZWJLaXRUZXN0U2VydmVyKiBrU2VydmVyOworc3Rh
dGljIGNoYXIqIGtUZW1wRGlyZWN0b3J5OworCitjbGFzcyBGYXZpY29uRGF0YWJhc2VUZXN0OiBw
dWJsaWMgV2ViVmlld1Rlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUo
RmF2aWNvbkRhdGFiYXNlVGVzdCk7CisKKyAgICBGYXZpY29uRGF0YWJhc2VUZXN0KCkKKyAgICAg
ICAgOiBtX3dlYkNvbnRleHQod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCkpCisgICAg
ICAgICwgbV9mYXZpY29uKDApCisgICAgICAgICwgbV9lcnJvcigwKQorICAgICAgICAsIG1fZmF2
aWNvbk5vdGlmaWNhdGlvblJlY2VpdmVkKGZhbHNlKQorICAgIHsKKyAgICAgICAgV2ViS2l0RmF2
aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZmF2aWNvbl9k
YXRhYmFzZShtX3dlYkNvbnRleHQpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGRhdGFiYXNl
LCAiZmF2aWNvbi1jaGFuZ2VkIiwgR19DQUxMQkFDSyhmYXZpY29uQ2hhbmdlZENhbGxiYWNrKSwg
dGhpcyk7CisgICAgfQorCisgICAgfkZhdmljb25EYXRhYmFzZVRlc3QoKQorICAgIHsKKyAgICAg
ICAgaWYgKG1fZmF2aWNvbikKKyAgICAgICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShtX2Zh
dmljb24pOworCisgICAgICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJr
aXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2UobV93ZWJDb250ZXh0KTsKKyAgICAg
ICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKGRhdGFiYXNlLCBHX1NJR05B
TF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9p
ZCBmYXZpY29uQ2hhbmdlZENhbGxiYWNrKFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2Us
IGNvbnN0IGNoYXIqIHBhZ2VVUkksIGNvbnN0IGNoYXIqIGZhdmljb25VUkksIEZhdmljb25EYXRh
YmFzZVRlc3QqIHRlc3QpCisgICAgeworICAgICAgICBpZiAoIWdfc3RyY21wMCh3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X3VyaSh0ZXN0LT5tX3dlYlZpZXcpLCBwYWdlVVJJKSkKKyAgICAgICAgICAgIHRl
c3QtPm1fZmF2aWNvblVSSSA9IGZhdmljb25VUkk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQg
dmlld0Zhdmljb25DaGFuZ2VkQ2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgR1BhcmFt
U3BlYyogcHNwZWMsIGdwb2ludGVyIGRhdGEpCisgICAgeworICAgICAgICBGYXZpY29uRGF0YWJh
c2VUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8RmF2aWNvbkRhdGFiYXNlVGVzdCo+KGRhdGEpOwor
ICAgICAgICBnX2Fzc2VydCh0ZXN0LT5tX3dlYlZpZXcgPT0gd2ViVmlldyk7CisgICAgICAgIHRl
c3QtPm1fZmF2aWNvbk5vdGlmaWNhdGlvblJlY2VpdmVkID0gdHJ1ZTsKKyAgICAgICAgdGVzdC0+
cXVpdE1haW5Mb29wKCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZ2V0RmF2aWNvbkNhbGxi
YWNrKEdPYmplY3QqIHNvdXJjZU9iamVjdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIHZvaWQqIGRh
dGEpCisgICAgeworICAgICAgICBGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0ID0gc3RhdGljX2Nh
c3Q8RmF2aWNvbkRhdGFiYXNlVGVzdCo+KGRhdGEpOworICAgICAgICBXZWJLaXRGYXZpY29uRGF0
YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNl
KHRlc3QtPm1fd2ViQ29udGV4dCk7CisgICAgICAgIHRlc3QtPm1fZmF2aWNvbiA9IHdlYmtpdF9m
YXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX2ZpbmlzaChkYXRhYmFzZSwgcmVzdWx0LCAmdGVz
dC0+bV9lcnJvci5vdXRQdHIoKSk7CisgICAgICAgIHRlc3QtPnF1aXRNYWluTG9vcCgpOworICAg
IH0KKworICAgIHZvaWQgd2FpdFVudGlsRmF2aWNvbkNoYW5nZWQoKQorICAgIHsKKyAgICAgICAg
bV9mYXZpY29uTm90aWZpY2F0aW9uUmVjZWl2ZWQgPSBmYWxzZTsKKyAgICAgICAgdW5zaWduZWQg
bG9uZyBoYW5kbGVySUQgPSBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgIm5vdGlmeTo6ZmF2
aWNvbiIsIEdfQ0FMTEJBQ0sodmlld0Zhdmljb25DaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKKyAg
ICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgICAgICBnX3NpZ25hbF9oYW5k
bGVyX2Rpc2Nvbm5lY3QobV93ZWJWaWV3LCBoYW5kbGVySUQpOworICAgIH0KKworICAgIHZvaWQg
Z2V0RmF2aWNvbkZvclBhZ2VVUklBbmRXYWl0VW50aWxSZWFkeShjb25zdCBjaGFyKiBwYWdlVVJJ
KQorICAgIHsKKyAgICAgICAgbV9lcnJvci5jbGVhcigpOworICAgICAgICBpZiAobV9mYXZpY29u
KSB7CisgICAgICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3kobV9mYXZpY29uKTsKKyAgICAg
ICAgICAgIG1fZmF2aWNvbiA9IDA7CisgICAgICAgIH0KKworICAgICAgICBXZWJLaXRGYXZpY29u
RGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2RhdGFi
YXNlKG1fd2ViQ29udGV4dCk7CisgICAgICAgIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9m
YXZpY29uKGRhdGFiYXNlLCBwYWdlVVJJLCAwLCBnZXRGYXZpY29uQ2FsbGJhY2ssIHRoaXMpOwor
ICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgfQorCisgICAgV2ViS2l0
V2ViQ29udGV4dCogbV93ZWJDb250ZXh0OworICAgIGNhaXJvX3N1cmZhY2VfdCogbV9mYXZpY29u
OworICAgIENTdHJpbmcgbV9mYXZpY29uVVJJOworICAgIEdPd25QdHI8R0Vycm9yPiBtX2Vycm9y
OworICAgIGJvb2wgbV9mYXZpY29uTm90aWZpY2F0aW9uUmVjZWl2ZWQ7Cit9OworCitzdGF0aWMg
dm9pZAorc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbWVz
c2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSogcXVlcnksIFNvdXBDbGllbnRDb250
ZXh0KiBjb250ZXh0LCB2b2lkKiBkYXRhKQoreworICAgIGlmIChtZXNzYWdlLT5tZXRob2QgIT0g
U09VUF9NRVRIT0RfR0VUKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3Nh
Z2UsIFNPVVBfU1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9mYXZpY29uLmljbyIpKSB7CisgICAgICAg
IHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7
CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2Jv
ZHkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2hhciogY29udGVudHM7CisgICAg
Z3NpemUgbGVuZ3RoOworICAgIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2ljb24vZmF2aWNvbi5p
Y28iKSkgeworICAgICAgICBHT3duUHRyPGNoYXI+IHBhdGhUb0Zhdmljb24oZ19idWlsZF9maWxl
bmFtZShUZXN0OjpnZXRXZWJLaXQxVGVzdFJlc291Y2VzRGlyKCkuZGF0YSgpLCAiYmxhbmsuaWNv
IiwgTlVMTCkpOworICAgICAgICBnX2ZpbGVfZ2V0X2NvbnRlbnRzKHBhdGhUb0Zhdmljb24uZ2V0
KCksICZjb250ZW50cywgJmxlbmd0aCwgMCk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2Fw
cGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBjb250ZW50cywg
bGVuZ3RoKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvbm9mYXZpY29uIikp
IHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIG5vRmF2aWNvbkhUTUwgPSAiPGh0bWw+PGhl
YWQ+PGJvZHk+dGVzdDwvYm9keT48L2h0bWw+IjsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlf
YXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgbm9GYXZp
Y29uSFRNTCwgc3RybGVuKG5vRmF2aWNvbkhUTUwpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBz
dGF0aWMgY29uc3QgY2hhciogY29udGVudHNIVE1MID0gIjxodG1sPjxoZWFkPjxsaW5rIHJlbD0n
aWNvbicgaHJlZj0nL2ljb24vZmF2aWNvbi5pY28nIHR5cGU9J2ltYWdlL3gtaWNvOyBjaGFyc2V0
PWJpbmFyeSc+PC9oZWFkPjxib2R5PnRlc3Q8L2JvZHk+PC9odG1sPiI7CisgICAgICAgIHNvdXBf
bWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9T
VEFUSUMsIGNvbnRlbnRzSFRNTCwgc3RybGVuKGNvbnRlbnRzSFRNTCkpOworICAgIH0KKworICAg
IHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKKyAgICBz
b3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKK30KKwor
c3RhdGljIHZvaWQgdGVzdE5vdEluaXRpYWxpemVkKEZhdmljb25EYXRhYmFzZVRlc3QqIHRlc3Qp
Cit7CisgICAgLy8gVHJ5IHRvIHJldHJpZXZlIGEgdmFsaWQgZmF2aWNvbiBmcm9tIGEgbm90IGlu
aXRpYWxpemVkIGRhdGFiYXNlLgorICAgIHRlc3QtPmdldEZhdmljb25Gb3JQYWdlVVJJQW5kV2Fp
dFVudGlsUmVhZHkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2ZvbyIpLmRhdGEoKSk7CisgICAg
Z19hc3NlcnQoIXRlc3QtPm1fZmF2aWNvbik7CisgICAgZ19hc3NlcnQodGVzdC0+bV9lcnJvcik7
CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fZXJyb3ItPmNvZGUsID09LCBXRUJLSVRfRkFW
SUNPTl9EQVRBQkFTRV9FUlJPUl9OT1RfSU5JVElBTElaRUQpOworfQorCitzdGF0aWMgdm9pZCB0
ZXN0U2V0RGlyZWN0b3J5KEZhdmljb25EYXRhYmFzZVRlc3QqIHRlc3QpCit7CisgICAgd2Via2l0
X3dlYl9jb250ZXh0X3NldF9mYXZpY29uX2RhdGFiYXNlX2RpcmVjdG9yeSh0ZXN0LT5tX3dlYkNv
bnRleHQsIGtUZW1wRGlyZWN0b3J5KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoa1RlbXBEaXJlY3Rv
cnksID09LCB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2VfZGlyZWN0b3J5
KHRlc3QtPm1fd2ViQ29udGV4dCkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0Q2xlYXJEYXRhYmFz
ZShGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0KQoreworICAgIFdlYktpdEZhdmljb25EYXRhYmFz
ZSogZGF0YWJhc2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2UodGVz
dC0+bV93ZWJDb250ZXh0KTsKKyAgICB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9jbGVhcihkYXRh
YmFzZSk7CisKKyAgICBHT3duUHRyPGNoYXI+IGljb25VUkkod2Via2l0X2Zhdmljb25fZGF0YWJh
c2VfZ2V0X2Zhdmljb25fdXJpKGRhdGFiYXNlLCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvZm9v
IikuZGF0YSgpKSk7CisgICAgZ19hc3NlcnQoIWljb25VUkkpOworfQorCitzdGF0aWMgdm9pZCB0
ZXN0R2V0RmF2aWNvbihGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0KQoreworICAgIC8vIFdlIG5l
ZWQgdG8gbG9hZCB0aGUgcGFnZSBmaXJzdCB0byBlbnN1cmUgdGhlIGljb24gZGF0YSB3aWxsIGJl
CisgICAgLy8gaW4gdGhlIGRhdGFiYXNlIGluIGNhc2UgdGhlcmUncyBhbiBhc3NvY2lhdGVkIGZh
dmljb24uCisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvZm9vIiku
ZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGYXZpY29uQ2hhbmdlZCgpOworICAgIENTdHJp
bmcgZmF2aWNvblVSSSA9IGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pY29uL2Zhdmljb24uaWNv
Iik7CisKKyAgICAvLyBDaGVjayB0aGUgQVBJIHJldHJpZXZpbmcgYSB2YWxpZCBmYXZpY29uLgor
ICAgIHRlc3QtPmdldEZhdmljb25Gb3JQYWdlVVJJQW5kV2FpdFVudGlsUmVhZHkoa1NlcnZlci0+
Z2V0VVJJRm9yUGF0aCgiL2ZvbyIpLmRhdGEoKSk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9mYXZp
Y29uKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9mYXZpY29uVVJJLmRhdGEoKSwgPT0s
IGZhdmljb25VUkkuZGF0YSgpKTsKKyAgICBnX2Fzc2VydCghdGVzdC0+bV9lcnJvcik7CisKKyAg
ICAvLyBDaGVjayB0aGF0IHdpZHRoIGFuZCBoZWlnaHQgbWF0Y2ggdGhvc2UgZnJvbSBibGFuay5p
Y28gKDE2eDE2IGZhdmljb24pLgorICAgIGdfYXNzZXJ0X2NtcGludChjYWlyb19pbWFnZV9zdXJm
YWNlX2dldF93aWR0aCh0ZXN0LT5tX2Zhdmljb24pLCA9PSwgMTYpOworICAgIGdfYXNzZXJ0X2Nt
cGludChjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQodGVzdC0+bV9mYXZpY29uKSwgPT0s
IDE2KTsKKworICAgIC8vIENoZWNrIHRoYXQgYW5vdGhlciBwYWdlIHdpdGggdGhlIHNhbWUgZmF2
aWNvbiByZXR1cm4gdGhlIHNhbWUgaWNvbi4KKyAgICBjYWlyb19zdXJmYWNlX3QqIGZhdmljb24g
PSBjYWlyb19zdXJmYWNlX3JlZmVyZW5jZSh0ZXN0LT5tX2Zhdmljb24pOworICAgIHRlc3QtPmxv
YWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2JhciIpLmRhdGEoKSk7CisgICAgLy8gSXQn
cyBhIG5ldyBwYWdlIGluIHRoZSBkYXRhYmFzZSwgc28gZmF2aWNvbiB3aWxsIGNoYW5nZSB0d2lj
ZSwgZmlyc3QgdG8gcmVzZXQgaXQKKyAgICAvLyBhbmQgdGhlbiB3aGVuIHRoZSBpY29uIGlzIGxv
YWRlZC4KKyAgICB0ZXN0LT53YWl0VW50aWxGYXZpY29uQ2hhbmdlZCgpOworICAgIHRlc3QtPndh
aXRVbnRpbEZhdmljb25DaGFuZ2VkKCk7CisgICAgdGVzdC0+Z2V0RmF2aWNvbkZvclBhZ2VVUklB
bmRXYWl0VW50aWxSZWFkeShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvYmFyIikuZGF0YSgpKTsK
KyAgICBnX2Fzc2VydCh0ZXN0LT5tX2Zhdmljb24pOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXN0
LT5tX2Zhdmljb25VUkkuZGF0YSgpLCA9PSwgZmF2aWNvblVSSS5kYXRhKCkpOworICAgIGdfYXNz
ZXJ0KHRlc3QtPm1fZmF2aWNvbiA9PSBmYXZpY29uKTsKKyAgICBnX2Fzc2VydCghdGVzdC0+bV9l
cnJvcik7CisgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KGZhdmljb24pOworCisgICAgLy8gQ2hl
Y2sgdGhlIEFQSSByZXRyaWV2aW5nIGFuIGludmFsaWQgZmF2aWNvbi4KKyAgICB0ZXN0LT5sb2Fk
VVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9ub2Zhdmljb24iKS5kYXRhKCkpOworICAgIHRl
c3QtPndhaXRVbnRpbEZhdmljb25DaGFuZ2VkKCk7CisKKyAgICB0ZXN0LT5nZXRGYXZpY29uRm9y
UGFnZVVSSUFuZFdhaXRVbnRpbFJlYWR5KGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9ub2Zhdmlj
b24iKS5kYXRhKCkpOworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX2Zhdmljb24pOworICAgIGdfYXNz
ZXJ0KHRlc3QtPm1fZXJyb3IpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0R2V0RmF2aWNvblVSSShG
YXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0KQoreworICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSog
ZGF0YWJhc2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2UodGVzdC0+
bV93ZWJDb250ZXh0KTsKKworICAgIENTdHJpbmcgYmFzZVVSSSA9IGtTZXJ2ZXItPmdldFVSSUZv
clBhdGgoIi9mb28iKTsKKyAgICBHT3duUHRyPGNoYXI+IGljb25VUkkod2Via2l0X2Zhdmljb25f
ZGF0YWJhc2VfZ2V0X2Zhdmljb25fdXJpKGRhdGFiYXNlLCBiYXNlVVJJLmRhdGEoKSkpOworICAg
IEFTU0VSVF9DTVBfQ1NUUklORyhpY29uVVJJLmdldCgpLCA9PSwga1NlcnZlci0+Z2V0VVJJRm9y
UGF0aCgiL2ljb24vZmF2aWNvbi5pY28iKSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3
RmF2aWNvbihGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0KQoreworICAgIHRlc3QtPm1fZmF2aWNv
blVSSSA9IENTdHJpbmcoKTsKKworICAgIGNhaXJvX3N1cmZhY2VfdCogaWNvbkZyb21XZWJWaWV3
ID0gd2Via2l0X3dlYl92aWV3X2dldF9mYXZpY29uKHRlc3QtPm1fd2ViVmlldyk7CisgICAgZ19h
c3NlcnQoIWljb25Gcm9tV2ViVmlldyk7CisKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdl
dFVSSUZvclBhdGgoIi9mb28iKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbEZhdmljb25D
aGFuZ2VkKCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9mYXZpY29uTm90aWZpY2F0aW9uUmVjZWl2
ZWQpOworICAgIC8vIFRoZSBpY29uIGlzIGtub3duIGFuZCBoYXNuJ3QgY2hhbmdlZCBpbiB0aGUg
ZGF0YWJhc2UsIHNvIG5vdGlmeTo6ZmF2aWNvbiBpcyBlbWl0dGVkCisgICAgLy8gYnV0IFdlYktp
dEZhdmljb25EYXRhYmFzZTo6aWNvbi1jaGFuZ2VkIGlzbid0LgorICAgIGdfYXNzZXJ0KHRlc3Qt
Pm1fZmF2aWNvblVSSS5pc051bGwoKSk7CisKKyAgICBpY29uRnJvbVdlYlZpZXcgPSB3ZWJraXRf
d2ViX3ZpZXdfZ2V0X2Zhdmljb24odGVzdC0+bV93ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChpY29u
RnJvbVdlYlZpZXcpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfd2lkdGgoaWNvbkZyb21XZWJWaWV3KSwgPT0sIDE2KTsKKyAgICBnX2Fzc2VydF9jbXB1aW50
KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChpY29uRnJvbVdlYlZpZXcpLCA9PSwgMTYp
OworfQorCitzdGF0aWMgdm9pZCB0ZXN0RmF2aWNvbkRhdGFiYXNlKEZhdmljb25EYXRhYmFzZVRl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8gVGhlc2UgdGVzdHMgZGVwZW5kIG9u
IHRoaXMgb3JkZXIgdG8gcnVuIHByb3Blcmx5IHNvIHdlIGRlY2xhcmUgdGhlbSBpbiBhIHNpbmds
ZSBvbmUuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMTE0MzQuCisgICAgdGVzdE5vdEluaXRpYWxpemVkKHRlc3QpOworICAgIHRlc3RTZXREaXJl
Y3RvcnkodGVzdCk7CisgICAgdGVzdEdldEZhdmljb24odGVzdCk7CisgICAgdGVzdEdldEZhdmlj
b25VUkkodGVzdCk7CisgICAgdGVzdFdlYlZpZXdGYXZpY29uKHRlc3QpOworICAgIHRlc3RDbGVh
ckRhdGFiYXNlKHRlc3QpOworfQorCit2b2lkIGJlZm9yZUFsbCgpCit7CisgICAgLy8gU3RhcnQg
YSBzb3VwIHNlcnZlciBmb3IgdGVzdGluZy4KKyAgICBrU2VydmVyID0gbmV3IFdlYktpdFRlc3RT
ZXJ2ZXIoKTsKKyAgICBrU2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2spOworCisgICAga1RlbXBE
aXJlY3RvcnkgPSBnX2Rpcl9tYWtlX3RtcCgiV2ViS2l0MlRlc3RzLVhYWFhYWCIsIDApOworICAg
IGdfYXNzZXJ0KGtUZW1wRGlyZWN0b3J5KTsKKworICAgIC8vIEFkZCB0ZXN0cyB0byB0aGUgc3Vp
dGUuCisgICAgRmF2aWNvbkRhdGFiYXNlVGVzdDo6YWRkKCJXZWJLaXRGYXZpY29uRGF0YWJhc2Ui
LCAiZmF2aWNvbi1kYXRhYmFzZS10ZXN0IiwgdGVzdEZhdmljb25EYXRhYmFzZSk7Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdEZhdmljb25EYXRhYmFzZUZpbmFsaXplZENhbGxiYWNrKGdwb2ludGVy
LCBHT2JqZWN0KikKK3sKKyAgICBpZiAoIWdfZmlsZV90ZXN0KGtUZW1wRGlyZWN0b3J5LCBHX0ZJ
TEVfVEVTVF9JU19ESVIpKQorICAgICAgICByZXR1cm47CisKKyAgICBHT3duUHRyPGNoYXI+IGZp
bGVuYW1lKGdfYnVpbGRfZmlsZW5hbWUoa1RlbXBEaXJlY3RvcnksICJXZWJwYWdlSWNvbnMuZGIi
LCBOVUxMKSk7CisgICAgZ191bmxpbmsoZmlsZW5hbWUuZ2V0KCkpOworCisgICAgZ19ybWRpcihr
VGVtcERpcmVjdG9yeSk7Cit9CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworICAgIGRlbGV0ZSBrU2Vy
dmVyOworCisgICAgLy8gRGVsZXRlIHRoZSB0ZW1wb3JhcnkgZmlsZXMgYWZ0ZXIgdGhlIEljb25E
YXRhYmFzZSBoYXMgYmVlbgorICAgIC8vIGNsb3NlZCwgdGhhdCBpcywgb25jZSBXZWJLaXRGYXZp
Y29uRGF0YWJhc2UgaXMgYmVpbmcgZGVzdHJveWVkLgorICAgIFdlYktpdEZhdmljb25EYXRhYmFz
ZSogZGF0YWJhc2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2Uod2Vi
a2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCkpOworICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdf
T0JKRUNUKGRhdGFiYXNlKSwgd2Via2l0RmF2aWNvbkRhdGFiYXNlRmluYWxpemVkQ2FsbGJhY2ss
IDApOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3Rr
L1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxlci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdDJHdGsvVGVzdFdlYktpdEZpbmRDb250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5kMmVlZjRjCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxlci5jcHAK
QEAgLTAsMCArMSwzMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkxvYWRUcmFja2luZ1Rlc3QuaCIKKyNp
bmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+CisjaW5jbHVk
ZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCitzdGF0aWMgY29uc3QgY2hhciogdGVzdFN0cmlu
ZyA9ICI8aHRtbD48Ym9keT5maXJzdCB0ZXN0aW5nIHNlY29uZCB0ZXN0aW5nIHNlY29uZEhhbGY8
L2JvZHk+PC9odG1sPiI7CisKK2NsYXNzIEZpbmRDb250cm9sbGVyVGVzdDogcHVibGljIFdlYlZp
ZXdUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKEZpbmRDb250cm9s
bGVyVGVzdCk7CisKKyAgICBGaW5kQ29udHJvbGxlclRlc3QoKQorICAgICAgICA6IG1fZmluZENv
bnRyb2xsZXIod2Via2l0X3dlYl92aWV3X2dldF9maW5kX2NvbnRyb2xsZXIobV93ZWJWaWV3KSkK
KyAgICAgICAgLCBtX3J1bkZpbmRVbnRpbENvbXBsZXRpb24oZmFsc2UpCisgICAgeworICAgICAg
ICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKG1fZmluZENv
bnRyb2xsZXIuZ2V0KCkpKTsKKyAgICB9CisKKyAgICB+RmluZENvbnRyb2xsZXJUZXN0KCkKKyAg
ICB7CisgICAgICAgIGlmIChtX2ZpbmRDb250cm9sbGVyKQorICAgICAgICAgICAgZ19zaWduYWxf
aGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fZmluZENvbnRyb2xsZXIuZ2V0KCksIEdfU0lH
TkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOworICAgIH0KKworICAgIHZvaWQgZmlu
ZChjb25zdCBjaGFyKiBzZWFyY2hUZXh0LCBndWludDMyIGZpbmRPcHRpb25zLCBndWludCBtYXhN
YXRjaENvdW50KQorICAgIHsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX2ZpbmRDb250cm9s
bGVyLmdldCgpLCAiZm91bmQtdGV4dCIsIEdfQ0FMTEJBQ0soZm91bmRUZXh0Q2FsbGJhY2spLCB0
aGlzKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX2ZpbmRDb250cm9sbGVyLmdldCgpLCAi
ZmFpbGVkLXRvLWZpbmQtdGV4dCIsIEdfQ0FMTEJBQ0soZmFpbGVkVG9GaW5kVGV4dENhbGxiYWNr
KSwgdGhpcyk7CisgICAgICAgIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoKG1fZmluZENv
bnRyb2xsZXIuZ2V0KCksIHNlYXJjaFRleHQsIGZpbmRPcHRpb25zLCBtYXhNYXRjaENvdW50KTsK
KyAgICB9CisKKyAgICB2b2lkIGNvdW50KGNvbnN0IGNoYXIqIHNlYXJjaFRleHQsIGd1aW50MzIg
ZmluZE9wdGlvbnMsIGd1aW50IG1heE1hdGNoQ291bnQpCisgICAgeworICAgICAgICBnX3NpZ25h
bF9jb25uZWN0KG1fZmluZENvbnRyb2xsZXIuZ2V0KCksICJjb3VudGVkLW1hdGNoZXMiLCBHX0NB
TExCQUNLKGNvdW50ZWRNYXRjaGVzQ2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgd2Via2l0X2Zp
bmRfY29udHJvbGxlcl9jb3VudF9tYXRjaGVzKG1fZmluZENvbnRyb2xsZXIuZ2V0KCksIHNlYXJj
aFRleHQsIGZpbmRPcHRpb25zLCBtYXhNYXRjaENvdW50KTsKKyAgICB9CisKKyAgICB2b2lkIHdh
aXRVbnRpbEZpbmRGaW5pc2hlZCgpCisgICAgeworICAgICAgICBtX3J1bkZpbmRVbnRpbENvbXBs
ZXRpb24gPSB0cnVlOworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAg
fQorCisgICAgR1JlZlB0cjxXZWJLaXRGaW5kQ29udHJvbGxlcj4gbV9maW5kQ29udHJvbGxlcjsK
KyAgICBib29sIG1fdGV4dEZvdW5kOworICAgIHVuc2lnbmVkIG1fbWF0Y2hDb3VudDsKKworcHJp
dmF0ZToKKyAgICBib29sIG1fcnVuRmluZFVudGlsQ29tcGxldGlvbjsKKworICAgIHN0YXRpYyB2
b2lkIGZvdW5kVGV4dENhbGxiYWNrKFdlYktpdEZpbmRDb250cm9sbGVyKiwgZ3VpbnQgbWF0Y2hD
b3VudCwgRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+bV90
ZXh0Rm91bmQgPSB0cnVlOworICAgICAgICB0ZXN0LT5tX21hdGNoQ291bnQgPSBtYXRjaENvdW50
OworICAgICAgICBpZiAodGVzdC0+bV9ydW5GaW5kVW50aWxDb21wbGV0aW9uKQorICAgICAgICAg
ICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgdm9pZCBmYWlsZWRUb0ZpbmRUZXh0Q2FsbGJhY2soV2ViS2l0RmluZENvbnRyb2xsZXIqLCBG
aW5kQ29udHJvbGxlclRlc3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT5tX3RleHRGb3Vu
ZCA9IGZhbHNlOworICAgICAgICBpZiAodGVzdC0+bV9ydW5GaW5kVW50aWxDb21wbGV0aW9uKQor
ICAgICAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgdm9pZCBjb3VudGVkTWF0Y2hlc0NhbGxiYWNrKFdlYktpdEZpbmRDb250cm9s
bGVyKiwgZ3VpbnQgbWF0Y2hDb3VudCwgRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0KQorICAgIHsK
KyAgICAgICAgdGVzdC0+bV9tYXRjaENvdW50ID0gbWF0Y2hDb3VudDsKKyAgICAgICAgaWYgKHRl
c3QtPm1fcnVuRmluZFVudGlsQ29tcGxldGlvbikKKyAgICAgICAgICAgIGdfbWFpbl9sb29wX3F1
aXQodGVzdC0+bV9tYWluTG9vcCk7CisgICAgfQorfTsKKworc3RhdGljIHZvaWQgdGVzdEZpbmRD
b250cm9sbGVyVGV4dEZvdW5kKEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRl
cikKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0U3RyaW5nLCAwKTsKKyAgICB0ZXN0LT53YWl0
VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3QtPmZpbmQoInRlc3RpbmciLCBXRUJLSVRf
RklORF9PUFRJT05TX05PTkUsIDEpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgp
OworCisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOworfQorCitzdGF0aWMgdm9pZCB0
ZXN0RmluZENvbnRyb2xsZXJUZXh0Tm90Rm91bmQoRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRIdG1sKHRlc3RTdHJpbmcsIDApOworICAg
IHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+ZmluZCgibm90Rm91
bmQiLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUsIDEpOworICAgIHRlc3QtPndhaXRVbnRpbEZp
bmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQoIXRlc3QtPm1fdGV4dEZvdW5kKTsKK30KKwor
c3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVyTWF0Y2hDb3VudChGaW5kQ29udHJvbGxlclRl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwodGVzdFN0cmlu
ZywgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5m
aW5kKCJ0ZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAyKTsKKyAgICB0ZXN0LT53
YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPm1fbWF0Y2hDb3Vu
dCA9PSAyKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7Cit9CisKK3N0YXRpYyB2
b2lkIHRlc3RGaW5kQ29udHJvbGxlck1heE1hdGNoQ291bnQoRmluZENvbnRyb2xsZXJUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRIdG1sKHRlc3RTdHJpbmcsIDAp
OworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+ZmluZCgi
dGVzdGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwgMSk7CisgICAgdGVzdC0+d2FpdFVu
dGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX21hdGNoQ291bnQgPT0g
R19NQVhVSU5UKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7Cit9CisKK3N0YXRp
YyB2b2lkIHRlc3RGaW5kQ29udHJvbGxlck5leHQoRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRIdG1sKHRlc3RTdHJpbmcsIDApOworICAg
IHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+ZmluZCgidGVzdGlu
ZyIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwgMik7CisgICAgdGVzdC0+d2FpdFVudGlsRmlu
ZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7CisgICAgZ19h
c3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09IDIpOworCisgICAgd2Via2l0X2ZpbmRfY29udHJv
bGxlcl9zZWFyY2hfbmV4dCh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKTsKKyAgICB0ZXN0
LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZv
dW5kKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX21hdGNoQ291bnQgPT0gMSk7CisgICAgZ19hc3Nl
cnQoISh3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9vcHRpb25zKHRlc3QtPm1fZmluZENvbnRy
b2xsZXIuZ2V0KCkpICYgV0VCS0lUX0ZJTkRfT1BUSU9OU19CQUNLV0FSRFMpKTsKKworICAgIHdl
YmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX25leHQodGVzdC0+bV9maW5kQ29udHJvbGxlci5n
ZXQoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2Vy
dCghdGVzdC0+bV90ZXh0Rm91bmQpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fbWF0Y2hDb3VudCA9
PSAxKTsKKyAgICBnX2Fzc2VydCghKHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X29wdGlvbnMo
dGVzdC0+bV9maW5kQ29udHJvbGxlci5nZXQoKSkgJiBXRUJLSVRfRklORF9PUFRJT05TX0JBQ0tX
QVJEUykpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xsZXJQcmV2aW91cyhGaW5k
Q29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0
bWwodGVzdFN0cmluZywgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisK
KyAgICB0ZXN0LT5maW5kKCJ0ZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAyKTsK
KyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3Qt
Pm1fbWF0Y2hDb3VudCA9PSAyKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7CisK
KyAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF9uZXh0KHRlc3QtPm1fZmluZENvbnRy
b2xsZXIuZ2V0KCkpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAg
Z19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fbWF0Y2hD
b3VudCA9PSAxKTsKKyAgICBnX2Fzc2VydCghKHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X29w
dGlvbnModGVzdC0+bV9maW5kQ29udHJvbGxlci5nZXQoKSkgJiBXRUJLSVRfRklORF9PUFRJT05T
X0JBQ0tXQVJEUykpOworCisgICAgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfcHJldmlv
dXModGVzdC0+bV9maW5kQ29udHJvbGxlci5nZXQoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsRmlu
ZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7CisgICAgZ19h
c3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09IDEpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9maW5k
X2NvbnRyb2xsZXJfZ2V0X29wdGlvbnModGVzdC0+bV9maW5kQ29udHJvbGxlci5nZXQoKSkgJiBX
RUJLSVRfRklORF9PUFRJT05TX0JBQ0tXQVJEUyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RGaW5k
Q29udHJvbGxlckNvdW50ZWRNYXRjaGVzKEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0U3RyaW5nLCAwKTsKKyAgICB0ZXN0
LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3QtPmNvdW50KCJ0ZXN0aW5nIiwg
V0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmlu
aXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPm1fbWF0Y2hDb3VudCA9PSAyKTsKKworICAg
IHRlc3QtPmNvdW50KCJmaXJzdCIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwgMik7CisgICAg
dGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX21h
dGNoQ291bnQgPT0gMSk7CisKKyAgICB0ZXN0LT5jb3VudCgibm90Rm91bmQiLCBXRUJLSVRfRklO
RF9PUFRJT05TX05PTkUsIDIpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOwor
CisgICAgZ19hc3NlcnQoIXRlc3QtPm1fbWF0Y2hDb3VudCk7Cit9CisKK3N0YXRpYyB2b2lkIHRl
c3RGaW5kQ29udHJvbGxlck9wdGlvbnMoRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0LCBnY29uc3Rw
b2ludGVyKQoreworICAgIHRlc3QtPmxvYWRIdG1sKHRlc3RTdHJpbmcsIDApOworICAgIHRlc3Qt
PndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+ZmluZCgiVGVzdGluZyIsIFdF
QktJVF9GSU5EX09QVElPTlNfTk9ORSwgMik7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlz
aGVkKCk7CisKKyAgICBnX2Fzc2VydCghdGVzdC0+bV90ZXh0Rm91bmQpOworCisgICAgdGVzdC0+
ZmluZCgiVGVzdGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNfQ0FTRV9JTlNFTlNJVElWRSwgMik7
CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCh0ZXN0
LT5tX3RleHRGb3VuZCk7CisKKyAgICB0ZXN0LT5maW5kKCJlc3RpbmciLCBXRUJLSVRfRklORF9P
UFRJT05TX05PTkUsIDIpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworCisg
ICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOworCisgICAgdGVzdC0+ZmluZCgiZXN0aW5n
IiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19BVF9XT1JEX1NUQVJUUywgMik7CisgICAgdGVzdC0+d2Fp
dFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCghdGVzdC0+bV90ZXh0Rm91bmQp
OworCisgICAgdGVzdC0+ZmluZCgiSGFsZiIsIFdFQktJVF9GSU5EX09QVElPTlNfQVRfV09SRF9T
VEFSVFMsIDIpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19h
c3NlcnQoIXRlc3QtPm1fdGV4dEZvdW5kKTsKKworICAgIHRlc3QtPmZpbmQoIkhhbGYiLCBXRUJL
SVRfRklORF9PUFRJT05TX0FUX1dPUkRfU1RBUlRTIHwgV0VCS0lUX0ZJTkRfT1BUSU9OU19UUkVB
VF9NRURJQUxfQ0FQSVRBTF9BU19XT1JEX1NUQVJULCAyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxG
aW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKKworICAg
IHRlc3QtPmZpbmQoInRlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05TX1dSQVBfQVJPVU5ELCAz
KTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydCh0ZXN0
LT5tX3RleHRGb3VuZCk7CisKKyAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF9uZXh0
KHRlc3QtPm1fZmluZENvbnRyb2xsZXIuZ2V0KCkpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRG
aW5pc2hlZCgpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKKworICAgIHdlYmtp
dF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX25leHQodGVzdC0+bV9maW5kQ29udHJvbGxlci5nZXQo
KSk7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnQodGVz
dC0+bV90ZXh0Rm91bmQpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xsZXJIaWRl
KEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5s
b2FkSHRtbCh0ZXN0U3RyaW5nLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQo
KTsKKworICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOworCisgICAg
Y2Fpcm9fc3VyZmFjZV90KiBvcmlnaW5hbFN1cmZhY2UgPSBjYWlyb19zdXJmYWNlX3JlZmVyZW5j
ZSgKKyAgICAgICAgdGVzdC0+Z2V0U25hcHNob3RBbmRXYWl0VW50aWxSZWFkeShXRUJLSVRfU05B
UFNIT1RfUkVHSU9OX0ZVTExfRE9DVU1FTlQsIFdFQktJVF9TTkFQU0hPVF9PUFRJT05TX05PTkUp
KTsKKyAgICBnX2Fzc2VydChvcmlnaW5hbFN1cmZhY2UpOworCisgICAgdGVzdC0+ZmluZCgidGVz
dGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwgMSk7CisgICAgdGVzdC0+d2FpdFVudGls
RmluZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOworCisgICAg
Y2Fpcm9fc3VyZmFjZV90KiBoaWdobGlnaHRTdXJmYWNlID0gY2Fpcm9fc3VyZmFjZV9yZWZlcmVu
Y2UoCisgICAgICAgIHRlc3QtPmdldFNuYXBzaG90QW5kV2FpdFVudGlsUmVhZHkoV0VCS0lUX1NO
QVBTSE9UX1JFR0lPTl9GVUxMX0RPQ1VNRU5ULCBXRUJLSVRfU05BUFNIT1RfT1BUSU9OU19OT05F
KSk7CisgICAgZ19hc3NlcnQoaGlnaGxpZ2h0U3VyZmFjZSk7CisgICAgZ19hc3NlcnQoIVRlc3Q6
OmNhaXJvU3VyZmFjZXNFcXVhbChvcmlnaW5hbFN1cmZhY2UsIGhpZ2hsaWdodFN1cmZhY2UpKTsK
KworICAgIFdlYktpdEZpbmRDb250cm9sbGVyKiBmaW5kQ29udHJvbGxlciA9IHdlYmtpdF93ZWJf
dmlld19nZXRfZmluZF9jb250cm9sbGVyKHRlc3QtPm1fd2ViVmlldyk7CisgICAgd2Via2l0X2Zp
bmRfY29udHJvbGxlcl9zZWFyY2hfZmluaXNoKGZpbmRDb250cm9sbGVyKTsKKyAgICB3ZWJraXRf
d2ViX3ZpZXdfZXhlY3V0ZV9lZGl0aW5nX2NvbW1hbmQodGVzdC0+bV93ZWJWaWV3LCAiVW5zZWxl
Y3QiKTsKKworICAgIGNhaXJvX3N1cmZhY2VfdCogdW5oaWdobGlnaHRTdXJmYWNlID0gY2Fpcm9f
c3VyZmFjZV9yZWZlcmVuY2UoCisgICAgICAgIHRlc3QtPmdldFNuYXBzaG90QW5kV2FpdFVudGls
UmVhZHkoV0VCS0lUX1NOQVBTSE9UX1JFR0lPTl9GVUxMX0RPQ1VNRU5ULCBXRUJLSVRfU05BUFNI
T1RfT1BUSU9OU19OT05FKSk7CisgICAgZ19hc3NlcnQodW5oaWdobGlnaHRTdXJmYWNlKTsKKyAg
ICBnX2Fzc2VydChUZXN0OjpjYWlyb1N1cmZhY2VzRXF1YWwob3JpZ2luYWxTdXJmYWNlLCB1bmhp
Z2hsaWdodFN1cmZhY2UpKTsKKworICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShvcmlnaW5hbFN1
cmZhY2UpOworICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShoaWdobGlnaHRTdXJmYWNlKTsKKyAg
ICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3kodW5oaWdobGlnaHRTdXJmYWNlKTsKK30KKworc3RhdGlj
IHZvaWQgdGVzdEZpbmRDb250cm9sbGVySW5zdGFuY2UoRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQoreworICAgIFdlYktpdEZpbmRDb250cm9sbGVyKiBmaW5kQ29udHJv
bGxlcjEgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ZpbmRfY29udHJvbGxlcih0ZXN0LT5tX3dlYlZp
ZXcpOworICAgIFdlYktpdEZpbmRDb250cm9sbGVyKiBmaW5kQ29udHJvbGxlcjIgPSB3ZWJraXRf
d2ViX3ZpZXdfZ2V0X2ZpbmRfY29udHJvbGxlcih0ZXN0LT5tX3dlYlZpZXcpOworCisgICAgZ19h
c3NlcnQoZmluZENvbnRyb2xsZXIxID09IGZpbmRDb250cm9sbGVyMik7Cit9CisKK3N0YXRpYyB2
b2lkIHRlc3RGaW5kQ29udHJvbGxlckdldHRlcnMoRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQoreworICAgIGNvbnN0IGNoYXIqIHNlYXJjaFRleHQgPSAidGVzdGluZyI7
CisgICAgZ3VpbnQgbWF4TWF0Y2hDb3VudCA9IDE7CisgICAgZ3VpbnQzMiBmaW5kT3B0aW9ucyA9
IFdFQktJVF9GSU5EX09QVElPTlNfV1JBUF9BUk9VTkQgfCBXRUJLSVRfRklORF9PUFRJT05TX0FU
X1dPUkRfU1RBUlRTOworICAgIFdlYktpdEZpbmRDb250cm9sbGVyKiBmaW5kQ29udHJvbGxlciA9
IHdlYmtpdF93ZWJfdmlld19nZXRfZmluZF9jb250cm9sbGVyKHRlc3QtPm1fd2ViVmlldyk7CisK
KyAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaChmaW5kQ29udHJvbGxlciwgc2VhcmNo
VGV4dCwgZmluZE9wdGlvbnMsIG1heE1hdGNoQ291bnQpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9m
aW5kX2NvbnRyb2xsZXJfZ2V0X3dlYl92aWV3KGZpbmRDb250cm9sbGVyKSA9PSB0ZXN0LT5tX3dl
YlZpZXcpOworICAgIGdfYXNzZXJ0KCFnX3N0cmNtcDAod2Via2l0X2ZpbmRfY29udHJvbGxlcl9n
ZXRfc2VhcmNoX3RleHQoZmluZENvbnRyb2xsZXIpLCBzZWFyY2hUZXh0KSk7CisgICAgZ19hc3Nl
cnQod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfbWF4X21hdGNoX2NvdW50KGZpbmRDb250cm9s
bGVyKSA9PSBtYXhNYXRjaENvdW50KTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfZmluZF9jb250cm9s
bGVyX2dldF9vcHRpb25zKGZpbmRDb250cm9sbGVyKSA9PSBmaW5kT3B0aW9ucyk7Cit9CisKK3Zv
aWQgYmVmb3JlQWxsKCkKK3sKKyAgICBGaW5kQ29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0Rmlu
ZENvbnRyb2xsZXIiLCAiZ2V0dGVycyIsIHRlc3RGaW5kQ29udHJvbGxlckdldHRlcnMpOworICAg
IEZpbmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udHJvbGxlciIsICJpbnN0YW5j
ZSIsIHRlc3RGaW5kQ29udHJvbGxlckluc3RhbmNlKTsKKyAgICBGaW5kQ29udHJvbGxlclRlc3Q6
OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIiLCAidGV4dC1mb3VuZCIsIHRlc3RGaW5kQ29udHJv
bGxlclRleHRGb3VuZCk7CisgICAgRmluZENvbnRyb2xsZXJUZXN0OjphZGQoIldlYktpdEZpbmRD
b250cm9sbGVyIiwgInRleHQtbm90LWZvdW5kIiwgdGVzdEZpbmRDb250cm9sbGVyVGV4dE5vdEZv
dW5kKTsKKyAgICBGaW5kQ29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIi
LCAibWF0Y2gtY291bnQiLCB0ZXN0RmluZENvbnRyb2xsZXJNYXRjaENvdW50KTsKKyAgICBGaW5k
Q29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIiLCAibWF4LW1hdGNoLWNv
dW50IiwgdGVzdEZpbmRDb250cm9sbGVyTWF4TWF0Y2hDb3VudCk7CisgICAgRmluZENvbnRyb2xs
ZXJUZXN0OjphZGQoIldlYktpdEZpbmRDb250cm9sbGVyIiwgIm5leHQiLCB0ZXN0RmluZENvbnRy
b2xsZXJOZXh0KTsKKyAgICBGaW5kQ29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRy
b2xsZXIiLCAicHJldmlvdXMiLCB0ZXN0RmluZENvbnRyb2xsZXJQcmV2aW91cyk7CisgICAgRmlu
ZENvbnRyb2xsZXJUZXN0OjphZGQoIldlYktpdEZpbmRDb250cm9sbGVyIiwgImNvdW50ZWQtbWF0
Y2hlcyIsIHRlc3RGaW5kQ29udHJvbGxlckNvdW50ZWRNYXRjaGVzKTsKKyAgICBGaW5kQ29udHJv
bGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIiLCAib3B0aW9ucyIsIHRlc3RGaW5k
Q29udHJvbGxlck9wdGlvbnMpOworICAgIEZpbmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRG
aW5kQ29udHJvbGxlciIsICJoaWRlIiwgdGVzdEZpbmRDb250cm9sbGVySGlkZSk7Cit9CisKK3Zv
aWQgYWZ0ZXJBbGwoKQoreworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRQb2xpY3lDbGllbnQuY3BwIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRQb2xpY3lDbGllbnQuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwOWVhMDQKLS0tIC9kZXYvbnVsbAorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFBvbGljeUNsaWVu
dC5jcHAKQEAgLTAsMCArMSwyNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlh
IFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiTG9hZFRyYWNraW5nVGVzdC5o
IgorI2luY2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9H
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCitzdGF0aWMgV2ViS2l0
VGVzdFNlcnZlcioga1NlcnZlcjsKKworY2xhc3MgUG9saWN5Q2xpZW50VGVzdDogcHVibGljIExv
YWRUcmFja2luZ1Rlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoUG9s
aWN5Q2xpZW50VGVzdCk7CisKKyAgICBlbnVtIFBvbGljeURlY2lzaW9uUmVzcG9uc2UgeworICAg
ICAgICBVc2UsCisgICAgICAgIElnbm9yZSwKKyAgICAgICAgRG93bmxvYWQsCisgICAgICAgIE5v
bmUKKyAgICB9OworCisgICAgUG9saWN5Q2xpZW50VGVzdCgpCisgICAgICAgIDogTG9hZFRyYWNr
aW5nVGVzdCgpCisgICAgICAgICwgbV9wb2xpY3lEZWNpc2lvblJlc3BvbnNlKE5vbmUpCisgICAg
ICAgICwgbV9wb2xpY3lEZWNpc2lvblR5cGVGaWx0ZXIoMCkKKyAgICAgICAgLCBtX3Jlc3BvbmRU
b1BvbGljeURlY2lzaW9uQXN5bmNocm9ub3VzbHkoZmFsc2UpCisgICAgICAgICwgbV9oYWx0TWFp
bkxvb3BBZnRlck1ha2luZ0RlY2lzaW9uKGZhbHNlKQorICAgIHsKKyAgICAgICAgZ19zaWduYWxf
Y29ubmVjdChtX3dlYlZpZXcsICJkZWNpZGUtcG9saWN5IiwgR19DQUxMQkFDSyhkZWNpZGVQb2xp
Y3lDYWxsYmFjayksIHRoaXMpOworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBxdWl0TWFp
bkxvb3BMYXRlcihHTWFpbkxvb3AqIGxvb3ApCisgICAgeworICAgICAgICBnX21haW5fbG9vcF9x
dWl0KGxvb3ApOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgc3RhdGljIHZv
aWQgcmVzcG9uZFRvUG9saWN5RGVjaXNpb24oUG9saWN5Q2xpZW50VGVzdCogdGVzdCwgV2ViS2l0
UG9saWN5RGVjaXNpb24qIGRlY2lzaW9uKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0ZXN0LT5t
X3BvbGljeURlY2lzaW9uUmVzcG9uc2UpIHsKKyAgICAgICAgY2FzZSBVc2U6CisgICAgICAgICAg
ICB3ZWJraXRfcG9saWN5X2RlY2lzaW9uX3VzZShkZWNpc2lvbik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBJZ25vcmU6CisgICAgICAgICAgICB3ZWJraXRfcG9saWN5X2RlY2lz
aW9uX2lnbm9yZShkZWNpc2lvbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBE
b3dubG9hZDoKKyAgICAgICAgICAgIHdlYmtpdF9wb2xpY3lfZGVjaXNpb25fZG93bmxvYWQoZGVj
aXNpb24pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTm9uZToKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRlc3QtPm1faGFsdE1haW5Mb29w
QWZ0ZXJNYWtpbmdEZWNpc2lvbikKKyAgICAgICAgICAgIGdfaWRsZV9hZGQocmVpbnRlcnByZXRf
Y2FzdDxHU291cmNlRnVuYz4ocXVpdE1haW5Mb29wTGF0ZXIpLCB0ZXN0LT5tX21haW5Mb29wKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gcmVzcG9uZFRvUG9saWN5RGVjaXNpb25MYXRl
cihQb2xpY3lDbGllbnRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgcmVzcG9uZFRvUG9saWN5
RGVjaXNpb24odGVzdCwgdGVzdC0+bV9wcmV2aW91c1BvbGljeURlY2lzaW9uLmdldCgpKTsKKyAg
ICAgICAgdGVzdC0+bV9wcmV2aW91c1BvbGljeURlY2lzaW9uID0gMDsKKyAgICAgICAgcmV0dXJu
IEZBTFNFOworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBkZWNpZGVQb2xpY3lDYWxsYmFj
ayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRQb2xpY3lEZWNpc2lvbiogZGVjaXNpb24s
IFdlYktpdFBvbGljeURlY2lzaW9uVHlwZSB0eXBlLCBQb2xpY3lDbGllbnRUZXN0KiB0ZXN0KQor
ICAgIHsKKyAgICAgICAgaWYgKHRlc3QtPm1fcG9saWN5RGVjaXNpb25UeXBlRmlsdGVyICE9IHR5
cGUpCisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICAgICAgdGVzdC0+bV9wcmV2aW91
c1BvbGljeURlY2lzaW9uID0gZGVjaXNpb247CisgICAgICAgIGlmICh0ZXN0LT5tX3Jlc3BvbmRU
b1BvbGljeURlY2lzaW9uQXN5bmNocm9ub3VzbHkpIHsKKyAgICAgICAgICAgIGdfaWRsZV9hZGQo
cmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4ocmVzcG9uZFRvUG9saWN5RGVjaXNpb25MYXRl
ciksIHRlc3QpOworICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0KKworICAgICAg
ICByZXNwb25kVG9Qb2xpY3lEZWNpc2lvbih0ZXN0LCBkZWNpc2lvbik7CisKKyAgICAgICAgLy8g
V2UgcmV0dXJuIEZBTFNFIGhlcmUgdG8gZW5zdXJlIHRoYXQgdGhlIGRlZmF1bHQgcG9saWN5IGRl
Y2lzaW9uCisgICAgICAgIC8vIGhhbmRsZXIgZG9lc24ndCBvdmVycmlkZSB3aGF0ZXZlciB3ZSB1
c2UgaGVyZS4KKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIFBvbGljeURlY2lz
aW9uUmVzcG9uc2UgbV9wb2xpY3lEZWNpc2lvblJlc3BvbnNlOworICAgIGludCBtX3BvbGljeURl
Y2lzaW9uVHlwZUZpbHRlcjsKKyAgICBib29sIG1fcmVzcG9uZFRvUG9saWN5RGVjaXNpb25Bc3lu
Y2hyb25vdXNseTsKKyAgICBib29sIG1faGFsdE1haW5Mb29wQWZ0ZXJNYWtpbmdEZWNpc2lvbjsK
KyAgICBHUmVmUHRyPFdlYktpdFBvbGljeURlY2lzaW9uPiBtX3ByZXZpb3VzUG9saWN5RGVjaXNp
b247Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0TmF2aWdhdGlvblBvbGljeShQb2xpY3lDbGllbnRU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPm1fcG9saWN5RGVjaXNpb25U
eXBlRmlsdGVyID0gV0VCS0lUX1BPTElDWV9ERUNJU0lPTl9UWVBFX05BVklHQVRJT05fQUNUSU9O
OworCisgICAgdGVzdC0+bV9wb2xpY3lEZWNpc2lvblJlc3BvbnNlID0gUG9saWN5Q2xpZW50VGVz
dDo6VXNlOworICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbC8+IiwgImh0dHA6Ly93ZWJraXRndGsu
b3JnLyIpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0
X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHMuc2l6ZSgpLCA9PSwgMyk7CisKKyAgICAvLyBJZGVh
bGx5IHdlJ2QgbGlrZSB0byBoYXZlIGEgbW9yZSBpbnRlbnNpdmUgdGVzdCBoZXJlLCBidXQgaXQn
cyBzdGlsbCBwcmV0dHkgdHJpY2t5CisgICAgLy8gdG8gdHJpZ2dlciBkaWZmZXJlbnQgdHlwZXMg
b2YgbmF2aWdhdGlvbnMgd2l0aCB0aGUgR1RLKyBXZWJLaXQyIEFQSS4KKyAgICBXZWJLaXROYXZp
Z2F0aW9uUG9saWN5RGVjaXNpb24qIGRlY2lzaW9uID0gV0VCS0lUX05BVklHQVRJT05fUE9MSUNZ
X0RFQ0lTSU9OKHRlc3QtPm1fcHJldmlvdXNQb2xpY3lEZWNpc2lvbi5nZXQoKSk7CisgICAgZ19h
c3NlcnRfY21waW50KHdlYmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRfbmF2aWdh
dGlvbl90eXBlKGRlY2lzaW9uKSwgPT0sIFdFQktJVF9OQVZJR0FUSU9OX1RZUEVfT1RIRVIpOwor
ICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0
X21vdXNlX2J1dHRvbihkZWNpc2lvbiksID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Vi
a2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF9tb2RpZmllcnMoZGVjaXNpb24pLCA9
PSwgMCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNp
c2lvbl9nZXRfZnJhbWVfbmFtZShkZWNpc2lvbiksID09LCAwKTsKKyAgICBXZWJLaXRVUklSZXF1
ZXN0KiByZXF1ZXN0ID0gd2Via2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF9yZXF1
ZXN0KGRlY2lzaW9uKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3VyaV9yZXF1ZXN0X2dl
dF91cmkocmVxdWVzdCksID09LCAiaHR0cDovL3dlYmtpdGd0ay5vcmcvIik7CisKKyAgICB0ZXN0
LT5tX3BvbGljeURlY2lzaW9uUmVzcG9uc2UgPSBQb2xpY3lDbGllbnRUZXN0OjpVc2U7CisgICAg
dGVzdC0+bV9yZXNwb25kVG9Qb2xpY3lEZWNpc2lvbkFzeW5jaHJvbm91c2x5ID0gdHJ1ZTsKKyAg
ICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWwvPiIsICJodHRwOi8vd2Via2l0Z3RrLm9yZy8iKTsKKyAg
ICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVz
dC0+bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0sIDMpOworCisgICAgLy8gSWYgd2UgYXJlIHdhaXRp
bmcgdW50aWwgbG9hZCBjb21wbGV0aW9uLCBpdCB3aWxsIG5ldmVyIGNvbXBsZXRlIGlmIHdlIGln
bm9yZSB0aGUKKyAgICAvLyBuYXZpZ2F0aW9uLiBTbyB3ZSB0ZWxsIHRoZSBtYWluIGxvb3AgdG8g
cXVpdCBzb21ldGltZSBsYXRlci4KKyAgICB0ZXN0LT5tX3BvbGljeURlY2lzaW9uUmVzcG9uc2Ug
PSBQb2xpY3lDbGllbnRUZXN0OjpJZ25vcmU7CisgICAgdGVzdC0+bV9yZXNwb25kVG9Qb2xpY3lE
ZWNpc2lvbkFzeW5jaHJvbm91c2x5ID0gZmFsc2U7CisgICAgdGVzdC0+bV9oYWx0TWFpbkxvb3BB
ZnRlck1ha2luZ0RlY2lzaW9uID0gdHJ1ZTsKKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWwvPiIs
ICJodHRwOi8vd2Via2l0Z3RrLm9yZy8iKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNo
ZWQoKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0s
IDApOworCisgICAgdGVzdC0+bV9wb2xpY3lEZWNpc2lvblJlc3BvbnNlID0gUG9saWN5Q2xpZW50
VGVzdDo6SWdub3JlOworICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbC8+IiwgImh0dHA6Ly93ZWJr
aXRndGsub3JnLyIpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIGdf
YXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHMuc2l6ZSgpLCA9PSwgMCk7Cit9CisKK3N0
YXRpYyB2b2lkIHRlc3RSZXNwb25zZVBvbGljeShQb2xpY3lDbGllbnRUZXN0KiB0ZXN0LCBnY29u
c3Rwb2ludGVyKQoreworICAgIHRlc3QtPm1fcG9saWN5RGVjaXNpb25UeXBlRmlsdGVyID0gV0VC
S0lUX1BPTElDWV9ERUNJU0lPTl9UWVBFX1JFU1BPTlNFOworCisgICAgdGVzdC0+bV9wb2xpY3lE
ZWNpc2lvblJlc3BvbnNlID0gUG9saWN5Q2xpZW50VGVzdDo6VXNlOworICAgIHRlc3QtPmxvYWRV
Ukkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVu
dGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50
cy5zaXplKCksID09LCAzKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRz
WzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7CisgICAg
Z19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rl
c3Q6OkxvYWRDb21taXR0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVu
dHNbMl0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOworCisgICAgV2ViS2l0
UmVzcG9uc2VQb2xpY3lEZWNpc2lvbiogZGVjaXNpb24gPSBXRUJLSVRfUkVTUE9OU0VfUE9MSUNZ
X0RFQ0lTSU9OKHRlc3QtPm1fcHJldmlvdXNQb2xpY3lEZWNpc2lvbi5nZXQoKSk7CisgICAgV2Vi
S2l0VVJJUmVxdWVzdCogcmVxdWVzdCA9IHdlYmtpdF9yZXNwb25zZV9wb2xpY3lfZGVjaXNpb25f
Z2V0X3JlcXVlc3QoZGVjaXNpb24pOworICAgIGdfYXNzZXJ0KFdFQktJVF9JU19VUklfUkVRVUVT
VChyZXF1ZXN0KSk7CisgICAgQVNTRVJUX0NNUF9DU1RSSU5HKHdlYmtpdF91cmlfcmVxdWVzdF9n
ZXRfdXJpKHJlcXVlc3QpLCA9PSwga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpKTsKKyAgICBX
ZWJLaXRVUklSZXNwb25zZSogcmVzcG9uc2UgPSB3ZWJraXRfcmVzcG9uc2VfcG9saWN5X2RlY2lz
aW9uX2dldF9yZXNwb25zZShkZWNpc2lvbik7CisgICAgZ19hc3NlcnQoV0VCS0lUX0lTX1VSSV9S
RVNQT05TRShyZXNwb25zZSkpOworICAgIEFTU0VSVF9DTVBfQ1NUUklORyh3ZWJraXRfdXJpX3Jl
c3BvbnNlX2dldF91cmkocmVzcG9uc2UpLCA9PSwga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIp
KTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfY2FuX3Nob3dfbWltZV90eXBlKHRlc3Qt
Pm1fd2ViVmlldywgd2Via2l0X3VyaV9yZXNwb25zZV9nZXRfbWltZV90eXBlKHJlc3BvbnNlKSkg
PT0KKyAgICAgICAgd2Via2l0X3Jlc3BvbnNlX3BvbGljeV9kZWNpc2lvbl9pc19taW1lX3R5cGVf
c3VwcG9ydGVkKGRlY2lzaW9uKSk7CisKKyAgICB0ZXN0LT5tX3Jlc3BvbmRUb1BvbGljeURlY2lz
aW9uQXN5bmNocm9ub3VzbHkgPSB0cnVlOworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0
VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVk
KCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50cy5zaXplKCksID09LCAz
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzBdLCA9PSwgTG9hZFRy
YWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7CisgICAgZ19hc3NlcnRfY21waW50
KHRlc3QtPm1fbG9hZEV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRDb21taXR0
ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMl0sID09LCBMb2Fk
VHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOworCisgICAgdGVzdC0+bV9yZXNwb25kVG9Qb2xp
Y3lEZWNpc2lvbkFzeW5jaHJvbm91c2x5ID0gZmFsc2U7CisgICAgdGVzdC0+bV9wb2xpY3lEZWNp
c2lvblJlc3BvbnNlID0gUG9saWN5Q2xpZW50VGVzdDo6SWdub3JlOworICAgIHRlc3QtPmxvYWRV
Ukkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVu
dGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZl
bnRzLnNpemUoKSwgPT0sIDMpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVu
dHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5n
VGVzdDo6UHJvdmlzaW9uYWxMb2FkRmFpbGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+
bV9sb2FkRXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKK30K
Kworc3RydWN0IENyZWF0ZUNhbGxiYWNrRGF0YSB7CisgICAgYm9vbCB0cmllZFRvT3BlbldpbmRv
dzsKKyAgICBHTWFpbkxvb3AqIG1haW5Mb29wOworfTsKKworc3RhdGljIFdlYktpdFdlYlZpZXcq
IGNyZWF0ZUNhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIENyZWF0ZUNhbGxiYWNrRGF0
YSogZGF0YSkKK3sKKyAgICBkYXRhLT50cmllZFRvT3BlbldpbmRvdyA9IHRydWU7CisgICAgZ19t
YWluX2xvb3BfcXVpdChkYXRhLT5tYWluTG9vcCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRp
YyB2b2lkIHRlc3ROZXdXaW5kb3dQb2xpY3koUG9saWN5Q2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciogd2luZG93T3BlbmluZ0hUTUwgPQor
ICAgICAgICAiPGh0bWw+PGJvZHk+IgorICAgICAgICAiICAgIDxhIGlkPVwibGlua1wiIGhyZWY9
XCJodHRwOi8vd3d3Lmdvb2dsZS5jb21cIiB0YXJnZXQ9XCJfYmxhbmtcIj5MaW5rPC9hPiIKKyAg
ICAgICAgIiAgICA8c2NyaXB0PiIKKyAgICAgICAgIiAgICAgICAgdmFyIGV2ZW50ID0gZG9jdW1l
bnQuY3JlYXRlRXZlbnQoJ01vdXNlRXZlbnRzJyk7IgorICAgICAgICAiICAgICAgICBldmVudC5p
bml0RXZlbnQoJ2NsaWNrJywgdHJ1ZSwgZmFsc2UpOyIKKyAgICAgICAgIiAgICAgICAgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ2xpbmsnKS5kaXNwYXRjaEV2ZW50KGV2ZW50KTsiCisgICAgICAg
ICIgICAgPC9zY3JpcHQ+IgorICAgICAgICAiPC9ib2R5PjwvaHRtbD4iOworICAgIHRlc3QtPm1f
cG9saWN5RGVjaXNpb25UeXBlRmlsdGVyID0gV0VCS0lUX1BPTElDWV9ERUNJU0lPTl9UWVBFX05F
V19XSU5ET1dfQUNUSU9OOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfamF2YXNjcmlwdF9jYW5f
b3Blbl93aW5kb3dzX2F1dG9tYXRpY2FsbHkod2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh0
ZXN0LT5tX3dlYlZpZXcpLCBUUlVFKTsKKworICAgIENyZWF0ZUNhbGxiYWNrRGF0YSBkYXRhOwor
ICAgIGRhdGEudHJpZWRUb09wZW5XaW5kb3cgPSBmYWxzZTsKKyAgICBkYXRhLm1haW5Mb29wID0g
dGVzdC0+bV9tYWluTG9vcDsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3QodGVzdC0+bV93ZWJWaWV3
LCAiY3JlYXRlIiwgR19DQUxMQkFDSyhjcmVhdGVDYWxsYmFjayksICZkYXRhKTsKKyAgICB0ZXN0
LT5tX3BvbGljeURlY2lzaW9uUmVzcG9uc2UgPSBQb2xpY3lDbGllbnRUZXN0OjpVc2U7CisgICAg
dGVzdC0+bG9hZEh0bWwod2luZG93T3BlbmluZ0hUTUwsICJodHRwOi8vd2Via2l0Z3RrLm9yZy8i
KTsKKyAgICB0ZXN0LT53YWl0KDEpOworICAgIGdfYXNzZXJ0KGRhdGEudHJpZWRUb09wZW5XaW5k
b3cpOworCisgICAgV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uKiBkZWNpc2lvbiA9IFdF
QktJVF9OQVZJR0FUSU9OX1BPTElDWV9ERUNJU0lPTih0ZXN0LT5tX3ByZXZpb3VzUG9saWN5RGVj
aXNpb24uZ2V0KCkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfbmF2aWdhdGlvbl9wb2xp
Y3lfZGVjaXNpb25fZ2V0X2ZyYW1lX25hbWUoZGVjaXNpb24pLCA9PSwgIl9ibGFuayIpOworCisg
ICAgLy8gVXNpbmcgYSBzaG9ydCB0aW1lb3V0IGlzIGEgYml0IHVnbHkgaGVyZSwgYnV0IGl0J3Mg
aGFyZCB0byBnZXQgYXJvdW5kIGJlY2F1c2UgaWYgd2UgYmxvY2sKKyAgICAvLyB0aGUgbmV3IHdp
bmRvdyBzaWduYWwgd2UgY2Fubm90IGhhbHQgdGhlIG1haW4gbG9vcCBpbiB0aGUgY3JlYXRlIGNh
bGxiYWNrLiBJZiB3ZQorICAgIC8vIGhhbHQgdGhlIG1haW4gbG9vcCBpbiB0aGUgcG9saWN5IGRl
Y2lzaW9uLCB0aGUgY3JlYXRlIGNhbGxiYWNrIG5ldmVyIGV4ZWN1dGVzLgorICAgIGRhdGEudHJp
ZWRUb09wZW5XaW5kb3cgPSBmYWxzZTsKKyAgICB0ZXN0LT5tX3BvbGljeURlY2lzaW9uUmVzcG9u
c2UgPSBQb2xpY3lDbGllbnRUZXN0OjpJZ25vcmU7CisgICAgdGVzdC0+bG9hZEh0bWwod2luZG93
T3BlbmluZ0hUTUwsICJodHRwOi8vd2Via2l0Z3RrLm9yZy8iKTsKKyAgICB0ZXN0LT53YWl0KC4y
KTsKKyAgICBnX2Fzc2VydCghZGF0YS50cmllZFRvT3BlbldpbmRvdyk7Cit9CisKK3N0YXRpYyB2
b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1lc3Nh
Z2UsIGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqLCBTb3VwQ2xpZW50Q29udGV4dCosIGdw
b2ludGVyKQoreworICAgIGlmIChtZXNzYWdlLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7
CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05P
VF9JTVBMRU1FTlRFRCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZ19zdHJf
ZXF1YWwocGF0aCwgIi8iKSkgeworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogcmVzcG9uc2VT
dHJpbmcgPSAiPGh0bWw+PGJvZHk+VGVzdGluZyE8L2JvZHk+PC9odG1sPiI7CisgICAgICAgIHNv
dXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKKyAgICAgICAg
c291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVN
T1JZX1NUQVRJQywgcmVzcG9uc2VTdHJpbmcsIHN0cmxlbihyZXNwb25zZVN0cmluZykpOworICAg
ICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsK
KyAgICB9IGVsc2UKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09V
UF9TVEFUVVNfTk9UX0ZPVU5EKTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQoreworICAgIGtTZXJ2
ZXIgPSBuZXcgV2ViS2l0VGVzdFNlcnZlcigpOworICAgIGtTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxs
YmFjayk7CisKKyAgICBQb2xpY3lDbGllbnRUZXN0OjphZGQoIldlYktpdFBvbGljeUNsaWVudCIs
ICJuYXZpZ2F0aW9uLXBvbGljeSIsIHRlc3ROYXZpZ2F0aW9uUG9saWN5KTsKKyAgICBQb2xpY3lD
bGllbnRUZXN0OjphZGQoIldlYktpdFBvbGljeUNsaWVudCIsICJyZXNwb25zZS1wb2xpY3kiLCB0
ZXN0UmVzcG9uc2VQb2xpY3kpOworICAgIFBvbGljeUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0UG9s
aWN5Q2xpZW50IiwgIm5ldy13aW5kb3ctcG9saWN5IiwgdGVzdE5ld1dpbmRvd1BvbGljeSk7Cit9
CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworICAgIGRlbGV0ZSBrU2VydmVyOworfQpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRTZXR0aW5n
cy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFNl
dHRpbmdzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWQzMDE4Ci0t
LSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rl
c3RXZWJLaXRTZXR0aW5ncy5jcHAKQEAgLTAsMCArMSwzNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KGMpIDIwMTEgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgCisgKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90
aWNlLCAKKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKgorICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIAorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgCisgKiBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IAor
ICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMg
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCAKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIg
T1IgCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIAorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSAKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIAorICogTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIAorICogU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVGVzdE1haW4uaCIKKyNpbmNs
dWRlICJXZWJWaWV3VGVzdC5oIgorI2luY2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKKyNpbmNs
dWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+CisjaW5jbHVkZSA8
d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCitzdGF0aWMgV2ViS2l0VGVzdFNlcnZlciogZ1NlcnZl
cjsKKworc3RhdGljIHZvaWQgdGVzdFdlYktpdFNldHRpbmdzKFRlc3QqLCBnY29uc3Rwb2ludGVy
KQoreworICAgIFdlYktpdFNldHRpbmdzKiBzZXR0aW5ncyA9IHdlYmtpdF9zZXR0aW5nc19uZXco
KTsKKworICAgIC8vIEphdmFTY3JpcHQgaXMgZW5hYmxlZCBieSBkZWZhdWx0LgorICAgIGdfYXNz
ZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2phdmFzY3JpcHQoc2V0dGluZ3MpKTsKKyAg
ICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9qYXZhc2NyaXB0KHNldHRpbmdzLCBGQUxTRSk7
CisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2phdmFzY3JpcHQoc2V0
dGluZ3MpKTsKKworICAgIC8vIEJ5IGRlZmF1bHQgYXV0by1sb2FkLWltYWdlIGlzIHRydWUuCisg
ICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9hdXRvX2xvYWRfaW1hZ2VzKHNldHRpbmdz
KSk7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9hdXRvX2xvYWRfaW1hZ2VzKHNldHRpbmdzLCBG
QUxTRSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfYXV0b19sb2FkX2ltYWdl
cyhzZXR0aW5ncykpOworCisgICAgLy8gbG9hZC1pY29ucy1pZ25vcmluZy1pbWFnZS1sb2FkLXNl
dHRpbmcgaXMgZmFsc2UgYnkgZGVmYXVsdC4KKyAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdz
X2dldF9sb2FkX2ljb25zX2lnbm9yaW5nX2ltYWdlX2xvYWRfc2V0dGluZyhzZXR0aW5ncykpOwor
ICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfbG9hZF9pY29uc19pZ25vcmluZ19pbWFnZV9sb2FkX3Nl
dHRpbmcoc2V0dGluZ3MsIFRSVUUpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRf
bG9hZF9pY29uc19pZ25vcmluZ19pbWFnZV9sb2FkX3NldHRpbmcoc2V0dGluZ3MpKTsKKyAgICAK
KyAgICAvLyBPZmZsaW5lIGFwcGxpY2F0aW9uIGNhY2hlIGlzIHRydWUgYnkgZGVmYXVsdC4KKyAg
ICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9vZmZsaW5lX3dlYl9hcHBsaWNh
dGlvbl9jYWNoZShzZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX29m
ZmxpbmVfd2ViX2FwcGxpY2F0aW9uX2NhY2hlKHNldHRpbmdzLCBGQUxTRSk7CisgICAgZ19hc3Nl
cnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX29mZmxpbmVfd2ViX2FwcGxpY2F0aW9uX2Nh
Y2hlKHNldHRpbmdzKSk7CisKKyAgICAvLyBMb2NhbCBzdG9yYWdlIGlzIGVuYWJsZSBieSBkZWZh
dWx0LgorICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2h0bWw1X2xvY2Fs
X3N0b3JhZ2Uoc2V0dGluZ3MpKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9odG1s
NV9sb2NhbF9zdG9yYWdlKHNldHRpbmdzLCBGQUxTRSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9z
ZXR0aW5nc19nZXRfZW5hYmxlX2h0bWw1X2xvY2FsX3N0b3JhZ2Uoc2V0dGluZ3MpKTsKKworICAg
IC8vIEhUTUw1IGRhdGFiYXNlIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4KKyAgICBnX2Fzc2VydCh3
ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9odG1sNV9kYXRhYmFzZShzZXR0aW5ncykpOworICAg
IHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX2h0bWw1X2RhdGFiYXNlKHNldHRpbmdzLCBGQUxT
RSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2h0bWw1X2RhdGFi
YXNlKHNldHRpbmdzKSk7CisKKyAgICAvLyBYU1MgQXVkaXRvciBpcyBlbmFibGVkIGJ5IGRlZmF1
bHQuCisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfeHNzX2F1ZGl0b3Io
c2V0dGluZ3MpKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV94c3NfYXVkaXRvcihz
ZXR0aW5ncywgRkFMU0UpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJs
ZV94c3NfYXVkaXRvcihzZXR0aW5ncykpOworCisgICAgLy8gRnJhbWUgZmxhdHRlbmluZyBpcyBk
aXNhYmxlZCBieSBkZWZhdWx0LgorICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2Vu
YWJsZV9mcmFtZV9mbGF0dGVuaW5nKHNldHRpbmdzKSk7CisgICAgd2Via2l0X3NldHRpbmdzX3Nl
dF9lbmFibGVfZnJhbWVfZmxhdHRlbmluZyhzZXR0aW5ncywgVFJVRSk7CisgICAgZ19hc3NlcnQo
d2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfZnJhbWVfZmxhdHRlbmluZyhzZXR0aW5ncykpOwor
CisgICAgLy8gUGx1Z2lucyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0LgorICAgIGdfYXNzZXJ0KHdl
YmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3BsdWdpbnMoc2V0dGluZ3MpKTsKKyAgICB3ZWJraXRf
c2V0dGluZ3Nfc2V0X2VuYWJsZV9wbHVnaW5zKHNldHRpbmdzLCBGQUxTRSk7CisgICAgZ19hc3Nl
cnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3BsdWdpbnMoc2V0dGluZ3MpKTsKKworICAg
IC8vIEphdmEgaXMgZW5hYmxlZCBieSBkZWZhdWx0LgorICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0
aW5nc19nZXRfZW5hYmxlX2phdmEoc2V0dGluZ3MpKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0
X2VuYWJsZV9qYXZhKHNldHRpbmdzLCBGQUxTRSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0
aW5nc19nZXRfZW5hYmxlX2phdmEoc2V0dGluZ3MpKTsKKworICAgIC8vIEJ5IGRlZmF1bHQsIEph
dmFTY3JpcHQgY2FuIG9wZW4gd2luZG93cyBhdXRvbWF0aWNhbGx5IGlzIGRpc2FibGVkLgorICAg
IGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2phdmFzY3JpcHRfY2FuX29wZW5fd2luZG93
c19hdXRvbWF0aWNhbGx5KHNldHRpbmdzKSk7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9qYXZh
c2NyaXB0X2Nhbl9vcGVuX3dpbmRvd3NfYXV0b21hdGljYWxseShzZXR0aW5ncywgVFJVRSk7Cisg
ICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9qYXZhc2NyaXB0X2Nhbl9vcGVuX3dpbmRv
d3NfYXV0b21hdGljYWxseShzZXR0aW5ncykpOworCisgICAgLy8gQnkgZGVmYXVsdCBoeXBlciBs
aW5rIGF1ZGl0aW5nIGlzIGRpc2FibGVkLgorICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3Nf
Z2V0X2VuYWJsZV9oeXBlcmxpbmtfYXVkaXRpbmcoc2V0dGluZ3MpKTsKKyAgICB3ZWJraXRfc2V0
dGluZ3Nfc2V0X2VuYWJsZV9oeXBlcmxpbmtfYXVkaXRpbmcoc2V0dGluZ3MsIFRSVUUpOworICAg
IGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2h5cGVybGlua19hdWRpdGluZyhz
ZXR0aW5ncykpOworCisgICAgLy8gRGVmYXVsdCBmb250IGZhbWlseSBpcyAic2Fucy1zZXJpZiIu
CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zZXR0aW5nc19nZXRfZGVmYXVsdF9mb250X2Zh
bWlseShzZXR0aW5ncyksID09LCAic2Fucy1zZXJpZiIpOworICAgIHdlYmtpdF9zZXR0aW5nc19z
ZXRfZGVmYXVsdF9mb250X2ZhbWlseShzZXR0aW5ncywgIm1vbm9zcGFjZSIpOworICAgIGdfYXNz
ZXJ0X2NtcHN0cih3ZWJraXRfc2V0dGluZ3NfZ2V0X2RlZmF1bHRfZm9udF9mYW1pbHkoc2V0dGlu
Z3MpLCA9PSwgIm1vbm9zcGFjZSIpOworCisgICAgLy8gRGVmYXVsdCBtb25vc3BhY2UgZm9udCBm
YW1pbHkgZm9udCBmYW1pbHkgaXMgIm1vbm9zcGFjZSIuCisgICAgZ19hc3NlcnRfY21wc3RyKHdl
YmtpdF9zZXR0aW5nc19nZXRfbW9ub3NwYWNlX2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJt
b25vc3BhY2UiKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X21vbm9zcGFjZV9mb250X2ZhbWls
eShzZXR0aW5ncywgInNhbnMtc2VyaWYiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3Nl
dHRpbmdzX2dldF9tb25vc3BhY2VfZm9udF9mYW1pbHkoc2V0dGluZ3MpLCA9PSwgInNhbnMtc2Vy
aWYiKTsKKworICAgIC8vIERlZmF1bHQgc2VyaWYgZm9udCBmYW1pbHkgaXMgInNlcmlmIi4KKyAg
ICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NldHRpbmdzX2dldF9zZXJpZl9mb250X2ZhbWlseShz
ZXR0aW5ncyksID09LCAic2VyaWYiKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X3NlcmlmX2Zv
bnRfZmFtaWx5KHNldHRpbmdzLCAic2Fucy1zZXJpZiIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3
ZWJraXRfc2V0dGluZ3NfZ2V0X3NlcmlmX2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJzYW5z
LXNlcmlmIik7CisKKyAgICAvLyBEZWZhdWx0IHNhbnMgc2VyaWYgZm9udCBmYW1pbHkgaXMgInNh
bnMtc2VyaWYiLgorICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2V0dGluZ3NfZ2V0X3NhbnNf
c2VyaWZfZm9udF9mYW1pbHkoc2V0dGluZ3MpLCA9PSwgInNhbnMtc2VyaWYiKTsKKyAgICB3ZWJr
aXRfc2V0dGluZ3Nfc2V0X3NhbnNfc2VyaWZfZm9udF9mYW1pbHkoc2V0dGluZ3MsICJzZXJpZiIp
OworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2V0dGluZ3NfZ2V0X3NhbnNfc2VyaWZfZm9u
dF9mYW1pbHkoc2V0dGluZ3MpLCA9PSwgInNlcmlmIik7CisKKyAgICAvLyBEZWZhdWx0IGN1cnNp
dmUgZm9udCBmYW1pbHkgInNlcmlmIi4KKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NldHRp
bmdzX2dldF9jdXJzaXZlX2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJzZXJpZiIpOworICAg
IHdlYmtpdF9zZXR0aW5nc19zZXRfY3Vyc2l2ZV9mb250X2ZhbWlseShzZXR0aW5ncywgInNhbnMt
c2VyaWYiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NldHRpbmdzX2dldF9jdXJzaXZl
X2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJzYW5zLXNlcmlmIik7CisKKyAgICAvLyBEZWZh
dWx0IGZhbnRhc3kgZm9udCBmYW1pbHkgaXMgInNlcmlmIi4KKyAgICBnX2Fzc2VydF9jbXBzdHIo
d2Via2l0X3NldHRpbmdzX2dldF9mYW50YXN5X2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJz
ZXJpZiIpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZmFudGFzeV9mb250X2ZhbWlseShzZXR0
aW5ncywgInNhbnMtc2VyaWYiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NldHRpbmdz
X2dldF9mYW50YXN5X2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJzYW5zLXNlcmlmIik7CisK
KyAgICAvLyBEZWZhdWx0IHBpY3RvZ3JhcGggZm9udCBmYW1pbHkgaXMgInNlcmlmIi4KKyAgICBn
X2Fzc2VydF9jbXBzdHIod2Via2l0X3NldHRpbmdzX2dldF9waWN0b2dyYXBoX2ZvbnRfZmFtaWx5
KHNldHRpbmdzKSwgPT0sICJzZXJpZiIpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfcGljdG9n
cmFwaF9mb250X2ZhbWlseShzZXR0aW5ncywgInNhbnMtc2VyaWYiKTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIod2Via2l0X3NldHRpbmdzX2dldF9waWN0b2dyYXBoX2ZvbnRfZmFtaWx5KHNldHRpbmdz
KSwgPT0sICJzYW5zLXNlcmlmIik7CisKKyAgICAvLyBEZWZhdWx0IGZvbnQgc2l6ZSBpcyAxNi4K
KyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9zZXR0aW5nc19nZXRfZGVmYXVsdF9mb250X3Np
emUoc2V0dGluZ3MpLCA9PSwgMTYpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZGVmYXVsdF9m
b250X3NpemUoc2V0dGluZ3MsIDE0KTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9zZXR0
aW5nc19nZXRfZGVmYXVsdF9mb250X3NpemUoc2V0dGluZ3MpLCA9PSwgMTQpOworCisgICAgLy8g
RGVmYXVsdCBtb25vc3BhY2UgZm9udCBzaXplIGlzIDEzLgorICAgIGdfYXNzZXJ0X2NtcHVpbnQo
d2Via2l0X3NldHRpbmdzX2dldF9kZWZhdWx0X21vbm9zcGFjZV9mb250X3NpemUoc2V0dGluZ3Mp
LCA9PSwgMTMpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZGVmYXVsdF9tb25vc3BhY2VfZm9u
dF9zaXplKHNldHRpbmdzLCAxMCk7CisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfc2V0dGlu
Z3NfZ2V0X2RlZmF1bHRfbW9ub3NwYWNlX2ZvbnRfc2l6ZShzZXR0aW5ncyksID09LCAxMCk7CisK
KyAgICAvLyBEZWZhdWx0IG1pbmltdW0gZm9udCBzaXplIGlzIDAuCisgICAgZ19hc3NlcnRfY21w
dWludCh3ZWJraXRfc2V0dGluZ3NfZ2V0X21pbmltdW1fZm9udF9zaXplKHNldHRpbmdzKSwgPT0s
IDApOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfbWluaW11bV9mb250X3NpemUoc2V0dGluZ3Ms
IDcpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X3NldHRpbmdzX2dldF9taW5pbXVtX2Zv
bnRfc2l6ZShzZXR0aW5ncyksID09LCA3KTsKKworICAgIC8vIERlZmF1bHQgY2hhcnNldCBpcyAi
aXNvLTg4NTktMSIuCisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zZXR0aW5nc19nZXRfZGVm
YXVsdF9jaGFyc2V0KHNldHRpbmdzKSwgPT0sICJpc28tODg1OS0xIik7CisgICAgd2Via2l0X3Nl
dHRpbmdzX3NldF9kZWZhdWx0X2NoYXJzZXQoc2V0dGluZ3MsICJ1dGY4Iik7CisgICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF9zZXR0aW5nc19nZXRfZGVmYXVsdF9jaGFyc2V0KHNldHRpbmdzKSwg
PT0sICJ1dGY4Iik7CisKKyAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVf
cHJpdmF0ZV9icm93c2luZyhzZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5h
YmxlX3ByaXZhdGVfYnJvd3Npbmcoc2V0dGluZ3MsIFRSVUUpOworICAgIGdfYXNzZXJ0KHdlYmtp
dF9zZXR0aW5nc19nZXRfZW5hYmxlX3ByaXZhdGVfYnJvd3Npbmcoc2V0dGluZ3MpKTsKKworICAg
IGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9kZXZlbG9wZXJfZXh0cmFzKHNl
dHRpbmdzKSk7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfZGV2ZWxvcGVyX2V4dHJh
cyhzZXR0aW5ncywgVFJVRSk7CisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFi
bGVfZGV2ZWxvcGVyX2V4dHJhcyhzZXR0aW5ncykpOworCisgICAgZ19hc3NlcnQod2Via2l0X3Nl
dHRpbmdzX2dldF9lbmFibGVfcmVzaXphYmxlX3RleHRfYXJlYXMoc2V0dGluZ3MpKTsKKyAgICB3
ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9yZXNpemFibGVfdGV4dF9hcmVhcyhzZXR0aW5ncywg
RkFMU0UpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9yZXNpemFi
bGVfdGV4dF9hcmVhcyhzZXR0aW5ncykpOworCisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdz
X2dldF9lbmFibGVfdGFic190b19saW5rcyhzZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5n
c19zZXRfZW5hYmxlX3RhYnNfdG9fbGlua3Moc2V0dGluZ3MsIEZBTFNFKTsKKyAgICBnX2Fzc2Vy
dCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfdGFic190b19saW5rcyhzZXR0aW5ncykpOwor
CisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2Ruc19wcmVmZXRjaGlu
ZyhzZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX2Ruc19wcmVmZXRj
aGluZyhzZXR0aW5ncywgVFJVRSk7CisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9l
bmFibGVfZG5zX3ByZWZldGNoaW5nKHNldHRpbmdzKSk7CisKKyAgICAvLyBDYXJldCBicm93c2lu
ZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3Nf
Z2V0X2VuYWJsZV9jYXJldF9icm93c2luZyhzZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5n
c19zZXRfZW5hYmxlX2NhcmV0X2Jyb3dzaW5nKHNldHRpbmdzLCBUUlVFKTsKKyAgICBnX2Fzc2Vy
dCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9jYXJldF9icm93c2luZyhzZXR0aW5ncykpOwor
CisgICAgLy8gRnVsbHNjcmVlbiBKYXZhU2NyaXB0IEFQSSBpcyBlbmFibGVkIGJ5IGRlZmF1bHQu
CisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfZnVsbHNjcmVlbihzZXR0
aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX2Z1bGxzY3JlZW4oc2V0dGlu
Z3MsIEZBTFNFKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfZnVs
bHNjcmVlbihzZXR0aW5ncykpOworCisgICAgLy8gUHJpbnQgYmFja2dyb3VuZHMgaXMgZW5hYmxl
ZCBieSBkZWZhdWx0CisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9wcmludF9iYWNr
Z3JvdW5kcyhzZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfcHJpbnRfYmFja2dy
b3VuZHMoc2V0dGluZ3MsIEZBTFNFKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dl
dF9wcmludF9iYWNrZ3JvdW5kcyhzZXR0aW5ncykpOworCisgICAgLy8gV2ViQXVkaW8gaXMgZGlz
YWJsZWQgYnkgZGVmYXVsdC4KKyAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFi
bGVfd2ViYXVkaW8oc2V0dGluZ3MpKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV93
ZWJhdWRpbyhzZXR0aW5ncywgVFJVRSk7CisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dl
dF9lbmFibGVfd2ViYXVkaW8oc2V0dGluZ3MpKTsKKworICAgIC8vIFdlYkdMIGlzIGRpc2FibGVk
IGJ5IGRlZmF1bHQuCisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3dl
YmdsKHNldHRpbmdzKSk7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfd2ViZ2woc2V0
dGluZ3MsIFRSVUUpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3dl
YmdsKHNldHRpbmdzKSk7CisKKyAgICAvLyBBbGxvdyBNb2RhbCBEaWFsb2dzIGlzIGRpc2FibGVk
IGJ5IGRlZmF1bHQuCisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfYWxsb3dfbW9k
YWxfZGlhbG9ncyhzZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfYWxsb3dfbW9k
YWxfZGlhbG9ncyhzZXR0aW5ncywgVFJVRSk7CisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdz
X2dldF9hbGxvd19tb2RhbF9kaWFsb2dzKHNldHRpbmdzKSk7CisKKyAgICAvLyBab29tIHRleHQg
b25seSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGlu
Z3NfZ2V0X3pvb21fdGV4dF9vbmx5KHNldHRpbmdzKSk7CisgICAgd2Via2l0X3NldHRpbmdzX3Nl
dF96b29tX3RleHRfb25seShzZXR0aW5ncywgVFJVRSk7CisgICAgZ19hc3NlcnQod2Via2l0X3Nl
dHRpbmdzX2dldF96b29tX3RleHRfb25seShzZXR0aW5ncykpOworCisgICAgLy8gQnkgZGVmYXVs
dCwgSmF2YVNjcmlwdCBjYW5ub3QgYWNjZXNzIHRoZSBjbGlwYm9hcmQuCisgICAgZ19hc3NlcnQo
IXdlYmtpdF9zZXR0aW5nc19nZXRfamF2YXNjcmlwdF9jYW5fYWNjZXNzX2NsaXBib2FyZChzZXR0
aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfamF2YXNjcmlwdF9jYW5fYWNjZXNzX2Ns
aXBib2FyZChzZXR0aW5ncywgVFJVRSk7CisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dl
dF9qYXZhc2NyaXB0X2Nhbl9hY2Nlc3NfY2xpcGJvYXJkKHNldHRpbmdzKSk7CisKKyAgICAvLyBC
eSBkZWZhdWx0LCBtZWRpYSBwbGF5YmFjayBkb2Vzbid0IHJlcXVpcmUgdXNlciBnZXN0dXJlcy4K
KyAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9tZWRpYV9wbGF5YmFja19yZXF1aXJl
c191c2VyX2dlc3R1cmUoc2V0dGluZ3MpKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X21lZGlh
X3BsYXliYWNrX3JlcXVpcmVzX3VzZXJfZ2VzdHVyZShzZXR0aW5ncywgVFJVRSk7CisgICAgZ19h
c3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9tZWRpYV9wbGF5YmFja19yZXF1aXJlc191c2VyX2dl
c3R1cmUoc2V0dGluZ3MpKTsKKworICAgIC8vIEJ5IGRlZmF1bHQsIGlubGluZSBtZWRpYSBwbGF5
YmFjayBpcyBhbGxvd2VkCisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9tZWRpYV9w
bGF5YmFja19hbGxvd3NfaW5saW5lKHNldHRpbmdzKSk7CisgICAgd2Via2l0X3NldHRpbmdzX3Nl
dF9tZWRpYV9wbGF5YmFja19hbGxvd3NfaW5saW5lKHNldHRpbmdzLCBGQUxTRSk7CisgICAgZ19h
c3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfbWVkaWFfcGxheWJhY2tfYWxsb3dzX2lubGluZShz
ZXR0aW5ncykpOworCisgICAgLy8gQnkgZGVmYXVsdCwgZGVidWcgaW5kaWNhdG9ycyBhcmUgZGlz
YWJsZWQuCisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZHJhd19jb21wb3NpdGlu
Z19pbmRpY2F0b3JzKHNldHRpbmdzKSk7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9kcmF3X2Nv
bXBvc2l0aW5nX2luZGljYXRvcnMoc2V0dGluZ3MsIFRSVUUpOworICAgIGdfYXNzZXJ0KHdlYmtp
dF9zZXR0aW5nc19nZXRfZHJhd19jb21wb3NpdGluZ19pbmRpY2F0b3JzKHNldHRpbmdzKSk7CisK
KyAgICAvLyBCeSBkZWZhdWx0LCBzaXRlIHNwZWNpZmljIHF1aXJrcyBhcmUgZGlzYWJsZWQuCisg
ICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3NpdGVfc3BlY2lmaWNfcXVp
cmtzKHNldHRpbmdzKSk7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfc2l0ZV9zcGVj
aWZpY19xdWlya3Moc2V0dGluZ3MsIFRSVUUpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5n
c19nZXRfZW5hYmxlX3NpdGVfc3BlY2lmaWNfcXVpcmtzKHNldHRpbmdzKSk7CisKKyAgICAvLyBC
eSBkZWZhdWx0LCBwYWdlIGNhY2hlIGlzIGVuYWJsZWQuCisgICAgZ19hc3NlcnQod2Via2l0X3Nl
dHRpbmdzX2dldF9lbmFibGVfcGFnZV9jYWNoZShzZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0
aW5nc19zZXRfZW5hYmxlX3BhZ2VfY2FjaGUoc2V0dGluZ3MsIEZBTFNFKTsKKyAgICBnX2Fzc2Vy
dCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfcGFnZV9jYWNoZShzZXR0aW5ncykpOworCisg
ICAgLy8gQnkgZGVmYXVsdCwgc21vb3RoIHNjcm9sbGluZyBpcyBkaXNhYmxlZC4KKyAgICBnX2Fz
c2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfc21vb3RoX3Njcm9sbGluZyhzZXR0aW5n
cykpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX3Ntb290aF9zY3JvbGxpbmcoc2V0
dGluZ3MsIFRSVUUpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3Nt
b290aF9zY3JvbGxpbmcoc2V0dGluZ3MpKTsKKworICAgIC8vIEJ5IGRlZmF1bHQsIGFjY2VsZXJh
dGVkIDJEIGNhbnZhcyBpcyBkaXNhYmxlZC4KKyAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdz
X2dldF9lbmFibGVfYWNjZWxlcmF0ZWRfMmRfY2FudmFzKHNldHRpbmdzKSk7CisgICAgd2Via2l0
X3NldHRpbmdzX3NldF9lbmFibGVfYWNjZWxlcmF0ZWRfMmRfY2FudmFzKHNldHRpbmdzLCBUUlVF
KTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9hY2NlbGVyYXRlZF8y
ZF9jYW52YXMoc2V0dGluZ3MpKTsKKworICAgIC8vIEJ5IGRlZmF1bHQsIHdyaXRpbmcgb2YgY29u
c29sZSBtZXNzYWdlcyB0byBzdGRvdXQgaXMgZGlzYWJsZWQuCisgICAgZ19hc3NlcnQoIXdlYmtp
dF9zZXR0aW5nc19nZXRfZW5hYmxlX3dyaXRlX2NvbnNvbGVfbWVzc2FnZXNfdG9fc3Rkb3V0KHNl
dHRpbmdzKSk7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfd3JpdGVfY29uc29sZV9t
ZXNzYWdlc190b19zdGRvdXQoc2V0dGluZ3MsIFRSVUUpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9z
ZXR0aW5nc19nZXRfZW5hYmxlX3dyaXRlX2NvbnNvbGVfbWVzc2FnZXNfdG9fc3Rkb3V0KHNldHRp
bmdzKSk7CisKKyAgICAvLyBNZWRpYVN0cmVhbSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorICAg
IGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9tZWRpYV9zdHJlYW0oc2V0dGlu
Z3MpKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9tZWRpYV9zdHJlYW0oc2V0dGlu
Z3MsIFRSVUUpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX21lZGlh
X3N0cmVhbShzZXR0aW5ncykpOworCisgICAgLy8gQnkgZGVmYXVsdCwgU3BhdGlhbE5hdmlnYXRp
b24gaXMgZGlzYWJsZWQKKyAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVf
c3BhdGlhbF9uYXZpZ2F0aW9uKHNldHRpbmdzKSk7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9l
bmFibGVfc3BhdGlhbF9uYXZpZ2F0aW9uKHNldHRpbmdzLCBUUlVFKTsKKyAgICBnX2Fzc2VydCh3
ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9zcGF0aWFsX25hdmlnYXRpb24oc2V0dGluZ3MpKTsK
KworICAgIC8vIE1lZGlhU291cmNlIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQKKyAgICBnX2Fzc2Vy
dCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfbWVkaWFzb3VyY2Uoc2V0dGluZ3MpKTsKKyAg
ICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9tZWRpYXNvdXJjZShzZXR0aW5ncywgVFJVRSk7
CisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfbWVkaWFzb3VyY2Uoc2V0
dGluZ3MpKTsKKworICAgIGdfb2JqZWN0X3VucmVmKEdfT0JKRUNUKHNldHRpbmdzKSk7Cit9CisK
K3ZvaWQgdGVzdFdlYktpdFNldHRpbmdzTmV3V2l0aFNldHRpbmdzKFRlc3QqIHRlc3QsIGdjb25z
dHBvaW50ZXIpCit7CisgICAgR1JlZlB0cjxXZWJLaXRTZXR0aW5ncz4gc2V0dGluZ3MgPSBhZG9w
dEdSZWYod2Via2l0X3NldHRpbmdzX25ld193aXRoX3NldHRpbmdzKCJlbmFibGUtamF2YXNjcmlw
dCIsIEZBTFNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXV0by1sb2FkLWltYWdlcyIs
IEZBTFNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibG9hZC1pY29ucy1pZ25vcmluZy1p
bWFnZS1sb2FkLXNldHRpbmciLCBUUlVFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxM
KSk7CisgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09C
SkVDVChzZXR0aW5ncy5nZXQoKSkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0
X2VuYWJsZV9qYXZhc2NyaXB0KHNldHRpbmdzLmdldCgpKSk7CisgICAgZ19hc3NlcnQoIXdlYmtp
dF9zZXR0aW5nc19nZXRfYXV0b19sb2FkX2ltYWdlcyhzZXR0aW5ncy5nZXQoKSkpOworICAgIGdf
YXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfbG9hZF9pY29uc19pZ25vcmluZ19pbWFnZV9sb2Fk
X3NldHRpbmcoc2V0dGluZ3MuZ2V0KCkpKTsKK30KKworc3RhdGljIENTdHJpbmcgY29udmVydFdl
YlZpZXdNYWluUmVzb3VyY2VEYXRhVG9DU3RyaW5nKFdlYlZpZXdUZXN0KiB0ZXN0KQoreworICAg
IHNpemVfdCBtYWluUmVzb3VyY2VEYXRhU2l6ZSA9IDA7CisgICAgY29uc3QgY2hhciogbWFpblJl
c291cmNlRGF0YSA9IHRlc3QtPm1haW5SZXNvdXJjZURhdGEobWFpblJlc291cmNlRGF0YVNpemUp
OworICAgIHJldHVybiBDU3RyaW5nKG1haW5SZXNvdXJjZURhdGEsIG1haW5SZXNvdXJjZURhdGFT
aXplKTsKK30KKworc3RhdGljIHZvaWQgYXNzZXJ0VGhhdFVzZXJBZ2VudElzU2VudEluSGVhZGVy
cyhXZWJWaWV3VGVzdCogdGVzdCwgY29uc3QgQ1N0cmluZyYgdXNlckFnZW50KQoreworICAgIHRl
c3QtPmxvYWRVUkkoZ1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7CisgICAgdGVz
dC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgQVNTRVJUX0NNUF9DU1RSSU5HKGNvbnZl
cnRXZWJWaWV3TWFpblJlc291cmNlRGF0YVRvQ1N0cmluZyh0ZXN0KSwgPT0sIHVzZXJBZ2VudCk7
Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJLaXRTZXR0aW5nc1VzZXJBZ2VudChXZWJWaWV3VGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBHUmVmUHRyPFdlYktpdFNldHRpbmdzPiBz
ZXR0aW5ncyA9IGFkb3B0R1JlZih3ZWJraXRfc2V0dGluZ3NfbmV3KCkpOworICAgIENTdHJpbmcg
ZGVmYXVsdFVzZXJBZ2VudCA9IHdlYmtpdF9zZXR0aW5nc19nZXRfdXNlcl9hZ2VudChzZXR0aW5n
cy5nZXQoKSk7CisgICAgd2Via2l0X3dlYl92aWV3X3NldF9zZXR0aW5ncyh0ZXN0LT5tX3dlYlZp
ZXcsIHNldHRpbmdzLmdldCgpKTsKKworICAgIGdfYXNzZXJ0KGdfc3Ryc3RyX2xlbihkZWZhdWx0
VXNlckFnZW50LmRhdGEoKSwgLTEsICJBcHBsZVdlYktpdCIpKTsKKyAgICBnX2Fzc2VydChnX3N0
cnN0cl9sZW4oZGVmYXVsdFVzZXJBZ2VudC5kYXRhKCksIC0xLCAiU2FmYXJpIikpOworCisgICAg
d2Via2l0X3NldHRpbmdzX3NldF91c2VyX2FnZW50KHNldHRpbmdzLmdldCgpLCAwKTsKKyAgICBn
X2Fzc2VydF9jbXBzdHIoZGVmYXVsdFVzZXJBZ2VudC5kYXRhKCksID09LCB3ZWJraXRfc2V0dGlu
Z3NfZ2V0X3VzZXJfYWdlbnQoc2V0dGluZ3MuZ2V0KCkpKTsKKyAgICBhc3NlcnRUaGF0VXNlckFn
ZW50SXNTZW50SW5IZWFkZXJzKHRlc3QsIGRlZmF1bHRVc2VyQWdlbnQuZGF0YSgpKTsKKworICAg
IHdlYmtpdF9zZXR0aW5nc19zZXRfdXNlcl9hZ2VudChzZXR0aW5ncy5nZXQoKSwgIiIpOworICAg
IGdfYXNzZXJ0X2NtcHN0cihkZWZhdWx0VXNlckFnZW50LmRhdGEoKSwgPT0sIHdlYmtpdF9zZXR0
aW5nc19nZXRfdXNlcl9hZ2VudChzZXR0aW5ncy5nZXQoKSkpOworCisgICAgY29uc3QgY2hhciog
ZnVua3lVc2VyQWdlbnQgPSAiRnVua3khIjsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X3VzZXJf
YWdlbnQoc2V0dGluZ3MuZ2V0KCksIGZ1bmt5VXNlckFnZW50KTsKKyAgICBnX2Fzc2VydF9jbXBz
dHIoZnVua3lVc2VyQWdlbnQsID09LCB3ZWJraXRfc2V0dGluZ3NfZ2V0X3VzZXJfYWdlbnQoc2V0
dGluZ3MuZ2V0KCkpKTsKKyAgICBhc3NlcnRUaGF0VXNlckFnZW50SXNTZW50SW5IZWFkZXJzKHRl
c3QsIGZ1bmt5VXNlckFnZW50KTsKKworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfdXNlcl9hZ2Vu
dF93aXRoX2FwcGxpY2F0aW9uX2RldGFpbHMoc2V0dGluZ3MuZ2V0KCksICJXZWJLaXRHVEsrIiwg
MCk7CisgICAgY29uc3QgY2hhciogdXNlckFnZW50V2l0aE51bGxWZXJzaW9uID0gd2Via2l0X3Nl
dHRpbmdzX2dldF91c2VyX2FnZW50KHNldHRpbmdzLmdldCgpKTsKKyAgICBnX2Fzc2VydF9jbXBz
dHIoZ19zdHJzdHJfbGVuKHVzZXJBZ2VudFdpdGhOdWxsVmVyc2lvbiwgLTEsIGRlZmF1bHRVc2Vy
QWdlbnQuZGF0YSgpKSwgPT0sIHVzZXJBZ2VudFdpdGhOdWxsVmVyc2lvbik7CisgICAgZ19hc3Nl
cnQoZ19zdHJzdHJfbGVuKHVzZXJBZ2VudFdpdGhOdWxsVmVyc2lvbiwgLTEsICJXZWJLaXRHVEsr
IikpOworCisgICAgd2Via2l0X3NldHRpbmdzX3NldF91c2VyX2FnZW50X3dpdGhfYXBwbGljYXRp
b25fZGV0YWlscyhzZXR0aW5ncy5nZXQoKSwgIldlYktpdEdUSysiLCAiIik7CisgICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF9zZXR0aW5nc19nZXRfdXNlcl9hZ2VudChzZXR0aW5ncy5nZXQoKSks
ID09LCB1c2VyQWdlbnRXaXRoTnVsbFZlcnNpb24pOworCisgICAgd2Via2l0X3NldHRpbmdzX3Nl
dF91c2VyX2FnZW50X3dpdGhfYXBwbGljYXRpb25fZGV0YWlscyhzZXR0aW5ncy5nZXQoKSwgIldl
YkNhdEdUSysiLCAiMy40LjUiKTsKKyAgICBjb25zdCBjaGFyKiBuZXdVc2VyQWdlbnQgPSB3ZWJr
aXRfc2V0dGluZ3NfZ2V0X3VzZXJfYWdlbnQoc2V0dGluZ3MuZ2V0KCkpOworICAgIGdfYXNzZXJ0
KGdfc3Ryc3RyX2xlbihuZXdVc2VyQWdlbnQsIC0xLCAiMy40LjUiKSk7CisgICAgZ19hc3NlcnQo
Z19zdHJzdHJfbGVuKG5ld1VzZXJBZ2VudCwgLTEsICJXZWJDYXRHVEsrIikpOworfQorCitzdGF0
aWMgdm9pZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBt
ZXNzYWdlLCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiwgU291cENsaWVudENvbnRleHQq
LCBncG9pbnRlcikKK3sKKyAgICBpZiAobWVzc2FnZS0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dF
VCkgeworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRV
U19OT1RfSU1QTEVNRU5URUQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGdf
c3RyX2VxdWFsKHBhdGgsICIvIikpIHsKKyAgICAgICAgY29uc3QgY2hhciogdXNlckFnZW50ID0g
c291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X29uZShtZXNzYWdlLT5yZXF1ZXN0X2hlYWRlcnMsICJV
c2VyLUFnZW50Iik7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNP
VVBfU1RBVFVTX09LKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2Ut
PnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX0NPUFksIHVzZXJBZ2VudCwgc3RybGVuKHVzZXJB
Z2VudCkpOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNw
b25zZV9ib2R5KTsKKyAgICB9IGVsc2UKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMo
bWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0ZPVU5EKTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQor
eworICAgIGdTZXJ2ZXIgPSBuZXcgV2ViS2l0VGVzdFNlcnZlcigpOworICAgIGdTZXJ2ZXItPnJ1
bihzZXJ2ZXJDYWxsYmFjayk7CisKKyAgICBUZXN0OjphZGQoIldlYktpdFNldHRpbmdzIiwgIndl
YmtpdC1zZXR0aW5ncyIsIHRlc3RXZWJLaXRTZXR0aW5ncyk7CisgICAgVGVzdDo6YWRkKCJXZWJL
aXRTZXR0aW5ncyIsICJuZXctd2l0aC1zZXR0aW5ncyIsIHRlc3RXZWJLaXRTZXR0aW5nc05ld1dp
dGhTZXR0aW5ncyk7CisgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0U2V0dGluZ3MiLCAidXNl
ci1hZ2VudCIsIHRlc3RXZWJLaXRTZXR0aW5nc1VzZXJBZ2VudCk7Cit9CisKK3ZvaWQgYWZ0ZXJB
bGwoKQoreworICAgIGRlbGV0ZSBnU2VydmVyOworfQorCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFZlcnNpb24uY3BwIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRWZXJzaW9uLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzQ3ZmY5Ci0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRWZXJzaW9u
LmNwcApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBT
LkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJUZXN0TWFpbi5oIgorI2luY2x1
ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdDIuaD4KKworCitzdGF0aWMg
dm9pZCB0ZXN0V2ViS2l0VmVyc2lvbihUZXN0KiwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBnX2Fz
c2VydF9jbXB1aW50KHdlYmtpdF9nZXRfbWFqb3JfdmVyc2lvbigpLCA9PSwgV0VCS0lUX01BSk9S
X1ZFUlNJT04pOworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2dldF9taW5vcl92ZXJzaW9u
KCksID09LCBXRUJLSVRfTUlOT1JfVkVSU0lPTik7CisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJr
aXRfZ2V0X21pY3JvX3ZlcnNpb24oKSwgPT0sIFdFQktJVF9NSUNST19WRVJTSU9OKTsKK30KKwor
c3RhdGljIHZvaWQgdGVzdFdlYktpdENoZWNrVmVyc2lvbihUZXN0KiwgZ2NvbnN0cG9pbnRlcikK
K3sKKyAgICBnX2Fzc2VydChXRUJLSVRfQ0hFQ0tfVkVSU0lPTihXRUJLSVRfTUFKT1JfVkVSU0lP
TiwgV0VCS0lUX01JTk9SX1ZFUlNJT04sIFdFQktJVF9NSUNST19WRVJTSU9OKSk7CisgICAgZ19h
c3NlcnQoIVdFQktJVF9DSEVDS19WRVJTSU9OKFdFQktJVF9NQUpPUl9WRVJTSU9OICsgMSwgV0VC
S0lUX01JTk9SX1ZFUlNJT04sIFdFQktJVF9NSUNST19WRVJTSU9OKSk7CisgICAgZ19hc3NlcnQo
IVdFQktJVF9DSEVDS19WRVJTSU9OKFdFQktJVF9NQUpPUl9WRVJTSU9OLCBXRUJLSVRfTUlOT1Jf
VkVSU0lPTiArIDEsIFdFQktJVF9NSUNST19WRVJTSU9OKSk7CisgICAgZ19hc3NlcnQoIVdFQktJ
VF9DSEVDS19WRVJTSU9OKFdFQktJVF9NQUpPUl9WRVJTSU9OLCBXRUJLSVRfTUlOT1JfVkVSU0lP
TiwgV0VCS0lUX01JQ1JPX1ZFUlNJT04gKyAxKSk7Cit9CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sK
KyAgICBUZXN0OjphZGQoIldlYktpdFZlcnNpb24iLCAidmVyc2lvbiIsIHRlc3RXZWJLaXRWZXJz
aW9uKTsKKyAgICBUZXN0OjphZGQoIldlYktpdFZlcnNpb24iLCAiY2hlY2stdmVyc2lvbiIsIHRl
c3RXZWJLaXRDaGVja1ZlcnNpb24pOworfQorCit2b2lkIGFmdGVyQWxsKCkKK3sKK30KZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0V2Vi
Q29udGV4dC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdl
YktpdFdlYkNvbnRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkz
MGY0MDYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dDJHdGsvVGVzdFdlYktpdFdlYkNvbnRleHQuY3BwCkBAIC0wLDAgKzEsNDI1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
bmNsdWRlICJMb2FkVHJhY2tpbmdUZXN0LmgiCisjaW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5o
IgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdDIuaD4KKyNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4K
KyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nSGFzaC5oPgorCitzdGF0aWMgV2ViS2l0VGVzdFNlcnZlcioga1NlcnZlcjsKKworc3RhdGlj
IHZvaWQgdGVzdFdlYkNvbnRleHREZWZhdWx0KFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7
CisgICAgLy8gQ2hlY2sgdGhlcmUncyBhIHNpbmdsZSBpbnN0YW5jZSBvZiB0aGUgZGVmYXVsdCB3
ZWIgY29udGV4dC4KKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQo
KSA9PSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSk7Cit9CisKK2NsYXNzIFBsdWdp
bnNUZXN0OiBwdWJsaWMgVGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVS
RShQbHVnaW5zVGVzdCk7CisKKyAgICBQbHVnaW5zVGVzdCgpCisgICAgICAgIDogbV9jb250ZXh0
KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpKQorICAgICAgICAsIG1fbWFpbkxvb3Ao
Z19tYWluX2xvb3BfbmV3KDAsIFRSVUUpKQorICAgICAgICAsIG1fcGx1Z2lucygwKQorICAgIHsK
KyAgICAgICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF9hZGRpdGlvbmFsX3BsdWdpbnNfZGlyZWN0
b3J5KG1fY29udGV4dCwgV0VCS0lUX1RFU1RfUExVR0lOX0RJUik7CisgICAgfQorCisgICAgflBs
dWdpbnNUZXN0KCkKKyAgICB7CisgICAgICAgIGdfbWFpbl9sb29wX3VucmVmKG1fbWFpbkxvb3Ap
OworICAgICAgICBnX2xpc3RfZnJlZV9mdWxsKG1fcGx1Z2lucywgZ19vYmplY3RfdW5yZWYpOwor
ICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGdldFBsdWdpbnNBc3luY1JlYWR5Q2FsbGJhY2soR09i
amVjdCosIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBQbHVnaW5zVGVzdCogdGVzdCkKKyAgICB7Cisg
ICAgICAgIHRlc3QtPm1fcGx1Z2lucyA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfcGx1Z2luc19m
aW5pc2godGVzdC0+bV9jb250ZXh0LCByZXN1bHQsIDApOworICAgICAgICBnX21haW5fbG9vcF9x
dWl0KHRlc3QtPm1fbWFpbkxvb3ApOworICAgIH0KKworICAgIEdMaXN0KiBnZXRQbHVnaW5zKCkK
KyAgICB7CisgICAgICAgIGdfbGlzdF9mcmVlX2Z1bGwobV9wbHVnaW5zLCBnX29iamVjdF91bnJl
Zik7CisgICAgICAgIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfcGx1Z2lucyhtX2NvbnRleHQsIDAs
IHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4oZ2V0UGx1Z2luc0FzeW5jUmVh
ZHlDYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7
CisgICAgICAgIHJldHVybiBtX3BsdWdpbnM7CisgICAgfQorCisgICAgV2ViS2l0V2ViQ29udGV4
dCogbV9jb250ZXh0OworICAgIEdNYWluTG9vcCogbV9tYWluTG9vcDsKKyAgICBHTGlzdCogbV9w
bHVnaW5zOworfTsKKworc3RhdGljIHZvaWQgdGVzdFdlYkNvbnRleHRHZXRQbHVnaW5zKFBsdWdp
bnNUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIEdMaXN0KiBwbHVnaW5zID0gdGVz
dC0+Z2V0UGx1Z2lucygpOworICAgIGdfYXNzZXJ0KHBsdWdpbnMpOworCisgICAgR1JlZlB0cjxX
ZWJLaXRQbHVnaW4+IHRlc3RQbHVnaW47CisgICAgZm9yIChHTGlzdCogaXRlbSA9IHBsdWdpbnM7
IGl0ZW07IGl0ZW0gPSBnX2xpc3RfbmV4dChpdGVtKSkgeworICAgICAgICBXZWJLaXRQbHVnaW4q
IHBsdWdpbiA9IFdFQktJVF9QTFVHSU4oaXRlbS0+ZGF0YSk7CisgICAgICAgIHRlc3QtPmFzc2Vy
dE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QocGx1Z2luKSk7CisgICAg
ICAgIGlmICghZ19zdHJjbXAwKHdlYmtpdF9wbHVnaW5fZ2V0X25hbWUocGx1Z2luKSwgIldlYktp
dCBUZXN0IFBsdWdJbiIpKSB7CisgICAgICAgICAgICB0ZXN0UGx1Z2luID0gcGx1Z2luOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgZ19hc3NlcnQoV0VCS0lUX0lT
X1BMVUdJTih0ZXN0UGx1Z2luLmdldCgpKSk7CisKKyAgICBHT3duUHRyPGNoYXI+IHBsdWdpblBh
dGgoZ19idWlsZF9maWxlbmFtZShXRUJLSVRfVEVTVF9QTFVHSU5fRElSLCAibGliVGVzdE5ldHNj
YXBlUGx1Z2luLnNvIiwgTlVMTCkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfcGx1Z2lu
X2dldF9wYXRoKHRlc3RQbHVnaW4uZ2V0KCkpLCA9PSwgcGx1Z2luUGF0aC5nZXQoKSk7CisgICAg
Z19hc3NlcnRfY21wc3RyKHdlYmtpdF9wbHVnaW5fZ2V0X2Rlc2NyaXB0aW9uKHRlc3RQbHVnaW4u
Z2V0KCkpLCA9PSwgIlNpbXBsZSBOZXRzY2FwZcKuIHBsdWctaW4gdGhhdCBoYW5kbGVzIHRlc3Qg
Y29udGVudCBmb3IgV2ViS2l0Iik7CisgICAgR0xpc3QqIG1pbWVJbmZvTGlzdCA9IHdlYmtpdF9w
bHVnaW5fZ2V0X21pbWVfaW5mb19saXN0KHRlc3RQbHVnaW4uZ2V0KCkpOworICAgIGdfYXNzZXJ0
KG1pbWVJbmZvTGlzdCk7CisgICAgZ19hc3NlcnRfY21wdWludChnX2xpc3RfbGVuZ3RoKG1pbWVJ
bmZvTGlzdCksID09LCAyKTsKKworICAgIFdlYktpdE1pbWVJbmZvKiBtaW1lSW5mbyA9IHN0YXRp
Y19jYXN0PFdlYktpdE1pbWVJbmZvKj4obWltZUluZm9MaXN0LT5kYXRhKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X21pbWVfaW5mb19nZXRfbWltZV90eXBlKG1pbWVJbmZvKSwgPT0sICJp
bWFnZS9wbmciKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X21pbWVfaW5mb19nZXRfZGVz
Y3JpcHRpb24obWltZUluZm8pLCA9PSwgInBuZyBpbWFnZSIpOworICAgIGNvbnN0IGdjaGFyKiBj
b25zdCogZXh0ZW5zaW9ucyA9IHdlYmtpdF9taW1lX2luZm9fZ2V0X2V4dGVuc2lvbnMobWltZUlu
Zm8pOworICAgIGdfYXNzZXJ0KGV4dGVuc2lvbnMpOworICAgIGdfYXNzZXJ0X2NtcHN0cihleHRl
bnNpb25zWzBdLCA9PSwgInBuZyIpOworCisgICAgbWltZUluZm9MaXN0ID0gZ19saXN0X25leHQo
bWltZUluZm9MaXN0KTsKKyAgICBtaW1lSW5mbyA9IHN0YXRpY19jYXN0PFdlYktpdE1pbWVJbmZv
Kj4obWltZUluZm9MaXN0LT5kYXRhKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X21pbWVf
aW5mb19nZXRfbWltZV90eXBlKG1pbWVJbmZvKSwgPT0sICJhcHBsaWNhdGlvbi94LXdlYmtpdC10
ZXN0LW5ldHNjYXBlIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9taW1lX2luZm9fZ2V0
X2Rlc2NyaXB0aW9uKG1pbWVJbmZvKSwgPT0sICJ0ZXN0IG5ldHNjYXBlIGNvbnRlbnQiKTsKKyAg
ICBleHRlbnNpb25zID0gd2Via2l0X21pbWVfaW5mb19nZXRfZXh0ZW5zaW9ucyhtaW1lSW5mbyk7
CisgICAgZ19hc3NlcnQoZXh0ZW5zaW9ucyk7CisgICAgZ19hc3NlcnRfY21wc3RyKGV4dGVuc2lv
bnNbMF0sID09LCAidGVzdG5ldHNjYXBlIik7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyKiBrQmFy
SFRNTCA9ICI8aHRtbD48Ym9keT5CYXI8L2JvZHk+PC9odG1sPiI7CitzdGF0aWMgY29uc3QgY2hh
cioga0VjaG9IVE1MRm9ybWF0ID0gIjxodG1sPjxib2R5PiVzPC9ib2R5PjwvaHRtbD4iOworc3Rh
dGljIGNvbnN0IGNoYXIqIGVycm9yRG9tYWluID0gInRlc3QiOworc3RhdGljIGNvbnN0IGludCBl
cnJvckNvZGUgPSAxMDsKK3N0YXRpYyBjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2UgPSAiRXJyb3Ig
bWVzc2FnZS4iOworCitjbGFzcyBVUklTY2hlbWVUZXN0OiBwdWJsaWMgTG9hZFRyYWNraW5nVGVz
dCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShVUklTY2hlbWVUZXN0KTsK
KworICAgIHN0cnVjdCBVUklTY2hlbWVIYW5kbGVyIHsKKyAgICAgICAgVVJJU2NoZW1lSGFuZGxl
cigpCisgICAgICAgICAgICA6IHJlcGx5TGVuZ3RoKDApCisgICAgICAgIHsKKyAgICAgICAgfQor
CisgICAgICAgIFVSSVNjaGVtZUhhbmRsZXIoY29uc3QgY2hhciogcmVwbHksIGludCByZXBseUxl
bmd0aCwgY29uc3QgY2hhciogbWltZVR5cGUpCisgICAgICAgICAgICA6IHJlcGx5KHJlcGx5KQor
ICAgICAgICAgICAgLCByZXBseUxlbmd0aChyZXBseUxlbmd0aCkKKyAgICAgICAgICAgICwgbWlt
ZVR5cGUobWltZVR5cGUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIENTdHJpbmcg
cmVwbHk7CisgICAgICAgIGludCByZXBseUxlbmd0aDsKKyAgICAgICAgQ1N0cmluZyBtaW1lVHlw
ZTsKKyAgICB9OworCisgICAgc3RhdGljIHZvaWQgdXJpU2NoZW1lUmVxdWVzdENhbGxiYWNrKFdl
YktpdFVSSVNjaGVtZVJlcXVlc3QqIHJlcXVlc3QsIGdwb2ludGVyIHVzZXJEYXRhKQorICAgIHsK
KyAgICAgICAgVVJJU2NoZW1lVGVzdCogdGVzdCA9IHN0YXRpY19jYXN0PFVSSVNjaGVtZVRlc3Qq
Pih1c2VyRGF0YSk7CisgICAgICAgIHRlc3QtPm1fdXJpU2NoZW1lUmVxdWVzdCA9IHJlcXVlc3Q7
CisgICAgICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19P
QkpFQ1QocmVxdWVzdCkpOworCisgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF91cmlfc2NoZW1lX3Jl
cXVlc3RfZ2V0X3dlYl92aWV3KHJlcXVlc3QpID09IHRlc3QtPm1fd2ViVmlldyk7CisKKyAgICAg
ICAgR1JlZlB0cjxHSW5wdXRTdHJlYW0+IGlucHV0U3RyZWFtID0gYWRvcHRHUmVmKGdfbWVtb3J5
X2lucHV0X3N0cmVhbV9uZXcoKSk7CisgICAgICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRl
ZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QoaW5wdXRTdHJlYW0uZ2V0KCkpKTsKKworICAgICAg
ICBjb25zdCBjaGFyKiBzY2hlbWUgPSB3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dldF9zY2hl
bWUocmVxdWVzdCk7CisgICAgICAgIGdfYXNzZXJ0KHNjaGVtZSk7CisgICAgICAgIGdfYXNzZXJ0
KHRlc3QtPm1faGFuZGxlcnNNYXAuY29udGFpbnMoU3RyaW5nOjpmcm9tVVRGOChzY2hlbWUpKSk7
CisKKyAgICAgICAgaWYgKCFnX3N0cmNtcDAoc2NoZW1lLCAiZXJyb3IiKSkgeworICAgICAgICAg
ICAgR093blB0cjxHRXJyb3I+IGVycm9yKGdfZXJyb3JfbmV3X2xpdGVyYWwoZ19xdWFya19mcm9t
X3N0cmluZyhlcnJvckRvbWFpbiksIGVycm9yQ29kZSwgZXJyb3JNZXNzYWdlKSk7CisgICAgICAg
ICAgICB3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2ZpbmlzaF9lcnJvcihyZXF1ZXN0LCBlcnJv
ci5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjb25z
dCBVUklTY2hlbWVIYW5kbGVyJiBoYW5kbGVyID0gdGVzdC0+bV9oYW5kbGVyc01hcC5nZXQoU3Ry
aW5nOjpmcm9tVVRGOChzY2hlbWUpKTsKKworICAgICAgICBpZiAoIWdfc3RyY21wMChzY2hlbWUs
ICJlY2hvIikpIHsKKyAgICAgICAgICAgIGNoYXIqIHJlcGx5SFRNTCA9IGdfc3RyZHVwX3ByaW50
ZihoYW5kbGVyLnJlcGx5LmRhdGEoKSwgd2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9nZXRfcGF0
aChyZXF1ZXN0KSk7CisgICAgICAgICAgICBnX21lbW9yeV9pbnB1dF9zdHJlYW1fYWRkX2RhdGEo
R19NRU1PUllfSU5QVVRfU1RSRUFNKGlucHV0U3RyZWFtLmdldCgpKSwgcmVwbHlIVE1MLCBzdHJs
ZW4ocmVwbHlIVE1MKSwgZ19mcmVlKTsKKyAgICAgICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKHNj
aGVtZSwgImNsb3NlZCIpKQorICAgICAgICAgICAgZ19pbnB1dF9zdHJlYW1fY2xvc2UoaW5wdXRT
dHJlYW0uZ2V0KCksIDAsIDApOworICAgICAgICBlbHNlIGlmICghaGFuZGxlci5yZXBseS5pc051
bGwoKSkKKyAgICAgICAgICAgIGdfbWVtb3J5X2lucHV0X3N0cmVhbV9hZGRfZGF0YShHX01FTU9S
WV9JTlBVVF9TVFJFQU0oaW5wdXRTdHJlYW0uZ2V0KCkpLCBoYW5kbGVyLnJlcGx5LmRhdGEoKSwg
aGFuZGxlci5yZXBseS5sZW5ndGgoKSwgMCk7CisKKyAgICAgICAgd2Via2l0X3VyaV9zY2hlbWVf
cmVxdWVzdF9maW5pc2gocmVxdWVzdCwgaW5wdXRTdHJlYW0uZ2V0KCksIGhhbmRsZXIucmVwbHlM
ZW5ndGgsIGhhbmRsZXIubWltZVR5cGUuZGF0YSgpKTsKKyAgICB9CisKKyAgICB2b2lkIHJlZ2lz
dGVyVVJJU2NoZW1lSGFuZGxlcihjb25zdCBjaGFyKiBzY2hlbWUsIGNvbnN0IGNoYXIqIHJlcGx5
LCBpbnQgcmVwbHlMZW5ndGgsIGNvbnN0IGNoYXIqIG1pbWVUeXBlKQorICAgIHsKKyAgICAgICAg
bV9oYW5kbGVyc01hcC5zZXQoU3RyaW5nOjpmcm9tVVRGOChzY2hlbWUpLCBVUklTY2hlbWVIYW5k
bGVyKHJlcGx5LCByZXBseUxlbmd0aCwgbWltZVR5cGUpKTsKKyAgICAgICAgd2Via2l0X3dlYl9j
b250ZXh0X3JlZ2lzdGVyX3VyaV9zY2hlbWUod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0
KCksIHNjaGVtZSwgdXJpU2NoZW1lUmVxdWVzdENhbGxiYWNrLCB0aGlzLCAwKTsKKyAgICB9CisK
KyAgICBHUmVmUHRyPFdlYktpdFVSSVNjaGVtZVJlcXVlc3Q+IG1fdXJpU2NoZW1lUmVxdWVzdDsK
KyAgICBIYXNoTWFwPFN0cmluZywgVVJJU2NoZW1lSGFuZGxlcj4gbV9oYW5kbGVyc01hcDsKK307
CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJDb250ZXh0VVJJU2NoZW1lKFVSSVNjaGVtZVRlc3QqIHRl
c3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+cmVnaXN0ZXJVUklTY2hlbWVIYW5kbGVy
KCJmb28iLCBrQmFySFRNTCwgc3RybGVuKGtCYXJIVE1MKSwgInRleHQvaHRtbCIpOworICAgIHRl
c3QtPmxvYWRVUkkoImZvbzpibGFuayIpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hl
ZCgpOworICAgIHNpemVfdCBtYWluUmVzb3VyY2VEYXRhU2l6ZSA9IDA7CisgICAgY29uc3QgY2hh
ciogbWFpblJlc291cmNlRGF0YSA9IHRlc3QtPm1haW5SZXNvdXJjZURhdGEobWFpblJlc291cmNl
RGF0YVNpemUpOworICAgIGdfYXNzZXJ0X2NtcGludChtYWluUmVzb3VyY2VEYXRhU2l6ZSwgPT0s
IHN0cmxlbihrQmFySFRNTCkpOworICAgIGdfYXNzZXJ0KCFzdHJuY21wKG1haW5SZXNvdXJjZURh
dGEsIGtCYXJIVE1MLCBtYWluUmVzb3VyY2VEYXRhU2l6ZSkpOworCisgICAgdGVzdC0+cmVnaXN0
ZXJVUklTY2hlbWVIYW5kbGVyKCJlY2hvIiwga0VjaG9IVE1MRm9ybWF0LCAtMSwgInRleHQvaHRt
bCIpOworICAgIHRlc3QtPmxvYWRVUkkoImVjaG86aGVsbG8gd29ybGQiKTsKKyAgICB0ZXN0LT53
YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBHT3duUHRyPGNoYXI+IGVjaG9IVE1MKGdfc3Ry
ZHVwX3ByaW50ZihrRWNob0hUTUxGb3JtYXQsIHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0
X3BhdGgodGVzdC0+bV91cmlTY2hlbWVSZXF1ZXN0LmdldCgpKSkpOworICAgIG1haW5SZXNvdXJj
ZURhdGFTaXplID0gMDsKKyAgICBtYWluUmVzb3VyY2VEYXRhID0gdGVzdC0+bWFpblJlc291cmNl
RGF0YShtYWluUmVzb3VyY2VEYXRhU2l6ZSk7CisgICAgZ19hc3NlcnRfY21waW50KG1haW5SZXNv
dXJjZURhdGFTaXplLCA9PSwgc3RybGVuKGVjaG9IVE1MLmdldCgpKSk7CisgICAgZ19hc3NlcnQo
IXN0cm5jbXAobWFpblJlc291cmNlRGF0YSwgZWNob0hUTUwuZ2V0KCksIG1haW5SZXNvdXJjZURh
dGFTaXplKSk7CisKKyAgICB0ZXN0LT5yZWdpc3RlclVSSVNjaGVtZUhhbmRsZXIoIm5vbWltZSIs
IGtCYXJIVE1MLCAtMSwgMCk7CisgICAgdGVzdC0+bV9sb2FkRXZlbnRzLmNsZWFyKCk7CisgICAg
dGVzdC0+bG9hZFVSSSgibm9taW1lOmZvbyBiYXIiKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2Fk
RmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX2xvYWRFdmVudHMuY29udGFpbnMoTG9h
ZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkRmFpbGVkKSk7CisKKyAgICB0ZXN0LT5yZWdp
c3RlclVSSVNjaGVtZUhhbmRsZXIoImVtcHR5IiwgMCwgMCwgInRleHQvaHRtbCIpOworICAgIHRl
c3QtPm1fbG9hZEV2ZW50cy5jbGVhcigpOworICAgIHRlc3QtPmxvYWRVUkkoImVtcHR5Om5vdGhp
bmciKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydCgh
dGVzdC0+bV9sb2FkRXZlbnRzLmNvbnRhaW5zKExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFs
TG9hZEZhaWxlZCkpOworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX2xvYWRFdmVudHMuY29udGFpbnMo
TG9hZFRyYWNraW5nVGVzdDo6TG9hZEZhaWxlZCkpOworCisgICAgdGVzdC0+cmVnaXN0ZXJVUklT
Y2hlbWVIYW5kbGVyKCJlcnJvciIsIDAsIDAsIDApOworICAgIHRlc3QtPm1fbG9hZEV2ZW50cy5j
bGVhcigpOworICAgIHRlc3QtPmxvYWRVUkkoImVycm9yOmVycm9yIik7CisgICAgdGVzdC0+d2Fp
dFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9sb2FkRXZlbnRzLmNv
bnRhaW5zKExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZEZhaWxlZCkpOworICAgIGdf
YXNzZXJ0KHRlc3QtPm1fbG9hZEZhaWxlZCk7CisgICAgZ19hc3NlcnRfZXJyb3IodGVzdC0+bV9l
cnJvci5nZXQoKSwgZ19xdWFya19mcm9tX3N0cmluZyhlcnJvckRvbWFpbiksIGVycm9yQ29kZSk7
CisgICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPm1fZXJyb3ItPm1lc3NhZ2UsID09LCBlcnJvck1l
c3NhZ2UpOworCisgICAgdGVzdC0+cmVnaXN0ZXJVUklTY2hlbWVIYW5kbGVyKCJjbG9zZWQiLCAw
LCAwLCAwKTsKKyAgICB0ZXN0LT5tX2xvYWRFdmVudHMuY2xlYXIoKTsKKyAgICB0ZXN0LT5sb2Fk
VVJJKCJjbG9zZWQ6aW5wdXQtc3RyZWFtIik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlz
aGVkKCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9sb2FkRXZlbnRzLmNvbnRhaW5zKExvYWRUcmFj
a2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZEZhaWxlZCkpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1f
bG9hZEZhaWxlZCk7CisgICAgZ19hc3NlcnRfZXJyb3IodGVzdC0+bV9lcnJvci5nZXQoKSwgR19J
T19FUlJPUiwgR19JT19FUlJPUl9DTE9TRUQpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViQ29u
dGV4dFNwZWxsQ2hlY2tlcihUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIFdlYktp
dFdlYkNvbnRleHQqIHdlYkNvbnRleHQgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQo
KTsKKworICAgIC8vIENoZWNrIHdoYXQgaGFwcGVucyBpZiBubyBzcGVsbCBjaGVja2luZyBsYW5n
dWFnZSBoYXMgYmVlbiBzZXQuCisgICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBjdXJyZW50TGFuZ3Vh
Z2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyh3ZWJD
b250ZXh0KTsKKyAgICBnX2Fzc2VydCghY3VycmVudExhbmd1YWdlKTsKKworICAgIC8vIFNldCB0
aGUgbGFuZ3VhZ2UgdG8gYSBzcGVjaWZpYyBvbmUuCisgICAgR1JlZlB0cjxHUHRyQXJyYXk+IGxh
bmd1YWdlcyA9IGFkb3B0R1JlZihnX3B0cl9hcnJheV9uZXcoKSk7CisgICAgZ19wdHJfYXJyYXlf
YWRkKGxhbmd1YWdlcy5nZXQoKSwgY29uc3RfY2FzdDxncG9pbnRlcj4oc3RhdGljX2Nhc3Q8Y29u
c3Qgdm9pZCo+KCJlbl9VUyIpKSk7CisgICAgZ19wdHJfYXJyYXlfYWRkKGxhbmd1YWdlcy5nZXQo
KSwgMCk7CisgICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF9zcGVsbF9jaGVja2luZ19sYW5ndWFn
ZXMod2ViQ29udGV4dCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKiBjb25zdCo+KGxhbmd1
YWdlcy0+cGRhdGEpKTsKKyAgICBjdXJyZW50TGFuZ3VhZ2UgPSB3ZWJraXRfd2ViX2NvbnRleHRf
Z2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyh3ZWJDb250ZXh0KTsKKyAgICBnX2Fzc2VydF9j
bXB1aW50KGdfc3Rydl9sZW5ndGgoY29uc3RfY2FzdDxjaGFyKio+KGN1cnJlbnRMYW5ndWFnZSkp
LCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGN1cnJlbnRMYW5ndWFnZVswXSwgPT0sICJl
bl9VUyIpOworCisgICAgLy8gU2V0IHRoZSBsYW5ndWFnZSBzdHJpbmcgdG8gbGlzdCBvZiB2YWxp
ZCBsYW5ndWFnZXMuCisgICAgZ19wdHJfYXJyYXlfcmVtb3ZlX2luZGV4X2Zhc3QobGFuZ3VhZ2Vz
LmdldCgpLCBsYW5ndWFnZXMtPmxlbiAtIDEpOworICAgIGdfcHRyX2FycmF5X2FkZChsYW5ndWFn
ZXMuZ2V0KCksIGNvbnN0X2Nhc3Q8Z3BvaW50ZXI+KHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqPigi
ZW5fR0IiKSkpOworICAgIGdfcHRyX2FycmF5X2FkZChsYW5ndWFnZXMuZ2V0KCksIDApOworICAg
IHdlYmtpdF93ZWJfY29udGV4dF9zZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKHdlYkNvbnRl
eHQsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhciogY29uc3QqPihsYW5ndWFnZXMtPnBkYXRh
KSk7CisgICAgY3VycmVudExhbmd1YWdlID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9zcGVsbF9j
aGVja2luZ19sYW5ndWFnZXMod2ViQ29udGV4dCk7CisgICAgZ19hc3NlcnRfY21wdWludChnX3N0
cnZfbGVuZ3RoKGNvbnN0X2Nhc3Q8Y2hhcioqPihjdXJyZW50TGFuZ3VhZ2UpKSwgPT0sIDIpOwor
ICAgIGdfYXNzZXJ0X2NtcHN0cihjdXJyZW50TGFuZ3VhZ2VbMF0sID09LCAiZW5fVVMiKTsKKyAg
ICBnX2Fzc2VydF9jbXBzdHIoY3VycmVudExhbmd1YWdlWzFdLCA9PSwgImVuX0dCIik7CisKKyAg
ICAvLyBUcnkgcGFzc2luZyBhIHdyb25nIGxhbmd1YWdlIGFsb25nIHdpdGggZ29vZCBvbmVzLgor
ICAgIGdfcHRyX2FycmF5X3JlbW92ZV9pbmRleF9mYXN0KGxhbmd1YWdlcy5nZXQoKSwgbGFuZ3Vh
Z2VzLT5sZW4gLSAxKTsKKyAgICBnX3B0cl9hcnJheV9hZGQobGFuZ3VhZ2VzLmdldCgpLCBjb25z
dF9jYXN0PGdwb2ludGVyPihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4oImJkX1dSIikpKTsKKyAg
ICBnX3B0cl9hcnJheV9hZGQobGFuZ3VhZ2VzLmdldCgpLCAwKTsKKyAgICB3ZWJraXRfd2ViX2Nv
bnRleHRfc2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyh3ZWJDb250ZXh0LCByZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIqIGNvbnN0Kj4obGFuZ3VhZ2VzLT5wZGF0YSkpOworICAgIGN1cnJl
bnRMYW5ndWFnZSA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3Vh
Z2VzKHdlYkNvbnRleHQpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQoZ19zdHJ2X2xlbmd0aChjb25z
dF9jYXN0PGNoYXIqKj4oY3VycmVudExhbmd1YWdlKSksID09LCAyKTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIoY3VycmVudExhbmd1YWdlWzBdLCA9PSwgImVuX1VTIik7CisgICAgZ19hc3NlcnRfY21w
c3RyKGN1cnJlbnRMYW5ndWFnZVsxXSwgPT0sICJlbl9HQiIpOworCisgICAgLy8gVHJ5IHBhc3Np
bmcgYSBsaXN0IHdpdGggb25seSB3cm9uZyBsYW5ndWFnZXMuCisgICAgbGFuZ3VhZ2VzID0gYWRv
cHRHUmVmKGdfcHRyX2FycmF5X25ldygpKTsKKyAgICBnX3B0cl9hcnJheV9hZGQobGFuZ3VhZ2Vz
LmdldCgpLCBjb25zdF9jYXN0PGdwb2ludGVyPihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4oImJk
X1dSIikpKTsKKyAgICBnX3B0cl9hcnJheV9hZGQobGFuZ3VhZ2VzLmdldCgpLCBjb25zdF9jYXN0
PGdwb2ludGVyPihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4oIndyX0JEIikpKTsKKyAgICBnX3B0
cl9hcnJheV9hZGQobGFuZ3VhZ2VzLmdldCgpLCAwKTsKKyAgICB3ZWJraXRfd2ViX2NvbnRleHRf
c2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyh3ZWJDb250ZXh0LCByZWludGVycHJldF9jYXN0
PGNvbnN0IGNoYXIqIGNvbnN0Kj4obGFuZ3VhZ2VzLT5wZGF0YSkpOworICAgIGN1cnJlbnRMYW5n
dWFnZSA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKHdl
YkNvbnRleHQpOworICAgIGdfYXNzZXJ0KCFjdXJyZW50TGFuZ3VhZ2UpOworCisgICAgLy8gQ2hl
Y2sgZGlzYWJsaW5nIGFuZCByZS1lbmFibGluZyBzcGVsbCBjaGVja2luZy4KKyAgICB3ZWJraXRf
d2ViX2NvbnRleHRfc2V0X3NwZWxsX2NoZWNraW5nX2VuYWJsZWQod2ViQ29udGV4dCwgRkFMU0Up
OworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3NwZWxsX2NoZWNraW5nX2Vu
YWJsZWQod2ViQ29udGV4dCkpOworICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfc3BlbGxfY2hl
Y2tpbmdfZW5hYmxlZCh3ZWJDb250ZXh0LCBUUlVFKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2Vi
X2NvbnRleHRfZ2V0X3NwZWxsX2NoZWNraW5nX2VuYWJsZWQod2ViQ29udGV4dCkpOworfQorCitz
dGF0aWMgdm9pZCB0ZXN0V2ViQ29udGV4dExhbmd1YWdlcyhXZWJWaWV3VGVzdCogdGVzdCwgZ2Nv
bnN0cG9pbnRlcikKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZXhwZWN0ZWREZWZhdWx0TGFu
Z3VhZ2UgPSAiZW4iOworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgi
LyIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgc2l6
ZV90IG1haW5SZXNvdXJjZURhdGFTaXplID0gMDsKKyAgICBjb25zdCBjaGFyKiBtYWluUmVzb3Vy
Y2VEYXRhID0gdGVzdC0+bWFpblJlc291cmNlRGF0YShtYWluUmVzb3VyY2VEYXRhU2l6ZSk7Cisg
ICAgZ19hc3NlcnRfY21wdWludChtYWluUmVzb3VyY2VEYXRhU2l6ZSwgPT0sIHN0cmxlbihleHBl
Y3RlZERlZmF1bHRMYW5ndWFnZSkpOworICAgIGdfYXNzZXJ0KCFzdHJuY21wKG1haW5SZXNvdXJj
ZURhdGEsIGV4cGVjdGVkRGVmYXVsdExhbmd1YWdlLCBtYWluUmVzb3VyY2VEYXRhU2l6ZSkpOwor
CisgICAgR1JlZlB0cjxHUHRyQXJyYXk+IGxhbmd1YWdlcyA9IGFkb3B0R1JlZihnX3B0cl9hcnJh
eV9uZXcoKSk7CisgICAgZ19wdHJfYXJyYXlfYWRkKGxhbmd1YWdlcy5nZXQoKSwgY29uc3RfY2Fz
dDxncG9pbnRlcj4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KCJlbiIpKSk7CisgICAgZ19wdHJf
YXJyYXlfYWRkKGxhbmd1YWdlcy5nZXQoKSwgY29uc3RfY2FzdDxncG9pbnRlcj4oc3RhdGljX2Nh
c3Q8Y29uc3Qgdm9pZCo+KCJFU19lcyIpKSk7CisgICAgZ19wdHJfYXJyYXlfYWRkKGxhbmd1YWdl
cy5nZXQoKSwgY29uc3RfY2FzdDxncG9pbnRlcj4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KCJk
RSIpKSk7CisgICAgZ19wdHJfYXJyYXlfYWRkKGxhbmd1YWdlcy5nZXQoKSwgMCk7CisgICAgd2Vi
a2l0X3dlYl9jb250ZXh0X3NldF9wcmVmZXJyZWRfbGFuZ3VhZ2VzKHdlYmtpdF93ZWJfY29udGV4
dF9nZXRfZGVmYXVsdCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqIGNvbnN0Kj4obGFu
Z3VhZ2VzLT5wZGF0YSkpOworCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGV4cGVjdGVkTGFuZ3Vh
Z2VzID0gImVuLCBlcy1lcztxPTAuOTAsIGRlO3E9MC44MCI7CisgICAgdGVzdC0+bG9hZFVSSShr
U2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxM
b2FkRmluaXNoZWQoKTsKKyAgICBtYWluUmVzb3VyY2VEYXRhU2l6ZSA9IDA7CisgICAgbWFpblJl
c291cmNlRGF0YSA9IHRlc3QtPm1haW5SZXNvdXJjZURhdGEobWFpblJlc291cmNlRGF0YVNpemUp
OworICAgIGdfYXNzZXJ0X2NtcHVpbnQobWFpblJlc291cmNlRGF0YVNpemUsID09LCBzdHJsZW4o
ZXhwZWN0ZWRMYW5ndWFnZXMpKTsKKyAgICBnX2Fzc2VydCghc3RybmNtcChtYWluUmVzb3VyY2VE
YXRhLCBleHBlY3RlZExhbmd1YWdlcywgbWFpblJlc291cmNlRGF0YVNpemUpKTsKK30KKworc3Rh
dGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSog
bWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSosIFNvdXBDbGllbnRDb250ZXh0
KiwgZ3BvaW50ZXIpCit7CisgICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9H
RVQpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFU
VVNfTk9UX0lNUExFTUVOVEVEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChn
X3N0cl9lcXVhbChwYXRoLCAiLyIpKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIGFjY2VwdExhbmd1
YWdlID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X29uZShtZXNzYWdlLT5yZXF1ZXN0X2hlYWRl
cnMsICJBY2NlcHQtTGFuZ3VhZ2UiKTsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMo
bWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBl
bmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfQ09QWSwgYWNjZXB0TGFuZ3Vh
Z2UsIHN0cmxlbihhY2NlcHRMYW5ndWFnZSkpOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9j
b21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKKyAgICB9IGVsc2UKKyAgICAgICAgc291
cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0ZPVU5EKTsKK30K
KworY2xhc3MgU2VjdXJpdHlQb2xpY3lUZXN0OiBwdWJsaWMgVGVzdCB7CitwdWJsaWM6CisgICAg
TUFLRV9HTElCX1RFU1RfRklYVFVSRShTZWN1cml0eVBvbGljeVRlc3QpOworCisgICAgZW51bSBT
ZWN1cml0eVBvbGljeSB7CisgICAgICAgIExvY2FsID0gMSA8PCAxLAorICAgICAgICBOb0FjY2Vz
cyA9IDEgPDwgMiwKKyAgICAgICAgRGlzcGxheUlzb2xhdGVkID0gMSA8PCAzLAorICAgICAgICBT
ZWN1cmUgPSAxIDw8IDQsCisgICAgICAgIENPUlNFbmFibGVkID0gMSA8PCA1LAorICAgICAgICBF
bXB0eURvY3VtZW50ID0gMSA8PCA2CisgICAgfTsKKworICAgIFNlY3VyaXR5UG9saWN5VGVzdCgp
CisgICAgICAgIDogbV9tYW5hZ2VyKHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc2VjdXJpdHlfbWFu
YWdlcih3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSkpCisgICAgeworICAgIH0KKwor
ICAgIHZvaWQgdmVyaWZ5VGhhdFNjaGVtZU1hdGNoZXNQb2xpY3koY29uc3QgY2hhciogc2NoZW1l
LCB1bnNpZ25lZCBwb2xpY3kpCisgICAgeworICAgICAgICBpZiAocG9saWN5ICYgTG9jYWwpCisg
ICAgICAgICAgICBnX2Fzc2VydCh3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl91cmlfc2NoZW1lX2lz
X2xvY2FsKG1fbWFuYWdlciwgc2NoZW1lKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdf
YXNzZXJ0KCF3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl91cmlfc2NoZW1lX2lzX2xvY2FsKG1fbWFu
YWdlciwgc2NoZW1lKSk7CisgICAgICAgIGlmIChwb2xpY3kgJiBOb0FjY2VzcykKKyAgICAgICAg
ICAgIGdfYXNzZXJ0KHdlYmtpdF9zZWN1cml0eV9tYW5hZ2VyX3VyaV9zY2hlbWVfaXNfbm9fYWNj
ZXNzKG1fbWFuYWdlciwgc2NoZW1lKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl91cmlfc2NoZW1lX2lzX25vX2FjY2VzcyhtX21h
bmFnZXIsIHNjaGVtZSkpOworICAgICAgICBpZiAocG9saWN5ICYgRGlzcGxheUlzb2xhdGVkKQor
ICAgICAgICAgICAgZ19hc3NlcnQod2Via2l0X3NlY3VyaXR5X21hbmFnZXJfdXJpX3NjaGVtZV9p
c19kaXNwbGF5X2lzb2xhdGVkKG1fbWFuYWdlciwgc2NoZW1lKSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl91cmlfc2NoZW1lX2lz
X2Rpc3BsYXlfaXNvbGF0ZWQobV9tYW5hZ2VyLCBzY2hlbWUpKTsKKyAgICAgICAgaWYgKHBvbGlj
eSAmIFNlY3VyZSkKKyAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9zZWN1cml0eV9tYW5hZ2Vy
X3VyaV9zY2hlbWVfaXNfc2VjdXJlKG1fbWFuYWdlciwgc2NoZW1lKSk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl91cmlfc2NoZW1l
X2lzX3NlY3VyZShtX21hbmFnZXIsIHNjaGVtZSkpOworICAgICAgICBpZiAocG9saWN5ICYgQ09S
U0VuYWJsZWQpCisgICAgICAgICAgICBnX2Fzc2VydCh3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl91
cmlfc2NoZW1lX2lzX2NvcnNfZW5hYmxlZChtX21hbmFnZXIsIHNjaGVtZSkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X3NlY3VyaXR5X21hbmFnZXJfdXJpX3Nj
aGVtZV9pc19jb3JzX2VuYWJsZWQobV9tYW5hZ2VyLCBzY2hlbWUpKTsKKyAgICAgICAgaWYgKHBv
bGljeSAmIEVtcHR5RG9jdW1lbnQpCisgICAgICAgICAgICBnX2Fzc2VydCh3ZWJraXRfc2VjdXJp
dHlfbWFuYWdlcl91cmlfc2NoZW1lX2lzX2VtcHR5X2RvY3VtZW50KG1fbWFuYWdlciwgc2NoZW1l
KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2VjdXJpdHlf
bWFuYWdlcl91cmlfc2NoZW1lX2lzX2VtcHR5X2RvY3VtZW50KG1fbWFuYWdlciwgc2NoZW1lKSk7
CisgICAgfQorCisgICAgV2ViS2l0U2VjdXJpdHlNYW5hZ2VyKiBtX21hbmFnZXI7Cit9OworCitz
dGF0aWMgdm9pZCB0ZXN0V2ViQ29udGV4dFNlY3VyaXR5UG9saWN5KFNlY3VyaXR5UG9saWN5VGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICAvLyBWZXJpZnlUaGF0U2NoZW1lTWF0Y2hl
c1BvbGljeSBkZWZhdWx0IHBvbGljeSBmb3Igd2VsbCBrbm93biBzY2hlbWVzLgorICAgIHRlc3Qt
PnZlcmlmeVRoYXRTY2hlbWVNYXRjaGVzUG9saWN5KCJodHRwIiwgU2VjdXJpdHlQb2xpY3lUZXN0
OjpDT1JTRW5hYmxlZCk7CisgICAgdGVzdC0+dmVyaWZ5VGhhdFNjaGVtZU1hdGNoZXNQb2xpY3ko
Imh0dHBzIiwgU2VjdXJpdHlQb2xpY3lUZXN0OjpDT1JTRW5hYmxlZCB8IFNlY3VyaXR5UG9saWN5
VGVzdDo6U2VjdXJlKTsKKyAgICB0ZXN0LT52ZXJpZnlUaGF0U2NoZW1lTWF0Y2hlc1BvbGljeSgi
ZmlsZSIsIFNlY3VyaXR5UG9saWN5VGVzdDo6TG9jYWwpOworICAgIHRlc3QtPnZlcmlmeVRoYXRT
Y2hlbWVNYXRjaGVzUG9saWN5KCJkYXRhIiwgU2VjdXJpdHlQb2xpY3lUZXN0OjpOb0FjY2VzcyB8
IFNlY3VyaXR5UG9saWN5VGVzdDo6U2VjdXJlKTsKKyAgICB0ZXN0LT52ZXJpZnlUaGF0U2NoZW1l
TWF0Y2hlc1BvbGljeSgiYWJvdXQiLCBTZWN1cml0eVBvbGljeVRlc3Q6Ok5vQWNjZXNzIHwgU2Vj
dXJpdHlQb2xpY3lUZXN0OjpTZWN1cmUgfCBTZWN1cml0eVBvbGljeVRlc3Q6OkVtcHR5RG9jdW1l
bnQpOworCisgICAgLy8gQ3VzdG9tIHNjaGVtZS4KKyAgICB0ZXN0LT52ZXJpZnlUaGF0U2NoZW1l
TWF0Y2hlc1BvbGljeSgiZm9vIiwgMCk7CisKKyAgICB3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl9y
ZWdpc3Rlcl91cmlfc2NoZW1lX2FzX2xvY2FsKHRlc3QtPm1fbWFuYWdlciwgImZvbyIpOworICAg
IHRlc3QtPnZlcmlmeVRoYXRTY2hlbWVNYXRjaGVzUG9saWN5KCJmb28iLCBTZWN1cml0eVBvbGlj
eVRlc3Q6OkxvY2FsKTsKKyAgICB3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl9yZWdpc3Rlcl91cmlf
c2NoZW1lX2FzX25vX2FjY2Vzcyh0ZXN0LT5tX21hbmFnZXIsICJmb28iKTsKKyAgICB0ZXN0LT52
ZXJpZnlUaGF0U2NoZW1lTWF0Y2hlc1BvbGljeSgiZm9vIiwgU2VjdXJpdHlQb2xpY3lUZXN0OjpM
b2NhbCB8IFNlY3VyaXR5UG9saWN5VGVzdDo6Tm9BY2Nlc3MpOworICAgIHdlYmtpdF9zZWN1cml0
eV9tYW5hZ2VyX3JlZ2lzdGVyX3VyaV9zY2hlbWVfYXNfZGlzcGxheV9pc29sYXRlZCh0ZXN0LT5t
X21hbmFnZXIsICJmb28iKTsKKyAgICB0ZXN0LT52ZXJpZnlUaGF0U2NoZW1lTWF0Y2hlc1BvbGlj
eSgiZm9vIiwgU2VjdXJpdHlQb2xpY3lUZXN0OjpMb2NhbCB8IFNlY3VyaXR5UG9saWN5VGVzdDo6
Tm9BY2Nlc3MgfCBTZWN1cml0eVBvbGljeVRlc3Q6OkRpc3BsYXlJc29sYXRlZCk7CisgICAgd2Vi
a2l0X3NlY3VyaXR5X21hbmFnZXJfcmVnaXN0ZXJfdXJpX3NjaGVtZV9hc19zZWN1cmUodGVzdC0+
bV9tYW5hZ2VyLCAiZm9vIik7CisgICAgdGVzdC0+dmVyaWZ5VGhhdFNjaGVtZU1hdGNoZXNQb2xp
Y3koImZvbyIsIFNlY3VyaXR5UG9saWN5VGVzdDo6TG9jYWwgfCBTZWN1cml0eVBvbGljeVRlc3Q6
Ok5vQWNjZXNzIHwgU2VjdXJpdHlQb2xpY3lUZXN0OjpEaXNwbGF5SXNvbGF0ZWQgfCBTZWN1cml0
eVBvbGljeVRlc3Q6OlNlY3VyZSk7CisgICAgd2Via2l0X3NlY3VyaXR5X21hbmFnZXJfcmVnaXN0
ZXJfdXJpX3NjaGVtZV9hc19jb3JzX2VuYWJsZWQodGVzdC0+bV9tYW5hZ2VyLCAiZm9vIik7Cisg
ICAgdGVzdC0+dmVyaWZ5VGhhdFNjaGVtZU1hdGNoZXNQb2xpY3koImZvbyIsIFNlY3VyaXR5UG9s
aWN5VGVzdDo6TG9jYWwgfCBTZWN1cml0eVBvbGljeVRlc3Q6Ok5vQWNjZXNzIHwgU2VjdXJpdHlQ
b2xpY3lUZXN0OjpEaXNwbGF5SXNvbGF0ZWQgfCBTZWN1cml0eVBvbGljeVRlc3Q6OlNlY3VyZQor
ICAgICAgICAgICAgICAgIHwgU2VjdXJpdHlQb2xpY3lUZXN0OjpDT1JTRW5hYmxlZCk7CisgICAg
d2Via2l0X3NlY3VyaXR5X21hbmFnZXJfcmVnaXN0ZXJfdXJpX3NjaGVtZV9hc19lbXB0eV9kb2N1
bWVudCh0ZXN0LT5tX21hbmFnZXIsICJmb28iKTsKKyAgICB0ZXN0LT52ZXJpZnlUaGF0U2NoZW1l
TWF0Y2hlc1BvbGljeSgiZm9vIiwgU2VjdXJpdHlQb2xpY3lUZXN0OjpMb2NhbCB8IFNlY3VyaXR5
UG9saWN5VGVzdDo6Tm9BY2Nlc3MgfCBTZWN1cml0eVBvbGljeVRlc3Q6OkRpc3BsYXlJc29sYXRl
ZCB8IFNlY3VyaXR5UG9saWN5VGVzdDo6U2VjdXJlCisgICAgICAgICAgICAgICAgfCBTZWN1cml0
eVBvbGljeVRlc3Q6OkNPUlNFbmFibGVkIHwgU2VjdXJpdHlQb2xpY3lUZXN0OjpFbXB0eURvY3Vt
ZW50KTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQoreworICAgIGtTZXJ2ZXIgPSBuZXcgV2ViS2l0
VGVzdFNlcnZlcigpOworICAgIGtTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFjayk7CisKKyAgICBU
ZXN0OjphZGQoIldlYktpdFdlYkNvbnRleHQiLCAiZGVmYXVsdC1jb250ZXh0IiwgdGVzdFdlYkNv
bnRleHREZWZhdWx0KTsKKyAgICBQbHVnaW5zVGVzdDo6YWRkKCJXZWJLaXRXZWJDb250ZXh0Iiwg
ImdldC1wbHVnaW5zIiwgdGVzdFdlYkNvbnRleHRHZXRQbHVnaW5zKTsKKyAgICBVUklTY2hlbWVU
ZXN0OjphZGQoIldlYktpdFdlYkNvbnRleHQiLCAidXJpLXNjaGVtZSIsIHRlc3RXZWJDb250ZXh0
VVJJU2NoZW1lKTsKKyAgICBUZXN0OjphZGQoIldlYktpdFdlYkNvbnRleHQiLCAic3BlbGwtY2hl
Y2tlciIsIHRlc3RXZWJDb250ZXh0U3BlbGxDaGVja2VyKTsKKyAgICBXZWJWaWV3VGVzdDo6YWRk
KCJXZWJLaXRXZWJDb250ZXh0IiwgImxhbmd1YWdlcyIsIHRlc3RXZWJDb250ZXh0TGFuZ3VhZ2Vz
KTsKKyAgICBTZWN1cml0eVBvbGljeVRlc3Q6OmFkZCgiV2ViS2l0U2VjdXJpdHlNYW5hZ2VyIiwg
InNlY3VyaXR5LXBvbGljeSIsIHRlc3RXZWJDb250ZXh0U2VjdXJpdHlQb2xpY3kpOworfQorCit2
b2lkIGFmdGVyQWxsKCkKK3sKKyAgICBkZWxldGUga1NlcnZlcjsKK30KZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0V2ViVmlldy5jcHAg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFdlYlZpZXcu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3MGIwYTIKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktp
dFdlYlZpZXcuY3BwCkBAIC0wLDAgKzEsNjA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViVmlld1Rlc3Qu
aCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oPgorI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0pTVmFsdWVSZWYuaD4KKyNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgorI2lu
Y2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdE
ZWZhdWx0Q29udGV4dChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBn
X2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQodGVzdC0+bV93ZWJWaWV3KSA9PSB3
ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSk7CisKKyAgICAvLyBDaGVjayB0aGF0IGEg
d2ViIHZpZXcgY3JlYXRlZCB3aXRoIGdfb2JqZWN0X25ldyBoYXMgdGhlIGRlZmF1bHQgY29udGV4
dC4KKyAgICBHUmVmUHRyPFdlYktpdFdlYlZpZXc+IHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVco
Z19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQl9WSUVXLCBOVUxMKSk7CisgICAgZ19hc3NlcnQo
d2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KHdlYlZpZXcuZ2V0KCkpID09IHdlYmtpdF93ZWJf
Y29udGV4dF9nZXRfZGVmYXVsdCgpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdDdXN0
b21DaGFyc2V0KFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfZ2V0X2N1c3RvbV9jaGFyc2V0KHRlc3QtPm1fd2ViVmlldykp
OworICAgIHdlYmtpdF93ZWJfdmlld19zZXRfY3VzdG9tX2NoYXJzZXQodGVzdC0+bV93ZWJWaWV3
LCAidXRmOCIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X2N1c3Rv
bV9jaGFyc2V0KHRlc3QtPm1fd2ViVmlldyksID09LCAidXRmOCIpOworICAgIC8vIEdvIGJhY2sg
dG8gdGhlIGRlZmF1bHQgY2hhcnNldC4KKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X2N1c3RvbV9j
aGFyc2V0KHRlc3QtPm1fd2ViVmlldywgMCk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmll
d19nZXRfY3VzdG9tX2NoYXJzZXQodGVzdC0+bV93ZWJWaWV3KSk7Cit9CisKK3N0YXRpYyB2b2lk
IHRlc3RXZWJWaWV3U2V0dGluZ3MoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7
CisgICAgV2ViS2l0U2V0dGluZ3MqIGRlZmF1bHRTZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmlld19n
ZXRfc2V0dGluZ3ModGVzdC0+bV93ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChkZWZhdWx0U2V0dGlu
Z3MpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2phdmFzY3JpcHQo
ZGVmYXVsdFNldHRpbmdzKSk7CisKKyAgICBHUmVmUHRyPFdlYktpdFNldHRpbmdzPiBuZXdTZXR0
aW5ncyA9IGFkb3B0R1JlZih3ZWJraXRfc2V0dGluZ3NfbmV3KCkpOworICAgIGdfb2JqZWN0X3Nl
dChHX09CSkVDVChuZXdTZXR0aW5ncy5nZXQoKSksICJlbmFibGUtamF2YXNjcmlwdCIsIEZBTFNF
LCBOVUxMKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X3NldHRpbmdzKHRlc3QtPm1fd2ViVmll
dywgbmV3U2V0dGluZ3MuZ2V0KCkpOworCisgICAgV2ViS2l0U2V0dGluZ3MqIHNldHRpbmdzID0g
d2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh0ZXN0LT5tX3dlYlZpZXcpOworICAgIGdfYXNz
ZXJ0KHNldHRpbmdzICE9IGRlZmF1bHRTZXR0aW5ncyk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9z
ZXR0aW5nc19nZXRfZW5hYmxlX2phdmFzY3JpcHQoc2V0dGluZ3MpKTsKKworICAgIEdSZWZQdHI8
R3RrV2lkZ2V0PiB3ZWJWaWV3MiA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKKyAgICB0ZXN0LT5h
c3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHdlYlZpZXcyLmdl
dCgpKSk7CisgICAgd2Via2l0X3dlYl92aWV3X3NldF9zZXR0aW5ncyhXRUJLSVRfV0VCX1ZJRVco
d2ViVmlldzIuZ2V0KCkpLCBzZXR0aW5ncyk7CisgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3
X2dldF9zZXR0aW5ncyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldzIuZ2V0KCkpKSA9PSBzZXR0aW5n
cyk7CisKKyAgICBHUmVmUHRyPFdlYktpdFNldHRpbmdzPiBuZXdTZXR0aW5nczIgPSBhZG9wdEdS
ZWYod2Via2l0X3NldHRpbmdzX25ldygpKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X3NldHRp
bmdzKFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3Mi5nZXQoKSksIG5ld1NldHRpbmdzMi5nZXQoKSk7
CisgICAgc2V0dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKFdFQktJVF9XRUJf
VklFVyh3ZWJWaWV3Mi5nZXQoKSkpOworICAgIGdfYXNzZXJ0KHNldHRpbmdzID09IG5ld1NldHRp
bmdzMi5nZXQoKSk7CisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfamF2
YXNjcmlwdChzZXR0aW5ncykpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1pvb21MZXZl
bChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBnX2Fzc2VydF9jbXBm
bG9hdCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3pvb21fbGV2ZWwodGVzdC0+bV93ZWJWaWV3KSwgPT0s
IDEpOworICAgIHdlYmtpdF93ZWJfdmlld19zZXRfem9vbV9sZXZlbCh0ZXN0LT5tX3dlYlZpZXcs
IDIuNSk7CisgICAgZ19hc3NlcnRfY21wZmxvYXQod2Via2l0X3dlYl92aWV3X2dldF96b29tX2xl
dmVsKHRlc3QtPm1fd2ViVmlldyksID09LCAyLjUpOworCisgICAgd2Via2l0X3NldHRpbmdzX3Nl
dF96b29tX3RleHRfb25seSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHRlc3QtPm1fd2Vi
VmlldyksIFRSVUUpOworICAgIC8vIFRoZSB6b29tIGxldmVsIHNob3VsZG4ndCBjaGFuZ2Ugd2hl
biB6b29tLXRleHQtb25seSBzZXR0aW5nIGNoYW5nZXMuCisgICAgZ19hc3NlcnRfY21wZmxvYXQo
d2Via2l0X3dlYl92aWV3X2dldF96b29tX2xldmVsKHRlc3QtPm1fd2ViVmlldyksID09LCAyLjUp
OworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1J1bkphdmFTY3JpcHQoV2ViVmlld1Rlc3Qq
IHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGh0bWwgPSAi
PGh0bWw+PGJvZHk+PGEgaWQ9J1dlYktpdExpbmsnIGhyZWY9J2h0dHA6Ly93d3cud2Via2l0Z3Rr
Lm9yZy8nIHRpdGxlPSdXZWJLaXRHVEsrIFRpdGxlJz5XZWJLaXRHVEsrIFdlYnNpdGU8L2E+PC9i
b2R5PjwvaHRtbD4iOworICAgIHRlc3QtPmxvYWRIdG1sKGh0bWwsIDApOworICAgIHRlc3QtPndh
aXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAg
IFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZh
U2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoIndpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnV2ViS2l0TGluaycpLnRpdGxlOyIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQo
amF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKyAgICBHT3du
UHRyPGNoYXI+IHZhbHVlU3RyaW5nKFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3Ry
aW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcu
Z2V0KCksID09LCAiV2ViS2l0R1RLKyBUaXRsZSIpOworCisgICAgamF2YXNjcmlwdFJlc3VsdCA9
IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgid2luZG93LmRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdXZWJLaXRMaW5rJykuaHJlZjsiLCAmZXJyb3Iub3V0UHRyKCkpOwor
ICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQo
KSk7CisgICAgdmFsdWVTdHJpbmcuc2V0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9D
U3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJp
bmcuZ2V0KCksID09LCAiaHR0cDovL3d3dy53ZWJraXRndGsub3JnLyIpOworCisgICAgamF2YXNj
cmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgid2lu
ZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdXZWJLaXRMaW5rJykudGV4dENvbnRlbnQiLCAm
ZXJyb3Iub3V0UHRyKCkpOworICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdf
YXNzZXJ0KCFlcnJvci5nZXQoKSk7CisgICAgdmFsdWVTdHJpbmcuc2V0KFdlYlZpZXdUZXN0Ojpq
YXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAiV2ViS2l0R1RLKyBXZWJzaXRlIik7CisK
KyAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZp
bmlzaGVkKCJhID0gMjU7IiwgJmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fzc2VydChqYXZhc2Ny
aXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOworICAgIGdfYXNzZXJ0X2Nt
cGZsb2F0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9OdW1iZXIoamF2YXNjcmlwdFJl
c3VsdCksID09LCAyNSk7CisKKyAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNj
cmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJhID0gMi41OyIsICZlcnJvci5vdXRQdHIoKSk7Cisg
ICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgp
KTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRv
TnVtYmVyKGphdmFzY3JpcHRSZXN1bHQpLCA9PSwgMi41KTsKKworICAgIGphdmFzY3JpcHRSZXN1
bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImEgPSB0cnVlIiwg
JmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBn
X2Fzc2VydCghZXJyb3IuZ2V0KCkpOworICAgIGdfYXNzZXJ0KFdlYlZpZXdUZXN0OjpqYXZhc2Ny
aXB0UmVzdWx0VG9Cb29sZWFuKGphdmFzY3JpcHRSZXN1bHQpKTsKKworICAgIGphdmFzY3JpcHRS
ZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImEgPSBmYWxz
ZSIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7Cisg
ICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKyAgICBnX2Fzc2VydCghV2ViVmlld1Rlc3Q6Omph
dmFzY3JpcHRSZXN1bHRUb0Jvb2xlYW4oamF2YXNjcmlwdFJlc3VsdCkpOworCisgICAgamF2YXNj
cmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiYSA9
IG51bGwiLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQp
OworICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7CisgICAgZ19hc3NlcnQoV2ViVmlld1Rlc3Q6
OmphdmFzY3JpcHRSZXN1bHRJc051bGwoamF2YXNjcmlwdFJlc3VsdCkpOworCisgICAgamF2YXNj
cmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZnVu
Y3Rpb24gRm9vKCkgeyBhID0gMjU7IH0gRm9vKCk7IiwgJmVycm9yLm91dFB0cigpKTsKKyAgICBn
X2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOwor
ICAgIGdfYXNzZXJ0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0SXNVbmRlZmluZWQoamF2
YXNjcmlwdFJlc3VsdCkpOworCisgICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFT
Y3JpcHRGcm9tR1Jlc291cmNlQW5kV2FpdFVudGlsRmluaXNoZWQoIi9vcmcvd2Via2l0L3dlYmtp
dDJndGsvdGVzdHMvbGluay10aXRsZS5qcyIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3Nl
cnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKyAgICB2
YWx1ZVN0cmluZy5zZXQoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0NTdHJpbmcoamF2
YXNjcmlwdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih2YWx1ZVN0cmluZy5nZXQoKSwg
PT0sICJXZWJLaXRHVEsrIFRpdGxlIik7CisKKyAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+
cnVuSmF2YVNjcmlwdEZyb21HUmVzb3VyY2VBbmRXYWl0VW50aWxGaW5pc2hlZCgiL3dyb25nL3Bh
dGgvdG8vcmVzb3VyY2UuanMiLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGdfYXNzZXJ0KCFqYXZh
c2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydF9lcnJvcihlcnJvci5nZXQoKSwgR19SRVNPVVJD
RV9FUlJPUiwgR19SRVNPVVJDRV9FUlJPUl9OT1RfRk9VTkQpOworICAgIGVycm9yLmNsZWFyKCk7
CisKKyAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRp
bEZpbmlzaGVkKCJmb28oKTsiLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGdfYXNzZXJ0KCFqYXZh
c2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydF9lcnJvcihlcnJvci5nZXQoKSwgV0VCS0lUX0pB
VkFTQ1JJUFRfRVJST1IsIFdFQktJVF9KQVZBU0NSSVBUX0VSUk9SX1NDUklQVF9GQUlMRUQpOwor
fQorCitjbGFzcyBGdWxsU2NyZWVuQ2xpZW50VGVzdDogcHVibGljIFdlYlZpZXdUZXN0IHsKK3B1
YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKEZ1bGxTY3JlZW5DbGllbnRUZXN0KTsK
KworICAgIGVudW0gRnVsbFNjcmVlbkV2ZW50IHsKKyAgICAgICAgTm9uZSwKKyAgICAgICAgRW50
ZXIsCisgICAgICAgIExlYXZlCisgICAgfTsKKworICAgIHN0YXRpYyBnYm9vbGVhbiB2aWV3RW50
ZXJGdWxsU2NyZWVuQ2FsbGJhY2soV2ViS2l0V2ViVmlldyosIEZ1bGxTY3JlZW5DbGllbnRUZXN0
KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+bV9ldmVudCA9IEVudGVyOworICAgICAgICBn
X21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworICAgICAgICByZXR1cm4gRkFMU0U7
CisgICAgfQorCisgICAgc3RhdGljIGdib29sZWFuIHZpZXdMZWF2ZUZ1bGxTY3JlZW5DYWxsYmFj
ayhXZWJLaXRXZWJWaWV3KiwgRnVsbFNjcmVlbkNsaWVudFRlc3QqIHRlc3QpCisgICAgeworICAg
ICAgICB0ZXN0LT5tX2V2ZW50ID0gTGVhdmU7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQodGVz
dC0+bV9tYWluTG9vcCk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBGdWxs
U2NyZWVuQ2xpZW50VGVzdCgpCisgICAgICAgIDogbV9ldmVudChOb25lKQorICAgIHsKKyAgICAg
ICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfZnVsbHNjcmVlbih3ZWJraXRfd2ViX3ZpZXdf
Z2V0X3NldHRpbmdzKG1fd2ViVmlldyksIFRSVUUpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0
KG1fd2ViVmlldywgImVudGVyLWZ1bGxzY3JlZW4iLCBHX0NBTExCQUNLKHZpZXdFbnRlckZ1bGxT
Y3JlZW5DYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmll
dywgImxlYXZlLWZ1bGxzY3JlZW4iLCBHX0NBTExCQUNLKHZpZXdMZWF2ZUZ1bGxTY3JlZW5DYWxs
YmFjayksIHRoaXMpOworICAgIH0KKworICAgIH5GdWxsU2NyZWVuQ2xpZW50VGVzdCgpCisgICAg
eworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV93ZWJWaWV3
LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKKyAgICB9CisKKyAgICB2
b2lkIHJlcXVlc3RGdWxsU2NyZWVuQW5kV2FpdFVudGlsRW50ZXJlZEZ1bGxTY3JlZW4oKQorICAg
IHsKKyAgICAgICAgbV9ldmVudCA9IE5vbmU7CisgICAgICAgIHdlYmtpdF93ZWJfdmlld19ydW5f
amF2YXNjcmlwdChtX3dlYlZpZXcsICJkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQud2Via2l0UmVx
dWVzdEZ1bGxTY3JlZW4oKTsiLCAwLCAwLCAwKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1f
bWFpbkxvb3ApOworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBsZWF2ZUZ1bGxTY3JlZW5J
ZGxlKEZ1bGxTY3JlZW5DbGllbnRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+a2V5
U3Ryb2tlKEdES19LRVlfRXNjYXBlKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKwor
ICAgIHZvaWQgbGVhdmVGdWxsU2NyZWVuQW5kV2FpdFVudGlsTGVmdEZ1bGxTY3JlZW4oKQorICAg
IHsKKyAgICAgICAgbV9ldmVudCA9IE5vbmU7CisgICAgICAgIGdfaWRsZV9hZGQocmVpbnRlcnBy
ZXRfY2FzdDxHU291cmNlRnVuYz4obGVhdmVGdWxsU2NyZWVuSWRsZSksIHRoaXMpOworICAgICAg
ICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgfQorCisgICAgRnVsbFNjcmVlbkV2
ZW50IG1fZXZlbnQ7Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0Z1bGxTY3JlZW4oRnVs
bFNjcmVlbkNsaWVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+c2hv
d0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7CisgICAgdGVzdC0+bG9hZEh0bWwoIjxodG1s
Pjxib2R5PkZ1bGxTY3JlZW4gdGVzdDwvYm9keT48L2h0bWw+IiwgMCk7CisgICAgdGVzdC0+d2Fp
dFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgdGVzdC0+cmVxdWVzdEZ1bGxTY3JlZW5BbmRXYWl0
VW50aWxFbnRlcmVkRnVsbFNjcmVlbigpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2V2
ZW50LCA9PSwgRnVsbFNjcmVlbkNsaWVudFRlc3Q6OkVudGVyKTsKKyAgICB0ZXN0LT5sZWF2ZUZ1
bGxTY3JlZW5BbmRXYWl0VW50aWxMZWZ0RnVsbFNjcmVlbigpOworICAgIGdfYXNzZXJ0X2NtcGlu
dCh0ZXN0LT5tX2V2ZW50LCA9PSwgRnVsbFNjcmVlbkNsaWVudFRlc3Q6OkxlYXZlKTsKK30KKwor
c3RhdGljIHZvaWQgdGVzdFdlYlZpZXdDYW5TaG93TUlNRVR5cGUoV2ViVmlld1Rlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8gU3VwcG9ydGVkIE1JTUUgdHlwZXMuCisgICAgZ19h
c3NlcnQod2Via2l0X3dlYl92aWV3X2Nhbl9zaG93X21pbWVfdHlwZSh0ZXN0LT5tX3dlYlZpZXcs
ICJ0ZXh0L2h0bWwiKSk7CisgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2Nhbl9zaG93X21p
bWVfdHlwZSh0ZXN0LT5tX3dlYlZpZXcsICJ0ZXh0L3BsYWluIikpOworICAgIGdfYXNzZXJ0KHdl
YmtpdF93ZWJfdmlld19jYW5fc2hvd19taW1lX3R5cGUodGVzdC0+bV93ZWJWaWV3LCAiaW1hZ2Uv
anBlZyIpKTsKKworICAgIC8vIFVuc3VwcG9ydGVkIE1JTUUgdHlwZXMuCisgICAgZ19hc3NlcnQo
IXdlYmtpdF93ZWJfdmlld19jYW5fc2hvd19taW1lX3R5cGUodGVzdC0+bV93ZWJWaWV3LCAidGV4
dC92Y2FyZCIpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9zaG93X21pbWVf
dHlwZSh0ZXN0LT5tX3dlYlZpZXcsICJhcHBsaWNhdGlvbi9wZGYiKSk7CisgICAgZ19hc3NlcnQo
IXdlYmtpdF93ZWJfdmlld19jYW5fc2hvd19taW1lX3R5cGUodGVzdC0+bV93ZWJWaWV3LCAiYXBw
bGljYXRpb24vemlwIikpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX3Nob3df
bWltZV90eXBlKHRlc3QtPm1fd2ViVmlldywgImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpKTsK
KworICAgIC8vIFBsdWdpbnMgYXJlIG9ubHkgc3VwcG9ydGVkIHdoZW4gZW5hYmxlZC4KKyAgICB3
ZWJraXRfd2ViX2NvbnRleHRfc2V0X2FkZGl0aW9uYWxfcGx1Z2luc19kaXJlY3Rvcnkod2Via2l0
X3dlYl92aWV3X2dldF9jb250ZXh0KHRlc3QtPm1fd2ViVmlldyksIFdFQktJVF9URVNUX1BMVUdJ
Tl9ESVIpOworICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19jYW5fc2hvd19taW1lX3R5cGUo
dGVzdC0+bV93ZWJWaWV3LCAiYXBwbGljYXRpb24veC13ZWJraXQtdGVzdC1uZXRzY2FwZSIpKTsK
KyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9wbHVnaW5zKHdlYmtpdF93ZWJfdmlld19n
ZXRfc2V0dGluZ3ModGVzdC0+bV93ZWJWaWV3KSwgRkFMU0UpOworICAgIGdfYXNzZXJ0KCF3ZWJr
aXRfd2ViX3ZpZXdfY2FuX3Nob3dfbWltZV90eXBlKHRlc3QtPm1fd2ViVmlldywgImFwcGxpY2F0
aW9uL3gtd2Via2l0LXRlc3QtbmV0c2NhcGUiKSk7Cit9CisKK2NsYXNzIEZvcm1DbGllbnRUZXN0
OiBwdWJsaWMgV2ViVmlld1Rlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRV
UkUoRm9ybUNsaWVudFRlc3QpOworCisgICAgc3RhdGljIHZvaWQgc3VibWl0Rm9ybUNhbGxiYWNr
KFdlYktpdFdlYlZpZXcqLCBXZWJLaXRGb3JtU3VibWlzc2lvblJlcXVlc3QqIHJlcXVlc3QsIEZv
cm1DbGllbnRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+c3VibWl0Rm9ybShyZXF1
ZXN0KTsKKyAgICB9CisKKyAgICBGb3JtQ2xpZW50VGVzdCgpCisgICAgICAgIDogbV9zdWJtaXRQ
b3NpdGlvblgoMCkKKyAgICAgICAgLCBtX3N1Ym1pdFBvc2l0aW9uWSgwKQorICAgIHsKKyAgICAg
ICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJzdWJtaXQtZm9ybSIsIEdfQ0FMTEJBQ0so
c3VibWl0Rm9ybUNhbGxiYWNrKSwgdGhpcyk7CisgICAgfQorCisgICAgfkZvcm1DbGllbnRUZXN0
KCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZCht
X3dlYlZpZXcsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOworICAgIH0K
KworICAgIHZvaWQgc3VibWl0Rm9ybShXZWJLaXRGb3JtU3VibWlzc2lvblJlcXVlc3QqIHJlcXVl
c3QpCisgICAgeworICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVz
KEdfT0JKRUNUKHJlcXVlc3QpKTsKKyAgICAgICAgbV9yZXF1ZXN0ID0gcmVxdWVzdDsKKyAgICAg
ICAgd2Via2l0X2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0X3N1Ym1pdChyZXF1ZXN0KTsKKyAgICAg
ICAgcXVpdE1haW5Mb29wKCk7CisgICAgfQorCisgICAgR0hhc2hUYWJsZSogd2FpdFVudGlsRm9y
bVN1Ym1pdHRlZEFuZEdldFRleHRGaWVsZHMoKQorICAgIHsKKyAgICAgICAgZ19tYWluX2xvb3Bf
cnVuKG1fbWFpbkxvb3ApOworICAgICAgICByZXR1cm4gd2Via2l0X2Zvcm1fc3VibWlzc2lvbl9y
ZXF1ZXN0X2dldF90ZXh0X2ZpZWxkcyhtX3JlcXVlc3QuZ2V0KCkpOworICAgIH0KKworICAgIHN0
YXRpYyBnYm9vbGVhbiBkb0NsaWNrSWRsZUNhbGxiYWNrKEZvcm1DbGllbnRUZXN0KiB0ZXN0KQor
ICAgIHsKKyAgICAgICAgdGVzdC0+Y2xpY2tNb3VzZUJ1dHRvbih0ZXN0LT5tX3N1Ym1pdFBvc2l0
aW9uWCwgdGVzdC0+bV9zdWJtaXRQb3NpdGlvblksIDEpOworICAgICAgICByZXR1cm4gRkFMU0U7
CisgICAgfQorCisgICAgdm9pZCBzdWJtaXRGb3JtQXRQb3NpdGlvbihpbnQgeCwgaW50IHkpCisg
ICAgeworICAgICAgICBtX3N1Ym1pdFBvc2l0aW9uWCA9IHg7CisgICAgICAgIG1fc3VibWl0UG9z
aXRpb25ZID0geTsKKyAgICAgICAgZ19pZGxlX2FkZChyZWludGVycHJldF9jYXN0PEdTb3VyY2VG
dW5jPihkb0NsaWNrSWRsZUNhbGxiYWNrKSwgdGhpcyk7CisgICAgfQorCisgICAgaW50IG1fc3Vi
bWl0UG9zaXRpb25YOworICAgIGludCBtX3N1Ym1pdFBvc2l0aW9uWTsKKyAgICBHUmVmUHRyPFdl
YktpdEZvcm1TdWJtaXNzaW9uUmVxdWVzdD4gbV9yZXF1ZXN0OworfTsKKworc3RhdGljIHZvaWQg
dGVzdFdlYlZpZXdTdWJtaXRGb3JtKEZvcm1DbGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVy
KQoreworICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOworCisgICAg
Y29uc3QgY2hhciogZm9ybUhUTUwgPQorICAgICAgICAiPGh0bWw+PGJvZHk+IgorICAgICAgICAi
IDxmb3JtIGFjdGlvbj0nIyc+IgorICAgICAgICAiICA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0n
dGV4dDEnIHZhbHVlPSd2YWx1ZTEnPiIKKyAgICAgICAgIiAgPGlucHV0IHR5cGU9J3RleHQnIG5h
bWU9J3RleHQyJyB2YWx1ZT0ndmFsdWUyJz4iCisgICAgICAgICIgIDxpbnB1dCB0eXBlPSdwYXNz
d29yZCcgbmFtZT0ncGFzc3dvcmQnIHZhbHVlPSdzZWNyZXQnPiIKKyAgICAgICAgIiAgPHRleHRh
cmVhIGNvbHM9JzUnIHJvd3M9JzUnIG5hbWU9J3RleHRhcmVhJz5UZXh0PC90ZXh0YXJlYT4iCisg
ICAgICAgICIgIDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2hpZGRlbjEnIHZhbHVlPSdoaWRk
ZW4xJz4iCisgICAgICAgICIgIDxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPSdTdWJtaXQnIHN0
eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6MScgc2l6ZT0nMTAnPiIKKyAgICAg
ICAgIiA8L2Zvcm0+IgorICAgICAgICAiPC9ib2R5PjwvaHRtbD4iOworCisgICAgdGVzdC0+bG9h
ZEh0bWwoZm9ybUhUTUwsICJmaWxlOi8vLyIpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5p
c2hlZCgpOworCisgICAgdGVzdC0+c3VibWl0Rm9ybUF0UG9zaXRpb24oNSwgNSk7CisgICAgR0hh
c2hUYWJsZSogdmFsdWVzID0gdGVzdC0+d2FpdFVudGlsRm9ybVN1Ym1pdHRlZEFuZEdldFRleHRG
aWVsZHMoKTsKKyAgICBnX2Fzc2VydCh2YWx1ZXMpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQoZ19o
YXNoX3RhYmxlX3NpemUodmFsdWVzKSwgPT0sIDMpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzdGF0
aWNfY2FzdDxjaGFyKj4oZ19oYXNoX3RhYmxlX2xvb2t1cCh2YWx1ZXMsICJ0ZXh0MSIpKSwgPT0s
ICJ2YWx1ZTEiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc3RhdGljX2Nhc3Q8Y2hhcio+KGdfaGFz
aF90YWJsZV9sb29rdXAodmFsdWVzLCAidGV4dDIiKSksID09LCAidmFsdWUyIik7CisgICAgZ19h
c3NlcnRfY21wc3RyKHN0YXRpY19jYXN0PGNoYXIqPihnX2hhc2hfdGFibGVfbG9va3VwKHZhbHVl
cywgInBhc3N3b3JkIikpLCA9PSwgInNlY3JldCIpOworfQorCitjbGFzcyBTYXZlV2ViVmlld1Rl
c3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklY
VFVSRShTYXZlV2ViVmlld1Rlc3QpOworCisgICAgU2F2ZVdlYlZpZXdUZXN0KCkKKyAgICAgICAg
OiBtX3RlbXBEaXJlY3RvcnkoZ19kaXJfbWFrZV90bXAoIldlYktpdDJTYXZlVmlld1Rlc3QtWFhY
WFhYIiwgMCkpCisgICAgeworICAgIH0KKworICAgIH5TYXZlV2ViVmlld1Rlc3QoKQorICAgIHsK
KyAgICAgICAgaWYgKEdfSVNfRklMRShtX2ZpbGUuZ2V0KCkpKQorICAgICAgICAgICAgZ19maWxl
X2RlbGV0ZShtX2ZpbGUuZ2V0KCksIDAsIDApOworCisgICAgICAgIGlmIChHX0lTX0lOUFVUX1NU
UkVBTShtX2lucHV0U3RyZWFtLmdldCgpKSkKKyAgICAgICAgICAgIGdfaW5wdXRfc3RyZWFtX2Ns
b3NlKG1faW5wdXRTdHJlYW0uZ2V0KCksIDAsIDApOworCisgICAgICAgIGlmIChtX3RlbXBEaXJl
Y3RvcnkpCisgICAgICAgICAgICBnX3JtZGlyKG1fdGVtcERpcmVjdG9yeS5nZXQoKSk7CisgICAg
fQorCisgICAgc3RhdGljIHZvaWQgd2ViVmlld1NhdmVkVG9TdHJlYW1DYWxsYmFjayhHT2JqZWN0
KiBvYmplY3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBTYXZlV2ViVmlld1Rlc3QqIHRlc3QpCisg
ICAgeworICAgICAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgICAgIHRlc3QtPm1faW5w
dXRTdHJlYW0gPSBhZG9wdEdSZWYod2Via2l0X3dlYl92aWV3X3NhdmVfZmluaXNoKHRlc3QtPm1f
d2ViVmlldywgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpKTsKKyAgICAgICAgZ19hc3NlcnQoR19J
U19JTlBVVF9TVFJFQU0odGVzdC0+bV9pbnB1dFN0cmVhbS5nZXQoKSkpOworICAgICAgICBnX2Fz
c2VydCghZXJyb3IpOworCisgICAgICAgIHRlc3QtPnF1aXRNYWluTG9vcCgpOworICAgIH0KKwor
ICAgIHN0YXRpYyB2b2lkIHdlYlZpZXdTYXZlZFRvRmlsZUNhbGxiYWNrKEdPYmplY3QqIG9iamVj
dCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIFNhdmVXZWJWaWV3VGVzdCogdGVzdCkKKyAgICB7Cisg
ICAgICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X3dl
Yl92aWV3X3NhdmVfdG9fZmlsZV9maW5pc2godGVzdC0+bV93ZWJWaWV3LCByZXN1bHQsICZlcnJv
ci5vdXRQdHIoKSkpOworICAgICAgICBnX2Fzc2VydCghZXJyb3IpOworCisgICAgICAgIHRlc3Qt
PnF1aXRNYWluTG9vcCgpOworICAgIH0KKworICAgIHZvaWQgc2F2ZUFuZFdhaXRGb3JTdHJlYW0o
KQorICAgIHsKKyAgICAgICAgd2Via2l0X3dlYl92aWV3X3NhdmUobV93ZWJWaWV3LCBXRUJLSVRf
U0FWRV9NT0RFX01IVE1MLCAwLCByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+
KHdlYlZpZXdTYXZlZFRvU3RyZWFtQ2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgZ19tYWluX2xv
b3BfcnVuKG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIHZvaWQgc2F2ZUFuZFdhaXRGb3JGaWxl
KCkKKyAgICB7CisgICAgICAgIG1fc2F2ZURlc3RpbmF0aW9uRmlsZVBhdGguc2V0KGdfYnVpbGRf
ZmlsZW5hbWUobV90ZW1wRGlyZWN0b3J5LmdldCgpLCAidGVzdFdlYlZpZXdTYXZlUmVzdWx0Lm1o
dCIsIE5VTEwpKTsKKyAgICAgICAgbV9maWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3Bh
dGgobV9zYXZlRGVzdGluYXRpb25GaWxlUGF0aC5nZXQoKSkpOworICAgICAgICB3ZWJraXRfd2Vi
X3ZpZXdfc2F2ZV90b19maWxlKG1fd2ViVmlldywgbV9maWxlLmdldCgpLCBXRUJLSVRfU0FWRV9N
T0RFX01IVE1MLCAwLCByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KHdlYlZp
ZXdTYXZlZFRvRmlsZUNhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIGdfbWFpbl9sb29wX3J1biht
X21haW5Mb29wKTsKKyAgICB9CisKKyAgICBHT3duUHRyPGNoYXI+IG1fdGVtcERpcmVjdG9yeTsK
KyAgICBHT3duUHRyPGNoYXI+IG1fc2F2ZURlc3RpbmF0aW9uRmlsZVBhdGg7CisgICAgR1JlZlB0
cjxHSW5wdXRTdHJlYW0+IG1faW5wdXRTdHJlYW07CisgICAgR1JlZlB0cjxHRmlsZT4gbV9maWxl
OworfTsKKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdTYXZlKFNhdmVXZWJWaWV3VGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+IgorICAgICAg
ICAgICAgICAgICAgICI8Ym9keT4iCisgICAgICAgICAgICAgICAgICAgIiAgPHA+QSBwYXJhZ3Jh
cGggd2l0aCBwbGFpbiB0ZXh0PC9wPiIKKyAgICAgICAgICAgICAgICAgICAiICA8cD4iCisgICAg
ICAgICAgICAgICAgICAgIiAgICBBIHJlZCBib3g6IDxpbWcgc3JjPSdkYXRhOmltYWdlL3BuZzti
YXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFJQUFBQUNDQUlBQUFEOTFKcHpBQUFBQ1hC
SVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUIzUkpUVVVIM0FZV0RUTVZ3blNabndBQUFCMXBWRmgw
UTI5dGJXVnVkQUFBQUFBQVEzSmxZWFJsWkNCM2FYUm9JRWRKVFZCa0xtVUhBQUFBRmtsRVFWUUkx
MlA4ejhEQXdNREF4TURBd01EQUFBQU5IUUVESyttbXlBQUFBQUJKUlU1RXJrSmdnZz09Jz48L2Jy
PiIKKyAgICAgICAgICAgICAgICAgICAiICAgIEEgYmx1ZSBib3g6IDxpbWcgc3JjPSdkYXRhOmlt
YWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFJQUFBQUNDQUlBQUFEOTFK
cHpBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUIzUkpUVVVIM0FZV0RUTXZCSGhBTFFB
QUFCMXBWRmgwUTI5dGJXVnVkQUFBQUFBQVEzSmxZWFJsWkNCM2FYUm9JRWRKVFZCa0xtVUhBQUFB
RmtsRVFWUUkxMk5rNFBuUHdNREF4TURBd01EQUFBQUxyd0VQUElzMXBnQUFBQUJKUlU1RXJrSmdn
Zz09Jz4iCisgICAgICAgICAgICAgICAgICAgIiAgPC9wPiIKKyAgICAgICAgICAgICAgICAgICAi
PC9ib2R5PiIKKyAgICAgICAgICAgICAgICAgICAiPC9odG1sPiIsIDApOworICAgIHRlc3QtPndh
aXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgLy8gV3JpdGUgdG8gYSBmaWxlIGFuZCB0byBh
biBpbnB1dCBzdHJlYW0uCisgICAgdGVzdC0+c2F2ZUFuZFdhaXRGb3JGaWxlKCk7CisgICAgdGVz
dC0+c2F2ZUFuZFdhaXRGb3JTdHJlYW0oKTsKKworICAgIC8vIFdlIHNob3VsZCBoYXZlIGV4YWN0
bHkgdGhlIHNhbWUgYW1vdW50IG9mIGJ5dGVzIGluIHRoZSBmaWxlCisgICAgLy8gdGhhbiB0aG9z
ZSBjb21pbmcgZnJvbSB0aGUgR0lucHV0U3RyZWFtLiBXZSBkb24ndCBjb21wYXJlIHRoZQorICAg
IC8vIHN0cmluZ3MgcmVhZCBzaW5jZSB0aGUgJ0RhdGUnIGZpZWxkIGFuZCB0aGUgYm91bmRhcmll
cyB3aWxsIGJlCisgICAgLy8gZGlmZmVyZW50IG9uIGVhY2ggY2FzZS4gTUhUTUwgZnVuY3Rpb25h
bGl0eSB3aWxsIGJlIHRlc3RlZCBieQorICAgIC8vIExheW91dCB0ZXN0cywgc28gY2hlY2tpbmcg
dGhlIGFtb3VudCBvZiBieXRlcyBpcyBlbm91Z2guCisgICAgR093blB0cjxHRXJyb3I+IGVycm9y
OworICAgIGdjaGFyIGJ1ZmZlcls1MTJdID0geyAwIH07CisgICAgZ3NzaXplIHJlYWRCeXRlcyA9
IDA7CisgICAgZ3NzaXplIHRvdGFsQnl0ZXNGcm9tU3RyZWFtID0gMDsKKyAgICB3aGlsZSAocmVh
ZEJ5dGVzID0gZ19pbnB1dF9zdHJlYW1fcmVhZCh0ZXN0LT5tX2lucHV0U3RyZWFtLmdldCgpLCAm
YnVmZmVyLCA1MTIsIDAsICZlcnJvci5vdXRQdHIoKSkpIHsKKyAgICAgICAgZ19hc3NlcnQoIWVy
cm9yKTsKKyAgICAgICAgdG90YWxCeXRlc0Zyb21TdHJlYW0gKz0gcmVhZEJ5dGVzOworICAgIH0K
KworICAgIC8vIENoZWNrIHRoYXQgdGhlIGZpbGUgZXhpc3RzIGFuZCB0aGF0IGl0IGNvbnRhaW5z
IHRoZSBzYW1lIGFtb3VudCBvZiBieXRlcy4KKyAgICBHUmVmUHRyPEdGaWxlSW5mbz4gZmlsZUlu
Zm8gPSBhZG9wdEdSZWYoZ19maWxlX3F1ZXJ5X2luZm8odGVzdC0+bV9maWxlLmdldCgpLCBHX0ZJ
TEVfQVRUUklCVVRFX1NUQU5EQVJEX1NJWkUsIHN0YXRpY19jYXN0PEdGaWxlUXVlcnlJbmZvRmxh
Z3M+KDApLCAwLCAwKSk7CisgICAgZ19hc3NlcnRfY21waW50KGdfZmlsZV9pbmZvX2dldF9zaXpl
KGZpbGVJbmZvLmdldCgpKSwgPT0sIHRvdGFsQnl0ZXNGcm9tU3RyZWFtKTsKK30KKworc3RhdGlj
IHZvaWQgdGVzdFdlYlZpZXdNb2RlKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQor
eworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBpbmRleEhUTUwgPSAiPGh0bWw+PGJvZHk+PHA+VGVz
dCBXZWIgVmlldyBNb2RlPC9wPjwvYm9keT48L2h0bWw+IjsKKworICAgIC8vIFdlYiBtb2RlLgor
ICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X3dlYl92aWV3X2dldF92aWV3X21vZGUodGVzdC0+
bV93ZWJWaWV3KSwgPT0sIFdFQktJVF9WSUVXX01PREVfV0VCKTsKKyAgICB0ZXN0LT5sb2FkSHRt
bChpbmRleEhUTUwsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAg
IFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZh
U2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoIndpbmRvdy5kb2N1bWVudC5ib2R5LnRleHRDb250
ZW50OyIsIDApOworICAgIEdPd25QdHI8Y2hhcj4gdmFsdWVTdHJpbmcoV2ViVmlld1Rlc3Q6Omph
dmFzY3JpcHRSZXN1bHRUb0NTdHJpbmcoamF2YXNjcmlwdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0
X2NtcHN0cih2YWx1ZVN0cmluZy5nZXQoKSwgPT0sICJUZXN0IFdlYiBWaWV3IE1vZGUiKTsKKwor
ICAgIC8vIFNvdXJjZSBtb2RlLgorICAgIHdlYmtpdF93ZWJfdmlld19zZXRfdmlld19tb2RlKHRl
c3QtPm1fd2ViVmlldywgV0VCS0lUX1ZJRVdfTU9ERV9TT1VSQ0UpOworICAgIHRlc3QtPmxvYWRI
dG1sKGluZGV4SFRNTCwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Cisg
ICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5p
c2hlZCgid2luZG93LmRvY3VtZW50LmJvZHkudGV4dENvbnRlbnQ7IiwgMCk7CisgICAgdmFsdWVT
dHJpbmcuc2V0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3Jp
cHRSZXN1bHQpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCBp
bmRleEhUTUwpOworfQorCisvLyBUbyB0ZXN0IHBhZ2UgdmlzaWJpbGl0eSBBUEkuIEN1cnJlbnRs
eSBvbmx5ICd2aXNpYmxlJyBhbmQgJ2hpZGRlbicgc3RhdGVzIGFyZSBpbXBsZW1lbnRlZCBmdWxs
eSBpbiBXZWJDb3JlLgorLy8gU2VlIGFsc28gaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9XRC1w
YWdlLXZpc2liaWxpdHktMjAxMTA2MDIvIGFuZCBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNv
bS9jaHJvbWUvd2hpdGVwYXBlcnMvcGFnZXZpc2liaWxpdHkKK3N0YXRpYyB2b2lkIHRlc3RXZWJW
aWV3UGFnZVZpc2liaWxpdHkoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7Cisg
ICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjx0aXRsZT48L3RpdGxlPiIKKyAgICAgICAgIjxib2R5
PjxwPlRlc3QgV2ViIFBhZ2UgVmlzaWJpbGl0eTwvcD4iCisgICAgICAgICI8c2NyaXB0PiIKKyAg
ICAgICAgImRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsIG9u
VmlzaWJpbGl0eUNoYW5nZSwgZmFsc2UpOyIKKyAgICAgICAgImZ1bmN0aW9uIG9uVmlzaWJpbGl0
eUNoYW5nZSgpIHsiCisgICAgICAgICIgICAgZG9jdW1lbnQudGl0bGUgPSBkb2N1bWVudC52aXNp
YmlsaXR5U3RhdGU7IgorICAgICAgICAifSIKKyAgICAgICAgIjwvc2NyaXB0PiIKKyAgICAgICAg
IjwvYm9keT48L2h0bWw+IiwKKyAgICAgICAgMCk7CisKKyAgICAvLyBXYWl0IHVudGlsbCB0aGUg
cGFnZSBpcyBsb2FkZWQuIEluaXRpYWwgdmlzaWJpbGl0eSBzaG91bGQgYmUgJ2hpZGRlbicuCisg
ICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBHT3duUHRyPEdFcnJvcj4g
ZXJyb3I7CisgICAgV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCogamF2YXNjcmlwdFJlc3VsdCA9IHRl
c3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQudmlzaWJpbGl0
eVN0YXRlOyIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3Vs
dCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKyAgICBHT3duUHRyPGNoYXI+IHZhbHVl
U3RyaW5nKFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRS
ZXN1bHQpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAiaGlk
ZGVuIik7CisKKyAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdh
aXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVudC5oaWRkZW47IiwgJmVycm9yLm91dFB0cigpKTsKKyAg
ICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkp
OworICAgIGdfYXNzZXJ0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9Cb29sZWFuKGph
dmFzY3JpcHRSZXN1bHQpKTsKKworICAgIC8vIFNob3cgdGhlIHBhZ2UuIFRoZSB2aXNpYmlsaXR5
IHNob3VsZCBiZSB1cGRhdGVkIHRvICd2aXNpYmxlJy4KKyAgICB0ZXN0LT5zaG93SW5XaW5kb3co
KTsKKyAgICB0ZXN0LT53YWl0VW50aWxUaXRsZUNoYW5nZWQoKTsKKworICAgIGphdmFzY3JpcHRS
ZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImRvY3VtZW50
LnZpc2liaWxpdHlTdGF0ZTsiLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGdfYXNzZXJ0KGphdmFz
Y3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7CisgICAgdmFsdWVTdHJp
bmcuc2V0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRS
ZXN1bHQpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAidmlz
aWJsZSIpOworCisgICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRX
YWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQuaGlkZGVuOyIsICZlcnJvci5vdXRQdHIoKSk7Cisg
ICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgp
KTsKKyAgICBnX2Fzc2VydCghV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0Jvb2xlYW4o
amF2YXNjcmlwdFJlc3VsdCkpOworCisgICAgLy8gSGlkZSB0aGUgcGFnZS4gVGhlIHZpc2liaWxp
dHkgc2hvdWxkIGJlIHVwZGF0ZWQgdG8gJ2hpZGRlbicuCisgICAgZ3RrX3dpZGdldF9oaWRlKEdU
S19XSURHRVQodGVzdC0+bV93ZWJWaWV3KSk7CisgICAgdGVzdC0+d2FpdFVudGlsVGl0bGVDaGFu
Z2VkKCk7CisKKyAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdh
aXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU7IiwgJmVycm9yLm91dFB0
cigpKTsKKyAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydCghZXJy
b3IuZ2V0KCkpOworICAgIHZhbHVlU3RyaW5nLnNldChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJl
c3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHZh
bHVlU3RyaW5nLmdldCgpLCA9PSwgImhpZGRlbiIpOworCisgICAgamF2YXNjcmlwdFJlc3VsdCA9
IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQuaGlkZGVu
OyIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7Cisg
ICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKyAgICBnX2Fzc2VydChXZWJWaWV3VGVzdDo6amF2
YXNjcmlwdFJlc3VsdFRvQm9vbGVhbihqYXZhc2NyaXB0UmVzdWx0KSk7Cit9CisKK2NsYXNzIFNu
YXBzaG90V2ViVmlld1Rlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7CitwdWJsaWM6CisgICAgTUFL
RV9HTElCX1RFU1RfRklYVFVSRShTbmFwc2hvdFdlYlZpZXdUZXN0KTsKKworICAgIHN0YXRpYyB2
b2lkIG9uU25hcHNob3RDYW5jZWxsZWRSZWFkeShXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgR0Fz
eW5jUmVzdWx0KiByZXMsIFNuYXBzaG90V2ViVmlld1Rlc3QqIHRlc3QpCisgICAgeworICAgICAg
ICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgICAgIHRlc3QtPm1fc3VyZmFjZSA9IHdlYmtp
dF93ZWJfdmlld19nZXRfc25hcHNob3RfZmluaXNoKHdlYl92aWV3LCByZXMsICZlcnJvci5vdXRQ
dHIoKSk7CisgICAgICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX3N1cmZhY2UpOworICAgICAgICBnX2Fz
c2VydF9lcnJvcihlcnJvci5nZXQoKSwgR19JT19FUlJPUiwgR19JT19FUlJPUl9DQU5DRUxMRUQp
OworICAgICAgICB0ZXN0LT5xdWl0TWFpbkxvb3AoKTsKKyAgICB9CisKKyAgICBnYm9vbGVhbiBn
ZXRTbmFwc2hvdEFuZENhbmNlbCgpCisgICAgeworICAgICAgICBpZiAobV9zdXJmYWNlKQorICAg
ICAgICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KG1fc3VyZmFjZSk7CisgICAgICAgIG1fc3Vy
ZmFjZSA9IDA7CisgICAgICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBjYW5jZWxsYWJsZSA9IGFk
b3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKTsKKyAgICAgICAgd2Via2l0X3dlYl92aWV3X2dl
dF9zbmFwc2hvdChtX3dlYlZpZXcsIFdFQktJVF9TTkFQU0hPVF9SRUdJT05fVklTSUJMRSwgV0VC
S0lUX1NOQVBTSE9UX09QVElPTlNfTk9ORSwgY2FuY2VsbGFibGUuZ2V0KCksIHJlaW50ZXJwcmV0
X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4ob25TbmFwc2hvdENhbmNlbGxlZFJlYWR5KSwgdGhp
cyk7CisgICAgICAgIGdfY2FuY2VsbGFibGVfY2FuY2VsKGNhbmNlbGxhYmxlLmdldCgpKTsKKyAg
ICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworfTsKKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdTbmFwc2hvdChTbmFwc2hv
dFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRIdG1s
KCI8aHRtbD48Ym9keT48cD5XaGF0ZXZlcjwvcD48L2JvZHk+PC9odG1sPiIsIDApOworICAgIHRl
c3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgLy8gV2ViVmlldyBub3QgdmlzaWJs
ZS4KKyAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UxID0gdGVzdC0+Z2V0U25hcHNob3RBbmRX
YWl0VW50aWxSZWFkeShXRUJLSVRfU05BUFNIT1RfUkVHSU9OX1ZJU0lCTEUsIFdFQktJVF9TTkFQ
U0hPVF9PUFRJT05TX05PTkUpOworICAgIGdfYXNzZXJ0KCFzdXJmYWNlMSk7CisKKyAgICAvLyBT
aG93IHN1cmZhY2UsIHJlc2l6ZSB0byA1MHg1MCwgdHJ5IGFnYWluLgorICAgIHRlc3QtPnNob3dJ
bldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOworICAgIHRlc3QtPnJlc2l6ZVZpZXcoNTAsIDUw
KTsKKyAgICBzdXJmYWNlMSA9IHRlc3QtPmdldFNuYXBzaG90QW5kV2FpdFVudGlsUmVhZHkoV0VC
S0lUX1NOQVBTSE9UX1JFR0lPTl9WSVNJQkxFLCBXRUJLSVRfU05BUFNIT1RfT1BUSU9OU19OT05F
KTsKKyAgICBnX2Fzc2VydChzdXJmYWNlMSk7CisKKyAgICAvLyBvYnRhaW5lZCBzdXJmYWNlIHNo
b3VsZCBiZSBhdCB0aGUgbW9zdCA1MHg1MC4gU3RvcmUgdGhlIHNpemUKKyAgICAvLyBmb3IgY29t
cGFyaXNvbiBsYXRlci4KKyAgICBpbnQgd2lkdGggPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93
aWR0aChzdXJmYWNlMSk7CisgICAgaW50IGhlaWdodCA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0
X2hlaWdodChzdXJmYWNlMSk7CisgICAgZ19hc3NlcnRfY21waW50KHdpZHRoLCA8PSwgNTApOwor
ICAgIGdfYXNzZXJ0X2NtcGludChoZWlnaHQsIDw9LCA1MCk7CisKKyAgICAvLyBTZWxlY3QgYWxs
IHRleHQgaW4gdGhlIFdlYlZpZXcsIHJlcXVlc3QgYSBzbmFwc2hvdCBpZ25vcmluZyBzZWxlY3Rp
b24uCisgICAgdGVzdC0+c2VsZWN0QWxsKCk7CisgICAgc3VyZmFjZTEgPSBjYWlyb19zdXJmYWNl
X3JlZmVyZW5jZSh0ZXN0LT5nZXRTbmFwc2hvdEFuZFdhaXRVbnRpbFJlYWR5KFdFQktJVF9TTkFQ
U0hPVF9SRUdJT05fVklTSUJMRSwgV0VCS0lUX1NOQVBTSE9UX09QVElPTlNfTk9ORSkpOworICAg
IGdfYXNzZXJ0KHN1cmZhY2UxKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9nZXRfd2lkdGgoc3VyZmFjZTEpLCA9PSwgd2lkdGgpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZTEpLCA9PSwgaGVpZ2h0KTsK
KworICAgIC8vIENyZWF0ZSBpZGVudGljYWwgc3VyZmFjZS4KKyAgICBjYWlyb19zdXJmYWNlX3Qq
IHN1cmZhY2UyID0gdGVzdC0+Z2V0U25hcHNob3RBbmRXYWl0VW50aWxSZWFkeShXRUJLSVRfU05B
UFNIT1RfUkVHSU9OX1ZJU0lCTEUsIFdFQktJVF9TTkFQU0hPVF9PUFRJT05TX05PTkUpOworICAg
IGdfYXNzZXJ0KHN1cmZhY2UyKTsKKworICAgIC8vIENvbXBhcmUgdGhlc2UgdHdvLCB0aGV5IHNo
b3VsZCBiZSBpZGVudGljYWwuCisgICAgZ19hc3NlcnQoVGVzdDo6Y2Fpcm9TdXJmYWNlc0VxdWFs
KHN1cmZhY2UxLCBzdXJmYWNlMikpOworCisgICAgLy8gUmVxdWVzdCBhIG5ldyBzbmFwc2hvdCwg
aW5jbHVkaW5nIHRoZSBzZWxlY3Rpb24gdGhpcyB0aW1lLiBUaGUKKyAgICAvLyBzaXplIHNob3Vs
ZCBiZSB0aGUgc2FtZSBidXQgdGhlIHJlc3VsdCBtdXN0IGJlIGRpZmZlcmVudCB0byB0aGUKKyAg
ICAvLyBvbmUgcHJldmlvdXNseSBvYnRhaW5lZC4KKyAgICBzdXJmYWNlMiA9IHRlc3QtPmdldFNu
YXBzaG90QW5kV2FpdFVudGlsUmVhZHkoV0VCS0lUX1NOQVBTSE9UX1JFR0lPTl9WSVNJQkxFLCBX
RUJLSVRfU05BUFNIT1RfT1BUSU9OU19JTkNMVURFX1NFTEVDVElPTl9ISUdITElHSFRJTkcpOwor
ICAgIGdfYXNzZXJ0KHN1cmZhY2UyKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoY2Fpcm9faW1hZ2Vf
c3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZTIpLCA9PSwgd2lkdGgpOworICAgIGdfYXNzZXJ0X2Nt
cGludChjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZTIpLCA9PSwgaGVpZ2h0
KTsKKyAgICBnX2Fzc2VydCghVGVzdDo6Y2Fpcm9TdXJmYWNlc0VxdWFsKHN1cmZhY2UxLCBzdXJm
YWNlMikpOworCisgICAgLy8gUmVxdWVzdCBhIHNuYXBzaG90IG9mIHRoZSB3aG9sZSBkb2N1bWVu
dCBpbiB0aGUgV2ViVmlldy4gVGhlCisgICAgLy8gcmVzdWx0IHNob3VsZCBiZSBkaWZmZXJlbnQg
ZnJvbSB0aGUgc2l6ZSBvYnRhaW5lZCBwcmV2aW91c2x5LgorICAgIHN1cmZhY2UyID0gdGVzdC0+
Z2V0U25hcHNob3RBbmRXYWl0VW50aWxSZWFkeShXRUJLSVRfU05BUFNIT1RfUkVHSU9OX0ZVTExf
RE9DVU1FTlQsIFdFQktJVF9TTkFQU0hPVF9PUFRJT05TX05PTkUpOworICAgIGdfYXNzZXJ0KHN1
cmZhY2UyKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lk
dGgoc3VyZmFjZTIpLCAgPiwgd2lkdGgpOworICAgIGdfYXNzZXJ0X2NtcGludChjYWlyb19pbWFn
ZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZTIpLCA+LCBoZWlnaHQpOworICAgIGdfYXNzZXJ0
KCFUZXN0OjpjYWlyb1N1cmZhY2VzRXF1YWwoc3VyZmFjZTEsIHN1cmZhY2UyKSk7CisKKyAgICBj
YWlyb19zdXJmYWNlX2Rlc3Ryb3koc3VyZmFjZTEpOworCisgICAgZ19hc3NlcnQodGVzdC0+Z2V0
U25hcHNob3RBbmRDYW5jZWwoKSk7Cit9CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICBXZWJW
aWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImRlZmF1bHQtY29udGV4dCIsIHRlc3RXZWJW
aWV3RGVmYXVsdENvbnRleHQpOworICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYlZpZXci
LCAiY3VzdG9tLWNoYXJzZXQiLCB0ZXN0V2ViVmlld0N1c3RvbUNoYXJzZXQpOworICAgIFdlYlZp
ZXdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAic2V0dGluZ3MiLCB0ZXN0V2ViVmlld1NldHRp
bmdzKTsKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInpvb20tbGV2ZWwi
LCB0ZXN0V2ViVmlld1pvb21MZXZlbCk7CisgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2Vi
VmlldyIsICJydW4tamF2YXNjcmlwdCIsIHRlc3RXZWJWaWV3UnVuSmF2YVNjcmlwdCk7CisgICAg
RnVsbFNjcmVlbkNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJmdWxsc2NyZWVuIiwg
dGVzdFdlYlZpZXdGdWxsU2NyZWVuKTsKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJW
aWV3IiwgImNhbi1zaG93LW1pbWUtdHlwZSIsIHRlc3RXZWJWaWV3Q2FuU2hvd01JTUVUeXBlKTsK
KyAgICBGb3JtQ2xpZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInN1Ym1pdC1mb3JtIiwg
dGVzdFdlYlZpZXdTdWJtaXRGb3JtKTsKKyAgICBTYXZlV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0
V2ViVmlldyIsICJzYXZlIiwgdGVzdFdlYlZpZXdTYXZlKTsKKyAgICBXZWJWaWV3VGVzdDo6YWRk
KCJXZWJLaXRXZWJWaWV3IiwgInZpZXctbW9kZSIsIHRlc3RXZWJWaWV3TW9kZSk7CisgICAgU25h
cHNob3RXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInNuYXBzaG90IiwgdGVzdFdl
YlZpZXdTbmFwc2hvdCk7CisgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJw
YWdlLXZpc2liaWxpdHkiLCB0ZXN0V2ViVmlld1BhZ2VWaXNpYmlsaXR5KTsKK30KKwordm9pZCBh
ZnRlckFsbCgpCit7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdDJHdGsvVGVzdFdlYktpdFdlYlZpZXdHcm91cC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFdlYlZpZXdHcm91cC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI2YzVjNQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0V2ViVmlld0dyb3VwLmNw
cApAQCAtMCwwICsxLDIwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJZ2FsaWEgUy5M
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5oIgor
I2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCisjaW5jbHVkZSA8Y3N0ZGFyZz4KKyNpbmNsdWRlIDxn
dGsvZ3RrLmg+CisjaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+CisjaW5jbHVkZSA8d3RmL2dv
YmplY3QvR1JlZlB0ci5oPgorCitzdGF0aWMgV2ViS2l0VGVzdFNlcnZlcioga1NlcnZlcjsKKwor
Ly8gVGhlc2UgYXJlIGFsbCBoZXJlIHNvIHRoYXQgdGhleSBjYW4gYmUgY2hhbmdlZCBlYXNpbHks
IGlmIG5lY2Vzc2FyeS4KK3N0YXRpYyBjb25zdCBjaGFyKiBrU3R5bGVTaGVldEhUTUwgPSAiPGh0
bWw+PGRpdiBpZD1cInN0eWxlZEVsZW1lbnRcIj5Td2VldCBzdHlsZXohPC9kaXY+PC9odG1sPiI7
CitzdGF0aWMgY29uc3QgY2hhcioga0luamVjdGVkU3R5bGVTaGVldCA9ICIjc3R5bGVkRWxlbWVu
dCB7IGZvbnQtd2VpZ2h0OiBib2xkOyB9IjsKK3N0YXRpYyBjb25zdCBjaGFyKiBrU3R5bGVTaGVl
dFRlc3RTY3JpcHQgPSAiZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
c3R5bGVkRWxlbWVudCcpKVsnZm9udC13ZWlnaHQnXSI7CitzdGF0aWMgY29uc3QgY2hhcioga1N0
eWxlU2hlZXRUZXN0U2NyaXB0UmVzdWx0ID0gImJvbGQiOworCitzdGF0aWMgdm9pZCB0ZXN0V2Vi
Vmlld0dyb3VwRGVmYXVsdChUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIC8vIERl
ZmF1bHQgZ3JvdXAgaXMgc2hhcmVkIGJ5IGFsbCBXZWJWaWV3cyBieSBkZWZhdWx0LgorICAgIEdS
ZWZQdHI8V2ViS2l0V2ViVmlldz4gd2ViVmlldzEgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dl
Yl92aWV3X25ldygpKTsKKyAgICBHUmVmUHRyPFdlYktpdFdlYlZpZXc+IHdlYlZpZXcyID0gV0VC
S0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19hc3NlcnQod2Via2l0
X3dlYl92aWV3X2dldF9ncm91cCh3ZWJWaWV3MS5nZXQoKSkgPT0gd2Via2l0X3dlYl92aWV3X2dl
dF9ncm91cCh3ZWJWaWV3Mi5nZXQoKSkpOworCisgICAgLy8gU2V0dGluZ3MgYXJlIHNoYXJlZCBi
eSBhbGwgd2ViIHZpZXcgaW4gdGhlIHNhbWUgZ3JvdXAuCisgICAgZ19hc3NlcnQod2Via2l0X3dl
Yl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3MS5nZXQoKSkgPT0gd2Via2l0X3dlYl92aWV3X2dl
dF9zZXR0aW5ncyh3ZWJWaWV3Mi5nZXQoKSkpOworICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmll
d19nZXRfc2V0dGluZ3Mod2ViVmlldzEuZ2V0KCkpID09IHdlYmtpdF93ZWJfdmlld19ncm91cF9n
ZXRfc2V0dGluZ3Mod2Via2l0X3dlYl92aWV3X2dldF9ncm91cCh3ZWJWaWV3Mi5nZXQoKSkpKTsK
K30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdHcm91cE5ld0dyb3VwKFRlc3QqIHRlc3QsIGdj
b25zdHBvaW50ZXIpCit7CisgICAgLy8gUGFzc2luZyAwIGFzIGdyb3VwIG5hbWUgZ2VuZXJhdGVz
IHRoZSBuYW1lIGF1dG9tYXRpY2FsbHkuCisgICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3R3JvdXA+
IHZpZXdHcm91cDEgPSBhZG9wdEdSZWYod2Via2l0X3dlYl92aWV3X2dyb3VwX25ldygwKSk7Cisg
ICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVCh2
aWV3R3JvdXAxLmdldCgpKSk7CisgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dyb3VwX2dl
dF9uYW1lKHZpZXdHcm91cDEuZ2V0KCkpKTsKKworICAgIC8vIE5ldyBncm91cCB3aXRoIGEgZ2l2
ZW4gbmFtZS4KKyAgICBHUmVmUHRyPFdlYktpdFdlYlZpZXdHcm91cD4gdmlld0dyb3VwMiA9IGFk
b3B0R1JlZih3ZWJraXRfd2ViX3ZpZXdfZ3JvdXBfbmV3KCJUZXN0R3JvdXAyIikpOworICAgIHRl
c3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1Qodmlld0dy
b3VwMi5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ3JvdXBf
Z2V0X25hbWUodmlld0dyb3VwMi5nZXQoKSksID09LCAiVGVzdEdyb3VwMiIpOworICAgIGdfYXNz
ZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ3JvdXBfZ2V0X25hbWUodmlld0dyb3VwMi5nZXQo
KSksICE9LCB3ZWJraXRfd2ViX3ZpZXdfZ3JvdXBfZ2V0X25hbWUodmlld0dyb3VwMS5nZXQoKSkp
OworCisgICAgLy8gRXZlcnkgZ3JvdXAgaGFzIGl0cyBvd24gc2V0dGluZ3MuCisgICAgZ19hc3Nl
cnQod2Via2l0X3dlYl92aWV3X2dyb3VwX2dldF9zZXR0aW5ncyh2aWV3R3JvdXAxLmdldCgpKSAh
PSB3ZWJraXRfd2ViX3ZpZXdfZ3JvdXBfZ2V0X3NldHRpbmdzKHZpZXdHcm91cDIuZ2V0KCkpKTsK
K30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdOZXdXaXRoR3JvdXAoVGVzdCogdGVzdCwgZ2Nv
bnN0cG9pbnRlcikKK3sKKyAgICBHUmVmUHRyPFdlYktpdFdlYlZpZXdHcm91cD4gdmlld0dyb3Vw
MSA9IGFkb3B0R1JlZih3ZWJraXRfd2ViX3ZpZXdfZ3JvdXBfbmV3KCJUZXN0R3JvdXAxIikpOwor
ICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1Qo
dmlld0dyb3VwMS5nZXQoKSkpOworICAgIEdSZWZQdHI8V2ViS2l0V2ViVmlldz4gd2ViVmlldzEg
PSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ld193aXRoX2dyb3VwKHZpZXdHcm91
cDEuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2dyb3VwKHdlYlZp
ZXcxLmdldCgpKSA9PSB2aWV3R3JvdXAxLmdldCgpKTsKKworICAgIEdSZWZQdHI8V2ViS2l0V2Vi
Vmlldz4gd2ViVmlldzIgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsK
KyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2dyb3VwKHdlYlZpZXcyLmdldCgpKSAh
PSB2aWV3R3JvdXAxLmdldCgpKTsKKworICAgIC8vIFNldHRpbmdzIHNob3VsZCBiZSBkaWZmZXJl
bnQgZm9yIHZpZXdzIGluIGRpZmZlcmVudCBncm91cHMuCisgICAgZ19hc3NlcnQod2Via2l0X3dl
Yl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3MS5nZXQoKSkgIT0gd2Via2l0X3dlYl92aWV3X2dl
dF9zZXR0aW5ncyh3ZWJWaWV3Mi5nZXQoKSkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmll
d0dyb3VwU2V0dGluZ3MoVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBHUmVmUHRy
PFdlYktpdFdlYlZpZXdHcm91cD4gdmlld0dyb3VwMSA9IGFkb3B0R1JlZih3ZWJraXRfd2ViX3Zp
ZXdfZ3JvdXBfbmV3KCJUZXN0R3JvdXAxIikpOworICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVs
ZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1Qodmlld0dyb3VwMS5nZXQoKSkpOworICAgIEdS
ZWZQdHI8V2ViS2l0U2V0dGluZ3M+IG5ld1NldHRpbmdzID0gYWRvcHRHUmVmKHdlYmtpdF9zZXR0
aW5nc19uZXdfd2l0aF9zZXR0aW5ncygiZW5hYmxlLWphdmFzY3JpcHQiLCBGQUxTRSwgTlVMTCkp
OworICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpF
Q1QobmV3U2V0dGluZ3MuZ2V0KCkpKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfZ3JvdXBfc2V0X3Nl
dHRpbmdzKHZpZXdHcm91cDEuZ2V0KCksIG5ld1NldHRpbmdzLmdldCgpKTsKKyAgICBnX2Fzc2Vy
dCh3ZWJraXRfd2ViX3ZpZXdfZ3JvdXBfZ2V0X3NldHRpbmdzKHZpZXdHcm91cDEuZ2V0KCkpID09
IG5ld1NldHRpbmdzLmdldCgpKTsKKworICAgIEdSZWZQdHI8V2ViS2l0V2ViVmlldz4gd2ViVmll
dzEgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ld193aXRoX2dyb3VwKHZpZXdH
cm91cDEuZ2V0KCkpKTsKKyAgICBHUmVmUHRyPFdlYktpdFdlYlZpZXc+IHdlYlZpZXcyID0gV0VC
S0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgV2ViS2l0U2V0dGluZ3Mq
IHdlYlZpZXcxU2V0dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdlYlZpZXcx
LmdldCgpKTsKKyAgICBXZWJLaXRTZXR0aW5ncyogd2ViVmlldzJTZXR0aW5ncyA9IHdlYmtpdF93
ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmlldzIuZ2V0KCkpOworICAgIGdfYXNzZXJ0KHdlYlZp
ZXcxU2V0dGluZ3MgIT0gd2ViVmlldzJTZXR0aW5ncyk7CisgICAgZ19hc3NlcnQod2Via2l0X3Nl
dHRpbmdzX2dldF9lbmFibGVfamF2YXNjcmlwdCh3ZWJWaWV3MVNldHRpbmdzKSAhPSB3ZWJraXRf
c2V0dGluZ3NfZ2V0X2VuYWJsZV9qYXZhc2NyaXB0KHdlYlZpZXcyU2V0dGluZ3MpKTsKKworICAg
IHdlYmtpdF93ZWJfdmlld19zZXRfc2V0dGluZ3Mod2ViVmlldzEuZ2V0KCksIHdlYlZpZXcyU2V0
dGluZ3MpOworICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmll
dzEuZ2V0KCkpID09IHdlYlZpZXcyU2V0dGluZ3MpOworICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJf
dmlld19ncm91cF9nZXRfc2V0dGluZ3Mod2Via2l0X3dlYl92aWV3X2dldF9ncm91cCh3ZWJWaWV3
MS5nZXQoKSkpID09IHdlYlZpZXcyU2V0dGluZ3MpOworfQorCitzdGF0aWMgYm9vbCBpc1N0eWxl
U2hlZXRJbmplY3RlZEZvclVSTEF0UGF0aChXZWJWaWV3VGVzdCogdGVzdCwgY29uc3QgY2hhciog
cGF0aCkKK3sKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgocGF0aCku
ZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIEdPd25Q
dHI8R0Vycm9yPiBlcnJvcjsKKyAgICBXZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBqYXZhc2NyaXB0
UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKGtTdHlsZVNo
ZWV0VGVzdFNjcmlwdCwgJmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fzc2VydChqYXZhc2NyaXB0
UmVzdWx0KTsKKyAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOworCisgICAgR093blB0cjxjaGFy
PiByZXN1bHRTdHJpbmcoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0NTdHJpbmcoamF2
YXNjcmlwdFJlc3VsdCkpOworICAgIHJldHVybiAhZ19zdHJjbXAwKHJlc3VsdFN0cmluZy5nZXQo
KSwga1N0eWxlU2hlZXRUZXN0U2NyaXB0UmVzdWx0KTsKK30KKworc3RhdGljIHZvaWQgZmlsbFVS
TExpc3RGcm9tUGF0aHMoY2hhcioqIGxpc3QsIGNvbnN0IGNoYXIqIHBhdGgsIC4uLikKK3sKKyAg
ICB2YV9saXN0IGFyZ3VtZW50TGlzdDsKKyAgICB2YV9zdGFydChhcmd1bWVudExpc3QsIHBhdGgp
OworCisgICAgaW50IGkgPSAwOworICAgIHdoaWxlIChwYXRoKSB7CisgICAgICAgIC8vIEZJWE1F
OiBXZSBtdXN0IHVzZSBhIHdpbGRjYXJkIGZvciB0aGUgaG9zdCBoZXJlIHVudGlsIGh0dHA6Ly93
a2J1Zy5jb20vMTEyNDc2IGlzIGZpeGVkLgorICAgICAgICAvLyBVbnRpbCB0aGF0IHRpbWUgcGF0
dGVybnMgd2l0aCBwb3J0IG51bWJlcnMgaW4gdGhlbSB3aWxsIG5vdCBwcm9wZXJseSBtYXRjaCBV
UkxzIHdpdGggcG9ydCBudW1iZXJzLgorICAgICAgICBsaXN0W2krK10gPSBnX3N0cmR1cF9wcmlu
dGYoImh0dHA6Ly8qLyVzKiIsIHBhdGgpOworICAgICAgICBwYXRoID0gdmFfYXJnKGFyZ3VtZW50
TGlzdCwgY29uc3QgY2hhciopOworICAgIH0KK30KKworc3RhdGljIHZvaWQgcmVtb3ZlT2xkSW5q
ZWN0ZWRTdHlsZVNoZWV0c0FuZFJlc2V0TGlzdHMoV2ViS2l0V2ViVmlld0dyb3VwKiBncm91cCwg
Y2hhcioqIHdoaXRlbGlzdCwgY2hhcioqIGJsYWNrbGlzdCkKK3sKKyAgICB3ZWJraXRfd2ViX3Zp
ZXdfZ3JvdXBfcmVtb3ZlX2FsbF91c2VyX3N0eWxlX3NoZWV0cyhncm91cCk7CisKKyAgICB3aGls
ZSAoKndoaXRlbGlzdCkgeworICAgICAgICBnX2ZyZWUoKndoaXRlbGlzdCk7CisgICAgICAgICp3
aGl0ZWxpc3QgPSAwOworICAgICAgICB3aGl0ZWxpc3QrKzsKKyAgICB9CisKKyAgICB3aGlsZSAo
KmJsYWNrbGlzdCkgeworICAgICAgICBnX2ZyZWUoKmJsYWNrbGlzdCk7CisgICAgICAgICpibGFj
a2xpc3QgPSAwOworICAgICAgICBibGFja2xpc3QrKzsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk
IHRlc3RXZWJWaWV3R3JvdXBJbmplY3RlZFN0eWxlU2hlZXQoV2ViVmlld1Rlc3QqIHRlc3QsIGdj
b25zdHBvaW50ZXIpCit7CisgICAgV2ViS2l0V2ViVmlld0dyb3VwKiBncm91cCA9IHdlYmtpdF93
ZWJfdmlld19nZXRfZ3JvdXAodGVzdC0+bV93ZWJWaWV3KTsKKyAgICBjaGFyKiB3aGl0ZWxpc3Rb
M10gPSB7IDAsIDAsIDAgfTsKKyAgICBjaGFyKiBibGFja2xpc3RbM10gPSB7IDAsIDAsIDAgfTsK
KworICAgIHJlbW92ZU9sZEluamVjdGVkU3R5bGVTaGVldHNBbmRSZXNldExpc3RzKGdyb3VwLCB3
aGl0ZWxpc3QsIGJsYWNrbGlzdCk7CisKKyAgICAvLyBXaXRob3V0IGEgd2hpdGVsaXN0IG9yIGEg
YmxhY2tsaXN0IGFsbCBVUkxzIHNob3VsZCBoYXZlIHRoZSBpbmplY3RlZCBzdHlsZSBzaGVldC4K
KyAgICBzdGF0aWMgY29uc3QgY2hhciogcmFuZG9tUGF0aCA9ICJzb21lcmFuZG9tcGF0aCI7Cisg
ICAgZ19hc3NlcnQoIWlzU3R5bGVTaGVldEluamVjdGVkRm9yVVJMQXRQYXRoKHRlc3QsIHJhbmRv
bVBhdGgpKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfZ3JvdXBfYWRkX3VzZXJfc3R5bGVfc2hlZXQo
Z3JvdXAsIGtJbmplY3RlZFN0eWxlU2hlZXQsIDAsIDAsIDAsIFdFQktJVF9JTkpFQ1RFRF9DT05U
RU5UX0ZSQU1FU19BTEwpOworICAgIGdfYXNzZXJ0KGlzU3R5bGVTaGVldEluamVjdGVkRm9yVVJM
QXRQYXRoKHRlc3QsIHJhbmRvbVBhdGgpKTsKKworICAgIHJlbW92ZU9sZEluamVjdGVkU3R5bGVT
aGVldHNBbmRSZXNldExpc3RzKGdyb3VwLCB3aGl0ZWxpc3QsIGJsYWNrbGlzdCk7CisKKyAgICBm
aWxsVVJMTGlzdEZyb21QYXRocyhibGFja2xpc3QsIHJhbmRvbVBhdGgsIDApOworICAgIHdlYmtp
dF93ZWJfdmlld19ncm91cF9hZGRfdXNlcl9zdHlsZV9zaGVldChncm91cCwga0luamVjdGVkU3R5
bGVTaGVldCwgMCwgMCwgYmxhY2tsaXN0LCBXRUJLSVRfSU5KRUNURURfQ09OVEVOVF9GUkFNRVNf
QUxMKTsKKyAgICBnX2Fzc2VydCghaXNTdHlsZVNoZWV0SW5qZWN0ZWRGb3JVUkxBdFBhdGgodGVz
dCwgcmFuZG9tUGF0aCkpOworICAgIGdfYXNzZXJ0KGlzU3R5bGVTaGVldEluamVjdGVkRm9yVVJM
QXRQYXRoKHRlc3QsICJzb21lb3RoZXJyYW5kb21wYXRoIikpOworCisgICAgcmVtb3ZlT2xkSW5q
ZWN0ZWRTdHlsZVNoZWV0c0FuZFJlc2V0TGlzdHMoZ3JvdXAsIHdoaXRlbGlzdCwgYmxhY2tsaXN0
KTsKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBpblRoZVdoaXRlTGlzdCA9ICJpbnRoZXdoaXRl
bGlzdCI7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIG5vdEluV2hpdGVsaXN0ID0gIm5vdGludGhl
d2hpdGVsaXN0IjsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogaW5UaGVXaGl0ZUxpc3RBbmRCbGFj
a0xpc3QgPSAiaW50aGV3aGl0ZWxpc3RhbmRibGFja2xpc3QiOworCisgICAgZmlsbFVSTExpc3RG
cm9tUGF0aHMod2hpdGVsaXN0LCBpblRoZVdoaXRlTGlzdCwgaW5UaGVXaGl0ZUxpc3RBbmRCbGFj
a0xpc3QsIDApOworICAgIGZpbGxVUkxMaXN0RnJvbVBhdGhzKGJsYWNrbGlzdCwgaW5UaGVXaGl0
ZUxpc3RBbmRCbGFja0xpc3QsIDApOworICAgIHdlYmtpdF93ZWJfdmlld19ncm91cF9hZGRfdXNl
cl9zdHlsZV9zaGVldChncm91cCwga0luamVjdGVkU3R5bGVTaGVldCwgMCwgd2hpdGVsaXN0LCBi
bGFja2xpc3QsIFdFQktJVF9JTkpFQ1RFRF9DT05URU5UX0ZSQU1FU19BTEwpOworICAgIGdfYXNz
ZXJ0KGlzU3R5bGVTaGVldEluamVjdGVkRm9yVVJMQXRQYXRoKHRlc3QsIGluVGhlV2hpdGVMaXN0
KSk7CisgICAgZ19hc3NlcnQoIWlzU3R5bGVTaGVldEluamVjdGVkRm9yVVJMQXRQYXRoKHRlc3Qs
IGluVGhlV2hpdGVMaXN0QW5kQmxhY2tMaXN0KSk7CisgICAgZ19hc3NlcnQoIWlzU3R5bGVTaGVl
dEluamVjdGVkRm9yVVJMQXRQYXRoKHRlc3QsIG5vdEluV2hpdGVsaXN0KSk7CisKKyAgICAvLyBJ
dCdzIGltcG9ydGFudCB0byBjbGVhbiB1cCB0aGUgZW52aXJvbm1lbnQgYmVmb3JlIG90aGVyIHRl
c3RzLgorICAgIHJlbW92ZU9sZEluamVjdGVkU3R5bGVTaGVldHNBbmRSZXNldExpc3RzKGdyb3Vw
LCB3aGl0ZWxpc3QsIGJsYWNrbGlzdCk7Cit9CisKK3N0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNr
KFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IGNoYXIqIHBh
dGgsIEdIYXNoVGFibGUqLCBTb3VwQ2xpZW50Q29udGV4dCosIGdwb2ludGVyKQoreworICAgIHNv
dXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKKyAgICBzb3Vw
X21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllf
U1RBVElDLCBrU3R5bGVTaGVldEhUTUwsIHN0cmxlbihrU3R5bGVTaGVldEhUTUwpKTsKKyAgICBz
b3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKK30KKwor
dm9pZCBiZWZvcmVBbGwoKQoreworICAgIGtTZXJ2ZXIgPSBuZXcgV2ViS2l0VGVzdFNlcnZlcigp
OworICAgIGtTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFjayk7CisKKyAgICBUZXN0OjphZGQoIldl
YktpdFdlYlZpZXdHcm91cCIsICJkZWZhdWx0LWdyb3VwIiwgdGVzdFdlYlZpZXdHcm91cERlZmF1
bHQpOworICAgIFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlld0dyb3VwIiwgIm5ldy1ncm91cCIsIHRl
c3RXZWJWaWV3R3JvdXBOZXdHcm91cCk7CisgICAgVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3Iiwg
Im5ldy13aXRoLWdyb3VwIiwgdGVzdFdlYlZpZXdOZXdXaXRoR3JvdXApOworICAgIFRlc3Q6OmFk
ZCgiV2ViS2l0V2ViVmlld0dyb3VwIiwgInNldHRpbmdzIiwgdGVzdFdlYlZpZXdHcm91cFNldHRp
bmdzKTsKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3R3JvdXAiLCAiaW5qZWN0
ZWQtc3R5bGUtc2hlZXQiLCB0ZXN0V2ViVmlld0dyb3VwSW5qZWN0ZWRTdHlsZVNoZWV0KTsKK30K
Kwordm9pZCBhZnRlckFsbCgpCit7CisgICAgZGVsZXRlIGtTZXJ2ZXI7Cit9CmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYlZpZXdFZGl0b3Iu
Y3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJWaWV3RWRp
dG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzMxNWRiCi0tLSAv
ZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RX
ZWJWaWV3RWRpdG9yLmNwcApAQCAtMCwwICsxLDIwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
LDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlZpZXdU
ZXN0LmgiCisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCitjbGFzcyBFZGl0b3JU
ZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJ
WFRVUkUoRWRpdG9yVGVzdCk7CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGtDbGlw
Ym9hcmRXYWl0VGltZW91dCA9IDUwOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQga0Ns
aXBib2FyZFdhaXRNYXhUcmllcyA9IDI7CisKKyAgICBFZGl0b3JUZXN0KCkKKyAgICAgICAgOiBt
X2NsaXBib2FyZChndGtfY2xpcGJvYXJkX2dldChHREtfU0VMRUNUSU9OX0NMSVBCT0FSRCkpCisg
ICAgICAgICwgbV9jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQoZmFsc2UpCisgICAgICAgICwgbV90
cmllc0NvdW50KDApCisgICAgeworICAgICAgICBndGtfY2xpcGJvYXJkX2NsZWFyKG1fY2xpcGJv
YXJkKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBjYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmRS
ZWFkeUNhbGxiYWNrKEdPYmplY3QqLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgRWRpdG9yVGVzdCog
dGVzdCkKKyAgICB7CisgICAgICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICAgICAgdGVz
dC0+bV9jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQgPSB3ZWJraXRfd2ViX3ZpZXdfY2FuX2V4ZWN1
dGVfZWRpdGluZ19jb21tYW5kX2ZpbmlzaCh0ZXN0LT5tX3dlYlZpZXcsIHJlc3VsdCwgJmVycm9y
Lm91dFB0cigpKTsKKyAgICAgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKyAgICAgICAgZ19t
YWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBib29sIGNhbkV4
ZWN1dGVFZGl0aW5nQ29tbWFuZChjb25zdCBjaGFyKiBjb21tYW5kKQorICAgIHsKKyAgICAgICAg
bV9jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQgPSBmYWxzZTsKKyAgICAgICAgd2Via2l0X3dlYl92
aWV3X2Nhbl9leGVjdXRlX2VkaXRpbmdfY29tbWFuZChtX3dlYlZpZXcsIGNvbW1hbmQsIDAsIHJl
aW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4oY2FuRXhlY3V0ZUVkaXRpbmdDb21t
YW5kUmVhZHlDYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWlu
TG9vcCk7CisgICAgICAgIHJldHVybiBtX2NhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZDsKKyAgICB9
CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gd2FpdEZvckNsaXBib2FyZFRleHQoRWRpdG9yVGVzdCog
dGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPm1fdHJpZXNDb3VudCsrOworICAgICAgICBpZiAo
Z3RrX2NsaXBib2FyZF93YWl0X2lzX3RleHRfYXZhaWxhYmxlKHRlc3QtPm1fY2xpcGJvYXJkKSB8
fCB0ZXN0LT5tX3RyaWVzQ291bnQgPiBrQ2xpcGJvYXJkV2FpdE1heFRyaWVzKSB7CisgICAgICAg
ICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworICAgICAgICAgICAgcmV0
dXJuIEZBTFNFOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisg
ICAgdm9pZCBjb3B5Q2xpcGJvYXJkKCkKKyAgICB7CisgICAgICAgIHdlYmtpdF93ZWJfdmlld19l
eGVjdXRlX2VkaXRpbmdfY29tbWFuZChtX3dlYlZpZXcsIFdFQktJVF9FRElUSU5HX0NPTU1BTkRf
Q09QWSk7CisgICAgICAgIC8vIFRoZXJlJ3Mgbm8gd2F5IHRvIGtub3cgd2hlbiB0aGUgc2VsZWN0
aW9uIGhhcyBiZWVuIGNvcGllZCB0bworICAgICAgICAvLyB0aGUgY2xpcGJvYXJkLCBzbyB1c2Ug
YSB0aW1lb3V0IHNvdXJjZSB0byBxdWVyeSB0aGUgY2xpcGJvYXJkLgorICAgICAgICBtX3RyaWVz
Q291bnQgPSAwOworICAgICAgICBnX3RpbWVvdXRfYWRkKGtDbGlwYm9hcmRXYWl0VGltZW91dCwg
cmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4od2FpdEZvckNsaXBib2FyZFRleHQpLCB0aGlz
KTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIEd0
a0NsaXBib2FyZCogbV9jbGlwYm9hcmQ7CisgICAgYm9vbCBtX2NhbkV4ZWN1dGVFZGl0aW5nQ29t
bWFuZDsKKyAgICBzaXplX3QgbV90cmllc0NvdW50OworfTsKKworc3RhdGljIHZvaWQgdGVzdFdl
YlZpZXdFZGl0b3JDdXRDb3B5UGFzdGVOb25FZGl0YWJsZShFZGl0b3JUZXN0KiB0ZXN0LCBnY29u
c3Rwb2ludGVyKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzZWxlY3RlZFNwYW5IVE1MID0g
IjxodG1sPjxib2R5IGNvbnRlbnRFZGl0YWJsZT1cImZhbHNlXCI+IgorICAgICAgICAiPHNwYW4g
aWQ9XCJtYWluc3BhblwiPkFsbCB3b3JrIGFuZCBubyBwbGF5IDxzcGFuIGlkPVwic3Vic3Bhblwi
Pm1ha2UgSmFjayBhIGR1bGw8L3NwYW4+IGJveS48L3NwYW4+IgorICAgICAgICAiPHNjcmlwdD5k
b2N1bWVudC5nZXRTZWxlY3Rpb24oKS5jb2xsYXBzZSgpO1xuIgorICAgICAgICAiZG9jdW1lbnQu
Z2V0U2VsZWN0aW9uKCkuc2VsZWN0QWxsQ2hpbGRyZW4oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J3N1YnNwYW4nKSk7XG4iCisgICAgICAgICI8L3NjcmlwdD48L2JvZHk+PC9odG1sPiI7CisKKyAg
ICAvLyBOb3RoaW5nIGxvYWRlZCB5ZXQuCisgICAgZ19hc3NlcnQoIXRlc3QtPmNhbkV4ZWN1dGVF
ZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElOR19DT01NQU5EX0NVVCkpOworICAgIGdfYXNzZXJ0
KCF0ZXN0LT5jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQoV0VCS0lUX0VESVRJTkdfQ09NTUFORF9D
T1BZKSk7CisgICAgZ19hc3NlcnQoIXRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJL
SVRfRURJVElOR19DT01NQU5EX1BBU1RFKSk7CisKKyAgICB0ZXN0LT5sb2FkSHRtbChzZWxlY3Rl
ZFNwYW5IVE1MLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAg
IGdfYXNzZXJ0KHRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElOR19D
T01NQU5EX0NPUFkpKTsKKyAgICAvLyBJdCdzIG5vdCBwb3NzaWJsZSB0byBjdXQgYW5kIHBhc3Rl
IHdoZW4gY29udGVudCBpcyBub3QgZWRpdGFibGUKKyAgICAvLyBldmVuIGlmIHRoZXJlJ3MgYSBz
ZWxlY3Rpb24uCisgICAgZ19hc3NlcnQoIXRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChX
RUJLSVRfRURJVElOR19DT01NQU5EX0NVVCkpOworICAgIGdfYXNzZXJ0KCF0ZXN0LT5jYW5FeGVj
dXRlRWRpdGluZ0NvbW1hbmQoV0VCS0lUX0VESVRJTkdfQ09NTUFORF9QQVNURSkpOworCisgICAg
dGVzdC0+Y29weUNsaXBib2FyZCgpOworICAgIEdPd25QdHI8Y2hhcj4gY2xpcGJvYXJkVGV4dChn
dGtfY2xpcGJvYXJkX3dhaXRfZm9yX3RleHQodGVzdC0+bV9jbGlwYm9hcmQpKTsKKyAgICBnX2Fz
c2VydF9jbXBzdHIoY2xpcGJvYXJkVGV4dC5nZXQoKSwgPT0sICJtYWtlIEphY2sgYSBkdWxsIik7
Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3RWRpdG9yQ3V0Q29weVBhc3RlRWRpdGFibGUo
RWRpdG9yVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hh
ciogc2VsZWN0ZWRTcGFuSFRNTCA9ICI8aHRtbD48Ym9keSBjb250ZW50RWRpdGFibGU9XCJ0cnVl
XCI+IgorICAgICAgICAiPHNwYW4gaWQ9XCJtYWluc3BhblwiPkFsbCB3b3JrIGFuZCBubyBwbGF5
IDxzcGFuPm1ha2UgSmFjayBhIGR1bGw8L3NwYW4+IGJveS48L3NwYW4+IgorICAgICAgICAiPHNj
cmlwdD5kb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5jb2xsYXBzZSgpO1xuIgorICAgICAgICAiZG9j
dW1lbnQuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0QWxsQ2hpbGRyZW4oZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ21haW5zcGFuJykpO1xuIgorICAgICAgICAiPC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4i
OworCisgICAgLy8gTm90aGluZyBsb2FkZWQgeWV0LgorICAgIGdfYXNzZXJ0KCF0ZXN0LT5jYW5F
eGVjdXRlRWRpdGluZ0NvbW1hbmQoV0VCS0lUX0VESVRJTkdfQ09NTUFORF9DVVQpKTsKKyAgICBn
X2Fzc2VydCghdGVzdC0+Y2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kKFdFQktJVF9FRElUSU5HX0NP
TU1BTkRfQ09QWSkpOworICAgIGdfYXNzZXJ0KCF0ZXN0LT5jYW5FeGVjdXRlRWRpdGluZ0NvbW1h
bmQoV0VCS0lUX0VESVRJTkdfQ09NTUFORF9QQVNURSkpOworCisgICAgdGVzdC0+bG9hZEh0bWwo
c2VsZWN0ZWRTcGFuSFRNTCwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7
CisKKyAgICAvLyBUaGVyZSdzIGEgc2VsZWN0aW9uLgorICAgIGdfYXNzZXJ0KHRlc3QtPmNhbkV4
ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElOR19DT01NQU5EX0NVVCkpOworICAgIGdf
YXNzZXJ0KHRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElOR19DT01N
QU5EX0NPUFkpKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQo
V0VCS0lUX0VESVRJTkdfQ09NTUFORF9QQVNURSkpOworCisgICAgdGVzdC0+Y29weUNsaXBib2Fy
ZCgpOworICAgIEdPd25QdHI8Y2hhcj4gY2xpcGJvYXJkVGV4dChndGtfY2xpcGJvYXJkX3dhaXRf
Zm9yX3RleHQodGVzdC0+bV9jbGlwYm9hcmQpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoY2xpcGJv
YXJkVGV4dC5nZXQoKSwgPT0sICJBbGwgd29yayBhbmQgbm8gcGxheSBtYWtlIEphY2sgYSBkdWxs
IGJveS4iKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdFZGl0b3JTZWxlY3RBbGxOb25F
ZGl0YWJsZShFZGl0b3JUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBzZWxlY3RlZFNwYW5IVE1MID0gIjxodG1sPjxib2R5IGNvbnRlbnRFZGl0YWJs
ZT1cImZhbHNlXCI+IgorICAgICAgICAiPHNwYW4gaWQ9XCJtYWluc3BhblwiPkFsbCB3b3JrIGFu
ZCBubyBwbGF5IDxzcGFuIGlkPVwic3Vic3BhblwiPm1ha2UgSmFjayBhIGR1bGw8L3NwYW4+IGJv
eS48L3NwYW4+IgorICAgICAgICAiPHNjcmlwdD5kb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5jb2xs
YXBzZSgpO1xuIgorICAgICAgICAiZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0QWxsQ2hp
bGRyZW4oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1YnNwYW4nKSk7XG4iCisgICAgICAgICI8
L3NjcmlwdD48L2JvZHk+PC9odG1sPiI7CisKKyAgICBnX2Fzc2VydCh0ZXN0LT5jYW5FeGVjdXRl
RWRpdGluZ0NvbW1hbmQoV0VCS0lUX0VESVRJTkdfQ09NTUFORF9TRUxFQ1RfQUxMKSk7CisKKyAg
ICB0ZXN0LT5sb2FkSHRtbChzZWxlY3RlZFNwYW5IVE1MLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50
aWxMb2FkRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5n
Q29tbWFuZChXRUJLSVRfRURJVElOR19DT01NQU5EX1NFTEVDVF9BTEwpKTsKKworICAgIHRlc3Qt
PmNvcHlDbGlwYm9hcmQoKTsKKyAgICBHT3duUHRyPGNoYXI+IGNsaXBib2FyZFRleHQoZ3RrX2Ns
aXBib2FyZF93YWl0X2Zvcl90ZXh0KHRlc3QtPm1fY2xpcGJvYXJkKSk7CisKKyAgICAvLyBJbml0
aWFsbHkgb25seSB0aGUgc3Vic3BhbiBpcyBzZWxlY3RlZC4KKyAgICBnX2Fzc2VydF9jbXBzdHIo
Y2xpcGJvYXJkVGV4dC5nZXQoKSwgPT0sICJtYWtlIEphY2sgYSBkdWxsIik7CisKKyAgICB3ZWJr
aXRfd2ViX3ZpZXdfZXhlY3V0ZV9lZGl0aW5nX2NvbW1hbmQodGVzdC0+bV93ZWJWaWV3LCBXRUJL
SVRfRURJVElOR19DT01NQU5EX1NFTEVDVF9BTEwpOworICAgIHRlc3QtPmNvcHlDbGlwYm9hcmQo
KTsKKyAgICBjbGlwYm9hcmRUZXh0LnNldChndGtfY2xpcGJvYXJkX3dhaXRfZm9yX3RleHQodGVz
dC0+bV9jbGlwYm9hcmQpKTsKKworICAgIC8vIFRoZSBtYWluc3BhbiBzaG91bGQgYmUgc2VsZWN0
ZWQgYWZ0ZXIgY2FsbGluZyBTRUxFQ1RfQUxMLgorICAgIGdfYXNzZXJ0X2NtcHN0cihjbGlwYm9h
cmRUZXh0LmdldCgpLCA9PSwgIkFsbCB3b3JrIGFuZCBubyBwbGF5IG1ha2UgSmFjayBhIGR1bGwg
Ym95LiIpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0VkaXRvclNlbGVjdEFsbEVkaXRh
YmxlKEVkaXRvclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgc3RhdGljIGNvbnN0
IGNoYXIqIHNlbGVjdGVkU3BhbkhUTUwgPSAiPGh0bWw+PGJvZHkgY29udGVudEVkaXRhYmxlPVwi
dHJ1ZVwiPiIKKyAgICAgICAgIjxzcGFuIGlkPVwibWFpbnNwYW5cIj5BbGwgd29yayBhbmQgbm8g
cGxheSA8c3BhbiBpZD1cInN1YnNwYW5cIj5tYWtlIEphY2sgYSBkdWxsPC9zcGFuPiBib3kuPC9z
cGFuPiIKKyAgICAgICAgIjxzY3JpcHQ+ZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkuY29sbGFwc2Uo
KTtcbiIKKyAgICAgICAgImRvY3VtZW50LmdldFNlbGVjdGlvbigpLnNlbGVjdEFsbENoaWxkcmVu
KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdWJzcGFuJykpO1xuIgorICAgICAgICAiPC9zY3Jp
cHQ+PC9ib2R5PjwvaHRtbD4iOworCisgICAgZ19hc3NlcnQodGVzdC0+Y2FuRXhlY3V0ZUVkaXRp
bmdDb21tYW5kKFdFQktJVF9FRElUSU5HX0NPTU1BTkRfU0VMRUNUX0FMTCkpOworCisgICAgdGVz
dC0+bG9hZEh0bWwoc2VsZWN0ZWRTcGFuSFRNTCwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9h
ZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCh0ZXN0LT5jYW5FeGVjdXRlRWRpdGluZ0NvbW1h
bmQoV0VCS0lUX0VESVRJTkdfQ09NTUFORF9TRUxFQ1RfQUxMKSk7CisKKyAgICB0ZXN0LT5jb3B5
Q2xpcGJvYXJkKCk7CisgICAgR093blB0cjxjaGFyPiBjbGlwYm9hcmRUZXh0KGd0a19jbGlwYm9h
cmRfd2FpdF9mb3JfdGV4dCh0ZXN0LT5tX2NsaXBib2FyZCkpOworCisgICAgLy8gSW5pdGlhbGx5
IG9ubHkgdGhlIHN1YnNwYW4gaXMgc2VsZWN0ZWQuCisgICAgZ19hc3NlcnRfY21wc3RyKGNsaXBi
b2FyZFRleHQuZ2V0KCksID09LCAibWFrZSBKYWNrIGEgZHVsbCIpOworCisgICAgd2Via2l0X3dl
Yl92aWV3X2V4ZWN1dGVfZWRpdGluZ19jb21tYW5kKHRlc3QtPm1fd2ViVmlldywgV0VCS0lUX0VE
SVRJTkdfQ09NTUFORF9TRUxFQ1RfQUxMKTsKKyAgICB0ZXN0LT5jb3B5Q2xpcGJvYXJkKCk7Cisg
ICAgY2xpcGJvYXJkVGV4dC5zZXQoZ3RrX2NsaXBib2FyZF93YWl0X2Zvcl90ZXh0KHRlc3QtPm1f
Y2xpcGJvYXJkKSk7CisKKyAgICAvLyBUaGUgbWFpbnNwYW4gc2hvdWxkIGJlIHNlbGVjdGVkIGFm
dGVyIGNhbGxpbmcgU0VMRUNUX0FMTC4KKyAgICBnX2Fzc2VydF9jbXBzdHIoY2xpcGJvYXJkVGV4
dC5nZXQoKSwgPT0sICJBbGwgd29yayBhbmQgbm8gcGxheSBtYWtlIEphY2sgYSBkdWxsIGJveS4i
KTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQoreworICAgIEVkaXRvclRlc3Q6OmFkZCgiV2ViS2l0
V2ViVmlldyIsICJjdXQtY29weS1wYXN0ZS9ub24tZWRpdGFibGUiLCB0ZXN0V2ViVmlld0VkaXRv
ckN1dENvcHlQYXN0ZU5vbkVkaXRhYmxlKTsKKyAgICBFZGl0b3JUZXN0OjphZGQoIldlYktpdFdl
YlZpZXciLCAiY3V0LWNvcHktcGFzdGUvZWRpdGFibGUiLCB0ZXN0V2ViVmlld0VkaXRvckN1dENv
cHlQYXN0ZUVkaXRhYmxlKTsKKyAgICBFZGl0b3JUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAi
c2VsZWN0LWFsbC9ub24tZWRpdGFibGUiLCB0ZXN0V2ViVmlld0VkaXRvclNlbGVjdEFsbE5vbkVk
aXRhYmxlKTsKKyAgICBFZGl0b3JUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAic2VsZWN0LWFs
bC9lZGl0YWJsZSIsIHRlc3RXZWJWaWV3RWRpdG9yU2VsZWN0QWxsRWRpdGFibGUpOworfQorCit2
b2lkIGFmdGVyQWxsKCkKK3sKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Mkd0ay9XZWJFeHRlbnNpb25UZXN0LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Mkd0ay9XZWJFeHRlbnNpb25UZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4wMjEyZTJiCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1dlYkV4dGVuc2lvblRlc3QuY3BwCkBAIC0wLDAgKzEs
MjY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dFJlZi5oPgorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8Z2lvL2dpby5o
PgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHdl
YmtpdDIvd2Via2l0LXdlYi1leHRlbnNpb24uaD4KKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNs
dWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0
ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworc3RhdGljIGNvbnN0IGNoYXIg
aW50cm9zcGVjdGlvblhNTFtdID0KKyAgICAiPG5vZGU+IgorICAgICIgPGludGVyZmFjZSBuYW1l
PSdvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0Jz4iCisgICAgIiAgPG1ldGhvZCBuYW1l
PSdHZXRUaXRsZSc+IgorICAgICIgICA8YXJnIHR5cGU9J3QnIG5hbWU9J3BhZ2VJRCcgZGlyZWN0
aW9uPSdpbicvPiIKKyAgICAiICAgPGFyZyB0eXBlPSdzJyBuYW1lPSd0aXRsZScgZGlyZWN0aW9u
PSdvdXQnLz4iCisgICAgIiAgPC9tZXRob2Q+IgorICAgICIgIDxtZXRob2QgbmFtZT0nQWJvcnRQ
cm9jZXNzJz4iCisgICAgIiAgPC9tZXRob2Q+IgorICAgICIgIDxtZXRob2QgbmFtZT0nUnVuSmF2
YVNjcmlwdEluSXNvbGF0ZWRXb3JsZCc+IgorICAgICIgICA8YXJnIHR5cGU9J3QnIG5hbWU9J3Bh
Z2VJRCcgZGlyZWN0aW9uPSdpbicvPiIKKyAgICAiICAgPGFyZyB0eXBlPSdzJyBuYW1lPSdzY3Jp
cHQnIGRpcmVjdGlvbj0naW4nLz4iCisgICAgIiAgPC9tZXRob2Q+IgorICAgICIgIDxzaWduYWwg
bmFtZT0nRG9jdW1lbnRMb2FkZWQnLz4iCisgICAgIiAgPHNpZ25hbCBuYW1lPSdVUklDaGFuZ2Vk
Jz4iCisgICAgIiAgIDxhcmcgdHlwZT0ncycgbmFtZT0ndXJpJyBkaXJlY3Rpb249J291dCcvPiIK
KyAgICAiICA8L3NpZ25hbD4iCisgICAgIiA8L2ludGVyZmFjZT4iCisgICAgIjwvbm9kZT4iOwor
Cit0eXBlZGVmIGVudW0geworICAgIERvY3VtZW50TG9hZGVkU2lnbmFsLAorICAgIFVSSUNoYW5n
ZWRTaWduYWwsCit9IERlbGF5ZWRTaWduYWxUeXBlOworCitzdHJ1Y3QgRGVsYXllZFNpZ25hbCB7
CisgICAgRGVsYXllZFNpZ25hbChEZWxheWVkU2lnbmFsVHlwZSB0eXBlKQorICAgICAgICA6IHR5
cGUodHlwZSkKKyAgICB7CisgICAgfQorCisgICAgRGVsYXllZFNpZ25hbChEZWxheWVkU2lnbmFs
VHlwZSB0eXBlLCBjb25zdCBjaGFyKiB1cmkpCisgICAgICAgIDogdHlwZSh0eXBlKQorICAgICAg
ICAsIHVyaSh1cmkpCisgICAgeworICAgIH0KKworICAgIERlbGF5ZWRTaWduYWxUeXBlIHR5cGU7
CisgICAgQ1N0cmluZyB1cmk7Cit9OworCitEZXF1ZTxPd25QdHI8RGVsYXllZFNpZ25hbD4+IGRl
bGF5ZWRTaWduYWxzUXVldWU7CisKK3N0YXRpYyB2b2lkIGVtaXREb2N1bWVudExvYWRlZChHREJ1
c0Nvbm5lY3Rpb24qIGNvbm5lY3Rpb24pCit7CisgICAgYm9vbCBvayA9IGdfZGJ1c19jb25uZWN0
aW9uX2VtaXRfc2lnbmFsKAorICAgICAgICBjb25uZWN0aW9uLAorICAgICAgICAwLAorICAgICAg
ICAiL29yZy93ZWJraXQvZ3RrL1dlYkV4dGVuc2lvblRlc3QiLAorICAgICAgICAib3JnLndlYmtp
dC5ndGsuV2ViRXh0ZW5zaW9uVGVzdCIsCisgICAgICAgICJEb2N1bWVudExvYWRlZCIsCisgICAg
ICAgIDAsCisgICAgICAgIDApOworICAgIGdfYXNzZXJ0KG9rKTsKK30KKworc3RhdGljIHZvaWQg
ZG9jdW1lbnRMb2FkZWRDYWxsYmFjayhXZWJLaXRXZWJQYWdlKiwgV2ViS2l0V2ViRXh0ZW5zaW9u
KiBleHRlbnNpb24pCit7CisgICAgZ3BvaW50ZXIgZGF0YSA9IGdfb2JqZWN0X2dldF9kYXRhKEdf
T0JKRUNUKGV4dGVuc2lvbiksICJkYnVzLWNvbm5lY3Rpb24iKTsKKyAgICBpZiAoZGF0YSkKKyAg
ICAgICAgZW1pdERvY3VtZW50TG9hZGVkKEdfREJVU19DT05ORUNUSU9OKGRhdGEpKTsKKyAgICBl
bHNlCisgICAgICAgIGRlbGF5ZWRTaWduYWxzUXVldWUuYXBwZW5kKGFkb3B0UHRyKG5ldyBEZWxh
eWVkU2lnbmFsKERvY3VtZW50TG9hZGVkU2lnbmFsKSkpOworfQorCitzdGF0aWMgdm9pZCBlbWl0
VVJJQ2hhbmdlZChHREJ1c0Nvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIGNvbnN0IGNoYXIqIHVyaSkK
K3sKKyAgICBib29sIG9rID0gZ19kYnVzX2Nvbm5lY3Rpb25fZW1pdF9zaWduYWwoCisgICAgICAg
IGNvbm5lY3Rpb24sCisgICAgICAgIDAsCisgICAgICAgICIvb3JnL3dlYmtpdC9ndGsvV2ViRXh0
ZW5zaW9uVGVzdCIsCisgICAgICAgICJvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwK
KyAgICAgICAgIlVSSUNoYW5nZWQiLAorICAgICAgICBnX3ZhcmlhbnRfbmV3KCIocykiLCB1cmkp
LAorICAgICAgICAwKTsKKyAgICBnX2Fzc2VydChvayk7Cit9CisKK3N0YXRpYyB2b2lkIHVyaUNo
YW5nZWRDYWxsYmFjayhXZWJLaXRXZWJQYWdlKiB3ZWJQYWdlLCBHUGFyYW1TcGVjKiBwc3BlYywg
V2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24pCit7CisgICAgZ3BvaW50ZXIgZGF0YSA9IGdf
b2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKGV4dGVuc2lvbiksICJkYnVzLWNvbm5lY3Rpb24iKTsK
KyAgICBpZiAoZGF0YSkKKyAgICAgICAgZW1pdFVSSUNoYW5nZWQoR19EQlVTX0NPTk5FQ1RJT04o
ZGF0YSksIHdlYmtpdF93ZWJfcGFnZV9nZXRfdXJpKHdlYlBhZ2UpKTsKKyAgICBlbHNlCisgICAg
ICAgIGRlbGF5ZWRTaWduYWxzUXVldWUuYXBwZW5kKGFkb3B0UHRyKG5ldyBEZWxheWVkU2lnbmFs
KFVSSUNoYW5nZWRTaWduYWwsIHdlYmtpdF93ZWJfcGFnZV9nZXRfdXJpKHdlYlBhZ2UpKSkpOwor
fQorCitzdGF0aWMgZ2Jvb2xlYW4gc2VuZFJlcXVlc3RDYWxsYmFjayhXZWJLaXRXZWJQYWdlKiwg
V2ViS2l0VVJJUmVxdWVzdCogcmVxdWVzdCwgV2ViS2l0VVJJUmVzcG9uc2UqLCBncG9pbnRlcikK
K3sKKyAgICBjb25zdCBjaGFyKiByZXF1ZXN0VVJJID0gd2Via2l0X3VyaV9yZXF1ZXN0X2dldF91
cmkocmVxdWVzdCk7CisgICAgZ19hc3NlcnQocmVxdWVzdFVSSSk7CisKKyAgICBpZiAoY29uc3Qg
Y2hhciogc3VmZml4ID0gZ19zdHJyc3RyKHJlcXVlc3RVUkksICIvcmVtb3ZlLXRoaXMvamF2YXNj
cmlwdC5qcyIpKSB7CisgICAgICAgIEdPd25QdHI8Y2hhcj4gcHJlZml4KGdfc3RybmR1cChyZXF1
ZXN0VVJJLCBzdHJsZW4ocmVxdWVzdFVSSSkgLSBzdHJsZW4oc3VmZml4KSkpOworICAgICAgICBH
T3duUHRyPGNoYXI+IG5ld1VSSShnX3N0cmR1cF9wcmludGYoIiVzL2phdmFzY3JpcHQuanMiLCBw
cmVmaXguZ2V0KCkpKTsKKyAgICAgICAgd2Via2l0X3VyaV9yZXF1ZXN0X3NldF91cmkocmVxdWVz
dCwgbmV3VVJJLmdldCgpKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2hhc19zdWZmaXgocmVxdWVz
dFVSSSwgIi9hZGQtZG8tbm90LXRyYWNrLWhlYWRlciIpKSB7CisgICAgICAgIFNvdXBNZXNzYWdl
SGVhZGVycyogaGVhZGVycyA9IHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfaHR0cF9oZWFkZXJzKHJl
cXVlc3QpOworICAgICAgICBnX2Fzc2VydChoZWFkZXJzKTsKKyAgICAgICAgc291cF9tZXNzYWdl
X2hlYWRlcnNfYXBwZW5kKGhlYWRlcnMsICJETlQiLCAiMSIpOworICAgIH0gZWxzZSBpZiAoZ19z
dHJfaGFzX3N1ZmZpeChyZXF1ZXN0VVJJLCAiL2NhbmNlbC10aGlzLmpzIikpCisgICAgICAgIHJl
dHVybiBUUlVFOworCisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZCBwYWdlQ3Jl
YXRlZENhbGxiYWNrKFdlYktpdFdlYkV4dGVuc2lvbiogZXh0ZW5zaW9uLCBXZWJLaXRXZWJQYWdl
KiB3ZWJQYWdlLCBncG9pbnRlcikKK3sKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlBhZ2UsICJk
b2N1bWVudC1sb2FkZWQiLCBHX0NBTExCQUNLKGRvY3VtZW50TG9hZGVkQ2FsbGJhY2spLCBleHRl
bnNpb24pOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViUGFnZSwgIm5vdGlmeTo6dXJpIiwgR19D
QUxMQkFDSyh1cmlDaGFuZ2VkQ2FsbGJhY2spLCBleHRlbnNpb24pOworICAgIGdfc2lnbmFsX2Nv
bm5lY3Qod2ViUGFnZSwgInNlbmQtcmVxdWVzdCIsIEdfQ0FMTEJBQ0soc2VuZFJlcXVlc3RDYWxs
YmFjayksIDApOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBlY2hvQ2FsbGJhY2soSlNDb250ZXh0
UmVmIGpzQ29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmLCBzaXplX3QgYXJndW1lbnRD
b3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiopCit7CisgICAg
aWYgKGFyZ3VtZW50Q291bnQgPD0gMCkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGpzQ29udGV4dCk7CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gc3RyaW5nKEFk
b3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGpzQ29udGV4dCwgYXJndW1lbnRzWzBdLCAwKSk7Cisg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlU3RyaW5nKGpzQ29udGV4dCwgc3RyaW5nLmdldCgpKTsKK30K
Kworc3RhdGljIHZvaWQgd2luZG93T2JqZWN0Q2xlYXJlZChXZWJLaXRTY3JpcHRXb3JsZCogd29y
bGQsIFdlYktpdFdlYlBhZ2UqIHBhZ2UsIFdlYktpdEZyYW1lKiBmcmFtZSwgZ3BvaW50ZXIpCit7
CisgICAgSlNHbG9iYWxDb250ZXh0UmVmIGpzQ29udGV4dCA9IHdlYmtpdF9mcmFtZV9nZXRfamF2
YXNjcmlwdF9jb250ZXh0X2Zvcl9zY3JpcHRfd29ybGQoZnJhbWUsIHdvcmxkKTsKKyAgICBnX2Fz
c2VydChqc0NvbnRleHQpOworICAgIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCA9IEpTQ29udGV4
dEdldEdsb2JhbE9iamVjdChqc0NvbnRleHQpOworICAgIGdfYXNzZXJ0KGdsb2JhbE9iamVjdCk7
CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gZnVuY3Rpb25OYW1lKEFkb3B0LCBKU1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZWNobyIpKTsKKyAgICBKU09iamVjdFJlZiBmdW5j
dGlvbiA9IEpTT2JqZWN0TWFrZUZ1bmN0aW9uV2l0aENhbGxiYWNrKGpzQ29udGV4dCwgZnVuY3Rp
b25OYW1lLmdldCgpLCBlY2hvQ2FsbGJhY2spOworICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoanND
b250ZXh0LCBnbG9iYWxPYmplY3QsIGZ1bmN0aW9uTmFtZS5nZXQoKSwgZnVuY3Rpb24sIGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHks
IDApOworfQorCitzdGF0aWMgV2ViS2l0V2ViUGFnZSogZ2V0V2ViUGFnZShXZWJLaXRXZWJFeHRl
bnNpb24qIGV4dGVuc2lvbiwgdWludDY0X3QgcGFnZUlELCBHREJ1c01ldGhvZEludm9jYXRpb24q
IGludm9jYXRpb24pCit7CisgICAgV2ViS2l0V2ViUGFnZSogcGFnZSA9IHdlYmtpdF93ZWJfZXh0
ZW5zaW9uX2dldF9wYWdlKGV4dGVuc2lvbiwgcGFnZUlEKTsKKyAgICBpZiAoIXBhZ2UpIHsKKyAg
ICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVybl9lcnJvcigKKyAgICAgICAgICAg
IGludm9jYXRpb24sIEdfREJVU19FUlJPUiwgR19EQlVTX0VSUk9SX0lOVkFMSURfQVJHUywKKyAg
ICAgICAgICAgICJJbnZhbGlkIHBhZ2UgSUQ6ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIHBhZ2VJRCk7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0
X3dlYl9wYWdlX2dldF9pZChwYWdlKSwgPT0sIHBhZ2VJRCk7CisgICAgcmV0dXJuIHBhZ2U7Cit9
CisKK3N0YXRpYyB2b2lkIG1ldGhvZENhbGxDYWxsYmFjayhHREJ1c0Nvbm5lY3Rpb24qIGNvbm5l
Y3Rpb24sIGNvbnN0IGNoYXIqIHNlbmRlciwgY29uc3QgY2hhciogb2JqZWN0UGF0aCwgY29uc3Qg
Y2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogbWV0aG9kTmFtZSwgR1ZhcmlhbnQqIHBh
cmFtZXRlcnMsIEdEQnVzTWV0aG9kSW52b2NhdGlvbiogaW52b2NhdGlvbiwgZ3BvaW50ZXIgdXNl
ckRhdGEpCit7CisgICAgaWYgKGdfc3RyY21wMChpbnRlcmZhY2VOYW1lLCAib3JnLndlYmtpdC5n
dGsuV2ViRXh0ZW5zaW9uVGVzdCIpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWdfc3Ry
Y21wMChtZXRob2ROYW1lLCAiR2V0VGl0bGUiKSkgeworICAgICAgICB1aW50NjRfdCBwYWdlSUQ7
CisgICAgICAgIGdfdmFyaWFudF9nZXQocGFyYW1ldGVycywgIih0KSIsICZwYWdlSUQpOworICAg
ICAgICBXZWJLaXRXZWJQYWdlKiBwYWdlID0gZ2V0V2ViUGFnZShXRUJLSVRfV0VCX0VYVEVOU0lP
Tih1c2VyRGF0YSksIHBhZ2VJRCwgaW52b2NhdGlvbik7CisgICAgICAgIGlmICghcGFnZSkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQg
PSB3ZWJraXRfd2ViX3BhZ2VfZ2V0X2RvbV9kb2N1bWVudChwYWdlKTsKKyAgICAgICAgR093blB0
cjxjaGFyPiB0aXRsZSh3ZWJraXRfZG9tX2RvY3VtZW50X2dldF90aXRsZShkb2N1bWVudCkpOwor
ICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9jYXRpb25fcmV0dXJuX3ZhbHVlKGludm9jYXRpb24s
IGdfdmFyaWFudF9uZXcoIihzKSIsIHRpdGxlLmdldCgpKSk7CisgICAgfSBlbHNlIGlmICghZ19z
dHJjbXAwKG1ldGhvZE5hbWUsICJSdW5KYXZhU2NyaXB0SW5Jc29sYXRlZFdvcmxkIikpIHsKKyAg
ICAgICAgdWludDY0X3QgcGFnZUlEOworICAgICAgICBjb25zdCBjaGFyKiBzY3JpcHQ7CisgICAg
ICAgIGdfdmFyaWFudF9nZXQocGFyYW1ldGVycywgIih0JnMpIiwgJnBhZ2VJRCwgJnNjcmlwdCk7
CisgICAgICAgIFdlYktpdFdlYlBhZ2UqIHBhZ2UgPSBnZXRXZWJQYWdlKFdFQktJVF9XRUJfRVhU
RU5TSU9OKHVzZXJEYXRhKSwgcGFnZUlELCBpbnZvY2F0aW9uKTsKKyAgICAgICAgaWYgKCFwYWdl
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEdSZWZQdHI8V2ViS2l0U2NyaXB0V29y
bGQ+IHdvcmxkID0gYWRvcHRHUmVmKHdlYmtpdF9zY3JpcHRfd29ybGRfbmV3KCkpOworICAgICAg
ICBnX2Fzc2VydCh3ZWJraXRfc2NyaXB0X3dvcmxkX2dldF9kZWZhdWx0KCkgIT0gd29ybGQuZ2V0
KCkpOworICAgICAgICBXZWJLaXRGcmFtZSogZnJhbWUgPSB3ZWJraXRfd2ViX3BhZ2VfZ2V0X21h
aW5fZnJhbWUocGFnZSk7CisgICAgICAgIEpTR2xvYmFsQ29udGV4dFJlZiBqc0NvbnRleHQgPSB3
ZWJraXRfZnJhbWVfZ2V0X2phdmFzY3JpcHRfY29udGV4dF9mb3Jfc2NyaXB0X3dvcmxkKGZyYW1l
LCB3b3JsZC5nZXQoKSk7CisgICAgICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBqc1Njcmlw
dChBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc2NyaXB0KSk7CisgICAgICAg
IEpTRXZhbHVhdGVTY3JpcHQoanNDb250ZXh0LCBqc1NjcmlwdC5nZXQoKSwgMCwgMCwgMCwgMCk7
CisgICAgICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUoaW52b2NhdGlv
biwgMCk7CisgICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJBYm9ydFByb2Nl
c3MiKSkgeworICAgICAgICBhYm9ydCgpOworICAgIH0KK30KKworc3RhdGljIGNvbnN0IEdEQnVz
SW50ZXJmYWNlVlRhYmxlIGludGVyZmFjZVZpcnR1YWxUYWJsZSA9IHsKKyAgICBtZXRob2RDYWxs
Q2FsbGJhY2ssIDAsIDAsIHsgMCwgfQorfTsKKworc3RhdGljIHZvaWQgYnVzQWNxdWlyZWRDYWxs
YmFjayhHREJ1c0Nvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIGNvbnN0IGNoYXIqIG5hbWUsIGdwb2lu
dGVyIHVzZXJEYXRhKQoreworICAgIHN0YXRpYyBHREJ1c05vZGVJbmZvICppbnRyb3NwZWN0aW9u
RGF0YSA9IDA7CisgICAgaWYgKCFpbnRyb3NwZWN0aW9uRGF0YSkKKyAgICAgICAgaW50cm9zcGVj
dGlvbkRhdGEgPSBnX2RidXNfbm9kZV9pbmZvX25ld19mb3JfeG1sKGludHJvc3BlY3Rpb25YTUws
IDApOworCisgICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAgIHVuc2lnbmVkIHJlZ2lzdHJh
dGlvbklEID0gZ19kYnVzX2Nvbm5lY3Rpb25fcmVnaXN0ZXJfb2JqZWN0KAorICAgICAgICBjb25u
ZWN0aW9uLAorICAgICAgICAiL29yZy93ZWJraXQvZ3RrL1dlYkV4dGVuc2lvblRlc3QiLAorICAg
ICAgICBpbnRyb3NwZWN0aW9uRGF0YS0+aW50ZXJmYWNlc1swXSwKKyAgICAgICAgJmludGVyZmFj
ZVZpcnR1YWxUYWJsZSwKKyAgICAgICAgZ19vYmplY3RfcmVmKHVzZXJEYXRhKSwKKyAgICAgICAg
c3RhdGljX2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGdfb2JqZWN0X3VucmVmKSwKKyAgICAgICAgJmVy
cm9yLm91dFB0cigpKTsKKyAgICBpZiAoIXJlZ2lzdHJhdGlvbklEKQorICAgICAgICBnX3dhcm5p
bmcoIkZhaWxlZCB0byByZWdpc3RlciBvYmplY3Q6ICVzXG4iLCBlcnJvci0+bWVzc2FnZSk7CisK
KyAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVCh1c2VyRGF0YSksICJkYnVzLWNvbm5lY3Rp
b24iLCBjb25uZWN0aW9uKTsKKyAgICB3aGlsZSAoZGVsYXllZFNpZ25hbHNRdWV1ZS5zaXplKCkp
IHsKKyAgICAgICAgT3duUHRyPERlbGF5ZWRTaWduYWw+IGRlbGF5ZWRTaWduYWwgPSBkZWxheWVk
U2lnbmFsc1F1ZXVlLnRha2VGaXJzdCgpOworICAgICAgICBzd2l0Y2ggKGRlbGF5ZWRTaWduYWwt
PnR5cGUpIHsKKyAgICAgICAgY2FzZSBEb2N1bWVudExvYWRlZFNpZ25hbDoKKyAgICAgICAgICAg
IGVtaXREb2N1bWVudExvYWRlZChjb25uZWN0aW9uKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFVSSUNoYW5nZWRTaWduYWw6CisgICAgICAgICAgICBlbWl0VVJJQ2hhbmdlZChj
b25uZWN0aW9uLCBkZWxheWVkU2lnbmFsLT51cmkuZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgfQorfQorCitleHRlcm4gIkMiIHZvaWQgd2Via2l0X3dlYl9leHRl
bnNpb25faW5pdGlhbGl6ZShXZWJLaXRXZWJFeHRlbnNpb24qIGV4dGVuc2lvbikKK3sKKyAgICBn
X3NpZ25hbF9jb25uZWN0KGV4dGVuc2lvbiwgInBhZ2UtY3JlYXRlZCIsIEdfQ0FMTEJBQ0socGFn
ZUNyZWF0ZWRDYWxsYmFjayksIGV4dGVuc2lvbik7CisgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJr
aXRfc2NyaXB0X3dvcmxkX2dldF9kZWZhdWx0KCksICJ3aW5kb3ctb2JqZWN0LWNsZWFyZWQiLCBH
X0NBTExCQUNLKHdpbmRvd09iamVjdENsZWFyZWQpLCAwKTsKKworICAgIGdfYnVzX293bl9uYW1l
KAorICAgICAgICBHX0JVU19UWVBFX1NFU1NJT04sCisgICAgICAgICJvcmcud2Via2l0Lmd0ay5X
ZWJFeHRlbnNpb25UZXN0IiwKKyAgICAgICAgR19CVVNfTkFNRV9PV05FUl9GTEFHU19OT05FLAor
ICAgICAgICBidXNBY3F1aXJlZENhbGxiYWNrLAorICAgICAgICAwLCAwLAorICAgICAgICBnX29i
amVjdF9yZWYoZXh0ZW5zaW9uKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+
KGdfb2JqZWN0X3VucmVmKSk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdDJHdGsvV2ViUHJvY2Vzc1Rlc3QuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXQyR3RrL1dlYlByb2Nlc3NUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5kOTFhNmU3Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQyR3RrL1dlYlByb2Nlc3NUZXN0LmNwcApAQCAtMCwwICsxLDEwNiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Rlc3QuaCIKKworI2luY2x1ZGUgPGdpby9naW8uaD4K
KyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisKK3R5cGVkZWYgSGFzaE1hcDxTdHJp
bmcsIHN0ZDo6ZnVuY3Rpb248UGFzc093blB0cjxXZWJQcm9jZXNzVGVzdD4gKCk+PiBUZXN0c01h
cDsKK3N0YXRpYyBUZXN0c01hcCYgdGVzdHNNYXAoKQoreworICAgIERFRklORV9TVEFUSUNfTE9D
QUwoVGVzdHNNYXAsIHNfdGVzdHNNYXAsICgpKTsKKyAgICByZXR1cm4gc190ZXN0c01hcDsKK30K
Kwordm9pZCBXZWJQcm9jZXNzVGVzdDo6YWRkKGNvbnN0IFN0cmluZyYgdGVzdE5hbWUsIHN0ZDo6
ZnVuY3Rpb248UGFzc093blB0cjxXZWJQcm9jZXNzVGVzdD4gKCk+IGNsb3N1cmUpCit7CisgICAg
dGVzdHNNYXAoKS5hZGQodGVzdE5hbWUsIHN0ZDo6Zm9yd2FyZDxzdGQ6OmZ1bmN0aW9uPFBhc3NP
d25QdHI8V2ViUHJvY2Vzc1Rlc3Q+ICgpPj4oY2xvc3VyZSkpOworfQorCitQYXNzT3duUHRyPFdl
YlByb2Nlc3NUZXN0PiBXZWJQcm9jZXNzVGVzdDo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgdGVzdE5h
bWUpCit7CisgICAgZ19hc3NlcnQodGVzdHNNYXAoKS5jb250YWlucyh0ZXN0TmFtZSkpOworICAg
IHJldHVybiB0ZXN0c01hcCgpLmdldCh0ZXN0TmFtZSkoKTsKK30KKworc3RhdGljIGNvbnN0IGNo
YXIgaW50cm9zcGVjdGlvblhNTFtdID0KKyAgICAiPG5vZGU+IgorICAgICIgPGludGVyZmFjZSBu
YW1lPSdvcmcud2Via2l0Lmd0ay5XZWJQcm9jZXNzVGVzdCc+IgorICAgICIgIDxtZXRob2QgbmFt
ZT0nUnVuVGVzdCc+IgorICAgICIgICA8YXJnIHR5cGU9J3MnIG5hbWU9J3BhdGgnIGRpcmVjdGlv
bj0naW4nLz4iCisgICAgIiAgIDxhcmcgdHlwZT0nYXtzdn0nIG5hbWU9J2FyZ3MnIGRpcmVjdGlv
bj0naW4nLz4iCisgICAgIiAgIDxhcmcgdHlwZT0nYicgbmFtZT0ncmVzdWx0JyBkaXJlY3Rpb249
J291dCcvPiIKKyAgICAiICA8L21ldGhvZD4iCisgICAgIiA8L2ludGVyZmFjZT4iCisgICAgIjwv
bm9kZT4iOworCitzdGF0aWMgdm9pZCBtZXRob2RDYWxsQ2FsbGJhY2soR0RCdXNDb25uZWN0aW9u
KiBjb25uZWN0aW9uLCBjb25zdCBjaGFyKiBzZW5kZXIsIGNvbnN0IGNoYXIqIG9iamVjdFBhdGgs
IGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG1ldGhvZE5hbWUsIEdWYXJp
YW50KiBwYXJhbWV0ZXJzLCBHREJ1c01ldGhvZEludm9jYXRpb24qIGludm9jYXRpb24sIGdwb2lu
dGVyIHVzZXJEYXRhKQoreworICAgIGlmIChnX3N0cmNtcDAoaW50ZXJmYWNlTmFtZSwgIm9yZy53
ZWJraXQuZ3RrLldlYlByb2Nlc3NUZXN0IikpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICgh
Z19zdHJjbXAwKG1ldGhvZE5hbWUsICJSdW5UZXN0IikpIHsKKyAgICAgICAgY29uc3QgY2hhciog
dGVzdFBhdGg7CisgICAgICAgIEdWYXJpYW50KiBhcmdzOworICAgICAgICBnX3ZhcmlhbnRfZ2V0
KHBhcmFtZXRlcnMsICIoJnNAYXtzdn0pIiwgJnRlc3RQYXRoLCAmYXJncyk7CisgICAgICAgIE93
blB0cjxXZWJQcm9jZXNzVGVzdD4gdGVzdCA9IFdlYlByb2Nlc3NUZXN0OjpjcmVhdGUoU3RyaW5n
Ojpmcm9tVVRGOCh0ZXN0UGF0aCkpOworICAgICAgICBib29sIHJlc3VsdCA9IHRlc3QtPnJ1blRl
c3QoZ19zdHJyc3RyKHRlc3RQYXRoLCAiLyIpICsgMSwgV0VCS0lUX1dFQl9FWFRFTlNJT04odXNl
ckRhdGEpLCBhcmdzKTsKKyAgICAgICAgZ192YXJpYW50X3VucmVmKGFyZ3MpOworCisgICAgICAg
IGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUoaW52b2NhdGlvbiwgZ192YXJp
YW50X25ldygiKGIpIiwgcmVzdWx0KSk7CisgICAgfSBlbHNlCisgICAgICAgIGdfYXNzZXJ0X25v
dF9yZWFjaGVkKCk7Cit9CisKK3N0YXRpYyBjb25zdCBHREJ1c0ludGVyZmFjZVZUYWJsZSBpbnRl
cmZhY2VWaXJ0dWFsVGFibGUgPSB7CisgICAgbWV0aG9kQ2FsbENhbGxiYWNrLCAwLCAwLCB7IDAs
IH0KK307CisKK3N0YXRpYyB2b2lkIGJ1c0FjcXVpcmVkQ2FsbGJhY2soR0RCdXNDb25uZWN0aW9u
KiBjb25uZWN0aW9uLCBjb25zdCBjaGFyKiBuYW1lLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAg
ICBzdGF0aWMgR0RCdXNOb2RlSW5mbyAqaW50cm9zcGVjdGlvbkRhdGEgPSAwOworICAgIGlmICgh
aW50cm9zcGVjdGlvbkRhdGEpCisgICAgICAgIGludHJvc3BlY3Rpb25EYXRhID0gZ19kYnVzX25v
ZGVfaW5mb19uZXdfZm9yX3htbChpbnRyb3NwZWN0aW9uWE1MLCAwKTsKKworICAgIEdPd25QdHI8
R0Vycm9yPiBlcnJvcjsKKyAgICB1bnNpZ25lZCByZWdpc3RyYXRpb25JRCA9IGdfZGJ1c19jb25u
ZWN0aW9uX3JlZ2lzdGVyX29iamVjdCgKKyAgICAgICAgY29ubmVjdGlvbiwKKyAgICAgICAgIi9v
cmcvd2Via2l0L2d0ay9XZWJQcm9jZXNzVGVzdCIsCisgICAgICAgIGludHJvc3BlY3Rpb25EYXRh
LT5pbnRlcmZhY2VzWzBdLAorICAgICAgICAmaW50ZXJmYWNlVmlydHVhbFRhYmxlLAorICAgICAg
ICBnX29iamVjdF9yZWYodXNlckRhdGEpLAorICAgICAgICBzdGF0aWNfY2FzdDxHRGVzdHJveU5v
dGlmeT4oZ19vYmplY3RfdW5yZWYpLAorICAgICAgICAmZXJyb3Iub3V0UHRyKCkpOworICAgIGlm
ICghcmVnaXN0cmF0aW9uSUQpCisgICAgICAgIGdfd2FybmluZygiRmFpbGVkIHRvIHJlZ2lzdGVy
IG9iamVjdDogJXNcbiIsIGVycm9yLT5tZXNzYWdlKTsKK30KKworZXh0ZXJuICJDIiB2b2lkIHdl
YmtpdF93ZWJfZXh0ZW5zaW9uX2luaXRpYWxpemUoV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNp
b24pCit7CisgICAgZ19idXNfb3duX25hbWUoCisgICAgICAgIEdfQlVTX1RZUEVfU0VTU0lPTiwK
KyAgICAgICAgIm9yZy53ZWJraXQuZ3RrLldlYlByb2Nlc3NUZXN0IiwKKyAgICAgICAgR19CVVNf
TkFNRV9PV05FUl9GTEFHU19OT05FLAorICAgICAgICBidXNBY3F1aXJlZENhbGxiYWNrLAorICAg
ICAgICAwLCAwLAorICAgICAgICBnX29iamVjdF9yZWYoZXh0ZW5zaW9uKSwKKyAgICAgICAgc3Rh
dGljX2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGdfb2JqZWN0X3VucmVmKSk7Cit9CmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvV2ViUHJvY2Vzc1Rlc3QuaCBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9XZWJQcm9jZXNzVGVzdC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzZWVkZDAKLS0tIC9kZXYvbnVsbAor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvV2ViUHJvY2Vzc1Rlc3Qu
aApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdC13ZWItZXh0ZW5zaW9uLmg+CisjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9n
b2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK2NsYXNzIFdlYlByb2Nlc3NUZXN0IHsKK3B1
YmxpYzoKKyAgICB2aXJ0dWFsIH5XZWJQcm9jZXNzVGVzdCgpIHsgfQorICAgIHZpcnR1YWwgYm9v
bCBydW5UZXN0KGNvbnN0IGNoYXIqIHRlc3ROYW1lLCBXZWJLaXRXZWJFeHRlbnNpb24qLCBHVmFy
aWFudCogYXJncykgPSAwOworCisgICAgc3RhdGljIHZvaWQgYWRkKGNvbnN0IFN0cmluZyYgdGVz
dE5hbWUsIHN0ZDo6ZnVuY3Rpb248UGFzc093blB0cjxXZWJQcm9jZXNzVGVzdD4gKCk+KTsKKyAg
ICBzdGF0aWMgUGFzc093blB0cjxXZWJQcm9jZXNzVGVzdD4gY3JlYXRlKGNvbnN0IFN0cmluZyYg
dGVzdE5hbWUpOworfTsKKworI2RlZmluZSBSRUdJU1RFUl9URVNUKENsYXNzTmFtZSwgVGVzdE5h
bWUpIFwKKyAgICBXZWJQcm9jZXNzVGVzdDo6YWRkKFN0cmluZzo6ZnJvbVVURjgoVGVzdE5hbWUp
LCBDbGFzc05hbWU6OmNyZWF0ZSkKKwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXQyR3RrL3Jlc291cmNlcy9saW5rLXRpdGxlLmpzIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQyR3RrL3Jlc291cmNlcy9saW5rLXRpdGxlLmpzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjODI0ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvcmVzb3VyY2VzL2xpbmstdGl0bGUuanMK
QEAgLTAsMCArMSBAQAord2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdXZWJLaXRMaW5r
JykudGl0bGU7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJH
dGsvcmVzb3VyY2VzL3Rlc3QtY2VydC5wZW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdDJHdGsvcmVzb3VyY2VzL3Rlc3QtY2VydC5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYjM0MzAxZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Mkd0ay9yZXNvdXJjZXMvdGVzdC1jZXJ0LnBlbQpAQCAtMCwwICsxLDEz
IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUI5akNDQVYrZ0F3SUJBZ0lKQUxl
dVhCbyt2d3o5TUEwR0NTcUdTSWIzRFFFQkJRVUFNQlF4RWpBUUJnTlYKK0JBTU1DVEV5Tnk0d0xq
QXVNVEFlRncweE1qQTNNVEl4TWpRNE1qUmFGdzB5TWpBM01UQXhNalE0TWpSYU1CUXgKK0VqQVFC
Z05WQkFNTUNURXlOeTR3TGpBdU1UQ0JuekFOQmdrcWhraUc5dzBCQVFFRkFBT0JqUUF3Z1lrQ2dZ
RUEKKzBUVXpPUXhIQklLREQybWt1cSt0VTkybVF2RFpnNzNCMEcrTmhyMlQyRzZNYmNMcUl3amcx
UVl0QlpXSjgzdFoKK3hNTUVmaXdlSExGODVaOW9oYXZBZ3hKbEtHN1ltdlpPNzlLa0ZwbWpWMlc1
Q1ZSbTBlWU1QbnpteE5Db2FZcW8KK0RMbDB6c0g2S1pPTFBLdS9mWDRlRFg5WHBBUDFmODNoV0Ix
VUZCbUhLTjhDQXdFQUFhTlFNRTR3SFFZRFZSME8KK0JCWUVGREh2NVpRMUJkbWh6VHNEVUVvWTU1
RVh5VWRLTUI4R0ExVWRJd1FZTUJhQUZESHY1WlExQmRtaHpUc0QKK1VFb1k1NUVYeVVkS01Bd0dB
MVVkRXdRRk1BTUJBZjh3RFFZSktvWklodmNOQVFFRkJRQURnWUVBaDNxTUJ4N3YKK2pTb2RNZjNP
eVRxVExFN2RlTG5tbkNlQlZwZ3p4UlpFb2l6Y0dxWWNqaXFPMjdpNU41WjZLVlFzbklUbkxpeUMK
K21VdHVSNUtuRjY5dVRLVXc0bS91Z1plNXdoamlnNU1xMmw0MTBLVks2RWVHNHRkTGxmWFIrd2k0
VTVLNEtqUDYKK3A0bmNoUVVYTGEyemNiSm4rVkJleEpuNi85d2RocitEVUdZPQorLS0tLS1FTkQg
Q0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyR3RrL3Jlc291cmNlcy90ZXN0LWtleS5wZW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdDJHdGsvcmVzb3VyY2VzL3Rlc3Qta2V5LnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi45MDM2MjIyCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL3Jlc291cmNlcy90ZXN0LWtleS5wZW0KQEAgLTAsMCAr
MSwxNiBAQAorLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCitNSUlDZHdJQkFEQU5CZ2txaGtp
Rzl3MEJBUUVGQUFTQ0FtRXdnZ0pkQWdFQUFvR0JBTkUxTXprTVJ3U0NndzlwCitwTHF2clZQZHBr
THcyWU85d2RCdmpZYTlrOWh1akczQzZpTUk0TlVHTFFXVmlmTjdXY1REQkg0c0hoeXhmT1dmCith
SVdyd0lNU1pTaHUySnIyVHUvU3BCYVpvMWRsdVFsVVp0SG1ERDU4NXNUUXFHbUtxQXk1ZE03Qitp
bVRpenlyCit2MzErSGcxL1Y2UUQ5WC9ONFZnZFZCUVpoeWpmQWdNQkFBRUNnWUIyUXdPVXNSc0lN
cHJSd0o5dEpOZnZPN0c3Cit6NWkxL3pPcmx4UEM0akhNUEJuSUJsSUN3Z2NPaExJNG9PTGRyNUg4
UjEybjBWcW9UN0RSd1AzOTZpd2xKaXBGCitpTzFoZURNbi84ejhMUEd3a0NLLytjazA0ck1Ea3N4
V0lkTXdZS0JYdDlhaG5KL3hSTHpRMS8zQUppQUdub2U1CisvUUxYUXdlb2ZkNG1tZnNqS1FKQkFP
MkN3VDd1TVA2bk1qWGd0Vk1KcTVRUDhVYmVDUzFzRU9QSkpiSHVEeEpCCisvSGVQUUhCanE0a3pH
NkNMNG9PN1QrNWZEdjRnK2ZJSUh6dVhlclowaW1zQ1FRRGhmbWlUSWM5T3VjRUlmZzYvCittczBK
aUtTbVdjK3FvaU9DdHJJTHVRdkZvTndKUmNpUUFOcWVKczZ3cGFEdmV2U1V2QkxHZkcvN2IzSHZh
RTVYCitpcUJkQWtCRVFJdnAycWNIdHVKTjYwb1FGN3BQclJrbnhVeWIyZThzbGpRWDRwSkFLK2d5
TDE5VUxNQXhpQmRMCitWb2Q4VllxTnRKRnBZKzZQcDlmWjF4anpiNkFMQWtFQTRKenJEQXcwbFFY
QSszV2R1VXc0aXhPYWRyMmxkeUcwCiszNktlYmNEd3NmWk8xOG0wUTRVbVB6MEd5N3pnTjB3eHp1
b2NoYXcwVzYraVBVaVlLT2xFWFFKQkFNV1FyUGx1Citycmlub1pTMmY4ZG9KOUJOTlVhK1JOcE11
ZzZVWGM1NXFvVUpseWlYRWgrdHU0QWFNT3R4dUdJeUMwc0FjdXc2CitYZEFQVlBYS2Q3TW5lNzA9
CistLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdDJHdGsvcmVzb3VyY2VzL3dlYmtpdDJndGstdGVzdHMuZ3Jlc291cmNl
LnhtbCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9yZXNvdXJjZXMvd2Vi
a2l0Mmd0ay10ZXN0cy5ncmVzb3VyY2UueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmIzODg2ODQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdDJHdGsvcmVzb3VyY2VzL3dlYmtpdDJndGstdGVzdHMuZ3Jlc291cmNlLnhtbApA
QCAtMCwwICsxLDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8
Z3Jlc291cmNlcz4KKyAgPGdyZXNvdXJjZSBwcmVmaXg9Ii9vcmcvd2Via2l0L3dlYmtpdDJndGsv
dGVzdHMvIj4KKyAgICA8ZmlsZSBhbGlhcz0ibGluay10aXRsZS5qcyI+VG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQyR3RrL3Jlc291cmNlcy9saW5rLXRpdGxlLmpzPC9maWxlPgorICA8
L2dyZXNvdXJjZT4KKzwvZ3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0R3RrL3Jlc291cmNlcy9ibGFuay5pY28gYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdEd0ay9yZXNvdXJjZXMvYmxhbmsuaWNvCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVhODQ4
Yjk5MTZlNTkwODQ0MTNmYzFlN2EwOTBkZWJmNWY0OTE0ZGIKR0lUIGJpbmFyeSBwYXRjaApsaXRl
cmFsIDE5OApwY21aUXpVPDUofDBWWGlMZnF7V1I0MlUmPVNPQUM+ZkVYbD8zO2g1OEFEMHdlI1F9
UlkxVmpKOwoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvcmVzb3VyY2VzL3Rlc3QuaHRtbCBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Jlc291cmNlcy90ZXN0Lmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThmN2Q0ZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Jlc291cmNlcy90ZXN0Lmh0bWwKQEAgLTAs
MCArMSw2IEBACis8aHRtbD4KKzxoZWFkPjx0aXRsZT50ZXN0PC90aXRsZT48L2hlYWQ+Cis8Ym9k
eT50ZXN0PC9ib2R5PgorPC9odG1sPj48L2hlYWQ+Cis8Ym9keT50ZXN0PC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvcmVzb3Vy
Y2VzL3Rlc3Qub2dnIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvcmVzb3Vy
Y2VzL3Rlc3Qub2dnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdmM2EzYjljNWQ2NDdjNzJhMTRkM2I0OTZjYzYyNmQ0
MTJmOGIwMGYKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDMwMTMxCnpjbWVGWmNVVil8X0F0Q3A4
WCpLc0FpKz57TE1SM1pQTilLd05rUzRzSDkmJFBtUHRZfUd6RyptaihTNWlndW5tLQp6UXEmMmQy
b1c0V3omPHgxQVNmYjg1JGorYlklQENKSVE1UzJMRmVCMGUpcyE1QDklcV8tfUMrVj9xX0c4VURu
P0YKej57WlRNZCEybzxacClUdmZCPTdtUjVDZXBBdURFTj0lSjwxJlRXfkJyMG9rODJ5V1pMMXI4
WT5mS05sfjdKQnxHCnpFY0FybjVfakwwSEFJaGh7fUdUTU1wXjtgTlJyWiglaHpSWXB7NkQmViYw
RVc0V0BjQW5FfWlkJXolYUFBb0tAZAp6UzU4bjIxaDg8OFhCYyUqSENgJFBmQj1CWiQ8Xlh1Vno2
c2RNTHFxcT5JJVVeWmpmMTZUflJubGlQTCV4e1dHRVoKeiNGR0kpMFR0Yn1xflM/JEA+c3dZJUNl
RzdUfGlRVnwxcWtHQ1VQI293RXJpVXhVSjNJJV8mPlFUJUVEenYxb1hxCnpmRipGcUNxKnFKM2Jq
SzQxeF5td1hBVjBZSkRpRGdZdGlONHlvUlp7Vk9+IWc0QEx3JlpEfVk4ZGA5bWM9YV9rUAp6VWs/
Zk1vUXtiKmFSSVl3QEFrMlBaeDg+S243Jl5KNn19ZV4jd01QPyE3ZEUxYzVTWkNnb3BhREVHa2dK
JUxIcjcKek5XcTw/RTFtWE5DIUUmKHo9KlcrbyQlJkdpXjljbCpzKkUtJlYoQn5jaWg7eUZTYV49
IXw4cG9yfUg8PT01UDhyCnpVcnM2YkVCPjxZbzFZaXJgPXdKTXBtUGtVZGchWEIrM0Z0ej0jaEJe
WjNxeSpmRCk9e0luQX1hQS1GailgOXhBKAp6dWt2X3IrTGJRR2xgaX55NUNGai0zcWhBdSt4LThF
aUxxNCl8OXhhQmh1cmBSI150MzlgJTQqNHllT3dqbkdCUW4KejcjOz5OTzw3VGwhQXpnRStrR3g9
VWpAZ3RTPV5DfHUmWnl2N1g2YjUzdUZnPzwhTHtkVkx0KzZCZyRoayh8NyYkCnopaTxfPi0rKW9F
ZlJYPW0kYlFjK0BJb0FwQnZ2Sj51LT5LZV9oP2JVISYyKDhMSEd8ZCEycyZ8TjdVTiErOD9oNQp6
U2t5ayZ3VVgqNGB3QiZNJWcoZWAqUyk3Oz5YXisjbjNrQFdZWCleUzxGKHR6ZzdMTFlBOTl+cil8
c0BvVVdlOyEKenpDQ08pV0Z2PitsQ0lhOXdCRDQhZVBoUktwUn1BSSFNVmJVeEBBM1FMPzZjY2kh
RTk9QTBGIXF4RFdSenlqN1FTCnojJmk+JGAhKVhYY1VNZ3A+aSZ+YFNUTm4+dnlgRERJbjtlNjd6
TjNwKzJQPlF0Uz5BTT5PNjtDODwhVEJASXpYMgp6Zzs2JWtuekN9PHViY2AlOV5wTH58MSl7ZCR7
KUQ2djBVU0puU09IQT5rNEJiWH1kVFVfYEtzSEFxZWpZYjF9bWcKej1IbFg+Q3I3dVIyb1IoK15+
Xn0hbjx9RDBUJD9eZjZpaWZWZD9fMWFeSWt7X3N4dlJVOSlxUmctd0Y1MT1eQW0jCnojSnxPQnVr
OWwobyM4bSk8cV8/QFN9WVE7LTxjTUJYdmdoU2BJfX5VZH47KnBII2RxdVUwbT49alApPGMwa0Z7
SQp6eV9kLWZoMVQ9WjtvSnowPT80UDtRKnRzJG0mKXUlJUE3KkdvV2lkJnVLd1YmP25qPnFEXyoy
ZWNyPHlfMWJONCMKemJ3YWU/cmIqdn5OcFpzVCZWLXgyMl4mdUJpfHplT1VfT1k9SCNjX3RvOCZC
cjJyWiFHcGBhWX56YT5YVUZMfmYhCno7dXVgKzZrRzF7Uz1FLXArU1p6KlBoMGk0fEJ4Snw9Mio0
bm18RjkjeGBiWD5sfmg9M0lIT08hZUIkfXB8MkY8aAp6YUBKLSMhNFp9bVVaJkgoTnNpSWVKX3dl
a0U9S3J8QUooe2YwIUM7U1p9R25xMDAzaHRLSkApX0JyP2lsST84dUMKeiUwbnoje2VQQWl4T0xo
bWU5e0wtWSRYNlQwNmMxSnA0d3chc1ZFSTdXR2tgMzFOTVUoMURfc2wqcit7Rj5jfGclCno9QDMw
aUs9bzlRMmpgUWY5IVFneVkhPyszeDVvP0U5PSRfUjR2JCsqO0t2Pm8pWXx9eU9PU215KG1vVWtP
V3J+Vgp6byZAMH09JklGJXd0JDBpIWlRekducXxmTlEyZHt6QEkqZTVDXi1IIzNfUV88MiU3TnVZ
YzY7ZXFjQE1gMThiODEKemRINjVwaXU4cm57bzduRHBLejhhe0NfXnZ7fmg3flYmSzJVMEw8YyQx
Xmx6LSlIfUUlUlE/YitAUV90YjRTd2FMCnppaT5APFlQVzVlKXR0bjcpdUxMSCQkdkAqdFlDbGUq
fVpodHFHcj1scEc4TWF1SGAyRSVNdHxDJil8bG1GdEF7dQp6O29IN3tALT0pVHVmblhGTygqaF81
dndOaWxLT3EqaFg0QkpRfjs8VDZRQlpDbXMkVjFydmB4fjBSSDlpdjlOdDEKekN7S1daRGsxaSQy
Pnw1QHBEcTJiaHh6fHJgeVVmUkRtbmxNXmIrZklgendmJnhMOCY+ISVQK24halpkZVN0TXV5Cno3
X280N2MwU0o1Q1VsPjhYRnghTXhwZE4lPnBxYz57SHZPaF51cm05JmBFQXQwJkR+byh0T303QCN3
ZG9ISmVgaAp6NW5lWjRxZmJKPj5JRnRTZEk5WnokYEZReVAmcGd8czd9Q20tQG9lZFhMYEJAd3gw
fV9HWjxIWDxWS1JocXM1eUoKekooTl5eVGQxZWtIWEZfXmhiT3hCVVBaeWlvd0R7eylqcmBRXyRk
ck9qVztjPmVOd25FZzI4YVk0MkdRYTM1T3dYCnpwIUxleT0yaW8mTm0lYXpyKn57eHRYYC15en1m
fHwwM19hWXFjVEMyMW91MDhmYEpyJERCSWBeaEclQ194TCpPVgp6MGQ9ITdBcj4+WVEwaWc7RmxV
NFMpcmJ1b1kzYWgrZ2BhKX1OVlopeHBvViF0RC1aRSghcEIqMWFQeyZxaj0mKjQKekQkMzJaM0NE
NEJ1OGQqfW5pYHxMTE9oelBxUjxZTjxzcSVxIzs3UClHKkIoXmhrcGBtZW5BQHdgflh7ZmFUU1d1
CnpmTnp+UkEpWmVUWj98LTRxUUtAJkQ9QldsIztHWHhnemU7cmtkYlAqWmRwQDI0MHJmb1IzS2J1
MFVJMXlGaTJ4WAp6NmxlYk1jRyYobjApcyQrXiNSK08pQ2lgZj1zbWoweiZOKSt1QXxGZmJPKUM9
ZXxCXmtZX30kdEgtNHo4VTNLaioKej8wPElqRkMxclhmfm0yOURDYTgrRy1APiVhQnlpN01wWFdT
eT15USRAOSRsfXxCVzU7K1k4OGxlJTEpJWVNZkBMCno9Pl8lOEZhdXkrSXNrNFJAKlF+eF5fQG1v
KElGUH1XdTdQMjZ9R3VCNHZocWt6JXtAMHxIPU40M2h0dkt7SXheegp6KTVgektXI0ltTypZZHlq
RmFMayRXfkN8Wkp1IWVYbVhCbmA8YHNMbElVT09GVT40aFVTcHV2bk9tKCl9YkthPzwKekpTMnE3
KEZWfCtFMzJmTWM4PU47K3RmSEVQNCU/QzdHUDR9U1J2SzhfQ0EwSzFsUGUhayMwMHxYc1ZERmRH
dTIxCnpRWE9FYnJOREpALVhUNDM5bFZxak0jdmVzdTUqeCpRcH1eKlpDR2VjWTQ+JH55Z2pzWVN7
bTJaPEk8b2xVI00mQQp6blcwcmdjQDJARzthcUpWYkxlTUVUJHxeJih1MD0kemJ1WFJmUHF0QlVU
fTtyWlhKQHNqQU5SaEUldW5NKmdsMl4KenRrd1IyPHhGOE92a19hJTglITUzUmxPKDc4RiZ1fnYp
PDRHaGJ7MGBSM2x8TyV4MldRZ2BIUjxfSSgyekhaTmhDCnoqfkk7YHArMnVYPk40RDhwI2glR3hv
UFN7NUJoPjc5TWJ4KWhOZzsmc1B9IWI/QGVUUUU0cEIqVEVlX3I1ZTRfbAp6aHYpY1VKSHJVVSFF
P05DMiFYZShCIyFCYWhLaDArdUlhQV5jcGBaR3paJjMpOzkpLVdmSE1td2M7eTFATGdzemkKenh7
IW01QUpQdkVQNEdsOzwlZzw7aVF3WDI8R3I3I0JGZ1BVNXF8dDQ3b0w4T1pYTj4+LVh+VGUpez94
IVNucCpQCnota31qcEk9ZzQyJEYtVDRnTS1fSF9fan1VamtDY2Y0bjMwNDFTPFAtYUxBRHl0U2hF
OVUrZE9YZVh4cGlyOCl8KQp6YVFEcDhkYWV6NEVhRl9Fej5uLTQwRlhwNEQ9ZGtYb3M5P25FSX15
KDtMUHcjRjdqQmM8cWkhLVUzIUBSdkxrKX4KenUre0chMzRkOD0wNHo4WDdQUWNZVjZIbjxIY0JX
fDRebG5yWlJ1eyFOWXg7XlVAc1VScEIwPXR0eSslVUk2azxeCnpnb0VWfWF3UFVGJGtnQmVlITtT
UHVrITI7PiFMLV5TbnY9NEVDcUEkcXdPWjMoZXlQQj1VQEUtT289dVF1QVR2Rwp6O2BgPjY7MT5W
e1E3V31zYE5UaFApZnlJdSVOSy0lTUZgOz1mWmw2SzdKI3RXNTFZfTJHOFgmNj4lbSZ+eldAODEK
elU5ZkJJQz1ZYHU4PlB8aiglKUA9eDk0NUt5V0RwPD8rKDF2eXhSKzM5fXk/UU4oUGZYczlrLSMq
S19UPntrQnNPCnp7U20pX3FGNiRUNXxfVG8/XjZ9fXotZkk/SjYkUUJzNllNVT0qeTF6c1pDZEgk
TVAhNkh7I0Z5Jjl6Z3NRQXJ3NAp6YWwjK0JsZS1mYlV3ejRMb0hDJERsSCszWUtnZXZeQn1QYyEh
OVR5cFRDTk9xdSs1JTNjYHdBSj00bG4od0dyaEAKemFkZXdPQCR2VVp3YUdSLWlwWGl9PVhiQlR5
K0xMXntnSFItKnhSVzckZmNXJWRiI0tCYzA3cH0jdjl+Ylcoe0VhCnplKjBZZWZhVEVXYHFSK1kw
VDBjKXpRI1gyYFBOekI0SnUwKGIlWm1zMStBKSZ7LUUmKHtKLW9KcjtQV31FfXYrNwp6PkJVVmpt
fj1eOGBCT1FFSWshOHA/akVTMDlEfWt5UFQtPGJJQElsdldyeSRIYmctP3A3UztEe3t8RkVHTm8+
MjcKeksxSit7MEApdShQfDcxRSQweD9SV3JrTGNNKmdAWU5aZndDYU1AOHJaWk0lRUl6e1AzYj0+
VnljJn0mVHd5ZkFaCnpYVFV0OG4qUTJmelcqMzhYWFUmKjF0MG1geH0/fnhDRlghKHkwQUNMSzt7
a3Y2X3NfbU0zI1AkXjRzTHJRdUw2PAp6VDxXNGNrbGFrOHZLTihGRF9na3R4cGVmOWpieDV1KnQj
aU1WTlo5UiQ7JF9jMj9jTCFnQGJAQVFYaXZHNTB4OHMKejBTb0smNjZEfCFoWTR3SnBHcWE9UCl9
NHQlfkQrXk4+XmBBdSMkd3dwZyEqa3k7JFp7PFBRbT8tY0R0WGw+PVRhCnpMeGA/QXtoXyZMPD1O
IXt0aSRePFZsJnEteDZoN1hzfiUycVp8YGNYSFJiWEhGc05pQlZVYUVxUy17ST48Mz96bQp6SEY8
PUQ+XyoxLVgmP3J1QSVaXyFZM2g7TlBaMDheYWxrdExeRD44SXlfKGdCdTxsbHxQZURRPSlCbzBg
b24jY20KejFMTjJuc3NkdH1RU2cqRFNReEVlVHVpVWJ3cF5NNjBjOSF4WXBAa2tXRXMtdnpmUFNF
YVdTQ2I9VkYlKUQtdUlZCnp2JV98TncwLW5lb0ExPTxHMFJXeHk2JElNNWVPQEgtMW5ZWGArWUlg
SVdGcXRTNjZFeUJBcjh1Myp7OV8wcj5Mdgp6RG91NmVVfXN+TyRIXik9P3ZfRjRjfHJsOUlOOTc1
SmEzZD4pM05qK2QoZzdrPGEpNlMoPWQ0NUwpb2NiRH59KTkKem9zKSQhPz1QKUFvNjxGR0BRRVFK
JUIkKmBra05eaUQqK3FGQDc2QjxpQS1fSF5ERSlWeGRUb1FWdkR2OVUyJWlyCnpARko8SFAyOW4t
O056djY4Z2ZxaGxKfWk+KFMzSH5aalc8ZXUxViRUZzdMZm97Mms9KF5iQE9CVE9vJEJtSzFFeAp6
ZUJ+SGtHdzEpfXAzTExgMj9hZWFOVHN9YmIpRmZnNmJpZiZFPWZXRDVPYy1ARFFnRmtkX0shZTwq
OT5DcUVgVm0Kem5uajBuJHdwYjBPfEReVFImNXxeJjFIYzRfNGp9S29BblY0RzcjRig/RlF5aShF
ZEVIY3VVeT5CbGYoSzBIcUtqCno4OEx1cjNBcE17UXYzLUQyfUIzVFpBSilvbig5dkN6PCM9eFBv
c0xYM2tLJGVscH1uajQ4Yzc2YEB4UlZudipOYAp6SzV1XiN3QmdoMiEkKFVGR2ptbjV0PTR2KTts
QU89RFQtfiUzckVAYF57MFJGeHVeS0hmXmMlWnVYZ2xNZXA2bkoKek1wOWxRI25yNjEofigwcGdp
PTs2WElmeCplWVN5am1GeVQ5TzVlISNlQ2Q1aVZ8UnFeTE5RdkRaclU/Rld6OGItCnoyek1hKWR7
KzVSVH1kZT11ZztRc29DWjJJNmxHQVBzfVcxSll9fWg7IX1GdnlpVEJ9PkNQezA3I1JTJWFjYVVu
dQp6VWREfiNMfCppSTZrayhZK2NRfE04eWJqMyslQl99I0pMXk1wV3pnIW5+c3JGP1BfO145ST5x
Nz0qeW94ayF1SnEKek47VzhQMFUzfXJncUdTcT0jdH1WMyoxemEmRlNsSTN9YyNDY0tpMHVLcFBN
cyRxN3xZM0k+JTBJa1JYOWhKWE14CnokPlQoYk85dFp6Nl52YVVIKkFpJVRIbXN5PE5KOX5qXjJz
RkpSZX1saiEwTnNHYy1ORihgZTRgcntANEFPWGJ5cAp6UG9kalVeV0x6aE48UGBFcyhvT0NXPktu
NT49OGcwWVgqK2V2aiZrenYrPnQ2Xnk2ZGBFYHI/bmFPSHxAZEdXcXEKek5gOUx1WHgkTipGPkMq
RnpnTzsoIS1tUjEjTXxXQmxBTFI9YDVyeEF5cyshb3smNFZLdmdHQkVIbWI5YWY0bk5ECnpFcGJD
aHVoZGFiY15oe2JTMEZ0ZE9eKyhGQ3tpY30jXlZMVVhLOVIoQGpPQ0t0MG1YNkwpazhjXjdeRGBL
QExfNQp6NSgkanJvP0I4dXJ8TGt+STdxWWhhcFhNY25POXxJaHQ9ZmQ0fnB5bmZ3SVdQdVh4UUMr
ZmY4YjktbFltRmxPYGQKek8tdzQ0ZjNSekNEakNeZytuVnx9LXhoM1B2UXt0MklefFRxY3p3QTc7
V2BzNnZVKzAteVpEWG0/XkR3ISF9XjY8CnpGWSoyS2p0aVREd3h7QnM3YmZYX09fRkApJTYjeTFO
NVpjNGdJVEJJanU4LXYmNjU9UnhVYFdRY3s1ST81K1FSWgp6RzYpcyN1cGYoRlNHcS1yQSpBRldZ
OUl3RWtgMnNySzd5eitxdUxANCZCcjZmIXNrQG5PcWhycFcoTVVtUVB+b3gKemwjPCM4Zmc/YUNB
IX5KPlF5aVlRU258YH5IYV5raWAhNytON3kpNHBxTjtRTmJPIT5rbmVLQm4rZCZSZDdGK09zCnps
d0hoRzwtZXt9clNTVGRUWWwtUztxUzJjeVY7QSRyd1RrbWFtOzBRY0pgS0NeRTVURjUzfSt7JEJJ
JHVpRD5oeAp6P2tNZmwrNCFQQ0xBaUdJJSF8ekR3MTUjb3RQWWJ7WWY1e0F0Iz9DUFBlcjg5P2ky
KXRHVy1OKzJUcWp3WCYwaXQKektSRCM2Jl5Pc2kyQ05XMU9IJlcrTERWV0xsZ3d6OEArZWskbmIx
MXAmTFpPNHIocktAZ1FHKShZfTl1VnFRPkIxCnp6fSM3eVJ2TlJjZCtte0VFLTUmISRGbzkpO1ow
ezFvOHtKN0ZmMWJyNTtFaDFzaCVCQ19IcCQ+WnZ9NE0rczZyRwp6Rk0wXj5EU3o3UlA4UmwwY0hl
aEJmOFhjeGhBbGElbHd6P0g1RWJxJk4wcW10dVBPSmY+TTVwTFhTRU05SHlmfXoKeip9PUpJRHFA
RCE1RWpUJDlhTDY1bCNUKXY8UDFiQDVmaXhXdX5lTDVRe19lQHU0QnRSbTVTV3BMQiN2MTVMSSFl
CnoxJHNYeG9vPEZsOUxMSVRCTV5GOVBhVHJiOzdjVSs2ZDE2e1hLcmNPK2M+WH5XYG5DP3d5R2tL
PU4xRk5nSDRqOQp6YmtaMTw0OVEzZipSN0ImPihubCtfRH1BWlV0WFBnKntQTy1vQXdzYnZONiNL
aWlDQSUoKzF4Y1pIQ1ArSmVlPUcKekZZSHBnUEh0OUVOLX4tfkxSIVU+OHVKPGE8ZnUkalZiSFRa
WE5BflghJkE8M2h7V1RCREprLXNjP1pLc2hEfTNnCnpZTX45JXhzSXd5dDBUbUJhQjBhYyFIQmNM
Z3lJR2s+cm19eTtsJjxJWChCPHxJTXA0YFF0IUFYRlQtdSZ3bDJHbAp6dDV0YztSYUJ0SHY2XlF8
N2NVZTNlOT82PiM3dnN1czU5ZChzd0V1TzJZZjZ0XkApcUlHQUZ3eGI+PWxLJiM0e3EKei1hSGd1
bGx0Xm4hVTNQSGVlc3MlVT1UbD13JWZEZyZld1lETnUzKS1aJWU7XlZnJCo3PTd4Y2xHJFNzYGly
YD4tCno+PnoqRlpqaG9ndCQ7QTFKamUjbSMjYj0mZ0dfIz1zclYrZF5tJUstYVZlWUlJRyNRQ042
P347KGdFRmtKdDc0Ywp6PU5ZKHoxSTEpZkczSVZTaWhAVztCYVVmWmpMbEo3NTN+ZkxMMWc7PWp0
JihNXmtZOHFeM2hSTnQzVno/cUpAQTUKejBGNSZYQX19P0FKUEh8aTMrVzlldEJ8WiFgYDFfWUBC
bFg/WFpEdW9mbyZgODxoUUYmWmZ7bSN0Y3JlKmVfMEY+CnpKQ2xuO15tNF5QKj5PKkllSUdUcXNu
fUNHPG5xazl1b2EhUFR5Z253YSNQUzA+eGF1WkZOTnwqWDdaKVBqc3ErPQp6UE9oblFze0dAZHNM
anN0Y088YSh6ZyZZWDhPfVNnKjtkOyNPcFN+fDlZKXBRTjtXZjFka09UbWM9cCpCNCpnLXYKenl1
MVMqLUFadDFQWW1qYys5aztFKFQ8b1JtZyNke2tCeE5XOUdqRDwyK1YzTi1CeXI5VFkoKGJIc15X
VmBBKWpLCnpiVmA5XjJjND5xWD57Wm50b0ptJnk7QVhqRFVTfmBvTWgtfiRyUHtQIVNiI0ZrSXBS
ekVYezBpJC1kTzlYVHM9WAp6OHxRU2swTzlHSG5GYzZWOUN3VztzYlYlNU4wcTx+N25WYW52YXJB
YiVwJE8mSzJ7bmFjfkkzYyVoYWp9R14jQzwKeiVPI2wwaD4jIWZ0OXBlaV93M1M3TzBzKGIoWnNm
QTlNcmYyUHkkdmVRKlg7dVYraUFOaEpxKEhtdzlrM1Z0b0QoCno2WGBpeDFWOzVMaz1kfllmWCkm
R3hWS19wSWlpZDtGcmVReXRWTUQ7PXpQbEdwTX50OzJuZUBkeShFUDkkY2FaSAp6b190NSY8K0NY
ZnZENDVweXstN19Qeig4PylRYjUwcTltQFVeQzA4V3sqRVMobGVjNz44ciRtaDtmYWI/PD1VYnMK
emNqZHJJVGFzfEZCWGdSUGhIWj5iaiZpWDRqK0pDSnIpeTU9Syh8YXFYKWlnSFUrUSg2dzZQN2Nz
SjhCKWlJMEp3CnpRUkM1WlJuTjh9NVQjQUd1dGU8NWluflZ7VSE2RldVMSM+QyVvVjVOTXgkLUdq
VjdJJnk9PnFgYT9HI1JKUENmMQp6d3N2czs/YUFLQFp2U25gQzhwemluOGJiWHI3ZD9kJTtkcndQ
QV9gaztuMzRGOGBAMDBvdzlnVHJ4d3FGWVVucW8KeiFQSmRaPD56XilnNjxyMHo5VDQ+TGx3NFZ7
a2NrfGQqJmlWRiVaJVh0UFBRPksza0c5a2t3cDl6KFFORkJQdDFtCnoqRiMyKWlhM0c5IyNvWGBa
NE4qWmd5LVJyZUZ2UExTcUAxJGRHNEhJQHNTKWdaO0xCezRKMXtQRF4rSSNEVUNFVwp6aDZVZlBx
TD5DVzclaGhreEl7Uy0zcURxNUdxbmhyKEFafk5CP01wfHotcmxOMHkrdiZ6cHlIRDtqPChKKjV4
QzEKejlmWip9Zno3dmtRbD9YOTxpNzxScHlhOX5jTHFEd25RdkhCUCRVanR4cEdveVNOTyM+aDEx
bHtxVn1kcjV1QEUlCnorM1JlbVFoMGQyV1AweDQ4djhqLTFNWTsqcDZraVF3QSh6WURhZnJkQjM3
RShnazgzWF85YHtiTSNiV1JISWoyTQp6WkA/PWo+cWNAPDMtWVZqMFpWR0tOJGdvaCZxcUZvWGJ0
WGY+OHJrcyN9RHA/bU9WWX51M35iIWhZRk4keD1WOU8KejxOTUVrLSFiJSVKT3FtUDdzNl8xa0RU
bzV6PTwlU0JSPHhPQFdBbEFzdU53aEJmQzVUQWBDYi1obyVVYzhYYWh0Cno/PmMpaz5GLXlZVVV4
QUw0Km9lJXd1QXl1KVpIaWk3UFheMEZ4aTZYaVI9OTF4RnVAJEJ0Y3s8TUZSalNBIS0oKAp6cTV4
KXwoYjx1LW9Db2UmNlMkfFc4U3xUSDJIblJqVWBrYERVXm13cjk3MExYTT5JPy0ySzNRYCpwTlps
STEqP2UKek0tN15ZR1k5LWREcnBXZHhIK1pjUypRbT1kTmpwZzJuO20jSz9zNV57TUhxS3VkIUpw
JFRHKyVfZiU/M1hwciYjCnpuNW5GJVg0WEV5Y0pkRzloMW1KRlo8Wl89TEBANUJYRzl3YzhPZD05
K2glan5mK091eGB8akNXTWE1IS0tfDZENQp6VEE0VVpKVjQ5Ujw8SzdYe2A5NzdQMkZLfUZgbSVG
QkdWPztXTUotS1JHUEBueWtoRHRiaFlQcUpybyY2WmVhTE4KemxAc1JPU09jYEJXJkZFbF8+fi01
SXgmMHxiTnVCQUI5ZjB2Ul9AQnpuZkhMa1hWJnRAYXNrblZaQ2ZpdUdCblYpCnpyTXt+OSVzYTcx
T2Jhcl4qQiNKfVI5Q2VffExHcShlUT1RYkNQNWV+I3J5TzdMdk8xYEA+ZFUxaHExUWheNjc4OAp6
X08/V3JKMCFEUzUoVkhnOVZQZ0ZWXjh6bFJea2BPWlpEPlB7b0AqdXJPdj56P0dfYHxJTWZzZSRX
PlBIMDgydj4KejNAOEYzJEM7KGRNPTxBNnpAMTdySDFyWHNfIypPJWg5PEc/emxjRSVOWlc5O2Qx
fCpBOztgcDFhRkxsNHNUK1kxCno+bEtyUFlFdj5XUyNFJFh3SEM3KUIqcXFtcyVfJjtDPk5VPGgp
ZUg0Kn19ZTUpKjQld19YU3hhNFpFKntNdGpUZgp6SH1weSRhUVk8Sz0rZn1fPkU4PiFPIWg2UnpC
clFBXntZcWAjJHZxPy00SVo7QyNCNChaZUlPOCY1PFFMejI3UVEKej5aSHlBaWRtVl5USCZkKzF3
ailqY1c1Jmp7ZlAtb3I2ejw+ZzBRKmJaOzUqYD0qT1hKcD13RSlMYCRxIVZCMSk2CnpPYExPPD9m
cTMtcXQhTEJCMTxQdiNTUlJfZFUme28ofkczRil3YCpMb3QyeDhIRXVFPVlyYjVqSXtRPUFRX3tx
UAp6KEkmMWJEWFFIbEF2fnNUSXlZWDBhUXVBeD01NT15KXRqYXx7e0dQPmZBOVdUZ09tT2VLRF9B
a1lGelF6XlVJWT4KektIV0syUTJ6UytPbyFmWnVqKUo8PUpebjJjUl9ZeFVxciUmTGM3WlpRdH02
PDQocVFJQWA0RVAxXjxaYHU2blVgCnohOF9HRUhTOEl3ZHtfMV58SmBUcl9RTzdzPzAyNm97aDlN
TiNrTS1UQDtqSGxwVV9fcUp5S2FgdiQ3PFh1bDNmZAp6P2lANntiNXB+UEJeNFV3WjtkdEs+e2Zh
QzFAYiE3XkFaUCZTV0c4b1FESUd0cXxvQmlvTipWS0pXPU96NipXKn4KejZjTy1ybHVaZiokYmZg
NCZpaTIxN0dAWjZ6QSpKNEd9VCg0M0g4Q3FNKH11VW5NPyhIYW0yNiUxKjtBaEw+VytoCno/SnpA
QnFkPnpoYVh+cEtKTGdyQ0hmNmlMd3omM3x7cis5dUQ9an5FIU44aEJvSEMmOWx4ZH05KyF4ODYr
emtocwp6dTlMUT5tTnJTcWotakVFVlNFPHhEeysqc0cqV0Q4SD9iU25qejBLK3ojcTJtXnt9VHwl
QFdIXkElVDUmZFZZZloKejdzSDBEPjdKQGk9bGspMnVRfSZAQV9jXzxjaD91dnRTbkp4diYmbT00
RFBLZ0tqZ3xHczgtNS1SWlVVWDNtQ294CnpKZFl9RzsjaD8+eFlybDw4fW0hMWstanxOcVpWeCZp
PGlCK0l5eEZfYnZhSit2TEgmPFBkPDwpcyR0Q05CRn4tZAp6WlZ8TjsjYVJ0V3d6fnhQTHE3N0p6
MUJvMmcoUkRWUnwjSns4OVZkR3FrNjNiYnsjMnpxe3ZjWSF5MnpfPllMeEYKekJEJmBUZEheIXBU
Rz1yU2lkWXo9JTVlbnQ/RnI0UE4mPD8oWE9VNy1CSHI0U1phTWltdVV0P1ZHaW5ab3QoQzBqCnpe
X19LUyFUTXBiWUI0KEJZJU1QbE4qQTs3YGUqZyQ8fWo+R0pteUx8IVJzSiN1XnBZVmRhaHpjOHsh
azdOO0hTPAp6Qzt5NU8kRTA5TENaYm5OSTN4dWxXcVlAe1hBYFFeTXR7NCVKPl9FWnkmY3R2P2Fo
e1B1KUJnPmd6VGpvQj4yZyEKekJYMUxQPm5qOD0yNWJ1X05+Y2VAK2V0Y1VUTU5hXl4tKEc5TDJi
TCE3O097Nk1MUjFrKE09YlhZe2RRUkRpTWVqCnpeMiskRVdRWnw7cHAkK1hXNXk4I2BLUlU5LSp3
JXt0djZrZD8mIWthd2NeSk04KjN4X2J+R0YjeFhfMkUrPWYkPwp6Xno/YGI2VEBpdEpiUnVXN2N5
RUF1cTR8TG4lZCEkJnNwQm1jNk0+K2hLPTB7UjtBTzAlUTwwY0N8Zj9fOT1fSjsKenQ+YExheiNy
OGthaXcxPkBwOGNVNGhKTDJfPlk7IyNyRkd1U2V7bjl0SU1EUkUpOE1EZkgxfjAtS15odyRKc09N
CnoySDY5fVY7T0VjQWxtQ0dWVSV2bXduKFdIK1opaChxNWo9RVlKOGV8WEpjTUVeV3crV180PVI9
XiR0MV4/VGBAMAp6a01EZkZTQElESlhxRHkkO1dIOSpyV0c9cVEzN0ByMSUrenxJKXV1QTE9RU9C
Wm51bloxZEF9LVB0YlhyRmdNSWAKelVCYlFxM0ZkbDRBe3VuV3hXbWVXe15zdDI4TFJONSlGRF5G
ZSVCKjRBb1JgOF9iKntUTnBhLXRAWHpyMU4wIWUzCnpnPmtSN0s7OVY+Nlo5K2BYJFFpbWR9XjRm
bFMwcSVJe0RpQjY1cSthRkdeUj5jcT1GX0dZS2ZHZ1FgPzNxUHZeaAp6aUpzb1RtU3hUbypIQXcp
N0I4YFVofXN4NiZuTChqKXdGSzQkMCNtfCNxQztvJDcwLSNzUGdEOF48am14Zl8kcnIKek1BJjg5
N1BsZ1pAUnJeJkheYUB6VGZZR1VVekEzcTxXWXVmNTJ5QCZzK08oIzAmVFhKc1pOdUtkRk9YdiRM
VTJqCnokKm1ncSRTN3pgamRNNk1weUBIWXw1T2lGRVp2fjtAX0NrKXw2OzNtYDI3d3VUWT19fExm
PTJlSlpgJVRIOyU8VAp6XilHc1dlSC1gNTNmIV5FT0x+ay1JZilgem5gV0VZa1E3fUxJOTJNU0lG
WHZJV09oKGs2U2Zke25WTDkoTCtBfUIKeiY/RkJtT1kwMm12KFdeQ0lZemB8QHtqUl9nOSl1ckV7
eVRUbzNrZj8zZ2RgYmczOzEzRUp5dzwxbjNCaChoZkYjCnpsOWRmdSooTkkzVGM/MX1ZWHcxSXZx
XyMyS0JkKXgkSyQ/KnludGpzOHFENHpLM2hBV1puLU1qe2AybykmUUVmVAp6ZVhaKl5MWnpTZkFf
SCpRUTE7Z1opVCpGXmk1KjlLLVgwJTJJdj87TkNaJUJEYG5AJT1VJiMtfTNtckRxLUxlU28Kem1Y
P3Y4R3ApSUszUWp6VUo9YzVKTGRFdiphaUUkTSNwSEVOPGV8RD1CIzF4Tz9kY3dXZk1kMG8qa0sx
fCVNVWVlCnpGfE1eZ3NIdUgoPyN4PTs4SVB+czB5Nk5PN31Zb2xOQ15YaFE8eXhwYSMyKTFHdyV1
KVpOPUdmRmdEY1Y1eUA4Wgp6WT5vR3BAekhBOXI5Xj4kKz5XaHtrPTRzKE8rRXJPSDF0Q3RJZTV3
QiY0YWFpKiZmJEZOeG0tTUZMQFlzSlh2S3MKemN2UDdjPkI3d3FzaTVST0BFa3xWeEBlYnB4SHcw
VDxxfiVBTDdWenEmPSYzSkhGUCFAT2R2MiNUOHdiV2cwK0YjCnpaaU4pVTghfDFMeFhJZVNxa3c5
TkBnUEt0eV4oQkIxeyNJSHQ3NmZTXitLTUgrcXtQKSRSYF49ITswKmdWMkw4MQp6dypkVmhQMkVE
fVdjVFRhTlhZPyYkXzxDPDl5K3Q3RUVubC02ZlJoMSVzX3hVNDNzSnBwbylPY2lmazVTLUN8PmwK
ek8wWUt+P35tXmBYQE92WXNBRjxJRE5Pc04/YyhwWnUpYkhldG9aeDJzfG4xYWIyMSk3PEVsSjdR
a3RKdkV2fGNNCnpVcj59KD4+VTtBSWpERjszSDNnSF9TdT9+R2VobkBWaDwlVkMtZnw8RiYhTnly
Q0JhKiVtYUoreC1NfHFDczkrJQp6bVA/a21sQXNuYjxARyk5N2NhJGppQU54UERMWnBxcnxVJHc5
QS0mQnk1aS1DPj9lK1I4RnlkQUd2YWJGaSokNCoKenF5RHlSe1h9a15wYilmWW9vPkJ8WGV+TUdP
LTlETGdxTl58N04wJW9BRy02cCoqNjhzKlNtJiRJY1VGTD42a0EqCnpQLTdvbWJzNCQzKHRJalYt
NXo+KCk2SGM9U00mOU9DSHVUaXVIUl9DaWBWczxeb1ZSYzl1YWk0P35seWdZT0F3WQp6WUgoIWVH
SXB6LSpJKXliNGBtb1ArJX5uZSV+YDZZYmVNeFpLPCMwUyFjcX5yKUVFPmxjP2xWXkJkOWR3QkpA
TmQKeldOayNTeXd0Typ0cHZOPDEqO1YlJkV7JjtAPnJaK1FDMUNmPzJjQWdRT3RsREFkOW1AY2J3
NDRBZ2x0JSlSQlFUCnprZWl5T0ctUXJWS3VGZkZZP2N8SUhaMEpDPE8hOSp1TXpVT0xAVko0a1kj
UThOT3JMIUFmdXhBUnBDeGklOT9+SAp6Wn5PKyZnP1YqR3g0KlMrXkUwVFllT0AtNjc8MDNwb0ZN
aH1fRX5QanhWejA8eF83PDNGMj81JlVWb2c5SF5qXiEKem9IbEVOKiM2bFVXM2J0LW4hKVhrYzdx
NlhuPGItIy1ndnhFaz1XPjsrVUpYKW1BWVNkJU14RHB2OVlWUWdwJCswCnpLeGNvfHVUQWB8Kmkl
KlNOUX5HNEJAMyM5bXQ0azxwS3VlWnBlKCVRMzBzVkY/V3l+bDU3KFcmbTQ5MkB5KStyawp6Un1C
JVpqd1ArTGNLbylPQVZ9JWo5QSNSZ3daciV6LU1TR09sVEQyV1VBK0RnYVpFNUJlKUMtS3tMRTEx
cSROMnoKeiplc0laMSNvOUNqbjZzI0piQ3JYRGF4VSV7dm55Vml4Q2k4aDsoa2g2Yy1aQ1d1MnlC
Ynl5NiRfYFY1MzJfTztKCnpYYTx4fSQyPCNVOEchNjZBJlBMRXstUnEmTDhLRmc5Zy0jRDBuayVH
cngjaEgrSmFDPkRQOUx1O3klQG9zeHU8NQp6NHI5d2c0WE5WdDlFYG1WKjUjTDYjeVVrbjExUWNB
TFdLZTJASF5yKWJrWSNDZGNvNSV5YjxNUSFWMjZvP1JGVXAKemFiSjlXI0JhLXZKY0MmQ3JOd1B+
MT5SKytuXzxRdmplST4rcV40OSt7QkEhaHhGQTItUjItV29VbFFhby1ROFc9Cno1Kk9RP3pkO2Rs
RzsrIzMjU2xTPWEtNWpKVnRxUkxsTj1aNCV+Oys3N09SXzB4MGUrWVVtRHFxVHVRSnt2OVpqYAp6
PCo2cH1ORDN5cnktfm40WDlRMUFkbkUxQkt6Izs4ZHFWTkR5am8tVCglQCV3JXlRRlk9T0FmUmBz
YTxDJV9CYHgKeiNMK2RLTVJ7Q3pwQm5BVDc0fFYqYFF+RmBfcVkzKU0kTENBSVQqSVZrPCF0KkhZ
M00wQE4lfE9rVjE4Q0N1WmZQCnpONllVfHlMSlhfYV8+UyhUakpXQXt2TlRkNiF+LWRrTDxzNVVK
VDlRYj1qVDlKYjkoQU80V3oqIVlCc0VoNypkOAp6cDBoWSQzXyVmODQmeylyMmF6KSYlcTd7ezVz
dTUpJk43UzR5YGUyKUJzM2ZxTnVFJmxEVn4hWXNiVW50NCV8VEcKeiZ7WkpOOTN5c0FwditaTkFC
TD5WLWlVTmVyIX1abFVZQmlFcyozO3dHOGE1ZDZPaTFPT0pMdiV6NHF3WkZ2al88CnpUVnglNTFB
ZXo2S2tiPGkpfTNnMHN7QXJZJWJ1R1BeXz1RRldoTCZKSEpuO3M2eTlyPFlJJU5rPSQhUWlMcE8w
cwp6bX55a3FXclIqX1cxTE92cnR3aTMxYGkpd1Fkej1sK3VNfFU0MTkyP2lpaXVrZUw7WF8lZ1Zk
KnV0Sm5lV08xMzkKejB7XlZ2a3klQHI7aHN8X1lwWWk7eCZLKnJxRUVNZDttKmgrajRXYEgoI2w7
eT5+QjBTKVU1Un1LMmsmSGBoQmBOCno0Szx+Tlpfb2VNS0B8Sl48ST5kZmI/LSMmcW1QQDBCTTxY
USlBcSNYbkdMdVIhczQ2QC15aDBtSktnbkV0cWN7dQp6MzYkdl5CaDQzZTNGd3JQMjNObH5OWShQ
NFB1ZFMzJVZicExfe3swcDJsdUVnTmNjRzdPS2k1JU47U0J0eD1VdCsKejNRdXZqYzA+VkBDc29O
WnJqWClfbC0peClUYHw1P2dFaXZ8MEBrUGxYVkMpXitjUnAhNDlIXy1MeVJkZGBGdWI4CnolMXd2
RXcjOH55eVVgI3B2VHNJe20qeFRjPk9iPEVqP2JWdUhYTEFyTUY0M0p5RUNpLV87Y35WaCt8PFIx
WihGOQp6UGdHU2JzT3FhXj50dk83XnY+RnEmLVVAQTRQJkRIaSlYKGojRlpCd2A3T040TCh5RiVA
K0spSEJrYC0zYlNkTVIKelZIQEAmKlNIPUcyel8kTTF+VTs+JG0zdFU3dlZ2P1JTKzI/QnZGYmQz
WVNKWTRwPSF0eXs3VGB4Q0dWPTNjLW9yCnpJUDBYdHdoSHMyQ0g8WVF0eS1ge3R8SFNocmUqUkQr
aCk5TExBcTtgdXYjY3clSCpPQkdDaUQhcUhnRjZyRyVONgp6ZUNpX01XKFheRzJhSyh6JWJ3I25W
ZUM7PVJaZ1JtP1d3aU8/bWxiT3pWWXlqQSZDajRaLXByU3QjfVokc0RDajEKent4ODJ8UmxlfiZv
X2VtO3YocD8xMj8+clpMTm1qNT5mIUcqd3s2fEw9KzImKUNxSGFtVCQ/d2UhSXNgfkR7WmxeCno8
K2BLJWR3YDY1MmJqd2EwR0FSLWhRPjxCZ2FIRSVwKjBzI214S3o1VldJM0AlUy1AJjlFdzh0UUxD
dmwxWDUyVAp6bTdXfDw1UnVLWEkrZEVMMDZ0Q1RZQ2FsNW82KGViUlNwSDt8MkR5ems1I057VT9D
N1A4Mn1hIzdfVWN3dU5SQiUKelYlelpjdmV6cGZKO2IpNUVSNFZKOSFxbEtWRWg9TFV3WmNabXx0
fC1fOGFvK2I/Y25yNFZ2UUVRNGQrVHgxTyZ9CnooTH48N0RNPndFRTVZeDBuWnxnKkFETFk+TzZv
fXVZQUB5ISRydE5NbVJjKlA1ZUhSfW9vQmZkJWZ9WGRUZCRfJQp6MklkVn1CU2RWZypBdmBhZE1X
RUZze1RyMV9IZGhwNll3WT9jJHk7NkxYUV9NJHhnMVcyaypPdVFpRGJ0UVNOOXAKenQ7WEVAPj5W
cEJYWWE3RDc+fXE4SjFuUHViSDR2QFpyQUdJR2wjeEFVRUMoR1JkIThQbjZJV15ibEM4Q1Y5ZFB1
CnpTc0RGdUA+Nnh8Qn13IVAtfUlgTllqKjlEWjtpUnFRK3dzSnZKSmdFYTk9PVMqU0pOO3B0UyVV
Nj5TVXpDPCpwVAp6dGhxeFd0Sl5kQE1hMFVSMis9an1xKil2WlFKST04cm9ZKjM3Yj9sd3ZmSldV
ZTIjX0lWe15rPWxxaitUQSlVczUKenpGQyRfPm5AbTskKldzKDxtTjtrJnhGUG9xZ0RPYDcpfnpL
NGhjbXApRG89OTdsOUZUbjttTlY5eXo4Zk1wWU96Cno8cmojP2lVSHVQRjlMU3hQNUMwcVk9R0E0
eiopWW8rfClRZj0yeDJQYmJHa2c/VE9FRS1mWSZFPDsqNEtpT2lNTAp6ZWc0TT0kOSRwJko0X1JF
cllHKCNfZFAlRFZyaUchPkdfZm93Z1BefENMSzlVOSQ8IVVUPUh+Z1JAZ2VuPE1KRGwKeittT1gt
WDRoUnVWP0JkRFhxIzU9N0szazBUJnd+MDVRJDwtMShgYHVCVjxPaE8mQEplNCRYVm1KVl81fnRj
YFV2CnpKTWAwTW8/RG1VXkYkdGJINT8tWHFNdD5sKkVwJkMkUG19OT9APlZ9ZVlFfEYkRnpheXNq
SmBLRjszZlhgcF5ARQp6dTdUKCNJMl89fXYkM3xkTGdpJD5QKUU9fDU1YXQlRVJWdnRXY2UlaFdF
S1h+UUp6O3U/algpMU9SWnF4U0B2Vn0KekBMeGBpLUxOTUU0aHYyVkc8Xkw1c1NiQUQyT3MpU3pm
JWlCMXA+WmNaQV5AR3tkJm9VXl93Syg0S2JXQj9uWClVCnp5UXBgUDt5QiVLYzdEYXY5UmsoPkBE
Mm5VeTQ/WUhFaDVgP1Q7Qm12SjFWYjAqZ1pmOXY2dylLJEsySlpnZ1BGbgp6Jm87LVgjPz5ENyVm
VHZna0x5X05sTUVHcUY+TlQyJW8yOEVFfUM8VUJCUVBhY0UlJDczXjh+ZTEtVGh5JEV+e2gKelc4
REUoMVoqfFFzbzg5NnotbUIpS1VYdmtJVHBySzY8Nm9DM0J0SiNZOUk7YSFnR3pTWXJkY2lRP3Fo
cXB2YjRlCnpRU1owdWJ1QExDUHFrX0ZQSl4jcz4oal83eWBrQSpFY3clJGFnPjtiJXo8WjklfjdY
QHg/LWw0NlUjNX4jakcjZAp6Q0RSVCl2PCl+OCRFNTRRaX57TUFUMTVAKjVhKHdeTGopVXVOKGlu
Xnp3OChZdzF1c0MzSV5vKnRkU1JZOD1KaUkKemx0eVdMJDZ7LUZYNXpWQktNUUs2R34lRGxqPiRp
UTNVVTdCOGkxNmNZfE5xV0lMfUV8djA0X2RhO3hYSz5YeiVkCnpvXjVmTGp2eT1MJkN9azd1Q1JF
Uz1IbEYwdi1QTjUpem9eQT1HSVAoNHoreXZ3TGFTRk91RHBLNSN3ck4mUC1WNAp6Yk1JcV5vbjt0
XypWN09ASnsoMjNLSmFWXyFDYnVAOFI0Ri0ob0ZeKk5ISGhvR0I4eDZpc1VmYnAqaU99a2gyVkUK
ejZvNncmQWQjNiRHTnttVjJiQVhEUyR4Z30+TEdRcEF2I3I3ajJWekU7aiFCUVZzJiMrMG5vTDlq
XmtMfXRncCZJCno/STdqIU50QDNeSmp5Nko4YmB1VzE8WmNpYVVBPl4zSUwrNDFxVm1nV0BJdkpm
TFYwMHo2Z19VTXBJd2Ypb1g9dQp6ZEV8PS1gLWJTKEBVXnJxIXYxQVI/X01oX1dPaT0hJHdtdG9q
eX1tVkhMQi1VdH1OdG0oemY7dmJMKmcmWCpvJlQKenJYPmtJbyNHOVFqWj5wTGdpR1NHKW1fdlhu
a0ohNFptI3JBSkI3RFM2QCtQQUR6PjlBY2pPK2ZQOGcqSjxYbnUlCnpXZHVkZ0FgIzFAU0x7d1Qw
VHdNPiQzJj5RQEdPZlY0fn1mQUlPWTJpdmY4clY5U0JVUUhqOzlDN2F3ZD0/OCRDawp6WDtZcils
QzBXb0s1TjxKIzJUbHJOUGctZ3Y1VTl1VmctdjxsSW10Km1BZkgjRnFaOyhpZkVgMWlyJXhkSG8t
UWAKemVkbWB4SG9Ud1RCc3BITHFfXytzN3prVXNFZ3VvNjgpUnc1XkU+LWdgbHFQU1BLQ0RKOTV9
RSo3Yk1CbmEhcilnCnpBVit+PkUjcFVleVRrcT8mQEBjcGtyP1BINkFYZH4kbFhKMyQ8c19EVmRP
ZXo1S0pXWkNGYlc0ZUd1MyNGRUhrJgp6bFc3clRpWCM7ZnN8VklESVR8R3o3JkxeaiYlM28pRkNG
RD55JXNFeklUKmN4TjxSc30lLWlUel9CaDdNWWxjQFIKenRZNkJHJEFrPDd7KVBlYkp5JWM2SGg8
TX1ANVp7RytGaTgkbWZOQ05kMUVEYWo7bWN0eT4xQDZoKzRiMFpxNCFiCnpUYz4rMVpkSzF7RzYo
UkQqO2p0YkJXTyQwSG4rdXw2aWxfWmd3TTF8ZFFPRWQ/JGs9QkhJXnl2RGFiMXtKQGgjdgp6V1lJ
eHxUdiVHITsjV09SM05iYUskJUgkeTQ+WnZuaEU9RmllMFRidUBhazJyRFViSytGQlkmXnMraFpB
WFB4REoKeis2Vzdvb2pQRnoqZ0NYbCM5QGg+RCQxV0RvWEVrazh4LS1SekVQVjRPI2s0JCoje3x5
byhpNTNpKFM/U14pVF5jCnoqYkt4ZkV0SkFqanE9dFZrWVcwPiUlN2pBe144SEdhTHRQWVZaeSRF
UGdnVz1SREU5JVFCQkV2am09aDk9WSlDQQp6bkc/PiU7dVMyZSR9QXNgbUoyKzR4MC1AZUVFUzQl
b3Q9cDJYUjtuOVIzaSR9MWU2IVdINEU5UjZ2dTZ0YzlwZX0Kel5OTHM2Uj9vN2I4NU1VeHFrP0Vz
cWRMTjxMbz9NdHRAYyM2UHpYbl57LUw+PjxGd1hOaDJuezxnOCtQTEwqVnhyCno1YzsrfEFpeVlq
QTJFSmhePlM9SjRPS2JlUyQqKnpwcWBZVT9YJUkqeGFINWppZmNIY25Sd3U+IzY/QVJAOWU2Rwp6
cH1oR351ZGlFaSZpKDQkaHtOfUdHK3gtMUhkIy1WcT01NHRYYT0rKlJ+ZFk2VFMhQCVgSXRveT1r
T3hnQ1Y4KyUKelhzWV9NXnZjZ3pmPyUyIXglTlBFKCNWRjQ+IUk3PFplRnFFWTd3I3JZY3Vpbkln
Nl9AQFlUSjBGfX08NCljNjdDCnpwQ1c+QW52Vit5VHZ4eys+KGZudDFBWEt9KWZNSTdhcipoYVly
ZiEhNXNSO0RyZG1SLW0pR2lSTnhqbkA8RE1kZQp6WDFoTVcyPy1RN1lWYEJVOypPMWZBcFJpbGgk
Sm4zQHB1alRsWHY4d0IwT1Qja1k3RjxUTGl4Qnc9OWtGJmh8UH4KekxpeGNwVzZyRG9vRitxRm9p
ek4rKksyNCVRcz5GY0t4OTZBaW8wfFR4aWkmJjVlZldaPDckRigqdldlSXl9K2J8CnpJdCQleUtq
cUA+VG8+JlhycFkqKiltNnsoalF2VDxGWF8wJHotQFRWVDRnbTZzcl9vfSZpdn1qU35fWD5VVmRR
Qgp6X1RxZzxGYXlyUyNRMz95WWpJYmlZNCgpTUx0OXBeSVpoOUs4U2w9fT1LVm1+d1drfnpWOHxj
V0JYPDxBRjBJXlgKellGMUo3JUQkVkZhbDg3JD5EWilaeWRicG4/VFNVMVpiVWN2MCR5K3Z7WElC
a2JIUUZmOT5LMnk7PV5qOXQyNDUrCno/UF9LY21gPHB3a1BQTmE3TSZTaXZTa2Z9PXV1U0tlWjkl
RXF3U15UVE1YZjNJblFVdkhUYXFIc0stLT14ck57Twp6dl9+dFcje3doeDtVbnRELThxeVYjQ30o
cytSJDh8SHVkSXFvSXg+al4tUnx9VVg8ZiFgJmtwV0tpYT14bntANHkKempKaXR8Um9XUWxNM2oy
LXIpcH1PTkY3OFhjRmNIQmA9S0JDKjJxPHIjajk8OXVIOUlNRGZOcE9UMndsQTMmcDwqCnpCQ3ZA
WipPKFE4UlNuUDl1UVRSTSV8IUlxbmcpdjZDNnolNVRWMn1AZjZOUU49RjQlM25VaF44aCtAMSFL
NmpyTgp6SkFiPmJfZEUzRztRVyN2TSY7LTs3ZX5wO1hVREh8RyheaFEycko/djF5fUI2e3lHM0Vp
Yk9UcHdedWZ1LXw0WEQKeiMlU3pgJDlDN0FKKHBnTmp5MGVeWVA+OTE8I0IzXzJsfSVeT19Yek9s
c1lEVSQ8TllnWmwzcDdRZ1JCVWI/fEtrCnpCaU1MSiFQTHEqQyZ5OyhAOEVWYEc1bEZZLThMMnZN
PiF6WkVLVT0mKlg8alpyeHRIJmNwM0Y2Vj1SdkpUVV9VIQp6S1l2JnMoSWxXUDQ+TEBzbzEhKChQ
aXdVXk1ya2dTUyV0UEBmV3RPRl80JVJQYEs7UUI9O0VObjdaJXVHITBwNC0KeiRARTsrOG93cFdl
NkNweiZOT1RJelV+MVhRQEVDJjlETX1gJiRjWjcpVVA/UztkZnpATCs1RClzbiZYeWVfajYtCnpr
RzwqRnFvS0kzY24yKzBgdEh+YEFWK05ZSXtEQ0hxTVVrV0Q3JHw3cT17Z0NLYm4xNlZPYyNzcU9V
OElHPzNvMwp6RTdScyVjQlV8OTB6UjJvaE8+P3B0Iyt7Y0NOIW1mI2B6e1lfeiYqR3I2amxGR25k
RDU0M1JgdXoxbFQtJU9lfSYKejdGfGxNPFBwKVAqQ0JTN2lgVTxRTjFJN2FmdnJsZ3lIRG1PczIq
VHElQjU+YjEpZ3FFJVJiJXFgR3RiYytRK3chCnptOXtOQ3xIcm9qTUkkYG8mYTB3amdNKT1ISE09
OUp5QlhHSD8jbX5vbiNkanZfUGwzKUpoR3lVWkZnfHpQUmJhSgp6MkQzfHohZjt1YTRLM3Nzanom
fSZXcXFOZypDS0x6VmIhJiVtLU5rM1J3bVEyKCFhazdOaXgwU0JBfj0tXjdHTFoKemxfSWZDcnk7
Vj53eEk9QE4kISo2a2IjIUM8QnBgVWM4PSlie1ktMV8zPFByfkVkZ04+enhARHheeW4jYXJNTjlK
CnpUZz1QZHVzRio3TzRDPXJ7dSlOdmRMZlk9Yj5AcVAhc1V4TEJiJFpZVlFyQD9VZjB0YHR+V29R
JXZvfk09eXNESgp6ejdqN0xuZSFLY1ppbDJUaXtfeER7cFBfZEthVSVLWWdVJXdKfj0keFpDJWZe
ZVgodVVySGhve1VoOHJHYHN1KnEKekloRH5UeTduZmxkOW5PSlVSP1czPipJektZb2JRbVA4Jklk
SyZteGdsK3dyQGtuKk5SP3Zyd0w9dXcraVkpKm5vCnpfM0hgdkV0Oz1zI04zaytMcy09blhfI2lq
Vj1VRTk4YVopJVQ2JVohQyt1dDdkMlE+Pz9CUzRoY0dkUU1ld25NZQp6ayVrcW1fJXI9bTFNd2NF
YXE/K3B5WlJxQHp3eWhEJVJzJmYkTj1UIU1iITJlMFU3YW1Ac0YpYSpYJmJXRXAmLUkKem4wTXV1
ZXhpMS1YaHprWCNTQCRIYU9TUDItPjV+Zzc1P1hjPiRqWlZ3YjtGRmJEO05ENC0yZlBjI3Y8c1Fy
SjBBCnpvOClGdGMzWSNtcz92akFxM3hIcEJsbGJmXmU/ajFTQCFkO05hNGo3JFcqUkp6PkUrJUNx
T1BNLVBTN2NzYzUpaQp6WmFCTiVZNDc2MDdoRGdgb1EtTENfSmgyczIoan1VSG02PHI9Mm5PfVBD
UExFPnhweWM4IUgzOUxTPk1WWiowJj0KekZadFZVbFEmRHlXO3Z5d2ApdiFIWCloZWJhfGNKNUVg
dV8yZXkkc1FHXn16V2QyWj0oYngmYmlfTyR6Pj9QdD18CnolRWhsPGNHbk9IPERrTyVBRDNDTEBO
O2VSbUhnWX12P2JXSEpLU09gMHVNZEZyQ2A1Iz45TFZ8eWclb3tjIXxSMAp6TW9pQG90TGVeOSlp
IVJtWkhEeWdgRVREJHBqZUZSMWhVaVQzMT83ZjBTXm9+Q248RW9rTEopQjA7IUVhYn1oN0sKejV2
b0k4UEMwbFRDSCEkfDQ2OEo9Z2piJn54YThybXRLeV8zITwwVU1KRU5lSm89PFN9ZUlAQzhfN0I+
YDBwdVVmCnpgPmVkPERLeEBlWik/VTJMZiNUcCRBLVU7TUdEUzVybmxZeVpOXi0yQShfTjt3NTZ8
cXJlQ2c4YXl1dUw/I2JRaQp6UlY4REolQmFoRio2dG1ibDxoXlQhSmJXPDItOEpGcTRtb1BjRW56
d1peQCpQdmgzY2x6eHZ1ZT4qOEtQanBFN2IKemRFYWZneVhpfV91UXlZNk1eeHIoSTxqaWI+JGgr
JVdCVH0+JTx3X25qQyV9dVdqOGs3eGVJdnpGcCtvRHEtWGd2CnpIJXsrKmVrT3plZypCXnJAQn5o
aSF5WSRgOEtGbktUXkhRWCZBdVI1SjFqYztKb2RJKnokJWtGZHMwcjhycStgUQp6b0QrZi0pUnNV
V1Q/QEhCQ1lWUV9qKyk0azkxeHAxaiVvSkhHb158SDY3SUIka0xEZmt8RT0hQWlrS0hGVXtwQU8K
enokRFE7Yml9K28lRFUhYiVHSERYJUE/RmQ0OX5xTkBidz5LISp1YnApP0BuNzdMb3AmPGd7Qzlm
JStBOEY4OEVPCnpzUkhabWtNZ1FiRFgxNXNvKmBYS25fJmZpRG1tbzV0ellraFpaMGltPD9vRXEo
V3YmcyM5UFc1KTZodSs/OHFhdAp6ZlJBMWxgRyU5RExRa2pAK3R2ST00NVZCT2FAWnBBdzUjPkQ4
eFImXi1Lekh0PVM4diFwYEdreVIzJDBZNDJVcGAKemRqIyZKNEIzUFgjWSgqJCRmelBLN3krR2M9
fndLX3gyQ2Y0eWN+WEFlej5lZnVmPnpZV3khRFJnS2dQbGx3NjsyCno3TGlqWCNwZS1Tb0piVSV3
Y0lPUEFEZ05pdmJNY2NqKCFVJDZRSEVlQUFKLWtLa2laQkM4dGY8JDBMYm04ZWZDagp6d3J2PjUw
NTNCflh0WE9vYio3YU0oI1dMWXY/RndCQyM2VU88I3BoWEMmVjZscTsqKzJhZklwZj0tWlhvMEBu
fX0Kelc2R1NQMEI+Jih8NzhONzBiLUt5PExDJUcyXktrOElSck17Pz1IKHs4dmlme2diU01uMCFx
XiM0YStVUmtmc282Cnp1ZVQxR0hEKGd4VCZTe1IyKThfJEZNZCo/Xkx0dyQmejt1JD9ROTtMODVt
M1VoM3BgUXF2e0lnO3whPCNycE9hYwp6PnIleE50dlBmV0NQbC1IOFBxNjYjcV9Bem1hWCpPKT4q
WXVPVCtENlVEb0pwSWE5KCEmXjJPbXlMZztScWlEMTUKenkmVmU3UmJZVVRAMjwoMnZje0FLNj5Z
ViM0S3lOaTJ4ZTlyLXF6aGlBM2ZvS1ZXeFNkKFkqO1oycyVGUVY+MmhHCnpxSnZ4U0FQT3wte3Uw
Yk9ja1Mxd2owNCYzaTtZOXxxKC11JjhHM25PSUdsPiRgY088TU18WkwmdVM2RFZhTiRLcQp6YENS
XjtGQXxlNV9OPytAbHtfQmBeOVRUSFBaYig1MF9jN1hxKF8rU2N3bUoqYnJLTCpxR0MwPE5IUkR5
cW9IKGkKekF9JSY4d3x0dENJfXoySHROWEx2Rz9pKyE7ODd0YVEjZyhRNEx0YjZ2RzskUCE3N0t7
MjU/eUxBWWtBdHkpSXwtCnokQVRiblhpVVZxYiYrREJjd014M2VONDF1eT84eDhJeElSbVFZYU9S
QzZjSSg+cVJsXlY+ZTBIIShXekVFRHptVwp6SnZDaC16cjY3PjwxPX5HYGcxPjZqNip4emRCa2o0
Tyl9OS0obTdMSVM2OD5oYDxiKypraElUaUh2ZHQ9PjQkamgKek4+IXgkb15fQVVzYCZAN2IzZHgh
bGU9YzBtU0huQS1UdFFuJkF1ZGFfRkdrclc7Sk0mQSRlMFkxcTdlQFdKOH1PCnpNbDlsMFBVNzB5
MCpZTTkofCoyOHlZMF4yK259d3xZeERRY3EzSVIwTDZkcHklMHJpe0wmX2VRaGMmTVpvbkUmaAp6
eHErMVdWYD1HWnM8PlR9QmBjMlBsRXVlNlJsZD59NlpFSGhmK3pUVU80Pz15KyRjcW9fVlN0e3Zu
eT9SMnM4UkUKenNnUnR8Rjdzdlo5S2NrXz5WdWQ4JWtvYztTTUc1IVMzNWlYZVAtbzglU1ZWdXJy
Tk58VDM1WnxZVkVELVByQ0dkCnpOKn48Uzc0TXBVYHw8SUVLVTtucWtfWUZsRi0mck5nJnUrMjlj
T0VQK25Xcz89NygtaDIpfWdzRXtUNl5xSWBZcQp6cS1WcEE0TzJJUSghK09pOGZTMExtZy17STZS
bit3bUxLK1lNUU4zdGdTSGMhd2phaF5Ld2oqJkBqZjBVaUhXayMKelUrSDdKd3UqQklQMG99MCNL
ZUh5U0skMmUpJDMkPj5IZkNBQ0cwdEI8bnw4dkA0NnlRentLaUlFejB5Kj5qN0Z8CnpGPkteS0hf
fnY1QmAzK1AtP050Z1BFSzcjOWNYKClaRk9GSmx7UVBhV2VMfS1CYEdgIWVlMUhsUUNDKjEpVCYy
bgp6KkNxZUReI0lXYCo1a31nM3RFeTNsXzQpRko3U25zUlR0Y255aHV3R0AhSVBPSS1qNHJfdl44
N2JeJDY2X3JQRGMKemBAKWF3PDNuQShVdXM2VW4yOWd3a2tkJGN7R3hCdFBSfn5yNH57RUdqYEtP
K2xeMTdqYkhDVlR3aXI8YHRAemxACnpyR2VQRkpoOH1hb2AxWjJEdjskTVUoUUM4UV5jJDBuPkhw
I1VTdjFROUo7VCUta1FERFc5XkMkQDQpVXxRfW9VMQp6Xm5EMlNGVFhQV2R9YUo4MzdxUUhjQ3BV
cDFEMFoxI3YtQEZwUT4wWjNWa1A0JmVadml3JG0lUE5CdUptTylrJCoKeiozKzhTSzZWPm13XyV0
cSk4ZCFrTmdxKStVTnE5VjVucjhtUTRqcjVqOzAtM2U9bkNsZFFFenR6flhPcFR0fVU5CnpWaUF0
X2JtXntHXzdtZUprLVVqa0Z7JEJOdDRqU3tXel9Qcm5IeHRCQGxmbHhyQGZxYVReIXp7SmVAKUp2
PXdKegp6fE1yb349fCtDaEMjcVY5KUE5O2lrTnFDUHlVcmBad3dBPiVxY1JVIUoyYlJ0R3xDLW5v
IWsxPj8+VUhXe3lnYyoKej8oPClsK1V8UTZedSojeShVO2ZSa19JPCpCO0c0ViprZ1A1ITRwSG9C
Pnd5d3Z1X2VFK2BMX198SyZIdi1yfX4hCnp6bjxqKEkoalBeWURkMnlia1EpTGBVM2d0OD1ZYW8o
N0x7SHYmdWt4PCVyPm4jbWJNYiRVaT5GIVZURihuaWpXSQp6ZUgwXyEoYlBqTSk8K3VNOCpWTWRj
RV59bStmXjs/XktHQmI4N3lkOGRxJGRoSk5JcH0tNUR6MXVZbVdXVTlVKiMKel5kMEUtQiE7RkV0
UGJPKHF5WW9KOD4/djdNX1E0KGx8eGtoPGA9MFAqOTFKYilCMUpVd3xHJit1Nj9fXllKUWJGCnok
MypQPGB0eSpRVShIZXVsVmhWNT8jbD1xdCtZKitJT1k/XkFkOStoTnZDcXUkKlVUO3FKfTcpZEVk
YCY1MSFLTwp6JUFmWWpmNFNBJFNMQjI/KUF6O1B5PnFWcCtme0ErZXwjMHZhPng5VDtid0M4RHsp
Z25wbVhXREo4ZGhMbkRrOGIKelcxcj9AMilDdFdKcUVmVyglc0dNVk4pRENgb3prc2QmXz9CUkV8
enVZQHpsKTZLQ1YyUERgcUNuTztFTjUlVEhVCnp2OXhoaVNqYm1qJm12eihmOWE8YGM+VmF0WiZ+
TzJGWSNXPEY2NmhrQj5IWXk8aU57Q3lUOSN5dEJgZX5xVDU8cwp6VGZEZURIc1B5MEJGY3xFV3Rr
IT5CMjstdkZYOCU8T1RrUWZYUz00U1MzRD9uR1IyOWFjM3JxeElrPz0kfDY8RVIKelVhe1cjR29w
VnE8OEVNTk9PWkdWQDZhJH4rbkhteXMzKVcwP2NUS0F4aH5SIUAjSXA0RFRndUdxfVc4QlNhVHt0
CnptY1ltenZ+OCExQyNNYyM0U00qP3M8ekUkcEFfNXA9S1pndCZOTThrR35vTl5BUF4hTkFQezBV
aCljTUpyZXdBWgp6RDQxKTMwd0k8bUUtN2tSVzZNLUNGWEQhWHJEbXBXZ1NkbiFnKGcmJTRYJkFP
eE1wY2krY1p8ell9UGMqKCEpSTAKemI2eE1aYCtWVThvTzhKRXxOWn57P2tlbmV7T3FVTUR5SSFn
KjA0NGtKNWpuJDdeWlZiWFZsZTZZXjFLUXdWfWJKCnpIZj5UMndXQEQmVE17M3tae3dkR25JYE82
b3BiNUpoKFRee2QjaVQqU31TNnF4bzZIcSROVyVXSzBDV0s8XjAmIwp6MTR2JXRmJChoZkFFdXA/
THcyciotNWttKjhpZjVCY2pNYkI1djM5NVluZT4rc14rJDsoN2MhbjVtKDNXY18jfUwKej4lYU4q
O2BQMHsrRnFgJloqPVF4WnpqXzElfnZheSlrSyNrKk53STlzbDc/OSs1RiRveE1TNnBVdSRPMXh3
byN4Cno2M2NxQChASStqdjg1b2hPUjthQnc+fF9sQ2NyTyFeWlU4djZMUmRAe0NpPHsyR1Vxez9U
UDd4MW1SU3ojXnx2NAp6X29FPGBwR3szQGA0NzBIVE10SzBaRn13ZT9iZSozJHFeQ3hodjswZCl5
PWA2YnRsPFA4ejlNX0h4U0NwTTBlZSUKemA8UTdGZXleNEw8KiE9Rjk9Y3VKK3dodkhSYCUpPk9C
fE5OdDh8S2V6QXN8RmMxQTIrKiErR3NxakpaYG4lfn4+CnpLRXQ3Wm1UWWwoSShLVlMrNmt1Wj93
RWNnPG9nKk9iXyp8Z2RUSW9AUyZjfD9fano+MUNFdWN1JWBzPFJrQ0RQMgp6TUNYYiY+QUImaFVY
ZWUlUnR3JFRycjQhTVE2PTxEU2o+dzNoLWRWZHl5dSU2SmVJQ2dVa3FyekkoTHBVUWpLeVEKem12
KmUtdipPO0FOSyV4V3BsezZRSXcxdDFeUGk3clM5VzJ+R2lfczN2fXdBYnprViRXKlI7e0BvWVUh
Nzg/R2BkCnp0cSomdWMyU3B1VWk9V35FKTd1bVgwKURXMU9AMXc8YjAhcSlmbkI9Xm1UXkApMFNO
QiY9bFgrSTN8SSE5YUYtbAp6a31HbzAzJWtlfk1CNTIoJTlSfld1YUdhfC1gZztGS2g8eTNlRzRj
U2oqUVA3XzMoey03ZEM4fFBJe1g9TEckJl4KekhTS0VMbSV5fntBV3kmaDIzZ3U+dDk8LWQjSj9O
SS1zdT8/e1kyWWFJekxoYWlMNGprUkE4RnF6fmNxJntfbkZ3CnooeWdQbil7ISkxeT5KVms9Tmpl
ayRWPmNHUmYpa2hOPF4lUXhnYzd7YnA4SjdaKkRlIT9AKE9lUXY4YXhjTysoZwp6Q3F0MCp2fnZw
d1IpZHJgUm9AY3lucWdeU3g0KENhJnEoZU1fdzQlbnZ9XmlIKD43aGZyT2dxd3kjamYwQzFPZXwK
eiZ4K3kzcGtSM1olMTA0dUA4Pz9ZTFFUdH1YOCEjOTF8LWBSTyZxOz4tWEB7Wk5EO1E8MmNLZjZH
bnZrKXtJSyVJCnomZnFueEJGfGMkSFJUa1IrdG49UG17TDVYRmI8USs5UW1uSk17dXN0UCZMZjkh
RF8+RVREfmljKiktKFBLT01uRAp6TCRRdmJgOWhoeUQ/NTErKXpMbkheQFN7JHA0JkdHJH1lSCtf
NmE/VnFCOWxkX0l+TS1II0l1MkIqUylaWEo0ZUEKejhaaloreX1RRklFUTtrUDJgX1UkelZwQHlq
TEp2WHVDP3RzZUVOXmFgPkpqcWFSTWYlYUUhRUBoeUZjNis3MEdKCno5Sm9IU2BveldHeVk5eyhl
SzVWK2N5WF9uXlZufE5uWCM7PjRxP3QpSnc+XmgtIyk1JmJTUnRHTWN+QXdNY2cjRgp6eW5tPzdT
dnh7S0lQeUI3SU9EVl5fNWFFNCEyU0xIcHN0QDFxNkxQN0RLSylMI3BYPWxoTldlZXh3SmRLYyNW
SGAKemEoSENidVY0SytsfmZjeHJkdipRM1o1Y3pALV9ZNUJ6Qkhqc1N2bWArREsoMTZZUU5AcFVP
QU4hJjx7TyUlcTt0Cnprc0MheGp6YzRBODNJZyZ5ODk+Qk18TVJVWn0tZmckRl9WN0BtZnJMN2Zk
aHUmMmkpQT8lPllZX1B5QElsfHBWQwp6b05xXn1oflFSYTI4SDZsI20rRXhBIVJCJGY1QyYzekNC
fkR7WSZodk94ST5hZksyal9kfCFDVjhASFc8VnNFIT8Kel5hQzRieE5RJGJKRCtxV3tgPkk0TEEr
PF9oKkA5T2p4XmI+dGdIO35nbUR3SW41ODtBRkpDbWU5a0AwKGJLd3hUCnpvUEU2SU1BIXBkX08r
SmQ9MEAobU8yXlduZmpDa290NmxmMHJTN0p4RUMpRDN3PnlWQWpzMT9iQDVaKSZhfHI4RQp6am8y
Pl4/TShtSnAyUU4hT148K2hkclM9WmN5MkVvN0p6Wks5flQ7TDszcD1hcjZUfExIQ1Imb1BzOCVE
cnRyP3UKendrbT5NV0dmZU02eVY/UjEwcDYqKUFIJSVFQjRvbyMyKHFUXlV7MXVYeyUyMUVaTnY7
bWZFSlVsdVkpN1JAZy0kCnp3VjZhKjFOKj9wKEhHMndGRCNjSTJ5a2ljcEw5WkRfakt2aEdqYGh9
UWBBcUMoeDtAKlVBUWxne1EqNF5YdCFlTQp6PDxSfXgjIWMrbW02eDc4b1N5d0M8PEVGc3hFJFF7
QlE7aHpYfUNtZShRNUJ7d2lJfV5ART4od3BwUV5kKip4Ny0Kel5EQVNZeUhJWTZ8SXlpUSRBK1Mt
eSVHI05oVFdBSkgwOWVAJmImJkZVa1lyYTk5VW4tND0rRS1XM1FAT2NkbDMwCnpkK1deJD9KOUZk
S1pFMzVDSEFuenlPSnJqQERoOHQ1PGl0MGd5UzQpS0omVT82NVY/JFkqbnNiWiMyNkFJaDU/Twp6
dUIrRlNkLUxaWHpmUW44VD9hJnlLI3stUWotYjh8JDZyMVQlMWB7TCFJLWAqY3s7MDRARDdZPiFy
UThGWjJ9eXgKek97ZVJpIyZkRHBIdndfUVM+RzZfKkAzbXwrTT9VK2EkJDkzMk8kekEoe2NBWGIl
b30/P3RHQ0FgNzMhe2UmflQ0Cno1akthT2laSzc/KkI7ak0tMW9GIUpBU3wyc35sbSVaVSFiNEU0
OWpfOVlMYCUzJj9WOXM4THwrKzxmWk9BKUwtRgp6cDdHfGwjZz8/empvVl9FWncpNz1sNlAoOTJF
bU4rS2dgWkgtQj89VlgqWEJVeG5wITtgX0B5dzl8Ny13JH17JTgKelpAKWB6WVVnYEl4KDxyYjBZ
aU9iTDdle1hqKEYpLVcke1d5RCRlXktPSHhGKFFKQjhMLUBDTUFJX153dXc3dWs0CnpkMDJgbjE5
U1N3ZiVEU2hkMC1uVVcqNzEqYn41Wl9taFRPKDd0eSM5Kkg0Zk1aPlhVSlF1byF0czlHZiNaV3Fx
Owp6JU1GOVI1eHl9dWF2VX4yN0NGYVlXflhCQVlETmlKPj9gcGd2Y2BxM0NUQkYpPkt8YUMxLVB0
UzReJnw9NUpiNFcKelZ0PSN1SEBvWHpsRkhOOVQ7bzBMek45QW8wcUw0OTNGWk5BKFNKVFc1Ki1s
UkNjSFRpPys0NHkjUEQ9Rjl+NUZHCnpIU213KytpeVFUbTdhTHM/Vy16cDNPLSVyOF9eeUJxaVZa
KFYwcUA/JU5MK3o2dGJSdkBqQThqXz5NWk4mRFV3awp6VStiI196bTxRe0Z0PD1qPlZSYkRTPzZT
UGEhSjs5bmpmMzUoKHIyLXpuJHQ7UGtnZVFlZSp9Kl9SUGMyT3tsJjMKemxPSyRoIW5qb3ZBcj8x
JUwlJjVhNHtMMDs5aGU3c2dxWW1gY1RHNVFpJShoZTBoelkoPiFCWSlvaENfTExEKVdGCnpWWHo/
M1RPKGA/MnAhfntNKWRQV2FRVGtLeHJZTndybikxPnhrUnIqJigjQDZIWnwpK3lVVSRVOz17JDg5
diZGVwp6Wl81SVdrV2pefT8xJjZxeUxJWl53bk8odlppS3phYHdhe2VDTU8+TD5lVTlIeml4bSlk
YDhDWXdTbHEmRktHUkwKejhCRHJ5e0ZrcSsxbz4qbWItfGJsdlFKcWAkRD8lVGEtd3wwMlpCKj93
eF8yY1lvJHBsdVI4OXd4OV47TCNlR31qCnoke2tfS1h5Rm47dXJOcVZkNGZqUnFgYHY1eXMzMD1H
OT5icFBtS1dBKmU/Tmw3NTk/ZSZJSHVZbmZNck1Sb1NIQgp6XjlIKHYwMF47eGdwRzleRGhqRTZy
IUAwdjRYMnIhcHQ9bEw1SzJ0fEROVzR8QWcwRjs4WVQlU2EjaDcjJkpzbTAKektsdTFeeEheOXlQ
R2oxTXJZN1NOc2tQQ1AmfShfIT9PYDVnQ1pUUHV3KmE/Z1d0KFVpZDN7TT90YXM0azVuZzVGCnoh
cXIhJWlfUV43UHh5PVFwUitFZ24pNE5BPSVHNkA2fHoxR1IkMH56Jj4lOXxmRnRBNUdOODdTKigr
d0BvS3JncAp6c24tZDxZTmZGOWNsays8a1hsKGBXb2lya0B4QlRqLWNCbkRmR253b0xGezVQPzxs
IXdwYUxQMjJNYEVBbzkqdzwKekQ7Zjk4UktTdk4rd1ojN1ZDUnNidk5RbDRNNnY8Q14rTWZzUUFJ
OGU5dnVINWU3YkVfYWw7TF9XfDRsP3F2TktWCnolQjA8JjhlR0oyPU1GQF5JSiYmJEJWRUZxJXk0
T0d5dnl9b2dMaG5xSjx3TTBMTWstdU9TUnBqeUxXSis9dX1vegp6VHdAXjVtIyUzXj1ANz1eP1U8
fWxANjJ7ODhLRlV2THd5bEM+RklWNmEqRFBXJnF6RT8tVThKLXBtQW47KWhnJHsKelUpQ08wNGhA
TlRBVUJHQXpENWM0OH58el8+ZG9GY3Z5clBDTmFLYWZAS0RNbzV6KDl0KmslTVZFN0lhYURxRm53
CnpHTCZLN1hrU1U5cTNlOEJQXkVrUzBPe18pK2BXfnY2e3EmY0JePzlkOSZhMGh1YCFeKCk0QzFx
bnJIM0c7fllJYwp6S2lxYClxV0xGNnlTeWpBTC1xRm1zdXEzIW8wSSUrUF9vMjI5RkVGNXpwVW8t
IU94UDw4SzJXVz1VVH47WiRFRmQKenZMdVNuRWdlaE57IXl8bHF7ZTVrcEI3I2g+K0E7YlNiMUdX
QnMwfkghREhSeGNMMkFCZmRIWnpTP2g2NTwjYDFNCno9cDkmUTlVUigpcHM0d0B6YWVPVlpseWZr
cnM7VUxkbjJGQ01FY1JebWxZTi0tU3ApYVNVQEhkJFg5fEJOWkZ8VAp6M0pYM3cwNy1LVClRKj5s
RkBWS1I3Uz41PzsrTiRVVGBNYWZTN2NWdW11YXoqRCRhVCZ1K2kocXVNVH54O2h+cFgKekFWMDNM
VVYjNXl5eDFaaVVoRnhwbyR5Ujd0dWRTSz4jYz1UYV92WiE8TGBuNXtHWjYhWFJwWFpjaChQWD1p
dUU0CnpnfDEzfDBNS3RSUEskaV5tclQjZEMjUkJndGFXMGZRaD9LfHJNP0l1O052YUFhRy1pYEI2
a296YVBvUCRiR2QqTwp6M188amJqNGdWN3hiYSNTKEpMJko8MGwlOGZAMVZhKFpXVG9ORHNuNjhj
cjs4U1lTMm9ofjlWUT09VUVHWSpXQXgKenIpYVpaRCh0TlJRYXE7MXRgS2dZVSt7VnpjZmh8aSgl
cF8yeHFnNGdpQD9TSytxRXllYVVSQEd6bCsqezY3WGdtCnpOd3RoRyN0eSV6T31hQl5rcHg9WVg8
TDdLMTc4dWpyPFk/YmNKYlJKTkpUbn13N3ItVFZRRy1ANF82aHJLKlY3VAp6Vmo7OUB4bVArO1c8
X1VCM0l6Yyo5fWhCMDcxczUrKipfZFFJdSh0Ymt+bFhHTXAlZC1oWEhsS1YxMlJHbTgrX0EKeili
NUZiKXdiSVBMZjw4QHBhK0FhRGhyUzFLPitKc0tNRCE0Ul9nKD5KbnB9cS1rJnlFTVRWMSR3O35z
ZiVaTlNxCnp6ZmlhWjlnZ309I29CU1dWRHk/MzBYX1FWJmNrTishMSh5NkZNYUwhcn5TKjxIV2BT
a0ZCTSklViF6MjlnWkk7Tgp6UH59UnhhRFpjTXJUTEl6KlI1Tlpib3lZJlIlZ2U8PW1hTTM0U302
bkQ0V05tIWs3VUhLP2ZWdE5Ha3R2PHRfcnMKeitOUGwqQzxSdDNuNXBLKUw8Pns2e0dAeWAjciVD
LWt7WH5gUUZgTm5lWVJ8ZzQ9P1YwPUwod0BHQlNYbzN4Wl8tCnplTjc0Y1R6PF5fSnAxJHpKLWEr
ZXswcnlSU0Q3Z2BMMEpFezRIaGIkU2RKYCRMaWB1eG8wbEs3WXA3QThlbT9VNAp6WU4hPj9eI141
ZV9sbng5QCN+cnIhIWU8N0ZIfiFBazN6I04oek82d2V6cC1Keno+UUdBVHRQZzxodGMrdllofEUK
ejkkcDxoZSlSenp5OUhWTipvbXpObHY9dkhYWTVoYF9eIz1kRF5+Z1dFc3kjNyZ1eDFSKCRidklh
cjtXJEFKQ2Z9Cno4V0U2Uj8lMiUmU2V4VGBmU1E8VHl7e2k4cSFtNHJaX0lYYVRLKjwmJUwhWSMt
S1JgbVZDZDlWampFRkU9WExMKQp6OWNeJigpeVpldXlRUV5UMCQjZWxkfTVafDhGK1I5QT81UVhs
bVNQbD5sfiZNdnVMcDFuJFJ8X3ZOPVU1PzJyel4KekoxbmpRUlZJdCRDa01RQWE1UlV7T2Z3Mnw3
Jjc8ekwrNCtaSTV1MX4hI3BNfVdKVnchbVk1P2Blfn1ucil+RTY7CnpnaWJXbUJkMSVJVklvSXdN
Vz96RV9KTGZDazt4OzRHYV5UOGV2MnB1S0hlbFoocy1HK2l+XlM7YW5yKyZzdyo9fAp6KGhCITU9
I1Z6dHVBa3hsVjdsZnhtSXhVQ1IwcDBmKTl7UWB5fTFGKHUpJjNVaWskKCZiQmskQHR4M3VFKTU9
TFQKemNzdERIajJZN0NZbzRDVCMhTU9gRmk5OS1rbHdXVikweUZwIW99Pmc4RHJMOHF1MTdSWDFx
dVl3MUxnUVY1ZShjCnpQVGpna3tqMFVgRn1Ue0M9PSRqNF9mN1kkX31HJUYjcUAtOEpDYXpMbWNs
aWBrKEJeU3liYEImdX49T1MmUUBDUAp6IyZBTHJ5Zi0tTHtQVyh1KlYqU04hSDVmXmM8YVRYPnMh
a0BsVXFmRXJkMUhZe1YxVntheGIkcTZ5LUhBZHhvfWQKelB1UUs8SXxHbnN5TGlQT0B7bXpjWThW
V3Q0YTFyU2J0Tmd8KTE2MHF1NnExY3gteHImIztoKUNLNFBoKUI2XnZiCnpWWCZibT0lfEFNdTdy
fFBiU0kkTlpEaTxVN2FaUjw0SmRtVk9mSzV8MzRVXnRXNjxlSF8rVGBAczRuS3dXQVdycwp6azBt
N1E/VzVHZnlBOGs3OHpXc1JBY0tMKWozLVlYSnFXPENKO1YlQjNQKzUlb3daV1UwcnMraFdzezlp
QWp+QmQKemJDd15RMDk1ciNJbjI5dGQ5JmFwWG5wMVBvNGNxSVc+JHZ8Jn1IVmh2LXJWQ05KK3tk
PD8+NUhOeV48WUQ2WDdCCnpPeV5sUjVKKCEtbCNld2QzcXJjcmRSWThCZyltNmt1PD1ZRjlfOWMm
K0p9eF5ZRz9QeS0mYWxEQlVNQDVQZTE7ZAp6WH1SZEItI0Q4LSYycW9JYXB+NDZuYFk8fWFKTnxA
MUZlbEx3UkUrVzZkIWhMRWdaOH5QVztMISt1bU5XcD9XUiMKenV7IWRebElSNz00Xmd7LTt9NiZV
NDNzdEk5b29yQygmeDQrNShlVHM+V0JmM2h4YVU3S248cTQ5aTxCdjA/Sn1wCnpKamQoVkoxZjJ0
Kns/Z2l1M3YoMj1DfHFWbDdsM1pwX3E2c1BZakRtMFNMa1hkKDwxUDQ1PClUQDQjQmZMPyQyWQp6
bT9Fb0A8PTN4OHpeWjBYQS0mQ04lXkw0SVRSN0c/NkgjbSlNbn5fbSRmTl8tYGZIO1VzdDRJSWo1
PE9aQzF3aWcKeil0Jn17P3pPRTEhJXE7eDc+SXstYmZVfXl7Jmt0JlFVYXdORlJ8PnUlMlFQQiV2
bk49ayEzI2dTXiNkdmFqbkghCnpETU4tTkx5Oyg0cHNSeEM9ai1NTjMrelJyO1NUTDBWWCZ8TD9O
UlIlQ0V8KD91XmlTZUpUQzRhOFc/Wlc5QVp0IQp6RiVBZmAqb0xTI0ZJZmB5N1NOcEJfK0NSYUQr
cT0hTGhNeFZpc01LNloxZXk1K2l6eTVvOCVOJj1XfW0waV48XlYKeks3cz8qKGxwdHNNUHpgeksm
Q3hYSFhURi17PU1TWFJOIy0qY31lPipZdStLQXJidFZxYENVKGNAdjZjJVhsb0QqCnpXVUg/PDhO
K3BFQXUxN3lGWCpMSEklJmVFUzgxblByd2U0fnVpVnNEbn5XaEZtQmVncjxKMkt2ZFRPS2JuUn5E
Zgp6Qkp6QSNhTnVRIU8jbGw2U3J8K3FpcX09Z2RHRT4rdEZlJmspSVd4JGNxX0pMWlNuRGJ2cEFE
ZjNeR01rK29rbzYKeiRBeGhNTDRnWTNXbDRCczRYcjdTcnJHWWdMOEdNcmtWZHwqa1pgK0dJMXQ8
PypAbjBBPX5AbXYyNWFJcy1zLXY2Cno2Y0xFPHBwZmEteF5xWmIhTlBmb1pDO0orSGMmYU5KPkZT
RCMkb35aMzVuTjBpbnlidF54NV4wQCR7RzxldENBewp6OzM9UEhGRFNsOVd8WXQ/dzxeQiQzNjh6
a0RRMTk3ME1VR08hUVRmfEFaVGMhMzw2a0VGJnJGVkRmUi1rMUxRK2MKejI4M1hQelFBdDBTP1Ek
SU5MKDF+SHU+fj83dEEyQTdEVWFGVVhvRjdGLUszOTM3fEgqdShAREReKj11JWV6Sj5YCnpmWWRX
ZzhaOVJUdXFyOHRFRVVNJD5HMSRSREk/ZncyWUo8YXRGVXNkVHBxaXs1YjtqRFM1NFY4IztnQmcl
dHJuRgp6K0Z3dE56M00ra0pDVj83dio4PT5VKCpZYC1ZTTI+OCNqbzhNKEcpRChoYjQtb3BaVzRz
O08pMyVxZFp3bFZMYikKekNTdW9kcTFmaUBOTFJVNUchZnNmekEhWjg1KFJhZ1UlVTZqMis9WExo
fVB2WClnV2RDemA0NmYoZlYkJCFBZzc1CnpPdVc9cntPamwzNj1ia0RKfXFoaGZZOEteVmkoZV9f
O3Z8UkdUTiU8cntRNz4oJnlReExiT3xeOSFXOW5zaj4kSAp6dHRRRDYyT3F7dzZVUVghUmF1ZVFf
S15VI3dPM3ZOJVdeOUZwYns4aDV1fHdkdStTODliaVYyOCoja2UzTDBOdjwKeih2bll1bHIrRDFU
RHZ7T1NiQXdpbDlFYkpWWCslMnFNMEJoKyVSX0xaO28pOyVCODxRenF6RXhfWnxERllzMWg3Cnpm
MSU3UUdJWiNXYm0yK2A9dHJkfUJANl9HWDhrLWsjJSFKWmA0SmhIVlRIK1Q0I1hKZmRKZUhMTypZ
RyphN0hmQAp6UEMmfjV0KyhwOzBzdF9OU2Z6NFNEYGxvVkstUiMzcUstPkMwSjhDKyV8YEchZTdY
NFMwezkpe3NCQG18ZVBfKHgKemR1TzFsbEhJV3ZIKTtmTF5VNX15OWJ1fTw+UnJtTl57Zz1uSVJV
N0VTaVpCSnIjOz1DelEwYWNTR0xiTGh0e3FPCno9Qz9vV1EjTlFhe2doSnowfDBqZnhAYXw7Yz8k
KDlaWXVZVzNTd3oobXJEe0FfUihQKkpSa15sdVF4NDktSkZZTgp6eUhVaWZzRVchKzc8fHlkSDVh
JlJEcUdlJVkmWnJzdnFsTykpTWclPGs9Xk53YVc9biFIQHJUdz5KQEhwTiFhd1MKemE+UHxlOUpm
ZFl1S2tVOEkwcnFSbXE2YDJpVEpNOz5xRDA8U3MjZ1kkUElAYThHLTVSeE8hbmM2Z1gtUl9ubVBo
CnpMPjRmLWI8UH1VIVBwWl57NiNDcDExJk9QdUR9az9fPENuQXRfSXtzOzZlYWNRVnNlNjNmWWRa
cjY5eEkkKncmZAp6V2JuRG4mRmZVe285Yi1ZPnpOeEoqS0c4N3V3ISVXcFhOTyFBNFZkN3hkZUBV
enJ0M1Fwazg3b0t0VlNXOXN1NDwKelMhYTltJihqS3taQ1pZb0okSEhLd3khWUsjJCs4QEo5bEU9
Tjd0NXBkMGxxIXlVRChgdU9DRXQ3aV87eWJYPmlNCnpALThZXlohYmxEcHdrOEFpc2BtaTZQXkJu
a1lsZ0Uqc3NIKlYlcE05UHRwNyRTUUU3THBoOCYyRjdGVihhQiYwOAp6TVh9R2k1anBfdUE5JjRp
eWhZQzJtbnMtUTY4TmxATGIkQSNLQEAoZHF2MXkmP2FIQT5GYHBOfWN6dypWYWszI0gKemZsTGlV
aiY2WGFzWSshWHpDZXlEYUx9OGYrTyZIeGlgfHwkQ2diTUl5QEl3JSoyVTdpMyp4MiZFM0l9UVo0
dHBRCno2Xm5NdygheTVEPzhEU1gpclJQKih7PWBxcyl2JU04b1ohSCtZQ2UmTFZtUUBJQ090KCo8
OHMpSnJAck91VDxWSAp6TkdzNHg1KGlEZzVTZTRVYU0qc3Q0LTEmZ1htRTZPUjBQOUVQU3ltcG9X
THgod29nakxzS19EfXZFNTU0JlhQQ0MKemdFQEdFd0BmWD0rNStLTCg4YzNWKTgyYFIpLU12SF5+
ZzxMUktiIVpaK31KPnN7NFdmYmk0S1YxKH0+STRgemJzCnpqKzdpN2FBUTh6USREPHhIaFN1a3xF
SWIjYV85MT5AUnpBSzs/WCZPNjMtRUtlNCVnc2RhRjNKeyVDeUozMGNVQQp6RTZ5ZVZaREZFZj15
M19MJk4pRmpUfUxafF90JSRZLU9jYyFPWDZaRHRQe2JrbHQkT3U3TjVwPm9QSnRJbVBmMEYKeipS
aVlZZW9Pb0wraHp9RUtFTVQwZ2VHNVBEe0hUIURobEFGITtsbFFEfFdNQ1Z1VFh0M3JoI2RUfXJL
ejM1ZnNoCnp4cjs0PSFlXytFVEwrIWdIaTs9akNwRU9lWndaVD5DWldOMElYMmx2cyUkRlRBWUZB
YkQ4eFhFTD9XQCZuTCQ1VQp6SnJFdmgmYzl9Qj4pfmw3M0FvNERaZFlCWk8rPjJhb3AoMktMMyYk
RiQ9dEQzO28xd2tjYXkhPi0zJHVCX0NlcigKemFNUz9tOTthaWg1ZVlPbG19NmFSIWIpTnBZYVF8
UmItZnhBYmVwd0ImUCEkSGxifkx+YXd8aiFjU2EqOSNVJnpmCnprZjRMODdvZVooLX5yU2M7PUM9
PXNgODFoX14pSXgmS0g+bCEyeiR0SjxQdUk5dE1+aDIhUjN3MkhBI2Y2fG9+Uwp6MHI0bVRLPWFL
ZkE7NSQjUE5CQkcqXmwyWHc1Y04mTXQqbDsjVnBgaUA+SGBrQDlyWXctUUQtdXs0KnVwXmYlT0gK
eik0eldjT09QbjlaSjUjdHYycHF3PWRMO0ZIMUM2SGlsdHcmWlhHUGFfaWxTdCM7RWp6X15odyE/
aWw0e0N5amZQCnptTlU1TW5aKE5SZnRXN2JYOylWPlgqQExPMz1JUihwNWwmTDJuLURUUj1MdEE7
LW9wPSoxTHplOUdTKj9Tb0dWKgp6LSg2fHdWWD5kMFBuNSZQVl5XVjBiNUJ2eTx6I2g5O2AoPys7
WHBWd3grQG4yXkRra2ZVfEd0T3dMYUgzKjB3MzIKenQ7PDdKfERhRzVvdl5vYXdgVSRRKDkjZDJw
YWFxSCpTLURGdzlLRks9NF5MejY2aWxGSmxrWk50Ti1rbntkLXNECnojYlQ1ITN8Jnpgd2wxPEg5
WS10Y0p5fGVGN18hOVQ8ejU8QyFpUzQ3dGppJUpuSENOajxDNmVBZUJoYlIwbXt6ZAp6dXpIY204
KCMqb3EmWXJfJl9SbVFGSyZQe0c/JEYjaj9hLU9yYH1CNFlMcEhqZ0ReP3RCfUMjVU5QelM+MHg+
blAKem0lfklrYkpOVi1hI15jSi1UfXZlX0tee05mZCZZSlo1RCQtNUxwSTFhVzRTdU5BMnh4dFBV
MmRsdT1gS0dwZEg8CnpmRmRfWkx4JWljXzJjI2JQYzs3WGlrM0sqI3BBM1pqRiEqTXBIRn04e0gq
JFheN0hZfTdlMWRuSC1HJElBPGFmMwp6Y1lpcj5jRzFEJE1nPE9SdUI+RSoqYilBYDZaKChrbShm
VDA+JnBJRUoyMHx7SjVaazBhV2piRDl4eCEwZyFKQzQKejdFZm8mTjRzcE5MWTh3bmpge1NDTzNQ
dDh1ZU1hLTwwa0Z3aSN5NUZQdEJwY2okS3xIaUNuRCVnYWN+amAofWwxCnpEVV93TWs3cDIqKypE
KypLa1VicTAkWF9pMXNBd3FKUn4xNSFPUmg/IWV4blFUd0VoYjhxNnpvciZAN204SzBkOQp6QkV7
JnphO0lhMk88JGt6eD8wUFkmMmBTTzxBbzZaIU9XJCtwcD0hSFo4UD40XkAreDlzQ21iVmJwQHwl
X25gQWUKelNze209cDZzKjVgKi1janlqJmk8WE5kMCMpRDF4NWR4OEtoRmFXOGo7KnRLfDZ6WEUq
WjBAYEBzbTRRb1FBUk1mCnokMnc/VylfenJfdnNybFRFI09QSENTP3tSMTVJK25XZTFRb2dMRzF4
U2dTTEtFI0BYMWFDV0l9RExARjl1Kn1gRQp6fEZsSTAyO2Q3YEFwak94dU1yWl8mVj80QCYyJFY5
M0NDbVBqeTduKDA2KypwQkBwUzNMaXQrJXhNMlZ8TigybzIKelVTTGBUPERlKHp0ZUx7eFd0K2I2
VGlgNlF1OyZYZ0hYMUA3XjhXejw1TTd0QVoqTWV5O3NrIztHSjVYa0tqfipfCno8PUg3PkUobGIy
NyUjYUNINnchOV4wUzUzV2x8YldFR35IK2Jgc2d3Ujh7MmFIZTgkMXNMUHQ8Nn1jOFJ4OWp6ZAp6
eVV0SSRDPClTbE42fW9DKnBmbCg2YDxwcXhDWDI8YFV4aSk1bXJ0XntXd2ApNzU2QmdXTE5lPFpo
ekZrWkVxeE8KemM5V2B+WU1AV0tvPURVUj8wOHQpe3ZGaHNzfDdYWmlkVUZUNSFLZlo0bUwjQ2I+
YVA9aHpERG00VXJTcmtpaHRfCnp1TjRHREAkbGU7Qn0rV1o5U05manh6Y1NzUl55ejhRUmtZYVFa
WX5oZU4/VigyPWQjKGRiYWFTJDJWSTtwWnhaYgp6S3c3KSklJSlIS2VCdjx3Wmo7UlhXYEtwU2dI
QlpFR1FjUEZMLUZ2Nz95aEBeVEBoU1lhND9UP3hCTH1gV0RWTXcKenI3K2xDZ3NyWH4lSUhYcDFu
bkdZXk8jNjxZN2UwR3M+SU9uZjJuTkNiUWlXbHFqKiE8ST84bDlaNHtSZTUqSEI9CnppOEU4Q1Fp
TXImQ294bGMkbnMlUDRzUF9NeEc+bylUVHo3TjE5Pm9qM2MzJUg2X2kzWFAtUm1JZnNKejJPRy0h
LQp6OEFKdW40WF5mKU9DNkFtPWw1fG91VndQeWsrYTk0PFUjdG5HaW1SMGBFNDV+WGE3RVR8RWFt
RnZBQ2UxQjg1YTQKej1YM31wVFZyRGFKc31eMGVkeEx9QXJ6PkEwSCEtc0xCKWg7SVNVKVd1YD8z
YlR3bXA4K31aTHwhVW56eU9KWmx9CnoxRjByMGNUazl1NmAqNmlfZHtKJS1MSEQmcVNSWiUkYUB9
aSNYPX5lXyVKZjdATm4pPDUhcD0pMiUyc2A/cmhRJgp6Q21CN25GQ3RNQ1RBVj16M0UxcFIoPChV
U0ppYmtDbVB9X1UzLXN7e1klKUxBbCpYQ2BfTm8kUHZ7dz5wQDgkP3gKenlNMnRjIUJ1I0h2MW1j
dlNecyVyI28+WTdkRkxYfC19YEZrcy1GKDVgRUw3WDtXJiE/M3VQfWRfT2k1PUQ8YER4Cnp7ISE5
fVUzKWhTMHtDcDN2RkdzPjRMRGJLdGBFYVB2TUUhVmB9MlZzMWV4Rm1AVD8mZm4qbGlZdlZ5Knsp
eVBFTAp6Q01mUEtBbmUxNm1sdntHRHFlbW5PWjdmcmtqOClUMFBXdHBgMmg/VFNaYyohNFU5bnJ0
UWR6RStpT21CQ0k/V2MKeig8WWZlWW4lR29mTlRYNVNSXkN4Vy09ZnsjNSVFLTslRmdvWU5pYmxr
UFFPTm9kQ2BUTGV4d0R6Mlh4RyQkLSl2CnpqJE5CQENvZShNUHpNfCF0WDxobHYoMG1ZQlJ3TUxs
Jj9xNWVFV09oVkJKQX5sck80KHYlYU5IUH5PdUptZD9sRAp6e2prNjZnVk5ZTE1KS3R3fERkaz5B
UUFlPldYZU4wQCl3NnNgPnNCRD5NMD5LekokKz84PGdzX2tePDR6e3p0QFIKekBtelFfbTFnYlZS
YSg1I0Q4Zm5HWT1udjhpZ0x8TDFKZyNzP29qJXxzOWotcHR9OWNRVCRyZkd1M05vOzl1cXZ6CnpY
cFJxQnF9WWkxekA0UX0kaTxkdlo7TTZXa0VJejJzRHpiMnRYUC1jWVdWJj1NRX0pYXplPVR7JDRe
amNsamNyWgp6dEhhMnl4OypBWG5gU0dgTTxOUWpzaWdYMXNIcEpxQX1me1VmQmRoVntZez5JTVpu
JXd3JEFmK0VgKk1+XzR6OGkKekpCaWFuPFRmNy02MSMtI0lUVHkpSmlRQFBhWkN0VWZYemJiI3t2
KiQjYzJSRzI8QlVUc1NHRzxRcjtXTkxaa2ZACnowZF4pRDg3TT53WklEOCh0KjNCfVJyOFZ3SFg3
dnhWaSo3Y25nJFVIYyZ8WWFqRkBMJnRRbCpMQTMkfmd7Pld1dgp6e2c5XiZlKVhOJVReVnF2Qm1A
UWNAJk57VmtfY2UzIUUrelM9VllOSjBHNlRJYUBoVmc1all3MSNkT0s7cEt5dCMKeiglayo7b15e
WFRxWD5WVl5Ucz5ndz8wMlQrNnVrOV9SKylCRW9VYiZ4M3M2VVhNNDF5NX4+MCRzU3I+Qm5WOTdi
CnoyO2VhPntrZDVVdCEjcTZ3WWdiamR9ejMlcDJ7Jjw4Mm82VD12VVUjY31FQnZNXkZ3P3NHPiZ1
IWVSJVAmfFpqRAp6eTVaRXUjcW88LTdTSEA9NVIwIW9AYlJ2Mj1rPlFGY19ERiNmV34razVzRmhT
JVR6flh2UmFqaVd3RXF9aCltWFkKeilMODxFdjZEdj4hUT1ZSkhreFhMUD9zbCZhKGhkWkk8WH5o
WFU2JjNffjNpMj1rWjBZMipydCg9UD5JcjZoRjFOCnpLbyZHME1JRGp3Wl5aOEdEfGZPd1hYen1T
WUFufXpPPFpmeXlJd29neHN1bmYwNU99Y2E1KW0rb2UwTGxpRFF9ZQp6cDJqZW5EU1YoemY7VVU/
S3JjaUZwZ0lEP1A/QDZsaTRtWTVMUitaYlRJOzRCNU5qLXZRVjNKQTdAT1gxdkVoPnAKekM2cENN
Q2EjYERQZkRTTW5MSVNyJm1MK3BsJkJUTFA1NUB2R01FfGV6QkwkP3pgX2BoNSpmI1lYdHV9NHQ9
fE9FCnoxWWpOO1Q/K1lDI3NYaSglM0pgZShnQ299KkZufU88bEV1I1RjRV5CTX1ISVEjUHx4UmA9
TURZVjN5KEZQQlRIRwp6cGxAYXI5NGt6aWR6OEtAQXkhcCh7el84MHV+e1JQbGJYUyNndHNubEhI
UktfYnp+WmQ5X2pwaW01O3pMJVpKfDsKeihASFY2WCUpfnlEWHBZTj45Q1godXhtZ1l6Y3FfbWxr
VnFsXkJZQXJgUGFXS1pWV0dicHk8YFEqXy1vX2N5dX09Cnp7KjBeYjJUU2I1YDNePHFCeG9uRVlS
KnZNOWU9ZGFoKmtveDY/P1c0dCVAdlcxYCp9cnB3IWlBbkRBcWtJYGA2fQp6Pk18dX13YTdQXng0
d3puc3FMLUVoQ1IqdUhUTEQ5cl55fEdDODl6NVUxZHt1cHVmTHN6cVJYU1hyO1puPD44SHIKenRB
fH11QyFNX2BVI3lrPWM8MGUtSjd8NDxeKWVraGZKX3ljaGN6KEJsKndLVGZqaTB5V1UoT0VDVElj
KyphNjlJCnpmTiZiNWw8RDJIdlNoeFcjRkNZRUAjeiFMYk9vMUJCMjNLMWJEKFdnNEE+aXM0NTlR
ZEcoVSNzKSsxemlkcFhQbgp6WmpoKWpVMUYlOG0/b1BIQUA5YXk5PmZsI3lPZlohUkd+RnBWYzd1
VVdlXzRkQUZ4XzhsOTBmO0U4fk9VTXRQQUYKel9DUU4wVit9ZFF7XiNuPlhzaiF4QUB8Yz9pfD9t
SVU2X0QzblUzR3o8cWIlbjE0anE4WWgya1hBXncjI0MkPUslCnpPamhXKztLSlBObSg2b3llUkVU
PkxUd2Y0LTNMTkNzYWBpUypFZCRWbShfdH15dGE+UXokYCQ5KHd6ZmJGKUxgVgp6Z0Mtfm5NR0Zo
UWxXezY0bjZzYVpueGFVLWlCb2IhLVdEPWB6O1BjRkZkaCopd2hoIWc1b2Zpd3MtNWhNeDhYfSsK
emR8VUVoZEA5VDswcD4kTiN0O3sxYz9RaEJffisoU3ItK3JkXlYmfCpZKUM8PDEyRngyUHZjb30t
UUZ3dmpyIUBXCnpxYW9pY0l9NC0re15aMW9yJHl9P080d2R+NWF4dkZKbzs/Wjw/PkZ1QDA9NVdg
WGEpYXYlI31BQDJRVCNAPVd2bQp6VmxraihrQHZsM2tuYH02NXZ1SCNNPGw4cEFgUytLITE3ZCk/
Un4oaTVPfGBMYz88WHF7Mk1pMDt8UjFEcElVMkoKekUoNHhnLURhV3k3Uio9ZytGfXFjQlgmYHkj
cjhsZzJeZlZEYVReZk5mK156bWVoTmVISXRpSSZOOGo1KyF4cVM+CnptMCZjRFdfQVRPZk5Ce0N4
WDF5ckBLT3tBQ1I9fE1wY15FcTRkPmd5ZD8rS2RNXzEqRmJ4bTZzemorN0MmRTtpfQp6enM+SkYj
KFMwcGt1MkdCblBAfk5BRnU0YHtneFZAVzR3SUhKOW5uckZWfDJGNjloa3hPajxKfXtQbCF5IW1h
RGsKenNYSGZ3e05udDRHOVg5fEoxMm5yaTIkWHIyWG1MYzc9eiRNVmJ5VC1zREgjNTUtNVVAbUwx
NHlhOHRVZl9Cb2UjCnphbU1UX0gtbDREeiU7eGxHYVZrcjB5KUVZSUJALSZpdl5hcS1RUHpqekls
Rz4hdTAtKD9ReWdRZVR3TGZSUDd1VAp6b34/YU10WENnZUt6dyk4c2J7bWJQNURZOVN7ezByWSM3
a3dKVSFwbXpqPU1yKzx0PUwoQkJaWVE0T208VD5SYjcKejxKR0IjMTNLQ3soeFd9QWpxWEZfcHBh
djloWlQ1UFd0RnBWTEpxZi0hS0ArJG5MbV9hTyZPYkxYIV4hYWopKWAoCnoqI3pMNm8jbTRWYnFx
PzUtJDJaNjFxfW9NUnx1NypfYGEocVB3XiZ6YWdzKHxrNzkjdyRnKWZqMzsteCpHP2M3cAp6MjhL
bDNUbXhabUBrZFhBODFzWSg3MXUzeTEyNiNEb1ZrM1gxSD1LR0MhemkxISQ+cUk9Z3hYMEdXbGNx
eGROT18KenY0PVgjVVMrMFhXZjlCZ3RQQH1zZylIQURJc0xZTV8leGUkYHV2TSleOUlAYUVrOGFp
Yks3JVlWbjhiMGJrVFJFCnp2UGsqaEolaE4rYnB7ejk2cCgwQjVaXnkkRmBnYXVGUHU1OEplfUMr
bWhWc0wlcDRVM3puMUVpcDtCblpVM0ckUwp6Kj1hQjYwSWxoKDx5YD90em5tRGxeJXklaiNZKm92
Y01rd2UyJiUhUWVrZ0pmUWI0QWhqWVFUWmhkPTg0RHdGI1oKejBUaiVidkxlS0FLbTJgXkRqRFRE
NmpkditMNmhLbkN3aFVea3B8aiVNI2ZvWCM9T2gtbStHbzhZbzZlckw4P2ktCnpBOEVSQHRzaiFQ
fEV3S2JVRkxuZDgpZSFmS0FVPWZOfiRpMG9FcT9xTGk9N249RFNgeUgmbDFxVXNFMHtFPUVIbQp6
YEtXPEZvNmMjPWc/KUY+e1p7cVYwRj1vQzx3ODNediVjZ0RLbSFvMShMVzdqTjM/MHBMPH13WFdQ
cTAze1ZmIUIKejheYTdWP2pAN3V0JGlZSkdIbnVyWitMJnQ0RSsqUkolQktObyluMEdTaXhmYUBn
P35Ed1V3ZFdhdDwqNnlJaSpJCnp6JXBvKVFZZU5vMmlKaUhoRzgxdXorXkM+PE9Vd0YyMExVfkk0
bG49RnAyPn5GajxENktoIy11NTVxQlJVQHk9Qwp6VmheO143JGBEaSkrLVZ7WnVlTEkqdSQ2N00k
Knt9e1Z5fGJwTUEkI0AzPntwbilzeClMOERmUDwoM1okXmNybU4Kel51VV93PyFrTClYP1ZCUG5B
RHAwcVk8eGIla2FUKFg5V2lCTFZNI3YxJCljQlNHQj1veChCTDd1fihsakpXLSp7CnpNTVhNMSlK
c3x8Pk9mezJmRiM0SVgycWF6c2pXM1pFRXAkYGB9WWNjRTR2Z2M5ZmpNcm48MCM0Mj1hdT0zekU2
ZAp6eU5IXytGUWE5OWM7JFgqSVF2e3ZoI3ZZajxKX0tDMlAqOCY0QlFXXitUeWR7SW0oIzdiP3V9
UnghdllnMVdydDwKenpDJm93dHlrX3p1TVNVblptfWR9OShve01rZj5icnN6aVZsd0U3bkVtMSVm
cHlUPWY1Mz9NezgkTzlgMW4kcGJDCnpLOGxWQWpNWUwwI1I0KldjWlYwPl5oKn1YRHdrJiNCTk85
X3EzekJ9QkQreWlzNitPNztTb1lxalQqej88Kj9aMwp6OTBzb0QjQVk7VyhwQWlgTHJ9QFluTVIt
bGdiMEBhOVc3TXhER1EkSFRtWj5LYnJnZ1Qpdip+P2g4O2pMSTwjUXsKWkcjTVV7Uz1YTkJWaiVT
fjUpZkF4KkYofDN7e1hnMVYoJE98CgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9yZXNvdXJjZXMvdGVzdC5wZGYg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9yZXNvdXJjZXMvdGVzdC5wZGYK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMjQyNGMxOWQ5OGI2MjFmZWFkZjNlNGQ2MWY3YmZmNDcxMDdhMzc0ZApHSVQg
YmluYXJ5IHBhdGNoCmxpdGVyYWwgNzQyMQp6Y21haTNieSQ/IXdeb3JGNUpYVD84NUtsd2RJJUFP
ZnVYeHdWclhWeTJtdUtKTmtLIztnYHE9MlFqbkJKcShNPzcKekM4USgtcjFae3MmK28pTl9kZlN+
bzt+d0BZcD95VCp6ZXdkdGlgUF5nQkZBYyEyI1RAKnskYGhSanB8TkM9ZCs5CnpTPWEtXyNYLXMj
dGN7eTM1SnI/fWczeHgzWld1Zlc/UCVfWGstPUV2dFN9TjEwOVE5VyNAcT91blpnfVcyUko4bgp6
QCUtKiMjOGRMSUJ3dFFpTWhASGk5Xm1eeFlsKDYpKERzMnpPaHsmV2E/bVVhMmxtdVlRan1qWVhu
REw1JmByMVkKekYzSmclb1RfLT9ZVm80V3t2QTQ9MEdTYFYxcD5OdGMoe2dZbUQtMWlPI0VSNmVn
UHtpSVhxfldMMmxOISE3MntHCnpWNkZiSk9uZjZiM24yTU9kVnhTN3F9a3N4I0o/Z3p7dlZQMjVo
KDtIMCl2YkVKKi04MlV2Pjg3Qj4oQnBhUlpiPAp6PmN7dEUlPUw8YiZ0OWl+Mkk7dGtlI0deLUVD
QFZII2RIckVNKnFvMnxNfHdgdE51I3RDQztZflg1UHpPJSspUzkKelh6S25YSklKR0NwfFUxPGlm
Z1BVPjZVNjw/e3xDQGB3Wk9tXnlifDkoKF50USNANCZ2NmxiSHdIY1hhKCoyUUBvCno5UXZnI0E0
blc7JUpJMj89X2JJRzAta2NZNzhPMkVQMDd3a1FVSllmaEhCMCRjNTlzKjU8YkpTSkhHeHlKOXdH
LQp6KlYhaCZeVXJlRlg4ZiVqNTllUC1wSWViPUtYcWw/OT1Ed15lRmFEZDIxQWY0PkZFeEtAPmgw
ZHIySjBYdnt6bHAKemRYQyVRemYoOW9oMjFRfXReNntIN1ZqWTIpbjBlNEQwIylYZGAxOUg9Xn09
X3tOU1RLMG97MTZ2cmdocHRhNFAjCnooZDk+KXZYVT51YHUpVldYb3F0MFpCYFBgYEA0MGNIQzRQ
cTdQVkllRX1aeSgqM1FjfjZJYy0xYmYpNk5IWC1WaQp6WnRIdmZQSUUpJjsjS340JE0xUz4xcFRW
bXk2ezZOQzhYTE1vSkRueT5lZGBrYWRYLTxBVDlqYF9Celg+Y2ZwN0sKelJMNTd9MXxDKEtGIWVS
THJrT0piK1JRPnZSdE9yPlZEZX5sQSVBKll0bDx3RSQyaXM+JnVuTER3JUV8ODdjcUFACnpuSWdL
e1ROOTw5ZSYjK1U3dz1DQSt+fDR1VVIofGxgNFpBbj11RHRCfEgzcnQ8eX0wVko0MThDI25FYT51
aVNKIQp6SjVGVjlBbnpBb0dWV0pmIVA5MXNBMiV3U2UlNlZiLVU1fTFyTXhyc0pQWXhhamo3UiNH
bSFFQz9jTlFrSWxYTjQKel5JVjVaRyglQ1VYbThhY0hPJFZAYWpTMmAtTVUobzNIYFVKIUozQWY8
SlkjMUNrPjcyZHB9KlhwUkNQc2FjI3sjCnpucTtmKUhaVXA2bX0pZlR0RHUmKGp2YWpWR0hjOFpW
UEpvYDZNRFlqUjE/VmVWTm9OQUtPczx4WEVCRWJWRFclRAp6dnBnKWJzUjNFZXFTTXAlUF9WJlAp
RlVsTip5KmNEMXNBJUVJeXEkfCk5bGpYbkQyQVhVfFA0KDc+U004QlV2d24KemowYiNoejFMdlRf
djROJCpOPmp1XjJ0PXIlcnY5cE5LUVBFXkpUJEZse215cyZXcVV+MVhqTXd1Znt5KiZ6Pk9ICnpF
UWA4KlVUYmNxeXk/LWNQJiluITR9VjgoSWBgMDFpTmZCfFokK0VXVClFUlMxQ2lYPk1jQ01pN3Rp
TG9SSWFMcQp6KH5MYVhSV3BJSzVifCQ2KU1rc2klTjlTdWFAMUd4XllELWQ2TmBITiFVdy1OY28w
IyNeVlY0S0BUNUVseSlwRiQKenNrKXFjSi1uISNvIWpON1dmTUwtaGtpNHo0U01PIz1OfU10PSVj
Tl5lbzhJfm1AX3JuIzMxUkAmMlk0eC19TzVXCnp7WUlteVBgNHZaXj5pRWtLayFpIVJ1aUhJc21y
O3c5UGpKcHJPYUhWP3ZBXypSQmNsYXtBSngkSERNM2lFMTcmTwp6cD4lPWpkYG0jJHEre2lsbVJA
fStDOUJ1I0oxSS1EPENZRVFPez1yYXRUVk1NLVdLcSNXRl48PV5kPipsWmticUwKenJ8JDFnWHxV
QVp4IUk5dHVgX2pUSitIeHlrMUgkWCpyLXE/eGdRb0R3ZHZRYytnMm9vPTgta2ZkMEx1Ml9MKior
CnpfYWtPSEE2KVpKQmB2OzQ8WCNRMG4mUyZGWlBZQC0kemFjfjBUfjkwaT5We3tmZiZOa2Jte3V1
Xnw+Z18oKSlNbgp6MytRTmxyYWFyQkptc3xZY3h6MD4kNjkwPlQ9MThibiFaY2QrcFotZll2eFQ+
KDhSe1VWMnRjOXBOfFF1MFVnaDQKelRSe09maXliWktMR0tBTl9LWD8xQ18kJWp5flVyMFRQdWtJ
R1IwWSpJWkAlfWcofn58MytFNCU8fiR7eDs0PTk7Cno2bSZMUD1vZCo8KTZPPjBBMUNmIW9LOHtU
RG8mcGhzciVJaykqTWYhM2xpalVTWjlPdT11aH47O2hGYm5mIUUoNAp6PVFSNHQ5aGAtNCV0cE1a
dlVpQU94dXZXQnJVVSooYWdnJT52d3F1T1A1clZ7VWUmQlU5RCN3VDhWJVU1UnAkdVgKekFjRXs2
RnRFNG4/ZmhuKSVNUDchWEUzeE84WnUxWEh6cyMyXmRwb2BoYVRVNGglel4xNTA7WT5CP300a3ZW
UUlUCnpaRW9gJWpybHFEMHpGbmhFe0MpSkh3cnpoLVZYJVFHcCpLQU4zaFEheU59Py1YOGhzJmBK
UT9kI2JuRUxAMnhgbwp6LXRkfE1wbCQwJDJmdHdyVlZTdyEpTFQkKHB4ZVdBbF9mUjd5RzExZUBm
ejQhQj09UntZZH1IbHA7Nzl7K3ImM1EKekA/V2VEMHV4ZiFTKmhNeHdST0lWWkoxTXtISns4WktC
WmFIVkQ/aXV6czA4K3FXSjA9XmFqUUArdkw0MSk1QTMtCnooP19EUi1Ncl81SWN1Y3YjbnxhJCZa
QSQwP1VHentJP15NUnk2WW4ldV84KmNqQTQtMUdrentGYHVkbFRkNnUkSAp6RD82SjUhKURYbyVT
P3U+JGJZJiptREx5VHUzNGAkcyNMNSF0LVJRNFNDam1xcTcpVnVFSyhUViQ5XzgwRFhZM3oKemJ3
TlRydmZ5YXp0MXlpKiZHeypuZ21SSHkmQ2h7YGQjYzBTQGx1enI9PTE0blowODhQKiZvaFRkaT4k
O3QoUlJgCnoqbzA1eStqQGR7b3B7RlRAI2t2YXNrTTcpKGk+LXtfPHoqdiRvbm1yWGU9Xik4RiRy
QiZEQyRVeSYhSVkrJWg9PAp6YD0+fkBua34qTz5VczdHNT5uPk9XPXBvJDE9TUtrQTk/U3k2PH5M
WWRTYVA5cGBEQlk1MygzKCNKd3ktLWh+bF8KenlAWF9uS2x7TT9VdkdVO0FzOD1xa3JVdXEkMWE0
K1VVLWZtKUFteVNkY0ZeX0xXR2ElbHNoOVlCaV83QmxkNXxuCnpaaigoSTFKNDViUXhgIzdKdVU+
OVJ+VDZUUlFrNFZ0V0oydUZOdk9tV2F2aiQhYz49dFZFZn14MilIPTNhSVFnbwp6IUI9eVpJYD5w
YTVWZSRLeyRYVVJONE12JnFreDl8M3ZLX1hgVnhpejZQd3xmJVNIXnZjRndlPWBSUzFFe19WKFQK
ekxMNmtGPDsmJVo+K096MEZJaChrZ1FnPjwhfSFVLXYkclRLV2VPMSQ4ZHJeKVhpP1lUcHBtKG1n
PV5uMDkmQipaCnp2LXlpQlBTNmJxVzttaThQUUVGUHpITFVGNHkyeHU5fiVZWTNVT2NzajZHUlFE
SnVKZCg1UkdoRnVCIzU1ckh2Ygp6ZUg2Sl8tPTkxdDBrNm99RlpTaj9QX0EweXYwQkA0a2V2SS13
OyRefWRnTnZucUFQS3FZfjJCUD97YXAxcFFMY0MKeiYyRzVGRktyM1N2VW5wX0NrOFdaZ1lVKStk
QSMlaD8qe2I/QlVZYmBfa3ZmQU1qWkZ6O0BaMk5KX1VWVzdjOWIpCnpaKlh9SU5lZiZvfDFARnxD
UnxYYmFeLVFSN2pNYTZnVW5Rcmt+Pnt6SyEoJTt5RX1IX3gjbjRIYzlaYzMmKCRpKAp6MUBmOUE/
SW52PFZlSFB3STRKa3k3bUhCeHN3a2xsWFkkX2c9QXFHMXJ9a2gkYHB7SSRjTV51RDlWMn49NTdg
cFoKekNaPGdLV0Fqdj0wPUAyKEVRRGB8WU98JCFTMld2cVpVM0EmaCg2aEdqbVJqdUl3eyolX2R2
NEJ2ZVU5SWojQlNqCnoxM3hFTnZPUmZpWmYkeispN3NLblZuNElFUExwR3FWPlFRezl3VSpzeWU3
K29Ra0N7UTV0MyNuK0teNlRnRnxMcQp6MjlpaExGdVJ2LXZZe2d8e1dGMns1ayotNWR8PSl8KFcm
YCQkWHYqaTNxYE99KWVeSVdaYHdNK2pfbHBPaV5eVSMKenl8JVFra2dMOCYlekgpb0psK2llanBr
Xzx4WEByTSE8LSEjbWZpeG9CNjl5XkBwPFApZXpBKVBnO1lSaU8xSFc7CnpeNWE4KlFnfEwjPmxC
Pyg+JGlZPitAcT1nQ3wwJFU/NG1TY2NsYmc+Rz0wcllkUiYqd0RCeihYPCRfTTUrPlBpVAp6MTsl
JDMtaEYkYnZSTj5IUl8lZFZvYUJrXnhTMUB4SCNSbFNKNGo9MWpkNnt5X0lUQj5LdU5MdENCPFpZ
bUlTWmwKekAhcVNKJXhDPj8tanIoPmVWMCYjejswVHJacW9kP2F1OE0+R2ZATn43ZSY8QWF6RGA+
YUA7Nn4pPXFnS3QpMz5jCnpSKjJIKi17ZGJaM1J4Xmk4SX5aMF5Mdk5iMG1gNTYpaW4+VmQkcEVu
JVQxd3p1SF91bkhhRSpTXmBAaEFiV0wmMwp6UzZAPFJuZ05xfnRfWn5NcFo1fEdJfmd6WS0waztv
ZUE2Kn5veUVTb0R3JVBpTT15bmErUG07emU+K3xgd059OyEKenhpV09SLWg/OTlRK2AyRnJ5VDR6
Y3tGVCNlWGUkMktkeDFDPnEmNXY+OHhKc3JHcExJSnh4cCNfUDFFTlR8SUsqCnp2YGdSZj9kMXIl
cUl4P2MtQyp7N01IQWVRPnNpRyliTGtkeHNWaTU9SHc3KzUtbTlCN1ZBU3JEKW0+YWlFVV5SPwp6
VHFEIXQ7RGFPe3MrJnVCbGlRbCFwaTZtQSo3fCkxKFlWMEVDalJYMERYYyFNPnt5UW5je2RANCk9
MitlJD99Q2cKejxXQXpOJGAqP1diJGUoV3dwNT1fUUtoeTd3OTk7cmhpPno4VTVAUlpnNzchREFA
WHNCV3ZXanZQbGVZVnMyZE0xCnorM0kzRjNvQVEtZERxIzM3Pi1CcEpDM2MqaktRdW5vWFh5clRl
bShnKyZAQDFVVTskfXkmanBXdE1NaERUNVA/fAp6az5gbnJ6JGFEZjRjR2smazlhOzE0TXdXe2VH
LW1aK1UxenpUKzVeVE9mcD40T2pzKVdDfTBRfHMhUmopN19TN18KemErO31FIWVsZElUWEBZMTNR
XilLKl9gUXhYUVRyaWxGMmtnQEI3JDwzRExUVkl6TXZ+MituTUooUDNkKF5IfUwjCnp7OHVfP3F4
K3FRNTY1dDl3cS1vPTJVcGlOampEQFpOcXFhVUdmaFMqazdQJUAySzlvUks3YUIkPTh6NGhLQTxm
YAp6Y3lEX0F5YyglYjEpPzBVN1VoQGR0VV5oT1pVfkNjXlZCKFgrOXclbSM5cE54NFJQU0hSfnlC
QHNuaXghT3VQeyMKenApYmUkJFQka313KCo9U2Q7YVpaejxpeU5DNiFAKlRCJClTQk5QOT9qbHpi
YXpNT2NHNmBJTkpkTEw+YlgzeUlkCnoyQF84VUo9YD9gLVomUzkoI0EmRSU5JE45QVYqQHJwbWVz
ZGJVaX5rTTdvVkNlNHVSaUQ2NkBLTjxtZzBGNVNyUAp6Zz1vMkx2RFA7fDglI0JLQlJsRGQ1QVRr
fVZfeWIkJHRVJjliTk41PE81cHNJSEJRQn10SnVaJC1wPFNSUEdgYE8KekFGYndWWHhwMVJvVVU+
c1dWN1czTWB+KkxrVzJ5LU1aKUtVKTk8YEQ5ZihiciRqOHdIN2VxUWBvVlh7QWFGfVUyCno/fEM9
JHl8djxOJVc9NHZId0Y9amR+aj5zZ1I8ZjcxK2tUPTRebFlHNGx9eUprV05gQUpOMGNoNSRBUygk
THQ0Wgp6PGg7b29zcGl1aVFWc2R8WFB5UEdyNDt2UkkqKllMJjA0SW5mNnhRUHdTLTdsbndRO210
WFdeKDIpZUN3NkxsdmYKelYhWGAlIzF6d0NZbUl5eHUxYDJzSmVfT0wrZlFYTG17MHZReD9FRUA+
YnYyPFpmU04renEoIVBiJVJoVVV4ZzBFCnpXV3VsVmQtSlh8Pjw1bVZCNHVePiF5V0RIclVweGAp
O19+MElvNmJ9XlNIKGdvaXVRcUFNWGZXcGh7PTVzPDVOIwp6amsjc25xflZDVmh1IWZmNlMtUmM1
ZCVZeTR3b3dOIT48U0k0UEtqM2RuWlQ1STxsSSgqeGM+JD9XTn0ycGBxTzcKenJLTElScWE7UnhA
IUA2QmJHU0xOSF9oRnhxNX0qQXRuU3JyaiFXNXR0T1VKOSlLYW5uUD1FalUzTjQ8PyV4JE5BCnoj
S055cC09eWJHYC0kQTR5XiZ2SWFkSTlscFZUMipLfDgwISo4a00zSDYlQSRPNVVJSUlIdH5PQ1JJ
KG1gPmFwawp6SUAhXjdXTE1ZI3NKbSlDUkJrbCN5fDNCeCR7eHp1MXdWMytlZlo8P09EaDwqPUUl
QXJHVXRWQio3cHV1dntnS3cKemBDRFo2SmVVeU0qTkg9cVdYbFktb0gyZCFfNDIyJXdiMyZZP1ct
ZUV4M2ViUXRxdndWcns5IU84K3lhd0wyODI7Cnp3N3Izc2NhP2BaQ2JeKU1mYnpLfnRjRGpUZSY5
cDswPCpTOFhwN0luY3pYczYtKloydUUkLXhDOCpBTEVse1g5Tgp6M3QwRmY2VmdYYyoqWHZARHV7
UURnck9LT0NjV3oocCMxX1p2OVl+Xmd1SHR7eiE2ciZpei1ZSEVBQWJ6em0yJkEKemItVXV6X1NE
QXFnMF4hRVpFPipzUjUpI01YenZzYXN+RyNXTUwkQUA+d1NhOHU3UjNUQmFeazQ5QklsYipQQH4k
Cnp2ZFhsVFB2WjZVdzEkQ0lUeXBjblM9KjF0aytGJVgzVD5MUHV3a0p4JXI4RihMe3VWMUYoVFgo
TilUYjxibCpzdgp6VnBMbWVDd04tbTlyYilwV2BGOGkydEx4UHBQQmRiZG10V0B0ejJBfnlaTG19
WkA0UilnOzZWZit9NExMZXc/US0KekdRMUFGZHx5Q0UmX2ctO0VqVk1sJVppVjFafCtPd2AwfWJ0
YyFvWm9NQ3Y4VztWZ0A5JChDY3w8NnE+QjhKQE49Cnp6RzdrUCYlT203WUBsUn0/SGNUMjVIbFJ3
MUReNUwrKHg7JCphKlokQFl2Kz9YdWdeZCMyKERHaE1KVGBaY3xPeAp6cU9FaE17TilxR3B6Tkdj
SlVwRndXIU56cGR3WUt+c09wLTYlS2ZNWkleeEtuRSpfZj4lfX5wNWt6ej9OPWw8eSoKekBgfXA2
PX15S3woZUJEdzR2eWpzKFExUT1ebjkkR2doWTt7aV90d0NPcU1ycVpjaX1Ya25XWV9GSkdoUXVK
aTl6Cno9d2RSezx1VF90VkFfPHNQTH5Db3psTT9zYEI/Mi02Mnh8YjBGSW5mVjNCJWhSfmZkQCZM
aHA8R3dZPSorVk8kfgp6bWhhQTZiLWN9IW5iTUpWJnFRLT4tWlFyYF5oS0YqRGNSbWJybW4wMDRC
a3YjVCM/Tn0qJlREaGopO3NlMlFjVVAKenBQZCNia1cqfjE7JWhzNU5De2lmdjZQPmB6LXFROFBy
RmMjdHR+LUlhcjBPbThSVkMjJD1FS01AMlB1cEIldHZvCnowODU9PyVFcTEzcmZRX2hTOVV5KkRP
VSNJQmB9NClmS0ZDZ2oydTU9c0I+PEVlOXoxT1QqamVjRilYU29OMDlRcQp6NXd2MHxiMEA8SlQ9
MWlLR2A9bjdTS2lmdUVVTzNkdGdkLUMpT2NaUD91LUNvOGx4QGkqXnQlYHtsVWxzXnRHLXcKemNp
eFhvaENnNVZAcm5mYzchVUhxVk4/MmdzK0diO2dCd1FqKyFqfCkpQ0dvaWY2UihyKTlQYjclJHw+
RlFNVU1DCnpULUBoPjJ7SUtWLSpOZkd3az04Nyp1RnYlI3lPbSVWVlRJZG0lQ2RmbVBoJW08d3hv
QmV5VkctTUhtWUFrMlcmbAp6a1Y0PWNaQHVyb29jZGwldlFDYFJ2d1dxP3tjdmhIcTNnJnBmQSYp
I0AoQUBqX2Ajc3txR3oxKnY+JCF9Uz55M0MKenRoI0drT0A0KERkTjRPWnBFTlU3eiQ3JFg+OzI/
d3QqRm9MeWhfIzVFeXhyWG4/NikxSTZoT1VMV3cjNHFnWDI/Cno3eUMzJXVHIX50ZiU+KFk9Pnco
eUpIRjFUQFppX3xDSjd9Sy14KWstWXRmdTxSbVU0Mj1zJnF7JSo1PCkjZkV3TAp6JThZUytuV3V2
Vz80WSRtKCgzME5ydXgzOGZvQnFmJjt0Xyp6b2FPP1NlOGEhcElHWDxvVzJDbmhYal5CbiZyPlMK
ejZZdT1geFcmZ3pgTlVuWkxDeTxQI2pkbSQlPjBFcW5PSmBFPDQ/WkEpTDwyQUokR0k5c1hhRWdF
MjNle15kQClQCnp4S01FfEooWnxMWXs/fjBINFVAKSY8KDgke3RycXl4YWZ1KDdxOUxFVDVYd0Ze
QkV7NmBHYkFiT3ckMGRpdnQ1cQp6MDd1eFRfUCRiXkBqfU9WWXJUQiFtNXgqTmlmJE9oam9NXldE
ODRiYlAwV2VLX0lRMjJYMlZlflU2Wk5gY1pHSUMKenh+fWZqQFZJVjZffHIpMSN1eEd2TitGOFo2
I0JVSXB7clhJaWNTSVVRVndiRFNfM3hVUyZtckZgTD5ieVZwfTV1CnpBU0B2bEl4aUhSTyU2el54
T2xsbng9LWwpejZlTEVVYihKXmAtZno4bk9pKVZoeEIqNz5uTkBFNmorWmFacEBLTwp6SCV8VGZA
cFg4PmFFTnpvQEEwQ29mYDZXUCNOJmladUpTQk9SfEV6bykwQV54SlJ0SzRLPEB5ckhNP0F0TVJp
cVAKejxTNFh2PTJDIUNjWDdGPnIlR3BAZUBANGpkdWJJbDtDaD8tYEBKYEc/R2MoP1IpWWluV0VU
fTw/KkFfKE87V0x2CnpSTDRYPnB+OFJHRz09fUZYPS1+cFY/YnllKT1kV0VZS2dhVmNFYl4/diYy
dFRiMC1XKVQ4aX1XRThBSU1AYUFySQp6SUlJPjFaKVhpNG0yWWlhZnBGcHJRQnp0UD1WPkdlNWs+
KzlWUEZeIzB0Tz8xcTlQQ3prYjt9SnFuKUpgKjJXUDcKejFPcUApdTlnX0E4JkVfUDBzeFZXa3Y7
Xlc1RmBNRUdJeTU4KnhBXitrPTZrflQ1Y0Y4VTchZVkyPz9IOUZ+JmZGCnpxJDtjP3Y4TVc7czt0
T2c1JlRoS2g5YmZMUGolVmtuRl9XUWNyb31PQkBqfl5SKz1pSiVINkZRY2s0T3hzbUFBUAp6WElq
VWxCRj51RVoqOTxeQ0tYS3tINGZIeVppUz55RjY7OTVQcDJ8bV4lVDE7Yyh1cGM8KHdeaikoe3Nj
VSVPPzcKenpyTVhxKDdnRm1hWWc4PmspVCUmRWZVaFdlUWVINDl5QFBPO0Npb3V2dHFRe3VLVEw9
WFRqMHdge3k/Nyg4KGMrCnpFRz42SFE7aj4rRVZXZ3x2YCZqLVBOZ1QqNV8mWTFPPTQ8aDRDb2Zl
bmxxaHlSTX55eUEpXlVPc0MoVzE0VkwpdAp6TDJ2UVFGVEIqUDRRZz1ibkJSdiZjaiMmK1d2Ni0y
RG9PQ0A4MmElM244RyVsRkV7Wm45ZnQ9QitkTThobEdMeUMKelEpcz9Bcj9LITtYdE1kflZXWG1p
I0FsQDh6OChKeUtTY2paPGV5WGtYfU1kdGskOW52Y2dPc2VOfUljNE5TcEQwCnpHcnx0PD5WfnA0
JENHd2krNUNAcDVkY1dmJmRTWiEpZCs/fTBGZStkNUR0ZHtWSXJiSHNJYyh3ZmRHU25xeWFeTQp6
ZmhQYUc7ZVFia05hQ3BgMEhscjYhUD0yfTF3aGlhWVhiaHAxMHYqfmpScklYTlEmbTReTl8jSTY5
WFg5XlMyNX0KejlnbmxyIW5oZk1oYGtHdEhwYko8PFI3cXF0QDw2bXkxNU1vcTs4SFVhVFpQajBC
S0BlYXFmNmFqNEtkQUdOQjFsCnohQzJYdWxhMnooMDc0VzI2b0VyY0t5ckFUeUVDeH5xRDlRNUlv
OCNnMVl6an5MVE0zP2ZRT3dXTXBJNTJxeVRneQp6PTI9MWxnZCNkZndCUU9QYng7MXpjOUtjYkF0
bk8tPjVlUGxVcEBmLWEpUCt2UGNLTWBSa0V7a0gzSShqbD1PK2gKenhzITc3X2VCMSFXQW9idiVB
OXo3YVc9JUxaSFBoczRqS1NiYkgtcSRFSi0oayhTS3VzXmJISndTYShPcXxOYTNKCnp2NmFvU0hu
JVpZS3s7dk9mMjh6MyVAdHgwUXRvY0hJSmBKbzdMNWpqO2xnMEJGcCZlb0Z5ZXJOITk8I1hnXnxS
Ngp6O3Y1dUF5aUpJNXEkcUtxeypYZj9oeWY1Z00jUVY/NCtzUGFmflpTVWB3YztZZ0Emejx5S0xv
ZGlUUkhub1R4KzYKemdBPHtWQm9tfVRmK20/RHU3UyFEfEF9K0l2NTElP15EeUVaTmU9dGRFSFFj
K1YqQmQwajJMbFY2YXBvQkVDTG1VCnohVWUlbDl4I31QX2l0SkMjQUI9aFU/Mm56QVJfKG8wRmVq
OzM8MHpUe3ZrdWM1WDlffjl3N0VWR0I2bElyMUpsZQp6TEJZaEZ8NUp2OWl4U1ZzS1ZASmpean5e
SmleVG8/cnloYlJ7Rmg3Xnt4M1d2YVgwPl85dWtXRHc7b2pWVXBeeGQKenFXQGx0NiNiaUJIQHJG
VmcyJDdudCEzd3BBKktxWGlOZ2BPYFRHbjJLbmhyRTkxdWR7NClHI1RrTzNNMiNnVzNZCnphRmkk
KkNXVkJkcktNent2TGF3ODhaSGYlS31rISZwa1JhcTtRdj00OVJlQWdDQ1YwSz5FUDxfMU95PmJE
Nm9gXwp4Q18pTT9EfXFLS0x7SkR9REpjO1Y1ZDtiJWpZTFZJTkt8JXBHc25DQS1jbikrQV4+aH5T
djU0XnpXe25AX1dKKzsKCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Jlc291cmNlcy90ZXN0LnR4dCBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Jlc291cmNlcy90ZXN0LnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGFlYWZiCi0tLSAvZGV2L251bGwKKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvcmVzb3VyY2VzL3Rlc3QudHh0CkBA
IC0wLDAgKzEgQEAKK3Rlc3QKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0R3RrL3Rlc3RfdXRpbHMuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
R3RrL3Rlc3RfdXRpbHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmI2
NDVkCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRH
dGsvdGVzdF91dGlscy5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgQXJubyBSZW5ldmllcgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAidGVzdF91dGlscy5oIgorCisjaW5jbHVkZSA8Z2xp
Yi5oPgorI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CisKK2ludCB0ZXN0dXRpbHNfcmVsYXRpdmVf
Y2hkaXIoY29uc3QgZ2NoYXIgKnRhcmdldEZpbGVuYW1lLCBjb25zdCBnY2hhciAqZXhlY3V0YWJs
ZVBhdGgpCit7CisgICAgLyogdXNlciBjYW4gc2V0IGxvY2F0aW9uIG9mIHRoZSB3ZWJraXQgcmVw
b3NpdG9yeSBkaXJlY3RvcnkgaWYgaXQgZGlmZmVycyBmcm9tIGJ1aWxkIGRpcmVjdG9yeSAqLwor
ICAgIGNvbnN0IGdjaGFyICpyZXBvUGF0aCA9IGdfZ2V0ZW52KCJXRUJLSVRSRVBPRElSIik7Cisg
ICAgaWYgKHJlcG9QYXRoKSB7CisgICAgICAgIGlmIChnX2NoZGlyKHJlcG9QYXRoKSkKKyAgICAg
ICAgICAgIHJldHVybiAtMTsKKyAgICB9IGVsc2UgaWYgKGdfY2hkaXIoZ19wYXRoX2dldF9kaXJu
YW1lKGV4ZWN1dGFibGVQYXRoKSkpCisgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICB3aGls
ZSAoIWdfZmlsZV90ZXN0KHRhcmdldEZpbGVuYW1lLCBHX0ZJTEVfVEVTVF9FWElTVFMpKSB7Cisg
ICAgICAgIGdjaGFyICpwYXRoTmFtZTsKKyAgICAgICAgaWYgKGdfY2hkaXIoIi4uIikpCisgICAg
ICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGdfYXNzZXJ0KCFnX3N0cl9lcXVhbCgocGF0aE5h
bWUgPSBnX2dldF9jdXJyZW50X2RpcigpKSwgIi8iKSk7CisgICAgICAgIGdfZnJlZShwYXRoTmFt
ZSk7CisgICAgfQorCisgICAgZ2NoYXIgKmRpck5hbWUgPSBnX3BhdGhfZ2V0X2Rpcm5hbWUodGFy
Z2V0RmlsZW5hbWUpOworICAgIGlmIChnX2NoZGlyKGRpck5hbWUpKSB7CisgICAgICAgIGdfZnJl
ZShkaXJOYW1lKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGdfZnJlZShkaXJO
YW1lKTsKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0R3RrL3Rlc3RfdXRpbHMuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0R3RrL3Rlc3RfdXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5lYzYwZGEzCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRHdGsvdGVzdF91dGlscy5oCkBAIC0wLDAgKzEsMyBAQAorI2luY2x1ZGUgPGdsaWIuaD4K
KworaW50IHRlc3R1dGlsc19yZWxhdGl2ZV9jaGRpcihjb25zdCBnY2hhciAqdGFyZ2V0RmlsZW5h
bWUsIGNvbnN0IGdjaGFyICpleGVjdXRhYmxlUGF0aCk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0YXBwbGljYXRpb25jYWNoZS5jIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGFwcGxpY2F0aW9uY2FjaGUuYwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MThmNDAxCi0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGFwcGxpY2F0aW9uY2Fj
aGUuYwpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEx1a2FzeiBT
bGFjaGNpYWsKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVk
ZSA8Z2xpYi9ncHJpbnRmLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtp
dC93ZWJraXQuaD4KKworc3RhdGljIHZvaWQgdGVzdF9hcHBsaWNhdGlvbl9jYWNoZV9tYXhpbXVt
X3NpemUoKQoreworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhTaXplID0gODE5MjsKKyAgICB3
ZWJraXRfYXBwbGljYXRpb25fY2FjaGVfc2V0X21heGltdW1fc2l6ZShtYXhTaXplKTsKKworICAg
IC8vIENyZWF0aW5nIGEgV2ViVmlldyAtIG1ha2Ugc3VyZSB0aGF0IGl0IGRpZG4ndCBjaGFuZ2Ug
YW55dGhpbmcKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdl
YmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7Cisg
ICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7CisKKyAgICBnX2Fzc2VydChtYXhTaXplID09IHdl
YmtpdF9hcHBsaWNhdGlvbl9jYWNoZV9nZXRfbWF4aW11bV9zaXplKCkpOworfQorCitpbnQgbWFp
bihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFy
Z3YsIE5VTEwpOworCisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy8iKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXBwbGljYXRpb25fY2FjaGUvbWF4
aW11bV9zaXplIiwKKyAgICAgICAgICAgICAgICAgICAgdGVzdF9hcHBsaWNhdGlvbl9jYWNoZV9t
YXhpbXVtX3NpemUpOworCisgICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsKK30KKwpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGF0ay5jIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGF0ay5jCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjJhMmRiNjEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0YXRrLmMKQEAgLTAsMCArMSwxNDc2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA5IElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUg
PGdsaWIvZ3N0ZGlvLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPGxvY2FsZS5o
PgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKworc3Rh
dGljIGNvbnN0IGNoYXIqIGNlbnRlcmVkQ29udGVudHMgPSAiPGh0bWw+PGJvZHk+PHAgc3R5bGU9
J3RleHQtYWxpZ246IGNlbnRlcjsnPlNob3J0IGxpbmU8L3A+PHAgc3R5bGU9J3RleHQtYWxpZ246
IGNlbnRlcjsnPkxvbmctc2l6ZSBsaW5lIHdpdGggc29tZSBmb28gYmFyIGJheiBjb250ZW50PC9w
PjxwIHN0eWxlPSd0ZXh0LWFsaWduOiBjZW50ZXI7Jz5TaG9ydCBsaW5lPC9wPjxwIHN0eWxlPSd0
ZXh0LWFsaWduOiBjZW50ZXI7Jz5UaGlzIGlzIGEgbXVsdGktbGluZSBwYXJhZ3JhcGg8YnIgLz53
aGVyZSB0aGUgZmlyc3QgbGluZTxiciAvPmlzIHRoZSBiaWdnZXN0IG9uZTwvcD48L2JvZHk+PC9o
dG1sPiI7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb250ZW50cyA9ICI8aHRtbD48Ym9keT48cD5U
aGlzIGlzIGEgdGVzdC4gVGhpcyBpcyB0aGUgc2Vjb25kIHNlbnRlbmNlLiBBbmQgdGhpcyB0aGUg
dGhpcmQuPC9wPjwvYm9keT48L2h0bWw+IjsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnRlbnRz
SW5UYWJsZVdpdGhIZWFkZXJzID0gIjxodG1sPjxib2R5Pjx0YWJsZT48dHI+PHRoPmZvbzwvdGg+
PHRoPmJhcjwvdGg+PHRoIGNvbHNwYW49JzInPmJhejwvdGg+PC90cj48dHI+PHRoPnF1eDwvdGg+
PHRkPjE8L3RkPjx0ZD4yPC90ZD48dGQ+MzwvdGQ+PC90cj48dHI+PHRoIHJvd3NwYW49JzInPnF1
dXg8L3RoPjx0ZD40PC90ZD48dGQ+NTwvdGQ+PHRkPjY8L3RkPjwvdHI+PHRyPjx0ZD42PC90ZD48
dGQ+NzwvdGQ+PHRkPjg8L3RkPjwvdHI+PHRyPjx0aD5jb3JnZTwvdGg+PHRkPjk8L3RkPjx0ZD4x
MDwvdGQ+PHRkPjExPC90ZD48L3RyPjwvdGFibGU+PHRhYmxlPjx0cj48dGQ+MTwvdGQ+PHRkPjI8
L3RkPjwvdHI+PHRyPjx0ZD4zPC90ZD48dGQ+NDwvdGQ+PC90cj48L3RhYmxlPjwvYm9keT48L2h0
bWw+IjsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnRlbnRzV2l0aEV4dHJhbmVvdXNXaGl0ZVNw
YWNlcyA9ICI8aHRtbD48aGVhZD48Ym9keT48cD5UaGlzXG4gICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcmFncmFwaFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JrZWQhPC9wPjwvYm9keT48
L2h0bWw+IjsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbWJvQm94U2VsZWN0b3IgPSAiPGh0bWw+
PGJvZHk+PHNlbGVjdD48b3B0aW9uIHNlbGVjdGVkIHZhbHVlPSdmb28nPmZvbzwvb3B0aW9uPjxv
cHRpb24gdmFsdWU9J2Jhcic+YmFyPC9vcHRpb24+PC9zZWxlY3Q+PC9ib2R5PjwvaHRtbD4iOwor
CitzdGF0aWMgY29uc3QgY2hhciogZW1iZWRkZWRPYmplY3RzID0gIjxodG1sPjxib2R5PjxwPkNo
b29zZTogPGlucHV0IHZhbHVlPSdmb28nIHR5cGU9J2NoZWNrYm94Jy8+Zm9vIDxpbnB1dCB2YWx1
ZT0nYmFyJyB0eXBlPSdjaGVja2JveCcvPmJhciAocGljayBvbmUpPC9wPjxwPkNob29zZTogPHNl
bGVjdCBuYW1lPSdmb28nPjxvcHRpb24+YmFyPC9vcHRpb24+PG9wdGlvbj5iYXo8L29wdGlvbj48
L3NlbGVjdD4gKHBpY2sgb25lKTwvcD48cD48aW5wdXQgbmFtZT0nZm9vYmFyYnV0dG9uJyB2YWx1
ZT0nZm9vYmFyJyB0eXBlPSdidXR0b24nLz48L3A+PC9ib2R5PjwvaHRtbD4iOworCitzdGF0aWMg
Y29uc3QgY2hhciogZm9ybVdpdGhUZXh0SW5wdXRzID0gIjxodG1sPjxib2R5Pjxmb3JtPjxpbnB1
dCB0eXBlPSd0ZXh0JyBuYW1lPSdlbnRyeScgLz48aW5wdXQgdHlwZT0ncGFzc3dvcmQnIG5hbWU9
J3Bhc3N3b3JkRW50cnknIC8+PC9mb3JtPjwvYm9keT48L2h0bWw+IjsKKworc3RhdGljIGNvbnN0
IGNoYXIqIGh5cGVydGV4dEFuZEh5cGVybGlua3MgPSAiPGh0bWw+PGJvZHk+PHA+QSBwYXJhZ3Jh
cGggd2l0aCBubyBsaW5rcyBhdCBhbGw8L3A+PHA+PGEgaHJlZj0naHR0cDovL2Zvby5iYXIuYmF6
Lyc+QSBsaW5lPC9hPiB3aXRoIDxhIGhyZWY9J2h0dHA6Ly9iYXIuYmF6LmZvby8nPmEgbGluayBp
biB0aGUgbWlkZGxlPC9hPiBhcyB3ZWxsIGFzIGF0IHRoZSBiZWdpbm5pbmcgYW5kIDxhIGhyZWY9
J2h0dHA6Ly9iYXouZm9vLmJhci8nPmF0IHRoZSBlbmQ8L2E+PC9wPjxvbD48bGk+TGlzdCBpdGVt
IHdpdGggYSA8c3Bhbj48YSBocmVmPSdodHRwOi8vZm9vLmJhci5iYXovJz5saW5rIGluc2lkZSBh
IHNwYW4gbm9kZTwvYT48L3NwYW4+PC9saT48L29sPjwvYm9keT48L2h0bWw+IjsKKworc3RhdGlj
IGNvbnN0IGNoYXIqIGxheW91dEFuZERhdGFUYWJsZXMgPSAiPGh0bWw+PGJvZHk+PHRhYmxlPjx0
cj48dGg+T2RkPC90aD48dGg+RXZlbjwvdGg+PC90cj48dHI+PHRkPjE8L3RkPjx0ZD4yPC90ZD48
L3RyPjwvdGFibGU+PHRhYmxlPjx0cj48dGQ+Zm9vPC90ZD48dGQ+YmFyPC90ZD48L3RyPjwvdGFi
bGU+PC9ib2R5PjwvaHRtbD4iOworCitzdGF0aWMgY29uc3QgY2hhciogbGlua3NXaXRoSW5saW5l
SW1hZ2VzID0gIjxodG1sPjxoZWFkPjxzdHlsZT5hLmh0dHA6YmVmb3JlIHtjb250ZW50OiB1cmwo
bm8taW1hZ2UucG5nKTt9PC9zdHlsZT48Ym9keT48cD48YSBjbGFzcz0naHR0cCcgaHJlZj0nZm9v
Jz5mb288L2E+IGJhciBiYXo8L3A+PHA+Zm9vIDxhIGNsYXNzPSdodHRwJyBocmVmPSdiYXInPmJh
cjwvYT4gYmF6PC9wPjxwPmZvbyBiYXIgPGEgY2xhc3M9J2h0dHAnIGhyZWY9J2Jheic+YmF6PC9h
PjwvcD48L2JvZHk+PC9odG1sPiI7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBsaXN0c09mSXRlbXMg
PSAiPGh0bWw+PGJvZHk+PHVsPjxsaT50ZXh0IG9ubHk8L2xpPjxsaT48YSBocmVmPSdmb28nPmxp
bmsgb25seTwvYT48L2xpPjxsaT50ZXh0IGFuZCBhIDxhIGhyZWY9J2Jhcic+bGluazwvYT48L2xp
PjwvdWw+PG9sPjxsaT50ZXh0IG9ubHk8L2xpPjxsaT48YSBocmVmPSdmb28nPmxpbmsgb25seTwv
YT48L2xpPjxsaT50ZXh0IGFuZCBhIDxhIGhyZWY9J2Jhcic+bGluazwvYT48L2xpPjwvb2w+PC9i
b2R5PjwvaHRtbD4iOworCitzdGF0aWMgY29uc3QgY2hhciogdGV4dEZvckNhcmV0QnJvd3Npbmcg
PSAiPGh0bWw+PGJvZHk+PGgxPkEgdGV4dCBoZWFkZXI8L2gxPjxwPkEgcGFyYWdyYXBoIDxhIGhy
ZWY9J2h0dHA6Ly9mb28uYmFyLmJhei8nPndpdGggYSBsaW5rPC9hPiBpbiB0aGUgbWlkZGxlPC9w
PjxvbD48bGk+QSBsaXN0IGl0ZW08L2xpPjxsaT48c3BhbiBzdHlsZT0nZGlzcGxheTpibG9jazsn
PkJsb2NrIHNwYW4gaW4gYSBsaXN0IGl0ZW08L3NwYW4+PHNwYW4+SW5saW5lIHNwYW4gaW4gYSBs
aXN0IGl0ZW08L3NwYW4+PC9saT48bGk+PGEgaHJlZj0nZm9vJz48c3BhbiBzdHlsZT0nZGlzcGxh
eTpibG9jazsnPkJsb2NrIHNwYW4gaW4gYSBsaW5rIGluIGEgbGlzdCBpdGVtPC9zcGFuPjxzcGFu
PklubGluZSBzcGFuIGluIGEgbGluayBpbiBhIGxpc3QgaXRlbTwvc3Bhbj48L2E+PC9saT48L29s
PjxzZWxlY3Q+PG9wdGlvbiBzZWxlY3RlZCB2YWx1ZT0nZm9vJz5BbiBvcHRpb24gaW4gYSBjb21i
byBib3g8L29wdGlvbj48L3NlbGVjdD48aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nZm9vJyB2YWx1
ZT0nZm9vIGJhciBiYXonIC8+PHRhYmxlPjx0cj48dGQ+YSB0YWJsZSBjZWxsPC90ZD48dGQ+PC90
ZD48dGQ+PGEgaHJlZj0nZm9vJz48c3BhbiBzdHlsZT0nZGlzcGxheTpibG9jazsnPkJsb2NrIHNw
YW4gaW4gYSBsaW5rIGluIGEgdGFibGUgY2VsbDwvc3Bhbj48c3Bhbj5JbmxpbmUgc3BhbiBpbiBh
IGxpbmsgaW4gYSB0YWJsZSBjZWxsPC9zcGFuPjwvYT48L3RkPjx0ZD48c3BhbiBzdHlsZT0nZGlz
cGxheTpibG9jazsnPkJsb2NrIHNwYW4gaW4gYSB0YWJsZSBjZWxsPC9zcGFuPjxzcGFuPklubGlu
ZSBzcGFuIGluIGEgdGFibGUgY2VsbDwvc3Bhbj48L3RkPjwvdHI+PC90YWJsZT48aDQ+PGEgaHJl
Zj0nZm9vJz48c3BhbiBzdHlsZT0nZGlzcGxheTpibG9jazsnPkJsb2NrIHNwYW4gaW4gYSBsaW5r
IGluIGEgaGVhZGluZzwvc3Bhbj48c3Bhbj5JbmxpbmUgc3BhbiBpbiBhIGxpbmsgaW4gYSBoZWFk
aW5nPC9zcGFuPjwvaDQ+PGg0PjxzcGFuIHN0eWxlPSdkaXNwbGF5OmJsb2NrOyc+QmxvY2sgc3Bh
biBpbiBhIGhlYWRpbmc8L3NwYW4+PHNwYW4+SW5saW5lIHNwYW4gaW4gYSBoZWFkaW5nPC9zcGFu
PjwvaDQ+PC9ib2R5PjwvaHRtbD4iOworCitzdGF0aWMgY29uc3QgY2hhciogdGV4dEZvclNlbGVj
dGlvbnMgPSAiPGh0bWw+PGJvZHk+PHA+QSBwYXJhZ3JhcGggd2l0aCBwbGFpbiB0ZXh0PC9wPjxw
PkEgcGFyYWdyYXBoIHdpdGggPGEgaHJlZj0naHR0cDovL3dlYmtpdC5vcmcnPmEgbGluazwvYT4g
aW4gdGhlIG1pZGRsZTwvcD48b2w+PGxpPkEgbGlzdCBpdGVtPC9saT48L29sPjxzZWxlY3Q+PC9i
b2R5PjwvaHRtbD4iOworCitzdGF0aWMgY29uc3QgY2hhciogdGV4dFdpdGhBdHRyaWJ1dGVzID0g
IjxodG1sPjxoZWFkPjxzdHlsZT4uc3QxIHtmb250LWZhbWlseTogbW9ub3NwYWNlOyBjb2xvcjpy
Z2IoMTIwLDEyMSwxMjIpO30gLnN0MiB7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTsgYmFja2dy
b3VuZC1jb2xvcjpyZ2IoODAsODEsODIpO308L3N0eWxlPjwvaGVhZD48Ym9keT48cCBzdHlsZT1c
ImZvbnQtc2l6ZToxNDsgdGV4dC1hbGlnbjpyaWdodDtcIj5UaGlzIGlzIHRoZSA8aT5maXJzdDwv
aT48Yj4gc2VudGVuY2Ugb2YgdGhpcyB0ZXh0LjwvYj48L3A+PHAgY2xhc3M9XCJzdDFcIj5UaGlz
IHNlbnRlbmNlIHNob3VsZCBoYXZlIGFuIHN0eWxlIGFwcGxpZWQgPHNwYW4gY2xhc3M9XCJzdDJc
Ij5hbmQgdGhpcyBwYXJ0IHNob3VsZCBoYXZlIGFub3RoZXIgb25lPC9zcGFuPi48L3A+PHA+eDxz
dWI+MTwvc3ViPjxzdXA+Mjwvc3VwPj14PHN1Yj4yPC9zdWI+PHN1cD4zPC9zdXA+PC9wPjxwIHN0
eWxlPVwidGV4dC1hbGlnbjpjZW50ZXI7XCI+VGhpcyBzZW50ZW5jZSBpcyB0aGUgPHN0cmlrZT5s
YXN0PC9zdHJpa2U+IG9uZS48L3A+PC9ib2R5PjwvaHRtbD4iOworCitzdGF0aWMgQXRrT2JqZWN0
KiBnZXRXZWJBcmVhT2JqZWN0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCit7CisgICAgLyogTWFu
dWFsbHkgc3BpbiB0aGUgbWFpbiBjb250ZXh0IHRvIG1ha2Ugc3VyZSB0aGUgYWNjZXNzaWJsZQor
ICAgICAgIG9iamVjdHMgYXJlIHByb3Blcmx5IGNyZWF0ZWQgYmVmb3JlIGNvbnRpbnVpbmcuICov
CisgICAgd2hpbGUgKGdfbWFpbl9jb250ZXh0X3BlbmRpbmcoMCkpCisgICAgICAgIGdfbWFpbl9j
b250ZXh0X2l0ZXJhdGlvbigwLCBUUlVFKTsKKworICAgIEF0a09iamVjdCogcm9vdE9iamVjdCA9
IGd0a193aWRnZXRfZ2V0X2FjY2Vzc2libGUoR1RLX1dJREdFVCh3ZWJWaWV3KSk7CisgICAgaWYg
KCFyb290T2JqZWN0KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIEF0a09iamVjdCogd2Vi
QXJlYU9iamVjdCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQocm9vdE9iamVjdCwg
MCk7CisgICAgaWYgKCF3ZWJBcmVhT2JqZWN0KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAg
IC8qIFdlIGRvbid0IG5lZWQgdGhlIGV4dHJhIHJlZiBoZXJlLiAqLworICAgIGdfb2JqZWN0X3Vu
cmVmKHdlYkFyZWFPYmplY3QpOworCisgICAgcmV0dXJuIHdlYkFyZWFPYmplY3Q7Cit9CisKK3N0
YXRpYyBnY2hhciogdGV4dENhcmV0TW92ZWRSZXN1bHQgPSAwOworCitzdGF0aWMgdm9pZCB0ZXh0
Q2FyZXRNb3ZlZENhbGxiYWNrKEF0a1RleHQqIHRleHQsIGdpbnQgcG9zLCBncG9pbnRlciBkYXRh
KQoreworICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHRleHQpKTsKKworICAgIGdfZnJlZSh0ZXh0
Q2FyZXRNb3ZlZFJlc3VsdCk7CisgICAgQXRrUm9sZSByb2xlID0gYXRrX29iamVjdF9nZXRfcm9s
ZShBVEtfT0JKRUNUKHRleHQpKTsKKyAgICB0ZXh0Q2FyZXRNb3ZlZFJlc3VsdCA9IGdfc3RyZHVw
X3ByaW50ZigifCVzfCVkfCIsIGF0a19yb2xlX2dldF9uYW1lKHJvbGUpLCBwb3MpOworfQorCitz
dGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrQ2FyZXRPZmZzZXRzKCkKK3sKKyAgICBXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Cisg
ICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0
aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9OworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShH
VEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7CisgICAgd2Via2l0X3dlYl92aWV3X2xv
YWRfc3RyaW5nKHdlYlZpZXcsIHRleHRGb3JDYXJldEJyb3dzaW5nLCAwLCAwLCAwKTsKKworICAg
IEF0a09iamVjdCogb2JqZWN0ID0gZ2V0V2ViQXJlYU9iamVjdCh3ZWJWaWV3KTsKKyAgICBnX2Fz
c2VydChvYmplY3QpOworCisgICAgQXRrT2JqZWN0KiBoZWFkZXIgPSBhdGtfb2JqZWN0X3JlZl9h
Y2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMCk7CisgICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQoaGVh
ZGVyKSk7CisgICAgZ19zaWduYWxfY29ubmVjdChoZWFkZXIsICJ0ZXh0LWNhcmV0LW1vdmVkIiwg
R19DQUxMQkFDSyh0ZXh0Q2FyZXRNb3ZlZENhbGxiYWNrKSwgMCk7CisKKyAgICAvKiBJdCBzaG91
bGQgYmUgcG9zc2libGUgdG8gcGxhY2UgdGhlIGNhcmV0IGluc2lkZSBhIGhlYWRlci4gKi8KKyAg
ICBnYm9vbGVhbiByZXN1bHQgPSBhdGtfdGV4dF9zZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhUKGhl
YWRlciksIDUpOworICAgIGdfYXNzZXJ0X2NtcGludChyZXN1bHQsID09LCBUUlVFKTsKKyAgICBn
aW50IG9mZnNldCA9IGF0a190ZXh0X2dldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQoaGVhZGVyKSk7
CisgICAgZ19hc3NlcnRfY21waW50KG9mZnNldCwgPT0sIDUpOworICAgIGdfYXNzZXJ0X2NtcHN0
cih0ZXh0Q2FyZXRNb3ZlZFJlc3VsdCwgPT0sICJ8aGVhZGluZ3w1fCIpOworCisgICAgQXRrT2Jq
ZWN0KiBwYXJhZ3JhcGggPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwg
MSk7CisgICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQocGFyYWdyYXBoKSk7CisgICAgZ19zaWduYWxf
Y29ubmVjdChwYXJhZ3JhcGgsICJ0ZXh0LWNhcmV0LW1vdmVkIiwgR19DQUxMQkFDSyh0ZXh0Q2Fy
ZXRNb3ZlZENhbGxiYWNrKSwgMCk7CisKKyAgICAvKiBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8g
cGxhY2UgdGhlIGNhcmV0IGluc2lkZSBhIHBhcmFncmFwaCBhbmQgYSBsaW5rLiAqLworICAgIHJl
c3VsdCA9IGF0a190ZXh0X3NldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQocGFyYWdyYXBoKSwgNSk7
CisgICAgZ19hc3NlcnRfY21waW50KHJlc3VsdCwgPT0sIFRSVUUpOworICAgIG9mZnNldCA9IGF0
a190ZXh0X2dldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQocGFyYWdyYXBoKSk7CisgICAgZ19hc3Nl
cnRfY21waW50KG9mZnNldCwgPT0sIDUpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0Q2FyZXRN
b3ZlZFJlc3VsdCwgPT0sICJ8cGFyYWdyYXBofDV8Iik7CisKKyAgICByZXN1bHQgPSBhdGtfdGV4
dF9zZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhUKHBhcmFncmFwaCksIDIwKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQocmVzdWx0LCA9PSwgVFJVRSk7CisgICAgb2Zmc2V0ID0gYXRrX3RleHRfZ2V0X2Nh
cmV0X29mZnNldChBVEtfVEVYVChwYXJhZ3JhcGgpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQob2Zm
c2V0LCA9PSwgMjApOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0Q2FyZXRNb3ZlZFJlc3VsdCwg
PT0sICJ8cGFyYWdyYXBofDIwfCIpOworCisgICAgcmVzdWx0ID0gYXRrX3RleHRfc2V0X2NhcmV0
X29mZnNldChBVEtfVEVYVChwYXJhZ3JhcGgpLCAzMCk7CisgICAgZ19hc3NlcnRfY21waW50KHJl
c3VsdCwgPT0sIFRSVUUpOworICAgIG9mZnNldCA9IGF0a190ZXh0X2dldF9jYXJldF9vZmZzZXQo
QVRLX1RFWFQocGFyYWdyYXBoKSk7CisgICAgZ19hc3NlcnRfY21waW50KG9mZnNldCwgPT0sIDMw
KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGV4dENhcmV0TW92ZWRSZXN1bHQsID09LCAifHBhcmFn
cmFwaHwzMHwiKTsKKworICAgIEF0a09iamVjdCogbGluayA9IGF0a19vYmplY3RfcmVmX2FjY2Vz
c2libGVfY2hpbGQocGFyYWdyYXBoLCAwKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChsaW5r
KSk7CisKKyAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhUKGxp
bmspLCA1KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocmVzdWx0LCA9PSwgVFJVRSk7CisgICAgb2Zm
c2V0ID0gYXRrX3RleHRfZ2V0X2NhcmV0X29mZnNldChBVEtfVEVYVChsaW5rKSk7CisgICAgZ19h
c3NlcnRfY21waW50KG9mZnNldCwgPT0sIDUpOworICAgIC8qIFBvc2l0aW9ucyBpbnNpZGUgbGlu
a3MgYXJlIHJlcG9ydGVkIHJlbGF0aXZlIHRvIHRoZSBwYXJhZ3JhcGguICovCisgICAgZ19hc3Nl
cnRfY21wc3RyKHRleHRDYXJldE1vdmVkUmVzdWx0LCA9PSwgInxwYXJhZ3JhcGh8MTd8Iik7CisK
KyAgICBBdGtPYmplY3QqIGxpc3QgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9i
amVjdCwgMik7CisgICAgZ19hc3NlcnQoQVRLX09CSkVDVChsaXN0KSk7CisgICAgZ19hc3NlcnQo
YXRrX29iamVjdF9nZXRfcm9sZShsaXN0KSA9PSBBVEtfUk9MRV9MSVNUKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoYXRrX29iamVjdF9nZXRfbl9hY2Nlc3NpYmxlX2NoaWxkcmVuKGxpc3QpLCA9PSwg
Myk7CisKKyAgICBBdGtPYmplY3QqIGxpc3RJdGVtID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJs
ZV9jaGlsZChsaXN0LCAwKTsKKyAgICBsaXN0SXRlbSA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2li
bGVfY2hpbGQobGlzdCwgMik7CisgICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQobGlzdEl0ZW0pKTsK
KworICAgIC8qIEl0J3Mgbm90IHBvc3NpYmxlIHRvIHBsYWNlIHRoZSBjYXJldCBpbnNpZGUgYW4g
aXRlbSdzIG1hcmtlci4gKi8KKyAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfY2FyZXRfb2Zmc2V0
KEFUS19URVhUKGxpc3RJdGVtKSwgMSk7CisgICAgZ19hc3NlcnRfY21waW50KHJlc3VsdCwgPT0s
IEZBTFNFKTsKKworICAgIC8qIEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBwbGFjZSB0aGUgY2Fy
ZXQgaW5zaWRlIGFuIGl0ZW0ncyB0ZXh0LiAqLworICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9j
YXJldF9vZmZzZXQoQVRLX1RFWFQobGlzdEl0ZW0pLCA1KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
cmVzdWx0LCA9PSwgVFJVRSk7CisgICAgb2Zmc2V0ID0gYXRrX3RleHRfZ2V0X2NhcmV0X29mZnNl
dChBVEtfVEVYVChsaXN0SXRlbSkpOworICAgIGdfYXNzZXJ0X2NtcGludChvZmZzZXQsID09LCA1
KTsKKworICAgIEF0a09iamVjdCogcGFuZWwgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2No
aWxkKG9iamVjdCwgMyk7CisgICAgZ19hc3NlcnQoQVRLX0lTX09CSkVDVChwYW5lbCkpOworICAg
IGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUocGFuZWwpID09IEFUS19ST0xFX1BBTkVMKTsK
KworICAgIEF0a09iamVjdCogY29tYm9Cb3ggPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2No
aWxkKHBhbmVsLCAwKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfT0JKRUNUKGNvbWJvQm94KSk7Cisg
ICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShjb21ib0JveCkgPT0gQVRLX1JPTEVfQ09N
Qk9fQk9YKTsKKworICAgIEF0a09iamVjdCogbWVudVBvcHVwID0gYXRrX29iamVjdF9yZWZfYWNj
ZXNzaWJsZV9jaGlsZChjb21ib0JveCwgMCk7CisgICAgZ19hc3NlcnQoQVRLX0lTX09CSkVDVCht
ZW51UG9wdXApKTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKG1lbnVQb3B1cCkg
PT0gQVRLX1JPTEVfTUVOVSk7CisKKyAgICBBdGtPYmplY3QqIGNvbWJvQm94T3B0aW9uID0gYXRr
X29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChtZW51UG9wdXAsIDApOworICAgIGdfYXNzZXJ0
KEFUS19JU19PQkpFQ1QoY29tYm9Cb3hPcHRpb24pKTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0
X2dldF9yb2xlKGNvbWJvQm94T3B0aW9uKSA9PSBBVEtfUk9MRV9NRU5VX0lURU0pOworCisgICAg
LyogSXQncyBub3QgcG9zc2libGUgdG8gcGxhY2UgdGhlIGNhcmV0IGluc2lkZSBhbiBvcHRpb24g
Zm9yIGEgY29tYm9ib3guICovCisgICAgcmVzdWx0ID0gYXRrX3RleHRfc2V0X2NhcmV0X29mZnNl
dChBVEtfVEVYVChjb21ib0JveE9wdGlvbiksIDEpOworICAgIGdfYXNzZXJ0X2NtcGludChyZXN1
bHQsID09LCBGQUxTRSk7CisKKyAgICBBdGtPYmplY3QqIHRleHRFbnRyeSA9IGF0a19vYmplY3Rf
cmVmX2FjY2Vzc2libGVfY2hpbGQocGFuZWwsIDEpOworICAgIGdfYXNzZXJ0KEFUS19JU19PQkpF
Q1QodGV4dEVudHJ5KSk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZSh0ZXh0RW50
cnkpID09IEFUS19ST0xFX0VOVFJZKTsKKworICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9jYXJl
dF9vZmZzZXQoQVRLX1RFWFQodGV4dEVudHJ5KSwgNSk7CisgICAgZ19hc3NlcnRfY21waW50KHJl
c3VsdCwgPT0sIFRSVUUpOworICAgIG9mZnNldCA9IGF0a190ZXh0X2dldF9jYXJldF9vZmZzZXQo
QVRLX1RFWFQodGV4dEVudHJ5KSk7CisgICAgZ19hc3NlcnRfY21waW50KG9mZnNldCwgPT0sIDUp
OworCisgICAgQXRrT2JqZWN0KiB0YWJsZSA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hp
bGQob2JqZWN0LCA0KTsKKyAgICBnX2Fzc2VydChBVEtfSVNfT0JKRUNUKHRhYmxlKSk7CisgICAg
Z19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZSh0YWJsZSkgPT0gQVRLX1JPTEVfVEFCTEUpOwor
ICAgIGdfYXNzZXJ0X2NtcGludChhdGtfb2JqZWN0X2dldF9uX2FjY2Vzc2libGVfY2hpbGRyZW4o
dGFibGUpLCA9PSwgNCk7CisKKyAgICBBdGtPYmplY3QqIHRhYmxlQ2VsbCA9IGF0a19vYmplY3Rf
cmVmX2FjY2Vzc2libGVfY2hpbGQodGFibGUsIDApOworICAgIGdfYXNzZXJ0KGF0a19vYmplY3Rf
Z2V0X3JvbGUodGFibGVDZWxsKSA9PSBBVEtfUk9MRV9UQUJMRV9DRUxMKTsKKyAgICByZXN1bHQg
PSBhdGtfdGV4dF9zZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhUKHRhYmxlQ2VsbCksIDIpOworICAg
IGdfYXNzZXJ0X2NtcGludChyZXN1bHQsID09LCBUUlVFKTsKKyAgICBvZmZzZXQgPSBhdGtfdGV4
dF9nZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhUKHRhYmxlQ2VsbCkpOworICAgIGdfYXNzZXJ0X2Nt
cGludChvZmZzZXQsID09LCAyKTsKKworICAgIGdfZnJlZSh0ZXh0Q2FyZXRNb3ZlZFJlc3VsdCk7
CisKKyAgICBnX29iamVjdF91bnJlZihwYXJhZ3JhcGgpOworICAgIGdfb2JqZWN0X3VucmVmKGxp
bmspOworICAgIGdfb2JqZWN0X3VucmVmKGxpc3QpOworICAgIGdfb2JqZWN0X3VucmVmKGxpc3RJ
dGVtKTsKKyAgICBnX29iamVjdF91bnJlZihwYW5lbCk7CisgICAgZ19vYmplY3RfdW5yZWYoY29t
Ym9Cb3gpOworICAgIGdfb2JqZWN0X3VucmVmKG1lbnVQb3B1cCk7CisgICAgZ19vYmplY3RfdW5y
ZWYoY29tYm9Cb3hPcHRpb24pOworICAgIGdfb2JqZWN0X3VucmVmKHRleHRFbnRyeSk7CisgICAg
Z19vYmplY3RfdW5yZWYodGFibGUpOworICAgIGdfb2JqZWN0X3VucmVmKHRhYmxlQ2VsbCk7Cisg
ICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJraXRB
dGtDYXJldE9mZnNldHNBbmRFeHRyYW5vdXNXaGl0ZVNwYWNlcygpCit7CisgICAgV2ViS2l0V2Vi
Vmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwor
ICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOworICAgIEd0a0FsbG9jYXRpb24gYWxsb2Nh
dGlvbiA9IHsgMCwgMCwgODAwLCA2MDAgfTsKKyAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUo
R1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOworICAgIHdlYmtpdF93ZWJfdmlld19s
b2FkX3N0cmluZyh3ZWJWaWV3LCBjb250ZW50c1dpdGhFeHRyYW5lb3VzV2hpdGVTcGFjZXMsIDAs
IDAsIDApOworCisgICAgLyogRW5hYmxlIGNhcmV0IGJyb3dzaW5nLiAqLworICAgIFdlYktpdFdl
YlNldHRpbmdzKiBzZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmll
dyk7CisgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKHNldHRpbmdzKSwgImVuYWJsZS1jYXJldC1i
cm93c2luZyIsIFRSVUUsIE5VTEwpOworCisgICAgLyogR2V0IHRvIHRoZSBpbm5lciBBdGtUZXh0
IG9iamVjdC4gKi8KKyAgICBBdGtPYmplY3QqIG9iamVjdCA9IGdldFdlYkFyZWFPYmplY3Qod2Vi
Vmlldyk7CisgICAgZ19hc3NlcnQob2JqZWN0KTsKKyAgICBvYmplY3QgPSBhdGtfb2JqZWN0X3Jl
Zl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMCk7CisgICAgZ19hc3NlcnQob2JqZWN0KTsKKwor
ICAgIEF0a1RleHQqIHRleHRPYmplY3QgPSBBVEtfVEVYVChvYmplY3QpOworICAgIGdfYXNzZXJ0
KEFUS19JU19URVhUKHRleHRPYmplY3QpKTsKKworICAgIGdpbnQgY2hhcmFjdGVyQ291bnQgPSBh
dGtfdGV4dF9nZXRfY2hhcmFjdGVyX2NvdW50KHRleHRPYmplY3QpOworICAgIGdfYXNzZXJ0X2Nt
cGludChjaGFyYWN0ZXJDb3VudCwgPT0sIDI1KTsKKworICAgIGdib29sZWFuIHJlc3VsdCA9IGF0
a190ZXh0X3NldF9jYXJldF9vZmZzZXQodGV4dE9iamVjdCwgY2hhcmFjdGVyQ291bnQgLSAxKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQocmVzdWx0LCA9PSwgVFJVRSk7CisKKyAgICBnaW50IGNhcmV0
T2Zmc2V0ID0gYXRrX3RleHRfZ2V0X2NhcmV0X29mZnNldCh0ZXh0T2JqZWN0KTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoY2FyZXRPZmZzZXQsID09LCBjaGFyYWN0ZXJDb3VudCAtIDEpOworCisgICAg
cmVzdWx0ID0gYXRrX3RleHRfc2V0X2NhcmV0X29mZnNldCh0ZXh0T2JqZWN0LCBjaGFyYWN0ZXJD
b3VudCk7CisgICAgZ19hc3NlcnRfY21waW50KHJlc3VsdCwgPT0sIFRSVUUpOworCisgICAgY2Fy
ZXRPZmZzZXQgPSBhdGtfdGV4dF9nZXRfY2FyZXRfb2Zmc2V0KHRleHRPYmplY3QpOworICAgIGdf
YXNzZXJ0X2NtcGludChjYXJldE9mZnNldCwgPT0sIGNoYXJhY3RlckNvdW50KTsKKworICAgIGdf
b2JqZWN0X3VucmVmKG9iamVjdCk7CisgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Cit9CisK
K3N0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtDb21ib0JveCgpCit7CisgICAgV2ViS2l0V2ViVmll
dyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAg
IGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlv
biA9IHsgMCwgMCwgODAwLCA2MDAgfTsKKyAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RL
X1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOworICAgIHdlYmtpdF93ZWJfdmlld19sb2Fk
X3N0cmluZyh3ZWJWaWV3LCBjb21ib0JveFNlbGVjdG9yLCAwLCAwLCAwKTsKKworICAgIEF0a09i
amVjdCogb2JqZWN0ID0gZ2V0V2ViQXJlYU9iamVjdCh3ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChv
YmplY3QpOworCisgICAgQXRrT2JqZWN0KiBmb3JtT2JqZWN0ID0gYXRrX29iamVjdF9yZWZfYWNj
ZXNzaWJsZV9jaGlsZChvYmplY3QsIDApOworICAgIGdfYXNzZXJ0KGZvcm1PYmplY3QpOworCisg
ICAgQXRrT2JqZWN0KiBjb21ib0JveCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQo
Zm9ybU9iamVjdCwgMCk7CisgICAgZ19hc3NlcnQoQVRLX0lTX09CSkVDVChjb21ib0JveCkpOwor
CisgICAgQXRrT2JqZWN0KiBtZW51UG9wdXAgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2No
aWxkKGNvbWJvQm94LCAwKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfT0JKRUNUKG1lbnVQb3B1cCkp
OworCisgICAgQXRrT2JqZWN0KiBpdGVtMSA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hp
bGQobWVudVBvcHVwLCAwKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfT0JKRUNUKGl0ZW0xKSk7CisK
KyAgICBBdGtPYmplY3QqIGl0ZW0yID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZCht
ZW51UG9wdXAsIDEpOworICAgIGdfYXNzZXJ0KEFUS19JU19PQkpFQ1QoaXRlbTIpKTsKKworICAg
IC8qIENoZWNrIHJvbGVzLiAqLworICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoY29t
Ym9Cb3gpID09IEFUS19ST0xFX0NPTUJPX0JPWCk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9n
ZXRfcm9sZShtZW51UG9wdXApID09IEFUS19ST0xFX01FTlUpOworICAgIGdfYXNzZXJ0KGF0a19v
YmplY3RfZ2V0X3JvbGUoaXRlbTEpID09IEFUS19ST0xFX01FTlVfSVRFTSk7CisgICAgZ19hc3Nl
cnQoYXRrX29iamVjdF9nZXRfcm9sZShpdGVtMikgPT0gQVRLX1JPTEVfTUVOVV9JVEVNKTsKKwor
ICAgIC8qIENoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQXRrU2VsZWN0aW9uIGludGVy
ZmFjZS4gKi8KKyAgICBnX2Fzc2VydChBVEtfSVNfU0VMRUNUSU9OKGNvbWJvQm94KSk7CisgICAg
QXRrU2VsZWN0aW9uKiBhdGtTZWxlY3Rpb24gPSBBVEtfU0VMRUNUSU9OKGNvbWJvQm94KTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoYXRrX3NlbGVjdGlvbl9nZXRfc2VsZWN0aW9uX2NvdW50KGF0a1Nl
bGVjdGlvbiksID09LCAxKTsKKyAgICBnX2Fzc2VydChhdGtfc2VsZWN0aW9uX2lzX2NoaWxkX3Nl
bGVjdGVkKGF0a1NlbGVjdGlvbiwgMCkpOworICAgIGdfYXNzZXJ0KCFhdGtfc2VsZWN0aW9uX2lz
X2NoaWxkX3NlbGVjdGVkKGF0a1NlbGVjdGlvbiwgMSkpOworICAgIEF0a09iamVjdCogc2VsZWN0
ZWRJdGVtID0gYXRrX3NlbGVjdGlvbl9yZWZfc2VsZWN0aW9uKGF0a1NlbGVjdGlvbiwgMCk7Cisg
ICAgZ19hc3NlcnQoc2VsZWN0ZWRJdGVtID09IGl0ZW0xKTsKKyAgICBnX29iamVjdF91bnJlZihz
ZWxlY3RlZEl0ZW0pOworCisgICAgLyogQ2hlY2sgdGhhdCB0aGUgbWVudSBwb3B1cCBoYXMgMCBs
aW5rcyBhbmQgZG9lc24ndCBjcmFzaCBmcm9tIGNoZWNraW5nLiAqLworICAgIGdpbnQgbkxpbmtz
ID0gYXRrX2h5cGVydGV4dF9nZXRfbl9saW5rcyhBVEtfSFlQRVJURVhUKG1lbnVQb3B1cCkpOwor
ICAgIGdfYXNzZXJ0X2NtcGludChuTGlua3MsID09LCAwKTsKKworICAgIC8qIENoZWNrIHRoZSBp
bXBsZW1lbnRhdGlvbnMgb2YgdGhlIEF0a0FjdGlvbiBpbnRlcmZhY2UuICovCisgICAgZ19hc3Nl
cnQoQVRLX0lTX0FDVElPTihjb21ib0JveCkpOworICAgIEF0a0FjdGlvbiogYXRrQWN0aW9uID0g
QVRLX0FDVElPTihjb21ib0JveCk7CisgICAgZ19hc3NlcnRfY21waW50KGF0a19hY3Rpb25fZ2V0
X25fYWN0aW9ucyhhdGtBY3Rpb24pLCA9PSwgMSk7CisgICAgZ19hc3NlcnQoYXRrX2FjdGlvbl9k
b19hY3Rpb24oYXRrQWN0aW9uLCAwKSk7CisKKyAgICBnX2Fzc2VydChBVEtfSVNfQUNUSU9OKG1l
bnVQb3B1cCkpOworICAgIGF0a0FjdGlvbiA9IEFUS19BQ1RJT04obWVudVBvcHVwKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoYXRrX2FjdGlvbl9nZXRfbl9hY3Rpb25zKGF0a0FjdGlvbiksID09LCAx
KTsKKyAgICBnX2Fzc2VydChhdGtfYWN0aW9uX2RvX2FjdGlvbihhdGtBY3Rpb24sIDApKTsKKwor
ICAgIGdfYXNzZXJ0KEFUS19JU19BQ1RJT04oaXRlbTEpKTsKKyAgICBhdGtBY3Rpb24gPSBBVEtf
QUNUSU9OKGl0ZW0xKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2FjdGlvbl9nZXRfbl9hY3Rp
b25zKGF0a0FjdGlvbiksID09LCAxKTsKKyAgICBnX2Fzc2VydChhdGtfYWN0aW9uX2RvX2FjdGlv
bihhdGtBY3Rpb24sIDApKTsKKworICAgIGdfYXNzZXJ0KEFUS19JU19BQ1RJT04oaXRlbTIpKTsK
KyAgICBhdGtBY3Rpb24gPSBBVEtfQUNUSU9OKGl0ZW0yKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
YXRrX2FjdGlvbl9nZXRfbl9hY3Rpb25zKGF0a0FjdGlvbiksID09LCAxKTsKKyAgICBnX2Fzc2Vy
dChhdGtfYWN0aW9uX2RvX2FjdGlvbihhdGtBY3Rpb24sIDApKTsKKworICAgIC8qIEFmdGVyIHNl
bGVjdGluZyB0aGUgc2Vjb25kIGl0ZW0sIHNlbGVjdGlvbiBzaG91bGQgaGF2ZSBjaGFuZ2VkLiAq
LworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfc2VsZWN0aW9uX2dldF9zZWxlY3Rpb25fY291bnQo
YXRrU2VsZWN0aW9uKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0KCFhdGtfc2VsZWN0aW9uX2lzX2No
aWxkX3NlbGVjdGVkKGF0a1NlbGVjdGlvbiwgMCkpOworICAgIGdfYXNzZXJ0KGF0a19zZWxlY3Rp
b25faXNfY2hpbGRfc2VsZWN0ZWQoYXRrU2VsZWN0aW9uLCAxKSk7CisgICAgc2VsZWN0ZWRJdGVt
ID0gYXRrX3NlbGVjdGlvbl9yZWZfc2VsZWN0aW9uKGF0a1NlbGVjdGlvbiwgMCk7CisgICAgZ19h
c3NlcnQoc2VsZWN0ZWRJdGVtID09IGl0ZW0yKTsKKyAgICBnX29iamVjdF91bnJlZihzZWxlY3Rl
ZEl0ZW0pOworCisgICAgZ19vYmplY3RfdW5yZWYoZm9ybU9iamVjdCk7CisgICAgZ19vYmplY3Rf
dW5yZWYoY29tYm9Cb3gpOworICAgIGdfb2JqZWN0X3VucmVmKG1lbnVQb3B1cCk7CisgICAgZ19v
YmplY3RfdW5yZWYoaXRlbTEpOworICAgIGdfb2JqZWN0X3VucmVmKGl0ZW0yKTsKKyAgICBnX29i
amVjdF91bnJlZih3ZWJWaWV3KTsKK30KKworc3RhdGljIGdjaGFyKiBsb2FkaW5nRXZlbnRzUmVz
dWx0ID0gMDsKKworc3RhdGljIHZvaWQgdXBkYXRlTG9hZGluZ0V2ZW50c1Jlc3VsdChjb25zdCBn
Y2hhciogc2lnbmFsTmFtZSkKK3sKKyAgICBnX2Fzc2VydChzaWduYWxOYW1lKTsKKworICAgIGdj
aGFyKiBwcmV2aW91c1Jlc3VsdCA9IGxvYWRpbmdFdmVudHNSZXN1bHQ7CisgICAgbG9hZGluZ0V2
ZW50c1Jlc3VsdCA9IGdfc3RyZHVwX3ByaW50ZigiJXN8JXMiLCBwcmV2aW91c1Jlc3VsdCwgc2ln
bmFsTmFtZSk7CisgICAgZ19mcmVlKHByZXZpb3VzUmVzdWx0KTsKK30KKworc3RhdGljIGdib29s
ZWFuIGRvY3VtZW50TG9hZGluZ0V2ZW50Q2FsbGJhY2soR1NpZ25hbEludm9jYXRpb25IaW50ICpz
aWduYWxIaW50LCBndWludCBudW1QYXJhbVZhbHVlcywgY29uc3QgR1ZhbHVlICpwYXJhbVZhbHVl
cywgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICAvLyBBdCBsZWFzdCB3ZSBzaG91bGQgcmVjZWl2ZSB0
aGUgaW5zdGFuY2UgZW1pdHRpbmcgdGhlIHNpZ25hbC4KKyAgICBpZiAobnVtUGFyYW1WYWx1ZXMg
PCAxKQorICAgICAgICByZXR1cm4gVFJVRTsKKworICAgIEdTaWduYWxRdWVyeSBzaWduYWxfcXVl
cnk7CisgICAgZ19zaWduYWxfcXVlcnkoc2lnbmFsSGludC0+c2lnbmFsX2lkLCAmc2lnbmFsX3F1
ZXJ5KTsKKworICAgIHVwZGF0ZUxvYWRpbmdFdmVudHNSZXN1bHQoc2lnbmFsX3F1ZXJ5LnNpZ25h
bF9uYW1lKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0
a0RvY3VtZW50TG9hZGluZ0V2ZW50cygpCit7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9
IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3Jl
Zl9zaW5rKHdlYlZpZXcpOworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwg
ODAwLCA2MDAgfTsKKyAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJW
aWV3KSwgJmFsbG9jYXRpb24pOworCisgICAgLyogQ29ubmVjdCBnbG9iYWxseSB0byBzZWUgdGhv
c2UgZXZlbnRzIGR1cmluZyBhIGZ1dHVyZSBsb2FkLiAqLworICAgIGd1aW50IGxvYWRDb21wbGV0
ZUxpc3RlbmVySWQgPSBhdGtfYWRkX2dsb2JhbF9ldmVudF9saXN0ZW5lcihkb2N1bWVudExvYWRp
bmdFdmVudENhbGxiYWNrLCAiQVRLOkF0a0RvY3VtZW50OmxvYWQtY29tcGxldGUiKTsKKworICAg
IC8qIERvIHRoZSBsb2FkLCBzbyB3ZSBjYW4gc2VlIHRob3NlIGV2ZW50cyBoYXBwZW5pbmcuICov
CisgICAgbG9hZGluZ0V2ZW50c1Jlc3VsdCA9IGdfc3RyZHVwKCIiKTsKKyAgICB3ZWJraXRfd2Vi
X3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgY29udGVudHMsIDAsIDAsIDApOworCisgICAgLyog
VHJpZ2dlciB0aGUgY3JlYXRpb24gb2YgdGhlIGZ1bGwgYWNjZXNzaWJpbGl0eSBoaWVyYXJjaHkg
YnkKKyAgICAgICBhc2tpbmcgZm9yIHRoZSB3ZWJBcmVhIG9iamVjdCwgc28gd2UgY2FuIGxpc3Rl
biB0byBldmVudHMuICovCisgICAgZ2V0V2ViQXJlYU9iamVjdCh3ZWJWaWV3KTsKKworICAgIGF0
a19yZW1vdmVfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGxvYWRDb21wbGV0ZUxpc3RlbmVySWQpOwor
CisgICAgZ19hc3NlcnRfY21wc3RyKGxvYWRpbmdFdmVudHNSZXN1bHQsID09LCAifGxvYWQtY29t
cGxldGUiKTsKKworICAgIGdfZnJlZShsb2FkaW5nRXZlbnRzUmVzdWx0KTsKKyAgICBnX29iamVj
dF91bnJlZih3ZWJWaWV3KTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0VtYmVkZGVk
T2JqZWN0cygpCit7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklF
Vyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcp
OworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgODAwLCA2MDAgfTsKKyAg
ICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRp
b24pOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LCBlbWJlZGRlZE9i
amVjdHMsIDAsIDAsIDApOworCisgICAgQXRrT2JqZWN0KiBvYmplY3QgPSBnZXRXZWJBcmVhT2Jq
ZWN0KHdlYlZpZXcpOworICAgIGdfYXNzZXJ0KG9iamVjdCk7CisKKyAgICBBdGtUZXh0KiBwYXJh
Z3JhcGgxID0gQVRLX1RFWFQoYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3Qs
IDApKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChwYXJhZ3JhcGgxKSk7CisgICAgZ19hc3Nl
cnQoQVRLX0lTX0hZUEVSVEVYVChwYXJhZ3JhcGgxKSk7CisKKyAgICBnaW50IG5MaW5rcyA9IGF0
a19oeXBlcnRleHRfZ2V0X25fbGlua3MoQVRLX0hZUEVSVEVYVChwYXJhZ3JhcGgxKSk7CisgICAg
Z19hc3NlcnRfY21waW50KG5MaW5rcywgPT0sIDIpOworCisgICAgQXRrSHlwZXJsaW5rKiBoTGlu
ayA9IGF0a19oeXBlcnRleHRfZ2V0X2xpbmsoQVRLX0hZUEVSVEVYVChwYXJhZ3JhcGgxKSwgMCk7
CisgICAgZ19hc3NlcnQoQVRLX0hZUEVSTElOSyhoTGluaykpOworICAgIEF0a09iamVjdCogaExp
bmtPYmplY3QgPSBhdGtfaHlwZXJsaW5rX2dldF9vYmplY3QoaExpbmssIDApOworICAgIGdfYXNz
ZXJ0KEFUS19PQkpFQ1QoaExpbmtPYmplY3QpKTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dl
dF9yb2xlKGhMaW5rT2JqZWN0KSA9PSBBVEtfUk9MRV9DSEVDS19CT1gpOworICAgIGdfYXNzZXJ0
X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9zdGFydF9pbmRleChoTGluayksID09LCA4KTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfZW5kX2luZGV4KGhMaW5rKSwgPT0s
IDkpOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9uX2FuY2hvcnMoaExp
bmspLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGF0a19oeXBlcmxpbmtfZ2V0X3VyaSho
TGluaywgMCksID09LCAwKTsKKworICAgIEF0a1RleHQqIHBhcmFncmFwaDIgPSBBVEtfVEVYVChh
dGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMSkpOworICAgIGdfYXNzZXJ0
KEFUS19JU19IWVBFUlRFWFQocGFyYWdyYXBoMikpOworCisgICAgbkxpbmtzID0gYXRrX2h5cGVy
dGV4dF9nZXRfbl9saW5rcyhBVEtfSFlQRVJURVhUKHBhcmFncmFwaDIpKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQobkxpbmtzLCA9PSwgMSk7CisKKyAgICBoTGluayA9IGF0a19oeXBlcnRleHRfZ2V0
X2xpbmsoQVRLX0hZUEVSVEVYVChwYXJhZ3JhcGgyKSwgMCk7CisgICAgZ19hc3NlcnQoQVRLX0hZ
UEVSTElOSyhoTGluaykpOworICAgIGhMaW5rT2JqZWN0ID0gYXRrX2h5cGVybGlua19nZXRfb2Jq
ZWN0KGhMaW5rLCAwKTsKKyAgICBnX2Fzc2VydChBVEtfT0JKRUNUKGhMaW5rT2JqZWN0KSk7Cisg
ICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShoTGlua09iamVjdCkgPT0gQVRLX1JPTEVf
Q09NQk9fQk9YKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfc3RhcnRf
aW5kZXgoaExpbmspLCA9PSwgOCk7CisgICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtf
Z2V0X2VuZF9pbmRleChoTGluayksID09LCA5KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5
cGVybGlua19nZXRfbl9hbmNob3JzKGhMaW5rKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcHN0
cihhdGtfaHlwZXJsaW5rX2dldF91cmkoaExpbmssIDApLCA9PSwgMCk7CisKKyAgICBBdGtUZXh0
KiBwYXJhZ3JhcGgzID0gQVRLX1RFWFQoYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChv
YmplY3QsIDIpKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfSFlQRVJURVhUKHBhcmFncmFwaDMpKTsK
KworICAgIG5MaW5rcyA9IGF0a19oeXBlcnRleHRfZ2V0X25fbGlua3MoQVRLX0hZUEVSVEVYVChw
YXJhZ3JhcGgzKSk7CisgICAgZ19hc3NlcnRfY21waW50KG5MaW5rcywgPT0sIDEpOworCisgICAg
aExpbmsgPSBhdGtfaHlwZXJ0ZXh0X2dldF9saW5rKEFUS19IWVBFUlRFWFQocGFyYWdyYXBoMyks
IDApOworICAgIGdfYXNzZXJ0KEFUS19IWVBFUkxJTksoaExpbmspKTsKKyAgICBoTGlua09iamVj
dCA9IGF0a19oeXBlcmxpbmtfZ2V0X29iamVjdChoTGluaywgMCk7CisgICAgZ19hc3NlcnQoQVRL
X09CSkVDVChoTGlua09iamVjdCkpOworICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUo
aExpbmtPYmplY3QpID09IEFUS19ST0xFX1BVU0hfQlVUVE9OKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoYXRrX2h5cGVybGlua19nZXRfc3RhcnRfaW5kZXgoaExpbmspLCA9PSwgMCk7CisgICAgZ19h
c3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0X2VuZF9pbmRleChoTGluayksID09LCAxKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfbl9hbmNob3JzKGhMaW5rKSwg
PT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcHN0cihhdGtfaHlwZXJsaW5rX2dldF91cmkoaExpbmss
IDApLCA9PSwgMCk7CisKKyAgICBnX29iamVjdF91bnJlZihwYXJhZ3JhcGgxKTsKKyAgICBnX29i
amVjdF91bnJlZihwYXJhZ3JhcGgyKTsKKyAgICBnX29iamVjdF91bnJlZihwYXJhZ3JhcGgzKTsK
KyAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYmtp
dEF0a0dldEhlYWRlcnNJblRhYmxlKCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0g
V0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmplY3RfcmVm
X3Npbmsod2ViVmlldyk7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA4
MDAsIDYwMCB9OworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdlYlZp
ZXcpLCAmYWxsb2NhdGlvbik7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZp
ZXcsIGNvbnRlbnRzSW5UYWJsZVdpdGhIZWFkZXJzLCAwLCAwLCAwKTsKKworICAgIEF0a09iamVj
dCogYXhXZWJWaWV3ID0gZ2V0V2ViQXJlYU9iamVjdCh3ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChh
eFdlYlZpZXcpOworCisgICAgLyogQ2hlY2sgdGFibGUgd2l0aCBib3RoIGNvbHVtbiBhbmQgcm93
IGhlYWRlcnMuICovCisgICAgQXRrT2JqZWN0KiB0YWJsZSA9IGF0a19vYmplY3RfcmVmX2FjY2Vz
c2libGVfY2hpbGQoYXhXZWJWaWV3LCAwKTsKKyAgICBnX2Fzc2VydCh0YWJsZSk7CisgICAgZ19h
c3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZSh0YWJsZSkgPT0gQVRLX1JPTEVfVEFCTEUpOworCisg
ICAgQXRrT2JqZWN0KiBjb2xIZWFkZXIgPSBhdGtfdGFibGVfZ2V0X2NvbHVtbl9oZWFkZXIoQVRL
X1RBQkxFKHRhYmxlKSwgMCk7CisgICAgZ19hc3NlcnQoY29sSGVhZGVyKTsKKyAgICBnX2Fzc2Vy
dChhdGtfb2JqZWN0X2dldF9yb2xlKGNvbEhlYWRlcikgPT0gQVRLX1JPTEVfVEFCTEVfQ0VMTCk7
CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfaW5kZXhfaW5fcGFyZW50KGNvbEhlYWRlcikg
PT0gMCk7CisKKyAgICBjb2xIZWFkZXIgPSBhdGtfdGFibGVfZ2V0X2NvbHVtbl9oZWFkZXIoQVRL
X1RBQkxFKHRhYmxlKSwgMSk7CisgICAgZ19hc3NlcnQoY29sSGVhZGVyKTsKKyAgICBnX2Fzc2Vy
dChhdGtfb2JqZWN0X2dldF9yb2xlKGNvbEhlYWRlcikgPT0gQVRLX1JPTEVfVEFCTEVfQ0VMTCk7
CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfaW5kZXhfaW5fcGFyZW50KGNvbEhlYWRlcikg
PT0gMSk7CisKKyAgICBjb2xIZWFkZXIgPSBhdGtfdGFibGVfZ2V0X2NvbHVtbl9oZWFkZXIoQVRL
X1RBQkxFKHRhYmxlKSwgMik7CisgICAgZ19hc3NlcnQoY29sSGVhZGVyKTsKKyAgICBnX2Fzc2Vy
dChhdGtfb2JqZWN0X2dldF9yb2xlKGNvbEhlYWRlcikgPT0gQVRLX1JPTEVfVEFCTEVfQ0VMTCk7
CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfaW5kZXhfaW5fcGFyZW50KGNvbEhlYWRlcikg
PT0gMik7CisKKyAgICBjb2xIZWFkZXIgPSBhdGtfdGFibGVfZ2V0X2NvbHVtbl9oZWFkZXIoQVRL
X1RBQkxFKHRhYmxlKSwgMyk7CisgICAgZ19hc3NlcnQoY29sSGVhZGVyKTsKKyAgICBnX2Fzc2Vy
dChhdGtfb2JqZWN0X2dldF9yb2xlKGNvbEhlYWRlcikgPT0gQVRLX1JPTEVfVEFCTEVfQ0VMTCk7
CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfaW5kZXhfaW5fcGFyZW50KGNvbEhlYWRlcikg
PT0gMik7CisKKyAgICBBdGtPYmplY3QqIHJvd0hlYWRlciA9IGF0a190YWJsZV9nZXRfcm93X2hl
YWRlcihBVEtfVEFCTEUodGFibGUpLCAwKTsKKyAgICBnX2Fzc2VydChyb3dIZWFkZXIpOworICAg
IGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUocm93SGVhZGVyKSA9PSBBVEtfUk9MRV9UQUJM
RV9DRUxMKTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9pbmRleF9pbl9wYXJlbnQocm93
SGVhZGVyKSA9PSAwKTsKKworICAgIHJvd0hlYWRlciA9IGF0a190YWJsZV9nZXRfcm93X2hlYWRl
cihBVEtfVEFCTEUodGFibGUpLCAxKTsKKyAgICBnX2Fzc2VydChyb3dIZWFkZXIpOworICAgIGdf
YXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUocm93SGVhZGVyKSA9PSBBVEtfUk9MRV9UQUJMRV9D
RUxMKTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9pbmRleF9pbl9wYXJlbnQocm93SGVh
ZGVyKSA9PSAzKTsKKworICAgIHJvd0hlYWRlciA9IGF0a190YWJsZV9nZXRfcm93X2hlYWRlcihB
VEtfVEFCTEUodGFibGUpLCAyKTsKKyAgICBnX2Fzc2VydChyb3dIZWFkZXIpOworICAgIGdfYXNz
ZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUocm93SGVhZGVyKSA9PSBBVEtfUk9MRV9UQUJMRV9DRUxM
KTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9pbmRleF9pbl9wYXJlbnQocm93SGVhZGVy
KSA9PSA3KTsKKworICAgIHJvd0hlYWRlciA9IGF0a190YWJsZV9nZXRfcm93X2hlYWRlcihBVEtf
VEFCTEUodGFibGUpLCAzKTsKKyAgICBnX2Fzc2VydChyb3dIZWFkZXIpOworICAgIGdfYXNzZXJ0
KGF0a19vYmplY3RfZ2V0X3JvbGUocm93SGVhZGVyKSA9PSBBVEtfUk9MRV9UQUJMRV9DRUxMKTsK
KyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9pbmRleF9pbl9wYXJlbnQocm93SGVhZGVyKSA9
PSA3KTsKKworICAgIGdfb2JqZWN0X3VucmVmKHRhYmxlKTsKKworICAgIC8qIENoZWNrIHRhYmxl
IHdpdGggbm8gaGVhZGVycyBhdCBhbGwuICovCisgICAgdGFibGUgPSBhdGtfb2JqZWN0X3JlZl9h
Y2Nlc3NpYmxlX2NoaWxkKGF4V2ViVmlldywgMSk7CisgICAgZ19hc3NlcnQodGFibGUpOworICAg
IGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUodGFibGUpID09IEFUS19ST0xFX1RBQkxFKTsK
KworICAgIGNvbEhlYWRlciA9IGF0a190YWJsZV9nZXRfY29sdW1uX2hlYWRlcihBVEtfVEFCTEUo
dGFibGUpLCAwKTsKKyAgICBnX2Fzc2VydChjb2xIZWFkZXIgPT0gMCk7CisKKyAgICBjb2xIZWFk
ZXIgPSBhdGtfdGFibGVfZ2V0X2NvbHVtbl9oZWFkZXIoQVRLX1RBQkxFKHRhYmxlKSwgMSk7Cisg
ICAgZ19hc3NlcnQoY29sSGVhZGVyID09IDApOworCisgICAgcm93SGVhZGVyID0gYXRrX3RhYmxl
X2dldF9yb3dfaGVhZGVyKEFUS19UQUJMRSh0YWJsZSksIDApOworICAgIGdfYXNzZXJ0KHJvd0hl
YWRlciA9PSAwKTsKKworICAgIHJvd0hlYWRlciA9IGF0a190YWJsZV9nZXRfcm93X2hlYWRlcihB
VEtfVEFCTEUodGFibGUpLCAxKTsKKyAgICBnX2Fzc2VydChyb3dIZWFkZXIgPT0gMCk7CisKKyAg
ICBnX29iamVjdF91bnJlZih0YWJsZSk7CisgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Cit9
CisKK3N0YXRpYyBnaW50IGNvbXBBdGtBdHRyaWJ1dGUoQXRrQXR0cmlidXRlKiBhMSwgQXRrQXR0
cmlidXRlKiBhMikKK3sKKyAgICBnaW50IHN0cmNtcFZhbCA9IGdfc3RyY21wMChhMS0+bmFtZSwg
YTItPm5hbWUpOworICAgIGlmIChzdHJjbXBWYWwpCisgICAgICAgIHJldHVybiBzdHJjbXBWYWw7
CisgICAgcmV0dXJuIGdfc3RyY21wMChhMS0+dmFsdWUsIGEyLT52YWx1ZSk7Cit9CisKK3N0YXRp
YyBnaW50IGNvbXBBdGtBdHRyaWJ1dGVOYW1lKEF0a0F0dHJpYnV0ZSogYTEsIEF0a0F0dHJpYnV0
ZSogYTIpCit7CisgICAgcmV0dXJuIGdfc3RyY21wMChhMS0+bmFtZSwgYTItPm5hbWUpOworfQor
CitzdGF0aWMgZ2Jvb2xlYW4gYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlTmFtZUhhc1ZhbHVlKEF0
a0F0dHJpYnV0ZVNldCogc2V0LCBjb25zdCBnY2hhciogYXR0cmlidXRlTmFtZSwgY29uc3QgZ2No
YXIqIHZhbHVlKQoreworICAgIEF0a0F0dHJpYnV0ZSBhdDsKKyAgICBhdC5uYW1lID0gKGdjaGFy
KilhdHRyaWJ1dGVOYW1lOworICAgIEdTTGlzdCogZWxlbWVudCA9IGdfc2xpc3RfZmluZF9jdXN0
b20oc2V0LCAmYXQsIChHQ29tcGFyZUZ1bmMpY29tcEF0a0F0dHJpYnV0ZU5hbWUpOworICAgIHJl
dHVybiBlbGVtZW50ICYmICFnX3N0cmNtcDAoKChBdGtBdHRyaWJ1dGUqKShlbGVtZW50LT5kYXRh
KSktPnZhbHVlLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBhdGtBdHRyaWJ1dGVTZXRD
b250YWluc0F0dHJpYnV0ZU5hbWUoQXRrQXR0cmlidXRlU2V0KiBzZXQsIGNvbnN0IGdjaGFyKiBh
dHRyaWJ1dGVOYW1lKQoreworICAgIEF0a0F0dHJpYnV0ZSBhdDsKKyAgICBhdC5uYW1lID0gKGdj
aGFyKilhdHRyaWJ1dGVOYW1lOworICAgIHJldHVybiBnX3NsaXN0X2ZpbmRfY3VzdG9tKHNldCwg
JmF0LCAoR0NvbXBhcmVGdW5jKWNvbXBBdGtBdHRyaWJ1dGVOYW1lKSA/IHRydWUgOiBmYWxzZTsK
K30KKworc3RhdGljIGdib29sZWFuIGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKEF0
a0F0dHJpYnV0ZVNldCogc2V0LCBBdGtUZXh0QXR0cmlidXRlIGF0dHJpYnV0ZSwgY29uc3QgZ2No
YXIqIHZhbHVlKQoreworICAgIHJldHVybiBhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVOYW1lSGFz
VmFsdWUoc2V0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoYXR0cmlidXRlKSwgdmFsdWUp
OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gYXRrQXR0cmlidXRlU2V0QXJlRXF1YWwoQXRrQXR0cmli
dXRlU2V0KiBzZXQxLCBBdGtBdHRyaWJ1dGVTZXQqIHNldDIpCit7CisgICAgaWYgKCFzZXQxKQor
ICAgICAgICByZXR1cm4gIXNldDI7CisKKyAgICBzZXQxID0gZ19zbGlzdF9zb3J0KHNldDEsIChH
Q29tcGFyZUZ1bmMpY29tcEF0a0F0dHJpYnV0ZSk7CisgICAgc2V0MiA9IGdfc2xpc3Rfc29ydChz
ZXQyLCAoR0NvbXBhcmVGdW5jKWNvbXBBdGtBdHRyaWJ1dGUpOworCisgICAgd2hpbGUgKHNldDEp
IHsKKyAgICAgICAgaWYgKCFzZXQyIHx8IGNvbXBBdGtBdHRyaWJ1dGUoc2V0MS0+ZGF0YSwgc2V0
Mi0+ZGF0YSkpCisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICAgICAgc2V0MSA9IHNl
dDEtPm5leHQ7CisgICAgICAgIHNldDIgPSBzZXQyLT5uZXh0OworICAgIH0KKworICAgIHJldHVy
biAoIXNldDIpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrVGV4dEF0dHJpYnV0ZXMo
KQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0
X3dlYl92aWV3X25ldygpKTsKKyAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKKyAgICBH
dGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDgwMCwgNjAwIH07CisgICAgZ3RrX3dp
ZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQod2ViVmlldyksICZhbGxvY2F0aW9uKTsKKyAg
ICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgdGV4dFdpdGhBdHRyaWJ1dGVz
LCAwLCAwLCAwKTsKKworICAgIEF0a09iamVjdCogb2JqZWN0ID0gZ2V0V2ViQXJlYU9iamVjdCh3
ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChvYmplY3QpOworCisgICAgQXRrT2JqZWN0KiBjaGlsZCA9
IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAwKTsKKyAgICBnX2Fzc2Vy
dChjaGlsZCAmJiBBVEtfSVNfVEVYVChjaGlsZCkpOworICAgIEF0a1RleHQqIGNoaWxkVGV4dCA9
IEFUS19URVhUKGNoaWxkKTsKKworICAgIGdpbnQgc3RhcnRPZmZzZXQ7CisgICAgZ2ludCBlbmRP
ZmZzZXQ7CisgICAgQXRrQXR0cmlidXRlU2V0KiBzZXQxID0gYXRrX3RleHRfZ2V0X3J1bl9hdHRy
aWJ1dGVzKGNoaWxkVGV4dCwgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZW5k
T2Zmc2V0LCA9PSwgMTIpOworICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEFyZUVxdWFsKHNl
dDEsIDApKTsKKworICAgIEF0a0F0dHJpYnV0ZVNldCogc2V0MiA9IGF0a190ZXh0X2dldF9ydW5f
YXR0cmlidXRlcyhjaGlsZFRleHQsIDE1LCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOworICAg
IGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDEyKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoZW5kT2Zmc2V0LCA9PSwgMTcpOworICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEF0dHJp
YnV0ZUhhc1ZhbHVlKHNldDIsIEFUS19URVhUX0FUVFJfU1RZTEUsICJpdGFsaWMiKSk7CisKKyAg
ICBBdGtBdHRyaWJ1dGVTZXQqIHNldDMgPSBhdGtfdGV4dF9nZXRfcnVuX2F0dHJpYnV0ZXMoY2hp
bGRUZXh0LCAxNywgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoc3RhcnRPZmZzZXQsID09LCAxNyk7CisgICAgZ19hc3NlcnRfY21waW50KGVuZE9mZnNldCwg
PT0sIDQwKTsKKyAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVIYXNWYWx1ZShz
ZXQzLCBBVEtfVEVYVF9BVFRSX1dFSUdIVCwgIjcwMCIpKTsKKworICAgIEF0a0F0dHJpYnV0ZVNl
dCogc2V0NCA9IGF0a190ZXh0X2dldF9kZWZhdWx0X2F0dHJpYnV0ZXMoY2hpbGRUZXh0KTsKKyAg
ICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVIYXNWYWx1ZShzZXQ0LCBBVEtfVEVY
VF9BVFRSX1NUWUxFLCAibm9ybWFsIikpOworICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEF0
dHJpYnV0ZUhhc1ZhbHVlKHNldDQsIEFUS19URVhUX0FUVFJfSlVTVElGSUNBVElPTiwgInJpZ2h0
IikpOworICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDQs
IEFUS19URVhUX0FUVFJfU0laRSwgIjE0IikpOworICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUo
c2V0MSk7CisgICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJlZShzZXQyKTsKKyAgICBhdGtfYXR0cmli
dXRlX3NldF9mcmVlKHNldDMpOworICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0NCk7CisK
KyAgICBnX29iamVjdF91bnJlZihjaGlsZCk7CisgICAgY2hpbGQgPSBhdGtfb2JqZWN0X3JlZl9h
Y2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMSk7CisgICAgZ19hc3NlcnQoY2hpbGQgJiYgQVRLX0lT
X1RFWFQoY2hpbGQpKTsKKyAgICBjaGlsZFRleHQgPSBBVEtfVEVYVChjaGlsZCk7CisKKyAgICBz
ZXQxID0gYXRrX3RleHRfZ2V0X2RlZmF1bHRfYXR0cmlidXRlcyhjaGlsZFRleHQpOworICAgIGdf
YXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDEsIEFUS19URVhUX0FU
VFJfRkFNSUxZX05BTUUsICJtb25vc3BhY2UiKSk7CisgICAgZ19hc3NlcnQoYXRrQXR0cmlidXRl
U2V0QXR0cmlidXRlSGFzVmFsdWUoc2V0MSwgQVRLX1RFWFRfQVRUUl9TVFlMRSwgIm5vcm1hbCIp
KTsKKyAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVIYXNWYWx1ZShzZXQxLCBB
VEtfVEVYVF9BVFRSX1NUUklLRVRIUk9VR0gsICJmYWxzZSIpKTsKKyAgICBnX2Fzc2VydChhdGtB
dHRyaWJ1dGVTZXRBdHRyaWJ1dGVIYXNWYWx1ZShzZXQxLCBBVEtfVEVYVF9BVFRSX1dFSUdIVCwg
IjQwMCIpKTsKKyAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVIYXNWYWx1ZShz
ZXQxLCBBVEtfVEVYVF9BVFRSX0ZHX0NPTE9SLCAiMTIwLDEyMSwxMjIiKSk7CisKKyAgICBzZXQy
ID0gYXRrX3RleHRfZ2V0X3J1bl9hdHRyaWJ1dGVzKGNoaWxkVGV4dCwgNDMsICZzdGFydE9mZnNl
dCwgJmVuZE9mZnNldCk7CisgICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgNDMp
OworICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCA4MCk7CisgICAgLyogQ2hlY2tz
IHRoYXQgZGVmYXVsdCBhdHRyaWJ1dGVzIG9mIHRleHQgYXJlIG5vdCByZXR1cm5lZCB3aGVuIGNh
bGxlZCB0byBhdGtfdGV4dF9nZXRfcnVuX2F0dHJpYnV0ZXMuICovCisgICAgZ19hc3NlcnQoIWF0
a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDIsIEFUS19URVhUX0FUVFJfRkdfQ09M
T1IsICIxMjAsMTIxLDEyMiIpKTsKKyAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1
dGVIYXNWYWx1ZShzZXQyLCBBVEtfVEVYVF9BVFRSX1VOREVSTElORSwgInNpbmdsZSIpKTsKKyAg
ICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVIYXNWYWx1ZShzZXQyLCBBVEtfVEVY
VF9BVFRSX0JHX0NPTE9SLCAiODAsODEsODIiKSk7CisgICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJl
ZShzZXQxKTsKKyAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHNldDIpOworICAgIGdfb2JqZWN0
X3VucmVmKGNoaWxkKTsKKworICAgIGNoaWxkID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9j
aGlsZChvYmplY3QsIDIpOworICAgIGdfYXNzZXJ0KGNoaWxkICYmIEFUS19JU19URVhUKGNoaWxk
KSk7CisgICAgY2hpbGRUZXh0ID0gQVRLX1RFWFQoY2hpbGQpOworCisgICAgc2V0MSA9IGF0a190
ZXh0X2dldF9ydW5fYXR0cmlidXRlcyhjaGlsZFRleHQsIDAsICZzdGFydE9mZnNldCwgJmVuZE9m
ZnNldCk7CisgICAgc2V0MiA9IGF0a190ZXh0X2dldF9ydW5fYXR0cmlidXRlcyhjaGlsZFRleHQs
IDMsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgZ19hc3NlcnQoYXRrQXR0cmlidXRl
U2V0QXJlRXF1YWwoc2V0MSwgc2V0MikpOworICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0
Mik7CisKKyAgICBzZXQyID0gYXRrX3RleHRfZ2V0X3J1bl9hdHRyaWJ1dGVzKGNoaWxkVGV4dCwg
MSwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAgICBzZXQzID0gYXRrX3RleHRfZ2V0X3J1
bl9hdHRyaWJ1dGVzKGNoaWxkVGV4dCwgNSwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAg
ICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBcmVFcXVhbChzZXQyLCBzZXQzKSk7CisgICAgZ19h
c3NlcnQoIWF0a0F0dHJpYnV0ZVNldEFyZUVxdWFsKHNldDEsIHNldDIpKTsKKyAgICBhdGtfYXR0
cmlidXRlX3NldF9mcmVlKHNldDMpOworCisgICAgc2V0MyA9IGF0a190ZXh0X2dldF9ydW5fYXR0
cmlidXRlcyhjaGlsZFRleHQsIDIsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgc2V0
NCA9IGF0a190ZXh0X2dldF9ydW5fYXR0cmlidXRlcyhjaGlsZFRleHQsIDYsICZzdGFydE9mZnNl
dCwgJmVuZE9mZnNldCk7CisgICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0QXJlRXF1YWwoc2V0
Mywgc2V0NCkpOworICAgIGdfYXNzZXJ0KCFhdGtBdHRyaWJ1dGVTZXRBcmVFcXVhbChzZXQxLCBz
ZXQzKSk7CisgICAgZ19hc3NlcnQoIWF0a0F0dHJpYnV0ZVNldEFyZUVxdWFsKHNldDIsIHNldDMp
KTsKKyAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHNldDEpOworICAgIGF0a19hdHRyaWJ1dGVf
c2V0X2ZyZWUoc2V0Mik7CisgICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJlZShzZXQzKTsKKyAgICBh
dGtfYXR0cmlidXRlX3NldF9mcmVlKHNldDQpOworICAgIGdfb2JqZWN0X3VucmVmKGNoaWxkKTsK
KworICAgIGNoaWxkID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDMp
OworICAgIGdfYXNzZXJ0KGNoaWxkICYmIEFUS19JU19URVhUKGNoaWxkKSk7CisgICAgY2hpbGRU
ZXh0ID0gQVRLX1RFWFQoY2hpbGQpOworICAgIHNldDEgPSBhdGtfdGV4dF9nZXRfcnVuX2F0dHJp
YnV0ZXMoY2hpbGRUZXh0LCAyNCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAyMSk7CisgICAgZ19hc3NlcnRfY21waW50KGVu
ZE9mZnNldCwgPT0sIDI1KTsKKyAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVI
YXNWYWx1ZShzZXQxLCBBVEtfVEVYVF9BVFRSX1NUUklLRVRIUk9VR0gsICJ0cnVlIikpOworCisg
ICAgc2V0MiA9IGF0a190ZXh0X2dldF9ydW5fYXR0cmlidXRlcyhjaGlsZFRleHQsIDI1LCAmc3Rh
cnRPZmZzZXQsICZlbmRPZmZzZXQpOworICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwg
PT0sIDI1KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMzApOworICAgIGdf
YXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEFyZUVxdWFsKHNldDIsIDApKTsKKworICAgIHNldDMgPSBh
dGtfdGV4dF9nZXRfZGVmYXVsdF9hdHRyaWJ1dGVzKGNoaWxkVGV4dCk7CisgICAgZ19hc3NlcnQo
YXRrQXR0cmlidXRlU2V0QXR0cmlidXRlSGFzVmFsdWUoc2V0MywgQVRLX1RFWFRfQVRUUl9KVVNU
SUZJQ0FUSU9OLCAiY2VudGVyIikpOworICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0MSk7
CisgICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJlZShzZXQyKTsKKyAgICBhdGtfYXR0cmlidXRlX3Nl
dF9mcmVlKHNldDMpOworCisgICAgZ19vYmplY3RfdW5yZWYoY2hpbGQpOworfQorCitzdGF0aWMg
Z2NoYXIqIHRleHRTZWxlY3Rpb25DaGFuZ2VkUmVzdWx0ID0gMDsKKworc3RhdGljIHZvaWQgdGV4
dFNlbGVjdGlvbkNoYW5nZWRDYWxsYmFjayhBdGtUZXh0KiB0ZXh0LCBncG9pbnRlciBkYXRhKQor
eworICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHRleHQpKTsKKworICAgIGdfZnJlZSh0ZXh0U2Vs
ZWN0aW9uQ2hhbmdlZFJlc3VsdCk7CisgICAgQXRrUm9sZSByb2xlID0gYXRrX29iamVjdF9nZXRf
cm9sZShBVEtfT0JKRUNUKHRleHQpKTsKKyAgICBpbnQgc3RhcnRPZmZzZXQgPSAwOworICAgIGlu
dCBlbmRPZmZzZXQgPSAwOworICAgIGF0a190ZXh0X2dldF9zZWxlY3Rpb24oQVRLX1RFWFQodGV4
dCksIDAsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgdGV4dFNlbGVjdGlvbkNoYW5n
ZWRSZXN1bHQgPSBnX3N0cmR1cF9wcmludGYoInwlc3wlZHwlZHwiLCBhdGtfcm9sZV9nZXRfbmFt
ZShyb2xlKSwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RX
ZWJraXRBdGtUZXh0U2VsZWN0aW9ucygpCit7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9
IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3Jl
Zl9zaW5rKHdlYlZpZXcpOworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwg
ODAwLCA2MDAgfTsKKyAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJW
aWV3KSwgJmFsbG9jYXRpb24pOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJW
aWV3LCB0ZXh0Rm9yU2VsZWN0aW9ucywgMCwgMCwgMCk7CisKKyAgICBBdGtPYmplY3QqIG9iamVj
dCA9IGdldFdlYkFyZWFPYmplY3Qod2ViVmlldyk7CisgICAgZ19hc3NlcnQob2JqZWN0KTsKKwor
ICAgIEF0a1RleHQqIHBhcmFncmFwaDEgPSBBVEtfVEVYVChhdGtfb2JqZWN0X3JlZl9hY2Nlc3Np
YmxlX2NoaWxkKG9iamVjdCwgMCkpOworICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHBhcmFncmFw
aDEpKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KHBhcmFncmFwaDEsICJ0ZXh0LXNlbGVjdGlvbi1j
aGFuZ2VkIiwgR19DQUxMQkFDSyh0ZXh0U2VsZWN0aW9uQ2hhbmdlZENhbGxiYWNrKSwgMCk7CisK
KyAgICBBdGtUZXh0KiBwYXJhZ3JhcGgyID0gQVRLX1RFWFQoYXRrX29iamVjdF9yZWZfYWNjZXNz
aWJsZV9jaGlsZChvYmplY3QsIDEpKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChwYXJhZ3Jh
cGgyKSk7CisgICAgZ19zaWduYWxfY29ubmVjdChwYXJhZ3JhcGgyLCAidGV4dC1zZWxlY3Rpb24t
Y2hhbmdlZCIsIEdfQ0FMTEJBQ0sodGV4dFNlbGVjdGlvbkNoYW5nZWRDYWxsYmFjayksIDApOwor
CisgICAgQXRrVGV4dCogbGluayA9IEFUS19URVhUKGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVf
Y2hpbGQoQVRLX09CSkVDVChwYXJhZ3JhcGgyKSwgMCkpOworICAgIGdfYXNzZXJ0KEFUS19JU19U
RVhUKGxpbmspKTsKKworICAgIEF0a09iamVjdCogbGlzdCA9IGF0a19vYmplY3RfcmVmX2FjY2Vz
c2libGVfY2hpbGQob2JqZWN0LCAyKTsKKyAgICBnX2Fzc2VydChBVEtfT0JKRUNUKGxpc3QpKTsK
KworICAgIEF0a1RleHQqIGxpc3RJdGVtID0gQVRLX1RFWFQoYXRrX29iamVjdF9yZWZfYWNjZXNz
aWJsZV9jaGlsZChsaXN0LCAwKSk7CisgICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQobGlzdEl0ZW0p
KTsKKworICAgIC8qIEZpcnN0IHBhcmFncmFwaCAoc2ltcGxlIHRleHQpLiAqLworCisgICAgLyog
QmFzaWMgaW5pdGlhbCBjaGVja3MuICovCisgICAgZ19hc3NlcnRfY21waW50KGF0a190ZXh0X2dl
dF9uX3NlbGVjdGlvbnMocGFyYWdyYXBoMSksID09LCAwKTsKKworICAgIGdpbnQgc3RhcnRPZmZz
ZXQ7CisgICAgZ2ludCBlbmRPZmZzZXQ7CisgICAgZ2NoYXIqIHNlbGVjdGVkVGV4dCA9IGF0a190
ZXh0X2dldF9zZWxlY3Rpb24ocGFyYWdyYXBoMSwgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAwKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVk
VGV4dCwgPT0sIDApOworICAgIGdfZnJlZSAoc2VsZWN0ZWRUZXh0KTsKKworICAgIC8qIFRyeSBy
ZW1vdmluZyBhIG5vbiBleGlzdGluZyAoeWV0KSBzZWxlY3Rpb24uICovCisgICAgZ2Jvb2xlYW4g
cmVzdWx0ID0gYXRrX3RleHRfcmVtb3ZlX3NlbGVjdGlvbihwYXJhZ3JhcGgxLCAwKTsKKyAgICBn
X2Fzc2VydCghcmVzdWx0KTsKKworICAgIC8qIFRyeSBzZXR0aW5nIGEgMC1jaGFyIHNlbGVjdGlv
bi4gKi8KKyAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfc2VsZWN0aW9uKHBhcmFncmFwaDEsIDAs
IDUsIDUpOworICAgIGdfYXNzZXJ0KHJlc3VsdCk7CisKKyAgICAvKiBNYWtlIGEgc2VsZWN0aW9u
IGFuZCB0ZXN0IGl0LiAqLworICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9zZWxlY3Rpb24ocGFy
YWdyYXBoMSwgMCwgNSwgMjUpOworICAgIGdfYXNzZXJ0KHJlc3VsdCk7CisgICAgZ19hc3NlcnRf
Y21waW50KGF0a190ZXh0X2dldF9uX3NlbGVjdGlvbnMocGFyYWdyYXBoMSksID09LCAxKTsKKyAg
ICBnX2Fzc2VydF9jbXBzdHIodGV4dFNlbGVjdGlvbkNoYW5nZWRSZXN1bHQsID09LCAifHBhcmFn
cmFwaHw1fDI1fCIpOworICAgIHNlbGVjdGVkVGV4dCA9IGF0a190ZXh0X2dldF9zZWxlY3Rpb24o
cGFyYWdyYXBoMSwgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoc3RhcnRPZmZzZXQsID09LCA1KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0
LCA9PSwgMjUpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZFRleHQsID09LCAiYWdyYXBo
IHdpdGggcGxhaW4gdGUiKTsKKyAgICBnX2ZyZWUgKHNlbGVjdGVkVGV4dCk7CisKKyAgICAvKiBU
cnkgcmVtb3ZpbmcgdGhlIHNlbGVjdGlvbiBmcm9tIG90aGVyIEF0a1RleHQgb2JqZWN0IChzaG91
bGQgZmFpbCkuICovCisgICAgcmVzdWx0ID0gYXRrX3RleHRfcmVtb3ZlX3NlbGVjdGlvbihwYXJh
Z3JhcGgyLCAwKTsKKyAgICBnX2Fzc2VydCghcmVzdWx0KTsKKworICAgIC8qIFJlbW92ZSB0aGUg
c2VsZWN0aW9uIGFuZCB0ZXN0IGV2ZXJ5dGhpbmcgYWdhaW4uICovCisgICAgcmVzdWx0ID0gYXRr
X3RleHRfcmVtb3ZlX3NlbGVjdGlvbihwYXJhZ3JhcGgxLCAwKTsKKyAgICBnX2Fzc2VydChyZXN1
bHQpOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfdGV4dF9nZXRfbl9zZWxlY3Rpb25zKHBhcmFn
cmFwaDEpLCA9PSwgMCk7CisgICAgc2VsZWN0ZWRUZXh0ID0gYXRrX3RleHRfZ2V0X3NlbGVjdGlv
bihwYXJhZ3JhcGgxLCAwLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOworICAgIC8qIE5vdyBv
ZmZzZXRzIHNob3VsZCBiZSB0aGUgc2FtZSwgc2V0IHRvIHRoZSBsYXN0IHBvc2l0aW9uIG9mIHRo
ZSBjYXJldC4gKi8KKyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCBlbmRPZmZz
ZXQpOworICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDI1KTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMjUpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxl
Y3RlZFRleHQsID09LCAwKTsKKyAgICBnX2ZyZWUgKHNlbGVjdGVkVGV4dCk7CisKKyAgICAvKiBT
ZWNvbmQgcGFyYWdyYXBoICh0ZXh0ICsgbGluayArIHRleHQpLiAqLworCisgICAgLyogU2V0IGEg
c2VsZWN0aW9uIHBhcnRpYWxseSBjb3ZlcmluZyB0aGUgbGluayBhbmQgdGVzdCBpdC4gKi8KKyAg
ICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfc2VsZWN0aW9uKHBhcmFncmFwaDIsIDAsIDcsIDIxKTsK
KyAgICBnX2Fzc2VydChyZXN1bHQpOworCisgICAgLyogVGVzdCB0aGUgcGFyYWdyYXBoIGZpcnN0
LiAqLworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfdGV4dF9nZXRfbl9zZWxlY3Rpb25zKHBhcmFn
cmFwaDIpLCA9PSwgMSk7CisgICAgc2VsZWN0ZWRUZXh0ID0gYXRrX3RleHRfZ2V0X3NlbGVjdGlv
bihwYXJhZ3JhcGgyLCAwLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOworICAgIGdfYXNzZXJ0
X2NtcGludChzdGFydE9mZnNldCwgPT0sIDcpOworICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZz
ZXQsID09LCAyMSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkVGV4dCwgPT0sICJyYXBo
IHdpdGggYSBsaSIpOworICAgIGdfZnJlZSAoc2VsZWN0ZWRUZXh0KTsKKworICAgIC8qIE5vdyB0
ZXN0IGp1c3QgdGhlIGxpbmsuICovCisgICAgZ19hc3NlcnRfY21waW50KGF0a190ZXh0X2dldF9u
X3NlbGVjdGlvbnMobGluayksID09LCAxKTsKKyAgICBzZWxlY3RlZFRleHQgPSBhdGtfdGV4dF9n
ZXRfc2VsZWN0aW9uKGxpbmssIDAsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgZ19h
c3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21waW50KGVu
ZE9mZnNldCwgPT0sIDQpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZFRleHQsID09LCAi
YSBsaSIpOworICAgIGdfZnJlZSAoc2VsZWN0ZWRUZXh0KTsKKworICAgIC8qIE1ha2UgYSBzZWxl
Y3Rpb24gYWZ0ZXIgdGhlIGxpbmsgYW5kIGNoZWNrIHNlbGVjdGlvbiBmb3IgdGhlIHdob2xlIHBh
cmFncmFwaC4gKi8KKyAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfc2VsZWN0aW9uKHBhcmFncmFw
aDIsIDAsIDI3LCAzNyk7CisgICAgZ19hc3NlcnQocmVzdWx0KTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoYXRrX3RleHRfZ2V0X25fc2VsZWN0aW9ucyhwYXJhZ3JhcGgyKSwgPT0sIDEpOworICAgIGdf
YXNzZXJ0X2NtcHN0cih0ZXh0U2VsZWN0aW9uQ2hhbmdlZFJlc3VsdCwgPT0sICJ8cGFyYWdyYXBo
fDI3fDM3fCIpOworICAgIHNlbGVjdGVkVGV4dCA9IGF0a190ZXh0X2dldF9zZWxlY3Rpb24ocGFy
YWdyYXBoMiwgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoc3RhcnRPZmZzZXQsID09LCAyNyk7CisgICAgZ19hc3NlcnRfY21waW50KGVuZE9mZnNldCwg
PT0sIDM3KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRUZXh0LCA9PSwgInRoZSBtaWRk
bGUiKTsKKyAgICBnX2ZyZWUgKHNlbGVjdGVkVGV4dCk7CisKKyAgICAvKiBSZW1vdmUgc2VsZWN0
aW9ucyBhbmQgdGV4dCBldmVyeXRoaW5nIGFnYWluLiAqLworICAgIHJlc3VsdCA9IGF0a190ZXh0
X3JlbW92ZV9zZWxlY3Rpb24ocGFyYWdyYXBoMiwgMCk7CisgICAgZ19hc3NlcnQocmVzdWx0KTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX3RleHRfZ2V0X25fc2VsZWN0aW9ucyhwYXJhZ3JhcGgy
KSwgPT0sIDApOworICAgIHNlbGVjdGVkVGV4dCA9IGF0a190ZXh0X2dldF9zZWxlY3Rpb24ocGFy
YWdyYXBoMiwgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAgICAvKiBOb3cgb2Zmc2V0
cyBzaG91bGQgYmUgdGhlIHNhbWUgKG5vIHNlbGVjdGlvbikuICovCisgICAgZ19hc3NlcnRfY21w
aW50KHN0YXJ0T2Zmc2V0LCA9PSwgZW5kT2Zmc2V0KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2Vs
ZWN0ZWRUZXh0LCA9PSwgMCk7CisgICAgZ19mcmVlIChzZWxlY3RlZFRleHQpOworCisgICAgZ19h
c3NlcnRfY21waW50KGF0a190ZXh0X2dldF9uX3NlbGVjdGlvbnMobGluayksID09LCAwKTsKKyAg
ICBzZWxlY3RlZFRleHQgPSBhdGtfdGV4dF9nZXRfc2VsZWN0aW9uKGxpbmssIDAsICZzdGFydE9m
ZnNldCwgJmVuZE9mZnNldCk7CisgICAgLyogTm93IG9mZnNldHMgc2hvdWxkIGJlIHRoZSBzYW1l
IChubyBzZWxlY3Rpb24pLiAqLworICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0s
IGVuZE9mZnNldCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkVGV4dCwgPT0sIDApOwor
ICAgIGdfZnJlZSAoc2VsZWN0ZWRUZXh0KTsKKworICAgIC8qIExpc3QgaXRlbSAqLworCisgICAg
Z19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShsaXN0KSA9PSBBVEtfUk9MRV9MSVNUKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoYXRrX29iamVjdF9nZXRfbl9hY2Nlc3NpYmxlX2NoaWxkcmVuKGxp
c3QpLCA9PSwgMSk7CisKKyAgICAvKiBJdCdzIG5vdCBwb3NzaWJsZSB0byBzZWxlY3QgdGV4dCBp
bnNpZGUgYW4gaXRlbSdzIG1hcmtlci4gKi8KKyAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfc2Vs
ZWN0aW9uIChsaXN0SXRlbSwgMCwgMCwgOSk7CisgICAgZ19hc3NlcnQoIXJlc3VsdCk7CisgICAg
cmVzdWx0ID0gYXRrX3RleHRfc2V0X3NlbGVjdGlvbiAobGlzdEl0ZW0sIDAsIDksIDEpOworICAg
IGdfYXNzZXJ0KCFyZXN1bHQpOworCisgICAgLyogSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHNl
bGVjdCB0ZXh0IGluc2lkZSBhbiBpdGVtJ3MgdGV4dC4gKi8KKyAgICByZXN1bHQgPSBhdGtfdGV4
dF9zZXRfc2VsZWN0aW9uIChsaXN0SXRlbSwgMCwgMywgOSk7CisgICAgZ19hc3NlcnQocmVzdWx0
KTsKKworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfdGV4dF9nZXRfbl9zZWxlY3Rpb25zKGxpc3RJ
dGVtKSwgPT0sIDEpOworICAgIHNlbGVjdGVkVGV4dCA9IGF0a190ZXh0X2dldF9zZWxlY3Rpb24o
bGlzdEl0ZW0sIDAsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgZ19hc3NlcnRfY21w
aW50KHN0YXJ0T2Zmc2V0LCA9PSwgMyk7CisgICAgZ19hc3NlcnRfY21waW50KGVuZE9mZnNldCwg
PT0sIDkpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZFRleHQsID09LCAiQSBsaXN0Iik7
CisgICAgZ19mcmVlIChzZWxlY3RlZFRleHQpOworCisgICAgZ19mcmVlKHRleHRTZWxlY3Rpb25D
aGFuZ2VkUmVzdWx0KTsKKworICAgIGdfb2JqZWN0X3VucmVmKHBhcmFncmFwaDEpOworICAgIGdf
b2JqZWN0X3VucmVmKHBhcmFncmFwaDIpOworICAgIGdfb2JqZWN0X3VucmVmKGxpbmspOworICAg
IGdfb2JqZWN0X3VucmVmKGxpc3QpOworICAgIGdfb2JqZWN0X3VucmVmKGxpc3RJdGVtKTsKKyAg
ICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0
a0dldEV4dGVudHMoKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VC
X1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBnX29iamVjdF9yZWZfc2luayh3ZWJW
aWV3KTsKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDgwMCwgNjAwIH07
CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQod2ViVmlldyksICZhbGxv
Y2F0aW9uKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgY2VudGVy
ZWRDb250ZW50cywgMCwgMCwgMCk7CisKKyAgICBBdGtPYmplY3QqIG9iamVjdCA9IGdldFdlYkFy
ZWFPYmplY3Qod2ViVmlldyk7CisgICAgZ19hc3NlcnQob2JqZWN0KTsKKworICAgIEF0a1RleHQq
IHNob3J0VGV4dDEgPSBBVEtfVEVYVChhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9i
amVjdCwgMCkpOworICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHNob3J0VGV4dDEpKTsKKyAgICBB
dGtUZXh0KiBsb25nVGV4dCA9IEFUS19URVhUKGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hp
bGQob2JqZWN0LCAxKSk7CisgICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQobG9uZ1RleHQpKTsKKyAg
ICBBdGtUZXh0KiBzaG9ydFRleHQyID0gQVRLX1RFWFQoYXRrX29iamVjdF9yZWZfYWNjZXNzaWJs
ZV9jaGlsZChvYmplY3QsIDIpKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChzaG9ydFRleHQy
KSk7CisgICAgQXRrVGV4dCogbXVsdGlsaW5lVGV4dCA9IEFUS19URVhUKGF0a19vYmplY3RfcmVm
X2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAzKSk7CisgICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQo
bXVsdGlsaW5lVGV4dCkpOworCisgICAgLyogU3RhcnQgd2l0aCB3aW5kb3cgZXh0ZW50cy4gKi8K
KyAgICBBdGtUZXh0UmVjdGFuZ2xlIHNsaW5lX3dpbmRvdzEsIHNsaW5lX3dpbmRvdzIsIGxsaW5l
X3dpbmRvdywgbWxpbmVfd2luZG93OworICAgIGF0a190ZXh0X2dldF9yYW5nZV9leHRlbnRzKHNo
b3J0VGV4dDEsIDAsIDEwLCBBVEtfWFlfV0lORE9XLCAmc2xpbmVfd2luZG93MSk7CisgICAgYXRr
X3RleHRfZ2V0X3JhbmdlX2V4dGVudHMobG9uZ1RleHQsIDAsIDQ0LCBBVEtfWFlfV0lORE9XLCAm
bGxpbmVfd2luZG93KTsKKyAgICBhdGtfdGV4dF9nZXRfcmFuZ2VfZXh0ZW50cyhzaG9ydFRleHQy
LCAwLCAxMCwgQVRLX1hZX1dJTkRPVywgJnNsaW5lX3dpbmRvdzIpOworICAgIGF0a190ZXh0X2dl
dF9yYW5nZV9leHRlbnRzKG11bHRpbGluZVRleHQsIDAsIDYwLCBBVEtfWFlfV0lORE9XLCAmbWxp
bmVfd2luZG93KTsKKworICAgIC8qIENoZWNrIHZlcnRpY2FsIGxpbmUgcG9zaXRpb24uICovCisg
ICAgZ19hc3NlcnRfY21waW50KHNsaW5lX3dpbmRvdzEueSArIHNsaW5lX3dpbmRvdzEuaGVpZ2h0
LCA8PSwgbGxpbmVfd2luZG93LnkpOworICAgIGdfYXNzZXJ0X2NtcGludChsbGluZV93aW5kb3cu
eSArIGxsaW5lX3dpbmRvdy5oZWlnaHQgKyBzbGluZV93aW5kb3cyLmhlaWdodCwgPD0sIG1saW5l
X3dpbmRvdy55KTsKKworICAgIC8qIFBhcmFncmFwaHMgMSBhbmQgMyBoYXZlIGlkZW50aWNhbCB0
ZXh0IGFuZCBhbGlnbm1lbnQuICovCisgICAgZ19hc3NlcnRfY21waW50KHNsaW5lX3dpbmRvdzEu
eCwgPT0sIHNsaW5lX3dpbmRvdzIueCk7CisgICAgZ19hc3NlcnRfY21waW50KHNsaW5lX3dpbmRv
dzEud2lkdGgsID09LCBzbGluZV93aW5kb3cyLndpZHRoKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
c2xpbmVfd2luZG93MS5oZWlnaHQsID09LCBzbGluZV93aW5kb3cyLmhlaWdodCk7CisKKyAgICAv
KiBBbGwgbGluZXMgc2hvdWxkIGJlIHRoZSBzYW1lIGhlaWdodDsgbGluZSAyIGlzIHRoZSB3aWRl
c3QgbGluZS4gKi8KKyAgICBnX2Fzc2VydF9jbXBpbnQoc2xpbmVfd2luZG93MS5oZWlnaHQsID09
LCBsbGluZV93aW5kb3cuaGVpZ2h0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc2xpbmVfd2luZG93
MS53aWR0aCwgPCwgbGxpbmVfd2luZG93LndpZHRoKTsKKworICAgIC8qIE1ha2Ugc3VyZSB0aGUg
Y2hhcmFjdGVyIGV4dGVudHMgaml2ZSB3aXRoIHRoZSByYW5nZSBleHRlbnRzLiAqLworICAgIGdp
bnQgeDsKKyAgICBnaW50IHk7CisgICAgZ2ludCB3aWR0aDsKKyAgICBnaW50IGhlaWdodDsKKwor
ICAgIC8qIEZpcnN0IHBhcmFncmFwaCAoc2hvcnQgdGV4dCkuICovCisgICAgYXRrX3RleHRfZ2V0
X2NoYXJhY3Rlcl9leHRlbnRzKHNob3J0VGV4dDEsIDAsICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0
LCBBVEtfWFlfV0lORE9XKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoeCwgPT0sIHNsaW5lX3dpbmRv
dzEueCk7CisgICAgZ19hc3NlcnRfY21waW50KHksID09LCBzbGluZV93aW5kb3cxLnkpOworICAg
IGdfYXNzZXJ0X2NtcGludChoZWlnaHQsID09LCBzbGluZV93aW5kb3cxLmhlaWdodCk7CisKKyAg
ICBhdGtfdGV4dF9nZXRfY2hhcmFjdGVyX2V4dGVudHMoc2hvcnRUZXh0MSwgOSwgJngsICZ5LCAm
d2lkdGgsICZoZWlnaHQsIEFUS19YWV9XSU5ET1cpOworICAgIGdfYXNzZXJ0X2NtcGludCh4LCA9
PSwgc2xpbmVfd2luZG93MS54ICsgc2xpbmVfd2luZG93MS53aWR0aCAtIHdpZHRoKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoeSwgPT0sIHNsaW5lX3dpbmRvdzEueSk7CisgICAgZ19hc3NlcnRfY21w
aW50KGhlaWdodCwgPT0sIHNsaW5lX3dpbmRvdzEuaGVpZ2h0KTsKKworICAgIC8qIFNlY29uZCBw
YXJhZ3JhcGggKGxvbmcgdGV4dCkuICovCisgICAgYXRrX3RleHRfZ2V0X2NoYXJhY3Rlcl9leHRl
bnRzKGxvbmdUZXh0LCAwLCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCwgQVRLX1hZX1dJTkRPVyk7
CisgICAgZ19hc3NlcnRfY21waW50KHgsID09LCBsbGluZV93aW5kb3cueCk7CisgICAgZ19hc3Nl
cnRfY21waW50KHksID09LCBsbGluZV93aW5kb3cueSk7CisgICAgZ19hc3NlcnRfY21waW50KGhl
aWdodCwgPT0sIGxsaW5lX3dpbmRvdy5oZWlnaHQpOworCisgICAgYXRrX3RleHRfZ2V0X2NoYXJh
Y3Rlcl9leHRlbnRzKGxvbmdUZXh0LCA0MywgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQsIEFUS19Y
WV9XSU5ET1cpOworICAgIGdfYXNzZXJ0X2NtcGludCh4LCA9PSwgbGxpbmVfd2luZG93LnggKyBs
bGluZV93aW5kb3cud2lkdGggLSB3aWR0aCk7CisgICAgZ19hc3NlcnRfY21waW50KHksID09LCBs
bGluZV93aW5kb3cueSk7CisgICAgZ19hc3NlcnRfY21waW50KGhlaWdodCwgPT0sIGxsaW5lX3dp
bmRvdy5oZWlnaHQpOworCisgICAgLyogVGhpcmQgcGFyYWdyYXBoIChzaG9ydCB0ZXh0KS4gKi8K
KyAgICBhdGtfdGV4dF9nZXRfY2hhcmFjdGVyX2V4dGVudHMoc2hvcnRUZXh0MiwgMCwgJngsICZ5
LCAmd2lkdGgsICZoZWlnaHQsIEFUS19YWV9XSU5ET1cpOworICAgIGdfYXNzZXJ0X2NtcGludCh4
LCA9PSwgc2xpbmVfd2luZG93Mi54KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoeSwgPT0sIHNsaW5l
X3dpbmRvdzIueSk7CisgICAgZ19hc3NlcnRfY21waW50KGhlaWdodCwgPT0sIHNsaW5lX3dpbmRv
dzIuaGVpZ2h0KTsKKworICAgIGF0a190ZXh0X2dldF9jaGFyYWN0ZXJfZXh0ZW50cyhzaG9ydFRl
eHQyLCA5LCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCwgQVRLX1hZX1dJTkRPVyk7CisgICAgZ19h
c3NlcnRfY21waW50KHgsID09LCBzbGluZV93aW5kb3cyLnggKyBzbGluZV93aW5kb3cyLndpZHRo
IC0gd2lkdGgpOworICAgIGdfYXNzZXJ0X2NtcGludCh5LCA9PSwgc2xpbmVfd2luZG93Mi55KTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoaGVpZ2h0LCA9PSwgc2xpbmVfd2luZG93Mi5oZWlnaHQpOwor
CisgICAgLyogRm91ciBwYXJhZ3JhcGggKDMgbGluZXMgbXVsdGktbGluZSB0ZXh0KS4gKi8KKyAg
ICBhdGtfdGV4dF9nZXRfY2hhcmFjdGVyX2V4dGVudHMobXVsdGlsaW5lVGV4dCwgMCwgJngsICZ5
LCAmd2lkdGgsICZoZWlnaHQsIEFUS19YWV9XSU5ET1cpOworICAgIGdfYXNzZXJ0X2NtcGludCh4
LCA9PSwgbWxpbmVfd2luZG93LngpOworICAgIGdfYXNzZXJ0X2NtcGludCh5LCA9PSwgbWxpbmVf
d2luZG93LnkpOworICAgIGdfYXNzZXJ0X2NtcGludCgzICogaGVpZ2h0LCA9PSwgbWxpbmVfd2lu
ZG93LmhlaWdodCk7CisKKyAgICBhdGtfdGV4dF9nZXRfY2hhcmFjdGVyX2V4dGVudHMobXVsdGls
aW5lVGV4dCwgNTksICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0LCBBVEtfWFlfV0lORE9XKTsKKyAg
ICAvKiBMYXN0IGxpbmUgd29uJ3QgZmlsbCB0aGUgd2hvbGUgd2lkdGggb2YgdGhlIHJlY3Rhbmds
ZS4gKi8KKyAgICBnX2Fzc2VydF9jbXBpbnQoeCwgPD0sIG1saW5lX3dpbmRvdy54ICsgbWxpbmVf
d2luZG93LndpZHRoIC0gd2lkdGgpOworICAgIGdfYXNzZXJ0X2NtcGludCh5LCA9PSwgbWxpbmVf
d2luZG93LnkgKyBtbGluZV93aW5kb3cuaGVpZ2h0IC0gaGVpZ2h0KTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoaGVpZ2h0LCA8PSwgbWxpbmVfd2luZG93LmhlaWdodCk7CisKKyAgICAvKiBDaGVjayB0
aGF0IGV4dGVudCBmb3IgYSBmdWxsIGxpbmUgYXJlIHRoZSBzYW1lIGhlaWdodCB0aGFuIGZvcgor
ICAgICAgIGEgcGFydGlhbCBzZWN0aW9uIG9mIHRoZSBzYW1lIGxpbmUgKi8KKyAgICBnaW50IHN0
YXJ0T2Zmc2V0OworICAgIGdpbnQgZW5kT2Zmc2V0OworCisjaWYgIUFUS19DSEVDS19WRVJTSU9O
KDIsIDEwLCAwKQorICAgIGdjaGFyKiB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0
KG11bHRpbGluZVRleHQsIDAsIEFUS19URVhUX0JPVU5EQVJZX0xJTkVfU1RBUlQsICZzdGFydE9m
ZnNldCwgJmVuZE9mZnNldCk7CisgICAgZ19mcmVlKHRleHQpOworI2Vsc2UKKyAgICBnY2hhciog
dGV4dCA9IGF0a190ZXh0X2dldF9zdHJpbmdfYXRfb2Zmc2V0KG11bHRpbGluZVRleHQsIDAsIEFU
S19URVhUX0dSQU5VTEFSSVRZX0xJTkUsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAg
Z19mcmVlKHRleHQpOworI2VuZGlmCisKKyAgICBBdGtUZXh0UmVjdGFuZ2xlIGZsaW5lX3dpbmRv
dzsKKyAgICBBdGtUZXh0UmVjdGFuZ2xlIGFmbGluZV93aW5kb3c7CisgICAgYXRrX3RleHRfZ2V0
X3JhbmdlX2V4dGVudHMobXVsdGlsaW5lVGV4dCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgQVRL
X1hZX1dJTkRPVywgJmZsaW5lX3dpbmRvdyk7CisgICAgYXRrX3RleHRfZ2V0X3JhbmdlX2V4dGVu
dHMobXVsdGlsaW5lVGV4dCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCAtIDEsIEFUS19YWV9XSU5E
T1csICZhZmxpbmVfd2luZG93KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZmxpbmVfd2luZG93Lngs
ID09LCBhZmxpbmVfd2luZG93LngpOworICAgIGdfYXNzZXJ0X2NtcGludChmbGluZV93aW5kb3cu
eSwgPT0sIGFmbGluZV93aW5kb3cueSk7CisgICAgZ19hc3NlcnRfY21waW50KGZsaW5lX3dpbmRv
dy5oZWlnaHQsID09LCBhZmxpbmVfd2luZG93LmhlaWdodCk7CisKKyAgICBnX29iamVjdF91bnJl
ZihzaG9ydFRleHQxKTsKKyAgICBnX29iamVjdF91bnJlZihzaG9ydFRleHQyKTsKKyAgICBnX29i
amVjdF91bnJlZihsb25nVGV4dCk7CisgICAgZ19vYmplY3RfdW5yZWYobXVsdGlsaW5lVGV4dCk7
CisgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJr
aXRBdGtMYXlvdXRBbmREYXRhVGFibGVzKCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3
ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmplY3Rf
cmVmX3Npbmsod2ViVmlldyk7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAw
LCA4MDAsIDYwMCB9OworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdl
YlZpZXcpLCAmYWxsb2NhdGlvbik7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdl
YlZpZXcsIGxheW91dEFuZERhdGFUYWJsZXMsIDAsIDAsIDApOworCisgICAgQXRrT2JqZWN0KiBv
YmplY3QgPSBnZXRXZWJBcmVhT2JqZWN0KHdlYlZpZXcpOworICAgIGdfYXNzZXJ0KG9iamVjdCk7
CisKKyAgICAvKiBDaGVjayB0aGUgbm9uLWxheW91dCB0YWJsZSAoZGF0YSB0YWJsZSkuICovCisK
KyAgICBBdGtPYmplY3QqIHRhYmxlMSA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQo
b2JqZWN0LCAwKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfVEFCTEUodGFibGUxKSk7CisgICAgQXRr
QXR0cmlidXRlU2V0KiBzZXQxID0gYXRrX29iamVjdF9nZXRfYXR0cmlidXRlcyh0YWJsZTEpOwor
ICAgIGdfYXNzZXJ0KHNldDEpOworICAgIGdfYXNzZXJ0KCFhdGtBdHRyaWJ1dGVTZXRDb250YWlu
c0F0dHJpYnV0ZU5hbWUoc2V0MSwgImxheW91dC1ndWVzcyIpKTsKKyAgICBhdGtfYXR0cmlidXRl
X3NldF9mcmVlKHNldDEpOworCisgICAgLyogQ2hlY2sgdGhlIGxheW91dCB0YWJsZS4gKi8KKwor
ICAgIEF0a09iamVjdCogdGFibGUyID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChv
YmplY3QsIDEpOworICAgIGdfYXNzZXJ0KEFUS19JU19UQUJMRSh0YWJsZTIpKTsKKyAgICBBdGtB
dHRyaWJ1dGVTZXQqIHNldDIgPSBhdGtfb2JqZWN0X2dldF9hdHRyaWJ1dGVzKHRhYmxlMik7Cisg
ICAgZ19hc3NlcnQoc2V0Mik7CisgICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0Q29udGFpbnNB
dHRyaWJ1dGVOYW1lKHNldDIsICJsYXlvdXQtZ3Vlc3MiKSk7CisgICAgZ19hc3NlcnQoYXRrQXR0
cmlidXRlU2V0QXR0cmlidXRlTmFtZUhhc1ZhbHVlKHNldDIsICJsYXlvdXQtZ3Vlc3MiLCAidHJ1
ZSIpKTsKKyAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHNldDIpOworCisgICAgZ19vYmplY3Rf
dW5yZWYodGFibGUxKTsKKyAgICBnX29iamVjdF91bnJlZih0YWJsZTIpOworICAgIGdfb2JqZWN0
X3VucmVmKHdlYlZpZXcpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrTGlua3NXaXRo
SW5saW5lSW1hZ2VzKCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dF
Ql9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmplY3RfcmVmX3Npbmsod2Vi
Vmlldyk7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9
OworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxs
b2NhdGlvbik7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIGxpbmtz
V2l0aElubGluZUltYWdlcywgMCwgMCwgMCk7CisKKyAgICBBdGtPYmplY3QqIG9iamVjdCA9IGdl
dFdlYkFyZWFPYmplY3Qod2ViVmlldyk7CisgICAgZ19hc3NlcnQob2JqZWN0KTsKKworICAgIC8q
IEZpcnN0IHBhcmFncmFwaCAobGluayBhdCB0aGUgYmVnaW5uaW5nKS4gKi8KKyAgICBBdGtPYmpl
Y3QqIHBhcmFncmFwaCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAw
KTsKKyAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChwYXJhZ3JhcGgpKTsKKyAgICBnaW50IHN0YXJ0
T2Zmc2V0OworICAgIGdpbnQgZW5kT2Zmc2V0OworCisjaWYgIUFUS19DSEVDS19WRVJTSU9OKDIs
IDEwLCAwKQorICAgIGdjaGFyKiB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0KEFU
S19URVhUKHBhcmFncmFwaCksIDAsIEFUS19URVhUX0JPVU5EQVJZX0xJTkVfU1RBUlQsICZzdGFy
dE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgZ19hc3NlcnQodGV4dCk7CisgICAgZ19hc3NlcnRf
Y21wc3RyKHRleHQsID09LCAiZm9vIGJhciBiYXoiKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc3Rh
cnRPZmZzZXQsID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMTEp
OworICAgIGdfZnJlZSh0ZXh0KTsKKyNlbHNlCisgICAgZ2NoYXIqIHRleHQgPSBhdGtfdGV4dF9n
ZXRfc3RyaW5nX2F0X29mZnNldChBVEtfVEVYVChwYXJhZ3JhcGgpLCAwLCBBVEtfVEVYVF9HUkFO
VUxBUklUWV9MSU5FLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOworICAgIGdfYXNzZXJ0KHRl
eHQpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwgImZvbyBiYXIgYmF6Iik7CisgICAg
Z19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21waW50
KGVuZE9mZnNldCwgPT0sIDExKTsKKyAgICBnX2ZyZWUodGV4dCk7CisjZW5kaWYKKworICAgIGdf
b2JqZWN0X3VucmVmKHBhcmFncmFwaCk7CisKKyAgICAvKiBTZWNvbmQgcGFyYWdyYXBoIChsaW5r
IGluIHRoZSBtaWRkbGUpLiAqLworICAgIHBhcmFncmFwaCA9IGF0a19vYmplY3RfcmVmX2FjY2Vz
c2libGVfY2hpbGQob2JqZWN0LCAxKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChwYXJhZ3Jh
cGgpKTsKKworI2lmICFBVEtfQ0hFQ0tfVkVSU0lPTigyLCAxMCwgMCkKKyAgICB0ZXh0ID0gYXRr
X3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0KEFUS19URVhUKHBhcmFncmFwaCksIDAsIEFUS19URVhU
X0JPVU5EQVJZX0xJTkVfU1RBUlQsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgZ19h
c3NlcnQodGV4dCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09LCAiZm9vIGJhciBiYXoi
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAwKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMTEpOworICAgIGdfZnJlZSh0ZXh0KTsKKyNlbHNlCisg
ICAgdGV4dCA9IGF0a190ZXh0X2dldF9zdHJpbmdfYXRfb2Zmc2V0KEFUS19URVhUKHBhcmFncmFw
aCksIDAsIEFUS19URVhUX0dSQU5VTEFSSVRZX0xJTkUsICZzdGFydE9mZnNldCwgJmVuZE9mZnNl
dCk7CisgICAgZ19hc3NlcnQodGV4dCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09LCAi
Zm9vIGJhciBiYXoiKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAwKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMTEpOworICAgIGdfZnJlZSh0ZXh0
KTsKKyNlbmRpZgorCisgICAgZ19vYmplY3RfdW5yZWYocGFyYWdyYXBoKTsKKworICAgIC8qIFRo
aXJkIHBhcmFncmFwaCAobGluayBhdCB0aGUgZW5kKS4gKi8KKyAgICBwYXJhZ3JhcGggPSBhdGtf
b2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMik7CisgICAgZ19hc3NlcnQoQVRL
X0lTX1RFWFQocGFyYWdyYXBoKSk7CisKKyNpZiAhQVRLX0NIRUNLX1ZFUlNJT04oMiwgMTAsIDAp
CisgICAgdGV4dCA9IGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNldChBVEtfVEVYVChwYXJhZ3Jh
cGgpLCAwLCBBVEtfVEVYVF9CT1VOREFSWV9MSU5FX1NUQVJULCAmc3RhcnRPZmZzZXQsICZlbmRP
ZmZzZXQpOworICAgIGdfYXNzZXJ0KHRleHQpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9
PSwgImZvbyBiYXIgYmF6Iik7CisgICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwg
MCk7CisgICAgZ19hc3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0sIDExKTsKKyAgICBnX2ZyZWUo
dGV4dCk7CisjZWxzZQorICAgIHRleHQgPSBhdGtfdGV4dF9nZXRfc3RyaW5nX2F0X29mZnNldChB
VEtfVEVYVChwYXJhZ3JhcGgpLCAwLCBBVEtfVEVYVF9HUkFOVUxBUklUWV9MSU5FLCAmc3RhcnRP
ZmZzZXQsICZlbmRPZmZzZXQpOworICAgIGdfYXNzZXJ0KHRleHQpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cih0ZXh0LCA9PSwgImZvbyBiYXIgYmF6Iik7CisgICAgZ19hc3NlcnRfY21waW50KHN0YXJ0
T2Zmc2V0LCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0sIDExKTsK
KyAgICBnX2ZyZWUodGV4dCk7CisjZW5kaWYKKworICAgIGdfb2JqZWN0X3VucmVmKHBhcmFncmFw
aCk7CisgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RX
ZWJraXRBdGtIeXBlcnRleHRBbmRIeXBlcmxpbmtzKCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19v
YmplY3RfcmVmX3Npbmsod2ViVmlldyk7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0g
eyAwLCAwLCA4MDAsIDYwMCB9OworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lE
R0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3Ry
aW5nKHdlYlZpZXcsIGh5cGVydGV4dEFuZEh5cGVybGlua3MsIDAsIDAsIDApOworCisgICAgQXRr
T2JqZWN0KiBvYmplY3QgPSBnZXRXZWJBcmVhT2JqZWN0KHdlYlZpZXcpOworICAgIGdfYXNzZXJ0
KG9iamVjdCk7CisKKyAgICBBdGtPYmplY3QqIHBhcmFncmFwaDEgPSBhdGtfb2JqZWN0X3JlZl9h
Y2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMCk7CisgICAgZ19hc3NlcnQoQVRLX09CSkVDVChwYXJh
Z3JhcGgxKSk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShwYXJhZ3JhcGgxKSA9
PSBBVEtfUk9MRV9QQVJBR1JBUEgpOworICAgIGdfYXNzZXJ0KEFUS19JU19IWVBFUlRFWFQocGFy
YWdyYXBoMSkpOworCisgICAgLyogTm8gbGlua3MgaW4gdGhlIGZpcnN0IHBhcmFncmFwaC4gKi8K
KyAgICBnaW50IG5MaW5rcyA9IGF0a19oeXBlcnRleHRfZ2V0X25fbGlua3MoQVRLX0hZUEVSVEVY
VChwYXJhZ3JhcGgxKSk7CisgICAgZ19hc3NlcnRfY21waW50KG5MaW5rcywgPT0sIDApOworCisg
ICAgQXRrT2JqZWN0KiBwYXJhZ3JhcGgyID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGls
ZChvYmplY3QsIDEpOworICAgIGdfYXNzZXJ0KEFUS19PQkpFQ1QocGFyYWdyYXBoMikpOworICAg
IGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUocGFyYWdyYXBoMikgPT0gQVRLX1JPTEVfUEFS
QUdSQVBIKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfSFlQRVJURVhUKHBhcmFncmFwaDIpKTsKKwor
ICAgIC8qIENoZWNrIGxpbmtzIGluIHRoZSBzZWNvbmQgcGFyYWdyYXBoLgorICAgICAgIG5MaW5r
cyA9IGF0a19oeXBlcnRleHRfZ2V0X25fbGlua3MoQVRLX0hZUEVSVEVYVChwYXJhZ3JhcGgyKSk7
CisgICAgICAgZ19hc3NlcnRfY21waW50KG5MaW5rcywgPT0sIDMpOyAqLworCisgICAgQXRrSHlw
ZXJsaW5rKiBoTGluazEgPSBhdGtfaHlwZXJ0ZXh0X2dldF9saW5rKEFUS19IWVBFUlRFWFQocGFy
YWdyYXBoMiksIDApOworICAgIGdfYXNzZXJ0KEFUS19IWVBFUkxJTksoaExpbmsxKSk7CisgICAg
QXRrT2JqZWN0KiBoTGlua09iamVjdDEgPSBhdGtfaHlwZXJsaW5rX2dldF9vYmplY3QoaExpbmsx
LCAwKTsKKyAgICBnX2Fzc2VydChBVEtfT0JKRUNUKGhMaW5rT2JqZWN0MSkpOworICAgIGdfYXNz
ZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoaExpbmtPYmplY3QxKSA9PSBBVEtfUk9MRV9MSU5LKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfc3RhcnRfaW5kZXgoaExpbmsx
KSwgPT0sIDApOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9lbmRfaW5k
ZXgoaExpbmsxKSwgPT0sIDYpOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dl
dF9uX2FuY2hvcnMoaExpbmsxKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcHN0cihhdGtfaHlw
ZXJsaW5rX2dldF91cmkoaExpbmsxLCAwKSwgPT0sICJodHRwOi8vZm9vLmJhci5iYXovIik7CisK
KyAgICBBdGtIeXBlcmxpbmsqIGhMaW5rMiA9IGF0a19oeXBlcnRleHRfZ2V0X2xpbmsoQVRLX0hZ
UEVSVEVYVChwYXJhZ3JhcGgyKSwgMSk7CisgICAgZ19hc3NlcnQoQVRLX0hZUEVSTElOSyhoTGlu
azIpKTsKKyAgICBBdGtPYmplY3QqIGhMaW5rT2JqZWN0MiA9IGF0a19oeXBlcmxpbmtfZ2V0X29i
amVjdChoTGluazIsIDApOworICAgIGdfYXNzZXJ0KEFUS19PQkpFQ1QoaExpbmtPYmplY3QyKSk7
CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShoTGlua09iamVjdDIpID09IEFUS19S
T0xFX0xJTkspOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9zdGFydF9p
bmRleChoTGluazIpLCA9PSwgMTIpOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5r
X2dldF9lbmRfaW5kZXgoaExpbmsyKSwgPT0sIDMyKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRr
X2h5cGVybGlua19nZXRfbl9hbmNob3JzKGhMaW5rMiksID09LCAxKTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIoYXRrX2h5cGVybGlua19nZXRfdXJpKGhMaW5rMiwgMCksID09LCAiaHR0cDovL2Jhci5i
YXouZm9vLyIpOworCisgICAgQXRrSHlwZXJsaW5rKiBoTGluazMgPSBhdGtfaHlwZXJ0ZXh0X2dl
dF9saW5rKEFUS19IWVBFUlRFWFQocGFyYWdyYXBoMiksIDIpOworICAgIGdfYXNzZXJ0KEFUS19I
WVBFUkxJTksoaExpbmszKSk7CisgICAgQXRrT2JqZWN0KiBoTGlua09iamVjdDMgPSBhdGtfaHlw
ZXJsaW5rX2dldF9vYmplY3QoaExpbmszLCAwKTsKKyAgICBnX2Fzc2VydChBVEtfT0JKRUNUKGhM
aW5rT2JqZWN0MykpOworICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoaExpbmtPYmpl
Y3QzKSA9PSBBVEtfUk9MRV9MSU5LKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlu
a19nZXRfc3RhcnRfaW5kZXgoaExpbmszKSwgPT0sIDY1KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
YXRrX2h5cGVybGlua19nZXRfZW5kX2luZGV4KGhMaW5rMyksID09LCA3NSk7CisgICAgZ19hc3Nl
cnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0X25fYW5jaG9ycyhoTGluazMpLCA9PSwgMSk7Cisg
ICAgZ19hc3NlcnRfY21wc3RyKGF0a19oeXBlcmxpbmtfZ2V0X3VyaShoTGluazMsIDApLCA9PSwg
Imh0dHA6Ly9iYXouZm9vLmJhci8iKTsKKworICAgIEF0a09iamVjdCogbGlzdCA9IGF0a19vYmpl
Y3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAyKTsKKyAgICBnX2Fzc2VydChBVEtfT0JK
RUNUKGxpc3QpKTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGxpc3QpID09IEFU
S19ST0xFX0xJU1QpOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfb2JqZWN0X2dldF9uX2FjY2Vz
c2libGVfY2hpbGRyZW4obGlzdCksID09LCAxKTsKKworICAgIEF0a09iamVjdCogbGlzdEl0ZW0g
PSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGxpc3QsIDApOworICAgIGdfYXNzZXJ0
KEFUS19JU19URVhUKGxpc3RJdGVtKSk7CisgICAgZ19hc3NlcnQoQVRLX0lTX0hZUEVSVEVYVChs
aXN0SXRlbSkpOworCisgICAgQXRrSHlwZXJsaW5rKiBoTGlua0luTGlzdEl0ZW0gPSBhdGtfaHlw
ZXJ0ZXh0X2dldF9saW5rKEFUS19IWVBFUlRFWFQobGlzdEl0ZW0pLCAwKTsKKyAgICBnX2Fzc2Vy
dChBVEtfSFlQRVJMSU5LKGhMaW5rSW5MaXN0SXRlbSkpOworICAgIEF0a09iamVjdCogaExpbmtP
YmplY3QgPSBhdGtfaHlwZXJsaW5rX2dldF9vYmplY3QoaExpbmtJbkxpc3RJdGVtLCAwKTsKKyAg
ICBnX2Fzc2VydChBVEtfT0JKRUNUKGhMaW5rT2JqZWN0KSk7CisgICAgZ19hc3NlcnQoYXRrX29i
amVjdF9nZXRfcm9sZShoTGlua09iamVjdCkgPT0gQVRLX1JPTEVfTElOSyk7CisgICAgZ19hc3Nl
cnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0X3N0YXJ0X2luZGV4KGhMaW5rSW5MaXN0SXRlbSks
ID09LCAyMCk7CisgICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0X2VuZF9pbmRl
eChoTGlua0luTGlzdEl0ZW0pLCA9PSwgNDMpOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlw
ZXJsaW5rX2dldF9uX2FuY2hvcnMoaExpbmtJbkxpc3RJdGVtKSwgPT0sIDEpOworICAgIGdfYXNz
ZXJ0X2NtcHN0cihhdGtfaHlwZXJsaW5rX2dldF91cmkoaExpbmtJbkxpc3RJdGVtLCAwKSwgPT0s
ICJodHRwOi8vZm9vLmJhci5iYXovIik7CisKKyAgICAvKiBGaW5hbGx5IGNoZWNrIHRoZSBBdGtB
Y3Rpb24gaW50ZXJmYWNlIGZvciBhIGdpdmVuIEF0a0h5cGVybGluay4gKi8KKyAgICBnX2Fzc2Vy
dChBVEtfSVNfQUNUSU9OKGhMaW5rMSkpOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfYWN0aW9u
X2dldF9uX2FjdGlvbnMoQVRLX0FDVElPTihoTGluazEpKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0
X2NtcHN0cihhdGtfYWN0aW9uX2dldF9rZXliaW5kaW5nKEFUS19BQ1RJT04oaExpbmsxKSwgMCks
ID09LCAiIik7CisgICAgZ19hc3NlcnRfY21wc3RyKGF0a19hY3Rpb25fZ2V0X25hbWUoQVRLX0FD
VElPTihoTGluazEpLCAwKSwgPT0sICJqdW1wIik7CisgICAgZ19hc3NlcnQoYXRrX2FjdGlvbl9k
b19hY3Rpb24oQVRLX0FDVElPTihoTGluazEpLCAwKSk7CisKKyAgICBnX29iamVjdF91bnJlZihw
YXJhZ3JhcGgxKTsKKyAgICBnX29iamVjdF91bnJlZihwYXJhZ3JhcGgyKTsKKyAgICBnX29iamVj
dF91bnJlZihsaXN0KTsKKyAgICBnX29iamVjdF91bnJlZihsaXN0SXRlbSk7CisgICAgZ19vYmpl
Y3RfdW5yZWYod2ViVmlldyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtMaXN0c09m
SXRlbXMoKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVco
d2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsK
KyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDgwMCwgNjAwIH07CisgICAg
Z3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQod2ViVmlldyksICZhbGxvY2F0aW9u
KTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgbGlzdHNPZkl0ZW1z
LCAwLCAwLCAwKTsKKworICAgIEF0a09iamVjdCogb2JqZWN0ID0gZ2V0V2ViQXJlYU9iamVjdCh3
ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChvYmplY3QpOworCisgICAgLyogVW5vcmRlcmVkIGxpc3Qu
ICovCisKKyAgICBBdGtPYmplY3QqIHVMaXN0ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9j
aGlsZChvYmplY3QsIDApOworICAgIGdfYXNzZXJ0KEFUS19PQkpFQ1QodUxpc3QpKTsKKyAgICBn
X2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKHVMaXN0KSA9PSBBVEtfUk9MRV9MSVNUKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoYXRrX29iamVjdF9nZXRfbl9hY2Nlc3NpYmxlX2NoaWxkcmVuKHVM
aXN0KSwgPT0sIDMpOworCisgICAgQXRrT2JqZWN0KiBpdGVtMSA9IGF0a19vYmplY3RfcmVmX2Fj
Y2Vzc2libGVfY2hpbGQodUxpc3QsIDApOworICAgIEF0a09iamVjdCogaXRlbTIgPSBhdGtfb2Jq
ZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKHVMaXN0LCAxKTsKKyAgICBBdGtPYmplY3QqIGl0ZW0z
ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZCh1TGlzdCwgMik7CisKKyAgICBnX2Fz
c2VydF9jbXBpbnQoYXRrX29iamVjdF9nZXRfbl9hY2Nlc3NpYmxlX2NoaWxkcmVuKGl0ZW0xKSwg
PT0sIDApOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfb2JqZWN0X2dldF9uX2FjY2Vzc2libGVf
Y2hpbGRyZW4oaXRlbTIpLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21waW50KGF0a19vYmplY3Rf
Z2V0X25fYWNjZXNzaWJsZV9jaGlsZHJlbihpdGVtMyksID09LCAxKTsKKworICAgIGdfb2JqZWN0
X3VucmVmKGl0ZW0xKTsKKyAgICBnX29iamVjdF91bnJlZihpdGVtMik7CisgICAgZ19vYmplY3Rf
dW5yZWYoaXRlbTMpOworCisgICAgLyogT3JkZXJlZCBsaXN0LiAqLworCisgICAgQXRrT2JqZWN0
KiBvTGlzdCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAxKTsKKyAg
ICBnX2Fzc2VydChBVEtfT0JKRUNUKG9MaXN0KSk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9n
ZXRfcm9sZShvTGlzdCkgPT0gQVRLX1JPTEVfTElTVCk7CisgICAgZ19hc3NlcnRfY21waW50KGF0
a19vYmplY3RfZ2V0X25fYWNjZXNzaWJsZV9jaGlsZHJlbihvTGlzdCksID09LCAzKTsKKworICAg
IGl0ZW0xID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvTGlzdCwgMCk7CisgICAg
aXRlbTIgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9MaXN0LCAxKTsKKyAgICBp
dGVtMyA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob0xpc3QsIDIpOworCisgICAg
Z19hc3NlcnRfY21waW50KGF0a19vYmplY3RfZ2V0X25fYWNjZXNzaWJsZV9jaGlsZHJlbihpdGVt
MSksID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX29iamVjdF9nZXRfbl9hY2Nlc3Np
YmxlX2NoaWxkcmVuKGl0ZW0yKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfb2Jq
ZWN0X2dldF9uX2FjY2Vzc2libGVfY2hpbGRyZW4oaXRlbTMpLCA9PSwgMSk7CisKKyAgICBnX29i
amVjdF91bnJlZihpdGVtMSk7CisgICAgZ19vYmplY3RfdW5yZWYoaXRlbTIpOworICAgIGdfb2Jq
ZWN0X3VucmVmKGl0ZW0zKTsKKworICAgIGdfb2JqZWN0X3VucmVmKHVMaXN0KTsKKyAgICBnX29i
amVjdF91bnJlZihvTGlzdCk7CisgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Cit9CisKK3R5
cGVkZWYgZW51bSB7CisgIFRFWFRfQ0hBTkdFX0lOU0VSVCA9IDEsCisgIFRFWFRfQ0hBTkdFX1JF
TU9WRSA9IDIKK30gVGV4dENoYW5nZVR5cGU7CisKK3N0YXRpYyBnY2hhciogdGV4dENoYW5nZWRS
ZXN1bHQgPSAwOworCitzdGF0aWMgdm9pZCB0ZXh0Q2hhbmdlZENiKEF0a1RleHQqIHRleHQsIGdp
bnQgcG9zLCBnaW50IGxlbiwgZ2NoYXIqIG1vZGlmaWVkVGV4dCwgZ3BvaW50ZXIgZGF0YSkKK3sK
KyAgICBnX2Fzc2VydCh0ZXh0ICYmIEFUS19JU19PQkpFQ1QodGV4dCkpOworCisgICAgVGV4dENo
YW5nZVR5cGUgdHlwZSA9IEdQT0lOVEVSX1RPX0lOVChkYXRhKTsKKyAgICBnX2ZyZWUodGV4dENo
YW5nZWRSZXN1bHQpOworICAgIHRleHRDaGFuZ2VkUmVzdWx0ID0gZ19zdHJkdXBfcHJpbnRmKCJ8
JWR8JWR8JWR8JyVzJ3wiLCB0eXBlLCBwb3MsIGxlbiwgbW9kaWZpZWRUZXh0KTsKK30KKworc3Rh
dGljIHZvaWQgdGVzdFdlYmtpdEF0a1RleHRDaGFuZ2VkTm90aWZpY2F0aW9ucygpCit7CisgICAg
V2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdf
bmV3KCkpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOworICAgIEd0a0FsbG9jYXRp
b24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgODAwLCA2MDAgfTsKKyAgICBndGtfd2lkZ2V0X3NpemVf
YWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOworICAgIHdlYmtpdF93
ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LCBmb3JtV2l0aFRleHRJbnB1dHMsIDAsIDAsIDAp
OworCisgICAgQXRrT2JqZWN0KiBvYmplY3QgPSBnZXRXZWJBcmVhT2JqZWN0KHdlYlZpZXcpOwor
ICAgIGdfYXNzZXJ0KG9iamVjdCk7CisKKyAgICBBdGtPYmplY3QqIGZvcm0gPSBhdGtfb2JqZWN0
X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMCk7CisgICAgZ19hc3NlcnQoQVRLX0lTX09C
SkVDVChmb3JtKSk7CisKKyAgICAvKiBGaXJzdCBjaGVjayBub3JtYWwgdGV4dCBlbnRyaWVzLiAq
LworICAgIEF0a09iamVjdCogdGV4dEVudHJ5ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9j
aGlsZChmb3JtLCAwKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfRURJVEFCTEVfVEVYVCh0ZXh0RW50
cnkpKTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKEFUS19PQkpFQ1QodGV4dEVu
dHJ5KSkgPT0gQVRLX1JPTEVfRU5UUlkpOworCisgICAgZ19zaWduYWxfY29ubmVjdCh0ZXh0RW50
cnksICJ0ZXh0LWluc2VydCIsCisgICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKHRleHRD
aGFuZ2VkQ2IpLAorICAgICAgICAgICAgICAgICAgICAgR0lOVF9UT19QT0lOVEVSKFRFWFRfQ0hB
TkdFX0lOU0VSVCkpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QodGV4dEVudHJ5LCAidGV4dC1yZW1v
dmUiLAorICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyh0ZXh0Q2hhbmdlZENiKSwKKyAg
ICAgICAgICAgICAgICAgICAgIEdJTlRfVE9fUE9JTlRFUihURVhUX0NIQU5HRV9SRU1PVkUpKTsK
KworICAgIGdpbnQgcG9zID0gMDsKKyAgICBhdGtfZWRpdGFibGVfdGV4dF9pbnNlcnRfdGV4dChB
VEtfRURJVEFCTEVfVEVYVCh0ZXh0RW50cnkpLCAiZm9vIGJhciBiYXoiLCAxMSwgJnBvcyk7Cisg
ICAgY2hhciogdGV4dCA9IGF0a190ZXh0X2dldF90ZXh0KEFUS19URVhUKHRleHRFbnRyeSksIDAs
IC0xKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGV4dCwgPT0sICJmb28gYmFyIGJheiIpOworICAg
IGdfYXNzZXJ0X2NtcHN0cih0ZXh0Q2hhbmdlZFJlc3VsdCwgPT0sICJ8MXwwfDExfCdmb28gYmFy
IGJheid8Iik7CisgICAgZ19mcmVlKHRleHQpOworCisgICAgYXRrX2VkaXRhYmxlX3RleHRfZGVs
ZXRlX3RleHQoQVRLX0VESVRBQkxFX1RFWFQodGV4dEVudHJ5KSwgNCwgNyk7CisgICAgdGV4dCA9
IGF0a190ZXh0X2dldF90ZXh0KEFUS19URVhUKHRleHRFbnRyeSksIDAsIC0xKTsKKyAgICBnX2Fz
c2VydF9jbXBzdHIodGV4dCwgPT0sICJmb28gIGJheiIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0
ZXh0Q2hhbmdlZFJlc3VsdCwgPT0sICJ8Mnw0fDN8J2Jhcid8Iik7CisgICAgZ19mcmVlKHRleHQp
OworCisgICAgcG9zID0gNDsKKyAgICBhdGtfZWRpdGFibGVfdGV4dF9pbnNlcnRfdGV4dChBVEtf
RURJVEFCTEVfVEVYVCh0ZXh0RW50cnkpLCAicXV4IHF1dXggdG9iZWlnbm9yZWQiLCA4LCAmcG9z
KTsKKyAgICB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHQoQVRLX1RFWFQodGV4dEVudHJ5KSwgMCwg
LTEpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwgImZvbyBxdXggcXV1eCBiYXoiKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIodGV4dENoYW5nZWRSZXN1bHQsID09LCAifDF8NHw4fCdxdXgg
cXV1eCd8Iik7CisgICAgZ19mcmVlKHRleHQpOworCisgICAgLyogTm93IGNoZWNrIGZvciBwYXNz
d29yZCBlbnRyaWVzLiAqLworICAgIEF0a09iamVjdCogcGFzc3dvcmRFbnRyeSA9IGF0a19vYmpl
Y3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoZm9ybSwgMSk7CisgICAgZ19hc3NlcnQoQVRLX0lTX0VE
SVRBQkxFX1RFWFQocGFzc3dvcmRFbnRyeSkpOworICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0
X3JvbGUoQVRLX09CSkVDVChwYXNzd29yZEVudHJ5KSkgPT0gQVRLX1JPTEVfUEFTU1dPUkRfVEVY
VCk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHBhc3N3b3JkRW50cnksICJ0ZXh0LWluc2VydCIs
CisgICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKHRleHRDaGFuZ2VkQ2IpLAorICAgICAg
ICAgICAgICAgICAgICAgR0lOVF9UT19QT0lOVEVSKFRFWFRfQ0hBTkdFX0lOU0VSVCkpOworICAg
IGdfc2lnbmFsX2Nvbm5lY3QocGFzc3dvcmRFbnRyeSwgInRleHQtcmVtb3ZlIiwKKyAgICAgICAg
ICAgICAgICAgICAgIEdfQ0FMTEJBQ0sodGV4dENoYW5nZWRDYiksCisgICAgICAgICAgICAgICAg
ICAgICBHSU5UX1RPX1BPSU5URVIoVEVYVF9DSEFOR0VfUkVNT1ZFKSk7CisKKyAgICBwb3MgPSAw
OworICAgIC8qIEEgc2luZ2xlIGJ1bGxldCBjaGFyYWN0ZXIgaXMgJ1wzNDJcMjAwXDI0MicgKi8K
KyAgICBhdGtfZWRpdGFibGVfdGV4dF9pbnNlcnRfdGV4dChBVEtfRURJVEFCTEVfVEVYVChwYXNz
d29yZEVudHJ5KSwgImZvb2JhciIsIDYsICZwb3MpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0
Q2hhbmdlZFJlc3VsdCwgPT0sICJ8MXwwfDZ8J1wzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJc
MjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0Mid8Iik7CisgICAgdGV4
dCA9IGF0a190ZXh0X2dldF90ZXh0KEFUS19URVhUKHBhc3N3b3JkRW50cnkpLCAwLCAtMSk7Cisg
ICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09LCAiXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0
MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyIik7CisgICAgZ19m
cmVlKHRleHQpOworCisgICAgYXRrX2VkaXRhYmxlX3RleHRfZGVsZXRlX3RleHQoQVRLX0VESVRB
QkxFX1RFWFQocGFzc3dvcmRFbnRyeSksIDIsIDQpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0
Q2hhbmdlZFJlc3VsdCwgPT0sICJ8MnwyfDJ8J1wzNDJcMjAwXDI0MlwzNDJcMjAwXDI0Mid8Iik7
CisKKyAgICB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHQoQVRLX1RFWFQocGFzc3dvcmRFbnRyeSks
IDAsIC0xKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGV4dCwgPT0sICJcMzQyXDIwMFwyNDJcMzQy
XDIwMFwyNDJcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDIiKTsKKyAgICBnX2ZyZWUodGV4dCk7CisK
KyAgICBwb3MgPSAzOworICAgIGF0a19lZGl0YWJsZV90ZXh0X2luc2VydF90ZXh0KEFUS19FRElU
QUJMRV9URVhUKHBhc3N3b3JkRW50cnkpLCAicXV4IHRvYmVpZ25vcmVkIiwgMywgJnBvcyk7Cisg
ICAgZ19hc3NlcnRfY21wc3RyKHRleHRDaGFuZ2VkUmVzdWx0LCA9PSwgInwxfDN8M3wnXDM0Mlwy
MDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyJ3wiKTsKKworICAgIHRleHQgPSBhdGtfdGV4
dF9nZXRfdGV4dChBVEtfVEVYVChwYXNzd29yZEVudHJ5KSwgMCwgLTEpOworICAgIGdfYXNzZXJ0
X2NtcHN0cih0ZXh0LCA9PSwgIlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0Mlwz
NDJcMjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MiIpOworICAgIGdf
ZnJlZSh0ZXh0KTsKKworICAgIGdfZnJlZSh0ZXh0Q2hhbmdlZFJlc3VsdCk7CisKKyAgICBnX29i
amVjdF91bnJlZihmb3JtKTsKKyAgICBnX29iamVjdF91bnJlZih0ZXh0RW50cnkpOworICAgIGdf
b2JqZWN0X3VucmVmKHBhc3N3b3JkRW50cnkpOworICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcp
OworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrUGFyZW50Rm9yUm9vdE9iamVjdCgpCit7
CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2Vi
X3ZpZXdfbmV3KCkpOworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgODAw
LCA2MDAgfTsKKyAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3
KSwgJmFsbG9jYXRpb24pOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3
LCBjb250ZW50cywgMCwgMCwgMCk7CisKKyAgICAvKiBXZSBuZWVkIGEgcGFyZW50IGNvbnRhaW5l
ciB3aWRnZXQgZm9yIHRoZSB3ZWJ2aWV3LiAqLworICAgIEd0a1dpZGdldCogcGFyZW50Q29udGFp
bmVyID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7CisgICAgZ19vYmplY3Rf
cmVmX3NpbmsocGFyZW50Q29udGFpbmVyKTsKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09O
VEFJTkVSKHBhcmVudENvbnRhaW5lciksIEdUS19XSURHRVQod2ViVmlldykpOworCisgICAgQXRr
T2JqZWN0KiBheFBhcmVudCA9IGd0a193aWRnZXRfZ2V0X2FjY2Vzc2libGUocGFyZW50Q29udGFp
bmVyKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfT0JKRUNUKGF4UGFyZW50KSk7CisKKyAgICBBdGtP
YmplY3QqIGF4Um9vdCA9IGd0a193aWRnZXRfZ2V0X2FjY2Vzc2libGUoR1RLX1dJREdFVCh3ZWJW
aWV3KSk7CisgICAgZ19hc3NlcnQoQVRLX0lTX09CSkVDVChheFJvb3QpKTsKKworICAgIC8qIFRo
ZSBjaGlsZCBmb3IgdGhlIHBhcmVudCBjb250YWluZXIncyBhY2Nlc3NpYmlsaXR5IG9iamVjdAor
ICAgICAgIHNob3VsZCBiZSB0aGUgYWNjZXNzaWJpbGl0eSBvYmplY3QgZm9yIHRoZSBXZWJWaWV3
J3Mgcm9vdC4gKi8KKyAgICBBdGtPYmplY3QqIGF4UGFyZW50Q2hpbGQgPSBhdGtfb2JqZWN0X3Jl
Zl9hY2Nlc3NpYmxlX2NoaWxkKGF4UGFyZW50LCAwKTsKKyAgICBnX2Fzc2VydChheFBhcmVudENo
aWxkID09IGF4Um9vdCk7CisKKyAgICAvKiBCb3R0b20tdXAgbmF2aWdhdGlvbiBzaG91bGQgbWF0
Y2ggdG9wLWRvd24gb25lLiAqLworICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3BhcmVudChh
eFBhcmVudENoaWxkKSA9PSBheFBhcmVudCk7CisKKyAgICBnX29iamVjdF91bnJlZihheFBhcmVu
dENoaWxkKTsKKyAgICBnX29iamVjdF91bnJlZihwYXJlbnRDb250YWluZXIpOworfQorCitzdGF0
aWMgdm9pZCB0ZXN0V2Via2l0QXRrU2V0UGFyZW50Rm9yT2JqZWN0KCkKK3sKKyAgICBXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7
CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9OworICAg
IGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlv
bik7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIGNvbnRlbnRzLCAw
LCAwLCAwKTsKKworICAgIC8qIFB1dCB0aGUgd2VidmlldyBpbiBhIHBhcmVudCBjb250YWluZXIg
d2lkZ2V0IHRvIGNoZWNrIHRoYXQgdGhlCisgICAgICAgbm9ybWFsIGJlaGF2aW91ciBrZWVwcyB3
b3JraW5nIGFzIGV4cGVjdGVkIGJ5IGRlZmF1bHQuICovCisgICAgR3RrV2lkZ2V0KiBwYXJlbnRD
b250YWluZXIgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKKyAgICBnX29i
amVjdF9yZWZfc2luayhwYXJlbnRDb250YWluZXIpOworICAgIGd0a19jb250YWluZXJfYWRkKEdU
S19DT05UQUlORVIocGFyZW50Q29udGFpbmVyKSwgR1RLX1dJREdFVCh3ZWJWaWV3KSk7CisKKyAg
ICBBdGtPYmplY3QqIGF4Um9vdCA9IGd0a193aWRnZXRfZ2V0X2FjY2Vzc2libGUoR1RLX1dJREdF
VCh3ZWJWaWV3KSk7CisgICAgZ19hc3NlcnQoQVRLX0lTX09CSkVDVChheFJvb3QpKTsKKworICAg
IEF0a09iamVjdCogYXhQYXJlbnQgPSBndGtfd2lkZ2V0X2dldF9hY2Nlc3NpYmxlKHBhcmVudENv
bnRhaW5lcik7CisgICAgZ19hc3NlcnQoQVRLX0lTX09CSkVDVChheFBhcmVudCkpOworCisgICAg
LyogVGhlIHBhcmVudCBvZiB0aGUgcm9vdCBvYmplY3QgaXMgdGhlIHBhcmVudCBjb250YWluZXIn
cyBhMTF5IG9iamVjdC4gKi8KKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9wYXJlbnQoYXhS
b290KSA9PSBheFBhcmVudCk7CisKKyAgICAvKiBXZSBub3cgbmVlZCB0byB1c2Ugc29tZXRoaW5n
IGFzIGEgYW4gYWx0ZXJuYXRpdmUgcGFyZW50IGZvcgorICAgICAgIHRoZSBhMTF5IG9iamVjdCBh
c3NvY2lhdGVkIHdpdGggdGhlIHJvb3Qgb2YgdGhlIERPTSB0cmVlLiAqLworICAgIEd0a1dpZGdl
dCogYWx0ZXJuYXRpdmVQYXJlbnQgPSBndGtfYnV0dG9uX25ldygpOworICAgIGdfb2JqZWN0X3Jl
Zl9zaW5rKGFsdGVybmF0aXZlUGFyZW50KTsKKworICAgIEF0a09iamVjdCogYXhBbHRlcm5hdGl2
ZVBhcmVudCA9IGd0a193aWRnZXRfZ2V0X2FjY2Vzc2libGUoYWx0ZXJuYXRpdmVQYXJlbnQpOwor
ICAgIGdfYXNzZXJ0KEFUS19JU19PQkpFQ1QoYXhBbHRlcm5hdGl2ZVBhcmVudCkpOworCisgICAg
LyogTWFudWFsbHkgc2V0IHRoZSBhbHRlcm5hdGl2ZSBwYXJlbnQncyBhY2Nlc3NpYmlsaXR5IG9i
amVjdCBhcworICAgICAgIHRoZSBwYXJlbnQgZm9yIHRoZSBXZWJLaXQgYWNjZXNzaWJpbGl0eSBy
b290IG9iamVjdCBhbmQgY2hlY2suICovCisgICAgYXRrX29iamVjdF9zZXRfcGFyZW50KGF4Um9v
dCwgYXhBbHRlcm5hdGl2ZVBhcmVudCk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcGFy
ZW50KGF4Um9vdCkgPT0gYXhBbHRlcm5hdGl2ZVBhcmVudCk7CisKKyAgICBnX29iamVjdF91bnJl
ZihhbHRlcm5hdGl2ZVBhcmVudCk7CisgICAgZ19vYmplY3RfdW5yZWYocGFyZW50Q29udGFpbmVy
KTsKK30KKworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCitzdGF0aWMgdm9pZCBpbml0aWFsaXpl
VGVzdGluZ0ZyYW1ld29yayhpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgLyogRW5zdXJl
IEdBSUwgaXMgdGhlIG9ubHkgbW9kdWxlIGxvYWRlZC4gKi8KKyAgICBnX3NldGVudigiR1RLX01P
RFVMRVMiLCAiZ2FpbCIsIFRSVUUpOworCisgICAgLyogRm9sbG93aW5nIGxpbmVzIHdlcmUgdGFr
ZW4gZnJvbSBndGtfdGVzdF9pbml0KCkuICovCisgICAgZ190ZXN0X2luaXQoJmFyZ2MsICZhcmd2
LCAwKTsKKyAgICBndGtfZGlzYWJsZV9zZXRsb2NhbGUoKTsKKyAgICBzZXRsb2NhbGUoTENfQUxM
LCAiQyIpOworCisgICAgZ3RrX2luaXQoJmFyZ2MsICZhcmd2KTsKK30KKyNlbmRpZgorCitpbnQg
bWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIK
KyAgICAvKiBXZSBjYW4ndCBqdXN0IGNhbGwgdG8gZ3RrX3Rlc3RfaW5pdCgpIGluIHRoaXMgY2Fz
ZSBiZWNhdXNlIGl0cworICAgICAgIGltcGxlbWVudGF0aW9uIG1ha2VzIHN1cmUgdGhhdCBubyBH
VEsrIG1vZHVsZSB3aWxsIGJlIGxvYWRlZCwgYW5kCisgICAgICAgd2Ugd2lsbCBuZWVkIHRvIGxv
YWQgR0FJTCBmb3IgdGVzdHMgdGhhdCBuZWVkIHRvIHVzZSBBdGtPYmplY3RzCisgICAgICAgZnJv
bSBub24tV2ViS2l0IEd0a1dpZGdldHMgKGUuZyBwYXJlbnRGb3JSb290T2JqZWN0KS4qLworICAg
IGluaXRpYWxpemVUZXN0aW5nRnJhbWV3b3JrKGFyZ2MsIGFyZ3YpOworI2Vsc2UKKyAgICBndGtf
dGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7CisjZW5kaWYKKworICAgIGdfdGVzdF9idWdf
YmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIv
d2Via2l0L2F0ay9jYXJldE9mZnNldHMiLCB0ZXN0V2Via2l0QXRrQ2FyZXRPZmZzZXRzKTsKKyAg
ICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2NhcmV0T2Zmc2V0c0FuZEV4dHJhbm91c1do
aXRlU3BhY2VzIiwgdGVzdFdlYmtpdEF0a0NhcmV0T2Zmc2V0c0FuZEV4dHJhbm91c1doaXRlU3Bh
Y2VzKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2NvbWJvQm94IiwgdGVzdFdl
YmtpdEF0a0NvbWJvQm94KTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2RvY3Vt
ZW50TG9hZGluZ0V2ZW50cyIsIHRlc3RXZWJraXRBdGtEb2N1bWVudExvYWRpbmdFdmVudHMpOwor
ICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvZW1iZWRkZWRPYmplY3RzIiwgdGVzdFdl
YmtpdEF0a0VtYmVkZGVkT2JqZWN0cyk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0
ay9nZXRIZWFkZXJzSW5UYWJsZSIsIHRlc3RXZWJraXRBdGtHZXRIZWFkZXJzSW5UYWJsZSk7Cisg
ICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay90ZXh0QXR0cmlidXRlcyIsIHRlc3RXZWJr
aXRBdGtUZXh0QXR0cmlidXRlcyk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay90
ZXh0U2VsZWN0aW9ucyIsIHRlc3RXZWJraXRBdGtUZXh0U2VsZWN0aW9ucyk7CisgICAgZ190ZXN0
X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9nZXRFeHRlbnRzIiwgdGVzdFdlYmtpdEF0a0dldEV4dGVu
dHMpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvaHlwZXJ0ZXh0QW5kSHlwZXJs
aW5rcyIsIHRlc3RXZWJraXRBdGtIeXBlcnRleHRBbmRIeXBlcmxpbmtzKTsKKyAgICBnX3Rlc3Rf
YWRkX2Z1bmMoIi93ZWJraXQvYXRrL2xheW91dEFuZERhdGFUYWJsZXMiLCB0ZXN0V2Via2l0QXRr
TGF5b3V0QW5kRGF0YVRhYmxlcyk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9s
aW5rc1dpdGhJbmxpbmVJbWFnZXMiLCB0ZXN0V2Via2l0QXRrTGlua3NXaXRoSW5saW5lSW1hZ2Vz
KTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2xpc3RzT2ZJdGVtcyIsIHRlc3RX
ZWJraXRBdGtMaXN0c09mSXRlbXMpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsv
dGV4dENoYW5nZWROb3RpZmljYXRpb25zIiwgdGVzdFdlYmtpdEF0a1RleHRDaGFuZ2VkTm90aWZp
Y2F0aW9ucyk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9wYXJlbnRGb3JSb290
T2JqZWN0IiwgdGVzdFdlYmtpdEF0a1BhcmVudEZvclJvb3RPYmplY3QpOworICAgIGdfdGVzdF9h
ZGRfZnVuYygiL3dlYmtpdC9hdGsvc2V0UGFyZW50Rm9yT2JqZWN0IiwgdGVzdFdlYmtpdEF0a1Nl
dFBhcmVudEZvck9iamVjdCk7CisgICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7Cit9CisKZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RhdGtyb2xlcy5j
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGF0a3JvbGVzLmMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg4MTdjZgotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RhdGtyb2xlcy5jCkBA
IC0wLDAgKzEsNDI2IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTAgSm9hbm1hcmllIERpZ2dz
CisgKiBDb3B5cmlnaHQgwqkgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CisjaW5jbHVkZSA8Z3Rr
L2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKworLyogTm9uIGZvcm0gcm9sZXMg
Ki8KKyNkZWZpbmUgSFRNTF9ET0NVTUVOVF9GUkFNRSAiPGh0bWw+PGJvZHk+VGhpcyBpcyBhIHRl
c3QuPC9ib2R5PjwvaHRtbD4iCisjZGVmaW5lIEhUTUxfSEVBRElORyAiPGh0bWw+PGJvZHk+PGgx
PjE8L2gxPjxoMj4yPC9oMj48aDM+MzwvaDM+PGg0PjQ8L2g0PjxoNT41PC9oNT48aDY+NjwvaDY+
PC9ib2R5PjwvaHRtbD4iCisjZGVmaW5lIEhUTUxfSU1BR0UgIjxodG1sPjxib2R5PjxpbWcgc3Jj
PSdmb29iYXIucG5nJyBhbHQ9J1RoaXMgaXMgYSB0ZXN0LicvPjwvYm9keT48L2h0bWw+IgorI2Rl
ZmluZSBIVE1MX0xJTktfVEVYVCAiPGh0bWw+PGJvZHk+PGEgaHJlZj0nZm9vYmFyLmh0bWwnPlRo
aXMgaXMgYSB0ZXN0LjwvYT48L2JvZHk+PC9odG1sPiIKKyNkZWZpbmUgSFRNTF9MSVNUICI8aHRt
bD48Ym9keT48dWw+PGxpPjE8L2xpPjxsaT4yPC9saT48L3VsPjxvbD48bGk+MTwvbGk+PGxpPjI8
L2xpPjwvb2w+PC9ib2R5PjwvaHRtbD4iCisjZGVmaW5lIEhUTUxfUEFSQUdSQVBIICI8aHRtbD48
Ym9keT48cD5UaGlzIGlzIGEgdGVzdC48L3A+PC9ib2R5PjwvaHRtbD4iCisjZGVmaW5lIEhUTUxf
U0VDVElPTiAiPGh0bWw+PGJvZHk+PGRpdj5UaGlzIGlzIGEgdGVzdC48L2Rpdj48L2JvZHk+PC9o
dG1sPiIKKyNkZWZpbmUgSFRNTF9UQUJMRSAiPGh0bWw+PGJvZHk+PHRhYmxlIGJvcmRlcj0nMSc+
PHRyPjx0ZD5UaGlzIGlzPC90ZD48dGQ+YSB0ZXN0LjwvdGQ+PC90cj48L3RhYmxlPjwvYm9keT48
L2h0bWw+IgorI2RlZmluZSBIVE1MX1NFUEFSQVRPUiAiPGh0bWw+PGJvZHk+PGhyLz48L2JvZHk+
PC9odG1sPiIKKyNkZWZpbmUgSFRNTF9DT01CT0JPWCAiPGh0bWw+PGJvZHk+PHNlbGVjdCBzaXpl
PScxJz48b3B0aW9uPm9uZTwvb3B0aW9uPjxvcHRpb24+dHdvPC9vcHRpb24+PG9wdGlvbj50aHJl
ZTwvb3B0aW9uPjwvc2VsZWN0PjwvYm9keT48L2h0bWw+IgorLyogRm9ybSByb2xlcyAqLworI2Rl
ZmluZSBIVE1MX0ZPUk0gIjxodG1sPjxib2R5Pjxmb3JtPlRoaXMgaXMgYSB0ZXN0LjwvZm9ybT48
L2JvZHk+PC9odG1sPiIKKyNkZWZpbmUgSFRNTF9DSEVDS19CT1ggIjxodG1sPjxib2R5PjxpbnB1
dCB0eXBlPSdjaGVja2JveCcgLz5UaGlzIGlzIGEgdGVzdC48L2JvZHk+PC9odG1sPiIKKyNkZWZp
bmUgSFRNTF9MQUJFTEVEX0VOVFJZICI8aHRtbD48Ym9keT48bGFiZWwgZm9yPSdmb28nPk5hbWU6
PC9sYWJlbD48aW5wdXQgdHlwZT0ndGV4dCcgaWQ9J2ZvbycgLz48L2JvZHk+PC9odG1sPiIKKyNk
ZWZpbmUgSFRNTF9MSVNUQk9YICI8aHRtbD48Ym9keT48c2VsZWN0IHNpemU9JzMnPjxvcHRpb24+
b25lPC9vcHRpb24+PG9wdGlvbj50d288L29wdGlvbj48b3B0aW9uPnRocmVlPC9vcHRpb24+PC9z
ZWxlY3Q+PC9ib2R5PjwvaHRtbD4iCisjZGVmaW5lIEhUTUxfUEFTU1dPUkRfVEVYVCAiPGh0bWw+
PGJvZHk+PGlucHV0IHR5cGU9J3Bhc3N3b3JkJyAvPjwvYm9keT48L2h0bWw+IgorI2RlZmluZSBI
VE1MX1BVU0hfQlVUVE9OICI8aHRtbD48Ym9keT48aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0n
b2snIC8+VGhpcyBpcyBhIHRlc3QuPC9ib2R5PjwvaHRtbD4iCisjZGVmaW5lIEhUTUxfUkFESU9f
QlVUVE9OICI8aHRtbD48Ym9keT48aW5wdXQgdHlwZT0ncmFkaW8nIC8+VGhpcyBpcyBhIHRlc3Qu
PC9ib2R5PjwvaHRtbD4iCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBBdGtPYmplY3QqIGRvY3Vt
ZW50OworICAgIEF0a09iamVjdCogb2JqOworICAgIEF0a1JvbGUgcm9sZTsKKyAgICBHdGtXaWRn
ZXQqIHdlYlZpZXc7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvYzsKKyAgICBHTWFpbkxvb3AqIGxv
b3A7Cit9IEF0a1JvbGVzRml4dHVyZTsKKworc3RhdGljIGdib29sZWFuIGZpbmlzaF9sb2FkaW5n
KEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSkKK3sKKyAgICBpZiAoZ19tYWluX2xvb3BfaXNfcnVu
bmluZyhmaXh0dXJlLT5sb29wKSkKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChmaXh0dXJlLT5s
b29wKTsKKworICAgIC8vIFdpdGggdGhlIGNoYW5nZSB0byBzdXBwb3J0IFdLMiBhY2Nlc3NpYmls
aXR5LCB0aGUgcm9vdCBvYmplY3QKKyAgICAvLyBoYXMgY2hhbmdlZCBhbmQgaXQncyBubyBsb25n
ZXIgdGhlIGRvY3VtZW50IGZyYW1lLCBidXQgYSBzY3JvbGwKKyAgICAvLyBwYW5lIGNvbnRhaW5p
bmcgdGhlIGRvY3VtZW50IGZyYW1lIGFzIGl0cyBvbmx5IGNoaWxkLiBTZWUgdGhlCisgICAgLy8g
YnVnIDcyMzkwIGZvciBtb3JlIGRldGFpbHMgb24gdGhpcyBjaGFuZ2UuCisgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyMzkwCisgICAgQXRrT2JqZWN0KiBy
b290T2JqZWN0ID0gZ3RrX3dpZGdldF9nZXRfYWNjZXNzaWJsZShmaXh0dXJlLT53ZWJWaWV3KTsK
KyAgICBmaXh0dXJlLT5kb2N1bWVudCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQo
cm9vdE9iamVjdCwgMCk7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+ZG9jdW1lbnQpOworCisgICAg
Ly8gUmVtb3ZlIHRoZSByZWZlcmVuY2UgYWRkZWQgYnkgcmVmX2FjY2Vzc2libGVfY2hpbGQoKSBh
bmQKKyAgICAvLyByZXR1cm4sIHNpbmNlIHdlIGRvbid0IG5lZWQgdG8ga2VlcCB0aGF0IGV4dHJh
IHJlZiBhdCBhbGwuCisgICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+ZG9jdW1lbnQpOworICAg
IHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAo
QXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgZml4
dHVyZS0+bG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKKyAgICBmaXh0dXJlLT5h
bGxvYyA9IChHdGtBbGxvY2F0aW9uKSB7IDAsIDAsIDgwMCwgNjAwIH07CisgICAgZml4dHVyZS0+
d2ViVmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKKyAgICBnX29iamVjdF9yZWZfc2luayhm
aXh0dXJlLT53ZWJWaWV3KTsKKworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShmaXh0dXJl
LT53ZWJWaWV3LCAmZml4dHVyZS0+YWxsb2MpOworCisgICAgaWYgKGRhdGEgIT0gTlVMTCkKKyAg
ICAgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklFVyAoZml4dHVy
ZS0+d2ViVmlldyksIChjb25zdCBjaGFyKikgZGF0YSwgTlVMTCwgTlVMTCwgTlVMTCk7CisKKyAg
ICBnX2lkbGVfYWRkKChHU291cmNlRnVuYykgZmluaXNoX2xvYWRpbmcsIGZpeHR1cmUpOworICAg
IGdfbWFpbl9sb29wX3J1bihmaXh0dXJlLT5sb29wKTsKK30KKworc3RhdGljIHZvaWQgYXRrX3Jv
bGVzX2ZpeHR1cmVfdGVhcmRvd24oQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2lu
dGVyIGRhdGEpCit7CisgICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+d2ViVmlldyk7CisgICAg
Z19tYWluX2xvb3BfdW5yZWYoZml4dHVyZS0+bG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9j
aGlsZF9hbmRfdGVzdF9yb2xlKEF0a09iamVjdCogb2JqLCBnaW50IHBvcywgQXRrUm9sZSByb2xl
KQoreworICAgIEF0a09iamVjdCogY2hpbGQ7CisgICAgQXRrUm9sZSBjaGlsZF9yb2xlOworCisg
ICAgY2hpbGQgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iaiwgcG9zKTsKKyAg
ICBnX2Fzc2VydChjaGlsZCk7CisgICAgY2hpbGRfcm9sZSA9IGF0a19vYmplY3RfZ2V0X3JvbGUo
Y2hpbGQpOworICAgIGdfYXNzZXJ0KGNoaWxkX3JvbGUgPT0gcm9sZSk7CisKKyAgICBnX29iamVj
dF91bnJlZihjaGlsZCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9s
ZV9kb2N1bWVudF9mcmFtZShBdGtSb2xlc0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIg
ZGF0YSkKK3sKKyAgICBmaXh0dXJlLT5yb2xlID0gYXRrX29iamVjdF9nZXRfcm9sZShmaXh0dXJl
LT5kb2N1bWVudCk7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+cm9sZSA9PSBBVEtfUk9MRV9ET0NV
TUVOVF9XRUIpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfaGVh
ZGluZyhBdGtSb2xlc0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAg
ICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5kb2N1bWVudCwgMCwgQVRLX1JPTEVf
SEVBRElORyk7CisgICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+ZG9jdW1lbnQs
IDEsIEFUS19ST0xFX0hFQURJTkcpOworICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1
cmUtPmRvY3VtZW50LCAyLCBBVEtfUk9MRV9IRUFESU5HKTsKKyAgICBnZXRfY2hpbGRfYW5kX3Rl
c3Rfcm9sZShmaXh0dXJlLT5kb2N1bWVudCwgMywgQVRLX1JPTEVfSEVBRElORyk7CisgICAgZ2V0
X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+ZG9jdW1lbnQsIDQsIEFUS19ST0xFX0hFQURJ
TkcpOworICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPmRvY3VtZW50LCA1LCBB
VEtfUk9MRV9IRUFESU5HKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF9y
b2xlX2ltYWdlKEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQor
eworICAgIC8vIFRoaXMgaXMgYW4gZXh0cmFuZW91cyBvYmplY3Qgb2YgQVRLX1JPTEVfUEFORUwg
d2hpY2ggd2Ugc2hvdWxkIGdldCByaWQgb2YuCisgICAgZml4dHVyZS0+b2JqID0gYXRrX29iamVj
dF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmaXh0dXJlLT5kb2N1bWVudCwgMCk7CisgICAgZ19hc3Nl
cnQoZml4dHVyZS0+b2JqKTsKKworICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUt
Pm9iaiwgMCwgQVRLX1JPTEVfSU1BR0UpOworCisgICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+
b2JqKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xpbmsoQXRr
Um9sZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgLy8gVGhp
cyBpcyBhbiBleHRyYW5lb3VzIG9iamVjdCBvZiBBVEtfUk9MRV9QQU5FTCB3aGljaCB3ZSBzaG91
bGQgZ2V0IHJpZCBvZi4KKyAgICBmaXh0dXJlLT5vYmogPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3Np
YmxlX2NoaWxkKGZpeHR1cmUtPmRvY3VtZW50LCAwKTsKKyAgICBnX2Fzc2VydChmaXh0dXJlLT5v
YmopOworCisgICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+b2JqLCAwLCBBVEtf
Uk9MRV9MSU5LKTsKKworICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9iaik7Cit9CisKK3N0
YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9saXN0X2FuZF9pdGVtKEF0a1JvbGVz
Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIEF0a09iamVjdCog
bGlzdE9iajsKKworICAgIGxpc3RPYmogPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxk
KGZpeHR1cmUtPmRvY3VtZW50LCAwKTsKKyAgICBnX2Fzc2VydChsaXN0T2JqKTsKKyAgICBmaXh0
dXJlLT5yb2xlID0gYXRrX29iamVjdF9nZXRfcm9sZShsaXN0T2JqKTsKKyAgICBnX2Fzc2VydChm
aXh0dXJlLT5yb2xlID09IEFUS19ST0xFX0xJU1QpOworCisgICAgZ2V0X2NoaWxkX2FuZF90ZXN0
X3JvbGUobGlzdE9iaiwgMCwgQVRLX1JPTEVfTElTVF9JVEVNKTsKKyAgICBnZXRfY2hpbGRfYW5k
X3Rlc3Rfcm9sZShsaXN0T2JqLCAxLCBBVEtfUk9MRV9MSVNUX0lURU0pOworICAgIGdfb2JqZWN0
X3VucmVmKGxpc3RPYmopOworCisgICAgbGlzdE9iaiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2li
bGVfY2hpbGQoZml4dHVyZS0+ZG9jdW1lbnQsIDEpOworICAgIGdfYXNzZXJ0KGxpc3RPYmopOwor
ICAgIGZpeHR1cmUtPnJvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKGxpc3RPYmopOworICAgIGdf
YXNzZXJ0KGZpeHR1cmUtPnJvbGUgPT0gQVRLX1JPTEVfTElTVCk7CisKKyAgICBnZXRfY2hpbGRf
YW5kX3Rlc3Rfcm9sZShsaXN0T2JqLCAwLCBBVEtfUk9MRV9MSVNUX0lURU0pOworICAgIGdldF9j
aGlsZF9hbmRfdGVzdF9yb2xlKGxpc3RPYmosIDEsIEFUS19ST0xFX0xJU1RfSVRFTSk7CisgICAg
Z19vYmplY3RfdW5yZWYobGlzdE9iaik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0
a19nZXRfcm9sZV9wYXJhZ3JhcGgoQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2lu
dGVyIGRhdGEpCit7CisgICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+ZG9jdW1l
bnQsIDAsIEFUS19ST0xFX1BBUkFHUkFQSCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0
X2F0a19nZXRfcm9sZV9zZWN0aW9uKEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9p
bnRlciBkYXRhKQoreworICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPmRvY3Vt
ZW50LCAwLCBBVEtfUk9MRV9TRUNUSU9OKTsKK30KKworLy8gRG9lcyBub3QgeWV0IHRlc3QgdGFi
bGUgY2VsbHMgYmVjYXVzZSBvZiBidWcgMzA4OTUuCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9h
dGtfZ2V0X3JvbGVfdGFibGUoQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVy
IGRhdGEpCit7CisgICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+ZG9jdW1lbnQs
IDAsIEFUS19ST0xFX1RBQkxFKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dl
dF9yb2xlX3NlcGFyYXRvcihBdGtSb2xlc0ZpeHR1cmUgKmZpeHR1cmUsIGdjb25zdHBvaW50ZXIg
ZGF0YSkKK3sKKyAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5kb2N1bWVudCwg
MCwgQVRLX1JPTEVfU0VQQVJBVE9SKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRr
X2dldF9yb2xlX2NvbWJvYm94KEF0a1JvbGVzRml4dHVyZSAqZml4dHVyZSwgZ2NvbnN0cG9pbnRl
ciBkYXRhKQoreworICAgIEF0a09iamVjdCogY29tYm9ib3hNZW51OworCisgICAgLy8gVGhpcyBp
cyBhbiBleHRyYW5lb3VzIG9iamVjdCBvZiBBVEtfUk9MRV9QQU5FTCB3aGljaCB3ZSBzaG91bGQg
Z2V0IHJpZCBvZi4KKyAgICBmaXh0dXJlLT5vYmogPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxl
X2NoaWxkKGZpeHR1cmUtPmRvY3VtZW50LCAwKTsKKyAgICBnX2Fzc2VydChmaXh0dXJlLT5vYmop
OworCisgICAgZml4dHVyZS0+b2JqID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChm
aXh0dXJlLT5vYmosIDApOworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPm9iaik7CisgICAgZml4dHVy
ZS0+cm9sZSA9IGF0a19vYmplY3RfZ2V0X3JvbGUoZml4dHVyZS0+b2JqKTsKKyAgICBnX2Fzc2Vy
dChmaXh0dXJlLT5yb2xlID09IEFUS19ST0xFX0NPTUJPX0JPWCk7CisKKyAgICBjb21ib2JveE1l
bnUgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZpeHR1cmUtPm9iaiwgMCk7Cisg
ICAgZ19hc3NlcnQoY29tYm9ib3hNZW51KTsKKyAgICBmaXh0dXJlLT5yb2xlID0gYXRrX29iamVj
dF9nZXRfcm9sZShjb21ib2JveE1lbnUpOworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPnJvbGUgPT0g
QVRLX1JPTEVfTUVOVSk7CisKKyAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShjb21ib2JveE1l
bnUsIDAsIEFUS19ST0xFX01FTlVfSVRFTSk7CisgICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUo
Y29tYm9ib3hNZW51LCAxLCBBVEtfUk9MRV9NRU5VX0lURU0pOworICAgIGdldF9jaGlsZF9hbmRf
dGVzdF9yb2xlKGNvbWJvYm94TWVudSwgMiwgQVRLX1JPTEVfTUVOVV9JVEVNKTsKKworICAgIGdf
b2JqZWN0X3VucmVmKGZpeHR1cmUtPm9iaik7CisgICAgZ19vYmplY3RfdW5yZWYoY29tYm9ib3hN
ZW51KTsKK30KKworLyogRm9ybSByb2xlcyAqLworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRr
X2dldF9yb2xlX2Zvcm0oQXRrUm9sZXNGaXh0dXJlICpmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRh
dGEpCit7CisgICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+ZG9jdW1lbnQsIDAs
IEFUS19ST0xFX0ZPUk0pOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3Jv
bGVfY2hlY2tfYm94KEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRh
KQoreworICAgIC8vIFRoaXMgaXMgYW4gZXh0cmFuZW91cyBvYmplY3Qgb2YgQVRLX1JPTEVfUEFO
RUwgd2hpY2ggd2Ugc2hvdWxkIGdldCByaWQgb2YuCisgICAgZml4dHVyZS0+b2JqID0gYXRrX29i
amVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmaXh0dXJlLT5kb2N1bWVudCwgMCk7CisgICAgZ19h
c3NlcnQoZml4dHVyZS0+b2JqKTsKKworICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1
cmUtPm9iaiwgMCwgQVRLX1JPTEVfQ0hFQ0tfQk9YKTsKKworICAgIGdfb2JqZWN0X3VucmVmKGZp
eHR1cmUtPm9iaik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9l
bnRyeShBdGtSb2xlc0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAg
ICAvLyBUaGlzIGlzIGFuIGV4dHJhbmVvdXMgb2JqZWN0IG9mIEFUS19ST0xFX1BBTkVMIHdoaWNo
IHdlIHNob3VsZCBnZXQgcmlkIG9mLgorICAgIGZpeHR1cmUtPm9iaiA9IGF0a19vYmplY3RfcmVm
X2FjY2Vzc2libGVfY2hpbGQoZml4dHVyZS0+ZG9jdW1lbnQsIDApOworICAgIGdfYXNzZXJ0KGZp
eHR1cmUtPm9iaik7CisKKyAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5vYmos
IDEsIEFUS19ST0xFX0VOVFJZKTsKKworICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9iaik7
Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9sYWJlbChBdGtSb2xl
c0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICAvLyBUaGlzIGlz
IGFuIGV4dHJhbmVvdXMgb2JqZWN0IG9mIEFUS19ST0xFX1BBTkVMIHdoaWNoIHdlIHNob3VsZCBn
ZXQgcmlkIG9mLgorICAgIGZpeHR1cmUtPm9iaiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVf
Y2hpbGQoZml4dHVyZS0+ZG9jdW1lbnQsIDApOworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPm9iaik7
CisKKyAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5vYmosIDAsIEFUS19ST0xF
X0xBQkVMKTsKKworICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9iaik7Cit9CisKK3N0YXRp
YyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9saXN0Ym94KEF0a1JvbGVzRml4dHVyZSog
Zml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIEF0a09iamVjdCogbGlzdGJveE9i
ajsKKyAgICAvLyBUaGlzIGlzIGFuIGV4dHJhbmVvdXMgb2JqZWN0IG9mIEFUS19ST0xFX1BBTkVM
IHdoaWNoIHdlIHNob3VsZCBnZXQgcmlkIG9mLgorICAgIGZpeHR1cmUtPm9iaiA9IGF0a19vYmpl
Y3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoZml4dHVyZS0+ZG9jdW1lbnQsIDApOworICAgIGdfYXNz
ZXJ0KGZpeHR1cmUtPm9iaik7CisKKyAgICBsaXN0Ym94T2JqID0gYXRrX29iamVjdF9yZWZfYWNj
ZXNzaWJsZV9jaGlsZChmaXh0dXJlLT5vYmosIDApOworICAgIGdfYXNzZXJ0KGxpc3Rib3hPYmop
OworICAgIGZpeHR1cmUtPnJvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKGxpc3Rib3hPYmopOwor
ICAgIGdfYXNzZXJ0KGZpeHR1cmUtPnJvbGUgPT0gQVRLX1JPTEVfTElTVCk7CisKKyAgICBnZXRf
Y2hpbGRfYW5kX3Rlc3Rfcm9sZShsaXN0Ym94T2JqLCAwLCBBVEtfUk9MRV9MSVNUX0lURU0pOwor
ICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGxpc3Rib3hPYmosIDEsIEFUS19ST0xFX0xJU1Rf
SVRFTSk7CisgICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUobGlzdGJveE9iaiwgMiwgQVRLX1JP
TEVfTElTVF9JVEVNKTsKKworICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9iaik7CisgICAg
Z19vYmplY3RfdW5yZWYobGlzdGJveE9iaik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0
X2F0a19nZXRfcm9sZV9wYXNzd29yZF90ZXh0KEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2Nv
bnN0cG9pbnRlciBkYXRhKQoreworICAgIC8vIFRoaXMgaXMgYW4gZXh0cmFuZW91cyBvYmplY3Qg
b2YgQVRLX1JPTEVfUEFORUwgd2hpY2ggd2Ugc2hvdWxkIGdldCByaWQgb2YuCisgICAgZml4dHVy
ZS0+b2JqID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmaXh0dXJlLT5kb2N1bWVu
dCwgMCk7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+b2JqKTsKKworICAgIGdldF9jaGlsZF9hbmRf
dGVzdF9yb2xlKGZpeHR1cmUtPm9iaiwgMCwgQVRLX1JPTEVfUEFTU1dPUkRfVEVYVCk7CisKKyAg
ICBnX29iamVjdF91bnJlZihmaXh0dXJlLT5vYmopOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dl
YmtpdF9hdGtfZ2V0X3JvbGVfcHVzaF9idXR0b24oQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBn
Y29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgLy8gVGhpcyBpcyBhbiBleHRyYW5lb3VzIG9iamVj
dCBvZiBBVEtfUk9MRV9QQU5FTCB3aGljaCB3ZSBzaG91bGQgZ2V0IHJpZCBvZi4KKyAgICBmaXh0
dXJlLT5vYmogPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZpeHR1cmUtPmRvY3Vt
ZW50LCAwKTsKKyAgICBnX2Fzc2VydChmaXh0dXJlLT5vYmopOworCisgICAgZ2V0X2NoaWxkX2Fu
ZF90ZXN0X3JvbGUoZml4dHVyZS0+b2JqLCAwLCBBVEtfUk9MRV9QVVNIX0JVVFRPTik7CisKKyAg
ICBnX29iamVjdF91bnJlZihmaXh0dXJlLT5vYmopOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dl
YmtpdF9hdGtfZ2V0X3JvbGVfcmFkaW9fYnV0dG9uKEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwg
Z2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIC8vIFRoaXMgaXMgYW4gZXh0cmFuZW91cyBvYmpl
Y3Qgb2YgQVRLX1JPTEVfUEFORUwgd2hpY2ggd2Ugc2hvdWxkIGdldCByaWQgb2YuCisgICAgZml4
dHVyZS0+b2JqID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmaXh0dXJlLT5kb2N1
bWVudCwgMCk7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+b2JqKTsKKworICAgIGdldF9jaGlsZF9h
bmRfdGVzdF9yb2xlKGZpeHR1cmUtPm9iaiwgMCwgQVRLX1JPTEVfUkFESU9fQlVUVE9OKTsKKwor
ICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9iaik7Cit9CisKK2ludCBtYWluKGludCBhcmdj
LCBjaGFyKiogYXJndikKK3sKKyAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7
CisKKyAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOworCisg
ICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9hdGsvdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2RvY3Vt
ZW50X2ZyYW1lIiwKKyAgICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVyZSwgSFRNTF9ET0NVTUVO
VF9GUkFNRSwKKyAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAorICAgICAg
ICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2RvY3VtZW50X2ZyYW1lLAorICAgICAg
ICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfdGVhcmRvd24pOworCisgICAgZ190ZXN0X2FkZCgi
L3dlYmtpdC9hdGsvdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2hlYWRpbmciLAorICAgICAgICAg
ICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX0hFQURJTkcsCisgICAgICAgICAgICAgICBhdGtf
cm9sZXNfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X2F0a19nZXRf
cm9sZV9oZWFkaW5nLAorICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfdGVhcmRvd24p
OworCisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9hdGsvdGVzdF93ZWJraXRfYXRrX2dldF9yb2xl
X2ltYWdlIiwKKyAgICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVyZSwgSFRNTF9JTUFHRSwKKyAg
ICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVz
dF93ZWJraXRfYXRrX2dldF9yb2xlX2ltYWdlLAorICAgICAgICAgICAgICAgYXRrX3JvbGVzX2Zp
eHR1cmVfdGVhcmRvd24pOworCisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9hdGsvdGVzdF93ZWJr
aXRfYXRrX2dldF9yb2xlX2xpbmsiLAorICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBI
VE1MX0xJTktfVEVYVCwKKyAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAor
ICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xpbmssCisgICAgICAgICAg
ICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Vi
a2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfbGlzdF9hbmRfaXRlbSIsCisgICAgICAg
ICAgICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhUTUxfTElTVCwKKyAgICAgICAgICAgICAgIGF0a19y
b2xlc19maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9y
b2xlX2xpc3RfYW5kX2l0ZW0sCisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFy
ZG93bik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0
X3JvbGVfcGFyYWdyYXBoIiwKKyAgICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVyZSwgSFRNTF9Q
QVJBR1JBUEgsCisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV9zZXR1cCwKKyAgICAg
ICAgICAgICAgIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9wYXJhZ3JhcGgsCisgICAgICAgICAg
ICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Vi
a2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfc2VjdGlvbiIsCisgICAgICAgICAgICAg
ICBBdGtSb2xlc0ZpeHR1cmUsIEhUTUxfU0VDVElPTiwKKyAgICAgICAgICAgICAgIGF0a19yb2xl
c19maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xl
X3NlY3Rpb24sCisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7CisK
KyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfdGFi
bGUiLAorICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX1RBQkxFLAorICAgICAg
ICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0X3dl
YmtpdF9hdGtfZ2V0X3JvbGVfdGFibGUsCisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVy
ZV90ZWFyZG93bik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9h
dGtfZ2V0X3JvbGVfc2VwYXJhdG9yIiwKKyAgICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVyZSwg
SFRNTF9TRVBBUkFUT1IsCisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV9zZXR1cCwK
KyAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9zZXBhcmF0b3IsCisgICAg
ICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICBnX3Rlc3RfYWRk
KCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfY29tYm9ib3giLAorICAgICAg
ICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX0NPTUJPQk9YLAorICAgICAgICAgICAgICAg
YXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF9hdGtf
Z2V0X3JvbGVfY29tYm9ib3gsCisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFy
ZG93bik7CisKKyAgICAvKiBGb3JtIHJvbGVzICovCisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9h
dGsvdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2Zvcm0iLAorICAgICAgICAgICAgICAgQXRrUm9s
ZXNGaXh0dXJlLCBIVE1MX0ZPUk0sCisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV9z
ZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9mb3JtLAorICAg
ICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfdGVhcmRvd24pOworICAgIGdfdGVzdF9hZGQo
Ii93ZWJraXQvYXRrL3Rlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9jaGVja19ib3giLAorICAgICAg
ICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX0NIRUNLX0JPWCwKKyAgICAgICAgICAgICAg
IGF0a19yb2xlc19maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRr
X2dldF9yb2xlX2NoZWNrX2JveCwKKyAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3Rl
YXJkb3duKTsKKworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvYXRrL3Rlc3Rfd2Via2l0X2F0a19n
ZXRfcm9sZV9lbnRyeSIsCisgICAgICAgICAgICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhUTUxfTEFC
RUxFRF9FTlRSWSwKKyAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAorICAg
ICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2VudHJ5LAorICAgICAgICAgICAg
ICAgYXRrX3JvbGVzX2ZpeHR1cmVfdGVhcmRvd24pOworCisgICAgZ190ZXN0X2FkZCgiL3dlYmtp
dC9hdGsvdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xhYmVsIiwKKyAgICAgICAgICAgICAgIEF0
a1JvbGVzRml4dHVyZSwgSFRNTF9MQUJFTEVEX0VOVFJZLAorICAgICAgICAgICAgICAgYXRrX3Jv
bGVzX2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3Jv
bGVfbGFiZWwsCisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7CisK
KyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfbGlz
dGJveCIsCisgICAgICAgICAgICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhUTUxfTElTVEJPWCwKKyAg
ICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVz
dF93ZWJraXRfYXRrX2dldF9yb2xlX2xpc3Rib3gsCisgICAgICAgICAgICAgICBhdGtfcm9sZXNf
Zml4dHVyZV90ZWFyZG93bik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dl
YmtpdF9hdGtfZ2V0X3JvbGVfcGFzc3dvcmRfdGV4dCIsCisgICAgICAgICAgICAgICBBdGtSb2xl
c0ZpeHR1cmUsIEhUTUxfUEFTU1dPUkRfVEVYVCwKKyAgICAgICAgICAgICAgIGF0a19yb2xlc19m
aXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX3Bh
c3N3b3JkX3RleHQsCisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7
CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVf
cHVzaF9idXR0b24iLAorICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX1BVU0hf
QlVUVE9OLAorICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAsCisgICAgICAg
ICAgICAgICB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfcHVzaF9idXR0b24sCisgICAgICAgICAg
ICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Vi
a2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfcmFkaW9fYnV0dG9uIiwKKyAgICAgICAg
ICAgICAgIEF0a1JvbGVzRml4dHVyZSwgSFRNTF9SQURJT19CVVRUT04sCisgICAgICAgICAgICAg
ICBhdGtfcm9sZXNfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X2F0
a19nZXRfcm9sZV9yYWRpb19idXR0b24sCisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVy
ZV90ZWFyZG93bik7CisKKyAgICByZXR1cm4gZ190ZXN0X3J1bigpOworfQpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGNvbnRleHRtZW51LmMgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0Y29udGV4dG1lbnUuYwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGFhYTU3Ci0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGNvbnRleHRtZW51LmMK
QEAgLTAsMCArMSwzMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+CisKK3R5cGVk
ZWYgc3RydWN0IHsKKyAgICBjaGFyICpkYXRhOworICAgIGd1aW50IGZsYWc7Cit9IFRlc3RJbmZv
OworCitzdGF0aWMgR01haW5Mb29wICpsb29wOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgV2Vi
S2l0V2ViVmlldyAqd2ViVmlldzsKKyAgICBUZXN0SW5mbyAqaW5mbzsKK30gQ29udGV4dE1lbnVG
aXh0dXJlOworCitzdGF0aWMgVGVzdEluZm8gKnRlc3RJbmZvTmV3KGNvbnN0IGNoYXIgKmRhdGEs
IGd1aW50IGZsYWcpCit7CisgICAgVGVzdEluZm8gKmluZm8gPSBnX3NsaWNlX25ldyhUZXN0SW5m
byk7CisgICAgaW5mby0+ZGF0YSA9IGdfc3RyZHVwKGRhdGEpOworICAgIGluZm8tPmZsYWcgPSBm
bGFnOworCisgICAgcmV0dXJuIGluZm87Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RJbmZvRGVzdHJv
eShUZXN0SW5mbyAqaW5mbykKK3sKKyAgICBnX2ZyZWUoaW5mby0+ZGF0YSk7CisgICAgZ19zbGlj
ZV9mcmVlKFRlc3RJbmZvLCBpbmZvKTsKK30KKworc3RhdGljIHZvaWQgY29udGV4dE1lbnVGaXh0
dXJlU2V0dXAoQ29udGV4dE1lbnVGaXh0dXJlICpmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEp
Cit7CisgICAgZml4dHVyZS0+d2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3Zp
ZXdfbmV3KCkpOworICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisgICAg
Zml4dHVyZS0+aW5mbyA9IChUZXN0SW5mbyAqKWRhdGE7Cit9CisKK3N0YXRpYyB2b2lkIGNvbnRl
eHRNZW51Rml4dHVyZVRlYXJkb3duKENvbnRleHRNZW51Rml4dHVyZSAqZml4dHVyZSwgZ2NvbnN0
cG9pbnRlciBkYXRhKQoreworICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPndlYlZpZXcpOwor
ICAgIGdfbWFpbl9sb29wX3VucmVmKGxvb3ApOworICAgIHRlc3RJbmZvRGVzdHJveShmaXh0dXJl
LT5pbmZvKTsKK30KKworc3RhdGljIEdMaXN0ICpjaGVja0FjdGlvbihHTGlzdCAqaXRlciwgV2Vi
S2l0Q29udGV4dE1lbnVBY3Rpb24gYWN0aW9uKQoreworICAgIEd0a01lbnVJdGVtICppdGVtID0g
KEd0a01lbnVJdGVtICopaXRlci0+ZGF0YTsKKworICAgIGdfYXNzZXJ0KEdUS19JU19NRU5VX0lU
RU0oaXRlbSkpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRfYWN0
aW9uKGl0ZW0pID09IGFjdGlvbik7CisKKyAgICByZXR1cm4gaXRlci0+bmV4dDsKK30KKworc3Rh
dGljIEdMaXN0ICpjaGVja0FjdGlvbldpdGhTdWJtZW51KEdMaXN0ICppdGVyLCBXZWJLaXRDb250
ZXh0TWVudUFjdGlvbiBhY3Rpb24pCit7CisgICAgR3RrTWVudUl0ZW0gKml0ZW0gPSAoR3RrTWVu
dUl0ZW0gKilpdGVyLT5kYXRhOworCisgICAgZ19hc3NlcnQoR1RLX0lTX01FTlVfSVRFTShpdGVt
KSk7CisgICAgZ19hc3NlcnQod2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9hY3Rpb24oaXRl
bSkgPT0gYWN0aW9uKTsKKyAgICBnX2Fzc2VydChHVEtfSVNfTUVOVShndGtfbWVudV9pdGVtX2dl
dF9zdWJtZW51KGl0ZW0pKSk7CisKKyAgICByZXR1cm4gaXRlci0+bmV4dDsKK30KKworc3RhdGlj
IEdMaXN0ICpjaGVja1NlcGFyYXRvcihHTGlzdCAqaXRlcikKK3sKKyAgICBHdGtNZW51SXRlbSAq
aXRlbSA9IChHdGtNZW51SXRlbSAqKWl0ZXItPmRhdGE7CisKKyAgICBnX2Fzc2VydChHVEtfSVNf
U0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSk7CisKKyAgICByZXR1cm4gaXRlci0+bmV4dDsKK30K
Kworc3RhdGljIGdib29sZWFuIGNvbnRleHRNZW51Q2FsbGJhY2soV2ViS2l0V2ViVmlldyAqd2Vi
VmlldywgR3RrV2lkZ2V0ICpkZWZhdWx0TWVudSwgV2ViS2l0SGl0VGVzdFJlc3VsdCAqaGl0VGVz
dFJlc3VsdCwgZ2Jvb2xlYW4ga2V5Ym9hcmRNb2RlLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAg
ICBUZXN0SW5mbyAqaW5mbyA9IChUZXN0SW5mbyAqKXVzZXJEYXRhOworICAgIGd1aW50IGNvbnRl
eHQ7CisgICAgR0xpc3QgKml0ZW1zOworICAgIEdMaXN0ICppdGVyOworCisgICAgLyogQ2hlY2sg
c2lnbmFsIHBhcmFtZXRlcnMgKi8KKyAgICBnX2Fzc2VydChXRUJLSVRfSVNfV0VCX1ZJRVcod2Vi
VmlldykpOworICAgIGdfYXNzZXJ0KEdUS19JU19NRU5VKGRlZmF1bHRNZW51KSk7CisgICAgZ19h
c3NlcnQoV0VCS0lUX0lTX0hJVF9URVNUX1JFU1VMVChoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19h
c3NlcnQoIWtleWJvYXJkTW9kZSk7CisKKyAgICBnX29iamVjdF9nZXQoaGl0VGVzdFJlc3VsdCwg
ImNvbnRleHQiLCAmY29udGV4dCwgTlVMTCk7CisgICAgZ19hc3NlcnQoY29udGV4dCAmIGluZm8t
PmZsYWcpOworCisgICAgaXRlbXMgPSBndGtfY29udGFpbmVyX2dldF9jaGlsZHJlbihHVEtfQ09O
VEFJTkVSKGRlZmF1bHRNZW51KSk7CisgICAgc3dpdGNoIChpbmZvLT5mbGFnKSB7CisgICAgY2Fz
ZSBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfRE9DVU1FTlQ6CisgICAgICAgIGl0ZXIg
PSBpdGVtczsKKyAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhU
X01FTlVfQUNUSU9OX0dPX0JBQ0spOworICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwg
V0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fR09fRk9SV0FSRCk7CisgICAgICAgIGl0ZXIgPSBj
aGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9TVE9QKTsKKyAgICAg
ICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1JF
TE9BRCk7CisgICAgICAgIGdfYXNzZXJ0KCFpdGVyKTsKKworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9JTUFHRToKKyAgICAgICAgaXRlciA9
IGl0ZW1zOworICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRf
TUVOVV9BQ1RJT05fT1BFTl9JTUFHRV9JTl9ORVdfV0lORE9XKTsKKyAgICAgICAgaXRlciA9IGNo
ZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0RPV05MT0FEX0lNQUdF
X1RPX0RJU0spOworICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fQ09QWV9JTUFHRV9UT19DTElQQk9BUkQpOworICAgICAgICBpdGVyID0g
Y2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9JTUFHRV9V
UkxfVE9fQ0xJUEJPQVJEKTsKKyAgICAgICAgZ19hc3NlcnQoIWl0ZXIpOworCisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0VESVRBQkxFOgor
ICAgICAgICBpdGVyID0gaXRlbXM7CisgICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DVVQpOworICAgICAgICBpdGVyID0gY2hlY2tBY3Rp
b24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWSk7CisgICAgICAgIGl0ZXIg
PSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9QQVNURSk7Cisg
ICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
Tl9ERUxFVEUpOworICAgICAgICBpdGVyID0gY2hlY2tTZXBhcmF0b3IoaXRlcik7CisgICAgICAg
IGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9TRUxF
Q1RfQUxMKTsKKyAgICAgICAgaXRlciA9IGNoZWNrU2VwYXJhdG9yKGl0ZXIpOworICAgICAgICBp
dGVyID0gY2hlY2tBY3Rpb25XaXRoU3VibWVudShpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FD
VElPTl9JTlBVVF9NRVRIT0RTKTsKKyAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uV2l0aFN1Ym1l
bnUoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fVU5JQ09ERSk7CisgICAgICAgIGdf
YXNzZXJ0KCFpdGVyKTsKKworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9ISVRfVEVT
VF9SRVNVTFRfQ09OVEVYVF9MSU5LOgorICAgICAgICBpdGVyID0gaXRlbXM7CisgICAgICAgIGl0
ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0xJ
TkspOworICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVO
VV9BQ1RJT05fT1BFTl9MSU5LX0lOX05FV19XSU5ET1cpOworICAgICAgICBpdGVyID0gY2hlY2tB
Y3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRE9XTkxPQURfTElOS19UT19E
SVNLKTsKKyAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01F
TlVfQUNUSU9OX0NPUFlfTElOS19UT19DTElQQk9BUkQpOworICAgICAgICBnX2Fzc2VydCghaXRl
cik7CisKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgZ19hc3NlcnRfbm90
X3JlYWNoZWQoKTsKKyAgICB9CisKKyAgICBnX2xpc3RfZnJlZShpdGVtcyk7CisgICAgZ19tYWlu
X2xvb3BfcXVpdChsb29wKTsKKworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZCBw
dXNoRXZlbnQoV2ViS2l0V2ViVmlldyAqd2ViVmlldykKK3sKKyAgICBHZGtFdmVudCAqZXZlbnQg
PSBnZGtfZXZlbnRfbmV3KEdES19CVVRUT05fUFJFU1MpOworI2lmIEdUS19DSEVDS19WRVJTSU9O
KDMsIDAsIDApCisgICAgR2RrRGV2aWNlTWFuYWdlciAqZGV2aWNlTWFuYWdlcjsKKyNlbmRpZgor
CisgICAgZXZlbnQtPmFueS53aW5kb3cgPSBnX29iamVjdF9yZWYoZ3RrX3dpZGdldF9nZXRfd2lu
ZG93KEdUS19XSURHRVQod2ViVmlldykpKTsKKyAgICBldmVudC0+YW55LnNlbmRfZXZlbnQgPSBG
QUxTRTsKKyAgICBldmVudC0+YnV0dG9uLnRpbWUgPSBHREtfQ1VSUkVOVF9USU1FOworICAgIGV2
ZW50LT5idXR0b24uYnV0dG9uID0gMzsKKyAgICBldmVudC0+YnV0dG9uLnggPSBldmVudC0+YnV0
dG9uLnkgPSA1OworICAgIGV2ZW50LT5idXR0b24ueF9yb290ID0gZXZlbnQtPmJ1dHRvbi54Owor
ICAgIGV2ZW50LT5idXR0b24ueV9yb290ID0gZXZlbnQtPmJ1dHRvbi55OworI2lmIEdUS19DSEVD
S19WRVJTSU9OKDMsIDAsIDApCisgICAgZGV2aWNlTWFuYWdlciA9IGdka19kaXNwbGF5X2dldF9k
ZXZpY2VfbWFuYWdlcihnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsKKyAgICBldmVudC0+YnV0
dG9uLmRldmljZSA9IGdka19kZXZpY2VfbWFuYWdlcl9nZXRfY2xpZW50X3BvaW50ZXIoZGV2aWNl
TWFuYWdlcik7CisjZW5kaWYKKworICAgIGdka19ldmVudF9wdXQoZXZlbnQpOworICAgIGdka19l
dmVudF9mcmVlKGV2ZW50KTsKK30KKworc3RhdGljIHZvaWQgbG9hZFN0YXR1c0NhbGxiYWNrKFdl
YktpdFdlYlZpZXcgKndlYlZpZXcsIEdQYXJhbVNwZWMgKnNwZWMsIGdwb2ludGVyIGRhdGEpCit7
CisgICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRf
c3RhdHVzKHdlYlZpZXcpOworICAgIFRlc3RJbmZvICppbmZvID0gKFRlc3RJbmZvICopZGF0YTsK
KworICAgIGdfYXNzZXJ0KHN0YXR1cyAhPSBXRUJLSVRfTE9BRF9GQUlMRUQpOworCisgICAgaWYg
KHN0YXR1cyAhPSBXRUJLSVRfTE9BRF9GSU5JU0hFRCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Z19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAiY29udGV4dC1tZW51IiwgR19DQUxMQkFDSyhjb250
ZXh0TWVudUNhbGxiYWNrKSwgaW5mbyk7CisgICAgcHVzaEV2ZW50KHdlYlZpZXcpOworfQorCitz
dGF0aWMgZ2Jvb2xlYW4gbWFwRXZlbnRDYWxsYmFjayhHdGtXaWRnZXQgKndpZGdldCwgR2RrRXZl
bnQgKmV2ZW50LCBncG9pbnRlciBkYXRhKQoreworICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1cyh3
aWRnZXQpOworICAgIENvbnRleHRNZW51Rml4dHVyZSAqZml4dHVyZSA9IChDb250ZXh0TWVudUZp
eHR1cmUgKilkYXRhOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhmaXh0dXJlLT53
ZWJWaWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXh0dXJlLT5pbmZvLT5k
YXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGV4dC9odG1sIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgInV0Zi04IiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgImZpbGU6Ly8iKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndl
YlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhsb2FkU3RhdHVzQ2FsbGJh
Y2spLCBmaXh0dXJlLT5pbmZvKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lk
IHRlc3RDb250ZXh0TWVudShDb250ZXh0TWVudUZpeHR1cmUgKmZpeHR1cmUsIGdjb25zdHBvaW50
ZXIgZGF0YSkKK3sKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDUwLCA1
MCB9OworICAgIEd0a1dpZGdldCAqd2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19Q
T1BVUCk7CisKKyAgICBndGtfd2luZG93X3Jlc2l6ZShHVEtfV0lORE9XKHdpbmRvdyksIDUwLCA1
MCk7CisgICAgZ3RrX3dpbmRvd19tb3ZlKEdUS19XSU5ET1cod2luZG93KSwgMCwgMCk7CisgICAg
Z3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldyksICZh
bGxvY2F0aW9uKTsKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyks
IEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldykpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2lu
ZG93LCAibWFwLWV2ZW50IiwgR19DQUxMQkFDSyhtYXBFdmVudENhbGxiYWNrKSwgZml4dHVyZSk7
CisgICAgZ3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpOworCisgICAgZ19tYWluX2xvb3BfcnVu
KGxvb3ApOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gY29udGV4dE1lbnVDdXN0b21JdGVtQ2FsbGJh
Y2soV2ViS2l0V2ViVmlldyAqd2ViVmlldywgR3RrV2lkZ2V0ICpkZWZhdWx0TWVudSwgV2ViS2l0
SGl0VGVzdFJlc3VsdCAqaGl0VGVzdFJlc3VsdCwgZ2Jvb2xlYW4ga2V5Ym9hcmRNb2RlLCBncG9p
bnRlciB1c2VyRGF0YSkKK3sKKyAgICBUZXN0SW5mbyAqaW5mbyA9IChUZXN0SW5mbyAqKXVzZXJE
YXRhOworICAgIGd1aW50IGNvbnRleHQ7CisgICAgR0xpc3QgKml0ZW1zOworICAgIEdMaXN0ICpp
dGVyOworICAgIEd0a1dpZGdldCAqbWVudUl0ZW07CisgICAgR3RrQWN0aW9uICphY3Rpb247CisK
KyAgICAvKiBDaGVjayBzaWduYWwgcGFyYW1ldGVycyAqLworICAgIGdfYXNzZXJ0KFdFQktJVF9J
U19XRUJfVklFVyh3ZWJWaWV3KSk7CisgICAgZ19hc3NlcnQoR1RLX0lTX01FTlUoZGVmYXVsdE1l
bnUpKTsKKyAgICBnX2Fzc2VydChXRUJLSVRfSVNfSElUX1RFU1RfUkVTVUxUKGhpdFRlc3RSZXN1
bHQpKTsKKyAgICBnX2Fzc2VydCgha2V5Ym9hcmRNb2RlKTsKKworICAgIGdfb2JqZWN0X2dldCho
aXRUZXN0UmVzdWx0LCAiY29udGV4dCIsICZjb250ZXh0LCBOVUxMKTsKKyAgICBnX2Fzc2VydChj
b250ZXh0ICYgaW5mby0+ZmxhZyk7CisKKyAgICBhY3Rpb24gPSBndGtfYWN0aW9uX25ldygiVGVz
dEFjdGlvbiIsICJDdXN0b20gQWN0aW9uIiwgIkN1c3RvbSBBY3Rpb24gVG9vbHRpcCIsIE5VTEwp
OworICAgIG1lbnVJdGVtID0gZ3RrX2FjdGlvbl9jcmVhdGVfbWVudV9pdGVtKGFjdGlvbik7Cisg
ICAgZ19vYmplY3RfdW5yZWYoYWN0aW9uKTsKKworICAgIGd0a19tZW51X3NoZWxsX2FwcGVuZChH
VEtfTUVOVV9TSEVMTChkZWZhdWx0TWVudSksIG1lbnVJdGVtKTsKKyAgICBndGtfd2lkZ2V0X3No
b3cobWVudUl0ZW0pOworCisgICAgaXRlbXMgPSBndGtfY29udGFpbmVyX2dldF9jaGlsZHJlbihH
VEtfQ09OVEFJTkVSKGRlZmF1bHRNZW51KSk7CisgICAgaXRlciA9IGl0ZW1zOworICAgIGl0ZXIg
PSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9HT19CQUNLKTsK
KyAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05f
R09fRk9SV0FSRCk7CisgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhU
X01FTlVfQUNUSU9OX1NUT1ApOworICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRf
Q09OVEVYVF9NRU5VX0FDVElPTl9SRUxPQUQpOworICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVy
LCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9OT19BQ1RJT04pOworICAgIGdfYXNzZXJ0KCFp
dGVyKTsKKworICAgIGdfbGlzdF9mcmVlKGl0ZW1zKTsKKyAgICBnX21haW5fbG9vcF9xdWl0KGxv
b3ApOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RDb250ZXh0TWVu
dUN1c3RvbUl0ZW0oQ29udGV4dE1lbnVGaXh0dXJlICpmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRh
dGEpCit7CisgICAgR3RrV2lkZ2V0ICp3aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9X
X1BPUFVQKTsKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIEdU
S19XSURHRVQoZml4dHVyZS0+d2ViVmlldykpOworICAgIGd0a193aWRnZXRfc2hvd19hbGwod2lu
ZG93KTsKKyAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMoR1RLX1dJREdFVChmaXh0dXJlLT53ZWJW
aWV3KSk7CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoZml4dHVyZS0+d2ViVmll
dywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4dHVyZS0+aW5mby0+ZGF0YSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRleHQvaHRtbCIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJ1dGYtOCIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJmaWxlOi8vIik7CisgICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53ZWJWaWV3
LCAiY29udGV4dC1tZW51IiwgR19DQUxMQkFDSyhjb250ZXh0TWVudUN1c3RvbUl0ZW1DYWxsYmFj
ayksIGZpeHR1cmUtPmluZm8pOworICAgIHB1c2hFdmVudChmaXh0dXJlLT53ZWJWaWV3KTsKK30K
KworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIGd0a190ZXN0X2luaXQo
JmFyZ2MsICZhcmd2LCBOVUxMKTsKKworICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvIik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L3Rlc3Rjb250ZXh0bWVu
dS9kb2N1bWVudCIsIENvbnRleHRNZW51Rml4dHVyZSwKKyAgICAgICAgICAgICAgIHRlc3RJbmZv
TmV3KCI8aHRtbD48Ym9keT48aDE+V2ViS2l0R1RLKyE8L2gxPjwvYm9keT48L2h0bWw+IiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9E
T0NVTUVOVCksCisgICAgICAgICAgICAgICBjb250ZXh0TWVudUZpeHR1cmVTZXR1cCwgdGVzdENv
bnRleHRNZW51LCBjb250ZXh0TWVudUZpeHR1cmVUZWFyZG93bik7CisgICAgLyogV2UgaGFyZGNv
ZGUgYWxsIGVsZW1lbnRzIHRvIGJlIGF0IDAsMCBzbyB0aGF0IHdlIGtub3cgd2hlcmUgdG8gZ2Vu
ZXJhdGUgdGhlIGJ1dHRvbiBldmVudHMgKi8KKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L3Rlc3Rj
b250ZXh0bWVudS9pbWFnZSIsIENvbnRleHRNZW51Rml4dHVyZSwKKyAgICAgICAgICAgICAgIHRl
c3RJbmZvTmV3KCI8aHRtbD48Ym9keT48aW1nIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVm
dDowOyB0b3A6MCcgc3JjPScweGRlYWRiZWVmJyB3aWR0aD01MCBoZWlnaHQ9NTA+PC9pbWc+PC9i
b2R5PjwvaHRtbD4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX0hJVF9URVNU
X1JFU1VMVF9DT05URVhUX0lNQUdFKSwKKyAgICAgICAgICAgICAgIGNvbnRleHRNZW51Rml4dHVy
ZVNldHVwLCB0ZXN0Q29udGV4dE1lbnUsIGNvbnRleHRNZW51Rml4dHVyZVRlYXJkb3duKTsKKyAg
ICBnX3Rlc3RfYWRkKCIvd2Via2l0L3Rlc3Rjb250ZXh0bWVudS9lZGl0YWJsZSIsIENvbnRleHRN
ZW51Rml4dHVyZSwKKyAgICAgICAgICAgICAgIHRlc3RJbmZvTmV3KCI8aHRtbD48Ym9keT48aW5w
dXQgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjA7IHRvcDowJyBzaXplPSczNSc+PC9p
bnB1dD4+PC9ib2R5PjwvaHRtbD4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lU
X0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0VESVRBQkxFKSwKKyAgICAgICAgICAgICAgIGNvbnRl
eHRNZW51Rml4dHVyZVNldHVwLCB0ZXN0Q29udGV4dE1lbnUsIGNvbnRleHRNZW51Rml4dHVyZVRl
YXJkb3duKTsKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L3Rlc3Rjb250ZXh0bWVudS9saW5rIiwg
Q29udGV4dE1lbnVGaXh0dXJlLAorICAgICAgICAgICAgICAgdGVzdEluZm9OZXcoIjxodG1sPjxi
b2R5PjxhIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDowOyB0b3A6MCcgaHJlZj0naHR0
cDovL3d3dy5leGFtcGxlLmNvbSc+SEVMTE8gV09STEQ8L2E+PC9ib2R5PjwvaHRtbD4iLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0xJ
TkspLAorICAgICAgICAgICAgICAgY29udGV4dE1lbnVGaXh0dXJlU2V0dXAsIHRlc3RDb250ZXh0
TWVudSwgY29udGV4dE1lbnVGaXh0dXJlVGVhcmRvd24pOworICAgIGdfdGVzdF9hZGQoIi93ZWJr
aXQvdGVzdGNvbnRleHRtZW51L2N1c3RvbWl0ZW0iLCBDb250ZXh0TWVudUZpeHR1cmUsCisgICAg
ICAgICAgICAgICB0ZXN0SW5mb05ldygiPGh0bWw+PGJvZHk+PGgxPldlYktpdEdUSyshPC9oMT48
L2JvZHk+PC9odG1sPiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfSElUX1RF
U1RfUkVTVUxUX0NPTlRFWFRfRE9DVU1FTlQpLAorICAgICAgICAgICAgICAgY29udGV4dE1lbnVG
aXh0dXJlU2V0dXAsIHRlc3RDb250ZXh0TWVudUN1c3RvbUl0ZW0sIGNvbnRleHRNZW51Rml4dHVy
ZVRlYXJkb3duKTsKKworICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7Cit9CisKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3Rjb3B5YW5kcGFzdGUuYyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3Rjb3B5YW5kcGFzdGUuYwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjM4ZWE2Ci0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGNvcHlhbmRwYXN0
ZS5jCkBAIC0wLDAgKzEsMjY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBT
LkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx1
bmlzdGQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgor
I2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0
cmluZ1JlZi5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dFJlZi5oPgorCit0
eXBlZGVmIHN0cnVjdCB7CisgICAgY2hhciogcGFnZTsKKyAgICBjaGFyKiBleHBlY3RlZENvbnRl
bnQ7Cit9IFRlc3RJbmZvOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgR3RrV2lkZ2V0KiB3aW5k
b3c7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldzsKKyAgICBHTWFpbkxvb3AqIGxvb3A7Cisg
ICAgVGVzdEluZm8qIGluZm87Cit9IENvcHlBbmRQYXN0ZUZpeHR1cmU7CisKK1Rlc3RJbmZvKgor
dGVzdF9pbmZvX25ldyhjb25zdCBjaGFyKiBwYWdlLCBjb25zdCBjaGFyKiBleHBlY3RlZENvbnRl
bnQpCit7CisgICAgVGVzdEluZm8qIGluZm87CisgICAgaW5mbyA9IGdfc2xpY2VfbmV3MChUZXN0
SW5mbyk7CisgICAgaW5mby0+cGFnZSA9IGdfc3RyZHVwKHBhZ2UpOworICAgIGlmIChleHBlY3Rl
ZENvbnRlbnQpCisgICAgICAgIGluZm8tPmV4cGVjdGVkQ29udGVudCA9IGdfc3RyZHVwKGV4cGVj
dGVkQ29udGVudCk7CisgICAgcmV0dXJuIGluZm87Cit9CisKK3ZvaWQKK3Rlc3RfaW5mb19kZXN0
cm95KFRlc3RJbmZvKiBpbmZvKQoreworICAgIGdfZnJlZShpbmZvLT5wYWdlKTsKKyAgICBnX2Zy
ZWUoaW5mby0+ZXhwZWN0ZWRDb250ZW50KTsKKyAgICBnX3NsaWNlX2ZyZWUoVGVzdEluZm8sIGlu
Zm8pOworfQorCitzdGF0aWMgdm9pZCBjb3B5X2FuZF9wYXN0ZV9maXh0dXJlX3NldHVwKENvcHlB
bmRQYXN0ZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBmaXh0
dXJlLT5sb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworCisgICAgZml4dHVyZS0+
d2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7CisgICAgZml4dHVy
ZS0+d2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworCisg
ICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihmaXh0dXJlLT53aW5kb3cpLCBHVEtf
V0lER0VUKGZpeHR1cmUtPndlYlZpZXcpKTsKK30KKworc3RhdGljIHZvaWQgY29weV9hbmRfcGFz
dGVfZml4dHVyZV90ZWFyZG93bihDb3B5QW5kUGFzdGVGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rw
b2ludGVyIGRhdGEpCit7CisgICAgZ3RrX3dpZGdldF9kZXN0cm95KGZpeHR1cmUtPndpbmRvdyk7
CisgICAgZ19tYWluX2xvb3BfdW5yZWYoZml4dHVyZS0+bG9vcCk7CisgICAgdGVzdF9pbmZvX2Rl
c3Ryb3koZml4dHVyZS0+aW5mbyk7Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRfc3RhdHVzX2NiKFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcsIEdQYXJhbVNwZWMqIHNwZWMsIGdwb2ludGVyIGRhdGEpCit7
CisgICAgQ29weUFuZFBhc3RlRml4dHVyZSogZml4dHVyZSA9IChDb3B5QW5kUGFzdGVGaXh0dXJl
KilkYXRhOworICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dl
dF9sb2FkX3N0YXR1cyh3ZWJWaWV3KTsKKyAgICBpZiAoc3RhdHVzICE9IFdFQktJVF9MT0FEX0ZJ
TklTSEVEKQorICAgICAgICByZXR1cm47CisKKyAgICBHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCA9
IGd0a19jbGlwYm9hcmRfZ2V0KEdES19TRUxFQ1RJT05fQ0xJUEJPQVJEKTsKKyAgICBndGtfY2xp
cGJvYXJkX2NsZWFyKGNsaXBib2FyZCk7CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfY29weV9jbGlw
Ym9hcmQod2ViVmlldyk7CisKKyAgICBnY2hhciogdGV4dCA9IGd0a19jbGlwYm9hcmRfd2FpdF9m
b3JfdGV4dChjbGlwYm9hcmQpOworICAgIGdfYXNzZXJ0KHRleHQgfHwgIWZpeHR1cmUtPmluZm8t
PmV4cGVjdGVkQ29udGVudCk7CisgICAgZ19hc3NlcnQoIXRleHQgfHwgIXN0cmNtcCh0ZXh0LCBm
aXh0dXJlLT5pbmZvLT5leHBlY3RlZENvbnRlbnQpKTsKKyAgICBnX2ZyZWUodGV4dCk7CisKKyAg
ICAvLyBWZXJpZnkgdGhhdCB0aGUgbWFya3VwIHN0YXJ0cyB3aXRoIHRoZSBwcm9wZXIgY29udGVu
dC10eXBlIG1ldGEgdGFnIHByZWZpeC4KKyAgICBHdGtTZWxlY3Rpb25EYXRhKiBzZWxlY3Rpb25E
YXRhID0gZ3RrX2NsaXBib2FyZF93YWl0X2Zvcl9jb250ZW50cyhjbGlwYm9hcmQsIGdka19hdG9t
X2ludGVybigidGV4dC9odG1sIiwgRkFMU0UpKTsKKyAgICBpZiAoc2VsZWN0aW9uRGF0YSkgewor
ICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogbWFya3VwUHJlZml4ID0gIjxtZXRhIGh0dHAtZXF1
aXY9XCJjb250ZW50LXR5cGVcIiBjb250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04XCI+
IjsKKyAgICAgICAgY2hhciogbWFya3VwID0gZ19zdHJuZHVwKChjb25zdCBjaGFyKikgZ3RrX3Nl
bGVjdGlvbl9kYXRhX2dldF9kYXRhKHNlbGVjdGlvbkRhdGEpLAorICAgICAgICAgICAgZ3RrX3Nl
bGVjdGlvbl9kYXRhX2dldF9sZW5ndGgoc2VsZWN0aW9uRGF0YSkpOworICAgICAgICBnX2Fzc2Vy
dChzdHJsZW4obWFya3VwUHJlZml4KSA8PSBzdHJsZW4obWFya3VwKSk7CisgICAgICAgIGdfYXNz
ZXJ0KCFzdHJuY21wKG1hcmt1cFByZWZpeCwgbWFya3VwLCBzdHJsZW4obWFya3VwUHJlZml4KSkp
OworICAgICAgICBnX2ZyZWUobWFya3VwKTsKKyAgICB9CisKKyAgICBnX2Fzc2VydCghZ3RrX2Ns
aXBib2FyZF93YWl0X2lzX3VyaXNfYXZhaWxhYmxlKGNsaXBib2FyZCkpOworICAgIGdfYXNzZXJ0
KCFndGtfY2xpcGJvYXJkX3dhaXRfaXNfaW1hZ2VfYXZhaWxhYmxlKGNsaXBib2FyZCkpOworCisg
ICAgZ19tYWluX2xvb3BfcXVpdChmaXh0dXJlLT5sb29wKTsKK30KKworZ2Jvb2xlYW4gbWFwX2V2
ZW50X2NiKEd0a1dpZGdldCAqd2lkZ2V0LCBHZGtFdmVudCogZXZlbnQsIGdwb2ludGVyIGRhdGEp
Cit7CisgICAgQ29weUFuZFBhc3RlRml4dHVyZSogZml4dHVyZSA9IChDb3B5QW5kUGFzdGVGaXh0
dXJlKilkYXRhOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhmaXh0dXJlLT53ZWJW
aWV3LCBmaXh0dXJlLT5pbmZvLT5wYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAidGV4dC9odG1sIiwgInV0Zi04IiwgImZpbGU6Ly8iKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9
CisKK3N0YXRpYyB2b2lkIHRlc3RfY29weV9hbmRfcGFzdGUoQ29weUFuZFBhc3RlRml4dHVyZSog
Zml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGZpeHR1cmUtPmluZm8gPSAoVGVz
dEluZm8qKWRhdGE7CisgICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53aW5kb3csICJtYXAt
ZXZlbnQiLAorICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhtYXBfZXZlbnRfY2IpLCBm
aXh0dXJlKTsKKworICAgIGd0a193aWRnZXRfc2hvdyhmaXh0dXJlLT53aW5kb3cpOworICAgIGd0
a193aWRnZXRfc2hvdyhHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpKTsKKyAgICBndGtfd2lu
ZG93X3ByZXNlbnQoR1RLX1dJTkRPVyhmaXh0dXJlLT53aW5kb3cpKTsKKyAgICBndGtfd2lkZ2V0
X2dyYWJfZm9jdXMoR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSk7CisKKyAgICBnX3NpZ25h
bF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwKKyAgICAg
ICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sobG9hZF9zdGF0dXNfY2IpLCBmaXh0dXJlKTsKKwor
ICAgIGdfbWFpbl9sb29wX3J1bihmaXh0dXJlLT5sb29wKTsKK30KKworc3RhdGljIENvcHlBbmRQ
YXN0ZUZpeHR1cmUqIGN1cnJlbnRGaXh0dXJlOworc3RhdGljIEpTVmFsdWVSZWYgcnVuUGFzdGVU
ZXN0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGd0a193aWRn
ZXRfZ3JhYl9mb2N1cyhHVEtfV0lER0VUKGN1cnJlbnRGaXh0dXJlLT53ZWJWaWV3KSk7CisKKyAg
ICAvLyBTaW11bGF0ZSBhIHBhc3RlIGtleWJvYXJkIHNlcXVlbmNlLgorICAgIEdka0V2ZW50KiBl
dmVudCA9IGdka19ldmVudF9uZXcoR0RLX0tFWV9QUkVTUyk7CisgICAgZXZlbnQtPmtleS5rZXl2
YWwgPSBnZGtfdW5pY29kZV90b19rZXl2YWwoJ3YnKTsKKyAgICBldmVudC0+a2V5LnN0YXRlID0g
R0RLX0NPTlRST0xfTUFTSzsKKyAgICBldmVudC0+a2V5LndpbmRvdyA9IGd0a193aWRnZXRfZ2V0
X3dpbmRvdyhHVEtfV0lER0VUKGN1cnJlbnRGaXh0dXJlLT53ZWJWaWV3KSk7CisgICAgZ19vYmpl
Y3RfcmVmKGV2ZW50LT5rZXkud2luZG93KTsKKyNpZm5kZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAg
ICBHZGtEZXZpY2VNYW5hZ2VyKiBtYW5hZ2VyID0gIGdka19kaXNwbGF5X2dldF9kZXZpY2VfbWFu
YWdlcihnZGtfd2luZG93X2dldF9kaXNwbGF5KGV2ZW50LT5rZXkud2luZG93KSk7CisgICAgZ2Rr
X2V2ZW50X3NldF9kZXZpY2UoZXZlbnQsIGdka19kZXZpY2VfbWFuYWdlcl9nZXRfY2xpZW50X3Bv
aW50ZXIobWFuYWdlcikpOworI2VuZGlmCisKKyAgICBHZGtLZXltYXBLZXkqIGtleXM7CisgICAg
Z2ludCBuX2tleXM7CisgICAgaWYgKGdka19rZXltYXBfZ2V0X2VudHJpZXNfZm9yX2tleXZhbChn
ZGtfa2V5bWFwX2dldF9kZWZhdWx0KCksIGV2ZW50LT5rZXkua2V5dmFsLCAma2V5cywgJm5fa2V5
cykpIHsKKyAgICAgICAgZXZlbnQtPmtleS5oYXJkd2FyZV9rZXljb2RlID0ga2V5c1swXS5rZXlj
b2RlOworICAgICAgICBnX2ZyZWUoa2V5cyk7CisgICAgfQorCisgICAgZ3RrX21haW5fZG9fZXZl
bnQoZXZlbnQpOworICAgIGV2ZW50LT5rZXkudHlwZSA9IEdES19LRVlfUkVMRUFTRTsKKyAgICBn
dGtfbWFpbl9kb19ldmVudChldmVudCk7CisgICAgZ2RrX2V2ZW50X2ZyZWUoZXZlbnQpOworCisg
ICAgSlNTdHJpbmdSZWYgc2NyaXB0U3RyaW5nID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoImRvY3VtZW50LmJvZHkuaW5uZXJIVE1MOyIpOworICAgIEpTVmFsdWVSZWYgdmFsdWUgPSBK
U0V2YWx1YXRlU2NyaXB0KGNvbnRleHQsIHNjcmlwdFN0cmluZywgMCwgMCwgMCwgMCk7CisgICAg
SlNTdHJpbmdSZWxlYXNlKHNjcmlwdFN0cmluZyk7CisKKyAgICBnX2Fzc2VydChKU1ZhbHVlSXNT
dHJpbmcoY29udGV4dCwgdmFsdWUpKTsKKyAgICBKU1N0cmluZ1JlZiBhY3R1YWwgPSBKU1ZhbHVl
VG9TdHJpbmdDb3B5KGNvbnRleHQsIHZhbHVlLCBleGNlcHRpb24pOworICAgIGdfYXNzZXJ0KCFl
eGNlcHRpb24gfHwgISpleGNlcHRpb24pOworICAgIGdfYXNzZXJ0KGN1cnJlbnRGaXh0dXJlLT5p
bmZvLT5leHBlY3RlZENvbnRlbnQpOworICAgIEpTU3RyaW5nUmVmIGV4cGVjdGVkID0gSlNTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoY3VycmVudEZpeHR1cmUtPmluZm8tPmV4cGVjdGVkQ29u
dGVudCk7CisgICAgZ19hc3NlcnQoSlNTdHJpbmdJc0VxdWFsKGV4cGVjdGVkLCBhY3R1YWwpKTsK
KworICAgIEpTU3RyaW5nUmVsZWFzZShleHBlY3RlZCk7CisgICAgSlNTdHJpbmdSZWxlYXNlKGFj
dHVhbCk7CisgICAgZ19tYWluX2xvb3BfcXVpdChjdXJyZW50Rml4dHVyZS0+bG9vcCk7CisgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgdm9pZCB3
aW5kb3dfb2JqZWN0X2NsZWFyZWRfY2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIFdl
YktpdFdlYkZyYW1lKiB3ZWJfZnJhbWUsIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0LCBKU09i
amVjdFJlZiB3aW5kb3dfb2JqZWN0LCBncG9pbnRlciBkYXRhKQoreworICAgIEpTU3RyaW5nUmVm
IG5hbWUgPSBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicnVuVGVzdCIpOworICAgIEpT
T2JqZWN0UmVmIHRlc3RDb21wbGV0ZSA9IEpTT2JqZWN0TWFrZUZ1bmN0aW9uV2l0aENhbGxiYWNr
KGNvbnRleHQsIG5hbWUsIHJ1blBhc3RlVGVzdENhbGxiYWNrKTsKKyAgICBKU09iamVjdFNldFBy
b3BlcnR5KGNvbnRleHQsIHdpbmRvd19vYmplY3QsIG5hbWUsIHRlc3RDb21wbGV0ZSwga0pTUHJv
cGVydHlBdHRyaWJ1dGVOb25lLCAwKTsKKyAgICBKU1N0cmluZ1JlbGVhc2UobmFtZSk7Cit9CisK
K3N0YXRpYyB2b2lkIHBhc3RpbmdfdGVzdF9nZXRfZGF0YV9jYWxsYmFjayhHdGtDbGlwYm9hcmQq
IGNsaXBib2FyZCwgR3RrU2VsZWN0aW9uRGF0YSogc2VsZWN0aW9uX2RhdGEsIGd1aW50IGluZm8s
IGdwb2ludGVyIGRhdGEpCit7CisgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX3NldChzZWxlY3Rpb25f
ZGF0YSwgZ2RrX2F0b21faW50ZXJuKCJ0ZXh0L2h0bWwiLCBGQUxTRSksIDgsIChjb25zdCBndWNo
YXIqKSBkYXRhLCBzdHJsZW4oKGNoYXIqKWRhdGEpICsgMSk7Cit9CisKK3N0YXRpYyB2b2lkIHBh
c3RpbmdfdGVzdF9jbGVhcl9kYXRhX2NhbGxiYWNrKEd0a0NsaXBib2FyZCogY2xpcGJvYXJkLCBn
cG9pbnRlciBkYXRhKQoreworICAgIGdfZnJlZShkYXRhKTsKK30KKworc3RhdGljIHZvaWQgdGVz
dF9wYXN0aW5nX21hcmt1cChDb3B5QW5kUGFzdGVGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2lu
dGVyIGRhdGEpCit7CisgICAgZml4dHVyZS0+aW5mbyA9IChUZXN0SW5mbyopZGF0YTsKKyAgICBj
dXJyZW50Rml4dHVyZSA9IGZpeHR1cmU7CisKKyAgICBHdGtUYXJnZXRMaXN0KiB0YXJnZXRMaXN0
ID0gZ3RrX3RhcmdldF9saXN0X25ldygwLCAwKTsKKyAgICBndGtfdGFyZ2V0X2xpc3RfYWRkKHRh
cmdldExpc3QsIGdka19hdG9tX2ludGVybigidGV4dC9odG1sIiwgRkFMU0UpLCAwLCAwKTsKKwor
ICAgIGludCBudW1iZXJPZlRhcmdldHMgPSAxOworICAgIEd0a1RhcmdldEVudHJ5KiB0YXJnZXRU
YWJsZSA9IGd0a190YXJnZXRfdGFibGVfbmV3X2Zyb21fbGlzdCh0YXJnZXRMaXN0LCAmbnVtYmVy
T2ZUYXJnZXRzKTsKKyAgICBndGtfY2xpcGJvYXJkX3NldF93aXRoX2RhdGEoZ3RrX2NsaXBib2Fy
ZF9nZXQoR0RLX1NFTEVDVElPTl9DTElQQk9BUkQpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0YXJnZXRUYWJsZSwgbnVtYmVyT2ZUYXJnZXRzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwYXN0aW5nX3Rlc3RfZ2V0X2RhdGFfY2FsbGJhY2ssCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhc3RpbmdfdGVzdF9jbGVhcl9kYXRhX2NhbGxiYWNrLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3N0cmR1cChmaXh0dXJlLT5pbmZvLT5l
eHBlY3RlZENvbnRlbnQpKTsKKyAgICBndGtfdGFyZ2V0X2xpc3RfdW5yZWYodGFyZ2V0TGlzdCk7
CisgICAgZ3RrX3RhcmdldF90YWJsZV9mcmVlKHRhcmdldFRhYmxlLCBudW1iZXJPZlRhcmdldHMp
OworCisgICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53aW5kb3csICJtYXAtZXZlbnQiLAor
ICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhtYXBfZXZlbnRfY2IpLCBmaXh0dXJlKTsK
KyAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJ3aW5kb3ctb2JqZWN0LWNs
ZWFyZWQiLAorICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyh3aW5kb3dfb2JqZWN0X2Ns
ZWFyZWRfY2FsbGJhY2spLCBmaXh0dXJlKTsKKworICAgIGd0a193aWRnZXRfc2hvdyhmaXh0dXJl
LT53aW5kb3cpOworICAgIGd0a193aWRnZXRfc2hvdyhHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZp
ZXcpKTsKKyAgICBndGtfd2luZG93X3ByZXNlbnQoR1RLX1dJTkRPVyhmaXh0dXJlLT53aW5kb3cp
KTsKKworICAgIGdfbWFpbl9sb29wX3J1bihmaXh0dXJlLT5sb29wKTsKK30KKworCitpbnQgbWFp
bihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFy
Z3YsIE5VTEwpOworCisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy8iKTsKKyAgICBjb25zdCBjaGFyKiBzZWxlY3RlZF9zcGFuX2h0bWwgPSAiPGh0bWw+PGJvZHk+
IgorICAgICAgICAiPHNwYW4gaWQ9XCJtYWluc3BhblwiPkFsbCB3b3JrIGFuZCBubyBwbGF5IDxz
cGFuPm1ha2UgSmFjayBhIGR1bGw8L3NwYW4+IGJveS48L3NwYW4+IgorICAgICAgICAiPHNjcmlw
dD5kb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5jb2xsYXBzZSgpO1xuIgorICAgICAgICAiZG9jdW1l
bnQuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0QWxsQ2hpbGRyZW4oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ21haW5zcGFuJykpO1xuIgorICAgICAgICAiPC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4iOwor
ICAgIGNvbnN0IGNoYXIqIG5vX3NlbGVjdGlvbl9odG1sID0gIjxodG1sPjxib2R5PiIKKyAgICAg
ICAgIjxzcGFuIGlkPVwibWFpbnNwYW5cIj5BbGwgd29yayBhbmQgbm8gcGxheSA8c3Bhbj5tYWtl
IEphY2sgYSBkdWxsPC9zcGFuPiBib3k8L3NwYW4+IgorICAgICAgICAiPHNjcmlwdD5kb2N1bWVu
dC5nZXRTZWxlY3Rpb24oKS5jb2xsYXBzZSgpO1xuIgorICAgICAgICAiPC9zY3JpcHQ+PC9ib2R5
PjwvaHRtbD4iOworCisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9jb3B5YW5kcGFzdGUvc2VsZWN0
aW9uIiwgQ29weUFuZFBhc3RlRml4dHVyZSwKKyAgICAgICAgICAgICAgIHRlc3RfaW5mb19uZXco
c2VsZWN0ZWRfc3Bhbl9odG1sLCAiQWxsIHdvcmsgYW5kIG5vIHBsYXkgbWFrZSBKYWNrIGEgZHVs
bCBib3kuIiksCisgICAgICAgICAgICAgICBjb3B5X2FuZF9wYXN0ZV9maXh0dXJlX3NldHVwLAor
ICAgICAgICAgICAgICAgdGVzdF9jb3B5X2FuZF9wYXN0ZSwKKyAgICAgICAgICAgICAgIGNvcHlf
YW5kX3Bhc3RlX2ZpeHR1cmVfdGVhcmRvd24pOworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvY29w
eWFuZHBhc3RlL25vLXNlbGVjdGlvbiIsIENvcHlBbmRQYXN0ZUZpeHR1cmUsCisgICAgICAgICAg
ICAgICB0ZXN0X2luZm9fbmV3KG5vX3NlbGVjdGlvbl9odG1sLCAwKSwKKyAgICAgICAgICAgICAg
IGNvcHlfYW5kX3Bhc3RlX2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0X2NvcHlf
YW5kX3Bhc3RlLAorICAgICAgICAgICAgICAgY29weV9hbmRfcGFzdGVfZml4dHVyZV90ZWFyZG93
bik7CisKKyAgICBjb25zdCBjaGFyKiBwYXN0ZV90ZXN0X2h0bWwgPSAiPGh0bWw+IgorICAgICAg
ICAiPGJvZHkgb25Mb2FkPVwiZG9jdW1lbnQuYm9keS5mb2N1cygpOyBydW5UZXN0KCk7XCIgY29u
dGVudEVkaXRhYmxlPVwidHJ1ZVwiPiIKKyAgICAgICAgIjwvYm9keT48L2h0bWw+IjsKKyAgICBn
X3Rlc3RfYWRkKCIvd2Via2l0L2NvcHlhbmRwYXN0ZS9wYXN0ZS1tYXJrdXAiLCBDb3B5QW5kUGFz
dGVGaXh0dXJlLAorICAgICAgICAgICAgICAgdGVzdF9pbmZvX25ldyhwYXN0ZV90ZXN0X2h0bWws
ICJib2JieSIpLAorICAgICAgICAgICAgICAgY29weV9hbmRfcGFzdGVfZml4dHVyZV9zZXR1cCwK
KyAgICAgICAgICAgICAgIHRlc3RfcGFzdGluZ19tYXJrdXAsCisgICAgICAgICAgICAgICBjb3B5
X2FuZF9wYXN0ZV9maXh0dXJlX3RlYXJkb3duKTsKKworICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7
Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0
ZG9tZG9jdW1lbnQuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3Rk
b21kb2N1bWVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjOTk3ZGQK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90
ZXN0ZG9tZG9jdW1lbnQuYwpAQCAtMCwwICsxLDQyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAidGVzdF91dGls
cy5oIgorCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CisjaW5j
bHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKworI2RlZmluZSBI
VE1MX0RPQ1VNRU5UX1RJVExFICI8aHRtbD48aGVhZD48dGl0bGU+VGhpcyBpcyB0aGUgdGl0bGU8
L3RpdGxlPjwvaGVhZD48Ym9keT48L2JvZHk+PC9odG1sPiIKKyNkZWZpbmUgSFRNTF9ET0NVTUVO
VF9FTEVNRU5UUyAiPGh0bWw+PGJvZHk+PHVsPjxsaT4xPC9saT48bGk+MjwvbGk+PGxpPjM8L2xp
PjwvdWw+PC9ib2R5PjwvaHRtbD4iCisjZGVmaW5lIEhUTUxfRE9DVU1FTlRfRUxFTUVOVFNfQ0xB
U1MgIjxodG1sPjxib2R5PjxkaXYgY2xhc3M9XCJ0ZXN0XCI+PC9kaXY+PGRpdiBjbGFzcz1cInN0
cmFuZ2VcIj48L2Rpdj48ZGl2IGNsYXNzPVwidGVzdFwiPjwvZGl2PjwvYm9keT48L2h0bWw+Igor
I2RlZmluZSBIVE1MX0RPQ1VNRU5UX0VMRU1FTlRTX0lEICI8aHRtbD48Ym9keT48ZGl2IGlkPVwi
dGVzdG9rXCI+PC9kaXY+PGRpdiBpZD1cInRlc3RiYWRcIj5maXJzdDwvZGl2PjxkaXYgaWQ9XCJ0
ZXN0YmFkXCI+c2Vjb25kPC9kaXY+PC9ib2R5PjwvaHRtbD4iCisjZGVmaW5lIEhUTUxfRE9DVU1F
TlRfTElOS1MgIjxodG1sPjxoZWFkPjx0aXRsZT5UaXRsZTwvdGl0bGU+PC9oZWFkPjxib2R5Pjxh
IGhyZWY9XCJhYm91dDpibGFua1wiPmJsYW5rPC9hPjxhIGhyZWY9XCJodHRwOi8vd3d3Lmdvb2ds
ZS5jb21cIj5nb29nbGU8L2E+PGEgaHJlZj1cImh0dHA6Ly93d3cud2Via2l0Lm9yZ1wiPndlYmtp
dDwvYT48L2JvZHk+PC9odG1sPiIKKyNkZWZpbmUgSFRNTF9ET0NVTUVOVF9JRlJBTUUgIjxodG1s
PjxoZWFkPjx0aXRsZT5JRnJhbWU8L3RpdGxlPjwvaGVhZD48Ym9keT48aWZyYW1lIGlkPSdpZnJh
bWUnPjwvaWZyYW1lPjxkaXYgaWQ9J3Rlc3QnPjwvZGl2PjwvYm9keT48L2h0bWw+IgorI2RlZmlu
ZSBIVE1MX0RPQ1VNRU5UX1RBQkxFICI8aHRtbD48Ym9keT48dGFibGUgaWQ9XCJ0YWJsZVwiPjwv
dGFibGU+PC9ib2R5PjwvaHRtbD4iCisjZGVmaW5lIEhUTUxfRE9DVU1FTlRfRVZBTFVBVEUgIjxo
dG1sPjxoZWFkPjx0aXRsZT48L3RpdGxlPjwvaGVhZD48Ym9keT48ZGl2PkZpcnN0IGRpdjwvZGl2
PjxkaXY+U2Vjb25kIGRpdjwvZGl2PjwvYm9keT48L2h0bWw+IgorCit0eXBlZGVmIHN0cnVjdCB7
CisgICAgR3RrV2lkZ2V0KiB3ZWJWaWV3OworICAgIEdNYWluTG9vcCogbG9vcDsKK30gRG9tRG9j
dW1lbnRGaXh0dXJlOworCitzdGF0aWMgZ2Jvb2xlYW4gZmluaXNoX2xvYWRpbmcoRG9tRG9jdW1l
bnRGaXh0dXJlKiBmaXh0dXJlKQoreworICAgIGlmIChnX21haW5fbG9vcF9pc19ydW5uaW5nKGZp
eHR1cmUtPmxvb3ApKQorICAgICAgICBnX21haW5fbG9vcF9xdWl0KGZpeHR1cmUtPmxvb3ApOwor
CisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZCBkb21fZG9jdW1lbnRfZml4dHVy
ZV9zZXR1cChEb21Eb2N1bWVudEZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkK
K3sKKyAgICBmaXh0dXJlLT5sb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworICAg
IGZpeHR1cmUtPndlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7CisgICAgZ19vYmplY3Rf
cmVmX3NpbmsoZml4dHVyZS0+d2ViVmlldyk7CisKKyAgICBpZiAoZGF0YSAhPSBOVUxMKQorICAg
ICAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVXIChmaXh0dXJl
LT53ZWJWaWV3KSwgKGNvbnN0IGNoYXIqKSBkYXRhLCBOVUxMLCBOVUxMLCBOVUxMKTsKKworICAg
IGdfaWRsZV9hZGQoKEdTb3VyY2VGdW5jKWZpbmlzaF9sb2FkaW5nLCBmaXh0dXJlKTsKKyAgICBn
X21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIGRvbV9kb2N1
bWVudF9maXh0dXJlX3RlYXJkb3duKERvbURvY3VtZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0
cG9pbnRlciBkYXRhKQoreworICAgIGlmIChmaXh0dXJlLT53ZWJWaWV3KQorICAgICAgICBnX29i
amVjdF91bnJlZihmaXh0dXJlLT53ZWJWaWV3KTsKKyAgICBnX21haW5fbG9vcF91bnJlZihmaXh0
dXJlLT5sb29wKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9kb21fZG9jdW1lbnRfdGl0bGUoRG9t
RG9jdW1lbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgZ19h
c3NlcnQoZml4dHVyZSk7CisgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IChXZWJLaXRXZWJWaWV3
KilmaXh0dXJlLT53ZWJWaWV3OworICAgIGdfYXNzZXJ0KHZpZXcpOworICAgIFdlYktpdERPTURv
Y3VtZW50KiBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50KHZpZXcp
OworICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsKKyAgICBnY2hhciogdGl0bGUgPSB3ZWJraXRfZG9t
X2RvY3VtZW50X2dldF90aXRsZShkb2N1bWVudCk7CisgICAgZ19hc3NlcnQodGl0bGUpOworICAg
IGdfYXNzZXJ0X2NtcHN0cih0aXRsZSwgPT0sICJUaGlzIGlzIHRoZSB0aXRsZSIpOworICAgIGdf
ZnJlZSh0aXRsZSk7CisgICAgd2Via2l0X2RvbV9kb2N1bWVudF9zZXRfdGl0bGUoZG9jdW1lbnQs
ICJUaGlzIGlzIHRoZSBzZWNvbmQgdGl0bGUiKTsKKyAgICB0aXRsZSA9IHdlYmtpdF9kb21fZG9j
dW1lbnRfZ2V0X3RpdGxlKGRvY3VtZW50KTsKKyAgICBnX2Fzc2VydCh0aXRsZSk7CisgICAgZ19h
c3NlcnRfY21wc3RyKHRpdGxlLCA9PSwgIlRoaXMgaXMgdGhlIHNlY29uZCB0aXRsZSIpOworICAg
IGdfZnJlZSh0aXRsZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfZG9tX2RvY3VtZW50X2dldF9l
bGVtZW50c19ieV90YWdfbmFtZShEb21Eb2N1bWVudEZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBv
aW50ZXIgZGF0YSkKK3sKKyAgICBnX2Fzc2VydChmaXh0dXJlKTsKKyAgICBXZWJLaXRXZWJWaWV3
KiB2aWV3ID0gKFdlYktpdFdlYlZpZXcqKWZpeHR1cmUtPndlYlZpZXc7CisgICAgZ19hc3NlcnQo
dmlldyk7CisgICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50ID0gd2Via2l0X3dlYl92aWV3
X2dldF9kb21fZG9jdW1lbnQodmlldyk7CisgICAgZ19hc3NlcnQoZG9jdW1lbnQpOworICAgIFdl
YktpdERPTU5vZGVMaXN0KiBsaXN0ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNf
YnlfdGFnX25hbWUoZG9jdW1lbnQsICJsaSIpOworICAgIGdfYXNzZXJ0KGxpc3QpOworICAgIGd1
bG9uZyBsZW5ndGggPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QpOworICAg
IGdfYXNzZXJ0X2NtcGludChsZW5ndGgsID09LCAzKTsKKworICAgIGd1aW50IGk7CisKKyAgICBm
b3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgV2ViS2l0RE9NTm9kZSogaXRl
bSA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdCwgaSk7CisgICAgICAgIGdfYXNzZXJ0
KGl0ZW0pOworICAgICAgICBXZWJLaXRET01FbGVtZW50KiBlbGVtZW50ID0gKFdlYktpdERPTUVs
ZW1lbnQqKWl0ZW07CisgICAgICAgIGdfYXNzZXJ0KGVsZW1lbnQpOworICAgICAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X2RvbV9lbGVtZW50X2dldF90YWdfbmFtZShlbGVtZW50KSwgPT0sICJM
SSIpOworICAgICAgICBXZWJLaXRET01IVE1MRWxlbWVudCogaHRtbEVsZW1lbnQgPSAoV2ViS2l0
RE9NSFRNTEVsZW1lbnQqKWVsZW1lbnQ7CisgICAgICAgIGNoYXIqIG4gPSBnX3N0cmR1cF9wcmlu
dGYoIiVkIiwgaSsxKTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9kb21faHRtbF9l
bGVtZW50X2dldF9pbm5lcl90ZXh0KGh0bWxFbGVtZW50KSwgPT0sIG4pOworICAgICAgICBnX2Zy
ZWUobik7CisgICAgfQorCisgICAgZ19vYmplY3RfdW5yZWYobGlzdCk7Cit9CisKK3N0YXRpYyB2
b2lkIHRlc3RfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19ieV9jbGFzc19uYW1lKERvbURvY3Vt
ZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGdfYXNzZXJ0
KGZpeHR1cmUpOworICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSAoV2ViS2l0V2ViVmlldyopZml4
dHVyZS0+d2ViVmlldzsKKyAgICBnX2Fzc2VydCh2aWV3KTsKKyAgICBXZWJLaXRET01Eb2N1bWVu
dCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKKyAg
ICBnX2Fzc2VydChkb2N1bWVudCk7CisgICAgV2ViS2l0RE9NTm9kZUxpc3QqIGxpc3QgPSB3ZWJr
aXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19ieV9jbGFzc19uYW1lKGRvY3VtZW50LCAidGVz
dCIpOworICAgIGdfYXNzZXJ0KGxpc3QpOworICAgIGd1bG9uZyBsZW5ndGggPSB3ZWJraXRfZG9t
X25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QpOworICAgIGdfYXNzZXJ0X2NtcGludChsZW5ndGgs
ID09LCAyKTsKKworICAgIGd1aW50IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBp
KyspIHsKKyAgICAgICAgV2ViS2l0RE9NTm9kZSogaXRlbSA9IHdlYmtpdF9kb21fbm9kZV9saXN0
X2l0ZW0obGlzdCwgaSk7CisgICAgICAgIGdfYXNzZXJ0KGl0ZW0pOworICAgICAgICBXZWJLaXRE
T01FbGVtZW50KiBlbGVtZW50ID0gKFdlYktpdERPTUVsZW1lbnQqKWl0ZW07CisgICAgICAgIGdf
YXNzZXJ0KGVsZW1lbnQpOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2RvbV9lbGVt
ZW50X2dldF90YWdfbmFtZShlbGVtZW50KSwgPT0sICJESVYiKTsKKyAgICB9CisKKyAgICBnX29i
amVjdF91bnJlZihsaXN0KTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9kb21fZG9jdW1lbnRfZ2V0
X2VsZW1lbnRfYnlfaWQoRG9tRG9jdW1lbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVy
IGRhdGEpCit7CisgICAgZ19hc3NlcnQoZml4dHVyZSk7CisgICAgV2ViS2l0V2ViVmlldyogdmll
dyA9IChXZWJLaXRXZWJWaWV3KilmaXh0dXJlLT53ZWJWaWV3OworICAgIGdfYXNzZXJ0KHZpZXcp
OworICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRf
ZG9tX2RvY3VtZW50KHZpZXcpOworICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsKKyAgICBXZWJLaXRE
T01FbGVtZW50KiBlbGVtZW50ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudF9ieV9p
ZChkb2N1bWVudCwgInRlc3RvayIpOworICAgIGdfYXNzZXJ0KGVsZW1lbnQpOworICAgIGVsZW1l
bnQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50X2J5X2lkKGRvY3VtZW50LCAidGhp
cy1pZC1kb2VzLW5vdC1leGlzdCIpOworICAgIGdfYXNzZXJ0KGVsZW1lbnQgPT0gMCk7CisgICAg
LyogVGhlIERPTSBzcGVjIHNheXMgdGhlIHJldHVybiB2YWx1ZSBpcyB1bmRlZmluZWQgd2hlbiB0
aGVyZSdzCisgICAgICogbW9yZSB0aGFuIG9uZSBlbGVtZW50IHdpdGggdGhlIHNhbWUgaWQ7IGlu
IG91ciBjYXNlIHRoZSBmaXJzdAorICAgICAqIG9uZSB3aWxsIGJlIHJldHVybmVkICovCisgICAg
ZWxlbWVudCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRfYnlfaWQoZG9jdW1lbnQs
ICJ0ZXN0YmFkIik7CisgICAgZ19hc3NlcnQoZWxlbWVudCk7CisgICAgV2ViS2l0RE9NSFRNTEVs
ZW1lbnQqIGh0bWxFbGVtZW50ID0gKFdlYktpdERPTUhUTUxFbGVtZW50KillbGVtZW50OworICAg
IGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfaW5uZXJfdGV4dCho
dG1sRWxlbWVudCksID09LCAiZmlyc3QiKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9kb21fZG9j
dW1lbnRfZ2V0X2xpbmtzKERvbURvY3VtZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRl
ciBkYXRhKQoreworICAgIGdfYXNzZXJ0KGZpeHR1cmUpOworICAgIFdlYktpdFdlYlZpZXcqIHZp
ZXcgPSAoV2ViS2l0V2ViVmlldyopZml4dHVyZS0+d2ViVmlldzsKKyAgICBnX2Fzc2VydCh2aWV3
KTsKKyAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X2RvbV9kb2N1bWVudCh2aWV3KTsKKyAgICBnX2Fzc2VydChkb2N1bWVudCk7CisgICAgV2ViS2l0
RE9NSFRNTENvbGxlY3Rpb24gKmNvbGxlY3Rpb24gPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9s
aW5rcyhkb2N1bWVudCk7CisgICAgZ19hc3NlcnQoY29sbGVjdGlvbik7CisgICAgZ3Vsb25nIGxl
bmd0aCA9IHdlYmtpdF9kb21faHRtbF9jb2xsZWN0aW9uX2dldF9sZW5ndGgoY29sbGVjdGlvbik7
CisgICAgZ19hc3NlcnRfY21waW50KGxlbmd0aCwgPT0sIDMpOworCisgICAgZ3VpbnQgaTsKKwor
ICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBzdGF0aWMgY29uc3Qg
Y2hhciogbmFtZXNbXSA9IHsgImJsYW5rIiwgImdvb2dsZSIsICJ3ZWJraXQiIH07CisgICAgICAg
IHN0YXRpYyBjb25zdCBjaGFyKiB1cmlzW10gPSB7ICJhYm91dDpibGFuayIsICJodHRwOi8vd3d3
Lmdvb2dsZS5jb20vIiwgImh0dHA6Ly93d3cud2Via2l0Lm9yZy8iIH07CisgICAgICAgIFdlYktp
dERPTU5vZGUgKm5vZGUgPSB3ZWJraXRfZG9tX2h0bWxfY29sbGVjdGlvbl9pdGVtKGNvbGxlY3Rp
b24sIGkpOworICAgICAgICBnX2Fzc2VydChub2RlKTsKKyAgICAgICAgV2ViS2l0RE9NRWxlbWVu
dCogZWxlbWVudCA9IChXZWJLaXRET01FbGVtZW50Kilub2RlOworICAgICAgICBnX2Fzc2VydF9j
bXBzdHIod2Via2l0X2RvbV9lbGVtZW50X2dldF90YWdfbmFtZShlbGVtZW50KSwgPT0sICJBIik7
CisgICAgICAgIFdlYktpdERPTUhUTUxFbGVtZW50ICpodG1sRWxlbWVudCA9IChXZWJLaXRET01I
VE1MRWxlbWVudCopZWxlbWVudDsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9kb21f
aHRtbF9lbGVtZW50X2dldF9pbm5lcl90ZXh0KGh0bWxFbGVtZW50KSwgPT0sIG5hbWVzW2ldKTsK
KyAgICAgICAgV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQgKmFuY2hvciA9IChXZWJLaXRET01I
VE1MQW5jaG9yRWxlbWVudCopZWxlbWVudDsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtp
dF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfaHJlZihhbmNob3IpLCA9PSwgdXJpc1tpXSk7
CisgICAgfQorICAgIGdfb2JqZWN0X3VucmVmKGNvbGxlY3Rpb24pOworfQorCitzdGF0aWMgdm9p
ZCB0ZXN0X2RvbV9kb2N1bWVudF9pbnNlcnRfcm93KERvbURvY3VtZW50Rml4dHVyZSogZml4dHVy
ZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGdfYXNzZXJ0KGZpeHR1cmUpOworICAgIFdl
YktpdFdlYlZpZXcqIHZpZXcgPSAoV2ViS2l0V2ViVmlldyopZml4dHVyZS0+d2ViVmlldzsKKyAg
ICBnX2Fzc2VydCh2aWV3KTsKKyAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKKyAgICBnX2Fzc2VydChXRUJLSVRf
RE9NX0lTX0RPQ1VNRU5UKGRvY3VtZW50KSk7CisgICAgV2ViS2l0RE9NRWxlbWVudCogdGFibGUg
PSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50X2J5X2lkKGRvY3VtZW50LCAidGFibGUi
KTsKKyAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVCh0YWJsZSkpOworICAg
IFdlYktpdERPTUhUTUxDb2xsZWN0aW9uKiByb3dzID0gd2Via2l0X2RvbV9odG1sX3RhYmxlX2Vs
ZW1lbnRfZ2V0X3Jvd3MoV0VCS0lUX0RPTV9IVE1MX1RBQkxFX0VMRU1FTlQodGFibGUpKTsKKyAg
ICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfQ09MTEVDVElPTihyb3dzKSk7CisKKyAgICAv
LyBUYWJsZSBpcyBpbml0aWFsbHkgZW1wdHkuCisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9k
b21faHRtbF9jb2xsZWN0aW9uX2dldF9sZW5ndGgocm93cyksID09LCAwKTsKKyAgICBXZWJLaXRE
T01IVE1MRWxlbWVudCogcm93ID0gd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfaW5zZXJ0
X3JvdyhXRUJLSVRfRE9NX0hUTUxfVEFCTEVfRUxFTUVOVCh0YWJsZSksIC0xLCBOVUxMKTsKKyAg
ICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfUk9XX0VMRU1FTlQocm93KSk7Cisg
ICAgcm93cyA9IHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2dldF9yb3dzKFdFQktJVF9E
T01fSFRNTF9UQUJMRV9FTEVNRU5UKHRhYmxlKSk7CisgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9J
U19IVE1MX0NPTExFQ1RJT04ocm93cykpOworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfZG9t
X2h0bWxfY29sbGVjdGlvbl9nZXRfbGVuZ3RoKHJvd3MpLCA9PSwgMSk7Cit9CisKK3N0YXRpYyB2
b2lkIHRlc3RfZG9tX2RvY3VtZW50X2V2YWx1YXRlKERvbURvY3VtZW50Rml4dHVyZSogZml4dHVy
ZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGdfYXNzZXJ0KGZpeHR1cmUpOworICAgIFdl
YktpdFdlYlZpZXcqIHZpZXcgPSAoV2ViS2l0V2ViVmlldyopZml4dHVyZS0+d2ViVmlldzsKKyAg
ICBnX2Fzc2VydCh2aWV3KTsKKyAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKKyAgICBnX2Fzc2VydChXRUJLSVRf
RE9NX0lTX0RPQ1VNRU5UKGRvY3VtZW50KSk7CisgICAgV2ViS2l0RE9NTm9kZUxpc3QqIGxpc3Qg
PSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19ieV90YWdfbmFtZShkb2N1bWVudCwg
Imh0bWwiKTsKKyAgICBnX2Fzc2VydChsaXN0KTsKKyAgICBndWxvbmcgbGVuZ3RoID0gd2Via2l0
X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChsaXN0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQobGVu
Z3RoLCA9PSwgMSk7CisgICAgV2ViS2l0RE9NTm9kZSogaHRtbCA9IHdlYmtpdF9kb21fbm9kZV9s
aXN0X2l0ZW0obGlzdCwgMCk7CisgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19OT0RFKGh0bWwp
KTsKKworICAgIFdlYktpdERPTVhQYXRoUmVzdWx0KiByZXN1bHQgPSB3ZWJraXRfZG9tX2RvY3Vt
ZW50X2V2YWx1YXRlKGRvY3VtZW50LCAiLy9kaXYiLCBodG1sLCBOVUxMLCAwLCBOVUxMLCBOVUxM
KTsKKyAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX1hQQVRIX1JFU1VMVChyZXN1bHQpKTsKKwor
ICAgIGludCBpID0gMDsKKyAgICBXZWJLaXRET01Ob2RlKiBub2RlOworICAgIHdoaWxlICggKG5v
ZGUgPSB3ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9pdGVyYXRlX25leHQocmVzdWx0LCBOVUxMKSkg
IT0gTlVMTCkgeworICAgICAgICBnX2Fzc2VydChub2RlKTsKKyAgICAgICAgV2ViS2l0RE9NRWxl
bWVudCogZWxlbWVudCA9IChXZWJLaXRET01FbGVtZW50Kilub2RlOworICAgICAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X2RvbV9lbGVtZW50X2dldF90YWdfbmFtZShlbGVtZW50KSwgPT0sICJE
SVYiKTsKKyAgICAgICAgaSsrOworICAgIH0KKyAgICBnX2Fzc2VydF9jbXBpbnQoaSwgPT0sIDIp
OworCisgICAgZ19vYmplY3RfdW5yZWYobGlzdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYWtfbm90
aWZ5KGdwb2ludGVyIGRhdGEsIEdPYmplY3QqIHpvbWJpZSkKK3sKKyAgICBndWludCogY291bnQg
PSAoZ3VpbnQqKWRhdGE7CisgICAgKCpjb3VudCkrKzsKK30KKworc3RhdGljIHZvaWQgdGVzdF9k
b21fZG9jdW1lbnRfZ2FyYmFnZV9jb2xsZWN0aW9uKERvbURvY3VtZW50Rml4dHVyZSogZml4dHVy
ZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGd1aW50IGNvdW50ID0gMDsKKyAgICBnX2Fz
c2VydChmaXh0dXJlKTsKKyAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gKFdlYktpdFdlYlZpZXcq
KWZpeHR1cmUtPndlYlZpZXc7CisgICAgZ19hc3NlcnQodmlldyk7CisgICAgV2ViS2l0RE9NRG9j
dW1lbnQqIGRvY3VtZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQodmlldyk7
CisgICAgZ19hc3NlcnQoZG9jdW1lbnQpOworICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNU
KGRvY3VtZW50KSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOworICAgIFdlYktp
dERPTUhUTUxIZWFkRWxlbWVudCogaGVhZCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2hlYWQo
ZG9jdW1lbnQpOworICAgIGdfYXNzZXJ0KGhlYWQpOworICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdf
T0JKRUNUKGhlYWQpLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7CisgICAgV2Vi
S2l0RE9NSFRNTEVsZW1lbnQqIGJvZHkgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9ib2R5KGRv
Y3VtZW50KTsKKyAgICBnX2Fzc2VydChib2R5KTsKKyAgICBnX29iamVjdF93ZWFrX3JlZihHX09C
SkVDVChib2R5KSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOworICAgIFdlYktp
dERPTUhUTUxDb2xsZWN0aW9uICpjb2xsZWN0aW9uID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRf
bGlua3MoZG9jdW1lbnQpOworICAgIGdfYXNzZXJ0KGNvbGxlY3Rpb24pOworICAgIGdfb2JqZWN0
X3dlYWtfcmVmKEdfT0JKRUNUKGNvbGxlY3Rpb24pLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnks
ICZjb3VudCk7CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoV0VCS0lUX1dFQl9W
SUVXKHZpZXcpLCBIVE1MX0RPQ1VNRU5UX0xJTktTLCBOVUxMLCBOVUxMLCBOVUxMKTsKKworICAg
IHdoaWxlIChnX21haW5fY29udGV4dF9wZW5kaW5nKE5VTEwpKQorICAgICAgICBnX21haW5fY29u
dGV4dF9pdGVyYXRpb24oTlVMTCwgRkFMU0UpOworCisgICAgZ19hc3NlcnRfY21wdWludChjb3Vu
dCwgPT0sIDMpOworCisgICAgZ19vYmplY3RfdW5yZWYoY29sbGVjdGlvbik7CisgICAgZ19hc3Nl
cnRfY21wdWludChjb3VudCwgPT0sIDQpOworCisgICAgY291bnQgPSAwOworCisgICAgZG9jdW1l
bnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKKyAgICBnX2Fzc2Vy
dChkb2N1bWVudCk7CisgICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1QoZG9jdW1lbnQpLCAo
R1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7CisgICAgaGVhZCA9IHdlYmtpdF9kb21f
ZG9jdW1lbnRfZ2V0X2hlYWQoZG9jdW1lbnQpOworICAgIGdfYXNzZXJ0KGhlYWQpOworICAgIGdf
b2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGhlYWQpLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnks
ICZjb3VudCk7CisgICAgYm9keSA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2JvZHkoZG9jdW1l
bnQpOworICAgIGdfYXNzZXJ0KGJvZHkpOworICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNU
KGJvZHkpLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7CisgICAgY29sbGVjdGlv
biA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2xpbmtzKGRvY3VtZW50KTsKKyAgICBnX2Fzc2Vy
dChjb2xsZWN0aW9uKTsKKyAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVDVChjb2xsZWN0aW9u
KSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOworICAgIC8qIEFzayB0d2ljZSBm
b3IgdGhlIHNhbWUgb2JqZWN0ICovCisgICAgV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24qIGNvbGxl
Y3Rpb24yID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfbGlua3MoZG9jdW1lbnQpOworICAgIGdf
YXNzZXJ0KGNvbGxlY3Rpb24yKTsKKyAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVDVChjb2xs
ZWN0aW9uMiksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKKworICAgIGdfb2Jq
ZWN0X3VucmVmKGRvY3VtZW50KTsKKyAgICBnX29iamVjdF91bnJlZihoZWFkKTsKKyAgICBnX29i
amVjdF91bnJlZihib2R5KTsKKyAgICBnX29iamVjdF91bnJlZihjb2xsZWN0aW9uKTsKKyAgICBn
X29iamVjdF91bnJlZihjb2xsZWN0aW9uMik7CisKKyAgICBnX2Fzc2VydF9jbXB1aW50KGNvdW50
LCA9PSwgNSk7CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoV0VCS0lUX1dFQl9W
SUVXKHZpZXcpLCBIVE1MX0RPQ1VNRU5UX0lGUkFNRSwgTlVMTCwgTlVMTCwgTlVMTCk7CisKKyAg
ICB3aGlsZSAoZ19tYWluX2NvbnRleHRfcGVuZGluZyhOVUxMKSkKKyAgICAgICAgZ19tYWluX2Nv
bnRleHRfaXRlcmF0aW9uKE5VTEwsIEZBTFNFKTsKKworICAgIGNvdW50ID0gMDsKKworICAgIGRv
Y3VtZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQodmlldyk7CisgICAgV2Vi
S2l0RE9NRWxlbWVudCogZGl2ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudF9ieV9p
ZChkb2N1bWVudCwgInRlc3QiKTsKKyAgICBnX2Fzc2VydChkaXYpOworICAgIGdfb2JqZWN0X3dl
YWtfcmVmKEdfT0JKRUNUKGRpdiksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsK
KyAgICBXZWJLaXRET01FbGVtZW50KiBpZnJhbWUgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9l
bGVtZW50X2J5X2lkKGRvY3VtZW50LCAiaWZyYW1lIik7CisgICAgZ19hc3NlcnQoaWZyYW1lKTsK
KworICAgIHdlYmtpdF9kb21fZWxlbWVudF9zZXRfYXR0cmlidXRlKGlmcmFtZSwgInNyYyIsICJk
YXRhOjxodG1sPjxoZWFkPjwvaGVhZD48L2h0bWw+IiwgTlVMTCk7CisKKyAgICB3aGlsZSAoZ19t
YWluX2NvbnRleHRfcGVuZGluZyhOVUxMKSkKKyAgICAgICAgZ19tYWluX2NvbnRleHRfaXRlcmF0
aW9uKE5VTEwsIEZBTFNFKTsKKworICAgIFdlYktpdERPTURvY3VtZW50KiBpZnJhbWVEb2N1bWVu
dCA9IHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfY29udGVudF9kb2N1bWVudChX
RUJLSVRfRE9NX0hUTUxfSUZSQU1FX0VMRU1FTlQoaWZyYW1lKSk7CisgICAgZ19hc3NlcnQoaWZy
YW1lRG9jdW1lbnQpOworICAgIGhlYWQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9oZWFkKGlm
cmFtZURvY3VtZW50KTsKKyAgICBnX2Fzc2VydChoZWFkKTsKKyAgICBnX29iamVjdF93ZWFrX3Jl
ZihHX09CSkVDVChoZWFkKSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOworCisg
ICAgd2Via2l0X2RvbV9lbGVtZW50X3NldF9hdHRyaWJ1dGUoaWZyYW1lLCAic3JjIiwgImFib3V0
OmJsYW5rIiwgTlVMTCk7CisKKyAgICB3aGlsZSAoZ19tYWluX2NvbnRleHRfcGVuZGluZyhOVUxM
KSkKKyAgICAgICAgZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uKE5VTEwsIEZBTFNFKTsKKworICAg
IGdfYXNzZXJ0X2NtcHVpbnQoY291bnQsID09LCAxKTsKKworICAgIHdlYmtpdF93ZWJfdmlld19s
b2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcodmlldyksIEhUTUxfRE9DVU1FTlRfTElOS1MsIE5V
TEwsIE5VTEwsIE5VTEwpOworCisgICAgd2hpbGUgKGdfbWFpbl9jb250ZXh0X3BlbmRpbmcoTlVM
TCkpCisgICAgICAgIGdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbihOVUxMLCBGQUxTRSk7CisKKyAg
ICBnX2Fzc2VydF9jbXB1aW50KGNvdW50LCA9PSwgMik7CisKKyAgICBjb3VudCA9IDA7CisKKyAg
ICBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50KHZpZXcpOworICAg
IGdfYXNzZXJ0KGRvY3VtZW50KTsKKyAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVDVChkb2N1
bWVudCksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKKyAgICAvKiBBc2sgdHdp
Y2UgZm9yIHRoZSBEb2N1bWVudCAqLworICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1bWVudDIg
PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKKyAgICBnX2Fzc2VydChk
b2N1bWVudDIpOworICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGRvY3VtZW50MiksIChH
V2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKKyAgICBoZWFkID0gd2Via2l0X2RvbV9k
b2N1bWVudF9nZXRfaGVhZChkb2N1bWVudCk7CisgICAgZ19hc3NlcnQoaGVhZCk7CisgICAgZ19v
YmplY3Rfd2Vha19yZWYoR19PQkpFQ1QoaGVhZCksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwg
JmNvdW50KTsKKyAgICBib2R5ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfYm9keShkb2N1bWVu
dCk7CisgICAgZ19hc3NlcnQoYm9keSk7CisgICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1Qo
Ym9keSksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKKyAgICBjb2xsZWN0aW9u
ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfbGlua3MoZG9jdW1lbnQpOworICAgIGdfYXNzZXJ0
KGNvbGxlY3Rpb24pOworICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGNvbGxlY3Rpb24p
LCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7CisKKyAgICBndGtfd2lkZ2V0X2Rl
c3Ryb3koZml4dHVyZS0+d2ViVmlldyk7CisgICAgZml4dHVyZS0+d2ViVmlldyA9IE5VTEw7CisK
KyAgICBnX2Fzc2VydF9jbXB1aW50KGNvdW50LCA9PSwgNCk7CisKKyAgICBnX29iamVjdF91bnJl
Zihjb2xsZWN0aW9uKTsKKworICAgIGdfYXNzZXJ0X2NtcHVpbnQoY291bnQsID09LCA1KTsKK30K
KworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIGd0a190ZXN0X2luaXQo
JmFyZ2MsICZhcmd2LCBOVUxMKTsKKworICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvIik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2RvbWRvY3VtZW50L3Rl
c3RfdGl0bGUiLAorICAgICAgICAgICAgICAgRG9tRG9jdW1lbnRGaXh0dXJlLCBIVE1MX0RPQ1VN
RU5UX1RJVExFLAorICAgICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfc2V0dXAsCisg
ICAgICAgICAgICAgICB0ZXN0X2RvbV9kb2N1bWVudF90aXRsZSwKKyAgICAgICAgICAgICAgIGRv
bV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKTsKKworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQv
ZG9tZG9jdW1lbnQvdGVzdF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWUiLAorICAgICAgICAgICAg
ICAgRG9tRG9jdW1lbnRGaXh0dXJlLCBIVE1MX0RPQ1VNRU5UX0VMRU1FTlRTLAorICAgICAgICAg
ICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0X2Rv
bV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWUsCisgICAgICAgICAgICAgICBkb21f
ZG9jdW1lbnRfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2Rv
bWRvY3VtZW50L3Rlc3RfZ2V0X2VsZW1lbnRzX2J5X2NsYXNzX25hbWUiLAorICAgICAgICAgICAg
ICAgRG9tRG9jdW1lbnRGaXh0dXJlLCBIVE1MX0RPQ1VNRU5UX0VMRU1FTlRTX0NMQVNTLAorICAg
ICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0
ZXN0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfY2xhc3NfbmFtZSwKKyAgICAgICAgICAg
ICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKTsKKworICAgIGdfdGVzdF9hZGQoIi93
ZWJraXQvZG9tZG9jdW1lbnQvdGVzdF9nZXRfZWxlbWVudF9ieV9pZCIsCisgICAgICAgICAgICAg
ICBEb21Eb2N1bWVudEZpeHR1cmUsIEhUTUxfRE9DVU1FTlRfRUxFTUVOVFNfSUQsCisgICAgICAg
ICAgICAgICBkb21fZG9jdW1lbnRfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3Rf
ZG9tX2RvY3VtZW50X2dldF9lbGVtZW50X2J5X2lkLAorICAgICAgICAgICAgICAgZG9tX2RvY3Vt
ZW50X2ZpeHR1cmVfdGVhcmRvd24pOworCisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9kb21kb2N1
bWVudC90ZXN0X2dldF9saW5rcyIsCisgICAgICAgICAgICAgICBEb21Eb2N1bWVudEZpeHR1cmUs
IEhUTUxfRE9DVU1FTlRfTElOS1MsCisgICAgICAgICAgICAgICBkb21fZG9jdW1lbnRfZml4dHVy
ZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3RfZG9tX2RvY3VtZW50X2dldF9saW5rcywKKyAg
ICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKTsKKworICAgIGdfdGVz
dF9hZGQoIi93ZWJraXQvZG9tZG9jdW1lbnQvdGVzdF90YWJsZV9pbnNlcnRfcm93IiwKKyAgICAg
ICAgICAgICAgIERvbURvY3VtZW50Rml4dHVyZSwgSFRNTF9ET0NVTUVOVF9UQUJMRSwKKyAgICAg
ICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVz
dF9kb21fZG9jdW1lbnRfaW5zZXJ0X3JvdywKKyAgICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9m
aXh0dXJlX3RlYXJkb3duKTsKKworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvZG9tZG9jdW1lbnQv
dGVzdF9kb2N1bWVudF9ldmFsdWF0ZSIsCisgICAgICAgICAgICAgICBEb21Eb2N1bWVudEZpeHR1
cmUsIEhUTUxfRE9DVU1FTlRfRVZBTFVBVEUsCisgICAgICAgICAgICAgICBkb21fZG9jdW1lbnRf
Zml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3RfZG9tX2RvY3VtZW50X2V2YWx1YXRl
LAorICAgICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfdGVhcmRvd24pOworCisgICAg
Z190ZXN0X2FkZCgiL3dlYmtpdC9kb21kb2N1bWVudC90ZXN0X2dhcmJhZ2VfY29sbGVjdGlvbiIs
CisgICAgICAgICAgICAgICBEb21Eb2N1bWVudEZpeHR1cmUsIEhUTUxfRE9DVU1FTlRfTElOS1Ms
CisgICAgICAgICAgICAgICBkb21fZG9jdW1lbnRfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAg
ICAgIHRlc3RfZG9tX2RvY3VtZW50X2dhcmJhZ2VfY29sbGVjdGlvbiwKKyAgICAgICAgICAgICAg
IGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKTsKKworICAgIHJldHVybiBnX3Rlc3RfcnVu
KCk7Cit9CisKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3Rr
L3Rlc3Rkb21kb213aW5kb3cuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3Rr
L3Rlc3Rkb21kb213aW5kb3cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4x
NGZjZDE4Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRHdGsvdGVzdGRvbWRvbXdpbmRvdy5jCkBAIC0wLDAgKzEsMjU4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJ0
ZXN0X3V0aWxzLmgiCisKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z2xpYi9nc3RkaW8u
aD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgorCisj
ZGVmaW5lIEhUTUxfRE9DVU1FTlQgIjxodG1sPjxoZWFkPjx0aXRsZT48L3RpdGxlPjwvaGVhZD48
c3R5bGUgdHlwZT0ndGV4dC9jc3MnPiN0ZXN0IHsgZm9udC1zaXplOiAxNnB4OyB9PC9zdHlsZT48
Ym9keT48cCBpZD0ndGVzdCc+dGVzdDwvcD48L2JvZHk+PC9odG1sPiIKKwordHlwZWRlZiBzdHJ1
Y3QgeworICAgIEd0a1dpZGdldCogd2ViVmlldzsKKyAgICBHdGtXaWRnZXQqIHdpbmRvdzsKKyAg
ICBXZWJLaXRET01ET01XaW5kb3cqIGRvbVdpbmRvdzsKKyAgICBHTWFpbkxvb3AqIGxvb3A7CisK
KyAgICBnYm9vbGVhbiBsb2FkZWQ7CisgICAgZ2Jvb2xlYW4gY2xpY2tlZDsKKyAgICBnY29uc3Rw
b2ludGVyIGRhdGE7Cit9IERvbURvbXZpZXdGaXh0dXJlOworCitzdGF0aWMgZ2Jvb2xlYW4gZmlu
aXNoX2xvYWRpbmcoRG9tRG9tdmlld0ZpeHR1cmUqIGZpeHR1cmUpCit7CisgICAgaWYgKGdfbWFp
bl9sb29wX2lzX3J1bm5pbmcoZml4dHVyZS0+bG9vcCkpCisgICAgICAgIGdfbWFpbl9sb29wX3F1
aXQoZml4dHVyZS0+bG9vcCk7CisKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lk
IGRvbV9kb212aWV3X2ZpeHR1cmVfc2V0dXAoRG9tRG9tdmlld0ZpeHR1cmUqIGZpeHR1cmUsIGdj
b25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBmaXh0dXJlLT5sb29wID0gZ19tYWluX2xvb3BfbmV3
KE5VTEwsIFRSVUUpOworICAgIGZpeHR1cmUtPndpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19X
SU5ET1dfVE9QTEVWRUwpOworICAgIGZpeHR1cmUtPndlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdf
bmV3KCk7CisgICAgZml4dHVyZS0+ZGF0YSA9IGRhdGE7CisKKyAgICBndGtfY29udGFpbmVyX2Fk
ZChHVEtfQ09OVEFJTkVSKGZpeHR1cmUtPndpbmRvdyksIEdUS19XSURHRVQoZml4dHVyZS0+d2Vi
VmlldykpOworfQorCitzdGF0aWMgdm9pZCBkb21fZG9tdmlld19maXh0dXJlX3RlYXJkb3duKERv
bURvbXZpZXdGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgZ3Rr
X3dpZGdldF9kZXN0cm95KGZpeHR1cmUtPndpbmRvdyk7CisgICAgZ19tYWluX2xvb3BfdW5yZWYo
Zml4dHVyZS0+bG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIGRvbV9kb21fd2luZG93X2ZpeHR1cmVf
c2V0dXAoRG9tRG9tdmlld0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sK
KyAgICBmaXh0dXJlLT5sb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworICAgIGZp
eHR1cmUtPndlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7CisgICAgZ19vYmplY3RfcmVm
X3NpbmsoZml4dHVyZS0+d2ViVmlldyk7CisKKyAgICBpZiAoZGF0YSAhPSBOVUxMKQorICAgICAg
ICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVXIChmaXh0dXJlLT53
ZWJWaWV3KSwgKGNvbnN0IGNoYXIqKSBkYXRhLCBOVUxMLCBOVUxMLCBOVUxMKTsKKworICAgIGdf
aWRsZV9hZGQoKEdTb3VyY2VGdW5jKWZpbmlzaF9sb2FkaW5nLCBmaXh0dXJlKTsKKyAgICBnX21h
aW5fbG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIGRvbV9kb21fd2lu
ZG93X2ZpeHR1cmVfdGVhcmRvd24oRG9tRG9tdmlld0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBv
aW50ZXIgZGF0YSkKK3sKKyAgICBpZiAoZml4dHVyZS0+d2ViVmlldykKKyAgICAgICAgZ19vYmpl
Y3RfdW5yZWYoZml4dHVyZS0+d2ViVmlldyk7CisgICAgZ19tYWluX2xvb3BfdW5yZWYoZml4dHVy
ZS0+bG9vcCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBsb2FkZWRDYWxsYmFjayhXZWJLaXRET01E
T01XaW5kb3cqIHZpZXcsIFdlYktpdERPTUV2ZW50KiBldmVudCwgRG9tRG9tdmlld0ZpeHR1cmUq
IGZpeHR1cmUpCit7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+bG9hZGVkID09IEZBTFNFKTsKKyAg
ICBmaXh0dXJlLT5sb2FkZWQgPSBUUlVFOworCisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0
aWMgZ2Jvb2xlYW4gY2xpY2tlZENhbGxiYWNrKFdlYktpdERPTURPTVdpbmRvdyogdmlldywgV2Vi
S2l0RE9NRXZlbnQqIGV2ZW50LCBEb21Eb212aWV3Rml4dHVyZSogZml4dHVyZSkKK3sKKyAgICBX
ZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0OworICAgIGd1c2hvcnQgcGhhc2U7CisKKyAgICBn
X2Fzc2VydChldmVudCk7CisgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19FVkVOVChldmVudCkp
OworCisgICAgLy8gV2Ugc2hvdWxkIGNhdGNoIHRoaXMgaW4gdGhlIGJ1YmJsaW5nIHVwIHBoYXNl
LCBzaW5jZSB3ZSBhcmUgY29ubmVjdGluZyB0byB0aGUgdG9wbGV2ZWwgb2JqZWN0CisgICAgcGhh
c2UgPSB3ZWJraXRfZG9tX2V2ZW50X2dldF9ldmVudF9waGFzZShldmVudCk7CisgICAgZ19hc3Nl
cnRfY21waW50KHBoYXNlLCA9PSwgMyk7CisKKyAgICB0YXJnZXQgPSB3ZWJraXRfZG9tX2V2ZW50
X2dldF9jdXJyZW50X3RhcmdldChldmVudCk7CisgICAgZ19hc3NlcnQodGFyZ2V0ID09IFdFQktJ
VF9ET01fRVZFTlRfVEFSR0VUKHZpZXcpKTsKKworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmNsaWNr
ZWQgPT0gRkFMU0UpOworICAgIGZpeHR1cmUtPmNsaWNrZWQgPSBUUlVFOworCisgICAgZmluaXNo
X2xvYWRpbmcoZml4dHVyZSk7CisKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK2dib29sZWFuIG1h
cF9ldmVudF9jYihHdGtXaWRnZXQgKndpZGdldCwgR2RrRXZlbnQqIGV2ZW50LCBEb21Eb212aWV3
Rml4dHVyZSogZml4dHVyZSkKK3sKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoV0VC
S0lUX1dFQl9WSUVXIChmaXh0dXJlLT53ZWJWaWV3KSwgKGNvbnN0IGNoYXIqKWZpeHR1cmUtPmRh
dGEsIE5VTEwsIE5VTEwsIE5VTEwpOworCisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMg
dm9pZCBsb2FkX2V2ZW50X2NhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEdQYXJhbVNw
ZWMqIHNwZWMsIERvbURvbXZpZXdGaXh0dXJlKiBmaXh0dXJlKQoreworICAgIFdlYktpdExvYWRT
dGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJWaWV3KTsK
KyAgICBpZiAoc3RhdHVzID09IFdFQktJVF9MT0FEX0ZJTklTSEVEKSB7CisgICAgICAgIHdlYmtp
dF9kb21fZXZlbnRfdGFyZ2V0X2FkZF9ldmVudF9saXN0ZW5lcihXRUJLSVRfRE9NX0VWRU5UX1RB
UkdFVChmaXh0dXJlLT5kb21XaW5kb3cpLCAiY2xpY2siLCBHX0NBTExCQUNLKGNsaWNrZWRDYWxs
YmFjayksIGZhbHNlLCBmaXh0dXJlKTsKKworICAgICAgICBnX2Fzc2VydChmaXh0dXJlLT5jbGlj
a2VkID09IEZBTFNFKTsKKyAgICAgICAgZ3RrX3Rlc3Rfd2lkZ2V0X2NsaWNrKEdUS19XSURHRVQo
Zml4dHVyZS0+d2ViVmlldyksIDEsIDApOworICAgIH0KKworfQorCitzdGF0aWMgdm9pZCB0ZXN0
X2RvbV9kb212aWV3X3NpZ25hbHMoRG9tRG9tdmlld0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBv
aW50ZXIgZGF0YSkKK3sKKyAgICBnX2Fzc2VydChmaXh0dXJlKTsKKyAgICBXZWJLaXRXZWJWaWV3
KiB2aWV3ID0gKFdlYktpdFdlYlZpZXcqKWZpeHR1cmUtPndlYlZpZXc7CisgICAgZ19hc3NlcnQo
dmlldyk7CisgICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50ID0gd2Via2l0X3dlYl92aWV3
X2dldF9kb21fZG9jdW1lbnQodmlldyk7CisgICAgZ19hc3NlcnQoZG9jdW1lbnQpOworICAgIFdl
YktpdERPTURPTVdpbmRvdyogZG9tV2luZG93ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZGVm
YXVsdF92aWV3KGRvY3VtZW50KTsKKyAgICBnX2Fzc2VydChkb21XaW5kb3cpOworCisgICAgZml4
dHVyZS0+ZG9tV2luZG93ID0gZG9tV2luZG93OworCisgICAgd2Via2l0X2RvbV9ldmVudF90YXJn
ZXRfYWRkX2V2ZW50X2xpc3RlbmVyKFdFQktJVF9ET01fRVZFTlRfVEFSR0VUKGZpeHR1cmUtPmRv
bVdpbmRvdyksICJsb2FkIiwgR19DQUxMQkFDSyhsb2FkZWRDYWxsYmFjayksIGZhbHNlLCBmaXh0
dXJlKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndpbmRvdywgIm1hcC1ldmVudCIs
IEdfQ0FMTEJBQ0sobWFwX2V2ZW50X2NiKSwgZml4dHVyZSk7CisgICAgZ19zaWduYWxfY29ubmVj
dChmaXh0dXJlLT53ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0sobG9h
ZF9ldmVudF9jYWxsYmFjayksIGZpeHR1cmUpOworCisgICAgZ3RrX3dpZGdldF9zaG93X2FsbChm
aXh0dXJlLT53aW5kb3cpOworICAgIGd0a193aW5kb3dfcHJlc2VudChHVEtfV0lORE9XKGZpeHR1
cmUtPndpbmRvdykpOworCisgICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1cmUtPmxvb3ApOworCisg
ICAgZ19hc3NlcnQoZml4dHVyZS0+bG9hZGVkKTsKKyAgICBnX2Fzc2VydChmaXh0dXJlLT5jbGlj
a2VkKTsKK30KKworc3RhdGljIGdib29sZWFuCitjbGlja2VkX2NiKFdlYktpdERPTUV2ZW50VGFy
Z2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgRG9tRG9tdmlld0ZpeHR1cmUqIGZp
eHR1cmUpCit7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+Y2xpY2tlZCA9PSBGQUxTRSk7CisgICAg
Zml4dHVyZS0+Y2xpY2tlZCA9IFRSVUU7CisgICAgZmluaXNoX2xvYWRpbmcoZml4dHVyZSk7Cisg
ICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZCBsb2FkX3N0YXR1c19jYWxsYmFjayhX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHUGFyYW1TcGVjKiBzcGVjLCBEb21Eb212aWV3Rml4dHVy
ZSogZml4dHVyZSkKK3sKKyAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJf
dmlld19nZXRfbG9hZF9zdGF0dXMod2ViVmlldyk7CisgICAgaWYgKHN0YXR1cyA9PSBXRUJLSVRf
TE9BRF9GSU5JU0hFRCkgeworICAgICAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQ7Cisg
ICAgICAgIFdlYktpdERPTURPTVdpbmRvdyogZG9tV2luZG93OworICAgICAgICBXZWJLaXRET01F
bGVtZW50KiBlbGVtZW50OworICAgICAgICBXZWJLaXRET01FdmVudCogZXZlbnQ7CisgICAgICAg
IGdsb25nIGNsaWVudFgsIGNsaWVudFk7CisKKyAgICAgICAgZG9jdW1lbnQgPSB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X2RvbV9kb2N1bWVudChXRUJLSVRfV0VCX1ZJRVcoZml4dHVyZS0+d2ViVmlldykp
OworICAgICAgICBnX2Fzc2VydChkb2N1bWVudCk7CisgICAgICAgIGRvbVdpbmRvdyA9IHdlYmtp
dF9kb21fZG9jdW1lbnRfZ2V0X2RlZmF1bHRfdmlldyhkb2N1bWVudCk7CisgICAgICAgIGdfYXNz
ZXJ0KGRvbVdpbmRvdyk7CisgICAgICAgIGZpeHR1cmUtPmRvbVdpbmRvdyA9IGRvbVdpbmRvdzsK
KworICAgICAgICBlbGVtZW50ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudF9ieV9p
ZChkb2N1bWVudCwgInRlc3QiKTsKKyAgICAgICAgZ19hc3NlcnQoZWxlbWVudCk7CisgICAgICAg
IGV2ZW50ID0gd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZXZlbnQoZG9jdW1lbnQsICJNb3Vz
ZUV2ZW50IiwgTlVMTCk7CisgICAgICAgIGdfYXNzZXJ0KGV2ZW50KTsKKyAgICAgICAgZ19hc3Nl
cnQoV0VCS0lUX0RPTV9JU19FVkVOVChldmVudCkpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRf
RE9NX0lTX01PVVNFX0VWRU5UKGV2ZW50KSk7CisgICAgICAgIGNsaWVudFggPSB3ZWJraXRfZG9t
X2VsZW1lbnRfZ2V0X2NsaWVudF9sZWZ0KGVsZW1lbnQpOworICAgICAgICBjbGllbnRZID0gd2Vi
a2l0X2RvbV9lbGVtZW50X2dldF9jbGllbnRfdG9wKGVsZW1lbnQpOworICAgICAgICB3ZWJraXRf
ZG9tX21vdXNlX2V2ZW50X2luaXRfbW91c2VfZXZlbnQoV0VCS0lUX0RPTV9NT1VTRV9FVkVOVChl
dmVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
Y2xpY2siLCBUUlVFLCBUUlVFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZml4dHVyZS0+ZG9tV2luZG93LCAwLCAwLCAwLCBjbGllbnRYLCBjbGllbnRZ
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0Us
IEZBTFNFLCBGQUxTRSwgRkFMU0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAxLCBXRUJLSVRfRE9NX0VWRU5UX1RBUkdFVChlbGVtZW50KSk7CisgICAg
ICAgIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2FkZF9ldmVudF9saXN0ZW5lcihXRUJLSVRfRE9N
X0VWRU5UX1RBUkdFVChlbGVtZW50KSwgImNsaWNrIiwgR19DQUxMQkFDSyhjbGlja2VkX2NiKSwg
ZmFsc2UsIGZpeHR1cmUpOworICAgICAgICBnX2Fzc2VydChmaXh0dXJlLT5jbGlja2VkID09IEZB
TFNFKTsKKyAgICAgICAgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfZGlzcGF0Y2hfZXZlbnQoV0VC
S0lUX0RPTV9FVkVOVF9UQVJHRVQoZWxlbWVudCksIGV2ZW50LCBOVUxMKTsKKyAgICB9CisKK30K
Kworc3RhdGljIHZvaWQgdGVzdF9kb21fZG9tdmlld19kaXNwYXRjaF9ldmVudChEb21Eb212aWV3
Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGdfc2lnbmFsX2Nv
bm5lY3QoZml4dHVyZS0+d2luZG93LCAibWFwLWV2ZW50IiwgR19DQUxMQkFDSyhtYXBfZXZlbnRf
Y2IpLCBmaXh0dXJlKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJu
b3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhsb2FkX3N0YXR1c19jYWxsYmFjayksIGZp
eHR1cmUpOworCisgICAgZ3RrX3dpZGdldF9zaG93X2FsbChmaXh0dXJlLT53aW5kb3cpOworICAg
IGd0a193aW5kb3dfcHJlc2VudChHVEtfV0lORE9XKGZpeHR1cmUtPndpbmRvdykpOworCisgICAg
Z19tYWluX2xvb3BfcnVuIChmaXh0dXJlLT5sb29wKTsKKyAgICBnX2Fzc2VydChmaXh0dXJlLT5j
bGlja2VkKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9kb21fZG9tX3dpbmRvd19nZXRfY29tcHV0
ZWRfc3R5bGUoRG9tRG9tdmlld0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkK
K3sKKyAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X2RvbV9kb2N1bWVudChXRUJLSVRfV0VCX1ZJRVcoZml4dHVyZS0+d2ViVmlldykpOworICAgIGdf
YXNzZXJ0KGRvY3VtZW50KTsKKyAgICBXZWJLaXRET01ET01XaW5kb3cqIGRvbVdpbmRvdyA9IHdl
YmtpdF9kb21fZG9jdW1lbnRfZ2V0X2RlZmF1bHRfdmlldyhkb2N1bWVudCk7CisgICAgZ19hc3Nl
cnQoZG9tV2luZG93KTsKKworICAgIFdlYktpdERPTUVsZW1lbnQqICBlbGVtZW50ID0gd2Via2l0
X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudF9ieV9pZChkb2N1bWVudCwgInRlc3QiKTsKKyAgICBn
X2Fzc2VydChlbGVtZW50KTsKKyAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoZWxl
bWVudCkpOworICAgIFdlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24qIGNzc1N0eWxlID0gd2Vi
a2l0X2RvbV9kb21fd2luZG93X2dldF9jb21wdXRlZF9zdHlsZShkb21XaW5kb3csIGVsZW1lbnQs
IE5VTEwpOworICAgIGdjaGFyKiBmb250U2l6ZSA9IHdlYmtpdF9kb21fY3NzX3N0eWxlX2RlY2xh
cmF0aW9uX2dldF9wcm9wZXJ0eV92YWx1ZShjc3NTdHlsZSwgImZvbnQtc2l6ZSIpOworICAgIGdf
YXNzZXJ0X2NtcHN0cihmb250U2l6ZSwgPT0sICIxNnB4Iik7Cit9CisKK2ludCBtYWluKGludCBh
cmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVM
TCk7CisKKyAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwor
CisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9kb21kb212aWV3L3NpZ25hbHMiLAorICAgICAgICAg
ICAgICAgRG9tRG9tdmlld0ZpeHR1cmUsIEhUTUxfRE9DVU1FTlQsCisgICAgICAgICAgICAgICBk
b21fZG9tdmlld19maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF9kb21fZG9tdmll
d19zaWduYWxzLAorICAgICAgICAgICAgICAgZG9tX2RvbXZpZXdfZml4dHVyZV90ZWFyZG93bik7
CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2RvbWRvbXZpZXcvZGlzcGF0Y2hfZXZlbnQiLAor
ICAgICAgICAgICAgICAgRG9tRG9tdmlld0ZpeHR1cmUsIEhUTUxfRE9DVU1FTlQsCisgICAgICAg
ICAgICAgICBkb21fZG9tdmlld19maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF9k
b21fZG9tdmlld19kaXNwYXRjaF9ldmVudCwKKyAgICAgICAgICAgICAgIGRvbV9kb212aWV3X2Zp
eHR1cmVfdGVhcmRvd24pOworCisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9kb21kb213aW5kb3cv
Z2V0X2NvbXB1dGVkX3N0eWxlIiwKKyAgICAgICAgICAgICAgIERvbURvbXZpZXdGaXh0dXJlLCBI
VE1MX0RPQ1VNRU5ULAorICAgICAgICAgICAgICAgZG9tX2RvbV93aW5kb3dfZml4dHVyZV9zZXR1
cCwKKyAgICAgICAgICAgICAgIHRlc3RfZG9tX2RvbV93aW5kb3dfZ2V0X2NvbXB1dGVkX3N0eWxl
LAorICAgICAgICAgICAgICAgZG9tX2RvbV93aW5kb3dfZml4dHVyZV90ZWFyZG93bik7CisKKyAg
ICByZXR1cm4gZ190ZXN0X3J1bigpOworfQorCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0ZG9tbm9kZS5jIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRHdGsvdGVzdGRvbW5vZGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5lZDRiY2JkCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRHdGsvdGVzdGRvbW5vZGUuYwpAQCAtMCwwICsxLDIxOSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAidGVzdF91dGlscy5oIgorCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGdsaWIvZ3N0
ZGlvLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4K
KworI2RlZmluZSBIVE1MX0RPQ1VNRU5UX0hJRVJBUkNIWV9OQVZJR0FUSU9OICI8aHRtbD48aGVh
ZD48dGl0bGU+VGhpcyBpcyB0aGUgdGl0bGU8L3RpdGxlPjwvaGVhZD48Ym9keT48cD4xPC9wPjxw
PjI8L3A+PHA+MzwvcD48L2JvZHk+PC9odG1sPiIKKyNkZWZpbmUgSFRNTF9ET0NVTUVOVF9OT0RF
X0lOU0VSVElPTiAiPGh0bWw+PGJvZHk+PC9ib2R5PjwvaHRtbD4iCisKK3R5cGVkZWYgc3RydWN0
IHsKKyAgICBHdGtXaWRnZXQqIHdlYlZpZXc7CisgICAgR01haW5Mb29wKiBsb29wOworfSBEb21O
b2RlRml4dHVyZTsKKworc3RhdGljIGdib29sZWFuIGZpbmlzaF9sb2FkaW5nKERvbU5vZGVGaXh0
dXJlKiBmaXh0dXJlKQoreworICAgIGlmIChnX21haW5fbG9vcF9pc19ydW5uaW5nKGZpeHR1cmUt
Pmxvb3ApKQorICAgICAgICBnX21haW5fbG9vcF9xdWl0KGZpeHR1cmUtPmxvb3ApOworCisgICAg
cmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZCBkb21fbm9kZV9maXh0dXJlX3NldHVwKERv
bU5vZGVGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgZml4dHVy
ZS0+bG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKKyAgICBmaXh0dXJlLT53ZWJW
aWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKGZpeHR1
cmUtPndlYlZpZXcpOworCisgICAgaWYgKGRhdGEgIT0gTlVMTCkKKyAgICAgICAgd2Via2l0X3dl
Yl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklFVyhmaXh0dXJlLT53ZWJWaWV3KSwgKGNv
bnN0IGNoYXIqKWRhdGEsIE5VTEwsIE5VTEwsIE5VTEwpOworCisgICAgZ19pZGxlX2FkZCgoR1Nv
dXJjZUZ1bmMpZmluaXNoX2xvYWRpbmcsIGZpeHR1cmUpOworICAgIGdfbWFpbl9sb29wX3J1bihm
aXh0dXJlLT5sb29wKTsKK30KKworc3RhdGljIHZvaWQgZG9tX25vZGVfZml4dHVyZV90ZWFyZG93
bihEb21Ob2RlRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGdf
b2JqZWN0X3VucmVmKGZpeHR1cmUtPndlYlZpZXcpOworICAgIGdfbWFpbl9sb29wX3VucmVmKGZp
eHR1cmUtPmxvb3ApOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2RvbV9ub2RlX2hpZXJhcmNoeV9u
YXZpZ2F0aW9uKERvbU5vZGVGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7
CisgICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50OworICAgIFdlYktpdERPTUhUTUxIZWFk
RWxlbWVudCogaGVhZDsKKyAgICBXZWJLaXRET01IVE1MQm9keUVsZW1lbnQqIGJvZHk7CisgICAg
V2ViS2l0RE9NTm9kZUxpc3QqIGxpc3Q7CisgICAgV2ViS2l0RE9NTm9kZSogcHRyOworICAgIGd1
bG9uZyBpLCBsZW5ndGg7CisKKyAgICBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRfZG9t
X2RvY3VtZW50KFdFQktJVF9XRUJfVklFVyhmaXh0dXJlLT53ZWJWaWV3KSk7CisgICAgZ19hc3Nl
cnQoZG9jdW1lbnQpOworICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfRE9DVU1FTlQoZG9jdW1l
bnQpKTsKKyAgICBoZWFkID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfaGVhZChkb2N1bWVudCk7
CisgICAgZ19hc3NlcnQoaGVhZCk7CisgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0hF
QURfRUxFTUVOVChoZWFkKSk7CisKKyAgICAvKiBUaXRsZSwgaGVhZCdzIGNoaWxkICovCisgICAg
Z19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2hhc19jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUo
aGVhZCkpKTsKKyAgICBsaXN0ID0gd2Via2l0X2RvbV9ub2RlX2dldF9jaGlsZF9ub2RlcyhXRUJL
SVRfRE9NX05PREUoaGVhZCkpOworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfZG9tX25vZGVf
bGlzdF9nZXRfbGVuZ3RoKGxpc3QpLCA9PSwgMSk7CisgICAgcHRyID0gd2Via2l0X2RvbV9ub2Rl
X2xpc3RfaXRlbShsaXN0LCAwKTsKKyAgICBnX2Fzc2VydChwdHIpOworICAgIGdfYXNzZXJ0KFdF
QktJVF9ET01fSVNfSFRNTF9USVRMRV9FTEVNRU5UKHB0cikpOworICAgIGdfb2JqZWN0X3VucmVm
KGxpc3QpOworCisgICAgLyogQm9keSwgSGVhZCBzaWJsaW5nICovCisgICAgcHRyID0gd2Via2l0
X2RvbV9ub2RlX2dldF9uZXh0X3NpYmxpbmcoV0VCS0lUX0RPTV9OT0RFKGhlYWQpKTsKKyAgICBn
X2Fzc2VydChwdHIpOworICAgIGJvZHkgPSBXRUJLSVRfRE9NX0hUTUxfQk9EWV9FTEVNRU5UKHB0
cik7CisgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0JPRFlfRUxFTUVOVChib2R5KSk7
CisKKyAgICAvKiBUaGVyZSBpcyBubyB0aGlyZCBzaWJsaW5nICovCisgICAgcHRyID0gd2Via2l0
X2RvbV9ub2RlX2dldF9uZXh0X3NpYmxpbmcocHRyKTsKKyAgICBnX2Fzc2VydChwdHIgPT0gTlVM
TCk7CisKKyAgICAvKiBCb2R5J3MgcHJldmlvdXMgc2libGluZyBpcyBIZWFkICovCisgICAgcHRy
ID0gd2Via2l0X2RvbV9ub2RlX2dldF9wcmV2aW91c19zaWJsaW5nKFdFQktJVF9ET01fTk9ERShi
b2R5KSk7CisgICAgZ19hc3NlcnQocHRyKTsKKyAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hU
TUxfSEVBRF9FTEVNRU5UKHB0cikpOworCisgICAgLyogQm9keSBoYXMgMyBjaGlsZHJlbiAqLwor
ICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9oYXNfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9O
T0RFKGJvZHkpKSk7CisgICAgbGlzdCA9IHdlYmtpdF9kb21fbm9kZV9nZXRfY2hpbGRfbm9kZXMo
V0VCS0lUX0RPTV9OT0RFKGJvZHkpKTsKKyAgICBsZW5ndGggPSB3ZWJraXRfZG9tX25vZGVfbGlz
dF9nZXRfbGVuZ3RoKGxpc3QpOworICAgIGdfYXNzZXJ0X2NtcGludChsZW5ndGgsID09LCAzKTsK
KworICAgIC8qIFRoZSB0aHJlZSBvZiB0aGVtIGFyZSBQIHRhZ3MgKi8KKyAgICBmb3IgKGkgPSAw
OyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgcHRyID0gd2Via2l0X2RvbV9ub2RlX2xpc3Rf
aXRlbShsaXN0LCBpKTsKKyAgICAgICAgZ19hc3NlcnQocHRyKTsKKyAgICAgICAgZ19hc3NlcnQo
V0VCS0lUX0RPTV9JU19IVE1MX1BBUkFHUkFQSF9FTEVNRU5UKHB0cikpOworICAgIH0KKworICAg
IC8qIEdvIGJhY2t3YXJkcyAqLworICAgIGZvciAoaSA9IDA7IHB0cjsgcHRyID0gd2Via2l0X2Rv
bV9ub2RlX2dldF9wcmV2aW91c19zaWJsaW5nKHB0ciksIGkrKykKKyAgICAgICAgLyogTm90aGlu
ZyAqLzsKKworICAgIGdfYXNzZXJ0X2NtcGludChpLCA9PSwgMyk7CisgICAgZ19vYmplY3RfdW5y
ZWYobGlzdCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfZG9tX25vZGVfaW5zZXJ0aW9uKERvbU5v
ZGVGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgV2ViS2l0RE9N
RG9jdW1lbnQqIGRvY3VtZW50OworICAgIFdlYktpdERPTUhUTUxFbGVtZW50KiBib2R5OworICAg
IFdlYktpdERPTUVsZW1lbnQqIHAsICpkaXY7CisgICAgV2ViS2l0RE9NTm9kZUxpc3QqIGxpc3Q7
CisgICAgV2ViS2l0RE9NTm9kZSogbm9kZTsKKworICAgIGRvY3VtZW50ID0gd2Via2l0X3dlYl92
aWV3X2dldF9kb21fZG9jdW1lbnQoV0VCS0lUX1dFQl9WSUVXKGZpeHR1cmUtPndlYlZpZXcpKTsK
KyAgICBnX2Fzc2VydChkb2N1bWVudCk7CisgICAgYm9keSA9IHdlYmtpdF9kb21fZG9jdW1lbnRf
Z2V0X2JvZHkoZG9jdW1lbnQpOworICAgIGdfYXNzZXJ0KGJvZHkpOworICAgIGdfYXNzZXJ0KFdF
QktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKGJvZHkpKTsKKworICAgIC8qIEJvZHkgc2hvdWxkbid0
IGhhdmUgYW55IGNoaWxkcmVuIGF0IHRoaXMgcG9pbnQgKi8KKyAgICBnX2Fzc2VydCh3ZWJraXRf
ZG9tX25vZGVfaGFzX2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSkgPT0gRkFMU0Up
OworCisgICAgLyogSW5zZXJ0IG9uZSBQIGVsZW1lbnQgKi8KKyAgICBwID0gd2Via2l0X2RvbV9k
b2N1bWVudF9jcmVhdGVfZWxlbWVudChkb2N1bWVudCwgIlAiLCBOVUxMKTsKKyAgICB3ZWJraXRf
ZG9tX25vZGVfYXBwZW5kX2NoaWxkKFdFQktJVF9ET01fTk9ERShib2R5KSwgV0VCS0lUX0RPTV9O
T0RFKHApLCBOVUxMKTsKKworICAgIC8qIE5vdyBpdCBzaG91bGQgaGF2ZSBvbmUsIHRoZSBzYW1l
IHRoYXQgd2UgaW5zZXJ0ZWQgKi8KKyAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaGFzX2No
aWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSkpOworICAgIGxpc3QgPSB3ZWJraXRfZG9t
X25vZGVfZ2V0X2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSk7CisgICAgZ19hc3Nl
cnRfY21waW50KHdlYmtpdF9kb21fbm9kZV9saXN0X2dldF9sZW5ndGgobGlzdCksID09LCAxKTsK
KyAgICBub2RlID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0LCAwKTsKKyAgICBnX2Fz
c2VydChub2RlKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaXNfc2FtZV9ub2RlKFdF
QktJVF9ET01fTk9ERShwKSwgbm9kZSkpOworICAgIGdfb2JqZWN0X3VucmVmKGxpc3QpOworCisg
ICAgLyogUmVwbGFjZSB0aGUgUCB0YWcgd2l0aCBhIERJViB0YWcgKi8KKyAgICBkaXYgPSB3ZWJr
aXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9lbGVtZW50KGRvY3VtZW50LCAiRElWIiwgTlVMTCk7Cisg
ICAgd2Via2l0X2RvbV9ub2RlX3JlcGxhY2VfY2hpbGQoV0VCS0lUX0RPTV9OT0RFKGJvZHkpLCBX
RUJLSVRfRE9NX05PREUoZGl2KSwgV0VCS0lUX0RPTV9OT0RFKHApLCBOVUxMKTsKKyAgICBnX2Fz
c2VydCh3ZWJraXRfZG9tX25vZGVfaGFzX2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5
KSkpOworICAgIGxpc3QgPSB3ZWJraXRfZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVzKFdFQktJVF9E
T01fTk9ERShib2R5KSk7CisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9kb21fbm9kZV9saXN0
X2dldF9sZW5ndGgobGlzdCksID09LCAxKTsKKyAgICBub2RlID0gd2Via2l0X2RvbV9ub2RlX2xp
c3RfaXRlbShsaXN0LCAwKTsKKyAgICBnX2Fzc2VydChub2RlKTsKKyAgICBnX2Fzc2VydCh3ZWJr
aXRfZG9tX25vZGVfaXNfc2FtZV9ub2RlKFdFQktJVF9ET01fTk9ERShkaXYpLCBub2RlKSk7Cisg
ICAgZ19vYmplY3RfdW5yZWYobGlzdCk7CisKKyAgICAvKiBOb3cgcmVtb3ZlIHRoZSB0YWcgKi8K
KyAgICB3ZWJraXRfZG9tX25vZGVfcmVtb3ZlX2NoaWxkKFdFQktJVF9ET01fTk9ERShib2R5KSwg
bm9kZSwgTlVMTCk7CisgICAgbGlzdCA9IHdlYmtpdF9kb21fbm9kZV9nZXRfY2hpbGRfbm9kZXMo
V0VCS0lUX0RPTV9OT0RFKGJvZHkpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X2RvbV9u
b2RlX2xpc3RfZ2V0X2xlbmd0aChsaXN0KSwgPT0sIDApOworICAgIGdfb2JqZWN0X3VucmVmKGxp
c3QpOworCisgICAgLyogVGVzdCBpbnNlcnRfYmVmb3JlICovCisKKyAgICAvKiBJZiByZWZDaGls
ZCBpcyBudWxsLCBpbnNlcnQgbmV3Q2hpbGQgYXMgbGFzdCBlbGVtZW50IG9mIHBhcmVudCAqLwor
ICAgIGRpdiA9IHdlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2VsZW1lbnQoZG9jdW1lbnQsICJE
SVYiLCBOVUxMKTsKKyAgICB3ZWJraXRfZG9tX25vZGVfaW5zZXJ0X2JlZm9yZShXRUJLSVRfRE9N
X05PREUoYm9keSksIFdFQktJVF9ET01fTk9ERShkaXYpLCBOVUxMLCBOVUxMKTsKKyAgICBnX2Fz
c2VydCh3ZWJraXRfZG9tX25vZGVfaGFzX2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5
KSkpOworICAgIGxpc3QgPSB3ZWJraXRfZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVzKFdFQktJVF9E
T01fTk9ERShib2R5KSk7CisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9kb21fbm9kZV9saXN0
X2dldF9sZW5ndGgobGlzdCksID09LCAxKTsKKyAgICBub2RlID0gd2Via2l0X2RvbV9ub2RlX2xp
c3RfaXRlbShsaXN0LCAwKTsKKyAgICBnX2Fzc2VydChub2RlKTsKKyAgICBnX2Fzc2VydCh3ZWJr
aXRfZG9tX25vZGVfaXNfc2FtZV9ub2RlKFdFQktJVF9ET01fTk9ERShkaXYpLCBub2RlKSk7Cisg
ICAgZ19vYmplY3RfdW5yZWYobGlzdCk7CisKKyAgICAvKiBOb3cgaW5zZXJ0IGEgJ3AnIGJlZm9y
ZSAnZGl2JyAqLworICAgIHAgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9lbGVtZW50KGRv
Y3VtZW50LCAiUCIsIE5VTEwpOworICAgIHdlYmtpdF9kb21fbm9kZV9pbnNlcnRfYmVmb3JlKFdF
QktJVF9ET01fTk9ERShib2R5KSwgV0VCS0lUX0RPTV9OT0RFKHApLCBXRUJLSVRfRE9NX05PREUo
ZGl2KSwgTlVMTCk7CisgICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2hhc19jaGlsZF9ub2Rl
cyhXRUJLSVRfRE9NX05PREUoYm9keSkpKTsKKyAgICBsaXN0ID0gd2Via2l0X2RvbV9ub2RlX2dl
dF9jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpOworICAgIGdfYXNzZXJ0X2NtcGlu
dCh3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QpLCA9PSwgMik7CisgICAgbm9k
ZSA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdCwgMCk7CisgICAgZ19hc3NlcnQobm9k
ZSk7CisgICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2lzX3NhbWVfbm9kZShXRUJLSVRfRE9N
X05PREUocCksIG5vZGUpKTsKKyAgICBub2RlID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShs
aXN0LCAxKTsKKyAgICBnX2Fzc2VydChub2RlKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25v
ZGVfaXNfc2FtZV9ub2RlKFdFQktJVF9ET01fTk9ERShkaXYpLCBub2RlKSk7CisgICAgZ19vYmpl
Y3RfdW5yZWYobGlzdCk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sK
KyAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7CisKKyAgICBnX3Rlc3RfYnVn
X2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOworCisgICAgZ190ZXN0X2FkZCgiL3dl
YmtpdC9kb21ub2RlL3Rlc3RfaGllcmFyY2h5X25hdmlnYXRpb24iLAorICAgICAgICAgICAgICAg
RG9tTm9kZUZpeHR1cmUsIEhUTUxfRE9DVU1FTlRfSElFUkFSQ0hZX05BVklHQVRJT04sCisgICAg
ICAgICAgICAgICBkb21fbm9kZV9maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF9k
b21fbm9kZV9oaWVyYXJjaHlfbmF2aWdhdGlvbiwKKyAgICAgICAgICAgICAgIGRvbV9ub2RlX2Zp
eHR1cmVfdGVhcmRvd24pOworCisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9kb21ub2RlL3Rlc3Rf
aW5zZXJ0aW9uIiwKKyAgICAgICAgICAgICAgIERvbU5vZGVGaXh0dXJlLCBIVE1MX0RPQ1VNRU5U
X05PREVfSU5TRVJUSU9OLAorICAgICAgICAgICAgICAgZG9tX25vZGVfZml4dHVyZV9zZXR1cCwK
KyAgICAgICAgICAgICAgIHRlc3RfZG9tX25vZGVfaW5zZXJ0aW9uLAorICAgICAgICAgICAgICAg
ZG9tX25vZGVfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICByZXR1cm4gZ190ZXN0X3J1bigpOwor
fQorCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0
ZG93bmxvYWQuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3Rkb3du
bG9hZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ZThkZWQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0ZG93
bmxvYWQuYwpAQCAtMCwwICsxLDMyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBDaHJp
c3RpYW4gRHl3YW4gPGNocmlzdGlhbkB0d290b2FzdHMuZGU+CisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxnbGli
L2dzdGRpby5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKworR01haW5Mb29wKiBsb29w
OworY2hhciogdGVtcG9yYXJ5RmlsZW5hbWUgPSBOVUxMOworV2ViS2l0RG93bmxvYWQqIHRoZURv
d25sb2FkID0gTlVMTDsKKworc3RhdGljIHZvaWQKK3Rlc3Rfd2Via2l0X2Rvd25sb2FkX2NyZWF0
ZSh2b2lkKQoreworICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0OworICAgIFdlYktp
dERvd25sb2FkKiBkb3dubG9hZDsKKyAgICBjb25zdCBnY2hhciogdXJpID0gImh0dHA6Ly9leGFt
cGxlLmNvbSI7CisgICAgZ2NoYXIqIHRtcERpcjsKKworICAgIHJlcXVlc3QgPSB3ZWJraXRfbmV0
d29ya19yZXF1ZXN0X25ldyh1cmkpOworICAgIGRvd25sb2FkID0gd2Via2l0X2Rvd25sb2FkX25l
dyhyZXF1ZXN0KTsKKyAgICBnX29iamVjdF91bnJlZihyZXF1ZXN0KTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIod2Via2l0X2Rvd25sb2FkX2dldF91cmkoZG93bmxvYWQpLCA9PSwgdXJpKTsKKyAgICBn
X2Fzc2VydCh3ZWJraXRfZG93bmxvYWRfZ2V0X25ldHdvcmtfcmVxdWVzdChkb3dubG9hZCkgPT0g
cmVxdWVzdCk7CisgICAgZ19hc3NlcnQoZ19zdHJyc3RyKHVyaSwgd2Via2l0X2Rvd25sb2FkX2dl
dF9zdWdnZXN0ZWRfZmlsZW5hbWUoZG93bmxvYWQpKSk7CisgICAgZ19hc3NlcnQod2Via2l0X2Rv
d25sb2FkX2dldF9zdGF0dXMoZG93bmxvYWQpID09IFdFQktJVF9ET1dOTE9BRF9TVEFUVVNfQ1JF
QVRFRCk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9kb3dubG9hZF9nZXRfdG90YWxfc2l6ZShkb3du
bG9hZCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG93bmxvYWRfZ2V0X2N1cnJlbnRfc2l6ZShk
b3dubG9hZCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG93bmxvYWRfZ2V0X3Byb2dyZXNzKGRv
d25sb2FkKSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9kb3dubG9hZF9nZXRfZWxhcHNlZF90aW1l
KGRvd25sb2FkKSk7CisgICAgdG1wRGlyID0gZ19maWxlbmFtZV90b191cmkoZ19nZXRfdG1wX2Rp
cigpLCBOVUxMLCBOVUxMKTsKKyAgICB3ZWJraXRfZG93bmxvYWRfc2V0X2Rlc3RpbmF0aW9uX3Vy
aShkb3dubG9hZCwgdG1wRGlyKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodG1wRGlyLCA9PSwgd2Vi
a2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbl91cmkoZG93bmxvYWQpKTs7CisgICAgZ19mcmVl
KHRtcERpcik7CisgICAgZ19vYmplY3RfdW5yZWYoZG93bmxvYWQpOworfQorCitzdGF0aWMgZ2Jv
b2xlYW4KK25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX3JlcXVlc3RlZF9jYihXZWJLaXRXZWJW
aWV3KiB3ZWJfdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBX
ZWJLaXRXZWJGcmFtZSogd2ViX2ZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFdlYk5hdmlnYXRpb25BY3Rpb24qIGFjdGlv
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRXZWJQb2xp
Y3lEZWNpc2lvbiogZGVjaXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICB3ZWJraXRfd2ViX3BvbGljeV9kZWNpc2lvbl9k
b3dubG9hZChkZWNpc2lvbik7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkCitu
b3RpZnlfc3RhdHVzX2NiKEdPYmplY3QqIG9iamVjdCwgR1BhcmFtU3BlYyogcHNwZWMsIGdwb2lu
dGVyIGRhdGEpCit7CisgICAgV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkID0gV0VCS0lUX0RPV05M
T0FEKG9iamVjdCk7CisgICAgc3dpdGNoICh3ZWJraXRfZG93bmxvYWRfZ2V0X3N0YXR1cyhkb3du
bG9hZCkpIHsKKyAgICBjYXNlIFdFQktJVF9ET1dOTE9BRF9TVEFUVVNfRklOSVNIRUQ6CisgICAg
Y2FzZSBXRUJLSVRfRE9XTkxPQURfU1RBVFVTX0VSUk9SOgorICAgICAgICBnX21haW5fbG9vcF9x
dWl0KGxvb3ApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9ET1dOTE9BRF9TVEFU
VVNfQ0FOQ0VMTEVEOgorICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyBn
Ym9vbGVhbgorc2V0X2ZpbGVuYW1lKGdjaGFyKiBmaWxlbmFtZSkKK3sKKyAgICBnY2hhciAqdXJp
ID0gZ19maWxlbmFtZV90b191cmkoZmlsZW5hbWUsIE5VTEwsIE5VTEwpOworCisgICAgd2Via2l0
X2Rvd25sb2FkX3NldF9kZXN0aW5hdGlvbl91cmkodGhlRG93bmxvYWQsIHVyaSk7CisgICAgZ19m
cmVlKHVyaSk7CisKKyAgICB3ZWJraXRfZG93bmxvYWRfc3RhcnQodGhlRG93bmxvYWQpOworICAg
IHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQKK2hhbmRsZV9kb3dubG9hZF9yZXF1ZXN0
ZWRfY2IoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnYm9vbGVhbiogYmVlblRoZXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
Ym9vbGVhbiBhc3luY2gpCit7CisgICAgdGhlRG93bmxvYWQgPSBkb3dubG9hZDsKKyAgICAqYmVl
blRoZXJlID0gVFJVRTsKKworICAgIGlmICh0ZW1wb3JhcnlGaWxlbmFtZSkgeworICAgICAgICBp
ZiAoYXN5bmNoKSB7CisgICAgICAgICAgICBnX2lkbGVfYWRkKChHU291cmNlRnVuYylzZXRfZmls
ZW5hbWUsIHRlbXBvcmFyeUZpbGVuYW1lKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGdjaGFyICp1cmkgPSBnX2ZpbGVuYW1lX3RvX3VyaSh0ZW1wb3JhcnlGaWxlbmFtZSwgTlVMTCwg
TlVMTCk7CisgICAgICAgICAgICBpZiAodXJpKQorICAgICAgICAgICAgICAgIHdlYmtpdF9kb3du
bG9hZF9zZXRfZGVzdGluYXRpb25fdXJpKGRvd25sb2FkLCB1cmkpOworICAgICAgICAgICAgZ19m
cmVlKHVyaSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KGRvd25s
b2FkLCAibm90aWZ5OjpzdGF0dXMiLAorICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhu
b3RpZnlfc3RhdHVzX2NiKSwgTlVMTCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZG93bmxvYWRf
cmVxdWVzdGVkX2NiKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LAorICAgICAgICAgICAgICAgICAg
ICAgIFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICBnYm9v
bGVhbiogYmVlblRoZXJlKQoreworICAgIGhhbmRsZV9kb3dubG9hZF9yZXF1ZXN0ZWRfY2IoZG93
bmxvYWQsIGJlZW5UaGVyZSwgRkFMU0UpOworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMg
Z2Jvb2xlYW4KK2Rvd25sb2FkX3JlcXVlc3RlZF9hc3luY2hfY2IoV2ViS2l0V2ViVmlldyogd2Vi
X3ZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdERvd25sb2FkKiBkb3du
bG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4qIGJlZW5UaGVyZSkK
K3sKKyAgICBoYW5kbGVfZG93bmxvYWRfcmVxdWVzdGVkX2NiKGRvd25sb2FkLCBiZWVuVGhlcmUs
IFRSVUUpOworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZAordGVzdF93ZWJraXRf
ZG93bmxvYWRfcGVyZm9ybShnYm9vbGVhbiBhc3luY2gpCit7CisgICAgV2ViS2l0V2ViVmlldyog
d2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIEdD
YWxsYmFjayBkb3dubG9hZFJlcXVlc3RDYWxsYmFjayA9IE5VTEw7CisKKyAgICBnX29iamVjdF9y
ZWZfc2luayhHX09CSkVDVCh3ZWJWaWV3KSk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZp
ZXcsICJuYXZpZ2F0aW9uLXBvbGljeS1kZWNpc2lvbi1yZXF1ZXN0ZWQiLAorICAgICAgICAgICAg
ICAgICAgICAgR19DQUxMQkFDSyhuYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9yZXF1ZXN0ZWRf
Y2IpLAorICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICBpZiAoYXN5bmNoKQorICAg
ICAgICBkb3dubG9hZFJlcXVlc3RDYWxsYmFjayA9IEdfQ0FMTEJBQ0soZG93bmxvYWRfcmVxdWVz
dGVkX2FzeW5jaF9jYik7CisgICAgZWxzZQorICAgICAgICBkb3dubG9hZFJlcXVlc3RDYWxsYmFj
ayA9IEdfQ0FMTEJBQ0soZG93bmxvYWRfcmVxdWVzdGVkX2NiKTsKKworICAgIGdib29sZWFuIGJl
ZW5UaGVyZSA9IEZBTFNFOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgImRvd25sb2Fk
LXJlcXVlc3RlZCIsCisgICAgICAgICAgICAgICAgICAgICBkb3dubG9hZFJlcXVlc3RDYWxsYmFj
aywgJmJlZW5UaGVyZSk7CisKKyAgICAvKiBQcmVwYXJhdGlvbjsgRklYTUU6IHdlIHNob3VsZCBt
b3ZlIHRoaXMgY29kZSB0byBhIHRlc3QKKyAgICAgKiB1dGlsaXRpZXMgZmlsZSwgYmVjYXVzZSB3
ZSBoYXZlIGEgdmVyeSBzaW1pbGFyIG9uZSBpbgorICAgICAqIHRlc3R3ZWJmcmFtZS5jICovCisg
ICAgR0Vycm9yICplcnJvciA9IE5VTEw7CisgICAgZ2NoYXIqIGZpbGVuYW1lOworICAgIGludCBm
ZCA9IGdfZmlsZV9vcGVuX3RtcCgid2Via2l0LXRlc3R3ZWJkb3dubG9hZC1YWFhYWFgiLCAmZmls
ZW5hbWUsICZlcnJvcik7CisgICAgY2xvc2UoZmQpOworCisgICAgaWYgKGVycm9yKQorICAgICAg
ICBnX2NyaXRpY2FsKCJGYWlsZWQgdG8gb3BlbiBhIHRlbXBvcmFyeSBmaWxlIGZvciB3cml0aW5n
OiAlcy4iLCBlcnJvci0+bWVzc2FnZSk7CisKKyAgICBpZiAoZ191bmxpbmsoZmlsZW5hbWUpID09
IC0xKQorICAgICAgICBnX2NyaXRpY2FsKCJGYWlsZWQgdG8gZGVsZXRlIHRoZSB0ZW1wb3Jhcnkg
ZmlsZTogJXMuIiwgZ19zdHJlcnJvcihlcnJubykpOworCisgICAgdGhlRG93bmxvYWQgPSBOVUxM
OworICAgIHRlbXBvcmFyeUZpbGVuYW1lID0gZmlsZW5hbWU7CisKKyAgICBsb29wID0gZ19tYWlu
X2xvb3BfbmV3KE5VTEwsIFRSVUUpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh3ZWJW
aWV3LCAiaHR0cDovL2dub21lLm9yZy8iKTsKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisK
KyAgICBnX2Fzc2VydF9jbXBpbnQoYmVlblRoZXJlLCA9PSwgVFJVRSk7CisKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoZ19maWxlX3Rlc3QodGVtcG9yYXJ5RmlsZW5hbWUsIEdfRklMRV9URVNUX0lTX1JF
R1VMQVIpLCA9PSwgVFJVRSk7CisKKyAgICBnX3VubGluayh0ZW1wb3JhcnlGaWxlbmFtZSk7Cisg
ICAgZ19mcmVlKHRlbXBvcmFyeUZpbGVuYW1lKTsKKyAgICB0ZW1wb3JhcnlGaWxlbmFtZSA9IE5V
TEw7CisKKyAgICBnX21haW5fbG9vcF91bnJlZihsb29wKTsKKyAgICBnX29iamVjdF91bnJlZih3
ZWJWaWV3KTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3Rfd2Via2l0X2Rvd25sb2FkX3N5bmNoKHZv
aWQpCit7CisgICAgdGVzdF93ZWJraXRfZG93bmxvYWRfcGVyZm9ybShGQUxTRSk7Cit9CisKK3N0
YXRpYyB2b2lkCit0ZXN0X3dlYmtpdF9kb3dubG9hZF9hc3luY2godm9pZCkKK3sKKyAgICB0ZXN0
X3dlYmtpdF9kb3dubG9hZF9wZXJmb3JtKFRSVUUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gbWlt
ZV90eXBlX3BvbGljeV9kZWNpc2lvbl9yZXF1ZXN0ZWRfY2IoV2ViS2l0V2ViVmlldyogdmlldywg
V2ViS2l0V2ViRnJhbWUqIGZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0LCBjb25z
dCBjaGFyKiBtaW1lX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV2ViS2l0V2ViUG9saWN5RGVjaXNpb24qIGRlY2lzaW9uLCBncG9p
bnRlciBkYXRhKQoreworICAgIHdlYmtpdF93ZWJfcG9saWN5X2RlY2lzaW9uX2Rvd25sb2FkKGRl
Y2lzaW9uKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQgaWRsZV9xdWl0X2xv
b3BfY2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIEdQYXJhbVNwZWMqIHBzcGVjLCBncG9pbnRl
ciBkYXRhKQoreworICAgIGlmICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYl92
aWV3KSA9PSBXRUJLSVRfTE9BRF9GSU5JU0hFRCB8fAorICAgICAgICB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X2xvYWRfc3RhdHVzKHdlYl92aWV3KSA9PSBXRUJLSVRfTE9BRF9GQUlMRUQpCisgICAgICAg
IGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3dlYmtpdF9k
b3dubG9hZF9kYXRhKHZvaWQpCit7CisgICAgZ2Jvb2xlYW4gYmVlblRoZXJlID0gRkFMU0U7Cisg
ICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3Zp
ZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOworCisgICAgZ19zaWdu
YWxfY29ubmVjdCh3ZWJWaWV3LCAiZG93bmxvYWQtcmVxdWVzdGVkIiwKKyAgICAgICAgICAgICAg
ICAgICAgIEdfQ0FMTEJBQ0soZG93bmxvYWRfcmVxdWVzdGVkX2NiKSwKKyAgICAgICAgICAgICAg
ICAgICAgICZiZWVuVGhlcmUpOworCisgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAibm90
aWZ5Ojpsb2FkLXN0YXR1cyIsCisgICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKGlkbGVf
cXVpdF9sb29wX2NiKSwKKyAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgZ19zaWdu
YWxfY29ubmVjdCh3ZWJWaWV3LCAibWltZS10eXBlLXBvbGljeS1kZWNpc2lvbi1yZXF1ZXN0ZWQi
LAorICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhtaW1lX3R5cGVfcG9saWN5X2RlY2lz
aW9uX3JlcXVlc3RlZF9jYiksCisgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKworICAgIGxv
b3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisKKyAgICAvKiBXZSdyZSB0ZXN0aW5n
IGZvciBhIGNyYXNoLCBzbyBqdXN0IG5vdCBjcmFzaGluZyBpcyBhIHBhc3MgKi8KKyAgICB3ZWJr
aXRfd2ViX3ZpZXdfbG9hZF91cmkod2ViVmlldywgImRhdGE6YXBwbGljYXRpb24vb2N0ZWN0LXN0
cmVhbSwiKTsKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICBnX2Fzc2VydF9jbXBp
bnQoYmVlblRoZXJlLCA9PSwgVFJVRSk7CisKKyAgICBnX21haW5fbG9vcF91bnJlZihsb29wKTsK
KyAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKK30KKworc3RhdGljIHZvaWQgbm90aWZ5RG93
bmxvYWRTdGF0dXNDYWxsYmFjayhHT2JqZWN0ICpvYmplY3QsIEdQYXJhbVNwZWMgKnBzcGVjLCBn
cG9pbnRlciBkYXRhKQoreworICAgIFdlYktpdERvd25sb2FkICpkb3dubG9hZCA9IFdFQktJVF9E
T1dOTE9BRChvYmplY3QpOworICAgIFdlYktpdE5ldHdvcmtSZXNwb25zZSAqcmVzcG9uc2UgPSB3
ZWJraXRfZG93bmxvYWRfZ2V0X25ldHdvcmtfcmVzcG9uc2UoZG93bmxvYWQpOworICAgIFNvdXBN
ZXNzYWdlICptZXNzYWdlID0gd2Via2l0X25ldHdvcmtfcmVzcG9uc2VfZ2V0X21lc3NhZ2UocmVz
cG9uc2UpOworCisgICAgc3dpdGNoICh3ZWJraXRfZG93bmxvYWRfZ2V0X3N0YXR1cyhkb3dubG9h
ZCkpIHsKKyAgICBjYXNlIFdFQktJVF9ET1dOTE9BRF9TVEFUVVNfRVJST1I6CisgICAgICAgIGdf
YXNzZXJ0X2NtcGludChtZXNzYWdlLT5zdGF0dXNfY29kZSwgPT0sIDQwNCk7CisgICAgICAgIGdf
bWFpbl9sb29wX3F1aXQobG9vcCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0RP
V05MT0FEX1NUQVRVU19GSU5JU0hFRDoKKyAgICBjYXNlIFdFQktJVF9ET1dOTE9BRF9TVEFUVVNf
Q0FOQ0VMTEVEOgorICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk
IHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIgKnNlcnZlciwgU291cE1lc3NhZ2UgKm1lc3NhZ2Us
IGNvbnN0IGNoYXIgKnBhdGgsIEdIYXNoVGFibGUgKnF1ZXJ5LCBTb3VwQ2xpZW50Q29udGV4dCAq
Y29udGV4dCwgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAh
PSBTT1VQX01FVEhPRF9HRVQpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVz
c2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05P
VF9GT1VORCk7CisgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9u
c2VfYm9keSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2Rvd25sb2FkX25vdF9mb3Vu
ZCh2b2lkKQoreworICAgIFNvdXBTZXJ2ZXIgKnNlcnZlciA9IHNvdXBfc2VydmVyX25ldyhTT1VQ
X1NFUlZFUl9QT1JULCAwLCBOVUxMKTsKKyAgICBzb3VwX3NlcnZlcl9ydW5fYXN5bmMoc2VydmVy
KTsKKyAgICBzb3VwX3NlcnZlcl9hZGRfaGFuZGxlcihzZXJ2ZXIsIE5VTEwsIHNlcnZlckNhbGxi
YWNrLCBOVUxMLCBOVUxMKTsKKyAgICBTb3VwVVJJICpiYXNlVVJJID0gc291cF91cmlfbmV3KCJo
dHRwOi8vMTI3LjAuMC4xLyIpOworICAgIHNvdXBfdXJpX3NldF9wb3J0KGJhc2VVUkksIHNvdXBf
c2VydmVyX2dldF9wb3J0KHNlcnZlcikpOworCisgICAgU291cFVSSSAqdXJpID0gc291cF91cmlf
bmV3X3dpdGhfYmFzZShiYXNlVVJJLCAiL2ZvbyIpOworICAgIGNoYXIgKnVyaVN0cmluZyA9IHNv
dXBfdXJpX3RvX3N0cmluZyh1cmksIEZBTFNFKTsKKyAgICBzb3VwX3VyaV9mcmVlKHVyaSk7CisK
KyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworICAgIFdlYktpdE5ldHdv
cmtSZXF1ZXN0ICpyZXF1ZXN0ID0gd2Via2l0X25ldHdvcmtfcmVxdWVzdF9uZXcodXJpU3RyaW5n
KTsKKyAgICBnX2ZyZWUgKHVyaVN0cmluZyk7CisgICAgV2ViS2l0RG93bmxvYWQgKmRvd25sb2Fk
ID0gd2Via2l0X2Rvd25sb2FkX25ldyhyZXF1ZXN0KTsKKyAgICBnX29iamVjdF91bnJlZihyZXF1
ZXN0KTsKKworICAgIHdlYmtpdF9kb3dubG9hZF9zZXRfZGVzdGluYXRpb25fdXJpKGRvd25sb2Fk
LCAiZmlsZTovLy90bXAvZm9vIik7CisgICAgZ19zaWduYWxfY29ubmVjdChkb3dubG9hZCwgIm5v
dGlmeTo6c3RhdHVzIiwgR19DQUxMQkFDSyhub3RpZnlEb3dubG9hZFN0YXR1c0NhbGxiYWNrKSwg
TlVMTCk7CisKKyAgICB3ZWJraXRfZG93bmxvYWRfc3RhcnQoZG93bmxvYWQpOworICAgIGdfbWFp
bl9sb29wX3J1bihsb29wKTsKKworICAgIGdfb2JqZWN0X3VucmVmKGRvd25sb2FkKTsKKyAgICBn
X21haW5fbG9vcF91bnJlZihsb29wKTsKKyAgICBzb3VwX3VyaV9mcmVlKGJhc2VVUkkpOworICAg
IGdfb2JqZWN0X3VucmVmKHNlcnZlcik7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiog
YXJndikKK3sKKyAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7CisKKyAgICBn
X3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOworICAgIGdfdGVzdF9h
ZGRfZnVuYygiL3dlYmtpdC9kb3dubG9hZC9jcmVhdGUiLCB0ZXN0X3dlYmtpdF9kb3dubG9hZF9j
cmVhdGUpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9kb3dubG9hZC9zeW5jaCIsIHRl
c3Rfd2Via2l0X2Rvd25sb2FkX3N5bmNoKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQv
ZG93bmxvYWQvYXN5bmNoIiwgdGVzdF93ZWJraXRfZG93bmxvYWRfYXN5bmNoKTsKKyAgICBnX3Rl
c3RfYWRkX2Z1bmMoIi93ZWJraXQvZG93bmxvYWQvZGF0YSIsIHRlc3Rfd2Via2l0X2Rvd25sb2Fk
X2RhdGEpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9kb3dubG9hZC9ub3QtZm91bmQi
LCB0ZXN0X3dlYmtpdF9kb3dubG9hZF9ub3RfZm91bmQpOworICAgIHJldHVybiBnX3Rlc3RfcnVu
ICgpOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsv
dGVzdGZhdmljb25kYXRhYmFzZS5jIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRH
dGsvdGVzdGZhdmljb25kYXRhYmFzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjQ3MmRhNDkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdEd0ay90ZXN0ZmF2aWNvbmRhdGFiYXNlLmMKQEAgLTAsMCArMSwyNzYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgInRlc3RfdXRpbHMuaCIKKyNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgorI2luY2x1ZGUg
PGd0ay9ndGsuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0
Lmg+CisKK2NvbnN0IGludCBnSWNvblNpemUgPSAxNjsKKworR01haW5Mb29wICpsb29wOworY2hh
ciAqYmFzZVVSSTsKKworc3RhdGljIHZvaWQKK3NlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIgKnNl
cnZlciwgU291cE1lc3NhZ2UgKm1lc3NhZ2UsIGNvbnN0IGNoYXIgKnBhdGgsIEdIYXNoVGFibGUg
KnF1ZXJ5LCBTb3VwQ2xpZW50Q29udGV4dCAqY29udGV4dCwgdm9pZCAqZGF0YSkKK3sKKyAgICBp
ZiAobWVzc2FnZS0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgeworICAgICAgICBzb3VwX21l
c3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVz
c2FnZSwgU09VUF9TVEFUVVNfT0spOworCisgICAgY2hhciAqY29udGVudHM7CisgICAgZ3NpemUg
bGVuZ3RoOworICAgIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2Zhdmljb24uaWNvIikpIHsKKyAg
ICAgICAgR0Vycm9yICplcnJvciA9IE5VTEw7CisKKyAgICAgICAgZ19maWxlX2dldF9jb250ZW50
cygiYmxhbmsuaWNvIiwgJmNvbnRlbnRzLCAmbGVuZ3RoLCAmZXJyb3IpOworICAgICAgICBnX2Fz
c2VydCghZXJyb3IpOworICAgIH0gZWxzZSB7CisgICAgICAgIGNvbnRlbnRzID0gZ19zdHJkdXAo
IjxodG1sPjxib2R5PnRlc3Q8L2JvZHk+PC9odG1sPiIpOworICAgICAgICBsZW5ndGggPSBzdHJs
ZW4oY29udGVudHMpOworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNz
YWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBjb250ZW50cywgbGVuZ3RoKTsK
KyAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsK
K30KKworc3RhdGljIHZvaWQgZGVsZXRlRGF0YWJhc2VGaWxlSWZFeGlzdHMoY29uc3QgY2hhciAq
ZGF0YWJhc2VQYXRoKQoreworICAgIGlmICghZ19maWxlX3Rlc3QoZGF0YWJhc2VQYXRoLCBHX0ZJ
TEVfVEVTVF9JU19ESVIpKQorICAgICAgICByZXR1cm47CisKKyAgICBjaGFyICpkYXRhYmFzZUZp
bGVuYW1lID0gZ19idWlsZF9maWxlbmFtZShkYXRhYmFzZVBhdGgsICJXZWJwYWdlSWNvbnMuZGIi
LCBOVUxMKTsKKyAgICBpZiAoZ191bmxpbmsoZGF0YWJhc2VGaWxlbmFtZSkgPT0gLTEpIHsKKyAg
ICAgICAgZ19mcmVlKGRhdGFiYXNlRmlsZW5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgZ19mcmVlKGRhdGFiYXNlRmlsZW5hbWUpOworICAgIGdfcm1kaXIoZGF0YWJhc2VQYXRo
KTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYktpdEZhdmljb25EYXRhYmFzZVNldFBhdGgoKQor
eworICAgIGNoYXIgKmRhdGFiYXNlUGF0aCA9IGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfdG1wX2Rp
cigpLCAid2Via2l0LXRlc3RmYXZpY29uZGF0YWJhc2UiLCBOVUxMKTsKKyAgICBkZWxldGVEYXRh
YmFzZUZpbGVJZkV4aXN0cyhkYXRhYmFzZVBhdGgpOworCisgICAgV2ViS2l0RmF2aWNvbkRhdGFi
YXNlICpkYXRhYmFzZSA9IHdlYmtpdF9nZXRfZmF2aWNvbl9kYXRhYmFzZSgpOworICAgIHdlYmtp
dF9mYXZpY29uX2RhdGFiYXNlX3NldF9wYXRoKGRhdGFiYXNlLCBkYXRhYmFzZVBhdGgpOworCisg
ICAgZ19hc3NlcnRfY21wc3RyKGRhdGFiYXNlUGF0aCwgPT0sIHdlYmtpdF9mYXZpY29uX2RhdGFi
YXNlX2dldF9wYXRoKGRhdGFiYXNlKSk7CisKKyAgICBnX2ZyZWUoZGF0YWJhc2VQYXRoKTsKK30K
KworLy8gU2VlIHRoZSBjb21tZW50IGluIG1haW4oKSBmdW5jdGlvbiB0aGF0IGdvZXMgd2l0aCB0
aGlzIHNhbWUgZ3VhcmQuCisjaWZkZWYgTkRFQlVHCisKK3N0YXRpYyB2b2lkIGZhdmljb25EYXRh
YmFzZUdldFZhbGlkRmF2aWNvbkNhbGxiYWNrKEdPYmplY3QgKnNvdXJjZU9iamVjdCwgR0FzeW5j
UmVzdWx0ICpyZXN1bHQsIHZvaWQgKnVzZXJEYXRhKQoreworICAgIGdib29sZWFuICpiZWVuSGVy
ZSA9IChnYm9vbGVhbiopdXNlckRhdGE7CisgICAgR0Vycm9yICplcnJvciA9IE5VTEw7CisgICAg
R2RrUGl4YnVmICppY29uID0gd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fcGl4
YnVmX2ZpbmlzaChXRUJLSVRfRkFWSUNPTl9EQVRBQkFTRShzb3VyY2VPYmplY3QpLCByZXN1bHQs
ICZlcnJvcik7CisgICAgZ19hc3NlcnQoaWNvbik7CisgICAgZ19vYmplY3RfdW5yZWYoaWNvbik7
CisKKyAgICAqYmVlbkhlcmUgPSBUUlVFOworCisgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsK
K30KKworc3RhdGljIHZvaWQgZmF2aWNvbkRhdGFiYXNlR2V0SW52YWxpZEZhdmljb25DYWxsYmFj
ayhHT2JqZWN0ICpzb3VyY2VPYmplY3QsIEdBc3luY1Jlc3VsdCAqcmVzdWx0LCB2b2lkICp1c2Vy
RGF0YSkKK3sKKyAgICBnYm9vbGVhbiAqYmVlbkhlcmUgPSAoZ2Jvb2xlYW4qKXVzZXJEYXRhOwor
ICAgIEdFcnJvciAqZXJyb3IgPSBOVUxMOworICAgIEdka1BpeGJ1ZiAqaWNvbiA9IHdlYmtpdF9m
YXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX3BpeGJ1Zl9maW5pc2goV0VCS0lUX0ZBVklDT05f
REFUQUJBU0Uoc291cmNlT2JqZWN0KSwgcmVzdWx0LCAmZXJyb3IpOworICAgIGdfYXNzZXJ0KCFp
Y29uKTsKKworICAgICpiZWVuSGVyZSA9IFRSVUU7CisKKyAgICBnX21haW5fbG9vcF9xdWl0KGxv
b3ApOworfQorCitzdGF0aWMgdm9pZCBmYXZpY29uRGF0YWJhc2VHZXRGYXZpY29uQ2FuY2VsbGVk
Q2FsbGJhY2soR09iamVjdCAqc291cmNlT2JqZWN0LCBHQXN5bmNSZXN1bHQgKnJlc3VsdCwgdm9p
ZCAqdXNlckRhdGEpCit7CisgICAgZ2Jvb2xlYW4gKmJlZW5IZXJlID0gKGdib29sZWFuKil1c2Vy
RGF0YTsKKyAgICBHRXJyb3IgKmVycm9yID0gTlVMTDsKKyAgICBHZGtQaXhidWYgKmljb24gPSB3
ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl9waXhidWZfZmluaXNoKFdFQktJVF9G
QVZJQ09OX0RBVEFCQVNFKHNvdXJjZU9iamVjdCksIHJlc3VsdCwgJmVycm9yKTsKKyAgICBnX2Fz
c2VydCghaWNvbik7CisgICAgZ19hc3NlcnQoZXJyb3IgJiYgZ19lcnJvcl9tYXRjaGVzKGVycm9y
LCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX0NBTkNFTExFRCkpOworCisgICAgKmJlZW5IZXJlID0g
VFJVRTsKKworICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUg
dm9pZCBxdWl0TWFpbkxvb3BJZkxvYWRDb21wbGV0ZWQoZ2Jvb2xlYW4gKmljb25PclBhZ2VMb2Fk
ZWQpCit7CisgICAgaWYgKCppY29uT3JQYWdlTG9hZGVkKQorICAgICAgICBnX21haW5fbG9vcF9x
dWl0KGxvb3ApOworICAgIGVsc2UKKyAgICAgICAgKmljb25PclBhZ2VMb2FkZWQgPSBUUlVFOwor
fQorCitzdGF0aWMgdm9pZCBpZGxlUXVpdExvb3BDYWxsYmFjayhXZWJLaXRXZWJWaWV3ICp3ZWJW
aWV3LCBHUGFyYW1TcGVjICpwYXJhbVNwZWMsIGdib29sZWFuICppY29uT3JQYWdlTG9hZGVkKQor
eworICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2Fk
X3N0YXR1cyh3ZWJWaWV3KTsKKworICAgIGlmIChzdGF0dXMgPT0gV0VCS0lUX0xPQURfRklOSVNI
RUQgfHwgc3RhdHVzID09IFdFQktJVF9MT0FEX0ZBSUxFRCkKKyAgICAgICAgcXVpdE1haW5Mb29w
SWZMb2FkQ29tcGxldGVkKGljb25PclBhZ2VMb2FkZWQpOworfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRXZWJWaWV3SWNvbkxvYWRlZChXZWJLaXRGYXZpY29uRGF0YWJhc2UgKmRhdGFiYXNlLCBjb25z
dCBjaGFyICpmcmFtZVVSSSwgZ2Jvb2xlYW4gKmljb25PclBhZ2VMb2FkZWQpCit7CisgICAgcXVp
dE1haW5Mb29wSWZMb2FkQ29tcGxldGVkKGljb25PclBhZ2VMb2FkZWQpOworfQorCitzdGF0aWMg
dm9pZCBsb2FkVVJJKGNvbnN0IGNoYXIgKnVyaSkKK3sKKyAgICBXZWJLaXRXZWJWaWV3ICp2aWV3
ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ2Jvb2xlYW4g
aWNvbk9yUGFnZUxvYWRlZCA9IEZBTFNFOworCisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJp
KHZpZXcsIHVyaSk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHZpZXcsICJub3RpZnk6OmxvYWQt
c3RhdHVzIiwgR19DQUxMQkFDSyhpZGxlUXVpdExvb3BDYWxsYmFjayksICZpY29uT3JQYWdlTG9h
ZGVkKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KHZpZXcsICJpY29uLWxvYWRlZCIsIEdfQ0FMTEJB
Q0sod2Via2l0V2ViVmlld0ljb25Mb2FkZWQpLCAmaWNvbk9yUGFnZUxvYWRlZCk7CisKKyAgICBn
X21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0
X21hdGNoZWQodmlldywgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgJmljb25PclBh
Z2VMb2FkZWQpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gZmF2aWNvbkRhdGFiYXNlR2V0VmFsaWRG
YXZpY29uSWRsZSh2b2lkICp1c2VyRGF0YSkKK3sKKyAgICB3ZWJraXRfZmF2aWNvbl9kYXRhYmFz
ZV9nZXRfZmF2aWNvbl9waXhidWYod2Via2l0X2dldF9mYXZpY29uX2RhdGFiYXNlKCksIGJhc2VV
UkksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdJY29u
U2l6ZSwgZ0ljb25TaXplLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmYXZpY29uRGF0YWJhc2VHZXRWYWxpZEZhdmljb25DYWxsYmFjaywgdXNl
ckRhdGEpOworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGdib29sZWFuIGZhdmljb25E
YXRhYmFzZUdldEludmFsaWRGYXZpY29uSWRsZSh2b2lkICp1c2VyRGF0YSkKK3sKKyAgICB3ZWJr
aXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl9waXhidWYod2Via2l0X2dldF9mYXZpY29u
X2RhdGFiYXNlKCksICJodHRwOi8vd3d3LndlYmtpdGd0ay5vcmcvIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ0ljb25TaXplLCBnSWNvblNpemUsIE5V
TEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhdmlj
b25EYXRhYmFzZUdldEludmFsaWRGYXZpY29uQ2FsbGJhY2ssIHVzZXJEYXRhKTsKKyAgICByZXR1
cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBmYXZpY29uRGF0YWJhc2VHZXRGYXZpY29u
Q2FuY2VsbGVkSWRsZSh2b2lkICp1c2VyRGF0YSkKK3sKKyAgICBHQ2FuY2VsbGFibGUgKmNhbmNl
bGxhYmxlID0gZ19jYW5jZWxsYWJsZV9uZXcoKTsKKyAgICB3ZWJraXRfZmF2aWNvbl9kYXRhYmFz
ZV9nZXRfZmF2aWNvbl9waXhidWYod2Via2l0X2dldF9mYXZpY29uX2RhdGFiYXNlKCksIGJhc2VV
UkksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdJY29u
U2l6ZSwgZ0ljb25TaXplLCBjYW5jZWxsYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNvbkNhbmNlbGxlZENh
bGxiYWNrLCB1c2VyRGF0YSk7CisgICAgZ19jYW5jZWxsYWJsZV9jYW5jZWwoY2FuY2VsbGFibGUp
OworICAgIGdfb2JqZWN0X3VucmVmKGNhbmNlbGxhYmxlKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9
CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VHZXRGYXZpY29uKCkKK3sK
KyAgICBnYm9vbGVhbiBiZWVuVG9JY29uQ2FsbGJhY2s7CisKKyAgICBsb29wID0gZ19tYWluX2xv
b3BfbmV3KE5VTEwsIFRSVUUpOworCisgICAgLyogTG9hZCB1cmkgdG8gbWFrZSBzdXJlIGZhdmlj
b24gaXMgYWRkZWQgdG8gZGF0YWJhc2UuICovCisgICAgbG9hZFVSSShiYXNlVVJJKTsKKworICAg
IGJlZW5Ub0ljb25DYWxsYmFjayA9IEZBTFNFOworICAgIGdfaWRsZV9hZGQoKEdTb3VyY2VGdW5j
KWZhdmljb25EYXRhYmFzZUdldFZhbGlkRmF2aWNvbklkbGUsICZiZWVuVG9JY29uQ2FsbGJhY2sp
OworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKyAgICBnX2Fzc2VydChiZWVuVG9JY29uQ2Fs
bGJhY2spOworCisgICAgYmVlblRvSWNvbkNhbGxiYWNrID0gRkFMU0U7CisgICAgZ19pZGxlX2Fk
ZCgoR1NvdXJjZUZ1bmMpZmF2aWNvbkRhdGFiYXNlR2V0SW52YWxpZEZhdmljb25JZGxlLCAmYmVl
blRvSWNvbkNhbGxiYWNrKTsKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisgICAgZ19hc3Nl
cnQoYmVlblRvSWNvbkNhbGxiYWNrKTsKKworICAgIGJlZW5Ub0ljb25DYWxsYmFjayA9IEZBTFNF
OworICAgIGdfaWRsZV9hZGQoKEdTb3VyY2VGdW5jKWZhdmljb25EYXRhYmFzZUdldEZhdmljb25D
YW5jZWxsZWRJZGxlLCAmYmVlblRvSWNvbkNhbGxiYWNrKTsKKyAgICBnX21haW5fbG9vcF9ydW4o
bG9vcCk7CisgICAgZ19hc3NlcnQoYmVlblRvSWNvbkNhbGxiYWNrKTsKK30KKworc3RhdGljIHZv
aWQgdGVzdFdlYktpdEZhdmljb25EYXRhYmFzZUdldEZhdmljb25VUkkoKQoreworICAgIGNoYXIg
Kmljb25VUkkgPSB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl91cmkod2Via2l0
X2dldF9mYXZpY29uX2RhdGFiYXNlKCksIGJhc2VVUkkpOworICAgIGNoYXIgKmV4cGVjdGVkVVJJ
ID0gZ19zdHJkdXBfcHJpbnRmKCIlc2Zhdmljb24uaWNvIiwgYmFzZVVSSSk7CisgICAgZ19hc3Nl
cnRfY21wc3RyKGljb25VUkksID09LCBleHBlY3RlZFVSSSk7CisgICAgZ19mcmVlKGV4cGVjdGVk
VVJJKTsKKyAgICBnX2ZyZWUoaWNvblVSSSk7Cit9CisKKyNlbmRpZgorCitzdGF0aWMgdm9pZCB0
ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlUmVtb3ZlQWxsKHZvaWQpCit7CisgICAgV2ViS2l0RmF2
aWNvbkRhdGFiYXNlICpkYXRhYmFzZSA9IHdlYmtpdF9nZXRfZmF2aWNvbl9kYXRhYmFzZSgpOwor
ICAgIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2NsZWFyKGRhdGFiYXNlKTsKKyAgICBjaGFyICpp
Y29uVVJJID0gd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fdXJpKGRhdGFiYXNl
LCBiYXNlVVJJKTsKKyAgICBnX2Fzc2VydCghaWNvblVSSSk7CisgICAgZ19mcmVlKGljb25VUkkp
OworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlQ2xvc2VEYXRhYmFz
ZSh2b2lkKQoreworICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSAqZGF0YWJhc2UgPSB3ZWJraXRf
Z2V0X2Zhdmljb25fZGF0YWJhc2UoKTsKKyAgICBjaGFyICpkYXRhYmFzZVBhdGggPSBnX3N0cmR1
cCh3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfcGF0aChkYXRhYmFzZSkpOworICAgIHdlYmtp
dF9mYXZpY29uX2RhdGFiYXNlX3NldF9wYXRoKGRhdGFiYXNlLCAwKTsKKyAgICBkZWxldGVEYXRh
YmFzZUZpbGVJZkV4aXN0cyhkYXRhYmFzZVBhdGgpOworICAgIGdfZnJlZShkYXRhYmFzZVBhdGgp
OworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgZ3RrX3Rlc3Rf
aW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAgLyogVGhpcyBob3BlZnVsbHkgbWFrZXMg
dGhlIHRlc3QgaW5kZXBlbmRlbnQgb2YgdGhlIHBhdGggaXQncyBjYWxsZWQgZnJvbS4gKi8KKyAg
ICB0ZXN0dXRpbHNfcmVsYXRpdmVfY2hkaXIoIlRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0R3RrL3Jlc291cmNlcy90ZXN0Lmh0bWwiLCBhcmd2WzBdKTsKKworICAgIFNvdXBTZXJ2ZXIg
KnNlcnZlciA9IHNvdXBfc2VydmVyX25ldyhTT1VQX1NFUlZFUl9QT1JULCAwLCBOVUxMKTsKKyAg
ICBzb3VwX3NlcnZlcl9ydW5fYXN5bmMoc2VydmVyKTsKKworICAgIHNvdXBfc2VydmVyX2FkZF9o
YW5kbGVyKHNlcnZlciwgTlVMTCwgc2VydmVyQ2FsbGJhY2ssIE5VTEwsIE5VTEwpOworCisgICAg
U291cFVSSSAqc291cFVSSSA9IHNvdXBfdXJpX25ldygiaHR0cDovLzEyNy4wLjAuMS8iKTsKKyAg
ICBzb3VwX3VyaV9zZXRfcG9ydChzb3VwVVJJLCBzb3VwX3NlcnZlcl9nZXRfcG9ydChzZXJ2ZXIp
KTsKKworICAgIGJhc2VVUkkgPSBzb3VwX3VyaV90b19zdHJpbmcoc291cFVSSSwgRkFMU0UpOwor
ICAgIHNvdXBfdXJpX2ZyZWUoc291cFVSSSk7CisKKyAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBz
Oi8vYnVncy53ZWJraXQub3JnLyIpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9mYXZp
Y29uZGF0YWJhc2Uvc2V0LXBhdGgiLCB0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlU2V0UGF0aCk7
CisKKyAgICAvLyBUaGVzZSB0d28gdGVzdHMgd2lsbCB0cmlnZ2VyIGFuIEFTU0VSVElPTiBvbiBk
ZWJ1ZyBidWlsZHMgZHVlCisgICAgLy8gdG8gaHR0cDovL3dlYmtpdC5vcmcvYi82NzU4Mi4gUmVt
b3ZlIHRoZSBndWFyZHMgb25jZSB0aGUgYnVnIGlzIGZpeGVkLgorI2lmZGVmIE5ERUJVRworICAg
IGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9mYXZpY29uZGF0YWJhc2UvZ2V0LWZhdmljb24iLCB0
ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNvbik7CisgICAgZ190ZXN0X2FkZF9mdW5j
KCIvd2Via2l0L2Zhdmljb25kYXRhYmFzZS9nZXQtZmF2aWNvbi11cmkiLCB0ZXN0V2ViS2l0RmF2
aWNvbkRhdGFiYXNlR2V0RmF2aWNvblVSSSk7CisjZW5kaWYKKworICAgIGdfdGVzdF9hZGRfZnVu
YygiL3dlYmtpdC9mYXZpY29uZGF0YWJhc2UvcmVtb3ZlLWFsbCIsIHRlc3RXZWJLaXRGYXZpY29u
RGF0YWJhc2VSZW1vdmVBbGwpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9mYXZpY29u
ZGF0YWJhc2UvY2xvc2UtZGIiLCB0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlQ2xvc2VEYXRhYmFz
ZSk7CisKKyAgICByZXR1cm4gZ190ZXN0X3J1bigpOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGdsb2JhbHMuYyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RnbG9iYWxzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNGI5ZWM0ZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RnbG9iYWxzLmMKQEAgLTAsMCArMSwxMTAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQ29sbGFib3JhIEx0ZC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKyNpbmNs
dWRlIDx3ZWJraXQvd2Via2l0Lmg+CisKKy8vIE1ha2Ugc3VyZSB0aGUgc2Vzc2lvbiBpcyBpbml0
aWFsaXplZCBwcm9wZXJseSB3aGVuIHdlYmtpdF9nZXRfZGVmYXVsdF9zZXNzaW9uKCkgaXMgY2Fs
bGVkLgorc3RhdGljIHZvaWQgdGVzdF9nbG9iYWxzX2RlZmF1bHRfc2Vzc2lvbigpCit7CisgICAg
Z190ZXN0X2J1ZygiMzY3NTQiKTsKKworICAgIFNvdXBTZXNzaW9uKiBzZXNzaW9uID0gd2Via2l0
X2dldF9kZWZhdWx0X3Nlc3Npb24oKTsKKyAgICBzb3VwX3Nlc3Npb25fcmVtb3ZlX2ZlYXR1cmVf
YnlfdHlwZShzZXNzaW9uLCBXRUJLSVRfVFlQRV9TT1VQX0FVVEhfRElBTE9HKTsKKworICAgIC8v
IFRoaXMgbWFrZXMgc3VyZSBvdXIgaW5pdGlhbGl6YXRpb24gcmFuLgorICAgIGdfYXNzZXJ0KHNv
dXBfc2Vzc2lvbl9nZXRfZmVhdHVyZShzZXNzaW9uLCBTT1VQX1RZUEVfQ09OVEVOVF9ERUNPREVS
KSAhPSBOVUxMKTsKKworICAgIC8vIENyZWF0aW5nIGEgV2ViVmlldyBzaG91bGQgbWFrZSBzdXJl
IHRoZSBzZXNzaW9uIGlzCisgICAgLy8gaW5pdGlhbGl6ZWQsIGFuZCBub3QgbWVzcyB3aXRoIG91
ciBjaGFuZ2VzLgorICAgIFdlYktpdFdlYlZpZXcqIHdlYl92aWV3ID0gV0VCS0lUX1dFQl9WSUVX
KHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmplY3RfcmVmX3Npbmsod2ViX3ZpZXcp
OworICAgIGdfb2JqZWN0X3VucmVmKHdlYl92aWV3KTsKKworICAgIC8vIFRoZXNlIG1ha2VzIHN1
cmUgb3VyIG1vZGlmaWNhdGlvbiB3YXMga2VwdC4KKyAgICBnX2Fzc2VydChzb3VwX3Nlc3Npb25f
Z2V0X2ZlYXR1cmUoc2Vzc2lvbiwgU09VUF9UWVBFX0NPTlRFTlRfREVDT0RFUikgIT0gTlVMTCk7
CisgICAgZ19hc3NlcnQoc291cF9zZXNzaW9uX2dldF9mZWF0dXJlKHNlc3Npb24sIFdFQktJVF9U
WVBFX1NPVVBfQVVUSF9ESUFMT0cpID09IE5VTEwpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2ds
b2JhbHNfc2VjdXJpdHlfcG9saWN5KCkKK3sKKyAgICAvLyBDaGVjayBkZWZhdWx0IHBvbGljeSBm
b3Igd2VsbCBrbm93biBzY2hlbWVzLgorICAgIFdlYktpdFNlY3VyaXR5UG9saWN5IHBvbGljeSA9
IHdlYmtpdF9nZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJodHRwIik7CisgICAg
Z3VpbnQgbWFzayA9IFdFQktJVF9TRUNVUklUWV9QT0xJQ1lfQ09SU19FTkFCTEVEOworICAgIGdf
YXNzZXJ0X2NtcHVpbnQocG9saWN5ICYgbWFzaywgPT0sIG1hc2spOworCisgICAgcG9saWN5ID0g
d2Via2l0X2dldF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUoImh0dHBzIik7CisgICAg
bWFzayA9IFdFQktJVF9TRUNVUklUWV9QT0xJQ1lfU0VDVVJFIHwgV0VCS0lUX1NFQ1VSSVRZX1BP
TElDWV9DT1JTX0VOQUJMRUQ7CisgICAgZ19hc3NlcnRfY21wdWludChwb2xpY3kgJiBtYXNrLCA9
PSwgbWFzayk7CisKKyAgICBwb2xpY3kgPSB3ZWJraXRfZ2V0X3NlY3VyaXR5X3BvbGljeV9mb3Jf
dXJpX3NjaGVtZSgiZmlsZSIpOworICAgIG1hc2sgPSBXRUJLSVRfU0VDVVJJVFlfUE9MSUNZX0xP
Q0FMOworICAgIGdfYXNzZXJ0X2NtcHVpbnQocG9saWN5ICYgbWFzaywgPT0sIG1hc2spOworCisg
ICAgcG9saWN5ID0gd2Via2l0X2dldF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUoImRh
dGEiKTsKKyAgICBtYXNrID0gV0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9OT19BQ0NFU1NfVE9fT1RI
RVJfU0NIRU1FIHwgV0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9TRUNVUkU7CisgICAgZ19hc3NlcnRf
Y21wdWludChwb2xpY3kgJiBtYXNrLCA9PSwgbWFzayk7CisKKyAgICBwb2xpY3kgPSB3ZWJraXRf
Z2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiYWJvdXQiKTsKKyAgICBtYXNrID0g
V0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9OT19BQ0NFU1NfVE9fT1RIRVJfU0NIRU1FIHwgV0VCS0lU
X1NFQ1VSSVRZX1BPTElDWV9TRUNVUkUgfCBXRUJLSVRfU0VDVVJJVFlfUE9MSUNZX0VNUFRZX0RP
Q1VNRU5UOworICAgIGdfYXNzZXJ0X2NtcHVpbnQocG9saWN5ICYgbWFzaywgPT0sIG1hc2spOwor
CisgICAgLy8gQ3VzdG9tIHNjaGVtZS4KKyAgICBwb2xpY3kgPSB3ZWJraXRfZ2V0X3NlY3VyaXR5
X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiZm9vIik7CisgICAgZ19hc3NlcnQoIXBvbGljeSk7CisK
KyAgICBwb2xpY3kgfD0gV0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9MT0NBTDsKKyAgICB3ZWJraXRf
c2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiZm9vIiwgcG9saWN5KTsKKyAgICBn
X2Fzc2VydF9jbXB1aW50KHdlYmtpdF9nZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1l
KCJmb28iKSwgPT0sIHBvbGljeSk7CisKKyAgICBwb2xpY3kgfD0gV0VCS0lUX1NFQ1VSSVRZX1BP
TElDWV9OT19BQ0NFU1NfVE9fT1RIRVJfU0NIRU1FOworICAgIHdlYmtpdF9zZXRfc2VjdXJpdHlf
cG9saWN5X2Zvcl91cmlfc2NoZW1lKCJmb28iLCBwb2xpY3kpOworICAgIGdfYXNzZXJ0X2NtcHVp
bnQod2Via2l0X2dldF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUoImZvbyIpLCA9PSwg
cG9saWN5KTsKKworICAgIHBvbGljeSB8PSBXRUJLSVRfU0VDVVJJVFlfUE9MSUNZX0RJU1BMQVlf
SVNPTEFURUQ7CisgICAgd2Via2l0X3NldF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUo
ImZvbyIsIHBvbGljeSk7CisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfZ2V0X3NlY3VyaXR5
X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiZm9vIiksID09LCBwb2xpY3kpOworCisgICAgcG9saWN5
IHw9IFdFQktJVF9TRUNVUklUWV9QT0xJQ1lfU0VDVVJFOworICAgIHdlYmtpdF9zZXRfc2VjdXJp
dHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJmb28iLCBwb2xpY3kpOworICAgIGdfYXNzZXJ0X2Nt
cHVpbnQod2Via2l0X2dldF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUoImZvbyIpLCA9
PSwgcG9saWN5KTsKKworICAgIHBvbGljeSB8PSBXRUJLSVRfU0VDVVJJVFlfUE9MSUNZX0NPUlNf
RU5BQkxFRDsKKyAgICB3ZWJraXRfc2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgi
Zm9vIiwgcG9saWN5KTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9nZXRfc2VjdXJpdHlf
cG9saWN5X2Zvcl91cmlfc2NoZW1lKCJmb28iKSwgPT0sIHBvbGljeSk7CisKKyAgICBwb2xpY3kg
fD0gV0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9FTVBUWV9ET0NVTUVOVDsKKyAgICB3ZWJraXRfc2V0
X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiZm9vIiwgcG9saWN5KTsKKyAgICBnX2Fz
c2VydF9jbXB1aW50KHdlYmtpdF9nZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJm
b28iKSwgPT0sIHBvbGljeSk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikK
K3sKKyAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7CisKKyAgICBnX3Rlc3Rf
YnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOworICAgIGdfdGVzdF9hZGRfZnVu
YygiL3dlYmtpdC9nbG9iYWxzL2RlZmF1bHRfc2Vzc2lvbiIsCisgICAgICAgICAgICAgICAgICAg
IHRlc3RfZ2xvYmFsc19kZWZhdWx0X3Nlc3Npb24pOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dl
YmtpdC9nbG9iYWxzL3NlY3VyaXR5LXBvbGljeSIsCisgICAgICAgICAgICAgICAgICAgIHRlc3Rf
Z2xvYmFsc19zZWN1cml0eV9wb2xpY3kpOworICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7Cit9CisK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RoaXR0
ZXN0cmVzdWx0LmMgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0aGl0
dGVzdHJlc3VsdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiZjAxMTAK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90
ZXN0aGl0dGVzdHJlc3VsdC5jCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA5IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8ZXJybm8u
aD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgorI2luY2x1
ZGUgPHdlYmtpdC93ZWJraXQuaD4KKwordHlwZWRlZiBzdHJ1Y3QgeworICBjaGFyKiBkYXRhOwor
ICBndWludCBmbGFnOworfSBUZXN0SW5mbzsKKworc3RhdGljIEdNYWluTG9vcCogbG9vcDsKKwor
dHlwZWRlZiBzdHJ1Y3QgeworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXc7CisgICAgVGVzdElu
Zm8qIGluZm87Cit9IEhpdFRlc3RSZXN1bHRGaXh0dXJlOworCitUZXN0SW5mbyoKK3Rlc3RfaW5m
b19uZXcoY29uc3QgY2hhciogZGF0YSwgZ3VpbnQgZmxhZykKK3sKKyAgICBUZXN0SW5mbyogaW5m
bzsKKworICAgIGluZm8gPSBnX3NsaWNlX25ldyhUZXN0SW5mbyk7CisgICAgaW5mby0+ZGF0YSA9
IGdfc3RyZHVwKGRhdGEpOworICAgIGluZm8tPmZsYWcgPSBmbGFnOworCisgICAgcmV0dXJuIGlu
Zm87Cit9CisKK3ZvaWQKK3Rlc3RfaW5mb19kZXN0cm95KFRlc3RJbmZvKiBpbmZvKQoreworICAg
IGdfZnJlZShpbmZvLT5kYXRhKTsKKyAgICBnX3NsaWNlX2ZyZWUoVGVzdEluZm8sIGluZm8pOwor
fQorCitzdGF0aWMgdm9pZCBoaXRfdGVzdF9yZXN1bHRfZml4dHVyZV9zZXR1cChIaXRUZXN0UmVz
dWx0Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGZpeHR1cmUt
PndlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBn
X29iamVjdF9yZWZfc2luayhmaXh0dXJlLT53ZWJWaWV3KTsKKyAgICBsb29wID0gZ19tYWluX2xv
b3BfbmV3KE5VTEwsIFRSVUUpOworICAgIGZpeHR1cmUtPmluZm8gPSAoVGVzdEluZm8qKWRhdGE7
Cit9CisKK3N0YXRpYyB2b2lkIGhpdF90ZXN0X3Jlc3VsdF9maXh0dXJlX3RlYXJkb3duKEhpdFRl
c3RSZXN1bHRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgZ19v
YmplY3RfdW5yZWYoZml4dHVyZS0+d2ViVmlldyk7CisgICAgZ19tYWluX2xvb3BfdW5yZWYobG9v
cCk7CisgICAgdGVzdF9pbmZvX2Rlc3Ryb3koZml4dHVyZS0+aW5mbyk7Cit9CisKK3N0YXRpYyB2
b2lkCitsb2FkX3N0YXR1c19jYihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LAorICAgICAgICAgICAg
ICAgR1BhcmFtU3BlYyogc3BlYywKKyAgICAgICAgICAgICAgIGdwb2ludGVyIGRhdGEpCit7Cisg
ICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3Rh
dHVzKHdlYlZpZXcpOworICAgIFRlc3RJbmZvKiBpbmZvID0gKFRlc3RJbmZvKilkYXRhOworCisg
ICAgaWYgKHN0YXR1cyA9PSBXRUJLSVRfTE9BRF9GSU5JU0hFRCkgeworICAgICAgICBXZWJLaXRI
aXRUZXN0UmVzdWx0KiByZXN1bHQ7CisgICAgICAgIGd1aW50IGNvbnRleHQ7CisgICAgICAgIEdk
a0V2ZW50KiBldmVudCA9IGdka19ldmVudF9uZXcoR0RLX0JVVFRPTl9QUkVTUyk7CisgICAgICAg
IFdlYktpdERPTU5vZGUqIG5vZGU7CisgICAgICAgIGdpbnQgeCwgeTsKKworICAgICAgICAvKiBD
bG9zZSBlbm91Z2ggdG8gMCwwICovCisgICAgICAgIGV2ZW50LT5idXR0b24ueCA9IDU7CisgICAg
ICAgIGV2ZW50LT5idXR0b24ueSA9IDU7CisKKyAgICAgICAgcmVzdWx0ID0gd2Via2l0X3dlYl92
aWV3X2dldF9oaXRfdGVzdF9yZXN1bHQod2ViVmlldywgKEdka0V2ZW50QnV0dG9uKikgZXZlbnQp
OworICAgICAgICBnZGtfZXZlbnRfZnJlZShldmVudCk7CisgICAgICAgIGdfYXNzZXJ0KHJlc3Vs
dCk7CisKKyAgICAgICAgZ19vYmplY3RfZ2V0KHJlc3VsdCwgImNvbnRleHQiLCAmY29udGV4dCwg
TlVMTCk7CisgICAgICAgIGdfYXNzZXJ0KGNvbnRleHQgJiBpbmZvLT5mbGFnKTsKKworICAgICAg
ICBnX29iamVjdF9nZXQocmVzdWx0LCAiaW5uZXItbm9kZSIsICZub2RlLCBOVUxMKTsKKyAgICAg
ICAgZ19hc3NlcnQobm9kZSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfTk9ERShu
b2RlKSk7CisKKyAgICAgICAgZ19vYmplY3RfZ2V0KHJlc3VsdCwgIngiLCAmeCwgInkiLCAmeSwg
TlVMTCk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludCh4LCA9PSwgNSk7CisgICAgICAgIGdfYXNz
ZXJ0X2NtcGludCh5LCA9PSwgNSk7CisKKyAgICAgICAgLyogV2UgY2FuIG9ubHkgdGVzdCB0aGVz
ZSBub2RlIHR5cGVzIGF0IHRoZSBtb21lbnQuIEluIHRoZQorICAgICAgICAgKiBpbnB1dCBjYXNl
IHRoZXJlIHNlZW1zIHRvIGJlIGFuIGV4dHJhIGxheWVyIHdpdGggYSBESVYgb24KKyAgICAgICAg
ICogdG9wIG9mIHRoZSBpbnB1dCwgd2hpY2ggZ2V0cyBhc3NpZ25lZCB0byB0aGUgaW5uZXItbm9k
ZS4KKyAgICAgICAgICogdGFnICovCisgICAgICAgIGlmIChpbmZvLT5mbGFnID09IFdFQktJVF9I
SVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9ET0NVTUVOVCkKKyAgICAgICAgICAgIGdfYXNzZXJ0KFdF
QktJVF9ET01fSVNfSFRNTF9IVE1MX0VMRU1FTlQobm9kZSkpOworICAgICAgICBlbHNlIGlmIChp
bmZvLT5mbGFnID09IFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9JTUFHRSkKKyAgICAg
ICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9JTUFHRV9FTEVNRU5UKG5vZGUpKTsK
KyAgICAgICAgZWxzZSBpZiAoaW5mby0+ZmxhZyA9PSBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NP
TlRFWFRfTElOSykgeworICAgICAgICAgICAgLyogVGhlIGhpdCB0ZXN0IHdpbGwgZ2l2ZSB1cyB0
aGUgaW5uZXIgdGV4dCBub2RlLCB3ZSB3YW50CisgICAgICAgICAgICAgKiB0aGUgQSB0YWcgKi8K
KyAgICAgICAgICAgIFdlYktpdERPTU5vZGUqIHBhcmVudCA9IHdlYmtpdF9kb21fbm9kZV9nZXRf
cGFyZW50X25vZGUobm9kZSk7CisgICAgICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hU
TUxfQU5DSE9SX0VMRU1FTlQocGFyZW50KSk7CisgICAgICAgIH0KKworICAgICAgICBnX29iamVj
dF91bnJlZihyZXN1bHQpOworICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworICAgIH0K
K30KKworc3RhdGljIHZvaWQKK3Rlc3Rfd2Via2l0X2hpdF90ZXN0X3Jlc3VsdChIaXRUZXN0UmVz
dWx0Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIFRlc3RJbmZv
KiBpbmZvID0gKFRlc3RJbmZvKilkYXRhOworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9
IHsgMCwgMCwgNTAsIDUwIH07CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoZml4
dHVyZS0+d2ViVmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby0+ZGF0
YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRleHQvaHRtbCIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJ1dGYtOCIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJmaWxlOi8vIik7CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19X
SURHRVQoZml4dHVyZS0+d2ViVmlldyksICZhbGxvY2F0aW9uKTsKKyAgICBnX3NpZ25hbF9jb25u
ZWN0KGZpeHR1cmUtPndlYlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhs
b2FkX3N0YXR1c19jYiksIGluZm8pOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKK30KKwor
aW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIGd0a190ZXN0X2luaXQoJmFy
Z2MsICZhcmd2LCBOVUxMKTsKKworICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvIik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2hpdHRlc3RyZXN1bHQvZG9j
dW1lbnQiLCBIaXRUZXN0UmVzdWx0Rml4dHVyZSwgCisgICAgICAgICAgICAgICB0ZXN0X2luZm9f
bmV3KCI8aHRtbD48Ym9keT48aDE+V2ViS2l0R1RLKyE8L2gxPjwvYm9keT48L2h0bWw+IiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhU
X0RPQ1VNRU5UKSwKKyAgICAgICAgICAgICAgIGhpdF90ZXN0X3Jlc3VsdF9maXh0dXJlX3NldHVw
LCB0ZXN0X3dlYmtpdF9oaXRfdGVzdF9yZXN1bHQsIGhpdF90ZXN0X3Jlc3VsdF9maXh0dXJlX3Rl
YXJkb3duKTsKKyAgICAvKiBXZSBoYXJkY29kZSBhbGwgZWxlbWVudHMgdG8gYmUgYXQgMCwwIHNv
IHRoYXQgd2Uga25vdyB3aGVyZSB0bworICAgICAqIGdlbmVyYXRlIHRoZSBidXR0b24gZXZlbnRz
ICovCisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9oaXR0ZXN0cmVzdWx0L2ltYWdlIiwgSGl0VGVz
dFJlc3VsdEZpeHR1cmUsCisgICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KCI8aHRtbD48Ym9k
eT48aW1nIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDowOyB0b3A6MCdzcmM9JzB4ZGVh
ZGJlZWYnIHdpZHRoPTUwIGhlaWdodD01MD48L2ltZz48L2JvZHk+PC9odG1sPiIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9JTUFH
RSksCisgICAgICAgICAgICAgICBoaXRfdGVzdF9yZXN1bHRfZml4dHVyZV9zZXR1cCwgdGVzdF93
ZWJraXRfaGl0X3Rlc3RfcmVzdWx0LCBoaXRfdGVzdF9yZXN1bHRfZml4dHVyZV90ZWFyZG93bik7
CisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9oaXR0ZXN0cmVzdWx0L2VkaXRhYmxlIiwgSGl0VGVz
dFJlc3VsdEZpeHR1cmUsCisgICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KCI8aHRtbD48Ym9k
eT48aW5wdXQgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjA7IHRvcDowJyBzaXplPScz
NSc+PC9pbnB1dD4+PC9ib2R5PjwvaHRtbD4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfRURJVEFCTEUpLAorICAgICAgICAgICAg
ICAgaGl0X3Rlc3RfcmVzdWx0X2ZpeHR1cmVfc2V0dXAsIHRlc3Rfd2Via2l0X2hpdF90ZXN0X3Jl
c3VsdCwgaGl0X3Rlc3RfcmVzdWx0X2ZpeHR1cmVfdGVhcmRvd24pOworICAgIGdfdGVzdF9hZGQo
Ii93ZWJraXQvaGl0dGVzdHJlc3VsdC9saW5rIiwgSGl0VGVzdFJlc3VsdEZpeHR1cmUsCisgICAg
ICAgICAgICAgICB0ZXN0X2luZm9fbmV3KCI8aHRtbD48Ym9keT48YSBzdHlsZT0ncG9zaXRpb246
YWJzb2x1dGU7IGxlZnQ6MDsgdG9wOjAnIGhyZWY9J2h0dHA6Ly93d3cuZXhhbXBsZS5jb20nPkhF
TExPIFdPUkxEPC9hPjwvYm9keT48L2h0bWw+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0xJTkspLAorICAgICAgICAgICAgICAg
aGl0X3Rlc3RfcmVzdWx0X2ZpeHR1cmVfc2V0dXAsIHRlc3Rfd2Via2l0X2hpdF90ZXN0X3Jlc3Vs
dCwgaGl0X3Rlc3RfcmVzdWx0X2ZpeHR1cmVfdGVhcmRvd24pOworICAgICAgICAgICAgICAgCisg
ICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7Cit9CisKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RodHRwYmFja2VuZC5jIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGh0dHBiYWNrZW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uOTM3NzY4NwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RodHRwYmFja2VuZC5jCkBAIC0wLDAgKzEsNzUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR3VzdGF2byBOb3JvbmhhIFNpbHZhCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgor
I2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgorI2luY2x1ZGUgPGd0
ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+CisKKy8vIE5vdCB5ZXQgcHVibGlj
IEFQSQorU291cE1lc3NhZ2UqIHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfZ2V0X21lc3NhZ2UoV2Vi
S2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QpOworCitzdGF0aWMgZ2Jvb2xlYW4gbmF2aWdhdGlv
bl9wb2xpY3lfZGVjaXNpb25fcmVxdWVzdGVkX2NiKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBX
ZWJLaXRXZWJGcmFtZSogd2ViX2ZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXROZXR3b3JrUmVxdWVzdCogcmVxdWVzdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
V2ViS2l0V2ViTmF2aWdhdGlvbkFjdGlvbiogYWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRXZWJQb2xpY3lEZWNpc2lv
biogZGVjaXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdwb2ludGVyIGRhdGEpCit7CisgICAgU291cE1lc3NhZ2UqIG1lc3NhZ2Ug
PSB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X2dldF9tZXNzYWdlKHJlcXVlc3QpOworCisgICAgLyog
MSAtPiB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X3dpdGhfY29yZV9yZXF1ZXN0CisgICAgICoKKyAg
ICAgKiBUaGUgU291cE1lc3NhZ2UgaXMgY3JlYXRlZCBleGNsdXNpdmVseSBmb3IgdGhlIGVtaXNz
aW9uIG9mIHRoaXMKKyAgICAgKiBzaWduYWwuCisgICAgICovCisgICAgZ19hc3NlcnRfY21waW50
KEdfT0JKRUNUKG1lc3NhZ2UpLT5yZWZfY291bnQsID09LCAxKTsKKworICAgIHJldHVybiBGQUxT
RTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9zb3VwX21lc3NhZ2VfbGlmZXRpbWUoKQoreworICAg
IFdlYktpdFdlYlZpZXcqIHdlYl92aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmll
d19uZXcoKSk7CisKKyAgICBnX29iamVjdF9yZWZfc2luayh3ZWJfdmlldyk7CisKKyAgICBnX3Np
Z25hbF9jb25uZWN0KHdlYl92aWV3LCAibmF2aWdhdGlvbi1wb2xpY3ktZGVjaXNpb24tcmVxdWVz
dGVkIiwKKyAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sobmF2aWdhdGlvbl9wb2xpY3lf
ZGVjaXNpb25fcmVxdWVzdGVkX2NiKSwKKyAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisg
ICAgLyogbG9hZF91cmkgd2lsbCB0cmlnZ2VyIHRoZSBuYXZpZ2F0aW9uLXBvbGljeS1kZWNpc2lv
bi1yZXF1ZXN0ZWQKKyAgICAgKiBzaWduYWwgZW1pc3Npb247CisgICAgICovCisgICAgd2Via2l0
X3dlYl92aWV3X2xvYWRfdXJpKHdlYl92aWV3LCAiaHR0cDovLzEyNy4wLjAuMS8iKTsKKworICAg
IGdfb2JqZWN0X3VucmVmKHdlYl92aWV3KTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIq
KiBhcmd2KQoreworICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKKworICAg
IGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7CisgICAgZ190ZXN0
X2FkZF9mdW5jKCIvd2Via2l0L3NvdXBtZXNzYWdlL2xpZmV0aW1lIiwgdGVzdF9zb3VwX21lc3Nh
Z2VfbGlmZXRpbWUpOworICAgIHJldHVybiBnX3Rlc3RfcnVuICgpOworfQpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGtleWV2ZW50cy5jIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGtleWV2ZW50cy5jCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjZDAxZjMKLS0tIC9kZXYvbnVsbAorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0a2V5ZXZlbnRzLmMKQEAgLTAs
MCArMSwzOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgTWFydGluIFJvYmlu
c29uIDxtcm9iaW5zb25Ad2Via2l0Lm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
IDxlcnJuby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lu
Y2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgorI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSlNDb250ZXh0UmVmLmg+CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjaGFyKiBwYWdlOwor
ICAgIGNoYXIqIHRleHQ7CisgICAgZ2Jvb2xlYW4gc2hvdWxkQmVIYW5kbGVkOworfSBUZXN0SW5m
bzsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIEd0a1dpZGdldCogd2luZG93OworICAgIFdlYktp
dFdlYlZpZXcqIHdlYlZpZXc7CisgICAgR01haW5Mb29wKiBsb29wOworICAgIFRlc3RJbmZvKiBp
bmZvOworfSBLZXlFdmVudEZpeHR1cmU7CisKK1Rlc3RJbmZvKgordGVzdF9pbmZvX25ldyhjb25z
dCBjaGFyKiBwYWdlLCBnYm9vbGVhbiBzaG91bGRCZUhhbmRsZWQpCit7CisgICAgVGVzdEluZm8q
IGluZm87CisKKyAgICBpbmZvID0gZ19zbGljZV9uZXcoVGVzdEluZm8pOworICAgIGluZm8tPnBh
Z2UgPSBnX3N0cmR1cChwYWdlKTsKKyAgICBpbmZvLT5zaG91bGRCZUhhbmRsZWQgPSBzaG91bGRC
ZUhhbmRsZWQ7CisgICAgaW5mby0+dGV4dCA9IDA7CisKKyAgICByZXR1cm4gaW5mbzsKK30KKwor
dm9pZAordGVzdF9pbmZvX2Rlc3Ryb3koVGVzdEluZm8qIGluZm8pCit7CisgICAgZ19mcmVlKGlu
Zm8tPnBhZ2UpOworICAgIGdfZnJlZShpbmZvLT50ZXh0KTsKKyAgICBnX3NsaWNlX2ZyZWUoVGVz
dEluZm8sIGluZm8pOworfQorCitzdGF0aWMgdm9pZCBrZXlfZXZlbnRfZml4dHVyZV9zZXR1cChL
ZXlFdmVudEZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBmaXh0
dXJlLT5sb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworCisgICAgZml4dHVyZS0+
d2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7CisgICAgZml4dHVy
ZS0+d2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworCisg
ICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihmaXh0dXJlLT53aW5kb3cpLCBHVEtf
V0lER0VUKGZpeHR1cmUtPndlYlZpZXcpKTsKK30KKworc3RhdGljIHZvaWQga2V5X2V2ZW50X2Zp
eHR1cmVfdGVhcmRvd24oS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRh
dGEpCit7CisgICAgZ3RrX3dpZGdldF9kZXN0cm95KGZpeHR1cmUtPndpbmRvdyk7CisgICAgZ19t
YWluX2xvb3BfdW5yZWYoZml4dHVyZS0+bG9vcCk7CisgICAgdGVzdF9pbmZvX2Rlc3Ryb3koZml4
dHVyZS0+aW5mbyk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBrZXlfcHJlc3NfZXZlbnRfY2IoV2Vi
S2l0V2ViVmlldyogd2ViVmlldywgR2RrRXZlbnQqIGV2ZW50LCBncG9pbnRlciBkYXRhKQorewor
ICAgIEtleUV2ZW50Rml4dHVyZSogZml4dHVyZSA9IChLZXlFdmVudEZpeHR1cmUqKWRhdGE7Cisg
ICAgZ2Jvb2xlYW4gaGFuZGxlZCA9IEdUS19XSURHRVRfR0VUX0NMQVNTKGZpeHR1cmUtPndlYlZp
ZXcpLT5rZXlfcHJlc3NfZXZlbnQoR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSwgJmV2ZW50
LT5rZXkpOworICAgIGdfYXNzZXJ0X2NtcGludChoYW5kbGVkLCA9PSwgZml4dHVyZS0+aW5mby0+
c2hvdWxkQmVIYW5kbGVkKTsKKworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGdib29s
ZWFuIGtleV9yZWxlYXNlX2V2ZW50X2NiKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEdka0V2ZW50
KiBldmVudCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICAvLyBXZWJDb3JlIG5ldmVyIHNlZW1zIHRv
IG1hcmsga2V5dXAgZXZlbnRzIGFzIGhhbmRsZWQuCisgICAgS2V5RXZlbnRGaXh0dXJlKiBmaXh0
dXJlID0gKEtleUV2ZW50Rml4dHVyZSopZGF0YTsKKyAgICBnYm9vbGVhbiBoYW5kbGVkID0gR1RL
X1dJREdFVF9HRVRfQ0xBU1MoZml4dHVyZS0+d2ViVmlldyktPmtleV9wcmVzc19ldmVudChHVEtf
V0lER0VUKGZpeHR1cmUtPndlYlZpZXcpLCAmZXZlbnQtPmtleSk7CisgICAgZ19hc3NlcnQoIWhh
bmRsZWQpOworCisgICAgZ19tYWluX2xvb3BfcXVpdChmaXh0dXJlLT5sb29wKTsKKworICAgIHJl
dHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9rZXlwcmVzc19ldmVudHNfbG9hZF9z
dGF0dXNfY2IoV2ViS2l0V2ViVmlldyogd2ViVmlldywgR1BhcmFtU3BlYyogc3BlYywgZ3BvaW50
ZXIgZGF0YSkKK3sKKyAgICBLZXlFdmVudEZpeHR1cmUqIGZpeHR1cmUgPSAoS2V5RXZlbnRGaXh0
dXJlKilkYXRhOworICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3
X2dldF9sb2FkX3N0YXR1cyh3ZWJWaWV3KTsKKyAgICBpZiAoc3RhdHVzID09IFdFQktJVF9MT0FE
X0ZJTklTSEVEKSB7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2ViVmlldywg
ImtleS1wcmVzcy1ldmVudCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhr
ZXlfcHJlc3NfZXZlbnRfY2IpLCBmaXh0dXJlKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChm
aXh0dXJlLT53ZWJWaWV3LCAia2V5LXJlbGVhc2UtZXZlbnQiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIEdfQ0FMTEJBQ0soa2V5X3JlbGVhc2VfZXZlbnRfY2IpLCBmaXh0dXJlKTsKKyAgICAg
ICAgaWYgKCFndGtfdGVzdF93aWRnZXRfc2VuZF9rZXkoR1RLX1dJREdFVChmaXh0dXJlLT53ZWJW
aWV3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RrX3VuaWNvZGVf
dG9fa2V5dmFsKCdhJyksIDApKQorICAgICAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsK
KyAgICB9CisKK30KKworZ2Jvb2xlYW4gbWFwX2V2ZW50X2NiKEd0a1dpZGdldCAqd2lkZ2V0LCBH
ZGtFdmVudCogZXZlbnQsIGdwb2ludGVyIGRhdGEpCit7CisgICAgS2V5RXZlbnRGaXh0dXJlKiBm
aXh0dXJlID0gKEtleUV2ZW50Rml4dHVyZSopZGF0YTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9h
ZF9zdHJpbmcoZml4dHVyZS0+d2ViVmlldywgZml4dHVyZS0+aW5mby0+cGFnZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgInRleHQvaHRtbCIsICJ1dGYtOCIsICJmaWxlOi8vIik7
CisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZCBzZXR1cF9rZXlldmVudF90ZXN0
KEtleUV2ZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhLCBHQ2FsbGJhY2sg
bG9hZF9ldmVudF9jYWxsYmFjaykKK3sKKyAgICBmaXh0dXJlLT5pbmZvID0gKFRlc3RJbmZvKilk
YXRhOworICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2luZG93LCAibWFwLWV2ZW50IiwK
KyAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sobWFwX2V2ZW50X2NiKSwgZml4dHVyZSk7
CisKKyAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMoR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3
KSk7CisgICAgZ3RrX3dpZGdldF9zaG93KGZpeHR1cmUtPndpbmRvdyk7CisgICAgZ3RrX3dpZGdl
dF9zaG93KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldykpOworICAgIGd0a193aW5kb3dfcHJl
c2VudChHVEtfV0lORE9XKGZpeHR1cmUtPndpbmRvdykpOworCisgICAgZ19zaWduYWxfY29ubmVj
dChmaXh0dXJlLT53ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsCisgICAgICAgICAgICAg
ICAgICAgICBsb2FkX2V2ZW50X2NhbGxiYWNrLCBmaXh0dXJlKTsKKworICAgIGdfbWFpbl9sb29w
X3J1bihmaXh0dXJlLT5sb29wKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9rZXlwcmVzc19ldmVu
dHMoS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAg
c2V0dXBfa2V5ZXZlbnRfdGVzdChmaXh0dXJlLCBkYXRhLCBHX0NBTExCQUNLKHRlc3Rfa2V5cHJl
c3NfZXZlbnRzX2xvYWRfc3RhdHVzX2NiKSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBlbGVtZW50
X3RleHRfZXF1YWxfdG8oSlNDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IGdjaGFyKiB0ZXh0KQor
eworICAgIEpTU3RyaW5nUmVmIHNjcmlwdFN0cmluZyA9IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKAorICAgICAgIndpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImluXCIpLnZh
bHVlOyIpOworICAgIEpTVmFsdWVSZWYgdmFsdWUgPSBKU0V2YWx1YXRlU2NyaXB0KGNvbnRleHQs
IHNjcmlwdFN0cmluZywgMCwgMCwgMCwgMCk7CisgICAgSlNTdHJpbmdSZWxlYXNlKHNjcmlwdFN0
cmluZyk7CisKKyAgICAvLyBJZiB0aGUgdmFsdWUgaXNuJ3QgYSBzdHJpbmcsIHRoZSBlbGVtZW50
IGlzIHByb2JhYmx5IGEgZGl2CisgICAgLy8gc28gZ3JhYiB0aGUgaW5uZXJUZXh0IGluc3RlYWQu
CisgICAgaWYgKCFKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgdmFsdWUpKSB7CisgICAgICAgIEpT
U3RyaW5nUmVmIHNjcmlwdFN0cmluZyA9IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKAor
ICAgICAgICAgICJ3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJpblwiKS5pbm5lclRl
eHQ7Iik7CisgICAgICAgIHZhbHVlID0gSlNFdmFsdWF0ZVNjcmlwdChjb250ZXh0LCBzY3JpcHRT
dHJpbmcsIDAsIDAsIDAsIDApOworICAgICAgICBKU1N0cmluZ1JlbGVhc2Uoc2NyaXB0U3RyaW5n
KTsKKyAgICB9CisKKyAgICBnX2Fzc2VydChKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgdmFsdWUp
KTsKKyAgICBKU1N0cmluZ1JlZiBpbnB1dFN0cmluZyA9IEpTVmFsdWVUb1N0cmluZ0NvcHkoY29u
dGV4dCwgdmFsdWUsIDApOworICAgIGdfYXNzZXJ0KGlucHV0U3RyaW5nKTsKKworICAgIGdpbnQg
c2l6ZSA9IEpTU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShpbnB1dFN0cmluZyk7Cisg
ICAgZ2NoYXIqIGNTdHJpbmcgPSBnX21hbGxvYyhzaXplKTsKKyAgICBKU1N0cmluZ0dldFVURjhD
U3RyaW5nKGlucHV0U3RyaW5nLCBjU3RyaW5nLCBzaXplKTsKKyAgICBKU1N0cmluZ1JlbGVhc2Uo
aW5wdXRTdHJpbmcpOworCisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gZ191dGY4X2NvbGxhdGUoY1N0
cmluZywgdGV4dCkgPT0gMDsKKyAgICBnX2ZyZWUoY1N0cmluZyk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworc3RhdGljIHZvaWQgdGVzdF9pbWVfbG9hZF9zdGF0dXNfY2IoV2ViS2l0V2ViVmll
dyogd2ViVmlldywgR1BhcmFtU3BlYyogc3BlYywgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBLZXlF
dmVudEZpeHR1cmUqIGZpeHR1cmUgPSAoS2V5RXZlbnRGaXh0dXJlKilkYXRhOworICAgIFdlYktp
dExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJW
aWV3KTsKKyAgICBpZiAoc3RhdHVzICE9IFdFQktJVF9MT0FEX0ZJTklTSEVEKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCA9IHdlYmtpdF93ZWJfZnJh
bWVfZ2V0X2dsb2JhbF9jb250ZXh0KAorICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5f
ZnJhbWUod2ViVmlldykpOworICAgIGdfYXNzZXJ0KGNvbnRleHQpOworCisgICAgR3RrSU1Db250
ZXh0KiBpbUNvbnRleHQgPSAwOworICAgIGdfb2JqZWN0X2dldCh3ZWJWaWV3LCAiaW0tY29udGV4
dCIsICZpbUNvbnRleHQsIE5VTEwpOworICAgIGdfYXNzZXJ0KGltQ29udGV4dCk7CisKKyAgICAv
LyBUZXN0IHRoYXQgY29tbWl0cyB0aGF0IGhhcHBlbiBvdXRzaWRlIG9mIGtleSBldmVudHMKKyAg
ICAvLyBjaGFuZ2UgdGhlIHRleHQgZmllbGQgaW1tZWRpYXRlbHkuIFRoaXMgY2xvc2VseSByZXBs
aWNhdGVzCisgICAgLy8gdGhlIGJlaGF2aW9yIG9mIFNDSU0uCisgICAgZ19hc3NlcnQoZWxlbWVu
dF90ZXh0X2VxdWFsX3RvKGNvbnRleHQsICIiKSk7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1l
KGltQ29udGV4dCwgImNvbW1pdCIsICJhIik7CisgICAgZ19hc3NlcnQoZWxlbWVudF90ZXh0X2Vx
dWFsX3RvKGNvbnRleHQsICJhIikpOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShpbUNvbnRl
eHQsICJjb21taXQiLCAiYiIpOworICAgIGdfYXNzZXJ0KGVsZW1lbnRfdGV4dF9lcXVhbF90byhj
b250ZXh0LCAiYWIiKSk7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKGltQ29udGV4dCwgImNv
bW1pdCIsICJjIik7CisgICAgZ19hc3NlcnQoZWxlbWVudF90ZXh0X2VxdWFsX3RvKGNvbnRleHQs
ICJhYmMiKSk7CisKKyAgICBnX29iamVjdF91bnJlZihpbUNvbnRleHQpOworICAgIGdfbWFpbl9s
b29wX3F1aXQoZml4dHVyZS0+bG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfaW1lKEtleUV2
ZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIHNldHVwX2tl
eWV2ZW50X3Rlc3QoZml4dHVyZSwgZGF0YSwgR19DQUxMQkFDSyh0ZXN0X2ltZV9sb2FkX3N0YXR1
c19jYikpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gdmVyaWZ5X2NvbnRlbnRzKGdwb2ludGVyIGRh
dGEpCit7CisgICAgS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJlID0gKEtleUV2ZW50Rml4dHVyZSop
ZGF0YTsKKyAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCA9IHdlYmtpdF93ZWJfZnJhbWVf
Z2V0X2dsb2JhbF9jb250ZXh0KAorICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJh
bWUoZml4dHVyZS0+d2ViVmlldykpOworICAgIGdfYXNzZXJ0KGNvbnRleHQpOworCisgICAgZ19h
c3NlcnQoZWxlbWVudF90ZXh0X2VxdWFsX3RvKGNvbnRleHQsIGZpeHR1cmUtPmluZm8tPnRleHQp
KTsKKyAgICBnX21haW5fbG9vcF9xdWl0KGZpeHR1cmUtPmxvb3ApOworICAgIHJldHVybiBGQUxT
RTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9ibG9ja2luZ19sb2FkX3N0YXR1c19jYihXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3LCBHUGFyYW1TcGVjKiBzcGVjLCBncG9pbnRlciBkYXRhKQoreworICAg
IEtleUV2ZW50Rml4dHVyZSogZml4dHVyZSA9IChLZXlFdmVudEZpeHR1cmUqKWRhdGE7CisgICAg
V2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVz
KHdlYlZpZXcpOworICAgIGlmIChzdGF0dXMgIT0gV0VCS0lUX0xPQURfRklOSVNIRUQpCisgICAg
ICAgIHJldHVybjsKKworICAgIC8vIFRoZSBmaXJzdCBrZXlwcmVzcyBldmVudCBzaG91bGQgbm90
IG1vZGlmeSB0aGUgZmllbGQuCisgICAgZml4dHVyZS0+aW5mby0+dGV4dCA9IGdfc3RyZHVwKCJi
YyIpOworICAgIGlmICghZ3RrX3Rlc3Rfd2lkZ2V0X3NlbmRfa2V5KEdUS19XSURHRVQoZml4dHVy
ZS0+d2ViVmlldyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGtfdW5pY29k
ZV90b19rZXl2YWwoJ2EnKSwgMCkpCisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Cisg
ICAgaWYgKCFndGtfdGVzdF93aWRnZXRfc2VuZF9rZXkoR1RLX1dJREdFVChmaXh0dXJlLT53ZWJW
aWV3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGtfdW5pY29kZV90b19r
ZXl2YWwoJ2InKSwgMCkpCisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgaWYg
KCFndGtfdGVzdF93aWRnZXRfc2VuZF9rZXkoR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGtfdW5pY29kZV90b19rZXl2YWwo
J2MnKSwgMCkpCisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisKKyAgICBnX2lkbGVf
YWRkKHZlcmlmeV9jb250ZW50cywgZml4dHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfYmxv
Y2tpbmcoS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7Cisg
ICAgc2V0dXBfa2V5ZXZlbnRfdGVzdChmaXh0dXJlLCBkYXRhLCBHX0NBTExCQUNLKHRlc3RfYmxv
Y2tpbmdfbG9hZF9zdGF0dXNfY2IpKTsKK30KKworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19Y
MTEpCitzdGF0aWMgdm9pZCB0ZXN0X3hpbV9sb2FkX3N0YXR1c19jYihXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3LCBHUGFyYW1TcGVjKiBzcGVjLCBncG9pbnRlciBkYXRhKQoreworICAgIEtleUV2ZW50
Rml4dHVyZSogZml4dHVyZSA9IChLZXlFdmVudEZpeHR1cmUqKWRhdGE7CisgICAgV2ViS2l0TG9h
ZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYlZpZXcp
OworICAgIGlmIChzdGF0dXMgIT0gV0VCS0lUX0xPQURfRklOSVNIRUQpCisgICAgICAgIHJldHVy
bjsKKworICAgIEd0a0lNQ29udGV4dCogaW1Db250ZXh0ID0gMDsKKyAgICBnX29iamVjdF9nZXQo
d2ViVmlldywgImltLWNvbnRleHQiLCAmaW1Db250ZXh0LCBOVUxMKTsKKyAgICBnX2Fzc2VydChp
bUNvbnRleHQpOworCisgICAgZ2NoYXIqIG9yaWdpbmFsSWQgPSBnX3N0cmR1cChndGtfaW1fbXVs
dGljb250ZXh0X2dldF9jb250ZXh0X2lkKEdUS19JTV9NVUxUSUNPTlRFWFQoaW1Db250ZXh0KSkp
OworICAgIGd0a19pbV9tdWx0aWNvbnRleHRfc2V0X2NvbnRleHRfaWQoR1RLX0lNX01VTFRJQ09O
VEVYVChpbUNvbnRleHQpLCAieGltIik7CisKKyAgICAvLyBUZXN0IHRoYXQgY29tbWl0cyB0aGF0
IGhhcHBlbiBvdXRzaWRlIG9mIGtleSBldmVudHMKKyAgICAvLyBjaGFuZ2UgdGhlIHRleHQgZmll
bGQgaW1tZWRpYXRlbHkuIFRoaXMgY2xvc2VseSByZXBsaWNhdGVzCisgICAgLy8gdGhlIGJlaGF2
aW9yIG9mIFNDSU0uCisgICAgZml4dHVyZS0+aW5mby0+dGV4dCA9IGdfc3RyZHVwKCJkZWJpYW4i
KTsKKyAgICBpZiAoIWd0a190ZXN0X3dpZGdldF9zZW5kX2tleShHVEtfV0lER0VUKGZpeHR1cmUt
PndlYlZpZXcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RrX3VuaWNvZGVf
dG9fa2V5dmFsKCdkJyksIDApKQorICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAg
IGlmICghZ3RrX3Rlc3Rfd2lkZ2V0X3NlbmRfa2V5KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmll
dyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdka191bmljb2RlX3RvX2tleXZhbCgn
ZScpLCAwKSkKKyAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICBpZiAoIWd0a190
ZXN0X3dpZGdldF9zZW5kX2tleShHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnZGtfdW5pY29kZV90b19rZXl2YWwoJ2InKSwgMCkpCisg
ICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgaWYgKCFndGtfdGVzdF93aWRnZXRf
c2VuZF9rZXkoR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2RrX3VuaWNvZGVfdG9fa2V5dmFsKCdpJyksIDApKQorICAgICAgICBnX2Fz
c2VydF9ub3RfcmVhY2hlZCgpOworICAgIGlmICghZ3RrX3Rlc3Rfd2lkZ2V0X3NlbmRfa2V5KEdU
S19XSURHRVQoZml4dHVyZS0+d2ViVmlldyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdka191bmljb2RlX3RvX2tleXZhbCgnYScpLCAwKSkKKyAgICAgICAgZ19hc3NlcnRfbm90X3Jl
YWNoZWQoKTsKKyAgICBpZiAoIWd0a190ZXN0X3dpZGdldF9zZW5kX2tleShHVEtfV0lER0VUKGZp
eHR1cmUtPndlYlZpZXcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGtfdW5pY29k
ZV90b19rZXl2YWwoJ24nKSwgMCkpCisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisK
KyAgICBndGtfaW1fbXVsdGljb250ZXh0X3NldF9jb250ZXh0X2lkKEdUS19JTV9NVUxUSUNPTlRF
WFQoaW1Db250ZXh0KSwgb3JpZ2luYWxJZCk7CisgICAgZ19mcmVlKG9yaWdpbmFsSWQpOworICAg
IGdfb2JqZWN0X3VucmVmKGltQ29udGV4dCk7CisKKyAgICBnX2lkbGVfYWRkKHZlcmlmeV9jb250
ZW50cywgZml4dHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfeGltKEtleUV2ZW50Rml4dHVy
ZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIHNldHVwX2tleWV2ZW50X3Rl
c3QoZml4dHVyZSwgZGF0YSwgR19DQUxMQkFDSyh0ZXN0X3hpbV9sb2FkX3N0YXR1c19jYikpOwor
fQorI2VuZGlmCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBndGtf
dGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7CisKKyAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0
dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOworCisKKyAgICAvLyBXZSdsbCB0ZXN0IGlucHV0IG9u
IGEgc2xldyBvZiBkaWZmZXJlbnQgbm9kZSB0eXBlcy4gS2V5IGV2ZW50cyB0bworICAgIC8vIHRl
eHQgaW5wdXRzIGFuZCBlZGl0YWJsZSBkaXZzIHNob3VsZCBiZSBtYXJrZWQgYXMgaGFuZGxlZC4g
S2V5IGV2ZW50cworICAgIC8vIHRvIGJ1dHRvbnMgYW5kIGxpbmtzIHNob3VsZCBub3QuCisgICAg
Y29uc3QgY2hhciogdGV4dGlucHV0X2h0bWwgPSAiPGh0bWw+PGJvZHk+PGlucHV0IGlkPVwiaW5c
IiB0eXBlPVwidGV4dFwiPiIKKyAgICAgICAgIjxzY3JpcHQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ2luJykuZm9jdXMoKTs8L3NjcmlwdD48L2JvZHk+PC9odG1sPiI7CisgICAgY29uc3QgY2hh
ciogYnV0dG9uX2h0bWwgPSAiPGh0bWw+PGJvZHk+PGlucHV0IGlkPVwiaW5cIiB0eXBlPVwiYnV0
dG9uXCI+IgorICAgICAgICAiPHNjcmlwdD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW4nKS5m
b2N1cygpOzwvc2NyaXB0PjwvYm9keT48L2h0bWw+IjsKKyAgICBjb25zdCBjaGFyKiBsaW5rX2h0
bWwgPSAiPGh0bWw+PGJvZHk+PGEgaHJlZj1cImh0dHA6Ly93d3cuZ25vbWUub3JnXCIgaWQ9XCJp
blwiPiIKKyAgICAgICAgIkxJTktZIE1DTElOS0VSU09OPC9hPjxzY3JpcHQ+ZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ2luJykuZm9jdXMoKTs8L3NjcmlwdD4iCisgICAgICAgICI8L2JvZHk+PC9o
dG1sPiI7CisgICAgY29uc3QgY2hhciogZGl2X2h0bWwgPSAiPGh0bWw+PGJvZHk+PGRpdiBpZD1c
ImluXCIgY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiPiIKKyAgICAgICAgIjxzY3JpcHQ+ZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ2luJykuZm9jdXMoKTs8L3NjcmlwdD48L2JvZHk+PC9odG1sPiI7
CisKKyAgICAvLyBUaGVzZSBhcmUgc2ltaWxhciB0byB0aGUgYmxvY2tzIGFib3ZlLCBidXQgdGhl
eSBzaG91bGQgYmxvY2sgdGhlIGZpcnN0CisgICAgLy8ga2V5cHJlc3MgbW9kaWZ5aW5nIHRoZSBl
ZGl0YWJsZSBub2RlLgorICAgIGNvbnN0IGNoYXIqIHRleHRpbnB1dF9odG1sX2Jsb2NraW5nID0g
IjxodG1sPjxib2R5PiIKKyAgICAgICAgIjxpbnB1dCBpZD1cImluXCIgdHlwZT1cInRleHRcIiAi
CisgICAgICAgICJvbmtleXByZXNzPVwiaWYgKGZpcnN0KSB7ZXZlbnQucHJldmVudERlZmF1bHQo
KTtmaXJzdD1mYWxzZTt9XCI+IgorICAgICAgICAiPHNjcmlwdD5maXJzdCA9IHRydWU7XG5kb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnaW4nKS5mb2N1cygpOzwvc2NyaXB0PlxuIgorICAgICAgICAi
PC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4iOworICAgIGNvbnN0IGNoYXIqIGRpdl9odG1sX2Jsb2Nr
aW5nID0gIjxodG1sPjxib2R5PiIKKyAgICAgICAgIjxkaXYgaWQ9XCJpblwiIGNvbnRlbnRlZGl0
YWJsZT1cInRydWVcIiAiCisgICAgICAgICJvbmtleXByZXNzPVwiaWYgKGZpcnN0KSB7ZXZlbnQu
cHJldmVudERlZmF1bHQoKTtmaXJzdD1mYWxzZTt9XCI+IgorICAgICAgICAiPHNjcmlwdD5maXJz
dCA9IHRydWU7IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbicpLmZvY3VzKCk7PC9zY3JpcHQ+
XG4iCisgICAgICAgICI8L3NjcmlwdD48L2JvZHk+PC9odG1sPiI7CisKKyAgICBnX3Rlc3RfYWRk
KCIvd2Via2l0L2tleWV2ZW50cy9ldmVudC10ZXh0aW5wdXQiLCBLZXlFdmVudEZpeHR1cmUsCisg
ICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KHRleHRpbnB1dF9odG1sLCBUUlVFKSwKKyAgICAg
ICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF9r
ZXlwcmVzc19ldmVudHMsCisgICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV90ZWFyZG93
bik7CisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9rZXlldmVudHMvZXZlbnQtYnV0dG9ucyIsIEtl
eUV2ZW50Rml4dHVyZSwKKyAgICAgICAgICAgICAgIHRlc3RfaW5mb19uZXcoYnV0dG9uX2h0bWws
IEZBTFNFKSwKKyAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3NldHVwLAorICAgICAg
ICAgICAgICAgdGVzdF9rZXlwcmVzc19ldmVudHMsCisgICAgICAgICAgICAgICBrZXlfZXZlbnRf
Zml4dHVyZV90ZWFyZG93bik7CisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9rZXlldmVudHMvZXZl
bnQtbGluayIsIEtleUV2ZW50Rml4dHVyZSwKKyAgICAgICAgICAgICAgIHRlc3RfaW5mb19uZXco
bGlua19odG1sLCBGQUxTRSksCisgICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV9zZXR1
cCwKKyAgICAgICAgICAgICAgIHRlc3Rfa2V5cHJlc3NfZXZlbnRzLAorICAgICAgICAgICAgICAg
a2V5X2V2ZW50X2ZpeHR1cmVfdGVhcmRvd24pOworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQva2V5
ZXZlbnQvZXZlbnQtZGl2IiwgS2V5RXZlbnRGaXh0dXJlLAorICAgICAgICAgICAgICAgdGVzdF9p
bmZvX25ldyhkaXZfaHRtbCwgVFJVRSksCisgICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVy
ZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3Rfa2V5cHJlc3NfZXZlbnRzLAorICAgICAgICAg
ICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfdGVhcmRvd24pOworICAgIGdfdGVzdF9hZGQoIi93ZWJr
aXQva2V5ZXZlbnQvaW1lLXRleHRpbnB1dCIsIEtleUV2ZW50Rml4dHVyZSwKKyAgICAgICAgICAg
ICAgIHRlc3RfaW5mb19uZXcodGV4dGlucHV0X2h0bWwsIFRSVUUpLAorICAgICAgICAgICAgICAg
a2V5X2V2ZW50X2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0X2ltZSwKKyAgICAg
ICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3RlYXJkb3duKTsKKyAgICBnX3Rlc3RfYWRkKCIv
d2Via2l0L2tleWV2ZW50L2ltZS1kaXYiLCBLZXlFdmVudEZpeHR1cmUsCisgICAgICAgICAgICAg
ICB0ZXN0X2luZm9fbmV3KGRpdl9odG1sLCBUUlVFKSwKKyAgICAgICAgICAgICAgIGtleV9ldmVu
dF9maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF9pbWUsCisgICAgICAgICAgICAg
ICBrZXlfZXZlbnRfZml4dHVyZV90ZWFyZG93bik7CisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9r
ZXlldmVudC9ibG9jay10ZXh0aW5wdXQiLCBLZXlFdmVudEZpeHR1cmUsCisgICAgICAgICAgICAg
ICB0ZXN0X2luZm9fbmV3KHRleHRpbnB1dF9odG1sX2Jsb2NraW5nLCBUUlVFKSwKKyAgICAgICAg
ICAgICAgIGtleV9ldmVudF9maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF9ibG9j
a2luZywKKyAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3RlYXJkb3duKTsKKyAgICBn
X3Rlc3RfYWRkKCIvd2Via2l0L2tleWV2ZW50L2Jsb2NrLWRpdiIsIEtleUV2ZW50Rml4dHVyZSwK
KyAgICAgICAgICAgICAgIHRlc3RfaW5mb19uZXcoZGl2X2h0bWxfYmxvY2tpbmcsIFRSVUUpLAor
ICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0
ZXN0X2Jsb2NraW5nLAorICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfdGVhcmRvd24p
OworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpCisgICAgZ190ZXN0X2FkZCgiL3dlYmtp
dC9rZXlldmVudC94aW0tdGV4dGlucHV0IiwgS2V5RXZlbnRGaXh0dXJlLAorICAgICAgICAgICAg
ICAgdGVzdF9pbmZvX25ldyh0ZXh0aW5wdXRfaHRtbCwgVFJVRSksCisgICAgICAgICAgICAgICBr
ZXlfZXZlbnRfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3RfeGltLAorICAgICAg
ICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfdGVhcmRvd24pOworICAgIGdfdGVzdF9hZGQoIi93
ZWJraXQva2V5ZXZlbnQveGltLWRpdiIsIEtleUV2ZW50Rml4dHVyZSwKKyAgICAgICAgICAgICAg
IHRlc3RfaW5mb19uZXcoZGl2X2h0bWwsIFRSVUUpLAorICAgICAgICAgICAgICAga2V5X2V2ZW50
X2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0X3hpbSwKKyAgICAgICAgICAgICAg
IGtleV9ldmVudF9maXh0dXJlX3RlYXJkb3duKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIGdfdGVz
dF9ydW4oKTsKK30KKwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRHdGsvdGVzdGxvYWRpbmcuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3Rr
L3Rlc3Rsb2FkaW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBhOTIw
ZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3Rr
L3Rlc3Rsb2FkaW5nLmMKQEAgLTAsMCArMSw0MzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDksIDIwMTAgR3VzdGF2byBOb3JvbmhhIFNpbHZhCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSWdh
bGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNs
dWRlIDxsaWJzb3VwL3NvdXAuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx3ZWJr
aXQvd2Via2l0Lmg+CisKKy8qIFRoaXMgc3RyaW5nIGhhcyB0byBiZSByYXRoZXIgYmlnIGJlY2F1
c2Ugb2YgdGhlIGNhbmNlbGxlZCB0ZXN0IC0gaXQKKyAqIGxvb2tzIGxpa2Ugc291cCByZWZ1c2Vz
IHRvIHNlbmQgb3IgcmVjZWl2ZSBhIHRvbyBzbWFsbCBjaHVuayAqLworI2RlZmluZSBIVE1MX1NU
UklORyAiPGh0bWw+PGJvZHk+VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nITwvYm9keT48L2h0bWw+IgorCitTb3VwVVJJKiBiYXNlX3Vy
aTsKKworLyogRm9yIHJlYWwgcmVxdWVzdCB0ZXN0aW5nICovCitzdGF0aWMgdm9pZAorc2VydmVy
X2NhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1zZywKKyAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiBxdWVyeSwKKyAgICAgICAgICAg
ICAgICBTb3VwQ2xpZW50Q29udGV4dCogY29udGV4dCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBp
ZiAobXNnLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7CisgICAgICAgIHNvdXBfbWVzc2Fn
ZV9zZXRfc3RhdHVzKG1zZywgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1zZywgU09VUF9T
VEFUVVNfT0spOworCisgICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvdGVzdF9sb2FkaW5nX3N0
YXR1cyIpIHx8IGdfc3RyX2VxdWFsKHBhdGgsICIvdGVzdF9sb2FkaW5nX3N0YXR1czIiKSkKKyAg
ICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1zZy0+cmVzcG9uc2VfYm9keSwgU09VUF9N
RU1PUllfU1RBVElDLCBIVE1MX1NUUklORywgc3RybGVuKEhUTUxfU1RSSU5HKSk7CisgICAgZWxz
ZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi90ZXN0X2xvYWRfZXJyb3IiKSkgeworICAgICAgICBz
b3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX0NBTlRfQ09OTkVDVCk7Cisg
ICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3Rlc3RfbG9hZGluZ19jYW5jZWxsZWQi
KSkgeworICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19zZXRfZW5jb2RpbmcobXNnLT5yZXNw
b25zZV9oZWFkZXJzLCBTT1VQX0VOQ09ESU5HX0NIVU5LRUQpOworICAgICAgICBzb3VwX21lc3Nh
Z2VfYm9keV9hcHBlbmQobXNnLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIEhU
TUxfU1RSSU5HLCBzdHJsZW4oSFRNTF9TVFJJTkcpKTsKKyAgICAgICAgc291cF9zZXJ2ZXJfdW5w
YXVzZV9tZXNzYWdlKHNlcnZlciwgbXNnKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1zZy0+cmVzcG9uc2VfYm9keSk7Cit9CisKK3R5
cGVkZWYgc3RydWN0IHsKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OworICAgIEdNYWluTG9v
cCAqbG9vcDsKKyAgICBnYm9vbGVhbiBoYXNfYmVlbl9wcm92aXNpb25hbDsKKyAgICBnYm9vbGVh
biBoYXNfYmVlbl9jb21taXR0ZWQ7CisgICAgZ2Jvb2xlYW4gaGFzX2JlZW5fZmlyc3RfdmlzdWFs
bHlfbm9uX2VtcHR5X2xheW91dDsKKyAgICBnYm9vbGVhbiBoYXNfYmVlbl9maW5pc2hlZDsKKyAg
ICBnYm9vbGVhbiBoYXNfYmVlbl9mYWlsZWQ7CisgICAgZ2Jvb2xlYW4gaGFzX2JlZW5fbG9hZF9l
cnJvcjsKK30gV2ViTG9hZGluZ0ZpeHR1cmU7CisKK3N0YXRpYyB2b2lkIHdlYl9sb2FkaW5nX2Zp
eHR1cmVfc2V0dXAoV2ViTG9hZGluZ0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0
YSkKK3sKKyAgICBmaXh0dXJlLT53ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJf
dmlld19uZXcoKSk7CisgICAgZml4dHVyZS0+bG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBU
UlVFKTsKKyAgICBnX29iamVjdF9yZWZfc2luayhmaXh0dXJlLT53ZWJWaWV3KTsKKyAgICBmaXh0
dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCA9IEZBTFNFOworICAgIGZpeHR1cmUtPmhhc19iZWVu
X2NvbW1pdHRlZCA9IEZBTFNFOworICAgIGZpeHR1cmUtPmhhc19iZWVuX2ZpcnN0X3Zpc3VhbGx5
X25vbl9lbXB0eV9sYXlvdXQgPSBGQUxTRTsKKyAgICBmaXh0dXJlLT5oYXNfYmVlbl9maW5pc2hl
ZCA9IEZBTFNFOworICAgIGZpeHR1cmUtPmhhc19iZWVuX2ZhaWxlZCA9IEZBTFNFOworICAgIGZp
eHR1cmUtPmhhc19iZWVuX2xvYWRfZXJyb3IgPSBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgd2Vi
X2xvYWRpbmdfZml4dHVyZV90ZWFyZG93bihXZWJMb2FkaW5nRml4dHVyZSogZml4dHVyZSwgZ2Nv
bnN0cG9pbnRlciBkYXRhKQoreworICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPndlYlZpZXcp
OworICAgIGdfbWFpbl9sb29wX3VucmVmKGZpeHR1cmUtPmxvb3ApOworfQorCitzdGF0aWMgY2hh
ciogZ2V0X3VyaV9mb3JfcGF0aChjb25zdCBjaGFyKiBwYXRoKQoreworICAgIFNvdXBVUkkqIHVy
aTsKKyAgICBjaGFyKiB1cmlfc3RyaW5nOworCisgICAgdXJpID0gc291cF91cmlfbmV3X3dpdGhf
YmFzZShiYXNlX3VyaSwgcGF0aCk7CisgICAgdXJpX3N0cmluZyA9IHNvdXBfdXJpX3RvX3N0cmlu
Zyh1cmksIEZBTFNFKTsKKyAgICBzb3VwX3VyaV9mcmVlICh1cmkpOworCisgICAgcmV0dXJuIHVy
aV9zdHJpbmc7Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRfZmluaXNoZWRfY2IoV2ViS2l0V2ViVmll
dyogd2ViX3ZpZXcsIFdlYktpdFdlYkZyYW1lKiB3ZWJfZnJhbWUsIFdlYkxvYWRpbmdGaXh0dXJl
KiBmaXh0dXJlKQoreworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFs
KTsKKyAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9jb21taXR0ZWQpOworICAgIGdfYXNz
ZXJ0KGZpeHR1cmUtPmhhc19iZWVuX2ZpcnN0X3Zpc3VhbGx5X25vbl9lbXB0eV9sYXlvdXQpOwor
CisgICAgZ19tYWluX2xvb3BfcXVpdChmaXh0dXJlLT5sb29wKTsKK30KKworCitzdGF0aWMgdm9p
ZCBzdGF0dXNfY2hhbmdlZF9jYihHT2JqZWN0KiBvYmplY3QsIEdQYXJhbVNwZWMqIHBzcGVjLCBX
ZWJMb2FkaW5nRml4dHVyZSogZml4dHVyZSkKK3sKKyAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1
cyA9IHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMoV0VCS0lUX1dFQl9WSUVXKG9iamVj
dCkpOworCisgICAgc3dpdGNoIChzdGF0dXMpIHsKKyAgICBjYXNlIFdFQktJVF9MT0FEX1BST1ZJ
U0lPTkFMOgorICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwp
OworICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fY29tbWl0dGVkKTsKKyAgICAg
ICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX2ZpcnN0X3Zpc3VhbGx5X25vbl9lbXB0eV9s
YXlvdXQpOworICAgICAgICBmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCA9IFRSVUU7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0xPQURfQ09NTUlUVEVEOgorICAgICAgICBn
X2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCk7CisgICAgICAgIGdfYXNzZXJ0
KCFmaXh0dXJlLT5oYXNfYmVlbl9jb21taXR0ZWQpOworICAgICAgICBnX2Fzc2VydCghZml4dHVy
ZS0+aGFzX2JlZW5fZmlyc3RfdmlzdWFsbHlfbm9uX2VtcHR5X2xheW91dCk7CisgICAgICAgIGZp
eHR1cmUtPmhhc19iZWVuX2NvbW1pdHRlZCA9IFRSVUU7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgV0VCS0lUX0xPQURfRklSU1RfVklTVUFMTFlfTk9OX0VNUFRZX0xBWU9VVDoKKyAgICAgICAg
Z19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwpOworICAgICAgICBnX2Fzc2Vy
dChmaXh0dXJlLT5oYXNfYmVlbl9jb21taXR0ZWQpOworICAgICAgICBnX2Fzc2VydCghZml4dHVy
ZS0+aGFzX2JlZW5fZmlyc3RfdmlzdWFsbHlfbm9uX2VtcHR5X2xheW91dCk7CisgICAgICAgIGZp
eHR1cmUtPmhhc19iZWVuX2ZpcnN0X3Zpc3VhbGx5X25vbl9lbXB0eV9sYXlvdXQgPSBUUlVFOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9MT0FEX0ZJTklTSEVEOgorICAgICAgICBn
X2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCk7CisgICAgICAgIGdfYXNzZXJ0
KGZpeHR1cmUtPmhhc19iZWVuX2NvbW1pdHRlZCk7CisgICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUt
Pmhhc19iZWVuX2ZpcnN0X3Zpc3VhbGx5X25vbl9lbXB0eV9sYXlvdXQpOworICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgIH0K
K30KKworc3RhdGljIHZvaWQgdGVzdF9sb2FkaW5nX3N0YXR1cyhXZWJMb2FkaW5nRml4dHVyZSog
Zml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGNoYXIqIHVyaV9zdHJpbmc7CisK
KyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyhmaXh0
dXJlLT53ZWJWaWV3KSwgPT0sIFdFQktJVF9MT0FEX1BST1ZJU0lPTkFMKTsKKworICAgIGdfb2Jq
ZWN0X2Nvbm5lY3QoR19PQkpFQ1QoZml4dHVyZS0+d2ViVmlldyksCisgICAgICAgICAgICAgICAg
ICAgICAic2lnbmFsOjpub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhzdGF0dXNfY2hh
bmdlZF9jYiksIGZpeHR1cmUsCisgICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjpsb2FkLWZp
bmlzaGVkIiwgR19DQUxMQkFDSyhsb2FkX2ZpbmlzaGVkX2NiKSwgZml4dHVyZSwKKyAgICAgICAg
ICAgICAgICAgICAgIE5VTEwpOworCisgICAgdXJpX3N0cmluZyA9IGdldF91cmlfZm9yX3BhdGgo
Ii90ZXN0X2xvYWRpbmdfc3RhdHVzIik7CisKKyAgICAvKiBsb2FkX3VyaSB3aWxsIHRyaWdnZXIg
dGhlIG5hdmlnYXRpb24tcG9saWN5LWRlY2lzaW9uLXJlcXVlc3RlZAorICAgICAqIHNpZ25hbCBl
bWlzc2lvbjsKKyAgICAgKi8KKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkoZml4dHVyZS0+
d2ViVmlldywgdXJpX3N0cmluZyk7CisgICAgZ19mcmVlKHVyaV9zdHJpbmcpOworCisgICAgZ19t
YWluX2xvb3BfcnVuKGZpeHR1cmUtPmxvb3ApOworfQorCitzdGF0aWMgdm9pZCBsb2FkX2Vycm9y
X3N0YXR1c19jaGFuZ2VkX2NiKEdPYmplY3QqIG9iamVjdCwgR1BhcmFtU3BlYyogcHNwZWMsIFdl
YkxvYWRpbmdGaXh0dXJlKiBmaXh0dXJlKQoreworICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVz
ID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyhXRUJLSVRfV0VCX1ZJRVcob2JqZWN0
KSk7CisKKyAgICBzd2l0Y2goc3RhdHVzKSB7CisgICAgY2FzZSBXRUJLSVRfTE9BRF9QUk9WSVNJ
T05BTDoKKyAgICAgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsKTsK
KyAgICAgICAgZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwgPSBUUlVFOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFdFQktJVF9MT0FEX0NPTU1JVFRFRDoKKyAgICAgICAgZ19hc3NlcnQo
IWZpeHR1cmUtPmhhc19iZWVuX2NvbW1pdHRlZCk7CisgICAgICAgIGZpeHR1cmUtPmhhc19iZWVu
X2NvbW1pdHRlZCA9IFRSVUU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0xPQURf
RklOSVNIRUQ6CisgICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFs
KTsKKyAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fbG9hZF9lcnJvcik7CisgICAg
ICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX2ZhaWxlZCk7CisgICAgICAgIGdfYXNzZXJ0
KCFmaXh0dXJlLT5oYXNfYmVlbl9maW5pc2hlZCk7CisgICAgICAgIGZpeHR1cmUtPmhhc19iZWVu
X2ZpbmlzaGVkID0gVFJVRTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXRUJLSVRfTE9BRF9G
QUlMRUQ6CisgICAgICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNfYmVlbl9mYWlsZWQpOworICAg
ICAgICBmaXh0dXJlLT5oYXNfYmVlbl9mYWlsZWQgPSBUUlVFOworICAgICAgICBnX21haW5fbG9v
cF9xdWl0KGZpeHR1cmUtPmxvb3ApOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBsb2FkX2Vycm9yX2NiKFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgY2hhciog
dXJpLCBHRXJyb3IgKmVycm9yLCBXZWJMb2FkaW5nRml4dHVyZSogZml4dHVyZSkKK3sKKyAgICBn
X2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCk7CisgICAgZ19hc3NlcnQoIWZp
eHR1cmUtPmhhc19iZWVuX2xvYWRfZXJyb3IpOworICAgIGZpeHR1cmUtPmhhc19iZWVuX2xvYWRf
ZXJyb3IgPSBUUlVFOworCisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZCB0ZXN0
X2xvYWRpbmdfZXJyb3IoV2ViTG9hZGluZ0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIg
ZGF0YSkKK3sKKyAgICBjaGFyKiB1cmlfc3RyaW5nOworCisgICAgZ190ZXN0X2J1ZygiMjg4NDIi
KTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2ViVmlldywgImxvYWQtZXJyb3Ii
LCBHX0NBTExCQUNLKGxvYWRfZXJyb3JfY2IpLCBmaXh0dXJlKTsKKyAgICBnX3NpZ25hbF9jb25u
ZWN0KGZpeHR1cmUtPndlYlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhs
b2FkX2Vycm9yX3N0YXR1c19jaGFuZ2VkX2NiKSwgZml4dHVyZSk7CisKKyAgICB1cmlfc3RyaW5n
ID0gZ2V0X3VyaV9mb3JfcGF0aCgiL3Rlc3RfbG9hZF9lcnJvciIpOworICAgIHdlYmtpdF93ZWJf
dmlld19sb2FkX3VyaShmaXh0dXJlLT53ZWJWaWV3LCB1cmlfc3RyaW5nKTsKKyAgICBnX2ZyZWUo
dXJpX3N0cmluZyk7CisKKyAgICBnX21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7CisKKyAg
ICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCk7CisgICAgZ19hc3NlcnQo
IWZpeHR1cmUtPmhhc19iZWVuX2NvbW1pdHRlZCk7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFz
X2JlZW5fbG9hZF9lcnJvcik7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fZmFpbGVk
KTsKKyAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fZmluaXNoZWQpOworfQorCisvKiBD
YW5jZWxsZWQgbG9hZCAqLworCitzdGF0aWMgZ2Jvb2xlYW4gbG9hZF9jYW5jZWxsZWRfY2IoV2Vi
S2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLCBjb25zdCBjaGFyKiB1
cmksIEdFcnJvciAqZXJyb3IsIFdlYkxvYWRpbmdGaXh0dXJlKiBmaXh0dXJlKQoreworICAgIGdf
YXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsKTsKKyAgICBnX2Fzc2VydChmaXh0
dXJlLT5oYXNfYmVlbl9mYWlsZWQpOworICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNfYmVlbl9s
b2FkX2Vycm9yKTsKKyAgICBnX2Fzc2VydChlcnJvci0+Y29kZSA9PSBXRUJLSVRfTkVUV09SS19F
UlJPUl9DQU5DRUxMRUQpOworICAgIGZpeHR1cmUtPmhhc19iZWVuX2xvYWRfZXJyb3IgPSBUUlVF
OworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBzdG9wX2xvYWQgKGdw
b2ludGVyIGRhdGEpCit7CisgICAgd2Via2l0X3dlYl92aWV3X3N0b3BfbG9hZGluZyhXRUJLSVRf
V0VCX1ZJRVcoZGF0YSkpOworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgbG9h
ZF9jYW5jZWxsZWRfc3RhdHVzX2NoYW5nZWRfY2IoR09iamVjdCogb2JqZWN0LCBHUGFyYW1TcGVj
KiBwc3BlYywgV2ViTG9hZGluZ0ZpeHR1cmUqIGZpeHR1cmUpCit7CisgICAgV2ViS2l0TG9hZFN0
YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKFdFQktJVF9XRUJf
VklFVyhvYmplY3QpKTsKKworICAgIHN3aXRjaChzdGF0dXMpIHsKKyAgICBjYXNlIFdFQktJVF9M
T0FEX1BST1ZJU0lPTkFMOgorICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fcHJv
dmlzaW9uYWwpOworICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fZmFpbGVkKTsK
KyAgICAgICAgZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwgPSBUUlVFOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFdFQktJVF9MT0FEX0NPTU1JVFRFRDoKKyAgICAgICAgZ19pZGxlX2Fk
ZCAoc3RvcF9sb2FkLCBvYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9M
T0FEX0ZBSUxFRDoKKyAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9u
YWwpOworICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fZmFpbGVkKTsKKyAgICAg
ICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX2xvYWRfZXJyb3IpOworICAgICAgICBmaXh0
dXJlLT5oYXNfYmVlbl9mYWlsZWQgPSBUUlVFOworICAgICAgICBnX21haW5fbG9vcF9xdWl0KGZp
eHR1cmUtPmxvb3ApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9MT0FEX0ZJTklT
SEVEOgorICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rf
bG9hZGluZ19jYW5jZWxsZWQoV2ViTG9hZGluZ0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50
ZXIgZGF0YSkKK3sKKyAgICBjaGFyKiB1cmlfc3RyaW5nOworCisgICAgZ190ZXN0X2J1ZygiMjk2
NDQiKTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2ViVmlldywgImxvYWQtZXJy
b3IiLCBHX0NBTExCQUNLKGxvYWRfY2FuY2VsbGVkX2NiKSwgZml4dHVyZSk7CisgICAgZ19zaWdu
YWxfY29ubmVjdChmaXh0dXJlLT53ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FM
TEJBQ0sobG9hZF9jYW5jZWxsZWRfc3RhdHVzX2NoYW5nZWRfY2IpLCBmaXh0dXJlKTsKKworICAg
IHVyaV9zdHJpbmcgPSBnZXRfdXJpX2Zvcl9wYXRoKCIvdGVzdF9sb2FkaW5nX2NhbmNlbGxlZCIp
OworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaShmaXh0dXJlLT53ZWJWaWV3LCB1cmlfc3Ry
aW5nKTsKKyAgICBnX2ZyZWUodXJpX3N0cmluZyk7CisKKyAgICBnX21haW5fbG9vcF9ydW4oZml4
dHVyZS0+bG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRfZ29iYWNrX3N0YXR1c19jaGFuZ2Vk
X2NiKEdPYmplY3QqIG9iamVjdCwgR1BhcmFtU3BlYyogcHNwZWMsIFdlYkxvYWRpbmdGaXh0dXJl
KiBmaXh0dXJlKQoreworICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92
aWV3X2dldF9sb2FkX3N0YXR1cyhXRUJLSVRfV0VCX1ZJRVcob2JqZWN0KSk7CisKKyAgICBzd2l0
Y2goc3RhdHVzKSB7CisgICAgY2FzZSBXRUJLSVRfTE9BRF9QUk9WSVNJT05BTDoKKyAgICAgICAg
Z19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsKTsKKyAgICAgICAgZml4dHVy
ZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwgPSBUUlVFOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFdFQktJVF9MT0FEX0NPTU1JVFRFRDoKKyAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2Jl
ZW5fcHJvdmlzaW9uYWwpOworICAgICAgICBmaXh0dXJlLT5oYXNfYmVlbl9jb21taXR0ZWQgPSBU
UlVFOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9MT0FEX0ZBSUxFRDoKKyAgICAg
ICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXRUJL
SVRfTE9BRF9GSU5JU0hFRDoKKyAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fcHJv
dmlzaW9uYWwpOworICAgICAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9jb21taXR0ZWQp
OworICAgICAgICBmaXh0dXJlLT5oYXNfYmVlbl9maW5pc2hlZCA9IFRSVUU7CisgICAgICAgIGdf
bWFpbl9sb29wX3F1aXQoZml4dHVyZS0+bG9vcCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgbG9hZF93ZW50YmFj
a19zdGF0dXNfY2hhbmdlZF9jYihHT2JqZWN0KiBvYmplY3QsIEdQYXJhbVNwZWMqIHBzcGVjLCBX
ZWJMb2FkaW5nRml4dHVyZSogZml4dHVyZSkKK3sKKyAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1
cyA9IHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMoV0VCS0lUX1dFQl9WSUVXKG9iamVj
dCkpOworICAgIGNoYXIqIHVyaV9zdHJpbmc7CisgICAgY2hhciogdXJpX3N0cmluZzI7CisKKyAg
ICB1cmlfc3RyaW5nID0gZ2V0X3VyaV9mb3JfcGF0aCgiL3Rlc3RfbG9hZGluZ19zdGF0dXMiKTsK
KyAgICB1cmlfc3RyaW5nMiA9IGdldF91cmlfZm9yX3BhdGgoIi90ZXN0X2xvYWRpbmdfc3RhdHVz
MiIpOworCisgICAgc3dpdGNoKHN0YXR1cykgeworICAgIGNhc2UgV0VCS0lUX0xPQURfUFJPVklT
SU9OQUw6CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaShm
aXh0dXJlLT53ZWJWaWV3KSwgPT0sIHVyaV9zdHJpbmcyKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBXRUJLSVRfTE9BRF9DT01NSVRURUQ6CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X3VyaShmaXh0dXJlLT53ZWJWaWV3KSwgPT0sIHVyaV9zdHJpbmcpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9MT0FEX0ZBSUxFRDoKKyAgICAgICAgZ19h
c3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXRUJLSVRfTE9B
RF9GSU5JU0hFRDoKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRf
dXJpKGZpeHR1cmUtPndlYlZpZXcpLCA9PSwgdXJpX3N0cmluZyk7CisgICAgICAgIGdfbWFpbl9s
b29wX3F1aXQoZml4dHVyZS0+bG9vcCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGdfZnJlZSh1cmlfc3RyaW5nKTsKKyAgICBnX2Zy
ZWUodXJpX3N0cmluZzIpOworfQorCitzdGF0aWMgdm9pZCBsb2FkX2Vycm9yX3Rlc3QoV2ViS2l0
V2ViVmlldyogd2VidmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLCBjb25zdCBjaGFyKiB1cmks
IEdFcnJvciogZXJyb3IpCit7CisgICAgZ19kZWJ1ZygiRXJyb3I6ICVzIiwgZXJyb3ItPm1lc3Nh
Z2UpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2xvYWRpbmdfZ29iYWNrKFdlYkxvYWRpbmdGaXh0
dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgY2hhciogdXJpX3N0cmlu
ZzsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2ViVmlldywgIm5vdGlmeTo6bG9h
ZC1zdGF0dXMiLCBHX0NBTExCQUNLKGxvYWRfZ29iYWNrX3N0YXR1c19jaGFuZ2VkX2NiKSwgZml4
dHVyZSk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJsb2FkLWVy
cm9yIiwgR19DQUxMQkFDSyhsb2FkX2Vycm9yX3Rlc3QpLCBmaXh0dXJlKTsKKworICAgIHVyaV9z
dHJpbmcgPSBnZXRfdXJpX2Zvcl9wYXRoKCIvdGVzdF9sb2FkaW5nX3N0YXR1cyIpOworICAgIHdl
YmtpdF93ZWJfdmlld19sb2FkX3VyaShmaXh0dXJlLT53ZWJWaWV3LCB1cmlfc3RyaW5nKTsKKyAg
ICBnX2ZyZWUodXJpX3N0cmluZyk7CisKKyAgICBnX21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9v
cCk7CisKKyAgICBmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCA9IEZBTFNFOworICAgIGZp
eHR1cmUtPmhhc19iZWVuX2NvbW1pdHRlZCA9IEZBTFNFOworICAgIGZpeHR1cmUtPmhhc19iZWVu
X2ZpcnN0X3Zpc3VhbGx5X25vbl9lbXB0eV9sYXlvdXQgPSBGQUxTRTsKKyAgICBmaXh0dXJlLT5o
YXNfYmVlbl9maW5pc2hlZCA9IEZBTFNFOworICAgIGZpeHR1cmUtPmhhc19iZWVuX2ZhaWxlZCA9
IEZBTFNFOworICAgIGZpeHR1cmUtPmhhc19iZWVuX2xvYWRfZXJyb3IgPSBGQUxTRTsKKworICAg
IHVyaV9zdHJpbmcgPSBnZXRfdXJpX2Zvcl9wYXRoKCIvdGVzdF9sb2FkaW5nX3N0YXR1czIiKTsK
KyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkoZml4dHVyZS0+d2ViVmlldywgdXJpX3N0cmlu
Zyk7CisgICAgZ19mcmVlKHVyaV9zdHJpbmcpOworCisgICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1
cmUtPmxvb3ApOworCisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKGZp
eHR1cmUtPndlYlZpZXcsIGxvYWRfZ29iYWNrX3N0YXR1c19jaGFuZ2VkX2NiLCBmaXh0dXJlKTsK
KworICAgIGZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsID0gRkFMU0U7CisgICAgZml4dHVy
ZS0+aGFzX2JlZW5fY29tbWl0dGVkID0gRkFMU0U7CisgICAgZml4dHVyZS0+aGFzX2JlZW5fZmly
c3RfdmlzdWFsbHlfbm9uX2VtcHR5X2xheW91dCA9IEZBTFNFOworICAgIGZpeHR1cmUtPmhhc19i
ZWVuX2ZpbmlzaGVkID0gRkFMU0U7CisgICAgZml4dHVyZS0+aGFzX2JlZW5fZmFpbGVkID0gRkFM
U0U7CisgICAgZml4dHVyZS0+aGFzX2JlZW5fbG9hZF9lcnJvciA9IEZBTFNFOworCisgICAgZ19z
aWduYWxfY29ubmVjdChmaXh0dXJlLT53ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdf
Q0FMTEJBQ0sobG9hZF93ZW50YmFja19zdGF0dXNfY2hhbmdlZF9jYiksIGZpeHR1cmUpOworICAg
IHdlYmtpdF93ZWJfdmlld19nb19iYWNrKGZpeHR1cmUtPndlYlZpZXcpOworCisgICAgZ19tYWlu
X2xvb3BfcnVuKGZpeHR1cmUtPmxvb3ApOworCisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29u
bmVjdF9ieV9mdW5jKGZpeHR1cmUtPndlYlZpZXcsIGxvYWRfd2VudGJhY2tfc3RhdHVzX2NoYW5n
ZWRfY2IsIGZpeHR1cmUpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7
CisgICAgU291cFNlcnZlciogc2VydmVyOworCisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFy
Z3YsIE5VTEwpOworCisgICAgc2VydmVyID0gc291cF9zZXJ2ZXJfbmV3KFNPVVBfU0VSVkVSX1BP
UlQsIDAsIE5VTEwpOworICAgIHNvdXBfc2VydmVyX3J1bl9hc3luYyhzZXJ2ZXIpOworCisgICAg
c291cF9zZXJ2ZXJfYWRkX2hhbmRsZXIoc2VydmVyLCBOVUxMLCBzZXJ2ZXJfY2FsbGJhY2ssIE5V
TEwsIE5VTEwpOworCisgICAgYmFzZV91cmkgPSBzb3VwX3VyaV9uZXcoImh0dHA6Ly8xMjcuMC4w
LjEvIik7CisgICAgc291cF91cmlfc2V0X3BvcnQoYmFzZV91cmksIHNvdXBfc2VydmVyX2dldF9w
b3J0KHNlcnZlcikpOworCisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2xvYWRpbmcvc3RhdHVzIiwKKyAgICAg
ICAgICAgICAgIFdlYkxvYWRpbmdGaXh0dXJlLCBOVUxMLAorICAgICAgICAgICAgICAgd2ViX2xv
YWRpbmdfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3RfbG9hZGluZ19zdGF0dXMs
CisgICAgICAgICAgICAgICB3ZWJfbG9hZGluZ19maXh0dXJlX3RlYXJkb3duKTsKKyAgICBnX3Rl
c3RfYWRkKCIvd2Via2l0L2xvYWRpbmcvZXJyb3IiLAorICAgICAgICAgICAgICAgV2ViTG9hZGlu
Z0ZpeHR1cmUsIE5VTEwsCisgICAgICAgICAgICAgICB3ZWJfbG9hZGluZ19maXh0dXJlX3NldHVw
LAorICAgICAgICAgICAgICAgdGVzdF9sb2FkaW5nX2Vycm9yLAorICAgICAgICAgICAgICAgd2Vi
X2xvYWRpbmdfZml4dHVyZV90ZWFyZG93bik7CisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9sb2Fk
aW5nL2NhbmNlbGxlZCIsCisgICAgICAgICAgICAgICBXZWJMb2FkaW5nRml4dHVyZSwgTlVMTCwK
KyAgICAgICAgICAgICAgIHdlYl9sb2FkaW5nX2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAg
ICB0ZXN0X2xvYWRpbmdfY2FuY2VsbGVkLAorICAgICAgICAgICAgICAgd2ViX2xvYWRpbmdfZml4
dHVyZV90ZWFyZG93bik7CisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9sb2FkaW5nL2dvYmFjayIs
CisgICAgICAgICAgICAgICBXZWJMb2FkaW5nRml4dHVyZSwgTlVMTCwKKyAgICAgICAgICAgICAg
IHdlYl9sb2FkaW5nX2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0X2xvYWRpbmdf
Z29iYWNrLAorICAgICAgICAgICAgICAgd2ViX2xvYWRpbmdfZml4dHVyZV90ZWFyZG93bik7Cisg
ICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsKK30KKwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdG1pbWVoYW5kbGluZy5jIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdG1pbWVoYW5kbGluZy5jCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjRjOTA2OTEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0bWltZWhhbmRsaW5nLmMKQEAgLTAsMCArMSwy
MDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIE1pY2hhZWwgQWxvbnpvCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgR3VzdGF2byBOb3JvbmhhIFNpbHZhCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJ0ZXN0X3V0aWxzLmgiCisKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVk
ZSA8Z2xpYi9nc3RkaW8uaD4KKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKyNpbmNsdWRlIDxz
dHJpbmcuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+
CisKK0dNYWluTG9vcCogbG9vcDsKK1NvdXBTZXNzaW9uICpzZXNzaW9uOworY2hhciogYmFzZV91
cmk7CisKKy8qIEZvciByZWFsIHJlcXVlc3QgdGVzdGluZyAqLworc3RhdGljIHZvaWQKK3NlcnZl
cl9jYWxsYmFjayhTb3VwU2VydmVyICpzZXJ2ZXIsIFNvdXBNZXNzYWdlICptc2csCisgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsIEdIYXNoVGFibGUgKnF1ZXJ5LAorICAgICAgICAg
ICAgICAgICBTb3VwQ2xpZW50Q29udGV4dCAqY29udGV4dCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAg
ICBpZiAobXNnLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7CisgICAgICAgIHNvdXBfbWVz
c2FnZV9zZXRfc3RhdHVzKG1zZywgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1zZywgU09V
UF9TVEFUVVNfT0spOworCisgICAgLyogUERGICovCisgICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgs
ICIvcGRmIikpIHsKKyAgICAgICAgY2hhciogY29udGVudHM7CisgICAgICAgIGdzaXplIGxlbmd0
aDsKKyAgICAgICAgR0Vycm9yKiBlcnJvciA9IE5VTEw7CisKKyAgICAgICAgZ19maWxlX2dldF9j
b250ZW50cygidGVzdC5wZGYiLCAmY29udGVudHMsICZsZW5ndGgsICZlcnJvcik7CisgICAgICAg
IGdfYXNzZXJ0KCFlcnJvcik7CisKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1z
Zy0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgY29udGVudHMsIGxlbmd0aCk7Cisg
ICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2h0bWwiKSkgeworICAgICAgICBjaGFy
KiBjb250ZW50czsKKyAgICAgICAgZ3NpemUgbGVuZ3RoOworICAgICAgICBHRXJyb3IqIGVycm9y
ID0gTlVMTDsKKworICAgICAgICBnX2ZpbGVfZ2V0X2NvbnRlbnRzKCJ0ZXN0Lmh0bWwiLCAmY29u
dGVudHMsICZsZW5ndGgsICZlcnJvcik7CisgICAgICAgIGdfYXNzZXJ0KCFlcnJvcik7CisKKyAg
ICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1zZy0+cmVzcG9uc2VfYm9keSwgU09VUF9N
RU1PUllfVEFLRSwgY29udGVudHMsIGxlbmd0aCk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVh
bChwYXRoLCAiL3RleHQiKSkgeworICAgICAgICBjaGFyKiBjb250ZW50czsKKyAgICAgICAgZ3Np
emUgbGVuZ3RoOworICAgICAgICBHRXJyb3IqIGVycm9yID0gTlVMTDsKKworICAgICAgICBzb3Vw
X21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobXNnLT5yZXNwb25zZV9oZWFkZXJzLCAiQ29udGVudC1E
aXNwb3NpdGlvbiIsICJhdHRhY2htZW50OyBmaWxlbmFtZT10ZXN0LnR4dCIpOworCisgICAgICAg
IGdfZmlsZV9nZXRfY29udGVudHMoInRlc3QudHh0IiwgJmNvbnRlbnRzLCAmbGVuZ3RoLCAmZXJy
b3IpOworICAgICAgICBnX2Fzc2VydCghZXJyb3IpOworCisgICAgICAgIHNvdXBfbWVzc2FnZV9i
b2R5X2FwcGVuZChtc2ctPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGNvbnRlbnRz
LCBsZW5ndGgpOworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1zZy0+
cmVzcG9uc2VfYm9keSk7Cit9CisKK3N0YXRpYyB2b2lkIGlkbGVfcXVpdF9sb29wX2NiKFdlYktp
dFdlYlZpZXcqIHdlYl92aWV3LCBHUGFyYW1TcGVjKiBwc3BlYywgZ3BvaW50ZXIgZGF0YSkKK3sK
KyAgICBpZiAod2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJfdmlldykgPT0gV0VC
S0lUX0xPQURfRklOSVNIRUQgfHwKKyAgICAgICAgd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0
YXR1cyh3ZWJfdmlldykgPT0gV0VCS0lUX0xPQURfRkFJTEVEKQorICAgICAgICBnX21haW5fbG9v
cF9xdWl0KGxvb3ApOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gbWltZV90eXBlX3BvbGljeV9kZWNp
c2lvbl9yZXF1ZXN0ZWRfY2IoV2ViS2l0V2ViVmlldyogdmlldywgV2ViS2l0V2ViRnJhbWUqIGZy
YW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0LCBjb25zdCBjaGFyKiBtaW1lX3R5cGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
V2ViS2l0V2ViUG9saWN5RGVjaXNpb24qIGRlY2lzaW9uLCBncG9pbnRlciBkYXRhKQoreworICAg
IGNoYXIqIHR5cGUgPSAoY2hhciopZGF0YTsKKworICAgIGlmIChnX3N0cl9lcXVhbCh0eXBlLCAi
cGRmIikpIHsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKG1pbWVfdHlwZSwgPT0sICJhcHBsaWNh
dGlvbi9wZGYiKTsKKyAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fc2hvd19t
aW1lX3R5cGUodmlldywgbWltZV90eXBlKSk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbCh0
eXBlLCAiaHRtbCIpKSB7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cihtaW1lX3R5cGUsID09LCAi
dGV4dC9odG1sIik7CisgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19jYW5fc2hvd19t
aW1lX3R5cGUodmlldywgbWltZV90eXBlKSk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbCh0
eXBlLCAidGV4dCIpKSB7CisgICAgICAgIFdlYktpdE5ldHdvcmtSZXNwb25zZSogcmVzcG9uc2Ug
PSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9uZXR3b3JrX3Jlc3BvbnNlKGZyYW1lKTsKKyAgICAgICAg
U291cE1lc3NhZ2UqIG1lc3NhZ2UgPSB3ZWJraXRfbmV0d29ya19yZXNwb25zZV9nZXRfbWVzc2Fn
ZShyZXNwb25zZSk7CisgICAgICAgIGNoYXIqIGRpc3Bvc2l0aW9uOworCisgICAgICAgIGdfYXNz
ZXJ0KG1lc3NhZ2UpOworICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfY29udGVudF9k
aXNwb3NpdGlvbihtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGlzcG9zaXRpb24sIE5VTEwpOwor
ICAgICAgICBnX29iamVjdF91bnJlZihyZXNwb25zZSk7CisKKyAgICAgICAgZ19hc3NlcnRfY21w
c3RyKGRpc3Bvc2l0aW9uLCA9PSwgImF0dGFjaG1lbnQiKTsKKyAgICAgICAgZ19mcmVlKGRpc3Bv
c2l0aW9uKTsKKworICAgICAgICBnX2Fzc2VydF9jbXBzdHIobWltZV90eXBlLCA9PSwgInRleHQv
cGxhaW4iKTsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2Nhbl9zaG93X21pbWVf
dHlwZSh2aWV3LCBtaW1lX3R5cGUpKTsKKyAgICB9CisKKyAgICBnX2ZyZWUodHlwZSk7CisKKyAg
ICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RSZW1vdGVNaW1lVHlwZShjb25z
dCB2b2lkKiBkYXRhKQoreworICAgIGNvbnN0IGNoYXIqIG5hbWUgPSAoY29uc3QgY2hhciopIGRh
dGE7CisgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2Vi
X3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKEdfT0JKRUNUKHZpZXcpKTsKKwor
ICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisKKyAgICBnX29iamVjdF9j
b25uZWN0KEdfT0JKRUNUKHZpZXcpLAorICAgICAgICAgICAgICAgICAgICAgInNpZ25hbDo6bm90
aWZ5Ojpsb2FkLXN0YXR1cyIsIGlkbGVfcXVpdF9sb29wX2NiLCBOVUxMLAorICAgICAgICAgICAg
ICAgICAgICAgInNpZ25hbDo6bWltZS10eXBlLXBvbGljeS1kZWNpc2lvbi1yZXF1ZXN0ZWQiLCBt
aW1lX3R5cGVfcG9saWN5X2RlY2lzaW9uX3JlcXVlc3RlZF9jYiwgZ19zdHJkdXAobmFtZSksCisg
ICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKworICAgIGNoYXIqIGVmZmVjdGl2ZV91cmkgPSBn
X3N0cmR1cF9wcmludGYoIiVzJXMiLCBiYXNlX3VyaSwgbmFtZSk7CisgICAgd2Via2l0X3dlYl92
aWV3X2xvYWRfdXJpKHZpZXcsIGVmZmVjdGl2ZV91cmkpOworICAgIGdfZnJlZShlZmZlY3RpdmVf
dXJpKTsKKworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIGdfb2JqZWN0X3VucmVm
KHZpZXcpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0TG9jYWxNaW1lVHlwZShjb25zdCB2b2lkKiBk
YXRhKQoreworICAgICBjb25zdCBjaGFyKiB0eXBlTmFtZSA9IChjb25zdCBjaGFyKikgZGF0YTsK
KyAgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3Zp
ZXdfbmV3KCkpOworICAgICBnX29iamVjdF9yZWZfc2luayhHX09CSkVDVCh2aWV3KSk7CisKKyAg
ICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKKworICAgICBnX29iamVjdF9j
b25uZWN0KEdfT0JKRUNUKHZpZXcpLAorICAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6Om5v
dGlmeTo6bG9hZC1zdGF0dXMiLCBpZGxlX3F1aXRfbG9vcF9jYiwgTlVMTCwKKyAgICAgICAgICAg
ICAgICAgICAgICAic2lnbmFsOjptaW1lLXR5cGUtcG9saWN5LWRlY2lzaW9uLXJlcXVlc3RlZCIs
IG1pbWVfdHlwZV9wb2xpY3lfZGVjaXNpb25fcmVxdWVzdGVkX2NiLCBnX3N0cmR1cCh0eXBlTmFt
ZSksCisgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICAgZ2NoYXIqIGZpbGVuYW1l
ID0gZ19zdHJkdXBfcHJpbnRmKCJ0ZXN0LiVzIiwgdHlwZU5hbWUpOworICAgICBHRmlsZSogZmls
ZSA9IGdfZmlsZV9uZXdfZm9yX3BhdGgoZmlsZW5hbWUpOworICAgICBnX2ZyZWUoZmlsZW5hbWUp
OworCisgICAgIGdjaGFyKiBmaWxlVVJJID0gZ19maWxlX2dldF91cmkoZmlsZSk7CisgICAgIGdf
b2JqZWN0X3VucmVmKGZpbGUpOworCisgICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh2aWV3
LCBmaWxlVVJJKTsKKyAgICAgZ19mcmVlKGZpbGVVUkkpOworIAorICAgICBnX21haW5fbG9vcF9y
dW4obG9vcCk7CisgICAgIGdfb2JqZWN0X3VucmVmKHZpZXcpOworfQorCitpbnQgbWFpbihpbnQg
YXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgU291cFNlcnZlciogc2VydmVyOworICAgIFNvdXBV
UkkqIHNvdXBfdXJpOworCisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOwor
CisgICAgLyogSG9wZWZ1bGx5IG1ha2UgdGVzdCBpbmRlcGVuZGVudCBvZiB0aGUgcGF0aCBpdCdz
IGNhbGxlZCBmcm9tLiAqLworICAgIHRlc3R1dGlsc19yZWxhdGl2ZV9jaGRpcigiVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvcmVzb3VyY2VzL3Rlc3QuaHRtbCIsIGFyZ3ZbMF0p
OworCisgICAgc2VydmVyID0gc291cF9zZXJ2ZXJfbmV3KFNPVVBfU0VSVkVSX1BPUlQsIDAsIE5V
TEwpOworICAgIHNvdXBfc2VydmVyX3J1bl9hc3luYyhzZXJ2ZXIpOworCisgICAgc291cF9zZXJ2
ZXJfYWRkX2hhbmRsZXIoc2VydmVyLCBOVUxMLCBzZXJ2ZXJfY2FsbGJhY2ssIE5VTEwsIE5VTEwp
OworCisgICAgc291cF91cmkgPSBzb3VwX3VyaV9uZXcoImh0dHA6Ly8xMjcuMC4wLjEvIik7Cisg
ICAgc291cF91cmlfc2V0X3BvcnQoc291cF91cmksIHNvdXBfc2VydmVyX2dldF9wb3J0KHNlcnZl
cikpOworCisgICAgYmFzZV91cmkgPSBzb3VwX3VyaV90b19zdHJpbmcoc291cF91cmksIEZBTFNF
KTsKKyAgICBzb3VwX3VyaV9mcmVlKHNvdXBfdXJpKTsKKworICAgIGdfdGVzdF9idWdfYmFzZSgi
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7CisgICAgZ190ZXN0X2FkZF9kYXRhX2Z1bmMoIi93
ZWJraXQvbWltZS9yZW1vdGUtUERGIiwgInBkZiIsIHRlc3RSZW1vdGVNaW1lVHlwZSk7CisgICAg
Z190ZXN0X2FkZF9kYXRhX2Z1bmMoIi93ZWJraXQvbWltZS9yZW1vdGUtSFRNTCIsICJodG1sIiwg
dGVzdFJlbW90ZU1pbWVUeXBlKTsKKyAgICBnX3Rlc3RfYWRkX2RhdGFfZnVuYygiL3dlYmtpdC9t
aW1lL3JlbW90ZS1URVhUIiwgInRleHQiLCB0ZXN0UmVtb3RlTWltZVR5cGUpOworICAgIGdfdGVz
dF9hZGRfZGF0YV9mdW5jKCIvd2Via2l0L21pbWUvbG9jYWwtUERGIiwgInBkZiIsIHRlc3RMb2Nh
bE1pbWVUeXBlKTsKKyAgICBnX3Rlc3RfYWRkX2RhdGFfZnVuYygiL3dlYmtpdC9taW1lL2xvY2Fs
LUhUTUwiLCAiaHRtbCIsIHRlc3RMb2NhbE1pbWVUeXBlKTsKKyAgICBnX3Rlc3RfYWRkX2RhdGFf
ZnVuYygiL3dlYmtpdC9taW1lL2xvY2FsLVRFWFQiLCAidGV4dCIsIHRlc3RMb2NhbE1pbWVUeXBl
KTsKKworICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0bmV0d29ya3JlcXVlc3QuYyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RuZXR3b3JrcmVxdWVzdC5jCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMmM5MGYKLS0tIC9kZXYvbnVsbAorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0bmV0d29ya3JlcXVlc3QuYwpA
QCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEd1c3Rhdm8gTm9yb25o
YSBTaWx2YQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRl
IDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4K
KyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8d2Vi
a2l0L3dlYmtpdC5oPgorCitzdGF0aWMgdm9pZCB0ZXN0X25ldHdvcmtfcmVxdWVzdF9jcmVhdGVf
ZGVzdHJveSgpCit7CisgICAgV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3Q7CisgICAgU291
cE1lc3NhZ2UqIG1lc3NhZ2U7CisKKyAgICAvKiBUZXN0IGNyZWF0aW9uIHdpdGggVVJJICovCisg
ICAgcmVxdWVzdCA9IFdFQktJVF9ORVRXT1JLX1JFUVVFU1QoZ19vYmplY3RfbmV3KFdFQktJVF9U
WVBFX05FVFdPUktfUkVRVUVTVCwgInVyaSIsICJodHRwOi8vZGViaWFuLm9yZy8iLCBOVUxMKSk7
CisgICAgZ19hc3NlcnQoV0VCS0lUX0lTX05FVFdPUktfUkVRVUVTVChyZXF1ZXN0KSk7CisgICAg
bWVzc2FnZSA9IHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfZ2V0X21lc3NhZ2UocmVxdWVzdCk7Cisg
ICAgZ19hc3NlcnQoIW1lc3NhZ2UpOworICAgIGdfb2JqZWN0X3VucmVmKHJlcXVlc3QpOworCisg
ICAgLyogVGVzdCBjcmVhdGlvbiB3aXRoIFNvdXBNZXNzYWdlICovCisgICAgbWVzc2FnZSA9IHNv
dXBfbWVzc2FnZV9uZXcoIkdFVCIsICJodHRwOi8vZGViaWFuLm9yZy8iKTsKKyAgICByZXF1ZXN0
ID0gV0VCS0lUX05FVFdPUktfUkVRVUVTVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfTkVUV09S
S19SRVFVRVNULCAibWVzc2FnZSIsIG1lc3NhZ2UsIE5VTEwpKTsKKyAgICBnX2Fzc2VydChXRUJL
SVRfSVNfTkVUV09SS19SRVFVRVNUKHJlcXVlc3QpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoR19P
QkpFQ1QobWVzc2FnZSktPnJlZl9jb3VudCwgPT0sIDIpOworICAgIGdfb2JqZWN0X3VucmVmKHJl
cXVlc3QpOworICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChtZXNzYWdlKS0+cmVmX2NvdW50
LCA9PSwgMSk7CisgICAgZ19vYmplY3RfdW5yZWYobWVzc2FnZSk7CisKKyAgICAvKiBUZXN0IGNy
ZWF0aW9uIHdpdGggYm90aCBTb3VwTWVzc2FnZSBhbmQgVVJJICovCisgICAgbWVzc2FnZSA9IHNv
dXBfbWVzc2FnZV9uZXcoIkdFVCIsICJodHRwOi8vZGViaWFuLm9yZy8iKTsKKyAgICByZXF1ZXN0
ID0gV0VCS0lUX05FVFdPUktfUkVRVUVTVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfTkVUV09S
S19SRVFVRVNULCAibWVzc2FnZSIsIG1lc3NhZ2UsICJ1cmkiLCAiaHR0cDovL2dub21lLm9yZy8i
LCBOVUxMKSk7CisgICAgZ19hc3NlcnQoV0VCS0lUX0lTX05FVFdPUktfUkVRVUVTVChyZXF1ZXN0
KSk7CisgICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKG1lc3NhZ2UpLT5yZWZfY291bnQsID09
LCAyKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X25ldHdvcmtfcmVxdWVzdF9nZXRfdXJp
KHJlcXVlc3QpLCA9PSwgImh0dHA6Ly9nbm9tZS5vcmcvIik7CisgICAgZ19vYmplY3RfdW5yZWYo
cmVxdWVzdCk7CisgICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKG1lc3NhZ2UpLT5yZWZfY291
bnQsID09LCAxKTsKKyAgICBnX29iamVjdF91bnJlZihtZXNzYWdlKTsKK30KKworc3RhdGljIHZv
aWQgdGVzdF9uZXR3b3JrX3JlcXVlc3RfcHJvcGVydGllcygpCit7CisgICAgV2ViS2l0TmV0d29y
a1JlcXVlc3QqIHJlcXVlc3Q7CisgICAgU291cE1lc3NhZ2UqIG1lc3NhZ2U7CisgICAgZ2NoYXIq
IHNvdXBVUkk7CisKKyAgICAvKiBUZXN0IFVSSSBpcyBzZXQgY29ycmVjdGx5IHdoZW4gY3JlYXRp
bmcgd2l0aCBVUkkgKi8KKyAgICByZXF1ZXN0ID0gd2Via2l0X25ldHdvcmtfcmVxdWVzdF9uZXco
Imh0dHA6Ly9kZWJpYW4ub3JnLyIpOworICAgIGdfYXNzZXJ0KFdFQktJVF9JU19ORVRXT1JLX1JF
UVVFU1QocmVxdWVzdCkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfbmV0d29ya19yZXF1
ZXN0X2dldF91cmkocmVxdWVzdCksID09LCAiaHR0cDovL2RlYmlhbi5vcmcvIik7CisgICAgZ19v
YmplY3RfdW5yZWYocmVxdWVzdCk7CisKKyAgICAvKiBUZXN0IFVSSSBpcyBzZXQgY29ycmVjdGx5
IHdoZW4gY3JlYXRpbmcgd2l0aCBNZXNzYWdlICovCisgICAgbWVzc2FnZSA9IHNvdXBfbWVzc2Fn
ZV9uZXcoIkdFVCIsICJodHRwOi8vZGViaWFuLm9yZy8iKTsKKyAgICByZXF1ZXN0ID0gV0VCS0lU
X05FVFdPUktfUkVRVUVTVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfTkVUV09SS19SRVFVRVNU
LCAibWVzc2FnZSIsIG1lc3NhZ2UsIE5VTEwpKTsKKyAgICBnX2Fzc2VydChXRUJLSVRfSVNfTkVU
V09SS19SRVFVRVNUKHJlcXVlc3QpKTsKKyAgICBnX29iamVjdF91bnJlZihtZXNzYWdlKTsKKwor
ICAgIG1lc3NhZ2UgPSB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X2dldF9tZXNzYWdlKHJlcXVlc3Qp
OworICAgIHNvdXBVUkkgPSBzb3VwX3VyaV90b19zdHJpbmcoc291cF9tZXNzYWdlX2dldF91cmko
bWVzc2FnZSksIEZBTFNFKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc291cFVSSSwgPT0sICJodHRw
Oi8vZGViaWFuLm9yZy8iKTsKKyAgICBnX2ZyZWUoc291cFVSSSk7CisKKyAgICBnX2Fzc2VydF9j
bXBzdHIod2Via2l0X25ldHdvcmtfcmVxdWVzdF9nZXRfdXJpKHJlcXVlc3QpLCA9PSwgImh0dHA6
Ly9kZWJpYW4ub3JnLyIpOworICAgIGdfb2JqZWN0X3VucmVmKHJlcXVlc3QpOworfQorCitpbnQg
bWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywg
JmFyZ3YsIE5VTEwpOworCisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvbmV0d29ya3JlcXVlc3QvY3Jl
YXRlZGVzdHJveSIsIHRlc3RfbmV0d29ya19yZXF1ZXN0X2NyZWF0ZV9kZXN0cm95KTsKKyAgICBn
X3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvbmV0d29ya3JlcXVlc3QvcHJvcGVydGllcyIsIHRlc3Rf
bmV0d29ya19yZXF1ZXN0X3Byb3BlcnRpZXMpOworICAgIHJldHVybiBnX3Rlc3RfcnVuICgpOwor
fQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdG5l
dHdvcmtyZXNwb25zZS5jIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVz
dG5ldHdvcmtyZXNwb25zZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4
MDZhYTEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dEd0ay90ZXN0bmV0d29ya3Jlc3BvbnNlLmMKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSBHdXN0YXZvIE5vcm9uaGEgU2lsdmEKKyAqIENvcHlyaWdodCAoQykgMjAw
OSBDb2xsYWJvcmEgTHRkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8ZXJybm8uaD4K
KyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z2xpYi9n
c3RkaW8uaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5j
bHVkZSA8d2Via2l0L3dlYmtpdC5oPgorCitzdGF0aWMgdm9pZCB0ZXN0X25ldHdvcmtfcmVzcG9u
c2VfY3JlYXRlX2Rlc3Ryb3koKQoreworICAgIFdlYktpdE5ldHdvcmtSZXNwb25zZSogcmVzcG9u
c2U7CisgICAgU291cE1lc3NhZ2UqIG1lc3NhZ2U7CisKKyAgICAvKiBUZXN0IGNyZWF0aW9uIHdp
dGggVVJJICovCisgICAgcmVzcG9uc2UgPSBXRUJLSVRfTkVUV09SS19SRVNQT05TRShnX29iamVj
dF9uZXcoV0VCS0lUX1RZUEVfTkVUV09SS19SRVNQT05TRSwgInVyaSIsICJodHRwOi8vZGViaWFu
Lm9yZy8iLCBOVUxMKSk7CisgICAgZ19hc3NlcnQoV0VCS0lUX0lTX05FVFdPUktfUkVTUE9OU0Uo
cmVzcG9uc2UpKTsKKyAgICBtZXNzYWdlID0gd2Via2l0X25ldHdvcmtfcmVzcG9uc2VfZ2V0X21l
c3NhZ2UocmVzcG9uc2UpOworICAgIGdfYXNzZXJ0KCFtZXNzYWdlKTsKKyAgICBnX29iamVjdF91
bnJlZihyZXNwb25zZSk7CisKKyAgICAvKiBUZXN0IGNyZWF0aW9uIHdpdGggU291cE1lc3NhZ2Ug
Ki8KKyAgICBtZXNzYWdlID0gc291cF9tZXNzYWdlX25ldygiR0VUIiwgImh0dHA6Ly9kZWJpYW4u
b3JnLyIpOworICAgIHJlc3BvbnNlID0gV0VCS0lUX05FVFdPUktfUkVTUE9OU0UoZ19vYmplY3Rf
bmV3KFdFQktJVF9UWVBFX05FVFdPUktfUkVTUE9OU0UsICJtZXNzYWdlIiwgbWVzc2FnZSwgTlVM
TCkpOworICAgIGdfYXNzZXJ0KFdFQktJVF9JU19ORVRXT1JLX1JFU1BPTlNFKHJlc3BvbnNlKSk7
CisgICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKG1lc3NhZ2UpLT5yZWZfY291bnQsID09LCAy
KTsKKyAgICBnX29iamVjdF91bnJlZihyZXNwb25zZSk7CisgICAgZ19hc3NlcnRfY21waW50KEdf
T0JKRUNUKG1lc3NhZ2UpLT5yZWZfY291bnQsID09LCAxKTsKKyAgICBnX29iamVjdF91bnJlZiht
ZXNzYWdlKTsKKworICAgIC8qIFRlc3QgY3JlYXRpb24gd2l0aCBib3RoIFNvdXBNZXNzYWdlIGFu
ZCBVUkkgKi8KKyAgICBtZXNzYWdlID0gc291cF9tZXNzYWdlX25ldygiR0VUIiwgImh0dHA6Ly9k
ZWJpYW4ub3JnLyIpOworICAgIHJlc3BvbnNlID0gV0VCS0lUX05FVFdPUktfUkVTUE9OU0UoZ19v
YmplY3RfbmV3KFdFQktJVF9UWVBFX05FVFdPUktfUkVTUE9OU0UsICJtZXNzYWdlIiwgbWVzc2Fn
ZSwgInVyaSIsICJodHRwOi8vZ25vbWUub3JnLyIsIE5VTEwpKTsKKyAgICBnX2Fzc2VydChXRUJL
SVRfSVNfTkVUV09SS19SRVNQT05TRShyZXNwb25zZSkpOworICAgIGdfYXNzZXJ0X2NtcGludChH
X09CSkVDVChtZXNzYWdlKS0+cmVmX2NvdW50LCA9PSwgMik7CisgICAgZ19hc3NlcnRfY21wc3Ry
KHdlYmtpdF9uZXR3b3JrX3Jlc3BvbnNlX2dldF91cmkocmVzcG9uc2UpLCA9PSwgImh0dHA6Ly9n
bm9tZS5vcmcvIik7CisgICAgZ19vYmplY3RfdW5yZWYocmVzcG9uc2UpOworICAgIGdfYXNzZXJ0
X2NtcGludChHX09CSkVDVChtZXNzYWdlKS0+cmVmX2NvdW50LCA9PSwgMSk7CisgICAgZ19vYmpl
Y3RfdW5yZWYobWVzc2FnZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfbmV0d29ya19yZXNwb25z
ZV9wcm9wZXJ0aWVzKCkKK3sKKyAgICBXZWJLaXROZXR3b3JrUmVzcG9uc2UqIHJlc3BvbnNlOwor
ICAgIFNvdXBNZXNzYWdlKiBtZXNzYWdlOworICAgIGdjaGFyKiBzb3VwVVJJOworCisgICAgLyog
VGVzdCBVUkkgaXMgc2V0IGNvcnJlY3RseSB3aGVuIGNyZWF0aW5nIHdpdGggVVJJICovCisgICAg
cmVzcG9uc2UgPSB3ZWJraXRfbmV0d29ya19yZXNwb25zZV9uZXcoImh0dHA6Ly9kZWJpYW4ub3Jn
LyIpOworICAgIGdfYXNzZXJ0KFdFQktJVF9JU19ORVRXT1JLX1JFU1BPTlNFKHJlc3BvbnNlKSk7
CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9uZXR3b3JrX3Jlc3BvbnNlX2dldF91cmkocmVz
cG9uc2UpLCA9PSwgImh0dHA6Ly9kZWJpYW4ub3JnLyIpOworICAgIGdfb2JqZWN0X3VucmVmKHJl
c3BvbnNlKTsKKworICAgIC8qIFRlc3QgVVJJIGlzIHNldCBjb3JyZWN0bHkgd2hlbiBjcmVhdGlu
ZyB3aXRoIE1lc3NhZ2UgKi8KKyAgICBtZXNzYWdlID0gc291cF9tZXNzYWdlX25ldygiR0VUIiwg
Imh0dHA6Ly9kZWJpYW4ub3JnLyIpOworICAgIHJlc3BvbnNlID0gV0VCS0lUX05FVFdPUktfUkVT
UE9OU0UoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX05FVFdPUktfUkVTUE9OU0UsICJtZXNzYWdl
IiwgbWVzc2FnZSwgTlVMTCkpOworICAgIGdfYXNzZXJ0KFdFQktJVF9JU19ORVRXT1JLX1JFU1BP
TlNFKHJlc3BvbnNlKSk7CisgICAgZ19vYmplY3RfdW5yZWYobWVzc2FnZSk7CisKKyAgICBtZXNz
YWdlID0gd2Via2l0X25ldHdvcmtfcmVzcG9uc2VfZ2V0X21lc3NhZ2UocmVzcG9uc2UpOworICAg
IHNvdXBVUkkgPSBzb3VwX3VyaV90b19zdHJpbmcoc291cF9tZXNzYWdlX2dldF91cmkobWVzc2Fn
ZSksIEZBTFNFKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc291cFVSSSwgPT0sICJodHRwOi8vZGVi
aWFuLm9yZy8iKTsKKyAgICBnX2ZyZWUoc291cFVSSSk7CisKKyAgICBnX2Fzc2VydF9jbXBzdHIo
d2Via2l0X25ldHdvcmtfcmVzcG9uc2VfZ2V0X3VyaShyZXNwb25zZSksID09LCAiaHR0cDovL2Rl
Ymlhbi5vcmcvIik7CisgICAgZ19vYmplY3RfdW5yZWYocmVzcG9uc2UpOworfQorCitpbnQgbWFp
bihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFy
Z3YsIE5VTEwpOworCisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy8iKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvbmV0d29ya3Jlc3BvbnNlL2NyZWF0
ZWRlc3Ryb3kiLCB0ZXN0X25ldHdvcmtfcmVzcG9uc2VfY3JlYXRlX2Rlc3Ryb3kpOworICAgIGdf
dGVzdF9hZGRfZnVuYygiL3dlYmtpdC9uZXR3b3JrcmVzcG9uc2UvcHJvcGVydGllcyIsIHRlc3Rf
bmV0d29ya19yZXNwb25zZV9wcm9wZXJ0aWVzKTsKKyAgICByZXR1cm4gZ190ZXN0X3J1biAoKTsK
K30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3
ZWJiYWNrZm9yd2FyZGxpc3QuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3Rr
L3Rlc3R3ZWJiYWNrZm9yd2FyZGxpc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi43NzgyZDQwCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRHdGsvdGVzdHdlYmJhY2tmb3J3YXJkbGlzdC5jCkBAIC0wLDAgKzEsMzI2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgor
I2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2Vi
X2hpc3RvcnlfaXRlbV9saWZldGltZSh2b2lkKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXc7CisgICAgV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3Q7CisgICAg
V2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGN1cnJlbnRJdGVtOworICAgIFdlYktpdFdlYkhpc3RvcnlJ
dGVtKiBmb3J3YXJkSXRlbTsKKyAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogYmFja0l0ZW07Cisg
ICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIG50aEl0ZW07CisgICAgV2ViS2l0V2ViSGlzdG9yeUl0
ZW0qIGl0ZW0xOworICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBpdGVtMjsKKyAgICBXZWJLaXRX
ZWJIaXN0b3J5SXRlbSogaXRlbTM7CisgICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGl0ZW00Owor
ICAgIEdMaXN0KiBiYWNrTGlzdCA9IE5VTEw7CisgICAgR0xpc3QqIGZvcndhcmRMaXN0ID0gTlVM
TDsKKyAgICBnX3Rlc3RfYnVnKCIxOTg5OCIpOworCisgICAgd2ViVmlldyA9IFdFQktJVF9XRUJf
VklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZp
ZXcpOworICAgIGJhY2tGb3J3YXJkTGlzdCA9IHdlYmtpdF93ZWJfdmlld19nZXRfYmFja19mb3J3
YXJkX2xpc3Qod2ViVmlldyk7CisgICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKGJhY2tGb3J3
YXJkTGlzdCktPnJlZl9jb3VudCwgPT0sIDEpOworCisgICAgLyogYWRkIHRlc3QgaXRlbXMgKi8K
KyAgICBpdGVtMSA9IHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX25ld193aXRoX2RhdGEoImh0dHA6
Ly9leGFtcGxlLmNvbS8xLyIsICJTaXRlIDEiKTsKKyAgICB3ZWJraXRfd2ViX2JhY2tfZm9yd2Fy
ZF9saXN0X2FkZF9pdGVtKGJhY2tGb3J3YXJkTGlzdCwgaXRlbTEpOworICAgIGdfb2JqZWN0X3Vu
cmVmKGl0ZW0xKTsKKworICAgIGl0ZW0yID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dp
dGhfZGF0YSgiaHR0cDovL2V4YW1wbGUuY29tLzIvIiwgIlNpdGUgMiIpOworICAgIHdlYmtpdF93
ZWJfYmFja19mb3J3YXJkX2xpc3RfYWRkX2l0ZW0oYmFja0ZvcndhcmRMaXN0LCBpdGVtMik7Cisg
ICAgZ19vYmplY3RfdW5yZWYoaXRlbTIpOworCisgICAgaXRlbTMgPSB3ZWJraXRfd2ViX2hpc3Rv
cnlfaXRlbV9uZXdfd2l0aF9kYXRhKCJodHRwOi8vZXhhbXBsZS5jb20vMy8iLCAiU2l0ZSAzIik7
CisgICAgd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9hZGRfaXRlbShiYWNrRm9yd2FyZExp
c3QsIGl0ZW0zKTsKKyAgICBnX29iamVjdF91bnJlZihpdGVtMyk7CisKKyAgICBpdGVtNCA9IHdl
YmtpdF93ZWJfaGlzdG9yeV9pdGVtX25ld193aXRoX2RhdGEoImh0dHA6Ly9leGFtcGxlLmNvbS80
LyIsICJTaXRlIDQiKTsKKyAgICB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2FkZF9pdGVt
KGJhY2tGb3J3YXJkTGlzdCwgaXRlbTQpOworICAgIGdfb2JqZWN0X3VucmVmKGl0ZW00KTsKKwor
ICAgIC8qIG1ha2Ugc3VyZSB0aGVzZSBmdW5jdGlvbnMgZG9uJ3QgYWRkIHVubmVjZXNzYXJ5IHJl
ZiB0byB0aGUgaGlzdG9yeSBpdGVtICovCisgICAgYmFja0l0ZW0gPSB3ZWJraXRfd2ViX2JhY2tf
Zm9yd2FyZF9saXN0X2dldF9iYWNrX2l0ZW0oYmFja0ZvcndhcmRMaXN0KTsKKyAgICBnX29iamVj
dF9yZWYoYmFja0l0ZW0pOworICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChiYWNrSXRlbSkt
PnJlZl9jb3VudCwgPT0sIDIpOworICAgIGdfb2JqZWN0X3VucmVmKGJhY2tJdGVtKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoYmFja0l0ZW0pLT5yZWZfY291bnQsID09LCAxKTsKKwor
ICAgIGN1cnJlbnRJdGVtID0gd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVu
dF9pdGVtKGJhY2tGb3J3YXJkTGlzdCk7CisgICAgZ19vYmplY3RfcmVmKGN1cnJlbnRJdGVtKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoY3VycmVudEl0ZW0pLT5yZWZfY291bnQsID09
LCAyKTsKKyAgICBnX29iamVjdF91bnJlZihjdXJyZW50SXRlbSk7CisgICAgZ19hc3NlcnRfY21w
aW50KEdfT0JKRUNUKGN1cnJlbnRJdGVtKS0+cmVmX2NvdW50LCA9PSwgMSk7CisKKyAgICB3ZWJr
aXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dvX3RvX2l0ZW0oYmFja0ZvcndhcmRMaXN0LCBpdGVt
Mik7CisgICAgZm9yd2FyZEl0ZW0gPSB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9m
b3J3YXJkX2l0ZW0oYmFja0ZvcndhcmRMaXN0KTsKKyAgICBnX29iamVjdF9yZWYoZm9yd2FyZEl0
ZW0pOworICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChmb3J3YXJkSXRlbSktPnJlZl9jb3Vu
dCwgPT0sIDIpOworICAgIGdfb2JqZWN0X3VucmVmKGZvcndhcmRJdGVtKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoR19PQkpFQ1QoZm9yd2FyZEl0ZW0pLT5yZWZfY291bnQsID09LCAxKTsKKworICAg
IG50aEl0ZW0gPSB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9udGhfaXRlbShiYWNr
Rm9yd2FyZExpc3QsIDEpOworICAgIGdfb2JqZWN0X3JlZihudGhJdGVtKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoR19PQkpFQ1QobnRoSXRlbSktPnJlZl9jb3VudCwgPT0sIDIpOworICAgIGdfb2Jq
ZWN0X3VucmVmKG50aEl0ZW0pOworICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChudGhJdGVt
KS0+cmVmX2NvdW50LCA9PSwgMSk7CisKKyAgICBiYWNrTGlzdCA9IHdlYmtpdF93ZWJfYmFja19m
b3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGlzdF93aXRoX2xpbWl0KGJhY2tGb3J3YXJkTGlzdCwgNSk7
CisgICAgZm9yICg7IGJhY2tMaXN0OyBiYWNrTGlzdCA9IGJhY2tMaXN0LT5uZXh0KQorICAgICAg
ICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoYmFja0xpc3QtPmRhdGEpLT5yZWZfY291bnQsID09
LCAxKTsKKworICAgIGZvcndhcmRMaXN0ID0gd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9n
ZXRfZm9yd2FyZF9saXN0X3dpdGhfbGltaXQoYmFja0ZvcndhcmRMaXN0LCA1KTsKKyAgICBmb3Ig
KDsgZm9yd2FyZExpc3Q7IGZvcndhcmRMaXN0ID0gZm9yd2FyZExpc3QtPm5leHQpCisgICAgICAg
IGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChmb3J3YXJkTGlzdC0+ZGF0YSktPnJlZl9jb3VudCwg
PT0sIDEpOworCisgICAgZ19saXN0X2ZyZWUoZm9yd2FyZExpc3QpOworICAgIGdfbGlzdF9mcmVl
KGJhY2tMaXN0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoaXRlbTEpLT5yZWZfY291
bnQsID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoaXRlbTIpLT5yZWZfY291
bnQsID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoaXRlbTMpLT5yZWZfY291
bnQsID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoaXRlbTQpLT5yZWZfY291
bnQsID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoYmFja0ZvcndhcmRMaXN0
KS0+cmVmX2NvdW50LCA9PSwgMSk7CisgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Cit9CisK
K3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9vcmRlcih2b2lk
KQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXc7CisgICAgV2ViS2l0V2ViQmFja0Zvcndh
cmRMaXN0KiB3ZWJCYWNrRm9yd2FyZExpc3Q7CisgICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGl0
ZW0xOworICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBpdGVtMjsKKyAgICBXZWJLaXRXZWJIaXN0
b3J5SXRlbSogaXRlbTM7CisgICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGl0ZW00OworICAgIFdl
YktpdFdlYkhpc3RvcnlJdGVtKiBjdXJyZW50SXRlbTsKKyAgICBHTGlzdCogYmFja0xpc3QgPSBO
VUxMOworICAgIEdMaXN0KiBmb3J3YXJkTGlzdCA9IE5VTEw7CisgICAgZ190ZXN0X2J1ZygiMjI2
OTQiKTsKKworICAgIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25l
dygpKTsKKyAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKKworICAgIHdlYmtpdF93ZWJf
dmlld19zZXRfbWFpbnRhaW5zX2JhY2tfZm9yd2FyZF9saXN0KHdlYlZpZXcsIFRSVUUpOworICAg
IHdlYkJhY2tGb3J3YXJkTGlzdCA9IHdlYmtpdF93ZWJfdmlld19nZXRfYmFja19mb3J3YXJkX2xp
c3Qod2ViVmlldyk7CisgICAgZ19hc3NlcnQod2ViQmFja0ZvcndhcmRMaXN0KTsKKworICAgIC8v
IENoZWNrIHRoYXQgdGhlcmUgaXMgbm8gaXRlbS4KKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl9i
YWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCkpOwor
ICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3
YXJkX2xlbmd0aCh3ZWJCYWNrRm9yd2FyZExpc3QpLCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21w
aW50KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGVuZ3RoKHdlYkJhY2tG
b3J3YXJkTGlzdCksID09LCAwKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9n
b19mb3J3YXJkKHdlYlZpZXcpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9n
b19iYWNrKHdlYlZpZXcpKTsKKworICAgIC8vIEFkZCBhIG5ldyBpdGVtcworICAgIGl0ZW0xID0g
d2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dpdGhfZGF0YSgiaHR0cDovL2V4YW1wbGUuY29t
LzEvIiwgIlNpdGUgMSIpOworICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfYWRkX2l0
ZW0od2ViQmFja0ZvcndhcmRMaXN0LCBpdGVtMSk7CisgICAgZ19vYmplY3RfdW5yZWYoaXRlbTEp
OworICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY29udGFpbnNfaXRl
bSh3ZWJCYWNrRm9yd2FyZExpc3QsIGl0ZW0xKSk7CisKKyAgICBpdGVtMiA9IHdlYmtpdF93ZWJf
aGlzdG9yeV9pdGVtX25ld193aXRoX2RhdGEoImh0dHA6Ly9leGFtcGxlLmNvbS8yLyIsICJTaXRl
IDIiKTsKKyAgICB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2FkZF9pdGVtKHdlYkJhY2tG
b3J3YXJkTGlzdCwgaXRlbTIpOworICAgIGdfb2JqZWN0X3VucmVmKGl0ZW0yKTsKKyAgICBnX2Fz
c2VydCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2NvbnRhaW5zX2l0ZW0od2ViQmFja0Zv
cndhcmRMaXN0LCBpdGVtMikpOworCisgICAgaXRlbTMgPSB3ZWJraXRfd2ViX2hpc3RvcnlfaXRl
bV9uZXdfd2l0aF9kYXRhKCJodHRwOi8vZXhhbXBsZS5jb20vMy8iLCAiU2l0ZSAzIik7CisgICAg
d2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9hZGRfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3Qs
IGl0ZW0zKTsKKyAgICBnX29iamVjdF91bnJlZihpdGVtMyk7CisgICAgZ19hc3NlcnQod2Via2l0
X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9jb250YWluc19pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCwg
aXRlbTMpKTsKKworICAgIGl0ZW00ID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dpdGhf
ZGF0YSgiaHR0cDovL2V4YW1wbGUuY29tLzQvIiwgIlNpdGUgNCIpOworICAgIHdlYmtpdF93ZWJf
YmFja19mb3J3YXJkX2xpc3RfYWRkX2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0LCBpdGVtNCk7Cisg
ICAgZ19vYmplY3RfdW5yZWYoaXRlbTQpOworICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfYmFja19m
b3J3YXJkX2xpc3RfY29udGFpbnNfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QsIGl0ZW00KSk7CisK
KyAgICAvLyBjaGVjayB0aGUgYmFjayBsaXN0IG9yZGVyCisgICAgYmFja0xpc3QgPSB3ZWJraXRf
d2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3Rfd2l0aF9saW1pdCh3ZWJCYWNrRm9y
d2FyZExpc3QsIDUpOworICAgIGdfYXNzZXJ0KGJhY2tMaXN0KTsKKworICAgIGN1cnJlbnRJdGVt
ID0gV0VCS0lUX1dFQl9ISVNUT1JZX0lURU0oYmFja0xpc3QtPmRhdGEpOworICAgIGdfYXNzZXJ0
X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdXJpKGN1cnJlbnRJdGVtKSwgPT0s
ICJodHRwOi8vZXhhbXBsZS5jb20vMy8iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dl
Yl9oaXN0b3J5X2l0ZW1fZ2V0X3RpdGxlKGN1cnJlbnRJdGVtKSwgPT0sICJTaXRlIDMiKTsKKyAg
ICBiYWNrTGlzdCA9IGJhY2tMaXN0LT5uZXh0OworCisgICAgY3VycmVudEl0ZW0gPSBXRUJLSVRf
V0VCX0hJU1RPUllfSVRFTShiYWNrTGlzdC0+ZGF0YSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdl
YmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF91cmkoY3VycmVudEl0ZW0pLCA9PSwgImh0dHA6Ly9l
eGFtcGxlLmNvbS8yLyIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3Rvcnlf
aXRlbV9nZXRfdGl0bGUoY3VycmVudEl0ZW0pLCA9PSwgIlNpdGUgMiIpOworICAgIGJhY2tMaXN0
ID0gYmFja0xpc3QtPm5leHQ7CisKKyAgICBjdXJyZW50SXRlbSA9IFdFQktJVF9XRUJfSElTVE9S
WV9JVEVNKGJhY2tMaXN0LT5kYXRhKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9o
aXN0b3J5X2l0ZW1fZ2V0X3VyaShjdXJyZW50SXRlbSksID09LCAiaHR0cDovL2V4YW1wbGUuY29t
LzEvIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF90
aXRsZShjdXJyZW50SXRlbSksID09LCAiU2l0ZSAxIik7CisgICAgZ19saXN0X2ZyZWUoYmFja0xp
c3QpOworCisgICAgLy8gY2hlY2sgdGhlIGZvcndhcmQgbGlzdCBvcmRlcgorICAgIGdfYXNzZXJ0
KHdlYmtpdF93ZWJfdmlld19nb190b19iYWNrX2ZvcndhcmRfaXRlbSh3ZWJWaWV3LCBpdGVtMSkp
OworICAgIGZvcndhcmRMaXN0ID0gd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9y
d2FyZF9saXN0X3dpdGhfbGltaXQod2ViQmFja0ZvcndhcmRMaXN0LDUpOworICAgIGdfYXNzZXJ0
KGZvcndhcmRMaXN0KTsKKworICAgIGN1cnJlbnRJdGVtID0gV0VCS0lUX1dFQl9ISVNUT1JZX0lU
RU0oZm9yd2FyZExpc3QtPmRhdGEpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hp
c3RvcnlfaXRlbV9nZXRfdXJpKGN1cnJlbnRJdGVtKSwgPT0sICJodHRwOi8vZXhhbXBsZS5jb20v
NC8iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3Rp
dGxlKGN1cnJlbnRJdGVtKSwgPT0sICJTaXRlIDQiKTsKKyAgICBmb3J3YXJkTGlzdCA9IGZvcndh
cmRMaXN0LT5uZXh0OworCisgICAgY3VycmVudEl0ZW0gPSBXRUJLSVRfV0VCX0hJU1RPUllfSVRF
TShmb3J3YXJkTGlzdC0+ZGF0YSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlz
dG9yeV9pdGVtX2dldF91cmkoY3VycmVudEl0ZW0pLCA9PSwgImh0dHA6Ly9leGFtcGxlLmNvbS8z
LyIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdGl0
bGUoY3VycmVudEl0ZW0pLCA9PSwgIlNpdGUgMyIpOworICAgIGZvcndhcmRMaXN0ID0gZm9yd2Fy
ZExpc3QtPm5leHQ7CisKKyAgICBjdXJyZW50SXRlbSA9IFdFQktJVF9XRUJfSElTVE9SWV9JVEVN
KGZvcndhcmRMaXN0LT5kYXRhKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0
b3J5X2l0ZW1fZ2V0X3VyaShjdXJyZW50SXRlbSksID09LCAiaHR0cDovL2V4YW1wbGUuY29tLzIv
Iik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF90aXRs
ZShjdXJyZW50SXRlbSksID09LCAiU2l0ZSAyIik7CisKKyAgICBnX2xpc3RfZnJlZShmb3J3YXJk
TGlzdCk7CisgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Cit9CisKK3N0YXRpYyB2b2lkIHRl
c3Rfd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9hZGRfaXRlbSh2b2lkKQoreworICAgIFdl
YktpdFdlYlZpZXcqIHdlYlZpZXc7CisgICAgV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJC
YWNrRm9yd2FyZExpc3Q7CisgICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGFkZEl0ZW0xOworICAg
IFdlYktpdFdlYkhpc3RvcnlJdGVtKiBhZGRJdGVtMjsKKyAgICBXZWJLaXRXZWJIaXN0b3J5SXRl
bSogYmFja0l0ZW07CisgICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGN1cnJlbnRJdGVtOworICAg
IGdfdGVzdF9idWcoIjIyOTg4Iik7CisKKyAgICB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdl
YmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7CisK
KyAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X21haW50YWluc19iYWNrX2ZvcndhcmRfbGlzdCh3ZWJW
aWV3LCBUUlVFKTsKKyAgICB3ZWJCYWNrRm9yd2FyZExpc3QgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X2JhY2tfZm9yd2FyZF9saXN0KHdlYlZpZXcpOworICAgIGdfYXNzZXJ0KHdlYkJhY2tGb3J3YXJk
TGlzdCk7CisKKyAgICAvLyBDaGVjayB0aGF0IHRoZXJlIGlzIG5vIGl0ZW0uCisgICAgZ19hc3Nl
cnQoIXdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh3ZWJCYWNr
Rm9yd2FyZExpc3QpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2Zvcndh
cmRfbGlzdF9nZXRfZm9yd2FyZF9sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDApOwor
ICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNr
X2xlbmd0aCh3ZWJCYWNrRm9yd2FyZExpc3QpLCA9PSwgMCk7CisgICAgZ19hc3NlcnQoIXdlYmtp
dF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh3ZWJWaWV3KSk7CisgICAgZ19hc3NlcnQoIXdlYmtp
dF93ZWJfdmlld19jYW5fZ29fYmFjayh3ZWJWaWV3KSk7CisKKyAgICAvLyBBZGQgYSBuZXcgaXRl
bQorICAgIGFkZEl0ZW0xID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dpdGhfZGF0YSgi
aHR0cDovL2V4YW1wbGUuY29tLyIsICJBZGRlZCBzaXRlIik7CisgICAgd2Via2l0X3dlYl9iYWNr
X2ZvcndhcmRfbGlzdF9hZGRfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QsIGFkZEl0ZW0xKTsKKyAg
ICBnX29iamVjdF91bnJlZihhZGRJdGVtMSk7CisgICAgZ19hc3NlcnQod2Via2l0X3dlYl9iYWNr
X2ZvcndhcmRfbGlzdF9jb250YWluc19pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCwgYWRkSXRlbTEp
KTsKKworICAgIC8vIENoZWNrIHRoYXQgdGhlIGFkZGVkIGl0ZW0gaXMgdGhlIGN1cnJlbnQgaXRl
bS4KKyAgICBjdXJyZW50SXRlbSA9IHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1
cnJlbnRfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QpOworICAgIGdfYXNzZXJ0KGN1cnJlbnRJdGVt
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRf
Zm9yd2FyZF9sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDApOworICAgIGdfYXNzZXJ0
X2NtcGludCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xlbmd0aCh3ZWJC
YWNrRm9yd2FyZExpc3QpLCA9PSwgMCk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19j
YW5fZ29fZm9yd2FyZCh3ZWJWaWV3KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19j
YW5fZ29fYmFjayh3ZWJWaWV3KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlz
dG9yeV9pdGVtX2dldF91cmkoY3VycmVudEl0ZW0pLCA9PSwgImh0dHA6Ly9leGFtcGxlLmNvbS8i
KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3RpdGxl
KGN1cnJlbnRJdGVtKSwgPT0sICJBZGRlZCBzaXRlIik7CisKKyAgICAvLyBBZGQgYW5vdGhlciBp
dGVtLgorICAgIGFkZEl0ZW0yID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dpdGhfZGF0
YSgiaHR0cDovL2V4YW1wbGUuY29tLzIvIiwgIkFkZGVkIHNpdGUgMiIpOworICAgIHdlYmtpdF93
ZWJfYmFja19mb3J3YXJkX2xpc3RfYWRkX2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0LCBhZGRJdGVt
Mik7CisgICAgZ19vYmplY3RfdW5yZWYoYWRkSXRlbTIpOworICAgIGdfYXNzZXJ0KHdlYmtpdF93
ZWJfYmFja19mb3J3YXJkX2xpc3RfY29udGFpbnNfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QsIGFk
ZEl0ZW0yKSk7CisKKyAgICAvLyBDaGVjayB0aGF0IHRoZSBhZGRlZCBpdGVtIGlzIG5ldyBjdXJy
ZW50IGl0ZW0uCisgICAgY3VycmVudEl0ZW0gPSB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0
X2dldF9jdXJyZW50X2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0KTsKKyAgICBnX2Fzc2VydChjdXJy
ZW50SXRlbSk7CisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xp
c3RfZ2V0X2ZvcndhcmRfbGVuZ3RoKHdlYkJhY2tGb3J3YXJkTGlzdCksID09LCAwKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19sZW5n
dGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDEpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2Vi
X3ZpZXdfY2FuX2dvX2ZvcndhcmQod2ViVmlldykpOworICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJf
dmlld19jYW5fZ29fYmFjayh3ZWJWaWV3KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93
ZWJfaGlzdG9yeV9pdGVtX2dldF91cmkoY3VycmVudEl0ZW0pLCA9PSwgImh0dHA6Ly9leGFtcGxl
LmNvbS8yLyIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9n
ZXRfdGl0bGUoY3VycmVudEl0ZW0pLCA9PSwgIkFkZGVkIHNpdGUgMiIpOworCisgICAgYmFja0l0
ZW0gPSB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2l0ZW0od2ViQmFja0Zv
cndhcmRMaXN0KTsKKyAgICBnX2Fzc2VydChiYWNrSXRlbSk7CisgICAgZ19hc3NlcnRfY21wc3Ry
KHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF91cmkoYmFja0l0ZW0pLCA9PSwgImh0dHA6Ly9l
eGFtcGxlLmNvbS8iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0
ZW1fZ2V0X3RpdGxlKGJhY2tJdGVtKSwgPT0sICJBZGRlZCBzaXRlIik7CisKKyAgICAvLyBHbyB0
byB0aGUgZmlyc3QgYWRkZWQgaXRlbS4KKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ29f
dG9fYmFja19mb3J3YXJkX2l0ZW0od2ViVmlldywgYWRkSXRlbTEpKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9sZW5ndGgod2Vi
QmFja0ZvcndhcmRMaXN0KSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2Vi
X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xlbmd0aCh3ZWJCYWNrRm9yd2FyZExpc3QpLCA9
PSwgMCk7CisgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHdlYlZp
ZXcpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrKHdlYlZpZXcp
KTsKKworICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0
X3dlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY2xlYXIodm9pZCkKK3sKKyAgICBXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3OworICAgIFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViQmFja0Zv
cndhcmRMaXN0OworICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBhZGRJdGVtOworICAgIGdfdGVz
dF9idWcoIjM2MTczIik7CisKKyAgICB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93
ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7CisKKyAgICB3
ZWJCYWNrRm9yd2FyZExpc3QgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2JhY2tfZm9yd2FyZF9saXN0
KHdlYlZpZXcpOworICAgIGdfYXNzZXJ0KHdlYkJhY2tGb3J3YXJkTGlzdCk7CisKKyAgICAvLyBD
aGVjayB0aGF0IHRoZXJlIGlzIG5vIGl0ZW0uCisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93
ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGVuZ3RoKHdlYkJhY2tGb3J3YXJkTGlz
dCksID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRf
bGlzdF9nZXRfYmFja19sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDApOworICAgIGdf
YXNzZXJ0KCF3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0od2Vi
QmFja0ZvcndhcmRMaXN0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29f
Zm9yd2FyZCh3ZWJWaWV3KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29f
YmFjayh3ZWJWaWV3KSk7CisKKyAgICAvLyBDaGVjayB0aGF0IGNsZWFyaW5nIHRoZSBlbXB0eSBs
aXN0IGRvZXMgbm90IG1vZGlmeSBjb3VudGVycworICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJk
X2xpc3RfY2xlYXIod2ViQmFja0ZvcndhcmRMaXN0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Vi
a2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9sZW5ndGgod2ViQmFja0Zvcndh
cmRMaXN0KSwgPT0sIDApOworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2ViX2JhY2tfZm9y
d2FyZF9saXN0X2dldF9iYWNrX2xlbmd0aCh3ZWJCYWNrRm9yd2FyZExpc3QpLCA9PSwgMCk7Cisg
ICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRl
bSh3ZWJCYWNrRm9yd2FyZExpc3QpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nh
bl9nb19mb3J3YXJkKHdlYlZpZXcpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nh
bl9nb19iYWNrKHdlYlZpZXcpKTsKKworICAgIC8vIEFkZCBhIG5ldyBpdGVtCisgICAgYWRkSXRl
bSA9IHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX25ld193aXRoX2RhdGEoImh0dHA6Ly9leGFtcGxl
LmNvbS8iLCAiQWRkZWQgc2l0ZSIpOworICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3Rf
YWRkX2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0LCBhZGRJdGVtKTsKKyAgICBnX29iamVjdF91bnJl
ZihhZGRJdGVtKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2Nv
bnRhaW5zX2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0LCBhZGRJdGVtKSk7CisKKyAgICAvLyBDaGVj
ayB0aGF0IGFmdGVyIGNsZWFyaW5nIHRoZSBsaXN0IHRoZSBhZGRlZCBpdGVtIGlzIG5vIGxvbmdl
ciBpbiB0aGUgbGlzdAorICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY2xlYXIod2Vi
QmFja0ZvcndhcmRMaXN0KTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRf
bGlzdF9jb250YWluc19pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCwgYWRkSXRlbSkpOworCisgICAg
Ly8gQ2hlY2sgdGhhdCBhZnRlciBjbGVhcmluZyBpdCwgdGhlIGxpc3QgaXMgZW1wdHkKKyAgICBn
X2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9s
ZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDApOworICAgIGdfYXNzZXJ0X2NtcGludCh3
ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xlbmd0aCh3ZWJCYWNrRm9yd2Fy
ZExpc3QpLCA9PSwgMCk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xp
c3RfZ2V0X2N1cnJlbnRfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QpKTsKKyAgICBnX2Fzc2VydCgh
d2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHdlYlZpZXcpKTsKKyAgICBnX2Fzc2VydCgh
d2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrKHdlYlZpZXcpKTsKKworICAgIGdfb2JqZWN0X3Vu
cmVmKHdlYlZpZXcpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7Cisg
ICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAgZ190ZXN0X2J1Z19i
YXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93
ZWJraXQvd2ViYmFja2ZvcndhcmRsaXN0L2FkZF9pdGVtIiwgdGVzdF93ZWJraXRfd2ViX2JhY2tf
Zm9yd2FyZF9saXN0X2FkZF9pdGVtKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vi
YmFja2ZvcndhcmRsaXN0L2xpc3Rfb3JkZXIiLCB0ZXN0X3dlYmtpdF93ZWJfYmFja19mb3J3YXJk
X2xpc3Rfb3JkZXIpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJoaXN0b3J5aXRl
bS9saWZldGltZSIsIHRlc3Rfd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbGlmZXRpbWUpOworICAg
IGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJiYWNrZm9yd2FyZGxpc3QvY2xlYXIiLCB0ZXN0
X3dlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY2xlYXIpOworICAgIHJldHVybiBnX3Rlc3Rf
cnVuICgpOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRH
dGsvdGVzdHdlYmRhdGFzb3VyY2UuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
R3RrL3Rlc3R3ZWJkYXRhc291cmNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMDU2NjI1NwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0R3RrL3Rlc3R3ZWJkYXRhc291cmNlLmMKQEAgLTAsMCArMSwyNDIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgSmFuIE1pY2hhZWwgQWxvbnpvCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtp
dC93ZWJraXQuaD4KKworc3RhdGljIGNvbnN0IGdzaG9ydCBkZWZhdWx0VGltZW91dCA9IDEwOwor
Z3VpbnQgd2FpdFRpbWVyOworZ2Jvb2xlYW4gc2hvdWxkV2FpdDsKKwordHlwZWRlZiBzdHJ1Y3Qg
eworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXc7CisgICAgV2ViS2l0V2ViRnJhbWUqIG1haW5G
cmFtZTsKK30gV2ViRGF0YVNvdXJjZUZpeHR1cmU7CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0
X3dlYl9kYXRhX3NvdXJjZV9nZXRfaW5pdGlhbF9yZXF1ZXN0KCkKK3sKKyAgICBXZWJLaXRXZWJW
aWV3KiB2aWV3OworICAgIFdlYktpdFdlYkZyYW1lKiBmcmFtZTsKKyAgICBXZWJLaXRXZWJEYXRh
U291cmNlKiBkYXRhU291cmNlOworICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiBpbml0aWFsUmVx
dWVzdDsKKworICAgIHZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygp
KTsKKyAgICBnX29iamVjdF9yZWZfc2luayh2aWV3KTsKKyAgICBmcmFtZSA9IHdlYmtpdF93ZWJf
dmlld19nZXRfbWFpbl9mcmFtZSh2aWV3KTsKKworICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiBy
ZXF1ZXN0ID0gd2Via2l0X25ldHdvcmtfcmVxdWVzdF9uZXcoImh0dHA6Ly93d3cuZ29vZ2xlLmNv
bSIpOworICAgIHdlYmtpdF93ZWJfZnJhbWVfbG9hZF9yZXF1ZXN0KGZyYW1lLCByZXF1ZXN0KTsK
KyAgICBnX29iamVjdF91bnJlZihyZXF1ZXN0KTsKKworICAgIGRhdGFTb3VyY2UgPSB3ZWJraXRf
d2ViX2ZyYW1lX2dldF9wcm92aXNpb25hbF9kYXRhX3NvdXJjZShmcmFtZSk7CisgICAgZ19hc3Nl
cnQoZGF0YVNvdXJjZSk7CisgICAgaW5pdGlhbFJlcXVlc3QgPSB3ZWJraXRfd2ViX2RhdGFfc291
cmNlX2dldF9pbml0aWFsX3JlcXVlc3QoZGF0YVNvdXJjZSk7CisgICAgZ19hc3NlcnRfY21wc3Ry
KHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfZ2V0X3VyaShpbml0aWFsUmVxdWVzdCksID09LCAiaHR0
cDovL3d3dy5nb29nbGUuY29tLyIpOworCisgICAgZ19vYmplY3RfdW5yZWYodmlldyk7Cit9CisK
K3N0YXRpYyB2b2lkIG5vdGlmeV9sb2FkX3N0YXR1c191bnJlYWNoYWJsZV9jYihXZWJLaXRXZWJW
aWV3KiB2aWV3LCBHUGFyYW1TcGVjKiBwc3BlYywgR01haW5Mb29wKiBsb29wKQoreworICAgIFdl
YktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyAo
dmlldyk7CisgICAgV2ViS2l0V2ViRnJhbWUqIGZyYW1lID0gd2Via2l0X3dlYl92aWV3X2dldF9t
YWluX2ZyYW1lKHZpZXcpOworCisgICAgZ19hc3NlcnQoc3RhdHVzICE9IFdFQktJVF9MT0FEX0ZJ
TklTSEVEKTsKKworICAgIGlmIChzdGF0dXMgIT0gV0VCS0lUX0xPQURfRkFJTEVEKQorICAgICAg
ICByZXR1cm47CisKKyAgICBXZWJLaXRXZWJEYXRhU291cmNlKiBkYXRhc291cmNlID0gd2Via2l0
X3dlYl9mcmFtZV9nZXRfZGF0YV9zb3VyY2UoZnJhbWUpOworCisgICAgZ19hc3NlcnRfY21wc3Ry
KCJodHRwOi8vdGhpcy5ob3N0LmRvZXMubm90LmV4aXN0L2RvaXJlYWxseWV4aXN0Lmh0bWwiLCA9
PSwKKyAgICAgICAgICAgICAgICAgICAgd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfdW5yZWFj
aGFibGVfdXJpKGRhdGFzb3VyY2UpKTsKKworICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Cit9
CisKK3N0YXRpYyB2b2lkIG5vdGlmeV9sb2FkX3N0YXR1c19jYihXZWJLaXRXZWJWaWV3KiB2aWV3
LCBHUGFyYW1TcGVjKiBwc3BlYywgR01haW5Mb29wKiBsb29wKQoreworICAgIFdlYktpdExvYWRT
dGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyAodmlldyk7Cisg
ICAgV2ViS2l0V2ViRnJhbWUqIGZyYW1lID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX2ZyYW1l
KHZpZXcpOworICAgIFdlYktpdFdlYkRhdGFTb3VyY2UqIGRhdGFTb3VyY2UgPSB3ZWJraXRfd2Vi
X2ZyYW1lX2dldF9kYXRhX3NvdXJjZShmcmFtZSk7CisKKyAgICBpZiAoc3RhdHVzID09IFdFQktJ
VF9MT0FEX0NPTU1JVFRFRCkgeworICAgICAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2RhdGFfc291
cmNlX2lzX2xvYWRpbmcoZGF0YVNvdXJjZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGVsc2UgaWYgKHN0YXR1cyAhPSBXRUJLSVRfTE9BRF9GSU5JU0hFRCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgLyogVGVzdCBnZXRfcmVxdWVzdCAqLworICAgIGdfdGVzdF9tZXNzYWdlKCJUZXN0
aW5nIHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X3JlcXVlc3QiKTsKKyAgICBXZWJLaXROZXR3
b3JrUmVxdWVzdCogcmVxdWVzdCA9IHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X3JlcXVlc3Qo
ZGF0YVNvdXJjZSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9uZXR3b3JrX3JlcXVlc3Rf
Z2V0X3VyaShyZXF1ZXN0KSwgPT0sICJodHRwOi8vd3d3LndlYmtpdC5vcmcvIik7CisKKyAgICAv
KiBUZXN0IGdldF9tYWluX3Jlc291cmNlICovCisgICAgZ190ZXN0X21lc3NhZ2UoIlRlc3Rpbmcg
d2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfbWFpbl9yZXNvdXJjZSIpOworICAgIFdlYktpdFdl
YlJlc291cmNlKiByZXNvdXJjZSA9IHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X21haW5fcmVz
b3VyY2UoZGF0YVNvdXJjZSk7CisgICAgZ19hc3NlcnRfY21wc3RyKCJ0ZXh0L2h0bWwiLCA9PSwg
d2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfbWltZV90eXBlKHJlc291cmNlKSk7CisgICAgZ19hc3Nl
cnRfY21wc3RyKCJodHRwOi8vd3d3LndlYmtpdC5vcmcvIiwgPT0sIHdlYmtpdF93ZWJfcmVzb3Vy
Y2VfZ2V0X3VyaShyZXNvdXJjZSkpOworCisgICAgLyogVGVzdCBnZXRfZGF0YS4gV2UganVzdCB0
ZXN0IGlmIGRhdGEgaGFzIGNlcnRhaW4gc2l6ZSBmb3IgdGhlIG1lYW4gdGltZSAqLworICAgIGdf
dGVzdF9tZXNzYWdlKCJUZXN0aW5nIHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X2RhdGEgaGFz
IGNlcnRhaW4gc2l6ZSIpOworICAgIEdTdHJpbmcqIGRhdGEgPSB3ZWJraXRfd2ViX2RhdGFfc291
cmNlX2dldF9kYXRhKGRhdGFTb3VyY2UpOworICAgIGdfYXNzZXJ0KGRhdGEtPmxlbiA+IDEwMCk7
CisKKyAgICAvKiBGSVhNRTogQWRkIHRlc3QgZm9yIGdldF9lbmNvZGluZyAqLworCisgICAgZ19t
YWluX2xvb3BfcXVpdChsb29wKTsKK30KKworc3RhdGljIGdib29sZWFuIHdhaXRfdGltZXJfZmly
ZWQoR01haW5Mb29wKiBsb29wKQoreworICAgIHdhaXRUaW1lciA9IDA7CisgICAgZ19tYWluX2xv
b3BfcXVpdChsb29wKTsKKworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgdGVz
dF93ZWJraXRfd2ViX2RhdGFfc291cmNlKCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB2aWV3Owor
ICAgIEdNYWluTG9vcCogbG9vcDsKKworICAgIHZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0
X3dlYl92aWV3X25ldygpKTsKKyAgICBnX29iamVjdF9yZWZfc2luayh2aWV3KTsKKyAgICBsb29w
ID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qodmll
dywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLCBHX0NBTExCQUNLKG5vdGlmeV9sb2FkX3N0YXR1c19j
YiksIGxvb3ApOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh2aWV3LCAiaHR0cDovL3d3
dy53ZWJraXQub3JnIik7CisKKyAgICB3YWl0VGltZXIgPSBnX3RpbWVvdXRfYWRkX3NlY29uZHMo
ZGVmYXVsdFRpbWVvdXQsIChHU291cmNlRnVuYyl3YWl0X3RpbWVyX2ZpcmVkLCBsb29wKTsKKwor
ICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIGlmICh3YWl0VGltZXIpCisgICAgICAg
IGdfc291cmNlX3JlbW92ZSh3YWl0VGltZXIpOworCisgICAgd2FpdFRpbWVyID0gMDsKKworICAg
IGdfbWFpbl9sb29wX3VucmVmKGxvb3ApOworICAgIGdfb2JqZWN0X3VucmVmKHZpZXcpOworfQor
CitzdGF0aWMgdm9pZCBub3RpZnlfbG9hZF9zdGF0dXNfbGlmZXRpbWVfY2IoV2ViS2l0V2ViVmll
dyogdmlldywgR1BhcmFtU3BlYyogcHNwZWMsIEdNYWluTG9vcCogbG9vcCkKK3sKKyAgICBXZWJL
aXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMgKHZp
ZXcpOworICAgIFdlYktpdFdlYkZyYW1lKiBmcmFtZSA9IHdlYmtpdF93ZWJfdmlld19nZXRfbWFp
bl9mcmFtZSh2aWV3KTsKKyAgICBXZWJLaXRXZWJEYXRhU291cmNlKiBkYXRhU291cmNlID0gd2Vi
a2l0X3dlYl9mcmFtZV9nZXRfZGF0YV9zb3VyY2UoZnJhbWUpOworCisgICAgaWYgKHN0YXR1cyA9
PSBXRUJLSVRfTE9BRF9DT01NSVRURUQpIHsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X3dlYl9k
YXRhX3NvdXJjZV9pc19sb2FkaW5nKGRhdGFTb3VyY2UpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0gZWxzZSBpZiAoc3RhdHVzICE9IFdFQktJVF9MT0FEX0ZJTklTSEVEKQorICAgICAgICByZXR1
cm47CisKKyAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworfQorCitzdGF0aWMgdm9pZCB0ZXN0
X3dlYmtpdF93ZWJfZGF0YV9zb3VyY2VfbGlmZXRpbWUoKQoreworICAgIFdlYktpdFdlYlZpZXcq
IHZpZXc7CisgICAgR01haW5Mb29wKiBsb29wOworCisgICAgdmlldyA9IFdFQktJVF9XRUJfVklF
Vyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKHZpZXcpOwor
ICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisgICAgZ19zaWduYWxfY29u
bmVjdCh2aWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0sobm90aWZ5X2xvYWRf
c3RhdHVzX2xpZmV0aW1lX2NiKSwgbG9vcCk7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJp
KHZpZXcsICJodHRwOi8vd3d3LndlYmtpdC5vcmciKTsKKworICAgIHdhaXRUaW1lciA9IGdfdGlt
ZW91dF9hZGRfc2Vjb25kcyhkZWZhdWx0VGltZW91dCwgKEdTb3VyY2VGdW5jKXdhaXRfdGltZXJf
ZmlyZWQsIGxvb3ApOworCisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgV2ViS2l0
V2ViRGF0YVNvdXJjZSogZGF0YVNvdXJjZSA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X2RhdGFfc291
cmNlKHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh2aWV3KSk7CisgICAgR0xpc3QqIHN1
YlJlc291cmNlcyA9IHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X3N1YnJlc291cmNlcyhkYXRh
U291cmNlKTsKKyAgICBnaW50IG51bWJlck9mUmVzb3VyY2VzID0gZ19saXN0X2xlbmd0aChzdWJS
ZXNvdXJjZXMpOworICAgIGdfbGlzdF9mcmVlKHN1YlJlc291cmNlcyk7CisKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQod2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh2aWV3KSwgPT0sIFdFQktJ
VF9MT0FEX0ZJTklTSEVEKTsKKworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh2aWV3LCAi
aHR0cDovL2dub21lLm9yZyIpOworCisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJfdmll
d19nZXRfbG9hZF9zdGF0dXModmlldyksID09LCBXRUJLSVRfTE9BRF9QUk9WSVNJT05BTCk7CisK
KyAgICB3ZWJraXRfd2ViX3ZpZXdfc3RvcF9sb2FkaW5nKHZpZXcpOworCisgICAgZ19hc3NlcnRf
Y21waW50KHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXModmlldyksID09LCBXRUJLSVRf
TE9BRF9GQUlMRUQpOworCisgICAgc3ViUmVzb3VyY2VzID0gd2Via2l0X3dlYl9kYXRhX3NvdXJj
ZV9nZXRfc3VicmVzb3VyY2VzKGRhdGFTb3VyY2UpOworICAgIGdfYXNzZXJ0X2NtcGludChudW1i
ZXJPZlJlc291cmNlcywgPT0sIGdfbGlzdF9sZW5ndGgoc3ViUmVzb3VyY2VzKSk7CisgICAgZ19s
aXN0X2ZyZWUoc3ViUmVzb3VyY2VzKTsKKworICAgIGlmICh3YWl0VGltZXIpCisgICAgICAgIGdf
c291cmNlX3JlbW92ZSh3YWl0VGltZXIpOworCisgICAgd2FpdFRpbWVyID0gMDsKKworICAgIGdf
bWFpbl9sb29wX3VucmVmKGxvb3ApOworICAgIGdfb2JqZWN0X3VucmVmKHZpZXcpOworfQorCitz
dGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfZGF0YV9zb3VyY2VfdW5yZWFjaGFibGVfdXJpKCkK
K3sKKyAgICAvKiBGSVhNRTogdGhpcyB0ZXN0IGZhaWxzIGN1cnJlbnRseS4gKi8KKyAgICByZXR1
cm47CisKKyAgICBXZWJLaXRXZWJWaWV3KiB2aWV3OworICAgIEdNYWluTG9vcCogbG9vcDsKKwor
ICAgIHZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBn
X29iamVjdF9yZWZfc2luayh2aWV3KTsKKyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEws
IFRSVUUpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QodmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMi
LCBHX0NBTExCQUNLKG5vdGlmeV9sb2FkX3N0YXR1c191bnJlYWNoYWJsZV9jYiksIGxvb3ApOwor
ICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh2aWV3LCAiaHR0cDovL3RoaXMuaG9zdC5kb2Vz
Lm5vdC5leGlzdC9kb2lyZWFsbHlleGlzdC5odG1sIik7CisKKyAgICB3YWl0VGltZXIgPSBnX3Rp
bWVvdXRfYWRkX3NlY29uZHMoZGVmYXVsdFRpbWVvdXQsIChHU291cmNlRnVuYyl3YWl0X3RpbWVy
X2ZpcmVkLCBsb29wKTsKKworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIGlmICh3
YWl0VGltZXIpCisgICAgICAgIGdfc291cmNlX3JlbW92ZSh3YWl0VGltZXIpOworCisgICAgd2Fp
dFRpbWVyID0gMDsKKworICAgIGdfbWFpbl9sb29wX3VucmVmKGxvb3ApOworICAgIGdfb2JqZWN0
X3VucmVmKHZpZXcpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7Cisg
ICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAgZ190ZXN0X2J1Z19i
YXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYnVnKCIyNDc1OCIp
OworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJkYXRhc291cmNlL2dldF9pbml0aWFs
X3JlcXVlc3QiLAorICAgICAgICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF93ZWJfZGF0YV9zb3Vy
Y2VfZ2V0X2luaXRpYWxfcmVxdWVzdCk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dl
YmRhdGFzb3VyY2UvYXBpIiwKKyAgICAgICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfd2ViX2Rh
dGFfc291cmNlKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2ViZGF0YXNvdXJjZS91
bnJlYWNoYWJsZV91cmkiLAorICAgICAgICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF93ZWJfZGF0
YV9zb3VyY2VfdW5yZWFjaGFibGVfdXJpKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQv
d2ViZGF0YXNvdXJjZS9saWZldGltZSIsCisgICAgICAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0
X3dlYl9kYXRhX3NvdXJjZV9saWZldGltZSk7CisKKyAgICByZXR1cm4gZ190ZXN0X3J1biAoKTsK
K30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3
ZWJmcmFtZS5jIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYmZy
YW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEzMTg3MwotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJm
cmFtZS5jCkBAIC0wLDAgKzEsMjIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdl
ciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQ29sbGFib3JhIEx0
ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8dW5p
c3RkLmg+CisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CisjaW5j
bHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKworc3RhdGljIGlu
dCBudW1iZXJPZkZyYW1lc0NyZWF0ZWQgPSAwOworCitzdGF0aWMgdm9pZCBjcmVhdGVGcmFtZVNp
Z25hbFRlc3RGcmFtZUNyZWF0ZWRDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJL
aXRXZWJGcmFtZSogZnJhbWUsIGdwb2ludGVyIGRhdGEpCit7CisgICAgbnVtYmVyT2ZGcmFtZXND
cmVhdGVkKys7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBjcmVhdGVGcmFtZVNpZ25hbFRlc3RUaW1l
b3V0KGdwb2ludGVyIGRhdGEpCit7CisgICAgZ19hc3NlcnRfY21waW50KG51bWJlck9mRnJhbWVz
Q3JlYXRlZCwgPT0sIDIpOworICAgIGdfbWFpbl9sb29wX3F1aXQoKEdNYWluTG9vcCopIGRhdGEp
OworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX2Zy
YW1lX2NyZWF0ZWRfc2lnbmFsKHZvaWQpCit7CisgICAgR3RrV2lkZ2V0KiB3ZWJWaWV3OworICAg
IEd0a1dpZGdldCogd2luZG93OworICAgIEdNYWluTG9vcCogbG9vcCA9IGdfbWFpbl9sb29wX25l
dyhOVUxMLCBUUlVFKTsKKworICAgIHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1df
VE9QTEVWRUwpOworCisgICAgd2ViVmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKKyAgICBn
X3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJmcmFtZS1jcmVhdGVkIiwgR19DQUxMQkFDSyhjcmVh
dGVGcmFtZVNpZ25hbFRlc3RGcmFtZUNyZWF0ZWRDYWxsYmFjayksIGxvb3ApOworCisgICAgLy8g
V2Ugd2FudCB0byBlbnN1cmUgdGhhdCBleGFjdGx5IHR3byBjcmVhdGUtZnJhbWUgc2lnbmFscyBh
cmUKKyAgICAvLyBmaXJlZCBhbmQgbm8gbW9yZSwgc28gd2Ugc2V0IGEgdGltZW91dCBoZXJlLiBU
aGVyZSBkb2VzIG5vdCBhcHBlYXIKKyAgICAvLyB0byBiZSBhIHNpbXBsZSB3YXkgdmlhIHRoZSBB
UEkgdG8gZmlndXJlIG91dCB3aGVuIGFsbCBmcmFtZXMgaGF2ZQorICAgIC8vIGxvYWRlZC4KKyAg
ICBnX3RpbWVvdXRfYWRkKDUwMCwgY3JlYXRlRnJhbWVTaWduYWxUZXN0VGltZW91dCwgbG9vcCk7
CisKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHdlYlZpZXcp
OworICAgIGd0a193aWRnZXRfc2hvdyh3aW5kb3cpOworICAgIGd0a193aWRnZXRfc2hvdyh3ZWJW
aWV3KTsKKworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVco
d2ViVmlldyksCisgICAgICAgICI8aHRtbD48Ym9keT5GcmFtZXMhIgorICAgICAgICAiPGlmcmFt
ZT48L2lmcmFtZT4iCisgICAgICAgICI8aWZyYW1lPjwvaWZyYW1lPiIKKyAgICAgICAgIjwvYm9k
eT48L2h0bWw+IiwKKyAgICAgICAgInRleHQvaHRtbCIsICJ1dGYtOCIsICJmaWxlOi8vIik7Cisg
ICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93
ZWJfZnJhbWVfY3JlYXRlX2Rlc3Ryb3kodm9pZCkKK3sKKyAgICBHdGtXaWRnZXQgKndlYlZpZXc7
CisgICAgR3RrV2lkZ2V0ICp3aW5kb3c7CisKKyAgICBnX3Rlc3RfYnVnKCIyMTgzNyIpOworICAg
IHdlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7CisgICAgZ19vYmplY3RfcmVmX3Npbmso
d2ViVmlldyk7CisgICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKHdlYlZpZXcpLT5yZWZfY291
bnQsID09LCAxKTsKKyAgICAvLyBUaGlzIGNyYXNoZWQgd2l0aCB0aGUgb3JpZ2luYWwgdmVyc2lv
bgorICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOworCisgICAgZ190ZXN0X2J1ZygiMjUwNDIi
KTsKKyAgICB3aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKKyAg
ICB3ZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygpOworICAgIGd0a19jb250YWluZXJfYWRk
KEdUS19DT05UQUlORVIod2luZG93KSwgd2ViVmlldyk7CisgICAgZ3RrX3dpZGdldF9zaG93KHdp
bmRvdyk7CisgICAgZ3RrX3dpZGdldF9zaG93KHdlYlZpZXcpOworICAgIGd0a193aWRnZXRfZGVz
dHJveSh3ZWJWaWV3KTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX2ZyYW1lX2xp
ZmV0aW1lKHZvaWQpCit7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldzsKKyAgICBXZWJLaXRX
ZWJGcmFtZSogd2ViRnJhbWU7CisgICAgZ190ZXN0X2J1ZygiMjE4MzciKTsKKworICAgIHdlYlZp
ZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBnX29iamVj
dF9yZWZfc2luayh3ZWJWaWV3KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1Qod2ViVmll
dyktPnJlZl9jb3VudCwgPT0sIDEpOworICAgIHdlYkZyYW1lID0gd2Via2l0X3dlYl92aWV3X2dl
dF9tYWluX2ZyYW1lKHdlYlZpZXcpOworICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVCh3ZWJG
cmFtZSktPnJlZl9jb3VudCwgPT0sIDEpOworCisgICAgLy8gQWRkIGR1bW15IHJlZmVyZW5jZSBv
biB0aGUgV2ViS2l0V2ViRnJhbWUgdG8ga2VlcCBpdCBhbGl2ZQorICAgIGdfb2JqZWN0X3JlZih3
ZWJGcmFtZSk7CisgICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKHdlYkZyYW1lKS0+cmVmX2Nv
dW50LCA9PSwgMik7CisKKyAgICAvLyBUaGlzIGNyYXNoZWQgd2l0aCB0aGUgb3JpZ2luYWwgdmVy
c2lvbgorICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOworCisgICAgLy8gTWFrZSBzdXJlIHRo
YXQgdGhlIGZyYW1lIGdvdCBkZWxldGVkIGFzIHdlbGwuIFdlIGRpZCB0aGlzCisgICAgLy8gYnkg
YWRkaW5nIGFuIGV4dHJhIHJlZiBvbiB0aGUgV2ViS2l0V2ViRnJhbWUgYW5kIHdlIHNob3VsZAor
ICAgIC8vIGJlIHRoZSBvbmUgaG9sZGluZyB0aGUgbGFzdCByZWZlcmVuY2UuCisgICAgZ19hc3Nl
cnRfY21waW50KEdfT0JKRUNUKHdlYkZyYW1lKS0+cmVmX2NvdW50LCA9PSwgMSk7CisgICAgZ19v
YmplY3RfdW5yZWYod2ViRnJhbWUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gcHJpbnRfcmVxdWVz
dGVkX2NiKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFdlYkZyYW1lKiB3ZWJGcmFtZSwg
R01haW5Mb29wKiBsb29wKQoreworICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKHdlYlZp
ZXcpLCAic2lnbmFsLWhhbmRsZWQiLCBHSU5UX1RPX1BPSU5URVIoVFJVRSkpOworICAgIGdfbWFp
bl9sb29wX3F1aXQobG9vcCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkIHBy
aW50X3RpbWVvdXQoR01haW5Mb29wKiBsb29wKQoreworICAgIGlmIChnX21haW5fbG9vcF9pc19y
dW5uaW5nKGxvb3ApKQorICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworfQorCitzdGF0
aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfcHJpbnRpbmcodm9pZCkKK3sKKyAgICBXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3OworCisgICAgd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJr
aXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOworICAg
IGdfYXNzZXJ0X2NtcGludChHX09CSkVDVCh3ZWJWaWV3KS0+cmVmX2NvdW50LCA9PSwgMSk7CisK
KyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIjxodG1sPjxib2R5PjxoMT5XZWJLaXRHVEsrITwvaDE+PC9ib2R5
PjwvaHRtbD4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGV4dC9odG1sIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInV0Zi04IiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImZpbGU6Ly8iKTsKKworICAgIEdNYWluTG9vcCogbG9vcCA9IGdf
bWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKKworICAgIC8vIERvZXMgamF2YXNjcmlwdCBwcmlu
dCgpIHdvcmsgY29ycmVjdGx5PworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgInByaW50
LXJlcXVlc3RlZCIsCisgICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKHByaW50X3JlcXVl
c3RlZF9jYiksCisgICAgICAgICAgICAgICAgICAgICBsb29wKTsKKworICAgIGdfb2JqZWN0X3Nl
dF9kYXRhKEdfT0JKRUNUKHdlYlZpZXcpLCAic2lnbmFsLWhhbmRsZWQiLCBHSU5UX1RPX1BPSU5U
RVIoRkFMU0UpKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfZXhlY3V0ZV9zY3JpcHQgKHdlYlZpZXcs
ICJwcmludCgpOyIpOworCisgICAgLy8gR2l2ZSBqYXZhc2NyaXB0Y29yZSBzb21lIHRpbWUgdG8g
cHJvY2VzcyB0aGUgcHJpbnQgcmVxdWVzdCwgYnV0CisgICAgLy8gcHJlcGFyZSBhIHRpbWVvdXQg
dG8gYXZvaWQgaXQgcnVubmluZyBmb3JldmVyIGluIGNhc2UgdGhlIHNpZ25hbCBpcworICAgIC8v
IG5ldmVyIGVtaXR0ZWQuCisgICAgZ190aW1lb3V0X2FkZCgxMDAwLCAoR1NvdXJjZUZ1bmMpcHJp
bnRfdGltZW91dCwgbG9vcCk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgZ19h
c3NlcnRfY21waW50KEdQT0lOVEVSX1RPX0lOVChnX29iamVjdF9nZXRfZGF0YShHX09CSkVDVCh3
ZWJWaWV3KSwgInNpZ25hbC1oYW5kbGVkIikpLCA9PSwgVFJVRSk7CisKKyAgICAvLyBEb2VzIHBy
aW50aW5nIGRpcmVjdGx5IHRvIGEgZmlsZT8KKyAgICBHRXJyb3IgKmVycm9yID0gTlVMTDsKKyAg
ICBnY2hhciogdGVtcG9yYXJ5RmlsZW5hbWUgPSBOVUxMOworICAgIGdpbnQgZmQgPSBnX2ZpbGVf
b3Blbl90bXAgKCJ3ZWJraXQtdGVzdHdlYmZyYW1lLVhYWFhYWCIsICZ0ZW1wb3JhcnlGaWxlbmFt
ZSwgJmVycm9yKTsKKyAgICBjbG9zZShmZCk7CisKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAg
Z19jcml0aWNhbCgiRmFpbGVkIHRvIG9wZW4gYSB0ZW1wb3JhcnkgZmlsZSBmb3Igd3JpdGluZzog
JXMuIiwgZXJyb3ItPm1lc3NhZ2UpOworICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyb3IpOworICAg
ICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgICAgLy8gV2UgZGVsZXRlIHRoZSBmaWxlLCBz
byB0aGF0IHdlIGNhbiBlYXNpbHkgZmlndXJlIG91dCB0aGF0IHRoZQorICAgIC8vIGZpbGUgZ290
IHByaW50ZWQ7CisgICAgaWYgKGdfdW5saW5rKHRlbXBvcmFyeUZpbGVuYW1lKSA9PSAtMSkgewor
ICAgICAgICBnX3dhcm5pbmcoIkZhaWxlZCB0byBkZWxldGUgdGhlIHRlbXBvcmFyeSBmaWxlOiAl
cy5cblRoaXMgbWF5IGNhdXNlIHRoZSB0ZXN0IHRvIGJlIGJvZ3VzLiIsIGdfc3RyZXJyb3IoZXJy
bm8pKTsKKyAgICB9CisKKyAgICBXZWJLaXRXZWJGcmFtZSogd2ViRnJhbWUgPSB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X21haW5fZnJhbWUod2ViVmlldyk7CisgICAgR3RrUHJpbnRPcGVyYXRpb24qIG9w
ZXJhdGlvbiA9IGd0a19wcmludF9vcGVyYXRpb25fbmV3KCk7CisgICAgR3RrUHJpbnRPcGVyYXRp
b25BY3Rpb24gYWN0aW9uID0gR1RLX1BSSU5UX09QRVJBVElPTl9BQ1RJT05fRVhQT1JUOworICAg
IEd0a1ByaW50T3BlcmF0aW9uUmVzdWx0IHJlc3VsdDsKKworICAgIGd0a19wcmludF9vcGVyYXRp
b25fc2V0X2V4cG9ydF9maWxlbmFtZShvcGVyYXRpb24sIHRlbXBvcmFyeUZpbGVuYW1lKTsKKyAg
ICByZXN1bHQgPSB3ZWJraXRfd2ViX2ZyYW1lX3ByaW50X2Z1bGwgKHdlYkZyYW1lLCBvcGVyYXRp
b24sIGFjdGlvbiwgTlVMTCk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQocmVzdWx0LCA9PSwgR1RL
X1BSSU5UX09QRVJBVElPTl9SRVNVTFRfQVBQTFkpOworICAgIGdfYXNzZXJ0X2NtcGludChnX2Zp
bGVfdGVzdCh0ZW1wb3JhcnlGaWxlbmFtZSwgR19GSUxFX1RFU1RfSVNfUkVHVUxBUiksID09LCBU
UlVFKTsKKworICAgIGdfdW5saW5rKHRlbXBvcmFyeUZpbGVuYW1lKTsKKyAgICBnX29iamVjdF91
bnJlZihvcGVyYXRpb24pOworY2xlYW51cDoKKyAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsK
KyAgICBnX2ZyZWUodGVtcG9yYXJ5RmlsZW5hbWUpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dl
YmtpdF93ZWJfZnJhbWVfcmVzcG9uc2UoKQoreworICAgIFdlYktpdFdlYkZyYW1lKiBmcmFtZSA9
IGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfRlJBTUUsIE5VTEwpOworICAgIFdlYktpdE5l
dHdvcmtSZXNwb25zZSogcmVzcG9uc2UgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9uZXR3b3JrX3Jl
c3BvbnNlKGZyYW1lKTsKKyAgICBnX2Fzc2VydCghcmVzcG9uc2UpOworICAgIGdfb2JqZWN0X3Vu
cmVmKGZyYW1lKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAg
IGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKKworICAgIGdfdGVzdF9idWdfYmFz
ZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Vi
a2l0L3dlYnZpZXcvY3JlYXRlX2Rlc3Ryb3kiLCB0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfY3JlYXRl
X2Rlc3Ryb3kpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJ2aWV3L2ZyYW1lLWNy
ZWF0ZWRfc2lnbmFsIiwgdGVzdF93ZWJraXRfd2ViX2ZyYW1lX2NyZWF0ZWRfc2lnbmFsKTsKKyAg
ICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2ViZnJhbWUvbGlmZXRpbWUiLCB0ZXN0X3dlYmtp
dF93ZWJfZnJhbWVfbGlmZXRpbWUpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJ2
aWV3L3ByaW50aW5nIiwgdGVzdF93ZWJraXRfd2ViX2ZyYW1lX3ByaW50aW5nKTsKKyAgICBnX3Rl
c3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vidmlldy9yZXNwb25zZSIsIHRlc3Rfd2Via2l0X3dlYl9m
cmFtZV9yZXNwb25zZSk7CisgICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7Cit9CmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2ViaGlzdG9yeWl0ZW0u
YyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJoaXN0b3J5aXRl
bS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyZTE5MWMKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2ViaGlz
dG9yeWl0ZW0uYwpAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEph
biBNaWNoYWVsIEFsb256bworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8Z2xpYi5oPgor
I2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+CisKK3R5cGVk
ZWYgc3RydWN0IHsKKyAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogaXRlbTsKK30gV2ViSGlzdG9y
eUl0ZW1GaXh0dXJlOworCitzdGF0aWMgdm9pZCB3ZWJfaGlzdG9yeV9pdGVtX2ZpeHR1cmVfc2V0
dXAoV2ViSGlzdG9yeUl0ZW1GaXh0dXJlKiBmaXh0dXJlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBmaXh0dXJl
LT5pdGVtID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dpdGhfZGF0YSgiaHR0cDovL2V4
YW1wbGUuY29tLyIsICJFeGFtcGxlMSIpOworICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChm
aXh0dXJlLT5pdGVtKS0+cmVmX2NvdW50LCA9PSAsIDEpOworICAgIGdfYXNzZXJ0KGZpeHR1cmUt
Pml0ZW0gIT0gTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYl9oaXN0b3J5X2l0ZW1fZml4dHVy
ZV90ZWFyZG93bihXZWJIaXN0b3J5SXRlbUZpeHR1cmUqIGZpeHR1cmUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NvbnN0cG9pbnRlciBkYXRhKQorewor
ICAgIGdfYXNzZXJ0KGZpeHR1cmUtPml0ZW0gIT0gTlVMTCk7CisgICAgZ19hc3NlcnRfY21waW50
KEdfT0JKRUNUKGZpeHR1cmUtPml0ZW0pLT5yZWZfY291bnQsID09LCAxKTsKK30KKworc3RhdGlj
IHZvaWQgdGVzdF93ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfZGF0YShXZWJIaXN0b3J5SXRl
bUZpeHR1cmUqIGZpeHR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBnX2Fzc2VydF9jbXBzdHIo
d2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3RpdGxlKGZpeHR1cmUtPml0ZW0pLCA9PSwgIkV4
YW1wbGUxIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dl
dF91cmkoZml4dHVyZS0+aXRlbSksID09LCAiaHR0cDovL2V4YW1wbGUuY29tLyIpOworfQorCitz
dGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2FsdGVybmF0ZV90aXRsZShX
ZWJIaXN0b3J5SXRlbUZpeHR1cmUqIGZpeHR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY29uc3Rwb2ludGVyIGRhdGEpCit7Cisg
ICAgd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fc2V0X2FsdGVybmF0ZV90aXRsZShmaXh0dXJlLT5p
dGVtLCAiQWx0ZXJuYXRlIHRpdGxlIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJf
aGlzdG9yeV9pdGVtX2dldF9hbHRlcm5hdGVfdGl0bGUoZml4dHVyZS0+aXRlbSksID09LCAiQWx0
ZXJuYXRlIHRpdGxlIik7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sK
KyAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7CisKKyAgICBnX3Rlc3RfYnVn
X2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOworICAgIGdfdGVzdF9hZGQoIi93ZWJr
aXQvd2ViaGlzdG9yeWl0ZW0vZ2V0X2RhdGEiLAorICAgICAgICAgICAgICAgV2ViSGlzdG9yeUl0
ZW1GaXh0dXJlLCAwLCB3ZWJfaGlzdG9yeV9pdGVtX2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAg
ICAgICB0ZXN0X3dlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF9kYXRhLCB3ZWJfaGlzdG9yeV9p
dGVtX2ZpeHR1cmVfdGVhcmRvd24pOworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvd2ViaGlzdG9y
eWl0ZW0vYWx0ZXJuYXRlX3RpdGxlIiwKKyAgICAgICAgICAgICAgIFdlYkhpc3RvcnlJdGVtRml4
dHVyZSwgMCwgd2ViX2hpc3RvcnlfaXRlbV9maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAg
dGVzdF93ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9hbHRlcm5hdGVfdGl0bGUsIHdlYl9oaXN0b3J5
X2l0ZW1fZml4dHVyZV90ZWFyZG93bik7CisgICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7Cit9CmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2ViaW5z
cGVjdG9yLmMgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2ViaW5z
cGVjdG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc0MzgyZgotLS0g
L2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3
ZWJpbnNwZWN0b3IuYwpAQCAtMCwwICsxLDE3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9tZS5vcmc+CisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJ0ZXN0X3V0aWxzLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNs
dWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJr
aXQuaD4KKworR01haW5Mb29wICpsb29wOworR3RrV2lkZ2V0ICp3aW5kb3c7CisKK3N0YXRpYyBn
Ym9vbGVhbiBxdWl0TG9vcChncG9pbnRlciBkYXRhKQoreworICAgIGdfbWFpbl9sb29wX3F1aXQo
bG9vcCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKKy8qIElnbm9yZSBzaW1wbGUgdHJhbnNsYXRp
b24tcmVsYXRlZCBtZXNzYWdlcyBhbmQgdXBncmFkZSBvdGhlcgorICogbWVzc2FnZXMgdG8gd2Fy
bmluZ3MuCisgKi8KK3N0YXRpYyBnYm9vbGVhbiBjb25zb2xlTWVzc2FnZUNhbGxiYWNrKFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcsIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIHVuc2lnbmVkIGludCBsaW5l
LCBjb25zdCBjaGFyKiBzb3VyY2VJZCkKK3sKKyAgICBpZiAoc3Ryc3RyKG1lc3NhZ2UsICJMb2Nh
bGl6ZWQgc3RyaW5nIikgfHwgc3Ryc3RyKG1lc3NhZ2UsICJQcm90b2NvbCBFcnJvcjogdGhlIG1l
c3NhZ2UgaXMgZm9yIG5vbi1leGlzdGluZyBkb21haW4gJ1Byb2ZpbGVyJyIpIHx8CisgICAgICAg
IHN0cnN0cihtZXNzYWdlLCAiRGlkbid0IGZpbmQgYSBUcmVlRWxlbWVudCBmb3IgYSByZXByZXNl
bnRlZE9iamVjdCIpKQorICAgICAgICByZXR1cm4gVFJVRTsKKworICAgIGdfd2FybmluZygiQ29u
c29sZTogJXMgQCVkOiAlc1xuIiwgc291cmNlSWQsIGxpbmUsIG1lc3NhZ2UpOworICAgIHJldHVy
biBUUlVFOworfQorCitzdGF0aWMgV2ViS2l0V2ViVmlldyogaW5zcGVjdEVsZW1lbnRDYWxsYmFj
ayhXZWJLaXRXZWJJbnNwZWN0b3IgKmluc3BlY3RvciwgV2ViS2l0V2ViVmlldyAqaW5zcGVjdGVk
V2ViVmlldywgaW50ICp0aW1lc0VsZW1lbnRJbnNwZWN0ZWQpCit7CisgICAgKnRpbWVzRWxlbWVu
dEluc3BlY3RlZCA9ICp0aW1lc0VsZW1lbnRJbnNwZWN0ZWQgKyAxOworCisgICAgd2luZG93ID0g
Z3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7CisKKyAgICBHdGtXaWRnZXQgKm5l
d1dlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQo
R1RLX0NPTlRBSU5FUih3aW5kb3cpLCBuZXdXZWJWaWV3KTsKKworICAgIGdfc2lnbmFsX2Nvbm5l
Y3QobmV3V2ViVmlldywgImNvbnNvbGUtbWVzc2FnZSIsCisgICAgICAgICAgICAgICAgICAgICBH
X0NBTExCQUNLKGNvbnNvbGVNZXNzYWdlQ2FsbGJhY2spLCBOVUxMKTsKKworICAgIHJldHVybiBX
RUJLSVRfV0VCX1ZJRVcobmV3V2ViVmlldyk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBjbG9zZUlu
c3BlY3RvcihXZWJLaXRXZWJJbnNwZWN0b3IgKmluc3BlY3RvciwgaW50ICp0aW1lc0Nsb3NlZCkK
K3sKKyAgICAqdGltZXNDbG9zZWQgPSAqdGltZXNDbG9zZWQgKyAxOworCisgICAgZ3RrX3dpZGdl
dF9kZXN0cm95KHdpbmRvdyk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVh
biBzaG93SW5zcGVjdG9yKFdlYktpdFdlYkluc3BlY3RvciAqaW5zcGVjdG9yLCBncG9pbnRlciBk
YXRhKQoreworICAgIGdfaWRsZV9hZGQocXVpdExvb3AsIE5VTEwpOworICAgIHJldHVybiBUUlVF
OworfQorCitzdGF0aWMgdm9pZCBsb2FkRmluaXNoZWQoV2ViS2l0V2ViVmlldyAqd2ViVmlldywg
V2ViS2l0V2ViRnJhbWUgKmZyYW1lLCBnYm9vbGVhbiAqaXNMb2FkRmluaXNoZWQpCit7CisgICAg
KmlzTG9hZEZpbmlzaGVkID0gVFJVRTsKKyAgICBpZiAoZ19tYWluX2xvb3BfaXNfcnVubmluZyhs
b29wKSkKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKK30KKworc3RhdGljIHZvaWQg
dGVzdF93ZWJraXRfd2ViX2luc3BlY3Rvcl9jbG9zZV9hbmRfaW5zcGVjdCgpCit7CisgICAgV2Vi
S2l0V2ViVmlldyAqd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3
KCkpOworICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisKKyAgICBnYm9v
bGVhbiBpc0xvYWRGaW5pc2hlZCA9IEZBTFNFOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmll
dywgImxvYWQtZmluaXNoZWQiLCBHX0NBTExCQUNLKGxvYWRGaW5pc2hlZCksICZpc0xvYWRGaW5p
c2hlZCk7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICI8aHRtbD48Ym9keT48cD53b29ob288L3A+PC9ib2R5
PjwvaHRtbD4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGV4dC9odG1sIiwg
IlVURi04IiwgImZpbGU6Ly8iKTsKKyAgICBpZiAoIWlzTG9hZEZpbmlzaGVkKQorICAgICAgICBn
X21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICBnX29iamVjdF9zZXQod2Via2l0X3dlYl92aWV3
X2dldF9zZXR0aW5ncyh3ZWJWaWV3KSwgImVuYWJsZS1kZXZlbG9wZXItZXh0cmFzIiwgVFJVRSwg
TlVMTCk7CisgICAgV2ViS2l0V2ViSW5zcGVjdG9yICppbnNwZWN0b3IgPSB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X2luc3BlY3Rvcih3ZWJWaWV3KTsKKworICAgIGludCB0aW1lc0VsZW1lbnRJbnNwZWN0
ZWQgPSAwOworICAgIGludCB0aW1lc0Nsb3NlZCA9IDA7CisgICAgZ19vYmplY3RfY29ubmVjdChp
bnNwZWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjppbnNwZWN0LXdlYi12aWV3
IiwgR19DQUxMQkFDSyhpbnNwZWN0RWxlbWVudENhbGxiYWNrKSwgJnRpbWVzRWxlbWVudEluc3Bl
Y3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6OnNob3ctd2luZG93IiwgR19DQUxM
QkFDSyhzaG93SW5zcGVjdG9yKSwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6
OmNsb3NlLXdpbmRvdyIsIEdfQ0FMTEJBQ0soY2xvc2VJbnNwZWN0b3IpLCAmdGltZXNDbG9zZWQs
CisgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKworICAgIHdlYmtpdF93ZWJfaW5zcGVjdG9y
X2luc3BlY3RfY29vcmRpbmF0ZXMoaW5zcGVjdG9yLCAwLjAsIDAuMCk7CisgICAgZ19hc3NlcnRf
Y21waW50KHRpbWVzRWxlbWVudEluc3BlY3RlZCwgPT0sIDEpOworCisgICAgZ19tYWluX2xvb3Bf
cnVuKGxvb3ApOworCisgICAgd2Via2l0X3dlYl9pbnNwZWN0b3JfY2xvc2UoaW5zcGVjdG9yKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQodGltZXNDbG9zZWQsID09LCAxKTsKKworICAgIHdlYmtpdF93
ZWJfaW5zcGVjdG9yX2luc3BlY3RfY29vcmRpbmF0ZXMoaW5zcGVjdG9yLCAwLjAsIDAuMCk7Cisg
ICAgZ19hc3NlcnRfY21waW50KHRpbWVzRWxlbWVudEluc3BlY3RlZCwgPT0sIDIpOworCisgICAg
Z19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgZ3RrX3dpZGdldF9kZXN0cm95KEdUS19XSURH
RVQod2ViVmlldykpOworICAgIGdfYXNzZXJ0X2NtcGludCh0aW1lc0Nsb3NlZCwgPT0sIDIpOwor
CisgICAgZ19tYWluX2xvb3BfdW5yZWYobG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Vi
a2l0X3dlYl9pbnNwZWN0b3JfZGVzdHJveV9pbnNwZWN0ZWRfd2ViX3ZpZXcoKQoreworICAgIFdl
YktpdFdlYlZpZXcgKndlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25l
dygpKTsKKyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworCisgICAgZ2Jv
b2xlYW4gaXNMb2FkRmluaXNoZWQgPSBGQUxTRTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZp
ZXcsICJsb2FkLWZpbmlzaGVkIiwgR19DQUxMQkFDSyhsb2FkRmluaXNoZWQpLCAmaXNMb2FkRmlu
aXNoZWQpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiPGh0bWw+PGJvZHk+PHA+d29vaG9vPC9wPjwvYm9k
eT48L2h0bWw+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRleHQvaHRtbCIs
ICJVVEYtOCIsICJmaWxlOi8vIik7CisgICAgaWYgKCFpc0xvYWRGaW5pc2hlZCkKKyAgICAgICAg
Z19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgZ19vYmplY3Rfc2V0KHdlYmtpdF93ZWJfdmll
d19nZXRfc2V0dGluZ3Mod2ViVmlldyksICJlbmFibGUtZGV2ZWxvcGVyLWV4dHJhcyIsIFRSVUUs
IE5VTEwpOworICAgIFdlYktpdFdlYkluc3BlY3RvciAqaW5zcGVjdG9yID0gd2Via2l0X3dlYl92
aWV3X2dldF9pbnNwZWN0b3Iod2ViVmlldyk7CisKKyAgICBpbnQgdGltZXNFbGVtZW50SW5zcGVj
dGVkID0gMDsKKyAgICBpbnQgdGltZXNDbG9zZWQgPSAwOworICAgIGdfb2JqZWN0X2Nvbm5lY3Qo
aW5zcGVjdG9yLAorICAgICAgICAgICAgICAgICAgICAgInNpZ25hbDo6aW5zcGVjdC13ZWItdmll
dyIsIEdfQ0FMTEJBQ0soaW5zcGVjdEVsZW1lbnRDYWxsYmFjayksICZ0aW1lc0VsZW1lbnRJbnNw
ZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjpzaG93LXdpbmRvdyIsIEdfQ0FM
TEJBQ0soc2hvd0luc3BlY3RvciksIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAic2lnbmFs
OjpjbG9zZS13aW5kb3ciLCBHX0NBTExCQUNLKGNsb3NlSW5zcGVjdG9yKSwgJnRpbWVzQ2xvc2Vk
LAorICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICB3ZWJraXRfd2ViX2luc3BlY3Rv
cl9pbnNwZWN0X2Nvb3JkaW5hdGVzKGluc3BlY3RvciwgMC4wLCAwLjApOworICAgIGdfYXNzZXJ0
X2NtcGludCh0aW1lc0VsZW1lbnRJbnNwZWN0ZWQsID09LCAxKTsKKworICAgIGdfbWFpbl9sb29w
X3J1bihsb29wKTsKKworICAgIGd0a193aWRnZXRfZGVzdHJveShHVEtfV0lER0VUKHdlYlZpZXcp
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGltZXNDbG9zZWQsID09LCAxKTsKKworICAgIGdfbWFp
bl9sb29wX3VucmVmKGxvb3ApOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3Yp
Cit7CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAgZ190ZXN0
X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYWRkX2Z1
bmMoIi93ZWJraXQvd2ViaW5zcGVjdG9yL2Rlc3Ryb3ktaW5zcGVjdGVkLXdlYi12aWV3IiwgdGVz
dF93ZWJraXRfd2ViX2luc3BlY3Rvcl9kZXN0cm95X2luc3BlY3RlZF93ZWJfdmlldyk7CisgICAg
Z190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYmluc3BlY3Rvci9jbG9zZS1hbmQtaW5zcGVjdCIs
IHRlc3Rfd2Via2l0X3dlYl9pbnNwZWN0b3JfY2xvc2VfYW5kX2luc3BlY3QpOworCisgICAgcmV0
dXJuIGdfdGVzdF9ydW4oKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0R3RrL3Rlc3R3ZWJwbHVnaW5kYXRhYmFzZS5jIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYnBsdWdpbmRhdGFiYXNlLmMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNjUyODExYgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJwbHVnaW5kYXRhYmFzZS5jCkBAIC0w
LDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8Z2xpYi5oPgorI2lu
Y2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdl
YmtpdC93ZWJraXQuaD4KKworLyogVGhpcyBmdW5jdGlvbiBpcyBub3QgcHVibGljLCBzbyB3ZSBu
ZWVkIGFuIGV4dGVybiBkZWNsYXJhdGlvbiAqLworZXh0ZXJuIHZvaWQgd2Via2l0X3dlYl9zZXR0
aW5nc19hZGRfZXh0cmFfcGx1Z2luX2RpcmVjdG9yeShXZWJLaXRXZWJWaWV3KiB2aWV3LCBjb25z
dCBnY2hhciogZGlyZWN0b3J5KTsKKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3BsdWdp
bl9kYXRhYmFzZV9nZXRfcGx1Z2lucygpCit7CisgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IFdF
QktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIFdlYktpdFdlYlBsdWdp
bkRhdGFiYXNlKiBkYXRhYmFzZTsKKyAgICBHU0xpc3QqIHBsdWdpbkxpc3QsICpwOworICAgIGdi
b29sZWFuIGZvdW5kID0gRkFMU0U7CisgICAgZ2Jvb2xlYW4gZW5hYmxlZCA9IEZBTFNFOworCisg
ICAgd2Via2l0X3dlYl9zZXR0aW5nc19hZGRfZXh0cmFfcGx1Z2luX2RpcmVjdG9yeSh2aWV3LCBU
RVNUX1BMVUdJTl9ESVIpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKEdfT0JKRUNUKHZpZXcpKTsK
KworICAgIGRhdGFiYXNlID0gd2Via2l0X2dldF93ZWJfcGx1Z2luX2RhdGFiYXNlKCk7CisgICAg
cGx1Z2luTGlzdCA9IHdlYmtpdF93ZWJfcGx1Z2luX2RhdGFiYXNlX2dldF9wbHVnaW5zKGRhdGFi
YXNlKTsKKyAgICBmb3IgKHAgPSBwbHVnaW5MaXN0OyBwOyBwID0gcC0+bmV4dCkgeworICAgICAg
ICBXZWJLaXRXZWJQbHVnaW4qIHBsdWdpbiA9IChXZWJLaXRXZWJQbHVnaW4qKXAtPmRhdGE7Cisg
ICAgICAgIGlmICghZ19zdHJjbXAwKHdlYmtpdF93ZWJfcGx1Z2luX2dldF9uYW1lKHBsdWdpbiks
ICJXZWJLaXQgVGVzdCBQbHVnSW4iKSAmJgorICAgICAgICAgICAgIWdfc3RyY21wMCh3ZWJraXRf
d2ViX3BsdWdpbl9nZXRfZGVzY3JpcHRpb24ocGx1Z2luKSwgIlNpbXBsZSBOZXRzY2FwZcKuIHBs
dWctaW4gdGhhdCBoYW5kbGVzIHRlc3QgY29udGVudCBmb3IgV2ViS2l0IikpIHsKKyAgICAgICAg
ICAgIGZvdW5kID0gVFJVRTsKKyAgICAgICAgICAgIGVuYWJsZWQgPSB3ZWJraXRfd2ViX3BsdWdp
bl9nZXRfZW5hYmxlZChwbHVnaW4pOworICAgICAgICAgICAgd2Via2l0X3dlYl9wbHVnaW5fc2V0
X2VuYWJsZWQocGx1Z2luLCBGQUxTRSk7CisgICAgICAgIH0KKyAgICB9CisgICAgd2Via2l0X3dl
Yl9wbHVnaW5fZGF0YWJhc2VfcGx1Z2luc19saXN0X2ZyZWUocGx1Z2luTGlzdCk7CisgICAgZ19h
c3NlcnQoZm91bmQpOworICAgIGdfYXNzZXJ0KGVuYWJsZWQpOworCisgICAgd2Via2l0X3dlYl9w
bHVnaW5fZGF0YWJhc2VfcmVmcmVzaChkYXRhYmFzZSk7CisgICAgcGx1Z2luTGlzdCA9IHdlYmtp
dF93ZWJfcGx1Z2luX2RhdGFiYXNlX2dldF9wbHVnaW5zKGRhdGFiYXNlKTsKKworICAgIGZvciAo
cCA9IHBsdWdpbkxpc3Q7IHA7IHAgPSBwLT5uZXh0KSB7CisgICAgICAgIFdlYktpdFdlYlBsdWdp
biogcGx1Z2luID0gKFdlYktpdFdlYlBsdWdpbiopcC0+ZGF0YTsKKyAgICAgICAgaWYgKCFnX3N0
cmNtcDAod2Via2l0X3dlYl9wbHVnaW5fZ2V0X25hbWUocGx1Z2luKSwgIldlYktpdCBUZXN0IFBs
dWdJbiIpICYmCisgICAgICAgICAgICAhZ19zdHJjbXAwKHdlYmtpdF93ZWJfcGx1Z2luX2dldF9k
ZXNjcmlwdGlvbihwbHVnaW4pLCAiU2ltcGxlIE5ldHNjYXBlwq4gcGx1Zy1pbiB0aGF0IGhhbmRs
ZXMgdGVzdCBjb250ZW50IGZvciBXZWJLaXQiKSkKKyAgICAgICAgICAgIGVuYWJsZWQgPSB3ZWJr
aXRfd2ViX3BsdWdpbl9nZXRfZW5hYmxlZChwbHVnaW4pOworICAgIH0KKyAgICB3ZWJraXRfd2Vi
X3BsdWdpbl9kYXRhYmFzZV9wbHVnaW5zX2xpc3RfZnJlZShwbHVnaW5MaXN0KTsKKyAgICBnX2Fz
c2VydCghZW5hYmxlZCk7CisKKyAgICBnX29iamVjdF91bnJlZih2aWV3KTsKK30KKworaW50IG1h
aW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZh
cmd2LCBOVUxMKTsKKworICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvIik7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnBsdWdpbmRhdGFiYXNlL2dl
dHBsdWdpbnMiLCB0ZXN0X3dlYmtpdF93ZWJfcGx1Z2luX2RhdGFiYXNlX2dldF9wbHVnaW5zKTsK
KyAgICByZXR1cm4gZ190ZXN0X3J1biAoKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJyZXNvdXJjZS5jIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYnJlc291cmNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uZmM1OGI3YQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJyZXNvdXJjZS5jCkBAIC0wLDAgKzEsMzMx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEphbiBNaWNoYWVsIEFsb256bworICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNp
bmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx3
ZWJraXQvd2Via2l0Lmg+CisKKyNkZWZpbmUgSU5ERVhfSFRNTCAiPGh0bWw+PC9odG1sPiIKKyNk
ZWZpbmUgTUFJTl9IVE1MICI8aHRtbD48aGVhZD48c2NyaXB0IGxhbmd1YWdlPVwiamF2YXNjcmlw
dFwiIHNyYz1cIi9qYXZhc2NyaXB0LmpzXCI+PC9zY3JpcHQ+PC9oZWFkPjxib2R5PjxoMT5oYWg8
L2gxPjwvaHRtbD4iCisjZGVmaW5lIEpBVkFTQ1JJUFQgImZ1bmN0aW9uIGJsYWggKCkgeyB2YXIg
YSA9IDE7IH0iCisKK0dNYWluTG9vcCogbG9vcDsKK1NvdXBTZXNzaW9uICpzZXNzaW9uOworY2hh
ciAqYmFzZV91cmk7CitXZWJLaXRXZWJSZXNvdXJjZSogbWFpbl9yZXNvdXJjZTsKK1dlYktpdFdl
YlJlc291cmNlKiBzdWJfcmVzb3VyY2U7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBXZWJLaXRX
ZWJSZXNvdXJjZSogd2ViUmVzb3VyY2U7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldzsKK30g
V2ViUmVzb3VyY2VGaXh0dXJlOworCisvKiBGb3IgcmVhbCByZXF1ZXN0IHRlc3RpbmcgKi8KK3N0
YXRpYyB2b2lkCitzZXJ2ZXJfY2FsbGJhY2sgKFNvdXBTZXJ2ZXIgKnNlcnZlciwgU291cE1lc3Nh
Z2UgKm1zZywKKyAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwgR0hhc2hUYWJsZSAq
cXVlcnksCisgICAgICAgICAgICAgICAgIFNvdXBDbGllbnRDb250ZXh0ICpjb250ZXh0LCBncG9p
bnRlciBkYXRhKQoreworICAgIGlmIChtc2ctPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsK
KyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMgKG1zZywgU09VUF9TVEFUVVNfTk9UX0lN
UExFTUVOVEVEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9z
ZXRfc3RhdHVzIChtc2csIFNPVVBfU1RBVFVTX09LKTsKKworICAgIC8qIFJlZGlyZWN0ICovCisg
ICAgaWYgKGdfc3RyX2VxdWFsIChwYXRoLCAiLyIpKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9z
ZXRfc3RhdHVzIChtc2csIFNPVVBfU1RBVFVTX01PVkVEX1BFUk1BTkVOVExZKTsKKworICAgICAg
ICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQgKG1zZy0+cmVzcG9uc2VfaGVhZGVycywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTG9jYXRpb24iLCAiL2luZGV4Lmh0
bWwiKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsIChwYXRoLCAiL2luZGV4Lmh0bWwiKSkg
eworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQgKG1zZy0+cmVzcG9uc2VfYm9keSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT1VQX01FTU9SWV9DT1BZLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOREVYX0hUTUwsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RybGVuIChJTkRFWF9IVE1MKSk7CisgICAgfSBlbHNlIGlm
IChnX3N0cl9lcXVhbCAocGF0aCwgIi9tYWluLmh0bWwiKSkgeworICAgICAgICBzb3VwX21lc3Nh
Z2VfYm9keV9hcHBlbmQgKG1zZy0+cmVzcG9uc2VfYm9keSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTT1VQX01FTU9SWV9DT1BZLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE1BSU5fSFRNTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHJsZW4gKE1BSU5fSFRNTCkpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwgKHBhdGgsICIv
amF2YXNjcmlwdC5qcyIpKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZCAobXNn
LT5yZXNwb25zZV9ib2R5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPVVBf
TUVNT1JZX0NPUFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkFWQVNDUklQ
VCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4gKEpBVkFTQ1JJUFQp
KTsKKyAgICB9CisKKworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlIChtc2ctPnJlc3Bv
bnNlX2JvZHkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJfcmVzb3VyY2VfZml4dHVyZV9zZXR1cChX
ZWJSZXNvdXJjZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBm
aXh0dXJlLT53ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7
CisgICAgZ19vYmplY3RfcmVmX3NpbmsoZml4dHVyZS0+d2ViVmlldyk7CisgICAgY29uc3QgZ2No
YXIqIHdlYkRhdGEgPSAiPGh0bWw+PC9odG1sPiI7CisgICAgZml4dHVyZS0+d2ViUmVzb3VyY2Ug
PSB3ZWJraXRfd2ViX3Jlc291cmNlX25ldyh3ZWJEYXRhLCBzdHJsZW4od2ViRGF0YSksICJodHRw
Oi8vZXhhbXBsZS5jb20vIiwgInRleHQvaHRtbCIsICJ1dGY4IiwgIkV4YW1wbGUuY29tIik7Cisg
ICAgZ19hc3NlcnQoZml4dHVyZS0+d2ViUmVzb3VyY2UpOworfQorCitzdGF0aWMgdm9pZCB3ZWJf
cmVzb3VyY2VfZml4dHVyZV90ZWFyZG93bihXZWJSZXNvdXJjZUZpeHR1cmUqIGZpeHR1cmUsIGdj
b25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBnX2Fzc2VydChmaXh0dXJlLT53ZWJSZXNvdXJjZSk7
CisgICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+d2ViUmVzb3VyY2UpOworICAgIGdfb2JqZWN0
X3VucmVmKGZpeHR1cmUtPndlYlZpZXcpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93
ZWJfcmVzb3VyY2VfZ2V0X3VybChXZWJSZXNvdXJjZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBv
aW50ZXIgZGF0YSkKK3sKKyAgICBnY2hhciogdXJsOworICAgIGdfb2JqZWN0X2dldChHX09CSkVD
VChmaXh0dXJlLT53ZWJSZXNvdXJjZSksICJ1cmkiLCAmdXJsLCBOVUxMKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIodXJsLCA9PSwgImh0dHA6Ly9leGFtcGxlLmNvbS8iKTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIod2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJpKGZpeHR1cmUtPndlYlJlc291cmNlKSAs
PT0sImh0dHA6Ly9leGFtcGxlLmNvbS8iKTsKKyAgICBnX2ZyZWUodXJsKTsKK30KKworc3RhdGlj
IHZvaWQgdGVzdF93ZWJraXRfd2ViX3Jlc291cmNlX2dldF9kYXRhKFdlYlJlc291cmNlRml4dHVy
ZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIEdTdHJpbmcqIGNoYXJEYXRh
ID0gd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZGF0YShmaXh0dXJlLT53ZWJSZXNvdXJjZSk7Cisg
ICAgZ19hc3NlcnRfY21wc3RyKGNoYXJEYXRhLT5zdHIsID09LCAiPGh0bWw+PC9odG1sPiIpOwor
fQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X21pbWVfdHlwZShX
ZWJSZXNvdXJjZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBn
Y2hhciogbWltZV90eXBlOworICAgIGdfb2JqZWN0X2dldChHX09CSkVDVChmaXh0dXJlLT53ZWJS
ZXNvdXJjZSksICJtaW1lLXR5cGUiLCAmbWltZV90eXBlLCBOVUxMKTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIobWltZV90eXBlLCA9PSwgInRleHQvaHRtbCIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3
ZWJraXRfd2ViX3Jlc291cmNlX2dldF9taW1lX3R5cGUoZml4dHVyZS0+d2ViUmVzb3VyY2UpLD09
LCJ0ZXh0L2h0bWwiKTsKKyAgICBnX2ZyZWUobWltZV90eXBlKTsKK30KKworc3RhdGljIHZvaWQg
dGVzdF93ZWJraXRfd2ViX3Jlc291cmNlX2dldF9lbmNvZGluZyhXZWJSZXNvdXJjZUZpeHR1cmUq
IGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBnY2hhciogdGV4dF9lbmNvZGlu
ZzsKKyAgICBnX29iamVjdF9nZXQoR19PQkpFQ1QoZml4dHVyZS0+d2ViUmVzb3VyY2UpLCAiZW5j
b2RpbmciLCAmdGV4dF9lbmNvZGluZywgTlVMTCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHRf
ZW5jb2RpbmcsID09LCAidXRmOCIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3Jl
c291cmNlX2dldF9lbmNvZGluZyhmaXh0dXJlLT53ZWJSZXNvdXJjZSksPT0sInV0ZjgiKTsKKyAg
ICBnX2ZyZWUodGV4dF9lbmNvZGluZyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dl
Yl9yZXNvdXJjZV9nZXRfZnJhbWVfbmFtZShXZWJSZXNvdXJjZUZpeHR1cmUqIGZpeHR1cmUsIGdj
b25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBnY2hhciogZnJhbWVfbmFtZTsKKyAgICBnX29iamVj
dF9nZXQoR19PQkpFQ1QoZml4dHVyZS0+d2ViUmVzb3VyY2UpLCAiZnJhbWUtbmFtZSIsICZmcmFt
ZV9uYW1lLCBOVUxMKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoZnJhbWVfbmFtZSwgPT0sICJFeGFt
cGxlLmNvbSIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3Jlc291cmNlX2dldF9m
cmFtZV9uYW1lKGZpeHR1cmUtPndlYlJlc291cmNlKSw9PSwiRXhhbXBsZS5jb20iKTsKKyAgICBn
X2ZyZWUoZnJhbWVfbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIHJlc291cmNlX3JlcXVlc3Rfc3Rh
cnRpbmdfY2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIFdlYktpdFdlYkZyYW1lKiB3ZWJfZnJh
bWUsIFdlYktpdFdlYlJlc291cmNlKiB3ZWJfcmVzb3VyY2UsIFdlYktpdE5ldHdvcmtSZXF1ZXN0
KiByZXF1ZXN0LCBXZWJLaXROZXR3b3JrUmVzcG9uc2UqIHJlc3BvbnNlLCBncG9pbnRlciBkYXRh
KQoreworICAgIGdpbnQqIGJlZW5fdGhlcmUgPSBkYXRhOworICAgICpiZWVuX3RoZXJlID0gKmJl
ZW5fdGhlcmUgKyAxOworCisgICAgaWYgKCpiZWVuX3RoZXJlID09IDEpIHsKKyAgICAgICAgZ19h
c3NlcnQoIW1haW5fcmVzb3VyY2UpOworICAgICAgICBtYWluX3Jlc291cmNlID0gZ19vYmplY3Rf
cmVmKHdlYl9yZXNvdXJjZSk7CisKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJf
cmVzb3VyY2VfZ2V0X3VyaSh3ZWJfcmVzb3VyY2UpLCA9PSwgYmFzZV91cmkpOworCisgICAgICAg
IC8qIFRoaXMgc2hvdWxkIGJlIGEgcmVkaXJlY3QsIHNvIHRoZSByZXNwb25zZSBtdXN0IGJlIE5V
TEwgKi8KKyAgICAgICAgZ19hc3NlcnQoIXJlc3BvbnNlKTsKKyAgICB9IGVsc2UgaWYgKCpiZWVu
X3RoZXJlID09IDIpIHsKKyAgICAgICAgY2hhciogdXJpID0gZ19zdHJkdXBfcHJpbnRmKCIlc2lu
ZGV4Lmh0bWwiLCBiYXNlX3VyaSk7CisKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93
ZWJfcmVzb3VyY2VfZ2V0X3VyaSh3ZWJfcmVzb3VyY2UpLCA9PSwgdXJpKTsKKworICAgICAgICAv
KiBDYW5jZWwgdGhlIHJlcXVlc3QuICovCisgICAgICAgIHdlYmtpdF9uZXR3b3JrX3JlcXVlc3Rf
c2V0X3VyaShyZXF1ZXN0LCAiYWJvdXQ6YmxhbmsiKTsKKworICAgICAgICBnX2ZyZWUodXJpKTsK
KyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIG5vdGlmeV9sb2FkX3N0YXR1c19jYihXZWJLaXRXZWJW
aWV3KiB3ZWJfdmlldywgR1BhcmFtU3BlYyogcHNwZWMsIGdwb2ludGVyIGRhdGEpCit7CisgICAg
aWYgKHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMod2ViX3ZpZXcpID09IFdFQktJVF9M
T0FEX0ZJTklTSEVEKSB7CisgICAgICAgIGdib29sZWFuKiBiZWVuX3RoZXJlID0gZGF0YTsKKyAg
ICAgICAgKmJlZW5fdGhlcmUgPSBUUlVFOworCisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X3VyaSh3ZWJfdmlldyksID09LCAiYWJvdXQ6YmxhbmsiKTsKKworICAg
ICAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworICAgIH0KK30KKworc3RhdGljIHZvaWQgdGVz
dF93ZWJfcmVzb3VyY2VfbG9hZGluZygpCit7CisgICAgV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcg
PSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBnaW50IGJlZW5f
dG9fcmVzb3VyY2VfcmVxdWVzdF9zdGFydGluZyA9IDA7CisgICAgZ2Jvb2xlYW4gYmVlbl90b19s
b2FkX2ZpbmlzaGVkID0gRkFMU0U7CisgICAgV2ViS2l0V2ViRnJhbWUqIHdlYl9mcmFtZTsKKyAg
ICBXZWJLaXRXZWJEYXRhU291cmNlKiBkYXRhX3NvdXJjZTsKKworICAgIGxvb3AgPSBnX21haW5f
bG9vcF9uZXcoTlVMTCwgVFJVRSk7CisKKyAgICBnX29iamVjdF9yZWZfc2luayh3ZWJfdmlldyk7
CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdlYl92aWV3LCAicmVzb3VyY2UtcmVxdWVzdC1zdGFy
dGluZyIsCisgICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKHJlc291cmNlX3JlcXVlc3Rf
c3RhcnRpbmdfY2IpLAorICAgICAgICAgICAgICAgICAgICAgJmJlZW5fdG9fcmVzb3VyY2VfcmVx
dWVzdF9zdGFydGluZyk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdlYl92aWV3LCAibm90aWZ5
Ojpsb2FkLXN0YXR1cyIsCisgICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKG5vdGlmeV9s
b2FkX3N0YXR1c19jYiksCisgICAgICAgICAgICAgICAgICAgICAmYmVlbl90b19sb2FkX2Zpbmlz
aGVkKTsKKworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh3ZWJfdmlldywgYmFzZV91cmkp
OworCisgICAgLyogV2Ugd29uJ3QgZ2V0IGZpbmlzaGVkIGltbWVkaWF0ZWx5LCBiZWNhdXNlIG9m
IHRoZSByZWRpcmVjdCAqLworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKyAgICAKKyAgICB3
ZWJfZnJhbWUgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUod2ViX3ZpZXcpOworICAg
IGRhdGFfc291cmNlID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfZGF0YV9zb3VyY2Uod2ViX2ZyYW1l
KTsKKworICAgIGdfYXNzZXJ0KG1haW5fcmVzb3VyY2UpOworICAgIGdfYXNzZXJ0KHdlYmtpdF93
ZWJfZGF0YV9zb3VyY2VfZ2V0X21haW5fcmVzb3VyY2UoZGF0YV9zb3VyY2UpID09IG1haW5fcmVz
b3VyY2UpOworICAgIGdfb2JqZWN0X3VucmVmKG1haW5fcmVzb3VyY2UpOworICAgIAorICAgIGdf
YXNzZXJ0X2NtcGludChiZWVuX3RvX3Jlc291cmNlX3JlcXVlc3Rfc3RhcnRpbmcsID09LCAyKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoYmVlbl90b19sb2FkX2ZpbmlzaGVkLCA9PSwgVFJVRSk7CisK
KyAgICBnX29iamVjdF91bnJlZih3ZWJfdmlldyk7CisgICAgZ19tYWluX2xvb3BfdW5yZWYobG9v
cCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlc291cmNlX3JlcXVlc3Rfc3RhcnRpbmdfc3ViX2NiKFdl
YktpdFdlYlZpZXcqIHdlYl92aWV3LCBXZWJLaXRXZWJGcmFtZSogd2ViX2ZyYW1lLCBXZWJLaXRX
ZWJSZXNvdXJjZSogd2ViX3Jlc291cmNlLCBXZWJLaXROZXR3b3JrUmVxdWVzdCogcmVxdWVzdCwg
V2ViS2l0TmV0d29ya1Jlc3BvbnNlKiByZXNwb25zZSwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBp
ZiAoIW1haW5fcmVzb3VyY2UpCisgICAgICAgIG1haW5fcmVzb3VyY2UgPSBnX29iamVjdF9yZWYo
d2ViX3Jlc291cmNlKTsKKyAgICBlbHNlIGlmICghc3ViX3Jlc291cmNlKQorICAgICAgc3ViX3Jl
c291cmNlID0gZ19vYmplY3RfcmVmKHdlYl9yZXNvdXJjZSk7Cit9CisKK3N0YXRpYyB2b2lkIG5v
dGlmeV9sb2FkX3N0YXR1c19zdWJfY2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIEdQYXJhbVNw
ZWMqIHBzcGVjLCBncG9pbnRlciBkYXRhKQoreworICAgIGlmICh3ZWJraXRfd2ViX3ZpZXdfZ2V0
X2xvYWRfc3RhdHVzKHdlYl92aWV3KSA9PSBXRUJLSVRfTE9BRF9GSU5JU0hFRCkKKyAgICAgICAg
Z19tYWluX2xvb3BfcXVpdChsb29wKTsKK30KKworc3RhdGljIGdib29sZWFuIGlkbGVfcXVpdF9s
b29wX2NiKGdwb2ludGVyIGRhdGEpCit7CisgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKKyAg
ICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2ViX3Jlc291cmNlX3N1Yl9y
ZXNvdXJjZV9sb2FkaW5nKCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldyA9IFdFQktJ
VF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIFdlYktpdFdlYkZyYW1lKiB3
ZWJfZnJhbWU7CisgICAgV2ViS2l0V2ViRGF0YVNvdXJjZSogZGF0YV9zb3VyY2U7CisgICAgR0xp
c3QqIHN1Yl9yZXNvdXJjZXM7CisgICAgY2hhciogdXJpID0gZ19zdHJkdXBfcHJpbnRmKCIlc21h
aW4uaHRtbCIsIGJhc2VfdXJpKTsKKworICAgIG1haW5fcmVzb3VyY2UgPSBOVUxMOworICAgIAor
ICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisKKyAgICBnX29iamVjdF9y
ZWZfc2luayh3ZWJfdmlldyk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdlYl92aWV3LCAicmVz
b3VyY2UtcmVxdWVzdC1zdGFydGluZyIsCisgICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNL
KHJlc291cmNlX3JlcXVlc3Rfc3RhcnRpbmdfc3ViX2NiKSwKKyAgICAgICAgICAgICAgICAgICAg
IE5VTEwpOworCisgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJfdmlldywgIm5vdGlmeTo6bG9hZC1z
dGF0dXMiLAorICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhub3RpZnlfbG9hZF9zdGF0
dXNfc3ViX2NiKSwKKyAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgd2Via2l0X3dl
Yl92aWV3X2xvYWRfdXJpKHdlYl92aWV3LCB1cmkpOworCisgICAgZ19tYWluX2xvb3BfcnVuKGxv
b3ApOworCisgICAgLyogVGhlIG1haW4gcmVzb3VyY2Ugc2hvdWxkIGJlIGxvYWRlZDsgbm93IGxl
dCdzIHdhaXQgZm9yIHRoZSBzdWItcmVzb3VyY2UgdG8gbG9hZCAqLworICAgIGdfaWRsZV9hZGQo
aWRsZV9xdWl0X2xvb3BfY2IsIE5VTEwpOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKyAg
ICAKKyAgICBnX2Fzc2VydChtYWluX3Jlc291cmNlICYmIHN1Yl9yZXNvdXJjZSk7CisgICAgZ19h
c3NlcnQobWFpbl9yZXNvdXJjZSAhPSBzdWJfcmVzb3VyY2UpOworCisgICAgd2ViX2ZyYW1lID0g
d2Via2l0X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKHdlYl92aWV3KTsKKyAgICBkYXRhX3NvdXJj
ZSA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X2RhdGFfc291cmNlKHdlYl9mcmFtZSk7CisKKyAgICBn
X2Fzc2VydCh3ZWJraXRfd2ViX2RhdGFfc291cmNlX2dldF9tYWluX3Jlc291cmNlKGRhdGFfc291
cmNlKSA9PSBtYWluX3Jlc291cmNlKTsKKyAgICBnX29iamVjdF91bnJlZihtYWluX3Jlc291cmNl
KTsKKworICAgIHN1Yl9yZXNvdXJjZXMgPSB3ZWJraXRfd2ViX2RhdGFfc291cmNlX2dldF9zdWJy
ZXNvdXJjZXMoZGF0YV9zb3VyY2UpOworICAgIC8vIEV4cGVjdGVkIHJlc291cmNlczogamF2YXNj
cmlwdHMuanMsIGZhdmljb24uaWNvCisgICAgZ19hc3NlcnQoc3ViX3Jlc291cmNlcyk7CisgICAg
Z19hc3NlcnQoc3ViX3Jlc291cmNlcy0+bmV4dCk7CisgICAgZ19hc3NlcnQoIXN1Yl9yZXNvdXJj
ZXMtPm5leHQtPm5leHQpOworCisgICAgLy8gVGVzdCB0aGF0IHRoZSBvYmplY3Qgd2UgZ290IGZy
b20gdGhlIGRhdGEgc291cmNlIGlzIHRoZSBzYW1lCisgICAgLy8gdGhhdCB3ZW50IHRocm91Z2gg
cmVzb3VyY2UtcmVxdWVzdC1zdGFydGluZy4gTm90ZSB0aGF0IHRoZSBvcmRlciBpcworICAgIC8v
IG5vdCBpbXBvcnRhbnQgKGFuZCBub3QgZ3VhcmFudGVlZCBzaW5jZSB0aGUgcmVzb3VyY2VzIGFy
ZSBzdG9yZWQgaW4gYQorICAgIC8vIGhhc2h0YWJsZSkuCisgICAgZ19hc3NlcnQoV0VCS0lUX1dF
Ql9SRVNPVVJDRShzdWJfcmVzb3VyY2VzLT5kYXRhKSA9PSBzdWJfcmVzb3VyY2UKKyAgICAgICAg
ICAgICB8fCBXRUJLSVRfV0VCX1JFU09VUkNFKHN1Yl9yZXNvdXJjZXMtPm5leHQtPmRhdGEpID09
IHN1Yl9yZXNvdXJjZSk7CisKKyAgICBnX29iamVjdF91bnJlZih3ZWJfdmlldyk7CisgICAgZ19t
YWluX2xvb3BfdW5yZWYobG9vcCk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJn
dikKK3sKKyAgICBTb3VwU2VydmVyKiBzZXJ2ZXI7CisgICAgU291cFVSSSogc291cF91cmk7CisK
KyAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7CisKKyAgICBzZXJ2ZXIgPSBz
b3VwX3NlcnZlcl9uZXcoU09VUF9TRVJWRVJfUE9SVCwgMCwgTlVMTCk7CisgICAgc291cF9zZXJ2
ZXJfcnVuX2FzeW5jKHNlcnZlcik7CisKKyAgICBzb3VwX3NlcnZlcl9hZGRfaGFuZGxlcihzZXJ2
ZXIsIE5VTEwsIHNlcnZlcl9jYWxsYmFjaywgTlVMTCwgTlVMTCk7CisKKyAgICBzb3VwX3VyaSA9
IHNvdXBfdXJpX25ldygiaHR0cDovLzEyNy4wLjAuMS8iKTsKKyAgICBzb3VwX3VyaV9zZXRfcG9y
dChzb3VwX3VyaSwgc291cF9zZXJ2ZXJfZ2V0X3BvcnQoc2VydmVyKSk7CisKKyAgICBiYXNlX3Vy
aSA9IHNvdXBfdXJpX3RvX3N0cmluZyhzb3VwX3VyaSwgRkFMU0UpOworICAgIHNvdXBfdXJpX2Zy
ZWUoc291cF91cmkpOworCisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L3dlYnJlc291cmNlL2dldF91cmwiLAor
ICAgICAgICAgICAgICAgV2ViUmVzb3VyY2VGaXh0dXJlLCAwLCB3ZWJfcmVzb3VyY2VfZml4dHVy
ZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJs
LCB3ZWJfcmVzb3VyY2VfZml4dHVyZV90ZWFyZG93bik7CisgICAgZ190ZXN0X2FkZCgiL3dlYmtp
dC93ZWJyZXNvdXJjZS9nZXRfbWltZV90eXBlIiwKKyAgICAgICAgICAgICAgIFdlYlJlc291cmNl
Rml4dHVyZSwgMCwgd2ViX3Jlc291cmNlX2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0
ZXN0X3dlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X21pbWVfdHlwZSwgd2ViX3Jlc291cmNlX2ZpeHR1
cmVfdGVhcmRvd24pOworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvd2VicmVzb3VyY2UvZ2V0X3Rl
eHRfZW5jb2RpbmdfbmFtZSIsCisgICAgICAgICAgICAgICBXZWJSZXNvdXJjZUZpeHR1cmUsIDAs
IHdlYl9yZXNvdXJjZV9maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF93ZWJraXRf
d2ViX3Jlc291cmNlX2dldF9lbmNvZGluZywgd2ViX3Jlc291cmNlX2ZpeHR1cmVfdGVhcmRvd24p
OworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvd2VicmVzb3VyY2UvZ2V0X2ZyYW1lX25hbWUiLAor
ICAgICAgICAgICAgICAgV2ViUmVzb3VyY2VGaXh0dXJlLCAwLCB3ZWJfcmVzb3VyY2VfZml4dHVy
ZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZnJh
bWVfbmFtZSwgd2ViX3Jlc291cmNlX2ZpeHR1cmVfdGVhcmRvd24pOworICAgIGdfdGVzdF9hZGQo
Ii93ZWJraXQvd2VicmVzb3VyY2UvZ2V0X2RhdGEiLAorICAgICAgICAgICAgICAgV2ViUmVzb3Vy
Y2VGaXh0dXJlLCAwLCB3ZWJfcmVzb3VyY2VfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAg
IHRlc3Rfd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZGF0YSwgd2ViX3Jlc291cmNlX2ZpeHR1cmVf
dGVhcmRvd24pOworCisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnJlc291cmNlL2xv
YWRpbmciLCB0ZXN0X3dlYl9yZXNvdXJjZV9sb2FkaW5nKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMo
Ii93ZWJraXQvd2VicmVzb3VyY2Uvc3ViX3Jlc291cmNlX2xvYWRpbmciLCB0ZXN0X3dlYl9yZXNv
dXJjZV9zdWJfcmVzb3VyY2VfbG9hZGluZyk7CisKKyAgICByZXR1cm4gZ190ZXN0X3J1biAoKTsK
K30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3
ZWJzZXR0aW5ncy5jIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdl
YnNldHRpbmdzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU0ODljZAot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rl
c3R3ZWJzZXR0aW5ncy5jCkBAIC0wLDAgKzEsMTU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA5IEphbiBNaWNoYWVsIEFsb256bworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8Z2xp
Yi5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+CisK
Ky8qIFByaXZhdGUgQVBJICovCitjaGFyKiB3ZWJraXRXZWJTZXR0aW5nc1VzZXJBZ2VudEZvclVS
SShXZWJLaXRXZWJTZXR0aW5ncyAqc2V0dGluZ3MsIGNvbnN0IGNoYXIgKnVyaSk7CisKK3N0YXRp
YyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9zZXR0aW5nc19jb3B5KHZvaWQpCit7CisgICAgV2ViS2l0
V2ViU2V0dGluZ3MgKnNldHRpbmdzID0gd2Via2l0X3dlYl9zZXR0aW5nc19uZXcoKTsKKworICAg
IC8vIFNldCBzb21lIG5vbi1kZWZhdWx0IHNldHRpbmdzIHRvIHZlcmlmeSB0aGF0IHNldHRpbmdz
IGFyZSBwcm9wZXJseSBjb3BpZWQuCisgICAgZ19vYmplY3Rfc2V0KHNldHRpbmdzLAorICAgICAg
ICAgICAgICAgICAiZW5hYmxlLXdlYmdsIiwgVFJVRSwKKyAgICAgICAgICAgICAgICAgImVuYWJs
ZS1mdWxsc2NyZWVuIiwgVFJVRSwKKyAgICAgICAgICAgICAgICAgImF1dG8tbG9hZC1pbWFnZXMi
LCBGQUxTRSwKKyAgICAgICAgICAgICAgICAgImRlZmF1bHQtZW5jb2RpbmciLCAidXRmLTgiLAor
ICAgICAgICAgICAgICAgICAiZW5hYmxlLW1lZGlhc291cmNlIiwgVFJVRSwKKyAgICAgICAgICAg
ICAgICAgTlVMTCk7CisKKyAgICBXZWJLaXRXZWJTZXR0aW5ncyAqY29weSA9IHdlYmtpdF93ZWJf
c2V0dGluZ3NfY29weShzZXR0aW5ncyk7CisKKyAgICBnYm9vbGVhbiBlbmFibGVXZWJHTCA9IEZB
TFNFOworICAgIGdib29sZWFuIGVuYWJsZUZ1bGxzY3JlZW4gPSBGQUxTRTsKKyAgICBnYm9vbGVh
biBhdXRvTG9hZEltYWdlcyA9IEZBTFNFOworICAgIGdib29sZWFuIGVuYWJsZU1lZGlhU291cmNl
ID0gRkFMU0U7CisgICAgY2hhciAqZGVmYXVsdEVuY29kaW5nID0gMDsKKyAgICBnX29iamVjdF9n
ZXQoY29weSwKKyAgICAgICAgICAgICAgICAgImVuYWJsZS1mdWxsc2NyZWVuIiwgJmVuYWJsZUZ1
bGxzY3JlZW4sCisgICAgICAgICAgICAgICAgICJlbmFibGUtd2ViZ2wiLCAmZW5hYmxlV2ViR0ws
CisgICAgICAgICAgICAgICAgICJhdXRvLWxvYWQtaW1hZ2VzIiwgJmF1dG9Mb2FkSW1hZ2VzLAor
ICAgICAgICAgICAgICAgICAiZGVmYXVsdC1lbmNvZGluZyIsICZkZWZhdWx0RW5jb2RpbmcsCisg
ICAgICAgICAgICAgICAgICJlbmFibGUtbWVkaWFzb3VyY2UiLCAmZW5hYmxlTWVkaWFTb3VyY2Us
CisgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgZ19hc3NlcnQoZW5hYmxlV2ViR0wpOwor
ICAgIGdfYXNzZXJ0KGVuYWJsZUZ1bGxzY3JlZW4pOworICAgIGdfYXNzZXJ0KCFhdXRvTG9hZElt
YWdlcyk7CisgICAgZ19hc3NlcnRfY21wc3RyKGRlZmF1bHRFbmNvZGluZywgPT0sICJ1dGYtOCIp
OworICAgIGdfYXNzZXJ0KGVuYWJsZU1lZGlhU291cmNlKTsKKyAgICBnX2ZyZWUoZGVmYXVsdEVu
Y29kaW5nKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9ub25fcXVpcmt5X3VzZXJfYWdlbnRzKFdl
YktpdFdlYlNldHRpbmdzICpzZXR0aW5ncywgY29uc3QgY2hhciAqZGVmYXVsdFVzZXJBZ2VudCkK
K3sKKyAgICBjaGFyICp1c2VyQWdlbnQgPSAwOworCisgICAgLy8gdGVzdCBhIGN1c3RvbSBVQSBz
dHJpbmcKKyAgICB1c2VyQWdlbnQgPSAwOworICAgIGdfb2JqZWN0X3NldChzZXR0aW5ncywgInVz
ZXItYWdlbnQiLCAidGVzdHdlYnNldHRpbmdzLzAuMSIsIE5VTEwpOworICAgIGdfb2JqZWN0X2dl
dChzZXR0aW5ncywidXNlci1hZ2VudCIsICZ1c2VyQWdlbnQsIE5VTEwpOworICAgIGdfYXNzZXJ0
X2NtcHN0cih1c2VyQWdlbnQsID09LCAidGVzdHdlYnNldHRpbmdzLzAuMSIpOworICAgIGdfZnJl
ZSh1c2VyQWdlbnQpOworCisgICAgLy8gc2V0dGluZyBpdCB0byBOVUxMIG9yIGFuIGVtcHR5IHZh
bHVlIHNob3VsZCBnaXZlIHVzIHRoZSBkZWZhdWx0IFVBIHN0cmluZworICAgIHVzZXJBZ2VudCA9
IDA7CisgICAgZ19vYmplY3Rfc2V0KHNldHRpbmdzLCAidXNlci1hZ2VudCIsIDAsIE5VTEwpOwor
ICAgIGdfb2JqZWN0X2dldChzZXR0aW5ncywidXNlci1hZ2VudCIsICZ1c2VyQWdlbnQsIE5VTEwp
OworICAgIGdfYXNzZXJ0X2NtcHN0cih1c2VyQWdlbnQsID09LCBkZWZhdWx0VXNlckFnZW50KTsK
KyAgICBnX2ZyZWUodXNlckFnZW50KTsKKworICAgIHVzZXJBZ2VudCA9IDA7CisgICAgZ19vYmpl
Y3Rfc2V0KHNldHRpbmdzLCAidXNlci1hZ2VudCIsICIiLCBOVUxMKTsKKyAgICBnX29iamVjdF9n
ZXQoc2V0dGluZ3MsInVzZXItYWdlbnQiLCAmdXNlckFnZW50LCBOVUxMKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIodXNlckFnZW50LCA9PSwgZGVmYXVsdFVzZXJBZ2VudCk7CisgICAgZ19mcmVlKHVz
ZXJBZ2VudCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9zZXR0aW5nc191c2Vy
X2FnZW50KHZvaWQpCit7CisgICAgV2ViS2l0V2ViU2V0dGluZ3MgKnNldHRpbmdzOworICAgIEd0
a1dpZGdldCAqd2ViVmlldzsKKyAgICBjaGFyICpkZWZhdWx0VXNlckFnZW50OworICAgIGNoYXIg
KnVzZXJBZ2VudCA9IDA7CisgICAgZ190ZXN0X2J1ZygiMTczNzUiKTsKKworICAgIHdlYlZpZXcg
PSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7CisgICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7
CisKKyAgICBzZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3MoV0VCS0lUX1dF
Ql9WSUVXKHdlYlZpZXcpKTsKKyAgICBkZWZhdWx0VXNlckFnZW50ID0gZ19zdHJkdXAod2Via2l0
X3dlYl9zZXR0aW5nc19nZXRfdXNlcl9hZ2VudChzZXR0aW5ncykpOworCisgICAgdGVzdF9ub25f
cXVpcmt5X3VzZXJfYWdlbnRzKHNldHRpbmdzLCBkZWZhdWx0VXNlckFnZW50KTsKKworICAgIC8q
IFRlc3QgcXVpcmt5IGdvb2dsZSBkb21haW5zICovCisgICAgZ19vYmplY3Rfc2V0KHNldHRpbmdz
LCAidXNlci1hZ2VudCIsICJ0ZXN0d2Vic2V0dGluZ3MvMC4xIiwgTlVMTCk7CisKKyAgICB1c2Vy
QWdlbnQgPSB3ZWJraXRXZWJTZXR0aW5nc1VzZXJBZ2VudEZvclVSSShzZXR0aW5ncywgImh0dHA6
Ly93d3cuZ29vZ2xlLmNvbS8iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodXNlckFnZW50LCA9PSwg
InRlc3R3ZWJzZXR0aW5ncy8wLjEiKTsKKyAgICBnX2ZyZWUodXNlckFnZW50KTsKKworICAgIHVz
ZXJBZ2VudCA9IHdlYmtpdFdlYlNldHRpbmdzVXNlckFnZW50Rm9yVVJJKHNldHRpbmdzLCAiaHR0
cDovL2dtYWlsLmNvbS8iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodXNlckFnZW50LCA9PSwgInRl
c3R3ZWJzZXR0aW5ncy8wLjEiKTsKKyAgICBnX2ZyZWUodXNlckFnZW50KTsKKworICAgIHVzZXJB
Z2VudCA9IHdlYmtpdFdlYlNldHRpbmdzVXNlckFnZW50Rm9yVVJJKHNldHRpbmdzLCAiaHR0cDov
L3d3dy5nb29nbGUuY29tLmJyLyIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih1c2VyQWdlbnQsID09
LCAidGVzdHdlYnNldHRpbmdzLzAuMSIpOworICAgIGdfZnJlZSh1c2VyQWdlbnQpOworCisgICAg
dXNlckFnZW50ID0gd2Via2l0V2ViU2V0dGluZ3NVc2VyQWdlbnRGb3JVUkkoc2V0dGluZ3MsICJo
dHRwOi8vY2FsZW5kYXIuZ29vZ2xlLmNvbS8iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodXNlckFn
ZW50LCA9PSwgInRlc3R3ZWJzZXR0aW5ncy8wLjEiKTsKKyAgICBnX2ZyZWUodXNlckFnZW50KTsK
KworICAgIC8qIE5vdyBlbmFibGUgcXVpcmtzIGhhbmRsaW5nICovCisgICAgZ19vYmplY3Rfc2V0
KHNldHRpbmdzLCAiZW5hYmxlLXNpdGUtc3BlY2lmaWMtcXVpcmtzIiwgVFJVRSwgTlVMTCk7CisK
KyAgICB0ZXN0X25vbl9xdWlya3lfdXNlcl9hZ2VudHMoc2V0dGluZ3MsIGRlZmF1bHRVc2VyQWdl
bnQpOworCisgICAgZ19vYmplY3Rfc2V0KHNldHRpbmdzLCAidXNlci1hZ2VudCIsICJ0ZXN0d2Vi
c2V0dGluZ3MvMC4xIiwgTlVMTCk7CisKKyAgICB1c2VyQWdlbnQgPSB3ZWJraXRXZWJTZXR0aW5n
c1VzZXJBZ2VudEZvclVSSShzZXR0aW5ncywgImh0dHA6Ly93d3cuZ29vZ2xlLmNvbS8iKTsKKyAg
ICBnX2Fzc2VydF9jbXBzdHIodXNlckFnZW50LCA9PSwgZGVmYXVsdFVzZXJBZ2VudCk7CisgICAg
Z19mcmVlKHVzZXJBZ2VudCk7CisKKyAgICB1c2VyQWdlbnQgPSB3ZWJraXRXZWJTZXR0aW5nc1Vz
ZXJBZ2VudEZvclVSSShzZXR0aW5ncywgImh0dHA6Ly9nbWFpbC5jb20vIik7CisgICAgZ19hc3Nl
cnRfY21wc3RyKHVzZXJBZ2VudCwgPT0sIGRlZmF1bHRVc2VyQWdlbnQpOworICAgIGdfZnJlZSh1
c2VyQWdlbnQpOworCisgICAgdXNlckFnZW50ID0gd2Via2l0V2ViU2V0dGluZ3NVc2VyQWdlbnRG
b3JVUkkoc2V0dGluZ3MsICJodHRwOi8vd3d3Lmdvb2dsZS5jb20uYnIvIik7CisgICAgZ19hc3Nl
cnRfY21wc3RyKHVzZXJBZ2VudCwgPT0sIGRlZmF1bHRVc2VyQWdlbnQpOworICAgIGdfZnJlZSh1
c2VyQWdlbnQpOworCisgICAgdXNlckFnZW50ID0gd2Via2l0V2ViU2V0dGluZ3NVc2VyQWdlbnRG
b3JVUkkoc2V0dGluZ3MsICJodHRwOi8vd3d3Lmdvb2dsZS51ay5ub3QuY29tLmJyLyIpOworICAg
IGdfYXNzZXJ0X2NtcHN0cih1c2VyQWdlbnQsID09LCAidGVzdHdlYnNldHRpbmdzLzAuMSIpOwor
ICAgIGdfZnJlZSh1c2VyQWdlbnQpOworCisgICAgZ19mcmVlKGRlZmF1bHRVc2VyQWdlbnQpOwor
ICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hh
ciAqKmFyZ3YpCit7CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisg
ICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBnX3Rl
c3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vic2V0dGluZ3MvdXNlcl9hZ2VudCIsIHRlc3Rfd2Via2l0
X3dlYl9zZXR0aW5nc191c2VyX2FnZW50KTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQv
d2Vic2V0dGluZ3MvY29weSIsIHRlc3Rfd2Via2l0X3dlYl9zZXR0aW5nc19jb3B5KTsKKyAgICBy
ZXR1cm4gZ190ZXN0X3J1biAoKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJ2aWV3LmMgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdEd0ay90ZXN0d2Vidmlldy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjY0ZDkyYTIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdEd0ay90ZXN0d2Vidmlldy5jCkBAIC0wLDAgKzEsNzQ2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDksIDIwMTAgQ29sbGFib3JhIEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEg
Uy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAidGVzdF91dGlscy5oIgorCisjaW5j
bHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4K
KworI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgorI2luY2x1ZGUg
PGdkay9nZGsuaD4KKyNpbmNsdWRlIDxnZGsvZ2Rra2V5c3ltcy5oPgorI2luY2x1ZGUgPGd0ay9n
dGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+CisKK0dNYWluTG9vcCogbG9vcDsKK1Nv
dXBTZXNzaW9uICpzZXNzaW9uOworY2hhciogYmFzZV91cmk7CisKKy8qIEZvciByZWFsIHJlcXVl
c3QgdGVzdGluZyAqLworc3RhdGljIHZvaWQKK3NlcnZlcl9jYWxsYmFjayhTb3VwU2VydmVyKiBz
ZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtc2csCisgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHBh
dGgsIEdIYXNoVGFibGUqIHF1ZXJ5LAorICAgICAgICAgICAgICAgICBTb3VwQ2xpZW50Q29udGV4
dCogY29udGV4dCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBpZiAobXNnLT5tZXRob2QgIT0gU09V
UF9NRVRIT0RfR0VUKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1zZywgU09V
UF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1zZywgU09VUF9TVEFUVVNfT0spOworCisgICAgaWYg
KGdfc3RyX2VxdWFsKHBhdGgsICIvZmF2aWNvbi5pY28iKSkgeworICAgICAgICBjaGFyKiBjb250
ZW50czsKKyAgICAgICAgZ3NpemUgbGVuZ3RoOworICAgICAgICBHRXJyb3IqIGVycm9yID0gTlVM
TDsKKworICAgICAgICBnX2ZpbGVfZ2V0X2NvbnRlbnRzKCJibGFuay5pY28iLCAmY29udGVudHMs
ICZsZW5ndGgsICZlcnJvcik7CisgICAgICAgIGdfYXNzZXJ0KCFlcnJvcik7CisKKyAgICAgICAg
c291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1zZy0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllf
VEFLRSwgY29udGVudHMsIGxlbmd0aCk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRo
LCAiL2JpZ2Rpdi5odG1sIikpIHsKKyAgICAgICAgY2hhciogY29udGVudHMgPSBnX3N0cmR1cCgi
PGh0bWw+PGJvZHk+PGEgaWQ9XCJsaW5rXCIgaHJlZj1cImh0dHA6Ly9hYmMuZGVmXCI+dGVzdDwv
YT48ZGl2IHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogZ3JlZW47IGhlaWdodDogMTIwMHB4O1wi
PjwvZGl2PjwvYm9keT48L2h0bWw+Iik7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVu
ZChtc2ctPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGNvbnRlbnRzLCBzdHJsZW4o
Y29udGVudHMpKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvaWZyYW1lLmh0
bWwiKSkgeworICAgICAgICBjaGFyKiBjb250ZW50cyA9IGdfc3RyZHVwKCI8aHRtbD48Ym9keSBp
ZD1cInNvbWUtY29udGVudFwiPjxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiBncmVlbjsg
aGVpZ2h0OiA1MHB4O1wiPjwvZGl2PjxpZnJhbWUgc3JjPVwiYmlnZGl2Lmh0bWxcIj48L2lmcmFt
ZT48L2JvZHk+PC9odG1sPiIpOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobXNn
LT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBjb250ZW50cywgc3RybGVuKGNvbnRl
bnRzKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2hhciogY29udGVudHMgPSBnX3N0cmR1cCgi
PGh0bWw+PGJvZHk+dGVzdDwvYm9keT48L2h0bWw+Iik7CisgICAgICAgIHNvdXBfbWVzc2FnZV9i
b2R5X2FwcGVuZChtc2ctPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGNvbnRlbnRz
LCBzdHJsZW4oY29udGVudHMpKTsKKyAgICB9CisKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21w
bGV0ZShtc2ctPnJlc3BvbnNlX2JvZHkpOworfQorCitzdGF0aWMgdm9pZCBpZGxlX3F1aXRfbG9v
cF9jYihXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgR1BhcmFtU3BlYyogcHNwZWMsIGdwb2ludGVy
IGRhdGEpCit7CisgICAgaWYgKHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMod2ViX3Zp
ZXcpID09IFdFQktJVF9MT0FEX0ZJTklTSEVEIHx8CisgICAgICAgIHdlYmtpdF93ZWJfdmlld19n
ZXRfbG9hZF9zdGF0dXMod2ViX3ZpZXcpID09IFdFQktJVF9MT0FEX0ZBSUxFRCkKKyAgICAgICAg
Z19tYWluX2xvb3BfcXVpdChsb29wKTsKK30KKworc3RhdGljIGdib29sZWFuIHRpbWVvdXRfY2Io
Z3BvaW50ZXIgZGF0YSkKK3sKKyAgICBnX2Vycm9yKCJEaWRuJ3QgZ2V0IGljb24tdXJpIGJlZm9y
ZSB0aW1pbmcgb3V0LiIpOworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgaWNv
bl91cmlfY2hhbmdlZF9jYihXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgR1BhcmFtU3BlYyogcHNw
ZWMsIGdwb2ludGVyIGRhdGEpCit7CisgICAgY2hhciogZXhwZWN0ZWRfdXJpOworCisgICAgZ19h
c3NlcnRfY21wc3RyKGdfcGFyYW1fc3BlY19nZXRfbmFtZShwc3BlYyksID09LCAiaWNvbi11cmki
KTsKKworICAgIGV4cGVjdGVkX3VyaSA9IGdfc3RyZHVwX3ByaW50ZigiJXNmYXZpY29uLmljbyIs
IGJhc2VfdXJpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dldF9pY29u
X3VyaSh3ZWJfdmlldyksID09LCBleHBlY3RlZF91cmkpOworICAgIGdfZnJlZShleHBlY3RlZF91
cmkpOworCisgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKK30KKworc3RhdGljIHZvaWQgaWNv
bl9sb2FkZWRfY2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIGNoYXIqIGljb25fdXJpLCBncG9p
bnRlciBkYXRhKQoreworICAgIGdib29sZWFuKiBiZWVuX2hlcmUgPSAoZ2Jvb2xlYW4qKWRhdGE7
CisgICAgY2hhciogZXhwZWN0ZWRfdXJpID0gZ19zdHJkdXBfcHJpbnRmKCIlc2Zhdmljb24uaWNv
IiwgYmFzZV91cmkpOworICAgIGdfYXNzZXJ0X2NtcHN0cihpY29uX3VyaSwgPT0sIGV4cGVjdGVk
X3VyaSk7CisgICAgZ19mcmVlKGV4cGVjdGVkX3VyaSk7CisKKyAgICBnX2Fzc2VydF9jbXBzdHIo
aWNvbl91cmksID09LCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fdXJpKHdlYl92aWV3KSk7CisK
KyAgICAqYmVlbl9oZXJlID0gVFJVRTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2Vi
X3ZpZXdfaWNvbl91cmkoKQoreworICAgIGdib29sZWFuIGJlZW5fdG9faWNvbl9sb2FkZWQgPSBG
QUxTRTsKKyAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93
ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmplY3RfcmVmX3NpbmsoR19PQkpFQ1QodmlldykpOwor
CisgICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKKworICAgIGdfb2JqZWN0
X2Nvbm5lY3QoR19PQkpFQ1QodmlldyksCisgICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjpu
b3RpZnk6Omljb24tdXJpIiwgaWNvbl91cmlfY2hhbmdlZF9jYiwgTlVMTCwKKyAgICAgICAgICAg
ICAgICAgICAgICJzaWduYWw6Omljb24tbG9hZGVkIiwgaWNvbl9sb2FkZWRfY2IsICZiZWVuX3Rv
X2ljb25fbG9hZGVkLAorICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICB3ZWJraXRf
d2ViX3ZpZXdfbG9hZF91cmkodmlldywgYmFzZV91cmkpOworCisgICAgZ3VpbnQgdGltZW91dF9p
ZCA9IGdfdGltZW91dF9hZGQoNTAwLCB0aW1lb3V0X2NiLCAwKTsKKworICAgIGdfbWFpbl9sb29w
X3J1bihsb29wKTsKKworICAgIGdfc291cmNlX3JlbW92ZSh0aW1lb3V0X2lkKTsKKworICAgIGdf
YXNzZXJ0KGJlZW5fdG9faWNvbl9sb2FkZWQpOworCisgICAgZ19vYmplY3RfdW5yZWYodmlldyk7
Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBtYXBfZXZlbnRfY2IoR3RrV2lkZ2V0ICp3aWRnZXQsIEdk
a0V2ZW50KiBldmVudCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBHTWFpbkxvb3AqIGxvb3AgPSAo
R01haW5Mb29wKilkYXRhOworICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7CisKKyAgICByZXR1
cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBxdWl0X2FmdGVyX3Nob3J0X2RlbGF5X2Ni
KGdwb2ludGVyIGRhdGEpCit7CisgICAgZ19tYWluX2xvb3BfcXVpdCgoR01haW5Mb29wKilkYXRh
KTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl92
aWV3X2dyYWJfZm9jdXMoKQoreworICAgIGNoYXIqIHVyaSA9IGdfc3RyY29uY2F0KGJhc2VfdXJp
LCAiaWZyYW1lLmh0bWwiLCBOVUxMKTsKKyAgICBHdGtXaWRnZXQqIHdpbmRvdyA9IGd0a193aW5k
b3dfbmV3KEdUS19XSU5ET1dfUE9QVVApOworICAgIEd0a1dpZGdldCogc2Nyb2xsZWRfd2luZG93
ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19uZXcoTlVMTCwgTlVMTCk7CisgICAgV2ViS2l0V2ViVmll
dyogdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIEd0
a0FkanVzdG1lbnQqIGFkanVzdG1lbnQ7CisKKyAgICBndGtfd2luZG93X3NldF9kZWZhdWx0X3Np
emUoR1RLX1dJTkRPVyh3aW5kb3cpLCA0MDAsIDIwMCk7CisKKyAgICBndGtfY29udGFpbmVyX2Fk
ZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHNjcm9sbGVkX3dpbmRvdyk7CisgICAgZ3RrX2NvbnRh
aW5lcl9hZGQoR1RLX0NPTlRBSU5FUihzY3JvbGxlZF93aW5kb3cpLCBHVEtfV0lER0VUKHZpZXcp
KTsKKworICAgIGd0a19zY3JvbGxlZF93aW5kb3dfc2V0X3BvbGljeShHVEtfU0NST0xMRURfV0lO
RE9XKHNjcm9sbGVkX3dpbmRvdyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdUS19QT0xJQ1lfQVVUT01BVElDLCBHVEtfUE9MSUNZX0FVVE9NQVRJQyk7CisKKyAgICBsb29w
ID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworCisgICAgZ19zaWduYWxfY29ubmVjdCh2
aWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0soaWRsZV9xdWl0X2xvb3BfY2Ip
LCBOVUxMKTsKKworICAgIC8qIFdhaXQgZm9yIHdpbmRvdyB0byBzaG93IHVwICovCisgICAgZ3Rr
X3dpZGdldF9zaG93X2FsbCh3aW5kb3cpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2luZG93LCAi
bWFwLWV2ZW50IiwKKyAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sobWFwX2V2ZW50X2Ni
KSwgbG9vcCk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgLyogTG9hZCBhIHBh
Z2Ugd2l0aCBhIGJpZyBkaXYgdGhhdCB3aWxsIGNhdXNlIHNjcm9sbGJhcnMgdG8gYXBwZWFyICov
CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHZpZXcsIHVyaSk7CisgICAgZ19tYWluX2xv
b3BfcnVuKGxvb3ApOworCisgICAgYWRqdXN0bWVudCA9IGd0a19zY3JvbGxlZF93aW5kb3dfZ2V0
X3ZhZGp1c3RtZW50KEdUS19TQ1JPTExFRF9XSU5ET1coc2Nyb2xsZWRfd2luZG93KSk7CisgICAg
Z19hc3NlcnRfY21wZmxvYXQoZ3RrX2FkanVzdG1lbnRfZ2V0X3ZhbHVlKGFkanVzdG1lbnQpLCA9
PSwgMC4wKTsKKworICAgIC8qIFNpbmNlIHdlYmtpdF93ZWJfdmlld19leGVjdXRlX3NjcmlwdCBk
b2VzIG5vdCByZXR1cm4gYSB2YWx1ZSwKKyAgICAgICBpdCBpcyBpbXBvc3NpYmxlIHRvIGtub3cg
aWYgYW4gaW5uZXIgZG9jdW1lbnQgaGFzIGZvY3VzIGFmdGVyCisgICAgICAgYSBub2RlIG9mIGl0
IHdhcyBmb2N1c2VkIHZpYSAuZm9jdXMoKSBtZXRob2QuCisgICAgICAgVGhlIGNvZGUgYmVsb3cg
aXMgYW4gd29ya2Fyb3VuZDogaWYgdGhlIG5vZGUgaGFzIGZvY3VzLCBhIHNjcm9sbAorICAgICAg
IGFjdGlvbiBpcyBwZXJmb3JtZWQgYW5kIGFmdGVyd2FyZCBpdCBpcyBjaGVja2VkIGlmIHRoZSBh
ZGp1c3RtZW50CisgICAgICAgaGFzIHRvIGJlIGRpZmZlcmVudCBmcm9tIDAuCisgICAgKi8KKyAg
ICBjaGFyIHNjcmlwdFtdID0gInZhciBpbm5lckRvYyA9IGRvY3VtZW50LmRlZmF1bHRWaWV3LmZy
YW1lc1swXS5kb2N1bWVudDsgXAorICAgICAgICAgICAgICAgICAgICAgaW5uZXJEb2MuZ2V0RWxl
bWVudEJ5SWQoXCJsaW5rXCIpLmZvY3VzKCk7ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAg
ICAgICAgICBpZiAoaW5uZXJEb2MuaGFzRm9jdXMoKSkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxCeSgwLCAxMDAp
OyI7CisKKyAgICAvKiBGb2N1cyBhbiBlbGVtZW50IHVzaW5nIEphdmFTY3JpcHQgKi8KKyAgICB3
ZWJraXRfd2ViX3ZpZXdfZXhlY3V0ZV9zY3JpcHQodmlldywgc2NyaXB0KTsKKworICAgIC8qIEFk
anVzdG1lbnRzIHVwZGF0ZSBhc3luY2hyb25vdXNseSwgc28gd2UgbXVzdCB3YWl0IGEgYml0LiAq
LworICAgIGdfdGltZW91dF9hZGQoMTAwLCBxdWl0X2FmdGVyX3Nob3J0X2RlbGF5X2NiLCBsb29w
KTsKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICAvKiBNYWtlIHN1cmUgdGhlIFNj
cm9sbGVkV2luZG93IG5vdGljZWQgdGhlIHNjcm9sbCAqLworICAgIGdfYXNzZXJ0X2NtcGZsb2F0
KGd0a19hZGp1c3RtZW50X2dldF92YWx1ZShhZGp1c3RtZW50KSwgIT0sIDAuMCk7CisKKyAgICBn
X2ZyZWUodXJpKTsKKyAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kod2luZG93KTsKK30KKworc3RhdGlj
IHZvaWQgZG9fdGVzdF93ZWJraXRfd2ViX3ZpZXdfYWRqdXN0bWVudHMoZ2Jvb2xlYW4gd2l0aF9w
YWdlX2NhY2hlKQoreworICAgIGNoYXIqIGVmZmVjdGl2ZV91cmkgPSBnX3N0cmNvbmNhdChiYXNl
X3VyaSwgImJpZ2Rpdi5odG1sIiwgTlVMTCk7CisgICAgY2hhciogc2Vjb25kX3VyaSA9IGdfc3Ry
Y29uY2F0KGJhc2VfdXJpLCAiaWZyYW1lLmh0bWwiLCBOVUxMKTsKKyAgICBHdGtXaWRnZXQqIHdp
bmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOworICAgIEd0a1dpZGdl
dCogc2Nyb2xsZWRfd2luZG93ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19uZXcoTlVMTCwgTlVMTCk7
CisgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3Zp
ZXdfbmV3KCkpOworICAgIEd0a0FkanVzdG1lbnQqIGFkanVzdG1lbnQ7CisgICAgZG91YmxlIGxv
d2VyOworICAgIGRvdWJsZSB1cHBlcjsKKworICAgIGlmICh3aXRoX3BhZ2VfY2FjaGUpIHsKKyAg
ICAgICAgV2ViS2l0V2ViU2V0dGluZ3MqIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9z
ZXR0aW5ncyh2aWV3KTsKKyAgICAgICAgZ19vYmplY3Rfc2V0KHNldHRpbmdzLCAiZW5hYmxlLXBh
Z2UtY2FjaGUiLCBUUlVFLCBOVUxMKTsKKyAgICB9CisKKyAgICBndGtfd2luZG93X3NldF9kZWZh
dWx0X3NpemUoR1RLX1dJTkRPVyh3aW5kb3cpLCA0MDAsIDIwMCk7CisKKyAgICBndGtfY29udGFp
bmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHNjcm9sbGVkX3dpbmRvdyk7CisgICAgZ3Rr
X2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihzY3JvbGxlZF93aW5kb3cpLCBHVEtfV0lER0VU
KHZpZXcpKTsKKworICAgIGd0a19zY3JvbGxlZF93aW5kb3dfc2V0X3BvbGljeShHVEtfU0NST0xM
RURfV0lORE9XKHNjcm9sbGVkX3dpbmRvdyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdUS19QT0xJQ1lfQVVUT01BVElDLCBHVEtfUE9MSUNZX0FVVE9NQVRJQyk7CisKKyAg
ICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworCisgICAgZ19vYmplY3RfY29u
bmVjdChHX09CSkVDVCh2aWV3KSwKKyAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6Om5vdGlm
eTo6bG9hZC1zdGF0dXMiLCBpZGxlX3F1aXRfbG9vcF9jYiwgTlVMTCwKKyAgICAgICAgICAgICAg
ICAgICAgIE5VTEwpOworCisgICAgLyogV2FpdCBmb3Igd2luZG93IHRvIHNob3cgdXAgKi8KKyAg
ICBndGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7CisgICAgZ19zaWduYWxfY29ubmVjdCh3aW5k
b3csICJtYXAtZXZlbnQiLAorICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhtYXBfZXZl
bnRfY2IpLCBsb29wKTsKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICAvKiBMb2Fk
IGEgcGFnZSB3aXRoIGEgYmlnIGRpdiB0aGF0IHdpbGwgY2F1c2Ugc2Nyb2xsYmFycyB0byBhcHBl
YXIgKi8KKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkodmlldywgZWZmZWN0aXZlX3VyaSk7
CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgLyogQWRqdXN0bWVudHMgdXBkYXRl
IGFzeW5jaHJvbm91c2x5LCBzbyB3ZSBtdXN0IHdhaXQgYSBiaXQuICovCisgICAgZ190aW1lb3V0
X2FkZCgxMDAsIHF1aXRfYWZ0ZXJfc2hvcnRfZGVsYXlfY2IsIGxvb3ApOworICAgIGdfbWFpbl9s
b29wX3J1bihsb29wKTsKKworICAgIGFkanVzdG1lbnQgPSBndGtfc2Nyb2xsZWRfd2luZG93X2dl
dF92YWRqdXN0bWVudChHVEtfU0NST0xMRURfV0lORE9XKHNjcm9sbGVkX3dpbmRvdykpOworICAg
IGdfYXNzZXJ0X2NtcGZsb2F0KGd0a19hZGp1c3RtZW50X2dldF92YWx1ZShhZGp1c3RtZW50KSwg
PT0sIDAuMCk7CisKKyAgICBsb3dlciA9IGd0a19hZGp1c3RtZW50X2dldF9sb3dlcihhZGp1c3Rt
ZW50KTsKKyAgICB1cHBlciA9IGd0a19hZGp1c3RtZW50X2dldF91cHBlcihhZGp1c3RtZW50KTsK
KworICAgIC8qIFNjcm9sbCB0aGUgdmlldyB1c2luZyBKYXZhU2NyaXB0ICovCisgICAgd2Via2l0
X3dlYl92aWV3X2V4ZWN1dGVfc2NyaXB0KHZpZXcsICJ3aW5kb3cuc2Nyb2xsQnkoMCwgMTAwKSIp
OworCisgICAgLyogQWRqdXN0bWVudHMgdXBkYXRlIGFzeW5jaHJvbm91c2x5LCBzbyB3ZSBtdXN0
IHdhaXQgYSBiaXQuICovCisgICAgZ190aW1lb3V0X2FkZCgxMDAsIHF1aXRfYWZ0ZXJfc2hvcnRf
ZGVsYXlfY2IsIGxvb3ApOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIC8qIE1h
a2Ugc3VyZSB0aGUgU2Nyb2xsZWRXaW5kb3cgbm90aWNlZCB0aGUgc2Nyb2xsICovCisgICAgZ19h
c3NlcnRfY21wZmxvYXQoZ3RrX2FkanVzdG1lbnRfZ2V0X3ZhbHVlKGFkanVzdG1lbnQpLCA9PSwg
MTAwLjApOworCisgICAgLyogTG9hZCBhIHNlY29uZCBVUkkgKi8KKyAgICB3ZWJraXRfd2ViX3Zp
ZXdfbG9hZF91cmkodmlldywgc2Vjb25kX3VyaSk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3Ap
OworCisgICAgLyogVGhlIHBhZ2UgbG9hZGVkIGJ1dCB0aGUgYWRqdXN0bWVudHMgbWF5IG5vdCBi
ZSB1cGRhdGVkIHlldC4gV2FpdCBhIGJpdC4gKi8KKyAgICBnX3RpbWVvdXRfYWRkKDEwMCwgcXVp
dF9hZnRlcl9zaG9ydF9kZWxheV9jYiwgbG9vcCk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3Ap
OworCisgICAgLyogTWFrZSBzdXJlIHRoZSBzY3JvbGxiYXIgaGFzIGJlZW4gcmVzZXQgKi8KKyAg
ICBnX2Fzc2VydF9jbXBmbG9hdChndGtfYWRqdXN0bWVudF9nZXRfdmFsdWUoYWRqdXN0bWVudCks
ID09LCAwLjApOworCisgICAgLyogR28gYmFjayAqLworICAgIHdlYmtpdF93ZWJfdmlld19nb19i
YWNrKHZpZXcpOworCisgICAgLyogV2hlbiB1c2luZyBwYWdlIGNhY2hlLCBnb19iYWNrIHdpbGwg
cmV0dXJuIHN5bmNyb25vdXNseSAqLworICAgIGlmICghd2l0aF9wYWdlX2NhY2hlKQorICAgICAg
ICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICAvKiBNYWtlIHN1cmUgR1RLKyBoYXMgdGlt
ZSB0byBwcm9jZXNzIHRoZSBjaGFuZ2VzIGluIHNpemUsIGZvciB0aGUgYWRqdXNtZW50cyAqLwor
ICAgIHdoaWxlIChndGtfZXZlbnRzX3BlbmRpbmcoKSkKKyAgICAgICAgZ3RrX21haW5faXRlcmF0
aW9uKCk7CisKKyAgICAvKiBNYWtlIHN1cmUgdXBwZXIgYW5kIGxvd2VyIGJvdW5kcyBoYXZlIGJl
ZW4gcmVzdG9yZWQgY29ycmVjdGx5ICovCisgICAgZ19hc3NlcnRfY21wZmxvYXQobG93ZXIsID09
LCBndGtfYWRqdXN0bWVudF9nZXRfbG93ZXIoYWRqdXN0bWVudCkpOworICAgIGdfYXNzZXJ0X2Nt
cGZsb2F0KHVwcGVyLCA9PSwgZ3RrX2FkanVzdG1lbnRfZ2V0X3VwcGVyKGFkanVzdG1lbnQpKTsK
KyAgICBnX2Fzc2VydF9jbXBmbG9hdChndGtfYWRqdXN0bWVudF9nZXRfdmFsdWUoYWRqdXN0bWVu
dCksID09LCAxMDAuMCk7CisKKyAgICBnX2ZyZWUoZWZmZWN0aXZlX3VyaSk7CisgICAgZ19mcmVl
KHNlY29uZF91cmkpOworCisgICAgZ3RrX3dpZGdldF9kZXN0cm95KHdpbmRvdyk7Cit9CisKK3N0
YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl92aWV3X2FkanVzdG1lbnRzKCkKK3sKKyAgICAvKiBU
ZXN0IHRoaXMgd2l0aCBwYWdlIGNhY2hlIGRpc2FibGVkLCBhbmQgZW5hYmxlZC4gKi8KKyAgICBk
b190ZXN0X3dlYmtpdF93ZWJfdmlld19hZGp1c3RtZW50cyhGQUxTRSk7CisgICAgZG9fdGVzdF93
ZWJraXRfd2ViX3ZpZXdfYWRqdXN0bWVudHMoVFJVRSk7Cit9CisKK2dib29sZWFuIGRlbGF5ZWRf
ZGVzdHJveShncG9pbnRlciBkYXRhKQoreworICAgIGd0a193aWRnZXRfZGVzdHJveShHVEtfV0lE
R0VUKGRhdGEpKTsKKyAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworICAgIHJldHVybiBGQUxT
RTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3ZpZXdfZGVzdHJveSgpCit7Cisg
ICAgR3RrV2lkZ2V0KiB3aW5kb3c7CisgICAgR3RrV2lkZ2V0KiB3ZWJfdmlldzsKKworICAgIHdp
bmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOworICAgIHdlYl92aWV3
ID0gd2Via2l0X3dlYl92aWV3X25ldygpOworCisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NP
TlRBSU5FUih3aW5kb3cpLCB3ZWJfdmlldyk7CisKKyAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKHdp
bmRvdyk7CisKKyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworCisgICAg
Z19zaWduYWxfY29ubmVjdCh3aW5kb3csICJtYXAtZXZlbnQiLAorICAgICAgICAgICAgICAgICAg
ICAgR19DQUxMQkFDSyhtYXBfZXZlbnRfY2IpLCBsb29wKTsKKyAgICBnX21haW5fbG9vcF9ydW4o
bG9vcCk7CisKKyAgICBnX2lkbGVfYWRkKGRlbGF5ZWRfZGVzdHJveSwgd2ViX3ZpZXcpOworICAg
IGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIGd0a193aWRnZXRfZGVzdHJveSh3aW5kb3cp
OworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfdmlld193aW5kb3dfZmVhdHVyZXMo
KQoreworICAgIEd0a1dpZGdldCogd2luZG93OworICAgIEd0a1dpZGdldCogd2ViX3ZpZXc7Cisg
ICAgCisgICAgd2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7Cisg
ICAgd2ViX3ZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7CisgICAgCisgICAgZ3RrX2NvbnRh
aW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB3ZWJfdmlldyk7CisgICAgCisgICAgZ3Rr
X3dpZGdldF9zaG93X2FsbCh3aW5kb3cpOworICAgIAorICAgIGxvb3AgPSBnX21haW5fbG9vcF9u
ZXcoTlVMTCwgVFJVRSk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdpbmRvdywgIm1hcC1ldmVu
dCIsCisgICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKG1hcF9ldmVudF9jYiksIGxvb3Ap
OworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKyAgICAKKyAgICAvKiBCdWcgIzM2MTQ0ICov
CisgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKHdlYl92aWV3KSwgIndpbmRvdy1mZWF0dXJlcyIs
IE5VTEwsIE5VTEwpOworICAgIAorICAgIGd0a193aWRnZXRfZGVzdHJveSh3aW5kb3cpOworfSAg
ICAKKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3ZpZXdfaW5fb2Zmc2NyZWVuX3dpbmRv
d19kb2VzX25vdF9jcmFzaCgpCit7CisgICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBU
UlVFKTsKKworICAgIEd0a1dpZGdldCAqd2luZG93ID0gZ3RrX29mZnNjcmVlbl93aW5kb3dfbmV3
KCk7CisgICAgR3RrV2lkZ2V0ICp3ZWJfdmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKKwor
ICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgd2ViX3ZpZXcpOwor
ICAgIGd0a193aWRnZXRfc2hvd19hbGwod2luZG93KTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdl
Yl92aWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0soaWRsZV9xdWl0X2xvb3Bf
Y2IpLCBOVUxMKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkoV0VCS0lUX1dFQl9WSUVX
KHdlYl92aWV3KSwgYmFzZV91cmkpOworCisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisg
ICAgZ3RrX3dpZGdldF9kZXN0cm95KHdpbmRvdyk7CisgICAgZ19tYWluX2xvb3BfdW5yZWYobG9v
cCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl92aWV3X2RvZXNfbm90X3N0ZWFs
X2ZvY3VzKCkKK3sKKyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworCisg
ICAgR3RrV2lkZ2V0ICp3aW5kb3cgPSBndGtfb2Zmc2NyZWVuX3dpbmRvd19uZXcoKTsKKyAgICBH
dGtXaWRnZXQgKndlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7CisgICAgR3RrV2lkZ2V0
ICplbnRyeSA9IGd0a19lbnRyeV9uZXcoKTsKKworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisg
ICAgR3RrV2lkZ2V0ICpib3ggPSBndGtfaGJveF9uZXcoRkFMU0UsIDApOworI2Vsc2UKKyAgICBH
dGtXaWRnZXQgKmJveCA9IGd0a19ib3hfbmV3KEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFMLCAw
KTsKKyNlbmRpZgorCisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihib3gpLCB3
ZWJWaWV3KTsKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGJveCksIGVudHJ5
KTsKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIGJveCk7Cisg
ICAgZ3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpOworCisgICAgZ3RrX3dpZGdldF9ncmFiX2Zv
Y3VzKGVudHJ5KTsKKyAgICBnX2Fzc2VydChndGtfd2lkZ2V0X2lzX2ZvY3VzKGVudHJ5KSk7CisK
KyAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19D
QUxMQkFDSyhpZGxlX3F1aXRfbG9vcF9jYiksIE5VTEwpOworICAgIHdlYmtpdF93ZWJfdmlld19s
b2FkX2h0bWxfc3RyaW5nKFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3KSwKKyAgICAgICAgIjxodG1s
Pjxib2R5PiIKKyAgICAgICAgIiAgICA8aW5wdXQgaWQ9XCJlbnRyeVwiIHR5cGU9XCJ0ZXh0XCIv
PiIKKyAgICAgICAgIiAgICA8c2NyaXB0PiIKKyAgICAgICAgIiAgICAgICAgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoXCJlbnRyeVwiKS5mb2N1cygpOyIKKyAgICAgICAgIiAgICA8L3NjcmlwdD4i
CisgICAgICAgICI8L2JvZHk+PC9odG1sPiIsICJmaWxlOi8vIik7CisKKyAgICBnX21haW5fbG9v
cF9ydW4obG9vcCk7CisKKyAgICBnX2Fzc2VydChndGtfd2lkZ2V0X2lzX2ZvY3VzKGVudHJ5KSk7
CisKKyAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kod2luZG93KTsKKyAgICBnX21haW5fbG9vcF91bnJl
Zihsb29wKTsKK30KKworc3RhdGljIGdib29sZWFuIGVtaXRLZXlTdHJva2UoV2ViS2l0V2ViVmll
dyogd2ViVmlldykKK3sKKyAgICBHZGtFdmVudCogcHJlc3NFdmVudCA9IGdka19ldmVudF9uZXco
R0RLX0tFWV9QUkVTUyk7CisgICAgcHJlc3NFdmVudC0+a2V5LmtleXZhbCA9IEdES19LRVlfZjsK
KyAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyhHVEtfV0lER0VU
KHdlYlZpZXcpKTsKKyAgICBwcmVzc0V2ZW50LT5rZXkud2luZG93ID0gd2luZG93OworICAgIGdf
b2JqZWN0X3JlZihwcmVzc0V2ZW50LT5rZXkud2luZG93KTsKKworI2lmbmRlZiBHVEtfQVBJX1ZF
UlNJT05fMgorICAgIEdka0RldmljZU1hbmFnZXIqIG1hbmFnZXIgPSBnZGtfZGlzcGxheV9nZXRf
ZGV2aWNlX21hbmFnZXIoZ2RrX3dpbmRvd19nZXRfZGlzcGxheSh3aW5kb3cpKTsKKyAgICBnZGtf
ZXZlbnRfc2V0X2RldmljZShwcmVzc0V2ZW50LCBnZGtfZGV2aWNlX21hbmFnZXJfZ2V0X2NsaWVu
dF9wb2ludGVyKG1hbmFnZXIpKTsKKyNlbmRpZgorCisgICAgLy8gV2hlbiBzeW50aGVzaXppbmcg
YW4gZXZlbnQsIGFuIGludmFsaWQgaGFyZHdhcmVfa2V5Y29kZSB2YWx1ZQorICAgIC8vIGNhbiBj
YXVzZSBpdCB0byBiZSBiYWRseSBwcm9jZXNzZWQgYnkgR3RrKy4KKyAgICBHZGtLZXltYXBLZXkq
IGtleXM7CisgICAgZ2ludCBuX2tleXM7CisgICAgaWYgKGdka19rZXltYXBfZ2V0X2VudHJpZXNf
Zm9yX2tleXZhbChnZGtfa2V5bWFwX2dldF9kZWZhdWx0KCksIEdES19LRVlfZiwgJmtleXMsICZu
X2tleXMpKSB7CisgICAgICAgIHByZXNzRXZlbnQtPmtleS5oYXJkd2FyZV9rZXljb2RlID0ga2V5
c1swXS5rZXljb2RlOworICAgICAgICBnX2ZyZWUoa2V5cyk7CisgICAgfQorCisgICAgR2RrRXZl
bnQqIHJlbGVhc2VFdmVudCA9IGdka19ldmVudF9jb3B5KHByZXNzRXZlbnQpOworICAgIGd0a19t
YWluX2RvX2V2ZW50KHByZXNzRXZlbnQpOworICAgIGdka19ldmVudF9mcmVlKHByZXNzRXZlbnQp
OworICAgIHJlbGVhc2VFdmVudC0+a2V5LnR5cGUgPSBHREtfS0VZX1JFTEVBU0U7CisgICAgZ3Rr
X21haW5fZG9fZXZlbnQocmVsZWFzZUV2ZW50KTsKKyAgICBnZGtfZXZlbnRfZnJlZShyZWxlYXNl
RXZlbnQpOworCisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gZW50ZXJp
bmdfZnVsbHNjcmVlbl9jYihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHT2JqZWN0KiBlbGVtZW50
LCBnYm9vbGVhbiBibG9ja2VkKQoreworICAgIGlmIChibG9ja2VkKQorICAgICAgICBnX21haW5f
bG9vcF9xdWl0KGxvb3ApOworICAgIGVsc2UKKyAgICAgICAgZ190aW1lb3V0X2FkZCgyMDAsIChH
U291cmNlRnVuYykgZW1pdEtleVN0cm9rZSwgd2ViVmlldyk7CisgICAgcmV0dXJuIGJsb2NrZWQ7
Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBsZWF2aW5nX2Z1bGxzY3JlZW5fY2IoV2ViS2l0V2ViVmll
dyogd2ViVmlldywgR09iamVjdCogZWxlbWVudCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBnX21h
aW5fbG9vcF9xdWl0KGxvb3ApOworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQg
dGVzdF93ZWJraXRfd2ViX3ZpZXdfZnVsbHNjcmVlbihnY29uc3Rwb2ludGVyIGJsb2NrZWQpCit7
CisgICAgR3RrV2lkZ2V0KiB3aW5kb3c7CisgICAgR3RrV2lkZ2V0KiB3ZWJfdmlldzsKKyAgICBX
ZWJLaXRXZWJTZXR0aW5ncyAqc2V0dGluZ3M7CisKKyAgICB3aW5kb3cgPSBndGtfd2luZG93X25l
dyhHVEtfV0lORE9XX1RPUExFVkVMKTsKKyAgICB3ZWJfdmlldyA9IHdlYmtpdF93ZWJfdmlld19u
ZXcoKTsKKworICAgIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyhXRUJL
SVRfV0VCX1ZJRVcod2ViX3ZpZXcpKTsKKyAgICBnX29iamVjdF9zZXQoc2V0dGluZ3MsICJlbmFi
bGUtZnVsbHNjcmVlbiIsIFRSVUUsIE5VTEwpOworICAgIHdlYmtpdF93ZWJfdmlld19zZXRfc2V0
dGluZ3MoV0VCS0lUX1dFQl9WSUVXKHdlYl92aWV3KSwgc2V0dGluZ3MpOworCisgICAgZ3RrX2Nv
bnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB3ZWJfdmlldyk7CisKKyAgICBndGtf
d2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7CisKKyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5V
TEwsIFRSVUUpOworCisgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJfdmlldywgImVudGVyaW5nLWZ1
bGxzY3JlZW4iLCBHX0NBTExCQUNLKGVudGVyaW5nX2Z1bGxzY3JlZW5fY2IpLCAoZ3BvaW50ZXIp
IGJsb2NrZWQpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViX3ZpZXcsICJsZWF2aW5nLWZ1bGxz
Y3JlZW4iLCBHX0NBTExCQUNLKGxlYXZpbmdfZnVsbHNjcmVlbl9jYiksIE5VTEwpOworCisgICAg
d2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklFVyh3ZWJfdmlldyksICI8
aHRtbD48Ym9keT4iCisgICAgICAgICAgICAgICAgICAgIjxzY3JpcHQ+IgorICAgICAgICAgICAg
ICAgICAgICJ2YXIgZXZlbnROYW1lID0gJ2tleXByZXNzJzsiCisgICAgICAgICAgICAgICAgICAg
ImRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBmdW5jdGlvbiAoKSB7IgorICAg
ICAgICAgICAgICAgICAgICIgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LndlYmtpdFJlcXVl
c3RGdWxsU2NyZWVuKCk7IgorICAgICAgICAgICAgICAgICAgICJ9LCBmYWxzZSk7IgorICAgICAg
ICAgICAgICAgICAgICI8L3NjcmlwdD48L2JvZHk+PC9odG1sPiIsIE5VTEwsIE5VTEwsIE5VTEwp
OworCisgICAgZ190aW1lb3V0X2FkZCgxMDAsIChHU291cmNlRnVuYykgZW1pdEtleVN0cm9rZSwg
V0VCS0lUX1dFQl9WSUVXKHdlYl92aWV3KSk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwor
CisgICAgZ3RrX3dpZGdldF9kZXN0cm95KHdpbmRvdyk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBj
aGVja01pbWVUeXBlRm9yRmlsdGVyKEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciwgY29uc3QgZ2NoYXIq
IG1pbWVUeXBlKQoreworICAgIEd0a0ZpbGVGaWx0ZXJJbmZvIGZpbHRlcl9pbmZvOworICAgIGZp
bHRlcl9pbmZvLmNvbnRhaW5zID0gR1RLX0ZJTEVfRklMVEVSX01JTUVfVFlQRTsKKyAgICBmaWx0
ZXJfaW5mby5taW1lX3R5cGUgPSBtaW1lVHlwZTsKKyAgICByZXR1cm4gZ3RrX2ZpbGVfZmlsdGVy
X2ZpbHRlcihmaWx0ZXIsICZmaWx0ZXJfaW5mbyk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBydW5G
aWxlQ2hvb3NlckNiTm9NdWx0aXNlbE5vTWltZShXZWJLaXRXZWJWaWV3KiB3ZWJ2aWV3LCBXZWJL
aXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QsIGdwb2ludGVyIGRhdGEpCit7CisgICAgZ19h
c3NlcnQoIXdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxlKHJl
cXVlc3QpKTsKKworICAgIGNvbnN0IGdjaGFyKiBjb25zdCogbWltZVR5cGVzID0gd2Via2l0X2Zp
bGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKHJlcXVlc3QpOworICAgIGdfYXNzZXJ0
KCFtaW1lVHlwZXMpOworICAgIEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciA9IHdlYmtpdF9maWxlX2No
b29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIocmVxdWVzdCk7CisgICAgZ19hc3Nl
cnQoIWZpbHRlcik7CisKKyAgICBjb25zdCBnY2hhciogY29uc3QqIHNlbGVjdGVkRmlsZXMgPSB3
ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKHJlcXVlc3QpOwor
ICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZpbGVzKTsKKworICAgIGdfbWFpbl9sb29wX3F1aXQobG9v
cCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBydW5GaWxlQ2hvb3Nl
ckNiTXVsdGlzZWxOb01pbWUoV2ViS2l0V2ViVmlldyogd2VidmlldywgV2ViS2l0RmlsZUNob29z
ZXJSZXF1ZXN0KiByZXF1ZXN0LCBncG9pbnRlciBkYXRhKQoreworICAgIGdfYXNzZXJ0KHdlYmtp
dF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxlKHJlcXVlc3QpKTsKKwor
ICAgIGNvbnN0IGdjaGFyKiBjb25zdCogbWltZVR5cGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9y
ZXF1ZXN0X2dldF9taW1lX3R5cGVzKHJlcXVlc3QpOworICAgIGdfYXNzZXJ0KCFtaW1lVHlwZXMp
OworICAgIEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVz
dF9nZXRfbWltZV90eXBlc19maWx0ZXIocmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIWZpbHRlcik7
CisgICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2ZpbGVfY2hv
b3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCgh
c2VsZWN0ZWRGaWxlcyk7CisKKyAgICAvLyBTZWxlY3Qgc29tZSBmaWxlcy4KKyAgICBjb25zdCBn
Y2hhciogZmlsZXNUb1NlbGVjdFs0XSA9IHsgIi9mb28iLCAiL2Zvby9iYXIiLCAiL2Zvby9iYXIv
YmF6IiwgMCB9OworICAgIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9zZWxlY3RfZmlsZXMo
cmVxdWVzdCwgZmlsZXNUb1NlbGVjdCk7CisKKyAgICAvLyBDaGVjayB0aGUgZmlsZXMgdGhhdCBo
YXZlIGJlZW4ganVzdCBzZWxlY3RlZC4KKyAgICBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2ZpbGVf
Y2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0KTsKKyAgICBnX2Fzc2Vy
dChzZWxlY3RlZEZpbGVzKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1swXSwg
PT0sICIvZm9vIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMV0sID09LCAi
L2Zvby9iYXIiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1syXSwgPT0sICIv
Zm9vL2Jhci9iYXoiKTsKKyAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxlc1szXSk7CisKKyAgICBn
X21haW5fbG9vcF9xdWl0KGxvb3ApOworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jv
b2xlYW4gcnVuRmlsZUNob29zZXJDYlNlbGVjdGlvblJldGFpbmVkKFdlYktpdFdlYlZpZXcqIHdl
YnZpZXcsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCwgZ3BvaW50ZXIgZGF0YSkK
K3sKKyAgICBjb25zdCBnY2hhciogY29uc3QqIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRfZmlsZV9j
aG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKHJlcXVlc3QpOworICAgIGdfYXNzZXJ0
KHNlbGVjdGVkRmlsZXMpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzBdLCA9
PSwgIi9mb28iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1sxXSwgPT0sICIv
Zm9vL2JhciIpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzJdLCA9PSwgIi9m
b28vYmFyL2JheiIpOworICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZpbGVzWzNdKTsKKworICAgIGdf
bWFpbl9sb29wX3F1aXQobG9vcCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9v
bGVhbiBydW5GaWxlQ2hvb3NlckNiTm9NdWx0aXNlbEFjY2VwdFR5cGVzKFdlYktpdFdlYlZpZXcq
IHdlYnZpZXcsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCwgZ3BvaW50ZXIgZGF0
YSkKK3sKKyAgICBnX2Fzc2VydCghd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxl
Y3RfbXVsdGlwbGUocmVxdWVzdCkpOworCisgICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBtaW1lVHlw
ZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMocmVxdWVzdCk7
CisgICAgZ19hc3NlcnQobWltZVR5cGVzKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIobWltZVR5cGVz
WzBdLCA9PSwgImF1ZGlvLyoiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIobWltZVR5cGVzWzFdLCA9
PSwgInZpZGVvLyoiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIobWltZVR5cGVzWzJdLCA9PSwgImlt
YWdlLyoiKTsKKyAgICBnX2Fzc2VydCghbWltZVR5cGVzWzNdKTsKKworICAgIEd0a0ZpbGVGaWx0
ZXIqIGZpbHRlciA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19m
aWx0ZXIocmVxdWVzdCk7CisgICAgZ19hc3NlcnQoR1RLX0lTX0ZJTEVfRklMVEVSKGZpbHRlcikp
OworICAgIGdfYXNzZXJ0KGNoZWNrTWltZVR5cGVGb3JGaWx0ZXIoZmlsdGVyLCAiYXVkaW8vKiIp
KTsKKyAgICBnX2Fzc2VydChjaGVja01pbWVUeXBlRm9yRmlsdGVyKGZpbHRlciwgInZpZGVvLyoi
KSk7CisgICAgZ19hc3NlcnQoY2hlY2tNaW1lVHlwZUZvckZpbHRlcihmaWx0ZXIsICJpbWFnZS8q
IikpOworCisgICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2Zp
bGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0KTsKKyAgICBnX2Fz
c2VydCghc2VsZWN0ZWRGaWxlcyk7CisKKyAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworICAg
IHJldHVybiBUUlVFOworfQorCit2b2lkIGRvTW91c2VCdXR0b25FdmVudChHdGtXaWRnZXQqIHdp
ZGdldCwgR2RrRXZlbnRUeXBlIGV2ZW50VHlwZSwgaW50IHgsIGludCB5LCB1bnNpZ25lZCBpbnQg
YnV0dG9uLCB1bnNpZ25lZCBpbnQgbW9kaWZpZXJzKQoreworICAgIGdfYXNzZXJ0KGd0a193aWRn
ZXRfZ2V0X3JlYWxpemVkKHdpZGdldCkpOworCisgICAgR2RrRXZlbnQqIGV2ZW50ID0gZ2RrX2V2
ZW50X25ldyhldmVudFR5cGUpOworICAgIGV2ZW50LT5idXR0b24ud2luZG93ID0gZ3RrX3dpZGdl
dF9nZXRfd2luZG93KHdpZGdldCk7CisgICAgZ19vYmplY3RfcmVmKGV2ZW50LT5idXR0b24ud2lu
ZG93KTsKKworICAgIGV2ZW50LT5idXR0b24udGltZSA9IEdES19DVVJSRU5UX1RJTUU7CisgICAg
ZXZlbnQtPmJ1dHRvbi54ID0geDsKKyAgICBldmVudC0+YnV0dG9uLnkgPSB5OworICAgIGV2ZW50
LT5idXR0b24uYXhlcyA9IDA7CisgICAgZXZlbnQtPmJ1dHRvbi5zdGF0ZSA9IG1vZGlmaWVyczsK
KyAgICBldmVudC0+YnV0dG9uLmJ1dHRvbiA9IGJ1dHRvbjsKKworI2lmbmRlZiBHVEtfQVBJX1ZF
UlNJT05fMgorICAgIGV2ZW50LT5idXR0b24uZGV2aWNlID0gZ2RrX2RldmljZV9tYW5hZ2VyX2dl
dF9jbGllbnRfcG9pbnRlcihnZGtfZGlzcGxheV9nZXRfZGV2aWNlX21hbmFnZXIoZ3RrX3dpZGdl
dF9nZXRfZGlzcGxheSh3aWRnZXQpKSk7CisjZW5kaWYKKworICAgIGludCB4Um9vdCwgeVJvb3Q7
CisgICAgZ2RrX3dpbmRvd19nZXRfcm9vdF9jb29yZHMoZ3RrX3dpZGdldF9nZXRfd2luZG93KHdp
ZGdldCksIHgsIHksICZ4Um9vdCwgJnlSb290KTsKKyAgICBldmVudC0+YnV0dG9uLnhfcm9vdCA9
IHhSb290OworICAgIGV2ZW50LT5idXR0b24ueV9yb290ID0geVJvb3Q7CisgICAgZ3RrX21haW5f
ZG9fZXZlbnQoZXZlbnQpOworfQorCitzdGF0aWMgdm9pZCBjbGlja01vdXNlQnV0dG9uKEd0a1dp
ZGdldCogd2lkZ2V0LCBpbnQgeCwgaW50IHksIHVuc2lnbmVkIGludCBidXR0b24sIHVuc2lnbmVk
IGludCBtb2RpZmllcnMpCit7CisgICAgZG9Nb3VzZUJ1dHRvbkV2ZW50KHdpZGdldCwgR0RLX0JV
VFRPTl9QUkVTUywgeCwgeSwgYnV0dG9uLCBtb2RpZmllcnMpOworICAgIGRvTW91c2VCdXR0b25F
dmVudCh3aWRnZXQsIEdES19CVVRUT05fUkVMRUFTRSwgeCwgeSwgYnV0dG9uLCBtb2RpZmllcnMp
OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gY2xpY2tNb3VzZUJ1dHRvbkFuZFdhaXRGb3JGaWxlQ2hv
b3NlclJlcXVlc3QoV2ViS2l0V2ViVmlldyogd2ViVmlldykKK3sKKyAgICBjbGlja01vdXNlQnV0
dG9uKEdUS19XSURHRVQod2ViVmlldyksIDUsIDUsIDEsIDApOworICAgIHJldHVybiBUUlVFOwor
fQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfdmlld19maWxlX2Nob29zZXIoKQorewor
ICAgIGNvbnN0IGdjaGFyKiBodG1sRm9ybWF0QmFzZSA9ICI8aHRtbD48Ym9keT4iCisgICAgICAg
ICAgICAiPGlucHV0IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjA7bWFyZ2lu
OjA7cGFkZGluZzowJyB0eXBlPSdmaWxlJyAlcy8+IgorICAgICAgICAgICAgIjwvYm9keT48L2h0
bWw+IjsKKworICAgIEd0a1dpZGdldCogd2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRP
V19UT1BMRVZFTCk7CisgICAgR3RrV2lkZ2V0KiB3ZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X25l
dygpOworICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgd2ViVmll
dyk7CisgICAgZ3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpOworCisgICAgbG9vcCA9IGdfbWFp
bl9sb29wX25ldyhOVUxMLCBUUlVFKTsKKworICAgIC8vIE11bHRpcGxlIHNlbGVjdGlvbnMgbm90
IGFsbG93ZWQsIG5vIE1JTUUgZmlsdGVyaW5nLgorICAgIGd1bG9uZyBoYW5kbGVyID0gZ19zaWdu
YWxfY29ubmVjdCh3ZWJWaWV3LCAicnVuLWZpbGUtY2hvb3NlciIsIEdfQ0FMTEJBQ0socnVuRmls
ZUNob29zZXJDYk5vTXVsdGlzZWxOb01pbWUpLCBOVUxMKTsKKyAgICBnY2hhciogaHRtbEZvcm1h
dCA9IGdfc3RyZHVwX3ByaW50ZihodG1sRm9ybWF0QmFzZSwgIiIpOworICAgIHdlYmtpdF93ZWJf
dmlld19sb2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldyksIGh0bWxGb3JtYXQsIE5V
TEwsIE5VTEwsIE5VTEwpOworICAgIGdfZnJlZShodG1sRm9ybWF0KTsKKworICAgIGdfdGltZW91
dF9hZGQoMTAwLCAoR1NvdXJjZUZ1bmMpIGNsaWNrTW91c2VCdXR0b25BbmRXYWl0Rm9yRmlsZUNo
b29zZXJSZXF1ZXN0LCBXRUJLSVRfV0VCX1ZJRVcod2ViVmlldykpOworICAgIGdfbWFpbl9sb29w
X3J1bihsb29wKTsKKworICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdCh3ZWJWaWV3LCBo
YW5kbGVyKTsKKworICAgIC8vIE11bHRpcGxlIHNlbGVjdGlvbnMgYWxsb3dlZCwgbm8gTUlNRSBm
aWx0ZXJpbmcsIHNvbWUgcHJlLXNlbGVjdGVkIGZpbGVzLgorICAgIGhhbmRsZXIgPSBnX3NpZ25h
bF9jb25uZWN0KHdlYlZpZXcsICJydW4tZmlsZS1jaG9vc2VyIiwgR19DQUxMQkFDSyhydW5GaWxl
Q2hvb3NlckNiTXVsdGlzZWxOb01pbWUpLCBOVUxMKTsKKyAgICBodG1sRm9ybWF0ID0gZ19zdHJk
dXBfcHJpbnRmKGh0bWxGb3JtYXRCYXNlLCAibXVsdGlwbGUiKTsKKyAgICB3ZWJraXRfd2ViX3Zp
ZXdfbG9hZF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpLCBodG1sRm9ybWF0LCBOVUxM
LCBOVUxMLCBOVUxMKTsKKyAgICBnX2ZyZWUoaHRtbEZvcm1hdCk7CisKKyAgICBnX3RpbWVvdXRf
YWRkKDEwMCwgKEdTb3VyY2VGdW5jKSBjbGlja01vdXNlQnV0dG9uQW5kV2FpdEZvckZpbGVDaG9v
c2VyUmVxdWVzdCwgV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpKTsKKyAgICBnX21haW5fbG9vcF9y
dW4obG9vcCk7CisKKyAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3Qod2ViVmlldywgaGFu
ZGxlcik7CisKKyAgICAvLyBQZXJmb3JtIGFub3RoZXIgcmVxdWVzdCB0byBjaGVjayBpZiB0aGUg
bGlzdCBvZiBmaWxlcyBzZWxlY3RlZAorICAgIC8vIGluIHRoZSBwcmV2aW91cyBzdGVwIGFwcGVh
cnMgbm93IGFzIHBhcnQgb2YgdGhlIG5ldyByZXF1ZXN0LgorICAgIGhhbmRsZXIgPSBnX3NpZ25h
bF9jb25uZWN0KHdlYlZpZXcsICJydW4tZmlsZS1jaG9vc2VyIiwgR19DQUxMQkFDSyhydW5GaWxl
Q2hvb3NlckNiU2VsZWN0aW9uUmV0YWluZWQpLCBOVUxMKTsKKyAgICBnX3RpbWVvdXRfYWRkKDEw
MCwgKEdTb3VyY2VGdW5jKSBjbGlja01vdXNlQnV0dG9uQW5kV2FpdEZvckZpbGVDaG9vc2VyUmVx
dWVzdCwgV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpKTsKKyAgICBnX21haW5fbG9vcF9ydW4obG9v
cCk7CisKKyAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3Qod2ViVmlldywgaGFuZGxlcik7
CisKKyAgICAvLyBNdWx0aXBsZSBzZWxlY3Rpb25zIG5vdCBhbGxvd2VkLCBvbmx5IGFjY2VwdCBp
bWFnZXMsIGF1ZGlvIGFuZCB2aWRlbyBmaWxlcy4KKyAgICBoYW5kbGVyID0gZ19zaWduYWxfY29u
bmVjdCh3ZWJWaWV3LCAicnVuLWZpbGUtY2hvb3NlciIsIEdfQ0FMTEJBQ0socnVuRmlsZUNob29z
ZXJDYk5vTXVsdGlzZWxBY2NlcHRUeXBlcyksIE5VTEwpOworICAgIGh0bWxGb3JtYXQgPSBnX3N0
cmR1cF9wcmludGYoaHRtbEZvcm1hdEJhc2UsICJhY2NlcHQ9J2F1ZGlvLyosdmlkZW8vKixpbWFn
ZS8qJyIpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVco
d2ViVmlldyksIGh0bWxGb3JtYXQsIE5VTEwsIE5VTEwsIE5VTEwpOworICAgIGdfZnJlZShodG1s
Rm9ybWF0KTsKKworICAgIGdfdGltZW91dF9hZGQoMTAwLCAoR1NvdXJjZUZ1bmMpIGNsaWNrTW91
c2VCdXR0b25BbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0LCBXRUJLSVRfV0VCX1ZJRVcod2Vi
VmlldykpOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIGdfc2lnbmFsX2hhbmRs
ZXJfZGlzY29ubmVjdCh3ZWJWaWV3LCBoYW5kbGVyKTsKKyAgICBndGtfd2lkZ2V0X2Rlc3Ryb3ko
d2luZG93KTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3ZpZXdfc291cmNlX21v
ZGUoKQoreworICAgIEd0a1dpZGdldCogd2ViX3ZpZXc7CisKKyAgICB3ZWJfdmlldyA9IHdlYmtp
dF93ZWJfdmlld19uZXcoKTsKKworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhXRUJL
SVRfV0VCX1ZJRVcod2ViX3ZpZXcpLCAiPGh0bWw+PGJvZHk+PC9ib2R5PjwvaHRtbD4iLCBOVUxM
LCBOVUxMLCBOVUxMKTsKKworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfZ2V0X3ZpZXdf
c291cmNlX21vZGUoV0VCS0lUX1dFQl9WSUVXKHdlYl92aWV3KSkpOworCisgICAgd2Via2l0X3dl
Yl92aWV3X3NldF92aWV3X3NvdXJjZV9tb2RlKFdFQktJVF9XRUJfVklFVyh3ZWJfdmlldyksIFRS
VUUpOworCisgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dldF92aWV3X3NvdXJjZV9tb2Rl
KFdFQktJVF9XRUJfVklFVyh3ZWJfdmlldykpKTsKKworICAgIHdlYmtpdF93ZWJfdmlld19zZXRf
dmlld19zb3VyY2VfbW9kZShXRUJLSVRfV0VCX1ZJRVcod2ViX3ZpZXcpLCBGQUxTRSk7CisKKyAg
ICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2dldF92aWV3X3NvdXJjZV9tb2RlKFdFQktJVF9X
RUJfVklFVyh3ZWJfdmlldykpKTsKKworICAgIGd0a193aWRnZXRfZGVzdHJveSh3ZWJfdmlldyk7
Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBTb3VwU2VydmVy
KiBzZXJ2ZXI7CisgICAgU291cFVSSSogc291cF91cmk7CisKKyAgICBndGtfdGVzdF9pbml0KCZh
cmdjLCAmYXJndiwgTlVMTCk7CisKKyAgICAvKiBIb3BlZnVsbHkgbWFrZSB0ZXN0IGluZGVwZW5k
ZW50IG9mIHRoZSBwYXRoIGl0J3MgY2FsbGVkIGZyb20uICovCisgICAgdGVzdHV0aWxzX3JlbGF0
aXZlX2NoZGlyKCJUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9yZXNvdXJjZXMv
dGVzdC5odG1sIiwgYXJndlswXSk7CisKKyAgICBzZXJ2ZXIgPSBzb3VwX3NlcnZlcl9uZXcoU09V
UF9TRVJWRVJfUE9SVCwgMCwgTlVMTCk7CisgICAgc291cF9zZXJ2ZXJfcnVuX2FzeW5jKHNlcnZl
cik7CisKKyAgICBzb3VwX3NlcnZlcl9hZGRfaGFuZGxlcihzZXJ2ZXIsIE5VTEwsIHNlcnZlcl9j
YWxsYmFjaywgTlVMTCwgTlVMTCk7CisKKyAgICBzb3VwX3VyaSA9IHNvdXBfdXJpX25ldygiaHR0
cDovLzEyNy4wLjAuMS8iKTsKKyAgICBzb3VwX3VyaV9zZXRfcG9ydChzb3VwX3VyaSwgc291cF9z
ZXJ2ZXJfZ2V0X3BvcnQoc2VydmVyKSk7CisKKyAgICBiYXNlX3VyaSA9IHNvdXBfdXJpX3RvX3N0
cmluZyhzb3VwX3VyaSwgRkFMU0UpOworICAgIHNvdXBfdXJpX2ZyZWUoc291cF91cmkpOworCisg
ICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBnX3Rl
c3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vidmlldy9pY29uLXVyaSIsIHRlc3Rfd2Via2l0X3dlYl92
aWV3X2ljb25fdXJpKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vidmlldy9hZGp1
c3RtZW50cyIsIHRlc3Rfd2Via2l0X3dlYl92aWV3X2FkanVzdG1lbnRzKTsKKyAgICBnX3Rlc3Rf
YWRkX2Z1bmMoIi93ZWJraXQvd2Vidmlldy9kZXN0cm95IiwgdGVzdF93ZWJraXRfd2ViX3ZpZXdf
ZGVzdHJveSk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnZpZXcvZ3JhYl9mb2N1
cyIsIHRlc3Rfd2Via2l0X3dlYl92aWV3X2dyYWJfZm9jdXMpOworICAgIGdfdGVzdF9hZGRfZnVu
YygiL3dlYmtpdC93ZWJ2aWV3L3dpbmRvdy1mZWF0dXJlcyIsIHRlc3Rfd2Via2l0X3dlYl92aWV3
X3dpbmRvd19mZWF0dXJlcyk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnZpZXcv
d2Vidmlldy1pbi1vZmZzY3JlZW4td2luZG93LWRvZXMtbm90LWNyYXNoIiwgdGVzdF93ZWJraXRf
d2ViX3ZpZXdfaW5fb2Zmc2NyZWVuX3dpbmRvd19kb2VzX25vdF9jcmFzaCk7CisgICAgZ190ZXN0
X2FkZF9mdW5jKCIvd2Via2l0L3dlYnZpZXcvd2Vidmlldy1kb2VzLW5vdC1zdGVhbC1mb2N1cyIs
IHRlc3Rfd2Via2l0X3dlYl92aWV3X2RvZXNfbm90X3N0ZWFsX2ZvY3VzKTsKKyAgICBnX3Rlc3Rf
YWRkX2RhdGFfZnVuYygiL3dlYmtpdC93ZWJ2aWV3L2Z1bGxzY3JlZW4iLCBHSU5UX1RPX1BPSU5U
RVIoRkFMU0UpLCB0ZXN0X3dlYmtpdF93ZWJfdmlld19mdWxsc2NyZWVuKTsKKyAgICBnX3Rlc3Rf
YWRkX2RhdGFfZnVuYygiL3dlYmtpdC93ZWJ2aWV3L2Z1bGxzY3JlZW4tYmxvY2tlZCIsIEdJTlRf
VE9fUE9JTlRFUihUUlVFKSwgdGVzdF93ZWJraXRfd2ViX3ZpZXdfZnVsbHNjcmVlbik7CisgICAg
Z190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnZpZXcvZmlsZS1jaG9vc2VyIiwgdGVzdF93ZWJr
aXRfd2ViX3ZpZXdfZmlsZV9jaG9vc2VyKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQv
d2Vidmlldy9zb3VyY2UtbW9kZSIsIHRlc3Rfd2Via2l0X3dlYl92aWV3X3NvdXJjZV9tb2RlKTsK
KworICAgIHJldHVybiBnX3Rlc3RfcnVuICgpOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdpbmRvdy5jIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdpbmRvdy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjVlZGE0N2IKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdEd0ay90ZXN0d2luZG93LmMKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgQ29sbGFib3JhIEx0ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+CisKK3N0YXRpYyB2
b2lkIG5vdGlmeV9sb2FkX3N0YXR1c19jYihXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgR1BhcmFt
U3BlYyogcHNwZWMsIGdwb2ludGVyIGRhdGEpCit7CisgICAgaWYgKHdlYmtpdF93ZWJfdmlld19n
ZXRfbG9hZF9zdGF0dXMod2ViX3ZpZXcpID09IFdFQktJVF9MT0FEX0ZJTklTSEVEKSB7CisgICAg
ICAgIEdNYWluTG9vcCogbG9vcCA9IChHTWFpbkxvb3AqKWRhdGE7CisKKyAgICAgICAgZ19tYWlu
X2xvb3BfcXVpdChsb29wKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dp
bmRvd19zY3JvbGxiYXJfcG9saWN5KHZvaWQpCit7CisgICAgR01haW5Mb29wKiBsb29wOworICAg
IEd0a1dpZGdldCogc2Nyb2xsZWRXaW5kb3c7CisgICAgR3RrV2lkZ2V0KiB3ZWJWaWV3OworICAg
IFdlYktpdFdlYkZyYW1lKiBtYWluRnJhbWU7CisgICAgR3RrUG9saWN5VHlwZSBob3Jpem9udGFs
UG9saWN5OworICAgIEd0a1BvbGljeVR5cGUgdmVydGljYWxQb2xpY3k7CisKKyAgICBsb29wID0g
Z19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworCisgICAgc2Nyb2xsZWRXaW5kb3cgPSBndGtf
c2Nyb2xsZWRfd2luZG93X25ldyhOVUxMLCBOVUxMKTsKKyAgICBndGtfc2Nyb2xsZWRfd2luZG93
X3NldF9wb2xpY3koR1RLX1NDUk9MTEVEX1dJTkRPVyhzY3JvbGxlZFdpbmRvdyksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19QT0xJQ1lfQVVUT01BVElDLCBHVEtfUE9M
SUNZX0FVVE9NQVRJQyk7CisKKyAgICB3ZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygpOwor
ICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOworCisgICAgZ19zaWduYWxfY29ubmVjdCh3
ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsCisgICAgICAgICAgICAgICAgICAgICBHX0NB
TExCQUNLKG5vdGlmeV9sb2FkX3N0YXR1c19jYiksIGxvb3ApOworCisgICAgZ3RrX2NvbnRhaW5l
cl9hZGQoR1RLX0NPTlRBSU5FUihzY3JvbGxlZFdpbmRvdyksIHdlYlZpZXcpOworCisgICAgbWFp
bkZyYW1lID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKFdFQktJVF9XRUJfVklFVyh3
ZWJWaWV3KSk7CisKKyAgICAvKiBUZXN0IHdlIGNvcnJlY3RseSBhcHBseSBwb2xpY3kgZm9yIG5v
dCBoYXZpbmcgc2Nyb2xsYmFyczsgVGhpcworICAgICAqIGNhc2UgaXMgc3BlY2lhbCwgYmVjYXVz
ZSB3ZSB0dXJuIHRoZSBwb2xpY3kgZnJvbSBORVZFUiB0bworICAgICAqIEFVVE9NQVRJQywgc2lu
Y2Ugd2UgY2Fubm90IGVhc2lseSByZXByZXNlbnQgdGhlIHNhbWUgdGhpbmcKKyAgICAgKiB1c2lu
ZyBHdGtTY3JvbGxlZFdpbmRvdyAqLworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX2h0bWxfc3Ry
aW5nKFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiPGh0bWw+PGJvZHk+V2ViS2l0ITwvYm9keT48c2NyaXB0PmRvY3VtZW50Lmdl
dEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0uc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJzs8
L3NjcmlwdD48L2h0bWw+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
ZmlsZTovLyIpOworCisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgZ3RrX3Njcm9s
bGVkX3dpbmRvd19nZXRfcG9saWN5KEdUS19TQ1JPTExFRF9XSU5ET1coc2Nyb2xsZWRXaW5kb3cp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaG9yaXpvbnRhbFBvbGljeSwg
JnZlcnRpY2FsUG9saWN5KTsKKworICAgIGdfYXNzZXJ0KGhvcml6b250YWxQb2xpY3kgPT0gR1RL
X1BPTElDWV9BVVRPTUFUSUMpOworICAgIGdfYXNzZXJ0KHZlcnRpY2FsUG9saWN5ID09IEdUS19Q
T0xJQ1lfQVVUT01BVElDKTsKKworICAgIGdfYXNzZXJ0KEdUS19QT0xJQ1lfTkVWRVIgPT0gd2Vi
a2l0X3dlYl9mcmFtZV9nZXRfaG9yaXpvbnRhbF9zY3JvbGxiYXJfcG9saWN5KG1haW5GcmFtZSkp
OworICAgIGdfYXNzZXJ0KEdUS19QT0xJQ1lfTkVWRVIgPT0gd2Via2l0X3dlYl9mcmFtZV9nZXRf
dmVydGljYWxfc2Nyb2xsYmFyX3BvbGljeShtYWluRnJhbWUpKTsKKworICAgIC8qIFRlc3Qgd2Ug
Y29ycmVjdGx5IGFwcGx5IHBvbGljeSBmb3IgYWx3YXlzIGhhdmluZyBzY3JvbGxiYXJzICovCisg
ICAgd2Via2l0X3dlYl92aWV3X2xvYWRfaHRtbF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVXKHdlYlZp
ZXcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8aHRtbD48Ym9keT5X
ZWJLaXQhPC9ib2R5PjxzY3JpcHQ+ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHkn
KVswXS5zdHlsZS5vdmVyZmxvdyA9ICdzY3JvbGwnOzwvc2NyaXB0PjwvaHRtbD4iLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlOi8vIik7CisKKyAgICBnX21haW5f
bG9vcF9ydW4obG9vcCk7CisKKyAgICBndGtfc2Nyb2xsZWRfd2luZG93X2dldF9wb2xpY3koR1RL
X1NDUk9MTEVEX1dJTkRPVyhzY3JvbGxlZFdpbmRvdyksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZob3Jpem9udGFsUG9saWN5LCAmdmVydGljYWxQb2xpY3kpOworCisgICAg
Z19hc3NlcnQoaG9yaXpvbnRhbFBvbGljeSA9PSBHVEtfUE9MSUNZX0FMV0FZUyk7CisgICAgZ19h
c3NlcnQodmVydGljYWxQb2xpY3kgPT0gR1RLX1BPTElDWV9BTFdBWVMpOworCisgICAgZ19hc3Nl
cnQoaG9yaXpvbnRhbFBvbGljeSA9PSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9ob3Jpem9udGFsX3Nj
cm9sbGJhcl9wb2xpY3kobWFpbkZyYW1lKSk7CisgICAgZ19hc3NlcnQodmVydGljYWxQb2xpY3kg
PT0gd2Via2l0X3dlYl9mcmFtZV9nZXRfdmVydGljYWxfc2Nyb2xsYmFyX3BvbGljeShtYWluRnJh
bWUpKTsKKworICAgIC8qIFRlc3Qgd2UgY29ycmVjdGx5IGFwcGx5IHBvbGljeSBmb3IgaGF2aW5n
IHNjcm9sbGJhcnMgd2hlbiBuZWVkZWQgKi8KKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9odG1s
X3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldyksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIjxodG1sPjxib2R5PldlYktpdCE8L2JvZHk+PHNjcmlwdD5kb2N1bWVu
dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdLnN0eWxlLm92ZXJmbG93ID0gJ2F1dG8n
Ozwvc2NyaXB0PjwvaHRtbD4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJmaWxlOi8vIik7CisKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICBndGtfc2Ny
b2xsZWRfd2luZG93X2dldF9wb2xpY3koR1RLX1NDUk9MTEVEX1dJTkRPVyhzY3JvbGxlZFdpbmRv
dyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZob3Jpem9udGFsUG9saWN5
LCAmdmVydGljYWxQb2xpY3kpOworCisgICAgZ19hc3NlcnQoaG9yaXpvbnRhbFBvbGljeSA9PSBH
VEtfUE9MSUNZX0FVVE9NQVRJQyk7CisgICAgZ19hc3NlcnQodmVydGljYWxQb2xpY3kgPT0gR1RL
X1BPTElDWV9BVVRPTUFUSUMpOworCisgICAgZ19hc3NlcnQoaG9yaXpvbnRhbFBvbGljeSA9PSB3
ZWJraXRfd2ViX2ZyYW1lX2dldF9ob3Jpem9udGFsX3Njcm9sbGJhcl9wb2xpY3kobWFpbkZyYW1l
KSk7CisgICAgZ19hc3NlcnQodmVydGljYWxQb2xpY3kgPT0gd2Via2l0X3dlYl9mcmFtZV9nZXRf
dmVydGljYWxfc2Nyb2xsYmFyX3BvbGljeShtYWluRnJhbWUpKTsKKworICAgIGdfb2JqZWN0X3Vu
cmVmKHdlYlZpZXcpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7Cisg
ICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAgZ190ZXN0X2J1Z19i
YXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93
ZWJraXQvd2luZG93L3Njcm9sbGJhcl9wb2xpY3kiLCB0ZXN0X3dlYmtpdF93aW5kb3dfc2Nyb2xs
YmFyX3BvbGljeSk7CisgICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7Cit9CmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL0xvYWRUcmFja2luZ1Rlc3QuY3BwIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9Mb2FkVHJhY2tpbmdUZXN0LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjM0MjA0Ci0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9Mb2FkVHJhY2tpbmdUZXN0
LmNwcApAQCAtMCwwICsxLDIwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEg
Uy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTG9hZFRyYWNraW5nVGVzdC5oIgor
CisjaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+CisKK3N0YXRpYyB2b2lkIGxvYWRDaGFuZ2Vk
Q2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0TG9hZEV2ZW50IGxvYWRFdmVu
dCwgTG9hZFRyYWNraW5nVGVzdCogdGVzdCkKK3sKKyAgICBzd2l0Y2ggKGxvYWRFdmVudCkgewor
ICAgIGNhc2UgV0VCS0lUX0xPQURfU1RBUlRFRDoKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X3dl
Yl92aWV3X2lzX2xvYWRpbmcod2ViVmlldykpOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIodGVz
dC0+bV9hY3RpdmVVUkkuZGF0YSgpLCA9PSwgd2Via2l0X3dlYl92aWV3X2dldF91cmkod2ViVmll
dykpOworICAgICAgICB0ZXN0LT5wcm92aXNpb25hbExvYWRTdGFydGVkKCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgV0VCS0lUX0xPQURfUkVESVJFQ1RFRDoKKyAgICAgICAgZ19hc3NlcnQo
d2Via2l0X3dlYl92aWV3X2lzX2xvYWRpbmcod2ViVmlldykpOworICAgICAgICB0ZXN0LT5tX2Fj
dGl2ZVVSSSA9IHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKHdlYlZpZXcpOworICAgICAgICBpZiAo
IXRlc3QtPm1fcmVkaXJlY3RVUkkuaXNOdWxsKCkpCisgICAgICAgICAgICBnX2Fzc2VydF9jbXBz
dHIodGVzdC0+bV9yZWRpcmVjdFVSSS5kYXRhKCksID09LCB0ZXN0LT5tX2FjdGl2ZVVSSS5kYXRh
KCkpOworICAgICAgICB0ZXN0LT5wcm92aXNpb25hbExvYWRSZWNlaXZlZFNlcnZlclJlZGlyZWN0
KCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0xPQURfQ09NTUlUVEVEOiB7Cisg
ICAgICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19pc19sb2FkaW5nKHdlYlZpZXcpKTsKKyAg
ICAgICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPm1fYWN0aXZlVVJJLmRhdGEoKSwgPT0sIHdlYmtp
dF93ZWJfdmlld19nZXRfdXJpKHdlYlZpZXcpKTsKKworICAgICAgICAvLyBDaGVjayB0aGF0IG9u
IGNvbW1pdHRlZCB3ZSBhbHdheXMgaGF2ZSBhIG1haW4gcmVzb3VyY2Ugd2l0aCBhIHJlc3BvbnNl
LgorICAgICAgICBXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UgPSB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X21haW5fcmVzb3VyY2Uod2ViVmlldyk7CisgICAgICAgIGdfYXNzZXJ0KHJlc291cmNlKTsK
KyAgICAgICAgZ19hc3NlcnQod2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfcmVzcG9uc2UocmVzb3Vy
Y2UpKTsKKworICAgICAgICB0ZXN0LT5sb2FkQ29tbWl0dGVkKCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBjYXNlIFdFQktJVF9MT0FEX0ZJTklTSEVEOgorICAgICAgICBnX2Fzc2VydCgh
d2Via2l0X3dlYl92aWV3X2lzX2xvYWRpbmcod2ViVmlldykpOworICAgICAgICBpZiAoIXRlc3Qt
Pm1fbG9hZEZhaWxlZCkKKyAgICAgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXN0LT5tX2FjdGl2
ZVVSSS5kYXRhKCksID09LCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSh3ZWJWaWV3KSk7CisgICAg
ICAgIHRlc3QtPmxvYWRGaW5pc2hlZCgpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgIH0KK30KKworc3RhdGljIHZvaWQg
bG9hZEZhaWxlZENhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdExvYWRFdmVu
dCBsb2FkRXZlbnQsIGNvbnN0IGNoYXIqIGZhaWxpbmdVUkksIEdFcnJvciogZXJyb3IsIExvYWRU
cmFja2luZ1Rlc3QqIHRlc3QpCit7CisgICAgdGVzdC0+bV9sb2FkRmFpbGVkID0gdHJ1ZTsKKyAg
ICB0ZXN0LT5tX2Vycm9yLnNldChnX2Vycm9yX2NvcHkoZXJyb3IpKTsKKworICAgIHN3aXRjaCAo
bG9hZEV2ZW50KSB7CisgICAgY2FzZSBXRUJLSVRfTE9BRF9TVEFSVEVEOgorICAgICAgICBnX2Fz
c2VydCghd2Via2l0X3dlYl92aWV3X2lzX2xvYWRpbmcod2ViVmlldykpOworICAgICAgICBnX2Fz
c2VydF9jbXBzdHIodGVzdC0+bV9hY3RpdmVVUkkuZGF0YSgpLCA9PSwgd2Via2l0X3dlYl92aWV3
X2dldF91cmkod2ViVmlldykpOworICAgICAgICBnX2Fzc2VydChlcnJvcik7CisgICAgICAgIHRl
c3QtPnByb3Zpc2lvbmFsTG9hZEZhaWxlZChmYWlsaW5nVVJJLCBlcnJvcik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgV0VCS0lUX0xPQURfQ09NTUlUVEVEOgorICAgICAgICBnX2Fzc2VydCgh
d2Via2l0X3dlYl92aWV3X2lzX2xvYWRpbmcod2ViVmlldykpOworICAgICAgICBnX2Fzc2VydF9j
bXBzdHIodGVzdC0+bV9hY3RpdmVVUkkuZGF0YSgpLCA9PSwgd2Via2l0X3dlYl92aWV3X2dldF91
cmkod2ViVmlldykpOworICAgICAgICBnX2Fzc2VydChlcnJvcik7CisgICAgICAgIHRlc3QtPmxv
YWRGYWlsZWQoZmFpbGluZ1VSSSwgZXJyb3IpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgIH0KK30KKworc3RhdGljIHZv
aWQgZXN0aW1hdGVkUHJvZ3Jlc3NDaGFuZ2VkQ2FsbGJhY2soR09iamVjdCosIEdQYXJhbVNwZWMq
LCBMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0KQoreworICAgIHRlc3QtPmVzdGltYXRlZFByb2dyZXNz
Q2hhbmdlZCgpOworfQorCitMb2FkVHJhY2tpbmdUZXN0OjpMb2FkVHJhY2tpbmdUZXN0KCkKKyAg
ICA6IG1fcnVuTG9hZFVudGlsQ29tcGxldGlvbihmYWxzZSkKKyAgICAsIG1fbG9hZEZhaWxlZChm
YWxzZSkKK3sKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImxvYWQtY2hhbmdlZCIs
IEdfQ0FMTEJBQ0sobG9hZENoYW5nZWRDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nv
bm5lY3QobV93ZWJWaWV3LCAibG9hZC1mYWlsZWQiLCBHX0NBTExCQUNLKGxvYWRGYWlsZWRDYWxs
YmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAibm90aWZ5Ojpl
c3RpbWF0ZWQtbG9hZC1wcm9ncmVzcyIsIEdfQ0FMTEJBQ0soZXN0aW1hdGVkUHJvZ3Jlc3NDaGFu
Z2VkQ2FsbGJhY2spLCB0aGlzKTsKKworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfZ2V0
X3VyaShtX3dlYlZpZXcpKTsKK30KKworTG9hZFRyYWNraW5nVGVzdDo6fkxvYWRUcmFja2luZ1Rl
c3QoKQoreworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3dlYlZp
ZXcsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOworfQorCit2b2lkIExv
YWRUcmFja2luZ1Rlc3Q6OndhaXRVbnRpbExvYWRGaW5pc2hlZCgpCit7CisgICAgbV9lc3RpbWF0
ZWRQcm9ncmVzcyA9IDA7CisgICAgbV9ydW5Mb2FkVW50aWxDb21wbGV0aW9uID0gdHJ1ZTsKKyAg
ICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Cit9CisKK3ZvaWQgTG9hZFRyYWNraW5nVGVz
dDo6cHJvdmlzaW9uYWxMb2FkU3RhcnRlZCgpCit7CisgICAgbV9sb2FkRXZlbnRzLmFwcGVuZChQ
cm92aXNpb25hbExvYWRTdGFydGVkKTsKK30KKwordm9pZCBMb2FkVHJhY2tpbmdUZXN0Ojpwcm92
aXNpb25hbExvYWRSZWNlaXZlZFNlcnZlclJlZGlyZWN0KCkKK3sKKyAgICBtX2xvYWRFdmVudHMu
YXBwZW5kKFByb3Zpc2lvbmFsTG9hZFJlY2VpdmVkU2VydmVyUmVkaXJlY3QpOworfQorCit2b2lk
IExvYWRUcmFja2luZ1Rlc3Q6OnByb3Zpc2lvbmFsTG9hZEZhaWxlZChjb25zdCBnY2hhciogZmFp
bGluZ1VSSSwgR0Vycm9yKiBlcnJvcikKK3sKKyAgICBtX2xvYWRFdmVudHMuYXBwZW5kKFByb3Zp
c2lvbmFsTG9hZEZhaWxlZCk7Cit9CisKK3ZvaWQgTG9hZFRyYWNraW5nVGVzdDo6bG9hZENvbW1p
dHRlZCgpCit7CisgICAgbV9sb2FkRXZlbnRzLmFwcGVuZChMb2FkQ29tbWl0dGVkKTsKK30KKwor
dm9pZCBMb2FkVHJhY2tpbmdUZXN0Ojpsb2FkRmluaXNoZWQoKQoreworICAgIG1fbG9hZEV2ZW50
cy5hcHBlbmQoTG9hZEZpbmlzaGVkKTsKKyAgICBpZiAobV9ydW5Mb2FkVW50aWxDb21wbGV0aW9u
KQorICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3ApOworfQorCit2b2lkIExvYWRU
cmFja2luZ1Rlc3Q6OmxvYWRGYWlsZWQoY29uc3QgZ2NoYXIqIGZhaWxpbmdVUkksIEdFcnJvciog
ZXJyb3IpCit7CisgICAgbV9sb2FkRXZlbnRzLmFwcGVuZChMb2FkRmFpbGVkKTsKK30KKwordm9p
ZCBMb2FkVHJhY2tpbmdUZXN0Ojplc3RpbWF0ZWRQcm9ncmVzc0NoYW5nZWQoKQoreworICAgIGRv
dWJsZSBwcm9ncmVzcyA9IHdlYmtpdF93ZWJfdmlld19nZXRfZXN0aW1hdGVkX2xvYWRfcHJvZ3Jl
c3MobV93ZWJWaWV3KTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdChtX2VzdGltYXRlZFByb2dyZXNz
LCA8LCBwcm9ncmVzcyk7CisgICAgbV9lc3RpbWF0ZWRQcm9ncmVzcyA9IHByb2dyZXNzOworfQor
Cit2b2lkIExvYWRUcmFja2luZ1Rlc3Q6OmxvYWRVUkkoY29uc3QgY2hhciogdXJpKQoreworICAg
IG1fbG9hZEV2ZW50cy5jbGVhcigpOworICAgIG1fZXN0aW1hdGVkUHJvZ3Jlc3MgPSAwOworICAg
IG1fZXJyb3IuY2xlYXIoKTsKKyAgICBXZWJWaWV3VGVzdDo6bG9hZFVSSSh1cmkpOworfQorCit2
b2lkIExvYWRUcmFja2luZ1Rlc3Q6OmxvYWRIdG1sKGNvbnN0IGNoYXIqIGh0bWwsIGNvbnN0IGNo
YXIqIGJhc2VVUkkpCit7CisgICAgbV9sb2FkRXZlbnRzLmNsZWFyKCk7CisgICAgbV9lc3RpbWF0
ZWRQcm9ncmVzcyA9IDA7CisgICAgbV9lcnJvci5jbGVhcigpOworICAgIFdlYlZpZXdUZXN0Ojps
b2FkSHRtbChodG1sLCBiYXNlVVJJKTsKK30KKwordm9pZCBMb2FkVHJhY2tpbmdUZXN0Ojpsb2Fk
UGxhaW5UZXh0KGNvbnN0IGNoYXIqIHBsYWluVGV4dCkKK3sKKyAgICBtX2xvYWRFdmVudHMuY2xl
YXIoKTsKKyAgICBtX2VzdGltYXRlZFByb2dyZXNzID0gMDsKKyAgICBtX2Vycm9yLmNsZWFyKCk7
CisgICAgV2ViVmlld1Rlc3Q6OmxvYWRQbGFpblRleHQocGxhaW5UZXh0KTsKK30KKwordm9pZCBM
b2FkVHJhY2tpbmdUZXN0Ojpsb2FkUmVxdWVzdChXZWJLaXRVUklSZXF1ZXN0KiByZXF1ZXN0KQor
eworICAgIG1fbG9hZEV2ZW50cy5jbGVhcigpOworICAgIG1fZXN0aW1hdGVkUHJvZ3Jlc3MgPSAw
OworICAgIG1fZXJyb3IuY2xlYXIoKTsKKyAgICBXZWJWaWV3VGVzdDo6bG9hZFJlcXVlc3QocmVx
dWVzdCk7Cit9CisKK3ZvaWQgTG9hZFRyYWNraW5nVGVzdDo6cmVsb2FkKCkKK3sKKyAgICBtX2xv
YWRFdmVudHMuY2xlYXIoKTsKKyAgICBtX2VzdGltYXRlZFByb2dyZXNzID0gMDsKKyAgICBtX2Vy
cm9yLmNsZWFyKCk7CisgICAgd2Via2l0X3dlYl92aWV3X3JlbG9hZChtX3dlYlZpZXcpOworfQor
Cit2b2lkIExvYWRUcmFja2luZ1Rlc3Q6OmdvQmFjaygpCit7CisgICAgbV9sb2FkRXZlbnRzLmNs
ZWFyKCk7CisgICAgbV9lc3RpbWF0ZWRQcm9ncmVzcyA9IDA7CisgICAgbV9lcnJvci5jbGVhcigp
OworICAgIFdlYlZpZXdUZXN0Ojpnb0JhY2soKTsKK30KKwordm9pZCBMb2FkVHJhY2tpbmdUZXN0
Ojpnb0ZvcndhcmQoKQoreworICAgIG1fbG9hZEV2ZW50cy5jbGVhcigpOworICAgIG1fZXN0aW1h
dGVkUHJvZ3Jlc3MgPSAwOworICAgIG1fZXJyb3IuY2xlYXIoKTsKKyAgICBXZWJWaWV3VGVzdDo6
Z29Gb3J3YXJkKCk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJL
aXQyR3RrL0xvYWRUcmFja2luZ1Rlc3QuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1dlYktp
dDJHdGsvTG9hZFRyYWNraW5nVGVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmEzY2Y3ODQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9X
ZWJLaXQyR3RrL0xvYWRUcmFja2luZ1Rlc3QuaApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgTG9hZFRyYWNraW5nVGVzdF9oCisj
ZGVmaW5lIExvYWRUcmFja2luZ1Rlc3RfaAorCisjaW5jbHVkZSAiVGVzdE1haW4uaCIKKyNpbmNs
dWRlICJXZWJWaWV3VGVzdC5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworY2xhc3MgTG9h
ZFRyYWNraW5nVGVzdCA6IHB1YmxpYyBXZWJWaWV3VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9H
TElCX1RFU1RfRklYVFVSRShMb2FkVHJhY2tpbmdUZXN0KTsKKyAgICBMb2FkVHJhY2tpbmdUZXN0
KCk7CisgICAgdmlydHVhbCB+TG9hZFRyYWNraW5nVGVzdCgpOworICAgIHZvaWQgd2FpdFVudGls
TG9hZEZpbmlzaGVkKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcHJvdmlzaW9uYWxMb2FkU3RhcnRl
ZCgpOworICAgIHZpcnR1YWwgdm9pZCBwcm92aXNpb25hbExvYWRSZWNlaXZlZFNlcnZlclJlZGly
ZWN0KCk7CisgICAgdmlydHVhbCB2b2lkIHByb3Zpc2lvbmFsTG9hZEZhaWxlZChjb25zdCBnY2hh
ciogZmFpbGluZ1VSSSwgR0Vycm9yKik7CisgICAgdmlydHVhbCB2b2lkIGxvYWRDb21taXR0ZWQo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZEZpbmlzaGVkKCk7CisgICAgdmlydHVhbCB2b2lkIGxv
YWRGYWlsZWQoY29uc3QgY2hhciogZmFpbGluZ1VSSSwgR0Vycm9yKik7CisgICAgdmlydHVhbCB2
b2lkIGVzdGltYXRlZFByb2dyZXNzQ2hhbmdlZCgpOworCisgICAgdm9pZCBsb2FkVVJJKGNvbnN0
IGNoYXIqIHVyaSk7CisgICAgdm9pZCBsb2FkSHRtbChjb25zdCBjaGFyKiBodG1sLCBjb25zdCBj
aGFyKiBiYXNlVVJJKTsKKyAgICB2b2lkIGxvYWRQbGFpblRleHQoY29uc3QgY2hhciogcGxhaW5U
ZXh0KTsKKyAgICB2b2lkIGxvYWRSZXF1ZXN0KFdlYktpdFVSSVJlcXVlc3QqKTsKKyAgICB2b2lk
IHJlbG9hZCgpOworICAgIHZvaWQgZ29CYWNrKCk7CisgICAgdm9pZCBnb0ZvcndhcmQoKTsKKwor
ICAgIHZvaWQgc2V0UmVkaXJlY3RVUkkoY29uc3QgY2hhciogdXJpKSB7IG1fcmVkaXJlY3RVUkkg
PSB1cmk7IH0KKworICAgIGVudW0gTG9hZEV2ZW50cyB7CisgICAgICAgIFByb3Zpc2lvbmFsTG9h
ZFN0YXJ0ZWQsCisgICAgICAgIFByb3Zpc2lvbmFsTG9hZFJlY2VpdmVkU2VydmVyUmVkaXJlY3Qs
CisgICAgICAgIFByb3Zpc2lvbmFsTG9hZEZhaWxlZCwKKyAgICAgICAgTG9hZENvbW1pdHRlZCwK
KyAgICAgICAgTG9hZEZpbmlzaGVkLAorICAgICAgICBMb2FkRmFpbGVkCisgICAgfTsKKyAgICBi
b29sIG1fcnVuTG9hZFVudGlsQ29tcGxldGlvbjsKKyAgICBib29sIG1fbG9hZEZhaWxlZDsKKyAg
ICBHT3duUHRyPEdFcnJvcj4gbV9lcnJvcjsKKyAgICBWZWN0b3I8TG9hZEV2ZW50cz4gbV9sb2Fk
RXZlbnRzOworICAgIGZsb2F0IG1fZXN0aW1hdGVkUHJvZ3Jlc3M7CisgICAgQ1N0cmluZyBtX3Jl
ZGlyZWN0VVJJOworfTsKKworI2VuZGlmIC8vIExvYWRUcmFja2luZ1Rlc3RfaApkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9UZXN0TWFpbi5jcHAgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1Rlc3RNYWluLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjFmZmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9UZXN0TWFpbi5jcHAKQEAgLTAsMCArMSw3OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiVGVzdE1haW4uaCIKKworI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Cisj
aW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgorI2luY2x1
ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKwordm9pZCBiZWZvcmVBbGwoKTsKK3ZvaWQgYWZ0
ZXJBbGwoKTsKKworc3RhdGljIHZvaWQgcmVnaXN0ZXJHUmVzb3VyY2Uodm9pZCkKK3sKKyAgICBH
T3duUHRyPGNoYXI+IHJlc291cmNlc1BhdGgoZ19idWlsZF9maWxlbmFtZShXRUJLSVRfRVhFQ19Q
QVRILCAiVGVzdFdlYktpdEFQSSIsICJXZWJLaXQyR3RrIiwgInJlc291cmNlcyIsICJ3ZWJraXQy
Z3RrLXRlc3RzLXJlc291cmNlcy5ncmVzb3VyY2UiLCBOVUxMKSk7CisgICAgR1Jlc291cmNlKiBy
ZXNvdXJjZSA9IGdfcmVzb3VyY2VfbG9hZChyZXNvdXJjZXNQYXRoLmdldCgpLCAwKTsKKyAgICBn
X2Fzc2VydChyZXNvdXJjZSk7CisKKyAgICBnX3Jlc291cmNlc19yZWdpc3RlcihyZXNvdXJjZSk7
CisgICAgZ19yZXNvdXJjZV91bnJlZihyZXNvdXJjZSk7Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92
ZU5vbkVtcHR5RGlyZWN0b3J5KGNvbnN0IGNoYXIqIGRpcmVjdG9yeVBhdGgpCit7CisgICAgR0Rp
ciogZGlyZWN0b3J5ID0gZ19kaXJfb3BlbihkaXJlY3RvcnlQYXRoLCAwLCAwKTsKKyAgICBnX2Fz
c2VydChkaXJlY3RvcnkpOworICAgIGNvbnN0IGNoYXIqIGZpbGVOYW1lOworICAgIHdoaWxlICgo
ZmlsZU5hbWUgPSBnX2Rpcl9yZWFkX25hbWUoZGlyZWN0b3J5KSkpIHsKKyAgICAgICAgR093blB0
cjxjaGFyPiBmaWxlUGF0aChnX2J1aWxkX2ZpbGVuYW1lKGRpcmVjdG9yeVBhdGgsIGZpbGVOYW1l
LCBOVUxMKSk7CisgICAgICAgIGdfdW5saW5rKGZpbGVQYXRoLmdldCgpKTsKKyAgICB9CisgICAg
Z19kaXJfY2xvc2UoZGlyZWN0b3J5KTsKKyAgICBnX3JtZGlyKGRpcmVjdG9yeVBhdGgpOworfQor
CitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgZ191bnNldGVudigiREJV
U19TRVNTSU9OX0JVU19BRERSRVNTIik7CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3Ys
IDApOworICAgIGdfc2V0ZW52KCJXRUJLSVRfRVhFQ19QQVRIIiwgV0VCS0lUX0VYRUNfUEFUSCwg
RkFMU0UpOworICAgIGdfc2V0ZW52KCJXRUJLSVRfSU5KRUNURURfQlVORExFX1BBVEgiLCBXRUJL
SVRfSU5KRUNURURfQlVORExFX1BBVEgsIEZBTFNFKTsKKyAgICBnX3NldGVudigiTENfQUxMIiwg
IkMiLCBUUlVFKTsKKyAgICBnX3NldGVudigiR0lPX1VTRV9WRlMiLCAibG9jYWwiLCBUUlVFKTsK
KyAgICBnX3NldGVudigiR1NFVFRJTkdTX0JBQ0tFTkQiLCAibWVtb3J5IiwgVFJVRSk7CisgICAg
Z190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKKworICAgIHJlZ2lz
dGVyR1Jlc291cmNlKCk7CisKKyAgICBHT3duUHRyPGNoYXI+IGRpc2tDYWNoZVRlbXBEaXJlY3Rv
cnkoZ19kaXJfbWFrZV90bXAoIldlYktpdDJUZXN0c0Rpc2tDYWNoZS1YWFhYWFgiLCAwKSk7Cisg
ICAgZ19hc3NlcnQoZGlza0NhY2hlVGVtcERpcmVjdG9yeS5nZXQoKSk7CisgICAgd2Via2l0X3dl
Yl9jb250ZXh0X3NldF9kaXNrX2NhY2hlX2RpcmVjdG9yeSh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0
X2RlZmF1bHQoKSwgZGlza0NhY2hlVGVtcERpcmVjdG9yeS5nZXQoKSk7CisKKyAgICBiZWZvcmVB
bGwoKTsKKyAgICBpbnQgcmV0dXJuVmFsdWUgPSBnX3Rlc3RfcnVuKCk7CisgICAgYWZ0ZXJBbGwo
KTsKKworICAgIHJlbW92ZU5vbkVtcHR5RGlyZWN0b3J5KGRpc2tDYWNoZVRlbXBEaXJlY3Rvcnku
Z2V0KCkpOworCisgICAgcmV0dXJuIHJldHVyblZhbHVlOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9UZXN0TWFpbi5oIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9ndGsvV2ViS2l0Mkd0ay9UZXN0TWFpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjNhM2E0ODQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L2d0ay9XZWJLaXQyR3RrL1Rlc3RNYWluLmgKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBUZXN0TWFpbl9oCisjZGVmaW5lIFRl
c3RNYWluX2gKKworI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4K
KyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNkZWZpbmUgTUFLRV9HTElCX1RF
U1RfRklYVFVSRShDbGFzc05hbWUpIFwKKyAgICBzdGF0aWMgdm9pZCBzZXRVcChDbGFzc05hbWUq
IGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkgXAorICAgIHsgXAorICAgICAgICBuZXcgKGZp
eHR1cmUpIENsYXNzTmFtZTsgXAorICAgIH0gXAorICAgIHN0YXRpYyB2b2lkIHRlYXJEb3duKENs
YXNzTmFtZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKSBcCisgICAgeyBcCisgICAgICAg
IGZpeHR1cmUtPn5DbGFzc05hbWUoKTsgXAorICAgIH0gXAorICAgIHN0YXRpYyB2b2lkIGFkZChj
b25zdCBjaGFyKiBzdWl0ZU5hbWUsIGNvbnN0IGNoYXIqIHRlc3ROYW1lLCB2b2lkICgqdGVzdEZ1
bmMpKENsYXNzTmFtZSosIGNvbnN0IHZvaWQqKSkgXAorICAgIHsgXAorICAgICAgICBHT3duUHRy
PGdjaGFyPiB0ZXN0UGF0aChnX3N0cmR1cF9wcmludGYoIi93ZWJraXQyLyVzLyVzIiwgc3VpdGVO
YW1lLCB0ZXN0TmFtZSkpOyBcCisgICAgICAgIGdfdGVzdF9hZGQodGVzdFBhdGguZ2V0KCksIENs
YXNzTmFtZSwgMCwgQ2xhc3NOYW1lOjpzZXRVcCwgdGVzdEZ1bmMsIENsYXNzTmFtZTo6dGVhckRv
d24pOyBcCisgICAgfQorCisjZGVmaW5lIEFTU0VSVF9DTVBfQ1NUUklORyhzMSwgY21wLCBzMikg
XAorICAgIGRvIHsgQ1N0cmluZyBfX3MxID0gKHMxKTsgQ1N0cmluZyBfX3MyID0gKHMyKTsgXAor
ICAgICAgICBpZiAoZ19zdHJjbXAwKF9fczEuZGF0YSgpLCBfX3MyLmRhdGEoKSkgY21wIDApIDsg
ZWxzZSBcCisgICAgICAgICAgICBnX2Fzc2VydGlvbl9tZXNzYWdlX2NtcHN0cihHX0xPR19ET01B
SU4sIF9fRklMRV9fLCBfX0xJTkVfXywgR19TVFJGVU5DLCBcCisgICAgICAgICAgICAgICAgI3Mx
ICIgIiAjY21wICIgIiAjczIsIF9fczEuZGF0YSgpLCAjY21wLCBfX3MyLmRhdGEoKSk7IH0gd2hp
bGUgKDApCisKK2NsYXNzIFRlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRV
UkUoVGVzdCk7CisKKyAgICB+VGVzdCgpCisgICAgeworICAgICAgICBpZiAobV93YXRjaGVkT2Jq
ZWN0cy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgZ19wcmludCgi
TGVha2VkIG9iamVjdHM6Iik7CisgICAgICAgIEhhc2hTZXQ8R09iamVjdCo+Ojpjb25zdF9pdGVy
YXRvciBlbmQgPSBtX3dhdGNoZWRPYmplY3RzLmVuZCgpOworICAgICAgICBmb3IgKEhhc2hTZXQ8
R09iamVjdCo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fd2F0Y2hlZE9iamVjdHMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgZ19wcmludCgiICVzKCVwKSIsIGdfdHlwZV9u
YW1lX2Zyb21faW5zdGFuY2UocmVpbnRlcnByZXRfY2FzdDxHVHlwZUluc3RhbmNlKj4oKml0KSks
ICppdCk7CisgICAgICAgIGdfcHJpbnQoIlxuIik7CisKKyAgICAgICAgZ19hc3NlcnQobV93YXRj
aGVkT2JqZWN0cy5pc0VtcHR5KCkpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIG9iamVjdEZp
bmFsaXplZChUZXN0KiB0ZXN0LCBHT2JqZWN0KiBmaW5hbGl6ZWRPYmplY3QpCisgICAgeworICAg
ICAgICB0ZXN0LT5tX3dhdGNoZWRPYmplY3RzLnJlbW92ZShmaW5hbGl6ZWRPYmplY3QpOworICAg
IH0KKworICAgIHZvaWQgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHT2Jq
ZWN0KiBvYmplY3QpCisgICAgeworICAgICAgICBtX3dhdGNoZWRPYmplY3RzLmFkZChvYmplY3Qp
OworICAgICAgICBnX29iamVjdF93ZWFrX3JlZihvYmplY3QsIHJlaW50ZXJwcmV0X2Nhc3Q8R1dl
YWtOb3RpZnk+KG9iamVjdEZpbmFsaXplZCksIHRoaXMpOworICAgIH0KKworICAgIHN0YXRpYyBD
U3RyaW5nIGdldFdlYktpdDFUZXN0UmVzb3VjZXNEaXIoKQorICAgIHsKKyAgICAgICAgR093blB0
cjxjaGFyPiByZXNvdXJjZXNEaXIoZ19idWlsZF9maWxlbmFtZShXRUJLSVRfU1JDX0RJUiwgIlRv
b2xzIiwgIlRlc3RXZWJLaXRBUEkiLCAiVGVzdHMiLCAiV2ViS2l0R3RrIiwgInJlc291cmNlcyIs
IE5VTEwpKTsKKyAgICAgICAgcmV0dXJuIHJlc291cmNlc0Rpci5nZXQoKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgQ1N0cmluZyBnZXRSZXNvdXJjZXNEaXIoKQorICAgIHsKKyAgICAgICAgR093blB0
cjxjaGFyPiByZXNvdXJjZXNEaXIoZ19idWlsZF9maWxlbmFtZShXRUJLSVRfU1JDX0RJUiwgIlRv
b2xzIiwgIlRlc3RXZWJLaXRBUEkiLCAiVGVzdHMiLCAiV2ViS2l0Mkd0ayIsICJyZXNvdXJjZXMi
LCBOVUxMKSk7CisgICAgICAgIHJldHVybiByZXNvdXJjZXNEaXIuZ2V0KCk7CisgICAgfQorCisg
ICAgdm9pZCBhZGRMb2dGYXRhbEZsYWcodW5zaWduZWQgZmxhZykKKyAgICB7CisgICAgICAgIHVu
c2lnbmVkIGZhdGFsTWFzayA9IGdfbG9nX3NldF9hbHdheXNfZmF0YWwoc3RhdGljX2Nhc3Q8R0xv
Z0xldmVsRmxhZ3M+KEdfTE9HX0ZBVEFMX01BU0spKTsKKyAgICAgICAgZmF0YWxNYXNrIHw9IGZs
YWc7CisgICAgICAgIGdfbG9nX3NldF9hbHdheXNfZmF0YWwoc3RhdGljX2Nhc3Q8R0xvZ0xldmVs
RmxhZ3M+KGZhdGFsTWFzaykpOworICAgIH0KKworICAgIHZvaWQgcmVtb3ZlTG9nRmF0YWxGbGFn
KHVuc2lnbmVkIGZsYWcpCisgICAgeworICAgICAgICB1bnNpZ25lZCBmYXRhbE1hc2sgPSBnX2xv
Z19zZXRfYWx3YXlzX2ZhdGFsKHN0YXRpY19jYXN0PEdMb2dMZXZlbEZsYWdzPihHX0xPR19GQVRB
TF9NQVNLKSk7CisgICAgICAgIGZhdGFsTWFzayAmPSB+ZmxhZzsKKyAgICAgICAgZ19sb2dfc2V0
X2Fsd2F5c19mYXRhbChzdGF0aWNfY2FzdDxHTG9nTGV2ZWxGbGFncz4oZmF0YWxNYXNrKSk7Cisg
ICAgfQorCisgICAgc3RhdGljIGJvb2wgY2Fpcm9TdXJmYWNlc0VxdWFsKGNhaXJvX3N1cmZhY2Vf
dCogczEsIGNhaXJvX3N1cmZhY2VfdCogczIpCisgICAgeworICAgICAgICByZXR1cm4gKGNhaXJv
X2ltYWdlX3N1cmZhY2VfZ2V0X2Zvcm1hdChzMSkgPT0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRf
Zm9ybWF0KHMyKQorICAgICAgICAgICAgJiYgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgo
czEpID09IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHMyKQorICAgICAgICAgICAgJiYg
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHMxKSA9PSBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF9oZWlnaHQoczIpCisgICAgICAgICAgICAmJiBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9z
dHJpZGUoczEpID09IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShzMikKKyAgICAgICAg
ICAgICYmICFtZW1jbXAoY29uc3RfY2FzdDxjb25zdCB2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzMSkpKSwKKyAgICAgICAgICAgICAg
ICBjb25zdF9jYXN0PGNvbnN0IHZvaWQqPihyZWludGVycHJldF9jYXN0PHZvaWQqPihjYWlyb19p
bWFnZV9zdXJmYWNlX2dldF9kYXRhKHMyKSkpLAorICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdl
X3N1cmZhY2VfZ2V0X2hlaWdodChzMSkqY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKHMx
KSkpOworICAgIH0KKworICAgIEhhc2hTZXQ8R09iamVjdCo+IG1fd2F0Y2hlZE9iamVjdHM7Cit9
OworCisjZW5kaWYgLy8gVGVzdE1haW5faApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9ndGsvV2ViS2l0Mkd0ay9XZWJLaXRUZXN0QnVzLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
Z3RrL1dlYktpdDJHdGsvV2ViS2l0VGVzdEJ1cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uOGMyZDNmNgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvZ3RrL1dlYktpdDJHdGsvV2ViS2l0VGVzdEJ1cy5jcHAKQEAgLTAsMCArMSwxMDYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldlYktpdFRlc3RCdXMuaCIKKworI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25Q
dHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworV2ViS2l0VGVzdEJ1czo6
V2ViS2l0VGVzdEJ1cygpCisgICAgOiBtX3BpZCgtMSkKK3sKK30KKworYm9vbCBXZWJLaXRUZXN0
QnVzOjpydW4oKQoreworICAgIC8vIEZJWE1FOiBVc2UgR1Rlc3REQnVzIHdoZW4gd2UgYnVtcCBn
bGliIHRvIDIuMzQuCisgICAgR093blB0cjxjaGFyPiBkYnVzTGF1bmNoKGdfZmluZF9wcm9ncmFt
X2luX3BhdGgoImRidXMtbGF1bmNoIikpOworICAgIGlmICghZGJ1c0xhdW5jaCkgeworICAgICAg
ICBnX3dhcm5pbmcoIkVycm9yIHN0YXJ0aW5nIERCVVMgZGFlbW9uOiBkYnVzLWxhdW5jaCBub3Qg
Zm91bmQgaW4gcGF0aCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgR093
blB0cjxjaGFyPiBvdXRwdXQ7CisgICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAgIGlmICgh
Z19zcGF3bl9jb21tYW5kX2xpbmVfc3luYyhkYnVzTGF1bmNoLmdldCgpLCAmb3V0cHV0Lm91dFB0
cigpLCAwLCAwLCAmZXJyb3Iub3V0UHRyKCkpKSB7CisgICAgICAgIGdfd2FybmluZygiRXJyb3Ig
c3RhcnRpbmcgREJVUyBkYWVtb246ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgU3RyaW5nIG91dHB1dFN0cmluZyA9IFN0cmluZzo6ZnJv
bVVURjgob3V0cHV0LmdldCgpKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBsaW5lczsKKyAgICBvdXRw
dXRTdHJpbmcuc3BsaXQoVUNoYXIoJ1xuJyksIC8qIGFsbG93RW1wdHlFbnRyaWVzICovIGZhbHNl
LCBsaW5lcyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaW5lcy5zaXplKCk7ICsraSkg
eworICAgICAgICBjaGFyKioga2V5VmFsdWUgPSBnX3N0cnNwbGl0KGxpbmVzW2ldLnV0ZjgoKS5k
YXRhKCksICI9IiwgMik7CisgICAgICAgIGdfYXNzZXJ0X2NtcHVpbnQoZ19zdHJ2X2xlbmd0aChr
ZXlWYWx1ZSksID09LCAyKTsKKyAgICAgICAgaWYgKCFnX3N0cmNtcDAoa2V5VmFsdWVbMF0sICJE
QlVTX1NFU1NJT05fQlVTX0FERFJFU1MiKSkgeworICAgICAgICAgICAgbV9hZGRyZXNzID0ga2V5
VmFsdWVbMV07CisgICAgICAgICAgICBnX3NldGVudigiREJVU19TRVNTSU9OX0JVU19BRERSRVNT
Iiwga2V5VmFsdWVbMV0sIFRSVUUpOworICAgICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAoa2V5
VmFsdWVbMF0sICJEQlVTX1NFU1NJT05fQlVTX1BJRCIpKQorICAgICAgICAgICAgbV9waWQgPSBn
X2FzY2lpX3N0cnRvbGwoa2V5VmFsdWVbMV0sIDAsIDEwKTsKKyAgICAgICAgZ19zdHJmcmVldihr
ZXlWYWx1ZSk7CisgICAgfQorCisgICAgcmV0dXJuIG1fcGlkID4gMDsKK30KKworV2ViS2l0VGVz
dEJ1czo6fldlYktpdFRlc3RCdXMoKQoreworICAgIGdfdW5zZXRlbnYoIkRCVVNfU0VTU0lPTl9C
VVNfQUREUkVTUyIpOworCisgICAgaWYgKG1fcGlkICE9IC0xKQorICAgICAgICBraWxsKG1fcGlk
LCBTSUdURVJNKTsKK30KKworR0RCdXNDb25uZWN0aW9uKiBXZWJLaXRUZXN0QnVzOjpnZXRPckNy
ZWF0ZUNvbm5lY3Rpb24oKQoreworICAgIGlmIChtX2Nvbm5lY3Rpb24pCisgICAgICAgIHJldHVy
biBtX2Nvbm5lY3Rpb24uZ2V0KCk7CisKKyAgICBnX2Fzc2VydCghbV9hZGRyZXNzLmlzTnVsbCgp
KTsKKyAgICBtX2Nvbm5lY3Rpb24gPSBhZG9wdEdSZWYoZ19kYnVzX2Nvbm5lY3Rpb25fbmV3X2Zv
cl9hZGRyZXNzX3N5bmMobV9hZGRyZXNzLmRhdGEoKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8R0RC
dXNDb25uZWN0aW9uRmxhZ3M+KEdfREJVU19DT05ORUNUSU9OX0ZMQUdTX0FVVEhFTlRJQ0FUSU9O
X0NMSUVOVCB8IEdfREJVU19DT05ORUNUSU9OX0ZMQUdTX01FU1NBR0VfQlVTX0NPTk5FQ1RJT04p
LAorICAgICAgICAwLCAwLCAwKSk7CisgICAgcmV0dXJuIG1fY29ubmVjdGlvbi5nZXQoKTsKK30K
Kworc3RhdGljIHZvaWQgb25OYW1lQXBwZWFyZWQoR0RCdXNDb25uZWN0aW9uKiwgY29uc3QgY2hh
ciosIGNvbnN0IGNoYXIqLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBnX21haW5fbG9vcF9x
dWl0KHN0YXRpY19jYXN0PEdNYWluTG9vcCo+KHVzZXJEYXRhKSk7Cit9CisKK0dEQnVzUHJveHkq
IFdlYktpdFRlc3RCdXM6OmNyZWF0ZVByb3h5KGNvbnN0IGNoYXIqIHNlcnZpY2VOYW1lLCBjb25z
dCBjaGFyKiBvYmplY3RQYXRoLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBHTWFpbkxvb3Aq
IG1haW5Mb29wKQoreworICAgIHVuc2lnbmVkIHdhdGNoZXJJRCA9IGdfYnVzX3dhdGNoX25hbWVf
b25fY29ubmVjdGlvbihnZXRPckNyZWF0ZUNvbm5lY3Rpb24oKSwgc2VydmljZU5hbWUsIEdfQlVT
X05BTUVfV0FUQ0hFUl9GTEFHU19OT05FLCBvbk5hbWVBcHBlYXJlZCwgMCwgbWFpbkxvb3AsIDAp
OworICAgIGdfbWFpbl9sb29wX3J1bihtYWluTG9vcCk7CisgICAgZ19idXNfdW53YXRjaF9uYW1l
KHdhdGNoZXJJRCk7CisKKyAgICBHREJ1c1Byb3h5KiBwcm94eSA9IGdfZGJ1c19wcm94eV9uZXdf
c3luYygKKyAgICAgICAgY29ubmVjdGlvbigpLAorICAgICAgICBHX0RCVVNfUFJPWFlfRkxBR1Nf
RE9fTk9UX0FVVE9fU1RBUlQsCisgICAgICAgIDAsIC8vIEdEQnVzSW50ZXJmYWNlSW5mbworICAg
ICAgICBzZXJ2aWNlTmFtZSwKKyAgICAgICAgb2JqZWN0UGF0aCwKKyAgICAgICAgaW50ZXJmYWNl
TmFtZSwKKyAgICAgICAgMCwgLy8gR0NhbmNlbGxhYmxlCisgICAgICAgIDApOworICAgIGdfYXNz
ZXJ0KHByb3h5KTsKKyAgICByZXR1cm4gcHJveHk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYktpdFRlc3RCdXMuaCBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViS2l0VGVzdEJ1cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmI5Zjg1NmIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYktpdFRlc3RCdXMuaApAQCAtMCwwICsxLDQ0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0VGVzdEJ1
c19oCisjZGVmaW5lIFdlYktpdFRlc3RCdXNfaAorCisjaW5jbHVkZSA8Z2lvL2dpby5oPgorI2lu
Y2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisKK2NsYXNzIFdlYktpdFRlc3RCdXMgeworcHVibGljOgorICAgIFdlYktpdFRlc3RCdXMo
KTsKKyAgICB2aXJ0dWFsIH5XZWJLaXRUZXN0QnVzKCk7CisKKyAgICBib29sIHJ1bigpOworICAg
IEdEQnVzUHJveHkqIGNyZWF0ZVByb3h5KGNvbnN0IGNoYXIqIHNlcnZpY2VOYW1lLCBjb25zdCBj
aGFyKiBvYmplY3RQYXRoLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBHTWFpbkxvb3AqKTsK
KyAgICBHREJ1c0Nvbm5lY3Rpb24qIGNvbm5lY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2Nvbm5l
Y3Rpb24uZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBHREJ1c0Nvbm5lY3Rpb24qIGdldE9yQ3Jl
YXRlQ29ubmVjdGlvbigpOworCisgICAgcGlkX3QgbV9waWQ7CisgICAgQ1N0cmluZyBtX2FkZHJl
c3M7CisgICAgR1JlZlB0cjxHREJ1c0Nvbm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKK307CisKKyNl
bmRpZiAvLyBXZWJLaXRUZXN0QnVzX2gKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
Z3RrL1dlYktpdDJHdGsvV2ViS2l0VGVzdFNlcnZlci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L2d0ay9XZWJLaXQyR3RrL1dlYktpdFRlc3RTZXJ2ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjk4YjRhOWEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYktpdFRlc3RTZXJ2ZXIuY3BwCkBAIC0wLDAgKzEsNjQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKKworI2luY2x1ZGUgIlRlc3RNYWlu
LmgiCisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorCitXZWJLaXRUZXN0U2VydmVy
OjpXZWJLaXRUZXN0U2VydmVyKFNlcnZlclR5cGUgdHlwZSkKK3sKKyAgICBHT3duUHRyPGNoYXI+
IHNzbENlcnRpZmljYXRlRmlsZTsKKyAgICBHT3duUHRyPGNoYXI+IHNzbEtleUZpbGU7CisgICAg
aWYgKHR5cGUgPT0gU2VydmVySFRUUFMpIHsKKyAgICAgICAgQ1N0cmluZyByZXNvdXJjZXNEaXIg
PSBUZXN0OjpnZXRSZXNvdXJjZXNEaXIoKTsKKyAgICAgICAgc3NsQ2VydGlmaWNhdGVGaWxlLnNl
dChnX2J1aWxkX2ZpbGVuYW1lKHJlc291cmNlc0Rpci5kYXRhKCksICJ0ZXN0LWNlcnQucGVtIiwg
TlVMTCkpOworICAgICAgICBzc2xLZXlGaWxlLnNldChnX2J1aWxkX2ZpbGVuYW1lKHJlc291cmNl
c0Rpci5kYXRhKCksICJ0ZXN0LWtleS5wZW0iLCBOVUxMKSk7CisgICAgfQorCisgICAgR1JlZlB0
cjxTb3VwQWRkcmVzcz4gYWRkcmVzcyA9IGFkb3B0R1JlZihzb3VwX2FkZHJlc3NfbmV3KCIxMjcu
MC4wLjEiLCBTT1VQX0FERFJFU1NfQU5ZX1BPUlQpKTsKKyAgICBzb3VwX2FkZHJlc3NfcmVzb2x2
ZV9zeW5jKGFkZHJlc3MuZ2V0KCksIDApOworCisgICAgbV9zb3VwU2VydmVyID0gYWRvcHRHUmVm
KHNvdXBfc2VydmVyX25ldyhTT1VQX1NFUlZFUl9JTlRFUkZBQ0UsIGFkZHJlc3MuZ2V0KCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT1VQX1NFUlZFUl9T
U0xfQ0VSVF9GSUxFLCBzc2xDZXJ0aWZpY2F0ZUZpbGUuZ2V0KCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT1VQX1NFUlZFUl9TU0xfS0VZX0ZJTEUsIHNz
bEtleUZpbGUuZ2V0KCksIE5VTEwpKTsKKyAgICBtX2Jhc2VVUkkgPSB0eXBlID09IFNlcnZlckhU
VFBTID8gc291cF91cmlfbmV3KCJodHRwczovLzEyNy4wLjAuMS8iKSA6IHNvdXBfdXJpX25ldygi
aHR0cDovLzEyNy4wLjAuMS8iKTsKKyAgICBzb3VwX3VyaV9zZXRfcG9ydChtX2Jhc2VVUkksIHNv
dXBfc2VydmVyX2dldF9wb3J0KG1fc291cFNlcnZlci5nZXQoKSkpOworfQorCitXZWJLaXRUZXN0
U2VydmVyOjp+V2ViS2l0VGVzdFNlcnZlcigpCit7CisgICAgc291cF91cmlfZnJlZShtX2Jhc2VV
UkkpOworfQorCit2b2lkIFdlYktpdFRlc3RTZXJ2ZXI6OnJ1bihTb3VwU2VydmVyQ2FsbGJhY2sg
c2VydmVyQ2FsbGJhY2spCit7CisgICAgc291cF9zZXJ2ZXJfcnVuX2FzeW5jKG1fc291cFNlcnZl
ci5nZXQoKSk7CisgICAgc291cF9zZXJ2ZXJfYWRkX2hhbmRsZXIobV9zb3VwU2VydmVyLmdldCgp
LCAwLCBzZXJ2ZXJDYWxsYmFjaywgMCwgMCk7Cit9CisKK0NTdHJpbmcgV2ViS2l0VGVzdFNlcnZl
cjo6Z2V0VVJJRm9yUGF0aChjb25zdCBjaGFyKiBwYXRoKQoreworICAgIFNvdXBVUkkqIHVyaSA9
IHNvdXBfdXJpX25ld193aXRoX2Jhc2UobV9iYXNlVVJJLCBwYXRoKTsKKyAgICBHT3duUHRyPGdj
aGFyPiB1cmlTdHJpbmcoc291cF91cmlfdG9fc3RyaW5nKHVyaSwgRkFMU0UpKTsKKyAgICBzb3Vw
X3VyaV9mcmVlKHVyaSk7CisgICAgcmV0dXJuIHVyaVN0cmluZy5nZXQoKTsKK30KKwpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9XZWJLaXRUZXN0U2VydmVy
LmggYi9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYktpdFRlc3RTZXJ2ZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDYyNmY2Ci0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9XZWJLaXRUZXN0U2Vy
dmVyLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEg
Uy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaWZuZGVmIFdlYktpdFRlc3RTZXJ2ZXJfaAorI2RlZmluZSBXZWJLaXRUZXN0U2VydmVy
X2gKKworI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0
Mi5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKK2NsYXNzIFdlYktpdFRlc3RTZXJ2ZXIgeworcHVibGljOgorCisgICAg
ZW51bSBTZXJ2ZXJUeXBlIHsKKyAgICAgICAgU2VydmVySFRUUCwKKyAgICAgICAgU2VydmVySFRU
UFMKKyAgICB9OworCisgICAgV2ViS2l0VGVzdFNlcnZlcihTZXJ2ZXJUeXBlIHR5cGUgPSBTZXJ2
ZXJIVFRQKTsKKyAgICB2aXJ0dWFsIH5XZWJLaXRUZXN0U2VydmVyKCk7CisKKyAgICBTb3VwVVJJ
KiBiYXNlVVJJKCkgeyByZXR1cm4gbV9iYXNlVVJJOyB9CisKKyAgICBDU3RyaW5nIGdldFVSSUZv
clBhdGgoY29uc3QgY2hhciogcGF0aCk7CisgICAgdm9pZCBydW4oU291cFNlcnZlckNhbGxiYWNr
KTsKKworcHJpdmF0ZToKKyAgICBHUmVmUHRyPFNvdXBTZXJ2ZXI+IG1fc291cFNlcnZlcjsKKyAg
ICBTb3VwVVJJKiBtX2Jhc2VVUkk7Cit9OworCisjZW5kaWYgLy8gV2ViS2l0VGVzdFNlcnZlcl9o
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYlByb2Nl
c3NUZXN0UnVubmVyLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvV2Vi
UHJvY2Vzc1Rlc3RSdW5uZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjRhM2NkOTYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJL
aXQyR3RrL1dlYlByb2Nlc3NUZXN0UnVubmVyLmNwcApAQCAtMCwwICsxLDExNSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV2ViUHJvY2Vzc1Rlc3RSdW5uZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dP
d25QdHIuaD4KKworV2ViUHJvY2Vzc1Rlc3RSdW5uZXI6OldlYlByb2Nlc3NUZXN0UnVubmVyKCkK
KyAgICA6IG1fbWFpbkxvb3AoZ19tYWluX2xvb3BfbmV3KDAsIFRSVUUpKQorICAgICwgbV9idXMo
YWRvcHRHUmVmKGdfdGVzdF9kYnVzX25ldyhHX1RFU1RfREJVU19OT05FKSkpCit7CisgICAgLy8g
U2F2ZSB0aGUgRElTUExBWSBlbnYgdmFyIHRvIHJlc3RvcmUgaXQgYWZ0ZXIgY2FsbGluZyBnX3Rl
c3RfZGJ1c191cCgpIHRoYXQgdW5zZXRzIGl0LgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI1NjIxLgorICAgIGNvbnN0IGNoYXIqIGRpc3BsYXkg
PSBnX2dldGVudigiRElTUExBWSIpOworICAgIGdfdGVzdF9kYnVzX3VwKG1fYnVzLmdldCgpKTsK
KyAgICBnX3NldGVudigiRElTUExBWSIsIGRpc3BsYXksIEZBTFNFKTsKKyAgICBtX2Nvbm5lY3Rp
b24gPSBhZG9wdEdSZWYoZ19idXNfZ2V0X3N5bmMoR19CVVNfVFlQRV9TRVNTSU9OLCAwLCAwKSk7
Cit9CisKK1dlYlByb2Nlc3NUZXN0UnVubmVyOjp+V2ViUHJvY2Vzc1Rlc3RSdW5uZXIoKQorewor
ICAgIGdfbWFpbl9sb29wX3VucmVmKG1fbWFpbkxvb3ApOworCisgICAgLy8gZ190ZXN0X2RidXNf
ZG93biB3YWl0cyB1bnRpbCB0aGUgY29ubmVjdGlvbiBpcyBmcmVlZCwgc28gcmVsZWFzZSBvdXIg
cmVmcyBleHBsaWNpdGx5IGJlZm9yZSBjYWxsaW5nIGl0LgorICAgIG1fY29ubmVjdGlvbiA9IDA7
CisgICAgbV9wcm94eSA9IDA7CisgICAgZ190ZXN0X2RidXNfZG93bihtX2J1cy5nZXQoKSk7Cit9
CisKK3ZvaWQgV2ViUHJvY2Vzc1Rlc3RSdW5uZXI6OnByb3h5Q3JlYXRlZENhbGxiYWNrKEdPYmpl
Y3QqLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgV2ViUHJvY2Vzc1Rlc3RSdW5uZXIqIHRlc3RSdW5u
ZXIpCit7CisgICAgdGVzdFJ1bm5lci0+bV9wcm94eSA9IGFkb3B0R1JlZihnX2RidXNfcHJveHlf
bmV3X2ZpbmlzaChyZXN1bHQsIDApKTsKKyAgICBnX21haW5fbG9vcF9xdWl0KHRlc3RSdW5uZXIt
Pm1fbWFpbkxvb3ApOworfQorCitHREJ1c1Byb3h5KiBXZWJQcm9jZXNzVGVzdFJ1bm5lcjo6cHJv
eHkoKQoreworICAgIGlmIChtX3Byb3h5KQorICAgICAgICByZXR1cm4gbV9wcm94eS5nZXQoKTsK
KworICAgIGdfZGJ1c19wcm94eV9uZXcobV9jb25uZWN0aW9uLmdldCgpLCBHX0RCVVNfUFJPWFlf
RkxBR1NfRE9fTk9UX0FVVE9fU1RBUlQsIDAsCisgICAgICAgICJvcmcud2Via2l0Lmd0ay5XZWJQ
cm9jZXNzVGVzdCIsICIvb3JnL3dlYmtpdC9ndGsvV2ViUHJvY2Vzc1Rlc3QiLCAib3JnLndlYmtp
dC5ndGsuV2ViUHJvY2Vzc1Rlc3QiLAorICAgICAgICAwLCByZWludGVycHJldF9jYXN0PEdBc3lu
Y1JlYWR5Q2FsbGJhY2s+KFdlYlByb2Nlc3NUZXN0UnVubmVyOjpwcm94eUNyZWF0ZWRDYWxsYmFj
ayksIHRoaXMpOworICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICBnX2Fzc2Vy
dChtX3Byb3h5LmdldCgpKTsKKworICAgIHJldHVybiBtX3Byb3h5LmdldCgpOworfQorCit2b2lk
IFdlYlByb2Nlc3NUZXN0UnVubmVyOjpvbk5hbWVBcHBlYXJlZChHREJ1c0Nvbm5lY3Rpb24qLCBj
b25zdCBjaGFyKiwgY29uc3QgY2hhciosIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIFdlYlBy
b2Nlc3NUZXN0UnVubmVyKiB0ZXN0UnVubmVyID0gc3RhdGljX2Nhc3Q8V2ViUHJvY2Vzc1Rlc3RS
dW5uZXIqPih1c2VyRGF0YSk7CisgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0UnVubmVyLT5tX21h
aW5Mb29wKTsKK30KKwordm9pZCBXZWJQcm9jZXNzVGVzdFJ1bm5lcjo6b25OYW1lVmFuaXNoZWQo
R0RCdXNDb25uZWN0aW9uKiwgY29uc3QgY2hhciogbmFtZSwgZ3BvaW50ZXIgdXNlckRhdGEpCit7
CisgICAgX2V4aXQoMSk7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzc1Rlc3RSdW5uZXI6OnRlc3RGaW5p
c2hlZENhbGxiYWNrKEdEQnVzUHJveHkqIHByb3h5LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgV2Vi
UHJvY2Vzc1Rlc3RSdW5uZXIqIHRlc3RSdW5uZXIpCit7CisgICAgR1JlZlB0cjxHVmFyaWFudD4g
cmV0dXJuVmFsdWUgPSBhZG9wdEdSZWYoZ19kYnVzX3Byb3h5X2NhbGxfZmluaXNoKHByb3h5LCBy
ZXN1bHQsIDApKTsKKyAgICBnX2Fzc2VydChyZXR1cm5WYWx1ZS5nZXQoKSk7CisgICAgZ2Jvb2xl
YW4gdGVzdFJlc3VsdDsKKyAgICBnX3ZhcmlhbnRfZ2V0KHJldHVyblZhbHVlLmdldCgpLCAiKGIp
IiwgJnRlc3RSZXN1bHQpOworICAgIHRlc3RSdW5uZXItPmZpbmlzaFRlc3QodGVzdFJlc3VsdCk7
Cit9CisKK2Jvb2wgV2ViUHJvY2Vzc1Rlc3RSdW5uZXI6OnJ1blRlc3QoY29uc3QgY2hhciogc3Vp
dGVOYW1lLCBjb25zdCBjaGFyKiB0ZXN0TmFtZSwgR1ZhcmlhbnQqIGFyZ3MpCit7CisgICAgZ19h
c3NlcnQoZ192YXJpYW50X2lzX29mX3R5cGUoYXJncywgR19WQVJJQU5UX1RZUEVfVkFSRElDVCkp
OworCisgICAgdW5zaWduZWQgd2F0Y2hlcklEID0gZ19idXNfd2F0Y2hfbmFtZV9vbl9jb25uZWN0
aW9uKG1fY29ubmVjdGlvbi5nZXQoKSwgIm9yZy53ZWJraXQuZ3RrLldlYlByb2Nlc3NUZXN0Iiwg
R19CVVNfTkFNRV9XQVRDSEVSX0ZMQUdTX05PTkUsCisgICAgICAgIFdlYlByb2Nlc3NUZXN0UnVu
bmVyOjpvbk5hbWVBcHBlYXJlZCwgV2ViUHJvY2Vzc1Rlc3RSdW5uZXI6Om9uTmFtZVZhbmlzaGVk
LCB0aGlzLCAwKTsKKyAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisKKyAgICBtX3Rl
c3RSZXN1bHQgPSBmYWxzZTsKKyAgICBHT3duUHRyPGNoYXI+IHRlc3RQYXRoKGdfc3RyZHVwX3By
aW50ZigiJXMvJXMiLCBzdWl0ZU5hbWUsIHRlc3ROYW1lKSk7CisgICAgZ19kYnVzX3Byb3h5X2Nh
bGwoCisgICAgICAgIHByb3h5KCksCisgICAgICAgICJSdW5UZXN0IiwKKyAgICAgICAgZ192YXJp
YW50X25ldygiKHNAYXtzdn0pIiwgdGVzdFBhdGguZ2V0KCksIGFyZ3MpLAorICAgICAgICBHX0RC
VVNfQ0FMTF9GTEFHU19OT05FLAorICAgICAgICAtMSwgMCwKKyAgICAgICAgcmVpbnRlcnByZXRf
Y2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihXZWJQcm9jZXNzVGVzdFJ1bm5lcjo6dGVzdEZpbmlz
aGVkQ2FsbGJhY2spLAorICAgICAgICB0aGlzKTsKKyAgICBnX21haW5fbG9vcF9ydW4obV9tYWlu
TG9vcCk7CisgICAgZ19idXNfdW53YXRjaF9uYW1lKHdhdGNoZXJJRCk7CisKKyAgICByZXR1cm4g
bV90ZXN0UmVzdWx0OworfQorCit2b2lkIFdlYlByb2Nlc3NUZXN0UnVubmVyOjpmaW5pc2hUZXN0
KGJvb2wgcmVzdWx0KQoreworICAgIG1fdGVzdFJlc3VsdCA9IHJlc3VsdDsKKyAgICBnX21haW5f
bG9vcF9xdWl0KG1fbWFpbkxvb3ApOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9ndGsvV2ViS2l0Mkd0ay9XZWJQcm9jZXNzVGVzdFJ1bm5lci5oIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9ndGsvV2ViS2l0Mkd0ay9XZWJQcm9jZXNzVGVzdFJ1bm5lci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MGZhOTYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYlByb2Nlc3NUZXN0UnVubmVyLmgKQEAgLTAs
MCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJZ2FsaWEgUy5MLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVm
IFdlYlByb2Nlc3NUZXN0UnVubmVyX2gKKyNkZWZpbmUgV2ViUHJvY2Vzc1Rlc3RSdW5uZXJfaAor
CisjaW5jbHVkZSA8Z2lvL2dpby5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgorI2lu
Y2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKworY2xhc3MgV2ViUHJvY2Vzc1Rlc3RSdW5u
ZXIgeworcHVibGljOgorICAgIFdlYlByb2Nlc3NUZXN0UnVubmVyKCk7CisgICAgfldlYlByb2Nl
c3NUZXN0UnVubmVyKCk7CisKKyAgICBib29sIHJ1blRlc3QoY29uc3QgY2hhciogc3VpdGVOYW1l
LCBjb25zdCBjaGFyKiB0ZXN0TmFtZSwgR1ZhcmlhbnQqIGFyZ3MpOworCitwcml2YXRlOgorICAg
IHN0YXRpYyB2b2lkIHByb3h5Q3JlYXRlZENhbGxiYWNrKEdPYmplY3QqLCBHQXN5bmNSZXN1bHQq
LCBXZWJQcm9jZXNzVGVzdFJ1bm5lciopOworICAgIHN0YXRpYyB2b2lkIG9uTmFtZUFwcGVhcmVk
KEdEQnVzQ29ubmVjdGlvbiosIGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgZ3BvaW50ZXIpOwor
ICAgIHN0YXRpYyB2b2lkIG9uTmFtZVZhbmlzaGVkKEdEQnVzQ29ubmVjdGlvbiosIGNvbnN0IGNo
YXIqLCBncG9pbnRlcik7CisgICAgc3RhdGljIHZvaWQgdGVzdEZpbmlzaGVkQ2FsbGJhY2soR0RC
dXNQcm94eSosIEdBc3luY1Jlc3VsdCosIFdlYlByb2Nlc3NUZXN0UnVubmVyKik7CisKKyAgICBH
REJ1c1Byb3h5KiBwcm94eSgpOworICAgIHZvaWQgZmluaXNoVGVzdChib29sIHJlc3VsdCk7CisK
KyAgICBHTWFpbkxvb3AqIG1fbWFpbkxvb3A7CisgICAgR1JlZlB0cjxHVGVzdERCdXM+IG1fYnVz
OworICAgIEdSZWZQdHI8R0RCdXNDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247CisgICAgR1JlZlB0
cjxHREJ1c1Byb3h5PiBtX3Byb3h5OworICAgIGJvb2wgbV90ZXN0UmVzdWx0OworfTsKKworI2Vu
ZGlmIC8vIFdlYlByb2Nlc3NUZXN0UnVubmVyX2gKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViVmlld1Rlc3QuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9ndGsvV2ViS2l0Mkd0ay9XZWJWaWV3VGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZTZjODQzNAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvZ3RrL1dlYktpdDJHdGsvV2ViVmlld1Rlc3QuY3BwCkBAIC0wLDAgKzEsNDQ0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQg
KGMpIDIwMTEgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgorCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dPd25QdHJH
dGsuaD4KKworV2ViVmlld1Rlc3Q6OldlYlZpZXdUZXN0KCkKKyAgICA6IG1fd2ViVmlldyhXRUJL
SVRfV0VCX1ZJRVcoZ19vYmplY3RfcmVmX3Npbmsod2Via2l0X3dlYl92aWV3X25ldygpKSkpCisg
ICAgLCBtX21haW5Mb29wKGdfbWFpbl9sb29wX25ldygwLCBUUlVFKSkKKyAgICAsIG1fcGFyZW50
V2luZG93KDApCisgICAgLCBtX2phdmFzY3JpcHRSZXN1bHQoMCkKKyAgICAsIG1fcmVzb3VyY2VE
YXRhU2l6ZSgwKQorICAgICwgbV9zdXJmYWNlKDApCit7CisgICAgYXNzZXJ0T2JqZWN0SXNEZWxl
dGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChtX3dlYlZpZXcpKTsKK30KKworV2ViVmlld1Rl
c3Q6On5XZWJWaWV3VGVzdCgpCit7CisgICAgaWYgKG1fcGFyZW50V2luZG93KQorICAgICAgICBn
dGtfd2lkZ2V0X2Rlc3Ryb3kobV9wYXJlbnRXaW5kb3cpOworICAgIGlmIChtX2phdmFzY3JpcHRS
ZXN1bHQpCisgICAgICAgIHdlYmtpdF9qYXZhc2NyaXB0X3Jlc3VsdF91bnJlZihtX2phdmFzY3Jp
cHRSZXN1bHQpOworICAgIGlmIChtX3N1cmZhY2UpCisgICAgICAgIGNhaXJvX3N1cmZhY2VfZGVz
dHJveShtX3N1cmZhY2UpOworICAgIGdfb2JqZWN0X3VucmVmKG1fd2ViVmlldyk7CisgICAgZ19t
YWluX2xvb3BfdW5yZWYobV9tYWluTG9vcCk7Cit9CisKK3ZvaWQgV2ViVmlld1Rlc3Q6OmxvYWRV
UkkoY29uc3QgY2hhciogdXJpKQoreworICAgIG1fYWN0aXZlVVJJID0gdXJpOworICAgIHdlYmtp
dF93ZWJfdmlld19sb2FkX3VyaShtX3dlYlZpZXcsIHVyaSk7Cit9CisKK3ZvaWQgV2ViVmlld1Rl
c3Q6OmxvYWRIdG1sKGNvbnN0IGNoYXIqIGh0bWwsIGNvbnN0IGNoYXIqIGJhc2VVUkkpCit7Cisg
ICAgaWYgKCFiYXNlVVJJKQorICAgICAgICBtX2FjdGl2ZVVSSSA9ICJhYm91dDpibGFuayI7Cisg
ICAgZWxzZQorICAgICAgICBtX2FjdGl2ZVVSSSA9IGJhc2VVUkk7CisgICAgd2Via2l0X3dlYl92
aWV3X2xvYWRfaHRtbChtX3dlYlZpZXcsIGh0bWwsIGJhc2VVUkkpOworfQorCit2b2lkIFdlYlZp
ZXdUZXN0Ojpsb2FkUGxhaW5UZXh0KGNvbnN0IGNoYXIqIHBsYWluVGV4dCkKK3sKKyAgICBtX2Fj
dGl2ZVVSSSA9ICJhYm91dDpibGFuayI7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfcGxhaW5f
dGV4dChtX3dlYlZpZXcsIHBsYWluVGV4dCk7Cit9CisKK3ZvaWQgV2ViVmlld1Rlc3Q6OmxvYWRS
ZXF1ZXN0KFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgbV9hY3RpdmVVUkkgPSB3
ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdf
bG9hZF9yZXF1ZXN0KG1fd2ViVmlldywgcmVxdWVzdCk7Cit9CisKK3ZvaWQgV2ViVmlld1Rlc3Q6
OmxvYWRBbHRlcm5hdGVIVE1MKGNvbnN0IGNoYXIqIGh0bWwsIGNvbnN0IGNoYXIqIGNvbnRlbnRV
UkksIGNvbnN0IGNoYXIqIGJhc2VVUkkpCit7CisgICAgbV9hY3RpdmVVUkkgPSBjb250ZW50VVJJ
OworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX2FsdGVybmF0ZV9odG1sKG1fd2ViVmlldywgaHRt
bCwgY29udGVudFVSSSwgYmFzZVVSSSk7Cit9CisKK3ZvaWQgV2ViVmlld1Rlc3Q6OmdvQmFjaygp
Cit7CisgICAgaWYgKHdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayhtX3dlYlZpZXcpKSB7Cisg
ICAgICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdCogbGlzdCA9IHdlYmtpdF93ZWJfdmlld19nZXRf
YmFja19mb3J3YXJkX2xpc3QobV93ZWJWaWV3KTsKKyAgICAgICAgV2ViS2l0QmFja0ZvcndhcmRM
aXN0SXRlbSogaXRlbSA9IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbnRoX2l0ZW0obGlz
dCwgLTEpOworICAgICAgICBtX2FjdGl2ZVVSSSA9IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9p
dGVtX2dldF9vcmlnaW5hbF91cmkoaXRlbSk7CisgICAgfQorCisgICAgLy8gQ2FsbCBnb19iYWNr
IGV2ZW4gd2hlbiBjYW5fZ29fYmFjayByZXR1cm5zIEZBTFNFIHRvIGNoZWNrIG5vdGhpbmcgaGFw
cGVucy4KKyAgICB3ZWJraXRfd2ViX3ZpZXdfZ29fYmFjayhtX3dlYlZpZXcpOworfQorCit2b2lk
IFdlYlZpZXdUZXN0Ojpnb0ZvcndhcmQoKQoreworICAgIGlmICh3ZWJraXRfd2ViX3ZpZXdfY2Fu
X2dvX2ZvcndhcmQobV93ZWJWaWV3KSkgeworICAgICAgICBXZWJLaXRCYWNrRm9yd2FyZExpc3Qq
IGxpc3QgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2JhY2tfZm9yd2FyZF9saXN0KG1fd2ViVmlldyk7
CisgICAgICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW0gPSB3ZWJraXRfYmFja19m
b3J3YXJkX2xpc3RfZ2V0X250aF9pdGVtKGxpc3QsIDEpOworICAgICAgICBtX2FjdGl2ZVVSSSA9
IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dldF9vcmlnaW5hbF91cmkoaXRlbSk7Cisg
ICAgfQorCisgICAgLy8gQ2FsbCBnb19mb3J3YXJkIGV2ZW4gd2hlbiBjYW5fZ29fZm9yd2FyZCBy
ZXR1cm5zIEZBTFNFIHRvIGNoZWNrIG5vdGhpbmcgaGFwcGVucy4KKyAgICB3ZWJraXRfd2ViX3Zp
ZXdfZ29fZm9yd2FyZChtX3dlYlZpZXcpOworfQorCit2b2lkIFdlYlZpZXdUZXN0Ojpnb1RvQmFj
a0ZvcndhcmRMaXN0SXRlbShXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiBpdGVtKQoreworICAg
IG1fYWN0aXZlVVJJID0gd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0X29yaWdpbmFs
X3VyaShpdGVtKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfZ29fdG9fYmFja19mb3J3YXJkX2xpc3Rf
aXRlbShtX3dlYlZpZXcsIGl0ZW0pOworfQorCit2b2lkIFdlYlZpZXdUZXN0OjpxdWl0TWFpbkxv
b3AoKQoreworICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7Cit9CisKK3ZvaWQgV2Vi
Vmlld1Rlc3Q6OnF1aXRNYWluTG9vcEFmdGVyUHJvY2Vzc2luZ1BlbmRpbmdFdmVudHMoKQorewor
ICAgIHdoaWxlIChndGtfZXZlbnRzX3BlbmRpbmcoKSkKKyAgICAgICAgZ3RrX21haW5faXRlcmF0
aW9uKCk7CisgICAgcXVpdE1haW5Mb29wKCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBxdWl0TWFp
bkxvb3BJZGxlQ2FsbGJhY2soV2ViVmlld1Rlc3QqIHRlc3QpCit7CisgICAgdGVzdC0+cXVpdE1h
aW5Mb29wKCk7CisgICAgcmV0dXJuIEZBTFNFOworfQorCit2b2lkIFdlYlZpZXdUZXN0Ojp3YWl0
KGRvdWJsZSBzZWNvbmRzKQoreworICAgIGdfdGltZW91dF9hZGRfc2Vjb25kcyhzZWNvbmRzLCBy
ZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihxdWl0TWFpbkxvb3BJZGxlQ2FsbGJhY2spLCB0
aGlzKTsKKyAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Cit9CisKK3N0YXRpYyB2b2lk
IGxvYWRDaGFuZ2VkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdExvYWRFdmVudCBsb2Fk
RXZlbnQsIFdlYlZpZXdUZXN0KiB0ZXN0KQoreworICAgIGlmIChsb2FkRXZlbnQgIT0gV0VCS0lU
X0xPQURfRklOSVNIRUQpCisgICAgICAgIHJldHVybjsKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19k
aXNjb25uZWN0X2J5X2Z1bmMod2ViVmlldywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obG9hZENo
YW5nZWQpLCB0ZXN0KTsKKyAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOwor
fQorCit2b2lkIFdlYlZpZXdUZXN0Ojp3YWl0VW50aWxMb2FkRmluaXNoZWQoKQoreworICAgIGdf
c2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAibG9hZC1jaGFuZ2VkIiwgR19DQUxMQkFDSyhsb2Fk
Q2hhbmdlZCksIHRoaXMpOworICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKK30KKwor
c3RhdGljIHZvaWQgdGl0bGVDaGFuZ2VkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEdQYXJhbVNw
ZWMqLCBXZWJWaWV3VGVzdCogdGVzdCkKK3sKKyAgICBpZiAoIXRlc3QtPm1fZXhwZWN0ZWRUaXRs
ZS5pc051bGwoKSAmJiB0ZXN0LT5tX2V4cGVjdGVkVGl0bGUgIT0gd2Via2l0X3dlYl92aWV3X2dl
dF90aXRsZSh3ZWJWaWV3KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ19zaWduYWxfaGFuZGxl
cnNfZGlzY29ubmVjdF9ieV9mdW5jKHdlYlZpZXcsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHRp
dGxlQ2hhbmdlZCksIHRlc3QpOworICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9v
cCk7Cit9CisKK3ZvaWQgV2ViVmlld1Rlc3Q6OndhaXRVbnRpbFRpdGxlQ2hhbmdlZFRvKGNvbnN0
IGNoYXIqIGV4cGVjdGVkVGl0bGUpCit7CisgICAgbV9leHBlY3RlZFRpdGxlID0gZXhwZWN0ZWRU
aXRsZTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgIm5vdGlmeTo6dGl0bGUiLCBH
X0NBTExCQUNLKHRpdGxlQ2hhbmdlZCksIHRoaXMpOworICAgIGdfbWFpbl9sb29wX3J1bihtX21h
aW5Mb29wKTsKKyAgICBtX2V4cGVjdGVkVGl0bGUgPSBDU3RyaW5nKCk7Cit9CisKK3ZvaWQgV2Vi
Vmlld1Rlc3Q6OndhaXRVbnRpbFRpdGxlQ2hhbmdlZCgpCit7CisgICAgd2FpdFVudGlsVGl0bGVD
aGFuZ2VkVG8oMCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBwYXJlbnRXaW5kb3dNYXBwZWQoR3Rr
V2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50KiwgV2ViVmlld1Rlc3QqIHRlc3QpCit7CisgICAgZ19z
aWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKHdpZGdldCwgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4ocGFyZW50V2luZG93TWFwcGVkKSwgdGVzdCk7CisgICAgZ19tYWluX2xvb3BfcXVp
dCh0ZXN0LT5tX21haW5Mb29wKTsKKworICAgIHJldHVybiBGQUxTRTsKK30KKwordm9pZCBXZWJW
aWV3VGVzdDo6c2hvd0luV2luZG93KEd0a1dpbmRvd1R5cGUgd2luZG93VHlwZSkKK3sKKyAgICBn
X2Fzc2VydCghbV9wYXJlbnRXaW5kb3cpOworICAgIG1fcGFyZW50V2luZG93ID0gZ3RrX3dpbmRv
d19uZXcod2luZG93VHlwZSk7CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUiht
X3BhcmVudFdpbmRvdyksIEdUS19XSURHRVQobV93ZWJWaWV3KSk7CisgICAgZ3RrX3dpZGdldF9z
aG93KEdUS19XSURHRVQobV93ZWJWaWV3KSk7CisgICAgZ3RrX3dpZGdldF9zaG93KG1fcGFyZW50
V2luZG93KTsKK30KKwordm9pZCBXZWJWaWV3VGVzdDo6c2hvd0luV2luZG93QW5kV2FpdFVudGls
TWFwcGVkKEd0a1dpbmRvd1R5cGUgd2luZG93VHlwZSkKK3sKKyAgICBnX2Fzc2VydCghbV9wYXJl
bnRXaW5kb3cpOworICAgIG1fcGFyZW50V2luZG93ID0gZ3RrX3dpbmRvd19uZXcod2luZG93VHlw
ZSk7CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihtX3BhcmVudFdpbmRvdyks
IEdUS19XSURHRVQobV93ZWJWaWV3KSk7CisgICAgZ3RrX3dpZGdldF9zaG93KEdUS19XSURHRVQo
bV93ZWJWaWV3KSk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fcGFyZW50V2luZG93LCAibWFw
LWV2ZW50IiwgR19DQUxMQkFDSyhwYXJlbnRXaW5kb3dNYXBwZWQpLCB0aGlzKTsKKyAgICBndGtf
d2lkZ2V0X3Nob3cobV9wYXJlbnRXaW5kb3cpOworICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5M
b29wKTsKK30KKwordm9pZCBXZWJWaWV3VGVzdDo6cmVzaXplVmlldyhpbnQgd2lkdGgsIGludCBo
ZWlnaHQpCit7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uOworICAgIGd0a193aWRnZXRf
Z2V0X2FsbG9jYXRpb24oR1RLX1dJREdFVChtX3dlYlZpZXcpLCAmYWxsb2NhdGlvbik7CisgICAg
aWYgKHdpZHRoICE9IC0xKQorICAgICAgICBhbGxvY2F0aW9uLndpZHRoID0gd2lkdGg7CisgICAg
aWYgKGhlaWdodCAhPSAtMSkKKyAgICAgICAgYWxsb2NhdGlvbi5oZWlnaHQgPSBoZWlnaHQ7Cisg
ICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQobV93ZWJWaWV3KSwgJmFsbG9j
YXRpb24pOworfQorCit2b2lkIFdlYlZpZXdUZXN0OjpzZWxlY3RBbGwoKQoreworICAgIHdlYmtp
dF93ZWJfdmlld19leGVjdXRlX2VkaXRpbmdfY29tbWFuZChtX3dlYlZpZXcsICJTZWxlY3RBbGwi
KTsKK30KKworc3RhdGljIHZvaWQgcmVzb3VyY2VHZXREYXRhQ2FsbGJhY2soR09iamVjdCogb2Jq
ZWN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgc2l6
ZV90IGRhdGFTaXplOworICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICB1bnNpZ25lZCBj
aGFyKiBkYXRhID0gd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZGF0YV9maW5pc2goV0VCS0lUX1dF
Ql9SRVNPVVJDRShvYmplY3QpLCByZXN1bHQsICZkYXRhU2l6ZSwgJmVycm9yLm91dFB0cigpKTsK
KyAgICBnX2Fzc2VydChkYXRhKTsKKworICAgIFdlYlZpZXdUZXN0KiB0ZXN0ID0gc3RhdGljX2Nh
c3Q8V2ViVmlld1Rlc3QqPih1c2VyRGF0YSk7CisgICAgdGVzdC0+bV9yZXNvdXJjZURhdGEuc2V0
KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGRhdGEpKTsKKyAgICB0ZXN0LT5tX3Jlc291cmNlRGF0
YVNpemUgPSBkYXRhU2l6ZTsKKyAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3Ap
OworfQorCitjb25zdCBjaGFyKiBXZWJWaWV3VGVzdDo6bWFpblJlc291cmNlRGF0YShzaXplX3Qm
IG1haW5SZXNvdXJjZURhdGFTaXplKQoreworICAgIG1fcmVzb3VyY2VEYXRhU2l6ZSA9IDA7Cisg
ICAgbV9yZXNvdXJjZURhdGEuY2xlYXIoKTsKKyAgICBXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3Vy
Y2UgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2UobV93ZWJWaWV3KTsKKyAgICBn
X2Fzc2VydChyZXNvdXJjZSk7CisKKyAgICB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF9kYXRhKHJl
c291cmNlLCAwLCByZXNvdXJjZUdldERhdGFDYWxsYmFjaywgdGhpcyk7CisgICAgZ19tYWluX2xv
b3BfcnVuKG1fbWFpbkxvb3ApOworCisgICAgbWFpblJlc291cmNlRGF0YVNpemUgPSBtX3Jlc291
cmNlRGF0YVNpemU7CisgICAgcmV0dXJuIG1fcmVzb3VyY2VEYXRhLmdldCgpOworfQorCit2b2lk
IFdlYlZpZXdUZXN0Ojptb3VzZU1vdmVUbyhpbnQgeCwgaW50IHksIHVuc2lnbmVkIGludCBtb3Vz
ZU1vZGlmaWVycykKK3sKKyAgICBnX2Fzc2VydChtX3BhcmVudFdpbmRvdyk7CisgICAgR3RrV2lk
Z2V0KiB2aWV3V2lkZ2V0ID0gR1RLX1dJREdFVChtX3dlYlZpZXcpOworICAgIGdfYXNzZXJ0KGd0
a193aWRnZXRfZ2V0X3JlYWxpemVkKHZpZXdXaWRnZXQpKTsKKworICAgIEdPd25QdHI8R2RrRXZl
bnQ+IGV2ZW50KGdka19ldmVudF9uZXcoR0RLX01PVElPTl9OT1RJRlkpKTsKKyAgICBldmVudC0+
bW90aW9uLnggPSB4OworICAgIGV2ZW50LT5tb3Rpb24ueSA9IHk7CisKKyAgICBldmVudC0+bW90
aW9uLnRpbWUgPSBHREtfQ1VSUkVOVF9USU1FOworICAgIGV2ZW50LT5tb3Rpb24ud2luZG93ID0g
Z3RrX3dpZGdldF9nZXRfd2luZG93KHZpZXdXaWRnZXQpOworICAgIGdfb2JqZWN0X3JlZihldmVu
dC0+bW90aW9uLndpbmRvdyk7CisgICAgZXZlbnQtPm1vdGlvbi5kZXZpY2UgPSBnZGtfZGV2aWNl
X21hbmFnZXJfZ2V0X2NsaWVudF9wb2ludGVyKGdka19kaXNwbGF5X2dldF9kZXZpY2VfbWFuYWdl
cihndGtfd2lkZ2V0X2dldF9kaXNwbGF5KHZpZXdXaWRnZXQpKSk7CisgICAgZXZlbnQtPm1vdGlv
bi5zdGF0ZSA9IG1vdXNlTW9kaWZpZXJzOworICAgIGV2ZW50LT5tb3Rpb24uYXhlcyA9IDA7CisK
KyAgICBpbnQgeFJvb3QsIHlSb290OworICAgIGdka193aW5kb3dfZ2V0X3Jvb3RfY29vcmRzKGd0
a193aWRnZXRfZ2V0X3dpbmRvdyh2aWV3V2lkZ2V0KSwgeCwgeSwgJnhSb290LCAmeVJvb3QpOwor
ICAgIGV2ZW50LT5tb3Rpb24ueF9yb290ID0geFJvb3Q7CisgICAgZXZlbnQtPm1vdGlvbi55X3Jv
b3QgPSB5Um9vdDsKKyAgICBndGtfbWFpbl9kb19ldmVudChldmVudC5nZXQoKSk7Cit9CisKK3Zv
aWQgV2ViVmlld1Rlc3Q6OmNsaWNrTW91c2VCdXR0b24oaW50IHgsIGludCB5LCB1bnNpZ25lZCBp
bnQgYnV0dG9uLCB1bnNpZ25lZCBpbnQgbW91c2VNb2RpZmllcnMpCit7CisgICAgZG9Nb3VzZUJ1
dHRvbkV2ZW50KEdES19CVVRUT05fUFJFU1MsIHgsIHksIGJ1dHRvbiwgbW91c2VNb2RpZmllcnMp
OworICAgIGRvTW91c2VCdXR0b25FdmVudChHREtfQlVUVE9OX1JFTEVBU0UsIHgsIHksIGJ1dHRv
biwgbW91c2VNb2RpZmllcnMpOworfQorCit2b2lkIFdlYlZpZXdUZXN0OjprZXlTdHJva2UodW5z
aWduZWQgaW50IGtleVZhbCwgdW5zaWduZWQgaW50IGtleU1vZGlmaWVycykKK3sKKyAgICBnX2Fz
c2VydChtX3BhcmVudFdpbmRvdyk7CisgICAgR3RrV2lkZ2V0KiB2aWV3V2lkZ2V0ID0gR1RLX1dJ
REdFVChtX3dlYlZpZXcpOworICAgIGdfYXNzZXJ0KGd0a193aWRnZXRfZ2V0X3JlYWxpemVkKHZp
ZXdXaWRnZXQpKTsKKworICAgIEdPd25QdHI8R2RrRXZlbnQ+IGV2ZW50KGdka19ldmVudF9uZXco
R0RLX0tFWV9QUkVTUykpOworICAgIGV2ZW50LT5rZXkua2V5dmFsID0ga2V5VmFsOworCisgICAg
ZXZlbnQtPmtleS50aW1lID0gR0RLX0NVUlJFTlRfVElNRTsKKyAgICBldmVudC0+a2V5LndpbmRv
dyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyh2aWV3V2lkZ2V0KTsKKyAgICBnX29iamVjdF9yZWYo
ZXZlbnQtPmtleS53aW5kb3cpOworICAgIGdka19ldmVudF9zZXRfZGV2aWNlKGV2ZW50LmdldCgp
LCBnZGtfZGV2aWNlX21hbmFnZXJfZ2V0X2NsaWVudF9wb2ludGVyKGdka19kaXNwbGF5X2dldF9k
ZXZpY2VfbWFuYWdlcihndGtfd2lkZ2V0X2dldF9kaXNwbGF5KHZpZXdXaWRnZXQpKSkpOworICAg
IGV2ZW50LT5rZXkuc3RhdGUgPSBrZXlNb2RpZmllcnM7CisKKyAgICAvLyBXaGVuIHN5bnRoZXNp
emluZyBhbiBldmVudCwgYW4gaW52YWxpZCBoYXJkd2FyZV9rZXljb2RlIHZhbHVlIGNhbiBjYXVz
ZSBpdCB0byBiZSBiYWRseSBwcm9jZXNzZWQgYnkgR1RLKy4KKyAgICBHT3duUHRyPEdka0tleW1h
cEtleT4ga2V5czsKKyAgICBpbnQga2V5c0NvdW50OworICAgIGlmIChnZGtfa2V5bWFwX2dldF9l
bnRyaWVzX2Zvcl9rZXl2YWwoZ2RrX2tleW1hcF9nZXRfZGVmYXVsdCgpLCBrZXlWYWwsICZrZXlz
Lm91dFB0cigpLCAma2V5c0NvdW50KSkKKyAgICAgICAgZXZlbnQtPmtleS5oYXJkd2FyZV9rZXlj
b2RlID0ga2V5cy5nZXQoKVswXS5rZXljb2RlOworCisgICAgZ3RrX21haW5fZG9fZXZlbnQoZXZl
bnQuZ2V0KCkpOworICAgIGV2ZW50LT5rZXkudHlwZSA9IEdES19LRVlfUkVMRUFTRTsKKyAgICBn
dGtfbWFpbl9kb19ldmVudChldmVudC5nZXQoKSk7Cit9CisKK3ZvaWQgV2ViVmlld1Rlc3Q6OmRv
TW91c2VCdXR0b25FdmVudChHZGtFdmVudFR5cGUgZXZlbnRUeXBlLCBpbnQgeCwgaW50IHksIHVu
c2lnbmVkIGludCBidXR0b24sIHVuc2lnbmVkIGludCBtb3VzZU1vZGlmaWVycykKK3sKKyAgICBn
X2Fzc2VydChtX3BhcmVudFdpbmRvdyk7CisgICAgR3RrV2lkZ2V0KiB2aWV3V2lkZ2V0ID0gR1RL
X1dJREdFVChtX3dlYlZpZXcpOworICAgIGdfYXNzZXJ0KGd0a193aWRnZXRfZ2V0X3JlYWxpemVk
KHZpZXdXaWRnZXQpKTsKKworICAgIEdPd25QdHI8R2RrRXZlbnQ+IGV2ZW50KGdka19ldmVudF9u
ZXcoZXZlbnRUeXBlKSk7CisgICAgZXZlbnQtPmJ1dHRvbi53aW5kb3cgPSBndGtfd2lkZ2V0X2dl
dF93aW5kb3codmlld1dpZGdldCk7CisgICAgZ19vYmplY3RfcmVmKGV2ZW50LT5idXR0b24ud2lu
ZG93KTsKKworICAgIGV2ZW50LT5idXR0b24udGltZSA9IEdES19DVVJSRU5UX1RJTUU7CisgICAg
ZXZlbnQtPmJ1dHRvbi54ID0geDsKKyAgICBldmVudC0+YnV0dG9uLnkgPSB5OworICAgIGV2ZW50
LT5idXR0b24uYXhlcyA9IDA7CisgICAgZXZlbnQtPmJ1dHRvbi5zdGF0ZSA9IG1vdXNlTW9kaWZp
ZXJzOworICAgIGV2ZW50LT5idXR0b24uYnV0dG9uID0gYnV0dG9uOworCisgICAgZXZlbnQtPmJ1
dHRvbi5kZXZpY2UgPSBnZGtfZGV2aWNlX21hbmFnZXJfZ2V0X2NsaWVudF9wb2ludGVyKGdka19k
aXNwbGF5X2dldF9kZXZpY2VfbWFuYWdlcihndGtfd2lkZ2V0X2dldF9kaXNwbGF5KHZpZXdXaWRn
ZXQpKSk7CisKKyAgICBpbnQgeFJvb3QsIHlSb290OworICAgIGdka193aW5kb3dfZ2V0X3Jvb3Rf
Y29vcmRzKGd0a193aWRnZXRfZ2V0X3dpbmRvdyh2aWV3V2lkZ2V0KSwgeCwgeSwgJnhSb290LCAm
eVJvb3QpOworICAgIGV2ZW50LT5idXR0b24ueF9yb290ID0geFJvb3Q7CisgICAgZXZlbnQtPmJ1
dHRvbi55X3Jvb3QgPSB5Um9vdDsKKyAgICBndGtfbWFpbl9kb19ldmVudChldmVudC5nZXQoKSk7
Cit9CisKK3N0YXRpYyB2b2lkIHJ1bkphdmFTY3JpcHRSZWFkeUNhbGxiYWNrKEdPYmplY3QqLCBH
QXN5bmNSZXN1bHQqIHJlc3VsdCwgV2ViVmlld1Rlc3QqIHRlc3QpCit7CisgICAgdGVzdC0+bV9q
YXZhc2NyaXB0UmVzdWx0ID0gd2Via2l0X3dlYl92aWV3X3J1bl9qYXZhc2NyaXB0X2ZpbmlzaCh0
ZXN0LT5tX3dlYlZpZXcsIHJlc3VsdCwgdGVzdC0+bV9qYXZhc2NyaXB0RXJyb3IpOworICAgIGdf
bWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIHJ1bkph
dmFTY3JpcHRGcm9tR1Jlc291cmNlUmVhZHlDYWxsYmFjayhHT2JqZWN0KiwgR0FzeW5jUmVzdWx0
KiByZXN1bHQsIFdlYlZpZXdUZXN0KiB0ZXN0KQoreworICAgIHRlc3QtPm1famF2YXNjcmlwdFJl
c3VsdCA9IHdlYmtpdF93ZWJfdmlld19ydW5famF2YXNjcmlwdF9mcm9tX2dyZXNvdXJjZV9maW5p
c2godGVzdC0+bV93ZWJWaWV3LCByZXN1bHQsIHRlc3QtPm1famF2YXNjcmlwdEVycm9yKTsKKyAg
ICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworfQorCitXZWJLaXRKYXZhc2Ny
aXB0UmVzdWx0KiBXZWJWaWV3VGVzdDo6cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVk
KGNvbnN0IGNoYXIqIGphdmFzY3JpcHQsIEdFcnJvcioqIGVycm9yKQoreworICAgIGlmIChtX2ph
dmFzY3JpcHRSZXN1bHQpCisgICAgICAgIHdlYmtpdF9qYXZhc2NyaXB0X3Jlc3VsdF91bnJlZiht
X2phdmFzY3JpcHRSZXN1bHQpOworICAgIG1famF2YXNjcmlwdFJlc3VsdCA9IDA7CisgICAgbV9q
YXZhc2NyaXB0RXJyb3IgPSBlcnJvcjsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfcnVuX2phdmFzY3Jp
cHQobV93ZWJWaWV3LCBqYXZhc2NyaXB0LCAwLCByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5
Q2FsbGJhY2s+KHJ1bkphdmFTY3JpcHRSZWFkeUNhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19tYWlu
X2xvb3BfcnVuKG1fbWFpbkxvb3ApOworCisgICAgcmV0dXJuIG1famF2YXNjcmlwdFJlc3VsdDsK
K30KKworV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCogV2ViVmlld1Rlc3Q6OnJ1bkphdmFTY3JpcHRG
cm9tR1Jlc291cmNlQW5kV2FpdFVudGlsRmluaXNoZWQoY29uc3QgY2hhciogcmVzb3VyY2UsIEdF
cnJvcioqIGVycm9yKQoreworICAgIGlmIChtX2phdmFzY3JpcHRSZXN1bHQpCisgICAgICAgIHdl
YmtpdF9qYXZhc2NyaXB0X3Jlc3VsdF91bnJlZihtX2phdmFzY3JpcHRSZXN1bHQpOworICAgIG1f
amF2YXNjcmlwdFJlc3VsdCA9IDA7CisgICAgbV9qYXZhc2NyaXB0RXJyb3IgPSBlcnJvcjsKKyAg
ICB3ZWJraXRfd2ViX3ZpZXdfcnVuX2phdmFzY3JpcHRfZnJvbV9ncmVzb3VyY2UobV93ZWJWaWV3
LCByZXNvdXJjZSwgMCwgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihydW5K
YXZhU2NyaXB0RnJvbUdSZXNvdXJjZVJlYWR5Q2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX21haW5f
bG9vcF9ydW4obV9tYWluTG9vcCk7CisKKyAgICByZXR1cm4gbV9qYXZhc2NyaXB0UmVzdWx0Owor
fQorCitzdGF0aWMgY2hhcioganNWYWx1ZVRvQ1N0cmluZyhKU0dsb2JhbENvbnRleHRSZWYgY29u
dGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKK3sKKyAgICBnX2Fzc2VydCh2YWx1ZSk7CisgICAgZ19h
c3NlcnQoSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIHZhbHVlKSk7CisKKyAgICBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gc3RyaW5nVmFsdWUoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29u
dGV4dCwgdmFsdWUsIDApKTsKKyAgICBnX2Fzc2VydChzdHJpbmdWYWx1ZSk7CisKKyAgICBzaXpl
X3QgY1N0cmluZ0xlbmd0aCA9IEpTU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShzdHJp
bmdWYWx1ZS5nZXQoKSk7CisgICAgY2hhciogY1N0cmluZyA9IHN0YXRpY19jYXN0PGNoYXIqPihn
X21hbGxvYyhjU3RyaW5nTGVuZ3RoKSk7CisgICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhzdHJp
bmdWYWx1ZS5nZXQoKSwgY1N0cmluZywgY1N0cmluZ0xlbmd0aCk7CisgICAgcmV0dXJuIGNTdHJp
bmc7Cit9CisKK2NoYXIqIFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKFdl
YktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQpCit7CisgICAgSlNHbG9iYWxD
b250ZXh0UmVmIGNvbnRleHQgPSB3ZWJraXRfamF2YXNjcmlwdF9yZXN1bHRfZ2V0X2dsb2JhbF9j
b250ZXh0KGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KGNvbnRleHQpOworICAgIHJl
dHVybiBqc1ZhbHVlVG9DU3RyaW5nKGNvbnRleHQsIHdlYmtpdF9qYXZhc2NyaXB0X3Jlc3VsdF9n
ZXRfdmFsdWUoamF2YXNjcmlwdFJlc3VsdCkpOworfQorCitkb3VibGUgV2ViVmlld1Rlc3Q6Omph
dmFzY3JpcHRSZXN1bHRUb051bWJlcihXZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBqYXZhc2NyaXB0
UmVzdWx0KQoreworICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0ID0gd2Via2l0X2phdmFz
Y3JpcHRfcmVzdWx0X2dldF9nbG9iYWxfY29udGV4dChqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBn
X2Fzc2VydChjb250ZXh0KTsKKyAgICBKU1ZhbHVlUmVmIHZhbHVlID0gd2Via2l0X2phdmFzY3Jp
cHRfcmVzdWx0X2dldF92YWx1ZShqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydCh2YWx1
ZSk7CisgICAgZ19hc3NlcnQoSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIHZhbHVlKSk7CisKKyAg
ICByZXR1cm4gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIHZhbHVlLCAwKTsKK30KKworYm9vbCBX
ZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQm9vbGVhbihXZWJLaXRKYXZhc2NyaXB0UmVz
dWx0KiBqYXZhc2NyaXB0UmVzdWx0KQoreworICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0
ID0gd2Via2l0X2phdmFzY3JpcHRfcmVzdWx0X2dldF9nbG9iYWxfY29udGV4dChqYXZhc2NyaXB0
UmVzdWx0KTsKKyAgICBnX2Fzc2VydChjb250ZXh0KTsKKyAgICBKU1ZhbHVlUmVmIHZhbHVlID0g
d2Via2l0X2phdmFzY3JpcHRfcmVzdWx0X2dldF92YWx1ZShqYXZhc2NyaXB0UmVzdWx0KTsKKyAg
ICBnX2Fzc2VydCh2YWx1ZSk7CisgICAgZ19hc3NlcnQoSlNWYWx1ZUlzQm9vbGVhbihjb250ZXh0
LCB2YWx1ZSkpOworCisgICAgcmV0dXJuIEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgdmFsdWUp
OworfQorCitib29sIFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0SXNOdWxsKFdlYktpdEph
dmFzY3JpcHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQpCit7CisgICAgSlNHbG9iYWxDb250ZXh0
UmVmIGNvbnRleHQgPSB3ZWJraXRfamF2YXNjcmlwdF9yZXN1bHRfZ2V0X2dsb2JhbF9jb250ZXh0
KGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KGNvbnRleHQpOworICAgIEpTVmFsdWVS
ZWYgdmFsdWUgPSB3ZWJraXRfamF2YXNjcmlwdF9yZXN1bHRfZ2V0X3ZhbHVlKGphdmFzY3JpcHRS
ZXN1bHQpOworICAgIGdfYXNzZXJ0KHZhbHVlKTsKKworICAgIHJldHVybiBKU1ZhbHVlSXNOdWxs
KGNvbnRleHQsIHZhbHVlKTsKK30KKworYm9vbCBXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3Vs
dElzVW5kZWZpbmVkKFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQpCit7
CisgICAgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQgPSB3ZWJraXRfamF2YXNjcmlwdF9yZXN1
bHRfZ2V0X2dsb2JhbF9jb250ZXh0KGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KGNv
bnRleHQpOworICAgIEpTVmFsdWVSZWYgdmFsdWUgPSB3ZWJraXRfamF2YXNjcmlwdF9yZXN1bHRf
Z2V0X3ZhbHVlKGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KHZhbHVlKTsKKworICAg
IHJldHVybiBKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwgdmFsdWUpOworfQorCitzdGF0aWMg
dm9pZCBvblNuYXBzaG90UmVhZHkoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIEdBc3luY1Jlc3Vs
dCogcmVzLCBXZWJWaWV3VGVzdCogdGVzdCkKK3sKKyAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7
CisgICAgdGVzdC0+bV9zdXJmYWNlID0gd2Via2l0X3dlYl92aWV3X2dldF9zbmFwc2hvdF9maW5p
c2god2ViX3ZpZXcsIHJlcywgJmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fzc2VydCghdGVzdC0+
bV9zdXJmYWNlIHx8ICFlcnJvci5nZXQoKSk7CisgICAgaWYgKGVycm9yKQorICAgICAgICBnX2Fz
c2VydF9lcnJvcihlcnJvci5nZXQoKSwgV0VCS0lUX1NOQVBTSE9UX0VSUk9SLCBXRUJLSVRfU05B
UFNIT1RfRVJST1JfRkFJTEVEX1RPX0NSRUFURSk7CisgICAgdGVzdC0+cXVpdE1haW5Mb29wKCk7
Cit9CisKK2NhaXJvX3N1cmZhY2VfdCogV2ViVmlld1Rlc3Q6OmdldFNuYXBzaG90QW5kV2FpdFVu
dGlsUmVhZHkoV2ViS2l0U25hcHNob3RSZWdpb24gcmVnaW9uLCBXZWJLaXRTbmFwc2hvdE9wdGlv
bnMgb3B0aW9ucykKK3sKKyAgICBpZiAobV9zdXJmYWNlKQorICAgICAgICBjYWlyb19zdXJmYWNl
X2Rlc3Ryb3kobV9zdXJmYWNlKTsKKyAgICBtX3N1cmZhY2UgPSAwOworICAgIHdlYmtpdF93ZWJf
dmlld19nZXRfc25hcHNob3QobV93ZWJWaWV3LCByZWdpb24sIG9wdGlvbnMsIDAsIHJlaW50ZXJw
cmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4ob25TbmFwc2hvdFJlYWR5KSwgdGhpcyk7Cisg
ICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgIHJldHVybiBtX3N1cmZhY2U7Cit9
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYlZpZXdU
ZXN0LmggYi9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYlZpZXdUZXN0LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ2MGUyMgotLS0gL2Rldi9udWxs
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViVmlld1Rlc3QuaApA
QCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisg
KiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTEgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViVmlld1Rlc3RfaAorI2RlZmluZSBXZWJWaWV3
VGVzdF9oCisKKyNpbmNsdWRlICJUZXN0TWFpbi5oIgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0
Mi5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworY2xhc3MgV2ViVmlld1Rlc3Q6
IHB1YmxpYyBUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFdlYlZp
ZXdUZXN0KTsKKyAgICBXZWJWaWV3VGVzdCgpOworICAgIHZpcnR1YWwgfldlYlZpZXdUZXN0KCk7
CisKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFVSSShjb25zdCBjaGFyKiB1cmkpOworICAgIHZpcnR1
YWwgdm9pZCBsb2FkSHRtbChjb25zdCBjaGFyKiBodG1sLCBjb25zdCBjaGFyKiBiYXNlVVJJKTsK
KyAgICB2aXJ0dWFsIHZvaWQgbG9hZFBsYWluVGV4dChjb25zdCBjaGFyKiBwbGFpblRleHQpOwor
ICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVxdWVzdChXZWJLaXRVUklSZXF1ZXN0Kik7CisgICAgdm9p
ZCBsb2FkQWx0ZXJuYXRlSFRNTChjb25zdCBjaGFyKiBodG1sLCBjb25zdCBjaGFyKiBjb250ZW50
VVJJLCBjb25zdCBjaGFyKiBiYXNlVVJJKTsKKyAgICB2b2lkIGdvQmFjaygpOworICAgIHZvaWQg
Z29Gb3J3YXJkKCk7CisgICAgdm9pZCBnb1RvQmFja0ZvcndhcmRMaXN0SXRlbShXZWJLaXRCYWNr
Rm9yd2FyZExpc3RJdGVtKik7CisKKyAgICB2b2lkIHF1aXRNYWluTG9vcCgpOworICAgIHZvaWQg
cXVpdE1haW5Mb29wQWZ0ZXJQcm9jZXNzaW5nUGVuZGluZ0V2ZW50cygpOworICAgIHZvaWQgd2Fp
dChkb3VibGUgc2Vjb25kcyk7CisgICAgdm9pZCB3YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAg
ICB2b2lkIHdhaXRVbnRpbFRpdGxlQ2hhbmdlZFRvKGNvbnN0IGNoYXIqIGV4cGVjdGVkVGl0bGUp
OworICAgIHZvaWQgd2FpdFVudGlsVGl0bGVDaGFuZ2VkKCk7CisgICAgdm9pZCBzaG93SW5XaW5k
b3coR3RrV2luZG93VHlwZSA9IEdUS19XSU5ET1dfUE9QVVApOworICAgIHZvaWQgc2hvd0luV2lu
ZG93QW5kV2FpdFVudGlsTWFwcGVkKEd0a1dpbmRvd1R5cGUgPSBHVEtfV0lORE9XX1BPUFVQKTsK
KyAgICB2b2lkIHJlc2l6ZVZpZXcoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKyAgICB2b2lkIHNl
bGVjdEFsbCgpOworICAgIGNvbnN0IGNoYXIqIG1haW5SZXNvdXJjZURhdGEoc2l6ZV90JiBtYWlu
UmVzb3VyY2VEYXRhU2l6ZSk7CisKKyAgICB2b2lkIG1vdXNlTW92ZVRvKGludCB4LCBpbnQgeSwg
dW5zaWduZWQgaW50IG1vdXNlTW9kaWZpZXJzID0gMCk7CisgICAgdm9pZCBjbGlja01vdXNlQnV0
dG9uKGludCB4LCBpbnQgeSwgdW5zaWduZWQgaW50IGJ1dHRvbiA9IDEsIHVuc2lnbmVkIGludCBt
b3VzZU1vZGlmaWVycyA9IDApOworICAgIHZvaWQga2V5U3Ryb2tlKHVuc2lnbmVkIGludCBrZXlW
YWwsIHVuc2lnbmVkIGludCBrZXlNb2RpZmllcnMgPSAwKTsKKworICAgIFdlYktpdEphdmFzY3Jp
cHRSZXN1bHQqIHJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZChjb25zdCBjaGFyKiBq
YXZhc2NyaXB0LCBHRXJyb3IqKik7CisgICAgV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCogcnVuSmF2
YVNjcmlwdEZyb21HUmVzb3VyY2VBbmRXYWl0VW50aWxGaW5pc2hlZChjb25zdCBjaGFyKiByZXNv
dXJjZSwgR0Vycm9yKiopOworCisgICAgLy8gSmF2YXNjcmlwdCByZXN1bHQgaGVscGVycy4KKyAg
ICBzdGF0aWMgY2hhciogamF2YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhXZWJLaXRKYXZhc2NyaXB0
UmVzdWx0Kik7CisgICAgc3RhdGljIGRvdWJsZSBqYXZhc2NyaXB0UmVzdWx0VG9OdW1iZXIoV2Vi
S2l0SmF2YXNjcmlwdFJlc3VsdCopOworICAgIHN0YXRpYyBib29sIGphdmFzY3JpcHRSZXN1bHRU
b0Jvb2xlYW4oV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCopOworICAgIHN0YXRpYyBib29sIGphdmFz
Y3JpcHRSZXN1bHRJc051bGwoV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCopOworICAgIHN0YXRpYyBi
b29sIGphdmFzY3JpcHRSZXN1bHRJc1VuZGVmaW5lZChXZWJLaXRKYXZhc2NyaXB0UmVzdWx0Kik7
CisKKyAgICBjYWlyb19zdXJmYWNlX3QqIGdldFNuYXBzaG90QW5kV2FpdFVudGlsUmVhZHkoV2Vi
S2l0U25hcHNob3RSZWdpb24sIFdlYktpdFNuYXBzaG90T3B0aW9ucyk7CisKKyAgICBXZWJLaXRX
ZWJWaWV3KiBtX3dlYlZpZXc7CisgICAgR01haW5Mb29wKiBtX21haW5Mb29wOworICAgIENTdHJp
bmcgbV9hY3RpdmVVUkk7CisgICAgR3RrV2lkZ2V0KiBtX3BhcmVudFdpbmRvdzsKKyAgICBDU3Ry
aW5nIG1fZXhwZWN0ZWRUaXRsZTsKKyAgICBXZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBtX2phdmFz
Y3JpcHRSZXN1bHQ7CisgICAgR0Vycm9yKiogbV9qYXZhc2NyaXB0RXJyb3I7CisgICAgR093blB0
cjxjaGFyPiBtX3Jlc291cmNlRGF0YTsKKyAgICBzaXplX3QgbV9yZXNvdXJjZURhdGFTaXplOwor
ICAgIGNhaXJvX3N1cmZhY2VfdCogbV9zdXJmYWNlOworCitwcml2YXRlOgorICAgIHZvaWQgZG9N
b3VzZUJ1dHRvbkV2ZW50KEdka0V2ZW50VHlwZSwgaW50LCBpbnQsIHVuc2lnbmVkIGludCwgdW5z
aWduZWQgaW50KTsKK307CisKKyNlbmRpZiAvLyBXZWJWaWV3VGVzdF9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220373</attachid>
            <date>2014-01-04 02:00:58 -0800</date>
            <delta_ts>2014-01-04 12:31:06 -0800</delta_ts>
            <desc>Updated patch to fix the style issues</desc>
            <filename>wk-test-webkit-api.diff</filename>
            <type>text/plain</type>
            <size>1831891</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAzZGMwYjliLi5kNDFkZDc2
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAK
KzIwMTQtMDEtMDMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgor
CisgICAgICAgIFtHVEtdIE1vdmUgYWxsIEdUSy9HT2JqZWN0IHVuaXQgdGVzdHMgdG8gVG9vbHMv
VGVzdFdlYktpdEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTI2MzQyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBHTlVtYWtlZmlsZS5hbTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZS4KKwogMjAxNC0w
MS0wMyAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CiAKICAgICAgICAg
W0NNYWtlXSBUaGUgZm9yd2FyZGluZyBoZWFkZXJzIGdlbmVyYXRlZCBieSBXZWJLaXRNYWNyb3Mu
bTQgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoZSBoZWFkZXJzIGdlbmVyYXRlZCBieSBnZW5lcmF0
ZS1mb3J3YXJkaW5nLWhlYWRlcnMucGwKZGlmZiAtLWdpdCBhL0dOVW1ha2VmaWxlLmFtIGIvR05V
bWFrZWZpbGUuYW0KaW5kZXggYjNmMGEwNC4uNTRkYTJiMSAxMDA2NDQKLS0tIGEvR05VbWFrZWZp
bGUuYW0KKysrIGIvR05VbWFrZWZpbGUuYW0KQEAgLTU5LDcgKzU5LDYgQEAgbm9pbnN0X0hFQURF
UlMgOj0KIG5vaW5zdF9MVExJQlJBUklFUyA6PQogbGliX0xUTElCUkFSSUVTIDo9CiBJRExfQklO
RElOR1MgOj0KLVRFU1RfUFJPR1MgOj0KIFBPRklMRVMgOj0KIFBPX0xJTkdVQVMgOj0KIFVTRVJf
TElOR1VBUyA6PQpAQCAtMjE0LDggKzIxMyw2IEBAIGluY2x1ZGUgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvR05VbWFrZWZpbGUuYW0KIGluY2x1ZGUgU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9H
TlVtYWtlZmlsZS5hbQogCiBpZiBFTkFCTEVfREVWRUxPUEVSX01PREUKLWluY2x1ZGUgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KLWluY2x1ZGUg
U291cmNlL1dlYktpdC9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KIGluY2x1ZGUgU291cmNlL1Ro
aXJkUGFydHkvZ3Rlc3QvR05VbWFrZWZpbGUuYW0KIGluY2x1ZGUgVG9vbHMvR05VbWFrZWZpbGUu
YW0KIGluY2x1ZGUgVG9vbHMvVGVzdFdlYktpdEFQSS9HTlVtYWtlZmlsZS5hbQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdl
TG9nCmluZGV4IGI0OTBhNjUuLmZjOTdkNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3Rr
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
MyBAQAorMjAxNC0wMS0wMyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5j
b20+CisKKyAgICAgICAgW0dUS10gTW92ZSBhbGwgR1RLL0dPYmplY3QgdW5pdCB0ZXN0cyB0byBU
b29scy9UZXN0V2ViS2l0QVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjYzNDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIHRlc3RzL0NNYWtlTGlzdHMudHh0OiBSZW1vdmVkLgorICAgICAgICAqIHRl
c3RzL0dOVW1ha2VmaWxlLmFtOiBSZW1vdmVkLgorCiAyMDE0LTAxLTAyICBDYXJsb3MgR2FyY2lh
IENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIxNjAz
MDQpOiBbR1RLXSBEaXNhYmxlIGxpYnRvb2wgZmFzdCBpbnN0YWxsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay90ZXN0cy9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rl
c3RzL0NNYWtlTGlzdHMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTFhOTlm
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL0NNYWtlTGlzdHMudHh0Cisr
KyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotYWRkX2RlZmluaXRpb25zKC1EVEVTVF9QTFVH
SU5fRElSPSIke0NNQUtFX0xJQlJBUllfT1VUUFVUX0RJUkVDVE9SWX0iKQotaW5jbHVkZV9kaXJl
Y3RvcmllcygKLSAgICAke0NNQUtFX0JJTkFSWV9ESVJ9Ci0gICAgJHtDTUFLRV9TT1VSQ0VfRElS
fS9Tb3VyY2UKLSAgICAke0NNQUtFX1NPVVJDRV9ESVJ9L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9G
b3J3YXJkaW5nSGVhZGVycwotICAgICR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNlL1dlYktpdC9n
dGsKLSAgICAke0NNQUtFX1NPVVJDRV9ESVJ9L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0awot
ICAgICR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNlL1dlYkNvcmUvcGxhdGZvcm0KLSAgICAke0NN
QUtFX1NPVVJDRV9ESVJ9L1NvdXJjZS9XVEYKLSAgICAke0RFUklWRURfU09VUkNFU19ESVJ9Ci0g
ICAgJHtERVJJVkVEX1NPVVJDRVNfV0VCS0lUR1RLX0RJUn0KLSAgICAke0dMSUJfSU5DTFVERV9E
SVJTfQotICAgICR7R1RLM19JTkNMVURFX0RJUlN9Ci0gICAgJHtMSUJTT1VQX0lOQ0xVREVfRElS
U30KLSkKLQotbWFjcm8oQUREX1dLMV9URVNUIHRlc3RfbmFtZSkKLSAgICBhZGRfZXhlY3V0YWJs
ZSgke3Rlc3RfbmFtZX0gJHtBUkdOfSkKLSAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoJHt0ZXN0
X25hbWV9Ci0gICAgICAgIEphdmFTY3JpcHRDb3JlCi0gICAgICAgIFdlYktpdAotICAgICAgICAk
e0dMSUJfTElCUkFSSUVTfQotICAgICAgICAke0dUSzNfTElCUkFSSUVTfQotICAgICAgICAke0xJ
QlNPVVBfTElCUkFSSUVTfQotICAgICkKLSAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoJHt0ZXN0
X25hbWV9IFBST1BFUlRJRVMKLSAgICAgICAgUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZICR7Q01B
S0VfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZfS9XZWJLaXQxR09iamVjdEFQSVRlc3RzCi0gICAg
KQotZW5kbWFjcm8oKQotCi1BRERfV0sxX1RFU1QodGVzdGFwcGxpY2F0aW9uY2FjaGUgdGVzdGFw
cGxpY2F0aW9uY2FjaGUuYykKLUFERF9XSzFfVEVTVCh0ZXN0YXRrcm9sZXMgdGVzdGF0a3JvbGVz
LmMpCi1BRERfV0sxX1RFU1QodGVzdGF0ayB0ZXN0YXRrLmMpCi1BRERfV0sxX1RFU1QodGVzdGNv
bnRleHRtZW51IHRlc3Rjb250ZXh0bWVudS5jKQotQUREX1dLMV9URVNUKHRlc3Rjb3B5YW5kcGFz
dGUgdGVzdGNvcHlhbmRwYXN0ZS5jICR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2d0ay9HdGtWZXJz
aW9uaW5nLmMpCi1BRERfV0sxX1RFU1QodGVzdGRvbWRvY3VtZW50IHRlc3Rkb21kb2N1bWVudC5j
KQotQUREX1dLMV9URVNUKHRlc3Rkb21kb213aW5kb3cgdGVzdGRvbWRvbXdpbmRvdy5jKQotQURE
X1dLMV9URVNUKHRlc3Rkb21ub2RlIHRlc3Rkb21ub2RlLmMpCi1BRERfV0sxX1RFU1QodGVzdGRv
d25sb2FkIHRlc3Rkb3dubG9hZC5jKQotQUREX1dLMV9URVNUKHRlc3RmYXZpY29uZGF0YWJhc2Ug
dGVzdGZhdmljb25kYXRhYmFzZS5jIHRlc3RfdXRpbHMuYykKLUFERF9XSzFfVEVTVCh0ZXN0Z2xv
YmFscyB0ZXN0Z2xvYmFscy5jKQotQUREX1dLMV9URVNUKHRlc3RoaXR0ZXN0cmVzdWx0IHRlc3Ro
aXR0ZXN0cmVzdWx0LmMpCi1BRERfV0sxX1RFU1QodGVzdGh0dHBiYWNrZW5kIHRlc3RodHRwYmFj
a2VuZC5jKQotQUREX1dLMV9URVNUKHRlc3RrZXlldmVudHMgdGVzdGtleWV2ZW50cy5jKQotQURE
X1dLMV9URVNUKHRlc3Rsb2FkaW5nIHRlc3Rsb2FkaW5nLmMpCi1BRERfV0sxX1RFU1QodGVzdG1p
bWVoYW5kbGluZyB0ZXN0bWltZWhhbmRsaW5nLmMgdGVzdF91dGlscy5jKQotQUREX1dLMV9URVNU
KHRlc3RuZXR3b3JrcmVxdWVzdCB0ZXN0bmV0d29ya3JlcXVlc3QuYykKLUFERF9XSzFfVEVTVCh0
ZXN0bmV0d29ya3Jlc3BvbnNlIHRlc3RuZXR3b3JrcmVzcG9uc2UuYykKLUFERF9XSzFfVEVTVCh0
ZXN0d2ViYmFja2ZvcndhcmRsaXN0IHRlc3R3ZWJiYWNrZm9yd2FyZGxpc3QuYykKLUFERF9XSzFf
VEVTVCh0ZXN0d2ViZGF0YXNvdXJjZSB0ZXN0d2ViZGF0YXNvdXJjZS5jKQotQUREX1dLMV9URVNU
KHRlc3R3ZWJmcmFtZSB0ZXN0d2ViZnJhbWUuYykKLUFERF9XSzFfVEVTVCh0ZXN0d2ViaGlzdG9y
eWl0ZW0gdGVzdHdlYmhpc3RvcnlpdGVtLmMpCi1BRERfV0sxX1RFU1QodGVzdHdlYmluc3BlY3Rv
ciB0ZXN0d2ViaW5zcGVjdG9yLmMgdGVzdF91dGlscy5jKQotQUREX1dLMV9URVNUKHRlc3R3ZWJw
bHVnaW5kYXRhYmFzZSB0ZXN0d2VicGx1Z2luZGF0YWJhc2UuYykKLUFERF9XSzFfVEVTVCh0ZXN0
d2VicmVzb3VyY2UgdGVzdHdlYnJlc291cmNlLmMpCi1BRERfV0sxX1RFU1QodGVzdHdlYnNldHRp
bmdzIHRlc3R3ZWJzZXR0aW5ncy5jKQotQUREX1dLMV9URVNUKHRlc3R3ZWJ2aWV3IHRlc3R3ZWJ2
aWV3LmMgdGVzdF91dGlscy5jKQotQUREX1dLMV9URVNUKHRlc3R3aW5kb3cgdGVzdHdpbmRvdy5j
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0gYi9T
b3VyY2UvV2ViS2l0L2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggOGI4NmE3My4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0
cy9HTlVtYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDIwOCArMCwwIEBACi0jIEJ1aWxk
IHVuaXQgdGVzdHMKLXdlYmtpdF90ZXN0c19jZmxhZ3MgPSBcCi0JLWZuby1zdHJpY3QtYWxpYXNp
bmcgXAotCS1JJChzcmNkaXIpL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Gb3J3YXJkaW5nSGVhZGVy
cyBcCi0JLUkkKFdlYktpdCkgXAotCS1JJChHRU5TT1VSQ0VTKSBcCi0JLUkkKHRvcF9idWlsZGRp
cikvU291cmNlL1dlYktpdC9ndGsgXAotCS1JJCh0b3Bfc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncyBcCi0JLUkkKHRvcF9zcmNkaXIpL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmpl
Y3QgXAotCSQoZ2xvYmFsX2NwcGZsYWdzKSBcCi0JJChnbG9iYWxfY2ZsYWdzKSBcCi0JJChqYXZh
c2NyaXB0Y29yZV9jcHBmbGFncykgXAotCSQoRlJFRVRZUEVfQ0ZMQUdTKSBcCi0JJChHTElCX0NG
TEFHUykgXAotCSQoR1RLX0NGTEFHUykgXAotCSQoTElCU09VUF9DRkxBR1MpIFwKLQkkKFhSRU5E
RVJfQ0ZMQUdTKSBcCi0JJChYVF9DRkxBR1MpCi0KLXdlYmtpdF90ZXN0c19sZGFkZCA9IFwKLQls
aWJqYXZhc2NyaXB0Y29yZWd0ay1AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQC5AV0VCS0lU
R1RLX0FQSV9NSU5PUl9WRVJTSU9OQC5sYSBcCi0JbGlid2Via2l0Z3RrLUBXRUJLSVRHVEtfQVBJ
X01BSk9SX1ZFUlNJT05ALkBXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05ALmxhIFwKLQkkKEZS
RUVUWVBFX0xJQlMpIFwKLQkkKEdUS19MSUJTKSBcCi0JJChHTElCX0xJQlMpIFwKLQkkKExJQlNP
VVBfTElCUykgXAotCSQoWFJFTkRFUl9MSUJTKQotCi13ZWJraXRfdGVzdHNfbGRmbGFncyA9IFwK
LQktbm8taW5zdGFsbAotCi1pZiBFTkFCTEVfV0VCS0lUMQotbm9pbnN0X1BST0dSQU1TICs9IFwK
LQlQcm9ncmFtcy9XZWJLaXQxR09iamVjdEFQSVRlc3RzL3Rlc3RhcHBsaWNhdGlvbmNhY2hlIFwK
LQlQcm9ncmFtcy9XZWJLaXQxR09iamVjdEFQSVRlc3RzL3Rlc3Rjb250ZXh0bWVudSBcCi0JUHJv
Z3JhbXMvV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0ZG9tZG9jdW1lbnQgXAotCVByb2dyYW1z
L1dlYktpdDFHT2JqZWN0QVBJVGVzdHMvdGVzdGRvbWRvbXdpbmRvdyBcCi0JUHJvZ3JhbXMvV2Vi
S2l0MUdPYmplY3RBUElUZXN0cy90ZXN0ZG9tbm9kZSBcCi0JUHJvZ3JhbXMvV2ViS2l0MUdPYmpl
Y3RBUElUZXN0cy90ZXN0aHR0cGJhY2tlbmQgXAotCVByb2dyYW1zL1dlYktpdDFHT2JqZWN0QVBJ
VGVzdHMvdGVzdGZhdmljb25kYXRhYmFzZSBcCi0JUHJvZ3JhbXMvV2ViS2l0MUdPYmplY3RBUElU
ZXN0cy90ZXN0bG9hZGluZyBcCi0JUHJvZ3JhbXMvV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0
Z2xvYmFscyBcCi0JUHJvZ3JhbXMvV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0bWltZWhhbmRs
aW5nIFwKLQlQcm9ncmFtcy9XZWJLaXQxR09iamVjdEFQSVRlc3RzL3Rlc3RuZXR3b3JrcmVxdWVz
dCBcCi0JUHJvZ3JhbXMvV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0bmV0d29ya3Jlc3BvbnNl
IFwKLQlQcm9ncmFtcy9XZWJLaXQxR09iamVjdEFQSVRlc3RzL3Rlc3R3ZWJmcmFtZSBcCi0JUHJv
Z3JhbXMvV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0d2ViYmFja2ZvcndhcmRsaXN0IFwKLQlQ
cm9ncmFtcy9XZWJLaXQxR09iamVjdEFQSVRlc3RzL3Rlc3R3ZWJoaXN0b3J5aXRlbSBcCi0JUHJv
Z3JhbXMvV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0d2luZG93IFwKLQlQcm9ncmFtcy9XZWJL
aXQxR09iamVjdEFQSVRlc3RzL3Rlc3Rkb3dubG9hZCBcCi0JUHJvZ3JhbXMvV2ViS2l0MUdPYmpl
Y3RBUElUZXN0cy90ZXN0YXRrIFwKLQlQcm9ncmFtcy9XZWJLaXQxR09iamVjdEFQSVRlc3RzL3Rl
c3RhdGtyb2xlcyBcCi0JUHJvZ3JhbXMvV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0aGl0dGVz
dHJlc3VsdCBcCi0JUHJvZ3JhbXMvV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0d2ViaW5zcGVj
dG9yIFwKLQlQcm9ncmFtcy9XZWJLaXQxR09iamVjdEFQSVRlc3RzL3Rlc3R3ZWJzZXR0aW5ncyBc
Ci0JUHJvZ3JhbXMvV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0d2VicmVzb3VyY2UgXAotCVBy
b2dyYW1zL1dlYktpdDFHT2JqZWN0QVBJVGVzdHMvdGVzdHdlYmRhdGFzb3VyY2UgXAotCVByb2dy
YW1zL1dlYktpdDFHT2JqZWN0QVBJVGVzdHMvdGVzdHdlYnBsdWdpbmRhdGFiYXNlIFwKLQlQcm9n
cmFtcy9XZWJLaXQxR09iamVjdEFQSVRlc3RzL3Rlc3R3ZWJ2aWV3IFwKLQlQcm9ncmFtcy9XZWJL
aXQxR09iamVjdEFQSVRlc3RzL3Rlc3RrZXlldmVudHMgXAotCVByb2dyYW1zL1dlYktpdDFHT2Jq
ZWN0QVBJVGVzdHMvdGVzdGNvcHlhbmRwYXN0ZQotZW5kaWYKLQotIyBBZGQgYWRkaXRpb25hbCB0
ZXN0cyBoZXJlCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RhcHBsaWNhdGlv
bmNhY2hlX1NPVVJDRVMgPSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXBwbGljYXRpb25j
YWNoZS5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RhcHBsaWNhdGlvbmNh
Y2hlX0NGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykKLVByb2dyYW1zX1dlYktpdDFHT2Jq
ZWN0QVBJVGVzdHNfdGVzdGFwcGxpY2F0aW9uY2FjaGVfTERBREQgPSAkKHdlYmtpdF90ZXN0c19s
ZGFkZCkKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGFwcGxpY2F0aW9uY2Fj
aGVfTERGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDFH
T2JqZWN0QVBJVGVzdHNfdGVzdGNvbnRleHRtZW51X1NPVVJDRVMgPSBTb3VyY2UvV2ViS2l0L2d0
ay90ZXN0cy90ZXN0Y29udGV4dG1lbnUuYwotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0
c190ZXN0Y29udGV4dG1lbnVfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQotUHJvZ3Jh
bXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0Y29udGV4dG1lbnVfTERBREQgPSAkKHdlYmtp
dF90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGNvbnRl
eHRtZW51X0xERkxBR1MgPSAkKHdlYmtpdF90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJL
aXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rkb21kb2N1bWVudF9TT1VSQ0VTID0gU291cmNlL1dlYktp
dC9ndGsvdGVzdHMvdGVzdGRvbWRvY3VtZW50LmMKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJ
VGVzdHNfdGVzdGRvbWRvY3VtZW50X0NGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykKLVBy
b2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGRvbWRvY3VtZW50X0xEQUREID0gJCh3
ZWJraXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rk
b21kb2N1bWVudF9MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNf
V2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0ZG9tZG9td2luZG93X1NPVVJDRVMgPSBTb3VyY2Uv
V2ViS2l0L2d0ay90ZXN0cy90ZXN0ZG9tZG9td2luZG93LmMKLVByb2dyYW1zX1dlYktpdDFHT2Jq
ZWN0QVBJVGVzdHNfdGVzdGRvbWRvbXdpbmRvd19DRkxBR1MgPSAkKHdlYmtpdF90ZXN0c19jZmxh
Z3MpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rkb21kb213aW5kb3dfTERB
REQgPSAkKHdlYmtpdF90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVz
dHNfdGVzdGRvbWRvbXdpbmRvd19MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFncykKLQot
UHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0ZG9tbm9kZV9TT1VSQ0VTID0gU291
cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvbW5vZGUuYwotUHJvZ3JhbXNfV2ViS2l0MUdPYmpl
Y3RBUElUZXN0c190ZXN0ZG9tbm9kZV9DRkxBR1MgPSAkKHdlYmtpdF90ZXN0c19jZmxhZ3MpCi1Q
cm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rkb21ub2RlX0xEQUREID0gJCh3ZWJr
aXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rkb21u
b2RlX0xERkxBR1MgPSAkKHdlYmtpdF90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQx
R09iamVjdEFQSVRlc3RzX3Rlc3RodHRwYmFja2VuZF9TT1VSQ0VTID0gU291cmNlL1dlYktpdC9n
dGsvdGVzdHMvdGVzdGh0dHBiYWNrZW5kLmMKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVz
dHNfdGVzdGh0dHBiYWNrZW5kX0NGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykKLVByb2dy
YW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGh0dHBiYWNrZW5kX0xEQUREID0gJCh3ZWJr
aXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RodHRw
YmFja2VuZF9MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2Vi
S2l0MUdPYmplY3RBUElUZXN0c190ZXN0ZmF2aWNvbmRhdGFiYXNlX1NPVVJDRVMgPSBTb3VyY2Uv
V2ViS2l0L2d0ay90ZXN0cy90ZXN0ZmF2aWNvbmRhdGFiYXNlLmMgU291cmNlL1dlYktpdC9ndGsv
dGVzdHMvdGVzdF91dGlscy5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rm
YXZpY29uZGF0YWJhc2VfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQotUHJvZ3JhbXNf
V2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0ZmF2aWNvbmRhdGFiYXNlX0xEQUREID0gJCh3ZWJr
aXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RmYXZp
Y29uZGF0YWJhc2VfTERGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1z
X1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGdsb2JhbHNfU09VUkNFUyA9IFNvdXJjZS9XZWJL
aXQvZ3RrL3Rlc3RzL3Rlc3RnbG9iYWxzLmMKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVz
dHNfdGVzdGdsb2JhbHNfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQotUHJvZ3JhbXNf
V2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0Z2xvYmFsc19MREFERCA9ICQod2Via2l0X3Rlc3Rz
X2xkYWRkKQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0Z2xvYmFsc19MREZM
QUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RB
UElUZXN0c190ZXN0bG9hZGluZ19TT1VSQ0VTID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVz
dGxvYWRpbmcuYwotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0bG9hZGluZ19D
RkxBR1MgPSAkKHdlYmtpdF90ZXN0c19jZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQ
SVRlc3RzX3Rlc3Rsb2FkaW5nX0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFt
c19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rsb2FkaW5nX0xERkxBR1MgPSAkKHdlYmtpdF90
ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RtaW1l
aGFuZGxpbmdfU09VUkNFUyA9IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RtaW1laGFuZGxp
bmcuYyBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0X3V0aWxzLmMKLVByb2dyYW1zX1dlYktp
dDFHT2JqZWN0QVBJVGVzdHNfdGVzdG1pbWVoYW5kbGluZ19DRkxBR1MgPSAkKHdlYmtpdF90ZXN0
c19jZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RtaW1laGFuZGxp
bmdfTERBREQgPSAkKHdlYmtpdF90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0
QVBJVGVzdHNfdGVzdG1pbWVoYW5kbGluZ19MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFn
cykKLQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0bmV0d29ya3JlcXVlc3Rf
U09VUkNFUyA9IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RuZXR3b3JrcmVxdWVzdC5jCi1Q
cm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RuZXR3b3JrcmVxdWVzdF9DRkxBR1Mg
PSAkKHdlYmtpdF90ZXN0c19jZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3Rz
X3Rlc3RuZXR3b3JrcmVxdWVzdF9MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQotUHJvZ3Jh
bXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0bmV0d29ya3JlcXVlc3RfTERGTEFHUyA9ICQo
d2Via2l0X3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNf
dGVzdG5ldHdvcmtyZXNwb25zZV9TT1VSQ0VTID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVz
dG5ldHdvcmtyZXNwb25zZS5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Ru
ZXR3b3JrcmVzcG9uc2VfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQotUHJvZ3JhbXNf
V2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0bmV0d29ya3Jlc3BvbnNlX0xEQUREID0gJCh3ZWJr
aXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RuZXR3
b3JrcmVzcG9uc2VfTERGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1z
X1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYmZyYW1lX1NPVVJDRVMgPSBTb3VyY2UvV2Vi
S2l0L2d0ay90ZXN0cy90ZXN0d2ViZnJhbWUuYwotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElU
ZXN0c190ZXN0d2ViZnJhbWVfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQotUHJvZ3Jh
bXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0d2ViZnJhbWVfTERBREQgPSAkKHdlYmtpdF90
ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYmZyYW1l
X0xERkxBR1MgPSAkKHdlYmtpdF90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQxR09i
amVjdEFQSVRlc3RzX3Rlc3R3ZWJwbHVnaW5kYXRhYmFzZV9TT1VSQ0VTID0gU291cmNlL1dlYktp
dC9ndGsvdGVzdHMvdGVzdHdlYnBsdWdpbmRhdGFiYXNlLmMKLVByb2dyYW1zX1dlYktpdDFHT2Jq
ZWN0QVBJVGVzdHNfdGVzdHdlYnBsdWdpbmRhdGFiYXNlX0NGTEFHUyA9IC1EVEVTVF9QTFVHSU5f
RElSPVwiJHtzaGVsbCBwd2R9LyR7dG9wX2J1aWxkZGlyfS9UZXN0TmV0c2NhcGVQbHVnaW4vLmxp
YnNcIiAkKHdlYmtpdF90ZXN0c19jZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRl
c3RzX3Rlc3R3ZWJwbHVnaW5kYXRhYmFzZV9MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQot
UHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0d2VicGx1Z2luZGF0YWJhc2VfTERG
TEFHUyA9ICQod2Via2l0X3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0
QVBJVGVzdHNfdGVzdHdlYmJhY2tmb3J3YXJkbGlzdF9TT1VSQ0VTID0gU291cmNlL1dlYktpdC9n
dGsvdGVzdHMvdGVzdHdlYmJhY2tmb3J3YXJkbGlzdC5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVj
dEFQSVRlc3RzX3Rlc3R3ZWJiYWNrZm9yd2FyZGxpc3RfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNf
Y2ZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0d2ViYmFja2Zvcndh
cmRsaXN0X0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQxR09i
amVjdEFQSVRlc3RzX3Rlc3R3ZWJiYWNrZm9yd2FyZGxpc3RfTERGTEFHUyA9ICQod2Via2l0X3Rl
c3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYmhp
c3RvcnlpdGVtX1NPVVJDRVMgPSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2ViaGlzdG9y
eWl0ZW0uYwotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0d2ViaGlzdG9yeWl0
ZW1fQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0MUdPYmpl
Y3RBUElUZXN0c190ZXN0d2ViaGlzdG9yeWl0ZW1fTERBREQgPSAkKHdlYmtpdF90ZXN0c19sZGFk
ZCkKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYmhpc3RvcnlpdGVtX0xE
RkxBR1MgPSAkKHdlYmtpdF90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQxR09iamVj
dEFQSVRlc3RzX3Rlc3R3aW5kb3dfU09VUkNFUyA9IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rl
c3R3aW5kb3cuYwotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0d2luZG93X0NG
TEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJ
VGVzdHNfdGVzdHdpbmRvd19MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNf
V2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0d2luZG93X0xERkxBR1MgPSAkKHdlYmtpdF90ZXN0
c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rkb3dubG9h
ZF9TT1VSQ0VTID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvd25sb2FkLmMKLVByb2dy
YW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGRvd25sb2FkX0NGTEFHUyA9ICQod2Via2l0
X3Rlc3RzX2NmbGFncykKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGRvd25s
b2FkX0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVj
dEFQSVRlc3RzX3Rlc3Rkb3dubG9hZF9MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFncykK
LQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0YXRrX1NPVVJDRVMgPSBTb3Vy
Y2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXRrLmMKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJ
VGVzdHNfdGVzdGF0a19DRkxBR1MgPSAkKHdlYmtpdF90ZXN0c19jZmxhZ3MpCi1Qcm9ncmFtc19X
ZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RhdGtfTERBREQgPSAkKHdlYmtpdF90ZXN0c19sZGFk
ZCkKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGF0a19MREZMQUdTID0gJCh3
ZWJraXRfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190
ZXN0YXRrcm9sZXNfU09VUkNFUyA9IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhdGtyb2xl
cy5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RhdGtyb2xlc19DRkxBR1Mg
PSAkKHdlYmtpdF90ZXN0c19jZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3Rz
X3Rlc3RhdGtyb2xlc19MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfV2Vi
S2l0MUdPYmplY3RBUElUZXN0c190ZXN0YXRrcm9sZXNfTERGTEFHUyA9ICQod2Via2l0X3Rlc3Rz
X2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYmluc3Bl
Y3Rvcl9TT1VSQ0VTID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYmluc3BlY3Rvci5j
IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RfdXRpbHMuYwotUHJvZ3JhbXNfV2ViS2l0MUdP
YmplY3RBUElUZXN0c190ZXN0d2ViaW5zcGVjdG9yX0NGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2Nm
bGFncykKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYmluc3BlY3Rvcl9M
REFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElU
ZXN0c190ZXN0d2ViaW5zcGVjdG9yX0xERkxBR1MgPSAkKHdlYmtpdF90ZXN0c19sZGZsYWdzKQot
Ci1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3R3ZWJzZXR0aW5nc19TT1VSQ0VT
ID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYnNldHRpbmdzLmMKLVByb2dyYW1zX1dl
YktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYnNldHRpbmdzX0NGTEFHUyA9ICQod2Via2l0X3Rl
c3RzX2NmbGFncykKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYnNldHRp
bmdzX0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVj
dEFQSVRlc3RzX3Rlc3R3ZWJzZXR0aW5nc19MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFn
cykKLQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0d2VicmVzb3VyY2VfU09V
UkNFUyA9IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJyZXNvdXJjZS5jCi1Qcm9ncmFt
c19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3R3ZWJyZXNvdXJjZV9DRkxBR1MgPSAkKHdlYmtp
dF90ZXN0c19jZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3R3ZWJy
ZXNvdXJjZV9MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQotCi1Qcm9ncmFtc19XZWJLaXQx
R09iamVjdEFQSVRlc3RzX3Rlc3R3ZWJkYXRhc291cmNlX1NPVVJDRVMgPSBTb3VyY2UvV2ViS2l0
L2d0ay90ZXN0cy90ZXN0d2ViZGF0YXNvdXJjZS5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQ
SVRlc3RzX3Rlc3R3ZWJkYXRhc291cmNlX0NGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykK
LVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYmRhdGFzb3VyY2VfTERBREQg
PSAkKHdlYmtpdF90ZXN0c19sZGFkZCkKLQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0
c190ZXN0d2Vidmlld19TT1VSQ0VTID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYnZp
ZXcuYyBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0X3V0aWxzLmMKLVByb2dyYW1zX1dlYktp
dDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYnZpZXdfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2Zs
YWdzKQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0d2Vidmlld19MREFERCA9
ICQod2Via2l0X3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190
ZXN0d2Vidmlld19MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNf
V2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0aGl0dGVzdHJlc3VsdF9TT1VSQ0VTID0gU291cmNl
L1dlYktpdC9ndGsvdGVzdHMvdGVzdGhpdHRlc3RyZXN1bHQuYwotUHJvZ3JhbXNfV2ViS2l0MUdP
YmplY3RBUElUZXN0c190ZXN0aGl0dGVzdHJlc3VsdF9DRkxBR1MgPSAkKHdlYmtpdF90ZXN0c19j
ZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RoaXR0ZXN0cmVzdWx0
X0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQpCi0KLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0
QVBJVGVzdHNfdGVzdGtleWV2ZW50c19TT1VSQ0VTID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMv
dGVzdGtleWV2ZW50cy5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RrZXll
dmVudHNfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0MUdP
YmplY3RBUElUZXN0c190ZXN0a2V5ZXZlbnRzX0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQp
Ci1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RrZXlldmVudHNfTERGTEFHUyA9
ICQod2Via2l0X3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVz
dHNfdGVzdGNvcHlhbmRwYXN0ZV9TT1VSQ0VTID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVz
dGNvcHlhbmRwYXN0ZS5jIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVmVyc2lv
bmluZy5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rjb3B5YW5kcGFzdGVf
Q0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKSBcCi0JLUkkKHNyY2RpcikvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrIFwKLQktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZQotUHJvZ3Jh
bXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0Y29weWFuZHBhc3RlX0xEQUREID0gJCh3ZWJr
aXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rjb3B5
YW5kcGFzdGVfTERGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2xkZmxhZ3MpCi0KLUVYVFJBX0RJU1Qg
Kz0gIFwKLQkkKFdlYktpdCkvdGVzdHMvcmVzb3VyY2VzLyogXAotCSQoV2ViS2l0KS90ZXN0cy90
ZXN0X3V0aWxzLmgKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvcmVzb3Vy
Y2VzL2JsYW5rLmljbyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Jlc291cmNlcy9ibGFuay5p
Y28KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhODQ4Yjk5MTZlNTkwODQ0MTNmYzFl
N2EwOTBkZWJmNWY0OTE0ZGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmxpdGVyYWwgMTk4CnBj
bVpRelU8NSh8MFZYaUxmcXtXUjQyVSY9U09BQz5mRVhsPzM7aDU4QUQwd2UjUX1SWTFWako7Cgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3QuaHRtbCBi
L1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Jlc291cmNlcy90ZXN0Lmh0bWwKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDk4ZjdkNGYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9n
dGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3QuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBA
QAotPGh0bWw+Ci08aGVhZD48dGl0bGU+dGVzdDwvdGl0bGU+PC9oZWFkPgotPGJvZHk+dGVzdDwv
Ym9keT4KLTwvaHRtbD4+PC9oZWFkPgotPGJvZHk+dGVzdDwvYm9keT4KLTwvaHRtbD4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Jlc291cmNlcy90ZXN0Lm9nZyBiL1NvdXJj
ZS9XZWJLaXQvZ3RrL3Rlc3RzL3Jlc291cmNlcy90ZXN0Lm9nZwpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggN2YzYTNiOWM1ZDY0N2M3MmExNGQzYjQ5NmNjNjI2ZDQxMmY4YjAwZi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMApHSVQgYmluYXJ5IHBhdGNoCmxp
dGVyYWwgMApIY21WP2QwMDAwMQoKbGl0ZXJhbCAzMDEzMQp6Y21lRlpjVVYpfF9BdENwOFgqS3NB
aSs+e0xNUjNaUE4pS3dOa1M0c0g5JiRQbVB0WX1HekcqbWooUzVpZ3VubS0KelFxJjJkMm9XNFd6
Jjx4MUFTZmI4NSRqK2JZJUBDSklRNVMyTEZlQjBlKXMhNUA5JXFfLX1DK1Y/cV9HOFVEbj9GCno+
e1pUTWQhMm88WnApVHZmQj03bVI1Q2VwQXVERU49JUo8MSZUV35CcjBvazgyeVdaTDFyOFk+ZktO
bH43SkJ8Rwp6RWNBcm41X2pMMEhBSWhoe31HVE1NcF47YE5SclooJWh6UllwezZEJlYmMEVXNFdA
Y0FuRX1pZCV6JWFBQW9LQGQKelM1OG4yMWg4PDhYQmMlKkhDYCRQZkI9QlokPF5YdVZ6NnNkTUxx
cXE+SSVVXlpqZjE2VH5SbmxpUEwleHtXR0VaCnojRkdJKTBUdGJ9cX5TPyRAPnN3WSVDZUc3VHxp
UVZ8MXFrR0NVUCNvd0VyaVV4VUozSSVfJj5RVCVFRHp2MW9YcQp6ZkYqRnFDcSpxSjNiaks0MXhe
bXdYQVYwWUpEaURnWXRpTjR5b1Jae1ZPfiFnNEBMdyZaRH1ZOGRgOW1jPWFfa1AKelVrP2ZNb1F7
YiphUklZd0BBazJQWng4PktuNyZeSjZ9fWVeI3dNUD8hN2RFMWM1U1pDZ29wYURFR2tnSiVMSHI3
CnpOV3E8P0UxbVhOQyFFJih6PSpXK28kJSZHaV45Y2wqcypFLSZWKEJ+Y2loO3lGU2FePSF8OHBv
cn1IPD09NVA4cgp6VXJzNmJFQj48WW8xWWlyYD13Sk1wbVBrVWRnIVhCKzNGdHo9I2hCXlozcXkq
ZkQpPXtJbkF9YUEtRmopYDl4QSgKenVrdl9yK0xiUUdsYGl+eTVDRmotM3FoQXUreC04RWlMcTQp
fDl4YUJodXJgUiNedDM5YCU0KjR5ZU93am5HQlFuCno3Izs+Tk88N1RsIUF6Z0Ura0d4PVVqQGd0
Uz1eQ3x1Jlp5djdYNmI1M3VGZz88IUx7ZFZMdCs2QmckaGsofDcmJAp6KWk8Xz4tKylvRWZSWD1t
JGJRYytASW9BcEJ2dko+dS0+S2VfaD9iVSEmMig4TEhHfGQhMnMmfE43VU4hKzg/aDUKelNreWsm
d1VYKjRgd0ImTSVnKGVgKlMpNzs+WF4rI24za0BXWVgpXlM8Rih0emc3TExZQTk5fnIpfHNAb1VX
ZTshCnp6Q0NPKVdGdj4rbENJYTl3QkQ0IWVQaFJLcFJ9QUkhTVZiVXhAQTNRTD82Y2NpIUU5PUEw
RiFxeERXUnp5ajdRUwp6IyZpPiRgISlYWGNVTWdwPmkmfmBTVE5uPnZ5YERESW47ZTY3ek4zcCsy
UD5RdFM+QU0+TzY7Qzg8IVRCQEl6WDIKemc7NiVrbnpDfTx1YmNgJTlecEx+fDEpe2QkeylENnYw
VVNKblNPSEE+azRCYlh9ZFRVX2BLc0hBcWVqWWIxfW1nCno9SGxYPkNyN3VSMm9SKCtefl59IW48
fUQwVCQ/XmY2aWlmVmQ/XzFhXklre19zeHZSVTkpcVJnLXdGNTE9XkFtIwp6I0p8T0J1azlsKG8j
OG0pPHFfP0BTfVlROy08Y01CWHZnaFNgSX1+VWR+OypwSCNkcXVVMG0+PWpQKTxjMGtGe0kKenlf
ZC1maDFUPVo7b0p6MD0/NFA7USp0cyRtJil1JSVBNypHb1dpZCZ1S3dWJj9uaj5xRF8qMmVjcjx5
XzFiTjQjCnpid2FlP3JiKnZ+TnBac1QmVi14MjJeJnVCaXx6ZU9VX09ZPUgjY190bzgmQnIycloh
R3BgYVl+emE+WFVGTH5mIQp6O3V1YCs2a0cxe1M9RS1wK1NaeipQaDBpNHxCeEp8PTIqNG5tfEY5
I3hgYlg+bH5oPTNJSE9PIWVCJH1wfDJGPGgKemFASi0jITRafW1VWiZIKE5zaUllSl93ZWtFPUty
fEFKKHtmMCFDO1NafUducTAwM2h0S0pAKV9Ccj9pbEk/OHVDCnolMG56I3tlUEFpeE9MaG1lOXtM
LVkkWDZUMDZjMUpwNHd3IXNWRUk3V0drYDMxTk1VKDFEX3NsKnIre0Y+Y3xnJQp6PUAzMGlLPW85
UTJqYFFmOSFRZ3lZIT8rM3g1bz9FOT0kX1I0diQrKjtLdj5vKVl8fXlPT1NteShtb1VrT1dyflYK
em8mQDB9PSZJRiV3dCQwaSFpUXpHbnF8Zk5RMmR7ekBJKmU1Q14tSCMzX1FfPDIlN051WWM2O2Vx
Y0BNYDE4YjgxCnpkSDY1cGl1OHJue283bkRwS3o4YXtDX152e35oN35WJksyVTBMPGMkMV5sei0p
SH1FJVJRP2IrQFFfdGI0U3dhTAp6aWk+QDxZUFc1ZSl0dG43KXVMTEgkJHZAKnRZQ2xlKn1aaHRx
R3I9bHBHOE1hdUhgMkUlTXR8QyYpfGxtRnRBe3UKejtvSDd7QC09KVR1Zm5YRk8oKmhfNXZ3Tmls
S09xKmhYNEJKUX47PFQ2UUJaQ21zJFYxcnZgeH4wUkg5aXY5TnQxCnpDe0tXWkRrMWkkMj58NUBw
RHEyYmh4enxyYHlVZlJEbW5sTV5iK2ZJYHp3ZiZ4TDgmPiElUCtuIWpaZGVTdE11eQp6N19vNDdj
MFNKNUNVbD44WEZ4IU14cGROJT5wcWM+e0h2T2hedXJtOSZgRUF0MCZEfm8odE99N0Ajd2RvSEpl
YGgKejVuZVo0cWZiSj4+SUZ0U2RJOVp6JGBGUXlQJnBnfHM3fUNtLUBvZWRYTGBCQHd4MH1fR1o8
SFg8VktSaHFzNXlKCnpKKE5eXlRkMWVrSFhGX15oYk94QlVQWnlpb3dEe3spanJgUV8kZHJPalc7
Yz5lTnduRWcyOGFZNDJHUWEzNU93WAp6cCFMZXk9MmlvJk5tJWF6cip+e3h0WGAteXp9Znx8MDNf
YVlxY1RDMjFvdTA4ZmBKciREQklgXmhHJUNfeEwqT1YKejBkPSE3QXI+PllRMGlnO0ZsVTRTKXJi
dW9ZM2FoK2dgYSl9TlZaKXhwb1YhdEQtWkUoIXBCKjFhUHsmcWo9Jio0CnpEJDMyWjNDRDRCdThk
Kn1uaWB8TExPaHpQcVI8WU48c3ElcSM7N1ApRypCKF5oa3BgbWVuQUB3YH5Ye2ZhVFNXdQp6Zk56
flJBKVplVFo/fC00cVFLQCZEPUJXbCM7R1h4Z3plO3JrZGJQKlpkcEAyNDByZm9SM0tidTBVSTF5
RmkyeFgKejZsZWJNY0cmKG4wKXMkK14jUitPKUNpYGY9c21qMHomTikrdUF8RmZiTylDPWV8Ql5r
WV99JHRILTR6OFUzS2oqCno/MDxJakZDMXJYZn5tMjlEQ2E4K0ctQD4lYUJ5aTdNcFhXU3k9eVEk
QDkkbH18Qlc1OytZODhsZSUxKSVlTWZATAp6PT5fJThGYXV5K0lzazRSQCpRfnheX0BtbyhJRlB9
V3U3UDI2fUd1QjR2aHFreiV7QDB8SD1ONDNodHZLe0l4XnoKeik1YHpLVyNJbU8qWWR5akZhTGsk
V35DfFpKdSFlWG1YQm5gPGBzTGxJVU9PRlU+NGhVU3B1dm5PbSgpfWJLYT88CnpKUzJxNyhGVnwr
RTMyZk1jOD1OOyt0ZkhFUDQlP0M3R1A0fVNSdks4X0NBMEsxbFBlIWsjMDB8WHNWREZkR3UyMQp6
UVhPRWJyTkRKQC1YVDQzOWxWcWpNI3Zlc3U1KngqUXB9XipaQ0dlY1k0PiR+eWdqc1lTe20yWjxJ
PG9sVSNNJkEKem5XMHJnY0AyQEc7YXFKVmJMZU1FVCR8XiYodTA9JHpidVhSZlBxdEJVVH07clpY
SkBzakFOUmhFJXVuTSpnbDJeCnp0a3dSMjx4RjhPdmtfYSU4JSE1M1JsTyg3OEYmdX52KTw0R2hi
ezBgUjNsfE8leDJXUWdgSFI8X0koMnpIWk5oQwp6Kn5JO2BwKzJ1WD5ONEQ4cCNoJUd4b1BTezVC
aD43OU1ieCloTmc7JnNQfSFiP0BlVFFFNHBCKlRFZV9yNWU0X2wKemh2KWNVSkhyVVUhRT9OQzIh
WGUoQiMhQmFoS2gwK3VJYUFeY3BgWkd6WiYzKTs5KS1XZkhNbXdjO3kxQExnc3ppCnp4eyFtNUFK
UHZFUDRHbDs8JWc8O2lRd1gyPEdyNyNCRmdQVTVxfHQ0N29MOE9aWE4+Pi1YflRlKXs/eCFTbnAq
UAp6LWt9anBJPWc0MiRGLVQ0Z00tX0hfX2p9VWprQ2NmNG4zMDQxUzxQLWFMQUR5dFNoRTlVK2RP
WGVYeHBpcjgpfCkKemFRRHA4ZGFlejRFYUZfRXo+bi00MEZYcDREPWRrWG9zOT9uRUl9eSg7TFB3
I0Y3akJjPHFpIS1VMyFAUnZMayl+Cnp1K3tHITM0ZDg9MDR6OFg3UFFjWVY2SG48SGNCV3w0Xmxu
clpSdXshTll4O15VQHNVUnBCMD10dHkrJVVJNms8Xgp6Z29FVn1hd1BVRiRrZ0JlZSE7U1B1ayEy
Oz4hTC1eU252PTRFQ3FBJHF3T1ozKGV5UEI9VUBFLU9vPXVRdUFUdkcKejtgYD42OzE+VntRN1d9
c2BOVGhQKWZ5SXUlTkstJU1GYDs9ZlpsNks3SiN0VzUxWX0yRzhYJjY+JW0mfnpXQDgxCnpVOWZC
SUM9WWB1OD5QfGooJSlAPXg5NDVLeVdEcDw/Kygxdnl4UiszOX15P1FOKFBmWHM5ay0jKktfVD57
a0JzTwp6e1NtKV9xRjYkVDV8X1RvP142fX16LWZJP0o2JFFCczZZTVU9KnkxenNaQ2RIJE1QITZI
eyNGeSY5emdzUUFydzQKemFsIytCbGUtZmJVd3o0TG9IQyREbEgrM1lLZ2V2XkJ9UGMhITlUeXBU
Q05PcXUrNSUzY2B3QUo9NGxuKHdHcmhACnphZGV3T0AkdlVad2FHUi1pcFhpfT1YYkJUeStMTF57
Z0hSLSp4Ulc3JGZjVyVkYiNLQmMwN3B9I3Y5fmJXKHtFYQp6ZSowWWVmYVRFV2BxUitZMFQwYyl6
USNYMmBQTnpCNEp1MChiJVptczErQSkmey1FJih7Si1vSnI7UFd9RX12KzcKej5CVVZqbX49Xjhg
Qk9RRUlrIThwP2pFUzA5RH1reVBULTxiSUBJbHZXcnkkSGJnLT9wN1M7RHt7fEZFR05vPjI3CnpL
MUorezBAKXUoUHw3MUUkMHg/Uldya0xjTSpnQFlOWmZ3Q2FNQDhyWlpNJUVJentQM2I9PlZ5YyZ9
JlR3eWZBWgp6WFRVdDhuKlEyZnpXKjM4WFhVJioxdDBtYHh9P354Q0ZYISh5MEFDTEs7e2t2Nl9z
X21NMyNQJF40c0xyUXVMNjwKelQ8VzRja2xhazh2S04oRkRfZ2t0eHBlZjlqYng1dSp0I2lNVk5a
OVIkOyRfYzI/Y0whZ0BiQEFRWGl2RzUweDhzCnowU29LJjY2RHwhaFk0d0pwR3FhPVApfTR0JX5E
K15OPl5gQXUjJHd3cGchKmt5OyRaezxQUW0/LWNEdFhsPj1UYQp6THhgP0F7aF8mTDw9TiF7dGkk
XjxWbCZxLXg2aDdYc34lMnFafGBjWEhSYlhIRnNOaUJWVWFFcVMte0k+PDM/em0KekhGPD1EPl8q
MS1YJj9ydUElWl8hWTNoO05QWjA4XmFsa3RMXkQ+OEl5XyhnQnU8bGx8UGVEUT0pQm8wYG9uI2Nt
CnoxTE4ybnNzZHR9UVNnKkRTUXhFZVR1aVVid3BeTTYwYzkheFlwQGtrV0VzLXZ6ZlBTRWFXU0Ni
PVZGJSlELXVJWQp6diVffE53MC1uZW9BMT08RzBSV3h5NiRJTTVlT0BILTFuWVhgK1lJYElXRnF0
UzY2RXlCQXI4dTMqezlfMHI+THYKekRvdTZlVX1zfk8kSF4pPT92X0Y0Y3xybDlJTjk3NUphM2Q+
KTNOaitkKGc3azxhKTZTKD1kNDVMKW9jYkR+fSk5CnpvcykkIT89UClBbzY8RkdAUUVRSiVCJCpg
a2tOXmlEKitxRkA3NkI8aUEtX0heREUpVnhkVG9RVnZEdjlVMiVpcgp6QEZKPEhQMjluLTtOenY2
OGdmcWhsSn1pPihTM0h+WmpXPGV1MVYkVGc3TGZvezJrPSheYkBPQlRPbyRCbUsxRXgKemVCfkhr
R3cxKX1wM0xMYDI/YWVhTlRzfWJiKUZmZzZiaWYmRT1mV0Q1T2MtQERRZ0ZrZF9LIWU8Kjk+Q3FF
YFZtCnpubmowbiR3cGIwT3xEXlRSJjV8XiYxSGM0XzRqfUtvQW5WNEc3I0YoP0ZReWkoRWRFSGN1
VXk+QmxmKEswSHFLagp6ODhMdXIzQXBNe1F2My1EMn1CM1RaQUopb24oOXZDejwjPXhQb3NMWDNr
SyRlbHB9bmo0OGM3NmBAeFJWbnYqTmAKeks1dV4jd0JnaDIhJChVRkdqbW41dD00dik7bEFPPURU
LX4lM3JFQGBeezBSRnh1XktIZl5jJVp1WGdsTWVwNm5KCnpNcDlsUSNucjYxKH4oMHBnaT07NlhJ
ZngqZVlTeWptRnlUOU81ZSEjZUNkNWlWfFJxXkxOUXZEWnJVP0ZXejhiLQp6MnpNYSlkeys1UlR9
ZGU9dWc7UXNvQ1oySTZsR0FQc31XMUpZfX1oOyF9RnZ5aVRCfT5DUHswNyNSUyVhY2FVbnUKelVk
RH4jTHwqaUk2a2soWStjUXxNOHliajMrJUJffSNKTF5NcFd6ZyFufnNyRj9QXzteOUk+cTc9Knlv
eGshdUpxCnpOO1c4UDBVM31yZ3FHU3E9I3R9VjMqMXphJkZTbEkzfWMjQ2NLaTB1S3BQTXMkcTd8
WTNJPiUwSWtSWDloSlhNeAp6JD5UKGJPOXRaejZedmFVSCpBaSVUSG1zeTxOSjl+al4yc0ZKUmV9
bGohME5zR2MtTkYoYGU0YHJ7QDRBT1hieXAKelBvZGpVXldMemhOPFBgRXMob09DVz5LbjU+PThn
MFlYKitldmoma3p2Kz50Nl55NmRgRWByP25hT0h8QGRHV3FxCnpOYDlMdVh4JE4qRj5DKkZ6Z087
KCEtbVIxI018V0JsQUxSPWA1cnhBeXMrIW97JjRWS3ZnR0JFSG1iOWFmNG5ORAp6RXBiQ2h1aGRh
YmNeaHtiUzBGdGRPXisoRkN7aWN9I15WTFVYSzlSKEBqT0NLdDBtWDZMKWs4Y143XkRgS0BMXzUK
ejUoJGpybz9COHVyfExrfkk3cVloYXBYTWNuTzl8SWh0PWZkNH5weW5md0lXUHVYeFFDK2ZmOGI5
LWxZbUZsT2BkCnpPLXc0NGYzUnpDRGpDXmcrblZ8fS14aDNQdlF7dDJJXnxUcWN6d0E3O1dgczZ2
VSswLXlaRFhtP15EdyEhfV42PAp6RlkqMktqdGlURHd4e0JzN2JmWF9PX0ZAKSU2I3kxTjVaYzRn
SVRCSWp1OC12JjY1PVJ4VWBXUWN7NUk/NStRUloKekc2KXMjdXBmKEZTR3EtckEqQUZXWTlJd0Vr
YDJzcks3eXorcXVMQDQmQnI2ZiFza0BuT3FocnBXKE1VbVFQfm94CnpsIzwjOGZnP2FDQSF+Sj5R
eWlZUVNufGB+SGFea2lgITcrTjd5KTRwcU47UU5iTyE+a25lS0JuK2QmUmQ3RitPcwp6bHdIaEc8
LWV7fXJTU1RkVFlsLVM7cVMyY3lWO0EkcndUa21hbTswUWNKYEtDXkU1VEY1M30reyRCSSR1aUQ+
aHgKej9rTWZsKzQhUENMQWlHSSUhfHpEdzE1I290UFlie1lmNXtBdCM/Q1BQZXI4OT9pMil0R1ct
TisyVHFqd1gmMGl0CnpLUkQjNiZeT3NpMkNOVzFPSCZXK0xEVldMbGd3ejhAK2VrJG5iMTFwJkxa
TzRyKHJLQGdRRykoWX05dVZxUT5CMQp6en0jN3lSdk5SY2QrbXtFRS01JiEkRm85KTtaMHsxbzh7
SjdGZjFicjU7RWgxc2glQkNfSHAkPlp2fTRNK3M2ckcKekZNMF4+RFN6N1JQOFJsMGNIZWhCZjhY
Y3hoQWxhJWx3ej9INUVicSZOMHFtdHVQT0pmPk01cExYU0VNOUh5Zn16CnoqfT1KSURxQEQhNUVq
VCQ5YUw2NWwjVCl2PFAxYkA1Zml4V3V+ZUw1UXtfZUB1NEJ0Um01U1dwTEIjdjE1TEkhZQp6MSRz
WHhvbzxGbDlMTElUQk1eRjlQYVRyYjs3Y1UrNmQxNntYS3JjTytjPlh+V2BuQz93eUdrSz1OMUZO
Z0g0ajkKemJrWjE8NDlRM2YqUjdCJj4obmwrX0R9QVpVdFhQZyp7UE8tb0F3c2J2TjYjS2lpQ0El
KCsxeGNaSENQK0plZT1HCnpGWUhwZ1BIdDlFTi1+LX5MUiFVPjh1SjxhPGZ1JGpWYkhUWlhOQX5Y
ISZBPDNoe1dUQkRKay1zYz9aS3NoRH0zZwp6WU1+OSV4c0l3eXQwVG1CYUIwYWMhSEJjTGd5SUdr
PnJtfXk7bCY8SVgoQjx8SU1wNGBRdCFBWEZULXUmd2wyR2wKenQ1dGM7UmFCdEh2Nl5RfDdjVWUz
ZTk/Nj4jN3ZzdXM1OWQoc3dFdU8yWWY2dF5AKXFJR0FGd3hiPj1sSyYjNHtxCnotYUhndWxsdF5u
IVUzUEhlZXNzJVU9VGw9dyVmRGcmZXdZRE51MyktWiVlO15WZyQqNz03eGNsRyRTc2BpcmA+LQp6
Pj56KkZaamhvZ3QkO0ExSmplI20jI2I9JmdHXyM9c3JWK2RebSVLLWFWZVlJSUcjUUNONj9+Oyhn
RUZrSnQ3NGMKej1OWSh6MUkxKWZHM0lWU2loQFc7QmFVZlpqTGxKNzUzfmZMTDFnOz1qdCYoTV5r
WThxXjNoUk50M1Z6P3FKQEE1CnowRjUmWEF9fT9BSlBIfGkzK1c5ZXRCfFohYGAxX1lAQmxYP1ha
RHVvZm8mYDg8aFFGJlpme20jdGNyZSplXzBGPgp6SkNsbjtebTReUCo+TypJZUlHVHFzbn1DRzxu
cWs5dW9hIVBUeWdud2EjUFMwPnhhdVpGTk58Klg3WilQanNxKz0KelBPaG5Rc3tHQGRzTGpzdGNP
PGEoemcmWVg4T31TZyo7ZDsjT3BTfnw5WSlwUU47V2YxZGtPVG1jPXAqQjQqZy12Cnp5dTFTKi1B
WnQxUFltamMrOWs7RShUPG9SbWcjZHtrQnhOVzlHakQ8MitWM04tQnlyOVRZKChiSHNeV1ZgQSlq
Swp6YlZgOV4yYzQ+cVg+e1pudG9KbSZ5O0FYakRVU35gb01oLX4kclB7UCFTYiNGa0lwUnpFWHsw
aSQtZE85WFRzPVgKejh8UVNrME85R0huRmM2VjlDd1c7c2JWJTVOMHE8fjduVmFudmFyQWIlcCRP
Jksye25hY35JM2MlaGFqfUdeI0M8CnolTyNsMGg+IyFmdDlwZWlfdzNTN08wcyhiKFpzZkE5TXJm
MlB5JHZlUSpYO3VWK2lBTmhKcShIbXc5azNWdG9EKAp6NlhgaXgxVjs1TGs9ZH5ZZlgpJkd4Vktf
cElpaWQ7RnJlUXl0Vk1EOz16UGxHcE1+dDsybmVAZHkoRVA5JGNhWkgKem9fdDUmPCtDWGZ2RDQ1
cHl7LTdfUHooOD8pUWI1MHE5bUBVXkMwOFd7KkVTKGxlYzc+OHIkbWg7ZmFiPzw9VWJzCnpjamRy
SVRhc3xGQlhnUlBoSFo+YmomaVg0aitKQ0pyKXk1PUsofGFxWClpZ0hVK1EoNnc2UDdjc0o4Qilp
STBKdwp6UVJDNVpSbk44fTVUI0FHdXRlPDVpbn5We1UhNkZXVTEjPkMlb1Y1Tk14JC1HalY3SSZ5
PT5xYGE/RyNSSlBDZjEKendzdnM7P2FBS0BadlNuYEM4cHppbjhiYlhyN2Q/ZCU7ZHJ3UEFfYGs7
bjM0RjhgQDAwb3c5Z1RyeHdxRllVbnFvCnohUEpkWjw+el4pZzY8cjB6OVQ0PkxsdzRWe2tja3xk
KiZpVkYlWiVYdFBQUT5LM2tHOWtrd3A5eihRTkZCUHQxbQp6KkYjMilpYTNHOSMjb1hgWjROKlpn
eS1ScmVGdlBMU3FAMSRkRzRISUBzUylnWjtMQns0SjF7UEReK0kjRFVDRVcKemg2VWZQcUw+Q1c3
JWhoa3hJe1MtM3FEcTVHcW5ocihBWn5OQj9NcHx6LXJsTjB5K3YmenB5SEQ7ajwoSio1eEMxCno5
ZloqfWZ6N3ZrUWw/WDk8aTc8UnB5YTl+Y0xxRHduUXZIQlAkVWp0eHBHb3lTTk8jPmgxMWx7cVZ9
ZHI1dUBFJQp6KzNSZW1RaDBkMldQMHg0OHY4ai0xTVk7KnA2a2lRd0EoellEYWZyZEIzN0UoZ2s4
M1hfOWB7Yk0jYldSSElqMk0KelpAPz1qPnFjQDwzLVlWajBaVkdLTiRnb2gmcXFGb1hidFhmPjhy
a3MjfURwP21PVll+dTN+YiFoWUZOJHg9VjlPCno8Tk1Fay0hYiUlSk9xbVA3czZfMWtEVG81ej08
JVNCUjx4T0BXQWxBc3VOd2hCZkM1VEFgQ2ItaG8lVWM4WGFodAp6Pz5jKWs+Ri15WVVVeEFMNCpv
ZSV3dUF5dSlaSGlpN1BYXjBGeGk2WGlSPTkxeEZ1QCRCdGN7PE1GUmpTQSEtKCgKenE1eCl8KGI8
dS1vQ29lJjZTJHxXOFN8VEgySG5SalVga2BEVV5td3I5NzBMWE0+ST8tMkszUWAqcE5abEkxKj9l
CnpNLTdeWUdZOS1kRHJwV2R4SCtaY1MqUW09ZE5qcGcybjttI0s/czVee01IcUt1ZCFKcCRURysl
X2YlPzNYcHImIwp6bjVuRiVYNFhFeWNKZEc5aDFtSkZaPFpfPUxAQDVCWEc5d2M4T2Q9OStoJWp+
ZitPdXhgfGpDV01hNSEtLXw2RDUKelRBNFVaSlY0OVI8PEs3WHtgOTc3UDJGS31GYG0lRkJHVj87
V01KLUtSR1BAbnlraER0YmhZUHFKcm8mNlplYUxOCnpsQHNST1NPY2BCVyZGRWxfPn4tNUl4JjB8
Yk51QkFCOWYwdlJfQEJ6bmZITGtYViZ0QGFza25WWkNmaXVHQm5WKQp6ck17fjklc2E3MU9iYXJe
KkIjSn1SOUNlX3xMR3EoZVE9UWJDUDVlfiNyeU83THZPMWBAPmRVMWhxMVFoXjY3ODgKel9PP1dy
SjAhRFM1KFZIZzlWUGdGVl44emxSXmtgT1paRD5Qe29AKnVyT3Y+ej9HX2B8SU1mc2UkVz5QSDA4
MnY+CnozQDhGMyRDOyhkTT08QTZ6QDE3ckgxclhzXyMqTyVoOTxHP3psY0UlTlpXOTtkMXwqQTs7
YHAxYUZMbDRzVCtZMQp6PmxLclBZRXY+V1MjRSRYd0hDNylCKnFxbXMlXyY7Qz5OVTxoKWVINCp9
fWU1KSo0JXdfWFN4YTRaRSp7TXRqVGYKekh9cHkkYVFZPEs9K2Z9Xz5FOD4hTyFoNlJ6QnJRQV57
WXFgIyR2cT8tNElaO0MjQjQoWmVJTzgmNTxRTHoyN1FRCno+Wkh5QWlkbVZeVEgmZCsxd2opamNX
NSZqe2ZQLW9yNno8PmcwUSpiWjs1KmA9Kk9YSnA9d0UpTGAkcSFWQjEpNgp6T2BMTzw/ZnEzLXF0
IUxCQjE8UHYjU1JSX2RVJntvKH5HM0Ypd2AqTG90Mng4SEV1RT1ZcmI1akl7UT1BUV97cVAKeihJ
JjFiRFhRSGxBdn5zVEl5WVgwYVF1QXg9NTU9eSl0amF8e3tHUD5mQTlXVGdPbU9lS0RfQWtZRnpR
el5VSVk+CnpLSFdLMlEyelMrT28hZlp1ailKPD1KXm4yY1JfWXhVcXIlJkxjN1paUXR9Njw0KHFR
SUFgNEVQMV48WmB1Nm5VYAp6IThfR0VIUzhJd2R7XzFefEpgVHJfUU83cz8wMjZve2g5TU4ja00t
VEA7akhscFVfX3FKeUthYHYkNzxYdWwzZmQKej9pQDZ7YjVwflBCXjRVd1o7ZHRLPntmYUMxQGIh
N15BWlAmU1dHOG9RRElHdHF8b0Jpb04qVktKVz1PejYqVyp+Cno2Y08tcmx1WmYqJGJmYDQmaWky
MTdHQFo2ekEqSjRHfVQoNDNIOENxTSh9dVVuTT8oSGFtMjYlMSo7QWhMPlcraAp6P0p6QEJxZD56
aGFYfnBLSkxnckNIZjZpTHd6JjN8e3IrOXVEPWp+RSFOOGhCb0hDJjlseGR9OSsheDg2K3praHMK
enU5TFE+bU5yU3FqLWpFRVZTRTx4RHsrKnNHKldEOEg/YlNuanowSyt6I3EybV57fVR8JUBXSF5B
JVQ1JmRWWWZaCno3c0gwRD43SkBpPWxrKTJ1UX0mQEFfY188Y2g/dXZ0U25KeHYmJm09NERQS2dL
amd8R3M4LTUtUlpVVVgzbUNveAp6SmRZfUc7I2g/PnhZcmw8OH1tITFrLWp8TnFaVngmaTxpQitJ
eXhGX2J2YUordkxIJjxQZDw8KXMkdENOQkZ+LWQKelpWfE47I2FSdFd3en54UExxNzdKejFCbzJn
KFJEVlJ8I0p7ODlWZEdxazYzYmJ7IzJ6cXt2Y1kheTJ6Xz5ZTHhGCnpCRCZgVGRIXiFwVEc9clNp
ZFl6PSU1ZW50P0ZyNFBOJjw/KFhPVTctQkhyNFNaYU1pbXVVdD9WR2luWm90KEMwagp6Xl9fS1Mh
VE1wYllCNChCWSVNUGxOKkE7N2BlKmckPH1qPkdKbXlMfCFSc0ojdV5wWVZkYWh6Yzh7IWs3TjtI
UzwKekM7eTVPJEUwOUxDWmJuTkkzeHVsV3FZQHtYQWBRXk10ezQlSj5fRVp5JmN0dj9haHtQdSlC
Zz5nelRqb0I+MmchCnpCWDFMUD5uajg9MjVidV9OfmNlQCtldGNVVE1OYV5eLShHOUwyYkwhNztP
ezZNTFIxayhNPWJYWXtkUVJEaU1lagp6XjIrJEVXUVp8O3BwJCtYVzV5OCNgS1JVOS0qdyV7dHY2
a2Q/JiFrYXdjXkpNOCozeF9ifkdGI3hYXzJFKz1mJD8Kel56P2BiNlRAaXRKYlJ1VzdjeUVBdXE0
fExuJWQhJCZzcEJtYzZNPitoSz0we1I7QU8wJVE8MGNDfGY/Xzk9X0o7Cnp0PmBMYXojcjhrYWl3
MT5AcDhjVTRoSkwyXz5ZOyMjckZHdVNle245dElNRFJFKThNRGZIMX4wLUteaHckSnNPTQp6Mkg2
OX1WO09FY0FsbUNHVlUldm13bihXSCtaKWgocTVqPUVZSjhlfFhKY01FXld3K1dfND1SPV4kdDFe
P1RgQDAKemtNRGZGU0BJREpYcUR5JDtXSDkqcldHPXFRMzdAcjElK3p8SSl1dUExPUVPQlpudW5a
MWRBfS1QdGJYckZnTUlgCnpVQmJRcTNGZGw0QXt1bld4V21lV3tec3QyOExSTjUpRkReRmUlQio0
QW9SYDhfYip7VE5wYS10QFh6cjFOMCFlMwp6Zz5rUjdLOzlWPjZaOStgWCRRaW1kfV40ZmxTMHEl
SXtEaUI2NXErYUZHXlI+Y3E9Rl9HWUtmR2dRYD8zcVB2XmgKemlKc29UbVN4VG8qSEF3KTdCOGBV
aH1zeDYmbkwoail3Rks0JDAjbXwjcUM7byQ3MC0jc1BnRDhePGpteGZfJHJyCnpNQSY4OTdQbGda
QFJyXiZIXmFAelRmWUdVVXpBM3E8V1l1ZjUyeUAmcytPKCMwJlRYSnNaTnVLZEZPWHYkTFUyagp6
JCptZ3EkUzd6YGpkTTZNcHlASFl8NU9pRkVadn47QF9Dayl8NjszbWAyN3d1VFk9fXxMZj0yZUpa
YCVUSDslPFQKel4pR3NXZUgtYDUzZiFeRU9MfmstSWYpYHpuYFdFWWtRN31MSTkyTVNJRlh2SVdP
aChrNlNmZHtuVkw5KEwrQX1CCnomP0ZCbU9ZMDJtdihXXkNJWXpgfEB7alJfZzkpdXJFe3lUVG8z
a2Y/M2dkYGJnMzsxM0VKeXc8MW4zQmgoaGZGIwp6bDlkZnUqKE5JM1RjPzF9WVh3MUl2cV8jMktC
ZCl4JEskPyp5bnRqczhxRDR6SzNoQVdabi1NantgMm8pJlFFZlQKemVYWipeTFp6U2ZBX0gqUVEx
O2daKVQqRl5pNSo5Sy1YMCUySXY/O05DWiVCRGBuQCU9VSYjLX0zbXJEcS1MZVNvCnptWD92OEdw
KUlLM1FqelVKPWM1SkxkRXYqYWlFJE0jcEhFTjxlfEQ9QiMxeE8/ZGN3V2ZNZDBvKmtLMXwlTVVl
ZQp6RnxNXmdzSHVIKD8jeD07OElQfnMweTZOTzd9WW9sTkNeWGhRPHl4cGEjMikxR3cldSlaTj1H
ZkZnRGNWNXlAOFoKelk+b0dwQHpIQTlyOV4+JCs+V2h7az00cyhPK0VyT0gxdEN0SWU1d0ImNGFh
aSomZiRGTnhtLU1GTEBZc0pYdktzCnpjdlA3Yz5CN3dxc2k1Uk9ARWt8VnhAZWJweEh3MFQ8cX4l
QUw3VnpxJj0mM0pIRlAhQE9kdjIjVDh3YldnMCtGIwp6WmlOKVU4IXwxTHhYSWVTcWt3OU5AZ1BL
dHleKEJCMXsjSUh0NzZmU14rS01IK3F7UCkkUmBePSE7MCpnVjJMODEKencqZFZoUDJFRH1XY1RU
YU5YWT8mJF88Qzw5eSt0N0VFbmwtNmZSaDElc194VTQzc0pwcG8pT2NpZms1Uy1DfD5sCnpPMFlL
fj9+bV5gWEBPdllzQUY8SUROT3NOP2MocFp1KWJIZXRvWngyc3xuMWFiMjEpNzxFbEo3UWt0SnZF
dnxjTQp6VXI+fSg+PlU7QUlqREY7M0gzZ0hfU3U/fkdlaG5AVmg8JVZDLWZ8PEYmIU55ckNCYSol
bWFKK3gtTXxxQ3M5KyUKem1QP2ttbEFzbmI8QEcpOTdjYSRqaUFOeFBETFpwcXJ8VSR3OUEtJkJ5
NWktQz4/ZStSOEZ5ZEFHdmFiRmkqJDQqCnpxeUR5UntYfWtecGIpZllvbz5CfFhlfk1HTy05RExn
cU5efDdOMCVvQUctNnAqKjY4cypTbSYkSWNVRkw+NmtBKgp6UC03b21iczQkMyh0SWpWLTV6Pigp
NkhjPVNNJjlPQ0h1VGl1SFJfQ2lgVnM8Xm9WUmM5dWFpND9+bHlnWU9Bd1kKellIKCFlR0lwei0q
SSl5YjRgbW9QKyV+bmUlfmA2WWJlTXhaSzwjMFMhY3F+cilFRT5sYz9sVl5CZDlkd0JKQE5kCnpX
TmsjU3l3dE8qdHB2TjwxKjtWJSZFeyY7QD5yWitRQzFDZj8yY0FnUU90bERBZDltQGNidzQ0QWds
dCUpUkJRVAp6a2VpeU9HLVFyVkt1RmZGWT9jfElIWjBKQzxPITkqdU16VU9MQFZKNGtZI1E4Tk9y
TCFBZnV4QVJwQ3hpJTk/fkgKelp+TysmZz9WKkd4NCpTK15FMFRZZU9ALTY3PDAzcG9GTWh9X0V+
UGp4VnowPHhfNzwzRjI/NSZVVm9nOUheal4hCnpvSGxFTiojNmxVVzNidC1uISlYa2M3cTZYbjxi
LSMtZ3Z4RWs9Vz47K1VKWCltQVlTZCVNeERwdjlZVlFncCQrMAp6S3hjb3x1VEFgfCppJSpTTlF+
RzRCQDMjOW10NGs8cEt1ZVpwZSglUTMwc1ZGP1d5fmw1NyhXJm00OTJAeSkrcmsKelJ9QiVaandQ
K0xjS28pT0FWfSVqOUEjUmd3WnIlei1NU0dPbFREMldVQStEZ2FaRTVCZSlDLUt7TEUxMXEkTjJ6
CnoqZXNJWjEjbzlDam42cyNKYkNyWERheFUle3ZueVZpeENpOGg7KGtoNmMtWkNXdTJ5QmJ5eTYk
X2BWNTMyX087Sgp6WGE8eH0kMjwjVThHITY2QSZQTEV7LVJxJkw4S0ZnOWctI0QwbmslR3J4I2hI
K0phQz5EUDlMdTt5JUBvc3h1PDUKejRyOXdnNFhOVnQ5RWBtVio1I0w2I3lVa24xMVFjQUxXS2Uy
QEhecilia1kjQ2RjbzUleWI8TVEhVjI2bz9SRlVwCnphYko5VyNCYS12SmNDJkNyTndQfjE+Uisr
bl88UXZqZUk+K3FeNDkre0JBIWh4RkEyLVIyLVdvVWxRYW8tUThXPQp6NSpPUT96ZDtkbEc7KyMz
I1NsUz1hLTVqSlZ0cVJMbE49WjQlfjsrNzdPUl8weDBlK1lVbURxcVR1UUp7djlaamAKejwqNnB9
TkQzeXJ5LX5uNFg5UTFBZG5FMUJLeiM7OGRxVk5EeWpvLVQoJUAldyV5UUZZPU9BZlJgc2E8QyVf
QmB4CnojTCtkS01Se0N6cEJuQVQ3NHxWKmBRfkZgX3FZMylNJExDQUlUKklWazwhdCpIWTNNMEBO
JXxPa1YxOENDdVpmUAp6TjZZVXx5TEpYX2FfPlMoVGpKV0F7dk5UZDYhfi1ka0w8czVVSlQ5UWI9
alQ5SmI5KEFPNFd6KiFZQnNFaDcqZDgKenAwaFkkM18lZjg0JnspcjJheikmJXE3e3s1c3U1KSZO
N1M0eWBlMilCczNmcU51RSZsRFZ+IVlzYlVudDQlfFRHCnome1pKTjkzeXNBcHYrWk5BQkw+Vi1p
VU5lciF9WmxVWUJpRXMqMzt3RzhhNWQ2T2kxT09KTHYlejRxd1pGdmpfPAp6VFZ4JTUxQWV6Nktr
YjxpKX0zZzBze0FyWSVidUdQXl89UUZXaEwmSkhKbjtzNnk5cjxZSSVOaz0kIVFpTHBPMHMKem1+
eWtxV3JSKl9XMUxPdnJ0d2kzMWBpKXdRZHo9bCt1TXxVNDE5Mj9paWl1a2VMO1hfJWdWZCp1dEpu
ZVdPMTM5Cnowe15Wdmt5JUByO2hzfF9ZcFlpO3gmSypycUVFTWQ7bSpoK2o0V2BIKCNsO3k+fkIw
UylVNVJ9SzJrJkhgaEJgTgp6NEs8fk5aX29lTUtAfEpePEk+ZGZiPy0jJnFtUEAwQk08WFEpQXEj
WG5HTHVSIXM0NkAteWgwbUpLZ25FdHFje3UKejM2JHZeQmg0M2UzRndyUDIzTmx+TlkoUDRQdWRT
MyVWYnBMX3t7MHAybHVFZ05jY0c3T0tpNSVOO1NCdHg9VXQrCnozUXV2amMwPlZAQ3NvTlpyalgp
X2wtKXgpVGB8NT9nRWl2fDBAa1BsWFZDKV4rY1JwITQ5SF8tTHlSZGRgRnViOAp6JTF3dkV3Izh+
eXlVYCNwdlRzSXttKnhUYz5PYjxFaj9iVnVIWExBck1GNDNKeUVDaS1fO2N+VmgrfDxSMVooRjkK
elBnR1Nic09xYV4+dHZPN152PkZxJi1VQEE0UCZESGkpWChqI0ZaQndgN09ONEwoeUYlQCtLKUhC
a2AtM2JTZE1SCnpWSEBAJipTSD1HMnpfJE0xflU7PiRtM3RVN3ZWdj9SUysyP0J2RmJkM1lTSlk0
cD0hdHl7N1RgeENHVj0zYy1vcgp6SVAwWHR3aEhzMkNIPFlRdHktYHt0fEhTaHJlKlJEK2gpOUxM
QXE7YHV2I2N3JUgqT0JHQ2lEIXFIZ0Y2ckclTjYKemVDaV9NVyhYXkcyYUsoeiVidyNuVmVDOz1S
WmdSbT9Xd2lPP21sYk96Vll5akEmQ2o0Wi1wclN0I31aJHNEQ2oxCnp7eDgyfFJsZX4mb19lbTt2
KHA/MTI/PnJaTE5tajU+ZiFHKnd7NnxMPSsyJilDcUhhbVQkP3dlIUlzYH5Ee1psXgp6PCtgSyVk
d2A2NTJiandhMEdBUi1oUT48QmdhSEUlcCowcyNteEt6NVZXSTNAJVMtQCY5RXc4dFFMQ3ZsMVg1
MlQKem03V3w8NVJ1S1hJK2RFTDA2dENUWUNhbDVvNihlYlJTcEg7fDJEeXprNSNOe1U/QzdQODJ9
YSM3X1Vjd3VOUkIlCnpWJXpaY3ZlenBmSjtiKTVFUjRWSjkhcWxLVkVoPUxVd1pjWm18dHwtXzhh
bytiP2NucjRWdlFFUTRkK1R4MU8mfQp6KEx+PDdETT53RUU1WXgwblp8ZypBRExZPk82b311WUFA
eSEkcnROTW1SYypQNWVIUn1vb0JmZCVmfVhkVGQkXyUKejJJZFZ9QlNkVmcqQXZgYWRNV0VGc3tU
cjFfSGRocDZZd1k/YyR5OzZMWFFfTSR4ZzFXMmsqT3VRaURidFFTTjlwCnp0O1hFQD4+VnBCWFlh
N0Q3Pn1xOEoxblB1Ykg0dkBackFHSUdsI3hBVUVDKEdSZCE4UG42SVdeYmxDOENWOWRQdQp6U3NE
RnVAPjZ4fEJ9dyFQLX1JYE5Zaio5RFo7aVJxUSt3c0p2SkpnRWE5PT1TKlNKTjtwdFMlVTY+U1V6
QzwqcFQKenRocXhXdEpeZEBNYTBVUjIrPWp9cSopdlpRSkk9OHJvWSozN2I/bHd2ZkpXVWUyI19J
Vnteaz1scWorVEEpVXM1Cnp6RkMkXz5uQG07JCpXcyg8bU47ayZ4RlBvcWdET2A3KX56SzRoY21w
KURvPTk3bDlGVG47bU5WOXl6OGZNcFlPegp6PHJqIz9pVUh1UEY5TFN4UDVDMHFZPUdBNHoqKVlv
K3wpUWY9MngyUGJiR2tnP1RPRUUtZlkmRTw7KjRLaU9pTUwKemVnNE09JDkkcCZKNF9SRXJZRygj
X2RQJURWcmlHIT5HX2Zvd2dQXnxDTEs5VTkkPCFVVD1IfmdSQGdlbjxNSkRsCnorbU9YLVg0aFJ1
Vj9CZERYcSM1PTdLM2swVCZ3fjA1USQ8LTEoYGB1QlY8T2hPJkBKZTQkWFZtSlZfNX50Y2BVdgp6
Sk1gME1vP0RtVV5GJHRiSDU/LVhxTXQ+bCpFcCZDJFBtfTk/QD5WfWVZRXxGJEZ6YXlzakpgS0Y7
M2ZYYHBeQEUKenU3VCgjSTJfPX12JDN8ZExnaSQ+UClFPXw1NWF0JUVSVnZ0V2NlJWhXRUtYflFK
ejt1P2pYKTFPUlpxeFNAdlZ9CnpATHhgaS1MTk1FNGh2MlZHPF5MNXNTYkFEMk9zKVN6ZiVpQjFw
PlpjWkFeQEd7ZCZvVV5fd0soNEtiV0I/blgpVQp6eVFwYFA7eUIlS2M3RGF2OVJrKD5ARDJuVXk0
P1lIRWg1YD9UO0JtdkoxVmIwKmdaZjl2NncpSyRLMkpaZ2dQRm4KeiZvOy1YIz8+RDclZlR2Z2tM
eV9ObE1FR3FGPk5UMiVvMjhFRX1DPFVCQlFQYWNFJSQ3M144fmUxLVRoeSRFfntoCnpXOERFKDFa
KnxRc284OTZ6LW1CKUtVWHZrSVRwcks2PDZvQzNCdEojWTlJO2EhZ0d6U1lyZGNpUT9xaHFwdmI0
ZQp6UVNaMHVidUBMQ1Bxa19GUEpeI3M+KGpfN3lga0EqRWN3JSRhZz47YiV6PFo5JX43WEB4Py1s
NDZVIzV+I2pHI2QKekNEUlQpdjwpfjgkRTU0UWl+e01BVDE1QCo1YSh3XkxqKVV1Tihpbl56dzgo
WXcxdXNDM0lebyp0ZFNSWTg9SmlJCnpsdHlXTCQ2ey1GWDV6VkJLTVFLNkd+JURsaj4kaVEzVVU3
QjhpMTZjWXxOcVdJTH1FfHYwNF9kYTt4WEs+WHolZAp6b141Zkxqdnk9TCZDfWs3dUNSRVM9SGxG
MHYtUE41KXpvXkE9R0lQKDR6K3l2d0xhU0ZPdURwSzUjd3JOJlAtVjQKemJNSXFeb247dF8qVjdP
QEp7KDIzS0phVl8hQ2J1QDhSNEYtKG9GXipOSEhob0dCOHg2aXNVZmJwKmlPfWtoMlZFCno2bzZ3
JkFkIzYkR057bVYyYkFYRFMkeGd9PkxHUXBBdiNyN2oyVnpFO2ohQlFWcyYjKzBub0w5al5rTH10
Z3AmSQp6P0k3aiFOdEAzXkpqeTZKOGJgdVcxPFpjaWFVQT5eM0lMKzQxcVZtZ1dASXZKZkxWMDB6
NmdfVU1wSXdmKW9YPXUKemRFfD0tYC1iUyhAVV5ycSF2MUFSP19NaF9XT2k9ISR3bXRvanl9bVZI
TEItVXR9TnRtKHpmO3ZiTCpnJlgqbyZUCnpyWD5rSW8jRzlRalo+cExnaUdTRyltX3ZYbmtKITRa
bSNyQUpCN0RTNkArUEFEej45QWNqTytmUDhnKko8WG51JQp6V2R1ZGdBYCMxQFNMe3dUMFR3TT4k
MyY+UUBHT2ZWNH59ZkFJT1kyaXZmOHJWOVNCVVFIajs5Qzdhd2Q9PzgkQ2sKelg7WXIpbEMwV29L
NU48SiMyVGxyTlBnLWd2NVU5dVZnLXY8bEltdCptQWZII0ZxWjsoaWZFYDFpciV4ZEhvLVFgCnpl
ZG1geEhvVHdUQnNwSExxX18rczd6a1VzRWd1bzY4KVJ3NV5FPi1nYGxxUFNQS0NESjk1fUUqN2JN
Qm5hIXIpZwp6QVYrfj5FI3BVZXlUa3E/JkBAY3Brcj9QSDZBWGR+JGxYSjMkPHNfRFZkT2V6NUtK
V1pDRmJXNGVHdTMjRkVIayYKemxXN3JUaVgjO2ZzfFZJRElUfEd6NyZMXmomJTNvKUZDRkQ+eSVz
RXpJVCpjeE48UnN9JS1pVHpfQmg3TVlsY0BSCnp0WTZCRyRBazw3eylQZWJKeSVjNkhoPE19QDVa
e0crRmk4JG1mTkNOZDFFRGFqO21jdHk+MUA2aCs0YjBacTQhYgp6VGM+KzFaZEsxe0c2KFJEKjtq
dGJCV08kMEhuK3V8NmlsX1pnd00xfGRRT0VkPyRrPUJISV55dkRhYjF7SkBoI3YKeldZSXh8VHYl
RyE7I1dPUjNOYmFLJCVIJHk0Plp2bmhFPUZpZTBUYnVAYWsyckRVYksrRkJZJl5zK2haQVhQeERK
CnorNlc3b29qUEZ6KmdDWGwjOUBoPkQkMVdEb1hFa2s4eC0tUnpFUFY0TyNrNCQqI3t8eW8oaTUz
aShTP1NeKVReYwp6KmJLeGZFdEpBampxPXRWa1lXMD4lJTdqQXteOEhHYUx0UFlWWnkkRVBnZ1c9
UkRFOSVRQkJFdmptPWg5PVkpQ0EKem5HPz4lO3VTMmUkfUFzYG1KMis0eDAtQGVFRVM0JW90PXAy
WFI7bjlSM2kkfTFlNiFXSDRFOVI2dnU2dGM5cGV9CnpeTkxzNlI/bzdiODVNVXhxaz9Fc3FkTE48
TG8/TXR0QGMjNlB6WG5eey1MPj48RndYTmgybns8ZzgrUExMKlZ4cgp6NWM7K3xBaXlZakEyRUpo
Xj5TPUo0T0tiZVMkKip6cHFgWVU/WCVJKnhhSDVqaWZjSGNuUnd1PiM2P0FSQDllNkcKenB9aEd+
dWRpRWkmaSg0JGh7Tn1HRyt4LTFIZCMtVnE9NTR0WGE9KypSfmRZNlRTIUAlYEl0b3k9a094Z0NW
OCslCnpYc1lfTV52Y2d6Zj8lMiF4JU5QRSgjVkY0PiFJNzxaZUZxRVk3dyNyWWN1aW5JZzZfQEBZ
VEowRn19PDQpYzY3Qwp6cENXPkFudlYreVR2eHsrPihmbnQxQVhLfSlmTUk3YXIqaGFZcmYhITVz
UjtEcmRtUi1tKUdpUk54am5APERNZGUKelgxaE1XMj8tUTdZVmBCVTsqTzFmQXBSaWxoJEpuM0Bw
dWpUbFh2OHdCME9UI2tZN0Y8VExpeEJ3PTlrRiZofFB+CnpMaXhjcFc2ckRvb0YrcUZvaXpOKypL
MjQlUXM+RmNLeDk2QWlvMHxUeGlpJiY1ZWZXWjw3JEYoKnZXZUl5fStifAp6SXQkJXlLanFAPlRv
PiZYcnBZKiopbTZ7KGpRdlQ8RlhfMCR6LUBUVlQ0Z202c3Jfb30maXZ9alN+X1g+VVZkUUIKel9U
cWc8RmF5clMjUTM/eVlqSWJpWTQoKU1MdDlwXklaaDlLOFNsPX09S1ZtfndXa356Vjh8Y1dCWDw8
QUYwSV5YCnpZRjFKNyVEJFZGYWw4NyQ+RFopWnlkYnBuP1RTVTFaYlVjdjAkeSt2e1hJQmtiSFFG
Zjk+SzJ5Oz1eajl0MjQ1Kwp6P1BfS2NtYDxwd2tQUE5hN00mU2l2U2tmfT11dVNLZVo5JUVxd1Ne
VFRNWGYzSW5RVXZIVGFxSHNLLS09eHJOe08KenZffnRXI3t3aHg7VW50RC04cXlWI0N9KHMrUiQ4
fEh1ZElxb0l4PmpeLVJ8fVVYPGYhYCZrcFdLaWE9eG57QDR5CnpqSml0fFJvV1FsTTNqMi1yKXB9
T05GNzhYY0ZjSEJgPUtCQyoycTxyI2o5PDl1SDlJTURmTnBPVDJ3bEEzJnA8Kgp6QkN2QFoqTyhR
OFJTblA5dVFUUk0lfCFJcW5nKXY2QzZ6JTVUVjJ9QGY2TlFOPUY0JTNuVWheOGgrQDEhSzZqck4K
ekpBYj5iX2RFM0c7UVcjdk0mOy07N2V+cDtYVURIfEcoXmhRMnJKP3YxeX1CNnt5RzNFaWJPVHB3
XnVmdS18NFhECnojJVN6YCQ5QzdBSihwZ05qeTBlXllQPjkxPCNCM18ybH0lXk9fWHpPbHNZRFUk
PE5ZZ1psM3A3UWdSQlViP3xLawp6QmlNTEohUExxKkMmeTsoQDhFVmBHNWxGWS04TDJ2TT4helpF
S1U9JipYPGpacnh0SCZjcDNGNlY9UnZKVFVfVSEKektZdiZzKElsV1A0PkxAc28xISgoUGl3VV5N
cmtnU1MldFBAZld0T0ZfNCVSUGBLO1FCPTtFTm43WiV1RyEwcDQtCnokQEU7Kzhvd3BXZTZDcHom
Tk9USXpVfjFYUUBFQyY5RE19YCYkY1o3KVVQP1M7ZGZ6QEwrNUQpc24mWHllX2o2LQp6a0c8KkZx
b0tJM2NuMiswYHRIfmBBVitOWUl7RENIcU1Va1dENyR8N3E9e2dDS2JuMTZWT2Mjc3FPVThJRz8z
bzMKekU3UnMlY0JVfDkwelIyb2hPPj9wdCMre2NDTiFtZiNgentZX3omKkdyNmpsRkduZEQ1NDNS
YHV6MWxULSVPZX0mCno3RnxsTTxQcClQKkNCUzdpYFU8UU4xSTdhZnZybGd5SERtT3MyKlRxJUI1
PmIxKWdxRSVSYiVxYEd0YmMrUSt3IQp6bTl7TkN8SHJvak1JJGBvJmEwd2pnTSk9SEhNPTlKeUJY
R0g/I21+b24jZGp2X1BsMylKaEd5VVpGZ3x6UFJiYUoKejJEM3x6IWY7dWE0SzNzc2p6Jn0mV3Fx
TmcqQ0tMelZiISYlbS1OazNSd21RMighYWs3Tml4MFNCQX49LV43R0xaCnpsX0lmQ3J5O1Y+d3hJ
PUBOJCEqNmtiIyFDPEJwYFVjOD0pYntZLTFfMzxQcn5FZGdOPnp4QER4XnluI2FyTU45Sgp6VGc9
UGR1c0YqN080Qz1ye3UpTnZkTGZZPWI+QHFQIXNVeExCYiRaWVZRckA/VWYwdGB0fldvUSV2b35N
PXlzREoKeno3ajdMbmUhS2NaaWwyVGl7X3hEe3BQX2RLYVUlS1lnVSV3Sn49JHhaQyVmXmVYKHVV
ckhob3tVaDhyR2BzdSpxCnpJaER+VHk3bmZsZDluT0pVUj9XMz4qSXpLWW9iUW1QOCZJZEsmbXhn
bCt3ckBrbipOUj92cndMPXV3K2lZKSpubwp6XzNIYHZFdDs9cyNOM2srTHMtPW5YXyNpalY9VUU5
OGFaKSVUNiVaIUMrdXQ3ZDJRPj8/QlM0aGNHZFFNZXduTWUKemsla3FtXyVyPW0xTXdjRWFxPytw
eVpScUB6d3loRCVScyZmJE49VCFNYiEyZTBVN2FtQHNGKWEqWCZiV0VwJi1JCnpuME11dWV4aTEt
WGh6a1gjU0AkSGFPU1AyLT41fmc3NT9YYz4kalpWd2I7RkZiRDtORDQtMmZQYyN2PHNRckowQQp6
bzgpRnRjM1kjbXM/dmpBcTN4SHBCbGxiZl5lP2oxU0AhZDtOYTRqNyRXKlJKej5FKyVDcU9QTS1Q
Uzdjc2M1KWkKelphQk4lWTQ3NjA3aERnYG9RLUxDX0poMnMyKGp9VUhtNjxyPTJuT31QQ1BMRT54
cHljOCFIMzlMUz5NVloqMCY9CnpGWnRWVWxRJkR5Vzt2eXdgKXYhSFgpaGViYXxjSjVFYHVfMmV5
JHNRR159eldkMlo9KGJ4JmJpX08kej4/UHQ9fAp6JUVobDxjR25PSDxEa08lQUQzQ0xATjtlUm1I
Z1l9dj9iV0hKS1NPYDB1TWRGckNgNSM+OUxWfHlnJW97YyF8UjAKek1vaUBvdExlXjkpaSFSbVpI
RHlnYEVURCRwamVGUjFoVWlUMzE/N2YwU15vfkNuPEVva0xKKUIwOyFFYWJ9aDdLCno1dm9JOFBD
MGxUQ0ghJHw0NjhKPWdqYiZ+eGE4cm10S3lfMyE8MFVNSkVOZUpvPTxTfWVJQEM4XzdCPmAwcHVV
Zgp6YD5lZDxES3hAZVopP1UyTGYjVHAkQS1VO01HRFM1cm5sWXlaTl4tMkEoX047dzU2fHFyZUNn
OGF5dXVMPyNiUWkKelJWOERKJUJhaEYqNnRtYmw8aF5UIUpiVzwyLThKRnE0bW9QY0VuendaXkAq
UHZoM2Nsenh2dWU+KjhLUGpwRTdiCnpkRWFmZ3lYaX1fdVF5WTZNXnhyKEk8amliPiRoKyVXQlR9
PiU8d19uakMlfXVXajhrN3hlSXZ6RnArb0RxLVhndgp6SCV7Kypla096ZWcqQl5yQEJ+aGkheVkk
YDhLRm5LVF5IUVgmQXVSNUoxamM7Sm9kSSp6JCVrRmRzMHI4cnErYFEKem9EK2YtKVJzVVdUP0BI
QkNZVlFfaispNGs5MXhwMWolb0pIR29efEg2N0lCJGtMRGZrfEU9IUFpa0tIRlV7cEFPCnp6JERR
O2JpfStvJURVIWIlR0hEWCVBP0ZkNDl+cU5AYnc+SyEqdWJwKT9Abjc3TG9wJjxne0M5ZiUrQThG
ODhFTwp6c1JIWm1rTWdRYkRYMTVzbypgWEtuXyZmaURtbW81dHpZa2haWjBpbTw/b0VxKFd2JnMj
OVBXNSk2aHUrPzhxYXQKemZSQTFsYEclOURMUWtqQCt0dkk9NDVWQk9hQFpwQXc1Iz5EOHhSJl4t
S3pIdD1TOHYhcGBHa3lSMyQwWTQyVXBgCnpkaiMmSjRCM1BYI1koKiQkZnpQSzd5K0djPX53S194
MkNmNHljflhBZXo+ZWZ1Zj56WVd5IURSZ0tnUGxsdzY7Mgp6N0xpalgjcGUtU29KYlUld2NJT1BB
RGdOaXZiTWNjaighVSQ2UUhFZUFBSi1rS2tpWkJDOHRmPCQwTGJtOGVmQ2oKendydj41MDUzQn5Y
dFhPb2IqN2FNKCNXTFl2P0Z3QkMjNlVPPCNwaFhDJlY2bHE7KisyYWZJcGY9LVpYbzBAbn19CnpX
NkdTUDBCPiYofDc4TjcwYi1LeTxMQyVHMl5LazhJUnJNez89SCh7OHZpZntnYlNNbjAhcV4jNGEr
VVJrZnNvNgp6dWVUMUdIRChneFQmU3tSMik4XyRGTWQqP15MdHckJno7dSQ/UTk7TDg1bTNVaDNw
YFFxdntJZzt8ITwjcnBPYWMKej5yJXhOdHZQZldDUGwtSDhQcTY2I3FfQXptYVgqTyk+Kll1T1Qr
RDZVRG9KcElhOSghJl4yT215TGc7UnFpRDE1Cnp5JlZlN1JiWVVUQDI8KDJ2Y3tBSzY+WVYjNEt5
TmkyeGU5ci1xemhpQTNmb0tWV3hTZChZKjtaMnMlRlFWPjJoRwp6cUp2eFNBUE98LXt1MGJPY2tT
MXdqMDQmM2k7WTl8cSgtdSY4RzNuT0lHbD4kYGNPPE1NfFpMJnVTNkRWYU4kS3EKemBDUl47RkF8
ZTVfTj8rQGx7X0JgXjlUVEhQWmIoNTBfYzdYcShfK1Njd21KKmJyS0wqcUdDMDxOSFJEeXFvSChp
CnpBfSUmOHd8dHRDSX16Mkh0TlhMdkc/aSshOzg3dGFRI2coUTRMdGI2dkc7JFAhNzdLezI1P3lM
QVlrQXR5KUl8LQp6JEFUYm5YaVVWcWImK0RCY3dNeDNlTjQxdXk/OHg4SXhJUm1RWWFPUkM2Y0ko
PnFSbF5WPmUwSCEoV3pFRUR6bVcKekp2Q2gtenI2Nz48MT1+R2BnMT42ajYqeHpkQmtqNE8pfTkt
KG03TElTNjg+aGA8Yisqa2hJVGlIdmR0PT40JGpoCnpOPiF4JG9eX0FVc2AmQDdiM2R4IWxlPWMw
bVNIbkEtVHRRbiZBdWRhX0ZHa3JXO0pNJkEkZTBZMXE3ZUBXSjh9Twp6TWw5bDBQVTcweTAqWU05
KHwqMjh5WTBeMitufXd8WXhEUWNxM0lSMEw2ZHB5JTByaXtMJl9lUWhjJk1ab25FJmgKenhxKzFX
VmA9R1pzPD5UfUJgYzJQbEV1ZTZSbGQ+fTZaRUhoZit6VFVPND89eSskY3FvX1ZTdHt2bnk/UjJz
OFJFCnpzZ1J0fEY3c3ZaOUtja18+VnVkOCVrb2M7U01HNSFTMzVpWGVQLW84JVNWVnVyck5OfFQz
NVp8WVZFRC1QckNHZAp6Tip+PFM3NE1wVWB8PElFS1U7bnFrX1lGbEYtJnJOZyZ1KzI5Y09FUCtu
V3M/PTcoLWgyKX1nc0V7VDZecUlgWXEKenEtVnBBNE8ySVEoIStPaThmUzBMbWcte0k2Um4rd21M
SytZTVFOM3RnU0hjIXdqYWheS3dqKiZAamYwVWlIV2sjCnpVK0g3Snd1KkJJUDBvfTAjS2VIeVNL
JDJlKSQzJD4+SGZDQUNHMHRCPG58OHZANDZ5UXp7S2lJRXoweSo+ajdGfAp6Rj5LXktIX352NUJg
MytQLT9OdGdQRUs3IzljWCgpWkZPRkpse1FQYVdlTH0tQmBHYCFlZTFIbFFDQyoxKVQmMm4KeipD
cWVEXiNJV2AqNWt9ZzN0RXkzbF80KUZKN1Nuc1JUdGNueWh1d0dAIUlQT0ktajRyX3ZeODdiXiQ2
Nl9yUERjCnpgQClhdzwzbkEoVXVzNlVuMjlnd2trZCRje0d4QnRQUn5+cjR+e0VHamBLTytsXjE3
amJIQ1ZUd2lyPGB0QHpsQAp6ckdlUEZKaDh9YW9gMVoyRHY7JE1VKFFDOFFeYyQwbj5IcCNVU3Yx
UTlKO1QlLWtRRERXOV5DJEA0KVV8UX1vVTEKel5uRDJTRlRYUFdkfWFKODM3cVFIY0NwVXAxRDBa
MSN2LUBGcFE+MFozVmtQNCZlWnZpdyRtJVBOQnVKbU8payQqCnoqMys4U0s2Vj5td18ldHEpOGQh
a05ncSkrVU5xOVY1bnI4bVE0anI1ajswLTNlPW5DbGRRRXp0en5YT3BUdH1VOQp6VmlBdF9ibV57
R183bWVKay1VamtGeyRCTnQ0alN7V3pfUHJuSHh0QkBsZmx4ckBmcWFUXiF6e0plQClKdj13SnoK
enxNcm9+PXwrQ2hDI3FWOSlBOTtpa05xQ1B5VXJgWnd3QT4lcWNSVSFKMmJSdEd8Qy1ubyFrMT4/
PlVIV3t5Z2MqCno/KDwpbCtVfFE2XnUqI3koVTtmUmtfSTwqQjtHNFYqa2dQNSE0cEhvQj53eXd2
dV9lRStgTF9ffEsmSHYtcn1+IQp6em48aihJKGpQXllEZDJ5YmtRKUxgVTNndDg9WWFvKDdMe0h2
JnVreDwlcj5uI21iTWIkVWk+RiFWVEYobmlqV0kKemVIMF8hKGJQak0pPCt1TTgqVk1kY0VefW0r
Zl47P15LR0JiODd5ZDhkcSRkaEpOSXB9LTVEejF1WW1XV1U5VSojCnpeZDBFLUIhO0ZFdFBiTyhx
eVlvSjg+P3Y3TV9RNChsfHhraDxgPTBQKjkxSmIpQjFKVXd8RyYrdTY/X15ZSlFiRgp6JDMqUDxg
dHkqUVUoSGV1bFZoVjU/I2w9cXQrWSorSU9ZP15BZDkraE52Q3F1JCpVVDtxSn03KWRFZGAmNTEh
S08KeiVBZllqZjRTQSRTTEIyPylBejtQeT5xVnArZntBK2V8IzB2YT54OVQ7YndDOER7KWducG1Y
V0RKOGRoTG5EazhiCnpXMXI/QDIpQ3RXSnFFZlcoJXNHTVZOKURDYG96a3NkJl8/QlJFfHp1WUB6
bCk2S0NWMlBEYHFDbk87RU41JVRIVQp6djl4aGlTamJtaiZtdnooZjlhPGBjPlZhdFomfk8yRlkj
VzxGNjZoa0I+SFl5PGlOe0N5VDkjeXRCYGV+cVQ1PHMKelRmRGVESHNQeTBCRmN8RVd0ayE+QjI7
LXZGWDglPE9Ua1FmWFM9NFNTM0Q/bkdSMjlhYzNycXhJaz89JHw2PEVSCnpVYXtXI0dvcFZxPDhF
TU5PT1pHVkA2YSR+K25IbXlzMylXMD9jVEtBeGh+UiFAI0lwNERUZ3VHcX1XOEJTYVR7dAp6bWNZ
bXp2fjghMUMjTWMjNFNNKj9zPHpFJHBBXzVwPUtaZ3QmTk04a0d+b05eQVBeIU5BUHswVWgpY01K
cmV3QVoKekQ0MSkzMHdJPG1FLTdrUlc2TS1DRlhEIVhyRG1wV2dTZG4hZyhnJiU0WCZBT3hNcGNp
K2NafHpZfVBjKighKUkwCnpiNnhNWmArVlU4b084SkV8Tlp+ez9rZW5le09xVU1EeUkhZyowNDRr
SjVqbiQ3XlpWYlhWbGU2WV4xS1F3Vn1iSgp6SGY+VDJ3V0BEJlRNezN7Wnt3ZEduSWBPNm9wYjVK
aChUXntkI2lUKlN9UzZxeG82SHEkTlclV0swQ1dLPF4wJiMKejE0diV0ZiQoaGZBRXVwP0x3MnIq
LTVrbSo4aWY1QmNqTWJCNXYzOTVZbmU+K3NeKyQ7KDdjIW41bSgzV2NfI31MCno+JWFOKjtgUDB7
K0ZxYCZaKj1ReFp6al8xJX52YXkpa0sjaypOd0k5c2w3PzkrNUYkb3hNUzZwVXUkTzF4d28jeAp6
NjNjcUAoQEkranY4NW9oT1I7YUJ3PnxfbENjck8hXlpVOHY2TFJkQHtDaTx7MkdVcXs/VFA3eDFt
UlN6I158djQKel9vRTxgcEd7M0BgNDcwSFRNdEswWkZ9d2U/YmUqMyRxXkN4aHY7MGQpeT1gNmJ0
bDxQOHo5TV9IeFNDcE0wZWUlCnpgPFE3RmV5XjRMPCohPUY5PWN1Sit3aHZIUmAlKT5PQnxOTnQ4
fEtlekFzfEZjMUEyKyohK0dzcWpKWmBuJX5+Pgp6S0V0N1ptVFlsKEkoS1ZTKzZrdVo/d0VjZzxv
ZypPYl8qfGdkVElvQFMmY3w/X2p6PjFDRXVjdSVgczxSa0NEUDIKek1DWGImPkFCJmhVWGVlJVJ0
dyRUcnI0IU1RNj08RFNqPnczaC1kVmR5eXUlNkplSUNnVWtxcnpJKExwVVFqS3lRCnptdiplLXYq
TztBTksleFdwbHs2UUl3MXQxXlBpN3JTOVcyfkdpX3Mzdn13QWJ6a1YkVypSO3tAb1lVITc4P0dg
ZAp6dHEqJnVjMlNwdVVpPVd+RSk3dW1YMClEVzFPQDF3PGIwIXEpZm5CPV5tVF5AKTBTTkImPWxY
K0kzfEkhOWFGLWwKemt9R28wMyVrZX5NQjUyKCU5Un5XdWFHYXwtYGc7RktoPHkzZUc0Y1NqKlFQ
N18zKHstN2RDOHxQSXtYPUxHJCZeCnpIU0tFTG0leX57QVd5JmgyM2d1PnQ5PC1kI0o/Tkktc3U/
P3tZMllhSXpMaGFpTDRqa1JBOEZxen5jcSZ7X25Gdwp6KHlnUG4peyEpMXk+SlZrPU5qZWskVj5j
R1JmKWtoTjxeJVF4Z2M3e2JwOEo3WipEZSE/QChPZVF2OGF4Y08rKGcKekNxdDAqdn52cHdSKWRy
YFJvQGN5bnFnXlN4NChDYSZxKGVNX3c0JW52fV5pSCg+N2hmck9ncXd5I2pmMEMxT2V8CnomeCt5
M3BrUjNaJTEwNHVAOD8/WUxRVHR9WDghIzkxfC1gUk8mcTs+LVhAe1pORDtRPDJjS2Y2R252ayl7
SUslSQp6JmZxbnhCRnxjJEhSVGtSK3RuPVBte0w1WEZiPFErOVFtbkpNe3VzdFAmTGY5IURfPkVU
RH5pYyopLShQS09NbkQKekwkUXZiYDloaHlEPzUxKyl6TG5IXkBTeyRwNCZHRyR9ZUgrXzZhP1Zx
QjlsZF9Jfk0tSCNJdTJCKlMpWlhKNGVBCno4WmpaK3l9UUZJRVE7a1AyYF9VJHpWcEB5akxKdlh1
Qz90c2VFTl5hYD5KanFhUk1mJWFFIUVAaHlGYzYrNzBHSgp6OUpvSFNgb3pXR3lZOXsoZUs1Vitj
eVhfbl5WbnxOblgjOz40cT90KUp3Pl5oLSMpNSZiU1J0R01jfkF3TWNnI0YKenlubT83U3Z4e0tJ
UHlCN0lPRFZeXzVhRTQhMlNMSHBzdEAxcTZMUDdES0spTCNwWD1saE5XZWV4d0pkS2MjVkhgCnph
KEhDYnVWNEsrbH5mY3hyZHYqUTNaNWN6QC1fWTVCekJIanNTdm1gK0RLKDE2WVFOQHBVT0FOISY8
e08lJXE7dAp6a3NDIXhqemM0QTgzSWcmeTg5PkJNfE1SVVp9LWZnJEZfVjdAbWZyTDdmZGh1JjJp
KUE/JT5ZWV9QeUBJbHxwVkMKem9OcV59aH5RUmEyOEg2bCNtK0V4QSFSQiRmNUMmM3pDQn5Ee1km
aHZPeEk+YWZLMmpfZHwhQ1Y4QEhXPFZzRSE/CnpeYUM0YnhOUSRiSkQrcVd7YD5JNExBKzxfaCpA
OU9qeF5iPnRnSDt+Z21Ed0luNTg7QUZKQ21lOWtAMChiS3d4VAp6b1BFNklNQSFwZF9PK0pkPTBA
KG1PMl5XbmZqQ2tvdDZsZjByUzdKeEVDKUQzdz55VkFqczE/YkA1WikmYXxyOEUKempvMj5eP00o
bUpwMlFOIU9ePCtoZHJTPVpjeTJFbzdKelpLOX5UO0w7M3A9YXI2VHxMSENSJm9QczglRHJ0cj91
Cnp3a20+TVdHZmVNNnlWP1IxMHA2KilBSCUlRUI0b28jMihxVF5VezF1WHslMjFFWk52O21mRUpV
bHVZKTdSQGctJAp6d1Y2YSoxTio/cChIRzJ3RkQjY0kyeWtpY3BMOVpEX2pLdmhHamBofVFgQXFD
KHg7QCpVQVFsZ3tRKjReWHQhZU0Kejw8Un14IyFjK21tNng3OG9TeXdDPDxFRnN4RSRRe0JRO2h6
WH1DbWUoUTVCe3dpSX1eQEU+KHdwcFFeZCoqeDctCnpeREFTWXlISVk2fEl5aVEkQStTLXklRyNO
aFRXQUpIMDllQCZiJiZGVWtZcmE5OVVuLTQ9K0UtVzNRQE9jZGwzMAp6ZCtXXiQ/SjlGZEtaRTM1
Q0hBbnp5T0pyakBEaDh0NTxpdDBneVM0KUtKJlU/NjVWPyRZKm5zYlojMjZBSWg1P08KenVCK0ZT
ZC1MWlh6ZlFuOFQ/YSZ5SyN7LVFqLWI4fCQ2cjFUJTFge0whSS1gKmN7OzA0QEQ3WT4hclE4Rloy
fXl4CnpPe2VSaSMmZERwSHZ3X1FTPkc2XypAM218K00/VSthJCQ5MzJPJHpBKHtjQVhiJW99Pz90
R0NBYDczIXtlJn5UNAp6NWpLYU9pWks3PypCO2pNLTFvRiFKQVN8MnN+bG0lWlUhYjRFNDlqXzlZ
TGAlMyY/VjlzOEx8Kys8ZlpPQSlMLUYKenA3R3xsI2c/P3pqb1ZfRVp3KTc9bDZQKDkyRW1OK0tn
YFpILUI/PVZYKlhCVXhucCE7YF9AeXc5fDctdyR9eyU4CnpaQClgellVZ2BJeCg8cmIwWWlPYkw3
ZXtYaihGKS1XJHtXeUQkZV5LT0h4RihRSkI4TC1AQ01BSV9ed3V3N3VrNAp6ZDAyYG4xOVNTd2Yl
RFNoZDAtblVXKjcxKmJ+NVpfbWhUTyg3dHkjOSpINGZNWj5YVUpRdW8hdHM5R2YjWldxcTsKeiVN
RjlSNXh5fXVhdlV+MjdDRmFZV35YQkFZRE5pSj4/YHBndmNgcTNDVEJGKT5LfGFDMS1QdFM0XiZ8
PTVKYjRXCnpWdD0jdUhAb1h6bEZITjlUO28wTHpOOUFvMHFMNDkzRlpOQShTSlRXNSotbFJDY0hU
aT8rNDR5I1BEPUY5fjVGRwp6SFNtdysraXlRVG03YUxzP1ctenAzTy0lcjhfXnlCcWlWWihWMHFA
PyVOTCt6NnRiUnZAakE4al8+TVpOJkRVd2sKelUrYiNfem08UXtGdDw9aj5WUmJEUz82U1BhIUo7
OW5qZjM1KChyMi16biR0O1BrZ2VRZWUqfSpfUlBjMk97bCYzCnpsT0skaCFuam92QXI/MSVMJSY1
YTR7TDA7OWhlN3NncVltYGNURzVRaSUoaGUwaHpZKD4hQlkpb2hDX0xMRClXRgp6Vlh6PzNUTyhg
PzJwIX57TSlkUFdhUVRrS3hyWU53cm4pMT54a1JyKiYoI0A2SFp8KSt5VVUkVTs9eyQ4OXYmRlcK
elpfNUlXa1dqXn0/MSY2cXlMSVped25PKHZaaUt6YWB3YXtlQ01PPkw+ZVU5SHppeG0pZGA4Q1l3
U2xxJkZLR1JMCno4QkRyeXtGa3ErMW8+Km1iLXxibHZRSnFgJEQ/JVRhLXd8MDJaQio/d3hfMmNZ
byRwbHVSODl3eDleO0wjZUd9agp6JHtrX0tYeUZuO3VyTnFWZDRmalJxYGB2NXlzMzA9Rzk+YnBQ
bUtXQSplP05sNzU5P2UmSUh1WW5mTXJNUm9TSEIKel45SCh2MDBeO3hncEc5XkRoakU2ciFAMHY0
WDJyIXB0PWxMNUsydHxETlc0fEFnMEY7OFlUJVNhI2g3IyZKc20wCnpLbHUxXnhIXjl5UEdqMU1y
WTdTTnNrUENQJn0oXyE/T2A1Z0NaVFB1dyphP2dXdChVaWQze00/dGFzNGs1bmc1Rgp6IXFyISVp
X1FeN1B4eT1RcFIrRWduKTROQT0lRzZANnx6MUdSJDB+eiY+JTl8ZkZ0QTVHTjg3UyooK3dAb0ty
Z3AKenNuLWQ8WU5mRjljbGsrPGtYbChgV29pcmtAeEJUai1jQm5EZkdud29MRns1UD88bCF3cGFM
UDIyTWBFQW85Knc8CnpEO2Y5OFJLU3ZOK3daIzdWQ1JzYnZOUWw0TTZ2PENeK01mc1FBSThlOXZ1
SDVlN2JFX2FsO0xfV3w0bD9xdk5LVgp6JUIwPCY4ZUdKMj1NRkBeSUomJiRCVkVGcSV5NE9HeXZ5
fW9nTGhucUo8d00wTE1rLXVPU1JwanlMV0orPXV9b3oKelR3QF41bSMlM149QDc9Xj9VPH1sQDYy
ezg4S0ZVdkx3eWxDPkZJVjZhKkRQVyZxekU/LVU4Si1wbUFuOyloZyR7CnpVKUNPMDRoQE5UQVVC
R0F6RDVjNDh+fHpfPmRvRmN2eXJQQ05hS2FmQEtETW81eig5dCprJU1WRTdJYWFEcUZudwp6R0wm
SzdYa1NVOXEzZThCUF5Fa1MwT3tfKStgV352NntxJmNCXj85ZDkmYTBodWAhXigpNEMxcW5ySDNH
O35ZSWMKektpcWApcVdMRjZ5U3lqQUwtcUZtc3VxMyFvMEklK1BfbzIyOUZFRjV6cFVvLSFPeFA8
OEsyV1c9VVR+O1okRUZkCnp2THVTbkVnZWhOeyF5fGxxe2U1a3BCNyNoPitBO2JTYjFHV0JzMH5I
IURIUnhjTDJBQmZkSFp6Uz9oNjU8I2AxTQp6PXA5JlE5VVIoKXBzNHdAemFlT1ZabHlma3JzO1VM
ZG4yRkNNRWNSXm1sWU4tLVNwKWFTVUBIZCRYOXxCTlpGfFQKejNKWDN3MDctS1QpUSo+bEZAVktS
N1M+NT87K04kVVRgTWFmUzdjVnVtdWF6KkQkYVQmdStpKHF1TVR+eDtofnBYCnpBVjAzTFVWIzV5
eXgxWmlVaEZ4cG8keVI3dHVkU0s+I2M9VGFfdlohPExgbjV7R1o2IVhScFhaY2goUFg9aXVFNAp6
Z3wxM3wwTUt0UlBLJGlebXJUI2RDI1JCZ3RhVzBmUWg/S3xyTT9JdTtOdmFBYUctaWBCNmtvemFQ
b1AkYkdkKk8KejNfPGpiajRnVjd4YmEjUyhKTCZKPDBsJThmQDFWYShaV1RvTkRzbjY4Y3I7OFNZ
UzJvaH45VlE9PVVFR1kqV0F4CnpyKWFaWkQodE5SUWFxOzF0YEtnWVUre1Z6Y2ZofGkoJXBfMnhx
ZzRnaUA/U0srcUV5ZWFVUkBHemwrKns2N1hnbQp6Tnd0aEcjdHklek99YUJea3B4PVlYPEw3SzE3
OHVqcjxZP2JjSmJSSk5KVG59dzdyLVRWUUctQDRfNmhySypWN1QKelZqOzlAeG1QKztXPF9VQjNJ
emMqOX1oQjA3MXM1KyoqX2RRSXUodGJrfmxYR01wJWQtaFhIbEtWMTJSR204K19BCnopYjVGYil3
YklQTGY8OEBwYStBYURoclMxSz4rSnNLTUQhNFJfZyg+Sm5wfXEtayZ5RU1UVjEkdzt+c2YlWk5T
cQp6emZpYVo5Z2d9PSNvQlNXVkR5PzMwWF9RViZja04rITEoeTZGTWFMIXJ+Uyo8SFdgU2tGQk0p
JVYhejI5Z1pJO04KelB+fVJ4YURaY01yVExJeipSNU5aYm95WSZSJWdlPD1tYU0zNFN9Nm5ENFdO
bSFrN1VISz9mVnROR2t0djx0X3JzCnorTlBsKkM8UnQzbjVwSylMPD57NntHQHlgI3IlQy1re1h+
YFFGYE5uZVlSfGc0PT9WMD1MKHdAR0JTWG8zeFpfLQp6ZU43NGNUejxeX0pwMSR6Si1hK2V7MHJ5
UlNEN2dgTDBKRXs0SGhiJFNkSmAkTGlgdXhvMGxLN1lwN0E4ZW0/VTQKellOIT4/XiNeNWVfbG54
OUAjfnJyISFlPDdGSH4hQWszeiNOKHpPNndlenAtSnp6PlFHQVR0UGc8aHRjK3ZZaHxFCno5JHA8
aGUpUnp6eTlIVk4qb216Tmx2PXZIWFk1aGBfXiM9ZERefmdXRXN5IzcmdXgxUigkYnZJYXI7VyRB
SkNmfQp6OFdFNlI/JTIlJlNleFRgZlNRPFR5e3tpOHEhbTRyWl9JWGFUSyo8JiVMIVkjLUtSYG1W
Q2Q5VmpqRUZFPVhMTCkKejljXiYoKXlaZXV5UVFeVDAkI2VsZH01Wnw4RitSOUE/NVFYbG1TUGw+
bH4mTXZ1THAxbiRSfF92Tj1VNT8ycnpeCnpKMW5qUVJWSXQkQ2tNUUFhNVJVe09mdzJ8NyY3PHpM
KzQrWkk1dTF+ISNwTX1XSlZ3IW1ZNT9gZX59bnIpfkU2Owp6Z2liV21CZDElSVZJb0l3TVc/ekVf
SkxmQ2s7eDs0R2FeVDhldjJwdUtIZWxaKHMtRytpfl5TO2Fucismc3cqPXwKeihoQiE1PSNWenR1
QWt4bFY3bGZ4bUl4VUNSMHAwZik5e1FgeX0xRih1KSYzVWlrJCgmYkJrJEB0eDN1RSk1PUxUCnpj
c3RESGoyWTdDWW80Q1QjIU1PYEZpOTkta2x3V1YpMHlGcCFvfT5nOERyTDhxdTE3UlgxcXVZdzFM
Z1FWNWUoYwp6UFRqZ2t7ajBVYEZ9VHtDPT0kajRfZjdZJF99RyVGI3FALThKQ2F6TG1jbGlgayhC
XlN5YmBCJnV+PU9TJlFAQ1AKeiMmQUxyeWYtLUx7UFcodSpWKlNOIUg1Zl5jPGFUWD5zIWtAbFVx
ZkVyZDFIWXtWMVZ7YXhiJHE2eS1IQWR4b31kCnpQdVFLPEl8R25zeUxpUE9Ae216Y1k4Vld0NGEx
clNidE5nfCkxNjBxdTZxMWN4LXhyJiM7aClDSzRQaClCNl52Ygp6VlgmYm09JXxBTXU3cnxQYlNJ
JE5aRGk8VTdhWlI8NEpkbVZPZks1fDM0VV50VzY8ZUhfK1RgQHM0bkt3V0FXcnMKemswbTdRP1c1
R2Z5QThrNzh6V3NSQWNLTClqMy1ZWEpxVzxDSjtWJUIzUCs1JW93WldVMHJzK2hXc3s5aUFqfkJk
CnpiQ3deUTA5NXIjSW4yOXRkOSZhcFhucDFQbzRjcUlXPiR2fCZ9SFZodi1yVkNOSit7ZDw/PjVI
TnlePFlENlg3Qgp6T3lebFI1SighLWwjZXdkM3FyY3JkUlk4QmcpbTZrdTw9WUY5XzljJitKfXhe
WUc/UHktJmFsREJVTUA1UGUxO2QKelh9UmRCLSNEOC0mMnFvSWFwfjQ2bmBZPH1hSk58QDFGZWxM
d1JFK1c2ZCFoTEVnWjh+UFc7TCErdW1OV3A/V1IjCnp1eyFkXmxJUjc9NF5ney07fTYmVTQzc3RJ
OW9vckMoJng0KzUoZVRzPldCZjNoeGFVN0tuPHE0OWk8QnYwP0p9cAp6SmpkKFZKMWYydCp7P2dp
dTN2KDI9Q3xxVmw3bDNacF9xNnNQWWpEbTBTTGtYZCg8MVA0NTwpVEA0I0JmTD8kMlkKem0/RW9A
PD0zeDh6XlowWEEtJkNOJV5MNElUUjdHPzZII20pTW5+X20kZk5fLWBmSDtVc3Q0SUlqNTxPWkMx
d2lnCnopdCZ9ez96T0UxISVxO3g3Pkl7LWJmVX15eyZrdCZRVWF3TkZSfD51JTJRUEIldm5OPWsh
MyNnU14jZHZham5IIQp6RE1OLU5MeTsoNHBzUnhDPWotTU4zK3pScjtTVEwwVlgmfEw/TlJSJUNF
fCg/dV5pU2VKVEM0YThXP1pXOUFadCEKekYlQWZgKm9MUyNGSWZgeTdTTnBCXytDUmFEK3E9IUxo
TXhWaXNNSzZaMWV5NStpenk1bzglTiY9V31tMGlePF5WCnpLN3M/KihscHRzTVB6YHpLJkN4WEhY
VEYtez1NU1hSTiMtKmN9ZT4qWXUrS0FyYnRWcWBDVShjQHY2YyVYbG9EKgp6V1VIPzw4TitwRUF1
MTd5RlgqTEhJJSZlRVM4MW5QcndlNH51aVZzRG5+V2hGbUJlZ3I8SjJLdmRUT0tiblJ+RGYKekJK
ekEjYU51USFPI2xsNlNyfCtxaXF9PWdkR0U+K3RGZSZrKUlXeCRjcV9KTFpTbkRidnBBRGYzXkdN
aytva282CnokQXhoTUw0Z1kzV2w0QnM0WHI3U3JyR1lnTDhHTXJrVmR8KmtaYCtHSTF0PD8qQG4w
QT1+QG12MjVhSXMtcy12Ngp6NmNMRTxwcGZhLXhecVpiIU5QZm9aQztKK0hjJmFOSj5GU0QjJG9+
WjM1bk4waW55YnReeDVeMEAke0c8ZXRDQXsKejszPVBIRkRTbDlXfFl0P3c8XkIkMzY4emtEUTE5
NzBNVUdPIVFUZnxBWlRjITM8NmtFRiZyRlZEZlItazFMUStjCnoyODNYUHpRQXQwUz9RJElOTCgx
fkh1Pn4/N3RBMkE3RFVhRlVYb0Y3Ri1LMzkzN3xIKnUoQEREXio9dSVleko+WAp6ZllkV2c4WjlS
VHVxcjh0RUVVTSQ+RzEkUkRJP2Z3MllKPGF0RlVzZFRwcWl7NWI7akRTNTRWOCM7Z0JnJXRybkYK
eitGd3ROejNNK2tKQ1Y/N3YqOD0+VSgqWWAtWU0yPjgjam84TShHKUQoaGI0LW9wWlc0cztPKTMl
cWRad2xWTGIpCnpDU3VvZHExZmlATkxSVTVHIWZzZnpBIVo4NShSYWdVJVU2ajIrPVhMaH1Qdlgp
Z1dkQ3pgNDZmKGZWJCQhQWc3NQp6T3VXPXJ7T2psMzY9YmtESn1xaGhmWThLXlZpKGVfXzt2fFJH
VE4lPHJ7UTc+KCZ5UXhMYk98XjkhVzluc2o+JEgKenR0UUQ2Mk9xe3c2VVFYIVJhdWVRX0teVSN3
TzN2TiVXXjlGcGJ7OGg1dXx3ZHUrUzg5YmlWMjgqI2tlM0wwTnY8Cnoodm5ZdWxyK0QxVER2e09T
YkF3aWw5RWJKVlgrJTJxTTBCaCslUl9MWjtvKTslQjg8UXpxekV4X1p8REZZczFoNwp6ZjElN1FH
SVojV2JtMitgPXRyZH1CQDZfR1g4ay1rIyUhSlpgNEpoSFZUSCtUNCNYSmZkSmVITE8qWUcqYTdI
ZkAKelBDJn41dCsocDswc3RfTlNmejRTRGBsb1ZLLVIjM3FLLT5DMEo4QyslfGBHIWU3WDRTMHs5
KXtzQkBtfGVQXyh4CnpkdU8xbGxISVd2SCk7ZkxeVTV9eTlidX08PlJybU5ee2c9bklSVTdFU2la
QkpyIzs9Q3pRMGFjU0dMYkxodHtxTwp6PUM/b1dRI05RYXtnaEp6MHwwamZ4QGF8O2M/JCg5Wll1
WVczU3d6KG1yRHtBX1IoUCpKUmtebHVReDQ5LUpGWU4KenlIVWlmc0VXISs3PHx5ZEg1YSZSRHFH
ZSVZJlpyc3ZxbE8pKU1nJTxrPV5Od2FXPW4hSEByVHc+SkBIcE4hYXdTCnphPlB8ZTlKZmRZdUtr
VThJMHJxUm1xNmAyaVRKTTs+cUQwPFNzI2dZJFBJQGE4Ry01UnhPIW5jNmdYLVJfbm1QaAp6TD40
Zi1iPFB9VSFQcFpeezYjQ3AxMSZPUHVEfWs/XzxDbkF0X0l7czs2ZWFjUVZzZTYzZllkWnI2OXhJ
JCp3JmQKeldibkRuJkZmVXtvOWItWT56TnhKKktHODd1dyElV3BYTk8hQTRWZDd4ZGVAVXpydDNR
cGs4N29LdFZTVzlzdTQ8CnpTIWE5bSYoakt7WkNaWW9KJEhIS3d5IVlLIyQrOEBKOWxFPU43dDVw
ZDBscSF5VUQoYHVPQ0V0N2lfO3liWD5pTQp6QC04WV5aIWJsRHB3azhBaXNgbWk2UF5CbmtZbGdF
KnNzSCpWJXBNOVB0cDckU1FFN0xwaDgmMkY3RlYoYUImMDgKek1YfUdpNWpwX3VBOSY0aXloWUMy
bW5zLVE2OE5sQExiJEEjS0BAKGRxdjF5Jj9hSEE+RmBwTn1jencqVmFrMyNICnpmbExpVWomNlhh
c1krIVh6Q2V5RGFMfThmK08mSHhpYHx8JENnYk1JeUBJdyUqMlU3aTMqeDImRTNJfVFaNHRwUQp6
Nl5uTXcoIXk1RD84RFNYKXJSUCooez1gcXMpdiVNOG9aIUgrWUNlJkxWbVFASUNPdCgqPDhzKUpy
QHJPdVQ8VkgKek5HczR4NShpRGc1U2U0VWFNKnN0NC0xJmdYbUU2T1IwUDlFUFN5bXBvV0x4KHdv
Z2pMc0tfRH12RTU1NCZYUENDCnpnRUBHRXdAZlg9KzUrS0woOGMzVik4MmBSKS1Ndkhefmc8TFJL
YiFaWit9Sj5zezRXZmJpNEtWMSh9Pkk0YHpicwp6ais3aTdhQVE4elEkRDx4SGhTdWt8RUliI2Ff
OTE+QFJ6QUs7P1gmTzYzLUVLZTQlZ3NkYUYzSnslQ3lKMzBjVUEKekU2eWVWWkRGRWY9eTNfTCZO
KUZqVH1MWnxfdCUkWS1PY2MhT1g2WkR0UHtia2x0JE91N041cD5vUEp0SW1QZjBGCnoqUmlZWWVv
T29MK2h6fUVLRU1UMGdlRzVQRHtIVCFEaGxBRiE7bGxRRHxXTUNWdVRYdDNyaCNkVH1yS3ozNWZz
aAp6eHI7ND0hZV8rRVRMKyFnSGk7PWpDcEVPZVp3WlQ+Q1pXTjBJWDJsdnMlJEZUQVlGQWJEOHhY
RUw/V0AmbkwkNVUKekpyRXZoJmM5fUI+KX5sNzNBbzREWmRZQlpPKz4yYW9wKDJLTDMmJEYkPXRE
MztvMXdrY2F5IT4tMyR1Ql9DZXIoCnphTVM/bTk7YWloNWVZT2xtfTZhUiFiKU5wWWFRfFJiLWZ4
QWJlcHdCJlAhJEhsYn5MfmF3fGohY1NhKjkjVSZ6Zgp6a2Y0TDg3b2VaKC1+clNjOz1DPT1zYDgx
aF9eKUl4JktIPmwhMnokdEo8UHVJOXRNfmgyIVIzdzJIQSNmNnxvflMKejByNG1USz1hS2ZBOzUk
I1BOQkJHKl5sMlh3NWNOJk10Kmw7I1ZwYGlAPkhga0A5cll3LVFELXV7NCp1cF5mJU9ICnopNHpX
Y09PUG45Wko1I3R2MnBxdz1kTDtGSDFDNkhpbHR3JlpYR1BhX2lsU3QjO0Vqel9eaHchP2lsNHtD
eWpmUAp6bU5VNU1uWihOUmZ0VzdiWDspVj5YKkBMTzM9SVIocDVsJkwybi1EVFI9THRBOy1vcD0q
MUx6ZTlHUyo/U29HVioKei0oNnx3Vlg+ZDBQbjUmUFZeV1YwYjVCdnk8eiNoOTtgKD8rO1hwVnd4
K0BuMl5Ea2tmVXxHdE93TGFIMyowdzMyCnp0Ozw3SnxEYUc1b3Zeb2F3YFUkUSg5I2QycGFhcUgq
Uy1ERnc5S0ZLPTReTHo2NmlsRkpsa1pOdE4ta257ZC1zRAp6I2JUNSEzfCZ6YHdsMTxIOVktdGNK
eXxlRjdfITlUPHo1PEMhaVM0N3RqaSVKbkhDTmo8QzZlQWVCaGJSMG17emQKenV6SGNtOCgjKm9x
JllyXyZfUm1RRksmUHtHPyRGI2o/YS1PcmB9QjRZTHBIamdEXj90Qn1DI1VOUHpTPjB4Pm5QCnpt
JX5Ja2JKTlYtYSNeY0otVH12ZV9LXntOZmQmWUpaNUQkLTVMcEkxYVc0U3VOQTJ4eHRQVTJkbHU9
YEtHcGRIPAp6ZkZkX1pMeCVpY18yYyNiUGM7N1hpazNLKiNwQTNaakYhKk1wSEZ9OHtIKiRYXjdI
WX03ZTFkbkgtRyRJQTxhZjMKemNZaXI+Y0cxRCRNZzxPUnVCPkUqKmIpQWA2Wigoa20oZlQwPiZw
SUVKMjB8e0o1WmswYVdqYkQ5eHghMGchSkM0Cno3RWZvJk40c3BOTFk4d25qYHtTQ08zUHQ4dWVN
YS08MGtGd2kjeTVGUHRCcGNqJEt8SGlDbkQlZ2FjfmpgKH1sMQp6RFVfd01rN3AyKisqRCsqS2tV
YnEwJFhfaTFzQXdxSlJ+MTUhT1JoPyFleG5RVHdFaGI4cTZ6b3ImQDdtOEswZDkKekJFeyZ6YTtJ
YTJPPCRreng/MFBZJjJgU088QW82WiFPVyQrcHA9IUhaOFA+NF5AK3g5c0NtYlZicEB8JV9uYEFl
CnpTc3ttPXA2cyo1YCotY2p5aiZpPFhOZDAjKUQxeDVkeDhLaEZhVzhqOyp0S3w2elhFKlowQGBA
c200UW9RQVJNZgp6JDJ3P1cpX3pyX3ZzcmxURSNPUEhDUz97UjE1SStuV2UxUW9nTEcxeFNnU0xL
RSNAWDFhQ1dJfURMQEY5dSp9YEUKenxGbEkwMjtkN2BBcGpPeHVNclpfJlY/NEAmMiRWOTNDQ21Q
ank3bigwNisqcEJAcFMzTGl0KyV4TTJWfE4oMm8yCnpVU0xgVDxEZSh6dGVMe3hXdCtiNlRpYDZR
dTsmWGdIWDFAN144V3o8NU03dEFaKk1leTtzayM7R0o1WGtLan4qXwp6PD1INz5FKGxiMjclI2FD
SDZ3ITleMFM1M1dsfGJXRUd+SCtiYHNnd1I4ezJhSGU4JDFzTFB0PDZ9YzhSeDlqemQKenlVdEkk
QzwpU2xONn1vQypwZmwoNmA8cHF4Q1gyPGBVeGkpNW1ydF57V3dgKTc1NkJnV0xOZTxaaHpGa1pF
cXhPCnpjOVdgfllNQFdLbz1EVVI/MDh0KXt2Rmhzc3w3WFppZFVGVDUhS2ZaNG1MI0NiPmFQPWh6
RERtNFVyU3JraWh0Xwp6dU40R0RAJGxlO0J9K1daOVNOZmp4emNTc1JeeXo4UVJrWWFRWll+aGVO
P1YoMj1kIyhkYmFhUyQyVkk7cFp4WmIKekt3NykpJSUpSEtlQnY8d1pqO1JYV2BLcFNnSEJaRUdR
Y1BGTC1Gdjc/eWhAXlRAaFNZYTQ/VD94Qkx9YFdEVk13CnpyNytsQ2dzclh+JUlIWHAxbm5HWV5P
IzY8WTdlMEdzPklPbmYybk5DYlFpV2xxaiohPEk/OGw5WjR7UmU1KkhCPQp6aThFOENRaU1yJkNv
eGxjJG5zJVA0c1BfTXhHPm8pVFR6N04xOT5vajNjMyVINl9pM1hQLVJtSWZzSnoyT0ctIS0KejhB
SnVuNFheZilPQzZBbT1sNXxvdVZ3UHlrK2E5NDxVI3RuR2ltUjBgRTQ1flhhN0VUfEVhbUZ2QUNl
MUI4NWE0Cno9WDN9cFRWckRhSnN9XjBlZHhMfUFyej5BMEghLXNMQiloO0lTVSlXdWA/M2JUd21w
OCt9Wkx8IVVuenlPSlpsfQp6MUYwcjBjVGs5dTZgKjZpX2R7SiUtTEhEJnFTUlolJGFAfWkjWD1+
ZV8lSmY3QE5uKTw1IXA9KTIlMnNgP3JoUSYKekNtQjduRkN0TUNUQVY9ejNFMXBSKDwoVVNKaWJr
Q21QfV9VMy1ze3tZJSlMQWwqWENgX05vJFB2e3c+cEA4JD94Cnp5TTJ0YyFCdSNIdjFtY3ZTXnMl
ciNvPlk3ZEZMWHwtfWBGa3MtRig1YEVMN1g7VyYhPzN1UH1kX09pNT1EPGBEeAp6eyEhOX1VMylo
UzB7Q3AzdkZHcz40TERiS3RgRWFQdk1FIVZgfTJWczFleEZtQFQ/JmZuKmxpWXZWeSp7KXlQRUwK
ekNNZlBLQW5lMTZtbHZ7R0RxZW1uT1o3ZnJrajgpVDBQV3RwYDJoP1RTWmMqITRVOW5ydFFkekUr
aU9tQkNJP1djCnooPFlmZVluJUdvZk5UWDVTUl5DeFctPWZ7IzUlRS07JUZnb1lOaWJsa1BRT05v
ZENgVExleHdEejJYeEckJC0pdgp6aiROQkBDb2UoTVB6TXwhdFg8aGx2KDBtWUJSd01MbCY/cTVl
RVdPaFZCSkF+bHJPNCh2JWFOSFB+T3VKbWQ/bEQKentqazY2Z1ZOWUxNSkt0d3xEZGs+QVFBZT5X
WGVOMEApdzZzYD5zQkQ+TTA+S3pKJCs/ODxnc19rXjw0ent6dEBSCnpAbXpRX20xZ2JWUmEoNSNE
OGZuR1k9bnY4aWdMfEwxSmcjcz9vaiV8czlqLXB0fTljUVQkcmZHdTNObzs5dXF2egp6WHBScUJx
fVlpMXpANFF9JGk8ZHZaO002V2tFSXoyc0R6YjJ0WFAtY1lXViY9TUV9KWF6ZT1UeyQ0XmpjbGpj
cloKenRIYTJ5eDsqQVhuYFNHYE08TlFqc2lnWDFzSHBKcUF9ZntVZkJkaFZ7WXs+SU1abiV3dyRB
ZitFYCpNfl80ejhpCnpKQmlhbjxUZjctNjEjLSNJVFR5KUppUUBQYVpDdFVmWHpiYiN7diokI2My
UkcyPEJVVHNTR0c8UXI7V05MWmtmQAp6MGReKUQ4N00+d1pJRDgodCozQn1ScjhWd0hYN3Z4Vmkq
N2NuZyRVSGMmfFlhakZATCZ0UWwqTEEzJH5nez5XdXYKentnOV4mZSlYTiVUXlZxdkJtQFFjQCZO
e1ZrX2NlMyFFK3pTPVZZTkowRzZUSWFAaFZnNWpZdzEjZE9LO3BLeXQjCnooJWsqO29eXlhUcVg+
VlZeVHM+Z3c/MDJUKzZ1azlfUispQkVvVWImeDNzNlVYTTQxeTV+PjAkc1NyPkJuVjk3Ygp6Mjtl
YT57a2Q1VXQhI3E2d1lnYmpkfXozJXAyeyY8ODJvNlQ9dlVVI2N9RUJ2TV5Gdz9zRz4mdSFlUiVQ
JnxaakQKenk1WkV1I3FvPC03U0hAPTVSMCFvQGJSdjI9az5RRmNfREYjZld+K2s1c0ZoUyVUen5Y
dlJhamlXd0VxfWgpbVhZCnopTDg8RXY2RHY+IVE9WUpIa3hYTFA/c2wmYShoZFpJPFh+aFhVNiYz
X34zaTI9a1owWTIqcnQoPVA+SXI2aEYxTgp6S28mRzBNSURqd1peWjhHRHxmT3dYWHp9U1lBbn16
TzxaZnl5SXdvZ3hzdW5mMDVPfWNhNSltK29lMExsaURRfWUKenAyamVuRFNWKHpmO1VVP0tyY2lG
cGdJRD9QP0A2bGk0bVk1TFIrWmJUSTs0QjVOai12UVYzSkE3QE9YMXZFaD5wCnpDNnBDTUNhI2BE
UGZEU01uTElTciZtTCtwbCZCVExQNTVAdkdNRXxlekJMJD96YF9gaDUqZiNZWHR1fTR0PXxPRQp6
MVlqTjtUPytZQyNzWGkoJTNKYGUoZ0NvfSpGbn1PPGxFdSNUY0VeQk19SElRI1B8eFJgPU1EWVYz
eShGUEJUSEcKenBsQGFyOTRremlkejhLQEF5IXAoe3pfODB1fntSUGxiWFMjZ3RzbmxISFJLX2J6
flpkOV9qcGltNTt6TCVaSnw7CnooQEhWNlglKX55RFhwWU4+OUNYKHV4bWdZemNxX21sa1ZxbF5C
WUFyYFBhV0taVldHYnB5PGBRKl8tb19jeXV9PQp6eyowXmIyVFNiNWAzXjxxQnhvbkVZUip2TTll
PWRhaCprb3g2Pz9XNHQlQHZXMWAqfXJwdyFpQW5EQXFrSWBgNn0Kej5NfHV9d2E3UF54NHd6bnNx
TC1FaENSKnVIVExEOXJeeXxHQzg5ejVVMWR7dXB1ZkxzenFSWFNYcjtabjw+OEhyCnp0QXx9dUMh
TV9gVSN5az1jPDBlLUo3fDQ8Xilla2hmSl95Y2hjeihCbCp3S1RmamkweVdVKE9FQ1RJYysqYTY5
SQp6Zk4mYjVsPEQySHZTaHhXI0ZDWUVAI3ohTGJPbzFCQjIzSzFiRChXZzRBPmlzNDU5UWRHKFUj
cykrMXppZHBYUG4KelpqaClqVTFGJThtP29QSEFAOWF5OT5mbCN5T2ZaIVJHfkZwVmM3dVVXZV80
ZEFGeF84bDkwZjtFOH5PVU10UEFGCnpfQ1FOMFYrfWRRe14jbj5Yc2oheEFAfGM/aXw/bUlVNl9E
M25VM0d6PHFiJW4xNGpxOFloMmtYQV53IyNDJD1LJQp6T2poVys7S0pQTm0oNm95ZVJFVD5MVHdm
NC0zTE5Dc2FgaVMqRWQkVm0oX3R9eXRhPlF6JGAkOSh3emZiRilMYFYKemdDLX5uTUdGaFFsV3s2
NG42c2FabnhhVS1pQm9iIS1XRD1gejtQY0ZGZGgqKXdoaCFnNW9maXdzLTVoTXg4WH0rCnpkfFVF
aGRAOVQ7MHA+JE4jdDt7MWM/UWhCX34rKFNyLStyZF5WJnwqWSlDPDwxMkZ4MlB2Y299LVFGd3Zq
ciFAVwp6cWFvaWNJfTQtK3teWjFvciR5fT9PNHdkfjVheHZGSm87P1o8Pz5GdUAwPTVXYFhhKWF2
JSN9QUAyUVQjQD1Xdm0KelZsa2ooa0B2bDNrbmB9NjV2dUgjTTxsOHBBYFMrSyExN2QpP1J+KGk1
T3xgTGM/PFhxezJNaTA7fFIxRHBJVTJKCnpFKDR4Zy1EYVd5N1IqPWcrRn1xY0JYJmB5I3I4bGcy
XmZWRGFUXmZOZiteem1laE5lSEl0aUkmTjhqNSsheHFTPgp6bTAmY0RXX0FUT2ZOQntDeFgxeXJA
S097QUNSPXxNcGNeRXE0ZD5neWQ/K0tkTV8xKkZieG02c3pqKzdDJkU7aX0KenpzPkpGIyhTMHBr
dTJHQm5QQH5OQUZ1NGB7Z3hWQFc0d0lISjlubnJGVnwyRjY5aGt4T2o8Sn17UGwheSFtYURrCnpz
WEhmd3tObnQ0RzlYOXxKMTJucmkyJFhyMlhtTGM3PXokTVZieVQtc0RIIzU1LTVVQG1MMTR5YTh0
VWZfQm9lIwp6YW1NVF9ILWw0RHolO3hsR2FWa3IweSlFWUlCQC0maXZeYXEtUVB6anpJbEc+IXUw
LSg/UXlnUWVUd0xmUlA3dVQKem9+P2FNdFhDZ2VLencpOHNie21iUDVEWTlTe3swclkjN2t3SlUh
cG16aj1Ncis8dD1MKEJCWllRNE9tPFQ+UmI3Cno8SkdCIzEzS0N7KHhXfUFqcVhGX3BwYXY5aFpU
NVBXdEZwVkxKcWYtIUtAKyRuTG1fYU8mT2JMWCFeIWFqKSlgKAp6KiN6TDZvI200VmJxcT81LSQy
WjYxcX1vTVJ8dTcqX2BhKHFQd14memFncyh8azc5I3ckZylmajM7LXgqRz9jN3AKejI4S2wzVG14
Wm1Aa2RYQTgxc1koNzF1M3kxMjYjRG9WazNYMUg9S0dDIXppMSEkPnFJPWd4WDBHV2xjcXhkTk9f
Cnp2ND1YI1VTKzBYV2Y5Qmd0UEB9c2cpSEFESXNMWU1fJXhlJGB1dk0pXjlJQGFFazhhaWJLNyVZ
Vm44YjBia1RSRQp6dlBrKmhKJWhOK2Jwe3o5NnAoMEI1Wl55JEZgZ2F1RlB1NThKZX1DK21oVnNM
JXA0VTN6bjFFaXA7Qm5aVTNHJFMKeio9YUI2MElsaCg8eWA/dHpubURsXiV5JWojWSpvdmNNa3dl
MiYlIVFla2dKZlFiNEFoallRVFpoZD04NER3RiNaCnowVGolYnZMZUtBS20yYF5EakRURDZqZHYr
TDZoS25Dd2hVXmtwfGolTSNmb1gjPU9oLW0rR284WW82ZXJMOD9pLQp6QThFUkB0c2ohUHxFd0ti
VUZMbmQ4KWUhZktBVT1mTn4kaTBvRXE/cUxpPTduPURTYHlIJmwxcVVzRTB7RT1FSG0KemBLVzxG
bzZjIz1nPylGPntae3FWMEY9b0M8dzgzXnYlY2dES20hbzEoTFc3ak4zPzBwTDx9d1hXUHEwM3tW
ZiFCCno4XmE3Vj9qQDd1dCRpWUpHSG51clorTCZ0NEUrKlJKJUJLTm8pbjBHU2l4ZmFAZz9+RHdV
d2RXYXQ8KjZ5SWkqSQp6eiVwbylRWWVObzJpSmlIaEc4MXV6K15DPjxPVXdGMjBMVX5JNGxuPUZw
Mj5+Rmo8RDZLaCMtdTU1cUJSVUB5PUMKelZoXjteNyRgRGkpKy1We1p1ZUxJKnUkNjdNJCp7fXtW
eXxicE1BJCNAMz57cG4pc3gpTDhEZlA8KDNaJF5jcm1OCnpedVVfdz8ha0wpWD9WQlBuQURwMHFZ
PHhiJWthVChYOVdpQkxWTSN2MSQpY0JTR0I9b3goQkw3dX4obGpKVy0qewp6TU1YTTEpSnN8fD5P
ZnsyZkYjNElYMnFhenNqVzNaRUVwJGBgfVljY0U0dmdjOWZqTXJuPDAjNDI9YXU9M3pFNmQKenlO
SF8rRlFhOTljOyRYKklRdnt2aCN2WWo8Sl9LQzJQKjgmNEJRV14rVHlke0ltKCM3Yj91fVJ4IXZZ
ZzFXcnQ8Cnp6QyZvd3R5a196dU1TVW5abX1kfTkob3tNa2Y+YnJzemlWbHdFN25FbTElZnB5VD1m
NTM/TXs4JE85YDFuJHBiQwp6SzhsVkFqTVlMMCNSNCpXY1pWMD5eaCp9WER3ayYjQk5POV9xM3pC
fUJEK3lpczYrTzc7U29ZcWpUKno/PCo/WjMKejkwc29EI0FZO1cocEFpYExyfUBZbk1SLWxnYjBA
YTlXN014REdRJEhUbVo+S2JyZ2dUKXYqfj9oODtqTEk8I1F7ClpHI01Ve1M9WE5CVmolU341KWZB
eCpGKHwze3tYZzFWKCRPfAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Jl
c291cmNlcy90ZXN0LnBkZiBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Jlc291cmNlcy90ZXN0
LnBkZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQyNGMxOWQ5OGI2MjFmZWFkZjNl
NGQ2MWY3YmZmNDcxMDdhMzc0ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKbGl0ZXJhbCA3NDIx
CnpjbWFpM2J5JD8hd15vckY1SlhUPzg1S2x3ZEklQU9mdVh4d1ZyWFZ5Mm11S0pOa0sjO2dgcT0y
UWpuQkpxKE0/Nwp6QzhRKC1yMVp7cyYrbylOX2RmU35vO353QFlwP3lUKnpld2R0aWBQXmdCRkFj
ITIjVEAqeyRgaFJqcHxOQz1kKzkKelM9YS1fI1gtcyN0Y3t5MzVKcj99ZzN4eDNaV3VmVz9QJV9Y
ay09RXZ0U31OMTA5UTlXI0BxP3VuWmd9VzJSSjhuCnpAJS0qIyM4ZExJQnd0UWlNaEBIaTlebV54
WWwoNikoRHMyek9oeyZXYT9tVWEybG11WVFqfWpZWG5ETDUmYHIxWQp6RjNKZyVvVF8tP1lWbzRX
e3ZBND0wR1NgVjFwPk50Yyh7Z1ltRC0xaU8jRVI2ZWdQe2lJWHF+V0wybE4hITcye0cKelY2RmJK
T25mNmIzbjJNT2RWeFM3cX1rc3gjSj9nent2VlAyNWgoO0gwKXZiRUoqLTgyVXY+ODdCPihCcGFS
WmI8Cno+Y3t0RSU9TDxiJnQ5aX4ySTt0a2UjR14tRUNAVkgjZEhyRU0qcW8yfE18d2B0TnUjdEND
O1l+WDVQek8lKylTOQp6WHpLblhKSUpHQ3B8VTE8aWZnUFU+NlU2PD97fENAYHdaT21eeWJ8OSgo
XnRRI0A0JnY2bGJId0hjWGEoKjJRQG8KejlRdmcjQTRuVzslSkkyPz1fYklHMC1rY1k3OE8yRVAw
N3drUVVKWWZoSEIwJGM1OXMqNTxiSlNKSEd4eUo5d0ctCnoqViFoJl5VcmVGWDhmJWo1OWVQLXBJ
ZWI9S1hxbD85PUR3XmVGYURkMjFBZjQ+RkV4S0A+aDBkcjJKMFh2e3pscAp6ZFhDJVF6Zig5b2gy
MVF9dF42e0g3VmpZMiluMGU0RDAjKVhkYDE5SD1efT1fe05TVEswb3sxNnZyZ2hwdGE0UCMKeihk
OT4pdlhVPnVgdSlWV1hvcXQwWkJgUGBgQDQwY0hDNFBxN1BWSWVFfVp5KCozUWN+NkljLTFiZik2
TkhYLVZpCnpadEh2ZlBJRSkmOyNLfjQkTTFTPjFwVFZteTZ7Nk5DOFhMTW9KRG55PmVkYGthZFgt
PEFUOWpgX0J6WD5jZnA3Swp6Ukw1N30xfEMoS0YhZVJMcmtPSmIrUlE+dlJ0T3I+VkRlfmxBJUEq
WXRsPHdFJDJpcz4mdW5MRHclRXw4N2NxQUAKem5JZ0t7VE45PDllJiMrVTd3PUNBK358NHVVUih8
bGA0WkFuPXVEdEJ8SDNydDx5fTBWSjQxOEMjbkVhPnVpU0ohCnpKNUZWOUFuekFvR1ZXSmYhUDkx
c0EyJXdTZSU2VmItVTV9MXJNeHJzSlBZeGFqajdSI0dtIUVDP2NOUWtJbFhONAp6XklWNVpHKCVD
VVhtOGFjSE8kVkBhalMyYC1NVShvM0hgVUohSjNBZjxKWSMxQ2s+NzJkcH0qWHBSQ1BzYWMjeyMK
em5xO2YpSFpVcDZtfSlmVHREdSYoanZhalZHSGM4WlZQSm9gNk1EWWpSMT9WZVZOb05BS09zPHhY
RUJFYlZEVyVECnp2cGcpYnNSM0VlcVNNcCVQX1YmUClGVWxOKnkqY0Qxc0ElRUl5cSR8KTlsalhu
RDJBWFV8UDQoNz5TTThCVXZ3bgp6ajBiI2h6MUx2VF92NE4kKk4+anVeMnQ9ciVydjlwTktRUEVe
SlQkRmx7bXlzJldxVX4xWGpNd3Vme3kqJno+T0gKekVRYDgqVVRiY3F5eT8tY1AmKW4hNH1WOChJ
YGAwMWlOZkJ8WiQrRVdUKUVSUzFDaVg+TWNDTWk3dGlMb1JJYUxxCnoofkxhWFJXcElLNWJ8JDYp
TWtzaSVOOVN1YUAxR3heWUQtZDZOYEhOIVV3LU5jbzAjI15WVjRLQFQ1RWx5KXBGJAp6c2spcWNK
LW4hI28hak43V2ZNTC1oa2k0ejRTTU8jPU59TXQ9JWNOXmVvOEl+bUBfcm4jMzFSQCYyWTR4LX1P
NVcKentZSW15UGA0dlpePmlFa0trIWkhUnVpSElzbXI7dzlQakpwck9hSFY/dkFfKlJCY2xhe0FK
eCRIRE0zaUUxNyZPCnpwPiU9amRgbSMkcSt7aWxtUkB9K0M5QnUjSjFJLUQ8Q1lFUU97PXJhdFRW
TU0tV0txI1dGXjw9XmQ+Kmxaa2JxTAp6cnwkMWdYfFVBWnghSTl0dWBfalRKK0h4eWsxSCRYKnIt
cT94Z1FvRHdkdlFjK2cyb289OC1rZmQwTHUyX0wqKisKel9ha09IQTYpWkpCYHY7NDxYI1EwbiZT
JkZaUFlALSR6YWN+MFR+OTBpPlZ7e2ZmJk5rYm17dXVefD5nXygpKU1uCnozK1FObHJhYXJCSm1z
fFljeHowPiQ2OTA+VD0xOGJuIVpjZCtwWi1mWXZ4VD4oOFJ7VVYydGM5cE58UXUwVWdoNAp6VFJ7
T2ZpeWJaS0xHS0FOX0tYPzFDXyQlanl+VXIwVFB1a0lHUjBZKklaQCV9Zyh+fnwzK0U0JTx+JHt4
OzQ9OTsKejZtJkxQPW9kKjwpNk8+MEExQ2Yhb0s4e1REbyZwaHNyJUlrKSpNZiEzbGlqVVNaOU91
PXVofjs7aEZibmYhRSg0Cno9UVI0dDloYC00JXRwTVp2VWlBT3h1dldCclVVKihhZ2clPnZ3cXVP
UDVyVntVZSZCVTlEI3dUOFYlVTVScCR1WAp6QWNFezZGdEU0bj9maG4pJU1QNyFYRTN4TzhadTFY
SHpzIzJeZHBvYGhhVFU0aCV6XjE1MDtZPkI/fTRrdlZRSVQKelpFb2AlanJscUQwekZuaEV7QylK
SHdyemgtVlglUUdwKktBTjNoUSF5Tn0/LVg4aHMmYEpRP2QjYm5FTEAyeGBvCnotdGR8TXBsJDAk
MmZ0d3JWVlN3ISlMVCQocHhlV0FsX2ZSN3lHMTFlQGZ6NCFCPT1Se1lkfUhscDs3OXsrciYzUQp6
QD9XZUQwdXhmIVMqaE14d1JPSVZaSjFNe0hKezhaS0JaYUhWRD9pdXpzMDgrcVdKMD1eYWpRQCt2
TDQxKTVBMy0Keig/X0RSLU1yXzVJY3VjdiNufGEkJlpBJDA/VUd6e0k/Xk1SeTZZbiV1XzgqY2pB
NC0xR2t6e0ZgdWRsVGQ2dSRICnpEPzZKNSEpRFhvJVM/dT4kYlkmKm1ETHlUdTM0YCRzI0w1IXQt
UlE0U0NqbXFxNylWdUVLKFRWJDlfODBEWFkzegp6YndOVHJ2ZnlhenQxeWkqJkd7Km5nbVJIeSZD
aHtgZCNjMFNAbHV6cj09MTRuWjA4OFAqJm9oVGRpPiQ7dChSUmAKeipvMDV5K2pAZHtvcHtGVEAj
a3Zhc2tNNykoaT4te188eip2JG9ubXJYZT1eKThGJHJCJkRDJFV5JiFJWSslaD08CnpgPT5+QG5r
fipPPlVzN0c1Pm4+T1c9cG8kMT1NS2tBOT9TeTY8fkxZZFNhUDlwYERCWTUzKDMoI0p3eS0taH5s
Xwp6eUBYX25LbHtNP1V2R1U7QXM4PXFrclV1cSQxYTQrVVUtZm0pQW15U2RjRl5fTFdHYSVsc2g5
WUJpXzdCbGQ1fG4KelpqKChJMUo0NWJReGAjN0p1VT45Un5UNlRSUWs0VnRXSjJ1Rk52T21XYXZq
JCFjPj10VkVmfXgyKUg9M2FJUWdvCnohQj15WklgPnBhNVZlJEt7JFhVUk40TXYmcWt4OXwzdktf
WGBWeGl6NlB3fGYlU0hedmNGd2U9YFJTMUV7X1YoVAp6TEw2a0Y8OyYlWj4rT3owRkloKGtnUWc+
PCF9IVUtdiRyVEtXZU8xJDhkcl4pWGk/WVRwcG0obWc9Xm4wOSZCKloKenYteWlCUFM2YnFXO21p
OFBRRUZQekhMVUY0eTJ4dTl+JVlZM1VPY3NqNkdSUURKdUpkKDVSR2hGdUIjNTVySHZiCnplSDZK
Xy09OTF0MGs2b31GWlNqP1BfQTB5djBCQDRrZXZJLXc7JF59ZGdOdm5xQVBLcVl+MkJQP3thcDFw
UUxjQwp6JjJHNUZGS3IzU3ZVbnBfQ2s4V1pnWVUpK2RBIyVoPyp7Yj9CVVliYF9rdmZBTWpaRno7
QFoyTkpfVVZXN2M5YikKeloqWH1JTmVmJm98MUBGfENSfFhiYV4tUVI3ak1hNmdVblFya34+e3pL
ISglO3lFfUhfeCNuNEhjOVpjMyYoJGkoCnoxQGY5QT9JbnY8VmVIUHdJNEpreTdtSEJ4c3drbGxY
WSRfZz1BcUcxcn1raCRgcHtJJGNNXnVEOVYyfj01N2BwWgp6Q1o8Z0tXQWp2PTA9QDIoRVFEYHxZ
T3wkIVMyV3ZxWlUzQSZoKDZoR2ptUmp1SXd7KiVfZHY0QnZlVTlJaiNCU2oKejEzeEVOdk9SZmla
ZiR6Kyk3c0tuVm40SUVQTHBHcVY+UVF7OXdVKnN5ZTcrb1FrQ3tRNXQzI24rS142VGdGfExxCnoy
OWloTEZ1UnYtdll7Z3x7V0YyezVrKi01ZHw9KXwoVyZgJCRYdippM3FgT30pZV5JV1pgd00ral9s
cE9pXl5VIwp6eXwlUWtrZ0w4JiV6SClvSmwraWVqcGtfPHhYQHJNITwtISNtZml4b0I2OXleQHA8
UCllekEpUGc7WVJpTzFIVzsKel41YTgqUWd8TCM+bEI/KD4kaVk+K0BxPWdDfDAkVT80bVNjY2xi
Zz5HPTByWWRSJip3REJ6KFg8JF9NNSs+UGlUCnoxOyUkMy1oRiRidlJOPkhSXyVkVm9hQmteeFMx
QHhII1JsU0o0aj0xamQ2e3lfSVRCPkt1Tkx0Q0I8WlltSVNabAp6QCFxU0oleEM+Py1qcig+ZVYw
JiN6OzBUclpxb2Q/YXU4TT5HZkBOfjdlJjxBYXpEYD5hQDs2fik9cWdLdCkzPmMKelIqMkgqLXtk
YlozUnheaThJflowXkx2TmIwbWA1Nilpbj5WZCRwRW4lVDF3enVIX3VuSGFFKlNeYEBoQWJXTCYz
CnpTNkA8Um5nTnF+dF9afk1wWjV8R0l+Z3pZLTBrO29lQTYqfm95RVNvRHclUGlNPXluYStQbTt6
ZT4rfGB3Tn07IQp6eGlXT1ItaD85OVErYDJGcnlUNHpje0ZUI2VYZSQyS2R4MUM+cSY1dj44eEpz
ckdwTElKeHhwI19QMUVOVHxJSyoKenZgZ1JmP2QxciVxSXg/Yy1DKns3TUhBZVE+c2lHKWJMa2R4
c1ZpNT1IdzcrNS1tOUI3VkFTckQpbT5haUVVXlI/CnpUcUQhdDtEYU97cysmdUJsaVFsIXBpNm1B
Kjd8KTEoWVYwRUNqUlgwRFhjIU0+e3lRbmN7ZEA0KT0yK2UkP31DZwp6PFdBek4kYCo/V2IkZShX
d3A1PV9RS2h5N3c5OTtyaGk+ejhVNUBSWmc3NyFEQUBYc0JXdldqdlBsZVlWczJkTTEKeiszSTNG
M29BUS1kRHEjMzc+LUJwSkMzYypqS1F1bm9YWHlyVGVtKGcrJkBAMVVVOyR9eSZqcFd0TU1oRFQ1
UD98CnprPmBucnokYURmNGNHayZrOWE7MTRNd1d7ZUctbVorVTF6elQrNV5UT2ZwPjRPanMpV0N9
MFF8cyFSaik3X1M3Xwp6YSs7fUUhZWxkSVRYQFkxM1FeKUsqX2BReFhRVHJpbEYya2dAQjckPDNE
TFRWSXpNdn4yK25NSihQM2QoXkh9TCMKens4dV8/cXgrcVE1NjV0OXdxLW89MlVwaU5qakRAWk5x
cWFVR2ZoUyprN1AlQDJLOW9SSzdhQiQ9OHo0aEtBPGZgCnpjeURfQXljKCViMSk/MFU3VWhAZHRV
XmhPWlV+Q2NeVkIoWCs5dyVtIzlwTng0UlBTSFJ+eUJAc25peCFPdVB7Iwp6cCliZSQkVCRrfXco
Kj1TZDthWlp6PGl5TkM2IUAqVEIkKVNCTlA5P2psemJhek1PY0c2YElOSmRMTD5iWDN5SWQKejJA
XzhVSj1gP2AtWiZTOSgjQSZFJTkkTjlBVipAcnBtZXNkYlVpfmtNN29WQ2U0dVJpRDY2QEtOPG1n
MEY1U3JQCnpnPW8yTHZEUDt8OCUjQktCUmxEZDVBVGt9Vl95YiQkdFUmOWJOTjU8TzVwc0lIQlFC
fXRKdVokLXA8U1JQR2BgTwp6QUZid1ZYeHAxUm9VVT5zV1Y3VzNNYH4qTGtXMnktTVopS1UpOTxg
RDlmKGJyJGo4d0g3ZXFRYG9WWHtBYUZ9VTIKej98Qz0keXx2PE4lVz00dkh3Rj1qZH5qPnNnUjxm
NzEra1Q9NF5sWUc0bH15SmtXTmBBSk4wY2g1JEFTKCRMdDRaCno8aDtvb3NwaXVpUVZzZHxYUHlQ
R3I0O3ZSSSoqWUwmMDRJbmY2eFFQd1MtN2xud1E7bXRYV14oMillQ3c2TGx2Zgp6ViFYYCUjMXp3
Q1ltSXl4dTFgMnNKZV9PTCtmUVhMbXswdlF4P0VFQD5idjI8WmZTTit6cSghUGIlUmhVVXhnMEUK
eldXdWxWZC1KWHw+PDVtVkI0dV4+IXlXREhyVXB4YCk7X34wSW82Yn1eU0goZ29pdVFxQU1YZldw
aHs9NXM8NU4jCnpqayNzbnF+VkNWaHUhZmY2Uy1SYzVkJVl5NHdvd04hPjxTSTRQS2ozZG5aVDVJ
PGxJKCp4Yz4kP1dOfTJwYHFPNwp6cktMSVJxYTtSeEAhQDZCYkdTTE5IX2hGeHE1fSpBdG5TcnJq
IVc1dHRPVUo5KUthbm5QPUVqVTNONDw/JXgkTkEKeiNLTnlwLT15YkdgLSRBNHleJnZJYWRJOWxw
VlQyKkt8ODAhKjhrTTNINiVBJE81VUlJSUh0fk9DUkkobWA+YXBrCnpJQCFeN1dMTVkjc0ptKUNS
QmtsI3l8M0J4JHt4enUxd1YzK2VmWjw/T0RoPCo9RSVBckdVdFZCKjdwdXV2e2dLdwp6YENEWjZK
ZVV5TSpOSD1xV1hsWS1vSDJkIV80MjIld2IzJlk/Vy1lRXgzZWJRdHF2d1ZyezkhTzgreWF3TDI4
MjsKenc3cjNzY2E/YFpDYl4pTWZiekt+dGNEalRlJjlwOzA8KlM4WHA3SW5jelhzNi0qWjJ1RSQt
eEM4KkFMRWx7WDlOCnozdDBGZjZWZ1hjKipYdkBEdXtRRGdyT0tPQ2NXeihwIzFfWnY5WX5eZ3VI
dHt6ITZyJml6LVlIRUFBYnp6bTImQQp6Yi1VdXpfU0RBcWcwXiFFWkU+KnNSNSkjTVh6dnNhc35H
I1dNTCRBQD53U2E4dTdSM1RCYV5rNDlCSWxiKlBAfiQKenZkWGxUUHZaNlV3MSRDSVR5cGNuUz0q
MXRrK0YlWDNUPkxQdXdrSnglcjhGKEx7dVYxRihUWChOKVRiPGJsKnN2CnpWcExtZUN3Ti1tOXJi
KXBXYEY4aTJ0THhQcFBCZGJkbXRXQHR6MkF+eVpMbX1aQDRSKWc7NlZmK300TExldz9RLQp6R1Ex
QUZkfHlDRSZfZy07RWpWTWwlWmlWMVp8K093YDB9YnRjIW9ab01DdjhXO1ZnQDkkKENjfDw2cT5C
OEpATj0KenpHN2tQJiVPbTdZQGxSfT9IY1QyNUhsUncxRF41TCsoeDskKmEqWiRAWXYrP1h1Z15k
IzIoREdoTUpUYFpjfE94CnpxT0VoTXtOKXFHcHpOR2NKVXBGd1chTnpwZHdZS35zT3AtNiVLZk1a
SV54S25FKl9mPiV9fnA1a3p6P049bDx5Kgp6QGB9cDY9fXlLfChlQkR3NHZ5anMoUTFRPV5uOSRH
Z2hZO3tpX3R3Q09xTXJxWmNpfVhrbldZX0ZKR2hRdUppOXoKej13ZFJ7PHVUX3RWQV88c1BMfkNv
emxNP3NgQj8yLTYyeHxiMEZJbmZWM0IlaFJ+ZmRAJkxocDxHd1k9KitWTyR+CnptaGFBNmItY30h
bmJNSlYmcVEtPi1aUXJgXmhLRipEY1JtYnJtbjAwNEJrdiNUIz9OfSomVERoaik7c2UyUWNVUAp6
cFBkI2JrVyp+MTslaHM1TkN7aWZ2NlA+YHotcVE4UHJGYyN0dH4tSWFyME9tOFJWQyMkPUVLTUAy
UHVwQiV0dm8KejA4NT0/JUVxMTNyZlFfaFM5VXkqRE9VI0lCYH00KWZLRkNnajJ1NT1zQj48RWU5
ejFPVCpqZWNGKVhTb04wOVFxCno1d3YwfGIwQDxKVD0xaUtHYD1uN1NLaWZ1RVVPM2R0Z2QtQylP
Y1pQP3UtQ284bHhAaSpedCVge2xVbHNedEctdwp6Y2l4WG9oQ2c1VkBybmZjNyFVSHFWTj8yZ3Mr
R2I7Z0J3UWorIWp8KSlDR29pZjZSKHIpOVBiNyUkfD5GUU1VTUMKelQtQGg+MntJS1YtKk5mR3dr
PTg3KnVGdiUjeU9tJVZWVElkbSVDZGZtUGglbTx3eG9CZXlWRy1NSG1ZQWsyVyZsCnprVjQ9Y1pA
dXJvb2NkbCV2UUNgUnZ3V3E/e2N2aEhxM2cmcGZBJikjQChBQGpfYCNze3FHejEqdj4kIX1TPnkz
Qwp6dGgjR2tPQDQoRGRONE9acEVOVTd6JDckWD47Mj93dCpGb0x5aF8jNUV5eHJYbj82KTFJNmhP
VUxXdyM0cWdYMj8Kejd5QzMldUchfnRmJT4oWT0+dyh5SkhGMVRAWmlffENKN31LLXgpay1ZdGZ1
PFJtVTQyPXMmcXslKjU8KSNmRXdMCnolOFlTK25XdXZXPzRZJG0oKDMwTnJ1eDM4Zm9CcWYmO3Rf
KnpvYU8/U2U4YSFwSUdYPG9XMkNuaFhqXkJuJnI+Uwp6Nll1PWB4VyZnemBOVW5aTEN5PFAjamRt
JCU+MEVxbk9KYEU8ND9aQSlMPDJBSiRHSTlzWGFFZ0UyM2V7XmRAKVAKenhLTUV8SihafExZez9+
MEg0VUApJjwoOCR7dHJxeXhhZnUoN3E5TEVUNVh3Rl5CRXs2YEdiQWJPdyQwZGl2dDVxCnowN3V4
VF9QJGJeQGp9T1ZZclRCIW01eCpOaWYkT2hqb01eV0Q4NGJiUDBXZUtfSVEyMlgyVmV+VTZaTmBj
WkdJQwp6eH59ZmpAVklWNl98cikxI3V4R3ZOK0Y4WjYjQlVJcHtyWElpY1NJVVFWd2JEU18zeFVT
Jm1yRmBMPmJ5VnB9NXUKekFTQHZsSXhpSFJPJTZ6XnhPbGxueD0tbCl6NmVMRVViKEpeYC1mejhu
T2kpVmh4Qio3Pm5OQEU2aitaYVpwQEtPCnpIJXxUZkBwWDg+YUVOem9AQTBDb2ZgNldQI04maVp1
SlNCT1J8RXpvKTBBXnhKUnRLNEs8QHlySE0/QXRNUmlxUAp6PFM0WHY9MkMhQ2NYN0Y+ciVHcEBl
QEA0amR1YklsO0NoPy1gQEpgRz9HYyg/UilZaW5XRVR9PD8qQV8oTztXTHYKelJMNFg+cH44UkdH
PT19Rlg9LX5wVj9ieWUpPWRXRVlLZ2FWY0ViXj92JjJ0VGIwLVcpVDhpfVdFOEFJTUBhQXJJCnpJ
SUk+MVopWGk0bTJZaWFmcEZwclFCenRQPVY+R2U1az4rOVZQRl4jMHRPPzFxOVBDemtiO31KcW4p
SmAqMldQNwp6MU9xQCl1OWdfQTgmRV9QMHN4VldrdjteVzVGYE1FR0l5NTgqeEFeK2s9Nmt+VDVj
RjhVNyFlWTI/P0g5Rn4mZkYKenEkO2M/djhNVztzO3RPZzUmVGhLaDliZkxQaiVWa25GX1dRY3Jv
fU9CQGp+XlIrPWlKJUg2RlFjazRPeHNtQUFQCnpYSWpVbEJGPnVFWio5PF5DS1hLe0g0Zkh5WmlT
PnlGNjs5NVBwMnxtXiVUMTtjKHVwYzwod15qKSh7c2NVJU8/Nwp6enJNWHEoN2dGbWFZZzg+aylU
JSZFZlVoV2VRZUg0OXlAUE87Q2lvdXZ0cVF7dUtUTD1YVGowd2B7eT83KDgoYysKekVHPjZIUTtq
PitFVldnfHZgJmotUE5nVCo1XyZZMU89NDxoNENvZmVubHFoeVJNfnl5QSleVU9zQyhXMTRWTCl0
CnpMMnZRUUZUQipQNFFnPWJuQlJ2JmNqIyYrV3Y2LTJEb09DQDgyYSUzbjhHJWxGRXtabjlmdD1C
K2RNOGhsR0x5Qwp6USlzP0FyP0shO1h0TWR+VldYbWkjQWxAOHo4KEp5S1Njalo8ZXlYa1h9TWR0
ayQ5bnZjZ09zZU59SWM0TlNwRDAKekdyfHQ8PlZ+cDQkQ0d3aSs1Q0BwNWRjV2YmZFNaISlkKz99
MEZlK2Q1RHRke1ZJcmJIc0ljKHdmZEdTbnF5YV5NCnpmaFBhRztlUWJrTmFDcGAwSGxyNiFQPTJ9
MXdoaWFZWGJocDEwdip+alJySVhOUSZtNF5OXyNJNjlYWDleUzI1fQp6OWdubHIhbmhmTWhga0d0
SHBiSjw8UjdxcXRAPDZteTE1TW9xOzhIVWFUWlBqMEJLQGVhcWY2YWo0S2RBR05CMWwKeiFDMlh1
bGEyeigwNzRXMjZvRXJjS3lyQVR5RUN4fnFEOVE1SW84I2cxWXpqfkxUTTM/ZlFPd1dNcEk1MnF5
VGd5Cno9Mj0xbGdkI2Rmd0JRT1BieDsxemM5S2NiQXRuTy0+NWVQbFVwQGYtYSlQK3ZQY0tNYFJr
RXtrSDNJKGpsPU8raAp6eHMhNzdfZUIxIVdBb2J2JUE5ejdhVz0lTFpIUGhzNGpLU2JiSC1xJEVK
LShrKFNLdXNeYkhKd1NhKE9xfE5hM0oKenY2YW9TSG4lWllLezt2T2YyOHozJUB0eDBRdG9jSElK
YEpvN0w1amo7bGcwQkZwJmVvRnllck4hOTwjWGdefFI2Cno7djV1QXlpSkk1cSRxS3F7KlhmP2h5
ZjVnTSNRVj80K3NQYWZ+WlNVYHdjO1lnQSZ6PHlLTG9kaVRSSG5vVHgrNgp6Z0E8e1ZCb219VGYr
bT9EdTdTIUR8QX0rSXY1MSU/XkR5RVpOZT10ZEVIUWMrVipCZDBqMkxsVjZhcG9CRUNMbVUKeiFV
ZSVsOXgjfVBfaXRKQyNBQj1oVT8ybnpBUl8obzBGZWo7MzwwelR7dmt1YzVYOV9+OXc3RVZHQjZs
SXIxSmxlCnpMQlloRnw1SnY5aXhTVnNLVkBKal5qfl5KaV5Ubz9yeWhiUntGaDdee3gzV3ZhWDA+
Xzl1a1dEdztvalZVcF54ZAp6cVdAbHQ2I2JpQkhAckZWZzIkN250ITN3cEEqS3FYaU5nYE9gVEdu
MktuaHJFOTF1ZHs0KUcjVGtPM00yI2dXM1kKemFGaSQqQ1dWQmRyS016e3ZMYXc4OFpIZiVLfWsh
JnBrUmFxO1F2PTQ5UmVBZ0NDVjBLPkVQPF8xT3k+YkQ2b2BfCnhDXylNP0R9cUtLTHtKRH1ESmM7
VjVkO2IlallMVklOS3wlcEdzbkNBLWNuKStBXj5oflN2NTReeld7bkBfV0orOwoKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Jlc291cmNlcy90ZXN0LnR4dCBiL1NvdXJjZS9X
ZWJLaXQvZ3RrL3Rlc3RzL3Jlc291cmNlcy90ZXN0LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggOWRhZWFmYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy9y
ZXNvdXJjZXMvdGVzdC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi10ZXN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0X3V0aWxzLmMgYi9Tb3VyY2UvV2Vi
S2l0L2d0ay90ZXN0cy90ZXN0X3V0aWxzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDZiYjY0NWQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdF91dGls
cy5jCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCBBcm5vIFJlbmV2aWVyCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJ0ZXN0X3V0aWxzLmgiCi0KLSNpbmNsdWRlIDxn
bGliLmg+Ci0jaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KLQotaW50IHRlc3R1dGlsc19yZWxhdGl2
ZV9jaGRpcihjb25zdCBnY2hhciAqdGFyZ2V0RmlsZW5hbWUsIGNvbnN0IGdjaGFyICpleGVjdXRh
YmxlUGF0aCkKLXsKLSAgICAvKiB1c2VyIGNhbiBzZXQgbG9jYXRpb24gb2YgdGhlIHdlYmtpdCBy
ZXBvc2l0b3J5IGRpcmVjdG9yeSBpZiBpdCBkaWZmZXJzIGZyb20gYnVpbGQgZGlyZWN0b3J5ICov
Ci0gICAgY29uc3QgZ2NoYXIgKnJlcG9QYXRoID0gZ19nZXRlbnYoIldFQktJVFJFUE9ESVIiKTsK
LSAgICBpZiAocmVwb1BhdGgpIHsKLSAgICAgICAgaWYgKGdfY2hkaXIocmVwb1BhdGgpKQotICAg
ICAgICAgICAgcmV0dXJuIC0xOwotICAgIH0gZWxzZSBpZiAoZ19jaGRpcihnX3BhdGhfZ2V0X2Rp
cm5hbWUoZXhlY3V0YWJsZVBhdGgpKSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLQotICAgIHdo
aWxlICghZ19maWxlX3Rlc3QodGFyZ2V0RmlsZW5hbWUsIEdfRklMRV9URVNUX0VYSVNUUykpIHsK
LSAgICAgICAgZ2NoYXIgKnBhdGhOYW1lOwotICAgICAgICBpZiAoZ19jaGRpcigiLi4iKSkKLSAg
ICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgZ19hc3NlcnQoIWdfc3RyX2VxdWFsKChwYXRo
TmFtZSA9IGdfZ2V0X2N1cnJlbnRfZGlyKCkpLCAiLyIpKTsKLSAgICAgICAgZ19mcmVlKHBhdGhO
YW1lKTsKLSAgICB9Ci0KLSAgICBnY2hhciAqZGlyTmFtZSA9IGdfcGF0aF9nZXRfZGlybmFtZSh0
YXJnZXRGaWxlbmFtZSk7Ci0gICAgaWYgKGdfY2hkaXIoZGlyTmFtZSkpIHsKLSAgICAgICAgZ19m
cmVlKGRpck5hbWUpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgZ19mcmVlKGRp
ck5hbWUpOwotICAgIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsv
dGVzdHMvdGVzdF91dGlscy5oIGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdF91dGlscy5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzYwZGEzLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RfdXRpbHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDMg
KzAsMCBAQAotI2luY2x1ZGUgPGdsaWIuaD4KLQotaW50IHRlc3R1dGlsc19yZWxhdGl2ZV9jaGRp
cihjb25zdCBnY2hhciAqdGFyZ2V0RmlsZW5hbWUsIGNvbnN0IGdjaGFyICpleGVjdXRhYmxlUGF0
aCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXBwbGljYXRpb25j
YWNoZS5jIGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGFwcGxpY2F0aW9uY2FjaGUuYwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzE4ZjQwMS4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXBwbGljYXRpb25jYWNoZS5jCisrKyAvZGV2L251bGwK
QEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBMdWthc3ogU2xhY2hj
aWFrCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGds
aWIvZ3ByaW50Zi5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3ZWJraXQvd2Vi
a2l0Lmg+Ci0KLXN0YXRpYyB2b2lkIHRlc3RfYXBwbGljYXRpb25fY2FjaGVfbWF4aW11bV9zaXpl
KCkKLXsKLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgbWF4U2l6ZSA9IDgxOTI7Ci0gICAgd2Via2l0
X2FwcGxpY2F0aW9uX2NhY2hlX3NldF9tYXhpbXVtX3NpemUobWF4U2l6ZSk7Ci0KLSAgICAvLyBD
cmVhdGluZyBhIFdlYlZpZXcgLSBtYWtlIHN1cmUgdGhhdCBpdCBkaWRuJ3QgY2hhbmdlIGFueXRo
aW5nCi0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRf
d2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOwotICAgIGdf
b2JqZWN0X3VucmVmKHdlYlZpZXcpOwotCi0gICAgZ19hc3NlcnQobWF4U2l6ZSA9PSB3ZWJraXRf
YXBwbGljYXRpb25fY2FjaGVfZ2V0X21heGltdW1fc2l6ZSgpKTsKLX0KLQotaW50IG1haW4oaW50
IGFyZ2MsIGNoYXIqKiBhcmd2KQotewotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBO
VUxMKTsKLQotICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7
Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2FwcGxpY2F0aW9uX2NhY2hlL21heGltdW1f
c2l6ZSIsCi0gICAgICAgICAgICAgICAgICAgIHRlc3RfYXBwbGljYXRpb25fY2FjaGVfbWF4aW11
bV9zaXplKTsKLQotICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7Ci19Ci0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhdGsuYyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3Rz
L3Rlc3RhdGsuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmEyZGI2MS4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXRrLmMKKysrIC9kZXYvbnVsbApA
QCAtMSwxNDc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSWdhbGlhIFMuTC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRl
IDxnbGliLmg+Ci0jaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+
Ci0jaW5jbHVkZSA8bG9jYWxlLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8d2Vi
a2l0L3dlYmtpdC5oPgotCi1zdGF0aWMgY29uc3QgY2hhciogY2VudGVyZWRDb250ZW50cyA9ICI8
aHRtbD48Ym9keT48cCBzdHlsZT0ndGV4dC1hbGlnbjogY2VudGVyOyc+U2hvcnQgbGluZTwvcD48
cCBzdHlsZT0ndGV4dC1hbGlnbjogY2VudGVyOyc+TG9uZy1zaXplIGxpbmUgd2l0aCBzb21lIGZv
byBiYXIgYmF6IGNvbnRlbnQ8L3A+PHAgc3R5bGU9J3RleHQtYWxpZ246IGNlbnRlcjsnPlNob3J0
IGxpbmU8L3A+PHAgc3R5bGU9J3RleHQtYWxpZ246IGNlbnRlcjsnPlRoaXMgaXMgYSBtdWx0aS1s
aW5lIHBhcmFncmFwaDxiciAvPndoZXJlIHRoZSBmaXJzdCBsaW5lPGJyIC8+aXMgdGhlIGJpZ2dl
c3Qgb25lPC9wPjwvYm9keT48L2h0bWw+IjsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnRlbnRz
ID0gIjxodG1sPjxib2R5PjxwPlRoaXMgaXMgYSB0ZXN0LiBUaGlzIGlzIHRoZSBzZWNvbmQgc2Vu
dGVuY2UuIEFuZCB0aGlzIHRoZSB0aGlyZC48L3A+PC9ib2R5PjwvaHRtbD4iOwotCi1zdGF0aWMg
Y29uc3QgY2hhciogY29udGVudHNJblRhYmxlV2l0aEhlYWRlcnMgPSAiPGh0bWw+PGJvZHk+PHRh
YmxlPjx0cj48dGg+Zm9vPC90aD48dGg+YmFyPC90aD48dGggY29sc3Bhbj0nMic+YmF6PC90aD48
L3RyPjx0cj48dGg+cXV4PC90aD48dGQ+MTwvdGQ+PHRkPjI8L3RkPjx0ZD4zPC90ZD48L3RyPjx0
cj48dGggcm93c3Bhbj0nMic+cXV1eDwvdGg+PHRkPjQ8L3RkPjx0ZD41PC90ZD48dGQ+NjwvdGQ+
PC90cj48dHI+PHRkPjY8L3RkPjx0ZD43PC90ZD48dGQ+ODwvdGQ+PC90cj48dHI+PHRoPmNvcmdl
PC90aD48dGQ+OTwvdGQ+PHRkPjEwPC90ZD48dGQ+MTE8L3RkPjwvdHI+PC90YWJsZT48dGFibGU+
PHRyPjx0ZD4xPC90ZD48dGQ+MjwvdGQ+PC90cj48dHI+PHRkPjM8L3RkPjx0ZD40PC90ZD48L3Ry
PjwvdGFibGU+PC9ib2R5PjwvaHRtbD4iOwotCi1zdGF0aWMgY29uc3QgY2hhciogY29udGVudHNX
aXRoRXh0cmFuZW91c1doaXRlU3BhY2VzID0gIjxodG1sPjxoZWFkPjxib2R5PjxwPlRoaXNcbiAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGFyYWdyYXBoXG4gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1xuICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvcmtlZCE8L3A+PC9ib2R5PjwvaHRtbD4iOwotCi1zdGF0aWMgY29uc3QgY2hhciogY29tYm9C
b3hTZWxlY3RvciA9ICI8aHRtbD48Ym9keT48c2VsZWN0PjxvcHRpb24gc2VsZWN0ZWQgdmFsdWU9
J2Zvbyc+Zm9vPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nYmFyJz5iYXI8L29wdGlvbj48L3NlbGVj
dD48L2JvZHk+PC9odG1sPiI7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBlbWJlZGRlZE9iamVjdHMg
PSAiPGh0bWw+PGJvZHk+PHA+Q2hvb3NlOiA8aW5wdXQgdmFsdWU9J2ZvbycgdHlwZT0nY2hlY2ti
b3gnLz5mb28gPGlucHV0IHZhbHVlPSdiYXInIHR5cGU9J2NoZWNrYm94Jy8+YmFyIChwaWNrIG9u
ZSk8L3A+PHA+Q2hvb3NlOiA8c2VsZWN0IG5hbWU9J2Zvbyc+PG9wdGlvbj5iYXI8L29wdGlvbj48
b3B0aW9uPmJhejwvb3B0aW9uPjwvc2VsZWN0PiAocGljayBvbmUpPC9wPjxwPjxpbnB1dCBuYW1l
PSdmb29iYXJidXR0b24nIHZhbHVlPSdmb29iYXInIHR5cGU9J2J1dHRvbicvPjwvcD48L2JvZHk+
PC9odG1sPiI7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBmb3JtV2l0aFRleHRJbnB1dHMgPSAiPGh0
bWw+PGJvZHk+PGZvcm0+PGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J2VudHJ5JyAvPjxpbnB1dCB0
eXBlPSdwYXNzd29yZCcgbmFtZT0ncGFzc3dvcmRFbnRyeScgLz48L2Zvcm0+PC9ib2R5PjwvaHRt
bD4iOwotCi1zdGF0aWMgY29uc3QgY2hhciogaHlwZXJ0ZXh0QW5kSHlwZXJsaW5rcyA9ICI8aHRt
bD48Ym9keT48cD5BIHBhcmFncmFwaCB3aXRoIG5vIGxpbmtzIGF0IGFsbDwvcD48cD48YSBocmVm
PSdodHRwOi8vZm9vLmJhci5iYXovJz5BIGxpbmU8L2E+IHdpdGggPGEgaHJlZj0naHR0cDovL2Jh
ci5iYXouZm9vLyc+YSBsaW5rIGluIHRoZSBtaWRkbGU8L2E+IGFzIHdlbGwgYXMgYXQgdGhlIGJl
Z2lubmluZyBhbmQgPGEgaHJlZj0naHR0cDovL2Jhei5mb28uYmFyLyc+YXQgdGhlIGVuZDwvYT48
L3A+PG9sPjxsaT5MaXN0IGl0ZW0gd2l0aCBhIDxzcGFuPjxhIGhyZWY9J2h0dHA6Ly9mb28uYmFy
LmJhei8nPmxpbmsgaW5zaWRlIGEgc3BhbiBub2RlPC9hPjwvc3Bhbj48L2xpPjwvb2w+PC9ib2R5
PjwvaHRtbD4iOwotCi1zdGF0aWMgY29uc3QgY2hhciogbGF5b3V0QW5kRGF0YVRhYmxlcyA9ICI8
aHRtbD48Ym9keT48dGFibGU+PHRyPjx0aD5PZGQ8L3RoPjx0aD5FdmVuPC90aD48L3RyPjx0cj48
dGQ+MTwvdGQ+PHRkPjI8L3RkPjwvdHI+PC90YWJsZT48dGFibGU+PHRyPjx0ZD5mb288L3RkPjx0
ZD5iYXI8L3RkPjwvdHI+PC90YWJsZT48L2JvZHk+PC9odG1sPiI7Ci0KLXN0YXRpYyBjb25zdCBj
aGFyKiBsaW5rc1dpdGhJbmxpbmVJbWFnZXMgPSAiPGh0bWw+PGhlYWQ+PHN0eWxlPmEuaHR0cDpi
ZWZvcmUge2NvbnRlbnQ6IHVybChuby1pbWFnZS5wbmcpO308L3N0eWxlPjxib2R5PjxwPjxhIGNs
YXNzPSdodHRwJyBocmVmPSdmb28nPmZvbzwvYT4gYmFyIGJhejwvcD48cD5mb28gPGEgY2xhc3M9
J2h0dHAnIGhyZWY9J2Jhcic+YmFyPC9hPiBiYXo8L3A+PHA+Zm9vIGJhciA8YSBjbGFzcz0naHR0
cCcgaHJlZj0nYmF6Jz5iYXo8L2E+PC9wPjwvYm9keT48L2h0bWw+IjsKLQotc3RhdGljIGNvbnN0
IGNoYXIqIGxpc3RzT2ZJdGVtcyA9ICI8aHRtbD48Ym9keT48dWw+PGxpPnRleHQgb25seTwvbGk+
PGxpPjxhIGhyZWY9J2Zvbyc+bGluayBvbmx5PC9hPjwvbGk+PGxpPnRleHQgYW5kIGEgPGEgaHJl
Zj0nYmFyJz5saW5rPC9hPjwvbGk+PC91bD48b2w+PGxpPnRleHQgb25seTwvbGk+PGxpPjxhIGhy
ZWY9J2Zvbyc+bGluayBvbmx5PC9hPjwvbGk+PGxpPnRleHQgYW5kIGEgPGEgaHJlZj0nYmFyJz5s
aW5rPC9hPjwvbGk+PC9vbD48L2JvZHk+PC9odG1sPiI7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiB0
ZXh0Rm9yQ2FyZXRCcm93c2luZyA9ICI8aHRtbD48Ym9keT48aDE+QSB0ZXh0IGhlYWRlcjwvaDE+
PHA+QSBwYXJhZ3JhcGggPGEgaHJlZj0naHR0cDovL2Zvby5iYXIuYmF6Lyc+d2l0aCBhIGxpbms8
L2E+IGluIHRoZSBtaWRkbGU8L3A+PG9sPjxsaT5BIGxpc3QgaXRlbTwvbGk+PGxpPjxzcGFuIHN0
eWxlPSdkaXNwbGF5OmJsb2NrOyc+QmxvY2sgc3BhbiBpbiBhIGxpc3QgaXRlbTwvc3Bhbj48c3Bh
bj5JbmxpbmUgc3BhbiBpbiBhIGxpc3QgaXRlbTwvc3Bhbj48L2xpPjxsaT48YSBocmVmPSdmb28n
PjxzcGFuIHN0eWxlPSdkaXNwbGF5OmJsb2NrOyc+QmxvY2sgc3BhbiBpbiBhIGxpbmsgaW4gYSBs
aXN0IGl0ZW08L3NwYW4+PHNwYW4+SW5saW5lIHNwYW4gaW4gYSBsaW5rIGluIGEgbGlzdCBpdGVt
PC9zcGFuPjwvYT48L2xpPjwvb2w+PHNlbGVjdD48b3B0aW9uIHNlbGVjdGVkIHZhbHVlPSdmb28n
PkFuIG9wdGlvbiBpbiBhIGNvbWJvIGJveDwvb3B0aW9uPjwvc2VsZWN0PjxpbnB1dCB0eXBlPSd0
ZXh0JyBuYW1lPSdmb28nIHZhbHVlPSdmb28gYmFyIGJheicgLz48dGFibGU+PHRyPjx0ZD5hIHRh
YmxlIGNlbGw8L3RkPjx0ZD48L3RkPjx0ZD48YSBocmVmPSdmb28nPjxzcGFuIHN0eWxlPSdkaXNw
bGF5OmJsb2NrOyc+QmxvY2sgc3BhbiBpbiBhIGxpbmsgaW4gYSB0YWJsZSBjZWxsPC9zcGFuPjxz
cGFuPklubGluZSBzcGFuIGluIGEgbGluayBpbiBhIHRhYmxlIGNlbGw8L3NwYW4+PC9hPjwvdGQ+
PHRkPjxzcGFuIHN0eWxlPSdkaXNwbGF5OmJsb2NrOyc+QmxvY2sgc3BhbiBpbiBhIHRhYmxlIGNl
bGw8L3NwYW4+PHNwYW4+SW5saW5lIHNwYW4gaW4gYSB0YWJsZSBjZWxsPC9zcGFuPjwvdGQ+PC90
cj48L3RhYmxlPjxoND48YSBocmVmPSdmb28nPjxzcGFuIHN0eWxlPSdkaXNwbGF5OmJsb2NrOyc+
QmxvY2sgc3BhbiBpbiBhIGxpbmsgaW4gYSBoZWFkaW5nPC9zcGFuPjxzcGFuPklubGluZSBzcGFu
IGluIGEgbGluayBpbiBhIGhlYWRpbmc8L3NwYW4+PC9oND48aDQ+PHNwYW4gc3R5bGU9J2Rpc3Bs
YXk6YmxvY2s7Jz5CbG9jayBzcGFuIGluIGEgaGVhZGluZzwvc3Bhbj48c3Bhbj5JbmxpbmUgc3Bh
biBpbiBhIGhlYWRpbmc8L3NwYW4+PC9oND48L2JvZHk+PC9odG1sPiI7Ci0KLXN0YXRpYyBjb25z
dCBjaGFyKiB0ZXh0Rm9yU2VsZWN0aW9ucyA9ICI8aHRtbD48Ym9keT48cD5BIHBhcmFncmFwaCB3
aXRoIHBsYWluIHRleHQ8L3A+PHA+QSBwYXJhZ3JhcGggd2l0aCA8YSBocmVmPSdodHRwOi8vd2Vi
a2l0Lm9yZyc+YSBsaW5rPC9hPiBpbiB0aGUgbWlkZGxlPC9wPjxvbD48bGk+QSBsaXN0IGl0ZW08
L2xpPjwvb2w+PHNlbGVjdD48L2JvZHk+PC9odG1sPiI7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiB0
ZXh0V2l0aEF0dHJpYnV0ZXMgPSAiPGh0bWw+PGhlYWQ+PHN0eWxlPi5zdDEge2ZvbnQtZmFtaWx5
OiBtb25vc3BhY2U7IGNvbG9yOnJnYigxMjAsMTIxLDEyMik7fSAuc3QyIHt0ZXh0LWRlY29yYXRp
b246dW5kZXJsaW5lOyBiYWNrZ3JvdW5kLWNvbG9yOnJnYig4MCw4MSw4Mik7fTwvc3R5bGU+PC9o
ZWFkPjxib2R5PjxwIHN0eWxlPVwiZm9udC1zaXplOjE0OyB0ZXh0LWFsaWduOnJpZ2h0O1wiPlRo
aXMgaXMgdGhlIDxpPmZpcnN0PC9pPjxiPiBzZW50ZW5jZSBvZiB0aGlzIHRleHQuPC9iPjwvcD48
cCBjbGFzcz1cInN0MVwiPlRoaXMgc2VudGVuY2Ugc2hvdWxkIGhhdmUgYW4gc3R5bGUgYXBwbGll
ZCA8c3BhbiBjbGFzcz1cInN0MlwiPmFuZCB0aGlzIHBhcnQgc2hvdWxkIGhhdmUgYW5vdGhlciBv
bmU8L3NwYW4+LjwvcD48cD54PHN1Yj4xPC9zdWI+PHN1cD4yPC9zdXA+PXg8c3ViPjI8L3N1Yj48
c3VwPjM8L3N1cD48L3A+PHAgc3R5bGU9XCJ0ZXh0LWFsaWduOmNlbnRlcjtcIj5UaGlzIHNlbnRl
bmNlIGlzIHRoZSA8c3RyaWtlPmxhc3Q8L3N0cmlrZT4gb25lLjwvcD48L2JvZHk+PC9odG1sPiI7
Ci0KLXN0YXRpYyBBdGtPYmplY3QqIGdldFdlYkFyZWFPYmplY3QoV2ViS2l0V2ViVmlldyogd2Vi
VmlldykKLXsKLSAgICAvKiBNYW51YWxseSBzcGluIHRoZSBtYWluIGNvbnRleHQgdG8gbWFrZSBz
dXJlIHRoZSBhY2Nlc3NpYmxlCi0gICAgICAgb2JqZWN0cyBhcmUgcHJvcGVybHkgY3JlYXRlZCBi
ZWZvcmUgY29udGludWluZy4gKi8KLSAgICB3aGlsZSAoZ19tYWluX2NvbnRleHRfcGVuZGluZygw
KSkKLSAgICAgICAgZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uKDAsIFRSVUUpOwotCi0gICAgQXRr
T2JqZWN0KiByb290T2JqZWN0ID0gZ3RrX3dpZGdldF9nZXRfYWNjZXNzaWJsZShHVEtfV0lER0VU
KHdlYlZpZXcpKTsKLSAgICBpZiAoIXJvb3RPYmplY3QpCi0gICAgICAgIHJldHVybiBOVUxMOwot
Ci0gICAgQXRrT2JqZWN0KiB3ZWJBcmVhT2JqZWN0ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJs
ZV9jaGlsZChyb290T2JqZWN0LCAwKTsKLSAgICBpZiAoIXdlYkFyZWFPYmplY3QpCi0gICAgICAg
IHJldHVybiBOVUxMOwotCi0gICAgLyogV2UgZG9uJ3QgbmVlZCB0aGUgZXh0cmEgcmVmIGhlcmUu
ICovCi0gICAgZ19vYmplY3RfdW5yZWYod2ViQXJlYU9iamVjdCk7Ci0KLSAgICByZXR1cm4gd2Vi
QXJlYU9iamVjdDsKLX0KLQotc3RhdGljIGdjaGFyKiB0ZXh0Q2FyZXRNb3ZlZFJlc3VsdCA9IDA7
Ci0KLXN0YXRpYyB2b2lkIHRleHRDYXJldE1vdmVkQ2FsbGJhY2soQXRrVGV4dCogdGV4dCwgZ2lu
dCBwb3MsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQodGV4dCkp
OwotCi0gICAgZ19mcmVlKHRleHRDYXJldE1vdmVkUmVzdWx0KTsKLSAgICBBdGtSb2xlIHJvbGUg
PSBhdGtfb2JqZWN0X2dldF9yb2xlKEFUS19PQkpFQ1QodGV4dCkpOwotICAgIHRleHRDYXJldE1v
dmVkUmVzdWx0ID0gZ19zdHJkdXBfcHJpbnRmKCJ8JXN8JWR8IiwgYXRrX3JvbGVfZ2V0X25hbWUo
cm9sZSksIHBvcyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtDYXJldE9mZnNldHMo
KQotewotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0
X3dlYl92aWV3X25ldygpKTsKLSAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKLSAgICBH
dGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDgwMCwgNjAwIH07Ci0gICAgZ3RrX3dp
ZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQod2ViVmlldyksICZhbGxvY2F0aW9uKTsKLSAg
ICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgdGV4dEZvckNhcmV0QnJvd3Np
bmcsIDAsIDAsIDApOwotCi0gICAgQXRrT2JqZWN0KiBvYmplY3QgPSBnZXRXZWJBcmVhT2JqZWN0
KHdlYlZpZXcpOwotICAgIGdfYXNzZXJ0KG9iamVjdCk7Ci0KLSAgICBBdGtPYmplY3QqIGhlYWRl
ciA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAwKTsKLSAgICBnX2Fz
c2VydChBVEtfSVNfVEVYVChoZWFkZXIpKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGhlYWRlciwg
InRleHQtY2FyZXQtbW92ZWQiLCBHX0NBTExCQUNLKHRleHRDYXJldE1vdmVkQ2FsbGJhY2spLCAw
KTsKLQotICAgIC8qIEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBwbGFjZSB0aGUgY2FyZXQgaW5z
aWRlIGEgaGVhZGVyLiAqLwotICAgIGdib29sZWFuIHJlc3VsdCA9IGF0a190ZXh0X3NldF9jYXJl
dF9vZmZzZXQoQVRLX1RFWFQoaGVhZGVyKSwgNSk7Ci0gICAgZ19hc3NlcnRfY21waW50KHJlc3Vs
dCwgPT0sIFRSVUUpOwotICAgIGdpbnQgb2Zmc2V0ID0gYXRrX3RleHRfZ2V0X2NhcmV0X29mZnNl
dChBVEtfVEVYVChoZWFkZXIpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQob2Zmc2V0LCA9PSwgNSk7
Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRleHRDYXJldE1vdmVkUmVzdWx0LCA9PSwgInxoZWFkaW5n
fDV8Iik7Ci0KLSAgICBBdGtPYmplY3QqIHBhcmFncmFwaCA9IGF0a19vYmplY3RfcmVmX2FjY2Vz
c2libGVfY2hpbGQob2JqZWN0LCAxKTsKLSAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChwYXJhZ3Jh
cGgpKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHBhcmFncmFwaCwgInRleHQtY2FyZXQtbW92ZWQi
LCBHX0NBTExCQUNLKHRleHRDYXJldE1vdmVkQ2FsbGJhY2spLCAwKTsKLQotICAgIC8qIEl0IHNo
b3VsZCBiZSBwb3NzaWJsZSB0byBwbGFjZSB0aGUgY2FyZXQgaW5zaWRlIGEgcGFyYWdyYXBoIGFu
ZCBhIGxpbmsuICovCi0gICAgcmVzdWx0ID0gYXRrX3RleHRfc2V0X2NhcmV0X29mZnNldChBVEtf
VEVYVChwYXJhZ3JhcGgpLCA1KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQocmVzdWx0LCA9PSwgVFJV
RSk7Ci0gICAgb2Zmc2V0ID0gYXRrX3RleHRfZ2V0X2NhcmV0X29mZnNldChBVEtfVEVYVChwYXJh
Z3JhcGgpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQob2Zmc2V0LCA9PSwgNSk7Ci0gICAgZ19hc3Nl
cnRfY21wc3RyKHRleHRDYXJldE1vdmVkUmVzdWx0LCA9PSwgInxwYXJhZ3JhcGh8NXwiKTsKLQot
ICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQocGFyYWdyYXBo
KSwgMjApOwotICAgIGdfYXNzZXJ0X2NtcGludChyZXN1bHQsID09LCBUUlVFKTsKLSAgICBvZmZz
ZXQgPSBhdGtfdGV4dF9nZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhUKHBhcmFncmFwaCkpOwotICAg
IGdfYXNzZXJ0X2NtcGludChvZmZzZXQsID09LCAyMCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRl
eHRDYXJldE1vdmVkUmVzdWx0LCA9PSwgInxwYXJhZ3JhcGh8MjB8Iik7Ci0KLSAgICByZXN1bHQg
PSBhdGtfdGV4dF9zZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhUKHBhcmFncmFwaCksIDMwKTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQocmVzdWx0LCA9PSwgVFJVRSk7Ci0gICAgb2Zmc2V0ID0gYXRrX3Rl
eHRfZ2V0X2NhcmV0X29mZnNldChBVEtfVEVYVChwYXJhZ3JhcGgpKTsKLSAgICBnX2Fzc2VydF9j
bXBpbnQob2Zmc2V0LCA9PSwgMzApOwotICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0Q2FyZXRNb3Zl
ZFJlc3VsdCwgPT0sICJ8cGFyYWdyYXBofDMwfCIpOwotCi0gICAgQXRrT2JqZWN0KiBsaW5rID0g
YXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChwYXJhZ3JhcGgsIDApOwotICAgIGdfYXNz
ZXJ0KEFUS19JU19URVhUKGxpbmspKTsKLQotICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9jYXJl
dF9vZmZzZXQoQVRLX1RFWFQobGluayksIDUpOwotICAgIGdfYXNzZXJ0X2NtcGludChyZXN1bHQs
ID09LCBUUlVFKTsKLSAgICBvZmZzZXQgPSBhdGtfdGV4dF9nZXRfY2FyZXRfb2Zmc2V0KEFUS19U
RVhUKGxpbmspKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQob2Zmc2V0LCA9PSwgNSk7Ci0gICAgLyog
UG9zaXRpb25zIGluc2lkZSBsaW5rcyBhcmUgcmVwb3J0ZWQgcmVsYXRpdmUgdG8gdGhlIHBhcmFn
cmFwaC4gKi8KLSAgICBnX2Fzc2VydF9jbXBzdHIodGV4dENhcmV0TW92ZWRSZXN1bHQsID09LCAi
fHBhcmFncmFwaHwxN3wiKTsKLQotICAgIEF0a09iamVjdCogbGlzdCA9IGF0a19vYmplY3RfcmVm
X2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAyKTsKLSAgICBnX2Fzc2VydChBVEtfT0JKRUNUKGxp
c3QpKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGxpc3QpID09IEFUS19ST0xF
X0xJU1QpOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfb2JqZWN0X2dldF9uX2FjY2Vzc2libGVf
Y2hpbGRyZW4obGlzdCksID09LCAzKTsKLQotICAgIEF0a09iamVjdCogbGlzdEl0ZW0gPSBhdGtf
b2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGxpc3QsIDApOwotICAgIGxpc3RJdGVtID0gYXRr
X29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChsaXN0LCAyKTsKLSAgICBnX2Fzc2VydChBVEtf
SVNfVEVYVChsaXN0SXRlbSkpOwotCi0gICAgLyogSXQncyBub3QgcG9zc2libGUgdG8gcGxhY2Ug
dGhlIGNhcmV0IGluc2lkZSBhbiBpdGVtJ3MgbWFya2VyLiAqLwotICAgIHJlc3VsdCA9IGF0a190
ZXh0X3NldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQobGlzdEl0ZW0pLCAxKTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQocmVzdWx0LCA9PSwgRkFMU0UpOwotCi0gICAgLyogSXQgc2hvdWxkIGJlIHBvc3Np
YmxlIHRvIHBsYWNlIHRoZSBjYXJldCBpbnNpZGUgYW4gaXRlbSdzIHRleHQuICovCi0gICAgcmVz
dWx0ID0gYXRrX3RleHRfc2V0X2NhcmV0X29mZnNldChBVEtfVEVYVChsaXN0SXRlbSksIDUpOwot
ICAgIGdfYXNzZXJ0X2NtcGludChyZXN1bHQsID09LCBUUlVFKTsKLSAgICBvZmZzZXQgPSBhdGtf
dGV4dF9nZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhUKGxpc3RJdGVtKSk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KG9mZnNldCwgPT0sIDUpOwotCi0gICAgQXRrT2JqZWN0KiBwYW5lbCA9IGF0a19vYmpl
Y3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAzKTsKLSAgICBnX2Fzc2VydChBVEtfSVNf
T0JKRUNUKHBhbmVsKSk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShwYW5lbCkg
PT0gQVRLX1JPTEVfUEFORUwpOwotCi0gICAgQXRrT2JqZWN0KiBjb21ib0JveCA9IGF0a19vYmpl
Y3RfcmVmX2FjY2Vzc2libGVfY2hpbGQocGFuZWwsIDApOwotICAgIGdfYXNzZXJ0KEFUS19JU19P
QkpFQ1QoY29tYm9Cb3gpKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGNvbWJv
Qm94KSA9PSBBVEtfUk9MRV9DT01CT19CT1gpOwotCi0gICAgQXRrT2JqZWN0KiBtZW51UG9wdXAg
PSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGNvbWJvQm94LCAwKTsKLSAgICBnX2Fz
c2VydChBVEtfSVNfT0JKRUNUKG1lbnVQb3B1cCkpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3Rf
Z2V0X3JvbGUobWVudVBvcHVwKSA9PSBBVEtfUk9MRV9NRU5VKTsKLQotICAgIEF0a09iamVjdCog
Y29tYm9Cb3hPcHRpb24gPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG1lbnVQb3B1
cCwgMCk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX09CSkVDVChjb21ib0JveE9wdGlvbikpOwotICAg
IGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoY29tYm9Cb3hPcHRpb24pID09IEFUS19ST0xF
X01FTlVfSVRFTSk7Ci0KLSAgICAvKiBJdCdzIG5vdCBwb3NzaWJsZSB0byBwbGFjZSB0aGUgY2Fy
ZXQgaW5zaWRlIGFuIG9wdGlvbiBmb3IgYSBjb21ib2JveC4gKi8KLSAgICByZXN1bHQgPSBhdGtf
dGV4dF9zZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhUKGNvbWJvQm94T3B0aW9uKSwgMSk7Ci0gICAg
Z19hc3NlcnRfY21waW50KHJlc3VsdCwgPT0sIEZBTFNFKTsKLQotICAgIEF0a09iamVjdCogdGV4
dEVudHJ5ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChwYW5lbCwgMSk7Ci0gICAg
Z19hc3NlcnQoQVRLX0lTX09CSkVDVCh0ZXh0RW50cnkpKTsKLSAgICBnX2Fzc2VydChhdGtfb2Jq
ZWN0X2dldF9yb2xlKHRleHRFbnRyeSkgPT0gQVRLX1JPTEVfRU5UUlkpOwotCi0gICAgcmVzdWx0
ID0gYXRrX3RleHRfc2V0X2NhcmV0X29mZnNldChBVEtfVEVYVCh0ZXh0RW50cnkpLCA1KTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQocmVzdWx0LCA9PSwgVFJVRSk7Ci0gICAgb2Zmc2V0ID0gYXRrX3Rl
eHRfZ2V0X2NhcmV0X29mZnNldChBVEtfVEVYVCh0ZXh0RW50cnkpKTsKLSAgICBnX2Fzc2VydF9j
bXBpbnQob2Zmc2V0LCA9PSwgNSk7Ci0KLSAgICBBdGtPYmplY3QqIHRhYmxlID0gYXRrX29iamVj
dF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDQpOwotICAgIGdfYXNzZXJ0KEFUS19JU19P
QkpFQ1QodGFibGUpKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKHRhYmxlKSA9
PSBBVEtfUk9MRV9UQUJMRSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a19vYmplY3RfZ2V0X25f
YWNjZXNzaWJsZV9jaGlsZHJlbih0YWJsZSksID09LCA0KTsKLQotICAgIEF0a09iamVjdCogdGFi
bGVDZWxsID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZCh0YWJsZSwgMCk7Ci0gICAg
Z19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZSh0YWJsZUNlbGwpID09IEFUS19ST0xFX1RBQkxF
X0NFTEwpOwotICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQo
dGFibGVDZWxsKSwgMik7Ci0gICAgZ19hc3NlcnRfY21waW50KHJlc3VsdCwgPT0sIFRSVUUpOwot
ICAgIG9mZnNldCA9IGF0a190ZXh0X2dldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQodGFibGVDZWxs
KSk7Ci0gICAgZ19hc3NlcnRfY21waW50KG9mZnNldCwgPT0sIDIpOwotCi0gICAgZ19mcmVlKHRl
eHRDYXJldE1vdmVkUmVzdWx0KTsKLQotICAgIGdfb2JqZWN0X3VucmVmKHBhcmFncmFwaCk7Ci0g
ICAgZ19vYmplY3RfdW5yZWYobGluayk7Ci0gICAgZ19vYmplY3RfdW5yZWYobGlzdCk7Ci0gICAg
Z19vYmplY3RfdW5yZWYobGlzdEl0ZW0pOwotICAgIGdfb2JqZWN0X3VucmVmKHBhbmVsKTsKLSAg
ICBnX29iamVjdF91bnJlZihjb21ib0JveCk7Ci0gICAgZ19vYmplY3RfdW5yZWYobWVudVBvcHVw
KTsKLSAgICBnX29iamVjdF91bnJlZihjb21ib0JveE9wdGlvbik7Ci0gICAgZ19vYmplY3RfdW5y
ZWYodGV4dEVudHJ5KTsKLSAgICBnX29iamVjdF91bnJlZih0YWJsZSk7Ci0gICAgZ19vYmplY3Rf
dW5yZWYodGFibGVDZWxsKTsKLSAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKLX0KLQotc3Rh
dGljIHZvaWQgdGVzdFdlYmtpdEF0a0NhcmV0T2Zmc2V0c0FuZEV4dHJhbm91c1doaXRlU3BhY2Vz
KCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtp
dF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7Ci0gICAg
R3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9OwotICAgIGd0a193
aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7Ci0g
ICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIGNvbnRlbnRzV2l0aEV4dHJh
bmVvdXNXaGl0ZVNwYWNlcywgMCwgMCwgMCk7Ci0KLSAgICAvKiBFbmFibGUgY2FyZXQgYnJvd3Np
bmcuICovCi0gICAgV2ViS2l0V2ViU2V0dGluZ3MqIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3
X2dldF9zZXR0aW5ncyh3ZWJWaWV3KTsKLSAgICBnX29iamVjdF9zZXQoR19PQkpFQ1Qoc2V0dGlu
Z3MpLCAiZW5hYmxlLWNhcmV0LWJyb3dzaW5nIiwgVFJVRSwgTlVMTCk7Ci0KLSAgICAvKiBHZXQg
dG8gdGhlIGlubmVyIEF0a1RleHQgb2JqZWN0LiAqLwotICAgIEF0a09iamVjdCogb2JqZWN0ID0g
Z2V0V2ViQXJlYU9iamVjdCh3ZWJWaWV3KTsKLSAgICBnX2Fzc2VydChvYmplY3QpOwotICAgIG9i
amVjdCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAwKTsKLSAgICBn
X2Fzc2VydChvYmplY3QpOwotCi0gICAgQXRrVGV4dCogdGV4dE9iamVjdCA9IEFUS19URVhUKG9i
amVjdCk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQodGV4dE9iamVjdCkpOwotCi0gICAgZ2lu
dCBjaGFyYWN0ZXJDb3VudCA9IGF0a190ZXh0X2dldF9jaGFyYWN0ZXJfY291bnQodGV4dE9iamVj
dCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGNoYXJhY3RlckNvdW50LCA9PSwgMjUpOwotCi0gICAg
Z2Jvb2xlYW4gcmVzdWx0ID0gYXRrX3RleHRfc2V0X2NhcmV0X29mZnNldCh0ZXh0T2JqZWN0LCBj
aGFyYWN0ZXJDb3VudCAtIDEpOwotICAgIGdfYXNzZXJ0X2NtcGludChyZXN1bHQsID09LCBUUlVF
KTsKLQotICAgIGdpbnQgY2FyZXRPZmZzZXQgPSBhdGtfdGV4dF9nZXRfY2FyZXRfb2Zmc2V0KHRl
eHRPYmplY3QpOwotICAgIGdfYXNzZXJ0X2NtcGludChjYXJldE9mZnNldCwgPT0sIGNoYXJhY3Rl
ckNvdW50IC0gMSk7Ci0KLSAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfY2FyZXRfb2Zmc2V0KHRl
eHRPYmplY3QsIGNoYXJhY3RlckNvdW50KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQocmVzdWx0LCA9
PSwgVFJVRSk7Ci0KLSAgICBjYXJldE9mZnNldCA9IGF0a190ZXh0X2dldF9jYXJldF9vZmZzZXQo
dGV4dE9iamVjdCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGNhcmV0T2Zmc2V0LCA9PSwgY2hhcmFj
dGVyQ291bnQpOwotCi0gICAgZ19vYmplY3RfdW5yZWYob2JqZWN0KTsKLSAgICBnX29iamVjdF91
bnJlZih3ZWJWaWV3KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0NvbWJvQm94KCkK
LXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93
ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7Ci0gICAgR3Rr
QWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9OwotICAgIGd0a193aWRn
ZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7Ci0gICAg
d2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIGNvbWJvQm94U2VsZWN0b3IsIDAs
IDAsIDApOwotCi0gICAgQXRrT2JqZWN0KiBvYmplY3QgPSBnZXRXZWJBcmVhT2JqZWN0KHdlYlZp
ZXcpOwotICAgIGdfYXNzZXJ0KG9iamVjdCk7Ci0KLSAgICBBdGtPYmplY3QqIGZvcm1PYmplY3Qg
PSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMCk7Ci0gICAgZ19hc3Nl
cnQoZm9ybU9iamVjdCk7Ci0KLSAgICBBdGtPYmplY3QqIGNvbWJvQm94ID0gYXRrX29iamVjdF9y
ZWZfYWNjZXNzaWJsZV9jaGlsZChmb3JtT2JqZWN0LCAwKTsKLSAgICBnX2Fzc2VydChBVEtfSVNf
T0JKRUNUKGNvbWJvQm94KSk7Ci0KLSAgICBBdGtPYmplY3QqIG1lbnVQb3B1cCA9IGF0a19vYmpl
Y3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoY29tYm9Cb3gsIDApOwotICAgIGdfYXNzZXJ0KEFUS19J
U19PQkpFQ1QobWVudVBvcHVwKSk7Ci0KLSAgICBBdGtPYmplY3QqIGl0ZW0xID0gYXRrX29iamVj
dF9yZWZfYWNjZXNzaWJsZV9jaGlsZChtZW51UG9wdXAsIDApOwotICAgIGdfYXNzZXJ0KEFUS19J
U19PQkpFQ1QoaXRlbTEpKTsKLQotICAgIEF0a09iamVjdCogaXRlbTIgPSBhdGtfb2JqZWN0X3Jl
Zl9hY2Nlc3NpYmxlX2NoaWxkKG1lbnVQb3B1cCwgMSk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX09C
SkVDVChpdGVtMikpOwotCi0gICAgLyogQ2hlY2sgcm9sZXMuICovCi0gICAgZ19hc3NlcnQoYXRr
X29iamVjdF9nZXRfcm9sZShjb21ib0JveCkgPT0gQVRLX1JPTEVfQ09NQk9fQk9YKTsKLSAgICBn
X2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKG1lbnVQb3B1cCkgPT0gQVRLX1JPTEVfTUVOVSk7
Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShpdGVtMSkgPT0gQVRLX1JPTEVfTUVO
VV9JVEVNKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGl0ZW0yKSA9PSBBVEtf
Uk9MRV9NRU5VX0lURU0pOwotCi0gICAgLyogQ2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRo
ZSBBdGtTZWxlY3Rpb24gaW50ZXJmYWNlLiAqLwotICAgIGdfYXNzZXJ0KEFUS19JU19TRUxFQ1RJ
T04oY29tYm9Cb3gpKTsKLSAgICBBdGtTZWxlY3Rpb24qIGF0a1NlbGVjdGlvbiA9IEFUS19TRUxF
Q1RJT04oY29tYm9Cb3gpOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfc2VsZWN0aW9uX2dldF9z
ZWxlY3Rpb25fY291bnQoYXRrU2VsZWN0aW9uKSwgPT0sIDEpOwotICAgIGdfYXNzZXJ0KGF0a19z
ZWxlY3Rpb25faXNfY2hpbGRfc2VsZWN0ZWQoYXRrU2VsZWN0aW9uLCAwKSk7Ci0gICAgZ19hc3Nl
cnQoIWF0a19zZWxlY3Rpb25faXNfY2hpbGRfc2VsZWN0ZWQoYXRrU2VsZWN0aW9uLCAxKSk7Ci0g
ICAgQXRrT2JqZWN0KiBzZWxlY3RlZEl0ZW0gPSBhdGtfc2VsZWN0aW9uX3JlZl9zZWxlY3Rpb24o
YXRrU2VsZWN0aW9uLCAwKTsKLSAgICBnX2Fzc2VydChzZWxlY3RlZEl0ZW0gPT0gaXRlbTEpOwot
ICAgIGdfb2JqZWN0X3VucmVmKHNlbGVjdGVkSXRlbSk7Ci0KLSAgICAvKiBDaGVjayB0aGF0IHRo
ZSBtZW51IHBvcHVwIGhhcyAwIGxpbmtzIGFuZCBkb2Vzbid0IGNyYXNoIGZyb20gY2hlY2tpbmcu
ICovCi0gICAgZ2ludCBuTGlua3MgPSBhdGtfaHlwZXJ0ZXh0X2dldF9uX2xpbmtzKEFUS19IWVBF
UlRFWFQobWVudVBvcHVwKSk7Ci0gICAgZ19hc3NlcnRfY21waW50KG5MaW5rcywgPT0sIDApOwot
Ci0gICAgLyogQ2hlY2sgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgQXRrQWN0aW9uIGludGVy
ZmFjZS4gKi8KLSAgICBnX2Fzc2VydChBVEtfSVNfQUNUSU9OKGNvbWJvQm94KSk7Ci0gICAgQXRr
QWN0aW9uKiBhdGtBY3Rpb24gPSBBVEtfQUNUSU9OKGNvbWJvQm94KTsKLSAgICBnX2Fzc2VydF9j
bXBpbnQoYXRrX2FjdGlvbl9nZXRfbl9hY3Rpb25zKGF0a0FjdGlvbiksID09LCAxKTsKLSAgICBn
X2Fzc2VydChhdGtfYWN0aW9uX2RvX2FjdGlvbihhdGtBY3Rpb24sIDApKTsKLQotICAgIGdfYXNz
ZXJ0KEFUS19JU19BQ1RJT04obWVudVBvcHVwKSk7Ci0gICAgYXRrQWN0aW9uID0gQVRLX0FDVElP
TihtZW51UG9wdXApOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfYWN0aW9uX2dldF9uX2FjdGlv
bnMoYXRrQWN0aW9uKSwgPT0sIDEpOwotICAgIGdfYXNzZXJ0KGF0a19hY3Rpb25fZG9fYWN0aW9u
KGF0a0FjdGlvbiwgMCkpOwotCi0gICAgZ19hc3NlcnQoQVRLX0lTX0FDVElPTihpdGVtMSkpOwot
ICAgIGF0a0FjdGlvbiA9IEFUS19BQ1RJT04oaXRlbTEpOwotICAgIGdfYXNzZXJ0X2NtcGludChh
dGtfYWN0aW9uX2dldF9uX2FjdGlvbnMoYXRrQWN0aW9uKSwgPT0sIDEpOwotICAgIGdfYXNzZXJ0
KGF0a19hY3Rpb25fZG9fYWN0aW9uKGF0a0FjdGlvbiwgMCkpOwotCi0gICAgZ19hc3NlcnQoQVRL
X0lTX0FDVElPTihpdGVtMikpOwotICAgIGF0a0FjdGlvbiA9IEFUS19BQ1RJT04oaXRlbTIpOwot
ICAgIGdfYXNzZXJ0X2NtcGludChhdGtfYWN0aW9uX2dldF9uX2FjdGlvbnMoYXRrQWN0aW9uKSwg
PT0sIDEpOwotICAgIGdfYXNzZXJ0KGF0a19hY3Rpb25fZG9fYWN0aW9uKGF0a0FjdGlvbiwgMCkp
OwotCi0gICAgLyogQWZ0ZXIgc2VsZWN0aW5nIHRoZSBzZWNvbmQgaXRlbSwgc2VsZWN0aW9uIHNo
b3VsZCBoYXZlIGNoYW5nZWQuICovCi0gICAgZ19hc3NlcnRfY21waW50KGF0a19zZWxlY3Rpb25f
Z2V0X3NlbGVjdGlvbl9jb3VudChhdGtTZWxlY3Rpb24pLCA9PSwgMSk7Ci0gICAgZ19hc3NlcnQo
IWF0a19zZWxlY3Rpb25faXNfY2hpbGRfc2VsZWN0ZWQoYXRrU2VsZWN0aW9uLCAwKSk7Ci0gICAg
Z19hc3NlcnQoYXRrX3NlbGVjdGlvbl9pc19jaGlsZF9zZWxlY3RlZChhdGtTZWxlY3Rpb24sIDEp
KTsKLSAgICBzZWxlY3RlZEl0ZW0gPSBhdGtfc2VsZWN0aW9uX3JlZl9zZWxlY3Rpb24oYXRrU2Vs
ZWN0aW9uLCAwKTsKLSAgICBnX2Fzc2VydChzZWxlY3RlZEl0ZW0gPT0gaXRlbTIpOwotICAgIGdf
b2JqZWN0X3VucmVmKHNlbGVjdGVkSXRlbSk7Ci0KLSAgICBnX29iamVjdF91bnJlZihmb3JtT2Jq
ZWN0KTsKLSAgICBnX29iamVjdF91bnJlZihjb21ib0JveCk7Ci0gICAgZ19vYmplY3RfdW5yZWYo
bWVudVBvcHVwKTsKLSAgICBnX29iamVjdF91bnJlZihpdGVtMSk7Ci0gICAgZ19vYmplY3RfdW5y
ZWYoaXRlbTIpOwotICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwotfQotCi1zdGF0aWMgZ2No
YXIqIGxvYWRpbmdFdmVudHNSZXN1bHQgPSAwOwotCi1zdGF0aWMgdm9pZCB1cGRhdGVMb2FkaW5n
RXZlbnRzUmVzdWx0KGNvbnN0IGdjaGFyKiBzaWduYWxOYW1lKQotewotICAgIGdfYXNzZXJ0KHNp
Z25hbE5hbWUpOwotCi0gICAgZ2NoYXIqIHByZXZpb3VzUmVzdWx0ID0gbG9hZGluZ0V2ZW50c1Jl
c3VsdDsKLSAgICBsb2FkaW5nRXZlbnRzUmVzdWx0ID0gZ19zdHJkdXBfcHJpbnRmKCIlc3wlcyIs
IHByZXZpb3VzUmVzdWx0LCBzaWduYWxOYW1lKTsKLSAgICBnX2ZyZWUocHJldmlvdXNSZXN1bHQp
OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gZG9jdW1lbnRMb2FkaW5nRXZlbnRDYWxsYmFjayhHU2ln
bmFsSW52b2NhdGlvbkhpbnQgKnNpZ25hbEhpbnQsIGd1aW50IG51bVBhcmFtVmFsdWVzLCBjb25z
dCBHVmFsdWUgKnBhcmFtVmFsdWVzLCBncG9pbnRlciBkYXRhKQotewotICAgIC8vIEF0IGxlYXN0
IHdlIHNob3VsZCByZWNlaXZlIHRoZSBpbnN0YW5jZSBlbWl0dGluZyB0aGUgc2lnbmFsLgotICAg
IGlmIChudW1QYXJhbVZhbHVlcyA8IDEpCi0gICAgICAgIHJldHVybiBUUlVFOwotCi0gICAgR1Np
Z25hbFF1ZXJ5IHNpZ25hbF9xdWVyeTsKLSAgICBnX3NpZ25hbF9xdWVyeShzaWduYWxIaW50LT5z
aWduYWxfaWQsICZzaWduYWxfcXVlcnkpOwotCi0gICAgdXBkYXRlTG9hZGluZ0V2ZW50c1Jlc3Vs
dChzaWduYWxfcXVlcnkuc2lnbmFsX25hbWUpOwotICAgIHJldHVybiBUUlVFOwotfQotCi1zdGF0
aWMgdm9pZCB0ZXN0V2Via2l0QXRrRG9jdW1lbnRMb2FkaW5nRXZlbnRzKCkKLXsKLSAgICBXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXco
KSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7Ci0gICAgR3RrQWxsb2NhdGlvbiBh
bGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9OwotICAgIGd0a193aWRnZXRfc2l6ZV9hbGxv
Y2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7Ci0KLSAgICAvKiBDb25uZWN0
IGdsb2JhbGx5IHRvIHNlZSB0aG9zZSBldmVudHMgZHVyaW5nIGEgZnV0dXJlIGxvYWQuICovCi0g
ICAgZ3VpbnQgbG9hZENvbXBsZXRlTGlzdGVuZXJJZCA9IGF0a19hZGRfZ2xvYmFsX2V2ZW50X2xp
c3RlbmVyKGRvY3VtZW50TG9hZGluZ0V2ZW50Q2FsbGJhY2ssICJBVEs6QXRrRG9jdW1lbnQ6bG9h
ZC1jb21wbGV0ZSIpOwotCi0gICAgLyogRG8gdGhlIGxvYWQsIHNvIHdlIGNhbiBzZWUgdGhvc2Ug
ZXZlbnRzIGhhcHBlbmluZy4gKi8KLSAgICBsb2FkaW5nRXZlbnRzUmVzdWx0ID0gZ19zdHJkdXAo
IiIpOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LCBjb250ZW50cywg
MCwgMCwgMCk7Ci0KLSAgICAvKiBUcmlnZ2VyIHRoZSBjcmVhdGlvbiBvZiB0aGUgZnVsbCBhY2Nl
c3NpYmlsaXR5IGhpZXJhcmNoeSBieQotICAgICAgIGFza2luZyBmb3IgdGhlIHdlYkFyZWEgb2Jq
ZWN0LCBzbyB3ZSBjYW4gbGlzdGVuIHRvIGV2ZW50cy4gKi8KLSAgICBnZXRXZWJBcmVhT2JqZWN0
KHdlYlZpZXcpOwotCi0gICAgYXRrX3JlbW92ZV9nbG9iYWxfZXZlbnRfbGlzdGVuZXIobG9hZENv
bXBsZXRlTGlzdGVuZXJJZCk7Ci0KLSAgICBnX2Fzc2VydF9jbXBzdHIobG9hZGluZ0V2ZW50c1Jl
c3VsdCwgPT0sICJ8bG9hZC1jb21wbGV0ZSIpOwotCi0gICAgZ19mcmVlKGxvYWRpbmdFdmVudHNS
ZXN1bHQpOwotICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwotfQotCi1zdGF0aWMgdm9pZCB0
ZXN0V2Via2l0QXRrRW1iZWRkZWRPYmplY3RzKCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmpl
Y3RfcmVmX3Npbmsod2ViVmlldyk7Ci0gICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAw
LCAwLCA4MDAsIDYwMCB9OwotICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VU
KHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5n
KHdlYlZpZXcsIGVtYmVkZGVkT2JqZWN0cywgMCwgMCwgMCk7Ci0KLSAgICBBdGtPYmplY3QqIG9i
amVjdCA9IGdldFdlYkFyZWFPYmplY3Qod2ViVmlldyk7Ci0gICAgZ19hc3NlcnQob2JqZWN0KTsK
LQotICAgIEF0a1RleHQqIHBhcmFncmFwaDEgPSBBVEtfVEVYVChhdGtfb2JqZWN0X3JlZl9hY2Nl
c3NpYmxlX2NoaWxkKG9iamVjdCwgMCkpOwotICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHBhcmFn
cmFwaDEpKTsKLSAgICBnX2Fzc2VydChBVEtfSVNfSFlQRVJURVhUKHBhcmFncmFwaDEpKTsKLQot
ICAgIGdpbnQgbkxpbmtzID0gYXRrX2h5cGVydGV4dF9nZXRfbl9saW5rcyhBVEtfSFlQRVJURVhU
KHBhcmFncmFwaDEpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQobkxpbmtzLCA9PSwgMik7Ci0KLSAg
ICBBdGtIeXBlcmxpbmsqIGhMaW5rID0gYXRrX2h5cGVydGV4dF9nZXRfbGluayhBVEtfSFlQRVJU
RVhUKHBhcmFncmFwaDEpLCAwKTsKLSAgICBnX2Fzc2VydChBVEtfSFlQRVJMSU5LKGhMaW5rKSk7
Ci0gICAgQXRrT2JqZWN0KiBoTGlua09iamVjdCA9IGF0a19oeXBlcmxpbmtfZ2V0X29iamVjdCho
TGluaywgMCk7Ci0gICAgZ19hc3NlcnQoQVRLX09CSkVDVChoTGlua09iamVjdCkpOwotICAgIGdf
YXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoaExpbmtPYmplY3QpID09IEFUS19ST0xFX0NIRUNL
X0JPWCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0X3N0YXJ0X2luZGV4
KGhMaW5rKSwgPT0sIDgpOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9l
bmRfaW5kZXgoaExpbmspLCA9PSwgOSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBlcmxp
bmtfZ2V0X25fYW5jaG9ycyhoTGluayksID09LCAxKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoYXRr
X2h5cGVybGlua19nZXRfdXJpKGhMaW5rLCAwKSwgPT0sIDApOwotCi0gICAgQXRrVGV4dCogcGFy
YWdyYXBoMiA9IEFUS19URVhUKGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0
LCAxKSk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX0hZUEVSVEVYVChwYXJhZ3JhcGgyKSk7Ci0KLSAg
ICBuTGlua3MgPSBhdGtfaHlwZXJ0ZXh0X2dldF9uX2xpbmtzKEFUS19IWVBFUlRFWFQocGFyYWdy
YXBoMikpOwotICAgIGdfYXNzZXJ0X2NtcGludChuTGlua3MsID09LCAxKTsKLQotICAgIGhMaW5r
ID0gYXRrX2h5cGVydGV4dF9nZXRfbGluayhBVEtfSFlQRVJURVhUKHBhcmFncmFwaDIpLCAwKTsK
LSAgICBnX2Fzc2VydChBVEtfSFlQRVJMSU5LKGhMaW5rKSk7Ci0gICAgaExpbmtPYmplY3QgPSBh
dGtfaHlwZXJsaW5rX2dldF9vYmplY3QoaExpbmssIDApOwotICAgIGdfYXNzZXJ0KEFUS19PQkpF
Q1QoaExpbmtPYmplY3QpKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGhMaW5r
T2JqZWN0KSA9PSBBVEtfUk9MRV9DT01CT19CT1gpOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtf
aHlwZXJsaW5rX2dldF9zdGFydF9pbmRleChoTGluayksID09LCA4KTsKLSAgICBnX2Fzc2VydF9j
bXBpbnQoYXRrX2h5cGVybGlua19nZXRfZW5kX2luZGV4KGhMaW5rKSwgPT0sIDkpOwotICAgIGdf
YXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9uX2FuY2hvcnMoaExpbmspLCA9PSwgMSk7
Ci0gICAgZ19hc3NlcnRfY21wc3RyKGF0a19oeXBlcmxpbmtfZ2V0X3VyaShoTGluaywgMCksID09
LCAwKTsKLQotICAgIEF0a1RleHQqIHBhcmFncmFwaDMgPSBBVEtfVEVYVChhdGtfb2JqZWN0X3Jl
Zl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMikpOwotICAgIGdfYXNzZXJ0KEFUS19JU19IWVBF
UlRFWFQocGFyYWdyYXBoMykpOwotCi0gICAgbkxpbmtzID0gYXRrX2h5cGVydGV4dF9nZXRfbl9s
aW5rcyhBVEtfSFlQRVJURVhUKHBhcmFncmFwaDMpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQobkxp
bmtzLCA9PSwgMSk7Ci0KLSAgICBoTGluayA9IGF0a19oeXBlcnRleHRfZ2V0X2xpbmsoQVRLX0hZ
UEVSVEVYVChwYXJhZ3JhcGgzKSwgMCk7Ci0gICAgZ19hc3NlcnQoQVRLX0hZUEVSTElOSyhoTGlu
aykpOwotICAgIGhMaW5rT2JqZWN0ID0gYXRrX2h5cGVybGlua19nZXRfb2JqZWN0KGhMaW5rLCAw
KTsKLSAgICBnX2Fzc2VydChBVEtfT0JKRUNUKGhMaW5rT2JqZWN0KSk7Ci0gICAgZ19hc3NlcnQo
YXRrX29iamVjdF9nZXRfcm9sZShoTGlua09iamVjdCkgPT0gQVRLX1JPTEVfUFVTSF9CVVRUT04p
OwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9zdGFydF9pbmRleChoTGlu
ayksID09LCAwKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfZW5kX2lu
ZGV4KGhMaW5rKSwgPT0sIDEpOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dl
dF9uX2FuY2hvcnMoaExpbmspLCA9PSwgMSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKGF0a19oeXBl
cmxpbmtfZ2V0X3VyaShoTGluaywgMCksID09LCAwKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKHBh
cmFncmFwaDEpOwotICAgIGdfb2JqZWN0X3VucmVmKHBhcmFncmFwaDIpOwotICAgIGdfb2JqZWN0
X3VucmVmKHBhcmFncmFwaDMpOwotICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwotfQotCi1z
dGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrR2V0SGVhZGVyc0luVGFibGUoKQotewotICAgIFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygp
KTsKLSAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKLSAgICBHdGtBbGxvY2F0aW9uIGFs
bG9jYXRpb24gPSB7IDAsIDAsIDgwMCwgNjAwIH07Ci0gICAgZ3RrX3dpZGdldF9zaXplX2FsbG9j
YXRlKEdUS19XSURHRVQod2ViVmlldyksICZhbGxvY2F0aW9uKTsKLSAgICB3ZWJraXRfd2ViX3Zp
ZXdfbG9hZF9zdHJpbmcod2ViVmlldywgY29udGVudHNJblRhYmxlV2l0aEhlYWRlcnMsIDAsIDAs
IDApOwotCi0gICAgQXRrT2JqZWN0KiBheFdlYlZpZXcgPSBnZXRXZWJBcmVhT2JqZWN0KHdlYlZp
ZXcpOwotICAgIGdfYXNzZXJ0KGF4V2ViVmlldyk7Ci0KLSAgICAvKiBDaGVjayB0YWJsZSB3aXRo
IGJvdGggY29sdW1uIGFuZCByb3cgaGVhZGVycy4gKi8KLSAgICBBdGtPYmplY3QqIHRhYmxlID0g
YXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChheFdlYlZpZXcsIDApOwotICAgIGdfYXNz
ZXJ0KHRhYmxlKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKHRhYmxlKSA9PSBB
VEtfUk9MRV9UQUJMRSk7Ci0KLSAgICBBdGtPYmplY3QqIGNvbEhlYWRlciA9IGF0a190YWJsZV9n
ZXRfY29sdW1uX2hlYWRlcihBVEtfVEFCTEUodGFibGUpLCAwKTsKLSAgICBnX2Fzc2VydChjb2xI
ZWFkZXIpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoY29sSGVhZGVyKSA9PSBB
VEtfUk9MRV9UQUJMRV9DRUxMKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9pbmRleF9p
bl9wYXJlbnQoY29sSGVhZGVyKSA9PSAwKTsKLQotICAgIGNvbEhlYWRlciA9IGF0a190YWJsZV9n
ZXRfY29sdW1uX2hlYWRlcihBVEtfVEFCTEUodGFibGUpLCAxKTsKLSAgICBnX2Fzc2VydChjb2xI
ZWFkZXIpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoY29sSGVhZGVyKSA9PSBB
VEtfUk9MRV9UQUJMRV9DRUxMKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9pbmRleF9p
bl9wYXJlbnQoY29sSGVhZGVyKSA9PSAxKTsKLQotICAgIGNvbEhlYWRlciA9IGF0a190YWJsZV9n
ZXRfY29sdW1uX2hlYWRlcihBVEtfVEFCTEUodGFibGUpLCAyKTsKLSAgICBnX2Fzc2VydChjb2xI
ZWFkZXIpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoY29sSGVhZGVyKSA9PSBB
VEtfUk9MRV9UQUJMRV9DRUxMKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9pbmRleF9p
bl9wYXJlbnQoY29sSGVhZGVyKSA9PSAyKTsKLQotICAgIGNvbEhlYWRlciA9IGF0a190YWJsZV9n
ZXRfY29sdW1uX2hlYWRlcihBVEtfVEFCTEUodGFibGUpLCAzKTsKLSAgICBnX2Fzc2VydChjb2xI
ZWFkZXIpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoY29sSGVhZGVyKSA9PSBB
VEtfUk9MRV9UQUJMRV9DRUxMKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9pbmRleF9p
bl9wYXJlbnQoY29sSGVhZGVyKSA9PSAyKTsKLQotICAgIEF0a09iamVjdCogcm93SGVhZGVyID0g
YXRrX3RhYmxlX2dldF9yb3dfaGVhZGVyKEFUS19UQUJMRSh0YWJsZSksIDApOwotICAgIGdfYXNz
ZXJ0KHJvd0hlYWRlcik7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShyb3dIZWFk
ZXIpID09IEFUS19ST0xFX1RBQkxFX0NFTEwpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0
X2luZGV4X2luX3BhcmVudChyb3dIZWFkZXIpID09IDApOwotCi0gICAgcm93SGVhZGVyID0gYXRr
X3RhYmxlX2dldF9yb3dfaGVhZGVyKEFUS19UQUJMRSh0YWJsZSksIDEpOwotICAgIGdfYXNzZXJ0
KHJvd0hlYWRlcik7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShyb3dIZWFkZXIp
ID09IEFUS19ST0xFX1RBQkxFX0NFTEwpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X2lu
ZGV4X2luX3BhcmVudChyb3dIZWFkZXIpID09IDMpOwotCi0gICAgcm93SGVhZGVyID0gYXRrX3Rh
YmxlX2dldF9yb3dfaGVhZGVyKEFUS19UQUJMRSh0YWJsZSksIDIpOwotICAgIGdfYXNzZXJ0KHJv
d0hlYWRlcik7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShyb3dIZWFkZXIpID09
IEFUS19ST0xFX1RBQkxFX0NFTEwpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X2luZGV4
X2luX3BhcmVudChyb3dIZWFkZXIpID09IDcpOwotCi0gICAgcm93SGVhZGVyID0gYXRrX3RhYmxl
X2dldF9yb3dfaGVhZGVyKEFUS19UQUJMRSh0YWJsZSksIDMpOwotICAgIGdfYXNzZXJ0KHJvd0hl
YWRlcik7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShyb3dIZWFkZXIpID09IEFU
S19ST0xFX1RBQkxFX0NFTEwpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X2luZGV4X2lu
X3BhcmVudChyb3dIZWFkZXIpID09IDcpOwotCi0gICAgZ19vYmplY3RfdW5yZWYodGFibGUpOwot
Ci0gICAgLyogQ2hlY2sgdGFibGUgd2l0aCBubyBoZWFkZXJzIGF0IGFsbC4gKi8KLSAgICB0YWJs
ZSA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoYXhXZWJWaWV3LCAxKTsKLSAgICBn
X2Fzc2VydCh0YWJsZSk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZSh0YWJsZSkg
PT0gQVRLX1JPTEVfVEFCTEUpOwotCi0gICAgY29sSGVhZGVyID0gYXRrX3RhYmxlX2dldF9jb2x1
bW5faGVhZGVyKEFUS19UQUJMRSh0YWJsZSksIDApOwotICAgIGdfYXNzZXJ0KGNvbEhlYWRlciA9
PSAwKTsKLQotICAgIGNvbEhlYWRlciA9IGF0a190YWJsZV9nZXRfY29sdW1uX2hlYWRlcihBVEtf
VEFCTEUodGFibGUpLCAxKTsKLSAgICBnX2Fzc2VydChjb2xIZWFkZXIgPT0gMCk7Ci0KLSAgICBy
b3dIZWFkZXIgPSBhdGtfdGFibGVfZ2V0X3Jvd19oZWFkZXIoQVRLX1RBQkxFKHRhYmxlKSwgMCk7
Ci0gICAgZ19hc3NlcnQocm93SGVhZGVyID09IDApOwotCi0gICAgcm93SGVhZGVyID0gYXRrX3Rh
YmxlX2dldF9yb3dfaGVhZGVyKEFUS19UQUJMRSh0YWJsZSksIDEpOwotICAgIGdfYXNzZXJ0KHJv
d0hlYWRlciA9PSAwKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKHRhYmxlKTsKLSAgICBnX29iamVj
dF91bnJlZih3ZWJWaWV3KTsKLX0KLQotc3RhdGljIGdpbnQgY29tcEF0a0F0dHJpYnV0ZShBdGtB
dHRyaWJ1dGUqIGExLCBBdGtBdHRyaWJ1dGUqIGEyKQotewotICAgIGdpbnQgc3RyY21wVmFsID0g
Z19zdHJjbXAwKGExLT5uYW1lLCBhMi0+bmFtZSk7Ci0gICAgaWYgKHN0cmNtcFZhbCkKLSAgICAg
ICAgcmV0dXJuIHN0cmNtcFZhbDsKLSAgICByZXR1cm4gZ19zdHJjbXAwKGExLT52YWx1ZSwgYTIt
PnZhbHVlKTsKLX0KLQotc3RhdGljIGdpbnQgY29tcEF0a0F0dHJpYnV0ZU5hbWUoQXRrQXR0cmli
dXRlKiBhMSwgQXRrQXR0cmlidXRlKiBhMikKLXsKLSAgICByZXR1cm4gZ19zdHJjbXAwKGExLT5u
YW1lLCBhMi0+bmFtZSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBhdGtBdHRyaWJ1dGVTZXRBdHRy
aWJ1dGVOYW1lSGFzVmFsdWUoQXRrQXR0cmlidXRlU2V0KiBzZXQsIGNvbnN0IGdjaGFyKiBhdHRy
aWJ1dGVOYW1lLCBjb25zdCBnY2hhciogdmFsdWUpCi17Ci0gICAgQXRrQXR0cmlidXRlIGF0Owot
ICAgIGF0Lm5hbWUgPSAoZ2NoYXIqKWF0dHJpYnV0ZU5hbWU7Ci0gICAgR1NMaXN0KiBlbGVtZW50
ID0gZ19zbGlzdF9maW5kX2N1c3RvbShzZXQsICZhdCwgKEdDb21wYXJlRnVuYyljb21wQXRrQXR0
cmlidXRlTmFtZSk7Ci0gICAgcmV0dXJuIGVsZW1lbnQgJiYgIWdfc3RyY21wMCgoKEF0a0F0dHJp
YnV0ZSopKGVsZW1lbnQtPmRhdGEpKS0+dmFsdWUsIHZhbHVlKTsKLX0KLQotc3RhdGljIGdib29s
ZWFuIGF0a0F0dHJpYnV0ZVNldENvbnRhaW5zQXR0cmlidXRlTmFtZShBdGtBdHRyaWJ1dGVTZXQq
IHNldCwgY29uc3QgZ2NoYXIqIGF0dHJpYnV0ZU5hbWUpCi17Ci0gICAgQXRrQXR0cmlidXRlIGF0
OwotICAgIGF0Lm5hbWUgPSAoZ2NoYXIqKWF0dHJpYnV0ZU5hbWU7Ci0gICAgcmV0dXJuIGdfc2xp
c3RfZmluZF9jdXN0b20oc2V0LCAmYXQsIChHQ29tcGFyZUZ1bmMpY29tcEF0a0F0dHJpYnV0ZU5h
bWUpID8gdHJ1ZSA6IGZhbHNlOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gYXRrQXR0cmlidXRlU2V0
QXR0cmlidXRlSGFzVmFsdWUoQXRrQXR0cmlidXRlU2V0KiBzZXQsIEF0a1RleHRBdHRyaWJ1dGUg
YXR0cmlidXRlLCBjb25zdCBnY2hhciogdmFsdWUpCi17Ci0gICAgcmV0dXJuIGF0a0F0dHJpYnV0
ZVNldEF0dHJpYnV0ZU5hbWVIYXNWYWx1ZShzZXQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFt
ZShhdHRyaWJ1dGUpLCB2YWx1ZSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBhdGtBdHRyaWJ1dGVT
ZXRBcmVFcXVhbChBdGtBdHRyaWJ1dGVTZXQqIHNldDEsIEF0a0F0dHJpYnV0ZVNldCogc2V0MikK
LXsKLSAgICBpZiAoIXNldDEpCi0gICAgICAgIHJldHVybiAhc2V0MjsKLQotICAgIHNldDEgPSBn
X3NsaXN0X3NvcnQoc2V0MSwgKEdDb21wYXJlRnVuYyljb21wQXRrQXR0cmlidXRlKTsKLSAgICBz
ZXQyID0gZ19zbGlzdF9zb3J0KHNldDIsIChHQ29tcGFyZUZ1bmMpY29tcEF0a0F0dHJpYnV0ZSk7
Ci0KLSAgICB3aGlsZSAoc2V0MSkgewotICAgICAgICBpZiAoIXNldDIgfHwgY29tcEF0a0F0dHJp
YnV0ZShzZXQxLT5kYXRhLCBzZXQyLT5kYXRhKSkKLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsK
LQotICAgICAgICBzZXQxID0gc2V0MS0+bmV4dDsKLSAgICAgICAgc2V0MiA9IHNldDItPm5leHQ7
Ci0gICAgfQotCi0gICAgcmV0dXJuICghc2V0Mik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJr
aXRBdGtUZXh0QXR0cmlidXRlcygpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdF
QktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0X3JlZl9z
aW5rKHdlYlZpZXcpOwotICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgODAw
LCA2MDAgfTsKLSAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3
KSwgJmFsbG9jYXRpb24pOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3
LCB0ZXh0V2l0aEF0dHJpYnV0ZXMsIDAsIDAsIDApOwotCi0gICAgQXRrT2JqZWN0KiBvYmplY3Qg
PSBnZXRXZWJBcmVhT2JqZWN0KHdlYlZpZXcpOwotICAgIGdfYXNzZXJ0KG9iamVjdCk7Ci0KLSAg
ICBBdGtPYmplY3QqIGNoaWxkID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmpl
Y3QsIDApOwotICAgIGdfYXNzZXJ0KGNoaWxkICYmIEFUS19JU19URVhUKGNoaWxkKSk7Ci0gICAg
QXRrVGV4dCogY2hpbGRUZXh0ID0gQVRLX1RFWFQoY2hpbGQpOwotCi0gICAgZ2ludCBzdGFydE9m
ZnNldDsKLSAgICBnaW50IGVuZE9mZnNldDsKLSAgICBBdGtBdHRyaWJ1dGVTZXQqIHNldDEgPSBh
dGtfdGV4dF9nZXRfcnVuX2F0dHJpYnV0ZXMoY2hpbGRUZXh0LCAwLCAmc3RhcnRPZmZzZXQsICZl
bmRPZmZzZXQpOwotICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDApOwotICAg
IGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCAxMik7Ci0gICAgZ19hc3NlcnQoYXRrQXR0
cmlidXRlU2V0QXJlRXF1YWwoc2V0MSwgMCkpOwotCi0gICAgQXRrQXR0cmlidXRlU2V0KiBzZXQy
ID0gYXRrX3RleHRfZ2V0X3J1bl9hdHRyaWJ1dGVzKGNoaWxkVGV4dCwgMTUsICZzdGFydE9mZnNl
dCwgJmVuZE9mZnNldCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMTIp
OwotICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCAxNyk7Ci0gICAgZ19hc3NlcnQo
YXRrQXR0cmlidXRlU2V0QXR0cmlidXRlSGFzVmFsdWUoc2V0MiwgQVRLX1RFWFRfQVRUUl9TVFlM
RSwgIml0YWxpYyIpKTsKLQotICAgIEF0a0F0dHJpYnV0ZVNldCogc2V0MyA9IGF0a190ZXh0X2dl
dF9ydW5fYXR0cmlidXRlcyhjaGlsZFRleHQsIDE3LCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQp
OwotICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDE3KTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgNDApOwotICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNl
dEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDMsIEFUS19URVhUX0FUVFJfV0VJR0hULCAiNzAwIikpOwot
Ci0gICAgQXRrQXR0cmlidXRlU2V0KiBzZXQ0ID0gYXRrX3RleHRfZ2V0X2RlZmF1bHRfYXR0cmli
dXRlcyhjaGlsZFRleHQpOwotICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhh
c1ZhbHVlKHNldDQsIEFUS19URVhUX0FUVFJfU1RZTEUsICJub3JtYWwiKSk7Ci0gICAgZ19hc3Nl
cnQoYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlSGFzVmFsdWUoc2V0NCwgQVRLX1RFWFRfQVRUUl9K
VVNUSUZJQ0FUSU9OLCAicmlnaHQiKSk7Ci0gICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0QXR0
cmlidXRlSGFzVmFsdWUoc2V0NCwgQVRLX1RFWFRfQVRUUl9TSVpFLCAiMTQiKSk7Ci0gICAgYXRr
X2F0dHJpYnV0ZV9zZXRfZnJlZShzZXQxKTsKLSAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHNl
dDIpOwotICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0Myk7Ci0gICAgYXRrX2F0dHJpYnV0
ZV9zZXRfZnJlZShzZXQ0KTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGNoaWxkKTsKLSAgICBjaGls
ZCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAxKTsKLSAgICBnX2Fz
c2VydChjaGlsZCAmJiBBVEtfSVNfVEVYVChjaGlsZCkpOwotICAgIGNoaWxkVGV4dCA9IEFUS19U
RVhUKGNoaWxkKTsKLQotICAgIHNldDEgPSBhdGtfdGV4dF9nZXRfZGVmYXVsdF9hdHRyaWJ1dGVz
KGNoaWxkVGV4dCk7Ci0gICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlSGFzVmFs
dWUoc2V0MSwgQVRLX1RFWFRfQVRUUl9GQU1JTFlfTkFNRSwgIm1vbm9zcGFjZSIpKTsKLSAgICBn
X2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVIYXNWYWx1ZShzZXQxLCBBVEtfVEVYVF9B
VFRSX1NUWUxFLCAibm9ybWFsIikpOwotICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEF0dHJp
YnV0ZUhhc1ZhbHVlKHNldDEsIEFUS19URVhUX0FUVFJfU1RSSUtFVEhST1VHSCwgImZhbHNlIikp
OwotICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDEsIEFU
S19URVhUX0FUVFJfV0VJR0hULCAiNDAwIikpOwotICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNl
dEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDEsIEFUS19URVhUX0FUVFJfRkdfQ09MT1IsICIxMjAsMTIx
LDEyMiIpKTsKLQotICAgIHNldDIgPSBhdGtfdGV4dF9nZXRfcnVuX2F0dHJpYnV0ZXMoY2hpbGRU
ZXh0LCA0MywgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
c3RhcnRPZmZzZXQsID09LCA0Myk7Ci0gICAgZ19hc3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0s
IDgwKTsKLSAgICAvKiBDaGVja3MgdGhhdCBkZWZhdWx0IGF0dHJpYnV0ZXMgb2YgdGV4dCBhcmUg
bm90IHJldHVybmVkIHdoZW4gY2FsbGVkIHRvIGF0a190ZXh0X2dldF9ydW5fYXR0cmlidXRlcy4g
Ki8KLSAgICBnX2Fzc2VydCghYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlSGFzVmFsdWUoc2V0Miwg
QVRLX1RFWFRfQVRUUl9GR19DT0xPUiwgIjEyMCwxMjEsMTIyIikpOwotICAgIGdfYXNzZXJ0KGF0
a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDIsIEFUS19URVhUX0FUVFJfVU5ERVJM
SU5FLCAic2luZ2xlIikpOwotICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhh
c1ZhbHVlKHNldDIsIEFUS19URVhUX0FUVFJfQkdfQ09MT1IsICI4MCw4MSw4MiIpKTsKLSAgICBh
dGtfYXR0cmlidXRlX3NldF9mcmVlKHNldDEpOwotICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUo
c2V0Mik7Ci0gICAgZ19vYmplY3RfdW5yZWYoY2hpbGQpOwotCi0gICAgY2hpbGQgPSBhdGtfb2Jq
ZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMik7Ci0gICAgZ19hc3NlcnQoY2hpbGQg
JiYgQVRLX0lTX1RFWFQoY2hpbGQpKTsKLSAgICBjaGlsZFRleHQgPSBBVEtfVEVYVChjaGlsZCk7
Ci0KLSAgICBzZXQxID0gYXRrX3RleHRfZ2V0X3J1bl9hdHRyaWJ1dGVzKGNoaWxkVGV4dCwgMCwg
JnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAgICBzZXQyID0gYXRrX3RleHRfZ2V0X3J1bl9h
dHRyaWJ1dGVzKGNoaWxkVGV4dCwgMywgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAgICBn
X2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBcmVFcXVhbChzZXQxLCBzZXQyKSk7Ci0gICAgYXRrX2F0
dHJpYnV0ZV9zZXRfZnJlZShzZXQyKTsKLQotICAgIHNldDIgPSBhdGtfdGV4dF9nZXRfcnVuX2F0
dHJpYnV0ZXMoY2hpbGRUZXh0LCAxLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOwotICAgIHNl
dDMgPSBhdGtfdGV4dF9nZXRfcnVuX2F0dHJpYnV0ZXMoY2hpbGRUZXh0LCA1LCAmc3RhcnRPZmZz
ZXQsICZlbmRPZmZzZXQpOwotICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEFyZUVxdWFsKHNl
dDIsIHNldDMpKTsKLSAgICBnX2Fzc2VydCghYXRrQXR0cmlidXRlU2V0QXJlRXF1YWwoc2V0MSwg
c2V0MikpOwotICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0Myk7Ci0KLSAgICBzZXQzID0g
YXRrX3RleHRfZ2V0X3J1bl9hdHRyaWJ1dGVzKGNoaWxkVGV4dCwgMiwgJnN0YXJ0T2Zmc2V0LCAm
ZW5kT2Zmc2V0KTsKLSAgICBzZXQ0ID0gYXRrX3RleHRfZ2V0X3J1bl9hdHRyaWJ1dGVzKGNoaWxk
VGV4dCwgNiwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAgICBnX2Fzc2VydChhdGtBdHRy
aWJ1dGVTZXRBcmVFcXVhbChzZXQzLCBzZXQ0KSk7Ci0gICAgZ19hc3NlcnQoIWF0a0F0dHJpYnV0
ZVNldEFyZUVxdWFsKHNldDEsIHNldDMpKTsKLSAgICBnX2Fzc2VydCghYXRrQXR0cmlidXRlU2V0
QXJlRXF1YWwoc2V0Miwgc2V0MykpOwotICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0MSk7
Ci0gICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJlZShzZXQyKTsKLSAgICBhdGtfYXR0cmlidXRlX3Nl
dF9mcmVlKHNldDMpOwotICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0NCk7Ci0gICAgZ19v
YmplY3RfdW5yZWYoY2hpbGQpOwotCi0gICAgY2hpbGQgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3Np
YmxlX2NoaWxkKG9iamVjdCwgMyk7Ci0gICAgZ19hc3NlcnQoY2hpbGQgJiYgQVRLX0lTX1RFWFQo
Y2hpbGQpKTsKLSAgICBjaGlsZFRleHQgPSBBVEtfVEVYVChjaGlsZCk7Ci0gICAgc2V0MSA9IGF0
a190ZXh0X2dldF9ydW5fYXR0cmlidXRlcyhjaGlsZFRleHQsIDI0LCAmc3RhcnRPZmZzZXQsICZl
bmRPZmZzZXQpOwotICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDIxKTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMjUpOwotICAgIGdfYXNzZXJ0KGF0a0F0
dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDEsIEFUS19URVhUX0FUVFJfU1RSSUtFVEhS
T1VHSCwgInRydWUiKSk7Ci0KLSAgICBzZXQyID0gYXRrX3RleHRfZ2V0X3J1bl9hdHRyaWJ1dGVz
KGNoaWxkVGV4dCwgMjUsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMjUpOwotICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZz
ZXQsID09LCAzMCk7Ci0gICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0QXJlRXF1YWwoc2V0Miwg
MCkpOwotCi0gICAgc2V0MyA9IGF0a190ZXh0X2dldF9kZWZhdWx0X2F0dHJpYnV0ZXMoY2hpbGRU
ZXh0KTsKLSAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVIYXNWYWx1ZShzZXQz
LCBBVEtfVEVYVF9BVFRSX0pVU1RJRklDQVRJT04sICJjZW50ZXIiKSk7Ci0gICAgYXRrX2F0dHJp
YnV0ZV9zZXRfZnJlZShzZXQxKTsKLSAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHNldDIpOwot
ICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0Myk7Ci0KLSAgICBnX29iamVjdF91bnJlZihj
aGlsZCk7Ci19Ci0KLXN0YXRpYyBnY2hhciogdGV4dFNlbGVjdGlvbkNoYW5nZWRSZXN1bHQgPSAw
OwotCi1zdGF0aWMgdm9pZCB0ZXh0U2VsZWN0aW9uQ2hhbmdlZENhbGxiYWNrKEF0a1RleHQqIHRl
eHQsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQodGV4dCkpOwot
Ci0gICAgZ19mcmVlKHRleHRTZWxlY3Rpb25DaGFuZ2VkUmVzdWx0KTsKLSAgICBBdGtSb2xlIHJv
bGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKEFUS19PQkpFQ1QodGV4dCkpOwotICAgIGludCBzdGFy
dE9mZnNldCA9IDA7Ci0gICAgaW50IGVuZE9mZnNldCA9IDA7Ci0gICAgYXRrX3RleHRfZ2V0X3Nl
bGVjdGlvbihBVEtfVEVYVCh0ZXh0KSwgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAg
ICB0ZXh0U2VsZWN0aW9uQ2hhbmdlZFJlc3VsdCA9IGdfc3RyZHVwX3ByaW50ZigifCVzfCVkfCVk
fCIsIGF0a19yb2xlX2dldF9uYW1lKHJvbGUpLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKLX0K
LQotc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a1RleHRTZWxlY3Rpb25zKCkKLXsKLSAgICBXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXco
KSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7Ci0gICAgR3RrQWxsb2NhdGlvbiBh
bGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9OwotICAgIGd0a193aWRnZXRfc2l6ZV9hbGxv
Y2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7Ci0gICAgd2Via2l0X3dlYl92
aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIHRleHRGb3JTZWxlY3Rpb25zLCAwLCAwLCAwKTsKLQot
ICAgIEF0a09iamVjdCogb2JqZWN0ID0gZ2V0V2ViQXJlYU9iamVjdCh3ZWJWaWV3KTsKLSAgICBn
X2Fzc2VydChvYmplY3QpOwotCi0gICAgQXRrVGV4dCogcGFyYWdyYXBoMSA9IEFUS19URVhUKGF0
a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAwKSk7Ci0gICAgZ19hc3NlcnQo
QVRLX0lTX1RFWFQocGFyYWdyYXBoMSkpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QocGFyYWdyYXBo
MSwgInRleHQtc2VsZWN0aW9uLWNoYW5nZWQiLCBHX0NBTExCQUNLKHRleHRTZWxlY3Rpb25DaGFu
Z2VkQ2FsbGJhY2spLCAwKTsKLQotICAgIEF0a1RleHQqIHBhcmFncmFwaDIgPSBBVEtfVEVYVChh
dGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMSkpOwotICAgIGdfYXNzZXJ0
KEFUS19JU19URVhUKHBhcmFncmFwaDIpKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHBhcmFncmFw
aDIsICJ0ZXh0LXNlbGVjdGlvbi1jaGFuZ2VkIiwgR19DQUxMQkFDSyh0ZXh0U2VsZWN0aW9uQ2hh
bmdlZENhbGxiYWNrKSwgMCk7Ci0KLSAgICBBdGtUZXh0KiBsaW5rID0gQVRLX1RFWFQoYXRrX29i
amVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChBVEtfT0JKRUNUKHBhcmFncmFwaDIpLCAwKSk7Ci0g
ICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQobGluaykpOwotCi0gICAgQXRrT2JqZWN0KiBsaXN0ID0g
YXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDIpOwotICAgIGdfYXNzZXJ0
KEFUS19PQkpFQ1QobGlzdCkpOwotCi0gICAgQXRrVGV4dCogbGlzdEl0ZW0gPSBBVEtfVEVYVChh
dGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGxpc3QsIDApKTsKLSAgICBnX2Fzc2VydChB
VEtfSVNfVEVYVChsaXN0SXRlbSkpOwotCi0gICAgLyogRmlyc3QgcGFyYWdyYXBoIChzaW1wbGUg
dGV4dCkuICovCi0KLSAgICAvKiBCYXNpYyBpbml0aWFsIGNoZWNrcy4gKi8KLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoYXRrX3RleHRfZ2V0X25fc2VsZWN0aW9ucyhwYXJhZ3JhcGgxKSwgPT0sIDApOwot
Ci0gICAgZ2ludCBzdGFydE9mZnNldDsKLSAgICBnaW50IGVuZE9mZnNldDsKLSAgICBnY2hhciog
c2VsZWN0ZWRUZXh0ID0gYXRrX3RleHRfZ2V0X3NlbGVjdGlvbihwYXJhZ3JhcGgxLCAwLCAmc3Rh
cnRPZmZzZXQsICZlbmRPZmZzZXQpOwotICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwg
PT0sIDApOwotICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCAwKTsKLSAgICBnX2Fz
c2VydF9jbXBzdHIoc2VsZWN0ZWRUZXh0LCA9PSwgMCk7Ci0gICAgZ19mcmVlIChzZWxlY3RlZFRl
eHQpOwotCi0gICAgLyogVHJ5IHJlbW92aW5nIGEgbm9uIGV4aXN0aW5nICh5ZXQpIHNlbGVjdGlv
bi4gKi8KLSAgICBnYm9vbGVhbiByZXN1bHQgPSBhdGtfdGV4dF9yZW1vdmVfc2VsZWN0aW9uKHBh
cmFncmFwaDEsIDApOwotICAgIGdfYXNzZXJ0KCFyZXN1bHQpOwotCi0gICAgLyogVHJ5IHNldHRp
bmcgYSAwLWNoYXIgc2VsZWN0aW9uLiAqLwotICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9zZWxl
Y3Rpb24ocGFyYWdyYXBoMSwgMCwgNSwgNSk7Ci0gICAgZ19hc3NlcnQocmVzdWx0KTsKLQotICAg
IC8qIE1ha2UgYSBzZWxlY3Rpb24gYW5kIHRlc3QgaXQuICovCi0gICAgcmVzdWx0ID0gYXRrX3Rl
eHRfc2V0X3NlbGVjdGlvbihwYXJhZ3JhcGgxLCAwLCA1LCAyNSk7Ci0gICAgZ19hc3NlcnQocmVz
dWx0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX3RleHRfZ2V0X25fc2VsZWN0aW9ucyhwYXJh
Z3JhcGgxKSwgPT0sIDEpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0U2VsZWN0aW9uQ2hhbmdl
ZFJlc3VsdCwgPT0sICJ8cGFyYWdyYXBofDV8MjV8Iik7Ci0gICAgc2VsZWN0ZWRUZXh0ID0gYXRr
X3RleHRfZ2V0X3NlbGVjdGlvbihwYXJhZ3JhcGgxLCAwLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZz
ZXQpOwotICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDUpOwotICAgIGdfYXNz
ZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCAyNSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHNlbGVj
dGVkVGV4dCwgPT0sICJhZ3JhcGggd2l0aCBwbGFpbiB0ZSIpOwotICAgIGdfZnJlZSAoc2VsZWN0
ZWRUZXh0KTsKLQotICAgIC8qIFRyeSByZW1vdmluZyB0aGUgc2VsZWN0aW9uIGZyb20gb3RoZXIg
QXRrVGV4dCBvYmplY3QgKHNob3VsZCBmYWlsKS4gKi8KLSAgICByZXN1bHQgPSBhdGtfdGV4dF9y
ZW1vdmVfc2VsZWN0aW9uKHBhcmFncmFwaDIsIDApOwotICAgIGdfYXNzZXJ0KCFyZXN1bHQpOwot
Ci0gICAgLyogUmVtb3ZlIHRoZSBzZWxlY3Rpb24gYW5kIHRlc3QgZXZlcnl0aGluZyBhZ2Fpbi4g
Ki8KLSAgICByZXN1bHQgPSBhdGtfdGV4dF9yZW1vdmVfc2VsZWN0aW9uKHBhcmFncmFwaDEsIDAp
OwotICAgIGdfYXNzZXJ0KHJlc3VsdCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a190ZXh0X2dl
dF9uX3NlbGVjdGlvbnMocGFyYWdyYXBoMSksID09LCAwKTsKLSAgICBzZWxlY3RlZFRleHQgPSBh
dGtfdGV4dF9nZXRfc2VsZWN0aW9uKHBhcmFncmFwaDEsIDAsICZzdGFydE9mZnNldCwgJmVuZE9m
ZnNldCk7Ci0gICAgLyogTm93IG9mZnNldHMgc2hvdWxkIGJlIHRoZSBzYW1lLCBzZXQgdG8gdGhl
IGxhc3QgcG9zaXRpb24gb2YgdGhlIGNhcmV0LiAqLwotICAgIGdfYXNzZXJ0X2NtcGludChzdGFy
dE9mZnNldCwgPT0sIGVuZE9mZnNldCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0
LCA9PSwgMjUpOwotICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCAyNSk7Ci0gICAg
Z19hc3NlcnRfY21wc3RyKHNlbGVjdGVkVGV4dCwgPT0sIDApOwotICAgIGdfZnJlZSAoc2VsZWN0
ZWRUZXh0KTsKLQotICAgIC8qIFNlY29uZCBwYXJhZ3JhcGggKHRleHQgKyBsaW5rICsgdGV4dCku
ICovCi0KLSAgICAvKiBTZXQgYSBzZWxlY3Rpb24gcGFydGlhbGx5IGNvdmVyaW5nIHRoZSBsaW5r
IGFuZCB0ZXN0IGl0LiAqLwotICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9zZWxlY3Rpb24ocGFy
YWdyYXBoMiwgMCwgNywgMjEpOwotICAgIGdfYXNzZXJ0KHJlc3VsdCk7Ci0KLSAgICAvKiBUZXN0
IHRoZSBwYXJhZ3JhcGggZmlyc3QuICovCi0gICAgZ19hc3NlcnRfY21waW50KGF0a190ZXh0X2dl
dF9uX3NlbGVjdGlvbnMocGFyYWdyYXBoMiksID09LCAxKTsKLSAgICBzZWxlY3RlZFRleHQgPSBh
dGtfdGV4dF9nZXRfc2VsZWN0aW9uKHBhcmFncmFwaDIsIDAsICZzdGFydE9mZnNldCwgJmVuZE9m
ZnNldCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgNyk7Ci0gICAgZ19h
c3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0sIDIxKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc2Vs
ZWN0ZWRUZXh0LCA9PSwgInJhcGggd2l0aCBhIGxpIik7Ci0gICAgZ19mcmVlIChzZWxlY3RlZFRl
eHQpOwotCi0gICAgLyogTm93IHRlc3QganVzdCB0aGUgbGluay4gKi8KLSAgICBnX2Fzc2VydF9j
bXBpbnQoYXRrX3RleHRfZ2V0X25fc2VsZWN0aW9ucyhsaW5rKSwgPT0sIDEpOwotICAgIHNlbGVj
dGVkVGV4dCA9IGF0a190ZXh0X2dldF9zZWxlY3Rpb24obGluaywgMCwgJnN0YXJ0T2Zmc2V0LCAm
ZW5kT2Zmc2V0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAwKTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgNCk7Ci0gICAgZ19hc3NlcnRfY21wc3Ry
KHNlbGVjdGVkVGV4dCwgPT0sICJhIGxpIik7Ci0gICAgZ19mcmVlIChzZWxlY3RlZFRleHQpOwot
Ci0gICAgLyogTWFrZSBhIHNlbGVjdGlvbiBhZnRlciB0aGUgbGluayBhbmQgY2hlY2sgc2VsZWN0
aW9uIGZvciB0aGUgd2hvbGUgcGFyYWdyYXBoLiAqLwotICAgIHJlc3VsdCA9IGF0a190ZXh0X3Nl
dF9zZWxlY3Rpb24ocGFyYWdyYXBoMiwgMCwgMjcsIDM3KTsKLSAgICBnX2Fzc2VydChyZXN1bHQp
OwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfdGV4dF9nZXRfbl9zZWxlY3Rpb25zKHBhcmFncmFw
aDIpLCA9PSwgMSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRleHRTZWxlY3Rpb25DaGFuZ2VkUmVz
dWx0LCA9PSwgInxwYXJhZ3JhcGh8Mjd8Mzd8Iik7Ci0gICAgc2VsZWN0ZWRUZXh0ID0gYXRrX3Rl
eHRfZ2V0X3NlbGVjdGlvbihwYXJhZ3JhcGgyLCAwLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQp
OwotICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDI3KTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMzcpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3Rl
ZFRleHQsID09LCAidGhlIG1pZGRsZSIpOwotICAgIGdfZnJlZSAoc2VsZWN0ZWRUZXh0KTsKLQot
ICAgIC8qIFJlbW92ZSBzZWxlY3Rpb25zIGFuZCB0ZXh0IGV2ZXJ5dGhpbmcgYWdhaW4uICovCi0g
ICAgcmVzdWx0ID0gYXRrX3RleHRfcmVtb3ZlX3NlbGVjdGlvbihwYXJhZ3JhcGgyLCAwKTsKLSAg
ICBnX2Fzc2VydChyZXN1bHQpOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfdGV4dF9nZXRfbl9z
ZWxlY3Rpb25zKHBhcmFncmFwaDIpLCA9PSwgMCk7Ci0gICAgc2VsZWN0ZWRUZXh0ID0gYXRrX3Rl
eHRfZ2V0X3NlbGVjdGlvbihwYXJhZ3JhcGgyLCAwLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQp
OwotICAgIC8qIE5vdyBvZmZzZXRzIHNob3VsZCBiZSB0aGUgc2FtZSAobm8gc2VsZWN0aW9uKS4g
Ki8KLSAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCBlbmRPZmZzZXQpOwotICAg
IGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZFRleHQsID09LCAwKTsKLSAgICBnX2ZyZWUgKHNlbGVj
dGVkVGV4dCk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX3RleHRfZ2V0X25fc2VsZWN0aW9u
cyhsaW5rKSwgPT0sIDApOwotICAgIHNlbGVjdGVkVGV4dCA9IGF0a190ZXh0X2dldF9zZWxlY3Rp
b24obGluaywgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAgICAvKiBOb3cgb2Zmc2V0
cyBzaG91bGQgYmUgdGhlIHNhbWUgKG5vIHNlbGVjdGlvbikuICovCi0gICAgZ19hc3NlcnRfY21w
aW50KHN0YXJ0T2Zmc2V0LCA9PSwgZW5kT2Zmc2V0KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc2Vs
ZWN0ZWRUZXh0LCA9PSwgMCk7Ci0gICAgZ19mcmVlIChzZWxlY3RlZFRleHQpOwotCi0gICAgLyog
TGlzdCBpdGVtICovCi0KLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGxpc3QpID09
IEFUS19ST0xFX0xJU1QpOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfb2JqZWN0X2dldF9uX2Fj
Y2Vzc2libGVfY2hpbGRyZW4obGlzdCksID09LCAxKTsKLQotICAgIC8qIEl0J3Mgbm90IHBvc3Np
YmxlIHRvIHNlbGVjdCB0ZXh0IGluc2lkZSBhbiBpdGVtJ3MgbWFya2VyLiAqLwotICAgIHJlc3Vs
dCA9IGF0a190ZXh0X3NldF9zZWxlY3Rpb24gKGxpc3RJdGVtLCAwLCAwLCA5KTsKLSAgICBnX2Fz
c2VydCghcmVzdWx0KTsKLSAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfc2VsZWN0aW9uIChsaXN0
SXRlbSwgMCwgOSwgMSk7Ci0gICAgZ19hc3NlcnQoIXJlc3VsdCk7Ci0KLSAgICAvKiBJdCBzaG91
bGQgYmUgcG9zc2libGUgdG8gc2VsZWN0IHRleHQgaW5zaWRlIGFuIGl0ZW0ncyB0ZXh0LiAqLwot
ICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9zZWxlY3Rpb24gKGxpc3RJdGVtLCAwLCAzLCA5KTsK
LSAgICBnX2Fzc2VydChyZXN1bHQpOwotCi0gICAgZ19hc3NlcnRfY21waW50KGF0a190ZXh0X2dl
dF9uX3NlbGVjdGlvbnMobGlzdEl0ZW0pLCA9PSwgMSk7Ci0gICAgc2VsZWN0ZWRUZXh0ID0gYXRr
X3RleHRfZ2V0X3NlbGVjdGlvbihsaXN0SXRlbSwgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0
KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAzKTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgOSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVk
VGV4dCwgPT0sICJBIGxpc3QiKTsKLSAgICBnX2ZyZWUgKHNlbGVjdGVkVGV4dCk7Ci0KLSAgICBn
X2ZyZWUodGV4dFNlbGVjdGlvbkNoYW5nZWRSZXN1bHQpOwotCi0gICAgZ19vYmplY3RfdW5yZWYo
cGFyYWdyYXBoMSk7Ci0gICAgZ19vYmplY3RfdW5yZWYocGFyYWdyYXBoMik7Ci0gICAgZ19vYmpl
Y3RfdW5yZWYobGluayk7Ci0gICAgZ19vYmplY3RfdW5yZWYobGlzdCk7Ci0gICAgZ19vYmplY3Rf
dW5yZWYobGlzdEl0ZW0pOwotICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwotfQotCi1zdGF0
aWMgdm9pZCB0ZXN0V2Via2l0QXRrR2V0RXh0ZW50cygpCi17Ci0gICAgV2ViS2l0V2ViVmlldyog
d2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdf
b2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOwotICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9
IHsgMCwgMCwgODAwLCA2MDAgfTsKLSAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJ
REdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0
cmluZyh3ZWJWaWV3LCBjZW50ZXJlZENvbnRlbnRzLCAwLCAwLCAwKTsKLQotICAgIEF0a09iamVj
dCogb2JqZWN0ID0gZ2V0V2ViQXJlYU9iamVjdCh3ZWJWaWV3KTsKLSAgICBnX2Fzc2VydChvYmpl
Y3QpOwotCi0gICAgQXRrVGV4dCogc2hvcnRUZXh0MSA9IEFUS19URVhUKGF0a19vYmplY3RfcmVm
X2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAwKSk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQo
c2hvcnRUZXh0MSkpOwotICAgIEF0a1RleHQqIGxvbmdUZXh0ID0gQVRLX1RFWFQoYXRrX29iamVj
dF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDEpKTsKLSAgICBnX2Fzc2VydChBVEtfSVNf
VEVYVChsb25nVGV4dCkpOwotICAgIEF0a1RleHQqIHNob3J0VGV4dDIgPSBBVEtfVEVYVChhdGtf
b2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMikpOwotICAgIGdfYXNzZXJ0KEFU
S19JU19URVhUKHNob3J0VGV4dDIpKTsKLSAgICBBdGtUZXh0KiBtdWx0aWxpbmVUZXh0ID0gQVRL
X1RFWFQoYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDMpKTsKLSAgICBn
X2Fzc2VydChBVEtfSVNfVEVYVChtdWx0aWxpbmVUZXh0KSk7Ci0KLSAgICAvKiBTdGFydCB3aXRo
IHdpbmRvdyBleHRlbnRzLiAqLwotICAgIEF0a1RleHRSZWN0YW5nbGUgc2xpbmVfd2luZG93MSwg
c2xpbmVfd2luZG93MiwgbGxpbmVfd2luZG93LCBtbGluZV93aW5kb3c7Ci0gICAgYXRrX3RleHRf
Z2V0X3JhbmdlX2V4dGVudHMoc2hvcnRUZXh0MSwgMCwgMTAsIEFUS19YWV9XSU5ET1csICZzbGlu
ZV93aW5kb3cxKTsKLSAgICBhdGtfdGV4dF9nZXRfcmFuZ2VfZXh0ZW50cyhsb25nVGV4dCwgMCwg
NDQsIEFUS19YWV9XSU5ET1csICZsbGluZV93aW5kb3cpOwotICAgIGF0a190ZXh0X2dldF9yYW5n
ZV9leHRlbnRzKHNob3J0VGV4dDIsIDAsIDEwLCBBVEtfWFlfV0lORE9XLCAmc2xpbmVfd2luZG93
Mik7Ci0gICAgYXRrX3RleHRfZ2V0X3JhbmdlX2V4dGVudHMobXVsdGlsaW5lVGV4dCwgMCwgNjAs
IEFUS19YWV9XSU5ET1csICZtbGluZV93aW5kb3cpOwotCi0gICAgLyogQ2hlY2sgdmVydGljYWwg
bGluZSBwb3NpdGlvbi4gKi8KLSAgICBnX2Fzc2VydF9jbXBpbnQoc2xpbmVfd2luZG93MS55ICsg
c2xpbmVfd2luZG93MS5oZWlnaHQsIDw9LCBsbGluZV93aW5kb3cueSk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KGxsaW5lX3dpbmRvdy55ICsgbGxpbmVfd2luZG93LmhlaWdodCArIHNsaW5lX3dpbmRv
dzIuaGVpZ2h0LCA8PSwgbWxpbmVfd2luZG93LnkpOwotCi0gICAgLyogUGFyYWdyYXBocyAxIGFu
ZCAzIGhhdmUgaWRlbnRpY2FsIHRleHQgYW5kIGFsaWdubWVudC4gKi8KLSAgICBnX2Fzc2VydF9j
bXBpbnQoc2xpbmVfd2luZG93MS54LCA9PSwgc2xpbmVfd2luZG93Mi54KTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoc2xpbmVfd2luZG93MS53aWR0aCwgPT0sIHNsaW5lX3dpbmRvdzIud2lkdGgpOwot
ICAgIGdfYXNzZXJ0X2NtcGludChzbGluZV93aW5kb3cxLmhlaWdodCwgPT0sIHNsaW5lX3dpbmRv
dzIuaGVpZ2h0KTsKLQotICAgIC8qIEFsbCBsaW5lcyBzaG91bGQgYmUgdGhlIHNhbWUgaGVpZ2h0
OyBsaW5lIDIgaXMgdGhlIHdpZGVzdCBsaW5lLiAqLwotICAgIGdfYXNzZXJ0X2NtcGludChzbGlu
ZV93aW5kb3cxLmhlaWdodCwgPT0sIGxsaW5lX3dpbmRvdy5oZWlnaHQpOwotICAgIGdfYXNzZXJ0
X2NtcGludChzbGluZV93aW5kb3cxLndpZHRoLCA8LCBsbGluZV93aW5kb3cud2lkdGgpOwotCi0g
ICAgLyogTWFrZSBzdXJlIHRoZSBjaGFyYWN0ZXIgZXh0ZW50cyBqaXZlIHdpdGggdGhlIHJhbmdl
IGV4dGVudHMuICovCi0gICAgZ2ludCB4OwotICAgIGdpbnQgeTsKLSAgICBnaW50IHdpZHRoOwot
ICAgIGdpbnQgaGVpZ2h0OwotCi0gICAgLyogRmlyc3QgcGFyYWdyYXBoIChzaG9ydCB0ZXh0KS4g
Ki8KLSAgICBhdGtfdGV4dF9nZXRfY2hhcmFjdGVyX2V4dGVudHMoc2hvcnRUZXh0MSwgMCwgJngs
ICZ5LCAmd2lkdGgsICZoZWlnaHQsIEFUS19YWV9XSU5ET1cpOwotICAgIGdfYXNzZXJ0X2NtcGlu
dCh4LCA9PSwgc2xpbmVfd2luZG93MS54KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoeSwgPT0sIHNs
aW5lX3dpbmRvdzEueSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGhlaWdodCwgPT0sIHNsaW5lX3dp
bmRvdzEuaGVpZ2h0KTsKLQotICAgIGF0a190ZXh0X2dldF9jaGFyYWN0ZXJfZXh0ZW50cyhzaG9y
dFRleHQxLCA5LCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCwgQVRLX1hZX1dJTkRPVyk7Ci0gICAg
Z19hc3NlcnRfY21waW50KHgsID09LCBzbGluZV93aW5kb3cxLnggKyBzbGluZV93aW5kb3cxLndp
ZHRoIC0gd2lkdGgpOwotICAgIGdfYXNzZXJ0X2NtcGludCh5LCA9PSwgc2xpbmVfd2luZG93MS55
KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoaGVpZ2h0LCA9PSwgc2xpbmVfd2luZG93MS5oZWlnaHQp
OwotCi0gICAgLyogU2Vjb25kIHBhcmFncmFwaCAobG9uZyB0ZXh0KS4gKi8KLSAgICBhdGtfdGV4
dF9nZXRfY2hhcmFjdGVyX2V4dGVudHMobG9uZ1RleHQsIDAsICZ4LCAmeSwgJndpZHRoLCAmaGVp
Z2h0LCBBVEtfWFlfV0lORE9XKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoeCwgPT0sIGxsaW5lX3dp
bmRvdy54KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoeSwgPT0sIGxsaW5lX3dpbmRvdy55KTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQoaGVpZ2h0LCA9PSwgbGxpbmVfd2luZG93LmhlaWdodCk7Ci0KLSAg
ICBhdGtfdGV4dF9nZXRfY2hhcmFjdGVyX2V4dGVudHMobG9uZ1RleHQsIDQzLCAmeCwgJnksICZ3
aWR0aCwgJmhlaWdodCwgQVRLX1hZX1dJTkRPVyk7Ci0gICAgZ19hc3NlcnRfY21waW50KHgsID09
LCBsbGluZV93aW5kb3cueCArIGxsaW5lX3dpbmRvdy53aWR0aCAtIHdpZHRoKTsKLSAgICBnX2Fz
c2VydF9jbXBpbnQoeSwgPT0sIGxsaW5lX3dpbmRvdy55KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
aGVpZ2h0LCA9PSwgbGxpbmVfd2luZG93LmhlaWdodCk7Ci0KLSAgICAvKiBUaGlyZCBwYXJhZ3Jh
cGggKHNob3J0IHRleHQpLiAqLwotICAgIGF0a190ZXh0X2dldF9jaGFyYWN0ZXJfZXh0ZW50cyhz
aG9ydFRleHQyLCAwLCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCwgQVRLX1hZX1dJTkRPVyk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KHgsID09LCBzbGluZV93aW5kb3cyLngpOwotICAgIGdfYXNzZXJ0
X2NtcGludCh5LCA9PSwgc2xpbmVfd2luZG93Mi55KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoaGVp
Z2h0LCA9PSwgc2xpbmVfd2luZG93Mi5oZWlnaHQpOwotCi0gICAgYXRrX3RleHRfZ2V0X2NoYXJh
Y3Rlcl9leHRlbnRzKHNob3J0VGV4dDIsIDksICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0LCBBVEtf
WFlfV0lORE9XKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoeCwgPT0sIHNsaW5lX3dpbmRvdzIueCAr
IHNsaW5lX3dpbmRvdzIud2lkdGggLSB3aWR0aCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHksID09
LCBzbGluZV93aW5kb3cyLnkpOwotICAgIGdfYXNzZXJ0X2NtcGludChoZWlnaHQsID09LCBzbGlu
ZV93aW5kb3cyLmhlaWdodCk7Ci0KLSAgICAvKiBGb3VyIHBhcmFncmFwaCAoMyBsaW5lcyBtdWx0
aS1saW5lIHRleHQpLiAqLwotICAgIGF0a190ZXh0X2dldF9jaGFyYWN0ZXJfZXh0ZW50cyhtdWx0
aWxpbmVUZXh0LCAwLCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCwgQVRLX1hZX1dJTkRPVyk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KHgsID09LCBtbGluZV93aW5kb3cueCk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KHksID09LCBtbGluZV93aW5kb3cueSk7Ci0gICAgZ19hc3NlcnRfY21waW50KDMgKiBo
ZWlnaHQsID09LCBtbGluZV93aW5kb3cuaGVpZ2h0KTsKLQotICAgIGF0a190ZXh0X2dldF9jaGFy
YWN0ZXJfZXh0ZW50cyhtdWx0aWxpbmVUZXh0LCA1OSwgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQs
IEFUS19YWV9XSU5ET1cpOwotICAgIC8qIExhc3QgbGluZSB3b24ndCBmaWxsIHRoZSB3aG9sZSB3
aWR0aCBvZiB0aGUgcmVjdGFuZ2xlLiAqLwotICAgIGdfYXNzZXJ0X2NtcGludCh4LCA8PSwgbWxp
bmVfd2luZG93LnggKyBtbGluZV93aW5kb3cud2lkdGggLSB3aWR0aCk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KHksID09LCBtbGluZV93aW5kb3cueSArIG1saW5lX3dpbmRvdy5oZWlnaHQgLSBoZWln
aHQpOwotICAgIGdfYXNzZXJ0X2NtcGludChoZWlnaHQsIDw9LCBtbGluZV93aW5kb3cuaGVpZ2h0
KTsKLQotICAgIC8qIENoZWNrIHRoYXQgZXh0ZW50IGZvciBhIGZ1bGwgbGluZSBhcmUgdGhlIHNh
bWUgaGVpZ2h0IHRoYW4gZm9yCi0gICAgICAgYSBwYXJ0aWFsIHNlY3Rpb24gb2YgdGhlIHNhbWUg
bGluZSAqLwotICAgIGdpbnQgc3RhcnRPZmZzZXQ7Ci0gICAgZ2ludCBlbmRPZmZzZXQ7Ci0KLSNp
ZiAhQVRLX0NIRUNLX1ZFUlNJT04oMiwgMTAsIDApCi0gICAgZ2NoYXIqIHRleHQgPSBhdGtfdGV4
dF9nZXRfdGV4dF9hdF9vZmZzZXQobXVsdGlsaW5lVGV4dCwgMCwgQVRLX1RFWFRfQk9VTkRBUllf
TElORV9TVEFSVCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAgICBnX2ZyZWUodGV4dCk7
Ci0jZWxzZQotICAgIGdjaGFyKiB0ZXh0ID0gYXRrX3RleHRfZ2V0X3N0cmluZ19hdF9vZmZzZXQo
bXVsdGlsaW5lVGV4dCwgMCwgQVRLX1RFWFRfR1JBTlVMQVJJVFlfTElORSwgJnN0YXJ0T2Zmc2V0
LCAmZW5kT2Zmc2V0KTsKLSAgICBnX2ZyZWUodGV4dCk7Ci0jZW5kaWYKLQotICAgIEF0a1RleHRS
ZWN0YW5nbGUgZmxpbmVfd2luZG93OwotICAgIEF0a1RleHRSZWN0YW5nbGUgYWZsaW5lX3dpbmRv
dzsKLSAgICBhdGtfdGV4dF9nZXRfcmFuZ2VfZXh0ZW50cyhtdWx0aWxpbmVUZXh0LCBzdGFydE9m
ZnNldCwgZW5kT2Zmc2V0LCBBVEtfWFlfV0lORE9XLCAmZmxpbmVfd2luZG93KTsKLSAgICBhdGtf
dGV4dF9nZXRfcmFuZ2VfZXh0ZW50cyhtdWx0aWxpbmVUZXh0LCBzdGFydE9mZnNldCwgZW5kT2Zm
c2V0IC0gMSwgQVRLX1hZX1dJTkRPVywgJmFmbGluZV93aW5kb3cpOwotICAgIGdfYXNzZXJ0X2Nt
cGludChmbGluZV93aW5kb3cueCwgPT0sIGFmbGluZV93aW5kb3cueCk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KGZsaW5lX3dpbmRvdy55LCA9PSwgYWZsaW5lX3dpbmRvdy55KTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoZmxpbmVfd2luZG93LmhlaWdodCwgPT0sIGFmbGluZV93aW5kb3cuaGVpZ2h0KTsK
LQotICAgIGdfb2JqZWN0X3VucmVmKHNob3J0VGV4dDEpOwotICAgIGdfb2JqZWN0X3VucmVmKHNo
b3J0VGV4dDIpOwotICAgIGdfb2JqZWN0X3VucmVmKGxvbmdUZXh0KTsKLSAgICBnX29iamVjdF91
bnJlZihtdWx0aWxpbmVUZXh0KTsKLSAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKLX0KLQot
c3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0xheW91dEFuZERhdGFUYWJsZXMoKQotewotICAgIFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25l
dygpKTsKLSAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKLSAgICBHdGtBbGxvY2F0aW9u
IGFsbG9jYXRpb24gPSB7IDAsIDAsIDgwMCwgNjAwIH07Ci0gICAgZ3RrX3dpZGdldF9zaXplX2Fs
bG9jYXRlKEdUS19XSURHRVQod2ViVmlldyksICZhbGxvY2F0aW9uKTsKLSAgICB3ZWJraXRfd2Vi
X3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgbGF5b3V0QW5kRGF0YVRhYmxlcywgMCwgMCwgMCk7
Ci0KLSAgICBBdGtPYmplY3QqIG9iamVjdCA9IGdldFdlYkFyZWFPYmplY3Qod2ViVmlldyk7Ci0g
ICAgZ19hc3NlcnQob2JqZWN0KTsKLQotICAgIC8qIENoZWNrIHRoZSBub24tbGF5b3V0IHRhYmxl
IChkYXRhIHRhYmxlKS4gKi8KLQotICAgIEF0a09iamVjdCogdGFibGUxID0gYXRrX29iamVjdF9y
ZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDApOwotICAgIGdfYXNzZXJ0KEFUS19JU19UQUJM
RSh0YWJsZTEpKTsKLSAgICBBdGtBdHRyaWJ1dGVTZXQqIHNldDEgPSBhdGtfb2JqZWN0X2dldF9h
dHRyaWJ1dGVzKHRhYmxlMSk7Ci0gICAgZ19hc3NlcnQoc2V0MSk7Ci0gICAgZ19hc3NlcnQoIWF0
a0F0dHJpYnV0ZVNldENvbnRhaW5zQXR0cmlidXRlTmFtZShzZXQxLCAibGF5b3V0LWd1ZXNzIikp
OwotICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0MSk7Ci0KLSAgICAvKiBDaGVjayB0aGUg
bGF5b3V0IHRhYmxlLiAqLwotCi0gICAgQXRrT2JqZWN0KiB0YWJsZTIgPSBhdGtfb2JqZWN0X3Jl
Zl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMSk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX1RBQkxF
KHRhYmxlMikpOwotICAgIEF0a0F0dHJpYnV0ZVNldCogc2V0MiA9IGF0a19vYmplY3RfZ2V0X2F0
dHJpYnV0ZXModGFibGUyKTsKLSAgICBnX2Fzc2VydChzZXQyKTsKLSAgICBnX2Fzc2VydChhdGtB
dHRyaWJ1dGVTZXRDb250YWluc0F0dHJpYnV0ZU5hbWUoc2V0MiwgImxheW91dC1ndWVzcyIpKTsK
LSAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVOYW1lSGFzVmFsdWUoc2V0Miwg
ImxheW91dC1ndWVzcyIsICJ0cnVlIikpOwotICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0
Mik7Ci0KLSAgICBnX29iamVjdF91bnJlZih0YWJsZTEpOwotICAgIGdfb2JqZWN0X3VucmVmKHRh
YmxlMik7Ci0gICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRl
c3RXZWJraXRBdGtMaW5rc1dpdGhJbmxpbmVJbWFnZXMoKQotewotICAgIFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBn
X29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24g
PSB7IDAsIDAsIDgwMCwgNjAwIH07Ci0gICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19X
SURHRVQod2ViVmlldyksICZhbGxvY2F0aW9uKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9z
dHJpbmcod2ViVmlldywgbGlua3NXaXRoSW5saW5lSW1hZ2VzLCAwLCAwLCAwKTsKLQotICAgIEF0
a09iamVjdCogb2JqZWN0ID0gZ2V0V2ViQXJlYU9iamVjdCh3ZWJWaWV3KTsKLSAgICBnX2Fzc2Vy
dChvYmplY3QpOwotCi0gICAgLyogRmlyc3QgcGFyYWdyYXBoIChsaW5rIGF0IHRoZSBiZWdpbm5p
bmcpLiAqLwotICAgIEF0a09iamVjdCogcGFyYWdyYXBoID0gYXRrX29iamVjdF9yZWZfYWNjZXNz
aWJsZV9jaGlsZChvYmplY3QsIDApOwotICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHBhcmFncmFw
aCkpOwotICAgIGdpbnQgc3RhcnRPZmZzZXQ7Ci0gICAgZ2ludCBlbmRPZmZzZXQ7Ci0KLSNpZiAh
QVRLX0NIRUNLX1ZFUlNJT04oMiwgMTAsIDApCi0gICAgZ2NoYXIqIHRleHQgPSBhdGtfdGV4dF9n
ZXRfdGV4dF9hdF9vZmZzZXQoQVRLX1RFWFQocGFyYWdyYXBoKSwgMCwgQVRLX1RFWFRfQk9VTkRB
UllfTElORV9TVEFSVCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAgICBnX2Fzc2VydCh0
ZXh0KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGV4dCwgPT0sICJmb28gYmFyIGJheiIpOwotICAg
IGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDApOwotICAgIGdfYXNzZXJ0X2NtcGlu
dChlbmRPZmZzZXQsID09LCAxMSk7Ci0gICAgZ19mcmVlKHRleHQpOwotI2Vsc2UKLSAgICBnY2hh
ciogdGV4dCA9IGF0a190ZXh0X2dldF9zdHJpbmdfYXRfb2Zmc2V0KEFUS19URVhUKHBhcmFncmFw
aCksIDAsIEFUS19URVhUX0dSQU5VTEFSSVRZX0xJTkUsICZzdGFydE9mZnNldCwgJmVuZE9mZnNl
dCk7Ci0gICAgZ19hc3NlcnQodGV4dCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09LCAi
Zm9vIGJhciBiYXoiKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAwKTsK
LSAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMTEpOwotICAgIGdfZnJlZSh0ZXh0
KTsKLSNlbmRpZgotCi0gICAgZ19vYmplY3RfdW5yZWYocGFyYWdyYXBoKTsKLQotICAgIC8qIFNl
Y29uZCBwYXJhZ3JhcGggKGxpbmsgaW4gdGhlIG1pZGRsZSkuICovCi0gICAgcGFyYWdyYXBoID0g
YXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDEpOwotICAgIGdfYXNzZXJ0
KEFUS19JU19URVhUKHBhcmFncmFwaCkpOwotCi0jaWYgIUFUS19DSEVDS19WRVJTSU9OKDIsIDEw
LCAwKQotICAgIHRleHQgPSBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQoQVRLX1RFWFQocGFy
YWdyYXBoKSwgMCwgQVRLX1RFWFRfQk9VTkRBUllfTElORV9TVEFSVCwgJnN0YXJ0T2Zmc2V0LCAm
ZW5kT2Zmc2V0KTsKLSAgICBnX2Fzc2VydCh0ZXh0KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGV4
dCwgPT0sICJmb28gYmFyIGJheiIpOwotICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwg
PT0sIDApOwotICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCAxMSk7Ci0gICAgZ19m
cmVlKHRleHQpOwotI2Vsc2UKLSAgICB0ZXh0ID0gYXRrX3RleHRfZ2V0X3N0cmluZ19hdF9vZmZz
ZXQoQVRLX1RFWFQocGFyYWdyYXBoKSwgMCwgQVRLX1RFWFRfR1JBTlVMQVJJVFlfTElORSwgJnN0
YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAgICBnX2Fzc2VydCh0ZXh0KTsKLSAgICBnX2Fzc2Vy
dF9jbXBzdHIodGV4dCwgPT0sICJmb28gYmFyIGJheiIpOwotICAgIGdfYXNzZXJ0X2NtcGludChz
dGFydE9mZnNldCwgPT0sIDApOwotICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCAx
MSk7Ci0gICAgZ19mcmVlKHRleHQpOwotI2VuZGlmCi0KLSAgICBnX29iamVjdF91bnJlZihwYXJh
Z3JhcGgpOwotCi0gICAgLyogVGhpcmQgcGFyYWdyYXBoIChsaW5rIGF0IHRoZSBlbmQpLiAqLwot
ICAgIHBhcmFncmFwaCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAy
KTsKLSAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChwYXJhZ3JhcGgpKTsKLQotI2lmICFBVEtfQ0hF
Q0tfVkVSU0lPTigyLCAxMCwgMCkKLSAgICB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zm
c2V0KEFUS19URVhUKHBhcmFncmFwaCksIDAsIEFUS19URVhUX0JPVU5EQVJZX0xJTkVfU1RBUlQs
ICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7Ci0gICAgZ19hc3NlcnQodGV4dCk7Ci0gICAgZ19h
c3NlcnRfY21wc3RyKHRleHQsID09LCAiZm9vIGJhciBiYXoiKTsKLSAgICBnX2Fzc2VydF9jbXBp
bnQoc3RhcnRPZmZzZXQsID09LCAwKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9
PSwgMTEpOwotICAgIGdfZnJlZSh0ZXh0KTsKLSNlbHNlCi0gICAgdGV4dCA9IGF0a190ZXh0X2dl
dF9zdHJpbmdfYXRfb2Zmc2V0KEFUS19URVhUKHBhcmFncmFwaCksIDAsIEFUS19URVhUX0dSQU5V
TEFSSVRZX0xJTkUsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7Ci0gICAgZ19hc3NlcnQodGV4
dCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09LCAiZm9vIGJhciBiYXoiKTsKLSAgICBn
X2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAwKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
ZW5kT2Zmc2V0LCA9PSwgMTEpOwotICAgIGdfZnJlZSh0ZXh0KTsKLSNlbmRpZgotCi0gICAgZ19v
YmplY3RfdW5yZWYocGFyYWdyYXBoKTsKLSAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKLX0K
LQotc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0h5cGVydGV4dEFuZEh5cGVybGlua3MoKQotewot
ICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92
aWV3X25ldygpKTsKLSAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKLSAgICBHdGtBbGxv
Y2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDgwMCwgNjAwIH07Ci0gICAgZ3RrX3dpZGdldF9z
aXplX2FsbG9jYXRlKEdUS19XSURHRVQod2ViVmlldyksICZhbGxvY2F0aW9uKTsKLSAgICB3ZWJr
aXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgaHlwZXJ0ZXh0QW5kSHlwZXJsaW5rcywg
MCwgMCwgMCk7Ci0KLSAgICBBdGtPYmplY3QqIG9iamVjdCA9IGdldFdlYkFyZWFPYmplY3Qod2Vi
Vmlldyk7Ci0gICAgZ19hc3NlcnQob2JqZWN0KTsKLQotICAgIEF0a09iamVjdCogcGFyYWdyYXBo
MSA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAwKTsKLSAgICBnX2Fz
c2VydChBVEtfT0JKRUNUKHBhcmFncmFwaDEpKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dl
dF9yb2xlKHBhcmFncmFwaDEpID09IEFUS19ST0xFX1BBUkFHUkFQSCk7Ci0gICAgZ19hc3NlcnQo
QVRLX0lTX0hZUEVSVEVYVChwYXJhZ3JhcGgxKSk7Ci0KLSAgICAvKiBObyBsaW5rcyBpbiB0aGUg
Zmlyc3QgcGFyYWdyYXBoLiAqLwotICAgIGdpbnQgbkxpbmtzID0gYXRrX2h5cGVydGV4dF9nZXRf
bl9saW5rcyhBVEtfSFlQRVJURVhUKHBhcmFncmFwaDEpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
bkxpbmtzLCA9PSwgMCk7Ci0KLSAgICBBdGtPYmplY3QqIHBhcmFncmFwaDIgPSBhdGtfb2JqZWN0
X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMSk7Ci0gICAgZ19hc3NlcnQoQVRLX09CSkVD
VChwYXJhZ3JhcGgyKSk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShwYXJhZ3Jh
cGgyKSA9PSBBVEtfUk9MRV9QQVJBR1JBUEgpOwotICAgIGdfYXNzZXJ0KEFUS19JU19IWVBFUlRF
WFQocGFyYWdyYXBoMikpOwotCi0gICAgLyogQ2hlY2sgbGlua3MgaW4gdGhlIHNlY29uZCBwYXJh
Z3JhcGguCi0gICAgICAgbkxpbmtzID0gYXRrX2h5cGVydGV4dF9nZXRfbl9saW5rcyhBVEtfSFlQ
RVJURVhUKHBhcmFncmFwaDIpKTsKLSAgICAgICBnX2Fzc2VydF9jbXBpbnQobkxpbmtzLCA9PSwg
Myk7ICovCi0KLSAgICBBdGtIeXBlcmxpbmsqIGhMaW5rMSA9IGF0a19oeXBlcnRleHRfZ2V0X2xp
bmsoQVRLX0hZUEVSVEVYVChwYXJhZ3JhcGgyKSwgMCk7Ci0gICAgZ19hc3NlcnQoQVRLX0hZUEVS
TElOSyhoTGluazEpKTsKLSAgICBBdGtPYmplY3QqIGhMaW5rT2JqZWN0MSA9IGF0a19oeXBlcmxp
bmtfZ2V0X29iamVjdChoTGluazEsIDApOwotICAgIGdfYXNzZXJ0KEFUS19PQkpFQ1QoaExpbmtP
YmplY3QxKSk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShoTGlua09iamVjdDEp
ID09IEFUS19ST0xFX0xJTkspOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dl
dF9zdGFydF9pbmRleChoTGluazEpLCA9PSwgMCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a19o
eXBlcmxpbmtfZ2V0X2VuZF9pbmRleChoTGluazEpLCA9PSwgNik7Ci0gICAgZ19hc3NlcnRfY21w
aW50KGF0a19oeXBlcmxpbmtfZ2V0X25fYW5jaG9ycyhoTGluazEpLCA9PSwgMSk7Ci0gICAgZ19h
c3NlcnRfY21wc3RyKGF0a19oeXBlcmxpbmtfZ2V0X3VyaShoTGluazEsIDApLCA9PSwgImh0dHA6
Ly9mb28uYmFyLmJhei8iKTsKLQotICAgIEF0a0h5cGVybGluayogaExpbmsyID0gYXRrX2h5cGVy
dGV4dF9nZXRfbGluayhBVEtfSFlQRVJURVhUKHBhcmFncmFwaDIpLCAxKTsKLSAgICBnX2Fzc2Vy
dChBVEtfSFlQRVJMSU5LKGhMaW5rMikpOwotICAgIEF0a09iamVjdCogaExpbmtPYmplY3QyID0g
YXRrX2h5cGVybGlua19nZXRfb2JqZWN0KGhMaW5rMiwgMCk7Ci0gICAgZ19hc3NlcnQoQVRLX09C
SkVDVChoTGlua09iamVjdDIpKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGhM
aW5rT2JqZWN0MikgPT0gQVRLX1JPTEVfTElOSyk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a19o
eXBlcmxpbmtfZ2V0X3N0YXJ0X2luZGV4KGhMaW5rMiksID09LCAxMik7Ci0gICAgZ19hc3NlcnRf
Y21waW50KGF0a19oeXBlcmxpbmtfZ2V0X2VuZF9pbmRleChoTGluazIpLCA9PSwgMzIpOwotICAg
IGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9uX2FuY2hvcnMoaExpbmsyKSwgPT0s
IDEpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihhdGtfaHlwZXJsaW5rX2dldF91cmkoaExpbmsyLCAw
KSwgPT0sICJodHRwOi8vYmFyLmJhei5mb28vIik7Ci0KLSAgICBBdGtIeXBlcmxpbmsqIGhMaW5r
MyA9IGF0a19oeXBlcnRleHRfZ2V0X2xpbmsoQVRLX0hZUEVSVEVYVChwYXJhZ3JhcGgyKSwgMik7
Ci0gICAgZ19hc3NlcnQoQVRLX0hZUEVSTElOSyhoTGluazMpKTsKLSAgICBBdGtPYmplY3QqIGhM
aW5rT2JqZWN0MyA9IGF0a19oeXBlcmxpbmtfZ2V0X29iamVjdChoTGluazMsIDApOwotICAgIGdf
YXNzZXJ0KEFUS19PQkpFQ1QoaExpbmtPYmplY3QzKSk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVj
dF9nZXRfcm9sZShoTGlua09iamVjdDMpID09IEFUS19ST0xFX0xJTkspOwotICAgIGdfYXNzZXJ0
X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9zdGFydF9pbmRleChoTGluazMpLCA9PSwgNjUpOwot
ICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9lbmRfaW5kZXgoaExpbmszKSwg
PT0sIDc1KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfbl9hbmNob3Jz
KGhMaW5rMyksID09LCAxKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoYXRrX2h5cGVybGlua19nZXRf
dXJpKGhMaW5rMywgMCksID09LCAiaHR0cDovL2Jhei5mb28uYmFyLyIpOwotCi0gICAgQXRrT2Jq
ZWN0KiBsaXN0ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDIpOwot
ICAgIGdfYXNzZXJ0KEFUS19PQkpFQ1QobGlzdCkpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3Rf
Z2V0X3JvbGUobGlzdCkgPT0gQVRLX1JPTEVfTElTVCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0
a19vYmplY3RfZ2V0X25fYWNjZXNzaWJsZV9jaGlsZHJlbihsaXN0KSwgPT0sIDEpOwotCi0gICAg
QXRrT2JqZWN0KiBsaXN0SXRlbSA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQobGlz
dCwgMCk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQobGlzdEl0ZW0pKTsKLSAgICBnX2Fzc2Vy
dChBVEtfSVNfSFlQRVJURVhUKGxpc3RJdGVtKSk7Ci0KLSAgICBBdGtIeXBlcmxpbmsqIGhMaW5r
SW5MaXN0SXRlbSA9IGF0a19oeXBlcnRleHRfZ2V0X2xpbmsoQVRLX0hZUEVSVEVYVChsaXN0SXRl
bSksIDApOwotICAgIGdfYXNzZXJ0KEFUS19IWVBFUkxJTksoaExpbmtJbkxpc3RJdGVtKSk7Ci0g
ICAgQXRrT2JqZWN0KiBoTGlua09iamVjdCA9IGF0a19oeXBlcmxpbmtfZ2V0X29iamVjdChoTGlu
a0luTGlzdEl0ZW0sIDApOwotICAgIGdfYXNzZXJ0KEFUS19PQkpFQ1QoaExpbmtPYmplY3QpKTsK
LSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGhMaW5rT2JqZWN0KSA9PSBBVEtfUk9M
RV9MSU5LKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfc3RhcnRfaW5k
ZXgoaExpbmtJbkxpc3RJdGVtKSwgPT0sIDIwKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5
cGVybGlua19nZXRfZW5kX2luZGV4KGhMaW5rSW5MaXN0SXRlbSksID09LCA0Myk7Ci0gICAgZ19h
c3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0X25fYW5jaG9ycyhoTGlua0luTGlzdEl0ZW0p
LCA9PSwgMSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKGF0a19oeXBlcmxpbmtfZ2V0X3VyaShoTGlu
a0luTGlzdEl0ZW0sIDApLCA9PSwgImh0dHA6Ly9mb28uYmFyLmJhei8iKTsKLQotICAgIC8qIEZp
bmFsbHkgY2hlY2sgdGhlIEF0a0FjdGlvbiBpbnRlcmZhY2UgZm9yIGEgZ2l2ZW4gQXRrSHlwZXJs
aW5rLiAqLwotICAgIGdfYXNzZXJ0KEFUS19JU19BQ1RJT04oaExpbmsxKSk7Ci0gICAgZ19hc3Nl
cnRfY21waW50KGF0a19hY3Rpb25fZ2V0X25fYWN0aW9ucyhBVEtfQUNUSU9OKGhMaW5rMSkpLCA9
PSwgMSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKGF0a19hY3Rpb25fZ2V0X2tleWJpbmRpbmcoQVRL
X0FDVElPTihoTGluazEpLCAwKSwgPT0sICIiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoYXRrX2Fj
dGlvbl9nZXRfbmFtZShBVEtfQUNUSU9OKGhMaW5rMSksIDApLCA9PSwgImp1bXAiKTsKLSAgICBn
X2Fzc2VydChhdGtfYWN0aW9uX2RvX2FjdGlvbihBVEtfQUNUSU9OKGhMaW5rMSksIDApKTsKLQot
ICAgIGdfb2JqZWN0X3VucmVmKHBhcmFncmFwaDEpOwotICAgIGdfb2JqZWN0X3VucmVmKHBhcmFn
cmFwaDIpOwotICAgIGdfb2JqZWN0X3VucmVmKGxpc3QpOwotICAgIGdfb2JqZWN0X3VucmVmKGxp
c3RJdGVtKTsKLSAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKLX0KLQotc3RhdGljIHZvaWQg
dGVzdFdlYmtpdEF0a0xpc3RzT2ZJdGVtcygpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmll
dyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0
X3JlZl9zaW5rKHdlYlZpZXcpOwotICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwg
MCwgODAwLCA2MDAgfTsKLSAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVCh3
ZWJWaWV3KSwgJmFsbG9jYXRpb24pOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3
ZWJWaWV3LCBsaXN0c09mSXRlbXMsIDAsIDAsIDApOwotCi0gICAgQXRrT2JqZWN0KiBvYmplY3Qg
PSBnZXRXZWJBcmVhT2JqZWN0KHdlYlZpZXcpOwotICAgIGdfYXNzZXJ0KG9iamVjdCk7Ci0KLSAg
ICAvKiBVbm9yZGVyZWQgbGlzdC4gKi8KLQotICAgIEF0a09iamVjdCogdUxpc3QgPSBhdGtfb2Jq
ZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMCk7Ci0gICAgZ19hc3NlcnQoQVRLX09C
SkVDVCh1TGlzdCkpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUodUxpc3QpID09
IEFUS19ST0xFX0xJU1QpOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfb2JqZWN0X2dldF9uX2Fj
Y2Vzc2libGVfY2hpbGRyZW4odUxpc3QpLCA9PSwgMyk7Ci0KLSAgICBBdGtPYmplY3QqIGl0ZW0x
ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZCh1TGlzdCwgMCk7Ci0gICAgQXRrT2Jq
ZWN0KiBpdGVtMiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQodUxpc3QsIDEpOwot
ICAgIEF0a09iamVjdCogaXRlbTMgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKHVM
aXN0LCAyKTsKLQotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfb2JqZWN0X2dldF9uX2FjY2Vzc2li
bGVfY2hpbGRyZW4oaXRlbTEpLCA9PSwgMCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a19vYmpl
Y3RfZ2V0X25fYWNjZXNzaWJsZV9jaGlsZHJlbihpdGVtMiksID09LCAxKTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoYXRrX29iamVjdF9nZXRfbl9hY2Nlc3NpYmxlX2NoaWxkcmVuKGl0ZW0zKSwgPT0s
IDEpOwotCi0gICAgZ19vYmplY3RfdW5yZWYoaXRlbTEpOwotICAgIGdfb2JqZWN0X3VucmVmKGl0
ZW0yKTsKLSAgICBnX29iamVjdF91bnJlZihpdGVtMyk7Ci0KLSAgICAvKiBPcmRlcmVkIGxpc3Qu
ICovCi0KLSAgICBBdGtPYmplY3QqIG9MaXN0ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9j
aGlsZChvYmplY3QsIDEpOwotICAgIGdfYXNzZXJ0KEFUS19PQkpFQ1Qob0xpc3QpKTsKLSAgICBn
X2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKG9MaXN0KSA9PSBBVEtfUk9MRV9MSVNUKTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQoYXRrX29iamVjdF9nZXRfbl9hY2Nlc3NpYmxlX2NoaWxkcmVuKG9M
aXN0KSwgPT0sIDMpOwotCi0gICAgaXRlbTEgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2No
aWxkKG9MaXN0LCAwKTsKLSAgICBpdGVtMiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hp
bGQob0xpc3QsIDEpOwotICAgIGl0ZW0zID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGls
ZChvTGlzdCwgMik7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX29iamVjdF9nZXRfbl9hY2Nl
c3NpYmxlX2NoaWxkcmVuKGl0ZW0xKSwgPT0sIDApOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtf
b2JqZWN0X2dldF9uX2FjY2Vzc2libGVfY2hpbGRyZW4oaXRlbTIpLCA9PSwgMSk7Ci0gICAgZ19h
c3NlcnRfY21waW50KGF0a19vYmplY3RfZ2V0X25fYWNjZXNzaWJsZV9jaGlsZHJlbihpdGVtMyks
ID09LCAxKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGl0ZW0xKTsKLSAgICBnX29iamVjdF91bnJl
ZihpdGVtMik7Ci0gICAgZ19vYmplY3RfdW5yZWYoaXRlbTMpOwotCi0gICAgZ19vYmplY3RfdW5y
ZWYodUxpc3QpOwotICAgIGdfb2JqZWN0X3VucmVmKG9MaXN0KTsKLSAgICBnX29iamVjdF91bnJl
Zih3ZWJWaWV3KTsKLX0KLQotdHlwZWRlZiBlbnVtIHsKLSAgVEVYVF9DSEFOR0VfSU5TRVJUID0g
MSwKLSAgVEVYVF9DSEFOR0VfUkVNT1ZFID0gMgotfSBUZXh0Q2hhbmdlVHlwZTsKLQotc3RhdGlj
IGdjaGFyKiB0ZXh0Q2hhbmdlZFJlc3VsdCA9IDA7Ci0KLXN0YXRpYyB2b2lkIHRleHRDaGFuZ2Vk
Q2IoQXRrVGV4dCogdGV4dCwgZ2ludCBwb3MsIGdpbnQgbGVuLCBnY2hhciogbW9kaWZpZWRUZXh0
LCBncG9pbnRlciBkYXRhKQotewotICAgIGdfYXNzZXJ0KHRleHQgJiYgQVRLX0lTX09CSkVDVCh0
ZXh0KSk7Ci0KLSAgICBUZXh0Q2hhbmdlVHlwZSB0eXBlID0gR1BPSU5URVJfVE9fSU5UKGRhdGEp
OwotICAgIGdfZnJlZSh0ZXh0Q2hhbmdlZFJlc3VsdCk7Ci0gICAgdGV4dENoYW5nZWRSZXN1bHQg
PSBnX3N0cmR1cF9wcmludGYoInwlZHwlZHwlZHwnJXMnfCIsIHR5cGUsIHBvcywgbGVuLCBtb2Rp
ZmllZFRleHQpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrVGV4dENoYW5nZWROb3Rp
ZmljYXRpb25zKCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9W
SUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmll
dyk7Ci0gICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9Owot
ICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2Nh
dGlvbik7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIGZvcm1XaXRo
VGV4dElucHV0cywgMCwgMCwgMCk7Ci0KLSAgICBBdGtPYmplY3QqIG9iamVjdCA9IGdldFdlYkFy
ZWFPYmplY3Qod2ViVmlldyk7Ci0gICAgZ19hc3NlcnQob2JqZWN0KTsKLQotICAgIEF0a09iamVj
dCogZm9ybSA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAwKTsKLSAg
ICBnX2Fzc2VydChBVEtfSVNfT0JKRUNUKGZvcm0pKTsKLQotICAgIC8qIEZpcnN0IGNoZWNrIG5v
cm1hbCB0ZXh0IGVudHJpZXMuICovCi0gICAgQXRrT2JqZWN0KiB0ZXh0RW50cnkgPSBhdGtfb2Jq
ZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZvcm0sIDApOwotICAgIGdfYXNzZXJ0KEFUS19JU19F
RElUQUJMRV9URVhUKHRleHRFbnRyeSkpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3Jv
bGUoQVRLX09CSkVDVCh0ZXh0RW50cnkpKSA9PSBBVEtfUk9MRV9FTlRSWSk7Ci0KLSAgICBnX3Np
Z25hbF9jb25uZWN0KHRleHRFbnRyeSwgInRleHQtaW5zZXJ0IiwKLSAgICAgICAgICAgICAgICAg
ICAgIEdfQ0FMTEJBQ0sodGV4dENoYW5nZWRDYiksCi0gICAgICAgICAgICAgICAgICAgICBHSU5U
X1RPX1BPSU5URVIoVEVYVF9DSEFOR0VfSU5TRVJUKSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdCh0
ZXh0RW50cnksICJ0ZXh0LXJlbW92ZSIsCi0gICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNL
KHRleHRDaGFuZ2VkQ2IpLAotICAgICAgICAgICAgICAgICAgICAgR0lOVF9UT19QT0lOVEVSKFRF
WFRfQ0hBTkdFX1JFTU9WRSkpOwotCi0gICAgZ2ludCBwb3MgPSAwOwotICAgIGF0a19lZGl0YWJs
ZV90ZXh0X2luc2VydF90ZXh0KEFUS19FRElUQUJMRV9URVhUKHRleHRFbnRyeSksICJmb28gYmFy
IGJheiIsIDExLCAmcG9zKTsKLSAgICBjaGFyKiB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHQoQVRL
X1RFWFQodGV4dEVudHJ5KSwgMCwgLTEpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwg
ImZvbyBiYXIgYmF6Iik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRleHRDaGFuZ2VkUmVzdWx0LCA9
PSwgInwxfDB8MTF8J2ZvbyBiYXIgYmF6J3wiKTsKLSAgICBnX2ZyZWUodGV4dCk7Ci0KLSAgICBh
dGtfZWRpdGFibGVfdGV4dF9kZWxldGVfdGV4dChBVEtfRURJVEFCTEVfVEVYVCh0ZXh0RW50cnkp
LCA0LCA3KTsKLSAgICB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHQoQVRLX1RFWFQodGV4dEVudHJ5
KSwgMCwgLTEpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwgImZvbyAgYmF6Iik7Ci0g
ICAgZ19hc3NlcnRfY21wc3RyKHRleHRDaGFuZ2VkUmVzdWx0LCA9PSwgInwyfDR8M3wnYmFyJ3wi
KTsKLSAgICBnX2ZyZWUodGV4dCk7Ci0KLSAgICBwb3MgPSA0OwotICAgIGF0a19lZGl0YWJsZV90
ZXh0X2luc2VydF90ZXh0KEFUS19FRElUQUJMRV9URVhUKHRleHRFbnRyeSksICJxdXggcXV1eCB0
b2JlaWdub3JlZCIsIDgsICZwb3MpOwotICAgIHRleHQgPSBhdGtfdGV4dF9nZXRfdGV4dChBVEtf
VEVYVCh0ZXh0RW50cnkpLCAwLCAtMSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09LCAi
Zm9vIHF1eCBxdXV4IGJheiIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0Q2hhbmdlZFJlc3Vs
dCwgPT0sICJ8MXw0fDh8J3F1eCBxdXV4J3wiKTsKLSAgICBnX2ZyZWUodGV4dCk7Ci0KLSAgICAv
KiBOb3cgY2hlY2sgZm9yIHBhc3N3b3JkIGVudHJpZXMuICovCi0gICAgQXRrT2JqZWN0KiBwYXNz
d29yZEVudHJ5ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmb3JtLCAxKTsKLSAg
ICBnX2Fzc2VydChBVEtfSVNfRURJVEFCTEVfVEVYVChwYXNzd29yZEVudHJ5KSk7Ci0gICAgZ19h
c3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShBVEtfT0JKRUNUKHBhc3N3b3JkRW50cnkpKSA9PSBB
VEtfUk9MRV9QQVNTV09SRF9URVhUKTsKLQotICAgIGdfc2lnbmFsX2Nvbm5lY3QocGFzc3dvcmRF
bnRyeSwgInRleHQtaW5zZXJ0IiwKLSAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sodGV4
dENoYW5nZWRDYiksCi0gICAgICAgICAgICAgICAgICAgICBHSU5UX1RPX1BPSU5URVIoVEVYVF9D
SEFOR0VfSU5TRVJUKSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChwYXNzd29yZEVudHJ5LCAidGV4
dC1yZW1vdmUiLAotICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyh0ZXh0Q2hhbmdlZENi
KSwKLSAgICAgICAgICAgICAgICAgICAgIEdJTlRfVE9fUE9JTlRFUihURVhUX0NIQU5HRV9SRU1P
VkUpKTsKLQotICAgIHBvcyA9IDA7Ci0gICAgLyogQSBzaW5nbGUgYnVsbGV0IGNoYXJhY3RlciBp
cyAnXDM0MlwyMDBcMjQyJyAqLwotICAgIGF0a19lZGl0YWJsZV90ZXh0X2luc2VydF90ZXh0KEFU
S19FRElUQUJMRV9URVhUKHBhc3N3b3JkRW50cnkpLCAiZm9vYmFyIiwgNiwgJnBvcyk7Ci0gICAg
Z19hc3NlcnRfY21wc3RyKHRleHRDaGFuZ2VkUmVzdWx0LCA9PSwgInwxfDB8NnwnXDM0MlwyMDBc
MjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0Mlwy
MDBcMjQyJ3wiKTsKLSAgICB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHQoQVRLX1RFWFQocGFzc3dv
cmRFbnRyeSksIDAsIC0xKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGV4dCwgPT0sICJcMzQyXDIw
MFwyNDJcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDJcMzQy
XDIwMFwyNDIiKTsKLSAgICBnX2ZyZWUodGV4dCk7Ci0KLSAgICBhdGtfZWRpdGFibGVfdGV4dF9k
ZWxldGVfdGV4dChBVEtfRURJVEFCTEVfVEVYVChwYXNzd29yZEVudHJ5KSwgMiwgNCk7Ci0gICAg
Z19hc3NlcnRfY21wc3RyKHRleHRDaGFuZ2VkUmVzdWx0LCA9PSwgInwyfDJ8MnwnXDM0MlwyMDBc
MjQyXDM0MlwyMDBcMjQyJ3wiKTsKLQotICAgIHRleHQgPSBhdGtfdGV4dF9nZXRfdGV4dChBVEtf
VEVYVChwYXNzd29yZEVudHJ5KSwgMCwgLTEpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9
PSwgIlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MiIpOwot
ICAgIGdfZnJlZSh0ZXh0KTsKLQotICAgIHBvcyA9IDM7Ci0gICAgYXRrX2VkaXRhYmxlX3RleHRf
aW5zZXJ0X3RleHQoQVRLX0VESVRBQkxFX1RFWFQocGFzc3dvcmRFbnRyeSksICJxdXggdG9iZWln
bm9yZWQiLCAzLCAmcG9zKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGV4dENoYW5nZWRSZXN1bHQs
ID09LCAifDF8M3wzfCdcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDInfCIpOwot
Ci0gICAgdGV4dCA9IGF0a190ZXh0X2dldF90ZXh0KEFUS19URVhUKHBhc3N3b3JkRW50cnkpLCAw
LCAtMSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09LCAiXDM0MlwyMDBcMjQyXDM0Mlwy
MDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0
MlwyMDBcMjQyIik7Ci0gICAgZ19mcmVlKHRleHQpOwotCi0gICAgZ19mcmVlKHRleHRDaGFuZ2Vk
UmVzdWx0KTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGZvcm0pOwotICAgIGdfb2JqZWN0X3VucmVm
KHRleHRFbnRyeSk7Ci0gICAgZ19vYmplY3RfdW5yZWYocGFzc3dvcmRFbnRyeSk7Ci0gICAgZ19v
YmplY3RfdW5yZWYod2ViVmlldyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtQYXJl
bnRGb3JSb290T2JqZWN0KCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lU
X1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgR3RrQWxsb2NhdGlvbiBhbGxv
Y2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9OwotICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0
ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7Ci0gICAgd2Via2l0X3dlYl92aWV3
X2xvYWRfc3RyaW5nKHdlYlZpZXcsIGNvbnRlbnRzLCAwLCAwLCAwKTsKLQotICAgIC8qIFdlIG5l
ZWQgYSBwYXJlbnQgY29udGFpbmVyIHdpZGdldCBmb3IgdGhlIHdlYnZpZXcuICovCi0gICAgR3Rr
V2lkZ2V0KiBwYXJlbnRDb250YWluZXIgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExF
VkVMKTsKLSAgICBnX29iamVjdF9yZWZfc2luayhwYXJlbnRDb250YWluZXIpOwotICAgIGd0a19j
b250YWluZXJfYWRkKEdUS19DT05UQUlORVIocGFyZW50Q29udGFpbmVyKSwgR1RLX1dJREdFVCh3
ZWJWaWV3KSk7Ci0KLSAgICBBdGtPYmplY3QqIGF4UGFyZW50ID0gZ3RrX3dpZGdldF9nZXRfYWNj
ZXNzaWJsZShwYXJlbnRDb250YWluZXIpOwotICAgIGdfYXNzZXJ0KEFUS19JU19PQkpFQ1QoYXhQ
YXJlbnQpKTsKLQotICAgIEF0a09iamVjdCogYXhSb290ID0gZ3RrX3dpZGdldF9nZXRfYWNjZXNz
aWJsZShHVEtfV0lER0VUKHdlYlZpZXcpKTsKLSAgICBnX2Fzc2VydChBVEtfSVNfT0JKRUNUKGF4
Um9vdCkpOwotCi0gICAgLyogVGhlIGNoaWxkIGZvciB0aGUgcGFyZW50IGNvbnRhaW5lcidzIGFj
Y2Vzc2liaWxpdHkgb2JqZWN0Ci0gICAgICAgc2hvdWxkIGJlIHRoZSBhY2Nlc3NpYmlsaXR5IG9i
amVjdCBmb3IgdGhlIFdlYlZpZXcncyByb290LiAqLwotICAgIEF0a09iamVjdCogYXhQYXJlbnRD
aGlsZCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoYXhQYXJlbnQsIDApOwotICAg
IGdfYXNzZXJ0KGF4UGFyZW50Q2hpbGQgPT0gYXhSb290KTsKLQotICAgIC8qIEJvdHRvbS11cCBu
YXZpZ2F0aW9uIHNob3VsZCBtYXRjaCB0b3AtZG93biBvbmUuICovCi0gICAgZ19hc3NlcnQoYXRr
X29iamVjdF9nZXRfcGFyZW50KGF4UGFyZW50Q2hpbGQpID09IGF4UGFyZW50KTsKLQotICAgIGdf
b2JqZWN0X3VucmVmKGF4UGFyZW50Q2hpbGQpOwotICAgIGdfb2JqZWN0X3VucmVmKHBhcmVudENv
bnRhaW5lcik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtTZXRQYXJlbnRGb3JPYmpl
Y3QoKQotewotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Vi
a2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAs
IDAsIDgwMCwgNjAwIH07Ci0gICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQo
d2ViVmlldyksICZhbGxvY2F0aW9uKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmco
d2ViVmlldywgY29udGVudHMsIDAsIDAsIDApOwotCi0gICAgLyogUHV0IHRoZSB3ZWJ2aWV3IGlu
IGEgcGFyZW50IGNvbnRhaW5lciB3aWRnZXQgdG8gY2hlY2sgdGhhdCB0aGUKLSAgICAgICBub3Jt
YWwgYmVoYXZpb3VyIGtlZXBzIHdvcmtpbmcgYXMgZXhwZWN0ZWQgYnkgZGVmYXVsdC4gKi8KLSAg
ICBHdGtXaWRnZXQqIHBhcmVudENvbnRhaW5lciA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1df
VE9QTEVWRUwpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKHBhcmVudENvbnRhaW5lcik7Ci0gICAg
Z3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihwYXJlbnRDb250YWluZXIpLCBHVEtfV0lE
R0VUKHdlYlZpZXcpKTsKLQotICAgIEF0a09iamVjdCogYXhSb290ID0gZ3RrX3dpZGdldF9nZXRf
YWNjZXNzaWJsZShHVEtfV0lER0VUKHdlYlZpZXcpKTsKLSAgICBnX2Fzc2VydChBVEtfSVNfT0JK
RUNUKGF4Um9vdCkpOwotCi0gICAgQXRrT2JqZWN0KiBheFBhcmVudCA9IGd0a193aWRnZXRfZ2V0
X2FjY2Vzc2libGUocGFyZW50Q29udGFpbmVyKTsKLSAgICBnX2Fzc2VydChBVEtfSVNfT0JKRUNU
KGF4UGFyZW50KSk7Ci0KLSAgICAvKiBUaGUgcGFyZW50IG9mIHRoZSByb290IG9iamVjdCBpcyB0
aGUgcGFyZW50IGNvbnRhaW5lcidzIGExMXkgb2JqZWN0LiAqLwotICAgIGdfYXNzZXJ0KGF0a19v
YmplY3RfZ2V0X3BhcmVudChheFJvb3QpID09IGF4UGFyZW50KTsKLQotICAgIC8qIFdlIG5vdyBu
ZWVkIHRvIHVzZSBzb21ldGhpbmcgYXMgYSBhbiBhbHRlcm5hdGl2ZSBwYXJlbnQgZm9yCi0gICAg
ICAgdGhlIGExMXkgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgcm9vdCBvZiB0aGUgRE9NIHRy
ZWUuICovCi0gICAgR3RrV2lkZ2V0KiBhbHRlcm5hdGl2ZVBhcmVudCA9IGd0a19idXR0b25fbmV3
KCk7Ci0gICAgZ19vYmplY3RfcmVmX3NpbmsoYWx0ZXJuYXRpdmVQYXJlbnQpOwotCi0gICAgQXRr
T2JqZWN0KiBheEFsdGVybmF0aXZlUGFyZW50ID0gZ3RrX3dpZGdldF9nZXRfYWNjZXNzaWJsZShh
bHRlcm5hdGl2ZVBhcmVudCk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX09CSkVDVChheEFsdGVybmF0
aXZlUGFyZW50KSk7Ci0KLSAgICAvKiBNYW51YWxseSBzZXQgdGhlIGFsdGVybmF0aXZlIHBhcmVu
dCdzIGFjY2Vzc2liaWxpdHkgb2JqZWN0IGFzCi0gICAgICAgdGhlIHBhcmVudCBmb3IgdGhlIFdl
YktpdCBhY2Nlc3NpYmlsaXR5IHJvb3Qgb2JqZWN0IGFuZCBjaGVjay4gKi8KLSAgICBhdGtfb2Jq
ZWN0X3NldF9wYXJlbnQoYXhSb290LCBheEFsdGVybmF0aXZlUGFyZW50KTsKLSAgICBnX2Fzc2Vy
dChhdGtfb2JqZWN0X2dldF9wYXJlbnQoYXhSb290KSA9PSBheEFsdGVybmF0aXZlUGFyZW50KTsK
LQotICAgIGdfb2JqZWN0X3VucmVmKGFsdGVybmF0aXZlUGFyZW50KTsKLSAgICBnX29iamVjdF91
bnJlZihwYXJlbnRDb250YWluZXIpOwotfQotCi0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLXN0
YXRpYyB2b2lkIGluaXRpYWxpemVUZXN0aW5nRnJhbWV3b3JrKGludCBhcmdjLCBjaGFyKiogYXJn
dikKLXsKLSAgICAvKiBFbnN1cmUgR0FJTCBpcyB0aGUgb25seSBtb2R1bGUgbG9hZGVkLiAqLwot
ICAgIGdfc2V0ZW52KCJHVEtfTU9EVUxFUyIsICJnYWlsIiwgVFJVRSk7Ci0KLSAgICAvKiBGb2xs
b3dpbmcgbGluZXMgd2VyZSB0YWtlbiBmcm9tIGd0a190ZXN0X2luaXQoKS4gKi8KLSAgICBnX3Rl
c3RfaW5pdCgmYXJnYywgJmFyZ3YsIDApOwotICAgIGd0a19kaXNhYmxlX3NldGxvY2FsZSgpOwot
ICAgIHNldGxvY2FsZShMQ19BTEwsICJDIik7Ci0KLSAgICBndGtfaW5pdCgmYXJnYywgJmFyZ3Yp
OwotfQotI2VuZGlmCi0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKLXsKLSNpZmRl
ZiBHVEtfQVBJX1ZFUlNJT05fMgotICAgIC8qIFdlIGNhbid0IGp1c3QgY2FsbCB0byBndGtfdGVz
dF9pbml0KCkgaW4gdGhpcyBjYXNlIGJlY2F1c2UgaXRzCi0gICAgICAgaW1wbGVtZW50YXRpb24g
bWFrZXMgc3VyZSB0aGF0IG5vIEdUSysgbW9kdWxlIHdpbGwgYmUgbG9hZGVkLCBhbmQKLSAgICAg
ICB3ZSB3aWxsIG5lZWQgdG8gbG9hZCBHQUlMIGZvciB0ZXN0cyB0aGF0IG5lZWQgdG8gdXNlIEF0
a09iamVjdHMKLSAgICAgICBmcm9tIG5vbi1XZWJLaXQgR3RrV2lkZ2V0cyAoZS5nIHBhcmVudEZv
clJvb3RPYmplY3QpLiovCi0gICAgaW5pdGlhbGl6ZVRlc3RpbmdGcmFtZXdvcmsoYXJnYywgYXJn
dik7Ci0jZWxzZQotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLSNlbmRp
ZgotCi0gICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKLSAg
ICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2NhcmV0T2Zmc2V0cyIsIHRlc3RXZWJraXRB
dGtDYXJldE9mZnNldHMpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvY2FyZXRP
ZmZzZXRzQW5kRXh0cmFub3VzV2hpdGVTcGFjZXMiLCB0ZXN0V2Via2l0QXRrQ2FyZXRPZmZzZXRz
QW5kRXh0cmFub3VzV2hpdGVTcGFjZXMpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9h
dGsvY29tYm9Cb3giLCB0ZXN0V2Via2l0QXRrQ29tYm9Cb3gpOwotICAgIGdfdGVzdF9hZGRfZnVu
YygiL3dlYmtpdC9hdGsvZG9jdW1lbnRMb2FkaW5nRXZlbnRzIiwgdGVzdFdlYmtpdEF0a0RvY3Vt
ZW50TG9hZGluZ0V2ZW50cyk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9lbWJl
ZGRlZE9iamVjdHMiLCB0ZXN0V2Via2l0QXRrRW1iZWRkZWRPYmplY3RzKTsKLSAgICBnX3Rlc3Rf
YWRkX2Z1bmMoIi93ZWJraXQvYXRrL2dldEhlYWRlcnNJblRhYmxlIiwgdGVzdFdlYmtpdEF0a0dl
dEhlYWRlcnNJblRhYmxlKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL3RleHRB
dHRyaWJ1dGVzIiwgdGVzdFdlYmtpdEF0a1RleHRBdHRyaWJ1dGVzKTsKLSAgICBnX3Rlc3RfYWRk
X2Z1bmMoIi93ZWJraXQvYXRrL3RleHRTZWxlY3Rpb25zIiwgdGVzdFdlYmtpdEF0a1RleHRTZWxl
Y3Rpb25zKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2dldEV4dGVudHMiLCB0
ZXN0V2Via2l0QXRrR2V0RXh0ZW50cyk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0
ay9oeXBlcnRleHRBbmRIeXBlcmxpbmtzIiwgdGVzdFdlYmtpdEF0a0h5cGVydGV4dEFuZEh5cGVy
bGlua3MpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvbGF5b3V0QW5kRGF0YVRh
YmxlcyIsIHRlc3RXZWJraXRBdGtMYXlvdXRBbmREYXRhVGFibGVzKTsKLSAgICBnX3Rlc3RfYWRk
X2Z1bmMoIi93ZWJraXQvYXRrL2xpbmtzV2l0aElubGluZUltYWdlcyIsIHRlc3RXZWJraXRBdGtM
aW5rc1dpdGhJbmxpbmVJbWFnZXMpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsv
bGlzdHNPZkl0ZW1zIiwgdGVzdFdlYmtpdEF0a0xpc3RzT2ZJdGVtcyk7Ci0gICAgZ190ZXN0X2Fk
ZF9mdW5jKCIvd2Via2l0L2F0ay90ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbnMiLCB0ZXN0V2Via2l0
QXRrVGV4dENoYW5nZWROb3RpZmljYXRpb25zKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJr
aXQvYXRrL3BhcmVudEZvclJvb3RPYmplY3QiLCB0ZXN0V2Via2l0QXRrUGFyZW50Rm9yUm9vdE9i
amVjdCk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9zZXRQYXJlbnRGb3JPYmpl
Y3QiLCB0ZXN0V2Via2l0QXRrU2V0UGFyZW50Rm9yT2JqZWN0KTsKLSAgICByZXR1cm4gZ190ZXN0
X3J1biAoKTsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGF0
a3JvbGVzLmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXRrcm9sZXMuYwpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODg4MTdjZi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2d0ay90ZXN0cy90ZXN0YXRrcm9sZXMuYworKysgL2Rldi9udWxsCkBAIC0xLDQyNiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IMKpIDIwMTAgSm9hbm1hcmllIERpZ2dzCi0gKiBDb3B5cmln
aHQgwqkgMjAxMCBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8Z2xp
Yi5oPgotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2lu
Y2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KLQotLyogTm9uIGZvcm0gcm9sZXMgKi8KLSNkZWZpbmUg
SFRNTF9ET0NVTUVOVF9GUkFNRSAiPGh0bWw+PGJvZHk+VGhpcyBpcyBhIHRlc3QuPC9ib2R5Pjwv
aHRtbD4iCi0jZGVmaW5lIEhUTUxfSEVBRElORyAiPGh0bWw+PGJvZHk+PGgxPjE8L2gxPjxoMj4y
PC9oMj48aDM+MzwvaDM+PGg0PjQ8L2g0PjxoNT41PC9oNT48aDY+NjwvaDY+PC9ib2R5PjwvaHRt
bD4iCi0jZGVmaW5lIEhUTUxfSU1BR0UgIjxodG1sPjxib2R5PjxpbWcgc3JjPSdmb29iYXIucG5n
JyBhbHQ9J1RoaXMgaXMgYSB0ZXN0LicvPjwvYm9keT48L2h0bWw+IgotI2RlZmluZSBIVE1MX0xJ
TktfVEVYVCAiPGh0bWw+PGJvZHk+PGEgaHJlZj0nZm9vYmFyLmh0bWwnPlRoaXMgaXMgYSB0ZXN0
LjwvYT48L2JvZHk+PC9odG1sPiIKLSNkZWZpbmUgSFRNTF9MSVNUICI8aHRtbD48Ym9keT48dWw+
PGxpPjE8L2xpPjxsaT4yPC9saT48L3VsPjxvbD48bGk+MTwvbGk+PGxpPjI8L2xpPjwvb2w+PC9i
b2R5PjwvaHRtbD4iCi0jZGVmaW5lIEhUTUxfUEFSQUdSQVBIICI8aHRtbD48Ym9keT48cD5UaGlz
IGlzIGEgdGVzdC48L3A+PC9ib2R5PjwvaHRtbD4iCi0jZGVmaW5lIEhUTUxfU0VDVElPTiAiPGh0
bWw+PGJvZHk+PGRpdj5UaGlzIGlzIGEgdGVzdC48L2Rpdj48L2JvZHk+PC9odG1sPiIKLSNkZWZp
bmUgSFRNTF9UQUJMRSAiPGh0bWw+PGJvZHk+PHRhYmxlIGJvcmRlcj0nMSc+PHRyPjx0ZD5UaGlz
IGlzPC90ZD48dGQ+YSB0ZXN0LjwvdGQ+PC90cj48L3RhYmxlPjwvYm9keT48L2h0bWw+IgotI2Rl
ZmluZSBIVE1MX1NFUEFSQVRPUiAiPGh0bWw+PGJvZHk+PGhyLz48L2JvZHk+PC9odG1sPiIKLSNk
ZWZpbmUgSFRNTF9DT01CT0JPWCAiPGh0bWw+PGJvZHk+PHNlbGVjdCBzaXplPScxJz48b3B0aW9u
Pm9uZTwvb3B0aW9uPjxvcHRpb24+dHdvPC9vcHRpb24+PG9wdGlvbj50aHJlZTwvb3B0aW9uPjwv
c2VsZWN0PjwvYm9keT48L2h0bWw+IgotLyogRm9ybSByb2xlcyAqLwotI2RlZmluZSBIVE1MX0ZP
Uk0gIjxodG1sPjxib2R5Pjxmb3JtPlRoaXMgaXMgYSB0ZXN0LjwvZm9ybT48L2JvZHk+PC9odG1s
PiIKLSNkZWZpbmUgSFRNTF9DSEVDS19CT1ggIjxodG1sPjxib2R5PjxpbnB1dCB0eXBlPSdjaGVj
a2JveCcgLz5UaGlzIGlzIGEgdGVzdC48L2JvZHk+PC9odG1sPiIKLSNkZWZpbmUgSFRNTF9MQUJF
TEVEX0VOVFJZICI8aHRtbD48Ym9keT48bGFiZWwgZm9yPSdmb28nPk5hbWU6PC9sYWJlbD48aW5w
dXQgdHlwZT0ndGV4dCcgaWQ9J2ZvbycgLz48L2JvZHk+PC9odG1sPiIKLSNkZWZpbmUgSFRNTF9M
SVNUQk9YICI8aHRtbD48Ym9keT48c2VsZWN0IHNpemU9JzMnPjxvcHRpb24+b25lPC9vcHRpb24+
PG9wdGlvbj50d288L29wdGlvbj48b3B0aW9uPnRocmVlPC9vcHRpb24+PC9zZWxlY3Q+PC9ib2R5
PjwvaHRtbD4iCi0jZGVmaW5lIEhUTUxfUEFTU1dPUkRfVEVYVCAiPGh0bWw+PGJvZHk+PGlucHV0
IHR5cGU9J3Bhc3N3b3JkJyAvPjwvYm9keT48L2h0bWw+IgotI2RlZmluZSBIVE1MX1BVU0hfQlVU
VE9OICI8aHRtbD48Ym9keT48aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nb2snIC8+VGhpcyBp
cyBhIHRlc3QuPC9ib2R5PjwvaHRtbD4iCi0jZGVmaW5lIEhUTUxfUkFESU9fQlVUVE9OICI8aHRt
bD48Ym9keT48aW5wdXQgdHlwZT0ncmFkaW8nIC8+VGhpcyBpcyBhIHRlc3QuPC9ib2R5PjwvaHRt
bD4iCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBBdGtPYmplY3QqIGRvY3VtZW50OwotICAgIEF0
a09iamVjdCogb2JqOwotICAgIEF0a1JvbGUgcm9sZTsKLSAgICBHdGtXaWRnZXQqIHdlYlZpZXc7
Ci0gICAgR3RrQWxsb2NhdGlvbiBhbGxvYzsKLSAgICBHTWFpbkxvb3AqIGxvb3A7Ci19IEF0a1Jv
bGVzRml4dHVyZTsKLQotc3RhdGljIGdib29sZWFuIGZpbmlzaF9sb2FkaW5nKEF0a1JvbGVzRml4
dHVyZSogZml4dHVyZSkKLXsKLSAgICBpZiAoZ19tYWluX2xvb3BfaXNfcnVubmluZyhmaXh0dXJl
LT5sb29wKSkKLSAgICAgICAgZ19tYWluX2xvb3BfcXVpdChmaXh0dXJlLT5sb29wKTsKLQotICAg
IC8vIFdpdGggdGhlIGNoYW5nZSB0byBzdXBwb3J0IFdLMiBhY2Nlc3NpYmlsaXR5LCB0aGUgcm9v
dCBvYmplY3QKLSAgICAvLyBoYXMgY2hhbmdlZCBhbmQgaXQncyBubyBsb25nZXIgdGhlIGRvY3Vt
ZW50IGZyYW1lLCBidXQgYSBzY3JvbGwKLSAgICAvLyBwYW5lIGNvbnRhaW5pbmcgdGhlIGRvY3Vt
ZW50IGZyYW1lIGFzIGl0cyBvbmx5IGNoaWxkLiBTZWUgdGhlCi0gICAgLy8gYnVnIDcyMzkwIGZv
ciBtb3JlIGRldGFpbHMgb24gdGhpcyBjaGFuZ2UuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTcyMzkwCi0gICAgQXRrT2JqZWN0KiByb290T2JqZWN0ID0g
Z3RrX3dpZGdldF9nZXRfYWNjZXNzaWJsZShmaXh0dXJlLT53ZWJWaWV3KTsKLSAgICBmaXh0dXJl
LT5kb2N1bWVudCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQocm9vdE9iamVjdCwg
MCk7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+ZG9jdW1lbnQpOwotCi0gICAgLy8gUmVtb3ZlIHRo
ZSByZWZlcmVuY2UgYWRkZWQgYnkgcmVmX2FjY2Vzc2libGVfY2hpbGQoKSBhbmQKLSAgICAvLyBy
ZXR1cm4sIHNpbmNlIHdlIGRvbid0IG5lZWQgdG8ga2VlcCB0aGF0IGV4dHJhIHJlZiBhdCBhbGwu
Ci0gICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+ZG9jdW1lbnQpOwotICAgIHJldHVybiBGQUxT
RTsKLX0KLQotc3RhdGljIHZvaWQgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAoQXRrUm9sZXNGaXh0
dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZml4dHVyZS0+bG9vcCA9
IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLSAgICBmaXh0dXJlLT5hbGxvYyA9IChHdGtB
bGxvY2F0aW9uKSB7IDAsIDAsIDgwMCwgNjAwIH07Ci0gICAgZml4dHVyZS0+d2ViVmlldyA9IHdl
YmtpdF93ZWJfdmlld19uZXcoKTsKLSAgICBnX29iamVjdF9yZWZfc2luayhmaXh0dXJlLT53ZWJW
aWV3KTsKLQotICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShmaXh0dXJlLT53ZWJWaWV3LCAm
Zml4dHVyZS0+YWxsb2MpOwotCi0gICAgaWYgKGRhdGEgIT0gTlVMTCkKLSAgICAgICAgd2Via2l0
X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklFVyAoZml4dHVyZS0+d2ViVmlldyks
IChjb25zdCBjaGFyKikgZGF0YSwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0KLSAgICBnX2lkbGVfYWRk
KChHU291cmNlRnVuYykgZmluaXNoX2xvYWRpbmcsIGZpeHR1cmUpOwotICAgIGdfbWFpbl9sb29w
X3J1bihmaXh0dXJlLT5sb29wKTsKLX0KLQotc3RhdGljIHZvaWQgYXRrX3JvbGVzX2ZpeHR1cmVf
dGVhcmRvd24oQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17
Ci0gICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+d2ViVmlldyk7Ci0gICAgZ19tYWluX2xvb3Bf
dW5yZWYoZml4dHVyZS0+bG9vcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdldF9jaGlsZF9hbmRfdGVz
dF9yb2xlKEF0a09iamVjdCogb2JqLCBnaW50IHBvcywgQXRrUm9sZSByb2xlKQotewotICAgIEF0
a09iamVjdCogY2hpbGQ7Ci0gICAgQXRrUm9sZSBjaGlsZF9yb2xlOwotCi0gICAgY2hpbGQgPSBh
dGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iaiwgcG9zKTsKLSAgICBnX2Fzc2VydChj
aGlsZCk7Ci0gICAgY2hpbGRfcm9sZSA9IGF0a19vYmplY3RfZ2V0X3JvbGUoY2hpbGQpOwotICAg
IGdfYXNzZXJ0KGNoaWxkX3JvbGUgPT0gcm9sZSk7Ci0KLSAgICBnX29iamVjdF91bnJlZihjaGls
ZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9kb2N1bWVudF9m
cmFtZShBdGtSb2xlc0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAg
ICBmaXh0dXJlLT5yb2xlID0gYXRrX29iamVjdF9nZXRfcm9sZShmaXh0dXJlLT5kb2N1bWVudCk7
Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+cm9sZSA9PSBBVEtfUk9MRV9ET0NVTUVOVF9XRUIpOwot
fQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfaGVhZGluZyhBdGtSb2xl
c0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBnZXRfY2hpbGRf
YW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5kb2N1bWVudCwgMCwgQVRLX1JPTEVfSEVBRElORyk7Ci0g
ICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+ZG9jdW1lbnQsIDEsIEFUS19ST0xF
X0hFQURJTkcpOwotICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPmRvY3VtZW50
LCAyLCBBVEtfUk9MRV9IRUFESU5HKTsKLSAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0
dXJlLT5kb2N1bWVudCwgMywgQVRLX1JPTEVfSEVBRElORyk7Ci0gICAgZ2V0X2NoaWxkX2FuZF90
ZXN0X3JvbGUoZml4dHVyZS0+ZG9jdW1lbnQsIDQsIEFUS19ST0xFX0hFQURJTkcpOwotICAgIGdl
dF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPmRvY3VtZW50LCA1LCBBVEtfUk9MRV9IRUFE
SU5HKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2ltYWdlKEF0
a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIC8vIFRo
aXMgaXMgYW4gZXh0cmFuZW91cyBvYmplY3Qgb2YgQVRLX1JPTEVfUEFORUwgd2hpY2ggd2Ugc2hv
dWxkIGdldCByaWQgb2YuCi0gICAgZml4dHVyZS0+b2JqID0gYXRrX29iamVjdF9yZWZfYWNjZXNz
aWJsZV9jaGlsZChmaXh0dXJlLT5kb2N1bWVudCwgMCk7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+
b2JqKTsKLQotICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPm9iaiwgMCwgQVRL
X1JPTEVfSU1BR0UpOwotCi0gICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+b2JqKTsKLX0KLQot
c3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xpbmsoQXRrUm9sZXNGaXh0dXJl
KiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgLy8gVGhpcyBpcyBhbiBleHRy
YW5lb3VzIG9iamVjdCBvZiBBVEtfUk9MRV9QQU5FTCB3aGljaCB3ZSBzaG91bGQgZ2V0IHJpZCBv
Zi4KLSAgICBmaXh0dXJlLT5vYmogPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZp
eHR1cmUtPmRvY3VtZW50LCAwKTsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT5vYmopOwotCi0gICAg
Z2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+b2JqLCAwLCBBVEtfUk9MRV9MSU5LKTsK
LQotICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9iaik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRl
c3Rfd2Via2l0X2F0a19nZXRfcm9sZV9saXN0X2FuZF9pdGVtKEF0a1JvbGVzRml4dHVyZSogZml4
dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIEF0a09iamVjdCogbGlzdE9iajsKLQot
ICAgIGxpc3RPYmogPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZpeHR1cmUtPmRv
Y3VtZW50LCAwKTsKLSAgICBnX2Fzc2VydChsaXN0T2JqKTsKLSAgICBmaXh0dXJlLT5yb2xlID0g
YXRrX29iamVjdF9nZXRfcm9sZShsaXN0T2JqKTsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT5yb2xl
ID09IEFUS19ST0xFX0xJU1QpOwotCi0gICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUobGlzdE9i
aiwgMCwgQVRLX1JPTEVfTElTVF9JVEVNKTsKLSAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShs
aXN0T2JqLCAxLCBBVEtfUk9MRV9MSVNUX0lURU0pOwotICAgIGdfb2JqZWN0X3VucmVmKGxpc3RP
YmopOwotCi0gICAgbGlzdE9iaiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoZml4
dHVyZS0+ZG9jdW1lbnQsIDEpOwotICAgIGdfYXNzZXJ0KGxpc3RPYmopOwotICAgIGZpeHR1cmUt
PnJvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKGxpc3RPYmopOwotICAgIGdfYXNzZXJ0KGZpeHR1
cmUtPnJvbGUgPT0gQVRLX1JPTEVfTElTVCk7Ci0KLSAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9s
ZShsaXN0T2JqLCAwLCBBVEtfUk9MRV9MSVNUX0lURU0pOwotICAgIGdldF9jaGlsZF9hbmRfdGVz
dF9yb2xlKGxpc3RPYmosIDEsIEFUS19ST0xFX0xJU1RfSVRFTSk7Ci0gICAgZ19vYmplY3RfdW5y
ZWYobGlzdE9iaik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9w
YXJhZ3JhcGgoQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17
Ci0gICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+ZG9jdW1lbnQsIDAsIEFUS19S
T0xFX1BBUkFHUkFQSCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9s
ZV9zZWN0aW9uKEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQot
ewotICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPmRvY3VtZW50LCAwLCBBVEtf
Uk9MRV9TRUNUSU9OKTsKLX0KLQotLy8gRG9lcyBub3QgeWV0IHRlc3QgdGFibGUgY2VsbHMgYmVj
YXVzZSBvZiBidWcgMzA4OTUuCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVf
dGFibGUoQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0g
ICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+ZG9jdW1lbnQsIDAsIEFUS19ST0xF
X1RBQkxFKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX3NlcGFy
YXRvcihBdGtSb2xlc0ZpeHR1cmUgKmZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAg
ICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5kb2N1bWVudCwgMCwgQVRLX1JPTEVf
U0VQQVJBVE9SKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2Nv
bWJvYm94KEF0a1JvbGVzRml4dHVyZSAqZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewot
ICAgIEF0a09iamVjdCogY29tYm9ib3hNZW51OwotCi0gICAgLy8gVGhpcyBpcyBhbiBleHRyYW5l
b3VzIG9iamVjdCBvZiBBVEtfUk9MRV9QQU5FTCB3aGljaCB3ZSBzaG91bGQgZ2V0IHJpZCBvZi4K
LSAgICBmaXh0dXJlLT5vYmogPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZpeHR1
cmUtPmRvY3VtZW50LCAwKTsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT5vYmopOwotCi0gICAgZml4
dHVyZS0+b2JqID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmaXh0dXJlLT5vYmos
IDApOwotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPm9iaik7Ci0gICAgZml4dHVyZS0+cm9sZSA9IGF0
a19vYmplY3RfZ2V0X3JvbGUoZml4dHVyZS0+b2JqKTsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT5y
b2xlID09IEFUS19ST0xFX0NPTUJPX0JPWCk7Ci0KLSAgICBjb21ib2JveE1lbnUgPSBhdGtfb2Jq
ZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZpeHR1cmUtPm9iaiwgMCk7Ci0gICAgZ19hc3NlcnQo
Y29tYm9ib3hNZW51KTsKLSAgICBmaXh0dXJlLT5yb2xlID0gYXRrX29iamVjdF9nZXRfcm9sZShj
b21ib2JveE1lbnUpOwotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPnJvbGUgPT0gQVRLX1JPTEVfTUVO
VSk7Ci0KLSAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShjb21ib2JveE1lbnUsIDAsIEFUS19S
T0xFX01FTlVfSVRFTSk7Ci0gICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoY29tYm9ib3hNZW51
LCAxLCBBVEtfUk9MRV9NRU5VX0lURU0pOwotICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGNv
bWJvYm94TWVudSwgMiwgQVRLX1JPTEVfTUVOVV9JVEVNKTsKLQotICAgIGdfb2JqZWN0X3VucmVm
KGZpeHR1cmUtPm9iaik7Ci0gICAgZ19vYmplY3RfdW5yZWYoY29tYm9ib3hNZW51KTsKLX0KLQot
LyogRm9ybSByb2xlcyAqLwotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2Zv
cm0oQXRrUm9sZXNGaXh0dXJlICpmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAg
Z2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+ZG9jdW1lbnQsIDAsIEFUS19ST0xFX0ZP
Uk0pOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfY2hlY2tfYm94
KEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIC8v
IFRoaXMgaXMgYW4gZXh0cmFuZW91cyBvYmplY3Qgb2YgQVRLX1JPTEVfUEFORUwgd2hpY2ggd2Ug
c2hvdWxkIGdldCByaWQgb2YuCi0gICAgZml4dHVyZS0+b2JqID0gYXRrX29iamVjdF9yZWZfYWNj
ZXNzaWJsZV9jaGlsZChmaXh0dXJlLT5kb2N1bWVudCwgMCk7Ci0gICAgZ19hc3NlcnQoZml4dHVy
ZS0+b2JqKTsKLQotICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPm9iaiwgMCwg
QVRLX1JPTEVfQ0hFQ0tfQk9YKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9iaik7
Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9lbnRyeShBdGtSb2xl
c0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICAvLyBUaGlzIGlz
IGFuIGV4dHJhbmVvdXMgb2JqZWN0IG9mIEFUS19ST0xFX1BBTkVMIHdoaWNoIHdlIHNob3VsZCBn
ZXQgcmlkIG9mLgotICAgIGZpeHR1cmUtPm9iaiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVf
Y2hpbGQoZml4dHVyZS0+ZG9jdW1lbnQsIDApOwotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPm9iaik7
Ci0KLSAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5vYmosIDEsIEFUS19ST0xF
X0VOVFJZKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9iaik7Ci19Ci0KLXN0YXRp
YyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9sYWJlbChBdGtSb2xlc0ZpeHR1cmUqIGZp
eHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICAvLyBUaGlzIGlzIGFuIGV4dHJhbmVv
dXMgb2JqZWN0IG9mIEFUS19ST0xFX1BBTkVMIHdoaWNoIHdlIHNob3VsZCBnZXQgcmlkIG9mLgot
ICAgIGZpeHR1cmUtPm9iaiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoZml4dHVy
ZS0+ZG9jdW1lbnQsIDApOwotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPm9iaik7Ci0KLSAgICBnZXRf
Y2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5vYmosIDAsIEFUS19ST0xFX0xBQkVMKTsKLQot
ICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9iaik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rf
d2Via2l0X2F0a19nZXRfcm9sZV9saXN0Ym94KEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2Nv
bnN0cG9pbnRlciBkYXRhKQotewotICAgIEF0a09iamVjdCogbGlzdGJveE9iajsKLSAgICAvLyBU
aGlzIGlzIGFuIGV4dHJhbmVvdXMgb2JqZWN0IG9mIEFUS19ST0xFX1BBTkVMIHdoaWNoIHdlIHNo
b3VsZCBnZXQgcmlkIG9mLgotICAgIGZpeHR1cmUtPm9iaiA9IGF0a19vYmplY3RfcmVmX2FjY2Vz
c2libGVfY2hpbGQoZml4dHVyZS0+ZG9jdW1lbnQsIDApOwotICAgIGdfYXNzZXJ0KGZpeHR1cmUt
Pm9iaik7Ci0KLSAgICBsaXN0Ym94T2JqID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGls
ZChmaXh0dXJlLT5vYmosIDApOwotICAgIGdfYXNzZXJ0KGxpc3Rib3hPYmopOwotICAgIGZpeHR1
cmUtPnJvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKGxpc3Rib3hPYmopOwotICAgIGdfYXNzZXJ0
KGZpeHR1cmUtPnJvbGUgPT0gQVRLX1JPTEVfTElTVCk7Ci0KLSAgICBnZXRfY2hpbGRfYW5kX3Rl
c3Rfcm9sZShsaXN0Ym94T2JqLCAwLCBBVEtfUk9MRV9MSVNUX0lURU0pOwotICAgIGdldF9jaGls
ZF9hbmRfdGVzdF9yb2xlKGxpc3Rib3hPYmosIDEsIEFUS19ST0xFX0xJU1RfSVRFTSk7Ci0gICAg
Z2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUobGlzdGJveE9iaiwgMiwgQVRLX1JPTEVfTElTVF9JVEVN
KTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9iaik7Ci0gICAgZ19vYmplY3RfdW5y
ZWYobGlzdGJveE9iaik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9s
ZV9wYXNzd29yZF90ZXh0KEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBk
YXRhKQotewotICAgIC8vIFRoaXMgaXMgYW4gZXh0cmFuZW91cyBvYmplY3Qgb2YgQVRLX1JPTEVf
UEFORUwgd2hpY2ggd2Ugc2hvdWxkIGdldCByaWQgb2YuCi0gICAgZml4dHVyZS0+b2JqID0gYXRr
X29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmaXh0dXJlLT5kb2N1bWVudCwgMCk7Ci0gICAg
Z19hc3NlcnQoZml4dHVyZS0+b2JqKTsKLQotICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZp
eHR1cmUtPm9iaiwgMCwgQVRLX1JPTEVfUEFTU1dPUkRfVEVYVCk7Ci0KLSAgICBnX29iamVjdF91
bnJlZihmaXh0dXJlLT5vYmopOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0
X3JvbGVfcHVzaF9idXR0b24oQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVy
IGRhdGEpCi17Ci0gICAgLy8gVGhpcyBpcyBhbiBleHRyYW5lb3VzIG9iamVjdCBvZiBBVEtfUk9M
RV9QQU5FTCB3aGljaCB3ZSBzaG91bGQgZ2V0IHJpZCBvZi4KLSAgICBmaXh0dXJlLT5vYmogPSBh
dGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZpeHR1cmUtPmRvY3VtZW50LCAwKTsKLSAg
ICBnX2Fzc2VydChmaXh0dXJlLT5vYmopOwotCi0gICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUo
Zml4dHVyZS0+b2JqLCAwLCBBVEtfUk9MRV9QVVNIX0JVVFRPTik7Ci0KLSAgICBnX29iamVjdF91
bnJlZihmaXh0dXJlLT5vYmopOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0
X3JvbGVfcmFkaW9fYnV0dG9uKEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRl
ciBkYXRhKQotewotICAgIC8vIFRoaXMgaXMgYW4gZXh0cmFuZW91cyBvYmplY3Qgb2YgQVRLX1JP
TEVfUEFORUwgd2hpY2ggd2Ugc2hvdWxkIGdldCByaWQgb2YuCi0gICAgZml4dHVyZS0+b2JqID0g
YXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmaXh0dXJlLT5kb2N1bWVudCwgMCk7Ci0g
ICAgZ19hc3NlcnQoZml4dHVyZS0+b2JqKTsKLQotICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xl
KGZpeHR1cmUtPm9iaiwgMCwgQVRLX1JPTEVfUkFESU9fQlVUVE9OKTsKLQotICAgIGdfb2JqZWN0
X3VucmVmKGZpeHR1cmUtPm9iaik7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJn
dikKLXsKLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAgICBnX3Rl
c3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwotCi0gICAgZ190ZXN0X2Fk
ZCgiL3dlYmtpdC9hdGsvdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2RvY3VtZW50X2ZyYW1lIiwK
LSAgICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVyZSwgSFRNTF9ET0NVTUVOVF9GUkFNRSwKLSAg
ICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVz
dF93ZWJraXRfYXRrX2dldF9yb2xlX2RvY3VtZW50X2ZyYW1lLAotICAgICAgICAgICAgICAgYXRr
X3JvbGVzX2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9hdGsv
dGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2hlYWRpbmciLAotICAgICAgICAgICAgICAgQXRrUm9s
ZXNGaXh0dXJlLCBIVE1MX0hFQURJTkcsCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVy
ZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9oZWFkaW5n
LAotICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAgZ190
ZXN0X2FkZCgiL3dlYmtpdC9hdGsvdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2ltYWdlIiwKLSAg
ICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVyZSwgSFRNTF9JTUFHRSwKLSAgICAgICAgICAgICAg
IGF0a19yb2xlc19maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRr
X2dldF9yb2xlX2ltYWdlLAotICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfdGVhcmRv
d24pOwotCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9hdGsvdGVzdF93ZWJraXRfYXRrX2dldF9y
b2xlX2xpbmsiLAotICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX0xJTktfVEVY
VCwKLSAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAotICAgICAgICAgICAg
ICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xpbmssCi0gICAgICAgICAgICAgICBhdGtfcm9s
ZXNfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0
X3dlYmtpdF9hdGtfZ2V0X3JvbGVfbGlzdF9hbmRfaXRlbSIsCi0gICAgICAgICAgICAgICBBdGtS
b2xlc0ZpeHR1cmUsIEhUTUxfTElTVCwKLSAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJl
X3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xpc3RfYW5k
X2l0ZW0sCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAg
ICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfcGFyYWdy
YXBoIiwKLSAgICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVyZSwgSFRNTF9QQVJBR1JBUEgsCi0g
ICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRl
c3Rfd2Via2l0X2F0a19nZXRfcm9sZV9wYXJhZ3JhcGgsCi0gICAgICAgICAgICAgICBhdGtfcm9s
ZXNfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0
X3dlYmtpdF9hdGtfZ2V0X3JvbGVfc2VjdGlvbiIsCi0gICAgICAgICAgICAgICBBdGtSb2xlc0Zp
eHR1cmUsIEhUTUxfU0VDVElPTiwKLSAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3Nl
dHVwLAotICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX3NlY3Rpb24sCi0g
ICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAgICBnX3Rlc3Rf
YWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfdGFibGUiLAotICAgICAg
ICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX1RBQkxFLAotICAgICAgICAgICAgICAgYXRr
X3JvbGVzX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF9hdGtfZ2V0
X3JvbGVfdGFibGUsCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7
Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVf
c2VwYXJhdG9yIiwKLSAgICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVyZSwgSFRNTF9TRVBBUkFU
T1IsCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAg
ICAgIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9zZXBhcmF0b3IsCi0gICAgICAgICAgICAgICBh
dGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0
ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfY29tYm9ib3giLAotICAgICAgICAgICAgICAgQXRr
Um9sZXNGaXh0dXJlLCBIVE1MX0NPTUJPQk9YLAotICAgICAgICAgICAgICAgYXRrX3JvbGVzX2Zp
eHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfY29t
Ym9ib3gsCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAg
ICAvKiBGb3JtIHJvbGVzICovCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9hdGsvdGVzdF93ZWJr
aXRfYXRrX2dldF9yb2xlX2Zvcm0iLAotICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBI
VE1MX0ZPUk0sCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV9zZXR1cCwKLSAgICAg
ICAgICAgICAgIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9mb3JtLAotICAgICAgICAgICAgICAg
YXRrX3JvbGVzX2ZpeHR1cmVfdGVhcmRvd24pOwotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvYXRr
L3Rlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9jaGVja19ib3giLAotICAgICAgICAgICAgICAgQXRr
Um9sZXNGaXh0dXJlLCBIVE1MX0NIRUNLX0JPWCwKLSAgICAgICAgICAgICAgIGF0a19yb2xlc19m
aXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2No
ZWNrX2JveCwKLSAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3RlYXJkb3duKTsKLQot
ICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvYXRrL3Rlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9lbnRy
eSIsCi0gICAgICAgICAgICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhUTUxfTEFCRUxFRF9FTlRSWSwK
LSAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAg
dGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2VudHJ5LAotICAgICAgICAgICAgICAgYXRrX3JvbGVz
X2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9hdGsvdGVzdF93
ZWJraXRfYXRrX2dldF9yb2xlX2xhYmVsIiwKLSAgICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVy
ZSwgSFRNTF9MQUJFTEVEX0VOVFJZLAotICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVf
c2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfbGFiZWwsCi0g
ICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAgICBnX3Rlc3Rf
YWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfbGlzdGJveCIsCi0gICAg
ICAgICAgICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhUTUxfTElTVEJPWCwKLSAgICAgICAgICAgICAg
IGF0a19yb2xlc19maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRr
X2dldF9yb2xlX2xpc3Rib3gsCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFy
ZG93bik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0
X3JvbGVfcGFzc3dvcmRfdGV4dCIsCi0gICAgICAgICAgICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhU
TUxfUEFTU1dPUkRfVEVYVCwKLSAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVw
LAotICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX3Bhc3N3b3JkX3RleHQs
Ci0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAgICBnX3Rl
c3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfcHVzaF9idXR0b24i
LAotICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX1BVU0hfQlVUVE9OLAotICAg
ICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0
X3dlYmtpdF9hdGtfZ2V0X3JvbGVfcHVzaF9idXR0b24sCi0gICAgICAgICAgICAgICBhdGtfcm9s
ZXNfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0
X3dlYmtpdF9hdGtfZ2V0X3JvbGVfcmFkaW9fYnV0dG9uIiwKLSAgICAgICAgICAgICAgIEF0a1Jv
bGVzRml4dHVyZSwgSFRNTF9SQURJT19CVVRUT04sCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNf
Zml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9y
YWRpb19idXR0b24sCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7
Ci0KLSAgICByZXR1cm4gZ190ZXN0X3J1bigpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9ndGsvdGVzdHMvdGVzdGNvbnRleHRtZW51LmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90
ZXN0Y29udGV4dG1lbnUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTRhYWE1Ny4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0Y29udGV4dG1lbnUuYwor
KysgL2Rldi9udWxsCkBAIC0xLDMxNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEy
IElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIsMSBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8d2Via2l0L3dlYmtp
dC5oPgotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgY2hhciAqZGF0YTsKLSAgICBndWludCBmbGFn
OwotfSBUZXN0SW5mbzsKLQotc3RhdGljIEdNYWluTG9vcCAqbG9vcDsKLQotdHlwZWRlZiBzdHJ1
Y3QgewotICAgIFdlYktpdFdlYlZpZXcgKndlYlZpZXc7Ci0gICAgVGVzdEluZm8gKmluZm87Ci19
IENvbnRleHRNZW51Rml4dHVyZTsKLQotc3RhdGljIFRlc3RJbmZvICp0ZXN0SW5mb05ldyhjb25z
dCBjaGFyICpkYXRhLCBndWludCBmbGFnKQotewotICAgIFRlc3RJbmZvICppbmZvID0gZ19zbGlj
ZV9uZXcoVGVzdEluZm8pOwotICAgIGluZm8tPmRhdGEgPSBnX3N0cmR1cChkYXRhKTsKLSAgICBp
bmZvLT5mbGFnID0gZmxhZzsKLQotICAgIHJldHVybiBpbmZvOwotfQotCi1zdGF0aWMgdm9pZCB0
ZXN0SW5mb0Rlc3Ryb3koVGVzdEluZm8gKmluZm8pCi17Ci0gICAgZ19mcmVlKGluZm8tPmRhdGEp
OwotICAgIGdfc2xpY2VfZnJlZShUZXN0SW5mbywgaW5mbyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNv
bnRleHRNZW51Rml4dHVyZVNldHVwKENvbnRleHRNZW51Rml4dHVyZSAqZml4dHVyZSwgZ2NvbnN0
cG9pbnRlciBkYXRhKQotewotICAgIGZpeHR1cmUtPndlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVco
d2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEws
IFRSVUUpOwotICAgIGZpeHR1cmUtPmluZm8gPSAoVGVzdEluZm8gKilkYXRhOwotfQotCi1zdGF0
aWMgdm9pZCBjb250ZXh0TWVudUZpeHR1cmVUZWFyZG93bihDb250ZXh0TWVudUZpeHR1cmUgKmZp
eHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBnX29iamVjdF91bnJlZihmaXh0dXJl
LT53ZWJWaWV3KTsKLSAgICBnX21haW5fbG9vcF91bnJlZihsb29wKTsKLSAgICB0ZXN0SW5mb0Rl
c3Ryb3koZml4dHVyZS0+aW5mbyk7Ci19Ci0KLXN0YXRpYyBHTGlzdCAqY2hlY2tBY3Rpb24oR0xp
c3QgKml0ZXIsIFdlYktpdENvbnRleHRNZW51QWN0aW9uIGFjdGlvbikKLXsKLSAgICBHdGtNZW51
SXRlbSAqaXRlbSA9IChHdGtNZW51SXRlbSAqKWl0ZXItPmRhdGE7Ci0KLSAgICBnX2Fzc2VydChH
VEtfSVNfTUVOVV9JVEVNKGl0ZW0pKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfY29udGV4dF9tZW51
X2l0ZW1fZ2V0X2FjdGlvbihpdGVtKSA9PSBhY3Rpb24pOwotCi0gICAgcmV0dXJuIGl0ZXItPm5l
eHQ7Ci19Ci0KLXN0YXRpYyBHTGlzdCAqY2hlY2tBY3Rpb25XaXRoU3VibWVudShHTGlzdCAqaXRl
ciwgV2ViS2l0Q29udGV4dE1lbnVBY3Rpb24gYWN0aW9uKQotewotICAgIEd0a01lbnVJdGVtICpp
dGVtID0gKEd0a01lbnVJdGVtICopaXRlci0+ZGF0YTsKLQotICAgIGdfYXNzZXJ0KEdUS19JU19N
RU5VX0lURU0oaXRlbSkpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9n
ZXRfYWN0aW9uKGl0ZW0pID09IGFjdGlvbik7Ci0gICAgZ19hc3NlcnQoR1RLX0lTX01FTlUoZ3Rr
X21lbnVfaXRlbV9nZXRfc3VibWVudShpdGVtKSkpOwotCi0gICAgcmV0dXJuIGl0ZXItPm5leHQ7
Ci19Ci0KLXN0YXRpYyBHTGlzdCAqY2hlY2tTZXBhcmF0b3IoR0xpc3QgKml0ZXIpCi17Ci0gICAg
R3RrTWVudUl0ZW0gKml0ZW0gPSAoR3RrTWVudUl0ZW0gKilpdGVyLT5kYXRhOwotCi0gICAgZ19h
c3NlcnQoR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkpOwotCi0gICAgcmV0dXJuIGl0
ZXItPm5leHQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBjb250ZXh0TWVudUNhbGxiYWNrKFdlYktp
dFdlYlZpZXcgKndlYlZpZXcsIEd0a1dpZGdldCAqZGVmYXVsdE1lbnUsIFdlYktpdEhpdFRlc3RS
ZXN1bHQgKmhpdFRlc3RSZXN1bHQsIGdib29sZWFuIGtleWJvYXJkTW9kZSwgZ3BvaW50ZXIgdXNl
ckRhdGEpCi17Ci0gICAgVGVzdEluZm8gKmluZm8gPSAoVGVzdEluZm8gKil1c2VyRGF0YTsKLSAg
ICBndWludCBjb250ZXh0OwotICAgIEdMaXN0ICppdGVtczsKLSAgICBHTGlzdCAqaXRlcjsKLQot
ICAgIC8qIENoZWNrIHNpZ25hbCBwYXJhbWV0ZXJzICovCi0gICAgZ19hc3NlcnQoV0VCS0lUX0lT
X1dFQl9WSUVXKHdlYlZpZXcpKTsKLSAgICBnX2Fzc2VydChHVEtfSVNfTUVOVShkZWZhdWx0TWVu
dSkpOwotICAgIGdfYXNzZXJ0KFdFQktJVF9JU19ISVRfVEVTVF9SRVNVTFQoaGl0VGVzdFJlc3Vs
dCkpOwotICAgIGdfYXNzZXJ0KCFrZXlib2FyZE1vZGUpOwotCi0gICAgZ19vYmplY3RfZ2V0KGhp
dFRlc3RSZXN1bHQsICJjb250ZXh0IiwgJmNvbnRleHQsIE5VTEwpOwotICAgIGdfYXNzZXJ0KGNv
bnRleHQgJiBpbmZvLT5mbGFnKTsKLQotICAgIGl0ZW1zID0gZ3RrX2NvbnRhaW5lcl9nZXRfY2hp
bGRyZW4oR1RLX0NPTlRBSU5FUihkZWZhdWx0TWVudSkpOwotICAgIHN3aXRjaCAoaW5mby0+Zmxh
ZykgewotICAgIGNhc2UgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0RPQ1VNRU5UOgot
ICAgICAgICBpdGVyID0gaXRlbXM7Ci0gICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9HT19CQUNLKTsKLSAgICAgICAgaXRlciA9IGNoZWNr
QWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0dPX0ZPUldBUkQpOwotICAg
ICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05f
U1RPUCk7Ci0gICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9N
RU5VX0FDVElPTl9SRUxPQUQpOwotICAgICAgICBnX2Fzc2VydCghaXRlcik7Ci0KLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfSU1BR0U6Ci0g
ICAgICAgIGl0ZXIgPSBpdGVtczsKLSAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdF
QktJVF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5fSU1BR0VfSU5fTkVXX1dJTkRPVyk7Ci0gICAg
ICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9E
T1dOTE9BRF9JTUFHRV9UT19ESVNLKTsKLSAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIs
IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFlfSU1BR0VfVE9fQ0xJUEJPQVJEKTsKLSAg
ICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9O
X0NPUFlfSU1BR0VfVVJMX1RPX0NMSVBCT0FSRCk7Ci0gICAgICAgIGdfYXNzZXJ0KCFpdGVyKTsK
LQotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVY
VF9FRElUQUJMRToKLSAgICAgICAgaXRlciA9IGl0ZW1zOwotICAgICAgICBpdGVyID0gY2hlY2tB
Y3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ1VUKTsKLSAgICAgICAgaXRl
ciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFkpOwot
ICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T05fUEFTVEUpOwotICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fREVMRVRFKTsKLSAgICAgICAgaXRlciA9IGNoZWNrU2VwYXJhdG9yKGl0
ZXIpOwotICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVO
VV9BQ1RJT05fU0VMRUNUX0FMTCk7Ci0gICAgICAgIGl0ZXIgPSBjaGVja1NlcGFyYXRvcihpdGVy
KTsKLSAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uV2l0aFN1Ym1lbnUoaXRlciwgV0VCS0lUX0NP
TlRFWFRfTUVOVV9BQ1RJT05fSU5QVVRfTUVUSE9EUyk7Ci0gICAgICAgIGl0ZXIgPSBjaGVja0Fj
dGlvbldpdGhTdWJtZW51KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1VOSUNPREUp
OwotICAgICAgICBnX2Fzc2VydCghaXRlcik7Ci0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBX
RUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfTElOSzoKLSAgICAgICAgaXRlciA9IGl0ZW1z
OwotICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9B
Q1RJT05fT1BFTl9MSU5LKTsKLSAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJ
VF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5fTElOS19JTl9ORVdfV0lORE9XKTsKLSAgICAgICAg
aXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0RPV05M
T0FEX0xJTktfVE9fRElTSyk7Ci0gICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX0xJTktfVE9fQ0xJUEJPQVJEKTsKLSAgICAgICAg
Z19hc3NlcnQoIWl0ZXIpOwotCi0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0gICAgfQotCi0gICAgZ19saXN0X2ZyZWUoaXRlbXMp
OwotICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci0KLSAgICByZXR1cm4gVFJVRTsKLX0KLQot
c3RhdGljIHZvaWQgcHVzaEV2ZW50KFdlYktpdFdlYlZpZXcgKndlYlZpZXcpCi17Ci0gICAgR2Rr
RXZlbnQgKmV2ZW50ID0gZ2RrX2V2ZW50X25ldyhHREtfQlVUVE9OX1BSRVNTKTsKLSNpZiBHVEtf
Q0hFQ0tfVkVSU0lPTigzLCAwLCAwKQotICAgIEdka0RldmljZU1hbmFnZXIgKmRldmljZU1hbmFn
ZXI7Ci0jZW5kaWYKLQotICAgIGV2ZW50LT5hbnkud2luZG93ID0gZ19vYmplY3RfcmVmKGd0a193
aWRnZXRfZ2V0X3dpbmRvdyhHVEtfV0lER0VUKHdlYlZpZXcpKSk7Ci0gICAgZXZlbnQtPmFueS5z
ZW5kX2V2ZW50ID0gRkFMU0U7Ci0gICAgZXZlbnQtPmJ1dHRvbi50aW1lID0gR0RLX0NVUlJFTlRf
VElNRTsKLSAgICBldmVudC0+YnV0dG9uLmJ1dHRvbiA9IDM7Ci0gICAgZXZlbnQtPmJ1dHRvbi54
ID0gZXZlbnQtPmJ1dHRvbi55ID0gNTsKLSAgICBldmVudC0+YnV0dG9uLnhfcm9vdCA9IGV2ZW50
LT5idXR0b24ueDsKLSAgICBldmVudC0+YnV0dG9uLnlfcm9vdCA9IGV2ZW50LT5idXR0b24ueTsK
LSNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAwLCAwKQotICAgIGRldmljZU1hbmFnZXIgPSBnZGtf
ZGlzcGxheV9nZXRfZGV2aWNlX21hbmFnZXIoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSk7Ci0g
ICAgZXZlbnQtPmJ1dHRvbi5kZXZpY2UgPSBnZGtfZGV2aWNlX21hbmFnZXJfZ2V0X2NsaWVudF9w
b2ludGVyKGRldmljZU1hbmFnZXIpOwotI2VuZGlmCi0KLSAgICBnZGtfZXZlbnRfcHV0KGV2ZW50
KTsKLSAgICBnZGtfZXZlbnRfZnJlZShldmVudCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGxvYWRTdGF0
dXNDYWxsYmFjayhXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3LCBHUGFyYW1TcGVjICpzcGVjLCBncG9p
bnRlciBkYXRhKQotewotICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92
aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJWaWV3KTsKLSAgICBUZXN0SW5mbyAqaW5mbyA9IChUZXN0
SW5mbyAqKWRhdGE7Ci0KLSAgICBnX2Fzc2VydChzdGF0dXMgIT0gV0VCS0lUX0xPQURfRkFJTEVE
KTsKLQotICAgIGlmIChzdGF0dXMgIT0gV0VCS0lUX0xPQURfRklOSVNIRUQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgImNvbnRleHQtbWVudSIsIEdf
Q0FMTEJBQ0soY29udGV4dE1lbnVDYWxsYmFjayksIGluZm8pOwotICAgIHB1c2hFdmVudCh3ZWJW
aWV3KTsKLX0KLQotc3RhdGljIGdib29sZWFuIG1hcEV2ZW50Q2FsbGJhY2soR3RrV2lkZ2V0ICp3
aWRnZXQsIEdka0V2ZW50ICpldmVudCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBndGtfd2lkZ2V0
X2dyYWJfZm9jdXMod2lkZ2V0KTsKLSAgICBDb250ZXh0TWVudUZpeHR1cmUgKmZpeHR1cmUgPSAo
Q29udGV4dE1lbnVGaXh0dXJlICopZGF0YTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJp
bmcoZml4dHVyZS0+d2ViVmlldywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4
dHVyZS0+aW5mby0+ZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRleHQv
aHRtbCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1dGYtOCIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlOi8vIik7Ci0gICAgZ19zaWduYWxfY29ubmVj
dChmaXh0dXJlLT53ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0sobG9h
ZFN0YXR1c0NhbGxiYWNrKSwgZml4dHVyZS0+aW5mbyk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQot
Ci1zdGF0aWMgdm9pZCB0ZXN0Q29udGV4dE1lbnUoQ29udGV4dE1lbnVGaXh0dXJlICpmaXh0dXJl
LCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0g
eyAwLCAwLCA1MCwgNTAgfTsKLSAgICBHdGtXaWRnZXQgKndpbmRvdyA9IGd0a193aW5kb3dfbmV3
KEdUS19XSU5ET1dfUE9QVVApOwotCi0gICAgZ3RrX3dpbmRvd19yZXNpemUoR1RLX1dJTkRPVyh3
aW5kb3cpLCA1MCwgNTApOwotICAgIGd0a193aW5kb3dfbW92ZShHVEtfV0lORE9XKHdpbmRvdyks
IDAsIDApOwotICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKGZpeHR1cmUt
PndlYlZpZXcpLCAmYWxsb2NhdGlvbik7Ci0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRB
SU5FUih3aW5kb3cpLCBHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpKTsKLSAgICBnX3NpZ25h
bF9jb25uZWN0KHdpbmRvdywgIm1hcC1ldmVudCIsIEdfQ0FMTEJBQ0sobWFwRXZlbnRDYWxsYmFj
ayksIGZpeHR1cmUpOwotICAgIGd0a193aWRnZXRfc2hvd19hbGwod2luZG93KTsKLQotICAgIGdf
bWFpbl9sb29wX3J1bihsb29wKTsKLX0KLQotc3RhdGljIGdib29sZWFuIGNvbnRleHRNZW51Q3Vz
dG9tSXRlbUNhbGxiYWNrKFdlYktpdFdlYlZpZXcgKndlYlZpZXcsIEd0a1dpZGdldCAqZGVmYXVs
dE1lbnUsIFdlYktpdEhpdFRlc3RSZXN1bHQgKmhpdFRlc3RSZXN1bHQsIGdib29sZWFuIGtleWJv
YXJkTW9kZSwgZ3BvaW50ZXIgdXNlckRhdGEpCi17Ci0gICAgVGVzdEluZm8gKmluZm8gPSAoVGVz
dEluZm8gKil1c2VyRGF0YTsKLSAgICBndWludCBjb250ZXh0OwotICAgIEdMaXN0ICppdGVtczsK
LSAgICBHTGlzdCAqaXRlcjsKLSAgICBHdGtXaWRnZXQgKm1lbnVJdGVtOwotICAgIEd0a0FjdGlv
biAqYWN0aW9uOwotCi0gICAgLyogQ2hlY2sgc2lnbmFsIHBhcmFtZXRlcnMgKi8KLSAgICBnX2Fz
c2VydChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldykpOwotICAgIGdfYXNzZXJ0KEdUS19JU19N
RU5VKGRlZmF1bHRNZW51KSk7Ci0gICAgZ19hc3NlcnQoV0VCS0lUX0lTX0hJVF9URVNUX1JFU1VM
VChoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIWtleWJvYXJkTW9kZSk7Ci0KLSAgICBn
X29iamVjdF9nZXQoaGl0VGVzdFJlc3VsdCwgImNvbnRleHQiLCAmY29udGV4dCwgTlVMTCk7Ci0g
ICAgZ19hc3NlcnQoY29udGV4dCAmIGluZm8tPmZsYWcpOwotCi0gICAgYWN0aW9uID0gZ3RrX2Fj
dGlvbl9uZXcoIlRlc3RBY3Rpb24iLCAiQ3VzdG9tIEFjdGlvbiIsICJDdXN0b20gQWN0aW9uIFRv
b2x0aXAiLCBOVUxMKTsKLSAgICBtZW51SXRlbSA9IGd0a19hY3Rpb25fY3JlYXRlX21lbnVfaXRl
bShhY3Rpb24pOwotICAgIGdfb2JqZWN0X3VucmVmKGFjdGlvbik7Ci0KLSAgICBndGtfbWVudV9z
aGVsbF9hcHBlbmQoR1RLX01FTlVfU0hFTEwoZGVmYXVsdE1lbnUpLCBtZW51SXRlbSk7Ci0gICAg
Z3RrX3dpZGdldF9zaG93KG1lbnVJdGVtKTsKLQotICAgIGl0ZW1zID0gZ3RrX2NvbnRhaW5lcl9n
ZXRfY2hpbGRyZW4oR1RLX0NPTlRBSU5FUihkZWZhdWx0TWVudSkpOwotICAgIGl0ZXIgPSBpdGVt
czsKLSAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T05fR09fQkFDSyk7Ci0gICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhU
X01FTlVfQUNUSU9OX0dPX0ZPUldBUkQpOwotICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9TVE9QKTsKLSAgICBpdGVyID0gY2hlY2tBY3Rpb24o
aXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fUkVMT0FEKTsKLSAgICBpdGVyID0gY2hl
Y2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fTk9fQUNUSU9OKTsKLSAg
ICBnX2Fzc2VydCghaXRlcik7Ci0KLSAgICBnX2xpc3RfZnJlZShpdGVtcyk7Ci0gICAgZ19tYWlu
X2xvb3BfcXVpdChsb29wKTsKLQotICAgIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZCB0
ZXN0Q29udGV4dE1lbnVDdXN0b21JdGVtKENvbnRleHRNZW51Rml4dHVyZSAqZml4dHVyZSwgZ2Nv
bnN0cG9pbnRlciBkYXRhKQotewotICAgIEd0a1dpZGdldCAqd2luZG93ID0gZ3RrX3dpbmRvd19u
ZXcoR1RLX1dJTkRPV19QT1BVUCk7Ci0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5F
Uih3aW5kb3cpLCBHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpKTsKLSAgICBndGtfd2lkZ2V0
X3Nob3dfYWxsKHdpbmRvdyk7Ci0gICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKEdUS19XSURHRVQo
Zml4dHVyZS0+d2ViVmlldykpOwotCi0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKGZp
eHR1cmUtPndlYlZpZXcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeHR1cmUt
PmluZm8tPmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXh0L2h0bWwi
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXRmLTgiLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiZmlsZTovLyIpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4
dHVyZS0+d2ViVmlldywgImNvbnRleHQtbWVudSIsIEdfQ0FMTEJBQ0soY29udGV4dE1lbnVDdXN0
b21JdGVtQ2FsbGJhY2spLCBmaXh0dXJlLT5pbmZvKTsKLSAgICBwdXNoRXZlbnQoZml4dHVyZS0+
d2ViVmlldyk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLXsKLSAgICBn
dGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAgICBnX3Rlc3RfYnVnX2Jhc2Uo
Imh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwotCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC90
ZXN0Y29udGV4dG1lbnUvZG9jdW1lbnQiLCBDb250ZXh0TWVudUZpeHR1cmUsCi0gICAgICAgICAg
ICAgICB0ZXN0SW5mb05ldygiPGh0bWw+PGJvZHk+PGgxPldlYktpdEdUSyshPC9oMT48L2JvZHk+
PC9odG1sPiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfSElUX1RFU1RfUkVT
VUxUX0NPTlRFWFRfRE9DVU1FTlQpLAotICAgICAgICAgICAgICAgY29udGV4dE1lbnVGaXh0dXJl
U2V0dXAsIHRlc3RDb250ZXh0TWVudSwgY29udGV4dE1lbnVGaXh0dXJlVGVhcmRvd24pOwotICAg
IC8qIFdlIGhhcmRjb2RlIGFsbCBlbGVtZW50cyB0byBiZSBhdCAwLDAgc28gdGhhdCB3ZSBrbm93
IHdoZXJlIHRvIGdlbmVyYXRlIHRoZSBidXR0b24gZXZlbnRzICovCi0gICAgZ190ZXN0X2FkZCgi
L3dlYmtpdC90ZXN0Y29udGV4dG1lbnUvaW1hZ2UiLCBDb250ZXh0TWVudUZpeHR1cmUsCi0gICAg
ICAgICAgICAgICB0ZXN0SW5mb05ldygiPGh0bWw+PGJvZHk+PGltZyBzdHlsZT0ncG9zaXRpb246
YWJzb2x1dGU7IGxlZnQ6MDsgdG9wOjAnIHNyYz0nMHhkZWFkYmVlZicgd2lkdGg9NTAgaGVpZ2h0
PTUwPjwvaW1nPjwvYm9keT48L2h0bWw+IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFdF
QktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9JTUFHRSksCi0gICAgICAgICAgICAgICBjb250
ZXh0TWVudUZpeHR1cmVTZXR1cCwgdGVzdENvbnRleHRNZW51LCBjb250ZXh0TWVudUZpeHR1cmVU
ZWFyZG93bik7Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC90ZXN0Y29udGV4dG1lbnUvZWRpdGFi
bGUiLCBDb250ZXh0TWVudUZpeHR1cmUsCi0gICAgICAgICAgICAgICB0ZXN0SW5mb05ldygiPGh0
bWw+PGJvZHk+PGlucHV0IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDowOyB0b3A6MCcg
c2l6ZT0nMzUnPjwvaW5wdXQ+PjwvYm9keT48L2h0bWw+IiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9FRElUQUJMRSksCi0gICAgICAg
ICAgICAgICBjb250ZXh0TWVudUZpeHR1cmVTZXR1cCwgdGVzdENvbnRleHRNZW51LCBjb250ZXh0
TWVudUZpeHR1cmVUZWFyZG93bik7Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC90ZXN0Y29udGV4
dG1lbnUvbGluayIsIENvbnRleHRNZW51Rml4dHVyZSwKLSAgICAgICAgICAgICAgIHRlc3RJbmZv
TmV3KCI8aHRtbD48Ym9keT48YSBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MDsgdG9w
OjAnIGhyZWY9J2h0dHA6Ly93d3cuZXhhbXBsZS5jb20nPkhFTExPIFdPUkxEPC9hPjwvYm9keT48
L2h0bWw+IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9ISVRfVEVTVF9SRVNV
TFRfQ09OVEVYVF9MSU5LKSwKLSAgICAgICAgICAgICAgIGNvbnRleHRNZW51Rml4dHVyZVNldHVw
LCB0ZXN0Q29udGV4dE1lbnUsIGNvbnRleHRNZW51Rml4dHVyZVRlYXJkb3duKTsKLSAgICBnX3Rl
c3RfYWRkKCIvd2Via2l0L3Rlc3Rjb250ZXh0bWVudS9jdXN0b21pdGVtIiwgQ29udGV4dE1lbnVG
aXh0dXJlLAotICAgICAgICAgICAgICAgdGVzdEluZm9OZXcoIjxodG1sPjxib2R5PjxoMT5XZWJL
aXRHVEsrITwvaDE+PC9ib2R5PjwvaHRtbD4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
V0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0RPQ1VNRU5UKSwKLSAgICAgICAgICAgICAg
IGNvbnRleHRNZW51Rml4dHVyZVNldHVwLCB0ZXN0Q29udGV4dE1lbnVDdXN0b21JdGVtLCBjb250
ZXh0TWVudUZpeHR1cmVUZWFyZG93bik7Ci0KLSAgICByZXR1cm4gZ190ZXN0X3J1bigpOwotfQot
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0Y29weWFuZHBhc3RlLmMg
Yi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0Y29weWFuZHBhc3RlLmMKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGJiMzhlYTYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9n
dGsvdGVzdHMvdGVzdGNvcHlhbmRwYXN0ZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjY2ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUg
PHN0cmluZy5oPgotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dl
YmtpdC5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+Ci0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0UmVmLmg+Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAg
ICBjaGFyKiBwYWdlOwotICAgIGNoYXIqIGV4cGVjdGVkQ29udGVudDsKLX0gVGVzdEluZm87Ci0K
LXR5cGVkZWYgc3RydWN0IHsKLSAgICBHdGtXaWRnZXQqIHdpbmRvdzsKLSAgICBXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3OwotICAgIEdNYWluTG9vcCogbG9vcDsKLSAgICBUZXN0SW5mbyogaW5mbzsK
LX0gQ29weUFuZFBhc3RlRml4dHVyZTsKLQotVGVzdEluZm8qCi10ZXN0X2luZm9fbmV3KGNvbnN0
IGNoYXIqIHBhZ2UsIGNvbnN0IGNoYXIqIGV4cGVjdGVkQ29udGVudCkKLXsKLSAgICBUZXN0SW5m
byogaW5mbzsKLSAgICBpbmZvID0gZ19zbGljZV9uZXcwKFRlc3RJbmZvKTsKLSAgICBpbmZvLT5w
YWdlID0gZ19zdHJkdXAocGFnZSk7Ci0gICAgaWYgKGV4cGVjdGVkQ29udGVudCkKLSAgICAgICAg
aW5mby0+ZXhwZWN0ZWRDb250ZW50ID0gZ19zdHJkdXAoZXhwZWN0ZWRDb250ZW50KTsKLSAgICBy
ZXR1cm4gaW5mbzsKLX0KLQotdm9pZAotdGVzdF9pbmZvX2Rlc3Ryb3koVGVzdEluZm8qIGluZm8p
Ci17Ci0gICAgZ19mcmVlKGluZm8tPnBhZ2UpOwotICAgIGdfZnJlZShpbmZvLT5leHBlY3RlZENv
bnRlbnQpOwotICAgIGdfc2xpY2VfZnJlZShUZXN0SW5mbywgaW5mbyk7Ci19Ci0KLXN0YXRpYyB2
b2lkIGNvcHlfYW5kX3Bhc3RlX2ZpeHR1cmVfc2V0dXAoQ29weUFuZFBhc3RlRml4dHVyZSogZml4
dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGZpeHR1cmUtPmxvb3AgPSBnX21haW5f
bG9vcF9uZXcoTlVMTCwgVFJVRSk7Ci0KLSAgICBmaXh0dXJlLT53aW5kb3cgPSBndGtfd2luZG93
X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKLSAgICBmaXh0dXJlLT53ZWJWaWV3ID0gV0VCS0lU
X1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0KLSAgICBndGtfY29udGFpbmVyX2Fk
ZChHVEtfQ09OVEFJTkVSKGZpeHR1cmUtPndpbmRvdyksIEdUS19XSURHRVQoZml4dHVyZS0+d2Vi
VmlldykpOwotfQotCi1zdGF0aWMgdm9pZCBjb3B5X2FuZF9wYXN0ZV9maXh0dXJlX3RlYXJkb3du
KENvcHlBbmRQYXN0ZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAg
ICBndGtfd2lkZ2V0X2Rlc3Ryb3koZml4dHVyZS0+d2luZG93KTsKLSAgICBnX21haW5fbG9vcF91
bnJlZihmaXh0dXJlLT5sb29wKTsKLSAgICB0ZXN0X2luZm9fZGVzdHJveShmaXh0dXJlLT5pbmZv
KTsKLX0KLQotc3RhdGljIHZvaWQgbG9hZF9zdGF0dXNfY2IoV2ViS2l0V2ViVmlldyogd2ViVmll
dywgR1BhcmFtU3BlYyogc3BlYywgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBDb3B5QW5kUGFzdGVG
aXh0dXJlKiBmaXh0dXJlID0gKENvcHlBbmRQYXN0ZUZpeHR1cmUqKWRhdGE7Ci0gICAgV2ViS2l0
TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYlZp
ZXcpOwotICAgIGlmIChzdGF0dXMgIT0gV0VCS0lUX0xPQURfRklOSVNIRUQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEd0a0NsaXBib2FyZCogY2xpcGJvYXJkID0gZ3RrX2NsaXBib2FyZF9nZXQo
R0RLX1NFTEVDVElPTl9DTElQQk9BUkQpOwotICAgIGd0a19jbGlwYm9hcmRfY2xlYXIoY2xpcGJv
YXJkKTsKLQotICAgIHdlYmtpdF93ZWJfdmlld19jb3B5X2NsaXBib2FyZCh3ZWJWaWV3KTsKLQot
ICAgIGdjaGFyKiB0ZXh0ID0gZ3RrX2NsaXBib2FyZF93YWl0X2Zvcl90ZXh0KGNsaXBib2FyZCk7
Ci0gICAgZ19hc3NlcnQodGV4dCB8fCAhZml4dHVyZS0+aW5mby0+ZXhwZWN0ZWRDb250ZW50KTsK
LSAgICBnX2Fzc2VydCghdGV4dCB8fCAhc3RyY21wKHRleHQsIGZpeHR1cmUtPmluZm8tPmV4cGVj
dGVkQ29udGVudCkpOwotICAgIGdfZnJlZSh0ZXh0KTsKLQotICAgIC8vIFZlcmlmeSB0aGF0IHRo
ZSBtYXJrdXAgc3RhcnRzIHdpdGggdGhlIHByb3BlciBjb250ZW50LXR5cGUgbWV0YSB0YWcgcHJl
Zml4LgotICAgIEd0a1NlbGVjdGlvbkRhdGEqIHNlbGVjdGlvbkRhdGEgPSBndGtfY2xpcGJvYXJk
X3dhaXRfZm9yX2NvbnRlbnRzKGNsaXBib2FyZCwgZ2RrX2F0b21faW50ZXJuKCJ0ZXh0L2h0bWwi
LCBGQUxTRSkpOwotICAgIGlmIChzZWxlY3Rpb25EYXRhKSB7Ci0gICAgICAgIHN0YXRpYyBjb25z
dCBjaGFyKiBtYXJrdXBQcmVmaXggPSAiPG1ldGEgaHR0cC1lcXVpdj1cImNvbnRlbnQtdHlwZVwi
IGNvbnRlbnQ9XCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLThcIj4iOwotICAgICAgICBjaGFyKiBt
YXJrdXAgPSBnX3N0cm5kdXAoKGNvbnN0IGNoYXIqKSBndGtfc2VsZWN0aW9uX2RhdGFfZ2V0X2Rh
dGEoc2VsZWN0aW9uRGF0YSksCi0gICAgICAgICAgICBndGtfc2VsZWN0aW9uX2RhdGFfZ2V0X2xl
bmd0aChzZWxlY3Rpb25EYXRhKSk7Ci0gICAgICAgIGdfYXNzZXJ0KHN0cmxlbihtYXJrdXBQcmVm
aXgpIDw9IHN0cmxlbihtYXJrdXApKTsKLSAgICAgICAgZ19hc3NlcnQoIXN0cm5jbXAobWFya3Vw
UHJlZml4LCBtYXJrdXAsIHN0cmxlbihtYXJrdXBQcmVmaXgpKSk7Ci0gICAgICAgIGdfZnJlZSht
YXJrdXApOwotICAgIH0KLQotICAgIGdfYXNzZXJ0KCFndGtfY2xpcGJvYXJkX3dhaXRfaXNfdXJp
c19hdmFpbGFibGUoY2xpcGJvYXJkKSk7Ci0gICAgZ19hc3NlcnQoIWd0a19jbGlwYm9hcmRfd2Fp
dF9pc19pbWFnZV9hdmFpbGFibGUoY2xpcGJvYXJkKSk7Ci0KLSAgICBnX21haW5fbG9vcF9xdWl0
KGZpeHR1cmUtPmxvb3ApOwotfQotCi1nYm9vbGVhbiBtYXBfZXZlbnRfY2IoR3RrV2lkZ2V0ICp3
aWRnZXQsIEdka0V2ZW50KiBldmVudCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBDb3B5QW5kUGFz
dGVGaXh0dXJlKiBmaXh0dXJlID0gKENvcHlBbmRQYXN0ZUZpeHR1cmUqKWRhdGE7Ci0gICAgd2Vi
a2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKGZpeHR1cmUtPndlYlZpZXcsIGZpeHR1cmUtPmluZm8t
PnBhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXh0L2h0bWwiLCAidXRm
LTgiLCAiZmlsZTovLyIpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQgdGVz
dF9jb3B5X2FuZF9wYXN0ZShDb3B5QW5kUGFzdGVGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2lu
dGVyIGRhdGEpCi17Ci0gICAgZml4dHVyZS0+aW5mbyA9IChUZXN0SW5mbyopZGF0YTsKLSAgICBn
X3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndpbmRvdywgIm1hcC1ldmVudCIsCi0gICAgICAgICAg
ICAgICAgICAgICBHX0NBTExCQUNLKG1hcF9ldmVudF9jYiksIGZpeHR1cmUpOwotCi0gICAgZ3Rr
X3dpZGdldF9zaG93KGZpeHR1cmUtPndpbmRvdyk7Ci0gICAgZ3RrX3dpZGdldF9zaG93KEdUS19X
SURHRVQoZml4dHVyZS0+d2ViVmlldykpOwotICAgIGd0a193aW5kb3dfcHJlc2VudChHVEtfV0lO
RE9XKGZpeHR1cmUtPndpbmRvdykpOwotICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1cyhHVEtfV0lE
R0VUKGZpeHR1cmUtPndlYlZpZXcpKTsKLQotICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+
d2ViVmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLAotICAgICAgICAgICAgICAgICAgICAgR19D
QUxMQkFDSyhsb2FkX3N0YXR1c19jYiksIGZpeHR1cmUpOwotCi0gICAgZ19tYWluX2xvb3BfcnVu
KGZpeHR1cmUtPmxvb3ApOwotfQotCi1zdGF0aWMgQ29weUFuZFBhc3RlRml4dHVyZSogY3VycmVu
dEZpeHR1cmU7Ci1zdGF0aWMgSlNWYWx1ZVJlZiBydW5QYXN0ZVRlc3RDYWxsYmFjayhKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmpl
Y3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBK
U1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKEdUS19X
SURHRVQoY3VycmVudEZpeHR1cmUtPndlYlZpZXcpKTsKLQotICAgIC8vIFNpbXVsYXRlIGEgcGFz
dGUga2V5Ym9hcmQgc2VxdWVuY2UuCi0gICAgR2RrRXZlbnQqIGV2ZW50ID0gZ2RrX2V2ZW50X25l
dyhHREtfS0VZX1BSRVNTKTsKLSAgICBldmVudC0+a2V5LmtleXZhbCA9IGdka191bmljb2RlX3Rv
X2tleXZhbCgndicpOwotICAgIGV2ZW50LT5rZXkuc3RhdGUgPSBHREtfQ09OVFJPTF9NQVNLOwot
ICAgIGV2ZW50LT5rZXkud2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KEdUS19XSURHRVQo
Y3VycmVudEZpeHR1cmUtPndlYlZpZXcpKTsKLSAgICBnX29iamVjdF9yZWYoZXZlbnQtPmtleS53
aW5kb3cpOwotI2lmbmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotICAgIEdka0RldmljZU1hbmFnZXIq
IG1hbmFnZXIgPSAgZ2RrX2Rpc3BsYXlfZ2V0X2RldmljZV9tYW5hZ2VyKGdka193aW5kb3dfZ2V0
X2Rpc3BsYXkoZXZlbnQtPmtleS53aW5kb3cpKTsKLSAgICBnZGtfZXZlbnRfc2V0X2RldmljZShl
dmVudCwgZ2RrX2RldmljZV9tYW5hZ2VyX2dldF9jbGllbnRfcG9pbnRlcihtYW5hZ2VyKSk7Ci0j
ZW5kaWYKLQotICAgIEdka0tleW1hcEtleSoga2V5czsKLSAgICBnaW50IG5fa2V5czsKLSAgICBp
ZiAoZ2RrX2tleW1hcF9nZXRfZW50cmllc19mb3Jfa2V5dmFsKGdka19rZXltYXBfZ2V0X2RlZmF1
bHQoKSwgZXZlbnQtPmtleS5rZXl2YWwsICZrZXlzLCAmbl9rZXlzKSkgewotICAgICAgICBldmVu
dC0+a2V5LmhhcmR3YXJlX2tleWNvZGUgPSBrZXlzWzBdLmtleWNvZGU7Ci0gICAgICAgIGdfZnJl
ZShrZXlzKTsKLSAgICB9Ci0KLSAgICBndGtfbWFpbl9kb19ldmVudChldmVudCk7Ci0gICAgZXZl
bnQtPmtleS50eXBlID0gR0RLX0tFWV9SRUxFQVNFOwotICAgIGd0a19tYWluX2RvX2V2ZW50KGV2
ZW50KTsKLSAgICBnZGtfZXZlbnRfZnJlZShldmVudCk7Ci0KLSAgICBKU1N0cmluZ1JlZiBzY3Jp
cHRTdHJpbmcgPSBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZG9jdW1lbnQuYm9keS5p
bm5lckhUTUw7Iik7Ci0gICAgSlNWYWx1ZVJlZiB2YWx1ZSA9IEpTRXZhbHVhdGVTY3JpcHQoY29u
dGV4dCwgc2NyaXB0U3RyaW5nLCAwLCAwLCAwLCAwKTsKLSAgICBKU1N0cmluZ1JlbGVhc2Uoc2Ny
aXB0U3RyaW5nKTsKLQotICAgIGdfYXNzZXJ0KEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCB2YWx1
ZSkpOwotICAgIEpTU3RyaW5nUmVmIGFjdHVhbCA9IEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4
dCwgdmFsdWUsIGV4Y2VwdGlvbik7Ci0gICAgZ19hc3NlcnQoIWV4Y2VwdGlvbiB8fCAhKmV4Y2Vw
dGlvbik7Ci0gICAgZ19hc3NlcnQoY3VycmVudEZpeHR1cmUtPmluZm8tPmV4cGVjdGVkQ29udGVu
dCk7Ci0gICAgSlNTdHJpbmdSZWYgZXhwZWN0ZWQgPSBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZyhjdXJyZW50Rml4dHVyZS0+aW5mby0+ZXhwZWN0ZWRDb250ZW50KTsKLSAgICBnX2Fzc2Vy
dChKU1N0cmluZ0lzRXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCkpOwotCi0gICAgSlNTdHJpbmdSZWxl
YXNlKGV4cGVjdGVkKTsKLSAgICBKU1N0cmluZ1JlbGVhc2UoYWN0dWFsKTsKLSAgICBnX21haW5f
bG9vcF9xdWl0KGN1cnJlbnRGaXh0dXJlLT5sb29wKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdpbmRvd19vYmplY3RfY2xlYXJl
ZF9jYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgV2ViS2l0V2ViRnJhbWUqIHdlYl9m
cmFtZSwgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHdpbmRvd19vYmpl
Y3QsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgSlNTdHJpbmdSZWYgbmFtZSA9IEpTU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJydW5UZXN0Iik7Ci0gICAgSlNPYmplY3RSZWYgdGVzdENvbXBs
ZXRlID0gSlNPYmplY3RNYWtlRnVuY3Rpb25XaXRoQ2FsbGJhY2soY29udGV4dCwgbmFtZSwgcnVu
UGFzdGVUZXN0Q2FsbGJhY2spOwotICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwgd2lu
ZG93X29iamVjdCwgbmFtZSwgdGVzdENvbXBsZXRlLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUs
IDApOwotICAgIEpTU3RyaW5nUmVsZWFzZShuYW1lKTsKLX0KLQotc3RhdGljIHZvaWQgcGFzdGlu
Z190ZXN0X2dldF9kYXRhX2NhbGxiYWNrKEd0a0NsaXBib2FyZCogY2xpcGJvYXJkLCBHdGtTZWxl
Y3Rpb25EYXRhKiBzZWxlY3Rpb25fZGF0YSwgZ3VpbnQgaW5mbywgZ3BvaW50ZXIgZGF0YSkKLXsK
LSAgICBndGtfc2VsZWN0aW9uX2RhdGFfc2V0KHNlbGVjdGlvbl9kYXRhLCBnZGtfYXRvbV9pbnRl
cm4oInRleHQvaHRtbCIsIEZBTFNFKSwgOCwgKGNvbnN0IGd1Y2hhciopIGRhdGEsIHN0cmxlbigo
Y2hhciopZGF0YSkgKyAxKTsKLX0KLQotc3RhdGljIHZvaWQgcGFzdGluZ190ZXN0X2NsZWFyX2Rh
dGFfY2FsbGJhY2soR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQsIGdwb2ludGVyIGRhdGEpCi17Ci0g
ICAgZ19mcmVlKGRhdGEpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3Bhc3RpbmdfbWFya3VwKENv
cHlBbmRQYXN0ZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBm
aXh0dXJlLT5pbmZvID0gKFRlc3RJbmZvKilkYXRhOwotICAgIGN1cnJlbnRGaXh0dXJlID0gZml4
dHVyZTsKLQotICAgIEd0a1RhcmdldExpc3QqIHRhcmdldExpc3QgPSBndGtfdGFyZ2V0X2xpc3Rf
bmV3KDAsIDApOwotICAgIGd0a190YXJnZXRfbGlzdF9hZGQodGFyZ2V0TGlzdCwgZ2RrX2F0b21f
aW50ZXJuKCJ0ZXh0L2h0bWwiLCBGQUxTRSksIDAsIDApOwotCi0gICAgaW50IG51bWJlck9mVGFy
Z2V0cyA9IDE7Ci0gICAgR3RrVGFyZ2V0RW50cnkqIHRhcmdldFRhYmxlID0gZ3RrX3RhcmdldF90
YWJsZV9uZXdfZnJvbV9saXN0KHRhcmdldExpc3QsICZudW1iZXJPZlRhcmdldHMpOwotICAgIGd0
a19jbGlwYm9hcmRfc2V0X3dpdGhfZGF0YShndGtfY2xpcGJvYXJkX2dldChHREtfU0VMRUNUSU9O
X0NMSVBCT0FSRCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFRhYmxl
LCBudW1iZXJPZlRhcmdldHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3Rp
bmdfdGVzdF9nZXRfZGF0YV9jYWxsYmFjaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFzdGluZ190ZXN0X2NsZWFyX2RhdGFfY2FsbGJhY2ssCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdfc3RyZHVwKGZpeHR1cmUtPmluZm8tPmV4cGVjdGVkQ29udGVudCkpOwot
ICAgIGd0a190YXJnZXRfbGlzdF91bnJlZih0YXJnZXRMaXN0KTsKLSAgICBndGtfdGFyZ2V0X3Rh
YmxlX2ZyZWUodGFyZ2V0VGFibGUsIG51bWJlck9mVGFyZ2V0cyk7Ci0KLSAgICBnX3NpZ25hbF9j
b25uZWN0KGZpeHR1cmUtPndpbmRvdywgIm1hcC1ldmVudCIsCi0gICAgICAgICAgICAgICAgICAg
ICBHX0NBTExCQUNLKG1hcF9ldmVudF9jYiksIGZpeHR1cmUpOwotICAgIGdfc2lnbmFsX2Nvbm5l
Y3QoZml4dHVyZS0+d2ViVmlldywgIndpbmRvdy1vYmplY3QtY2xlYXJlZCIsCi0gICAgICAgICAg
ICAgICAgICAgICBHX0NBTExCQUNLKHdpbmRvd19vYmplY3RfY2xlYXJlZF9jYWxsYmFjayksIGZp
eHR1cmUpOwotCi0gICAgZ3RrX3dpZGdldF9zaG93KGZpeHR1cmUtPndpbmRvdyk7Ci0gICAgZ3Rr
X3dpZGdldF9zaG93KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldykpOwotICAgIGd0a193aW5k
b3dfcHJlc2VudChHVEtfV0lORE9XKGZpeHR1cmUtPndpbmRvdykpOwotCi0gICAgZ19tYWluX2xv
b3BfcnVuKGZpeHR1cmUtPmxvb3ApOwotfQotCi0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiog
YXJndikKLXsKLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAgICBn
X3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwotICAgIGNvbnN0IGNo
YXIqIHNlbGVjdGVkX3NwYW5faHRtbCA9ICI8aHRtbD48Ym9keT4iCi0gICAgICAgICI8c3BhbiBp
ZD1cIm1haW5zcGFuXCI+QWxsIHdvcmsgYW5kIG5vIHBsYXkgPHNwYW4+bWFrZSBKYWNrIGEgZHVs
bDwvc3Bhbj4gYm95Ljwvc3Bhbj4iCi0gICAgICAgICI8c2NyaXB0PmRvY3VtZW50LmdldFNlbGVj
dGlvbigpLmNvbGxhcHNlKCk7XG4iCi0gICAgICAgICJkb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5z
ZWxlY3RBbGxDaGlsZHJlbihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbnNwYW4nKSk7XG4i
Ci0gICAgICAgICI8L3NjcmlwdD48L2JvZHk+PC9odG1sPiI7Ci0gICAgY29uc3QgY2hhciogbm9f
c2VsZWN0aW9uX2h0bWwgPSAiPGh0bWw+PGJvZHk+IgotICAgICAgICAiPHNwYW4gaWQ9XCJtYWlu
c3BhblwiPkFsbCB3b3JrIGFuZCBubyBwbGF5IDxzcGFuPm1ha2UgSmFjayBhIGR1bGw8L3NwYW4+
IGJveTwvc3Bhbj4iCi0gICAgICAgICI8c2NyaXB0PmRvY3VtZW50LmdldFNlbGVjdGlvbigpLmNv
bGxhcHNlKCk7XG4iCi0gICAgICAgICI8L3NjcmlwdD48L2JvZHk+PC9odG1sPiI7Ci0KLSAgICBn
X3Rlc3RfYWRkKCIvd2Via2l0L2NvcHlhbmRwYXN0ZS9zZWxlY3Rpb24iLCBDb3B5QW5kUGFzdGVG
aXh0dXJlLAotICAgICAgICAgICAgICAgdGVzdF9pbmZvX25ldyhzZWxlY3RlZF9zcGFuX2h0bWws
ICJBbGwgd29yayBhbmQgbm8gcGxheSBtYWtlIEphY2sgYSBkdWxsIGJveS4iKSwKLSAgICAgICAg
ICAgICAgIGNvcHlfYW5kX3Bhc3RlX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0
X2NvcHlfYW5kX3Bhc3RlLAotICAgICAgICAgICAgICAgY29weV9hbmRfcGFzdGVfZml4dHVyZV90
ZWFyZG93bik7Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9jb3B5YW5kcGFzdGUvbm8tc2VsZWN0
aW9uIiwgQ29weUFuZFBhc3RlRml4dHVyZSwKLSAgICAgICAgICAgICAgIHRlc3RfaW5mb19uZXco
bm9fc2VsZWN0aW9uX2h0bWwsIDApLAotICAgICAgICAgICAgICAgY29weV9hbmRfcGFzdGVfZml4
dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3RfY29weV9hbmRfcGFzdGUsCi0gICAgICAg
ICAgICAgICBjb3B5X2FuZF9wYXN0ZV9maXh0dXJlX3RlYXJkb3duKTsKLQotICAgIGNvbnN0IGNo
YXIqIHBhc3RlX3Rlc3RfaHRtbCA9ICI8aHRtbD4iCi0gICAgICAgICI8Ym9keSBvbkxvYWQ9XCJk
b2N1bWVudC5ib2R5LmZvY3VzKCk7IHJ1blRlc3QoKTtcIiBjb250ZW50RWRpdGFibGU9XCJ0cnVl
XCI+IgotICAgICAgICAiPC9ib2R5PjwvaHRtbD4iOwotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQv
Y29weWFuZHBhc3RlL3Bhc3RlLW1hcmt1cCIsIENvcHlBbmRQYXN0ZUZpeHR1cmUsCi0gICAgICAg
ICAgICAgICB0ZXN0X2luZm9fbmV3KHBhc3RlX3Rlc3RfaHRtbCwgImJvYmJ5IiksCi0gICAgICAg
ICAgICAgICBjb3B5X2FuZF9wYXN0ZV9maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVz
dF9wYXN0aW5nX21hcmt1cCwKLSAgICAgICAgICAgICAgIGNvcHlfYW5kX3Bhc3RlX2ZpeHR1cmVf
dGVhcmRvd24pOwotCi0gICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsKLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rkb21kb2N1bWVudC5jIGIvU291cmNlL1dlYktpdC9n
dGsvdGVzdHMvdGVzdGRvbWRvY3VtZW50LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDRjOTk3ZGQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvbWRv
Y3VtZW50LmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAidGVz
dF91dGlscy5oIgotCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+
Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KLQotI2Rl
ZmluZSBIVE1MX0RPQ1VNRU5UX1RJVExFICI8aHRtbD48aGVhZD48dGl0bGU+VGhpcyBpcyB0aGUg
dGl0bGU8L3RpdGxlPjwvaGVhZD48Ym9keT48L2JvZHk+PC9odG1sPiIKLSNkZWZpbmUgSFRNTF9E
T0NVTUVOVF9FTEVNRU5UUyAiPGh0bWw+PGJvZHk+PHVsPjxsaT4xPC9saT48bGk+MjwvbGk+PGxp
PjM8L2xpPjwvdWw+PC9ib2R5PjwvaHRtbD4iCi0jZGVmaW5lIEhUTUxfRE9DVU1FTlRfRUxFTUVO
VFNfQ0xBU1MgIjxodG1sPjxib2R5PjxkaXYgY2xhc3M9XCJ0ZXN0XCI+PC9kaXY+PGRpdiBjbGFz
cz1cInN0cmFuZ2VcIj48L2Rpdj48ZGl2IGNsYXNzPVwidGVzdFwiPjwvZGl2PjwvYm9keT48L2h0
bWw+IgotI2RlZmluZSBIVE1MX0RPQ1VNRU5UX0VMRU1FTlRTX0lEICI8aHRtbD48Ym9keT48ZGl2
IGlkPVwidGVzdG9rXCI+PC9kaXY+PGRpdiBpZD1cInRlc3RiYWRcIj5maXJzdDwvZGl2PjxkaXYg
aWQ9XCJ0ZXN0YmFkXCI+c2Vjb25kPC9kaXY+PC9ib2R5PjwvaHRtbD4iCi0jZGVmaW5lIEhUTUxf
RE9DVU1FTlRfTElOS1MgIjxodG1sPjxoZWFkPjx0aXRsZT5UaXRsZTwvdGl0bGU+PC9oZWFkPjxi
b2R5PjxhIGhyZWY9XCJhYm91dDpibGFua1wiPmJsYW5rPC9hPjxhIGhyZWY9XCJodHRwOi8vd3d3
Lmdvb2dsZS5jb21cIj5nb29nbGU8L2E+PGEgaHJlZj1cImh0dHA6Ly93d3cud2Via2l0Lm9yZ1wi
PndlYmtpdDwvYT48L2JvZHk+PC9odG1sPiIKLSNkZWZpbmUgSFRNTF9ET0NVTUVOVF9JRlJBTUUg
IjxodG1sPjxoZWFkPjx0aXRsZT5JRnJhbWU8L3RpdGxlPjwvaGVhZD48Ym9keT48aWZyYW1lIGlk
PSdpZnJhbWUnPjwvaWZyYW1lPjxkaXYgaWQ9J3Rlc3QnPjwvZGl2PjwvYm9keT48L2h0bWw+Igot
I2RlZmluZSBIVE1MX0RPQ1VNRU5UX1RBQkxFICI8aHRtbD48Ym9keT48dGFibGUgaWQ9XCJ0YWJs
ZVwiPjwvdGFibGU+PC9ib2R5PjwvaHRtbD4iCi0jZGVmaW5lIEhUTUxfRE9DVU1FTlRfRVZBTFVB
VEUgIjxodG1sPjxoZWFkPjx0aXRsZT48L3RpdGxlPjwvaGVhZD48Ym9keT48ZGl2PkZpcnN0IGRp
djwvZGl2PjxkaXY+U2Vjb25kIGRpdjwvZGl2PjwvYm9keT48L2h0bWw+IgotCi10eXBlZGVmIHN0
cnVjdCB7Ci0gICAgR3RrV2lkZ2V0KiB3ZWJWaWV3OwotICAgIEdNYWluTG9vcCogbG9vcDsKLX0g
RG9tRG9jdW1lbnRGaXh0dXJlOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZmluaXNoX2xvYWRpbmcoRG9t
RG9jdW1lbnRGaXh0dXJlKiBmaXh0dXJlKQotewotICAgIGlmIChnX21haW5fbG9vcF9pc19ydW5u
aW5nKGZpeHR1cmUtPmxvb3ApKQotICAgICAgICBnX21haW5fbG9vcF9xdWl0KGZpeHR1cmUtPmxv
b3ApOwotCi0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCBkb21fZG9jdW1lbnRf
Zml4dHVyZV9zZXR1cChEb21Eb2N1bWVudEZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIg
ZGF0YSkKLXsKLSAgICBmaXh0dXJlLT5sb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUp
OwotICAgIGZpeHR1cmUtPndlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7Ci0gICAgZ19v
YmplY3RfcmVmX3NpbmsoZml4dHVyZS0+d2ViVmlldyk7Ci0KLSAgICBpZiAoZGF0YSAhPSBOVUxM
KQotICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVXIChm
aXh0dXJlLT53ZWJWaWV3KSwgKGNvbnN0IGNoYXIqKSBkYXRhLCBOVUxMLCBOVUxMLCBOVUxMKTsK
LQotICAgIGdfaWRsZV9hZGQoKEdTb3VyY2VGdW5jKWZpbmlzaF9sb2FkaW5nLCBmaXh0dXJlKTsK
LSAgICBnX21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRv
bV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKERvbURvY3VtZW50Rml4dHVyZSogZml4dHVyZSwg
Z2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGlmIChmaXh0dXJlLT53ZWJWaWV3KQotICAgICAg
ICBnX29iamVjdF91bnJlZihmaXh0dXJlLT53ZWJWaWV3KTsKLSAgICBnX21haW5fbG9vcF91bnJl
ZihmaXh0dXJlLT5sb29wKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF9kb21fZG9jdW1lbnRfdGl0
bGUoRG9tRG9jdW1lbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0g
ICAgZ19hc3NlcnQoZml4dHVyZSk7Ci0gICAgV2ViS2l0V2ViVmlldyogdmlldyA9IChXZWJLaXRX
ZWJWaWV3KilmaXh0dXJlLT53ZWJWaWV3OwotICAgIGdfYXNzZXJ0KHZpZXcpOwotICAgIFdlYktp
dERPTURvY3VtZW50KiBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50
KHZpZXcpOwotICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsKLSAgICBnY2hhciogdGl0bGUgPSB3ZWJr
aXRfZG9tX2RvY3VtZW50X2dldF90aXRsZShkb2N1bWVudCk7Ci0gICAgZ19hc3NlcnQodGl0bGUp
OwotICAgIGdfYXNzZXJ0X2NtcHN0cih0aXRsZSwgPT0sICJUaGlzIGlzIHRoZSB0aXRsZSIpOwot
ICAgIGdfZnJlZSh0aXRsZSk7Ci0gICAgd2Via2l0X2RvbV9kb2N1bWVudF9zZXRfdGl0bGUoZG9j
dW1lbnQsICJUaGlzIGlzIHRoZSBzZWNvbmQgdGl0bGUiKTsKLSAgICB0aXRsZSA9IHdlYmtpdF9k
b21fZG9jdW1lbnRfZ2V0X3RpdGxlKGRvY3VtZW50KTsKLSAgICBnX2Fzc2VydCh0aXRsZSk7Ci0g
ICAgZ19hc3NlcnRfY21wc3RyKHRpdGxlLCA9PSwgIlRoaXMgaXMgdGhlIHNlY29uZCB0aXRsZSIp
OwotICAgIGdfZnJlZSh0aXRsZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RfZG9tX2RvY3VtZW50
X2dldF9lbGVtZW50c19ieV90YWdfbmFtZShEb21Eb2N1bWVudEZpeHR1cmUqIGZpeHR1cmUsIGdj
b25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBnX2Fzc2VydChmaXh0dXJlKTsKLSAgICBXZWJLaXRX
ZWJWaWV3KiB2aWV3ID0gKFdlYktpdFdlYlZpZXcqKWZpeHR1cmUtPndlYlZpZXc7Ci0gICAgZ19h
c3NlcnQodmlldyk7Ci0gICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50ID0gd2Via2l0X3dl
Yl92aWV3X2dldF9kb21fZG9jdW1lbnQodmlldyk7Ci0gICAgZ19hc3NlcnQoZG9jdW1lbnQpOwot
ICAgIFdlYktpdERPTU5vZGVMaXN0KiBsaXN0ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxl
bWVudHNfYnlfdGFnX25hbWUoZG9jdW1lbnQsICJsaSIpOwotICAgIGdfYXNzZXJ0KGxpc3QpOwot
ICAgIGd1bG9uZyBsZW5ndGggPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3Qp
OwotICAgIGdfYXNzZXJ0X2NtcGludChsZW5ndGgsID09LCAzKTsKLQotICAgIGd1aW50IGk7Ci0K
LSAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgV2ViS2l0RE9NTm9k
ZSogaXRlbSA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdCwgaSk7Ci0gICAgICAgIGdf
YXNzZXJ0KGl0ZW0pOwotICAgICAgICBXZWJLaXRET01FbGVtZW50KiBlbGVtZW50ID0gKFdlYktp
dERPTUVsZW1lbnQqKWl0ZW07Ci0gICAgICAgIGdfYXNzZXJ0KGVsZW1lbnQpOwotICAgICAgICBn
X2Fzc2VydF9jbXBzdHIod2Via2l0X2RvbV9lbGVtZW50X2dldF90YWdfbmFtZShlbGVtZW50KSwg
PT0sICJMSSIpOwotICAgICAgICBXZWJLaXRET01IVE1MRWxlbWVudCogaHRtbEVsZW1lbnQgPSAo
V2ViS2l0RE9NSFRNTEVsZW1lbnQqKWVsZW1lbnQ7Ci0gICAgICAgIGNoYXIqIG4gPSBnX3N0cmR1
cF9wcmludGYoIiVkIiwgaSsxKTsKLSAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9kb21f
aHRtbF9lbGVtZW50X2dldF9pbm5lcl90ZXh0KGh0bWxFbGVtZW50KSwgPT0sIG4pOwotICAgICAg
ICBnX2ZyZWUobik7Ci0gICAgfQotCi0gICAgZ19vYmplY3RfdW5yZWYobGlzdCk7Ci19Ci0KLXN0
YXRpYyB2b2lkIHRlc3RfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19ieV9jbGFzc19uYW1lKERv
bURvY3VtZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGdf
YXNzZXJ0KGZpeHR1cmUpOwotICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSAoV2ViS2l0V2ViVmll
dyopZml4dHVyZS0+d2ViVmlldzsKLSAgICBnX2Fzc2VydCh2aWV3KTsKLSAgICBXZWJLaXRET01E
b2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3
KTsKLSAgICBnX2Fzc2VydChkb2N1bWVudCk7Ci0gICAgV2ViS2l0RE9NTm9kZUxpc3QqIGxpc3Qg
PSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19ieV9jbGFzc19uYW1lKGRvY3VtZW50
LCAidGVzdCIpOwotICAgIGdfYXNzZXJ0KGxpc3QpOwotICAgIGd1bG9uZyBsZW5ndGggPSB3ZWJr
aXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QpOwotICAgIGdfYXNzZXJ0X2NtcGludChs
ZW5ndGgsID09LCAyKTsKLQotICAgIGd1aW50IGk7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgbGVu
Z3RoOyBpKyspIHsKLSAgICAgICAgV2ViS2l0RE9NTm9kZSogaXRlbSA9IHdlYmtpdF9kb21fbm9k
ZV9saXN0X2l0ZW0obGlzdCwgaSk7Ci0gICAgICAgIGdfYXNzZXJ0KGl0ZW0pOwotICAgICAgICBX
ZWJLaXRET01FbGVtZW50KiBlbGVtZW50ID0gKFdlYktpdERPTUVsZW1lbnQqKWl0ZW07Ci0gICAg
ICAgIGdfYXNzZXJ0KGVsZW1lbnQpOwotICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2Rv
bV9lbGVtZW50X2dldF90YWdfbmFtZShlbGVtZW50KSwgPT0sICJESVYiKTsKLSAgICB9Ci0KLSAg
ICBnX29iamVjdF91bnJlZihsaXN0KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF9kb21fZG9jdW1l
bnRfZ2V0X2VsZW1lbnRfYnlfaWQoRG9tRG9jdW1lbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rw
b2ludGVyIGRhdGEpCi17Ci0gICAgZ19hc3NlcnQoZml4dHVyZSk7Ci0gICAgV2ViS2l0V2ViVmll
dyogdmlldyA9IChXZWJLaXRXZWJWaWV3KilmaXh0dXJlLT53ZWJWaWV3OwotICAgIGdfYXNzZXJ0
KHZpZXcpOwotICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmll
d19nZXRfZG9tX2RvY3VtZW50KHZpZXcpOwotICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsKLSAgICBX
ZWJLaXRET01FbGVtZW50KiBlbGVtZW50ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVu
dF9ieV9pZChkb2N1bWVudCwgInRlc3RvayIpOwotICAgIGdfYXNzZXJ0KGVsZW1lbnQpOwotICAg
IGVsZW1lbnQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50X2J5X2lkKGRvY3VtZW50
LCAidGhpcy1pZC1kb2VzLW5vdC1leGlzdCIpOwotICAgIGdfYXNzZXJ0KGVsZW1lbnQgPT0gMCk7
Ci0gICAgLyogVGhlIERPTSBzcGVjIHNheXMgdGhlIHJldHVybiB2YWx1ZSBpcyB1bmRlZmluZWQg
d2hlbiB0aGVyZSdzCi0gICAgICogbW9yZSB0aGFuIG9uZSBlbGVtZW50IHdpdGggdGhlIHNhbWUg
aWQ7IGluIG91ciBjYXNlIHRoZSBmaXJzdAotICAgICAqIG9uZSB3aWxsIGJlIHJldHVybmVkICov
Ci0gICAgZWxlbWVudCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRfYnlfaWQoZG9j
dW1lbnQsICJ0ZXN0YmFkIik7Ci0gICAgZ19hc3NlcnQoZWxlbWVudCk7Ci0gICAgV2ViS2l0RE9N
SFRNTEVsZW1lbnQqIGh0bWxFbGVtZW50ID0gKFdlYktpdERPTUhUTUxFbGVtZW50KillbGVtZW50
OwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfaW5uZXJf
dGV4dChodG1sRWxlbWVudCksID09LCAiZmlyc3QiKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF9k
b21fZG9jdW1lbnRfZ2V0X2xpbmtzKERvbURvY3VtZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0
cG9pbnRlciBkYXRhKQotewotICAgIGdfYXNzZXJ0KGZpeHR1cmUpOwotICAgIFdlYktpdFdlYlZp
ZXcqIHZpZXcgPSAoV2ViS2l0V2ViVmlldyopZml4dHVyZS0+d2ViVmlldzsKLSAgICBnX2Fzc2Vy
dCh2aWV3KTsKLSAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKLSAgICBnX2Fzc2VydChkb2N1bWVudCk7Ci0gICAg
V2ViS2l0RE9NSFRNTENvbGxlY3Rpb24gKmNvbGxlY3Rpb24gPSB3ZWJraXRfZG9tX2RvY3VtZW50
X2dldF9saW5rcyhkb2N1bWVudCk7Ci0gICAgZ19hc3NlcnQoY29sbGVjdGlvbik7Ci0gICAgZ3Vs
b25nIGxlbmd0aCA9IHdlYmtpdF9kb21faHRtbF9jb2xsZWN0aW9uX2dldF9sZW5ndGgoY29sbGVj
dGlvbik7Ci0gICAgZ19hc3NlcnRfY21waW50KGxlbmd0aCwgPT0sIDMpOwotCi0gICAgZ3VpbnQg
aTsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBzdGF0aWMg
Y29uc3QgY2hhciogbmFtZXNbXSA9IHsgImJsYW5rIiwgImdvb2dsZSIsICJ3ZWJraXQiIH07Ci0g
ICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiB1cmlzW10gPSB7ICJhYm91dDpibGFuayIsICJodHRw
Oi8vd3d3Lmdvb2dsZS5jb20vIiwgImh0dHA6Ly93d3cud2Via2l0Lm9yZy8iIH07Ci0gICAgICAg
IFdlYktpdERPTU5vZGUgKm5vZGUgPSB3ZWJraXRfZG9tX2h0bWxfY29sbGVjdGlvbl9pdGVtKGNv
bGxlY3Rpb24sIGkpOwotICAgICAgICBnX2Fzc2VydChub2RlKTsKLSAgICAgICAgV2ViS2l0RE9N
RWxlbWVudCogZWxlbWVudCA9IChXZWJLaXRET01FbGVtZW50Kilub2RlOwotICAgICAgICBnX2Fz
c2VydF9jbXBzdHIod2Via2l0X2RvbV9lbGVtZW50X2dldF90YWdfbmFtZShlbGVtZW50KSwgPT0s
ICJBIik7Ci0gICAgICAgIFdlYktpdERPTUhUTUxFbGVtZW50ICpodG1sRWxlbWVudCA9IChXZWJL
aXRET01IVE1MRWxlbWVudCopZWxlbWVudDsKLSAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtp
dF9kb21faHRtbF9lbGVtZW50X2dldF9pbm5lcl90ZXh0KGh0bWxFbGVtZW50KSwgPT0sIG5hbWVz
W2ldKTsKLSAgICAgICAgV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQgKmFuY2hvciA9IChXZWJL
aXRET01IVE1MQW5jaG9yRWxlbWVudCopZWxlbWVudDsKLSAgICAgICAgZ19hc3NlcnRfY21wc3Ry
KHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfaHJlZihhbmNob3IpLCA9PSwgdXJp
c1tpXSk7Ci0gICAgfQotICAgIGdfb2JqZWN0X3VucmVmKGNvbGxlY3Rpb24pOwotfQotCi1zdGF0
aWMgdm9pZCB0ZXN0X2RvbV9kb2N1bWVudF9pbnNlcnRfcm93KERvbURvY3VtZW50Rml4dHVyZSog
Zml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGdfYXNzZXJ0KGZpeHR1cmUpOwot
ICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSAoV2ViS2l0V2ViVmlldyopZml4dHVyZS0+d2ViVmll
dzsKLSAgICBnX2Fzc2VydCh2aWV3KTsKLSAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQg
PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKLSAgICBnX2Fzc2VydChX
RUJLSVRfRE9NX0lTX0RPQ1VNRU5UKGRvY3VtZW50KSk7Ci0gICAgV2ViS2l0RE9NRWxlbWVudCog
dGFibGUgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50X2J5X2lkKGRvY3VtZW50LCAi
dGFibGUiKTsKLSAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVCh0YWJsZSkp
OwotICAgIFdlYktpdERPTUhUTUxDb2xsZWN0aW9uKiByb3dzID0gd2Via2l0X2RvbV9odG1sX3Rh
YmxlX2VsZW1lbnRfZ2V0X3Jvd3MoV0VCS0lUX0RPTV9IVE1MX1RBQkxFX0VMRU1FTlQodGFibGUp
KTsKLSAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfQ09MTEVDVElPTihyb3dzKSk7Ci0K
LSAgICAvLyBUYWJsZSBpcyBpbml0aWFsbHkgZW1wdHkuCi0gICAgZ19hc3NlcnRfY21waW50KHdl
YmtpdF9kb21faHRtbF9jb2xsZWN0aW9uX2dldF9sZW5ndGgocm93cyksID09LCAwKTsKLSAgICBX
ZWJLaXRET01IVE1MRWxlbWVudCogcm93ID0gd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRf
aW5zZXJ0X3JvdyhXRUJLSVRfRE9NX0hUTUxfVEFCTEVfRUxFTUVOVCh0YWJsZSksIC0xLCBOVUxM
KTsKLSAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfUk9XX0VMRU1FTlQocm93
KSk7Ci0gICAgcm93cyA9IHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2dldF9yb3dzKFdF
QktJVF9ET01fSFRNTF9UQUJMRV9FTEVNRU5UKHRhYmxlKSk7Ci0gICAgZ19hc3NlcnQoV0VCS0lU
X0RPTV9JU19IVE1MX0NPTExFQ1RJT04ocm93cykpOwotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJr
aXRfZG9tX2h0bWxfY29sbGVjdGlvbl9nZXRfbGVuZ3RoKHJvd3MpLCA9PSwgMSk7Ci19Ci0KLXN0
YXRpYyB2b2lkIHRlc3RfZG9tX2RvY3VtZW50X2V2YWx1YXRlKERvbURvY3VtZW50Rml4dHVyZSog
Zml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGdfYXNzZXJ0KGZpeHR1cmUpOwot
ICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSAoV2ViS2l0V2ViVmlldyopZml4dHVyZS0+d2ViVmll
dzsKLSAgICBnX2Fzc2VydCh2aWV3KTsKLSAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQg
PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKLSAgICBnX2Fzc2VydChX
RUJLSVRfRE9NX0lTX0RPQ1VNRU5UKGRvY3VtZW50KSk7Ci0gICAgV2ViS2l0RE9NTm9kZUxpc3Qq
IGxpc3QgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19ieV90YWdfbmFtZShkb2N1
bWVudCwgImh0bWwiKTsKLSAgICBnX2Fzc2VydChsaXN0KTsKLSAgICBndWxvbmcgbGVuZ3RoID0g
d2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChsaXN0KTsKLSAgICBnX2Fzc2VydF9jbXBp
bnQobGVuZ3RoLCA9PSwgMSk7Ci0gICAgV2ViS2l0RE9NTm9kZSogaHRtbCA9IHdlYmtpdF9kb21f
bm9kZV9saXN0X2l0ZW0obGlzdCwgMCk7Ci0gICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19OT0RF
KGh0bWwpKTsKLQotICAgIFdlYktpdERPTVhQYXRoUmVzdWx0KiByZXN1bHQgPSB3ZWJraXRfZG9t
X2RvY3VtZW50X2V2YWx1YXRlKGRvY3VtZW50LCAiLy9kaXYiLCBodG1sLCBOVUxMLCAwLCBOVUxM
LCBOVUxMKTsKLSAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX1hQQVRIX1JFU1VMVChyZXN1bHQp
KTsKLQotICAgIGludCBpID0gMDsKLSAgICBXZWJLaXRET01Ob2RlKiBub2RlOwotICAgIHdoaWxl
ICggKG5vZGUgPSB3ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9pdGVyYXRlX25leHQocmVzdWx0LCBO
VUxMKSkgIT0gTlVMTCkgewotICAgICAgICBnX2Fzc2VydChub2RlKTsKLSAgICAgICAgV2ViS2l0
RE9NRWxlbWVudCogZWxlbWVudCA9IChXZWJLaXRET01FbGVtZW50Kilub2RlOwotICAgICAgICBn
X2Fzc2VydF9jbXBzdHIod2Via2l0X2RvbV9lbGVtZW50X2dldF90YWdfbmFtZShlbGVtZW50KSwg
PT0sICJESVYiKTsKLSAgICAgICAgaSsrOwotICAgIH0KLSAgICBnX2Fzc2VydF9jbXBpbnQoaSwg
PT0sIDIpOwotCi0gICAgZ19vYmplY3RfdW5yZWYobGlzdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdl
YWtfbm90aWZ5KGdwb2ludGVyIGRhdGEsIEdPYmplY3QqIHpvbWJpZSkKLXsKLSAgICBndWludCog
Y291bnQgPSAoZ3VpbnQqKWRhdGE7Ci0gICAgKCpjb3VudCkrKzsKLX0KLQotc3RhdGljIHZvaWQg
dGVzdF9kb21fZG9jdW1lbnRfZ2FyYmFnZV9jb2xsZWN0aW9uKERvbURvY3VtZW50Rml4dHVyZSog
Zml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGd1aW50IGNvdW50ID0gMDsKLSAg
ICBnX2Fzc2VydChmaXh0dXJlKTsKLSAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gKFdlYktpdFdl
YlZpZXcqKWZpeHR1cmUtPndlYlZpZXc7Ci0gICAgZ19hc3NlcnQodmlldyk7Ci0gICAgV2ViS2l0
RE9NRG9jdW1lbnQqIGRvY3VtZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQo
dmlldyk7Ci0gICAgZ19hc3NlcnQoZG9jdW1lbnQpOwotICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdf
T0JKRUNUKGRvY3VtZW50KSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOwotICAg
IFdlYktpdERPTUhUTUxIZWFkRWxlbWVudCogaGVhZCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0
X2hlYWQoZG9jdW1lbnQpOwotICAgIGdfYXNzZXJ0KGhlYWQpOwotICAgIGdfb2JqZWN0X3dlYWtf
cmVmKEdfT0JKRUNUKGhlYWQpLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7Ci0g
ICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQqIGJvZHkgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9i
b2R5KGRvY3VtZW50KTsKLSAgICBnX2Fzc2VydChib2R5KTsKLSAgICBnX29iamVjdF93ZWFrX3Jl
ZihHX09CSkVDVChib2R5KSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOwotICAg
IFdlYktpdERPTUhUTUxDb2xsZWN0aW9uICpjb2xsZWN0aW9uID0gd2Via2l0X2RvbV9kb2N1bWVu
dF9nZXRfbGlua3MoZG9jdW1lbnQpOwotICAgIGdfYXNzZXJ0KGNvbGxlY3Rpb24pOwotICAgIGdf
b2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGNvbGxlY3Rpb24pLCAoR1dlYWtOb3RpZnkpd2Vha19u
b3RpZnksICZjb3VudCk7Ci0KLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoV0VCS0lU
X1dFQl9WSUVXKHZpZXcpLCBIVE1MX0RPQ1VNRU5UX0xJTktTLCBOVUxMLCBOVUxMLCBOVUxMKTsK
LQotICAgIHdoaWxlIChnX21haW5fY29udGV4dF9wZW5kaW5nKE5VTEwpKQotICAgICAgICBnX21h
aW5fY29udGV4dF9pdGVyYXRpb24oTlVMTCwgRkFMU0UpOwotCi0gICAgZ19hc3NlcnRfY21wdWlu
dChjb3VudCwgPT0sIDMpOwotCi0gICAgZ19vYmplY3RfdW5yZWYoY29sbGVjdGlvbik7Ci0gICAg
Z19hc3NlcnRfY21wdWludChjb3VudCwgPT0sIDQpOwotCi0gICAgY291bnQgPSAwOwotCi0gICAg
ZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKLSAgICBn
X2Fzc2VydChkb2N1bWVudCk7Ci0gICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1QoZG9jdW1l
bnQpLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7Ci0gICAgaGVhZCA9IHdlYmtp
dF9kb21fZG9jdW1lbnRfZ2V0X2hlYWQoZG9jdW1lbnQpOwotICAgIGdfYXNzZXJ0KGhlYWQpOwot
ICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGhlYWQpLCAoR1dlYWtOb3RpZnkpd2Vha19u
b3RpZnksICZjb3VudCk7Ci0gICAgYm9keSA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2JvZHko
ZG9jdW1lbnQpOwotICAgIGdfYXNzZXJ0KGJvZHkpOwotICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdf
T0JKRUNUKGJvZHkpLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7Ci0gICAgY29s
bGVjdGlvbiA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2xpbmtzKGRvY3VtZW50KTsKLSAgICBn
X2Fzc2VydChjb2xsZWN0aW9uKTsKLSAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVDVChjb2xs
ZWN0aW9uKSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOwotICAgIC8qIEFzayB0
d2ljZSBmb3IgdGhlIHNhbWUgb2JqZWN0ICovCi0gICAgV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24q
IGNvbGxlY3Rpb24yID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfbGlua3MoZG9jdW1lbnQpOwot
ICAgIGdfYXNzZXJ0KGNvbGxlY3Rpb24yKTsKLSAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVD
VChjb2xsZWN0aW9uMiksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKLQotICAg
IGdfb2JqZWN0X3VucmVmKGRvY3VtZW50KTsKLSAgICBnX29iamVjdF91bnJlZihoZWFkKTsKLSAg
ICBnX29iamVjdF91bnJlZihib2R5KTsKLSAgICBnX29iamVjdF91bnJlZihjb2xsZWN0aW9uKTsK
LSAgICBnX29iamVjdF91bnJlZihjb2xsZWN0aW9uMik7Ci0KLSAgICBnX2Fzc2VydF9jbXB1aW50
KGNvdW50LCA9PSwgNSk7Ci0KLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoV0VCS0lU
X1dFQl9WSUVXKHZpZXcpLCBIVE1MX0RPQ1VNRU5UX0lGUkFNRSwgTlVMTCwgTlVMTCwgTlVMTCk7
Ci0KLSAgICB3aGlsZSAoZ19tYWluX2NvbnRleHRfcGVuZGluZyhOVUxMKSkKLSAgICAgICAgZ19t
YWluX2NvbnRleHRfaXRlcmF0aW9uKE5VTEwsIEZBTFNFKTsKLQotICAgIGNvdW50ID0gMDsKLQot
ICAgIGRvY3VtZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQodmlldyk7Ci0g
ICAgV2ViS2l0RE9NRWxlbWVudCogZGl2ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVu
dF9ieV9pZChkb2N1bWVudCwgInRlc3QiKTsKLSAgICBnX2Fzc2VydChkaXYpOwotICAgIGdfb2Jq
ZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGRpdiksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNv
dW50KTsKLSAgICBXZWJLaXRET01FbGVtZW50KiBpZnJhbWUgPSB3ZWJraXRfZG9tX2RvY3VtZW50
X2dldF9lbGVtZW50X2J5X2lkKGRvY3VtZW50LCAiaWZyYW1lIik7Ci0gICAgZ19hc3NlcnQoaWZy
YW1lKTsKLQotICAgIHdlYmtpdF9kb21fZWxlbWVudF9zZXRfYXR0cmlidXRlKGlmcmFtZSwgInNy
YyIsICJkYXRhOjxodG1sPjxoZWFkPjwvaGVhZD48L2h0bWw+IiwgTlVMTCk7Ci0KLSAgICB3aGls
ZSAoZ19tYWluX2NvbnRleHRfcGVuZGluZyhOVUxMKSkKLSAgICAgICAgZ19tYWluX2NvbnRleHRf
aXRlcmF0aW9uKE5VTEwsIEZBTFNFKTsKLQotICAgIFdlYktpdERPTURvY3VtZW50KiBpZnJhbWVE
b2N1bWVudCA9IHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfY29udGVudF9kb2N1
bWVudChXRUJLSVRfRE9NX0hUTUxfSUZSQU1FX0VMRU1FTlQoaWZyYW1lKSk7Ci0gICAgZ19hc3Nl
cnQoaWZyYW1lRG9jdW1lbnQpOwotICAgIGhlYWQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9o
ZWFkKGlmcmFtZURvY3VtZW50KTsKLSAgICBnX2Fzc2VydChoZWFkKTsKLSAgICBnX29iamVjdF93
ZWFrX3JlZihHX09CSkVDVChoZWFkKSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQp
OwotCi0gICAgd2Via2l0X2RvbV9lbGVtZW50X3NldF9hdHRyaWJ1dGUoaWZyYW1lLCAic3JjIiwg
ImFib3V0OmJsYW5rIiwgTlVMTCk7Ci0KLSAgICB3aGlsZSAoZ19tYWluX2NvbnRleHRfcGVuZGlu
ZyhOVUxMKSkKLSAgICAgICAgZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uKE5VTEwsIEZBTFNFKTsK
LQotICAgIGdfYXNzZXJ0X2NtcHVpbnQoY291bnQsID09LCAxKTsKLQotICAgIHdlYmtpdF93ZWJf
dmlld19sb2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcodmlldyksIEhUTUxfRE9DVU1FTlRfTElO
S1MsIE5VTEwsIE5VTEwsIE5VTEwpOwotCi0gICAgd2hpbGUgKGdfbWFpbl9jb250ZXh0X3BlbmRp
bmcoTlVMTCkpCi0gICAgICAgIGdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbihOVUxMLCBGQUxTRSk7
Ci0KLSAgICBnX2Fzc2VydF9jbXB1aW50KGNvdW50LCA9PSwgMik7Ci0KLSAgICBjb3VudCA9IDA7
Ci0KLSAgICBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50KHZpZXcp
OwotICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsKLSAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVD
VChkb2N1bWVudCksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKLSAgICAvKiBB
c2sgdHdpY2UgZm9yIHRoZSBEb2N1bWVudCAqLwotICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1
bWVudDIgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKLSAgICBnX2Fz
c2VydChkb2N1bWVudDIpOwotICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGRvY3VtZW50
MiksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKLSAgICBoZWFkID0gd2Via2l0
X2RvbV9kb2N1bWVudF9nZXRfaGVhZChkb2N1bWVudCk7Ci0gICAgZ19hc3NlcnQoaGVhZCk7Ci0g
ICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1QoaGVhZCksIChHV2Vha05vdGlmeSl3ZWFrX25v
dGlmeSwgJmNvdW50KTsKLSAgICBib2R5ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfYm9keShk
b2N1bWVudCk7Ci0gICAgZ19hc3NlcnQoYm9keSk7Ci0gICAgZ19vYmplY3Rfd2Vha19yZWYoR19P
QkpFQ1QoYm9keSksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKLSAgICBjb2xs
ZWN0aW9uID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfbGlua3MoZG9jdW1lbnQpOwotICAgIGdf
YXNzZXJ0KGNvbGxlY3Rpb24pOwotICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGNvbGxl
Y3Rpb24pLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7Ci0KLSAgICBndGtfd2lk
Z2V0X2Rlc3Ryb3koZml4dHVyZS0+d2ViVmlldyk7Ci0gICAgZml4dHVyZS0+d2ViVmlldyA9IE5V
TEw7Ci0KLSAgICBnX2Fzc2VydF9jbXB1aW50KGNvdW50LCA9PSwgNCk7Ci0KLSAgICBnX29iamVj
dF91bnJlZihjb2xsZWN0aW9uKTsKLQotICAgIGdfYXNzZXJ0X2NtcHVpbnQoY291bnQsID09LCA1
KTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotewotICAgIGd0a190ZXN0
X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLQotICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2RvbWRvY3Vt
ZW50L3Rlc3RfdGl0bGUiLAotICAgICAgICAgICAgICAgRG9tRG9jdW1lbnRGaXh0dXJlLCBIVE1M
X0RPQ1VNRU5UX1RJVExFLAotICAgICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfc2V0
dXAsCi0gICAgICAgICAgICAgICB0ZXN0X2RvbV9kb2N1bWVudF90aXRsZSwKLSAgICAgICAgICAg
ICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKTsKLQotICAgIGdfdGVzdF9hZGQoIi93
ZWJraXQvZG9tZG9jdW1lbnQvdGVzdF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWUiLAotICAgICAg
ICAgICAgICAgRG9tRG9jdW1lbnRGaXh0dXJlLCBIVE1MX0RPQ1VNRU5UX0VMRU1FTlRTLAotICAg
ICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0
ZXN0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWUsCi0gICAgICAgICAgICAg
ICBkb21fZG9jdW1lbnRfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Vi
a2l0L2RvbWRvY3VtZW50L3Rlc3RfZ2V0X2VsZW1lbnRzX2J5X2NsYXNzX25hbWUiLAotICAgICAg
ICAgICAgICAgRG9tRG9jdW1lbnRGaXh0dXJlLCBIVE1MX0RPQ1VNRU5UX0VMRU1FTlRTX0NMQVNT
LAotICAgICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAg
ICAgICB0ZXN0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfY2xhc3NfbmFtZSwKLSAgICAg
ICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKTsKLQotICAgIGdfdGVzdF9h
ZGQoIi93ZWJraXQvZG9tZG9jdW1lbnQvdGVzdF9nZXRfZWxlbWVudF9ieV9pZCIsCi0gICAgICAg
ICAgICAgICBEb21Eb2N1bWVudEZpeHR1cmUsIEhUTUxfRE9DVU1FTlRfRUxFTUVOVFNfSUQsCi0g
ICAgICAgICAgICAgICBkb21fZG9jdW1lbnRfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAg
IHRlc3RfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50X2J5X2lkLAotICAgICAgICAgICAgICAgZG9t
X2RvY3VtZW50X2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9k
b21kb2N1bWVudC90ZXN0X2dldF9saW5rcyIsCi0gICAgICAgICAgICAgICBEb21Eb2N1bWVudEZp
eHR1cmUsIEhUTUxfRE9DVU1FTlRfTElOS1MsCi0gICAgICAgICAgICAgICBkb21fZG9jdW1lbnRf
Zml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3RfZG9tX2RvY3VtZW50X2dldF9saW5r
cywKLSAgICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKTsKLQotICAg
IGdfdGVzdF9hZGQoIi93ZWJraXQvZG9tZG9jdW1lbnQvdGVzdF90YWJsZV9pbnNlcnRfcm93IiwK
LSAgICAgICAgICAgICAgIERvbURvY3VtZW50Rml4dHVyZSwgSFRNTF9ET0NVTUVOVF9UQUJMRSwK
LSAgICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3NldHVwLAotICAgICAgICAgICAg
ICAgdGVzdF9kb21fZG9jdW1lbnRfaW5zZXJ0X3JvdywKLSAgICAgICAgICAgICAgIGRvbV9kb2N1
bWVudF9maXh0dXJlX3RlYXJkb3duKTsKLQotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvZG9tZG9j
dW1lbnQvdGVzdF9kb2N1bWVudF9ldmFsdWF0ZSIsCi0gICAgICAgICAgICAgICBEb21Eb2N1bWVu
dEZpeHR1cmUsIEhUTUxfRE9DVU1FTlRfRVZBTFVBVEUsCi0gICAgICAgICAgICAgICBkb21fZG9j
dW1lbnRfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3RfZG9tX2RvY3VtZW50X2V2
YWx1YXRlLAotICAgICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfdGVhcmRvd24pOwot
Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9kb21kb2N1bWVudC90ZXN0X2dhcmJhZ2VfY29sbGVj
dGlvbiIsCi0gICAgICAgICAgICAgICBEb21Eb2N1bWVudEZpeHR1cmUsIEhUTUxfRE9DVU1FTlRf
TElOS1MsCi0gICAgICAgICAgICAgICBkb21fZG9jdW1lbnRfZml4dHVyZV9zZXR1cCwKLSAgICAg
ICAgICAgICAgIHRlc3RfZG9tX2RvY3VtZW50X2dhcmJhZ2VfY29sbGVjdGlvbiwKLSAgICAgICAg
ICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKTsKLQotICAgIHJldHVybiBnX3Rl
c3RfcnVuKCk7Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rk
b21kb213aW5kb3cuYyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rkb21kb213aW5kb3cu
YwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRmY2QxOC4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0ZG9tZG9td2luZG93LmMKKysrIC9kZXYvbnVsbApA
QCAtMSwyNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAidGVzdF91dGlscy5oIgotCi0jaW5jbHVkZSA8
Z2xpYi5oPgotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgot
I2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KLQotI2RlZmluZSBIVE1MX0RPQ1VNRU5UICI8aHRt
bD48aGVhZD48dGl0bGU+PC90aXRsZT48L2hlYWQ+PHN0eWxlIHR5cGU9J3RleHQvY3NzJz4jdGVz
dCB7IGZvbnQtc2l6ZTogMTZweDsgfTwvc3R5bGU+PGJvZHk+PHAgaWQ9J3Rlc3QnPnRlc3Q8L3A+
PC9ib2R5PjwvaHRtbD4iCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBHdGtXaWRnZXQqIHdlYlZp
ZXc7Ci0gICAgR3RrV2lkZ2V0KiB3aW5kb3c7Ci0gICAgV2ViS2l0RE9NRE9NV2luZG93KiBkb21X
aW5kb3c7Ci0gICAgR01haW5Mb29wKiBsb29wOwotCi0gICAgZ2Jvb2xlYW4gbG9hZGVkOwotICAg
IGdib29sZWFuIGNsaWNrZWQ7Ci0gICAgZ2NvbnN0cG9pbnRlciBkYXRhOwotfSBEb21Eb212aWV3
Rml4dHVyZTsKLQotc3RhdGljIGdib29sZWFuIGZpbmlzaF9sb2FkaW5nKERvbURvbXZpZXdGaXh0
dXJlKiBmaXh0dXJlKQotewotICAgIGlmIChnX21haW5fbG9vcF9pc19ydW5uaW5nKGZpeHR1cmUt
Pmxvb3ApKQotICAgICAgICBnX21haW5fbG9vcF9xdWl0KGZpeHR1cmUtPmxvb3ApOwotCi0gICAg
cmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCBkb21fZG9tdmlld19maXh0dXJlX3NldHVw
KERvbURvbXZpZXdGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAg
Zml4dHVyZS0+bG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLSAgICBmaXh0dXJl
LT53aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKLSAgICBmaXh0
dXJlLT53ZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygpOwotICAgIGZpeHR1cmUtPmRhdGEg
PSBkYXRhOwotCi0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihmaXh0dXJlLT53
aW5kb3cpLCBHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpKTsKLX0KLQotc3RhdGljIHZvaWQg
ZG9tX2RvbXZpZXdfZml4dHVyZV90ZWFyZG93bihEb21Eb212aWV3Rml4dHVyZSogZml4dHVyZSwg
Z2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGd0a193aWRnZXRfZGVzdHJveShmaXh0dXJlLT53
aW5kb3cpOwotICAgIGdfbWFpbl9sb29wX3VucmVmKGZpeHR1cmUtPmxvb3ApOwotfQotCi1zdGF0
aWMgdm9pZCBkb21fZG9tX3dpbmRvd19maXh0dXJlX3NldHVwKERvbURvbXZpZXdGaXh0dXJlKiBm
aXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZml4dHVyZS0+bG9vcCA9IGdfbWFp
bl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLSAgICBmaXh0dXJlLT53ZWJWaWV3ID0gd2Via2l0X3dl
Yl92aWV3X25ldygpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKGZpeHR1cmUtPndlYlZpZXcpOwot
Ci0gICAgaWYgKGRhdGEgIT0gTlVMTCkKLSAgICAgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3Ry
aW5nKFdFQktJVF9XRUJfVklFVyAoZml4dHVyZS0+d2ViVmlldyksIChjb25zdCBjaGFyKikgZGF0
YSwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0KLSAgICBnX2lkbGVfYWRkKChHU291cmNlRnVuYylmaW5p
c2hfbG9hZGluZywgZml4dHVyZSk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1cmUtPmxvb3Ap
OwotfQotCi1zdGF0aWMgdm9pZCBkb21fZG9tX3dpbmRvd19maXh0dXJlX3RlYXJkb3duKERvbURv
bXZpZXdGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgaWYgKGZp
eHR1cmUtPndlYlZpZXcpCi0gICAgICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPndlYlZpZXcp
OwotICAgIGdfbWFpbl9sb29wX3VucmVmKGZpeHR1cmUtPmxvb3ApOwotfQotCi1zdGF0aWMgZ2Jv
b2xlYW4gbG9hZGVkQ2FsbGJhY2soV2ViS2l0RE9NRE9NV2luZG93KiB2aWV3LCBXZWJLaXRET01F
dmVudCogZXZlbnQsIERvbURvbXZpZXdGaXh0dXJlKiBmaXh0dXJlKQotewotICAgIGdfYXNzZXJ0
KGZpeHR1cmUtPmxvYWRlZCA9PSBGQUxTRSk7Ci0gICAgZml4dHVyZS0+bG9hZGVkID0gVFJVRTsK
LQotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGdib29sZWFuIGNsaWNrZWRDYWxsYmFj
ayhXZWJLaXRET01ET01XaW5kb3cqIHZpZXcsIFdlYktpdERPTUV2ZW50KiBldmVudCwgRG9tRG9t
dmlld0ZpeHR1cmUqIGZpeHR1cmUpCi17Ci0gICAgV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdl
dDsKLSAgICBndXNob3J0IHBoYXNlOwotCi0gICAgZ19hc3NlcnQoZXZlbnQpOwotICAgIGdfYXNz
ZXJ0KFdFQktJVF9ET01fSVNfRVZFTlQoZXZlbnQpKTsKLQotICAgIC8vIFdlIHNob3VsZCBjYXRj
aCB0aGlzIGluIHRoZSBidWJibGluZyB1cCBwaGFzZSwgc2luY2Ugd2UgYXJlIGNvbm5lY3Rpbmcg
dG8gdGhlIHRvcGxldmVsIG9iamVjdAotICAgIHBoYXNlID0gd2Via2l0X2RvbV9ldmVudF9nZXRf
ZXZlbnRfcGhhc2UoZXZlbnQpOwotICAgIGdfYXNzZXJ0X2NtcGludChwaGFzZSwgPT0sIDMpOwot
Ci0gICAgdGFyZ2V0ID0gd2Via2l0X2RvbV9ldmVudF9nZXRfY3VycmVudF90YXJnZXQoZXZlbnQp
OwotICAgIGdfYXNzZXJ0KHRhcmdldCA9PSBXRUJLSVRfRE9NX0VWRU5UX1RBUkdFVCh2aWV3KSk7
Ci0KLSAgICBnX2Fzc2VydChmaXh0dXJlLT5jbGlja2VkID09IEZBTFNFKTsKLSAgICBmaXh0dXJl
LT5jbGlja2VkID0gVFJVRTsKLQotICAgIGZpbmlzaF9sb2FkaW5nKGZpeHR1cmUpOwotCi0gICAg
cmV0dXJuIEZBTFNFOwotfQotCi1nYm9vbGVhbiBtYXBfZXZlbnRfY2IoR3RrV2lkZ2V0ICp3aWRn
ZXQsIEdka0V2ZW50KiBldmVudCwgRG9tRG9tdmlld0ZpeHR1cmUqIGZpeHR1cmUpCi17Ci0gICAg
d2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklFVyAoZml4dHVyZS0+d2Vi
VmlldyksIChjb25zdCBjaGFyKilmaXh0dXJlLT5kYXRhLCBOVUxMLCBOVUxMLCBOVUxMKTsKLQot
ICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQgbG9hZF9ldmVudF9jYWxsYmFjayhX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHUGFyYW1TcGVjKiBzcGVjLCBEb21Eb212aWV3Rml4dHVy
ZSogZml4dHVyZSkKLXsKLSAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJf
dmlld19nZXRfbG9hZF9zdGF0dXMod2ViVmlldyk7Ci0gICAgaWYgKHN0YXR1cyA9PSBXRUJLSVRf
TE9BRF9GSU5JU0hFRCkgewotICAgICAgICB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9hZGRfZXZl
bnRfbGlzdGVuZXIoV0VCS0lUX0RPTV9FVkVOVF9UQVJHRVQoZml4dHVyZS0+ZG9tV2luZG93KSwg
ImNsaWNrIiwgR19DQUxMQkFDSyhjbGlja2VkQ2FsbGJhY2spLCBmYWxzZSwgZml4dHVyZSk7Ci0K
LSAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+Y2xpY2tlZCA9PSBGQUxTRSk7Ci0gICAgICAgIGd0
a190ZXN0X3dpZGdldF9jbGljayhHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpLCAxLCAwKTsK
LSAgICB9Ci0KLX0KLQotc3RhdGljIHZvaWQgdGVzdF9kb21fZG9tdmlld19zaWduYWxzKERvbURv
bXZpZXdGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19hc3Nl
cnQoZml4dHVyZSk7Ci0gICAgV2ViS2l0V2ViVmlldyogdmlldyA9IChXZWJLaXRXZWJWaWV3Kilm
aXh0dXJlLT53ZWJWaWV3OwotICAgIGdfYXNzZXJ0KHZpZXcpOwotICAgIFdlYktpdERPTURvY3Vt
ZW50KiBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50KHZpZXcpOwot
ICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsKLSAgICBXZWJLaXRET01ET01XaW5kb3cqIGRvbVdpbmRv
dyA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2RlZmF1bHRfdmlldyhkb2N1bWVudCk7Ci0gICAg
Z19hc3NlcnQoZG9tV2luZG93KTsKLQotICAgIGZpeHR1cmUtPmRvbVdpbmRvdyA9IGRvbVdpbmRv
dzsKLQotICAgIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2FkZF9ldmVudF9saXN0ZW5lcihXRUJL
SVRfRE9NX0VWRU5UX1RBUkdFVChmaXh0dXJlLT5kb21XaW5kb3cpLCAibG9hZCIsIEdfQ0FMTEJB
Q0sobG9hZGVkQ2FsbGJhY2spLCBmYWxzZSwgZml4dHVyZSk7Ci0gICAgZ19zaWduYWxfY29ubmVj
dChmaXh0dXJlLT53aW5kb3csICJtYXAtZXZlbnQiLCBHX0NBTExCQUNLKG1hcF9ldmVudF9jYiks
IGZpeHR1cmUpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2ViVmlldywgIm5vdGlm
eTo6bG9hZC1zdGF0dXMiLCBHX0NBTExCQUNLKGxvYWRfZXZlbnRfY2FsbGJhY2spLCBmaXh0dXJl
KTsKLQotICAgIGd0a193aWRnZXRfc2hvd19hbGwoZml4dHVyZS0+d2luZG93KTsKLSAgICBndGtf
d2luZG93X3ByZXNlbnQoR1RLX1dJTkRPVyhmaXh0dXJlLT53aW5kb3cpKTsKLQotICAgIGdfbWFp
bl9sb29wX3J1bihmaXh0dXJlLT5sb29wKTsKLQotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmxvYWRl
ZCk7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+Y2xpY2tlZCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVh
bgotY2xpY2tlZF9jYihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVu
dCogZXZlbnQsIERvbURvbXZpZXdGaXh0dXJlKiBmaXh0dXJlKQotewotICAgIGdfYXNzZXJ0KGZp
eHR1cmUtPmNsaWNrZWQgPT0gRkFMU0UpOwotICAgIGZpeHR1cmUtPmNsaWNrZWQgPSBUUlVFOwot
ICAgIGZpbmlzaF9sb2FkaW5nKGZpeHR1cmUpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3Rh
dGljIHZvaWQgbG9hZF9zdGF0dXNfY2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgR1Bh
cmFtU3BlYyogc3BlYywgRG9tRG9tdmlld0ZpeHR1cmUqIGZpeHR1cmUpCi17Ci0gICAgV2ViS2l0
TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYlZp
ZXcpOwotICAgIGlmIChzdGF0dXMgPT0gV0VCS0lUX0xPQURfRklOSVNIRUQpIHsKLSAgICAgICAg
V2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50OwotICAgICAgICBXZWJLaXRET01ET01XaW5kb3cq
IGRvbVdpbmRvdzsKLSAgICAgICAgV2ViS2l0RE9NRWxlbWVudCogZWxlbWVudDsKLSAgICAgICAg
V2ViS2l0RE9NRXZlbnQqIGV2ZW50OwotICAgICAgICBnbG9uZyBjbGllbnRYLCBjbGllbnRZOwot
Ci0gICAgICAgIGRvY3VtZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQoV0VC
S0lUX1dFQl9WSUVXKGZpeHR1cmUtPndlYlZpZXcpKTsKLSAgICAgICAgZ19hc3NlcnQoZG9jdW1l
bnQpOwotICAgICAgICBkb21XaW5kb3cgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9kZWZhdWx0
X3ZpZXcoZG9jdW1lbnQpOwotICAgICAgICBnX2Fzc2VydChkb21XaW5kb3cpOwotICAgICAgICBm
aXh0dXJlLT5kb21XaW5kb3cgPSBkb21XaW5kb3c7Ci0KLSAgICAgICAgZWxlbWVudCA9IHdlYmtp
dF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRfYnlfaWQoZG9jdW1lbnQsICJ0ZXN0Iik7Ci0gICAg
ICAgIGdfYXNzZXJ0KGVsZW1lbnQpOwotICAgICAgICBldmVudCA9IHdlYmtpdF9kb21fZG9jdW1l
bnRfY3JlYXRlX2V2ZW50KGRvY3VtZW50LCAiTW91c2VFdmVudCIsIE5VTEwpOwotICAgICAgICBn
X2Fzc2VydChldmVudCk7Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfRVZFTlQoZXZl
bnQpKTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19NT1VTRV9FVkVOVChldmVudCkp
OwotICAgICAgICBjbGllbnRYID0gd2Via2l0X2RvbV9lbGVtZW50X2dldF9jbGllbnRfbGVmdChl
bGVtZW50KTsKLSAgICAgICAgY2xpZW50WSA9IHdlYmtpdF9kb21fZWxlbWVudF9nZXRfY2xpZW50
X3RvcChlbGVtZW50KTsKLSAgICAgICAgd2Via2l0X2RvbV9tb3VzZV9ldmVudF9pbml0X21vdXNl
X2V2ZW50KFdFQktJVF9ET01fTU9VU0VfRVZFTlQoZXZlbnQpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNsaWNrIiwgVFJVRSwgVFJVRSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeHR1cmUtPmRvbVdp
bmRvdywgMCwgMCwgMCwgY2xpZW50WCwgY2xpZW50WSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLCBGQUxTRSwgRkFMU0UsIEZBTFNFLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgV0VCS0lUX0RP
TV9FVkVOVF9UQVJHRVQoZWxlbWVudCkpOwotICAgICAgICB3ZWJraXRfZG9tX2V2ZW50X3Rhcmdl
dF9hZGRfZXZlbnRfbGlzdGVuZXIoV0VCS0lUX0RPTV9FVkVOVF9UQVJHRVQoZWxlbWVudCksICJj
bGljayIsIEdfQ0FMTEJBQ0soY2xpY2tlZF9jYiksIGZhbHNlLCBmaXh0dXJlKTsKLSAgICAgICAg
Z19hc3NlcnQoZml4dHVyZS0+Y2xpY2tlZCA9PSBGQUxTRSk7Ci0gICAgICAgIHdlYmtpdF9kb21f
ZXZlbnRfdGFyZ2V0X2Rpc3BhdGNoX2V2ZW50KFdFQktJVF9ET01fRVZFTlRfVEFSR0VUKGVsZW1l
bnQpLCBldmVudCwgTlVMTCk7Ci0gICAgfQotCi19Ci0KLXN0YXRpYyB2b2lkIHRlc3RfZG9tX2Rv
bXZpZXdfZGlzcGF0Y2hfZXZlbnQoRG9tRG9tdmlld0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBv
aW50ZXIgZGF0YSkKLXsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndpbmRvdywgIm1h
cC1ldmVudCIsIEdfQ0FMTEJBQ0sobWFwX2V2ZW50X2NiKSwgZml4dHVyZSk7Ci0gICAgZ19zaWdu
YWxfY29ubmVjdChmaXh0dXJlLT53ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FM
TEJBQ0sobG9hZF9zdGF0dXNfY2FsbGJhY2spLCBmaXh0dXJlKTsKLQotICAgIGd0a193aWRnZXRf
c2hvd19hbGwoZml4dHVyZS0+d2luZG93KTsKLSAgICBndGtfd2luZG93X3ByZXNlbnQoR1RLX1dJ
TkRPVyhmaXh0dXJlLT53aW5kb3cpKTsKLQotICAgIGdfbWFpbl9sb29wX3J1biAoZml4dHVyZS0+
bG9vcCk7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+Y2xpY2tlZCk7Ci19Ci0KLXN0YXRpYyB2b2lk
IHRlc3RfZG9tX2RvbV93aW5kb3dfZ2V0X2NvbXB1dGVkX3N0eWxlKERvbURvbXZpZXdGaXh0dXJl
KiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgV2ViS2l0RE9NRG9jdW1lbnQq
IGRvY3VtZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQoV0VCS0lUX1dFQl9W
SUVXKGZpeHR1cmUtPndlYlZpZXcpKTsKLSAgICBnX2Fzc2VydChkb2N1bWVudCk7Ci0gICAgV2Vi
S2l0RE9NRE9NV2luZG93KiBkb21XaW5kb3cgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9kZWZh
dWx0X3ZpZXcoZG9jdW1lbnQpOwotICAgIGdfYXNzZXJ0KGRvbVdpbmRvdyk7Ci0KLSAgICBXZWJL
aXRET01FbGVtZW50KiAgZWxlbWVudCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRf
YnlfaWQoZG9jdW1lbnQsICJ0ZXN0Iik7Ci0gICAgZ19hc3NlcnQoZWxlbWVudCk7Ci0gICAgZ19h
c3NlcnQoV0VCS0lUX0RPTV9JU19FTEVNRU5UKGVsZW1lbnQpKTsKLSAgICBXZWJLaXRET01DU1NT
dHlsZURlY2xhcmF0aW9uKiBjc3NTdHlsZSA9IHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfY29t
cHV0ZWRfc3R5bGUoZG9tV2luZG93LCBlbGVtZW50LCBOVUxMKTsKLSAgICBnY2hhciogZm9udFNp
emUgPSB3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlvbl9nZXRfcHJvcGVydHlfdmFsdWUo
Y3NzU3R5bGUsICJmb250LXNpemUiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoZm9udFNpemUsID09
LCAiMTZweCIpOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCi17Ci0gICAg
Z3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOwotCi0gICAgZ190ZXN0X2J1Z19iYXNl
KCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKLQotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQv
ZG9tZG9tdmlldy9zaWduYWxzIiwKLSAgICAgICAgICAgICAgIERvbURvbXZpZXdGaXh0dXJlLCBI
VE1MX0RPQ1VNRU5ULAotICAgICAgICAgICAgICAgZG9tX2RvbXZpZXdfZml4dHVyZV9zZXR1cCwK
LSAgICAgICAgICAgICAgIHRlc3RfZG9tX2RvbXZpZXdfc2lnbmFscywKLSAgICAgICAgICAgICAg
IGRvbV9kb212aWV3X2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtp
dC9kb21kb212aWV3L2Rpc3BhdGNoX2V2ZW50IiwKLSAgICAgICAgICAgICAgIERvbURvbXZpZXdG
aXh0dXJlLCBIVE1MX0RPQ1VNRU5ULAotICAgICAgICAgICAgICAgZG9tX2RvbXZpZXdfZml4dHVy
ZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3RfZG9tX2RvbXZpZXdfZGlzcGF0Y2hfZXZlbnQs
Ci0gICAgICAgICAgICAgICBkb21fZG9tdmlld19maXh0dXJlX3RlYXJkb3duKTsKLQotICAgIGdf
dGVzdF9hZGQoIi93ZWJraXQvZG9tZG9td2luZG93L2dldF9jb21wdXRlZF9zdHlsZSIsCi0gICAg
ICAgICAgICAgICBEb21Eb212aWV3Rml4dHVyZSwgSFRNTF9ET0NVTUVOVCwKLSAgICAgICAgICAg
ICAgIGRvbV9kb21fd2luZG93X2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X2Rv
bV9kb21fd2luZG93X2dldF9jb21wdXRlZF9zdHlsZSwKLSAgICAgICAgICAgICAgIGRvbV9kb21f
d2luZG93X2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsKLX0K
LQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvbW5vZGUuYyBiL1Nv
dXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rkb21ub2RlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGVkNGJjYmQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMv
dGVzdGRvbW5vZGUuYworKysgL2Rldi9udWxsCkBAIC0xLDIxOSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJ0ZXN0X3V0aWxzLmgiCi0KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z2xpYi9nc3Rk
aW8uaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgot
Ci0jZGVmaW5lIEhUTUxfRE9DVU1FTlRfSElFUkFSQ0hZX05BVklHQVRJT04gIjxodG1sPjxoZWFk
Pjx0aXRsZT5UaGlzIGlzIHRoZSB0aXRsZTwvdGl0bGU+PC9oZWFkPjxib2R5PjxwPjE8L3A+PHA+
MjwvcD48cD4zPC9wPjwvYm9keT48L2h0bWw+IgotI2RlZmluZSBIVE1MX0RPQ1VNRU5UX05PREVf
SU5TRVJUSU9OICI8aHRtbD48Ym9keT48L2JvZHk+PC9odG1sPiIKLQotdHlwZWRlZiBzdHJ1Y3Qg
ewotICAgIEd0a1dpZGdldCogd2ViVmlldzsKLSAgICBHTWFpbkxvb3AqIGxvb3A7Ci19IERvbU5v
ZGVGaXh0dXJlOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZmluaXNoX2xvYWRpbmcoRG9tTm9kZUZpeHR1
cmUqIGZpeHR1cmUpCi17Ci0gICAgaWYgKGdfbWFpbl9sb29wX2lzX3J1bm5pbmcoZml4dHVyZS0+
bG9vcCkpCi0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQoZml4dHVyZS0+bG9vcCk7Ci0KLSAgICBy
ZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lkIGRvbV9ub2RlX2ZpeHR1cmVfc2V0dXAoRG9t
Tm9kZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBmaXh0dXJl
LT5sb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotICAgIGZpeHR1cmUtPndlYlZp
ZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7Ci0gICAgZ19vYmplY3RfcmVmX3NpbmsoZml4dHVy
ZS0+d2ViVmlldyk7Ci0KLSAgICBpZiAoZGF0YSAhPSBOVUxMKQotICAgICAgICB3ZWJraXRfd2Vi
X3ZpZXdfbG9hZF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVXKGZpeHR1cmUtPndlYlZpZXcpLCAoY29u
c3QgY2hhciopZGF0YSwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0KLSAgICBnX2lkbGVfYWRkKChHU291
cmNlRnVuYylmaW5pc2hfbG9hZGluZywgZml4dHVyZSk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGZp
eHR1cmUtPmxvb3ApOwotfQotCi1zdGF0aWMgdm9pZCBkb21fbm9kZV9maXh0dXJlX3RlYXJkb3du
KERvbU5vZGVGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19v
YmplY3RfdW5yZWYoZml4dHVyZS0+d2ViVmlldyk7Ci0gICAgZ19tYWluX2xvb3BfdW5yZWYoZml4
dHVyZS0+bG9vcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RfZG9tX25vZGVfaGllcmFyY2h5X25h
dmlnYXRpb24oRG9tTm9kZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsK
LSAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQ7Ci0gICAgV2ViS2l0RE9NSFRNTEhlYWRF
bGVtZW50KiBoZWFkOwotICAgIFdlYktpdERPTUhUTUxCb2R5RWxlbWVudCogYm9keTsKLSAgICBX
ZWJLaXRET01Ob2RlTGlzdCogbGlzdDsKLSAgICBXZWJLaXRET01Ob2RlKiBwdHI7Ci0gICAgZ3Vs
b25nIGksIGxlbmd0aDsKLQotICAgIGRvY3VtZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9kb21f
ZG9jdW1lbnQoV0VCS0lUX1dFQl9WSUVXKGZpeHR1cmUtPndlYlZpZXcpKTsKLSAgICBnX2Fzc2Vy
dChkb2N1bWVudCk7Ci0gICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChkb2N1bWVu
dCkpOwotICAgIGhlYWQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9oZWFkKGRvY3VtZW50KTsK
LSAgICBnX2Fzc2VydChoZWFkKTsKLSAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfSEVB
RF9FTEVNRU5UKGhlYWQpKTsKLQotICAgIC8qIFRpdGxlLCBoZWFkJ3MgY2hpbGQgKi8KLSAgICBn
X2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaGFzX2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERSho
ZWFkKSkpOwotICAgIGxpc3QgPSB3ZWJraXRfZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVzKFdFQktJ
VF9ET01fTk9ERShoZWFkKSk7Ci0gICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9kb21fbm9kZV9s
aXN0X2dldF9sZW5ndGgobGlzdCksID09LCAxKTsKLSAgICBwdHIgPSB3ZWJraXRfZG9tX25vZGVf
bGlzdF9pdGVtKGxpc3QsIDApOwotICAgIGdfYXNzZXJ0KHB0cik7Ci0gICAgZ19hc3NlcnQoV0VC
S0lUX0RPTV9JU19IVE1MX1RJVExFX0VMRU1FTlQocHRyKSk7Ci0gICAgZ19vYmplY3RfdW5yZWYo
bGlzdCk7Ci0KLSAgICAvKiBCb2R5LCBIZWFkIHNpYmxpbmcgKi8KLSAgICBwdHIgPSB3ZWJraXRf
ZG9tX25vZGVfZ2V0X25leHRfc2libGluZyhXRUJLSVRfRE9NX05PREUoaGVhZCkpOwotICAgIGdf
YXNzZXJ0KHB0cik7Ci0gICAgYm9keSA9IFdFQktJVF9ET01fSFRNTF9CT0RZX0VMRU1FTlQocHRy
KTsKLSAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfQk9EWV9FTEVNRU5UKGJvZHkpKTsK
LQotICAgIC8qIFRoZXJlIGlzIG5vIHRoaXJkIHNpYmxpbmcgKi8KLSAgICBwdHIgPSB3ZWJraXRf
ZG9tX25vZGVfZ2V0X25leHRfc2libGluZyhwdHIpOwotICAgIGdfYXNzZXJ0KHB0ciA9PSBOVUxM
KTsKLQotICAgIC8qIEJvZHkncyBwcmV2aW91cyBzaWJsaW5nIGlzIEhlYWQgKi8KLSAgICBwdHIg
PSB3ZWJraXRfZG9tX25vZGVfZ2V0X3ByZXZpb3VzX3NpYmxpbmcoV0VCS0lUX0RPTV9OT0RFKGJv
ZHkpKTsKLSAgICBnX2Fzc2VydChwdHIpOwotICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRN
TF9IRUFEX0VMRU1FTlQocHRyKSk7Ci0KLSAgICAvKiBCb2R5IGhhcyAzIGNoaWxkcmVuICovCi0g
ICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2hhc19jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05P
REUoYm9keSkpKTsKLSAgICBsaXN0ID0gd2Via2l0X2RvbV9ub2RlX2dldF9jaGlsZF9ub2RlcyhX
RUJLSVRfRE9NX05PREUoYm9keSkpOwotICAgIGxlbmd0aCA9IHdlYmtpdF9kb21fbm9kZV9saXN0
X2dldF9sZW5ndGgobGlzdCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGxlbmd0aCwgPT0sIDMpOwot
Ci0gICAgLyogVGhlIHRocmVlIG9mIHRoZW0gYXJlIFAgdGFncyAqLwotICAgIGZvciAoaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBwdHIgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9p
dGVtKGxpc3QsIGkpOwotICAgICAgICBnX2Fzc2VydChwdHIpOwotICAgICAgICBnX2Fzc2VydChX
RUJLSVRfRE9NX0lTX0hUTUxfUEFSQUdSQVBIX0VMRU1FTlQocHRyKSk7Ci0gICAgfQotCi0gICAg
LyogR28gYmFja3dhcmRzICovCi0gICAgZm9yIChpID0gMDsgcHRyOyBwdHIgPSB3ZWJraXRfZG9t
X25vZGVfZ2V0X3ByZXZpb3VzX3NpYmxpbmcocHRyKSwgaSsrKQotICAgICAgICAvKiBOb3RoaW5n
ICovOwotCi0gICAgZ19hc3NlcnRfY21waW50KGksID09LCAzKTsKLSAgICBnX29iamVjdF91bnJl
ZihsaXN0KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF9kb21fbm9kZV9pbnNlcnRpb24oRG9tTm9k
ZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBXZWJLaXRET01E
b2N1bWVudCogZG9jdW1lbnQ7Ci0gICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQqIGJvZHk7Ci0gICAg
V2ViS2l0RE9NRWxlbWVudCogcCwgKmRpdjsKLSAgICBXZWJLaXRET01Ob2RlTGlzdCogbGlzdDsK
LSAgICBXZWJLaXRET01Ob2RlKiBub2RlOwotCi0gICAgZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X2RvbV9kb2N1bWVudChXRUJLSVRfV0VCX1ZJRVcoZml4dHVyZS0+d2ViVmlldykpOwot
ICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsKLSAgICBib2R5ID0gd2Via2l0X2RvbV9kb2N1bWVudF9n
ZXRfYm9keShkb2N1bWVudCk7Ci0gICAgZ19hc3NlcnQoYm9keSk7Ci0gICAgZ19hc3NlcnQoV0VC
S0lUX0RPTV9JU19IVE1MX0VMRU1FTlQoYm9keSkpOwotCi0gICAgLyogQm9keSBzaG91bGRuJ3Qg
aGF2ZSBhbnkgY2hpbGRyZW4gYXQgdGhpcyBwb2ludCAqLwotICAgIGdfYXNzZXJ0KHdlYmtpdF9k
b21fbm9kZV9oYXNfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKSA9PSBGQUxTRSk7
Ci0KLSAgICAvKiBJbnNlcnQgb25lIFAgZWxlbWVudCAqLwotICAgIHAgPSB3ZWJraXRfZG9tX2Rv
Y3VtZW50X2NyZWF0ZV9lbGVtZW50KGRvY3VtZW50LCAiUCIsIE5VTEwpOwotICAgIHdlYmtpdF9k
b21fbm9kZV9hcHBlbmRfY2hpbGQoV0VCS0lUX0RPTV9OT0RFKGJvZHkpLCBXRUJLSVRfRE9NX05P
REUocCksIE5VTEwpOwotCi0gICAgLyogTm93IGl0IHNob3VsZCBoYXZlIG9uZSwgdGhlIHNhbWUg
dGhhdCB3ZSBpbnNlcnRlZCAqLwotICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9oYXNfY2hp
bGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKSk7Ci0gICAgbGlzdCA9IHdlYmtpdF9kb21f
bm9kZV9nZXRfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQod2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChsaXN0KSwgPT0sIDEpOwot
ICAgIG5vZGUgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtKGxpc3QsIDApOwotICAgIGdfYXNz
ZXJ0KG5vZGUpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9pc19zYW1lX25vZGUoV0VC
S0lUX0RPTV9OT0RFKHApLCBub2RlKSk7Ci0gICAgZ19vYmplY3RfdW5yZWYobGlzdCk7Ci0KLSAg
ICAvKiBSZXBsYWNlIHRoZSBQIHRhZyB3aXRoIGEgRElWIHRhZyAqLwotICAgIGRpdiA9IHdlYmtp
dF9kb21fZG9jdW1lbnRfY3JlYXRlX2VsZW1lbnQoZG9jdW1lbnQsICJESVYiLCBOVUxMKTsKLSAg
ICB3ZWJraXRfZG9tX25vZGVfcmVwbGFjZV9jaGlsZChXRUJLSVRfRE9NX05PREUoYm9keSksIFdF
QktJVF9ET01fTk9ERShkaXYpLCBXRUJLSVRfRE9NX05PREUocCksIE5VTEwpOwotICAgIGdfYXNz
ZXJ0KHdlYmtpdF9kb21fbm9kZV9oYXNfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkp
KSk7Ci0gICAgbGlzdCA9IHdlYmtpdF9kb21fbm9kZV9nZXRfY2hpbGRfbm9kZXMoV0VCS0lUX0RP
TV9OT0RFKGJvZHkpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X2RvbV9ub2RlX2xpc3Rf
Z2V0X2xlbmd0aChsaXN0KSwgPT0sIDEpOwotICAgIG5vZGUgPSB3ZWJraXRfZG9tX25vZGVfbGlz
dF9pdGVtKGxpc3QsIDApOwotICAgIGdfYXNzZXJ0KG5vZGUpOwotICAgIGdfYXNzZXJ0KHdlYmtp
dF9kb21fbm9kZV9pc19zYW1lX25vZGUoV0VCS0lUX0RPTV9OT0RFKGRpdiksIG5vZGUpKTsKLSAg
ICBnX29iamVjdF91bnJlZihsaXN0KTsKLQotICAgIC8qIE5vdyByZW1vdmUgdGhlIHRhZyAqLwot
ICAgIHdlYmtpdF9kb21fbm9kZV9yZW1vdmVfY2hpbGQoV0VCS0lUX0RPTV9OT0RFKGJvZHkpLCBu
b2RlLCBOVUxMKTsKLSAgICBsaXN0ID0gd2Via2l0X2RvbV9ub2RlX2dldF9jaGlsZF9ub2RlcyhX
RUJLSVRfRE9NX05PREUoYm9keSkpOwotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfZG9tX25v
ZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QpLCA9PSwgMCk7Ci0gICAgZ19vYmplY3RfdW5yZWYobGlz
dCk7Ci0KLSAgICAvKiBUZXN0IGluc2VydF9iZWZvcmUgKi8KLQotICAgIC8qIElmIHJlZkNoaWxk
IGlzIG51bGwsIGluc2VydCBuZXdDaGlsZCBhcyBsYXN0IGVsZW1lbnQgb2YgcGFyZW50ICovCi0g
ICAgZGl2ID0gd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZWxlbWVudChkb2N1bWVudCwgIkRJ
ViIsIE5VTEwpOwotICAgIHdlYmtpdF9kb21fbm9kZV9pbnNlcnRfYmVmb3JlKFdFQktJVF9ET01f
Tk9ERShib2R5KSwgV0VCS0lUX0RPTV9OT0RFKGRpdiksIE5VTEwsIE5VTEwpOwotICAgIGdfYXNz
ZXJ0KHdlYmtpdF9kb21fbm9kZV9oYXNfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkp
KSk7Ci0gICAgbGlzdCA9IHdlYmtpdF9kb21fbm9kZV9nZXRfY2hpbGRfbm9kZXMoV0VCS0lUX0RP
TV9OT0RFKGJvZHkpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X2RvbV9ub2RlX2xpc3Rf
Z2V0X2xlbmd0aChsaXN0KSwgPT0sIDEpOwotICAgIG5vZGUgPSB3ZWJraXRfZG9tX25vZGVfbGlz
dF9pdGVtKGxpc3QsIDApOwotICAgIGdfYXNzZXJ0KG5vZGUpOwotICAgIGdfYXNzZXJ0KHdlYmtp
dF9kb21fbm9kZV9pc19zYW1lX25vZGUoV0VCS0lUX0RPTV9OT0RFKGRpdiksIG5vZGUpKTsKLSAg
ICBnX29iamVjdF91bnJlZihsaXN0KTsKLQotICAgIC8qIE5vdyBpbnNlcnQgYSAncCcgYmVmb3Jl
ICdkaXYnICovCi0gICAgcCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2VsZW1lbnQoZG9j
dW1lbnQsICJQIiwgTlVMTCk7Ci0gICAgd2Via2l0X2RvbV9ub2RlX2luc2VydF9iZWZvcmUoV0VC
S0lUX0RPTV9OT0RFKGJvZHkpLCBXRUJLSVRfRE9NX05PREUocCksIFdFQktJVF9ET01fTk9ERShk
aXYpLCBOVUxMKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaGFzX2NoaWxkX25vZGVz
KFdFQktJVF9ET01fTk9ERShib2R5KSkpOwotICAgIGxpc3QgPSB3ZWJraXRfZG9tX25vZGVfZ2V0
X2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSk7Ci0gICAgZ19hc3NlcnRfY21waW50
KHdlYmtpdF9kb21fbm9kZV9saXN0X2dldF9sZW5ndGgobGlzdCksID09LCAyKTsKLSAgICBub2Rl
ID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0LCAwKTsKLSAgICBnX2Fzc2VydChub2Rl
KTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaXNfc2FtZV9ub2RlKFdFQktJVF9ET01f
Tk9ERShwKSwgbm9kZSkpOwotICAgIG5vZGUgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtKGxp
c3QsIDEpOwotICAgIGdfYXNzZXJ0KG5vZGUpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9k
ZV9pc19zYW1lX25vZGUoV0VCS0lUX0RPTV9OT0RFKGRpdiksIG5vZGUpKTsKLSAgICBnX29iamVj
dF91bnJlZihsaXN0KTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotewot
ICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLQotICAgIGdfdGVzdF9idWdf
YmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Vi
a2l0L2RvbW5vZGUvdGVzdF9oaWVyYXJjaHlfbmF2aWdhdGlvbiIsCi0gICAgICAgICAgICAgICBE
b21Ob2RlRml4dHVyZSwgSFRNTF9ET0NVTUVOVF9ISUVSQVJDSFlfTkFWSUdBVElPTiwKLSAgICAg
ICAgICAgICAgIGRvbV9ub2RlX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X2Rv
bV9ub2RlX2hpZXJhcmNoeV9uYXZpZ2F0aW9uLAotICAgICAgICAgICAgICAgZG9tX25vZGVfZml4
dHVyZV90ZWFyZG93bik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2RvbW5vZGUvdGVzdF9p
bnNlcnRpb24iLAotICAgICAgICAgICAgICAgRG9tTm9kZUZpeHR1cmUsIEhUTUxfRE9DVU1FTlRf
Tk9ERV9JTlNFUlRJT04sCi0gICAgICAgICAgICAgICBkb21fbm9kZV9maXh0dXJlX3NldHVwLAot
ICAgICAgICAgICAgICAgdGVzdF9kb21fbm9kZV9pbnNlcnRpb24sCi0gICAgICAgICAgICAgICBk
b21fbm9kZV9maXh0dXJlX3RlYXJkb3duKTsKLQotICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7Ci19
Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rkb3dubG9hZC5jIGIv
U291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvd25sb2FkLmMKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGY4ZThkZWQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvdGVz
dHMvdGVzdGRvd25sb2FkLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMjIgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOSBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkB0d290b2FzdHMu
ZGU+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDx1
bmlzdGQuaD4KLSNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgotI2luY2x1ZGUgPHdlYmtpdC93ZWJr
aXQuaD4KLQotR01haW5Mb29wKiBsb29wOwotY2hhciogdGVtcG9yYXJ5RmlsZW5hbWUgPSBOVUxM
OwotV2ViS2l0RG93bmxvYWQqIHRoZURvd25sb2FkID0gTlVMTDsKLQotc3RhdGljIHZvaWQKLXRl
c3Rfd2Via2l0X2Rvd25sb2FkX2NyZWF0ZSh2b2lkKQotewotICAgIFdlYktpdE5ldHdvcmtSZXF1
ZXN0KiByZXF1ZXN0OwotICAgIFdlYktpdERvd25sb2FkKiBkb3dubG9hZDsKLSAgICBjb25zdCBn
Y2hhciogdXJpID0gImh0dHA6Ly9leGFtcGxlLmNvbSI7Ci0gICAgZ2NoYXIqIHRtcERpcjsKLQot
ICAgIHJlcXVlc3QgPSB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X25ldyh1cmkpOwotICAgIGRvd25s
b2FkID0gd2Via2l0X2Rvd25sb2FkX25ldyhyZXF1ZXN0KTsKLSAgICBnX29iamVjdF91bnJlZihy
ZXF1ZXN0KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2Rvd25sb2FkX2dldF91cmkoZG93
bmxvYWQpLCA9PSwgdXJpKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfZG93bmxvYWRfZ2V0X25ldHdv
cmtfcmVxdWVzdChkb3dubG9hZCkgPT0gcmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQoZ19zdHJyc3Ry
KHVyaSwgd2Via2l0X2Rvd25sb2FkX2dldF9zdWdnZXN0ZWRfZmlsZW5hbWUoZG93bmxvYWQpKSk7
Ci0gICAgZ19hc3NlcnQod2Via2l0X2Rvd25sb2FkX2dldF9zdGF0dXMoZG93bmxvYWQpID09IFdF
QktJVF9ET1dOTE9BRF9TVEFUVVNfQ1JFQVRFRCk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9kb3du
bG9hZF9nZXRfdG90YWxfc2l6ZShkb3dubG9hZCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG93
bmxvYWRfZ2V0X2N1cnJlbnRfc2l6ZShkb3dubG9hZCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRf
ZG93bmxvYWRfZ2V0X3Byb2dyZXNzKGRvd25sb2FkKSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9k
b3dubG9hZF9nZXRfZWxhcHNlZF90aW1lKGRvd25sb2FkKSk7Ci0gICAgdG1wRGlyID0gZ19maWxl
bmFtZV90b191cmkoZ19nZXRfdG1wX2RpcigpLCBOVUxMLCBOVUxMKTsKLSAgICB3ZWJraXRfZG93
bmxvYWRfc2V0X2Rlc3RpbmF0aW9uX3VyaShkb3dubG9hZCwgdG1wRGlyKTsKLSAgICBnX2Fzc2Vy
dF9jbXBzdHIodG1wRGlyLCA9PSwgd2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbl91cmko
ZG93bmxvYWQpKTs7Ci0gICAgZ19mcmVlKHRtcERpcik7Ci0gICAgZ19vYmplY3RfdW5yZWYoZG93
bmxvYWQpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLW5hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9u
X3JlcXVlc3RlZF9jYihXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRXZWJGcmFtZSogd2ViX2ZyYW1lLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiBy
ZXF1ZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFdl
Yk5hdmlnYXRpb25BY3Rpb24qIGFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBXZWJLaXRXZWJQb2xpY3lEZWNpc2lvbiogZGVjaXNpb24sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICB3ZWJr
aXRfd2ViX3BvbGljeV9kZWNpc2lvbl9kb3dubG9hZChkZWNpc2lvbik7Ci0gICAgcmV0dXJuIFRS
VUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1ub3RpZnlfc3RhdHVzX2NiKEdPYmplY3QqIG9iamVjdCwg
R1BhcmFtU3BlYyogcHNwZWMsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgV2ViS2l0RG93bmxvYWQq
IGRvd25sb2FkID0gV0VCS0lUX0RPV05MT0FEKG9iamVjdCk7Ci0gICAgc3dpdGNoICh3ZWJraXRf
ZG93bmxvYWRfZ2V0X3N0YXR1cyhkb3dubG9hZCkpIHsKLSAgICBjYXNlIFdFQktJVF9ET1dOTE9B
RF9TVEFUVVNfRklOSVNIRUQ6Ci0gICAgY2FzZSBXRUJLSVRfRE9XTkxPQURfU1RBVFVTX0VSUk9S
OgotICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIFdFQktJVF9ET1dOTE9BRF9TVEFUVVNfQ0FOQ0VMTEVEOgotICAgICAgICBnX2Fzc2VydF9u
b3RfcmVhY2hlZCgpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVh
azsKLSAgICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotc2V0X2ZpbGVuYW1lKGdjaGFyKiBmaWxl
bmFtZSkKLXsKLSAgICBnY2hhciAqdXJpID0gZ19maWxlbmFtZV90b191cmkoZmlsZW5hbWUsIE5V
TEwsIE5VTEwpOwotCi0gICAgd2Via2l0X2Rvd25sb2FkX3NldF9kZXN0aW5hdGlvbl91cmkodGhl
RG93bmxvYWQsIHVyaSk7Ci0gICAgZ19mcmVlKHVyaSk7Ci0KLSAgICB3ZWJraXRfZG93bmxvYWRf
c3RhcnQodGhlRG93bmxvYWQpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQK
LWhhbmRsZV9kb3dubG9hZF9yZXF1ZXN0ZWRfY2IoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiogYmVlblRoZXJlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiBhc3luY2gpCi17Ci0gICAgdGhlRG93bmxv
YWQgPSBkb3dubG9hZDsKLSAgICAqYmVlblRoZXJlID0gVFJVRTsKLQotICAgIGlmICh0ZW1wb3Jh
cnlGaWxlbmFtZSkgewotICAgICAgICBpZiAoYXN5bmNoKSB7Ci0gICAgICAgICAgICBnX2lkbGVf
YWRkKChHU291cmNlRnVuYylzZXRfZmlsZW5hbWUsIHRlbXBvcmFyeUZpbGVuYW1lKTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGdjaGFyICp1cmkgPSBnX2ZpbGVuYW1lX3RvX3VyaSh0
ZW1wb3JhcnlGaWxlbmFtZSwgTlVMTCwgTlVMTCk7Ci0gICAgICAgICAgICBpZiAodXJpKQotICAg
ICAgICAgICAgICAgIHdlYmtpdF9kb3dubG9hZF9zZXRfZGVzdGluYXRpb25fdXJpKGRvd25sb2Fk
LCB1cmkpOwotICAgICAgICAgICAgZ19mcmVlKHVyaSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBnX3NpZ25hbF9jb25uZWN0KGRvd25sb2FkLCAibm90aWZ5OjpzdGF0dXMiLAotICAgICAgICAg
ICAgICAgICAgICAgR19DQUxMQkFDSyhub3RpZnlfc3RhdHVzX2NiKSwgTlVMTCk7Ci19Ci0KLXN0
YXRpYyBnYm9vbGVhbgotZG93bmxvYWRfcmVxdWVzdGVkX2NiKFdlYktpdFdlYlZpZXcqIHdlYl92
aWV3LAotICAgICAgICAgICAgICAgICAgICAgIFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwKLSAg
ICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiogYmVlblRoZXJlKQotewotICAgIGhhbmRsZV9k
b3dubG9hZF9yZXF1ZXN0ZWRfY2IoZG93bmxvYWQsIGJlZW5UaGVyZSwgRkFMU0UpOwotICAgIHJl
dHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWRvd25sb2FkX3JlcXVlc3RlZF9hc3lu
Y2hfY2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2Jvb2xlYW4qIGJlZW5UaGVyZSkKLXsKLSAgICBoYW5kbGVfZG93bmxvYWRfcmVxdWVzdGVk
X2NiKGRvd25sb2FkLCBiZWVuVGhlcmUsIFRSVUUpOwotICAgIHJldHVybiBUUlVFOwotfQotCi1z
dGF0aWMgdm9pZAotdGVzdF93ZWJraXRfZG93bmxvYWRfcGVyZm9ybShnYm9vbGVhbiBhc3luY2gp
Ci17Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRf
d2ViX3ZpZXdfbmV3KCkpOwotICAgIEdDYWxsYmFjayBkb3dubG9hZFJlcXVlc3RDYWxsYmFjayA9
IE5VTEw7Ci0KLSAgICBnX29iamVjdF9yZWZfc2luayhHX09CSkVDVCh3ZWJWaWV3KSk7Ci0KLSAg
ICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJuYXZpZ2F0aW9uLXBvbGljeS1kZWNpc2lvbi1y
ZXF1ZXN0ZWQiLAotICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhuYXZpZ2F0aW9uX3Bv
bGljeV9kZWNpc2lvbl9yZXF1ZXN0ZWRfY2IpLAotICAgICAgICAgICAgICAgICAgICAgTlVMTCk7
Ci0KLSAgICBpZiAoYXN5bmNoKQotICAgICAgICBkb3dubG9hZFJlcXVlc3RDYWxsYmFjayA9IEdf
Q0FMTEJBQ0soZG93bmxvYWRfcmVxdWVzdGVkX2FzeW5jaF9jYik7Ci0gICAgZWxzZQotICAgICAg
ICBkb3dubG9hZFJlcXVlc3RDYWxsYmFjayA9IEdfQ0FMTEJBQ0soZG93bmxvYWRfcmVxdWVzdGVk
X2NiKTsKLQotICAgIGdib29sZWFuIGJlZW5UaGVyZSA9IEZBTFNFOwotICAgIGdfc2lnbmFsX2Nv
bm5lY3Qod2ViVmlldywgImRvd25sb2FkLXJlcXVlc3RlZCIsCi0gICAgICAgICAgICAgICAgICAg
ICBkb3dubG9hZFJlcXVlc3RDYWxsYmFjaywgJmJlZW5UaGVyZSk7Ci0KLSAgICAvKiBQcmVwYXJh
dGlvbjsgRklYTUU6IHdlIHNob3VsZCBtb3ZlIHRoaXMgY29kZSB0byBhIHRlc3QKLSAgICAgKiB1
dGlsaXRpZXMgZmlsZSwgYmVjYXVzZSB3ZSBoYXZlIGEgdmVyeSBzaW1pbGFyIG9uZSBpbgotICAg
ICAqIHRlc3R3ZWJmcmFtZS5jICovCi0gICAgR0Vycm9yICplcnJvciA9IE5VTEw7Ci0gICAgZ2No
YXIqIGZpbGVuYW1lOwotICAgIGludCBmZCA9IGdfZmlsZV9vcGVuX3RtcCgid2Via2l0LXRlc3R3
ZWJkb3dubG9hZC1YWFhYWFgiLCAmZmlsZW5hbWUsICZlcnJvcik7Ci0gICAgY2xvc2UoZmQpOwot
Ci0gICAgaWYgKGVycm9yKQotICAgICAgICBnX2NyaXRpY2FsKCJGYWlsZWQgdG8gb3BlbiBhIHRl
bXBvcmFyeSBmaWxlIGZvciB3cml0aW5nOiAlcy4iLCBlcnJvci0+bWVzc2FnZSk7Ci0KLSAgICBp
ZiAoZ191bmxpbmsoZmlsZW5hbWUpID09IC0xKQotICAgICAgICBnX2NyaXRpY2FsKCJGYWlsZWQg
dG8gZGVsZXRlIHRoZSB0ZW1wb3JhcnkgZmlsZTogJXMuIiwgZ19zdHJlcnJvcihlcnJubykpOwot
Ci0gICAgdGhlRG93bmxvYWQgPSBOVUxMOwotICAgIHRlbXBvcmFyeUZpbGVuYW1lID0gZmlsZW5h
bWU7Ci0KLSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotICAgIHdlYmtp
dF93ZWJfdmlld19sb2FkX3VyaSh3ZWJWaWV3LCAiaHR0cDovL2dub21lLm9yZy8iKTsKLSAgICBn
X21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQoYmVlblRoZXJlLCA9
PSwgVFJVRSk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQoZ19maWxlX3Rlc3QodGVtcG9yYXJ5Rmls
ZW5hbWUsIEdfRklMRV9URVNUX0lTX1JFR1VMQVIpLCA9PSwgVFJVRSk7Ci0KLSAgICBnX3VubGlu
ayh0ZW1wb3JhcnlGaWxlbmFtZSk7Ci0gICAgZ19mcmVlKHRlbXBvcmFyeUZpbGVuYW1lKTsKLSAg
ICB0ZW1wb3JhcnlGaWxlbmFtZSA9IE5VTEw7Ci0KLSAgICBnX21haW5fbG9vcF91bnJlZihsb29w
KTsKLSAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKLX0KLQotc3RhdGljIHZvaWQKLXRlc3Rf
d2Via2l0X2Rvd25sb2FkX3N5bmNoKHZvaWQpCi17Ci0gICAgdGVzdF93ZWJraXRfZG93bmxvYWRf
cGVyZm9ybShGQUxTRSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi10ZXN0X3dlYmtpdF9kb3dubG9hZF9h
c3luY2godm9pZCkKLXsKLSAgICB0ZXN0X3dlYmtpdF9kb3dubG9hZF9wZXJmb3JtKFRSVUUpOwot
fQotCi1zdGF0aWMgZ2Jvb2xlYW4gbWltZV90eXBlX3BvbGljeV9kZWNpc2lvbl9yZXF1ZXN0ZWRf
Y2IoV2ViS2l0V2ViVmlldyogdmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdE5ldHdv
cmtSZXF1ZXN0KiByZXF1ZXN0LCBjb25zdCBjaGFyKiBtaW1lX3R5cGUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0V2ViUG9saWN5
RGVjaXNpb24qIGRlY2lzaW9uLCBncG9pbnRlciBkYXRhKQotewotICAgIHdlYmtpdF93ZWJfcG9s
aWN5X2RlY2lzaW9uX2Rvd25sb2FkKGRlY2lzaW9uKTsKLSAgICByZXR1cm4gVFJVRTsKLX0KLQot
c3RhdGljIHZvaWQgaWRsZV9xdWl0X2xvb3BfY2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIEdQ
YXJhbVNwZWMqIHBzcGVjLCBncG9pbnRlciBkYXRhKQotewotICAgIGlmICh3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYl92aWV3KSA9PSBXRUJLSVRfTE9BRF9GSU5JU0hFRCB8fAot
ICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYl92aWV3KSA9PSBXRUJL
SVRfTE9BRF9GQUlMRUQpCi0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci19Ci0KLXN0
YXRpYyB2b2lkCi10ZXN0X3dlYmtpdF9kb3dubG9hZF9kYXRhKHZvaWQpCi17Ci0gICAgZ2Jvb2xl
YW4gYmVlblRoZXJlID0gRkFMU0U7Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJ
VF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5r
KHdlYlZpZXcpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAiZG93bmxvYWQtcmVx
dWVzdGVkIiwKLSAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0soZG93bmxvYWRfcmVxdWVz
dGVkX2NiKSwKLSAgICAgICAgICAgICAgICAgICAgICZiZWVuVGhlcmUpOwotCi0gICAgZ19zaWdu
YWxfY29ubmVjdCh3ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsCi0gICAgICAgICAgICAg
ICAgICAgICBHX0NBTExCQUNLKGlkbGVfcXVpdF9sb29wX2NiKSwKLSAgICAgICAgICAgICAgICAg
ICAgIE5VTEwpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAibWltZS10eXBlLXBv
bGljeS1kZWNpc2lvbi1yZXF1ZXN0ZWQiLAotICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFD
SyhtaW1lX3R5cGVfcG9saWN5X2RlY2lzaW9uX3JlcXVlc3RlZF9jYiksCi0gICAgICAgICAgICAg
ICAgICAgICBOVUxMKTsKLQotICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7
Ci0KLSAgICAvKiBXZSdyZSB0ZXN0aW5nIGZvciBhIGNyYXNoLCBzbyBqdXN0IG5vdCBjcmFzaGlu
ZyBpcyBhIHBhc3MgKi8KLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkod2ViVmlldywgImRh
dGE6YXBwbGljYXRpb24vb2N0ZWN0LXN0cmVhbSwiKTsKLSAgICBnX21haW5fbG9vcF9ydW4obG9v
cCk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQoYmVlblRoZXJlLCA9PSwgVFJVRSk7Ci0KLSAgICBn
X21haW5fbG9vcF91bnJlZihsb29wKTsKLSAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKLX0K
LQotc3RhdGljIHZvaWQgbm90aWZ5RG93bmxvYWRTdGF0dXNDYWxsYmFjayhHT2JqZWN0ICpvYmpl
Y3QsIEdQYXJhbVNwZWMgKnBzcGVjLCBncG9pbnRlciBkYXRhKQotewotICAgIFdlYktpdERvd25s
b2FkICpkb3dubG9hZCA9IFdFQktJVF9ET1dOTE9BRChvYmplY3QpOwotICAgIFdlYktpdE5ldHdv
cmtSZXNwb25zZSAqcmVzcG9uc2UgPSB3ZWJraXRfZG93bmxvYWRfZ2V0X25ldHdvcmtfcmVzcG9u
c2UoZG93bmxvYWQpOwotICAgIFNvdXBNZXNzYWdlICptZXNzYWdlID0gd2Via2l0X25ldHdvcmtf
cmVzcG9uc2VfZ2V0X21lc3NhZ2UocmVzcG9uc2UpOwotCi0gICAgc3dpdGNoICh3ZWJraXRfZG93
bmxvYWRfZ2V0X3N0YXR1cyhkb3dubG9hZCkpIHsKLSAgICBjYXNlIFdFQktJVF9ET1dOTE9BRF9T
VEFUVVNfRVJST1I6Ci0gICAgICAgIGdfYXNzZXJ0X2NtcGludChtZXNzYWdlLT5zdGF0dXNfY29k
ZSwgPT0sIDQwNCk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgV0VCS0lUX0RPV05MT0FEX1NUQVRVU19GSU5JU0hFRDoKLSAgICBjYXNl
IFdFQktJVF9ET1dOTE9BRF9TVEFUVVNfQ0FOQ0VMTEVEOgotICAgICAgICBnX2Fzc2VydF9ub3Rf
cmVhY2hlZCgpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsK
LSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIgKnNlcnZl
ciwgU291cE1lc3NhZ2UgKm1lc3NhZ2UsIGNvbnN0IGNoYXIgKnBhdGgsIEdIYXNoVGFibGUgKnF1
ZXJ5LCBTb3VwQ2xpZW50Q29udGV4dCAqY29udGV4dCwgZ3BvaW50ZXIgdXNlckRhdGEpCi17Ci0g
ICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKLSAgICAgICAgc291
cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVE
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVz
KG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7Ci0gICAgc291cF9tZXNzYWdlX2JvZHlf
Y29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rf
d2Via2l0X2Rvd25sb2FkX25vdF9mb3VuZCh2b2lkKQotewotICAgIFNvdXBTZXJ2ZXIgKnNlcnZl
ciA9IHNvdXBfc2VydmVyX25ldyhTT1VQX1NFUlZFUl9QT1JULCAwLCBOVUxMKTsKLSAgICBzb3Vw
X3NlcnZlcl9ydW5fYXN5bmMoc2VydmVyKTsKLSAgICBzb3VwX3NlcnZlcl9hZGRfaGFuZGxlcihz
ZXJ2ZXIsIE5VTEwsIHNlcnZlckNhbGxiYWNrLCBOVUxMLCBOVUxMKTsKLSAgICBTb3VwVVJJICpi
YXNlVVJJID0gc291cF91cmlfbmV3KCJodHRwOi8vMTI3LjAuMC4xLyIpOwotICAgIHNvdXBfdXJp
X3NldF9wb3J0KGJhc2VVUkksIHNvdXBfc2VydmVyX2dldF9wb3J0KHNlcnZlcikpOwotCi0gICAg
U291cFVSSSAqdXJpID0gc291cF91cmlfbmV3X3dpdGhfYmFzZShiYXNlVVJJLCAiL2ZvbyIpOwot
ICAgIGNoYXIgKnVyaVN0cmluZyA9IHNvdXBfdXJpX3RvX3N0cmluZyh1cmksIEZBTFNFKTsKLSAg
ICBzb3VwX3VyaV9mcmVlKHVyaSk7Ci0KLSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEws
IFRSVUUpOwotICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0ICpyZXF1ZXN0ID0gd2Via2l0X25ldHdv
cmtfcmVxdWVzdF9uZXcodXJpU3RyaW5nKTsKLSAgICBnX2ZyZWUgKHVyaVN0cmluZyk7Ci0gICAg
V2ViS2l0RG93bmxvYWQgKmRvd25sb2FkID0gd2Via2l0X2Rvd25sb2FkX25ldyhyZXF1ZXN0KTsK
LSAgICBnX29iamVjdF91bnJlZihyZXF1ZXN0KTsKLQotICAgIHdlYmtpdF9kb3dubG9hZF9zZXRf
ZGVzdGluYXRpb25fdXJpKGRvd25sb2FkLCAiZmlsZTovLy90bXAvZm9vIik7Ci0gICAgZ19zaWdu
YWxfY29ubmVjdChkb3dubG9hZCwgIm5vdGlmeTo6c3RhdHVzIiwgR19DQUxMQkFDSyhub3RpZnlE
b3dubG9hZFN0YXR1c0NhbGxiYWNrKSwgTlVMTCk7Ci0KLSAgICB3ZWJraXRfZG93bmxvYWRfc3Rh
cnQoZG93bmxvYWQpOwotICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLQotICAgIGdfb2JqZWN0
X3VucmVmKGRvd25sb2FkKTsKLSAgICBnX21haW5fbG9vcF91bnJlZihsb29wKTsKLSAgICBzb3Vw
X3VyaV9mcmVlKGJhc2VVUkkpOwotICAgIGdfb2JqZWN0X3VucmVmKHNlcnZlcik7Ci19Ci0KLWlu
dCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKLXsKLSAgICBndGtfdGVzdF9pbml0KCZhcmdj
LCAmYXJndiwgTlVMTCk7Ci0KLSAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJr
aXQub3JnLyIpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9kb3dubG9hZC9jcmVhdGUi
LCB0ZXN0X3dlYmtpdF9kb3dubG9hZF9jcmVhdGUpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dl
YmtpdC9kb3dubG9hZC9zeW5jaCIsIHRlc3Rfd2Via2l0X2Rvd25sb2FkX3N5bmNoKTsKLSAgICBn
X3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvZG93bmxvYWQvYXN5bmNoIiwgdGVzdF93ZWJraXRfZG93
bmxvYWRfYXN5bmNoKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvZG93bmxvYWQvZGF0
YSIsIHRlc3Rfd2Via2l0X2Rvd25sb2FkX2RhdGEpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dl
YmtpdC9kb3dubG9hZC9ub3QtZm91bmQiLCB0ZXN0X3dlYmtpdF9kb3dubG9hZF9ub3RfZm91bmQp
OwotICAgIHJldHVybiBnX3Rlc3RfcnVuICgpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9ndGsvdGVzdHMvdGVzdGZhdmljb25kYXRhYmFzZS5jIGIvU291cmNlL1dlYktpdC9ndGsvdGVz
dHMvdGVzdGZhdmljb25kYXRhYmFzZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAy
YmM2MDZhLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RmYXZpY29u
ZGF0YWJhc2UuYworKysgL2Rldi9udWxsCkBAIC0xLDI3NiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJ0
ZXN0X3V0aWxzLmgiCi0jaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRlIDxndGsvZ3Rr
Lmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgotCi1j
b25zdCBpbnQgZ0ljb25TaXplID0gMTY7Ci0KLUdNYWluTG9vcCAqbG9vcDsKLWNoYXIgKmJhc2VV
Ukk7Ci0KLXN0YXRpYyB2b2lkCi1zZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyICpzZXJ2ZXIsIFNv
dXBNZXNzYWdlICptZXNzYWdlLCBjb25zdCBjaGFyICpwYXRoLCBHSGFzaFRhYmxlICpxdWVyeSwg
U291cENsaWVudENvbnRleHQgKmNvbnRleHQsIHZvaWQgKmRhdGEpCi17Ci0gICAgaWYgKG1lc3Nh
Z2UtPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKLSAgICAgICAgc291cF9tZXNzYWdlX3Nl
dF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNP
VVBfU1RBVFVTX09LKTsKLQotICAgIGNoYXIgKmNvbnRlbnRzOwotICAgIGdzaXplIGxlbmd0aDsK
LSAgICBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9mYXZpY29uLmljbyIpKSB7Ci0gICAgICAgIEdF
cnJvciAqZXJyb3IgPSBOVUxMOwotCi0gICAgICAgIGdfZmlsZV9nZXRfY29udGVudHMoImJsYW5r
LmljbyIsICZjb250ZW50cywgJmxlbmd0aCwgJmVycm9yKTsKLSAgICAgICAgZ19hc3NlcnQoIWVy
cm9yKTsKLSAgICB9IGVsc2UgewotICAgICAgICBjb250ZW50cyA9IGdfc3RyZHVwKCI8aHRtbD48
Ym9keT50ZXN0PC9ib2R5PjwvaHRtbD4iKTsKLSAgICAgICAgbGVuZ3RoID0gc3RybGVuKGNvbnRl
bnRzKTsKLSAgICB9Ci0KLSAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVz
cG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgY29udGVudHMsIGxlbmd0aCk7Ci0gICAgc291
cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7Ci19Ci0KLXN0
YXRpYyB2b2lkIGRlbGV0ZURhdGFiYXNlRmlsZUlmRXhpc3RzKGNvbnN0IGNoYXIgKmRhdGFiYXNl
UGF0aCkKLXsKLSAgICBpZiAoIWdfZmlsZV90ZXN0KGRhdGFiYXNlUGF0aCwgR19GSUxFX1RFU1Rf
SVNfRElSKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2hhciAqZGF0YWJhc2VGaWxlbmFtZSA9
IGdfYnVpbGRfZmlsZW5hbWUoZGF0YWJhc2VQYXRoLCAiV2VicGFnZUljb25zLmRiIiwgTlVMTCk7
Ci0gICAgaWYgKGdfdW5saW5rKGRhdGFiYXNlRmlsZW5hbWUpID09IC0xKSB7Ci0gICAgICAgIGdf
ZnJlZShkYXRhYmFzZUZpbGVuYW1lKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGdf
ZnJlZShkYXRhYmFzZUZpbGVuYW1lKTsKLSAgICBnX3JtZGlyKGRhdGFiYXNlUGF0aCk7Ci19Ci0K
LXN0YXRpYyB2b2lkIHRlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VTZXRQYXRoKCkKLXsKLSAgICBj
aGFyICpkYXRhYmFzZVBhdGggPSBnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X3RtcF9kaXIoKSwgIndl
YmtpdC10ZXN0ZmF2aWNvbmRhdGFiYXNlIiwgTlVMTCk7Ci0gICAgZGVsZXRlRGF0YWJhc2VGaWxl
SWZFeGlzdHMoZGF0YWJhc2VQYXRoKTsKLQotICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSAqZGF0
YWJhc2UgPSB3ZWJraXRfZ2V0X2Zhdmljb25fZGF0YWJhc2UoKTsKLSAgICB3ZWJraXRfZmF2aWNv
bl9kYXRhYmFzZV9zZXRfcGF0aChkYXRhYmFzZSwgZGF0YWJhc2VQYXRoKTsKLQotICAgIGdfYXNz
ZXJ0X2NtcHN0cihkYXRhYmFzZVBhdGgsID09LCB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRf
cGF0aChkYXRhYmFzZSkpOwotCi0gICAgZ19mcmVlKGRhdGFiYXNlUGF0aCk7Ci19Ci0KLS8vIFNl
ZSB0aGUgY29tbWVudCBpbiBtYWluKCkgZnVuY3Rpb24gdGhhdCBnb2VzIHdpdGggdGhpcyBzYW1l
IGd1YXJkLgotI2lmZGVmIE5ERUJVRwotCi1zdGF0aWMgdm9pZCBmYXZpY29uRGF0YWJhc2VHZXRW
YWxpZEZhdmljb25DYWxsYmFjayhHT2JqZWN0ICpzb3VyY2VPYmplY3QsIEdBc3luY1Jlc3VsdCAq
cmVzdWx0LCB2b2lkICp1c2VyRGF0YSkKLXsKLSAgICBnYm9vbGVhbiAqYmVlbkhlcmUgPSAoZ2Jv
b2xlYW4qKXVzZXJEYXRhOwotICAgIEdFcnJvciAqZXJyb3IgPSBOVUxMOwotICAgIEdka1BpeGJ1
ZiAqaWNvbiA9IHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX3BpeGJ1Zl9maW5p
c2goV0VCS0lUX0ZBVklDT05fREFUQUJBU0Uoc291cmNlT2JqZWN0KSwgcmVzdWx0LCAmZXJyb3Ip
OwotICAgIGdfYXNzZXJ0KGljb24pOwotICAgIGdfb2JqZWN0X3VucmVmKGljb24pOwotCi0gICAg
KmJlZW5IZXJlID0gVFJVRTsKLQotICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci19Ci0KLXN0
YXRpYyB2b2lkIGZhdmljb25EYXRhYmFzZUdldEludmFsaWRGYXZpY29uQ2FsbGJhY2soR09iamVj
dCAqc291cmNlT2JqZWN0LCBHQXN5bmNSZXN1bHQgKnJlc3VsdCwgdm9pZCAqdXNlckRhdGEpCi17
Ci0gICAgZ2Jvb2xlYW4gKmJlZW5IZXJlID0gKGdib29sZWFuKil1c2VyRGF0YTsKLSAgICBHRXJy
b3IgKmVycm9yID0gTlVMTDsKLSAgICBHZGtQaXhidWYgKmljb24gPSB3ZWJraXRfZmF2aWNvbl9k
YXRhYmFzZV9nZXRfZmF2aWNvbl9waXhidWZfZmluaXNoKFdFQktJVF9GQVZJQ09OX0RBVEFCQVNF
KHNvdXJjZU9iamVjdCksIHJlc3VsdCwgJmVycm9yKTsKLSAgICBnX2Fzc2VydCghaWNvbik7Ci0K
LSAgICAqYmVlbkhlcmUgPSBUUlVFOwotCi0gICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKLX0K
LQotc3RhdGljIHZvaWQgZmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNvbkNhbmNlbGxlZENhbGxiYWNr
KEdPYmplY3QgKnNvdXJjZU9iamVjdCwgR0FzeW5jUmVzdWx0ICpyZXN1bHQsIHZvaWQgKnVzZXJE
YXRhKQotewotICAgIGdib29sZWFuICpiZWVuSGVyZSA9IChnYm9vbGVhbiopdXNlckRhdGE7Ci0g
ICAgR0Vycm9yICplcnJvciA9IE5VTEw7Ci0gICAgR2RrUGl4YnVmICppY29uID0gd2Via2l0X2Zh
dmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fcGl4YnVmX2ZpbmlzaChXRUJLSVRfRkFWSUNPTl9E
QVRBQkFTRShzb3VyY2VPYmplY3QpLCByZXN1bHQsICZlcnJvcik7Ci0gICAgZ19hc3NlcnQoIWlj
b24pOwotICAgIGdfYXNzZXJ0KGVycm9yICYmIGdfZXJyb3JfbWF0Y2hlcyhlcnJvciwgR19JT19F
UlJPUiwgR19JT19FUlJPUl9DQU5DRUxMRUQpKTsKLQotICAgICpiZWVuSGVyZSA9IFRSVUU7Ci0K
LSAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcXVp
dE1haW5Mb29wSWZMb2FkQ29tcGxldGVkKGdib29sZWFuICppY29uT3JQYWdlTG9hZGVkKQotewot
ICAgIGlmICgqaWNvbk9yUGFnZUxvYWRlZCkKLSAgICAgICAgZ19tYWluX2xvb3BfcXVpdChsb29w
KTsKLSAgICBlbHNlCi0gICAgICAgICppY29uT3JQYWdlTG9hZGVkID0gVFJVRTsKLX0KLQotc3Rh
dGljIHZvaWQgaWRsZVF1aXRMb29wQ2FsbGJhY2soV2ViS2l0V2ViVmlldyAqd2ViVmlldywgR1Bh
cmFtU3BlYyAqcGFyYW1TcGVjLCBnYm9vbGVhbiAqaWNvbk9yUGFnZUxvYWRlZCkKLXsKLSAgICBX
ZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMo
d2ViVmlldyk7Ci0KLSAgICBpZiAoc3RhdHVzID09IFdFQktJVF9MT0FEX0ZJTklTSEVEIHx8IHN0
YXR1cyA9PSBXRUJLSVRfTE9BRF9GQUlMRUQpCi0gICAgICAgIHF1aXRNYWluTG9vcElmTG9hZENv
bXBsZXRlZChpY29uT3JQYWdlTG9hZGVkKTsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0V2ViVmll
d0ljb25Mb2FkZWQoV2ViS2l0RmF2aWNvbkRhdGFiYXNlICpkYXRhYmFzZSwgY29uc3QgY2hhciAq
ZnJhbWVVUkksIGdib29sZWFuICppY29uT3JQYWdlTG9hZGVkKQotewotICAgIHF1aXRNYWluTG9v
cElmTG9hZENvbXBsZXRlZChpY29uT3JQYWdlTG9hZGVkKTsKLX0KLQotc3RhdGljIHZvaWQgbG9h
ZFVSSShjb25zdCBjaGFyICp1cmkpCi17Ci0gICAgV2ViS2l0V2ViVmlldyAqdmlldyA9IFdFQktJ
VF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdib29sZWFuIGljb25PclBh
Z2VMb2FkZWQgPSBGQUxTRTsKLQotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh2aWV3LCB1
cmkpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh2aWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIs
IEdfQ0FMTEJBQ0soaWRsZVF1aXRMb29wQ2FsbGJhY2spLCAmaWNvbk9yUGFnZUxvYWRlZCk7Ci0g
ICAgZ19zaWduYWxfY29ubmVjdCh2aWV3LCAiaWNvbi1sb2FkZWQiLCBHX0NBTExCQUNLKHdlYmtp
dFdlYlZpZXdJY29uTG9hZGVkKSwgJmljb25PclBhZ2VMb2FkZWQpOwotCi0gICAgZ19tYWluX2xv
b3BfcnVuKGxvb3ApOwotCi0gICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVk
KHZpZXcsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsICZpY29uT3JQYWdlTG9hZGVk
KTsKLX0KLQotc3RhdGljIGdib29sZWFuIGZhdmljb25EYXRhYmFzZUdldFZhbGlkRmF2aWNvbklk
bGUodm9pZCAqdXNlckRhdGEpCi17Ci0gICAgd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zh
dmljb25fcGl4YnVmKHdlYmtpdF9nZXRfZmF2aWNvbl9kYXRhYmFzZSgpLCBiYXNlVVJJLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnSWNvblNpemUsIGdJ
Y29uU2l6ZSwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmF2aWNvbkRhdGFiYXNlR2V0VmFsaWRGYXZpY29uQ2FsbGJhY2ssIHVzZXJEYXRhKTsK
LSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBmYXZpY29uRGF0YWJhc2VH
ZXRJbnZhbGlkRmF2aWNvbklkbGUodm9pZCAqdXNlckRhdGEpCi17Ci0gICAgd2Via2l0X2Zhdmlj
b25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fcGl4YnVmKHdlYmtpdF9nZXRfZmF2aWNvbl9kYXRhYmFz
ZSgpLCAiaHR0cDovL3d3dy53ZWJraXRndGsub3JnLyIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdJY29uU2l6ZSwgZ0ljb25TaXplLCBOVUxMLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYXZpY29uRGF0YWJh
c2VHZXRJbnZhbGlkRmF2aWNvbkNhbGxiYWNrLCB1c2VyRGF0YSk7Ci0gICAgcmV0dXJuIEZBTFNF
OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gZmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNvbkNhbmNlbGxl
ZElkbGUodm9pZCAqdXNlckRhdGEpCi17Ci0gICAgR0NhbmNlbGxhYmxlICpjYW5jZWxsYWJsZSA9
IGdfY2FuY2VsbGFibGVfbmV3KCk7Ci0gICAgd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zh
dmljb25fcGl4YnVmKHdlYmtpdF9nZXRfZmF2aWNvbl9kYXRhYmFzZSgpLCBiYXNlVVJJLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnSWNvblNpemUsIGdJ
Y29uU2l6ZSwgY2FuY2VsbGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZhdmljb25EYXRhYmFzZUdldEZhdmljb25DYW5jZWxsZWRDYWxsYmFjaywg
dXNlckRhdGEpOwotICAgIGdfY2FuY2VsbGFibGVfY2FuY2VsKGNhbmNlbGxhYmxlKTsKLSAgICBn
X29iamVjdF91bnJlZihjYW5jZWxsYWJsZSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0
aWMgdm9pZCB0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNvbigpCi17Ci0gICAgZ2Jv
b2xlYW4gYmVlblRvSWNvbkNhbGxiYWNrOwotCi0gICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhO
VUxMLCBUUlVFKTsKLQotICAgIC8qIExvYWQgdXJpIHRvIG1ha2Ugc3VyZSBmYXZpY29uIGlzIGFk
ZGVkIHRvIGRhdGFiYXNlLiAqLwotICAgIGxvYWRVUkkoYmFzZVVSSSk7Ci0KLSAgICBiZWVuVG9J
Y29uQ2FsbGJhY2sgPSBGQUxTRTsKLSAgICBnX2lkbGVfYWRkKChHU291cmNlRnVuYylmYXZpY29u
RGF0YWJhc2VHZXRWYWxpZEZhdmljb25JZGxlLCAmYmVlblRvSWNvbkNhbGxiYWNrKTsKLSAgICBn
X21haW5fbG9vcF9ydW4obG9vcCk7Ci0gICAgZ19hc3NlcnQoYmVlblRvSWNvbkNhbGxiYWNrKTsK
LQotICAgIGJlZW5Ub0ljb25DYWxsYmFjayA9IEZBTFNFOwotICAgIGdfaWRsZV9hZGQoKEdTb3Vy
Y2VGdW5jKWZhdmljb25EYXRhYmFzZUdldEludmFsaWRGYXZpY29uSWRsZSwgJmJlZW5Ub0ljb25D
YWxsYmFjayk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotICAgIGdfYXNzZXJ0KGJlZW5U
b0ljb25DYWxsYmFjayk7Ci0KLSAgICBiZWVuVG9JY29uQ2FsbGJhY2sgPSBGQUxTRTsKLSAgICBn
X2lkbGVfYWRkKChHU291cmNlRnVuYylmYXZpY29uRGF0YWJhc2VHZXRGYXZpY29uQ2FuY2VsbGVk
SWRsZSwgJmJlZW5Ub0ljb25DYWxsYmFjayk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwot
ICAgIGdfYXNzZXJ0KGJlZW5Ub0ljb25DYWxsYmFjayk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RX
ZWJLaXRGYXZpY29uRGF0YWJhc2VHZXRGYXZpY29uVVJJKCkKLXsKLSAgICBjaGFyICppY29uVVJJ
ID0gd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fdXJpKHdlYmtpdF9nZXRfZmF2
aWNvbl9kYXRhYmFzZSgpLCBiYXNlVVJJKTsKLSAgICBjaGFyICpleHBlY3RlZFVSSSA9IGdfc3Ry
ZHVwX3ByaW50ZigiJXNmYXZpY29uLmljbyIsIGJhc2VVUkkpOwotICAgIGdfYXNzZXJ0X2NtcHN0
cihpY29uVVJJLCA9PSwgZXhwZWN0ZWRVUkkpOwotICAgIGdfZnJlZShleHBlY3RlZFVSSSk7Ci0g
ICAgZ19mcmVlKGljb25VUkkpOwotfQotCi0jZW5kaWYKLQotc3RhdGljIHZvaWQgdGVzdFdlYktp
dEZhdmljb25EYXRhYmFzZVJlbW92ZUFsbCh2b2lkKQotewotICAgIFdlYktpdEZhdmljb25EYXRh
YmFzZSAqZGF0YWJhc2UgPSB3ZWJraXRfZ2V0X2Zhdmljb25fZGF0YWJhc2UoKTsKLSAgICB3ZWJr
aXRfZmF2aWNvbl9kYXRhYmFzZV9jbGVhcihkYXRhYmFzZSk7Ci0gICAgY2hhciAqaWNvblVSSSA9
IHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX3VyaShkYXRhYmFzZSwgYmFzZVVS
SSk7Ci0gICAgZ19hc3NlcnQoIWljb25VUkkpOwotICAgIGdfZnJlZShpY29uVVJJKTsKLX0KLQot
c3RhdGljIHZvaWQgdGVzdFdlYktpdEZhdmljb25EYXRhYmFzZUNsb3NlRGF0YWJhc2Uodm9pZCkK
LXsKLSAgICBXZWJLaXRGYXZpY29uRGF0YWJhc2UgKmRhdGFiYXNlID0gd2Via2l0X2dldF9mYXZp
Y29uX2RhdGFiYXNlKCk7Ci0gICAgY2hhciAqZGF0YWJhc2VQYXRoID0gZ19zdHJkdXAod2Via2l0
X2Zhdmljb25fZGF0YWJhc2VfZ2V0X3BhdGgoZGF0YWJhc2UpKTsKLSAgICB3ZWJraXRfZmF2aWNv
bl9kYXRhYmFzZV9zZXRfcGF0aChkYXRhYmFzZSwgMCk7Ci0gICAgZGVsZXRlRGF0YWJhc2VGaWxl
SWZFeGlzdHMoZGF0YWJhc2VQYXRoKTsKLSAgICBnX2ZyZWUoZGF0YWJhc2VQYXRoKTsKLX0KLQot
aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICAgIGd0a190ZXN0X2luaXQoJmFy
Z2MsICZhcmd2LCBOVUxMKTsKLQotICAgIC8qIFRoaXMgaG9wZWZ1bGx5IG1ha2VzIHRoZSB0ZXN0
IGluZGVwZW5kZW50IG9mIHRoZSBwYXRoIGl0J3MgY2FsbGVkIGZyb20uICovCi0gICAgdGVzdHV0
aWxzX3JlbGF0aXZlX2NoZGlyKCJTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy9yZXNvdXJjZXMvdGVz
dC5odG1sIiwgYXJndlswXSk7Ci0KLSAgICBTb3VwU2VydmVyICpzZXJ2ZXIgPSBzb3VwX3NlcnZl
cl9uZXcoU09VUF9TRVJWRVJfUE9SVCwgMCwgTlVMTCk7Ci0gICAgc291cF9zZXJ2ZXJfcnVuX2Fz
eW5jKHNlcnZlcik7Ci0KLSAgICBzb3VwX3NlcnZlcl9hZGRfaGFuZGxlcihzZXJ2ZXIsIE5VTEws
IHNlcnZlckNhbGxiYWNrLCBOVUxMLCBOVUxMKTsKLQotICAgIFNvdXBVUkkgKnNvdXBVUkkgPSBz
b3VwX3VyaV9uZXcoImh0dHA6Ly8xMjcuMC4wLjEvIik7Ci0gICAgc291cF91cmlfc2V0X3BvcnQo
c291cFVSSSwgc291cF9zZXJ2ZXJfZ2V0X3BvcnQoc2VydmVyKSk7Ci0KLSAgICBiYXNlVVJJID0g
c291cF91cmlfdG9fc3RyaW5nKHNvdXBVUkksIEZBTFNFKTsKLSAgICBzb3VwX3VyaV9mcmVlKHNv
dXBVUkkpOwotCi0gICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8i
KTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvZmF2aWNvbmRhdGFiYXNlL3NldC1wYXRo
IiwgdGVzdFdlYktpdEZhdmljb25EYXRhYmFzZVNldFBhdGgpOwotCi0gICAgLy8gVGhlc2UgdHdv
IHRlc3RzIHdpbGwgdHJpZ2dlciBhbiBBU1NFUlRJT04gb24gZGVidWcgYnVpbGRzIGR1ZQotICAg
IC8vIHRvIGh0dHA6Ly93ZWJraXQub3JnL2IvNjc1ODIuIFJlbW92ZSB0aGUgZ3VhcmRzIG9uY2Ug
dGhlIGJ1ZyBpcyBmaXhlZC4KLSNpZmRlZiBOREVCVUcKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93
ZWJraXQvZmF2aWNvbmRhdGFiYXNlL2dldC1mYXZpY29uIiwgdGVzdFdlYktpdEZhdmljb25EYXRh
YmFzZUdldEZhdmljb24pOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9mYXZpY29uZGF0
YWJhc2UvZ2V0LWZhdmljb24tdXJpIiwgdGVzdFdlYktpdEZhdmljb25EYXRhYmFzZUdldEZhdmlj
b25VUkkpOwotI2VuZGlmCi0KLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvZmF2aWNvbmRh
dGFiYXNlL3JlbW92ZS1hbGwiLCB0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlUmVtb3ZlQWxsKTsK
LSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvZmF2aWNvbmRhdGFiYXNlL2Nsb3NlLWRiIiwg
dGVzdFdlYktpdEZhdmljb25EYXRhYmFzZUNsb3NlRGF0YWJhc2UpOwotCi0gICAgcmV0dXJuIGdf
dGVzdF9ydW4oKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rn
bG9iYWxzLmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0Z2xvYmFscy5jCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjllYzRmLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQvZ3RrL3Rlc3RzL3Rlc3RnbG9iYWxzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBDb2xsYWJvcmEgTHRkLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgot
I2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KLQotLy8gTWFrZSBzdXJlIHRoZSBzZXNzaW9uIGlz
IGluaXRpYWxpemVkIHByb3Blcmx5IHdoZW4gd2Via2l0X2dldF9kZWZhdWx0X3Nlc3Npb24oKSBp
cyBjYWxsZWQuCi1zdGF0aWMgdm9pZCB0ZXN0X2dsb2JhbHNfZGVmYXVsdF9zZXNzaW9uKCkKLXsK
LSAgICBnX3Rlc3RfYnVnKCIzNjc1NCIpOwotCi0gICAgU291cFNlc3Npb24qIHNlc3Npb24gPSB3
ZWJraXRfZ2V0X2RlZmF1bHRfc2Vzc2lvbigpOwotICAgIHNvdXBfc2Vzc2lvbl9yZW1vdmVfZmVh
dHVyZV9ieV90eXBlKHNlc3Npb24sIFdFQktJVF9UWVBFX1NPVVBfQVVUSF9ESUFMT0cpOwotCi0g
ICAgLy8gVGhpcyBtYWtlcyBzdXJlIG91ciBpbml0aWFsaXphdGlvbiByYW4uCi0gICAgZ19hc3Nl
cnQoc291cF9zZXNzaW9uX2dldF9mZWF0dXJlKHNlc3Npb24sIFNPVVBfVFlQRV9DT05URU5UX0RF
Q09ERVIpICE9IE5VTEwpOwotCi0gICAgLy8gQ3JlYXRpbmcgYSBXZWJWaWV3IHNob3VsZCBtYWtl
IHN1cmUgdGhlIHNlc3Npb24gaXMKLSAgICAvLyBpbml0aWFsaXplZCwgYW5kIG5vdCBtZXNzIHdp
dGggb3VyIGNoYW5nZXMuCi0gICAgV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcgPSBXRUJLSVRfV0VC
X1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBnX29iamVjdF9yZWZfc2luayh3ZWJf
dmlldyk7Ci0gICAgZ19vYmplY3RfdW5yZWYod2ViX3ZpZXcpOwotCi0gICAgLy8gVGhlc2UgbWFr
ZXMgc3VyZSBvdXIgbW9kaWZpY2F0aW9uIHdhcyBrZXB0LgotICAgIGdfYXNzZXJ0KHNvdXBfc2Vz
c2lvbl9nZXRfZmVhdHVyZShzZXNzaW9uLCBTT1VQX1RZUEVfQ09OVEVOVF9ERUNPREVSKSAhPSBO
VUxMKTsKLSAgICBnX2Fzc2VydChzb3VwX3Nlc3Npb25fZ2V0X2ZlYXR1cmUoc2Vzc2lvbiwgV0VC
S0lUX1RZUEVfU09VUF9BVVRIX0RJQUxPRykgPT0gTlVMTCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRl
c3RfZ2xvYmFsc19zZWN1cml0eV9wb2xpY3koKQotewotICAgIC8vIENoZWNrIGRlZmF1bHQgcG9s
aWN5IGZvciB3ZWxsIGtub3duIHNjaGVtZXMuCi0gICAgV2ViS2l0U2VjdXJpdHlQb2xpY3kgcG9s
aWN5ID0gd2Via2l0X2dldF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUoImh0dHAiKTsK
LSAgICBndWludCBtYXNrID0gV0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9DT1JTX0VOQUJMRUQ7Ci0g
ICAgZ19hc3NlcnRfY21wdWludChwb2xpY3kgJiBtYXNrLCA9PSwgbWFzayk7Ci0KLSAgICBwb2xp
Y3kgPSB3ZWJraXRfZ2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiaHR0cHMiKTsK
LSAgICBtYXNrID0gV0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9TRUNVUkUgfCBXRUJLSVRfU0VDVVJJ
VFlfUE9MSUNZX0NPUlNfRU5BQkxFRDsKLSAgICBnX2Fzc2VydF9jbXB1aW50KHBvbGljeSAmIG1h
c2ssID09LCBtYXNrKTsKLQotICAgIHBvbGljeSA9IHdlYmtpdF9nZXRfc2VjdXJpdHlfcG9saWN5
X2Zvcl91cmlfc2NoZW1lKCJmaWxlIik7Ci0gICAgbWFzayA9IFdFQktJVF9TRUNVUklUWV9QT0xJ
Q1lfTE9DQUw7Ci0gICAgZ19hc3NlcnRfY21wdWludChwb2xpY3kgJiBtYXNrLCA9PSwgbWFzayk7
Ci0KLSAgICBwb2xpY3kgPSB3ZWJraXRfZ2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVt
ZSgiZGF0YSIpOwotICAgIG1hc2sgPSBXRUJLSVRfU0VDVVJJVFlfUE9MSUNZX05PX0FDQ0VTU19U
T19PVEhFUl9TQ0hFTUUgfCBXRUJLSVRfU0VDVVJJVFlfUE9MSUNZX1NFQ1VSRTsKLSAgICBnX2Fz
c2VydF9jbXB1aW50KHBvbGljeSAmIG1hc2ssID09LCBtYXNrKTsKLQotICAgIHBvbGljeSA9IHdl
YmtpdF9nZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJhYm91dCIpOwotICAgIG1h
c2sgPSBXRUJLSVRfU0VDVVJJVFlfUE9MSUNZX05PX0FDQ0VTU19UT19PVEhFUl9TQ0hFTUUgfCBX
RUJLSVRfU0VDVVJJVFlfUE9MSUNZX1NFQ1VSRSB8IFdFQktJVF9TRUNVUklUWV9QT0xJQ1lfRU1Q
VFlfRE9DVU1FTlQ7Ci0gICAgZ19hc3NlcnRfY21wdWludChwb2xpY3kgJiBtYXNrLCA9PSwgbWFz
ayk7Ci0KLSAgICAvLyBDdXN0b20gc2NoZW1lLgotICAgIHBvbGljeSA9IHdlYmtpdF9nZXRfc2Vj
dXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJmb28iKTsKLSAgICBnX2Fzc2VydCghcG9saWN5
KTsKLQotICAgIHBvbGljeSB8PSBXRUJLSVRfU0VDVVJJVFlfUE9MSUNZX0xPQ0FMOwotICAgIHdl
YmtpdF9zZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJmb28iLCBwb2xpY3kpOwot
ICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2dldF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9z
Y2hlbWUoImZvbyIpLCA9PSwgcG9saWN5KTsKLQotICAgIHBvbGljeSB8PSBXRUJLSVRfU0VDVVJJ
VFlfUE9MSUNZX05PX0FDQ0VTU19UT19PVEhFUl9TQ0hFTUU7Ci0gICAgd2Via2l0X3NldF9zZWN1
cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUoImZvbyIsIHBvbGljeSk7Ci0gICAgZ19hc3NlcnRf
Y21wdWludCh3ZWJraXRfZ2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiZm9vIiks
ID09LCBwb2xpY3kpOwotCi0gICAgcG9saWN5IHw9IFdFQktJVF9TRUNVUklUWV9QT0xJQ1lfRElT
UExBWV9JU09MQVRFRDsKLSAgICB3ZWJraXRfc2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3Nj
aGVtZSgiZm9vIiwgcG9saWN5KTsKLSAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9nZXRfc2Vj
dXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJmb28iKSwgPT0sIHBvbGljeSk7Ci0KLSAgICBw
b2xpY3kgfD0gV0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9TRUNVUkU7Ci0gICAgd2Via2l0X3NldF9z
ZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUoImZvbyIsIHBvbGljeSk7Ci0gICAgZ19hc3Nl
cnRfY21wdWludCh3ZWJraXRfZ2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiZm9v
IiksID09LCBwb2xpY3kpOwotCi0gICAgcG9saWN5IHw9IFdFQktJVF9TRUNVUklUWV9QT0xJQ1lf
Q09SU19FTkFCTEVEOwotICAgIHdlYmtpdF9zZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2No
ZW1lKCJmb28iLCBwb2xpY3kpOwotICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2dldF9zZWN1
cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUoImZvbyIpLCA9PSwgcG9saWN5KTsKLQotICAgIHBv
bGljeSB8PSBXRUJLSVRfU0VDVVJJVFlfUE9MSUNZX0VNUFRZX0RPQ1VNRU5UOwotICAgIHdlYmtp
dF9zZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJmb28iLCBwb2xpY3kpOwotICAg
IGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2dldF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hl
bWUoImZvbyIpLCA9PSwgcG9saWN5KTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBh
cmd2KQotewotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLQotICAgIGdf
dGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0gICAgZ190ZXN0X2Fk
ZF9mdW5jKCIvd2Via2l0L2dsb2JhbHMvZGVmYXVsdF9zZXNzaW9uIiwKLSAgICAgICAgICAgICAg
ICAgICAgdGVzdF9nbG9iYWxzX2RlZmF1bHRfc2Vzc2lvbik7Ci0gICAgZ190ZXN0X2FkZF9mdW5j
KCIvd2Via2l0L2dsb2JhbHMvc2VjdXJpdHktcG9saWN5IiwKLSAgICAgICAgICAgICAgICAgICAg
dGVzdF9nbG9iYWxzX3NlY3VyaXR5X3BvbGljeSk7Ci0gICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsK
LX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGhpdHRlc3RyZXN1
bHQuYyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RoaXR0ZXN0cmVzdWx0LmMKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiZjAxMTAuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdC9ndGsvdGVzdHMvdGVzdGhpdHRlc3RyZXN1bHQuYworKysgL2Rldi9udWxsCkBAIC0xLDE2
OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IElnYWxpYSBTLkwuCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNp
bmNsdWRlIDxnbGliL2dzdGRpby5oPgotI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KLQotdHlw
ZWRlZiBzdHJ1Y3QgewotICBjaGFyKiBkYXRhOwotICBndWludCBmbGFnOwotfSBUZXN0SW5mbzsK
LQotc3RhdGljIEdNYWluTG9vcCogbG9vcDsKLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIFdlYktp
dFdlYlZpZXcqIHdlYlZpZXc7Ci0gICAgVGVzdEluZm8qIGluZm87Ci19IEhpdFRlc3RSZXN1bHRG
aXh0dXJlOwotCi1UZXN0SW5mbyoKLXRlc3RfaW5mb19uZXcoY29uc3QgY2hhciogZGF0YSwgZ3Vp
bnQgZmxhZykKLXsKLSAgICBUZXN0SW5mbyogaW5mbzsKLQotICAgIGluZm8gPSBnX3NsaWNlX25l
dyhUZXN0SW5mbyk7Ci0gICAgaW5mby0+ZGF0YSA9IGdfc3RyZHVwKGRhdGEpOwotICAgIGluZm8t
PmZsYWcgPSBmbGFnOwotCi0gICAgcmV0dXJuIGluZm87Ci19Ci0KLXZvaWQKLXRlc3RfaW5mb19k
ZXN0cm95KFRlc3RJbmZvKiBpbmZvKQotewotICAgIGdfZnJlZShpbmZvLT5kYXRhKTsKLSAgICBn
X3NsaWNlX2ZyZWUoVGVzdEluZm8sIGluZm8pOwotfQotCi1zdGF0aWMgdm9pZCBoaXRfdGVzdF9y
ZXN1bHRfZml4dHVyZV9zZXR1cChIaXRUZXN0UmVzdWx0Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0
cG9pbnRlciBkYXRhKQotewotICAgIGZpeHR1cmUtPndlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVco
d2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBnX29iamVjdF9yZWZfc2luayhmaXh0dXJlLT53
ZWJWaWV3KTsKLSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotICAgIGZp
eHR1cmUtPmluZm8gPSAoVGVzdEluZm8qKWRhdGE7Ci19Ci0KLXN0YXRpYyB2b2lkIGhpdF90ZXN0
X3Jlc3VsdF9maXh0dXJlX3RlYXJkb3duKEhpdFRlc3RSZXN1bHRGaXh0dXJlKiBmaXh0dXJlLCBn
Y29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+d2ViVmll
dyk7Ci0gICAgZ19tYWluX2xvb3BfdW5yZWYobG9vcCk7Ci0gICAgdGVzdF9pbmZvX2Rlc3Ryb3ko
Zml4dHVyZS0+aW5mbyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1sb2FkX3N0YXR1c19jYihXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3LAotICAgICAgICAgICAgICAgR1BhcmFtU3BlYyogc3BlYywKLSAgICAg
ICAgICAgICAgIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMg
PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYlZpZXcpOwotICAgIFRlc3RJbmZv
KiBpbmZvID0gKFRlc3RJbmZvKilkYXRhOwotCi0gICAgaWYgKHN0YXR1cyA9PSBXRUJLSVRfTE9B
RF9GSU5JU0hFRCkgewotICAgICAgICBXZWJLaXRIaXRUZXN0UmVzdWx0KiByZXN1bHQ7Ci0gICAg
ICAgIGd1aW50IGNvbnRleHQ7Ci0gICAgICAgIEdka0V2ZW50KiBldmVudCA9IGdka19ldmVudF9u
ZXcoR0RLX0JVVFRPTl9QUkVTUyk7Ci0gICAgICAgIFdlYktpdERPTU5vZGUqIG5vZGU7Ci0gICAg
ICAgIGdpbnQgeCwgeTsKLQotICAgICAgICAvKiBDbG9zZSBlbm91Z2ggdG8gMCwwICovCi0gICAg
ICAgIGV2ZW50LT5idXR0b24ueCA9IDU7Ci0gICAgICAgIGV2ZW50LT5idXR0b24ueSA9IDU7Ci0K
LSAgICAgICAgcmVzdWx0ID0gd2Via2l0X3dlYl92aWV3X2dldF9oaXRfdGVzdF9yZXN1bHQod2Vi
VmlldywgKEdka0V2ZW50QnV0dG9uKikgZXZlbnQpOwotICAgICAgICBnZGtfZXZlbnRfZnJlZShl
dmVudCk7Ci0gICAgICAgIGdfYXNzZXJ0KHJlc3VsdCk7Ci0KLSAgICAgICAgZ19vYmplY3RfZ2V0
KHJlc3VsdCwgImNvbnRleHQiLCAmY29udGV4dCwgTlVMTCk7Ci0gICAgICAgIGdfYXNzZXJ0KGNv
bnRleHQgJiBpbmZvLT5mbGFnKTsKLQotICAgICAgICBnX29iamVjdF9nZXQocmVzdWx0LCAiaW5u
ZXItbm9kZSIsICZub2RlLCBOVUxMKTsKLSAgICAgICAgZ19hc3NlcnQobm9kZSk7Ci0gICAgICAg
IGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfTk9ERShub2RlKSk7Ci0KLSAgICAgICAgZ19vYmplY3Rf
Z2V0KHJlc3VsdCwgIngiLCAmeCwgInkiLCAmeSwgTlVMTCk7Ci0gICAgICAgIGdfYXNzZXJ0X2Nt
cGludCh4LCA9PSwgNSk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcGludCh5LCA9PSwgNSk7Ci0KLSAg
ICAgICAgLyogV2UgY2FuIG9ubHkgdGVzdCB0aGVzZSBub2RlIHR5cGVzIGF0IHRoZSBtb21lbnQu
IEluIHRoZQotICAgICAgICAgKiBpbnB1dCBjYXNlIHRoZXJlIHNlZW1zIHRvIGJlIGFuIGV4dHJh
IGxheWVyIHdpdGggYSBESVYgb24KLSAgICAgICAgICogdG9wIG9mIHRoZSBpbnB1dCwgd2hpY2gg
Z2V0cyBhc3NpZ25lZCB0byB0aGUgaW5uZXItbm9kZS4KLSAgICAgICAgICogdGFnICovCi0gICAg
ICAgIGlmIChpbmZvLT5mbGFnID09IFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9ET0NV
TUVOVCkKLSAgICAgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9IVE1MX0VMRU1F
TlQobm9kZSkpOwotICAgICAgICBlbHNlIGlmIChpbmZvLT5mbGFnID09IFdFQktJVF9ISVRfVEVT
VF9SRVNVTFRfQ09OVEVYVF9JTUFHRSkKLSAgICAgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01f
SVNfSFRNTF9JTUFHRV9FTEVNRU5UKG5vZGUpKTsKLSAgICAgICAgZWxzZSBpZiAoaW5mby0+Zmxh
ZyA9PSBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfTElOSykgewotICAgICAgICAgICAg
LyogVGhlIGhpdCB0ZXN0IHdpbGwgZ2l2ZSB1cyB0aGUgaW5uZXIgdGV4dCBub2RlLCB3ZSB3YW50
Ci0gICAgICAgICAgICAgKiB0aGUgQSB0YWcgKi8KLSAgICAgICAgICAgIFdlYktpdERPTU5vZGUq
IHBhcmVudCA9IHdlYmtpdF9kb21fbm9kZV9nZXRfcGFyZW50X25vZGUobm9kZSk7Ci0gICAgICAg
ICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfQU5DSE9SX0VMRU1FTlQocGFyZW50KSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBnX29iamVjdF91bnJlZihyZXN1bHQpOwotICAgICAgICBn
X21haW5fbG9vcF9xdWl0KGxvb3ApOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQKLXRlc3Rfd2Vi
a2l0X2hpdF90ZXN0X3Jlc3VsdChIaXRUZXN0UmVzdWx0Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0
cG9pbnRlciBkYXRhKQotewotICAgIFRlc3RJbmZvKiBpbmZvID0gKFRlc3RJbmZvKilkYXRhOwot
ICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgNTAsIDUwIH07Ci0KLSAgICB3
ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoZml4dHVyZS0+d2ViVmlldywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW5mby0+ZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgInRleHQvaHRtbCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1
dGYtOCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlOi8vIik7Ci0gICAg
Z3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldyksICZh
bGxvY2F0aW9uKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJub3Rp
Znk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhsb2FkX3N0YXR1c19jYiksIGluZm8pOwotICAg
IGdfbWFpbl9sb29wX3J1bihsb29wKTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBh
cmd2KQotewotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLQotICAgIGdf
dGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0KLSAgICBnX3Rlc3Rf
YWRkKCIvd2Via2l0L2hpdHRlc3RyZXN1bHQvZG9jdW1lbnQiLCBIaXRUZXN0UmVzdWx0Rml4dHVy
ZSwgCi0gICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KCI8aHRtbD48Ym9keT48aDE+V2ViS2l0
R1RLKyE8L2gxPjwvYm9keT48L2h0bWw+IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
V0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0RPQ1VNRU5UKSwKLSAgICAgICAgICAgICAg
IGhpdF90ZXN0X3Jlc3VsdF9maXh0dXJlX3NldHVwLCB0ZXN0X3dlYmtpdF9oaXRfdGVzdF9yZXN1
bHQsIGhpdF90ZXN0X3Jlc3VsdF9maXh0dXJlX3RlYXJkb3duKTsKLSAgICAvKiBXZSBoYXJkY29k
ZSBhbGwgZWxlbWVudHMgdG8gYmUgYXQgMCwwIHNvIHRoYXQgd2Uga25vdyB3aGVyZSB0bwotICAg
ICAqIGdlbmVyYXRlIHRoZSBidXR0b24gZXZlbnRzICovCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtp
dC9oaXR0ZXN0cmVzdWx0L2ltYWdlIiwgSGl0VGVzdFJlc3VsdEZpeHR1cmUsCi0gICAgICAgICAg
ICAgICB0ZXN0X2luZm9fbmV3KCI8aHRtbD48Ym9keT48aW1nIHN0eWxlPSdwb3NpdGlvbjphYnNv
bHV0ZTsgbGVmdDowOyB0b3A6MCdzcmM9JzB4ZGVhZGJlZWYnIHdpZHRoPTUwIGhlaWdodD01MD48
L2ltZz48L2JvZHk+PC9odG1sPiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJ
VF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9JTUFHRSksCi0gICAgICAgICAgICAgICBoaXRfdGVz
dF9yZXN1bHRfZml4dHVyZV9zZXR1cCwgdGVzdF93ZWJraXRfaGl0X3Rlc3RfcmVzdWx0LCBoaXRf
dGVzdF9yZXN1bHRfZml4dHVyZV90ZWFyZG93bik7Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9o
aXR0ZXN0cmVzdWx0L2VkaXRhYmxlIiwgSGl0VGVzdFJlc3VsdEZpeHR1cmUsCi0gICAgICAgICAg
ICAgICB0ZXN0X2luZm9fbmV3KCI8aHRtbD48Ym9keT48aW5wdXQgc3R5bGU9J3Bvc2l0aW9uOmFi
c29sdXRlOyBsZWZ0OjA7IHRvcDowJyBzaXplPSczNSc+PC9pbnB1dD4+PC9ib2R5PjwvaHRtbD4i
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NP
TlRFWFRfRURJVEFCTEUpLAotICAgICAgICAgICAgICAgaGl0X3Rlc3RfcmVzdWx0X2ZpeHR1cmVf
c2V0dXAsIHRlc3Rfd2Via2l0X2hpdF90ZXN0X3Jlc3VsdCwgaGl0X3Rlc3RfcmVzdWx0X2ZpeHR1
cmVfdGVhcmRvd24pOwotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvaGl0dGVzdHJlc3VsdC9saW5r
IiwgSGl0VGVzdFJlc3VsdEZpeHR1cmUsCi0gICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KCI8
aHRtbD48Ym9keT48YSBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MDsgdG9wOjAnIGhy
ZWY9J2h0dHA6Ly93d3cuZXhhbXBsZS5jb20nPkhFTExPIFdPUkxEPC9hPjwvYm9keT48L2h0bWw+
IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9D
T05URVhUX0xJTkspLAotICAgICAgICAgICAgICAgaGl0X3Rlc3RfcmVzdWx0X2ZpeHR1cmVfc2V0
dXAsIHRlc3Rfd2Via2l0X2hpdF90ZXN0X3Jlc3VsdCwgaGl0X3Rlc3RfcmVzdWx0X2ZpeHR1cmVf
dGVhcmRvd24pOwotICAgICAgICAgICAgICAgCi0gICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7Ci19
Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RodHRwYmFja2VuZC5j
IGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGh0dHBiYWNrZW5kLmMKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDkzNzc2ODcuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9n
dGsvdGVzdHMvdGVzdGh0dHBiYWNrZW5kLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEd1c3Rhdm8gTm9yb25oYSBTaWx2YQotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNp
bmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRlIDxndGsv
Z3RrLmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgotCi0vLyBOb3QgeWV0IHB1YmxpYyBB
UEkKLVNvdXBNZXNzYWdlKiB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X2dldF9tZXNzYWdlKFdlYktp
dE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0KTsKLQotc3RhdGljIGdib29sZWFuIG5hdmlnYXRpb25f
cG9saWN5X2RlY2lzaW9uX3JlcXVlc3RlZF9jYihXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2Vi
S2l0V2ViRnJhbWUqIHdlYl9mcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdl
YktpdFdlYk5hdmlnYXRpb25BY3Rpb24qIGFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0V2ViUG9saWN5RGVjaXNpb24q
IGRlY2lzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBncG9pbnRlciBkYXRhKQotewotICAgIFNvdXBNZXNzYWdlKiBtZXNzYWdlID0g
d2Via2l0X25ldHdvcmtfcmVxdWVzdF9nZXRfbWVzc2FnZShyZXF1ZXN0KTsKLQotICAgIC8qIDEg
LT4gd2Via2l0X25ldHdvcmtfcmVxdWVzdF93aXRoX2NvcmVfcmVxdWVzdAotICAgICAqCi0gICAg
ICogVGhlIFNvdXBNZXNzYWdlIGlzIGNyZWF0ZWQgZXhjbHVzaXZlbHkgZm9yIHRoZSBlbWlzc2lv
biBvZiB0aGlzCi0gICAgICogc2lnbmFsLgotICAgICAqLwotICAgIGdfYXNzZXJ0X2NtcGludChH
X09CSkVDVChtZXNzYWdlKS0+cmVmX2NvdW50LCA9PSwgMSk7Ci0KLSAgICByZXR1cm4gRkFMU0U7
Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfc291cF9tZXNzYWdlX2xpZmV0aW1lKCkKLXsKLSAgICBX
ZWJLaXRXZWJWaWV3KiB3ZWJfdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdf
bmV3KCkpOwotCi0gICAgZ19vYmplY3RfcmVmX3Npbmsod2ViX3ZpZXcpOwotCi0gICAgZ19zaWdu
YWxfY29ubmVjdCh3ZWJfdmlldywgIm5hdmlnYXRpb24tcG9saWN5LWRlY2lzaW9uLXJlcXVlc3Rl
ZCIsCi0gICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKG5hdmlnYXRpb25fcG9saWN5X2Rl
Y2lzaW9uX3JlcXVlc3RlZF9jYiksCi0gICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLQotICAg
IC8qIGxvYWRfdXJpIHdpbGwgdHJpZ2dlciB0aGUgbmF2aWdhdGlvbi1wb2xpY3ktZGVjaXNpb24t
cmVxdWVzdGVkCi0gICAgICogc2lnbmFsIGVtaXNzaW9uOwotICAgICAqLwotICAgIHdlYmtpdF93
ZWJfdmlld19sb2FkX3VyaSh3ZWJfdmlldywgImh0dHA6Ly8xMjcuMC4wLjEvIik7Ci0KLSAgICBn
X29iamVjdF91bnJlZih3ZWJfdmlldyk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiog
YXJndikKLXsKLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAgICBn
X3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwotICAgIGdfdGVzdF9h
ZGRfZnVuYygiL3dlYmtpdC9zb3VwbWVzc2FnZS9saWZldGltZSIsIHRlc3Rfc291cF9tZXNzYWdl
X2xpZmV0aW1lKTsKLSAgICByZXR1cm4gZ190ZXN0X3J1biAoKTsKLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RrZXlldmVudHMuYyBiL1NvdXJjZS9XZWJLaXQvZ3Rr
L3Rlc3RzL3Rlc3RrZXlldmVudHMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWNk
MDFmMy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0a2V5ZXZlbnRz
LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzOTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOSwgMjAxMCBNYXJ0aW4gUm9iaW5zb24gPG1yb2JpbnNvbkB3ZWJraXQub3JnPgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0j
aW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRlIDx3
ZWJraXQvd2Via2l0Lmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4K
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NvbnRleHRSZWYuaD4KLQotdHlwZWRlZiBzdHJ1
Y3QgewotICAgIGNoYXIqIHBhZ2U7Ci0gICAgY2hhciogdGV4dDsKLSAgICBnYm9vbGVhbiBzaG91
bGRCZUhhbmRsZWQ7Ci19IFRlc3RJbmZvOwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgR3RrV2lk
Z2V0KiB3aW5kb3c7Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldzsKLSAgICBHTWFpbkxvb3Aq
IGxvb3A7Ci0gICAgVGVzdEluZm8qIGluZm87Ci19IEtleUV2ZW50Rml4dHVyZTsKLQotVGVzdElu
Zm8qCi10ZXN0X2luZm9fbmV3KGNvbnN0IGNoYXIqIHBhZ2UsIGdib29sZWFuIHNob3VsZEJlSGFu
ZGxlZCkKLXsKLSAgICBUZXN0SW5mbyogaW5mbzsKLQotICAgIGluZm8gPSBnX3NsaWNlX25ldyhU
ZXN0SW5mbyk7Ci0gICAgaW5mby0+cGFnZSA9IGdfc3RyZHVwKHBhZ2UpOwotICAgIGluZm8tPnNo
b3VsZEJlSGFuZGxlZCA9IHNob3VsZEJlSGFuZGxlZDsKLSAgICBpbmZvLT50ZXh0ID0gMDsKLQot
ICAgIHJldHVybiBpbmZvOwotfQotCi12b2lkCi10ZXN0X2luZm9fZGVzdHJveShUZXN0SW5mbyog
aW5mbykKLXsKLSAgICBnX2ZyZWUoaW5mby0+cGFnZSk7Ci0gICAgZ19mcmVlKGluZm8tPnRleHQp
OwotICAgIGdfc2xpY2VfZnJlZShUZXN0SW5mbywgaW5mbyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGtl
eV9ldmVudF9maXh0dXJlX3NldHVwKEtleUV2ZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9p
bnRlciBkYXRhKQotewotICAgIGZpeHR1cmUtPmxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwg
VFJVRSk7Ci0KLSAgICBmaXh0dXJlLT53aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9X
X1RPUExFVkVMKTsKLSAgICBmaXh0dXJlLT53ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtp
dF93ZWJfdmlld19uZXcoKSk7Ci0KLSAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVS
KGZpeHR1cmUtPndpbmRvdyksIEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldykpOwotfQotCi1z
dGF0aWMgdm9pZCBrZXlfZXZlbnRfZml4dHVyZV90ZWFyZG93bihLZXlFdmVudEZpeHR1cmUqIGZp
eHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koZml4
dHVyZS0+d2luZG93KTsKLSAgICBnX21haW5fbG9vcF91bnJlZihmaXh0dXJlLT5sb29wKTsKLSAg
ICB0ZXN0X2luZm9fZGVzdHJveShmaXh0dXJlLT5pbmZvKTsKLX0KLQotc3RhdGljIGdib29sZWFu
IGtleV9wcmVzc19ldmVudF9jYihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHZGtFdmVudCogZXZl
bnQsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJlID0gKEtl
eUV2ZW50Rml4dHVyZSopZGF0YTsKLSAgICBnYm9vbGVhbiBoYW5kbGVkID0gR1RLX1dJREdFVF9H
RVRfQ0xBU1MoZml4dHVyZS0+d2ViVmlldyktPmtleV9wcmVzc19ldmVudChHVEtfV0lER0VUKGZp
eHR1cmUtPndlYlZpZXcpLCAmZXZlbnQtPmtleSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGhhbmRs
ZWQsID09LCBmaXh0dXJlLT5pbmZvLT5zaG91bGRCZUhhbmRsZWQpOwotCi0gICAgcmV0dXJuIEZB
TFNFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4ga2V5X3JlbGVhc2VfZXZlbnRfY2IoV2ViS2l0V2Vi
Vmlldyogd2ViVmlldywgR2RrRXZlbnQqIGV2ZW50LCBncG9pbnRlciBkYXRhKQotewotICAgIC8v
IFdlYkNvcmUgbmV2ZXIgc2VlbXMgdG8gbWFyayBrZXl1cCBldmVudHMgYXMgaGFuZGxlZC4KLSAg
ICBLZXlFdmVudEZpeHR1cmUqIGZpeHR1cmUgPSAoS2V5RXZlbnRGaXh0dXJlKilkYXRhOwotICAg
IGdib29sZWFuIGhhbmRsZWQgPSBHVEtfV0lER0VUX0dFVF9DTEFTUyhmaXh0dXJlLT53ZWJWaWV3
KS0+a2V5X3ByZXNzX2V2ZW50KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldyksICZldmVudC0+
a2V5KTsKLSAgICBnX2Fzc2VydCghaGFuZGxlZCk7Ci0KLSAgICBnX21haW5fbG9vcF9xdWl0KGZp
eHR1cmUtPmxvb3ApOwotCi0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0
X2tleXByZXNzX2V2ZW50c19sb2FkX3N0YXR1c19jYihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBH
UGFyYW1TcGVjKiBzcGVjLCBncG9pbnRlciBkYXRhKQotewotICAgIEtleUV2ZW50Rml4dHVyZSog
Zml4dHVyZSA9IChLZXlFdmVudEZpeHR1cmUqKWRhdGE7Ci0gICAgV2ViS2l0TG9hZFN0YXR1cyBz
dGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYlZpZXcpOwotICAgIGlm
IChzdGF0dXMgPT0gV0VCS0lUX0xPQURfRklOSVNIRUQpIHsKLSAgICAgICAgZ19zaWduYWxfY29u
bmVjdChmaXh0dXJlLT53ZWJWaWV3LCAia2V5LXByZXNzLWV2ZW50IiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICBHX0NBTExCQUNLKGtleV9wcmVzc19ldmVudF9jYiksIGZpeHR1cmUpOwotICAg
ICAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJrZXktcmVsZWFzZS1ldmVu
dCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhrZXlfcmVsZWFzZV9ldmVu
dF9jYiksIGZpeHR1cmUpOwotICAgICAgICBpZiAoIWd0a190ZXN0X3dpZGdldF9zZW5kX2tleShH
VEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnZGtfdW5pY29kZV90b19rZXl2YWwoJ2EnKSwgMCkpCi0gICAgICAgICAgICBn
X2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAgIH0KLQotfQotCi1nYm9vbGVhbiBtYXBfZXZlbnRf
Y2IoR3RrV2lkZ2V0ICp3aWRnZXQsIEdka0V2ZW50KiBldmVudCwgZ3BvaW50ZXIgZGF0YSkKLXsK
LSAgICBLZXlFdmVudEZpeHR1cmUqIGZpeHR1cmUgPSAoS2V5RXZlbnRGaXh0dXJlKilkYXRhOwot
ICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhmaXh0dXJlLT53ZWJWaWV3LCBmaXh0dXJl
LT5pbmZvLT5wYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGV4dC9odG1s
IiwgInV0Zi04IiwgImZpbGU6Ly8iKTsKLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2
b2lkIHNldHVwX2tleWV2ZW50X3Rlc3QoS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rw
b2ludGVyIGRhdGEsIEdDYWxsYmFjayBsb2FkX2V2ZW50X2NhbGxiYWNrKQotewotICAgIGZpeHR1
cmUtPmluZm8gPSAoVGVzdEluZm8qKWRhdGE7Ci0gICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJl
LT53aW5kb3csICJtYXAtZXZlbnQiLAotICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyht
YXBfZXZlbnRfY2IpLCBmaXh0dXJlKTsKLQotICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1cyhHVEtf
V0lER0VUKGZpeHR1cmUtPndlYlZpZXcpKTsKLSAgICBndGtfd2lkZ2V0X3Nob3coZml4dHVyZS0+
d2luZG93KTsKLSAgICBndGtfd2lkZ2V0X3Nob3coR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3
KSk7Ci0gICAgZ3RrX3dpbmRvd19wcmVzZW50KEdUS19XSU5ET1coZml4dHVyZS0+d2luZG93KSk7
Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJub3RpZnk6OmxvYWQt
c3RhdHVzIiwKLSAgICAgICAgICAgICAgICAgICAgIGxvYWRfZXZlbnRfY2FsbGJhY2ssIGZpeHR1
cmUpOwotCi0gICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1cmUtPmxvb3ApOwotfQotCi1zdGF0aWMg
dm9pZCB0ZXN0X2tleXByZXNzX2V2ZW50cyhLZXlFdmVudEZpeHR1cmUqIGZpeHR1cmUsIGdjb25z
dHBvaW50ZXIgZGF0YSkKLXsKLSAgICBzZXR1cF9rZXlldmVudF90ZXN0KGZpeHR1cmUsIGRhdGEs
IEdfQ0FMTEJBQ0sodGVzdF9rZXlwcmVzc19ldmVudHNfbG9hZF9zdGF0dXNfY2IpKTsKLX0KLQot
c3RhdGljIGdib29sZWFuIGVsZW1lbnRfdGV4dF9lcXVhbF90byhKU0NvbnRleHRSZWYgY29udGV4
dCwgY29uc3QgZ2NoYXIqIHRleHQpCi17Ci0gICAgSlNTdHJpbmdSZWYgc2NyaXB0U3RyaW5nID0g
SlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoCi0gICAgICAid2luZG93LmRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKFwiaW5cIikudmFsdWU7Iik7Ci0gICAgSlNWYWx1ZVJlZiB2YWx1ZSA9IEpT
RXZhbHVhdGVTY3JpcHQoY29udGV4dCwgc2NyaXB0U3RyaW5nLCAwLCAwLCAwLCAwKTsKLSAgICBK
U1N0cmluZ1JlbGVhc2Uoc2NyaXB0U3RyaW5nKTsKLQotICAgIC8vIElmIHRoZSB2YWx1ZSBpc24n
dCBhIHN0cmluZywgdGhlIGVsZW1lbnQgaXMgcHJvYmFibHkgYSBkaXYKLSAgICAvLyBzbyBncmFi
IHRoZSBpbm5lclRleHQgaW5zdGVhZC4KLSAgICBpZiAoIUpTVmFsdWVJc1N0cmluZyhjb250ZXh0
LCB2YWx1ZSkpIHsKLSAgICAgICAgSlNTdHJpbmdSZWYgc2NyaXB0U3RyaW5nID0gSlNTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoCi0gICAgICAgICAgIndpbmRvdy5kb2N1bWVudC5nZXRFbGVt
ZW50QnlJZChcImluXCIpLmlubmVyVGV4dDsiKTsKLSAgICAgICAgdmFsdWUgPSBKU0V2YWx1YXRl
U2NyaXB0KGNvbnRleHQsIHNjcmlwdFN0cmluZywgMCwgMCwgMCwgMCk7Ci0gICAgICAgIEpTU3Ry
aW5nUmVsZWFzZShzY3JpcHRTdHJpbmcpOwotICAgIH0KLQotICAgIGdfYXNzZXJ0KEpTVmFsdWVJ
c1N0cmluZyhjb250ZXh0LCB2YWx1ZSkpOwotICAgIEpTU3RyaW5nUmVmIGlucHV0U3RyaW5nID0g
SlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCB2YWx1ZSwgMCk7Ci0gICAgZ19hc3NlcnQoaW5w
dXRTdHJpbmcpOwotCi0gICAgZ2ludCBzaXplID0gSlNTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJp
bmdTaXplKGlucHV0U3RyaW5nKTsKLSAgICBnY2hhciogY1N0cmluZyA9IGdfbWFsbG9jKHNpemUp
OwotICAgIEpTU3RyaW5nR2V0VVRGOENTdHJpbmcoaW5wdXRTdHJpbmcsIGNTdHJpbmcsIHNpemUp
OwotICAgIEpTU3RyaW5nUmVsZWFzZShpbnB1dFN0cmluZyk7Ci0KLSAgICBnYm9vbGVhbiByZXN1
bHQgPSBnX3V0ZjhfY29sbGF0ZShjU3RyaW5nLCB0ZXh0KSA9PSAwOwotICAgIGdfZnJlZShjU3Ry
aW5nKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X2ltZV9sb2Fk
X3N0YXR1c19jYihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHUGFyYW1TcGVjKiBzcGVjLCBncG9p
bnRlciBkYXRhKQotewotICAgIEtleUV2ZW50Rml4dHVyZSogZml4dHVyZSA9IChLZXlFdmVudEZp
eHR1cmUqKWRhdGE7Ci0gICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYlZpZXcpOwotICAgIGlmIChzdGF0dXMgIT0gV0VCS0lUX0xP
QURfRklOSVNIRUQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEpTR2xvYmFsQ29udGV4dFJlZiBj
b250ZXh0ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfZ2xvYmFsX2NvbnRleHQoCi0gICAgICAgIHdl
YmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh3ZWJWaWV3KSk7Ci0gICAgZ19hc3NlcnQoY29u
dGV4dCk7Ci0KLSAgICBHdGtJTUNvbnRleHQqIGltQ29udGV4dCA9IDA7Ci0gICAgZ19vYmplY3Rf
Z2V0KHdlYlZpZXcsICJpbS1jb250ZXh0IiwgJmltQ29udGV4dCwgTlVMTCk7Ci0gICAgZ19hc3Nl
cnQoaW1Db250ZXh0KTsKLQotICAgIC8vIFRlc3QgdGhhdCBjb21taXRzIHRoYXQgaGFwcGVuIG91
dHNpZGUgb2Yga2V5IGV2ZW50cwotICAgIC8vIGNoYW5nZSB0aGUgdGV4dCBmaWVsZCBpbW1lZGlh
dGVseS4gVGhpcyBjbG9zZWx5IHJlcGxpY2F0ZXMKLSAgICAvLyB0aGUgYmVoYXZpb3Igb2YgU0NJ
TS4KLSAgICBnX2Fzc2VydChlbGVtZW50X3RleHRfZXF1YWxfdG8oY29udGV4dCwgIiIpKTsKLSAg
ICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoaW1Db250ZXh0LCAiY29tbWl0IiwgImEiKTsKLSAgICBn
X2Fzc2VydChlbGVtZW50X3RleHRfZXF1YWxfdG8oY29udGV4dCwgImEiKSk7Ci0gICAgZ19zaWdu
YWxfZW1pdF9ieV9uYW1lKGltQ29udGV4dCwgImNvbW1pdCIsICJiIik7Ci0gICAgZ19hc3NlcnQo
ZWxlbWVudF90ZXh0X2VxdWFsX3RvKGNvbnRleHQsICJhYiIpKTsKLSAgICBnX3NpZ25hbF9lbWl0
X2J5X25hbWUoaW1Db250ZXh0LCAiY29tbWl0IiwgImMiKTsKLSAgICBnX2Fzc2VydChlbGVtZW50
X3RleHRfZXF1YWxfdG8oY29udGV4dCwgImFiYyIpKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGlt
Q29udGV4dCk7Ci0gICAgZ19tYWluX2xvb3BfcXVpdChmaXh0dXJlLT5sb29wKTsKLX0KLQotc3Rh
dGljIHZvaWQgdGVzdF9pbWUoS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVy
IGRhdGEpCi17Ci0gICAgc2V0dXBfa2V5ZXZlbnRfdGVzdChmaXh0dXJlLCBkYXRhLCBHX0NBTExC
QUNLKHRlc3RfaW1lX2xvYWRfc3RhdHVzX2NiKSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiB2ZXJp
ZnlfY29udGVudHMoZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBLZXlFdmVudEZpeHR1cmUqIGZpeHR1
cmUgPSAoS2V5RXZlbnRGaXh0dXJlKilkYXRhOwotICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250
ZXh0ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfZ2xvYmFsX2NvbnRleHQoCi0gICAgICAgIHdlYmtp
dF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZShmaXh0dXJlLT53ZWJWaWV3KSk7Ci0gICAgZ19hc3Nl
cnQoY29udGV4dCk7Ci0KLSAgICBnX2Fzc2VydChlbGVtZW50X3RleHRfZXF1YWxfdG8oY29udGV4
dCwgZml4dHVyZS0+aW5mby0+dGV4dCkpOwotICAgIGdfbWFpbl9sb29wX3F1aXQoZml4dHVyZS0+
bG9vcCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X2Jsb2NraW5n
X2xvYWRfc3RhdHVzX2NiKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEdQYXJhbVNwZWMqIHNwZWMs
IGdwb2ludGVyIGRhdGEpCi17Ci0gICAgS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJlID0gKEtleUV2
ZW50Rml4dHVyZSopZGF0YTsKLSAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93
ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMod2ViVmlldyk7Ci0gICAgaWYgKHN0YXR1cyAhPSBXRUJL
SVRfTE9BRF9GSU5JU0hFRCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVGhlIGZpcnN0IGtl
eXByZXNzIGV2ZW50IHNob3VsZCBub3QgbW9kaWZ5IHRoZSBmaWVsZC4KLSAgICBmaXh0dXJlLT5p
bmZvLT50ZXh0ID0gZ19zdHJkdXAoImJjIik7Ci0gICAgaWYgKCFndGtfdGVzdF93aWRnZXRfc2Vu
ZF9rZXkoR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdka191bmljb2RlX3RvX2tleXZhbCgnYScpLCAwKSkKLSAgICAgICAgZ19h
c3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICBpZiAoIWd0a190ZXN0X3dpZGdldF9zZW5kX2tleShH
VEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdka191bmljb2RlX3RvX2tleXZhbCgnYicpLCAwKSkKLSAgICAgICAgZ19hc3NlcnRf
bm90X3JlYWNoZWQoKTsKLSAgICBpZiAoIWd0a190ZXN0X3dpZGdldF9zZW5kX2tleShHVEtfV0lE
R0VUKGZpeHR1cmUtPndlYlZpZXcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdka191bmljb2RlX3RvX2tleXZhbCgnYycpLCAwKSkKLSAgICAgICAgZ19hc3NlcnRfbm90X3Jl
YWNoZWQoKTsKLQotICAgIGdfaWRsZV9hZGQodmVyaWZ5X2NvbnRlbnRzLCBmaXh0dXJlKTsKLX0K
LQotc3RhdGljIHZvaWQgdGVzdF9ibG9ja2luZyhLZXlFdmVudEZpeHR1cmUqIGZpeHR1cmUsIGdj
b25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBzZXR1cF9rZXlldmVudF90ZXN0KGZpeHR1cmUsIGRh
dGEsIEdfQ0FMTEJBQ0sodGVzdF9ibG9ja2luZ19sb2FkX3N0YXR1c19jYikpOwotfQotCi0jaWYg
ZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkKLXN0YXRpYyB2b2lkIHRlc3RfeGltX2xvYWRfc3Rh
dHVzX2NiKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEdQYXJhbVNwZWMqIHNwZWMsIGdwb2ludGVy
IGRhdGEpCi17Ci0gICAgS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJlID0gKEtleUV2ZW50Rml4dHVy
ZSopZGF0YTsKLSAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJfdmlld19n
ZXRfbG9hZF9zdGF0dXMod2ViVmlldyk7Ci0gICAgaWYgKHN0YXR1cyAhPSBXRUJLSVRfTE9BRF9G
SU5JU0hFRCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3RrSU1Db250ZXh0KiBpbUNvbnRleHQg
PSAwOwotICAgIGdfb2JqZWN0X2dldCh3ZWJWaWV3LCAiaW0tY29udGV4dCIsICZpbUNvbnRleHQs
IE5VTEwpOwotICAgIGdfYXNzZXJ0KGltQ29udGV4dCk7Ci0KLSAgICBnY2hhciogb3JpZ2luYWxJ
ZCA9IGdfc3RyZHVwKGd0a19pbV9tdWx0aWNvbnRleHRfZ2V0X2NvbnRleHRfaWQoR1RLX0lNX01V
TFRJQ09OVEVYVChpbUNvbnRleHQpKSk7Ci0gICAgZ3RrX2ltX211bHRpY29udGV4dF9zZXRfY29u
dGV4dF9pZChHVEtfSU1fTVVMVElDT05URVhUKGltQ29udGV4dCksICJ4aW0iKTsKLQotICAgIC8v
IFRlc3QgdGhhdCBjb21taXRzIHRoYXQgaGFwcGVuIG91dHNpZGUgb2Yga2V5IGV2ZW50cwotICAg
IC8vIGNoYW5nZSB0aGUgdGV4dCBmaWVsZCBpbW1lZGlhdGVseS4gVGhpcyBjbG9zZWx5IHJlcGxp
Y2F0ZXMKLSAgICAvLyB0aGUgYmVoYXZpb3Igb2YgU0NJTS4KLSAgICBmaXh0dXJlLT5pbmZvLT50
ZXh0ID0gZ19zdHJkdXAoImRlYmlhbiIpOwotICAgIGlmICghZ3RrX3Rlc3Rfd2lkZ2V0X3NlbmRf
a2V5KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldyksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnZGtfdW5pY29kZV90b19rZXl2YWwoJ2QnKSwgMCkpCi0gICAgICAgIGdfYXNz
ZXJ0X25vdF9yZWFjaGVkKCk7Ci0gICAgaWYgKCFndGtfdGVzdF93aWRnZXRfc2VuZF9rZXkoR1RL
X1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2RrX3VuaWNvZGVfdG9fa2V5dmFsKCdlJyksIDApKQotICAgICAgICBnX2Fzc2VydF9ub3RfcmVh
Y2hlZCgpOwotICAgIGlmICghZ3RrX3Rlc3Rfd2lkZ2V0X3NlbmRfa2V5KEdUS19XSURHRVQoZml4
dHVyZS0+d2ViVmlldyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdka191bmljb2Rl
X3RvX2tleXZhbCgnYicpLCAwKSkKLSAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKLSAg
ICBpZiAoIWd0a190ZXN0X3dpZGdldF9zZW5kX2tleShHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZp
ZXcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGtfdW5pY29kZV90b19rZXl2YWwo
J2knKSwgMCkpCi0gICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0gICAgaWYgKCFndGtf
dGVzdF93aWRnZXRfc2VuZF9rZXkoR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ2RrX3VuaWNvZGVfdG9fa2V5dmFsKCdhJyksIDApKQot
ICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAgIGlmICghZ3RrX3Rlc3Rfd2lkZ2V0
X3NlbmRfa2V5KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldyksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdka191bmljb2RlX3RvX2tleXZhbCgnbicpLCAwKSkKLSAgICAgICAgZ19h
c3NlcnRfbm90X3JlYWNoZWQoKTsKLQotICAgIGd0a19pbV9tdWx0aWNvbnRleHRfc2V0X2NvbnRl
eHRfaWQoR1RLX0lNX01VTFRJQ09OVEVYVChpbUNvbnRleHQpLCBvcmlnaW5hbElkKTsKLSAgICBn
X2ZyZWUob3JpZ2luYWxJZCk7Ci0gICAgZ19vYmplY3RfdW5yZWYoaW1Db250ZXh0KTsKLQotICAg
IGdfaWRsZV9hZGQodmVyaWZ5X2NvbnRlbnRzLCBmaXh0dXJlKTsKLX0KLQotc3RhdGljIHZvaWQg
dGVzdF94aW0oS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17
Ci0gICAgc2V0dXBfa2V5ZXZlbnRfdGVzdChmaXh0dXJlLCBkYXRhLCBHX0NBTExCQUNLKHRlc3Rf
eGltX2xvYWRfc3RhdHVzX2NiKSk7Ci19Ci0jZW5kaWYKLQotaW50IG1haW4oaW50IGFyZ2MsIGNo
YXIqKiBhcmd2KQotewotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLQot
ICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0KLQotICAg
IC8vIFdlJ2xsIHRlc3QgaW5wdXQgb24gYSBzbGV3IG9mIGRpZmZlcmVudCBub2RlIHR5cGVzLiBL
ZXkgZXZlbnRzIHRvCi0gICAgLy8gdGV4dCBpbnB1dHMgYW5kIGVkaXRhYmxlIGRpdnMgc2hvdWxk
IGJlIG1hcmtlZCBhcyBoYW5kbGVkLiBLZXkgZXZlbnRzCi0gICAgLy8gdG8gYnV0dG9ucyBhbmQg
bGlua3Mgc2hvdWxkIG5vdC4KLSAgICBjb25zdCBjaGFyKiB0ZXh0aW5wdXRfaHRtbCA9ICI8aHRt
bD48Ym9keT48aW5wdXQgaWQ9XCJpblwiIHR5cGU9XCJ0ZXh0XCI+IgotICAgICAgICAiPHNjcmlw
dD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW4nKS5mb2N1cygpOzwvc2NyaXB0PjwvYm9keT48
L2h0bWw+IjsKLSAgICBjb25zdCBjaGFyKiBidXR0b25faHRtbCA9ICI8aHRtbD48Ym9keT48aW5w
dXQgaWQ9XCJpblwiIHR5cGU9XCJidXR0b25cIj4iCi0gICAgICAgICI8c2NyaXB0PmRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdpbicpLmZvY3VzKCk7PC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4iOwot
ICAgIGNvbnN0IGNoYXIqIGxpbmtfaHRtbCA9ICI8aHRtbD48Ym9keT48YSBocmVmPVwiaHR0cDov
L3d3dy5nbm9tZS5vcmdcIiBpZD1cImluXCI+IgotICAgICAgICAiTElOS1kgTUNMSU5LRVJTT048
L2E+PHNjcmlwdD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW4nKS5mb2N1cygpOzwvc2NyaXB0
PiIKLSAgICAgICAgIjwvYm9keT48L2h0bWw+IjsKLSAgICBjb25zdCBjaGFyKiBkaXZfaHRtbCA9
ICI8aHRtbD48Ym9keT48ZGl2IGlkPVwiaW5cIiBjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCI+Igot
ICAgICAgICAiPHNjcmlwdD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW4nKS5mb2N1cygpOzwv
c2NyaXB0PjwvYm9keT48L2h0bWw+IjsKLQotICAgIC8vIFRoZXNlIGFyZSBzaW1pbGFyIHRvIHRo
ZSBibG9ja3MgYWJvdmUsIGJ1dCB0aGV5IHNob3VsZCBibG9jayB0aGUgZmlyc3QKLSAgICAvLyBr
ZXlwcmVzcyBtb2RpZnlpbmcgdGhlIGVkaXRhYmxlIG5vZGUuCi0gICAgY29uc3QgY2hhciogdGV4
dGlucHV0X2h0bWxfYmxvY2tpbmcgPSAiPGh0bWw+PGJvZHk+IgotICAgICAgICAiPGlucHV0IGlk
PVwiaW5cIiB0eXBlPVwidGV4dFwiICIKLSAgICAgICAgIm9ua2V5cHJlc3M9XCJpZiAoZmlyc3Qp
IHtldmVudC5wcmV2ZW50RGVmYXVsdCgpO2ZpcnN0PWZhbHNlO31cIj4iCi0gICAgICAgICI8c2Ny
aXB0PmZpcnN0ID0gdHJ1ZTtcbmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbicpLmZvY3VzKCk7
PC9zY3JpcHQ+XG4iCi0gICAgICAgICI8L3NjcmlwdD48L2JvZHk+PC9odG1sPiI7Ci0gICAgY29u
c3QgY2hhciogZGl2X2h0bWxfYmxvY2tpbmcgPSAiPGh0bWw+PGJvZHk+IgotICAgICAgICAiPGRp
diBpZD1cImluXCIgY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiICIKLSAgICAgICAgIm9ua2V5cHJl
c3M9XCJpZiAoZmlyc3QpIHtldmVudC5wcmV2ZW50RGVmYXVsdCgpO2ZpcnN0PWZhbHNlO31cIj4i
Ci0gICAgICAgICI8c2NyaXB0PmZpcnN0ID0gdHJ1ZTsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J2luJykuZm9jdXMoKTs8L3NjcmlwdD5cbiIKLSAgICAgICAgIjwvc2NyaXB0PjwvYm9keT48L2h0
bWw+IjsKLQotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQva2V5ZXZlbnRzL2V2ZW50LXRleHRpbnB1
dCIsIEtleUV2ZW50Rml4dHVyZSwKLSAgICAgICAgICAgICAgIHRlc3RfaW5mb19uZXcodGV4dGlu
cHV0X2h0bWwsIFRSVUUpLAotICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfc2V0dXAs
Ci0gICAgICAgICAgICAgICB0ZXN0X2tleXByZXNzX2V2ZW50cywKLSAgICAgICAgICAgICAgIGtl
eV9ldmVudF9maXh0dXJlX3RlYXJkb3duKTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2tleWV2
ZW50cy9ldmVudC1idXR0b25zIiwgS2V5RXZlbnRGaXh0dXJlLAotICAgICAgICAgICAgICAgdGVz
dF9pbmZvX25ldyhidXR0b25faHRtbCwgRkFMU0UpLAotICAgICAgICAgICAgICAga2V5X2V2ZW50
X2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X2tleXByZXNzX2V2ZW50cywKLSAg
ICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3RlYXJkb3duKTsKLSAgICBnX3Rlc3RfYWRk
KCIvd2Via2l0L2tleWV2ZW50cy9ldmVudC1saW5rIiwgS2V5RXZlbnRGaXh0dXJlLAotICAgICAg
ICAgICAgICAgdGVzdF9pbmZvX25ldyhsaW5rX2h0bWwsIEZBTFNFKSwKLSAgICAgICAgICAgICAg
IGtleV9ldmVudF9maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF9rZXlwcmVzc19l
dmVudHMsCi0gICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV90ZWFyZG93bik7Ci0gICAg
Z190ZXN0X2FkZCgiL3dlYmtpdC9rZXlldmVudC9ldmVudC1kaXYiLCBLZXlFdmVudEZpeHR1cmUs
Ci0gICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KGRpdl9odG1sLCBUUlVFKSwKLSAgICAgICAg
ICAgICAgIGtleV9ldmVudF9maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF9rZXlw
cmVzc19ldmVudHMsCi0gICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV90ZWFyZG93bik7
Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9rZXlldmVudC9pbWUtdGV4dGlucHV0IiwgS2V5RXZl
bnRGaXh0dXJlLAotICAgICAgICAgICAgICAgdGVzdF9pbmZvX25ldyh0ZXh0aW5wdXRfaHRtbCwg
VFJVRSksCi0gICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV9zZXR1cCwKLSAgICAgICAg
ICAgICAgIHRlc3RfaW1lLAotICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfdGVhcmRv
d24pOwotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQva2V5ZXZlbnQvaW1lLWRpdiIsIEtleUV2ZW50
Rml4dHVyZSwKLSAgICAgICAgICAgICAgIHRlc3RfaW5mb19uZXcoZGl2X2h0bWwsIFRSVUUpLAot
ICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0
ZXN0X2ltZSwKLSAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3RlYXJkb3duKTsKLSAg
ICBnX3Rlc3RfYWRkKCIvd2Via2l0L2tleWV2ZW50L2Jsb2NrLXRleHRpbnB1dCIsIEtleUV2ZW50
Rml4dHVyZSwKLSAgICAgICAgICAgICAgIHRlc3RfaW5mb19uZXcodGV4dGlucHV0X2h0bWxfYmxv
Y2tpbmcsIFRSVUUpLAotICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfc2V0dXAsCi0g
ICAgICAgICAgICAgICB0ZXN0X2Jsb2NraW5nLAotICAgICAgICAgICAgICAga2V5X2V2ZW50X2Zp
eHR1cmVfdGVhcmRvd24pOwotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQva2V5ZXZlbnQvYmxvY2st
ZGl2IiwgS2V5RXZlbnRGaXh0dXJlLAotICAgICAgICAgICAgICAgdGVzdF9pbmZvX25ldyhkaXZf
aHRtbF9ibG9ja2luZywgVFJVRSksCi0gICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV9z
ZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3RfYmxvY2tpbmcsCi0gICAgICAgICAgICAgICBrZXlf
ZXZlbnRfZml4dHVyZV90ZWFyZG93bik7Ci0jaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkK
LSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2tleWV2ZW50L3hpbS10ZXh0aW5wdXQiLCBLZXlFdmVu
dEZpeHR1cmUsCi0gICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KHRleHRpbnB1dF9odG1sLCBU
UlVFKSwKLSAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3NldHVwLAotICAgICAgICAg
ICAgICAgdGVzdF94aW0sCi0gICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV90ZWFyZG93
bik7Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9rZXlldmVudC94aW0tZGl2IiwgS2V5RXZlbnRG
aXh0dXJlLAotICAgICAgICAgICAgICAgdGVzdF9pbmZvX25ldyhkaXZfaHRtbCwgVFJVRSksCi0g
ICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRl
c3RfeGltLAotICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfdGVhcmRvd24pOwotI2Vu
ZGlmCi0KLSAgICByZXR1cm4gZ190ZXN0X3J1bigpOwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2d0ay90ZXN0cy90ZXN0bG9hZGluZy5jIGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMv
dGVzdGxvYWRpbmcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBhOTIwZi4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0bG9hZGluZy5jCisrKyAvZGV2
L251bGwKQEAgLTEsNDM1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAg
R3VzdGF2byBOb3JvbmhhIFNpbHZhCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSWdhbGlhIFMuTC4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDxsaWJz
b3VwL3NvdXAuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0
Lmg+Ci0KLS8qIFRoaXMgc3RyaW5nIGhhcyB0byBiZSByYXRoZXIgYmlnIGJlY2F1c2Ugb2YgdGhl
IGNhbmNlbGxlZCB0ZXN0IC0gaXQKLSAqIGxvb2tzIGxpa2Ugc291cCByZWZ1c2VzIHRvIHNlbmQg
b3IgcmVjZWl2ZSBhIHRvbyBzbWFsbCBjaHVuayAqLwotI2RlZmluZSBIVE1MX1NUUklORyAiPGh0
bWw+PGJvZHk+VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nITwvYm9keT48L2h0bWw+IgotCi1Tb3VwVVJJKiBiYXNlX3VyaTsKLQotLyog
Rm9yIHJlYWwgcmVxdWVzdCB0ZXN0aW5nICovCi1zdGF0aWMgdm9pZAotc2VydmVyX2NhbGxiYWNr
KFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1zZywKLSAgICAgICAgICAgICAgICBj
b25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiBxdWVyeSwKLSAgICAgICAgICAgICAgICBTb3Vw
Q2xpZW50Q29udGV4dCogY29udGV4dCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBpZiAobXNnLT5t
ZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3Rh
dHVzKG1zZywgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1zZywgU09VUF9TVEFUVVNfT0sp
OwotCi0gICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvdGVzdF9sb2FkaW5nX3N0YXR1cyIpIHx8
IGdfc3RyX2VxdWFsKHBhdGgsICIvdGVzdF9sb2FkaW5nX3N0YXR1czIiKSkKLSAgICAgICAgc291
cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1zZy0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RB
VElDLCBIVE1MX1NUUklORywgc3RybGVuKEhUTUxfU1RSSU5HKSk7Ci0gICAgZWxzZSBpZiAoZ19z
dHJfZXF1YWwocGF0aCwgIi90ZXN0X2xvYWRfZXJyb3IiKSkgewotICAgICAgICBzb3VwX21lc3Nh
Z2Vfc2V0X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX0NBTlRfQ09OTkVDVCk7Ci0gICAgfSBlbHNl
IGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3Rlc3RfbG9hZGluZ19jYW5jZWxsZWQiKSkgewotICAg
ICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19zZXRfZW5jb2RpbmcobXNnLT5yZXNwb25zZV9oZWFk
ZXJzLCBTT1VQX0VOQ09ESU5HX0NIVU5LRUQpOwotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9h
cHBlbmQobXNnLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIEhUTUxfU1RSSU5H
LCBzdHJsZW4oSFRNTF9TVFJJTkcpKTsKLSAgICAgICAgc291cF9zZXJ2ZXJfdW5wYXVzZV9tZXNz
YWdlKHNlcnZlciwgbXNnKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNvdXBfbWVz
c2FnZV9ib2R5X2NvbXBsZXRlKG1zZy0+cmVzcG9uc2VfYm9keSk7Ci19Ci0KLXR5cGVkZWYgc3Ry
dWN0IHsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OwotICAgIEdNYWluTG9vcCAqbG9vcDsK
LSAgICBnYm9vbGVhbiBoYXNfYmVlbl9wcm92aXNpb25hbDsKLSAgICBnYm9vbGVhbiBoYXNfYmVl
bl9jb21taXR0ZWQ7Ci0gICAgZ2Jvb2xlYW4gaGFzX2JlZW5fZmlyc3RfdmlzdWFsbHlfbm9uX2Vt
cHR5X2xheW91dDsKLSAgICBnYm9vbGVhbiBoYXNfYmVlbl9maW5pc2hlZDsKLSAgICBnYm9vbGVh
biBoYXNfYmVlbl9mYWlsZWQ7Ci0gICAgZ2Jvb2xlYW4gaGFzX2JlZW5fbG9hZF9lcnJvcjsKLX0g
V2ViTG9hZGluZ0ZpeHR1cmU7Ci0KLXN0YXRpYyB2b2lkIHdlYl9sb2FkaW5nX2ZpeHR1cmVfc2V0
dXAoV2ViTG9hZGluZ0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAg
ICBmaXh0dXJlLT53ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXco
KSk7Ci0gICAgZml4dHVyZS0+bG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLSAg
ICBnX29iamVjdF9yZWZfc2luayhmaXh0dXJlLT53ZWJWaWV3KTsKLSAgICBmaXh0dXJlLT5oYXNf
YmVlbl9wcm92aXNpb25hbCA9IEZBTFNFOwotICAgIGZpeHR1cmUtPmhhc19iZWVuX2NvbW1pdHRl
ZCA9IEZBTFNFOwotICAgIGZpeHR1cmUtPmhhc19iZWVuX2ZpcnN0X3Zpc3VhbGx5X25vbl9lbXB0
eV9sYXlvdXQgPSBGQUxTRTsKLSAgICBmaXh0dXJlLT5oYXNfYmVlbl9maW5pc2hlZCA9IEZBTFNF
OwotICAgIGZpeHR1cmUtPmhhc19iZWVuX2ZhaWxlZCA9IEZBTFNFOwotICAgIGZpeHR1cmUtPmhh
c19iZWVuX2xvYWRfZXJyb3IgPSBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQgd2ViX2xvYWRpbmdf
Zml4dHVyZV90ZWFyZG93bihXZWJMb2FkaW5nRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRl
ciBkYXRhKQotewotICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPndlYlZpZXcpOwotICAgIGdf
bWFpbl9sb29wX3VucmVmKGZpeHR1cmUtPmxvb3ApOwotfQotCi1zdGF0aWMgY2hhciogZ2V0X3Vy
aV9mb3JfcGF0aChjb25zdCBjaGFyKiBwYXRoKQotewotICAgIFNvdXBVUkkqIHVyaTsKLSAgICBj
aGFyKiB1cmlfc3RyaW5nOwotCi0gICAgdXJpID0gc291cF91cmlfbmV3X3dpdGhfYmFzZShiYXNl
X3VyaSwgcGF0aCk7Ci0gICAgdXJpX3N0cmluZyA9IHNvdXBfdXJpX3RvX3N0cmluZyh1cmksIEZB
TFNFKTsKLSAgICBzb3VwX3VyaV9mcmVlICh1cmkpOwotCi0gICAgcmV0dXJuIHVyaV9zdHJpbmc7
Ci19Ci0KLXN0YXRpYyB2b2lkIGxvYWRfZmluaXNoZWRfY2IoV2ViS2l0V2ViVmlldyogd2ViX3Zp
ZXcsIFdlYktpdFdlYkZyYW1lKiB3ZWJfZnJhbWUsIFdlYkxvYWRpbmdGaXh0dXJlKiBmaXh0dXJl
KQotewotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsKTsKLSAgICBn
X2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9jb21taXR0ZWQpOwotICAgIGdfYXNzZXJ0KGZpeHR1
cmUtPmhhc19iZWVuX2ZpcnN0X3Zpc3VhbGx5X25vbl9lbXB0eV9sYXlvdXQpOwotCi0gICAgZ19t
YWluX2xvb3BfcXVpdChmaXh0dXJlLT5sb29wKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBzdGF0dXNf
Y2hhbmdlZF9jYihHT2JqZWN0KiBvYmplY3QsIEdQYXJhbVNwZWMqIHBzcGVjLCBXZWJMb2FkaW5n
Rml4dHVyZSogZml4dHVyZSkKLXsKLSAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtp
dF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMoV0VCS0lUX1dFQl9WSUVXKG9iamVjdCkpOwotCi0g
ICAgc3dpdGNoIChzdGF0dXMpIHsKLSAgICBjYXNlIFdFQktJVF9MT0FEX1BST1ZJU0lPTkFMOgot
ICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwpOwotICAgICAg
ICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fY29tbWl0dGVkKTsKLSAgICAgICAgZ19hc3Nl
cnQoIWZpeHR1cmUtPmhhc19iZWVuX2ZpcnN0X3Zpc3VhbGx5X25vbl9lbXB0eV9sYXlvdXQpOwot
ICAgICAgICBmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCA9IFRSVUU7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgV0VCS0lUX0xPQURfQ09NTUlUVEVEOgotICAgICAgICBnX2Fzc2VydChm
aXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCk7Ci0gICAgICAgIGdfYXNzZXJ0KCFmaXh0dXJl
LT5oYXNfYmVlbl9jb21taXR0ZWQpOwotICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2Jl
ZW5fZmlyc3RfdmlzdWFsbHlfbm9uX2VtcHR5X2xheW91dCk7Ci0gICAgICAgIGZpeHR1cmUtPmhh
c19iZWVuX2NvbW1pdHRlZCA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV0VCS0lU
X0xPQURfRklSU1RfVklTVUFMTFlfTk9OX0VNUFRZX0xBWU9VVDoKLSAgICAgICAgZ19hc3NlcnQo
Zml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwpOwotICAgICAgICBnX2Fzc2VydChmaXh0dXJl
LT5oYXNfYmVlbl9jb21taXR0ZWQpOwotICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2Jl
ZW5fZmlyc3RfdmlzdWFsbHlfbm9uX2VtcHR5X2xheW91dCk7Ci0gICAgICAgIGZpeHR1cmUtPmhh
c19iZWVuX2ZpcnN0X3Zpc3VhbGx5X25vbl9lbXB0eV9sYXlvdXQgPSBUUlVFOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFdFQktJVF9MT0FEX0ZJTklTSEVEOgotICAgICAgICBnX2Fzc2VydChm
aXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCk7Ci0gICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUt
Pmhhc19iZWVuX2NvbW1pdHRlZCk7Ci0gICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVu
X2ZpcnN0X3Zpc3VhbGx5X25vbl9lbXB0eV9sYXlvdXQpOwotICAgICAgICBicmVhazsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAgIH0KLX0KLQotc3Rh
dGljIHZvaWQgdGVzdF9sb2FkaW5nX3N0YXR1cyhXZWJMb2FkaW5nRml4dHVyZSogZml4dHVyZSwg
Z2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGNoYXIqIHVyaV9zdHJpbmc7Ci0KLSAgICBnX2Fz
c2VydF9jbXBpbnQod2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyhmaXh0dXJlLT53ZWJW
aWV3KSwgPT0sIFdFQktJVF9MT0FEX1BST1ZJU0lPTkFMKTsKLQotICAgIGdfb2JqZWN0X2Nvbm5l
Y3QoR19PQkpFQ1QoZml4dHVyZS0+d2ViVmlldyksCi0gICAgICAgICAgICAgICAgICAgICAic2ln
bmFsOjpub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhzdGF0dXNfY2hhbmdlZF9jYiks
IGZpeHR1cmUsCi0gICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjpsb2FkLWZpbmlzaGVkIiwg
R19DQUxMQkFDSyhsb2FkX2ZpbmlzaGVkX2NiKSwgZml4dHVyZSwKLSAgICAgICAgICAgICAgICAg
ICAgIE5VTEwpOwotCi0gICAgdXJpX3N0cmluZyA9IGdldF91cmlfZm9yX3BhdGgoIi90ZXN0X2xv
YWRpbmdfc3RhdHVzIik7Ci0KLSAgICAvKiBsb2FkX3VyaSB3aWxsIHRyaWdnZXIgdGhlIG5hdmln
YXRpb24tcG9saWN5LWRlY2lzaW9uLXJlcXVlc3RlZAotICAgICAqIHNpZ25hbCBlbWlzc2lvbjsK
LSAgICAgKi8KLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkoZml4dHVyZS0+d2ViVmlldywg
dXJpX3N0cmluZyk7Ci0gICAgZ19mcmVlKHVyaV9zdHJpbmcpOwotCi0gICAgZ19tYWluX2xvb3Bf
cnVuKGZpeHR1cmUtPmxvb3ApOwotfQotCi1zdGF0aWMgdm9pZCBsb2FkX2Vycm9yX3N0YXR1c19j
aGFuZ2VkX2NiKEdPYmplY3QqIG9iamVjdCwgR1BhcmFtU3BlYyogcHNwZWMsIFdlYkxvYWRpbmdG
aXh0dXJlKiBmaXh0dXJlKQotewotICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0
X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyhXRUJLSVRfV0VCX1ZJRVcob2JqZWN0KSk7Ci0KLSAg
ICBzd2l0Y2goc3RhdHVzKSB7Ci0gICAgY2FzZSBXRUJLSVRfTE9BRF9QUk9WSVNJT05BTDoKLSAg
ICAgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsKTsKLSAgICAgICAg
Zml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwgPSBUUlVFOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFdFQktJVF9MT0FEX0NPTU1JVFRFRDoKLSAgICAgICAgZ19hc3NlcnQoIWZpeHR1cmUt
Pmhhc19iZWVuX2NvbW1pdHRlZCk7Ci0gICAgICAgIGZpeHR1cmUtPmhhc19iZWVuX2NvbW1pdHRl
ZCA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV0VCS0lUX0xPQURfRklOSVNIRUQ6
Ci0gICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsKTsKLSAgICAg
ICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fbG9hZF9lcnJvcik7Ci0gICAgICAgIGdfYXNz
ZXJ0KGZpeHR1cmUtPmhhc19iZWVuX2ZhaWxlZCk7Ci0gICAgICAgIGdfYXNzZXJ0KCFmaXh0dXJl
LT5oYXNfYmVlbl9maW5pc2hlZCk7Ci0gICAgICAgIGZpeHR1cmUtPmhhc19iZWVuX2ZpbmlzaGVk
ID0gVFJVRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXRUJLSVRfTE9BRF9GQUlMRUQ6Ci0g
ICAgICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNfYmVlbl9mYWlsZWQpOwotICAgICAgICBmaXh0
dXJlLT5oYXNfYmVlbl9mYWlsZWQgPSBUUlVFOwotICAgICAgICBnX21haW5fbG9vcF9xdWl0KGZp
eHR1cmUtPmxvb3ApOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVh
azsKLSAgICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBsb2FkX2Vycm9yX2NiKFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcsIFdlYktpdFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgY2hhciogdXJpLCBHRXJy
b3IgKmVycm9yLCBXZWJMb2FkaW5nRml4dHVyZSogZml4dHVyZSkKLXsKLSAgICBnX2Fzc2VydChm
aXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCk7Ci0gICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhh
c19iZWVuX2xvYWRfZXJyb3IpOwotICAgIGZpeHR1cmUtPmhhc19iZWVuX2xvYWRfZXJyb3IgPSBU
UlVFOwotCi0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X2xvYWRpbmdf
ZXJyb3IoV2ViTG9hZGluZ0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsK
LSAgICBjaGFyKiB1cmlfc3RyaW5nOwotCi0gICAgZ190ZXN0X2J1ZygiMjg4NDIiKTsKLQotICAg
IGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2ViVmlldywgImxvYWQtZXJyb3IiLCBHX0NBTExC
QUNLKGxvYWRfZXJyb3JfY2IpLCBmaXh0dXJlKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1
cmUtPndlYlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhsb2FkX2Vycm9y
X3N0YXR1c19jaGFuZ2VkX2NiKSwgZml4dHVyZSk7Ci0KLSAgICB1cmlfc3RyaW5nID0gZ2V0X3Vy
aV9mb3JfcGF0aCgiL3Rlc3RfbG9hZF9lcnJvciIpOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2Fk
X3VyaShmaXh0dXJlLT53ZWJWaWV3LCB1cmlfc3RyaW5nKTsKLSAgICBnX2ZyZWUodXJpX3N0cmlu
Zyk7Ci0KLSAgICBnX21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7Ci0KLSAgICBnX2Fzc2Vy
dChmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCk7Ci0gICAgZ19hc3NlcnQoIWZpeHR1cmUt
Pmhhc19iZWVuX2NvbW1pdHRlZCk7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fbG9h
ZF9lcnJvcik7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fZmFpbGVkKTsKLSAgICBn
X2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fZmluaXNoZWQpOwotfQotCi0vKiBDYW5jZWxsZWQg
bG9hZCAqLwotCi1zdGF0aWMgZ2Jvb2xlYW4gbG9hZF9jYW5jZWxsZWRfY2IoV2ViS2l0V2ViVmll
dyogd2ViVmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLCBjb25zdCBjaGFyKiB1cmksIEdFcnJv
ciAqZXJyb3IsIFdlYkxvYWRpbmdGaXh0dXJlKiBmaXh0dXJlKQotewotICAgIGdfYXNzZXJ0KGZp
eHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsKTsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNf
YmVlbl9mYWlsZWQpOwotICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNfYmVlbl9sb2FkX2Vycm9y
KTsKLSAgICBnX2Fzc2VydChlcnJvci0+Y29kZSA9PSBXRUJLSVRfTkVUV09SS19FUlJPUl9DQU5D
RUxMRUQpOwotICAgIGZpeHR1cmUtPmhhc19iZWVuX2xvYWRfZXJyb3IgPSBUUlVFOwotCi0gICAg
cmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBzdG9wX2xvYWQgKGdwb2ludGVyIGRh
dGEpCi17Ci0gICAgd2Via2l0X3dlYl92aWV3X3N0b3BfbG9hZGluZyhXRUJLSVRfV0VCX1ZJRVco
ZGF0YSkpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQgbG9hZF9jYW5jZWxs
ZWRfc3RhdHVzX2NoYW5nZWRfY2IoR09iamVjdCogb2JqZWN0LCBHUGFyYW1TcGVjKiBwc3BlYywg
V2ViTG9hZGluZ0ZpeHR1cmUqIGZpeHR1cmUpCi17Ci0gICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0
dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKFdFQktJVF9XRUJfVklFVyhvYmpl
Y3QpKTsKLQotICAgIHN3aXRjaChzdGF0dXMpIHsKLSAgICBjYXNlIFdFQktJVF9MT0FEX1BST1ZJ
U0lPTkFMOgotICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwp
OwotICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fZmFpbGVkKTsKLSAgICAgICAg
Zml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwgPSBUUlVFOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFdFQktJVF9MT0FEX0NPTU1JVFRFRDoKLSAgICAgICAgZ19pZGxlX2FkZCAoc3RvcF9s
b2FkLCBvYmplY3QpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdFQktJVF9MT0FEX0ZBSUxF
RDoKLSAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwpOwotICAg
ICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fZmFpbGVkKTsKLSAgICAgICAgZ19hc3Nl
cnQoIWZpeHR1cmUtPmhhc19iZWVuX2xvYWRfZXJyb3IpOwotICAgICAgICBmaXh0dXJlLT5oYXNf
YmVlbl9mYWlsZWQgPSBUUlVFOwotICAgICAgICBnX21haW5fbG9vcF9xdWl0KGZpeHR1cmUtPmxv
b3ApOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdFQktJVF9MT0FEX0ZJTklTSEVEOgotICAg
ICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0
OgotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RfbG9hZGluZ19j
YW5jZWxsZWQoV2ViTG9hZGluZ0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkK
LXsKLSAgICBjaGFyKiB1cmlfc3RyaW5nOwotCi0gICAgZ190ZXN0X2J1ZygiMjk2NDQiKTsKLQot
ICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2ViVmlldywgImxvYWQtZXJyb3IiLCBHX0NB
TExCQUNLKGxvYWRfY2FuY2VsbGVkX2NiKSwgZml4dHVyZSk7Ci0gICAgZ19zaWduYWxfY29ubmVj
dChmaXh0dXJlLT53ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0sobG9h
ZF9jYW5jZWxsZWRfc3RhdHVzX2NoYW5nZWRfY2IpLCBmaXh0dXJlKTsKLQotICAgIHVyaV9zdHJp
bmcgPSBnZXRfdXJpX2Zvcl9wYXRoKCIvdGVzdF9sb2FkaW5nX2NhbmNlbGxlZCIpOwotICAgIHdl
YmtpdF93ZWJfdmlld19sb2FkX3VyaShmaXh0dXJlLT53ZWJWaWV3LCB1cmlfc3RyaW5nKTsKLSAg
ICBnX2ZyZWUodXJpX3N0cmluZyk7Ci0KLSAgICBnX21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9v
cCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGxvYWRfZ29iYWNrX3N0YXR1c19jaGFuZ2VkX2NiKEdPYmpl
Y3QqIG9iamVjdCwgR1BhcmFtU3BlYyogcHNwZWMsIFdlYkxvYWRpbmdGaXh0dXJlKiBmaXh0dXJl
KQotewotICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9s
b2FkX3N0YXR1cyhXRUJLSVRfV0VCX1ZJRVcob2JqZWN0KSk7Ci0KLSAgICBzd2l0Y2goc3RhdHVz
KSB7Ci0gICAgY2FzZSBXRUJLSVRfTE9BRF9QUk9WSVNJT05BTDoKLSAgICAgICAgZ19hc3NlcnQo
IWZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsKTsKLSAgICAgICAgZml4dHVyZS0+aGFzX2Jl
ZW5fcHJvdmlzaW9uYWwgPSBUUlVFOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdFQktJVF9M
T0FEX0NPTU1JVFRFRDoKLSAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlz
aW9uYWwpOwotICAgICAgICBmaXh0dXJlLT5oYXNfYmVlbl9jb21taXR0ZWQgPSBUUlVFOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIFdFQktJVF9MT0FEX0ZBSUxFRDoKLSAgICAgICAgZ19hc3Nl
cnRfbm90X3JlYWNoZWQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXRUJLSVRfTE9BRF9G
SU5JU0hFRDoKLSAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwp
OwotICAgICAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9jb21taXR0ZWQpOwotICAgICAg
ICBmaXh0dXJlLT5oYXNfYmVlbl9maW5pc2hlZCA9IFRSVUU7Ci0gICAgICAgIGdfbWFpbl9sb29w
X3F1aXQoZml4dHVyZS0+bG9vcCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgbG9hZF93ZW50YmFja19zdGF0dXNf
Y2hhbmdlZF9jYihHT2JqZWN0KiBvYmplY3QsIEdQYXJhbVNwZWMqIHBzcGVjLCBXZWJMb2FkaW5n
Rml4dHVyZSogZml4dHVyZSkKLXsKLSAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtp
dF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMoV0VCS0lUX1dFQl9WSUVXKG9iamVjdCkpOwotICAg
IGNoYXIqIHVyaV9zdHJpbmc7Ci0gICAgY2hhciogdXJpX3N0cmluZzI7Ci0KLSAgICB1cmlfc3Ry
aW5nID0gZ2V0X3VyaV9mb3JfcGF0aCgiL3Rlc3RfbG9hZGluZ19zdGF0dXMiKTsKLSAgICB1cmlf
c3RyaW5nMiA9IGdldF91cmlfZm9yX3BhdGgoIi90ZXN0X2xvYWRpbmdfc3RhdHVzMiIpOwotCi0g
ICAgc3dpdGNoKHN0YXR1cykgewotICAgIGNhc2UgV0VCS0lUX0xPQURfUFJPVklTSU9OQUw6Ci0g
ICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaShmaXh0dXJlLT53
ZWJWaWV3KSwgPT0sIHVyaV9zdHJpbmcyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXRUJL
SVRfTE9BRF9DT01NSVRURUQ6Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X3VyaShmaXh0dXJlLT53ZWJWaWV3KSwgPT0sIHVyaV9zdHJpbmcpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFdFQktJVF9MT0FEX0ZBSUxFRDoKLSAgICAgICAgZ19hc3NlcnRfbm90
X3JlYWNoZWQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXRUJLSVRfTE9BRF9GSU5JU0hF
RDoKLSAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKGZpeHR1
cmUtPndlYlZpZXcpLCA9PSwgdXJpX3N0cmluZyk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQo
Zml4dHVyZS0+bG9vcCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLQotICAgIGdfZnJlZSh1cmlfc3RyaW5nKTsKLSAgICBnX2ZyZWUodXJpX3N0
cmluZzIpOwotfQotCi1zdGF0aWMgdm9pZCBsb2FkX2Vycm9yX3Rlc3QoV2ViS2l0V2ViVmlldyog
d2VidmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLCBjb25zdCBjaGFyKiB1cmksIEdFcnJvciog
ZXJyb3IpCi17Ci0gICAgZ19kZWJ1ZygiRXJyb3I6ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOwotfQot
Ci1zdGF0aWMgdm9pZCB0ZXN0X2xvYWRpbmdfZ29iYWNrKFdlYkxvYWRpbmdGaXh0dXJlKiBmaXh0
dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgY2hhciogdXJpX3N0cmluZzsKLQotICAg
IGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2ViVmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMi
LCBHX0NBTExCQUNLKGxvYWRfZ29iYWNrX3N0YXR1c19jaGFuZ2VkX2NiKSwgZml4dHVyZSk7Ci0K
LSAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJsb2FkLWVycm9yIiwgR19D
QUxMQkFDSyhsb2FkX2Vycm9yX3Rlc3QpLCBmaXh0dXJlKTsKLQotICAgIHVyaV9zdHJpbmcgPSBn
ZXRfdXJpX2Zvcl9wYXRoKCIvdGVzdF9sb2FkaW5nX3N0YXR1cyIpOwotICAgIHdlYmtpdF93ZWJf
dmlld19sb2FkX3VyaShmaXh0dXJlLT53ZWJWaWV3LCB1cmlfc3RyaW5nKTsKLSAgICBnX2ZyZWUo
dXJpX3N0cmluZyk7Ci0KLSAgICBnX21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7Ci0KLSAg
ICBmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCA9IEZBTFNFOwotICAgIGZpeHR1cmUtPmhh
c19iZWVuX2NvbW1pdHRlZCA9IEZBTFNFOwotICAgIGZpeHR1cmUtPmhhc19iZWVuX2ZpcnN0X3Zp
c3VhbGx5X25vbl9lbXB0eV9sYXlvdXQgPSBGQUxTRTsKLSAgICBmaXh0dXJlLT5oYXNfYmVlbl9m
aW5pc2hlZCA9IEZBTFNFOwotICAgIGZpeHR1cmUtPmhhc19iZWVuX2ZhaWxlZCA9IEZBTFNFOwot
ICAgIGZpeHR1cmUtPmhhc19iZWVuX2xvYWRfZXJyb3IgPSBGQUxTRTsKLQotICAgIHVyaV9zdHJp
bmcgPSBnZXRfdXJpX2Zvcl9wYXRoKCIvdGVzdF9sb2FkaW5nX3N0YXR1czIiKTsKLSAgICB3ZWJr
aXRfd2ViX3ZpZXdfbG9hZF91cmkoZml4dHVyZS0+d2ViVmlldywgdXJpX3N0cmluZyk7Ci0gICAg
Z19mcmVlKHVyaV9zdHJpbmcpOwotCi0gICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1cmUtPmxvb3Ap
OwotCi0gICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKGZpeHR1cmUtPndl
YlZpZXcsIGxvYWRfZ29iYWNrX3N0YXR1c19jaGFuZ2VkX2NiLCBmaXh0dXJlKTsKLQotICAgIGZp
eHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsID0gRkFMU0U7Ci0gICAgZml4dHVyZS0+aGFzX2Jl
ZW5fY29tbWl0dGVkID0gRkFMU0U7Ci0gICAgZml4dHVyZS0+aGFzX2JlZW5fZmlyc3RfdmlzdWFs
bHlfbm9uX2VtcHR5X2xheW91dCA9IEZBTFNFOwotICAgIGZpeHR1cmUtPmhhc19iZWVuX2Zpbmlz
aGVkID0gRkFMU0U7Ci0gICAgZml4dHVyZS0+aGFzX2JlZW5fZmFpbGVkID0gRkFMU0U7Ci0gICAg
Zml4dHVyZS0+aGFzX2JlZW5fbG9hZF9lcnJvciA9IEZBTFNFOwotCi0gICAgZ19zaWduYWxfY29u
bmVjdChmaXh0dXJlLT53ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0so
bG9hZF93ZW50YmFja19zdGF0dXNfY2hhbmdlZF9jYiksIGZpeHR1cmUpOwotICAgIHdlYmtpdF93
ZWJfdmlld19nb19iYWNrKGZpeHR1cmUtPndlYlZpZXcpOwotCi0gICAgZ19tYWluX2xvb3BfcnVu
KGZpeHR1cmUtPmxvb3ApOwotCi0gICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9m
dW5jKGZpeHR1cmUtPndlYlZpZXcsIGxvYWRfd2VudGJhY2tfc3RhdHVzX2NoYW5nZWRfY2IsIGZp
eHR1cmUpOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCi17Ci0gICAgU291
cFNlcnZlciogc2VydmVyOwotCi0gICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwp
OwotCi0gICAgc2VydmVyID0gc291cF9zZXJ2ZXJfbmV3KFNPVVBfU0VSVkVSX1BPUlQsIDAsIE5V
TEwpOwotICAgIHNvdXBfc2VydmVyX3J1bl9hc3luYyhzZXJ2ZXIpOwotCi0gICAgc291cF9zZXJ2
ZXJfYWRkX2hhbmRsZXIoc2VydmVyLCBOVUxMLCBzZXJ2ZXJfY2FsbGJhY2ssIE5VTEwsIE5VTEwp
OwotCi0gICAgYmFzZV91cmkgPSBzb3VwX3VyaV9uZXcoImh0dHA6Ly8xMjcuMC4wLjEvIik7Ci0g
ICAgc291cF91cmlfc2V0X3BvcnQoYmFzZV91cmksIHNvdXBfc2VydmVyX2dldF9wb3J0KHNlcnZl
cikpOwotCi0gICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsK
LSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2xvYWRpbmcvc3RhdHVzIiwKLSAgICAgICAgICAgICAg
IFdlYkxvYWRpbmdGaXh0dXJlLCBOVUxMLAotICAgICAgICAgICAgICAgd2ViX2xvYWRpbmdfZml4
dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3RfbG9hZGluZ19zdGF0dXMsCi0gICAgICAg
ICAgICAgICB3ZWJfbG9hZGluZ19maXh0dXJlX3RlYXJkb3duKTsKLSAgICBnX3Rlc3RfYWRkKCIv
d2Via2l0L2xvYWRpbmcvZXJyb3IiLAotICAgICAgICAgICAgICAgV2ViTG9hZGluZ0ZpeHR1cmUs
IE5VTEwsCi0gICAgICAgICAgICAgICB3ZWJfbG9hZGluZ19maXh0dXJlX3NldHVwLAotICAgICAg
ICAgICAgICAgdGVzdF9sb2FkaW5nX2Vycm9yLAotICAgICAgICAgICAgICAgd2ViX2xvYWRpbmdf
Zml4dHVyZV90ZWFyZG93bik7Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9sb2FkaW5nL2NhbmNl
bGxlZCIsCi0gICAgICAgICAgICAgICBXZWJMb2FkaW5nRml4dHVyZSwgTlVMTCwKLSAgICAgICAg
ICAgICAgIHdlYl9sb2FkaW5nX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X2xv
YWRpbmdfY2FuY2VsbGVkLAotICAgICAgICAgICAgICAgd2ViX2xvYWRpbmdfZml4dHVyZV90ZWFy
ZG93bik7Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9sb2FkaW5nL2dvYmFjayIsCi0gICAgICAg
ICAgICAgICBXZWJMb2FkaW5nRml4dHVyZSwgTlVMTCwKLSAgICAgICAgICAgICAgIHdlYl9sb2Fk
aW5nX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X2xvYWRpbmdfZ29iYWNrLAot
ICAgICAgICAgICAgICAgd2ViX2xvYWRpbmdfZml4dHVyZV90ZWFyZG93bik7Ci0gICAgcmV0dXJu
IGdfdGVzdF9ydW4oKTsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMv
dGVzdG1pbWVoYW5kbGluZy5jIGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdG1pbWVoYW5k
bGluZy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDhlMWM2Li4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RtaW1laGFuZGxpbmcuYworKysgL2Rldi9u
dWxsCkBAIC0xLDIwMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEphbiBNaWNo
YWVsIEFsb256bwotICogQ29weXJpZ2h0IChDKSAyMDA5IEd1c3Rhdm8gTm9yb25oYSBTaWx2YQot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAidGVzdF91dGlscy5oIgotCi0jaW5jbHVkZSA8
Z2xpYi5oPgotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0jaW5jbHVkZSA8bGlic291cC9zb3Vw
Lmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgotI2lu
Y2x1ZGUgPHVuaXN0ZC5oPgotCi1HTWFpbkxvb3AqIGxvb3A7Ci1Tb3VwU2Vzc2lvbiAqc2Vzc2lv
bjsKLWNoYXIqIGJhc2VfdXJpOwotCi0vKiBGb3IgcmVhbCByZXF1ZXN0IHRlc3RpbmcgKi8KLXN0
YXRpYyB2b2lkCi1zZXJ2ZXJfY2FsbGJhY2soU291cFNlcnZlciAqc2VydmVyLCBTb3VwTWVzc2Fn
ZSAqbXNnLAotICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoLCBHSGFzaFRhYmxlICpx
dWVyeSwKLSAgICAgICAgICAgICAgICAgU291cENsaWVudENvbnRleHQgKmNvbnRleHQsIGdwb2lu
dGVyIGRhdGEpCi17Ci0gICAgaWYgKG1zZy0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgewot
ICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX05PVF9JTVBM
RU1FTlRFRCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzb3VwX21lc3NhZ2Vfc2V0
X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX09LKTsKLQotICAgIC8qIFBERiAqLwotICAgIGlmIChn
X3N0cl9lcXVhbChwYXRoLCAiL3BkZiIpKSB7Ci0gICAgICAgIGNoYXIqIGNvbnRlbnRzOwotICAg
ICAgICBnc2l6ZSBsZW5ndGg7Ci0gICAgICAgIEdFcnJvciogZXJyb3IgPSBOVUxMOwotCi0gICAg
ICAgIGdfZmlsZV9nZXRfY29udGVudHMoInRlc3QucGRmIiwgJmNvbnRlbnRzLCAmbGVuZ3RoLCAm
ZXJyb3IpOwotICAgICAgICBnX2Fzc2VydCghZXJyb3IpOwotCi0gICAgICAgIHNvdXBfbWVzc2Fn
ZV9ib2R5X2FwcGVuZChtc2ctPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGNvbnRl
bnRzLCBsZW5ndGgpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9odG1sIikp
IHsKLSAgICAgICAgY2hhciogY29udGVudHM7Ci0gICAgICAgIGdzaXplIGxlbmd0aDsKLSAgICAg
ICAgR0Vycm9yKiBlcnJvciA9IE5VTEw7Ci0KLSAgICAgICAgZ19maWxlX2dldF9jb250ZW50cygi
dGVzdC5odG1sIiwgJmNvbnRlbnRzLCAmbGVuZ3RoLCAmZXJyb3IpOwotICAgICAgICBnX2Fzc2Vy
dCghZXJyb3IpOwotCi0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtc2ctPnJlc3Bv
bnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGNvbnRlbnRzLCBsZW5ndGgpOwotICAgIH0gZWxz
ZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi90ZXh0IikpIHsKLSAgICAgICAgY2hhciogY29udGVu
dHM7Ci0gICAgICAgIGdzaXplIGxlbmd0aDsKLSAgICAgICAgR0Vycm9yKiBlcnJvciA9IE5VTEw7
Ci0KLSAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1zZy0+cmVzcG9uc2VfaGVh
ZGVycywgIkNvbnRlbnQtRGlzcG9zaXRpb24iLCAiYXR0YWNobWVudDsgZmlsZW5hbWU9dGVzdC50
eHQiKTsKLQotICAgICAgICBnX2ZpbGVfZ2V0X2NvbnRlbnRzKCJ0ZXN0LnR4dCIsICZjb250ZW50
cywgJmxlbmd0aCwgJmVycm9yKTsKLSAgICAgICAgZ19hc3NlcnQoIWVycm9yKTsKLQotICAgICAg
ICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobXNnLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9S
WV9UQUtFLCBjb250ZW50cywgbGVuZ3RoKTsKLSAgICB9Ci0KLSAgICBzb3VwX21lc3NhZ2VfYm9k
eV9jb21wbGV0ZShtc2ctPnJlc3BvbnNlX2JvZHkpOwotfQotCi1zdGF0aWMgdm9pZCBpZGxlX3F1
aXRfbG9vcF9jYihXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgR1BhcmFtU3BlYyogcHNwZWMsIGdw
b2ludGVyIGRhdGEpCi17Ci0gICAgaWYgKHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMo
d2ViX3ZpZXcpID09IFdFQktJVF9MT0FEX0ZJTklTSEVEIHx8Ci0gICAgICAgIHdlYmtpdF93ZWJf
dmlld19nZXRfbG9hZF9zdGF0dXMod2ViX3ZpZXcpID09IFdFQktJVF9MT0FEX0ZBSUxFRCkKLSAg
ICAgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKLX0KLQotc3RhdGljIGdib29sZWFuIG1pbWVf
dHlwZV9wb2xpY3lfZGVjaXNpb25fcmVxdWVzdGVkX2NiKFdlYktpdFdlYlZpZXcqIHZpZXcsIFdl
YktpdFdlYkZyYW1lKiBmcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBXZWJLaXROZXR3b3JrUmVxdWVzdCogcmVxdWVzdCwgY29uc3Qg
Y2hhciogbWltZV90eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFdlYktpdFdlYlBvbGljeURlY2lzaW9uKiBkZWNpc2lvbiwgZ3BvaW50
ZXIgZGF0YSkKLXsKLSAgICBjaGFyKiB0eXBlID0gKGNoYXIqKWRhdGE7Ci0KLSAgICBpZiAoZ19z
dHJfZXF1YWwodHlwZSwgInBkZiIpKSB7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cihtaW1lX3R5
cGUsID09LCAiYXBwbGljYXRpb24vcGRmIik7Ci0gICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2Vi
X3ZpZXdfY2FuX3Nob3dfbWltZV90eXBlKHZpZXcsIG1pbWVfdHlwZSkpOwotICAgIH0gZWxzZSBp
ZiAoZ19zdHJfZXF1YWwodHlwZSwgImh0bWwiKSkgewotICAgICAgICBnX2Fzc2VydF9jbXBzdHIo
bWltZV90eXBlLCA9PSwgInRleHQvaHRtbCIpOwotICAgICAgICBnX2Fzc2VydCh3ZWJraXRfd2Vi
X3ZpZXdfY2FuX3Nob3dfbWltZV90eXBlKHZpZXcsIG1pbWVfdHlwZSkpOwotICAgIH0gZWxzZSBp
ZiAoZ19zdHJfZXF1YWwodHlwZSwgInRleHQiKSkgewotICAgICAgICBXZWJLaXROZXR3b3JrUmVz
cG9uc2UqIHJlc3BvbnNlID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfbmV0d29ya19yZXNwb25zZShm
cmFtZSk7Ci0gICAgICAgIFNvdXBNZXNzYWdlKiBtZXNzYWdlID0gd2Via2l0X25ldHdvcmtfcmVz
cG9uc2VfZ2V0X21lc3NhZ2UocmVzcG9uc2UpOwotICAgICAgICBjaGFyKiBkaXNwb3NpdGlvbjsK
LQotICAgICAgICBnX2Fzc2VydChtZXNzYWdlKTsKLSAgICAgICAgc291cF9tZXNzYWdlX2hlYWRl
cnNfZ2V0X2NvbnRlbnRfZGlzcG9zaXRpb24obWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRpc3Bv
c2l0aW9uLCBOVUxMKTsKLSAgICAgICAgZ19vYmplY3RfdW5yZWYocmVzcG9uc2UpOwotCi0gICAg
ICAgIGdfYXNzZXJ0X2NtcHN0cihkaXNwb3NpdGlvbiwgPT0sICJhdHRhY2htZW50Iik7Ci0gICAg
ICAgIGdfZnJlZShkaXNwb3NpdGlvbik7Ci0KLSAgICAgICAgZ19hc3NlcnRfY21wc3RyKG1pbWVf
dHlwZSwgPT0sICJ0ZXh0L3BsYWluIik7Ci0gICAgICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmll
d19jYW5fc2hvd19taW1lX3R5cGUodmlldywgbWltZV90eXBlKSk7Ci0gICAgfQotCi0gICAgZ19m
cmVlKHR5cGUpOwotCi0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0UmVt
b3RlTWltZVR5cGUoY29uc3Qgdm9pZCogZGF0YSkKLXsKLSAgICBjb25zdCBjaGFyKiBuYW1lID0g
KGNvbnN0IGNoYXIqKSBkYXRhOwotICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSBXRUJLSVRfV0VC
X1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBnX29iamVjdF9yZWZfc2luayhHX09C
SkVDVCh2aWV3KSk7Ci0KLSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwot
Ci0gICAgZ19vYmplY3RfY29ubmVjdChHX09CSkVDVCh2aWV3KSwKLSAgICAgICAgICAgICAgICAg
ICAgICJzaWduYWw6Om5vdGlmeTo6bG9hZC1zdGF0dXMiLCBpZGxlX3F1aXRfbG9vcF9jYiwgTlVM
TCwKLSAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6Om1pbWUtdHlwZS1wb2xpY3ktZGVjaXNp
b24tcmVxdWVzdGVkIiwgbWltZV90eXBlX3BvbGljeV9kZWNpc2lvbl9yZXF1ZXN0ZWRfY2IsIGdf
c3RyZHVwKG5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0KLSAgICBjaGFyKiBl
ZmZlY3RpdmVfdXJpID0gZ19zdHJkdXBfcHJpbnRmKCIlcyVzIiwgYmFzZV91cmksIG5hbWUpOwot
ICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh2aWV3LCBlZmZlY3RpdmVfdXJpKTsKLSAgICBn
X2ZyZWUoZWZmZWN0aXZlX3VyaSk7Ci0KLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAg
ICBnX29iamVjdF91bnJlZih2aWV3KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdExvY2FsTWltZVR5
cGUoY29uc3Qgdm9pZCogZGF0YSkKLXsKLSAgICAgY29uc3QgY2hhciogdHlwZU5hbWUgPSAoY29u
c3QgY2hhciopIGRhdGE7Ci0gICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSBXRUJLSVRfV0VCX1ZJ
RVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICAgZ19vYmplY3RfcmVmX3NpbmsoR19PQkpF
Q1QodmlldykpOwotCi0gICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7Ci0K
LSAgICAgZ19vYmplY3RfY29ubmVjdChHX09CSkVDVCh2aWV3KSwKLSAgICAgICAgICAgICAgICAg
ICAgICAic2lnbmFsOjpub3RpZnk6OmxvYWQtc3RhdHVzIiwgaWRsZV9xdWl0X2xvb3BfY2IsIE5V
TEwsCi0gICAgICAgICAgICAgICAgICAgICAgInNpZ25hbDo6bWltZS10eXBlLXBvbGljeS1kZWNp
c2lvbi1yZXF1ZXN0ZWQiLCBtaW1lX3R5cGVfcG9saWN5X2RlY2lzaW9uX3JlcXVlc3RlZF9jYiwg
Z19zdHJkdXAodHlwZU5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotCi0gICAg
IGdjaGFyKiBmaWxlbmFtZSA9IGdfc3RyZHVwX3ByaW50ZigidGVzdC4lcyIsIHR5cGVOYW1lKTsK
LSAgICAgR0ZpbGUqIGZpbGUgPSBnX2ZpbGVfbmV3X2Zvcl9wYXRoKGZpbGVuYW1lKTsKLSAgICAg
Z19mcmVlKGZpbGVuYW1lKTsKLQotICAgICBnY2hhciogZmlsZVVSSSA9IGdfZmlsZV9nZXRfdXJp
KGZpbGUpOwotICAgICBnX29iamVjdF91bnJlZihmaWxlKTsKLQotICAgICB3ZWJraXRfd2ViX3Zp
ZXdfbG9hZF91cmkodmlldywgZmlsZVVSSSk7Ci0gICAgIGdfZnJlZShmaWxlVVJJKTsKLSAKLSAg
ICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotICAgICBnX29iamVjdF91bnJlZih2aWV3KTsKLX0K
LQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotewotICAgIFNvdXBTZXJ2ZXIqIHNl
cnZlcjsKLSAgICBTb3VwVVJJKiBzb3VwX3VyaTsKLQotICAgIGd0a190ZXN0X2luaXQoJmFyZ2Ms
ICZhcmd2LCBOVUxMKTsKLQotICAgIC8qIEhvcGVmdWxseSBtYWtlIHRlc3QgaW5kZXBlbmRlbnQg
b2YgdGhlIHBhdGggaXQncyBjYWxsZWQgZnJvbS4gKi8KLSAgICB0ZXN0dXRpbHNfcmVsYXRpdmVf
Y2hkaXIoIlNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Jlc291cmNlcy90ZXN0Lmh0bWwiLCBhcmd2
WzBdKTsKLQotICAgIHNlcnZlciA9IHNvdXBfc2VydmVyX25ldyhTT1VQX1NFUlZFUl9QT1JULCAw
LCBOVUxMKTsKLSAgICBzb3VwX3NlcnZlcl9ydW5fYXN5bmMoc2VydmVyKTsKLQotICAgIHNvdXBf
c2VydmVyX2FkZF9oYW5kbGVyKHNlcnZlciwgTlVMTCwgc2VydmVyX2NhbGxiYWNrLCBOVUxMLCBO
VUxMKTsKLQotICAgIHNvdXBfdXJpID0gc291cF91cmlfbmV3KCJodHRwOi8vMTI3LjAuMC4xLyIp
OwotICAgIHNvdXBfdXJpX3NldF9wb3J0KHNvdXBfdXJpLCBzb3VwX3NlcnZlcl9nZXRfcG9ydChz
ZXJ2ZXIpKTsKLQotICAgIGJhc2VfdXJpID0gc291cF91cmlfdG9fc3RyaW5nKHNvdXBfdXJpLCBG
QUxTRSk7Ci0gICAgc291cF91cmlfZnJlZShzb3VwX3VyaSk7Ci0KLSAgICBnX3Rlc3RfYnVnX2Jh
c2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwotICAgIGdfdGVzdF9hZGRfZGF0YV9mdW5j
KCIvd2Via2l0L21pbWUvcmVtb3RlLVBERiIsICJwZGYiLCB0ZXN0UmVtb3RlTWltZVR5cGUpOwot
ICAgIGdfdGVzdF9hZGRfZGF0YV9mdW5jKCIvd2Via2l0L21pbWUvcmVtb3RlLUhUTUwiLCAiaHRt
bCIsIHRlc3RSZW1vdGVNaW1lVHlwZSk7Ci0gICAgZ190ZXN0X2FkZF9kYXRhX2Z1bmMoIi93ZWJr
aXQvbWltZS9yZW1vdGUtVEVYVCIsICJ0ZXh0IiwgdGVzdFJlbW90ZU1pbWVUeXBlKTsKLSAgICBn
X3Rlc3RfYWRkX2RhdGFfZnVuYygiL3dlYmtpdC9taW1lL2xvY2FsLVBERiIsICJwZGYiLCB0ZXN0
TG9jYWxNaW1lVHlwZSk7Ci0gICAgZ190ZXN0X2FkZF9kYXRhX2Z1bmMoIi93ZWJraXQvbWltZS9s
b2NhbC1IVE1MIiwgImh0bWwiLCB0ZXN0TG9jYWxNaW1lVHlwZSk7Ci0gICAgZ190ZXN0X2FkZF9k
YXRhX2Z1bmMoIi93ZWJraXQvbWltZS9sb2NhbC1URVhUIiwgInRleHQiLCB0ZXN0TG9jYWxNaW1l
VHlwZSk7Ci0KLSAgICByZXR1cm4gZ190ZXN0X3J1bigpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9ndGsvdGVzdHMvdGVzdG5ldHdvcmtyZXF1ZXN0LmMgYi9Tb3VyY2UvV2ViS2l0L2d0
ay90ZXN0cy90ZXN0bmV0d29ya3JlcXVlc3QuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMWIyYzkwZi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0bmV0
d29ya3JlcXVlc3QuYworKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDkgR3VzdGF2byBOb3JvbmhhIFNpbHZhCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPGdsaWIu
aD4KLSNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNs
dWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+Ci0KLXN0YXRpYyB2b2lk
IHRlc3RfbmV0d29ya19yZXF1ZXN0X2NyZWF0ZV9kZXN0cm95KCkKLXsKLSAgICBXZWJLaXROZXR3
b3JrUmVxdWVzdCogcmVxdWVzdDsKLSAgICBTb3VwTWVzc2FnZSogbWVzc2FnZTsKLQotICAgIC8q
IFRlc3QgY3JlYXRpb24gd2l0aCBVUkkgKi8KLSAgICByZXF1ZXN0ID0gV0VCS0lUX05FVFdPUktf
UkVRVUVTVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfTkVUV09SS19SRVFVRVNULCAidXJpIiwg
Imh0dHA6Ly9kZWJpYW4ub3JnLyIsIE5VTEwpKTsKLSAgICBnX2Fzc2VydChXRUJLSVRfSVNfTkVU
V09SS19SRVFVRVNUKHJlcXVlc3QpKTsKLSAgICBtZXNzYWdlID0gd2Via2l0X25ldHdvcmtfcmVx
dWVzdF9nZXRfbWVzc2FnZShyZXF1ZXN0KTsKLSAgICBnX2Fzc2VydCghbWVzc2FnZSk7Ci0gICAg
Z19vYmplY3RfdW5yZWYocmVxdWVzdCk7Ci0KLSAgICAvKiBUZXN0IGNyZWF0aW9uIHdpdGggU291
cE1lc3NhZ2UgKi8KLSAgICBtZXNzYWdlID0gc291cF9tZXNzYWdlX25ldygiR0VUIiwgImh0dHA6
Ly9kZWJpYW4ub3JnLyIpOwotICAgIHJlcXVlc3QgPSBXRUJLSVRfTkVUV09SS19SRVFVRVNUKGdf
b2JqZWN0X25ldyhXRUJLSVRfVFlQRV9ORVRXT1JLX1JFUVVFU1QsICJtZXNzYWdlIiwgbWVzc2Fn
ZSwgTlVMTCkpOwotICAgIGdfYXNzZXJ0KFdFQktJVF9JU19ORVRXT1JLX1JFUVVFU1QocmVxdWVz
dCkpOwotICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChtZXNzYWdlKS0+cmVmX2NvdW50LCA9
PSwgMik7Ci0gICAgZ19vYmplY3RfdW5yZWYocmVxdWVzdCk7Ci0gICAgZ19hc3NlcnRfY21waW50
KEdfT0JKRUNUKG1lc3NhZ2UpLT5yZWZfY291bnQsID09LCAxKTsKLSAgICBnX29iamVjdF91bnJl
ZihtZXNzYWdlKTsKLQotICAgIC8qIFRlc3QgY3JlYXRpb24gd2l0aCBib3RoIFNvdXBNZXNzYWdl
IGFuZCBVUkkgKi8KLSAgICBtZXNzYWdlID0gc291cF9tZXNzYWdlX25ldygiR0VUIiwgImh0dHA6
Ly9kZWJpYW4ub3JnLyIpOwotICAgIHJlcXVlc3QgPSBXRUJLSVRfTkVUV09SS19SRVFVRVNUKGdf
b2JqZWN0X25ldyhXRUJLSVRfVFlQRV9ORVRXT1JLX1JFUVVFU1QsICJtZXNzYWdlIiwgbWVzc2Fn
ZSwgInVyaSIsICJodHRwOi8vZ25vbWUub3JnLyIsIE5VTEwpKTsKLSAgICBnX2Fzc2VydChXRUJL
SVRfSVNfTkVUV09SS19SRVFVRVNUKHJlcXVlc3QpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoR19P
QkpFQ1QobWVzc2FnZSktPnJlZl9jb3VudCwgPT0sIDIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3
ZWJraXRfbmV0d29ya19yZXF1ZXN0X2dldF91cmkocmVxdWVzdCksID09LCAiaHR0cDovL2dub21l
Lm9yZy8iKTsKLSAgICBnX29iamVjdF91bnJlZihyZXF1ZXN0KTsKLSAgICBnX2Fzc2VydF9jbXBp
bnQoR19PQkpFQ1QobWVzc2FnZSktPnJlZl9jb3VudCwgPT0sIDEpOwotICAgIGdfb2JqZWN0X3Vu
cmVmKG1lc3NhZ2UpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X25ldHdvcmtfcmVxdWVzdF9wcm9w
ZXJ0aWVzKCkKLXsKLSAgICBXZWJLaXROZXR3b3JrUmVxdWVzdCogcmVxdWVzdDsKLSAgICBTb3Vw
TWVzc2FnZSogbWVzc2FnZTsKLSAgICBnY2hhciogc291cFVSSTsKLQotICAgIC8qIFRlc3QgVVJJ
IGlzIHNldCBjb3JyZWN0bHkgd2hlbiBjcmVhdGluZyB3aXRoIFVSSSAqLwotICAgIHJlcXVlc3Qg
PSB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X25ldygiaHR0cDovL2RlYmlhbi5vcmcvIik7Ci0gICAg
Z19hc3NlcnQoV0VCS0lUX0lTX05FVFdPUktfUkVRVUVTVChyZXF1ZXN0KSk7Ci0gICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KSwgPT0sICJo
dHRwOi8vZGViaWFuLm9yZy8iKTsKLSAgICBnX29iamVjdF91bnJlZihyZXF1ZXN0KTsKLQotICAg
IC8qIFRlc3QgVVJJIGlzIHNldCBjb3JyZWN0bHkgd2hlbiBjcmVhdGluZyB3aXRoIE1lc3NhZ2Ug
Ki8KLSAgICBtZXNzYWdlID0gc291cF9tZXNzYWdlX25ldygiR0VUIiwgImh0dHA6Ly9kZWJpYW4u
b3JnLyIpOwotICAgIHJlcXVlc3QgPSBXRUJLSVRfTkVUV09SS19SRVFVRVNUKGdfb2JqZWN0X25l
dyhXRUJLSVRfVFlQRV9ORVRXT1JLX1JFUVVFU1QsICJtZXNzYWdlIiwgbWVzc2FnZSwgTlVMTCkp
OwotICAgIGdfYXNzZXJ0KFdFQktJVF9JU19ORVRXT1JLX1JFUVVFU1QocmVxdWVzdCkpOwotICAg
IGdfb2JqZWN0X3VucmVmKG1lc3NhZ2UpOwotCi0gICAgbWVzc2FnZSA9IHdlYmtpdF9uZXR3b3Jr
X3JlcXVlc3RfZ2V0X21lc3NhZ2UocmVxdWVzdCk7Ci0gICAgc291cFVSSSA9IHNvdXBfdXJpX3Rv
X3N0cmluZyhzb3VwX21lc3NhZ2VfZ2V0X3VyaShtZXNzYWdlKSwgRkFMU0UpOwotICAgIGdfYXNz
ZXJ0X2NtcHN0cihzb3VwVVJJLCA9PSwgImh0dHA6Ly9kZWJpYW4ub3JnLyIpOwotICAgIGdfZnJl
ZShzb3VwVVJJKTsKLQotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfbmV0d29ya19yZXF1ZXN0
X2dldF91cmkocmVxdWVzdCksID09LCAiaHR0cDovL2RlYmlhbi5vcmcvIik7Ci0gICAgZ19vYmpl
Y3RfdW5yZWYocmVxdWVzdCk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikK
LXsKLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAgICBnX3Rlc3Rf
YnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwotICAgIGdfdGVzdF9hZGRfZnVu
YygiL3dlYmtpdC9uZXR3b3JrcmVxdWVzdC9jcmVhdGVkZXN0cm95IiwgdGVzdF9uZXR3b3JrX3Jl
cXVlc3RfY3JlYXRlX2Rlc3Ryb3kpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9uZXR3
b3JrcmVxdWVzdC9wcm9wZXJ0aWVzIiwgdGVzdF9uZXR3b3JrX3JlcXVlc3RfcHJvcGVydGllcyk7
Ci0gICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2d0ay90ZXN0cy90ZXN0bmV0d29ya3Jlc3BvbnNlLmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0
cy90ZXN0bmV0d29ya3Jlc3BvbnNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4
MDZhYTEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdG5ldHdvcmty
ZXNwb25zZS5jCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOSBHdXN0YXZvIE5vcm9uaGEgU2lsdmEKLSAqIENvcHlyaWdodCAoQykgMjAwOSBD
b2xsYWJvcmEgTHRkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNp
bmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z2xpYi9nc3Rk
aW8uaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVk
ZSA8d2Via2l0L3dlYmtpdC5oPgotCi1zdGF0aWMgdm9pZCB0ZXN0X25ldHdvcmtfcmVzcG9uc2Vf
Y3JlYXRlX2Rlc3Ryb3koKQotewotICAgIFdlYktpdE5ldHdvcmtSZXNwb25zZSogcmVzcG9uc2U7
Ci0gICAgU291cE1lc3NhZ2UqIG1lc3NhZ2U7Ci0KLSAgICAvKiBUZXN0IGNyZWF0aW9uIHdpdGgg
VVJJICovCi0gICAgcmVzcG9uc2UgPSBXRUJLSVRfTkVUV09SS19SRVNQT05TRShnX29iamVjdF9u
ZXcoV0VCS0lUX1RZUEVfTkVUV09SS19SRVNQT05TRSwgInVyaSIsICJodHRwOi8vZGViaWFuLm9y
Zy8iLCBOVUxMKSk7Ci0gICAgZ19hc3NlcnQoV0VCS0lUX0lTX05FVFdPUktfUkVTUE9OU0UocmVz
cG9uc2UpKTsKLSAgICBtZXNzYWdlID0gd2Via2l0X25ldHdvcmtfcmVzcG9uc2VfZ2V0X21lc3Nh
Z2UocmVzcG9uc2UpOwotICAgIGdfYXNzZXJ0KCFtZXNzYWdlKTsKLSAgICBnX29iamVjdF91bnJl
ZihyZXNwb25zZSk7Ci0KLSAgICAvKiBUZXN0IGNyZWF0aW9uIHdpdGggU291cE1lc3NhZ2UgKi8K
LSAgICBtZXNzYWdlID0gc291cF9tZXNzYWdlX25ldygiR0VUIiwgImh0dHA6Ly9kZWJpYW4ub3Jn
LyIpOwotICAgIHJlc3BvbnNlID0gV0VCS0lUX05FVFdPUktfUkVTUE9OU0UoZ19vYmplY3RfbmV3
KFdFQktJVF9UWVBFX05FVFdPUktfUkVTUE9OU0UsICJtZXNzYWdlIiwgbWVzc2FnZSwgTlVMTCkp
OwotICAgIGdfYXNzZXJ0KFdFQktJVF9JU19ORVRXT1JLX1JFU1BPTlNFKHJlc3BvbnNlKSk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKG1lc3NhZ2UpLT5yZWZfY291bnQsID09LCAyKTsK
LSAgICBnX29iamVjdF91bnJlZihyZXNwb25zZSk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdfT0JK
RUNUKG1lc3NhZ2UpLT5yZWZfY291bnQsID09LCAxKTsKLSAgICBnX29iamVjdF91bnJlZihtZXNz
YWdlKTsKLQotICAgIC8qIFRlc3QgY3JlYXRpb24gd2l0aCBib3RoIFNvdXBNZXNzYWdlIGFuZCBV
UkkgKi8KLSAgICBtZXNzYWdlID0gc291cF9tZXNzYWdlX25ldygiR0VUIiwgImh0dHA6Ly9kZWJp
YW4ub3JnLyIpOwotICAgIHJlc3BvbnNlID0gV0VCS0lUX05FVFdPUktfUkVTUE9OU0UoZ19vYmpl
Y3RfbmV3KFdFQktJVF9UWVBFX05FVFdPUktfUkVTUE9OU0UsICJtZXNzYWdlIiwgbWVzc2FnZSwg
InVyaSIsICJodHRwOi8vZ25vbWUub3JnLyIsIE5VTEwpKTsKLSAgICBnX2Fzc2VydChXRUJLSVRf
SVNfTkVUV09SS19SRVNQT05TRShyZXNwb25zZSkpOwotICAgIGdfYXNzZXJ0X2NtcGludChHX09C
SkVDVChtZXNzYWdlKS0+cmVmX2NvdW50LCA9PSwgMik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdl
YmtpdF9uZXR3b3JrX3Jlc3BvbnNlX2dldF91cmkocmVzcG9uc2UpLCA9PSwgImh0dHA6Ly9nbm9t
ZS5vcmcvIik7Ci0gICAgZ19vYmplY3RfdW5yZWYocmVzcG9uc2UpOwotICAgIGdfYXNzZXJ0X2Nt
cGludChHX09CSkVDVChtZXNzYWdlKS0+cmVmX2NvdW50LCA9PSwgMSk7Ci0gICAgZ19vYmplY3Rf
dW5yZWYobWVzc2FnZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RfbmV0d29ya19yZXNwb25zZV9w
cm9wZXJ0aWVzKCkKLXsKLSAgICBXZWJLaXROZXR3b3JrUmVzcG9uc2UqIHJlc3BvbnNlOwotICAg
IFNvdXBNZXNzYWdlKiBtZXNzYWdlOwotICAgIGdjaGFyKiBzb3VwVVJJOwotCi0gICAgLyogVGVz
dCBVUkkgaXMgc2V0IGNvcnJlY3RseSB3aGVuIGNyZWF0aW5nIHdpdGggVVJJICovCi0gICAgcmVz
cG9uc2UgPSB3ZWJraXRfbmV0d29ya19yZXNwb25zZV9uZXcoImh0dHA6Ly9kZWJpYW4ub3JnLyIp
OwotICAgIGdfYXNzZXJ0KFdFQktJVF9JU19ORVRXT1JLX1JFU1BPTlNFKHJlc3BvbnNlKSk7Ci0g
ICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9uZXR3b3JrX3Jlc3BvbnNlX2dldF91cmkocmVzcG9u
c2UpLCA9PSwgImh0dHA6Ly9kZWJpYW4ub3JnLyIpOwotICAgIGdfb2JqZWN0X3VucmVmKHJlc3Bv
bnNlKTsKLQotICAgIC8qIFRlc3QgVVJJIGlzIHNldCBjb3JyZWN0bHkgd2hlbiBjcmVhdGluZyB3
aXRoIE1lc3NhZ2UgKi8KLSAgICBtZXNzYWdlID0gc291cF9tZXNzYWdlX25ldygiR0VUIiwgImh0
dHA6Ly9kZWJpYW4ub3JnLyIpOwotICAgIHJlc3BvbnNlID0gV0VCS0lUX05FVFdPUktfUkVTUE9O
U0UoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX05FVFdPUktfUkVTUE9OU0UsICJtZXNzYWdlIiwg
bWVzc2FnZSwgTlVMTCkpOwotICAgIGdfYXNzZXJ0KFdFQktJVF9JU19ORVRXT1JLX1JFU1BPTlNF
KHJlc3BvbnNlKSk7Ci0gICAgZ19vYmplY3RfdW5yZWYobWVzc2FnZSk7Ci0KLSAgICBtZXNzYWdl
ID0gd2Via2l0X25ldHdvcmtfcmVzcG9uc2VfZ2V0X21lc3NhZ2UocmVzcG9uc2UpOwotICAgIHNv
dXBVUkkgPSBzb3VwX3VyaV90b19zdHJpbmcoc291cF9tZXNzYWdlX2dldF91cmkobWVzc2FnZSks
IEZBTFNFKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc291cFVSSSwgPT0sICJodHRwOi8vZGViaWFu
Lm9yZy8iKTsKLSAgICBnX2ZyZWUoc291cFVSSSk7Ci0KLSAgICBnX2Fzc2VydF9jbXBzdHIod2Vi
a2l0X25ldHdvcmtfcmVzcG9uc2VfZ2V0X3VyaShyZXNwb25zZSksID09LCAiaHR0cDovL2RlYmlh
bi5vcmcvIik7Ci0gICAgZ19vYmplY3RfdW5yZWYocmVzcG9uc2UpOwotfQotCi1pbnQgbWFpbihp
bnQgYXJnYywgY2hhcioqIGFyZ3YpCi17Ci0gICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3Ys
IE5VTEwpOwotCi0gICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8i
KTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvbmV0d29ya3Jlc3BvbnNlL2NyZWF0ZWRl
c3Ryb3kiLCB0ZXN0X25ldHdvcmtfcmVzcG9uc2VfY3JlYXRlX2Rlc3Ryb3kpOwotICAgIGdfdGVz
dF9hZGRfZnVuYygiL3dlYmtpdC9uZXR3b3JrcmVzcG9uc2UvcHJvcGVydGllcyIsIHRlc3RfbmV0
d29ya19yZXNwb25zZV9wcm9wZXJ0aWVzKTsKLSAgICByZXR1cm4gZ190ZXN0X3J1biAoKTsKLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJiYWNrZm9yd2FyZGxp
c3QuYyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJiYWNrZm9yd2FyZGxpc3QuYwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzc4MmQ0MC4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2ViYmFja2ZvcndhcmRsaXN0LmMKKysrIC9kZXYvbnVs
bApAQCAtMSwzMjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBIb2xnZXIgSGFu
cyBQZXRlciBGcmV5dGhlcgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8Z2xpYi5oPgot
I2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+Ci0KLXN0YXRp
YyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbGlmZXRpbWUodm9pZCkKLXsKLSAg
ICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OwotICAgIFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCog
YmFja0ZvcndhcmRMaXN0OwotICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBjdXJyZW50SXRlbTsK
LSAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogZm9yd2FyZEl0ZW07Ci0gICAgV2ViS2l0V2ViSGlz
dG9yeUl0ZW0qIGJhY2tJdGVtOwotICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBudGhJdGVtOwot
ICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBpdGVtMTsKLSAgICBXZWJLaXRXZWJIaXN0b3J5SXRl
bSogaXRlbTI7Ci0gICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGl0ZW0zOwotICAgIFdlYktpdFdl
Ykhpc3RvcnlJdGVtKiBpdGVtNDsKLSAgICBHTGlzdCogYmFja0xpc3QgPSBOVUxMOwotICAgIEdM
aXN0KiBmb3J3YXJkTGlzdCA9IE5VTEw7Ci0gICAgZ190ZXN0X2J1ZygiMTk4OTgiKTsKLQotICAg
IHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBn
X29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKLSAgICBiYWNrRm9yd2FyZExpc3QgPSB3ZWJraXRf
d2ViX3ZpZXdfZ2V0X2JhY2tfZm9yd2FyZF9saXN0KHdlYlZpZXcpOwotICAgIGdfYXNzZXJ0X2Nt
cGludChHX09CSkVDVChiYWNrRm9yd2FyZExpc3QpLT5yZWZfY291bnQsID09LCAxKTsKLQotICAg
IC8qIGFkZCB0ZXN0IGl0ZW1zICovCi0gICAgaXRlbTEgPSB3ZWJraXRfd2ViX2hpc3RvcnlfaXRl
bV9uZXdfd2l0aF9kYXRhKCJodHRwOi8vZXhhbXBsZS5jb20vMS8iLCAiU2l0ZSAxIik7Ci0gICAg
d2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9hZGRfaXRlbShiYWNrRm9yd2FyZExpc3QsIGl0
ZW0xKTsKLSAgICBnX29iamVjdF91bnJlZihpdGVtMSk7Ci0KLSAgICBpdGVtMiA9IHdlYmtpdF93
ZWJfaGlzdG9yeV9pdGVtX25ld193aXRoX2RhdGEoImh0dHA6Ly9leGFtcGxlLmNvbS8yLyIsICJT
aXRlIDIiKTsKLSAgICB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2FkZF9pdGVtKGJhY2tG
b3J3YXJkTGlzdCwgaXRlbTIpOwotICAgIGdfb2JqZWN0X3VucmVmKGl0ZW0yKTsKLQotICAgIGl0
ZW0zID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dpdGhfZGF0YSgiaHR0cDovL2V4YW1w
bGUuY29tLzMvIiwgIlNpdGUgMyIpOwotICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3Rf
YWRkX2l0ZW0oYmFja0ZvcndhcmRMaXN0LCBpdGVtMyk7Ci0gICAgZ19vYmplY3RfdW5yZWYoaXRl
bTMpOwotCi0gICAgaXRlbTQgPSB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9uZXdfd2l0aF9kYXRh
KCJodHRwOi8vZXhhbXBsZS5jb20vNC8iLCAiU2l0ZSA0Iik7Ci0gICAgd2Via2l0X3dlYl9iYWNr
X2ZvcndhcmRfbGlzdF9hZGRfaXRlbShiYWNrRm9yd2FyZExpc3QsIGl0ZW00KTsKLSAgICBnX29i
amVjdF91bnJlZihpdGVtNCk7Ci0KLSAgICAvKiBtYWtlIHN1cmUgdGhlc2UgZnVuY3Rpb25zIGRv
bid0IGFkZCB1bm5lY2Vzc2FyeSByZWYgdG8gdGhlIGhpc3RvcnkgaXRlbSAqLwotICAgIGJhY2tJ
dGVtID0gd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19pdGVtKGJhY2tGb3J3
YXJkTGlzdCk7Ci0gICAgZ19vYmplY3RfcmVmKGJhY2tJdGVtKTsKLSAgICBnX2Fzc2VydF9jbXBp
bnQoR19PQkpFQ1QoYmFja0l0ZW0pLT5yZWZfY291bnQsID09LCAyKTsKLSAgICBnX29iamVjdF91
bnJlZihiYWNrSXRlbSk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKGJhY2tJdGVtKS0+
cmVmX2NvdW50LCA9PSwgMSk7Ci0KLSAgICBjdXJyZW50SXRlbSA9IHdlYmtpdF93ZWJfYmFja19m
b3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbShiYWNrRm9yd2FyZExpc3QpOwotICAgIGdfb2Jq
ZWN0X3JlZihjdXJyZW50SXRlbSk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKGN1cnJl
bnRJdGVtKS0+cmVmX2NvdW50LCA9PSwgMik7Ci0gICAgZ19vYmplY3RfdW5yZWYoY3VycmVudEl0
ZW0pOwotICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChjdXJyZW50SXRlbSktPnJlZl9jb3Vu
dCwgPT0sIDEpOwotCi0gICAgd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nb190b19pdGVt
KGJhY2tGb3J3YXJkTGlzdCwgaXRlbTIpOwotICAgIGZvcndhcmRJdGVtID0gd2Via2l0X3dlYl9i
YWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9pdGVtKGJhY2tGb3J3YXJkTGlzdCk7Ci0gICAg
Z19vYmplY3RfcmVmKGZvcndhcmRJdGVtKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1Qo
Zm9yd2FyZEl0ZW0pLT5yZWZfY291bnQsID09LCAyKTsKLSAgICBnX29iamVjdF91bnJlZihmb3J3
YXJkSXRlbSk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKGZvcndhcmRJdGVtKS0+cmVm
X2NvdW50LCA9PSwgMSk7Ci0KLSAgICBudGhJdGVtID0gd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRf
bGlzdF9nZXRfbnRoX2l0ZW0oYmFja0ZvcndhcmRMaXN0LCAxKTsKLSAgICBnX29iamVjdF9yZWYo
bnRoSXRlbSk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKG50aEl0ZW0pLT5yZWZfY291
bnQsID09LCAyKTsKLSAgICBnX29iamVjdF91bnJlZihudGhJdGVtKTsKLSAgICBnX2Fzc2VydF9j
bXBpbnQoR19PQkpFQ1QobnRoSXRlbSktPnJlZl9jb3VudCwgPT0sIDEpOwotCi0gICAgYmFja0xp
c3QgPSB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3Rfd2l0aF9saW1p
dChiYWNrRm9yd2FyZExpc3QsIDUpOwotICAgIGZvciAoOyBiYWNrTGlzdDsgYmFja0xpc3QgPSBi
YWNrTGlzdC0+bmV4dCkKLSAgICAgICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKGJhY2tMaXN0
LT5kYXRhKS0+cmVmX2NvdW50LCA9PSwgMSk7Ci0KLSAgICBmb3J3YXJkTGlzdCA9IHdlYmtpdF93
ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlzdF93aXRoX2xpbWl0KGJhY2tGb3J3
YXJkTGlzdCwgNSk7Ci0gICAgZm9yICg7IGZvcndhcmRMaXN0OyBmb3J3YXJkTGlzdCA9IGZvcndh
cmRMaXN0LT5uZXh0KQotICAgICAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoZm9yd2FyZExp
c3QtPmRhdGEpLT5yZWZfY291bnQsID09LCAxKTsKLQotICAgIGdfbGlzdF9mcmVlKGZvcndhcmRM
aXN0KTsKLSAgICBnX2xpc3RfZnJlZShiYWNrTGlzdCk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdf
T0JKRUNUKGl0ZW0xKS0+cmVmX2NvdW50LCA9PSwgMSk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdf
T0JKRUNUKGl0ZW0yKS0+cmVmX2NvdW50LCA9PSwgMSk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdf
T0JKRUNUKGl0ZW0zKS0+cmVmX2NvdW50LCA9PSwgMSk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdf
T0JKRUNUKGl0ZW00KS0+cmVmX2NvdW50LCA9PSwgMSk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdf
T0JKRUNUKGJhY2tGb3J3YXJkTGlzdCktPnJlZl9jb3VudCwgPT0sIDEpOwotICAgIGdfb2JqZWN0
X3VucmVmKHdlYlZpZXcpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfYmFja19m
b3J3YXJkX2xpc3Rfb3JkZXIodm9pZCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3Owot
ICAgIFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViQmFja0ZvcndhcmRMaXN0OwotICAgIFdl
YktpdFdlYkhpc3RvcnlJdGVtKiBpdGVtMTsKLSAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogaXRl
bTI7Ci0gICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGl0ZW0zOwotICAgIFdlYktpdFdlYkhpc3Rv
cnlJdGVtKiBpdGVtNDsKLSAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogY3VycmVudEl0ZW07Ci0g
ICAgR0xpc3QqIGJhY2tMaXN0ID0gTlVMTDsKLSAgICBHTGlzdCogZm9yd2FyZExpc3QgPSBOVUxM
OwotICAgIGdfdGVzdF9idWcoIjIyNjk0Iik7Ci0KLSAgICB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9W
SUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmll
dyk7Ci0KLSAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X21haW50YWluc19iYWNrX2ZvcndhcmRfbGlz
dCh3ZWJWaWV3LCBUUlVFKTsKLSAgICB3ZWJCYWNrRm9yd2FyZExpc3QgPSB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X2JhY2tfZm9yd2FyZF9saXN0KHdlYlZpZXcpOwotICAgIGdfYXNzZXJ0KHdlYkJhY2tG
b3J3YXJkTGlzdCk7Ci0KLSAgICAvLyBDaGVjayB0aGF0IHRoZXJlIGlzIG5vIGl0ZW0uCi0gICAg
Z19hc3NlcnQoIXdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh3
ZWJCYWNrRm9yd2FyZExpc3QpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNr
X2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0s
IDApOwotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dl
dF9iYWNrX2xlbmd0aCh3ZWJCYWNrRm9yd2FyZExpc3QpLCA9PSwgMCk7Ci0gICAgZ19hc3NlcnQo
IXdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh3ZWJWaWV3KSk7Ci0gICAgZ19hc3NlcnQo
IXdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayh3ZWJWaWV3KSk7Ci0KLSAgICAvLyBBZGQgYSBu
ZXcgaXRlbXMKLSAgICBpdGVtMSA9IHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX25ld193aXRoX2Rh
dGEoImh0dHA6Ly9leGFtcGxlLmNvbS8xLyIsICJTaXRlIDEiKTsKLSAgICB3ZWJraXRfd2ViX2Jh
Y2tfZm9yd2FyZF9saXN0X2FkZF9pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCwgaXRlbTEpOwotICAg
IGdfb2JqZWN0X3VucmVmKGl0ZW0xKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2JhY2tfZm9y
d2FyZF9saXN0X2NvbnRhaW5zX2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0LCBpdGVtMSkpOwotCi0g
ICAgaXRlbTIgPSB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9uZXdfd2l0aF9kYXRhKCJodHRwOi8v
ZXhhbXBsZS5jb20vMi8iLCAiU2l0ZSAyIik7Ci0gICAgd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRf
bGlzdF9hZGRfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QsIGl0ZW0yKTsKLSAgICBnX29iamVjdF91
bnJlZihpdGVtMik7Ci0gICAgZ19hc3NlcnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9j
b250YWluc19pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCwgaXRlbTIpKTsKLQotICAgIGl0ZW0zID0g
d2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dpdGhfZGF0YSgiaHR0cDovL2V4YW1wbGUuY29t
LzMvIiwgIlNpdGUgMyIpOwotICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfYWRkX2l0
ZW0od2ViQmFja0ZvcndhcmRMaXN0LCBpdGVtMyk7Ci0gICAgZ19vYmplY3RfdW5yZWYoaXRlbTMp
OwotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY29udGFpbnNfaXRl
bSh3ZWJCYWNrRm9yd2FyZExpc3QsIGl0ZW0zKSk7Ci0KLSAgICBpdGVtNCA9IHdlYmtpdF93ZWJf
aGlzdG9yeV9pdGVtX25ld193aXRoX2RhdGEoImh0dHA6Ly9leGFtcGxlLmNvbS80LyIsICJTaXRl
IDQiKTsKLSAgICB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2FkZF9pdGVtKHdlYkJhY2tG
b3J3YXJkTGlzdCwgaXRlbTQpOwotICAgIGdfb2JqZWN0X3VucmVmKGl0ZW00KTsKLSAgICBnX2Fz
c2VydCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2NvbnRhaW5zX2l0ZW0od2ViQmFja0Zv
cndhcmRMaXN0LCBpdGVtNCkpOwotCi0gICAgLy8gY2hlY2sgdGhlIGJhY2sgbGlzdCBvcmRlcgot
ICAgIGJhY2tMaXN0ID0gd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19saXN0
X3dpdGhfbGltaXQod2ViQmFja0ZvcndhcmRMaXN0LCA1KTsKLSAgICBnX2Fzc2VydChiYWNrTGlz
dCk7Ci0KLSAgICBjdXJyZW50SXRlbSA9IFdFQktJVF9XRUJfSElTVE9SWV9JVEVNKGJhY2tMaXN0
LT5kYXRhKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0
X3VyaShjdXJyZW50SXRlbSksID09LCAiaHR0cDovL2V4YW1wbGUuY29tLzMvIik7Ci0gICAgZ19h
c3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF90aXRsZShjdXJyZW50SXRl
bSksID09LCAiU2l0ZSAzIik7Ci0gICAgYmFja0xpc3QgPSBiYWNrTGlzdC0+bmV4dDsKLQotICAg
IGN1cnJlbnRJdGVtID0gV0VCS0lUX1dFQl9ISVNUT1JZX0lURU0oYmFja0xpc3QtPmRhdGEpOwot
ICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdXJpKGN1cnJl
bnRJdGVtKSwgPT0sICJodHRwOi8vZXhhbXBsZS5jb20vMi8iKTsKLSAgICBnX2Fzc2VydF9jbXBz
dHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3RpdGxlKGN1cnJlbnRJdGVtKSwgPT0sICJT
aXRlIDIiKTsKLSAgICBiYWNrTGlzdCA9IGJhY2tMaXN0LT5uZXh0OwotCi0gICAgY3VycmVudEl0
ZW0gPSBXRUJLSVRfV0VCX0hJU1RPUllfSVRFTShiYWNrTGlzdC0+ZGF0YSk7Ci0gICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF91cmkoY3VycmVudEl0ZW0pLCA9
PSwgImh0dHA6Ly9leGFtcGxlLmNvbS8xLyIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRf
d2ViX2hpc3RvcnlfaXRlbV9nZXRfdGl0bGUoY3VycmVudEl0ZW0pLCA9PSwgIlNpdGUgMSIpOwot
ICAgIGdfbGlzdF9mcmVlKGJhY2tMaXN0KTsKLQotICAgIC8vIGNoZWNrIHRoZSBmb3J3YXJkIGxp
c3Qgb3JkZXIKLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ29fdG9fYmFja19mb3J3YXJk
X2l0ZW0od2ViVmlldywgaXRlbTEpKTsKLSAgICBmb3J3YXJkTGlzdCA9IHdlYmtpdF93ZWJfYmFj
a19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlzdF93aXRoX2xpbWl0KHdlYkJhY2tGb3J3YXJk
TGlzdCw1KTsKLSAgICBnX2Fzc2VydChmb3J3YXJkTGlzdCk7Ci0KLSAgICBjdXJyZW50SXRlbSA9
IFdFQktJVF9XRUJfSElTVE9SWV9JVEVNKGZvcndhcmRMaXN0LT5kYXRhKTsKLSAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3VyaShjdXJyZW50SXRlbSksID09
LCAiaHR0cDovL2V4YW1wbGUuY29tLzQvIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93
ZWJfaGlzdG9yeV9pdGVtX2dldF90aXRsZShjdXJyZW50SXRlbSksID09LCAiU2l0ZSA0Iik7Ci0g
ICAgZm9yd2FyZExpc3QgPSBmb3J3YXJkTGlzdC0+bmV4dDsKLQotICAgIGN1cnJlbnRJdGVtID0g
V0VCS0lUX1dFQl9ISVNUT1JZX0lURU0oZm9yd2FyZExpc3QtPmRhdGEpOwotICAgIGdfYXNzZXJ0
X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdXJpKGN1cnJlbnRJdGVtKSwgPT0s
ICJodHRwOi8vZXhhbXBsZS5jb20vMy8iKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dl
Yl9oaXN0b3J5X2l0ZW1fZ2V0X3RpdGxlKGN1cnJlbnRJdGVtKSwgPT0sICJTaXRlIDMiKTsKLSAg
ICBmb3J3YXJkTGlzdCA9IGZvcndhcmRMaXN0LT5uZXh0OwotCi0gICAgY3VycmVudEl0ZW0gPSBX
RUJLSVRfV0VCX0hJU1RPUllfSVRFTShmb3J3YXJkTGlzdC0+ZGF0YSk7Ci0gICAgZ19hc3NlcnRf
Y21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF91cmkoY3VycmVudEl0ZW0pLCA9PSwg
Imh0dHA6Ly9leGFtcGxlLmNvbS8yLyIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2Vi
X2hpc3RvcnlfaXRlbV9nZXRfdGl0bGUoY3VycmVudEl0ZW0pLCA9PSwgIlNpdGUgMiIpOwotCi0g
ICAgZ19saXN0X2ZyZWUoZm9yd2FyZExpc3QpOwotICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcp
OwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfYWRk
X2l0ZW0odm9pZCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OwotICAgIFdlYktpdFdl
YkJhY2tGb3J3YXJkTGlzdCogd2ViQmFja0ZvcndhcmRMaXN0OwotICAgIFdlYktpdFdlYkhpc3Rv
cnlJdGVtKiBhZGRJdGVtMTsKLSAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogYWRkSXRlbTI7Ci0g
ICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGJhY2tJdGVtOwotICAgIFdlYktpdFdlYkhpc3RvcnlJ
dGVtKiBjdXJyZW50SXRlbTsKLSAgICBnX3Rlc3RfYnVnKCIyMjk4OCIpOwotCi0gICAgd2ViVmll
dyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0
X3JlZl9zaW5rKHdlYlZpZXcpOwotCi0gICAgd2Via2l0X3dlYl92aWV3X3NldF9tYWludGFpbnNf
YmFja19mb3J3YXJkX2xpc3Qod2ViVmlldywgVFJVRSk7Ci0gICAgd2ViQmFja0ZvcndhcmRMaXN0
ID0gd2Via2l0X3dlYl92aWV3X2dldF9iYWNrX2ZvcndhcmRfbGlzdCh3ZWJWaWV3KTsKLSAgICBn
X2Fzc2VydCh3ZWJCYWNrRm9yd2FyZExpc3QpOwotCi0gICAgLy8gQ2hlY2sgdGhhdCB0aGVyZSBp
cyBubyBpdGVtLgotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dl
dF9jdXJyZW50X2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0KSk7Ci0gICAgZ19hc3NlcnRfY21waW50
KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGVuZ3RoKHdlYkJhY2tG
b3J3YXJkTGlzdCksID09LCAwKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNr
X2ZvcndhcmRfbGlzdF9nZXRfYmFja19sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDAp
OwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQod2ViVmlldykp
OwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2sod2ViVmlldykpOwot
Ci0gICAgLy8gQWRkIGEgbmV3IGl0ZW0KLSAgICBhZGRJdGVtMSA9IHdlYmtpdF93ZWJfaGlzdG9y
eV9pdGVtX25ld193aXRoX2RhdGEoImh0dHA6Ly9leGFtcGxlLmNvbS8iLCAiQWRkZWQgc2l0ZSIp
OwotICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfYWRkX2l0ZW0od2ViQmFja0Zvcndh
cmRMaXN0LCBhZGRJdGVtMSk7Ci0gICAgZ19vYmplY3RfdW5yZWYoYWRkSXRlbTEpOwotICAgIGdf
YXNzZXJ0KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY29udGFpbnNfaXRlbSh3ZWJCYWNr
Rm9yd2FyZExpc3QsIGFkZEl0ZW0xKSk7Ci0KLSAgICAvLyBDaGVjayB0aGF0IHRoZSBhZGRlZCBp
dGVtIGlzIHRoZSBjdXJyZW50IGl0ZW0uCi0gICAgY3VycmVudEl0ZW0gPSB3ZWJraXRfd2ViX2Jh
Y2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0KTsKLSAg
ICBnX2Fzc2VydChjdXJyZW50SXRlbSk7Ci0gICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJf
YmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGVuZ3RoKHdlYkJhY2tGb3J3YXJkTGlzdCks
ID09LCAwKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlz
dF9nZXRfYmFja19sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDApOwotICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQod2ViVmlldykpOwotICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2sod2ViVmlldykpOwotICAgIGdfYXNzZXJ0
X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdXJpKGN1cnJlbnRJdGVtKSwgPT0s
ICJodHRwOi8vZXhhbXBsZS5jb20vIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJf
aGlzdG9yeV9pdGVtX2dldF90aXRsZShjdXJyZW50SXRlbSksID09LCAiQWRkZWQgc2l0ZSIpOwot
Ci0gICAgLy8gQWRkIGFub3RoZXIgaXRlbS4KLSAgICBhZGRJdGVtMiA9IHdlYmtpdF93ZWJfaGlz
dG9yeV9pdGVtX25ld193aXRoX2RhdGEoImh0dHA6Ly9leGFtcGxlLmNvbS8yLyIsICJBZGRlZCBz
aXRlIDIiKTsKLSAgICB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2FkZF9pdGVtKHdlYkJh
Y2tGb3J3YXJkTGlzdCwgYWRkSXRlbTIpOwotICAgIGdfb2JqZWN0X3VucmVmKGFkZEl0ZW0yKTsK
LSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2NvbnRhaW5zX2l0ZW0o
d2ViQmFja0ZvcndhcmRMaXN0LCBhZGRJdGVtMikpOwotCi0gICAgLy8gQ2hlY2sgdGhhdCB0aGUg
YWRkZWQgaXRlbSBpcyBuZXcgY3VycmVudCBpdGVtLgotICAgIGN1cnJlbnRJdGVtID0gd2Via2l0
X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKHdlYkJhY2tGb3J3YXJkTGlz
dCk7Ci0gICAgZ19hc3NlcnQoY3VycmVudEl0ZW0pOwotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJr
aXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xlbmd0aCh3ZWJCYWNrRm9yd2Fy
ZExpc3QpLCA9PSwgMCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJfYmFja19mb3J3
YXJkX2xpc3RfZ2V0X2JhY2tfbGVuZ3RoKHdlYkJhY2tGb3J3YXJkTGlzdCksID09LCAxKTsKLSAg
ICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHdlYlZpZXcpKTsKLSAg
ICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2sod2ViVmlldykpOwotICAgIGdf
YXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdXJpKGN1cnJlbnRJdGVt
KSwgPT0sICJodHRwOi8vZXhhbXBsZS5jb20vMi8iKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Vi
a2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3RpdGxlKGN1cnJlbnRJdGVtKSwgPT0sICJBZGRlZCBz
aXRlIDIiKTsKLQotICAgIGJhY2tJdGVtID0gd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9n
ZXRfYmFja19pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCk7Ci0gICAgZ19hc3NlcnQoYmFja0l0ZW0p
OwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdXJpKGJh
Y2tJdGVtKSwgPT0sICJodHRwOi8vZXhhbXBsZS5jb20vIik7Ci0gICAgZ19hc3NlcnRfY21wc3Ry
KHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF90aXRsZShiYWNrSXRlbSksID09LCAiQWRkZWQg
c2l0ZSIpOwotCi0gICAgLy8gR28gdG8gdGhlIGZpcnN0IGFkZGVkIGl0ZW0uCi0gICAgZ19hc3Nl
cnQod2Via2l0X3dlYl92aWV3X2dvX3RvX2JhY2tfZm9yd2FyZF9pdGVtKHdlYlZpZXcsIGFkZEl0
ZW0xKSk7Ci0gICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3Rf
Z2V0X2ZvcndhcmRfbGVuZ3RoKHdlYkJhY2tGb3J3YXJkTGlzdCksID09LCAxKTsKLSAgICBnX2Fz
c2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19sZW5ndGgo
d2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDApOwotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmll
d19jYW5fZ29fZm9yd2FyZCh3ZWJWaWV3KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmll
d19jYW5fZ29fYmFjayh3ZWJWaWV3KSk7Ci0KLSAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsK
LX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2NsZWFy
KHZvaWQpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldzsKLSAgICBXZWJLaXRXZWJCYWNr
Rm9yd2FyZExpc3QqIHdlYkJhY2tGb3J3YXJkTGlzdDsKLSAgICBXZWJLaXRXZWJIaXN0b3J5SXRl
bSogYWRkSXRlbTsKLSAgICBnX3Rlc3RfYnVnKCIzNjE3MyIpOwotCi0gICAgd2ViVmlldyA9IFdF
QktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0X3JlZl9z
aW5rKHdlYlZpZXcpOwotCi0gICAgd2ViQmFja0ZvcndhcmRMaXN0ID0gd2Via2l0X3dlYl92aWV3
X2dldF9iYWNrX2ZvcndhcmRfbGlzdCh3ZWJWaWV3KTsKLSAgICBnX2Fzc2VydCh3ZWJCYWNrRm9y
d2FyZExpc3QpOwotCi0gICAgLy8gQ2hlY2sgdGhhdCB0aGVyZSBpcyBubyBpdGVtLgotICAgIGdf
YXNzZXJ0X2NtcGludCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xl
bmd0aCh3ZWJCYWNrRm9yd2FyZExpc3QpLCA9PSwgMCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHdl
YmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGVuZ3RoKHdlYkJhY2tGb3J3YXJk
TGlzdCksID09LCAwKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlz
dF9nZXRfY3VycmVudF9pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCkpOwotICAgIGdfYXNzZXJ0KCF3
ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQod2ViVmlldykpOwotICAgIGdfYXNzZXJ0KCF3
ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2sod2ViVmlldykpOwotCi0gICAgLy8gQ2hlY2sgdGhh
dCBjbGVhcmluZyB0aGUgZW1wdHkgbGlzdCBkb2VzIG5vdCBtb2RpZnkgY291bnRlcnMKLSAgICB3
ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2NsZWFyKHdlYkJhY2tGb3J3YXJkTGlzdCk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2Zvcndh
cmRfbGVuZ3RoKHdlYkJhY2tGb3J3YXJkTGlzdCksID09LCAwKTsKLSAgICBnX2Fzc2VydF9jbXBp
bnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19sZW5ndGgod2ViQmFja0Zv
cndhcmRMaXN0KSwgPT0sIDApOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX2JhY2tfZm9yd2Fy
ZF9saXN0X2dldF9jdXJyZW50X2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0KSk7Ci0gICAgZ19hc3Nl
cnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh3ZWJWaWV3KSk7Ci0gICAgZ19hc3Nl
cnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayh3ZWJWaWV3KSk7Ci0KLSAgICAvLyBBZGQg
YSBuZXcgaXRlbQotICAgIGFkZEl0ZW0gPSB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9uZXdfd2l0
aF9kYXRhKCJodHRwOi8vZXhhbXBsZS5jb20vIiwgIkFkZGVkIHNpdGUiKTsKLSAgICB3ZWJraXRf
d2ViX2JhY2tfZm9yd2FyZF9saXN0X2FkZF9pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCwgYWRkSXRl
bSk7Ci0gICAgZ19vYmplY3RfdW5yZWYoYWRkSXRlbSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3dl
Yl9iYWNrX2ZvcndhcmRfbGlzdF9jb250YWluc19pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCwgYWRk
SXRlbSkpOwotCi0gICAgLy8gQ2hlY2sgdGhhdCBhZnRlciBjbGVhcmluZyB0aGUgbGlzdCB0aGUg
YWRkZWQgaXRlbSBpcyBubyBsb25nZXIgaW4gdGhlIGxpc3QKLSAgICB3ZWJraXRfd2ViX2JhY2tf
Zm9yd2FyZF9saXN0X2NsZWFyKHdlYkJhY2tGb3J3YXJkTGlzdCk7Ci0gICAgZ19hc3NlcnQoIXdl
YmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY29udGFpbnNfaXRlbSh3ZWJCYWNrRm9yd2FyZExp
c3QsIGFkZEl0ZW0pKTsKLQotICAgIC8vIENoZWNrIHRoYXQgYWZ0ZXIgY2xlYXJpbmcgaXQsIHRo
ZSBsaXN0IGlzIGVtcHR5Ci0gICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJfYmFja19mb3J3
YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGVuZ3RoKHdlYkJhY2tGb3J3YXJkTGlzdCksID09LCAwKTsK
LSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFj
a19sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDApOwotICAgIGdfYXNzZXJ0KCF3ZWJr
aXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0od2ViQmFja0ZvcndhcmRM
aXN0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh3ZWJW
aWV3KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayh3ZWJWaWV3
KSk7Ci0KLSAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKLX0KLQotaW50IG1haW4oaW50IGFy
Z2MsIGNoYXIqKiBhcmd2KQotewotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxM
KTsKLQotICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0g
ICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYmJhY2tmb3J3YXJkbGlzdC9hZGRfaXRlbSIs
IHRlc3Rfd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9hZGRfaXRlbSk7Ci0gICAgZ190ZXN0
X2FkZF9mdW5jKCIvd2Via2l0L3dlYmJhY2tmb3J3YXJkbGlzdC9saXN0X29yZGVyIiwgdGVzdF93
ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X29yZGVyKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMo
Ii93ZWJraXQvd2ViaGlzdG9yeWl0ZW0vbGlmZXRpbWUiLCB0ZXN0X3dlYmtpdF93ZWJfaGlzdG9y
eV9pdGVtX2xpZmV0aW1lKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2ViYmFja2Zv
cndhcmRsaXN0L2NsZWFyIiwgdGVzdF93ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2NsZWFy
KTsKLSAgICByZXR1cm4gZ190ZXN0X3J1biAoKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJkYXRhc291cmNlLmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0
cy90ZXN0d2ViZGF0YXNvdXJjZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTY2
MjU3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJkYXRhc291
cmNlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOSBKYW4gTWljaGFlbCBBbG9uem8KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
PGdsaWIuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5o
PgotCi1zdGF0aWMgY29uc3QgZ3Nob3J0IGRlZmF1bHRUaW1lb3V0ID0gMTA7Ci1ndWludCB3YWl0
VGltZXI7Ci1nYm9vbGVhbiBzaG91bGRXYWl0OwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgV2Vi
S2l0V2ViVmlldyogd2ViVmlldzsKLSAgICBXZWJLaXRXZWJGcmFtZSogbWFpbkZyYW1lOwotfSBX
ZWJEYXRhU291cmNlRml4dHVyZTsKLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX2RhdGFf
c291cmNlX2dldF9pbml0aWFsX3JlcXVlc3QoKQotewotICAgIFdlYktpdFdlYlZpZXcqIHZpZXc7
Ci0gICAgV2ViS2l0V2ViRnJhbWUqIGZyYW1lOwotICAgIFdlYktpdFdlYkRhdGFTb3VyY2UqIGRh
dGFTb3VyY2U7Ci0gICAgV2ViS2l0TmV0d29ya1JlcXVlc3QqIGluaXRpYWxSZXF1ZXN0OwotCi0g
ICAgdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdf
b2JqZWN0X3JlZl9zaW5rKHZpZXcpOwotICAgIGZyYW1lID0gd2Via2l0X3dlYl92aWV3X2dldF9t
YWluX2ZyYW1lKHZpZXcpOwotCi0gICAgV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QgPSB3
ZWJraXRfbmV0d29ya19yZXF1ZXN0X25ldygiaHR0cDovL3d3dy5nb29nbGUuY29tIik7Ci0gICAg
d2Via2l0X3dlYl9mcmFtZV9sb2FkX3JlcXVlc3QoZnJhbWUsIHJlcXVlc3QpOwotICAgIGdfb2Jq
ZWN0X3VucmVmKHJlcXVlc3QpOwotCi0gICAgZGF0YVNvdXJjZSA9IHdlYmtpdF93ZWJfZnJhbWVf
Z2V0X3Byb3Zpc2lvbmFsX2RhdGFfc291cmNlKGZyYW1lKTsKLSAgICBnX2Fzc2VydChkYXRhU291
cmNlKTsKLSAgICBpbml0aWFsUmVxdWVzdCA9IHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X2lu
aXRpYWxfcmVxdWVzdChkYXRhU291cmNlKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X25l
dHdvcmtfcmVxdWVzdF9nZXRfdXJpKGluaXRpYWxSZXF1ZXN0KSwgPT0sICJodHRwOi8vd3d3Lmdv
b2dsZS5jb20vIik7Ci0KLSAgICBnX29iamVjdF91bnJlZih2aWV3KTsKLX0KLQotc3RhdGljIHZv
aWQgbm90aWZ5X2xvYWRfc3RhdHVzX3VucmVhY2hhYmxlX2NiKFdlYktpdFdlYlZpZXcqIHZpZXcs
IEdQYXJhbVNwZWMqIHBzcGVjLCBHTWFpbkxvb3AqIGxvb3ApCi17Ci0gICAgV2ViS2l0TG9hZFN0
YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzICh2aWV3KTsKLSAg
ICBXZWJLaXRXZWJGcmFtZSogZnJhbWUgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUo
dmlldyk7Ci0KLSAgICBnX2Fzc2VydChzdGF0dXMgIT0gV0VCS0lUX0xPQURfRklOSVNIRUQpOwot
Ci0gICAgaWYgKHN0YXR1cyAhPSBXRUJLSVRfTE9BRF9GQUlMRUQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFdlYktpdFdlYkRhdGFTb3VyY2UqIGRhdGFzb3VyY2UgPSB3ZWJraXRfd2ViX2ZyYW1l
X2dldF9kYXRhX3NvdXJjZShmcmFtZSk7Ci0KLSAgICBnX2Fzc2VydF9jbXBzdHIoImh0dHA6Ly90
aGlzLmhvc3QuZG9lcy5ub3QuZXhpc3QvZG9pcmVhbGx5ZXhpc3QuaHRtbCIsID09LAotICAgICAg
ICAgICAgICAgICAgICB3ZWJraXRfd2ViX2RhdGFfc291cmNlX2dldF91bnJlYWNoYWJsZV91cmko
ZGF0YXNvdXJjZSkpOwotCi0gICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKLX0KLQotc3RhdGlj
IHZvaWQgbm90aWZ5X2xvYWRfc3RhdHVzX2NiKFdlYktpdFdlYlZpZXcqIHZpZXcsIEdQYXJhbVNw
ZWMqIHBzcGVjLCBHTWFpbkxvb3AqIGxvb3ApCi17Ci0gICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0
dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzICh2aWV3KTsKLSAgICBXZWJLaXRX
ZWJGcmFtZSogZnJhbWUgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUodmlldyk7Ci0g
ICAgV2ViS2l0V2ViRGF0YVNvdXJjZSogZGF0YVNvdXJjZSA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0
X2RhdGFfc291cmNlKGZyYW1lKTsKLQotICAgIGlmIChzdGF0dXMgPT0gV0VCS0lUX0xPQURfQ09N
TUlUVEVEKSB7Ci0gICAgICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfaXNfbG9h
ZGluZyhkYXRhU291cmNlKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZWxzZSBpZiAo
c3RhdHVzICE9IFdFQktJVF9MT0FEX0ZJTklTSEVEKQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
KiBUZXN0IGdldF9yZXF1ZXN0ICovCi0gICAgZ190ZXN0X21lc3NhZ2UoIlRlc3Rpbmcgd2Via2l0
X3dlYl9kYXRhX3NvdXJjZV9nZXRfcmVxdWVzdCIpOwotICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0
KiByZXF1ZXN0ID0gd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfcmVxdWVzdChkYXRhU291cmNl
KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X25ldHdvcmtfcmVxdWVzdF9nZXRfdXJpKHJl
cXVlc3QpLCA9PSwgImh0dHA6Ly93d3cud2Via2l0Lm9yZy8iKTsKLQotICAgIC8qIFRlc3QgZ2V0
X21haW5fcmVzb3VyY2UgKi8KLSAgICBnX3Rlc3RfbWVzc2FnZSgiVGVzdGluZyB3ZWJraXRfd2Vi
X2RhdGFfc291cmNlX2dldF9tYWluX3Jlc291cmNlIik7Ci0gICAgV2ViS2l0V2ViUmVzb3VyY2Uq
IHJlc291cmNlID0gd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfbWFpbl9yZXNvdXJjZShkYXRh
U291cmNlKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoInRleHQvaHRtbCIsID09LCB3ZWJraXRfd2Vi
X3Jlc291cmNlX2dldF9taW1lX3R5cGUocmVzb3VyY2UpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIo
Imh0dHA6Ly93d3cud2Via2l0Lm9yZy8iLCA9PSwgd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJp
KHJlc291cmNlKSk7Ci0KLSAgICAvKiBUZXN0IGdldF9kYXRhLiBXZSBqdXN0IHRlc3QgaWYgZGF0
YSBoYXMgY2VydGFpbiBzaXplIGZvciB0aGUgbWVhbiB0aW1lICovCi0gICAgZ190ZXN0X21lc3Nh
Z2UoIlRlc3Rpbmcgd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfZGF0YSBoYXMgY2VydGFpbiBz
aXplIik7Ci0gICAgR1N0cmluZyogZGF0YSA9IHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X2Rh
dGEoZGF0YVNvdXJjZSk7Ci0gICAgZ19hc3NlcnQoZGF0YS0+bGVuID4gMTAwKTsKLQotICAgIC8q
IEZJWE1FOiBBZGQgdGVzdCBmb3IgZ2V0X2VuY29kaW5nICovCi0KLSAgICBnX21haW5fbG9vcF9x
dWl0KGxvb3ApOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gd2FpdF90aW1lcl9maXJlZChHTWFpbkxv
b3AqIGxvb3ApCi17Ci0gICAgd2FpdFRpbWVyID0gMDsKLSAgICBnX21haW5fbG9vcF9xdWl0KGxv
b3ApOwotCi0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93
ZWJfZGF0YV9zb3VyY2UoKQotewotICAgIFdlYktpdFdlYlZpZXcqIHZpZXc7Ci0gICAgR01haW5M
b29wKiBsb29wOwotCi0gICAgdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdf
bmV3KCkpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKHZpZXcpOwotICAgIGxvb3AgPSBnX21haW5f
bG9vcF9uZXcoTlVMTCwgVFJVRSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdCh2aWV3LCAibm90aWZ5
Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0sobm90aWZ5X2xvYWRfc3RhdHVzX2NiKSwgbG9vcCk7
Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHZpZXcsICJodHRwOi8vd3d3LndlYmtpdC5v
cmciKTsKLQotICAgIHdhaXRUaW1lciA9IGdfdGltZW91dF9hZGRfc2Vjb25kcyhkZWZhdWx0VGlt
ZW91dCwgKEdTb3VyY2VGdW5jKXdhaXRfdGltZXJfZmlyZWQsIGxvb3ApOwotCi0gICAgZ19tYWlu
X2xvb3BfcnVuKGxvb3ApOwotCi0gICAgaWYgKHdhaXRUaW1lcikKLSAgICAgICAgZ19zb3VyY2Vf
cmVtb3ZlKHdhaXRUaW1lcik7Ci0KLSAgICB3YWl0VGltZXIgPSAwOwotCi0gICAgZ19tYWluX2xv
b3BfdW5yZWYobG9vcCk7Ci0gICAgZ19vYmplY3RfdW5yZWYodmlldyk7Ci19Ci0KLXN0YXRpYyB2
b2lkIG5vdGlmeV9sb2FkX3N0YXR1c19saWZldGltZV9jYihXZWJLaXRXZWJWaWV3KiB2aWV3LCBH
UGFyYW1TcGVjKiBwc3BlYywgR01haW5Mb29wKiBsb29wKQotewotICAgIFdlYktpdExvYWRTdGF0
dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyAodmlldyk7Ci0gICAg
V2ViS2l0V2ViRnJhbWUqIGZyYW1lID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKHZp
ZXcpOwotICAgIFdlYktpdFdlYkRhdGFTb3VyY2UqIGRhdGFTb3VyY2UgPSB3ZWJraXRfd2ViX2Zy
YW1lX2dldF9kYXRhX3NvdXJjZShmcmFtZSk7Ci0KLSAgICBpZiAoc3RhdHVzID09IFdFQktJVF9M
T0FEX0NPTU1JVFRFRCkgewotICAgICAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2RhdGFfc291cmNl
X2lzX2xvYWRpbmcoZGF0YVNvdXJjZSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlm
IChzdGF0dXMgIT0gV0VCS0lUX0xPQURfRklOSVNIRUQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dl
Yl9kYXRhX3NvdXJjZV9saWZldGltZSgpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogdmlldzsKLSAg
ICBHTWFpbkxvb3AqIGxvb3A7Ci0KLSAgICB2aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93
ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsodmlldyk7Ci0gICAgbG9vcCA9
IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHZpZXcs
ICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhub3RpZnlfbG9hZF9zdGF0dXNfbGlm
ZXRpbWVfY2IpLCBsb29wKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkodmlldywgImh0
dHA6Ly93d3cud2Via2l0Lm9yZyIpOwotCi0gICAgd2FpdFRpbWVyID0gZ190aW1lb3V0X2FkZF9z
ZWNvbmRzKGRlZmF1bHRUaW1lb3V0LCAoR1NvdXJjZUZ1bmMpd2FpdF90aW1lcl9maXJlZCwgbG9v
cCk7Ci0KLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICBXZWJLaXRXZWJEYXRhU291
cmNlKiBkYXRhU291cmNlID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfZGF0YV9zb3VyY2Uod2Via2l0
X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKHZpZXcpKTsKLSAgICBHTGlzdCogc3ViUmVzb3VyY2Vz
ID0gd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfc3VicmVzb3VyY2VzKGRhdGFTb3VyY2UpOwot
ICAgIGdpbnQgbnVtYmVyT2ZSZXNvdXJjZXMgPSBnX2xpc3RfbGVuZ3RoKHN1YlJlc291cmNlcyk7
Ci0gICAgZ19saXN0X2ZyZWUoc3ViUmVzb3VyY2VzKTsKLQotICAgIGdfYXNzZXJ0X2NtcGludCh3
ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHZpZXcpLCA9PSwgV0VCS0lUX0xPQURfRklO
SVNIRUQpOwotCi0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHZpZXcsICJodHRwOi8vZ25v
bWUub3JnIik7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl92aWV3X2dldF9sb2Fk
X3N0YXR1cyh2aWV3KSwgPT0sIFdFQktJVF9MT0FEX1BST1ZJU0lPTkFMKTsKLQotICAgIHdlYmtp
dF93ZWJfdmlld19zdG9wX2xvYWRpbmcodmlldyk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQod2Vi
a2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh2aWV3KSwgPT0sIFdFQktJVF9MT0FEX0ZBSUxF
RCk7Ci0KLSAgICBzdWJSZXNvdXJjZXMgPSB3ZWJraXRfd2ViX2RhdGFfc291cmNlX2dldF9zdWJy
ZXNvdXJjZXMoZGF0YVNvdXJjZSk7Ci0gICAgZ19hc3NlcnRfY21waW50KG51bWJlck9mUmVzb3Vy
Y2VzLCA9PSwgZ19saXN0X2xlbmd0aChzdWJSZXNvdXJjZXMpKTsKLSAgICBnX2xpc3RfZnJlZShz
dWJSZXNvdXJjZXMpOwotCi0gICAgaWYgKHdhaXRUaW1lcikKLSAgICAgICAgZ19zb3VyY2VfcmVt
b3ZlKHdhaXRUaW1lcik7Ci0KLSAgICB3YWl0VGltZXIgPSAwOwotCi0gICAgZ19tYWluX2xvb3Bf
dW5yZWYobG9vcCk7Ci0gICAgZ19vYmplY3RfdW5yZWYodmlldyk7Ci19Ci0KLXN0YXRpYyB2b2lk
IHRlc3Rfd2Via2l0X3dlYl9kYXRhX3NvdXJjZV91bnJlYWNoYWJsZV91cmkoKQotewotICAgIC8q
IEZJWE1FOiB0aGlzIHRlc3QgZmFpbHMgY3VycmVudGx5LiAqLwotICAgIHJldHVybjsKLQotICAg
IFdlYktpdFdlYlZpZXcqIHZpZXc7Ci0gICAgR01haW5Mb29wKiBsb29wOwotCi0gICAgdmlldyA9
IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0X3Jl
Zl9zaW5rKHZpZXcpOwotICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7Ci0g
ICAgZ19zaWduYWxfY29ubmVjdCh2aWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJB
Q0sobm90aWZ5X2xvYWRfc3RhdHVzX3VucmVhY2hhYmxlX2NiKSwgbG9vcCk7Ci0gICAgd2Via2l0
X3dlYl92aWV3X2xvYWRfdXJpKHZpZXcsICJodHRwOi8vdGhpcy5ob3N0LmRvZXMubm90LmV4aXN0
L2RvaXJlYWxseWV4aXN0Lmh0bWwiKTsKLQotICAgIHdhaXRUaW1lciA9IGdfdGltZW91dF9hZGRf
c2Vjb25kcyhkZWZhdWx0VGltZW91dCwgKEdTb3VyY2VGdW5jKXdhaXRfdGltZXJfZmlyZWQsIGxv
b3ApOwotCi0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAgaWYgKHdhaXRUaW1lcikK
LSAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKHdhaXRUaW1lcik7Ci0KLSAgICB3YWl0VGltZXIgPSAw
OwotCi0gICAgZ19tYWluX2xvb3BfdW5yZWYobG9vcCk7Ci0gICAgZ19vYmplY3RfdW5yZWYodmll
dyk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKLXsKLSAgICBndGtfdGVz
dF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBz
Oi8vYnVncy53ZWJraXQub3JnLyIpOwotICAgIGdfdGVzdF9idWcoIjI0NzU4Iik7Ci0gICAgZ190
ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYmRhdGFzb3VyY2UvZ2V0X2luaXRpYWxfcmVxdWVzdCIs
Ci0gICAgICAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfaW5p
dGlhbF9yZXF1ZXN0KTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2ViZGF0YXNvdXJj
ZS9hcGkiLAotICAgICAgICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF93ZWJfZGF0YV9zb3VyY2Up
OwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJkYXRhc291cmNlL3VucmVhY2hhYmxl
X3VyaSIsCi0gICAgICAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X3dlYl9kYXRhX3NvdXJjZV91
bnJlYWNoYWJsZV91cmkpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJkYXRhc291
cmNlL2xpZmV0aW1lIiwKLSAgICAgICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfd2ViX2RhdGFf
c291cmNlX2xpZmV0aW1lKTsKLQotICAgIHJldHVybiBnX3Rlc3RfcnVuICgpOwotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYmZyYW1lLmMgYi9Tb3VyY2UvV2Vi
S2l0L2d0ay90ZXN0cy90ZXN0d2ViZnJhbWUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMTEzMTg3My4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2Vi
ZnJhbWUuYworKysgL2Rldi9udWxsCkBAIC0xLDIyMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgQ29sbGFib3JhIEx0ZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgPGVycm5vLmg+
Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGdsaWIv
Z3N0ZGlvLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQu
aD4KLQotc3RhdGljIGludCBudW1iZXJPZkZyYW1lc0NyZWF0ZWQgPSAwOwotCi1zdGF0aWMgdm9p
ZCBjcmVhdGVGcmFtZVNpZ25hbFRlc3RGcmFtZUNyZWF0ZWRDYWxsYmFjayhXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3LCBXZWJLaXRXZWJGcmFtZSogZnJhbWUsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAg
bnVtYmVyT2ZGcmFtZXNDcmVhdGVkKys7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBjcmVhdGVGcmFt
ZVNpZ25hbFRlc3RUaW1lb3V0KGdwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19hc3NlcnRfY21waW50
KG51bWJlck9mRnJhbWVzQ3JlYXRlZCwgPT0sIDIpOwotICAgIGdfbWFpbl9sb29wX3F1aXQoKEdN
YWluTG9vcCopIGRhdGEpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQgdGVz
dF93ZWJraXRfd2ViX2ZyYW1lX2NyZWF0ZWRfc2lnbmFsKHZvaWQpCi17Ci0gICAgR3RrV2lkZ2V0
KiB3ZWJWaWV3OwotICAgIEd0a1dpZGdldCogd2luZG93OwotICAgIEdNYWluTG9vcCogbG9vcCA9
IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLQotICAgIHdpbmRvdyA9IGd0a193aW5kb3df
bmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOwotCi0gICAgd2ViVmlldyA9IHdlYmtpdF93ZWJfdmll
d19uZXcoKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJmcmFtZS1jcmVhdGVkIiwg
R19DQUxMQkFDSyhjcmVhdGVGcmFtZVNpZ25hbFRlc3RGcmFtZUNyZWF0ZWRDYWxsYmFjayksIGxv
b3ApOwotCi0gICAgLy8gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCBleGFjdGx5IHR3byBjcmVhdGUt
ZnJhbWUgc2lnbmFscyBhcmUKLSAgICAvLyBmaXJlZCBhbmQgbm8gbW9yZSwgc28gd2Ugc2V0IGEg
dGltZW91dCBoZXJlLiBUaGVyZSBkb2VzIG5vdCBhcHBlYXIKLSAgICAvLyB0byBiZSBhIHNpbXBs
ZSB3YXkgdmlhIHRoZSBBUEkgdG8gZmlndXJlIG91dCB3aGVuIGFsbCBmcmFtZXMgaGF2ZQotICAg
IC8vIGxvYWRlZC4KLSAgICBnX3RpbWVvdXRfYWRkKDUwMCwgY3JlYXRlRnJhbWVTaWduYWxUZXN0
VGltZW91dCwgbG9vcCk7Ci0KLSAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdp
bmRvdyksIHdlYlZpZXcpOwotICAgIGd0a193aWRnZXRfc2hvdyh3aW5kb3cpOwotICAgIGd0a193
aWRnZXRfc2hvdyh3ZWJWaWV3KTsKLQotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhX
RUJLSVRfV0VCX1ZJRVcod2ViVmlldyksCi0gICAgICAgICI8aHRtbD48Ym9keT5GcmFtZXMhIgot
ICAgICAgICAiPGlmcmFtZT48L2lmcmFtZT4iCi0gICAgICAgICI8aWZyYW1lPjwvaWZyYW1lPiIK
LSAgICAgICAgIjwvYm9keT48L2h0bWw+IiwKLSAgICAgICAgInRleHQvaHRtbCIsICJ1dGYtOCIs
ICJmaWxlOi8vIik7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotfQotCi1zdGF0aWMgdm9p
ZCB0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfY3JlYXRlX2Rlc3Ryb3kodm9pZCkKLXsKLSAgICBHdGtX
aWRnZXQgKndlYlZpZXc7Ci0gICAgR3RrV2lkZ2V0ICp3aW5kb3c7Ci0KLSAgICBnX3Rlc3RfYnVn
KCIyMTgzNyIpOwotICAgIHdlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7Ci0gICAgZ19v
YmplY3RfcmVmX3Npbmsod2ViVmlldyk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKHdl
YlZpZXcpLT5yZWZfY291bnQsID09LCAxKTsKLSAgICAvLyBUaGlzIGNyYXNoZWQgd2l0aCB0aGUg
b3JpZ2luYWwgdmVyc2lvbgotICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwotCi0gICAgZ190
ZXN0X2J1ZygiMjUwNDIiKTsKLSAgICB3aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9X
X1RPUExFVkVMKTsKLSAgICB3ZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygpOwotICAgIGd0
a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgd2ViVmlldyk7Ci0gICAgZ3Rr
X3dpZGdldF9zaG93KHdpbmRvdyk7Ci0gICAgZ3RrX3dpZGdldF9zaG93KHdlYlZpZXcpOwotICAg
IGd0a193aWRnZXRfZGVzdHJveSh3ZWJWaWV3KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJr
aXRfd2ViX2ZyYW1lX2xpZmV0aW1lKHZvaWQpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmll
dzsKLSAgICBXZWJLaXRXZWJGcmFtZSogd2ViRnJhbWU7Ci0gICAgZ190ZXN0X2J1ZygiMjE4Mzci
KTsKLQotICAgIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygp
KTsKLSAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
R19PQkpFQ1Qod2ViVmlldyktPnJlZl9jb3VudCwgPT0sIDEpOwotICAgIHdlYkZyYW1lID0gd2Vi
a2l0X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKHdlYlZpZXcpOwotICAgIGdfYXNzZXJ0X2NtcGlu
dChHX09CSkVDVCh3ZWJGcmFtZSktPnJlZl9jb3VudCwgPT0sIDEpOwotCi0gICAgLy8gQWRkIGR1
bW15IHJlZmVyZW5jZSBvbiB0aGUgV2ViS2l0V2ViRnJhbWUgdG8ga2VlcCBpdCBhbGl2ZQotICAg
IGdfb2JqZWN0X3JlZih3ZWJGcmFtZSk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKHdl
YkZyYW1lKS0+cmVmX2NvdW50LCA9PSwgMik7Ci0KLSAgICAvLyBUaGlzIGNyYXNoZWQgd2l0aCB0
aGUgb3JpZ2luYWwgdmVyc2lvbgotICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwotCi0gICAg
Ly8gTWFrZSBzdXJlIHRoYXQgdGhlIGZyYW1lIGdvdCBkZWxldGVkIGFzIHdlbGwuIFdlIGRpZCB0
aGlzCi0gICAgLy8gYnkgYWRkaW5nIGFuIGV4dHJhIHJlZiBvbiB0aGUgV2ViS2l0V2ViRnJhbWUg
YW5kIHdlIHNob3VsZAotICAgIC8vIGJlIHRoZSBvbmUgaG9sZGluZyB0aGUgbGFzdCByZWZlcmVu
Y2UuCi0gICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKHdlYkZyYW1lKS0+cmVmX2NvdW50LCA9
PSwgMSk7Ci0gICAgZ19vYmplY3RfdW5yZWYod2ViRnJhbWUpOwotfQotCi1zdGF0aWMgZ2Jvb2xl
YW4gcHJpbnRfcmVxdWVzdGVkX2NiKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFdlYkZy
YW1lKiB3ZWJGcmFtZSwgR01haW5Mb29wKiBsb29wKQotewotICAgIGdfb2JqZWN0X3NldF9kYXRh
KEdfT0JKRUNUKHdlYlZpZXcpLCAic2lnbmFsLWhhbmRsZWQiLCBHSU5UX1RPX1BPSU5URVIoVFJV
RSkpOwotICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0K
LXN0YXRpYyB2b2lkIHByaW50X3RpbWVvdXQoR01haW5Mb29wKiBsb29wKQotewotICAgIGlmIChn
X21haW5fbG9vcF9pc19ydW5uaW5nKGxvb3ApKQotICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxv
b3ApOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfcHJpbnRpbmcodm9p
ZCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OwotCi0gICAgd2ViVmlldyA9IFdFQktJ
VF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5r
KHdlYlZpZXcpOwotICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVCh3ZWJWaWV3KS0+cmVmX2Nv
dW50LCA9PSwgMSk7Ci0KLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxodG1sPjxib2R5PjxoMT5XZWJLaXRH
VEsrITwvaDE+PC9ib2R5PjwvaHRtbD4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAidGV4dC9odG1sIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInV0Zi04IiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGU6Ly8iKTsKLQotICAgIEdNYWlu
TG9vcCogbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLQotICAgIC8vIERvZXMg
amF2YXNjcmlwdCBwcmludCgpIHdvcmsgY29ycmVjdGx5PwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
d2ViVmlldywgInByaW50LXJlcXVlc3RlZCIsCi0gICAgICAgICAgICAgICAgICAgICBHX0NBTExC
QUNLKHByaW50X3JlcXVlc3RlZF9jYiksCi0gICAgICAgICAgICAgICAgICAgICBsb29wKTsKLQot
ICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKHdlYlZpZXcpLCAic2lnbmFsLWhhbmRsZWQi
LCBHSU5UX1RPX1BPSU5URVIoRkFMU0UpKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfZXhlY3V0ZV9z
Y3JpcHQgKHdlYlZpZXcsICJwcmludCgpOyIpOwotCi0gICAgLy8gR2l2ZSBqYXZhc2NyaXB0Y29y
ZSBzb21lIHRpbWUgdG8gcHJvY2VzcyB0aGUgcHJpbnQgcmVxdWVzdCwgYnV0Ci0gICAgLy8gcHJl
cGFyZSBhIHRpbWVvdXQgdG8gYXZvaWQgaXQgcnVubmluZyBmb3JldmVyIGluIGNhc2UgdGhlIHNp
Z25hbCBpcwotICAgIC8vIG5ldmVyIGVtaXR0ZWQuCi0gICAgZ190aW1lb3V0X2FkZCgxMDAwLCAo
R1NvdXJjZUZ1bmMpcHJpbnRfdGltZW91dCwgbG9vcCk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGxv
b3ApOwotCi0gICAgZ19hc3NlcnRfY21waW50KEdQT0lOVEVSX1RPX0lOVChnX29iamVjdF9nZXRf
ZGF0YShHX09CSkVDVCh3ZWJWaWV3KSwgInNpZ25hbC1oYW5kbGVkIikpLCA9PSwgVFJVRSk7Ci0K
LSAgICAvLyBEb2VzIHByaW50aW5nIGRpcmVjdGx5IHRvIGEgZmlsZT8KLSAgICBHRXJyb3IgKmVy
cm9yID0gTlVMTDsKLSAgICBnY2hhciogdGVtcG9yYXJ5RmlsZW5hbWUgPSBOVUxMOwotICAgIGdp
bnQgZmQgPSBnX2ZpbGVfb3Blbl90bXAgKCJ3ZWJraXQtdGVzdHdlYmZyYW1lLVhYWFhYWCIsICZ0
ZW1wb3JhcnlGaWxlbmFtZSwgJmVycm9yKTsKLSAgICBjbG9zZShmZCk7Ci0KLSAgICBpZiAoZXJy
b3IpIHsKLSAgICAgICAgZ19jcml0aWNhbCgiRmFpbGVkIHRvIG9wZW4gYSB0ZW1wb3JhcnkgZmls
ZSBmb3Igd3JpdGluZzogJXMuIiwgZXJyb3ItPm1lc3NhZ2UpOwotICAgICAgICBnX2Vycm9yX2Zy
ZWUoZXJyb3IpOwotICAgICAgICBnb3RvIGNsZWFudXA7Ci0gICAgfQotCi0gICAgLy8gV2UgZGVs
ZXRlIHRoZSBmaWxlLCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgZmlndXJlIG91dCB0aGF0IHRoZQot
ICAgIC8vIGZpbGUgZ290IHByaW50ZWQ7Ci0gICAgaWYgKGdfdW5saW5rKHRlbXBvcmFyeUZpbGVu
YW1lKSA9PSAtMSkgewotICAgICAgICBnX3dhcm5pbmcoIkZhaWxlZCB0byBkZWxldGUgdGhlIHRl
bXBvcmFyeSBmaWxlOiAlcy5cblRoaXMgbWF5IGNhdXNlIHRoZSB0ZXN0IHRvIGJlIGJvZ3VzLiIs
IGdfc3RyZXJyb3IoZXJybm8pKTsKLSAgICB9Ci0KLSAgICBXZWJLaXRXZWJGcmFtZSogd2ViRnJh
bWUgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUod2ViVmlldyk7Ci0gICAgR3RrUHJp
bnRPcGVyYXRpb24qIG9wZXJhdGlvbiA9IGd0a19wcmludF9vcGVyYXRpb25fbmV3KCk7Ci0gICAg
R3RrUHJpbnRPcGVyYXRpb25BY3Rpb24gYWN0aW9uID0gR1RLX1BSSU5UX09QRVJBVElPTl9BQ1RJ
T05fRVhQT1JUOwotICAgIEd0a1ByaW50T3BlcmF0aW9uUmVzdWx0IHJlc3VsdDsKLQotICAgIGd0
a19wcmludF9vcGVyYXRpb25fc2V0X2V4cG9ydF9maWxlbmFtZShvcGVyYXRpb24sIHRlbXBvcmFy
eUZpbGVuYW1lKTsKLSAgICByZXN1bHQgPSB3ZWJraXRfd2ViX2ZyYW1lX3ByaW50X2Z1bGwgKHdl
YkZyYW1lLCBvcGVyYXRpb24sIGFjdGlvbiwgTlVMTCk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQo
cmVzdWx0LCA9PSwgR1RLX1BSSU5UX09QRVJBVElPTl9SRVNVTFRfQVBQTFkpOwotICAgIGdfYXNz
ZXJ0X2NtcGludChnX2ZpbGVfdGVzdCh0ZW1wb3JhcnlGaWxlbmFtZSwgR19GSUxFX1RFU1RfSVNf
UkVHVUxBUiksID09LCBUUlVFKTsKLQotICAgIGdfdW5saW5rKHRlbXBvcmFyeUZpbGVuYW1lKTsK
LSAgICBnX29iamVjdF91bnJlZihvcGVyYXRpb24pOwotY2xlYW51cDoKLSAgICBnX29iamVjdF91
bnJlZih3ZWJWaWV3KTsKLSAgICBnX2ZyZWUodGVtcG9yYXJ5RmlsZW5hbWUpOwotfQotCi1zdGF0
aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfcmVzcG9uc2UoKQotewotICAgIFdlYktpdFdl
YkZyYW1lKiBmcmFtZSA9IGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfRlJBTUUsIE5VTEwp
OwotICAgIFdlYktpdE5ldHdvcmtSZXNwb25zZSogcmVzcG9uc2UgPSB3ZWJraXRfd2ViX2ZyYW1l
X2dldF9uZXR3b3JrX3Jlc3BvbnNlKGZyYW1lKTsKLSAgICBnX2Fzc2VydCghcmVzcG9uc2UpOwot
ICAgIGdfb2JqZWN0X3VucmVmKGZyYW1lKTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIq
KiBhcmd2KQotewotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLQotICAg
IGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0gICAgZ190ZXN0
X2FkZF9mdW5jKCIvd2Via2l0L3dlYnZpZXcvY3JlYXRlX2Rlc3Ryb3kiLCB0ZXN0X3dlYmtpdF93
ZWJfZnJhbWVfY3JlYXRlX2Rlc3Ryb3kpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93
ZWJ2aWV3L2ZyYW1lLWNyZWF0ZWRfc2lnbmFsIiwgdGVzdF93ZWJraXRfd2ViX2ZyYW1lX2NyZWF0
ZWRfc2lnbmFsKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2ViZnJhbWUvbGlmZXRp
bWUiLCB0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfbGlmZXRpbWUpOwotICAgIGdfdGVzdF9hZGRfZnVu
YygiL3dlYmtpdC93ZWJ2aWV3L3ByaW50aW5nIiwgdGVzdF93ZWJraXRfd2ViX2ZyYW1lX3ByaW50
aW5nKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vidmlldy9yZXNwb25zZSIsIHRl
c3Rfd2Via2l0X3dlYl9mcmFtZV9yZXNwb25zZSk7Ci0gICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2ViaGlzdG9yeWl0
ZW0uYyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJoaXN0b3J5aXRlbS5jCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmUxOTFjLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJoaXN0b3J5aXRlbS5jCisrKyAvZGV2L251bGwKQEAgLTEs
NzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4gTWljaGFlbCBBbG9uem8K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxndGsvZ3Rr
Lmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAg
V2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGl0ZW07Ci19IFdlYkhpc3RvcnlJdGVtRml4dHVyZTsKLQot
c3RhdGljIHZvaWQgd2ViX2hpc3RvcnlfaXRlbV9maXh0dXJlX3NldHVwKFdlYkhpc3RvcnlJdGVt
Rml4dHVyZSogZml4dHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZml4dHVyZS0+aXRlbSA9IHdlYmtpdF93
ZWJfaGlzdG9yeV9pdGVtX25ld193aXRoX2RhdGEoImh0dHA6Ly9leGFtcGxlLmNvbS8iLCAiRXhh
bXBsZTEiKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoZml4dHVyZS0+aXRlbSktPnJl
Zl9jb3VudCwgPT0gLCAxKTsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT5pdGVtICE9IE5VTEwpOwot
fQotCi1zdGF0aWMgdm9pZCB3ZWJfaGlzdG9yeV9pdGVtX2ZpeHR1cmVfdGVhcmRvd24oV2ViSGlz
dG9yeUl0ZW1GaXh0dXJlKiBmaXh0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBnX2Fzc2VydChmaXh0
dXJlLT5pdGVtICE9IE5VTEwpOwotICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChmaXh0dXJl
LT5pdGVtKS0+cmVmX2NvdW50LCA9PSwgMSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0
X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X2RhdGEoV2ViSGlzdG9yeUl0ZW1GaXh0dXJlKiBmaXh0dXJl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY29u
c3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9y
eV9pdGVtX2dldF90aXRsZShmaXh0dXJlLT5pdGVtKSwgPT0sICJFeGFtcGxlMSIpOwotICAgIGdf
YXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdXJpKGZpeHR1cmUtPml0
ZW0pLCA9PSwgImh0dHA6Ly9leGFtcGxlLmNvbS8iKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93
ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9hbHRlcm5hdGVfdGl0bGUoV2ViSGlzdG9yeUl0ZW1GaXh0
dXJlKiBmaXh0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIHdlYmtpdF93ZWJfaGlz
dG9yeV9pdGVtX3NldF9hbHRlcm5hdGVfdGl0bGUoZml4dHVyZS0+aXRlbSwgIkFsdGVybmF0ZSB0
aXRsZSIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRf
YWx0ZXJuYXRlX3RpdGxlKGZpeHR1cmUtPml0ZW0pLCA9PSwgIkFsdGVybmF0ZSB0aXRsZSIpOwot
fQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCi17Ci0gICAgZ3RrX3Rlc3RfaW5p
dCgmYXJnYywgJmFyZ3YsIE5VTEwpOwotCi0gICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy8iKTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L3dlYmhpc3RvcnlpdGVt
L2dldF9kYXRhIiwKLSAgICAgICAgICAgICAgIFdlYkhpc3RvcnlJdGVtRml4dHVyZSwgMCwgd2Vi
X2hpc3RvcnlfaXRlbV9maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF93ZWJraXRf
d2ViX2hpc3RvcnlfaXRlbV9nZXRfZGF0YSwgd2ViX2hpc3RvcnlfaXRlbV9maXh0dXJlX3RlYXJk
b3duKTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L3dlYmhpc3RvcnlpdGVtL2FsdGVybmF0ZV90
aXRsZSIsCi0gICAgICAgICAgICAgICBXZWJIaXN0b3J5SXRlbUZpeHR1cmUsIDAsIHdlYl9oaXN0
b3J5X2l0ZW1fZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X3dlYl9o
aXN0b3J5X2l0ZW1fYWx0ZXJuYXRlX3RpdGxlLCB3ZWJfaGlzdG9yeV9pdGVtX2ZpeHR1cmVfdGVh
cmRvd24pOwotICAgIHJldHVybiBnX3Rlc3RfcnVuICgpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYmluc3BlY3Rvci5jIGIvU291cmNlL1dlYktpdC9ndGsv
dGVzdHMvdGVzdHdlYmluc3BlY3Rvci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBh
NzQzODJmLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJpbnNw
ZWN0b3IuYworKysgL2Rldi9udWxsCkBAIC0xLDE3MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEyIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSA8Z25zQGdub21lLm9yZz4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgInRlc3RfdXRpbHMuaCIKLQotI2luY2x1ZGUgPHN0cmluZy5o
PgotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d2Vi
a2l0L3dlYmtpdC5oPgotCi1HTWFpbkxvb3AgKmxvb3A7Ci1HdGtXaWRnZXQgKndpbmRvdzsKLQot
c3RhdGljIGdib29sZWFuIHF1aXRMb29wKGdwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19tYWluX2xv
b3BfcXVpdChsb29wKTsKLSAgICByZXR1cm4gVFJVRTsKLX0KLQotLyogSWdub3JlIHNpbXBsZSB0
cmFuc2xhdGlvbi1yZWxhdGVkIG1lc3NhZ2VzIGFuZCB1cGdyYWRlIG90aGVyCi0gKiBtZXNzYWdl
cyB0byB3YXJuaW5ncy4KLSAqLwotc3RhdGljIGdib29sZWFuIGNvbnNvbGVNZXNzYWdlQ2FsbGJh
Y2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgY29uc3QgY2hhciogbWVzc2FnZSwgdW5zaWduZWQg
aW50IGxpbmUsIGNvbnN0IGNoYXIqIHNvdXJjZUlkKQotewotICAgIGlmIChzdHJzdHIobWVzc2Fn
ZSwgIkxvY2FsaXplZCBzdHJpbmciKSB8fCBzdHJzdHIobWVzc2FnZSwgIlByb3RvY29sIEVycm9y
OiB0aGUgbWVzc2FnZSBpcyBmb3Igbm9uLWV4aXN0aW5nIGRvbWFpbiAnUHJvZmlsZXInIikgfHwK
LSAgICAgICAgc3Ryc3RyKG1lc3NhZ2UsICJEaWRuJ3QgZmluZCBhIFRyZWVFbGVtZW50IGZvciBh
IHJlcHJlc2VudGVkT2JqZWN0IikpCi0gICAgICAgIHJldHVybiBUUlVFOwotCi0gICAgZ193YXJu
aW5nKCJDb25zb2xlOiAlcyBAJWQ6ICVzXG4iLCBzb3VyY2VJZCwgbGluZSwgbWVzc2FnZSk7Ci0g
ICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBXZWJLaXRXZWJWaWV3KiBpbnNwZWN0RWxlbWVu
dENhbGxiYWNrKFdlYktpdFdlYkluc3BlY3RvciAqaW5zcGVjdG9yLCBXZWJLaXRXZWJWaWV3ICpp
bnNwZWN0ZWRXZWJWaWV3LCBpbnQgKnRpbWVzRWxlbWVudEluc3BlY3RlZCkKLXsKLSAgICAqdGlt
ZXNFbGVtZW50SW5zcGVjdGVkID0gKnRpbWVzRWxlbWVudEluc3BlY3RlZCArIDE7Ci0KLSAgICB3
aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKLQotICAgIEd0a1dp
ZGdldCAqbmV3V2ViVmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKLSAgICBndGtfY29udGFp
bmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIG5ld1dlYlZpZXcpOwotCi0gICAgZ19zaWdu
YWxfY29ubmVjdChuZXdXZWJWaWV3LCAiY29uc29sZS1tZXNzYWdlIiwKLSAgICAgICAgICAgICAg
ICAgICAgIEdfQ0FMTEJBQ0soY29uc29sZU1lc3NhZ2VDYWxsYmFjayksIE5VTEwpOwotCi0gICAg
cmV0dXJuIFdFQktJVF9XRUJfVklFVyhuZXdXZWJWaWV3KTsKLX0KLQotc3RhdGljIGdib29sZWFu
IGNsb3NlSW5zcGVjdG9yKFdlYktpdFdlYkluc3BlY3RvciAqaW5zcGVjdG9yLCBpbnQgKnRpbWVz
Q2xvc2VkKQotewotICAgICp0aW1lc0Nsb3NlZCA9ICp0aW1lc0Nsb3NlZCArIDE7Ci0KLSAgICBn
dGtfd2lkZ2V0X2Rlc3Ryb3kod2luZG93KTsKLSAgICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGlj
IGdib29sZWFuIHNob3dJbnNwZWN0b3IoV2ViS2l0V2ViSW5zcGVjdG9yICppbnNwZWN0b3IsIGdw
b2ludGVyIGRhdGEpCi17Ci0gICAgZ19pZGxlX2FkZChxdWl0TG9vcCwgTlVMTCk7Ci0gICAgcmV0
dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkIGxvYWRGaW5pc2hlZChXZWJLaXRXZWJWaWV3ICp3
ZWJWaWV3LCBXZWJLaXRXZWJGcmFtZSAqZnJhbWUsIGdib29sZWFuICppc0xvYWRGaW5pc2hlZCkK
LXsKLSAgICAqaXNMb2FkRmluaXNoZWQgPSBUUlVFOwotICAgIGlmIChnX21haW5fbG9vcF9pc19y
dW5uaW5nKGxvb3ApKQotICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwotfQotCi1zdGF0
aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfaW5zcGVjdG9yX2Nsb3NlX2FuZF9pbnNwZWN0KCkKLXsK
LSAgICBXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJf
dmlld19uZXcoKSk7Ci0gICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLQot
ICAgIGdib29sZWFuIGlzTG9hZEZpbmlzaGVkID0gRkFMU0U7Ci0gICAgZ19zaWduYWxfY29ubmVj
dCh3ZWJWaWV3LCAibG9hZC1maW5pc2hlZCIsIEdfQ0FMTEJBQ0sobG9hZEZpbmlzaGVkKSwgJmlz
TG9hZEZpbmlzaGVkKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxodG1sPjxib2R5PjxwPndvb2hvbzwv
cD48L2JvZHk+PC9odG1sPiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXh0
L2h0bWwiLCAiVVRGLTgiLCAiZmlsZTovLyIpOwotICAgIGlmICghaXNMb2FkRmluaXNoZWQpCi0g
ICAgICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLQotICAgIGdfb2JqZWN0X3NldCh3ZWJraXRf
d2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdlYlZpZXcpLCAiZW5hYmxlLWRldmVsb3Blci1leHRyYXMi
LCBUUlVFLCBOVUxMKTsKLSAgICBXZWJLaXRXZWJJbnNwZWN0b3IgKmluc3BlY3RvciA9IHdlYmtp
dF93ZWJfdmlld19nZXRfaW5zcGVjdG9yKHdlYlZpZXcpOwotCi0gICAgaW50IHRpbWVzRWxlbWVu
dEluc3BlY3RlZCA9IDA7Ci0gICAgaW50IHRpbWVzQ2xvc2VkID0gMDsKLSAgICBnX29iamVjdF9j
b25uZWN0KGluc3BlY3RvciwKLSAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6Omluc3BlY3Qt
d2ViLXZpZXciLCBHX0NBTExCQUNLKGluc3BlY3RFbGVtZW50Q2FsbGJhY2spLCAmdGltZXNFbGVt
ZW50SW5zcGVjdGVkLAotICAgICAgICAgICAgICAgICAgICAgInNpZ25hbDo6c2hvdy13aW5kb3ci
LCBHX0NBTExCQUNLKHNob3dJbnNwZWN0b3IpLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAg
InNpZ25hbDo6Y2xvc2Utd2luZG93IiwgR19DQUxMQkFDSyhjbG9zZUluc3BlY3RvciksICZ0aW1l
c0Nsb3NlZCwKLSAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotCi0gICAgd2Via2l0X3dlYl9p
bnNwZWN0b3JfaW5zcGVjdF9jb29yZGluYXRlcyhpbnNwZWN0b3IsIDAuMCwgMC4wKTsKLSAgICBn
X2Fzc2VydF9jbXBpbnQodGltZXNFbGVtZW50SW5zcGVjdGVkLCA9PSwgMSk7Ci0KLSAgICBnX21h
aW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICB3ZWJraXRfd2ViX2luc3BlY3Rvcl9jbG9zZShpbnNw
ZWN0b3IpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0aW1lc0Nsb3NlZCwgPT0sIDEpOwotCi0gICAg
d2Via2l0X3dlYl9pbnNwZWN0b3JfaW5zcGVjdF9jb29yZGluYXRlcyhpbnNwZWN0b3IsIDAuMCwg
MC4wKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGltZXNFbGVtZW50SW5zcGVjdGVkLCA9PSwgMik7
Ci0KLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICBndGtfd2lkZ2V0X2Rlc3Ryb3ko
R1RLX1dJREdFVCh3ZWJWaWV3KSk7Ci0gICAgZ19hc3NlcnRfY21waW50KHRpbWVzQ2xvc2VkLCA9
PSwgMik7Ci0KLSAgICBnX21haW5fbG9vcF91bnJlZihsb29wKTsKLX0KLQotc3RhdGljIHZvaWQg
dGVzdF93ZWJraXRfd2ViX2luc3BlY3Rvcl9kZXN0cm95X2luc3BlY3RlZF93ZWJfdmlldygpCi17
Ci0gICAgV2ViS2l0V2ViVmlldyAqd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2Vi
X3ZpZXdfbmV3KCkpOwotICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7Ci0K
LSAgICBnYm9vbGVhbiBpc0xvYWRGaW5pc2hlZCA9IEZBTFNFOwotICAgIGdfc2lnbmFsX2Nvbm5l
Y3Qod2ViVmlldywgImxvYWQtZmluaXNoZWQiLCBHX0NBTExCQUNLKGxvYWRGaW5pc2hlZCksICZp
c0xvYWRGaW5pc2hlZCk7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8aHRtbD48Ym9keT48cD53b29ob288
L3A+PC9ib2R5PjwvaHRtbD4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGV4
dC9odG1sIiwgIlVURi04IiwgImZpbGU6Ly8iKTsKLSAgICBpZiAoIWlzTG9hZEZpbmlzaGVkKQot
ICAgICAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICBnX29iamVjdF9zZXQod2Via2l0
X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3KSwgImVuYWJsZS1kZXZlbG9wZXItZXh0cmFz
IiwgVFJVRSwgTlVMTCk7Ci0gICAgV2ViS2l0V2ViSW5zcGVjdG9yICppbnNwZWN0b3IgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X2luc3BlY3Rvcih3ZWJWaWV3KTsKLQotICAgIGludCB0aW1lc0VsZW1l
bnRJbnNwZWN0ZWQgPSAwOwotICAgIGludCB0aW1lc0Nsb3NlZCA9IDA7Ci0gICAgZ19vYmplY3Rf
Y29ubmVjdChpbnNwZWN0b3IsCi0gICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjppbnNwZWN0
LXdlYi12aWV3IiwgR19DQUxMQkFDSyhpbnNwZWN0RWxlbWVudENhbGxiYWNrKSwgJnRpbWVzRWxl
bWVudEluc3BlY3RlZCwKLSAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6OnNob3ctd2luZG93
IiwgR19DQUxMQkFDSyhzaG93SW5zcGVjdG9yKSwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAg
ICJzaWduYWw6OmNsb3NlLXdpbmRvdyIsIEdfQ0FMTEJBQ0soY2xvc2VJbnNwZWN0b3IpLCAmdGlt
ZXNDbG9zZWQsCi0gICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLQotICAgIHdlYmtpdF93ZWJf
aW5zcGVjdG9yX2luc3BlY3RfY29vcmRpbmF0ZXMoaW5zcGVjdG9yLCAwLjAsIDAuMCk7Ci0gICAg
Z19hc3NlcnRfY21waW50KHRpbWVzRWxlbWVudEluc3BlY3RlZCwgPT0sIDEpOwotCi0gICAgZ19t
YWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAgZ3RrX3dpZGdldF9kZXN0cm95KEdUS19XSURHRVQo
d2ViVmlldykpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0aW1lc0Nsb3NlZCwgPT0sIDEpOwotCi0g
ICAgZ19tYWluX2xvb3BfdW5yZWYobG9vcCk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFy
KiogYXJndikKLXsKLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAg
ICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwotICAgIGdfdGVz
dF9hZGRfZnVuYygiL3dlYmtpdC93ZWJpbnNwZWN0b3IvZGVzdHJveS1pbnNwZWN0ZWQtd2ViLXZp
ZXciLCB0ZXN0X3dlYmtpdF93ZWJfaW5zcGVjdG9yX2Rlc3Ryb3lfaW5zcGVjdGVkX3dlYl92aWV3
KTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2ViaW5zcGVjdG9yL2Nsb3NlLWFuZC1p
bnNwZWN0IiwgdGVzdF93ZWJraXRfd2ViX2luc3BlY3Rvcl9jbG9zZV9hbmRfaW5zcGVjdCk7Ci0K
LSAgICByZXR1cm4gZ190ZXN0X3J1bigpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9n
dGsvdGVzdHMvdGVzdHdlYnBsdWdpbmRhdGFiYXNlLmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0
cy90ZXN0d2VicGx1Z2luZGF0YWJhc2UuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NjUyODExYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2VicGx1
Z2luZGF0YWJhc2UuYworKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
PGVycm5vLmg+Ci0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0j
aW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KLQotLyogVGhp
cyBmdW5jdGlvbiBpcyBub3QgcHVibGljLCBzbyB3ZSBuZWVkIGFuIGV4dGVybiBkZWNsYXJhdGlv
biAqLwotZXh0ZXJuIHZvaWQgd2Via2l0X3dlYl9zZXR0aW5nc19hZGRfZXh0cmFfcGx1Z2luX2Rp
cmVjdG9yeShXZWJLaXRXZWJWaWV3KiB2aWV3LCBjb25zdCBnY2hhciogZGlyZWN0b3J5KTsKLQot
c3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3BsdWdpbl9kYXRhYmFzZV9nZXRfcGx1Z2lucygp
Ci17Ci0gICAgV2ViS2l0V2ViVmlldyogdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2Vi
X3ZpZXdfbmV3KCkpOwotICAgIFdlYktpdFdlYlBsdWdpbkRhdGFiYXNlKiBkYXRhYmFzZTsKLSAg
ICBHU0xpc3QqIHBsdWdpbkxpc3QsICpwOwotICAgIGdib29sZWFuIGZvdW5kID0gRkFMU0U7Ci0g
ICAgZ2Jvb2xlYW4gZW5hYmxlZCA9IEZBTFNFOwotCi0gICAgd2Via2l0X3dlYl9zZXR0aW5nc19h
ZGRfZXh0cmFfcGx1Z2luX2RpcmVjdG9yeSh2aWV3LCBURVNUX1BMVUdJTl9ESVIpOwotICAgIGdf
b2JqZWN0X3JlZl9zaW5rKEdfT0JKRUNUKHZpZXcpKTsKLQotICAgIGRhdGFiYXNlID0gd2Via2l0
X2dldF93ZWJfcGx1Z2luX2RhdGFiYXNlKCk7Ci0gICAgcGx1Z2luTGlzdCA9IHdlYmtpdF93ZWJf
cGx1Z2luX2RhdGFiYXNlX2dldF9wbHVnaW5zKGRhdGFiYXNlKTsKLSAgICBmb3IgKHAgPSBwbHVn
aW5MaXN0OyBwOyBwID0gcC0+bmV4dCkgewotICAgICAgICBXZWJLaXRXZWJQbHVnaW4qIHBsdWdp
biA9IChXZWJLaXRXZWJQbHVnaW4qKXAtPmRhdGE7Ci0gICAgICAgIGlmICghZ19zdHJjbXAwKHdl
YmtpdF93ZWJfcGx1Z2luX2dldF9uYW1lKHBsdWdpbiksICJXZWJLaXQgVGVzdCBQbHVnSW4iKSAm
JgotICAgICAgICAgICAgIWdfc3RyY21wMCh3ZWJraXRfd2ViX3BsdWdpbl9nZXRfZGVzY3JpcHRp
b24ocGx1Z2luKSwgIlNpbXBsZSBOZXRzY2FwZcKuIHBsdWctaW4gdGhhdCBoYW5kbGVzIHRlc3Qg
Y29udGVudCBmb3IgV2ViS2l0IikpIHsKLSAgICAgICAgICAgIGZvdW5kID0gVFJVRTsKLSAgICAg
ICAgICAgIGVuYWJsZWQgPSB3ZWJraXRfd2ViX3BsdWdpbl9nZXRfZW5hYmxlZChwbHVnaW4pOwot
ICAgICAgICAgICAgd2Via2l0X3dlYl9wbHVnaW5fc2V0X2VuYWJsZWQocGx1Z2luLCBGQUxTRSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgd2Via2l0X3dlYl9wbHVnaW5fZGF0YWJhc2VfcGx1Z2lu
c19saXN0X2ZyZWUocGx1Z2luTGlzdCk7Ci0gICAgZ19hc3NlcnQoZm91bmQpOwotICAgIGdfYXNz
ZXJ0KGVuYWJsZWQpOwotCi0gICAgd2Via2l0X3dlYl9wbHVnaW5fZGF0YWJhc2VfcmVmcmVzaChk
YXRhYmFzZSk7Ci0gICAgcGx1Z2luTGlzdCA9IHdlYmtpdF93ZWJfcGx1Z2luX2RhdGFiYXNlX2dl
dF9wbHVnaW5zKGRhdGFiYXNlKTsKLQotICAgIGZvciAocCA9IHBsdWdpbkxpc3Q7IHA7IHAgPSBw
LT5uZXh0KSB7Ci0gICAgICAgIFdlYktpdFdlYlBsdWdpbiogcGx1Z2luID0gKFdlYktpdFdlYlBs
dWdpbiopcC0+ZGF0YTsKLSAgICAgICAgaWYgKCFnX3N0cmNtcDAod2Via2l0X3dlYl9wbHVnaW5f
Z2V0X25hbWUocGx1Z2luKSwgIldlYktpdCBUZXN0IFBsdWdJbiIpICYmCi0gICAgICAgICAgICAh
Z19zdHJjbXAwKHdlYmtpdF93ZWJfcGx1Z2luX2dldF9kZXNjcmlwdGlvbihwbHVnaW4pLCAiU2lt
cGxlIE5ldHNjYXBlwq4gcGx1Zy1pbiB0aGF0IGhhbmRsZXMgdGVzdCBjb250ZW50IGZvciBXZWJL
aXQiKSkKLSAgICAgICAgICAgIGVuYWJsZWQgPSB3ZWJraXRfd2ViX3BsdWdpbl9nZXRfZW5hYmxl
ZChwbHVnaW4pOwotICAgIH0KLSAgICB3ZWJraXRfd2ViX3BsdWdpbl9kYXRhYmFzZV9wbHVnaW5z
X2xpc3RfZnJlZShwbHVnaW5MaXN0KTsKLSAgICBnX2Fzc2VydCghZW5hYmxlZCk7Ci0KLSAgICBn
X29iamVjdF91bnJlZih2aWV3KTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2
KQotewotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLQotICAgIGdfdGVz
dF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0gICAgZ190ZXN0X2FkZF9m
dW5jKCIvd2Via2l0L3dlYnBsdWdpbmRhdGFiYXNlL2dldHBsdWdpbnMiLCB0ZXN0X3dlYmtpdF93
ZWJfcGx1Z2luX2RhdGFiYXNlX2dldF9wbHVnaW5zKTsKLSAgICByZXR1cm4gZ190ZXN0X3J1biAo
KTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJyZXNvdXJj
ZS5jIGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYnJlc291cmNlLmMKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjNThiN2EuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dC9ndGsvdGVzdHMvdGVzdHdlYnJlc291cmNlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMzEgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4gTWljaGFlbCBBbG9uem8KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0j
aW5jbHVkZSA8bGlic291cC9zb3VwLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8
d2Via2l0L3dlYmtpdC5oPgotCi0jZGVmaW5lIElOREVYX0hUTUwgIjxodG1sPjwvaHRtbD4iCi0j
ZGVmaW5lIE1BSU5fSFRNTCAiPGh0bWw+PGhlYWQ+PHNjcmlwdCBsYW5ndWFnZT1cImphdmFzY3Jp
cHRcIiBzcmM9XCIvamF2YXNjcmlwdC5qc1wiPjwvc2NyaXB0PjwvaGVhZD48Ym9keT48aDE+aGFo
PC9oMT48L2h0bWw+IgotI2RlZmluZSBKQVZBU0NSSVBUICJmdW5jdGlvbiBibGFoICgpIHsgdmFy
IGEgPSAxOyB9IgotCi1HTWFpbkxvb3AqIGxvb3A7Ci1Tb3VwU2Vzc2lvbiAqc2Vzc2lvbjsKLWNo
YXIgKmJhc2VfdXJpOwotV2ViS2l0V2ViUmVzb3VyY2UqIG1haW5fcmVzb3VyY2U7Ci1XZWJLaXRX
ZWJSZXNvdXJjZSogc3ViX3Jlc291cmNlOwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgV2ViS2l0
V2ViUmVzb3VyY2UqIHdlYlJlc291cmNlOwotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXc7Ci19
IFdlYlJlc291cmNlRml4dHVyZTsKLQotLyogRm9yIHJlYWwgcmVxdWVzdCB0ZXN0aW5nICovCi1z
dGF0aWMgdm9pZAotc2VydmVyX2NhbGxiYWNrIChTb3VwU2VydmVyICpzZXJ2ZXIsIFNvdXBNZXNz
YWdlICptc2csCi0gICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsIEdIYXNoVGFibGUg
KnF1ZXJ5LAotICAgICAgICAgICAgICAgICBTb3VwQ2xpZW50Q29udGV4dCAqY29udGV4dCwgZ3Bv
aW50ZXIgZGF0YSkKLXsKLSAgICBpZiAobXNnLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7
Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzIChtc2csIFNPVVBfU1RBVFVTX05PVF9J
TVBMRU1FTlRFRCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzb3VwX21lc3NhZ2Vf
c2V0X3N0YXR1cyAobXNnLCBTT1VQX1NUQVRVU19PSyk7Ci0KLSAgICAvKiBSZWRpcmVjdCAqLwot
ICAgIGlmIChnX3N0cl9lcXVhbCAocGF0aCwgIi8iKSkgewotICAgICAgICBzb3VwX21lc3NhZ2Vf
c2V0X3N0YXR1cyAobXNnLCBTT1VQX1NUQVRVU19NT1ZFRF9QRVJNQU5FTlRMWSk7Ci0KLSAgICAg
ICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kIChtc2ctPnJlc3BvbnNlX2hlYWRlcnMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxvY2F0aW9uIiwgIi9pbmRleC5o
dG1sIik7Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbCAocGF0aCwgIi9pbmRleC5odG1sIikp
IHsKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kIChtc2ctPnJlc3BvbnNlX2JvZHks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU09VUF9NRU1PUllfQ09QWSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkRFWF9IVE1MLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiAoSU5ERVhfSFRNTCkpOwotICAgIH0gZWxzZSBp
ZiAoZ19zdHJfZXF1YWwgKHBhdGgsICIvbWFpbi5odG1sIikpIHsKLSAgICAgICAgc291cF9tZXNz
YWdlX2JvZHlfYXBwZW5kIChtc2ctPnJlc3BvbnNlX2JvZHksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU09VUF9NRU1PUllfQ09QWSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBNQUlOX0hUTUwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RybGVuIChNQUlOX0hUTUwpKTsKLSAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsIChwYXRoLCAi
L2phdmFzY3JpcHQuanMiKSkgewotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQgKG1z
Zy0+cmVzcG9uc2VfYm9keSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT1VQ
X01FTU9SWV9DT1BZLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpBVkFTQ1JJ
UFQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuIChKQVZBU0NSSVBU
KSk7Ci0gICAgfQotCi0KLSAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZSAobXNnLT5yZXNw
b25zZV9ib2R5KTsKLX0KLQotc3RhdGljIHZvaWQgd2ViX3Jlc291cmNlX2ZpeHR1cmVfc2V0dXAo
V2ViUmVzb3VyY2VGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAg
Zml4dHVyZS0+d2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkp
OwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKGZpeHR1cmUtPndlYlZpZXcpOwotICAgIGNvbnN0IGdj
aGFyKiB3ZWJEYXRhID0gIjxodG1sPjwvaHRtbD4iOwotICAgIGZpeHR1cmUtPndlYlJlc291cmNl
ID0gd2Via2l0X3dlYl9yZXNvdXJjZV9uZXcod2ViRGF0YSwgc3RybGVuKHdlYkRhdGEpLCAiaHR0
cDovL2V4YW1wbGUuY29tLyIsICJ0ZXh0L2h0bWwiLCAidXRmOCIsICJFeGFtcGxlLmNvbSIpOwot
ICAgIGdfYXNzZXJ0KGZpeHR1cmUtPndlYlJlc291cmNlKTsKLX0KLQotc3RhdGljIHZvaWQgd2Vi
X3Jlc291cmNlX2ZpeHR1cmVfdGVhcmRvd24oV2ViUmVzb3VyY2VGaXh0dXJlKiBmaXh0dXJlLCBn
Y29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+d2ViUmVzb3VyY2Up
OwotICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPndlYlJlc291cmNlKTsKLSAgICBnX29iamVj
dF91bnJlZihmaXh0dXJlLT53ZWJWaWV3KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRf
d2ViX3Jlc291cmNlX2dldF91cmwoV2ViUmVzb3VyY2VGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rw
b2ludGVyIGRhdGEpCi17Ci0gICAgZ2NoYXIqIHVybDsKLSAgICBnX29iamVjdF9nZXQoR19PQkpF
Q1QoZml4dHVyZS0+d2ViUmVzb3VyY2UpLCAidXJpIiwgJnVybCwgTlVMTCk7Ci0gICAgZ19hc3Nl
cnRfY21wc3RyKHVybCwgPT0sICJodHRwOi8vZXhhbXBsZS5jb20vIik7Ci0gICAgZ19hc3NlcnRf
Y21wc3RyKHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaShmaXh0dXJlLT53ZWJSZXNvdXJjZSkg
LD09LCJodHRwOi8vZXhhbXBsZS5jb20vIik7Ci0gICAgZ19mcmVlKHVybCk7Ci19Ci0KLXN0YXRp
YyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZGF0YShXZWJSZXNvdXJjZUZpeHR1
cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBHU3RyaW5nKiBjaGFyRGF0
YSA9IHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X2RhdGEoZml4dHVyZS0+d2ViUmVzb3VyY2UpOwot
ICAgIGdfYXNzZXJ0X2NtcHN0cihjaGFyRGF0YS0+c3RyLCA9PSwgIjxodG1sPjwvaHRtbD4iKTsK
LX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3Jlc291cmNlX2dldF9taW1lX3R5cGUo
V2ViUmVzb3VyY2VGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAg
Z2NoYXIqIG1pbWVfdHlwZTsKLSAgICBnX29iamVjdF9nZXQoR19PQkpFQ1QoZml4dHVyZS0+d2Vi
UmVzb3VyY2UpLCAibWltZS10eXBlIiwgJm1pbWVfdHlwZSwgTlVMTCk7Ci0gICAgZ19hc3NlcnRf
Y21wc3RyKG1pbWVfdHlwZSwgPT0sICJ0ZXh0L2h0bWwiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIo
d2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfbWltZV90eXBlKGZpeHR1cmUtPndlYlJlc291cmNlKSw9
PSwidGV4dC9odG1sIik7Ci0gICAgZ19mcmVlKG1pbWVfdHlwZSk7Ci19Ci0KLXN0YXRpYyB2b2lk
IHRlc3Rfd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZW5jb2RpbmcoV2ViUmVzb3VyY2VGaXh0dXJl
KiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ2NoYXIqIHRleHRfZW5jb2Rp
bmc7Ci0gICAgZ19vYmplY3RfZ2V0KEdfT0JKRUNUKGZpeHR1cmUtPndlYlJlc291cmNlKSwgImVu
Y29kaW5nIiwgJnRleHRfZW5jb2RpbmcsIE5VTEwpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0
X2VuY29kaW5nLCA9PSwgInV0ZjgiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9y
ZXNvdXJjZV9nZXRfZW5jb2RpbmcoZml4dHVyZS0+d2ViUmVzb3VyY2UpLD09LCJ1dGY4Iik7Ci0g
ICAgZ19mcmVlKHRleHRfZW5jb2RpbmcpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93
ZWJfcmVzb3VyY2VfZ2V0X2ZyYW1lX25hbWUoV2ViUmVzb3VyY2VGaXh0dXJlKiBmaXh0dXJlLCBn
Y29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ2NoYXIqIGZyYW1lX25hbWU7Ci0gICAgZ19vYmpl
Y3RfZ2V0KEdfT0JKRUNUKGZpeHR1cmUtPndlYlJlc291cmNlKSwgImZyYW1lLW5hbWUiLCAmZnJh
bWVfbmFtZSwgTlVMTCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKGZyYW1lX25hbWUsID09LCAiRXhh
bXBsZS5jb20iKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9yZXNvdXJjZV9nZXRf
ZnJhbWVfbmFtZShmaXh0dXJlLT53ZWJSZXNvdXJjZSksPT0sIkV4YW1wbGUuY29tIik7Ci0gICAg
Z19mcmVlKGZyYW1lX25hbWUpOwotfQotCi1zdGF0aWMgdm9pZCByZXNvdXJjZV9yZXF1ZXN0X3N0
YXJ0aW5nX2NiKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBXZWJLaXRXZWJGcmFtZSogd2ViX2Zy
YW1lLCBXZWJLaXRXZWJSZXNvdXJjZSogd2ViX3Jlc291cmNlLCBXZWJLaXROZXR3b3JrUmVxdWVz
dCogcmVxdWVzdCwgV2ViS2l0TmV0d29ya1Jlc3BvbnNlKiByZXNwb25zZSwgZ3BvaW50ZXIgZGF0
YSkKLXsKLSAgICBnaW50KiBiZWVuX3RoZXJlID0gZGF0YTsKLSAgICAqYmVlbl90aGVyZSA9ICpi
ZWVuX3RoZXJlICsgMTsKLQotICAgIGlmICgqYmVlbl90aGVyZSA9PSAxKSB7Ci0gICAgICAgIGdf
YXNzZXJ0KCFtYWluX3Jlc291cmNlKTsKLSAgICAgICAgbWFpbl9yZXNvdXJjZSA9IGdfb2JqZWN0
X3JlZih3ZWJfcmVzb3VyY2UpOwotCi0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2Vi
X3Jlc291cmNlX2dldF91cmkod2ViX3Jlc291cmNlKSwgPT0sIGJhc2VfdXJpKTsKLQotICAgICAg
ICAvKiBUaGlzIHNob3VsZCBiZSBhIHJlZGlyZWN0LCBzbyB0aGUgcmVzcG9uc2UgbXVzdCBiZSBO
VUxMICovCi0gICAgICAgIGdfYXNzZXJ0KCFyZXNwb25zZSk7Ci0gICAgfSBlbHNlIGlmICgqYmVl
bl90aGVyZSA9PSAyKSB7Ci0gICAgICAgIGNoYXIqIHVyaSA9IGdfc3RyZHVwX3ByaW50ZigiJXNp
bmRleC5odG1sIiwgYmFzZV91cmkpOwotCi0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRf
d2ViX3Jlc291cmNlX2dldF91cmkod2ViX3Jlc291cmNlKSwgPT0sIHVyaSk7Ci0KLSAgICAgICAg
LyogQ2FuY2VsIHRoZSByZXF1ZXN0LiAqLwotICAgICAgICB3ZWJraXRfbmV0d29ya19yZXF1ZXN0
X3NldF91cmkocmVxdWVzdCwgImFib3V0OmJsYW5rIik7Ci0KLSAgICAgICAgZ19mcmVlKHVyaSk7
Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBub3RpZnlfbG9hZF9zdGF0dXNfY2IoV2ViS2l0V2Vi
Vmlldyogd2ViX3ZpZXcsIEdQYXJhbVNwZWMqIHBzcGVjLCBncG9pbnRlciBkYXRhKQotewotICAg
IGlmICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYl92aWV3KSA9PSBXRUJLSVRf
TE9BRF9GSU5JU0hFRCkgewotICAgICAgICBnYm9vbGVhbiogYmVlbl90aGVyZSA9IGRhdGE7Ci0g
ICAgICAgICpiZWVuX3RoZXJlID0gVFJVRTsKLQotICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Vi
a2l0X3dlYl92aWV3X2dldF91cmkod2ViX3ZpZXcpLCA9PSwgImFib3V0OmJsYW5rIik7Ci0KLSAg
ICAgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHRl
c3Rfd2ViX3Jlc291cmNlX2xvYWRpbmcoKQotewotICAgIFdlYktpdFdlYlZpZXcqIHdlYl92aWV3
ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZ2ludCBiZWVu
X3RvX3Jlc291cmNlX3JlcXVlc3Rfc3RhcnRpbmcgPSAwOwotICAgIGdib29sZWFuIGJlZW5fdG9f
bG9hZF9maW5pc2hlZCA9IEZBTFNFOwotICAgIFdlYktpdFdlYkZyYW1lKiB3ZWJfZnJhbWU7Ci0g
ICAgV2ViS2l0V2ViRGF0YVNvdXJjZSogZGF0YV9zb3VyY2U7Ci0KLSAgICBsb29wID0gZ19tYWlu
X2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotCi0gICAgZ19vYmplY3RfcmVmX3Npbmsod2ViX3ZpZXcp
OwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh3ZWJfdmlldywgInJlc291cmNlLXJlcXVlc3Qtc3Rh
cnRpbmciLAotICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhyZXNvdXJjZV9yZXF1ZXN0
X3N0YXJ0aW5nX2NiKSwKLSAgICAgICAgICAgICAgICAgICAgICZiZWVuX3RvX3Jlc291cmNlX3Jl
cXVlc3Rfc3RhcnRpbmcpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh3ZWJfdmlldywgIm5vdGlm
eTo6bG9hZC1zdGF0dXMiLAotICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhub3RpZnlf
bG9hZF9zdGF0dXNfY2IpLAotICAgICAgICAgICAgICAgICAgICAgJmJlZW5fdG9fbG9hZF9maW5p
c2hlZCk7Ci0KLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkod2ViX3ZpZXcsIGJhc2VfdXJp
KTsKLQotICAgIC8qIFdlIHdvbid0IGdldCBmaW5pc2hlZCBpbW1lZGlhdGVseSwgYmVjYXVzZSBv
ZiB0aGUgcmVkaXJlY3QgKi8KLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0gICAgCi0gICAg
d2ViX2ZyYW1lID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKHdlYl92aWV3KTsKLSAg
ICBkYXRhX3NvdXJjZSA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X2RhdGFfc291cmNlKHdlYl9mcmFt
ZSk7Ci0KLSAgICBnX2Fzc2VydChtYWluX3Jlc291cmNlKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRf
d2ViX2RhdGFfc291cmNlX2dldF9tYWluX3Jlc291cmNlKGRhdGFfc291cmNlKSA9PSBtYWluX3Jl
c291cmNlKTsKLSAgICBnX29iamVjdF91bnJlZihtYWluX3Jlc291cmNlKTsKLSAgICAKLSAgICBn
X2Fzc2VydF9jbXBpbnQoYmVlbl90b19yZXNvdXJjZV9yZXF1ZXN0X3N0YXJ0aW5nLCA9PSwgMik7
Ci0gICAgZ19hc3NlcnRfY21waW50KGJlZW5fdG9fbG9hZF9maW5pc2hlZCwgPT0sIFRSVUUpOwot
Ci0gICAgZ19vYmplY3RfdW5yZWYod2ViX3ZpZXcpOwotICAgIGdfbWFpbl9sb29wX3VucmVmKGxv
b3ApOwotfQotCi1zdGF0aWMgdm9pZCByZXNvdXJjZV9yZXF1ZXN0X3N0YXJ0aW5nX3N1Yl9jYihX
ZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgV2ViS2l0V2ViRnJhbWUqIHdlYl9mcmFtZSwgV2ViS2l0
V2ViUmVzb3VyY2UqIHdlYl9yZXNvdXJjZSwgV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3Qs
IFdlYktpdE5ldHdvcmtSZXNwb25zZSogcmVzcG9uc2UsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAg
aWYgKCFtYWluX3Jlc291cmNlKQotICAgICAgICBtYWluX3Jlc291cmNlID0gZ19vYmplY3RfcmVm
KHdlYl9yZXNvdXJjZSk7Ci0gICAgZWxzZSBpZiAoIXN1Yl9yZXNvdXJjZSkKLSAgICAgIHN1Yl9y
ZXNvdXJjZSA9IGdfb2JqZWN0X3JlZih3ZWJfcmVzb3VyY2UpOwotfQotCi1zdGF0aWMgdm9pZCBu
b3RpZnlfbG9hZF9zdGF0dXNfc3ViX2NiKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBHUGFyYW1T
cGVjKiBwc3BlYywgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBpZiAod2Via2l0X3dlYl92aWV3X2dl
dF9sb2FkX3N0YXR1cyh3ZWJfdmlldykgPT0gV0VCS0lUX0xPQURfRklOSVNIRUQpCi0gICAgICAg
IGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBpZGxlX3F1aXRf
bG9vcF9jYihncG9pbnRlciBkYXRhKQotewotICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci0g
ICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYl9yZXNvdXJjZV9zdWJf
cmVzb3VyY2VfbG9hZGluZygpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcgPSBXRUJL
SVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBXZWJLaXRXZWJGcmFtZSog
d2ViX2ZyYW1lOwotICAgIFdlYktpdFdlYkRhdGFTb3VyY2UqIGRhdGFfc291cmNlOwotICAgIEdM
aXN0KiBzdWJfcmVzb3VyY2VzOwotICAgIGNoYXIqIHVyaSA9IGdfc3RyZHVwX3ByaW50ZigiJXNt
YWluLmh0bWwiLCBiYXNlX3VyaSk7Ci0KLSAgICBtYWluX3Jlc291cmNlID0gTlVMTDsKLSAgICAK
LSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotCi0gICAgZ19vYmplY3Rf
cmVmX3Npbmsod2ViX3ZpZXcpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh3ZWJfdmlldywgInJl
c291cmNlLXJlcXVlc3Qtc3RhcnRpbmciLAotICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFD
SyhyZXNvdXJjZV9yZXF1ZXN0X3N0YXJ0aW5nX3N1Yl9jYiksCi0gICAgICAgICAgICAgICAgICAg
ICBOVUxMKTsKLQotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViX3ZpZXcsICJub3RpZnk6OmxvYWQt
c3RhdHVzIiwKLSAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sobm90aWZ5X2xvYWRfc3Rh
dHVzX3N1Yl9jYiksCi0gICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLQotICAgIHdlYmtpdF93
ZWJfdmlld19sb2FkX3VyaSh3ZWJfdmlldywgdXJpKTsKLQotICAgIGdfbWFpbl9sb29wX3J1bihs
b29wKTsKLQotICAgIC8qIFRoZSBtYWluIHJlc291cmNlIHNob3VsZCBiZSBsb2FkZWQ7IG5vdyBs
ZXQncyB3YWl0IGZvciB0aGUgc3ViLXJlc291cmNlIHRvIGxvYWQgKi8KLSAgICBnX2lkbGVfYWRk
KGlkbGVfcXVpdF9sb29wX2NiLCBOVUxMKTsKLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0g
ICAgCi0gICAgZ19hc3NlcnQobWFpbl9yZXNvdXJjZSAmJiBzdWJfcmVzb3VyY2UpOwotICAgIGdf
YXNzZXJ0KG1haW5fcmVzb3VyY2UgIT0gc3ViX3Jlc291cmNlKTsKLQotICAgIHdlYl9mcmFtZSA9
IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh3ZWJfdmlldyk7Ci0gICAgZGF0YV9zb3Vy
Y2UgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9kYXRhX3NvdXJjZSh3ZWJfZnJhbWUpOwotCi0gICAg
Z19hc3NlcnQod2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfbWFpbl9yZXNvdXJjZShkYXRhX3Nv
dXJjZSkgPT0gbWFpbl9yZXNvdXJjZSk7Ci0gICAgZ19vYmplY3RfdW5yZWYobWFpbl9yZXNvdXJj
ZSk7Ci0KLSAgICBzdWJfcmVzb3VyY2VzID0gd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfc3Vi
cmVzb3VyY2VzKGRhdGFfc291cmNlKTsKLSAgICAvLyBFeHBlY3RlZCByZXNvdXJjZXM6IGphdmFz
Y3JpcHRzLmpzLCBmYXZpY29uLmljbwotICAgIGdfYXNzZXJ0KHN1Yl9yZXNvdXJjZXMpOwotICAg
IGdfYXNzZXJ0KHN1Yl9yZXNvdXJjZXMtPm5leHQpOwotICAgIGdfYXNzZXJ0KCFzdWJfcmVzb3Vy
Y2VzLT5uZXh0LT5uZXh0KTsKLQotICAgIC8vIFRlc3QgdGhhdCB0aGUgb2JqZWN0IHdlIGdvdCBm
cm9tIHRoZSBkYXRhIHNvdXJjZSBpcyB0aGUgc2FtZQotICAgIC8vIHRoYXQgd2VudCB0aHJvdWdo
IHJlc291cmNlLXJlcXVlc3Qtc3RhcnRpbmcuIE5vdGUgdGhhdCB0aGUgb3JkZXIgaXMKLSAgICAv
LyBub3QgaW1wb3J0YW50IChhbmQgbm90IGd1YXJhbnRlZWQgc2luY2UgdGhlIHJlc291cmNlcyBh
cmUgc3RvcmVkIGluIGEKLSAgICAvLyBoYXNodGFibGUpLgotICAgIGdfYXNzZXJ0KFdFQktJVF9X
RUJfUkVTT1VSQ0Uoc3ViX3Jlc291cmNlcy0+ZGF0YSkgPT0gc3ViX3Jlc291cmNlCi0gICAgICAg
ICAgICAgfHwgV0VCS0lUX1dFQl9SRVNPVVJDRShzdWJfcmVzb3VyY2VzLT5uZXh0LT5kYXRhKSA9
PSBzdWJfcmVzb3VyY2UpOwotCi0gICAgZ19vYmplY3RfdW5yZWYod2ViX3ZpZXcpOwotICAgIGdf
bWFpbl9sb29wX3VucmVmKGxvb3ApOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFy
Z3YpCi17Ci0gICAgU291cFNlcnZlciogc2VydmVyOwotICAgIFNvdXBVUkkqIHNvdXBfdXJpOwot
Ci0gICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOwotCi0gICAgc2VydmVyID0g
c291cF9zZXJ2ZXJfbmV3KFNPVVBfU0VSVkVSX1BPUlQsIDAsIE5VTEwpOwotICAgIHNvdXBfc2Vy
dmVyX3J1bl9hc3luYyhzZXJ2ZXIpOwotCi0gICAgc291cF9zZXJ2ZXJfYWRkX2hhbmRsZXIoc2Vy
dmVyLCBOVUxMLCBzZXJ2ZXJfY2FsbGJhY2ssIE5VTEwsIE5VTEwpOwotCi0gICAgc291cF91cmkg
PSBzb3VwX3VyaV9uZXcoImh0dHA6Ly8xMjcuMC4wLjEvIik7Ci0gICAgc291cF91cmlfc2V0X3Bv
cnQoc291cF91cmksIHNvdXBfc2VydmVyX2dldF9wb3J0KHNlcnZlcikpOwotCi0gICAgYmFzZV91
cmkgPSBzb3VwX3VyaV90b19zdHJpbmcoc291cF91cmksIEZBTFNFKTsKLSAgICBzb3VwX3VyaV9m
cmVlKHNvdXBfdXJpKTsKLQotICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvIik7Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC93ZWJyZXNvdXJjZS9nZXRfdXJsIiwK
LSAgICAgICAgICAgICAgIFdlYlJlc291cmNlRml4dHVyZSwgMCwgd2ViX3Jlc291cmNlX2ZpeHR1
cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3Vy
bCwgd2ViX3Jlc291cmNlX2ZpeHR1cmVfdGVhcmRvd24pOwotICAgIGdfdGVzdF9hZGQoIi93ZWJr
aXQvd2VicmVzb3VyY2UvZ2V0X21pbWVfdHlwZSIsCi0gICAgICAgICAgICAgICBXZWJSZXNvdXJj
ZUZpeHR1cmUsIDAsIHdlYl9yZXNvdXJjZV9maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAg
dGVzdF93ZWJraXRfd2ViX3Jlc291cmNlX2dldF9taW1lX3R5cGUsIHdlYl9yZXNvdXJjZV9maXh0
dXJlX3RlYXJkb3duKTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L3dlYnJlc291cmNlL2dldF90
ZXh0X2VuY29kaW5nX25hbWUiLAotICAgICAgICAgICAgICAgV2ViUmVzb3VyY2VGaXh0dXJlLCAw
LCB3ZWJfcmVzb3VyY2VfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0
X3dlYl9yZXNvdXJjZV9nZXRfZW5jb2RpbmcsIHdlYl9yZXNvdXJjZV9maXh0dXJlX3RlYXJkb3du
KTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L3dlYnJlc291cmNlL2dldF9mcmFtZV9uYW1lIiwK
LSAgICAgICAgICAgICAgIFdlYlJlc291cmNlRml4dHVyZSwgMCwgd2ViX3Jlc291cmNlX2ZpeHR1
cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X2Zy
YW1lX25hbWUsIHdlYl9yZXNvdXJjZV9maXh0dXJlX3RlYXJkb3duKTsKLSAgICBnX3Rlc3RfYWRk
KCIvd2Via2l0L3dlYnJlc291cmNlL2dldF9kYXRhIiwKLSAgICAgICAgICAgICAgIFdlYlJlc291
cmNlRml4dHVyZSwgMCwgd2ViX3Jlc291cmNlX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAg
ICB0ZXN0X3dlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X2RhdGEsIHdlYl9yZXNvdXJjZV9maXh0dXJl
X3RlYXJkb3duKTsKLQotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJyZXNvdXJjZS9s
b2FkaW5nIiwgdGVzdF93ZWJfcmVzb3VyY2VfbG9hZGluZyk7Ci0gICAgZ190ZXN0X2FkZF9mdW5j
KCIvd2Via2l0L3dlYnJlc291cmNlL3N1Yl9yZXNvdXJjZV9sb2FkaW5nIiwgdGVzdF93ZWJfcmVz
b3VyY2Vfc3ViX3Jlc291cmNlX2xvYWRpbmcpOwotCi0gICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2Vic2V0dGluZ3Mu
YyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJzZXR0aW5ncy5jCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAzNTQ4OWNkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQv
Z3RrL3Rlc3RzL3Rlc3R3ZWJzZXR0aW5ncy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTU5ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIE1pY2hhZWwgQWxvbnpvCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2lu
Y2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KLQotLyogUHJpdmF0ZSBBUEkgKi8KLWNoYXIqIHdlYmtp
dFdlYlNldHRpbmdzVXNlckFnZW50Rm9yVVJJKFdlYktpdFdlYlNldHRpbmdzICpzZXR0aW5ncywg
Y29uc3QgY2hhciAqdXJpKTsKLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3NldHRpbmdz
X2NvcHkodm9pZCkKLXsKLSAgICBXZWJLaXRXZWJTZXR0aW5ncyAqc2V0dGluZ3MgPSB3ZWJraXRf
d2ViX3NldHRpbmdzX25ldygpOwotCi0gICAgLy8gU2V0IHNvbWUgbm9uLWRlZmF1bHQgc2V0dGlu
Z3MgdG8gdmVyaWZ5IHRoYXQgc2V0dGluZ3MgYXJlIHByb3Blcmx5IGNvcGllZC4KLSAgICBnX29i
amVjdF9zZXQoc2V0dGluZ3MsCi0gICAgICAgICAgICAgICAgICJlbmFibGUtd2ViZ2wiLCBUUlVF
LAotICAgICAgICAgICAgICAgICAiZW5hYmxlLWZ1bGxzY3JlZW4iLCBUUlVFLAotICAgICAgICAg
ICAgICAgICAiYXV0by1sb2FkLWltYWdlcyIsIEZBTFNFLAotICAgICAgICAgICAgICAgICAiZGVm
YXVsdC1lbmNvZGluZyIsICJ1dGYtOCIsCi0gICAgICAgICAgICAgICAgICJlbmFibGUtbWVkaWFz
b3VyY2UiLCBUUlVFLAotICAgICAgICAgICAgICAgICBOVUxMKTsKLQotICAgIFdlYktpdFdlYlNl
dHRpbmdzICpjb3B5ID0gd2Via2l0X3dlYl9zZXR0aW5nc19jb3B5KHNldHRpbmdzKTsKLQotICAg
IGdib29sZWFuIGVuYWJsZVdlYkdMID0gRkFMU0U7Ci0gICAgZ2Jvb2xlYW4gZW5hYmxlRnVsbHNj
cmVlbiA9IEZBTFNFOwotICAgIGdib29sZWFuIGF1dG9Mb2FkSW1hZ2VzID0gRkFMU0U7Ci0gICAg
Z2Jvb2xlYW4gZW5hYmxlTWVkaWFTb3VyY2UgPSBGQUxTRTsKLSAgICBjaGFyICpkZWZhdWx0RW5j
b2RpbmcgPSAwOwotICAgIGdfb2JqZWN0X2dldChjb3B5LAotICAgICAgICAgICAgICAgICAiZW5h
YmxlLWZ1bGxzY3JlZW4iLCAmZW5hYmxlRnVsbHNjcmVlbiwKLSAgICAgICAgICAgICAgICAgImVu
YWJsZS13ZWJnbCIsICZlbmFibGVXZWJHTCwKLSAgICAgICAgICAgICAgICAgImF1dG8tbG9hZC1p
bWFnZXMiLCAmYXV0b0xvYWRJbWFnZXMsCi0gICAgICAgICAgICAgICAgICJkZWZhdWx0LWVuY29k
aW5nIiwgJmRlZmF1bHRFbmNvZGluZywKLSAgICAgICAgICAgICAgICAgImVuYWJsZS1tZWRpYXNv
dXJjZSIsICZlbmFibGVNZWRpYVNvdXJjZSwKLSAgICAgICAgICAgICAgICAgTlVMTCk7Ci0KLSAg
ICBnX2Fzc2VydChlbmFibGVXZWJHTCk7Ci0gICAgZ19hc3NlcnQoZW5hYmxlRnVsbHNjcmVlbik7
Ci0gICAgZ19hc3NlcnQoIWF1dG9Mb2FkSW1hZ2VzKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoZGVm
YXVsdEVuY29kaW5nLCA9PSwgInV0Zi04Iik7Ci0gICAgZ19hc3NlcnQoZW5hYmxlTWVkaWFTb3Vy
Y2UpOwotICAgIGdfZnJlZShkZWZhdWx0RW5jb2RpbmcpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0
X25vbl9xdWlya3lfdXNlcl9hZ2VudHMoV2ViS2l0V2ViU2V0dGluZ3MgKnNldHRpbmdzLCBjb25z
dCBjaGFyICpkZWZhdWx0VXNlckFnZW50KQotewotICAgIGNoYXIgKnVzZXJBZ2VudCA9IDA7Ci0K
LSAgICAvLyB0ZXN0IGEgY3VzdG9tIFVBIHN0cmluZwotICAgIHVzZXJBZ2VudCA9IDA7Ci0gICAg
Z19vYmplY3Rfc2V0KHNldHRpbmdzLCAidXNlci1hZ2VudCIsICJ0ZXN0d2Vic2V0dGluZ3MvMC4x
IiwgTlVMTCk7Ci0gICAgZ19vYmplY3RfZ2V0KHNldHRpbmdzLCJ1c2VyLWFnZW50IiwgJnVzZXJB
Z2VudCwgTlVMTCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHVzZXJBZ2VudCwgPT0sICJ0ZXN0d2Vi
c2V0dGluZ3MvMC4xIik7Ci0gICAgZ19mcmVlKHVzZXJBZ2VudCk7Ci0KLSAgICAvLyBzZXR0aW5n
IGl0IHRvIE5VTEwgb3IgYW4gZW1wdHkgdmFsdWUgc2hvdWxkIGdpdmUgdXMgdGhlIGRlZmF1bHQg
VUEgc3RyaW5nCi0gICAgdXNlckFnZW50ID0gMDsKLSAgICBnX29iamVjdF9zZXQoc2V0dGluZ3Ms
ICJ1c2VyLWFnZW50IiwgMCwgTlVMTCk7Ci0gICAgZ19vYmplY3RfZ2V0KHNldHRpbmdzLCJ1c2Vy
LWFnZW50IiwgJnVzZXJBZ2VudCwgTlVMTCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHVzZXJBZ2Vu
dCwgPT0sIGRlZmF1bHRVc2VyQWdlbnQpOwotICAgIGdfZnJlZSh1c2VyQWdlbnQpOwotCi0gICAg
dXNlckFnZW50ID0gMDsKLSAgICBnX29iamVjdF9zZXQoc2V0dGluZ3MsICJ1c2VyLWFnZW50Iiwg
IiIsIE5VTEwpOwotICAgIGdfb2JqZWN0X2dldChzZXR0aW5ncywidXNlci1hZ2VudCIsICZ1c2Vy
QWdlbnQsIE5VTEwpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih1c2VyQWdlbnQsID09LCBkZWZhdWx0
VXNlckFnZW50KTsKLSAgICBnX2ZyZWUodXNlckFnZW50KTsKLX0KLQotc3RhdGljIHZvaWQgdGVz
dF93ZWJraXRfd2ViX3NldHRpbmdzX3VzZXJfYWdlbnQodm9pZCkKLXsKLSAgICBXZWJLaXRXZWJT
ZXR0aW5ncyAqc2V0dGluZ3M7Ci0gICAgR3RrV2lkZ2V0ICp3ZWJWaWV3OwotICAgIGNoYXIgKmRl
ZmF1bHRVc2VyQWdlbnQ7Ci0gICAgY2hhciAqdXNlckFnZW50ID0gMDsKLSAgICBnX3Rlc3RfYnVn
KCIxNzM3NSIpOwotCi0gICAgd2ViVmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKLSAgICBn
X29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKLQotICAgIHNldHRpbmdzID0gd2Via2l0X3dlYl92
aWV3X2dldF9zZXR0aW5ncyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldykpOwotICAgIGRlZmF1bHRV
c2VyQWdlbnQgPSBnX3N0cmR1cCh3ZWJraXRfd2ViX3NldHRpbmdzX2dldF91c2VyX2FnZW50KHNl
dHRpbmdzKSk7Ci0KLSAgICB0ZXN0X25vbl9xdWlya3lfdXNlcl9hZ2VudHMoc2V0dGluZ3MsIGRl
ZmF1bHRVc2VyQWdlbnQpOwotCi0gICAgLyogVGVzdCBxdWlya3kgZ29vZ2xlIGRvbWFpbnMgKi8K
LSAgICBnX29iamVjdF9zZXQoc2V0dGluZ3MsICJ1c2VyLWFnZW50IiwgInRlc3R3ZWJzZXR0aW5n
cy8wLjEiLCBOVUxMKTsKLQotICAgIHVzZXJBZ2VudCA9IHdlYmtpdFdlYlNldHRpbmdzVXNlckFn
ZW50Rm9yVVJJKHNldHRpbmdzLCAiaHR0cDovL3d3dy5nb29nbGUuY29tLyIpOwotICAgIGdfYXNz
ZXJ0X2NtcHN0cih1c2VyQWdlbnQsID09LCAidGVzdHdlYnNldHRpbmdzLzAuMSIpOwotICAgIGdf
ZnJlZSh1c2VyQWdlbnQpOwotCi0gICAgdXNlckFnZW50ID0gd2Via2l0V2ViU2V0dGluZ3NVc2Vy
QWdlbnRGb3JVUkkoc2V0dGluZ3MsICJodHRwOi8vZ21haWwuY29tLyIpOwotICAgIGdfYXNzZXJ0
X2NtcHN0cih1c2VyQWdlbnQsID09LCAidGVzdHdlYnNldHRpbmdzLzAuMSIpOwotICAgIGdfZnJl
ZSh1c2VyQWdlbnQpOwotCi0gICAgdXNlckFnZW50ID0gd2Via2l0V2ViU2V0dGluZ3NVc2VyQWdl
bnRGb3JVUkkoc2V0dGluZ3MsICJodHRwOi8vd3d3Lmdvb2dsZS5jb20uYnIvIik7Ci0gICAgZ19h
c3NlcnRfY21wc3RyKHVzZXJBZ2VudCwgPT0sICJ0ZXN0d2Vic2V0dGluZ3MvMC4xIik7Ci0gICAg
Z19mcmVlKHVzZXJBZ2VudCk7Ci0KLSAgICB1c2VyQWdlbnQgPSB3ZWJraXRXZWJTZXR0aW5nc1Vz
ZXJBZ2VudEZvclVSSShzZXR0aW5ncywgImh0dHA6Ly9jYWxlbmRhci5nb29nbGUuY29tLyIpOwot
ICAgIGdfYXNzZXJ0X2NtcHN0cih1c2VyQWdlbnQsID09LCAidGVzdHdlYnNldHRpbmdzLzAuMSIp
OwotICAgIGdfZnJlZSh1c2VyQWdlbnQpOwotCi0gICAgLyogTm93IGVuYWJsZSBxdWlya3MgaGFu
ZGxpbmcgKi8KLSAgICBnX29iamVjdF9zZXQoc2V0dGluZ3MsICJlbmFibGUtc2l0ZS1zcGVjaWZp
Yy1xdWlya3MiLCBUUlVFLCBOVUxMKTsKLQotICAgIHRlc3Rfbm9uX3F1aXJreV91c2VyX2FnZW50
cyhzZXR0aW5ncywgZGVmYXVsdFVzZXJBZ2VudCk7Ci0KLSAgICBnX29iamVjdF9zZXQoc2V0dGlu
Z3MsICJ1c2VyLWFnZW50IiwgInRlc3R3ZWJzZXR0aW5ncy8wLjEiLCBOVUxMKTsKLQotICAgIHVz
ZXJBZ2VudCA9IHdlYmtpdFdlYlNldHRpbmdzVXNlckFnZW50Rm9yVVJJKHNldHRpbmdzLCAiaHR0
cDovL3d3dy5nb29nbGUuY29tLyIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih1c2VyQWdlbnQsID09
LCBkZWZhdWx0VXNlckFnZW50KTsKLSAgICBnX2ZyZWUodXNlckFnZW50KTsKLQotICAgIHVzZXJB
Z2VudCA9IHdlYmtpdFdlYlNldHRpbmdzVXNlckFnZW50Rm9yVVJJKHNldHRpbmdzLCAiaHR0cDov
L2dtYWlsLmNvbS8iKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodXNlckFnZW50LCA9PSwgZGVmYXVs
dFVzZXJBZ2VudCk7Ci0gICAgZ19mcmVlKHVzZXJBZ2VudCk7Ci0KLSAgICB1c2VyQWdlbnQgPSB3
ZWJraXRXZWJTZXR0aW5nc1VzZXJBZ2VudEZvclVSSShzZXR0aW5ncywgImh0dHA6Ly93d3cuZ29v
Z2xlLmNvbS5ici8iKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodXNlckFnZW50LCA9PSwgZGVmYXVs
dFVzZXJBZ2VudCk7Ci0gICAgZ19mcmVlKHVzZXJBZ2VudCk7Ci0KLSAgICB1c2VyQWdlbnQgPSB3
ZWJraXRXZWJTZXR0aW5nc1VzZXJBZ2VudEZvclVSSShzZXR0aW5ncywgImh0dHA6Ly93d3cuZ29v
Z2xlLnVrLm5vdC5jb20uYnIvIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHVzZXJBZ2VudCwgPT0s
ICJ0ZXN0d2Vic2V0dGluZ3MvMC4xIik7Ci0gICAgZ19mcmVlKHVzZXJBZ2VudCk7Ci0KLSAgICBn
X2ZyZWUoZGVmYXVsdFVzZXJBZ2VudCk7Ci0gICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Ci19
Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLXsKLSAgICBndGtfdGVzdF9pbml0
KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVn
cy53ZWJraXQub3JnLyIpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJzZXR0aW5n
cy91c2VyX2FnZW50IiwgdGVzdF93ZWJraXRfd2ViX3NldHRpbmdzX3VzZXJfYWdlbnQpOwotICAg
IGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJzZXR0aW5ncy9jb3B5IiwgdGVzdF93ZWJraXRf
d2ViX3NldHRpbmdzX2NvcHkpOwotICAgIHJldHVybiBnX3Rlc3RfcnVuICgpOwotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYnZpZXcuYyBiL1NvdXJjZS9XZWJL
aXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJ2aWV3LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDE3MDM3MmMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYnZp
ZXcuYworKysgL2Rldi9udWxsCkBAIC0xLDc0NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDks
IDIwMTAgQ29sbGFib3JhIEx0ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAidGVzdF91dGlscy5oIgotCi0jaW5jbHVkZSA8
ZXJybm8uaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2lu
Y2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgotI2luY2x1ZGUgPGdkay9n
ZGsuaD4KLSNpbmNsdWRlIDxnZGsvZ2Rra2V5c3ltcy5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4K
LSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+Ci0KLUdNYWluTG9vcCogbG9vcDsKLVNvdXBTZXNz
aW9uICpzZXNzaW9uOwotY2hhciogYmFzZV91cmk7Ci0KLS8qIEZvciByZWFsIHJlcXVlc3QgdGVz
dGluZyAqLwotc3RhdGljIHZvaWQKLXNlcnZlcl9jYWxsYmFjayhTb3VwU2VydmVyKiBzZXJ2ZXIs
IFNvdXBNZXNzYWdlKiBtc2csCi0gICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHBhdGgsIEdI
YXNoVGFibGUqIHF1ZXJ5LAotICAgICAgICAgICAgICAgICBTb3VwQ2xpZW50Q29udGV4dCogY29u
dGV4dCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBpZiAobXNnLT5tZXRob2QgIT0gU09VUF9NRVRI
T0RfR0VUKSB7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1zZywgU09VUF9TVEFU
VVNfTk9UX0lNUExFTUVOVEVEKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNvdXBf
bWVzc2FnZV9zZXRfc3RhdHVzKG1zZywgU09VUF9TVEFUVVNfT0spOwotCi0gICAgaWYgKGdfc3Ry
X2VxdWFsKHBhdGgsICIvZmF2aWNvbi5pY28iKSkgewotICAgICAgICBjaGFyKiBjb250ZW50czsK
LSAgICAgICAgZ3NpemUgbGVuZ3RoOwotICAgICAgICBHRXJyb3IqIGVycm9yID0gTlVMTDsKLQot
ICAgICAgICBnX2ZpbGVfZ2V0X2NvbnRlbnRzKCJibGFuay5pY28iLCAmY29udGVudHMsICZsZW5n
dGgsICZlcnJvcik7Ci0gICAgICAgIGdfYXNzZXJ0KCFlcnJvcik7Ci0KLSAgICAgICAgc291cF9t
ZXNzYWdlX2JvZHlfYXBwZW5kKG1zZy0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwg
Y29udGVudHMsIGxlbmd0aCk7Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2Jp
Z2Rpdi5odG1sIikpIHsKLSAgICAgICAgY2hhciogY29udGVudHMgPSBnX3N0cmR1cCgiPGh0bWw+
PGJvZHk+PGEgaWQ9XCJsaW5rXCIgaHJlZj1cImh0dHA6Ly9hYmMuZGVmXCI+dGVzdDwvYT48ZGl2
IHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogZ3JlZW47IGhlaWdodDogMTIwMHB4O1wiPjwvZGl2
PjwvYm9keT48L2h0bWw+Iik7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtc2ct
PnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGNvbnRlbnRzLCBzdHJsZW4oY29udGVu
dHMpKTsKLSAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvaWZyYW1lLmh0bWwiKSkg
ewotICAgICAgICBjaGFyKiBjb250ZW50cyA9IGdfc3RyZHVwKCI8aHRtbD48Ym9keSBpZD1cInNv
bWUtY29udGVudFwiPjxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiBncmVlbjsgaGVpZ2h0
OiA1MHB4O1wiPjwvZGl2PjxpZnJhbWUgc3JjPVwiYmlnZGl2Lmh0bWxcIj48L2lmcmFtZT48L2Jv
ZHk+PC9odG1sPiIpOwotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobXNnLT5yZXNw
b25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBjb250ZW50cywgc3RybGVuKGNvbnRlbnRzKSk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY2hhciogY29udGVudHMgPSBnX3N0cmR1cCgiPGh0bWw+
PGJvZHk+dGVzdDwvYm9keT48L2h0bWw+Iik7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2Fw
cGVuZChtc2ctPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGNvbnRlbnRzLCBzdHJs
ZW4oY29udGVudHMpKTsKLSAgICB9Ci0KLSAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZSht
c2ctPnJlc3BvbnNlX2JvZHkpOwotfQotCi1zdGF0aWMgdm9pZCBpZGxlX3F1aXRfbG9vcF9jYihX
ZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgR1BhcmFtU3BlYyogcHNwZWMsIGdwb2ludGVyIGRhdGEp
Ci17Ci0gICAgaWYgKHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMod2ViX3ZpZXcpID09
IFdFQktJVF9MT0FEX0ZJTklTSEVEIHx8Ci0gICAgICAgIHdlYmtpdF93ZWJfdmlld19nZXRfbG9h
ZF9zdGF0dXMod2ViX3ZpZXcpID09IFdFQktJVF9MT0FEX0ZBSUxFRCkKLSAgICAgICAgZ19tYWlu
X2xvb3BfcXVpdChsb29wKTsKLX0KLQotc3RhdGljIGdib29sZWFuIHRpbWVvdXRfY2IoZ3BvaW50
ZXIgZGF0YSkKLXsKLSAgICBnX2Vycm9yKCJEaWRuJ3QgZ2V0IGljb24tdXJpIGJlZm9yZSB0aW1p
bmcgb3V0LiIpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQgaWNvbl91cmlf
Y2hhbmdlZF9jYihXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgR1BhcmFtU3BlYyogcHNwZWMsIGdw
b2ludGVyIGRhdGEpCi17Ci0gICAgY2hhciogZXhwZWN0ZWRfdXJpOwotCi0gICAgZ19hc3NlcnRf
Y21wc3RyKGdfcGFyYW1fc3BlY19nZXRfbmFtZShwc3BlYyksID09LCAiaWNvbi11cmkiKTsKLQot
ICAgIGV4cGVjdGVkX3VyaSA9IGdfc3RyZHVwX3ByaW50ZigiJXNmYXZpY29uLmljbyIsIGJhc2Vf
dXJpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dldF9pY29uX3VyaSh3
ZWJfdmlldyksID09LCBleHBlY3RlZF91cmkpOwotICAgIGdfZnJlZShleHBlY3RlZF91cmkpOwot
Ci0gICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKLX0KLQotc3RhdGljIHZvaWQgaWNvbl9sb2Fk
ZWRfY2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIGNoYXIqIGljb25fdXJpLCBncG9pbnRlciBk
YXRhKQotewotICAgIGdib29sZWFuKiBiZWVuX2hlcmUgPSAoZ2Jvb2xlYW4qKWRhdGE7Ci0gICAg
Y2hhciogZXhwZWN0ZWRfdXJpID0gZ19zdHJkdXBfcHJpbnRmKCIlc2Zhdmljb24uaWNvIiwgYmFz
ZV91cmkpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihpY29uX3VyaSwgPT0sIGV4cGVjdGVkX3VyaSk7
Ci0gICAgZ19mcmVlKGV4cGVjdGVkX3VyaSk7Ci0KLSAgICBnX2Fzc2VydF9jbXBzdHIoaWNvbl91
cmksID09LCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fdXJpKHdlYl92aWV3KSk7Ci0KLSAgICAq
YmVlbl9oZXJlID0gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3ZpZXdf
aWNvbl91cmkoKQotewotICAgIGdib29sZWFuIGJlZW5fdG9faWNvbl9sb2FkZWQgPSBGQUxTRTsK
LSAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmll
d19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3NpbmsoR19PQkpFQ1QodmlldykpOwotCi0gICAg
bG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLQotICAgIGdfb2JqZWN0X2Nvbm5l
Y3QoR19PQkpFQ1QodmlldyksCi0gICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjpub3RpZnk6
Omljb24tdXJpIiwgaWNvbl91cmlfY2hhbmdlZF9jYiwgTlVMTCwKLSAgICAgICAgICAgICAgICAg
ICAgICJzaWduYWw6Omljb24tbG9hZGVkIiwgaWNvbl9sb2FkZWRfY2IsICZiZWVuX3RvX2ljb25f
bG9hZGVkLAotICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0KLSAgICB3ZWJraXRfd2ViX3Zp
ZXdfbG9hZF91cmkodmlldywgYmFzZV91cmkpOwotCi0gICAgZ3VpbnQgdGltZW91dF9pZCA9IGdf
dGltZW91dF9hZGQoNTAwLCB0aW1lb3V0X2NiLCAwKTsKLQotICAgIGdfbWFpbl9sb29wX3J1bihs
b29wKTsKLQotICAgIGdfc291cmNlX3JlbW92ZSh0aW1lb3V0X2lkKTsKLQotICAgIGdfYXNzZXJ0
KGJlZW5fdG9faWNvbl9sb2FkZWQpOwotCi0gICAgZ19vYmplY3RfdW5yZWYodmlldyk7Ci19Ci0K
LXN0YXRpYyBnYm9vbGVhbiBtYXBfZXZlbnRfY2IoR3RrV2lkZ2V0ICp3aWRnZXQsIEdka0V2ZW50
KiBldmVudCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBHTWFpbkxvb3AqIGxvb3AgPSAoR01haW5M
b29wKilkYXRhOwotICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci0KLSAgICByZXR1cm4gRkFM
U0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBxdWl0X2FmdGVyX3Nob3J0X2RlbGF5X2NiKGdwb2lu
dGVyIGRhdGEpCi17Ci0gICAgZ19tYWluX2xvb3BfcXVpdCgoR01haW5Mb29wKilkYXRhKTsKLSAg
ICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl92aWV3X2dy
YWJfZm9jdXMoKQotewotICAgIGNoYXIqIHVyaSA9IGdfc3RyY29uY2F0KGJhc2VfdXJpLCAiaWZy
YW1lLmh0bWwiLCBOVUxMKTsKLSAgICBHdGtXaWRnZXQqIHdpbmRvdyA9IGd0a193aW5kb3dfbmV3
KEdUS19XSU5ET1dfUE9QVVApOwotICAgIEd0a1dpZGdldCogc2Nyb2xsZWRfd2luZG93ID0gZ3Rr
X3Njcm9sbGVkX3dpbmRvd19uZXcoTlVMTCwgTlVMTCk7Ci0gICAgV2ViS2l0V2ViVmlldyogdmll
dyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIEd0a0FkanVz
dG1lbnQqIGFkanVzdG1lbnQ7Ci0KLSAgICBndGtfd2luZG93X3NldF9kZWZhdWx0X3NpemUoR1RL
X1dJTkRPVyh3aW5kb3cpLCA0MDAsIDIwMCk7Ci0KLSAgICBndGtfY29udGFpbmVyX2FkZChHVEtf
Q09OVEFJTkVSKHdpbmRvdyksIHNjcm9sbGVkX3dpbmRvdyk7Ci0gICAgZ3RrX2NvbnRhaW5lcl9h
ZGQoR1RLX0NPTlRBSU5FUihzY3JvbGxlZF93aW5kb3cpLCBHVEtfV0lER0VUKHZpZXcpKTsKLQot
ICAgIGd0a19zY3JvbGxlZF93aW5kb3dfc2V0X3BvbGljeShHVEtfU0NST0xMRURfV0lORE9XKHNj
cm9sbGVkX3dpbmRvdyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19Q
T0xJQ1lfQVVUT01BVElDLCBHVEtfUE9MSUNZX0FVVE9NQVRJQyk7Ci0KLSAgICBsb29wID0gZ19t
YWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh2aWV3LCAi
bm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0soaWRsZV9xdWl0X2xvb3BfY2IpLCBOVUxM
KTsKLQotICAgIC8qIFdhaXQgZm9yIHdpbmRvdyB0byBzaG93IHVwICovCi0gICAgZ3RrX3dpZGdl
dF9zaG93X2FsbCh3aW5kb3cpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2luZG93LCAibWFwLWV2
ZW50IiwKLSAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sobWFwX2V2ZW50X2NiKSwgbG9v
cCk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAgLyogTG9hZCBhIHBhZ2Ugd2l0
aCBhIGJpZyBkaXYgdGhhdCB3aWxsIGNhdXNlIHNjcm9sbGJhcnMgdG8gYXBwZWFyICovCi0gICAg
d2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHZpZXcsIHVyaSk7Ci0gICAgZ19tYWluX2xvb3BfcnVu
KGxvb3ApOwotCi0gICAgYWRqdXN0bWVudCA9IGd0a19zY3JvbGxlZF93aW5kb3dfZ2V0X3ZhZGp1
c3RtZW50KEdUS19TQ1JPTExFRF9XSU5ET1coc2Nyb2xsZWRfd2luZG93KSk7Ci0gICAgZ19hc3Nl
cnRfY21wZmxvYXQoZ3RrX2FkanVzdG1lbnRfZ2V0X3ZhbHVlKGFkanVzdG1lbnQpLCA9PSwgMC4w
KTsKLQotICAgIC8qIFNpbmNlIHdlYmtpdF93ZWJfdmlld19leGVjdXRlX3NjcmlwdCBkb2VzIG5v
dCByZXR1cm4gYSB2YWx1ZSwKLSAgICAgICBpdCBpcyBpbXBvc3NpYmxlIHRvIGtub3cgaWYgYW4g
aW5uZXIgZG9jdW1lbnQgaGFzIGZvY3VzIGFmdGVyCi0gICAgICAgYSBub2RlIG9mIGl0IHdhcyBm
b2N1c2VkIHZpYSAuZm9jdXMoKSBtZXRob2QuCi0gICAgICAgVGhlIGNvZGUgYmVsb3cgaXMgYW4g
d29ya2Fyb3VuZDogaWYgdGhlIG5vZGUgaGFzIGZvY3VzLCBhIHNjcm9sbAotICAgICAgIGFjdGlv
biBpcyBwZXJmb3JtZWQgYW5kIGFmdGVyd2FyZCBpdCBpcyBjaGVja2VkIGlmIHRoZSBhZGp1c3Rt
ZW50Ci0gICAgICAgaGFzIHRvIGJlIGRpZmZlcmVudCBmcm9tIDAuCi0gICAgKi8KLSAgICBjaGFy
IHNjcmlwdFtdID0gInZhciBpbm5lckRvYyA9IGRvY3VtZW50LmRlZmF1bHRWaWV3LmZyYW1lc1sw
XS5kb2N1bWVudDsgXAotICAgICAgICAgICAgICAgICAgICAgaW5uZXJEb2MuZ2V0RWxlbWVudEJ5
SWQoXCJsaW5rXCIpLmZvY3VzKCk7ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAg
ICBpZiAoaW5uZXJEb2MuaGFzRm9jdXMoKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxCeSgwLCAxMDApOyI7Ci0K
LSAgICAvKiBGb2N1cyBhbiBlbGVtZW50IHVzaW5nIEphdmFTY3JpcHQgKi8KLSAgICB3ZWJraXRf
d2ViX3ZpZXdfZXhlY3V0ZV9zY3JpcHQodmlldywgc2NyaXB0KTsKLQotICAgIC8qIEFkanVzdG1l
bnRzIHVwZGF0ZSBhc3luY2hyb25vdXNseSwgc28gd2UgbXVzdCB3YWl0IGEgYml0LiAqLwotICAg
IGdfdGltZW91dF9hZGQoMTAwLCBxdWl0X2FmdGVyX3Nob3J0X2RlbGF5X2NiLCBsb29wKTsKLSAg
ICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICAvKiBNYWtlIHN1cmUgdGhlIFNjcm9sbGVk
V2luZG93IG5vdGljZWQgdGhlIHNjcm9sbCAqLwotICAgIGdfYXNzZXJ0X2NtcGZsb2F0KGd0a19h
ZGp1c3RtZW50X2dldF92YWx1ZShhZGp1c3RtZW50KSwgIT0sIDAuMCk7Ci0KLSAgICBnX2ZyZWUo
dXJpKTsKLSAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kod2luZG93KTsKLX0KLQotc3RhdGljIHZvaWQg
ZG9fdGVzdF93ZWJraXRfd2ViX3ZpZXdfYWRqdXN0bWVudHMoZ2Jvb2xlYW4gd2l0aF9wYWdlX2Nh
Y2hlKQotewotICAgIGNoYXIqIGVmZmVjdGl2ZV91cmkgPSBnX3N0cmNvbmNhdChiYXNlX3VyaSwg
ImJpZ2Rpdi5odG1sIiwgTlVMTCk7Ci0gICAgY2hhciogc2Vjb25kX3VyaSA9IGdfc3RyY29uY2F0
KGJhc2VfdXJpLCAiaWZyYW1lLmh0bWwiLCBOVUxMKTsKLSAgICBHdGtXaWRnZXQqIHdpbmRvdyA9
IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOwotICAgIEd0a1dpZGdldCogc2Ny
b2xsZWRfd2luZG93ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19uZXcoTlVMTCwgTlVMTCk7Ci0gICAg
V2ViS2l0V2ViVmlldyogdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3
KCkpOwotICAgIEd0a0FkanVzdG1lbnQqIGFkanVzdG1lbnQ7Ci0gICAgZG91YmxlIGxvd2VyOwot
ICAgIGRvdWJsZSB1cHBlcjsKLQotICAgIGlmICh3aXRoX3BhZ2VfY2FjaGUpIHsKLSAgICAgICAg
V2ViS2l0V2ViU2V0dGluZ3MqIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5n
cyh2aWV3KTsKLSAgICAgICAgZ19vYmplY3Rfc2V0KHNldHRpbmdzLCAiZW5hYmxlLXBhZ2UtY2Fj
aGUiLCBUUlVFLCBOVUxMKTsKLSAgICB9Ci0KLSAgICBndGtfd2luZG93X3NldF9kZWZhdWx0X3Np
emUoR1RLX1dJTkRPVyh3aW5kb3cpLCA0MDAsIDIwMCk7Ci0KLSAgICBndGtfY29udGFpbmVyX2Fk
ZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHNjcm9sbGVkX3dpbmRvdyk7Ci0gICAgZ3RrX2NvbnRh
aW5lcl9hZGQoR1RLX0NPTlRBSU5FUihzY3JvbGxlZF93aW5kb3cpLCBHVEtfV0lER0VUKHZpZXcp
KTsKLQotICAgIGd0a19zY3JvbGxlZF93aW5kb3dfc2V0X3BvbGljeShHVEtfU0NST0xMRURfV0lO
RE9XKHNjcm9sbGVkX3dpbmRvdyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdUS19QT0xJQ1lfQVVUT01BVElDLCBHVEtfUE9MSUNZX0FVVE9NQVRJQyk7Ci0KLSAgICBsb29w
ID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotCi0gICAgZ19vYmplY3RfY29ubmVjdChH
X09CSkVDVCh2aWV3KSwKLSAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6Om5vdGlmeTo6bG9h
ZC1zdGF0dXMiLCBpZGxlX3F1aXRfbG9vcF9jYiwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAg
IE5VTEwpOwotCi0gICAgLyogV2FpdCBmb3Igd2luZG93IHRvIHNob3cgdXAgKi8KLSAgICBndGtf
d2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdCh3aW5kb3csICJt
YXAtZXZlbnQiLAotICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhtYXBfZXZlbnRfY2Ip
LCBsb29wKTsKLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICAvKiBMb2FkIGEgcGFn
ZSB3aXRoIGEgYmlnIGRpdiB0aGF0IHdpbGwgY2F1c2Ugc2Nyb2xsYmFycyB0byBhcHBlYXIgKi8K
LSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkodmlldywgZWZmZWN0aXZlX3VyaSk7Ci0gICAg
Z19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAgLyogQWRqdXN0bWVudHMgdXBkYXRlIGFzeW5j
aHJvbm91c2x5LCBzbyB3ZSBtdXN0IHdhaXQgYSBiaXQuICovCi0gICAgZ190aW1lb3V0X2FkZCgx
MDAsIHF1aXRfYWZ0ZXJfc2hvcnRfZGVsYXlfY2IsIGxvb3ApOwotICAgIGdfbWFpbl9sb29wX3J1
bihsb29wKTsKLQotICAgIGFkanVzdG1lbnQgPSBndGtfc2Nyb2xsZWRfd2luZG93X2dldF92YWRq
dXN0bWVudChHVEtfU0NST0xMRURfV0lORE9XKHNjcm9sbGVkX3dpbmRvdykpOwotICAgIGdfYXNz
ZXJ0X2NtcGZsb2F0KGd0a19hZGp1c3RtZW50X2dldF92YWx1ZShhZGp1c3RtZW50KSwgPT0sIDAu
MCk7Ci0KLSAgICBsb3dlciA9IGd0a19hZGp1c3RtZW50X2dldF9sb3dlcihhZGp1c3RtZW50KTsK
LSAgICB1cHBlciA9IGd0a19hZGp1c3RtZW50X2dldF91cHBlcihhZGp1c3RtZW50KTsKLQotICAg
IC8qIFNjcm9sbCB0aGUgdmlldyB1c2luZyBKYXZhU2NyaXB0ICovCi0gICAgd2Via2l0X3dlYl92
aWV3X2V4ZWN1dGVfc2NyaXB0KHZpZXcsICJ3aW5kb3cuc2Nyb2xsQnkoMCwgMTAwKSIpOwotCi0g
ICAgLyogQWRqdXN0bWVudHMgdXBkYXRlIGFzeW5jaHJvbm91c2x5LCBzbyB3ZSBtdXN0IHdhaXQg
YSBiaXQuICovCi0gICAgZ190aW1lb3V0X2FkZCgxMDAsIHF1aXRfYWZ0ZXJfc2hvcnRfZGVsYXlf
Y2IsIGxvb3ApOwotICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLQotICAgIC8qIE1ha2Ugc3Vy
ZSB0aGUgU2Nyb2xsZWRXaW5kb3cgbm90aWNlZCB0aGUgc2Nyb2xsICovCi0gICAgZ19hc3NlcnRf
Y21wZmxvYXQoZ3RrX2FkanVzdG1lbnRfZ2V0X3ZhbHVlKGFkanVzdG1lbnQpLCA9PSwgMTAwLjAp
OwotCi0gICAgLyogTG9hZCBhIHNlY29uZCBVUkkgKi8KLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9h
ZF91cmkodmlldywgc2Vjb25kX3VyaSk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0g
ICAgLyogVGhlIHBhZ2UgbG9hZGVkIGJ1dCB0aGUgYWRqdXN0bWVudHMgbWF5IG5vdCBiZSB1cGRh
dGVkIHlldC4gV2FpdCBhIGJpdC4gKi8KLSAgICBnX3RpbWVvdXRfYWRkKDEwMCwgcXVpdF9hZnRl
cl9zaG9ydF9kZWxheV9jYiwgbG9vcCk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0g
ICAgLyogTWFrZSBzdXJlIHRoZSBzY3JvbGxiYXIgaGFzIGJlZW4gcmVzZXQgKi8KLSAgICBnX2Fz
c2VydF9jbXBmbG9hdChndGtfYWRqdXN0bWVudF9nZXRfdmFsdWUoYWRqdXN0bWVudCksID09LCAw
LjApOwotCi0gICAgLyogR28gYmFjayAqLwotICAgIHdlYmtpdF93ZWJfdmlld19nb19iYWNrKHZp
ZXcpOwotCi0gICAgLyogV2hlbiB1c2luZyBwYWdlIGNhY2hlLCBnb19iYWNrIHdpbGwgcmV0dXJu
IHN5bmNyb25vdXNseSAqLwotICAgIGlmICghd2l0aF9wYWdlX2NhY2hlKQotICAgICAgICBnX21h
aW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICAvKiBNYWtlIHN1cmUgR1RLKyBoYXMgdGltZSB0byBw
cm9jZXNzIHRoZSBjaGFuZ2VzIGluIHNpemUsIGZvciB0aGUgYWRqdXNtZW50cyAqLwotICAgIHdo
aWxlIChndGtfZXZlbnRzX3BlbmRpbmcoKSkKLSAgICAgICAgZ3RrX21haW5faXRlcmF0aW9uKCk7
Ci0KLSAgICAvKiBNYWtlIHN1cmUgdXBwZXIgYW5kIGxvd2VyIGJvdW5kcyBoYXZlIGJlZW4gcmVz
dG9yZWQgY29ycmVjdGx5ICovCi0gICAgZ19hc3NlcnRfY21wZmxvYXQobG93ZXIsID09LCBndGtf
YWRqdXN0bWVudF9nZXRfbG93ZXIoYWRqdXN0bWVudCkpOwotICAgIGdfYXNzZXJ0X2NtcGZsb2F0
KHVwcGVyLCA9PSwgZ3RrX2FkanVzdG1lbnRfZ2V0X3VwcGVyKGFkanVzdG1lbnQpKTsKLSAgICBn
X2Fzc2VydF9jbXBmbG9hdChndGtfYWRqdXN0bWVudF9nZXRfdmFsdWUoYWRqdXN0bWVudCksID09
LCAxMDAuMCk7Ci0KLSAgICBnX2ZyZWUoZWZmZWN0aXZlX3VyaSk7Ci0gICAgZ19mcmVlKHNlY29u
ZF91cmkpOwotCi0gICAgZ3RrX3dpZGdldF9kZXN0cm95KHdpbmRvdyk7Ci19Ci0KLXN0YXRpYyB2
b2lkIHRlc3Rfd2Via2l0X3dlYl92aWV3X2FkanVzdG1lbnRzKCkKLXsKLSAgICAvKiBUZXN0IHRo
aXMgd2l0aCBwYWdlIGNhY2hlIGRpc2FibGVkLCBhbmQgZW5hYmxlZC4gKi8KLSAgICBkb190ZXN0
X3dlYmtpdF93ZWJfdmlld19hZGp1c3RtZW50cyhGQUxTRSk7Ci0gICAgZG9fdGVzdF93ZWJraXRf
d2ViX3ZpZXdfYWRqdXN0bWVudHMoVFJVRSk7Ci19Ci0KLWdib29sZWFuIGRlbGF5ZWRfZGVzdHJv
eShncG9pbnRlciBkYXRhKQotewotICAgIGd0a193aWRnZXRfZGVzdHJveShHVEtfV0lER0VUKGRh
dGEpKTsKLSAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwotICAgIHJldHVybiBGQUxTRTsKLX0K
LQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3ZpZXdfZGVzdHJveSgpCi17Ci0gICAgR3Rr
V2lkZ2V0KiB3aW5kb3c7Ci0gICAgR3RrV2lkZ2V0KiB3ZWJfdmlldzsKLQotICAgIHdpbmRvdyA9
IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOwotICAgIHdlYl92aWV3ID0gd2Vi
a2l0X3dlYl92aWV3X25ldygpOwotCi0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5F
Uih3aW5kb3cpLCB3ZWJfdmlldyk7Ci0KLSAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7
Ci0KLSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotCi0gICAgZ19zaWdu
YWxfY29ubmVjdCh3aW5kb3csICJtYXAtZXZlbnQiLAotICAgICAgICAgICAgICAgICAgICAgR19D
QUxMQkFDSyhtYXBfZXZlbnRfY2IpLCBsb29wKTsKLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7
Ci0KLSAgICBnX2lkbGVfYWRkKGRlbGF5ZWRfZGVzdHJveSwgd2ViX3ZpZXcpOwotICAgIGdfbWFp
bl9sb29wX3J1bihsb29wKTsKLQotICAgIGd0a193aWRnZXRfZGVzdHJveSh3aW5kb3cpOwotfQot
Ci1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfdmlld193aW5kb3dfZmVhdHVyZXMoKQotewot
ICAgIEd0a1dpZGdldCogd2luZG93OwotICAgIEd0a1dpZGdldCogd2ViX3ZpZXc7Ci0gICAgCi0g
ICAgd2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7Ci0gICAgd2Vi
X3ZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7Ci0gICAgCi0gICAgZ3RrX2NvbnRhaW5lcl9h
ZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB3ZWJfdmlldyk7Ci0gICAgCi0gICAgZ3RrX3dpZGdl
dF9zaG93X2FsbCh3aW5kb3cpOwotICAgIAotICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVM
TCwgVFJVRSk7Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KHdpbmRvdywgIm1hcC1ldmVudCIsCi0g
ICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKG1hcF9ldmVudF9jYiksIGxvb3ApOwotICAg
IGdfbWFpbl9sb29wX3J1bihsb29wKTsKLSAgICAKLSAgICAvKiBCdWcgIzM2MTQ0ICovCi0gICAg
Z19vYmplY3Rfc2V0KEdfT0JKRUNUKHdlYl92aWV3KSwgIndpbmRvdy1mZWF0dXJlcyIsIE5VTEws
IE5VTEwpOwotICAgIAotICAgIGd0a193aWRnZXRfZGVzdHJveSh3aW5kb3cpOwotfSAgICAKLQot
c3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3ZpZXdfaW5fb2Zmc2NyZWVuX3dpbmRvd19kb2Vz
X25vdF9jcmFzaCgpCi17Ci0gICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsK
LQotICAgIEd0a1dpZGdldCAqd2luZG93ID0gZ3RrX29mZnNjcmVlbl93aW5kb3dfbmV3KCk7Ci0g
ICAgR3RrV2lkZ2V0ICp3ZWJfdmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKLQotICAgIGd0
a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgd2ViX3ZpZXcpOwotICAgIGd0
a193aWRnZXRfc2hvd19hbGwod2luZG93KTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHdlYl92aWV3
LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0soaWRsZV9xdWl0X2xvb3BfY2IpLCBO
VUxMKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkoV0VCS0lUX1dFQl9WSUVXKHdlYl92
aWV3KSwgYmFzZV91cmkpOwotCi0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAgZ3Rr
X3dpZGdldF9kZXN0cm95KHdpbmRvdyk7Ci0gICAgZ19tYWluX2xvb3BfdW5yZWYobG9vcCk7Ci19
Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl92aWV3X2RvZXNfbm90X3N0ZWFsX2ZvY3Vz
KCkKLXsKLSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotCi0gICAgR3Rr
V2lkZ2V0ICp3aW5kb3cgPSBndGtfb2Zmc2NyZWVuX3dpbmRvd19uZXcoKTsKLSAgICBHdGtXaWRn
ZXQgKndlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7Ci0gICAgR3RrV2lkZ2V0ICplbnRy
eSA9IGd0a19lbnRyeV9uZXcoKTsKLQotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi0gICAgR3Rr
V2lkZ2V0ICpib3ggPSBndGtfaGJveF9uZXcoRkFMU0UsIDApOwotI2Vsc2UKLSAgICBHdGtXaWRn
ZXQgKmJveCA9IGd0a19ib3hfbmV3KEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFMLCAwKTsKLSNl
bmRpZgotCi0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihib3gpLCB3ZWJWaWV3
KTsKLSAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGJveCksIGVudHJ5KTsKLSAg
ICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIGJveCk7Ci0gICAgZ3Rr
X3dpZGdldF9zaG93X2FsbCh3aW5kb3cpOwotCi0gICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKGVu
dHJ5KTsKLSAgICBnX2Fzc2VydChndGtfd2lkZ2V0X2lzX2ZvY3VzKGVudHJ5KSk7Ci0KLSAgICBn
X3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFD
SyhpZGxlX3F1aXRfbG9vcF9jYiksIE5VTEwpOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX2h0
bWxfc3RyaW5nKFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3KSwKLSAgICAgICAgIjxodG1sPjxib2R5
PiIKLSAgICAgICAgIiAgICA8aW5wdXQgaWQ9XCJlbnRyeVwiIHR5cGU9XCJ0ZXh0XCIvPiIKLSAg
ICAgICAgIiAgICA8c2NyaXB0PiIKLSAgICAgICAgIiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoXCJlbnRyeVwiKS5mb2N1cygpOyIKLSAgICAgICAgIiAgICA8L3NjcmlwdD4iCi0gICAg
ICAgICI8L2JvZHk+PC9odG1sPiIsICJmaWxlOi8vIik7Ci0KLSAgICBnX21haW5fbG9vcF9ydW4o
bG9vcCk7Ci0KLSAgICBnX2Fzc2VydChndGtfd2lkZ2V0X2lzX2ZvY3VzKGVudHJ5KSk7Ci0KLSAg
ICBndGtfd2lkZ2V0X2Rlc3Ryb3kod2luZG93KTsKLSAgICBnX21haW5fbG9vcF91bnJlZihsb29w
KTsKLX0KLQotc3RhdGljIGdib29sZWFuIGVtaXRLZXlTdHJva2UoV2ViS2l0V2ViVmlldyogd2Vi
VmlldykKLXsKLSAgICBHZGtFdmVudCogcHJlc3NFdmVudCA9IGdka19ldmVudF9uZXcoR0RLX0tF
WV9QUkVTUyk7Ci0gICAgcHJlc3NFdmVudC0+a2V5LmtleXZhbCA9IEdES19LRVlfZjsKLSAgICBH
ZGtXaW5kb3cqIHdpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyhHVEtfV0lER0VUKHdlYlZp
ZXcpKTsKLSAgICBwcmVzc0V2ZW50LT5rZXkud2luZG93ID0gd2luZG93OwotICAgIGdfb2JqZWN0
X3JlZihwcmVzc0V2ZW50LT5rZXkud2luZG93KTsKLQotI2lmbmRlZiBHVEtfQVBJX1ZFUlNJT05f
MgotICAgIEdka0RldmljZU1hbmFnZXIqIG1hbmFnZXIgPSBnZGtfZGlzcGxheV9nZXRfZGV2aWNl
X21hbmFnZXIoZ2RrX3dpbmRvd19nZXRfZGlzcGxheSh3aW5kb3cpKTsKLSAgICBnZGtfZXZlbnRf
c2V0X2RldmljZShwcmVzc0V2ZW50LCBnZGtfZGV2aWNlX21hbmFnZXJfZ2V0X2NsaWVudF9wb2lu
dGVyKG1hbmFnZXIpKTsKLSNlbmRpZgotCi0gICAgLy8gV2hlbiBzeW50aGVzaXppbmcgYW4gZXZl
bnQsIGFuIGludmFsaWQgaGFyZHdhcmVfa2V5Y29kZSB2YWx1ZQotICAgIC8vIGNhbiBjYXVzZSBp
dCB0byBiZSBiYWRseSBwcm9jZXNzZWQgYnkgR3RrKy4KLSAgICBHZGtLZXltYXBLZXkqIGtleXM7
Ci0gICAgZ2ludCBuX2tleXM7Ci0gICAgaWYgKGdka19rZXltYXBfZ2V0X2VudHJpZXNfZm9yX2tl
eXZhbChnZGtfa2V5bWFwX2dldF9kZWZhdWx0KCksIEdES19LRVlfZiwgJmtleXMsICZuX2tleXMp
KSB7Ci0gICAgICAgIHByZXNzRXZlbnQtPmtleS5oYXJkd2FyZV9rZXljb2RlID0ga2V5c1swXS5r
ZXljb2RlOwotICAgICAgICBnX2ZyZWUoa2V5cyk7Ci0gICAgfQotCi0gICAgR2RrRXZlbnQqIHJl
bGVhc2VFdmVudCA9IGdka19ldmVudF9jb3B5KHByZXNzRXZlbnQpOwotICAgIGd0a19tYWluX2Rv
X2V2ZW50KHByZXNzRXZlbnQpOwotICAgIGdka19ldmVudF9mcmVlKHByZXNzRXZlbnQpOwotICAg
IHJlbGVhc2VFdmVudC0+a2V5LnR5cGUgPSBHREtfS0VZX1JFTEVBU0U7Ci0gICAgZ3RrX21haW5f
ZG9fZXZlbnQocmVsZWFzZUV2ZW50KTsKLSAgICBnZGtfZXZlbnRfZnJlZShyZWxlYXNlRXZlbnQp
OwotCi0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gZW50ZXJpbmdfZnVs
bHNjcmVlbl9jYihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHT2JqZWN0KiBlbGVtZW50LCBnYm9v
bGVhbiBibG9ja2VkKQotewotICAgIGlmIChibG9ja2VkKQotICAgICAgICBnX21haW5fbG9vcF9x
dWl0KGxvb3ApOwotICAgIGVsc2UKLSAgICAgICAgZ190aW1lb3V0X2FkZCgyMDAsIChHU291cmNl
RnVuYykgZW1pdEtleVN0cm9rZSwgd2ViVmlldyk7Ci0gICAgcmV0dXJuIGJsb2NrZWQ7Ci19Ci0K
LXN0YXRpYyBnYm9vbGVhbiBsZWF2aW5nX2Z1bGxzY3JlZW5fY2IoV2ViS2l0V2ViVmlldyogd2Vi
VmlldywgR09iamVjdCogZWxlbWVudCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBnX21haW5fbG9v
cF9xdWl0KGxvb3ApOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93
ZWJraXRfd2ViX3ZpZXdfZnVsbHNjcmVlbihnY29uc3Rwb2ludGVyIGJsb2NrZWQpCi17Ci0gICAg
R3RrV2lkZ2V0KiB3aW5kb3c7Ci0gICAgR3RrV2lkZ2V0KiB3ZWJfdmlldzsKLSAgICBXZWJLaXRX
ZWJTZXR0aW5ncyAqc2V0dGluZ3M7Ci0KLSAgICB3aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtf
V0lORE9XX1RPUExFVkVMKTsKLSAgICB3ZWJfdmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsK
LQotICAgIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyhXRUJLSVRfV0VC
X1ZJRVcod2ViX3ZpZXcpKTsKLSAgICBnX29iamVjdF9zZXQoc2V0dGluZ3MsICJlbmFibGUtZnVs
bHNjcmVlbiIsIFRSVUUsIE5VTEwpOwotICAgIHdlYmtpdF93ZWJfdmlld19zZXRfc2V0dGluZ3Mo
V0VCS0lUX1dFQl9WSUVXKHdlYl92aWV3KSwgc2V0dGluZ3MpOwotCi0gICAgZ3RrX2NvbnRhaW5l
cl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB3ZWJfdmlldyk7Ci0KLSAgICBndGtfd2lkZ2V0
X3Nob3dfYWxsKHdpbmRvdyk7Ci0KLSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRS
VUUpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh3ZWJfdmlldywgImVudGVyaW5nLWZ1bGxzY3Jl
ZW4iLCBHX0NBTExCQUNLKGVudGVyaW5nX2Z1bGxzY3JlZW5fY2IpLCAoZ3BvaW50ZXIpIGJsb2Nr
ZWQpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViX3ZpZXcsICJsZWF2aW5nLWZ1bGxzY3JlZW4i
LCBHX0NBTExCQUNLKGxlYXZpbmdfZnVsbHNjcmVlbl9jYiksIE5VTEwpOwotCi0gICAgd2Via2l0
X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklFVyh3ZWJfdmlldyksICI8aHRtbD48
Ym9keT4iCi0gICAgICAgICAgICAgICAgICAgIjxzY3JpcHQ+IgotICAgICAgICAgICAgICAgICAg
ICJ2YXIgZXZlbnROYW1lID0gJ2tleXByZXNzJzsiCi0gICAgICAgICAgICAgICAgICAgImRvY3Vt
ZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBmdW5jdGlvbiAoKSB7IgotICAgICAgICAg
ICAgICAgICAgICIgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LndlYmtpdFJlcXVlc3RGdWxs
U2NyZWVuKCk7IgotICAgICAgICAgICAgICAgICAgICJ9LCBmYWxzZSk7IgotICAgICAgICAgICAg
ICAgICAgICI8L3NjcmlwdD48L2JvZHk+PC9odG1sPiIsIE5VTEwsIE5VTEwsIE5VTEwpOwotCi0g
ICAgZ190aW1lb3V0X2FkZCgxMDAsIChHU291cmNlRnVuYykgZW1pdEtleVN0cm9rZSwgV0VCS0lU
X1dFQl9WSUVXKHdlYl92aWV3KSk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAg
Z3RrX3dpZGdldF9kZXN0cm95KHdpbmRvdyk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBjaGVja01p
bWVUeXBlRm9yRmlsdGVyKEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciwgY29uc3QgZ2NoYXIqIG1pbWVU
eXBlKQotewotICAgIEd0a0ZpbGVGaWx0ZXJJbmZvIGZpbHRlcl9pbmZvOwotICAgIGZpbHRlcl9p
bmZvLmNvbnRhaW5zID0gR1RLX0ZJTEVfRklMVEVSX01JTUVfVFlQRTsKLSAgICBmaWx0ZXJfaW5m
by5taW1lX3R5cGUgPSBtaW1lVHlwZTsKLSAgICByZXR1cm4gZ3RrX2ZpbGVfZmlsdGVyX2ZpbHRl
cihmaWx0ZXIsICZmaWx0ZXJfaW5mbyk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBydW5GaWxlQ2hv
b3NlckNiTm9NdWx0aXNlbE5vTWltZShXZWJLaXRXZWJWaWV3KiB3ZWJ2aWV3LCBXZWJLaXRGaWxl
Q2hvb3NlclJlcXVlc3QqIHJlcXVlc3QsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19hc3NlcnQo
IXdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxlKHJlcXVlc3Qp
KTsKLQotICAgIGNvbnN0IGdjaGFyKiBjb25zdCogbWltZVR5cGVzID0gd2Via2l0X2ZpbGVfY2hv
b3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKHJlcXVlc3QpOwotICAgIGdfYXNzZXJ0KCFtaW1l
VHlwZXMpOwotICAgIEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciA9IHdlYmtpdF9maWxlX2Nob29zZXJf
cmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIocmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQoIWZp
bHRlcik7Ci0KLSAgICBjb25zdCBnY2hhciogY29uc3QqIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRf
ZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKHJlcXVlc3QpOwotICAgIGdf
YXNzZXJ0KCFzZWxlY3RlZEZpbGVzKTsKLQotICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci0g
ICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBydW5GaWxlQ2hvb3NlckNiTXVs
dGlzZWxOb01pbWUoV2ViS2l0V2ViVmlldyogd2VidmlldywgV2ViS2l0RmlsZUNob29zZXJSZXF1
ZXN0KiByZXF1ZXN0LCBncG9pbnRlciBkYXRhKQotewotICAgIGdfYXNzZXJ0KHdlYmtpdF9maWxl
X2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxlKHJlcXVlc3QpKTsKLQotICAgIGNv
bnN0IGdjaGFyKiBjb25zdCogbWltZVR5cGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X2dldF9taW1lX3R5cGVzKHJlcXVlc3QpOwotICAgIGdfYXNzZXJ0KCFtaW1lVHlwZXMpOwotICAg
IEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRf
bWltZV90eXBlc19maWx0ZXIocmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQoIWZpbHRlcik7Ci0gICAg
Y29uc3QgZ2NoYXIqIGNvbnN0KiBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9y
ZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0KTsKLSAgICBnX2Fzc2VydCghc2VsZWN0
ZWRGaWxlcyk7Ci0KLSAgICAvLyBTZWxlY3Qgc29tZSBmaWxlcy4KLSAgICBjb25zdCBnY2hhciog
ZmlsZXNUb1NlbGVjdFs0XSA9IHsgIi9mb28iLCAiL2Zvby9iYXIiLCAiL2Zvby9iYXIvYmF6Iiwg
MCB9OwotICAgIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9zZWxlY3RfZmlsZXMocmVxdWVz
dCwgZmlsZXNUb1NlbGVjdCk7Ci0KLSAgICAvLyBDaGVjayB0aGUgZmlsZXMgdGhhdCBoYXZlIGJl
ZW4ganVzdCBzZWxlY3RlZC4KLSAgICBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0KTsKLSAgICBnX2Fzc2VydChzZWxl
Y3RlZEZpbGVzKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1swXSwgPT0sICIv
Zm9vIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMV0sID09LCAiL2Zvby9i
YXIiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1syXSwgPT0sICIvZm9vL2Jh
ci9iYXoiKTsKLSAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxlc1szXSk7Ci0KLSAgICBnX21haW5f
bG9vcF9xdWl0KGxvb3ApOwotICAgIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4g
cnVuRmlsZUNob29zZXJDYlNlbGVjdGlvblJldGFpbmVkKFdlYktpdFdlYlZpZXcqIHdlYnZpZXcs
IFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAg
ICBjb25zdCBnY2hhciogY29uc3QqIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2Vy
X3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKHJlcXVlc3QpOwotICAgIGdfYXNzZXJ0KHNlbGVj
dGVkRmlsZXMpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzBdLCA9PSwgIi9m
b28iKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1sxXSwgPT0sICIvZm9vL2Jh
ciIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzJdLCA9PSwgIi9mb28vYmFy
L2JheiIpOwotICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZpbGVzWzNdKTsKLQotICAgIGdfbWFpbl9s
b29wX3F1aXQobG9vcCk7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBy
dW5GaWxlQ2hvb3NlckNiTm9NdWx0aXNlbEFjY2VwdFR5cGVzKFdlYktpdFdlYlZpZXcqIHdlYnZp
ZXcsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCwgZ3BvaW50ZXIgZGF0YSkKLXsK
LSAgICBnX2Fzc2VydCghd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RfbXVs
dGlwbGUocmVxdWVzdCkpOwotCi0gICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBtaW1lVHlwZXMgPSB3
ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMocmVxdWVzdCk7Ci0gICAg
Z19hc3NlcnQobWltZVR5cGVzKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIobWltZVR5cGVzWzBdLCA9
PSwgImF1ZGlvLyoiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIobWltZVR5cGVzWzFdLCA9PSwgInZp
ZGVvLyoiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIobWltZVR5cGVzWzJdLCA9PSwgImltYWdlLyoi
KTsKLSAgICBnX2Fzc2VydCghbWltZVR5cGVzWzNdKTsKLQotICAgIEd0a0ZpbGVGaWx0ZXIqIGZp
bHRlciA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIo
cmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQoR1RLX0lTX0ZJTEVfRklMVEVSKGZpbHRlcikpOwotICAg
IGdfYXNzZXJ0KGNoZWNrTWltZVR5cGVGb3JGaWx0ZXIoZmlsdGVyLCAiYXVkaW8vKiIpKTsKLSAg
ICBnX2Fzc2VydChjaGVja01pbWVUeXBlRm9yRmlsdGVyKGZpbHRlciwgInZpZGVvLyoiKSk7Ci0g
ICAgZ19hc3NlcnQoY2hlY2tNaW1lVHlwZUZvckZpbHRlcihmaWx0ZXIsICJpbWFnZS8qIikpOwot
Ci0gICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2ZpbGVfY2hv
b3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0KTsKLSAgICBnX2Fzc2VydCgh
c2VsZWN0ZWRGaWxlcyk7Ci0KLSAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwotICAgIHJldHVy
biBUUlVFOwotfQotCi12b2lkIGRvTW91c2VCdXR0b25FdmVudChHdGtXaWRnZXQqIHdpZGdldCwg
R2RrRXZlbnRUeXBlIGV2ZW50VHlwZSwgaW50IHgsIGludCB5LCB1bnNpZ25lZCBpbnQgYnV0dG9u
LCB1bnNpZ25lZCBpbnQgbW9kaWZpZXJzKQotewotICAgIGdfYXNzZXJ0KGd0a193aWRnZXRfZ2V0
X3JlYWxpemVkKHdpZGdldCkpOwotCi0gICAgR2RrRXZlbnQqIGV2ZW50ID0gZ2RrX2V2ZW50X25l
dyhldmVudFR5cGUpOwotICAgIGV2ZW50LT5idXR0b24ud2luZG93ID0gZ3RrX3dpZGdldF9nZXRf
d2luZG93KHdpZGdldCk7Ci0gICAgZ19vYmplY3RfcmVmKGV2ZW50LT5idXR0b24ud2luZG93KTsK
LQotICAgIGV2ZW50LT5idXR0b24udGltZSA9IEdES19DVVJSRU5UX1RJTUU7Ci0gICAgZXZlbnQt
PmJ1dHRvbi54ID0geDsKLSAgICBldmVudC0+YnV0dG9uLnkgPSB5OwotICAgIGV2ZW50LT5idXR0
b24uYXhlcyA9IDA7Ci0gICAgZXZlbnQtPmJ1dHRvbi5zdGF0ZSA9IG1vZGlmaWVyczsKLSAgICBl
dmVudC0+YnV0dG9uLmJ1dHRvbiA9IGJ1dHRvbjsKLQotI2lmbmRlZiBHVEtfQVBJX1ZFUlNJT05f
MgotICAgIGV2ZW50LT5idXR0b24uZGV2aWNlID0gZ2RrX2RldmljZV9tYW5hZ2VyX2dldF9jbGll
bnRfcG9pbnRlcihnZGtfZGlzcGxheV9nZXRfZGV2aWNlX21hbmFnZXIoZ3RrX3dpZGdldF9nZXRf
ZGlzcGxheSh3aWRnZXQpKSk7Ci0jZW5kaWYKLQotICAgIGludCB4Um9vdCwgeVJvb3Q7Ci0gICAg
Z2RrX3dpbmRvd19nZXRfcm9vdF9jb29yZHMoZ3RrX3dpZGdldF9nZXRfd2luZG93KHdpZGdldCks
IHgsIHksICZ4Um9vdCwgJnlSb290KTsKLSAgICBldmVudC0+YnV0dG9uLnhfcm9vdCA9IHhSb290
OwotICAgIGV2ZW50LT5idXR0b24ueV9yb290ID0geVJvb3Q7Ci0gICAgZ3RrX21haW5fZG9fZXZl
bnQoZXZlbnQpOwotfQotCi1zdGF0aWMgdm9pZCBjbGlja01vdXNlQnV0dG9uKEd0a1dpZGdldCog
d2lkZ2V0LCBpbnQgeCwgaW50IHksIHVuc2lnbmVkIGludCBidXR0b24sIHVuc2lnbmVkIGludCBt
b2RpZmllcnMpCi17Ci0gICAgZG9Nb3VzZUJ1dHRvbkV2ZW50KHdpZGdldCwgR0RLX0JVVFRPTl9Q
UkVTUywgeCwgeSwgYnV0dG9uLCBtb2RpZmllcnMpOwotICAgIGRvTW91c2VCdXR0b25FdmVudCh3
aWRnZXQsIEdES19CVVRUT05fUkVMRUFTRSwgeCwgeSwgYnV0dG9uLCBtb2RpZmllcnMpOwotfQot
Ci1zdGF0aWMgZ2Jvb2xlYW4gY2xpY2tNb3VzZUJ1dHRvbkFuZFdhaXRGb3JGaWxlQ2hvb3NlclJl
cXVlc3QoV2ViS2l0V2ViVmlldyogd2ViVmlldykKLXsKLSAgICBjbGlja01vdXNlQnV0dG9uKEdU
S19XSURHRVQod2ViVmlldyksIDUsIDUsIDEsIDApOwotICAgIHJldHVybiBUUlVFOwotfQotCi1z
dGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfdmlld19maWxlX2Nob29zZXIoKQotewotICAgIGNv
bnN0IGdjaGFyKiBodG1sRm9ybWF0QmFzZSA9ICI8aHRtbD48Ym9keT4iCi0gICAgICAgICAgICAi
PGlucHV0IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjA7bWFyZ2luOjA7cGFk
ZGluZzowJyB0eXBlPSdmaWxlJyAlcy8+IgotICAgICAgICAgICAgIjwvYm9keT48L2h0bWw+IjsK
LQotICAgIEd0a1dpZGdldCogd2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BM
RVZFTCk7Ci0gICAgR3RrV2lkZ2V0KiB3ZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygpOwot
ICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgd2ViVmlldyk7Ci0g
ICAgZ3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpOwotCi0gICAgbG9vcCA9IGdfbWFpbl9sb29w
X25ldyhOVUxMLCBUUlVFKTsKLQotICAgIC8vIE11bHRpcGxlIHNlbGVjdGlvbnMgbm90IGFsbG93
ZWQsIG5vIE1JTUUgZmlsdGVyaW5nLgotICAgIGd1bG9uZyBoYW5kbGVyID0gZ19zaWduYWxfY29u
bmVjdCh3ZWJWaWV3LCAicnVuLWZpbGUtY2hvb3NlciIsIEdfQ0FMTEJBQ0socnVuRmlsZUNob29z
ZXJDYk5vTXVsdGlzZWxOb01pbWUpLCBOVUxMKTsKLSAgICBnY2hhciogaHRtbEZvcm1hdCA9IGdf
c3RyZHVwX3ByaW50ZihodG1sRm9ybWF0QmFzZSwgIiIpOwotICAgIHdlYmtpdF93ZWJfdmlld19s
b2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldyksIGh0bWxGb3JtYXQsIE5VTEwsIE5V
TEwsIE5VTEwpOwotICAgIGdfZnJlZShodG1sRm9ybWF0KTsKLQotICAgIGdfdGltZW91dF9hZGQo
MTAwLCAoR1NvdXJjZUZ1bmMpIGNsaWNrTW91c2VCdXR0b25BbmRXYWl0Rm9yRmlsZUNob29zZXJS
ZXF1ZXN0LCBXRUJLSVRfV0VCX1ZJRVcod2ViVmlldykpOwotICAgIGdfbWFpbl9sb29wX3J1bihs
b29wKTsKLQotICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdCh3ZWJWaWV3LCBoYW5kbGVy
KTsKLQotICAgIC8vIE11bHRpcGxlIHNlbGVjdGlvbnMgYWxsb3dlZCwgbm8gTUlNRSBmaWx0ZXJp
bmcsIHNvbWUgcHJlLXNlbGVjdGVkIGZpbGVzLgotICAgIGhhbmRsZXIgPSBnX3NpZ25hbF9jb25u
ZWN0KHdlYlZpZXcsICJydW4tZmlsZS1jaG9vc2VyIiwgR19DQUxMQkFDSyhydW5GaWxlQ2hvb3Nl
ckNiTXVsdGlzZWxOb01pbWUpLCBOVUxMKTsKLSAgICBodG1sRm9ybWF0ID0gZ19zdHJkdXBfcHJp
bnRmKGh0bWxGb3JtYXRCYXNlLCAibXVsdGlwbGUiKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9h
ZF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpLCBodG1sRm9ybWF0LCBOVUxMLCBOVUxM
LCBOVUxMKTsKLSAgICBnX2ZyZWUoaHRtbEZvcm1hdCk7Ci0KLSAgICBnX3RpbWVvdXRfYWRkKDEw
MCwgKEdTb3VyY2VGdW5jKSBjbGlja01vdXNlQnV0dG9uQW5kV2FpdEZvckZpbGVDaG9vc2VyUmVx
dWVzdCwgV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpKTsKLSAgICBnX21haW5fbG9vcF9ydW4obG9v
cCk7Ci0KLSAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3Qod2ViVmlldywgaGFuZGxlcik7
Ci0KLSAgICAvLyBQZXJmb3JtIGFub3RoZXIgcmVxdWVzdCB0byBjaGVjayBpZiB0aGUgbGlzdCBv
ZiBmaWxlcyBzZWxlY3RlZAotICAgIC8vIGluIHRoZSBwcmV2aW91cyBzdGVwIGFwcGVhcnMgbm93
IGFzIHBhcnQgb2YgdGhlIG5ldyByZXF1ZXN0LgotICAgIGhhbmRsZXIgPSBnX3NpZ25hbF9jb25u
ZWN0KHdlYlZpZXcsICJydW4tZmlsZS1jaG9vc2VyIiwgR19DQUxMQkFDSyhydW5GaWxlQ2hvb3Nl
ckNiU2VsZWN0aW9uUmV0YWluZWQpLCBOVUxMKTsKLSAgICBnX3RpbWVvdXRfYWRkKDEwMCwgKEdT
b3VyY2VGdW5jKSBjbGlja01vdXNlQnV0dG9uQW5kV2FpdEZvckZpbGVDaG9vc2VyUmVxdWVzdCwg
V0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpKTsKLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0K
LSAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3Qod2ViVmlldywgaGFuZGxlcik7Ci0KLSAg
ICAvLyBNdWx0aXBsZSBzZWxlY3Rpb25zIG5vdCBhbGxvd2VkLCBvbmx5IGFjY2VwdCBpbWFnZXMs
IGF1ZGlvIGFuZCB2aWRlbyBmaWxlcy4KLSAgICBoYW5kbGVyID0gZ19zaWduYWxfY29ubmVjdCh3
ZWJWaWV3LCAicnVuLWZpbGUtY2hvb3NlciIsIEdfQ0FMTEJBQ0socnVuRmlsZUNob29zZXJDYk5v
TXVsdGlzZWxBY2NlcHRUeXBlcyksIE5VTEwpOwotICAgIGh0bWxGb3JtYXQgPSBnX3N0cmR1cF9w
cmludGYoaHRtbEZvcm1hdEJhc2UsICJhY2NlcHQ9J2F1ZGlvLyosdmlkZW8vKixpbWFnZS8qJyIp
OwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcod2ViVmll
dyksIGh0bWxGb3JtYXQsIE5VTEwsIE5VTEwsIE5VTEwpOwotICAgIGdfZnJlZShodG1sRm9ybWF0
KTsKLQotICAgIGdfdGltZW91dF9hZGQoMTAwLCAoR1NvdXJjZUZ1bmMpIGNsaWNrTW91c2VCdXR0
b25BbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0LCBXRUJLSVRfV0VCX1ZJRVcod2ViVmlldykp
OwotICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLQotICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlz
Y29ubmVjdCh3ZWJWaWV3LCBoYW5kbGVyKTsKLSAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kod2luZG93
KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3ZpZXdfc291cmNlX21vZGUoKQot
ewotICAgIEd0a1dpZGdldCogd2ViX3ZpZXc7Ci0KLSAgICB3ZWJfdmlldyA9IHdlYmtpdF93ZWJf
dmlld19uZXcoKTsKLQotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhXRUJLSVRfV0VC
X1ZJRVcod2ViX3ZpZXcpLCAiPGh0bWw+PGJvZHk+PC9ib2R5PjwvaHRtbD4iLCBOVUxMLCBOVUxM
LCBOVUxMKTsKLQotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfZ2V0X3ZpZXdfc291cmNl
X21vZGUoV0VCS0lUX1dFQl9WSUVXKHdlYl92aWV3KSkpOwotCi0gICAgd2Via2l0X3dlYl92aWV3
X3NldF92aWV3X3NvdXJjZV9tb2RlKFdFQktJVF9XRUJfVklFVyh3ZWJfdmlldyksIFRSVUUpOwot
Ci0gICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dldF92aWV3X3NvdXJjZV9tb2RlKFdFQktJ
VF9XRUJfVklFVyh3ZWJfdmlldykpKTsKLQotICAgIHdlYmtpdF93ZWJfdmlld19zZXRfdmlld19z
b3VyY2VfbW9kZShXRUJLSVRfV0VCX1ZJRVcod2ViX3ZpZXcpLCBGQUxTRSk7Ci0KLSAgICBnX2Fz
c2VydCghd2Via2l0X3dlYl92aWV3X2dldF92aWV3X3NvdXJjZV9tb2RlKFdFQktJVF9XRUJfVklF
Vyh3ZWJfdmlldykpKTsKLQotICAgIGd0a193aWRnZXRfZGVzdHJveSh3ZWJfdmlldyk7Ci19Ci0K
LWludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKLXsKLSAgICBTb3VwU2VydmVyKiBzZXJ2
ZXI7Ci0gICAgU291cFVSSSogc291cF91cmk7Ci0KLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAm
YXJndiwgTlVMTCk7Ci0KLSAgICAvKiBIb3BlZnVsbHkgbWFrZSB0ZXN0IGluZGVwZW5kZW50IG9m
IHRoZSBwYXRoIGl0J3MgY2FsbGVkIGZyb20uICovCi0gICAgdGVzdHV0aWxzX3JlbGF0aXZlX2No
ZGlyKCJTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy9yZXNvdXJjZXMvdGVzdC5odG1sIiwgYXJndlsw
XSk7Ci0KLSAgICBzZXJ2ZXIgPSBzb3VwX3NlcnZlcl9uZXcoU09VUF9TRVJWRVJfUE9SVCwgMCwg
TlVMTCk7Ci0gICAgc291cF9zZXJ2ZXJfcnVuX2FzeW5jKHNlcnZlcik7Ci0KLSAgICBzb3VwX3Nl
cnZlcl9hZGRfaGFuZGxlcihzZXJ2ZXIsIE5VTEwsIHNlcnZlcl9jYWxsYmFjaywgTlVMTCwgTlVM
TCk7Ci0KLSAgICBzb3VwX3VyaSA9IHNvdXBfdXJpX25ldygiaHR0cDovLzEyNy4wLjAuMS8iKTsK
LSAgICBzb3VwX3VyaV9zZXRfcG9ydChzb3VwX3VyaSwgc291cF9zZXJ2ZXJfZ2V0X3BvcnQoc2Vy
dmVyKSk7Ci0KLSAgICBiYXNlX3VyaSA9IHNvdXBfdXJpX3RvX3N0cmluZyhzb3VwX3VyaSwgRkFM
U0UpOwotICAgIHNvdXBfdXJpX2ZyZWUoc291cF91cmkpOwotCi0gICAgZ190ZXN0X2J1Z19iYXNl
KCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJr
aXQvd2Vidmlldy9pY29uLXVyaSIsIHRlc3Rfd2Via2l0X3dlYl92aWV3X2ljb25fdXJpKTsKLSAg
ICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vidmlldy9hZGp1c3RtZW50cyIsIHRlc3Rfd2Vi
a2l0X3dlYl92aWV3X2FkanVzdG1lbnRzKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQv
d2Vidmlldy9kZXN0cm95IiwgdGVzdF93ZWJraXRfd2ViX3ZpZXdfZGVzdHJveSk7Ci0gICAgZ190
ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnZpZXcvZ3JhYl9mb2N1cyIsIHRlc3Rfd2Via2l0X3dl
Yl92aWV3X2dyYWJfZm9jdXMpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJ2aWV3
L3dpbmRvdy1mZWF0dXJlcyIsIHRlc3Rfd2Via2l0X3dlYl92aWV3X3dpbmRvd19mZWF0dXJlcyk7
Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnZpZXcvd2Vidmlldy1pbi1vZmZzY3Jl
ZW4td2luZG93LWRvZXMtbm90LWNyYXNoIiwgdGVzdF93ZWJraXRfd2ViX3ZpZXdfaW5fb2Zmc2Ny
ZWVuX3dpbmRvd19kb2VzX25vdF9jcmFzaCk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0
L3dlYnZpZXcvd2Vidmlldy1kb2VzLW5vdC1zdGVhbC1mb2N1cyIsIHRlc3Rfd2Via2l0X3dlYl92
aWV3X2RvZXNfbm90X3N0ZWFsX2ZvY3VzKTsKLSAgICBnX3Rlc3RfYWRkX2RhdGFfZnVuYygiL3dl
YmtpdC93ZWJ2aWV3L2Z1bGxzY3JlZW4iLCBHSU5UX1RPX1BPSU5URVIoRkFMU0UpLCB0ZXN0X3dl
YmtpdF93ZWJfdmlld19mdWxsc2NyZWVuKTsKLSAgICBnX3Rlc3RfYWRkX2RhdGFfZnVuYygiL3dl
YmtpdC93ZWJ2aWV3L2Z1bGxzY3JlZW4tYmxvY2tlZCIsIEdJTlRfVE9fUE9JTlRFUihUUlVFKSwg
dGVzdF93ZWJraXRfd2ViX3ZpZXdfZnVsbHNjcmVlbik7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIv
d2Via2l0L3dlYnZpZXcvZmlsZS1jaG9vc2VyIiwgdGVzdF93ZWJraXRfd2ViX3ZpZXdfZmlsZV9j
aG9vc2VyKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vidmlldy9zb3VyY2UtbW9k
ZSIsIHRlc3Rfd2Via2l0X3dlYl92aWV3X3NvdXJjZV9tb2RlKTsKLQotICAgIHJldHVybiBnX3Rl
c3RfcnVuICgpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdp
bmRvdy5jIGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdpbmRvdy5jCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA1ZWRhNDdiLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQv
Z3RrL3Rlc3RzL3Rlc3R3aW5kb3cuYworKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA5IENvbGxhYm9yYSBMdGQuCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgotCi1z
dGF0aWMgdm9pZCBub3RpZnlfbG9hZF9zdGF0dXNfY2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcs
IEdQYXJhbVNwZWMqIHBzcGVjLCBncG9pbnRlciBkYXRhKQotewotICAgIGlmICh3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYl92aWV3KSA9PSBXRUJLSVRfTE9BRF9GSU5JU0hFRCkg
ewotICAgICAgICBHTWFpbkxvb3AqIGxvb3AgPSAoR01haW5Mb29wKilkYXRhOwotCi0gICAgICAg
IGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dl
YmtpdF93aW5kb3dfc2Nyb2xsYmFyX3BvbGljeSh2b2lkKQotewotICAgIEdNYWluTG9vcCogbG9v
cDsKLSAgICBHdGtXaWRnZXQqIHNjcm9sbGVkV2luZG93OwotICAgIEd0a1dpZGdldCogd2ViVmll
dzsKLSAgICBXZWJLaXRXZWJGcmFtZSogbWFpbkZyYW1lOwotICAgIEd0a1BvbGljeVR5cGUgaG9y
aXpvbnRhbFBvbGljeTsKLSAgICBHdGtQb2xpY3lUeXBlIHZlcnRpY2FsUG9saWN5OwotCi0gICAg
bG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLQotICAgIHNjcm9sbGVkV2luZG93
ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19uZXcoTlVMTCwgTlVMTCk7Ci0gICAgZ3RrX3Njcm9sbGVk
X3dpbmRvd19zZXRfcG9saWN5KEdUS19TQ1JPTExFRF9XSU5ET1coc2Nyb2xsZWRXaW5kb3cpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfUE9MSUNZX0FVVE9NQVRJQywg
R1RLX1BPTElDWV9BVVRPTUFUSUMpOwotCi0gICAgd2ViVmlldyA9IHdlYmtpdF93ZWJfdmlld19u
ZXcoKTsKLSAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKLQotICAgIGdfc2lnbmFsX2Nv
bm5lY3Qod2ViVmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLAotICAgICAgICAgICAgICAgICAg
ICAgR19DQUxMQkFDSyhub3RpZnlfbG9hZF9zdGF0dXNfY2IpLCBsb29wKTsKLQotICAgIGd0a19j
b250YWluZXJfYWRkKEdUS19DT05UQUlORVIoc2Nyb2xsZWRXaW5kb3cpLCB3ZWJWaWV3KTsKLQot
ICAgIG1haW5GcmFtZSA9IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZShXRUJLSVRfV0VC
X1ZJRVcod2ViVmlldykpOwotCi0gICAgLyogVGVzdCB3ZSBjb3JyZWN0bHkgYXBwbHkgcG9saWN5
IGZvciBub3QgaGF2aW5nIHNjcm9sbGJhcnM7IFRoaXMKLSAgICAgKiBjYXNlIGlzIHNwZWNpYWws
IGJlY2F1c2Ugd2UgdHVybiB0aGUgcG9saWN5IGZyb20gTkVWRVIgdG8KLSAgICAgKiBBVVRPTUFU
SUMsIHNpbmNlIHdlIGNhbm5vdCBlYXNpbHkgcmVwcmVzZW50IHRoZSBzYW1lIHRoaW5nCi0gICAg
ICogdXNpbmcgR3RrU2Nyb2xsZWRXaW5kb3cgKi8KLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9o
dG1sX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldyksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIjxodG1sPjxib2R5PldlYktpdCE8L2JvZHk+PHNjcmlwdD5kb2N1
bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdLnN0eWxlLm92ZXJmbG93ID0gJ2hp
ZGRlbic7PC9zY3JpcHQ+PC9odG1sPiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImZpbGU6Ly8iKTsKLQotICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLQotICAgIGd0
a19zY3JvbGxlZF93aW5kb3dfZ2V0X3BvbGljeShHVEtfU0NST0xMRURfV0lORE9XKHNjcm9sbGVk
V2luZG93KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhvcml6b250YWxQ
b2xpY3ksICZ2ZXJ0aWNhbFBvbGljeSk7Ci0KLSAgICBnX2Fzc2VydChob3Jpem9udGFsUG9saWN5
ID09IEdUS19QT0xJQ1lfQVVUT01BVElDKTsKLSAgICBnX2Fzc2VydCh2ZXJ0aWNhbFBvbGljeSA9
PSBHVEtfUE9MSUNZX0FVVE9NQVRJQyk7Ci0KLSAgICBnX2Fzc2VydChHVEtfUE9MSUNZX05FVkVS
ID09IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X2hvcml6b250YWxfc2Nyb2xsYmFyX3BvbGljeShtYWlu
RnJhbWUpKTsKLSAgICBnX2Fzc2VydChHVEtfUE9MSUNZX05FVkVSID09IHdlYmtpdF93ZWJfZnJh
bWVfZ2V0X3ZlcnRpY2FsX3Njcm9sbGJhcl9wb2xpY3kobWFpbkZyYW1lKSk7Ci0KLSAgICAvKiBU
ZXN0IHdlIGNvcnJlY3RseSBhcHBseSBwb2xpY3kgZm9yIGFsd2F5cyBoYXZpbmcgc2Nyb2xsYmFy
cyAqLwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX2h0bWxfc3RyaW5nKFdFQktJVF9XRUJfVklF
Vyh3ZWJWaWV3KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGh0bWw+
PGJvZHk+V2ViS2l0ITwvYm9keT48c2NyaXB0PmRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1l
KCdib2R5JylbMF0uc3R5bGUub3ZlcmZsb3cgPSAnc2Nyb2xsJzs8L3NjcmlwdD48L2h0bWw+IiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZTovLyIpOwotCi0gICAg
Z19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAgZ3RrX3Njcm9sbGVkX3dpbmRvd19nZXRfcG9s
aWN5KEdUS19TQ1JPTExFRF9XSU5ET1coc2Nyb2xsZWRXaW5kb3cpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmaG9yaXpvbnRhbFBvbGljeSwgJnZlcnRpY2FsUG9saWN5KTsK
LQotICAgIGdfYXNzZXJ0KGhvcml6b250YWxQb2xpY3kgPT0gR1RLX1BPTElDWV9BTFdBWVMpOwot
ICAgIGdfYXNzZXJ0KHZlcnRpY2FsUG9saWN5ID09IEdUS19QT0xJQ1lfQUxXQVlTKTsKLQotICAg
IGdfYXNzZXJ0KGhvcml6b250YWxQb2xpY3kgPT0gd2Via2l0X3dlYl9mcmFtZV9nZXRfaG9yaXpv
bnRhbF9zY3JvbGxiYXJfcG9saWN5KG1haW5GcmFtZSkpOwotICAgIGdfYXNzZXJ0KHZlcnRpY2Fs
UG9saWN5ID09IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3ZlcnRpY2FsX3Njcm9sbGJhcl9wb2xpY3ko
bWFpbkZyYW1lKSk7Ci0KLSAgICAvKiBUZXN0IHdlIGNvcnJlY3RseSBhcHBseSBwb2xpY3kgZm9y
IGhhdmluZyBzY3JvbGxiYXJzIHdoZW4gbmVlZGVkICovCi0gICAgd2Via2l0X3dlYl92aWV3X2xv
YWRfaHRtbF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICI8aHRtbD48Ym9keT5XZWJLaXQhPC9ib2R5PjxzY3JpcHQ+
ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHknKVswXS5zdHlsZS5vdmVyZmxvdyA9
ICdhdXRvJzs8L3NjcmlwdD48L2h0bWw+IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiZmlsZTovLyIpOwotCi0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAg
Z3RrX3Njcm9sbGVkX3dpbmRvd19nZXRfcG9saWN5KEdUS19TQ1JPTExFRF9XSU5ET1coc2Nyb2xs
ZWRXaW5kb3cpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaG9yaXpvbnRh
bFBvbGljeSwgJnZlcnRpY2FsUG9saWN5KTsKLQotICAgIGdfYXNzZXJ0KGhvcml6b250YWxQb2xp
Y3kgPT0gR1RLX1BPTElDWV9BVVRPTUFUSUMpOwotICAgIGdfYXNzZXJ0KHZlcnRpY2FsUG9saWN5
ID09IEdUS19QT0xJQ1lfQVVUT01BVElDKTsKLQotICAgIGdfYXNzZXJ0KGhvcml6b250YWxQb2xp
Y3kgPT0gd2Via2l0X3dlYl9mcmFtZV9nZXRfaG9yaXpvbnRhbF9zY3JvbGxiYXJfcG9saWN5KG1h
aW5GcmFtZSkpOwotICAgIGdfYXNzZXJ0KHZlcnRpY2FsUG9saWN5ID09IHdlYmtpdF93ZWJfZnJh
bWVfZ2V0X3ZlcnRpY2FsX3Njcm9sbGJhcl9wb2xpY3kobWFpbkZyYW1lKSk7Ci0KLSAgICBnX29i
amVjdF91bnJlZih3ZWJWaWV3KTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2
KQotewotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLQotICAgIGdfdGVz
dF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0gICAgZ190ZXN0X2FkZF9m
dW5jKCIvd2Via2l0L3dpbmRvdy9zY3JvbGxiYXJfcG9saWN5IiwgdGVzdF93ZWJraXRfd2luZG93
X3Njcm9sbGJhcl9wb2xpY3kpOwotICAgIHJldHVybiBnX3Rlc3RfcnVuICgpOwotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CmluZGV4IDNjMTMzN2EuLmRjYjFjYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAx
NC0wMS0wMyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAg
ICAgICAgW0dUS10gTW92ZSBhbGwgR1RLL0dPYmplY3QgdW5pdCB0ZXN0cyB0byBUb29scy9UZXN0
V2ViS2l0QVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMjYzNDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0NNYWtlTGlzdHMudHh0OiBSZW1vdmVkLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtOiBSZW1vdmVkLgor
CiAyMDE0LTAxLTAzICBQaW90ciBHcmFkICA8cC5ncmFkQHNhbXN1bmcuY29tPgogCiAgICAgICAg
IEJ1aWxkIGJyYWtlIGFmdGVyIDE2MTA0NSBvbiBFRkwgcG9ydCB3aXRoIFdlYktpdDIgYW5kIGdj
YyA0LjYuMwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvQWNjZXNzaWJpbGl0eVRlc3RTZXJ2ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvQWNjZXNzaWJpbGl0eVRlc3RTZXJ2ZXIuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBiNTUwMDUwLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlh
IFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiwxIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNs
dWRlIDx3ZWJraXQyL3dlYmtpdDIuaD4KLQotc3RhdGljIHZvaWQgbG9hZENoYW5nZWRDYWxsYmFj
ayhXZWJLaXRXZWJWaWV3KiwgV2ViS2l0TG9hZEV2ZW50IGxvYWRFdmVudCwgZ3BvaW50ZXIpCi17
Ci0gICAgLy8gU2VuZCBhIG1lc3NhZ2UgdG8gdGhlIHBhcmVudCBwcm9jZXNzIHdoZW4gd2UncmUg
cmVhZHkuCi0gICAgaWYgKGxvYWRFdmVudCA9PSBXRUJLSVRfTE9BRF9GSU5JU0hFRCkKLSAgICAg
ICAgZ19wcmludCgiT0siKTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQot
ewotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBBVEsgYnJpZGdlIGlzIGxvYWRlZC4KLSAgICBn
X3NldGVudigiR1RLX01PRFVMRVMiLCAiYXRrLWJyaWRnZSIsIFRSVUUpOwotCi0gICAgZ3RrX2lu
aXQoJmFyZ2MsICZhcmd2KTsKLQotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRf
V0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9h
ZF9odG1sKHdlYlZpZXcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGh0bWw+Igot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgPGJvZHk+IgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIiAgIDxoMT5UaGlzIGlzIGEgdGVzdDwvaDE+IgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIiAgIDxwPlRoaXMgaXMgYSBwYXJhZ3JhcGggd2l0aCBzb21lIHBs
YWluIHRleHQuPC9wPiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICA8cD5UaGlz
IHBhcmFncmFwaCBjb250YWlucyA8YSBocmVmPVwiaHR0cDovL3d3dy53ZWJraXRndGsub3JnXCI+
YSBsaW5rPC9hPiBpbiB0aGUgbWlkZGxlLjwvcD4iCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiICA8L2JvZHk+IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjwvaHRtbD4i
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7Ci0KLSAgICBHdGtXaWRnZXQqIHdp
bmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOwotICAgIGd0a19jb250
YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgR1RLX1dJREdFVCh3ZWJWaWV3KSk7Ci0g
ICAgZ3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh3
aW5kb3csICJkZWxldGUtZXZlbnQiLCBHX0NBTExCQUNLKGd0a19tYWluX3F1aXQpLCAwKTsKLSAg
ICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJsb2FkLWNoYW5nZWQiLCBHX0NBTExCQUNLKGxv
YWRDaGFuZ2VkQ2FsbGJhY2spLCAwKTsKLQotICAgIGd0a19tYWluKCk7Ci19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9DTWFrZUxpc3RzLnR4dCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0NNYWtlTGlzdHMudHh0CmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiY2IwY2ZkLi4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0NNYWtlTGlzdHMudHh0CisrKyAvZGV2
L251bGwKQEAgLTEsMTAyICswLDAgQEAKLXNldChURVNUX0xJQlJBUllfRElSICR7Q01BS0VfTElC
UkFSWV9PVVRQVVRfRElSRUNUT1JZfS9XZWJLaXQyR09iamVjdEFQSVRlc3RzKQotc2V0KFRFU1Rf
UkVTT1VSQ0VTX0RJUiAke0NNQUtFX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWX0vcmVzb3VyY2Vz
KQotZmlsZShNQUtFX0RJUkVDVE9SWSAke1RFU1RfUkVTT1VSQ0VTX0RJUn0pCi0KLWFkZF9kZWZp
bml0aW9ucygKLSAgICAtRFdFQktJVF9URVNUX1BMVUdJTl9ESVI9IiR7Q01BS0VfTElCUkFSWV9P
VVRQVVRfRElSRUNUT1JZfSIKLSAgICAtRFdFQktJVF9FWEVDX1BBVEg9IiR7Q01BS0VfUlVOVElN
RV9PVVRQVVRfRElSRUNUT1JZfSIKLSAgICAtRFdFQktJVF9TUkNfRElSPSIke0NNQUtFX1NPVVJD
RV9ESVJ9IgotICAgIC1EV0VCS0lUX1RFU1RfV0VCX0VYVEVOU0lPTlNfRElSPSIke1RFU1RfTElC
UkFSWV9ESVJ9IgotICAgIC1EV0VCS0lUX0lOSkVDVEVEX0JVTkRMRV9QQVRIPSIke0NNQUtFX0xJ
QlJBUllfT1VUUFVUX0RJUkVDVE9SWX0iCi0pCi0KLWluY2x1ZGVfZGlyZWN0b3JpZXMoCi0gICAg
JHtDTUFLRV9CSU5BUllfRElSfQotICAgICR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNlCi0gICAg
JHtDTUFLRV9TT1VSQ0VfRElSfS9Tb3VyY2UvV1RGCi0gICAgJHtERVJJVkVEX1NPVVJDRVNfRElS
fQotICAgICR7REVSSVZFRF9TT1VSQ0VTX1dFQktJVDJHVEtfRElSfQotICAgICR7Rk9SV0FSRElO
R19IRUFERVJTX0RJUn0KLSAgICAke0ZPUldBUkRJTkdfSEVBREVSU19XRUJLSVQyR1RLX0RJUn0K
LSAgICAke0ZPUldBUkRJTkdfSEVBREVSU19XRUJLSVQyR1RLX0VYVEVOU0lPTl9ESVJ9Ci0gICAg
JHtBVFNQSV9JTkNMVURFX0RJUlN9Ci0gICAgJHtHTElCX0lOQ0xVREVfRElSU30KLSAgICAke0dU
SzNfSU5DTFVERV9ESVJTfQotICAgICR7TElCU09VUF9JTkNMVURFX0RJUlN9Ci0pCi0KLWFkZF9s
aWJyYXJ5KFdlYktpdDJBUElUZXN0Q29yZSBTVEFUSUMKLSAgICBMb2FkVHJhY2tpbmdUZXN0LmNw
cAotICAgIFdlYktpdFRlc3RCdXMuY3BwCi0gICAgV2ViS2l0VGVzdFNlcnZlci5jcHAKLSAgICBX
ZWJQcm9jZXNzVGVzdFJ1bm5lci5jcHAKLSAgICBUZXN0TWFpbi5jcHAKLSAgICBXZWJWaWV3VGVz
dC5jcHAKLSkKLWFkZF9kZXBlbmRlbmNpZXMoV2ViS2l0MkFQSVRlc3RDb3JlIFdlYktpdDIpCi0K
LWFkZF9jdXN0b21fdGFyZ2V0KHRlc3QtZ3Jlc291cmNlLWJ1bmRsZQotICAgIERFUEVORFMgcmVz
b3VyY2VzL3dlYmtpdDJndGstdGVzdHMuZ3Jlc291cmNlLnhtbAotICAgICAgICAgICAgcmVzb3Vy
Y2VzL2xpbmstdGl0bGUuanMKLSAgICBDT01NQU5EIGdsaWItY29tcGlsZS1yZXNvdXJjZXMgLS10
YXJnZXQ9JHtURVNUX1JFU09VUkNFU19ESVJ9L3dlYmtpdDJndGstdGVzdHMtcmVzb3VyY2VzLmdy
ZXNvdXJjZSAtLXNvdXJjZWRpcj0ke0NNQUtFX1NPVVJDRV9ESVJ9ICR7Q01BS0VfU09VUkNFX0RJ
Un0vU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvcmVzb3VyY2VzL3dlYmtp
dDJndGstdGVzdHMuZ3Jlc291cmNlLnhtbAotKQotCi1tYWNybyhBRERfV0syX1RFU1RfV0VCX0VY
VEVOU0lPTiBleHRlbnNpb25fbmFtZSkKLSAgICBhZGRfbGlicmFyeSgke2V4dGVuc2lvbl9uYW1l
fSBNT0RVTEUgJHtBUkdOfSkKLSAgICBzZXRfcHJvcGVydHkoCi0gICAgICAgIFRBUkdFVCAke2V4
dGVuc2lvbl9uYW1lfQotICAgICAgICBBUFBFTkQKLSAgICAgICAgUFJPUEVSVFkgQ09NUElMRV9E
RUZJTklUSU9OUyBXRUJLSVQyX0NPTVBJTEFUSU9OCi0gICAgKQotICAgIHNldF90YXJnZXRfcHJv
cGVydGllcygke2V4dGVuc2lvbl9uYW1lfSBQUk9QRVJUSUVTCi0gICAgICAgIExJQlJBUllfT1VU
UFVUX0RJUkVDVE9SWSAke1RFU1RfTElCUkFSWV9ESVJ9Ci0gICAgKQotZW5kbWFjcm8oKQotCi1t
YWNybyhBRERfV0syX1RFU1QgdGVzdF9uYW1lKQotICAgIGFkZF9leGVjdXRhYmxlKCR7dGVzdF9u
YW1lfSAke0FSR059KQotICAgIGFkZF9kZXBlbmRlbmNpZXMoJHt0ZXN0X25hbWV9Ci0gICAgICAg
IHRlc3QtZ3Jlc291cmNlLWJ1bmRsZQotICAgICAgICBXZWJFeHRlbnNpb25UZXN0Ci0gICAgKQot
ICAgIHRhcmdldF9saW5rX2xpYnJhcmllcygke3Rlc3RfbmFtZX0KLSAgICAgICAgSmF2YVNjcmlw
dENvcmUKLSAgICAgICAgV2ViS2l0MgotICAgICAgICBXZWJLaXQyQVBJVGVzdENvcmUKLSAgICAg
ICAgJHtBVFNQSV9MSUJSQVJJRVN9Ci0gICAgICAgICR7R0xJQl9MSUJSQVJJRVN9Ci0gICAgICAg
ICR7R1RLM19MSUJSQVJJRVN9Ci0gICAgICAgICR7TElCU09VUF9MSUJSQVJJRVN9Ci0gICAgKQot
ICAgIHNldF90YXJnZXRfcHJvcGVydGllcygke3Rlc3RfbmFtZX0gUFJPUEVSVElFUwotICAgICAg
ICBSVU5USU1FX09VVFBVVF9ESVJFQ1RPUlkgJHtDTUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RP
Ull9L1dlYktpdDJHT2JqZWN0QVBJVGVzdHMKLSAgICApCi1lbmRtYWNybygpCi0KLUFERF9XSzJf
VEVTVF9XRUJfRVhURU5TSU9OKFdlYkV4dGVuc2lvblRlc3QgV2ViRXh0ZW5zaW9uVGVzdC5jcHAp
Ci1BRERfV0syX1RFU1RfV0VCX0VYVEVOU0lPTihXZWJQcm9jZXNzVGVzdCBET01Ob2RlVGVzdC5j
cHAgRnJhbWVUZXN0LmNwcCBXZWJQcm9jZXNzVGVzdC5jcHApCi0KLUFERF9XSzJfVEVTVChJbnNw
ZWN0b3JUZXN0U2VydmVyIEluc3BlY3RvclRlc3RTZXJ2ZXIuY3BwKQotQUREX1dLMl9URVNUKFRl
c3RCYWNrRm9yd2FyZExpc3QgVGVzdEJhY2tGb3J3YXJkTGlzdC5jcHApCi1BRERfV0syX1RFU1Qo
VGVzdENvbnRleHRNZW51IFRlc3RDb250ZXh0TWVudS5jcHApCi1BRERfV0syX1RFU1QoVGVzdENv
b2tpZU1hbmFnZXIgVGVzdENvb2tpZU1hbmFnZXIuY3BwKQotQUREX1dLMl9URVNUKFRlc3RET01O
b2RlIFRlc3RET01Ob2RlLmNwcCkKLUFERF9XSzJfVEVTVChUZXN0RG93bmxvYWRzIFRlc3REb3du
bG9hZHMuY3BwKQotQUREX1dLMl9URVNUKFRlc3RGcmFtZSBUZXN0RnJhbWUuY3BwKQotQUREX1dL
Ml9URVNUKFRlc3RJbnNwZWN0b3IgVGVzdEluc3BlY3Rvci5jcHApCi1BRERfV0syX1RFU1QoVGVz
dEluc3BlY3RvclNlcnZlciBUZXN0SW5zcGVjdG9yU2VydmVyLmNwcCkKLUFERF9XSzJfVEVTVChU
ZXN0TG9hZGVyQ2xpZW50IFRlc3RMb2FkZXJDbGllbnQuY3BwKQotQUREX1dLMl9URVNUKFRlc3RQ
cmludGluZyBUZXN0UHJpbnRpbmcuY3BwKQotQUREX1dLMl9URVNUKFRlc3RTU0wgVGVzdFNTTC5j
cHApCi1BRERfV0syX1RFU1QoVGVzdFdlYkV4dGVuc2lvbnMgVGVzdFdlYkV4dGVuc2lvbnMuY3Bw
KQotQUREX1dLMl9URVNUKFRlc3RXZWJLaXRQb2xpY3lDbGllbnQgVGVzdFdlYktpdFBvbGljeUNs
aWVudC5jcHApCi1BRERfV0syX1RFU1QoVGVzdFdlYktpdFNldHRpbmdzIFRlc3RXZWJLaXRTZXR0
aW5ncy5jcHApCi1BRERfV0syX1RFU1QoVGVzdFdlYktpdFZlcnNpb24gVGVzdFdlYktpdFZlcnNp
b24uY3BwKQotQUREX1dLMl9URVNUKFRlc3RXZWJLaXRXZWJWaWV3R3JvdXAgVGVzdFdlYktpdFdl
YlZpZXdHcm91cC5jcHApCi1BRERfV0syX1RFU1QoVGVzdFdlYktpdFdlYkNvbnRleHQgVGVzdFdl
YktpdFdlYkNvbnRleHQuY3BwKQotQUREX1dLMl9URVNUKFRlc3RXZWJLaXRXZWJWaWV3IFRlc3RX
ZWJLaXRXZWJWaWV3LmNwcCkKLQotaWYgKEFUU1BJX0ZPVU5EKQotICAgIEFERF9XSzJfVEVTVChB
Y2Nlc3NpYmlsaXR5VGVzdFNlcnZlciBBY2Nlc3NpYmlsaXR5VGVzdFNlcnZlci5jcHApCi0gICAg
QUREX1dLMl9URVNUKFRlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5IFRlc3RXZWJLaXRBY2Nlc3NpYmls
aXR5LmNwcCkKLWVuZGlmICgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9ET01Ob2RlVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9ET01Ob2RlVGVzdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGUxNzU0Y2YuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvRE9NTm9kZVRlc3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjE2ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotCi0jaW5jbHVkZSAiV2ViUHJvY2Vzc1Rlc3QuaCIKLSNpbmNsdWRlIDxnaW8vZ2lvLmg+Ci0j
aW5jbHVkZSA8d2Via2l0Mi93ZWJraXQtd2ViLWV4dGVuc2lvbi5oPgotI2luY2x1ZGUgPHd0Zi9n
b2JqZWN0L0dPd25QdHIuaD4KLQotY2xhc3MgV2ViS2l0RE9NTm9kZVRlc3QgOiBwdWJsaWMgV2Vi
UHJvY2Vzc1Rlc3QgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFdlYlByb2Nlc3NU
ZXN0PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgV2ViS2l0RE9NTm9kZVRlc3QoKSk7
IH0KLQotcHJpdmF0ZToKLSAgICBndWludDY0IHdlYlBhZ2VGcm9tQXJncyhHVmFyaWFudCogYXJn
cykKLSAgICB7Ci0gICAgICAgIEdWYXJpYW50SXRlciBpdGVyOwotICAgICAgICBnX3ZhcmlhbnRf
aXRlcl9pbml0KCZpdGVyLCBhcmdzKTsKLQotICAgICAgICBjb25zdCBjaGFyKiBrZXk7Ci0gICAg
ICAgIEdWYXJpYW50KiB2YWx1ZTsKLSAgICAgICAgd2hpbGUgKGdfdmFyaWFudF9pdGVyX2xvb3Ao
Jml0ZXIsICJ7JnN2fSIsICZrZXksICZ2YWx1ZSkpIHsKLSAgICAgICAgICAgIGlmICghc3RyY21w
KGtleSwgInBhZ2VJRCIpICYmIGdfdmFyaWFudF9jbGFzc2lmeSh2YWx1ZSkgPT0gR19WQVJJQU5U
X0NMQVNTX1VJTlQ2NCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZ192YXJpYW50X2dldF91aW50
NjQodmFsdWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgYm9vbCB0ZXN0SGllcmFyY2h5TmF2aWdh
dGlvbihXZWJLaXRXZWJFeHRlbnNpb24qIGV4dGVuc2lvbiwgR1ZhcmlhbnQqIGFyZ3MpCi0gICAg
ewotICAgICAgICBXZWJLaXRXZWJQYWdlKiBwYWdlID0gd2Via2l0X3dlYl9leHRlbnNpb25fZ2V0
X3BhZ2UoZXh0ZW5zaW9uLCB3ZWJQYWdlRnJvbUFyZ3MoYXJncykpOwotICAgICAgICBnX2Fzc2Vy
dChXRUJLSVRfSVNfV0VCX1BBR0UocGFnZSkpOwotICAgICAgICBXZWJLaXRET01Eb2N1bWVudCog
ZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3BhZ2VfZ2V0X2RvbV9kb2N1bWVudChwYWdlKTsKLSAgICAg
ICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChkb2N1bWVudCkpOwotCi0gICAgICAg
IFdlYktpdERPTUhUTUxIZWFkRWxlbWVudCogaGVhZCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0
X2hlYWQoZG9jdW1lbnQpOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfSEVB
RF9FTEVNRU5UKGhlYWQpKTsKLQotICAgICAgICAvLyBUaXRsZSwgaGVhZCdzIGNoaWxkLgotICAg
ICAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaGFzX2NoaWxkX25vZGVzKFdFQktJVF9ET01f
Tk9ERShoZWFkKSkpOwotICAgICAgICBHUmVmUHRyPFdlYktpdERPTU5vZGVMaXN0PiBsaXN0ID0g
YWRvcHRHUmVmKHdlYmtpdF9kb21fbm9kZV9nZXRfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RF
KGhlYWQpKSk7Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfTk9ERV9MSVNUKGxpc3Qu
Z2V0KCkpKTsKLSAgICAgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9kb21fbm9kZV9saXN0X2dl
dF9sZW5ndGgobGlzdC5nZXQoKSksID09LCAxKTsKLSAgICAgICAgV2ViS2l0RE9NTm9kZSogbm9k
ZSA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdC5nZXQoKSwgMCk7Ci0gICAgICAgIGdf
YXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9USVRMRV9FTEVNRU5UKG5vZGUpKTsKLQotICAgICAg
ICAvLyBCb2R5LCBIZWFkIHNpYmxpbmcuCi0gICAgICAgIG5vZGUgPSB3ZWJraXRfZG9tX25vZGVf
Z2V0X25leHRfc2libGluZyhXRUJLSVRfRE9NX05PREUoaGVhZCkpOwotICAgICAgICBnX2Fzc2Vy
dChXRUJLSVRfRE9NX0lTX0hUTUxfQk9EWV9FTEVNRU5UKG5vZGUpKTsKLSAgICAgICAgV2ViS2l0
RE9NSFRNTEJvZHlFbGVtZW50KiBib2R5ID0gV0VCS0lUX0RPTV9IVE1MX0JPRFlfRUxFTUVOVChu
b2RlKTsKLQotICAgICAgICAvLyBUaGVyZSBpcyBubyB0aGlyZCBzaWJsaW5nCi0gICAgICAgIGdf
YXNzZXJ0KCF3ZWJraXRfZG9tX25vZGVfZ2V0X25leHRfc2libGluZyhub2RlKSk7Ci0KLSAgICAg
ICAgLy8gQm9keSdzIHByZXZpb3VzIHNpYmxpbmcgaXMgSGVhZC4KLSAgICAgICAgbm9kZSA9IHdl
YmtpdF9kb21fbm9kZV9nZXRfcHJldmlvdXNfc2libGluZyhXRUJLSVRfRE9NX05PREUoYm9keSkp
OwotICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfSEVBRF9FTEVNRU5UKG5vZGUp
KTsKLQotICAgICAgICAvLyBCb2R5IGhhcyAzIGNoaWxkcmVuLgotICAgICAgICBnX2Fzc2VydCh3
ZWJraXRfZG9tX25vZGVfaGFzX2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSkpOwot
ICAgICAgICBsaXN0ID0gYWRvcHRHUmVmKHdlYmtpdF9kb21fbm9kZV9nZXRfY2hpbGRfbm9kZXMo
V0VCS0lUX0RPTV9OT0RFKGJvZHkpKSk7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuZ3RoID0g
d2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChsaXN0LmdldCgpKTsKLSAgICAgICAgZ19h
c3NlcnRfY21waW50KGxlbmd0aCwgPT0sIDMpOwotCi0gICAgICAgIC8vIFRoZSB0aHJlZSBvZiB0
aGVtIGFyZSBQIHRhZ3MuCi0gICAgICAgIGZvciAodW5zaWduZWQgbG9uZyBpID0gMDsgaSA8IGxl
bmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBub2RlID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRl
bShsaXN0LmdldCgpLCBpKTsKLSAgICAgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRN
TF9QQVJBR1JBUEhfRUxFTUVOVChub2RlKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBHbyBi
YWNrd2FyZHMKLSAgICAgICAgdW5zaWduZWQgaTsKLSAgICAgICAgZm9yIChpID0gMDsgbm9kZTsg
bm9kZSA9IHdlYmtpdF9kb21fbm9kZV9nZXRfcHJldmlvdXNfc2libGluZyhub2RlKSwgaSsrKSB7
IH0KLSAgICAgICAgZ19hc3NlcnRfY21waW50KGksID09LCAzKTsKLQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0KLSAgICBib29sIHRlc3RJbnNlcnRpb24oV2ViS2l0V2ViRXh0ZW5zaW9u
KiBleHRlbnNpb24sIEdWYXJpYW50KiBhcmdzKQotICAgIHsKLSAgICAgICAgV2ViS2l0V2ViUGFn
ZSogcGFnZSA9IHdlYmtpdF93ZWJfZXh0ZW5zaW9uX2dldF9wYWdlKGV4dGVuc2lvbiwgd2ViUGFn
ZUZyb21BcmdzKGFyZ3MpKTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX1dFQl9QQUdFKHBh
Z2UpKTsKLSAgICAgICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50ID0gd2Via2l0X3dlYl9w
YWdlX2dldF9kb21fZG9jdW1lbnQocGFnZSk7Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01f
SVNfRE9DVU1FTlQoZG9jdW1lbnQpKTsKLQotICAgICAgICBXZWJLaXRET01IVE1MRWxlbWVudCog
Ym9keSA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2JvZHkoZG9jdW1lbnQpOwotICAgICAgICBn
X2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChib2R5KSk7Ci0KLSAgICAgICAgLy8g
Qm9keSBzaG91bGRuJ3QgaGF2ZSBhbnkgY2hpbGRyZW4gYXQgdGhpcyBwb2ludC4KLSAgICAgICAg
Z19hc3NlcnQoIXdlYmtpdF9kb21fbm9kZV9oYXNfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RF
KGJvZHkpKSk7Ci0KLSAgICAgICAgLy8gSW5zZXJ0IG9uZSBQIGVsZW1lbnQuCi0gICAgICAgIFdl
YktpdERPTUVsZW1lbnQqIHAgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9lbGVtZW50KGRv
Y3VtZW50LCAiUCIsIDApOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfRUxF
TUVOVChwKSk7Ci0gICAgICAgIHdlYmtpdF9kb21fbm9kZV9hcHBlbmRfY2hpbGQoV0VCS0lUX0RP
TV9OT0RFKGJvZHkpLCBXRUJLSVRfRE9NX05PREUocCksIDApOwotCi0gICAgICAgIC8vIE5vdyBp
dCBzaG91bGQgaGF2ZSBvbmUsIHRoZSBzYW1lIHRoYXQgd2UgaW5zZXJ0ZWQuCi0gICAgICAgIGdf
YXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9oYXNfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJv
ZHkpKSk7Ci0gICAgICAgIEdSZWZQdHI8V2ViS2l0RE9NTm9kZUxpc3Q+IGxpc3QgPSBhZG9wdEdS
ZWYod2Via2l0X2RvbV9ub2RlX2dldF9jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkp
KTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19OT0RFX0xJU1QobGlzdC5nZXQoKSkp
OwotICAgICAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0
aChsaXN0LmdldCgpKSwgPT0sIDEpOwotICAgICAgICBXZWJLaXRET01Ob2RlKiBub2RlID0gd2Vi
a2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0LmdldCgpLCAwKTsKLSAgICAgICAgZ19hc3NlcnQo
V0VCS0lUX0RPTV9JU19IVE1MX0VMRU1FTlQobm9kZSkpOwotICAgICAgICBnX2Fzc2VydCh3ZWJr
aXRfZG9tX25vZGVfaXNfc2FtZV9ub2RlKFdFQktJVF9ET01fTk9ERShwKSwgbm9kZSkpOwotCi0g
ICAgICAgIC8vIFJlcGxhY2UgdGhlIFAgdGFnIHdpdGggYSBESVYgdGFnLgotICAgICAgICBXZWJL
aXRET01FbGVtZW50KiBkaXYgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9lbGVtZW50KGRv
Y3VtZW50LCAiRElWIiwgMCk7Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9F
TEVNRU5UKGRpdikpOwotICAgICAgICB3ZWJraXRfZG9tX25vZGVfcmVwbGFjZV9jaGlsZChXRUJL
SVRfRE9NX05PREUoYm9keSksIFdFQktJVF9ET01fTk9ERShkaXYpLCBXRUJLSVRfRE9NX05PREUo
cCksIDApOwotICAgICAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaGFzX2NoaWxkX25vZGVz
KFdFQktJVF9ET01fTk9ERShib2R5KSkpOwotICAgICAgICBsaXN0ID0gYWRvcHRHUmVmKHdlYmtp
dF9kb21fbm9kZV9nZXRfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKSk7Ci0gICAg
ICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfTk9ERV9MSVNUKGxpc3QuZ2V0KCkpKTsKLSAgICAg
ICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9kb21fbm9kZV9saXN0X2dldF9sZW5ndGgobGlzdC5n
ZXQoKSksID09LCAxKTsKLSAgICAgICAgbm9kZSA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0o
bGlzdC5nZXQoKSwgMCk7Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9FTEVN
RU5UKG5vZGUpKTsKLSAgICAgICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2lzX3NhbWVfbm9k
ZShXRUJLSVRfRE9NX05PREUoZGl2KSwgbm9kZSkpOwotCi0gICAgICAgIC8vIE5vdyByZW1vdmUg
dGhlIHRhZy4KLSAgICAgICAgd2Via2l0X2RvbV9ub2RlX3JlbW92ZV9jaGlsZChXRUJLSVRfRE9N
X05PREUoYm9keSksIG5vZGUsIDApOwotICAgICAgICBsaXN0ID0gYWRvcHRHUmVmKHdlYmtpdF9k
b21fbm9kZV9nZXRfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKSk7Ci0gICAgICAg
IGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfTk9ERV9MSVNUKGxpc3QuZ2V0KCkpKTsKLSAgICAgICAg
Z19hc3NlcnRfY21waW50KHdlYmtpdF9kb21fbm9kZV9saXN0X2dldF9sZW5ndGgobGlzdC5nZXQo
KSksID09LCAwKTsKLQotICAgICAgICAvLyBUZXN0IGluc2VydCBiZWZvcmUuIElmIHJlZkNoaWxk
IGlzIG51bGwsIGluc2VydCBuZXdDaGlsZCBhcyBsYXN0IGVsZW1lbnQgb2YgcGFyZW50LgotICAg
ICAgICBkaXYgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9lbGVtZW50KGRvY3VtZW50LCAi
RElWIiwgMCk7Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKGRp
dikpOwotICAgICAgICB3ZWJraXRfZG9tX25vZGVfaW5zZXJ0X2JlZm9yZShXRUJLSVRfRE9NX05P
REUoYm9keSksIFdFQktJVF9ET01fTk9ERShkaXYpLCAwLCAwKTsKLSAgICAgICAgZ19hc3NlcnQo
d2Via2l0X2RvbV9ub2RlX2hhc19jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpKTsK
LSAgICAgICAgbGlzdCA9IGFkb3B0R1JlZih3ZWJraXRfZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVz
KFdFQktJVF9ET01fTk9ERShib2R5KSkpOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lT
X05PREVfTElTVChsaXN0LmdldCgpKSk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRf
ZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QuZ2V0KCkpLCA9PSwgMSk7Ci0gICAgICAgIG5v
ZGUgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtKGxpc3QuZ2V0KCksIDApOwotICAgICAgICBn
X2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChub2RlKSk7Ci0gICAgICAgIGdfYXNz
ZXJ0KHdlYmtpdF9kb21fbm9kZV9pc19zYW1lX25vZGUoV0VCS0lUX0RPTV9OT0RFKGRpdiksIG5v
ZGUpKTsKLQotICAgICAgICAvLyBOb3cgaW5zZXJ0IGEgJ3AnIGJlZm9yZSAnZGl2Jy4KLSAgICAg
ICAgcCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2VsZW1lbnQoZG9jdW1lbnQsICJQIiwg
MCk7Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKHApKTsKLSAg
ICAgICAgd2Via2l0X2RvbV9ub2RlX2luc2VydF9iZWZvcmUoV0VCS0lUX0RPTV9OT0RFKGJvZHkp
LCBXRUJLSVRfRE9NX05PREUocCksIFdFQktJVF9ET01fTk9ERShkaXYpLCAwKTsKLSAgICAgICAg
Z19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2hhc19jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUo
Ym9keSkpKTsKLSAgICAgICAgbGlzdCA9IGFkb3B0R1JlZih3ZWJraXRfZG9tX25vZGVfZ2V0X2No
aWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSkpOwotICAgICAgICBnX2Fzc2VydChXRUJL
SVRfRE9NX0lTX05PREVfTElTVChsaXN0LmdldCgpKSk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcGlu
dCh3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QuZ2V0KCkpLCA9PSwgMik7Ci0g
ICAgICAgIG5vZGUgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtKGxpc3QuZ2V0KCksIDApOwot
ICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChub2RlKSk7Ci0gICAg
ICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9pc19zYW1lX25vZGUoV0VCS0lUX0RPTV9OT0RF
KHApLCBub2RlKSk7Ci0gICAgICAgIG5vZGUgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtKGxp
c3QuZ2V0KCksIDEpOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVO
VChub2RlKSk7Ci0gICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9pc19zYW1lX25vZGUo
V0VCS0lUX0RPTV9OT0RFKGRpdiksIG5vZGUpKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBib29sIHRlc3RUYWdOYW1lcyhXZWJLaXRXZWJFeHRlbnNpb24qIGV4dGVuc2lv
biwgR1ZhcmlhbnQqIGFyZ3MpCi0gICAgewotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogZXhw
ZWN0ZWRUYWdOYW1lc1tdID0geyAiSFRNTCIsICJIRUFEIiwgIkJPRFkiLCAiVklERU8iLCAiU09V
UkNFIiwgIlZJREVPIiwgIlNPVVJDRSIsICJJTlBVVCIgfTsKLQotICAgICAgICBXZWJLaXRXZWJQ
YWdlKiBwYWdlID0gd2Via2l0X3dlYl9leHRlbnNpb25fZ2V0X3BhZ2UoZXh0ZW5zaW9uLCB3ZWJQ
YWdlRnJvbUFyZ3MoYXJncykpOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfV0VCX1BBR0Uo
cGFnZSkpOwotICAgICAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2Vi
X3BhZ2VfZ2V0X2RvbV9kb2N1bWVudChwYWdlKTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RP
TV9JU19ET0NVTUVOVChkb2N1bWVudCkpOwotCi0gICAgICAgIFdlYktpdERPTU5vZGVMaXN0KiBs
aXN0ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWUoZG9jdW1l
bnQsICIqIik7Ci0gICAgICAgIGd1bG9uZyBub2RlQ291bnQgPSB3ZWJraXRfZG9tX25vZGVfbGlz
dF9nZXRfbGVuZ3RoKGxpc3QpOwotICAgICAgICBnX2Fzc2VydF9jbXB1aW50KG5vZGVDb3VudCwg
PT0sIEdfTl9FTEVNRU5UUyhleHBlY3RlZFRhZ05hbWVzKSk7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBub2RlQ291bnQ7IGkrKykgewotICAgICAgICAgICAgV2ViS2l0RE9NTm9k
ZSogbm9kZSA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdCwgaSk7Ci0gICAgICAgICAg
ICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX05PREUobm9kZSkpOwotICAgICAgICAgICAgR093blB0
cjxjaGFyPiB0YWdOYW1lKHdlYmtpdF9kb21fbm9kZV9nZXRfbm9kZV9uYW1lKG5vZGUpKTsKLSAg
ICAgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih0YWdOYW1lLmdldCgpLCA9PSwgZXhwZWN0ZWRUYWdO
YW1lc1tpXSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICB2aXJ0dWFsIGJvb2wgcnVuVGVzdChjb25zdCBjaGFyKiB0ZXN0TmFtZSwgV2ViS2l0V2ViRXh0
ZW5zaW9uKiBleHRlbnNpb24sIEdWYXJpYW50KiBhcmdzKQotICAgIHsKLSAgICAgICAgaWYgKCFz
dHJjbXAodGVzdE5hbWUsICJoaWVyYXJjaHktbmF2aWdhdGlvbiIpKQotICAgICAgICAgICAgcmV0
dXJuIHRlc3RIaWVyYXJjaHlOYXZpZ2F0aW9uKGV4dGVuc2lvbiwgYXJncyk7Ci0gICAgICAgIGlm
ICghc3RyY21wKHRlc3ROYW1lLCAiaW5zZXJ0aW9uIikpCi0gICAgICAgICAgICByZXR1cm4gdGVz
dEluc2VydGlvbihleHRlbnNpb24sIGFyZ3MpOwotICAgICAgICBpZiAoIXN0cmNtcCh0ZXN0TmFt
ZSwgInRhZy1uYW1lcyIpKQotICAgICAgICAgICAgcmV0dXJuIHRlc3RUYWdOYW1lcyhleHRlbnNp
b24sIGFyZ3MpOwotCi0gICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci19OwotCi1zdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChjb25z
dHJ1Y3RvcikpIHJlZ2lzdGVyVGVzdHMoKQotewotICAgIFJFR0lTVEVSX1RFU1QoV2ViS2l0RE9N
Tm9kZVRlc3QsICJXZWJLaXRET01Ob2RlL2hpZXJhcmNoeS1uYXZpZ2F0aW9uIik7Ci0gICAgUkVH
SVNURVJfVEVTVChXZWJLaXRET01Ob2RlVGVzdCwgIldlYktpdERPTU5vZGUvaW5zZXJ0aW9uIik7
Ci0gICAgUkVHSVNURVJfVEVTVChXZWJLaXRET01Ob2RlVGVzdCwgIldlYktpdERPTU5vZGUvdGFn
LW5hbWVzIik7Ci19Ci0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvRnJhbWVUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL0ZyYW1lVGVzdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRk
NDg1MGYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvRnJhbWVUZXN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lu
Y2x1ZGUgIldlYlByb2Nlc3NUZXN0LmgiCi0jaW5jbHVkZSA8Z2lvL2dpby5oPgotI2luY2x1ZGUg
PHdlYmtpdDIvd2Via2l0LXdlYi1leHRlbnNpb24uaD4KLQotY2xhc3MgV2ViS2l0RnJhbWVUZXN0
IDogcHVibGljIFdlYlByb2Nlc3NUZXN0IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0
cjxXZWJQcm9jZXNzVGVzdD4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IFdlYktpdEZy
YW1lVGVzdCgpKTsgfQotCi1wcml2YXRlOgotICAgIGd1aW50NjQgd2ViUGFnZUZyb21BcmdzKEdW
YXJpYW50KiBhcmdzKQotICAgIHsKLSAgICAgICAgR1ZhcmlhbnRJdGVyIGl0ZXI7Ci0gICAgICAg
IGdfdmFyaWFudF9pdGVyX2luaXQoJml0ZXIsIGFyZ3MpOwotCi0gICAgICAgIGNvbnN0IGNoYXIq
IGtleTsKLSAgICAgICAgR1ZhcmlhbnQqIHZhbHVlOwotICAgICAgICB3aGlsZSAoZ192YXJpYW50
X2l0ZXJfbG9vcCgmaXRlciwgInsmc3Z9IiwgJmtleSwgJnZhbHVlKSkgewotICAgICAgICAgICAg
aWYgKCFzdHJjbXAoa2V5LCAicGFnZUlEIikgJiYgZ192YXJpYW50X2NsYXNzaWZ5KHZhbHVlKSA9
PSBHX1ZBUklBTlRfQ0xBU1NfVUlOVDY0KQotICAgICAgICAgICAgICAgIHJldHVybiBnX3Zhcmlh
bnRfZ2V0X3VpbnQ2NCh2YWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnX2Fzc2VydF9ub3Rf
cmVhY2hlZCgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBib29sIHRlc3RNYWlu
RnJhbWUoV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24sIEdWYXJpYW50KiBhcmdzKQotICAg
IHsKLSAgICAgICAgV2ViS2l0V2ViUGFnZSogcGFnZSA9IHdlYmtpdF93ZWJfZXh0ZW5zaW9uX2dl
dF9wYWdlKGV4dGVuc2lvbiwgd2ViUGFnZUZyb21BcmdzKGFyZ3MpKTsKLSAgICAgICAgZ19hc3Nl
cnQoV0VCS0lUX0lTX1dFQl9QQUdFKHBhZ2UpKTsKLQotICAgICAgICBXZWJLaXRGcmFtZSogZnJh
bWUgPSB3ZWJraXRfd2ViX3BhZ2VfZ2V0X21haW5fZnJhbWUocGFnZSk7Ci0gICAgICAgIGdfYXNz
ZXJ0KFdFQktJVF9JU19GUkFNRShmcmFtZSkpOwotICAgICAgICBnX2Fzc2VydCh3ZWJraXRfZnJh
bWVfaXNfbWFpbl9mcmFtZShmcmFtZSkpOwotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LQotICAgIGJvb2wgdGVzdFVSSShXZWJLaXRXZWJFeHRlbnNpb24qIGV4dGVuc2lvbiwgR1Zhcmlh
bnQqIGFyZ3MpCi0gICAgewotICAgICAgICBXZWJLaXRXZWJQYWdlKiBwYWdlID0gd2Via2l0X3dl
Yl9leHRlbnNpb25fZ2V0X3BhZ2UoZXh0ZW5zaW9uLCB3ZWJQYWdlRnJvbUFyZ3MoYXJncykpOwot
ICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfV0VCX1BBR0UocGFnZSkpOwotCi0gICAgICAgIFdl
YktpdEZyYW1lKiBmcmFtZSA9IHdlYmtpdF93ZWJfcGFnZV9nZXRfbWFpbl9mcmFtZShwYWdlKTsK
LSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX0ZSQU1FKGZyYW1lKSk7Ci0gICAgICAgIGdfYXNz
ZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3BhZ2VfZ2V0X3VyaShwYWdlKSwgPT0sIHdlYmtpdF9mcmFt
ZV9nZXRfdXJpKGZyYW1lKSk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAg
Ym9vbCB0ZXN0SmF2YVNjcmlwdENvbnRleHQoV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24s
IEdWYXJpYW50KiBhcmdzKQotICAgIHsKLSAgICAgICAgV2ViS2l0V2ViUGFnZSogcGFnZSA9IHdl
YmtpdF93ZWJfZXh0ZW5zaW9uX2dldF9wYWdlKGV4dGVuc2lvbiwgd2ViUGFnZUZyb21BcmdzKGFy
Z3MpKTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX1dFQl9QQUdFKHBhZ2UpKTsKLQotICAg
ICAgICBXZWJLaXRGcmFtZSogZnJhbWUgPSB3ZWJraXRfd2ViX3BhZ2VfZ2V0X21haW5fZnJhbWUo
cGFnZSk7Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19GUkFNRShmcmFtZSkpOwotICAgICAg
ICBnX2Fzc2VydCh3ZWJraXRfZnJhbWVfZ2V0X2phdmFzY3JpcHRfZ2xvYmFsX2NvbnRleHQoZnJh
bWUpKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wg
cnVuVGVzdChjb25zdCBjaGFyKiB0ZXN0TmFtZSwgV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNp
b24sIEdWYXJpYW50KiBhcmdzKQotICAgIHsKLSAgICAgICAgaWYgKCFzdHJjbXAodGVzdE5hbWUs
ICJtYWluLWZyYW1lIikpCi0gICAgICAgICAgICByZXR1cm4gdGVzdE1haW5GcmFtZShleHRlbnNp
b24sIGFyZ3MpOwotICAgICAgICBpZiAoIXN0cmNtcCh0ZXN0TmFtZSwgInVyaSIpKQotICAgICAg
ICAgICAgcmV0dXJuIHRlc3RVUkkoZXh0ZW5zaW9uLCBhcmdzKTsKLSAgICAgICAgaWYgKCFzdHJj
bXAodGVzdE5hbWUsICJqYXZhc2NyaXB0LWNvbnRleHQiKSkKLSAgICAgICAgICAgIHJldHVybiB0
ZXN0SmF2YVNjcmlwdENvbnRleHQoZXh0ZW5zaW9uLCBhcmdzKTsKLQotICAgICAgICBnX2Fzc2Vy
dF9ub3RfcmVhY2hlZCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfTsKLQotc3Rh
dGljIHZvaWQgX19hdHRyaWJ1dGVfXygoY29uc3RydWN0b3IpKSByZWdpc3RlclRlc3RzKCkKLXsK
LSAgICBSRUdJU1RFUl9URVNUKFdlYktpdEZyYW1lVGVzdCwgIldlYktpdEZyYW1lL21haW4tZnJh
bWUiKTsKLSAgICBSRUdJU1RFUl9URVNUKFdlYktpdEZyYW1lVGVzdCwgIldlYktpdEZyYW1lL3Vy
aSIpOwotICAgIFJFR0lTVEVSX1RFU1QoV2ViS2l0RnJhbWVUZXN0LCAiV2ViS2l0RnJhbWUvamF2
YXNjcmlwdC1jb250ZXh0Iik7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAxNWVjN2QxLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsMzI2ICswLDAgQEAK
LWlmIEVOQUJMRV9XRUJLSVQyCi0KLVRFU1RfUFJPR1MgKz0gXAotCVByb2dyYW1zL1dlYktpdDJH
T2JqZWN0QVBJVGVzdHMvSW5zcGVjdG9yVGVzdFNlcnZlciBcCi0JUHJvZ3JhbXMvV2ViS2l0MkdP
YmplY3RBUElUZXN0cy9UZXN0QXV0aGVudGljYXRpb24gXAotCVByb2dyYW1zL1dlYktpdDJHT2Jq
ZWN0QVBJVGVzdHMvVGVzdEJhY2tGb3J3YXJkTGlzdCBcCi0JUHJvZ3JhbXMvV2ViS2l0MkdPYmpl
Y3RBUElUZXN0cy9UZXN0Q29udGV4dE1lbnUgXAotCVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJ
VGVzdHMvVGVzdENvb2tpZU1hbmFnZXIgXAotCVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVz
dHMvVGVzdERPTU5vZGUgXAotCVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdERv
d25sb2FkcyBcCi0JUHJvZ3JhbXMvV2ViS2l0MkdPYmplY3RBUElUZXN0cy9UZXN0RnJhbWUgXAot
CVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdEluc3BlY3RvciBcCi0JUHJvZ3Jh
bXMvV2ViS2l0MkdPYmplY3RBUElUZXN0cy9UZXN0SW5zcGVjdG9yU2VydmVyIFwKLQlQcm9ncmFt
cy9XZWJLaXQyR09iamVjdEFQSVRlc3RzL1Rlc3RMb2FkZXJDbGllbnQgXAotCVByb2dyYW1zL1dl
YktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdFByaW50aW5nIFwKLQlQcm9ncmFtcy9XZWJLaXQyR09i
amVjdEFQSVRlc3RzL1Rlc3RSZXNvdXJjZXMgXAotCVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJ
VGVzdHMvVGVzdFNTTCBcCi0JUHJvZ3JhbXMvV2ViS2l0MkdPYmplY3RBUElUZXN0cy9UZXN0VUlD
bGllbnQgXAotCVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdFdlYkV4dGVuc2lv
bnMgXAotCVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdFdlYktpdFZlcnNpb24g
XAotCVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdFdlYktpdEZhdmljb25EYXRh
YmFzZSBcCi0JUHJvZ3JhbXMvV2ViS2l0MkdPYmplY3RBUElUZXN0cy9UZXN0V2ViS2l0RmluZENv
bnRyb2xsZXIgXAotCVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdFdlYktpdFBv
bGljeUNsaWVudCBcCi0JUHJvZ3JhbXMvV2ViS2l0MkdPYmplY3RBUElUZXN0cy9UZXN0V2ViS2l0
U2V0dGluZ3MgXAotCVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdFdlYktpdFdl
YkNvbnRleHQgXAotCVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdFdlYktpdFdl
YlZpZXcgXAotCVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdFdlYktpdFdlYlZp
ZXdHcm91cCBcCi0JUHJvZ3JhbXMvV2ViS2l0MkdPYmplY3RBUElUZXN0cy9UZXN0V2ViVmlld0Vk
aXRvcgotCi1ub2luc3RfUFJPR1JBTVMgKz0gJChURVNUX1BST0dTKQotCi1pZiBIQVZFX0FUU1BJ
MgotVEVTVF9QUk9HUyArPSBQcm9ncmFtcy9XZWJLaXQyR09iamVjdEFQSVRlc3RzL1Rlc3RXZWJL
aXRBY2Nlc3NpYmlsaXR5Ci0KLW5vaW5zdF9QUk9HUkFNUyArPSBQcm9ncmFtcy9XZWJLaXQyR09i
amVjdEFQSVRlc3RzL0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyCi1lbmRpZgotCi13ZWJraXQyX3Rl
c3RzX2NwcGZsYWdzID0gXAotCS1EV0VCS0lUX0VYRUNfUEFUSD1cIiR7c2hlbGwgcHdkfS8kKHRv
cF9idWlsZGRpcikvUHJvZ3JhbXNcIiBcCi0JLURXRUJLSVRfU1JDX0RJUj1cIiR7c2hlbGwgcHdk
fS8ke3NyY2Rpcn1cIiBcCi0JLURXRUJLSVRfREVSSVZFRF9TUkNfRElSPVwiJHtzaGVsbCBwd2R9
LyR7dG9wX2J1aWxkZGlyfS9EZXJpdmVkU291cmNlc1wiIFwKLQktRFdFQktJVF9URVNUX1BMVUdJ
Tl9ESVI9XCIke3NoZWxsIHB3ZH0vJHt0b3BfYnVpbGRkaXJ9L1Rlc3ROZXRzY2FwZVBsdWdpbi8u
bGlic1wiIFwKLQktRFdFQktJVF9URVNUX1dFQl9FWFRFTlNJT05TX0RJUj1cIiR7c2hlbGwgcHdk
fS8ke3RvcF9idWlsZGRpcn0vTGlicmFyaWVzL1dlYkV4dGVuc2lvbnMvLmxpYnNcIiBcCi0JLURX
RUJLSVRfSU5KRUNURURfQlVORExFX1BBVEg9XCIke3NoZWxsIHB3ZH0vJCh0b3BfYnVpbGRkaXIp
Ly5saWJzXCIgXAotCSQoamF2YXNjcmlwdGNvcmVfY3BwZmxhZ3MpIFwKLQktSSQoc3JjZGlyKS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUgXAotCS1JJChzcmNkaXIpL1NvdXJjZSBcCi0JLUkkKHNyY2Rp
cikvU291cmNlL1dlYktpdDIgXAotCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2VzL1dl
YktpdDIvaW5jbHVkZSBcCi0JLUkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0
Mi93ZWJraXQyZ3RrIFwKLQktSSQodG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcy9XZWJLaXQy
L3dlYmtpdDJndGsvaW5jbHVkZSBcCi0JLUkkKHNyY2RpcikvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsgXAotCSQoZ2xvYmFsX2NwcGZsYWdzKSBcCi0JJChGUkVFVFlQRV9DRkxBR1Mp
IFwKLQkkKEdMSUJfQ0ZMQUdTKSBcCi0JJChHVEtfQ0ZMQUdTKSBcCi0JJChMSUJTT1VQX0NGTEFH
UykKLQotd2Via2l0Ml90ZXN0c19sZGFkZCA9IFwKLQlMaWJyYXJpZXMvbGliV2ViS2l0MkFQSVRl
c3RDb3JlLmxhIFwKLQlsaWJqYXZhc2NyaXB0Y29yZWd0ay1AV0VCS0lUR1RLX0FQSV9NQUpPUl9W
RVJTSU9OQC5AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQC5sYSBcCi0JbGlid2Via2l0Mmd0
ay1AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQC5AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJT
SU9OQC5sYSBcCi0JJChGUkVFVFlQRV9MSUJTKSBcCi0JJChHRU9DTFVFX0xJQlMpIFwKLQkkKEdM
SUJfTElCUykgXAotCSQoR1RLX0xJQlMpIFwKLQkkKExJQlNPVVBfTElCUykKLQotd2Via2l0Ml90
ZXN0c19sZGZsYWdzID0gXAotCS1uby1pbnN0YWxsCi0KLVByb2dyYW1zL3Jlc291cmNlcy93ZWJr
aXQyZ3RrLXRlc3RzLXJlc291cmNlcy5ncmVzb3VyY2U6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL3Jlc291cmNlcy93ZWJraXQyZ3RrLXRlc3RzLmdyZXNvdXJjZS54bWwg
JChzaGVsbCAkKEdMSUJfQ09NUElMRV9SRVNPVVJDRVMpIC0tc291cmNlZGlyPSQoc3JjZGlyKSAt
LWdlbmVyYXRlLWRlcGVuZGVuY2llcyAkKHNyY2RpcikvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvcmVzb3VyY2VzL3dlYmtpdDJndGstdGVzdHMuZ3Jlc291cmNlLnhtbCkK
LQkkKEFNX1ZfYXQpbWtkaXIgLXAgJHtHRU5QUk9HUkFNU30vcmVzb3VyY2VzCi0JJChBTV9WX0dF
TikgJChHTElCX0NPTVBJTEVfUkVTT1VSQ0VTKSAtLXRhcmdldD0kQCAtLXNvdXJjZWRpcj0kKHNy
Y2RpcikgJDwKLQotUHJvZ3JhbXMvcmVzb3VyY2VzL2luc3BlY3Rvci9pbnNwZWN0b3JQYWdlSW5k
ZXguaHRtbDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9mcm9udC1l
bmQvaW5zcGVjdG9yUGFnZUluZGV4Lmh0bWwKLQkkKEFNX1ZfYXQpbWtkaXIgLXAgJHtHRU5QUk9H
UkFNU30vcmVzb3VyY2VzL2luc3BlY3RvcgotCSQoQU1fVl9HRU4pY3AgJChzcmNkaXIpL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvZnJvbnQtZW5kL2luc3BlY3RvclBh
Z2VJbmRleC5odG1sICR7R0VOUFJPR1JBTVN9L3Jlc291cmNlcy9pbnNwZWN0b3IKLQotRElTVENM
RUFORklMRVMgKz0gXAotCVByb2dyYW1zL3Jlc291cmNlcy93ZWJraXQyZ3RrLXRlc3RzLXJlc291
cmNlcy5ncmVzb3VyY2UgXAotCVByb2dyYW1zL3Jlc291cmNlcy9pbnNwZWN0b3IvaW5zcGVjdG9y
UGFnZUluZGV4Lmh0bWwKLQotbm9pbnN0X0RBVEEgKz0gXAotCVByb2dyYW1zL3Jlc291cmNlcy93
ZWJraXQyZ3RrLXRlc3RzLXJlc291cmNlcy5ncmVzb3VyY2UgXAotCVByb2dyYW1zL3Jlc291cmNl
cy9pbnNwZWN0b3IvaW5zcGVjdG9yUGFnZUluZGV4Lmh0bWwKLQotbm9pbnN0X0xUTElCUkFSSUVT
ICs9IExpYnJhcmllcy9saWJXZWJLaXQyQVBJVGVzdENvcmUubGEKLUxpYnJhcmllc19saWJXZWJL
aXQyQVBJVGVzdENvcmVfbGFfU09VUkNFUyA9IFwKLQlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9Mb2FkVHJhY2tpbmdUZXN0LmNwcCBcCi0JU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvdGVzdHMvTG9hZFRyYWNraW5nVGVzdC5oIFwKLQlTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJLaXRUZXN0QnVzLmNwcCBcCi0JU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViS2l0VGVzdEJ1cy5oIFwKLQlTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJLaXRUZXN0U2VydmVyLmNwcCBcCi0J
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViS2l0VGVzdFNlcnZlci5o
IFwKLQlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJQcm9jZXNzVGVz
dFJ1bm5lci5jcHAgXAotCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dl
YlByb2Nlc3NUZXN0UnVubmVyLmggXAotCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL1Rlc3RNYWluLmNwcCBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvVGVzdE1haW4uaCBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvV2ViVmlld1Rlc3QuY3BwIFwKLQlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9XZWJWaWV3VGVzdC5oCi1MaWJyYXJpZXNfbGliV2ViS2l0MkFQSVRlc3RDb3JlX2xhX0NQ
UEZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKQotCi1ub2luc3RfTFRMSUJSQVJJRVMg
Kz0gTGlicmFyaWVzL1dlYkV4dGVuc2lvbnMvbGliV2ViRXh0ZW5zaW9uVGVzdC5sYQotTGlicmFy
aWVzX1dlYkV4dGVuc2lvbnNfbGliV2ViRXh0ZW5zaW9uVGVzdF9sYV9TT1VSQ0VTID0gXAotCVNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYkV4dGVuc2lvblRlc3QuY3Bw
Ci0KLUxpYnJhcmllc19XZWJFeHRlbnNpb25zX2xpYldlYkV4dGVuc2lvblRlc3RfbGFfTERGTEFH
UyA9IFwKLQktcnBhdGggJHtzaGVsbCBwd2R9LyQodG9wX2J1aWxkZGlyKS9MaWJyYXJpZXMvV2Vi
RXh0ZW5zaW9ucy8ubGlicyBcCi0JJChub191bmRlZmluZWQpIFwKLQktYXZvaWQtdmVyc2lvbiBc
Ci0JLW1vZHVsZQotCi1MaWJyYXJpZXNfV2ViRXh0ZW5zaW9uc19saWJXZWJFeHRlbnNpb25UZXN0
X2xhX0NQUEZMQUdTID0gXAotCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ayBcCi0JLUkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJj
ZXMgXAotCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvd2Via2l0MmV4
dGVuc2lvbi9pbmNsdWRlIFwKLQktRFdFQktJVDJfQ09NUElMQVRJT04gXAotCSQod2Via2l0Ml90
ZXN0c19jcHBmbGFncykKLQotTGlicmFyaWVzX1dlYkV4dGVuc2lvbnNfbGliV2ViRXh0ZW5zaW9u
VGVzdF9sYV9DWFhGTEFHUyA9IFwKLSAgICAgICAgJChnbG9iYWxfY3h4ZmxhZ3MpCi0KLUxpYnJh
cmllc19XZWJFeHRlbnNpb25zX2xpYldlYkV4dGVuc2lvblRlc3RfbGFfQ0ZMQUdTID0gXAotICAg
ICAgICAkKGdsb2JhbF9jZmxhZ3MpCi0KLQotbm9pbnN0X0xUTElCUkFSSUVTICs9IExpYnJhcmll
cy9XZWJFeHRlbnNpb25zL2xpYldlYlByb2Nlc3NUZXN0LmxhCi1MaWJyYXJpZXNfV2ViRXh0ZW5z
aW9uc19saWJXZWJQcm9jZXNzVGVzdF9sYV9TT1VSQ0VTID0gXAotCVNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0RPTU5vZGVUZXN0LmNwcCBcCi0JU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvRnJhbWVUZXN0LmNwcCBcCi0JU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViUHJvY2Vzc1Rlc3QuY3BwIFwKLQlTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJQcm9jZXNzVGVzdC5oCi0KLUxpYnJhcmll
c19XZWJFeHRlbnNpb25zX2xpYldlYlByb2Nlc3NUZXN0X2xhX0xERkxBR1MgPSBcCi0JLXJwYXRo
ICR7c2hlbGwgcHdkfS8kKHRvcF9idWlsZGRpcikvTGlicmFyaWVzL1dlYkV4dGVuc2lvbnMvLmxp
YnMgXAotCSQobm9fdW5kZWZpbmVkKSBcCi0JLWF2b2lkLXZlcnNpb24gXAotCS1tb2R1bGUKLQot
TGlicmFyaWVzX1dlYkV4dGVuc2lvbnNfbGliV2ViUHJvY2Vzc1Rlc3RfbGFfQ1BQRkxBR1MgPSBc
Ci0JLUkkKHNyY2RpcikvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrIFwKLQktSSQodG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcyBcCi0JLUkkKHRvcF9i
dWlsZGRpcikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi93ZWJraXQyZXh0ZW5zaW9uL2luY2x1ZGUg
XAotCS1EV0VCS0lUMl9DT01QSUxBVElPTiBcCi0JJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKQot
Ci1MaWJyYXJpZXNfV2ViRXh0ZW5zaW9uc19saWJXZWJQcm9jZXNzVGVzdF9sYV9DWFhGTEFHUyA9
IFwKLQkkKGdsb2JhbF9jeHhmbGFncykKLQotTGlicmFyaWVzX1dlYkV4dGVuc2lvbnNfbGliV2Vi
UHJvY2Vzc1Rlc3RfbGFfQ0ZMQUdTID0gXAotCSQoZ2xvYmFsX2NmbGFncykKLQotCi1FWFRSQV9E
SVNUICs9IFwKLQlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9yZXNvdXJj
ZXMvdGVzdC1jZXJ0LnBlbSBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvcmVzb3VyY2VzL3Rlc3Qta2V5LnBlbSBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvcmVzb3VyY2VzL3dlYmtpdDJndGstdGVzdHMuZ3Jlc291cmNlLnhtbCBcCi0J
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvcmVzb3VyY2VzL2xpbmstdGl0
bGUuanMKLQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2ViS2l0V2ViQ29u
dGV4dF9TT1VSQ0VTID0gXAotCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L1Rlc3RXZWJLaXRXZWJDb250ZXh0LmNwcAotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0
c19UZXN0V2ViS2l0V2ViQ29udGV4dF9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFn
cykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktpdFdlYkNvbnRleHRf
TERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQ
SVRlc3RzX1Rlc3RXZWJLaXRXZWJDb250ZXh0X0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRm
bGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2ViS2l0V2ViVmll
d19TT1VSQ0VTID0gXAotCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rl
c3RXZWJLaXRXZWJWaWV3LmNwcAotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0
V2ViS2l0V2ViVmlld19DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKLVByb2dy
YW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktpdFdlYlZpZXdfTERBREQgPSAkKHdl
YmtpdDJfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RX
ZWJLaXRXZWJWaWV3X0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKLQotUHJvZ3Jh
bXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0TG9hZGVyQ2xpZW50X1NPVVJDRVMgPSBcCi0J
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdExvYWRlckNsaWVudC5j
cHAKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdExvYWRlckNsaWVudF9DUFBG
TEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0
QVBJVGVzdHNfVGVzdExvYWRlckNsaWVudF9MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkK
LVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdExvYWRlckNsaWVudF9MREZMQUdT
ID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJ
VGVzdHNfVGVzdFdlYktpdFNldHRpbmdzX1NPVVJDRVMgPSBcCi0JU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFNldHRpbmdzLmNwcAotUHJvZ3JhbXNfV2Vi
S2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2ViS2l0U2V0dGluZ3NfQ1BQRkxBR1MgPSAkKHdlYmtp
dDJfdGVzdHNfY3BwZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RX
ZWJLaXRTZXR0aW5nc19MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dl
YktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktpdFNldHRpbmdzX0xERkxBR1MgPSAkKHdlYmtp
dDJfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19JbnNw
ZWN0b3JUZXN0U2VydmVyX1NPVVJDRVMgPSBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvSW5zcGVjdG9yVGVzdFNlcnZlci5jcHAKLVByb2dyYW1zX1dlYktpdDJHT2Jq
ZWN0QVBJVGVzdHNfSW5zcGVjdG9yVGVzdFNlcnZlcl9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0
c19jcHBmbGFncykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfSW5zcGVjdG9yVGVz
dFNlcnZlcl9MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDJH
T2JqZWN0QVBJVGVzdHNfSW5zcGVjdG9yVGVzdFNlcnZlcl9MREZMQUdTID0gJCh3ZWJraXQyX3Rl
c3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdEJhY2tG
b3J3YXJkTGlzdF9TT1VSQ0VTID0gXAotICAgICAgICBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9UZXN0QmFja0ZvcndhcmRMaXN0LmNwcAotUHJvZ3JhbXNfV2ViS2l0MkdP
YmplY3RBUElUZXN0c19UZXN0QmFja0ZvcndhcmRMaXN0X0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rl
c3RzX2NwcGZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0QmFja0Zv
cndhcmRMaXN0X0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfV2ViS2l0
MkdPYmplY3RBUElUZXN0c19UZXN0QmFja0ZvcndhcmRMaXN0X0xERkxBR1MgPSAkKHdlYmtpdDJf
dGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2Vi
S2l0UG9saWN5Q2xpZW50X1NPVVJDRVMgPSBcCi0gICAgICAgIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRQb2xpY3lDbGllbnQuY3BwCi1Qcm9ncmFtc19X
ZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJLaXRQb2xpY3lDbGllbnRfQ1BQRkxBR1MgPSAk
KHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3Rz
X1Rlc3RXZWJLaXRQb2xpY3lDbGllbnRfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCi1Q
cm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJLaXRQb2xpY3lDbGllbnRfTERG
TEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQotCi1pZiBIQVZFX0FUU1BJMgotUHJvZ3Jh
bXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19BY2Nlc3NpYmlsaXR5VGVzdFNlcnZlcl9TT1VSQ0VT
ID0gXAotCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0FjY2Vzc2liaWxp
dHlUZXN0U2VydmVyLmNwcAotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19BY2Nlc3Np
YmlsaXR5VGVzdFNlcnZlcl9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKLVBy
b2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfQWNjZXNzaWJpbGl0eVRlc3RTZXJ2ZXJfTERB
REQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRl
c3RzX0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyX0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRm
bGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2ViS2l0QWNjZXNz
aWJpbGl0eV9TT1VSQ0VTID0gXAotCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5LmNwcAotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RB
UElUZXN0c19UZXN0V2ViS2l0QWNjZXNzaWJpbGl0eV9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0
c19jcHBmbGFncykgJChBVFNQSTJfQ0ZMQUdTKQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElU
ZXN0c19UZXN0V2ViS2l0QWNjZXNzaWJpbGl0eV9MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFk
ZCkgJChBVFNQSTJfTElCUykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdl
YktpdEFjY2Vzc2liaWxpdHlfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQotZW5k
aWYKLQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0RG93bmxvYWRzX1NPVVJD
RVMgPSBcCi0gICAgICAgIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rl
c3REb3dubG9hZHMuY3BwCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3REb3du
bG9hZHNfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MpCi1Qcm9ncmFtc19XZWJL
aXQyR09iamVjdEFQSVRlc3RzX1Rlc3REb3dubG9hZHNfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNf
bGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3REb3dubG9hZHNfTERG
TEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQyR09iamVj
dEFQSVRlc3RzX1Rlc3RXZWJWaWV3RWRpdG9yX1NPVVJDRVMgPSBcCi0gICAgICAgIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJWaWV3RWRpdG9yLmNwcAotUHJv
Z3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2ViVmlld0VkaXRvcl9DUFBGTEFHUyA9
ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVz
dHNfVGVzdFdlYlZpZXdFZGl0b3JfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCi1Qcm9n
cmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJWaWV3RWRpdG9yX0xERkxBR1MgPSAk
KHdlYmtpdDJfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0
c19UZXN0UHJpbnRpbmdfU09VUkNFUyA9IFwKLSAgICAgICAgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFByaW50aW5nLmNwcAotUHJvZ3JhbXNfV2ViS2l0MkdPYmpl
Y3RBUElUZXN0c19UZXN0UHJpbnRpbmdfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxh
Z3MpICQoR1RLX1VOSVhfUFJJTlRJTkdfQ0ZMQUdTKQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RB
UElUZXN0c19UZXN0UHJpbnRpbmdfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpICQoR1RL
X1VOSVhfUFJJTlRJTkdfTElCUykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVz
dFByaW50aW5nX0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNf
V2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlX1NPVVJDRVMg
PSBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdEZh
dmljb25EYXRhYmFzZS5jcHAKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdl
YktpdEZhdmljb25EYXRhYmFzZV9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykK
LVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktpdEZhdmljb25EYXRhYmFz
ZV9MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0
QVBJVGVzdHNfVGVzdFdlYktpdEZhdmljb25EYXRhYmFzZV9MREZMQUdTID0gJCh3ZWJraXQyX3Rl
c3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktp
dEZpbmRDb250cm9sbGVyX1NPVVJDRVMgPSBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvVGVzdFdlYktpdEZpbmRDb250cm9sbGVyLmNwcAotUHJvZ3JhbXNfV2ViS2l0
MkdPYmplY3RBUElUZXN0c19UZXN0V2ViS2l0RmluZENvbnRyb2xsZXJfQ1BQRkxBR1MgPSAkKHdl
YmtpdDJfdGVzdHNfY3BwZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rl
c3RXZWJLaXRGaW5kQ29udHJvbGxlcl9MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKLVBy
b2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktpdEZpbmRDb250cm9sbGVyX0xE
RkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MkdPYmpl
Y3RBUElUZXN0c19UZXN0UmVzb3VyY2VzX1NPVVJDRVMgPSBcCi0gICAgICAgIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RSZXNvdXJjZXMuY3BwCi1Qcm9ncmFtc19X
ZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RSZXNvdXJjZXNfQ1BQRkxBR1MgPSAkKHdlYmtpdDJf
dGVzdHNfY3BwZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RSZXNv
dXJjZXNfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQyR09i
amVjdEFQSVRlc3RzX1Rlc3RSZXNvdXJjZXNfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZs
YWdzKQotCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RDb29raWVNYW5hZ2Vy
X1NPVVJDRVMgPSBcCi0gICAgICAgIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL1Rlc3RDb29raWVNYW5hZ2VyLmNwcAotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0
c19UZXN0Q29va2llTWFuYWdlcl9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykK
LVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdENvb2tpZU1hbmFnZXJfTERBREQg
PSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3Rz
X1Rlc3RDb29raWVNYW5hZ2VyX0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKLQot
UHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0SW5zcGVjdG9yX1NPVVJDRVMgPSBc
Ci0gICAgICAgIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RJbnNw
ZWN0b3IuY3BwCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RJbnNwZWN0b3Jf
Q1BQRkxBR1MgPSBcCi0JJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0
MkdPYmplY3RBUElUZXN0c19UZXN0SW5zcGVjdG9yX0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xk
YWRkKQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0SW5zcGVjdG9yX0xERkxB
R1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RB
UElUZXN0c19UZXN0SW5zcGVjdG9yU2VydmVyX1NPVVJDRVMgPSBcCi0JU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdEluc3BlY3RvclNlcnZlci5jcHAKLVByb2dyYW1z
X1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdEluc3BlY3RvclNlcnZlcl9DUFBGTEFHUyA9ICQo
d2Via2l0Ml90ZXN0c19jcHBmbGFncykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNf
VGVzdEluc3BlY3RvclNlcnZlcl9MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKLVByb2dy
YW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdEluc3BlY3RvclNlcnZlcl9MREZMQUdTID0g
JCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVz
dHNfVGVzdFdlYktpdFZlcnNpb25fU09VUkNFUyA9IFwKLSAgICAgICAgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFZlcnNpb24uY3BwCi1Qcm9ncmFtc19X
ZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJLaXRWZXJzaW9uX0NQUEZMQUdTID0gJCh3ZWJr
aXQyX3Rlc3RzX2NwcGZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0
V2ViS2l0VmVyc2lvbl9MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dl
YktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktpdFZlcnNpb25fTERGTEFHUyA9ICQod2Via2l0
Ml90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RD
b250ZXh0TWVudV9TT1VSQ0VTID0gXAotICAgICAgICBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9UZXN0Q29udGV4dE1lbnUuY3BwCi1Qcm9ncmFtc19XZWJLaXQyR09iamVj
dEFQSVRlc3RzX1Rlc3RDb250ZXh0TWVudV9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBm
bGFncykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdENvbnRleHRNZW51X0xE
QUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElU
ZXN0c19UZXN0Q29udGV4dE1lbnVfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQot
Ci1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RTU0xfU09VUkNFUyA9IFwKLSAg
ICAgICAgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFNTTC5jcHAK
LVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFNTTF9DUFBGTEFHUyA9ICQod2Vi
a2l0Ml90ZXN0c19jcHBmbGFncykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVz
dFNTTF9MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDJHT2Jq
ZWN0QVBJVGVzdHNfVGVzdFNTTF9MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCi0K
LVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYkV4dGVuc2lvbnNfU09VUkNF
UyA9IFwKLSAgICAgICAgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVz
dFdlYkV4dGVuc2lvbnMuY3BwCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RX
ZWJFeHRlbnNpb25zX0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKQotUHJvZ3Jh
bXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2ViRXh0ZW5zaW9uc19MREFERCA9ICQod2Vi
a2l0Ml90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdl
YkV4dGVuc2lvbnNfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFt
c19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJLaXRXZWJWaWV3R3JvdXBfU09VUkNFUyA9
IFwKLSAgICAgICAgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdl
YktpdFdlYlZpZXdHcm91cC5jcHAKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVz
dFdlYktpdFdlYlZpZXdHcm91cF9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykK
LVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktpdFdlYlZpZXdHcm91cF9M
REFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJ
VGVzdHNfVGVzdFdlYktpdFdlYlZpZXdHcm91cF9MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xk
ZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdERPTU5vZGVfU09V
UkNFUyA9IFwKLSAgICAgICAgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
VGVzdERPTU5vZGUuY3BwCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RET01O
b2RlX0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0
MkdPYmplY3RBUElUZXN0c19UZXN0RE9NTm9kZV9MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFk
ZCkKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdERPTU5vZGVfTERGTEFHUyA9
ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRl
c3RzX1Rlc3RGcmFtZV9TT1VSQ0VTID0gXAotICAgICAgICBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9UZXN0RnJhbWUuY3BwCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQ
SVRlc3RzX1Rlc3RGcmFtZV9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKLVBy
b2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdEZyYW1lX0xEQUREID0gJCh3ZWJraXQy
X3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0RnJhbWVf
TERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQyR09i
amVjdEFQSVRlc3RzX1Rlc3RBdXRoZW50aWNhdGlvbl9TT1VSQ0VTID0gXAotICAgICAgICBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0QXV0aGVudGljYXRpb24uY3Bw
Ci1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RBdXRoZW50aWNhdGlvbl9DUFBG
TEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0
QVBJVGVzdHNfVGVzdEF1dGhlbnRpY2F0aW9uX0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRk
KQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0QXV0aGVudGljYXRpb25fTERG
TEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQyR09iamVj
dEFQSVRlc3RzX1Rlc3RVSUNsaWVudF9TT1VSQ0VTID0gXAotICAgICAgICBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0VUlDbGllbnQuY3BwCi1Qcm9ncmFtc19XZWJL
aXQyR09iamVjdEFQSVRlc3RzX1Rlc3RVSUNsaWVudF9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0
c19jcHBmbGFncykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFVJQ2xpZW50
X0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RB
UElUZXN0c19UZXN0VUlDbGllbnRfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQot
Ci1lbmRpZiAjIEVOQUJMRV9XRUJLSVQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9JbnNwZWN0b3JUZXN0U2VydmVyLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0luc3BlY3RvclRlc3RTZXJ2ZXIuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTNiMDQzLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0luc3BlY3RvclRlc3RTZXJ2ZXIuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBT
YW1zdW5nIEVsZWN0cm9uaWNzIEx0ZC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotICogQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
LSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1
ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgotCi1zdGF0aWMgdm9pZCBsb2FkQ2hhbmdlZENhbGxiYWNr
KFdlYktpdFdlYlZpZXcqLCBXZWJLaXRMb2FkRXZlbnQgbG9hZEV2ZW50LCBncG9pbnRlcikKLXsK
LSAgICAvLyBTZW5kIGEgbWVzc2FnZSB0byB0aGUgcGFyZW50IHByb2Nlc3Mgd2hlbiB3ZSdyZSBy
ZWFkeS4KLSAgICBpZiAobG9hZEV2ZW50ID09IFdFQktJVF9MT0FEX0ZJTklTSEVEKQotICAgICAg
ICBnX3ByaW50KCJPSyIpOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCi17
Ci0gICAgZ3RrX2luaXQoJmFyZ2MsICZhcmd2KTsKLQotICAgIC8vIE92ZXJ3cml0ZSBXRUJLSVRf
SU5TUEVDVE9SX1NFUlZFUiB2YXJpYWJsZSB3aXRoIGRlZmF1bHQgdmFsdWUuCi0gICAgZ19zZXRl
bnYoIldFQktJVF9JTlNQRUNUT1JfU0VSVkVSIiwgIjEyNy4wLjAuMToyOTk5IiwgVFJVRSk7Ci0K
LSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJf
dmlld19uZXcoKSk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfZGV2ZWxvcGVyX2V4
dHJhcyh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdlYlZpZXcpLCBUUlVFKTsKLSAgICB3
ZWJraXRfd2ViX3ZpZXdfbG9hZF9odG1sKHdlYlZpZXcsCi0gICAgICAgICI8aHRtbD48Ym9keT48
cD5XZWJLaXRHVEsrIEluc3BlY3RvciBUZXN0IFNlcnZlcjwvcD48L2JvZHk+PC9odG1sPiIsCi0g
ICAgICAgICJodHRwOi8vMTI3LjAuMC4xOjI5OTkvIik7Ci0KLSAgICBHdGtXaWRnZXQqIHdpbmRv
dyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOwotICAgIGd0a19jb250YWlu
ZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgR1RLX1dJREdFVCh3ZWJWaWV3KSk7Ci0gICAg
Z3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh3aW5k
b3csICJkZWxldGUtZXZlbnQiLCBHX0NBTExCQUNLKGd0a19tYWluX3F1aXQpLCAwKTsKLSAgICBn
X3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJsb2FkLWNoYW5nZWQiLCBHX0NBTExCQUNLKGxvYWRD
aGFuZ2VkQ2FsbGJhY2spLCAwKTsKLQotICAgIGd0a19tYWluKCk7Ci19CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9Mb2FkVHJhY2tpbmdUZXN0LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0xvYWRUcmFja2luZ1Rl
c3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjM0MjA0Li4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0xvYWRUcmFja2luZ1Rl
c3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjA3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkxvYWRU
cmFja2luZ1Rlc3QuaCIKLQotI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgotCi1zdGF0aWMg
dm9pZCBsb2FkQ2hhbmdlZENhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdExv
YWRFdmVudCBsb2FkRXZlbnQsIExvYWRUcmFja2luZ1Rlc3QqIHRlc3QpCi17Ci0gICAgc3dpdGNo
IChsb2FkRXZlbnQpIHsKLSAgICBjYXNlIFdFQktJVF9MT0FEX1NUQVJURUQ6Ci0gICAgICAgIGdf
YXNzZXJ0KHdlYmtpdF93ZWJfdmlld19pc19sb2FkaW5nKHdlYlZpZXcpKTsKLSAgICAgICAgZ19h
c3NlcnRfY21wc3RyKHRlc3QtPm1fYWN0aXZlVVJJLmRhdGEoKSwgPT0sIHdlYmtpdF93ZWJfdmll
d19nZXRfdXJpKHdlYlZpZXcpKTsKLSAgICAgICAgdGVzdC0+cHJvdmlzaW9uYWxMb2FkU3RhcnRl
ZCgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdFQktJVF9MT0FEX1JFRElSRUNURUQ6Ci0g
ICAgICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19pc19sb2FkaW5nKHdlYlZpZXcpKTsKLSAg
ICAgICAgdGVzdC0+bV9hY3RpdmVVUkkgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSh3ZWJWaWV3
KTsKLSAgICAgICAgaWYgKCF0ZXN0LT5tX3JlZGlyZWN0VVJJLmlzTnVsbCgpKQotICAgICAgICAg
ICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPm1fcmVkaXJlY3RVUkkuZGF0YSgpLCA9PSwgdGVzdC0+
bV9hY3RpdmVVUkkuZGF0YSgpKTsKLSAgICAgICAgdGVzdC0+cHJvdmlzaW9uYWxMb2FkUmVjZWl2
ZWRTZXJ2ZXJSZWRpcmVjdCgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdFQktJVF9MT0FE
X0NPTU1JVFRFRDogewotICAgICAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfaXNfbG9hZGlu
Zyh3ZWJWaWV3KSk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXN0LT5tX2FjdGl2ZVVSSS5k
YXRhKCksID09LCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSh3ZWJWaWV3KSk7Ci0KLSAgICAgICAg
Ly8gQ2hlY2sgdGhhdCBvbiBjb21taXR0ZWQgd2UgYWx3YXlzIGhhdmUgYSBtYWluIHJlc291cmNl
IHdpdGggYSByZXNwb25zZS4KLSAgICAgICAgV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlID0g
d2Via2l0X3dlYl92aWV3X2dldF9tYWluX3Jlc291cmNlKHdlYlZpZXcpOwotICAgICAgICBnX2Fz
c2VydChyZXNvdXJjZSk7Ci0gICAgICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0
X3Jlc3BvbnNlKHJlc291cmNlKSk7Ci0KLSAgICAgICAgdGVzdC0+bG9hZENvbW1pdHRlZCgpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBXRUJLSVRfTE9BRF9GSU5JU0hFRDoKLSAg
ICAgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19pc19sb2FkaW5nKHdlYlZpZXcpKTsKLSAg
ICAgICAgaWYgKCF0ZXN0LT5tX2xvYWRGYWlsZWQpCi0gICAgICAgICAgICBnX2Fzc2VydF9jbXBz
dHIodGVzdC0+bV9hY3RpdmVVUkkuZGF0YSgpLCA9PSwgd2Via2l0X3dlYl92aWV3X2dldF91cmko
d2ViVmlldykpOwotICAgICAgICB0ZXN0LT5sb2FkRmluaXNoZWQoKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICB9Ci19
Ci0KLXN0YXRpYyB2b2lkIGxvYWRGYWlsZWRDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3
LCBXZWJLaXRMb2FkRXZlbnQgbG9hZEV2ZW50LCBjb25zdCBjaGFyKiBmYWlsaW5nVVJJLCBHRXJy
b3IqIGVycm9yLCBMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0KQotewotICAgIHRlc3QtPm1fbG9hZEZh
aWxlZCA9IHRydWU7Ci0gICAgdGVzdC0+bV9lcnJvci5zZXQoZ19lcnJvcl9jb3B5KGVycm9yKSk7
Ci0KLSAgICBzd2l0Y2ggKGxvYWRFdmVudCkgewotICAgIGNhc2UgV0VCS0lUX0xPQURfU1RBUlRF
RDoKLSAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19pc19sb2FkaW5nKHdlYlZpZXcp
KTsKLSAgICAgICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPm1fYWN0aXZlVVJJLmRhdGEoKSwgPT0s
IHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKHdlYlZpZXcpKTsKLSAgICAgICAgZ19hc3NlcnQoZXJy
b3IpOwotICAgICAgICB0ZXN0LT5wcm92aXNpb25hbExvYWRGYWlsZWQoZmFpbGluZ1VSSSwgZXJy
b3IpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdFQktJVF9MT0FEX0NPTU1JVFRFRDoKLSAg
ICAgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19pc19sb2FkaW5nKHdlYlZpZXcpKTsKLSAg
ICAgICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPm1fYWN0aXZlVVJJLmRhdGEoKSwgPT0sIHdlYmtp
dF93ZWJfdmlld19nZXRfdXJpKHdlYlZpZXcpKTsKLSAgICAgICAgZ19hc3NlcnQoZXJyb3IpOwot
ICAgICAgICB0ZXN0LT5sb2FkRmFpbGVkKGZhaWxpbmdVUkksIGVycm9yKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICB9
Ci19Ci0KLXN0YXRpYyB2b2lkIGVzdGltYXRlZFByb2dyZXNzQ2hhbmdlZENhbGxiYWNrKEdPYmpl
Y3QqLCBHUGFyYW1TcGVjKiwgTG9hZFRyYWNraW5nVGVzdCogdGVzdCkKLXsKLSAgICB0ZXN0LT5l
c3RpbWF0ZWRQcm9ncmVzc0NoYW5nZWQoKTsKLX0KLQotTG9hZFRyYWNraW5nVGVzdDo6TG9hZFRy
YWNraW5nVGVzdCgpCi0gICAgOiBtX3J1bkxvYWRVbnRpbENvbXBsZXRpb24oZmFsc2UpCi0gICAg
LCBtX2xvYWRGYWlsZWQoZmFsc2UpCi17Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcs
ICJsb2FkLWNoYW5nZWQiLCBHX0NBTExCQUNLKGxvYWRDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsK
LSAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImxvYWQtZmFpbGVkIiwgR19DQUxMQkFD
Syhsb2FkRmFpbGVkQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2Vi
VmlldywgIm5vdGlmeTo6ZXN0aW1hdGVkLWxvYWQtcHJvZ3Jlc3MiLCBHX0NBTExCQUNLKGVzdGlt
YXRlZFByb2dyZXNzQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7Ci0KLSAgICBnX2Fzc2VydCghd2Vi
a2l0X3dlYl92aWV3X2dldF91cmkobV93ZWJWaWV3KSk7Ci19Ci0KLUxvYWRUcmFja2luZ1Rlc3Q6
On5Mb2FkVHJhY2tpbmdUZXN0KCkKLXsKLSAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0
X21hdGNoZWQobV93ZWJWaWV3LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlz
KTsKLX0KLQotdm9pZCBMb2FkVHJhY2tpbmdUZXN0Ojp3YWl0VW50aWxMb2FkRmluaXNoZWQoKQot
ewotICAgIG1fZXN0aW1hdGVkUHJvZ3Jlc3MgPSAwOwotICAgIG1fcnVuTG9hZFVudGlsQ29tcGxl
dGlvbiA9IHRydWU7Ci0gICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotfQotCi12b2lk
IExvYWRUcmFja2luZ1Rlc3Q6OnByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQoKQotewotICAgIG1fbG9h
ZEV2ZW50cy5hcHBlbmQoUHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7Ci19Ci0KLXZvaWQgTG9hZFRy
YWNraW5nVGVzdDo6cHJvdmlzaW9uYWxMb2FkUmVjZWl2ZWRTZXJ2ZXJSZWRpcmVjdCgpCi17Ci0g
ICAgbV9sb2FkRXZlbnRzLmFwcGVuZChQcm92aXNpb25hbExvYWRSZWNlaXZlZFNlcnZlclJlZGly
ZWN0KTsKLX0KLQotdm9pZCBMb2FkVHJhY2tpbmdUZXN0Ojpwcm92aXNpb25hbExvYWRGYWlsZWQo
Y29uc3QgZ2NoYXIqIGZhaWxpbmdVUkksIEdFcnJvciogZXJyb3IpCi17Ci0gICAgbV9sb2FkRXZl
bnRzLmFwcGVuZChQcm92aXNpb25hbExvYWRGYWlsZWQpOwotfQotCi12b2lkIExvYWRUcmFja2lu
Z1Rlc3Q6OmxvYWRDb21taXR0ZWQoKQotewotICAgIG1fbG9hZEV2ZW50cy5hcHBlbmQoTG9hZENv
bW1pdHRlZCk7Ci19Ci0KLXZvaWQgTG9hZFRyYWNraW5nVGVzdDo6bG9hZEZpbmlzaGVkKCkKLXsK
LSAgICBtX2xvYWRFdmVudHMuYXBwZW5kKExvYWRGaW5pc2hlZCk7Ci0gICAgaWYgKG1fcnVuTG9h
ZFVudGlsQ29tcGxldGlvbikKLSAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX21haW5Mb29wKTsK
LX0KLQotdm9pZCBMb2FkVHJhY2tpbmdUZXN0Ojpsb2FkRmFpbGVkKGNvbnN0IGdjaGFyKiBmYWls
aW5nVVJJLCBHRXJyb3IqIGVycm9yKQotewotICAgIG1fbG9hZEV2ZW50cy5hcHBlbmQoTG9hZEZh
aWxlZCk7Ci19Ci0KLXZvaWQgTG9hZFRyYWNraW5nVGVzdDo6ZXN0aW1hdGVkUHJvZ3Jlc3NDaGFu
Z2VkKCkKLXsKLSAgICBkb3VibGUgcHJvZ3Jlc3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2VzdGlt
YXRlZF9sb2FkX3Byb2dyZXNzKG1fd2ViVmlldyk7Ci0gICAgZ19hc3NlcnRfY21wZmxvYXQobV9l
c3RpbWF0ZWRQcm9ncmVzcywgPCwgcHJvZ3Jlc3MpOwotICAgIG1fZXN0aW1hdGVkUHJvZ3Jlc3Mg
PSBwcm9ncmVzczsKLX0KLQotdm9pZCBMb2FkVHJhY2tpbmdUZXN0Ojpsb2FkVVJJKGNvbnN0IGNo
YXIqIHVyaSkKLXsKLSAgICBtX2xvYWRFdmVudHMuY2xlYXIoKTsKLSAgICBtX2VzdGltYXRlZFBy
b2dyZXNzID0gMDsKLSAgICBtX2Vycm9yLmNsZWFyKCk7Ci0gICAgV2ViVmlld1Rlc3Q6OmxvYWRV
UkkodXJpKTsKLX0KLQotdm9pZCBMb2FkVHJhY2tpbmdUZXN0Ojpsb2FkSHRtbChjb25zdCBjaGFy
KiBodG1sLCBjb25zdCBjaGFyKiBiYXNlVVJJKQotewotICAgIG1fbG9hZEV2ZW50cy5jbGVhcigp
OwotICAgIG1fZXN0aW1hdGVkUHJvZ3Jlc3MgPSAwOwotICAgIG1fZXJyb3IuY2xlYXIoKTsKLSAg
ICBXZWJWaWV3VGVzdDo6bG9hZEh0bWwoaHRtbCwgYmFzZVVSSSk7Ci19Ci0KLXZvaWQgTG9hZFRy
YWNraW5nVGVzdDo6bG9hZFBsYWluVGV4dChjb25zdCBjaGFyKiBwbGFpblRleHQpCi17Ci0gICAg
bV9sb2FkRXZlbnRzLmNsZWFyKCk7Ci0gICAgbV9lc3RpbWF0ZWRQcm9ncmVzcyA9IDA7Ci0gICAg
bV9lcnJvci5jbGVhcigpOwotICAgIFdlYlZpZXdUZXN0Ojpsb2FkUGxhaW5UZXh0KHBsYWluVGV4
dCk7Ci19Ci0KLXZvaWQgTG9hZFRyYWNraW5nVGVzdDo6bG9hZFJlcXVlc3QoV2ViS2l0VVJJUmVx
dWVzdCogcmVxdWVzdCkKLXsKLSAgICBtX2xvYWRFdmVudHMuY2xlYXIoKTsKLSAgICBtX2VzdGlt
YXRlZFByb2dyZXNzID0gMDsKLSAgICBtX2Vycm9yLmNsZWFyKCk7Ci0gICAgV2ViVmlld1Rlc3Q6
OmxvYWRSZXF1ZXN0KHJlcXVlc3QpOwotfQotCi12b2lkIExvYWRUcmFja2luZ1Rlc3Q6OnJlbG9h
ZCgpCi17Ci0gICAgbV9sb2FkRXZlbnRzLmNsZWFyKCk7Ci0gICAgbV9lc3RpbWF0ZWRQcm9ncmVz
cyA9IDA7Ci0gICAgbV9lcnJvci5jbGVhcigpOwotICAgIHdlYmtpdF93ZWJfdmlld19yZWxvYWQo
bV93ZWJWaWV3KTsKLX0KLQotdm9pZCBMb2FkVHJhY2tpbmdUZXN0Ojpnb0JhY2soKQotewotICAg
IG1fbG9hZEV2ZW50cy5jbGVhcigpOwotICAgIG1fZXN0aW1hdGVkUHJvZ3Jlc3MgPSAwOwotICAg
IG1fZXJyb3IuY2xlYXIoKTsKLSAgICBXZWJWaWV3VGVzdDo6Z29CYWNrKCk7Ci19Ci0KLXZvaWQg
TG9hZFRyYWNraW5nVGVzdDo6Z29Gb3J3YXJkKCkKLXsKLSAgICBtX2xvYWRFdmVudHMuY2xlYXIo
KTsKLSAgICBtX2VzdGltYXRlZFByb2dyZXNzID0gMDsKLSAgICBtX2Vycm9yLmNsZWFyKCk7Ci0g
ICAgV2ViVmlld1Rlc3Q6OmdvRm9yd2FyZCgpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvTG9hZFRyYWNraW5nVGVzdC5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvTG9hZFRyYWNraW5nVGVzdC5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2NmNzg0Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0xvYWRUcmFja2luZ1Rlc3QuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMu
TC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8K
LQotI2lmbmRlZiBMb2FkVHJhY2tpbmdUZXN0X2gKLSNkZWZpbmUgTG9hZFRyYWNraW5nVGVzdF9o
Ci0KLSNpbmNsdWRlICJUZXN0TWFpbi5oIgotI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCi0jaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1jbGFzcyBMb2FkVHJhY2tpbmdUZXN0IDogcHVibGljIFdl
YlZpZXdUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKExvYWRUcmFj
a2luZ1Rlc3QpOwotICAgIExvYWRUcmFja2luZ1Rlc3QoKTsKLSAgICB2aXJ0dWFsIH5Mb2FkVHJh
Y2tpbmdUZXN0KCk7Ci0gICAgdm9pZCB3YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIHZp
cnR1YWwgdm9pZCBwcm92aXNpb25hbExvYWRTdGFydGVkKCk7Ci0gICAgdmlydHVhbCB2b2lkIHBy
b3Zpc2lvbmFsTG9hZFJlY2VpdmVkU2VydmVyUmVkaXJlY3QoKTsKLSAgICB2aXJ0dWFsIHZvaWQg
cHJvdmlzaW9uYWxMb2FkRmFpbGVkKGNvbnN0IGdjaGFyKiBmYWlsaW5nVVJJLCBHRXJyb3IqKTsK
LSAgICB2aXJ0dWFsIHZvaWQgbG9hZENvbW1pdHRlZCgpOwotICAgIHZpcnR1YWwgdm9pZCBsb2Fk
RmluaXNoZWQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZEZhaWxlZChjb25zdCBjaGFyKiBmYWls
aW5nVVJJLCBHRXJyb3IqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZXN0aW1hdGVkUHJvZ3Jlc3NDaGFu
Z2VkKCk7Ci0KLSAgICB2b2lkIGxvYWRVUkkoY29uc3QgY2hhciogdXJpKTsKLSAgICB2b2lkIGxv
YWRIdG1sKGNvbnN0IGNoYXIqIGh0bWwsIGNvbnN0IGNoYXIqIGJhc2VVUkkpOwotICAgIHZvaWQg
bG9hZFBsYWluVGV4dChjb25zdCBjaGFyKiBwbGFpblRleHQpOwotICAgIHZvaWQgbG9hZFJlcXVl
c3QoV2ViS2l0VVJJUmVxdWVzdCopOwotICAgIHZvaWQgcmVsb2FkKCk7Ci0gICAgdm9pZCBnb0Jh
Y2soKTsKLSAgICB2b2lkIGdvRm9yd2FyZCgpOwotCi0gICAgdm9pZCBzZXRSZWRpcmVjdFVSSShj
b25zdCBjaGFyKiB1cmkpIHsgbV9yZWRpcmVjdFVSSSA9IHVyaTsgfQotCi0gICAgZW51bSBMb2Fk
RXZlbnRzIHsKLSAgICAgICAgUHJvdmlzaW9uYWxMb2FkU3RhcnRlZCwKLSAgICAgICAgUHJvdmlz
aW9uYWxMb2FkUmVjZWl2ZWRTZXJ2ZXJSZWRpcmVjdCwKLSAgICAgICAgUHJvdmlzaW9uYWxMb2Fk
RmFpbGVkLAotICAgICAgICBMb2FkQ29tbWl0dGVkLAotICAgICAgICBMb2FkRmluaXNoZWQsCi0g
ICAgICAgIExvYWRGYWlsZWQKLSAgICB9OwotICAgIGJvb2wgbV9ydW5Mb2FkVW50aWxDb21wbGV0
aW9uOwotICAgIGJvb2wgbV9sb2FkRmFpbGVkOwotICAgIEdPd25QdHI8R0Vycm9yPiBtX2Vycm9y
OwotICAgIFZlY3RvcjxMb2FkRXZlbnRzPiBtX2xvYWRFdmVudHM7Ci0gICAgZmxvYXQgbV9lc3Rp
bWF0ZWRQcm9ncmVzczsKLSAgICBDU3RyaW5nIG1fcmVkaXJlY3RVUkk7Ci19OwotCi0jZW5kaWYg
Ly8gTG9hZFRyYWNraW5nVGVzdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9UZXN0QXV0aGVudGljYXRpb24uY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdEF1dGhlbnRpY2F0aW9uLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZWRlNDIyNS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0QXV0aGVudGljYXRpb24uY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMjg2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlh
IFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiwxIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJMb2FkVHJhY2tpbmdUZXN0Lmgi
Ci0jaW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5oIgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dS
ZWZQdHIuaD4KLQotc3RhdGljIFdlYktpdFRlc3RTZXJ2ZXIqIGtTZXJ2ZXI7Ci0KLWNsYXNzIEF1
dGhlbnRpY2F0aW9uVGVzdDogcHVibGljIExvYWRUcmFja2luZ1Rlc3QgewotcHVibGljOgotICAg
IE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoQXV0aGVudGljYXRpb25UZXN0KTsKLQotICAgIEF1dGhl
bnRpY2F0aW9uVGVzdCgpCi0gICAgewotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmll
dywgImF1dGhlbnRpY2F0ZSIsIEdfQ0FMTEJBQ0socnVuQXV0aGVudGljYXRpb25DYWxsYmFjayks
IHRoaXMpOwotICAgIH0KLQotICAgIH5BdXRoZW50aWNhdGlvblRlc3QoKQotICAgIHsKLSAgICAg
ICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fd2ViVmlldywgR19TSUdO
QUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7Ci0gICAgfQotCi0gICAgc3RhdGljIGlu
dCBhdXRoZW50aWNhdGlvblJldHJpZXM7Ci0gICAgc3RhdGljIGJvb2wgYXV0aGVudGljYXRpb25D
YW5jZWxsZWRSZWNlaXZlZDsKLQotICAgIHZvaWQgbG9hZFVSSShjb25zdCBjaGFyKiB1cmkpCi0g
ICAgewotICAgICAgICAvLyBSZXNldCB0aGUgcmV0cnkgY291bnQgb2YgdGhlIGZha2Ugc2VydmVy
IHdoZW4gYSBwYWdlIGlzIGxvYWRlZC4KLSAgICAgICAgYXV0aGVudGljYXRpb25SZXRyaWVzID0g
MDsKLSAgICAgICAgYXV0aGVudGljYXRpb25DYW5jZWxsZWRSZWNlaXZlZCA9IGZhbHNlOwotICAg
ICAgICBMb2FkVHJhY2tpbmdUZXN0Ojpsb2FkVVJJKHVyaSk7Ci0gICAgfQotCi0gICAgc3RhdGlj
IGdib29sZWFuIHJ1bkF1dGhlbnRpY2F0aW9uQ2FsbGJhY2soV2ViS2l0V2ViVmlldyosIFdlYktp
dEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCwgQXV0aGVudGljYXRpb25UZXN0KiB0ZXN0
KQotICAgIHsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChyZXF1ZXN0LCAiY2FuY2VsbGVkIiwg
R19DQUxMQkFDSyhhdXRoZW50aWNhdGlvbkNhbmNlbGxlZENhbGxiYWNrKSwgdGVzdCk7Ci0gICAg
ICAgIHRlc3QtPnJ1bkF1dGhlbnRpY2F0aW9uKHJlcXVlc3QpOwotICAgICAgICByZXR1cm4gVFJV
RTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBhdXRoZW50aWNhdGlvbkNhbmNlbGxlZENhbGxi
YWNrKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCosIEF1dGhlbnRpY2F0aW9uVGVzdCopCi0g
ICAgewotICAgICAgICBhdXRoZW50aWNhdGlvbkNhbmNlbGxlZFJlY2VpdmVkID0gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICB2b2lkIHJ1bkF1dGhlbnRpY2F0aW9uKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVx
dWVzdCogcmVxdWVzdCkKLSAgICB7Ci0gICAgICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5U
ZXN0RmluaXNoZXMoR19PQkpFQ1QocmVxdWVzdCkpOwotICAgICAgICBtX2F1dGhlbnRpY2F0aW9u
UmVxdWVzdCA9IHJlcXVlc3Q7Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7
Ci0gICAgfQotCi0gICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiB3YWl0Rm9yQXV0aGVu
dGljYXRpb25SZXF1ZXN0KCkKLSAgICB7Ci0gICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5M
b29wKTsKLSAgICAgICAgcmV0dXJuIG1fYXV0aGVudGljYXRpb25SZXF1ZXN0LmdldCgpOwotICAg
IH0KLQotcHJpdmF0ZToKLSAgICBHUmVmUHRyPFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdD4g
bV9hdXRoZW50aWNhdGlvblJlcXVlc3Q7Ci19OwotCi1pbnQgQXV0aGVudGljYXRpb25UZXN0Ojph
dXRoZW50aWNhdGlvblJldHJpZXMgPSAwOwotYm9vbCBBdXRoZW50aWNhdGlvblRlc3Q6OmF1dGhl
bnRpY2F0aW9uQ2FuY2VsbGVkUmVjZWl2ZWQgPSBmYWxzZTsKLQotc3RhdGljIGNvbnN0IGNoYXIg
YXV0aFRlc3RVc2VybmFtZVtdID0gInVzZXJuYW1lIjsKLXN0YXRpYyBjb25zdCBjaGFyIGF1dGhU
ZXN0UGFzc3dvcmRbXSA9ICJwYXNzd29yZCI7Ci1zdGF0aWMgY29uc3QgY2hhciBhdXRoRXhwZWN0
ZWRTdWNjZXNzVGl0bGVbXSA9ICJXZWJLaXQyR3RrKyBBdXRoZW50aWNhdGlvbiB0ZXN0IjsKLXN0
YXRpYyBjb25zdCBjaGFyIGF1dGhFeHBlY3RlZEZhaWx1cmVUaXRsZVtdID0gIjQwMSBBdXRob3Jp
emF0aW9uIFJlcXVpcmVkIjsKLXN0YXRpYyBjb25zdCBjaGFyIGF1dGhFeHBlY3RlZEF1dGhvcml6
YXRpb25bXSA9ICJCYXNpYyBkWE5sY201aGJXVTZjR0Z6YzNkdmNtUT0iOyAvLyBCYXNlNjQgZW5j
b2Rpbmcgb2YgInVzZXJuYW1lOnBhc3N3b3JkIi4KLXN0YXRpYyBjb25zdCBjaGFyIGF1dGhTdWNj
ZXNzSFRNTFN0cmluZ1tdID0KLSAgICAiPGh0bWw+IgotICAgICI8aGVhZD48dGl0bGU+V2ViS2l0
Mkd0aysgQXV0aGVudGljYXRpb24gdGVzdDwvdGl0bGU+PC9oZWFkPiIKLSAgICAiPGJvZHk+PC9i
b2R5PjwvaHRtbD4iOwotc3RhdGljIGNvbnN0IGNoYXIgYXV0aEZhaWx1cmVIVE1MU3RyaW5nW10g
PQotICAgICI8aHRtbD4iCi0gICAgIjxoZWFkPjx0aXRsZT40MDEgQXV0aG9yaXphdGlvbiBSZXF1
aXJlZDwvdGl0bGU+PC9oZWFkPiIKLSAgICAiPGJvZHk+PC9ib2R5PjwvaHRtbD4iOwotCi1zdGF0
aWMgdm9pZCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uUmVxdWVzdChBdXRoZW50aWNhdGlvblRl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgLy8gVGVzdCBhdXRoZW50aWNhdGlvbiBy
ZXF1ZXN0IGdldHRlcnMgbWF0Y2ggc291cCBhdXRoZW50aWNhdGlvbiBoZWFkZXIuCi0gICAgdGVz
dC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvYXV0aC10ZXN0Lmh0bWwiKS5kYXRh
KCkpOwotICAgIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCA9IHRlc3QtPndh
aXRGb3JBdXRoZW50aWNhdGlvblJlcXVlc3QoKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0
X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X2hvc3QocmVxdWVzdCksID09LCBzb3VwX3VyaV9n
ZXRfaG9zdChrU2VydmVyLT5iYXNlVVJJKCkpKTsKLSAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtp
dF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9wb3J0KHJlcXVlc3QpLCA9PSwgc291cF91cmlf
Z2V0X3BvcnQoa1NlcnZlci0+YmFzZVVSSSgpKSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtp
dF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9yZWFsbShyZXF1ZXN0KSwgPT0sICJteSByZWFs
bSIpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9zY2hl
bWUocmVxdWVzdCkgPT0gV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1NDSEVNRV9IVFRQX0JBU0lDKTsK
LSAgICBnX2Fzc2VydCghd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfaXNfZm9yX3Byb3h5
KHJlcXVlc3QpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3Rf
aXNfcmV0cnkocmVxdWVzdCkpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0F1dGhlbnRp
Y2F0aW9uQ2FuY2VsKEF1dGhlbnRpY2F0aW9uVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsK
LSAgICAvLyBUZXN0IGNhbmNlbC4KLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZv
clBhdGgoIi9hdXRoLXRlc3QuaHRtbCIpLmRhdGEoKSk7Ci0gICAgV2ViS2l0QXV0aGVudGljYXRp
b25SZXF1ZXN0KiByZXF1ZXN0ID0gdGVzdC0+d2FpdEZvckF1dGhlbnRpY2F0aW9uUmVxdWVzdCgp
OwotICAgIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2NhbmNlbChyZXF1ZXN0KTsKLSAg
ICAvLyBTZXJ2ZXIgZG9lc24ndCBhc2sgZm9yIG5ldyBjcmVkZW50aWFscy4KLSAgICB0ZXN0LT53
YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xv
YWRFdmVudHMuc2l6ZSgpLCA9PSwgMyk7Ci0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9h
ZEV2ZW50c1swXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQp
OwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMV0sID09LCBMb2FkVHJh
Y2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRGYWlsZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0
ZXN0LT5tX2xvYWRFdmVudHNbMl0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQp
OwotCi0gICAgZ19hc3NlcnRfZXJyb3IodGVzdC0+bV9lcnJvci5nZXQoKSwgV0VCS0lUX05FVFdP
UktfRVJST1IsIFdFQktJVF9ORVRXT1JLX0VSUk9SX0NBTkNFTExFRCk7Ci19Ci0KLXN0YXRpYyB2
b2lkIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25Mb2FkQ2FuY2VsbGVkKEF1dGhlbnRpY2F0aW9u
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXIt
PmdldFVSSUZvclBhdGgoIi9hdXRoLXRlc3QuaHRtbCIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2Fp
dEZvckF1dGhlbnRpY2F0aW9uUmVxdWVzdCgpOwotICAgIHdlYmtpdF93ZWJfdmlld19zdG9wX2xv
YWRpbmcodGVzdC0+bV93ZWJWaWV3KTsKLSAgICAvLyBFeHBlY3QgZW1wdHkgcGFnZS4KLSAgICB0
ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5hdXRoZW50
aWNhdGlvbkNhbmNlbGxlZFJlY2VpdmVkKTsKLQotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5t
X2xvYWRFdmVudHMuc2l6ZSgpLCA9PSwgMyk7Ci0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1f
bG9hZEV2ZW50c1swXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0
ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMV0sID09LCBMb2Fk
VHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRGYWlsZWQpOwotICAgIGdfYXNzZXJ0X2NtcGlu
dCh0ZXN0LT5tX2xvYWRFdmVudHNbMl0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNo
ZWQpOwotCi0gICAgZ19hc3NlcnRfZXJyb3IodGVzdC0+bV9lcnJvci5nZXQoKSwgV0VCS0lUX05F
VFdPUktfRVJST1IsIFdFQktJVF9ORVRXT1JLX0VSUk9SX0NBTkNFTExFRCk7Ci19Ci0KLXN0YXRp
YyB2b2lkIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25GYWlsdXJlKEF1dGhlbnRpY2F0aW9uVGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICAvLyBUZXN0IGF1dGhlbnRpY2F0aW9uIGZh
aWx1cmVzLgotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2F1dGgt
dGVzdC5odG1sIikuZGF0YSgpKTsKLSAgICBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJl
cXVlc3QgPSB0ZXN0LT53YWl0Rm9yQXV0aGVudGljYXRpb25SZXF1ZXN0KCk7Ci0gICAgZ19hc3Nl
cnQoIXdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2lzX3JldHJ5KHJlcXVlc3QpKTsKLSAg
ICBXZWJLaXRDcmVkZW50aWFsKiBjcmVkZW50aWFsID0gd2Via2l0X2NyZWRlbnRpYWxfbmV3KGF1
dGhUZXN0VXNlcm5hbWUsICJ3cm9uZ3Bhc3N3b3JkIiwgV0VCS0lUX0NSRURFTlRJQUxfUEVSU0lT
VEVOQ0VfTk9ORSk7Ci0gICAgd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfYXV0aGVudGlj
YXRlKHJlcXVlc3QsIGNyZWRlbnRpYWwpOwotICAgIHdlYmtpdF9jcmVkZW50aWFsX2ZyZWUoY3Jl
ZGVudGlhbCk7Ci0gICAgLy8gRXhwZWN0IGEgc2Vjb25kIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3Qu
Ci0gICAgcmVxdWVzdCA9IHRlc3QtPndhaXRGb3JBdXRoZW50aWNhdGlvblJlcXVlc3QoKTsKLSAg
ICBnX2Fzc2VydCh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9pc19yZXRyeShyZXF1ZXN0
KSk7Ci0gICAgLy8gVGVzdCBzZWNvbmQgZmFpbHVyZS4KLSAgICBjcmVkZW50aWFsID0gd2Via2l0
X2NyZWRlbnRpYWxfbmV3KGF1dGhUZXN0VXNlcm5hbWUsICJ3cm9uZ3Bhc3N3b3JkMiIsIFdFQktJ
VF9DUkVERU5USUFMX1BFUlNJU1RFTkNFX05PTkUpOwotICAgIHdlYmtpdF9hdXRoZW50aWNhdGlv
bl9yZXF1ZXN0X2F1dGhlbnRpY2F0ZShyZXF1ZXN0LCBjcmVkZW50aWFsKTsKLSAgICB3ZWJraXRf
Y3JlZGVudGlhbF9mcmVlKGNyZWRlbnRpYWwpOwotICAgIC8vIEV4cGVjdCBhdXRoZW50aWNhdGlv
biBmYWlsZWQgcGFnZS4KLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAg
IGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHMuc2l6ZSgpLCA9PSwgMyk7Ci0gICAg
Z19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1swXSwgPT0sIExvYWRUcmFja2luZ1Rl
c3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5t
X2xvYWRFdmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkQ29tbWl0dGVkKTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5n
VGVzdDo6TG9hZEZpbmlzaGVkKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3
X2dldF90aXRsZSh0ZXN0LT5tX3dlYlZpZXcpLCA9PSwgYXV0aEV4cGVjdGVkRmFpbHVyZVRpdGxl
KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvbk5vQ3JlZGVudGlh
bChBdXRoZW50aWNhdGlvblRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgLy8gVGVz
dCBjb250aW51ZSB3aXRob3V0IGNyZWRlbnRpYWxzLgotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZl
ci0+Z2V0VVJJRm9yUGF0aCgiL2F1dGgtdGVzdC5odG1sIikuZGF0YSgpKTsKLSAgICBXZWJLaXRB
dXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QgPSB0ZXN0LT53YWl0Rm9yQXV0aGVudGljYXRp
b25SZXF1ZXN0KCk7Ci0gICAgd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfYXV0aGVudGlj
YXRlKHJlcXVlc3QsIDApOwotICAgIC8vIFNlcnZlciBkb2Vzbid0IGFzayBmb3IgbmV3IGNyZWRl
bnRpYWxzLgotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3Nl
cnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50cy5zaXplKCksID09LCAzKTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJv
dmlzaW9uYWxMb2FkU3RhcnRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2
ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRDb21taXR0ZWQpOwotICAgIGdfYXNz
ZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMl0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpM
b2FkRmluaXNoZWQpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3Rp
dGxlKHRlc3QtPm1fd2ViVmlldyksID09LCBhdXRoRXhwZWN0ZWRGYWlsdXJlVGl0bGUpOwotfQot
Ci1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uU3RvcmFnZShBdXRoZW50aWNh
dGlvblRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgLy8gRW5hYmxlIHByaXZhdGUg
YnJvd3NpbmcgYmVmb3JlIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QgdG8gdGVzdCB0aGF0IGNyZWRl
bnRpYWxzIGNhbid0IGJlIHNhdmVkLgotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX3By
aXZhdGVfYnJvd3Npbmcod2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh0ZXN0LT5tX3dlYlZp
ZXcpLCBUUlVFKTsKLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9h
dXRoLXRlc3QuaHRtbCIpLmRhdGEoKSk7Ci0gICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0
KiByZXF1ZXN0ID0gdGVzdC0+d2FpdEZvckF1dGhlbnRpY2F0aW9uUmVxdWVzdCgpOwotICAgIGdf
YXNzZXJ0KCF3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcHJvcG9zZWRfY3JlZGVu
dGlhbChyZXF1ZXN0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1
ZXN0X2Nhbl9zYXZlX2NyZWRlbnRpYWxzKHJlcXVlc3QpKTsKLQotICAgIC8vIElmIFdlYktpdCBo
YXMgYmVlbiBjb21waWxlZCB3aXRoIGxpYnNlY3JldCwgYW5kIHByaXZhdGUgYnJvd3NpbmcgaXMg
ZGlzYWJsZWQKLSAgICAvLyB0aGVuIGNoZWNrIHRoYXQgY3JlZGVudGlhbHMgY2FuIGJlIHNhdmVk
LgotI2lmIEVOQUJMRShDUkVERU5USUFMX1NUT1JBR0UpCi0gICAgd2Via2l0X3NldHRpbmdzX3Nl
dF9lbmFibGVfcHJpdmF0ZV9icm93c2luZyh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHRl
c3QtPm1fd2ViVmlldyksIEZBTFNFKTsKLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVS
SUZvclBhdGgoIi9hdXRoLXRlc3QuaHRtbCIpLmRhdGEoKSk7Ci0gICAgcmVxdWVzdCA9IHRlc3Qt
PndhaXRGb3JBdXRoZW50aWNhdGlvblJlcXVlc3QoKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2F1
dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3Byb3Bvc2VkX2NyZWRlbnRpYWwocmVxdWVzdCkpOwot
ICAgIGdfYXNzZXJ0KHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2Nhbl9zYXZlX2NyZWRl
bnRpYWxzKHJlcXVlc3QpKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0F1
dGhlbnRpY2F0aW9uU3VjY2VzcyhBdXRoZW50aWNhdGlvblRlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCi17Ci0gICAgLy8gVGVzdCBjb3JyZWN0IGF1dGhlbnRpY2F0aW9uLgotICAgIHRlc3QtPmxv
YWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2F1dGgtdGVzdC5odG1sIikuZGF0YSgpKTsK
LSAgICBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QgPSB0ZXN0LT53YWl0Rm9y
QXV0aGVudGljYXRpb25SZXF1ZXN0KCk7Ci0gICAgV2ViS2l0Q3JlZGVudGlhbCogY3JlZGVudGlh
bCA9IHdlYmtpdF9jcmVkZW50aWFsX25ldyhhdXRoVGVzdFVzZXJuYW1lLCBhdXRoVGVzdFBhc3N3
b3JkLCBXRUJLSVRfQ1JFREVOVElBTF9QRVJTSVNURU5DRV9GT1JfU0VTU0lPTik7Ci0gICAgd2Vi
a2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfYXV0aGVudGljYXRlKHJlcXVlc3QsIGNyZWRlbnRp
YWwpOwotICAgIHdlYmtpdF9jcmVkZW50aWFsX2ZyZWUoY3JlZGVudGlhbCk7Ci0gICAgdGVzdC0+
d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9s
b2FkRXZlbnRzLnNpemUoKSwgPT0sIDMpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xv
YWRFdmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVk
KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzFdLCA9PSwgTG9hZFRy
YWNraW5nVGVzdDo6TG9hZENvbW1pdHRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1f
bG9hZEV2ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7Ci0gICAg
Z19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRfdGl0bGUodGVzdC0+bV93ZWJWaWV3
KSwgPT0sIGF1dGhFeHBlY3RlZFN1Y2Nlc3NUaXRsZSk7Ci0KLSAgICAvLyBUZXN0IGxvYWRpbmcg
dGhlIHNhbWUgKGF1dGhvcml6ZWQpIHBhZ2UgYWdhaW4uCi0gICAgdGVzdC0+bG9hZFVSSShrU2Vy
dmVyLT5nZXRVUklGb3JQYXRoKCIvYXV0aC10ZXN0Lmh0bWwiKS5kYXRhKCkpOwotICAgIC8vIFRo
ZXJlIGlzIG5vIGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZS4KLSAgICB0ZXN0LT53YWl0VW50aWxM
b2FkRmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHMu
c2l6ZSgpLCA9PSwgMyk7Ci0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1sw
XSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOwotICAgIGdf
YXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0
OjpMb2FkQ29tbWl0dGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRz
WzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKLSAgICBnX2Fzc2VydF9j
bXBzdHIod2Via2l0X3dlYl92aWV3X2dldF90aXRsZSh0ZXN0LT5tX3dlYlZpZXcpLCA9PSwgYXV0
aEV4cGVjdGVkU3VjY2Vzc1RpdGxlKTsKLX0KLQotc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2so
U291cFNlcnZlciosIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBjaGFyKiBwYXRoLCBHSGFz
aFRhYmxlKiwgU291cENsaWVudENvbnRleHQqLCB2b2lkKikKLXsKLSAgICBpZiAobWVzc2FnZS0+
bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgewotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0
YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWYgKCFzdHJjbXAocGF0aCwgIi9hdXRoLXRlc3QuaHRtbCIpKSB7
Ci0gICAgICAgIGNvbnN0IGNoYXIqIGF1dGhvcml6YXRpb24gPSBzb3VwX21lc3NhZ2VfaGVhZGVy
c19nZXRfb25lKG1lc3NhZ2UtPnJlcXVlc3RfaGVhZGVycywgIkF1dGhvcml6YXRpb24iKTsKLSAg
ICAgICAgLy8gUmVxdWlyZSBhdXRoZW50aWNhdGlvbi4KLSAgICAgICAgaWYgKCFnX3N0cmNtcDAo
YXV0aG9yaXphdGlvbiwgYXV0aEV4cGVjdGVkQXV0aG9yaXphdGlvbikpIHsKLSAgICAgICAgICAg
IC8vIFN1Y2Nlc3NmdWwgYXV0aGVudGljYXRpb24uCi0gICAgICAgICAgICBzb3VwX21lc3NhZ2Vf
c2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7Ci0gICAgICAgICAgICBzb3VwX21l
c3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RB
VElDLCBhdXRoU3VjY2Vzc0hUTUxTdHJpbmcsIHN0cmxlbihhdXRoU3VjY2Vzc0hUTUxTdHJpbmcp
KTsKLSAgICAgICAgICAgIEF1dGhlbnRpY2F0aW9uVGVzdDo6YXV0aGVudGljYXRpb25SZXRyaWVz
ID0gMDsKLSAgICAgICAgfSBlbHNlIGlmICgrK0F1dGhlbnRpY2F0aW9uVGVzdDo6YXV0aGVudGlj
YXRpb25SZXRyaWVzIDwgMykgewotICAgICAgICAgICAgLy8gTm8gb3IgaW52YWxpZCBhdXRob3Jp
emF0aW9uIGhlYWRlciBwcm92aWRlZCBieSB0aGUgY2xpZW50LCByZXF1ZXN0IGF1dGhlbnRpY2F0
aW9uIHR3aWNlIHRoZW4gZmFpbC4KLSAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVz
KG1lc3NhZ2UsIFNPVVBfU1RBVFVTX1VOQVVUSE9SSVpFRCk7Ci0gICAgICAgICAgICBzb3VwX21l
c3NhZ2VfaGVhZGVyc19hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIldXVy1BdXRo
ZW50aWNhdGUiLCAiQmFzaWMgcmVhbG09XCJteSByZWFsbVwiIik7Ci0gICAgICAgICAgICAvLyBJ
bmNsdWRlIGEgZmFpbHVyZSBtZXNzYWdlIGluIGNhc2UgdGhlIHVzZXIgYXR0ZW1wdHMgdG8gcHJv
Y2VlZCB3aXRob3V0IGF1dGhlbnRpY2F0aW9uLgotICAgICAgICAgICAgc291cF9tZXNzYWdlX2Jv
ZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgYXV0
aEZhaWx1cmVIVE1MU3RyaW5nLCBzdHJsZW4oYXV0aEZhaWx1cmVIVE1MU3RyaW5nKSk7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBBdXRoZW50aWNhdGlvbiBub3Qgc3VjY2Vzc2Z1
bCwgZGlzcGxheSBhICI0MDEgQXV0aG9yaXphdGlvbiBSZXF1aXJlZCIgcGFnZS4KLSAgICAgICAg
ICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKLSAg
ICAgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5
LCBTT1VQX01FTU9SWV9TVEFUSUMsIGF1dGhGYWlsdXJlSFRNTFN0cmluZywgc3RybGVuKGF1dGhG
YWlsdXJlSFRNTFN0cmluZykpOwotICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIHNvdXBf
bWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7Ci0KLSAg
ICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKLX0K
LQotdm9pZCBiZWZvcmVBbGwoKQotewotICAgIGtTZXJ2ZXIgPSBuZXcgV2ViS2l0VGVzdFNlcnZl
cigpOwotICAgIGtTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFjayk7Ci0KLSAgICBBdXRoZW50aWNh
dGlvblRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJhdXRoZW50aWNhdGlvbi1yZXF1ZXN0Iiwg
dGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvblJlcXVlc3QpOwotICAgIEF1dGhlbnRpY2F0aW9uVGVz
dDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImF1dGhlbnRpY2F0aW9uLWNhbmNlbCIsIHRlc3RXZWJW
aWV3QXV0aGVudGljYXRpb25DYW5jZWwpOwotICAgIEF1dGhlbnRpY2F0aW9uVGVzdDo6YWRkKCJX
ZWJLaXRXZWJWaWV3IiwgImF1dGhlbnRpY2F0aW9uLWxvYWQtY2FuY2VsbGVkIiwgdGVzdFdlYlZp
ZXdBdXRoZW50aWNhdGlvbkxvYWRDYW5jZWxsZWQpOwotICAgIEF1dGhlbnRpY2F0aW9uVGVzdDo6
YWRkKCJXZWJLaXRXZWJWaWV3IiwgImF1dGhlbnRpY2F0aW9uLWZhaWx1cmUiLCB0ZXN0V2ViVmll
d0F1dGhlbnRpY2F0aW9uRmFpbHVyZSk7Ci0gICAgQXV0aGVudGljYXRpb25UZXN0OjphZGQoIldl
YktpdFdlYlZpZXciLCAiYXV0aGVudGljYXRpb24tbm8tY3JlZGVudGlhbCIsIHRlc3RXZWJWaWV3
QXV0aGVudGljYXRpb25Ob0NyZWRlbnRpYWwpOwotICAgIEF1dGhlbnRpY2F0aW9uVGVzdDo6YWRk
KCJXZWJLaXRXZWJWaWV3IiwgImF1dGhlbnRpY2F0aW9uLXN0b3JhZ2UiLCB0ZXN0V2ViVmlld0F1
dGhlbnRpY2F0aW9uU3RvcmFnZSk7Ci0gICAgLy8gVGVzdGluZyBhdXRoZW50aWNhdGlvbiBzdWNj
ZXNzIG11c3QgYmUgZG9uZSBsYXN0IGJlY2F1c2UgbGlic291cCB3aWxsIG5ldmVyIGZpcmUKLSAg
ICAvLyB0aGUgYXV0aGVudGljYXRlIHNpZ25hbCBhZ2FpbiBvbmNlIGF1dGhlbnRpY2F0aW9uIGlz
IHN1Y2Nlc3NmdWwuCi0gICAgQXV0aGVudGljYXRpb25UZXN0OjphZGQoIldlYktpdFdlYlZpZXci
LCAiYXV0aGVudGljYXRpb24tc3VjY2VzcyIsIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25TdWNj
ZXNzKTsKLX0KLQotdm9pZCBhZnRlckFsbCgpCi17Ci0gICAgZGVsZXRlIGtTZXJ2ZXI7Ci19CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0QmFj
a0ZvcndhcmRMaXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L1Rlc3RCYWNrRm9yd2FyZExpc3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBi
NDc5MzY2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL1Rlc3RCYWNrRm9yd2FyZExpc3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjgwICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotCi0jaW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5oIgotI2luY2x1ZGUgIldlYlZpZXdU
ZXN0LmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgot
I2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgotCi0vLyBC
YWNrIGZvcndhcmQgbGlzdCBsaW1pdCBpcyAxMDAgYnkgZGVmYXVsdC4KLXN0YXRpYyBjb25zdCBp
bnQga0JhY2tGb3J3YXJkTGlzdExpbWl0ID0gMTAwOwotCi1zdGF0aWMgV2ViS2l0VGVzdFNlcnZl
cioga1NlcnZlcjsKLQotc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2Vy
dmVyLCBTb3VwTWVzc2FnZSogbXNnLCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiBxdWVy
eSwgU291cENsaWVudENvbnRleHQqIGNvbnRleHQsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgaWYg
KG1zZy0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgewotICAgICAgICBzb3VwX21lc3NhZ2Vf
c2V0X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAoZ19zdHJfaGFzX3N1ZmZpeChwYXRoLCAiZmF2aWNvbi5p
Y28iKSkgewotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVT
X05PVF9GT1VORCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzb3VwX21lc3NhZ2Vf
c2V0X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX09LKTsKLQotICAgIGNoYXIqIGJvZHkgPSBnX3N0
cmR1cF9wcmludGYoIjxodG1sPjx0aXRsZT4lczwvdGl0bGU+PGJvZHk+JXM8L2JvZHk+PC9odG1s
PiIsIHBhdGggKyAxLCBwYXRoICsgMSk7Ci0gICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1z
Zy0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgYm9keSwgc3RybGVuKGJvZHkpKTsK
LQotICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1zZy0+cmVzcG9uc2VfYm9keSk7Ci19
Ci0KLWNsYXNzIEJhY2tGb3J3YXJkTGlzdFRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7Ci1wdWJs
aWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShCYWNrRm9yd2FyZExpc3RUZXN0KTsKLQot
ICAgIGVudW0gewotICAgICAgICBCYWNrd2FyZCwKLSAgICAgICAgRm9yd2FyZAotICAgIH07Ci0K
LSAgICBlbnVtIHsKLSAgICAgICAgQ3VycmVudEl0ZW0gID0gMSA8PCAwLAotICAgICAgICBBZGRl
ZEl0ZW0gICAgPSAxIDw8IDEsCi0gICAgICAgIFJlbW92ZWRJdGVtcyA9IDEgPDwgMgotICAgIH07
Ci0KLSAgICBzdGF0aWMgdm9pZCBjaGVja0l0ZW0oV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSog
aXRlbSwgY29uc3QgY2hhciogdGl0bGUsIGNvbnN0IGNoYXIqIHVyaSwgY29uc3QgY2hhciogb3Jp
Z2luYWxVUkkpCi0gICAgewotICAgICAgICBnX2Fzc2VydChpdGVtKTsKLSAgICAgICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dldF91cmkoaXRlbSksID09
LCB1cmkpOwotICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0
X2l0ZW1fZ2V0X3RpdGxlKGl0ZW0pLCA9PSAsIHRpdGxlKTsKLSAgICAgICAgZ19hc3NlcnRfY21w
c3RyKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dldF9vcmlnaW5hbF91cmkoaXRlbSks
ID09LCBvcmlnaW5hbFVSSSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgY2hlY2tJdGVtSW5k
ZXgoV2ViS2l0QmFja0ZvcndhcmRMaXN0KiBsaXN0KQotICAgIHsKLSAgICAgICAgZ19hc3NlcnQo
d2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9udGhfaXRlbShsaXN0LCAtMSkgPT0gd2Via2l0
X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2l0ZW0obGlzdCkpOwotICAgICAgICBnX2Fzc2Vy
dCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X250aF9pdGVtKGxpc3QsIDApID09IHdlYmtp
dF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKGxpc3QpKTsKLSAgICAgICAgZ19h
c3NlcnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9udGhfaXRlbShsaXN0LCAxKSA9PSB3
ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRlbShsaXN0KSk7Ci0gICAgfQot
Ci0gICAgc3RhdGljIHZvaWQgY2hlY2tMaXN0KFdlYktpdEJhY2tGb3J3YXJkTGlzdCogbGlzdCwg
dW5zaWduZWQgdHlwZSwgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSoqIGl0ZW1zLCB1bnNpZ25l
ZCBuSXRlbXMpCi0gICAgewotICAgICAgICBHTGlzdCogbGlzdEl0ZW1zID0gdHlwZSA9PSBCYWNr
Rm9yd2FyZExpc3RUZXN0OjpCYWNrd2FyZCA/IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRf
YmFja19saXN0KGxpc3QpIDoKLSAgICAgICAgICAgIHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9n
ZXRfZm9yd2FyZF9saXN0KGxpc3QpOwotICAgICAgICBnX2Fzc2VydChsaXN0SXRlbXMpOwotCi0g
ICAgICAgIHVuc2lnbmVkIGkgPSAwOwotICAgICAgICBmb3IgKEdMaXN0KiBsaXN0SXRlbSA9IGxp
c3RJdGVtczsgbGlzdEl0ZW07IGxpc3RJdGVtID0gZ19saXN0X25leHQobGlzdEl0ZW0pLCBpKysp
IHsKLSAgICAgICAgICAgIGdfYXNzZXJ0X2NtcHVpbnQoaSwgPCwgbkl0ZW1zKTsKLSAgICAgICAg
ICAgIGdfYXNzZXJ0KGxpc3RJdGVtLT5kYXRhID09IGl0ZW1zW2ldKTsKLSAgICAgICAgfQotICAg
ICAgICBnX2xpc3RfZnJlZShsaXN0SXRlbXMpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGJh
Y2tGb3J3YXJkTGlzdENoYW5nZWQoV2ViS2l0QmFja0ZvcndhcmRMaXN0KiBsaXN0LCBXZWJLaXRC
YWNrRm9yd2FyZExpc3RJdGVtKiBhZGRlZEl0ZW0sIEdMaXN0KiByZW1vdmVkSXRlbXMsIEJhY2tG
b3J3YXJkTGlzdFRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICB0ZXN0LT5tX2hhc0NoYW5nZWQg
PSB0cnVlOwotCi0gICAgICAgIGlmICh0ZXN0LT5tX2NoYW5nZWRGbGFncyAmIEJhY2tGb3J3YXJk
TGlzdFRlc3Q6OkFkZGVkSXRlbSkgewotICAgICAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX0JB
Q0tfRk9SV0FSRF9MSVNUX0lURU0oYWRkZWRJdGVtKSk7Ci0gICAgICAgICAgICB0ZXN0LT5hc3Nl
cnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKGFkZGVkSXRlbSkpOwot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGdfYXNzZXJ0KCFhZGRlZEl0ZW0pOwotCi0gICAg
ICAgIGlmICh0ZXN0LT5tX2NoYW5nZWRGbGFncyAmIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OlJlbW92
ZWRJdGVtcykgewotICAgICAgICAgICAgZ19hc3NlcnQocmVtb3ZlZEl0ZW1zKTsKLSAgICAgICAg
ICAgIGZvciAoR0xpc3QqIGl0ZXIgPSByZW1vdmVkSXRlbXM7IGl0ZXI7IGl0ZXIgPSBpdGVyLT5u
ZXh0KSB7Ci0gICAgICAgICAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX0JBQ0tfRk9SV0FSRF9M
SVNUX0lURU0oaXRlci0+ZGF0YSkpOwotICAgICAgICAgICAgICAgIGlmICh0ZXN0LT5tX2V4cGVj
dGVkUmVtb3ZlZEl0ZW1zKQotICAgICAgICAgICAgICAgICAgICBnX2Fzc2VydChnX2xpc3RfZmlu
ZCh0ZXN0LT5tX2V4cGVjdGVkUmVtb3ZlZEl0ZW1zLCBpdGVyLT5kYXRhKSk7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBnX2Fzc2VydCghcmVtb3ZlZEl0ZW1z
KTsKLSAgICB9Ci0KLSAgICBCYWNrRm9yd2FyZExpc3RUZXN0KCkKLSAgICAgICAgOiBtX2xpc3Qo
d2Via2l0X3dlYl92aWV3X2dldF9iYWNrX2ZvcndhcmRfbGlzdChtX3dlYlZpZXcpKQotICAgICAg
ICAsIG1fY2hhbmdlZEZsYWdzKDApCi0gICAgICAgICwgbV9oYXNDaGFuZ2VkKGZhbHNlKQotICAg
ICAgICAsIG1fZXhwZWN0ZWRSZW1vdmVkSXRlbXMoMCkKLSAgICB7Ci0gICAgICAgIGdfc2lnbmFs
X2Nvbm5lY3QobV9saXN0LCAiY2hhbmdlZCIsIEdfQ0FMTEJBQ0soYmFja0ZvcndhcmRMaXN0Q2hh
bmdlZCksIHRoaXMpOwotICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlz
aGVzKEdfT0JKRUNUKG1fbGlzdCkpOwotICAgIH0KLQotICAgIH5CYWNrRm9yd2FyZExpc3RUZXN0
KCkKLSAgICB7Ci0gICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZCht
X2xpc3QsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOwotICAgIH0KLQot
ICAgIHZvaWQgd2FpdFVudGlsTG9hZEZpbmlzaGVkKCkKLSAgICB7Ci0gICAgICAgIG1faGFzQ2hh
bmdlZCA9IGZhbHNlOwotICAgICAgICBXZWJWaWV3VGVzdDo6d2FpdFVudGlsTG9hZEZpbmlzaGVk
KCk7Ci0gICAgICAgIGdfYXNzZXJ0KG1faGFzQ2hhbmdlZCk7Ci0gICAgfQotCi0gICAgdm9pZCB3
YWl0VW50aWxMb2FkRmluaXNoZWRBbmRDaGVja1JlbW92ZWRJdGVtcyhHTGlzdCogcmVtb3ZlZEl0
ZW1zKQotICAgIHsKLSAgICAgICAgbV9leHBlY3RlZFJlbW92ZWRJdGVtcyA9IHJlbW92ZWRJdGVt
czsKLSAgICAgICAgd2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgICAgIG1fZXhwZWN0ZWRS
ZW1vdmVkSXRlbXMgPSAwOwotICAgIH0KLQotICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdCogbV9s
aXN0OwotICAgIHVuc2lnbmVkIGxvbmcgbV9jaGFuZ2VkRmxhZ3M7Ci0gICAgYm9vbCBtX2hhc0No
YW5nZWQ7Ci0gICAgR0xpc3QqIG1fZXhwZWN0ZWRSZW1vdmVkSXRlbXM7Ci19OwotCi1zdGF0aWMg
dm9pZCB0ZXN0QmFja0ZvcndhcmRMaXN0TmF2aWdhdGlvbihCYWNrRm9yd2FyZExpc3RUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0
ZW1zWzFdOwotCi0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayh0ZXN0
LT5tX3dlYlZpZXcpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3
YXJkKHRlc3QtPm1fd2ViVmlldykpOwotCi0gICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfYmFj
a19mb3J3YXJkX2xpc3RfZ2V0X2xlbmd0aCh0ZXN0LT5tX2xpc3QpLCA9PSwgMCk7Ci0gICAgZ19h
c3NlcnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKHRlc3QtPm1f
bGlzdCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tf
aXRlbSh0ZXN0LT5tX2xpc3QpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9s
aXN0X2dldF9mb3J3YXJkX2l0ZW0odGVzdC0+bV9saXN0KSk7Ci0gICAgQmFja0ZvcndhcmRMaXN0
VGVzdDo6Y2hlY2tJdGVtSW5kZXgodGVzdC0+bV9saXN0KTsKLSAgICBnX2Fzc2VydCghd2Via2l0
X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3QodGVzdC0+bV9saXN0KSk7Ci0gICAgZ19h
c3NlcnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0KHRlc3QtPm1f
bGlzdCkpOwotCi0gICAgQ1N0cmluZyB1cmlQYWdlMSA9IGtTZXJ2ZXItPmdldFVSSUZvclBhdGgo
Ii9QYWdlMSIpOwotICAgIHRlc3QtPm1fY2hhbmdlZEZsYWdzID0gQmFja0ZvcndhcmRMaXN0VGVz
dDo6Q3VycmVudEl0ZW0gfCBCYWNrRm9yd2FyZExpc3RUZXN0OjpBZGRlZEl0ZW07Ci0gICAgdGVz
dC0+bG9hZFVSSSh1cmlQYWdlMS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5p
c2hlZCgpOwotCi0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayh0ZXN0
LT5tX3dlYlZpZXcpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3
YXJkKHRlc3QtPm1fd2ViVmlldykpOwotCi0gICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfYmFj
a19mb3J3YXJkX2xpc3RfZ2V0X2xlbmd0aCh0ZXN0LT5tX2xpc3QpLCA9PSwgMSk7Ci0gICAgV2Vi
S2l0QmFja0ZvcndhcmRMaXN0SXRlbSogaXRlbVBhZ2UxID0gd2Via2l0X2JhY2tfZm9yd2FyZF9s
aXN0X2dldF9jdXJyZW50X2l0ZW0odGVzdC0+bV9saXN0KTsKLSAgICBCYWNrRm9yd2FyZExpc3RU
ZXN0OjpjaGVja0l0ZW0oaXRlbVBhZ2UxLCAiUGFnZTEiLCB1cmlQYWdlMS5kYXRhKCksIHVyaVBh
Z2UxLmRhdGEoKSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRf
YmFja19pdGVtKHRlc3QtPm1fbGlzdCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3
YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRlbSh0ZXN0LT5tX2xpc3QpKTsKLSAgICBCYWNrRm9yd2Fy
ZExpc3RUZXN0OjpjaGVja0l0ZW1JbmRleCh0ZXN0LT5tX2xpc3QpOwotICAgIGdfYXNzZXJ0KCF3
ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGlzdCh0ZXN0LT5tX2xpc3QpKTsKLSAg
ICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xpc3QodGVz
dC0+bV9saXN0KSk7Ci0KLSAgICBDU3RyaW5nIHVyaVBhZ2UyID0ga1NlcnZlci0+Z2V0VVJJRm9y
UGF0aCgiL1BhZ2UyIik7Ci0gICAgdGVzdC0+bV9jaGFuZ2VkRmxhZ3MgPSBCYWNrRm9yd2FyZExp
c3RUZXN0OjpDdXJyZW50SXRlbSB8IEJhY2tGb3J3YXJkTGlzdFRlc3Q6OkFkZGVkSXRlbTsKLSAg
ICB0ZXN0LT5sb2FkVVJJKHVyaVBhZ2UyLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9h
ZEZpbmlzaGVkKCk7Ci0KLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2so
dGVzdC0+bV93ZWJWaWV3KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29f
Zm9yd2FyZCh0ZXN0LT5tX3dlYlZpZXcpKTsKLQotICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0
X2JhY2tfZm9yd2FyZF9saXN0X2dldF9sZW5ndGgodGVzdC0+bV9saXN0KSwgPT0sIDIpOwotICAg
IFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW1QYWdlMiA9IHdlYmtpdF9iYWNrX2Zvcndh
cmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKHRlc3QtPm1fbGlzdCk7Ci0gICAgQmFja0ZvcndhcmRM
aXN0VGVzdDo6Y2hlY2tJdGVtKGl0ZW1QYWdlMiwgIlBhZ2UyIiwgdXJpUGFnZTIuZGF0YSgpLCB1
cmlQYWdlMi5kYXRhKCkpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9n
ZXRfYmFja19pdGVtKHRlc3QtPm1fbGlzdCkgPT0gaXRlbVBhZ2UxKTsKLSAgICBnX2Fzc2VydCgh
d2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2l0ZW0odGVzdC0+bV9saXN0KSk7
Ci0gICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tJdGVtSW5kZXgodGVzdC0+bV9saXN0KTsK
LSAgICBpdGVtc1swXSA9IGl0ZW1QYWdlMTsKLSAgICBCYWNrRm9yd2FyZExpc3RUZXN0OjpjaGVj
a0xpc3QodGVzdC0+bV9saXN0LCBCYWNrRm9yd2FyZExpc3RUZXN0OjpCYWNrd2FyZCwgaXRlbXMs
IDEpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRf
bGlzdCh0ZXN0LT5tX2xpc3QpKTsKLQotICAgIHRlc3QtPm1fY2hhbmdlZEZsYWdzID0gQmFja0Zv
cndhcmRMaXN0VGVzdDo6Q3VycmVudEl0ZW07Ci0gICAgdGVzdC0+Z29CYWNrKCk7Ci0gICAgdGVz
dC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92
aWV3X2Nhbl9nb19iYWNrKHRlc3QtPm1fd2ViVmlldykpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF93
ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh0ZXN0LT5tX3dlYlZpZXcpKTsKLQotICAgIGdfYXNzZXJ0
X2NtcHVpbnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9sZW5ndGgodGVzdC0+bV9saXN0
KSwgPT0sIDIpOwotICAgIGdfYXNzZXJ0KGl0ZW1QYWdlMSA9PSB3ZWJraXRfYmFja19mb3J3YXJk
X2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh0ZXN0LT5tX2xpc3QpKTsKLSAgICBCYWNrRm9yd2FyZExp
c3RUZXN0OjpjaGVja0l0ZW0od2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0
ZW0odGVzdC0+bV9saXN0KSwgIlBhZ2UxIiwgdXJpUGFnZTEuZGF0YSgpLCB1cmlQYWdlMS5kYXRh
KCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfaXRl
bSh0ZXN0LT5tX2xpc3QpKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3Rf
Z2V0X2ZvcndhcmRfaXRlbSh0ZXN0LT5tX2xpc3QpID09IGl0ZW1QYWdlMik7Ci0gICAgQmFja0Zv
cndhcmRMaXN0VGVzdDo6Y2hlY2tJdGVtSW5kZXgodGVzdC0+bV9saXN0KTsKLSAgICBnX2Fzc2Vy
dCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3QodGVzdC0+bV9saXN0KSk7
Ci0gICAgaXRlbXNbMF0gPSBpdGVtUGFnZTI7Ci0gICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hl
Y2tMaXN0KHRlc3QtPm1fbGlzdCwgQmFja0ZvcndhcmRMaXN0VGVzdDo6Rm9yd2FyZCwgaXRlbXMs
IDEpOwotCi0gICAgdGVzdC0+bV9jaGFuZ2VkRmxhZ3MgPSBCYWNrRm9yd2FyZExpc3RUZXN0OjpD
dXJyZW50SXRlbTsKLSAgICB0ZXN0LT5nb0ZvcndhcmQoKTsKLSAgICB0ZXN0LT53YWl0VW50aWxM
b2FkRmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFj
ayh0ZXN0LT5tX3dlYlZpZXcpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9n
b19mb3J3YXJkKHRlc3QtPm1fd2ViVmlldykpOwotCi0gICAgZ19hc3NlcnRfY21wdWludCh3ZWJr
aXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2xlbmd0aCh0ZXN0LT5tX2xpc3QpLCA9PSwgMik7Ci0g
ICAgZ19hc3NlcnQoaXRlbVBhZ2UyID09IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3Vy
cmVudF9pdGVtKHRlc3QtPm1fbGlzdCkpOwotICAgIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OmNoZWNr
SXRlbSh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh0ZXN0LT5tX2xp
c3QpLCAiUGFnZTIiLCB1cmlQYWdlMi5kYXRhKCksIHVyaVBhZ2UyLmRhdGEoKSk7Ci0gICAgZ19h
c3NlcnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2l0ZW0odGVzdC0+bV9saXN0
KSA9PSBpdGVtUGFnZTEpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3Rf
Z2V0X2ZvcndhcmRfaXRlbSh0ZXN0LT5tX2xpc3QpKTsKLSAgICBCYWNrRm9yd2FyZExpc3RUZXN0
OjpjaGVja0l0ZW1JbmRleCh0ZXN0LT5tX2xpc3QpOwotICAgIGl0ZW1zWzBdID0gaXRlbVBhZ2Ux
OwotICAgIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OmNoZWNrTGlzdCh0ZXN0LT5tX2xpc3QsIEJhY2tG
b3J3YXJkTGlzdFRlc3Q6OkJhY2t3YXJkLCBpdGVtcywgMSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtp
dF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0KHRlc3QtPm1fbGlzdCkpOwotCi0g
ICAgdGVzdC0+bV9jaGFuZ2VkRmxhZ3MgPSBCYWNrRm9yd2FyZExpc3RUZXN0OjpDdXJyZW50SXRl
bTsKLSAgICB0ZXN0LT5nb1RvQmFja0ZvcndhcmRMaXN0SXRlbShpdGVtUGFnZTEpOwotICAgIHRl
c3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3NlcnQoaXRlbVBhZ2UxID09
IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKHRlc3QtPm1fbGlzdCkp
OwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0QmFja0ZvcndhcmRMaXN0TGltaXRBbmRDYWNoZShCYWNr
Rm9yd2FyZExpc3RUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwga0JhY2tGb3J3YXJkTGlzdExpbWl0OyBpKyspIHsKLSAgICAgICAgR093blB0cjxj
aGFyPiBwYXRoKGdfc3RyZHVwX3ByaW50ZigiL1BhZ2UlZCIsIGkpKTsKLSAgICAgICAgdGVzdC0+
bV9jaGFuZ2VkRmxhZ3MgPSBCYWNrRm9yd2FyZExpc3RUZXN0OjpDdXJyZW50SXRlbSB8IEJhY2tG
b3J3YXJkTGlzdFRlc3Q6OkFkZGVkSXRlbTsKLSAgICAgICAgdGVzdC0+bG9hZFVSSShrU2VydmVy
LT5nZXRVUklGb3JQYXRoKHBhdGguZ2V0KCkpLmRhdGEoKSk7Ci0gICAgICAgIHRlc3QtPndhaXRV
bnRpbExvYWRGaW5pc2hlZCgpOwotICAgIH0KLQotICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0
X2JhY2tfZm9yd2FyZF9saXN0X2dldF9sZW5ndGgodGVzdC0+bV9saXN0KSwgPT0sIGtCYWNrRm9y
d2FyZExpc3RMaW1pdCk7Ci0gICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSogaXRlbVBhZ2VG
aXJzdCA9IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbnRoX2l0ZW0odGVzdC0+bV9saXN0
LCAtKGtCYWNrRm9yd2FyZExpc3RMaW1pdCAtIDEpKTsKLSAgICBHT3duUHRyPEdMaXN0PiByZW1v
dmVkSXRlbXMoZ19saXN0X3ByZXBlbmQoMCwgaXRlbVBhZ2VGaXJzdCkpOwotCi0gICAgR093blB0
cjxjaGFyPiBwYXRoKGdfc3RyZHVwX3ByaW50ZigiL1BhZ2UlZCIsIGtCYWNrRm9yd2FyZExpc3RM
aW1pdCkpOwotICAgIHRlc3QtPm1fY2hhbmdlZEZsYWdzID0gQmFja0ZvcndhcmRMaXN0VGVzdDo6
Q3VycmVudEl0ZW0gfCBCYWNrRm9yd2FyZExpc3RUZXN0OjpBZGRlZEl0ZW0gfCBCYWNrRm9yd2Fy
ZExpc3RUZXN0OjpSZW1vdmVkSXRlbXM7Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRV
UklGb3JQYXRoKHBhdGguZ2V0KCkpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZp
bmlzaGVkQW5kQ2hlY2tSZW1vdmVkSXRlbXMocmVtb3ZlZEl0ZW1zLmdldCgpKTsKLQotICAgIGdf
YXNzZXJ0X2NtcHVpbnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9sZW5ndGgodGVzdC0+
bV9saXN0KSwgPT0sIGtCYWNrRm9yd2FyZExpc3RMaW1pdCk7Ci19Ci0KLXZvaWQgYmVmb3JlQWxs
KCkKLXsKLSAgICBrU2VydmVyID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIoKTsKLSAgICBrU2VydmVy
LT5ydW4oc2VydmVyQ2FsbGJhY2spOwotCi0gICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6YWRkKCJC
YWNrRm9yd2FyZExpc3QiLCAibmF2aWdhdGlvbiIsIHRlc3RCYWNrRm9yd2FyZExpc3ROYXZpZ2F0
aW9uKTsKLSAgICBCYWNrRm9yd2FyZExpc3RUZXN0OjphZGQoIkJhY2tGb3J3YXJkTGlzdCIsICJs
aXN0LWxpbWl0LWFuZC1jYWNoZSIsIHRlc3RCYWNrRm9yd2FyZExpc3RMaW1pdEFuZENhY2hlKTsK
LX0KLQotdm9pZCBhZnRlckFsbCgpCi17Ci0gICAgZGVsZXRlIGtTZXJ2ZXI7Ci19Ci0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RDb250ZXh0
TWVudS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0Q29u
dGV4dE1lbnUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjMyOWI5Li4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RDb250
ZXh0TWVudS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4NjcgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
dmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IldlYlZpZXdUZXN0LmgiCi0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgotCi1jbGFz
cyBDb250ZXh0TWVudVRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7Ci1wdWJsaWM6Ci0gICAgZW51
bSBDb250ZXh0TWVudUl0ZW1TdGF0ZUZsYWdzIHsKLSAgICAgICAgVmlzaWJsZSA9IDEgPDwgMCwK
LSAgICAgICAgRW5hYmxlZCA9IDEgPDwgMSwKLSAgICAgICAgQ2hlY2tlZCA9IDEgPDwgMgotICAg
IH07Ci0KLSAgICB2b2lkIGNoZWNrQ29udGV4dE1lbnVFdmVudChHZGtFdmVudCogZXZlbnQpCi0g
ICAgewotICAgICAgICBnX2Fzc2VydChldmVudCk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudC0+dHlwZSwgPT0sIEdES19CVVRUT05fUFJFU1MpOwotICAgICAgICBnX2Fzc2VydF9jbXBp
bnQoZXZlbnQtPmJ1dHRvbi5idXR0b24sID09LCAzKTsKLSAgICAgICAgZ19hc3NlcnRfY21waW50
KGV2ZW50LT5idXR0b24ueCwgPT0sIG1fbWVudVBvc2l0aW9uWCk7Ci0gICAgICAgIGdfYXNzZXJ0
X2NtcGludChldmVudC0+YnV0dG9uLnksID09LCBtX21lbnVQb3NpdGlvblkpOwotICAgIH0KLQot
ICAgIHN0YXRpYyBnYm9vbGVhbiBjb250ZXh0TWVudUNhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcsIFdlYktpdENvbnRleHRNZW51KiBjb250ZXh0TWVudSwgR2RrRXZlbnQqIGV2ZW50LCBX
ZWJLaXRIaXRUZXN0UmVzdWx0KiBoaXRUZXN0UmVzdWx0LCBDb250ZXh0TWVudVRlc3QqIHRlc3Qp
Ci0gICAgewotICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfQ09OVEVYVF9NRU5VKGNvbnRleHRN
ZW51KSk7Ci0gICAgICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNo
ZXMoR19PQkpFQ1QoY29udGV4dE1lbnUpKTsKLSAgICAgICAgdGVzdC0+Y2hlY2tDb250ZXh0TWVu
dUV2ZW50KGV2ZW50KTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX0hJVF9URVNUX1JFU1VM
VChoaXRUZXN0UmVzdWx0KSk7Ci0gICAgICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdo
ZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QoaGl0VGVzdFJlc3VsdCkpOwotCi0gICAgICAgIHJldHVy
biB0ZXN0LT5jb250ZXh0TWVudShjb250ZXh0TWVudSwgZXZlbnQsIGhpdFRlc3RSZXN1bHQpOwot
ICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGNvbnRleHRNZW51RGlzbWlzc2VkQ2FsbGJhY2soV2Vi
S2l0V2ViVmlldyosIENvbnRleHRNZW51VGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHRlc3Qt
PmNvbnRleHRNZW51RGlzbWlzc2VkKCk7Ci0gICAgfQotCi0gICAgQ29udGV4dE1lbnVUZXN0KCkK
LSAgICAgICAgOiBtX21lbnVQb3NpdGlvblgoMCkKLSAgICAgICAgLCBtX21lbnVQb3NpdGlvblko
MCkKLSAgICB7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAiY29udGV4dC1t
ZW51IiwgR19DQUxMQkFDSyhjb250ZXh0TWVudUNhbGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIGdf
c2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAiY29udGV4dC1tZW51LWRpc21pc3NlZCIsIEdfQ0FM
TEJBQ0soY29udGV4dE1lbnVEaXNtaXNzZWRDYWxsYmFjayksIHRoaXMpOwotICAgIH0KLQotICAg
IH5Db250ZXh0TWVudVRlc3QoKQotICAgIHsKLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlz
Y29ubmVjdF9tYXRjaGVkKG1fd2ViVmlldywgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwg
MCwgdGhpcyk7Ci0gICAgfQotCi0gICAgdmlydHVhbCBib29sIGNvbnRleHRNZW51KFdlYktpdENv
bnRleHRNZW51KiwgR2RrRXZlbnQqLCBXZWJLaXRIaXRUZXN0UmVzdWx0KikgPSAwOwotCi0gICAg
dmlydHVhbCB2b2lkIGNvbnRleHRNZW51RGlzbWlzc2VkKCkKLSAgICB7Ci0gICAgICAgIHF1aXRN
YWluTG9vcCgpOwotICAgIH0KLQotICAgIEd0a01lbnUqIGdldFBvcHVwTWVudSgpCi0gICAgewot
ICAgICAgICBHT3duUHRyPEdMaXN0PiB0b3BsZXZlbHMoZ3RrX3dpbmRvd19saXN0X3RvcGxldmVs
cygpKTsKLSAgICAgICAgZm9yIChHTGlzdCogaXRlciA9IHRvcGxldmVscy5nZXQoKTsgaXRlcjsg
aXRlciA9IGdfbGlzdF9uZXh0KGl0ZXIpKSB7Ci0gICAgICAgICAgICBpZiAoIUdUS19JU19XSU5E
T1coaXRlci0+ZGF0YSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAg
IEd0a1dpZGdldCogY2hpbGQgPSBndGtfYmluX2dldF9jaGlsZChHVEtfQklOKGl0ZXItPmRhdGEp
KTsKLSAgICAgICAgICAgIGlmICghR1RLX0lTX01FTlUoY2hpbGQpKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgICAgICBpZiAoZ3RrX21lbnVfZ2V0X2F0dGFjaF93aWRnZXQo
R1RLX01FTlUoY2hpbGQpKSA9PSBHVEtfV0lER0VUKG1fd2ViVmlldykpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIEdUS19NRU5VKGNoaWxkKTsKLSAgICAgICAgfQotICAgICAgICBnX2Fzc2VydF9u
b3RfcmVhY2hlZCgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBib29sIHNob3Vs
ZFNob3dJbnB1dE1ldGhvZHNNZW51KCkKLSAgICB7Ci0gICAgICAgIEd0a1NldHRpbmdzKiBzZXR0
aW5ncyA9IGd0a193aWRnZXRfZ2V0X3NldHRpbmdzKEdUS19XSURHRVQobV93ZWJWaWV3KSk7Ci0g
ICAgICAgIGlmICghc2V0dGluZ3MpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAg
ICBnYm9vbGVhbiBzaG93SW5wdXRNZXRob2RNZW51OwotICAgICAgICBnX29iamVjdF9nZXQoc2V0
dGluZ3MsICJndGstc2hvdy1pbnB1dC1tZXRob2QtbWVudSIsICZzaG93SW5wdXRNZXRob2RNZW51
LCBOVUxMKTsKLSAgICAgICAgcmV0dXJuIHNob3dJbnB1dE1ldGhvZE1lbnU7Ci0gICAgfQotCi0g
ICAgdm9pZCBjaGVja0FjdGlvblN0YXRlKEd0a0FjdGlvbiogYWN0aW9uLCB1bnNpZ25lZCBzdGF0
ZSkKLSAgICB7Ci0gICAgICAgIGlmIChzdGF0ZSAmIFZpc2libGUpCi0gICAgICAgICAgICBnX2Fz
c2VydChndGtfYWN0aW9uX2dldF92aXNpYmxlKGFjdGlvbikpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBnX2Fzc2VydCghZ3RrX2FjdGlvbl9nZXRfdmlzaWJsZShhY3Rpb24pKTsKLQotICAg
ICAgICBpZiAoc3RhdGUgJiBFbmFibGVkKQotICAgICAgICAgICAgZ19hc3NlcnQoZ3RrX2FjdGlv
bl9nZXRfc2Vuc2l0aXZlKGFjdGlvbikpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBnX2Fz
c2VydCghZ3RrX2FjdGlvbl9nZXRfc2Vuc2l0aXZlKGFjdGlvbikpOwotCi0gICAgICAgIGlmIChH
VEtfSVNfVE9HR0xFX0FDVElPTihhY3Rpb24pKSB7Ci0gICAgICAgICAgICBpZiAoc3RhdGUgJiBD
aGVja2VkKQotICAgICAgICAgICAgICAgIGdfYXNzZXJ0KGd0a190b2dnbGVfYWN0aW9uX2dldF9h
Y3RpdmUoR1RLX1RPR0dMRV9BQ1RJT04oYWN0aW9uKSkpOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIGdfYXNzZXJ0KCFndGtfdG9nZ2xlX2FjdGlvbl9nZXRfYWN0aXZlKEdUS19U
T0dHTEVfQUNUSU9OKGFjdGlvbikpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEdMaXN0KiBj
aGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoR0xpc3QqIGl0ZW1zLCBXZWJL
aXRDb250ZXh0TWVudUFjdGlvbiBzdG9ja0FjdGlvbiwgdW5zaWduZWQgc3RhdGUpCi0gICAgewot
ICAgICAgICBnX2Fzc2VydChpdGVtcyk7Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19DT05U
RVhUX01FTlVfSVRFTShpdGVtcy0+ZGF0YSkpOwotCi0gICAgICAgIFdlYktpdENvbnRleHRNZW51
SXRlbSogaXRlbSA9IFdFQktJVF9DT05URVhUX01FTlVfSVRFTShpdGVtcy0+ZGF0YSk7Ci0gICAg
ICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QoaXRlbSkp
OwotCi0gICAgICAgIEd0a0FjdGlvbiogYWN0aW9uID0gd2Via2l0X2NvbnRleHRfbWVudV9pdGVt
X2dldF9hY3Rpb24oaXRlbSk7Ci0gICAgICAgIGdfYXNzZXJ0KEdUS19JU19BQ1RJT04oYWN0aW9u
KSk7Ci0KLSAgICAgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9n
ZXRfc3RvY2tfYWN0aW9uKGl0ZW0pLCA9PSwgc3RvY2tBY3Rpb24pOwotCi0gICAgICAgIGNoZWNr
QWN0aW9uU3RhdGUoYWN0aW9uLCBzdGF0ZSk7Ci0KLSAgICAgICAgcmV0dXJuIGdfbGlzdF9uZXh0
KGl0ZW1zKTsKLSAgICB9Ci0KLSAgICBHTGlzdCogY2hlY2tDdXJyZW50SXRlbUlzQ3VzdG9tQWN0
aW9uQW5kR2V0TmV4dChHTGlzdCogaXRlbXMsIGNvbnN0IGNoYXIqIGxhYmVsLCB1bnNpZ25lZCBz
dGF0ZSkKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0KGl0ZW1zKTsKLSAgICAgICAgZ19hc3NlcnQo
V0VCS0lUX0lTX0NPTlRFWFRfTUVOVV9JVEVNKGl0ZW1zLT5kYXRhKSk7Ci0KLSAgICAgICAgV2Vi
S2l0Q29udGV4dE1lbnVJdGVtKiBpdGVtID0gV0VCS0lUX0NPTlRFWFRfTUVOVV9JVEVNKGl0ZW1z
LT5kYXRhKTsKLSAgICAgICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhH
X09CSkVDVChpdGVtKSk7Ci0KLSAgICAgICAgR3RrQWN0aW9uKiBhY3Rpb24gPSB3ZWJraXRfY29u
dGV4dF9tZW51X2l0ZW1fZ2V0X2FjdGlvbihpdGVtKTsKLSAgICAgICAgZ19hc3NlcnQoR1RLX0lT
X0FDVElPTihhY3Rpb24pKTsKLQotICAgICAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X2NvbnRl
eHRfbWVudV9pdGVtX2dldF9zdG9ja19hY3Rpb24oaXRlbSksID09LCBXRUJLSVRfQ09OVEVYVF9N
RU5VX0FDVElPTl9DVVNUT00pOwotICAgICAgICBnX2Fzc2VydF9jbXBzdHIoZ3RrX2FjdGlvbl9n
ZXRfbGFiZWwoYWN0aW9uKSwgPT0sIGxhYmVsKTsKLQotICAgICAgICBjaGVja0FjdGlvblN0YXRl
KGFjdGlvbiwgc3RhdGUpOwotCi0gICAgICAgIHJldHVybiBnX2xpc3RfbmV4dChpdGVtcyk7Ci0g
ICAgfQotCi0gICAgR0xpc3QqIGNoZWNrQ3VycmVudEl0ZW1Jc1N1Yk1lbnVBbmRHZXROZXh0KEdM
aXN0KiBpdGVtcywgY29uc3QgY2hhciogbGFiZWwsIHVuc2lnbmVkIHN0YXRlLCBHTGlzdCoqIHN1
Yk1lbnVJdGVyKQotICAgIHsKLSAgICAgICAgZ19hc3NlcnQoaXRlbXMpOwotICAgICAgICBnX2Fz
c2VydChXRUJLSVRfSVNfQ09OVEVYVF9NRU5VX0lURU0oaXRlbXMtPmRhdGEpKTsKLQotICAgICAg
ICBXZWJLaXRDb250ZXh0TWVudUl0ZW0qIGl0ZW0gPSBXRUJLSVRfQ09OVEVYVF9NRU5VX0lURU0o
aXRlbXMtPmRhdGEpOwotICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlz
aGVzKEdfT0JKRUNUKGl0ZW0pKTsKLQotICAgICAgICBHdGtBY3Rpb24qIGFjdGlvbiA9IHdlYmtp
dF9jb250ZXh0X21lbnVfaXRlbV9nZXRfYWN0aW9uKGl0ZW0pOwotICAgICAgICBnX2Fzc2VydChH
VEtfSVNfQUNUSU9OKGFjdGlvbikpOwotCi0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cihndGtfYWN0
aW9uX2dldF9sYWJlbChhY3Rpb24pLCA9PSwgbGFiZWwpOwotICAgICAgICBjaGVja0FjdGlvblN0
YXRlKGFjdGlvbiwgc3RhdGUpOwotCi0gICAgICAgIFdlYktpdENvbnRleHRNZW51KiBzdWJNZW51
ID0gd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9zdWJtZW51KGl0ZW0pOwotICAgICAgICBn
X2Fzc2VydChXRUJLSVRfSVNfQ09OVEVYVF9NRU5VKHN1Yk1lbnUpKTsKLSAgICAgICAgaWYgKHN1
Yk1lbnVJdGVyKQotICAgICAgICAgICAgKnN1Yk1lbnVJdGVyID0gd2Via2l0X2NvbnRleHRfbWVu
dV9nZXRfaXRlbXMoc3ViTWVudSk7Ci0KLSAgICAgICAgcmV0dXJuIGdfbGlzdF9uZXh0KGl0ZW1z
KTsKLSAgICB9Ci0KLSAgICBHTGlzdCogY2hlY2tDdXJyZW50SXRlbUlzU2VwYXJhdG9yQW5kR2V0
TmV4dChHTGlzdCogaXRlbXMpCi0gICAgewotICAgICAgICBnX2Fzc2VydChpdGVtcyk7Ci0gICAg
ICAgIGdfYXNzZXJ0KFdFQktJVF9JU19DT05URVhUX01FTlVfSVRFTShpdGVtcy0+ZGF0YSkpOwot
Ci0gICAgICAgIFdlYktpdENvbnRleHRNZW51SXRlbSogaXRlbSA9IFdFQktJVF9DT05URVhUX01F
TlVfSVRFTShpdGVtcy0+ZGF0YSk7Ci0gICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9jb250ZXh0X21l
bnVfaXRlbV9pc19zZXBhcmF0b3IoaXRlbSkpOwotCi0gICAgICAgIHJldHVybiBnX2xpc3RfbmV4
dChpdGVtcyk7Ci0gICAgfQotCi0gICAgc3RhdGljIGdib29sZWFuIGRvUmlnaHRDbGlja0lkbGVD
YWxsYmFjayhDb250ZXh0TWVudVRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICB0ZXN0LT5jbGlj
a01vdXNlQnV0dG9uKHRlc3QtPm1fbWVudVBvc2l0aW9uWCwgdGVzdC0+bV9tZW51UG9zaXRpb25Z
LCAzKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQotICAgIHZvaWQgc2hvd0NvbnRl
eHRNZW51QXRQb3NpdGlvbkFuZFdhaXRVbnRpbEZpbmlzaGVkKGludCB4LCBpbnQgeSkKLSAgICB7
Ci0gICAgICAgIG1fbWVudVBvc2l0aW9uWCA9IHg7Ci0gICAgICAgIG1fbWVudVBvc2l0aW9uWSA9
IHk7Ci0gICAgICAgIGdfaWRsZV9hZGQocmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oZG9S
aWdodENsaWNrSWRsZUNhbGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3J1biht
X21haW5Mb29wKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNob3dDb250ZXh0TWVudUFuZFdhaXRVbnRp
bEZpbmlzaGVkKCkKLSAgICB7Ci0gICAgICAgIHNob3dDb250ZXh0TWVudUF0UG9zaXRpb25BbmRX
YWl0VW50aWxGaW5pc2hlZCgwLCAwKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZ2Jvb2xlYW4gc2lt
dWxhdGVFc2NLZXlJZGxlQ2FsbGJhY2soQ29udGV4dE1lbnVUZXN0KiB0ZXN0KQotICAgIHsKLSAg
ICAgICAgdGVzdC0+a2V5U3Ryb2tlKEdES19LRVlfRXNjYXBlKTsKLSAgICAgICAgcmV0dXJuIEZB
TFNFOwotICAgIH0KLQotICAgIHZvaWQgZGlzbWlzc0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmlu
aXNoZWQoKQotICAgIHsKLSAgICAgICAgZ19pZGxlX2FkZChyZWludGVycHJldF9jYXN0PEdTb3Vy
Y2VGdW5jPihzaW11bGF0ZUVzY0tleUlkbGVDYWxsYmFjayksIHRoaXMpOwotICAgICAgICBnX21h
aW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgZG91YmxlIG1fbWVudVBvc2l0
aW9uWDsKLSAgICBkb3VibGUgbV9tZW51UG9zaXRpb25ZOwotfTsKLQotY2xhc3MgQ29udGV4dE1l
bnVEZWZhdWx0VGVzdDogcHVibGljIENvbnRleHRNZW51VGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFL
RV9HTElCX1RFU1RfRklYVFVSRShDb250ZXh0TWVudURlZmF1bHRUZXN0KTsKLQotICAgIGVudW0g
RGVmYXVsdE1lbnVUeXBlIHsKLSAgICAgICAgTmF2aWdhdGlvbiwKLSAgICAgICAgTGluaywKLSAg
ICAgICAgSW1hZ2UsCi0gICAgICAgIExpbmtJbWFnZSwKLSAgICAgICAgVmlkZW8sCi0gICAgICAg
IEF1ZGlvLAotICAgICAgICBFZGl0YWJsZQotICAgIH07Ci0KLSAgICBDb250ZXh0TWVudURlZmF1
bHRUZXN0KCkKLSAgICAgICAgOiBtX2V4cGVjdGVkTWVudVR5cGUoTmF2aWdhdGlvbikKLSAgICB7
Ci0gICAgfQotCi0gICAgYm9vbCBjb250ZXh0TWVudShXZWJLaXRDb250ZXh0TWVudSogY29udGV4
dE1lbnUsIEdka0V2ZW50KiBldmVudCwgV2ViS2l0SGl0VGVzdFJlc3VsdCogaGl0VGVzdFJlc3Vs
dCkKLSAgICB7Ci0gICAgICAgIEdMaXN0KiBpdGVyID0gd2Via2l0X2NvbnRleHRfbWVudV9nZXRf
aXRlbXMoY29udGV4dE1lbnUpOwotCi0gICAgICAgIHN3aXRjaCAobV9leHBlY3RlZE1lbnVUeXBl
KSB7Ci0gICAgICAgIGNhc2UgTmF2aWdhdGlvbjoKLSAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJr
aXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluayhoaXRUZXN0UmVzdWx0KSk7Ci0gICAg
ICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdl
KGhpdFRlc3RSZXN1bHQpKTsKLSAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3Rf
cmVzdWx0X2NvbnRleHRfaXNfbWVkaWEoaGl0VGVzdFJlc3VsdCkpOwotICAgICAgICAgICAgZ19h
c3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0
UmVzdWx0KSk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rp
b25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0dPX0JBQ0ssIFZp
c2libGUpOwotICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9u
QW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9HT19GT1JXQVJELCBW
aXNpYmxlKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlv
bkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fU1RPUCwgVmlzaWJs
ZSk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRH
ZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1JFTE9BRCwgVmlzaWJsZSB8
IEVuYWJsZWQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTGluazoKLSAgICAg
ICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhp
dFRlc3RSZXN1bHQpKTsKLSAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVz
dWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkpOwotICAgICAgICAgICAgZ19hc3Nl
cnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0
KSk7Ci0gICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0
X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1
cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVO
VV9BQ1RJT05fT1BFTl9MSU5LLCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgICAgICBpdGVy
ID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9D
T05URVhUX01FTlVfQUNUSU9OX09QRU5fTElOS19JTl9ORVdfV0lORE9XLCBWaXNpYmxlIHwgRW5h
YmxlZCk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25B
bmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0RPV05MT0FEX0xJTktf
VE9fRElTSywgVmlzaWJsZSB8IEVuYWJsZWQpOwotICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3Vy
cmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5V
X0FDVElPTl9DT1BZX0xJTktfVE9fQ0xJUEJPQVJELCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbWFnZToKLSAgICAgICAgICAgIGdfYXNzZXJ0
KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluayhoaXRUZXN0UmVzdWx0KSk7
Ci0gICAgICAgICAgICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNf
aW1hZ2UoaGl0VGVzdFJlc3VsdCkpOwotICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRf
dGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgICAgICAg
ICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRhYmxlKGhp
dFRlc3RSZXN1bHQpKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9j
a0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9J
TUFHRV9JTl9ORVdfV0lORE9XLCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgICAgICBpdGVy
ID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9D
T05URVhUX01FTlVfQUNUSU9OX0RPV05MT0FEX0lNQUdFX1RPX0RJU0ssIFZpc2libGUgfCBFbmFi
bGVkKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFu
ZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9JTUFHRV9UT19D
TElQQk9BUkQsIFZpc2libGUgfCBFbmFibGVkKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1
cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVO
VV9BQ1RJT05fQ09QWV9JTUFHRV9VUkxfVE9fQ0xJUEJPQVJELCBWaXNpYmxlIHwgRW5hYmxlZCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBMaW5rSW1hZ2U6Ci0gICAgICAgICAg
ICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluayhoaXRUZXN0
UmVzdWx0KSk7Ci0gICAgICAgICAgICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2Nv
bnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkpOwotICAgICAgICAgICAgZ19hc3NlcnQoIXdl
YmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7Ci0g
ICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2Vk
aXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJ
dGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T05fT1BFTl9MSU5LLCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgICAgICBpdGVyID0gY2hl
Y2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhU
X01FTlVfQUNUSU9OX09QRU5fTElOS19JTl9ORVdfV0lORE9XLCBWaXNpYmxlIHwgRW5hYmxlZCk7
Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXRO
ZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0RPV05MT0FEX0xJTktfVE9fRElT
SywgVmlzaWJsZSB8IEVuYWJsZWQpOwotICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0
ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
Tl9DT1BZX0xJTktfVE9fQ0xJUEJPQVJELCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgICAg
ICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU2VwYXJhdG9yQW5kR2V0TmV4dChpdGVyKTsKLSAg
ICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQo
aXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9JTUFHRV9JTl9ORVdfV0lORE9X
LCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRl
bUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9O
X0RPV05MT0FEX0lNQUdFX1RPX0RJU0ssIFZpc2libGUgfCBFbmFibGVkKTsKLSAgICAgICAgICAg
IGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VC
S0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9JTUFHRV9UT19DTElQQk9BUkQsIFZpc2libGUg
fCBFbmFibGVkKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0Fj
dGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9JTUFH
RV9VUkxfVE9fQ0xJUEJPQVJELCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBWaWRlbzoKLSAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0
X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluayhoaXRUZXN0UmVzdWx0KSk7Ci0gICAgICAgICAg
ICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdlKGhpdFRl
c3RSZXN1bHQpKTsKLSAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRf
Y29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgICAgICAgICBnX2Fzc2VydCgh
d2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQp
KTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdl
dE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fTUVESUFfUExBWSwgVmlzaWJs
ZSB8IEVuYWJsZWQpOwotICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2Nr
QWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9NRURJQV9N
VVRFLCBWaXNpYmxlKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9j
a0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fVE9HR0xF
X01FRElBX0NPTlRST0xTLCBWaXNpYmxlIHwgRW5hYmxlZCB8IENoZWNrZWQpOwotICAgICAgICAg
ICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9UT0dHTEVfTUVESUFfTE9PUCwgVmlzaWJsZSB8IEVu
YWJsZWQpOwotICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9u
QW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9FTlRFUl9WSURFT19G
VUxMU0NSRUVOLCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tD
dXJyZW50SXRlbUlzU2VwYXJhdG9yQW5kR2V0TmV4dChpdGVyKTsKLSAgICAgICAgICAgIGl0ZXIg
PSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NP
TlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9WSURFT19MSU5LX1RPX0NMSVBCT0FSRCwgVmlzaWJsZSB8
IEVuYWJsZWQpOwotICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0
aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX1ZJREVP
X0lOX05FV19XSU5ET1csIFZpc2libGUgfCBFbmFibGVkKTsKLSAgICAgICAgICAgIGl0ZXIgPSBj
aGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fRE9XTkxPQURfVklERU9fVE9fRElTSywgVmlzaWJsZSB8IEVuYWJsZWQp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXVkaW86Ci0gICAgICAgICAgICBn
X2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xpbmsoaGl0VGVzdFJl
c3VsdCkpOwotICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29u
dGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgICAgICAgICBnX2Fzc2VydCh3ZWJr
aXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbWVkaWEoaGl0VGVzdFJlc3VsdCkpOwotICAg
ICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19lZGl0
YWJsZShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRl
bUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9O
X01FRElBX1BMQVksIFZpc2libGUgfCBFbmFibGVkKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVj
a0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRf
TUVOVV9BQ1RJT05fTUVESUFfTVVURSwgVmlzaWJsZSk7Ci0gICAgICAgICAgICBpdGVyID0gY2hl
Y2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhU
X01FTlVfQUNUSU9OX1RPR0dMRV9NRURJQV9DT05UUk9MUywgVmlzaWJsZSB8IEVuYWJsZWQgfCBD
aGVja2VkKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlv
bkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fVE9HR0xFX01FRElB
X0xPT1AsIFZpc2libGUgfCBFbmFibGVkKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJl
bnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9B
Q1RJT05fRU5URVJfVklERU9fRlVMTFNDUkVFTiwgVmlzaWJsZSk7Ci0gICAgICAgICAgICBpdGVy
ID0gY2hlY2tDdXJyZW50SXRlbUlzU2VwYXJhdG9yQW5kR2V0TmV4dChpdGVyKTsKLSAgICAgICAg
ICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwg
V0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9BVURJT19MSU5LX1RPX0NMSVBCT0FSRCwg
VmlzaWJsZSB8IEVuYWJsZWQpOwotICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1J
c1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9P
UEVOX0FVRElPX0lOX05FV19XSU5ET1csIFZpc2libGUgfCBFbmFibGVkKTsKLSAgICAgICAgICAg
IGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VC
S0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRE9XTkxPQURfQVVESU9fVE9fRElTSywgVmlzaWJsZSB8
IEVuYWJsZWQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRWRpdGFibGU6Ci0g
ICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xp
bmsoaGl0VGVzdFJlc3VsdCkpOwotICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVz
dF9yZXN1bHRfY29udGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgICAgICAgICBn
X2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RS
ZXN1bHQpKTsKLSAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29u
dGV4dF9pc19lZGl0YWJsZShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgICAgICAgICBpdGVyID0gY2hl
Y2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhU
X01FTlVfQUNUSU9OX0NVVCwgVmlzaWJsZSk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJy
ZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVf
QUNUSU9OX0NPUFksIFZpc2libGUpOwotICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0
ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
Tl9QQVNURSwgVmlzaWJsZSB8IEVuYWJsZWQpOwotICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3Vy
cmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5V
X0FDVElPTl9ERUxFVEUsIFZpc2libGUpOwotICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVu
dEl0ZW1Jc1NlcGFyYXRvckFuZEdldE5leHQoaXRlcik7Ci0gICAgICAgICAgICBpdGVyID0gY2hl
Y2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhU
X01FTlVfQUNUSU9OX1NFTEVDVF9BTEwsIFZpc2libGUgfCBFbmFibGVkKTsKLSAgICAgICAgICAg
IGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTZXBhcmF0b3JBbmRHZXROZXh0KGl0ZXIpOwotICAg
ICAgICAgICAgaWYgKHNob3VsZFNob3dJbnB1dE1ldGhvZHNNZW51KCkpCi0gICAgICAgICAgICAg
ICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9JTlBVVF9NRVRIT0RTLCBWaXNpYmxlIHwgRW5hYmxl
ZCk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRH
ZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1VOSUNPREUsIFZpc2libGUg
fCBFbmFibGVkKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh3
ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9kZXZlbG9wZXJfZXh0cmFzKHdlYmtpdF93ZWJfdmll
d19nZXRfc2V0dGluZ3MobV93ZWJWaWV3KSkpIHsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1
cnJlbnRJdGVtSXNTZXBhcmF0b3JBbmRHZXROZXh0KGl0ZXIpOwotICAgICAgICAgICAgaXRlciA9
IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09O
VEVYVF9NRU5VX0FDVElPTl9JTlNQRUNUX0VMRU1FTlQsIFZpc2libGUgfCBFbmFibGVkKTsKLSAg
ICAgICAgfQotICAgICAgICBnX2Fzc2VydCghaXRlcik7Ci0KLSAgICAgICAgcXVpdE1haW5Mb29w
KCk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgRGVmYXVsdE1lbnVUeXBl
IG1fZXhwZWN0ZWRNZW51VHlwZTsKLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RDb250ZXh0TWVudURl
ZmF1bHRNZW51KENvbnRleHRNZW51RGVmYXVsdFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17
Ci0gICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7Ci0KLSAgICBjb25z
dCBjaGFyKiBsaW5rc0hUTUwgPQotICAgICAgICAiPGh0bWw+PGJvZHk+IgotICAgICAgICAiIDxh
IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6MScgaHJlZj0naHR0cDovL3d3
dy53ZWJraXRndGsub3JnJyB0aXRsZT0nV2ViS2l0R1RLKyBUaXRsZSc+V2ViS2l0R1RLKyBXZWJz
aXRlPC9hPiIKLSAgICAgICAgIiA8aW1nIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDox
OyB0b3A6MTAnIHNyYz0nMHhkZWFkYmVlZicgd2lkdGg9NSBoZWlnaHQ9NT48L2ltZz4iCi0gICAg
ICAgICIgPGEgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRvcDoyMCcgaHJlZj0n
aHR0cDovL3d3dy53ZWJraXRndGsub3JnL2xvZ28nIHRpdGxlPSdXZWJLaXRHVEsrIExvZ28nPjxp
bWcgc3JjPScweGRlYWRiZWVmJyB3aWR0aD01IGhlaWdodD01PjwvaW1nPjwvYT4iCi0gICAgICAg
ICIgPGlucHV0IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6MzAnIHNpemU9
JzEwJz48L2lucHV0PiIKLSAgICAgICAgIiA8dmlkZW8gc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRl
OyBsZWZ0OjE7IHRvcDo1MCcgd2lkdGg9JzMwMCcgaGVpZ2h0PSczMDAnIGNvbnRyb2xzPSdjb250
cm9scycgcHJlbG9hZD0nbm9uZSc+PHNvdXJjZSBzcmM9J21vdmllLm9nZycgdHlwZT0ndmlkZW8v
b2dnJyAvPjwvdmlkZW8+IgotICAgICAgICAiIDxhdWRpbyBzdHlsZT0ncG9zaXRpb246YWJzb2x1
dGU7IGxlZnQ6MTsgdG9wOjYwJyB3aWR0aD0nNTAnIGhlaWdodD0nMjAnIGNvbnRyb2xzPSdjb250
cm9scycgcHJlbG9hZD0nbm9uZSc+PHNvdXJjZSBzcmM9J3RyYWNrLm1wMycgdHlwZT0nYXVkaW8v
bXAzJyAvPjwvYXVkaW8+IgotICAgICAgICAiPC9ib2R5PjwvaHRtbD4iOwotICAgIHRlc3QtPmxv
YWRIdG1sKGxpbmtzSFRNTCwgImZpbGU6Ly8vIik7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZp
bmlzaGVkKCk7Ci0KLSAgICAvLyBDb250ZXh0IG1lbnUgZm9yIGRvY3VtZW50LgotICAgIHRlc3Qt
Pm1fZXhwZWN0ZWRNZW51VHlwZSA9IENvbnRleHRNZW51RGVmYXVsdFRlc3Q6Ok5hdmlnYXRpb247
Ci0gICAgdGVzdC0+c2hvd0NvbnRleHRNZW51QXRQb3NpdGlvbkFuZFdhaXRVbnRpbEZpbmlzaGVk
KDAsIDApOwotCi0gICAgLy8gQ29udGV4dCBtZW51IGZvciBsaW5rLgotICAgIHRlc3QtPm1fZXhw
ZWN0ZWRNZW51VHlwZSA9IENvbnRleHRNZW51RGVmYXVsdFRlc3Q6Okxpbms7Ci0gICAgdGVzdC0+
c2hvd0NvbnRleHRNZW51QXRQb3NpdGlvbkFuZFdhaXRVbnRpbEZpbmlzaGVkKDEsIDEpOwotCi0g
ICAgLy8gQ29udGV4dCBtZW51IGZvciBpbWFnZS4KLSAgICB0ZXN0LT5tX2V4cGVjdGVkTWVudVR5
cGUgPSBDb250ZXh0TWVudURlZmF1bHRUZXN0OjpJbWFnZTsKLSAgICB0ZXN0LT5zaG93Q29udGV4
dE1lbnVBdFBvc2l0aW9uQW5kV2FpdFVudGlsRmluaXNoZWQoMSwgMTApOwotCi0gICAgLy8gRW5h
YmxlIGRldmVsb3BlciBleHRyYXMgbm93LCBzbyB0aGF0IGluc3BlY3RvciBlbGVtZW50Ci0gICAg
Ly8gd2lsbCBiZSBzaG93biBpbiB0aGUgZGVmYXVsdCBjb250ZXh0IG1lbnUuCi0gICAgd2Via2l0
X3NldHRpbmdzX3NldF9lbmFibGVfZGV2ZWxvcGVyX2V4dHJhcyh3ZWJraXRfd2ViX3ZpZXdfZ2V0
X3NldHRpbmdzKHRlc3QtPm1fd2ViVmlldyksIFRSVUUpOwotCi0gICAgLy8gQ29udGV4dCBtZW51
IGZvciBpbWFnZSBsaW5rLgotICAgIHRlc3QtPm1fZXhwZWN0ZWRNZW51VHlwZSA9IENvbnRleHRN
ZW51RGVmYXVsdFRlc3Q6OkxpbmtJbWFnZTsKLSAgICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBdFBv
c2l0aW9uQW5kV2FpdFVudGlsRmluaXNoZWQoMSwgMjApOwotCi0gICAgLy8gQ29udGV4dCBtZW51
IGZvciB2aWRlby4KLSAgICB0ZXN0LT5tX2V4cGVjdGVkTWVudVR5cGUgPSBDb250ZXh0TWVudURl
ZmF1bHRUZXN0OjpWaWRlbzsKLSAgICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBdFBvc2l0aW9uQW5k
V2FpdFVudGlsRmluaXNoZWQoMSwgNTApOwotCi0gICAgLy8gQ29udGV4dCBtZW51IGZvciBhdWRp
by4KLSAgICB0ZXN0LT5tX2V4cGVjdGVkTWVudVR5cGUgPSBDb250ZXh0TWVudURlZmF1bHRUZXN0
OjpBdWRpbzsKLSAgICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBdFBvc2l0aW9uQW5kV2FpdFVudGls
RmluaXNoZWQoMSwgNjApOwotCi0gICAgLy8gQ29udGV4dCBtZW51IGZvciBlZGl0YWJsZS4KLSAg
ICB0ZXN0LT5tX2V4cGVjdGVkTWVudVR5cGUgPSBDb250ZXh0TWVudURlZmF1bHRUZXN0OjpFZGl0
YWJsZTsKLSAgICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBdFBvc2l0aW9uQW5kV2FpdFVudGlsRmlu
aXNoZWQoNSwgMzUpOwotfQotCi1jbGFzcyBDb250ZXh0TWVudUN1c3RvbVRlc3Q6IHB1YmxpYyBD
b250ZXh0TWVudVRlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoQ29u
dGV4dE1lbnVDdXN0b21UZXN0KTsKLQotICAgIENvbnRleHRNZW51Q3VzdG9tVGVzdCgpCi0gICAg
ICAgIDogbV9pdGVtVG9BY3RpdmF0ZUxhYmVsKDApCi0gICAgICAgICwgbV9hY3RpdmF0ZWQoZmFs
c2UpCi0gICAgICAgICwgbV90b2dnbGVkKGZhbHNlKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29s
IGNvbnRleHRNZW51KFdlYktpdENvbnRleHRNZW51KiBjb250ZXh0TWVudSwgR2RrRXZlbnQqLCBX
ZWJLaXRIaXRUZXN0UmVzdWx0KiBoaXRUZXN0UmVzdWx0KQotICAgIHsKLSAgICAgICAgLy8gQXBw
ZW5kIG91ciBjdXN0b20gaXRlbSB0byB0aGUgZGVmYXVsdCBtZW51LgotICAgICAgICB3ZWJraXRf
Y29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVt
X25ldyhtX2FjdGlvbi5nZXQoKSkpOwotICAgICAgICBxdWl0TWFpbkxvb3AoKTsKLQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgR3RrTWVudUl0ZW0qIGdldE1lbnVJdGVtKEd0
a01lbnUqIG1lbnUsIGNvbnN0IGdjaGFyKiBpdGVtTGFiZWwpCi0gICAgewotICAgICAgICBHT3du
UHRyPEdMaXN0PiBpdGVtcyhndGtfY29udGFpbmVyX2dldF9jaGlsZHJlbihHVEtfQ09OVEFJTkVS
KG1lbnUpKSk7Ci0gICAgICAgIGZvciAoR0xpc3QqIGl0ZXIgPSBpdGVtcy5nZXQoKTsgaXRlcjsg
aXRlciA9IGdfbGlzdF9uZXh0KGl0ZXIpKSB7Ci0gICAgICAgICAgICBHdGtNZW51SXRlbSogY2hp
bGQgPSBHVEtfTUVOVV9JVEVNKGl0ZXItPmRhdGEpOwotICAgICAgICAgICAgaWYgKGdfc3RyX2Vx
dWFsKGl0ZW1MYWJlbCwgZ3RrX21lbnVfaXRlbV9nZXRfbGFiZWwoY2hpbGQpKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gY2hpbGQ7Ci0gICAgICAgIH0KLSAgICAgICAgZ19hc3NlcnRfbm90X3Jl
YWNoZWQoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgdm9pZCBhY3RpdmF0ZU1l
bnVJdGVtKCkKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0KG1faXRlbVRvQWN0aXZhdGVMYWJlbCk7
Ci0gICAgICAgIEd0a01lbnUqIG1lbnUgPSBnZXRQb3B1cE1lbnUoKTsKLSAgICAgICAgR3RrTWVu
dUl0ZW0qIGl0ZW0gPSBnZXRNZW51SXRlbShtZW51LCBtX2l0ZW1Ub0FjdGl2YXRlTGFiZWwpOwot
ICAgICAgICBndGtfbWVudV9zaGVsbF9hY3RpdmF0ZV9pdGVtKEdUS19NRU5VX1NIRUxMKG1lbnUp
LCBHVEtfV0lER0VUKGl0ZW0pLCBUUlVFKTsKLSAgICAgICAgbV9pdGVtVG9BY3RpdmF0ZUxhYmVs
ID0gMDsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZ2Jvb2xlYW4gYWN0aXZhdGVNZW51SXRlbUlkbGVD
YWxsYmFjayhncG9pbnRlciB1c2VyRGF0YSkKLSAgICB7Ci0gICAgICAgIENvbnRleHRNZW51Q3Vz
dG9tVGVzdCogdGVzdCA9IHN0YXRpY19jYXN0PENvbnRleHRNZW51Q3VzdG9tVGVzdCo+KHVzZXJE
YXRhKTsKLSAgICAgICAgdGVzdC0+YWN0aXZhdGVNZW51SXRlbSgpOwotICAgICAgICByZXR1cm4g
RkFMU0U7Ci0gICAgfQotCi0gICAgdm9pZCBhY3RpdmF0ZUN1c3RvbU1lbnVJdGVtQW5kV2FpdFVu
dGlsQWN0aXZhdGVkKGNvbnN0IGNoYXIqIGFjdGlvbkxhYmVsKQotICAgIHsKLSAgICAgICAgbV9h
Y3RpdmF0ZWQgPSBtX3RvZ2dsZWQgPSBmYWxzZTsKLSAgICAgICAgbV9pdGVtVG9BY3RpdmF0ZUxh
YmVsID0gYWN0aW9uTGFiZWw7Ci0gICAgICAgIGdfaWRsZV9hZGQoYWN0aXZhdGVNZW51SXRlbUlk
bGVDYWxsYmFjaywgdGhpcyk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsK
LSAgICB9Ci0KLSAgICB2b2lkIHRvZ2dsZUN1c3RvbU1lbnVJdGVtQW5kV2FpdFVudGlsVG9nZ2xl
ZChjb25zdCBjaGFyKiBhY3Rpb25MYWJlbCkKLSAgICB7Ci0gICAgICAgIGFjdGl2YXRlQ3VzdG9t
TWVudUl0ZW1BbmRXYWl0VW50aWxBY3RpdmF0ZWQoYWN0aW9uTGFiZWwpOwotICAgIH0KLQotICAg
IHN0YXRpYyB2b2lkIGFjdGlvbkFjdGl2YXRlZENhbGxiYWNrKEd0a0FjdGlvbiosIENvbnRleHRN
ZW51Q3VzdG9tVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHRlc3QtPm1fYWN0aXZhdGVkID0g
dHJ1ZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBhY3Rpb25Ub2dnbGVkQ2FsbGJhY2soR3Rr
QWN0aW9uKiwgQ29udGV4dE1lbnVDdXN0b21UZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVz
dC0+bV90b2dnbGVkID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldEFjdGlvbihHdGtBY3Rp
b24qIGFjdGlvbikKLSAgICB7Ci0gICAgICAgIG1fYWN0aW9uID0gYWN0aW9uOwotICAgICAgICBp
ZiAoR1RLX0lTX1RPR0dMRV9BQ1RJT04oYWN0aW9uKSkKLSAgICAgICAgICAgIGdfc2lnbmFsX2Nv
bm5lY3QoYWN0aW9uLCAidG9nZ2xlZCIsIEdfQ0FMTEJBQ0soYWN0aW9uVG9nZ2xlZENhbGxiYWNr
KSwgdGhpcyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoYWN0
aW9uLCAiYWN0aXZhdGUiLCBHX0NBTExCQUNLKGFjdGlvbkFjdGl2YXRlZENhbGxiYWNrKSwgdGhp
cyk7Ci0gICAgfQotCi0gICAgR1JlZlB0cjxHdGtBY3Rpb24+IG1fYWN0aW9uOwotICAgIGNvbnN0
IGNoYXIqIG1faXRlbVRvQWN0aXZhdGVMYWJlbDsKLSAgICBib29sIG1fYWN0aXZhdGVkOwotICAg
IGJvb2wgbV90b2dnbGVkOwotfTsKLQotc3RhdGljIHZvaWQgdGVzdENvbnRleHRNZW51UG9wdWxh
dGVNZW51KENvbnRleHRNZW51Q3VzdG9tVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAg
ICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKLQotICAgIHRlc3QtPmxv
YWRIdG1sKCI8aHRtbD48Ym9keT5XZWJLaXRHVEsrIENvbnRleHQgbWVudSB0ZXN0czwvYm9keT48
L2h0bWw+IiwgImZpbGU6Ly8vIik7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7
Ci0KLSAgICAvLyBDcmVhdGUgYSBjdXN0b20gbWVudSBpdGVtLgotICAgIEdSZWZQdHI8R3RrQWN0
aW9uPiBhY3Rpb24gPSBhZG9wdEdSZWYoZ3RrX2FjdGlvbl9uZXcoIldlYktpdEdUSytDdXN0b21B
Y3Rpb24iLCAiQ3VzdG9tIF9BY3Rpb24iLCAwLCAwKSk7Ci0gICAgdGVzdC0+c2V0QWN0aW9uKGFj
dGlvbi5nZXQoKSk7Ci0gICAgdGVzdC0+c2hvd0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmluaXNo
ZWQoKTsKLSAgICB0ZXN0LT5hY3RpdmF0ZUN1c3RvbU1lbnVJdGVtQW5kV2FpdFVudGlsQWN0aXZh
dGVkKGd0a19hY3Rpb25fZ2V0X2xhYmVsKGFjdGlvbi5nZXQoKSkpOwotICAgIGdfYXNzZXJ0KHRl
c3QtPm1fYWN0aXZhdGVkKTsKLSAgICBnX2Fzc2VydCghdGVzdC0+bV90b2dnbGVkKTsKLQotICAg
IC8vIENyZWF0ZSBhIGN1c3RvbSB0b2dnbGUgbWVudSBpdGVtLgotICAgIEdSZWZQdHI8R3RrQWN0
aW9uPiB0b2dnbGVBY3Rpb24gPSBhZG9wdEdSZWYoR1RLX0FDVElPTihndGtfdG9nZ2xlX2FjdGlv
bl9uZXcoIldlYktpdEdUSytDdXN0b21Ub2dnbGVBY3Rpb24iLCAiQ3VzdG9tIF9Ub2dnbGUgQWN0
aW9uIiwgMCwgMCkpKTsKLSAgICB0ZXN0LT5zZXRBY3Rpb24odG9nZ2xlQWN0aW9uLmdldCgpKTsK
LSAgICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBbmRXYWl0VW50aWxGaW5pc2hlZCgpOwotICAgIHRl
c3QtPnRvZ2dsZUN1c3RvbU1lbnVJdGVtQW5kV2FpdFVudGlsVG9nZ2xlZChndGtfYWN0aW9uX2dl
dF9sYWJlbCh0b2dnbGVBY3Rpb24uZ2V0KCkpKTsKLSAgICBnX2Fzc2VydCghdGVzdC0+bV9hY3Rp
dmF0ZWQpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fdG9nZ2xlZCk7Ci19Ci0KLWNsYXNzIENvbnRl
eHRNZW51Q3VzdG9tRnVsbFRlc3Q6IHB1YmxpYyBDb250ZXh0TWVudVRlc3QgewotcHVibGljOgot
ICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoQ29udGV4dE1lbnVDdXN0b21GdWxsVGVzdCk7Ci0K
LSAgICBib29sIGNvbnRleHRNZW51KFdlYktpdENvbnRleHRNZW51KiBjb250ZXh0TWVudSwgR2Rr
RXZlbnQqLCBXZWJLaXRIaXRUZXN0UmVzdWx0KikKLSAgICB7Ci0gICAgICAgIC8vIENsZWFyIHBy
b3Bvc2VkIG1lbnUgYW5kIGJ1aWxkIG91ciBvd24uCi0gICAgICAgIHdlYmtpdF9jb250ZXh0X21l
bnVfcmVtb3ZlX2FsbChjb250ZXh0TWVudSk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJr
aXRfY29udGV4dF9tZW51X2dldF9uX2l0ZW1zKGNvbnRleHRNZW51KSwgPT0sIDApOwotCi0gICAg
ICAgIC8vIEFkZCBhY3Rpb25zIGZyb20gc3RvY2suCi0gICAgICAgIHdlYmtpdF9jb250ZXh0X21l
bnVfcHJlcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19mcm9t
X3N0b2NrX2FjdGlvbihXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9HT19CQUNLKSk7Ci0gICAg
ICAgIHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4
dF9tZW51X2l0ZW1fbmV3X2Zyb21fc3RvY2tfYWN0aW9uKFdFQktJVF9DT05URVhUX01FTlVfQUNU
SU9OX0dPX0ZPUldBUkQpKTsKLSAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9pbnNlcnQoY29u
dGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfc2VwYXJhdG9yKCksIDIpOwot
Ci0gICAgICAgIC8vIEFkZCBjdXN0b20gYWN0aW9ucy4KLSAgICAgICAgR1JlZlB0cjxHdGtBY3Rp
b24+IGFjdGlvbiA9IGFkb3B0R1JlZihndGtfYWN0aW9uX25ldygiV2ViS2l0R1RLK0N1c3RvbUFj
dGlvbiIsICJDdXN0b20gX0FjdGlvbiIsIDAsIDApKTsKLSAgICAgICAgZ3RrX2FjdGlvbl9zZXRf
c2Vuc2l0aXZlKGFjdGlvbi5nZXQoKSwgRkFMU0UpOwotICAgICAgICB3ZWJraXRfY29udGV4dF9t
ZW51X2luc2VydChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ldyhhY3Rp
b24uZ2V0KCkpLCAtMSk7Ci0gICAgICAgIEdSZWZQdHI8R3RrQWN0aW9uPiB0b2dnbGVBY3Rpb24g
PSBhZG9wdEdSZWYoR1RLX0FDVElPTihndGtfdG9nZ2xlX2FjdGlvbl9uZXcoIldlYktpdEdUSytD
dXN0b21Ub2dnbGVBY3Rpb24iLCAiQ3VzdG9tIF9Ub2dnbGUgQWN0aW9uIiwgMCwgMCkpKTsKLSAg
ICAgICAgZ3RrX3RvZ2dsZV9hY3Rpb25fc2V0X2FjdGl2ZShHVEtfVE9HR0xFX0FDVElPTih0b2dn
bGVBY3Rpb24uZ2V0KCkpLCBUUlVFKTsKLSAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBl
bmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXcodG9nZ2xlQWN0aW9u
LmdldCgpKSk7Ci0gICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51
LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X3NlcGFyYXRvcigpKTsKLQotICAgICAgICAv
LyBBZGQgYSBzdWJtZW51LgotICAgICAgICBHUmVmUHRyPFdlYktpdENvbnRleHRNZW51PiBzdWJN
ZW51ID0gYWRvcHRHUmVmKHdlYmtpdF9jb250ZXh0X21lbnVfbmV3KCkpOwotICAgICAgICBhc3Nl
cnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHN1Yk1lbnUuZ2V0KCkp
KTsKLSAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9pbnNlcnQoc3ViTWVudS5nZXQoKSwgd2Vi
a2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19mcm9tX3N0b2NrX2FjdGlvbl93aXRoX2xhYmVsKFdF
QktJVF9DT05URVhUX01FTlVfQUNUSU9OX1NUT1AsICJTdG9wIExvYWQiKSwgMCk7Ci0gICAgICAg
IHdlYmtpdF9jb250ZXh0X21lbnVfaW5zZXJ0KHN1Yk1lbnUuZ2V0KCksIHdlYmtpdF9jb250ZXh0
X21lbnVfaXRlbV9uZXdfZnJvbV9zdG9ja19hY3Rpb24oV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T05fUkVMT0FEKSwgLTEpOwotICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250
ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld193aXRoX3N1Ym1lbnUoIkxvYWQg
b3B0aW9ucyIsIHN1Yk1lbnUuZ2V0KCkpKTsKLSAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9h
cHBlbmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfc2VwYXJhdG9y
KCkpOwotCi0gICAgICAgIC8vIE1vdmUgTG9hZCBzdWJtZW51IGJlZm9yZSBjdXN0b20gYWN0aW9u
cy4KLSAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9tb3ZlX2l0ZW0oY29udGV4dE1lbnUsIHdl
YmtpdF9jb250ZXh0X21lbnVfbGFzdChjb250ZXh0TWVudSksIDMpOwotICAgICAgICB3ZWJraXRf
Y29udGV4dF9tZW51X21vdmVfaXRlbShjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9s
YXN0KGNvbnRleHRNZW51KSwgMyk7Ci0KLSAgICAgICAgLy8gSWYgbGFzdCBpdGVtIGlzIGEgc2Vw
YXJhdG9yLCByZW1vdmUgaXQuCi0gICAgICAgIGlmICh3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1f
aXNfc2VwYXJhdG9yKHdlYmtpdF9jb250ZXh0X21lbnVfbGFzdChjb250ZXh0TWVudSkpKQotICAg
ICAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9yZW1vdmUoY29udGV4dE1lbnUsIHdlYmtpdF9j
b250ZXh0X21lbnVfbGFzdChjb250ZXh0TWVudSkpOwotCi0gICAgICAgIC8vIENoZWNrIHRoZSBt
ZW51LgotICAgICAgICBHTGlzdCogaXRlciA9IHdlYmtpdF9jb250ZXh0X21lbnVfZ2V0X2l0ZW1z
KGNvbnRleHRNZW51KTsKLQotICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tB
Y3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0dPX0JBQ0ss
IFZpc2libGUgfCBFbmFibGVkKTsKLSAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0
b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9HT19G
T1JXQVJELCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJ
dGVtSXNTZXBhcmF0b3JBbmRHZXROZXh0KGl0ZXIpOwotCi0gICAgICAgIEdMaXN0KiBzdWJNZW51
SXRlciA9IDA7Ci0gICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdWJNZW51QW5kR2V0
TmV4dChpdGVyLCAiTG9hZCBvcHRpb25zIiwgVmlzaWJsZSB8IEVuYWJsZWQsICZzdWJNZW51SXRl
cik7Ci0gICAgICAgIHN1Yk1lbnVJdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25B
bmRHZXROZXh0KHN1Yk1lbnVJdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9TVE9QLCBW
aXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgIHN1Yk1lbnVJdGVyID0gY2hlY2tDdXJyZW50SXRl
bUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KHN1Yk1lbnVJdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5V
X0FDVElPTl9SRUxPQUQsIFZpc2libGUgfCBFbmFibGVkKTsKLSAgICAgICAgaXRlciA9IGNoZWNr
Q3VycmVudEl0ZW1Jc1NlcGFyYXRvckFuZEdldE5leHQoaXRlcik7Ci0KLSAgICAgICAgaXRlciA9
IGNoZWNrQ3VycmVudEl0ZW1Jc0N1c3RvbUFjdGlvbkFuZEdldE5leHQoaXRlciwgIkN1c3RvbSBf
QWN0aW9uIiwgVmlzaWJsZSk7Ci0gICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNDdXN0
b21BY3Rpb25BbmRHZXROZXh0KGl0ZXIsICJDdXN0b20gX1RvZ2dsZSBBY3Rpb24iLCBWaXNpYmxl
IHwgRW5hYmxlZCB8IENoZWNrZWQpOwotICAgICAgICBnX2Fzc2VydCghaXRlcik7Ci0KLSAgICAg
ICAgcXVpdE1haW5Mb29wKCk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotfTsKLQot
c3RhdGljIHZvaWQgdGVzdENvbnRleHRNZW51Q3VzdG9tTWVudShDb250ZXh0TWVudUN1c3RvbUZ1
bGxUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPnNob3dJbldpbmRvd0Fu
ZFdhaXRVbnRpbE1hcHBlZCgpOwotCi0gICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxib2R5Pldl
YktpdEdUSysgQ29udGV4dCBtZW51IHRlc3RzPC9ib2R5PjwvaHRtbD4iLCAiZmlsZTovLy8iKTsK
LSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIHRlc3QtPnNob3dDb250
ZXh0TWVudUFuZFdhaXRVbnRpbEZpbmlzaGVkKCk7Ci19Ci0KLWNsYXNzIENvbnRleHRNZW51RGlz
YWJsZWRUZXN0OiBwdWJsaWMgQ29udGV4dE1lbnVUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dM
SUJfVEVTVF9GSVhUVVJFKENvbnRleHRNZW51RGlzYWJsZWRUZXN0KTsKLQotICAgIGVudW0gRGlz
YWJsZU1vZGUgewotICAgICAgICBJZ25vcmVDbGlja3MsCi0gICAgICAgIElnbm9yZURlZmF1bHRN
ZW51Ci0gICAgfTsKLQotICAgIHN0YXRpYyBnYm9vbGVhbiBidXR0b25QcmVzc0V2ZW50Q2FsbGJh
Y2soR3RrV2lkZ2V0KiwgR2RrRXZlbnQqIGV2ZW50LCBDb250ZXh0TWVudURpc2FibGVkVGVzdCog
dGVzdCkKLSAgICB7Ci0gICAgICAgIGlmIChldmVudC0+YnV0dG9uLmJ1dHRvbiAhPSAzKQotICAg
ICAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgICByZXR1cm4gdGVzdC0+cmlnaHRCdXR0b25Q
cmVzc2VkKCk7Ci0gICAgfQotCi0gICAgQ29udGV4dE1lbnVEaXNhYmxlZFRlc3QoKQotICAgICAg
ICA6IG1fZGlzYWJsZU1vZGUoSWdub3JlQ2xpY2tzKQotICAgIHsKLSAgICAgICAgZ19zaWduYWxf
Y29ubmVjdChtX3dlYlZpZXcsICJidXR0b24tcHJlc3MtZXZlbnQiLCBHX0NBTExCQUNLKGJ1dHRv
blByZXNzRXZlbnRDYWxsYmFjayksIHRoaXMpOwotICAgIH0KLQotICAgIGJvb2wgY29udGV4dE1l
bnUoV2ViS2l0Q29udGV4dE1lbnUqIGNvbnRleHRNZW51LCBHZGtFdmVudCosIFdlYktpdEhpdFRl
c3RSZXN1bHQqKQotICAgIHsKLSAgICAgICAgaWYgKG1fZGlzYWJsZU1vZGUgPT0gSWdub3JlQ2xp
Y2tzKQotICAgICAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgcXVpdE1haW5Mb29wKCk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotCi0gICAgYm9vbCByaWdodEJ1dHRvblByZXNzZWQoKQotICAgIHsKLSAgICAgICAgaWYgKG1f
ZGlzYWJsZU1vZGUgPT0gSWdub3JlQ2xpY2tzKSB7Ci0gICAgICAgICAgICBxdWl0TWFpbkxvb3BB
ZnRlclByb2Nlc3NpbmdQZW5kaW5nRXZlbnRzKCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgRGlzYWJsZU1v
ZGUgbV9kaXNhYmxlTW9kZTsKLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RDb250ZXh0TWVudURpc2Fi
bGVNZW51KENvbnRleHRNZW51RGlzYWJsZWRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewot
ICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOwotCi0gICAgdGVzdC0+
bG9hZEh0bWwoIjxodG1sPjxib2R5PldlYktpdEdUSysgQ29udGV4dCBtZW51IHRlc3RzPC9ib2R5
PjwvaHRtbD4iLCAiZmlsZTovLy8iKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQo
KTsKLQotICAgIHRlc3QtPm1fZGlzYWJsZU1vZGUgPSBDb250ZXh0TWVudURpc2FibGVkVGVzdDo6
SWdub3JlRGVmYXVsdE1lbnU7Ci0gICAgdGVzdC0+c2hvd0NvbnRleHRNZW51QW5kV2FpdFVudGls
RmluaXNoZWQoKTsKLQotICAgIHRlc3QtPm1fZGlzYWJsZU1vZGUgPSBDb250ZXh0TWVudURpc2Fi
bGVkVGVzdDo6SWdub3JlQ2xpY2tzOwotICAgIHRlc3QtPnNob3dDb250ZXh0TWVudUFuZFdhaXRV
bnRpbEZpbmlzaGVkKCk7Ci19Ci0KLWNsYXNzIENvbnRleHRNZW51U3VibWVudVRlc3Q6IHB1Ymxp
YyBDb250ZXh0TWVudVRlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUo
Q29udGV4dE1lbnVTdWJtZW51VGVzdCk7Ci0KLSAgICBib29sIGNvbnRleHRNZW51KFdlYktpdENv
bnRleHRNZW51KiBjb250ZXh0TWVudSwgR2RrRXZlbnQqLCBXZWJLaXRIaXRUZXN0UmVzdWx0KikK
LSAgICB7Ci0gICAgICAgIHNpemVfdCBtZW51U2l6ZSA9IHdlYmtpdF9jb250ZXh0X21lbnVfZ2V0
X25faXRlbXMoY29udGV4dE1lbnUpOwotICAgICAgICBHUmVmUHRyPFdlYktpdENvbnRleHRNZW51
PiBzdWJNZW51ID0gYWRvcHRHUmVmKHdlYmtpdF9jb250ZXh0X21lbnVfbmV3KCkpOwotICAgICAg
ICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRf
bWVudV9pdGVtX25ld193aXRoX3N1Ym1lbnUoIlN1Yk1lbnVJdGVtIiwgc3ViTWVudS5nZXQoKSkp
OwotICAgICAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9jb250ZXh0X21lbnVfZ2V0X25faXRl
bXMoY29udGV4dE1lbnUpLCA9PSwgbWVudVNpemUgKyAxKTsKLQotICAgICAgICBHUmVmUHRyPFdl
YktpdENvbnRleHRNZW51PiBzdWJNZW51MiA9IGFkb3B0R1JlZih3ZWJraXRfY29udGV4dF9tZW51
X25ldygpKTsKLSAgICAgICAgR1JlZlB0cjxXZWJLaXRDb250ZXh0TWVudUl0ZW0+IGl0ZW0gPSB3
ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X2Zyb21fc3RvY2tfYWN0aW9uKFdFQktJVF9DT05U
RVhUX01FTlVfQUNUSU9OX09QRU5fTElOSyk7Ci0KLSAgICAgICAgLy8gQWRkIHN1Ym1lbnUgdG8g
bmV3bHkgY3JlYXRlZCBpdGVtLgotICAgICAgICBnX2Fzc2VydCghd2Via2l0X2NvbnRleHRfbWVu
dV9pdGVtX2dldF9zdWJtZW51KGl0ZW0uZ2V0KCkpKTsKLSAgICAgICAgd2Via2l0X2NvbnRleHRf
bWVudV9pdGVtX3NldF9zdWJtZW51KGl0ZW0uZ2V0KCksIHN1Yk1lbnUyLmdldCgpKTsKLSAgICAg
ICAgZ19hc3NlcnQod2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9zdWJtZW51KGl0ZW0uZ2V0
KCkpID09IHN1Yk1lbnUyLmdldCgpKTsKLQotICAgICAgICAvLyBSZXBsYWNlIHRoZSBzdWJtZW51
LgotICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fc2V0X3N1Ym1lbnUoaXRlbS5nZXQo
KSwgMCk7Ci0gICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X3N1
Ym1lbnUoaXRlbS5nZXQoKSkpOwotCi0gICAgICAgIC8vIFRyeSB0byBhZGQgYSBzdWJtZW51IGFs
cmVhZHkgYWRkZWQgdG8gYW5vdGhlciBpdGVtLgotICAgICAgICByZW1vdmVMb2dGYXRhbEZsYWco
R19MT0dfTEVWRUxfV0FSTklORyk7Ci0gICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9z
ZXRfc3VibWVudShpdGVtLmdldCgpLCBzdWJNZW51LmdldCgpKTsKLSAgICAgICAgYWRkTG9nRmF0
YWxGbGFnKEdfTE9HX0xFVkVMX1dBUk5JTkcpOwotICAgICAgICBnX2Fzc2VydCghd2Via2l0X2Nv
bnRleHRfbWVudV9pdGVtX2dldF9zdWJtZW51KGl0ZW0uZ2V0KCkpKTsKLQotICAgICAgICAvLyBB
IHJlbW92ZWQgc3VibWVudSBzaG91bGRuJ3QgaGF2ZSBhIHBhcmVudC4KLSAgICAgICAgd2Via2l0
X2NvbnRleHRfbWVudV9pdGVtX3NldF9zdWJtZW51KGl0ZW0uZ2V0KCksIHN1Yk1lbnUyLmdldCgp
KTsKLSAgICAgICAgZ19hc3NlcnQod2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9zdWJtZW51
KGl0ZW0uZ2V0KCkpID09IHN1Yk1lbnUyLmdldCgpKTsKLQotICAgICAgICBxdWl0TWFpbkxvb3Ao
KTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0
Q29udGV4dE1lbnVTdWJNZW51KENvbnRleHRNZW51U3VibWVudVRlc3QqIHRlc3QsIGdjb25zdHBv
aW50ZXIpCi17Ci0gICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7Ci0K
LSAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHk+V2ViS2l0R1RLKyBDb250ZXh0IG1lbnUg
dGVzdHM8L2JvZHk+PC9odG1sPiIsICJmaWxlOi8vLyIpOwotICAgIHRlc3QtPndhaXRVbnRpbExv
YWRGaW5pc2hlZCgpOwotCi0gICAgdGVzdC0+c2hvd0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmlu
aXNoZWQoKTsKLX0KLQotY2xhc3MgQ29udGV4dE1lbnVEaXNtaXNzZWRUZXN0OiBwdWJsaWMgQ29u
dGV4dE1lbnVUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKENvbnRl
eHRNZW51RGlzbWlzc2VkVGVzdCk7Ci0KLSAgICBDb250ZXh0TWVudURpc21pc3NlZFRlc3QoKQot
ICAgICAgICA6IG1fZGlzbWlzc2VkKGZhbHNlKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGNv
bnRleHRNZW51KFdlYktpdENvbnRleHRNZW51KiBjb250ZXh0TWVudSwgR2RrRXZlbnQqLCBXZWJL
aXRIaXRUZXN0UmVzdWx0KikKLSAgICB7Ci0gICAgICAgIHF1aXRNYWluTG9vcCgpOwotICAgICAg
ICAvLyBTaG93IHRoZSBkZWZhdWx0IGNvbnRleHQgbWVudS4KLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIHZvaWQgY29udGV4dE1lbnVEaXNtaXNzZWQoKQotICAgIHsKLSAgICAg
ICAgbV9kaXNtaXNzZWQgPSB0cnVlOwotICAgICAgICBDb250ZXh0TWVudVRlc3Q6OmNvbnRleHRN
ZW51RGlzbWlzc2VkKCk7Ci0gICAgfQotCi0gICAgdm9pZCBzaG93Q29udGV4dE1lbnVBbmRXYWl0
VW50aWxEaXNtaXNzZWQoKQotICAgIHsKLSAgICAgICAgc2hvd0NvbnRleHRNZW51QW5kV2FpdFVu
dGlsRmluaXNoZWQoKTsKLSAgICAgICAgZGlzbWlzc0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmlu
aXNoZWQoKTsKLSAgICB9Ci0KLSAgICBib29sIG1fZGlzbWlzc2VkOwotfTsKLQotc3RhdGljIHZv
aWQgdGVzdENvbnRleHRNZW51RGlzbWlzc2VkKENvbnRleHRNZW51RGlzbWlzc2VkVGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxN
YXBwZWQoKTsKLQotICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keT5XZWJLaXRHVEsrIENv
bnRleHQgbWVudSB0ZXN0czwvYm9keT48L2h0bWw+IiwgImZpbGU6Ly8vIik7Ci0gICAgdGVzdC0+
d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBbmRX
YWl0VW50aWxEaXNtaXNzZWQoKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX2Rpc21pc3NlZCk7Ci19
Ci0KLWNsYXNzIENvbnRleHRNZW51U21hcnRTZXBhcmF0b3JzVGVzdDogcHVibGljIENvbnRleHRN
ZW51VGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShDb250ZXh0TWVu
dVNtYXJ0U2VwYXJhdG9yc1Rlc3QpOwotCi0gICAgYm9vbCBjb250ZXh0TWVudShXZWJLaXRDb250
ZXh0TWVudSogY29udGV4dE1lbnUsIEdka0V2ZW50KiwgV2ViS2l0SGl0VGVzdFJlc3VsdCopCi0g
ICAgewotICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X3JlbW92ZV9hbGwoY29udGV4dE1lbnUp
OwotCi0gICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJr
aXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X3NlcGFyYXRvcigpKTsKLSAgICAgICAgd2Via2l0X2Nv
bnRleHRfbWVudV9hcHBlbmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9u
ZXdfc2VwYXJhdG9yKCkpOwotICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250
ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19mcm9tX3N0b2NrX2FjdGlvbihX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9HT19CQUNLKSk7Ci0gICAgICAgIHdlYmtpdF9jb250
ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3
X2Zyb21fc3RvY2tfYWN0aW9uKFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0dPX0ZPUldBUkQp
KTsKLSAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBlbmQoY29udGV4dE1lbnUsIHdlYmtp
dF9jb250ZXh0X21lbnVfaXRlbV9uZXdfc2VwYXJhdG9yKCkpOwotICAgICAgICB3ZWJraXRfY29u
dGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25l
d19zZXBhcmF0b3IoKSk7Ci0gICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRl
eHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X2Zyb21fc3RvY2tfYWN0aW9uKFdF
QktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFkpKTsKLSAgICAgICAgd2Via2l0X2NvbnRleHRf
bWVudV9hcHBlbmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfc2Vw
YXJhdG9yKCkpOwotICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVu
dSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19mcm9tX3N0b2NrX2FjdGlvbihXRUJLSVRf
Q09OVEVYVF9NRU5VX0FDVElPTl9JTlNQRUNUX0VMRU1FTlQpKTsKLSAgICAgICAgd2Via2l0X2Nv
bnRleHRfbWVudV9hcHBlbmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9u
ZXdfc2VwYXJhdG9yKCkpOwotICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250
ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19zZXBhcmF0b3IoKSk7Ci0KLSAg
ICAgICAgcXVpdE1haW5Mb29wKCk7Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIEd0a01lbnUqIHNob3dDb250ZXh0TWVudUFuZEdldEd0a01lbnUoKQotICAgIHsKLSAgICAg
ICAgc2hvd0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmluaXNoZWQoKTsKLSAgICAgICAgcmV0dXJu
IGdldFBvcHVwTWVudSgpOwotICAgIH0KLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RDb250ZXh0TWVu
dVNtYXJ0U2VwYXJhdG9ycyhDb250ZXh0TWVudVNtYXJ0U2VwYXJhdG9yc1Rlc3QqIHRlc3QsIGdj
b25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVk
KCk7Ci0KLSAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHk+V2ViS2l0R1RLKyBDb250ZXh0
IG1lbnUgdGVzdHM8L2JvZHk+PC9odG1sPiIsICJmaWxlOi8vLyIpOwotICAgIHRlc3QtPndhaXRV
bnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgR3RrTWVudSogbWVudSA9IHRlc3QtPnNob3dDb250
ZXh0TWVudUFuZEdldEd0a01lbnUoKTsKLSAgICBnX2Fzc2VydChtZW51KTsKLQotICAgIC8vIExl
YWRpbmcgYW5kIHRyYWlsaW5nIHNlcGFyYXRvcnMgYXJlIG5vdCBhZGRlZCB0byB0aGUgY29udGV4
dCBtZW51LgotICAgIEdPd25QdHI8R0xpc3Q+IG1lbnVJdGVtcyhndGtfY29udGFpbmVyX2dldF9j
aGlsZHJlbihHVEtfQ09OVEFJTkVSKG1lbnUpKSk7Ci0gICAgZ19hc3NlcnRfY21wdWludChnX2xp
c3RfbGVuZ3RoKG1lbnVJdGVtcy5nZXQoKSksID09LCA2KTsKLSAgICBHdGtXaWRnZXQqIGl0ZW0g
PSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDApKTsKLSAgICBn
X2Fzc2VydCghR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9n
ZXRfdmlzaWJsZShpdGVtKSk7Ci0gICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRh
KG1lbnVJdGVtcy5nZXQoKSwgMSkpOwotICAgIGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01F
TlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKLSAgICBpdGVt
ID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCAyKSk7Ci0gICAg
Z19hc3NlcnQoR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9n
ZXRfdmlzaWJsZShpdGVtKSk7Ci0gICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRh
KG1lbnVJdGVtcy5nZXQoKSwgMykpOwotICAgIGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01F
TlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKLSAgICBpdGVt
ID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCA0KSk7Ci0gICAg
Z19hc3NlcnQoR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9n
ZXRfdmlzaWJsZShpdGVtKSk7Ci0gICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRh
KG1lbnVJdGVtcy5nZXQoKSwgNSkpOwotICAgIGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01F
TlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKLQotICAgIC8v
IEhpZGluZyBhIG1lbnUgaXRlbSBiZXR3ZWVuIHR3byBzZXBhcmF0b3JzIGhpZGVzIHRoZSBmb2xs
b3dpbmcgc2VwYXJhdG9yLgotICAgIEd0a0FjdGlvbiogYWN0aW9uID0gZ3RrX2FjdGl2YXRhYmxl
X2dldF9yZWxhdGVkX2FjdGlvbihHVEtfQUNUSVZBVEFCTEUoZ19saXN0X250aF9kYXRhKG1lbnVJ
dGVtcy5nZXQoKSwgMykpKTsKLSAgICBndGtfYWN0aW9uX3NldF92aXNpYmxlKGFjdGlvbiwgRkFM
U0UpOwotICAgIG1lbnVJdGVtcy5zZXQoZ3RrX2NvbnRhaW5lcl9nZXRfY2hpbGRyZW4oR1RLX0NP
TlRBSU5FUihtZW51KSkpOwotICAgIGdfYXNzZXJ0X2NtcHVpbnQoZ19saXN0X2xlbmd0aChtZW51
SXRlbXMuZ2V0KCkpLCA9PSwgNik7Ci0gICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9k
YXRhKG1lbnVJdGVtcy5nZXQoKSwgMCkpOwotICAgIGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9S
X01FTlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKLSAgICBp
dGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCAxKSk7Ci0g
ICAgZ19hc3NlcnQoIUdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRn
ZXRfZ2V0X3Zpc2libGUoaXRlbSkpOwotICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhf
ZGF0YShtZW51SXRlbXMuZ2V0KCksIDIpKTsKLSAgICBnX2Fzc2VydChHVEtfSVNfU0VQQVJBVE9S
X01FTlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKLSAgICBp
dGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCAzKSk7Ci0g
ICAgZ19hc3NlcnQoIUdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmICFndGtfd2lk
Z2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKLSAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRo
X2RhdGEobWVudUl0ZW1zLmdldCgpLCA0KSk7Ci0gICAgZ19hc3NlcnQoR1RLX0lTX1NFUEFSQVRP
Ul9NRU5VX0lURU0oaXRlbSkgJiYgIWd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOwotICAg
IGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDUpKTsK
LSAgICBnX2Fzc2VydCghR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dp
ZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7Ci0gICAgZ3RrX2FjdGlvbl9zZXRfdmlzaWJsZShhY3Rp
b24sIFRSVUUpOwotCi0gICAgLy8gU2hvd2luZyBhbiBhY3Rpb24gYmV0d2VlbiB0d28gc2VwYXJh
dG9ycyBzaG93cyB0aGUgaGlkZGVuIHNlcGFyYXRvci4KLSAgICBpdGVtID0gR1RLX1dJREdFVChn
X2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCAwKSk7Ci0gICAgZ19hc3NlcnQoIUdUS19J
U19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRl
bSkpOwotICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0
KCksIDEpKTsKLSAgICBnX2Fzc2VydCghR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkg
JiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7Ci0gICAgaXRlbSA9IEdUS19XSURHRVQo
Z19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgMikpOwotICAgIGdfYXNzZXJ0KEdUS19J
U19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRl
bSkpOwotICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0
KCksIDMpKTsKLSAgICBnX2Fzc2VydCghR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkg
JiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7Ci0gICAgaXRlbSA9IEdUS19XSURHRVQo
Z19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgNCkpOwotICAgIGdfYXNzZXJ0KEdUS19J
U19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRl
bSkpOwotICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0
KCksIDUpKTsKLSAgICBnX2Fzc2VydCghR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkg
JiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7Ci0KLSAgICAvLyBUcmFpbGluZyBzZXBh
cmF0b3JzIGFyZSBoaWRkZW4gdG9vLgotICAgIGFjdGlvbiA9IGd0a19hY3RpdmF0YWJsZV9nZXRf
cmVsYXRlZF9hY3Rpb24oR1RLX0FDVElWQVRBQkxFKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMu
Z2V0KCksIDUpKSk7Ci0gICAgZ3RrX2FjdGlvbl9zZXRfdmlzaWJsZShhY3Rpb24sIEZBTFNFKTsK
LSAgICBtZW51SXRlbXMuc2V0KGd0a19jb250YWluZXJfZ2V0X2NoaWxkcmVuKEdUS19DT05UQUlO
RVIobWVudSkpKTsKLSAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0
ZW1zLmdldCgpLCAwKSk7Ci0gICAgZ19hc3NlcnQoIUdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVN
KGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOwotICAgIGl0ZW0gPSBHVEtf
V0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDEpKTsKLSAgICBnX2Fzc2Vy
dCghR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlz
aWJsZShpdGVtKSk7Ci0gICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJ
dGVtcy5nZXQoKSwgMikpOwotICAgIGdfYXNzZXJ0KEdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVN
KGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOwotICAgIGl0ZW0gPSBHVEtf
V0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDMpKTsKLSAgICBnX2Fzc2Vy
dCghR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlz
aWJsZShpdGVtKSk7Ci0gICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJ
dGVtcy5nZXQoKSwgNCkpOwotICAgIGdfYXNzZXJ0KEdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVN
KGl0ZW0pICYmICFndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKLSAgICBpdGVtID0gR1RL
X1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCA1KSk7Ci0gICAgZ19hc3Nl
cnQoIUdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmICFndGtfd2lkZ2V0X2dldF92
aXNpYmxlKGl0ZW0pKTsKLX0KLQotdm9pZCBiZWZvcmVBbGwoKQotewotICAgIENvbnRleHRNZW51
RGVmYXVsdFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJkZWZhdWx0LW1lbnUiLCB0ZXN0Q29u
dGV4dE1lbnVEZWZhdWx0TWVudSk7Ci0gICAgQ29udGV4dE1lbnVDdXN0b21UZXN0OjphZGQoIldl
YktpdFdlYlZpZXciLCAicG9wdWxhdGUtbWVudSIsIHRlc3RDb250ZXh0TWVudVBvcHVsYXRlTWVu
dSk7Ci0gICAgQ29udGV4dE1lbnVDdXN0b21GdWxsVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3Iiwg
ImN1c3RvbS1tZW51IiwgdGVzdENvbnRleHRNZW51Q3VzdG9tTWVudSk7Ci0gICAgQ29udGV4dE1l
bnVEaXNhYmxlZFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJkaXNhYmxlLW1lbnUiLCB0ZXN0
Q29udGV4dE1lbnVEaXNhYmxlTWVudSk7Ci0gICAgQ29udGV4dE1lbnVTdWJtZW51VGVzdDo6YWRk
KCJXZWJLaXRXZWJWaWV3IiwgInN1Ym1lbnUiLCB0ZXN0Q29udGV4dE1lbnVTdWJNZW51KTsKLSAg
ICBDb250ZXh0TWVudURpc21pc3NlZFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJtZW51LWRp
c21pc3NlZCIsIHRlc3RDb250ZXh0TWVudURpc21pc3NlZCk7Ci0gICAgQ29udGV4dE1lbnVTbWFy
dFNlcGFyYXRvcnNUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAic21hcnQtc2VwYXJhdG9ycyIs
IHRlc3RDb250ZXh0TWVudVNtYXJ0U2VwYXJhdG9ycyk7Ci19Ci0KLXZvaWQgYWZ0ZXJBbGwoKQot
ewotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
VGVzdENvb2tpZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvVGVzdENvb2tpZU1hbmFnZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBhZGM2YjViLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL1Rlc3RDb29raWVNYW5hZ2VyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMzMSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLQotI2luY2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKLSNpbmNsdWRlICJXZWJWaWV3
VGVzdC5oIgotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0KLXN0YXRpYyBXZWJLaXRUZXN0U2Vy
dmVyKiBrU2VydmVyOwotc3RhdGljIGNoYXIqIGtUZW1wRGlyZWN0b3J5OwotCi1zdGF0aWMgY29u
c3QgY2hhcioga0ZpcnN0UGFydHlEb21haW4gPSAiMTI3LjAuMC4xIjsKLXN0YXRpYyBjb25zdCBj
aGFyKiBrVGhpcmRQYXJ0eURvbWFpbiA9ICJsb2NhbGhvc3QiOwotc3RhdGljIGNvbnN0IGNoYXIq
IGtJbmRleEh0bWxGb3JtYXQgPQotICAgICI8aHRtbD48Ym9keT4iCi0gICAgIiA8cD5XZWJLaXRH
VEsrIENvb2tpZSBNYW5hZ2VyIHRlc3Q8L3A+IgotICAgICIgPGltZyBzcmM9J2h0dHA6Ly9sb2Nh
bGhvc3Q6JXUvaW1hZ2UucG5nJyB3aWR0aD01IGhlaWdodD01PjwvaW1nPiIKLSAgICAiPC9ib2R5
PjwvaHRtbD4iOwotCi1jbGFzcyBDb29raWVNYW5hZ2VyVGVzdDogcHVibGljIFdlYlZpZXdUZXN0
IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKENvb2tpZU1hbmFnZXJUZXN0
KTsKLQotICAgIHN0YXRpYyB2b2lkIGNvb2tpZXNDaGFuZ2VkQ2FsbGJhY2soV2ViS2l0Q29va2ll
TWFuYWdlciosIENvb2tpZU1hbmFnZXJUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+
bV9jb29raWVzQ2hhbmdlZCA9IHRydWU7Ci0gICAgICAgIGlmICh0ZXN0LT5tX2ZpbmlzaExvb3BX
aGVuQ29va2llc0NoYW5nZSkKLSAgICAgICAgICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9t
YWluTG9vcCk7Ci0gICAgfQotCi0gICAgQ29va2llTWFuYWdlclRlc3QoKQotICAgICAgICA6IFdl
YlZpZXdUZXN0KCkKLSAgICAgICAgLCBtX2Nvb2tpZU1hbmFnZXIod2Via2l0X3dlYl9jb250ZXh0
X2dldF9jb29raWVfbWFuYWdlcih3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQobV93ZWJWaWV3
KSkpCi0gICAgICAgICwgbV9hY2NlcHRQb2xpY3koV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBU
X05PX1RISVJEX1BBUlRZKQotICAgICAgICAsIG1fZG9tYWlucygwKQotICAgICAgICAsIG1fY29v
a2llc0NoYW5nZWQoZmFsc2UpCi0gICAgICAgICwgbV9maW5pc2hMb29wV2hlbkNvb2tpZXNDaGFu
Z2UoZmFsc2UpCi0gICAgewotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fY29va2llTWFuYWdl
ciwgImNoYW5nZWQiLCBHX0NBTExCQUNLKGNvb2tpZXNDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsK
LSAgICB9Ci0KLSAgICB+Q29va2llTWFuYWdlclRlc3QoKQotICAgIHsKLSAgICAgICAgZ19zdHJm
cmVldihtX2RvbWFpbnMpOwotICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21h
dGNoZWQobV9jb29raWVNYW5hZ2VyLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0
aGlzKTsKLSAgICAgICAgaWYgKG1fY29va2llc1RleHRGaWxlKQotICAgICAgICAgICAgZ191bmxp
bmsobV9jb29raWVzVGV4dEZpbGUuZ2V0KCkpOwotICAgICAgICBpZiAobV9jb29raWVzU1FMaXRl
RmlsZSkKLSAgICAgICAgICAgIGdfdW5saW5rKG1fY29va2llc1NRTGl0ZUZpbGUuZ2V0KCkpOwot
ICAgIH0KLQotICAgIHZvaWQgc2V0UGVyc2lzdGVudFN0b3JhZ2UoV2ViS2l0Q29va2llUGVyc2lz
dGVudFN0b3JhZ2Ugc3RvcmFnZSkKLSAgICB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGZpbGVuYW1l
ID0gMDsKLSAgICAgICAgc3dpdGNoIChzdG9yYWdlKSB7Ci0gICAgICAgIGNhc2UgV0VCS0lUX0NP
T0tJRV9QRVJTSVNURU5UX1NUT1JBR0VfVEVYVDoKLSAgICAgICAgICAgIGlmICghbV9jb29raWVz
VGV4dEZpbGUpCi0gICAgICAgICAgICAgICAgbV9jb29raWVzVGV4dEZpbGUuc2V0KGdfYnVpbGRf
ZmlsZW5hbWUoa1RlbXBEaXJlY3RvcnksICJjb29raWVzLnR4dCIsIE5VTEwpKTsKLSAgICAgICAg
ICAgIGZpbGVuYW1lID0gbV9jb29raWVzVGV4dEZpbGUuZ2V0KCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBXRUJLSVRfQ09PS0lFX1BFUlNJU1RFTlRfU1RPUkFHRV9TUUxJVEU6
Ci0gICAgICAgICAgICBpZiAoIW1fY29va2llc1NRTGl0ZUZpbGUpCi0gICAgICAgICAgICAgICAg
bV9jb29raWVzU1FMaXRlRmlsZS5zZXQoZ19idWlsZF9maWxlbmFtZShrVGVtcERpcmVjdG9yeSwg
ImNvb2tpZXMuZGIiLCBOVUxMKSk7Ci0gICAgICAgICAgICBmaWxlbmFtZSA9IG1fY29va2llc1NR
TGl0ZUZpbGUuZ2V0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0gICAgICAgIH0KLSAgICAgICAgd2Vi
a2l0X2Nvb2tpZV9tYW5hZ2VyX3NldF9wZXJzaXN0ZW50X3N0b3JhZ2UobV9jb29raWVNYW5hZ2Vy
LCBmaWxlbmFtZSwgc3RvcmFnZSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgZ2V0QWNjZXB0
UG9saWN5UmVhZHlDYWxsYmFjayhHT2JqZWN0KiBvYmplY3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0
LCBncG9pbnRlciB1c2VyRGF0YSkKLSAgICB7Ci0gICAgICAgIEdPd25QdHI8R0Vycm9yPiBlcnJv
cjsKLSAgICAgICAgV2ViS2l0Q29va2llQWNjZXB0UG9saWN5IHBvbGljeSA9IHdlYmtpdF9jb29r
aWVfbWFuYWdlcl9nZXRfYWNjZXB0X3BvbGljeV9maW5pc2goV0VCS0lUX0NPT0tJRV9NQU5BR0VS
KG9iamVjdCksIHJlc3VsdCwgJmVycm9yLm91dFB0cigpKTsKLSAgICAgICAgZ19hc3NlcnQoIWVy
cm9yLmdldCgpKTsKLQotICAgICAgICBDb29raWVNYW5hZ2VyVGVzdCogdGVzdCA9IHN0YXRpY19j
YXN0PENvb2tpZU1hbmFnZXJUZXN0Kj4odXNlckRhdGEpOwotICAgICAgICB0ZXN0LT5tX2FjY2Vw
dFBvbGljeSA9IHBvbGljeTsKLSAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5M
b29wKTsKLSAgICB9Ci0KLSAgICBXZWJLaXRDb29raWVBY2NlcHRQb2xpY3kgZ2V0QWNjZXB0UG9s
aWN5KCkKLSAgICB7Ci0gICAgICAgIG1fYWNjZXB0UG9saWN5ID0gV0VCS0lUX0NPT0tJRV9QT0xJ
Q1lfQUNDRVBUX05PX1RISVJEX1BBUlRZOwotICAgICAgICB3ZWJraXRfY29va2llX21hbmFnZXJf
Z2V0X2FjY2VwdF9wb2xpY3kobV9jb29raWVNYW5hZ2VyLCAwLCBnZXRBY2NlcHRQb2xpY3lSZWFk
eUNhbGxiYWNrLCB0aGlzKTsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwot
Ci0gICAgICAgIHJldHVybiBtX2FjY2VwdFBvbGljeTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldEFj
Y2VwdFBvbGljeShXZWJLaXRDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KQotICAgIHsKLSAgICAg
ICAgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX3NldF9hY2NlcHRfcG9saWN5KG1fY29va2llTWFuYWdl
ciwgcG9saWN5KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBnZXREb21haW5zUmVhZHlDYWxs
YmFjayhHT2JqZWN0KiBvYmplY3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2Vy
RGF0YSkKLSAgICB7Ci0gICAgICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKLSAgICAgICAgY2hh
cioqIGRvbWFpbnMgPSB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2RvbWFpbnNfd2l0aF9jb29r
aWVzX2ZpbmlzaChXRUJLSVRfQ09PS0lFX01BTkFHRVIob2JqZWN0KSwgcmVzdWx0LCAmZXJyb3Iu
b3V0UHRyKCkpOwotICAgICAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOwotCi0gICAgICAgIENv
b2tpZU1hbmFnZXJUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8Q29va2llTWFuYWdlclRlc3QqPih1
c2VyRGF0YSk7Ci0gICAgICAgIHRlc3QtPm1fZG9tYWlucyA9IGRvbWFpbnM7Ci0gICAgICAgIGdf
bWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgY2hhcioqIGdl
dERvbWFpbnMoKQotICAgIHsKLSAgICAgICAgZ19zdHJmcmVldihtX2RvbWFpbnMpOwotICAgICAg
ICBtX2RvbWFpbnMgPSAwOwotICAgICAgICB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2RvbWFp
bnNfd2l0aF9jb29raWVzKG1fY29va2llTWFuYWdlciwgMCwgZ2V0RG9tYWluc1JlYWR5Q2FsbGJh
Y2ssIHRoaXMpOwotICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Ci0KLSAgICAg
ICAgcmV0dXJuIG1fZG9tYWluczsKLSAgICB9Ci0KLSAgICBib29sIGhhc0RvbWFpbihjb25zdCBj
aGFyKiBkb21haW4pCi0gICAgewotICAgICAgICBpZiAoIW1fZG9tYWlucykKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgbV9kb21haW5zW2ld
OyArK2kpCi0gICAgICAgICAgICBpZiAoZ19zdHJfZXF1YWwobV9kb21haW5zW2ldLCBkb21haW4p
KQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgdm9pZCBkZWxldGVDb29raWVzRm9yRG9tYWluKGNvbnN0IGNoYXIqIGRvbWFp
bikKLSAgICB7Ci0gICAgICAgIHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29va2llc19m
b3JfZG9tYWluKG1fY29va2llTWFuYWdlciwgZG9tYWluKTsKLSAgICB9Ci0KLSAgICB2b2lkIGRl
bGV0ZUFsbENvb2tpZXMoKQotICAgIHsKLSAgICAgICAgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2Rl
bGV0ZV9hbGxfY29va2llcyhtX2Nvb2tpZU1hbmFnZXIpOwotICAgIH0KLQotICAgIHZvaWQgd2Fp
dFVudGlsQ29va2llc0NoYW5nZWQoKQotICAgIHsKLSAgICAgICAgbV9jb29raWVzQ2hhbmdlZCA9
IGZhbHNlOwotICAgICAgICBtX2ZpbmlzaExvb3BXaGVuQ29va2llc0NoYW5nZSA9IHRydWU7Ci0g
ICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAgICAgICAgbV9maW5pc2hMb29w
V2hlbkNvb2tpZXNDaGFuZ2UgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBXZWJLaXRDb29raWVNYW5h
Z2VyKiBtX2Nvb2tpZU1hbmFnZXI7Ci0gICAgV2ViS2l0Q29va2llQWNjZXB0UG9saWN5IG1fYWNj
ZXB0UG9saWN5OwotICAgIGNoYXIqKiBtX2RvbWFpbnM7Ci0gICAgYm9vbCBtX2Nvb2tpZXNDaGFu
Z2VkOwotICAgIGJvb2wgbV9maW5pc2hMb29wV2hlbkNvb2tpZXNDaGFuZ2U7Ci0gICAgR093blB0
cjxjaGFyPiBtX2Nvb2tpZXNUZXh0RmlsZTsKLSAgICBHT3duUHRyPGNoYXI+IG1fY29va2llc1NR
TGl0ZUZpbGU7Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0Q29va2llTWFuYWdlckFjY2VwdFBvbGlj
eShDb29raWVNYW5hZ2VyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICAvLyBEZWZh
dWx0IHBvbGljeSBpcyBOT19USElSRF9QQVJUWS4KLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+
Z2V0QWNjZXB0UG9saWN5KCksID09LCBXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfTk9fVEhJ
UkRfUEFSVFkpOwotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2lu
ZGV4Lmh0bWwiKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwot
ICAgIGNoYXIqKiBkb21haW5zID0gdGVzdC0+Z2V0RG9tYWlucygpOwotICAgIGdfYXNzZXJ0KGRv
bWFpbnMpOwotICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKGRvbWFpbnMpLCA9PSwg
MSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKGRvbWFpbnNbMF0sID09LCBrRmlyc3RQYXJ0eURvbWFp
bik7Ci0gICAgdGVzdC0+ZGVsZXRlQWxsQ29va2llcygpOwotCi0gICAgdGVzdC0+c2V0QWNjZXB0
UG9saWN5KFdFQktJVF9DT09LSUVfUE9MSUNZX0FDQ0VQVF9BTFdBWVMpOwotICAgIGdfYXNzZXJ0
X2NtcGludCh0ZXN0LT5nZXRBY2NlcHRQb2xpY3koKSwgPT0sIFdFQktJVF9DT09LSUVfUE9MSUNZ
X0FDQ0VQVF9BTFdBWVMpOwotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0
aCgiL2luZGV4Lmh0bWwiKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hl
ZCgpOwotICAgIGRvbWFpbnMgPSB0ZXN0LT5nZXREb21haW5zKCk7Ci0gICAgZ19hc3NlcnQoZG9t
YWlucyk7Ci0gICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgoZG9tYWlucyksID09LCAy
KTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5oYXNEb21haW4oa0ZpcnN0UGFydHlEb21haW4pKTsKLSAg
ICBnX2Fzc2VydCh0ZXN0LT5oYXNEb21haW4oa1RoaXJkUGFydHlEb21haW4pKTsKLSAgICB0ZXN0
LT5kZWxldGVBbGxDb29raWVzKCk7Ci0KLSAgICB0ZXN0LT5zZXRBY2NlcHRQb2xpY3koV0VCS0lU
X0NPT0tJRV9QT0xJQ1lfQUNDRVBUX05FVkVSKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+
Z2V0QWNjZXB0UG9saWN5KCksID09LCBXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfTkVWRVIp
OwotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2luZGV4Lmh0bWwi
KS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGRvbWFp
bnMgPSB0ZXN0LT5nZXREb21haW5zKCk7Ci0gICAgZ19hc3NlcnQoZG9tYWlucyk7Ci0gICAgZ19h
c3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgoZG9tYWlucyksID09LCAwKTsKLX0KLQotc3RhdGlj
IHZvaWQgdGVzdENvb2tpZU1hbmFnZXJEZWxldGVDb29raWVzKENvb2tpZU1hbmFnZXJUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPnNldEFjY2VwdFBvbGljeShXRUJLSVRf
Q09PS0lFX1BPTElDWV9BQ0NFUFRfQUxXQVlTKTsKLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXIt
PmdldFVSSUZvclBhdGgoIi9pbmRleC5odG1sIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50
aWxMb2FkRmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0
LT5nZXREb21haW5zKCkpLCA9PSwgMik7Ci0KLSAgICAvLyBEZWxldGUgZmlyc3QgcGFydHkgY29v
a2llcy4KLSAgICB0ZXN0LT5kZWxldGVDb29raWVzRm9yRG9tYWluKGtGaXJzdFBhcnR5RG9tYWlu
KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0LT5nZXREb21haW5zKCkp
LCA9PSwgMSk7Ci0KLSAgICAvLyBEZWxldGUgdGhpcmQgcGFydHkgY29va2llcy4KLSAgICB0ZXN0
LT5kZWxldGVDb29raWVzRm9yRG9tYWluKGtUaGlyZFBhcnR5RG9tYWluKTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0LT5nZXREb21haW5zKCkpLCA9PSwgMCk7Ci0KLSAg
ICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbmRleC5odG1sIikuZGF0
YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydF9j
bXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0LT5nZXREb21haW5zKCkpLCA9PSwgMik7Ci0KLSAgICAv
LyBEZWxldGUgYWxsIGNvb2tpZXMuCi0gICAgdGVzdC0+ZGVsZXRlQWxsQ29va2llcygpOwotICAg
IGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKHRlc3QtPmdldERvbWFpbnMoKSksID09LCAw
KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdENvb2tpZU1hbmFnZXJDb29raWVzQ2hhbmdlZChDb29r
aWVNYW5hZ2VyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBnX2Fzc2VydCghdGVz
dC0+bV9jb29raWVzQ2hhbmdlZCk7Ci0gICAgdGVzdC0+c2V0QWNjZXB0UG9saWN5KFdFQktJVF9D
T09LSUVfUE9MSUNZX0FDQ0VQVF9BTFdBWVMpOwotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+
Z2V0VVJJRm9yUGF0aCgiL2luZGV4Lmh0bWwiKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRp
bExvYWRGaW5pc2hlZCgpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fY29va2llc0NoYW5nZWQpOwot
Ci0gICAgdGVzdC0+ZGVsZXRlQ29va2llc0ZvckRvbWFpbihrRmlyc3RQYXJ0eURvbWFpbik7Ci0g
ICAgdGVzdC0+d2FpdFVudGlsQ29va2llc0NoYW5nZWQoKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5t
X2Nvb2tpZXNDaGFuZ2VkKTsKLQotICAgIHRlc3QtPmRlbGV0ZUFsbENvb2tpZXMoKTsKLSAgICB0
ZXN0LT53YWl0VW50aWxDb29raWVzQ2hhbmdlZCgpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fY29v
a2llc0NoYW5nZWQpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0Q29va2llTWFuYWdlclBlcnNpc3Rl
bnRTdG9yYWdlKENvb2tpZU1hbmFnZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAg
IHRlc3QtPnNldEFjY2VwdFBvbGljeShXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfQUxXQVlT
KTsKLQotICAgIC8vIFRleHQgc3RvcmFnZSB1c2luZyBhIG5ldyBmaWxlLgotICAgIHRlc3QtPnNl
dFBlcnNpc3RlbnRTdG9yYWdlKFdFQktJVF9DT09LSUVfUEVSU0lTVEVOVF9TVE9SQUdFX1RFWFQp
OwotICAgIGNoYXIqKiBkb21haW5zID0gdGVzdC0+Z2V0RG9tYWlucygpOwotICAgIGdfYXNzZXJ0
KGRvbWFpbnMpOwotICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKGRvbWFpbnMpLCA9
PSwgMCk7Ci0KLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbmRl
eC5odG1sIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAg
ICBnX2Fzc2VydCh0ZXN0LT5tX2Nvb2tpZXNDaGFuZ2VkKTsKLSAgICBkb21haW5zID0gdGVzdC0+
Z2V0RG9tYWlucygpOwotICAgIGdfYXNzZXJ0KGRvbWFpbnMpOwotICAgIGdfYXNzZXJ0X2NtcGlu
dChnX3N0cnZfbGVuZ3RoKGRvbWFpbnMpLCA9PSwgMik7Ci0KLQotICAgIC8vIFNRTGl0ZSBzdG9y
YWdlIHVzaW5nIGEgbmV3IGZpbGUuCi0gICAgdGVzdC0+c2V0UGVyc2lzdGVudFN0b3JhZ2UoV0VC
S0lUX0NPT0tJRV9QRVJTSVNURU5UX1NUT1JBR0VfU1FMSVRFKTsKLSAgICBkb21haW5zID0gdGVz
dC0+Z2V0RG9tYWlucygpOwotICAgIGdfYXNzZXJ0KGRvbWFpbnMpOwotICAgIGdfYXNzZXJ0X2Nt
cGludChnX3N0cnZfbGVuZ3RoKGRvbWFpbnMpLCA9PSwgMCk7Ci0KLSAgICB0ZXN0LT5sb2FkVVJJ
KGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbmRleC5odG1sIikuZGF0YSgpKTsKLSAgICB0ZXN0
LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX2Nvb2tpZXND
aGFuZ2VkKTsKLSAgICBkb21haW5zID0gdGVzdC0+Z2V0RG9tYWlucygpOwotICAgIGdfYXNzZXJ0
KGRvbWFpbnMpOwotICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKGRvbWFpbnMpLCA9
PSwgMik7Ci0KLSAgICAvLyBUZXh0IHN0b3JhZ2UgdXNpbmcgYW4gZXhpc3RpbmcgZmlsZS4KLSAg
ICB0ZXN0LT5zZXRQZXJzaXN0ZW50U3RvcmFnZShXRUJLSVRfQ09PS0lFX1BFUlNJU1RFTlRfU1RP
UkFHRV9URVhUKTsKLSAgICBkb21haW5zID0gdGVzdC0+Z2V0RG9tYWlucygpOwotICAgIGdfYXNz
ZXJ0KGRvbWFpbnMpOwotICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKGRvbWFpbnMp
LCA9PSwgMik7Ci0gICAgdGVzdC0+ZGVsZXRlQWxsQ29va2llcygpOwotICAgIGdfYXNzZXJ0X2Nt
cGludChnX3N0cnZfbGVuZ3RoKHRlc3QtPmdldERvbWFpbnMoKSksID09LCAwKTsKLQotICAgIC8v
IFNRTGl0ZSBzdG9yYWdlIHdpdGggYW4gZXhpc3RpbmcgZmlsZS4KLSAgICB0ZXN0LT5zZXRQZXJz
aXN0ZW50U3RvcmFnZShXRUJLSVRfQ09PS0lFX1BFUlNJU1RFTlRfU1RPUkFHRV9TUUxJVEUpOwot
ICAgIGRvbWFpbnMgPSB0ZXN0LT5nZXREb21haW5zKCk7Ci0gICAgZ19hc3NlcnQoZG9tYWlucyk7
Ci0gICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgoZG9tYWlucyksID09LCAyKTsKLSAg
ICB0ZXN0LT5kZWxldGVBbGxDb29raWVzKCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9s
ZW5ndGgodGVzdC0+Z2V0RG9tYWlucygpKSwgPT0sIDApOwotfQotCi1zdGF0aWMgdm9pZCBzZXJ2
ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBjb25z
dCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiwgU291cENsaWVudENvbnRleHQqLCBncG9pbnRlcikK
LXsKLSAgICBpZiAobWVzc2FnZS0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgewotICAgICAg
ICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVN
RU5URUQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc291cF9tZXNzYWdlX3NldF9z
dGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOwotICAgIGlmIChnX3N0cl9lcXVhbChwYXRo
LCAiL2luZGV4Lmh0bWwiKSkgewotICAgICAgICBjaGFyKiBpbmRleEh0bWwgPSBnX3N0cmR1cF9w
cmludGYoa0luZGV4SHRtbEZvcm1hdCwgc291cF9zZXJ2ZXJfZ2V0X3BvcnQoc2VydmVyKSk7Ci0g
ICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX3JlcGxhY2UobWVzc2FnZS0+cmVzcG9uc2VfaGVh
ZGVycywgIlNldC1Db29raWUiLCAiZm9vPWJhcjsgTWF4LUFnZT02MCIpOwotICAgICAgICBzb3Vw
X21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllf
VEFLRSwgaW5kZXhIdG1sLCBzdHJsZW4oaW5kZXhIdG1sKSk7Ci0gICAgfSBlbHNlIGlmIChnX3N0
cl9lcXVhbChwYXRoLCAiL2ltYWdlLnBuZyIpKQotICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVy
c19yZXBsYWNlKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJTZXQtQ29va2llIiwgImJhej1x
dXg7IE1heC1BZ2U9NjAiKTsKLSAgICBlbHNlCi0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3Rh
dHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7Ci0gICAgc291cF9tZXNzYWdlX2Jv
ZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7Ci19Ci0KLXZvaWQgYmVmb3JlQWxs
KCkKLXsKLSAgICBrU2VydmVyID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIoKTsKLSAgICBrU2VydmVy
LT5ydW4oc2VydmVyQ2FsbGJhY2spOwotCi0gICAga1RlbXBEaXJlY3RvcnkgPSBnX2Rpcl9tYWtl
X3RtcCgiV2ViS2l0MlRlc3RzLVhYWFhYWCIsIDApOwotICAgIGdfYXNzZXJ0KGtUZW1wRGlyZWN0
b3J5KTsKLQotICAgIENvb2tpZU1hbmFnZXJUZXN0OjphZGQoIldlYktpdENvb2tpZU1hbmFnZXIi
LCAiYWNjZXB0LXBvbGljeSIsIHRlc3RDb29raWVNYW5hZ2VyQWNjZXB0UG9saWN5KTsKLSAgICBD
b29raWVNYW5hZ2VyVGVzdDo6YWRkKCJXZWJLaXRDb29raWVNYW5hZ2VyIiwgImRlbGV0ZS1jb29r
aWVzIiwgdGVzdENvb2tpZU1hbmFnZXJEZWxldGVDb29raWVzKTsKLSAgICBDb29raWVNYW5hZ2Vy
VGVzdDo6YWRkKCJXZWJLaXRDb29raWVNYW5hZ2VyIiwgImNvb2tpZXMtY2hhbmdlZCIsIHRlc3RD
b29raWVNYW5hZ2VyQ29va2llc0NoYW5nZWQpOwotICAgIENvb2tpZU1hbmFnZXJUZXN0OjphZGQo
IldlYktpdENvb2tpZU1hbmFnZXIiLCAicGVyc2lzdGVudC1zdG9yYWdlIiwgdGVzdENvb2tpZU1h
bmFnZXJQZXJzaXN0ZW50U3RvcmFnZSk7Ci19Ci0KLXZvaWQgYWZ0ZXJBbGwoKQotewotICAgIGRl
bGV0ZSBrU2VydmVyOwotICAgIGdfcm1kaXIoa1RlbXBEaXJlY3RvcnkpOwotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdERPTU5vZGUuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdERPTU5vZGUuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDMyMDc3Li4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RET01Ob2RlLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgSWdh
bGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiwxIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIldlYlByb2Nlc3NUZXN0
UnVubmVyLmgiCi0jaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKLSNpbmNsdWRlIDxndGsvZ3RrLmg+
Ci0jaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+Ci0KLXN0YXRpYyBXZWJQcm9jZXNzVGVzdFJ1
bm5lciogdGVzdFJ1bm5lcjsKLQotc3RhdGljIHZvaWQgdGVzdFdlYktpdERPTU5vZGVIaWVyYXJj
aHlOYXZpZ2F0aW9uKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHN0
YXRpYyBjb25zdCBjaGFyKiB0ZXN0SFRNTCA9ICI8aHRtbD48aGVhZD48dGl0bGU+VGhpcyBpcyB0
aGUgdGl0bGU8L3RpdGxlPjwvaGVhZD48Ym9keT48cD4xPC9wPjxwPjI8L3A+PHA+MzwvcD48L2Jv
ZHk+PC9odG1sPiI7Ci0gICAgdGVzdC0+bG9hZEh0bWwodGVzdEhUTUwsIDApOwotICAgIHRlc3Qt
PndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgR1ZhcmlhbnRCdWlsZGVyIGJ1aWxkZXI7
Ci0gICAgZ192YXJpYW50X2J1aWxkZXJfaW5pdCgmYnVpbGRlciwgR19WQVJJQU5UX1RZUEVfVkFS
RElDVCk7Ci0gICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKCZidWlsZGVyLCAie3N2fSIsICJwYWdl
SUQiLCBnX3ZhcmlhbnRfbmV3X3VpbnQ2NCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3BhZ2VfaWQodGVz
dC0+bV93ZWJWaWV3KSkpOwotICAgIGdfYXNzZXJ0KHRlc3RSdW5uZXItPnJ1blRlc3QoIldlYktp
dERPTU5vZGUiLCAiaGllcmFyY2h5LW5hdmlnYXRpb24iLCBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQo
JmJ1aWxkZXIpKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJLaXRET01Ob2RlSW5zZXJ0aW9u
KFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHN0YXRpYyBjb25zdCBj
aGFyKiB0ZXN0SFRNTCA9ICI8aHRtbD48Ym9keT48L2JvZHk+PC9odG1sPiI7Ci0gICAgdGVzdC0+
bG9hZEh0bWwodGVzdEhUTUwsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgp
OwotCi0gICAgR1ZhcmlhbnRCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgZ192YXJpYW50X2J1aWxkZXJf
aW5pdCgmYnVpbGRlciwgR19WQVJJQU5UX1RZUEVfVkFSRElDVCk7Ci0gICAgZ192YXJpYW50X2J1
aWxkZXJfYWRkKCZidWlsZGVyLCAie3N2fSIsICJwYWdlSUQiLCBnX3ZhcmlhbnRfbmV3X3VpbnQ2
NCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3BhZ2VfaWQodGVzdC0+bV93ZWJWaWV3KSkpOwotICAgIGdf
YXNzZXJ0KHRlc3RSdW5uZXItPnJ1blRlc3QoIldlYktpdERPTU5vZGUiLCAiaW5zZXJ0aW9uIiwg
Z192YXJpYW50X2J1aWxkZXJfZW5kKCZidWlsZGVyKSkpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0
V2ViS2l0RE9NTm9kZVRhZ05hbWVzKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQot
ewotICAgIHN0YXRpYyBjb25zdCBjaGFyKiB0ZXN0SFRNTCA9ICI8aHRtbD48aGVhZD48L2hlYWQ+
PGJvZHk+IgotICAgICAgICAiPHZpZGVvIGlkPSd2aWRlbycgcHJlbG9hZD0nbm9uZSc+IgotICAg
ICAgICAiICAgIDxzb3VyY2Ugc3JjPSdtb3ZpZS5vZ2cnIHR5cGU9J3ZpZGVvL29nZyc+IgotICAg
ICAgICAiICAgICAgICBZb3VyIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgdmlkZW8gdGFn
LiIKLSAgICAgICAgIjwvdmlkZW8+IgotICAgICAgICAiPHZpZGVvIGlkPSd2aWRlbzInIHByZWxv
YWQ9J25vbmUnPiIKLSAgICAgICAgIiAgICAgPHNvdXJjZSBzcmM9J21vdmllLm9nZycgdHlwZT0n
dmlkZW8vb2dnJz4iCi0gICAgICAgICIgICAgICAgIFlvdXIgYnJvd3NlciBkb2VzIG5vdCBzdXBw
b3J0IHRoZSB2aWRlbyB0YWcuIgotICAgICAgICAiPC92aWRlbz4iCi0gICAgICAgICI8aW5wdXQg
dHlwZT0naGlkZGVuJyBpZD0ndGVzdCcgbmFtZT0nZmluaXNoJyB2YWx1ZT0nZmFsc2UnPjwvYm9k
eT48L2h0bWw+IjsKLSAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0SFRNTCwgMCk7Ci0gICAgdGVzdC0+
d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBHVmFyaWFudEJ1aWxkZXIgYnVpbGRlcjsK
LSAgICBnX3ZhcmlhbnRfYnVpbGRlcl9pbml0KCZidWlsZGVyLCBHX1ZBUklBTlRfVFlQRV9WQVJE
SUNUKTsKLSAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoJmJ1aWxkZXIsICJ7c3Z9IiwgInBhZ2VJ
RCIsIGdfdmFyaWFudF9uZXdfdWludDY0KHdlYmtpdF93ZWJfdmlld19nZXRfcGFnZV9pZCh0ZXN0
LT5tX3dlYlZpZXcpKSk7Ci0gICAgZ19hc3NlcnQodGVzdFJ1bm5lci0+cnVuVGVzdCgiV2ViS2l0
RE9NTm9kZSIsICJ0YWctbmFtZXMiLCBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQoJmJ1aWxkZXIpKSk7
Ci19Ci0KLXZvaWQgYmVmb3JlQWxsKCkKLXsKLSAgICB0ZXN0UnVubmVyID0gbmV3IFdlYlByb2Nl
c3NUZXN0UnVubmVyKCk7Ci0gICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF93ZWJfZXh0ZW5zaW9u
c19kaXJlY3Rvcnkod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCksIFdFQktJVF9URVNU
X1dFQl9FWFRFTlNJT05TX0RJUik7Ci0KLSAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRET01O
b2RlIiwgImhpZXJhcmNoeS1uYXZpZ2F0aW9uIiwgdGVzdFdlYktpdERPTU5vZGVIaWVyYXJjaHlO
YXZpZ2F0aW9uKTsKLSAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRET01Ob2RlIiwgImluc2Vy
dGlvbiIsIHRlc3RXZWJLaXRET01Ob2RlSW5zZXJ0aW9uKTsKLSAgICBXZWJWaWV3VGVzdDo6YWRk
KCJXZWJLaXRET01Ob2RlIiwgInRhZy1uYW1lcyIsIHRlc3RXZWJLaXRET01Ob2RlVGFnTmFtZXMp
OwotfQotCi12b2lkIGFmdGVyQWxsKCkKLXsKLSAgICBkZWxldGUgdGVzdFJ1bm5lcjsKLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3REb3du
bG9hZHMuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdERv
d25sb2Fkcy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlMTU5OTAuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdERvd25s
b2Fkcy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJX
ZWJLaXRUZXN0U2VydmVyLmgiCi0jaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKLSNpbmNsdWRlIDxn
bGliL2dzdGRpby5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDxsaWJzb3VwL3Nv
dXAuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdDIuaD4K
LSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5o
PgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+Ci0KLXN0YXRpYyBjaGFyKiBrVGVtcERpcmVjdG9yeTsKLQotY2xhc3MgRG93bmxv
YWRUZXN0OiBwdWJsaWMgVGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVS
RShEb3dubG9hZFRlc3QpOwotCi0gICAgZW51bSBEb3dubG9hZEV2ZW50IHsKLSAgICAgICAgU3Rh
cnRlZCwKLSAgICAgICAgUmVjZWl2ZWRSZXNwb25zZSwKLSAgICAgICAgQ3JlYXRlZERlc3RpbmF0
aW9uLAotICAgICAgICBSZWNlaXZlZERhdGEsCi0gICAgICAgIEZhaWxlZCwKLSAgICAgICAgRmlu
aXNoZWQKLSAgICB9OwotCi0gICAgc3RhdGljIHZvaWQgcmVjZWl2ZWRSZXNwb25zZUNhbGxiYWNr
KFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgR1BhcmFtU3BlYyosIERvd25sb2FkVGVzdCogdGVz
dCkKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9kb3dubG9hZF9nZXRfcmVzcG9uc2Uo
ZG93bmxvYWQpKTsKLSAgICAgICAgdGVzdC0+cmVjZWl2ZWRSZXNwb25zZShkb3dubG9hZCk7Ci0g
ICAgfQotCi0gICAgc3RhdGljIGdib29sZWFuIGNyZWF0ZWREZXN0aW5hdGlvbkNhbGxiYWNrKFdl
YktpdERvd25sb2FkKiBkb3dubG9hZCwgY29uc3QgZ2NoYXIqIGRlc3RpbmF0aW9uLCBEb3dubG9h
ZFRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICBnX2Fzc2VydCh3ZWJraXRfZG93bmxvYWRfZ2V0
X2Rlc3RpbmF0aW9uKGRvd25sb2FkKSk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRf
ZG93bmxvYWRfZ2V0X2Rlc3RpbmF0aW9uKGRvd25sb2FkKSwgPT0sIGRlc3RpbmF0aW9uKTsKLSAg
ICAgICAgdGVzdC0+Y3JlYXRlZERlc3RpbmF0aW9uKGRvd25sb2FkLCBkZXN0aW5hdGlvbik7Ci0g
ICAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiByZWNlaXZl
ZERhdGFDYWxsYmFjayhXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGd1aW50NjQgZGF0YUxlbmd0
aCwgRG93bmxvYWRUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+cmVjZWl2ZWREYXRh
KGRvd25sb2FkLCBkYXRhTGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgfQotCi0g
ICAgc3RhdGljIGdib29sZWFuIGZpbmlzaGVkQ2FsbGJhY2soV2ViS2l0RG93bmxvYWQqIGRvd25s
b2FkLCBEb3dubG9hZFRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICB0ZXN0LT5maW5pc2hlZChk
b3dubG9hZCk7Ci0gICAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9v
bGVhbiBmYWlsZWRDYWxsYmFjayhXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIEdFcnJvciogZXJy
b3IsIERvd25sb2FkVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0KGVycm9yKTsK
LSAgICAgICAgdGVzdC0+ZmFpbGVkKGRvd25sb2FkLCBlcnJvcik7Ci0gICAgICAgIHJldHVybiBU
UlVFOwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiBkZWNpZGVEZXN0aW5hdGlvbkNhbGxi
YWNrKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgY29uc3QgZ2NoYXIqIHN1Z2dlc3RlZEZpbGVu
YW1lLCBEb3dubG9hZFRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICBnX2Fzc2VydChzdWdnZXN0
ZWRGaWxlbmFtZSk7Ci0gICAgICAgIHRlc3QtPmRlY2lkZURlc3RpbmF0aW9uKGRvd25sb2FkLCBz
dWdnZXN0ZWRGaWxlbmFtZSk7Ci0gICAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQotICAgIHN0
YXRpYyB2b2lkIGRvd25sb2FkU3RhcnRlZENhbGxiYWNrKFdlYktpdFdlYkNvbnRleHQqIGNvbnRl
eHQsIFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgRG93bmxvYWRUZXN0KiB0ZXN0KQotICAgIHsK
LSAgICAgICAgZ19hc3NlcnQod2Via2l0X2Rvd25sb2FkX2dldF9yZXF1ZXN0KGRvd25sb2FkKSk7
Ci0gICAgICAgIHRlc3QtPnN0YXJ0ZWQoZG93bmxvYWQpOwotICAgICAgICBnX3NpZ25hbF9jb25u
ZWN0KGRvd25sb2FkLCAibm90aWZ5OjpyZXNwb25zZSIsIEdfQ0FMTEJBQ0socmVjZWl2ZWRSZXNw
b25zZUNhbGxiYWNrKSwgdGVzdCk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoZG93bmxvYWQs
ICJjcmVhdGVkLWRlc3RpbmF0aW9uIiwgR19DQUxMQkFDSyhjcmVhdGVkRGVzdGluYXRpb25DYWxs
YmFjayksIHRlc3QpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGRvd25sb2FkLCAicmVjZWl2
ZWQtZGF0YSIsIEdfQ0FMTEJBQ0socmVjZWl2ZWREYXRhQ2FsbGJhY2spLCB0ZXN0KTsKLSAgICAg
ICAgZ19zaWduYWxfY29ubmVjdChkb3dubG9hZCwgImZpbmlzaGVkIiwgR19DQUxMQkFDSyhmaW5p
c2hlZENhbGxiYWNrKSwgdGVzdCk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoZG93bmxvYWQs
ICJmYWlsZWQiLCBHX0NBTExCQUNLKGZhaWxlZENhbGxiYWNrKSwgdGVzdCk7Ci0gICAgICAgIGdf
c2lnbmFsX2Nvbm5lY3QoZG93bmxvYWQsICJkZWNpZGUtZGVzdGluYXRpb24iLCBHX0NBTExCQUNL
KGRlY2lkZURlc3RpbmF0aW9uQ2FsbGJhY2spLCB0ZXN0KTsKLSAgICB9Ci0KLSAgICBEb3dubG9h
ZFRlc3QoKQotICAgICAgICA6IG1fd2ViQ29udGV4dCh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Rl
ZmF1bHQoKSkKLSAgICAgICAgLCBtX21haW5Mb29wKGdfbWFpbl9sb29wX25ldygwLCBUUlVFKSkK
LSAgICAgICAgLCBtX2Rvd25sb2FkU2l6ZSgwKQotICAgIHsKLSAgICAgICAgZ19zaWduYWxfY29u
bmVjdChtX3dlYkNvbnRleHQsICJkb3dubG9hZC1zdGFydGVkIiwgR19DQUxMQkFDSyhkb3dubG9h
ZFN0YXJ0ZWRDYWxsYmFjayksIHRoaXMpOwotICAgIH0KLQotICAgIH5Eb3dubG9hZFRlc3QoKQot
ICAgIHsKLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fd2Vi
Q29udGV4dCwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7Ci0gICAgICAg
IGdfbWFpbl9sb29wX3VucmVmKG1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9p
ZCBzdGFydGVkKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCkKLSAgICB7Ci0gICAgICAgIG1fZG93
bmxvYWRFdmVudHMuYXBwZW5kKFN0YXJ0ZWQpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBy
ZWNlaXZlZFJlc3BvbnNlKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCkKLSAgICB7Ci0gICAgICAg
IG1fZG93bmxvYWRFdmVudHMuYXBwZW5kKFJlY2VpdmVkUmVzcG9uc2UpOwotICAgIH0KLQotICAg
IHZpcnR1YWwgdm9pZCBjcmVhdGVkRGVzdGluYXRpb24oV2ViS2l0RG93bmxvYWQqIGRvd25sb2Fk
LCBjb25zdCBjaGFyKiBkZXN0aW5hdGlvbikKLSAgICB7Ci0gICAgICAgIG1fZG93bmxvYWRFdmVu
dHMuYXBwZW5kKENyZWF0ZWREZXN0aW5hdGlvbik7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lk
IHJlY2VpdmVkRGF0YShXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGd1aW50NjQgZGF0YUxlbmd0
aCkKLSAgICB7Ci0gICAgICAgIG1fZG93bmxvYWRTaXplICs9IGRhdGFMZW5ndGg7Ci0gICAgICAg
IGlmICghbV9kb3dubG9hZEV2ZW50cy5jb250YWlucyhSZWNlaXZlZERhdGEpKQotICAgICAgICAg
ICAgbV9kb3dubG9hZEV2ZW50cy5hcHBlbmQoUmVjZWl2ZWREYXRhKTsKLSAgICB9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgZmluaXNoZWQoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQotICAgIHsKLSAg
ICAgICAgZ19hc3NlcnRfY21wdWludChtX2Rvd25sb2FkU2l6ZSwgPT0sIHdlYmtpdF9kb3dubG9h
ZF9nZXRfcmVjZWl2ZWRfZGF0YV9sZW5ndGgoZG93bmxvYWQpKTsKLSAgICAgICAgbV9kb3dubG9h
ZEV2ZW50cy5hcHBlbmQoRmluaXNoZWQpOwotICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1fbWFp
bkxvb3ApOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBmYWlsZWQoV2ViS2l0RG93bmxvYWQq
IGRvd25sb2FkLCBHRXJyb3IqIGVycm9yKQotICAgIHsKLSAgICAgICAgbV9kb3dubG9hZEV2ZW50
cy5hcHBlbmQoRmFpbGVkKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGVjaWRlRGVzdGlu
YXRpb24oV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBjb25zdCBnY2hhciogc3VnZ2VzdGVkRmls
ZW5hbWUpCi0gICAgewotICAgICAgICBHT3duUHRyPGNoYXI+IGRlc3RpbmF0aW9uKGdfYnVpbGRf
ZmlsZW5hbWUoa1RlbXBEaXJlY3RvcnksIHN1Z2dlc3RlZEZpbGVuYW1lLCBOVUxMKSk7Ci0gICAg
ICAgIEdPd25QdHI8Y2hhcj4gZGVzdGluYXRpb25VUkkoZ19maWxlbmFtZV90b191cmkoZGVzdGlu
YXRpb24uZ2V0KCksIDAsIDApKTsKLSAgICAgICAgd2Via2l0X2Rvd25sb2FkX3NldF9kZXN0aW5h
dGlvbihkb3dubG9hZCwgZGVzdGluYXRpb25VUkkuZ2V0KCkpOwotICAgIH0KLQotICAgIFdlYktp
dERvd25sb2FkKiBkb3dubG9hZFVSSUFuZFdhaXRVbnRpbEZpbmlzaGVzKGNvbnN0IENTdHJpbmcm
IHJlcXVlc3RVUkkpCi0gICAgewotICAgICAgICBXZWJLaXREb3dubG9hZCogZG93bmxvYWQgPSB3
ZWJraXRfd2ViX2NvbnRleHRfZG93bmxvYWRfdXJpKG1fd2ViQ29udGV4dCwgcmVxdWVzdFVSSS5k
YXRhKCkpOwotICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdf
T0JKRUNUKGRvd25sb2FkKSk7Ci0KLSAgICAgICAgV2ViS2l0VVJJUmVxdWVzdCogcmVxdWVzdCA9
IHdlYmtpdF9kb3dubG9hZF9nZXRfcmVxdWVzdChkb3dubG9hZCk7Ci0gICAgICAgIGdfYXNzZXJ0
KHJlcXVlc3QpOwotICAgICAgICBBU1NFUlRfQ01QX0NTVFJJTkcod2Via2l0X3VyaV9yZXF1ZXN0
X2dldF91cmkocmVxdWVzdCksID09LCByZXF1ZXN0VVJJKTsKLQotICAgICAgICBnX21haW5fbG9v
cF9ydW4obV9tYWluTG9vcCk7Ci0KLSAgICAgICAgcmV0dXJuIGRvd25sb2FkOwotICAgIH0KLQot
ICAgIHZvaWQgY2hlY2tEZXN0aW5hdGlvbkFuZERlbGV0ZUZpbGUoV2ViS2l0RG93bmxvYWQqIGRv
d25sb2FkLCBjb25zdCBjaGFyKiBleHBlY3RlZE5hbWUpCi0gICAgewotICAgICAgICBpZiAoIXdl
YmtpdF9kb3dubG9hZF9nZXRfZGVzdGluYXRpb24oZG93bmxvYWQpKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBHUmVmUHRyPEdGaWxlPiBkZXN0RmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVf
bmV3X2Zvcl91cmkod2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbihkb3dubG9hZCkpKTsK
LSAgICAgICAgR093blB0cjxjaGFyPiBkZXN0QmFzZW5hbWUoZ19maWxlX2dldF9iYXNlbmFtZShk
ZXN0RmlsZS5nZXQoKSkpOwotICAgICAgICBnX2Fzc2VydF9jbXBzdHIoZGVzdEJhc2VuYW1lLmdl
dCgpLCA9PSwgZXhwZWN0ZWROYW1lKTsKLQotICAgICAgICBnX2ZpbGVfZGVsZXRlKGRlc3RGaWxl
LmdldCgpLCAwLCAwKTsKLSAgICB9Ci0KLSAgICBXZWJLaXRXZWJDb250ZXh0KiBtX3dlYkNvbnRl
eHQ7Ci0gICAgR01haW5Mb29wKiBtX21haW5Mb29wOwotICAgIFZlY3RvcjxEb3dubG9hZEV2ZW50
PiBtX2Rvd25sb2FkRXZlbnRzOwotICAgIGd1aW50NjQgbV9kb3dubG9hZFNpemU7Ci19OwotCi1z
dGF0aWMgdm9pZCB0ZXN0RG93bmxvYWRMb2NhbEZpbGUoRG93bmxvYWRUZXN0KiB0ZXN0LCBnY29u
c3Rwb2ludGVyKQotewotICAgIEdPd25QdHI8Y2hhcj4gc291cmNlUGF0aChnX2J1aWxkX2ZpbGVu
YW1lKFRlc3Q6OmdldFdlYktpdDFUZXN0UmVzb3VjZXNEaXIoKS5kYXRhKCksICJ0ZXN0LnBkZiIs
IE5VTEwpKTsKLSAgICBHUmVmUHRyPEdGaWxlPiBzb3VyY2UgPSBhZG9wdEdSZWYoZ19maWxlX25l
d19mb3JfcGF0aChzb3VyY2VQYXRoLmdldCgpKSk7Ci0gICAgR1JlZlB0cjxHRmlsZUluZm8+IHNv
dXJjZUluZm8gPSBhZG9wdEdSZWYoZ19maWxlX3F1ZXJ5X2luZm8oc291cmNlLmdldCgpLCBHX0ZJ
TEVfQVRUUklCVVRFX1NUQU5EQVJEX1NJWkUsIHN0YXRpY19jYXN0PEdGaWxlUXVlcnlJbmZvRmxh
Z3M+KDApLCAwLCAwKSk7Ci0gICAgR093blB0cjxjaGFyPiBzb3VyY2VVUkkoZ19maWxlX2dldF91
cmkoc291cmNlLmdldCgpKSk7Ci0gICAgR1JlZlB0cjxXZWJLaXREb3dubG9hZD4gZG93bmxvYWQg
PSBhZG9wdEdSZWYodGVzdC0+ZG93bmxvYWRVUklBbmRXYWl0VW50aWxGaW5pc2hlcyhzb3VyY2VV
UkkuZ2V0KCkpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2Rvd25sb2FkX2dldF93ZWJfdmlldyhk
b3dubG9hZC5nZXQoKSkpOwotCi0gICAgVmVjdG9yPERvd25sb2FkVGVzdDo6RG93bmxvYWRFdmVu
dD4mIGV2ZW50cyA9IHRlc3QtPm1fZG93bmxvYWRFdmVudHM7Ci0gICAgZ19hc3NlcnRfY21waW50
KGV2ZW50cy5zaXplKCksID09LCA1KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9
PSwgRG93bmxvYWRUZXN0OjpTdGFydGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFd
LCA9PSwgRG93bmxvYWRUZXN0OjpSZWNlaXZlZFJlc3BvbnNlKTsKLSAgICBnX2Fzc2VydF9jbXBp
bnQoZXZlbnRzWzJdLCA9PSwgRG93bmxvYWRUZXN0OjpDcmVhdGVkRGVzdGluYXRpb24pOwotICAg
IGdfYXNzZXJ0X2NtcGludChldmVudHNbM10sID09LCBEb3dubG9hZFRlc3Q6OlJlY2VpdmVkRGF0
YSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1s0XSwgPT0sIERvd25sb2FkVGVzdDo6Rmlu
aXNoZWQpOwotCi0gICAgV2ViS2l0VVJJUmVxdWVzdCogcmVxdWVzdCA9IHdlYmtpdF9kb3dubG9h
ZF9nZXRfcmVxdWVzdChkb3dubG9hZC5nZXQoKSk7Ci0gICAgZ19hc3NlcnQocmVxdWVzdCk7Ci0g
ICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfdXJpKHJlcXVlc3QpLCA9
PSwgc291cmNlVVJJLmdldCgpKTsKLQotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2Rvd25s
b2FkU2l6ZSwgPT0sIGdfZmlsZV9pbmZvX2dldF9zaXplKHNvdXJjZUluZm8uZ2V0KCkpKTsKLSAg
ICBnX2Fzc2VydCh3ZWJraXRfZG93bmxvYWRfZ2V0X2Rlc3RpbmF0aW9uKGRvd25sb2FkLmdldCgp
KSk7Ci0gICAgZ19hc3NlcnRfY21wZmxvYXQod2Via2l0X2Rvd25sb2FkX2dldF9lc3RpbWF0ZWRf
cHJvZ3Jlc3MoZG93bmxvYWQuZ2V0KCkpLCA9PSwgMSk7Ci0gICAgdGVzdC0+Y2hlY2tEZXN0aW5h
dGlvbkFuZERlbGV0ZUZpbGUoZG93bmxvYWQuZ2V0KCksICJ0ZXN0LnBkZiIpOwotfQotCi1jbGFz
cyBEb3dubG9hZEVycm9yVGVzdDogcHVibGljIERvd25sb2FkVGVzdCB7Ci1wdWJsaWM6Ci0gICAg
TUFLRV9HTElCX1RFU1RfRklYVFVSRShEb3dubG9hZEVycm9yVGVzdCk7Ci0KLSAgICBEb3dubG9h
ZEVycm9yVGVzdCgpCi0gICAgICAgIDogbV9leHBlY3RlZEVycm9yKFdFQktJVF9ET1dOTE9BRF9F
UlJPUl9ORVRXT1JLKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIHJlY2VpdmVkUmVzcG9uc2Uo
V2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQotICAgIHsKLSAgICAgICAgRG93bmxvYWRUZXN0Ojpy
ZWNlaXZlZFJlc3BvbnNlKGRvd25sb2FkKTsKLSAgICAgICAgaWYgKG1fZXhwZWN0ZWRFcnJvciA9
PSBXRUJLSVRfRE9XTkxPQURfRVJST1JfQ0FOQ0VMTEVEX0JZX1VTRVIpCi0gICAgICAgICAgICB3
ZWJraXRfZG93bmxvYWRfY2FuY2VsKGRvd25sb2FkKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNyZWF0
ZWREZXN0aW5hdGlvbihXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IGNoYXIqIGRlc3Rp
bmF0aW9uKQotICAgIHsKLSAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICB9Ci0K
LSAgICB2b2lkIGZhaWxlZChXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIEdFcnJvciogZXJyb3Ip
Ci0gICAgewotICAgICAgICBnX2Fzc2VydChnX2Vycm9yX21hdGNoZXMoZXJyb3IsIFdFQktJVF9E
T1dOTE9BRF9FUlJPUiwgbV9leHBlY3RlZEVycm9yKSk7Ci0gICAgICAgIERvd25sb2FkVGVzdDo6
ZmFpbGVkKGRvd25sb2FkLCBlcnJvcik7Ci0gICAgfQotCi0gICAgdm9pZCBkZWNpZGVEZXN0aW5h
dGlvbihXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IGdjaGFyKiBzdWdnZXN0ZWRGaWxl
bmFtZSkKLSAgICB7Ci0gICAgICAgIGlmIChtX2V4cGVjdGVkRXJyb3IgIT0gV0VCS0lUX0RPV05M
T0FEX0VSUk9SX0RFU1RJTkFUSU9OKSB7Ci0gICAgICAgICAgICBEb3dubG9hZFRlc3Q6OmRlY2lk
ZURlc3RpbmF0aW9uKGRvd25sb2FkLCBzdWdnZXN0ZWRGaWxlbmFtZSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgd2Via2l0X2Rvd25sb2FkX3NldF9kZXN0aW5hdGlv
bihkb3dubG9hZCwgImZpbGU6Ly8vZm9vL2JhciIpOwotICAgIH0KLQotICAgIFdlYktpdERvd25s
b2FkRXJyb3IgbV9leHBlY3RlZEVycm9yOwotfTsKLQotc3RhdGljIHZvaWQgdGVzdERvd25sb2Fk
TG9jYWxGaWxlRXJyb3IoRG93bmxvYWRFcnJvclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17
Ci0gICAgdGVzdC0+bV9leHBlY3RlZEVycm9yID0gV0VCS0lUX0RPV05MT0FEX0VSUk9SX05FVFdP
Uks7Ci0gICAgR1JlZlB0cjxXZWJLaXREb3dubG9hZD4gZG93bmxvYWQgPSBhZG9wdEdSZWYodGVz
dC0+ZG93bmxvYWRVUklBbmRXYWl0VW50aWxGaW5pc2hlcygiZmlsZTovLy9mb28vYmFyIikpOwot
ICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG93bmxvYWRfZ2V0X3dlYl92aWV3KGRvd25sb2FkLmdldCgp
KSk7Ci0KLSAgICBWZWN0b3I8RG93bmxvYWRUZXN0OjpEb3dubG9hZEV2ZW50PiYgZXZlbnRzID0g
dGVzdC0+bV9kb3dubG9hZEV2ZW50czsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUo
KSwgPT0sIDMpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBEb3dubG9hZFRl
c3Q6OlN0YXJ0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBEb3dubG9h
ZFRlc3Q6OkZhaWxlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIERvd25s
b2FkVGVzdDo6RmluaXNoZWQpOwotICAgIGV2ZW50cy5jbGVhcigpOwotICAgIGdfYXNzZXJ0X2Nt
cGZsb2F0KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNzKGRvd25sb2FkLmdl
dCgpKSwgPCwgMSk7Ci0KLSAgICB0ZXN0LT5tX2V4cGVjdGVkRXJyb3IgPSBXRUJLSVRfRE9XTkxP
QURfRVJST1JfREVTVElOQVRJT047Ci0gICAgR093blB0cjxjaGFyPiBwYXRoKGdfYnVpbGRfZmls
ZW5hbWUoVGVzdDo6Z2V0V2ViS2l0MVRlc3RSZXNvdWNlc0RpcigpLmRhdGEoKSwgInRlc3QucGRm
IiwgTlVMTCkpOwotICAgIEdSZWZQdHI8R0ZpbGU+IGZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25l
d19mb3JfcGF0aChwYXRoLmdldCgpKSk7Ci0gICAgR093blB0cjxjaGFyPiB1cmkoZ19maWxlX2dl
dF91cmkoZmlsZS5nZXQoKSkpOwotICAgIGRvd25sb2FkID0gYWRvcHRHUmVmKHRlc3QtPmRvd25s
b2FkVVJJQW5kV2FpdFVudGlsRmluaXNoZXModXJpLmdldCgpKSk7Ci0gICAgZ19hc3NlcnQoIXdl
YmtpdF9kb3dubG9hZF9nZXRfd2ViX3ZpZXcoZG93bmxvYWQuZ2V0KCkpKTsKLQotICAgIGdfYXNz
ZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgNCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2
ZW50c1swXSwgPT0sIERvd25sb2FkVGVzdDo6U3RhcnRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50
KGV2ZW50c1sxXSwgPT0sIERvd25sb2FkVGVzdDo6UmVjZWl2ZWRSZXNwb25zZSk7Ci0gICAgZ19h
c3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIERvd25sb2FkVGVzdDo6RmFpbGVkKTsKLSAgICBn
X2Fzc2VydF9jbXBpbnQoZXZlbnRzWzNdLCA9PSwgRG93bmxvYWRUZXN0OjpGaW5pc2hlZCk7Ci0g
ICAgZXZlbnRzLmNsZWFyKCk7Ci0gICAgZ19hc3NlcnRfY21wZmxvYXQod2Via2l0X2Rvd25sb2Fk
X2dldF9lc3RpbWF0ZWRfcHJvZ3Jlc3MoZG93bmxvYWQuZ2V0KCkpLCA8LCAxKTsKLSAgICB0ZXN0
LT5jaGVja0Rlc3RpbmF0aW9uQW5kRGVsZXRlRmlsZShkb3dubG9hZC5nZXQoKSwgImJhciIpOwot
Ci0gICAgdGVzdC0+bV9leHBlY3RlZEVycm9yID0gV0VCS0lUX0RPV05MT0FEX0VSUk9SX0NBTkNF
TExFRF9CWV9VU0VSOwotICAgIGRvd25sb2FkID0gYWRvcHRHUmVmKHRlc3QtPmRvd25sb2FkVVJJ
QW5kV2FpdFVudGlsRmluaXNoZXModXJpLmdldCgpKSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9k
b3dubG9hZF9nZXRfd2ViX3ZpZXcoZG93bmxvYWQuZ2V0KCkpKTsKLQotICAgIGdfYXNzZXJ0X2Nt
cGludChldmVudHMuc2l6ZSgpLCA9PSwgNCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sw
XSwgPT0sIERvd25sb2FkVGVzdDo6U3RhcnRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50
c1sxXSwgPT0sIERvd25sb2FkVGVzdDo6UmVjZWl2ZWRSZXNwb25zZSk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KGV2ZW50c1syXSwgPT0sIERvd25sb2FkVGVzdDo6RmFpbGVkKTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoZXZlbnRzWzNdLCA9PSwgRG93bmxvYWRUZXN0OjpGaW5pc2hlZCk7Ci0gICAgZXZl
bnRzLmNsZWFyKCk7Ci0gICAgZ19hc3NlcnRfY21wZmxvYXQod2Via2l0X2Rvd25sb2FkX2dldF9l
c3RpbWF0ZWRfcHJvZ3Jlc3MoZG93bmxvYWQuZ2V0KCkpLCA8LCAxKTsKLSAgICB0ZXN0LT5jaGVj
a0Rlc3RpbmF0aW9uQW5kRGVsZXRlRmlsZShkb3dubG9hZC5nZXQoKSwgInRlc3QucGRmIik7Ci19
Ci0KLXN0YXRpYyBXZWJLaXRUZXN0U2VydmVyKiBrU2VydmVyOwotc3RhdGljIGNvbnN0IGNoYXIq
IGtTZXJ2ZXJTdWdnZXN0ZWRGaWxlbmFtZSA9ICJ3ZWJraXQtZG93bmxvYWRlZC1maWxlIjsKLQot
c3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2Fn
ZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSosIFNvdXBDbGllbnRDb250
ZXh0KiwgZ3BvaW50ZXIpCi17Ci0gICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01FVEhP
RF9HRVQpIHsKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9T
VEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEdP
d25QdHI8Y2hhcj4gZmlsZVBhdGgoZ19idWlsZF9maWxlbmFtZShUZXN0OjpnZXRXZWJLaXQxVGVz
dFJlc291Y2VzRGlyKCkuZGF0YSgpLCBwYXRoLCBOVUxMKSk7Ci0gICAgY2hhciogY29udGVudHM7
Ci0gICAgZ3NpemUgY29udGVudHNMZW5ndGg7Ci0gICAgaWYgKCFnX2ZpbGVfZ2V0X2NvbnRlbnRz
KGZpbGVQYXRoLmdldCgpLCAmY29udGVudHMsICZjb250ZW50c0xlbmd0aCwgMCkpIHsKLSAgICAg
ICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0ZPVU5E
KTsKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2Vf
Ym9keSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0
YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7Ci0KLSAgICBHT3duUHRyPGNoYXI+IGNvbnRl
bnREaXNwb3NpdGlvbihnX3N0cmR1cF9wcmludGYoImZpbGVuYW1lPSVzIiwga1NlcnZlclN1Z2dl
c3RlZEZpbGVuYW1lKSk7Ci0gICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1lc3NhZ2Ut
PnJlc3BvbnNlX2hlYWRlcnMsICJDb250ZW50LURpc3Bvc2l0aW9uIiwgY29udGVudERpc3Bvc2l0
aW9uLmdldCgpKTsKLSAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9u
c2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgY29udGVudHMsIGNvbnRlbnRzTGVuZ3RoKTsKLQot
ICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOwot
fQotCi1zdGF0aWMgdm9pZCB0ZXN0RG93bmxvYWRSZW1vdGVGaWxlKERvd25sb2FkVGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBHUmVmUHRyPFdlYktpdERvd25sb2FkPiBkb3dubG9h
ZCA9IGFkb3B0R1JlZih0ZXN0LT5kb3dubG9hZFVSSUFuZFdhaXRVbnRpbEZpbmlzaGVzKGtTZXJ2
ZXItPmdldFVSSUZvclBhdGgoIi90ZXN0LnBkZiIpKSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9k
b3dubG9hZF9nZXRfd2ViX3ZpZXcoZG93bmxvYWQuZ2V0KCkpKTsKLQotICAgIFZlY3RvcjxEb3du
bG9hZFRlc3Q6OkRvd25sb2FkRXZlbnQ+JiBldmVudHMgPSB0ZXN0LT5tX2Rvd25sb2FkRXZlbnRz
OwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgNSk7Ci0gICAgZ19hc3Nl
cnRfY21waW50KGV2ZW50c1swXSwgPT0sIERvd25sb2FkVGVzdDo6U3RhcnRlZCk7Ci0gICAgZ19h
c3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIERvd25sb2FkVGVzdDo6UmVjZWl2ZWRSZXNwb25z
ZSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIERvd25sb2FkVGVzdDo6Q3Jl
YXRlZERlc3RpbmF0aW9uKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzNdLCA9PSwgRG93
bmxvYWRUZXN0OjpSZWNlaXZlZERhdGEpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbNF0s
ID09LCBEb3dubG9hZFRlc3Q6OkZpbmlzaGVkKTsKLSAgICBldmVudHMuY2xlYXIoKTsKLQotICAg
IFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QgPSB3ZWJraXRfZG93bmxvYWRfZ2V0X3JlcXVlc3Qo
ZG93bmxvYWQuZ2V0KCkpOwotICAgIGdfYXNzZXJ0KHJlcXVlc3QpOwotICAgIEFTU0VSVF9DTVBf
Q1NUUklORyh3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KSwgPT0sIGtTZXJ2ZXIt
PmdldFVSSUZvclBhdGgoIi90ZXN0LnBkZiIpKTsKLQotICAgIGdfYXNzZXJ0KHdlYmtpdF9kb3du
bG9hZF9nZXRfZGVzdGluYXRpb24oZG93bmxvYWQuZ2V0KCkpKTsKLSAgICBnX2Fzc2VydF9jbXBm
bG9hdCh3ZWJraXRfZG93bmxvYWRfZ2V0X2VzdGltYXRlZF9wcm9ncmVzcyhkb3dubG9hZC5nZXQo
KSksID09LCAxKTsKLSAgICB0ZXN0LT5jaGVja0Rlc3RpbmF0aW9uQW5kRGVsZXRlRmlsZShkb3du
bG9hZC5nZXQoKSwga1NlcnZlclN1Z2dlc3RlZEZpbGVuYW1lKTsKLX0KLQotc3RhdGljIHZvaWQg
dGVzdERvd25sb2FkUmVtb3RlRmlsZUVycm9yKERvd25sb2FkRXJyb3JUZXN0KiB0ZXN0LCBnY29u
c3Rwb2ludGVyKQotewotICAgIHRlc3QtPm1fZXhwZWN0ZWRFcnJvciA9IFdFQktJVF9ET1dOTE9B
RF9FUlJPUl9ORVRXT1JLOwotICAgIEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkID0g
YWRvcHRHUmVmKHRlc3QtPmRvd25sb2FkVVJJQW5kV2FpdFVudGlsRmluaXNoZXMoa1NlcnZlci0+
Z2V0VVJJRm9yUGF0aCgiL2ZvbyIpKSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9kb3dubG9hZF9n
ZXRfd2ViX3ZpZXcoZG93bmxvYWQuZ2V0KCkpKTsKLQotICAgIFZlY3RvcjxEb3dubG9hZFRlc3Q6
OkRvd25sb2FkRXZlbnQ+JiBldmVudHMgPSB0ZXN0LT5tX2Rvd25sb2FkRXZlbnRzOwotICAgIGdf
YXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgNCk7Ci0gICAgZ19hc3NlcnRfY21waW50
KGV2ZW50c1swXSwgPT0sIERvd25sb2FkVGVzdDo6U3RhcnRlZCk7Ci0gICAgZ19hc3NlcnRfY21w
aW50KGV2ZW50c1sxXSwgPT0sIERvd25sb2FkVGVzdDo6UmVjZWl2ZWRSZXNwb25zZSk7Ci0gICAg
Z19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIERvd25sb2FkVGVzdDo6RmFpbGVkKTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzNdLCA9PSwgRG93bmxvYWRUZXN0OjpGaW5pc2hlZCk7
Ci0gICAgZXZlbnRzLmNsZWFyKCk7Ci0gICAgV2ViS2l0VVJJUmVzcG9uc2UqIHJlc3BvbnNlID0g
d2Via2l0X2Rvd25sb2FkX2dldF9yZXNwb25zZShkb3dubG9hZC5nZXQoKSk7Ci0gICAgZ19hc3Nl
cnRfY21wdWludCh3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF9zdGF0dXNfY29kZShyZXNwb25zZSks
ID09LCA0MDQpOwotICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0
aW1hdGVkX3Byb2dyZXNzKGRvd25sb2FkLmdldCgpKSwgPCwgMSk7Ci0KLSAgICB0ZXN0LT5tX2V4
cGVjdGVkRXJyb3IgPSBXRUJLSVRfRE9XTkxPQURfRVJST1JfREVTVElOQVRJT047Ci0gICAgZG93
bmxvYWQgPSBhZG9wdEdSZWYodGVzdC0+ZG93bmxvYWRVUklBbmRXYWl0VW50aWxGaW5pc2hlcyhr
U2VydmVyLT5nZXRVUklGb3JQYXRoKCIvdGVzdC5wZGYiKSkpOwotICAgIGdfYXNzZXJ0KCF3ZWJr
aXRfZG93bmxvYWRfZ2V0X3dlYl92aWV3KGRvd25sb2FkLmdldCgpKSk7Ci0KLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVu
dHNbMF0sID09LCBEb3dubG9hZFRlc3Q6OlN0YXJ0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHNbMV0sID09LCBEb3dubG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOwotICAgIGdfYXNz
ZXJ0X2NtcGludChldmVudHNbMl0sID09LCBEb3dubG9hZFRlc3Q6OkZhaWxlZCk7Ci0gICAgZ19h
c3NlcnRfY21waW50KGV2ZW50c1szXSwgPT0sIERvd25sb2FkVGVzdDo6RmluaXNoZWQpOwotICAg
IGV2ZW50cy5jbGVhcigpOwotICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHdlYmtpdF9kb3dubG9hZF9n
ZXRfZXN0aW1hdGVkX3Byb2dyZXNzKGRvd25sb2FkLmdldCgpKSwgPCwgMSk7Ci0gICAgdGVzdC0+
Y2hlY2tEZXN0aW5hdGlvbkFuZERlbGV0ZUZpbGUoZG93bmxvYWQuZ2V0KCksICJiYXIiKTsKLQot
ICAgIHRlc3QtPm1fZXhwZWN0ZWRFcnJvciA9IFdFQktJVF9ET1dOTE9BRF9FUlJPUl9DQU5DRUxM
RURfQllfVVNFUjsKLSAgICBkb3dubG9hZCA9IGFkb3B0R1JlZih0ZXN0LT5kb3dubG9hZFVSSUFu
ZFdhaXRVbnRpbEZpbmlzaGVzKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi90ZXN0LnBkZiIpKSk7
Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9kb3dubG9hZF9nZXRfd2ViX3ZpZXcoZG93bmxvYWQuZ2V0
KCkpKTsKLQotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgNCk7Ci0gICAg
Z19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIERvd25sb2FkVGVzdDo6U3RhcnRlZCk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIERvd25sb2FkVGVzdDo6UmVjZWl2ZWRS
ZXNwb25zZSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIERvd25sb2FkVGVz
dDo6RmFpbGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzNdLCA9PSwgRG93bmxvYWRU
ZXN0OjpGaW5pc2hlZCk7Ci0gICAgZXZlbnRzLmNsZWFyKCk7Ci0gICAgZ19hc3NlcnRfY21wZmxv
YXQod2Via2l0X2Rvd25sb2FkX2dldF9lc3RpbWF0ZWRfcHJvZ3Jlc3MoZG93bmxvYWQuZ2V0KCkp
LCA8LCAxKTsKLSAgICB0ZXN0LT5jaGVja0Rlc3RpbmF0aW9uQW5kRGVsZXRlRmlsZShkb3dubG9h
ZC5nZXQoKSwga1NlcnZlclN1Z2dlc3RlZEZpbGVuYW1lKTsKLX0KLQotY2xhc3MgV2ViVmlld0Rv
d25sb2FkVGVzdDogcHVibGljIFdlYlZpZXdUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJf
VEVTVF9GSVhUVVJFKFdlYlZpZXdEb3dubG9hZFRlc3QpOwotCi0gICAgc3RhdGljIHZvaWQgZG93
bmxvYWRTdGFydGVkQ2FsbGJhY2soV2ViS2l0V2ViQ29udGV4dCogY29udGV4dCwgV2ViS2l0RG93
bmxvYWQqIGRvd25sb2FkLCBXZWJWaWV3RG93bmxvYWRUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAg
ICAgdGVzdC0+bV9kb3dubG9hZCA9IGRvd25sb2FkOwotICAgICAgICB0ZXN0LT5hc3NlcnRPYmpl
Y3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKGRvd25sb2FkKSk7Ci0gICAgICAg
IHRlc3QtPnF1aXRNYWluTG9vcCgpOwotICAgIH0KLQotICAgIFdlYlZpZXdEb3dubG9hZFRlc3Qo
KQotICAgIHsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2Nv
bnRleHQobV93ZWJWaWV3KSwgImRvd25sb2FkLXN0YXJ0ZWQiLCBHX0NBTExCQUNLKGRvd25sb2Fk
U3RhcnRlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgfQotCi0gICAgfldlYlZpZXdEb3dubG9hZFRl
c3QoKQotICAgIHsKLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVk
KHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dChtX3dlYlZpZXcpLCBHX1NJR05BTF9NQVRDSF9E
QVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKLSAgICB9Ci0KLSAgICB2b2lkIHdhaXRVbnRpbERvd25s
b2FkU3RhcnRlZCgpCi0gICAgewotICAgICAgICBtX2Rvd25sb2FkID0gMDsKLSAgICAgICAgZ19t
YWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotICAgICAgICBnX2Fzc2VydChtX2Rvd25sb2FkLmdl
dCgpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZ2Jvb2xlYW4gZG93bmxvYWREZWNpZGVEZXN0aW5h
dGlvbkNhbGxiYWNrKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgY29uc3QgZ2NoYXIqIHN1Z2dl
c3RlZEZpbGVuYW1lLCBXZWJWaWV3RG93bmxvYWRUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAg
R093blB0cjxjaGFyPiBkZXN0aW5hdGlvbihnX2J1aWxkX2ZpbGVuYW1lKGtUZW1wRGlyZWN0b3J5
LCBzdWdnZXN0ZWRGaWxlbmFtZSwgTlVMTCkpOwotICAgICAgICBHT3duUHRyPGNoYXI+IGRlc3Rp
bmF0aW9uVVJJKGdfZmlsZW5hbWVfdG9fdXJpKGRlc3RpbmF0aW9uLmdldCgpLCAwLCAwKSk7Ci0g
ICAgICAgIHdlYmtpdF9kb3dubG9hZF9zZXRfZGVzdGluYXRpb24oZG93bmxvYWQsIGRlc3RpbmF0
aW9uVVJJLmdldCgpKTsKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgfQotCi0gICAgc3RhdGlj
IHZvaWQgZG93bmxvYWRGaW5pc2hlZENhbGxiYWNrKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwg
V2ViVmlld0Rvd25sb2FkVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHRlc3QtPnF1aXRNYWlu
TG9vcCgpOwotICAgIH0KLQotICAgIHZvaWQgd2FpdFVudGlsRG93bmxvYWRGaW5pc2hlZCgpCi0g
ICAgewotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fZG93bmxvYWQuZ2V0KCksICJkZWNpZGUt
ZGVzdGluYXRpb24iLCBHX0NBTExCQUNLKGRvd25sb2FkRGVjaWRlRGVzdGluYXRpb25DYWxsYmFj
ayksIHRoaXMpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fZG93bmxvYWQuZ2V0KCksICJm
aW5pc2hlZCIsIEdfQ0FMTEJBQ0soZG93bmxvYWRGaW5pc2hlZENhbGxiYWNrKSwgdGhpcyk7Ci0g
ICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAgICB9Ci0KLSAgICBHUmVmUHRy
PFdlYktpdERvd25sb2FkPiBtX2Rvd25sb2FkOwotfTsKLQotc3RhdGljIHZvaWQgdGVzdFdlYlZp
ZXdEb3dubG9hZFVSSShXZWJWaWV3RG93bmxvYWRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQot
ewotICAgIEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkID0gYWRvcHRHUmVmKHdlYmtp
dF93ZWJfdmlld19kb3dubG9hZF91cmkodGVzdC0+bV93ZWJWaWV3LCBrU2VydmVyLT5nZXRVUklG
b3JQYXRoKCIvdGVzdC5wZGYiKS5kYXRhKCkpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxEb3dubG9h
ZFN0YXJ0ZWQoKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX3dlYlZpZXcgPT0gd2Via2l0X2Rvd25s
b2FkX2dldF93ZWJfdmlldyhkb3dubG9hZC5nZXQoKSkpOwotICAgIHRlc3QtPndhaXRVbnRpbERv
d25sb2FkRmluaXNoZWQoKTsKLQotICAgIEdSZWZQdHI8R0ZpbGU+IGRvd25sb2FkRmlsZSA9IGFk
b3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl91cmkod2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlv
bihkb3dubG9hZC5nZXQoKSkpKTsKLSAgICBHUmVmUHRyPEdGaWxlSW5mbz4gZG93bmxvYWRGaWxl
SW5mbyA9IGFkb3B0R1JlZihnX2ZpbGVfcXVlcnlfaW5mbyhkb3dubG9hZEZpbGUuZ2V0KCksIEdf
RklMRV9BVFRSSUJVVEVfU1RBTkRBUkRfU0laRSwgc3RhdGljX2Nhc3Q8R0ZpbGVRdWVyeUluZm9G
bGFncz4oMCksIDAsIDApKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZ19maWxlX2luZm9fZ2V0X3Np
emUoZG93bmxvYWRGaWxlSW5mby5nZXQoKSksID4sIDApOwotICAgIGdfZmlsZV9kZWxldGUoZG93
bmxvYWRGaWxlLmdldCgpLCAwLCAwKTsKLX0KLQotY2xhc3MgUG9saWN5UmVzcG9uc2VEb3dubG9h
ZFRlc3Q6IHB1YmxpYyBXZWJWaWV3RG93bmxvYWRUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dM
SUJfVEVTVF9GSVhUVVJFKFBvbGljeVJlc3BvbnNlRG93bmxvYWRUZXN0KTsKLQotICAgIHN0YXRp
YyBnYm9vbGVhbiBkZWNpZGVQb2xpY3lDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBX
ZWJLaXRQb2xpY3lEZWNpc2lvbiogZGVjaXNpb24sIFdlYktpdFBvbGljeURlY2lzaW9uVHlwZSB0
eXBlLCBQb2xpY3lSZXNwb25zZURvd25sb2FkVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIGlm
ICh0eXBlICE9IFdFQktJVF9QT0xJQ1lfREVDSVNJT05fVFlQRV9SRVNQT05TRSkKLSAgICAgICAg
ICAgIHJldHVybiBGQUxTRTsKLQotICAgICAgICB3ZWJraXRfcG9saWN5X2RlY2lzaW9uX2Rvd25s
b2FkKGRlY2lzaW9uKTsKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgfQotCi0gICAgUG9saWN5
UmVzcG9uc2VEb3dubG9hZFRlc3QoKQotICAgIHsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdCht
X3dlYlZpZXcsICJkZWNpZGUtcG9saWN5IiwgR19DQUxMQkFDSyhkZWNpZGVQb2xpY3lDYWxsYmFj
ayksIHRoaXMpOwotICAgIH0KLQotICAgIH5Qb2xpY3lSZXNwb25zZURvd25sb2FkVGVzdCgpCi0g
ICAgewotICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV93ZWJW
aWV3LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKLSAgICB9Ci0KLSAg
ICB2b2lkIGNhbmNlbERvd25sb2FkQW5kV2FpdFVudGlsRmluaXNoZWQoKQotICAgIHsKLSAgICAg
ICAgd2Via2l0X2Rvd25sb2FkX2NhbmNlbChtX2Rvd25sb2FkLmdldCgpKTsKLSAgICAgICAgd2Fp
dFVudGlsRG93bmxvYWRGaW5pc2hlZCgpOwotICAgICAgICBtX2Rvd25sb2FkID0gMDsKLSAgICB9
Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0UG9saWN5UmVzcG9uc2VEb3dubG9hZChQb2xpY3lSZXNw
b25zZURvd25sb2FkVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICAvLyBUZXN0IHRo
YXQgYSBkb3dubG9hZCBzdGFydGVkIGJ5IHRoZSB0aGUgcG9saWN5IGNoZWNrZXIgY29udGFpbnMg
dGhlIHdlYiB2aWV3LgotICAgIENTdHJpbmcgcmVxdWVzdFVSSSA9IGtTZXJ2ZXItPmdldFVSSUZv
clBhdGgoIi90ZXN0LnBkZiIpLmRhdGEoKTsKLSAgICB0ZXN0LT5sb2FkVVJJKHJlcXVlc3RVUkku
ZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxEb3dubG9hZFN0YXJ0ZWQoKTsKLQotICAgIFdl
YktpdFVSSVJlcXVlc3QqIHJlcXVlc3QgPSB3ZWJraXRfZG93bmxvYWRfZ2V0X3JlcXVlc3QodGVz
dC0+bV9kb3dubG9hZC5nZXQoKSk7Ci0gICAgZ19hc3NlcnQocmVxdWVzdCk7Ci0gICAgQVNTRVJU
X0NNUF9DU1RSSU5HKHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfdXJpKHJlcXVlc3QpLCA9PSwgcmVx
dWVzdFVSSSk7Ci0KLSAgICBnX2Fzc2VydCh0ZXN0LT5tX3dlYlZpZXcgPT0gd2Via2l0X2Rvd25s
b2FkX2dldF93ZWJfdmlldyh0ZXN0LT5tX2Rvd25sb2FkLmdldCgpKSk7Ci0gICAgdGVzdC0+Y2Fu
Y2VsRG93bmxvYWRBbmRXYWl0VW50aWxGaW5pc2hlZCgpOwotfQotCi12b2lkIGJlZm9yZUFsbCgp
Ci17Ci0gICAga1NlcnZlciA9IG5ldyBXZWJLaXRUZXN0U2VydmVyKCk7Ci0gICAga1NlcnZlci0+
cnVuKHNlcnZlckNhbGxiYWNrKTsKLQotICAgIGtUZW1wRGlyZWN0b3J5ID0gZ19kaXJfbWFrZV90
bXAoIldlYktpdDJUZXN0cy1YWFhYWFgiLCAwKTsKLSAgICBnX2Fzc2VydChrVGVtcERpcmVjdG9y
eSk7Ci0KLSAgICBEb3dubG9hZFRlc3Q6OmFkZCgiRG93bmxvYWRzIiwgImxvY2FsLWZpbGUiLCB0
ZXN0RG93bmxvYWRMb2NhbEZpbGUpOwotICAgIERvd25sb2FkRXJyb3JUZXN0OjphZGQoIkRvd25s
b2FkcyIsICJsb2NhbC1maWxlLWVycm9yIiwgdGVzdERvd25sb2FkTG9jYWxGaWxlRXJyb3IpOwot
ICAgIERvd25sb2FkVGVzdDo6YWRkKCJEb3dubG9hZHMiLCAicmVtb3RlLWZpbGUiLCB0ZXN0RG93
bmxvYWRSZW1vdGVGaWxlKTsKLSAgICBEb3dubG9hZEVycm9yVGVzdDo6YWRkKCJEb3dubG9hZHMi
LCAicmVtb3RlLWZpbGUtZXJyb3IiLCB0ZXN0RG93bmxvYWRSZW1vdGVGaWxlRXJyb3IpOwotICAg
IFdlYlZpZXdEb3dubG9hZFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJkb3dubG9hZC11cmki
LCB0ZXN0V2ViVmlld0Rvd25sb2FkVVJJKTsKLSAgICBQb2xpY3lSZXNwb25zZURvd25sb2FkVGVz
dDo6YWRkKCJEb3dubG9hZHMiLCAicG9saWN5LWRlY2lzaW9uLWRvd25sb2FkIiwgdGVzdFBvbGlj
eVJlc3BvbnNlRG93bmxvYWQpOwotfQotCi12b2lkIGFmdGVyQWxsKCkKLXsKLSAgICBkZWxldGUg
a1NlcnZlcjsKLSAgICBnX3JtZGlyKGtUZW1wRGlyZWN0b3J5KTsKLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RGcmFtZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0RnJhbWUuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjNiMDc5Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RGcmFtZS5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSw2OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwuCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJXZWJQcm9jZXNzVGVzdFJ1bm5lci5oIgot
I2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUg
PHdlYmtpdDIvd2Via2l0Mi5oPgotCi1zdGF0aWMgV2ViUHJvY2Vzc1Rlc3RSdW5uZXIqIHRlc3RS
dW5uZXI7Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdEZyYW1lVGVzdFJ1bihXZWJWaWV3VGVzdCogdGVz
dCwgY29uc3QgY2hhciogdGVzdE5hbWUpCi17Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHRlc3RI
VE1MID0gIjxodG1sPjxib2R5PjwvYm9keT48L2h0bWw+IjsKLSAgICB0ZXN0LT5sb2FkSHRtbCh0
ZXN0SFRNTCwgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBH
VmFyaWFudEJ1aWxkZXIgYnVpbGRlcjsKLSAgICBnX3ZhcmlhbnRfYnVpbGRlcl9pbml0KCZidWls
ZGVyLCBHX1ZBUklBTlRfVFlQRV9WQVJESUNUKTsKLSAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQo
JmJ1aWxkZXIsICJ7c3Z9IiwgInBhZ2VJRCIsIGdfdmFyaWFudF9uZXdfdWludDY0KHdlYmtpdF93
ZWJfdmlld19nZXRfcGFnZV9pZCh0ZXN0LT5tX3dlYlZpZXcpKSk7Ci0gICAgZ19hc3NlcnQodGVz
dFJ1bm5lci0+cnVuVGVzdCgiV2ViS2l0RnJhbWUiLCB0ZXN0TmFtZSwgZ192YXJpYW50X2J1aWxk
ZXJfZW5kKCZidWlsZGVyKSkpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViS2l0RnJhbWVNYWlu
RnJhbWUoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgd2Via2l0RnJh
bWVUZXN0UnVuKHRlc3QsICJtYWluLWZyYW1lIik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJL
aXRGcmFtZVVSSShXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB3ZWJr
aXRGcmFtZVRlc3RSdW4odGVzdCwgInVyaSIpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViS2l0
RnJhbWVKYXZhU2NyaXB0Q29udGV4dChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikK
LXsKLSAgICB3ZWJraXRGcmFtZVRlc3RSdW4odGVzdCwgImphdmFzY3JpcHQtY29udGV4dCIpOwot
fQotCi12b2lkIGJlZm9yZUFsbCgpCi17Ci0gICAgdGVzdFJ1bm5lciA9IG5ldyBXZWJQcm9jZXNz
VGVzdFJ1bm5lcigpOwotICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfd2ViX2V4dGVuc2lvbnNf
ZGlyZWN0b3J5KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpLCBXRUJLSVRfVEVTVF9X
RUJfRVhURU5TSU9OU19ESVIpOwotCi0gICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0RnJhbWUi
LCAibWFpbi1mcmFtZSIsIHRlc3RXZWJLaXRGcmFtZU1haW5GcmFtZSk7Ci0gICAgV2ViVmlld1Rl
c3Q6OmFkZCgiV2ViS2l0RnJhbWUiLCAidXJpIiwgdGVzdFdlYktpdEZyYW1lVVJJKTsKLSAgICBX
ZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRGcmFtZSIsICJqYXZhc2NyaXB0LWNvbnRleHQiLCB0ZXN0
V2ViS2l0RnJhbWVKYXZhU2NyaXB0Q29udGV4dCk7Ci19Ci0KLXZvaWQgYWZ0ZXJBbGwoKQotewot
ICAgIGRlbGV0ZSB0ZXN0UnVubmVyOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdEluc3BlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0SW5zcGVjdG9yLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMWYwNDMwMy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0SW5zcGVjdG9yLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDM1NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCi0jaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLQotY2xhc3MgSW5z
cGVjdG9yVGVzdDogcHVibGljIFdlYlZpZXdUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJf
VEVTVF9GSVhUVVJFKEluc3BlY3RvclRlc3QpOwotCi0gICAgZW51bSBJbnNwZWN0b3JFdmVudHMg
ewotICAgICAgICBPcGVuV2luZG93LAotICAgICAgICBCcmluZ1RvRnJvbnQsCi0gICAgICAgIENs
b3NlZCwKLSAgICAgICAgQXR0YWNoLAotICAgICAgICBEZXRhY2gKLSAgICB9OwotCi0gICAgc3Rh
dGljIGdib29sZWFuIG9wZW5XaW5kb3dDYWxsYmFjayhXZWJLaXRXZWJJbnNwZWN0b3IqLCBJbnNw
ZWN0b3JUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRlc3QtPm9wZW5XaW5kb3co
KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZ2Jvb2xlYW4gYnJpbmdUb0Zyb250Q2FsbGJhY2soV2Vi
S2l0V2ViSW5zcGVjdG9yKiwgSW5zcGVjdG9yVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiB0ZXN0LT5icmluZ1RvRnJvbnQoKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBjbG9z
ZWRDYWxsYmFjayhXZWJLaXRXZWJJbnNwZWN0b3IqLCBJbnNwZWN0b3JUZXN0KiB0ZXN0KQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRlc3QtPmNsb3NlZCgpOwotICAgIH0KLQotICAgIHN0YXRpYyBn
Ym9vbGVhbiBhdHRhY2hDYWxsYmFjayhXZWJLaXRXZWJJbnNwZWN0b3IqLCBJbnNwZWN0b3JUZXN0
KiB0ZXN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRlc3QtPmF0dGFjaCgpOwotICAgIH0KLQot
ICAgIHN0YXRpYyBnYm9vbGVhbiBkZXRhY2hDYWxsYmFjayhXZWJLaXRXZWJJbnNwZWN0b3IqLCBJ
bnNwZWN0b3JUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRlc3QtPmRldGFjaCgp
OwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBnTWluaW11bUF0dGFjaGVkSW5z
cGVjdG9yV2lkdGggPSA3NTA7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGdNaW5pbXVtQXR0
YWNoZWRJbnNwZWN0b3JIZWlnaHQgPSAyNTA7Ci0KLSAgICBJbnNwZWN0b3JUZXN0KCkKLSAgICAg
ICAgOiBXZWJWaWV3VGVzdCgpCi0gICAgICAgICwgbV9pbnNwZWN0b3Iod2Via2l0X3dlYl92aWV3
X2dldF9pbnNwZWN0b3IobV93ZWJWaWV3KSkKLSAgICB7Ci0gICAgICAgIHdlYmtpdF9zZXR0aW5n
c19zZXRfZW5hYmxlX2RldmVsb3Blcl9leHRyYXMod2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5n
cyhtX3dlYlZpZXcpLCBUUlVFKTsKLSAgICAgICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRl
c3RGaW5pc2hlcyhHX09CSkVDVChtX2luc3BlY3RvcikpOwotICAgICAgICBnX3NpZ25hbF9jb25u
ZWN0KG1faW5zcGVjdG9yLCAib3Blbi13aW5kb3ciLCBHX0NBTExCQUNLKG9wZW5XaW5kb3dDYWxs
YmFjayksIHRoaXMpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1faW5zcGVjdG9yLCAiYnJp
bmctdG8tZnJvbnQiLCBHX0NBTExCQUNLKGJyaW5nVG9Gcm9udENhbGxiYWNrKSwgdGhpcyk7Ci0g
ICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9pbnNwZWN0b3IsICJjbG9zZWQiLCBHX0NBTExCQUNL
KGNsb3NlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9pbnNw
ZWN0b3IsICJhdHRhY2giLCBHX0NBTExCQUNLKGF0dGFjaENhbGxiYWNrKSwgdGhpcyk7Ci0gICAg
ICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9pbnNwZWN0b3IsICJkZXRhY2giLCBHX0NBTExCQUNLKGRl
dGFjaENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgfQotCi0gICAgfkluc3BlY3RvclRlc3QoKQotICAg
IHsKLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1faW5zcGVj
dG9yLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKLSAgICB9Ci0KLSAg
ICB2aXJ0dWFsIGJvb2wgb3BlbldpbmRvdygpCi0gICAgewotICAgICAgICBtX2V2ZW50cy5hcHBl
bmQoT3BlbldpbmRvdyk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7Ci0g
ICAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQotICAgIHZpcnR1YWwgYm9vbCBicmluZ1RvRnJv
bnQoKQotICAgIHsKLSAgICAgICAgbV9ldmVudHMuYXBwZW5kKEJyaW5nVG9Gcm9udCk7Ci0gICAg
ICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7Ci0gICAgICAgIHJldHVybiBGQUxTRTsK
LSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2VkKCkKLSAgICB7Ci0gICAgICAgIG1fZXZl
bnRzLmFwcGVuZChDbG9zZWQpOwotICAgIH0KLQotICAgIHZpcnR1YWwgYm9vbCBhdHRhY2goKQot
ICAgIHsKLSAgICAgICAgbV9ldmVudHMuYXBwZW5kKEF0dGFjaCk7Ci0gICAgICAgIHJldHVybiBU
UlVFOwotICAgIH0KLQotICAgIHZpcnR1YWwgYm9vbCBkZXRhY2goKQotICAgIHsKLSAgICAgICAg
bV9ldmVudHMuYXBwZW5kKERldGFjaCk7Ci0gICAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQot
Ci0gICAgc3RhdGljIGdib29sZWFuIHNob3dJZGxlKEluc3BlY3RvclRlc3QqIHRlc3QpCi0gICAg
ewotICAgICAgICB3ZWJraXRfd2ViX2luc3BlY3Rvcl9zaG93KHRlc3QtPm1faW5zcGVjdG9yKTsK
LSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQotICAgIHZvaWQgc2hvdygpCi0gICAgewot
ICAgICAgICBnX2lkbGVfYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHNob3dJZGxl
KSwgdGhpcyk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAgICB9Ci0K
LSAgICB2b2lkIHJlc2l6ZVZpZXdBbmRBdHRhY2goKQotICAgIHsKLSAgICAgICAgLy8gUmVzaXpl
IHRoZSB2aWV3IHRvIG1ha2Ugcm9vbSBmb3IgdGhlIGluc3BlY3Rvci4KLSAgICAgICAgcmVzaXpl
VmlldyhnTWluaW11bUF0dGFjaGVkSW5zcGVjdG9yV2lkdGgsIChnTWluaW11bUF0dGFjaGVkSW5z
cGVjdG9ySGVpZ2h0ICsgMSkgKiA0IC8gMyk7Ci0gICAgICAgIHdlYmtpdF93ZWJfaW5zcGVjdG9y
X2F0dGFjaChtX2luc3BlY3Rvcik7Ci0gICAgfQotCi0gICAgc3RhdGljIGdib29sZWFuIGRldGFj
aElkbGUoSW5zcGVjdG9yVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHdlYmtpdF93ZWJfaW5z
cGVjdG9yX2RldGFjaCh0ZXN0LT5tX2luc3BlY3Rvcik7Ci0gICAgICAgIHJldHVybiBGQUxTRTsK
LSAgICB9Ci0KLSAgICB2b2lkIGRldGFjaEFuZFdhaXRVbnRpbFdpbmRvd09wZW5lZCgpCi0gICAg
ewotICAgICAgICBnX2lkbGVfYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KGRldGFj
aElkbGUpLCB0aGlzKTsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotICAg
IH0KLQotICAgIHZvaWQgY2xvc2UoKQotICAgIHsKLSAgICAgICAgd2Via2l0X3dlYl9pbnNwZWN0
b3JfY2xvc2UobV9pbnNwZWN0b3IpOwotICAgIH0KLQotICAgIFdlYktpdFdlYkluc3BlY3Rvciog
bV9pbnNwZWN0b3I7Ci0gICAgVmVjdG9yPEluc3BlY3RvckV2ZW50cz4gbV9ldmVudHM7Ci19Owot
Ci1zdGF0aWMgdm9pZCB0ZXN0SW5zcGVjdG9yRGVmYXVsdChJbnNwZWN0b3JUZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBl
ZChHVEtfV0lORE9XX1RPUExFVkVMKTsKLSAgICB0ZXN0LT5yZXNpemVWaWV3KDIwMCwgMjAwKTsK
LSAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHk+PHA+V2ViS2l0R1RLKyBJbnNwZWN0b3Ig
dGVzdDwvcD48L2JvZHk+PC9odG1sPiIsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5p
c2hlZCgpOwotCi0gICAgdGVzdC0+c2hvdygpOwotICAgIC8vIFdlIGRvbid0IGFkZCB0aGUgdmll
dyB0byBhIGNvbnRhaW5lciwgc28gY29uc3VtZSB0aGUgd2VhayByZWYgd2l0aCBHUmVmUHRyLgot
ICAgIEdSZWZQdHI8V2ViS2l0V2ViVmlld0Jhc2U+IGluc3BlY3RvclZpZXcgPSB3ZWJraXRfd2Vi
X2luc3BlY3Rvcl9nZXRfd2ViX3ZpZXcodGVzdC0+bV9pbnNwZWN0b3IpOwotICAgIGdfYXNzZXJ0
KGluc3BlY3RvclZpZXcuZ2V0KCkpOwotICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdo
ZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QoaW5zcGVjdG9yVmlldy5nZXQoKSkpOwotICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfd2ViX2luc3BlY3Rvcl9pc19hdHRhY2hlZCh0ZXN0LT5tX2luc3BlY3Rvcikp
OwotICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X3dlYl9pbnNwZWN0b3JfZ2V0X2F0dGFjaGVk
X2hlaWdodCh0ZXN0LT5tX2luc3BlY3RvciksID09LCAwKTsKLSAgICBWZWN0b3I8SW5zcGVjdG9y
VGVzdDo6SW5zcGVjdG9yRXZlbnRzPiYgZXZlbnRzID0gdGVzdC0+bV9ldmVudHM7Ci0gICAgZ19h
c3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAxKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
ZXZlbnRzWzBdLCA9PSwgSW5zcGVjdG9yVGVzdDo6T3BlbldpbmRvdyk7Ci0gICAgdGVzdC0+bV9l
dmVudHMuY2xlYXIoKTsKLQotICAgIHRlc3QtPnNob3coKTsKLSAgICBldmVudHMgPSB0ZXN0LT5t
X2V2ZW50czsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDEpOwotICAg
IGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBJbnNwZWN0b3JUZXN0OjpCcmluZ1RvRnJv
bnQpOwotICAgIHRlc3QtPm1fZXZlbnRzLmNsZWFyKCk7Ci0KLSAgICB0ZXN0LT5yZXNpemVWaWV3
QW5kQXR0YWNoKCk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3dlYl9pbnNwZWN0b3JfaXNfYXR0YWNo
ZWQodGVzdC0+bV9pbnNwZWN0b3IpKTsKLSAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF93ZWJf
aW5zcGVjdG9yX2dldF9hdHRhY2hlZF9oZWlnaHQodGVzdC0+bV9pbnNwZWN0b3IpLCA+PSwgSW5z
cGVjdG9yVGVzdDo6Z01pbmltdW1BdHRhY2hlZEluc3BlY3RvckhlaWdodCk7Ci0gICAgZXZlbnRz
ID0gdGVzdC0+bV9ldmVudHM7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09
LCAxKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgSW5zcGVjdG9yVGVzdDo6
QXR0YWNoKTsKLSAgICB0ZXN0LT5tX2V2ZW50cy5jbGVhcigpOwotCi0gICAgdGVzdC0+ZGV0YWNo
QW5kV2FpdFVudGlsV2luZG93T3BlbmVkKCk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfaW5z
cGVjdG9yX2lzX2F0dGFjaGVkKHRlc3QtPm1faW5zcGVjdG9yKSk7Ci0gICAgZXZlbnRzID0gdGVz
dC0+bV9ldmVudHM7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAyKTsK
LSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgSW5zcGVjdG9yVGVzdDo6RGV0YWNo
KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgSW5zcGVjdG9yVGVzdDo6T3Bl
bldpbmRvdyk7Ci0gICAgdGVzdC0+bV9ldmVudHMuY2xlYXIoKTsKLQotICAgIHRlc3QtPmNsb3Nl
KCk7Ci0gICAgZXZlbnRzID0gdGVzdC0+bV9ldmVudHM7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2
ZW50cy5zaXplKCksID09LCAxKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwg
SW5zcGVjdG9yVGVzdDo6Q2xvc2VkKTsKLSAgICB0ZXN0LT5tX2V2ZW50cy5jbGVhcigpOwotfQot
Ci1jbGFzcyBDdXN0b21JbnNwZWN0b3JUZXN0OiBwdWJsaWMgSW5zcGVjdG9yVGVzdCB7Ci1wdWJs
aWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShDdXN0b21JbnNwZWN0b3JUZXN0KTsKLQot
ICAgIEN1c3RvbUluc3BlY3RvclRlc3QoKQotICAgICAgICA6IEluc3BlY3RvclRlc3QoKQotICAg
ICAgICAsIG1faW5zcGVjdG9yV2luZG93KDApCi0gICAgewotICAgIH0KLQotICAgIH5DdXN0b21J
bnNwZWN0b3JUZXN0KCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2luc3BlY3RvcldpbmRvdykKLSAg
ICAgICAgICAgIGd0a193aWRnZXRfZGVzdHJveShtX2luc3BlY3RvcldpbmRvdyk7Ci0gICAgfQot
Ci0gICAgYm9vbCBvcGVuV2luZG93KCkKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0KCFtX2luc3Bl
Y3RvcldpbmRvdyk7Ci0gICAgICAgIG1faW5zcGVjdG9yV2luZG93ID0gZ3RrX3dpbmRvd19uZXco
R1RLX1dJTkRPV19UT1BMRVZFTCk7Ci0gICAgICAgIFdlYktpdFdlYlZpZXdCYXNlKiBpbnNwZWN0
b3JWaWV3ID0gd2Via2l0X3dlYl9pbnNwZWN0b3JfZ2V0X3dlYl92aWV3KG1faW5zcGVjdG9yKTsK
LSAgICAgICAgZ19hc3NlcnQoaW5zcGVjdG9yVmlldyk7Ci0gICAgICAgIGd0a19jb250YWluZXJf
YWRkKEdUS19DT05UQUlORVIobV9pbnNwZWN0b3JXaW5kb3cpLCBHVEtfV0lER0VUKGluc3BlY3Rv
clZpZXcpKTsKLSAgICAgICAgZ3RrX3dpZGdldF9zaG93X2FsbChtX2luc3BlY3RvcldpbmRvdyk7
Ci0KLSAgICAgICAgcmV0dXJuIEluc3BlY3RvclRlc3Q6Om9wZW5XaW5kb3coKTsKLSAgICB9Ci0K
LSAgICB2b2lkIGNsb3NlZCgpCi0gICAgewotICAgICAgICBpZiAobV9pbnNwZWN0b3JXaW5kb3cp
IHsKLSAgICAgICAgICAgIGd0a193aWRnZXRfZGVzdHJveShtX2luc3BlY3RvcldpbmRvdyk7Ci0g
ICAgICAgICAgICBtX2luc3BlY3RvcldpbmRvdyA9IDA7Ci0gICAgICAgIH0KLQotICAgICAgICBy
ZXR1cm4gSW5zcGVjdG9yVGVzdDo6Y2xvc2VkKCk7Ci0gICAgfQotCi0gICAgYm9vbCBhdHRhY2go
KQotICAgIHsKLSAgICAgICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3QmFzZT4gaW5zcGVjdG9yVmll
dyA9IHdlYmtpdF93ZWJfaW5zcGVjdG9yX2dldF93ZWJfdmlldyhtX2luc3BlY3Rvcik7Ci0gICAg
ICAgIGlmIChtX2luc3BlY3RvcldpbmRvdykgewotICAgICAgICAgICAgZ3RrX2NvbnRhaW5lcl9y
ZW1vdmUoR1RLX0NPTlRBSU5FUihtX2luc3BlY3RvcldpbmRvdyksIEdUS19XSURHRVQoaW5zcGVj
dG9yVmlldy5nZXQoKSkpOwotICAgICAgICAgICAgZ3RrX3dpZGdldF9kZXN0cm95KG1faW5zcGVj
dG9yV2luZG93KTsKLSAgICAgICAgICAgIG1faW5zcGVjdG9yV2luZG93ID0gMDsKLSAgICAgICAg
fQotCi0gICAgICAgIEd0a1dpZGdldCogcGFuZTsKLSAgICAgICAgaWYgKGd0a19iaW5fZ2V0X2No
aWxkKEdUS19CSU4obV9wYXJlbnRXaW5kb3cpKSA9PSBHVEtfV0lER0VUKG1fd2ViVmlldykpIHsK
LSAgICAgICAgICAgIEdSZWZQdHI8V2ViS2l0V2ViVmlldz4gaW5zcGVjdGVkVmlldyA9IG1fd2Vi
VmlldzsKLSAgICAgICAgICAgIGd0a19jb250YWluZXJfcmVtb3ZlKEdUS19DT05UQUlORVIobV9w
YXJlbnRXaW5kb3cpLCBHVEtfV0lER0VUKG1fd2ViVmlldykpOwotICAgICAgICAgICAgcGFuZSA9
IGd0a19wYW5lZF9uZXcoR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMKTsKLSAgICAgICAgICAgIGd0
a19wYW5lZF9hZGQxKEdUS19QQU5FRChwYW5lKSwgR1RLX1dJREdFVChtX3dlYlZpZXcpKTsKLSAg
ICAgICAgICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIobV9wYXJlbnRXaW5kb3cp
LCBwYW5lKTsKLSAgICAgICAgICAgIGd0a193aWRnZXRfc2hvd19hbGwocGFuZSk7Ci0gICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgcGFuZSA9IGd0a19iaW5fZ2V0X2NoaWxkKEdUS19CSU4obV9w
YXJlbnRXaW5kb3cpKTsKLSAgICAgICAgZ3RrX3BhbmVkX3NldF9wb3NpdGlvbihHVEtfUEFORUQo
cGFuZSksIHdlYmtpdF93ZWJfaW5zcGVjdG9yX2dldF9hdHRhY2hlZF9oZWlnaHQobV9pbnNwZWN0
b3IpKTsKLSAgICAgICAgZ3RrX3BhbmVkX2FkZDIoR1RLX1BBTkVEKHBhbmUpLCBHVEtfV0lER0VU
KGluc3BlY3RvclZpZXcuZ2V0KCkpKTsKLQotICAgICAgICByZXR1cm4gSW5zcGVjdG9yVGVzdDo6
YXR0YWNoKCk7Ci0gICAgfQotCi0gICAgYm9vbCBkZXRhY2goKQotICAgIHsKLSAgICAgICAgR1Jl
ZlB0cjxXZWJLaXRXZWJWaWV3QmFzZT4gaW5zcGVjdG9yVmlldyA9IHdlYmtpdF93ZWJfaW5zcGVj
dG9yX2dldF93ZWJfdmlldyhtX2luc3BlY3Rvcik7Ci0gICAgICAgIEd0a1dpZGdldCogcGFuZSA9
IGd0a19iaW5fZ2V0X2NoaWxkKEdUS19CSU4obV9wYXJlbnRXaW5kb3cpKTsKLSAgICAgICAgZ19h
c3NlcnQoR1RLX0lTX1BBTkVEKHBhbmUpKTsKLSAgICAgICAgZ3RrX2NvbnRhaW5lcl9yZW1vdmUo
R1RLX0NPTlRBSU5FUihwYW5lKSwgR1RLX1dJREdFVChpbnNwZWN0b3JWaWV3LmdldCgpKSk7Ci0g
ICAgICAgIHJldHVybiBJbnNwZWN0b3JUZXN0OjpkZXRhY2goKTsKLSAgICB9Ci0KLSAgICB2b2lk
IGRlc3Ryb3lXaW5kb3coKQotICAgIHsKLSAgICAgICAgZ19hc3NlcnQobV9pbnNwZWN0b3JXaW5k
b3cpOwotICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV9pbnNwZWN0b3JXaW5kb3cpOwotICAg
ICAgICBtX2luc3BlY3RvcldpbmRvdyA9IDA7Ci0gICAgfQotCi0gICAgR3RrV2lkZ2V0KiBtX2lu
c3BlY3RvcldpbmRvdzsKLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RJbnNwZWN0b3JNYW51YWxBdHRh
Y2hEZXRhY2goQ3VzdG9tSW5zcGVjdG9yVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAg
ICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoR1RLX1dJTkRPV19UT1BMRVZF
TCk7Ci0gICAgdGVzdC0+cmVzaXplVmlldygyMDAsIDIwMCk7Ci0gICAgdGVzdC0+bG9hZEh0bWwo
IjxodG1sPjxib2R5PjxwPldlYktpdEdUSysgSW5zcGVjdG9yIHRlc3Q8L3A+PC9ib2R5PjwvaHRt
bD4iLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIHRlc3Qt
PnNob3coKTsKLSAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVz
KEdfT0JKRUNUKHdlYmtpdF93ZWJfaW5zcGVjdG9yX2dldF93ZWJfdmlldyh0ZXN0LT5tX2luc3Bl
Y3RvcikpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl9pbnNwZWN0b3JfaXNfYXR0YWNoZWQo
dGVzdC0+bV9pbnNwZWN0b3IpKTsKLSAgICBWZWN0b3I8SW5zcGVjdG9yVGVzdDo6SW5zcGVjdG9y
RXZlbnRzPiYgZXZlbnRzID0gdGVzdC0+bV9ldmVudHM7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2
ZW50cy5zaXplKCksID09LCAxKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwg
SW5zcGVjdG9yVGVzdDo6T3BlbldpbmRvdyk7Ci0gICAgdGVzdC0+bV9ldmVudHMuY2xlYXIoKTsK
LQotICAgIHRlc3QtPnJlc2l6ZVZpZXdBbmRBdHRhY2goKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRf
d2ViX2luc3BlY3Rvcl9pc19hdHRhY2hlZCh0ZXN0LT5tX2luc3BlY3RvcikpOwotICAgIGdfYXNz
ZXJ0X2NtcHVpbnQod2Via2l0X3dlYl9pbnNwZWN0b3JfZ2V0X2F0dGFjaGVkX2hlaWdodCh0ZXN0
LT5tX2luc3BlY3RvciksID49LCBJbnNwZWN0b3JUZXN0OjpnTWluaW11bUF0dGFjaGVkSW5zcGVj
dG9ySGVpZ2h0KTsKLSAgICBldmVudHMgPSB0ZXN0LT5tX2V2ZW50czsKLSAgICBnX2Fzc2VydF9j
bXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDEpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNb
MF0sID09LCBJbnNwZWN0b3JUZXN0OjpBdHRhY2gpOwotICAgIHRlc3QtPm1fZXZlbnRzLmNsZWFy
KCk7Ci0KLSAgICB0ZXN0LT5kZXRhY2hBbmRXYWl0VW50aWxXaW5kb3dPcGVuZWQoKTsKLSAgICBn
X2Fzc2VydCghd2Via2l0X3dlYl9pbnNwZWN0b3JfaXNfYXR0YWNoZWQodGVzdC0+bV9pbnNwZWN0
b3IpKTsKLSAgICBldmVudHMgPSB0ZXN0LT5tX2V2ZW50czsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
ZXZlbnRzLnNpemUoKSwgPT0sIDIpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09
LCBJbnNwZWN0b3JUZXN0OjpEZXRhY2gpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0s
ID09LCBJbnNwZWN0b3JUZXN0OjpPcGVuV2luZG93KTsKLSAgICB0ZXN0LT5tX2V2ZW50cy5jbGVh
cigpOwotCi0gICAgdGVzdC0+cmVzaXplVmlld0FuZEF0dGFjaCgpOwotICAgIGdfYXNzZXJ0KHdl
YmtpdF93ZWJfaW5zcGVjdG9yX2lzX2F0dGFjaGVkKHRlc3QtPm1faW5zcGVjdG9yKSk7Ci0gICAg
dGVzdC0+bV9ldmVudHMuY2xlYXIoKTsKLSAgICB0ZXN0LT5jbG9zZSgpOwotICAgIGV2ZW50cyA9
IHRlc3QtPm1fZXZlbnRzOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwg
Mik7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIEluc3BlY3RvclRlc3Q6OkRl
dGFjaCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIEluc3BlY3RvclRlc3Q6
OkNsb3NlZCk7Ci0gICAgdGVzdC0+bV9ldmVudHMuY2xlYXIoKTsKLX0KLQotc3RhdGljIHZvaWQg
dGVzdEluc3BlY3RvckN1c3RvbUNvbnRhaW5lckRlc3Ryb3llZChDdXN0b21JbnNwZWN0b3JUZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRV
bnRpbE1hcHBlZChHVEtfV0lORE9XX1RPUExFVkVMKTsKLSAgICB0ZXN0LT5yZXNpemVWaWV3KDIw
MCwgMjAwKTsKLSAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHk+PHA+V2ViS2l0R1RLKyBJ
bnNwZWN0b3IgdGVzdDwvcD48L2JvZHk+PC9odG1sPiIsIDApOwotICAgIHRlc3QtPndhaXRVbnRp
bExvYWRGaW5pc2hlZCgpOwotCi0gICAgdGVzdC0+c2hvdygpOwotICAgIHRlc3QtPmFzc2VydE9i
amVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1Qod2Via2l0X3dlYl9pbnNwZWN0
b3JfZ2V0X3dlYl92aWV3KHRlc3QtPm1faW5zcGVjdG9yKSkpOwotICAgIGdfYXNzZXJ0KCF3ZWJr
aXRfd2ViX2luc3BlY3Rvcl9pc19hdHRhY2hlZCh0ZXN0LT5tX2luc3BlY3RvcikpOwotCi0gICAg
dGVzdC0+bV9ldmVudHMuY2xlYXIoKTsKLSAgICB0ZXN0LT5kZXN0cm95V2luZG93KCk7Ci0gICAg
VmVjdG9yPEluc3BlY3RvclRlc3Q6Okluc3BlY3RvckV2ZW50cz4mIGV2ZW50cyA9IHRlc3QtPm1f
ZXZlbnRzOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgMSk7Ci0gICAg
Z19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIEluc3BlY3RvclRlc3Q6OkNsb3NlZCk7Ci0g
ICAgdGVzdC0+bV9ldmVudHMuY2xlYXIoKTsKLX0KLQotdm9pZCBiZWZvcmVBbGwoKQotewotICAg
IEluc3BlY3RvclRlc3Q6OmFkZCgiV2ViS2l0V2ViSW5zcGVjdG9yIiwgImRlZmF1bHQiLCB0ZXN0
SW5zcGVjdG9yRGVmYXVsdCk7Ci0gICAgQ3VzdG9tSW5zcGVjdG9yVGVzdDo6YWRkKCJXZWJLaXRX
ZWJJbnNwZWN0b3IiLCAibWFudWFsLWF0dGFjaC1kZXRhY2giLCB0ZXN0SW5zcGVjdG9yTWFudWFs
QXR0YWNoRGV0YWNoKTsKLSAgICBDdXN0b21JbnNwZWN0b3JUZXN0OjphZGQoIldlYktpdFdlYklu
c3BlY3RvciIsICJjdXN0b20tY29udGFpbmVyLWRlc3Ryb3llZCIsIHRlc3RJbnNwZWN0b3JDdXN0
b21Db250YWluZXJEZXN0cm95ZWQpOwotfQotCi12b2lkIGFmdGVyQWxsKCkKLXsKLX0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RJbnNwZWN0
b3JTZXJ2ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVz
dEluc3BlY3RvclNlcnZlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmNGJm
NTQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
VGVzdEluc3BlY3RvclNlcnZlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyOTQgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzIEx0ZC4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECi0g
KiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUgotICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0j
aW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLS8vIE5hbWUgb2YgdGhlIHRlc3Qg
c2VydmVyIGFwcGxpY2F0aW9uIGNyZWF0aW5nIHRoZSB3ZWJWaWV3IG9iamVjdC4KLXN0YXRpYyBj
b25zdCBjaGFyKiBnVGVzdFNlcnZlckFwcE5hbWUgPSAiSW5zcGVjdG9yVGVzdFNlcnZlciI7Ci0K
LS8vIE1heCBzZWNvbmRzIHRvIHdhaXQgZm9yIHRoZSB0ZXN0IHNlcnZlciBiZWZvcmUgaW5zcGVj
dGluZyBpdC4KLXN0YXRpYyBjb25zdCBpbnQgZ01heFdhaXRGb3JDaGlsZCA9IDU7Ci0KLS8vIFRo
ZSBQSUQgZm9yIHRoZSB0ZXN0IHNlcnZlciBydW5uaW5nLCBzbyB3ZSBjYW4ga2lsbCBpdCBpZiBu
ZWVkZWQuCi1zdGF0aWMgR1BpZCBnQ2hpbGRQcm9jZXNzUGlkID0gMDsKLQotLy8gV2hldGhlciB0
aGUgY2hpbGQgaGFzIHJlcGxpZWQgYW5kIGl0J3MgcmVhZHkuCi1zdGF0aWMgYm9vbCBnQ2hpbGRJ
c1JlYWR5ID0gZmFsc2U7Ci0KLXN0YXRpYyB2b2lkIHN0b3BUZXN0U2VydmVyKCkKLXsKLSAgICAv
LyBEbyBub3RoaW5nIGlmIHRoZXJlJ3Mgbm8gc2VydmVyIHJ1bm5pbmcuCi0gICAgaWYgKCFnQ2hp
bGRQcm9jZXNzUGlkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBnX3NwYXduX2Nsb3NlX3BpZChn
Q2hpbGRQcm9jZXNzUGlkKTsKLSAgICBraWxsKGdDaGlsZFByb2Nlc3NQaWQsIFNJR1RFUk0pOwot
ICAgIGdDaGlsZFByb2Nlc3NQaWQgPSAwOwotfQotCi1zdGF0aWMgdm9pZCBzaWdBYm9ydEhhbmRs
ZXIoaW50IHNpZ051bSkKLXsKLSAgICAvLyBKdXN0IHN0b3AgdGhlIHRlc3Qgc2VydmVyIGlmIFNJ
R0FCUlQgd2FzIHJlY2VpdmVkLgotICAgIHN0b3BUZXN0U2VydmVyKCk7Ci19Ci0KLXN0YXRpYyBn
cG9pbnRlciB0ZXN0U2VydmVyTW9uaXRvclRocmVhZEZ1bmMoZ3BvaW50ZXIpCi17Ci0gICAgLy8g
V2FpdCBmb3IgdGhlIHNwZWNpZmllZCB0aW1lb3V0IHRvIGhhcHBlbi4KLSAgICBnX3VzbGVlcChn
TWF4V2FpdEZvckNoaWxkICogR19VU0VDX1BFUl9TRUMpOwotCi0gICAgLy8gS2lsbCB0aGUgY2hp
bGQgcHJvY2VzcyBpZiBub3QgcmVhZHkgeWV0LgotICAgIGlmICghZ0NoaWxkSXNSZWFkeSkKLSAg
ICAgICAgc3RvcFRlc3RTZXJ2ZXIoKTsKLQotICAgIGdfdGhyZWFkX2V4aXQoMCk7Ci0gICAgcmV0
dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0YXJ0VGVzdFNlcnZlck1vbml0b3IoKQotewotICAg
IGdDaGlsZElzUmVhZHkgPSBmYWxzZTsKLSAgICBnX3RocmVhZF9uZXcoIlRlc3RTZXJ2ZXJNb25p
dG9yIiwgdGVzdFNlcnZlck1vbml0b3JUaHJlYWRGdW5jLCAwKTsKLX0KLQotc3RhdGljIHZvaWQg
c3RhcnRUZXN0U2VydmVyKCkKLXsKLSAgICAvLyBQcmVwYXJlIGFyZ3ZbXSBmb3Igc3Bhd25pbmcg
dGhlIHNlcnZlciBwcm9jZXNzLgotICAgIEdPd25QdHI8Y2hhcj4gdGVzdFNlcnZlclBhdGgoZ19i
dWlsZF9maWxlbmFtZShXRUJLSVRfRVhFQ19QQVRILCAiV2ViS2l0MkdPYmplY3RBUElUZXN0cyIs
IGdUZXN0U2VydmVyQXBwTmFtZSwgTlVMTCkpOwotCi0gICAgLy8gV2UgaW5zdGFsbCBhIGhhbmRs
ZXIgdG8gZW5zdXJlIHRoYXQgd2Uga2lsbCB0aGUgY2hpbGQgcHJvY2VzcwotICAgIC8vIGlmIHRo
ZSBwYXJlbnQgZGllcyBiZWNhdXNlIG9mIHdoYXRldmVyIHRoZSByZWFzb24gaXMuCi0gICAgc2ln
bmFsKFNJR0FCUlQsIHNpZ0Fib3J0SGFuZGxlcik7Ci0KLSAgICBjaGFyKiB0ZXN0U2VydmVyQXJn
dlsyXTsKLSAgICB0ZXN0U2VydmVyQXJndlswXSA9IHRlc3RTZXJ2ZXJQYXRoLmdldCgpOwotICAg
IHRlc3RTZXJ2ZXJBcmd2WzFdID0gMDsKLQotICAgIC8vIFNwYXduIHRoZSBzZXJ2ZXIsIGdldHRp
bmcgaXRzIHN0ZG91dCBmaWxlIGRlc2NyaXB0b3IgdG8gc2V0IGEKLSAgICAvLyBjb21tdW5pY2F0
aW9uIGNoYW5uZWwsIHNvIHdlIGtub3cgd2hlbiBpdCdzIHJlYWR5LgotICAgIGludCBjaGlsZFN0
ZG91dCA9IDA7Ci0gICAgZ19hc3NlcnQoZ19zcGF3bl9hc3luY193aXRoX3BpcGVzKDAsIHRlc3RT
ZXJ2ZXJBcmd2LCAwLCBzdGF0aWNfY2FzdDxHU3Bhd25GbGFncz4oMCksIDAsIDAsCi0gICAgICAg
ICZnQ2hpbGRQcm9jZXNzUGlkLCAwLCAmY2hpbGRTdGRvdXQsIDAsIDApKTsKLQotICAgIC8vIFN0
YXJ0IG1vbml0b3JpbmcgdGhlIHRlc3Qgc2VydmVyIChpbiBhIHNlcGFyYXRlIHRocmVhZCkgdG8K
LSAgICAvLyBlbnN1cmUgd2UgZG9uJ3QgYmxvY2sgb24gdGhlIGNoaWxkIHByb2Nlc3MgbW9yZSB0
aGFuIGEgdGltZW91dC4KLSAgICBzdGFydFRlc3RTZXJ2ZXJNb25pdG9yKCk7Ci0KLSAgICBjaGFy
IG1zZ1syXTsKLSAgICBHSU9DaGFubmVsKiBpb0NoYW5uZWwgPSBnX2lvX2NoYW5uZWxfdW5peF9u
ZXcoY2hpbGRTdGRvdXQpOwotICAgIGlmIChnX2lvX2NoYW5uZWxfcmVhZF9jaGFycyhpb0NoYW5u
ZWwsIG1zZywgMiwgMCwgMCkgPT0gR19JT19TVEFUVVNfTk9STUFMKSB7Ci0gICAgICAgIC8vIENo
ZWNrIHdoZXRoZXIgdGhlIHNlcnZlciBzZW50IGEgbWVzc2FnZSBzYXlpbmcgaXQncyByZWFkeQot
ICAgICAgICAvLyBhbmQgc3RvcmUgdGhlIHJlc3VsdCBnbG9iYWxseSwgc28gdGhlIG1vbml0b3Ig
Y2FuIHNlZSBpdC4KLSAgICAgICAgZ0NoaWxkSXNSZWFkeSA9IG1zZ1swXSA9PSAnTycgJiYgbXNn
WzFdID09ICdLJzsKLSAgICB9Ci0gICAgZ19pb19jaGFubmVsX3VucmVmKGlvQ2hhbm5lbCk7Ci0g
ICAgY2xvc2UoY2hpbGRTdGRvdXQpOwotCi0gICAgLy8gVGhlIHRpbWVvdXQgd2FzIHJlYWNoZWQg
YW5kIHRoZSBzZXJ2ZXIgaXMgbm90IHJlYWR5IHlldCwgc28KLSAgICAvLyBzdG9wIGl0IGlubWVk
aWF0ZWx5LCBhbmQgbGV0IHRoZSB1bml0IHRlc3RzIGZhaWwuCi0gICAgaWYgKCFnQ2hpbGRJc1Jl
YWR5KQotICAgICAgICBzdG9wVGVzdFNlcnZlcigpOwotfQotCi1jbGFzcyBJbnNwZWN0b3JTZXJ2
ZXJUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJQl9URVNU
X0ZJWFRVUkUoSW5zcGVjdG9yU2VydmVyVGVzdCk7Ci0KLSAgICBJbnNwZWN0b3JTZXJ2ZXJUZXN0
KCkKLSAgICAgICAgOiBXZWJWaWV3VGVzdCgpCi0gICAgewotICAgIH0KLQotICAgIGJvb2wgZ2V0
UGFnZUxpc3QoKQotICAgIHsKLSAgICAgICAgbG9hZEh0bWwoIjxzY3JpcHQgdHlwZT1cInRleHQv
amF2YXNjcmlwdFwiPlxuIgotICAgICAgICAgICAgInZhciBwYWdlcztcbiIKLSAgICAgICAgICAg
ICJ2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0O1xuIgotICAgICAgICAgICAgInhoci5vcGVu
KFwiR0VUXCIsIFwiL3BhZ2VsaXN0Lmpzb25cIik7XG4iCi0gICAgICAgICAgICAieGhyLm9ubG9h
ZCA9IGZ1bmN0aW9uKGUpIHtcbiIKLSAgICAgICAgICAgICAgICAiaWYgKHhoci5zdGF0dXMgPT0g
MjAwKSB7XG4iCi0gICAgICAgICAgICAgICAgICAgICJwYWdlcyA9IEpTT04ucGFyc2UoeGhyLnJl
c3BvbnNlVGV4dCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICJkb2N1bWVudC50aXRsZSA9IFwi
T0tcIjtcbiIKLSAgICAgICAgICAgICAgICAifSBlbHNlIFxuIgotICAgICAgICAgICAgICAgICAg
ICAiZG9jdW1lbnQudGl0bGUgPSBcIkZBSUxcIjtcbiIKLSAgICAgICAgICAgICAgICAifVxuIgot
ICAgICAgICAgICAgInhoci5zZW5kKCk7XG4iCi0gICAgICAgICAgICAiPC9zY3JpcHQ+XG4iLAot
ICAgICAgICAgICAgImh0dHA6Ly8xMjcuMC4wLjE6Mjk5OS8iKTsKLQotICAgICAgICB3YWl0VW50
aWxUaXRsZUNoYW5nZWQoKTsKLQotICAgICAgICBpZiAoIXN0cmNtcCh3ZWJraXRfd2ViX3ZpZXdf
Z2V0X3RpdGxlKG1fd2ViVmlldyksICJPSyIpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIH5JbnNwZWN0b3JTZXJ2ZXJUZXN0
KCkKLSAgICB7Ci0gICAgfQotfTsKLQotLy8gVGVzdCB0byBnZXQgaW5zcGVjdG9yIHNlcnZlciBw
YWdlIGxpc3QgZnJvbSB0aGUgdGVzdCBzZXJ2ZXIuCi0vLyBTaG91bGQgY29udGFpbiBvbmx5IG9u
ZSBlbnRyeSBwb2ludGluZyB0byBodHRwOi8vMTI3LjAuMC4xOjI5OTkvd2ViaW5zcGVjdG9yL01h
aW4uaHRtbD9wYWdlPTEKLXN0YXRpYyB2b2lkIHRlc3RJbnNwZWN0b3JTZXJ2ZXJQYWdlTGlzdChJ
bnNwZWN0b3JTZXJ2ZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIEdPd25QdHI8
R0Vycm9yPiBlcnJvcjsKLQotICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBl
ZChHVEtfV0lORE9XX1RPUExFVkVMKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5nZXRQYWdlTGlzdCgp
KTsKLQotICAgIFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0
LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoInBhZ2VzLmxlbmd0aDsiLCAmZXJy
b3Iub3V0UHRyKCkpOwotICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOwotICAgIGdfYXNz
ZXJ0KCFlcnJvci5nZXQoKSk7Ci0gICAgZ19hc3NlcnRfY21waW50KFdlYlZpZXdUZXN0OjpqYXZh
c2NyaXB0UmVzdWx0VG9OdW1iZXIoamF2YXNjcmlwdFJlc3VsdCksID09LCAxKTsKLQotICAgIGph
dmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQo
InBhZ2VzWzBdLmlkOyIsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgZ19hc3NlcnQoamF2YXNjcmlw
dFJlc3VsdCk7Ci0gICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKLSAgICBpbnQgcGFnZUlkID0g
V2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb051bWJlcihqYXZhc2NyaXB0UmVzdWx0KTsK
LQotICAgIEdPd25QdHI8Y2hhcj4gdmFsdWVTdHJpbmc7Ci0gICAgamF2YXNjcmlwdFJlc3VsdCA9
IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgicGFnZXNbMF0udXJsOyIs
ICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAg
Z19hc3NlcnQoIWVycm9yLmdldCgpKTsKLSAgICB2YWx1ZVN0cmluZy5zZXQoV2ViVmlld1Rlc3Q6
OmphdmFzY3JpcHRSZXN1bHRUb0NTdHJpbmcoamF2YXNjcmlwdFJlc3VsdCkpOwotICAgIGdfYXNz
ZXJ0X2NtcHN0cih2YWx1ZVN0cmluZy5nZXQoKSwgPT0sICJodHRwOi8vMTI3LjAuMC4xOjI5OTkv
Iik7Ci0KLSAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRV
bnRpbEZpbmlzaGVkKCJwYWdlc1swXS5pbnNwZWN0b3JVcmw7IiwgJmVycm9yLm91dFB0cigpKTsK
LSAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBnX2Fzc2VydCghZXJyb3IuZ2V0
KCkpOwotICAgIHZhbHVlU3RyaW5nLnNldChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRv
Q1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7Ci0gICAgU3RyaW5nIHZhbGlkSW5zcGVjdG9yVVJM
ID0gU3RyaW5nKCIvTWFpbi5odG1sP3BhZ2U9IikgKyBTdHJpbmc6Om51bWJlcihwYWdlSWQpOwot
ICAgIEFTU0VSVF9DTVBfQ1NUUklORyh2YWx1ZVN0cmluZy5nZXQoKSwgPT0sIHZhbGlkSW5zcGVj
dG9yVVJMLnV0ZjgoKSk7Ci19Ci0KLS8vIFRlc3Qgc2VuZGluZyBhIHJhdyByZW1vdGUgZGVidWdn
aW5nIG1lc3NhZ2UgdGhyb3VnaCBvdXIgd2ViIHNvY2tldCBzZXJ2ZXIuCi0vLyBGb3IgdGhpcyBz
cGVjaWZpYyBtZXNzYWdlIHNlZTogaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9jaHJvbWUvZGV2dG9v
bHMvZG9jcy9wcm90b2NvbC90b3QvcnVudGltZS5odG1sI2NvbW1hbmQtZXZhbHVhdGUKLXN0YXRp
YyB2b2lkIHRlc3RSZW1vdGVEZWJ1Z2dpbmdNZXNzYWdlKEluc3BlY3RvclNlcnZlclRlc3QqIHRl
c3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGls
TWFwcGVkKEdUS19XSU5ET1dfVE9QTEVWRUwpOwotCi0gICAgdGVzdC0+bG9hZEh0bWwoIjxzY3Jp
cHQgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiPlxuIgotICAgICAgICAidmFyIHNvY2tldCA9IG5l
dyBXZWJTb2NrZXQoJ3dzOi8vMTI3LjAuMC4xOjI5OTkvZGV2dG9vbHMvcGFnZS8xJyk7XG4iCi0g
ICAgICAgICJzb2NrZXQub25tZXNzYWdlID0gZnVuY3Rpb24obWVzc2FnZSkge1xuIgotICAgICAg
ICAgICAgInZhciByZXNwb25zZSA9IEpTT04ucGFyc2UobWVzc2FnZS5kYXRhKTtcbiIKLSAgICAg
ICAgICAgICJpZiAocmVzcG9uc2UuaWQgPT09IDEpXG4iCi0gICAgICAgICAgICAgICAgImRvY3Vt
ZW50LnRpdGxlID0gcmVzcG9uc2UucmVzdWx0LnJlc3VsdC52YWx1ZTtcbiIKLSAgICAgICAgICAg
ICJlbHNlXG4iCi0gICAgICAgICAgICAgICAgImRvY3VtZW50LnRpdGxlID0gXCJGQUlMXCI7XG4i
Ci0gICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgInNvY2tldC5vbm9wZW4gPSBmdW5jdGlv
bigpIHtcbiIKLSAgICAgICAgICAgICJzb2NrZXQuc2VuZCgne1wiaWRcIjogMSwgXCJtZXRob2Rc
IjogXCJSdW50aW1lLmV2YWx1YXRlXCIsIFwicGFyYW1zXCI6IHtcImV4cHJlc3Npb25cIjogXCIy
ICsgMlwiIH0gfScpO1xuIgotICAgICAgICAifVxuIgotICAgICAgICAiPC9zY3JpcHQ+IiwKLSAg
ICAgICAgImh0dHA6Ly8xMjcuMC4wLjE6Mjk5OS8iKTsKLSAgICB0ZXN0LT53YWl0VW50aWxUaXRs
ZUNoYW5nZWQoKTsKLQotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3Rp
dGxlKHRlc3QtPm1fd2ViVmlldyksID09LCAiNCIpOwotfQotCi1zdGF0aWMgdm9pZCBvcGVuUmVt
b3RlRGVidWdnaW5nU2Vzc2lvbihJbnNwZWN0b3JTZXJ2ZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2lu
dGVyKQotewotICAgIC8vIFRvIHRlc3QgdGhlIHdob2xlIHBpcGVsaW5lIHRoaXMgZXhwbG9pdHMg
YSBiZWhhdmlvciBvZiB0aGUgaW5zcGVjdG9yIGZyb250LWVuZCB3aGljaCB3b24ndCBwcm92aWRl
IHRoZSBwYWdlIGFkZHJlc3MgYXMgdGl0bGUgdW5sZXNzIHRoZQotICAgIC8vIGRlYnVnZ2luZyBz
ZXNzaW9uIHdhcyBlc3RhYmxpc2hlZCBjb3JyZWN0bHkgdGhyb3VnaCB3ZWIgc29ja2V0LgotICAg
IC8vIEluIG91ciBjYXNlIHBhZ2UgVVJMIHNob3VsZCBiZSBodHRwOi8vMTI3LjAuMC4xOjI5OTkv
Ci0gICAgLy8gU28gdGhpcyB0ZXN0IGNhc2Ugd2lsbCBmYWlsIGlmOgotICAgIC8vIC0gVGhlIHBh
Z2UgbGlzdCBkaWRuJ3QgcmV0dXJuIGEgdmFsaWQgaW5zcGVjdG9yIFVSTAotICAgIC8vIC0gT3Ig
dGhlIGZyb250LWVuZCBjb3VsZG4ndCBiZSBsb2FkZWQgdGhyb3VnaCB0aGUgaW5zcGVjdG9yIEhU
VFAgc2VydmVyCi0gICAgLy8gLSBPciB0aGUgd2ViIHNvY2tldCBjb25uZWN0aW9uIGNvdWxkbid0
IGJlIGVzdGFibGlzaGVkIGJldHdlZW4gdGhlIGZyb250LWVuZCBhbmQgdGhlIHBhZ2UgdGhyb3Vn
aCB0aGUgaW5zcGVjdG9yIHNlcnZlcgotICAgIC8vIExldCdzIHNlZSBpZiB0aGlzIHRlc3QgaXNu
J3QgcmFpc2luZyB0b28gbWFueSBmYWxzZSBwb3NpdGl2ZXMsIGluIHdoaWNoIGNhc2Ugd2Ugc2hv
dWxkIHVzZSBhIGJldHRlciBwcmVkaWNhdGUgaWYgYXZhaWxhYmxlLgotCi0gICAgdGVzdC0+c2hv
d0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKEdUS19XSU5ET1dfVE9QTEVWRUwpOwotCi0gICAg
Z19hc3NlcnQodGVzdC0+Z2V0UGFnZUxpc3QoKSk7Ci0KLSAgICBHT3duUHRyPEdFcnJvcj4gZXJy
b3I7Ci0gICAgV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCogamF2YXNjcmlwdFJlc3VsdCA9IHRlc3Qt
PnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgicGFnZXNbMF0uaW5zcGVjdG9yVXJs
OyIsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7Ci0g
ICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKLQotICAgIFN0cmluZyByZXNvbHZlZFVSTCA9IFN0
cmluZygiaHR0cDovLzEyNy4wLjAuMToyOTk5LyIpICsgU3RyaW5nOjpmcm9tVVRGOChXZWJWaWV3
VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7Ci0gICAg
dGVzdC0+bG9hZFVSSShyZXNvbHZlZFVSTC51dGY4KCkuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0
VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5K
YXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoIndpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50
c0J5VGFnTmFtZSgnbGknKVswXS50aXRsZSIsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgZ19hc3Nl
cnQoamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKLQotICAg
IEdPd25QdHI8Y2hhcj4gdGl0bGUoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0NTdHJp
bmcoamF2YXNjcmlwdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih0aXRsZS5nZXQoKSwg
PT0sICJodHRwOi8vMTI3LjAuMC4xOjI5OTkvIik7Ci19Ci0KLXN0YXRpYyB2b2lkIHNlbmRJbmNv
bXBsZXRlUmVxdWVzdChJbnNwZWN0b3JTZXJ2ZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQot
ewotICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKLQotICAgIC8vIENvbm5lY3QgdG8gdGhlIGlu
c3BlY3RvciBzZXJ2ZXIuCi0gICAgR1JlZlB0cjxHU29ja2V0Q2xpZW50PiBjbGllbnQgPSBhZG9w
dEdSZWYoZ19zb2NrZXRfY2xpZW50X25ldygpKTsKLSAgICBHUmVmUHRyPEdTb2NrZXRDb25uZWN0
aW9uPiBjb25uZWN0aW9uID0gYWRvcHRHUmVmKGdfc29ja2V0X2NsaWVudF9jb25uZWN0X3RvX2hv
c3QoY2xpZW50LmdldCgpLCAiMTI3LjAuMC4xIiwgMjk5OSwgMCwgJmVycm9yLm91dFB0cigpKSk7
Ci0gICAgZ19hc3NlcnRfbm9fZXJyb3IoZXJyb3IuZ2V0KCkpOwotCi0gICAgLy8gU2VuZCBpbmNv
bXBsZXRlIHJlcXVlc3QgKG1pc3NpbmcgYmxhbmsgbGluZSBhZnRlciBoZWFkZXJzKSBhbmQgY2hl
Y2sgaWYgaW5zcGVjdG9yIHNlcnZlcgotICAgIC8vIHJlcGxpZXMuIFRoZSBzZXJ2ZXIgc2hvdWxk
IG5vdCByZXBseSB0byBhbiBpbmNvbXBsZXRlIHJlcXVlc3QgYW5kIHRoZSB0ZXN0IHNob3VsZCB0
aW1lb3V0Ci0gICAgLy8gb24gcmVhZC4KLSAgICBHT3V0cHV0U3RyZWFtKiBvc3RyZWFtID0gZ19p
b19zdHJlYW1fZ2V0X291dHB1dF9zdHJlYW0oR19JT19TVFJFQU0oY29ubmVjdGlvbi5nZXQoKSkp
OwotICAgIC8vIFJlcXVlc3QgbWlzc2luZyBibGFuayBsaW5lIGFmdGVyIGhlYWRlcnMuCi0gICAg
Y29uc3QgZ2NoYXIqIGluY29tcGxldGVSZXF1ZXN0ID0gIkdFVCAvZGV2dG9vbHMvcGFnZS8xIEhU
VFAvMS4xXHJcbkhvc3Q6IExvY2FsaG9zdFxyXG4iOwotICAgIGdfb3V0cHV0X3N0cmVhbV93cml0
ZShvc3RyZWFtLCBpbmNvbXBsZXRlUmVxdWVzdCwgc3RybGVuKGluY29tcGxldGVSZXF1ZXN0KSwg
MCwgJmVycm9yLm91dFB0cigpKTsKLSAgICBnX2Fzc2VydF9ub19lcnJvcihlcnJvci5nZXQoKSk7
Ci0KLSAgICBHSW5wdXRTdHJlYW0qIGlzdHJlYW0gPSBnX2lvX3N0cmVhbV9nZXRfaW5wdXRfc3Ry
ZWFtKEdfSU9fU1RSRUFNKGNvbm5lY3Rpb24uZ2V0KCkpKTsKLSAgICBjaGFyIHJlc3BvbnNlWzE2
XTsKLSAgICBtZW1zZXQocmVzcG9uc2UsIDAsIHNpemVvZihyZXNwb25zZSkpOwotICAgIEdSZWZQ
dHI8R0NhbmNlbGxhYmxlPiBjYW5jZWwgPSBhZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSk7
Ci0gICAgZ19pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyhpc3RyZWFtLCByZXNwb25zZSwgc2l6ZW9m
KHJlc3BvbnNlKSAtIDEsIEdfUFJJT1JJVFlfREVGQVVMVCwgY2FuY2VsLmdldCgpLCAwLCAwKTsK
LSAgICAvLyBHaXZlIGEgY2hhbmNlIGZvciB0aGUgc2VydmVyIHRvIHJlcGx5LgotICAgIHRlc3Qt
PndhaXQoMSk7Ci0gICAgZ19jYW5jZWxsYWJsZV9jYW5jZWwoY2FuY2VsLmdldCgpKTsKLSAgICAv
LyBJZiB3ZSBnb3QgYW55IGFuc3dlciBpdCBtZWFucyB0aGUgc2VydmVyIHJlcGxpZWQgdG8gYW4g
aW5jb21wbGV0ZSByZXF1ZXN0LCBsZXRzIGZhaWwuCi0gICAgZ19hc3NlcnQocmVzcG9uc2VbMF0g
PT0gJ1wwJyk7Ci19Ci0KLXZvaWQgYmVmb3JlQWxsKCkKLXsKLSAgICAvLyBPdmVyd3JpdGUgV0VC
S0lUX0lOU1BFQ1RPUl9TRVJWRVIgdmFyaWFibGUgd2l0aCBkZWZhdWx0IElQIGFkZHJlc3MgYnV0
IGRpZmZlcmVudCBwb3J0IHRvIGF2b2lkIGNvbmZsaWN0IHdpdGggdGhlIHRlc3QgaW5zcGVjdG9y
IHNlcnZlciBwYWdlLgotICAgIGdfc2V0ZW52KCJXRUJLSVRfSU5TUEVDVE9SX1NFUlZFUiIsICIx
MjcuMC4wLjE6Mjk5OCIsIFRSVUUpOwotCi0gICAgc3RhcnRUZXN0U2VydmVyKCk7Ci0gICAgSW5z
cGVjdG9yU2VydmVyVGVzdDo6YWRkKCJXZWJLaXRXZWJJbnNwZWN0b3JTZXJ2ZXIiLCAidGVzdC1w
YWdlLWxpc3QiLCB0ZXN0SW5zcGVjdG9yU2VydmVyUGFnZUxpc3QpOwotICAgIEluc3BlY3RvclNl
cnZlclRlc3Q6OmFkZCgiV2ViS2l0V2ViSW5zcGVjdG9yU2VydmVyIiwgInRlc3QtcmVtb3RlLWRl
YnVnZ2luZy1tZXNzYWdlIiwgdGVzdFJlbW90ZURlYnVnZ2luZ01lc3NhZ2UpOwotICAgIEluc3Bl
Y3RvclNlcnZlclRlc3Q6OmFkZCgiV2ViS2l0V2ViSW5zcGVjdG9yU2VydmVyIiwgInRlc3Qtb3Bl
bi1kZWJ1Z2dpbmctc2Vzc2lvbiIsIG9wZW5SZW1vdGVEZWJ1Z2dpbmdTZXNzaW9uKTsKLSAgICBJ
bnNwZWN0b3JTZXJ2ZXJUZXN0OjphZGQoIldlYktpdFdlYkluc3BlY3RvclNlcnZlciIsICJ0ZXN0
LWluY29tcGxldGUtcmVxdWVzdCIsIHNlbmRJbmNvbXBsZXRlUmVxdWVzdCk7Ci0KLX0KLQotdm9p
ZCBhZnRlckFsbCgpCi17Ci0gICAgc3RvcFRlc3RTZXJ2ZXIoKTsKLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RMb2FkZXJDbGllbnQuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdExvYWRlckNsaWVu
dC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzMTkxNWUuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdExvYWRlckNsaWVu
dC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOSwgMjAxMCBHdXN0YXZvIE5vcm9uaGEgU2lsdmEKLSAqIENvcHlyaWdodCAoQykgMjAw
OSwgMjAxMSBJZ2FsaWEgUy5MLgotICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDExIE1vdG9y
b2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0KLSNpbmNsdWRlICJMb2FkVHJhY2tpbmdUZXN0LmgiCi0jaW5jbHVkZSAiV2ViS2l0VGVz
dEJ1cy5oIgotI2luY2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKLSNpbmNsdWRlICJXZWJWaWV3
VGVzdC5oIgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLXN0YXRpYyBXZWJLaXRUZXN0QnVzKiBi
dXM7Ci1zdGF0aWMgV2ViS2l0VGVzdFNlcnZlcioga1NlcnZlcjsKLQotY29uc3QgY2hhcioga0RO
VEhlYWRlck5vdFByZXNlbnQgPSAiRE5UIGhlYWRlciBub3QgcHJlc2VudCI7Ci0KLXN0YXRpYyB2
b2lkIHRlc3RMb2FkaW5nU3RhdHVzKExvYWRUcmFja2luZ1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIgZGF0YSkKLXsKLSAgICB0ZXN0LT5zZXRSZWRpcmVjdFVSSShrU2VydmVyLT5nZXRVUklGb3JQ
YXRoKCIvbm9ybWFsIikuZGF0YSgpKTsKLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVS
SUZvclBhdGgoIi9yZWRpcmVjdCIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZp
bmlzaGVkKCk7Ci0KLSAgICBWZWN0b3I8TG9hZFRyYWNraW5nVGVzdDo6TG9hZEV2ZW50cz4mIGV2
ZW50cyA9IHRlc3QtPm1fbG9hZEV2ZW50czsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNp
emUoKSwgPT0sIDQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBMb2FkVHJh
Y2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
ZXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkUmVjZWl2ZWRT
ZXJ2ZXJSZWRpcmVjdCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIExvYWRU
cmFja2luZ1Rlc3Q6OkxvYWRDb21taXR0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNb
M10sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOwotfQotCi1zdGF0aWMgdm9p
ZCB0ZXN0TG9hZGluZ0Vycm9yKExvYWRUcmFja2luZ1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIp
Ci17Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvZXJyb3IiKS5k
YXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgVmVjdG9y
PExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRFdmVudHM+JiBldmVudHMgPSB0ZXN0LT5tX2xvYWRFdmVu
dHM7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAzKTsKLSAgICBnX2Fz
c2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxM
b2FkU3RhcnRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIExvYWRUcmFj
a2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZEZhaWxlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2
ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7Ci19Ci0KLXN0YXRp
YyB2b2lkIGFzc2VydE5vcm1hbExvYWRIYXBwZW5lZChWZWN0b3I8TG9hZFRyYWNraW5nVGVzdDo6
TG9hZEV2ZW50cz4mIGV2ZW50cykKLXsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUo
KSwgPT0sIDMpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBMb2FkVHJhY2tp
bmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZl
bnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZENvbW1pdHRlZCk7Ci0gICAgZ19hc3Nl
cnRfY21waW50KGV2ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7
Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RMb2FkSHRtbChMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keT5IZWxsbyBX
ZWJLaXQtR1RLKzwvYm9keT48L2h0bWw+IiwgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZp
bmlzaGVkKCk7Ci0gICAgYXNzZXJ0Tm9ybWFsTG9hZEhhcHBlbmVkKHRlc3QtPm1fbG9hZEV2ZW50
cyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RMb2FkQWx0ZXJuYXRlSFRNTChMb2FkVHJhY2tpbmdU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxvYWRBbHRlcm5hdGVIVE1M
KCI8aHRtbD48Ym9keT5BbHRlcm5hdGUgcGFnZTwvYm9keT48L2h0bWw+IiwgImh0dHA6Ly9lcnJv
ci1wYWdlLmZvby8iLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAg
ICBhc3NlcnROb3JtYWxMb2FkSGFwcGVuZWQodGVzdC0+bV9sb2FkRXZlbnRzKTsKLX0KLQotc3Rh
dGljIHZvaWQgdGVzdExvYWRQbGFpblRleHQoTG9hZFRyYWNraW5nVGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5sb2FkUGxhaW5UZXh0KCJIZWxsbyBXZWJLaXQtR1RLKyIp
OwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGFzc2VydE5vcm1hbExv
YWRIYXBwZW5lZCh0ZXN0LT5tX2xvYWRFdmVudHMpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0TG9h
ZFJlcXVlc3QoTG9hZFRyYWNraW5nVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBH
UmVmUHRyPFdlYktpdFVSSVJlcXVlc3Q+IHJlcXVlc3Qod2Via2l0X3VyaV9yZXF1ZXN0X25ldyhr
U2VydmVyLT5nZXRVUklGb3JQYXRoKCIvbm9ybWFsIikuZGF0YSgpKSk7Ci0gICAgdGVzdC0+bG9h
ZFJlcXVlc3QocmVxdWVzdC5nZXQoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVk
KCk7Ci0gICAgYXNzZXJ0Tm9ybWFsTG9hZEhhcHBlbmVkKHRlc3QtPm1fbG9hZEV2ZW50cyk7Ci19
Ci0KLWNsYXNzIExvYWRTdG9wVHJhY2tpbmdUZXN0IDogcHVibGljIExvYWRUcmFja2luZ1Rlc3Qg
ewotcHVibGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoTG9hZFN0b3BUcmFja2luZ1Rl
c3QpOwotCi0gICAgdmlydHVhbCB2b2lkIGxvYWRDb21taXR0ZWQoKQotICAgIHsKLSAgICAgICAg
TG9hZFRyYWNraW5nVGVzdDo6bG9hZENvbW1pdHRlZCgpOwotICAgICAgICB3ZWJraXRfd2ViX3Zp
ZXdfc3RvcF9sb2FkaW5nKG1fd2ViVmlldyk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBsb2Fk
RmFpbGVkKGNvbnN0IGdjaGFyKiBmYWlsaW5nVVJJLCBHRXJyb3IqIGVycm9yKQotICAgIHsKLSAg
ICAgICAgZ19hc3NlcnQoZ19lcnJvcl9tYXRjaGVzKGVycm9yLCBXRUJLSVRfTkVUV09SS19FUlJP
UiwgV0VCS0lUX05FVFdPUktfRVJST1JfQ0FOQ0VMTEVEKSk7Ci0gICAgICAgIExvYWRUcmFja2lu
Z1Rlc3Q6OmxvYWRGYWlsZWQoZmFpbGluZ1VSSSwgZXJyb3IpOwotICAgIH0KLX07Ci0KLXN0YXRp
YyB2b2lkIHRlc3RMb2FkQ2FuY2VsbGVkKExvYWRTdG9wVHJhY2tpbmdUZXN0KiB0ZXN0LCBnY29u
c3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgi
L2NhbmNlbGxlZCIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7
Ci0KLSAgICBWZWN0b3I8TG9hZFRyYWNraW5nVGVzdDo6TG9hZEV2ZW50cz4mIGV2ZW50cyA9IHRl
c3QtPm1fbG9hZEV2ZW50czsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0s
IDQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0
OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFd
LCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZENvbW1pdHRlZCk7Ci0gICAgZ19hc3NlcnRfY21w
aW50KGV2ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGYWlsZWQpOwotICAgIGdf
YXNzZXJ0X2NtcGludChldmVudHNbM10sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNo
ZWQpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1RpdGxlKExvYWRUcmFja2luZ1Rlc3Qq
IHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19n
ZXRfdGl0bGUodGVzdC0+bV93ZWJWaWV3KSk7Ci0gICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxo
ZWFkPjx0aXRsZT5XZWxjb21lIHRvIFdlYktpdC1HVEsrITwvdGl0bGU+PC9oZWFkPjwvaHRtbD4i
LCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydF9j
bXBzdHIod2Via2l0X3dlYl92aWV3X2dldF90aXRsZSh0ZXN0LT5tX3dlYlZpZXcpLCA9PSwgIldl
bGNvbWUgdG8gV2ViS2l0LUdUSyshIik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3UmVs
b2FkKExvYWRUcmFja2luZ1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgLy8gQ2hl
Y2sgdGhhdCBub3RoaW5nIGhhcHBlbnMgd2hlbiB0aGVyZSdzIG5vdGhpbmcgdG8gcmVsb2FkLgot
ICAgIHRlc3QtPnJlbG9hZCgpOwotICAgIHRlc3QtPndhaXQoMC4yNSk7IC8vIFdhaXQgZm9yIGEg
cXVhcnRlciBvZiBhIHNlY29uZC4KLQotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJ
Rm9yUGF0aCgiL25vcm1hbCIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlz
aGVkKCk7Ci0gICAgYXNzZXJ0Tm9ybWFsTG9hZEhhcHBlbmVkKHRlc3QtPm1fbG9hZEV2ZW50cyk7
Ci0KLSAgICB0ZXN0LT5yZWxvYWQoKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQo
KTsKLSAgICBhc3NlcnROb3JtYWxMb2FkSGFwcGVuZWQodGVzdC0+bV9sb2FkRXZlbnRzKTsKLX0K
LQotc3RhdGljIHZvaWQgdGVzdExvYWRQcm9ncmVzcyhMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0
aCgiL25vcm1hbCIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7
Ci0gICAgZ19hc3NlcnRfY21wZmxvYXQodGVzdC0+bV9lc3RpbWF0ZWRQcm9ncmVzcywgPT0sIDEp
OwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0hpc3RvcnlMb2FkKExvYWRUcmFja2luZ1Rl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5n
ZXRVUklGb3JQYXRoKCIvbm9ybWFsIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2Fk
RmluaXNoZWQoKTsKLSAgICBhc3NlcnROb3JtYWxMb2FkSGFwcGVuZWQodGVzdC0+bV9sb2FkRXZl
bnRzKTsKLQotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL25vcm1h
bDIiKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGFz
c2VydE5vcm1hbExvYWRIYXBwZW5lZCh0ZXN0LT5tX2xvYWRFdmVudHMpOwotCi0gICAgLy8gQ2hl
Y2sgdGhhdCBsb2FkIHByb2Nlc3MgaXMgdGhlIHNhbWUgZm9yIHBhZ2VzIGxvYWRlZCBmcm9tIGhp
c3RvcnkgY2FjaGUuCi0gICAgdGVzdC0+Z29CYWNrKCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9h
ZEZpbmlzaGVkKCk7Ci0gICAgYXNzZXJ0Tm9ybWFsTG9hZEhhcHBlbmVkKHRlc3QtPm1fbG9hZEV2
ZW50cyk7Ci0KLSAgICB0ZXN0LT5nb0ZvcndhcmQoKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2Fk
RmluaXNoZWQoKTsKLSAgICBhc3NlcnROb3JtYWxMb2FkSGFwcGVuZWQodGVzdC0+bV9sb2FkRXZl
bnRzKTsKLX0KLQotY2xhc3MgVmlld1VSSVRyYWNraW5nVGVzdDogcHVibGljIExvYWRUcmFja2lu
Z1Rlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoVmlld1VSSVRyYWNr
aW5nVGVzdCk7Ci0KLSAgICBzdGF0aWMgdm9pZCB1cmlDaGFuZ2VkKEdPYmplY3QqLCBHUGFyYW1T
cGVjKiwgVmlld1VSSVRyYWNraW5nVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0
X2NtcHN0cih0ZXN0LT5tX2FjdGl2ZVVSSS5kYXRhKCksICE9LCB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X3VyaSh0ZXN0LT5tX3dlYlZpZXcpKTsKLSAgICAgICAgdGVzdC0+bV9hY3RpdmVVUkkgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X3VyaSh0ZXN0LT5tX3dlYlZpZXcpOwotICAgIH0KLQotICAgIFZpZXdV
UklUcmFja2luZ1Rlc3QoKQotICAgICAgICA6IG1fYWN0aXZlVVJJKHdlYmtpdF93ZWJfdmlld19n
ZXRfdXJpKG1fd2ViVmlldykpCi0gICAgewotICAgICAgICBnX2Fzc2VydChtX2FjdGl2ZVVSSS5p
c051bGwoKSk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAibm90aWZ5Ojp1
cmkiLCBHX0NBTExCQUNLKHVyaUNoYW5nZWQpLCB0aGlzKTsKLSAgICB9Ci0KLSAgICB2b2lkIHBy
b3Zpc2lvbmFsTG9hZFN0YXJ0ZWQoKQotICAgIHsKLSAgICAgICAgY2hlY2tBY3RpdmVVUkkoIi9y
ZWRpcmVjdCIpOwotICAgIH0KLQotICAgIHZvaWQgcHJvdmlzaW9uYWxMb2FkUmVjZWl2ZWRTZXJ2
ZXJSZWRpcmVjdCgpCi0gICAgewotICAgICAgICBjaGVja0FjdGl2ZVVSSSgiL25vcm1hbCIpOwot
ICAgIH0KLQotICAgIHZvaWQgbG9hZENvbW1pdHRlZCgpCi0gICAgewotICAgICAgICBjaGVja0Fj
dGl2ZVVSSSgiL25vcm1hbCIpOwotICAgIH0KLQotICAgIHZvaWQgbG9hZEZpbmlzaGVkKCkKLSAg
ICB7Ci0gICAgICAgIGNoZWNrQWN0aXZlVVJJKCIvbm9ybWFsIik7Ci0gICAgICAgIExvYWRUcmFj
a2luZ1Rlc3Q6OmxvYWRGaW5pc2hlZCgpOwotICAgIH0KLQotICAgIENTdHJpbmcgbV9hY3RpdmVV
Ukk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBjaGVja0FjdGl2ZVVSSShjb25zdCBjaGFyKiB1cmkp
Ci0gICAgewotICAgICAgICBBU1NFUlRfQ01QX0NTVFJJTkcobV9hY3RpdmVVUkksID09LCBrU2Vy
dmVyLT5nZXRVUklGb3JQYXRoKHVyaSkpOwotICAgIH0KLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RX
ZWJWaWV3QWN0aXZlVVJJKFZpZXdVUklUcmFja2luZ1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIp
Ci17Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvcmVkaXJlY3Qi
KS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotfQotCi1jbGFz
cyBWaWV3SXNMb2FkaW5nVGVzdDogcHVibGljIExvYWRUcmFja2luZ1Rlc3QgewotcHVibGljOgot
ICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoVmlld0lzTG9hZGluZ1Rlc3QpOwotCi0gICAgc3Rh
dGljIHZvaWQgaXNMb2FkaW5nQ2hhbmdlZChHT2JqZWN0KiwgR1BhcmFtU3BlYyosIFZpZXdJc0xv
YWRpbmdUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgaWYgKHdlYmtpdF93ZWJfdmlld19pc19s
b2FkaW5nKHRlc3QtPm1fd2ViVmlldykpCi0gICAgICAgICAgICB0ZXN0LT5iZWdpbkxvYWQoKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGVzdC0+ZW5kTG9hZCgpOwotICAgIH0KLQotICAg
IFZpZXdJc0xvYWRpbmdUZXN0KCkKLSAgICB7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93
ZWJWaWV3LCAibm90aWZ5Ojppcy1sb2FkaW5nIiwgR19DQUxMQkFDSyhpc0xvYWRpbmdDaGFuZ2Vk
KSwgdGhpcyk7Ci0gICAgfQotCi0gICAgdm9pZCBiZWdpbkxvYWQoKQotICAgIHsKLSAgICAgICAg
Ly8gTmV3IGxvYWQsIGxvYWQtc3RhcnRlZCBoYXNuJ3QgYmVlbiBlbWl0dGVkIHlldC4KLSAgICAg
ICAgZ19hc3NlcnQobV9sb2FkRXZlbnRzLmlzRW1wdHkoKSk7Ci0gICAgICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaShtX3dlYlZpZXcpLCA9PSwgbV9hY3RpdmVVUkku
ZGF0YSgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGVuZExvYWQoKQotICAgIHsKLSAgICAgICAgLy8g
TG9hZCBmaW5pc2gsIGxvYWQtZmluaXNoZWQgYW5kIGxvYWQtZmFpbGVkIGhhdmVuJ3QgYmVlbiBl
bWl0dGVkIHlldC4KLSAgICAgICAgZ19hc3NlcnQoIW1fbG9hZEV2ZW50cy5pc0VtcHR5KCkpOwot
ICAgICAgICBnX2Fzc2VydCghbV9sb2FkRXZlbnRzLmNvbnRhaW5zKExvYWRUcmFja2luZ1Rlc3Q6
OkxvYWRGaW5pc2hlZCkpOwotICAgICAgICBnX2Fzc2VydCghbV9sb2FkRXZlbnRzLmNvbnRhaW5z
KExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGYWlsZWQpKTsKLSAgICB9Ci19OwotCi1zdGF0aWMgdm9p
ZCB0ZXN0V2ViVmlld0lzTG9hZGluZyhWaWV3SXNMb2FkaW5nVGVzdCogdGVzdCwgZ2NvbnN0cG9p
bnRlcikKLXsKLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9ub3Jt
YWwiKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAg
dGVzdC0+cmVsb2FkKCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAg
ICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9lcnJvciIpLmRhdGEoKSk7
Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICB0ZXN0LT5sb2FkVVJJ
KGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9ub3JtYWwiKS5kYXRhKCkpOwotICAgIHRlc3QtPndh
aXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJ
Rm9yUGF0aCgiL25vcm1hbDIiKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5p
c2hlZCgpOwotCi0gICAgdGVzdC0+Z29CYWNrKCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZp
bmlzaGVkKCk7Ci0KLSAgICB0ZXN0LT5nb0ZvcndhcmQoKTsKLSAgICB0ZXN0LT53YWl0VW50aWxM
b2FkRmluaXNoZWQoKTsKLX0KLQotY2xhc3MgV2ViUGFnZVVSSVRlc3Q6IHB1YmxpYyBXZWJWaWV3
VGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShXZWJQYWdlVVJJVGVz
dCk7Ci0KLSAgICBzdGF0aWMgdm9pZCB3ZWJQYWdlVVJJQ2hhbmdlZENhbGxiYWNrKEdEQnVzQ29u
bmVjdGlvbiosIGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIGNvbnN0IGNo
YXIqLCBHVmFyaWFudCogcmVzdWx0LCBXZWJQYWdlVVJJVGVzdCogdGVzdCkKLSAgICB7Ci0gICAg
ICAgIGNvbnN0IGNoYXIqIHVyaTsKLSAgICAgICAgZ192YXJpYW50X2dldChyZXN1bHQsICIoJnMp
IiwgJnVyaSk7Ci0gICAgICAgIHRlc3QtPm1fd2ViUGFnZVVSSXMuYXBwZW5kKHVyaSk7Ci0gICAg
fQotCi0gICAgc3RhdGljIHZvaWQgd2ViVmlld1VSSUNoYW5nZWQoR09iamVjdCosIEdQYXJhbVNw
ZWMqLCBXZWJQYWdlVVJJVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHRlc3QtPm1fd2ViVmll
d1VSSXMuYXBwZW5kKHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKHRlc3QtPm1fd2ViVmlldykpOwot
ICAgIH0KLQotICAgIFdlYlBhZ2VVUklUZXN0KCkKLSAgICB7Ci0gICAgICAgIEdSZWZQdHI8R0RC
dXNQcm94eT4gcHJveHkgPSBhZG9wdEdSZWYoYnVzLT5jcmVhdGVQcm94eSgib3JnLndlYmtpdC5n
dGsuV2ViRXh0ZW5zaW9uVGVzdCIsCi0gICAgICAgICAgICAiL29yZy93ZWJraXQvZ3RrL1dlYkV4
dGVuc2lvblRlc3QiLCAib3JnLndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9uVGVzdCIsIG1fbWFpbkxv
b3ApKTsKLSAgICAgICAgbV91cmlDaGFuZ2VkU2lnbmFsSUQgPSBnX2RidXNfY29ubmVjdGlvbl9z
aWduYWxfc3Vic2NyaWJlKAotICAgICAgICAgICAgZ19kYnVzX3Byb3h5X2dldF9jb25uZWN0aW9u
KHByb3h5LmdldCgpKSwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAib3JnLndlYmtpdC5n
dGsuV2ViRXh0ZW5zaW9uVGVzdCIsCi0gICAgICAgICAgICAiVVJJQ2hhbmdlZCIsCi0gICAgICAg
ICAgICAiL29yZy93ZWJraXQvZ3RrL1dlYkV4dGVuc2lvblRlc3QiLAotICAgICAgICAgICAgMCwK
LSAgICAgICAgICAgIEdfREJVU19TSUdOQUxfRkxBR1NfTk9ORSwKLSAgICAgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8R0RCdXNTaWduYWxDYWxsYmFjaz4od2ViUGFnZVVSSUNoYW5nZWRDYWxsYmFj
ayksCi0gICAgICAgICAgICB0aGlzLAotICAgICAgICAgICAgMCk7Ci0gICAgICAgIGdfYXNzZXJ0
KG1fdXJpQ2hhbmdlZFNpZ25hbElEKTsKLQotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2Vi
VmlldywgIm5vdGlmeTo6dXJpIiwgR19DQUxMQkFDSyh3ZWJWaWV3VVJJQ2hhbmdlZCksIHRoaXMp
OwotICAgIH0KLQotICAgIH5XZWJQYWdlVVJJVGVzdCgpCi0gICAgewotICAgICAgICBnX3NpZ25h
bF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV93ZWJWaWV3LCBHX1NJR05BTF9NQVRDSF9E
QVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKLSAgICAgICAgZ19kYnVzX2Nvbm5lY3Rpb25fc2lnbmFs
X3Vuc3Vic2NyaWJlKGJ1cy0+Y29ubmVjdGlvbigpLCBtX3VyaUNoYW5nZWRTaWduYWxJRCk7Ci0g
ICAgfQotCi0gICAgdW5zaWduZWQgbV91cmlDaGFuZ2VkU2lnbmFsSUQ7Ci0gICAgVmVjdG9yPENT
dHJpbmc+IG1fd2ViUGFnZVVSSXM7Ci0gICAgVmVjdG9yPENTdHJpbmc+IG1fd2ViVmlld1VSSXM7
Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViUGFnZVVSSShXZWJQYWdlVVJJVGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBh
dGgoIi9yZWRpcmVjdCIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVk
KCk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV93ZWJQYWdlVVJJcy5zaXplKCksID09
LCB0ZXN0LT5tX3dlYlZpZXdVUklzLnNpemUoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCB0ZXN0LT5tX3dlYlBhZ2VVUklzLnNpemUoKTsgKytpKQotICAgICAgICBBU1NFUlRfQ01QX0NT
VFJJTkcodGVzdC0+bV93ZWJQYWdlVVJJc1tpXSwgPT0sIHRlc3QtPm1fd2ViVmlld1VSSXNbaV0p
OwotCi0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fd2ViUGFnZVVSSXMuc2l6ZSgpLCA9PSwg
Mik7Ci0gICAgQVNTRVJUX0NNUF9DU1RSSU5HKHRlc3QtPm1fd2ViUGFnZVVSSXNbMF0sID09LCBr
U2VydmVyLT5nZXRVUklGb3JQYXRoKCIvcmVkaXJlY3QiKSk7Ci0gICAgQVNTRVJUX0NNUF9DU1RS
SU5HKHRlc3QtPm1fd2ViUGFnZVVSSXNbMV0sID09LCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIv
bm9ybWFsIikpOwotCi19Ci0KLXN0YXRpYyB2b2lkIHRlc3RVUklSZXF1ZXN0SFRUUEhlYWRlcnMo
V2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgR1JlZlB0cjxXZWJLaXRV
UklSZXF1ZXN0PiB1cmlSZXF1ZXN0ID0gYWRvcHRHUmVmKHdlYmtpdF91cmlfcmVxdWVzdF9uZXco
ImZpbGU6Ly8vZm9vL2JhciIpKTsKLSAgICBnX2Fzc2VydCh1cmlSZXF1ZXN0LmdldCgpKTsKLSAg
ICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3VyaV9yZXF1ZXN0X2dldF91cmkodXJpUmVxdWVzdC5n
ZXQoKSksID09LCAiZmlsZTovLy9mb28vYmFyIik7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF91cmlf
cmVxdWVzdF9nZXRfaHR0cF9oZWFkZXJzKHVyaVJlcXVlc3QuZ2V0KCkpKTsKLQotICAgIC8vIExv
YWQgYSByZXF1ZXN0IHdpdGggbm8gRG8gTm90IFRyYWNrIGhlYWRlci4KLSAgICB3ZWJraXRfdXJp
X3JlcXVlc3Rfc2V0X3VyaSh1cmlSZXF1ZXN0LmdldCgpLCBrU2VydmVyLT5nZXRVUklGb3JQYXRo
KCIvZG8tbm90LXRyYWNrLWhlYWRlciIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+bG9hZFJlcXVlc3Qo
dXJpUmVxdWVzdC5nZXQoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0K
LSAgICBzaXplX3QgbWFpblJlc291cmNlRGF0YVNpemUgPSAwOwotICAgIGNvbnN0IGNoYXIqIG1h
aW5SZXNvdXJjZURhdGEgPSB0ZXN0LT5tYWluUmVzb3VyY2VEYXRhKG1haW5SZXNvdXJjZURhdGFT
aXplKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQobWFpblJlc291cmNlRGF0YVNpemUsID09LCBzdHJs
ZW4oa0ROVEhlYWRlck5vdFByZXNlbnQpKTsKLSAgICBnX2Fzc2VydCghc3RybmNtcChtYWluUmVz
b3VyY2VEYXRhLCBrRE5USGVhZGVyTm90UHJlc2VudCwgbWFpblJlc291cmNlRGF0YVNpemUpKTsK
LQotICAgIC8vIEFkZCB0aGUgRG8gTm90IFRyYWNrIGhlYWRlciBhbmQgbG9hZCB0aGUgcmVxdWVz
dCBhZ2Fpbi4KLSAgICBTb3VwTWVzc2FnZUhlYWRlcnMqIGhlYWRlcnMgPSB3ZWJraXRfdXJpX3Jl
cXVlc3RfZ2V0X2h0dHBfaGVhZGVycyh1cmlSZXF1ZXN0LmdldCgpKTsKLSAgICBnX2Fzc2VydCho
ZWFkZXJzKTsKLSAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQoaGVhZGVycywgIkROVCIs
ICIxIik7Ci0gICAgdGVzdC0+bG9hZFJlcXVlc3QodXJpUmVxdWVzdC5nZXQoKSk7Ci0gICAgdGVz
dC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBtYWluUmVzb3VyY2VEYXRhID0gdGVz
dC0+bWFpblJlc291cmNlRGF0YShtYWluUmVzb3VyY2VEYXRhU2l6ZSk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KG1haW5SZXNvdXJjZURhdGFTaXplLCA9PSwgMSk7Ci0gICAgZ19hc3NlcnQoIXN0cm5j
bXAobWFpblJlc291cmNlRGF0YSwgIjEiLCBtYWluUmVzb3VyY2VEYXRhU2l6ZSkpOwotCi0gICAg
Ly8gTG9hZCBhIFVSSSBmb3Igd2hpY2ggdGhlIHdlYiBleHRlbnNpb24gd2lsbCBhZGQgdGhlIERv
IE5vdCBUcmFjayBoZWFkZXIuCi0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQ
YXRoKCIvYWRkLWRvLW5vdC10cmFjay1oZWFkZXIiKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRV
bnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgbWFpblJlc291cmNlRGF0YSA9IHRlc3QtPm1haW5S
ZXNvdXJjZURhdGEobWFpblJlc291cmNlRGF0YVNpemUpOwotICAgIGdfYXNzZXJ0X2NtcGludCht
YWluUmVzb3VyY2VEYXRhU2l6ZSwgPT0sIDEpOwotICAgIGdfYXNzZXJ0KCFzdHJuY21wKG1haW5S
ZXNvdXJjZURhdGEsICIxIiwgbWFpblJlc291cmNlRGF0YVNpemUpKTsKLX0KLQotc3RhdGljIHZv
aWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbWVzc2Fn
ZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSosIFNvdXBDbGllbnRDb250ZXh0KiwgZ3Bv
aW50ZXIpCi17Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHJlc3BvbnNlU3RyaW5nID0gIjxodG1s
Pjxib2R5PlRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchIgotICAgICAgICAiVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
IgotICAgICAgICAiVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchIgotICAg
ICAgICAiVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchIgotICAgICAgICAi
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchIgotICAgICAgICAiVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchIgotICAgICAgICAiVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchIgotICAgICAgICAiVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchPC9ib2R5PjwvaHRtbD4iOwotCi0gICAgaWYgKG1lc3NhZ2Ut
Pm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9z
dGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBf
U1RBVFVTX09LKTsKLQotICAgIGlmIChnX3N0cl9oYXNfcHJlZml4KHBhdGgsICIvbm9ybWFsIikp
Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5
LCBTT1VQX01FTU9SWV9TVEFUSUMsIHJlc3BvbnNlU3RyaW5nLCBzdHJsZW4ocmVzcG9uc2VTdHJp
bmcpKTsKLSAgICBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2Vycm9yIikpCi0gICAgICAg
IHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX0NBTlRfQ09OTkVD
VCk7Ci0gICAgZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9yZWRpcmVjdCIpKSB7Ci0gICAg
ICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX01PVkVEX1BF
Uk1BTkVOVExZKTsKLSAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1lc3NhZ2Ut
PnJlc3BvbnNlX2hlYWRlcnMsICJMb2NhdGlvbiIsICIvbm9ybWFsIik7Ci0gICAgfSBlbHNlIGlm
IChnX3N0cl9lcXVhbChwYXRoLCAiL2NhbmNlbGxlZCIpKSB7Ci0gICAgICAgIHNvdXBfbWVzc2Fn
ZV9oZWFkZXJzX3NldF9lbmNvZGluZyhtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCBTT1VQX0VO
Q09ESU5HX0NIVU5LRUQpOwotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2Fn
ZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCByZXNwb25zZVN0cmluZywgc3Ry
bGVuKHJlc3BvbnNlU3RyaW5nKSk7Ci0gICAgICAgIHNvdXBfc2VydmVyX3VucGF1c2VfbWVzc2Fn
ZShzZXJ2ZXIsIG1lc3NhZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlmIChnX3N0
cl9lcXVhbChwYXRoLCAiL2RvLW5vdC10cmFjay1oZWFkZXIiKSB8fCBnX3N0cl9lcXVhbChwYXRo
LCAiL2FkZC1kby1ub3QtdHJhY2staGVhZGVyIikpIHsKLSAgICAgICAgY29uc3QgY2hhciogZG9O
b3RUcmFjayA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9vbmUobWVzc2FnZS0+cmVxdWVzdF9o
ZWFkZXJzLCAiRE5UIik7Ci0gICAgICAgIGlmIChkb05vdFRyYWNrKQotICAgICAgICAgICAgc291
cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZ
X0NPUFksIGRvTm90VHJhY2ssIHN0cmxlbihkb05vdFRyYWNrKSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5
LCBTT1VQX01FTU9SWV9TVEFUSUMsIGtETlRIZWFkZXJOb3RQcmVzZW50LCBzdHJsZW4oa0ROVEhl
YWRlck5vdFByZXNlbnQpKTsKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2Fn
ZSwgU09VUF9TVEFUVVNfT0spOwotICAgIH0gZWxzZQotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0
X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfRk9VTkQpOwotCi0gICAgc291cF9tZXNz
YWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7Ci19Ci0KLXZvaWQgYmVm
b3JlQWxsKCkKLXsKLSAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3dlYl9leHRlbnNpb25zX2Rp
cmVjdG9yeSh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSwgV0VCS0lUX1RFU1RfV0VC
X0VYVEVOU0lPTlNfRElSKTsKLSAgICBidXMgPSBuZXcgV2ViS2l0VGVzdEJ1cygpOwotICAgIGlm
ICghYnVzLT5ydW4oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAga1NlcnZlciA9IG5ldyBXZWJL
aXRUZXN0U2VydmVyKCk7Ci0gICAga1NlcnZlci0+cnVuKHNlcnZlckNhbGxiYWNrKTsKLQotICAg
IExvYWRUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJsb2FkaW5nLXN0YXR1cyIs
IHRlc3RMb2FkaW5nU3RhdHVzKTsKLSAgICBMb2FkVHJhY2tpbmdUZXN0OjphZGQoIldlYktpdFdl
YlZpZXciLCAibG9hZGluZy1lcnJvciIsIHRlc3RMb2FkaW5nRXJyb3IpOwotICAgIExvYWRUcmFj
a2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJsb2FkLWh0bWwiLCB0ZXN0TG9hZEh0bWwp
OwotICAgIExvYWRUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJsb2FkLWFsdGVy
bmF0ZS1odG1sIiwgdGVzdExvYWRBbHRlcm5hdGVIVE1MKTsKLSAgICBMb2FkVHJhY2tpbmdUZXN0
OjphZGQoIldlYktpdFdlYlZpZXciLCAibG9hZC1wbGFpbi10ZXh0IiwgdGVzdExvYWRQbGFpblRl
eHQpOwotICAgIExvYWRUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJsb2FkLXJl
cXVlc3QiLCB0ZXN0TG9hZFJlcXVlc3QpOwotICAgIExvYWRTdG9wVHJhY2tpbmdUZXN0OjphZGQo
IldlYktpdFdlYlZpZXciLCAic3RvcC1sb2FkaW5nIiwgdGVzdExvYWRDYW5jZWxsZWQpOwotICAg
IExvYWRUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJ0aXRsZSIsIHRlc3RXZWJW
aWV3VGl0bGUpOwotICAgIExvYWRUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJw
cm9ncmVzcyIsIHRlc3RMb2FkUHJvZ3Jlc3MpOwotICAgIExvYWRUcmFja2luZ1Rlc3Q6OmFkZCgi
V2ViS2l0V2ViVmlldyIsICJyZWxvYWQiLCB0ZXN0V2ViVmlld1JlbG9hZCk7Ci0gICAgTG9hZFRy
YWNraW5nVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImhpc3RvcnktbG9hZCIsIHRlc3RXZWJW
aWV3SGlzdG9yeUxvYWQpOwotCi0gICAgLy8gVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IHdlYiB2aWV3
IG5vdGlmeTo6dXJpIHNpZ25hbCBpcyBjb3JyZWN0bHkgZW1pdHRlZAotICAgIC8vIGFuZCB0aGUg
dXJpIGlzIGFscmVhZHkgdXBkYXRlZCB3aGVuIGxvYWRlciBjbGllbnQgc2lnbmFscyBhcmUgZW1p
dHRlZC4KLSAgICBWaWV3VVJJVHJhY2tpbmdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiYWN0
aXZlLXVyaSIsIHRlc3RXZWJWaWV3QWN0aXZlVVJJKTsKLQotICAgIFZpZXdJc0xvYWRpbmdUZXN0
OjphZGQoIldlYktpdFdlYlZpZXciLCAiaXMtbG9hZGluZyIsIHRlc3RXZWJWaWV3SXNMb2FkaW5n
KTsKLSAgICBXZWJQYWdlVVJJVGVzdDo6YWRkKCJXZWJLaXRXZWJQYWdlIiwgImdldC11cmkiLCB0
ZXN0V2ViUGFnZVVSSSk7Ci0gICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0VVJJUmVxdWVzdCIs
ICJodHRwLWhlYWRlcnMiLCB0ZXN0VVJJUmVxdWVzdEhUVFBIZWFkZXJzKTsKLX0KLQotdm9pZCBh
ZnRlckFsbCgpCi17Ci0gICAgZGVsZXRlIGJ1czsKLSAgICBkZWxldGUga1NlcnZlcjsKLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RNYWlu
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RNYWluLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDc4MTljZi4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0TWFpbi5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxp
YSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0TWFpbi5oIgotCi0jaW5j
bHVkZSA8Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d2Vi
a2l0Mi93ZWJraXQyLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgotCi12b2lk
IGJlZm9yZUFsbCgpOwotdm9pZCBhZnRlckFsbCgpOwotCi1zdGF0aWMgdm9pZCByZWdpc3RlckdS
ZXNvdXJjZSh2b2lkKQotewotICAgIEdPd25QdHI8Y2hhcj4gcmVzb3VyY2VzUGF0aChnX2J1aWxk
X2ZpbGVuYW1lKFdFQktJVF9FWEVDX1BBVEgsICJyZXNvdXJjZXMiLCAid2Via2l0Mmd0ay10ZXN0
cy1yZXNvdXJjZXMuZ3Jlc291cmNlIiwgTlVMTCkpOwotICAgIEdSZXNvdXJjZSogcmVzb3VyY2Ug
PSBnX3Jlc291cmNlX2xvYWQocmVzb3VyY2VzUGF0aC5nZXQoKSwgMCk7Ci0gICAgZ19hc3NlcnQo
cmVzb3VyY2UpOwotCi0gICAgZ19yZXNvdXJjZXNfcmVnaXN0ZXIocmVzb3VyY2UpOwotICAgIGdf
cmVzb3VyY2VfdW5yZWYocmVzb3VyY2UpOwotfQotCi1zdGF0aWMgdm9pZCByZW1vdmVOb25FbXB0
eURpcmVjdG9yeShjb25zdCBjaGFyKiBkaXJlY3RvcnlQYXRoKQotewotICAgIEdEaXIqIGRpcmVj
dG9yeSA9IGdfZGlyX29wZW4oZGlyZWN0b3J5UGF0aCwgMCwgMCk7Ci0gICAgZ19hc3NlcnQoZGly
ZWN0b3J5KTsKLSAgICBjb25zdCBjaGFyKiBmaWxlTmFtZTsKLSAgICB3aGlsZSAoKGZpbGVOYW1l
ID0gZ19kaXJfcmVhZF9uYW1lKGRpcmVjdG9yeSkpKSB7Ci0gICAgICAgIEdPd25QdHI8Y2hhcj4g
ZmlsZVBhdGgoZ19idWlsZF9maWxlbmFtZShkaXJlY3RvcnlQYXRoLCBmaWxlTmFtZSwgTlVMTCkp
OwotICAgICAgICBnX3VubGluayhmaWxlUGF0aC5nZXQoKSk7Ci0gICAgfQotICAgIGdfZGlyX2Ns
b3NlKGRpcmVjdG9yeSk7Ci0gICAgZ19ybWRpcihkaXJlY3RvcnlQYXRoKTsKLX0KLQotaW50IG1h
aW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotewotICAgIGdfdW5zZXRlbnYoIkRCVVNfU0VTU0lP
Tl9CVVNfQUREUkVTUyIpOwotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCAwKTsKLSAg
ICBnX3NldGVudigiV0VCS0lUX0VYRUNfUEFUSCIsIFdFQktJVF9FWEVDX1BBVEgsIEZBTFNFKTsK
LSAgICBnX3NldGVudigiV0VCS0lUX0lOSkVDVEVEX0JVTkRMRV9QQVRIIiwgV0VCS0lUX0lOSkVD
VEVEX0JVTkRMRV9QQVRILCBGQUxTRSk7Ci0gICAgZ19zZXRlbnYoIkxDX0FMTCIsICJDIiwgVFJV
RSk7Ci0gICAgZ19zZXRlbnYoIkdJT19VU0VfVkZTIiwgImxvY2FsIiwgVFJVRSk7Ci0gICAgZ19z
ZXRlbnYoIkdTRVRUSU5HU19CQUNLRU5EIiwgIm1lbW9yeSIsIFRSVUUpOwotICAgIGdfdGVzdF9i
dWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0KLSAgICByZWdpc3RlckdSZXNv
dXJjZSgpOwotCi0gICAgR093blB0cjxjaGFyPiBkaXNrQ2FjaGVUZW1wRGlyZWN0b3J5KGdfZGly
X21ha2VfdG1wKCJXZWJLaXQyVGVzdHNEaXNrQ2FjaGUtWFhYWFhYIiwgMCkpOwotICAgIGdfYXNz
ZXJ0KGRpc2tDYWNoZVRlbXBEaXJlY3RvcnkuZ2V0KCkpOwotICAgIHdlYmtpdF93ZWJfY29udGV4
dF9zZXRfZGlza19jYWNoZV9kaXJlY3Rvcnkod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0
KCksIGRpc2tDYWNoZVRlbXBEaXJlY3RvcnkuZ2V0KCkpOwotCi0gICAgYmVmb3JlQWxsKCk7Ci0g
ICAgaW50IHJldHVyblZhbHVlID0gZ190ZXN0X3J1bigpOwotICAgIGFmdGVyQWxsKCk7Ci0KLSAg
ICByZW1vdmVOb25FbXB0eURpcmVjdG9yeShkaXNrQ2FjaGVUZW1wRGlyZWN0b3J5LmdldCgpKTsK
LQotICAgIHJldHVybiByZXR1cm5WYWx1ZTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RNYWluLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0TWFpbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMmM5MDcwLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL1Rlc3RNYWluLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgot
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFRlc3RNYWluX2gKLSNk
ZWZpbmUgVGVzdE1haW5faAotCi0jaW5jbHVkZSA8Y2Fpcm8uaD4KLSNpbmNsdWRlIDxnbGliLW9i
amVjdC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3Qv
R093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2RlZmluZSBNQUtF
X0dMSUJfVEVTVF9GSVhUVVJFKENsYXNzTmFtZSkgXAotICAgIHN0YXRpYyB2b2lkIHNldFVwKENs
YXNzTmFtZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKSBcCi0gICAgeyBcCi0gICAgICAg
IG5ldyAoZml4dHVyZSkgQ2xhc3NOYW1lOyBcCi0gICAgfSBcCi0gICAgc3RhdGljIHZvaWQgdGVh
ckRvd24oQ2xhc3NOYW1lKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpIFwKLSAgICB7IFwK
LSAgICAgICAgZml4dHVyZS0+fkNsYXNzTmFtZSgpOyBcCi0gICAgfSBcCi0gICAgc3RhdGljIHZv
aWQgYWRkKGNvbnN0IGNoYXIqIHN1aXRlTmFtZSwgY29uc3QgY2hhciogdGVzdE5hbWUsIHZvaWQg
KCp0ZXN0RnVuYykoQ2xhc3NOYW1lKiwgY29uc3Qgdm9pZCopKSBcCi0gICAgeyBcCi0gICAgICAg
IEdPd25QdHI8Z2NoYXI+IHRlc3RQYXRoKGdfc3RyZHVwX3ByaW50ZigiL3dlYmtpdDIvJXMvJXMi
LCBzdWl0ZU5hbWUsIHRlc3ROYW1lKSk7IFwKLSAgICAgICAgZ190ZXN0X2FkZCh0ZXN0UGF0aC5n
ZXQoKSwgQ2xhc3NOYW1lLCAwLCBDbGFzc05hbWU6OnNldFVwLCB0ZXN0RnVuYywgQ2xhc3NOYW1l
Ojp0ZWFyRG93bik7IFwKLSAgICB9Ci0KLSNkZWZpbmUgQVNTRVJUX0NNUF9DU1RSSU5HKHMxLCBj
bXAsIHMyKSBcCi0gICAgZG8geyBDU3RyaW5nIF9fczEgPSAoczEpOyBDU3RyaW5nIF9fczIgPSAo
czIpOyBcCi0gICAgICAgIGlmIChnX3N0cmNtcDAoX19zMS5kYXRhKCksIF9fczIuZGF0YSgpKSBj
bXAgMCkgOyBlbHNlIFwKLSAgICAgICAgICAgIGdfYXNzZXJ0aW9uX21lc3NhZ2VfY21wc3RyKEdf
TE9HX0RPTUFJTiwgX19GSUxFX18sIF9fTElORV9fLCBHX1NUUkZVTkMsIFwKLSAgICAgICAgICAg
ICAgICAjczEgIiAiICNjbXAgIiAiICNzMiwgX19zMS5kYXRhKCksICNjbXAsIF9fczIuZGF0YSgp
KTsgfSB3aGlsZSAoMCkKLQotY2xhc3MgVGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RF
U1RfRklYVFVSRShUZXN0KTsKLQotICAgIH5UZXN0KCkKLSAgICB7Ci0gICAgICAgIGlmIChtX3dh
dGNoZWRPYmplY3RzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBn
X3ByaW50KCJMZWFrZWQgb2JqZWN0czoiKTsKLSAgICAgICAgSGFzaFNldDxHT2JqZWN0Kj46OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1fd2F0Y2hlZE9iamVjdHMuZW5kKCk7Ci0gICAgICAgIGZvciAo
SGFzaFNldDxHT2JqZWN0Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV93YXRjaGVkT2JqZWN0cy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBnX3ByaW50KCIgJXMoJXApIiwg
Z190eXBlX25hbWVfZnJvbV9pbnN0YW5jZShyZWludGVycHJldF9jYXN0PEdUeXBlSW5zdGFuY2Uq
PigqaXQpKSwgKml0KTsKLSAgICAgICAgZ19wcmludCgiXG4iKTsKLQotICAgICAgICBnX2Fzc2Vy
dChtX3dhdGNoZWRPYmplY3RzLmlzRW1wdHkoKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQg
b2JqZWN0RmluYWxpemVkKFRlc3QqIHRlc3QsIEdPYmplY3QqIGZpbmFsaXplZE9iamVjdCkKLSAg
ICB7Ci0gICAgICAgIHRlc3QtPm1fd2F0Y2hlZE9iamVjdHMucmVtb3ZlKGZpbmFsaXplZE9iamVj
dCk7Ci0gICAgfQotCi0gICAgdm9pZCBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlz
aGVzKEdPYmplY3QqIG9iamVjdCkKLSAgICB7Ci0gICAgICAgIG1fd2F0Y2hlZE9iamVjdHMuYWRk
KG9iamVjdCk7Ci0gICAgICAgIGdfb2JqZWN0X3dlYWtfcmVmKG9iamVjdCwgcmVpbnRlcnByZXRf
Y2FzdDxHV2Vha05vdGlmeT4ob2JqZWN0RmluYWxpemVkKSwgdGhpcyk7Ci0gICAgfQotCi0gICAg
c3RhdGljIENTdHJpbmcgZ2V0V2ViS2l0MVRlc3RSZXNvdWNlc0RpcigpCi0gICAgewotICAgICAg
ICBHT3duUHRyPGNoYXI+IHJlc291cmNlc0RpcihnX2J1aWxkX2ZpbGVuYW1lKFdFQktJVF9TUkNf
RElSLCAiU291cmNlIiwgIldlYktpdCIsICJndGsiLCAidGVzdHMiLCAicmVzb3VyY2VzIiwgTlVM
TCkpOwotICAgICAgICByZXR1cm4gcmVzb3VyY2VzRGlyLmdldCgpOwotICAgIH0KLQotICAgIHN0
YXRpYyBDU3RyaW5nIGdldFJlc291cmNlc0RpcigpCi0gICAgewotICAgICAgICBHT3duUHRyPGNo
YXI+IHJlc291cmNlc0RpcihnX2J1aWxkX2ZpbGVuYW1lKFdFQktJVF9TUkNfRElSLCAiU291cmNl
IiwgIldlYktpdDIiLCAiVUlQcm9jZXNzIiwgIkFQSSIsICJndGsiLCAidGVzdHMiLCAicmVzb3Vy
Y2VzIiwgTlVMTCkpOwotICAgICAgICByZXR1cm4gcmVzb3VyY2VzRGlyLmdldCgpOwotICAgIH0K
LQotICAgIHZvaWQgYWRkTG9nRmF0YWxGbGFnKHVuc2lnbmVkIGZsYWcpCi0gICAgewotICAgICAg
ICB1bnNpZ25lZCBmYXRhbE1hc2sgPSBnX2xvZ19zZXRfYWx3YXlzX2ZhdGFsKHN0YXRpY19jYXN0
PEdMb2dMZXZlbEZsYWdzPihHX0xPR19GQVRBTF9NQVNLKSk7Ci0gICAgICAgIGZhdGFsTWFzayB8
PSBmbGFnOwotICAgICAgICBnX2xvZ19zZXRfYWx3YXlzX2ZhdGFsKHN0YXRpY19jYXN0PEdMb2dM
ZXZlbEZsYWdzPihmYXRhbE1hc2spKTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlbW92ZUxvZ0ZhdGFs
RmxhZyh1bnNpZ25lZCBmbGFnKQotICAgIHsKLSAgICAgICAgdW5zaWduZWQgZmF0YWxNYXNrID0g
Z19sb2dfc2V0X2Fsd2F5c19mYXRhbChzdGF0aWNfY2FzdDxHTG9nTGV2ZWxGbGFncz4oR19MT0df
RkFUQUxfTUFTSykpOwotICAgICAgICBmYXRhbE1hc2sgJj0gfmZsYWc7Ci0gICAgICAgIGdfbG9n
X3NldF9hbHdheXNfZmF0YWwoc3RhdGljX2Nhc3Q8R0xvZ0xldmVsRmxhZ3M+KGZhdGFsTWFzaykp
OwotICAgIH0KLQotICAgIHN0YXRpYyBib29sIGNhaXJvU3VyZmFjZXNFcXVhbChjYWlyb19zdXJm
YWNlX3QqIHMxLCBjYWlyb19zdXJmYWNlX3QqIHMyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIChj
YWlyb19pbWFnZV9zdXJmYWNlX2dldF9mb3JtYXQoczEpID09IGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X2Zvcm1hdChzMikKLSAgICAgICAgICAgICYmIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dp
ZHRoKHMxKSA9PSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChzMikKLSAgICAgICAgICAg
ICYmIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzMSkgPT0gY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9nZXRfaGVpZ2h0KHMyKQotICAgICAgICAgICAgJiYgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfc3RyaWRlKHMxKSA9PSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoczIpCi0gICAg
ICAgICAgICAmJiAhbWVtY21wKGNvbnN0X2Nhc3Q8Y29uc3Qgdm9pZCo+KHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoczEpKSksCi0gICAgICAgICAg
ICAgICAgY29uc3RfY2FzdDxjb25zdCB2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzMikpKSwKLSAgICAgICAgICAgICAgICBjYWlyb19p
bWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoczEpKmNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlk
ZShzMSkpKTsKLSAgICB9Ci0KLSAgICBIYXNoU2V0PEdPYmplY3QqPiBtX3dhdGNoZWRPYmplY3Rz
OwotfTsKLQotI2VuZGlmIC8vIFRlc3RNYWluX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RQcmludGluZy5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0UHJpbnRpbmcuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA3MmMyY2ZiLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RQcmludGluZy5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwyMDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCi0jaW5jbHVkZSA8Z2xp
Yi9nc3RkaW8uaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Ci0KLSNpZmRlZiBI
QVZFX0dUS19VTklYX1BSSU5USU5HCi0jaW5jbHVkZSA8Z3RrL2d0a3VuaXhwcmludC5oPgotI2Vu
ZGlmCi0KLXN0YXRpYyBjaGFyKiBrVGVtcERpcmVjdG9yeTsKLQotc3RhdGljIHZvaWQgdGVzdFBy
aW50T3BlcmF0aW9uUHJpbnRTZXR0aW5ncyhXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRl
cikKLXsKLSAgICBHUmVmUHRyPFdlYktpdFByaW50T3BlcmF0aW9uPiBwcmludE9wZXJhdGlvbiA9
IGFkb3B0R1JlZih3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX25ldyh0ZXN0LT5tX3dlYlZpZXcpKTsK
LSAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNU
KHByaW50T3BlcmF0aW9uLmdldCgpKSk7Ci0KLSAgICBnX2Fzc2VydCghd2Via2l0X3ByaW50X29w
ZXJhdGlvbl9nZXRfcHJpbnRfc2V0dGluZ3MocHJpbnRPcGVyYXRpb24uZ2V0KCkpKTsKLSAgICBn
X2Fzc2VydCghd2Via2l0X3ByaW50X29wZXJhdGlvbl9nZXRfcGFnZV9zZXR1cChwcmludE9wZXJh
dGlvbi5nZXQoKSkpOwotCi0gICAgR1JlZlB0cjxHdGtQcmludFNldHRpbmdzPiBwcmludFNldHRp
bmdzID0gYWRvcHRHUmVmKGd0a19wcmludF9zZXR0aW5nc19uZXcoKSk7Ci0gICAgdGVzdC0+YXNz
ZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChwcmludFNldHRpbmdz
LmdldCgpKSk7Ci0KLSAgICBHUmVmUHRyPEd0a1BhZ2VTZXR1cD4gcGFnZVNldHVwID0gYWRvcHRH
UmVmKGd0a19wYWdlX3NldHVwX25ldygpKTsKLSAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0
ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHBhZ2VTZXR1cC5nZXQoKSkpOwotCi0gICAgd2Vi
a2l0X3ByaW50X29wZXJhdGlvbl9zZXRfcHJpbnRfc2V0dGluZ3MocHJpbnRPcGVyYXRpb24uZ2V0
KCksIHByaW50U2V0dGluZ3MuZ2V0KCkpOwotICAgIHdlYmtpdF9wcmludF9vcGVyYXRpb25fc2V0
X3BhZ2Vfc2V0dXAocHJpbnRPcGVyYXRpb24uZ2V0KCksIHBhZ2VTZXR1cC5nZXQoKSk7Ci0KLSAg
ICBnX2Fzc2VydCh3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX2dldF9wcmludF9zZXR0aW5ncyhwcmlu
dE9wZXJhdGlvbi5nZXQoKSkgPT0gcHJpbnRTZXR0aW5ncy5nZXQoKSk7Ci0gICAgZ19hc3NlcnQo
d2Via2l0X3ByaW50X29wZXJhdGlvbl9nZXRfcGFnZV9zZXR1cChwcmludE9wZXJhdGlvbi5nZXQo
KSkgPT0gcGFnZVNldHVwLmdldCgpKTsKLX0KLQotc3RhdGljIGdib29sZWFuIHdlYlZpZXdQcmlu
dENhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFByaW50T3BlcmF0aW9uKiBw
cmludE9wZXJhdGlvbiwgV2ViVmlld1Rlc3QqIHRlc3QpCi17Ci0gICAgZ19hc3NlcnQod2ViVmll
dyA9PSB0ZXN0LT5tX3dlYlZpZXcpOwotCi0gICAgZ19hc3NlcnQoV0VCS0lUX0lTX1BSSU5UX09Q
RVJBVElPTihwcmludE9wZXJhdGlvbikpOwotICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRl
ZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QocHJpbnRPcGVyYXRpb24pKTsKLQotICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX2dldF9wcmludF9zZXR0aW5ncyhwcmludE9wZXJh
dGlvbikpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX2dldF9wYWdlX3Nl
dHVwKHByaW50T3BlcmF0aW9uKSk7Ci0KLSAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFp
bkxvb3ApOwotCi0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3
UHJpbnQoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgZ19zaWduYWxf
Y29ubmVjdCh0ZXN0LT5tX3dlYlZpZXcsICJwcmludCIsIEdfQ0FMTEJBQ0sod2ViVmlld1ByaW50
Q2FsbGJhY2spLCB0ZXN0KTsKLSAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHkgb25Mb2Fk
PVwicHJpbnQoKTtcIj5XZWJLaXRHVEsrIHByaW50aW5nIHRlc3Q8L2JvZHk+PC9odG1sPiIsIDAp
OwotICAgIGdfbWFpbl9sb29wX3J1bih0ZXN0LT5tX21haW5Mb29wKTsKLX0KLQotI2lmZGVmIEhB
VkVfR1RLX1VOSVhfUFJJTlRJTkcKLWNsYXNzIFByaW50VGVzdDogcHVibGljIFdlYlZpZXdUZXN0
IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFByaW50VGVzdCk7Ci0KLSAg
ICBzdGF0aWMgdm9pZCBwcmludEZpbmlzaGVkQ2FsbGJhY2soV2ViS2l0UHJpbnRPcGVyYXRpb24q
LCBQcmludFRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3Qt
Pm1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHByaW50RmFpbGVkQ2FsbGJh
Y2soV2ViS2l0UHJpbnRPcGVyYXRpb24qLCBHRXJyb3IqIGVycm9yLCBQcmludFRlc3QqIHRlc3Qp
Ci0gICAgewotICAgICAgICBnX2Fzc2VydCh0ZXN0LT5tX2V4cGVjdGVkRXJyb3IpOwotICAgICAg
ICBnX2Fzc2VydChlcnJvcik7Ci0gICAgICAgIGdfYXNzZXJ0KGdfZXJyb3JfbWF0Y2hlcyhlcnJv
ciwgV0VCS0lUX1BSSU5UX0VSUk9SLCB0ZXN0LT5tX2V4cGVjdGVkRXJyb3IpKTsKLSAgICB9Ci0K
LSAgICBQcmludFRlc3QoKQotICAgICAgICA6IG1fZXhwZWN0ZWRFcnJvcigwKQotICAgIHsKLSAg
ICAgICAgbV9wcmludE9wZXJhdGlvbiA9IGFkb3B0R1JlZih3ZWJraXRfcHJpbnRfb3BlcmF0aW9u
X25ldyhtX3dlYlZpZXcpKTsKLSAgICAgICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RG
aW5pc2hlcyhHX09CSkVDVChtX3ByaW50T3BlcmF0aW9uLmdldCgpKSk7Ci0gICAgICAgIGdfc2ln
bmFsX2Nvbm5lY3QobV9wcmludE9wZXJhdGlvbi5nZXQoKSwgImZpbmlzaGVkIiwgR19DQUxMQkFD
SyhwcmludEZpbmlzaGVkQ2FsbGJhY2spLCB0aGlzKTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVj
dChtX3ByaW50T3BlcmF0aW9uLmdldCgpLCAiZmFpbGVkIiwgR19DQUxMQkFDSyhwcmludEZhaWxl
ZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgfQotCi0gICAgc3RhdGljIGdib29sZWFuIHRlc3RQcmlu
dE9wZXJhdGlvblByaW50UHJpbnRlcihHdGtQcmludGVyKiBwcmludGVyLCBncG9pbnRlciB1c2Vy
RGF0YSkKLSAgICB7Ci0gICAgICAgIGlmIChzdHJjbXAoZ3RrX3ByaW50ZXJfZ2V0X25hbWUocHJp
bnRlciksICJQcmludCB0byBGaWxlIikpCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7Ci0KLSAg
ICAgICAgR3RrUHJpbnRlcioqIGZvdW5kUHJpbnRlciA9IHN0YXRpY19jYXN0PEd0a1ByaW50ZXIq
Kj4odXNlckRhdGEpOwotICAgICAgICAqZm91bmRQcmludGVyID0gc3RhdGljX2Nhc3Q8R3RrUHJp
bnRlcio+KGdfb2JqZWN0X3JlZihwcmludGVyKSk7Ci0gICAgICAgIHJldHVybiBUUlVFOwotICAg
IH0KLQotICAgIEd0a1ByaW50ZXIqIGZpbmRQcmludFRvRmlsZVByaW50ZXIoKQotICAgIHsKLSAg
ICAgICAgR3RrUHJpbnRlciogcHJpbnRlciA9IDA7Ci0gICAgICAgIGd0a19lbnVtZXJhdGVfcHJp
bnRlcnModGVzdFByaW50T3BlcmF0aW9uUHJpbnRQcmludGVyLCAmcHJpbnRlciwgMCwgVFJVRSk7
Ci0gICAgICAgIHJldHVybiBwcmludGVyOwotICAgIH0KLQotICAgIHZvaWQgd2FpdFVudGlsUHJp
bnRGaW5pc2hlZCgpCi0gICAgewotICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7
Ci0gICAgfQotCi0gICAgR1JlZlB0cjxXZWJLaXRQcmludE9wZXJhdGlvbj4gbV9wcmludE9wZXJh
dGlvbjsKLSAgICB1bnNpZ25lZCBpbnQgbV9leHBlY3RlZEVycm9yOwotfTsKLQotc3RhdGljIHZv
aWQgdGVzdFByaW50T3BlcmF0aW9uUHJpbnQoUHJpbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVy
KQotewotICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keT5XZWJLaXRHVEsrIHByaW50aW5n
IHRlc3Q8L2JvZHk+PC9odG1sPiIsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hl
ZCgpOwotCi0gICAgR1JlZlB0cjxHdGtQcmludGVyPiBwcmludGVyID0gYWRvcHRHUmVmKHRlc3Qt
PmZpbmRQcmludFRvRmlsZVByaW50ZXIoKSk7Ci0gICAgaWYgKCFwcmludGVyKSB7Ci0gICAgICAg
IGdfbWVzc2FnZSgiJXMiLCAiQ2Fubm90IHRlc3QgV2ViS2l0UHJpbnRPcGVyYXRpb24vcHJpbnQ6
IG5vIHN1aXRhYmxlIHByaW50ZXIgZm91bmQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIEdPd25QdHI8Y2hhcj4gb3V0cHV0RmlsZW5hbWUoZ19idWlsZF9maWxlbmFtZShrVGVtcERp
cmVjdG9yeSwgIndlYmtpdC1wcmludC5wZGYiLCBOVUxMKSk7Ci0gICAgR1JlZlB0cjxHRmlsZT4g
b3V0cHV0RmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKG91dHB1dEZpbGVuYW1l
LmdldCgpKSk7Ci0gICAgR093blB0cjxjaGFyPiBvdXRwdXRVUkkoZ19maWxlX2dldF91cmkob3V0
cHV0RmlsZS5nZXQoKSkpOwotCi0gICAgR1JlZlB0cjxHdGtQcmludFNldHRpbmdzPiBwcmludFNl
dHRpbmdzID0gYWRvcHRHUmVmKGd0a19wcmludF9zZXR0aW5nc19uZXcoKSk7Ci0gICAgZ3RrX3By
aW50X3NldHRpbmdzX3NldF9wcmludGVyKHByaW50U2V0dGluZ3MuZ2V0KCksIGd0a19wcmludGVy
X2dldF9uYW1lKHByaW50ZXIuZ2V0KCkpKTsKLSAgICBndGtfcHJpbnRfc2V0dGluZ3Nfc2V0KHBy
aW50U2V0dGluZ3MuZ2V0KCksIEdUS19QUklOVF9TRVRUSU5HU19PVVRQVVRfVVJJLCBvdXRwdXRV
UkkuZ2V0KCkpOwotCi0gICAgd2Via2l0X3ByaW50X29wZXJhdGlvbl9zZXRfcHJpbnRfc2V0dGlu
Z3ModGVzdC0+bV9wcmludE9wZXJhdGlvbi5nZXQoKSwgcHJpbnRTZXR0aW5ncy5nZXQoKSk7Ci0g
ICAgd2Via2l0X3ByaW50X29wZXJhdGlvbl9wcmludCh0ZXN0LT5tX3ByaW50T3BlcmF0aW9uLmdl
dCgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxQcmludEZpbmlzaGVkKCk7Ci0KLSAgICBHUmVmUHRy
PEdGaWxlSW5mbz4gZmlsZUluZm8gPSBhZG9wdEdSZWYoZ19maWxlX3F1ZXJ5X2luZm8ob3V0cHV0
RmlsZS5nZXQoKSwgR19GSUxFX0FUVFJJQlVURV9TVEFOREFSRF9TSVpFICIsIiBHX0ZJTEVfQVRU
UklCVVRFX1NUQU5EQVJEX0NPTlRFTlRfVFlQRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R0ZpbGVRdWVy
eUluZm9GbGFncz4oMCksIDAsIDApKTsKLSAgICBnX2Fzc2VydChmaWxlSW5mby5nZXQoKSk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KGdfZmlsZV9pbmZvX2dldF9zaXplKGZpbGVJbmZvLmdldCgpKSwg
PiwgMCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKGdfZmlsZV9pbmZvX2dldF9jb250ZW50X3R5cGUo
ZmlsZUluZm8uZ2V0KCkpLCA9PSwgImFwcGxpY2F0aW9uL3BkZiIpOwotCi0gICAgZ19maWxlX2Rl
bGV0ZShvdXRwdXRGaWxlLmdldCgpLCAwLCAwKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFByaW50
T3BlcmF0aW9uRXJyb3JzKFByaW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0
ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHk+V2ViS2l0R1RLKyBwcmludGluZyBlcnJvcnMgdGVz
dDwvYm9keT48L2h0bWw+IiwgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7
Ci0KLSAgICBHUmVmUHRyPEd0a1ByaW50ZXI+IHByaW50ZXIgPSBhZG9wdEdSZWYodGVzdC0+Zmlu
ZFByaW50VG9GaWxlUHJpbnRlcigpKTsKLSAgICBpZiAoIXByaW50ZXIpIHsKLSAgICAgICAgZ19t
ZXNzYWdlKCIlcyIsICJDYW5ub3QgdGVzdCBXZWJLaXRQcmludE9wZXJhdGlvbi9wcmludDogbm8g
c3VpdGFibGUgcHJpbnRlciBmb3VuZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
Ly8gR2VuZXJhbCBFcnJvcjogaW52YWxpZCBmaWxlbmFtZS4KLSAgICB0ZXN0LT5tX2V4cGVjdGVk
RXJyb3IgPSBXRUJLSVRfUFJJTlRfRVJST1JfR0VORVJBTDsKLSAgICBHUmVmUHRyPEd0a1ByaW50
U2V0dGluZ3M+IHByaW50U2V0dGluZ3MgPSBhZG9wdEdSZWYoZ3RrX3ByaW50X3NldHRpbmdzX25l
dygpKTsKLSAgICBndGtfcHJpbnRfc2V0dGluZ3Nfc2V0X3ByaW50ZXIocHJpbnRTZXR0aW5ncy5n
ZXQoKSwgZ3RrX3ByaW50ZXJfZ2V0X25hbWUocHJpbnRlci5nZXQoKSkpOwotICAgIGd0a19wcmlu
dF9zZXR0aW5nc19zZXQocHJpbnRTZXR0aW5ncy5nZXQoKSwgR1RLX1BSSU5UX1NFVFRJTkdTX09V
VFBVVF9VUkksICJmaWxlOi8vL2Zvby9iYXIiKTsKLSAgICB3ZWJraXRfcHJpbnRfb3BlcmF0aW9u
X3NldF9wcmludF9zZXR0aW5ncyh0ZXN0LT5tX3ByaW50T3BlcmF0aW9uLmdldCgpLCBwcmludFNl
dHRpbmdzLmdldCgpKTsKLSAgICB3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX3ByaW50KHRlc3QtPm1f
cHJpbnRPcGVyYXRpb24uZ2V0KCkpOwotICAgIHRlc3QtPndhaXRVbnRpbFByaW50RmluaXNoZWQo
KTsKLQotICAgIC8vIFByaW50ZXIgbm90IGZvdW5kIGVycm9yLgotICAgIHRlc3QtPm1fZXhwZWN0
ZWRFcnJvciA9IFdFQktJVF9QUklOVF9FUlJPUl9QUklOVEVSX05PVF9GT1VORDsKLSAgICBndGtf
cHJpbnRfc2V0dGluZ3Nfc2V0X3ByaW50ZXIocHJpbnRTZXR0aW5ncy5nZXQoKSwgIlRoZSBmYWtl
IFdlYktpdCBwcmludGVyIik7Ci0gICAgd2Via2l0X3ByaW50X29wZXJhdGlvbl9wcmludCh0ZXN0
LT5tX3ByaW50T3BlcmF0aW9uLmdldCgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxQcmludEZpbmlz
aGVkKCk7Ci0KLSAgICAvLyBObyBwYWdlcyB0byBwcmludDogcHJpbnQgZXZlbiBwYWdlcyBmb3Ig
YSBzaW5nbGUgcGFnZSBkb2N1bWVudC4KLSAgICB0ZXN0LT5tX2V4cGVjdGVkRXJyb3IgPSBXRUJL
SVRfUFJJTlRfRVJST1JfSU5WQUxJRF9QQUdFX1JBTkdFOwotICAgIGd0a19wcmludF9zZXR0aW5n
c19zZXRfcHJpbnRlcihwcmludFNldHRpbmdzLmdldCgpLCBndGtfcHJpbnRlcl9nZXRfbmFtZShw
cmludGVyLmdldCgpKSk7Ci0gICAgZ3RrX3ByaW50X3NldHRpbmdzX3NldF9wYWdlX3NldChwcmlu
dFNldHRpbmdzLmdldCgpLCBHVEtfUEFHRV9TRVRfRVZFTik7Ci0gICAgd2Via2l0X3ByaW50X29w
ZXJhdGlvbl9wcmludCh0ZXN0LT5tX3ByaW50T3BlcmF0aW9uLmdldCgpKTsKLSAgICB0ZXN0LT53
YWl0VW50aWxQcmludEZpbmlzaGVkKCk7Ci19Ci0jZW5kaWYgLy8gSEFWRV9HVEtfVU5JWF9QUklO
VElORwotCi12b2lkIGJlZm9yZUFsbCgpCi17Ci0gICAga1RlbXBEaXJlY3RvcnkgPSBnX2Rpcl9t
YWtlX3RtcCgiV2ViS2l0MlRlc3RzLVhYWFhYWCIsIDApOwotICAgIGdfYXNzZXJ0KGtUZW1wRGly
ZWN0b3J5KTsKLQotICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFByaW50T3BlcmF0aW9uIiwg
InByaW50aW5nLXNldHRpbmdzIiwgdGVzdFByaW50T3BlcmF0aW9uUHJpbnRTZXR0aW5ncyk7Ci0g
ICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJwcmludCIsIHRlc3RXZWJWaWV3
UHJpbnQpOwotI2lmZGVmIEhBVkVfR1RLX1VOSVhfUFJJTlRJTkcKLSAgICBQcmludFRlc3Q6OmFk
ZCgiV2ViS2l0UHJpbnRPcGVyYXRpb24iLCAicHJpbnQiLCB0ZXN0UHJpbnRPcGVyYXRpb25Qcmlu
dCk7Ci0gICAgUHJpbnRUZXN0OjphZGQoIldlYktpdFByaW50T3BlcmF0aW9uIiwgInByaW50LWVy
cm9ycyIsIHRlc3RQcmludE9wZXJhdGlvbkVycm9ycyk7Ci0jZW5kaWYKLX0KLQotdm9pZCBhZnRl
ckFsbCgpCi17Ci0gICAgZ19ybWRpcihrVGVtcERpcmVjdG9yeSk7Ci19CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0UmVzb3VyY2VzLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RSZXNvdXJjZXMuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1N2YxODJjLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RSZXNvdXJjZXMuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsNzg5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
SWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiV2ViS2l0VGVzdFNl
cnZlci5oIgotI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLQotc3RhdGljIFdlYktpdFRlc3RT
ZXJ2ZXIqIGtTZXJ2ZXI7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBrSW5kZXhIdG1sID0KLSAgICAi
PGh0bWw+PGhlYWQ+IgotICAgICIgPGxpbmsgcmVsPSdzdHlsZXNoZWV0JyBocmVmPScvc3R5bGUu
Y3NzJyB0eXBlPSd0ZXh0L2Nzcyc+IgotICAgICIgPHNjcmlwdCBsYW5ndWFnZT0namF2YXNjcmlw
dCcgc3JjPScvamF2YXNjcmlwdC5qcyc+PC9zY3JpcHQ+IgotICAgICI8L2hlYWQ+PGJvZHk+V2Vi
S2l0R1RLKyByZXNvdXJjZXMgdGVzdDwvYm9keT48L2h0bWw+IjsKLQotc3RhdGljIGNvbnN0IGNo
YXIqIGtTdHlsZUNTUyA9Ci0gICAgImJvZHkgeyIKLSAgICAiICAgIG1hcmdpbjogMHB4OyIKLSAg
ICAiICAgIHBhZGRpbmc6IDBweDsiCi0gICAgIiAgICBmb250LWZhbWlseTogc2Fucy1zZXJpZjsi
Ci0gICAgIiAgICBiYWNrZ3JvdW5kOiB1cmwoL2JsYW5rLmljbykgMCAwIG5vLXJlcGVhdDsiCi0g
ICAgIiAgICBjb2xvcjogYmxhY2s7IgotICAgICJ9IjsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGtK
YXZhc2NyaXB0ID0gImZ1bmN0aW9uIGZvbyAoKSB7IHZhciBhID0gMTsgfSI7Ci0KLWNsYXNzIFJl
c291cmNlc1Rlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElC
X1RFU1RfRklYVFVSRShSZXNvdXJjZXNUZXN0KTsKLQotICAgIHN0YXRpYyB2b2lkIHJlc291cmNl
U2VudFJlcXVlc3RDYWxsYmFjayhXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIFdlYktpdFVS
SVJlcXVlc3QqIHJlcXVlc3QsIFdlYktpdFVSSVJlc3BvbnNlKiByZWRpcmVjdFJlc3BvbnNlLCBS
ZXNvdXJjZXNUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNE
ZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChyZXF1ZXN0KSk7Ci0gICAgICAgIGlmIChy
ZWRpcmVjdFJlc3BvbnNlKQotICAgICAgICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVk
V2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChyZWRpcmVjdFJlc3BvbnNlKSk7Ci0gICAgICAgIHRl
c3QtPnJlc291cmNlU2VudFJlcXVlc3QocmVzb3VyY2UsIHJlcXVlc3QsIHJlZGlyZWN0UmVzcG9u
c2UpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHJlc291cmNlUmVjZWl2ZWRSZXNwb25zZUNh
bGxiYWNrKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgR1BhcmFtU3BlYyosIFJlc291cmNl
c1Rlc3QqIHRlc3QpCi0gICAgewotICAgICAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3Jlc291cmNl
X2dldF9yZXNwb25zZShyZXNvdXJjZSkpOwotICAgICAgICB0ZXN0LT5yZXNvdXJjZVJlY2VpdmVk
UmVzcG9uc2UocmVzb3VyY2UpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHJlc291cmNlUmVj
ZWl2ZWREYXRhQ2FsbGJhY2soV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBndWludDY0IGJ5
dGVzUmVjZWl2ZWQsIFJlc291cmNlc1Rlc3QqIHRlc3QpCi0gICAgewotICAgICAgICB0ZXN0LT5y
ZXNvdXJjZVJlY2VpdmVkRGF0YShyZXNvdXJjZSwgYnl0ZXNSZWNlaXZlZCk7Ci0gICAgfQotCi0g
ICAgc3RhdGljIHZvaWQgcmVzb3VyY2VGaW5pc2hlZENhbGxiYWNrKFdlYktpdFdlYlJlc291cmNl
KiByZXNvdXJjZSwgUmVzb3VyY2VzVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHRlc3QtPnJl
c291cmNlRmluaXNoZWQocmVzb3VyY2UpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHJlc291
cmNlRmFpbGVkQ2FsbGJhY2soV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBHRXJyb3IqIGVy
cm9yLCBSZXNvdXJjZXNUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgZ19hc3NlcnQoZXJyb3Ip
OwotICAgICAgICB0ZXN0LT5yZXNvdXJjZUZhaWxlZChyZXNvdXJjZSwgZXJyb3IpOwotICAgIH0K
LQotICAgIHN0YXRpYyB2b2lkIHJlc291cmNlTG9hZFN0YXJ0ZWRDYWxsYmFjayhXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3LCBXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIFdlYktpdFVSSVJlcXVl
c3QqIHJlcXVlc3QsIFJlc291cmNlc1Rlc3QqIHRlc3QpCi0gICAgewotICAgICAgICB0ZXN0LT5h
c3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHJlc291cmNlKSk7
Ci0gICAgICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19P
QkpFQ1QocmVxdWVzdCkpOwotCi0gICAgICAgIC8vIElnbm9yZSBmYXZpY29ucy4KLSAgICAgICAg
aWYgKGdfc3RyX2hhc19zdWZmaXgod2Via2l0X3VyaV9yZXF1ZXN0X2dldF91cmkocmVxdWVzdCks
ICJmYXZpY29uLmljbyIpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRlc3QtPnJl
c291cmNlTG9hZFN0YXJ0ZWQocmVzb3VyY2UsIHJlcXVlc3QpOwotICAgICAgICBnX3NpZ25hbF9j
b25uZWN0KHJlc291cmNlLCAic2VudC1yZXF1ZXN0IiwgR19DQUxMQkFDSyhyZXNvdXJjZVNlbnRS
ZXF1ZXN0Q2FsbGJhY2spLCB0ZXN0KTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChyZXNvdXJj
ZSwgIm5vdGlmeTo6cmVzcG9uc2UiLCBHX0NBTExCQUNLKHJlc291cmNlUmVjZWl2ZWRSZXNwb25z
ZUNhbGxiYWNrKSwgdGVzdCk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QocmVzb3VyY2UsICJy
ZWNlaXZlZC1kYXRhIiwgR19DQUxMQkFDSyhyZXNvdXJjZVJlY2VpdmVkRGF0YUNhbGxiYWNrKSwg
dGVzdCk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QocmVzb3VyY2UsICJmaW5pc2hlZCIsIEdf
Q0FMTEJBQ0socmVzb3VyY2VGaW5pc2hlZENhbGxiYWNrKSwgdGVzdCk7Ci0gICAgICAgIGdfc2ln
bmFsX2Nvbm5lY3QocmVzb3VyY2UsICJmYWlsZWQiLCBHX0NBTExCQUNLKHJlc291cmNlRmFpbGVk
Q2FsbGJhY2spLCB0ZXN0KTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyU3VicmVzb3VyY2VzKCkK
LSAgICB7Ci0gICAgICAgIGdfbGlzdF9mcmVlX2Z1bGwobV9zdWJyZXNvdXJjZXMsIHJlaW50ZXJw
cmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGdfb2JqZWN0X3VucmVmKSk7Ci0gICAgICAgIG1fc3Vi
cmVzb3VyY2VzID0gMDsKLSAgICB9Ci0KLSAgICBSZXNvdXJjZXNUZXN0KCkKLSAgICAgICAgOiBX
ZWJWaWV3VGVzdCgpCi0gICAgICAgICwgbV9yZXNvdXJjZXNMb2FkZWQoMCkKLSAgICAgICAgLCBt
X3Jlc291cmNlc1RvTG9hZCgwKQotICAgICAgICAsIG1fcmVzb3VyY2VEYXRhU2l6ZSgwKQotICAg
ICAgICAsIG1fc3VicmVzb3VyY2VzKDApCi0gICAgewotICAgICAgICBnX3NpZ25hbF9jb25uZWN0
KG1fd2ViVmlldywgInJlc291cmNlLWxvYWQtc3RhcnRlZCIsIEdfQ0FMTEJBQ0socmVzb3VyY2VM
b2FkU3RhcnRlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgfQotCi0gICAgflJlc291cmNlc1Rlc3Qo
KQotICAgIHsKLSAgICAgICAgY2xlYXJTdWJyZXNvdXJjZXMoKTsKLSAgICB9Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgcmVzb3VyY2VMb2FkU3RhcnRlZChXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2Us
IFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwg
dm9pZCByZXNvdXJjZVNlbnRSZXF1ZXN0KFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgV2Vi
S2l0VVJJUmVxdWVzdCogcmVxdWVzdCwgV2ViS2l0VVJJUmVzcG9uc2UqIHJlZGlyZWN0UmVzcG9u
c2UpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCByZXNvdXJjZVJlY2VpdmVkUmVz
cG9uc2UoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlKQotICAgIHsKLSAgICB9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgcmVzb3VyY2VSZWNlaXZlZERhdGEoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291
cmNlLCBndWludDY0IGJ5dGVzUmVjZWl2ZWQpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwg
dm9pZCByZXNvdXJjZUZpbmlzaGVkKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSkKLSAgICB7
Ci0gICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChyZXNvdXJjZSwg
R19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7Ci0gICAgICAgIGlmICh3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2UobV93ZWJWaWV3KSAhPSByZXNvdXJjZSkKLSAg
ICAgICAgICAgIG1fc3VicmVzb3VyY2VzID0gZ19saXN0X3ByZXBlbmQobV9zdWJyZXNvdXJjZXMs
IGdfb2JqZWN0X3JlZihyZXNvdXJjZSkpOwotICAgICAgICBpZiAoKyttX3Jlc291cmNlc0xvYWRl
ZCA9PSBtX3Jlc291cmNlc1RvTG9hZCkKLSAgICAgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9t
YWluTG9vcCk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHJlc291cmNlRmFpbGVkKFdlYktp
dFdlYlJlc291cmNlKiByZXNvdXJjZSwgR0Vycm9yKiBlcnJvcikKLSAgICB7Ci0gICAgICAgIGdf
YXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0gICAgfQotCi0gICAgdm9pZCB3YWl0VW50aWxSZXNvdXJj
ZXNMb2FkZWQoc2l6ZV90IHJlc291cmNlc0NvdW50KQotICAgIHsKLSAgICAgICAgbV9yZXNvdXJj
ZXNMb2FkZWQgPSAwOwotICAgICAgICBtX3Jlc291cmNlc1RvTG9hZCA9IHJlc291cmNlc0NvdW50
OwotICAgICAgICBjbGVhclN1YnJlc291cmNlcygpOwotICAgICAgICBnX21haW5fbG9vcF9ydW4o
bV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgR0xpc3QqIHN1YnJlc291cmNlcygpCi0gICAgewot
ICAgICAgICByZXR1cm4gbV9zdWJyZXNvdXJjZXM7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQg
cmVzb3VyY2VHZXREYXRhQ2FsbGJhY2soR09iamVjdCogb2JqZWN0LCBHQXN5bmNSZXN1bHQqIHJl
c3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEpCi0gICAgewotICAgICAgICBzaXplX3QgZGF0YVNpemU7
Ci0gICAgICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKLSAgICAgICAgdW5zaWduZWQgY2hhciog
ZGF0YSA9IHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X2RhdGFfZmluaXNoKFdFQktJVF9XRUJfUkVT
T1VSQ0Uob2JqZWN0KSwgcmVzdWx0LCAmZGF0YVNpemUsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAg
ICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7Ci0gICAgICAgIGdfYXNzZXJ0KGRhdGEpOwotICAg
ICAgICBnX2Fzc2VydF9jbXBpbnQoZGF0YVNpemUsID4sIDApOwotCi0gICAgICAgIFJlc291cmNl
c1Rlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZXNUZXN0Kj4odXNlckRhdGEpOwotICAg
ICAgICB0ZXN0LT5tX3Jlc291cmNlRGF0YS5zZXQocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZGF0
YSkpOwotICAgICAgICB0ZXN0LT5tX3Jlc291cmNlRGF0YVNpemUgPSBkYXRhU2l6ZTsKLSAgICAg
ICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKLSAgICB9Ci0KLSAgICB2b2lk
IGNoZWNrUmVzb3VyY2VEYXRhKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSkKLSAgICB7Ci0g
ICAgICAgIG1fcmVzb3VyY2VEYXRhU2l6ZSA9IDA7Ci0gICAgICAgIHdlYmtpdF93ZWJfcmVzb3Vy
Y2VfZ2V0X2RhdGEocmVzb3VyY2UsIDAsIHJlc291cmNlR2V0RGF0YUNhbGxiYWNrLCB0aGlzKTsK
LSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotCi0gICAgICAgIGNvbnN0IGNo
YXIqIHVyaSA9IHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaShyZXNvdXJjZSk7Ci0gICAgICAg
IGlmICh1cmkgPT0ga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpKSB7Ci0gICAgICAgICAgICBn
X2Fzc2VydF9jbXBpbnQobV9yZXNvdXJjZURhdGFTaXplLCA9PSwgc3RybGVuKGtJbmRleEh0bWwp
KTsKLSAgICAgICAgICAgIGdfYXNzZXJ0KCFzdHJuY21wKG1fcmVzb3VyY2VEYXRhLmdldCgpLCBr
SW5kZXhIdG1sLCBtX3Jlc291cmNlRGF0YVNpemUpKTsKLSAgICAgICAgfSBlbHNlIGlmICh1cmkg
PT0ga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3N0eWxlLmNzcyIpKSB7Ci0gICAgICAgICAgICBn
X2Fzc2VydF9jbXBpbnQobV9yZXNvdXJjZURhdGFTaXplLCA9PSwgc3RybGVuKGtTdHlsZUNTUykp
OwotICAgICAgICAgICAgZ19hc3NlcnQoIXN0cm5jbXAobV9yZXNvdXJjZURhdGEuZ2V0KCksIGtT
dHlsZUNTUywgbV9yZXNvdXJjZURhdGFTaXplKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAodXJpID09
IGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9qYXZhc2NyaXB0LmpzIikpIHsKLSAgICAgICAgICAg
IGdfYXNzZXJ0X2NtcGludChtX3Jlc291cmNlRGF0YVNpemUsID09LCBzdHJsZW4oa0phdmFzY3Jp
cHQpKTsKLSAgICAgICAgICAgIGdfYXNzZXJ0KCFzdHJuY21wKG1fcmVzb3VyY2VEYXRhLmdldCgp
LCBrSmF2YXNjcmlwdCwgbV9yZXNvdXJjZURhdGFTaXplKSk7Ci0gICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICAgICAgbV9yZXNvdXJjZURhdGEu
Y2xlYXIoKTsKLSAgICB9Ci0KLSAgICBzaXplX3QgbV9yZXNvdXJjZXNMb2FkZWQ7Ci0gICAgc2l6
ZV90IG1fcmVzb3VyY2VzVG9Mb2FkOwotICAgIEdPd25QdHI8Y2hhcj4gbV9yZXNvdXJjZURhdGE7
Ci0gICAgc2l6ZV90IG1fcmVzb3VyY2VEYXRhU2l6ZTsKLSAgICBHTGlzdCogbV9zdWJyZXNvdXJj
ZXM7Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1Jlc291cmNlcyhSZXNvdXJjZXNUZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIC8vIE5vdGhpbmcgbG9hZGVkIHlldCwgdGhl
cmUgc2hvdWxuZCd0IGJlIHJlc291cmNlcy4KLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3
X2dldF9tYWluX3Jlc291cmNlKHRlc3QtPm1fd2ViVmlldykpOwotICAgIGdfYXNzZXJ0KCF0ZXN0
LT5zdWJyZXNvdXJjZXMoKSk7Ci0KLSAgICAvLyBMb2FkIHNpbXBsZSBwYWdlIHdpdGhvdXQgc3Vi
cmVzb3VyY2VzLgotICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keT5UZXN0aW5nIFdlYktp
dEdUSys8L2JvZHk+PC9odG1sPiIsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hl
ZCgpOwotICAgIFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSA9IHdlYmtpdF93ZWJfdmlld19n
ZXRfbWFpbl9yZXNvdXJjZSh0ZXN0LT5tX3dlYlZpZXcpOwotICAgIGdfYXNzZXJ0KHJlc291cmNl
KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dldF91cmkodGVzdC0+bV93
ZWJWaWV3KSwgPT0sIHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaShyZXNvdXJjZSkpOwotICAg
IGdfYXNzZXJ0KCF0ZXN0LT5zdWJyZXNvdXJjZXMoKSk7Ci0KLSAgICAvLyBMb2FkIHNpbXBsZSBw
YWdlIHdpdGggc3VicmVzb3VyY2VzLgotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJ
Rm9yUGF0aCgiLyIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VzTG9hZGVk
KDQpOwotCi0gICAgcmVzb3VyY2UgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2Uo
dGVzdC0+bV93ZWJWaWV3KTsKLSAgICBnX2Fzc2VydChyZXNvdXJjZSk7Ci0gICAgZ19hc3NlcnRf
Y21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKHRlc3QtPm1fd2ViVmlldyksID09LCB3ZWJr
aXRfd2ViX3Jlc291cmNlX2dldF91cmkocmVzb3VyY2UpKTsKLSAgICBHTGlzdCogc3VicmVzb3Vy
Y2VzID0gdGVzdC0+c3VicmVzb3VyY2VzKCk7Ci0gICAgZ19hc3NlcnQoc3VicmVzb3VyY2VzKTsK
LSAgICBnX2Fzc2VydF9jbXBpbnQoZ19saXN0X2xlbmd0aChzdWJyZXNvdXJjZXMpLCA9PSwgMyk7
Ci0KLSNpZiAwCi0gICAgLy8gTG9hZCB0aGUgc2FtZSBVUkkgYWdhaW4uCi0gICAgLy8gRklYTUU6
IHdlIG5lZWQgYSB3b3JrYXJvdW5kIGZvciBidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTc4NTEwLgotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9y
UGF0aCgiLyIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VzTG9hZGVkKDQp
OwotI2VuZGlmCi0KLSAgICAvLyBSZWxvYWQuCi0gICAgd2Via2l0X3dlYl92aWV3X3JlbG9hZF9i
eXBhc3NfY2FjaGUodGVzdC0+bV93ZWJWaWV3KTsKLSAgICB0ZXN0LT53YWl0VW50aWxSZXNvdXJj
ZXNMb2FkZWQoNCk7Ci19Ci0KLWNsYXNzIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6IHB1YmxpYyBS
ZXNvdXJjZXNUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFNpbmds
ZVJlc291cmNlTG9hZFRlc3QpOwotCi0gICAgZW51bSBMb2FkRXZlbnRzIHsKLSAgICAgICAgU3Rh
cnRlZCwKLSAgICAgICAgU2VudFJlcXVlc3QsCi0gICAgICAgIFJlZGlyZWN0ZWQsCi0gICAgICAg
IFJlY2VpdmVkUmVzcG9uc2UsCi0gICAgICAgIFJlY2VpdmVkRGF0YSwKLSAgICAgICAgRmluaXNo
ZWQsCi0gICAgICAgIEZhaWxlZAotICAgIH07Ci0KLSAgICBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0
KCkKLSAgICAgICAgOiBSZXNvdXJjZXNUZXN0KCkKLSAgICAgICAgLCBtX3Jlc291cmNlRGF0YVJl
Y2VpdmVkKDApCi0gICAgewotICAgICAgICAgbV9yZXNvdXJjZXNUb0xvYWQgPSAyOwotICAgIH0K
LQotICAgIHZvaWQgcmVzb3VyY2VMb2FkU3RhcnRlZChXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3Vy
Y2UsIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QpCi0gICAgewotICAgICAgICBpZiAocmVzb3Vy
Y2UgPT0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX3Jlc291cmNlKG1fd2ViVmlldykpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9yZXNvdXJjZURhdGFSZWNlaXZlZCA9IDA7Ci0g
ICAgICAgIG1fcmVzb3VyY2UgPSByZXNvdXJjZTsKLSAgICAgICAgbV9sb2FkRXZlbnRzLmFwcGVu
ZChTdGFydGVkKTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlc291cmNlU2VudFJlcXVlc3QoV2ViS2l0
V2ViUmVzb3VyY2UqIHJlc291cmNlLCBXZWJLaXRVUklSZXF1ZXN0KiByZXF1ZXN0LCBXZWJLaXRV
UklSZXNwb25zZSogcmVkaXJlY3RSZXNwb25zZSkKLSAgICB7Ci0gICAgICAgIGlmIChyZXNvdXJj
ZSAhPSBtX3Jlc291cmNlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChyZWRp
cmVjdFJlc3BvbnNlKQotICAgICAgICAgICAgbV9sb2FkRXZlbnRzLmFwcGVuZChSZWRpcmVjdGVk
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9sb2FkRXZlbnRzLmFwcGVuZChTZW50UmVx
dWVzdCk7Ci0gICAgfQotCi0gICAgdm9pZCByZXNvdXJjZVJlY2VpdmVkUmVzcG9uc2UoV2ViS2l0
V2ViUmVzb3VyY2UqIHJlc291cmNlKQotICAgIHsKLSAgICAgICAgaWYgKHJlc291cmNlICE9IG1f
cmVzb3VyY2UpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9sb2FkRXZlbnRzLmFw
cGVuZChSZWNlaXZlZFJlc3BvbnNlKTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlc291cmNlUmVjZWl2
ZWREYXRhKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgZ3VpbnQ2NCBieXRlc1JlY2VpdmVk
KQotICAgIHsKLSAgICAgICAgaWYgKHJlc291cmNlICE9IG1fcmVzb3VyY2UpCi0gICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgbV9yZXNvdXJjZURhdGFSZWNlaXZlZCArPSBieXRlc1JlY2Vp
dmVkOwotICAgICAgICBpZiAoIW1fbG9hZEV2ZW50cy5jb250YWlucyhSZWNlaXZlZERhdGEpKQot
ICAgICAgICAgICAgbV9sb2FkRXZlbnRzLmFwcGVuZChSZWNlaXZlZERhdGEpOwotICAgIH0KLQot
ICAgIHZvaWQgcmVzb3VyY2VGaW5pc2hlZChXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UpCi0g
ICAgewotICAgICAgICBpZiAocmVzb3VyY2UgIT0gbV9yZXNvdXJjZSkgewotICAgICAgICAgICAg
UmVzb3VyY2VzVGVzdDo6cmVzb3VyY2VGaW5pc2hlZChyZXNvdXJjZSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIW1fbG9hZEV2ZW50cy5jb250YWlucyhG
YWlsZWQpKSB7Ci0gICAgICAgICAgICBXZWJLaXRVUklSZXNwb25zZSogcmVzcG9uc2UgPSB3ZWJr
aXRfd2ViX3Jlc291cmNlX2dldF9yZXNwb25zZShtX3Jlc291cmNlLmdldCgpKTsKLSAgICAgICAg
ICAgIGdfYXNzZXJ0KHJlc3BvbnNlKTsKLSAgICAgICAgICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJr
aXRfdXJpX3Jlc3BvbnNlX2dldF9jb250ZW50X2xlbmd0aChyZXNwb25zZSksID09LCBtX3Jlc291
cmNlRGF0YVJlY2VpdmVkKTsKLSAgICAgICAgfQotICAgICAgICBtX2xvYWRFdmVudHMuYXBwZW5k
KEZpbmlzaGVkKTsKLSAgICAgICAgUmVzb3VyY2VzVGVzdDo6cmVzb3VyY2VGaW5pc2hlZChyZXNv
dXJjZSk7Ci0gICAgfQotCi0gICAgdm9pZCByZXNvdXJjZUZhaWxlZChXZWJLaXRXZWJSZXNvdXJj
ZSogcmVzb3VyY2UsIEdFcnJvciogZXJyb3IpCi0gICAgewotICAgICAgICBpZiAocmVzb3VyY2Ug
PT0gbV9yZXNvdXJjZSkKLSAgICAgICAgICAgIG1fbG9hZEV2ZW50cy5hcHBlbmQoRmFpbGVkKTsK
LSAgICB9Ci0KLSAgICB2b2lkIHdhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlzaGVkKCkKLSAgICB7
Ci0gICAgICAgIG1fcmVzb3VyY2UgPSAwOwotICAgICAgICBtX3Jlc291cmNlc0xvYWRlZCA9IDA7
Ci0gICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAgICB9Ci0KLSAgICBXZWJL
aXRVUklSZXNwb25zZSogd2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWRBbmRSZXR1cm5VUklS
ZXNwb25zZSgpCi0gICAgewotICAgICAgICB3YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZCgp
OwotICAgICAgICBnX2Fzc2VydChtX3Jlc291cmNlKTsKLSAgICAgICAgcmV0dXJuIHdlYmtpdF93
ZWJfcmVzb3VyY2VfZ2V0X3Jlc3BvbnNlKG1fcmVzb3VyY2UuZ2V0KCkpOwotICAgIH0KLQotICAg
IEdSZWZQdHI8V2ViS2l0V2ViUmVzb3VyY2U+IG1fcmVzb3VyY2U7Ci0gICAgVmVjdG9yPExvYWRF
dmVudHM+IG1fbG9hZEV2ZW50czsKLSAgICBndWludDY0IG1fcmVzb3VyY2VEYXRhUmVjZWl2ZWQ7
Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViUmVzb3VyY2VMb2FkaW5nKFNpbmdsZVJlc291cmNl
TG9hZFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+bG9hZFVSSShrU2Vy
dmVyLT5nZXRVUklGb3JQYXRoKCIvamF2YXNjcmlwdC5odG1sIikuZGF0YSgpKTsKLSAgICB0ZXN0
LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZCgpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1f
cmVzb3VyY2UpOwotICAgIFZlY3RvcjxTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpMb2FkRXZlbnRz
PiYgZXZlbnRzID0gdGVzdC0+bV9sb2FkRXZlbnRzOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVu
dHMuc2l6ZSgpLCA9PSwgNSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIFNp
bmdsZVJlc291cmNlTG9hZFRlc3Q6OlN0YXJ0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVu
dHNbMV0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpTZW50UmVxdWVzdCk7Ci0gICAgZ19h
c3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlJlY2Vp
dmVkUmVzcG9uc2UpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbM10sID09LCBTaW5nbGVS
ZXNvdXJjZUxvYWRUZXN0OjpSZWNlaXZlZERhdGEpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVu
dHNbNF0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpGaW5pc2hlZCk7Ci0gICAgZXZlbnRz
LmNsZWFyKCk7Ci0KLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9y
ZWRpcmVjdGVkLWNzcy5odG1sIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxSZXNvdXJj
ZUxvYWRGaW5pc2hlZCgpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fcmVzb3VyY2UpOwotICAgIGdf
YXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgNik7Ci0gICAgZ19hc3NlcnRfY21waW50
KGV2ZW50c1swXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlN0YXJ0ZWQpOwotICAgIGdf
YXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpTZW50
UmVxdWVzdCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIFNpbmdsZVJlc291
cmNlTG9hZFRlc3Q6OlJlZGlyZWN0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbM10s
ID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpSZWNlaXZlZFJlc3BvbnNlKTsKLSAgICBnX2Fz
c2VydF9jbXBpbnQoZXZlbnRzWzRdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6UmVjZWl2
ZWREYXRhKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzVdLCA9PSwgU2luZ2xlUmVzb3Vy
Y2VMb2FkVGVzdDo6RmluaXNoZWQpOwotICAgIGV2ZW50cy5jbGVhcigpOwotCi0gICAgdGVzdC0+
bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvaW52YWxpZC1jc3MuaHRtbCIpLmRhdGEo
KSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWQoKTsKLSAgICBnX2Fz
c2VydCh0ZXN0LT5tX3Jlc291cmNlKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUo
KSwgPT0sIDQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBTaW5nbGVSZXNv
dXJjZUxvYWRUZXN0OjpTdGFydGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9
PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6U2VudFJlcXVlc3QpOwotICAgIGdfYXNzZXJ0X2Nt
cGludChldmVudHNbMl0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpGYWlsZWQpOwotICAg
IGdfYXNzZXJ0X2NtcGludChldmVudHNbM10sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpG
aW5pc2hlZCk7Ci0gICAgZXZlbnRzLmNsZWFyKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJS
ZXNvdXJjZVJlc3BvbnNlKFNpbmdsZVJlc291cmNlTG9hZFRlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCi17Ci0gICAgLy8gTm8gY2FjaGVkIHJlc291cmNlOiBGaXJzdCBsb2FkLgotICAgIHRlc3Qt
PmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2phdmFzY3JpcHQuaHRtbCIpLmRhdGEo
KSk7Ci0gICAgV2ViS2l0VVJJUmVzcG9uc2UqIHJlc3BvbnNlID0gdGVzdC0+d2FpdFVudGlsUmVz
b3VyY2VMb2FkRmluaXNoZWRBbmRSZXR1cm5VUklSZXNwb25zZSgpOwotICAgIGdfYXNzZXJ0X2Nt
cGludCh3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF9zdGF0dXNfY29kZShyZXNwb25zZSksID09LCBT
T1VQX1NUQVRVU19PSyk7Ci0KLSAgICAvLyBObyBjYWNoZWQgcmVzb3VyY2U6IFNlY29uZCBsb2Fk
LgotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2phdmFzY3JpcHQu
aHRtbCIpLmRhdGEoKSk7Ci0gICAgcmVzcG9uc2UgPSB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxv
YWRGaW5pc2hlZEFuZFJldHVyblVSSVJlc3BvbnNlKCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHdl
YmtpdF91cmlfcmVzcG9uc2VfZ2V0X3N0YXR1c19jb2RlKHJlc3BvbnNlKSwgPT0sIFNPVVBfU1RB
VFVTX09LKTsKLQotICAgIC8vIE5vIGNhY2hlZCByZXNvdXJjZTogUmVsb2FkLgotICAgIHdlYmtp
dF93ZWJfdmlld19yZWxvYWQodGVzdC0+bV93ZWJWaWV3KTsKLSAgICByZXNwb25zZSA9IHRlc3Qt
PndhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlzaGVkQW5kUmV0dXJuVVJJUmVzcG9uc2UoKTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3VyaV9yZXNwb25zZV9nZXRfc3RhdHVzX2NvZGUocmVz
cG9uc2UpLCA9PSwgU09VUF9TVEFUVVNfT0spOwotCi0gICAgLy8gQ2FjaGVkIHJlc291cmNlOiBG
aXJzdCBsb2FkLgotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2lt
YWdlLmh0bWwiKS5kYXRhKCkpOwotICAgIHJlc3BvbnNlID0gdGVzdC0+d2FpdFVudGlsUmVzb3Vy
Y2VMb2FkRmluaXNoZWRBbmRSZXR1cm5VUklSZXNwb25zZSgpOwotICAgIGdfYXNzZXJ0X2NtcGlu
dCh3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF9zdGF0dXNfY29kZShyZXNwb25zZSksID09LCBTT1VQ
X1NUQVRVU19PSyk7Ci0KLSAgICAvLyBDYWNoZWQgcmVzb3VyY2U6IFNlY29uZCBsb2FkLgotICAg
IHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2ltYWdlLmh0bWwiKS5kYXRh
KCkpOwotICAgIHJlc3BvbnNlID0gdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWRB
bmRSZXR1cm5VUklSZXNwb25zZSgpOwotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfdXJpX3Jl
c3BvbnNlX2dldF9zdGF0dXNfY29kZShyZXNwb25zZSksID09LCBTT1VQX1NUQVRVU19PSyk7Ci0K
LSAgICAvLyBDYWNoZWQgcmVzb3VyY2U6IFJlbG9hZC4KLSAgICB3ZWJraXRfd2ViX3ZpZXdfcmVs
b2FkKHRlc3QtPm1fd2ViVmlldyk7Ci0gICAgcmVzcG9uc2UgPSB0ZXN0LT53YWl0VW50aWxSZXNv
dXJjZUxvYWRGaW5pc2hlZEFuZFJldHVyblVSSVJlc3BvbnNlKCk7Ci0gICAgZ19hc3NlcnRfY21w
aW50KHdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0X3N0YXR1c19jb2RlKHJlc3BvbnNlKSwgPT0sIFNP
VVBfU1RBVFVTX05PVF9NT0RJRklFRCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJSZXNvdXJj
ZU1pbWVUeXBlKFNpbmdsZVJlc291cmNlTG9hZFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17
Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvamF2YXNjcmlwdC5o
dG1sIikuZGF0YSgpKTsKLSAgICBXZWJLaXRVUklSZXNwb25zZSogcmVzcG9uc2UgPSB0ZXN0LT53
YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZEFuZFJldHVyblVSSVJlc3BvbnNlKCk7Ci0gICAg
Z19hc3NlcnRfY21wc3RyKHdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0X21pbWVfdHlwZShyZXNwb25z
ZSksID09LCAidGV4dC9qYXZhc2NyaXB0Iik7Ci0KLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXIt
PmdldFVSSUZvclBhdGgoIi9pbWFnZS5odG1sIikuZGF0YSgpKTsKLSAgICByZXNwb25zZSA9IHRl
c3QtPndhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlzaGVkQW5kUmV0dXJuVVJJUmVzcG9uc2UoKTsK
LSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3VyaV9yZXNwb25zZV9nZXRfbWltZV90eXBlKHJl
c3BvbnNlKSwgPT0sICJpbWFnZS92bmQubWljcm9zb2Z0Lmljb24iKTsKLQotICAgIHRlc3QtPmxv
YWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3JlZGlyZWN0ZWQtY3NzLmh0bWwiKS5kYXRh
KCkpOwotICAgIHJlc3BvbnNlID0gdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWRB
bmRSZXR1cm5VUklSZXNwb25zZSgpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfdXJpX3Jl
c3BvbnNlX2dldF9taW1lX3R5cGUocmVzcG9uc2UpLCA9PSwgInRleHQvY3NzIik7Ci19Ci0KLXN0
YXRpYyB2b2lkIHRlc3RXZWJSZXNvdXJjZVN1Z2dlc3RlZEZpbGVuYW1lKFNpbmdsZVJlc291cmNl
TG9hZFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+bG9hZFVSSShrU2Vy
dmVyLT5nZXRVUklGb3JQYXRoKCIvamF2YXNjcmlwdC5odG1sIikuZGF0YSgpKTsKLSAgICBXZWJL
aXRVUklSZXNwb25zZSogcmVzcG9uc2UgPSB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5p
c2hlZEFuZFJldHVyblVSSVJlc3BvbnNlKCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF91
cmlfcmVzcG9uc2VfZ2V0X3N1Z2dlc3RlZF9maWxlbmFtZShyZXNwb25zZSksID09LCAiSmF2YVNj
cmlwdC5qcyIpOwotCi0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIv
aW1hZ2UuaHRtbCIpLmRhdGEoKSk7Ci0gICAgcmVzcG9uc2UgPSB0ZXN0LT53YWl0VW50aWxSZXNv
dXJjZUxvYWRGaW5pc2hlZEFuZFJldHVyblVSSVJlc3BvbnNlKCk7Ci0gICAgZ19hc3NlcnQoIXdl
YmtpdF91cmlfcmVzcG9uc2VfZ2V0X3N1Z2dlc3RlZF9maWxlbmFtZShyZXNwb25zZSkpOwotfQot
Ci1jbGFzcyBSZXNvdXJjZVVSSVRyYWNraW5nVGVzdDogcHVibGljIFNpbmdsZVJlc291cmNlTG9h
ZFRlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoUmVzb3VyY2VVUklU
cmFja2luZ1Rlc3QpOwotCi0gICAgUmVzb3VyY2VVUklUcmFja2luZ1Rlc3QoKQotICAgICAgICA6
IFNpbmdsZVJlc291cmNlTG9hZFRlc3QoKQotICAgIHsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9p
ZCB1cmlDaGFuZ2VkKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgR1BhcmFtU3BlYyosIFJl
c291cmNlVVJJVHJhY2tpbmdUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgZ19hc3NlcnQocmVz
b3VyY2UgPT0gdGVzdC0+bV9yZXNvdXJjZS5nZXQoKSk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0
cih0ZXN0LT5tX2FjdGl2ZVVSSS5kYXRhKCksICE9LCB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF91
cmkodGVzdC0+bV9yZXNvdXJjZS5nZXQoKSkpOwotICAgICAgICB0ZXN0LT5tX2FjdGl2ZVVSSSA9
IHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaSh0ZXN0LT5tX3Jlc291cmNlLmdldCgpKTsKLSAg
ICB9Ci0KLSAgICB2b2lkIHJlc291cmNlTG9hZFN0YXJ0ZWQoV2ViS2l0V2ViUmVzb3VyY2UqIHJl
c291cmNlLCBXZWJLaXRVUklSZXF1ZXN0KiByZXF1ZXN0KQotICAgIHsKLSAgICAgICAgaWYgKHJl
c291cmNlID09IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9yZXNvdXJjZShtX3dlYlZpZXcpKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG1fcmVzb3VyY2UgPSByZXNvdXJjZTsKLSAg
ICAgICAgbV9hY3RpdmVVUkkgPSB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF91cmkocmVzb3VyY2Up
OwotICAgICAgICBjaGVja0FjdGl2ZVVSSSgiL3JlZGlyZWN0ZWQuY3NzIik7Ci0gICAgICAgIGdf
YXNzZXJ0X2NtcHN0cihtX2FjdGl2ZVVSSS5kYXRhKCksID09LCB3ZWJraXRfdXJpX3JlcXVlc3Rf
Z2V0X3VyaShyZXF1ZXN0KSk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QocmVzb3VyY2UsICJu
b3RpZnk6OnVyaSIsIEdfQ0FMTEJBQ0sodXJpQ2hhbmdlZCksIHRoaXMpOwotICAgIH0KLQotICAg
IHZvaWQgcmVzb3VyY2VTZW50UmVxdWVzdChXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIFdl
YktpdFVSSVJlcXVlc3QqIHJlcXVlc3QsIFdlYktpdFVSSVJlc3BvbnNlKiByZWRpcmVjdFJlc3Bv
bnNlKQotICAgIHsKLSAgICAgICAgaWYgKHJlc291cmNlICE9IG1fcmVzb3VyY2UpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKHJlZGlyZWN0UmVzcG9uc2UpCi0gICAgICAgICAg
ICBjaGVja0FjdGl2ZVVSSSgiL3NpbXBsZS1zdHlsZS5jc3MiKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgY2hlY2tBY3RpdmVVUkkoIi9yZWRpcmVjdGVkLmNzcyIpOwotICAgICAgICBnX2Fz
c2VydF9jbXBzdHIobV9hY3RpdmVVUkkuZGF0YSgpLCA9PSwgd2Via2l0X3VyaV9yZXF1ZXN0X2dl
dF91cmkocmVxdWVzdCkpOwotICAgIH0KLQotICAgIHZvaWQgcmVzb3VyY2VSZWNlaXZlZFJlc3Bv
bnNlKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSkKLSAgICB7Ci0gICAgICAgIGlmIChyZXNv
dXJjZSAhPSBtX3Jlc291cmNlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGNoZWNr
QWN0aXZlVVJJKCIvc2ltcGxlLXN0eWxlLmNzcyIpOwotICAgIH0KLQotICAgIHZvaWQgcmVzb3Vy
Y2VSZWNlaXZlZERhdGEoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBndWludDY0IGJ5dGVz
UmVjZWl2ZWQpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgcmVzb3VyY2VGaW5pc2hlZChXZWJL
aXRXZWJSZXNvdXJjZSogcmVzb3VyY2UpCi0gICAgewotICAgICAgICBpZiAocmVzb3VyY2UgPT0g
bV9yZXNvdXJjZSkKLSAgICAgICAgICAgIGNoZWNrQWN0aXZlVVJJKCIvc2ltcGxlLXN0eWxlLmNz
cyIpOwotICAgICAgICBSZXNvdXJjZXNUZXN0OjpyZXNvdXJjZUZpbmlzaGVkKHJlc291cmNlKTsK
LSAgICB9Ci0KLSAgICB2b2lkIHJlc291cmNlRmFpbGVkKFdlYktpdFdlYlJlc291cmNlKiwgR0Vy
cm9yKikKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0gICAgfQotCi0g
ICAgQ1N0cmluZyBtX2FjdGl2ZVVSSTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGNoZWNrQWN0aXZl
VVJJKGNvbnN0IGNoYXIqIHVyaSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVF9DTVBfQ1NUUklORyht
X2FjdGl2ZVVSSSwgPT0sIGtTZXJ2ZXItPmdldFVSSUZvclBhdGgodXJpKSk7Ci0gICAgfQotfTsK
LQotc3RhdGljIHZvaWQgdGVzdFdlYlJlc291cmNlQWN0aXZlVVJJKFJlc291cmNlVVJJVHJhY2tp
bmdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZl
ci0+Z2V0VVJJRm9yUGF0aCgiL3JlZGlyZWN0ZWQtY3NzLmh0bWwiKS5kYXRhKCkpOwotICAgIHRl
c3QtPndhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlzaGVkKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRl
c3RXZWJSZXNvdXJjZUdldERhdGEoUmVzb3VyY2VzVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikK
LXsKLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi8iKS5kYXRhKCkp
OwotICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSA0IGluc3RlYWQgb2YgMywgYnV0IHdlIGRv
bid0IGdldCB0aGUgY3NzIGltYWdlIHJlc291cmNlCi0gICAgLy8gZHVlIHRvIGJ1ZyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg1MTAuCi0gICAgdGVzdC0+d2FpdFVu
dGlsUmVzb3VyY2VzTG9hZGVkKDMpOwotCi0gICAgV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNl
ID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX3Jlc291cmNlKHRlc3QtPm1fd2ViVmlldyk7Ci0g
ICAgZ19hc3NlcnQocmVzb3VyY2UpOwotICAgIHRlc3QtPmNoZWNrUmVzb3VyY2VEYXRhKHJlc291
cmNlKTsKLQotICAgIEdMaXN0KiBzdWJyZXNvdXJjZXMgPSB0ZXN0LT5zdWJyZXNvdXJjZXMoKTsK
LSAgICBmb3IgKEdMaXN0KiBpdGVtID0gc3VicmVzb3VyY2VzOyBpdGVtOyBpdGVtID0gZ19saXN0
X25leHQoaXRlbSkpCi0gICAgICAgIHRlc3QtPmNoZWNrUmVzb3VyY2VEYXRhKFdFQktJVF9XRUJf
UkVTT1VSQ0UoaXRlbS0+ZGF0YSkpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1Jlc291
cmNlc0hpc3RvcnlDYWNoZShTaW5nbGVSZXNvdXJjZUxvYWRUZXN0KiB0ZXN0LCBnY29uc3Rwb2lu
dGVyKQotewotICAgIENTdHJpbmcgamF2YXNjcmlwdFVSSSA9IGtTZXJ2ZXItPmdldFVSSUZvclBh
dGgoIi9qYXZhc2NyaXB0Lmh0bWwiKTsKLSAgICB0ZXN0LT5sb2FkVVJJKGphdmFzY3JpcHRVUkku
ZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZCgpOwotICAg
IFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSA9IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9y
ZXNvdXJjZSh0ZXN0LT5tX3dlYlZpZXcpOwotICAgIGdfYXNzZXJ0KHJlc291cmNlKTsKLSAgICBn
X2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJpKHJlc291cmNlKSwgPT0s
IGphdmFzY3JpcHRVUkkuZGF0YSgpKTsKLQotICAgIENTdHJpbmcgc2ltcGxlU3R5bGVDU1NVUkkg
PSBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvc2ltcGxlLXN0eWxlLWNzcy5odG1sIik7Ci0gICAg
dGVzdC0+bG9hZFVSSShzaW1wbGVTdHlsZUNTU1VSSS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRV
bnRpbFJlc291cmNlTG9hZEZpbmlzaGVkKCk7Ci0gICAgcmVzb3VyY2UgPSB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X21haW5fcmVzb3VyY2UodGVzdC0+bV93ZWJWaWV3KTsKLSAgICBnX2Fzc2VydChyZXNv
dXJjZSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaShy
ZXNvdXJjZSksID09LCBzaW1wbGVTdHlsZUNTU1VSSS5kYXRhKCkpOwotCi0gICAgdGVzdC0+Z29C
YWNrKCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWQoKTsKLSAgICBy
ZXNvdXJjZSA9IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9yZXNvdXJjZSh0ZXN0LT5tX3dlYlZp
ZXcpOwotICAgIGdfYXNzZXJ0KHJlc291cmNlKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0
X3dlYl9yZXNvdXJjZV9nZXRfdXJpKHJlc291cmNlKSwgPT0sIGphdmFzY3JpcHRVUkkuZGF0YSgp
KTsKLQotICAgIHRlc3QtPmdvRm9yd2FyZCgpOwotICAgIHRlc3QtPndhaXRVbnRpbFJlc291cmNl
TG9hZEZpbmlzaGVkKCk7Ci0gICAgcmVzb3VyY2UgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5f
cmVzb3VyY2UodGVzdC0+bV93ZWJWaWV3KTsKLSAgICBnX2Fzc2VydChyZXNvdXJjZSk7Ci0gICAg
Z19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaShyZXNvdXJjZSksID09
LCBzaW1wbGVTdHlsZUNTU1VSSS5kYXRhKCkpOwotfQotCi1jbGFzcyBTZW5kUmVxdWVzdFRlc3Q6
IHB1YmxpYyBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJf
VEVTVF9GSVhUVVJFKFNlbmRSZXF1ZXN0VGVzdCk7Ci0KLSAgICB2b2lkIHJlc291cmNlU2VudFJl
cXVlc3QoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBXZWJLaXRVUklSZXF1ZXN0KiByZXF1
ZXN0LCBXZWJLaXRVUklSZXNwb25zZSogcmVkaXJlY3RSZXNwb25zZSkKLSAgICB7Ci0gICAgICAg
IGlmIChyZXNvdXJjZSAhPSBtX3Jlc291cmNlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIGlmIChyZWRpcmVjdFJlc3BvbnNlKQotICAgICAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdl
YmtpdF91cmlfcmVxdWVzdF9nZXRfdXJpKHJlcXVlc3QpLCA9PSwgbV9leHBlY3RlZE5ld1Jlc291
cmNlVVJJQWZ0ZXJSZWRpcmVjdGlvbi5kYXRhKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3VyaV9yZXF1ZXN0X2dldF91cmkocmVxdWVzdCksID09
LCBtX2V4cGVjdGVkTmV3UmVzb3VyY2VVUkkuZGF0YSgpKTsKLSAgICAgICAgZ19hc3NlcnRfY21w
c3RyKHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfdXJpKHJlcXVlc3QpLCA9PSwgd2Via2l0X3dlYl9y
ZXNvdXJjZV9nZXRfdXJpKHJlc291cmNlKSk7Ci0KLSAgICAgICAgU2luZ2xlUmVzb3VyY2VMb2Fk
VGVzdDo6cmVzb3VyY2VTZW50UmVxdWVzdChyZXNvdXJjZSwgcmVxdWVzdCwgcmVkaXJlY3RSZXNw
b25zZSk7Ci0gICAgfQotCi0gICAgdm9pZCByZXNvdXJjZUZhaWxlZChXZWJLaXRXZWJSZXNvdXJj
ZSogcmVzb3VyY2UsIEdFcnJvciogZXJyb3IpCi0gICAgewotICAgICAgICBpZiAocmVzb3VyY2Ug
IT0gbV9yZXNvdXJjZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBnX2Fzc2VydF9j
bXBzdHIod2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJpKHJlc291cmNlKSwgPT0sIG1fZXhwZWN0
ZWRDYW5jZWxsZWRSZXNvdXJjZVVSSS5kYXRhKCkpOwotICAgICAgICBnX2Fzc2VydF9lcnJvcihl
cnJvciwgV0VCS0lUX05FVFdPUktfRVJST1IsIFdFQktJVF9ORVRXT1JLX0VSUk9SX0NBTkNFTExF
RCk7Ci0KLSAgICAgICAgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6cmVzb3VyY2VGYWlsZWQocmVz
b3VyY2UsIGVycm9yKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldEV4cGVjdGVkTmV3UmVzb3VyY2VV
UkkoY29uc3QgQ1N0cmluZyYgdXJpKQotICAgIHsKLSAgICAgICAgbV9leHBlY3RlZE5ld1Jlc291
cmNlVVJJID0gdXJpOwotICAgIH0KLQotICAgIHZvaWQgc2V0RXhwZWN0ZWRDYW5jZWxsZWRSZXNv
dXJjZVVSSShjb25zdCBDU3RyaW5nJiB1cmkpCi0gICAgewotICAgICAgICBtX2V4cGVjdGVkQ2Fu
Y2VsbGVkUmVzb3VyY2VVUkkgPSB1cmk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRFeHBlY3RlZE5l
d1Jlc291cmNlVVJJQWZ0ZXJSZWRpcmVjdGlvbihjb25zdCBDU3RyaW5nJiB1cmkpCi0gICAgewot
ICAgICAgICBtX2V4cGVjdGVkTmV3UmVzb3VyY2VVUklBZnRlclJlZGlyZWN0aW9uID0gdXJpOwot
ICAgIH0KLQotICAgIENTdHJpbmcgbV9leHBlY3RlZE5ld1Jlc291cmNlVVJJOwotICAgIENTdHJp
bmcgbV9leHBlY3RlZENhbmNlbGxlZFJlc291cmNlVVJJOwotICAgIENTdHJpbmcgbV9leHBlY3Rl
ZE5ld1Jlc291cmNlVVJJQWZ0ZXJSZWRpcmVjdGlvbjsKLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RX
ZWJSZXNvdXJjZVNlbmRSZXF1ZXN0KFNlbmRSZXF1ZXN0VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRl
cikKLXsKLSAgICB0ZXN0LT5zZXRFeHBlY3RlZE5ld1Jlc291cmNlVVJJKGtTZXJ2ZXItPmdldFVS
SUZvclBhdGgoIi9qYXZhc2NyaXB0LmpzIikpOwotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+
Z2V0VVJJRm9yUGF0aCgicmVsYXRpdmUtamF2YXNjcmlwdC5odG1sIikuZGF0YSgpKTsKLSAgICB0
ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZCgpOwotICAgIGdfYXNzZXJ0KHRlc3Qt
Pm1fcmVzb3VyY2UpOwotCi0gICAgVmVjdG9yPFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OkxvYWRF
dmVudHM+JiBldmVudHMgPSB0ZXN0LT5tX2xvYWRFdmVudHM7Ci0gICAgZ19hc3NlcnRfY21waW50
KGV2ZW50cy5zaXplKCksID09LCA1KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9
PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6U3RhcnRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50
KGV2ZW50c1sxXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlNlbnRSZXF1ZXN0KTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6
UmVjZWl2ZWRSZXNwb25zZSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1szXSwgPT0sIFNp
bmdsZVJlc291cmNlTG9hZFRlc3Q6OlJlY2VpdmVkRGF0YSk7Ci0gICAgZ19hc3NlcnRfY21waW50
KGV2ZW50c1s0XSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OkZpbmlzaGVkKTsKLSAgICBl
dmVudHMuY2xlYXIoKTsKLQotICAgIC8vIENhbmNlbCByZXF1ZXN0LgotICAgIHRlc3QtPnNldEV4
cGVjdGVkQ2FuY2VsbGVkUmVzb3VyY2VVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2NhbmNl
bC10aGlzLmpzIikpOwotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgi
L3Jlc291cmNlLXRvLWNhbmNlbC5odG1sIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxS
ZXNvdXJjZUxvYWRGaW5pc2hlZCgpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fcmVzb3VyY2UpOwot
Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAzKTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6U3RhcnRlZCk7
Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRl
c3Q6OkZhaWxlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIFNpbmdsZVJl
c291cmNlTG9hZFRlc3Q6OkZpbmlzaGVkKTsKLSAgICBldmVudHMuY2xlYXIoKTsKLQotICAgIC8v
IFVSSSBjaGFuZ2VkIGFmdGVyIGEgcmVkaXJlY3QuCi0gICAgdGVzdC0+c2V0RXhwZWN0ZWROZXdS
ZXNvdXJjZVVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvcmVkaXJlY3RlZC5qcyIpKTsKLSAg
ICB0ZXN0LT5zZXRFeHBlY3RlZE5ld1Jlc291cmNlVVJJQWZ0ZXJSZWRpcmVjdGlvbihrU2VydmVy
LT5nZXRVUklGb3JQYXRoKCIvamF2YXNjcmlwdC5qcyIpKTsKLSAgICB0ZXN0LT5sb2FkVVJJKGtT
ZXJ2ZXItPmdldFVSSUZvclBhdGgoInJlZGlyZWN0ZWQtamF2YXNjcmlwdC5odG1sIikuZGF0YSgp
KTsKLSAgICB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZCgpOwotICAgIGdfYXNz
ZXJ0KHRlc3QtPm1fcmVzb3VyY2UpOwotCi0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXpl
KCksID09LCA2KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgU2luZ2xlUmVz
b3VyY2VMb2FkVGVzdDo6U3RhcnRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwg
PT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlNlbnRSZXF1ZXN0KTsKLSAgICBnX2Fzc2VydF9j
bXBpbnQoZXZlbnRzWzJdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6UmVkaXJlY3RlZCk7
Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1szXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRl
c3Q6OlJlY2VpdmVkUmVzcG9uc2UpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbNF0sID09
LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpSZWNlaXZlZERhdGEpOwotICAgIGdfYXNzZXJ0X2Nt
cGludChldmVudHNbNV0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpGaW5pc2hlZCk7Ci0g
ICAgZXZlbnRzLmNsZWFyKCk7Ci0KLSAgICAvLyBDYW5jZWwgYWZ0ZXIgYSByZWRpcmVjdC4KLSAg
ICB0ZXN0LT5zZXRFeHBlY3RlZE5ld1Jlc291cmNlVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgo
Ii9yZWRpcmVjdGVkLXRvLWNhbmNlbC5qcyIpKTsKLSAgICB0ZXN0LT5zZXRFeHBlY3RlZENhbmNl
bGxlZFJlc291cmNlVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9yZWRpcmVjdGVkLXRvLWNh
bmNlbC5qcyIpKTsKLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9y
ZWRpcmVjdGVkLXRvLWNhbmNlbC5odG1sIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxS
ZXNvdXJjZUxvYWRGaW5pc2hlZCgpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fcmVzb3VyY2UpOwot
Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCA0KTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6U3RhcnRlZCk7
Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRl
c3Q6OlNlbnRSZXF1ZXN0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgU2lu
Z2xlUmVzb3VyY2VMb2FkVGVzdDo6RmFpbGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRz
WzNdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6RmluaXNoZWQpOwotICAgIGV2ZW50cy5j
bGVhcigpOwotfQotCi1zdGF0aWMgdm9pZCBhZGRDYWNoZUhUVFBIZWFkZXJzVG9SZXNwb25zZShT
b3VwTWVzc2FnZSogbWVzc2FnZSkKLXsKLSAgICAvLyBUaGUgYWN0dWFsIGRhdGUgZG9lc24ndCBy
ZWFsbHkgbWF0dGVyLgotICAgIFNvdXBEYXRlKiBzb3VwRGF0ZSA9IHNvdXBfZGF0ZV9uZXdfZnJv
bV9ub3coMCk7Ci0gICAgR093blB0cjxjaGFyPiBkYXRlKHNvdXBfZGF0ZV90b19zdHJpbmcoc291
cERhdGUsIFNPVVBfREFURV9IVFRQKSk7Ci0gICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5k
KG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJMYXN0LU1vZGlmaWVkIiwgZGF0ZS5nZXQoKSk7
Ci0gICAgc291cF9kYXRlX2ZyZWUoc291cERhdGUpOwotICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJz
X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiQ2FjaGUtY29udHJvbCIsICJwdWJs
aWMsIG1heC1hZ2U9MzE1MzYwMDAiKTsKLSAgICBzb3VwRGF0ZSA9IHNvdXBfZGF0ZV9uZXdfZnJv
bV9ub3coMzYwMCk7Ci0gICAgZGF0ZS5zZXQoc291cF9kYXRlX3RvX3N0cmluZyhzb3VwRGF0ZSwg
U09VUF9EQVRFX0hUVFApKTsKLSAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobWVzc2Fn
ZS0+cmVzcG9uc2VfaGVhZGVycywgIkV4cGlyZXMiLCBkYXRlLmdldCgpKTsKLSAgICBzb3VwX2Rh
dGVfZnJlZShzb3VwRGF0ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBT
ZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IGNoYXIqIHBhdGgsIEdI
YXNoVGFibGUqLCBTb3VwQ2xpZW50Q29udGV4dCosIGdwb2ludGVyKQotewotICAgIGlmIChtZXNz
YWdlLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9z
ZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBT
T1VQX1NUQVRVU19PSyk7Ci0KLSAgICBpZiAoc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X29uZSht
ZXNzYWdlLT5yZXF1ZXN0X2hlYWRlcnMsICJJZi1Nb2RpZmllZC1TaW5jZSIpKSB7Ci0gICAgICAg
IHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9NT0RJRklF
RCk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNl
X2JvZHkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGdfc3RyX2VxdWFsKHBh
dGgsICIvIikpIHsKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJl
c3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywga0luZGV4SHRtbCwgc3RybGVuKGtJbmRl
eEh0bWwpKTsKLSAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvamF2YXNjcmlwdC5o
dG1sIikpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGphdmFzY3JpcHRIdG1sID0gIjxo
dG1sPjxoZWFkPjxzY3JpcHQgbGFuZ3VhZ2U9J2phdmFzY3JpcHQnIHNyYz0nL2phdmFzY3JpcHQu
anMnPjwvc2NyaXB0PjwvaGVhZD48Ym9keT48L2JvZHk+PC9odG1sPiI7Ci0gICAgICAgIHNvdXBf
bWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9T
VEFUSUMsIGphdmFzY3JpcHRIdG1sLCBzdHJsZW4oamF2YXNjcmlwdEh0bWwpKTsKLSAgICB9IGVs
c2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvaW1hZ2UuaHRtbCIpKSB7Ci0gICAgICAgIHN0YXRp
YyBjb25zdCBjaGFyKiBpbWFnZUhUTUwgPSAiPGh0bWw+PGJvZHk+PGltZyBzcmM9Jy9ibGFuay5p
Y28nPjwvaW1nPjwvYm9keT48L2h0bWw+IjsKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBw
ZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgaW1hZ2VIVE1M
LCBzdHJsZW4oaW1hZ2VIVE1MKSk7Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAi
L3JlZGlyZWN0ZWQtY3NzLmh0bWwiKSkgewotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogcmVk
aXJlY3RlZENTU0h0bWwgPSAiPGh0bWw+PGhlYWQ+PGxpbmsgcmVsPSdzdHlsZXNoZWV0JyBocmVm
PScvcmVkaXJlY3RlZC5jc3MnIHR5cGU9J3RleHQvY3NzJz48L2hlYWQ+PGJvZHk+PC9odG1sPiI7
Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5
LCBTT1VQX01FTU9SWV9TVEFUSUMsIHJlZGlyZWN0ZWRDU1NIdG1sLCBzdHJsZW4ocmVkaXJlY3Rl
ZENTU0h0bWwpKTsKLSAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvaW52YWxpZC1j
c3MuaHRtbCIpKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBpbnZhbGlkQ1NTSHRtbCA9
ICI8aHRtbD48aGVhZD48bGluayByZWw9J3N0eWxlc2hlZXQnIGhyZWY9Jy9pbnZhbGlkLmNzcycg
dHlwZT0ndGV4dC9jc3MnPjwvaGVhZD48Ym9keT48L2h0bWw+IjsKLSAgICAgICAgc291cF9tZXNz
YWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJ
QywgaW52YWxpZENTU0h0bWwsIHN0cmxlbihpbnZhbGlkQ1NTSHRtbCkpOwotICAgIH0gZWxzZSBp
ZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9zaW1wbGUtc3R5bGUtY3NzLmh0bWwiKSkgewotICAgICAg
ICBzdGF0aWMgY29uc3QgY2hhciogc2ltcGxlU3R5bGVDU1NIdG1sID0gIjxodG1sPjxoZWFkPjxs
aW5rIHJlbD0nc3R5bGVzaGVldCcgaHJlZj0nL3NpbXBsZS1zdHlsZS5jc3MnIHR5cGU9J3RleHQv
Y3NzJz48L2hlYWQ+PGJvZHk+PC9odG1sPiI7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2Fw
cGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIHNpbXBsZVN0
eWxlQ1NTSHRtbCwgc3RybGVuKHNpbXBsZVN0eWxlQ1NTSHRtbCkpOwotICAgIH0gZWxzZSBpZiAo
Z19zdHJfZXF1YWwocGF0aCwgIi9zdHlsZS5jc3MiKSkgewotICAgICAgICBzb3VwX21lc3NhZ2Vf
Ym9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBr
U3R5bGVDU1MsIHN0cmxlbihrU3R5bGVDU1MpKTsKLSAgICAgICAgYWRkQ2FjaGVIVFRQSGVhZGVy
c1RvUmVzcG9uc2UobWVzc2FnZSk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVu
ZChtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiQ29udGVudC1UeXBlIiwgInRleHQvY3NzIik7
Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2phdmFzY3JpcHQuanMiKSkgewot
ICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwg
U09VUF9NRU1PUllfU1RBVElDLCBrSmF2YXNjcmlwdCwgc3RybGVuKGtKYXZhc2NyaXB0KSk7Ci0g
ICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9oZWFk
ZXJzLCAiQ29udGVudC1UeXBlIiwgInRleHQvamF2YXNjcmlwdCIpOwotICAgICAgICBzb3VwX21l
c3NhZ2VfaGVhZGVyc19hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIkNvbnRlbnQt
RGlzcG9zaXRpb24iLCAiZmlsZW5hbWU9SmF2YVNjcmlwdC5qcyIpOwotICAgIH0gZWxzZSBpZiAo
Z19zdHJfZXF1YWwocGF0aCwgIi9yZWxhdGl2ZS1qYXZhc2NyaXB0Lmh0bWwiKSkgewotICAgICAg
ICBzdGF0aWMgY29uc3QgY2hhciogamF2YXNjcmlwdFJlbGF0aXZlSFRNTCA9ICI8aHRtbD48aGVh
ZD48c2NyaXB0IGxhbmd1YWdlPSdqYXZhc2NyaXB0JyBzcmM9J3JlbW92ZS10aGlzL2phdmFzY3Jp
cHQuanMnPjwvc2NyaXB0PjwvaGVhZD48Ym9keT48L2JvZHk+PC9odG1sPiI7Ci0gICAgICAgIHNv
dXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9S
WV9TVEFUSUMsIGphdmFzY3JpcHRSZWxhdGl2ZUhUTUwsIHN0cmxlbihqYXZhc2NyaXB0UmVsYXRp
dmVIVE1MKSk7Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3Jlc291cmNlLXRv
LWNhbmNlbC5odG1sIikpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHJlc291cmNlVG9D
YW5jZWxIVE1MID0gIjxodG1sPjxoZWFkPjxzY3JpcHQgbGFuZ3VhZ2U9J2phdmFzY3JpcHQnIHNy
Yz0nY2FuY2VsLXRoaXMuanMnPjwvc2NyaXB0PjwvaGVhZD48Ym9keT48L2JvZHk+PC9odG1sPiI7
Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5
LCBTT1VQX01FTU9SWV9TVEFUSUMsIHJlc291cmNlVG9DYW5jZWxIVE1MLCBzdHJsZW4ocmVzb3Vy
Y2VUb0NhbmNlbEhUTUwpKTsKLSAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvcmVk
aXJlY3RlZC1qYXZhc2NyaXB0Lmh0bWwiKSkgewotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciog
amF2YXNjcmlwdFJlbGF0aXZlSFRNTCA9ICI8aHRtbD48aGVhZD48c2NyaXB0IGxhbmd1YWdlPSdq
YXZhc2NyaXB0JyBzcmM9Jy9yZWRpcmVjdGVkLmpzJz48L3NjcmlwdD48L2hlYWQ+PGJvZHk+PC9i
b2R5PjwvaHRtbD4iOwotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+
cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBqYXZhc2NyaXB0UmVsYXRpdmVIVE1M
LCBzdHJsZW4oamF2YXNjcmlwdFJlbGF0aXZlSFRNTCkpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJf
ZXF1YWwocGF0aCwgIi9yZWRpcmVjdGVkLXRvLWNhbmNlbC5odG1sIikpIHsKLSAgICAgICAgc3Rh
dGljIGNvbnN0IGNoYXIqIGphdmFzY3JpcHRSZWxhdGl2ZUhUTUwgPSAiPGh0bWw+PGhlYWQ+PHNj
cmlwdCBsYW5ndWFnZT0namF2YXNjcmlwdCcgc3JjPScvcmVkaXJlY3RlZC10by1jYW5jZWwuanMn
Pjwvc2NyaXB0PjwvaGVhZD48Ym9keT48L2JvZHk+PC9odG1sPiI7Ci0gICAgICAgIHNvdXBfbWVz
c2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFU
SUMsIGphdmFzY3JpcHRSZWxhdGl2ZUhUTUwsIHN0cmxlbihqYXZhc2NyaXB0UmVsYXRpdmVIVE1M
KSk7Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2JsYW5rLmljbyIpKSB7Ci0g
ICAgICAgIEdPd25QdHI8Y2hhcj4gZmlsZVBhdGgoZ19idWlsZF9maWxlbmFtZShUZXN0OjpnZXRX
ZWJLaXQxVGVzdFJlc291Y2VzRGlyKCkuZGF0YSgpLCBwYXRoLCBOVUxMKSk7Ci0gICAgICAgIGNo
YXIqIGNvbnRlbnRzOwotICAgICAgICBnc2l6ZSBjb250ZW50c0xlbmd0aDsKLSAgICAgICAgZ19m
aWxlX2dldF9jb250ZW50cyhmaWxlUGF0aC5nZXQoKSwgJmNvbnRlbnRzLCAmY29udGVudHNMZW5n
dGgsIDApOwotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9u
c2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgY29udGVudHMsIGNvbnRlbnRzTGVuZ3RoKTsKLSAg
ICAgICAgYWRkQ2FjaGVIVFRQSGVhZGVyc1RvUmVzcG9uc2UobWVzc2FnZSk7Ci0gICAgICAgIHNv
dXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiQ29u
dGVudC1UeXBlIiwgImltYWdlL3ZuZC5taWNyb3NvZnQuaWNvbiIpOwotICAgIH0gZWxzZSBpZiAo
Z19zdHJfZXF1YWwocGF0aCwgIi9zaW1wbGUtc3R5bGUuY3NzIikpIHsKLSAgICAgICAgc3RhdGlj
IGNvbnN0IGNoYXIqIHNpbXBsZUNTUyA9Ci0gICAgICAgICAgICAiYm9keSB7IgotICAgICAgICAg
ICAgIiAgICBtYXJnaW46IDBweDsiCi0gICAgICAgICAgICAiICAgIHBhZGRpbmc6IDBweDsiCi0g
ICAgICAgICAgICAifSI7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdl
LT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIHNpbXBsZUNTUywgc3RybGVuKHNp
bXBsZUNTUykpOwotICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobWVzc2FnZS0+
cmVzcG9uc2VfaGVhZGVycywgIkNvbnRlbnQtVHlwZSIsICJ0ZXh0L2NzcyIpOwotICAgIH0gZWxz
ZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9yZWRpcmVjdGVkLmNzcyIpKSB7Ci0gICAgICAgIHNv
dXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX01PVkVEX1BFUk1BTkVO
VExZKTsKLSAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1lc3NhZ2UtPnJlc3Bv
bnNlX2hlYWRlcnMsICJMb2NhdGlvbiIsICIvc2ltcGxlLXN0eWxlLmNzcyIpOwotICAgIH0gZWxz
ZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9yZWRpcmVjdGVkLmpzIikpIHsKLSAgICAgICAgc291
cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTU9WRURfUEVSTUFORU5U
TFkpOwotICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobWVzc2FnZS0+cmVzcG9u
c2VfaGVhZGVycywgIkxvY2F0aW9uIiwgIi9yZW1vdmUtdGhpcy9qYXZhc2NyaXB0LmpzIik7Ci0g
ICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3JlZGlyZWN0ZWQtdG8tY2FuY2VsLmpz
IikpIHsKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFU
VVNfTU9WRURfUEVSTUFORU5UTFkpOwotICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBl
bmQobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIkxvY2F0aW9uIiwgIi9jYW5jZWwtdGhpcy5q
cyIpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9pbnZhbGlkLmNzcyIpKQot
ICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19DQU5U
X0NPTk5FQ1QpOwotICAgIGVsc2UKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVz
c2FnZSwgU09VUF9TVEFUVVNfTk9UX0ZPVU5EKTsKLSAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21w
bGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKLX0KLQotdm9pZCBiZWZvcmVBbGwoKQotewot
ICAgIGtTZXJ2ZXIgPSBuZXcgV2ViS2l0VGVzdFNlcnZlcigpOwotICAgIGtTZXJ2ZXItPnJ1bihz
ZXJ2ZXJDYWxsYmFjayk7Ci0KLSAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3dlYl9leHRlbnNp
b25zX2RpcmVjdG9yeSh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSwgV0VCS0lUX1RF
U1RfV0VCX0VYVEVOU0lPTlNfRElSKTsKLQotICAgIFJlc291cmNlc1Rlc3Q6OmFkZCgiV2ViS2l0
V2ViVmlldyIsICJyZXNvdXJjZXMiLCB0ZXN0V2ViVmlld1Jlc291cmNlcyk7Ci0gICAgU2luZ2xl
UmVzb3VyY2VMb2FkVGVzdDo6YWRkKCJXZWJLaXRXZWJSZXNvdXJjZSIsICJsb2FkaW5nIiwgdGVz
dFdlYlJlc291cmNlTG9hZGluZyk7Ci0gICAgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6YWRkKCJX
ZWJLaXRXZWJSZXNvdXJjZSIsICJyZXNwb25zZSIsIHRlc3RXZWJSZXNvdXJjZVJlc3BvbnNlKTsK
LSAgICBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjphZGQoIldlYktpdFdlYlJlc291cmNlIiwgIm1p
bWUtdHlwZSIsIHRlc3RXZWJSZXNvdXJjZU1pbWVUeXBlKTsKLSAgICBTaW5nbGVSZXNvdXJjZUxv
YWRUZXN0OjphZGQoIldlYktpdFdlYlJlc291cmNlIiwgInN1Z2dlc3RlZC1maWxlbmFtZSIsIHRl
c3RXZWJSZXNvdXJjZVN1Z2dlc3RlZEZpbGVuYW1lKTsKLSAgICBSZXNvdXJjZVVSSVRyYWNraW5n
VGVzdDo6YWRkKCJXZWJLaXRXZWJSZXNvdXJjZSIsICJhY3RpdmUtdXJpIiwgdGVzdFdlYlJlc291
cmNlQWN0aXZlVVJJKTsKLSAgICBSZXNvdXJjZXNUZXN0OjphZGQoIldlYktpdFdlYlJlc291cmNl
IiwgImdldC1kYXRhIiwgdGVzdFdlYlJlc291cmNlR2V0RGF0YSk7Ci0gICAgU2luZ2xlUmVzb3Vy
Y2VMb2FkVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImhpc3RvcnktY2FjaGUiLCB0ZXN0V2Vi
Vmlld1Jlc291cmNlc0hpc3RvcnlDYWNoZSk7Ci0gICAgU2VuZFJlcXVlc3RUZXN0OjphZGQoIldl
YktpdFdlYlBhZ2UiLCAic2VuZC1yZXF1ZXN0IiwgdGVzdFdlYlJlc291cmNlU2VuZFJlcXVlc3Qp
OwotfQotCi12b2lkIGFmdGVyQWxsKCkKLXsKLSAgICBkZWxldGUga1NlcnZlcjsKLX0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RTU0wuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFNTTC5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzMTgwYzUuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFNTTC5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwyOTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5M
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJMb2FkVHJhY2tpbmdUZXN0LmgiCi0j
aW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5oIgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLQotc3Rh
dGljIFdlYktpdFRlc3RTZXJ2ZXIqIGtIdHRwc1NlcnZlcjsKLXN0YXRpYyBXZWJLaXRUZXN0U2Vy
dmVyKiBrSHR0cFNlcnZlcjsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGluZGV4SFRNTCA9ICI8aHRt
bD48Ym9keT5UZXN0aW5nIFdlYktpdDJHVEsrIFNTTDwvYm9keT48L2h0bWxsPiI7Ci1zdGF0aWMg
Y29uc3QgY2hhciogaW5zZWN1cmVDb250ZW50SFRNTCA9ICI8aHRtbD48c2NyaXB0IHNyYz1cIiVz
XCI+PC9zY3JpcHQ+PGJvZHk+PHA+VGV4dCArIGltYWdlIDxpbWcgc3JjPVwiJXNcIiBhbGlnbj1c
InJpZ2h0XCIvPjwvcD48L2JvZHk+PC9odG1sPiI7Ci1zdGF0aWMgY29uc3QgY2hhciBUTFNFeHBl
Y3RlZFN1Y2Nlc3NUaXRsZVtdID0gIldlYktpdDJHdGsrIFRMUyBwZXJtaXNzaW9uIHRlc3QiOwot
c3RhdGljIGNvbnN0IGNoYXIgVExTU3VjY2Vzc0hUTUxTdHJpbmdbXSA9ICI8aHRtbD48aGVhZD48
dGl0bGU+V2ViS2l0Mkd0aysgVExTIHBlcm1pc3Npb24gdGVzdDwvdGl0bGU+PC9oZWFkPjxib2R5
PjwvYm9keT48L2h0bWw+IjsKLQotY2xhc3MgU1NMVGVzdDogcHVibGljIExvYWRUcmFja2luZ1Rl
c3QgewotcHVibGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoU1NMVGVzdCk7Ci0KLSAg
ICBTU0xUZXN0KCkKLSAgICAgICAgOiBtX3Rsc0Vycm9ycyhzdGF0aWNfY2FzdDxHVGxzQ2VydGlm
aWNhdGVGbGFncz4oMCkpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBwcm92aXNp
b25hbExvYWRGYWlsZWQoY29uc3QgZ2NoYXIqIGZhaWxpbmdVUkksIEdFcnJvciogZXJyb3IpCi0g
ICAgewotICAgICAgICBnX2Fzc2VydF9lcnJvcihlcnJvciwgU09VUF9IVFRQX0VSUk9SLCBTT1VQ
X1NUQVRVU19TU0xfRkFJTEVEKTsKLSAgICAgICAgTG9hZFRyYWNraW5nVGVzdDo6cHJvdmlzaW9u
YWxMb2FkRmFpbGVkKGZhaWxpbmdVUkksIGVycm9yKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgbG9hZENvbW1pdHRlZCgpCi0gICAgewotICAgICAgICBHVGxzQ2VydGlmaWNhdGUqIGNlcnRp
ZmljYXRlID0gMDsKLSAgICAgICAgd2Via2l0X3dlYl92aWV3X2dldF90bHNfaW5mbyhtX3dlYlZp
ZXcsICZjZXJ0aWZpY2F0ZSwgJm1fdGxzRXJyb3JzKTsKLSAgICAgICAgbV9jZXJ0aWZpY2F0ZSA9
IGNlcnRpZmljYXRlOwotICAgICAgICBMb2FkVHJhY2tpbmdUZXN0Ojpsb2FkQ29tbWl0dGVkKCk7
Ci0gICAgfQotCi0gICAgdm9pZCB3YWl0VW50aWxMb2FkRmluaXNoZWQoKQotICAgIHsKLSAgICAg
ICAgbV9jZXJ0aWZpY2F0ZSA9IDA7Ci0gICAgICAgIG1fdGxzRXJyb3JzID0gc3RhdGljX2Nhc3Q8
R1Rsc0NlcnRpZmljYXRlRmxhZ3M+KDApOwotICAgICAgICBMb2FkVHJhY2tpbmdUZXN0Ojp3YWl0
VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICB9Ci0KLSAgICBHUmVmUHRyPEdUbHNDZXJ0aWZpY2F0
ZT4gbV9jZXJ0aWZpY2F0ZTsKLSAgICBHVGxzQ2VydGlmaWNhdGVGbGFncyBtX3Rsc0Vycm9yczsK
LX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RTU0woU1NMVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikK
LXsKLSAgICB0ZXN0LT5sb2FkVVJJKGtIdHRwc1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRh
dGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgZ19hc3NlcnQo
dGVzdC0+bV9jZXJ0aWZpY2F0ZSk7Ci0gICAgLy8gV2UgYWx3YXlzIGV4cGVjdCBlcnJvcnMgYmVj
YXVzZSB3ZSBhcmUgdXNpbmcgYSBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZSwKLSAgICAvLyBidXQg
b25seSBHX1RMU19DRVJUSUZJQ0FURV9VTktOT1dOX0NBIGZsYWdzIHNob3VsZCBiZSBwcmVzZW50
LgotICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGxzRXJyb3JzKTsKLSAgICBnX2Fzc2VydF9jbXB1aW50
KHRlc3QtPm1fdGxzRXJyb3JzLCA9PSwgR19UTFNfQ0VSVElGSUNBVEVfVU5LTk9XTl9DQSk7Ci0K
LSAgICAvLyBOb24gSFRUUFMgbG9hZHMgc2hvdWxkbid0IGhhdmUgYSBjZXJ0aWZpY2F0ZSBub3Ig
ZXJyb3JzLgotICAgIHRlc3QtPmxvYWRIdG1sKGluZGV4SFRNTCwgMCk7Ci0gICAgdGVzdC0+d2Fp
dFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgZ19hc3NlcnQoIXRlc3QtPm1fY2VydGlmaWNhdGUp
OwotICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX3Rsc0Vycm9ycyk7Ci19Ci0KLWNsYXNzIEluc2VjdXJl
Q29udGVudFRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElC
X1RFU1RfRklYVFVSRShJbnNlY3VyZUNvbnRlbnRUZXN0KTsKLQotICAgIEluc2VjdXJlQ29udGVu
dFRlc3QoKQotICAgICAgICA6IG1faW5zZWN1cmVDb250ZW50UnVuKGZhbHNlKQotICAgICAgICAs
IG1faW5zZWN1cmVDb250ZW50RGlzcGxheWVkKGZhbHNlKQotICAgIHsKLSAgICAgICAgZ19zaWdu
YWxfY29ubmVjdChtX3dlYlZpZXcsICJpbnNlY3VyZS1jb250ZW50LWRldGVjdGVkIiwgR19DQUxM
QkFDSyhpbnNlY3VyZUNvbnRlbnREZXRlY3RlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgfQotCi0g
ICAgc3RhdGljIHZvaWQgaW5zZWN1cmVDb250ZW50RGV0ZWN0ZWRDYWxsYmFjayhXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3LCBXZWJLaXRJbnNlY3VyZUNvbnRlbnRFdmVudCBldmVudCwgSW5zZWN1cmVD
b250ZW50VGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0KHdlYlZpZXcgPT0gdGVz
dC0+bV93ZWJWaWV3KTsKLQotICAgICAgICBpZiAoZXZlbnQgPT0gV0VCS0lUX0lOU0VDVVJFX0NP
TlRFTlRfUlVOKQotICAgICAgICAgICAgdGVzdC0+bV9pbnNlY3VyZUNvbnRlbnRSdW4gPSB0cnVl
OwotCi0gICAgICAgIGlmIChldmVudCA9PSBXRUJLSVRfSU5TRUNVUkVfQ09OVEVOVF9ESVNQTEFZ
RUQpCi0gICAgICAgICAgICB0ZXN0LT5tX2luc2VjdXJlQ29udGVudERpc3BsYXllZCA9IHRydWU7
Ci0gICAgfQotCi0gICAgYm9vbCBtX2luc2VjdXJlQ29udGVudFJ1bjsKLSAgICBib29sIG1faW5z
ZWN1cmVDb250ZW50RGlzcGxheWVkOwotfTsKLQotc3RhdGljIHZvaWQgdGVzdEluc2VjdXJlQ29u
dGVudChJbnNlY3VyZUNvbnRlbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRl
c3QtPmxvYWRVUkkoa0h0dHBzU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvaW5zZWN1cmUtY29udGVu
dC8iKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAg
Z19hc3NlcnQodGVzdC0+bV9pbnNlY3VyZUNvbnRlbnRSdW4pOwotICAgIGdfYXNzZXJ0KHRlc3Qt
Pm1faW5zZWN1cmVDb250ZW50RGlzcGxheWVkKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFRMU0Vy
cm9yc1BvbGljeShTU0xUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIFdlYktpdFdl
YkNvbnRleHQqIGNvbnRleHQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQodGVzdC0+bV93
ZWJWaWV3KTsKLSAgICAvLyBUTFMgZXJyb3JzIGFyZSBpZ25vcmVkIGJ5IGRlZmF1bHQuCi0gICAg
Z19hc3NlcnQod2Via2l0X3dlYl9jb250ZXh0X2dldF90bHNfZXJyb3JzX3BvbGljeShjb250ZXh0
KSA9PSBXRUJLSVRfVExTX0VSUk9SU19QT0xJQ1lfSUdOT1JFKTsKLSAgICB0ZXN0LT5sb2FkVVJJ
KGtIdHRwc1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2Fp
dFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgZ19hc3NlcnQoIXRlc3QtPm1fbG9hZEZhaWxlZCk7
Ci0KLSAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3Rsc19lcnJvcnNfcG9saWN5KGNvbnRleHQs
IFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9GQUlMKTsKLSAgICB0ZXN0LT5sb2FkVVJJKGtIdHRw
c1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGls
TG9hZEZpbmlzaGVkKCk7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV9sb2FkRmFpbGVkKTsKLSAgICBn
X2Fzc2VydCh0ZXN0LT5tX2xvYWRFdmVudHMuY29udGFpbnMoTG9hZFRyYWNraW5nVGVzdDo6UHJv
dmlzaW9uYWxMb2FkRmFpbGVkKSk7Ci0gICAgZ19hc3NlcnQoIXRlc3QtPm1fbG9hZEV2ZW50cy5j
b250YWlucyhMb2FkVHJhY2tpbmdUZXN0OjpMb2FkQ29tbWl0dGVkKSk7Ci19Ci0KLWNsYXNzIFRM
U0Vycm9yc1Rlc3Q6IHB1YmxpYyBTU0xUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVT
VF9GSVhUVVJFKFRMU0Vycm9yc1Rlc3QpOwotCi0gICAgVExTRXJyb3JzVGVzdCgpCi0gICAgewot
ICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImxvYWQtZmFpbGVkLXdpdGgtdGxz
LWVycm9ycyIsIEdfQ0FMTEJBQ0socnVuTG9hZEZhaWxlZFdpdGhUTFNFcnJvcnNDYWxsYmFjayks
IHRoaXMpOwotICAgIH0KLQotICAgIH5UTFNFcnJvcnNUZXN0KCkKLSAgICB7Ci0gICAgICAgIGdf
c2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3dlYlZpZXcsIEdfU0lHTkFMX01B
VENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOwotICAgICAgICBpZiAobV9jZXJ0aWZpY2F0ZUlu
Zm8pCi0gICAgICAgICAgICB3ZWJraXRfY2VydGlmaWNhdGVfaW5mb19mcmVlKG1fY2VydGlmaWNh
dGVJbmZvKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZ2Jvb2xlYW4gcnVuTG9hZEZhaWxlZFdpdGhU
TFNFcnJvcnNDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiwgV2ViS2l0Q2VydGlmaWNhdGVJbmZvKiBp
bmZvLCBjb25zdCBjaGFyKiBob3N0LCBUTFNFcnJvcnNUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAg
ICAgdGVzdC0+cnVuTG9hZEZhaWxlZFdpdGhUTFNFcnJvcnMoaW5mbywgaG9zdCk7Ci0gICAgICAg
IHJldHVybiBUUlVFOwotICAgIH0KLQotICAgIHZvaWQgcnVuTG9hZEZhaWxlZFdpdGhUTFNFcnJv
cnMoV2ViS2l0Q2VydGlmaWNhdGVJbmZvKiBpbmZvLCBjb25zdCBjaGFyKiBob3N0KQotICAgIHsK
LSAgICAgICAgaWYgKG1fY2VydGlmaWNhdGVJbmZvKQotICAgICAgICAgICAgd2Via2l0X2NlcnRp
ZmljYXRlX2luZm9fZnJlZShtX2NlcnRpZmljYXRlSW5mbyk7Ci0gICAgICAgIG1fY2VydGlmaWNh
dGVJbmZvID0gd2Via2l0X2NlcnRpZmljYXRlX2luZm9fY29weShpbmZvKTsKLSAgICAgICAgbV9o
b3N0LnNldChnX3N0cmR1cChob3N0KSk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWlu
TG9vcCk7Ci0gICAgfQotCi0gICAgdm9pZCB3YWl0VW50aWxMb2FkRmFpbGVkV2l0aFRMU0Vycm9y
cygpCi0gICAgewotICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Ci0gICAgfQot
Ci0gICAgV2ViS2l0Q2VydGlmaWNhdGVJbmZvKiBjZXJ0aWZpY2F0ZUluZm8oKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fY2VydGlmaWNhdGVJbmZvOwotICAgIH0KLQotICAgIGNvbnN0IGNoYXIq
IGhvc3QoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1faG9zdC5nZXQoKTsKLSAgICB9Ci0KLXBy
aXZhdGU6Ci0gICAgV2ViS2l0Q2VydGlmaWNhdGVJbmZvKiBtX2NlcnRpZmljYXRlSW5mbzsKLSAg
ICBHT3duUHRyPGNoYXI+IG1faG9zdDsKLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RMb2FkRmFpbGVk
V2l0aFRMU0Vycm9ycyhUTFNFcnJvcnNUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAg
IFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQo
dGVzdC0+bV93ZWJWaWV3KTsKLSAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3Rsc19lcnJvcnNf
cG9saWN5KGNvbnRleHQsIFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9GQUlMKTsKLQotICAgIC8v
IFRoZSBsb2FkLWZhaWxlZC13aXRoLXRscy1lcnJvcnMgc2lnbmFsIHNob3VsZCBiZSBlbWl0dGVk
IHdoZW4gdGhlcmUgaXMgYSBUTFMgZmFpbHVyZS4KLSAgICB0ZXN0LT5sb2FkVVJJKGtIdHRwc1Nl
cnZlci0+Z2V0VVJJRm9yUGF0aCgiL3Rlc3QtdGxzLyIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2Fp
dFVudGlsTG9hZEZhaWxlZFdpdGhUTFNFcnJvcnMoKTsKLSAgICAvLyBUZXN0IHRoZSBXZWJLaXRD
ZXJ0aWZpY2F0ZUluZm8gQVBJLgotICAgIGdfYXNzZXJ0KEdfSVNfVExTX0NFUlRJRklDQVRFKHdl
YmtpdF9jZXJ0aWZpY2F0ZV9pbmZvX2dldF90bHNfY2VydGlmaWNhdGUodGVzdC0+Y2VydGlmaWNh
dGVJbmZvKCkpKSk7Ci0gICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfY2VydGlmaWNhdGVfaW5m
b19nZXRfdGxzX2Vycm9ycyh0ZXN0LT5jZXJ0aWZpY2F0ZUluZm8oKSksID09LCBHX1RMU19DRVJU
SUZJQ0FURV9VTktOT1dOX0NBKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+aG9zdCgpLCA9
PSwgc291cF91cmlfZ2V0X2hvc3Qoa0h0dHBzU2VydmVyLT5iYXNlVVJJKCkpKTsKLSAgICBnX2Fz
c2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6
UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9h
ZEV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7Ci0KLSAgICAv
LyBUZXN0IGFsbG93aW5nIGFuIGV4Y2VwdGlvbiBmb3IgdGhpcyBjZXJ0aWZpY2F0ZSBvbiB0aGlz
IGhvc3QuCi0gICAgd2Via2l0X3dlYl9jb250ZXh0X2FsbG93X3Rsc19jZXJ0aWZpY2F0ZV9mb3Jf
aG9zdChjb250ZXh0LCB0ZXN0LT5jZXJ0aWZpY2F0ZUluZm8oKSwgdGVzdC0+aG9zdCgpKTsKLSAg
ICAvLyBUaGUgcGFnZSBzaG91bGQgbm93IGxvYWQgd2l0aG91dCBlcnJvcnMuCi0gICAgdGVzdC0+
bG9hZFVSSShrSHR0cHNTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi90ZXN0LXRscy8iKS5kYXRhKCkp
OwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3NlcnRfY21w
aW50KHRlc3QtPm1fbG9hZEV2ZW50c1swXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lv
bmFsTG9hZFN0YXJ0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNb
MV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkQ29tbWl0dGVkKTsKLSAgICBnX2Fzc2VydF9j
bXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZp
bmlzaGVkKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dldF90aXRsZSh0
ZXN0LT5tX3dlYlZpZXcpLCA9PSwgVExTRXhwZWN0ZWRTdWNjZXNzVGl0bGUpOwotfQotCi0KLXN0
YXRpYyB2b2lkIGh0dHBzU2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVz
c2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSosIFNvdXBDbGllbnRD
b250ZXh0KiwgZ3BvaW50ZXIpCi17Ci0gICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01F
VEhPRF9HRVQpIHsKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09V
UF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGlmIChnX3N0cl9lcXVhbChwYXRoLCAiLyIpKSB7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRf
c3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKLSAgICAgICAgc291cF9tZXNzYWdlX2Jv
ZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgaW5k
ZXhIVE1MLCBzdHJsZW4oaW5kZXhIVE1MKSk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2Nv
bXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1
YWwocGF0aCwgIi9pbnNlY3VyZS1jb250ZW50LyIpKSB7Ci0gICAgICAgIEdPd25QdHI8Y2hhcj4g
cmVzcG9uc2VIVE1MKGdfc3RyZHVwX3ByaW50ZihpbnNlY3VyZUNvbnRlbnRIVE1MLCBrSHR0cFNl
cnZlci0+Z2V0VVJJRm9yUGF0aCgiL3Rlc3Qtc2NyaXB0IikuZGF0YSgpLCBrSHR0cFNlcnZlci0+
Z2V0VVJJRm9yUGF0aCgiL3Rlc3QtaW1hZ2UiKS5kYXRhKCkpKTsKLSAgICAgICAgc291cF9tZXNz
YWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX0NPUFks
IHJlc3BvbnNlSFRNTC5nZXQoKSwgc3RybGVuKHJlc3BvbnNlSFRNTC5nZXQoKSkpOwotICAgICAg
ICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7Ci0gICAg
ICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOwot
ICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi90ZXN0LXRscy8iKSkgewotICAgICAg
ICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7Ci0gICAg
ICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQ
X01FTU9SWV9TVEFUSUMsIFRMU1N1Y2Nlc3NIVE1MU3RyaW5nLCBzdHJsZW4oVExTU3VjY2Vzc0hU
TUxTdHJpbmcpKTsKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+
cmVzcG9uc2VfYm9keSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3Rh
dHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGh0
dHBTZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtZXNzYWdl
LCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiwgU291cENsaWVudENvbnRleHQqLCBncG9p
bnRlcikKLXsKLSAgICBpZiAobWVzc2FnZS0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgewot
ICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1Rf
SU1QTEVNRU5URUQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGdfc3RyX2Vx
dWFsKHBhdGgsICIvdGVzdC1zY3JpcHQiKSkgewotICAgICAgICBHT3duUHRyPGNoYXI+IHBhdGhU
b0ZpbGUoZ19idWlsZF9maWxlbmFtZShUZXN0OjpnZXRSZXNvdXJjZXNEaXIoKS5kYXRhKCksICJs
aW5rLXRpdGxlLmpzIiwgTlVMTCkpOwotICAgICAgICBjaGFyKiBjb250ZW50czsKLSAgICAgICAg
Z3NpemUgbGVuZ3RoOwotICAgICAgICBnX2ZpbGVfZ2V0X2NvbnRlbnRzKHBhdGhUb0ZpbGUuZ2V0
KCksICZjb250ZW50cywgJmxlbmd0aCwgMCk7Ci0KLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlf
YXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGNvbnRlbnRz
LCBsZW5ndGgpOwotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQ
X1NUQVRVU19PSyk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2Ut
PnJlc3BvbnNlX2JvZHkpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi90ZXN0
LWltYWdlIikpIHsKLSAgICAgICAgR093blB0cjxjaGFyPiBwYXRoVG9GaWxlKGdfYnVpbGRfZmls
ZW5hbWUoVGVzdDo6Z2V0V2ViS2l0MVRlc3RSZXNvdWNlc0RpcigpLmRhdGEoKSwgImJsYW5rLmlj
byIsIE5VTEwpKTsKLSAgICAgICAgY2hhciogY29udGVudHM7Ci0gICAgICAgIGdzaXplIGxlbmd0
aDsKLSAgICAgICAgZ19maWxlX2dldF9jb250ZW50cyhwYXRoVG9GaWxlLmdldCgpLCAmY29udGVu
dHMsICZsZW5ndGgsIDApOwotCi0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNz
YWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBjb250ZW50cywgbGVuZ3RoKTsK
LSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0sp
OwotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9i
b2R5KTsKLSAgICB9IGVsc2UKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2Fn
ZSwgU09VUF9TVEFUVVNfTk9UX0ZPVU5EKTsKLX0KLQotdm9pZCBiZWZvcmVBbGwoKQotewotICAg
IGtIdHRwc1NlcnZlciA9IG5ldyBXZWJLaXRUZXN0U2VydmVyKFdlYktpdFRlc3RTZXJ2ZXI6OlNl
cnZlckhUVFBTKTsKLSAgICBrSHR0cHNTZXJ2ZXItPnJ1bihodHRwc1NlcnZlckNhbGxiYWNrKTsK
LQotICAgIGtIdHRwU2VydmVyID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIoV2ViS2l0VGVzdFNlcnZl
cjo6U2VydmVySFRUUCk7Ci0gICAga0h0dHBTZXJ2ZXItPnJ1bihodHRwU2VydmVyQ2FsbGJhY2sp
OwotCi0gICAgU1NMVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInNzbCIsIHRlc3RTU0wpOwot
ICAgIEluc2VjdXJlQ29udGVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJpbnNlY3VyZS1j
b250ZW50IiwgdGVzdEluc2VjdXJlQ29udGVudCk7Ci0gICAgLy8gSW4gdGhpcyBjYXNlIHRoZSBv
cmRlciBvZiB0aGUgdGVzdHMgZG9lcyBtYXR0ZXIgYmVjYXVzZSB0bHMtZXJyb3JzLXBvbGljeSB0
ZXN0cyB0aGUgZGVmYXVsdCBwb2xpY3ksCi0gICAgLy8gYW5kIGV4cGVjdHMgdGhhdCBubyBleGNl
cHRpb24gd2lsbCBoYXZlIGJlZW4gYWRkZWQgZm9yIHRoaXMgY2VydGlmaWNhdGUgYW5kIGhvc3Qg
cGFpciBhcyBpcwotICAgIC8vIGRvbmUgaW4gdGhlIHRscy1wZXJtaXNzaW9uLXJlcXVlc3QgdGVz
dC4KLSAgICBTU0xUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAidGxzLWVycm9ycy1wb2xpY3ki
LCB0ZXN0VExTRXJyb3JzUG9saWN5KTsKLSAgICBUTFNFcnJvcnNUZXN0OjphZGQoIldlYktpdFdl
YlZpZXciLCAibG9hZC1mYWlsZWQtd2l0aC10bHMtZXJyb3JzIiwgdGVzdExvYWRGYWlsZWRXaXRo
VExTRXJyb3JzKTsKLX0KLQotdm9pZCBhZnRlckFsbCgpCi17Ci0gICAgZGVsZXRlIGtIdHRwc1Nl
cnZlcjsKLSAgICBkZWxldGUga0h0dHBTZXJ2ZXI7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0VUlDbGllbnQuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFVJQ2xpZW50LmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYmMzMGQ2ZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0VUlDbGllbnQuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsNjc5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgotI2luY2x1ZGUg
PHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLQotc3RhdGljIGNvbnN0IGNoYXIqIGtBbGVydERp
YWxvZ01lc3NhZ2UgPSAiV2ViS2l0R1RLKyBhbGVydCBkaWFsb2cgbWVzc2FnZSI7Ci1zdGF0aWMg
Y29uc3QgY2hhcioga0NvbmZpcm1EaWFsb2dNZXNzYWdlID0gIldlYktpdEdUSysgY29uZmlybSBk
aWFsb2cgbWVzc2FnZSI7Ci1zdGF0aWMgY29uc3QgY2hhcioga1Byb21wdERpYWxvZ01lc3NhZ2Ug
PSAiV2ViS2l0R1RLKyBwcm9tcHQgZGlhbG9nIG1lc3NhZ2UiOwotc3RhdGljIGNvbnN0IGNoYXIq
IGtQcm9tcHREaWFsb2dSZXR1cm5lZFRleHQgPSAiV2ViS2l0R1RLKyBwcm9tcHQgZGlhbG9nIHJl
dHVybmVkIHRleHQiOwotCi1jbGFzcyBVSUNsaWVudFRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7
Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShVSUNsaWVudFRlc3QpOwotCi0g
ICAgZW51bSBXZWJWaWV3RXZlbnRzIHsKLSAgICAgICAgQ3JlYXRlLAotICAgICAgICBSZWFkeVRv
U2hvdywKLSAgICAgICAgUnVuQXNNb2RhbCwKLSAgICAgICAgQ2xvc2UKLSAgICB9OwotCi0gICAg
Y2xhc3MgV2luZG93UHJvcGVydGllcyB7Ci0gICAgcHVibGljOgotICAgICAgICBXaW5kb3dQcm9w
ZXJ0aWVzKCkKLSAgICAgICAgICAgIDogbV9pc051bGwodHJ1ZSkKLSAgICAgICAgICAgICwgbV90
b29sYmFyVmlzaWJsZSh0cnVlKQotICAgICAgICAgICAgLCBtX3N0YXR1c2JhclZpc2libGUodHJ1
ZSkKLSAgICAgICAgICAgICwgbV9zY3JvbGxiYXJzVmlzaWJsZSh0cnVlKQotICAgICAgICAgICAg
LCBtX21lbnViYXJWaXNpYmxlKHRydWUpCi0gICAgICAgICAgICAsIG1fbG9jYXRpb25iYXJWaXNp
YmxlKHRydWUpCi0gICAgICAgICAgICAsIG1fcmVzaXphYmxlKHRydWUpCi0gICAgICAgICAgICAs
IG1fZnVsbHNjcmVlbihmYWxzZSkKLSAgICAgICAgewotICAgICAgICAgICAgbWVtc2V0KCZtX2dl
b21ldHJ5LCAwLCBzaXplb2YoR2RrUmVjdGFuZ2xlKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBX
aW5kb3dQcm9wZXJ0aWVzKFdlYktpdFdpbmRvd1Byb3BlcnRpZXMqIHdpbmRvd1Byb3BlcnRpZXMp
Ci0gICAgICAgICAgICA6IG1faXNOdWxsKGZhbHNlKQotICAgICAgICAgICAgLCBtX3Rvb2xiYXJW
aXNpYmxlKHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRfdG9vbGJhcl92aXNpYmxlKHdpbmRv
d1Byb3BlcnRpZXMpKQotICAgICAgICAgICAgLCBtX3N0YXR1c2JhclZpc2libGUod2Via2l0X3dp
bmRvd19wcm9wZXJ0aWVzX2dldF9zdGF0dXNiYXJfdmlzaWJsZSh3aW5kb3dQcm9wZXJ0aWVzKSkK
LSAgICAgICAgICAgICwgbV9zY3JvbGxiYXJzVmlzaWJsZSh3ZWJraXRfd2luZG93X3Byb3BlcnRp
ZXNfZ2V0X3Njcm9sbGJhcnNfdmlzaWJsZSh3aW5kb3dQcm9wZXJ0aWVzKSkKLSAgICAgICAgICAg
ICwgbV9tZW51YmFyVmlzaWJsZSh3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X21lbnViYXJf
dmlzaWJsZSh3aW5kb3dQcm9wZXJ0aWVzKSkKLSAgICAgICAgICAgICwgbV9sb2NhdGlvbmJhclZp
c2libGUod2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF9sb2NhdGlvbmJhcl92aXNpYmxlKHdp
bmRvd1Byb3BlcnRpZXMpKQotICAgICAgICAgICAgLCBtX3Jlc2l6YWJsZSh3ZWJraXRfd2luZG93
X3Byb3BlcnRpZXNfZ2V0X3Jlc2l6YWJsZSh3aW5kb3dQcm9wZXJ0aWVzKSkKLSAgICAgICAgICAg
ICwgbV9mdWxsc2NyZWVuKHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRfZnVsbHNjcmVlbih3
aW5kb3dQcm9wZXJ0aWVzKSkKLSAgICAgICAgewotICAgICAgICAgICAgd2Via2l0X3dpbmRvd19w
cm9wZXJ0aWVzX2dldF9nZW9tZXRyeSh3aW5kb3dQcm9wZXJ0aWVzLCAmbV9nZW9tZXRyeSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBXaW5kb3dQcm9wZXJ0aWVzKEdka1JlY3RhbmdsZSogZ2VvbWV0
cnksIGJvb2wgdG9vbGJhclZpc2libGUsIGJvb2wgc3RhdHVzYmFyVmlzaWJsZSwgYm9vbCBzY3Jv
bGxiYXJzVmlzaWJsZSwgYm9vbCBtZW51YmFyVmlzaWJsZSwgYm9vbCBsb2NhdGlvbmJhclZpc2li
bGUsIGJvb2wgcmVzaXphYmxlLCBib29sIGZ1bGxzY3JlZW4pCi0gICAgICAgICAgICA6IG1faXNO
dWxsKGZhbHNlKQotICAgICAgICAgICAgLCBtX2dlb21ldHJ5KCpnZW9tZXRyeSkKLSAgICAgICAg
ICAgICwgbV90b29sYmFyVmlzaWJsZSh0b29sYmFyVmlzaWJsZSkKLSAgICAgICAgICAgICwgbV9z
dGF0dXNiYXJWaXNpYmxlKHN0YXR1c2JhclZpc2libGUpCi0gICAgICAgICAgICAsIG1fc2Nyb2xs
YmFyc1Zpc2libGUoc2Nyb2xsYmFyc1Zpc2libGUpCi0gICAgICAgICAgICAsIG1fbWVudWJhclZp
c2libGUobWVudWJhclZpc2libGUpCi0gICAgICAgICAgICAsIG1fbG9jYXRpb25iYXJWaXNpYmxl
KGxvY2F0aW9uYmFyVmlzaWJsZSkKLSAgICAgICAgICAgICwgbV9yZXNpemFibGUocmVzaXphYmxl
KQotICAgICAgICAgICAgLCBtX2Z1bGxzY3JlZW4oZnVsbHNjcmVlbikKLSAgICAgICAgewotICAg
ICAgICB9Ci0KLSAgICAgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBtX2lzTnVsbDsg
fQotCi0gICAgICAgIHZvaWQgYXNzZXJ0RXF1YWwoY29uc3QgV2luZG93UHJvcGVydGllcyYgb3Ro
ZXIpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGdfYXNzZXJ0X2NtcGludChtX2dlb21l
dHJ5LngsID09LCBvdGhlci5tX2dlb21ldHJ5LngpOwotICAgICAgICAgICAgZ19hc3NlcnRfY21w
aW50KG1fZ2VvbWV0cnkueSwgPT0sIG90aGVyLm1fZ2VvbWV0cnkueSk7Ci0gICAgICAgICAgICBn
X2Fzc2VydF9jbXBpbnQobV9nZW9tZXRyeS53aWR0aCwgPT0sIG90aGVyLm1fZ2VvbWV0cnkud2lk
dGgpOwotICAgICAgICAgICAgZ19hc3NlcnRfY21waW50KG1fZ2VvbWV0cnkuaGVpZ2h0LCA9PSwg
b3RoZXIubV9nZW9tZXRyeS5oZWlnaHQpOwotICAgICAgICAgICAgZ19hc3NlcnRfY21waW50KHN0
YXRpY19jYXN0PGludD4obV90b29sYmFyVmlzaWJsZSksID09LCBzdGF0aWNfY2FzdDxpbnQ+KG90
aGVyLm1fdG9vbGJhclZpc2libGUpKTsKLSAgICAgICAgICAgIGdfYXNzZXJ0X2NtcGludChzdGF0
aWNfY2FzdDxpbnQ+KG1fc3RhdHVzYmFyVmlzaWJsZSksID09LCBzdGF0aWNfY2FzdDxpbnQ+KG90
aGVyLm1fc3RhdHVzYmFyVmlzaWJsZSkpOwotICAgICAgICAgICAgZ19hc3NlcnRfY21waW50KHN0
YXRpY19jYXN0PGludD4obV9zY3JvbGxiYXJzVmlzaWJsZSksID09LCBzdGF0aWNfY2FzdDxpbnQ+
KG90aGVyLm1fc2Nyb2xsYmFyc1Zpc2libGUpKTsKLSAgICAgICAgICAgIGdfYXNzZXJ0X2NtcGlu
dChzdGF0aWNfY2FzdDxpbnQ+KG1fbWVudWJhclZpc2libGUpLCA9PSwgc3RhdGljX2Nhc3Q8aW50
PihvdGhlci5tX21lbnViYXJWaXNpYmxlKSk7Ci0gICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQo
c3RhdGljX2Nhc3Q8aW50PihtX2xvY2F0aW9uYmFyVmlzaWJsZSksID09LCBzdGF0aWNfY2FzdDxp
bnQ+KG90aGVyLm1fbG9jYXRpb25iYXJWaXNpYmxlKSk7Ci0gICAgICAgICAgICBnX2Fzc2VydF9j
bXBpbnQoc3RhdGljX2Nhc3Q8aW50PihtX3Jlc2l6YWJsZSksID09LCBzdGF0aWNfY2FzdDxpbnQ+
KG90aGVyLm1fcmVzaXphYmxlKSk7Ci0gICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQoc3RhdGlj
X2Nhc3Q8aW50PihtX2Z1bGxzY3JlZW4pLCA9PSwgc3RhdGljX2Nhc3Q8aW50PihvdGhlci5tX2Z1
bGxzY3JlZW4pKTsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgYm9vbCBtX2lz
TnVsbDsKLQotICAgICAgICBHZGtSZWN0YW5nbGUgbV9nZW9tZXRyeTsKLQotICAgICAgICBib29s
IG1fdG9vbGJhclZpc2libGU7Ci0gICAgICAgIGJvb2wgbV9zdGF0dXNiYXJWaXNpYmxlOwotICAg
ICAgICBib29sIG1fc2Nyb2xsYmFyc1Zpc2libGU7Ci0gICAgICAgIGJvb2wgbV9tZW51YmFyVmlz
aWJsZTsKLSAgICAgICAgYm9vbCBtX2xvY2F0aW9uYmFyVmlzaWJsZTsKLQotICAgICAgICBib29s
IG1fcmVzaXphYmxlOwotICAgICAgICBib29sIG1fZnVsbHNjcmVlbjsKLSAgICB9OwotCi0gICAg
c3RhdGljIHZvaWQgd2luZG93UHJvcGVydGllc05vdGlmeUNhbGxiYWNrKEdPYmplY3QqLCBHUGFy
YW1TcGVjKiBwYXJhbVNwZWMsIFVJQ2xpZW50VGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHRl
c3QtPm1fd2luZG93UHJvcGVydGllc0NoYW5nZWQuYWRkKGdfcGFyYW1fc3BlY19nZXRfbmFtZShw
YXJhbVNwZWMpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgR3RrV2lkZ2V0KiB2aWV3Q3JlYXRlQ2Fs
bGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgVUlDbGllbnRUZXN0KiB0ZXN0KQotICAgIHsK
LSAgICAgICAgcmV0dXJuIHRlc3QtPnZpZXdDcmVhdGUod2ViVmlldyk7Ci0gICAgfQotCi0gICAg
c3RhdGljIHZvaWQgdmlld1JlYWR5VG9TaG93Q2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmll
dywgVUlDbGllbnRUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+dmlld1JlYWR5VG9T
aG93KHdlYlZpZXcpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHZpZXdDbG9zZUNhbGxiYWNr
KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFVJQ2xpZW50VGVzdCogdGVzdCkKLSAgICB7Ci0gICAg
ICAgIHRlc3QtPnZpZXdDbG9zZSh3ZWJWaWV3KTsKLSAgICB9Ci0KLSAgICB2b2lkIHNjcmlwdEFs
ZXJ0KFdlYktpdFNjcmlwdERpYWxvZyogZGlhbG9nKQotICAgIHsKLSAgICAgICAgc3dpdGNoICht
X3NjcmlwdERpYWxvZ1R5cGUpIHsKLSAgICAgICAgY2FzZSBXRUJLSVRfU0NSSVBUX0RJQUxPR19B
TEVSVDoKLSAgICAgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2NyaXB0X2RpYWxvZ19n
ZXRfbWVzc2FnZShkaWFsb2cpLCA9PSwga0FsZXJ0RGlhbG9nTWVzc2FnZSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBXRUJLSVRfU0NSSVBUX0RJQUxPR19DT05GSVJNOgotICAg
ICAgICAgICAgZ19hc3NlcnQobV9zY3JpcHREaWFsb2dDb25maXJtZWQpOwotICAgICAgICAgICAg
Z19hc3NlcnRfY21wc3RyKHdlYmtpdF9zY3JpcHRfZGlhbG9nX2dldF9tZXNzYWdlKGRpYWxvZyks
ID09LCAiY29uZmlybWVkIik7Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdF
QktJVF9TQ1JJUFRfRElBTE9HX1BST01QVDoKLSAgICAgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3
ZWJraXRfc2NyaXB0X2RpYWxvZ19nZXRfbWVzc2FnZShkaWFsb2cpLCA9PSwga1Byb21wdERpYWxv
Z1JldHVybmVkVGV4dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAg
IGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgdm9pZCBzY3JpcHRD
b25maXJtKFdlYktpdFNjcmlwdERpYWxvZyogZGlhbG9nKQotICAgIHsKLSAgICAgICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF9zY3JpcHRfZGlhbG9nX2dldF9tZXNzYWdlKGRpYWxvZyksID09LCBr
Q29uZmlybURpYWxvZ01lc3NhZ2UpOwotICAgICAgICBtX3NjcmlwdERpYWxvZ0NvbmZpcm1lZCA9
ICFtX3NjcmlwdERpYWxvZ0NvbmZpcm1lZDsKLSAgICAgICAgd2Via2l0X3NjcmlwdF9kaWFsb2df
Y29uZmlybV9zZXRfY29uZmlybWVkKGRpYWxvZywgbV9zY3JpcHREaWFsb2dDb25maXJtZWQpOwot
ICAgIH0KLQotICAgIHZvaWQgc2NyaXB0UHJvbXB0KFdlYktpdFNjcmlwdERpYWxvZyogZGlhbG9n
KQotICAgIHsKLSAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zY3JpcHRfZGlhbG9nX2dl
dF9tZXNzYWdlKGRpYWxvZyksID09LCBrUHJvbXB0RGlhbG9nTWVzc2FnZSk7Ci0gICAgICAgIGdf
YXNzZXJ0X2NtcHN0cih3ZWJraXRfc2NyaXB0X2RpYWxvZ19wcm9tcHRfZ2V0X2RlZmF1bHRfdGV4
dChkaWFsb2cpLCA9PSwgImRlZmF1bHQiKTsKLSAgICAgICAgd2Via2l0X3NjcmlwdF9kaWFsb2df
cHJvbXB0X3NldF90ZXh0KGRpYWxvZywga1Byb21wdERpYWxvZ1JldHVybmVkVGV4dCk7Ci0gICAg
fQotCi0gICAgc3RhdGljIGdib29sZWFuIHNjcmlwdERpYWxvZyhXZWJLaXRXZWJWaWV3KiwgV2Vi
S2l0U2NyaXB0RGlhbG9nKiBkaWFsb2csIFVJQ2xpZW50VGVzdCogdGVzdCkKLSAgICB7Ci0gICAg
ICAgIHN3aXRjaCAod2Via2l0X3NjcmlwdF9kaWFsb2dfZ2V0X2RpYWxvZ190eXBlKGRpYWxvZykp
IHsKLSAgICAgICAgY2FzZSBXRUJLSVRfU0NSSVBUX0RJQUxPR19BTEVSVDoKLSAgICAgICAgICAg
IHRlc3QtPnNjcmlwdEFsZXJ0KGRpYWxvZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBXRUJLSVRfU0NSSVBUX0RJQUxPR19DT05GSVJNOgotICAgICAgICAgICAgdGVzdC0+c2Ny
aXB0Q29uZmlybShkaWFsb2cpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV0VC
S0lUX1NDUklQVF9ESUFMT0dfUFJPTVBUOgotICAgICAgICAgICAgdGVzdC0+c2NyaXB0UHJvbXB0
KGRpYWxvZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVy
biBUUlVFOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIG1vdXNlVGFyZ2V0Q2hhbmdlZChXZWJL
aXRXZWJWaWV3KiwgV2ViS2l0SGl0VGVzdFJlc3VsdCogaGl0VGVzdFJlc3VsdCwgZ3VpbnQgbW9k
aWZpZXJzLCBVSUNsaWVudFRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICBnX2Fzc2VydChXRUJL
SVRfSVNfSElUX1RFU1RfUkVTVUxUKGhpdFRlc3RSZXN1bHQpKTsKLSAgICAgICAgdGVzdC0+YXNz
ZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChoaXRUZXN0UmVzdWx0
KSk7Ci0KLSAgICAgICAgdGVzdC0+bV9tb3VzZVRhcmdldEhpdFRlc3RSZXN1bHQgPSBoaXRUZXN0
UmVzdWx0OwotICAgICAgICB0ZXN0LT5tX21vdXNlVGFyZ2V0TW9kaWZpZXJzID0gbW9kaWZpZXJz
OwotICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOwotICAgIH0KLQot
ICAgIHN0YXRpYyBnYm9vbGVhbiBwZXJtaXNzaW9uUmVxdWVzdGVkKFdlYktpdFdlYlZpZXcqLCBX
ZWJLaXRQZXJtaXNzaW9uUmVxdWVzdCogcmVxdWVzdCwgVUlDbGllbnRUZXN0KiB0ZXN0KQotICAg
IHsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX1BFUk1JU1NJT05fUkVRVUVTVChyZXF1ZXN0
KSk7Ci0gICAgICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMo
R19PQkpFQ1QocmVxdWVzdCkpOwotCi0gICAgICAgIGlmICh0ZXN0LT5tX2FsbG93UGVybWlzc2lv
blJlcXVlc3RzKQotICAgICAgICAgICAgd2Via2l0X3Blcm1pc3Npb25fcmVxdWVzdF9hbGxvdyhy
ZXF1ZXN0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgd2Via2l0X3Blcm1pc3Npb25fcmVx
dWVzdF9kZW55KHJlcXVlc3QpOwotCi0gICAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQotICAg
IFVJQ2xpZW50VGVzdCgpCi0gICAgICAgIDogbV9zY3JpcHREaWFsb2dUeXBlKFdFQktJVF9TQ1JJ
UFRfRElBTE9HX0FMRVJUKQotICAgICAgICAsIG1fc2NyaXB0RGlhbG9nQ29uZmlybWVkKHRydWUp
Ci0gICAgICAgICwgbV9hbGxvd1Blcm1pc3Npb25SZXF1ZXN0cyhmYWxzZSkKLSAgICAgICAgLCBt
X21vdXNlVGFyZ2V0TW9kaWZpZXJzKDApCi0gICAgewotICAgICAgICB3ZWJraXRfc2V0dGluZ3Nf
c2V0X2phdmFzY3JpcHRfY2FuX29wZW5fd2luZG93c19hdXRvbWF0aWNhbGx5KHdlYmtpdF93ZWJf
dmlld19nZXRfc2V0dGluZ3MobV93ZWJWaWV3KSwgVFJVRSk7Ci0gICAgICAgIGdfc2lnbmFsX2Nv
bm5lY3QobV93ZWJWaWV3LCAiY3JlYXRlIiwgR19DQUxMQkFDSyh2aWV3Q3JlYXRlQ2FsbGJhY2sp
LCB0aGlzKTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJzY3JpcHQtZGlh
bG9nIiwgR19DQUxMQkFDSyhzY3JpcHREaWFsb2cpLCB0aGlzKTsKLSAgICAgICAgZ19zaWduYWxf
Y29ubmVjdChtX3dlYlZpZXcsICJtb3VzZS10YXJnZXQtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sobW91
c2VUYXJnZXRDaGFuZ2VkKSwgdGhpcyk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJW
aWV3LCAicGVybWlzc2lvbi1yZXF1ZXN0IiwgR19DQUxMQkFDSyhwZXJtaXNzaW9uUmVxdWVzdGVk
KSwgdGhpcyk7Ci0gICAgfQotCi0gICAgflVJQ2xpZW50VGVzdCgpCi0gICAgewotICAgICAgICBn
X3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV93ZWJWaWV3LCBHX1NJR05BTF9N
QVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKLSAgICB9Ci0KLSAgICB2b2lkIHdhaXRVbnRp
bE1haW5Mb29wRmluaXNoZXMoKQotICAgIHsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFp
bkxvb3ApOwotICAgIH0KLQotICAgIHZvaWQgc2V0RXhwZWN0ZWRXaW5kb3dQcm9wZXJ0aWVzKGNv
bnN0IFdpbmRvd1Byb3BlcnRpZXMmIHdpbmRvd1Byb3BlcnRpZXMpCi0gICAgewotICAgICAgICBt
X3dpbmRvd1Byb3BlcnRpZXMgPSB3aW5kb3dQcm9wZXJ0aWVzOwotICAgIH0KLQotICAgIFdlYktp
dEhpdFRlc3RSZXN1bHQqIG1vdmVNb3VzZUFuZFdhaXRVbnRpbE1vdXNlVGFyZ2V0Q2hhbmdlZChp
bnQgeCwgaW50IHksIHVuc2lnbmVkIG1vdXNlTW9kaWZpZXJzID0gMCkKLSAgICB7Ci0gICAgICAg
IG1vdXNlTW92ZVRvKHgsIHksIG1vdXNlTW9kaWZpZXJzKTsKLSAgICAgICAgZ19tYWluX2xvb3Bf
cnVuKG1fbWFpbkxvb3ApOwotICAgICAgICByZXR1cm4gbV9tb3VzZVRhcmdldEhpdFRlc3RSZXN1
bHQuZ2V0KCk7Ci0gICAgfQotCi0gICAgdmlydHVhbCBHdGtXaWRnZXQqIHZpZXdDcmVhdGUoV2Vi
S2l0V2ViVmlldyogd2ViVmlldykKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0KHdlYlZpZXcgPT0g
bV93ZWJWaWV3KTsKLQotICAgICAgICBHdGtXaWRnZXQqIG5ld1dlYlZpZXcgPSB3ZWJraXRfd2Vi
X3ZpZXdfbmV3X3dpdGhfY29udGV4dCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQod2ViVmll
dykpOwotICAgICAgICBnX29iamVjdF9yZWZfc2luayhuZXdXZWJWaWV3KTsKLQotICAgICAgICBt
X3dlYlZpZXdFdmVudHMuYXBwZW5kKENyZWF0ZSk7Ci0KLSAgICAgICAgV2ViS2l0V2luZG93UHJv
cGVydGllcyogd2luZG93UHJvcGVydGllcyA9IHdlYmtpdF93ZWJfdmlld19nZXRfd2luZG93X3By
b3BlcnRpZXMoV0VCS0lUX1dFQl9WSUVXKG5ld1dlYlZpZXcpKTsKLSAgICAgICAgZ19hc3NlcnQo
d2luZG93UHJvcGVydGllcyk7Ci0gICAgICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0
RmluaXNoZXMoR19PQkpFQ1Qod2luZG93UHJvcGVydGllcykpOwotICAgICAgICBtX3dpbmRvd1By
b3BlcnRpZXNDaGFuZ2VkLmNsZWFyKCk7Ci0KLSAgICAgICAgZ19zaWduYWxfY29ubmVjdCh3aW5k
b3dQcm9wZXJ0aWVzLCAibm90aWZ5IiwgR19DQUxMQkFDSyh3aW5kb3dQcm9wZXJ0aWVzTm90aWZ5
Q2FsbGJhY2spLCB0aGlzKTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChuZXdXZWJWaWV3LCAi
cmVhZHktdG8tc2hvdyIsIEdfQ0FMTEJBQ0sodmlld1JlYWR5VG9TaG93Q2FsbGJhY2spLCB0aGlz
KTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChuZXdXZWJWaWV3LCAiY2xvc2UiLCBHX0NBTExC
QUNLKHZpZXdDbG9zZUNhbGxiYWNrKSwgdGhpcyk7Ci0KLSAgICAgICAgcmV0dXJuIG5ld1dlYlZp
ZXc7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpZXdSZWFkeVRvU2hvdyhXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3KQotICAgIHsKLSAgICAgICAgZ19hc3NlcnQod2ViVmlldyAhPSBtX3dlYlZp
ZXcpOwotCi0gICAgICAgIFdlYktpdFdpbmRvd1Byb3BlcnRpZXMqIHdpbmRvd1Byb3BlcnRpZXMg
PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9wZXJ0aWVzKHdlYlZpZXcpOwotICAgICAg
ICBnX2Fzc2VydCh3aW5kb3dQcm9wZXJ0aWVzKTsKLSAgICAgICAgaWYgKCFtX3dpbmRvd1Byb3Bl
cnRpZXMuaXNOdWxsKCkpCi0gICAgICAgICAgICBXaW5kb3dQcm9wZXJ0aWVzKHdpbmRvd1Byb3Bl
cnRpZXMpLmFzc2VydEVxdWFsKG1fd2luZG93UHJvcGVydGllcyk7Ci0KLSAgICAgICAgbV93ZWJW
aWV3RXZlbnRzLmFwcGVuZChSZWFkeVRvU2hvdyk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lk
IHZpZXdDbG9zZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQotICAgIHsKLSAgICAgICAgZ19hc3Nl
cnQod2ViVmlldyAhPSBtX3dlYlZpZXcpOwotCi0gICAgICAgIG1fd2ViVmlld0V2ZW50cy5hcHBl
bmQoQ2xvc2UpOwotICAgICAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKLQotICAgICAgICBn
X21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIFZlY3RvcjxXZWJWaWV3
RXZlbnRzPiBtX3dlYlZpZXdFdmVudHM7Ci0gICAgV2ViS2l0U2NyaXB0RGlhbG9nVHlwZSBtX3Nj
cmlwdERpYWxvZ1R5cGU7Ci0gICAgYm9vbCBtX3NjcmlwdERpYWxvZ0NvbmZpcm1lZDsKLSAgICBi
b29sIG1fYWxsb3dQZXJtaXNzaW9uUmVxdWVzdHM7Ci0gICAgV2luZG93UHJvcGVydGllcyBtX3dp
bmRvd1Byb3BlcnRpZXM7Ci0gICAgSGFzaFNldDxXVEY6OlN0cmluZz4gbV93aW5kb3dQcm9wZXJ0
aWVzQ2hhbmdlZDsKLSAgICBHUmVmUHRyPFdlYktpdEhpdFRlc3RSZXN1bHQ+IG1fbW91c2VUYXJn
ZXRIaXRUZXN0UmVzdWx0OwotICAgIHVuc2lnbmVkIG1fbW91c2VUYXJnZXRNb2RpZmllcnM7Ci19
OwotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0NyZWF0ZVJlYWR5Q2xvc2UoVUlDbGllbnRUZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9k
eSBvbkxvYWQ9XCJ3aW5kb3cub3BlbigpLmNsb3NlKCk7XCI+PC9odG1sPiIsIDApOwotICAgIHRl
c3QtPndhaXRVbnRpbE1haW5Mb29wRmluaXNoZXMoKTsKLQotICAgIFZlY3RvcjxVSUNsaWVudFRl
c3Q6OldlYlZpZXdFdmVudHM+JiBldmVudHMgPSB0ZXN0LT5tX3dlYlZpZXdFdmVudHM7Ci0gICAg
Z19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAzKTsKLSAgICBnX2Fzc2VydF9jbXBp
bnQoZXZlbnRzWzBdLCA9PSwgVUlDbGllbnRUZXN0OjpDcmVhdGUpOwotICAgIGdfYXNzZXJ0X2Nt
cGludChldmVudHNbMV0sID09LCBVSUNsaWVudFRlc3Q6OlJlYWR5VG9TaG93KTsKLSAgICBnX2Fz
c2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgVUlDbGllbnRUZXN0OjpDbG9zZSk7Ci19Ci0KLXN0
YXRpYyBnYm9vbGVhbiBjaGVja01pbWVUeXBlRm9yRmlsdGVyKEd0a0ZpbGVGaWx0ZXIqIGZpbHRl
ciwgY29uc3QgZ2NoYXIqIG1pbWVUeXBlKQotewotICAgIEd0a0ZpbGVGaWx0ZXJJbmZvIGZpbHRl
ckluZm87Ci0gICAgZmlsdGVySW5mby5jb250YWlucyA9IEdUS19GSUxFX0ZJTFRFUl9NSU1FX1RZ
UEU7Ci0gICAgZmlsdGVySW5mby5taW1lX3R5cGUgPSBtaW1lVHlwZTsKLSAgICByZXR1cm4gZ3Rr
X2ZpbGVfZmlsdGVyX2ZpbHRlcihmaWx0ZXIsICZmaWx0ZXJJbmZvKTsKLX0KLQotY2xhc3MgTW9k
YWxEaWFsb2dzVGVzdDogcHVibGljIFVJQ2xpZW50VGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9H
TElCX1RFU1RfRklYVFVSRShNb2RhbERpYWxvZ3NUZXN0KTsKLQotICAgIHN0YXRpYyB2b2lkIGRp
YWxvZ1J1bkFzTW9kYWxDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBNb2RhbERpYWxv
Z3NUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgZ19hc3NlcnQod2ViVmlldyAhPSB0ZXN0LT5t
X3dlYlZpZXcpOwotICAgICAgICB0ZXN0LT5tX3dlYlZpZXdFdmVudHMuYXBwZW5kKFJ1bkFzTW9k
YWwpOwotICAgIH0KLQotICAgIEd0a1dpZGdldCogdmlld0NyZWF0ZShXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3KQotICAgIHsKLSAgICAgICAgZ19hc3NlcnQod2ViVmlldyA9PSBtX3dlYlZpZXcpOwot
Ci0gICAgICAgIEd0a1dpZGdldCogbmV3V2ViVmlldyA9IFVJQ2xpZW50VGVzdDo6dmlld0NyZWF0
ZSh3ZWJWaWV3KTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChuZXdXZWJWaWV3LCAicnVuLWFz
LW1vZGFsIiwgR19DQUxMQkFDSyhkaWFsb2dSdW5Bc01vZGFsQ2FsbGJhY2spLCB0aGlzKTsKLSAg
ICAgICAgcmV0dXJuIG5ld1dlYlZpZXc7Ci0gICAgfQotCi0gICAgdm9pZCB2aWV3UmVhZHlUb1No
b3coV2ViS2l0V2ViVmlldyogd2ViVmlldykKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0KHdlYlZp
ZXcgIT0gbV93ZWJWaWV3KTsKLSAgICAgICAgbV93ZWJWaWV3RXZlbnRzLmFwcGVuZChSZWFkeVRv
U2hvdyk7Ci0gICAgfQotfTsKLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdBbGxvd01vZGFsRGlh
bG9ncyhNb2RhbERpYWxvZ3NUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIFdlYktp
dFNldHRpbmdzKiBzZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3ModGVzdC0+
bV93ZWJWaWV3KTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2FsbG93X21vZGFsX2RpYWxvZ3Mo
c2V0dGluZ3MsIFRSVUUpOwotCi0gICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxib2R5IG9ubG9h
ZD1cIndpbmRvdy5zaG93TW9kYWxEaWFsb2coJ2RhdGE6dGV4dC9odG1sLDxodG1sPjxib2R5Lz48
c2NyaXB0PndpbmRvdy5jbG9zZSgpOzwvc2NyaXB0PjwvaHRtbD4nKVwiPjwvYm9keT48L2h0bWw+
IiwgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTWFpbkxvb3BGaW5pc2hlcygpOwotCi0gICAgVmVj
dG9yPFVJQ2xpZW50VGVzdDo6V2ViVmlld0V2ZW50cz4mIGV2ZW50cyA9IHRlc3QtPm1fd2ViVmll
d0V2ZW50czsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDQpOwotICAg
IGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBVSUNsaWVudFRlc3Q6OkNyZWF0ZSk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIFVJQ2xpZW50VGVzdDo6UmVhZHlUb1No
b3cpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBVSUNsaWVudFRlc3Q6OlJ1
bkFzTW9kYWwpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbM10sID09LCBVSUNsaWVudFRl
c3Q6OkNsb3NlKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdEaXNhbGxvd01vZGFsRGlh
bG9ncyhNb2RhbERpYWxvZ3NUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIFdlYktp
dFNldHRpbmdzKiBzZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3ModGVzdC0+
bV93ZWJWaWV3KTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2FsbG93X21vZGFsX2RpYWxvZ3Mo
c2V0dGluZ3MsIEZBTFNFKTsKLQotICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keSBvbmxv
YWQ9XCJ3aW5kb3cuc2hvd01vZGFsRGlhbG9nKCdkYXRhOnRleHQvaHRtbCw8aHRtbD48Ym9keS8+
PHNjcmlwdD53aW5kb3cuY2xvc2UoKTs8L3NjcmlwdD48L2h0bWw+JylcIj48L2JvZHk+PC9odG1s
PiIsIDApOwotICAgIC8vIFdlIG5lZWQgdG8gdXNlIGEgdGltZW91dCBoZXJlIGJlY2F1c2UgdGhl
IHZpZXdDbG9zZSgpIGZ1bmN0aW9uCi0gICAgLy8gd29uJ3QgZXZlciBiZSBjYWxsZWQgYXMgdGhl
IGRpYWxvZyB3b24ndCBiZSBjcmVhdGVkLgotICAgIHRlc3QtPndhaXQoMSk7Ci0KLSAgICBWZWN0
b3I8VUlDbGllbnRUZXN0OjpXZWJWaWV3RXZlbnRzPiYgZXZlbnRzID0gdGVzdC0+bV93ZWJWaWV3
RXZlbnRzOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgMCk7Ci19Ci0K
LXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3SmF2YVNjcmlwdERpYWxvZ3MoVUlDbGllbnRUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBodG1sT25Mb2Fk
Rm9ybWF0ID0gIjxodG1sPjxib2R5IG9uTG9hZD1cIiVzXCI+PC9ib2R5PjwvaHRtbD4iOwotICAg
IHN0YXRpYyBjb25zdCBjaGFyKiBqc0FsZXJ0Rm9ybWF0ID0gImFsZXJ0KCclcycpIjsKLSAgICBz
dGF0aWMgY29uc3QgY2hhcioganNDb25maXJtRm9ybWF0ID0gImRvIHsgY29uZmlybWVkID0gY29u
ZmlybSgnJXMnKTsgfSB3aGlsZSAoIWNvbmZpcm1lZCk7IGFsZXJ0KCdjb25maXJtZWQnKTsiOwot
ICAgIHN0YXRpYyBjb25zdCBjaGFyKiBqc1Byb21wdEZvcm1hdCA9ICJhbGVydChwcm9tcHQoJyVz
JywgJ2RlZmF1bHQnKSk7IjsKLQotICAgIHRlc3QtPm1fc2NyaXB0RGlhbG9nVHlwZSA9IFdFQktJ
VF9TQ1JJUFRfRElBTE9HX0FMRVJUOwotICAgIEdPd25QdHI8Y2hhcj4gYWxlcnREaWFsb2dNZXNz
YWdlKGdfc3RyZHVwX3ByaW50Zihqc0FsZXJ0Rm9ybWF0LCBrQWxlcnREaWFsb2dNZXNzYWdlKSk7
Ci0gICAgR093blB0cjxjaGFyPiBhbGVydEhUTUwoZ19zdHJkdXBfcHJpbnRmKGh0bWxPbkxvYWRG
b3JtYXQsIGFsZXJ0RGlhbG9nTWVzc2FnZS5nZXQoKSkpOwotICAgIHRlc3QtPmxvYWRIdG1sKGFs
ZXJ0SFRNTC5nZXQoKSwgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTWFpbkxvb3BGaW5pc2hlcygp
OwotCi0gICAgdGVzdC0+bV9zY3JpcHREaWFsb2dUeXBlID0gV0VCS0lUX1NDUklQVF9ESUFMT0df
Q09ORklSTTsKLSAgICBHT3duUHRyPGNoYXI+IGNvbmZpcm1EaWFsb2dNZXNzYWdlKGdfc3RyZHVw
X3ByaW50Zihqc0NvbmZpcm1Gb3JtYXQsIGtDb25maXJtRGlhbG9nTWVzc2FnZSkpOwotICAgIEdP
d25QdHI8Y2hhcj4gY29uZmlybUhUTUwoZ19zdHJkdXBfcHJpbnRmKGh0bWxPbkxvYWRGb3JtYXQs
IGNvbmZpcm1EaWFsb2dNZXNzYWdlLmdldCgpKSk7Ci0gICAgdGVzdC0+bG9hZEh0bWwoY29uZmly
bUhUTUwuZ2V0KCksIDApOwotICAgIHRlc3QtPndhaXRVbnRpbE1haW5Mb29wRmluaXNoZXMoKTsK
LQotICAgIHRlc3QtPm1fc2NyaXB0RGlhbG9nVHlwZSA9IFdFQktJVF9TQ1JJUFRfRElBTE9HX1BS
T01QVDsKLSAgICBHT3duUHRyPGNoYXI+IHByb21wdERpYWxvZ01lc3NhZ2UoZ19zdHJkdXBfcHJp
bnRmKGpzUHJvbXB0Rm9ybWF0LCBrUHJvbXB0RGlhbG9nTWVzc2FnZSkpOwotICAgIEdPd25QdHI8
Y2hhcj4gcHJvbXB0SFRNTChnX3N0cmR1cF9wcmludGYoaHRtbE9uTG9hZEZvcm1hdCwgcHJvbXB0
RGlhbG9nTWVzc2FnZS5nZXQoKSkpOwotICAgIHRlc3QtPmxvYWRIdG1sKHByb21wdEhUTUwuZ2V0
KCksIDApOwotICAgIHRlc3QtPndhaXRVbnRpbE1haW5Mb29wRmluaXNoZXMoKTsKLX0KLQotc3Rh
dGljIHZvaWQgdGVzdFdlYlZpZXdXaW5kb3dQcm9wZXJ0aWVzKFVJQ2xpZW50VGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKLXsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogd2luZG93UHJvcnBlcnRp
ZXNTdHJpbmcgPSAibGVmdD0xMDAsdG9wPTE1MCx3aWR0aD00MDAsaGVpZ2h0PTQwMCxsb2NhdGlv
bj1ubyxtZW51YmFyPW5vLHN0YXR1cz1ubyx0b29sYmFyPW5vLHNjcm9sbGJhcnM9bm8iOwotICAg
IEdka1JlY3RhbmdsZSBnZW9tZXRyeSA9IHsgMTAwLCAxNTAsIDQwMCwgNDAwIH07Ci0gICAgdGVz
dC0+c2V0RXhwZWN0ZWRXaW5kb3dQcm9wZXJ0aWVzKFVJQ2xpZW50VGVzdDo6V2luZG93UHJvcGVy
dGllcygmZ2VvbWV0cnksIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwg
ZmFsc2UpKTsKLQotICAgIEdPd25QdHI8Y2hhcj4gaHRtbFN0cmluZyhnX3N0cmR1cF9wcmludGYo
IjxodG1sPjxib2R5IG9uTG9hZD1cIndpbmRvdy5vcGVuKCcnLCAnJywgJyVzJykuY2xvc2UoKTtc
Ij48L2JvZHk+PC9odG1sPiIsIHdpbmRvd1Byb3JwZXJ0aWVzU3RyaW5nKSk7Ci0gICAgdGVzdC0+
bG9hZEh0bWwoaHRtbFN0cmluZy5nZXQoKSwgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTWFpbkxv
b3BGaW5pc2hlcygpOwotCi0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHByb3BlcnRpZXNDaGFuZ2Vk
W10gPSB7Ci0gICAgICAgICJnZW9tZXRyeSIsICJsb2NhdGlvbmJhci12aXNpYmxlIiwgIm1lbnVi
YXItdmlzaWJsZSIsICJzdGF0dXNiYXItdmlzaWJsZSIsICJ0b29sYmFyLXZpc2libGUiLCAic2Ny
b2xsYmFycy12aXNpYmxlIgotICAgIH07Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBHX05f
RUxFTUVOVFMocHJvcGVydGllc0NoYW5nZWQpOyArK2kpCi0gICAgICAgIGdfYXNzZXJ0KHRlc3Qt
Pm1fd2luZG93UHJvcGVydGllc0NoYW5nZWQuY29udGFpbnMocHJvcGVydGllc0NoYW5nZWRbaV0p
KTsKLQotICAgIFZlY3RvcjxVSUNsaWVudFRlc3Q6OldlYlZpZXdFdmVudHM+JiBldmVudHMgPSB0
ZXN0LT5tX3dlYlZpZXdFdmVudHM7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCks
ID09LCAzKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgVUlDbGllbnRUZXN0
OjpDcmVhdGUpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBVSUNsaWVudFRl
c3Q6OlJlYWR5VG9TaG93KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgVUlD
bGllbnRUZXN0OjpDbG9zZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3TW91c2VUYXJn
ZXQoVUlDbGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPnNob3dJ
bldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZChHVEtfV0lORE9XX1RPUExFVkVMKTsKLQotICAgIGNv
bnN0IGNoYXIqIGxpbmtzSG92ZXJlZEhUTUwgPQotICAgICAgICAiPGh0bWw+PGJvZHk+IgotICAg
ICAgICAiIDxhIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6MScgaHJlZj0n
aHR0cDovL3d3dy53ZWJraXRndGsub3JnJyB0aXRsZT0nV2ViS2l0R1RLKyBUaXRsZSc+V2ViS2l0
R1RLKyBXZWJzaXRlPC9hPiIKLSAgICAgICAgIiA8aW1nIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0
ZTsgbGVmdDoxOyB0b3A6MTAnIHNyYz0nMHhkZWFkYmVlZicgd2lkdGg9NSBoZWlnaHQ9NT48L2lt
Zz4iCi0gICAgICAgICIgPGEgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRvcDoy
MCcgaHJlZj0naHR0cDovL3d3dy53ZWJraXRndGsub3JnL2xvZ28nIHRpdGxlPSdXZWJLaXRHVEsr
IExvZ28nPjxpbWcgc3JjPScweGRlYWRiZWVmJyB3aWR0aD01IGhlaWdodD01PjwvaW1nPjwvYT4i
Ci0gICAgICAgICIgPGlucHV0IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6
MzAnIHNpemU9JzEwJz48L2lucHV0PiIKLSAgICAgICAgIiA8ZGl2IHN0eWxlPSdwb3NpdGlvbjph
YnNvbHV0ZTsgbGVmdDoxOyB0b3A6NTA7IHdpZHRoOjMwOyBoZWlnaHQ6MzA7IG92ZXJmbG93OnNj
cm9sbCc+Jm5ic3A7PC9kaXY+IgotICAgICAgICAiIDx2aWRlbyBzdHlsZT0ncG9zaXRpb246YWJz
b2x1dGU7IGxlZnQ6MTsgdG9wOjEwMCcgd2lkdGg9JzMwMCcgaGVpZ2h0PSczMDAnIGNvbnRyb2xz
PSdjb250cm9scycgcHJlbG9hZD0nbm9uZSc+PHNvdXJjZSBzcmM9J21vdmllLm9nZycgdHlwZT0n
dmlkZW8vb2dnJyAvPjwvdmlkZW8+IgotICAgICAgICAiPC9ib2R5PjwvaHRtbD4iOwotCi0gICAg
dGVzdC0+bG9hZEh0bWwobGlua3NIb3ZlcmVkSFRNTCwgImZpbGU6Ly8vIik7Ci0gICAgdGVzdC0+
d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICAvLyBNb3ZlIG92ZXIgbGluay4KLSAgICBX
ZWJLaXRIaXRUZXN0UmVzdWx0KiBoaXRUZXN0UmVzdWx0ID0gdGVzdC0+bW92ZU1vdXNlQW5kV2Fp
dFVudGlsTW91c2VUYXJnZXRDaGFuZ2VkKDEsIDEpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRf
dGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2Vy
dCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQp
KTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlh
KGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9j
b250ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIo
d2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfbGlua191cmkoaGl0VGVzdFJlc3VsdCksID09LCAi
aHR0cDovL3d3dy53ZWJraXRndGsub3JnLyIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRf
aGl0X3Rlc3RfcmVzdWx0X2dldF9saW5rX3RpdGxlKGhpdFRlc3RSZXN1bHQpLCA9PSwgIldlYktp
dEdUSysgVGl0bGUiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2hpdF90ZXN0X3Jlc3Vs
dF9nZXRfbGlua19sYWJlbChoaXRUZXN0UmVzdWx0KSwgPT0sICJXZWJLaXRHVEsrIFdlYnNpdGUi
KTsKLSAgICBnX2Fzc2VydCghdGVzdC0+bV9tb3VzZVRhcmdldE1vZGlmaWVycyk7Ci0KLSAgICAv
LyBNb3ZlIG91dCBvZiB0aGUgbGluay4KLSAgICBoaXRUZXN0UmVzdWx0ID0gdGVzdC0+bW92ZU1v
dXNlQW5kV2FpdFVudGlsTW91c2VUYXJnZXRDaGFuZ2VkKDAsIDApOwotICAgIGdfYXNzZXJ0KCF3
ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluayhoaXRUZXN0UmVzdWx0KSk7Ci0g
ICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFnZShoaXRU
ZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4
dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVz
dF9yZXN1bHRfY29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3Nl
cnQoIXRlc3QtPm1fbW91c2VUYXJnZXRNb2RpZmllcnMpOwotCi0gICAgLy8gTW92ZSBvdmVyIGlt
YWdlIHdpdGggR0RLX0NPTlRST0xfTUFTSy4KLSAgICBoaXRUZXN0UmVzdWx0ID0gdGVzdC0+bW92
ZU1vdXNlQW5kV2FpdFVudGlsTW91c2VUYXJnZXRDaGFuZ2VkKDEsIDEwLCBHREtfQ09OVFJPTF9N
QVNLKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xp
bmsoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRf
Y29udGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9o
aXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19h
c3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0
UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9p
c19zY3JvbGxiYXIoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRf
aGl0X3Rlc3RfcmVzdWx0X2dldF9pbWFnZV91cmkoaGl0VGVzdFJlc3VsdCksID09LCAiZmlsZTov
Ly8weGRlYWRiZWVmIik7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV9tb3VzZVRhcmdldE1vZGlmaWVy
cyAmIEdES19DT05UUk9MX01BU0spOwotCi0gICAgLy8gTW92ZSBvdmVyIGltYWdlIGxpbmsuCi0g
ICAgaGl0VGVzdFJlc3VsdCA9IHRlc3QtPm1vdmVNb3VzZUFuZFdhaXRVbnRpbE1vdXNlVGFyZ2V0
Q2hhbmdlZCgxLCAyMCk7Ci0gICAgZ19hc3NlcnQod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250
ZXh0X2lzX2xpbmsoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVz
dF9yZXN1bHRfY29udGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQo
IXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7
Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19lZGl0YWJs
ZShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRf
Y29udGV4dF9pc19zY3JvbGxiYXIoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0X2NtcHN0
cih3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9saW5rX3VyaShoaXRUZXN0UmVzdWx0KSwgPT0s
ICJodHRwOi8vd3d3LndlYmtpdGd0ay5vcmcvbG9nbyIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3
ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9pbWFnZV91cmkoaGl0VGVzdFJlc3VsdCksID09LCAi
ZmlsZTovLy8weGRlYWRiZWVmIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9oaXRfdGVz
dF9yZXN1bHRfZ2V0X2xpbmtfdGl0bGUoaGl0VGVzdFJlc3VsdCksID09LCAiV2ViS2l0R1RLKyBM
b2dvIik7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2xpbmtfbGFi
ZWwoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX21vdXNlVGFyZ2V0TW9k
aWZpZXJzKTsKLQotICAgIC8vIE1vdmUgb3ZlciBtZWRpYS4KLSAgICBoaXRUZXN0UmVzdWx0ID0g
dGVzdC0+bW92ZU1vdXNlQW5kV2FpdFVudGlsTW91c2VUYXJnZXRDaGFuZ2VkKDEsIDEwMCk7Ci0g
ICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhpdFRl
c3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0
X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3Rf
cmVzdWx0X2NvbnRleHRfaXNfbWVkaWEoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0KCF3
ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkp
OwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfc2Nyb2xs
YmFyKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2hpdF90ZXN0
X3Jlc3VsdF9nZXRfbWVkaWFfdXJpKGhpdFRlc3RSZXN1bHQpLCA9PSwgImZpbGU6Ly8vbW92aWUu
b2dnIik7Ci0gICAgZ19hc3NlcnQoIXRlc3QtPm1fbW91c2VUYXJnZXRNb2RpZmllcnMpOwotCi0g
ICAgLy8gTW92ZXIgb3ZlciBpbnB1dC4KLSAgICBoaXRUZXN0UmVzdWx0ID0gdGVzdC0+bW92ZU1v
dXNlQW5kV2FpdFVudGlsTW91c2VUYXJnZXRDaGFuZ2VkKDUsIDM1KTsKLSAgICBnX2Fzc2VydCgh
d2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xpbmsoaGl0VGVzdFJlc3VsdCkpOwot
ICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0
VGVzdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRl
eHRfaXNfbWVkaWEoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rl
c3RfcmVzdWx0X2NvbnRleHRfaXNfc2Nyb2xsYmFyKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fz
c2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfZWRpdGFibGUoaGl0VGVzdFJl
c3VsdCkpOwotICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX21vdXNlVGFyZ2V0TW9kaWZpZXJzKTsKLQot
ICAgIC8vIE1vdmUgb3ZlciBzY3JvbGxiYXIuCi0gICAgaGl0VGVzdFJlc3VsdCA9IHRlc3QtPm1v
dmVNb3VzZUFuZFdhaXRVbnRpbE1vdXNlVGFyZ2V0Q2hhbmdlZCg1LCA3NSk7Ci0gICAgZ19hc3Nl
cnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RSZXN1bHQp
KTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdl
KGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9j
b250ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2hp
dF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBn
X2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfc2Nyb2xsYmFyKGhpdFRl
c3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCghdGVzdC0+bV9tb3VzZVRhcmdldE1vZGlmaWVycyk7
Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3UGVybWlzc2lvblJlcXVlc3RzKFVJQ2xpZW50
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICAvLyBTb21lIHZlcnNpb25zIG9mIGdl
b2NsdWUgZ2l2ZSBhIHJ1bnRpbWUgd2FybmluZyBiZWNhdXNlIGl0IHRyaWVzCi0gICAgLy8gdG8g
cmVnaXN0ZXIgdGhlIGVycm9yIHF1YXJrIHR3aWNlLiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTg5ODU4LgotICAgIC8vIE1ha2Ugd2FybmluZ3Mgbm9uLWZhdGFs
IGZvciB0aGlzIHRlc3QgdG8gbWFrZSBpdCBwYXNzLgotICAgIHRlc3QtPnJlbW92ZUxvZ0ZhdGFs
RmxhZyhHX0xPR19MRVZFTF9XQVJOSU5HKTsKLSAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0
VW50aWxNYXBwZWQoKTsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogZ2VvbG9jYXRpb25SZXF1ZXN0
SFRNTCA9Ci0gICAgICAgICI8aHRtbD4iCi0gICAgICAgICIgIDxzY3JpcHQ+IgotICAgICAgICAi
ICBmdW5jdGlvbiBydW5UZXN0KCkiCi0gICAgICAgICIgIHsiCi0gICAgICAgICIgICAgbmF2aWdh
dG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihmdW5jdGlvbihwKSB7IGRvY3VtZW50
LnRpdGxlID0gXCJPS1wiIH0sIgotICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oZSkgeyBkb2N1bWVudC50aXRsZSA9IGUuY29kZSB9
KTsiCi0gICAgICAgICIgIH0iCi0gICAgICAgICIgIDwvc2NyaXB0PiIKLSAgICAgICAgIiAgPGJv
ZHkgb25sb2FkPSdydW5UZXN0KCk7Jz48L2JvZHk+IgotICAgICAgICAiPC9odG1sPiI7Ci0KLSAg
ICAvLyBUZXN0IGRlbnlpbmcgYSBwZXJtaXNzaW9uIHJlcXVlc3QuCi0gICAgdGVzdC0+bV9hbGxv
d1Blcm1pc3Npb25SZXF1ZXN0cyA9IGZhbHNlOwotICAgIHRlc3QtPmxvYWRIdG1sKGdlb2xvY2F0
aW9uUmVxdWVzdEhUTUwsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbFRpdGxlQ2hhbmdlZCgpOwot
Ci0gICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBHZW9sb2NhdGlvbiBBUEkgc3BlY2lmaWNhdGlvbiwg
JzEnIGlzIHRoZQotICAgIC8vIGVycm9yIGNvZGUgcmV0dXJuZWQgZm9yIHRoZSBQRVJNSVNTSU9O
X0RFTklFRCBlcnJvci4KLSAgICAvLyBodHRwOi8vZGV2LnczLm9yZy9nZW8vYXBpL3NwZWMtc291
cmNlLmh0bWwjcG9zaXRpb25fZXJyb3JfaW50ZXJmYWNlCi0gICAgY29uc3QgZ2NoYXIqIHJlc3Vs
dCA9IHdlYmtpdF93ZWJfdmlld19nZXRfdGl0bGUodGVzdC0+bV93ZWJWaWV3KTsKLSAgICBnX2Fz
c2VydF9jbXBzdHIocmVzdWx0LCA9PSwgIjEiKTsKLQotICAgIC8vIFRlc3QgYWxsb3dpbmcgYSBw
ZXJtaXNzaW9uIHJlcXVlc3QuCi0gICAgdGVzdC0+bV9hbGxvd1Blcm1pc3Npb25SZXF1ZXN0cyA9
IHRydWU7Ci0gICAgdGVzdC0+bG9hZEh0bWwoZ2VvbG9jYXRpb25SZXF1ZXN0SFRNTCwgMCk7Ci0g
ICAgdGVzdC0+d2FpdFVudGlsVGl0bGVDaGFuZ2VkKCk7Ci0KLSAgICAvLyBDaGVjayB0aGF0IHdl
IGRpZCBub3QgZ2V0IHRoZSBQRVJNSVNTSU9OX0RFTklFRCBlcnJvciBub3cuCi0gICAgcmVzdWx0
ID0gd2Via2l0X3dlYl92aWV3X2dldF90aXRsZSh0ZXN0LT5tX3dlYlZpZXcpOwotICAgIGdfYXNz
ZXJ0X2NtcHN0cihyZXN1bHQsICE9LCAiMSIpOwotICAgIHRlc3QtPmFkZExvZ0ZhdGFsRmxhZyhH
X0xPR19MRVZFTF9XQVJOSU5HKTsKLX0KLQotY2xhc3MgRmlsZUNob29zZXJUZXN0OiBwdWJsaWMg
VUlDbGllbnRUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKEZpbGVD
aG9vc2VyVGVzdCk7Ci0KLSAgICBGaWxlQ2hvb3NlclRlc3QoKQotICAgIHsKLSAgICAgICAgZ19z
aWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJydW4tZmlsZS1jaG9vc2VyIiwgR19DQUxMQkFDSyhy
dW5GaWxlQ2hvb3NlckNhbGxiYWNrKSwgdGhpcyk7Ci0gICAgfQotCi0gICAgc3RhdGljIGdib29s
ZWFuIHJ1bkZpbGVDaG9vc2VyQ2FsbGJhY2soV2ViS2l0V2ViVmlldyosIFdlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdCogcmVxdWVzdCwgRmlsZUNob29zZXJUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAg
ICAgdGVzdC0+cnVuRmlsZUNob29zZXIocmVxdWVzdCk7Ci0gICAgICAgIHJldHVybiBUUlVFOwot
ICAgIH0KLQotICAgIHZvaWQgcnVuRmlsZUNob29zZXIoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
KiByZXF1ZXN0KQotICAgIHsKLSAgICAgICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RG
aW5pc2hlcyhHX09CSkVDVChyZXF1ZXN0KSk7Ci0gICAgICAgIG1fZmlsZUNob29zZXJSZXF1ZXN0
ID0gcmVxdWVzdDsKLSAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX21haW5Mb29wKTsKLSAgICB9
Ci0KLSAgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIGNsaWNrTW91c2VCdXR0b25BbmRXYWl0
Rm9yRmlsZUNob29zZXJSZXF1ZXN0KGludCB4LCBpbnQgeSkKLSAgICB7Ci0gICAgICAgIGNsaWNr
TW91c2VCdXR0b24oeCwgeSk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsK
LSAgICAgICAgcmV0dXJuIG1fZmlsZUNob29zZXJSZXF1ZXN0LmdldCgpOwotICAgIH0KLQotcHJp
dmF0ZToKLSAgICBHUmVmUHRyPFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdD4gbV9maWxlQ2hvb3Nl
clJlcXVlc3Q7Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0ZpbGVDaG9vc2VyUmVxdWVz
dChGaWxlQ2hvb3NlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+c2hv
d0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGZp
bGVDaG9vc2VySFRNTEZvcm1hdCA9ICI8aHRtbD48Ym9keT48aW5wdXQgc3R5bGU9J3Bvc2l0aW9u
OmFic29sdXRlO2xlZnQ6MDt0b3A6MDttYXJnaW46MDtwYWRkaW5nOjAnIHR5cGU9J2ZpbGUnICVz
Lz48L2JvZHk+PC9odG1sPiI7Ci0KLSAgICAvLyBNdWx0aXBsZSBzZWxlY3Rpb25zIG5vdCBhbGxv
d2VkLCBubyBNSU1FIGZpbHRlcmluZy4KLSAgICBHT3duUHRyPGNoYXI+IHNpbXBsZUZpbGVVcGxv
YWRIVE1MKGdfc3RyZHVwX3ByaW50ZihmaWxlQ2hvb3NlckhUTUxGb3JtYXQsICIiKSk7Ci0gICAg
dGVzdC0+bG9hZEh0bWwoc2ltcGxlRmlsZVVwbG9hZEhUTUwuZ2V0KCksIDApOwotICAgIHRlc3Qt
PndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCog
ZmlsZUNob29zZXJSZXF1ZXN0ID0gdGVzdC0+Y2xpY2tNb3VzZUJ1dHRvbkFuZFdhaXRGb3JGaWxl
Q2hvb3NlclJlcXVlc3QoNSwgNSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9maWxlX2Nob29zZXJf
cmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxlKGZpbGVDaG9vc2VyUmVxdWVzdCkpOwotCi0gICAg
Y29uc3QgZ2NoYXIqIGNvbnN0KiBtaW1lVHlwZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVl
c3RfZ2V0X21pbWVfdHlwZXMoZmlsZUNob29zZXJSZXF1ZXN0KTsKLSAgICBnX2Fzc2VydCghbWlt
ZVR5cGVzKTsKLSAgICBHdGtGaWxlRmlsdGVyKiBmaWx0ZXIgPSB3ZWJraXRfZmlsZV9jaG9vc2Vy
X3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyKGZpbGVDaG9vc2VyUmVxdWVzdCk7Ci0gICAg
Z19hc3NlcnQoIWZpbHRlcik7Ci0gICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBzZWxlY3RlZEZpbGVz
ID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhmaWxlQ2hv
b3NlclJlcXVlc3QpOwotICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZpbGVzKTsKLSAgICB3ZWJraXRf
ZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2FuY2VsKGZpbGVDaG9vc2VyUmVxdWVzdCk7Ci0KLSAgICAv
LyBNdWx0aXBsZSBzZWxlY3Rpb25zIGFsbG93ZWQsIG5vIE1JTUUgZmlsdGVyaW5nLCBzb21lIHBy
ZS1zZWxlY3RlZCBmaWxlcy4KLSAgICBHT3duUHRyPGNoYXI+IG11bHRpcGxlU2VsZWN0aW9uRmls
ZVVwbG9hZEhUTUwoZ19zdHJkdXBfcHJpbnRmKGZpbGVDaG9vc2VySFRNTEZvcm1hdCwgIm11bHRp
cGxlIikpOwotICAgIHRlc3QtPmxvYWRIdG1sKG11bHRpcGxlU2VsZWN0aW9uRmlsZVVwbG9hZEhU
TUwuZ2V0KCksIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGZp
bGVDaG9vc2VyUmVxdWVzdCA9IHRlc3QtPmNsaWNrTW91c2VCdXR0b25BbmRXYWl0Rm9yRmlsZUNo
b29zZXJSZXF1ZXN0KDUsIDUpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9maWxlX2Nob29zZXJfcmVx
dWVzdF9nZXRfc2VsZWN0X211bHRpcGxlKGZpbGVDaG9vc2VyUmVxdWVzdCkpOwotCi0gICAgbWlt
ZVR5cGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKGZpbGVD
aG9vc2VyUmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQoIW1pbWVUeXBlcyk7Ci0gICAgZmlsdGVyID0g
d2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcihmaWxlQ2hv
b3NlclJlcXVlc3QpOwotICAgIGdfYXNzZXJ0KCFmaWx0ZXIpOwotICAgIHNlbGVjdGVkRmlsZXMg
PSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKGZpbGVDaG9v
c2VyUmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQoIXNlbGVjdGVkRmlsZXMpOwotCi0gICAgLy8gU2Vs
ZWN0IHNvbWUgZmlsZXMuCi0gICAgY29uc3QgZ2NoYXIqIGZpbGVzVG9TZWxlY3RbNF0gPSB7ICIv
Zm9vIiwgIi9mb28vYmFyIiwgIi9mb28vYmFyL2JheiIsIDAgfTsKLSAgICB3ZWJraXRfZmlsZV9j
aG9vc2VyX3JlcXVlc3Rfc2VsZWN0X2ZpbGVzKGZpbGVDaG9vc2VyUmVxdWVzdCwgZmlsZXNUb1Nl
bGVjdCk7Ci0KLSAgICAvLyBDaGVjayB0aGUgZmlsZXMgdGhhdCBoYXZlIGJlZW4ganVzdCBzZWxl
Y3RlZC4KLSAgICBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dl
dF9zZWxlY3RlZF9maWxlcyhmaWxlQ2hvb3NlclJlcXVlc3QpOwotICAgIGdfYXNzZXJ0KHNlbGVj
dGVkRmlsZXMpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzBdLCA9PSwgIi9m
b28iKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1sxXSwgPT0sICIvZm9vL2Jh
ciIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzJdLCA9PSwgIi9mb28vYmFy
L2JheiIpOwotICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZpbGVzWzNdKTsKLQotICAgIC8vIFBlcmZv
cm0gYW5vdGhlciByZXF1ZXN0IHRvIGNoZWNrIGlmIHRoZSBsaXN0IG9mIGZpbGVzIHNlbGVjdGVk
Ci0gICAgLy8gaW4gdGhlIHByZXZpb3VzIHN0ZXAgYXBwZWFycyBub3cgYXMgcGFydCBvZiB0aGUg
bmV3IHJlcXVlc3QuCi0gICAgZmlsZUNob29zZXJSZXF1ZXN0ID0gdGVzdC0+Y2xpY2tNb3VzZUJ1
dHRvbkFuZFdhaXRGb3JGaWxlQ2hvb3NlclJlcXVlc3QoNSwgNSk7Ci0gICAgc2VsZWN0ZWRGaWxl
cyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMoZmlsZUNo
b29zZXJSZXF1ZXN0KTsKLSAgICBnX2Fzc2VydChzZWxlY3RlZEZpbGVzKTsKLSAgICBnX2Fzc2Vy
dF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1swXSwgPT0sICIvZm9vIik7Ci0gICAgZ19hc3NlcnRfY21w
c3RyKHNlbGVjdGVkRmlsZXNbMV0sID09LCAiL2Zvby9iYXIiKTsKLSAgICBnX2Fzc2VydF9jbXBz
dHIoc2VsZWN0ZWRGaWxlc1syXSwgPT0sICIvZm9vL2Jhci9iYXoiKTsKLSAgICBnX2Fzc2VydCgh
c2VsZWN0ZWRGaWxlc1szXSk7Ci0gICAgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNl
bChmaWxlQ2hvb3NlclJlcXVlc3QpOwotCi0gICAgLy8gTXVsdGlwbGUgc2VsZWN0aW9ucyBub3Qg
YWxsb3dlZCwgb25seSBhY2NlcHQgaW1hZ2VzLCBhdWRpbyBhbmQgdmlkZW8gZmlsZXMuLgotICAg
IEdPd25QdHI8Y2hhcj4gbWltZUZpbHRlcmVkRmlsZVVwbG9hZEhUTUwoZ19zdHJkdXBfcHJpbnRm
KGZpbGVDaG9vc2VySFRNTEZvcm1hdCwgImFjY2VwdD0nYXVkaW8vKix2aWRlby8qLGltYWdlLyon
IikpOwotICAgIHRlc3QtPmxvYWRIdG1sKG1pbWVGaWx0ZXJlZEZpbGVVcGxvYWRIVE1MLmdldCgp
LCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBmaWxlQ2hvb3Nl
clJlcXVlc3QgPSB0ZXN0LT5jbGlja01vdXNlQnV0dG9uQW5kV2FpdEZvckZpbGVDaG9vc2VyUmVx
dWVzdCg1LCA1KTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dl
dF9zZWxlY3RfbXVsdGlwbGUoZmlsZUNob29zZXJSZXF1ZXN0KSk7Ci0KLSAgICBtaW1lVHlwZXMg
PSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMoZmlsZUNob29zZXJS
ZXF1ZXN0KTsKLSAgICBnX2Fzc2VydChtaW1lVHlwZXMpOwotICAgIGdfYXNzZXJ0X2NtcHN0ciht
aW1lVHlwZXNbMF0sID09LCAiYXVkaW8vKiIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihtaW1lVHlw
ZXNbMV0sID09LCAidmlkZW8vKiIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihtaW1lVHlwZXNbMl0s
ID09LCAiaW1hZ2UvKiIpOwotICAgIGdfYXNzZXJ0KCFtaW1lVHlwZXNbM10pOwotCi0gICAgZmls
dGVyID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcihm
aWxlQ2hvb3NlclJlcXVlc3QpOwotICAgIGdfYXNzZXJ0KEdUS19JU19GSUxFX0ZJTFRFUihmaWx0
ZXIpKTsKLSAgICBnX2Fzc2VydChjaGVja01pbWVUeXBlRm9yRmlsdGVyKGZpbHRlciwgImF1ZGlv
LyoiKSk7Ci0gICAgZ19hc3NlcnQoY2hlY2tNaW1lVHlwZUZvckZpbHRlcihmaWx0ZXIsICJ2aWRl
by8qIikpOwotICAgIGdfYXNzZXJ0KGNoZWNrTWltZVR5cGVGb3JGaWx0ZXIoZmlsdGVyLCAiaW1h
Z2UvKiIpKTsKLQotICAgIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVl
c3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKGZpbGVDaG9vc2VyUmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQo
IXNlbGVjdGVkRmlsZXMpOwotICAgIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9jYW5jZWwo
ZmlsZUNob29zZXJSZXF1ZXN0KTsKLX0KLQotdm9pZCBiZWZvcmVBbGwoKQotewotICAgIFVJQ2xp
ZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImNyZWF0ZS1yZWFkeS1jbG9zZSIsIHRlc3RX
ZWJWaWV3Q3JlYXRlUmVhZHlDbG9zZSk7Ci0gICAgTW9kYWxEaWFsb2dzVGVzdDo6YWRkKCJXZWJL
aXRXZWJWaWV3IiwgImFsbG93LW1vZGFsLWRpYWxvZ3MiLCB0ZXN0V2ViVmlld0FsbG93TW9kYWxE
aWFsb2dzKTsKLSAgICBNb2RhbERpYWxvZ3NUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiZGlz
YWxsb3ctbW9kYWwtZGlhbG9ncyIsIHRlc3RXZWJWaWV3RGlzYWxsb3dNb2RhbERpYWxvZ3MpOwot
ICAgIFVJQ2xpZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImphdmFzY3JpcHQtZGlhbG9n
cyIsIHRlc3RXZWJWaWV3SmF2YVNjcmlwdERpYWxvZ3MpOwotICAgIFVJQ2xpZW50VGVzdDo6YWRk
KCJXZWJLaXRXZWJWaWV3IiwgIndpbmRvdy1wcm9wZXJ0aWVzIiwgdGVzdFdlYlZpZXdXaW5kb3dQ
cm9wZXJ0aWVzKTsKLSAgICBVSUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJtb3Vz
ZS10YXJnZXQiLCB0ZXN0V2ViVmlld01vdXNlVGFyZ2V0KTsKLSAgICBVSUNsaWVudFRlc3Q6OmFk
ZCgiV2ViS2l0V2ViVmlldyIsICJwZXJtaXNzaW9uLXJlcXVlc3RzIiwgdGVzdFdlYlZpZXdQZXJt
aXNzaW9uUmVxdWVzdHMpOwotICAgIEZpbGVDaG9vc2VyVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3
IiwgImZpbGUtY2hvb3Nlci1yZXF1ZXN0IiwgdGVzdFdlYlZpZXdGaWxlQ2hvb3NlclJlcXVlc3Qp
OwotfQotCi12b2lkIGFmdGVyQWxsKCkKLXsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJFeHRlbnNpb25zLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJFeHRlbnNpb25zLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTFjYjdhYS4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViRXh0ZW5zaW9ucy5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwxOTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJ
Z2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLDEgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiV2ViS2l0VGVzdEJ1
cy5oIgotI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCi0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1Jl
ZlB0ci5oPgotCi1zdGF0aWMgV2ViS2l0VGVzdEJ1cyogYnVzOwotCi1zdGF0aWMgdm9pZCB0ZXN0
V2ViRXh0ZW5zaW9uR2V0VGl0bGUoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17
Ci0gICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxoZWFkPjx0aXRsZT5XZWJLaXRHVEsrIFdlYiBF
eHRlbnNpb25zIFRlc3Q8L3RpdGxlPjwvaGVhZD48Ym9keT48L2JvZHk+PC9odG1sPiIsIDApOwot
ICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgR1JlZlB0cjxHREJ1c1By
b3h5PiBwcm94eSA9IGFkb3B0R1JlZihidXMtPmNyZWF0ZVByb3h5KCJvcmcud2Via2l0Lmd0ay5X
ZWJFeHRlbnNpb25UZXN0IiwKLSAgICAgICAgIi9vcmcvd2Via2l0L2d0ay9XZWJFeHRlbnNpb25U
ZXN0IiAsICJvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwgdGVzdC0+bV9tYWluTG9v
cCkpOwotICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHJlc3VsdCA9IGFkb3B0R1JlZihnX2RidXNfcHJv
eHlfY2FsbF9zeW5jKAotICAgICAgICBwcm94eS5nZXQoKSwKLSAgICAgICAgIkdldFRpdGxlIiwK
LSAgICAgICAgZ192YXJpYW50X25ldygiKHQpIiwgd2Via2l0X3dlYl92aWV3X2dldF9wYWdlX2lk
KHRlc3QtPm1fd2ViVmlldykpLAotICAgICAgICBHX0RCVVNfQ0FMTF9GTEFHU19OT05FLAotICAg
ICAgICAtMSwgMCwgMCkpOwotICAgIGdfYXNzZXJ0KHJlc3VsdCk7Ci0KLSAgICBjb25zdCBjaGFy
KiB0aXRsZTsKLSAgICBnX3ZhcmlhbnRfZ2V0KHJlc3VsdC5nZXQoKSwgIigmcykiLCAmdGl0bGUp
OwotICAgIGdfYXNzZXJ0X2NtcHN0cih0aXRsZSwgPT0sICJXZWJLaXRHVEsrIFdlYiBFeHRlbnNp
b25zIFRlc3QiKTsKLX0KLQotc3RhdGljIHZvaWQgZG9jdW1lbnRMb2FkZWRDYWxsYmFjayhHREJ1
c0Nvbm5lY3Rpb24qLCBjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBjb25z
dCBjaGFyKiwgR1ZhcmlhbnQqLCBXZWJWaWV3VGVzdCogdGVzdCkKLXsKLSAgICBnX21haW5fbG9v
cF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0RG9jdW1lbnRM
b2FkZWRTaWduYWwoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgR1Jl
ZlB0cjxHREJ1c1Byb3h5PiBwcm94eSA9IGFkb3B0R1JlZihidXMtPmNyZWF0ZVByb3h5KCJvcmcu
d2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwKLSAgICAgICAgIi9vcmcvd2Via2l0L2d0ay9X
ZWJFeHRlbnNpb25UZXN0IiwgIm9yZy53ZWJraXQuZ3RrLldlYkV4dGVuc2lvblRlc3QiLCB0ZXN0
LT5tX21haW5Mb29wKSk7Ci0gICAgR0RCdXNDb25uZWN0aW9uKiBjb25uZWN0aW9uID0gZ19kYnVz
X3Byb3h5X2dldF9jb25uZWN0aW9uKHByb3h5LmdldCgpKTsKLSAgICBndWludCBpZCA9IGdfZGJ1
c19jb25uZWN0aW9uX3NpZ25hbF9zdWJzY3JpYmUoY29ubmVjdGlvbiwKLSAgICAgICAgMCwKLSAg
ICAgICAgIm9yZy53ZWJraXQuZ3RrLldlYkV4dGVuc2lvblRlc3QiLAotICAgICAgICAiRG9jdW1l
bnRMb2FkZWQiLAotICAgICAgICAiL29yZy93ZWJraXQvZ3RrL1dlYkV4dGVuc2lvblRlc3QiLAot
ICAgICAgICAwLAotICAgICAgICBHX0RCVVNfU0lHTkFMX0ZMQUdTX05PTkUsCi0gICAgICAgIHJl
aW50ZXJwcmV0X2Nhc3Q8R0RCdXNTaWduYWxDYWxsYmFjaz4oZG9jdW1lbnRMb2FkZWRDYWxsYmFj
ayksCi0gICAgICAgIHRlc3QsCi0gICAgICAgIDApOwotICAgIGdfYXNzZXJ0KGlkKTsKLQotICAg
IHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48aGVhZD48dGl0bGU+V2ViS2l0R1RLKyBXZWIgRXh0ZW5z
aW9ucyBUZXN0PC90aXRsZT48L2hlYWQ+PGJvZHk+PC9ib2R5PjwvaHRtbD4iLCAwKTsKLSAgICBn
X21haW5fbG9vcF9ydW4odGVzdC0+bV9tYWluTG9vcCk7Ci0gICAgZ19kYnVzX2Nvbm5lY3Rpb25f
c2lnbmFsX3Vuc3Vic2NyaWJlKGNvbm5lY3Rpb24sIGlkKTsKLX0KLQotc3RhdGljIGdib29sZWFu
IHdlYlByb2Nlc3NDcmFzaGVkQ2FsbGJhY2soV2ViS2l0V2ViVmlldyosIFdlYlZpZXdUZXN0KiB0
ZXN0KQotewotICAgIHRlc3QtPnF1aXRNYWluTG9vcCgpOwotCi0gICAgcmV0dXJuIEZBTFNFOwot
fQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViS2l0V2ViVmlld1Byb2Nlc3NDcmFzaGVkKFdlYlZpZXdU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48
L2h0bWw+IiwgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBn
X3NpZ25hbF9jb25uZWN0KHRlc3QtPm1fd2ViVmlldywgIndlYi1wcm9jZXNzLWNyYXNoZWQiLAot
ICAgICAgICBHX0NBTExCQUNLKHdlYlByb2Nlc3NDcmFzaGVkQ2FsbGJhY2spLCB0ZXN0KTsKLQot
ICAgIEdSZWZQdHI8R0RCdXNQcm94eT4gcHJveHkgPSBhZG9wdEdSZWYoYnVzLT5jcmVhdGVQcm94
eSgib3JnLndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9uVGVzdCIsCi0gICAgICAgICIvb3JnL3dlYmtp
dC9ndGsvV2ViRXh0ZW5zaW9uVGVzdCIsICJvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0
IiwgdGVzdC0+bV9tYWluTG9vcCkpOwotCi0gICAgR1JlZlB0cjxHVmFyaWFudD4gcmVzdWx0ID0g
YWRvcHRHUmVmKGdfZGJ1c19wcm94eV9jYWxsX3N5bmMoCi0gICAgICAgIHByb3h5LmdldCgpLAot
ICAgICAgICAiQWJvcnRQcm9jZXNzIiwKLSAgICAgICAgMCwKLSAgICAgICAgR19EQlVTX0NBTExf
RkxBR1NfTk9ORSwKLSAgICAgICAgLTEsIDAsIDApKTsKLSAgICBnX2Fzc2VydCghcmVzdWx0KTsK
LSAgICBnX21haW5fbG9vcF9ydW4odGVzdC0+bV9tYWluTG9vcCk7Ci19Ci0KLXN0YXRpYyB2b2lk
IHRlc3RXZWJFeHRlbnNpb25XaW5kb3dPYmplY3RDbGVhcmVkKFdlYlZpZXdUZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48aGVhZGVyPjwvaGVh
ZGVyPjxib2R5PjwvYm9keT48L2h0bWw+IiwgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZp
bmlzaGVkKCk7Ci0KLSAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgV2ViS2l0SmF2YXNj
cmlwdFJlc3VsdCogamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0
VW50aWxGaW5pc2hlZCgid2luZG93LmVjaG8oJ0ZvbycpOyIsICZlcnJvci5vdXRQdHIoKSk7Ci0g
ICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAgZ19hc3NlcnQoIWVycm9yLmdldCgp
KTsKLSAgICBHT3duUHRyPGNoYXI+IHZhbHVlU3RyaW5nKFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0
UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIo
dmFsdWVTdHJpbmcuZ2V0KCksID09LCAiRm9vIik7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBzY3Jp
cHREaWFsb2dDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiwgV2ViS2l0U2NyaXB0RGlhbG9nKiBkaWFs
b2csIGNoYXIqKiByZXN1bHQpCi17Ci0gICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfc2NyaXB0
X2RpYWxvZ19nZXRfZGlhbG9nX3R5cGUoZGlhbG9nKSwgPT0sIFdFQktJVF9TQ1JJUFRfRElBTE9H
X0FMRVJUKTsKLSAgICBnX2Fzc2VydCghKnJlc3VsdCk7Ci0gICAgKnJlc3VsdCA9IGdfc3RyZHVw
KHdlYmtpdF9zY3JpcHRfZGlhbG9nX2dldF9tZXNzYWdlKGRpYWxvZykpOwotICAgIHJldHVybiBU
UlVFOwotfQotCi1zdGF0aWMgdm9pZCBydW5KYXZhU2NyaXB0SW5Jc29sYXRlZFdvcmxkRmluaXNo
ZWRDYWxsYmFjayhHREJ1c1Byb3h5KiBwcm94eSwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIFdlYlZp
ZXdUZXN0KiB0ZXN0KQotewotICAgIGdfZGJ1c19wcm94eV9jYWxsX2ZpbmlzaChwcm94eSwgcmVz
dWx0LCAwKTsKLSAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOwotfQotCi1z
dGF0aWMgdm9pZCB0ZXN0V2ViRXh0ZW5zaW9uSXNvbGF0ZWRXb3JsZChXZWJWaWV3VGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGhlYWRlcj48
L2hlYWRlcj48Ym9keT48ZGl2IGlkPSdjb25zb2xlJz48L2Rpdj48L2JvZHk+PC9odG1sPiIsIDAp
OwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgR093blB0cjxjaGFy
PiByZXN1bHQ7Ci0gICAgZ3Vsb25nIHNjcmlwdERpYWxvZ0lEID0gZ19zaWduYWxfY29ubmVjdCh0
ZXN0LT5tX3dlYlZpZXcsICJzY3JpcHQtZGlhbG9nIiwgR19DQUxMQkFDSyhzY3JpcHREaWFsb2dD
YWxsYmFjayksICZyZXN1bHQub3V0UHRyKCkpOwotCi0gICAgc3RhdGljIGNvbnN0IGNoYXIgKm1h
aW5Xb3JsZFNjcmlwdCA9Ci0gICAgICAgICJ0b3AuZm9vID0gJ0Zvbyc7XG4iCi0gICAgICAgICJk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmlubmVySFRNTCA9IHRvcC5mb287XG4i
Ci0gICAgICAgICJ3aW5kb3cub3BlbiA9IGZ1bmN0aW9uICgpIHsgYWxlcnQoJ01haW4gV29ybGQn
KTsgfVxuIgotICAgICAgICAiZG9jdW1lbnQub3BlbigxLCAyLCAzKTsiOwotICAgIHRlc3QtPnJ1
bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZChtYWluV29ybGRTY3JpcHQsIDApOwotICAg
IGdfYXNzZXJ0X2NtcHN0cihyZXN1bHQuZ2V0KCksID09LCAiTWFpbiBXb3JsZCIpOwotICAgIHJl
c3VsdC5jbGVhcigpOwotCi0gICAgV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCogamF2YXNjcmlwdFJl
c3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5pbm5lckhUTUwiLCAwKTsKLSAgICBnX2Fzc2VydChq
YXZhc2NyaXB0UmVzdWx0KTsKLSAgICBHT3duUHRyPGNoYXI+IHZhbHVlU3RyaW5nKFdlYlZpZXdU
ZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKLSAgICBn
X2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAiRm9vIik7Ci0KLSAgICBzdGF0
aWMgY29uc3QgY2hhciAqaXNvbGF0ZWRXb3JsZFNjcmlwdCA9Ci0gICAgICAgICJkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmlubmVySFRNTCA9IHRvcC5mb287XG4iCi0gICAgICAg
ICJ3aW5kb3cub3BlbiA9IGZ1bmN0aW9uICgpIHsgYWxlcnQoJ0lzb2xhdGVkIFdvcmxkJyk7IH1c
biIKLSAgICAgICAgImRvY3VtZW50Lm9wZW4oMSwgMiwgMyk7IjsKLSAgICBHUmVmUHRyPEdEQnVz
UHJveHk+IHByb3h5ID0gYWRvcHRHUmVmKGJ1cy0+Y3JlYXRlUHJveHkoIm9yZy53ZWJraXQuZ3Rr
LldlYkV4dGVuc2lvblRlc3QiLAotICAgICAgICAiL29yZy93ZWJraXQvZ3RrL1dlYkV4dGVuc2lv
blRlc3QiICwgIm9yZy53ZWJraXQuZ3RrLldlYkV4dGVuc2lvblRlc3QiLCB0ZXN0LT5tX21haW5M
b29wKSk7Ci0gICAgZ19kYnVzX3Byb3h5X2NhbGwocHJveHkuZ2V0KCksCi0gICAgICAgICJSdW5K
YXZhU2NyaXB0SW5Jc29sYXRlZFdvcmxkIiwKLSAgICAgICAgZ192YXJpYW50X25ldygiKHQmcyki
LCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3BhZ2VfaWQodGVzdC0+bV93ZWJWaWV3KSwgaXNvbGF0ZWRX
b3JsZFNjcmlwdCksCi0gICAgICAgIEdfREJVU19DQUxMX0ZMQUdTX05PTkUsCi0gICAgICAgIC0x
LCAwLAotICAgICAgICByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KHJ1bkph
dmFTY3JpcHRJbklzb2xhdGVkV29ybGRGaW5pc2hlZENhbGxiYWNrKSwKLSAgICAgICAgdGVzdCk7
Ci0gICAgZ19tYWluX2xvb3BfcnVuKHRlc3QtPm1fbWFpbkxvb3ApOwotICAgIGdfYXNzZXJ0X2Nt
cHN0cihyZXN1bHQuZ2V0KCksID09LCAiSXNvbGF0ZWQgV29ybGQiKTsKLSAgICByZXN1bHQuY2xl
YXIoKTsKLQotICAgIC8vIENoZWNrIHRoYXQgJ3RvcC5mb28nIGRlZmluZWQgaW4gbWFpbiB3b3Js
ZCBpcyBub3QgdmlzaWJsZSBpbiBpc29sYXRlZCB3b3JsZC4KLSAgICBqYXZhc2NyaXB0UmVzdWx0
ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnY29uc29sZScpLmlubmVySFRNTCIsIDApOwotICAgIGdfYXNzZXJ0KGphdmFz
Y3JpcHRSZXN1bHQpOwotICAgIHZhbHVlU3RyaW5nLnNldChXZWJWaWV3VGVzdDo6amF2YXNjcmlw
dFJlc3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnRfY21wc3Ry
KHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgInVuZGVmaW5lZCIpOwotCi0gICAgZ19zaWduYWxfaGFu
ZGxlcl9kaXNjb25uZWN0KHRlc3QtPm1fd2ViVmlldywgc2NyaXB0RGlhbG9nSUQpOwotfQotCi12
b2lkIGJlZm9yZUFsbCgpCi17Ci0gICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF93ZWJfZXh0ZW5z
aW9uc19kaXJlY3Rvcnkod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCksIFdFQktJVF9U
RVNUX1dFQl9FWFRFTlNJT05TX0RJUik7Ci0gICAgYnVzID0gbmV3IFdlYktpdFRlc3RCdXMoKTsK
LSAgICBpZiAoIWJ1cy0+cnVuKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYlZpZXdUZXN0
OjphZGQoIldlYktpdFdlYkV4dGVuc2lvbiIsICJkb20tZG9jdW1lbnQtdGl0bGUiLCB0ZXN0V2Vi
RXh0ZW5zaW9uR2V0VGl0bGUpOwotICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYkV4dGVu
c2lvbiIsICJkb2N1bWVudC1sb2FkZWQtc2lnbmFsIiwgdGVzdERvY3VtZW50TG9hZGVkU2lnbmFs
KTsKLSAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgIndlYi1wcm9jZXNzLWNy
YXNoZWQiLCB0ZXN0V2ViS2l0V2ViVmlld1Byb2Nlc3NDcmFzaGVkKTsKLSAgICBXZWJWaWV3VGVz
dDo6YWRkKCJXZWJLaXRXZWJFeHRlbnNpb24iLCAid2luZG93LW9iamVjdC1jbGVhcmVkIiwgdGVz
dFdlYkV4dGVuc2lvbldpbmRvd09iamVjdENsZWFyZWQpOwotICAgIFdlYlZpZXdUZXN0OjphZGQo
IldlYktpdFdlYkV4dGVuc2lvbiIsICJpc29sYXRlZC13b3JsZCIsIHRlc3RXZWJFeHRlbnNpb25J
c29sYXRlZFdvcmxkKTsKLX0KLQotdm9pZCBhZnRlckFsbCgpCi17Ci0gICAgZGVsZXRlIGJ1czsK
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rl
c3RXZWJLaXRBY2Nlc3NpYmlsaXR5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZTFiZDM4My4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0QWNjZXNzaWJpbGl0eS5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwyMjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5M
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiVGVzdE1haW4uaCIKLSNpbmNsdWRl
ICJXZWJWaWV3VGVzdC5oIgotCi0vLyBUaGUgbGliYXRzcGkgaGVhZGVycyBkb24ndCB1c2UgR19C
RUdJTl9ERUNMUwotZXh0ZXJuICJDIiB7Ci0jaW5jbHVkZSA8YXRzcGkvYXRzcGkuaD4KLX0KLQot
I2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxnbGliLmg+
Ci0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0jaW5jbHVk
ZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgotCi0vLyBOYW1lIG9mIHRoZSB0ZXN0IHNlcnZlciBh
cHBsaWNhdGlvbiBjcmVhdGluZyB0aGUgd2ViVmlldyBvYmplY3QuCi1zdGF0aWMgY29uc3QgY2hh
cioga1Rlc3RTZXJ2ZXJBcHBOYW1lID0gIkFjY2Vzc2liaWxpdHlUZXN0U2VydmVyIjsKLQotLy8g
TWF4IHNlY29uZHMgdG8gd2FpdCBmb3IgdGhlIHRlc3Qgc2VydmVyIGJlZm9yZSBpbnNwZWN0aW5n
IGl0Lgotc3RhdGljIGNvbnN0IGludCBrTWF4V2FpdEZvckNoaWxkID0gNTsKLQotLy8gVGhlIFBJ
RCBmb3IgdGhlIHRlc3Qgc2VydmVyIHJ1bm5pbmcsIHNvIHdlIGNhbiBraWxsIGl0IGlmIG5lZWRl
ZC4KLXN0YXRpYyBHUGlkIGtDaGlsZFByb2Nlc3NQaWQgPSAwOwotCi0vLyBXaGV0aGVyIHRoZSBj
aGlsZCBoYXMgcmVwbGllZCBhbmQgaXQncyByZWFkeS4KLXN0YXRpYyBib29sIGtDaGlsZElzUmVh
ZHkgPSBmYWxzZTsKLQotc3RhdGljIHZvaWQgc3RvcFRlc3RTZXJ2ZXIoKQotewotICAgIC8vIERv
IG5vdGhpbmcgaWYgdGhlcmUncyBubyBzZXJ2ZXIgcnVubmluZy4KLSAgICBpZiAoIWtDaGlsZFBy
b2Nlc3NQaWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdfc3Bhd25fY2xvc2VfcGlkKGtDaGls
ZFByb2Nlc3NQaWQpOwotICAgIGtpbGwoa0NoaWxkUHJvY2Vzc1BpZCwgU0lHVEVSTSk7Ci0gICAg
a0NoaWxkUHJvY2Vzc1BpZCA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHNpZ0Fib3J0SGFuZGxlcihp
bnQgc2lnTnVtKQotewotICAgIC8vIEp1c3Qgc3RvcCB0aGUgdGVzdCBzZXJ2ZXIgaWYgU0lHQUJS
VCB3YXMgcmVjZWl2ZWQuCi0gICAgc3RvcFRlc3RTZXJ2ZXIoKTsKLX0KLQotc3RhdGljIGdwb2lu
dGVyIHRlc3RTZXJ2ZXJNb25pdG9yVGhyZWFkRnVuYyhncG9pbnRlcikKLXsKLSAgICAvLyBXYWl0
IGZvciB0aGUgc3BlY2lmaWVkIHRpbWVvdXQgdG8gaGFwcGVuLgotICAgIGdfdXNsZWVwKGtNYXhX
YWl0Rm9yQ2hpbGQgKiBHX1VTRUNfUEVSX1NFQyk7Ci0KLSAgICAvLyBLaWxsIHRoZSBjaGlsZCBw
cm9jZXNzIGlmIG5vdCByZWFkeSB5ZXQuCi0gICAgaWYgKCFrQ2hpbGRJc1JlYWR5KQotICAgICAg
ICBzdG9wVGVzdFNlcnZlcigpOwotCi0gICAgZ190aHJlYWRfZXhpdCgwKTsKLSAgICByZXR1cm4g
MDsKLX0KLQotc3RhdGljIHZvaWQgc3RhcnRUZXN0U2VydmVyTW9uaXRvcigpCi17Ci0gICAga0No
aWxkSXNSZWFkeSA9IGZhbHNlOwotICAgIGdfdGhyZWFkX25ldygiVGVzdFNlcnZlck1vbml0b3Ii
LCB0ZXN0U2VydmVyTW9uaXRvclRocmVhZEZ1bmMsIDApOwotfQotCi1zdGF0aWMgdm9pZCBzdGFy
dFRlc3RTZXJ2ZXIoKQotewotICAgIC8vIFByZXBhcmUgYXJndltdIGZvciBzcGF3bmluZyB0aGUg
c2VydmVyIHByb2Nlc3MuCi0gICAgR093blB0cjxjaGFyPiB0ZXN0U2VydmVyUGF0aChnX2J1aWxk
X2ZpbGVuYW1lKFdFQktJVF9FWEVDX1BBVEgsICJXZWJLaXQyR09iamVjdEFQSVRlc3RzIiwga1Rl
c3RTZXJ2ZXJBcHBOYW1lLCBOVUxMKSk7Ci0KLSAgICBjaGFyKiB0ZXN0U2VydmVyQXJndlsyXTsK
LSAgICB0ZXN0U2VydmVyQXJndlswXSA9IHRlc3RTZXJ2ZXJQYXRoLmdldCgpOwotICAgIHRlc3RT
ZXJ2ZXJBcmd2WzFdID0gMDsKLQotICAgIC8vIFNwYXduIHRoZSBzZXJ2ZXIsIGdldHRpbmcgaXRz
IHN0ZG91dCBmaWxlIGRlc2NyaXB0b3IgdG8gc2V0IGEKLSAgICAvLyBjb21tdW5pY2F0aW9uIGNo
YW5uZWwsIHNvIHdlIGtub3cgd2hlbiBpdCdzIHJlYWR5LgotICAgIGludCBjaGlsZFN0ZG91dCA9
IDA7Ci0gICAgaWYgKCFnX3NwYXduX2FzeW5jX3dpdGhfcGlwZXMoMCwgdGVzdFNlcnZlckFyZ3Ys
IDAsIHN0YXRpY19jYXN0PEdTcGF3bkZsYWdzPigwKSwgMCwgMCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAma0NoaWxkUHJvY2Vzc1BpZCwgMCwgJmNoaWxkU3Rkb3V0LCAwLCAw
KSkgewotICAgICAgICBjbG9zZShjaGlsZFN0ZG91dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICAvLyBTdGFydCBtb25pdG9yaW5nIHRoZSB0ZXN0IHNlcnZlciAoaW4gYSBzZXBhcmF0
ZSB0aHJlYWQpIHRvCi0gICAgLy8gZW5zdXJlIHdlIGRvbid0IGJsb2NrIG9uIHRoZSBjaGlsZCBw
cm9jZXNzIG1vcmUgdGhhbiBhIHRpbWVvdXQuCi0gICAgc3RhcnRUZXN0U2VydmVyTW9uaXRvcigp
OwotCi0gICAgY2hhciBtc2dbMl07Ci0gICAgR0lPQ2hhbm5lbCogaW9DaGFubmVsID0gZ19pb19j
aGFubmVsX3VuaXhfbmV3KGNoaWxkU3Rkb3V0KTsKLSAgICBpZiAoZ19pb19jaGFubmVsX3JlYWRf
Y2hhcnMoaW9DaGFubmVsLCBtc2csIDIsIDAsIDApID09IEdfSU9fU1RBVFVTX05PUk1BTCkgewot
ICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBzZXJ2ZXIgc2VudCBhIG1lc3NhZ2Ugc2F5aW5n
IGl0J3MgcmVhZHkKLSAgICAgICAgLy8gYW5kIHN0b3JlIHRoZSByZXN1bHQgZ2xvYmFsbHksIHNv
IHRoZSBtb25pdG9yIGNhbiBzZWUgaXQuCi0gICAgICAgIGtDaGlsZElzUmVhZHkgPSBtc2dbMF0g
PT0gJ08nICYmIG1zZ1sxXSA9PSAnSyc7Ci0gICAgfQotICAgIGdfaW9fY2hhbm5lbF91bnJlZihp
b0NoYW5uZWwpOwotICAgIGNsb3NlKGNoaWxkU3Rkb3V0KTsKLQotICAgIC8vIFRoZSB0aW1lb3V0
IHdhcyByZWFjaGVkIGFuZCB0aGUgc2VydmVyIGlzIG5vdCByZWFkeSB5ZXQsIHNvCi0gICAgLy8g
c3RvcCBpdCBpbm1lZGlhdGVseSwgYW5kIGxldCB0aGUgdW5pdCB0ZXN0cyBmYWlsLgotICAgIGlm
ICgha0NoaWxkSXNSZWFkeSkKLSAgICAgICAgc3RvcFRlc3RTZXJ2ZXIoKTsKLX0KLQotc3RhdGlj
IHZvaWQgY2hlY2tBdHNwaUFjY2Vzc2libGUoQXRzcGlBY2Nlc3NpYmxlKiBhY2Nlc3NpYmxlLCBj
b25zdCBjaGFyKiB0YXJnZXROYW1lLCBBdHNwaVJvbGUgdGFyZ2V0Um9sZSkKLXsKLSAgICBnX2Fz
c2VydChBVFNQSV9JU19BQ0NFU1NJQkxFKGFjY2Vzc2libGUpKTsKLQotICAgIEdPd25QdHI8Y2hh
cj4gbmFtZShhdHNwaV9hY2Nlc3NpYmxlX2dldF9uYW1lKGFjY2Vzc2libGUsIDApKTsKLSAgICBn
X2Fzc2VydF9jbXBzdHIodGFyZ2V0TmFtZSwgPT0sIG5hbWUuZ2V0KCkpOwotICAgIGdfYXNzZXJ0
X2NtcGludCh0YXJnZXRSb2xlLCA9PSwgYXRzcGlfYWNjZXNzaWJsZV9nZXRfcm9sZShhY2Nlc3Np
YmxlLCAwKSk7Ci19Ci0KLXN0YXRpYyBHUmVmUHRyPEF0c3BpQWNjZXNzaWJsZT4gZmluZFRlc3RT
ZXJ2ZXJBcHBsaWNhdGlvbigpCi17Ci0gICAgLy8gT25seSBvbmUgZGVza3RvcCBpcyBzdXBwb3J0
ZWQgYnkgQVRTUEkgYXQgdGhlIG1vbWVudC4KLSAgICBHUmVmUHRyPEF0c3BpQWNjZXNzaWJsZT4g
ZGVza3RvcCA9IGFkb3B0R1JlZihhdHNwaV9nZXRfZGVza3RvcCgwKSk7Ci0KLSAgICAvLyBMb29r
IGZvciB0aGUgc2VydmVyIGFwcGxpY2F0aW9uIGluIHRoZSBsaXN0IG9mIGFwcHMuCi0gICAgR1Jl
ZlB0cjxBdHNwaUFjY2Vzc2libGU+IGN1cnJlbnQ7Ci0gICAgaW50IGNoaWxkQ291bnQgPSBhdHNw
aV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9jb3VudChkZXNrdG9wLmdldCgpLCAwKTsKLSAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNoaWxkQ291bnQ7IGkrKykgewotICAgICAgICBjdXJyZW50ID0gYWRv
cHRHUmVmKGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGRlc2t0b3AuZ2V0KCks
IGksIDApKTsKLSAgICAgICAgaWYgKCFnX3N0cmNtcDAoYXRzcGlfYWNjZXNzaWJsZV9nZXRfbmFt
ZShjdXJyZW50LmdldCgpLCAwKSwga1Rlc3RTZXJ2ZXJBcHBOYW1lKSkKLSAgICAgICAgICAgIHJl
dHVybiBjdXJyZW50OwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCB0
ZXN0QXRzcGlCYXNpY0hpZXJhcmNoeShXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikK
LXsKLSAgICAvLyBUaGUgdGVzdCBzZXJ2ZXIncyBhY2Nlc3NpYmlsaXR5IG9iamVjdCAoVUkgUHJv
Y2VzcykuCi0gICAgR1JlZlB0cjxBdHNwaUFjY2Vzc2libGU+IHRlc3RTZXJ2ZXJBcHAgPSBmaW5k
VGVzdFNlcnZlckFwcGxpY2F0aW9uKCk7Ci0gICAgZ19hc3NlcnQoQVRTUElfSVNfQUNDRVNTSUJM
RSh0ZXN0U2VydmVyQXBwLmdldCgpKSk7Ci0gICAgY2hlY2tBdHNwaUFjY2Vzc2libGUodGVzdFNl
cnZlckFwcC5nZXQoKSwgIkFjY2Vzc2liaWxpdHlUZXN0U2VydmVyIiwgQVRTUElfUk9MRV9BUFBM
SUNBVElPTik7Ci0KLSAgICAvLyBUaGUgbWFpbiB3aW5kb3cncyBhY2Nlc3NpYmlsaXR5IG9iamVj
dCAoVUkgUHJvY2VzcykuCi0gICAgR1JlZlB0cjxBdHNwaUFjY2Vzc2libGU+IGN1cnJlbnRQYXJl
bnQgPSB0ZXN0U2VydmVyQXBwOwotICAgIEdSZWZQdHI8QXRzcGlBY2Nlc3NpYmxlPiBjdXJyZW50
Q2hpbGQgPSBhZG9wdEdSZWYoYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoY3Vy
cmVudFBhcmVudC5nZXQoKSwgMCwgMCkpOwotICAgIGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lC
TEUoY3VycmVudENoaWxkLmdldCgpKSk7Ci0gICAgY2hlY2tBdHNwaUFjY2Vzc2libGUoY3VycmVu
dENoaWxkLmdldCgpLCAiIiwgQVRTUElfUk9MRV9GUkFNRSk7Ci0KLSAgICAvLyBUaGUgV2ViVmll
dydzIGFjY2Vzc2liaWxpdHkgb2JqZWN0IChVSSBQcm9jZXNzKS4KLSAgICBjdXJyZW50UGFyZW50
ID0gY3VycmVudENoaWxkOwotICAgIGN1cnJlbnRDaGlsZCA9IGF0c3BpX2FjY2Vzc2libGVfZ2V0
X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQYXJlbnQuZ2V0KCksIDAsIDApOwotICAgIGdfYXNzZXJ0
KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY3VycmVudENoaWxkLmdldCgpKSk7Ci0gICAgY2hlY2tBdHNw
aUFjY2Vzc2libGUoY3VycmVudENoaWxkLmdldCgpLCAiIiwgQVRTUElfUk9MRV9GSUxMRVIpOwot
Ci0gICAgLy8gVGhlIFdlYlBhZ2UncyBhY2Nlc3NpYmlsaXR5IG9iamVjdCAoV2ViIFByb2Nlc3Mp
LgotICAgIGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50Q2hpbGQ7Ci0gICAgY3VycmVudENoaWxkID0g
YXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoY3VycmVudFBhcmVudC5nZXQoKSwg
MCwgMCk7Ci0gICAgZ19hc3NlcnQoQVRTUElfSVNfQUNDRVNTSUJMRShjdXJyZW50Q2hpbGQuZ2V0
KCkpKTsKLSAgICBjaGVja0F0c3BpQWNjZXNzaWJsZShjdXJyZW50Q2hpbGQuZ2V0KCksICIiLCBB
VFNQSV9ST0xFX0ZJTExFUik7Ci0KLSAgICAvLyBIVE1MIHJvb3QgZWxlbWVudCdzIGFjY2Vzc2li
bGUgZWxlbWVudCAoV2ViIFByb2Nlc3MpLgotICAgIGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50Q2hp
bGQ7Ci0gICAgY3VycmVudENoaWxkID0gYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5k
ZXgoY3VycmVudFBhcmVudC5nZXQoKSwgMCwgMCk7Ci0gICAgZ19hc3NlcnQoQVRTUElfSVNfQUND
RVNTSUJMRShjdXJyZW50Q2hpbGQuZ2V0KCkpKTsKLQotICAgIC8vIEhUTUwgYm9keSdzIGFjY2Vz
c2libGUgZWxlbWVudCAoV2ViIFByb2Nlc3MpLgotICAgIGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50
Q2hpbGQ7Ci0gICAgY3VycmVudENoaWxkID0gYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRf
aW5kZXgoY3VycmVudFBhcmVudC5nZXQoKSwgMCwgMCk7Ci0gICAgZ19hc3NlcnQoQVRTUElfSVNf
QUNDRVNTSUJMRShjdXJyZW50Q2hpbGQuZ2V0KCkpKTsKLSAgICBjaGVja0F0c3BpQWNjZXNzaWJs
ZShjdXJyZW50Q2hpbGQuZ2V0KCksICIiLCBBVFNQSV9ST0xFX0RPQ1VNRU5UX1dFQik7Ci0KLSAg
ICAvLyBIVE1MIEgxJ3MgYWNjZXNzaWJsZSBlbGVtZW50IChXZWIgUHJvY2VzcykuCi0gICAgY3Vy
cmVudFBhcmVudCA9IGN1cnJlbnRDaGlsZDsKLSAgICBjdXJyZW50Q2hpbGQgPSBhdHNwaV9hY2Nl
c3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChjdXJyZW50UGFyZW50LmdldCgpLCAwLCAwKTsKLSAg
ICBnX2Fzc2VydChBVFNQSV9JU19BQ0NFU1NJQkxFKGN1cnJlbnRDaGlsZC5nZXQoKSkpOwotICAg
IGNoZWNrQXRzcGlBY2Nlc3NpYmxlKGN1cnJlbnRDaGlsZC5nZXQoKSwgIlRoaXMgaXMgYSB0ZXN0
IiwgQVRTUElfUk9MRV9IRUFESU5HKTsKLQotICAgIC8vIEhUTUwgZmlyc3QgcGFyYWdyYXBoJ3Mg
YWNjZXNzaWJsZSBlbGVtZW50IChXZWIgUHJvY2VzcykuCi0gICAgY3VycmVudENoaWxkID0gYXRz
cGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoY3VycmVudFBhcmVudC5nZXQoKSwgMSwg
MCk7Ci0gICAgZ19hc3NlcnQoQVRTUElfSVNfQUNDRVNTSUJMRShjdXJyZW50Q2hpbGQuZ2V0KCkp
KTsKLSAgICBjaGVja0F0c3BpQWNjZXNzaWJsZShjdXJyZW50Q2hpbGQuZ2V0KCksICIiLCBBVFNQ
SV9ST0xFX1BBUkFHUkFQSCk7Ci0KLSAgICAvLyBIVE1MIHNlY29uZCBwYXJhZ3JhcGgncyBhY2Nl
c3NpYmxlIGVsZW1lbnQgKFdlYiBQcm9jZXNzKS4KLSAgICBjdXJyZW50Q2hpbGQgPSBhdHNwaV9h
Y2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChjdXJyZW50UGFyZW50LmdldCgpLCAyLCAwKTsK
LSAgICBnX2Fzc2VydChBVFNQSV9JU19BQ0NFU1NJQkxFKGN1cnJlbnRDaGlsZC5nZXQoKSkpOwot
ICAgIGNoZWNrQXRzcGlBY2Nlc3NpYmxlKGN1cnJlbnRDaGlsZC5nZXQoKSwgIiIsIEFUU1BJX1JP
TEVfUEFSQUdSQVBIKTsKLQotICAgIC8vIEhUTUwgbGluaydzIGFjY2Vzc2libGUgZWxlbWVudCAo
V2ViIFByb2Nlc3MpLgotICAgIGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50Q2hpbGQ7Ci0gICAgY3Vy
cmVudENoaWxkID0gYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoY3VycmVudFBh
cmVudC5nZXQoKSwgMCwgMCk7Ci0gICAgZ19hc3NlcnQoQVRTUElfSVNfQUNDRVNTSUJMRShjdXJy
ZW50Q2hpbGQuZ2V0KCkpKTsKLSAgICBjaGVja0F0c3BpQWNjZXNzaWJsZShjdXJyZW50Q2hpbGQu
Z2V0KCksICJhIGxpbmsiLCBBVFNQSV9ST0xFX0xJTkspOwotfQotCi12b2lkIGJlZm9yZUFsbCgp
Ci17Ci0gICAgLy8gV2UgaW5zdGFsbCBhIGhhbmRsZXIgdG8gZW5zdXJlIHRoYXQgd2Uga2lsbCB0
aGUgY2hpbGQgcHJvY2VzcwotICAgIC8vIGlmIHRoZSBwYXJlbnQgZGllcyBiZWNhdXNlIG9mIHdo
YXRldmVyIHRoZSByZWFzb24gaXMuCi0gICAgc2lnbmFsKFNJR0FCUlQsIHNpZ0Fib3J0SGFuZGxl
cik7Ci0KLSAgICAvLyBTdGFydCB0aGUgYWNjZXNzaWJpbGl0eSB0ZXN0IHNlcnZlciBhbmQgbG9h
ZCB0aGUgdGVzdHMuCi0gICAgc3RhcnRUZXN0U2VydmVyKCk7Ci0gICAgV2ViVmlld1Rlc3Q6OmFk
ZCgiV2ViS2l0QWNjZXNzaWJpbGl0eSIsICJhdHNwaS1iYXNpYy1oaWVyYXJjaHkiLCB0ZXN0QXRz
cGlCYXNpY0hpZXJhcmNoeSk7Ci19Ci0KLXZvaWQgYWZ0ZXJBbGwoKQotewotICAgIC8vIEVuc3Vy
ZSB3ZSBzdG9wIHRoZSBzZXJ2ZXIuCi0gICAgc3RvcFRlc3RTZXJ2ZXIoKTsKLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRGYXZp
Y29uRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
VGVzdFdlYktpdEZhdmljb25EYXRhYmFzZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDFhMDZmNzQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvVGVzdFdlYktpdEZhdmljb25EYXRhYmFzZS5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwyNzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5oIgotI2luY2x1
ZGUgIldlYlZpZXdUZXN0LmgiCi0jaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRlIDxs
aWJzb3VwL3NvdXAuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0KLXN0YXRp
YyBXZWJLaXRUZXN0U2VydmVyKiBrU2VydmVyOwotc3RhdGljIGNoYXIqIGtUZW1wRGlyZWN0b3J5
OwotCi1jbGFzcyBGYXZpY29uRGF0YWJhc2VUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3QgewotcHVi
bGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoRmF2aWNvbkRhdGFiYXNlVGVzdCk7Ci0K
LSAgICBGYXZpY29uRGF0YWJhc2VUZXN0KCkKLSAgICAgICAgOiBtX3dlYkNvbnRleHQod2Via2l0
X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCkpCi0gICAgICAgICwgbV9mYXZpY29uKDApCi0gICAg
ICAgICwgbV9lcnJvcigwKQotICAgICAgICAsIG1fZmF2aWNvbk5vdGlmaWNhdGlvblJlY2VpdmVk
KGZhbHNlKQotICAgIHsKLSAgICAgICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9
IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFzZShtX3dlYkNvbnRleHQpOwot
ICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGRhdGFiYXNlLCAiZmF2aWNvbi1jaGFuZ2VkIiwgR19D
QUxMQkFDSyhmYXZpY29uQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgfQotCi0gICAgfkZh
dmljb25EYXRhYmFzZVRlc3QoKQotICAgIHsKLSAgICAgICAgaWYgKG1fZmF2aWNvbikKLSAgICAg
ICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShtX2Zhdmljb24pOwotCi0gICAgICAgIFdlYktp
dEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmlj
b25fZGF0YWJhc2UobV93ZWJDb250ZXh0KTsKLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlz
Y29ubmVjdF9tYXRjaGVkKGRhdGFiYXNlLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAw
LCB0aGlzKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBmYXZpY29uQ2hhbmdlZENhbGxiYWNr
KFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IGNoYXIqIHBhZ2VVUkksIGNv
bnN0IGNoYXIqIGZhdmljb25VUkksIEZhdmljb25EYXRhYmFzZVRlc3QqIHRlc3QpCi0gICAgewot
ICAgICAgICBpZiAoIWdfc3RyY21wMCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSh0ZXN0LT5tX3dl
YlZpZXcpLCBwYWdlVVJJKSkKLSAgICAgICAgICAgIHRlc3QtPm1fZmF2aWNvblVSSSA9IGZhdmlj
b25VUkk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgdmlld0Zhdmljb25DaGFuZ2VkQ2FsbGJh
Y2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgR1BhcmFtU3BlYyogcHNwZWMsIGdwb2ludGVyIGRh
dGEpCi0gICAgewotICAgICAgICBGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0ID0gc3RhdGljX2Nh
c3Q8RmF2aWNvbkRhdGFiYXNlVGVzdCo+KGRhdGEpOwotICAgICAgICBnX2Fzc2VydCh0ZXN0LT5t
X3dlYlZpZXcgPT0gd2ViVmlldyk7Ci0gICAgICAgIHRlc3QtPm1fZmF2aWNvbk5vdGlmaWNhdGlv
blJlY2VpdmVkID0gdHJ1ZTsKLSAgICAgICAgdGVzdC0+cXVpdE1haW5Mb29wKCk7Ci0gICAgfQot
Ci0gICAgc3RhdGljIHZvaWQgZ2V0RmF2aWNvbkNhbGxiYWNrKEdPYmplY3QqIHNvdXJjZU9iamVj
dCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIHZvaWQqIGRhdGEpCi0gICAgewotICAgICAgICBGYXZp
Y29uRGF0YWJhc2VUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8RmF2aWNvbkRhdGFiYXNlVGVzdCo+
KGRhdGEpOwotICAgICAgICBXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0
X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNlKHRlc3QtPm1fd2ViQ29udGV4dCk7Ci0g
ICAgICAgIHRlc3QtPm1fZmF2aWNvbiA9IHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZp
Y29uX2ZpbmlzaChkYXRhYmFzZSwgcmVzdWx0LCAmdGVzdC0+bV9lcnJvci5vdXRQdHIoKSk7Ci0g
ICAgICAgIHRlc3QtPnF1aXRNYWluTG9vcCgpOwotICAgIH0KLQotICAgIHZvaWQgd2FpdFVudGls
RmF2aWNvbkNoYW5nZWQoKQotICAgIHsKLSAgICAgICAgbV9mYXZpY29uTm90aWZpY2F0aW9uUmVj
ZWl2ZWQgPSBmYWxzZTsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBoYW5kbGVySUQgPSBnX3NpZ25h
bF9jb25uZWN0KG1fd2ViVmlldywgIm5vdGlmeTo6ZmF2aWNvbiIsIEdfQ0FMTEJBQ0sodmlld0Zh
dmljb25DaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1f
bWFpbkxvb3ApOwotICAgICAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QobV93ZWJWaWV3
LCBoYW5kbGVySUQpOwotICAgIH0KLQotICAgIHZvaWQgZ2V0RmF2aWNvbkZvclBhZ2VVUklBbmRX
YWl0VW50aWxSZWFkeShjb25zdCBjaGFyKiBwYWdlVVJJKQotICAgIHsKLSAgICAgICAgbV9lcnJv
ci5jbGVhcigpOwotICAgICAgICBpZiAobV9mYXZpY29uKSB7Ci0gICAgICAgICAgICBjYWlyb19z
dXJmYWNlX2Rlc3Ryb3kobV9mYXZpY29uKTsKLSAgICAgICAgICAgIG1fZmF2aWNvbiA9IDA7Ci0g
ICAgICAgIH0KLQotICAgICAgICBXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlID0gd2Vi
a2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNlKG1fd2ViQ29udGV4dCk7Ci0gICAg
ICAgIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uKGRhdGFiYXNlLCBwYWdlVVJJ
LCAwLCBnZXRGYXZpY29uQ2FsbGJhY2ssIHRoaXMpOwotICAgICAgICBnX21haW5fbG9vcF9ydW4o
bV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgV2ViS2l0V2ViQ29udGV4dCogbV93ZWJDb250ZXh0
OwotICAgIGNhaXJvX3N1cmZhY2VfdCogbV9mYXZpY29uOwotICAgIENTdHJpbmcgbV9mYXZpY29u
VVJJOwotICAgIEdPd25QdHI8R0Vycm9yPiBtX2Vycm9yOwotICAgIGJvb2wgbV9mYXZpY29uTm90
aWZpY2F0aW9uUmVjZWl2ZWQ7Ci19OwotCi1zdGF0aWMgdm9pZAotc2VydmVyQ2FsbGJhY2soU291
cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwg
R0hhc2hUYWJsZSogcXVlcnksIFNvdXBDbGllbnRDb250ZXh0KiBjb250ZXh0LCB2b2lkKiBkYXRh
KQotewotICAgIGlmIChtZXNzYWdlLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7Ci0gICAg
ICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9JTVBM
RU1FTlRFRCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoZ19zdHJfZXF1YWwo
cGF0aCwgIi9mYXZpY29uLmljbyIpKSB7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVz
KG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9i
b2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgY2hhciogY29udGVudHM7Ci0gICAgZ3NpemUgbGVuZ3RoOwotICAgIGlmIChn
X3N0cl9lcXVhbChwYXRoLCAiL2ljb24vZmF2aWNvbi5pY28iKSkgewotICAgICAgICBHT3duUHRy
PGNoYXI+IHBhdGhUb0Zhdmljb24oZ19idWlsZF9maWxlbmFtZShUZXN0OjpnZXRXZWJLaXQxVGVz
dFJlc291Y2VzRGlyKCkuZGF0YSgpLCAiYmxhbmsuaWNvIiwgTlVMTCkpOwotICAgICAgICBnX2Zp
bGVfZ2V0X2NvbnRlbnRzKHBhdGhUb0Zhdmljb24uZ2V0KCksICZjb250ZW50cywgJmxlbmd0aCwg
MCk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9i
b2R5LCBTT1VQX01FTU9SWV9UQUtFLCBjb250ZW50cywgbGVuZ3RoKTsKLSAgICB9IGVsc2UgaWYg
KGdfc3RyX2VxdWFsKHBhdGgsICIvbm9mYXZpY29uIikpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0
IGNoYXIqIG5vRmF2aWNvbkhUTUwgPSAiPGh0bWw+PGhlYWQ+PGJvZHk+dGVzdDwvYm9keT48L2h0
bWw+IjsKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNl
X2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgbm9GYXZpY29uSFRNTCwgc3RybGVuKG5vRmF2aWNv
bkhUTUwpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogY29udGVu
dHNIVE1MID0gIjxodG1sPjxoZWFkPjxsaW5rIHJlbD0naWNvbicgaHJlZj0nL2ljb24vZmF2aWNv
bi5pY28nIHR5cGU9J2ltYWdlL3gtaWNvOyBjaGFyc2V0PWJpbmFyeSc+PC9oZWFkPjxib2R5PnRl
c3Q8L2JvZHk+PC9odG1sPiI7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNz
YWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGNvbnRlbnRzSFRNTCwgc3Ry
bGVuKGNvbnRlbnRzSFRNTCkpOwotICAgIH0KLQotICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVz
KG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKLSAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0
ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdE5vdEluaXRp
YWxpemVkKEZhdmljb25EYXRhYmFzZVRlc3QqIHRlc3QpCi17Ci0gICAgLy8gVHJ5IHRvIHJldHJp
ZXZlIGEgdmFsaWQgZmF2aWNvbiBmcm9tIGEgbm90IGluaXRpYWxpemVkIGRhdGFiYXNlLgotICAg
IHRlc3QtPmdldEZhdmljb25Gb3JQYWdlVVJJQW5kV2FpdFVudGlsUmVhZHkoa1NlcnZlci0+Z2V0
VVJJRm9yUGF0aCgiL2ZvbyIpLmRhdGEoKSk7Ci0gICAgZ19hc3NlcnQoIXRlc3QtPm1fZmF2aWNv
bik7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV9lcnJvcik7Ci0gICAgZ19hc3NlcnRfY21waW50KHRl
c3QtPm1fZXJyb3ItPmNvZGUsID09LCBXRUJLSVRfRkFWSUNPTl9EQVRBQkFTRV9FUlJPUl9OT1Rf
SU5JVElBTElaRUQpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0U2V0RGlyZWN0b3J5KEZhdmljb25E
YXRhYmFzZVRlc3QqIHRlc3QpCi17Ci0gICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF9mYXZpY29u
X2RhdGFiYXNlX2RpcmVjdG9yeSh0ZXN0LT5tX3dlYkNvbnRleHQsIGtUZW1wRGlyZWN0b3J5KTsK
LSAgICBnX2Fzc2VydF9jbXBzdHIoa1RlbXBEaXJlY3RvcnksID09LCB3ZWJraXRfd2ViX2NvbnRl
eHRfZ2V0X2Zhdmljb25fZGF0YWJhc2VfZGlyZWN0b3J5KHRlc3QtPm1fd2ViQ29udGV4dCkpOwot
fQotCi1zdGF0aWMgdm9pZCB0ZXN0Q2xlYXJEYXRhYmFzZShGYXZpY29uRGF0YWJhc2VUZXN0KiB0
ZXN0KQotewotICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfd2Vi
X2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2UodGVzdC0+bV93ZWJDb250ZXh0KTsKLSAgICB3
ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9jbGVhcihkYXRhYmFzZSk7Ci0KLSAgICBHT3duUHRyPGNo
YXI+IGljb25VUkkod2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fdXJpKGRhdGFi
YXNlLCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvZm9vIikuZGF0YSgpKSk7Ci0gICAgZ19hc3Nl
cnQoIWljb25VUkkpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0R2V0RmF2aWNvbihGYXZpY29uRGF0
YWJhc2VUZXN0KiB0ZXN0KQotewotICAgIC8vIFdlIG5lZWQgdG8gbG9hZCB0aGUgcGFnZSBmaXJz
dCB0byBlbnN1cmUgdGhlIGljb24gZGF0YSB3aWxsIGJlCi0gICAgLy8gaW4gdGhlIGRhdGFiYXNl
IGluIGNhc2UgdGhlcmUncyBhbiBhc3NvY2lhdGVkIGZhdmljb24uCi0gICAgdGVzdC0+bG9hZFVS
SShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvZm9vIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0
VW50aWxGYXZpY29uQ2hhbmdlZCgpOwotICAgIENTdHJpbmcgZmF2aWNvblVSSSA9IGtTZXJ2ZXIt
PmdldFVSSUZvclBhdGgoIi9pY29uL2Zhdmljb24uaWNvIik7Ci0KLSAgICAvLyBDaGVjayB0aGUg
QVBJIHJldHJpZXZpbmcgYSB2YWxpZCBmYXZpY29uLgotICAgIHRlc3QtPmdldEZhdmljb25Gb3JQ
YWdlVVJJQW5kV2FpdFVudGlsUmVhZHkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2ZvbyIpLmRh
dGEoKSk7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV9mYXZpY29uKTsKLSAgICBnX2Fzc2VydF9jbXBz
dHIodGVzdC0+bV9mYXZpY29uVVJJLmRhdGEoKSwgPT0sIGZhdmljb25VUkkuZGF0YSgpKTsKLSAg
ICBnX2Fzc2VydCghdGVzdC0+bV9lcnJvcik7Ci0KLSAgICAvLyBDaGVjayB0aGF0IHdpZHRoIGFu
ZCBoZWlnaHQgbWF0Y2ggdGhvc2UgZnJvbSBibGFuay5pY28gKDE2eDE2IGZhdmljb24pLgotICAg
IGdfYXNzZXJ0X2NtcGludChjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aCh0ZXN0LT5tX2Zh
dmljb24pLCA9PSwgMTYpOwotICAgIGdfYXNzZXJ0X2NtcGludChjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF9oZWlnaHQodGVzdC0+bV9mYXZpY29uKSwgPT0sIDE2KTsKLQotICAgIC8vIENoZWNrIHRo
YXQgYW5vdGhlciBwYWdlIHdpdGggdGhlIHNhbWUgZmF2aWNvbiByZXR1cm4gdGhlIHNhbWUgaWNv
bi4KLSAgICBjYWlyb19zdXJmYWNlX3QqIGZhdmljb24gPSBjYWlyb19zdXJmYWNlX3JlZmVyZW5j
ZSh0ZXN0LT5tX2Zhdmljb24pOwotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9y
UGF0aCgiL2JhciIpLmRhdGEoKSk7Ci0gICAgLy8gSXQncyBhIG5ldyBwYWdlIGluIHRoZSBkYXRh
YmFzZSwgc28gZmF2aWNvbiB3aWxsIGNoYW5nZSB0d2ljZSwgZmlyc3QgdG8gcmVzZXQgaXQKLSAg
ICAvLyBhbmQgdGhlbiB3aGVuIHRoZSBpY29uIGlzIGxvYWRlZC4KLSAgICB0ZXN0LT53YWl0VW50
aWxGYXZpY29uQ2hhbmdlZCgpOwotICAgIHRlc3QtPndhaXRVbnRpbEZhdmljb25DaGFuZ2VkKCk7
Ci0gICAgdGVzdC0+Z2V0RmF2aWNvbkZvclBhZ2VVUklBbmRXYWl0VW50aWxSZWFkeShrU2VydmVy
LT5nZXRVUklGb3JQYXRoKCIvYmFyIikuZGF0YSgpKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX2Zh
dmljb24pOwotICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXN0LT5tX2Zhdmljb25VUkkuZGF0YSgpLCA9
PSwgZmF2aWNvblVSSS5kYXRhKCkpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fZmF2aWNvbiA9PSBm
YXZpY29uKTsKLSAgICBnX2Fzc2VydCghdGVzdC0+bV9lcnJvcik7Ci0gICAgY2Fpcm9fc3VyZmFj
ZV9kZXN0cm95KGZhdmljb24pOwotCi0gICAgLy8gQ2hlY2sgdGhlIEFQSSByZXRyaWV2aW5nIGFu
IGludmFsaWQgZmF2aWNvbi4KLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBh
dGgoIi9ub2Zhdmljb24iKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbEZhdmljb25DaGFu
Z2VkKCk7Ci0KLSAgICB0ZXN0LT5nZXRGYXZpY29uRm9yUGFnZVVSSUFuZFdhaXRVbnRpbFJlYWR5
KGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9ub2Zhdmljb24iKS5kYXRhKCkpOwotICAgIGdfYXNz
ZXJ0KCF0ZXN0LT5tX2Zhdmljb24pOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fZXJyb3IpOwotfQot
Ci1zdGF0aWMgdm9pZCB0ZXN0R2V0RmF2aWNvblVSSShGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0
KQotewotICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfd2ViX2Nv
bnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2UodGVzdC0+bV93ZWJDb250ZXh0KTsKLQotICAgIENT
dHJpbmcgYmFzZVVSSSA9IGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9mb28iKTsKLSAgICBHT3du
UHRyPGNoYXI+IGljb25VUkkod2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fdXJp
KGRhdGFiYXNlLCBiYXNlVVJJLmRhdGEoKSkpOwotICAgIEFTU0VSVF9DTVBfQ1NUUklORyhpY29u
VVJJLmdldCgpLCA9PSwga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2ljb24vZmF2aWNvbi5pY28i
KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3RmF2aWNvbihGYXZpY29uRGF0YWJhc2VU
ZXN0KiB0ZXN0KQotewotICAgIHRlc3QtPm1fZmF2aWNvblVSSSA9IENTdHJpbmcoKTsKLQotICAg
IGNhaXJvX3N1cmZhY2VfdCogaWNvbkZyb21XZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X2dldF9m
YXZpY29uKHRlc3QtPm1fd2ViVmlldyk7Ci0gICAgZ19hc3NlcnQoIWljb25Gcm9tV2ViVmlldyk7
Ci0KLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9mb28iKS5kYXRh
KCkpOwotICAgIHRlc3QtPndhaXRVbnRpbEZhdmljb25DaGFuZ2VkKCk7Ci0gICAgZ19hc3NlcnQo
dGVzdC0+bV9mYXZpY29uTm90aWZpY2F0aW9uUmVjZWl2ZWQpOwotICAgIC8vIFRoZSBpY29uIGlz
IGtub3duIGFuZCBoYXNuJ3QgY2hhbmdlZCBpbiB0aGUgZGF0YWJhc2UsIHNvIG5vdGlmeTo6ZmF2
aWNvbiBpcyBlbWl0dGVkCi0gICAgLy8gYnV0IFdlYktpdEZhdmljb25EYXRhYmFzZTo6aWNvbi1j
aGFuZ2VkIGlzbid0LgotICAgIGdfYXNzZXJ0KHRlc3QtPm1fZmF2aWNvblVSSS5pc051bGwoKSk7
Ci0KLSAgICBpY29uRnJvbVdlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2Zhdmljb24odGVz
dC0+bV93ZWJWaWV3KTsKLSAgICBnX2Fzc2VydChpY29uRnJvbVdlYlZpZXcpOwotICAgIGdfYXNz
ZXJ0X2NtcHVpbnQoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoaWNvbkZyb21XZWJWaWV3
KSwgPT0sIDE2KTsKLSAgICBnX2Fzc2VydF9jbXB1aW50KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0
X2hlaWdodChpY29uRnJvbVdlYlZpZXcpLCA9PSwgMTYpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0
RmF2aWNvbkRhdGFiYXNlKEZhdmljb25EYXRhYmFzZVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIp
Ci17Ci0gICAgLy8gVGhlc2UgdGVzdHMgZGVwZW5kIG9uIHRoaXMgb3JkZXIgdG8gcnVuIHByb3Bl
cmx5IHNvIHdlIGRlY2xhcmUgdGhlbSBpbiBhIHNpbmdsZSBvbmUuCi0gICAgLy8gU2VlIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTE0MzQuCi0gICAgdGVzdE5vdElu
aXRpYWxpemVkKHRlc3QpOwotICAgIHRlc3RTZXREaXJlY3RvcnkodGVzdCk7Ci0gICAgdGVzdEdl
dEZhdmljb24odGVzdCk7Ci0gICAgdGVzdEdldEZhdmljb25VUkkodGVzdCk7Ci0gICAgdGVzdFdl
YlZpZXdGYXZpY29uKHRlc3QpOwotICAgIHRlc3RDbGVhckRhdGFiYXNlKHRlc3QpOwotfQotCi12
b2lkIGJlZm9yZUFsbCgpCi17Ci0gICAgLy8gU3RhcnQgYSBzb3VwIHNlcnZlciBmb3IgdGVzdGlu
Zy4KLSAgICBrU2VydmVyID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIoKTsKLSAgICBrU2VydmVyLT5y
dW4oc2VydmVyQ2FsbGJhY2spOwotCi0gICAga1RlbXBEaXJlY3RvcnkgPSBnX2Rpcl9tYWtlX3Rt
cCgiV2ViS2l0MlRlc3RzLVhYWFhYWCIsIDApOwotICAgIGdfYXNzZXJ0KGtUZW1wRGlyZWN0b3J5
KTsKLQotICAgIC8vIEFkZCB0ZXN0cyB0byB0aGUgc3VpdGUuCi0gICAgRmF2aWNvbkRhdGFiYXNl
VGVzdDo6YWRkKCJXZWJLaXRGYXZpY29uRGF0YWJhc2UiLCAiZmF2aWNvbi1kYXRhYmFzZS10ZXN0
IiwgdGVzdEZhdmljb25EYXRhYmFzZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdEZhdmljb25E
YXRhYmFzZUZpbmFsaXplZENhbGxiYWNrKGdwb2ludGVyLCBHT2JqZWN0KikKLXsKLSAgICBpZiAo
IWdfZmlsZV90ZXN0KGtUZW1wRGlyZWN0b3J5LCBHX0ZJTEVfVEVTVF9JU19ESVIpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBHT3duUHRyPGNoYXI+IGZpbGVuYW1lKGdfYnVpbGRfZmlsZW5hbWUo
a1RlbXBEaXJlY3RvcnksICJXZWJwYWdlSWNvbnMuZGIiLCBOVUxMKSk7Ci0gICAgZ191bmxpbmso
ZmlsZW5hbWUuZ2V0KCkpOwotCi0gICAgZ19ybWRpcihrVGVtcERpcmVjdG9yeSk7Ci19Ci0KLXZv
aWQgYWZ0ZXJBbGwoKQotewotICAgIGRlbGV0ZSBrU2VydmVyOwotCi0gICAgLy8gRGVsZXRlIHRo
ZSB0ZW1wb3JhcnkgZmlsZXMgYWZ0ZXIgdGhlIEljb25EYXRhYmFzZSBoYXMgYmVlbgotICAgIC8v
IGNsb3NlZCwgdGhhdCBpcywgb25jZSBXZWJLaXRGYXZpY29uRGF0YWJhc2UgaXMgYmVpbmcgZGVz
dHJveWVkLgotICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfd2Vi
X2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2Uod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZh
dWx0KCkpOwotICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGRhdGFiYXNlKSwgd2Via2l0
RmF2aWNvbkRhdGFiYXNlRmluYWxpemVkQ2FsbGJhY2ssIDApOwotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdEZpbmRDb250cm9s
bGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJL
aXRGaW5kQ29udHJvbGxlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyZWVm
NGMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
VGVzdFdlYktpdEZpbmRDb250cm9sbGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMzNSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0KLSNpbmNsdWRlICJMb2FkVHJhY2tpbmdUZXN0LmgiCi0jaW5jbHVkZSA8Z3RrL2d0
ay5oPgotI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0
L0dSZWZQdHIuaD4KLQotc3RhdGljIGNvbnN0IGNoYXIqIHRlc3RTdHJpbmcgPSAiPGh0bWw+PGJv
ZHk+Zmlyc3QgdGVzdGluZyBzZWNvbmQgdGVzdGluZyBzZWNvbmRIYWxmPC9ib2R5PjwvaHRtbD4i
OwotCi1jbGFzcyBGaW5kQ29udHJvbGxlclRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7Ci1wdWJs
aWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShGaW5kQ29udHJvbGxlclRlc3QpOwotCi0g
ICAgRmluZENvbnRyb2xsZXJUZXN0KCkKLSAgICAgICAgOiBtX2ZpbmRDb250cm9sbGVyKHdlYmtp
dF93ZWJfdmlld19nZXRfZmluZF9jb250cm9sbGVyKG1fd2ViVmlldykpCi0gICAgICAgICwgbV9y
dW5GaW5kVW50aWxDb21wbGV0aW9uKGZhbHNlKQotICAgIHsKLSAgICAgICAgYXNzZXJ0T2JqZWN0
SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChtX2ZpbmRDb250cm9sbGVyLmdldCgp
KSk7Ci0gICAgfQotCi0gICAgfkZpbmRDb250cm9sbGVyVGVzdCgpCi0gICAgewotICAgICAgICBp
ZiAobV9maW5kQ29udHJvbGxlcikKLSAgICAgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nv
bm5lY3RfbWF0Y2hlZChtX2ZpbmRDb250cm9sbGVyLmdldCgpLCBHX1NJR05BTF9NQVRDSF9EQVRB
LCAwLCAwLCAwLCAwLCB0aGlzKTsKLSAgICB9Ci0KLSAgICB2b2lkIGZpbmQoY29uc3QgY2hhciog
c2VhcmNoVGV4dCwgZ3VpbnQzMiBmaW5kT3B0aW9ucywgZ3VpbnQgbWF4TWF0Y2hDb3VudCkKLSAg
ICB7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9maW5kQ29udHJvbGxlci5nZXQoKSwgImZv
dW5kLXRleHQiLCBHX0NBTExCQUNLKGZvdW5kVGV4dENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgICAg
IGdfc2lnbmFsX2Nvbm5lY3QobV9maW5kQ29udHJvbGxlci5nZXQoKSwgImZhaWxlZC10by1maW5k
LXRleHQiLCBHX0NBTExCQUNLKGZhaWxlZFRvRmluZFRleHRDYWxsYmFjayksIHRoaXMpOwotICAg
ICAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaChtX2ZpbmRDb250cm9sbGVyLmdldCgp
LCBzZWFyY2hUZXh0LCBmaW5kT3B0aW9ucywgbWF4TWF0Y2hDb3VudCk7Ci0gICAgfQotCi0gICAg
dm9pZCBjb3VudChjb25zdCBjaGFyKiBzZWFyY2hUZXh0LCBndWludDMyIGZpbmRPcHRpb25zLCBn
dWludCBtYXhNYXRjaENvdW50KQotICAgIHsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX2Zp
bmRDb250cm9sbGVyLmdldCgpLCAiY291bnRlZC1tYXRjaGVzIiwgR19DQUxMQkFDSyhjb3VudGVk
TWF0Y2hlc0NhbGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJf
Y291bnRfbWF0Y2hlcyhtX2ZpbmRDb250cm9sbGVyLmdldCgpLCBzZWFyY2hUZXh0LCBmaW5kT3B0
aW9ucywgbWF4TWF0Y2hDb3VudCk7Ci0gICAgfQotCi0gICAgdm9pZCB3YWl0VW50aWxGaW5kRmlu
aXNoZWQoKQotICAgIHsKLSAgICAgICAgbV9ydW5GaW5kVW50aWxDb21wbGV0aW9uID0gdHJ1ZTsK
LSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIEdSZWZQ
dHI8V2ViS2l0RmluZENvbnRyb2xsZXI+IG1fZmluZENvbnRyb2xsZXI7Ci0gICAgYm9vbCBtX3Rl
eHRGb3VuZDsKLSAgICB1bnNpZ25lZCBtX21hdGNoQ291bnQ7Ci0KLXByaXZhdGU6Ci0gICAgYm9v
bCBtX3J1bkZpbmRVbnRpbENvbXBsZXRpb247Ci0KLSAgICBzdGF0aWMgdm9pZCBmb3VuZFRleHRD
YWxsYmFjayhXZWJLaXRGaW5kQ29udHJvbGxlciosIGd1aW50IG1hdGNoQ291bnQsIEZpbmRDb250
cm9sbGVyVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHRlc3QtPm1fdGV4dEZvdW5kID0gdHJ1
ZTsKLSAgICAgICAgdGVzdC0+bV9tYXRjaENvdW50ID0gbWF0Y2hDb3VudDsKLSAgICAgICAgaWYg
KHRlc3QtPm1fcnVuRmluZFVudGlsQ29tcGxldGlvbikKLSAgICAgICAgICAgIGdfbWFpbl9sb29w
X3F1aXQodGVzdC0+bV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgZmFpbGVk
VG9GaW5kVGV4dENhbGxiYWNrKFdlYktpdEZpbmRDb250cm9sbGVyKiwgRmluZENvbnRyb2xsZXJU
ZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+bV90ZXh0Rm91bmQgPSBmYWxzZTsKLSAg
ICAgICAgaWYgKHRlc3QtPm1fcnVuRmluZFVudGlsQ29tcGxldGlvbikKLSAgICAgICAgICAgIGdf
bWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZv
aWQgY291bnRlZE1hdGNoZXNDYWxsYmFjayhXZWJLaXRGaW5kQ29udHJvbGxlciosIGd1aW50IG1h
dGNoQ291bnQsIEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHRlc3Qt
Pm1fbWF0Y2hDb3VudCA9IG1hdGNoQ291bnQ7Ci0gICAgICAgIGlmICh0ZXN0LT5tX3J1bkZpbmRV
bnRpbENvbXBsZXRpb24pCi0gICAgICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFp
bkxvb3ApOwotICAgIH0KLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RGaW5kQ29udHJvbGxlclRleHRG
b3VuZChGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVz
dC0+bG9hZEh0bWwodGVzdFN0cmluZywgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlz
aGVkKCk7Ci0KLSAgICB0ZXN0LT5maW5kKCJ0ZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19O
T05FLCAxKTsKLSAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKLQotICAgIGdfYXNz
ZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9s
bGVyVGV4dE5vdEZvdW5kKEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikK
LXsKLSAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0U3RyaW5nLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50
aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIHRlc3QtPmZpbmQoIm5vdEZvdW5kIiwgV0VCS0lUX0ZJ
TkRfT1BUSU9OU19OT05FLCAxKTsKLSAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsK
LQotICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX3RleHRGb3VuZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRl
c3RGaW5kQ29udHJvbGxlck1hdGNoQ291bnQoRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0LCBnY29u
c3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxvYWRIdG1sKHRlc3RTdHJpbmcsIDApOwotICAgIHRl
c3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgdGVzdC0+ZmluZCgidGVzdGluZyIs
IFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwgMik7Ci0gICAgdGVzdC0+d2FpdFVudGlsRmluZEZp
bmlzaGVkKCk7Ci0KLSAgICBnX2Fzc2VydCh0ZXN0LT5tX21hdGNoQ291bnQgPT0gMik7Ci0gICAg
Z19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0RmluZENv
bnRyb2xsZXJNYXhNYXRjaENvdW50KEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCwgZ2NvbnN0cG9p
bnRlcikKLXsKLSAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0U3RyaW5nLCAwKTsKLSAgICB0ZXN0LT53
YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIHRlc3QtPmZpbmQoInRlc3RpbmciLCBXRUJL
SVRfRklORF9PUFRJT05TX05PTkUsIDEpOwotICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hl
ZCgpOwotCi0gICAgZ19hc3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09IEdfTUFYVUlOVCk7Ci0g
ICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0Rmlu
ZENvbnRyb2xsZXJOZXh0KEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikK
LXsKLSAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0U3RyaW5nLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50
aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIHRlc3QtPmZpbmQoInRlc3RpbmciLCBXRUJLSVRfRklO
RF9PUFRJT05TX05PTkUsIDIpOwotICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOwot
Ci0gICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1f
bWF0Y2hDb3VudCA9PSAyKTsKLQotICAgIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX25l
eHQodGVzdC0+bV9maW5kQ29udHJvbGxlci5nZXQoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsRmlu
ZEZpbmlzaGVkKCk7Ci0KLSAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7Ci0gICAgZ19h
c3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09IDEpOwotICAgIGdfYXNzZXJ0KCEod2Via2l0X2Zp
bmRfY29udHJvbGxlcl9nZXRfb3B0aW9ucyh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKSAm
IFdFQktJVF9GSU5EX09QVElPTlNfQkFDS1dBUkRTKSk7Ci0KLSAgICB3ZWJraXRfZmluZF9jb250
cm9sbGVyX3NlYXJjaF9uZXh0KHRlc3QtPm1fZmluZENvbnRyb2xsZXIuZ2V0KCkpOwotICAgIHRl
c3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3NlcnQoIXRlc3QtPm1fdGV4
dEZvdW5kKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX21hdGNoQ291bnQgPT0gMSk7Ci0gICAgZ19h
c3NlcnQoISh3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9vcHRpb25zKHRlc3QtPm1fZmluZENv
bnRyb2xsZXIuZ2V0KCkpICYgV0VCS0lUX0ZJTkRfT1BUSU9OU19CQUNLV0FSRFMpKTsKLX0KLQot
c3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVyUHJldmlvdXMoRmluZENvbnRyb2xsZXJUZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxvYWRIdG1sKHRlc3RTdHJpbmcs
IDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgdGVzdC0+Zmlu
ZCgidGVzdGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwgMik7Ci0gICAgdGVzdC0+d2Fp
dFVudGlsRmluZEZpbmlzaGVkKCk7Ci0KLSAgICBnX2Fzc2VydCh0ZXN0LT5tX21hdGNoQ291bnQg
PT0gMik7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOwotCi0gICAgd2Via2l0X2Zp
bmRfY29udHJvbGxlcl9zZWFyY2hfbmV4dCh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKTsK
LSAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0KHRlc3Qt
Pm1fdGV4dEZvdW5kKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX21hdGNoQ291bnQgPT0gMSk7Ci0g
ICAgZ19hc3NlcnQoISh3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9vcHRpb25zKHRlc3QtPm1f
ZmluZENvbnRyb2xsZXIuZ2V0KCkpICYgV0VCS0lUX0ZJTkRfT1BUSU9OU19CQUNLV0FSRFMpKTsK
LQotICAgIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX3ByZXZpb3VzKHRlc3QtPm1fZmlu
ZENvbnRyb2xsZXIuZ2V0KCkpOwotICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOwot
Ci0gICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1f
bWF0Y2hDb3VudCA9PSAxKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfZmluZF9jb250cm9sbGVyX2dl
dF9vcHRpb25zKHRlc3QtPm1fZmluZENvbnRyb2xsZXIuZ2V0KCkpICYgV0VCS0lUX0ZJTkRfT1BU
SU9OU19CQUNLV0FSRFMpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xsZXJDb3Vu
dGVkTWF0Y2hlcyhGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0g
ICAgdGVzdC0+bG9hZEh0bWwodGVzdFN0cmluZywgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9h
ZEZpbmlzaGVkKCk7Ci0KLSAgICB0ZXN0LT5jb3VudCgidGVzdGluZyIsIFdFQktJVF9GSU5EX09Q
VElPTlNfTk9ORSwgMik7Ci0gICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7Ci0KLSAg
ICBnX2Fzc2VydCh0ZXN0LT5tX21hdGNoQ291bnQgPT0gMik7Ci0KLSAgICB0ZXN0LT5jb3VudCgi
Zmlyc3QiLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUsIDIpOwotICAgIHRlc3QtPndhaXRVbnRp
bEZpbmRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09IDEp
OwotCi0gICAgdGVzdC0+Y291bnQoIm5vdEZvdW5kIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05F
LCAyKTsKLSAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0
KCF0ZXN0LT5tX21hdGNoQ291bnQpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xs
ZXJPcHRpb25zKEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAg
ICB0ZXN0LT5sb2FkSHRtbCh0ZXN0U3RyaW5nLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2Fk
RmluaXNoZWQoKTsKLQotICAgIHRlc3QtPmZpbmQoIlRlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJ
T05TX05PTkUsIDIpOwotICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOwotCi0gICAg
Z19hc3NlcnQoIXRlc3QtPm1fdGV4dEZvdW5kKTsKLQotICAgIHRlc3QtPmZpbmQoIlRlc3Rpbmci
LCBXRUJLSVRfRklORF9PUFRJT05TX0NBU0VfSU5TRU5TSVRJVkUsIDIpOwotICAgIHRlc3QtPndh
aXRVbnRpbEZpbmRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQp
OwotCi0gICAgdGVzdC0+ZmluZCgiZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAy
KTsKLSAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0KHRl
c3QtPm1fdGV4dEZvdW5kKTsKLQotICAgIHRlc3QtPmZpbmQoImVzdGluZyIsIFdFQktJVF9GSU5E
X09QVElPTlNfQVRfV09SRF9TVEFSVFMsIDIpOwotICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5p
c2hlZCgpOwotCi0gICAgZ19hc3NlcnQoIXRlc3QtPm1fdGV4dEZvdW5kKTsKLQotICAgIHRlc3Qt
PmZpbmQoIkhhbGYiLCBXRUJLSVRfRklORF9PUFRJT05TX0FUX1dPUkRfU1RBUlRTLCAyKTsKLSAg
ICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0KCF0ZXN0LT5t
X3RleHRGb3VuZCk7Ci0KLSAgICB0ZXN0LT5maW5kKCJIYWxmIiwgV0VCS0lUX0ZJTkRfT1BUSU9O
U19BVF9XT1JEX1NUQVJUUyB8IFdFQktJVF9GSU5EX09QVElPTlNfVFJFQVRfTUVESUFMX0NBUElU
QUxfQVNfV09SRF9TVEFSVCwgMik7Ci0gICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7
Ci0KLSAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7Ci0KLSAgICB0ZXN0LT5maW5kKCJ0
ZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19XUkFQX0FST1VORCwgMyk7Ci0gICAgdGVzdC0+
d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQp
OwotCi0gICAgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfbmV4dCh0ZXN0LT5tX2ZpbmRD
b250cm9sbGVyLmdldCgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKLSAg
ICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7Ci0KLSAgICB3ZWJraXRfZmluZF9jb250cm9s
bGVyX3NlYXJjaF9uZXh0KHRlc3QtPm1fZmluZENvbnRyb2xsZXIuZ2V0KCkpOwotICAgIHRlc3Qt
PndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5k
KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVySGlkZShGaW5kQ29udHJvbGxl
clRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+bG9hZEh0bWwodGVzdFN0
cmluZywgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICB0ZXN0
LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKLQotICAgIGNhaXJvX3N1cmZhY2Vf
dCogb3JpZ2luYWxTdXJmYWNlID0gY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2UoCi0gICAgICAgIHRl
c3QtPmdldFNuYXBzaG90QW5kV2FpdFVudGlsUmVhZHkoV0VCS0lUX1NOQVBTSE9UX1JFR0lPTl9G
VUxMX0RPQ1VNRU5ULCBXRUJLSVRfU05BUFNIT1RfT1BUSU9OU19OT05FKSk7Ci0gICAgZ19hc3Nl
cnQob3JpZ2luYWxTdXJmYWNlKTsKLQotICAgIHRlc3QtPmZpbmQoInRlc3RpbmciLCBXRUJLSVRf
RklORF9PUFRJT05TX05PTkUsIDEpOwotICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgp
OwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKLQotICAgIGNhaXJvX3N1cmZhY2Vf
dCogaGlnaGxpZ2h0U3VyZmFjZSA9IGNhaXJvX3N1cmZhY2VfcmVmZXJlbmNlKAotICAgICAgICB0
ZXN0LT5nZXRTbmFwc2hvdEFuZFdhaXRVbnRpbFJlYWR5KFdFQktJVF9TTkFQU0hPVF9SRUdJT05f
RlVMTF9ET0NVTUVOVCwgV0VCS0lUX1NOQVBTSE9UX09QVElPTlNfTk9ORSkpOwotICAgIGdfYXNz
ZXJ0KGhpZ2hsaWdodFN1cmZhY2UpOwotICAgIGdfYXNzZXJ0KCFUZXN0OjpjYWlyb1N1cmZhY2Vz
RXF1YWwob3JpZ2luYWxTdXJmYWNlLCBoaWdobGlnaHRTdXJmYWNlKSk7Ci0KLSAgICBXZWJLaXRG
aW5kQ29udHJvbGxlciogZmluZENvbnRyb2xsZXIgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ZpbmRf
Y29udHJvbGxlcih0ZXN0LT5tX3dlYlZpZXcpOwotICAgIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJf
c2VhcmNoX2ZpbmlzaChmaW5kQ29udHJvbGxlcik7Ci0gICAgd2Via2l0X3dlYl92aWV3X2V4ZWN1
dGVfZWRpdGluZ19jb21tYW5kKHRlc3QtPm1fd2ViVmlldywgIlVuc2VsZWN0Iik7Ci0KLSAgICBj
YWlyb19zdXJmYWNlX3QqIHVuaGlnaGxpZ2h0U3VyZmFjZSA9IGNhaXJvX3N1cmZhY2VfcmVmZXJl
bmNlKAotICAgICAgICB0ZXN0LT5nZXRTbmFwc2hvdEFuZFdhaXRVbnRpbFJlYWR5KFdFQktJVF9T
TkFQU0hPVF9SRUdJT05fRlVMTF9ET0NVTUVOVCwgV0VCS0lUX1NOQVBTSE9UX09QVElPTlNfTk9O
RSkpOwotICAgIGdfYXNzZXJ0KHVuaGlnaGxpZ2h0U3VyZmFjZSk7Ci0gICAgZ19hc3NlcnQoVGVz
dDo6Y2Fpcm9TdXJmYWNlc0VxdWFsKG9yaWdpbmFsU3VyZmFjZSwgdW5oaWdobGlnaHRTdXJmYWNl
KSk7Ci0KLSAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3kob3JpZ2luYWxTdXJmYWNlKTsKLSAgICBj
YWlyb19zdXJmYWNlX2Rlc3Ryb3koaGlnaGxpZ2h0U3VyZmFjZSk7Ci0gICAgY2Fpcm9fc3VyZmFj
ZV9kZXN0cm95KHVuaGlnaGxpZ2h0U3VyZmFjZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RGaW5k
Q29udHJvbGxlckluc3RhbmNlKEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRl
cikKLXsKLSAgICBXZWJLaXRGaW5kQ29udHJvbGxlciogZmluZENvbnRyb2xsZXIxID0gd2Via2l0
X3dlYl92aWV3X2dldF9maW5kX2NvbnRyb2xsZXIodGVzdC0+bV93ZWJWaWV3KTsKLSAgICBXZWJL
aXRGaW5kQ29udHJvbGxlciogZmluZENvbnRyb2xsZXIyID0gd2Via2l0X3dlYl92aWV3X2dldF9m
aW5kX2NvbnRyb2xsZXIodGVzdC0+bV93ZWJWaWV3KTsKLQotICAgIGdfYXNzZXJ0KGZpbmRDb250
cm9sbGVyMSA9PSBmaW5kQ29udHJvbGxlcjIpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0RmluZENv
bnRyb2xsZXJHZXR0ZXJzKEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikK
LXsKLSAgICBjb25zdCBjaGFyKiBzZWFyY2hUZXh0ID0gInRlc3RpbmciOwotICAgIGd1aW50IG1h
eE1hdGNoQ291bnQgPSAxOwotICAgIGd1aW50MzIgZmluZE9wdGlvbnMgPSBXRUJLSVRfRklORF9P
UFRJT05TX1dSQVBfQVJPVU5EIHwgV0VCS0lUX0ZJTkRfT1BUSU9OU19BVF9XT1JEX1NUQVJUUzsK
LSAgICBXZWJLaXRGaW5kQ29udHJvbGxlciogZmluZENvbnRyb2xsZXIgPSB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X2ZpbmRfY29udHJvbGxlcih0ZXN0LT5tX3dlYlZpZXcpOwotCi0gICAgd2Via2l0X2Zp
bmRfY29udHJvbGxlcl9zZWFyY2goZmluZENvbnRyb2xsZXIsIHNlYXJjaFRleHQsIGZpbmRPcHRp
b25zLCBtYXhNYXRjaENvdW50KTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfZmluZF9jb250cm9sbGVy
X2dldF93ZWJfdmlldyhmaW5kQ29udHJvbGxlcikgPT0gdGVzdC0+bV93ZWJWaWV3KTsKLSAgICBn
X2Fzc2VydCghZ19zdHJjbXAwKHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X3NlYXJjaF90ZXh0
KGZpbmRDb250cm9sbGVyKSwgc2VhcmNoVGV4dCkpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9maW5k
X2NvbnRyb2xsZXJfZ2V0X21heF9tYXRjaF9jb3VudChmaW5kQ29udHJvbGxlcikgPT0gbWF4TWF0
Y2hDb3VudCk7Ci0gICAgZ19hc3NlcnQod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfb3B0aW9u
cyhmaW5kQ29udHJvbGxlcikgPT0gZmluZE9wdGlvbnMpOwotfQotCi12b2lkIGJlZm9yZUFsbCgp
Ci17Ci0gICAgRmluZENvbnRyb2xsZXJUZXN0OjphZGQoIldlYktpdEZpbmRDb250cm9sbGVyIiwg
ImdldHRlcnMiLCB0ZXN0RmluZENvbnRyb2xsZXJHZXR0ZXJzKTsKLSAgICBGaW5kQ29udHJvbGxl
clRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIiLCAiaW5zdGFuY2UiLCB0ZXN0RmluZENv
bnRyb2xsZXJJbnN0YW5jZSk7Ci0gICAgRmluZENvbnRyb2xsZXJUZXN0OjphZGQoIldlYktpdEZp
bmRDb250cm9sbGVyIiwgInRleHQtZm91bmQiLCB0ZXN0RmluZENvbnRyb2xsZXJUZXh0Rm91bmQp
OwotICAgIEZpbmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udHJvbGxlciIsICJ0
ZXh0LW5vdC1mb3VuZCIsIHRlc3RGaW5kQ29udHJvbGxlclRleHROb3RGb3VuZCk7Ci0gICAgRmlu
ZENvbnRyb2xsZXJUZXN0OjphZGQoIldlYktpdEZpbmRDb250cm9sbGVyIiwgIm1hdGNoLWNvdW50
IiwgdGVzdEZpbmRDb250cm9sbGVyTWF0Y2hDb3VudCk7Ci0gICAgRmluZENvbnRyb2xsZXJUZXN0
OjphZGQoIldlYktpdEZpbmRDb250cm9sbGVyIiwgIm1heC1tYXRjaC1jb3VudCIsIHRlc3RGaW5k
Q29udHJvbGxlck1heE1hdGNoQ291bnQpOwotICAgIEZpbmRDb250cm9sbGVyVGVzdDo6YWRkKCJX
ZWJLaXRGaW5kQ29udHJvbGxlciIsICJuZXh0IiwgdGVzdEZpbmRDb250cm9sbGVyTmV4dCk7Ci0g
ICAgRmluZENvbnRyb2xsZXJUZXN0OjphZGQoIldlYktpdEZpbmRDb250cm9sbGVyIiwgInByZXZp
b3VzIiwgdGVzdEZpbmRDb250cm9sbGVyUHJldmlvdXMpOwotICAgIEZpbmRDb250cm9sbGVyVGVz
dDo6YWRkKCJXZWJLaXRGaW5kQ29udHJvbGxlciIsICJjb3VudGVkLW1hdGNoZXMiLCB0ZXN0Rmlu
ZENvbnRyb2xsZXJDb3VudGVkTWF0Y2hlcyk7Ci0gICAgRmluZENvbnRyb2xsZXJUZXN0OjphZGQo
IldlYktpdEZpbmRDb250cm9sbGVyIiwgIm9wdGlvbnMiLCB0ZXN0RmluZENvbnRyb2xsZXJPcHRp
b25zKTsKLSAgICBGaW5kQ29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIi
LCAiaGlkZSIsIHRlc3RGaW5kQ29udHJvbGxlckhpZGUpOwotfQotCi12b2lkIGFmdGVyQWxsKCkK
LXsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L1Rlc3RXZWJLaXRQb2xpY3lDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvVGVzdFdlYktpdFBvbGljeUNsaWVudC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDIwOWVhMDQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFBvbGljeUNsaWVudC5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwyNjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5M
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJMb2FkVHJhY2tpbmdUZXN0LmgiCi0j
aW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5oIgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQ
dHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLXN0YXRpYyBXZWJLaXRUZXN0
U2VydmVyKiBrU2VydmVyOwotCi1jbGFzcyBQb2xpY3lDbGllbnRUZXN0OiBwdWJsaWMgTG9hZFRy
YWNraW5nVGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShQb2xpY3lD
bGllbnRUZXN0KTsKLQotICAgIGVudW0gUG9saWN5RGVjaXNpb25SZXNwb25zZSB7Ci0gICAgICAg
IFVzZSwKLSAgICAgICAgSWdub3JlLAotICAgICAgICBEb3dubG9hZCwKLSAgICAgICAgTm9uZQot
ICAgIH07Ci0KLSAgICBQb2xpY3lDbGllbnRUZXN0KCkKLSAgICAgICAgOiBMb2FkVHJhY2tpbmdU
ZXN0KCkKLSAgICAgICAgLCBtX3BvbGljeURlY2lzaW9uUmVzcG9uc2UoTm9uZSkKLSAgICAgICAg
LCBtX3BvbGljeURlY2lzaW9uVHlwZUZpbHRlcigwKQotICAgICAgICAsIG1fcmVzcG9uZFRvUG9s
aWN5RGVjaXNpb25Bc3luY2hyb25vdXNseShmYWxzZSkKLSAgICAgICAgLCBtX2hhbHRNYWluTG9v
cEFmdGVyTWFraW5nRGVjaXNpb24oZmFsc2UpCi0gICAgewotICAgICAgICBnX3NpZ25hbF9jb25u
ZWN0KG1fd2ViVmlldywgImRlY2lkZS1wb2xpY3kiLCBHX0NBTExCQUNLKGRlY2lkZVBvbGljeUNh
bGxiYWNrKSwgdGhpcyk7Ci0gICAgfQotCi0gICAgc3RhdGljIGdib29sZWFuIHF1aXRNYWluTG9v
cExhdGVyKEdNYWluTG9vcCogbG9vcCkKLSAgICB7Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQo
bG9vcCk7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBy
ZXNwb25kVG9Qb2xpY3lEZWNpc2lvbihQb2xpY3lDbGllbnRUZXN0KiB0ZXN0LCBXZWJLaXRQb2xp
Y3lEZWNpc2lvbiogZGVjaXNpb24pCi0gICAgewotICAgICAgICBzd2l0Y2ggKHRlc3QtPm1fcG9s
aWN5RGVjaXNpb25SZXNwb25zZSkgewotICAgICAgICBjYXNlIFVzZToKLSAgICAgICAgICAgIHdl
YmtpdF9wb2xpY3lfZGVjaXNpb25fdXNlKGRlY2lzaW9uKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIElnbm9yZToKLSAgICAgICAgICAgIHdlYmtpdF9wb2xpY3lfZGVjaXNpb25f
aWdub3JlKGRlY2lzaW9uKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERvd25s
b2FkOgotICAgICAgICAgICAgd2Via2l0X3BvbGljeV9kZWNpc2lvbl9kb3dubG9hZChkZWNpc2lv
bik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBOb25lOgotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodGVzdC0+bV9oYWx0TWFpbkxvb3BBZnRl
ck1ha2luZ0RlY2lzaW9uKQotICAgICAgICAgICAgZ19pZGxlX2FkZChyZWludGVycHJldF9jYXN0
PEdTb3VyY2VGdW5jPihxdWl0TWFpbkxvb3BMYXRlciksIHRlc3QtPm1fbWFpbkxvb3ApOwotICAg
IH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiByZXNwb25kVG9Qb2xpY3lEZWNpc2lvbkxhdGVyKFBv
bGljeUNsaWVudFRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICByZXNwb25kVG9Qb2xpY3lEZWNp
c2lvbih0ZXN0LCB0ZXN0LT5tX3ByZXZpb3VzUG9saWN5RGVjaXNpb24uZ2V0KCkpOwotICAgICAg
ICB0ZXN0LT5tX3ByZXZpb3VzUG9saWN5RGVjaXNpb24gPSAwOwotICAgICAgICByZXR1cm4gRkFM
U0U7Ci0gICAgfQotCi0gICAgc3RhdGljIGdib29sZWFuIGRlY2lkZVBvbGljeUNhbGxiYWNrKFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFBvbGljeURlY2lzaW9uKiBkZWNpc2lvbiwgV2Vi
S2l0UG9saWN5RGVjaXNpb25UeXBlIHR5cGUsIFBvbGljeUNsaWVudFRlc3QqIHRlc3QpCi0gICAg
ewotICAgICAgICBpZiAodGVzdC0+bV9wb2xpY3lEZWNpc2lvblR5cGVGaWx0ZXIgIT0gdHlwZSkK
LSAgICAgICAgICAgIHJldHVybiBGQUxTRTsKLQotICAgICAgICB0ZXN0LT5tX3ByZXZpb3VzUG9s
aWN5RGVjaXNpb24gPSBkZWNpc2lvbjsKLSAgICAgICAgaWYgKHRlc3QtPm1fcmVzcG9uZFRvUG9s
aWN5RGVjaXNpb25Bc3luY2hyb25vdXNseSkgewotICAgICAgICAgICAgZ19pZGxlX2FkZChyZWlu
dGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihyZXNwb25kVG9Qb2xpY3lEZWNpc2lvbkxhdGVyKSwg
dGVzdCk7Ci0gICAgICAgICAgICByZXR1cm4gVFJVRTsKLSAgICAgICAgfQotCi0gICAgICAgIHJl
c3BvbmRUb1BvbGljeURlY2lzaW9uKHRlc3QsIGRlY2lzaW9uKTsKLQotICAgICAgICAvLyBXZSBy
ZXR1cm4gRkFMU0UgaGVyZSB0byBlbnN1cmUgdGhhdCB0aGUgZGVmYXVsdCBwb2xpY3kgZGVjaXNp
b24KLSAgICAgICAgLy8gaGFuZGxlciBkb2Vzbid0IG92ZXJyaWRlIHdoYXRldmVyIHdlIHVzZSBo
ZXJlLgotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gICAgUG9saWN5RGVjaXNpb25S
ZXNwb25zZSBtX3BvbGljeURlY2lzaW9uUmVzcG9uc2U7Ci0gICAgaW50IG1fcG9saWN5RGVjaXNp
b25UeXBlRmlsdGVyOwotICAgIGJvb2wgbV9yZXNwb25kVG9Qb2xpY3lEZWNpc2lvbkFzeW5jaHJv
bm91c2x5OwotICAgIGJvb2wgbV9oYWx0TWFpbkxvb3BBZnRlck1ha2luZ0RlY2lzaW9uOwotICAg
IEdSZWZQdHI8V2ViS2l0UG9saWN5RGVjaXNpb24+IG1fcHJldmlvdXNQb2xpY3lEZWNpc2lvbjsK
LX07Ci0KLXN0YXRpYyB2b2lkIHRlc3ROYXZpZ2F0aW9uUG9saWN5KFBvbGljeUNsaWVudFRlc3Qq
IHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+bV9wb2xpY3lEZWNpc2lvblR5cGVG
aWx0ZXIgPSBXRUJLSVRfUE9MSUNZX0RFQ0lTSU9OX1RZUEVfTkFWSUdBVElPTl9BQ1RJT047Ci0K
LSAgICB0ZXN0LT5tX3BvbGljeURlY2lzaW9uUmVzcG9uc2UgPSBQb2xpY3lDbGllbnRUZXN0OjpV
c2U7Ci0gICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sLz4iLCAiaHR0cDovL3dlYmtpdGd0ay5vcmcv
Iik7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgZ19hc3NlcnRfY21w
aW50KHRlc3QtPm1fbG9hZEV2ZW50cy5zaXplKCksID09LCAzKTsKLQotICAgIC8vIElkZWFsbHkg
d2UnZCBsaWtlIHRvIGhhdmUgYSBtb3JlIGludGVuc2l2ZSB0ZXN0IGhlcmUsIGJ1dCBpdCdzIHN0
aWxsIHByZXR0eSB0cmlja3kKLSAgICAvLyB0byB0cmlnZ2VyIGRpZmZlcmVudCB0eXBlcyBvZiBu
YXZpZ2F0aW9ucyB3aXRoIHRoZSBHVEsrIFdlYktpdDIgQVBJLgotICAgIFdlYktpdE5hdmlnYXRp
b25Qb2xpY3lEZWNpc2lvbiogZGVjaXNpb24gPSBXRUJLSVRfTkFWSUdBVElPTl9QT0xJQ1lfREVD
SVNJT04odGVzdC0+bV9wcmV2aW91c1BvbGljeURlY2lzaW9uLmdldCgpKTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQod2Via2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF9uYXZpZ2F0aW9u
X3R5cGUoZGVjaXNpb24pLCA9PSwgV0VCS0lUX05BVklHQVRJT05fVFlQRV9PVEhFUik7Ci0gICAg
Z19hc3NlcnRfY21waW50KHdlYmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRfbW91
c2VfYnV0dG9uKGRlY2lzaW9uKSwgPT0sIDApOwotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRf
bmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0X21vZGlmaWVycyhkZWNpc2lvbiksID09LCAw
KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9u
X2dldF9mcmFtZV9uYW1lKGRlY2lzaW9uKSwgPT0sIDApOwotICAgIFdlYktpdFVSSVJlcXVlc3Qq
IHJlcXVlc3QgPSB3ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0X3JlcXVlc3Qo
ZGVjaXNpb24pOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3Vy
aShyZXF1ZXN0KSwgPT0sICJodHRwOi8vd2Via2l0Z3RrLm9yZy8iKTsKLQotICAgIHRlc3QtPm1f
cG9saWN5RGVjaXNpb25SZXNwb25zZSA9IFBvbGljeUNsaWVudFRlc3Q6OlVzZTsKLSAgICB0ZXN0
LT5tX3Jlc3BvbmRUb1BvbGljeURlY2lzaW9uQXN5bmNocm9ub3VzbHkgPSB0cnVlOwotICAgIHRl
c3QtPmxvYWRIdG1sKCI8aHRtbC8+IiwgImh0dHA6Ly93ZWJraXRndGsub3JnLyIpOwotICAgIHRl
c3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5t
X2xvYWRFdmVudHMuc2l6ZSgpLCA9PSwgMyk7Ci0KLSAgICAvLyBJZiB3ZSBhcmUgd2FpdGluZyB1
bnRpbCBsb2FkIGNvbXBsZXRpb24sIGl0IHdpbGwgbmV2ZXIgY29tcGxldGUgaWYgd2UgaWdub3Jl
IHRoZQotICAgIC8vIG5hdmlnYXRpb24uIFNvIHdlIHRlbGwgdGhlIG1haW4gbG9vcCB0byBxdWl0
IHNvbWV0aW1lIGxhdGVyLgotICAgIHRlc3QtPm1fcG9saWN5RGVjaXNpb25SZXNwb25zZSA9IFBv
bGljeUNsaWVudFRlc3Q6Oklnbm9yZTsKLSAgICB0ZXN0LT5tX3Jlc3BvbmRUb1BvbGljeURlY2lz
aW9uQXN5bmNocm9ub3VzbHkgPSBmYWxzZTsKLSAgICB0ZXN0LT5tX2hhbHRNYWluTG9vcEFmdGVy
TWFraW5nRGVjaXNpb24gPSB0cnVlOwotICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbC8+IiwgImh0
dHA6Ly93ZWJraXRndGsub3JnLyIpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgp
OwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHMuc2l6ZSgpLCA9PSwgMCk7
Ci0KLSAgICB0ZXN0LT5tX3BvbGljeURlY2lzaW9uUmVzcG9uc2UgPSBQb2xpY3lDbGllbnRUZXN0
OjpJZ25vcmU7Ci0gICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sLz4iLCAiaHR0cDovL3dlYmtpdGd0
ay5vcmcvIik7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgZ19hc3Nl
cnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50cy5zaXplKCksID09LCAwKTsKLX0KLQotc3RhdGlj
IHZvaWQgdGVzdFJlc3BvbnNlUG9saWN5KFBvbGljeUNsaWVudFRlc3QqIHRlc3QsIGdjb25zdHBv
aW50ZXIpCi17Ci0gICAgdGVzdC0+bV9wb2xpY3lEZWNpc2lvblR5cGVGaWx0ZXIgPSBXRUJLSVRf
UE9MSUNZX0RFQ0lTSU9OX1RZUEVfUkVTUE9OU0U7Ci0KLSAgICB0ZXN0LT5tX3BvbGljeURlY2lz
aW9uUmVzcG9uc2UgPSBQb2xpY3lDbGllbnRUZXN0OjpVc2U7Ci0gICAgdGVzdC0+bG9hZFVSSShr
U2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxM
b2FkRmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzLnNp
emUoKSwgPT0sIDMpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMF0s
ID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsKLSAgICBnX2Fz
c2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6
TG9hZENvbW1pdHRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1sy
XSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7Ci0KLSAgICBXZWJLaXRSZXNw
b25zZVBvbGljeURlY2lzaW9uKiBkZWNpc2lvbiA9IFdFQktJVF9SRVNQT05TRV9QT0xJQ1lfREVD
SVNJT04odGVzdC0+bV9wcmV2aW91c1BvbGljeURlY2lzaW9uLmdldCgpKTsKLSAgICBXZWJLaXRV
UklSZXF1ZXN0KiByZXF1ZXN0ID0gd2Via2l0X3Jlc3BvbnNlX3BvbGljeV9kZWNpc2lvbl9nZXRf
cmVxdWVzdChkZWNpc2lvbik7Ci0gICAgZ19hc3NlcnQoV0VCS0lUX0lTX1VSSV9SRVFVRVNUKHJl
cXVlc3QpKTsKLSAgICBBU1NFUlRfQ01QX0NTVFJJTkcod2Via2l0X3VyaV9yZXF1ZXN0X2dldF91
cmkocmVxdWVzdCksID09LCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIikpOwotICAgIFdlYktp
dFVSSVJlc3BvbnNlKiByZXNwb25zZSA9IHdlYmtpdF9yZXNwb25zZV9wb2xpY3lfZGVjaXNpb25f
Z2V0X3Jlc3BvbnNlKGRlY2lzaW9uKTsKLSAgICBnX2Fzc2VydChXRUJLSVRfSVNfVVJJX1JFU1BP
TlNFKHJlc3BvbnNlKSk7Ci0gICAgQVNTRVJUX0NNUF9DU1RSSU5HKHdlYmtpdF91cmlfcmVzcG9u
c2VfZ2V0X3VyaShyZXNwb25zZSksID09LCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIikpOwot
ICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19jYW5fc2hvd19taW1lX3R5cGUodGVzdC0+bV93
ZWJWaWV3LCB3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF9taW1lX3R5cGUocmVzcG9uc2UpKSA9PQot
ICAgICAgICB3ZWJraXRfcmVzcG9uc2VfcG9saWN5X2RlY2lzaW9uX2lzX21pbWVfdHlwZV9zdXBw
b3J0ZWQoZGVjaXNpb24pKTsKLQotICAgIHRlc3QtPm1fcmVzcG9uZFRvUG9saWN5RGVjaXNpb25B
c3luY2hyb25vdXNseSA9IHRydWU7Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklG
b3JQYXRoKCIvIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsK
LSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0sIDMpOwot
ICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMF0sID09LCBMb2FkVHJhY2tp
bmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVz
dC0+bV9sb2FkRXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZENvbW1pdHRlZCk7
Ci0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1syXSwgPT0sIExvYWRUcmFj
a2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7Ci0KLSAgICB0ZXN0LT5tX3Jlc3BvbmRUb1BvbGljeURl
Y2lzaW9uQXN5bmNocm9ub3VzbHkgPSBmYWxzZTsKLSAgICB0ZXN0LT5tX3BvbGljeURlY2lzaW9u
UmVzcG9uc2UgPSBQb2xpY3lDbGllbnRUZXN0OjpJZ25vcmU7Ci0gICAgdGVzdC0+bG9hZFVSSShr
U2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxM
b2FkRmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHMu
c2l6ZSgpLCA9PSwgMyk7Ci0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1sw
XSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOwotICAgIGdf
YXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0
OjpQcm92aXNpb25hbExvYWRGYWlsZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xv
YWRFdmVudHNbMl0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOwotfQotCi1z
dHJ1Y3QgQ3JlYXRlQ2FsbGJhY2tEYXRhIHsKLSAgICBib29sIHRyaWVkVG9PcGVuV2luZG93Owot
ICAgIEdNYWluTG9vcCogbWFpbkxvb3A7Ci19OwotCi1zdGF0aWMgV2ViS2l0V2ViVmlldyogY3Jl
YXRlQ2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgQ3JlYXRlQ2FsbGJhY2tEYXRhKiBk
YXRhKQotewotICAgIGRhdGEtPnRyaWVkVG9PcGVuV2luZG93ID0gdHJ1ZTsKLSAgICBnX21haW5f
bG9vcF9xdWl0KGRhdGEtPm1haW5Mb29wKTsKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIHZv
aWQgdGVzdE5ld1dpbmRvd1BvbGljeShQb2xpY3lDbGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2lu
dGVyKQotewotICAgIHN0YXRpYyBjb25zdCBjaGFyKiB3aW5kb3dPcGVuaW5nSFRNTCA9Ci0gICAg
ICAgICI8aHRtbD48Ym9keT4iCi0gICAgICAgICIgICAgPGEgaWQ9XCJsaW5rXCIgaHJlZj1cImh0
dHA6Ly93d3cuZ29vZ2xlLmNvbVwiIHRhcmdldD1cIl9ibGFua1wiPkxpbms8L2E+IgotICAgICAg
ICAiICAgIDxzY3JpcHQ+IgotICAgICAgICAiICAgICAgICB2YXIgZXZlbnQgPSBkb2N1bWVudC5j
cmVhdGVFdmVudCgnTW91c2VFdmVudHMnKTsiCi0gICAgICAgICIgICAgICAgIGV2ZW50LmluaXRF
dmVudCgnY2xpY2snLCB0cnVlLCBmYWxzZSk7IgotICAgICAgICAiICAgICAgICBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgnbGluaycpLmRpc3BhdGNoRXZlbnQoZXZlbnQpOyIKLSAgICAgICAgIiAg
ICA8L3NjcmlwdD4iCi0gICAgICAgICI8L2JvZHk+PC9odG1sPiI7Ci0gICAgdGVzdC0+bV9wb2xp
Y3lEZWNpc2lvblR5cGVGaWx0ZXIgPSBXRUJLSVRfUE9MSUNZX0RFQ0lTSU9OX1RZUEVfTkVXX1dJ
TkRPV19BQ1RJT047Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9qYXZhc2NyaXB0X2Nhbl9vcGVu
X3dpbmRvd3NfYXV0b21hdGljYWxseSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHRlc3Qt
Pm1fd2ViVmlldyksIFRSVUUpOwotCi0gICAgQ3JlYXRlQ2FsbGJhY2tEYXRhIGRhdGE7Ci0gICAg
ZGF0YS50cmllZFRvT3BlbldpbmRvdyA9IGZhbHNlOwotICAgIGRhdGEubWFpbkxvb3AgPSB0ZXN0
LT5tX21haW5Mb29wOwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh0ZXN0LT5tX3dlYlZpZXcsICJj
cmVhdGUiLCBHX0NBTExCQUNLKGNyZWF0ZUNhbGxiYWNrKSwgJmRhdGEpOwotICAgIHRlc3QtPm1f
cG9saWN5RGVjaXNpb25SZXNwb25zZSA9IFBvbGljeUNsaWVudFRlc3Q6OlVzZTsKLSAgICB0ZXN0
LT5sb2FkSHRtbCh3aW5kb3dPcGVuaW5nSFRNTCwgImh0dHA6Ly93ZWJraXRndGsub3JnLyIpOwot
ICAgIHRlc3QtPndhaXQoMSk7Ci0gICAgZ19hc3NlcnQoZGF0YS50cmllZFRvT3BlbldpbmRvdyk7
Ci0KLSAgICBXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24qIGRlY2lzaW9uID0gV0VCS0lU
X05BVklHQVRJT05fUE9MSUNZX0RFQ0lTSU9OKHRlc3QtPm1fcHJldmlvdXNQb2xpY3lEZWNpc2lv
bi5nZXQoKSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9k
ZWNpc2lvbl9nZXRfZnJhbWVfbmFtZShkZWNpc2lvbiksID09LCAiX2JsYW5rIik7Ci0KLSAgICAv
LyBVc2luZyBhIHNob3J0IHRpbWVvdXQgaXMgYSBiaXQgdWdseSBoZXJlLCBidXQgaXQncyBoYXJk
IHRvIGdldCBhcm91bmQgYmVjYXVzZSBpZiB3ZSBibG9jawotICAgIC8vIHRoZSBuZXcgd2luZG93
IHNpZ25hbCB3ZSBjYW5ub3QgaGFsdCB0aGUgbWFpbiBsb29wIGluIHRoZSBjcmVhdGUgY2FsbGJh
Y2suIElmIHdlCi0gICAgLy8gaGFsdCB0aGUgbWFpbiBsb29wIGluIHRoZSBwb2xpY3kgZGVjaXNp
b24sIHRoZSBjcmVhdGUgY2FsbGJhY2sgbmV2ZXIgZXhlY3V0ZXMuCi0gICAgZGF0YS50cmllZFRv
T3BlbldpbmRvdyA9IGZhbHNlOwotICAgIHRlc3QtPm1fcG9saWN5RGVjaXNpb25SZXNwb25zZSA9
IFBvbGljeUNsaWVudFRlc3Q6Oklnbm9yZTsKLSAgICB0ZXN0LT5sb2FkSHRtbCh3aW5kb3dPcGVu
aW5nSFRNTCwgImh0dHA6Ly93ZWJraXRndGsub3JnLyIpOwotICAgIHRlc3QtPndhaXQoLjIpOwot
ICAgIGdfYXNzZXJ0KCFkYXRhLnRyaWVkVG9PcGVuV2luZG93KTsKLX0KLQotc3RhdGljIHZvaWQg
c2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwg
Y29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSosIFNvdXBDbGllbnRDb250ZXh0KiwgZ3BvaW50
ZXIpCi17Ci0gICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKLSAg
ICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0lN
UExFTUVOVEVEKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChnX3N0cl9lcXVh
bChwYXRoLCAiLyIpKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiByZXNwb25zZVN0cmlu
ZyA9ICI8aHRtbD48Ym9keT5UZXN0aW5nITwvYm9keT48L2h0bWw+IjsKLSAgICAgICAgc291cF9t
ZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOwotICAgICAgICBzb3Vw
X21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllf
U1RBVElDLCByZXNwb25zZVN0cmluZywgc3RybGVuKHJlc3BvbnNlU3RyaW5nKSk7Ci0gICAgICAg
IHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOwotICAg
IH0gZWxzZQotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NU
QVRVU19OT1RfRk9VTkQpOwotfQotCi12b2lkIGJlZm9yZUFsbCgpCi17Ci0gICAga1NlcnZlciA9
IG5ldyBXZWJLaXRUZXN0U2VydmVyKCk7Ci0gICAga1NlcnZlci0+cnVuKHNlcnZlckNhbGxiYWNr
KTsKLQotICAgIFBvbGljeUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0UG9saWN5Q2xpZW50IiwgIm5h
dmlnYXRpb24tcG9saWN5IiwgdGVzdE5hdmlnYXRpb25Qb2xpY3kpOwotICAgIFBvbGljeUNsaWVu
dFRlc3Q6OmFkZCgiV2ViS2l0UG9saWN5Q2xpZW50IiwgInJlc3BvbnNlLXBvbGljeSIsIHRlc3RS
ZXNwb25zZVBvbGljeSk7Ci0gICAgUG9saWN5Q2xpZW50VGVzdDo6YWRkKCJXZWJLaXRQb2xpY3lD
bGllbnQiLCAibmV3LXdpbmRvdy1wb2xpY3kiLCB0ZXN0TmV3V2luZG93UG9saWN5KTsKLX0KLQot
dm9pZCBhZnRlckFsbCgpCi17Ci0gICAgZGVsZXRlIGtTZXJ2ZXI7Ci19CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0U2V0dGluZ3Mu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFNl
dHRpbmdzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzFkMzAxOC4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0
U2V0dGluZ3MuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzcwICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKGMpIDIwMTEgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgCi0gKiBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0gKgotICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQgbm90aWNlLCAKLSAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKgotICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKLSAqIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIAotICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBOZWl0aGVyIHRoZSBuYW1lIG9mIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgCi0gKiBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IAotICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMgCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCAKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBI
T0xERVIgT1IgCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IAotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSAKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIAotICogTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIAotICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiVGVzdE1haW4uaCIK
LSNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgotI2luY2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIK
LSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+Ci0jaW5j
bHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgotCi1zdGF0aWMgV2ViS2l0VGVzdFNlcnZlciog
Z1NlcnZlcjsKLQotc3RhdGljIHZvaWQgdGVzdFdlYktpdFNldHRpbmdzKFRlc3QqLCBnY29uc3Rw
b2ludGVyKQotewotICAgIFdlYktpdFNldHRpbmdzKiBzZXR0aW5ncyA9IHdlYmtpdF9zZXR0aW5n
c19uZXcoKTsKLQotICAgIC8vIEphdmFTY3JpcHQgaXMgZW5hYmxlZCBieSBkZWZhdWx0LgotICAg
IGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2phdmFzY3JpcHQoc2V0dGluZ3Mp
KTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9qYXZhc2NyaXB0KHNldHRpbmdzLCBG
QUxTRSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2phdmFzY3Jp
cHQoc2V0dGluZ3MpKTsKLQotICAgIC8vIEJ5IGRlZmF1bHQgYXV0by1sb2FkLWltYWdlIGlzIHRy
dWUuCi0gICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9hdXRvX2xvYWRfaW1hZ2VzKHNl
dHRpbmdzKSk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9hdXRvX2xvYWRfaW1hZ2VzKHNldHRp
bmdzLCBGQUxTRSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfYXV0b19sb2Fk
X2ltYWdlcyhzZXR0aW5ncykpOwotCi0gICAgLy8gbG9hZC1pY29ucy1pZ25vcmluZy1pbWFnZS1s
b2FkLXNldHRpbmcgaXMgZmFsc2UgYnkgZGVmYXVsdC4KLSAgICBnX2Fzc2VydCghd2Via2l0X3Nl
dHRpbmdzX2dldF9sb2FkX2ljb25zX2lnbm9yaW5nX2ltYWdlX2xvYWRfc2V0dGluZyhzZXR0aW5n
cykpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfbG9hZF9pY29uc19pZ25vcmluZ19pbWFnZV9s
b2FkX3NldHRpbmcoc2V0dGluZ3MsIFRSVUUpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5n
c19nZXRfbG9hZF9pY29uc19pZ25vcmluZ19pbWFnZV9sb2FkX3NldHRpbmcoc2V0dGluZ3MpKTsK
LSAgICAKLSAgICAvLyBPZmZsaW5lIGFwcGxpY2F0aW9uIGNhY2hlIGlzIHRydWUgYnkgZGVmYXVs
dC4KLSAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9vZmZsaW5lX3dlYl9h
cHBsaWNhdGlvbl9jYWNoZShzZXR0aW5ncykpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5h
YmxlX29mZmxpbmVfd2ViX2FwcGxpY2F0aW9uX2NhY2hlKHNldHRpbmdzLCBGQUxTRSk7Ci0gICAg
Z19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX29mZmxpbmVfd2ViX2FwcGxpY2F0
aW9uX2NhY2hlKHNldHRpbmdzKSk7Ci0KLSAgICAvLyBMb2NhbCBzdG9yYWdlIGlzIGVuYWJsZSBi
eSBkZWZhdWx0LgotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2h0bWw1
X2xvY2FsX3N0b3JhZ2Uoc2V0dGluZ3MpKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJs
ZV9odG1sNV9sb2NhbF9zdG9yYWdlKHNldHRpbmdzLCBGQUxTRSk7Ci0gICAgZ19hc3NlcnQoIXdl
YmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2h0bWw1X2xvY2FsX3N0b3JhZ2Uoc2V0dGluZ3MpKTsK
LQotICAgIC8vIEhUTUw1IGRhdGFiYXNlIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4KLSAgICBnX2Fz
c2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9odG1sNV9kYXRhYmFzZShzZXR0aW5ncykp
OwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX2h0bWw1X2RhdGFiYXNlKHNldHRpbmdz
LCBGQUxTRSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2h0bWw1
X2RhdGFiYXNlKHNldHRpbmdzKSk7Ci0KLSAgICAvLyBYU1MgQXVkaXRvciBpcyBlbmFibGVkIGJ5
IGRlZmF1bHQuCi0gICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfeHNzX2F1
ZGl0b3Ioc2V0dGluZ3MpKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV94c3NfYXVk
aXRvcihzZXR0aW5ncywgRkFMU0UpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0
X2VuYWJsZV94c3NfYXVkaXRvcihzZXR0aW5ncykpOwotCi0gICAgLy8gRnJhbWUgZmxhdHRlbmlu
ZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3Nf
Z2V0X2VuYWJsZV9mcmFtZV9mbGF0dGVuaW5nKHNldHRpbmdzKSk7Ci0gICAgd2Via2l0X3NldHRp
bmdzX3NldF9lbmFibGVfZnJhbWVfZmxhdHRlbmluZyhzZXR0aW5ncywgVFJVRSk7Ci0gICAgZ19h
c3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfZnJhbWVfZmxhdHRlbmluZyhzZXR0aW5n
cykpOwotCi0gICAgLy8gUGx1Z2lucyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0LgotICAgIGdfYXNz
ZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3BsdWdpbnMoc2V0dGluZ3MpKTsKLSAgICB3
ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9wbHVnaW5zKHNldHRpbmdzLCBGQUxTRSk7Ci0gICAg
Z19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3BsdWdpbnMoc2V0dGluZ3MpKTsK
LQotICAgIC8vIEphdmEgaXMgZW5hYmxlZCBieSBkZWZhdWx0LgotICAgIGdfYXNzZXJ0KHdlYmtp
dF9zZXR0aW5nc19nZXRfZW5hYmxlX2phdmEoc2V0dGluZ3MpKTsKLSAgICB3ZWJraXRfc2V0dGlu
Z3Nfc2V0X2VuYWJsZV9qYXZhKHNldHRpbmdzLCBGQUxTRSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtp
dF9zZXR0aW5nc19nZXRfZW5hYmxlX2phdmEoc2V0dGluZ3MpKTsKLQotICAgIC8vIEJ5IGRlZmF1
bHQsIEphdmFTY3JpcHQgY2FuIG9wZW4gd2luZG93cyBhdXRvbWF0aWNhbGx5IGlzIGRpc2FibGVk
LgotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2phdmFzY3JpcHRfY2FuX29wZW5f
d2luZG93c19hdXRvbWF0aWNhbGx5KHNldHRpbmdzKSk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3Nl
dF9qYXZhc2NyaXB0X2Nhbl9vcGVuX3dpbmRvd3NfYXV0b21hdGljYWxseShzZXR0aW5ncywgVFJV
RSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9qYXZhc2NyaXB0X2Nhbl9vcGVu
X3dpbmRvd3NfYXV0b21hdGljYWxseShzZXR0aW5ncykpOwotCi0gICAgLy8gQnkgZGVmYXVsdCBo
eXBlciBsaW5rIGF1ZGl0aW5nIGlzIGRpc2FibGVkLgotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0
dGluZ3NfZ2V0X2VuYWJsZV9oeXBlcmxpbmtfYXVkaXRpbmcoc2V0dGluZ3MpKTsKLSAgICB3ZWJr
aXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9oeXBlcmxpbmtfYXVkaXRpbmcoc2V0dGluZ3MsIFRSVUUp
OwotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2h5cGVybGlua19hdWRp
dGluZyhzZXR0aW5ncykpOwotCi0gICAgLy8gRGVmYXVsdCBmb250IGZhbWlseSBpcyAic2Fucy1z
ZXJpZiIuCi0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zZXR0aW5nc19nZXRfZGVmYXVsdF9m
b250X2ZhbWlseShzZXR0aW5ncyksID09LCAic2Fucy1zZXJpZiIpOwotICAgIHdlYmtpdF9zZXR0
aW5nc19zZXRfZGVmYXVsdF9mb250X2ZhbWlseShzZXR0aW5ncywgIm1vbm9zcGFjZSIpOwotICAg
IGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2V0dGluZ3NfZ2V0X2RlZmF1bHRfZm9udF9mYW1pbHko
c2V0dGluZ3MpLCA9PSwgIm1vbm9zcGFjZSIpOwotCi0gICAgLy8gRGVmYXVsdCBtb25vc3BhY2Ug
Zm9udCBmYW1pbHkgZm9udCBmYW1pbHkgaXMgIm1vbm9zcGFjZSIuCi0gICAgZ19hc3NlcnRfY21w
c3RyKHdlYmtpdF9zZXR0aW5nc19nZXRfbW9ub3NwYWNlX2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwg
PT0sICJtb25vc3BhY2UiKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X21vbm9zcGFjZV9mb250
X2ZhbWlseShzZXR0aW5ncywgInNhbnMtc2VyaWYiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Vi
a2l0X3NldHRpbmdzX2dldF9tb25vc3BhY2VfZm9udF9mYW1pbHkoc2V0dGluZ3MpLCA9PSwgInNh
bnMtc2VyaWYiKTsKLQotICAgIC8vIERlZmF1bHQgc2VyaWYgZm9udCBmYW1pbHkgaXMgInNlcmlm
Ii4KLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NldHRpbmdzX2dldF9zZXJpZl9mb250X2Zh
bWlseShzZXR0aW5ncyksID09LCAic2VyaWYiKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X3Nl
cmlmX2ZvbnRfZmFtaWx5KHNldHRpbmdzLCAic2Fucy1zZXJpZiIpOwotICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfc2V0dGluZ3NfZ2V0X3NlcmlmX2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0s
ICJzYW5zLXNlcmlmIik7Ci0KLSAgICAvLyBEZWZhdWx0IHNhbnMgc2VyaWYgZm9udCBmYW1pbHkg
aXMgInNhbnMtc2VyaWYiLgotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2V0dGluZ3NfZ2V0
X3NhbnNfc2VyaWZfZm9udF9mYW1pbHkoc2V0dGluZ3MpLCA9PSwgInNhbnMtc2VyaWYiKTsKLSAg
ICB3ZWJraXRfc2V0dGluZ3Nfc2V0X3NhbnNfc2VyaWZfZm9udF9mYW1pbHkoc2V0dGluZ3MsICJz
ZXJpZiIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2V0dGluZ3NfZ2V0X3NhbnNfc2Vy
aWZfZm9udF9mYW1pbHkoc2V0dGluZ3MpLCA9PSwgInNlcmlmIik7Ci0KLSAgICAvLyBEZWZhdWx0
IGN1cnNpdmUgZm9udCBmYW1pbHkgInNlcmlmIi4KLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0
X3NldHRpbmdzX2dldF9jdXJzaXZlX2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJzZXJpZiIp
OwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfY3Vyc2l2ZV9mb250X2ZhbWlseShzZXR0aW5ncywg
InNhbnMtc2VyaWYiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NldHRpbmdzX2dldF9j
dXJzaXZlX2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJzYW5zLXNlcmlmIik7Ci0KLSAgICAv
LyBEZWZhdWx0IGZhbnRhc3kgZm9udCBmYW1pbHkgaXMgInNlcmlmIi4KLSAgICBnX2Fzc2VydF9j
bXBzdHIod2Via2l0X3NldHRpbmdzX2dldF9mYW50YXN5X2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwg
PT0sICJzZXJpZiIpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZmFudGFzeV9mb250X2ZhbWls
eShzZXR0aW5ncywgInNhbnMtc2VyaWYiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3Nl
dHRpbmdzX2dldF9mYW50YXN5X2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJzYW5zLXNlcmlm
Iik7Ci0KLSAgICAvLyBEZWZhdWx0IHBpY3RvZ3JhcGggZm9udCBmYW1pbHkgaXMgInNlcmlmIi4K
LSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NldHRpbmdzX2dldF9waWN0b2dyYXBoX2ZvbnRf
ZmFtaWx5KHNldHRpbmdzKSwgPT0sICJzZXJpZiIpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRf
cGljdG9ncmFwaF9mb250X2ZhbWlseShzZXR0aW5ncywgInNhbnMtc2VyaWYiKTsKLSAgICBnX2Fz
c2VydF9jbXBzdHIod2Via2l0X3NldHRpbmdzX2dldF9waWN0b2dyYXBoX2ZvbnRfZmFtaWx5KHNl
dHRpbmdzKSwgPT0sICJzYW5zLXNlcmlmIik7Ci0KLSAgICAvLyBEZWZhdWx0IGZvbnQgc2l6ZSBp
cyAxNi4KLSAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9zZXR0aW5nc19nZXRfZGVmYXVsdF9m
b250X3NpemUoc2V0dGluZ3MpLCA9PSwgMTYpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZGVm
YXVsdF9mb250X3NpemUoc2V0dGluZ3MsIDE0KTsKLSAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtp
dF9zZXR0aW5nc19nZXRfZGVmYXVsdF9mb250X3NpemUoc2V0dGluZ3MpLCA9PSwgMTQpOwotCi0g
ICAgLy8gRGVmYXVsdCBtb25vc3BhY2UgZm9udCBzaXplIGlzIDEzLgotICAgIGdfYXNzZXJ0X2Nt
cHVpbnQod2Via2l0X3NldHRpbmdzX2dldF9kZWZhdWx0X21vbm9zcGFjZV9mb250X3NpemUoc2V0
dGluZ3MpLCA9PSwgMTMpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZGVmYXVsdF9tb25vc3Bh
Y2VfZm9udF9zaXplKHNldHRpbmdzLCAxMCk7Ci0gICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRf
c2V0dGluZ3NfZ2V0X2RlZmF1bHRfbW9ub3NwYWNlX2ZvbnRfc2l6ZShzZXR0aW5ncyksID09LCAx
MCk7Ci0KLSAgICAvLyBEZWZhdWx0IG1pbmltdW0gZm9udCBzaXplIGlzIDAuCi0gICAgZ19hc3Nl
cnRfY21wdWludCh3ZWJraXRfc2V0dGluZ3NfZ2V0X21pbmltdW1fZm9udF9zaXplKHNldHRpbmdz
KSwgPT0sIDApOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfbWluaW11bV9mb250X3NpemUoc2V0
dGluZ3MsIDcpOwotICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X3NldHRpbmdzX2dldF9taW5p
bXVtX2ZvbnRfc2l6ZShzZXR0aW5ncyksID09LCA3KTsKLQotICAgIC8vIERlZmF1bHQgY2hhcnNl
dCBpcyAiaXNvLTg4NTktMSIuCi0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zZXR0aW5nc19n
ZXRfZGVmYXVsdF9jaGFyc2V0KHNldHRpbmdzKSwgPT0sICJpc28tODg1OS0xIik7Ci0gICAgd2Vi
a2l0X3NldHRpbmdzX3NldF9kZWZhdWx0X2NoYXJzZXQoc2V0dGluZ3MsICJ1dGY4Iik7Ci0gICAg
Z19hc3NlcnRfY21wc3RyKHdlYmtpdF9zZXR0aW5nc19nZXRfZGVmYXVsdF9jaGFyc2V0KHNldHRp
bmdzKSwgPT0sICJ1dGY4Iik7Ci0KLSAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9l
bmFibGVfcHJpdmF0ZV9icm93c2luZyhzZXR0aW5ncykpOwotICAgIHdlYmtpdF9zZXR0aW5nc19z
ZXRfZW5hYmxlX3ByaXZhdGVfYnJvd3Npbmcoc2V0dGluZ3MsIFRSVUUpOwotICAgIGdfYXNzZXJ0
KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3ByaXZhdGVfYnJvd3Npbmcoc2V0dGluZ3MpKTsK
LQotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9kZXZlbG9wZXJfZXh0
cmFzKHNldHRpbmdzKSk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfZGV2ZWxvcGVy
X2V4dHJhcyhzZXR0aW5ncywgVFJVRSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dl
dF9lbmFibGVfZGV2ZWxvcGVyX2V4dHJhcyhzZXR0aW5ncykpOwotCi0gICAgZ19hc3NlcnQod2Vi
a2l0X3NldHRpbmdzX2dldF9lbmFibGVfcmVzaXphYmxlX3RleHRfYXJlYXMoc2V0dGluZ3MpKTsK
LSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9yZXNpemFibGVfdGV4dF9hcmVhcyhzZXR0
aW5ncywgRkFMU0UpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9y
ZXNpemFibGVfdGV4dF9hcmVhcyhzZXR0aW5ncykpOwotCi0gICAgZ19hc3NlcnQod2Via2l0X3Nl
dHRpbmdzX2dldF9lbmFibGVfdGFic190b19saW5rcyhzZXR0aW5ncykpOwotICAgIHdlYmtpdF9z
ZXR0aW5nc19zZXRfZW5hYmxlX3RhYnNfdG9fbGlua3Moc2V0dGluZ3MsIEZBTFNFKTsKLSAgICBn
X2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfdGFic190b19saW5rcyhzZXR0aW5n
cykpOwotCi0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2Ruc19wcmVm
ZXRjaGluZyhzZXR0aW5ncykpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX2Ruc19w
cmVmZXRjaGluZyhzZXR0aW5ncywgVFJVRSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdz
X2dldF9lbmFibGVfZG5zX3ByZWZldGNoaW5nKHNldHRpbmdzKSk7Ci0KLSAgICAvLyBDYXJldCBi
cm93c2luZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0
dGluZ3NfZ2V0X2VuYWJsZV9jYXJldF9icm93c2luZyhzZXR0aW5ncykpOwotICAgIHdlYmtpdF9z
ZXR0aW5nc19zZXRfZW5hYmxlX2NhcmV0X2Jyb3dzaW5nKHNldHRpbmdzLCBUUlVFKTsKLSAgICBn
X2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9jYXJldF9icm93c2luZyhzZXR0aW5n
cykpOwotCi0gICAgLy8gRnVsbHNjcmVlbiBKYXZhU2NyaXB0IEFQSSBpcyBlbmFibGVkIGJ5IGRl
ZmF1bHQuCi0gICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfZnVsbHNjcmVl
bihzZXR0aW5ncykpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX2Z1bGxzY3JlZW4o
c2V0dGluZ3MsIEZBTFNFKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFi
bGVfZnVsbHNjcmVlbihzZXR0aW5ncykpOwotCi0gICAgLy8gUHJpbnQgYmFja2dyb3VuZHMgaXMg
ZW5hYmxlZCBieSBkZWZhdWx0Ci0gICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9wcmlu
dF9iYWNrZ3JvdW5kcyhzZXR0aW5ncykpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfcHJpbnRf
YmFja2dyb3VuZHMoc2V0dGluZ3MsIEZBTFNFKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3NldHRp
bmdzX2dldF9wcmludF9iYWNrZ3JvdW5kcyhzZXR0aW5ncykpOwotCi0gICAgLy8gV2ViQXVkaW8g
aXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KLSAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dl
dF9lbmFibGVfd2ViYXVkaW8oc2V0dGluZ3MpKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2Vu
YWJsZV93ZWJhdWRpbyhzZXR0aW5ncywgVFJVRSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3NldHRp
bmdzX2dldF9lbmFibGVfd2ViYXVkaW8oc2V0dGluZ3MpKTsKLQotICAgIC8vIFdlYkdMIGlzIGRp
c2FibGVkIGJ5IGRlZmF1bHQuCi0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5h
YmxlX3dlYmdsKHNldHRpbmdzKSk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfd2Vi
Z2woc2V0dGluZ3MsIFRSVUUpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5h
YmxlX3dlYmdsKHNldHRpbmdzKSk7Ci0KLSAgICAvLyBBbGxvdyBNb2RhbCBEaWFsb2dzIGlzIGRp
c2FibGVkIGJ5IGRlZmF1bHQuCi0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfYWxs
b3dfbW9kYWxfZGlhbG9ncyhzZXR0aW5ncykpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfYWxs
b3dfbW9kYWxfZGlhbG9ncyhzZXR0aW5ncywgVFJVRSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3Nl
dHRpbmdzX2dldF9hbGxvd19tb2RhbF9kaWFsb2dzKHNldHRpbmdzKSk7Ci0KLSAgICAvLyBab29t
IHRleHQgb25seSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgotICAgIGdfYXNzZXJ0KCF3ZWJraXRf
c2V0dGluZ3NfZ2V0X3pvb21fdGV4dF9vbmx5KHNldHRpbmdzKSk7Ci0gICAgd2Via2l0X3NldHRp
bmdzX3NldF96b29tX3RleHRfb25seShzZXR0aW5ncywgVFJVRSk7Ci0gICAgZ19hc3NlcnQod2Vi
a2l0X3NldHRpbmdzX2dldF96b29tX3RleHRfb25seShzZXR0aW5ncykpOwotCi0gICAgLy8gQnkg
ZGVmYXVsdCwgSmF2YVNjcmlwdCBjYW5ub3QgYWNjZXNzIHRoZSBjbGlwYm9hcmQuCi0gICAgZ19h
c3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfamF2YXNjcmlwdF9jYW5fYWNjZXNzX2NsaXBib2Fy
ZChzZXR0aW5ncykpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfamF2YXNjcmlwdF9jYW5fYWNj
ZXNzX2NsaXBib2FyZChzZXR0aW5ncywgVFJVRSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3NldHRp
bmdzX2dldF9qYXZhc2NyaXB0X2Nhbl9hY2Nlc3NfY2xpcGJvYXJkKHNldHRpbmdzKSk7Ci0KLSAg
ICAvLyBCeSBkZWZhdWx0LCBtZWRpYSBwbGF5YmFjayBkb2Vzbid0IHJlcXVpcmUgdXNlciBnZXN0
dXJlcy4KLSAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9tZWRpYV9wbGF5YmFja19y
ZXF1aXJlc191c2VyX2dlc3R1cmUoc2V0dGluZ3MpKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0
X21lZGlhX3BsYXliYWNrX3JlcXVpcmVzX3VzZXJfZ2VzdHVyZShzZXR0aW5ncywgVFJVRSk7Ci0g
ICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9tZWRpYV9wbGF5YmFja19yZXF1aXJlc191
c2VyX2dlc3R1cmUoc2V0dGluZ3MpKTsKLQotICAgIC8vIEJ5IGRlZmF1bHQsIGlubGluZSBtZWRp
YSBwbGF5YmFjayBpcyBhbGxvd2VkCi0gICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9t
ZWRpYV9wbGF5YmFja19hbGxvd3NfaW5saW5lKHNldHRpbmdzKSk7Ci0gICAgd2Via2l0X3NldHRp
bmdzX3NldF9tZWRpYV9wbGF5YmFja19hbGxvd3NfaW5saW5lKHNldHRpbmdzLCBGQUxTRSk7Ci0g
ICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfbWVkaWFfcGxheWJhY2tfYWxsb3dzX2lu
bGluZShzZXR0aW5ncykpOwotCi0gICAgLy8gQnkgZGVmYXVsdCwgZGVidWcgaW5kaWNhdG9ycyBh
cmUgZGlzYWJsZWQuCi0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZHJhd19jb21w
b3NpdGluZ19pbmRpY2F0b3JzKHNldHRpbmdzKSk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9k
cmF3X2NvbXBvc2l0aW5nX2luZGljYXRvcnMoc2V0dGluZ3MsIFRSVUUpOwotICAgIGdfYXNzZXJ0
KHdlYmtpdF9zZXR0aW5nc19nZXRfZHJhd19jb21wb3NpdGluZ19pbmRpY2F0b3JzKHNldHRpbmdz
KSk7Ci0KLSAgICAvLyBCeSBkZWZhdWx0LCBzaXRlIHNwZWNpZmljIHF1aXJrcyBhcmUgZGlzYWJs
ZWQuCi0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3NpdGVfc3BlY2lm
aWNfcXVpcmtzKHNldHRpbmdzKSk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfc2l0
ZV9zcGVjaWZpY19xdWlya3Moc2V0dGluZ3MsIFRSVUUpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9z
ZXR0aW5nc19nZXRfZW5hYmxlX3NpdGVfc3BlY2lmaWNfcXVpcmtzKHNldHRpbmdzKSk7Ci0KLSAg
ICAvLyBCeSBkZWZhdWx0LCBwYWdlIGNhY2hlIGlzIGVuYWJsZWQuCi0gICAgZ19hc3NlcnQod2Vi
a2l0X3NldHRpbmdzX2dldF9lbmFibGVfcGFnZV9jYWNoZShzZXR0aW5ncykpOwotICAgIHdlYmtp
dF9zZXR0aW5nc19zZXRfZW5hYmxlX3BhZ2VfY2FjaGUoc2V0dGluZ3MsIEZBTFNFKTsKLSAgICBn
X2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfcGFnZV9jYWNoZShzZXR0aW5ncykp
OwotCi0gICAgLy8gQnkgZGVmYXVsdCwgc21vb3RoIHNjcm9sbGluZyBpcyBkaXNhYmxlZC4KLSAg
ICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfc21vb3RoX3Njcm9sbGluZyhz
ZXR0aW5ncykpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX3Ntb290aF9zY3JvbGxp
bmcoc2V0dGluZ3MsIFRSVUUpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5h
YmxlX3Ntb290aF9zY3JvbGxpbmcoc2V0dGluZ3MpKTsKLQotICAgIC8vIEJ5IGRlZmF1bHQsIGFj
Y2VsZXJhdGVkIDJEIGNhbnZhcyBpcyBkaXNhYmxlZC4KLSAgICBnX2Fzc2VydCghd2Via2l0X3Nl
dHRpbmdzX2dldF9lbmFibGVfYWNjZWxlcmF0ZWRfMmRfY2FudmFzKHNldHRpbmdzKSk7Ci0gICAg
d2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfYWNjZWxlcmF0ZWRfMmRfY2FudmFzKHNldHRpbmdz
LCBUUlVFKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9hY2NlbGVy
YXRlZF8yZF9jYW52YXMoc2V0dGluZ3MpKTsKLQotICAgIC8vIEJ5IGRlZmF1bHQsIHdyaXRpbmcg
b2YgY29uc29sZSBtZXNzYWdlcyB0byBzdGRvdXQgaXMgZGlzYWJsZWQuCi0gICAgZ19hc3NlcnQo
IXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3dyaXRlX2NvbnNvbGVfbWVzc2FnZXNfdG9fc3Rk
b3V0KHNldHRpbmdzKSk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfd3JpdGVfY29u
c29sZV9tZXNzYWdlc190b19zdGRvdXQoc2V0dGluZ3MsIFRSVUUpOwotICAgIGdfYXNzZXJ0KHdl
YmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3dyaXRlX2NvbnNvbGVfbWVzc2FnZXNfdG9fc3Rkb3V0
KHNldHRpbmdzKSk7Ci0KLSAgICAvLyBNZWRpYVN0cmVhbSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0
LgotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9tZWRpYV9zdHJlYW0o
c2V0dGluZ3MpKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9tZWRpYV9zdHJlYW0o
c2V0dGluZ3MsIFRSVUUpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxl
X21lZGlhX3N0cmVhbShzZXR0aW5ncykpOwotCi0gICAgLy8gQnkgZGVmYXVsdCwgU3BhdGlhbE5h
dmlnYXRpb24gaXMgZGlzYWJsZWQKLSAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9l
bmFibGVfc3BhdGlhbF9uYXZpZ2F0aW9uKHNldHRpbmdzKSk7Ci0gICAgd2Via2l0X3NldHRpbmdz
X3NldF9lbmFibGVfc3BhdGlhbF9uYXZpZ2F0aW9uKHNldHRpbmdzLCBUUlVFKTsKLSAgICBnX2Fz
c2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9zcGF0aWFsX25hdmlnYXRpb24oc2V0dGlu
Z3MpKTsKLQotICAgIC8vIE1lZGlhU291cmNlIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQKLSAgICBn
X2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfbWVkaWFzb3VyY2Uoc2V0dGluZ3Mp
KTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9tZWRpYXNvdXJjZShzZXR0aW5ncywg
VFJVRSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfbWVkaWFzb3Vy
Y2Uoc2V0dGluZ3MpKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKEdfT0JKRUNUKHNldHRpbmdzKSk7
Ci19Ci0KLXZvaWQgdGVzdFdlYktpdFNldHRpbmdzTmV3V2l0aFNldHRpbmdzKFRlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIpCi17Ci0gICAgR1JlZlB0cjxXZWJLaXRTZXR0aW5ncz4gc2V0dGluZ3Mg
PSBhZG9wdEdSZWYod2Via2l0X3NldHRpbmdzX25ld193aXRoX3NldHRpbmdzKCJlbmFibGUtamF2
YXNjcmlwdCIsIEZBTFNFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXV0by1sb2FkLWlt
YWdlcyIsIEZBTFNFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibG9hZC1pY29ucy1pZ25v
cmluZy1pbWFnZS1sb2FkLXNldHRpbmciLCBUUlVFLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBOVUxMKSk7Ci0gICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hl
cyhHX09CSkVDVChzZXR0aW5ncy5nZXQoKSkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGlu
Z3NfZ2V0X2VuYWJsZV9qYXZhc2NyaXB0KHNldHRpbmdzLmdldCgpKSk7Ci0gICAgZ19hc3NlcnQo
IXdlYmtpdF9zZXR0aW5nc19nZXRfYXV0b19sb2FkX2ltYWdlcyhzZXR0aW5ncy5nZXQoKSkpOwot
ICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfbG9hZF9pY29uc19pZ25vcmluZ19pbWFn
ZV9sb2FkX3NldHRpbmcoc2V0dGluZ3MuZ2V0KCkpKTsKLX0KLQotc3RhdGljIENTdHJpbmcgY29u
dmVydFdlYlZpZXdNYWluUmVzb3VyY2VEYXRhVG9DU3RyaW5nKFdlYlZpZXdUZXN0KiB0ZXN0KQot
ewotICAgIHNpemVfdCBtYWluUmVzb3VyY2VEYXRhU2l6ZSA9IDA7Ci0gICAgY29uc3QgY2hhciog
bWFpblJlc291cmNlRGF0YSA9IHRlc3QtPm1haW5SZXNvdXJjZURhdGEobWFpblJlc291cmNlRGF0
YVNpemUpOwotICAgIHJldHVybiBDU3RyaW5nKG1haW5SZXNvdXJjZURhdGEsIG1haW5SZXNvdXJj
ZURhdGFTaXplKTsKLX0KLQotc3RhdGljIHZvaWQgYXNzZXJ0VGhhdFVzZXJBZ2VudElzU2VudElu
SGVhZGVycyhXZWJWaWV3VGVzdCogdGVzdCwgY29uc3QgQ1N0cmluZyYgdXNlckFnZW50KQotewot
ICAgIHRlc3QtPmxvYWRVUkkoZ1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7Ci0g
ICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgQVNTRVJUX0NNUF9DU1RSSU5H
KGNvbnZlcnRXZWJWaWV3TWFpblJlc291cmNlRGF0YVRvQ1N0cmluZyh0ZXN0KSwgPT0sIHVzZXJB
Z2VudCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJLaXRTZXR0aW5nc1VzZXJBZ2VudChXZWJW
aWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBHUmVmUHRyPFdlYktpdFNldHRp
bmdzPiBzZXR0aW5ncyA9IGFkb3B0R1JlZih3ZWJraXRfc2V0dGluZ3NfbmV3KCkpOwotICAgIENT
dHJpbmcgZGVmYXVsdFVzZXJBZ2VudCA9IHdlYmtpdF9zZXR0aW5nc19nZXRfdXNlcl9hZ2VudChz
ZXR0aW5ncy5nZXQoKSk7Ci0gICAgd2Via2l0X3dlYl92aWV3X3NldF9zZXR0aW5ncyh0ZXN0LT5t
X3dlYlZpZXcsIHNldHRpbmdzLmdldCgpKTsKLQotICAgIGdfYXNzZXJ0KGdfc3Ryc3RyX2xlbihk
ZWZhdWx0VXNlckFnZW50LmRhdGEoKSwgLTEsICJBcHBsZVdlYktpdCIpKTsKLSAgICBnX2Fzc2Vy
dChnX3N0cnN0cl9sZW4oZGVmYXVsdFVzZXJBZ2VudC5kYXRhKCksIC0xLCAiU2FmYXJpIikpOwot
Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF91c2VyX2FnZW50KHNldHRpbmdzLmdldCgpLCAwKTsK
LSAgICBnX2Fzc2VydF9jbXBzdHIoZGVmYXVsdFVzZXJBZ2VudC5kYXRhKCksID09LCB3ZWJraXRf
c2V0dGluZ3NfZ2V0X3VzZXJfYWdlbnQoc2V0dGluZ3MuZ2V0KCkpKTsKLSAgICBhc3NlcnRUaGF0
VXNlckFnZW50SXNTZW50SW5IZWFkZXJzKHRlc3QsIGRlZmF1bHRVc2VyQWdlbnQuZGF0YSgpKTsK
LQotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfdXNlcl9hZ2VudChzZXR0aW5ncy5nZXQoKSwgIiIp
OwotICAgIGdfYXNzZXJ0X2NtcHN0cihkZWZhdWx0VXNlckFnZW50LmRhdGEoKSwgPT0sIHdlYmtp
dF9zZXR0aW5nc19nZXRfdXNlcl9hZ2VudChzZXR0aW5ncy5nZXQoKSkpOwotCi0gICAgY29uc3Qg
Y2hhciogZnVua3lVc2VyQWdlbnQgPSAiRnVua3khIjsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0
X3VzZXJfYWdlbnQoc2V0dGluZ3MuZ2V0KCksIGZ1bmt5VXNlckFnZW50KTsKLSAgICBnX2Fzc2Vy
dF9jbXBzdHIoZnVua3lVc2VyQWdlbnQsID09LCB3ZWJraXRfc2V0dGluZ3NfZ2V0X3VzZXJfYWdl
bnQoc2V0dGluZ3MuZ2V0KCkpKTsKLSAgICBhc3NlcnRUaGF0VXNlckFnZW50SXNTZW50SW5IZWFk
ZXJzKHRlc3QsIGZ1bmt5VXNlckFnZW50KTsKLQotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfdXNl
cl9hZ2VudF93aXRoX2FwcGxpY2F0aW9uX2RldGFpbHMoc2V0dGluZ3MuZ2V0KCksICJXZWJLaXRH
VEsrIiwgMCk7Ci0gICAgY29uc3QgY2hhciogdXNlckFnZW50V2l0aE51bGxWZXJzaW9uID0gd2Vi
a2l0X3NldHRpbmdzX2dldF91c2VyX2FnZW50KHNldHRpbmdzLmdldCgpKTsKLSAgICBnX2Fzc2Vy
dF9jbXBzdHIoZ19zdHJzdHJfbGVuKHVzZXJBZ2VudFdpdGhOdWxsVmVyc2lvbiwgLTEsIGRlZmF1
bHRVc2VyQWdlbnQuZGF0YSgpKSwgPT0sIHVzZXJBZ2VudFdpdGhOdWxsVmVyc2lvbik7Ci0gICAg
Z19hc3NlcnQoZ19zdHJzdHJfbGVuKHVzZXJBZ2VudFdpdGhOdWxsVmVyc2lvbiwgLTEsICJXZWJL
aXRHVEsrIikpOwotCi0gICAgd2Via2l0X3NldHRpbmdzX3NldF91c2VyX2FnZW50X3dpdGhfYXBw
bGljYXRpb25fZGV0YWlscyhzZXR0aW5ncy5nZXQoKSwgIldlYktpdEdUSysiLCAiIik7Ci0gICAg
Z19hc3NlcnRfY21wc3RyKHdlYmtpdF9zZXR0aW5nc19nZXRfdXNlcl9hZ2VudChzZXR0aW5ncy5n
ZXQoKSksID09LCB1c2VyQWdlbnRXaXRoTnVsbFZlcnNpb24pOwotCi0gICAgd2Via2l0X3NldHRp
bmdzX3NldF91c2VyX2FnZW50X3dpdGhfYXBwbGljYXRpb25fZGV0YWlscyhzZXR0aW5ncy5nZXQo
KSwgIldlYkNhdEdUSysiLCAiMy40LjUiKTsKLSAgICBjb25zdCBjaGFyKiBuZXdVc2VyQWdlbnQg
PSB3ZWJraXRfc2V0dGluZ3NfZ2V0X3VzZXJfYWdlbnQoc2V0dGluZ3MuZ2V0KCkpOwotICAgIGdf
YXNzZXJ0KGdfc3Ryc3RyX2xlbihuZXdVc2VyQWdlbnQsIC0xLCAiMy40LjUiKSk7Ci0gICAgZ19h
c3NlcnQoZ19zdHJzdHJfbGVuKG5ld1VzZXJBZ2VudCwgLTEsICJXZWJDYXRHVEsrIikpOwotfQot
Ci1zdGF0aWMgdm9pZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNz
YWdlKiBtZXNzYWdlLCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiwgU291cENsaWVudENv
bnRleHQqLCBncG9pbnRlcikKLXsKLSAgICBpZiAobWVzc2FnZS0+bWV0aG9kICE9IFNPVVBfTUVU
SE9EX0dFVCkgewotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQ
X1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvIikpIHsKLSAgICAgICAgY29uc3QgY2hhciogdXNlckFn
ZW50ID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X29uZShtZXNzYWdlLT5yZXF1ZXN0X2hlYWRl
cnMsICJVc2VyLUFnZW50Iik7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3Nh
Z2UsIFNPVVBfU1RBVFVTX09LKTsKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1l
c3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX0NPUFksIHVzZXJBZ2VudCwgc3RybGVu
KHVzZXJBZ2VudCkpOwotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdl
LT5yZXNwb25zZV9ib2R5KTsKLSAgICB9IGVsc2UKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9z
dGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0ZPVU5EKTsKLX0KLQotdm9pZCBiZWZvcmVB
bGwoKQotewotICAgIGdTZXJ2ZXIgPSBuZXcgV2ViS2l0VGVzdFNlcnZlcigpOwotICAgIGdTZXJ2
ZXItPnJ1bihzZXJ2ZXJDYWxsYmFjayk7Ci0KLSAgICBUZXN0OjphZGQoIldlYktpdFNldHRpbmdz
IiwgIndlYmtpdC1zZXR0aW5ncyIsIHRlc3RXZWJLaXRTZXR0aW5ncyk7Ci0gICAgVGVzdDo6YWRk
KCJXZWJLaXRTZXR0aW5ncyIsICJuZXctd2l0aC1zZXR0aW5ncyIsIHRlc3RXZWJLaXRTZXR0aW5n
c05ld1dpdGhTZXR0aW5ncyk7Ci0gICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0U2V0dGluZ3Mi
LCAidXNlci1hZ2VudCIsIHRlc3RXZWJLaXRTZXR0aW5nc1VzZXJBZ2VudCk7Ci19Ci0KLXZvaWQg
YWZ0ZXJBbGwoKQotewotICAgIGRlbGV0ZSBnU2VydmVyOwotfQotCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0VmVyc2lvbi5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0VmVyc2lv
bi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3NDdmZjkuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFZlcnNp
b24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lv
biAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiVGVz
dE1haW4uaCIKLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQy
Lmg+Ci0KLQotc3RhdGljIHZvaWQgdGVzdFdlYktpdFZlcnNpb24oVGVzdCosIGdjb25zdHBvaW50
ZXIpCi17Ci0gICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfZ2V0X21ham9yX3ZlcnNpb24oKSwg
PT0sIFdFQktJVF9NQUpPUl9WRVJTSU9OKTsKLSAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9n
ZXRfbWlub3JfdmVyc2lvbigpLCA9PSwgV0VCS0lUX01JTk9SX1ZFUlNJT04pOwotICAgIGdfYXNz
ZXJ0X2NtcHVpbnQod2Via2l0X2dldF9taWNyb192ZXJzaW9uKCksID09LCBXRUJLSVRfTUlDUk9f
VkVSU0lPTik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJLaXRDaGVja1ZlcnNpb24oVGVzdCos
IGdjb25zdHBvaW50ZXIpCi17Ci0gICAgZ19hc3NlcnQoV0VCS0lUX0NIRUNLX1ZFUlNJT04oV0VC
S0lUX01BSk9SX1ZFUlNJT04sIFdFQktJVF9NSU5PUl9WRVJTSU9OLCBXRUJLSVRfTUlDUk9fVkVS
U0lPTikpOwotICAgIGdfYXNzZXJ0KCFXRUJLSVRfQ0hFQ0tfVkVSU0lPTihXRUJLSVRfTUFKT1Jf
VkVSU0lPTiArIDEsIFdFQktJVF9NSU5PUl9WRVJTSU9OLCBXRUJLSVRfTUlDUk9fVkVSU0lPTikp
OwotICAgIGdfYXNzZXJ0KCFXRUJLSVRfQ0hFQ0tfVkVSU0lPTihXRUJLSVRfTUFKT1JfVkVSU0lP
TiwgV0VCS0lUX01JTk9SX1ZFUlNJT04gKyAxLCBXRUJLSVRfTUlDUk9fVkVSU0lPTikpOwotICAg
IGdfYXNzZXJ0KCFXRUJLSVRfQ0hFQ0tfVkVSU0lPTihXRUJLSVRfTUFKT1JfVkVSU0lPTiwgV0VC
S0lUX01JTk9SX1ZFUlNJT04sIFdFQktJVF9NSUNST19WRVJTSU9OICsgMSkpOwotfQotCi12b2lk
IGJlZm9yZUFsbCgpCi17Ci0gICAgVGVzdDo6YWRkKCJXZWJLaXRWZXJzaW9uIiwgInZlcnNpb24i
LCB0ZXN0V2ViS2l0VmVyc2lvbik7Ci0gICAgVGVzdDo6YWRkKCJXZWJLaXRWZXJzaW9uIiwgImNo
ZWNrLXZlcnNpb24iLCB0ZXN0V2ViS2l0Q2hlY2tWZXJzaW9uKTsKLX0KLQotdm9pZCBhZnRlckFs
bCgpCi17Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9UZXN0V2ViS2l0V2ViQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViQ29udGV4dC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDkzMGY0MDYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYkNvbnRleHQuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsNDI1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIkxvYWRUcmFja2luZ1Rlc3QuaCIKLSNp
bmNsdWRlICJXZWJLaXRUZXN0U2VydmVyLmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1
ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVk
ZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0KLXN0YXRpYyBXZWJLaXRUZXN0
U2VydmVyKiBrU2VydmVyOwotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViQ29udGV4dERlZmF1bHQoVGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICAvLyBDaGVjayB0aGVyZSdzIGEgc2luZ2xl
IGluc3RhbmNlIG9mIHRoZSBkZWZhdWx0IHdlYiBjb250ZXh0LgotICAgIGdfYXNzZXJ0KHdlYmtp
dF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpID09IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVm
YXVsdCgpKTsKLX0KLQotY2xhc3MgUGx1Z2luc1Rlc3Q6IHB1YmxpYyBUZXN0IHsKLXB1YmxpYzoK
LSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFBsdWdpbnNUZXN0KTsKLQotICAgIFBsdWdpbnNU
ZXN0KCkKLSAgICAgICAgOiBtX2NvbnRleHQod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0
KCkpCi0gICAgICAgICwgbV9tYWluTG9vcChnX21haW5fbG9vcF9uZXcoMCwgVFJVRSkpCi0gICAg
ICAgICwgbV9wbHVnaW5zKDApCi0gICAgewotICAgICAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0
X2FkZGl0aW9uYWxfcGx1Z2luc19kaXJlY3RvcnkobV9jb250ZXh0LCBXRUJLSVRfVEVTVF9QTFVH
SU5fRElSKTsKLSAgICB9Ci0KLSAgICB+UGx1Z2luc1Rlc3QoKQotICAgIHsKLSAgICAgICAgZ19t
YWluX2xvb3BfdW5yZWYobV9tYWluTG9vcCk7Ci0gICAgICAgIGdfbGlzdF9mcmVlX2Z1bGwobV9w
bHVnaW5zLCBnX29iamVjdF91bnJlZik7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgZ2V0UGx1
Z2luc0FzeW5jUmVhZHlDYWxsYmFjayhHT2JqZWN0KiwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIFBs
dWdpbnNUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+bV9wbHVnaW5zID0gd2Via2l0
X3dlYl9jb250ZXh0X2dldF9wbHVnaW5zX2ZpbmlzaCh0ZXN0LT5tX2NvbnRleHQsIHJlc3VsdCwg
MCk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7Ci0gICAgfQot
Ci0gICAgR0xpc3QqIGdldFBsdWdpbnMoKQotICAgIHsKLSAgICAgICAgZ19saXN0X2ZyZWVfZnVs
bChtX3BsdWdpbnMsIGdfb2JqZWN0X3VucmVmKTsKLSAgICAgICAgd2Via2l0X3dlYl9jb250ZXh0
X2dldF9wbHVnaW5zKG1fY29udGV4dCwgMCwgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNh
bGxiYWNrPihnZXRQbHVnaW5zQXN5bmNSZWFkeUNhbGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIGdf
bWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAgICAgICAgcmV0dXJuIG1fcGx1Z2luczsKLSAg
ICB9Ci0KLSAgICBXZWJLaXRXZWJDb250ZXh0KiBtX2NvbnRleHQ7Ci0gICAgR01haW5Mb29wKiBt
X21haW5Mb29wOwotICAgIEdMaXN0KiBtX3BsdWdpbnM7Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0
V2ViQ29udGV4dEdldFBsdWdpbnMoUGx1Z2luc1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17
Ci0gICAgR0xpc3QqIHBsdWdpbnMgPSB0ZXN0LT5nZXRQbHVnaW5zKCk7Ci0gICAgZ19hc3NlcnQo
cGx1Z2lucyk7Ci0KLSAgICBHUmVmUHRyPFdlYktpdFBsdWdpbj4gdGVzdFBsdWdpbjsKLSAgICBm
b3IgKEdMaXN0KiBpdGVtID0gcGx1Z2luczsgaXRlbTsgaXRlbSA9IGdfbGlzdF9uZXh0KGl0ZW0p
KSB7Ci0gICAgICAgIFdlYktpdFBsdWdpbiogcGx1Z2luID0gV0VCS0lUX1BMVUdJTihpdGVtLT5k
YXRhKTsKLSAgICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hl
cyhHX09CSkVDVChwbHVnaW4pKTsKLSAgICAgICAgaWYgKCFnX3N0cmNtcDAod2Via2l0X3BsdWdp
bl9nZXRfbmFtZShwbHVnaW4pLCAiV2ViS2l0IFRlc3QgUGx1Z0luIikpIHsKLSAgICAgICAgICAg
IHRlc3RQbHVnaW4gPSBwbHVnaW47Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
IH0KLSAgICBnX2Fzc2VydChXRUJLSVRfSVNfUExVR0lOKHRlc3RQbHVnaW4uZ2V0KCkpKTsKLQot
ICAgIEdPd25QdHI8Y2hhcj4gcGx1Z2luUGF0aChnX2J1aWxkX2ZpbGVuYW1lKFdFQktJVF9URVNU
X1BMVUdJTl9ESVIsICJsaWJUZXN0TmV0c2NhcGVQbHVnaW4uc28iLCBOVUxMKSk7Ci0gICAgZ19h
c3NlcnRfY21wc3RyKHdlYmtpdF9wbHVnaW5fZ2V0X3BhdGgodGVzdFBsdWdpbi5nZXQoKSksID09
LCBwbHVnaW5QYXRoLmdldCgpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3BsdWdpbl9n
ZXRfZGVzY3JpcHRpb24odGVzdFBsdWdpbi5nZXQoKSksID09LCAiU2ltcGxlIE5ldHNjYXBlwq4g
cGx1Zy1pbiB0aGF0IGhhbmRsZXMgdGVzdCBjb250ZW50IGZvciBXZWJLaXQiKTsKLSAgICBHTGlz
dCogbWltZUluZm9MaXN0ID0gd2Via2l0X3BsdWdpbl9nZXRfbWltZV9pbmZvX2xpc3QodGVzdFBs
dWdpbi5nZXQoKSk7Ci0gICAgZ19hc3NlcnQobWltZUluZm9MaXN0KTsKLSAgICBnX2Fzc2VydF9j
bXB1aW50KGdfbGlzdF9sZW5ndGgobWltZUluZm9MaXN0KSwgPT0sIDIpOwotCi0gICAgV2ViS2l0
TWltZUluZm8qIG1pbWVJbmZvID0gc3RhdGljX2Nhc3Q8V2ViS2l0TWltZUluZm8qPihtaW1lSW5m
b0xpc3QtPmRhdGEpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfbWltZV9pbmZvX2dldF9t
aW1lX3R5cGUobWltZUluZm8pLCA9PSwgImltYWdlL3BuZyIpOwotICAgIGdfYXNzZXJ0X2NtcHN0
cih3ZWJraXRfbWltZV9pbmZvX2dldF9kZXNjcmlwdGlvbihtaW1lSW5mbyksID09LCAicG5nIGlt
YWdlIik7Ci0gICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBleHRlbnNpb25zID0gd2Via2l0X21pbWVf
aW5mb19nZXRfZXh0ZW5zaW9ucyhtaW1lSW5mbyk7Ci0gICAgZ19hc3NlcnQoZXh0ZW5zaW9ucyk7
Ci0gICAgZ19hc3NlcnRfY21wc3RyKGV4dGVuc2lvbnNbMF0sID09LCAicG5nIik7Ci0KLSAgICBt
aW1lSW5mb0xpc3QgPSBnX2xpc3RfbmV4dChtaW1lSW5mb0xpc3QpOwotICAgIG1pbWVJbmZvID0g
c3RhdGljX2Nhc3Q8V2ViS2l0TWltZUluZm8qPihtaW1lSW5mb0xpc3QtPmRhdGEpOwotICAgIGdf
YXNzZXJ0X2NtcHN0cih3ZWJraXRfbWltZV9pbmZvX2dldF9taW1lX3R5cGUobWltZUluZm8pLCA9
PSwgImFwcGxpY2F0aW9uL3gtd2Via2l0LXRlc3QtbmV0c2NhcGUiKTsKLSAgICBnX2Fzc2VydF9j
bXBzdHIod2Via2l0X21pbWVfaW5mb19nZXRfZGVzY3JpcHRpb24obWltZUluZm8pLCA9PSwgInRl
c3QgbmV0c2NhcGUgY29udGVudCIpOwotICAgIGV4dGVuc2lvbnMgPSB3ZWJraXRfbWltZV9pbmZv
X2dldF9leHRlbnNpb25zKG1pbWVJbmZvKTsKLSAgICBnX2Fzc2VydChleHRlbnNpb25zKTsKLSAg
ICBnX2Fzc2VydF9jbXBzdHIoZXh0ZW5zaW9uc1swXSwgPT0sICJ0ZXN0bmV0c2NhcGUiKTsKLX0K
LQotc3RhdGljIGNvbnN0IGNoYXIqIGtCYXJIVE1MID0gIjxodG1sPjxib2R5PkJhcjwvYm9keT48
L2h0bWw+IjsKLXN0YXRpYyBjb25zdCBjaGFyKiBrRWNob0hUTUxGb3JtYXQgPSAiPGh0bWw+PGJv
ZHk+JXM8L2JvZHk+PC9odG1sPiI7Ci1zdGF0aWMgY29uc3QgY2hhciogZXJyb3JEb21haW4gPSAi
dGVzdCI7Ci1zdGF0aWMgY29uc3QgaW50IGVycm9yQ29kZSA9IDEwOwotc3RhdGljIGNvbnN0IGNo
YXIqIGVycm9yTWVzc2FnZSA9ICJFcnJvciBtZXNzYWdlLiI7Ci0KLWNsYXNzIFVSSVNjaGVtZVRl
c3Q6IHB1YmxpYyBMb2FkVHJhY2tpbmdUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVT
VF9GSVhUVVJFKFVSSVNjaGVtZVRlc3QpOwotCi0gICAgc3RydWN0IFVSSVNjaGVtZUhhbmRsZXIg
ewotICAgICAgICBVUklTY2hlbWVIYW5kbGVyKCkKLSAgICAgICAgICAgIDogcmVwbHlMZW5ndGgo
MCkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgVVJJU2NoZW1lSGFuZGxlcihjb25z
dCBjaGFyKiByZXBseSwgaW50IHJlcGx5TGVuZ3RoLCBjb25zdCBjaGFyKiBtaW1lVHlwZSkKLSAg
ICAgICAgICAgIDogcmVwbHkocmVwbHkpCi0gICAgICAgICAgICAsIHJlcGx5TGVuZ3RoKHJlcGx5
TGVuZ3RoKQotICAgICAgICAgICAgLCBtaW1lVHlwZShtaW1lVHlwZSkKLSAgICAgICAgewotICAg
ICAgICB9Ci0KLSAgICAgICAgQ1N0cmluZyByZXBseTsKLSAgICAgICAgaW50IHJlcGx5TGVuZ3Ro
OwotICAgICAgICBDU3RyaW5nIG1pbWVUeXBlOwotICAgIH07Ci0KLSAgICBzdGF0aWMgdm9pZCB1
cmlTY2hlbWVSZXF1ZXN0Q2FsbGJhY2soV2ViS2l0VVJJU2NoZW1lUmVxdWVzdCogcmVxdWVzdCwg
Z3BvaW50ZXIgdXNlckRhdGEpCi0gICAgewotICAgICAgICBVUklTY2hlbWVUZXN0KiB0ZXN0ID0g
c3RhdGljX2Nhc3Q8VVJJU2NoZW1lVGVzdCo+KHVzZXJEYXRhKTsKLSAgICAgICAgdGVzdC0+bV91
cmlTY2hlbWVSZXF1ZXN0ID0gcmVxdWVzdDsKLSAgICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNE
ZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChyZXF1ZXN0KSk7Ci0KLSAgICAgICAgZ19h
c3NlcnQod2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9nZXRfd2ViX3ZpZXcocmVxdWVzdCkgPT0g
dGVzdC0+bV93ZWJWaWV3KTsKLQotICAgICAgICBHUmVmUHRyPEdJbnB1dFN0cmVhbT4gaW5wdXRT
dHJlYW0gPSBhZG9wdEdSZWYoZ19tZW1vcnlfaW5wdXRfc3RyZWFtX25ldygpKTsKLSAgICAgICAg
dGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChpbnB1
dFN0cmVhbS5nZXQoKSkpOwotCi0gICAgICAgIGNvbnN0IGNoYXIqIHNjaGVtZSA9IHdlYmtpdF91
cmlfc2NoZW1lX3JlcXVlc3RfZ2V0X3NjaGVtZShyZXF1ZXN0KTsKLSAgICAgICAgZ19hc3NlcnQo
c2NoZW1lKTsKLSAgICAgICAgZ19hc3NlcnQodGVzdC0+bV9oYW5kbGVyc01hcC5jb250YWlucyhT
dHJpbmc6OmZyb21VVEY4KHNjaGVtZSkpKTsKLQotICAgICAgICBpZiAoIWdfc3RyY21wMChzY2hl
bWUsICJlcnJvciIpKSB7Ci0gICAgICAgICAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3IoZ19lcnJv
cl9uZXdfbGl0ZXJhbChnX3F1YXJrX2Zyb21fc3RyaW5nKGVycm9yRG9tYWluKSwgZXJyb3JDb2Rl
LCBlcnJvck1lc3NhZ2UpKTsKLSAgICAgICAgICAgIHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3Rf
ZmluaXNoX2Vycm9yKHJlcXVlc3QsIGVycm9yLmdldCgpKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IFVSSVNjaGVtZUhhbmRsZXImIGhhbmRsZXIgPSB0
ZXN0LT5tX2hhbmRsZXJzTWFwLmdldChTdHJpbmc6OmZyb21VVEY4KHNjaGVtZSkpOwotCi0gICAg
ICAgIGlmICghZ19zdHJjbXAwKHNjaGVtZSwgImVjaG8iKSkgewotICAgICAgICAgICAgY2hhciog
cmVwbHlIVE1MID0gZ19zdHJkdXBfcHJpbnRmKGhhbmRsZXIucmVwbHkuZGF0YSgpLCB3ZWJraXRf
dXJpX3NjaGVtZV9yZXF1ZXN0X2dldF9wYXRoKHJlcXVlc3QpKTsKLSAgICAgICAgICAgIGdfbWVt
b3J5X2lucHV0X3N0cmVhbV9hZGRfZGF0YShHX01FTU9SWV9JTlBVVF9TVFJFQU0oaW5wdXRTdHJl
YW0uZ2V0KCkpLCByZXBseUhUTUwsIHN0cmxlbihyZXBseUhUTUwpLCBnX2ZyZWUpOwotICAgICAg
ICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAoc2NoZW1lLCAiY2xvc2VkIikpCi0gICAgICAgICAgICBn
X2lucHV0X3N0cmVhbV9jbG9zZShpbnB1dFN0cmVhbS5nZXQoKSwgMCwgMCk7Ci0gICAgICAgIGVs
c2UgaWYgKCFoYW5kbGVyLnJlcGx5LmlzTnVsbCgpKQotICAgICAgICAgICAgZ19tZW1vcnlfaW5w
dXRfc3RyZWFtX2FkZF9kYXRhKEdfTUVNT1JZX0lOUFVUX1NUUkVBTShpbnB1dFN0cmVhbS5nZXQo
KSksIGhhbmRsZXIucmVwbHkuZGF0YSgpLCBoYW5kbGVyLnJlcGx5Lmxlbmd0aCgpLCAwKTsKLQot
ICAgICAgICB3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2ZpbmlzaChyZXF1ZXN0LCBpbnB1dFN0
cmVhbS5nZXQoKSwgaGFuZGxlci5yZXBseUxlbmd0aCwgaGFuZGxlci5taW1lVHlwZS5kYXRhKCkp
OwotICAgIH0KLQotICAgIHZvaWQgcmVnaXN0ZXJVUklTY2hlbWVIYW5kbGVyKGNvbnN0IGNoYXIq
IHNjaGVtZSwgY29uc3QgY2hhciogcmVwbHksIGludCByZXBseUxlbmd0aCwgY29uc3QgY2hhciog
bWltZVR5cGUpCi0gICAgewotICAgICAgICBtX2hhbmRsZXJzTWFwLnNldChTdHJpbmc6OmZyb21V
VEY4KHNjaGVtZSksIFVSSVNjaGVtZUhhbmRsZXIocmVwbHksIHJlcGx5TGVuZ3RoLCBtaW1lVHlw
ZSkpOwotICAgICAgICB3ZWJraXRfd2ViX2NvbnRleHRfcmVnaXN0ZXJfdXJpX3NjaGVtZSh3ZWJr
aXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSwgc2NoZW1lLCB1cmlTY2hlbWVSZXF1ZXN0Q2Fs
bGJhY2ssIHRoaXMsIDApOwotICAgIH0KLQotICAgIEdSZWZQdHI8V2ViS2l0VVJJU2NoZW1lUmVx
dWVzdD4gbV91cmlTY2hlbWVSZXF1ZXN0OwotICAgIEhhc2hNYXA8U3RyaW5nLCBVUklTY2hlbWVI
YW5kbGVyPiBtX2hhbmRsZXJzTWFwOwotfTsKLQotc3RhdGljIHZvaWQgdGVzdFdlYkNvbnRleHRV
UklTY2hlbWUoVVJJU2NoZW1lVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0
LT5yZWdpc3RlclVSSVNjaGVtZUhhbmRsZXIoImZvbyIsIGtCYXJIVE1MLCBzdHJsZW4oa0JhckhU
TUwpLCAidGV4dC9odG1sIik7Ci0gICAgdGVzdC0+bG9hZFVSSSgiZm9vOmJsYW5rIik7Ci0gICAg
dGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgc2l6ZV90IG1haW5SZXNvdXJjZURh
dGFTaXplID0gMDsKLSAgICBjb25zdCBjaGFyKiBtYWluUmVzb3VyY2VEYXRhID0gdGVzdC0+bWFp
blJlc291cmNlRGF0YShtYWluUmVzb3VyY2VEYXRhU2l6ZSk7Ci0gICAgZ19hc3NlcnRfY21waW50
KG1haW5SZXNvdXJjZURhdGFTaXplLCA9PSwgc3RybGVuKGtCYXJIVE1MKSk7Ci0gICAgZ19hc3Nl
cnQoIXN0cm5jbXAobWFpblJlc291cmNlRGF0YSwga0JhckhUTUwsIG1haW5SZXNvdXJjZURhdGFT
aXplKSk7Ci0KLSAgICB0ZXN0LT5yZWdpc3RlclVSSVNjaGVtZUhhbmRsZXIoImVjaG8iLCBrRWNo
b0hUTUxGb3JtYXQsIC0xLCAidGV4dC9odG1sIik7Ci0gICAgdGVzdC0+bG9hZFVSSSgiZWNobzpo
ZWxsbyB3b3JsZCIpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIEdP
d25QdHI8Y2hhcj4gZWNob0hUTUwoZ19zdHJkdXBfcHJpbnRmKGtFY2hvSFRNTEZvcm1hdCwgd2Vi
a2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9nZXRfcGF0aCh0ZXN0LT5tX3VyaVNjaGVtZVJlcXVlc3Qu
Z2V0KCkpKSk7Ci0gICAgbWFpblJlc291cmNlRGF0YVNpemUgPSAwOwotICAgIG1haW5SZXNvdXJj
ZURhdGEgPSB0ZXN0LT5tYWluUmVzb3VyY2VEYXRhKG1haW5SZXNvdXJjZURhdGFTaXplKTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQobWFpblJlc291cmNlRGF0YVNpemUsID09LCBzdHJsZW4oZWNob0hU
TUwuZ2V0KCkpKTsKLSAgICBnX2Fzc2VydCghc3RybmNtcChtYWluUmVzb3VyY2VEYXRhLCBlY2hv
SFRNTC5nZXQoKSwgbWFpblJlc291cmNlRGF0YVNpemUpKTsKLQotICAgIHRlc3QtPnJlZ2lzdGVy
VVJJU2NoZW1lSGFuZGxlcigibm9taW1lIiwga0JhckhUTUwsIC0xLCAwKTsKLSAgICB0ZXN0LT5t
X2xvYWRFdmVudHMuY2xlYXIoKTsKLSAgICB0ZXN0LT5sb2FkVVJJKCJub21pbWU6Zm9vIGJhciIp
OwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGdfYXNzZXJ0KHRlc3Qt
Pm1fbG9hZEV2ZW50cy5jb250YWlucyhMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRG
YWlsZWQpKTsKLQotICAgIHRlc3QtPnJlZ2lzdGVyVVJJU2NoZW1lSGFuZGxlcigiZW1wdHkiLCAw
LCAwLCAidGV4dC9odG1sIik7Ci0gICAgdGVzdC0+bV9sb2FkRXZlbnRzLmNsZWFyKCk7Ci0gICAg
dGVzdC0+bG9hZFVSSSgiZW1wdHk6bm90aGluZyIpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRG
aW5pc2hlZCgpOwotICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX2xvYWRFdmVudHMuY29udGFpbnMoTG9h
ZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkRmFpbGVkKSk7Ci0gICAgZ19hc3NlcnQoIXRl
c3QtPm1fbG9hZEV2ZW50cy5jb250YWlucyhMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmFpbGVkKSk7
Ci0KLSAgICB0ZXN0LT5yZWdpc3RlclVSSVNjaGVtZUhhbmRsZXIoImVycm9yIiwgMCwgMCwgMCk7
Ci0gICAgdGVzdC0+bV9sb2FkRXZlbnRzLmNsZWFyKCk7Ci0gICAgdGVzdC0+bG9hZFVSSSgiZXJy
b3I6ZXJyb3IiKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBnX2Fz
c2VydCh0ZXN0LT5tX2xvYWRFdmVudHMuY29udGFpbnMoTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlz
aW9uYWxMb2FkRmFpbGVkKSk7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV9sb2FkRmFpbGVkKTsKLSAg
ICBnX2Fzc2VydF9lcnJvcih0ZXN0LT5tX2Vycm9yLmdldCgpLCBnX3F1YXJrX2Zyb21fc3RyaW5n
KGVycm9yRG9tYWluKSwgZXJyb3JDb2RlKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9l
cnJvci0+bWVzc2FnZSwgPT0sIGVycm9yTWVzc2FnZSk7Ci0KLSAgICB0ZXN0LT5yZWdpc3RlclVS
SVNjaGVtZUhhbmRsZXIoImNsb3NlZCIsIDAsIDAsIDApOwotICAgIHRlc3QtPm1fbG9hZEV2ZW50
cy5jbGVhcigpOwotICAgIHRlc3QtPmxvYWRVUkkoImNsb3NlZDppbnB1dC1zdHJlYW0iKTsKLSAg
ICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX2xv
YWRFdmVudHMuY29udGFpbnMoTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkRmFpbGVk
KSk7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV9sb2FkRmFpbGVkKTsKLSAgICBnX2Fzc2VydF9lcnJv
cih0ZXN0LT5tX2Vycm9yLmdldCgpLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX0NMT1NFRCk7Ci19
Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJDb250ZXh0U3BlbGxDaGVja2VyKFRlc3QqIHRlc3QsIGdj
b25zdHBvaW50ZXIpCi17Ci0gICAgV2ViS2l0V2ViQ29udGV4dCogd2ViQ29udGV4dCA9IHdlYmtp
dF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpOwotCi0gICAgLy8gQ2hlY2sgd2hhdCBoYXBwZW5z
IGlmIG5vIHNwZWxsIGNoZWNraW5nIGxhbmd1YWdlIGhhcyBiZWVuIHNldC4KLSAgICBjb25zdCBn
Y2hhciogY29uc3QqIGN1cnJlbnRMYW5ndWFnZSA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc3Bl
bGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKHdlYkNvbnRleHQpOwotICAgIGdfYXNzZXJ0KCFjdXJyZW50
TGFuZ3VhZ2UpOwotCi0gICAgLy8gU2V0IHRoZSBsYW5ndWFnZSB0byBhIHNwZWNpZmljIG9uZS4K
LSAgICBHUmVmUHRyPEdQdHJBcnJheT4gbGFuZ3VhZ2VzID0gYWRvcHRHUmVmKGdfcHRyX2FycmF5
X25ldygpKTsKLSAgICBnX3B0cl9hcnJheV9hZGQobGFuZ3VhZ2VzLmdldCgpLCBjb25zdF9jYXN0
PGdwb2ludGVyPihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4oImVuX1VTIikpKTsKLSAgICBnX3B0
cl9hcnJheV9hZGQobGFuZ3VhZ2VzLmdldCgpLCAwKTsKLSAgICB3ZWJraXRfd2ViX2NvbnRleHRf
c2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyh3ZWJDb250ZXh0LCByZWludGVycHJldF9jYXN0
PGNvbnN0IGNoYXIqIGNvbnN0Kj4obGFuZ3VhZ2VzLT5wZGF0YSkpOwotICAgIGN1cnJlbnRMYW5n
dWFnZSA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKHdl
YkNvbnRleHQpOwotICAgIGdfYXNzZXJ0X2NtcHVpbnQoZ19zdHJ2X2xlbmd0aChjb25zdF9jYXN0
PGNoYXIqKj4oY3VycmVudExhbmd1YWdlKSksID09LCAxKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIo
Y3VycmVudExhbmd1YWdlWzBdLCA9PSwgImVuX1VTIik7Ci0KLSAgICAvLyBTZXQgdGhlIGxhbmd1
YWdlIHN0cmluZyB0byBsaXN0IG9mIHZhbGlkIGxhbmd1YWdlcy4KLSAgICBnX3B0cl9hcnJheV9y
ZW1vdmVfaW5kZXhfZmFzdChsYW5ndWFnZXMuZ2V0KCksIGxhbmd1YWdlcy0+bGVuIC0gMSk7Ci0g
ICAgZ19wdHJfYXJyYXlfYWRkKGxhbmd1YWdlcy5nZXQoKSwgY29uc3RfY2FzdDxncG9pbnRlcj4o
c3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KCJlbl9HQiIpKSk7Ci0gICAgZ19wdHJfYXJyYXlfYWRk
KGxhbmd1YWdlcy5nZXQoKSwgMCk7Ci0gICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF9zcGVsbF9j
aGVja2luZ19sYW5ndWFnZXMod2ViQ29udGV4dCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFy
KiBjb25zdCo+KGxhbmd1YWdlcy0+cGRhdGEpKTsKLSAgICBjdXJyZW50TGFuZ3VhZ2UgPSB3ZWJr
aXRfd2ViX2NvbnRleHRfZ2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyh3ZWJDb250ZXh0KTsK
LSAgICBnX2Fzc2VydF9jbXB1aW50KGdfc3Rydl9sZW5ndGgoY29uc3RfY2FzdDxjaGFyKio+KGN1
cnJlbnRMYW5ndWFnZSkpLCA9PSwgMik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKGN1cnJlbnRMYW5n
dWFnZVswXSwgPT0sICJlbl9VUyIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihjdXJyZW50TGFuZ3Vh
Z2VbMV0sID09LCAiZW5fR0IiKTsKLQotICAgIC8vIFRyeSBwYXNzaW5nIGEgd3JvbmcgbGFuZ3Vh
Z2UgYWxvbmcgd2l0aCBnb29kIG9uZXMuCi0gICAgZ19wdHJfYXJyYXlfcmVtb3ZlX2luZGV4X2Zh
c3QobGFuZ3VhZ2VzLmdldCgpLCBsYW5ndWFnZXMtPmxlbiAtIDEpOwotICAgIGdfcHRyX2FycmF5
X2FkZChsYW5ndWFnZXMuZ2V0KCksIGNvbnN0X2Nhc3Q8Z3BvaW50ZXI+KHN0YXRpY19jYXN0PGNv
bnN0IHZvaWQqPigiYmRfV1IiKSkpOwotICAgIGdfcHRyX2FycmF5X2FkZChsYW5ndWFnZXMuZ2V0
KCksIDApOwotICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3Vh
Z2VzKHdlYkNvbnRleHQsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhciogY29uc3QqPihsYW5n
dWFnZXMtPnBkYXRhKSk7Ci0gICAgY3VycmVudExhbmd1YWdlID0gd2Via2l0X3dlYl9jb250ZXh0
X2dldF9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMod2ViQ29udGV4dCk7Ci0gICAgZ19hc3NlcnRf
Y21wdWludChnX3N0cnZfbGVuZ3RoKGNvbnN0X2Nhc3Q8Y2hhcioqPihjdXJyZW50TGFuZ3VhZ2Up
KSwgPT0sIDIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihjdXJyZW50TGFuZ3VhZ2VbMF0sID09LCAi
ZW5fVVMiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoY3VycmVudExhbmd1YWdlWzFdLCA9PSwgImVu
X0dCIik7Ci0KLSAgICAvLyBUcnkgcGFzc2luZyBhIGxpc3Qgd2l0aCBvbmx5IHdyb25nIGxhbmd1
YWdlcy4KLSAgICBsYW5ndWFnZXMgPSBhZG9wdEdSZWYoZ19wdHJfYXJyYXlfbmV3KCkpOwotICAg
IGdfcHRyX2FycmF5X2FkZChsYW5ndWFnZXMuZ2V0KCksIGNvbnN0X2Nhc3Q8Z3BvaW50ZXI+KHN0
YXRpY19jYXN0PGNvbnN0IHZvaWQqPigiYmRfV1IiKSkpOwotICAgIGdfcHRyX2FycmF5X2FkZChs
YW5ndWFnZXMuZ2V0KCksIGNvbnN0X2Nhc3Q8Z3BvaW50ZXI+KHN0YXRpY19jYXN0PGNvbnN0IHZv
aWQqPigid3JfQkQiKSkpOwotICAgIGdfcHRyX2FycmF5X2FkZChsYW5ndWFnZXMuZ2V0KCksIDAp
OwotICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKHdl
YkNvbnRleHQsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhciogY29uc3QqPihsYW5ndWFnZXMt
PnBkYXRhKSk7Ci0gICAgY3VycmVudExhbmd1YWdlID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9z
cGVsbF9jaGVja2luZ19sYW5ndWFnZXMod2ViQ29udGV4dCk7Ci0gICAgZ19hc3NlcnQoIWN1cnJl
bnRMYW5ndWFnZSk7Ci0KLSAgICAvLyBDaGVjayBkaXNhYmxpbmcgYW5kIHJlLWVuYWJsaW5nIHNw
ZWxsIGNoZWNraW5nLgotICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfc3BlbGxfY2hlY2tpbmdf
ZW5hYmxlZCh3ZWJDb250ZXh0LCBGQUxTRSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfY29u
dGV4dF9nZXRfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZCh3ZWJDb250ZXh0KSk7Ci0gICAgd2Via2l0
X3dlYl9jb250ZXh0X3NldF9zcGVsbF9jaGVja2luZ19lbmFibGVkKHdlYkNvbnRleHQsIFRSVUUp
OwotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hlY2tpbmdfZW5h
YmxlZCh3ZWJDb250ZXh0KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJDb250ZXh0TGFuZ3Vh
Z2VzKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHN0YXRpYyBjb25z
dCBjaGFyKiBleHBlY3RlZERlZmF1bHRMYW5ndWFnZSA9ICJlbiI7Ci0gICAgdGVzdC0+bG9hZFVS
SShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50
aWxMb2FkRmluaXNoZWQoKTsKLSAgICBzaXplX3QgbWFpblJlc291cmNlRGF0YVNpemUgPSAwOwot
ICAgIGNvbnN0IGNoYXIqIG1haW5SZXNvdXJjZURhdGEgPSB0ZXN0LT5tYWluUmVzb3VyY2VEYXRh
KG1haW5SZXNvdXJjZURhdGFTaXplKTsKLSAgICBnX2Fzc2VydF9jbXB1aW50KG1haW5SZXNvdXJj
ZURhdGFTaXplLCA9PSwgc3RybGVuKGV4cGVjdGVkRGVmYXVsdExhbmd1YWdlKSk7Ci0gICAgZ19h
c3NlcnQoIXN0cm5jbXAobWFpblJlc291cmNlRGF0YSwgZXhwZWN0ZWREZWZhdWx0TGFuZ3VhZ2Us
IG1haW5SZXNvdXJjZURhdGFTaXplKSk7Ci0KLSAgICBHUmVmUHRyPEdQdHJBcnJheT4gbGFuZ3Vh
Z2VzID0gYWRvcHRHUmVmKGdfcHRyX2FycmF5X25ldygpKTsKLSAgICBnX3B0cl9hcnJheV9hZGQo
bGFuZ3VhZ2VzLmdldCgpLCBjb25zdF9jYXN0PGdwb2ludGVyPihzdGF0aWNfY2FzdDxjb25zdCB2
b2lkKj4oImVuIikpKTsKLSAgICBnX3B0cl9hcnJheV9hZGQobGFuZ3VhZ2VzLmdldCgpLCBjb25z
dF9jYXN0PGdwb2ludGVyPihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4oIkVTX2VzIikpKTsKLSAg
ICBnX3B0cl9hcnJheV9hZGQobGFuZ3VhZ2VzLmdldCgpLCBjb25zdF9jYXN0PGdwb2ludGVyPihz
dGF0aWNfY2FzdDxjb25zdCB2b2lkKj4oImRFIikpKTsKLSAgICBnX3B0cl9hcnJheV9hZGQobGFu
Z3VhZ2VzLmdldCgpLCAwKTsKLSAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3ByZWZlcnJlZF9s
YW5ndWFnZXMod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCksIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgY2hhciogY29uc3QqPihsYW5ndWFnZXMtPnBkYXRhKSk7Ci0KLSAgICBzdGF0aWMg
Y29uc3QgY2hhciogZXhwZWN0ZWRMYW5ndWFnZXMgPSAiZW4sIGVzLWVzO3E9MC45MCwgZGU7cT0w
LjgwIjsKLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi8iKS5kYXRh
KCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIG1haW5SZXNvdXJj
ZURhdGFTaXplID0gMDsKLSAgICBtYWluUmVzb3VyY2VEYXRhID0gdGVzdC0+bWFpblJlc291cmNl
RGF0YShtYWluUmVzb3VyY2VEYXRhU2l6ZSk7Ci0gICAgZ19hc3NlcnRfY21wdWludChtYWluUmVz
b3VyY2VEYXRhU2l6ZSwgPT0sIHN0cmxlbihleHBlY3RlZExhbmd1YWdlcykpOwotICAgIGdfYXNz
ZXJ0KCFzdHJuY21wKG1haW5SZXNvdXJjZURhdGEsIGV4cGVjdGVkTGFuZ3VhZ2VzLCBtYWluUmVz
b3VyY2VEYXRhU2l6ZSkpOwotfQotCi1zdGF0aWMgdm9pZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2Vy
dmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBjaGFyKiBwYXRoLCBHSGFz
aFRhYmxlKiwgU291cENsaWVudENvbnRleHQqLCBncG9pbnRlcikKLXsKLSAgICBpZiAobWVzc2Fn
ZS0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgewotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0
X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvIikpIHsKLSAgICAg
ICAgY29uc3QgY2hhciogYWNjZXB0TGFuZ3VhZ2UgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRf
b25lKG1lc3NhZ2UtPnJlcXVlc3RfaGVhZGVycywgIkFjY2VwdC1MYW5ndWFnZSIpOwotICAgICAg
ICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7Ci0gICAg
ICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQ
X01FTU9SWV9DT1BZLCBhY2NlcHRMYW5ndWFnZSwgc3RybGVuKGFjY2VwdExhbmd1YWdlKSk7Ci0g
ICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkp
OwotICAgIH0gZWxzZQotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBT
T1VQX1NUQVRVU19OT1RfRk9VTkQpOwotfQotCi1jbGFzcyBTZWN1cml0eVBvbGljeVRlc3Q6IHB1
YmxpYyBUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFNlY3VyaXR5
UG9saWN5VGVzdCk7Ci0KLSAgICBlbnVtIFNlY3VyaXR5UG9saWN5IHsKLSAgICAgICAgTG9jYWwg
PSAxIDw8IDEsCi0gICAgICAgIE5vQWNjZXNzID0gMSA8PCAyLAotICAgICAgICBEaXNwbGF5SXNv
bGF0ZWQgPSAxIDw8IDMsCi0gICAgICAgIFNlY3VyZSA9IDEgPDwgNCwKLSAgICAgICAgQ09SU0Vu
YWJsZWQgPSAxIDw8IDUsCi0gICAgICAgIEVtcHR5RG9jdW1lbnQgPSAxIDw8IDYKLSAgICB9Owot
Ci0gICAgU2VjdXJpdHlQb2xpY3lUZXN0KCkKLSAgICAgICAgOiBtX21hbmFnZXIod2Via2l0X3dl
Yl9jb250ZXh0X2dldF9zZWN1cml0eV9tYW5hZ2VyKHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVm
YXVsdCgpKSkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCB2ZXJpZnlUaGF0U2NoZW1lTWF0Y2hl
c1BvbGljeShjb25zdCBjaGFyKiBzY2hlbWUsIHVuc2lnbmVkIHBvbGljeSkKLSAgICB7Ci0gICAg
ICAgIGlmIChwb2xpY3kgJiBMb2NhbCkKLSAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9zZWN1
cml0eV9tYW5hZ2VyX3VyaV9zY2hlbWVfaXNfbG9jYWwobV9tYW5hZ2VyLCBzY2hlbWUpKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9zZWN1cml0eV9tYW5hZ2Vy
X3VyaV9zY2hlbWVfaXNfbG9jYWwobV9tYW5hZ2VyLCBzY2hlbWUpKTsKLSAgICAgICAgaWYgKHBv
bGljeSAmIE5vQWNjZXNzKQotICAgICAgICAgICAgZ19hc3NlcnQod2Via2l0X3NlY3VyaXR5X21h
bmFnZXJfdXJpX3NjaGVtZV9pc19ub19hY2Nlc3MobV9tYW5hZ2VyLCBzY2hlbWUpKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9zZWN1cml0eV9tYW5hZ2VyX3Vy
aV9zY2hlbWVfaXNfbm9fYWNjZXNzKG1fbWFuYWdlciwgc2NoZW1lKSk7Ci0gICAgICAgIGlmIChw
b2xpY3kgJiBEaXNwbGF5SXNvbGF0ZWQpCi0gICAgICAgICAgICBnX2Fzc2VydCh3ZWJraXRfc2Vj
dXJpdHlfbWFuYWdlcl91cmlfc2NoZW1lX2lzX2Rpc3BsYXlfaXNvbGF0ZWQobV9tYW5hZ2VyLCBz
Y2hlbWUpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9zZWN1
cml0eV9tYW5hZ2VyX3VyaV9zY2hlbWVfaXNfZGlzcGxheV9pc29sYXRlZChtX21hbmFnZXIsIHNj
aGVtZSkpOwotICAgICAgICBpZiAocG9saWN5ICYgU2VjdXJlKQotICAgICAgICAgICAgZ19hc3Nl
cnQod2Via2l0X3NlY3VyaXR5X21hbmFnZXJfdXJpX3NjaGVtZV9pc19zZWN1cmUobV9tYW5hZ2Vy
LCBzY2hlbWUpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9z
ZWN1cml0eV9tYW5hZ2VyX3VyaV9zY2hlbWVfaXNfc2VjdXJlKG1fbWFuYWdlciwgc2NoZW1lKSk7
Ci0gICAgICAgIGlmIChwb2xpY3kgJiBDT1JTRW5hYmxlZCkKLSAgICAgICAgICAgIGdfYXNzZXJ0
KHdlYmtpdF9zZWN1cml0eV9tYW5hZ2VyX3VyaV9zY2hlbWVfaXNfY29yc19lbmFibGVkKG1fbWFu
YWdlciwgc2NoZW1lKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJr
aXRfc2VjdXJpdHlfbWFuYWdlcl91cmlfc2NoZW1lX2lzX2NvcnNfZW5hYmxlZChtX21hbmFnZXIs
IHNjaGVtZSkpOwotICAgICAgICBpZiAocG9saWN5ICYgRW1wdHlEb2N1bWVudCkKLSAgICAgICAg
ICAgIGdfYXNzZXJ0KHdlYmtpdF9zZWN1cml0eV9tYW5hZ2VyX3VyaV9zY2hlbWVfaXNfZW1wdHlf
ZG9jdW1lbnQobV9tYW5hZ2VyLCBzY2hlbWUpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
Z19hc3NlcnQoIXdlYmtpdF9zZWN1cml0eV9tYW5hZ2VyX3VyaV9zY2hlbWVfaXNfZW1wdHlfZG9j
dW1lbnQobV9tYW5hZ2VyLCBzY2hlbWUpKTsKLSAgICB9Ci0KLSAgICBXZWJLaXRTZWN1cml0eU1h
bmFnZXIqIG1fbWFuYWdlcjsKLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJDb250ZXh0U2VjdXJp
dHlQb2xpY3koU2VjdXJpdHlQb2xpY3lUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAg
IC8vIFZlcmlmeVRoYXRTY2hlbWVNYXRjaGVzUG9saWN5IGRlZmF1bHQgcG9saWN5IGZvciB3ZWxs
IGtub3duIHNjaGVtZXMuCi0gICAgdGVzdC0+dmVyaWZ5VGhhdFNjaGVtZU1hdGNoZXNQb2xpY3ko
Imh0dHAiLCBTZWN1cml0eVBvbGljeVRlc3Q6OkNPUlNFbmFibGVkKTsKLSAgICB0ZXN0LT52ZXJp
ZnlUaGF0U2NoZW1lTWF0Y2hlc1BvbGljeSgiaHR0cHMiLCBTZWN1cml0eVBvbGljeVRlc3Q6OkNP
UlNFbmFibGVkIHwgU2VjdXJpdHlQb2xpY3lUZXN0OjpTZWN1cmUpOwotICAgIHRlc3QtPnZlcmlm
eVRoYXRTY2hlbWVNYXRjaGVzUG9saWN5KCJmaWxlIiwgU2VjdXJpdHlQb2xpY3lUZXN0OjpMb2Nh
bCk7Ci0gICAgdGVzdC0+dmVyaWZ5VGhhdFNjaGVtZU1hdGNoZXNQb2xpY3koImRhdGEiLCBTZWN1
cml0eVBvbGljeVRlc3Q6Ok5vQWNjZXNzIHwgU2VjdXJpdHlQb2xpY3lUZXN0OjpTZWN1cmUpOwot
ICAgIHRlc3QtPnZlcmlmeVRoYXRTY2hlbWVNYXRjaGVzUG9saWN5KCJhYm91dCIsIFNlY3VyaXR5
UG9saWN5VGVzdDo6Tm9BY2Nlc3MgfCBTZWN1cml0eVBvbGljeVRlc3Q6OlNlY3VyZSB8IFNlY3Vy
aXR5UG9saWN5VGVzdDo6RW1wdHlEb2N1bWVudCk7Ci0KLSAgICAvLyBDdXN0b20gc2NoZW1lLgot
ICAgIHRlc3QtPnZlcmlmeVRoYXRTY2hlbWVNYXRjaGVzUG9saWN5KCJmb28iLCAwKTsKLQotICAg
IHdlYmtpdF9zZWN1cml0eV9tYW5hZ2VyX3JlZ2lzdGVyX3VyaV9zY2hlbWVfYXNfbG9jYWwodGVz
dC0+bV9tYW5hZ2VyLCAiZm9vIik7Ci0gICAgdGVzdC0+dmVyaWZ5VGhhdFNjaGVtZU1hdGNoZXNQ
b2xpY3koImZvbyIsIFNlY3VyaXR5UG9saWN5VGVzdDo6TG9jYWwpOwotICAgIHdlYmtpdF9zZWN1
cml0eV9tYW5hZ2VyX3JlZ2lzdGVyX3VyaV9zY2hlbWVfYXNfbm9fYWNjZXNzKHRlc3QtPm1fbWFu
YWdlciwgImZvbyIpOwotICAgIHRlc3QtPnZlcmlmeVRoYXRTY2hlbWVNYXRjaGVzUG9saWN5KCJm
b28iLCBTZWN1cml0eVBvbGljeVRlc3Q6OkxvY2FsIHwgU2VjdXJpdHlQb2xpY3lUZXN0OjpOb0Fj
Y2Vzcyk7Ci0gICAgd2Via2l0X3NlY3VyaXR5X21hbmFnZXJfcmVnaXN0ZXJfdXJpX3NjaGVtZV9h
c19kaXNwbGF5X2lzb2xhdGVkKHRlc3QtPm1fbWFuYWdlciwgImZvbyIpOwotICAgIHRlc3QtPnZl
cmlmeVRoYXRTY2hlbWVNYXRjaGVzUG9saWN5KCJmb28iLCBTZWN1cml0eVBvbGljeVRlc3Q6Okxv
Y2FsIHwgU2VjdXJpdHlQb2xpY3lUZXN0OjpOb0FjY2VzcyB8IFNlY3VyaXR5UG9saWN5VGVzdDo6
RGlzcGxheUlzb2xhdGVkKTsKLSAgICB3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl9yZWdpc3Rlcl91
cmlfc2NoZW1lX2FzX3NlY3VyZSh0ZXN0LT5tX21hbmFnZXIsICJmb28iKTsKLSAgICB0ZXN0LT52
ZXJpZnlUaGF0U2NoZW1lTWF0Y2hlc1BvbGljeSgiZm9vIiwgU2VjdXJpdHlQb2xpY3lUZXN0OjpM
b2NhbCB8IFNlY3VyaXR5UG9saWN5VGVzdDo6Tm9BY2Nlc3MgfCBTZWN1cml0eVBvbGljeVRlc3Q6
OkRpc3BsYXlJc29sYXRlZCB8IFNlY3VyaXR5UG9saWN5VGVzdDo6U2VjdXJlKTsKLSAgICB3ZWJr
aXRfc2VjdXJpdHlfbWFuYWdlcl9yZWdpc3Rlcl91cmlfc2NoZW1lX2FzX2NvcnNfZW5hYmxlZCh0
ZXN0LT5tX21hbmFnZXIsICJmb28iKTsKLSAgICB0ZXN0LT52ZXJpZnlUaGF0U2NoZW1lTWF0Y2hl
c1BvbGljeSgiZm9vIiwgU2VjdXJpdHlQb2xpY3lUZXN0OjpMb2NhbCB8IFNlY3VyaXR5UG9saWN5
VGVzdDo6Tm9BY2Nlc3MgfCBTZWN1cml0eVBvbGljeVRlc3Q6OkRpc3BsYXlJc29sYXRlZCB8IFNl
Y3VyaXR5UG9saWN5VGVzdDo6U2VjdXJlCi0gICAgICAgICAgICAgICAgfCBTZWN1cml0eVBvbGlj
eVRlc3Q6OkNPUlNFbmFibGVkKTsKLSAgICB3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl9yZWdpc3Rl
cl91cmlfc2NoZW1lX2FzX2VtcHR5X2RvY3VtZW50KHRlc3QtPm1fbWFuYWdlciwgImZvbyIpOwot
ICAgIHRlc3QtPnZlcmlmeVRoYXRTY2hlbWVNYXRjaGVzUG9saWN5KCJmb28iLCBTZWN1cml0eVBv
bGljeVRlc3Q6OkxvY2FsIHwgU2VjdXJpdHlQb2xpY3lUZXN0OjpOb0FjY2VzcyB8IFNlY3VyaXR5
UG9saWN5VGVzdDo6RGlzcGxheUlzb2xhdGVkIHwgU2VjdXJpdHlQb2xpY3lUZXN0OjpTZWN1cmUK
LSAgICAgICAgICAgICAgICB8IFNlY3VyaXR5UG9saWN5VGVzdDo6Q09SU0VuYWJsZWQgfCBTZWN1
cml0eVBvbGljeVRlc3Q6OkVtcHR5RG9jdW1lbnQpOwotfQotCi12b2lkIGJlZm9yZUFsbCgpCi17
Ci0gICAga1NlcnZlciA9IG5ldyBXZWJLaXRUZXN0U2VydmVyKCk7Ci0gICAga1NlcnZlci0+cnVu
KHNlcnZlckNhbGxiYWNrKTsKLQotICAgIFRlc3Q6OmFkZCgiV2ViS2l0V2ViQ29udGV4dCIsICJk
ZWZhdWx0LWNvbnRleHQiLCB0ZXN0V2ViQ29udGV4dERlZmF1bHQpOwotICAgIFBsdWdpbnNUZXN0
OjphZGQoIldlYktpdFdlYkNvbnRleHQiLCAiZ2V0LXBsdWdpbnMiLCB0ZXN0V2ViQ29udGV4dEdl
dFBsdWdpbnMpOwotICAgIFVSSVNjaGVtZVRlc3Q6OmFkZCgiV2ViS2l0V2ViQ29udGV4dCIsICJ1
cmktc2NoZW1lIiwgdGVzdFdlYkNvbnRleHRVUklTY2hlbWUpOwotICAgIFRlc3Q6OmFkZCgiV2Vi
S2l0V2ViQ29udGV4dCIsICJzcGVsbC1jaGVja2VyIiwgdGVzdFdlYkNvbnRleHRTcGVsbENoZWNr
ZXIpOwotICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYkNvbnRleHQiLCAibGFuZ3VhZ2Vz
IiwgdGVzdFdlYkNvbnRleHRMYW5ndWFnZXMpOwotICAgIFNlY3VyaXR5UG9saWN5VGVzdDo6YWRk
KCJXZWJLaXRTZWN1cml0eU1hbmFnZXIiLCAic2VjdXJpdHktcG9saWN5IiwgdGVzdFdlYkNvbnRl
eHRTZWN1cml0eVBvbGljeSk7Ci19Ci0KLXZvaWQgYWZ0ZXJBbGwoKQotewotICAgIGRlbGV0ZSBr
U2VydmVyOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBkNzBiMGEyLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDYw
OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KU1N0cmluZ1JlZi5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTVmFsdWVS
ZWYuaD4KLSNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dS
ZWZQdHIuaD4KLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdEZWZhdWx0Q29udGV4dChXZWJWaWV3
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X2NvbnRleHQodGVzdC0+bV93ZWJWaWV3KSA9PSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0
X2RlZmF1bHQoKSk7Ci0KLSAgICAvLyBDaGVjayB0aGF0IGEgd2ViIHZpZXcgY3JlYXRlZCB3aXRo
IGdfb2JqZWN0X25ldyBoYXMgdGhlIGRlZmF1bHQgY29udGV4dC4KLSAgICBHUmVmUHRyPFdlYktp
dFdlYlZpZXc+IHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcoZ19vYmplY3RfbmV3KFdFQktJVF9U
WVBFX1dFQl9WSUVXLCBOVUxMKSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dldF9j
b250ZXh0KHdlYlZpZXcuZ2V0KCkpID09IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgp
KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdDdXN0b21DaGFyc2V0KFdlYlZpZXdUZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdf
Z2V0X2N1c3RvbV9jaGFyc2V0KHRlc3QtPm1fd2ViVmlldykpOwotICAgIHdlYmtpdF93ZWJfdmll
d19zZXRfY3VzdG9tX2NoYXJzZXQodGVzdC0+bV93ZWJWaWV3LCAidXRmOCIpOwotICAgIGdfYXNz
ZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X2N1c3RvbV9jaGFyc2V0KHRlc3QtPm1fd2Vi
VmlldyksID09LCAidXRmOCIpOwotICAgIC8vIEdvIGJhY2sgdG8gdGhlIGRlZmF1bHQgY2hhcnNl
dC4KLSAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X2N1c3RvbV9jaGFyc2V0KHRlc3QtPm1fd2ViVmll
dywgMCk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19nZXRfY3VzdG9tX2NoYXJzZXQo
dGVzdC0+bV93ZWJWaWV3KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3U2V0dGluZ3Mo
V2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgV2ViS2l0U2V0dGluZ3Mq
IGRlZmF1bHRTZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3ModGVzdC0+bV93
ZWJWaWV3KTsKLSAgICBnX2Fzc2VydChkZWZhdWx0U2V0dGluZ3MpOwotICAgIGdfYXNzZXJ0KHdl
YmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2phdmFzY3JpcHQoZGVmYXVsdFNldHRpbmdzKSk7Ci0K
LSAgICBHUmVmUHRyPFdlYktpdFNldHRpbmdzPiBuZXdTZXR0aW5ncyA9IGFkb3B0R1JlZih3ZWJr
aXRfc2V0dGluZ3NfbmV3KCkpOwotICAgIGdfb2JqZWN0X3NldChHX09CSkVDVChuZXdTZXR0aW5n
cy5nZXQoKSksICJlbmFibGUtamF2YXNjcmlwdCIsIEZBTFNFLCBOVUxMKTsKLSAgICB3ZWJraXRf
d2ViX3ZpZXdfc2V0X3NldHRpbmdzKHRlc3QtPm1fd2ViVmlldywgbmV3U2V0dGluZ3MuZ2V0KCkp
OwotCi0gICAgV2ViS2l0U2V0dGluZ3MqIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9z
ZXR0aW5ncyh0ZXN0LT5tX3dlYlZpZXcpOwotICAgIGdfYXNzZXJ0KHNldHRpbmdzICE9IGRlZmF1
bHRTZXR0aW5ncyk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2ph
dmFzY3JpcHQoc2V0dGluZ3MpKTsKLQotICAgIEdSZWZQdHI8R3RrV2lkZ2V0PiB3ZWJWaWV3MiA9
IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKLSAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRX
aGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHdlYlZpZXcyLmdldCgpKSk7Ci0gICAgd2Via2l0X3dl
Yl92aWV3X3NldF9zZXR0aW5ncyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldzIuZ2V0KCkpLCBzZXR0
aW5ncyk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyhXRUJLSVRf
V0VCX1ZJRVcod2ViVmlldzIuZ2V0KCkpKSA9PSBzZXR0aW5ncyk7Ci0KLSAgICBHUmVmUHRyPFdl
YktpdFNldHRpbmdzPiBuZXdTZXR0aW5nczIgPSBhZG9wdEdSZWYod2Via2l0X3NldHRpbmdzX25l
dygpKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X3NldHRpbmdzKFdFQktJVF9XRUJfVklFVyh3
ZWJWaWV3Mi5nZXQoKSksIG5ld1NldHRpbmdzMi5nZXQoKSk7Ci0gICAgc2V0dGluZ3MgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3Mi5nZXQoKSkp
OwotICAgIGdfYXNzZXJ0KHNldHRpbmdzID09IG5ld1NldHRpbmdzMi5nZXQoKSk7Ci0gICAgZ19h
c3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfamF2YXNjcmlwdChzZXR0aW5ncykpOwot
fQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1pvb21MZXZlbChXZWJWaWV3VGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKLXsKLSAgICBnX2Fzc2VydF9jbXBmbG9hdCh3ZWJraXRfd2ViX3ZpZXdf
Z2V0X3pvb21fbGV2ZWwodGVzdC0+bV93ZWJWaWV3KSwgPT0sIDEpOwotICAgIHdlYmtpdF93ZWJf
dmlld19zZXRfem9vbV9sZXZlbCh0ZXN0LT5tX3dlYlZpZXcsIDIuNSk7Ci0gICAgZ19hc3NlcnRf
Y21wZmxvYXQod2Via2l0X3dlYl92aWV3X2dldF96b29tX2xldmVsKHRlc3QtPm1fd2ViVmlldyks
ID09LCAyLjUpOwotCi0gICAgd2Via2l0X3NldHRpbmdzX3NldF96b29tX3RleHRfb25seSh3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHRlc3QtPm1fd2ViVmlldyksIFRSVUUpOwotICAgIC8v
IFRoZSB6b29tIGxldmVsIHNob3VsZG4ndCBjaGFuZ2Ugd2hlbiB6b29tLXRleHQtb25seSBzZXR0
aW5nIGNoYW5nZXMuCi0gICAgZ19hc3NlcnRfY21wZmxvYXQod2Via2l0X3dlYl92aWV3X2dldF96
b29tX2xldmVsKHRlc3QtPm1fd2ViVmlldyksID09LCAyLjUpOwotfQotCi1zdGF0aWMgdm9pZCB0
ZXN0V2ViVmlld1J1bkphdmFTY3JpcHQoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIp
Ci17Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGh0bWwgPSAiPGh0bWw+PGJvZHk+PGEgaWQ9J1dl
YktpdExpbmsnIGhyZWY9J2h0dHA6Ly93d3cud2Via2l0Z3RrLm9yZy8nIHRpdGxlPSdXZWJLaXRH
VEsrIFRpdGxlJz5XZWJLaXRHVEsrIFdlYnNpdGU8L2E+PC9ib2R5PjwvaHRtbD4iOwotICAgIHRl
c3QtPmxvYWRIdG1sKGh0bWwsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgp
OwotCi0gICAgR093blB0cjxHRXJyb3I+IGVycm9yOwotICAgIFdlYktpdEphdmFzY3JpcHRSZXN1
bHQqIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmlu
aXNoZWQoIndpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnV2ViS2l0TGluaycpLnRpdGxl
OyIsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7Ci0g
ICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKLSAgICBHT3duUHRyPGNoYXI+IHZhbHVlU3RyaW5n
KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQp
KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAiV2ViS2l0R1RL
KyBUaXRsZSIpOwotCi0gICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRB
bmRXYWl0VW50aWxGaW5pc2hlZCgid2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdXZWJL
aXRMaW5rJykuaHJlZjsiLCAmZXJyb3Iub3V0UHRyKCkpOwotICAgIGdfYXNzZXJ0KGphdmFzY3Jp
cHRSZXN1bHQpOwotICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7Ci0gICAgdmFsdWVTdHJpbmcu
c2V0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1
bHQpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAiaHR0cDov
L3d3dy53ZWJraXRndGsub3JnLyIpOwotCi0gICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1
bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgid2luZG93LmRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdXZWJLaXRMaW5rJykudGV4dENvbnRlbnQiLCAmZXJyb3Iub3V0UHRyKCkpOwotICAg
IGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOwotICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7
Ci0gICAgdmFsdWVTdHJpbmcuc2V0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3Ry
aW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcu
Z2V0KCksID09LCAiV2ViS2l0R1RLKyBXZWJzaXRlIik7Ci0KLSAgICBqYXZhc2NyaXB0UmVzdWx0
ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJhID0gMjU7IiwgJmVy
cm9yLm91dFB0cigpKTsKLSAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBnX2Fz
c2VydCghZXJyb3IuZ2V0KCkpOwotICAgIGdfYXNzZXJ0X2NtcGZsb2F0KFdlYlZpZXdUZXN0Ojpq
YXZhc2NyaXB0UmVzdWx0VG9OdW1iZXIoamF2YXNjcmlwdFJlc3VsdCksID09LCAyNSk7Ci0KLSAg
ICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlz
aGVkKCJhID0gMi41OyIsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgZ19hc3NlcnQoamF2YXNjcmlw
dFJlc3VsdCk7Ci0gICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKLSAgICBnX2Fzc2VydF9jbXBm
bG9hdChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvTnVtYmVyKGphdmFzY3JpcHRSZXN1
bHQpLCA9PSwgMi41KTsKLQotICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2Ny
aXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImEgPSB0cnVlIiwgJmVycm9yLm91dFB0cigpKTsKLSAg
ICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkp
OwotICAgIGdfYXNzZXJ0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9Cb29sZWFuKGph
dmFzY3JpcHRSZXN1bHQpKTsKLQotICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZh
U2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImEgPSBmYWxzZSIsICZlcnJvci5vdXRQdHIoKSk7
Ci0gICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAgZ19hc3NlcnQoIWVycm9yLmdl
dCgpKTsKLSAgICBnX2Fzc2VydCghV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0Jvb2xl
YW4oamF2YXNjcmlwdFJlc3VsdCkpOwotCi0gICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1
bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiYSA9IG51bGwiLCAmZXJyb3Iub3V0UHRy
KCkpOwotICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOwotICAgIGdfYXNzZXJ0KCFlcnJv
ci5nZXQoKSk7Ci0gICAgZ19hc3NlcnQoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRJc051
bGwoamF2YXNjcmlwdFJlc3VsdCkpOwotCi0gICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1
bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZnVuY3Rpb24gRm9vKCkgeyBhID0gMjU7
IH0gRm9vKCk7IiwgJmVycm9yLm91dFB0cigpKTsKLSAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVz
dWx0KTsKLSAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOwotICAgIGdfYXNzZXJ0KFdlYlZpZXdU
ZXN0OjpqYXZhc2NyaXB0UmVzdWx0SXNVbmRlZmluZWQoamF2YXNjcmlwdFJlc3VsdCkpOwotCi0g
ICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRGcm9tR1Jlc291cmNlQW5k
V2FpdFVudGlsRmluaXNoZWQoIi9vcmcvd2Via2l0L3dlYmtpdDJndGsvdGVzdHMvbGluay10aXRs
ZS5qcyIsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7
Ci0gICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKLSAgICB2YWx1ZVN0cmluZy5zZXQoV2ViVmll
d1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0NTdHJpbmcoamF2YXNjcmlwdFJlc3VsdCkpOwotICAg
IGdfYXNzZXJ0X2NtcHN0cih2YWx1ZVN0cmluZy5nZXQoKSwgPT0sICJXZWJLaXRHVEsrIFRpdGxl
Iik7Ci0KLSAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEZyb21HUmVz
b3VyY2VBbmRXYWl0VW50aWxGaW5pc2hlZCgiL3dyb25nL3BhdGgvdG8vcmVzb3VyY2UuanMiLCAm
ZXJyb3Iub3V0UHRyKCkpOwotICAgIGdfYXNzZXJ0KCFqYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBn
X2Fzc2VydF9lcnJvcihlcnJvci5nZXQoKSwgR19SRVNPVVJDRV9FUlJPUiwgR19SRVNPVVJDRV9F
UlJPUl9OT1RfRk9VTkQpOwotICAgIGVycm9yLmNsZWFyKCk7Ci0KLSAgICBqYXZhc2NyaXB0UmVz
dWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJmb28oKTsiLCAm
ZXJyb3Iub3V0UHRyKCkpOwotICAgIGdfYXNzZXJ0KCFqYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBn
X2Fzc2VydF9lcnJvcihlcnJvci5nZXQoKSwgV0VCS0lUX0pBVkFTQ1JJUFRfRVJST1IsIFdFQktJ
VF9KQVZBU0NSSVBUX0VSUk9SX1NDUklQVF9GQUlMRUQpOwotfQotCi1jbGFzcyBGdWxsU2NyZWVu
Q2xpZW50VGVzdDogcHVibGljIFdlYlZpZXdUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJf
VEVTVF9GSVhUVVJFKEZ1bGxTY3JlZW5DbGllbnRUZXN0KTsKLQotICAgIGVudW0gRnVsbFNjcmVl
bkV2ZW50IHsKLSAgICAgICAgTm9uZSwKLSAgICAgICAgRW50ZXIsCi0gICAgICAgIExlYXZlCi0g
ICAgfTsKLQotICAgIHN0YXRpYyBnYm9vbGVhbiB2aWV3RW50ZXJGdWxsU2NyZWVuQ2FsbGJhY2so
V2ViS2l0V2ViVmlldyosIEZ1bGxTY3JlZW5DbGllbnRUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAg
ICAgdGVzdC0+bV9ldmVudCA9IEVudGVyOwotICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3Qt
Pm1fbWFpbkxvb3ApOwotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gICAgc3RhdGlj
IGdib29sZWFuIHZpZXdMZWF2ZUZ1bGxTY3JlZW5DYWxsYmFjayhXZWJLaXRXZWJWaWV3KiwgRnVs
bFNjcmVlbkNsaWVudFRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICB0ZXN0LT5tX2V2ZW50ID0g
TGVhdmU7Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7Ci0gICAg
ICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAgICBGdWxsU2NyZWVuQ2xpZW50VGVzdCgpCi0g
ICAgICAgIDogbV9ldmVudChOb25lKQotICAgIHsKLSAgICAgICAgd2Via2l0X3NldHRpbmdzX3Nl
dF9lbmFibGVfZnVsbHNjcmVlbih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKG1fd2ViVmll
dyksIFRSVUUpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImVudGVyLWZ1
bGxzY3JlZW4iLCBHX0NBTExCQUNLKHZpZXdFbnRlckZ1bGxTY3JlZW5DYWxsYmFjayksIHRoaXMp
OwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImxlYXZlLWZ1bGxzY3JlZW4i
LCBHX0NBTExCQUNLKHZpZXdMZWF2ZUZ1bGxTY3JlZW5DYWxsYmFjayksIHRoaXMpOwotICAgIH0K
LQotICAgIH5GdWxsU2NyZWVuQ2xpZW50VGVzdCgpCi0gICAgewotICAgICAgICBnX3NpZ25hbF9o
YW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV93ZWJWaWV3LCBHX1NJR05BTF9NQVRDSF9EQVRB
LCAwLCAwLCAwLCAwLCB0aGlzKTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlcXVlc3RGdWxsU2NyZWVu
QW5kV2FpdFVudGlsRW50ZXJlZEZ1bGxTY3JlZW4oKQotICAgIHsKLSAgICAgICAgbV9ldmVudCA9
IE5vbmU7Ci0gICAgICAgIHdlYmtpdF93ZWJfdmlld19ydW5famF2YXNjcmlwdChtX3dlYlZpZXcs
ICJkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQud2Via2l0UmVxdWVzdEZ1bGxTY3JlZW4oKTsiLCAw
LCAwLCAwKTsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotICAgIH0KLQot
ICAgIHN0YXRpYyBnYm9vbGVhbiBsZWF2ZUZ1bGxTY3JlZW5JZGxlKEZ1bGxTY3JlZW5DbGllbnRU
ZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+a2V5U3Ryb2tlKEdES19LRVlfRXNjYXBl
KTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQotICAgIHZvaWQgbGVhdmVGdWxsU2Ny
ZWVuQW5kV2FpdFVudGlsTGVmdEZ1bGxTY3JlZW4oKQotICAgIHsKLSAgICAgICAgbV9ldmVudCA9
IE5vbmU7Ci0gICAgICAgIGdfaWRsZV9hZGQocmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4o
bGVhdmVGdWxsU2NyZWVuSWRsZSksIHRoaXMpOwotICAgICAgICBnX21haW5fbG9vcF9ydW4obV9t
YWluTG9vcCk7Ci0gICAgfQotCi0gICAgRnVsbFNjcmVlbkV2ZW50IG1fZXZlbnQ7Ci19OwotCi1z
dGF0aWMgdm9pZCB0ZXN0V2ViVmlld0Z1bGxTY3JlZW4oRnVsbFNjcmVlbkNsaWVudFRlc3QqIHRl
c3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGls
TWFwcGVkKCk7Ci0gICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxib2R5PkZ1bGxTY3JlZW4gdGVz
dDwvYm9keT48L2h0bWw+IiwgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7
Ci0gICAgdGVzdC0+cmVxdWVzdEZ1bGxTY3JlZW5BbmRXYWl0VW50aWxFbnRlcmVkRnVsbFNjcmVl
bigpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2V2ZW50LCA9PSwgRnVsbFNjcmVlbkNs
aWVudFRlc3Q6OkVudGVyKTsKLSAgICB0ZXN0LT5sZWF2ZUZ1bGxTY3JlZW5BbmRXYWl0VW50aWxM
ZWZ0RnVsbFNjcmVlbigpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2V2ZW50LCA9PSwg
RnVsbFNjcmVlbkNsaWVudFRlc3Q6OkxlYXZlKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYlZp
ZXdDYW5TaG93TUlNRVR5cGUoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0g
ICAgLy8gU3VwcG9ydGVkIE1JTUUgdHlwZXMuCi0gICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3
X2Nhbl9zaG93X21pbWVfdHlwZSh0ZXN0LT5tX3dlYlZpZXcsICJ0ZXh0L2h0bWwiKSk7Ci0gICAg
Z19hc3NlcnQod2Via2l0X3dlYl92aWV3X2Nhbl9zaG93X21pbWVfdHlwZSh0ZXN0LT5tX3dlYlZp
ZXcsICJ0ZXh0L3BsYWluIikpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19jYW5fc2hv
d19taW1lX3R5cGUodGVzdC0+bV93ZWJWaWV3LCAiaW1hZ2UvanBlZyIpKTsKLQotICAgIC8vIFVu
c3VwcG9ydGVkIE1JTUUgdHlwZXMuCi0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5f
c2hvd19taW1lX3R5cGUodGVzdC0+bV93ZWJWaWV3LCAidGV4dC92Y2FyZCIpKTsKLSAgICBnX2Fz
c2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9zaG93X21pbWVfdHlwZSh0ZXN0LT5tX3dlYlZpZXcs
ICJhcHBsaWNhdGlvbi9wZGYiKSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5f
c2hvd19taW1lX3R5cGUodGVzdC0+bV93ZWJWaWV3LCAiYXBwbGljYXRpb24vemlwIikpOwotICAg
IGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX3Nob3dfbWltZV90eXBlKHRlc3QtPm1fd2Vi
VmlldywgImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpKTsKLQotICAgIC8vIFBsdWdpbnMgYXJl
IG9ubHkgc3VwcG9ydGVkIHdoZW4gZW5hYmxlZC4KLSAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0
X2FkZGl0aW9uYWxfcGx1Z2luc19kaXJlY3Rvcnkod2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0
KHRlc3QtPm1fd2ViVmlldyksIFdFQktJVF9URVNUX1BMVUdJTl9ESVIpOwotICAgIGdfYXNzZXJ0
KHdlYmtpdF93ZWJfdmlld19jYW5fc2hvd19taW1lX3R5cGUodGVzdC0+bV93ZWJWaWV3LCAiYXBw
bGljYXRpb24veC13ZWJraXQtdGVzdC1uZXRzY2FwZSIpKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nf
c2V0X2VuYWJsZV9wbHVnaW5zKHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3ModGVzdC0+bV93
ZWJWaWV3KSwgRkFMU0UpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX3Nob3df
bWltZV90eXBlKHRlc3QtPm1fd2ViVmlldywgImFwcGxpY2F0aW9uL3gtd2Via2l0LXRlc3QtbmV0
c2NhcGUiKSk7Ci19Ci0KLWNsYXNzIEZvcm1DbGllbnRUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3Qg
ewotcHVibGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoRm9ybUNsaWVudFRlc3QpOwot
Ci0gICAgc3RhdGljIHZvaWQgc3VibWl0Rm9ybUNhbGxiYWNrKFdlYktpdFdlYlZpZXcqLCBXZWJL
aXRGb3JtU3VibWlzc2lvblJlcXVlc3QqIHJlcXVlc3QsIEZvcm1DbGllbnRUZXN0KiB0ZXN0KQot
ICAgIHsKLSAgICAgICAgdGVzdC0+c3VibWl0Rm9ybShyZXF1ZXN0KTsKLSAgICB9Ci0KLSAgICBG
b3JtQ2xpZW50VGVzdCgpCi0gICAgICAgIDogbV9zdWJtaXRQb3NpdGlvblgoMCkKLSAgICAgICAg
LCBtX3N1Ym1pdFBvc2l0aW9uWSgwKQotICAgIHsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdCht
X3dlYlZpZXcsICJzdWJtaXQtZm9ybSIsIEdfQ0FMTEJBQ0soc3VibWl0Rm9ybUNhbGxiYWNrKSwg
dGhpcyk7Ci0gICAgfQotCi0gICAgfkZvcm1DbGllbnRUZXN0KCkKLSAgICB7Ci0gICAgICAgIGdf
c2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3dlYlZpZXcsIEdfU0lHTkFMX01B
VENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOwotICAgIH0KLQotICAgIHZvaWQgc3VibWl0Rm9y
bShXZWJLaXRGb3JtU3VibWlzc2lvblJlcXVlc3QqIHJlcXVlc3QpCi0gICAgewotICAgICAgICBh
c3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHJlcXVlc3QpKTsK
LSAgICAgICAgbV9yZXF1ZXN0ID0gcmVxdWVzdDsKLSAgICAgICAgd2Via2l0X2Zvcm1fc3VibWlz
c2lvbl9yZXF1ZXN0X3N1Ym1pdChyZXF1ZXN0KTsKLSAgICAgICAgcXVpdE1haW5Mb29wKCk7Ci0g
ICAgfQotCi0gICAgR0hhc2hUYWJsZSogd2FpdFVudGlsRm9ybVN1Ym1pdHRlZEFuZEdldFRleHRG
aWVsZHMoKQotICAgIHsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotICAg
ICAgICByZXR1cm4gd2Via2l0X2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0X2dldF90ZXh0X2ZpZWxk
cyhtX3JlcXVlc3QuZ2V0KCkpOwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiBkb0NsaWNr
SWRsZUNhbGxiYWNrKEZvcm1DbGllbnRUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+
Y2xpY2tNb3VzZUJ1dHRvbih0ZXN0LT5tX3N1Ym1pdFBvc2l0aW9uWCwgdGVzdC0+bV9zdWJtaXRQ
b3NpdGlvblksIDEpOwotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gICAgdm9pZCBz
dWJtaXRGb3JtQXRQb3NpdGlvbihpbnQgeCwgaW50IHkpCi0gICAgewotICAgICAgICBtX3N1Ym1p
dFBvc2l0aW9uWCA9IHg7Ci0gICAgICAgIG1fc3VibWl0UG9zaXRpb25ZID0geTsKLSAgICAgICAg
Z19pZGxlX2FkZChyZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihkb0NsaWNrSWRsZUNhbGxi
YWNrKSwgdGhpcyk7Ci0gICAgfQotCi0gICAgaW50IG1fc3VibWl0UG9zaXRpb25YOwotICAgIGlu
dCBtX3N1Ym1pdFBvc2l0aW9uWTsKLSAgICBHUmVmUHRyPFdlYktpdEZvcm1TdWJtaXNzaW9uUmVx
dWVzdD4gbV9yZXF1ZXN0OwotfTsKLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdTdWJtaXRGb3Jt
KEZvcm1DbGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPnNob3dJ
bldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOwotCi0gICAgY29uc3QgY2hhciogZm9ybUhUTUwg
PQotICAgICAgICAiPGh0bWw+PGJvZHk+IgotICAgICAgICAiIDxmb3JtIGFjdGlvbj0nIyc+Igot
ICAgICAgICAiICA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0ndGV4dDEnIHZhbHVlPSd2YWx1ZTEn
PiIKLSAgICAgICAgIiAgPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3RleHQyJyB2YWx1ZT0ndmFs
dWUyJz4iCi0gICAgICAgICIgIDxpbnB1dCB0eXBlPSdwYXNzd29yZCcgbmFtZT0ncGFzc3dvcmQn
IHZhbHVlPSdzZWNyZXQnPiIKLSAgICAgICAgIiAgPHRleHRhcmVhIGNvbHM9JzUnIHJvd3M9JzUn
IG5hbWU9J3RleHRhcmVhJz5UZXh0PC90ZXh0YXJlYT4iCi0gICAgICAgICIgIDxpbnB1dCB0eXBl
PSdoaWRkZW4nIG5hbWU9J2hpZGRlbjEnIHZhbHVlPSdoaWRkZW4xJz4iCi0gICAgICAgICIgIDxp
bnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPSdTdWJtaXQnIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0
ZTsgbGVmdDoxOyB0b3A6MScgc2l6ZT0nMTAnPiIKLSAgICAgICAgIiA8L2Zvcm0+IgotICAgICAg
ICAiPC9ib2R5PjwvaHRtbD4iOwotCi0gICAgdGVzdC0+bG9hZEh0bWwoZm9ybUhUTUwsICJmaWxl
Oi8vLyIpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgdGVzdC0+
c3VibWl0Rm9ybUF0UG9zaXRpb24oNSwgNSk7Ci0gICAgR0hhc2hUYWJsZSogdmFsdWVzID0gdGVz
dC0+d2FpdFVudGlsRm9ybVN1Ym1pdHRlZEFuZEdldFRleHRGaWVsZHMoKTsKLSAgICBnX2Fzc2Vy
dCh2YWx1ZXMpOwotICAgIGdfYXNzZXJ0X2NtcHVpbnQoZ19oYXNoX3RhYmxlX3NpemUodmFsdWVz
KSwgPT0sIDMpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihzdGF0aWNfY2FzdDxjaGFyKj4oZ19oYXNo
X3RhYmxlX2xvb2t1cCh2YWx1ZXMsICJ0ZXh0MSIpKSwgPT0sICJ2YWx1ZTEiKTsKLSAgICBnX2Fz
c2VydF9jbXBzdHIoc3RhdGljX2Nhc3Q8Y2hhcio+KGdfaGFzaF90YWJsZV9sb29rdXAodmFsdWVz
LCAidGV4dDIiKSksID09LCAidmFsdWUyIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHN0YXRpY19j
YXN0PGNoYXIqPihnX2hhc2hfdGFibGVfbG9va3VwKHZhbHVlcywgInBhc3N3b3JkIikpLCA9PSwg
InNlY3JldCIpOwotfQotCi1jbGFzcyBTYXZlV2ViVmlld1Rlc3Q6IHB1YmxpYyBXZWJWaWV3VGVz
dCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShTYXZlV2ViVmlld1Rlc3Qp
OwotCi0gICAgU2F2ZVdlYlZpZXdUZXN0KCkKLSAgICAgICAgOiBtX3RlbXBEaXJlY3RvcnkoZ19k
aXJfbWFrZV90bXAoIldlYktpdDJTYXZlVmlld1Rlc3QtWFhYWFhYIiwgMCkpCi0gICAgewotICAg
IH0KLQotICAgIH5TYXZlV2ViVmlld1Rlc3QoKQotICAgIHsKLSAgICAgICAgaWYgKEdfSVNfRklM
RShtX2ZpbGUuZ2V0KCkpKQotICAgICAgICAgICAgZ19maWxlX2RlbGV0ZShtX2ZpbGUuZ2V0KCks
IDAsIDApOwotCi0gICAgICAgIGlmIChHX0lTX0lOUFVUX1NUUkVBTShtX2lucHV0U3RyZWFtLmdl
dCgpKSkKLSAgICAgICAgICAgIGdfaW5wdXRfc3RyZWFtX2Nsb3NlKG1faW5wdXRTdHJlYW0uZ2V0
KCksIDAsIDApOwotCi0gICAgICAgIGlmIChtX3RlbXBEaXJlY3RvcnkpCi0gICAgICAgICAgICBn
X3JtZGlyKG1fdGVtcERpcmVjdG9yeS5nZXQoKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQg
d2ViVmlld1NhdmVkVG9TdHJlYW1DYWxsYmFjayhHT2JqZWN0KiBvYmplY3QsIEdBc3luY1Jlc3Vs
dCogcmVzdWx0LCBTYXZlV2ViVmlld1Rlc3QqIHRlc3QpCi0gICAgewotICAgICAgICBHT3duUHRy
PEdFcnJvcj4gZXJyb3I7Ci0gICAgICAgIHRlc3QtPm1faW5wdXRTdHJlYW0gPSBhZG9wdEdSZWYo
d2Via2l0X3dlYl92aWV3X3NhdmVfZmluaXNoKHRlc3QtPm1fd2ViVmlldywgcmVzdWx0LCAmZXJy
b3Iub3V0UHRyKCkpKTsKLSAgICAgICAgZ19hc3NlcnQoR19JU19JTlBVVF9TVFJFQU0odGVzdC0+
bV9pbnB1dFN0cmVhbS5nZXQoKSkpOwotICAgICAgICBnX2Fzc2VydCghZXJyb3IpOwotCi0gICAg
ICAgIHRlc3QtPnF1aXRNYWluTG9vcCgpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHdlYlZp
ZXdTYXZlZFRvRmlsZUNhbGxiYWNrKEdPYmplY3QqIG9iamVjdCwgR0FzeW5jUmVzdWx0KiByZXN1
bHQsIFNhdmVXZWJWaWV3VGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIEdPd25QdHI8R0Vycm9y
PiBlcnJvcjsKLSAgICAgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X3NhdmVfdG9fZmlsZV9m
aW5pc2godGVzdC0+bV93ZWJWaWV3LCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSkpOwotICAgICAg
ICBnX2Fzc2VydCghZXJyb3IpOwotCi0gICAgICAgIHRlc3QtPnF1aXRNYWluTG9vcCgpOwotICAg
IH0KLQotICAgIHZvaWQgc2F2ZUFuZFdhaXRGb3JTdHJlYW0oKQotICAgIHsKLSAgICAgICAgd2Vi
a2l0X3dlYl92aWV3X3NhdmUobV93ZWJWaWV3LCBXRUJLSVRfU0FWRV9NT0RFX01IVE1MLCAwLCBy
ZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KHdlYlZpZXdTYXZlZFRvU3RyZWFt
Q2FsbGJhY2spLCB0aGlzKTsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwot
ICAgIH0KLQotICAgIHZvaWQgc2F2ZUFuZFdhaXRGb3JGaWxlKCkKLSAgICB7Ci0gICAgICAgIG1f
c2F2ZURlc3RpbmF0aW9uRmlsZVBhdGguc2V0KGdfYnVpbGRfZmlsZW5hbWUobV90ZW1wRGlyZWN0
b3J5LmdldCgpLCAidGVzdFdlYlZpZXdTYXZlUmVzdWx0Lm1odCIsIE5VTEwpKTsKLSAgICAgICAg
bV9maWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgobV9zYXZlRGVzdGluYXRpb25G
aWxlUGF0aC5nZXQoKSkpOwotICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfc2F2ZV90b19maWxlKG1f
d2ViVmlldywgbV9maWxlLmdldCgpLCBXRUJLSVRfU0FWRV9NT0RFX01IVE1MLCAwLCByZWludGVy
cHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KHdlYlZpZXdTYXZlZFRvRmlsZUNhbGxiYWNr
KSwgdGhpcyk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAgICB9Ci0K
LSAgICBHT3duUHRyPGNoYXI+IG1fdGVtcERpcmVjdG9yeTsKLSAgICBHT3duUHRyPGNoYXI+IG1f
c2F2ZURlc3RpbmF0aW9uRmlsZVBhdGg7Ci0gICAgR1JlZlB0cjxHSW5wdXRTdHJlYW0+IG1faW5w
dXRTdHJlYW07Ci0gICAgR1JlZlB0cjxHRmlsZT4gbV9maWxlOwotfTsKLQotc3RhdGljIHZvaWQg
dGVzdFdlYlZpZXdTYXZlKFNhdmVXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsK
LSAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+IgotICAgICAgICAgICAgICAgICAgICI8Ym9keT4i
Ci0gICAgICAgICAgICAgICAgICAgIiAgPHA+QSBwYXJhZ3JhcGggd2l0aCBwbGFpbiB0ZXh0PC9w
PiIKLSAgICAgICAgICAgICAgICAgICAiICA8cD4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBB
IHJlZCBib3g6IDxpbWcgc3JjPSdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFB
TlNVaEVVZ0FBQUFJQUFBQUNDQUlBQUFEOTFKcHpBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZ
QUFBQUIzUkpUVVVIM0FZV0RUTVZ3blNabndBQUFCMXBWRmgwUTI5dGJXVnVkQUFBQUFBQVEzSmxZ
WFJsWkNCM2FYUm9JRWRKVFZCa0xtVUhBQUFBRmtsRVFWUUkxMlA4ejhEQXdNREF4TURBd01EQUFB
QU5IUUVESyttbXlBQUFBQUJKUlU1RXJrSmdnZz09Jz48L2JyPiIKLSAgICAgICAgICAgICAgICAg
ICAiICAgIEEgYmx1ZSBib3g6IDxpbWcgc3JjPSdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3
MEtHZ29BQUFBTlNVaEVVZ0FBQUFJQUFBQUNDQUlBQUFEOTFKcHpBQUFBQ1hCSVdYTUFBQXNUQUFB
TEV3RUFtcHdZQUFBQUIzUkpUVVVIM0FZV0RUTXZCSGhBTFFBQUFCMXBWRmgwUTI5dGJXVnVkQUFB
QUFBQVEzSmxZWFJsWkNCM2FYUm9JRWRKVFZCa0xtVUhBQUFBRmtsRVFWUUkxMk5rNFBuUHdNREF4
TURBd01EQUFBQUxyd0VQUElzMXBnQUFBQUJKUlU1RXJrSmdnZz09Jz4iCi0gICAgICAgICAgICAg
ICAgICAgIiAgPC9wPiIKLSAgICAgICAgICAgICAgICAgICAiPC9ib2R5PiIKLSAgICAgICAgICAg
ICAgICAgICAiPC9odG1sPiIsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgp
OwotCi0gICAgLy8gV3JpdGUgdG8gYSBmaWxlIGFuZCB0byBhbiBpbnB1dCBzdHJlYW0uCi0gICAg
dGVzdC0+c2F2ZUFuZFdhaXRGb3JGaWxlKCk7Ci0gICAgdGVzdC0+c2F2ZUFuZFdhaXRGb3JTdHJl
YW0oKTsKLQotICAgIC8vIFdlIHNob3VsZCBoYXZlIGV4YWN0bHkgdGhlIHNhbWUgYW1vdW50IG9m
IGJ5dGVzIGluIHRoZSBmaWxlCi0gICAgLy8gdGhhbiB0aG9zZSBjb21pbmcgZnJvbSB0aGUgR0lu
cHV0U3RyZWFtLiBXZSBkb24ndCBjb21wYXJlIHRoZQotICAgIC8vIHN0cmluZ3MgcmVhZCBzaW5j
ZSB0aGUgJ0RhdGUnIGZpZWxkIGFuZCB0aGUgYm91bmRhcmllcyB3aWxsIGJlCi0gICAgLy8gZGlm
ZmVyZW50IG9uIGVhY2ggY2FzZS4gTUhUTUwgZnVuY3Rpb25hbGl0eSB3aWxsIGJlIHRlc3RlZCBi
eQotICAgIC8vIExheW91dCB0ZXN0cywgc28gY2hlY2tpbmcgdGhlIGFtb3VudCBvZiBieXRlcyBp
cyBlbm91Z2guCi0gICAgR093blB0cjxHRXJyb3I+IGVycm9yOwotICAgIGdjaGFyIGJ1ZmZlcls1
MTJdID0geyAwIH07Ci0gICAgZ3NzaXplIHJlYWRCeXRlcyA9IDA7Ci0gICAgZ3NzaXplIHRvdGFs
Qnl0ZXNGcm9tU3RyZWFtID0gMDsKLSAgICB3aGlsZSAocmVhZEJ5dGVzID0gZ19pbnB1dF9zdHJl
YW1fcmVhZCh0ZXN0LT5tX2lucHV0U3RyZWFtLmdldCgpLCAmYnVmZmVyLCA1MTIsIDAsICZlcnJv
ci5vdXRQdHIoKSkpIHsKLSAgICAgICAgZ19hc3NlcnQoIWVycm9yKTsKLSAgICAgICAgdG90YWxC
eXRlc0Zyb21TdHJlYW0gKz0gcmVhZEJ5dGVzOwotICAgIH0KLQotICAgIC8vIENoZWNrIHRoYXQg
dGhlIGZpbGUgZXhpc3RzIGFuZCB0aGF0IGl0IGNvbnRhaW5zIHRoZSBzYW1lIGFtb3VudCBvZiBi
eXRlcy4KLSAgICBHUmVmUHRyPEdGaWxlSW5mbz4gZmlsZUluZm8gPSBhZG9wdEdSZWYoZ19maWxl
X3F1ZXJ5X2luZm8odGVzdC0+bV9maWxlLmdldCgpLCBHX0ZJTEVfQVRUUklCVVRFX1NUQU5EQVJE
X1NJWkUsIHN0YXRpY19jYXN0PEdGaWxlUXVlcnlJbmZvRmxhZ3M+KDApLCAwLCAwKSk7Ci0gICAg
Z19hc3NlcnRfY21waW50KGdfZmlsZV9pbmZvX2dldF9zaXplKGZpbGVJbmZvLmdldCgpKSwgPT0s
IHRvdGFsQnl0ZXNGcm9tU3RyZWFtKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdNb2Rl
KFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBpbmRleEhUTUwgPSAiPGh0bWw+PGJvZHk+PHA+VGVzdCBXZWIgVmlldyBNb2RlPC9wPjwv
Ym9keT48L2h0bWw+IjsKLQotICAgIC8vIFdlYiBtb2RlLgotICAgIGdfYXNzZXJ0X2NtcHVpbnQo
d2Via2l0X3dlYl92aWV3X2dldF92aWV3X21vZGUodGVzdC0+bV93ZWJWaWV3KSwgPT0sIFdFQktJ
VF9WSUVXX01PREVfV0VCKTsKLSAgICB0ZXN0LT5sb2FkSHRtbChpbmRleEhUTUwsIDApOwotICAg
IHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIFdlYktpdEphdmFzY3JpcHRSZXN1
bHQqIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmlu
aXNoZWQoIndpbmRvdy5kb2N1bWVudC5ib2R5LnRleHRDb250ZW50OyIsIDApOwotICAgIEdPd25Q
dHI8Y2hhcj4gdmFsdWVTdHJpbmcoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0NTdHJp
bmcoamF2YXNjcmlwdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih2YWx1ZVN0cmluZy5n
ZXQoKSwgPT0sICJUZXN0IFdlYiBWaWV3IE1vZGUiKTsKLQotICAgIC8vIFNvdXJjZSBtb2RlLgot
ICAgIHdlYmtpdF93ZWJfdmlld19zZXRfdmlld19tb2RlKHRlc3QtPm1fd2ViVmlldywgV0VCS0lU
X1ZJRVdfTU9ERV9TT1VSQ0UpOwotICAgIHRlc3QtPmxvYWRIdG1sKGluZGV4SFRNTCwgMCk7Ci0g
ICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgamF2YXNjcmlwdFJlc3VsdCA9
IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgid2luZG93LmRvY3VtZW50
LmJvZHkudGV4dENvbnRlbnQ7IiwgMCk7Ci0gICAgdmFsdWVTdHJpbmcuc2V0KFdlYlZpZXdUZXN0
OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKLSAgICBnX2Fz
c2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCBpbmRleEhUTUwpOwotfQotCi0vLyBU
byB0ZXN0IHBhZ2UgdmlzaWJpbGl0eSBBUEkuIEN1cnJlbnRseSBvbmx5ICd2aXNpYmxlJyBhbmQg
J2hpZGRlbicgc3RhdGVzIGFyZSBpbXBsZW1lbnRlZCBmdWxseSBpbiBXZWJDb3JlLgotLy8gU2Vl
IGFsc28gaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9XRC1wYWdlLXZpc2liaWxpdHktMjAxMTA2
MDIvIGFuZCBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9jaHJvbWUvd2hpdGVwYXBlcnMv
cGFnZXZpc2liaWxpdHkKLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3UGFnZVZpc2liaWxpdHkoV2Vi
Vmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+bG9hZEh0bWwoIjxo
dG1sPjx0aXRsZT48L3RpdGxlPiIKLSAgICAgICAgIjxib2R5PjxwPlRlc3QgV2ViIFBhZ2UgVmlz
aWJpbGl0eTwvcD4iCi0gICAgICAgICI8c2NyaXB0PiIKLSAgICAgICAgImRvY3VtZW50LmFkZEV2
ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsIG9uVmlzaWJpbGl0eUNoYW5nZSwgZmFs
c2UpOyIKLSAgICAgICAgImZ1bmN0aW9uIG9uVmlzaWJpbGl0eUNoYW5nZSgpIHsiCi0gICAgICAg
ICIgICAgZG9jdW1lbnQudGl0bGUgPSBkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU7IgotICAgICAg
ICAifSIKLSAgICAgICAgIjwvc2NyaXB0PiIKLSAgICAgICAgIjwvYm9keT48L2h0bWw+IiwKLSAg
ICAgICAgMCk7Ci0KLSAgICAvLyBXYWl0IHVudGlsbCB0aGUgcGFnZSBpcyBsb2FkZWQuIEluaXRp
YWwgdmlzaWJpbGl0eSBzaG91bGQgYmUgJ2hpZGRlbicuCi0gICAgdGVzdC0+d2FpdFVudGlsTG9h
ZEZpbmlzaGVkKCk7Ci0KLSAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgV2ViS2l0SmF2
YXNjcmlwdFJlc3VsdCogamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRX
YWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlOyIsICZlcnJvci5vdXRQ
dHIoKSk7Ci0gICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAgZ19hc3NlcnQoIWVy
cm9yLmdldCgpKTsKLSAgICBHT3duUHRyPGNoYXI+IHZhbHVlU3RyaW5nKFdlYlZpZXdUZXN0Ojpq
YXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKLSAgICBnX2Fzc2Vy
dF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAiaGlkZGVuIik7Ci0KLSAgICBqYXZhc2Ny
aXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJkb2N1
bWVudC5oaWRkZW47IiwgJmVycm9yLm91dFB0cigpKTsKLSAgICBnX2Fzc2VydChqYXZhc2NyaXB0
UmVzdWx0KTsKLSAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOwotICAgIGdfYXNzZXJ0KFdlYlZp
ZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9Cb29sZWFuKGphdmFzY3JpcHRSZXN1bHQpKTsKLQot
ICAgIC8vIFNob3cgdGhlIHBhZ2UuIFRoZSB2aXNpYmlsaXR5IHNob3VsZCBiZSB1cGRhdGVkIHRv
ICd2aXNpYmxlJy4KLSAgICB0ZXN0LT5zaG93SW5XaW5kb3coKTsKLSAgICB0ZXN0LT53YWl0VW50
aWxUaXRsZUNoYW5nZWQoKTsKLQotICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZh
U2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZTsiLCAm
ZXJyb3Iub3V0UHRyKCkpOwotICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOwotICAgIGdf
YXNzZXJ0KCFlcnJvci5nZXQoKSk7Ci0gICAgdmFsdWVTdHJpbmcuc2V0KFdlYlZpZXdUZXN0Ojpq
YXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKLSAgICBnX2Fzc2Vy
dF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAidmlzaWJsZSIpOwotCi0gICAgamF2YXNj
cmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9j
dW1lbnQuaGlkZGVuOyIsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgZ19hc3NlcnQoamF2YXNjcmlw
dFJlc3VsdCk7Ci0gICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKLSAgICBnX2Fzc2VydCghV2Vi
Vmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0Jvb2xlYW4oamF2YXNjcmlwdFJlc3VsdCkpOwot
Ci0gICAgLy8gSGlkZSB0aGUgcGFnZS4gVGhlIHZpc2liaWxpdHkgc2hvdWxkIGJlIHVwZGF0ZWQg
dG8gJ2hpZGRlbicuCi0gICAgZ3RrX3dpZGdldF9oaWRlKEdUS19XSURHRVQodGVzdC0+bV93ZWJW
aWV3KSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsVGl0bGVDaGFuZ2VkKCk7Ci0KLSAgICBqYXZhc2Ny
aXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJkb2N1
bWVudC52aXNpYmlsaXR5U3RhdGU7IiwgJmVycm9yLm91dFB0cigpKTsKLSAgICBnX2Fzc2VydChq
YXZhc2NyaXB0UmVzdWx0KTsKLSAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOwotICAgIHZhbHVl
U3RyaW5nLnNldChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZhc2Ny
aXB0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwg
ImhpZGRlbiIpOwotCi0gICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRB
bmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQuaGlkZGVuOyIsICZlcnJvci5vdXRQdHIoKSk7
Ci0gICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAgZ19hc3NlcnQoIWVycm9yLmdl
dCgpKTsKLSAgICBnX2Fzc2VydChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQm9vbGVh
bihqYXZhc2NyaXB0UmVzdWx0KSk7Ci19Ci0KLWNsYXNzIFNuYXBzaG90V2ViVmlld1Rlc3Q6IHB1
YmxpYyBXZWJWaWV3VGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShT
bmFwc2hvdFdlYlZpZXdUZXN0KTsKLQotICAgIHN0YXRpYyB2b2lkIG9uU25hcHNob3RDYW5jZWxs
ZWRSZWFkeShXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgR0FzeW5jUmVzdWx0KiByZXMsIFNuYXBz
aG90V2ViVmlld1Rlc3QqIHRlc3QpCi0gICAgewotICAgICAgICBHT3duUHRyPEdFcnJvcj4gZXJy
b3I7Ci0gICAgICAgIHRlc3QtPm1fc3VyZmFjZSA9IHdlYmtpdF93ZWJfdmlld19nZXRfc25hcHNo
b3RfZmluaXNoKHdlYl92aWV3LCByZXMsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgICAgIGdfYXNz
ZXJ0KCF0ZXN0LT5tX3N1cmZhY2UpOwotICAgICAgICBnX2Fzc2VydF9lcnJvcihlcnJvci5nZXQo
KSwgR19JT19FUlJPUiwgR19JT19FUlJPUl9DQU5DRUxMRUQpOwotICAgICAgICB0ZXN0LT5xdWl0
TWFpbkxvb3AoKTsKLSAgICB9Ci0KLSAgICBnYm9vbGVhbiBnZXRTbmFwc2hvdEFuZENhbmNlbCgp
Ci0gICAgewotICAgICAgICBpZiAobV9zdXJmYWNlKQotICAgICAgICAgICAgY2Fpcm9fc3VyZmFj
ZV9kZXN0cm95KG1fc3VyZmFjZSk7Ci0gICAgICAgIG1fc3VyZmFjZSA9IDA7Ci0gICAgICAgIEdS
ZWZQdHI8R0NhbmNlbGxhYmxlPiBjYW5jZWxsYWJsZSA9IGFkb3B0R1JlZihnX2NhbmNlbGxhYmxl
X25ldygpKTsKLSAgICAgICAgd2Via2l0X3dlYl92aWV3X2dldF9zbmFwc2hvdChtX3dlYlZpZXcs
IFdFQktJVF9TTkFQU0hPVF9SRUdJT05fVklTSUJMRSwgV0VCS0lUX1NOQVBTSE9UX09QVElPTlNf
Tk9ORSwgY2FuY2VsbGFibGUuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxs
YmFjaz4ob25TbmFwc2hvdENhbmNlbGxlZFJlYWR5KSwgdGhpcyk7Ci0gICAgICAgIGdfY2FuY2Vs
bGFibGVfY2FuY2VsKGNhbmNlbGxhYmxlLmdldCgpKTsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVu
KG1fbWFpbkxvb3ApOwotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotfTsKLQotc3Rh
dGljIHZvaWQgdGVzdFdlYlZpZXdTbmFwc2hvdChTbmFwc2hvdFdlYlZpZXdUZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keT48cD5XaGF0
ZXZlcjwvcD48L2JvZHk+PC9odG1sPiIsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5p
c2hlZCgpOwotCi0gICAgLy8gV2ViVmlldyBub3QgdmlzaWJsZS4KLSAgICBjYWlyb19zdXJmYWNl
X3QqIHN1cmZhY2UxID0gdGVzdC0+Z2V0U25hcHNob3RBbmRXYWl0VW50aWxSZWFkeShXRUJLSVRf
U05BUFNIT1RfUkVHSU9OX1ZJU0lCTEUsIFdFQktJVF9TTkFQU0hPVF9PUFRJT05TX05PTkUpOwot
ICAgIGdfYXNzZXJ0KCFzdXJmYWNlMSk7Ci0KLSAgICAvLyBTaG93IHN1cmZhY2UsIHJlc2l6ZSB0
byA1MHg1MCwgdHJ5IGFnYWluLgotICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1h
cHBlZCgpOwotICAgIHRlc3QtPnJlc2l6ZVZpZXcoNTAsIDUwKTsKLSAgICBzdXJmYWNlMSA9IHRl
c3QtPmdldFNuYXBzaG90QW5kV2FpdFVudGlsUmVhZHkoV0VCS0lUX1NOQVBTSE9UX1JFR0lPTl9W
SVNJQkxFLCBXRUJLSVRfU05BUFNIT1RfT1BUSU9OU19OT05FKTsKLSAgICBnX2Fzc2VydChzdXJm
YWNlMSk7Ci0KLSAgICAvLyBvYnRhaW5lZCBzdXJmYWNlIHNob3VsZCBiZSBhdCB0aGUgbW9zdCA1
MHg1MC4gU3RvcmUgdGhlIHNpemUKLSAgICAvLyBmb3IgY29tcGFyaXNvbiBsYXRlci4KLSAgICBp
bnQgd2lkdGggPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChzdXJmYWNlMSk7Ci0gICAg
aW50IGhlaWdodCA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNlMSk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KHdpZHRoLCA8PSwgNTApOwotICAgIGdfYXNzZXJ0X2NtcGludCho
ZWlnaHQsIDw9LCA1MCk7Ci0KLSAgICAvLyBTZWxlY3QgYWxsIHRleHQgaW4gdGhlIFdlYlZpZXcs
IHJlcXVlc3QgYSBzbmFwc2hvdCBpZ25vcmluZyBzZWxlY3Rpb24uCi0gICAgdGVzdC0+c2VsZWN0
QWxsKCk7Ci0gICAgc3VyZmFjZTEgPSBjYWlyb19zdXJmYWNlX3JlZmVyZW5jZSh0ZXN0LT5nZXRT
bmFwc2hvdEFuZFdhaXRVbnRpbFJlYWR5KFdFQktJVF9TTkFQU0hPVF9SRUdJT05fVklTSUJMRSwg
V0VCS0lUX1NOQVBTSE9UX09QVElPTlNfTk9ORSkpOwotICAgIGdfYXNzZXJ0KHN1cmZhY2UxKTsK
LSAgICBnX2Fzc2VydF9jbXBpbnQoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFj
ZTEpLCA9PSwgd2lkdGgpOwotICAgIGdfYXNzZXJ0X2NtcGludChjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF9oZWlnaHQoc3VyZmFjZTEpLCA9PSwgaGVpZ2h0KTsKLQotICAgIC8vIENyZWF0ZSBpZGVu
dGljYWwgc3VyZmFjZS4KLSAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UyID0gdGVzdC0+Z2V0
U25hcHNob3RBbmRXYWl0VW50aWxSZWFkeShXRUJLSVRfU05BUFNIT1RfUkVHSU9OX1ZJU0lCTEUs
IFdFQktJVF9TTkFQU0hPVF9PUFRJT05TX05PTkUpOwotICAgIGdfYXNzZXJ0KHN1cmZhY2UyKTsK
LQotICAgIC8vIENvbXBhcmUgdGhlc2UgdHdvLCB0aGV5IHNob3VsZCBiZSBpZGVudGljYWwuCi0g
ICAgZ19hc3NlcnQoVGVzdDo6Y2Fpcm9TdXJmYWNlc0VxdWFsKHN1cmZhY2UxLCBzdXJmYWNlMikp
OwotCi0gICAgLy8gUmVxdWVzdCBhIG5ldyBzbmFwc2hvdCwgaW5jbHVkaW5nIHRoZSBzZWxlY3Rp
b24gdGhpcyB0aW1lLiBUaGUKLSAgICAvLyBzaXplIHNob3VsZCBiZSB0aGUgc2FtZSBidXQgdGhl
IHJlc3VsdCBtdXN0IGJlIGRpZmZlcmVudCB0byB0aGUKLSAgICAvLyBvbmUgcHJldmlvdXNseSBv
YnRhaW5lZC4KLSAgICBzdXJmYWNlMiA9IHRlc3QtPmdldFNuYXBzaG90QW5kV2FpdFVudGlsUmVh
ZHkoV0VCS0lUX1NOQVBTSE9UX1JFR0lPTl9WSVNJQkxFLCBXRUJLSVRfU05BUFNIT1RfT1BUSU9O
U19JTkNMVURFX1NFTEVDVElPTl9ISUdITElHSFRJTkcpOwotICAgIGdfYXNzZXJ0KHN1cmZhY2Uy
KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3Vy
ZmFjZTIpLCA9PSwgd2lkdGgpOwotICAgIGdfYXNzZXJ0X2NtcGludChjYWlyb19pbWFnZV9zdXJm
YWNlX2dldF9oZWlnaHQoc3VyZmFjZTIpLCA9PSwgaGVpZ2h0KTsKLSAgICBnX2Fzc2VydCghVGVz
dDo6Y2Fpcm9TdXJmYWNlc0VxdWFsKHN1cmZhY2UxLCBzdXJmYWNlMikpOwotCi0gICAgLy8gUmVx
dWVzdCBhIHNuYXBzaG90IG9mIHRoZSB3aG9sZSBkb2N1bWVudCBpbiB0aGUgV2ViVmlldy4gVGhl
Ci0gICAgLy8gcmVzdWx0IHNob3VsZCBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgc2l6ZSBvYnRhaW5l
ZCBwcmV2aW91c2x5LgotICAgIHN1cmZhY2UyID0gdGVzdC0+Z2V0U25hcHNob3RBbmRXYWl0VW50
aWxSZWFkeShXRUJLSVRfU05BUFNIT1RfUkVHSU9OX0ZVTExfRE9DVU1FTlQsIFdFQktJVF9TTkFQ
U0hPVF9PUFRJT05TX05PTkUpOwotICAgIGdfYXNzZXJ0KHN1cmZhY2UyKTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZTIpLCAgPiwgd2lk
dGgpOwotICAgIGdfYXNzZXJ0X2NtcGludChjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQo
c3VyZmFjZTIpLCA+LCBoZWlnaHQpOwotICAgIGdfYXNzZXJ0KCFUZXN0OjpjYWlyb1N1cmZhY2Vz
RXF1YWwoc3VyZmFjZTEsIHN1cmZhY2UyKSk7Ci0KLSAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3ko
c3VyZmFjZTEpOwotCi0gICAgZ19hc3NlcnQodGVzdC0+Z2V0U25hcHNob3RBbmRDYW5jZWwoKSk7
Ci19Ci0KLXZvaWQgYmVmb3JlQWxsKCkKLXsKLSAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRX
ZWJWaWV3IiwgImRlZmF1bHQtY29udGV4dCIsIHRlc3RXZWJWaWV3RGVmYXVsdENvbnRleHQpOwot
ICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiY3VzdG9tLWNoYXJzZXQiLCB0
ZXN0V2ViVmlld0N1c3RvbUNoYXJzZXQpOwotICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdl
YlZpZXciLCAic2V0dGluZ3MiLCB0ZXN0V2ViVmlld1NldHRpbmdzKTsKLSAgICBXZWJWaWV3VGVz
dDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInpvb20tbGV2ZWwiLCB0ZXN0V2ViVmlld1pvb21MZXZl
bCk7Ci0gICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJydW4tamF2YXNjcmlw
dCIsIHRlc3RXZWJWaWV3UnVuSmF2YVNjcmlwdCk7Ci0gICAgRnVsbFNjcmVlbkNsaWVudFRlc3Q6
OmFkZCgiV2ViS2l0V2ViVmlldyIsICJmdWxsc2NyZWVuIiwgdGVzdFdlYlZpZXdGdWxsU2NyZWVu
KTsKLSAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImNhbi1zaG93LW1pbWUt
dHlwZSIsIHRlc3RXZWJWaWV3Q2FuU2hvd01JTUVUeXBlKTsKLSAgICBGb3JtQ2xpZW50VGVzdDo6
YWRkKCJXZWJLaXRXZWJWaWV3IiwgInN1Ym1pdC1mb3JtIiwgdGVzdFdlYlZpZXdTdWJtaXRGb3Jt
KTsKLSAgICBTYXZlV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJzYXZlIiwgdGVz
dFdlYlZpZXdTYXZlKTsKLSAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInZp
ZXctbW9kZSIsIHRlc3RXZWJWaWV3TW9kZSk7Ci0gICAgU25hcHNob3RXZWJWaWV3VGVzdDo6YWRk
KCJXZWJLaXRXZWJWaWV3IiwgInNuYXBzaG90IiwgdGVzdFdlYlZpZXdTbmFwc2hvdCk7Ci0gICAg
V2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJwYWdlLXZpc2liaWxpdHkiLCB0ZXN0
V2ViVmlld1BhZ2VWaXNpYmlsaXR5KTsKLX0KLQotdm9pZCBhZnRlckFsbCgpCi17Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0
V2ViVmlld0dyb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L1Rlc3RXZWJLaXRXZWJWaWV3R3JvdXAuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMjZjNWM1Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3R3JvdXAuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjA2
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgSWdhbGlhIFMuTC4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLQotI2luY2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKLSNpbmNsdWRlICJX
ZWJWaWV3VGVzdC5oIgotI2luY2x1ZGUgPGNzdGRhcmc+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgot
I2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQ
dHIuaD4KLQotc3RhdGljIFdlYktpdFRlc3RTZXJ2ZXIqIGtTZXJ2ZXI7Ci0KLS8vIFRoZXNlIGFy
ZSBhbGwgaGVyZSBzbyB0aGF0IHRoZXkgY2FuIGJlIGNoYW5nZWQgZWFzaWx5LCBpZiBuZWNlc3Nh
cnkuCi1zdGF0aWMgY29uc3QgY2hhcioga1N0eWxlU2hlZXRIVE1MID0gIjxodG1sPjxkaXYgaWQ9
XCJzdHlsZWRFbGVtZW50XCI+U3dlZXQgc3R5bGV6ITwvZGl2PjwvaHRtbD4iOwotc3RhdGljIGNv
bnN0IGNoYXIqIGtJbmplY3RlZFN0eWxlU2hlZXQgPSAiI3N0eWxlZEVsZW1lbnQgeyBmb250LXdl
aWdodDogYm9sZDsgfSI7Ci1zdGF0aWMgY29uc3QgY2hhcioga1N0eWxlU2hlZXRUZXN0U2NyaXB0
ID0gImdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0eWxlZEVsZW1l
bnQnKSlbJ2ZvbnQtd2VpZ2h0J10iOwotc3RhdGljIGNvbnN0IGNoYXIqIGtTdHlsZVNoZWV0VGVz
dFNjcmlwdFJlc3VsdCA9ICJib2xkIjsKLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdHcm91cERl
ZmF1bHQoVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICAvLyBEZWZhdWx0IGdyb3Vw
IGlzIHNoYXJlZCBieSBhbGwgV2ViVmlld3MgYnkgZGVmYXVsdC4KLSAgICBHUmVmUHRyPFdlYktp
dFdlYlZpZXc+IHdlYlZpZXcxID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXco
KSk7Ci0gICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3PiB3ZWJWaWV3MiA9IFdFQktJVF9XRUJfVklF
Vyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19n
ZXRfZ3JvdXAod2ViVmlldzEuZ2V0KCkpID09IHdlYmtpdF93ZWJfdmlld19nZXRfZ3JvdXAod2Vi
VmlldzIuZ2V0KCkpKTsKLQotICAgIC8vIFNldHRpbmdzIGFyZSBzaGFyZWQgYnkgYWxsIHdlYiB2
aWV3IGluIHRoZSBzYW1lIGdyb3VwLgotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19nZXRf
c2V0dGluZ3Mod2ViVmlldzEuZ2V0KCkpID09IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mo
d2ViVmlldzIuZ2V0KCkpKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRp
bmdzKHdlYlZpZXcxLmdldCgpKSA9PSB3ZWJraXRfd2ViX3ZpZXdfZ3JvdXBfZ2V0X3NldHRpbmdz
KHdlYmtpdF93ZWJfdmlld19nZXRfZ3JvdXAod2ViVmlldzIuZ2V0KCkpKSk7Ci19Ci0KLXN0YXRp
YyB2b2lkIHRlc3RXZWJWaWV3R3JvdXBOZXdHcm91cChUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVy
KQotewotICAgIC8vIFBhc3NpbmcgMCBhcyBncm91cCBuYW1lIGdlbmVyYXRlcyB0aGUgbmFtZSBh
dXRvbWF0aWNhbGx5LgotICAgIEdSZWZQdHI8V2ViS2l0V2ViVmlld0dyb3VwPiB2aWV3R3JvdXAx
ID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJfdmlld19ncm91cF9uZXcoMCkpOwotICAgIHRlc3QtPmFz
c2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1Qodmlld0dyb3VwMS5n
ZXQoKSkpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19ncm91cF9nZXRfbmFtZSh2aWV3
R3JvdXAxLmdldCgpKSk7Ci0KLSAgICAvLyBOZXcgZ3JvdXAgd2l0aCBhIGdpdmVuIG5hbWUuCi0g
ICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3R3JvdXA+IHZpZXdHcm91cDIgPSBhZG9wdEdSZWYod2Vi
a2l0X3dlYl92aWV3X2dyb3VwX25ldygiVGVzdEdyb3VwMiIpKTsKLSAgICB0ZXN0LT5hc3NlcnRP
YmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHZpZXdHcm91cDIuZ2V0KCkp
KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dyb3VwX2dldF9uYW1lKHZp
ZXdHcm91cDIuZ2V0KCkpLCA9PSwgIlRlc3RHcm91cDIiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIo
d2Via2l0X3dlYl92aWV3X2dyb3VwX2dldF9uYW1lKHZpZXdHcm91cDIuZ2V0KCkpLCAhPSwgd2Vi
a2l0X3dlYl92aWV3X2dyb3VwX2dldF9uYW1lKHZpZXdHcm91cDEuZ2V0KCkpKTsKLQotICAgIC8v
IEV2ZXJ5IGdyb3VwIGhhcyBpdHMgb3duIHNldHRpbmdzLgotICAgIGdfYXNzZXJ0KHdlYmtpdF93
ZWJfdmlld19ncm91cF9nZXRfc2V0dGluZ3Modmlld0dyb3VwMS5nZXQoKSkgIT0gd2Via2l0X3dl
Yl92aWV3X2dyb3VwX2dldF9zZXR0aW5ncyh2aWV3R3JvdXAyLmdldCgpKSk7Ci19Ci0KLXN0YXRp
YyB2b2lkIHRlc3RXZWJWaWV3TmV3V2l0aEdyb3VwKFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIp
Ci17Ci0gICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3R3JvdXA+IHZpZXdHcm91cDEgPSBhZG9wdEdS
ZWYod2Via2l0X3dlYl92aWV3X2dyb3VwX25ldygiVGVzdEdyb3VwMSIpKTsKLSAgICB0ZXN0LT5h
c3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHZpZXdHcm91cDEu
Z2V0KCkpKTsKLSAgICBHUmVmUHRyPFdlYktpdFdlYlZpZXc+IHdlYlZpZXcxID0gV0VCS0lUX1dF
Ql9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXdfd2l0aF9ncm91cCh2aWV3R3JvdXAxLmdldCgpKSk7
Ci0gICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dldF9ncm91cCh3ZWJWaWV3MS5nZXQoKSkg
PT0gdmlld0dyb3VwMS5nZXQoKSk7Ci0KLSAgICBHUmVmUHRyPFdlYktpdFdlYlZpZXc+IHdlYlZp
ZXcyID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19hc3Nl
cnQod2Via2l0X3dlYl92aWV3X2dldF9ncm91cCh3ZWJWaWV3Mi5nZXQoKSkgIT0gdmlld0dyb3Vw
MS5nZXQoKSk7Ci0KLSAgICAvLyBTZXR0aW5ncyBzaG91bGQgYmUgZGlmZmVyZW50IGZvciB2aWV3
cyBpbiBkaWZmZXJlbnQgZ3JvdXBzLgotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19nZXRf
c2V0dGluZ3Mod2ViVmlldzEuZ2V0KCkpICE9IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mo
d2ViVmlldzIuZ2V0KCkpKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdHcm91cFNldHRp
bmdzKFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgR1JlZlB0cjxXZWJLaXRXZWJW
aWV3R3JvdXA+IHZpZXdHcm91cDEgPSBhZG9wdEdSZWYod2Via2l0X3dlYl92aWV3X2dyb3VwX25l
dygiVGVzdEdyb3VwMSIpKTsKLSAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVz
dEZpbmlzaGVzKEdfT0JKRUNUKHZpZXdHcm91cDEuZ2V0KCkpKTsKLSAgICBHUmVmUHRyPFdlYktp
dFNldHRpbmdzPiBuZXdTZXR0aW5ncyA9IGFkb3B0R1JlZih3ZWJraXRfc2V0dGluZ3NfbmV3X3dp
dGhfc2V0dGluZ3MoImVuYWJsZS1qYXZhc2NyaXB0IiwgRkFMU0UsIE5VTEwpKTsKLSAgICB0ZXN0
LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKG5ld1NldHRp
bmdzLmdldCgpKSk7Ci0gICAgd2Via2l0X3dlYl92aWV3X2dyb3VwX3NldF9zZXR0aW5ncyh2aWV3
R3JvdXAxLmdldCgpLCBuZXdTZXR0aW5ncy5nZXQoKSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3dl
Yl92aWV3X2dyb3VwX2dldF9zZXR0aW5ncyh2aWV3R3JvdXAxLmdldCgpKSA9PSBuZXdTZXR0aW5n
cy5nZXQoKSk7Ci0KLSAgICBHUmVmUHRyPFdlYktpdFdlYlZpZXc+IHdlYlZpZXcxID0gV0VCS0lU
X1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXdfd2l0aF9ncm91cCh2aWV3R3JvdXAxLmdldCgp
KSk7Ci0gICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3PiB3ZWJWaWV3MiA9IFdFQktJVF9XRUJfVklF
Vyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIFdlYktpdFNldHRpbmdzKiB3ZWJWaWV3MVNl
dHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3MS5nZXQoKSk7Ci0g
ICAgV2ViS2l0U2V0dGluZ3MqIHdlYlZpZXcyU2V0dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X3NldHRpbmdzKHdlYlZpZXcyLmdldCgpKTsKLSAgICBnX2Fzc2VydCh3ZWJWaWV3MVNldHRpbmdz
ICE9IHdlYlZpZXcyU2V0dGluZ3MpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRf
ZW5hYmxlX2phdmFzY3JpcHQod2ViVmlldzFTZXR0aW5ncykgIT0gd2Via2l0X3NldHRpbmdzX2dl
dF9lbmFibGVfamF2YXNjcmlwdCh3ZWJWaWV3MlNldHRpbmdzKSk7Ci0KLSAgICB3ZWJraXRfd2Vi
X3ZpZXdfc2V0X3NldHRpbmdzKHdlYlZpZXcxLmdldCgpLCB3ZWJWaWV3MlNldHRpbmdzKTsKLSAg
ICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdlYlZpZXcxLmdldCgpKSA9
PSB3ZWJWaWV3MlNldHRpbmdzKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ3JvdXBf
Z2V0X3NldHRpbmdzKHdlYmtpdF93ZWJfdmlld19nZXRfZ3JvdXAod2ViVmlldzEuZ2V0KCkpKSA9
PSB3ZWJWaWV3MlNldHRpbmdzKTsKLX0KLQotc3RhdGljIGJvb2wgaXNTdHlsZVNoZWV0SW5qZWN0
ZWRGb3JVUkxBdFBhdGgoV2ViVmlld1Rlc3QqIHRlc3QsIGNvbnN0IGNoYXIqIHBhdGgpCi17Ci0g
ICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKHBhdGgpLmRhdGEoKSk7Ci0g
ICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBHT3duUHRyPEdFcnJvcj4g
ZXJyb3I7Ci0gICAgV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCogamF2YXNjcmlwdFJlc3VsdCA9IHRl
c3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZChrU3R5bGVTaGVldFRlc3RTY3Jp
cHQsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7Ci0g
ICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKLQotICAgIEdPd25QdHI8Y2hhcj4gcmVzdWx0U3Ry
aW5nKFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1
bHQpKTsKLSAgICByZXR1cm4gIWdfc3RyY21wMChyZXN1bHRTdHJpbmcuZ2V0KCksIGtTdHlsZVNo
ZWV0VGVzdFNjcmlwdFJlc3VsdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGZpbGxVUkxMaXN0RnJvbVBh
dGhzKGNoYXIqKiBsaXN0LCBjb25zdCBjaGFyKiBwYXRoLCAuLi4pCi17Ci0gICAgdmFfbGlzdCBh
cmd1bWVudExpc3Q7Ci0gICAgdmFfc3RhcnQoYXJndW1lbnRMaXN0LCBwYXRoKTsKLQotICAgIGlu
dCBpID0gMDsKLSAgICB3aGlsZSAocGF0aCkgewotICAgICAgICAvLyBGSVhNRTogV2UgbXVzdCB1
c2UgYSB3aWxkY2FyZCBmb3IgdGhlIGhvc3QgaGVyZSB1bnRpbCBodHRwOi8vd2tidWcuY29tLzEx
MjQ3NiBpcyBmaXhlZC4KLSAgICAgICAgLy8gVW50aWwgdGhhdCB0aW1lIHBhdHRlcm5zIHdpdGgg
cG9ydCBudW1iZXJzIGluIHRoZW0gd2lsbCBub3QgcHJvcGVybHkgbWF0Y2ggVVJMcyB3aXRoIHBv
cnQgbnVtYmVycy4KLSAgICAgICAgbGlzdFtpKytdID0gZ19zdHJkdXBfcHJpbnRmKCJodHRwOi8v
Ki8lcyoiLCBwYXRoKTsKLSAgICAgICAgcGF0aCA9IHZhX2FyZyhhcmd1bWVudExpc3QsIGNvbnN0
IGNoYXIqKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHJlbW92ZU9sZEluamVjdGVkU3R5bGVT
aGVldHNBbmRSZXNldExpc3RzKFdlYktpdFdlYlZpZXdHcm91cCogZ3JvdXAsIGNoYXIqKiB3aGl0
ZWxpc3QsIGNoYXIqKiBibGFja2xpc3QpCi17Ci0gICAgd2Via2l0X3dlYl92aWV3X2dyb3VwX3Jl
bW92ZV9hbGxfdXNlcl9zdHlsZV9zaGVldHMoZ3JvdXApOwotCi0gICAgd2hpbGUgKCp3aGl0ZWxp
c3QpIHsKLSAgICAgICAgZ19mcmVlKCp3aGl0ZWxpc3QpOwotICAgICAgICAqd2hpdGVsaXN0ID0g
MDsKLSAgICAgICAgd2hpdGVsaXN0Kys7Ci0gICAgfQotCi0gICAgd2hpbGUgKCpibGFja2xpc3Qp
IHsKLSAgICAgICAgZ19mcmVlKCpibGFja2xpc3QpOwotICAgICAgICAqYmxhY2tsaXN0ID0gMDsK
LSAgICAgICAgYmxhY2tsaXN0Kys7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmll
d0dyb3VwSW5qZWN0ZWRTdHlsZVNoZWV0KFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVy
KQotewotICAgIFdlYktpdFdlYlZpZXdHcm91cCogZ3JvdXAgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X2dyb3VwKHRlc3QtPm1fd2ViVmlldyk7Ci0gICAgY2hhciogd2hpdGVsaXN0WzNdID0geyAwLCAw
LCAwIH07Ci0gICAgY2hhciogYmxhY2tsaXN0WzNdID0geyAwLCAwLCAwIH07Ci0KLSAgICByZW1v
dmVPbGRJbmplY3RlZFN0eWxlU2hlZXRzQW5kUmVzZXRMaXN0cyhncm91cCwgd2hpdGVsaXN0LCBi
bGFja2xpc3QpOwotCi0gICAgLy8gV2l0aG91dCBhIHdoaXRlbGlzdCBvciBhIGJsYWNrbGlzdCBh
bGwgVVJMcyBzaG91bGQgaGF2ZSB0aGUgaW5qZWN0ZWQgc3R5bGUgc2hlZXQuCi0gICAgc3RhdGlj
IGNvbnN0IGNoYXIqIHJhbmRvbVBhdGggPSAic29tZXJhbmRvbXBhdGgiOwotICAgIGdfYXNzZXJ0
KCFpc1N0eWxlU2hlZXRJbmplY3RlZEZvclVSTEF0UGF0aCh0ZXN0LCByYW5kb21QYXRoKSk7Ci0g
ICAgd2Via2l0X3dlYl92aWV3X2dyb3VwX2FkZF91c2VyX3N0eWxlX3NoZWV0KGdyb3VwLCBrSW5q
ZWN0ZWRTdHlsZVNoZWV0LCAwLCAwLCAwLCBXRUJLSVRfSU5KRUNURURfQ09OVEVOVF9GUkFNRVNf
QUxMKTsKLSAgICBnX2Fzc2VydChpc1N0eWxlU2hlZXRJbmplY3RlZEZvclVSTEF0UGF0aCh0ZXN0
LCByYW5kb21QYXRoKSk7Ci0KLSAgICByZW1vdmVPbGRJbmplY3RlZFN0eWxlU2hlZXRzQW5kUmVz
ZXRMaXN0cyhncm91cCwgd2hpdGVsaXN0LCBibGFja2xpc3QpOwotCi0gICAgZmlsbFVSTExpc3RG
cm9tUGF0aHMoYmxhY2tsaXN0LCByYW5kb21QYXRoLCAwKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdf
Z3JvdXBfYWRkX3VzZXJfc3R5bGVfc2hlZXQoZ3JvdXAsIGtJbmplY3RlZFN0eWxlU2hlZXQsIDAs
IDAsIGJsYWNrbGlzdCwgV0VCS0lUX0lOSkVDVEVEX0NPTlRFTlRfRlJBTUVTX0FMTCk7Ci0gICAg
Z19hc3NlcnQoIWlzU3R5bGVTaGVldEluamVjdGVkRm9yVVJMQXRQYXRoKHRlc3QsIHJhbmRvbVBh
dGgpKTsKLSAgICBnX2Fzc2VydChpc1N0eWxlU2hlZXRJbmplY3RlZEZvclVSTEF0UGF0aCh0ZXN0
LCAic29tZW90aGVycmFuZG9tcGF0aCIpKTsKLQotICAgIHJlbW92ZU9sZEluamVjdGVkU3R5bGVT
aGVldHNBbmRSZXNldExpc3RzKGdyb3VwLCB3aGl0ZWxpc3QsIGJsYWNrbGlzdCk7Ci0KLSAgICBz
dGF0aWMgY29uc3QgY2hhciogaW5UaGVXaGl0ZUxpc3QgPSAiaW50aGV3aGl0ZWxpc3QiOwotICAg
IHN0YXRpYyBjb25zdCBjaGFyKiBub3RJbldoaXRlbGlzdCA9ICJub3RpbnRoZXdoaXRlbGlzdCI7
Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGluVGhlV2hpdGVMaXN0QW5kQmxhY2tMaXN0ID0gImlu
dGhld2hpdGVsaXN0YW5kYmxhY2tsaXN0IjsKLQotICAgIGZpbGxVUkxMaXN0RnJvbVBhdGhzKHdo
aXRlbGlzdCwgaW5UaGVXaGl0ZUxpc3QsIGluVGhlV2hpdGVMaXN0QW5kQmxhY2tMaXN0LCAwKTsK
LSAgICBmaWxsVVJMTGlzdEZyb21QYXRocyhibGFja2xpc3QsIGluVGhlV2hpdGVMaXN0QW5kQmxh
Y2tMaXN0LCAwKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfZ3JvdXBfYWRkX3VzZXJfc3R5bGVfc2hl
ZXQoZ3JvdXAsIGtJbmplY3RlZFN0eWxlU2hlZXQsIDAsIHdoaXRlbGlzdCwgYmxhY2tsaXN0LCBX
RUJLSVRfSU5KRUNURURfQ09OVEVOVF9GUkFNRVNfQUxMKTsKLSAgICBnX2Fzc2VydChpc1N0eWxl
U2hlZXRJbmplY3RlZEZvclVSTEF0UGF0aCh0ZXN0LCBpblRoZVdoaXRlTGlzdCkpOwotICAgIGdf
YXNzZXJ0KCFpc1N0eWxlU2hlZXRJbmplY3RlZEZvclVSTEF0UGF0aCh0ZXN0LCBpblRoZVdoaXRl
TGlzdEFuZEJsYWNrTGlzdCkpOwotICAgIGdfYXNzZXJ0KCFpc1N0eWxlU2hlZXRJbmplY3RlZEZv
clVSTEF0UGF0aCh0ZXN0LCBub3RJbldoaXRlbGlzdCkpOwotCi0gICAgLy8gSXQncyBpbXBvcnRh
bnQgdG8gY2xlYW4gdXAgdGhlIGVudmlyb25tZW50IGJlZm9yZSBvdGhlciB0ZXN0cy4KLSAgICBy
ZW1vdmVPbGRJbmplY3RlZFN0eWxlU2hlZXRzQW5kUmVzZXRMaXN0cyhncm91cCwgd2hpdGVsaXN0
LCBibGFja2xpc3QpOwotfQotCi1zdGF0aWMgdm9pZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVy
KiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRh
YmxlKiwgU291cENsaWVudENvbnRleHQqLCBncG9pbnRlcikKLXsKLSAgICBzb3VwX21lc3NhZ2Vf
c2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7Ci0gICAgc291cF9tZXNzYWdlX2Jv
ZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywga1N0
eWxlU2hlZXRIVE1MLCBzdHJsZW4oa1N0eWxlU2hlZXRIVE1MKSk7Ci0gICAgc291cF9tZXNzYWdl
X2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7Ci19Ci0KLXZvaWQgYmVmb3Jl
QWxsKCkKLXsKLSAgICBrU2VydmVyID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIoKTsKLSAgICBrU2Vy
dmVyLT5ydW4oc2VydmVyQ2FsbGJhY2spOwotCi0gICAgVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3
R3JvdXAiLCAiZGVmYXVsdC1ncm91cCIsIHRlc3RXZWJWaWV3R3JvdXBEZWZhdWx0KTsKLSAgICBU
ZXN0OjphZGQoIldlYktpdFdlYlZpZXdHcm91cCIsICJuZXctZ3JvdXAiLCB0ZXN0V2ViVmlld0dy
b3VwTmV3R3JvdXApOwotICAgIFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJuZXctd2l0aC1n
cm91cCIsIHRlc3RXZWJWaWV3TmV3V2l0aEdyb3VwKTsKLSAgICBUZXN0OjphZGQoIldlYktpdFdl
YlZpZXdHcm91cCIsICJzZXR0aW5ncyIsIHRlc3RXZWJWaWV3R3JvdXBTZXR0aW5ncyk7Ci0gICAg
V2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlld0dyb3VwIiwgImluamVjdGVkLXN0eWxlLXNo
ZWV0IiwgdGVzdFdlYlZpZXdHcm91cEluamVjdGVkU3R5bGVTaGVldCk7Ci19Ci0KLXZvaWQgYWZ0
ZXJBbGwoKQotewotICAgIGRlbGV0ZSBrU2VydmVyOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYlZpZXdFZGl0b3IuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYlZpZXdFZGl0b3IuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzMxNWRiLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJWaWV3RWRpdG9yLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDIwMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEyIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIs
MSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViVmlld1Rl
c3QuaCIKLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Ci0KLWNsYXNzIEVkaXRvclRl
c3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklY
VFVSRShFZGl0b3JUZXN0KTsKLQotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQga0NsaXBi
b2FyZFdhaXRUaW1lb3V0ID0gNTA7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBrQ2xp
cGJvYXJkV2FpdE1heFRyaWVzID0gMjsKLQotICAgIEVkaXRvclRlc3QoKQotICAgICAgICA6IG1f
Y2xpcGJvYXJkKGd0a19jbGlwYm9hcmRfZ2V0KEdES19TRUxFQ1RJT05fQ0xJUEJPQVJEKSkKLSAg
ICAgICAgLCBtX2NhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChmYWxzZSkKLSAgICAgICAgLCBtX3Ry
aWVzQ291bnQoMCkKLSAgICB7Ci0gICAgICAgIGd0a19jbGlwYm9hcmRfY2xlYXIobV9jbGlwYm9h
cmQpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZFJl
YWR5Q2FsbGJhY2soR09iamVjdCosIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBFZGl0b3JUZXN0KiB0
ZXN0KQotICAgIHsKLSAgICAgICAgR093blB0cjxHRXJyb3I+IGVycm9yOwotICAgICAgICB0ZXN0
LT5tX2NhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZCA9IHdlYmtpdF93ZWJfdmlld19jYW5fZXhlY3V0
ZV9lZGl0aW5nX2NvbW1hbmRfZmluaXNoKHRlc3QtPm1fd2ViVmlldywgcmVzdWx0LCAmZXJyb3Iu
b3V0UHRyKCkpOwotICAgICAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOwotICAgICAgICBnX21h
aW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIGJvb2wgY2FuRXhl
Y3V0ZUVkaXRpbmdDb21tYW5kKGNvbnN0IGNoYXIqIGNvbW1hbmQpCi0gICAgewotICAgICAgICBt
X2NhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZCA9IGZhbHNlOwotICAgICAgICB3ZWJraXRfd2ViX3Zp
ZXdfY2FuX2V4ZWN1dGVfZWRpdGluZ19jb21tYW5kKG1fd2ViVmlldywgY29tbWFuZCwgMCwgcmVp
bnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihjYW5FeGVjdXRlRWRpdGluZ0NvbW1h
bmRSZWFkeUNhbGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5M
b29wKTsKLSAgICAgICAgcmV0dXJuIG1fY2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kOwotICAgIH0K
LQotICAgIHN0YXRpYyBnYm9vbGVhbiB3YWl0Rm9yQ2xpcGJvYXJkVGV4dChFZGl0b3JUZXN0KiB0
ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+bV90cmllc0NvdW50Kys7Ci0gICAgICAgIGlmIChn
dGtfY2xpcGJvYXJkX3dhaXRfaXNfdGV4dF9hdmFpbGFibGUodGVzdC0+bV9jbGlwYm9hcmQpIHx8
IHRlc3QtPm1fdHJpZXNDb3VudCA+IGtDbGlwYm9hcmRXYWl0TWF4VHJpZXMpIHsKLSAgICAgICAg
ICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7Ci0gICAgICAgICAgICByZXR1
cm4gRkFMU0U7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gVFJVRTsKLSAgICB9Ci0KLSAg
ICB2b2lkIGNvcHlDbGlwYm9hcmQoKQotICAgIHsKLSAgICAgICAgd2Via2l0X3dlYl92aWV3X2V4
ZWN1dGVfZWRpdGluZ19jb21tYW5kKG1fd2ViVmlldywgV0VCS0lUX0VESVRJTkdfQ09NTUFORF9D
T1BZKTsKLSAgICAgICAgLy8gVGhlcmUncyBubyB3YXkgdG8ga25vdyB3aGVuIHRoZSBzZWxlY3Rp
b24gaGFzIGJlZW4gY29waWVkIHRvCi0gICAgICAgIC8vIHRoZSBjbGlwYm9hcmQsIHNvIHVzZSBh
IHRpbWVvdXQgc291cmNlIHRvIHF1ZXJ5IHRoZSBjbGlwYm9hcmQuCi0gICAgICAgIG1fdHJpZXND
b3VudCA9IDA7Ci0gICAgICAgIGdfdGltZW91dF9hZGQoa0NsaXBib2FyZFdhaXRUaW1lb3V0LCBy
ZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPih3YWl0Rm9yQ2xpcGJvYXJkVGV4dCksIHRoaXMp
OwotICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgR3Rr
Q2xpcGJvYXJkKiBtX2NsaXBib2FyZDsKLSAgICBib29sIG1fY2FuRXhlY3V0ZUVkaXRpbmdDb21t
YW5kOwotICAgIHNpemVfdCBtX3RyaWVzQ291bnQ7Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0V2Vi
Vmlld0VkaXRvckN1dENvcHlQYXN0ZU5vbkVkaXRhYmxlKEVkaXRvclRlc3QqIHRlc3QsIGdjb25z
dHBvaW50ZXIpCi17Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHNlbGVjdGVkU3BhbkhUTUwgPSAi
PGh0bWw+PGJvZHkgY29udGVudEVkaXRhYmxlPVwiZmFsc2VcIj4iCi0gICAgICAgICI8c3BhbiBp
ZD1cIm1haW5zcGFuXCI+QWxsIHdvcmsgYW5kIG5vIHBsYXkgPHNwYW4gaWQ9XCJzdWJzcGFuXCI+
bWFrZSBKYWNrIGEgZHVsbDwvc3Bhbj4gYm95Ljwvc3Bhbj4iCi0gICAgICAgICI8c2NyaXB0PmRv
Y3VtZW50LmdldFNlbGVjdGlvbigpLmNvbGxhcHNlKCk7XG4iCi0gICAgICAgICJkb2N1bWVudC5n
ZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJlbihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
c3Vic3BhbicpKTtcbiIKLSAgICAgICAgIjwvc2NyaXB0PjwvYm9keT48L2h0bWw+IjsKLQotICAg
IC8vIE5vdGhpbmcgbG9hZGVkIHlldC4KLSAgICBnX2Fzc2VydCghdGVzdC0+Y2FuRXhlY3V0ZUVk
aXRpbmdDb21tYW5kKFdFQktJVF9FRElUSU5HX0NPTU1BTkRfQ1VUKSk7Ci0gICAgZ19hc3NlcnQo
IXRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElOR19DT01NQU5EX0NP
UFkpKTsKLSAgICBnX2Fzc2VydCghdGVzdC0+Y2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kKFdFQktJ
VF9FRElUSU5HX0NPTU1BTkRfUEFTVEUpKTsKLQotICAgIHRlc3QtPmxvYWRIdG1sKHNlbGVjdGVk
U3BhbkhUTUwsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAg
Z19hc3NlcnQodGVzdC0+Y2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kKFdFQktJVF9FRElUSU5HX0NP
TU1BTkRfQ09QWSkpOwotICAgIC8vIEl0J3Mgbm90IHBvc3NpYmxlIHRvIGN1dCBhbmQgcGFzdGUg
d2hlbiBjb250ZW50IGlzIG5vdCBlZGl0YWJsZQotICAgIC8vIGV2ZW4gaWYgdGhlcmUncyBhIHNl
bGVjdGlvbi4KLSAgICBnX2Fzc2VydCghdGVzdC0+Y2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kKFdF
QktJVF9FRElUSU5HX0NPTU1BTkRfQ1VUKSk7Ci0gICAgZ19hc3NlcnQoIXRlc3QtPmNhbkV4ZWN1
dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElOR19DT01NQU5EX1BBU1RFKSk7Ci0KLSAgICB0
ZXN0LT5jb3B5Q2xpcGJvYXJkKCk7Ci0gICAgR093blB0cjxjaGFyPiBjbGlwYm9hcmRUZXh0KGd0
a19jbGlwYm9hcmRfd2FpdF9mb3JfdGV4dCh0ZXN0LT5tX2NsaXBib2FyZCkpOwotICAgIGdfYXNz
ZXJ0X2NtcHN0cihjbGlwYm9hcmRUZXh0LmdldCgpLCA9PSwgIm1ha2UgSmFjayBhIGR1bGwiKTsK
LX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdFZGl0b3JDdXRDb3B5UGFzdGVFZGl0YWJsZShF
ZGl0b3JUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBzZWxlY3RlZFNwYW5IVE1MID0gIjxodG1sPjxib2R5IGNvbnRlbnRFZGl0YWJsZT1cInRydWVc
Ij4iCi0gICAgICAgICI8c3BhbiBpZD1cIm1haW5zcGFuXCI+QWxsIHdvcmsgYW5kIG5vIHBsYXkg
PHNwYW4+bWFrZSBKYWNrIGEgZHVsbDwvc3Bhbj4gYm95Ljwvc3Bhbj4iCi0gICAgICAgICI8c2Ny
aXB0PmRvY3VtZW50LmdldFNlbGVjdGlvbigpLmNvbGxhcHNlKCk7XG4iCi0gICAgICAgICJkb2N1
bWVudC5nZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJlbihkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnbWFpbnNwYW4nKSk7XG4iCi0gICAgICAgICI8L3NjcmlwdD48L2JvZHk+PC9odG1sPiI7
Ci0KLSAgICAvLyBOb3RoaW5nIGxvYWRlZCB5ZXQuCi0gICAgZ19hc3NlcnQoIXRlc3QtPmNhbkV4
ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElOR19DT01NQU5EX0NVVCkpOwotICAgIGdf
YXNzZXJ0KCF0ZXN0LT5jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQoV0VCS0lUX0VESVRJTkdfQ09N
TUFORF9DT1BZKSk7Ci0gICAgZ19hc3NlcnQoIXRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFu
ZChXRUJLSVRfRURJVElOR19DT01NQU5EX1BBU1RFKSk7Ci0KLSAgICB0ZXN0LT5sb2FkSHRtbChz
ZWxlY3RlZFNwYW5IVE1MLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsK
LQotICAgIC8vIFRoZXJlJ3MgYSBzZWxlY3Rpb24uCi0gICAgZ19hc3NlcnQodGVzdC0+Y2FuRXhl
Y3V0ZUVkaXRpbmdDb21tYW5kKFdFQktJVF9FRElUSU5HX0NPTU1BTkRfQ1VUKSk7Ci0gICAgZ19h
c3NlcnQodGVzdC0+Y2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kKFdFQktJVF9FRElUSU5HX0NPTU1B
TkRfQ09QWSkpOwotICAgIGdfYXNzZXJ0KHRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChX
RUJLSVRfRURJVElOR19DT01NQU5EX1BBU1RFKSk7Ci0KLSAgICB0ZXN0LT5jb3B5Q2xpcGJvYXJk
KCk7Ci0gICAgR093blB0cjxjaGFyPiBjbGlwYm9hcmRUZXh0KGd0a19jbGlwYm9hcmRfd2FpdF9m
b3JfdGV4dCh0ZXN0LT5tX2NsaXBib2FyZCkpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihjbGlwYm9h
cmRUZXh0LmdldCgpLCA9PSwgIkFsbCB3b3JrIGFuZCBubyBwbGF5IG1ha2UgSmFjayBhIGR1bGwg
Ym95LiIpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0VkaXRvclNlbGVjdEFsbE5vbkVk
aXRhYmxlKEVkaXRvclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgc3RhdGljIGNv
bnN0IGNoYXIqIHNlbGVjdGVkU3BhbkhUTUwgPSAiPGh0bWw+PGJvZHkgY29udGVudEVkaXRhYmxl
PVwiZmFsc2VcIj4iCi0gICAgICAgICI8c3BhbiBpZD1cIm1haW5zcGFuXCI+QWxsIHdvcmsgYW5k
IG5vIHBsYXkgPHNwYW4gaWQ9XCJzdWJzcGFuXCI+bWFrZSBKYWNrIGEgZHVsbDwvc3Bhbj4gYm95
Ljwvc3Bhbj4iCi0gICAgICAgICI8c2NyaXB0PmRvY3VtZW50LmdldFNlbGVjdGlvbigpLmNvbGxh
cHNlKCk7XG4iCi0gICAgICAgICJkb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGls
ZHJlbihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3Vic3BhbicpKTtcbiIKLSAgICAgICAgIjwv
c2NyaXB0PjwvYm9keT48L2h0bWw+IjsKLQotICAgIGdfYXNzZXJ0KHRlc3QtPmNhbkV4ZWN1dGVF
ZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElOR19DT01NQU5EX1NFTEVDVF9BTEwpKTsKLQotICAg
IHRlc3QtPmxvYWRIdG1sKHNlbGVjdGVkU3BhbkhUTUwsIDApOwotICAgIHRlc3QtPndhaXRVbnRp
bExvYWRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3NlcnQodGVzdC0+Y2FuRXhlY3V0ZUVkaXRpbmdD
b21tYW5kKFdFQktJVF9FRElUSU5HX0NPTU1BTkRfU0VMRUNUX0FMTCkpOwotCi0gICAgdGVzdC0+
Y29weUNsaXBib2FyZCgpOwotICAgIEdPd25QdHI8Y2hhcj4gY2xpcGJvYXJkVGV4dChndGtfY2xp
cGJvYXJkX3dhaXRfZm9yX3RleHQodGVzdC0+bV9jbGlwYm9hcmQpKTsKLQotICAgIC8vIEluaXRp
YWxseSBvbmx5IHRoZSBzdWJzcGFuIGlzIHNlbGVjdGVkLgotICAgIGdfYXNzZXJ0X2NtcHN0cihj
bGlwYm9hcmRUZXh0LmdldCgpLCA9PSwgIm1ha2UgSmFjayBhIGR1bGwiKTsKLQotICAgIHdlYmtp
dF93ZWJfdmlld19leGVjdXRlX2VkaXRpbmdfY29tbWFuZCh0ZXN0LT5tX3dlYlZpZXcsIFdFQktJ
VF9FRElUSU5HX0NPTU1BTkRfU0VMRUNUX0FMTCk7Ci0gICAgdGVzdC0+Y29weUNsaXBib2FyZCgp
OwotICAgIGNsaXBib2FyZFRleHQuc2V0KGd0a19jbGlwYm9hcmRfd2FpdF9mb3JfdGV4dCh0ZXN0
LT5tX2NsaXBib2FyZCkpOwotCi0gICAgLy8gVGhlIG1haW5zcGFuIHNob3VsZCBiZSBzZWxlY3Rl
ZCBhZnRlciBjYWxsaW5nIFNFTEVDVF9BTEwuCi0gICAgZ19hc3NlcnRfY21wc3RyKGNsaXBib2Fy
ZFRleHQuZ2V0KCksID09LCAiQWxsIHdvcmsgYW5kIG5vIHBsYXkgbWFrZSBKYWNrIGEgZHVsbCBi
b3kuIik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3RWRpdG9yU2VsZWN0QWxsRWRpdGFi
bGUoRWRpdG9yVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBzdGF0aWMgY29uc3Qg
Y2hhciogc2VsZWN0ZWRTcGFuSFRNTCA9ICI8aHRtbD48Ym9keSBjb250ZW50RWRpdGFibGU9XCJ0
cnVlXCI+IgotICAgICAgICAiPHNwYW4gaWQ9XCJtYWluc3BhblwiPkFsbCB3b3JrIGFuZCBubyBw
bGF5IDxzcGFuIGlkPVwic3Vic3BhblwiPm1ha2UgSmFjayBhIGR1bGw8L3NwYW4+IGJveS48L3Nw
YW4+IgotICAgICAgICAiPHNjcmlwdD5kb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5jb2xsYXBzZSgp
O1xuIgotICAgICAgICAiZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0QWxsQ2hpbGRyZW4o
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1YnNwYW4nKSk7XG4iCi0gICAgICAgICI8L3Njcmlw
dD48L2JvZHk+PC9odG1sPiI7Ci0KLSAgICBnX2Fzc2VydCh0ZXN0LT5jYW5FeGVjdXRlRWRpdGlu
Z0NvbW1hbmQoV0VCS0lUX0VESVRJTkdfQ09NTUFORF9TRUxFQ1RfQUxMKSk7Ci0KLSAgICB0ZXN0
LT5sb2FkSHRtbChzZWxlY3RlZFNwYW5IVE1MLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2Fk
RmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0KHRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFu
ZChXRUJLSVRfRURJVElOR19DT01NQU5EX1NFTEVDVF9BTEwpKTsKLQotICAgIHRlc3QtPmNvcHlD
bGlwYm9hcmQoKTsKLSAgICBHT3duUHRyPGNoYXI+IGNsaXBib2FyZFRleHQoZ3RrX2NsaXBib2Fy
ZF93YWl0X2Zvcl90ZXh0KHRlc3QtPm1fY2xpcGJvYXJkKSk7Ci0KLSAgICAvLyBJbml0aWFsbHkg
b25seSB0aGUgc3Vic3BhbiBpcyBzZWxlY3RlZC4KLSAgICBnX2Fzc2VydF9jbXBzdHIoY2xpcGJv
YXJkVGV4dC5nZXQoKSwgPT0sICJtYWtlIEphY2sgYSBkdWxsIik7Ci0KLSAgICB3ZWJraXRfd2Vi
X3ZpZXdfZXhlY3V0ZV9lZGl0aW5nX2NvbW1hbmQodGVzdC0+bV93ZWJWaWV3LCBXRUJLSVRfRURJ
VElOR19DT01NQU5EX1NFTEVDVF9BTEwpOwotICAgIHRlc3QtPmNvcHlDbGlwYm9hcmQoKTsKLSAg
ICBjbGlwYm9hcmRUZXh0LnNldChndGtfY2xpcGJvYXJkX3dhaXRfZm9yX3RleHQodGVzdC0+bV9j
bGlwYm9hcmQpKTsKLQotICAgIC8vIFRoZSBtYWluc3BhbiBzaG91bGQgYmUgc2VsZWN0ZWQgYWZ0
ZXIgY2FsbGluZyBTRUxFQ1RfQUxMLgotICAgIGdfYXNzZXJ0X2NtcHN0cihjbGlwYm9hcmRUZXh0
LmdldCgpLCA9PSwgIkFsbCB3b3JrIGFuZCBubyBwbGF5IG1ha2UgSmFjayBhIGR1bGwgYm95LiIp
OwotfQotCi12b2lkIGJlZm9yZUFsbCgpCi17Ci0gICAgRWRpdG9yVGVzdDo6YWRkKCJXZWJLaXRX
ZWJWaWV3IiwgImN1dC1jb3B5LXBhc3RlL25vbi1lZGl0YWJsZSIsIHRlc3RXZWJWaWV3RWRpdG9y
Q3V0Q29weVBhc3RlTm9uRWRpdGFibGUpOwotICAgIEVkaXRvclRlc3Q6OmFkZCgiV2ViS2l0V2Vi
VmlldyIsICJjdXQtY29weS1wYXN0ZS9lZGl0YWJsZSIsIHRlc3RXZWJWaWV3RWRpdG9yQ3V0Q29w
eVBhc3RlRWRpdGFibGUpOwotICAgIEVkaXRvclRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJz
ZWxlY3QtYWxsL25vbi1lZGl0YWJsZSIsIHRlc3RXZWJWaWV3RWRpdG9yU2VsZWN0QWxsTm9uRWRp
dGFibGUpOwotICAgIEVkaXRvclRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJzZWxlY3QtYWxs
L2VkaXRhYmxlIiwgdGVzdFdlYlZpZXdFZGl0b3JTZWxlY3RBbGxFZGl0YWJsZSk7Ci19Ci0KLXZv
aWQgYWZ0ZXJBbGwoKQotewotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvV2ViRXh0ZW5zaW9uVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJFeHRlbnNpb25UZXN0LmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDIxMmUyYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJFeHRlbnNpb25UZXN0LmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDI2NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dFJl
Zi5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8
Z2lvL2dpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2lu
Y2x1ZGUgPHdlYmtpdDIvd2Via2l0LXdlYi1leHRlbnNpb24uaD4KLSNpbmNsdWRlIDx3dGYvRGVx
dWUuaD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIu
aD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmpl
Y3QvR1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotc3RhdGljIGNv
bnN0IGNoYXIgaW50cm9zcGVjdGlvblhNTFtdID0KLSAgICAiPG5vZGU+IgotICAgICIgPGludGVy
ZmFjZSBuYW1lPSdvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0Jz4iCi0gICAgIiAgPG1l
dGhvZCBuYW1lPSdHZXRUaXRsZSc+IgotICAgICIgICA8YXJnIHR5cGU9J3QnIG5hbWU9J3BhZ2VJ
RCcgZGlyZWN0aW9uPSdpbicvPiIKLSAgICAiICAgPGFyZyB0eXBlPSdzJyBuYW1lPSd0aXRsZScg
ZGlyZWN0aW9uPSdvdXQnLz4iCi0gICAgIiAgPC9tZXRob2Q+IgotICAgICIgIDxtZXRob2QgbmFt
ZT0nQWJvcnRQcm9jZXNzJz4iCi0gICAgIiAgPC9tZXRob2Q+IgotICAgICIgIDxtZXRob2QgbmFt
ZT0nUnVuSmF2YVNjcmlwdEluSXNvbGF0ZWRXb3JsZCc+IgotICAgICIgICA8YXJnIHR5cGU9J3Qn
IG5hbWU9J3BhZ2VJRCcgZGlyZWN0aW9uPSdpbicvPiIKLSAgICAiICAgPGFyZyB0eXBlPSdzJyBu
YW1lPSdzY3JpcHQnIGRpcmVjdGlvbj0naW4nLz4iCi0gICAgIiAgPC9tZXRob2Q+IgotICAgICIg
IDxzaWduYWwgbmFtZT0nRG9jdW1lbnRMb2FkZWQnLz4iCi0gICAgIiAgPHNpZ25hbCBuYW1lPSdV
UklDaGFuZ2VkJz4iCi0gICAgIiAgIDxhcmcgdHlwZT0ncycgbmFtZT0ndXJpJyBkaXJlY3Rpb249
J291dCcvPiIKLSAgICAiICA8L3NpZ25hbD4iCi0gICAgIiA8L2ludGVyZmFjZT4iCi0gICAgIjwv
bm9kZT4iOwotCi10eXBlZGVmIGVudW0gewotICAgIERvY3VtZW50TG9hZGVkU2lnbmFsLAotICAg
IFVSSUNoYW5nZWRTaWduYWwsCi19IERlbGF5ZWRTaWduYWxUeXBlOwotCi1zdHJ1Y3QgRGVsYXll
ZFNpZ25hbCB7Ci0gICAgRGVsYXllZFNpZ25hbChEZWxheWVkU2lnbmFsVHlwZSB0eXBlKQotICAg
ICAgICA6IHR5cGUodHlwZSkKLSAgICB7Ci0gICAgfQotCi0gICAgRGVsYXllZFNpZ25hbChEZWxh
eWVkU2lnbmFsVHlwZSB0eXBlLCBjb25zdCBjaGFyKiB1cmkpCi0gICAgICAgIDogdHlwZSh0eXBl
KQotICAgICAgICAsIHVyaSh1cmkpCi0gICAgewotICAgIH0KLQotICAgIERlbGF5ZWRTaWduYWxU
eXBlIHR5cGU7Ci0gICAgQ1N0cmluZyB1cmk7Ci19OwotCi1EZXF1ZTxPd25QdHI8RGVsYXllZFNp
Z25hbD4+IGRlbGF5ZWRTaWduYWxzUXVldWU7Ci0KLXN0YXRpYyB2b2lkIGVtaXREb2N1bWVudExv
YWRlZChHREJ1c0Nvbm5lY3Rpb24qIGNvbm5lY3Rpb24pCi17Ci0gICAgYm9vbCBvayA9IGdfZGJ1
c19jb25uZWN0aW9uX2VtaXRfc2lnbmFsKAotICAgICAgICBjb25uZWN0aW9uLAotICAgICAgICAw
LAotICAgICAgICAiL29yZy93ZWJraXQvZ3RrL1dlYkV4dGVuc2lvblRlc3QiLAotICAgICAgICAi
b3JnLndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9uVGVzdCIsCi0gICAgICAgICJEb2N1bWVudExvYWRl
ZCIsCi0gICAgICAgIDAsCi0gICAgICAgIDApOwotICAgIGdfYXNzZXJ0KG9rKTsKLX0KLQotc3Rh
dGljIHZvaWQgZG9jdW1lbnRMb2FkZWRDYWxsYmFjayhXZWJLaXRXZWJQYWdlKiwgV2ViS2l0V2Vi
RXh0ZW5zaW9uKiBleHRlbnNpb24pCi17Ci0gICAgZ3BvaW50ZXIgZGF0YSA9IGdfb2JqZWN0X2dl
dF9kYXRhKEdfT0JKRUNUKGV4dGVuc2lvbiksICJkYnVzLWNvbm5lY3Rpb24iKTsKLSAgICBpZiAo
ZGF0YSkKLSAgICAgICAgZW1pdERvY3VtZW50TG9hZGVkKEdfREJVU19DT05ORUNUSU9OKGRhdGEp
KTsKLSAgICBlbHNlCi0gICAgICAgIGRlbGF5ZWRTaWduYWxzUXVldWUuYXBwZW5kKGFkb3B0UHRy
KG5ldyBEZWxheWVkU2lnbmFsKERvY3VtZW50TG9hZGVkU2lnbmFsKSkpOwotfQotCi1zdGF0aWMg
dm9pZCBlbWl0VVJJQ2hhbmdlZChHREJ1c0Nvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIGNvbnN0IGNo
YXIqIHVyaSkKLXsKLSAgICBib29sIG9rID0gZ19kYnVzX2Nvbm5lY3Rpb25fZW1pdF9zaWduYWwo
Ci0gICAgICAgIGNvbm5lY3Rpb24sCi0gICAgICAgIDAsCi0gICAgICAgICIvb3JnL3dlYmtpdC9n
dGsvV2ViRXh0ZW5zaW9uVGVzdCIsCi0gICAgICAgICJvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNp
b25UZXN0IiwKLSAgICAgICAgIlVSSUNoYW5nZWQiLAotICAgICAgICBnX3ZhcmlhbnRfbmV3KCIo
cykiLCB1cmkpLAotICAgICAgICAwKTsKLSAgICBnX2Fzc2VydChvayk7Ci19Ci0KLXN0YXRpYyB2
b2lkIHVyaUNoYW5nZWRDYWxsYmFjayhXZWJLaXRXZWJQYWdlKiB3ZWJQYWdlLCBHUGFyYW1TcGVj
KiBwc3BlYywgV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24pCi17Ci0gICAgZ3BvaW50ZXIg
ZGF0YSA9IGdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKGV4dGVuc2lvbiksICJkYnVzLWNvbm5l
Y3Rpb24iKTsKLSAgICBpZiAoZGF0YSkKLSAgICAgICAgZW1pdFVSSUNoYW5nZWQoR19EQlVTX0NP
Tk5FQ1RJT04oZGF0YSksIHdlYmtpdF93ZWJfcGFnZV9nZXRfdXJpKHdlYlBhZ2UpKTsKLSAgICBl
bHNlCi0gICAgICAgIGRlbGF5ZWRTaWduYWxzUXVldWUuYXBwZW5kKGFkb3B0UHRyKG5ldyBEZWxh
eWVkU2lnbmFsKFVSSUNoYW5nZWRTaWduYWwsIHdlYmtpdF93ZWJfcGFnZV9nZXRfdXJpKHdlYlBh
Z2UpKSkpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gc2VuZFJlcXVlc3RDYWxsYmFjayhXZWJLaXRX
ZWJQYWdlKiwgV2ViS2l0VVJJUmVxdWVzdCogcmVxdWVzdCwgV2ViS2l0VVJJUmVzcG9uc2UqLCBn
cG9pbnRlcikKLXsKLSAgICBjb25zdCBjaGFyKiByZXF1ZXN0VVJJID0gd2Via2l0X3VyaV9yZXF1
ZXN0X2dldF91cmkocmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQocmVxdWVzdFVSSSk7Ci0KLSAgICBp
ZiAoY29uc3QgY2hhciogc3VmZml4ID0gZ19zdHJyc3RyKHJlcXVlc3RVUkksICIvcmVtb3ZlLXRo
aXMvamF2YXNjcmlwdC5qcyIpKSB7Ci0gICAgICAgIEdPd25QdHI8Y2hhcj4gcHJlZml4KGdfc3Ry
bmR1cChyZXF1ZXN0VVJJLCBzdHJsZW4ocmVxdWVzdFVSSSkgLSBzdHJsZW4oc3VmZml4KSkpOwot
ICAgICAgICBHT3duUHRyPGNoYXI+IG5ld1VSSShnX3N0cmR1cF9wcmludGYoIiVzL2phdmFzY3Jp
cHQuanMiLCBwcmVmaXguZ2V0KCkpKTsKLSAgICAgICAgd2Via2l0X3VyaV9yZXF1ZXN0X3NldF91
cmkocmVxdWVzdCwgbmV3VVJJLmdldCgpKTsKLSAgICB9IGVsc2UgaWYgKGdfc3RyX2hhc19zdWZm
aXgocmVxdWVzdFVSSSwgIi9hZGQtZG8tbm90LXRyYWNrLWhlYWRlciIpKSB7Ci0gICAgICAgIFNv
dXBNZXNzYWdlSGVhZGVycyogaGVhZGVycyA9IHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfaHR0cF9o
ZWFkZXJzKHJlcXVlc3QpOwotICAgICAgICBnX2Fzc2VydChoZWFkZXJzKTsKLSAgICAgICAgc291
cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKGhlYWRlcnMsICJETlQiLCAiMSIpOwotICAgIH0gZWxz
ZSBpZiAoZ19zdHJfaGFzX3N1ZmZpeChyZXF1ZXN0VVJJLCAiL2NhbmNlbC10aGlzLmpzIikpCi0g
ICAgICAgIHJldHVybiBUUlVFOwotCi0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9p
ZCBwYWdlQ3JlYXRlZENhbGxiYWNrKFdlYktpdFdlYkV4dGVuc2lvbiogZXh0ZW5zaW9uLCBXZWJL
aXRXZWJQYWdlKiB3ZWJQYWdlLCBncG9pbnRlcikKLXsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHdl
YlBhZ2UsICJkb2N1bWVudC1sb2FkZWQiLCBHX0NBTExCQUNLKGRvY3VtZW50TG9hZGVkQ2FsbGJh
Y2spLCBleHRlbnNpb24pOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViUGFnZSwgIm5vdGlmeTo6
dXJpIiwgR19DQUxMQkFDSyh1cmlDaGFuZ2VkQ2FsbGJhY2spLCBleHRlbnNpb24pOwotICAgIGdf
c2lnbmFsX2Nvbm5lY3Qod2ViUGFnZSwgInNlbmQtcmVxdWVzdCIsIEdfQ0FMTEJBQ0soc2VuZFJl
cXVlc3RDYWxsYmFjayksIDApOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBlY2hvQ2FsbGJhY2so
SlNDb250ZXh0UmVmIGpzQ29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmLCBzaXplX3Qg
YXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiop
Ci17Ci0gICAgaWYgKGFyZ3VtZW50Q291bnQgPD0gMCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGpzQ29udGV4dCk7Ci0KLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
c3RyaW5nKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGpzQ29udGV4dCwgYXJndW1lbnRzWzBd
LCAwKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlU3RyaW5nKGpzQ29udGV4dCwgc3RyaW5nLmdl
dCgpKTsKLX0KLQotc3RhdGljIHZvaWQgd2luZG93T2JqZWN0Q2xlYXJlZChXZWJLaXRTY3JpcHRX
b3JsZCogd29ybGQsIFdlYktpdFdlYlBhZ2UqIHBhZ2UsIFdlYktpdEZyYW1lKiBmcmFtZSwgZ3Bv
aW50ZXIpCi17Ci0gICAgSlNHbG9iYWxDb250ZXh0UmVmIGpzQ29udGV4dCA9IHdlYmtpdF9mcmFt
ZV9nZXRfamF2YXNjcmlwdF9jb250ZXh0X2Zvcl9zY3JpcHRfd29ybGQoZnJhbWUsIHdvcmxkKTsK
LSAgICBnX2Fzc2VydChqc0NvbnRleHQpOwotICAgIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCA9
IEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChqc0NvbnRleHQpOwotICAgIGdfYXNzZXJ0KGdsb2Jh
bE9iamVjdCk7Ci0KLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gZnVuY3Rpb25OYW1lKEFk
b3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZWNobyIpKTsKLSAgICBKU09iamVj
dFJlZiBmdW5jdGlvbiA9IEpTT2JqZWN0TWFrZUZ1bmN0aW9uV2l0aENhbGxiYWNrKGpzQ29udGV4
dCwgZnVuY3Rpb25OYW1lLmdldCgpLCBlY2hvQ2FsbGJhY2spOwotICAgIEpTT2JqZWN0U2V0UHJv
cGVydHkoanNDb250ZXh0LCBnbG9iYWxPYmplY3QsIGZ1bmN0aW9uTmFtZS5nZXQoKSwgZnVuY3Rp
b24sIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB8IGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHksIDApOwotfQotCi1zdGF0aWMgV2ViS2l0V2ViUGFnZSogZ2V0V2ViUGFnZShXZWJL
aXRXZWJFeHRlbnNpb24qIGV4dGVuc2lvbiwgdWludDY0X3QgcGFnZUlELCBHREJ1c01ldGhvZElu
dm9jYXRpb24qIGludm9jYXRpb24pCi17Ci0gICAgV2ViS2l0V2ViUGFnZSogcGFnZSA9IHdlYmtp
dF93ZWJfZXh0ZW5zaW9uX2dldF9wYWdlKGV4dGVuc2lvbiwgcGFnZUlEKTsKLSAgICBpZiAoIXBh
Z2UpIHsKLSAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVybl9lcnJvcigKLSAg
ICAgICAgICAgIGludm9jYXRpb24sIEdfREJVU19FUlJPUiwgR19EQlVTX0VSUk9SX0lOVkFMSURf
QVJHUywKLSAgICAgICAgICAgICJJbnZhbGlkIHBhZ2UgSUQ6ICUiIEdfR1VJTlQ2NF9GT1JNQVQs
IHBhZ2VJRCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGdfYXNzZXJ0X2NtcHVp
bnQod2Via2l0X3dlYl9wYWdlX2dldF9pZChwYWdlKSwgPT0sIHBhZ2VJRCk7Ci0gICAgcmV0dXJu
IHBhZ2U7Ci19Ci0KLXN0YXRpYyB2b2lkIG1ldGhvZENhbGxDYWxsYmFjayhHREJ1c0Nvbm5lY3Rp
b24qIGNvbm5lY3Rpb24sIGNvbnN0IGNoYXIqIHNlbmRlciwgY29uc3QgY2hhciogb2JqZWN0UGF0
aCwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogbWV0aG9kTmFtZSwgR1Zh
cmlhbnQqIHBhcmFtZXRlcnMsIEdEQnVzTWV0aG9kSW52b2NhdGlvbiogaW52b2NhdGlvbiwgZ3Bv
aW50ZXIgdXNlckRhdGEpCi17Ci0gICAgaWYgKGdfc3RyY21wMChpbnRlcmZhY2VOYW1lLCAib3Jn
LndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9uVGVzdCIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAiR2V0VGl0bGUiKSkgewotICAgICAgICB1aW50NjRf
dCBwYWdlSUQ7Ci0gICAgICAgIGdfdmFyaWFudF9nZXQocGFyYW1ldGVycywgIih0KSIsICZwYWdl
SUQpOwotICAgICAgICBXZWJLaXRXZWJQYWdlKiBwYWdlID0gZ2V0V2ViUGFnZShXRUJLSVRfV0VC
X0VYVEVOU0lPTih1c2VyRGF0YSksIHBhZ2VJRCwgaW52b2NhdGlvbik7Ci0gICAgICAgIGlmICgh
cGFnZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBXZWJLaXRET01Eb2N1bWVudCog
ZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3BhZ2VfZ2V0X2RvbV9kb2N1bWVudChwYWdlKTsKLSAgICAg
ICAgR093blB0cjxjaGFyPiB0aXRsZSh3ZWJraXRfZG9tX2RvY3VtZW50X2dldF90aXRsZShkb2N1
bWVudCkpOwotICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9jYXRpb25fcmV0dXJuX3ZhbHVlKGlu
dm9jYXRpb24sIGdfdmFyaWFudF9uZXcoIihzKSIsIHRpdGxlLmdldCgpKSk7Ci0gICAgfSBlbHNl
IGlmICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJSdW5KYXZhU2NyaXB0SW5Jc29sYXRlZFdvcmxk
IikpIHsKLSAgICAgICAgdWludDY0X3QgcGFnZUlEOwotICAgICAgICBjb25zdCBjaGFyKiBzY3Jp
cHQ7Ci0gICAgICAgIGdfdmFyaWFudF9nZXQocGFyYW1ldGVycywgIih0JnMpIiwgJnBhZ2VJRCwg
JnNjcmlwdCk7Ci0gICAgICAgIFdlYktpdFdlYlBhZ2UqIHBhZ2UgPSBnZXRXZWJQYWdlKFdFQktJ
VF9XRUJfRVhURU5TSU9OKHVzZXJEYXRhKSwgcGFnZUlELCBpbnZvY2F0aW9uKTsKLSAgICAgICAg
aWYgKCFwYWdlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIEdSZWZQdHI8V2ViS2l0
U2NyaXB0V29ybGQ+IHdvcmxkID0gYWRvcHRHUmVmKHdlYmtpdF9zY3JpcHRfd29ybGRfbmV3KCkp
OwotICAgICAgICBnX2Fzc2VydCh3ZWJraXRfc2NyaXB0X3dvcmxkX2dldF9kZWZhdWx0KCkgIT0g
d29ybGQuZ2V0KCkpOwotICAgICAgICBXZWJLaXRGcmFtZSogZnJhbWUgPSB3ZWJraXRfd2ViX3Bh
Z2VfZ2V0X21haW5fZnJhbWUocGFnZSk7Ci0gICAgICAgIEpTR2xvYmFsQ29udGV4dFJlZiBqc0Nv
bnRleHQgPSB3ZWJraXRfZnJhbWVfZ2V0X2phdmFzY3JpcHRfY29udGV4dF9mb3Jfc2NyaXB0X3dv
cmxkKGZyYW1lLCB3b3JsZC5nZXQoKSk7Ci0gICAgICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBqc1NjcmlwdChBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc2NyaXB0KSk7
Ci0gICAgICAgIEpTRXZhbHVhdGVTY3JpcHQoanNDb250ZXh0LCBqc1NjcmlwdC5nZXQoKSwgMCwg
MCwgMCwgMCk7Ci0gICAgICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUo
aW52b2NhdGlvbiwgMCk7Ci0gICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJB
Ym9ydFByb2Nlc3MiKSkgewotICAgICAgICBhYm9ydCgpOwotICAgIH0KLX0KLQotc3RhdGljIGNv
bnN0IEdEQnVzSW50ZXJmYWNlVlRhYmxlIGludGVyZmFjZVZpcnR1YWxUYWJsZSA9IHsKLSAgICBt
ZXRob2RDYWxsQ2FsbGJhY2ssIDAsIDAsIHsgMCwgfQotfTsKLQotc3RhdGljIHZvaWQgYnVzQWNx
dWlyZWRDYWxsYmFjayhHREJ1c0Nvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIGNvbnN0IGNoYXIqIG5h
bWUsIGdwb2ludGVyIHVzZXJEYXRhKQotewotICAgIHN0YXRpYyBHREJ1c05vZGVJbmZvICppbnRy
b3NwZWN0aW9uRGF0YSA9IDA7Ci0gICAgaWYgKCFpbnRyb3NwZWN0aW9uRGF0YSkKLSAgICAgICAg
aW50cm9zcGVjdGlvbkRhdGEgPSBnX2RidXNfbm9kZV9pbmZvX25ld19mb3JfeG1sKGludHJvc3Bl
Y3Rpb25YTUwsIDApOwotCi0gICAgR093blB0cjxHRXJyb3I+IGVycm9yOwotICAgIHVuc2lnbmVk
IHJlZ2lzdHJhdGlvbklEID0gZ19kYnVzX2Nvbm5lY3Rpb25fcmVnaXN0ZXJfb2JqZWN0KAotICAg
ICAgICBjb25uZWN0aW9uLAotICAgICAgICAiL29yZy93ZWJraXQvZ3RrL1dlYkV4dGVuc2lvblRl
c3QiLAotICAgICAgICBpbnRyb3NwZWN0aW9uRGF0YS0+aW50ZXJmYWNlc1swXSwKLSAgICAgICAg
JmludGVyZmFjZVZpcnR1YWxUYWJsZSwKLSAgICAgICAgZ19vYmplY3RfcmVmKHVzZXJEYXRhKSwK
LSAgICAgICAgc3RhdGljX2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGdfb2JqZWN0X3VucmVmKSwKLSAg
ICAgICAgJmVycm9yLm91dFB0cigpKTsKLSAgICBpZiAoIXJlZ2lzdHJhdGlvbklEKQotICAgICAg
ICBnX3dhcm5pbmcoIkZhaWxlZCB0byByZWdpc3RlciBvYmplY3Q6ICVzXG4iLCBlcnJvci0+bWVz
c2FnZSk7Ci0KLSAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVCh1c2VyRGF0YSksICJkYnVz
LWNvbm5lY3Rpb24iLCBjb25uZWN0aW9uKTsKLSAgICB3aGlsZSAoZGVsYXllZFNpZ25hbHNRdWV1
ZS5zaXplKCkpIHsKLSAgICAgICAgT3duUHRyPERlbGF5ZWRTaWduYWw+IGRlbGF5ZWRTaWduYWwg
PSBkZWxheWVkU2lnbmFsc1F1ZXVlLnRha2VGaXJzdCgpOwotICAgICAgICBzd2l0Y2ggKGRlbGF5
ZWRTaWduYWwtPnR5cGUpIHsKLSAgICAgICAgY2FzZSBEb2N1bWVudExvYWRlZFNpZ25hbDoKLSAg
ICAgICAgICAgIGVtaXREb2N1bWVudExvYWRlZChjb25uZWN0aW9uKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIFVSSUNoYW5nZWRTaWduYWw6Ci0gICAgICAgICAgICBlbWl0VVJJ
Q2hhbmdlZChjb25uZWN0aW9uLCBkZWxheWVkU2lnbmFsLT51cmkuZGF0YSgpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotfQotCi1leHRlcm4gIkMiIHZvaWQgd2Via2l0
X3dlYl9leHRlbnNpb25faW5pdGlhbGl6ZShXZWJLaXRXZWJFeHRlbnNpb24qIGV4dGVuc2lvbikK
LXsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGV4dGVuc2lvbiwgInBhZ2UtY3JlYXRlZCIsIEdfQ0FM
TEJBQ0socGFnZUNyZWF0ZWRDYWxsYmFjayksIGV4dGVuc2lvbik7Ci0gICAgZ19zaWduYWxfY29u
bmVjdCh3ZWJraXRfc2NyaXB0X3dvcmxkX2dldF9kZWZhdWx0KCksICJ3aW5kb3ctb2JqZWN0LWNs
ZWFyZWQiLCBHX0NBTExCQUNLKHdpbmRvd09iamVjdENsZWFyZWQpLCAwKTsKLQotICAgIGdfYnVz
X293bl9uYW1lKAotICAgICAgICBHX0JVU19UWVBFX1NFU1NJT04sCi0gICAgICAgICJvcmcud2Vi
a2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwKLSAgICAgICAgR19CVVNfTkFNRV9PV05FUl9GTEFH
U19OT05FLAotICAgICAgICBidXNBY3F1aXJlZENhbGxiYWNrLAotICAgICAgICAwLCAwLAotICAg
ICAgICBnX29iamVjdF9yZWYoZXh0ZW5zaW9uKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8R0Rlc3Ry
b3lOb3RpZnk+KGdfb2JqZWN0X3VucmVmKSk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJLaXRUZXN0QnVzLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYktpdFRlc3RCdXMuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA4YzJkM2Y2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYktpdFRlc3RCdXMuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMTA2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYktpdFRlc3RCdXMuaCIKLQotI2luY2x1
ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KLQotV2ViS2l0VGVzdEJ1czo6V2ViS2l0VGVzdEJ1cygpCi0gICAgOiBtX3BpZCgtMSkKLXsK
LX0KLQotYm9vbCBXZWJLaXRUZXN0QnVzOjpydW4oKQotewotICAgIC8vIEZJWE1FOiBVc2UgR1Rl
c3REQnVzIHdoZW4gd2UgYnVtcCBnbGliIHRvIDIuMzQuCi0gICAgR093blB0cjxjaGFyPiBkYnVz
TGF1bmNoKGdfZmluZF9wcm9ncmFtX2luX3BhdGgoImRidXMtbGF1bmNoIikpOwotICAgIGlmICgh
ZGJ1c0xhdW5jaCkgewotICAgICAgICBnX3dhcm5pbmcoIkVycm9yIHN0YXJ0aW5nIERCVVMgZGFl
bW9uOiBkYnVzLWxhdW5jaCBub3QgZm91bmQgaW4gcGF0aCIpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgR093blB0cjxjaGFyPiBvdXRwdXQ7Ci0gICAgR093blB0cjxHRXJy
b3I+IGVycm9yOwotICAgIGlmICghZ19zcGF3bl9jb21tYW5kX2xpbmVfc3luYyhkYnVzTGF1bmNo
LmdldCgpLCAmb3V0cHV0Lm91dFB0cigpLCAwLCAwLCAmZXJyb3Iub3V0UHRyKCkpKSB7Ci0gICAg
ICAgIGdfd2FybmluZygiRXJyb3Igc3RhcnRpbmcgREJVUyBkYWVtb246ICVzIiwgZXJyb3ItPm1l
c3NhZ2UpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgU3RyaW5nIG91dHB1
dFN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgob3V0cHV0LmdldCgpKTsKLSAgICBWZWN0b3I8U3Ry
aW5nPiBsaW5lczsKLSAgICBvdXRwdXRTdHJpbmcuc3BsaXQoVUNoYXIoJ1xuJyksIC8qIGFsbG93
RW1wdHlFbnRyaWVzICovIGZhbHNlLCBsaW5lcyk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBsaW5lcy5zaXplKCk7ICsraSkgewotICAgICAgICBjaGFyKioga2V5VmFsdWUgPSBnX3N0cnNw
bGl0KGxpbmVzW2ldLnV0ZjgoKS5kYXRhKCksICI9IiwgMik7Ci0gICAgICAgIGdfYXNzZXJ0X2Nt
cHVpbnQoZ19zdHJ2X2xlbmd0aChrZXlWYWx1ZSksID09LCAyKTsKLSAgICAgICAgaWYgKCFnX3N0
cmNtcDAoa2V5VmFsdWVbMF0sICJEQlVTX1NFU1NJT05fQlVTX0FERFJFU1MiKSkgewotICAgICAg
ICAgICAgbV9hZGRyZXNzID0ga2V5VmFsdWVbMV07Ci0gICAgICAgICAgICBnX3NldGVudigiREJV
U19TRVNTSU9OX0JVU19BRERSRVNTIiwga2V5VmFsdWVbMV0sIFRSVUUpOwotICAgICAgICB9IGVs
c2UgaWYgKCFnX3N0cmNtcDAoa2V5VmFsdWVbMF0sICJEQlVTX1NFU1NJT05fQlVTX1BJRCIpKQot
ICAgICAgICAgICAgbV9waWQgPSBnX2FzY2lpX3N0cnRvbGwoa2V5VmFsdWVbMV0sIDAsIDEwKTsK
LSAgICAgICAgZ19zdHJmcmVldihrZXlWYWx1ZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1fcGlk
ID4gMDsKLX0KLQotV2ViS2l0VGVzdEJ1czo6fldlYktpdFRlc3RCdXMoKQotewotICAgIGdfdW5z
ZXRlbnYoIkRCVVNfU0VTU0lPTl9CVVNfQUREUkVTUyIpOwotCi0gICAgaWYgKG1fcGlkICE9IC0x
KQotICAgICAgICBraWxsKG1fcGlkLCBTSUdURVJNKTsKLX0KLQotR0RCdXNDb25uZWN0aW9uKiBX
ZWJLaXRUZXN0QnVzOjpnZXRPckNyZWF0ZUNvbm5lY3Rpb24oKQotewotICAgIGlmIChtX2Nvbm5l
Y3Rpb24pCi0gICAgICAgIHJldHVybiBtX2Nvbm5lY3Rpb24uZ2V0KCk7Ci0KLSAgICBnX2Fzc2Vy
dCghbV9hZGRyZXNzLmlzTnVsbCgpKTsKLSAgICBtX2Nvbm5lY3Rpb24gPSBhZG9wdEdSZWYoZ19k
YnVzX2Nvbm5lY3Rpb25fbmV3X2Zvcl9hZGRyZXNzX3N5bmMobV9hZGRyZXNzLmRhdGEoKSwKLSAg
ICAgICAgc3RhdGljX2Nhc3Q8R0RCdXNDb25uZWN0aW9uRmxhZ3M+KEdfREJVU19DT05ORUNUSU9O
X0ZMQUdTX0FVVEhFTlRJQ0FUSU9OX0NMSUVOVCB8IEdfREJVU19DT05ORUNUSU9OX0ZMQUdTX01F
U1NBR0VfQlVTX0NPTk5FQ1RJT04pLAotICAgICAgICAwLCAwLCAwKSk7Ci0gICAgcmV0dXJuIG1f
Y29ubmVjdGlvbi5nZXQoKTsKLX0KLQotc3RhdGljIHZvaWQgb25OYW1lQXBwZWFyZWQoR0RCdXND
b25uZWN0aW9uKiwgY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBncG9pbnRlciB1c2VyRGF0YSkK
LXsKLSAgICBnX21haW5fbG9vcF9xdWl0KHN0YXRpY19jYXN0PEdNYWluTG9vcCo+KHVzZXJEYXRh
KSk7Ci19Ci0KLUdEQnVzUHJveHkqIFdlYktpdFRlc3RCdXM6OmNyZWF0ZVByb3h5KGNvbnN0IGNo
YXIqIHNlcnZpY2VOYW1lLCBjb25zdCBjaGFyKiBvYmplY3RQYXRoLCBjb25zdCBjaGFyKiBpbnRl
cmZhY2VOYW1lLCBHTWFpbkxvb3AqIG1haW5Mb29wKQotewotICAgIHVuc2lnbmVkIHdhdGNoZXJJ
RCA9IGdfYnVzX3dhdGNoX25hbWVfb25fY29ubmVjdGlvbihnZXRPckNyZWF0ZUNvbm5lY3Rpb24o
KSwgc2VydmljZU5hbWUsIEdfQlVTX05BTUVfV0FUQ0hFUl9GTEFHU19OT05FLCBvbk5hbWVBcHBl
YXJlZCwgMCwgbWFpbkxvb3AsIDApOwotICAgIGdfbWFpbl9sb29wX3J1bihtYWluTG9vcCk7Ci0g
ICAgZ19idXNfdW53YXRjaF9uYW1lKHdhdGNoZXJJRCk7Ci0KLSAgICBHREJ1c1Byb3h5KiBwcm94
eSA9IGdfZGJ1c19wcm94eV9uZXdfc3luYygKLSAgICAgICAgY29ubmVjdGlvbigpLAotICAgICAg
ICBHX0RCVVNfUFJPWFlfRkxBR1NfRE9fTk9UX0FVVE9fU1RBUlQsCi0gICAgICAgIDAsIC8vIEdE
QnVzSW50ZXJmYWNlSW5mbwotICAgICAgICBzZXJ2aWNlTmFtZSwKLSAgICAgICAgb2JqZWN0UGF0
aCwKLSAgICAgICAgaW50ZXJmYWNlTmFtZSwKLSAgICAgICAgMCwgLy8gR0NhbmNlbGxhYmxlCi0g
ICAgICAgIDApOwotICAgIGdfYXNzZXJ0KHByb3h5KTsKLSAgICByZXR1cm4gcHJveHk7Ci19CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJLaXRU
ZXN0QnVzLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJLaXRU
ZXN0QnVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5Zjg1NmIuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViS2l0VGVzdEJ1
cy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFdlYktpdFRlc3RCdXNfaAotI2RlZmluZSBXZWJLaXRU
ZXN0QnVzX2gKLQotI2luY2x1ZGUgPGdpby9naW8uaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9H
UmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1jbGFzcyBXZWJLaXRU
ZXN0QnVzIHsKLXB1YmxpYzoKLSAgICBXZWJLaXRUZXN0QnVzKCk7Ci0gICAgdmlydHVhbCB+V2Vi
S2l0VGVzdEJ1cygpOwotCi0gICAgYm9vbCBydW4oKTsKLSAgICBHREJ1c1Byb3h5KiBjcmVhdGVQ
cm94eShjb25zdCBjaGFyKiBzZXJ2aWNlTmFtZSwgY29uc3QgY2hhciogb2JqZWN0UGF0aCwgY29u
c3QgY2hhciogaW50ZXJmYWNlTmFtZSwgR01haW5Mb29wKik7Ci0gICAgR0RCdXNDb25uZWN0aW9u
KiBjb25uZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb25uZWN0aW9uLmdldCgpOyB9Ci0KLXBy
aXZhdGU6Ci0gICAgR0RCdXNDb25uZWN0aW9uKiBnZXRPckNyZWF0ZUNvbm5lY3Rpb24oKTsKLQot
ICAgIHBpZF90IG1fcGlkOwotICAgIENTdHJpbmcgbV9hZGRyZXNzOwotICAgIEdSZWZQdHI8R0RC
dXNDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247Ci19OwotCi0jZW5kaWYgLy8gV2ViS2l0VGVzdEJ1
c19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9X
ZWJLaXRUZXN0U2VydmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL1dlYktpdFRlc3RTZXJ2ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5
OGI0YTlhLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL1dlYktpdFRlc3RTZXJ2ZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0g
KgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0g
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5oIgotCi0jaW5jbHVkZSAiVGVzdE1haW4uaCIK
LSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0KLVdlYktpdFRlc3RTZXJ2ZXI6Oldl
YktpdFRlc3RTZXJ2ZXIoU2VydmVyVHlwZSB0eXBlKQotewotICAgIEdPd25QdHI8Y2hhcj4gc3Ns
Q2VydGlmaWNhdGVGaWxlOwotICAgIEdPd25QdHI8Y2hhcj4gc3NsS2V5RmlsZTsKLSAgICBpZiAo
dHlwZSA9PSBTZXJ2ZXJIVFRQUykgewotICAgICAgICBDU3RyaW5nIHJlc291cmNlc0RpciA9IFRl
c3Q6OmdldFJlc291cmNlc0RpcigpOwotICAgICAgICBzc2xDZXJ0aWZpY2F0ZUZpbGUuc2V0KGdf
YnVpbGRfZmlsZW5hbWUocmVzb3VyY2VzRGlyLmRhdGEoKSwgInRlc3QtY2VydC5wZW0iLCBOVUxM
KSk7Ci0gICAgICAgIHNzbEtleUZpbGUuc2V0KGdfYnVpbGRfZmlsZW5hbWUocmVzb3VyY2VzRGly
LmRhdGEoKSwgInRlc3Qta2V5LnBlbSIsIE5VTEwpKTsKLSAgICB9Ci0KLSAgICBHUmVmUHRyPFNv
dXBBZGRyZXNzPiBhZGRyZXNzID0gYWRvcHRHUmVmKHNvdXBfYWRkcmVzc19uZXcoIjEyNy4wLjAu
MSIsIFNPVVBfQUREUkVTU19BTllfUE9SVCkpOwotICAgIHNvdXBfYWRkcmVzc19yZXNvbHZlX3N5
bmMoYWRkcmVzcy5nZXQoKSwgMCk7Ci0KLSAgICBtX3NvdXBTZXJ2ZXIgPSBhZG9wdEdSZWYoc291
cF9zZXJ2ZXJfbmV3KFNPVVBfU0VSVkVSX0lOVEVSRkFDRSwgYWRkcmVzcy5nZXQoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPVVBfU0VSVkVSX1NTTF9D
RVJUX0ZJTEUsIHNzbENlcnRpZmljYXRlRmlsZS5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFNPVVBfU0VSVkVSX1NTTF9LRVlfRklMRSwgc3NsS2V5
RmlsZS5nZXQoKSwgTlVMTCkpOwotICAgIG1fYmFzZVVSSSA9IHR5cGUgPT0gU2VydmVySFRUUFMg
PyBzb3VwX3VyaV9uZXcoImh0dHBzOi8vMTI3LjAuMC4xLyIpIDogc291cF91cmlfbmV3KCJodHRw
Oi8vMTI3LjAuMC4xLyIpOwotICAgIHNvdXBfdXJpX3NldF9wb3J0KG1fYmFzZVVSSSwgc291cF9z
ZXJ2ZXJfZ2V0X3BvcnQobV9zb3VwU2VydmVyLmdldCgpKSk7Ci19Ci0KLVdlYktpdFRlc3RTZXJ2
ZXI6On5XZWJLaXRUZXN0U2VydmVyKCkKLXsKLSAgICBzb3VwX3VyaV9mcmVlKG1fYmFzZVVSSSk7
Ci19Ci0KLXZvaWQgV2ViS2l0VGVzdFNlcnZlcjo6cnVuKFNvdXBTZXJ2ZXJDYWxsYmFjayBzZXJ2
ZXJDYWxsYmFjaykKLXsKLSAgICBzb3VwX3NlcnZlcl9ydW5fYXN5bmMobV9zb3VwU2VydmVyLmdl
dCgpKTsKLSAgICBzb3VwX3NlcnZlcl9hZGRfaGFuZGxlcihtX3NvdXBTZXJ2ZXIuZ2V0KCksIDAs
IHNlcnZlckNhbGxiYWNrLCAwLCAwKTsKLX0KLQotQ1N0cmluZyBXZWJLaXRUZXN0U2VydmVyOjpn
ZXRVUklGb3JQYXRoKGNvbnN0IGNoYXIqIHBhdGgpCi17Ci0gICAgU291cFVSSSogdXJpID0gc291
cF91cmlfbmV3X3dpdGhfYmFzZShtX2Jhc2VVUkksIHBhdGgpOwotICAgIEdPd25QdHI8Z2NoYXI+
IHVyaVN0cmluZyhzb3VwX3VyaV90b19zdHJpbmcodXJpLCBGQUxTRSkpOwotICAgIHNvdXBfdXJp
X2ZyZWUodXJpKTsKLSAgICByZXR1cm4gdXJpU3RyaW5nLmdldCgpOwotfQotCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJLaXRUZXN0U2VydmVy
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJLaXRUZXN0U2Vy
dmVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0NjI2ZjYuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViS2l0VGVzdFNlcnZl
ci5oCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFdlYktpdFRlc3RTZXJ2ZXJfaAotI2RlZmluZSBXZWJL
aXRUZXN0U2VydmVyX2gKLQotI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgotI2luY2x1ZGUgPHdl
YmtpdDIvd2Via2l0Mi5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLWNsYXNzIFdlYktpdFRlc3RTZXJ2ZXIgewotcHVi
bGljOgotCi0gICAgZW51bSBTZXJ2ZXJUeXBlIHsKLSAgICAgICAgU2VydmVySFRUUCwKLSAgICAg
ICAgU2VydmVySFRUUFMKLSAgICB9OwotCi0gICAgV2ViS2l0VGVzdFNlcnZlcihTZXJ2ZXJUeXBl
IHR5cGUgPSBTZXJ2ZXJIVFRQKTsKLSAgICB2aXJ0dWFsIH5XZWJLaXRUZXN0U2VydmVyKCk7Ci0K
LSAgICBTb3VwVVJJKiBiYXNlVVJJKCkgeyByZXR1cm4gbV9iYXNlVVJJOyB9Ci0KLSAgICBDU3Ry
aW5nIGdldFVSSUZvclBhdGgoY29uc3QgY2hhciogcGF0aCk7Ci0gICAgdm9pZCBydW4oU291cFNl
cnZlckNhbGxiYWNrKTsKLQotcHJpdmF0ZToKLSAgICBHUmVmUHRyPFNvdXBTZXJ2ZXI+IG1fc291
cFNlcnZlcjsKLSAgICBTb3VwVVJJKiBtX2Jhc2VVUkk7Ci19OwotCi0jZW5kaWYgLy8gV2ViS2l0
VGVzdFNlcnZlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9XZWJQcm9jZXNzVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9XZWJQcm9jZXNzVGVzdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGQ5MWE2ZTcuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvV2ViUHJvY2Vzc1Rlc3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NUZXN0LmgiCi0KLSNpbmNsdWRlIDxnaW8vZ2lvLmg+
Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgotCi10eXBlZGVmIEhhc2hNYXA8U3Ry
aW5nLCBzdGQ6OmZ1bmN0aW9uPFBhc3NPd25QdHI8V2ViUHJvY2Vzc1Rlc3Q+ICgpPj4gVGVzdHNN
YXA7Ci1zdGF0aWMgVGVzdHNNYXAmIHRlc3RzTWFwKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKFRlc3RzTWFwLCBzX3Rlc3RzTWFwLCAoKSk7Ci0gICAgcmV0dXJuIHNfdGVzdHNNYXA7Ci19
Ci0KLXZvaWQgV2ViUHJvY2Vzc1Rlc3Q6OmFkZChjb25zdCBTdHJpbmcmIHRlc3ROYW1lLCBzdGQ6
OmZ1bmN0aW9uPFBhc3NPd25QdHI8V2ViUHJvY2Vzc1Rlc3Q+ICgpPiBjbG9zdXJlKQotewotICAg
IHRlc3RzTWFwKCkuYWRkKHRlc3ROYW1lLCBzdGQ6OmZvcndhcmQ8c3RkOjpmdW5jdGlvbjxQYXNz
T3duUHRyPFdlYlByb2Nlc3NUZXN0PiAoKT4+KGNsb3N1cmUpKTsKLX0KLQotUGFzc093blB0cjxX
ZWJQcm9jZXNzVGVzdD4gV2ViUHJvY2Vzc1Rlc3Q6OmNyZWF0ZShjb25zdCBTdHJpbmcmIHRlc3RO
YW1lKQotewotICAgIGdfYXNzZXJ0KHRlc3RzTWFwKCkuY29udGFpbnModGVzdE5hbWUpKTsKLSAg
ICByZXR1cm4gdGVzdHNNYXAoKS5nZXQodGVzdE5hbWUpKCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBj
aGFyIGludHJvc3BlY3Rpb25YTUxbXSA9Ci0gICAgIjxub2RlPiIKLSAgICAiIDxpbnRlcmZhY2Ug
bmFtZT0nb3JnLndlYmtpdC5ndGsuV2ViUHJvY2Vzc1Rlc3QnPiIKLSAgICAiICA8bWV0aG9kIG5h
bWU9J1J1blRlc3QnPiIKLSAgICAiICAgPGFyZyB0eXBlPSdzJyBuYW1lPSdwYXRoJyBkaXJlY3Rp
b249J2luJy8+IgotICAgICIgICA8YXJnIHR5cGU9J2F7c3Z9JyBuYW1lPSdhcmdzJyBkaXJlY3Rp
b249J2luJy8+IgotICAgICIgICA8YXJnIHR5cGU9J2InIG5hbWU9J3Jlc3VsdCcgZGlyZWN0aW9u
PSdvdXQnLz4iCi0gICAgIiAgPC9tZXRob2Q+IgotICAgICIgPC9pbnRlcmZhY2U+IgotICAgICI8
L25vZGU+IjsKLQotc3RhdGljIHZvaWQgbWV0aG9kQ2FsbENhbGxiYWNrKEdEQnVzQ29ubmVjdGlv
biogY29ubmVjdGlvbiwgY29uc3QgY2hhciogc2VuZGVyLCBjb25zdCBjaGFyKiBvYmplY3RQYXRo
LCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBtZXRob2ROYW1lLCBHVmFy
aWFudCogcGFyYW1ldGVycywgR0RCdXNNZXRob2RJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBncG9p
bnRlciB1c2VyRGF0YSkKLXsKLSAgICBpZiAoZ19zdHJjbXAwKGludGVyZmFjZU5hbWUsICJvcmcu
d2Via2l0Lmd0ay5XZWJQcm9jZXNzVGVzdCIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
IWdfc3RyY21wMChtZXRob2ROYW1lLCAiUnVuVGVzdCIpKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIq
IHRlc3RQYXRoOwotICAgICAgICBHVmFyaWFudCogYXJnczsKLSAgICAgICAgZ192YXJpYW50X2dl
dChwYXJhbWV0ZXJzLCAiKCZzQGF7c3Z9KSIsICZ0ZXN0UGF0aCwgJmFyZ3MpOwotICAgICAgICBP
d25QdHI8V2ViUHJvY2Vzc1Rlc3Q+IHRlc3QgPSBXZWJQcm9jZXNzVGVzdDo6Y3JlYXRlKFN0cmlu
Zzo6ZnJvbVVURjgodGVzdFBhdGgpKTsKLSAgICAgICAgYm9vbCByZXN1bHQgPSB0ZXN0LT5ydW5U
ZXN0KGdfc3RycnN0cih0ZXN0UGF0aCwgIi8iKSArIDEsIFdFQktJVF9XRUJfRVhURU5TSU9OKHVz
ZXJEYXRhKSwgYXJncyk7Ci0gICAgICAgIGdfdmFyaWFudF91bnJlZihhcmdzKTsKLQotICAgICAg
ICBnX2RidXNfbWV0aG9kX2ludm9jYXRpb25fcmV0dXJuX3ZhbHVlKGludm9jYXRpb24sIGdfdmFy
aWFudF9uZXcoIihiKSIsIHJlc3VsdCkpOwotICAgIH0gZWxzZQotICAgICAgICBnX2Fzc2VydF9u
b3RfcmVhY2hlZCgpOwotfQotCi1zdGF0aWMgY29uc3QgR0RCdXNJbnRlcmZhY2VWVGFibGUgaW50
ZXJmYWNlVmlydHVhbFRhYmxlID0gewotICAgIG1ldGhvZENhbGxDYWxsYmFjaywgMCwgMCwgeyAw
LCB9Ci19OwotCi1zdGF0aWMgdm9pZCBidXNBY3F1aXJlZENhbGxiYWNrKEdEQnVzQ29ubmVjdGlv
biogY29ubmVjdGlvbiwgY29uc3QgY2hhciogbmFtZSwgZ3BvaW50ZXIgdXNlckRhdGEpCi17Ci0g
ICAgc3RhdGljIEdEQnVzTm9kZUluZm8gKmludHJvc3BlY3Rpb25EYXRhID0gMDsKLSAgICBpZiAo
IWludHJvc3BlY3Rpb25EYXRhKQotICAgICAgICBpbnRyb3NwZWN0aW9uRGF0YSA9IGdfZGJ1c19u
b2RlX2luZm9fbmV3X2Zvcl94bWwoaW50cm9zcGVjdGlvblhNTCwgMCk7Ci0KLSAgICBHT3duUHRy
PEdFcnJvcj4gZXJyb3I7Ci0gICAgdW5zaWduZWQgcmVnaXN0cmF0aW9uSUQgPSBnX2RidXNfY29u
bmVjdGlvbl9yZWdpc3Rlcl9vYmplY3QoCi0gICAgICAgIGNvbm5lY3Rpb24sCi0gICAgICAgICIv
b3JnL3dlYmtpdC9ndGsvV2ViUHJvY2Vzc1Rlc3QiLAotICAgICAgICBpbnRyb3NwZWN0aW9uRGF0
YS0+aW50ZXJmYWNlc1swXSwKLSAgICAgICAgJmludGVyZmFjZVZpcnR1YWxUYWJsZSwKLSAgICAg
ICAgZ19vYmplY3RfcmVmKHVzZXJEYXRhKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8R0Rlc3Ryb3lO
b3RpZnk+KGdfb2JqZWN0X3VucmVmKSwKLSAgICAgICAgJmVycm9yLm91dFB0cigpKTsKLSAgICBp
ZiAoIXJlZ2lzdHJhdGlvbklEKQotICAgICAgICBnX3dhcm5pbmcoIkZhaWxlZCB0byByZWdpc3Rl
ciBvYmplY3Q6ICVzXG4iLCBlcnJvci0+bWVzc2FnZSk7Ci19Ci0KLWV4dGVybiAiQyIgdm9pZCB3
ZWJraXRfd2ViX2V4dGVuc2lvbl9pbml0aWFsaXplKFdlYktpdFdlYkV4dGVuc2lvbiogZXh0ZW5z
aW9uKQotewotICAgIGdfYnVzX293bl9uYW1lKAotICAgICAgICBHX0JVU19UWVBFX1NFU1NJT04s
Ci0gICAgICAgICJvcmcud2Via2l0Lmd0ay5XZWJQcm9jZXNzVGVzdCIsCi0gICAgICAgIEdfQlVT
X05BTUVfT1dORVJfRkxBR1NfTk9ORSwKLSAgICAgICAgYnVzQWNxdWlyZWRDYWxsYmFjaywKLSAg
ICAgICAgMCwgMCwKLSAgICAgICAgZ19vYmplY3RfcmVmKGV4dGVuc2lvbiksCi0gICAgICAgIHN0
YXRpY19jYXN0PEdEZXN0cm95Tm90aWZ5PihnX29iamVjdF91bnJlZikpOwotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViUHJvY2Vzc1Rlc3Qu
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlByb2Nlc3NUZXN0
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzZWVkZDAuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViUHJvY2Vzc1Rlc3QuaAor
KysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
SWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKi8KLQotI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0LXdlYi1leHRlbnNpb24uaD4KLSNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5j
bHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hh
c2guaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotY2xhc3MgV2ViUHJvY2Vz
c1Rlc3QgewotcHVibGljOgotICAgIHZpcnR1YWwgfldlYlByb2Nlc3NUZXN0KCkgeyB9Ci0gICAg
dmlydHVhbCBib29sIHJ1blRlc3QoY29uc3QgY2hhciogdGVzdE5hbWUsIFdlYktpdFdlYkV4dGVu
c2lvbiosIEdWYXJpYW50KiBhcmdzKSA9IDA7Ci0KLSAgICBzdGF0aWMgdm9pZCBhZGQoY29uc3Qg
U3RyaW5nJiB0ZXN0TmFtZSwgc3RkOjpmdW5jdGlvbjxQYXNzT3duUHRyPFdlYlByb2Nlc3NUZXN0
PiAoKT4pOwotICAgIHN0YXRpYyBQYXNzT3duUHRyPFdlYlByb2Nlc3NUZXN0PiBjcmVhdGUoY29u
c3QgU3RyaW5nJiB0ZXN0TmFtZSk7Ci19OwotCi0jZGVmaW5lIFJFR0lTVEVSX1RFU1QoQ2xhc3NO
YW1lLCBUZXN0TmFtZSkgXAotICAgIFdlYlByb2Nlc3NUZXN0OjphZGQoU3RyaW5nOjpmcm9tVVRG
OChUZXN0TmFtZSksIENsYXNzTmFtZTo6Y3JlYXRlKQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJQcm9jZXNzVGVzdFJ1bm5lci5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJQcm9jZXNzVGVzdFJ1bm5l
ci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhM2NkOTYuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViUHJvY2Vzc1Rlc3RS
dW5uZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldl
YlByb2Nlc3NUZXN0UnVubmVyLmgiCi0KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+
Ci0KLVdlYlByb2Nlc3NUZXN0UnVubmVyOjpXZWJQcm9jZXNzVGVzdFJ1bm5lcigpCi0gICAgOiBt
X21haW5Mb29wKGdfbWFpbl9sb29wX25ldygwLCBUUlVFKSkKLSAgICAsIG1fYnVzKGFkb3B0R1Jl
ZihnX3Rlc3RfZGJ1c19uZXcoR19URVNUX0RCVVNfTk9ORSkpKQotewotICAgIC8vIFNhdmUgdGhl
IERJU1BMQVkgZW52IHZhciB0byByZXN0b3JlIGl0IGFmdGVyIGNhbGxpbmcgZ190ZXN0X2RidXNf
dXAoKSB0aGF0IHVuc2V0cyBpdC4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEyNTYyMS4KLSAgICBjb25zdCBjaGFyKiBkaXNwbGF5ID0gZ19nZXRl
bnYoIkRJU1BMQVkiKTsKLSAgICBnX3Rlc3RfZGJ1c191cChtX2J1cy5nZXQoKSk7Ci0gICAgZ19z
ZXRlbnYoIkRJU1BMQVkiLCBkaXNwbGF5LCBGQUxTRSk7Ci0gICAgbV9jb25uZWN0aW9uID0gYWRv
cHRHUmVmKGdfYnVzX2dldF9zeW5jKEdfQlVTX1RZUEVfU0VTU0lPTiwgMCwgMCkpOwotfQotCi1X
ZWJQcm9jZXNzVGVzdFJ1bm5lcjo6fldlYlByb2Nlc3NUZXN0UnVubmVyKCkKLXsKLSAgICBnX21h
aW5fbG9vcF91bnJlZihtX21haW5Mb29wKTsKLQotICAgIC8vIGdfdGVzdF9kYnVzX2Rvd24gd2Fp
dHMgdW50aWwgdGhlIGNvbm5lY3Rpb24gaXMgZnJlZWQsIHNvIHJlbGVhc2Ugb3VyIHJlZnMgZXhw
bGljaXRseSBiZWZvcmUgY2FsbGluZyBpdC4KLSAgICBtX2Nvbm5lY3Rpb24gPSAwOwotICAgIG1f
cHJveHkgPSAwOwotICAgIGdfdGVzdF9kYnVzX2Rvd24obV9idXMuZ2V0KCkpOwotfQotCi12b2lk
IFdlYlByb2Nlc3NUZXN0UnVubmVyOjpwcm94eUNyZWF0ZWRDYWxsYmFjayhHT2JqZWN0KiwgR0Fz
eW5jUmVzdWx0KiByZXN1bHQsIFdlYlByb2Nlc3NUZXN0UnVubmVyKiB0ZXN0UnVubmVyKQotewot
ICAgIHRlc3RSdW5uZXItPm1fcHJveHkgPSBhZG9wdEdSZWYoZ19kYnVzX3Byb3h5X25ld19maW5p
c2gocmVzdWx0LCAwKSk7Ci0gICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0UnVubmVyLT5tX21haW5M
b29wKTsKLX0KLQotR0RCdXNQcm94eSogV2ViUHJvY2Vzc1Rlc3RSdW5uZXI6OnByb3h5KCkKLXsK
LSAgICBpZiAobV9wcm94eSkKLSAgICAgICAgcmV0dXJuIG1fcHJveHkuZ2V0KCk7Ci0KLSAgICBn
X2RidXNfcHJveHlfbmV3KG1fY29ubmVjdGlvbi5nZXQoKSwgR19EQlVTX1BST1hZX0ZMQUdTX0RP
X05PVF9BVVRPX1NUQVJULCAwLAotICAgICAgICAib3JnLndlYmtpdC5ndGsuV2ViUHJvY2Vzc1Rl
c3QiLCAiL29yZy93ZWJraXQvZ3RrL1dlYlByb2Nlc3NUZXN0IiwgIm9yZy53ZWJraXQuZ3RrLldl
YlByb2Nlc3NUZXN0IiwKLSAgICAgICAgMCwgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNh
bGxiYWNrPihXZWJQcm9jZXNzVGVzdFJ1bm5lcjo6cHJveHlDcmVhdGVkQ2FsbGJhY2spLCB0aGlz
KTsKLSAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Ci0gICAgZ19hc3NlcnQobV9wcm94
eS5nZXQoKSk7Ci0KLSAgICByZXR1cm4gbV9wcm94eS5nZXQoKTsKLX0KLQotdm9pZCBXZWJQcm9j
ZXNzVGVzdFJ1bm5lcjo6b25OYW1lQXBwZWFyZWQoR0RCdXNDb25uZWN0aW9uKiwgY29uc3QgY2hh
ciosIGNvbnN0IGNoYXIqLCBncG9pbnRlciB1c2VyRGF0YSkKLXsKLSAgICBXZWJQcm9jZXNzVGVz
dFJ1bm5lciogdGVzdFJ1bm5lciA9IHN0YXRpY19jYXN0PFdlYlByb2Nlc3NUZXN0UnVubmVyKj4o
dXNlckRhdGEpOwotICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdFJ1bm5lci0+bV9tYWluTG9vcCk7
Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Rlc3RSdW5uZXI6Om9uTmFtZVZhbmlzaGVkKEdEQnVzQ29u
bmVjdGlvbiosIGNvbnN0IGNoYXIqIG5hbWUsIGdwb2ludGVyIHVzZXJEYXRhKQotewotICAgIF9l
eGl0KDEpOwotfQotCi12b2lkIFdlYlByb2Nlc3NUZXN0UnVubmVyOjp0ZXN0RmluaXNoZWRDYWxs
YmFjayhHREJ1c1Byb3h5KiBwcm94eSwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIFdlYlByb2Nlc3NU
ZXN0UnVubmVyKiB0ZXN0UnVubmVyKQotewotICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHJldHVyblZh
bHVlID0gYWRvcHRHUmVmKGdfZGJ1c19wcm94eV9jYWxsX2ZpbmlzaChwcm94eSwgcmVzdWx0LCAw
KSk7Ci0gICAgZ19hc3NlcnQocmV0dXJuVmFsdWUuZ2V0KCkpOwotICAgIGdib29sZWFuIHRlc3RS
ZXN1bHQ7Ci0gICAgZ192YXJpYW50X2dldChyZXR1cm5WYWx1ZS5nZXQoKSwgIihiKSIsICZ0ZXN0
UmVzdWx0KTsKLSAgICB0ZXN0UnVubmVyLT5maW5pc2hUZXN0KHRlc3RSZXN1bHQpOwotfQotCi1i
b29sIFdlYlByb2Nlc3NUZXN0UnVubmVyOjpydW5UZXN0KGNvbnN0IGNoYXIqIHN1aXRlTmFtZSwg
Y29uc3QgY2hhciogdGVzdE5hbWUsIEdWYXJpYW50KiBhcmdzKQotewotICAgIGdfYXNzZXJ0KGdf
dmFyaWFudF9pc19vZl90eXBlKGFyZ3MsIEdfVkFSSUFOVF9UWVBFX1ZBUkRJQ1QpKTsKLQotICAg
IHVuc2lnbmVkIHdhdGNoZXJJRCA9IGdfYnVzX3dhdGNoX25hbWVfb25fY29ubmVjdGlvbihtX2Nv
bm5lY3Rpb24uZ2V0KCksICJvcmcud2Via2l0Lmd0ay5XZWJQcm9jZXNzVGVzdCIsIEdfQlVTX05B
TUVfV0FUQ0hFUl9GTEFHU19OT05FLAotICAgICAgICBXZWJQcm9jZXNzVGVzdFJ1bm5lcjo6b25O
YW1lQXBwZWFyZWQsIFdlYlByb2Nlc3NUZXN0UnVubmVyOjpvbk5hbWVWYW5pc2hlZCwgdGhpcywg
MCk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotCi0gICAgbV90ZXN0UmVzdWx0
ID0gZmFsc2U7Ci0gICAgR093blB0cjxjaGFyPiB0ZXN0UGF0aChnX3N0cmR1cF9wcmludGYoIiVz
LyVzIiwgc3VpdGVOYW1lLCB0ZXN0TmFtZSkpOwotICAgIGdfZGJ1c19wcm94eV9jYWxsKAotICAg
ICAgICBwcm94eSgpLAotICAgICAgICAiUnVuVGVzdCIsCi0gICAgICAgIGdfdmFyaWFudF9uZXco
IihzQGF7c3Z9KSIsIHRlc3RQYXRoLmdldCgpLCBhcmdzKSwKLSAgICAgICAgR19EQlVTX0NBTExf
RkxBR1NfTk9ORSwKLSAgICAgICAgLTEsIDAsCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0Fz
eW5jUmVhZHlDYWxsYmFjaz4oV2ViUHJvY2Vzc1Rlc3RSdW5uZXI6OnRlc3RGaW5pc2hlZENhbGxi
YWNrKSwKLSAgICAgICAgdGhpcyk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwot
ICAgIGdfYnVzX3Vud2F0Y2hfbmFtZSh3YXRjaGVySUQpOwotCi0gICAgcmV0dXJuIG1fdGVzdFJl
c3VsdDsKLX0KLQotdm9pZCBXZWJQcm9jZXNzVGVzdFJ1bm5lcjo6ZmluaXNoVGVzdChib29sIHJl
c3VsdCkKLXsKLSAgICBtX3Rlc3RSZXN1bHQgPSByZXN1bHQ7Ci0gICAgZ19tYWluX2xvb3BfcXVp
dChtX21haW5Mb29wKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL1dlYlByb2Nlc3NUZXN0UnVubmVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJQcm9jZXNzVGVzdFJ1bm5lci5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBjNDBmYTk2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlByb2Nlc3NUZXN0UnVubmVyLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw1MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwu
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0K
LSNpZm5kZWYgV2ViUHJvY2Vzc1Rlc3RSdW5uZXJfaAotI2RlZmluZSBXZWJQcm9jZXNzVGVzdFJ1
bm5lcl9oCi0KLSNpbmNsdWRlIDxnaW8vZ2lvLmg+Ci0jaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQy
Lmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgotCi1jbGFzcyBXZWJQcm9jZXNz
VGVzdFJ1bm5lciB7Ci1wdWJsaWM6Ci0gICAgV2ViUHJvY2Vzc1Rlc3RSdW5uZXIoKTsKLSAgICB+
V2ViUHJvY2Vzc1Rlc3RSdW5uZXIoKTsKLQotICAgIGJvb2wgcnVuVGVzdChjb25zdCBjaGFyKiBz
dWl0ZU5hbWUsIGNvbnN0IGNoYXIqIHRlc3ROYW1lLCBHVmFyaWFudCogYXJncyk7Ci0KLXByaXZh
dGU6Ci0gICAgc3RhdGljIHZvaWQgcHJveHlDcmVhdGVkQ2FsbGJhY2soR09iamVjdCosIEdBc3lu
Y1Jlc3VsdCosIFdlYlByb2Nlc3NUZXN0UnVubmVyKik7Ci0gICAgc3RhdGljIHZvaWQgb25OYW1l
QXBwZWFyZWQoR0RCdXNDb25uZWN0aW9uKiwgY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBncG9p
bnRlcik7Ci0gICAgc3RhdGljIHZvaWQgb25OYW1lVmFuaXNoZWQoR0RCdXNDb25uZWN0aW9uKiwg
Y29uc3QgY2hhciosIGdwb2ludGVyKTsKLSAgICBzdGF0aWMgdm9pZCB0ZXN0RmluaXNoZWRDYWxs
YmFjayhHREJ1c1Byb3h5KiwgR0FzeW5jUmVzdWx0KiwgV2ViUHJvY2Vzc1Rlc3RSdW5uZXIqKTsK
LQotICAgIEdEQnVzUHJveHkqIHByb3h5KCk7Ci0gICAgdm9pZCBmaW5pc2hUZXN0KGJvb2wgcmVz
dWx0KTsKLQotICAgIEdNYWluTG9vcCogbV9tYWluTG9vcDsKLSAgICBHUmVmUHRyPEdUZXN0REJ1
cz4gbV9idXM7Ci0gICAgR1JlZlB0cjxHREJ1c0Nvbm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKLSAg
ICBHUmVmUHRyPEdEQnVzUHJveHk+IG1fcHJveHk7Ci0gICAgYm9vbCBtX3Rlc3RSZXN1bHQ7Ci19
OwotCi0jZW5kaWYgLy8gV2ViUHJvY2Vzc1Rlc3RSdW5uZXJfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmM4NDM0Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDQ0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwu
Ci0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTEgTW90b3JvbGEgTW9iaWxpdHksIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJW
aWV3VGVzdC5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL0dPd25QdHJHdGsuaD4KLQotV2ViVmlld1Rlc3Q6OldlYlZpZXdUZXN0
KCkKLSAgICA6IG1fd2ViVmlldyhXRUJLSVRfV0VCX1ZJRVcoZ19vYmplY3RfcmVmX3Npbmsod2Vi
a2l0X3dlYl92aWV3X25ldygpKSkpCi0gICAgLCBtX21haW5Mb29wKGdfbWFpbl9sb29wX25ldygw
LCBUUlVFKSkKLSAgICAsIG1fcGFyZW50V2luZG93KDApCi0gICAgLCBtX2phdmFzY3JpcHRSZXN1
bHQoMCkKLSAgICAsIG1fcmVzb3VyY2VEYXRhU2l6ZSgwKQotICAgICwgbV9zdXJmYWNlKDApCi17
Ci0gICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChtX3dl
YlZpZXcpKTsKLX0KLQotV2ViVmlld1Rlc3Q6On5XZWJWaWV3VGVzdCgpCi17Ci0gICAgaWYgKG1f
cGFyZW50V2luZG93KQotICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV9wYXJlbnRXaW5kb3cp
OwotICAgIGlmIChtX2phdmFzY3JpcHRSZXN1bHQpCi0gICAgICAgIHdlYmtpdF9qYXZhc2NyaXB0
X3Jlc3VsdF91bnJlZihtX2phdmFzY3JpcHRSZXN1bHQpOwotICAgIGlmIChtX3N1cmZhY2UpCi0g
ICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShtX3N1cmZhY2UpOwotICAgIGdfb2JqZWN0X3Vu
cmVmKG1fd2ViVmlldyk7Ci0gICAgZ19tYWluX2xvb3BfdW5yZWYobV9tYWluTG9vcCk7Ci19Ci0K
LXZvaWQgV2ViVmlld1Rlc3Q6OmxvYWRVUkkoY29uc3QgY2hhciogdXJpKQotewotICAgIG1fYWN0
aXZlVVJJID0gdXJpOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaShtX3dlYlZpZXcsIHVy
aSk7Ci19Ci0KLXZvaWQgV2ViVmlld1Rlc3Q6OmxvYWRIdG1sKGNvbnN0IGNoYXIqIGh0bWwsIGNv
bnN0IGNoYXIqIGJhc2VVUkkpCi17Ci0gICAgaWYgKCFiYXNlVVJJKQotICAgICAgICBtX2FjdGl2
ZVVSSSA9ICJhYm91dDpibGFuayI7Ci0gICAgZWxzZQotICAgICAgICBtX2FjdGl2ZVVSSSA9IGJh
c2VVUkk7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfaHRtbChtX3dlYlZpZXcsIGh0bWwsIGJh
c2VVUkkpOwotfQotCi12b2lkIFdlYlZpZXdUZXN0Ojpsb2FkUGxhaW5UZXh0KGNvbnN0IGNoYXIq
IHBsYWluVGV4dCkKLXsKLSAgICBtX2FjdGl2ZVVSSSA9ICJhYm91dDpibGFuayI7Ci0gICAgd2Vi
a2l0X3dlYl92aWV3X2xvYWRfcGxhaW5fdGV4dChtX3dlYlZpZXcsIHBsYWluVGV4dCk7Ci19Ci0K
LXZvaWQgV2ViVmlld1Rlc3Q6OmxvYWRSZXF1ZXN0KFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3Qp
Ci17Ci0gICAgbV9hY3RpdmVVUkkgPSB3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0
KTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9yZXF1ZXN0KG1fd2ViVmlldywgcmVxdWVzdCk7
Ci19Ci0KLXZvaWQgV2ViVmlld1Rlc3Q6OmxvYWRBbHRlcm5hdGVIVE1MKGNvbnN0IGNoYXIqIGh0
bWwsIGNvbnN0IGNoYXIqIGNvbnRlbnRVUkksIGNvbnN0IGNoYXIqIGJhc2VVUkkpCi17Ci0gICAg
bV9hY3RpdmVVUkkgPSBjb250ZW50VVJJOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX2FsdGVy
bmF0ZV9odG1sKG1fd2ViVmlldywgaHRtbCwgY29udGVudFVSSSwgYmFzZVVSSSk7Ci19Ci0KLXZv
aWQgV2ViVmlld1Rlc3Q6OmdvQmFjaygpCi17Ci0gICAgaWYgKHdlYmtpdF93ZWJfdmlld19jYW5f
Z29fYmFjayhtX3dlYlZpZXcpKSB7Ci0gICAgICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdCogbGlz
dCA9IHdlYmtpdF93ZWJfdmlld19nZXRfYmFja19mb3J3YXJkX2xpc3QobV93ZWJWaWV3KTsKLSAg
ICAgICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSogaXRlbSA9IHdlYmtpdF9iYWNrX2Zvcndh
cmRfbGlzdF9nZXRfbnRoX2l0ZW0obGlzdCwgLTEpOwotICAgICAgICBtX2FjdGl2ZVVSSSA9IHdl
YmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dldF9vcmlnaW5hbF91cmkoaXRlbSk7Ci0gICAg
fQotCi0gICAgLy8gQ2FsbCBnb19iYWNrIGV2ZW4gd2hlbiBjYW5fZ29fYmFjayByZXR1cm5zIEZB
TFNFIHRvIGNoZWNrIG5vdGhpbmcgaGFwcGVucy4KLSAgICB3ZWJraXRfd2ViX3ZpZXdfZ29fYmFj
ayhtX3dlYlZpZXcpOwotfQotCi12b2lkIFdlYlZpZXdUZXN0Ojpnb0ZvcndhcmQoKQotewotICAg
IGlmICh3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQobV93ZWJWaWV3KSkgewotICAgICAg
ICBXZWJLaXRCYWNrRm9yd2FyZExpc3QqIGxpc3QgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2JhY2tf
Zm9yd2FyZF9saXN0KG1fd2ViVmlldyk7Ci0gICAgICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0
ZW0qIGl0ZW0gPSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X250aF9pdGVtKGxpc3QsIDEp
OwotICAgICAgICBtX2FjdGl2ZVVSSSA9IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dl
dF9vcmlnaW5hbF91cmkoaXRlbSk7Ci0gICAgfQotCi0gICAgLy8gQ2FsbCBnb19mb3J3YXJkIGV2
ZW4gd2hlbiBjYW5fZ29fZm9yd2FyZCByZXR1cm5zIEZBTFNFIHRvIGNoZWNrIG5vdGhpbmcgaGFw
cGVucy4KLSAgICB3ZWJraXRfd2ViX3ZpZXdfZ29fZm9yd2FyZChtX3dlYlZpZXcpOwotfQotCi12
b2lkIFdlYlZpZXdUZXN0Ojpnb1RvQmFja0ZvcndhcmRMaXN0SXRlbShXZWJLaXRCYWNrRm9yd2Fy
ZExpc3RJdGVtKiBpdGVtKQotewotICAgIG1fYWN0aXZlVVJJID0gd2Via2l0X2JhY2tfZm9yd2Fy
ZF9saXN0X2l0ZW1fZ2V0X29yaWdpbmFsX3VyaShpdGVtKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdf
Z29fdG9fYmFja19mb3J3YXJkX2xpc3RfaXRlbShtX3dlYlZpZXcsIGl0ZW0pOwotfQotCi12b2lk
IFdlYlZpZXdUZXN0OjpxdWl0TWFpbkxvb3AoKQotewotICAgIGdfbWFpbl9sb29wX3F1aXQobV9t
YWluTG9vcCk7Ci19Ci0KLXZvaWQgV2ViVmlld1Rlc3Q6OnF1aXRNYWluTG9vcEFmdGVyUHJvY2Vz
c2luZ1BlbmRpbmdFdmVudHMoKQotewotICAgIHdoaWxlIChndGtfZXZlbnRzX3BlbmRpbmcoKSkK
LSAgICAgICAgZ3RrX21haW5faXRlcmF0aW9uKCk7Ci0gICAgcXVpdE1haW5Mb29wKCk7Ci19Ci0K
LXN0YXRpYyBnYm9vbGVhbiBxdWl0TWFpbkxvb3BJZGxlQ2FsbGJhY2soV2ViVmlld1Rlc3QqIHRl
c3QpCi17Ci0gICAgdGVzdC0+cXVpdE1haW5Mb29wKCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQot
Ci12b2lkIFdlYlZpZXdUZXN0Ojp3YWl0KGRvdWJsZSBzZWNvbmRzKQotewotICAgIGdfdGltZW91
dF9hZGRfc2Vjb25kcyhzZWNvbmRzLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihxdWl0
TWFpbkxvb3BJZGxlQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX21haW5fbG9vcF9ydW4obV9tYWlu
TG9vcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGxvYWRDaGFuZ2VkKFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcsIFdlYktpdExvYWRFdmVudCBsb2FkRXZlbnQsIFdlYlZpZXdUZXN0KiB0ZXN0KQotewotICAg
IGlmIChsb2FkRXZlbnQgIT0gV0VCS0lUX0xPQURfRklOSVNIRUQpCi0gICAgICAgIHJldHVybjsK
LSAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMod2ViVmlldywgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4obG9hZENoYW5nZWQpLCB0ZXN0KTsKLSAgICBnX21haW5fbG9vcF9x
dWl0KHRlc3QtPm1fbWFpbkxvb3ApOwotfQotCi12b2lkIFdlYlZpZXdUZXN0Ojp3YWl0VW50aWxM
b2FkRmluaXNoZWQoKQotewotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAibG9hZC1j
aGFuZ2VkIiwgR19DQUxMQkFDSyhsb2FkQ2hhbmdlZCksIHRoaXMpOwotICAgIGdfbWFpbl9sb29w
X3J1bihtX21haW5Mb29wKTsKLX0KLQotc3RhdGljIHZvaWQgdGl0bGVDaGFuZ2VkKFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcsIEdQYXJhbVNwZWMqLCBXZWJWaWV3VGVzdCogdGVzdCkKLXsKLSAgICBp
ZiAoIXRlc3QtPm1fZXhwZWN0ZWRUaXRsZS5pc051bGwoKSAmJiB0ZXN0LT5tX2V4cGVjdGVkVGl0
bGUgIT0gd2Via2l0X3dlYl92aWV3X2dldF90aXRsZSh3ZWJWaWV3KSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKHdlYlZpZXcsIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHRpdGxlQ2hhbmdlZCksIHRlc3QpOwotICAgIGdfbWFpbl9s
b29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7Ci19Ci0KLXZvaWQgV2ViVmlld1Rlc3Q6OndhaXRV
bnRpbFRpdGxlQ2hhbmdlZFRvKGNvbnN0IGNoYXIqIGV4cGVjdGVkVGl0bGUpCi17Ci0gICAgbV9l
eHBlY3RlZFRpdGxlID0gZXhwZWN0ZWRUaXRsZTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2Vi
VmlldywgIm5vdGlmeTo6dGl0bGUiLCBHX0NBTExCQUNLKHRpdGxlQ2hhbmdlZCksIHRoaXMpOwot
ICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAgICBtX2V4cGVjdGVkVGl0bGUgPSBD
U3RyaW5nKCk7Ci19Ci0KLXZvaWQgV2ViVmlld1Rlc3Q6OndhaXRVbnRpbFRpdGxlQ2hhbmdlZCgp
Ci17Ci0gICAgd2FpdFVudGlsVGl0bGVDaGFuZ2VkVG8oMCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVh
biBwYXJlbnRXaW5kb3dNYXBwZWQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50KiwgV2ViVmll
d1Rlc3QqIHRlc3QpCi17Ci0gICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5j
KHdpZGdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocGFyZW50V2luZG93TWFwcGVkKSwgdGVz
dCk7Ci0gICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKLQotICAgIHJldHVy
biBGQUxTRTsKLX0KLQotdm9pZCBXZWJWaWV3VGVzdDo6c2hvd0luV2luZG93KEd0a1dpbmRvd1R5
cGUgd2luZG93VHlwZSkKLXsKLSAgICBnX2Fzc2VydCghbV9wYXJlbnRXaW5kb3cpOwotICAgIG1f
cGFyZW50V2luZG93ID0gZ3RrX3dpbmRvd19uZXcod2luZG93VHlwZSk7Ci0gICAgZ3RrX2NvbnRh
aW5lcl9hZGQoR1RLX0NPTlRBSU5FUihtX3BhcmVudFdpbmRvdyksIEdUS19XSURHRVQobV93ZWJW
aWV3KSk7Ci0gICAgZ3RrX3dpZGdldF9zaG93KEdUS19XSURHRVQobV93ZWJWaWV3KSk7Ci0gICAg
Z3RrX3dpZGdldF9zaG93KG1fcGFyZW50V2luZG93KTsKLX0KLQotdm9pZCBXZWJWaWV3VGVzdDo6
c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKEd0a1dpbmRvd1R5cGUgd2luZG93VHlwZSkK
LXsKLSAgICBnX2Fzc2VydCghbV9wYXJlbnRXaW5kb3cpOwotICAgIG1fcGFyZW50V2luZG93ID0g
Z3RrX3dpbmRvd19uZXcod2luZG93VHlwZSk7Ci0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NP
TlRBSU5FUihtX3BhcmVudFdpbmRvdyksIEdUS19XSURHRVQobV93ZWJWaWV3KSk7Ci0gICAgZ3Rr
X3dpZGdldF9zaG93KEdUS19XSURHRVQobV93ZWJWaWV3KSk7Ci0KLSAgICBnX3NpZ25hbF9jb25u
ZWN0KG1fcGFyZW50V2luZG93LCAibWFwLWV2ZW50IiwgR19DQUxMQkFDSyhwYXJlbnRXaW5kb3dN
YXBwZWQpLCB0aGlzKTsKLSAgICBndGtfd2lkZ2V0X3Nob3cobV9wYXJlbnRXaW5kb3cpOwotICAg
IGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLX0KLQotdm9pZCBXZWJWaWV3VGVzdDo6cmVz
aXplVmlldyhpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAgR3RrQWxsb2NhdGlvbiBhbGxv
Y2F0aW9uOwotICAgIGd0a193aWRnZXRfZ2V0X2FsbG9jYXRpb24oR1RLX1dJREdFVChtX3dlYlZp
ZXcpLCAmYWxsb2NhdGlvbik7Ci0gICAgaWYgKHdpZHRoICE9IC0xKQotICAgICAgICBhbGxvY2F0
aW9uLndpZHRoID0gd2lkdGg7Ci0gICAgaWYgKGhlaWdodCAhPSAtMSkKLSAgICAgICAgYWxsb2Nh
dGlvbi5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19X
SURHRVQobV93ZWJWaWV3KSwgJmFsbG9jYXRpb24pOwotfQotCi12b2lkIFdlYlZpZXdUZXN0Ojpz
ZWxlY3RBbGwoKQotewotICAgIHdlYmtpdF93ZWJfdmlld19leGVjdXRlX2VkaXRpbmdfY29tbWFu
ZChtX3dlYlZpZXcsICJTZWxlY3RBbGwiKTsKLX0KLQotc3RhdGljIHZvaWQgcmVzb3VyY2VHZXRE
YXRhQ2FsbGJhY2soR09iamVjdCogb2JqZWN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50
ZXIgdXNlckRhdGEpCi17Ci0gICAgc2l6ZV90IGRhdGFTaXplOwotICAgIEdPd25QdHI8R0Vycm9y
PiBlcnJvcjsKLSAgICB1bnNpZ25lZCBjaGFyKiBkYXRhID0gd2Via2l0X3dlYl9yZXNvdXJjZV9n
ZXRfZGF0YV9maW5pc2goV0VCS0lUX1dFQl9SRVNPVVJDRShvYmplY3QpLCByZXN1bHQsICZkYXRh
U2l6ZSwgJmVycm9yLm91dFB0cigpKTsKLSAgICBnX2Fzc2VydChkYXRhKTsKLQotICAgIFdlYlZp
ZXdUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8V2ViVmlld1Rlc3QqPih1c2VyRGF0YSk7Ci0gICAg
dGVzdC0+bV9yZXNvdXJjZURhdGEuc2V0KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGRhdGEpKTsK
LSAgICB0ZXN0LT5tX3Jlc291cmNlRGF0YVNpemUgPSBkYXRhU2l6ZTsKLSAgICBnX21haW5fbG9v
cF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOwotfQotCi1jb25zdCBjaGFyKiBXZWJWaWV3VGVzdDo6
bWFpblJlc291cmNlRGF0YShzaXplX3QmIG1haW5SZXNvdXJjZURhdGFTaXplKQotewotICAgIG1f
cmVzb3VyY2VEYXRhU2l6ZSA9IDA7Ci0gICAgbV9yZXNvdXJjZURhdGEuY2xlYXIoKTsKLSAgICBX
ZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVz
b3VyY2UobV93ZWJWaWV3KTsKLSAgICBnX2Fzc2VydChyZXNvdXJjZSk7Ci0KLSAgICB3ZWJraXRf
d2ViX3Jlc291cmNlX2dldF9kYXRhKHJlc291cmNlLCAwLCByZXNvdXJjZUdldERhdGFDYWxsYmFj
aywgdGhpcyk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotCi0gICAgbWFpblJl
c291cmNlRGF0YVNpemUgPSBtX3Jlc291cmNlRGF0YVNpemU7Ci0gICAgcmV0dXJuIG1fcmVzb3Vy
Y2VEYXRhLmdldCgpOwotfQotCi12b2lkIFdlYlZpZXdUZXN0Ojptb3VzZU1vdmVUbyhpbnQgeCwg
aW50IHksIHVuc2lnbmVkIGludCBtb3VzZU1vZGlmaWVycykKLXsKLSAgICBnX2Fzc2VydChtX3Bh
cmVudFdpbmRvdyk7Ci0gICAgR3RrV2lkZ2V0KiB2aWV3V2lkZ2V0ID0gR1RLX1dJREdFVChtX3dl
YlZpZXcpOwotICAgIGdfYXNzZXJ0KGd0a193aWRnZXRfZ2V0X3JlYWxpemVkKHZpZXdXaWRnZXQp
KTsKLQotICAgIEdPd25QdHI8R2RrRXZlbnQ+IGV2ZW50KGdka19ldmVudF9uZXcoR0RLX01PVElP
Tl9OT1RJRlkpKTsKLSAgICBldmVudC0+bW90aW9uLnggPSB4OwotICAgIGV2ZW50LT5tb3Rpb24u
eSA9IHk7Ci0KLSAgICBldmVudC0+bW90aW9uLnRpbWUgPSBHREtfQ1VSUkVOVF9USU1FOwotICAg
IGV2ZW50LT5tb3Rpb24ud2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KHZpZXdXaWRnZXQp
OwotICAgIGdfb2JqZWN0X3JlZihldmVudC0+bW90aW9uLndpbmRvdyk7Ci0gICAgZXZlbnQtPm1v
dGlvbi5kZXZpY2UgPSBnZGtfZGV2aWNlX21hbmFnZXJfZ2V0X2NsaWVudF9wb2ludGVyKGdka19k
aXNwbGF5X2dldF9kZXZpY2VfbWFuYWdlcihndGtfd2lkZ2V0X2dldF9kaXNwbGF5KHZpZXdXaWRn
ZXQpKSk7Ci0gICAgZXZlbnQtPm1vdGlvbi5zdGF0ZSA9IG1vdXNlTW9kaWZpZXJzOwotICAgIGV2
ZW50LT5tb3Rpb24uYXhlcyA9IDA7Ci0KLSAgICBpbnQgeFJvb3QsIHlSb290OwotICAgIGdka193
aW5kb3dfZ2V0X3Jvb3RfY29vcmRzKGd0a193aWRnZXRfZ2V0X3dpbmRvdyh2aWV3V2lkZ2V0KSwg
eCwgeSwgJnhSb290LCAmeVJvb3QpOwotICAgIGV2ZW50LT5tb3Rpb24ueF9yb290ID0geFJvb3Q7
Ci0gICAgZXZlbnQtPm1vdGlvbi55X3Jvb3QgPSB5Um9vdDsKLSAgICBndGtfbWFpbl9kb19ldmVu
dChldmVudC5nZXQoKSk7Ci19Ci0KLXZvaWQgV2ViVmlld1Rlc3Q6OmNsaWNrTW91c2VCdXR0b24o
aW50IHgsIGludCB5LCB1bnNpZ25lZCBpbnQgYnV0dG9uLCB1bnNpZ25lZCBpbnQgbW91c2VNb2Rp
ZmllcnMpCi17Ci0gICAgZG9Nb3VzZUJ1dHRvbkV2ZW50KEdES19CVVRUT05fUFJFU1MsIHgsIHks
IGJ1dHRvbiwgbW91c2VNb2RpZmllcnMpOwotICAgIGRvTW91c2VCdXR0b25FdmVudChHREtfQlVU
VE9OX1JFTEVBU0UsIHgsIHksIGJ1dHRvbiwgbW91c2VNb2RpZmllcnMpOwotfQotCi12b2lkIFdl
YlZpZXdUZXN0OjprZXlTdHJva2UodW5zaWduZWQgaW50IGtleVZhbCwgdW5zaWduZWQgaW50IGtl
eU1vZGlmaWVycykKLXsKLSAgICBnX2Fzc2VydChtX3BhcmVudFdpbmRvdyk7Ci0gICAgR3RrV2lk
Z2V0KiB2aWV3V2lkZ2V0ID0gR1RLX1dJREdFVChtX3dlYlZpZXcpOwotICAgIGdfYXNzZXJ0KGd0
a193aWRnZXRfZ2V0X3JlYWxpemVkKHZpZXdXaWRnZXQpKTsKLQotICAgIEdPd25QdHI8R2RrRXZl
bnQ+IGV2ZW50KGdka19ldmVudF9uZXcoR0RLX0tFWV9QUkVTUykpOwotICAgIGV2ZW50LT5rZXku
a2V5dmFsID0ga2V5VmFsOwotCi0gICAgZXZlbnQtPmtleS50aW1lID0gR0RLX0NVUlJFTlRfVElN
RTsKLSAgICBldmVudC0+a2V5LndpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyh2aWV3V2lk
Z2V0KTsKLSAgICBnX29iamVjdF9yZWYoZXZlbnQtPmtleS53aW5kb3cpOwotICAgIGdka19ldmVu
dF9zZXRfZGV2aWNlKGV2ZW50LmdldCgpLCBnZGtfZGV2aWNlX21hbmFnZXJfZ2V0X2NsaWVudF9w
b2ludGVyKGdka19kaXNwbGF5X2dldF9kZXZpY2VfbWFuYWdlcihndGtfd2lkZ2V0X2dldF9kaXNw
bGF5KHZpZXdXaWRnZXQpKSkpOwotICAgIGV2ZW50LT5rZXkuc3RhdGUgPSBrZXlNb2RpZmllcnM7
Ci0KLSAgICAvLyBXaGVuIHN5bnRoZXNpemluZyBhbiBldmVudCwgYW4gaW52YWxpZCBoYXJkd2Fy
ZV9rZXljb2RlIHZhbHVlIGNhbiBjYXVzZSBpdCB0byBiZSBiYWRseSBwcm9jZXNzZWQgYnkgR1RL
Ky4KLSAgICBHT3duUHRyPEdka0tleW1hcEtleT4ga2V5czsKLSAgICBpbnQga2V5c0NvdW50Owot
ICAgIGlmIChnZGtfa2V5bWFwX2dldF9lbnRyaWVzX2Zvcl9rZXl2YWwoZ2RrX2tleW1hcF9nZXRf
ZGVmYXVsdCgpLCBrZXlWYWwsICZrZXlzLm91dFB0cigpLCAma2V5c0NvdW50KSkKLSAgICAgICAg
ZXZlbnQtPmtleS5oYXJkd2FyZV9rZXljb2RlID0ga2V5cy5nZXQoKVswXS5rZXljb2RlOwotCi0g
ICAgZ3RrX21haW5fZG9fZXZlbnQoZXZlbnQuZ2V0KCkpOwotICAgIGV2ZW50LT5rZXkudHlwZSA9
IEdES19LRVlfUkVMRUFTRTsKLSAgICBndGtfbWFpbl9kb19ldmVudChldmVudC5nZXQoKSk7Ci19
Ci0KLXZvaWQgV2ViVmlld1Rlc3Q6OmRvTW91c2VCdXR0b25FdmVudChHZGtFdmVudFR5cGUgZXZl
bnRUeXBlLCBpbnQgeCwgaW50IHksIHVuc2lnbmVkIGludCBidXR0b24sIHVuc2lnbmVkIGludCBt
b3VzZU1vZGlmaWVycykKLXsKLSAgICBnX2Fzc2VydChtX3BhcmVudFdpbmRvdyk7Ci0gICAgR3Rr
V2lkZ2V0KiB2aWV3V2lkZ2V0ID0gR1RLX1dJREdFVChtX3dlYlZpZXcpOwotICAgIGdfYXNzZXJ0
KGd0a193aWRnZXRfZ2V0X3JlYWxpemVkKHZpZXdXaWRnZXQpKTsKLQotICAgIEdPd25QdHI8R2Rr
RXZlbnQ+IGV2ZW50KGdka19ldmVudF9uZXcoZXZlbnRUeXBlKSk7Ci0gICAgZXZlbnQtPmJ1dHRv
bi53aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3codmlld1dpZGdldCk7Ci0gICAgZ19vYmpl
Y3RfcmVmKGV2ZW50LT5idXR0b24ud2luZG93KTsKLQotICAgIGV2ZW50LT5idXR0b24udGltZSA9
IEdES19DVVJSRU5UX1RJTUU7Ci0gICAgZXZlbnQtPmJ1dHRvbi54ID0geDsKLSAgICBldmVudC0+
YnV0dG9uLnkgPSB5OwotICAgIGV2ZW50LT5idXR0b24uYXhlcyA9IDA7Ci0gICAgZXZlbnQtPmJ1
dHRvbi5zdGF0ZSA9IG1vdXNlTW9kaWZpZXJzOwotICAgIGV2ZW50LT5idXR0b24uYnV0dG9uID0g
YnV0dG9uOwotCi0gICAgZXZlbnQtPmJ1dHRvbi5kZXZpY2UgPSBnZGtfZGV2aWNlX21hbmFnZXJf
Z2V0X2NsaWVudF9wb2ludGVyKGdka19kaXNwbGF5X2dldF9kZXZpY2VfbWFuYWdlcihndGtfd2lk
Z2V0X2dldF9kaXNwbGF5KHZpZXdXaWRnZXQpKSk7Ci0KLSAgICBpbnQgeFJvb3QsIHlSb290Owot
ICAgIGdka193aW5kb3dfZ2V0X3Jvb3RfY29vcmRzKGd0a193aWRnZXRfZ2V0X3dpbmRvdyh2aWV3
V2lkZ2V0KSwgeCwgeSwgJnhSb290LCAmeVJvb3QpOwotICAgIGV2ZW50LT5idXR0b24ueF9yb290
ID0geFJvb3Q7Ci0gICAgZXZlbnQtPmJ1dHRvbi55X3Jvb3QgPSB5Um9vdDsKLSAgICBndGtfbWFp
bl9kb19ldmVudChldmVudC5nZXQoKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ1bkphdmFTY3JpcHRS
ZWFkeUNhbGxiYWNrKEdPYmplY3QqLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgV2ViVmlld1Rlc3Qq
IHRlc3QpCi17Ci0gICAgdGVzdC0+bV9qYXZhc2NyaXB0UmVzdWx0ID0gd2Via2l0X3dlYl92aWV3
X3J1bl9qYXZhc2NyaXB0X2ZpbmlzaCh0ZXN0LT5tX3dlYlZpZXcsIHJlc3VsdCwgdGVzdC0+bV9q
YXZhc2NyaXB0RXJyb3IpOwotICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7
Ci19Ci0KLXN0YXRpYyB2b2lkIHJ1bkphdmFTY3JpcHRGcm9tR1Jlc291cmNlUmVhZHlDYWxsYmFj
ayhHT2JqZWN0KiwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIFdlYlZpZXdUZXN0KiB0ZXN0KQotewot
ICAgIHRlc3QtPm1famF2YXNjcmlwdFJlc3VsdCA9IHdlYmtpdF93ZWJfdmlld19ydW5famF2YXNj
cmlwdF9mcm9tX2dyZXNvdXJjZV9maW5pc2godGVzdC0+bV93ZWJWaWV3LCByZXN1bHQsIHRlc3Qt
Pm1famF2YXNjcmlwdEVycm9yKTsKLSAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxv
b3ApOwotfQotCi1XZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBXZWJWaWV3VGVzdDo6cnVuSmF2YVNj
cmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKGNvbnN0IGNoYXIqIGphdmFzY3JpcHQsIEdFcnJvcioq
IGVycm9yKQotewotICAgIGlmIChtX2phdmFzY3JpcHRSZXN1bHQpCi0gICAgICAgIHdlYmtpdF9q
YXZhc2NyaXB0X3Jlc3VsdF91bnJlZihtX2phdmFzY3JpcHRSZXN1bHQpOwotICAgIG1famF2YXNj
cmlwdFJlc3VsdCA9IDA7Ci0gICAgbV9qYXZhc2NyaXB0RXJyb3IgPSBlcnJvcjsKLSAgICB3ZWJr
aXRfd2ViX3ZpZXdfcnVuX2phdmFzY3JpcHQobV93ZWJWaWV3LCBqYXZhc2NyaXB0LCAwLCByZWlu
dGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KHJ1bkphdmFTY3JpcHRSZWFkeUNhbGxi
YWNrKSwgdGhpcyk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotCi0gICAgcmV0
dXJuIG1famF2YXNjcmlwdFJlc3VsdDsKLX0KLQotV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCogV2Vi
Vmlld1Rlc3Q6OnJ1bkphdmFTY3JpcHRGcm9tR1Jlc291cmNlQW5kV2FpdFVudGlsRmluaXNoZWQo
Y29uc3QgY2hhciogcmVzb3VyY2UsIEdFcnJvcioqIGVycm9yKQotewotICAgIGlmIChtX2phdmFz
Y3JpcHRSZXN1bHQpCi0gICAgICAgIHdlYmtpdF9qYXZhc2NyaXB0X3Jlc3VsdF91bnJlZihtX2ph
dmFzY3JpcHRSZXN1bHQpOwotICAgIG1famF2YXNjcmlwdFJlc3VsdCA9IDA7Ci0gICAgbV9qYXZh
c2NyaXB0RXJyb3IgPSBlcnJvcjsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfcnVuX2phdmFzY3JpcHRf
ZnJvbV9ncmVzb3VyY2UobV93ZWJWaWV3LCByZXNvdXJjZSwgMCwgcmVpbnRlcnByZXRfY2FzdDxH
QXN5bmNSZWFkeUNhbGxiYWNrPihydW5KYXZhU2NyaXB0RnJvbUdSZXNvdXJjZVJlYWR5Q2FsbGJh
Y2spLCB0aGlzKTsKLSAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Ci0KLSAgICByZXR1
cm4gbV9qYXZhc2NyaXB0UmVzdWx0OwotfQotCi1zdGF0aWMgY2hhcioganNWYWx1ZVRvQ1N0cmlu
ZyhKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKLXsKLSAgICBn
X2Fzc2VydCh2YWx1ZSk7Ci0gICAgZ19hc3NlcnQoSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIHZh
bHVlKSk7Ci0KLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gc3RyaW5nVmFsdWUoQWRvcHQs
IEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsIDApKTsKLSAgICBnX2Fzc2VydChz
dHJpbmdWYWx1ZSk7Ci0KLSAgICBzaXplX3QgY1N0cmluZ0xlbmd0aCA9IEpTU3RyaW5nR2V0TWF4
aW11bVVURjhDU3RyaW5nU2l6ZShzdHJpbmdWYWx1ZS5nZXQoKSk7Ci0gICAgY2hhciogY1N0cmlu
ZyA9IHN0YXRpY19jYXN0PGNoYXIqPihnX21hbGxvYyhjU3RyaW5nTGVuZ3RoKSk7Ci0gICAgSlNT
dHJpbmdHZXRVVEY4Q1N0cmluZyhzdHJpbmdWYWx1ZS5nZXQoKSwgY1N0cmluZywgY1N0cmluZ0xl
bmd0aCk7Ci0gICAgcmV0dXJuIGNTdHJpbmc7Ci19Ci0KLWNoYXIqIFdlYlZpZXdUZXN0OjpqYXZh
c2NyaXB0UmVzdWx0VG9DU3RyaW5nKFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFzY3JpcHRS
ZXN1bHQpCi17Ci0gICAgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQgPSB3ZWJraXRfamF2YXNj
cmlwdF9yZXN1bHRfZ2V0X2dsb2JhbF9jb250ZXh0KGphdmFzY3JpcHRSZXN1bHQpOwotICAgIGdf
YXNzZXJ0KGNvbnRleHQpOwotICAgIHJldHVybiBqc1ZhbHVlVG9DU3RyaW5nKGNvbnRleHQsIHdl
YmtpdF9qYXZhc2NyaXB0X3Jlc3VsdF9nZXRfdmFsdWUoamF2YXNjcmlwdFJlc3VsdCkpOwotfQot
Ci1kb3VibGUgV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb051bWJlcihXZWJLaXRKYXZh
c2NyaXB0UmVzdWx0KiBqYXZhc2NyaXB0UmVzdWx0KQotewotICAgIEpTR2xvYmFsQ29udGV4dFJl
ZiBjb250ZXh0ID0gd2Via2l0X2phdmFzY3JpcHRfcmVzdWx0X2dldF9nbG9iYWxfY29udGV4dChq
YXZhc2NyaXB0UmVzdWx0KTsKLSAgICBnX2Fzc2VydChjb250ZXh0KTsKLSAgICBKU1ZhbHVlUmVm
IHZhbHVlID0gd2Via2l0X2phdmFzY3JpcHRfcmVzdWx0X2dldF92YWx1ZShqYXZhc2NyaXB0UmVz
dWx0KTsKLSAgICBnX2Fzc2VydCh2YWx1ZSk7Ci0gICAgZ19hc3NlcnQoSlNWYWx1ZUlzTnVtYmVy
KGNvbnRleHQsIHZhbHVlKSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQs
IHZhbHVlLCAwKTsKLX0KLQotYm9vbCBXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQm9v
bGVhbihXZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBqYXZhc2NyaXB0UmVzdWx0KQotewotICAgIEpT
R2xvYmFsQ29udGV4dFJlZiBjb250ZXh0ID0gd2Via2l0X2phdmFzY3JpcHRfcmVzdWx0X2dldF9n
bG9iYWxfY29udGV4dChqYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBnX2Fzc2VydChjb250ZXh0KTsK
LSAgICBKU1ZhbHVlUmVmIHZhbHVlID0gd2Via2l0X2phdmFzY3JpcHRfcmVzdWx0X2dldF92YWx1
ZShqYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBnX2Fzc2VydCh2YWx1ZSk7Ci0gICAgZ19hc3NlcnQo
SlNWYWx1ZUlzQm9vbGVhbihjb250ZXh0LCB2YWx1ZSkpOwotCi0gICAgcmV0dXJuIEpTVmFsdWVU
b0Jvb2xlYW4oY29udGV4dCwgdmFsdWUpOwotfQotCi1ib29sIFdlYlZpZXdUZXN0OjpqYXZhc2Ny
aXB0UmVzdWx0SXNOdWxsKFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQp
Ci17Ci0gICAgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQgPSB3ZWJraXRfamF2YXNjcmlwdF9y
ZXN1bHRfZ2V0X2dsb2JhbF9jb250ZXh0KGphdmFzY3JpcHRSZXN1bHQpOwotICAgIGdfYXNzZXJ0
KGNvbnRleHQpOwotICAgIEpTVmFsdWVSZWYgdmFsdWUgPSB3ZWJraXRfamF2YXNjcmlwdF9yZXN1
bHRfZ2V0X3ZhbHVlKGphdmFzY3JpcHRSZXN1bHQpOwotICAgIGdfYXNzZXJ0KHZhbHVlKTsKLQot
ICAgIHJldHVybiBKU1ZhbHVlSXNOdWxsKGNvbnRleHQsIHZhbHVlKTsKLX0KLQotYm9vbCBXZWJW
aWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdElzVW5kZWZpbmVkKFdlYktpdEphdmFzY3JpcHRSZXN1
bHQqIGphdmFzY3JpcHRSZXN1bHQpCi17Ci0gICAgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQg
PSB3ZWJraXRfamF2YXNjcmlwdF9yZXN1bHRfZ2V0X2dsb2JhbF9jb250ZXh0KGphdmFzY3JpcHRS
ZXN1bHQpOwotICAgIGdfYXNzZXJ0KGNvbnRleHQpOwotICAgIEpTVmFsdWVSZWYgdmFsdWUgPSB3
ZWJraXRfamF2YXNjcmlwdF9yZXN1bHRfZ2V0X3ZhbHVlKGphdmFzY3JpcHRSZXN1bHQpOwotICAg
IGdfYXNzZXJ0KHZhbHVlKTsKLQotICAgIHJldHVybiBKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4
dCwgdmFsdWUpOwotfQotCi1zdGF0aWMgdm9pZCBvblNuYXBzaG90UmVhZHkoV2ViS2l0V2ViVmll
dyogd2ViX3ZpZXcsIEdBc3luY1Jlc3VsdCogcmVzLCBXZWJWaWV3VGVzdCogdGVzdCkKLXsKLSAg
ICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgdGVzdC0+bV9zdXJmYWNlID0gd2Via2l0X3dl
Yl92aWV3X2dldF9zbmFwc2hvdF9maW5pc2god2ViX3ZpZXcsIHJlcywgJmVycm9yLm91dFB0cigp
KTsKLSAgICBnX2Fzc2VydCghdGVzdC0+bV9zdXJmYWNlIHx8ICFlcnJvci5nZXQoKSk7Ci0gICAg
aWYgKGVycm9yKQotICAgICAgICBnX2Fzc2VydF9lcnJvcihlcnJvci5nZXQoKSwgV0VCS0lUX1NO
QVBTSE9UX0VSUk9SLCBXRUJLSVRfU05BUFNIT1RfRVJST1JfRkFJTEVEX1RPX0NSRUFURSk7Ci0g
ICAgdGVzdC0+cXVpdE1haW5Mb29wKCk7Ci19Ci0KLWNhaXJvX3N1cmZhY2VfdCogV2ViVmlld1Rl
c3Q6OmdldFNuYXBzaG90QW5kV2FpdFVudGlsUmVhZHkoV2ViS2l0U25hcHNob3RSZWdpb24gcmVn
aW9uLCBXZWJLaXRTbmFwc2hvdE9wdGlvbnMgb3B0aW9ucykKLXsKLSAgICBpZiAobV9zdXJmYWNl
KQotICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3kobV9zdXJmYWNlKTsKLSAgICBtX3N1cmZh
Y2UgPSAwOwotICAgIHdlYmtpdF93ZWJfdmlld19nZXRfc25hcHNob3QobV93ZWJWaWV3LCByZWdp
b24sIG9wdGlvbnMsIDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4ob25T
bmFwc2hvdFJlYWR5KSwgdGhpcyk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwot
ICAgIHJldHVybiBtX3N1cmZhY2U7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYTQ2MGUyMi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5oCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgotICogUG9ydGlvbnMgQ29weXJp
Z2h0IChjKSAyMDExIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwot
Ci0jaWZuZGVmIFdlYlZpZXdUZXN0X2gKLSNkZWZpbmUgV2ViVmlld1Rlc3RfaAotCi0jaW5jbHVk
ZSAiVGVzdE1haW4uaCIKLSNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdDIuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLWNsYXNzIFdlYlZpZXdUZXN0OiBwdWJsaWMgVGVzdCB7Ci1w
dWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShXZWJWaWV3VGVzdCk7Ci0gICAgV2Vi
Vmlld1Rlc3QoKTsKLSAgICB2aXJ0dWFsIH5XZWJWaWV3VGVzdCgpOwotCi0gICAgdmlydHVhbCB2
b2lkIGxvYWRVUkkoY29uc3QgY2hhciogdXJpKTsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZEh0bWwo
Y29uc3QgY2hhciogaHRtbCwgY29uc3QgY2hhciogYmFzZVVSSSk7Ci0gICAgdmlydHVhbCB2b2lk
IGxvYWRQbGFpblRleHQoY29uc3QgY2hhciogcGxhaW5UZXh0KTsKLSAgICB2aXJ0dWFsIHZvaWQg
bG9hZFJlcXVlc3QoV2ViS2l0VVJJUmVxdWVzdCopOwotICAgIHZvaWQgbG9hZEFsdGVybmF0ZUhU
TUwoY29uc3QgY2hhciogaHRtbCwgY29uc3QgY2hhciogY29udGVudFVSSSwgY29uc3QgY2hhciog
YmFzZVVSSSk7Ci0gICAgdm9pZCBnb0JhY2soKTsKLSAgICB2b2lkIGdvRm9yd2FyZCgpOwotICAg
IHZvaWQgZ29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW0oV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSop
OwotCi0gICAgdm9pZCBxdWl0TWFpbkxvb3AoKTsKLSAgICB2b2lkIHF1aXRNYWluTG9vcEFmdGVy
UHJvY2Vzc2luZ1BlbmRpbmdFdmVudHMoKTsKLSAgICB2b2lkIHdhaXQoZG91YmxlIHNlY29uZHMp
OwotICAgIHZvaWQgd2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgdm9pZCB3YWl0VW50aWxU
aXRsZUNoYW5nZWRUbyhjb25zdCBjaGFyKiBleHBlY3RlZFRpdGxlKTsKLSAgICB2b2lkIHdhaXRV
bnRpbFRpdGxlQ2hhbmdlZCgpOwotICAgIHZvaWQgc2hvd0luV2luZG93KEd0a1dpbmRvd1R5cGUg
PSBHVEtfV0lORE9XX1BPUFVQKTsKLSAgICB2b2lkIHNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1h
cHBlZChHdGtXaW5kb3dUeXBlID0gR1RLX1dJTkRPV19QT1BVUCk7Ci0gICAgdm9pZCByZXNpemVW
aWV3KGludCB3aWR0aCwgaW50IGhlaWdodCk7Ci0gICAgdm9pZCBzZWxlY3RBbGwoKTsKLSAgICBj
b25zdCBjaGFyKiBtYWluUmVzb3VyY2VEYXRhKHNpemVfdCYgbWFpblJlc291cmNlRGF0YVNpemUp
OwotCi0gICAgdm9pZCBtb3VzZU1vdmVUbyhpbnQgeCwgaW50IHksIHVuc2lnbmVkIGludCBtb3Vz
ZU1vZGlmaWVycyA9IDApOwotICAgIHZvaWQgY2xpY2tNb3VzZUJ1dHRvbihpbnQgeCwgaW50IHks
IHVuc2lnbmVkIGludCBidXR0b24gPSAxLCB1bnNpZ25lZCBpbnQgbW91c2VNb2RpZmllcnMgPSAw
KTsKLSAgICB2b2lkIGtleVN0cm9rZSh1bnNpZ25lZCBpbnQga2V5VmFsLCB1bnNpZ25lZCBpbnQg
a2V5TW9kaWZpZXJzID0gMCk7Ci0KLSAgICBXZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBydW5KYXZh
U2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoY29uc3QgY2hhciogamF2YXNjcmlwdCwgR0Vycm9y
KiopOwotICAgIFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIHJ1bkphdmFTY3JpcHRGcm9tR1Jlc291
cmNlQW5kV2FpdFVudGlsRmluaXNoZWQoY29uc3QgY2hhciogcmVzb3VyY2UsIEdFcnJvcioqKTsK
LQotICAgIC8vIEphdmFzY3JpcHQgcmVzdWx0IGhlbHBlcnMuCi0gICAgc3RhdGljIGNoYXIqIGph
dmFzY3JpcHRSZXN1bHRUb0NTdHJpbmcoV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCopOwotICAgIHN0
YXRpYyBkb3VibGUgamF2YXNjcmlwdFJlc3VsdFRvTnVtYmVyKFdlYktpdEphdmFzY3JpcHRSZXN1
bHQqKTsKLSAgICBzdGF0aWMgYm9vbCBqYXZhc2NyaXB0UmVzdWx0VG9Cb29sZWFuKFdlYktpdEph
dmFzY3JpcHRSZXN1bHQqKTsKLSAgICBzdGF0aWMgYm9vbCBqYXZhc2NyaXB0UmVzdWx0SXNOdWxs
KFdlYktpdEphdmFzY3JpcHRSZXN1bHQqKTsKLSAgICBzdGF0aWMgYm9vbCBqYXZhc2NyaXB0UmVz
dWx0SXNVbmRlZmluZWQoV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCopOwotCi0gICAgY2Fpcm9fc3Vy
ZmFjZV90KiBnZXRTbmFwc2hvdEFuZFdhaXRVbnRpbFJlYWR5KFdlYktpdFNuYXBzaG90UmVnaW9u
LCBXZWJLaXRTbmFwc2hvdE9wdGlvbnMpOwotCi0gICAgV2ViS2l0V2ViVmlldyogbV93ZWJWaWV3
OwotICAgIEdNYWluTG9vcCogbV9tYWluTG9vcDsKLSAgICBDU3RyaW5nIG1fYWN0aXZlVVJJOwot
ICAgIEd0a1dpZGdldCogbV9wYXJlbnRXaW5kb3c7Ci0gICAgQ1N0cmluZyBtX2V4cGVjdGVkVGl0
bGU7Ci0gICAgV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCogbV9qYXZhc2NyaXB0UmVzdWx0OwotICAg
IEdFcnJvcioqIG1famF2YXNjcmlwdEVycm9yOwotICAgIEdPd25QdHI8Y2hhcj4gbV9yZXNvdXJj
ZURhdGE7Ci0gICAgc2l6ZV90IG1fcmVzb3VyY2VEYXRhU2l6ZTsKLSAgICBjYWlyb19zdXJmYWNl
X3QqIG1fc3VyZmFjZTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGRvTW91c2VCdXR0b25FdmVudChH
ZGtFdmVudFR5cGUsIGludCwgaW50LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7Ci19Owot
Ci0jZW5kaWYgLy8gV2ViVmlld1Rlc3RfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvdGVzdHMvcmVzb3VyY2VzL2xpbmstdGl0bGUuanMgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9yZXNvdXJjZXMvbGluay10aXRsZS5qcwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmM4MjRkYS4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9yZXNvdXJjZXMvbGluay10aXRsZS5qcwor
KysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnV2ViS2l0TGluaycpLnRpdGxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3QtY2VydC5wZW0gYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9yZXNvdXJjZXMvdGVzdC1jZXJ0LnBlbQpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjM0MzAxZi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9yZXNvdXJjZXMvdGVzdC1jZXJ0LnBlbQorKysg
L2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLS0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQot
TUlJQjlqQ0NBVitnQXdJQkFnSUpBTGV1WEJvK3Z3ejlNQTBHQ1NxR1NJYjNEUUVCQlFVQU1CUXhF
akFRQmdOVgotQkFNTUNURXlOeTR3TGpBdU1UQWVGdzB4TWpBM01USXhNalE0TWpSYUZ3MHlNakEz
TVRBeE1qUTRNalJhTUJReAotRWpBUUJnTlZCQU1NQ1RFeU55NHdMakF1TVRDQm56QU5CZ2txaGtp
Rzl3MEJBUUVGQUFPQmpRQXdnWWtDZ1lFQQotMFRVek9ReEhCSUtERDJta3VxK3RVOTJtUXZEWmc3
M0IwRytOaHIyVDJHNk1iY0xxSXdqZzFRWXRCWldKODN0WgoteE1NRWZpd2VITEY4NVo5b2hhdkFn
eEpsS0c3WW12Wk83OUtrRnBtalYyVzVDVlJtMGVZTVBuem14TkNvYVlxbwotRExsMHpzSDZLWk9M
UEt1L2ZYNGVEWDlYcEFQMWY4M2hXQjFVRkJtSEtOOENBd0VBQWFOUU1FNHdIUVlEVlIwTwotQkJZ
RUZESHY1WlExQmRtaHpUc0RVRW9ZNTVFWHlVZEtNQjhHQTFVZEl3UVlNQmFBRkRIdjVaUTFCZG1o
elRzRAotVUVvWTU1RVh5VWRLTUF3R0ExVWRFd1FGTUFNQkFmOHdEUVlKS29aSWh2Y05BUUVGQlFB
RGdZRUFoM3FNQng3dgotalNvZE1mM095VHFUTEU3ZGVMbm1uQ2VCVnBnenhSWkVvaXpjR3FZY2pp
cU8yN2k1TjVaNktWUXNuSVRuTGl5QwotbVV0dVI1S25GNjl1VEtVdzRtL3VnWmU1d2hqaWc1TXEy
bDQxMEtWSzZFZUc0dGRMbGZYUit3aTRVNUs0S2pQNgotcDRuY2hRVVhMYTJ6Y2JKbitWQmV4Sm42
Lzl3ZGhyK0RVR1k9Ci0tLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9yZXNvdXJjZXMvdGVzdC1rZXkucGVt
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3Qt
a2V5LnBlbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTAzNjIyMi4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9yZXNvdXJjZXMvdGVz
dC1rZXkucGVtCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotLS0tLS1CRUdJTiBQUklW
QVRFIEtFWS0tLS0tCi1NSUlDZHdJQkFEQU5CZ2txaGtpRzl3MEJBUUVGQUFTQ0FtRXdnZ0pkQWdF
QUFvR0JBTkUxTXprTVJ3U0NndzlwCi1wTHF2clZQZHBrTHcyWU85d2RCdmpZYTlrOWh1akczQzZp
TUk0TlVHTFFXVmlmTjdXY1REQkg0c0hoeXhmT1dmCi1hSVdyd0lNU1pTaHUySnIyVHUvU3BCYVpv
MWRsdVFsVVp0SG1ERDU4NXNUUXFHbUtxQXk1ZE03QitpbVRpenlyCi12MzErSGcxL1Y2UUQ5WC9O
NFZnZFZCUVpoeWpmQWdNQkFBRUNnWUIyUXdPVXNSc0lNcHJSd0o5dEpOZnZPN0c3Ci16NWkxL3pP
cmx4UEM0akhNUEJuSUJsSUN3Z2NPaExJNG9PTGRyNUg4UjEybjBWcW9UN0RSd1AzOTZpd2xKaXBG
Ci1pTzFoZURNbi84ejhMUEd3a0NLLytjazA0ck1Ea3N4V0lkTXdZS0JYdDlhaG5KL3hSTHpRMS8z
QUppQUdub2U1Ci0vUUxYUXdlb2ZkNG1tZnNqS1FKQkFPMkN3VDd1TVA2bk1qWGd0Vk1KcTVRUDhV
YmVDUzFzRU9QSkpiSHVEeEpCCi0vSGVQUUhCanE0a3pHNkNMNG9PN1QrNWZEdjRnK2ZJSUh6dVhl
clowaW1zQ1FRRGhmbWlUSWM5T3VjRUlmZzYvCi1tczBKaUtTbVdjK3FvaU9DdHJJTHVRdkZvTndK
UmNpUUFOcWVKczZ3cGFEdmV2U1V2QkxHZkcvN2IzSHZhRTVYCi1pcUJkQWtCRVFJdnAycWNIdHVK
TjYwb1FGN3BQclJrbnhVeWIyZThzbGpRWDRwSkFLK2d5TDE5VUxNQXhpQmRMCi1Wb2Q4VllxTnRK
RnBZKzZQcDlmWjF4anpiNkFMQWtFQTRKenJEQXcwbFFYQSszV2R1VXc0aXhPYWRyMmxkeUcwCi0z
NktlYmNEd3NmWk8xOG0wUTRVbVB6MEd5N3pnTjB3eHp1b2NoYXcwVzYraVBVaVlLT2xFWFFKQkFN
V1FyUGx1Ci1ycmlub1pTMmY4ZG9KOUJOTlVhK1JOcE11ZzZVWGM1NXFvVUpseWlYRWgrdHU0QWFN
T3R4dUdJeUMwc0FjdXc2Ci1YZEFQVlBYS2Q3TW5lNzA9Ci0tLS0tLUVORCBQUklWQVRFIEtFWS0t
LS0tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9y
ZXNvdXJjZXMvd2Via2l0Mmd0ay10ZXN0cy5ncmVzb3VyY2UueG1sIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvcmVzb3VyY2VzL3dlYmtpdDJndGstdGVzdHMuZ3Jlc291
cmNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGYxZTVhNi4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9yZXNvdXJjZXMvd2Vi
a2l0Mmd0ay10ZXN0cy5ncmVzb3VyY2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBA
Ci08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGdyZXNvdXJjZXM+Ci0g
IDxncmVzb3VyY2UgcHJlZml4PSIvb3JnL3dlYmtpdC93ZWJraXQyZ3RrL3Rlc3RzLyI+Ci0gICAg
PGZpbGUgYWxpYXM9ImxpbmstdGl0bGUuanMiPlNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL3Jlc291cmNlcy9saW5rLXRpdGxlLmpzPC9maWxlPgotICA8L2dyZXNvdXJjZT4K
LTwvZ3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5n
ZUxvZwppbmRleCA2ZDk2MjYwLi42OWJiMTk5IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cK
KysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzczIEBACisyMDE0LTAxLTAzICBDYXJs
b3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBN
b3ZlIGFsbCBHVEsvR09iamVjdCB1bml0IHRlc3RzIHRvIFRvb2xzL1Rlc3RXZWJLaXRBUEkKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNjM0MgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy9y
dW4tZ3RrLXRlc3RzOgorICAgICAgICAoVGVzdFJ1bm5lcik6CisgICAgICAgIChUZXN0UnVubmVy
Ll9faW5pdF9fKToKKyAgICAgICAgKFRlc3RSdW5uZXIuX3Rlc3RfcHJvZ3JhbXNfYmFzZV9kaXIp
OgorICAgICAgICAoVGVzdFJ1bm5lci5fZ2V0X3Rlc3RzKToKKyAgICAgICAgKFRlc3RSdW5uZXIu
X3J1bl90ZXN0KToKKyAgICAgICAgKFRlc3RSdW5uZXIucnVuX3Rlc3RzKToKKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9zdHlsZS9jaGVja2VyX3VuaXR0ZXN0LnB5OgorICAgICAgICAoQ2hlY2tlckRpc3BhdGNo
ZXJTa2lwVGVzdC50ZXN0X3Nob3VsZF9za2lwX3dpdGhfd2FybmluZyk6CisgICAgICAgICogVGVz
dFdlYktpdEFQSS9HTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdDJHdGsvQWNjZXNzaWJpbGl0eVRlc3RTZXJ2ZXIuY3BwOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvQWNjZXNzaWJpbGl0eVRlc3RTZXJ2
ZXIuY3BwLgorICAgICAgICAobG9hZENoYW5nZWRDYWxsYmFjayk6CisgICAgICAgIChtYWluKToK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvRE9NRE9NV2luZG93VGVz
dC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0RE9NRE9NV2luZG93VGVzdDo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYktpdERPTURPTVdpbmRvd1Rlc3Q6OndlYlBhZ2VGcm9tQXJncyk6CisgICAg
ICAgIChXZWJLaXRET01ET01XaW5kb3dUZXN0Ojp0ZXN0U2lnbmFscyk6CisgICAgICAgIChXZWJL
aXRET01ET01XaW5kb3dUZXN0Ojp0ZXN0RGlzcGF0Y2hFdmVudCk6CisgICAgICAgIChXZWJLaXRE
T01ET01XaW5kb3dUZXN0Ojp0ZXN0R2V0Q29tcHV0ZWRTdHlsZSk6CisgICAgICAgIChXZWJLaXRE
T01ET01XaW5kb3dUZXN0OjpydW5UZXN0KToKKyAgICAgICAgKHJlZ2lzdGVyVGVzdHMpOgorICAg
ICAgICAobG9hZGVkQ2FsbGJhY2spOgorICAgICAgICAoY2xpY2tlZENhbGxiYWNrKToKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvRE9NTm9kZVRlc3QuY3BwOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvRE9NTm9kZVRl
c3QuY3BwLgorICAgICAgICAoV2ViS2l0RE9NTm9kZVRlc3Q6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJLaXRET01Ob2RlVGVzdDo6d2ViUGFnZUZyb21BcmdzKToKKyAgICAgICAgKFdlYktpdERPTU5v
ZGVUZXN0Ojp0ZXN0SGllcmFyY2h5TmF2aWdhdGlvbik6CisgICAgICAgIChXZWJLaXRET01Ob2Rl
VGVzdDo6dGVzdEluc2VydGlvbik6CisgICAgICAgIChXZWJLaXRET01Ob2RlVGVzdDo6dGVzdFRh
Z05hbWVzKToKKyAgICAgICAgKFdlYktpdERPTU5vZGVUZXN0OjpydW5UZXN0KToKKyAgICAgICAg
KHJlZ2lzdGVyVGVzdHMpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0
ay9GcmFtZVRlc3QuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvRnJhbWVUZXN0LmNwcC4KKyAgICAgICAgKFdlYktpdEZyYW1lVGVzdDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYktpdEZyYW1lVGVzdDo6d2ViUGFnZUZyb21BcmdzKToKKyAgICAg
ICAgKFdlYktpdEZyYW1lVGVzdDo6dGVzdE1haW5GcmFtZSk6CisgICAgICAgIChXZWJLaXRGcmFt
ZVRlc3Q6OnRlc3RVUkkpOgorICAgICAgICAoV2ViS2l0RnJhbWVUZXN0Ojp0ZXN0SmF2YVNjcmlw
dENvbnRleHQpOgorICAgICAgICAoV2ViS2l0RnJhbWVUZXN0OjpydW5UZXN0KToKKyAgICAgICAg
KHJlZ2lzdGVyVGVzdHMpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0
ay9JbnNwZWN0b3JUZXN0U2VydmVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0luc3BlY3RvclRlc3RTZXJ2ZXIuY3BwLgorICAgICAgICAo
bG9hZENoYW5nZWRDYWxsYmFjayk6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdEF1dGhlbnRpY2F0aW9uLmNwcDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RBdXRoZW50aWNh
dGlvbi5jcHAuCisgICAgICAgICh0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uUmVxdWVzdCk6Cisg
ICAgICAgICh0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uQ2FuY2VsKToKKyAgICAgICAgKHRlc3RX
ZWJWaWV3QXV0aGVudGljYXRpb25Mb2FkQ2FuY2VsbGVkKToKKyAgICAgICAgKHRlc3RXZWJWaWV3
QXV0aGVudGljYXRpb25GYWlsdXJlKToKKyAgICAgICAgKHRlc3RXZWJWaWV3QXV0aGVudGljYXRp
b25Ob0NyZWRlbnRpYWwpOgorICAgICAgICAodGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvblN0b3Jh
Z2UpOgorICAgICAgICAodGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvblN1Y2Nlc3MpOgorICAgICAg
ICAoc2VydmVyQ2FsbGJhY2spOgorICAgICAgICAoYmVmb3JlQWxsKToKKyAgICAgICAgKGFmdGVy
QWxsKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdEJhY2tG
b3J3YXJkTGlzdC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9UZXN0QmFja0ZvcndhcmRMaXN0LmNwcC4KKyAgICAgICAgKHNlcnZlckNhbGxi
YWNrKToKKyAgICAgICAgKHRlc3RCYWNrRm9yd2FyZExpc3ROYXZpZ2F0aW9uKToKKyAgICAgICAg
KHRlc3RCYWNrRm9yd2FyZExpc3RMaW1pdEFuZENhY2hlKToKKyAgICAgICAgKGJlZm9yZUFsbCk6
CisgICAgICAgIChhZnRlckFsbCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXQyR3RrL1Rlc3RDb250ZXh0TWVudS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0Q29udGV4dE1lbnUuY3BwLgorICAgICAgICAodGVz
dENvbnRleHRNZW51RGVmYXVsdE1lbnUpOgorICAgICAgICAodGVzdENvbnRleHRNZW51UG9wdWxh
dGVNZW51KToKKyAgICAgICAgKHRlc3RDb250ZXh0TWVudUN1c3RvbU1lbnUpOgorICAgICAgICAo
dGVzdENvbnRleHRNZW51RGlzYWJsZU1lbnUpOgorICAgICAgICAodGVzdENvbnRleHRNZW51U3Vi
TWVudSk6CisgICAgICAgICh0ZXN0Q29udGV4dE1lbnVEaXNtaXNzZWQpOgorICAgICAgICAodGVz
dENvbnRleHRNZW51U21hcnRTZXBhcmF0b3JzKToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAg
ICAgIChhZnRlckFsbCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3Rr
L1Rlc3RDb29raWVNYW5hZ2VyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RDb29raWVNYW5hZ2VyLmNwcC4KKyAgICAgICAgKHRlc3RD
b29raWVNYW5hZ2VyQWNjZXB0UG9saWN5KToKKyAgICAgICAgKHRlc3RDb29raWVNYW5hZ2VyRGVs
ZXRlQ29va2llcyk6CisgICAgICAgICh0ZXN0Q29va2llTWFuYWdlckNvb2tpZXNDaGFuZ2VkKToK
KyAgICAgICAgKHRlc3RDb29raWVNYW5hZ2VyUGVyc2lzdGVudFN0b3JhZ2UpOgorICAgICAgICAo
c2VydmVyQ2FsbGJhY2spOgorICAgICAgICAoYmVmb3JlQWxsKToKKyAgICAgICAgKGFmdGVyQWxs
KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdERPTURPTVdp
bmRvdy5jcHA6IEFkZGVkLgorICAgICAgICAoc2lnbmFsc05vdGlmeUNhbGxiYWNrKToKKyAgICAg
ICAgKGRpc3BhdGNoRXZlbnROb3RpZnlDYWxsYmFjayk6CisgICAgICAgICh0ZXN0V2ViS2l0RE9N
RE9NV2luZG93U2lnbmFscyk6CisgICAgICAgICh0ZXN0V2ViS2l0RE9NRE9NV2luZG93RGlzcGF0
Y2hFdmVudCk6CisgICAgICAgICh0ZXN0V2ViS2l0RE9NRE9NV2luZG93R2V0Q29tcHV0ZWRTdHls
ZSk6CisgICAgICAgIChiZWZvcmVBbGwpOgorICAgICAgICAoYWZ0ZXJBbGwpOgorICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0RE9NTm9kZS5jcHA6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0RE9NTm9kZS5j
cHAuCisgICAgICAgICh0ZXN0V2ViS2l0RE9NTm9kZUhpZXJhcmNoeU5hdmlnYXRpb24pOgorICAg
ICAgICAodGVzdFdlYktpdERPTU5vZGVJbnNlcnRpb24pOgorICAgICAgICAodGVzdFdlYktpdERP
TU5vZGVUYWdOYW1lcyk6CisgICAgICAgIChiZWZvcmVBbGwpOgorICAgICAgICAoYWZ0ZXJBbGwp
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0RG93bmxvYWRz
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L1Rlc3REb3dubG9hZHMuY3BwLgorICAgICAgICAodGVzdERvd25sb2FkTG9jYWxGaWxlKToKKyAg
ICAgICAgKHRlc3REb3dubG9hZExvY2FsRmlsZUVycm9yKToKKyAgICAgICAgKHNlcnZlckNhbGxi
YWNrKToKKyAgICAgICAgKHRlc3REb3dubG9hZFJlbW90ZUZpbGUpOgorICAgICAgICAodGVzdERv
d25sb2FkUmVtb3RlRmlsZUVycm9yKToKKyAgICAgICAgKHRlc3RXZWJWaWV3RG93bmxvYWRVUkkp
OgorICAgICAgICAodGVzdFBvbGljeVJlc3BvbnNlRG93bmxvYWQpOgorICAgICAgICAoYmVmb3Jl
QWxsKToKKyAgICAgICAgKGFmdGVyQWxsKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdDJHdGsvVGVzdEZyYW1lLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RGcmFtZS5jcHAuCisgICAgICAgICh3ZWJraXRGcmFt
ZVRlc3RSdW4pOgorICAgICAgICAodGVzdFdlYktpdEZyYW1lTWFpbkZyYW1lKToKKyAgICAgICAg
KHRlc3RXZWJLaXRGcmFtZVVSSSk6CisgICAgICAgICh0ZXN0V2ViS2l0RnJhbWVKYXZhU2NyaXB0
Q29udGV4dCk6CisgICAgICAgIChiZWZvcmVBbGwpOgorICAgICAgICAoYWZ0ZXJBbGwpOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0SW5zcGVjdG9yLmNwcDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RJ
bnNwZWN0b3IuY3BwLgorICAgICAgICAodGVzdEluc3BlY3RvckRlZmF1bHQpOgorICAgICAgICAo
dGVzdEluc3BlY3Rvck1hbnVhbEF0dGFjaERldGFjaCk6CisgICAgICAgICh0ZXN0SW5zcGVjdG9y
Q3VzdG9tQ29udGFpbmVyRGVzdHJveWVkKToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAg
IChhZnRlckFsbCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rl
c3RJbnNwZWN0b3JTZXJ2ZXIuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvVGVzdEluc3BlY3RvclNlcnZlci5jcHAuCisgICAgICAgIChzdG9w
VGVzdFNlcnZlcik6CisgICAgICAgIChzaWdBYm9ydEhhbmRsZXIpOgorICAgICAgICAodGVzdFNl
cnZlck1vbml0b3JUaHJlYWRGdW5jKToKKyAgICAgICAgKHN0YXJ0VGVzdFNlcnZlck1vbml0b3Ip
OgorICAgICAgICAoc3RhcnRUZXN0U2VydmVyKToKKyAgICAgICAgKHRlc3RJbnNwZWN0b3JTZXJ2
ZXJQYWdlTGlzdCk6CisgICAgICAgICh0ZXN0UmVtb3RlRGVidWdnaW5nTWVzc2FnZSk6CisgICAg
ICAgIChvcGVuUmVtb3RlRGVidWdnaW5nU2Vzc2lvbik6CisgICAgICAgIChzZW5kSW5jb21wbGV0
ZVJlcXVlc3QpOgorICAgICAgICAoYmVmb3JlQWxsKToKKyAgICAgICAgKGFmdGVyQWxsKToKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdExvYWRlckNsaWVudC5j
cHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9U
ZXN0TG9hZGVyQ2xpZW50LmNwcC4KKyAgICAgICAgKHRlc3RMb2FkaW5nU3RhdHVzKToKKyAgICAg
ICAgKHRlc3RMb2FkaW5nRXJyb3IpOgorICAgICAgICAoYXNzZXJ0Tm9ybWFsTG9hZEhhcHBlbmVk
KToKKyAgICAgICAgKHRlc3RMb2FkSHRtbCk6CisgICAgICAgICh0ZXN0TG9hZEFsdGVybmF0ZUhU
TUwpOgorICAgICAgICAodGVzdExvYWRQbGFpblRleHQpOgorICAgICAgICAodGVzdExvYWRSZXF1
ZXN0KToKKyAgICAgICAgKExvYWRTdG9wVHJhY2tpbmdUZXN0Ojpsb2FkQ29tbWl0dGVkKToKKyAg
ICAgICAgKExvYWRTdG9wVHJhY2tpbmdUZXN0Ojpsb2FkRmFpbGVkKToKKyAgICAgICAgKHRlc3RM
b2FkQ2FuY2VsbGVkKToKKyAgICAgICAgKHRlc3RXZWJWaWV3VGl0bGUpOgorICAgICAgICAodGVz
dFdlYlZpZXdSZWxvYWQpOgorICAgICAgICAodGVzdExvYWRQcm9ncmVzcyk6CisgICAgICAgICh0
ZXN0V2ViVmlld0hpc3RvcnlMb2FkKToKKyAgICAgICAgKHRlc3RXZWJWaWV3QWN0aXZlVVJJKToK
KyAgICAgICAgKHRlc3RXZWJWaWV3SXNMb2FkaW5nKToKKyAgICAgICAgKHRlc3RXZWJQYWdlVVJJ
KToKKyAgICAgICAgKHRlc3RVUklSZXF1ZXN0SFRUUEhlYWRlcnMpOgorICAgICAgICAoc2VydmVy
Q2FsbGJhY2spOgorICAgICAgICAoYmVmb3JlQWxsKToKKyAgICAgICAgKGFmdGVyQWxsKToKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFByaW50aW5nLmNwcDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RQ
cmludGluZy5jcHAuCisgICAgICAgICh0ZXN0UHJpbnRPcGVyYXRpb25QcmludFNldHRpbmdzKToK
KyAgICAgICAgKHdlYlZpZXdQcmludENhbGxiYWNrKToKKyAgICAgICAgKHRlc3RXZWJWaWV3UHJp
bnQpOgorICAgICAgICAodGVzdFByaW50T3BlcmF0aW9uUHJpbnQpOgorICAgICAgICAodGVzdFBy
aW50T3BlcmF0aW9uRXJyb3JzKToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAgIChhZnRl
ckFsbCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RSZXNv
dXJjZXMuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvVGVzdFJlc291cmNlcy5jcHAuCisgICAgICAgICh0ZXN0V2ViVmlld1Jlc291cmNlcyk6
CisgICAgICAgICh0ZXN0V2ViUmVzb3VyY2VMb2FkaW5nKToKKyAgICAgICAgKHRlc3RXZWJSZXNv
dXJjZVJlc3BvbnNlKToKKyAgICAgICAgKHRlc3RXZWJSZXNvdXJjZU1pbWVUeXBlKToKKyAgICAg
ICAgKHRlc3RXZWJSZXNvdXJjZVN1Z2dlc3RlZEZpbGVuYW1lKToKKyAgICAgICAgKHRlc3RXZWJS
ZXNvdXJjZUFjdGl2ZVVSSSk6CisgICAgICAgICh0ZXN0V2ViUmVzb3VyY2VHZXREYXRhKToKKyAg
ICAgICAgKHRlc3RXZWJWaWV3UmVzb3VyY2VzSGlzdG9yeUNhY2hlKToKKyAgICAgICAgKHRlc3RX
ZWJSZXNvdXJjZVNlbmRSZXF1ZXN0KToKKyAgICAgICAgKGFkZENhY2hlSFRUUEhlYWRlcnNUb1Jl
c3BvbnNlKToKKyAgICAgICAgKHNlcnZlckNhbGxiYWNrKToKKyAgICAgICAgKGJlZm9yZUFsbCk6
CisgICAgICAgIChhZnRlckFsbCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXQyR3RrL1Rlc3RTU0wuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvVGVzdFNTTC5jcHAuCisgICAgICAgICh0ZXN0U1NMKToKKyAgICAgICAg
KHRlc3RJbnNlY3VyZUNvbnRlbnQpOgorICAgICAgICAodGVzdFRMU0Vycm9yc1BvbGljeSk6Cisg
ICAgICAgICh0ZXN0TG9hZEZhaWxlZFdpdGhUTFNFcnJvcnMpOgorICAgICAgICAoaHR0cHNTZXJ2
ZXJDYWxsYmFjayk6CisgICAgICAgIChodHRwU2VydmVyQ2FsbGJhY2spOgorICAgICAgICAoYmVm
b3JlQWxsKToKKyAgICAgICAgKGFmdGVyQWxsKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdDJHdGsvVGVzdFVJQ2xpZW50LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RVSUNsaWVudC5jcHAuCisgICAgICAgICh0
ZXN0V2ViVmlld0NyZWF0ZVJlYWR5Q2xvc2UpOgorICAgICAgICAoY2hlY2tNaW1lVHlwZUZvckZp
bHRlcik6CisgICAgICAgICh0ZXN0V2ViVmlld0FsbG93TW9kYWxEaWFsb2dzKToKKyAgICAgICAg
KHRlc3RXZWJWaWV3RGlzYWxsb3dNb2RhbERpYWxvZ3MpOgorICAgICAgICAodGVzdFdlYlZpZXdK
YXZhU2NyaXB0RGlhbG9ncyk6CisgICAgICAgICh0ZXN0V2ViVmlld1dpbmRvd1Byb3BlcnRpZXMp
OgorICAgICAgICAodGVzdFdlYlZpZXdNb3VzZVRhcmdldCk6CisgICAgICAgICh0ZXN0V2ViVmll
d1Blcm1pc3Npb25SZXF1ZXN0cyk6CisgICAgICAgICh0ZXN0V2ViVmlld0ZpbGVDaG9vc2VyUmVx
dWVzdCk6CisgICAgICAgIChiZWZvcmVBbGwpOgorICAgICAgICAoYWZ0ZXJBbGwpOgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViRXh0ZW5zaW9ucy5jcHA6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0
V2ViRXh0ZW5zaW9ucy5jcHAuCisgICAgICAgICh0ZXN0V2ViRXh0ZW5zaW9uR2V0VGl0bGUpOgor
ICAgICAgICAoZG9jdW1lbnRMb2FkZWRDYWxsYmFjayk6CisgICAgICAgICh0ZXN0RG9jdW1lbnRM
b2FkZWRTaWduYWwpOgorICAgICAgICAod2ViUHJvY2Vzc0NyYXNoZWRDYWxsYmFjayk6CisgICAg
ICAgICh0ZXN0V2ViS2l0V2ViVmlld1Byb2Nlc3NDcmFzaGVkKToKKyAgICAgICAgKHRlc3RXZWJF
eHRlbnNpb25XaW5kb3dPYmplY3RDbGVhcmVkKToKKyAgICAgICAgKHNjcmlwdERpYWxvZ0NhbGxi
YWNrKToKKyAgICAgICAgKHJ1bkphdmFTY3JpcHRJbklzb2xhdGVkV29ybGRGaW5pc2hlZENhbGxi
YWNrKToKKyAgICAgICAgKHRlc3RXZWJFeHRlbnNpb25Jc29sYXRlZFdvcmxkKToKKyAgICAgICAg
KGJlZm9yZUFsbCk6CisgICAgICAgIChhZnRlckFsbCk6CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5LmNwcDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRBY2Nl
c3NpYmlsaXR5LmNwcC4KKyAgICAgICAgKHN0b3BUZXN0U2VydmVyKToKKyAgICAgICAgKHNpZ0Fi
b3J0SGFuZGxlcik6CisgICAgICAgICh0ZXN0U2VydmVyTW9uaXRvclRocmVhZEZ1bmMpOgorICAg
ICAgICAoc3RhcnRUZXN0U2VydmVyTW9uaXRvcik6CisgICAgICAgIChzdGFydFRlc3RTZXJ2ZXIp
OgorICAgICAgICAoY2hlY2tBdHNwaUFjY2Vzc2libGUpOgorICAgICAgICAoZmluZFRlc3RTZXJ2
ZXJBcHBsaWNhdGlvbik6CisgICAgICAgICh0ZXN0QXRzcGlCYXNpY0hpZXJhcmNoeSk6CisgICAg
ICAgIChiZWZvcmVBbGwpOgorICAgICAgICAoYWZ0ZXJBbGwpOgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlLmNwcDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJL
aXRGYXZpY29uRGF0YWJhc2UuY3BwLgorICAgICAgICAoc2VydmVyQ2FsbGJhY2spOgorICAgICAg
ICAodGVzdE5vdEluaXRpYWxpemVkKToKKyAgICAgICAgKHRlc3RTZXREaXJlY3RvcnkpOgorICAg
ICAgICAodGVzdENsZWFyRGF0YWJhc2UpOgorICAgICAgICAodGVzdEdldEZhdmljb24pOgorICAg
ICAgICAodGVzdEdldEZhdmljb25VUkkpOgorICAgICAgICAodGVzdFdlYlZpZXdGYXZpY29uKToK
KyAgICAgICAgKHRlc3RGYXZpY29uRGF0YWJhc2UpOgorICAgICAgICAoYmVmb3JlQWxsKToKKyAg
ICAgICAgKHdlYmtpdEZhdmljb25EYXRhYmFzZUZpbmFsaXplZENhbGxiYWNrKToKKyAgICAgICAg
KGFmdGVyQWxsKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVz
dFdlYktpdEZpbmRDb250cm9sbGVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxlci5jcHAuCisgICAg
ICAgICh0ZXN0RmluZENvbnRyb2xsZXJUZXh0Rm91bmQpOgorICAgICAgICAodGVzdEZpbmRDb250
cm9sbGVyVGV4dE5vdEZvdW5kKToKKyAgICAgICAgKHRlc3RGaW5kQ29udHJvbGxlck1hdGNoQ291
bnQpOgorICAgICAgICAodGVzdEZpbmRDb250cm9sbGVyTWF4TWF0Y2hDb3VudCk6CisgICAgICAg
ICh0ZXN0RmluZENvbnRyb2xsZXJOZXh0KToKKyAgICAgICAgKHRlc3RGaW5kQ29udHJvbGxlclBy
ZXZpb3VzKToKKyAgICAgICAgKHRlc3RGaW5kQ29udHJvbGxlckNvdW50ZWRNYXRjaGVzKToKKyAg
ICAgICAgKHRlc3RGaW5kQ29udHJvbGxlck9wdGlvbnMpOgorICAgICAgICAodGVzdEZpbmRDb250
cm9sbGVySGlkZSk6CisgICAgICAgICh0ZXN0RmluZENvbnRyb2xsZXJJbnN0YW5jZSk6CisgICAg
ICAgICh0ZXN0RmluZENvbnRyb2xsZXJHZXR0ZXJzKToKKyAgICAgICAgKGJlZm9yZUFsbCk6Cisg
ICAgICAgIChhZnRlckFsbCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQy
R3RrL1Rlc3RXZWJLaXRQb2xpY3lDbGllbnQuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFBvbGljeUNsaWVudC5jcHAuCisg
ICAgICAgICh0ZXN0TmF2aWdhdGlvblBvbGljeSk6CisgICAgICAgICh0ZXN0UmVzcG9uc2VQb2xp
Y3kpOgorICAgICAgICAoY3JlYXRlQ2FsbGJhY2spOgorICAgICAgICAodGVzdE5ld1dpbmRvd1Bv
bGljeSk6CisgICAgICAgIChzZXJ2ZXJDYWxsYmFjayk6CisgICAgICAgIChiZWZvcmVBbGwpOgor
ICAgICAgICAoYWZ0ZXJBbGwpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Mkd0ay9UZXN0V2ViS2l0U2V0dGluZ3MuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFNldHRpbmdzLmNwcC4KKyAgICAgICAg
KHRlc3RXZWJLaXRTZXR0aW5ncyk6CisgICAgICAgICh0ZXN0V2ViS2l0U2V0dGluZ3NOZXdXaXRo
U2V0dGluZ3MpOgorICAgICAgICAoY29udmVydFdlYlZpZXdNYWluUmVzb3VyY2VEYXRhVG9DU3Ry
aW5nKToKKyAgICAgICAgKGFzc2VydFRoYXRVc2VyQWdlbnRJc1NlbnRJbkhlYWRlcnMpOgorICAg
ICAgICAodGVzdFdlYktpdFNldHRpbmdzVXNlckFnZW50KToKKyAgICAgICAgKHNlcnZlckNhbGxi
YWNrKToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAgIChhZnRlckFsbCk6CisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRWZXJzaW9uLmNwcDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RX
ZWJLaXRWZXJzaW9uLmNwcC4KKyAgICAgICAgKHRlc3RXZWJLaXRWZXJzaW9uKToKKyAgICAgICAg
KHRlc3RXZWJLaXRDaGVja1ZlcnNpb24pOgorICAgICAgICAoYmVmb3JlQWxsKToKKyAgICAgICAg
KGFmdGVyQWxsKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVz
dFdlYktpdFdlYkNvbnRleHQuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYkNvbnRleHQuY3BwLgorICAgICAgICAodGVz
dFdlYkNvbnRleHREZWZhdWx0KToKKyAgICAgICAgKHRlc3RXZWJDb250ZXh0R2V0UGx1Z2lucyk6
CisgICAgICAgICh0ZXN0V2ViQ29udGV4dFVSSVNjaGVtZSk6CisgICAgICAgICh0ZXN0V2ViQ29u
dGV4dFNwZWxsQ2hlY2tlcik6CisgICAgICAgICh0ZXN0V2ViQ29udGV4dExhbmd1YWdlcyk6Cisg
ICAgICAgIChzZXJ2ZXJDYWxsYmFjayk6CisgICAgICAgICh0ZXN0V2ViQ29udGV4dFNlY3VyaXR5
UG9saWN5KToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAgIChhZnRlckFsbCk6CisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRXZWJWaWV3LmNw
cDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rl
c3RXZWJLaXRXZWJWaWV3LmNwcC4KKyAgICAgICAgKHRlc3RXZWJWaWV3RGVmYXVsdENvbnRleHQp
OgorICAgICAgICAodGVzdFdlYlZpZXdDdXN0b21DaGFyc2V0KToKKyAgICAgICAgKHRlc3RXZWJW
aWV3U2V0dGluZ3MpOgorICAgICAgICAodGVzdFdlYlZpZXdab29tTGV2ZWwpOgorICAgICAgICAo
dGVzdFdlYlZpZXdSdW5KYXZhU2NyaXB0KToKKyAgICAgICAgKHRlc3RXZWJWaWV3RnVsbFNjcmVl
bik6CisgICAgICAgICh0ZXN0V2ViVmlld0NhblNob3dNSU1FVHlwZSk6CisgICAgICAgICh0ZXN0
V2ViVmlld1N1Ym1pdEZvcm0pOgorICAgICAgICAodGVzdFdlYlZpZXdTYXZlKToKKyAgICAgICAg
KHRlc3RXZWJWaWV3TW9kZSk6CisgICAgICAgICh0ZXN0V2ViVmlld1BhZ2VWaXNpYmlsaXR5KToK
KyAgICAgICAgKHRlc3RXZWJWaWV3U25hcHNob3QpOgorICAgICAgICAoYmVmb3JlQWxsKToKKyAg
ICAgICAgKGFmdGVyQWxsKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJH
dGsvVGVzdFdlYktpdFdlYlZpZXdHcm91cC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlld0dyb3VwLmNwcC4KKyAg
ICAgICAgKHRlc3RXZWJWaWV3R3JvdXBEZWZhdWx0KToKKyAgICAgICAgKHRlc3RXZWJWaWV3R3Jv
dXBOZXdHcm91cCk6CisgICAgICAgICh0ZXN0V2ViVmlld05ld1dpdGhHcm91cCk6CisgICAgICAg
ICh0ZXN0V2ViVmlld0dyb3VwU2V0dGluZ3MpOgorICAgICAgICAoaXNTdHlsZVNoZWV0SW5qZWN0
ZWRGb3JVUkxBdFBhdGgpOgorICAgICAgICAoZmlsbFVSTExpc3RGcm9tUGF0aHMpOgorICAgICAg
ICAocmVtb3ZlT2xkSW5qZWN0ZWRTdHlsZVNoZWV0c0FuZFJlc2V0TGlzdHMpOgorICAgICAgICAo
dGVzdFdlYlZpZXdHcm91cEluamVjdGVkU3R5bGVTaGVldCk6CisgICAgICAgIChzZXJ2ZXJDYWxs
YmFjayk6CisgICAgICAgIChiZWZvcmVBbGwpOgorICAgICAgICAoYWZ0ZXJBbGwpOgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViVmlld0VkaXRvci5jcHA6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0
V2ViVmlld0VkaXRvci5jcHAuCisgICAgICAgICh0ZXN0V2ViVmlld0VkaXRvckN1dENvcHlQYXN0
ZU5vbkVkaXRhYmxlKToKKyAgICAgICAgKHRlc3RXZWJWaWV3RWRpdG9yQ3V0Q29weVBhc3RlRWRp
dGFibGUpOgorICAgICAgICAodGVzdFdlYlZpZXdFZGl0b3JTZWxlY3RBbGxOb25FZGl0YWJsZSk6
CisgICAgICAgICh0ZXN0V2ViVmlld0VkaXRvclNlbGVjdEFsbEVkaXRhYmxlKToKKyAgICAgICAg
KGJlZm9yZUFsbCk6CisgICAgICAgIChhZnRlckFsbCk6CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXQyR3RrL1dlYkV4dGVuc2lvblRlc3QuY3BwOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViRXh0ZW5zaW9uVGVzdC5jcHAu
CisgICAgICAgIChEZWxheWVkU2lnbmFsOjpEZWxheWVkU2lnbmFsKToKKyAgICAgICAgKGVtaXRE
b2N1bWVudExvYWRlZCk6CisgICAgICAgIChkb2N1bWVudExvYWRlZENhbGxiYWNrKToKKyAgICAg
ICAgKGVtaXRVUklDaGFuZ2VkKToKKyAgICAgICAgKHVyaUNoYW5nZWRDYWxsYmFjayk6CisgICAg
ICAgIChzZW5kUmVxdWVzdENhbGxiYWNrKToKKyAgICAgICAgKHBhZ2VDcmVhdGVkQ2FsbGJhY2sp
OgorICAgICAgICAoZWNob0NhbGxiYWNrKToKKyAgICAgICAgKHdpbmRvd09iamVjdENsZWFyZWQp
OgorICAgICAgICAoZ2V0V2ViUGFnZSk6CisgICAgICAgIChtZXRob2RDYWxsQ2FsbGJhY2spOgor
ICAgICAgICAod2Via2l0X3dlYl9leHRlbnNpb25faW5pdGlhbGl6ZSk6CisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1dlYlByb2Nlc3NUZXN0LmNwcDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlByb2Nlc3NUZXN0
LmNwcC4KKyAgICAgICAgKHRlc3RzTWFwKToKKyAgICAgICAgKFdlYlByb2Nlc3NUZXN0OjphZGQp
OgorICAgICAgICAoV2ViUHJvY2Vzc1Rlc3Q6OmNyZWF0ZSk6CisgICAgICAgIChtZXRob2RDYWxs
Q2FsbGJhY2spOgorICAgICAgICAod2Via2l0X3dlYl9leHRlbnNpb25faW5pdGlhbGl6ZSk6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1dlYlByb2Nlc3NUZXN0Lmg6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJQ
cm9jZXNzVGVzdC5oLgorICAgICAgICAoV2ViUHJvY2Vzc1Rlc3Q6On5XZWJQcm9jZXNzVGVzdCk6
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL3Jlc291cmNlcy9saW5r
LXRpdGxlLmpzOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvcmVzb3VyY2VzL2xpbmstdGl0bGUuanMuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXQyR3RrL3Jlc291cmNlcy90ZXN0LWNlcnQucGVtOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3QtY2VydC5w
ZW0uCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL3Jlc291cmNlcy90
ZXN0LWtleS5wZW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9yZXNvdXJjZXMvdGVzdC1rZXkucGVtLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Mkd0ay9yZXNvdXJjZXMvd2Via2l0Mmd0ay10ZXN0cy5ncmVzb3VyY2UueG1s
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvcmVz
b3VyY2VzL3dlYmtpdDJndGstdGVzdHMuZ3Jlc291cmNlLnhtbC4KKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9yZXNvdXJjZXMvYmxhbmsuaWNvOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYktpdC9ndGsvdGVzdHMvcmVzb3VyY2VzL2JsYW5rLmljby4KKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9yZXNvdXJjZXMvdGVzdC5odG1sOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3QuaHRtbC4KKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9yZXNvdXJjZXMvdGVzdC5vZ2c6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy9yZXNvdXJjZXMvdGVzdC5vZ2cuCisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvcmVzb3VyY2VzL3Rlc3QucGRm
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3QucGRm
LgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Jlc291cmNlcy90ZXN0
LnR4dDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Jlc291cmNlcy90ZXN0
LnR4dC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0X3V0aWxz
LmM6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0X3V0aWxzLmMuCisg
ICAgICAgICh0ZXN0dXRpbHNfcmVsYXRpdmVfY2hkaXIpOgorICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RfdXRpbHMuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJL
aXQvZ3RrL3Rlc3RzL3Rlc3RfdXRpbHMuaC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdEd0ay90ZXN0YXBwbGljYXRpb25jYWNoZS5jOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YktpdC9ndGsvdGVzdHMvdGVzdGFwcGxpY2F0aW9uY2FjaGUuYy4KKyAgICAgICAgKHRlc3RfYXBw
bGljYXRpb25fY2FjaGVfbWF4aW11bV9zaXplKToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RhdGsuYzogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhdGsuYy4KKyAgICAgICAgKGdldFdlYkFyZWFPYmpl
Y3QpOgorICAgICAgICAodGV4dENhcmV0TW92ZWRDYWxsYmFjayk6CisgICAgICAgICh0ZXN0V2Vi
a2l0QXRrQ2FyZXRPZmZzZXRzKToKKyAgICAgICAgKHRlc3RXZWJraXRBdGtDYXJldE9mZnNldHNB
bmRFeHRyYW5vdXNXaGl0ZVNwYWNlcyk6CisgICAgICAgICh0ZXN0V2Via2l0QXRrQ29tYm9Cb3gp
OgorICAgICAgICAodXBkYXRlTG9hZGluZ0V2ZW50c1Jlc3VsdCk6CisgICAgICAgIChkb2N1bWVu
dExvYWRpbmdFdmVudENhbGxiYWNrKToKKyAgICAgICAgKHRlc3RXZWJraXRBdGtEb2N1bWVudExv
YWRpbmdFdmVudHMpOgorICAgICAgICAodGVzdFdlYmtpdEF0a0VtYmVkZGVkT2JqZWN0cyk6Cisg
ICAgICAgICh0ZXN0V2Via2l0QXRrR2V0SGVhZGVyc0luVGFibGUpOgorICAgICAgICAoY29tcEF0
a0F0dHJpYnV0ZSk6CisgICAgICAgIChjb21wQXRrQXR0cmlidXRlTmFtZSk6CisgICAgICAgIChh
dGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVOYW1lSGFzVmFsdWUpOgorICAgICAgICAoYXRrQXR0cmli
dXRlU2V0Q29udGFpbnNBdHRyaWJ1dGVOYW1lKToKKyAgICAgICAgKGF0a0F0dHJpYnV0ZVNldEF0
dHJpYnV0ZUhhc1ZhbHVlKToKKyAgICAgICAgKGF0a0F0dHJpYnV0ZVNldEFyZUVxdWFsKToKKyAg
ICAgICAgKHRlc3RXZWJraXRBdGtUZXh0QXR0cmlidXRlcyk6CisgICAgICAgICh0ZXh0U2VsZWN0
aW9uQ2hhbmdlZENhbGxiYWNrKToKKyAgICAgICAgKHRlc3RXZWJraXRBdGtUZXh0U2VsZWN0aW9u
cyk6CisgICAgICAgICh0ZXN0V2Via2l0QXRrR2V0RXh0ZW50cyk6CisgICAgICAgICh0ZXN0V2Vi
a2l0QXRrTGF5b3V0QW5kRGF0YVRhYmxlcyk6CisgICAgICAgICh0ZXN0V2Via2l0QXRrTGlua3NX
aXRoSW5saW5lSW1hZ2VzKToKKyAgICAgICAgKHRlc3RXZWJraXRBdGtIeXBlcnRleHRBbmRIeXBl
cmxpbmtzKToKKyAgICAgICAgKHRlc3RXZWJraXRBdGtMaXN0c09mSXRlbXMpOgorICAgICAgICAo
dGV4dENoYW5nZWRDYik6CisgICAgICAgICh0ZXN0V2Via2l0QXRrVGV4dENoYW5nZWROb3RpZmlj
YXRpb25zKToKKyAgICAgICAgKHRlc3RXZWJraXRBdGtQYXJlbnRGb3JSb290T2JqZWN0KToKKyAg
ICAgICAgKHRlc3RXZWJraXRBdGtTZXRQYXJlbnRGb3JPYmplY3QpOgorICAgICAgICAoaW5pdGlh
bGl6ZVRlc3RpbmdGcmFtZXdvcmspOgorICAgICAgICAobWFpbik6CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGF0a3JvbGVzLmM6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXRrcm9sZXMuYy4KKyAgICAgICAgKGZpbmlzaF9sb2Fk
aW5nKToKKyAgICAgICAgKGF0a19yb2xlc19maXh0dXJlX3NldHVwKToKKyAgICAgICAgKGF0a19y
b2xlc19maXh0dXJlX3RlYXJkb3duKToKKyAgICAgICAgKGdldF9jaGlsZF9hbmRfdGVzdF9yb2xl
KToKKyAgICAgICAgKHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9kb2N1bWVudF9mcmFtZSk6Cisg
ICAgICAgICh0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfaGVhZGluZyk6CisgICAgICAgICh0ZXN0
X3dlYmtpdF9hdGtfZ2V0X3JvbGVfaW1hZ2UpOgorICAgICAgICAodGVzdF93ZWJraXRfYXRrX2dl
dF9yb2xlX2xpbmspOgorICAgICAgICAodGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xpc3RfYW5k
X2l0ZW0pOgorICAgICAgICAodGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX3BhcmFncmFwaCk6Cisg
ICAgICAgICh0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfc2VjdGlvbik6CisgICAgICAgICh0ZXN0
X3dlYmtpdF9hdGtfZ2V0X3JvbGVfdGFibGUpOgorICAgICAgICAodGVzdF93ZWJraXRfYXRrX2dl
dF9yb2xlX3NlcGFyYXRvcik6CisgICAgICAgICh0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfY29t
Ym9ib3gpOgorICAgICAgICAodGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2Zvcm0pOgorICAgICAg
ICAodGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2NoZWNrX2JveCk6CisgICAgICAgICh0ZXN0X3dl
YmtpdF9hdGtfZ2V0X3JvbGVfZW50cnkpOgorICAgICAgICAodGVzdF93ZWJraXRfYXRrX2dldF9y
b2xlX2xhYmVsKToKKyAgICAgICAgKHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9saXN0Ym94KToK
KyAgICAgICAgKHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9wYXNzd29yZF90ZXh0KToKKyAgICAg
ICAgKHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9wdXNoX2J1dHRvbik6CisgICAgICAgICh0ZXN0
X3dlYmtpdF9hdGtfZ2V0X3JvbGVfcmFkaW9fYnV0dG9uKToKKyAgICAgICAgKG1haW4pOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3Rjb250ZXh0bWVudS5jOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGNvbnRleHRtZW51LmMuCisg
ICAgICAgICh0ZXN0SW5mb05ldyk6CisgICAgICAgICh0ZXN0SW5mb0Rlc3Ryb3kpOgorICAgICAg
ICAoY29udGV4dE1lbnVGaXh0dXJlU2V0dXApOgorICAgICAgICAoY29udGV4dE1lbnVGaXh0dXJl
VGVhcmRvd24pOgorICAgICAgICAoY2hlY2tBY3Rpb24pOgorICAgICAgICAoY2hlY2tBY3Rpb25X
aXRoU3VibWVudSk6CisgICAgICAgIChjaGVja1NlcGFyYXRvcik6CisgICAgICAgIChjb250ZXh0
TWVudUNhbGxiYWNrKToKKyAgICAgICAgKHB1c2hFdmVudCk6CisgICAgICAgIChsb2FkU3RhdHVz
Q2FsbGJhY2spOgorICAgICAgICAobWFwRXZlbnRDYWxsYmFjayk6CisgICAgICAgICh0ZXN0Q29u
dGV4dE1lbnUpOgorICAgICAgICAoY29udGV4dE1lbnVDdXN0b21JdGVtQ2FsbGJhY2spOgorICAg
ICAgICAodGVzdENvbnRleHRNZW51Q3VzdG9tSXRlbSk6CisgICAgICAgIChtYWluKToKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0Y29weWFuZHBhc3RlLmM6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0Y29weWFuZHBhc3RlLmMuCisg
ICAgICAgICh0ZXN0X2luZm9fbmV3KToKKyAgICAgICAgKHRlc3RfaW5mb19kZXN0cm95KToKKyAg
ICAgICAgKGNvcHlfYW5kX3Bhc3RlX2ZpeHR1cmVfc2V0dXApOgorICAgICAgICAoY29weV9hbmRf
cGFzdGVfZml4dHVyZV90ZWFyZG93bik6CisgICAgICAgIChsb2FkX3N0YXR1c19jYik6CisgICAg
ICAgIChtYXBfZXZlbnRfY2IpOgorICAgICAgICAodGVzdF9jb3B5X2FuZF9wYXN0ZSk6CisgICAg
ICAgIChydW5QYXN0ZVRlc3RDYWxsYmFjayk6CisgICAgICAgICh3aW5kb3dfb2JqZWN0X2NsZWFy
ZWRfY2FsbGJhY2spOgorICAgICAgICAocGFzdGluZ190ZXN0X2dldF9kYXRhX2NhbGxiYWNrKToK
KyAgICAgICAgKHBhc3RpbmdfdGVzdF9jbGVhcl9kYXRhX2NhbGxiYWNrKToKKyAgICAgICAgKHRl
c3RfcGFzdGluZ19tYXJrdXApOgorICAgICAgICAobWFpbik6CisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGRvbWRvY3VtZW50LmM6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0ZG9tZG9jdW1lbnQuYy4KKyAgICAgICAgKGZpbmlzaF9s
b2FkaW5nKToKKyAgICAgICAgKGRvbV9kb2N1bWVudF9maXh0dXJlX3NldHVwKToKKyAgICAgICAg
KGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKToKKyAgICAgICAgKHRlc3RfZG9tX2RvY3Vt
ZW50X3RpdGxlKToKKyAgICAgICAgKHRlc3RfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19ieV90
YWdfbmFtZSk6CisgICAgICAgICh0ZXN0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfY2xh
c3NfbmFtZSk6CisgICAgICAgICh0ZXN0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudF9ieV9pZCk6
CisgICAgICAgICh0ZXN0X2RvbV9kb2N1bWVudF9nZXRfbGlua3MpOgorICAgICAgICAodGVzdF9k
b21fZG9jdW1lbnRfaW5zZXJ0X3Jvdyk6CisgICAgICAgICh0ZXN0X2RvbV9kb2N1bWVudF9ldmFs
dWF0ZSk6CisgICAgICAgICh3ZWFrX25vdGlmeSk6CisgICAgICAgICh0ZXN0X2RvbV9kb2N1bWVu
dF9nYXJiYWdlX2NvbGxlY3Rpb24pOgorICAgICAgICAobWFpbik6CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGRvbWRvbXdpbmRvdy5jOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvbWRvbXdpbmRvdy5jLgorICAgICAgICAoZmlu
aXNoX2xvYWRpbmcpOgorICAgICAgICAoZG9tX2RvbXZpZXdfZml4dHVyZV9zZXR1cCk6CisgICAg
ICAgIChkb21fZG9tdmlld19maXh0dXJlX3RlYXJkb3duKToKKyAgICAgICAgKGRvbV9kb21fd2lu
ZG93X2ZpeHR1cmVfc2V0dXApOgorICAgICAgICAoZG9tX2RvbV93aW5kb3dfZml4dHVyZV90ZWFy
ZG93bik6CisgICAgICAgIChsb2FkZWRDYWxsYmFjayk6CisgICAgICAgIChjbGlja2VkQ2FsbGJh
Y2spOgorICAgICAgICAobWFwX2V2ZW50X2NiKToKKyAgICAgICAgKGxvYWRfZXZlbnRfY2FsbGJh
Y2spOgorICAgICAgICAodGVzdF9kb21fZG9tdmlld19zaWduYWxzKToKKyAgICAgICAgKGNsaWNr
ZWRfY2IpOgorICAgICAgICAobG9hZF9zdGF0dXNfY2FsbGJhY2spOgorICAgICAgICAodGVzdF9k
b21fZG9tdmlld19kaXNwYXRjaF9ldmVudCk6CisgICAgICAgICh0ZXN0X2RvbV9kb21fd2luZG93
X2dldF9jb21wdXRlZF9zdHlsZSk6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0ZG9tbm9kZS5jOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvbW5vZGUuYy4KKyAgICAgICAgKGZpbmlzaF9sb2FkaW5n
KToKKyAgICAgICAgKGRvbV9ub2RlX2ZpeHR1cmVfc2V0dXApOgorICAgICAgICAoZG9tX25vZGVf
Zml4dHVyZV90ZWFyZG93bik6CisgICAgICAgICh0ZXN0X2RvbV9ub2RlX2hpZXJhcmNoeV9uYXZp
Z2F0aW9uKToKKyAgICAgICAgKHRlc3RfZG9tX25vZGVfaW5zZXJ0aW9uKToKKyAgICAgICAgKG1h
aW4pOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3Rkb3dubG9h
ZC5jOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvd25sb2FkLmMu
CisgICAgICAgICh0ZXN0X3dlYmtpdF9kb3dubG9hZF9jcmVhdGUpOgorICAgICAgICAobmF2aWdh
dGlvbl9wb2xpY3lfZGVjaXNpb25fcmVxdWVzdGVkX2NiKToKKyAgICAgICAgKG5vdGlmeV9zdGF0
dXNfY2IpOgorICAgICAgICAoc2V0X2ZpbGVuYW1lKToKKyAgICAgICAgKGhhbmRsZV9kb3dubG9h
ZF9yZXF1ZXN0ZWRfY2IpOgorICAgICAgICAoZG93bmxvYWRfcmVxdWVzdGVkX2NiKToKKyAgICAg
ICAgKGRvd25sb2FkX3JlcXVlc3RlZF9hc3luY2hfY2IpOgorICAgICAgICAodGVzdF93ZWJraXRf
ZG93bmxvYWRfcGVyZm9ybSk6CisgICAgICAgICh0ZXN0X3dlYmtpdF9kb3dubG9hZF9zeW5jaCk6
CisgICAgICAgICh0ZXN0X3dlYmtpdF9kb3dubG9hZF9hc3luY2gpOgorICAgICAgICAobWltZV90
eXBlX3BvbGljeV9kZWNpc2lvbl9yZXF1ZXN0ZWRfY2IpOgorICAgICAgICAoaWRsZV9xdWl0X2xv
b3BfY2IpOgorICAgICAgICAodGVzdF93ZWJraXRfZG93bmxvYWRfZGF0YSk6CisgICAgICAgIChu
b3RpZnlEb3dubG9hZFN0YXR1c0NhbGxiYWNrKToKKyAgICAgICAgKHNlcnZlckNhbGxiYWNrKToK
KyAgICAgICAgKHRlc3Rfd2Via2l0X2Rvd25sb2FkX25vdF9mb3VuZCk6CisgICAgICAgIChtYWlu
KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0ZmF2aWNvbmRh
dGFiYXNlLmM6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0ZmF2aWNv
bmRhdGFiYXNlLmMuCisgICAgICAgIChzZXJ2ZXJDYWxsYmFjayk6CisgICAgICAgIChkZWxldGVE
YXRhYmFzZUZpbGVJZkV4aXN0cyk6CisgICAgICAgICh0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNl
U2V0UGF0aCk6CisgICAgICAgIChmYXZpY29uRGF0YWJhc2VHZXRWYWxpZEZhdmljb25DYWxsYmFj
ayk6CisgICAgICAgIChmYXZpY29uRGF0YWJhc2VHZXRJbnZhbGlkRmF2aWNvbkNhbGxiYWNrKToK
KyAgICAgICAgKGZhdmljb25EYXRhYmFzZUdldEZhdmljb25DYW5jZWxsZWRDYWxsYmFjayk6Cisg
ICAgICAgIChxdWl0TWFpbkxvb3BJZkxvYWRDb21wbGV0ZWQpOgorICAgICAgICAoaWRsZVF1aXRM
b29wQ2FsbGJhY2spOgorICAgICAgICAod2Via2l0V2ViVmlld0ljb25Mb2FkZWQpOgorICAgICAg
ICAobG9hZFVSSSk6CisgICAgICAgIChmYXZpY29uRGF0YWJhc2VHZXRWYWxpZEZhdmljb25JZGxl
KToKKyAgICAgICAgKGZhdmljb25EYXRhYmFzZUdldEludmFsaWRGYXZpY29uSWRsZSk6CisgICAg
ICAgIChmYXZpY29uRGF0YWJhc2VHZXRGYXZpY29uQ2FuY2VsbGVkSWRsZSk6CisgICAgICAgICh0
ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNvbik6CisgICAgICAgICh0ZXN0V2ViS2l0
RmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNvblVSSSk6CisgICAgICAgICh0ZXN0V2ViS2l0RmF2aWNv
bkRhdGFiYXNlUmVtb3ZlQWxsKToKKyAgICAgICAgKHRlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VD
bG9zZURhdGFiYXNlKToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0R3RrL3Rlc3RnbG9iYWxzLmM6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
L2d0ay90ZXN0cy90ZXN0Z2xvYmFscy5jLgorICAgICAgICAodGVzdF9nbG9iYWxzX2RlZmF1bHRf
c2Vzc2lvbik6CisgICAgICAgICh0ZXN0X2dsb2JhbHNfc2VjdXJpdHlfcG9saWN5KToKKyAgICAg
ICAgKG1haW4pOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3Ro
aXR0ZXN0cmVzdWx0LmM6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0
aGl0dGVzdHJlc3VsdC5jLgorICAgICAgICAodGVzdF9pbmZvX25ldyk6CisgICAgICAgICh0ZXN0
X2luZm9fZGVzdHJveSk6CisgICAgICAgIChoaXRfdGVzdF9yZXN1bHRfZml4dHVyZV9zZXR1cCk6
CisgICAgICAgIChoaXRfdGVzdF9yZXN1bHRfZml4dHVyZV90ZWFyZG93bik6CisgICAgICAgIChs
b2FkX3N0YXR1c19jYik6CisgICAgICAgICh0ZXN0X3dlYmtpdF9oaXRfdGVzdF9yZXN1bHQpOgor
ICAgICAgICAobWFpbik6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsv
dGVzdGh0dHBiYWNrZW5kLmM6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90
ZXN0aHR0cGJhY2tlbmQuYy4KKyAgICAgICAgKG5hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX3Jl
cXVlc3RlZF9jYik6CisgICAgICAgICh0ZXN0X3NvdXBfbWVzc2FnZV9saWZldGltZSk6CisgICAg
ICAgIChtYWluKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0
a2V5ZXZlbnRzLmM6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0a2V5
ZXZlbnRzLmMuCisgICAgICAgICh0ZXN0X2luZm9fbmV3KToKKyAgICAgICAgKHRlc3RfaW5mb19k
ZXN0cm95KToKKyAgICAgICAgKGtleV9ldmVudF9maXh0dXJlX3NldHVwKToKKyAgICAgICAgKGtl
eV9ldmVudF9maXh0dXJlX3RlYXJkb3duKToKKyAgICAgICAgKGtleV9wcmVzc19ldmVudF9jYik6
CisgICAgICAgIChrZXlfcmVsZWFzZV9ldmVudF9jYik6CisgICAgICAgICh0ZXN0X2tleXByZXNz
X2V2ZW50c19sb2FkX3N0YXR1c19jYik6CisgICAgICAgIChtYXBfZXZlbnRfY2IpOgorICAgICAg
ICAoc2V0dXBfa2V5ZXZlbnRfdGVzdCk6CisgICAgICAgICh0ZXN0X2tleXByZXNzX2V2ZW50cyk6
CisgICAgICAgIChlbGVtZW50X3RleHRfZXF1YWxfdG8pOgorICAgICAgICAodGVzdF9pbWVfbG9h
ZF9zdGF0dXNfY2IpOgorICAgICAgICAodGVzdF9pbWUpOgorICAgICAgICAodmVyaWZ5X2NvbnRl
bnRzKToKKyAgICAgICAgKHRlc3RfYmxvY2tpbmdfbG9hZF9zdGF0dXNfY2IpOgorICAgICAgICAo
dGVzdF9ibG9ja2luZyk6CisgICAgICAgICh0ZXN0X3hpbV9sb2FkX3N0YXR1c19jYik6CisgICAg
ICAgICh0ZXN0X3hpbSk6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdEd0ay90ZXN0bG9hZGluZy5jOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktp
dC9ndGsvdGVzdHMvdGVzdGxvYWRpbmcuYy4KKyAgICAgICAgKHNlcnZlcl9jYWxsYmFjayk6Cisg
ICAgICAgICh3ZWJfbG9hZGluZ19maXh0dXJlX3NldHVwKToKKyAgICAgICAgKHdlYl9sb2FkaW5n
X2ZpeHR1cmVfdGVhcmRvd24pOgorICAgICAgICAoZ2V0X3VyaV9mb3JfcGF0aCk6CisgICAgICAg
IChsb2FkX2ZpbmlzaGVkX2NiKToKKyAgICAgICAgKHN0YXR1c19jaGFuZ2VkX2NiKToKKyAgICAg
ICAgKHRlc3RfbG9hZGluZ19zdGF0dXMpOgorICAgICAgICAobG9hZF9lcnJvcl9zdGF0dXNfY2hh
bmdlZF9jYik6CisgICAgICAgIChsb2FkX2Vycm9yX2NiKToKKyAgICAgICAgKHRlc3RfbG9hZGlu
Z19lcnJvcik6CisgICAgICAgIChsb2FkX2NhbmNlbGxlZF9jYik6CisgICAgICAgIChzdG9wX2xv
YWQpOgorICAgICAgICAobG9hZF9jYW5jZWxsZWRfc3RhdHVzX2NoYW5nZWRfY2IpOgorICAgICAg
ICAodGVzdF9sb2FkaW5nX2NhbmNlbGxlZCk6CisgICAgICAgIChsb2FkX2dvYmFja19zdGF0dXNf
Y2hhbmdlZF9jYik6CisgICAgICAgIChsb2FkX3dlbnRiYWNrX3N0YXR1c19jaGFuZ2VkX2NiKToK
KyAgICAgICAgKGxvYWRfZXJyb3JfdGVzdCk6CisgICAgICAgICh0ZXN0X2xvYWRpbmdfZ29iYWNr
KToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
R3RrL3Rlc3RtaW1laGFuZGxpbmcuYzogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvZ3RrL3Rl
c3RzL3Rlc3RtaW1laGFuZGxpbmcuYy4KKyAgICAgICAgKHNlcnZlcl9jYWxsYmFjayk6CisgICAg
ICAgIChpZGxlX3F1aXRfbG9vcF9jYik6CisgICAgICAgIChtaW1lX3R5cGVfcG9saWN5X2RlY2lz
aW9uX3JlcXVlc3RlZF9jYik6CisgICAgICAgICh0ZXN0UmVtb3RlTWltZVR5cGUpOgorICAgICAg
ICAodGVzdExvY2FsTWltZVR5cGUpOgorICAgICAgICAobWFpbik6CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdG5ldHdvcmtyZXF1ZXN0LmM6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0bmV0d29ya3JlcXVlc3QuYy4KKyAgICAgICAg
KHRlc3RfbmV0d29ya19yZXF1ZXN0X2NyZWF0ZV9kZXN0cm95KToKKyAgICAgICAgKHRlc3RfbmV0
d29ya19yZXF1ZXN0X3Byb3BlcnRpZXMpOgorICAgICAgICAobWFpbik6CisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdG5ldHdvcmtyZXNwb25zZS5jOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdG5ldHdvcmtyZXNwb25zZS5jLgorICAg
ICAgICAodGVzdF9uZXR3b3JrX3Jlc3BvbnNlX2NyZWF0ZV9kZXN0cm95KToKKyAgICAgICAgKHRl
c3RfbmV0d29ya19yZXNwb25zZV9wcm9wZXJ0aWVzKToKKyAgICAgICAgKG1haW4pOgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJiYWNrZm9yd2FyZGxpc3Qu
YzogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJiYWNrZm9yd2Fy
ZGxpc3QuYy4KKyAgICAgICAgKHRlc3Rfd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbGlmZXRpbWUp
OgorICAgICAgICAodGVzdF93ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X29yZGVyKToKKyAg
ICAgICAgKHRlc3Rfd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9hZGRfaXRlbSk6CisgICAg
ICAgICh0ZXN0X3dlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY2xlYXIpOgorICAgICAgICAo
bWFpbik6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYmRh
dGFzb3VyY2UuYzogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJk
YXRhc291cmNlLmMuCisgICAgICAgICh0ZXN0X3dlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X2lu
aXRpYWxfcmVxdWVzdCk6CisgICAgICAgIChub3RpZnlfbG9hZF9zdGF0dXNfdW5yZWFjaGFibGVf
Y2IpOgorICAgICAgICAobm90aWZ5X2xvYWRfc3RhdHVzX2NiKToKKyAgICAgICAgKHdhaXRfdGlt
ZXJfZmlyZWQpOgorICAgICAgICAodGVzdF93ZWJraXRfd2ViX2RhdGFfc291cmNlKToKKyAgICAg
ICAgKG5vdGlmeV9sb2FkX3N0YXR1c19saWZldGltZV9jYik6CisgICAgICAgICh0ZXN0X3dlYmtp
dF93ZWJfZGF0YV9zb3VyY2VfbGlmZXRpbWUpOgorICAgICAgICAodGVzdF93ZWJraXRfd2ViX2Rh
dGFfc291cmNlX3VucmVhY2hhYmxlX3VyaSk6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2ViZnJhbWUuYzogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJmcmFtZS5jLgorICAgICAgICAoY3JlYXRl
RnJhbWVTaWduYWxUZXN0RnJhbWVDcmVhdGVkQ2FsbGJhY2spOgorICAgICAgICAoY3JlYXRlRnJh
bWVTaWduYWxUZXN0VGltZW91dCk6CisgICAgICAgICh0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfY3Jl
YXRlZF9zaWduYWwpOgorICAgICAgICAodGVzdF93ZWJraXRfd2ViX2ZyYW1lX2NyZWF0ZV9kZXN0
cm95KToKKyAgICAgICAgKHRlc3Rfd2Via2l0X3dlYl9mcmFtZV9saWZldGltZSk6CisgICAgICAg
IChwcmludF9yZXF1ZXN0ZWRfY2IpOgorICAgICAgICAocHJpbnRfdGltZW91dCk6CisgICAgICAg
ICh0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfcHJpbnRpbmcpOgorICAgICAgICAodGVzdF93ZWJraXRf
d2ViX2ZyYW1lX3Jlc3BvbnNlKToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJoaXN0b3J5aXRlbS5jOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYmhpc3RvcnlpdGVtLmMuCisgICAgICAgICh3
ZWJfaGlzdG9yeV9pdGVtX2ZpeHR1cmVfc2V0dXApOgorICAgICAgICAod2ViX2hpc3RvcnlfaXRl
bV9maXh0dXJlX3RlYXJkb3duKToKKyAgICAgICAgKHRlc3Rfd2Via2l0X3dlYl9oaXN0b3J5X2l0
ZW1fZ2V0X2RhdGEpOgorICAgICAgICAodGVzdF93ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9hbHRl
cm5hdGVfdGl0bGUpOgorICAgICAgICAobWFpbik6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRHdGsvdGVzdHdlYmluc3BlY3Rvci5jOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YktpdC9ndGsvdGVzdHMvdGVzdHdlYmluc3BlY3Rvci5jLgorICAgICAgICAocXVpdExvb3ApOgor
ICAgICAgICAoY29uc29sZU1lc3NhZ2VDYWxsYmFjayk6CisgICAgICAgIChpbnNwZWN0RWxlbWVu
dENhbGxiYWNrKToKKyAgICAgICAgKGNsb3NlSW5zcGVjdG9yKToKKyAgICAgICAgKHNob3dJbnNw
ZWN0b3IpOgorICAgICAgICAobG9hZEZpbmlzaGVkKToKKyAgICAgICAgKHRlc3Rfd2Via2l0X3dl
Yl9pbnNwZWN0b3JfY2xvc2VfYW5kX2luc3BlY3QpOgorICAgICAgICAodGVzdF93ZWJraXRfd2Vi
X2luc3BlY3Rvcl9kZXN0cm95X2luc3BlY3RlZF93ZWJfdmlldyk6CisgICAgICAgIChtYWluKToK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2VicGx1Z2luZGF0
YWJhc2UuYzogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJwbHVn
aW5kYXRhYmFzZS5jLgorICAgICAgICAodGVzdF93ZWJraXRfd2ViX3BsdWdpbl9kYXRhYmFzZV9n
ZXRfcGx1Z2lucyk6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdEd0ay90ZXN0d2VicmVzb3VyY2UuYzogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJL
aXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJyZXNvdXJjZS5jLgorICAgICAgICAoc2VydmVyX2NhbGxiYWNr
KToKKyAgICAgICAgKHdlYl9yZXNvdXJjZV9maXh0dXJlX3NldHVwKToKKyAgICAgICAgKHdlYl9y
ZXNvdXJjZV9maXh0dXJlX3RlYXJkb3duKToKKyAgICAgICAgKHRlc3Rfd2Via2l0X3dlYl9yZXNv
dXJjZV9nZXRfdXJsKToKKyAgICAgICAgKHRlc3Rfd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZGF0
YSk6CisgICAgICAgICh0ZXN0X3dlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X21pbWVfdHlwZSk6Cisg
ICAgICAgICh0ZXN0X3dlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X2VuY29kaW5nKToKKyAgICAgICAg
KHRlc3Rfd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZnJhbWVfbmFtZSk6CisgICAgICAgIChyZXNv
dXJjZV9yZXF1ZXN0X3N0YXJ0aW5nX2NiKToKKyAgICAgICAgKG5vdGlmeV9sb2FkX3N0YXR1c19j
Yik6CisgICAgICAgICh0ZXN0X3dlYl9yZXNvdXJjZV9sb2FkaW5nKToKKyAgICAgICAgKHJlc291
cmNlX3JlcXVlc3Rfc3RhcnRpbmdfc3ViX2NiKToKKyAgICAgICAgKG5vdGlmeV9sb2FkX3N0YXR1
c19zdWJfY2IpOgorICAgICAgICAoaWRsZV9xdWl0X2xvb3BfY2IpOgorICAgICAgICAodGVzdF93
ZWJfcmVzb3VyY2Vfc3ViX3Jlc291cmNlX2xvYWRpbmcpOgorICAgICAgICAobWFpbik6CisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYnNldHRpbmdzLmM6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2Vic2V0dGluZ3MuYy4KKyAg
ICAgICAgKHRlc3Rfd2Via2l0X3dlYl9zZXR0aW5nc19jb3B5KToKKyAgICAgICAgKHRlc3Rfbm9u
X3F1aXJreV91c2VyX2FnZW50cyk6CisgICAgICAgICh0ZXN0X3dlYmtpdF93ZWJfc2V0dGluZ3Nf
dXNlcl9hZ2VudCk6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdEd0ay90ZXN0d2Vidmlldy5jOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9n
dGsvdGVzdHMvdGVzdHdlYnZpZXcuYy4KKyAgICAgICAgKHNlcnZlcl9jYWxsYmFjayk6CisgICAg
ICAgIChpZGxlX3F1aXRfbG9vcF9jYik6CisgICAgICAgICh0aW1lb3V0X2NiKToKKyAgICAgICAg
KGljb25fdXJpX2NoYW5nZWRfY2IpOgorICAgICAgICAoaWNvbl9sb2FkZWRfY2IpOgorICAgICAg
ICAodGVzdF93ZWJraXRfd2ViX3ZpZXdfaWNvbl91cmkpOgorICAgICAgICAobWFwX2V2ZW50X2Ni
KToKKyAgICAgICAgKHF1aXRfYWZ0ZXJfc2hvcnRfZGVsYXlfY2IpOgorICAgICAgICAodGVzdF93
ZWJraXRfd2ViX3ZpZXdfZ3JhYl9mb2N1cyk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRHdGsvdGVzdHdpbmRvdy5jOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9ndGsv
dGVzdHMvdGVzdHdpbmRvdy5jLgorICAgICAgICAobm90aWZ5X2xvYWRfc3RhdHVzX2NiKToKKyAg
ICAgICAgKHRlc3Rfd2Via2l0X3dpbmRvd19zY3JvbGxiYXJfcG9saWN5KToKKyAgICAgICAgKG1h
aW4pOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvTG9hZFRyYWNraW5n
VGVzdC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9Mb2FkVHJhY2tpbmdUZXN0LmNwcC4KKyAgICAgICAgKGxvYWRDaGFuZ2VkQ2FsbGJhY2sp
OgorICAgICAgICAobG9hZEZhaWxlZENhbGxiYWNrKToKKyAgICAgICAgKGVzdGltYXRlZFByb2dy
ZXNzQ2hhbmdlZENhbGxiYWNrKToKKyAgICAgICAgKExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRUcmFj
a2luZ1Rlc3QpOgorICAgICAgICAoTG9hZFRyYWNraW5nVGVzdDo6fkxvYWRUcmFja2luZ1Rlc3Qp
OgorICAgICAgICAoTG9hZFRyYWNraW5nVGVzdDo6d2FpdFVudGlsTG9hZEZpbmlzaGVkKToKKyAg
ICAgICAgKExvYWRUcmFja2luZ1Rlc3Q6OnByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOgorICAgICAg
ICAoTG9hZFRyYWNraW5nVGVzdDo6cHJvdmlzaW9uYWxMb2FkUmVjZWl2ZWRTZXJ2ZXJSZWRpcmVj
dCk6CisgICAgICAgIChMb2FkVHJhY2tpbmdUZXN0Ojpwcm92aXNpb25hbExvYWRGYWlsZWQpOgor
ICAgICAgICAoTG9hZFRyYWNraW5nVGVzdDo6bG9hZENvbW1pdHRlZCk6CisgICAgICAgIChMb2Fk
VHJhY2tpbmdUZXN0Ojpsb2FkRmluaXNoZWQpOgorICAgICAgICAoTG9hZFRyYWNraW5nVGVzdDo6
bG9hZEZhaWxlZCk6CisgICAgICAgIChMb2FkVHJhY2tpbmdUZXN0Ojplc3RpbWF0ZWRQcm9ncmVz
c0NoYW5nZWQpOgorICAgICAgICAoTG9hZFRyYWNraW5nVGVzdDo6bG9hZFVSSSk6CisgICAgICAg
IChMb2FkVHJhY2tpbmdUZXN0Ojpsb2FkSHRtbCk6CisgICAgICAgIChMb2FkVHJhY2tpbmdUZXN0
Ojpsb2FkUGxhaW5UZXh0KToKKyAgICAgICAgKExvYWRUcmFja2luZ1Rlc3Q6OmxvYWRSZXF1ZXN0
KToKKyAgICAgICAgKExvYWRUcmFja2luZ1Rlc3Q6OnJlbG9hZCk6CisgICAgICAgIChMb2FkVHJh
Y2tpbmdUZXN0Ojpnb0JhY2spOgorICAgICAgICAoTG9hZFRyYWNraW5nVGVzdDo6Z29Gb3J3YXJk
KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL0xvYWRUcmFja2luZ1Rl
c3QuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L0xvYWRUcmFja2luZ1Rlc3QuaC4KKyAgICAgICAgKExvYWRUcmFja2luZ1Rlc3Q6OnNldFJlZGly
ZWN0VVJJKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1Rlc3RNYWlu
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L1Rlc3RNYWluLmNwcC4KKyAgICAgICAgKHJlZ2lzdGVyR1Jlc291cmNlKToKKyAgICAgICAgKHJl
bW92ZU5vbkVtcHR5RGlyZWN0b3J5KToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvVGVzdE1haW4uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RNYWluLmguCisgICAgICAgIChUZXN0
Ojp+VGVzdCk6CisgICAgICAgIChUZXN0OjpvYmplY3RGaW5hbGl6ZWQpOgorICAgICAgICAoVGVz
dDo6YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyk6CisgICAgICAgIChUZXN0
OjpnZXRXZWJLaXQxVGVzdFJlc291Y2VzRGlyKToKKyAgICAgICAgKFRlc3Q6OmdldFJlc291cmNl
c0Rpcik6CisgICAgICAgIChUZXN0OjphZGRMb2dGYXRhbEZsYWcpOgorICAgICAgICAoVGVzdDo6
cmVtb3ZlTG9nRmF0YWxGbGFnKToKKyAgICAgICAgKFRlc3Q6OmNhaXJvU3VyZmFjZXNFcXVhbCk6
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9XZWJLaXRUZXN0QnVzLmNw
cDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dl
YktpdFRlc3RCdXMuY3BwLgorICAgICAgICAoV2ViS2l0VGVzdEJ1czo6V2ViS2l0VGVzdEJ1cyk6
CisgICAgICAgIChXZWJLaXRUZXN0QnVzOjpydW4pOgorICAgICAgICAoV2ViS2l0VGVzdEJ1czo6
fldlYktpdFRlc3RCdXMpOgorICAgICAgICAoV2ViS2l0VGVzdEJ1czo6Z2V0T3JDcmVhdGVDb25u
ZWN0aW9uKToKKyAgICAgICAgKG9uTmFtZUFwcGVhcmVkKToKKyAgICAgICAgKFdlYktpdFRlc3RC
dXM6OmNyZWF0ZVByb3h5KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3Rr
L1dlYktpdFRlc3RCdXMuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL1dlYktpdFRlc3RCdXMuaC4KKyAgICAgICAgKFdlYktpdFRlc3RCdXM6OmNv
bm5lY3Rpb24pOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViS2l0
VGVzdFNlcnZlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9XZWJLaXRUZXN0U2VydmVyLmNwcC4KKyAgICAgICAgKFdlYktpdFRlc3RTZXJ2
ZXI6OldlYktpdFRlc3RTZXJ2ZXIpOgorICAgICAgICAoV2ViS2l0VGVzdFNlcnZlcjo6fldlYktp
dFRlc3RTZXJ2ZXIpOgorICAgICAgICAoV2ViS2l0VGVzdFNlcnZlcjo6cnVuKToKKyAgICAgICAg
KFdlYktpdFRlc3RTZXJ2ZXI6OmdldFVSSUZvclBhdGgpOgorICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvZ3RrL1dlYktpdDJHdGsvV2ViS2l0VGVzdFNlcnZlci5oOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViS2l0VGVzdFNlcnZlci5oLgorICAg
ICAgICAoV2ViS2l0VGVzdFNlcnZlcjo6YmFzZVVSSSk6CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9ndGsvV2ViS2l0Mkd0ay9XZWJQcm9jZXNzVGVzdFJ1bm5lci5jcHA6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJQcm9jZXNzVGVzdFJ1bm5l
ci5jcHAuCisgICAgICAgIChXZWJQcm9jZXNzVGVzdFJ1bm5lcjo6V2ViUHJvY2Vzc1Rlc3RSdW5u
ZXIpOgorICAgICAgICAoV2ViUHJvY2Vzc1Rlc3RSdW5uZXI6On5XZWJQcm9jZXNzVGVzdFJ1bm5l
cik6CisgICAgICAgIChXZWJQcm9jZXNzVGVzdFJ1bm5lcjo6cHJveHlDcmVhdGVkQ2FsbGJhY2sp
OgorICAgICAgICAoV2ViUHJvY2Vzc1Rlc3RSdW5uZXI6OnByb3h5KToKKyAgICAgICAgKFdlYlBy
b2Nlc3NUZXN0UnVubmVyOjpvbk5hbWVBcHBlYXJlZCk6CisgICAgICAgIChXZWJQcm9jZXNzVGVz
dFJ1bm5lcjo6b25OYW1lVmFuaXNoZWQpOgorICAgICAgICAoV2ViUHJvY2Vzc1Rlc3RSdW5uZXI6
OnRlc3RGaW5pc2hlZENhbGxiYWNrKToKKyAgICAgICAgKFdlYlByb2Nlc3NUZXN0UnVubmVyOjpy
dW5UZXN0KToKKyAgICAgICAgKFdlYlByb2Nlc3NUZXN0UnVubmVyOjpmaW5pc2hUZXN0KToKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYlByb2Nlc3NUZXN0UnVubmVy
Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9X
ZWJQcm9jZXNzVGVzdFJ1bm5lci5oLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvZ3RrL1dlYktp
dDJHdGsvV2ViVmlld1Rlc3QuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwLgorICAgICAgICAoV2ViVmlld1Rlc3Q6
OldlYlZpZXdUZXN0KToKKyAgICAgICAgKFdlYlZpZXdUZXN0Ojp+V2ViVmlld1Rlc3QpOgorICAg
ICAgICAoV2ViVmlld1Rlc3Q6OmxvYWRVUkkpOgorICAgICAgICAoV2ViVmlld1Rlc3Q6OmxvYWRI
dG1sKToKKyAgICAgICAgKFdlYlZpZXdUZXN0Ojpsb2FkUGxhaW5UZXh0KToKKyAgICAgICAgKFdl
YlZpZXdUZXN0Ojpsb2FkUmVxdWVzdCk6CisgICAgICAgIChXZWJWaWV3VGVzdDo6bG9hZEFsdGVy
bmF0ZUhUTUwpOgorICAgICAgICAoV2ViVmlld1Rlc3Q6OmdvQmFjayk6CisgICAgICAgIChXZWJW
aWV3VGVzdDo6Z29Gb3J3YXJkKToKKyAgICAgICAgKFdlYlZpZXdUZXN0Ojpnb1RvQmFja0Zvcndh
cmRMaXN0SXRlbSk6CisgICAgICAgIChXZWJWaWV3VGVzdDo6cXVpdE1haW5Mb29wKToKKyAgICAg
ICAgKFdlYlZpZXdUZXN0OjpxdWl0TWFpbkxvb3BBZnRlclByb2Nlc3NpbmdQZW5kaW5nRXZlbnRz
KToKKyAgICAgICAgKHF1aXRNYWluTG9vcElkbGVDYWxsYmFjayk6CisgICAgICAgIChXZWJWaWV3
VGVzdDo6d2FpdCk6CisgICAgICAgIChsb2FkQ2hhbmdlZCk6CisgICAgICAgIChXZWJWaWV3VGVz
dDo6d2FpdFVudGlsTG9hZEZpbmlzaGVkKToKKyAgICAgICAgKHRpdGxlQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJWaWV3VGVzdDo6d2FpdFVudGlsVGl0bGVDaGFuZ2VkVG8pOgorICAgICAgICAoV2Vi
Vmlld1Rlc3Q6OndhaXRVbnRpbFRpdGxlQ2hhbmdlZCk6CisgICAgICAgIChwYXJlbnRXaW5kb3dN
YXBwZWQpOgorICAgICAgICAoV2ViVmlld1Rlc3Q6OnNob3dJbldpbmRvdyk6CisgICAgICAgIChX
ZWJWaWV3VGVzdDo6c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKToKKyAgICAgICAgKFdl
YlZpZXdUZXN0OjpyZXNpemVWaWV3KToKKyAgICAgICAgKFdlYlZpZXdUZXN0OjpzZWxlY3RBbGwp
OgorICAgICAgICAocmVzb3VyY2VHZXREYXRhQ2FsbGJhY2spOgorICAgICAgICAoV2ViVmlld1Rl
c3Q6Om1haW5SZXNvdXJjZURhdGEpOgorICAgICAgICAoV2ViVmlld1Rlc3Q6Om1vdXNlTW92ZVRv
KToKKyAgICAgICAgKFdlYlZpZXdUZXN0OjpjbGlja01vdXNlQnV0dG9uKToKKyAgICAgICAgKFdl
YlZpZXdUZXN0OjprZXlTdHJva2UpOgorICAgICAgICAoV2ViVmlld1Rlc3Q6OmRvTW91c2VCdXR0
b25FdmVudCk6CisgICAgICAgIChydW5KYXZhU2NyaXB0UmVhZHlDYWxsYmFjayk6CisgICAgICAg
IChydW5KYXZhU2NyaXB0RnJvbUdSZXNvdXJjZVJlYWR5Q2FsbGJhY2spOgorICAgICAgICAoV2Vi
Vmlld1Rlc3Q6OnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCk6CisgICAgICAgIChX
ZWJWaWV3VGVzdDo6cnVuSmF2YVNjcmlwdEZyb21HUmVzb3VyY2VBbmRXYWl0VW50aWxGaW5pc2hl
ZCk6CisgICAgICAgIChqc1ZhbHVlVG9DU3RyaW5nKToKKyAgICAgICAgKFdlYlZpZXdUZXN0Ojpq
YXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKToKKyAgICAgICAgKFdlYlZpZXdUZXN0OjpqYXZhc2Ny
aXB0UmVzdWx0VG9OdW1iZXIpOgorICAgICAgICAoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1
bHRUb0Jvb2xlYW4pOgorICAgICAgICAoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRJc051
bGwpOgorICAgICAgICAoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRJc1VuZGVmaW5lZCk6
CisgICAgICAgIChvblNuYXBzaG90UmVhZHkpOgorICAgICAgICAoV2ViVmlld1Rlc3Q6OmdldFNu
YXBzaG90QW5kV2FpdFVudGlsUmVhZHkpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvZ3RrL1dl
YktpdDJHdGsvV2ViVmlld1Rlc3QuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmguCisKIDIwMTQtMDEtMDMgIEFsZXhleSBQ
cm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgSXQncyBjb25mdXNpbmcgdG8g
aGF2ZSB0d28gZWxlbWVudHMgbGluayB0byB0aGUgc2FtZSBVUkwgYXQgYnVpbGQud2Via2l0Lm9y
Zy9kYXNoYm9hcmQKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvcnVuLWd0ay10ZXN0cyBiL1Rv
b2xzL1NjcmlwdHMvcnVuLWd0ay10ZXN0cwppbmRleCBlNmI0MDZhLi41ZGFlYWYwIDEwMDc1NQot
LS0gYS9Ub29scy9TY3JpcHRzL3J1bi1ndGstdGVzdHMKKysrIGIvVG9vbHMvU2NyaXB0cy9ydW4t
Z3RrLXRlc3RzCkBAIC01OCwzNSArNTgsMzUgQEAgY2xhc3MgVGVzdFRpbWVvdXQoRXhjZXB0aW9u
KToKICAgICBwYXNzCiAKIGNsYXNzIFRlc3RSdW5uZXI6Ci0gICAgVEVTVF9ESVJTID0gWyAiV2Vi
S2l0MUdPYmplY3RBUElUZXN0cyIsICJXZWJLaXQyR09iamVjdEFQSVRlc3RzIiwgIlRlc3RXZWJL
aXRBUEkiIF0KKyAgICBURVNUX0RJUlMgPSBbICJXZWJLaXQyR3RrIiwgIldlYktpdEd0ayIsICJX
ZWJLaXQyIiwgIkphdmFTY3JpcHRDb3JlIiwgIldURiIsICJXZWJDb3JlIiwgICJXZWJDb3JlR3Rr
IiBdCiAKICAgICBTS0lQUEVEID0gWwotICAgICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0MUdPYmpl
Y3RBUElUZXN0cy90ZXN0ZG93bmxvYWQiLCAiL3dlYmtpdC9kb3dubG9hZC9ub3QtZm91bmQiLCAi
VGVzdCBmYWlscyBpbiBHVEsgTGludXggNjQtYml0IFJlbGVhc2UgYm90IiwgODIzMjkpLAotICAg
ICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0d2ViaW5zcGVjdG9y
IiwgIi93ZWJraXQvd2ViaW5zcGVjdG9yL2Nsb3NlLWFuZC1pbnNwZWN0IiwgIlRlc3QgaXMgZmxh
a3kgaW4gR1RLIExpbnV4IDMyLWJpdCBSZWxlYXNlIGJvdCIsIDgyODY5KSwKLSAgICAgICAgU2tp
cHBlZFRlc3QoIldlYktpdDFHT2JqZWN0QVBJVGVzdHMvdGVzdHdlYnJlc291cmNlIiwgIi93ZWJr
aXQvd2VicmVzb3VyY2UvbG9hZGluZyIsICJUZXN0IGZhaWxzIiwgMTA0Njg5KSwKLSAgICAgICAg
U2tpcHBlZFRlc3QoIldlYktpdDFHT2JqZWN0QVBJVGVzdHMvdGVzdHdlYnJlc291cmNlIiwgIi93
ZWJraXQvd2VicmVzb3VyY2Uvc3ViX3Jlc291cmNlX2xvYWRpbmciLCAiVGVzdCBmYWlscyBpbiBH
VEsgTGludXggNjQtYml0IFJlbGVhc2UgYm90IiwgODIzMzApLAotICAgICAgICBTa2lwcGVkVGVz
dCgiV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0d2VidmlldyIsICIvd2Via2l0L3dlYnZpZXcv
aWNvbi11cmkiLCAiVGVzdCB0aW1lcyBvdXQgaW4gR1RLIExpbnV4IDY0LWJpdCBSZWxlYXNlIGJv
dCIsIDgyMzI4KSwKLSAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdDJHT2JqZWN0QVBJVGVzdHMv
VGVzdFJlc291cmNlcyIsICIvd2Via2l0Mi9XZWJLaXRXZWJWaWV3L3Jlc291cmNlcyIsICJUZXN0
IGlzIGZsYWt5IGluIEdUSyBMaW51eCAzMi1iaXQgUmVsZWFzZSBib3QiLCA4Mjg2OCksCi0gICAg
ICAgIFNraXBwZWRUZXN0KCJXZWJLaXQyR09iamVjdEFQSVRlc3RzL1Rlc3RVSUNsaWVudCIsICIv
d2Via2l0Mi9XZWJLaXRXZWJWaWV3L21vdXNlLXRhcmdldCIsICJUZXN0IHRpbWVzIG91dCBhZnRl
ciByMTUwODkwIiwgMTE3Njg5KSwKLSAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdDJHT2JqZWN0
QVBJVGVzdHMvVGVzdEF1dGhlbnRpY2F0aW9uIiwgU2tpcHBlZFRlc3QuRU5USVJFX1NVSVRFLCAi
VGVzdCB0aW1lcyBvdXQgYWZ0ZXIgcjE1MDg5MCIsIDExNzY4OSksCi0gICAgICAgIFNraXBwZWRU
ZXN0KCJXZWJLaXQyR09iamVjdEFQSVRlc3RzL1Rlc3RDb250ZXh0TWVudSIsIFNraXBwZWRUZXN0
LkVOVElSRV9TVUlURSwgIlRlc3QgdGltZXMgb3V0IGFmdGVyIHIxNTA4OTAiLCAxMTc2ODkpLAot
ICAgICAgICBTa2lwcGVkVGVzdCgiVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0MiIsICJXZWJLaXQy
Lk1vdXNlTW92ZUFmdGVyQ3Jhc2giLCAiVGVzdCBpcyBmbGFreSIsIDg1MDY2KSwKLSAgICAgICAg
U2tpcHBlZFRlc3QoIlRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5OZXdGaXJz
dFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXMiLCAiVGVzdCBpcyBmbGFreSIsIDg1MDY2
KSwKLSAgICAgICAgU2tpcHBlZFRlc3QoIlRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdDIiLCAiV2Vi
S2l0Mi5OZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGcmFtZXMiLCAiVGVzdCBmYWlscyIs
IDg1MDM3KSwKLSAgICAgICAgU2tpcHBlZFRlc3QoIlRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdDIi
LCAiV2ViS2l0Mi5SZXN0b3JlU2Vzc2lvblN0YXRlQ29udGFpbmluZ0Zvcm1EYXRhIiwgIlNlc3Np
b24gU3RhdGUgaXMgbm90IGltcGxlbWVudGVkIGluIEdUSysgcG9ydCIsIDg0OTYwKSwKLSAgICAg
ICAgU2tpcHBlZFRlc3QoIlRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5TcGFj
ZWJhclNjcm9sbGluZyIsICJUZXN0IGZhaWxzIiwgODQ5NjEpLAotICAgICAgICBTa2lwcGVkVGVz
dCgiVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0MiIsICJXZWJLaXQyLldLQ29ubmVjdGlvbiIsICJU
ZXN0cyBmYWlsIGFuZCB0aW1lIG91dCBvdXQiLCA4NDk1OSksCi0gICAgICAgIFNraXBwZWRUZXN0
KCJUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXQyIiwgIldlYktpdDIuV0tQYWdlR2V0U2NhbGVGYWN0
b3JOb3RaZXJvIiwgIlRlc3QgZmFpbHMgYW5kIHRpbWVzIG91dCIsIDg4NDU1KSwKLSAgICAgICAg
U2tpcHBlZFRlc3QoIlRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5Gb3JjZVJl
cGFpbnQiLCAiVGVzdCB0aW1lcyBvdXQiLCAxMDU1MzIpLAotICAgICAgICBTa2lwcGVkVGVzdCgi
VGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0MiIsICJXZWJLaXQyLlJlbG9hZFBhZ2VBZnRlckNyYXNo
IiwgIlRlc3QgZmxha2lseSB0aW1lcyBvdXQiLCAxMTAxMjkpLAotICAgICAgICBTa2lwcGVkVGVz
dCgiVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0MiIsICJXZWJLaXQyLkRpZEFzc29jaWF0ZUZvcm1D
b250cm9scyIsICJUZXN0IHRpbWVzIG91dCIsIDEyMDMwMiksCi0gICAgICAgIFNraXBwZWRUZXN0
KCJUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXQyIiwgIldlYktpdDIuSW5qZWN0ZWRCdW5kbGVGcmFt
ZUhpdFRlc3QiLCAiVGVzdCB0aW1lcyBvdXQiLCAxMjAzMDMpLAotICAgICAgICBTa2lwcGVkVGVz
dCgiVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0MiIsICJXZWJLaXQyLlJlc2l6ZVJldmVyc2VQYWdp
bmF0ZWRXZWJWaWV3IiwgIlRlc3QgZmFpbHMiLCAxMjAzMDUpLAotICAgICAgICBTa2lwcGVkVGVz
dCgiVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0MiIsICJXZWJLaXQyLlNjcm9sbFBpbm5pbmdCZWhh
dmlvcnMiLCAiVGVzdCBmYWlscyIsIDEyMDMwNiksCi0gICAgICAgIFNraXBwZWRUZXN0KCJUZXN0
V2ViS2l0QVBJL1Rlc3RXZWJLaXQyIiwgIldlYktpdDIuVGVybWluYXRlVHdpY2UiLCAiVGVzdCBj
YXVzZXMgY3Jhc2ggb24gdGhlIG5leHQgdGVzdCIsIDEyMTk3MCksCi0gICAgICAgIFNraXBwZWRU
ZXN0KCJUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXQyIiwgIldlYktpdDIuR2VvbG9jYXRpb25UcmFu
c2l0aW9uVG9IaWdoQWNjdXJhY3kiLCAiVGVzdCBjYXVzZXMgY3Jhc2ggb24gdGhlIG5leHQgdGVz
dCIsIDEyNTA2OCksCi0gICAgICAgIFNraXBwZWRUZXN0KCJUZXN0V2ViS2l0QVBJL1Rlc3RXZWJL
aXQyIiwgIldlYktpdDIuR2VvbG9jYXRpb25UcmFuc2l0aW9uVG9Mb3dBY2N1cmFjeSIsICJUZXN0
IGNhdXNlcyBjcmFzaCBvbiB0aGUgbmV4dCB0ZXN0IiwgMTI1MDY4KSwKLSAgICAgICAgU2tpcHBl
ZFRlc3QoIldlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdEluc3BlY3RvclNlcnZlciIsIFNraXBw
ZWRUZXN0LkVOVElSRV9TVUlURSwgIlRpbWluZyBvdXQgb24gdGhlIGJvdCIsIDEyMjU3MSksCisg
ICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXRHdGsvdGVzdGRvd25sb2FkIiwgIi93ZWJraXQvZG93
bmxvYWQvbm90LWZvdW5kIiwgIlRlc3QgZmFpbHMgaW4gR1RLIExpbnV4IDY0LWJpdCBSZWxlYXNl
IGJvdCIsIDgyMzI5KSwKKyAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdEd0ay90ZXN0d2ViaW5z
cGVjdG9yIiwgIi93ZWJraXQvd2ViaW5zcGVjdG9yL2Nsb3NlLWFuZC1pbnNwZWN0IiwgIlRlc3Qg
aXMgZmxha3kgaW4gR1RLIExpbnV4IDMyLWJpdCBSZWxlYXNlIGJvdCIsIDgyODY5KSwKKyAgICAg
ICAgU2tpcHBlZFRlc3QoIldlYktpdEd0ay90ZXN0d2VicmVzb3VyY2UiLCAiL3dlYmtpdC93ZWJy
ZXNvdXJjZS9sb2FkaW5nIiwgIlRlc3QgZmFpbHMiLCAxMDQ2ODkpLAorICAgICAgICBTa2lwcGVk
VGVzdCgiV2ViS2l0R3RrL3Rlc3R3ZWJyZXNvdXJjZSIsICIvd2Via2l0L3dlYnJlc291cmNlL3N1
Yl9yZXNvdXJjZV9sb2FkaW5nIiwgIlRlc3QgZmFpbHMgaW4gR1RLIExpbnV4IDY0LWJpdCBSZWxl
YXNlIGJvdCIsIDgyMzMwKSwKKyAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdEd0ay90ZXN0d2Vi
dmlldyIsICIvd2Via2l0L3dlYnZpZXcvaWNvbi11cmkiLCAiVGVzdCB0aW1lcyBvdXQgaW4gR1RL
IExpbnV4IDY0LWJpdCBSZWxlYXNlIGJvdCIsIDgyMzI4KSwKKyAgICAgICAgU2tpcHBlZFRlc3Qo
IldlYktpdDJHdGsvVGVzdFJlc291cmNlcyIsICIvd2Via2l0Mi9XZWJLaXRXZWJWaWV3L3Jlc291
cmNlcyIsICJUZXN0IGlzIGZsYWt5IGluIEdUSyBMaW51eCAzMi1iaXQgUmVsZWFzZSBib3QiLCA4
Mjg2OCksCisgICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXQyR3RrL1Rlc3RVSUNsaWVudCIsICIv
d2Via2l0Mi9XZWJLaXRXZWJWaWV3L21vdXNlLXRhcmdldCIsICJUZXN0IHRpbWVzIG91dCBhZnRl
ciByMTUwODkwIiwgMTE3Njg5KSwKKyAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdDJHdGsvVGVz
dEF1dGhlbnRpY2F0aW9uIiwgU2tpcHBlZFRlc3QuRU5USVJFX1NVSVRFLCAiVGVzdCB0aW1lcyBv
dXQgYWZ0ZXIgcjE1MDg5MCIsIDExNzY4OSksCisgICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXQy
R3RrL1Rlc3RDb250ZXh0TWVudSIsIFNraXBwZWRUZXN0LkVOVElSRV9TVUlURSwgIlRlc3QgdGlt
ZXMgb3V0IGFmdGVyIHIxNTA4OTAiLCAxMTc2ODkpLAorICAgICAgICBTa2lwcGVkVGVzdCgiV2Vi
S2l0Mi9UZXN0V2ViS2l0MiIsICJXZWJLaXQyLk1vdXNlTW92ZUFmdGVyQ3Jhc2giLCAiVGVzdCBp
cyBmbGFreSIsIDg1MDY2KSwKKyAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdDIvVGVzdFdlYktp
dDIiLCAiV2ViS2l0Mi5OZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXMiLCAi
VGVzdCBpcyBmbGFreSIsIDg1MDY2KSwKKyAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdDIvVGVz
dFdlYktpdDIiLCAiV2ViS2l0Mi5OZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGcmFtZXMi
LCAiVGVzdCBmYWlscyIsIDg1MDM3KSwKKyAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdDIvVGVz
dFdlYktpdDIiLCAiV2ViS2l0Mi5SZXN0b3JlU2Vzc2lvblN0YXRlQ29udGFpbmluZ0Zvcm1EYXRh
IiwgIlNlc3Npb24gU3RhdGUgaXMgbm90IGltcGxlbWVudGVkIGluIEdUSysgcG9ydCIsIDg0OTYw
KSwKKyAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdDIvVGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5T
cGFjZWJhclNjcm9sbGluZyIsICJUZXN0IGZhaWxzIiwgODQ5NjEpLAorICAgICAgICBTa2lwcGVk
VGVzdCgiV2ViS2l0Mi9UZXN0V2ViS2l0MiIsICJXZWJLaXQyLldLQ29ubmVjdGlvbiIsICJUZXN0
cyBmYWlsIGFuZCB0aW1lIG91dCBvdXQiLCA4NDk1OSksCisgICAgICAgIFNraXBwZWRUZXN0KCJX
ZWJLaXQyL1Rlc3RXZWJLaXQyIiwgIldlYktpdDIuV0tQYWdlR2V0U2NhbGVGYWN0b3JOb3RaZXJv
IiwgIlRlc3QgZmFpbHMgYW5kIHRpbWVzIG91dCIsIDg4NDU1KSwKKyAgICAgICAgU2tpcHBlZFRl
c3QoIldlYktpdDIvVGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5Gb3JjZVJlcGFpbnQiLCAiVGVzdCB0
aW1lcyBvdXQiLCAxMDU1MzIpLAorICAgICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0Mi9UZXN0V2Vi
S2l0MiIsICJXZWJLaXQyLlJlbG9hZFBhZ2VBZnRlckNyYXNoIiwgIlRlc3QgZmxha2lseSB0aW1l
cyBvdXQiLCAxMTAxMjkpLAorICAgICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0Mi9UZXN0V2ViS2l0
MiIsICJXZWJLaXQyLkRpZEFzc29jaWF0ZUZvcm1Db250cm9scyIsICJUZXN0IHRpbWVzIG91dCIs
IDEyMDMwMiksCisgICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXQyL1Rlc3RXZWJLaXQyIiwgIldl
YktpdDIuSW5qZWN0ZWRCdW5kbGVGcmFtZUhpdFRlc3QiLCAiVGVzdCB0aW1lcyBvdXQiLCAxMjAz
MDMpLAorICAgICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0Mi9UZXN0V2ViS2l0MiIsICJXZWJLaXQy
LlJlc2l6ZVJldmVyc2VQYWdpbmF0ZWRXZWJWaWV3IiwgIlRlc3QgZmFpbHMiLCAxMjAzMDUpLAor
ICAgICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0Mi9UZXN0V2ViS2l0MiIsICJXZWJLaXQyLlNjcm9s
bFBpbm5pbmdCZWhhdmlvcnMiLCAiVGVzdCBmYWlscyIsIDEyMDMwNiksCisgICAgICAgIFNraXBw
ZWRUZXN0KCJXZWJLaXQyL1Rlc3RXZWJLaXQyIiwgIldlYktpdDIuVGVybWluYXRlVHdpY2UiLCAi
VGVzdCBjYXVzZXMgY3Jhc2ggb24gdGhlIG5leHQgdGVzdCIsIDEyMTk3MCksCisgICAgICAgIFNr
aXBwZWRUZXN0KCJXZWJLaXQyL1Rlc3RXZWJLaXQyIiwgIldlYktpdDIuR2VvbG9jYXRpb25UcmFu
c2l0aW9uVG9IaWdoQWNjdXJhY3kiLCAiVGVzdCBjYXVzZXMgY3Jhc2ggb24gdGhlIG5leHQgdGVz
dCIsIDEyNTA2OCksCisgICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXQyL1Rlc3RXZWJLaXQyIiwg
IldlYktpdDIuR2VvbG9jYXRpb25UcmFuc2l0aW9uVG9Mb3dBY2N1cmFjeSIsICJUZXN0IGNhdXNl
cyBjcmFzaCBvbiB0aGUgbmV4dCB0ZXN0IiwgMTI1MDY4KSwKKyAgICAgICAgU2tpcHBlZFRlc3Qo
IldlYktpdDJHdGsvVGVzdEluc3BlY3RvclNlcnZlciIsIFNraXBwZWRUZXN0LkVOVElSRV9TVUlU
RSwgIlRpbWluZyBvdXQgb24gdGhlIGJvdCIsIDEyMjU3MSksCiAgICAgXQogCiAgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIG9wdGlvbnMsIHRlc3RzPVtdKToKQEAgLTEwNiw2ICsxMDYsOSBAQCBjbGFz
cyBUZXN0UnVubmVyOgogICAgICAgICBzZWxmLl9zcGlfcmVnaXN0cnlkID0gTm9uZQogICAgICAg
ICBzZWxmLl9zcGlfYnVzX2xhdW5jaGVyID0gTm9uZQogCisgICAgZGVmIF90ZXN0X3Byb2dyYW1z
X2Jhc2VfZGlyKHNlbGYpOgorICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuX3Byb2dy
YW1zX3BhdGgsICJUZXN0V2ViS2l0QVBJIikKKwogICAgIGRlZiBfZ2V0X3Rlc3RzX2Zyb21fZGly
KHNlbGYsIHRlc3RfZGlyKToKICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIodGVzdF9kaXIp
OgogICAgICAgICAgICAgcmV0dXJuIFtdCkBAIC0xMzEsNyArMTM0LDcgQEAgY2xhc3MgVGVzdFJ1
bm5lcjoKIAogICAgICAgICB0ZXN0cyA9IFtdCiAgICAgICAgIGZvciB0ZXN0X2RpciBpbiBzZWxm
LlRFU1RfRElSUzoKLSAgICAgICAgICAgIGFic29sdXRlX3Rlc3RfZGlyID0gb3MucGF0aC5qb2lu
KHNlbGYuX3Byb2dyYW1zX3BhdGgsIHRlc3RfZGlyKQorICAgICAgICAgICAgYWJzb2x1dGVfdGVz
dF9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5fdGVzdF9wcm9ncmFtc19iYXNlX2RpcigpLCB0ZXN0
X2RpcikKICAgICAgICAgICAgIHRlc3RzLmV4dGVuZChzZWxmLl9nZXRfdGVzdHNfZnJvbV9kaXIo
YWJzb2x1dGVfdGVzdF9kaXIpKQogICAgICAgICByZXR1cm4gdGVzdHMKIApAQCAtMzYxLDE3ICsz
NjQsMTggQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgcmV0dXJuIDAKIAogICAgIGRlZiBf
cnVuX3Rlc3Qoc2VsZiwgdGVzdF9wcm9ncmFtKToKLSAgICAgICAgaWYgIkdPYmplY3RBUElUZXN0
IiBpbiB0ZXN0X3Byb2dyYW06CisgICAgICAgIGJhc2VkaXIgPSBvcy5wYXRoLmJhc2VuYW1lKG9z
LnBhdGguZGlybmFtZSh0ZXN0X3Byb2dyYW0pKQorICAgICAgICBpZiBiYXNlZGlyIGluIFsiV2Vi
S2l0Mkd0ayIsICJXZWJLaXRHdGsiXToKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9ydW5fdGVz
dF9nbGliKHRlc3RfcHJvZ3JhbSkKIAotICAgICAgICBpZiAiVGVzdFdlYktpdEFQSSIgaW4gdGVz
dF9wcm9ncmFtOgorICAgICAgICBpZiBiYXNlZGlyIGluIFsiV2ViS2l0MiIsICJKYXZhU2NyaXB0
Q29yZSIsICJXVEYiLCAiV2ViQ29yZSIsICAiV2ViQ29yZUd0ayJdOgogICAgICAgICAgICAgcmV0
dXJuIHNlbGYuX3J1bl9nb29nbGVfdGVzdF9zdWl0ZSh0ZXN0X3Byb2dyYW0pCiAKICAgICAgICAg
cmV0dXJuIDEKIAogICAgIGRlZiBydW5fdGVzdHMoc2VsZik6CiAgICAgICAgIGlmIG5vdCBzZWxm
Ll90ZXN0czoKLSAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkVSUk9SOiB0ZXN0cyBub3Qg
Zm91bmQgaW4gJXMuXG4iICUgKHNlbGYuX3Byb2dyYW1zX3BhdGgpKQorICAgICAgICAgICAgc3lz
LnN0ZGVyci53cml0ZSgiRVJST1I6IHRlc3RzIG5vdCBmb3VuZCBpbiAlcy5cbiIgJSAoc2VsZi5f
dGVzdF9wcm9ncmFtc19iYXNlX2RpcigpKSkKICAgICAgICAgICAgIHN5cy5zdGRlcnIuZmx1c2go
KQogICAgICAgICAgICAgcmV0dXJuIDEKIApAQCAtNDA1LDE3ICs0MDksMTcgQEAgY2xhc3MgVGVz
dFJ1bm5lcjoKICAgICAgICAgICAgIHNlbGYuX3RlYXJfZG93bl90ZXN0aW5nX2Vudmlyb25tZW50
KCkKIAogICAgICAgICBpZiBmYWlsZWRfdGVzdHM6Ci0gICAgICAgICAgICBuYW1lcyA9IFt0ZXN0
LnJlcGxhY2Uoc2VsZi5fcHJvZ3JhbXNfcGF0aCwgJycsIDEpIGZvciB0ZXN0IGluIGZhaWxlZF90
ZXN0c10KKyAgICAgICAgICAgIG5hbWVzID0gW3Rlc3QucmVwbGFjZShzZWxmLl90ZXN0X3Byb2dy
YW1zX2Jhc2VfZGlyKCksICcnLCAxKSBmb3IgdGVzdCBpbiBmYWlsZWRfdGVzdHNdCiAgICAgICAg
ICAgICBzeXMuc3Rkb3V0LndyaXRlKCJUZXN0cyBmYWlsZWQgKCVkKTogJXNcbiIgJSAobGVuKG5h
bWVzKSwgIiwgIi5qb2luKG5hbWVzKSkpCiAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkK
IAogICAgICAgICBpZiBjcmFzaGVkX3Rlc3RzOgotICAgICAgICAgICAgbmFtZXMgPSBbdGVzdC5y
ZXBsYWNlKHNlbGYuX3Byb2dyYW1zX3BhdGgsICcnLCAxKSBmb3IgdGVzdCBpbiBjcmFzaGVkX3Rl
c3RzXQorICAgICAgICAgICAgbmFtZXMgPSBbdGVzdC5yZXBsYWNlKHNlbGYuX3Rlc3RfcHJvZ3Jh
bXNfYmFzZV9kaXIoKSwgJycsIDEpIGZvciB0ZXN0IGluIGNyYXNoZWRfdGVzdHNdCiAgICAgICAg
ICAgICBzeXMuc3Rkb3V0LndyaXRlKCJUZXN0cyB0aGF0IGNyYXNoZWQgKCVkKTogJXNcbiIgJSAo
bGVuKG5hbWVzKSwgIiwgIi5qb2luKG5hbWVzKSkpCiAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZs
dXNoKCkKIAogICAgICAgICBpZiB0aW1lZF9vdXRfdGVzdHM6Ci0gICAgICAgICAgICBuYW1lcyA9
IFt0ZXN0LnJlcGxhY2Uoc2VsZi5fcHJvZ3JhbXNfcGF0aCwgJycsIDEpIGZvciB0ZXN0IGluIHRp
bWVkX291dF90ZXN0c10KKyAgICAgICAgICAgIG5hbWVzID0gW3Rlc3QucmVwbGFjZShzZWxmLl90
ZXN0X3Byb2dyYW1zX2Jhc2VfZGlyKCksICcnLCAxKSBmb3IgdGVzdCBpbiB0aW1lZF9vdXRfdGVz
dHNdCiAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJUZXN0cyB0aGF0IHRpbWVkIG91dCAo
JWQpOiAlc1xuIiAlIChsZW4obmFtZXMpLCAiLCAiLmpvaW4obmFtZXMpKSkKICAgICAgICAgICAg
IHN5cy5zdGRvdXQuZmx1c2goKQogCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3N0eWxlL2NoZWNrZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIu
cHkKaW5kZXggNDIxZWYyNy4uY2MzZGEyNSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9zdHlsZS9jaGVja2VyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUv
Y2hlY2tlci5weQpAQCAtMzE3LDcgKzMxNyw3IEBAIF9DTUFLRV9GSUxFX0VYVEVOU0lPTiA9ICdj
bWFrZScKICMgV2ViS2l0IG1haW50YWlucyBzb21lIGZpbGVzIGluIE1vemlsbGEgc3R5bGUgb24g
cHVycG9zZSB0byBlYXNlCiAjIGZ1dHVyZSBtZXJnZXMuCiBfU0tJUFBFRF9GSUxFU19XSVRIX1dB
Uk5JTkcgPSBbCi0gICAgIlNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzLyIsCisgICAgIlRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrLyIsCiAgICAgIyBBbGwgV2ViS2l0Ki5oIGZpbGVz
IGluIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrLAogICAgICMgZXhjZXB0IHRob3Nl
IGVuZGluZyBpbiAuLi5Qcml2YXRlLmggYXJlIEdUSysgQVBJIGhlYWRlcnMsCiAgICAgIyB3aGlj
aCBkaWZmZXIgZ3JlYXRseSBmcm9tIFdlYktpdCBjb2Rpbmcgc3R5bGUuCmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJfdW5pdHRlc3QucHkgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJfdW5pdHRlc3QucHkKaW5kZXggOTQ1YWZmOS4u
Yjk1NGU2YiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vy
X3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcl91
bml0dGVzdC5weQpAQCAtMjgwLDcgKzI4MCw3IEBAIGNsYXNzIENoZWNrZXJEaXNwYXRjaGVyU2tp
cFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAiIiJUZXN0IHNob3VsZF9za2lwX3dp
dGhfd2FybmluZygpLiIiIgogICAgICAgICAjIENoZWNrIHNraXBwZWQgZmlsZXMuCiAgICAgICAg
IHBhdGhzX3RvX3NraXAgPSBbCi0gICAgICAgICAgICJTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90
ZXN0YXRrLmMiLAorICAgICAgICAgICAiVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRH
dGsvdGVzdGF0ay5jIiwKICAgICAgICAgICAgIlNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3dlYmtpdDIuaCIsCiAgICAgICAgICAgICJTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3LmgiLAogICAgICAgICAgICAiU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0TG9hZGVyLmgiLApAQCAtMjk3LDggKzI5Nyw4IEBAIGNsYXNzIENo
ZWNrZXJEaXNwYXRjaGVyU2tpcFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICAi
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvSGVscGVyQ2xhc3MuaCIsCiAgICAgICAg
ICAgICJTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcCIs
CiAgICAgICAgICAgICJTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJW
aWV3UHJpdmF0ZS5oIiwKLSAgICAgICAgICAgIlNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcCIsCi0gICAgICAgICAgICJTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5oIiwKKyAgICAgICAgICAgIlRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9XZWJWaWV3VGVzdC5jcHAiLAorICAgICAg
ICAgICAiVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1dlYlZpZXdUZXN0Lmgi
LAogICAgICAgICAgICAgXQogCiAgICAgICAgIGZvciBwYXRoIGluIHBhdGhzX25vdF90b19za2lw
OgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9HTlVtYWtlZmlsZS5hbSBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvR05VbWFrZWZpbGUuYW0KaW5kZXggMmVhMTA0MC4uMDQ5YWMzZSAxMDA2
NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9HTlVtYWtlZmlsZS5hbQorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL0dOVW1ha2VmaWxlLmFtCkBAIC0xLDYgKzEsMTEgQEAKIG5vaW5zdF9MVExJ
QlJBUklFUyArPSBcCiAJTGlicmFyaWVzL2xpYlRlc3RXZWJLaXRBUElNYWluLmxhCiAKK2lmIEVO
QUJMRV9XRUJLSVQyCitub2luc3RfTFRMSUJSQVJJRVMgKz0gXAorCUxpYnJhcmllcy9saWJUZXN0
V2ViS2l0Mkd0a0FQSS5sYQorZW5kaWYKKwogTGlicmFyaWVzX2xpYlRlc3RXZWJLaXRBUElNYWlu
X2xhX1NPVVJDRVMgPSBcCiAJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0LmggXAogCVRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHNDb250cm9sbGVyLmNwcCBcCkBAIC0yMCwzNyArMjUsMTg0IEBAIExp
YnJhcmllc19saWJUZXN0V2ViS2l0QVBJTWFpbl9sYV9DUFBGTEFHUyA9IFwKIAkkKGphdmFzY3Jp
cHRjb3JlX2NwcGZsYWdzKSBcCiAJJChHVEtfQ0ZMQUdTKQogCit3ZWJraXRndGtfdGVzdHNfY2Zs
YWdzID0gXAorCS1mbm8tc3RyaWN0LWFsaWFzaW5nIFwKKwktRFRFU1RfUExVR0lOX0RJUj1cIiR7
c2hlbGwgcHdkfS8ke3RvcF9idWlsZGRpcn0vVGVzdE5ldHNjYXBlUGx1Z2luLy5saWJzXCIgXAor
CS1JJChzcmNkaXIpL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Gb3J3YXJkaW5nSGVhZGVycyBcCisJ
LUkkKFdlYktpdCkgXAorCS1JJChHRU5TT1VSQ0VTKSBcCisJLUkkKHRvcF9idWlsZGRpcikvU291
cmNlL1dlYktpdC9ndGsgXAorCS1JJCh0b3Bfc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cyBcCisJLUkkKHRvcF9zcmNkaXIpL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QgXAor
CSQoZ2xvYmFsX2NwcGZsYWdzKSBcCisJJChnbG9iYWxfY2ZsYWdzKSBcCisJJChqYXZhc2NyaXB0
Y29yZV9jcHBmbGFncykgXAorCSQoRlJFRVRZUEVfQ0ZMQUdTKSBcCisJJChHTElCX0NGTEFHUykg
XAorCSQoR1RLX0NGTEFHUykgXAorCSQoTElCU09VUF9DRkxBR1MpIFwKKwkkKFhSRU5ERVJfQ0ZM
QUdTKSBcCisJJChYVF9DRkxBR1MpCisKK3dlYmtpdGd0a190ZXN0c19sZGFkZCA9IFwKKwlsaWJq
YXZhc2NyaXB0Y29yZWd0ay1AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQC5AV0VCS0lUR1RL
X0FQSV9NSU5PUl9WRVJTSU9OQC5sYSBcCisJbGlid2Via2l0Z3RrLUBXRUJLSVRHVEtfQVBJX01B
Sk9SX1ZFUlNJT05ALkBXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05ALmxhIFwKKwkkKEZSRUVU
WVBFX0xJQlMpIFwKKwkkKEdUS19MSUJTKSBcCisJJChHTElCX0xJQlMpIFwKKwkkKExJQlNPVVBf
TElCUykgXAorCSQoWFJFTkRFUl9MSUJTKQorCit3ZWJraXRndGtfdGVzdHNfbGRmbGFncyA9IFwK
Kwktbm8taW5zdGFsbAorCisKK3dlYmtpdDJndGtfdGVzdHNfY3BwZmxhZ3MgPSBcCisJLURXRUJL
SVRfRVhFQ19QQVRIPVwiJHtzaGVsbCBwd2R9LyQodG9wX2J1aWxkZGlyKS9Qcm9ncmFtc1wiIFwK
KwktRFdFQktJVF9TUkNfRElSPVwiJHtzaGVsbCBwd2R9LyR7c3JjZGlyfVwiIFwKKwktRFdFQktJ
VF9ERVJJVkVEX1NSQ19ESVI9XCIke3NoZWxsIHB3ZH0vJHt0b3BfYnVpbGRkaXJ9L0Rlcml2ZWRT
b3VyY2VzXCIgXAorCS1EV0VCS0lUX1RFU1RfUExVR0lOX0RJUj1cIiR7c2hlbGwgcHdkfS8ke3Rv
cF9idWlsZGRpcn0vVGVzdE5ldHNjYXBlUGx1Z2luLy5saWJzXCIgXAorCS1EV0VCS0lUX1RFU1Rf
V0VCX0VYVEVOU0lPTlNfRElSPVwiJHtzaGVsbCBwd2R9LyR7dG9wX2J1aWxkZGlyfS9MaWJyYXJp
ZXMvV2ViRXh0ZW5zaW9ucy8ubGlic1wiIFwKKwktRFdFQktJVF9JTkpFQ1RFRF9CVU5ETEVfUEFU
SD1cIiR7c2hlbGwgcHdkfS8kKHRvcF9idWlsZGRpcikvLmxpYnNcIiBcCisJJChqYXZhc2NyaXB0
Y29yZV9jcHBmbGFncykgXAorCS1JJChzcmNkaXIpL1NvdXJjZSBcCisJLUkkKHNyY2RpcikvU291
cmNlL1dlYktpdDIgXAorCS1JJChzcmNkaXIpL1NvdXJjZS9KYXZhU2NyaXB0Q29yZSBcCisJLUkk
KHNyY2RpcikvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ayBcCisJLUkkKHRvcF9i
dWlsZGRpcikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9pbmNsdWRlIFwKKwktSSQodG9wX2J1aWxk
ZGlyKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL3dlYmtpdDJndGsgXAorCS1JJCh0b3BfYnVpbGRk
aXIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvd2Via2l0Mmd0ay9pbmNsdWRlIFwKKwktSSQoc3Jj
ZGlyKS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ayBcCisJJChnbG9iYWxfY3BwZmxh
Z3MpIFwKKwkkKEZSRUVUWVBFX0NGTEFHUykgXAorCSQoR0xJQl9DRkxBR1MpIFwKKwkkKEdUS19D
RkxBR1MpIFwKKwkkKExJQlNPVVBfQ0ZMQUdTKQorCit3ZWJraXQyZ3RrX3Rlc3RzX2xkYWRkID0g
XAorCUxpYnJhcmllcy9saWJUZXN0V2ViS2l0Mkd0a0FQSS5sYSBcCisJbGliamF2YXNjcmlwdGNv
cmVndGstQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkAuQFdFQktJVEdUS19BUElfTUlOT1Jf
VkVSU0lPTkAubGEgXAorCWxpYndlYmtpdDJndGstQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lP
TkAuQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkAubGEgXAorCSQoRlJFRVRZUEVfTElCUykg
XAorCSQoR0VPQ0xVRV9MSUJTKSBcCisJJChHTElCX0xJQlMpIFwKKwkkKEdUS19MSUJTKSBcCisJ
JChMSUJTT1VQX0xJQlMpCisKK3dlYmtpdDJndGtfdGVzdHNfbGRmbGFncyA9IFwKKwktbm8taW5z
dGFsbAorCitMaWJyYXJpZXNfbGliVGVzdFdlYktpdDJHdGtBUElfbGFfU09VUkNFUyA9IFwKKwlU
b29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL0xvYWRUcmFja2luZ1Rlc3QuY3BwIFwK
KwlUb29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL0xvYWRUcmFja2luZ1Rlc3QuaCBc
CisJVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9XZWJLaXRUZXN0QnVzLmNwcCBc
CisJVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9XZWJLaXRUZXN0QnVzLmggXAor
CVRvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViS2l0VGVzdFNlcnZlci5jcHAg
XAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViS2l0VGVzdFNlcnZlci5o
IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYlByb2Nlc3NUZXN0UnVu
bmVyLmNwcCBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9XZWJQcm9jZXNz
VGVzdFJ1bm5lci5oIFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1Rlc3RN
YWluLmNwcCBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9UZXN0TWFpbi5o
IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYlZpZXdUZXN0LmNwcCBc
CisJVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9XZWJWaWV3VGVzdC5oCisKK0xp
YnJhcmllc19saWJUZXN0V2ViS2l0Mkd0a0FQSV9sYV9DUFBGTEFHUyA9ICQod2Via2l0Mmd0a190
ZXN0c19jcHBmbGFncykKKworCiBub2luc3RfUFJPR1JBTVMgKz0gXAotCVByb2dyYW1zL1Rlc3RX
ZWJLaXRBUEkvVGVzdFdURiBcCi0JUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9UZXN0SmF2YVNjcmlw
dENvcmUgXAotCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYkNvcmUgXAotCVByb2dyYW1z
L1Rlc3RXZWJLaXRBUEkvVGVzdEd0aworCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV1RGL1Rlc3RX
VEYgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvSmF2YVNjcmlwdENvcmUvVGVzdEphdmFTY3Jp
cHRDb3JlIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYkNvcmUvVGVzdFdlYkNvcmUgXAor
CVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViQ29yZUd0ay9UZXN0V2ViQ29yZUd0aworCitpZiBF
TkFCTEVfV0VCS0lUMQorbm9pbnN0X1BST0dSQU1TICs9IFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0
QVBJL1dlYktpdEd0ay90ZXN0YXBwbGljYXRpb25jYWNoZSBcCisJUHJvZ3JhbXMvVGVzdFdlYktp
dEFQSS9XZWJLaXRHdGsvdGVzdGNvbnRleHRtZW51IFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJ
L1dlYktpdEd0ay90ZXN0ZG9tZG9jdW1lbnQgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2Vi
S2l0R3RrL3Rlc3Rkb21kb213aW5kb3cgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0
R3RrL3Rlc3Rkb21ub2RlIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdEd0ay90ZXN0
aHR0cGJhY2tlbmQgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0R3RrL3Rlc3RmYXZp
Y29uZGF0YWJhc2UgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0R3RrL3Rlc3Rsb2Fk
aW5nIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdEd0ay90ZXN0Z2xvYmFscyBcCisJ
UHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXRHdGsvdGVzdG1pbWVoYW5kbGluZyBcCisJUHJv
Z3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXRHdGsvdGVzdG5ldHdvcmtyZXF1ZXN0IFwKKwlQcm9n
cmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdEd0ay90ZXN0bmV0d29ya3Jlc3BvbnNlIFwKKwlQcm9n
cmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdEd0ay90ZXN0d2ViZnJhbWUgXAorCVByb2dyYW1zL1Rl
c3RXZWJLaXRBUEkvV2ViS2l0R3RrL3Rlc3R3ZWJiYWNrZm9yd2FyZGxpc3QgXAorCVByb2dyYW1z
L1Rlc3RXZWJLaXRBUEkvV2ViS2l0R3RrL3Rlc3R3ZWJoaXN0b3J5aXRlbSBcCisJUHJvZ3JhbXMv
VGVzdFdlYktpdEFQSS9XZWJLaXRHdGsvdGVzdHdpbmRvdyBcCisJUHJvZ3JhbXMvVGVzdFdlYktp
dEFQSS9XZWJLaXRHdGsvdGVzdGRvd25sb2FkIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dl
YktpdEd0ay90ZXN0YXRrIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdEd0ay90ZXN0
YXRrcm9sZXMgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0R3RrL3Rlc3RoaXR0ZXN0
cmVzdWx0IFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdEd0ay90ZXN0d2ViaW5zcGVj
dG9yIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdEd0ay90ZXN0d2Vic2V0dGluZ3Mg
XAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0R3RrL3Rlc3R3ZWJyZXNvdXJjZSBcCisJ
UHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXRHdGsvdGVzdHdlYmRhdGFzb3VyY2UgXAorCVBy
b2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0R3RrL3Rlc3R3ZWJwbHVnaW5kYXRhYmFzZSBcCisJ
UHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXRHdGsvdGVzdHdlYnZpZXcgXAorCVByb2dyYW1z
L1Rlc3RXZWJLaXRBUEkvV2ViS2l0R3RrL3Rlc3RrZXlldmVudHMgXAorCVByb2dyYW1zL1Rlc3RX
ZWJLaXRBUEkvV2ViS2l0R3RrL3Rlc3Rjb3B5YW5kcGFzdGUKK2VuZGlmCiAKIGlmIEVOQUJMRV9X
RUJLSVQyCiBub2luc3RfUFJPR1JBTVMgKz0gXAotCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvVGVz
dFdlYktpdDIKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdDIvVGVzdFdlYktpdDIgXAor
CVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0Mkd0ay9JbnNwZWN0b3JUZXN0U2VydmVyIFwK
KwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdDJHdGsvVGVzdEF1dGhlbnRpY2F0aW9uIFwK
KwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdDJHdGsvVGVzdEJhY2tGb3J3YXJkTGlzdCBc
CisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXQyR3RrL1Rlc3RDb250ZXh0TWVudSBcCisJ
UHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXQyR3RrL1Rlc3RDb29raWVNYW5hZ2VyIFwKKwlQ
cm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdDJHdGsvVGVzdERPTU5vZGUgXAorCVByb2dyYW1z
L1Rlc3RXZWJLaXRBUEkvV2ViS2l0Mkd0ay9UZXN0RG93bmxvYWRzIFwKKwlQcm9ncmFtcy9UZXN0
V2ViS2l0QVBJL1dlYktpdDJHdGsvVGVzdEZyYW1lIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJ
L1dlYktpdDJHdGsvVGVzdEluc3BlY3RvciBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJL
aXQyR3RrL1Rlc3RJbnNwZWN0b3JTZXJ2ZXIgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2Vi
S2l0Mkd0ay9UZXN0TG9hZGVyQ2xpZW50IFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktp
dDJHdGsvVGVzdFByaW50aW5nIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdDJHdGsv
VGVzdFJlc291cmNlcyBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXQyR3RrL1Rlc3RT
U0wgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0Mkd0ay9UZXN0VUlDbGllbnQgXAor
CVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0Mkd0ay9UZXN0V2ViRXh0ZW5zaW9ucyBcCisJ
UHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRWZXJzaW9uIFwKKwlQ
cm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdDJHdGsvVGVzdFdlYktpdEZhdmljb25EYXRhYmFz
ZSBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRGaW5kQ29u
dHJvbGxlciBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRQ
b2xpY3lDbGllbnQgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0Mkd0ay9UZXN0V2Vi
S2l0U2V0dGluZ3MgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0Mkd0ay9UZXN0V2Vi
S2l0V2ViQ29udGV4dCBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXQyR3RrL1Rlc3RX
ZWJLaXRXZWJWaWV3IFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdDJHdGsvVGVzdFdl
YktpdFdlYlZpZXdHcm91cCBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXQyR3RrL1Rl
c3RXZWJWaWV3RWRpdG9yCisKK2lmIEhBVkVfQVRTUEkyCitub2luc3RfUFJPR1JBTVMgKz0gXAor
CVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0Mkd0ay9BY2Nlc3NpYmlsaXR5VGVzdFNlcnZl
ciBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRBY2Nlc3Np
YmlsaXR5CitlbmRpZgogZW5kaWYgIyBFTkFCTEVfV0VCS0lUMgogCi1Qcm9ncmFtc19UZXN0V2Vi
S2l0QVBJX1Rlc3RXVEZfQ1BQRkxBR1MgPSBcCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dURl9U
ZXN0V1RGX0NQUEZMQUdTID0gXAogCSQoTGlicmFyaWVzX2xpYlRlc3RXZWJLaXRBUElNYWluX2xh
X0NQUEZMQUdTKSBcCiAJJChHTElCX0xJQlMpIFwKIAkkKENBSVJPX0NGTEFHUykKIAotUHJvZ3Jh
bXNfVGVzdFdlYktpdEFQSV9UZXN0V1RGX0NYWEZMQUdTID0gXAorUHJvZ3JhbXNfVGVzdFdlYktp
dEFQSV9XVEZfVGVzdFdURl9DWFhGTEFHUyA9IFwKIAktREdURVNUX0hBU19SVFRJPTAgXAogCSQo
Z2xvYmFsX2N4eGZsYWdzKQogCi1Qcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RXVEZfTERBREQg
PSBcCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dURl9UZXN0V1RGX0xEQUREID0gXAogCUxpYnJh
cmllcy9saWJUZXN0V2ViS2l0QVBJTWFpbi5sYSBcCiAJTGlicmFyaWVzL2xpYmd0ZXN0LmxhIFwK
IAlsaWJXVEYubGEgXAogCSQoR1RLX0xJQlMpIFwKIAkkKEdMSUJfTElCUykKIAotUHJvZ3JhbXNf
VGVzdFdlYktpdEFQSV9UZXN0V1RGX0xERkxBR1MgPSBcCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJ
X1dURl9UZXN0V1RGX0xERkxBR1MgPSBcCiAJLW5vLWluc3RhbGwKIAotUHJvZ3JhbXNfVGVzdFdl
YktpdEFQSV9UZXN0V1RGX1NPVVJDRVMgPSBcCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dURl9U
ZXN0V1RGX1NPVVJDRVMgPSBcCiAJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQXRvbWlj
U3RyaW5nLmNwcCBcCiAJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ1N0cmluZy5jcHAg
XAogCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NoZWNrZWRBcml0aG1ldGljT3BlcmF0
aW9ucy5jcHAgXApAQCAtNzgsMjMgKzIzMCwyMyBAQCBQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rl
c3RXVEZfU09VUkNFUyA9IFwKIAlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9WZWN0b3Iu
Y3BwIFwKIAlUb29scy9UZXN0V2ViS2l0QVBJL1dURlN0cmluZ1V0aWxpdGllcy5oCiAKLVByb2dy
YW1zX1Rlc3RXZWJLaXRBUElfVGVzdEphdmFTY3JpcHRDb3JlX0NQUEZMQUdTID0gXAorUHJvZ3Jh
bXNfVGVzdFdlYktpdEFQSV9KYXZhU2NyaXB0Q29yZV9UZXN0SmF2YVNjcmlwdENvcmVfQ1BQRkxB
R1MgPSBcCiAJJChMaWJyYXJpZXNfbGliVGVzdFdlYktpdEFQSU1haW5fbGFfQ1BQRkxBR1MpCiAK
LVByb2dyYW1zX1Rlc3RXZWJLaXRBUElfVGVzdEphdmFTY3JpcHRDb3JlX0NYWEZMQUdTID0gXAor
UHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9KYXZhU2NyaXB0Q29yZV9UZXN0SmF2YVNjcmlwdENvcmVf
Q1hYRkxBR1MgPSBcCiAJLURHVEVTVF9IQVNfUlRUST0wIFwKIAkkKGdsb2JhbF9jeHhmbGFncykK
IAotUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0SmF2YVNjcmlwdENvcmVfTERBREQgPSBcCitQ
cm9ncmFtc19UZXN0V2ViS2l0QVBJX0phdmFTY3JpcHRDb3JlX1Rlc3RKYXZhU2NyaXB0Q29yZV9M
REFERCA9IFwKIAlMaWJyYXJpZXMvbGliVGVzdFdlYktpdEFQSU1haW4ubGEgXAogCUxpYnJhcmll
cy9saWJndGVzdC5sYSBcCiAJbGliV1RGLmxhIFwKIAkkKEdUS19MSUJTKQogCi1Qcm9ncmFtc19U
ZXN0V2ViS2l0QVBJX1Rlc3RKYXZhU2NyaXB0Q29yZV9MREZMQUdTID0gXAorUHJvZ3JhbXNfVGVz
dFdlYktpdEFQSV9KYXZhU2NyaXB0Q29yZV9UZXN0SmF2YVNjcmlwdENvcmVfTERGTEFHUyA9IFwK
IAktbm8taW5zdGFsbAogCi1Qcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RKYXZhU2NyaXB0Q29y
ZV9TT1VSQ0VTID0gXAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9KYXZhU2NyaXB0Q29yZV9UZXN0
SmF2YVNjcmlwdENvcmVfU09VUkNFUyA9IFwKIAlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL0ph
dmFTY3JpcHRDb3JlL1ZNSW5zcGVjdG9yLmNwcAogCiB3ZWJjb3JlX2xheWVyX2RlcHMgPSBcCkBA
IC0xMjksMTUgKzI4MSwxNSBAQCBsaWJXZWJDb3JlTGF5ZXIuYTogJCh3ZWJjb3JlX2xheWVyX2Rl
cHMpCiBESVNUQ0xFQU5GSUxFUyArPSBcCiAJJCh0b3BfYnVpbGRkaXIpL2xpYldlYkNvcmVMYXll
ci5hCiAKLVByb2dyYW1zX1Rlc3RXZWJLaXRBUElfVGVzdFdlYkNvcmVfQ1BQRkxBR1MgPSBcCitQ
cm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYkNvcmVfVGVzdFdlYkNvcmVfQ1BQRkxBR1MgPSBcCiAJ
JChMaWJyYXJpZXNfbGliVGVzdFdlYktpdEFQSU1haW5fbGFfQ1BQRkxBR1MpIFwKIAktSSQodG9w
X2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL2luY2x1ZGUKIAotUHJvZ3JhbXNfVGVz
dFdlYktpdEFQSV9UZXN0V2ViQ29yZV9DWFhGTEFHUyA9IFwKK1Byb2dyYW1zX1Rlc3RXZWJLaXRB
UElfV2ViQ29yZV9UZXN0V2ViQ29yZV9DWFhGTEFHUyA9IFwKIAktREdURVNUX0hBU19SVFRJPTAg
XAogCSQoZ2xvYmFsX2N4eGZsYWdzKQogCi1Qcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RXZWJD
b3JlX0xEQUREID0gXAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJDb3JlX1Rlc3RXZWJDb3Jl
X0xEQUREID0gXAogCUxpYnJhcmllcy9saWJUZXN0V2ViS2l0QVBJTWFpbi5sYSBcCiAJTGlicmFy
aWVzL2xpYmd0ZXN0LmxhIFwKIAlsaWJqYXZhc2NyaXB0Y29yZWd0ay1AV0VCS0lUR1RLX0FQSV9N
QUpPUl9WRVJTSU9OQC5AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQC5sYSBcCkBAIC0xNjQs
MTUgKzMxNiwxNSBAQCBQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RXZWJDb3JlX0xEQUREID0g
XAogCSQoWFRfTElCUykgXAogCSQoWkxJQl9MSUJTKQogCi1Qcm9ncmFtc19UZXN0V2ViS2l0QVBJ
X1Rlc3RXZWJDb3JlX0xERkxBR1MgPSBcCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYkNvcmVf
VGVzdFdlYkNvcmVfTERGTEFHUyA9IFwKIAktbm8taW5zdGFsbAogCi1Qcm9ncmFtc19UZXN0V2Vi
S2l0QVBJX1Rlc3RXZWJDb3JlX1NPVVJDRVMgPSBcCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dl
YkNvcmVfVGVzdFdlYkNvcmVfU09VUkNFUyA9IFwKIAlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvVVJMLmNwcCBcCiAJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0xh
eW91dFVuaXQuY3BwCiAKLVByb2dyYW1zX1Rlc3RXZWJLaXRBUElfVGVzdEd0a19DUFBGTEFHUyA9
IFwKLQkkKFByb2dyYW1zX1Rlc3RXZWJLaXRBUElfVGVzdFdURl9DUFBGTEFHUykgXAorUHJvZ3Jh
bXNfVGVzdFdlYktpdEFQSV9XZWJDb3JlR3RrX1Rlc3RXZWJDb3JlR3RrX0NQUEZMQUdTID0gXAor
CSQoUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XVEZfVGVzdFdURl9DUFBGTEFHUykgXAogCSQocGxh
dGZvcm1fY3BwZmxhZ3MpIFwKIAkkKHBsYXRmb3JtZ3RrX2NwcGZsYWdzKSBcCiAJJCh3ZWJjb3Jl
X2NwcGZsYWdzKSBcCkBAIC0xODIsMTEgKzMzNCwxMSBAQCBQcm9ncmFtc19UZXN0V2ViS2l0QVBJ
X1Rlc3RHdGtfQ1BQRkxBR1MgPSBcCiAJJChHVEtfQ0ZMQUdTKSBcCiAJJChMSUJTT1VQX0NGTEFH
UykKIAotUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0R3RrX0NYWEZMQUdTID0gXAorUHJvZ3Jh
bXNfVGVzdFdlYktpdEFQSV9XZWJDb3JlR3RrX1Rlc3RXZWJDb3JlR3RrX0NYWEZMQUdTID0gXAog
CS1ER1RFU1RfSEFTX1JUVEk9MCBcCiAJJChnbG9iYWxfY3h4ZmxhZ3MpCiAKLVByb2dyYW1zX1Rl
c3RXZWJLaXRBUElfVGVzdEd0a19MREFERCA9IFwKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2Vi
Q29yZUd0a19UZXN0V2ViQ29yZUd0a19MREFERCA9IFwKIAlMaWJyYXJpZXMvbGliVGVzdFdlYktp
dEFQSU1haW4ubGEgXAogCUxpYnJhcmllcy9saWJndGVzdC5sYSBcCiAJbGliamF2YXNjcmlwdGNv
cmVndGstQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkAuQFdFQktJVEdUS19BUElfTUlOT1Jf
VkVSU0lPTkAubGEgXApAQCAtMTk4LDEwICszNTAsMTAgQEAgUHJvZ3JhbXNfVGVzdFdlYktpdEFQ
SV9UZXN0R3RrX0xEQUREID0gXAogCSQoR1RLX0xJQlMpIFwKIAkkKExJQlNPVVBfTElCUykKIAot
UHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0R3RrX0xERkxBR1MgPSBcCi0JJChQcm9ncmFtc19U
ZXN0V2ViS2l0QVBJX1Rlc3RXVEZfTERGTEFHUykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2Vi
Q29yZUd0a19UZXN0V2ViQ29yZUd0a19MREZMQUdTID0gXAorCSQoUHJvZ3JhbXNfVGVzdFdlYktp
dEFQSV9XVEZfVGVzdFdURl9MREZMQUdTKQogCi1Qcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RH
dGtfU09VUkNFUyA9IFwKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViQ29yZUd0a19UZXN0V2Vi
Q29yZUd0a19TT1VSQ0VTID0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lu
dFBvaW50LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUuY3BwIFwKQEAg
LTIxMSwxOSArMzYzLDE5MiBAQCBQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RHdGtfU09VUkNF
UyA9IFwKIAlUb29scy9UZXN0V2ViS2l0QVBJL2NvbmZpZy5oIFwKIAlUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL2d0ay9JbnB1dE1ldGhvZEZpbHRlci5jcHAKIAotUHJvZ3JhbXNfVGVzdFdlYktp
dEFQSV9UZXN0V2ViS2l0Ml9DUFBGTEFHUyA9IFwKLQkkKFByb2dyYW1zX1Rlc3RXZWJLaXRBUElf
VGVzdFdURl9DUFBGTEFHUykgXAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVz
dGFwcGxpY2F0aW9uY2FjaGVfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdEd0ay90ZXN0YXBwbGljYXRpb25jYWNoZS5jCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJ
X1dlYktpdEd0a190ZXN0YXBwbGljYXRpb25jYWNoZV9DRkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0
c19jZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0YXBwbGljYXRp
b25jYWNoZV9MREFERCA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdl
YktpdEFQSV9XZWJLaXRHdGtfdGVzdGFwcGxpY2F0aW9uY2FjaGVfTERGTEFHUyA9ICQod2Via2l0
Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rl
c3Rjb250ZXh0bWVudV9TT1VSQ0VTID0gXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0R3RrL3Rlc3Rjb250ZXh0bWVudS5jCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0
a190ZXN0Y29udGV4dG1lbnVfQ0ZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfY2ZsYWdzKQorUHJv
Z3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGNvbnRleHRtZW51X0xEQUREID0gJCh3
ZWJraXRndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190
ZXN0Y29udGV4dG1lbnVfTERGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1By
b2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3Rkb21kb2N1bWVudF9TT1VSQ0VTID0g
XAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3Rkb21kb2N1bWVudC5j
CitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0ZG9tZG9jdW1lbnRfQ0ZMQUdT
ID0gJCh3ZWJraXRndGtfdGVzdHNfY2ZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJL
aXRHdGtfdGVzdGRvbWRvY3VtZW50X0xEQUREID0gJCh3ZWJraXRndGtfdGVzdHNfbGRhZGQpCitQ
cm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0ZG9tZG9jdW1lbnRfTERGTEFHUyA9
ICQod2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2Vi
S2l0R3RrX3Rlc3Rkb21kb213aW5kb3dfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdEd0ay90ZXN0ZG9tZG9td2luZG93LmMKK1Byb2dyYW1zX1Rlc3RXZWJLaXRB
UElfV2ViS2l0R3RrX3Rlc3Rkb21kb213aW5kb3dfQ0ZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNf
Y2ZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGRvbWRvbXdpbmRv
d19MREFERCA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQ
SV9XZWJLaXRHdGtfdGVzdGRvbWRvbXdpbmRvd19MREZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNf
bGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGRvbW5vZGVf
U09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0ZG9t
bm9kZS5jCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0ZG9tbm9kZV9DRkxB
R1MgPSAkKHdlYmtpdGd0a190ZXN0c19jZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dl
YktpdEd0a190ZXN0ZG9tbm9kZV9MREFERCA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkYWRkKQorUHJv
Z3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGRvbW5vZGVfTERGTEFHUyA9ICQod2Vi
a2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3Rr
X3Rlc3RodHRwYmFja2VuZF9TT1VSQ0VTID0gXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0R3RrL3Rlc3RodHRwYmFja2VuZC5jCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktp
dEd0a190ZXN0aHR0cGJhY2tlbmRfQ0ZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfY2ZsYWdzKQor
UHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGh0dHBiYWNrZW5kX0xEQUREID0g
JCh3ZWJraXRndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0
a190ZXN0aHR0cGJhY2tlbmRfTERGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisK
K1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3RmYXZpY29uZGF0YWJhc2VfU09V
UkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0ZmF2aWNv
bmRhdGFiYXNlLmMgXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3Rf
dXRpbHMuYworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGZhdmljb25kYXRh
YmFzZV9DRkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19jZmxhZ3MpCitQcm9ncmFtc19UZXN0V2Vi
S2l0QVBJX1dlYktpdEd0a190ZXN0ZmF2aWNvbmRhdGFiYXNlX0xEQUREID0gJCh3ZWJraXRndGtf
dGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0ZmF2aWNv
bmRhdGFiYXNlX0xERkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFt
c19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0Z2xvYmFsc19TT1VSQ0VTID0gXAorCVRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RnbG9iYWxzLmMKK1Byb2dyYW1zX1Rl
c3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3RnbG9iYWxzX0NGTEFHUyA9ICQod2Via2l0Z3RrX3Rl
c3RzX2NmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3RnbG9iYWxz
X0xEQUREID0gJCh3ZWJraXRndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJ
X1dlYktpdEd0a190ZXN0Z2xvYmFsc19MREZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfbGRmbGFn
cykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGxvYWRpbmdfU09VUkNF
UyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0bG9hZGluZy5j
CitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0bG9hZGluZ19DRkxBR1MgPSAk
KHdlYmtpdGd0a190ZXN0c19jZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0
a190ZXN0bG9hZGluZ19MREFERCA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNf
VGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGxvYWRpbmdfTERGTEFHUyA9ICQod2Via2l0Z3Rr
X3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3Rt
aW1laGFuZGxpbmdfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dEd0ay90ZXN0bWltZWhhbmRsaW5nLmMgXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0R3RrL3Rlc3RfdXRpbHMuYworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVz
dG1pbWVoYW5kbGluZ19DRkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19jZmxhZ3MpCitQcm9ncmFt
c19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0bWltZWhhbmRsaW5nX0xEQUREID0gJCh3ZWJr
aXRndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0
bWltZWhhbmRsaW5nX0xERkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19sZGZsYWdzKQorCitQcm9n
cmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0bmV0d29ya3JlcXVlc3RfU09VUkNFUyA9
IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0bmV0d29ya3JlcXVl
c3QuYworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdG5ldHdvcmtyZXF1ZXN0
X0NGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2NmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRB
UElfV2ViS2l0R3RrX3Rlc3RuZXR3b3JrcmVxdWVzdF9MREFERCA9ICQod2Via2l0Z3RrX3Rlc3Rz
X2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdG5ldHdvcmtyZXF1
ZXN0X0xERkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0
V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0bmV0d29ya3Jlc3BvbnNlX1NPVVJDRVMgPSBcCisJVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdG5ldHdvcmtyZXNwb25zZS5jCitQ
cm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0bmV0d29ya3Jlc3BvbnNlX0NGTEFH
UyA9ICQod2Via2l0Z3RrX3Rlc3RzX2NmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2Vi
S2l0R3RrX3Rlc3RuZXR3b3JrcmVzcG9uc2VfTERBREQgPSAkKHdlYmtpdGd0a190ZXN0c19sZGFk
ZCkKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3RuZXR3b3JrcmVzcG9uc2Vf
TERGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJL
aXRBUElfV2ViS2l0R3RrX3Rlc3R3ZWJmcmFtZV9TT1VSQ0VTID0gXAorCVRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJmcmFtZS5jCitQcm9ncmFtc19UZXN0V2ViS2l0
QVBJX1dlYktpdEd0a190ZXN0d2ViZnJhbWVfQ0ZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfY2Zs
YWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdHdlYmZyYW1lX0xEQURE
ID0gJCh3ZWJraXRndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktp
dEd0a190ZXN0d2ViZnJhbWVfTERGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisK
K1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3R3ZWJwbHVnaW5kYXRhYmFzZV9T
T1VSQ0VTID0gXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJw
bHVnaW5kYXRhYmFzZS5jCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0d2Vi
cGx1Z2luZGF0YWJhc2VfQ0ZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfY2ZsYWdzKQorUHJvZ3Jh
bXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdHdlYnBsdWdpbmRhdGFiYXNlX0xEQUREID0g
JCh3ZWJraXRndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0
a190ZXN0d2VicGx1Z2luZGF0YWJhc2VfTERGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkZmxh
Z3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3R3ZWJiYWNrZm9yd2Fy
ZGxpc3RfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90
ZXN0d2ViYmFja2ZvcndhcmRsaXN0LmMKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3Rr
X3Rlc3R3ZWJiYWNrZm9yd2FyZGxpc3RfQ0ZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfY2ZsYWdz
KQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdHdlYmJhY2tmb3J3YXJkbGlz
dF9MREFERCA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQ
SV9XZWJLaXRHdGtfdGVzdHdlYmJhY2tmb3J3YXJkbGlzdF9MREZMQUdTID0gJCh3ZWJraXRndGtf
dGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdHdl
Ymhpc3RvcnlpdGVtX1NPVVJDRVMgPSBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRHdGsvdGVzdHdlYmhpc3RvcnlpdGVtLmMKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0
R3RrX3Rlc3R3ZWJoaXN0b3J5aXRlbV9DRkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19jZmxhZ3Mp
CitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0d2ViaGlzdG9yeWl0ZW1fTERB
REQgPSAkKHdlYmtpdGd0a190ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2Vi
S2l0R3RrX3Rlc3R3ZWJoaXN0b3J5aXRlbV9MREZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfbGRm
bGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdHdpbmRvd19TT1VS
Q0VTID0gXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3aW5kb3cu
YworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdHdpbmRvd19DRkxBR1MgPSAk
KHdlYmtpdGd0a190ZXN0c19jZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0
a190ZXN0d2luZG93X0xEQUREID0gJCh3ZWJraXRndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19U
ZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0d2luZG93X0xERkxBR1MgPSAkKHdlYmtpdGd0a190
ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0ZG93
bmxvYWRfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90
ZXN0ZG93bmxvYWQuYworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGRvd25s
b2FkX0NGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2NmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJL
aXRBUElfV2ViS2l0R3RrX3Rlc3Rkb3dubG9hZF9MREFERCA9ICQod2Via2l0Z3RrX3Rlc3RzX2xk
YWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGRvd25sb2FkX0xERkxB
R1MgPSAkKHdlYmtpdGd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJ
X1dlYktpdEd0a190ZXN0YXRrX1NPVVJDRVMgPSBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRHdGsvdGVzdGF0ay5jCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190
ZXN0YXRrX0NGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2NmbGFncykKK1Byb2dyYW1zX1Rlc3RX
ZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3RhdGtfTERBREQgPSAkKHdlYmtpdGd0a190ZXN0c19sZGFk
ZCkKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3RhdGtfTERGTEFHUyA9ICQo
d2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0
R3RrX3Rlc3RhdGtyb2xlc19TT1VSQ0VTID0gXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0R3RrL3Rlc3RhdGtyb2xlcy5jCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0
a190ZXN0YXRrcm9sZXNfQ0ZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfY2ZsYWdzKQorUHJvZ3Jh
bXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGF0a3JvbGVzX0xEQUREID0gJCh3ZWJraXRn
dGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0YXRr
cm9sZXNfTERGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rl
c3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3R3ZWJpbnNwZWN0b3JfU09VUkNFUyA9IFwKKwlUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2ViaW5zcGVjdG9yLmMgXAorCVRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RfdXRpbHMuYworUHJvZ3JhbXNf
VGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdHdlYmluc3BlY3Rvcl9DRkxBR1MgPSAkKHdlYmtp
dGd0a190ZXN0c19jZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0
d2ViaW5zcGVjdG9yX0xEQUREID0gJCh3ZWJraXRndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19U
ZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0d2ViaW5zcGVjdG9yX0xERkxBR1MgPSAkKHdlYmtp
dGd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190
ZXN0d2Vic2V0dGluZ3NfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdEd0ay90ZXN0d2Vic2V0dGluZ3MuYworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRH
dGtfdGVzdHdlYnNldHRpbmdzX0NGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2NmbGFncykKK1By
b2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3R3ZWJzZXR0aW5nc19MREFERCA9ICQo
d2Via2l0Z3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtf
dGVzdHdlYnNldHRpbmdzX0xERkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19sZGZsYWdzKQorCitQ
cm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0d2VicmVzb3VyY2VfU09VUkNFUyA9
IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2VicmVzb3VyY2Uu
YworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdHdlYnJlc291cmNlX0NGTEFH
UyA9ICQod2Via2l0Z3RrX3Rlc3RzX2NmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2Vi
S2l0R3RrX3Rlc3R3ZWJyZXNvdXJjZV9MREFERCA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkYWRkKQor
CitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0d2ViZGF0YXNvdXJjZV9TT1VS
Q0VTID0gXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJkYXRh
c291cmNlLmMKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3R3ZWJkYXRhc291
cmNlX0NGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2NmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJL
aXRBUElfV2ViS2l0R3RrX3Rlc3R3ZWJkYXRhc291cmNlX0xEQUREID0gJCh3ZWJraXRndGtfdGVz
dHNfbGRhZGQpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3R3ZWJ2aWV3
X1NPVVJDRVMgPSBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdl
YnZpZXcuYyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0X3V0aWxzLmMK
K1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3R3ZWJ2aWV3X0NGTEFHUyA9ICQo
d2Via2l0Z3RrX3Rlc3RzX2NmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3Rr
X3Rlc3R3ZWJ2aWV3X0xEQUREID0gJCh3ZWJraXRndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19U
ZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0d2Vidmlld19MREZMQUdTID0gJCh3ZWJraXRndGtf
dGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGhp
dHRlc3RyZXN1bHRfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dEd0ay90ZXN0aGl0dGVzdHJlc3VsdC5jCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0
a190ZXN0aGl0dGVzdHJlc3VsdF9DRkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19jZmxhZ3MpCitQ
cm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0aGl0dGVzdHJlc3VsdF9MREFERCA9
ICQod2Via2l0Z3RrX3Rlc3RzX2xkYWRkKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktp
dEd0a190ZXN0a2V5ZXZlbnRzX1NPVVJDRVMgPSBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRHdGsvdGVzdGtleWV2ZW50cy5jCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktp
dEd0a190ZXN0a2V5ZXZlbnRzX0NGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2NmbGFncykKK1By
b2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3RrZXlldmVudHNfTERBREQgPSAkKHdl
YmtpdGd0a190ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rl
c3RrZXlldmVudHNfTERGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dy
YW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3Rjb3B5YW5kcGFzdGVfU09VUkNFUyA9IFwK
KwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0Y29weWFuZHBhc3RlLmMg
XAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtWZXJzaW9uaW5nLmMKK1Byb2dyYW1z
X1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3Rjb3B5YW5kcGFzdGVfQ0ZMQUdTID0gXAorCSQo
d2Via2l0Z3RrX3Rlc3RzX2NmbGFncykgXAorCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ayBcCisJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUKK1Byb2dyYW1zX1Rlc3RX
ZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3Rjb3B5YW5kcGFzdGVfTERBREQgPSAkKHdlYmtpdGd0a190
ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3Rjb3B5YW5k
cGFzdGVfTERGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKKworUHJvZ3JhbXNf
VGVzdFdlYktpdEFQSV9XZWJLaXQyX1Rlc3RXZWJLaXQyX0NQUEZMQUdTID0gXAorCSQoUHJvZ3Jh
bXNfVGVzdFdlYktpdEFQSV9XVEZfVGVzdFdURl9DUFBGTEFHUykgXAogCS1JJCh0b3BfYnVpbGRk
aXIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvaW5jbHVkZSBcCiAJJChGUkVFVFlQRV9DRkxBR1Mp
IFwKIAkkKEdMSUJfQ0ZMQUdTKSBcCiAJJChHVEtfQ0ZMQUdTKSBcCiAJJChMSUJTT1VQX0NGTEFH
UykKIAotUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0V2ViS2l0Ml9DWFhGTEFHUyA9IFwKK1By
b2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Ml9UZXN0V2ViS2l0Ml9DWFhGTEFHUyA9IFwKIAkt
REdURVNUX0hBU19SVFRJPTAgXAogCSQoZ2xvYmFsX2N4eGZsYWdzKQogCi1Qcm9ncmFtc19UZXN0
V2ViS2l0QVBJX1Rlc3RXZWJLaXQyX0xEQUREID0gXAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9X
ZWJLaXQyX1Rlc3RXZWJLaXQyX0xEQUREID0gXAogCUxpYnJhcmllcy9saWJUZXN0V2ViS2l0QVBJ
TWFpbi5sYSBcCiAJTGlicmFyaWVzL2xpYmd0ZXN0LmxhIFwKIAlsaWJqYXZhc2NyaXB0Y29yZWd0
ay1AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQC5AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJT
SU9OQC5sYSBcCkBAIC0yMzMsMTAgKzU1OCwxMCBAQCBQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rl
c3RXZWJLaXQyX0xEQUREID0gXAogCSQoR1RLX0xJQlMpIFwKIAkkKExJQlNPVVBfTElCUykKIAot
UHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0V2ViS2l0Ml9MREZMQUdTID0gXAotCSQoUHJvZ3Jh
bXNfVGVzdFdlYktpdEFQSV9UZXN0V1RGX0xERkxBR1MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJ
X1dlYktpdDJfVGVzdFdlYktpdDJfTERGTEFHUyA9IFwKKwkkKFByb2dyYW1zX1Rlc3RXZWJLaXRB
UElfV1RGX1Rlc3RXVEZfTERGTEFHUykKIAotUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0V2Vi
S2l0Ml9TT1VSQ0VTID0gXAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyX1Rlc3RXZWJL
aXQyX1NPVVJDRVMgPSBcCiAJVG9vbHMvVGVzdFdlYktpdEFQSS9jb25maWcuaCBcCiAJVG9vbHMv
VGVzdFdlYktpdEFQSS9ndGsvUGxhdGZvcm1VdGlsaXRpZXNHdGsuY3BwIFwKIAlUb29scy9UZXN0
V2ViS2l0QVBJL2d0ay9QbGF0Zm9ybVdlYlZpZXdHdGsuY3BwIFwKQEAgLTM1NywxMSArNjgyLDI0
NSBAQCBMaWJyYXJpZXNfbGliVGVzdFdlYktpdEFQSUluamVjdGVkQnVuZGxlX2xhX0NGTEFHUyA9
IFwKIAkkKGdsb2JhbF9jZmxhZ3MpCiAKIAotc3RhbXAtdGVzdHdlYmtpdGFwaS13ZWJjb3JlLWZv
cndhcmRpbmctaGVhZGVyczogJChXZWJLaXQyKS9TY3JpcHRzL2dlbmVyYXRlLWZvcndhcmRpbmct
aGVhZGVycy5wbCAkKFByb2dyYW1zX1Rlc3RXZWJLaXRBUElfVGVzdFdlYkNvcmVfU09VUkNFUykK
K2lmIEVOQUJMRV9XRUJLSVQyCitub2luc3RfTFRMSUJSQVJJRVMgKz0gTGlicmFyaWVzL1dlYkV4
dGVuc2lvbnMvbGliV2ViRXh0ZW5zaW9uVGVzdC5sYQorZW5kaWYKKworTGlicmFyaWVzX1dlYkV4
dGVuc2lvbnNfbGliV2ViRXh0ZW5zaW9uVGVzdF9sYV9TT1VSQ0VTID0gXAorCVRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9XZWJFeHRlbnNpb25UZXN0LmNwcAorCitMaWJyYXJp
ZXNfV2ViRXh0ZW5zaW9uc19saWJXZWJFeHRlbnNpb25UZXN0X2xhX0xERkxBR1MgPSBcCisJLXJw
YXRoICR7c2hlbGwgcHdkfS8kKHRvcF9idWlsZGRpcikvTGlicmFyaWVzL1dlYkV4dGVuc2lvbnMv
LmxpYnMgXAorCSQobm9fdW5kZWZpbmVkKSBcCisJLWF2b2lkLXZlcnNpb24gXAorCS1tb2R1bGUK
KworTGlicmFyaWVzX1dlYkV4dGVuc2lvbnNfbGliV2ViRXh0ZW5zaW9uVGVzdF9sYV9DUFBGTEFH
UyA9IFwKKwktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsgXAorCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2VzIFwKKwktSSQo
dG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL3dlYmtpdDJleHRlbnNpb24vaW5j
bHVkZSBcCisJLURXRUJLSVQyX0NPTVBJTEFUSU9OIFwKKwkkKHdlYmtpdDJndGtfdGVzdHNfY3Bw
ZmxhZ3MpCisKK0xpYnJhcmllc19XZWJFeHRlbnNpb25zX2xpYldlYkV4dGVuc2lvblRlc3RfbGFf
Q1hYRkxBR1MgPSBcCisgICAgICAgICQoZ2xvYmFsX2N4eGZsYWdzKQorCitMaWJyYXJpZXNfV2Vi
RXh0ZW5zaW9uc19saWJXZWJFeHRlbnNpb25UZXN0X2xhX0NGTEFHUyA9IFwKKyAgICAgICAgJChn
bG9iYWxfY2ZsYWdzKQorCisKK2lmIEVOQUJMRV9XRUJLSVQyCitub2luc3RfTFRMSUJSQVJJRVMg
Kz0gTGlicmFyaWVzL1dlYkV4dGVuc2lvbnMvbGliV2ViUHJvY2Vzc1Rlc3QubGEKK2VuZGlmCisK
K0xpYnJhcmllc19XZWJFeHRlbnNpb25zX2xpYldlYlByb2Nlc3NUZXN0X2xhX1NPVVJDRVMgPSBc
CisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL0RPTU5vZGVUZXN0LmNwcCBc
CisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL0ZyYW1lVGVzdC5jcHAgXAor
CVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9XZWJQcm9jZXNzVGVzdC5jcHAg
XAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9XZWJQcm9jZXNzVGVzdC5o
CisKK0xpYnJhcmllc19XZWJFeHRlbnNpb25zX2xpYldlYlByb2Nlc3NUZXN0X2xhX0xERkxBR1Mg
PSBcCisJLXJwYXRoICR7c2hlbGwgcHdkfS8kKHRvcF9idWlsZGRpcikvTGlicmFyaWVzL1dlYkV4
dGVuc2lvbnMvLmxpYnMgXAorCSQobm9fdW5kZWZpbmVkKSBcCisJLWF2b2lkLXZlcnNpb24gXAor
CS1tb2R1bGUKKworTGlicmFyaWVzX1dlYkV4dGVuc2lvbnNfbGliV2ViUHJvY2Vzc1Rlc3RfbGFf
Q1BQRkxBR1MgPSBcCisJLUkkKHNyY2RpcikvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrIFwKKwktSSQodG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcyBc
CisJLUkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi93ZWJraXQyZXh0ZW5z
aW9uL2luY2x1ZGUgXAorCS1EV0VCS0lUMl9DT01QSUxBVElPTiBcCisJJCh3ZWJraXQyZ3RrX3Rl
c3RzX2NwcGZsYWdzKQorCitMaWJyYXJpZXNfV2ViRXh0ZW5zaW9uc19saWJXZWJQcm9jZXNzVGVz
dF9sYV9DWFhGTEFHUyA9IFwKKwkkKGdsb2JhbF9jeHhmbGFncykKKworTGlicmFyaWVzX1dlYkV4
dGVuc2lvbnNfbGliV2ViUHJvY2Vzc1Rlc3RfbGFfQ0ZMQUdTID0gXAorCSQoZ2xvYmFsX2NmbGFn
cykKKworCitQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdDJHdGsvcmVzb3VyY2VzL3dlYmtp
dDJndGstdGVzdHMtcmVzb3VyY2VzLmdyZXNvdXJjZTogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXQyR3RrL3Jlc291cmNlcy93ZWJraXQyZ3RrLXRlc3RzLmdyZXNvdXJjZS54bWwgJChz
aGVsbCAkKEdMSUJfQ09NUElMRV9SRVNPVVJDRVMpIC0tc291cmNlZGlyPSQoc3JjZGlyKSAtLWdl
bmVyYXRlLWRlcGVuZGVuY2llcyAkKHNyY2RpcikvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyR3RrL3Jlc291cmNlcy93ZWJraXQyZ3RrLXRlc3RzLmdyZXNvdXJjZS54bWwpCisJJChB
TV9WX2F0KW1rZGlyIC1wICR7R0VOUFJPR1JBTVN9L1Rlc3RXZWJLaXRBUEkvV2ViS2l0Mkd0ay9y
ZXNvdXJjZXMKKwkkKEFNX1ZfR0VOKSAkKEdMSUJfQ09NUElMRV9SRVNPVVJDRVMpIC0tdGFyZ2V0
PSRAIC0tc291cmNlZGlyPSQoc3JjZGlyKSAkPAorCitESVNUQ0xFQU5GSUxFUyArPSBcCisJUHJv
Z3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXQyR3RrL3Jlc291cmNlcy93ZWJraXQyZ3RrLXRlc3Rz
LXJlc291cmNlcy5ncmVzb3VyY2UKKworbm9pbnN0X0RBVEEgKz0gXAorCVByb2dyYW1zL1Rlc3RX
ZWJLaXRBUEkvV2ViS2l0Mkd0ay9yZXNvdXJjZXMvd2Via2l0Mmd0ay10ZXN0cy1yZXNvdXJjZXMu
Z3Jlc291cmNlCisKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJL
aXRXZWJDb250ZXh0X1NPVVJDRVMgPSBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXQyR3RrL1Rlc3RXZWJLaXRXZWJDb250ZXh0LmNwcAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9X
ZWJLaXQyR3RrX1Rlc3RXZWJLaXRXZWJDb250ZXh0X0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rl
c3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJL
aXRXZWJDb250ZXh0X0xEQUREID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNf
VGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRXZWJDb250ZXh0X0xERkxBR1MgPSAk
KHdlYmtpdDJndGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJL
aXQyR3RrX1Rlc3RXZWJLaXRXZWJWaWV3X1NPVVJDRVMgPSBcCisJVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcAorUHJvZ3JhbXNfVGVzdFdl
YktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRXZWJWaWV3X0NQUEZMQUdTID0gJCh3ZWJraXQy
Z3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rl
c3RXZWJLaXRXZWJWaWV3X0xEQUREID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3Jh
bXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRXZWJWaWV3X0xERkxBR1MgPSAk
KHdlYmtpdDJndGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJL
aXQyR3RrX1Rlc3RMb2FkZXJDbGllbnRfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdDJHdGsvVGVzdExvYWRlckNsaWVudC5jcHAKK1Byb2dyYW1zX1Rlc3RXZWJL
aXRBUElfV2ViS2l0Mkd0a19UZXN0TG9hZGVyQ2xpZW50X0NQUEZMQUdTID0gJCh3ZWJraXQyZ3Rr
X3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RM
b2FkZXJDbGllbnRfTERBREQgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19U
ZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdExvYWRlckNsaWVudF9MREZMQUdTID0gJCh3ZWJr
aXQyZ3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0
a19UZXN0V2ViS2l0U2V0dGluZ3NfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFNldHRpbmdzLmNwcAorUHJvZ3JhbXNfVGVzdFdlYktp
dEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRTZXR0aW5nc19DUFBGTEFHUyA9ICQod2Via2l0Mmd0
a190ZXN0c19jcHBmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0
V2ViS2l0U2V0dGluZ3NfTERBREQgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFt
c19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYktpdFNldHRpbmdzX0xERkxBR1MgPSAk
KHdlYmtpdDJndGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJL
aXQyR3RrX0luc3BlY3RvclRlc3RTZXJ2ZXJfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdDJHdGsvSW5zcGVjdG9yVGVzdFNlcnZlci5jcHAKK1Byb2dyYW1zX1Rl
c3RXZWJLaXRBUElfV2ViS2l0Mkd0a19JbnNwZWN0b3JUZXN0U2VydmVyX0NQUEZMQUdTID0gJCh3
ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQy
R3RrX0luc3BlY3RvclRlc3RTZXJ2ZXJfTERBREQgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRhZGQp
CitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfSW5zcGVjdG9yVGVzdFNlcnZlcl9M
REZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJL
aXRBUElfV2ViS2l0Mkd0a19UZXN0QmFja0ZvcndhcmRMaXN0X1NPVVJDRVMgPSBcCisgICAgICAg
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0QmFja0ZvcndhcmRMaXN0
LmNwcAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RCYWNrRm9yd2FyZExp
c3RfQ1BQRkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfY3BwZmxhZ3MpCitQcm9ncmFtc19UZXN0
V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdEJhY2tGb3J3YXJkTGlzdF9MREFERCA9ICQod2Via2l0
Mmd0a190ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0
QmFja0ZvcndhcmRMaXN0X0xERkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRmbGFncykKKwor
UHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRQb2xpY3lDbGllbnRf
U09VUkNFUyA9IFwKKyAgICAgICAgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3Rr
L1Rlc3RXZWJLaXRQb2xpY3lDbGllbnQuY3BwCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktp
dDJHdGtfVGVzdFdlYktpdFBvbGljeUNsaWVudF9DUFBGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0
c19jcHBmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0V2ViS2l0
UG9saWN5Q2xpZW50X0xEQUREID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNf
VGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRQb2xpY3lDbGllbnRfTERGTEFHUyA9
ICQod2Via2l0Mmd0a190ZXN0c19sZGZsYWdzKQorCitpZiBIQVZFX0FUU1BJMgorUHJvZ3JhbXNf
VGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyX1NPVVJDRVMg
PSBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL0FjY2Vzc2liaWxpdHlU
ZXN0U2VydmVyLmNwcAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX0FjY2Vzc2li
aWxpdHlUZXN0U2VydmVyX0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQor
UHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX0FjY2Vzc2liaWxpdHlUZXN0U2VydmVy
X0xEQUREID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQ
SV9XZWJLaXQyR3RrX0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyX0xERkxBR1MgPSAkKHdlYmtpdDJn
dGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rl
c3RXZWJLaXRBY2Nlc3NpYmlsaXR5X1NPVVJDRVMgPSBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5LmNwcAorUHJvZ3JhbXNfVGVz
dFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5X0NQUEZMQUdTID0g
JCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKSAkKEFUU1BJMl9DRkxBR1MpCitQcm9ncmFtc19U
ZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYktpdEFjY2Vzc2liaWxpdHlfTERBREQgPSAk
KHdlYmtpdDJndGtfdGVzdHNfbGRhZGQpICQoQVRTUEkyX0xJQlMpCitQcm9ncmFtc19UZXN0V2Vi
S2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYktpdEFjY2Vzc2liaWxpdHlfTERGTEFHUyA9ICQod2Vi
a2l0Mmd0a190ZXN0c19sZGZsYWdzKQorZW5kaWYKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9X
ZWJLaXQyR3RrX1Rlc3REb3dubG9hZHNfU09VUkNFUyA9IFwKKyAgICAgICAgVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3REb3dubG9hZHMuY3BwCitQcm9ncmFtc19UZXN0
V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdERvd25sb2Fkc19DUFBGTEFHUyA9ICQod2Via2l0Mmd0
a190ZXN0c19jcHBmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0
RG93bmxvYWRzX0xEQUREID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVz
dFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3REb3dubG9hZHNfTERGTEFHUyA9ICQod2Via2l0Mmd0
a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVz
dFdlYlZpZXdFZGl0b3JfU09VUkNFUyA9IFwKKyAgICAgICAgVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJWaWV3RWRpdG9yLmNwcAorUHJvZ3JhbXNfVGVzdFdlYktp
dEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJWaWV3RWRpdG9yX0NQUEZMQUdTID0gJCh3ZWJraXQyZ3Rr
X3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RX
ZWJWaWV3RWRpdG9yX0xEQUREID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNf
VGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJWaWV3RWRpdG9yX0xERkxBR1MgPSAkKHdl
YmtpdDJndGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQy
R3RrX1Rlc3RQcmludGluZ19TT1VSQ0VTID0gXAorICAgICAgICBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdDJHdGsvVGVzdFByaW50aW5nLmNwcAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQ
SV9XZWJLaXQyR3RrX1Rlc3RQcmludGluZ19DUFBGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19j
cHBmbGFncykgJChHVEtfVU5JWF9QUklOVElOR19DRkxBR1MpCitQcm9ncmFtc19UZXN0V2ViS2l0
QVBJX1dlYktpdDJHdGtfVGVzdFByaW50aW5nX0xEQUREID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xk
YWRkKSAkKEdUS19VTklYX1BSSU5USU5HX0xJQlMpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dl
YktpdDJHdGtfVGVzdFByaW50aW5nX0xERkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRmbGFn
cykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRGYXZpY29u
RGF0YWJhc2VfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJH
dGsvVGVzdFdlYktpdEZhdmljb25EYXRhYmFzZS5jcHAKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElf
V2ViS2l0Mkd0a19UZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlX0NQUEZMQUdTID0gJCh3ZWJraXQy
Z3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rl
c3RXZWJLaXRGYXZpY29uRGF0YWJhc2VfTERBREQgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRhZGQp
CitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYktpdEZhdmljb25EYXRh
YmFzZV9MREZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rl
c3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0V2ViS2l0RmluZENvbnRyb2xsZXJfU09VUkNFUyA9
IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdEZpbmRD
b250cm9sbGVyLmNwcAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJL
aXRGaW5kQ29udHJvbGxlcl9DUFBGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19jcHBmbGFncykK
K1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0V2ViS2l0RmluZENvbnRyb2xs
ZXJfTERBREQgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0
QVBJX1dlYktpdDJHdGtfVGVzdFdlYktpdEZpbmRDb250cm9sbGVyX0xERkxBR1MgPSAkKHdlYmtp
dDJndGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3Rr
X1Rlc3RSZXNvdXJjZXNfU09VUkNFUyA9IFwKKyAgICAgICAgVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXQyR3RrL1Rlc3RSZXNvdXJjZXMuY3BwCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJ
X1dlYktpdDJHdGtfVGVzdFJlc291cmNlc19DUFBGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19j
cHBmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0UmVzb3VyY2Vz
X0xEQUREID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQ
SV9XZWJLaXQyR3RrX1Rlc3RSZXNvdXJjZXNfTERGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19s
ZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdENvb2tpZU1h
bmFnZXJfU09VUkNFUyA9IFwKKyAgICAgICAgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXQyR3RrL1Rlc3RDb29raWVNYW5hZ2VyLmNwcAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJL
aXQyR3RrX1Rlc3RDb29raWVNYW5hZ2VyX0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2Nw
cGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RDb29raWVNYW5h
Z2VyX0xEQUREID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktp
dEFQSV9XZWJLaXQyR3RrX1Rlc3RDb29raWVNYW5hZ2VyX0xERkxBR1MgPSAkKHdlYmtpdDJndGtf
dGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RJ
bnNwZWN0b3JfU09VUkNFUyA9IFwKKyAgICAgICAgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyR3RrL1Rlc3RJbnNwZWN0b3IuY3BwCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktp
dDJHdGtfVGVzdEluc3BlY3Rvcl9DUFBGTEFHUyA9IFwKKwkkKHdlYmtpdDJndGtfdGVzdHNfY3Bw
ZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdEluc3BlY3Rvcl9M
REFERCA9ICQod2Via2l0Mmd0a190ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElf
V2ViS2l0Mkd0a19UZXN0SW5zcGVjdG9yX0xERkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRm
bGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RJbnNwZWN0b3JT
ZXJ2ZXJfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsv
VGVzdEluc3BlY3RvclNlcnZlci5jcHAKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0
a19UZXN0SW5zcGVjdG9yU2VydmVyX0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZs
YWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RJbnNwZWN0b3JTZXJ2
ZXJfTERBREQgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0
QVBJX1dlYktpdDJHdGtfVGVzdEluc3BlY3RvclNlcnZlcl9MREZMQUdTID0gJCh3ZWJraXQyZ3Rr
X3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0
V2ViS2l0VmVyc2lvbl9TT1VSQ0VTID0gXAorICAgICAgICBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFZlcnNpb24uY3BwCitQcm9ncmFtc19UZXN0V2ViS2l0
QVBJX1dlYktpdDJHdGtfVGVzdFdlYktpdFZlcnNpb25fQ1BQRkxBR1MgPSAkKHdlYmtpdDJndGtf
dGVzdHNfY3BwZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFdl
YktpdFZlcnNpb25fTERBREQgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19U
ZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYktpdFZlcnNpb25fTERGTEFHUyA9ICQod2Vi
a2l0Mmd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJH
dGtfVGVzdENvbnRleHRNZW51X1NPVVJDRVMgPSBcCisgICAgICAgIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0Q29udGV4dE1lbnUuY3BwCitQcm9ncmFtc19UZXN0V2Vi
S2l0QVBJX1dlYktpdDJHdGtfVGVzdENvbnRleHRNZW51X0NQUEZMQUdTID0gJCh3ZWJraXQyZ3Rr
X3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RD
b250ZXh0TWVudV9MREFERCA9ICQod2Via2l0Mmd0a190ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1Rl
c3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0Q29udGV4dE1lbnVfTERGTEFHUyA9ICQod2Via2l0
Mmd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtf
VGVzdFNTTF9TT1VSQ0VTID0gXAorICAgICAgICBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdDJHdGsvVGVzdFNTTC5jcHAKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19U
ZXN0U1NMX0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNf
VGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RTU0xfTERBREQgPSAkKHdlYmtpdDJndGtfdGVz
dHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFNTTF9MREZM
QUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRB
UElfV2ViS2l0Mkd0a19UZXN0V2ViRXh0ZW5zaW9uc19TT1VSQ0VTID0gXAorICAgICAgICBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYkV4dGVuc2lvbnMuY3BwCitQ
cm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYkV4dGVuc2lvbnNfQ1BQRkxB
R1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfY3BwZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJ
X1dlYktpdDJHdGtfVGVzdFdlYkV4dGVuc2lvbnNfTERBREQgPSAkKHdlYmtpdDJndGtfdGVzdHNf
bGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYkV4dGVuc2lv
bnNfTERGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0
V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYktpdFdlYlZpZXdHcm91cF9TT1VSQ0VTID0gXAor
ICAgICAgICBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFdl
YlZpZXdHcm91cC5jcHAKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0V2Vi
S2l0V2ViVmlld0dyb3VwX0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQor
UHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRXZWJWaWV3R3JvdXBf
TERBREQgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJ
X1dlYktpdDJHdGtfVGVzdFdlYktpdFdlYlZpZXdHcm91cF9MREZMQUdTID0gJCh3ZWJraXQyZ3Rr
X3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0
RE9NTm9kZV9TT1VSQ0VTID0gXAorICAgICAgICBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdDJHdGsvVGVzdERPTU5vZGUuY3BwCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJH
dGtfVGVzdERPTU5vZGVfQ1BQRkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfY3BwZmxhZ3MpCitQ
cm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdERPTU5vZGVfTERBREQgPSAkKHdl
YmtpdDJndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtf
VGVzdERPTU5vZGVfTERGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19sZGZsYWdzKQorCitQcm9n
cmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdEZyYW1lX1NPVVJDRVMgPSBcCisgICAg
ICAgIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0RnJhbWUuY3BwCitQ
cm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdEZyYW1lX0NQUEZMQUdTID0gJCh3
ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQy
R3RrX1Rlc3RGcmFtZV9MREFERCA9ICQod2Via2l0Mmd0a190ZXN0c19sZGFkZCkKK1Byb2dyYW1z
X1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0RnJhbWVfTERGTEFHUyA9ICQod2Via2l0Mmd0
a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVz
dEF1dGhlbnRpY2F0aW9uX1NPVVJDRVMgPSBcCisgICAgICAgIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Mkd0ay9UZXN0QXV0aGVudGljYXRpb24uY3BwCitQcm9ncmFtc19UZXN0V2Vi
S2l0QVBJX1dlYktpdDJHdGtfVGVzdEF1dGhlbnRpY2F0aW9uX0NQUEZMQUdTID0gJCh3ZWJraXQy
Z3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rl
c3RBdXRoZW50aWNhdGlvbl9MREFERCA9ICQod2Via2l0Mmd0a190ZXN0c19sZGFkZCkKK1Byb2dy
YW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0QXV0aGVudGljYXRpb25fTERGTEFHUyA9
ICQod2Via2l0Mmd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dl
YktpdDJHdGtfVGVzdFVJQ2xpZW50X1NPVVJDRVMgPSBcCisgICAgICAgIFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0VUlDbGllbnQuY3BwCitQcm9ncmFtc19UZXN0V2Vi
S2l0QVBJX1dlYktpdDJHdGtfVGVzdFVJQ2xpZW50X0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rl
c3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RVSUNs
aWVudF9MREFERCA9ICQod2Via2l0Mmd0a190ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1Rlc3RXZWJL
aXRBUElfV2ViS2l0Mkd0a19UZXN0VUlDbGllbnRfTERGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0
c19sZGZsYWdzKQorCisKK3N0YW1wLXRlc3R3ZWJraXRhcGktd2ViY29yZS1mb3J3YXJkaW5nLWhl
YWRlcnM6ICQoV2ViS2l0MikvU2NyaXB0cy9nZW5lcmF0ZS1mb3J3YXJkaW5nLWhlYWRlcnMucGwg
JChQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYkNvcmVfVGVzdFdlYkNvcmVfU09VUkNFUykKIAkk
KEFNX1ZfR0VOKSQoUEVSTCkgJDwgJChzcmNkaXIpL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViQ29yZSAkKEdFTlNPVVJDRVNfV0VCQ09SRSkvaW5jbHVkZSBndGsgXAogCSYmIGVjaG8gdGlt
ZXN0YW1wID4gJChARikKIAotc3RhbXAtdGVzdHdlYmtpdGFwaS13ZWJraXQyLWZvcndhcmRpbmct
aGVhZGVyczogJChXZWJLaXQyKS9TY3JpcHRzL2dlbmVyYXRlLWZvcndhcmRpbmctaGVhZGVycy5w
bCAkKFByb2dyYW1zX1Rlc3RXZWJLaXRBUElfVGVzdFdlYktpdDJfU09VUkNFUykgJChMaWJyYXJp
ZXNfbGliVGVzdFdlYktpdEFQSUluamVjdGVkQnVuZGxlX2xhX1NPVVJDRVMpCitzdGFtcC10ZXN0
d2Via2l0YXBpLXdlYmtpdDItZm9yd2FyZGluZy1oZWFkZXJzOiAkKFdlYktpdDIpL1NjcmlwdHMv
Z2VuZXJhdGUtZm9yd2FyZGluZy1oZWFkZXJzLnBsICQoUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9X
ZWJLaXQyX1Rlc3RXZWJLaXQyX1NPVVJDRVMpICQoTGlicmFyaWVzX2xpYlRlc3RXZWJLaXRBUElJ
bmplY3RlZEJ1bmRsZV9sYV9TT1VSQ0VTKQogCSQoQU1fVl9HRU4pJChQRVJMKSAkPCAkKHNyY2Rp
cikvVG9vbHMvVGVzdFdlYktpdEFQSSAkKEdFTlNPVVJDRVNfV0VCS0lUMikvaW5jbHVkZSBndGsg
XAogCSYmIGVjaG8gdGltZXN0YW1wID4gJChARikKIApAQCAtMzg2LDQgKzk0NSwxNCBAQCBFWFRS
QV9ESVNUICs9IFwKIAlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvc2ltcGxlLmh0
bWwgXAogCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9zaW1wbGUtaWZyYW1lLmh0
bWwgXAogCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9zaW1wbGUtdGFsbC5odG1s
IFwKLQlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvc3BhY2ViYXItc2Nyb2xsaW5n
Lmh0bWwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvc3BhY2ViYXItc2Nyb2xs
aW5nLmh0bWwgXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9yZXNvdXJj
ZXMvdGVzdC1jZXJ0LnBlbSBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3Rr
L3Jlc291cmNlcy90ZXN0LWtleS5wZW0gXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Mkd0ay9yZXNvdXJjZXMvd2Via2l0Mmd0ay10ZXN0cy5ncmVzb3VyY2UueG1sIFwKKwlUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvcmVzb3VyY2VzL2xpbmstdGl0bGUuanMg
XAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RfdXRpbHMuaCBcCisJ
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvcmVzb3VyY2VzL2JsYW5rLmljbyBc
CisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvcmVzb3VyY2VzL3Rlc3QuaHRt
bCBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvcmVzb3VyY2VzL3Rlc3Qu
b2dnIFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9yZXNvdXJjZXMvdGVz
dC5wZGYgXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Jlc291cmNlcy90
ZXN0LnR4dApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3Rr
L0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Mkd0ay9BY2Nlc3NpYmlsaXR5VGVzdFNlcnZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMTY1ZmNmYgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9BY2Nlc3NpYmlsaXR5VGVzdFNlcnZlci5jcHAKQEAg
LTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtp
dDIvd2Via2l0Mi5oPgorCitzdGF0aWMgdm9pZCBsb2FkQ2hhbmdlZENhbGxiYWNrKFdlYktpdFdl
YlZpZXcqLCBXZWJLaXRMb2FkRXZlbnQgbG9hZEV2ZW50LCBncG9pbnRlcikKK3sKKyAgICAvLyBT
ZW5kIGEgbWVzc2FnZSB0byB0aGUgcGFyZW50IHByb2Nlc3Mgd2hlbiB3ZSdyZSByZWFkeS4KKyAg
ICBpZiAobG9hZEV2ZW50ID09IFdFQktJVF9MT0FEX0ZJTklTSEVEKQorICAgICAgICBnX3ByaW50
KCJPSyIpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgLy8g
TWFrZSBzdXJlIHRoYXQgdGhlIEFUSyBicmlkZ2UgaXMgbG9hZGVkLgorICAgIGdfc2V0ZW52KCJH
VEtfTU9EVUxFUyIsICJhdGstYnJpZGdlIiwgVFJVRSk7CisKKyAgICBndGtfaW5pdCgmYXJnYywg
JmFyZ3YpOworCisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3
ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX2h0bWwod2Vi
VmlldywKKyAgICAgICAgIjxodG1sPiIKKyAgICAgICAgIiAgPGJvZHk+IgorICAgICAgICAiICAg
PGgxPlRoaXMgaXMgYSB0ZXN0PC9oMT4iCisgICAgICAgICIgICA8cD5UaGlzIGlzIGEgcGFyYWdy
YXBoIHdpdGggc29tZSBwbGFpbiB0ZXh0LjwvcD4iCisgICAgICAgICIgICA8cD5UaGlzIHBhcmFn
cmFwaCBjb250YWlucyA8YSBocmVmPVwiaHR0cDovL3d3dy53ZWJraXRndGsub3JnXCI+YSBsaW5r
PC9hPiBpbiB0aGUgbWlkZGxlLjwvcD4iCisgICAgICAgICIgIDwvYm9keT4iCisgICAgICAgICI8
L2h0bWw+IiwKKyAgICAgICAgMCk7CisKKyAgICBHdGtXaWRnZXQqIHdpbmRvdyA9IGd0a193aW5k
b3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOworICAgIGd0a19jb250YWluZXJfYWRkKEdUS19D
T05UQUlORVIod2luZG93KSwgR1RLX1dJREdFVCh3ZWJWaWV3KSk7CisgICAgZ3RrX3dpZGdldF9z
aG93X2FsbCh3aW5kb3cpOworCisgICAgZ19zaWduYWxfY29ubmVjdCh3aW5kb3csICJkZWxldGUt
ZXZlbnQiLCBHX0NBTExCQUNLKGd0a19tYWluX3F1aXQpLCAwKTsKKyAgICBnX3NpZ25hbF9jb25u
ZWN0KHdlYlZpZXcsICJsb2FkLWNoYW5nZWQiLCBHX0NBTExCQUNLKGxvYWRDaGFuZ2VkQ2FsbGJh
Y2spLCAwKTsKKworICAgIGd0a19tYWluKCk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvRE9NRE9NV2luZG93VGVzdC5jcHAgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvRE9NRE9NV2luZG93VGVzdC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NhYWQ1NAotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9ET01ET01XaW5kb3dUZXN0LmNwcApA
QCAtMCwwICsxLDIyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJZ2FsaWEgUy5MLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJXZWJQcm9jZXNzVGVzdC5oIgorI2luY2x1
ZGUgPGdpby9naW8uaD4KKyNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdC13ZWItZXh0ZW5zaW9uLmg+
CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKworY2xhc3MgV2ViS2l0RE9NRE9NV2luZG93VGVz
dDsKK3N0YXRpYyBnYm9vbGVhbiBsb2FkZWRDYWxsYmFjayhXZWJLaXRET01ET01XaW5kb3cqLCBX
ZWJLaXRET01FdmVudCosIFdlYktpdERPTURPTVdpbmRvd1Rlc3QqKTsKK3N0YXRpYyBnYm9vbGVh
biBjbGlja2VkQ2FsbGJhY2soV2ViS2l0RE9NRE9NV2luZG93KiwgV2ViS2l0RE9NRXZlbnQqLCBX
ZWJLaXRET01ET01XaW5kb3dUZXN0Kik7CisKK2NsYXNzIFdlYktpdERPTURPTVdpbmRvd1Rlc3Qg
OiBwdWJsaWMgV2ViUHJvY2Vzc1Rlc3QgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRy
PFdlYlByb2Nlc3NUZXN0PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgV2ViS2l0RE9N
RE9NV2luZG93VGVzdCgpKTsgfQorCitwcml2YXRlOgorICAgIGd1aW50NjQgd2ViUGFnZUZyb21B
cmdzKEdWYXJpYW50KiBhcmdzKQorICAgIHsKKyAgICAgICAgR1ZhcmlhbnRJdGVyIGl0ZXI7Cisg
ICAgICAgIGdfdmFyaWFudF9pdGVyX2luaXQoJml0ZXIsIGFyZ3MpOworCisgICAgICAgIGNvbnN0
IGNoYXIqIGtleTsKKyAgICAgICAgR1ZhcmlhbnQqIHZhbHVlOworICAgICAgICB3aGlsZSAoZ192
YXJpYW50X2l0ZXJfbG9vcCgmaXRlciwgInsmc3Z9IiwgJmtleSwgJnZhbHVlKSkgeworICAgICAg
ICAgICAgaWYgKCFzdHJjbXAoa2V5LCAicGFnZUlEIikgJiYgZ192YXJpYW50X2NsYXNzaWZ5KHZh
bHVlKSA9PSBHX1ZBUklBTlRfQ0xBU1NfVUlOVDY0KQorICAgICAgICAgICAgICAgIHJldHVybiBn
X3ZhcmlhbnRfZ2V0X3VpbnQ2NCh2YWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICBnX2Fzc2Vy
dF9ub3RfcmVhY2hlZCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBib29sIHRl
c3RTaWduYWxzKFdlYktpdFdlYkV4dGVuc2lvbiogZXh0ZW5zaW9uLCBHVmFyaWFudCogYXJncykK
KyAgICB7CisgICAgICAgIG5vdGlmeSgicmVhZHkiLCAiIik7CisKKyAgICAgICAgV2ViS2l0V2Vi
UGFnZSogcGFnZSA9IHdlYmtpdF93ZWJfZXh0ZW5zaW9uX2dldF9wYWdlKGV4dGVuc2lvbiwgd2Vi
UGFnZUZyb21BcmdzKGFyZ3MpKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX1dFQl9QQUdF
KHBhZ2UpKTsKKyAgICAgICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50ID0gd2Via2l0X3dl
Yl9wYWdlX2dldF9kb21fZG9jdW1lbnQocGFnZSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9E
T01fSVNfRE9DVU1FTlQoZG9jdW1lbnQpKTsKKworICAgICAgICBXZWJLaXRET01ET01XaW5kb3cq
IGRvbVdpbmRvdyA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2RlZmF1bHRfdmlldyhkb2N1bWVu
dCk7CisgICAgICAgIGdfYXNzZXJ0KGRvbVdpbmRvdyk7CisKKyAgICAgICAgLy8gVGhlICJsb2Fk
IiBXZWJLaXRET01ET01XaW5kb3cgc2lnbmFsIGlzIGlzc3VlZCBiZWZvcmUgdGhpcyB0ZXN0IGlz
CisgICAgICAgIC8vIGNhbGxlZC4gVGhlcmUncyBubyB3YXkgdG8gY2FwdHVyZSBpdCBoZXJlLiBX
ZSBzaW1wbHkgYXNzdW1lIHRoYXQKKyAgICAgICAgLy8gdGhlIGRvY3VtZW50IGlzIGxvYWRlZCBh
bmQgbm90aWZ5IHRoZSB1aXByb2Nlc3MgYWNjb3JkaW5nbHkKKyAgICAgICAgLy8gbm90aWZ5KCJs
b2FkZWQiLCAiIik7CisKKyAgICAgICAgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfYWRkX2V2ZW50
X2xpc3RlbmVyKAorICAgICAgICAgICAgV0VCS0lUX0RPTV9FVkVOVF9UQVJHRVQoZG9tV2luZG93
KSwKKyAgICAgICAgICAgICJsb2FkIiwKKyAgICAgICAgICAgIEdfQ0FMTEJBQ0sobG9hZGVkQ2Fs
bGJhY2spLAorICAgICAgICAgICAgZmFsc2UsCisgICAgICAgICAgICB0aGlzKTsKKworICAgICAg
ICAvLyBsb2FkZWRDYWxsYmFjaygpIHdpbGwgc3RvcCB0aGlzIGxvb3AKKyAgICAgICAgUnVuTG9v
cDo6cnVuKCk7CisKKyAgICAgICAgZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3BhZ2VfZ2V0X2RvbV9k
b2N1bWVudChwYWdlKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChk
b2N1bWVudCkpOworCisgICAgICAgIFdlYktpdERPTUVsZW1lbnQqIGVsZW1lbnQgPSB3ZWJraXRf
ZG9tX2RvY3VtZW50X2dldF9lbGVtZW50X2J5X2lkKGRvY3VtZW50LCAidGVzdCIpOworICAgICAg
ICBnX2Fzc2VydChlbGVtZW50KTsKKworICAgICAgICB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9h
ZGRfZXZlbnRfbGlzdGVuZXIoCisgICAgICAgICAgICBXRUJLSVRfRE9NX0VWRU5UX1RBUkdFVChl
bGVtZW50KSwKKyAgICAgICAgICAgICJjbGljayIsCisgICAgICAgICAgICBHX0NBTExCQUNLKGNs
aWNrZWRDYWxsYmFjayksCisgICAgICAgICAgICBmYWxzZSwKKyAgICAgICAgICAgIHRoaXMpOwor
CisgICAgICAgIC8vIFRoZSAiY2xpY2siIGFjdGlvbiB3aWxsIGJlIGlzc3VlZCBpbiB0aGUgdWlw
cm9jZXNzIGFuZCB0aGF0IHdpbGwKKyAgICAgICAgLy8gdHJpZ2dlciB0aGUgZG9tIGV2ZW50IGhl
cmUuCisgICAgICAgIC8vIGNsaWNrZWRDYWxsYmFjaygpIHdpbGwgc3RvcCB0aGlzIGxvb3AKKyAg
ICAgICAgUnVuTG9vcDo6cnVuKCk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgYm9vbCB0ZXN0RGlzcGF0Y2hFdmVudChXZWJLaXRXZWJFeHRlbnNpb24qIGV4dGVuc2lvbiwg
R1ZhcmlhbnQqIGFyZ3MpCisgICAgeworICAgICAgICBub3RpZnkoInJlYWR5IiwgIiIpOworCisg
ICAgICAgIFdlYktpdFdlYlBhZ2UqIHBhZ2UgPSB3ZWJraXRfd2ViX2V4dGVuc2lvbl9nZXRfcGFn
ZShleHRlbnNpb24sIHdlYlBhZ2VGcm9tQXJncyhhcmdzKSk7CisgICAgICAgIGdfYXNzZXJ0KFdF
QktJVF9JU19XRUJfUEFHRShwYWdlKSk7CisgICAgICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1
bWVudCA9IHdlYmtpdF93ZWJfcGFnZV9nZXRfZG9tX2RvY3VtZW50KHBhZ2UpOworICAgICAgICBn
X2Fzc2VydChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKGRvY3VtZW50KSk7CisKKyAgICAgICAgV2Vi
S2l0RE9NRE9NV2luZG93KiBkb21XaW5kb3cgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9kZWZh
dWx0X3ZpZXcoZG9jdW1lbnQpOworICAgICAgICBnX2Fzc2VydChkb21XaW5kb3cpOworCisgICAg
ICAgIC8vIFRoZSAibG9hZCIgV2ViS2l0RE9NRE9NV2luZG93IHNpZ25hbCBpcyBpc3N1ZWQgYmVm
b3JlIHRoaXMgdGVzdCBpcworICAgICAgICAvLyBjYWxsZWQuIFRoZXJlJ3Mgbm8gd2F5IHRvIGNh
cHR1cmUgaXQgaGVyZS4gV2Ugc2ltcGx5IGFzc3VtZSB0aGF0CisgICAgICAgIC8vIHRoZSBkb2N1
bWVudCBpcyBsb2FkZWQgYW5kIG5vdGlmeSB0aGUgdWlwcm9jZXNzIGFjY29yZGluZ2x5CisgICAg
ICAgIC8vIG5vdGlmeSgibG9hZGVkIiwgIiIpOworCisgICAgICAgIHdlYmtpdF9kb21fZXZlbnRf
dGFyZ2V0X2FkZF9ldmVudF9saXN0ZW5lcigKKyAgICAgICAgICAgIFdFQktJVF9ET01fRVZFTlRf
VEFSR0VUKGRvbVdpbmRvdyksCisgICAgICAgICAgICAibG9hZCIsCisgICAgICAgICAgICBHX0NB
TExCQUNLKGxvYWRlZENhbGxiYWNrKSwKKyAgICAgICAgICAgIGZhbHNlLAorICAgICAgICAgICAg
dGhpcyk7CisKKyAgICAgICAgLy8gbG9hZGVkQ2FsbGJhY2soKSB3aWxsIHN0b3AgdGhpcyBsb29w
CisgICAgICAgIFJ1bkxvb3A6OnJ1bigpOworCisgICAgICAgIGRvY3VtZW50ID0gd2Via2l0X3dl
Yl9wYWdlX2dldF9kb21fZG9jdW1lbnQocGFnZSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9E
T01fSVNfRE9DVU1FTlQoZG9jdW1lbnQpKTsKKworICAgICAgICBXZWJLaXRET01FbGVtZW50KiBl
bGVtZW50ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudF9ieV9pZChkb2N1bWVudCwg
InRlc3QiKTsKKyAgICAgICAgZ19hc3NlcnQoZWxlbWVudCk7CisKKyAgICAgICAgV2ViS2l0RE9N
RXZlbnQqIGV2ZW50ID0gd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZXZlbnQoZG9jdW1lbnQs
ICJNb3VzZUV2ZW50IiwgMCk7CisgICAgICAgIGdfYXNzZXJ0KGV2ZW50KTsKKyAgICAgICAgZ19h
c3NlcnQoV0VCS0lUX0RPTV9JU19FVkVOVChldmVudCkpOworICAgICAgICBnX2Fzc2VydChXRUJL
SVRfRE9NX0lTX01PVVNFX0VWRU5UKGV2ZW50KSk7CisKKyAgICAgICAgZ2xvbmcgY2xpZW50WCwg
Y2xpZW50WTsKKyAgICAgICAgY2xpZW50WCA9IHdlYmtpdF9kb21fZWxlbWVudF9nZXRfY2xpZW50
X2xlZnQoZWxlbWVudCk7CisgICAgICAgIGNsaWVudFkgPSB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0
X2NsaWVudF90b3AoZWxlbWVudCk7CisKKyAgICAgICAgd2Via2l0X2RvbV9ldmVudF90YXJnZXRf
YWRkX2V2ZW50X2xpc3RlbmVyKAorICAgICAgICAgICAgV0VCS0lUX0RPTV9FVkVOVF9UQVJHRVQo
ZWxlbWVudCksCisgICAgICAgICAgICAiY2xpY2siLAorICAgICAgICAgICAgR19DQUxMQkFDSyhj
bGlja2VkQ2FsbGJhY2spLAorICAgICAgICAgICAgZmFsc2UsCisgICAgICAgICAgICB0aGlzKTsK
KworICAgICAgICB3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2luaXRfbW91c2VfZXZlbnQoV0VCS0lU
X0RPTV9NT1VTRV9FVkVOVChldmVudCksCisgICAgICAgICAgICAiY2xpY2siLCBUUlVFLCBUUlVF
LAorICAgICAgICAgICAgZG9tV2luZG93LCAwLCAwLCAwLCBjbGllbnRYLCBjbGllbnRZLAorICAg
ICAgICAgICAgRkFMU0UsIEZBTFNFLCBGQUxTRSwgRkFMU0UsCisgICAgICAgICAgICAxLCBXRUJL
SVRfRE9NX0VWRU5UX1RBUkdFVChlbGVtZW50KSk7CisKKyAgICAgICAgd2Via2l0X2RvbV9ldmVu
dF90YXJnZXRfZGlzcGF0Y2hfZXZlbnQoV0VCS0lUX0RPTV9FVkVOVF9UQVJHRVQoZWxlbWVudCks
IGV2ZW50LCAwKTsKKworICAgICAgICAvLyBjbGlja2VkQ2FsbGJhY2soKSB3aWxsIHN0b3AgdGhp
cyBsb29wCisgICAgICAgIFJ1bkxvb3A6OnJ1bigpOworCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIGJvb2wgdGVzdEdldENvbXB1dGVkU3R5bGUoV2ViS2l0V2ViRXh0ZW5zaW9u
KiBleHRlbnNpb24sIEdWYXJpYW50KiBhcmdzKQorICAgIHsKKyAgICAgICAgV2ViS2l0V2ViUGFn
ZSogcGFnZSA9IHdlYmtpdF93ZWJfZXh0ZW5zaW9uX2dldF9wYWdlKGV4dGVuc2lvbiwgd2ViUGFn
ZUZyb21BcmdzKGFyZ3MpKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX1dFQl9QQUdFKHBh
Z2UpKTsKKyAgICAgICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50ID0gd2Via2l0X3dlYl9w
YWdlX2dldF9kb21fZG9jdW1lbnQocGFnZSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01f
SVNfRE9DVU1FTlQoZG9jdW1lbnQpKTsKKyAgICAgICAgV2ViS2l0RE9NRE9NV2luZG93KiBkb21X
aW5kb3cgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9kZWZhdWx0X3ZpZXcoZG9jdW1lbnQpOwor
ICAgICAgICBnX2Fzc2VydChkb21XaW5kb3cpOworICAgICAgICBXZWJLaXRET01FbGVtZW50KiBl
bGVtZW50ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudF9ieV9pZChkb2N1bWVudCwg
InRlc3QiKTsKKyAgICAgICAgZ19hc3NlcnQoZWxlbWVudCk7CisgICAgICAgIGdfYXNzZXJ0KFdF
QktJVF9ET01fSVNfRUxFTUVOVChlbGVtZW50KSk7CisgICAgICAgIFdlYktpdERPTUNTU1N0eWxl
RGVjbGFyYXRpb24qIGNzc1N0eWxlID0gd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9jb21wdXRl
ZF9zdHlsZShkb21XaW5kb3csIGVsZW1lbnQsIDApOworICAgICAgICBnY2hhciogZm9udFNpemUg
PSB3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlvbl9nZXRfcHJvcGVydHlfdmFsdWUoY3Nz
U3R5bGUsICJmb250LXNpemUiKTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKGZvbnRTaXplLCA9
PSwgIjE2cHgiKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IGJvb2wgcnVuVGVzdChjb25zdCBjaGFyKiB0ZXN0TmFtZSwgV2ViS2l0V2ViRXh0ZW5zaW9uKiBl
eHRlbnNpb24sIEdWYXJpYW50KiBhcmdzKQorICAgIHsKKyAgICAgICAgaWYgKCFzdHJjbXAodGVz
dE5hbWUsICJzaWduYWxzIikpCisgICAgICAgICAgICByZXR1cm4gdGVzdFNpZ25hbHMoZXh0ZW5z
aW9uLCBhcmdzKTsKKyAgICAgICAgaWYgKCFzdHJjbXAodGVzdE5hbWUsICJkaXNwYXRjaC1ldmVu
dCIpKQorICAgICAgICAgICAgcmV0dXJuIHRlc3REaXNwYXRjaEV2ZW50KGV4dGVuc2lvbiwgYXJn
cyk7CisgICAgICAgIGlmICghc3RyY21wKHRlc3ROYW1lLCAiZ2V0LWNvbXB1dGVkLXN0eWxlIikp
CisgICAgICAgICAgICByZXR1cm4gdGVzdEdldENvbXB1dGVkU3R5bGUoZXh0ZW5zaW9uLCBhcmdz
KTsKKworICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorfTsKKworc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXygoY29uc3RydWN0b3Ip
KSByZWdpc3RlclRlc3RzKCkKK3sKKyAgICBSRUdJU1RFUl9URVNUKFdlYktpdERPTURPTVdpbmRv
d1Rlc3QsICJXZWJLaXRET01ET01XaW5kb3cvc2lnbmFscyIpOworICAgIFJFR0lTVEVSX1RFU1Qo
V2ViS2l0RE9NRE9NV2luZG93VGVzdCwgIldlYktpdERPTURPTVdpbmRvdy9kaXNwYXRjaC1ldmVu
dCIpOworICAgIFJFR0lTVEVSX1RFU1QoV2ViS2l0RE9NRE9NV2luZG93VGVzdCwgIldlYktpdERP
TURPTVdpbmRvdy9nZXQtY29tcHV0ZWQtc3R5bGUiKTsKK30KKworc3RhdGljIGdib29sZWFuIGxv
YWRlZENhbGxiYWNrKFdlYktpdERPTURPTVdpbmRvdyogdmlldywgV2ViS2l0RE9NRXZlbnQqIGV2
ZW50LCBXZWJLaXRET01ET01XaW5kb3dUZXN0KiB0ZXN0KQoreworICAgIHRlc3QtPm5vdGlmeSgi
bG9hZGVkIiwgIiIpOworCisgICAgLy8gU3RvcCB0aGUgbG9vcCBhbmQgbGV0IHRlc3RTaWduYWxz
KCkgb3IgdGVzdERpc3BhdGNoRXZlbnQoKSBjb250aW51ZSBpdHMgY291cnNlCisgICAgUnVuTG9v
cDo6Y3VycmVudCgpLT5zdG9wKCk7CisKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBn
Ym9vbGVhbiBjbGlja2VkQ2FsbGJhY2soV2ViS2l0RE9NRE9NV2luZG93KiB2aWV3LCBXZWJLaXRE
T01FdmVudCogZXZlbnQsIFdlYktpdERPTURPTVdpbmRvd1Rlc3QqIHRlc3QpCit7CisgICAgdGVz
dC0+bm90aWZ5KCJjbGlja2VkIiwgIiIpOworICAgIHRlc3QtPm5vdGlmeSgiZmluaXNoIiwgIiIp
OworCisgICAgLy8gU3RvcCB0aGUgbG9vcCBhbmQgbGV0IHRlc3RTaWduYWxzKCkgb3IgdGVzdERp
c3BhdGNoRXZlbnQoKSBjb250aW51ZSBpdHMgY291cnNlCisgICAgUnVuTG9vcDo6Y3VycmVudCgp
LT5zdG9wKCk7CisKKyAgICByZXR1cm4gRkFMU0U7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvRE9NTm9kZVRlc3QuY3BwIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL0RPTU5vZGVUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5lMTc1NGNmCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL0RPTU5vZGVUZXN0LmNwcApAQCAtMCwwICsxLDIx
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpbmNsdWRlICJXZWJQcm9jZXNzVGVzdC5oIgorI2luY2x1ZGUgPGdpby9naW8u
aD4KKyNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdC13ZWItZXh0ZW5zaW9uLmg+CisjaW5jbHVkZSA8
d3RmL2dvYmplY3QvR093blB0ci5oPgorCitjbGFzcyBXZWJLaXRET01Ob2RlVGVzdCA6IHB1Ymxp
YyBXZWJQcm9jZXNzVGVzdCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8V2ViUHJv
Y2Vzc1Rlc3Q+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBXZWJLaXRET01Ob2RlVGVz
dCgpKTsgfQorCitwcml2YXRlOgorICAgIGd1aW50NjQgd2ViUGFnZUZyb21BcmdzKEdWYXJpYW50
KiBhcmdzKQorICAgIHsKKyAgICAgICAgR1ZhcmlhbnRJdGVyIGl0ZXI7CisgICAgICAgIGdfdmFy
aWFudF9pdGVyX2luaXQoJml0ZXIsIGFyZ3MpOworCisgICAgICAgIGNvbnN0IGNoYXIqIGtleTsK
KyAgICAgICAgR1ZhcmlhbnQqIHZhbHVlOworICAgICAgICB3aGlsZSAoZ192YXJpYW50X2l0ZXJf
bG9vcCgmaXRlciwgInsmc3Z9IiwgJmtleSwgJnZhbHVlKSkgeworICAgICAgICAgICAgaWYgKCFz
dHJjbXAoa2V5LCAicGFnZUlEIikgJiYgZ192YXJpYW50X2NsYXNzaWZ5KHZhbHVlKSA9PSBHX1ZB
UklBTlRfQ0xBU1NfVUlOVDY0KQorICAgICAgICAgICAgICAgIHJldHVybiBnX3ZhcmlhbnRfZ2V0
X3VpbnQ2NCh2YWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hl
ZCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBib29sIHRlc3RIaWVyYXJjaHlO
YXZpZ2F0aW9uKFdlYktpdFdlYkV4dGVuc2lvbiogZXh0ZW5zaW9uLCBHVmFyaWFudCogYXJncykK
KyAgICB7CisgICAgICAgIFdlYktpdFdlYlBhZ2UqIHBhZ2UgPSB3ZWJraXRfd2ViX2V4dGVuc2lv
bl9nZXRfcGFnZShleHRlbnNpb24sIHdlYlBhZ2VGcm9tQXJncyhhcmdzKSk7CisgICAgICAgIGdf
YXNzZXJ0KFdFQktJVF9JU19XRUJfUEFHRShwYWdlKSk7CisgICAgICAgIFdlYktpdERPTURvY3Vt
ZW50KiBkb2N1bWVudCA9IHdlYmtpdF93ZWJfcGFnZV9nZXRfZG9tX2RvY3VtZW50KHBhZ2UpOwor
ICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKGRvY3VtZW50KSk7CisKKyAg
ICAgICAgV2ViS2l0RE9NSFRNTEhlYWRFbGVtZW50KiBoZWFkID0gd2Via2l0X2RvbV9kb2N1bWVu
dF9nZXRfaGVhZChkb2N1bWVudCk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRN
TF9IRUFEX0VMRU1FTlQoaGVhZCkpOworCisgICAgICAgIC8vIFRpdGxlLCBoZWFkJ3MgY2hpbGQu
CisgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9oYXNfY2hpbGRfbm9kZXMoV0VCS0lU
X0RPTV9OT0RFKGhlYWQpKSk7CisgICAgICAgIEdSZWZQdHI8V2ViS2l0RE9NTm9kZUxpc3Q+IGxp
c3QgPSBhZG9wdEdSZWYod2Via2l0X2RvbV9ub2RlX2dldF9jaGlsZF9ub2RlcyhXRUJLSVRfRE9N
X05PREUoaGVhZCkpKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19OT0RFX0xJU1Qo
bGlzdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X2RvbV9ub2RlX2xp
c3RfZ2V0X2xlbmd0aChsaXN0LmdldCgpKSwgPT0sIDEpOworICAgICAgICBXZWJLaXRET01Ob2Rl
KiBub2RlID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0LmdldCgpLCAwKTsKKyAgICAg
ICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX1RJVExFX0VMRU1FTlQobm9kZSkpOworCisg
ICAgICAgIC8vIEJvZHksIEhlYWQgc2libGluZy4KKyAgICAgICAgbm9kZSA9IHdlYmtpdF9kb21f
bm9kZV9nZXRfbmV4dF9zaWJsaW5nKFdFQktJVF9ET01fTk9ERShoZWFkKSk7CisgICAgICAgIGdf
YXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9CT0RZX0VMRU1FTlQobm9kZSkpOworICAgICAgICBX
ZWJLaXRET01IVE1MQm9keUVsZW1lbnQqIGJvZHkgPSBXRUJLSVRfRE9NX0hUTUxfQk9EWV9FTEVN
RU5UKG5vZGUpOworCisgICAgICAgIC8vIFRoZXJlIGlzIG5vIHRoaXJkIHNpYmxpbmcKKyAgICAg
ICAgZ19hc3NlcnQoIXdlYmtpdF9kb21fbm9kZV9nZXRfbmV4dF9zaWJsaW5nKG5vZGUpKTsKKwor
ICAgICAgICAvLyBCb2R5J3MgcHJldmlvdXMgc2libGluZyBpcyBIZWFkLgorICAgICAgICBub2Rl
ID0gd2Via2l0X2RvbV9ub2RlX2dldF9wcmV2aW91c19zaWJsaW5nKFdFQktJVF9ET01fTk9ERShi
b2R5KSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9IRUFEX0VMRU1FTlQo
bm9kZSkpOworCisgICAgICAgIC8vIEJvZHkgaGFzIDMgY2hpbGRyZW4uCisgICAgICAgIGdfYXNz
ZXJ0KHdlYmtpdF9kb21fbm9kZV9oYXNfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkp
KSk7CisgICAgICAgIGxpc3QgPSBhZG9wdEdSZWYod2Via2l0X2RvbV9ub2RlX2dldF9jaGlsZF9u
b2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpKTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBsZW5n
dGggPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QuZ2V0KCkpOworICAgICAg
ICBnX2Fzc2VydF9jbXBpbnQobGVuZ3RoLCA9PSwgMyk7CisKKyAgICAgICAgLy8gVGhlIHRocmVl
IG9mIHRoZW0gYXJlIFAgdGFncy4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBsb25nIGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIG5vZGUgPSB3ZWJraXRfZG9tX25vZGVfbGlz
dF9pdGVtKGxpc3QuZ2V0KCksIGkpOworICAgICAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9J
U19IVE1MX1BBUkFHUkFQSF9FTEVNRU5UKG5vZGUpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IEdvIGJhY2t3YXJkcworICAgICAgICB1bnNpZ25lZCBpOworICAgICAgICBmb3IgKGkgPSAwOyBu
b2RlOyBub2RlID0gd2Via2l0X2RvbV9ub2RlX2dldF9wcmV2aW91c19zaWJsaW5nKG5vZGUpLCBp
KyspIHsgfQorICAgICAgICBnX2Fzc2VydF9jbXBpbnQoaSwgPT0sIDMpOworCisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgdGVzdEluc2VydGlvbihXZWJLaXRXZWJFeHRl
bnNpb24qIGV4dGVuc2lvbiwgR1ZhcmlhbnQqIGFyZ3MpCisgICAgeworICAgICAgICBXZWJLaXRX
ZWJQYWdlKiBwYWdlID0gd2Via2l0X3dlYl9leHRlbnNpb25fZ2V0X3BhZ2UoZXh0ZW5zaW9uLCB3
ZWJQYWdlRnJvbUFyZ3MoYXJncykpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfV0VCX1BB
R0UocGFnZSkpOworICAgICAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRf
d2ViX3BhZ2VfZ2V0X2RvbV9kb2N1bWVudChwYWdlKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lU
X0RPTV9JU19ET0NVTUVOVChkb2N1bWVudCkpOworCisgICAgICAgIFdlYktpdERPTUhUTUxFbGVt
ZW50KiBib2R5ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfYm9keShkb2N1bWVudCk7CisgICAg
ICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKGJvZHkpKTsKKworICAgICAg
ICAvLyBCb2R5IHNob3VsZG4ndCBoYXZlIGFueSBjaGlsZHJlbiBhdCB0aGlzIHBvaW50LgorICAg
ICAgICBnX2Fzc2VydCghd2Via2l0X2RvbV9ub2RlX2hhc19jaGlsZF9ub2RlcyhXRUJLSVRfRE9N
X05PREUoYm9keSkpKTsKKworICAgICAgICAvLyBJbnNlcnQgb25lIFAgZWxlbWVudC4KKyAgICAg
ICAgV2ViS2l0RE9NRWxlbWVudCogcCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2VsZW1l
bnQoZG9jdW1lbnQsICJQIiwgMCk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRN
TF9FTEVNRU5UKHApKTsKKyAgICAgICAgd2Via2l0X2RvbV9ub2RlX2FwcGVuZF9jaGlsZChXRUJL
SVRfRE9NX05PREUoYm9keSksIFdFQktJVF9ET01fTk9ERShwKSwgMCk7CisKKyAgICAgICAgLy8g
Tm93IGl0IHNob3VsZCBoYXZlIG9uZSwgdGhlIHNhbWUgdGhhdCB3ZSBpbnNlcnRlZC4KKyAgICAg
ICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2hhc19jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05P
REUoYm9keSkpKTsKKyAgICAgICAgR1JlZlB0cjxXZWJLaXRET01Ob2RlTGlzdD4gbGlzdCA9IGFk
b3B0R1JlZih3ZWJraXRfZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShi
b2R5KSkpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX05PREVfTElTVChsaXN0Lmdl
dCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRf
bGVuZ3RoKGxpc3QuZ2V0KCkpLCA9PSwgMSk7CisgICAgICAgIFdlYktpdERPTU5vZGUqIG5vZGUg
PSB3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtKGxpc3QuZ2V0KCksIDApOworICAgICAgICBnX2Fz
c2VydChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChub2RlKSk7CisgICAgICAgIGdfYXNzZXJ0
KHdlYmtpdF9kb21fbm9kZV9pc19zYW1lX25vZGUoV0VCS0lUX0RPTV9OT0RFKHApLCBub2RlKSk7
CisKKyAgICAgICAgLy8gUmVwbGFjZSB0aGUgUCB0YWcgd2l0aCBhIERJViB0YWcuCisgICAgICAg
IFdlYktpdERPTUVsZW1lbnQqIGRpdiA9IHdlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2VsZW1l
bnQoZG9jdW1lbnQsICJESVYiLCAwKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19I
VE1MX0VMRU1FTlQoZGl2KSk7CisgICAgICAgIHdlYmtpdF9kb21fbm9kZV9yZXBsYWNlX2NoaWxk
KFdFQktJVF9ET01fTk9ERShib2R5KSwgV0VCS0lUX0RPTV9OT0RFKGRpdiksIFdFQktJVF9ET01f
Tk9ERShwKSwgMCk7CisgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9oYXNfY2hpbGRf
bm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKSk7CisgICAgICAgIGxpc3QgPSBhZG9wdEdSZWYo
d2Via2l0X2RvbV9ub2RlX2dldF9jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpKTsK
KyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19OT0RFX0xJU1QobGlzdC5nZXQoKSkpOwor
ICAgICAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChs
aXN0LmdldCgpKSwgPT0sIDEpOworICAgICAgICBub2RlID0gd2Via2l0X2RvbV9ub2RlX2xpc3Rf
aXRlbShsaXN0LmdldCgpLCAwKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1M
X0VMRU1FTlQobm9kZSkpOworICAgICAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaXNfc2Ft
ZV9ub2RlKFdFQktJVF9ET01fTk9ERShkaXYpLCBub2RlKSk7CisKKyAgICAgICAgLy8gTm93IHJl
bW92ZSB0aGUgdGFnLgorICAgICAgICB3ZWJraXRfZG9tX25vZGVfcmVtb3ZlX2NoaWxkKFdFQktJ
VF9ET01fTk9ERShib2R5KSwgbm9kZSwgMCk7CisgICAgICAgIGxpc3QgPSBhZG9wdEdSZWYod2Vi
a2l0X2RvbV9ub2RlX2dldF9jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpKTsKKyAg
ICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19OT0RFX0xJU1QobGlzdC5nZXQoKSkpOworICAg
ICAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChsaXN0
LmdldCgpKSwgPT0sIDApOworCisgICAgICAgIC8vIFRlc3QgaW5zZXJ0IGJlZm9yZS4gSWYgcmVm
Q2hpbGQgaXMgbnVsbCwgaW5zZXJ0IG5ld0NoaWxkIGFzIGxhc3QgZWxlbWVudCBvZiBwYXJlbnQu
CisgICAgICAgIGRpdiA9IHdlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2VsZW1lbnQoZG9jdW1l
bnQsICJESVYiLCAwKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0VMRU1F
TlQoZGl2KSk7CisgICAgICAgIHdlYmtpdF9kb21fbm9kZV9pbnNlcnRfYmVmb3JlKFdFQktJVF9E
T01fTk9ERShib2R5KSwgV0VCS0lUX0RPTV9OT0RFKGRpdiksIDAsIDApOworICAgICAgICBnX2Fz
c2VydCh3ZWJraXRfZG9tX25vZGVfaGFzX2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5
KSkpOworICAgICAgICBsaXN0ID0gYWRvcHRHUmVmKHdlYmtpdF9kb21fbm9kZV9nZXRfY2hpbGRf
bm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9E
T01fSVNfTk9ERV9MSVNUKGxpc3QuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KHdl
YmtpdF9kb21fbm9kZV9saXN0X2dldF9sZW5ndGgobGlzdC5nZXQoKSksID09LCAxKTsKKyAgICAg
ICAgbm9kZSA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdC5nZXQoKSwgMCk7CisgICAg
ICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKG5vZGUpKTsKKyAgICAgICAg
Z19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2lzX3NhbWVfbm9kZShXRUJLSVRfRE9NX05PREUoZGl2
KSwgbm9kZSkpOworCisgICAgICAgIC8vIE5vdyBpbnNlcnQgYSAncCcgYmVmb3JlICdkaXYnLgor
ICAgICAgICBwID0gd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZWxlbWVudChkb2N1bWVudCwg
IlAiLCAwKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0VMRU1FTlQocCkp
OworICAgICAgICB3ZWJraXRfZG9tX25vZGVfaW5zZXJ0X2JlZm9yZShXRUJLSVRfRE9NX05PREUo
Ym9keSksIFdFQktJVF9ET01fTk9ERShwKSwgV0VCS0lUX0RPTV9OT0RFKGRpdiksIDApOworICAg
ICAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaGFzX2NoaWxkX25vZGVzKFdFQktJVF9ET01f
Tk9ERShib2R5KSkpOworICAgICAgICBsaXN0ID0gYWRvcHRHUmVmKHdlYmtpdF9kb21fbm9kZV9n
ZXRfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKSk7CisgICAgICAgIGdfYXNzZXJ0
KFdFQktJVF9ET01fSVNfTk9ERV9MSVNUKGxpc3QuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRf
Y21waW50KHdlYmtpdF9kb21fbm9kZV9saXN0X2dldF9sZW5ndGgobGlzdC5nZXQoKSksID09LCAy
KTsKKyAgICAgICAgbm9kZSA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdC5nZXQoKSwg
MCk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKG5vZGUpKTsK
KyAgICAgICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2lzX3NhbWVfbm9kZShXRUJLSVRfRE9N
X05PREUocCksIG5vZGUpKTsKKyAgICAgICAgbm9kZSA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0
ZW0obGlzdC5nZXQoKSwgMSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9F
TEVNRU5UKG5vZGUpKTsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2lzX3NhbWVf
bm9kZShXRUJLSVRfRE9NX05PREUoZGl2KSwgbm9kZSkpOworCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIGJvb2wgdGVzdFRhZ05hbWVzKFdlYktpdFdlYkV4dGVuc2lvbiogZXh0
ZW5zaW9uLCBHVmFyaWFudCogYXJncykKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBleHBlY3RlZFRhZ05hbWVzW10gPSB7ICJIVE1MIiwgIkhFQUQiLCAiQk9EWSIsICJWSURFTyIs
ICJTT1VSQ0UiLCAiVklERU8iLCAiU09VUkNFIiwgIklOUFVUIiB9OworCisgICAgICAgIFdlYktp
dFdlYlBhZ2UqIHBhZ2UgPSB3ZWJraXRfd2ViX2V4dGVuc2lvbl9nZXRfcGFnZShleHRlbnNpb24s
IHdlYlBhZ2VGcm9tQXJncyhhcmdzKSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19XRUJf
UEFHRShwYWdlKSk7CisgICAgICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1bWVudCA9IHdlYmtp
dF93ZWJfcGFnZV9nZXRfZG9tX2RvY3VtZW50KHBhZ2UpOworICAgICAgICBnX2Fzc2VydChXRUJL
SVRfRE9NX0lTX0RPQ1VNRU5UKGRvY3VtZW50KSk7CisKKyAgICAgICAgV2ViS2l0RE9NTm9kZUxp
c3QqIGxpc3QgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19ieV90YWdfbmFtZShk
b2N1bWVudCwgIioiKTsKKyAgICAgICAgZ3Vsb25nIG5vZGVDb3VudCA9IHdlYmtpdF9kb21fbm9k
ZV9saXN0X2dldF9sZW5ndGgobGlzdCk7CisgICAgICAgIGdfYXNzZXJ0X2NtcHVpbnQobm9kZUNv
dW50LCA9PSwgR19OX0VMRU1FTlRTKGV4cGVjdGVkVGFnTmFtZXMpKTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG5vZGVDb3VudDsgaSsrKSB7CisgICAgICAgICAgICBXZWJLaXRE
T01Ob2RlKiBub2RlID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0LCBpKTsKKyAgICAg
ICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfTk9ERShub2RlKSk7CisgICAgICAgICAgICBH
T3duUHRyPGNoYXI+IHRhZ05hbWUod2Via2l0X2RvbV9ub2RlX2dldF9ub2RlX25hbWUobm9kZSkp
OworICAgICAgICAgICAgZ19hc3NlcnRfY21wc3RyKHRhZ05hbWUuZ2V0KCksID09LCBleHBlY3Rl
ZFRhZ05hbWVzW2ldKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIHZpcnR1YWwgYm9vbCBydW5UZXN0KGNvbnN0IGNoYXIqIHRlc3ROYW1lLCBXZWJLaXRX
ZWJFeHRlbnNpb24qIGV4dGVuc2lvbiwgR1ZhcmlhbnQqIGFyZ3MpCisgICAgeworICAgICAgICBp
ZiAoIXN0cmNtcCh0ZXN0TmFtZSwgImhpZXJhcmNoeS1uYXZpZ2F0aW9uIikpCisgICAgICAgICAg
ICByZXR1cm4gdGVzdEhpZXJhcmNoeU5hdmlnYXRpb24oZXh0ZW5zaW9uLCBhcmdzKTsKKyAgICAg
ICAgaWYgKCFzdHJjbXAodGVzdE5hbWUsICJpbnNlcnRpb24iKSkKKyAgICAgICAgICAgIHJldHVy
biB0ZXN0SW5zZXJ0aW9uKGV4dGVuc2lvbiwgYXJncyk7CisgICAgICAgIGlmICghc3RyY21wKHRl
c3ROYW1lLCAidGFnLW5hbWVzIikpCisgICAgICAgICAgICByZXR1cm4gdGVzdFRhZ05hbWVzKGV4
dGVuc2lvbiwgYXJncyk7CisKKyAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KK307CisKK3N0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18o
KGNvbnN0cnVjdG9yKSkgcmVnaXN0ZXJUZXN0cygpCit7CisgICAgUkVHSVNURVJfVEVTVChXZWJL
aXRET01Ob2RlVGVzdCwgIldlYktpdERPTU5vZGUvaGllcmFyY2h5LW5hdmlnYXRpb24iKTsKKyAg
ICBSRUdJU1RFUl9URVNUKFdlYktpdERPTU5vZGVUZXN0LCAiV2ViS2l0RE9NTm9kZS9pbnNlcnRp
b24iKTsKKyAgICBSRUdJU1RFUl9URVNUKFdlYktpdERPTU5vZGVUZXN0LCAiV2ViS2l0RE9NTm9k
ZS90YWctbmFtZXMiKTsKK30KKworCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdDJHdGsvRnJhbWVUZXN0LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Mkd0ay9GcmFtZVRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjRkNDg1MGYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdDJHdGsvRnJhbWVUZXN0LmNwcApAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRl
ICJXZWJQcm9jZXNzVGVzdC5oIgorI2luY2x1ZGUgPGdpby9naW8uaD4KKyNpbmNsdWRlIDx3ZWJr
aXQyL3dlYmtpdC13ZWItZXh0ZW5zaW9uLmg+CisKK2NsYXNzIFdlYktpdEZyYW1lVGVzdCA6IHB1
YmxpYyBXZWJQcm9jZXNzVGVzdCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8V2Vi
UHJvY2Vzc1Rlc3Q+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBXZWJLaXRGcmFtZVRl
c3QoKSk7IH0KKworcHJpdmF0ZToKKyAgICBndWludDY0IHdlYlBhZ2VGcm9tQXJncyhHVmFyaWFu
dCogYXJncykKKyAgICB7CisgICAgICAgIEdWYXJpYW50SXRlciBpdGVyOworICAgICAgICBnX3Zh
cmlhbnRfaXRlcl9pbml0KCZpdGVyLCBhcmdzKTsKKworICAgICAgICBjb25zdCBjaGFyKiBrZXk7
CisgICAgICAgIEdWYXJpYW50KiB2YWx1ZTsKKyAgICAgICAgd2hpbGUgKGdfdmFyaWFudF9pdGVy
X2xvb3AoJml0ZXIsICJ7JnN2fSIsICZrZXksICZ2YWx1ZSkpIHsKKyAgICAgICAgICAgIGlmICgh
c3RyY21wKGtleSwgInBhZ2VJRCIpICYmIGdfdmFyaWFudF9jbGFzc2lmeSh2YWx1ZSkgPT0gR19W
QVJJQU5UX0NMQVNTX1VJTlQ2NCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZ192YXJpYW50X2dl
dF91aW50NjQodmFsdWUpOworICAgICAgICB9CisKKyAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNo
ZWQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgYm9vbCB0ZXN0TWFpbkZyYW1l
KFdlYktpdFdlYkV4dGVuc2lvbiogZXh0ZW5zaW9uLCBHVmFyaWFudCogYXJncykKKyAgICB7Cisg
ICAgICAgIFdlYktpdFdlYlBhZ2UqIHBhZ2UgPSB3ZWJraXRfd2ViX2V4dGVuc2lvbl9nZXRfcGFn
ZShleHRlbnNpb24sIHdlYlBhZ2VGcm9tQXJncyhhcmdzKSk7CisgICAgICAgIGdfYXNzZXJ0KFdF
QktJVF9JU19XRUJfUEFHRShwYWdlKSk7CisKKyAgICAgICAgV2ViS2l0RnJhbWUqIGZyYW1lID0g
d2Via2l0X3dlYl9wYWdlX2dldF9tYWluX2ZyYW1lKHBhZ2UpOworICAgICAgICBnX2Fzc2VydChX
RUJLSVRfSVNfRlJBTUUoZnJhbWUpKTsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X2ZyYW1lX2lz
X21haW5fZnJhbWUoZnJhbWUpKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICBib29sIHRlc3RVUkkoV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24sIEdWYXJpYW50KiBh
cmdzKQorICAgIHsKKyAgICAgICAgV2ViS2l0V2ViUGFnZSogcGFnZSA9IHdlYmtpdF93ZWJfZXh0
ZW5zaW9uX2dldF9wYWdlKGV4dGVuc2lvbiwgd2ViUGFnZUZyb21BcmdzKGFyZ3MpKTsKKyAgICAg
ICAgZ19hc3NlcnQoV0VCS0lUX0lTX1dFQl9QQUdFKHBhZ2UpKTsKKworICAgICAgICBXZWJLaXRG
cmFtZSogZnJhbWUgPSB3ZWJraXRfd2ViX3BhZ2VfZ2V0X21haW5fZnJhbWUocGFnZSk7CisgICAg
ICAgIGdfYXNzZXJ0KFdFQktJVF9JU19GUkFNRShmcmFtZSkpOworICAgICAgICBnX2Fzc2VydF9j
bXBzdHIod2Via2l0X3dlYl9wYWdlX2dldF91cmkocGFnZSksID09LCB3ZWJraXRfZnJhbWVfZ2V0
X3VyaShmcmFtZSkpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wg
dGVzdEphdmFTY3JpcHRDb250ZXh0KFdlYktpdFdlYkV4dGVuc2lvbiogZXh0ZW5zaW9uLCBHVmFy
aWFudCogYXJncykKKyAgICB7CisgICAgICAgIFdlYktpdFdlYlBhZ2UqIHBhZ2UgPSB3ZWJraXRf
d2ViX2V4dGVuc2lvbl9nZXRfcGFnZShleHRlbnNpb24sIHdlYlBhZ2VGcm9tQXJncyhhcmdzKSk7
CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19XRUJfUEFHRShwYWdlKSk7CisKKyAgICAgICAg
V2ViS2l0RnJhbWUqIGZyYW1lID0gd2Via2l0X3dlYl9wYWdlX2dldF9tYWluX2ZyYW1lKHBhZ2Up
OworICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfRlJBTUUoZnJhbWUpKTsKKyAgICAgICAgZ19h
c3NlcnQod2Via2l0X2ZyYW1lX2dldF9qYXZhc2NyaXB0X2dsb2JhbF9jb250ZXh0KGZyYW1lKSk7
CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIHJ1blRl
c3QoY29uc3QgY2hhciogdGVzdE5hbWUsIFdlYktpdFdlYkV4dGVuc2lvbiogZXh0ZW5zaW9uLCBH
VmFyaWFudCogYXJncykKKyAgICB7CisgICAgICAgIGlmICghc3RyY21wKHRlc3ROYW1lLCAibWFp
bi1mcmFtZSIpKQorICAgICAgICAgICAgcmV0dXJuIHRlc3RNYWluRnJhbWUoZXh0ZW5zaW9uLCBh
cmdzKTsKKyAgICAgICAgaWYgKCFzdHJjbXAodGVzdE5hbWUsICJ1cmkiKSkKKyAgICAgICAgICAg
IHJldHVybiB0ZXN0VVJJKGV4dGVuc2lvbiwgYXJncyk7CisgICAgICAgIGlmICghc3RyY21wKHRl
c3ROYW1lLCAiamF2YXNjcmlwdC1jb250ZXh0IikpCisgICAgICAgICAgICByZXR1cm4gdGVzdEph
dmFTY3JpcHRDb250ZXh0KGV4dGVuc2lvbiwgYXJncyk7CisKKyAgICAgICAgZ19hc3NlcnRfbm90
X3JlYWNoZWQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK307CisKK3N0YXRpYyB2
b2lkIF9fYXR0cmlidXRlX18oKGNvbnN0cnVjdG9yKSkgcmVnaXN0ZXJUZXN0cygpCit7CisgICAg
UkVHSVNURVJfVEVTVChXZWJLaXRGcmFtZVRlc3QsICJXZWJLaXRGcmFtZS9tYWluLWZyYW1lIik7
CisgICAgUkVHSVNURVJfVEVTVChXZWJLaXRGcmFtZVRlc3QsICJXZWJLaXRGcmFtZS91cmkiKTsK
KyAgICBSRUdJU1RFUl9URVNUKFdlYktpdEZyYW1lVGVzdCwgIldlYktpdEZyYW1lL2phdmFzY3Jp
cHQtY29udGV4dCIpOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyR3RrL0luc3BlY3RvclRlc3RTZXJ2ZXIuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXQyR3RrL0luc3BlY3RvclRlc3RTZXJ2ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmYxM2IwNDMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvSW5zcGVjdG9yVGVzdFNlcnZlci5jcHAKQEAgLTAs
MCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNz
IEx0ZC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0
Mi5oPgorCitzdGF0aWMgdm9pZCBsb2FkQ2hhbmdlZENhbGxiYWNrKFdlYktpdFdlYlZpZXcqLCBX
ZWJLaXRMb2FkRXZlbnQgbG9hZEV2ZW50LCBncG9pbnRlcikKK3sKKyAgICAvLyBTZW5kIGEgbWVz
c2FnZSB0byB0aGUgcGFyZW50IHByb2Nlc3Mgd2hlbiB3ZSdyZSByZWFkeS4KKyAgICBpZiAobG9h
ZEV2ZW50ID09IFdFQktJVF9MT0FEX0ZJTklTSEVEKQorICAgICAgICBnX3ByaW50KCJPSyIpOwor
fQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgZ3RrX2luaXQoJmFy
Z2MsICZhcmd2KTsKKworICAgIC8vIE92ZXJ3cml0ZSBXRUJLSVRfSU5TUEVDVE9SX1NFUlZFUiB2
YXJpYWJsZSB3aXRoIGRlZmF1bHQgdmFsdWUuCisgICAgZ19zZXRlbnYoIldFQktJVF9JTlNQRUNU
T1JfU0VSVkVSIiwgIjEyNy4wLjAuMToyOTk5IiwgVFJVRSk7CisKKyAgICBXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAg
d2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfZGV2ZWxvcGVyX2V4dHJhcyh3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X3NldHRpbmdzKHdlYlZpZXcpLCBUUlVFKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9h
ZF9odG1sKHdlYlZpZXcsCisgICAgICAgICI8aHRtbD48Ym9keT48cD5XZWJLaXRHVEsrIEluc3Bl
Y3RvciBUZXN0IFNlcnZlcjwvcD48L2JvZHk+PC9odG1sPiIsCisgICAgICAgICJodHRwOi8vMTI3
LjAuMC4xOjI5OTkvIik7CisKKyAgICBHdGtXaWRnZXQqIHdpbmRvdyA9IGd0a193aW5kb3dfbmV3
KEdUS19XSU5ET1dfVE9QTEVWRUwpOworICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlO
RVIod2luZG93KSwgR1RLX1dJREdFVCh3ZWJWaWV3KSk7CisgICAgZ3RrX3dpZGdldF9zaG93X2Fs
bCh3aW5kb3cpOworCisgICAgZ19zaWduYWxfY29ubmVjdCh3aW5kb3csICJkZWxldGUtZXZlbnQi
LCBHX0NBTExCQUNLKGd0a19tYWluX3F1aXQpLCAwKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdl
YlZpZXcsICJsb2FkLWNoYW5nZWQiLCBHX0NBTExCQUNLKGxvYWRDaGFuZ2VkQ2FsbGJhY2spLCAw
KTsKKworICAgIGd0a19tYWluKCk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdDJHdGsvVGVzdEF1dGhlbnRpY2F0aW9uLmNwcCBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0QXV0aGVudGljYXRpb24uY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZTQyMjUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdEF1dGhlbnRpY2F0aW9uLmNwcApA
QCAtMCwwICsxLDI4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxvYWRUcmFja2luZ1Rlc3QuaCIKKyNpbmNs
dWRlICJXZWJLaXRUZXN0U2VydmVyLmgiCisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5o
PgorCitzdGF0aWMgV2ViS2l0VGVzdFNlcnZlcioga1NlcnZlcjsKKworY2xhc3MgQXV0aGVudGlj
YXRpb25UZXN0OiBwdWJsaWMgTG9hZFRyYWNraW5nVGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9H
TElCX1RFU1RfRklYVFVSRShBdXRoZW50aWNhdGlvblRlc3QpOworCisgICAgQXV0aGVudGljYXRp
b25UZXN0KCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAiYXV0
aGVudGljYXRlIiwgR19DQUxMQkFDSyhydW5BdXRoZW50aWNhdGlvbkNhbGxiYWNrKSwgdGhpcyk7
CisgICAgfQorCisgICAgfkF1dGhlbnRpY2F0aW9uVGVzdCgpCisgICAgeworICAgICAgICBnX3Np
Z25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV93ZWJWaWV3LCBHX1NJR05BTF9NQVRD
SF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGF1dGhl
bnRpY2F0aW9uUmV0cmllczsKKyAgICBzdGF0aWMgYm9vbCBhdXRoZW50aWNhdGlvbkNhbmNlbGxl
ZFJlY2VpdmVkOworCisgICAgdm9pZCBsb2FkVVJJKGNvbnN0IGNoYXIqIHVyaSkKKyAgICB7Cisg
ICAgICAgIC8vIFJlc2V0IHRoZSByZXRyeSBjb3VudCBvZiB0aGUgZmFrZSBzZXJ2ZXIgd2hlbiBh
IHBhZ2UgaXMgbG9hZGVkLgorICAgICAgICBhdXRoZW50aWNhdGlvblJldHJpZXMgPSAwOworICAg
ICAgICBhdXRoZW50aWNhdGlvbkNhbmNlbGxlZFJlY2VpdmVkID0gZmFsc2U7CisgICAgICAgIExv
YWRUcmFja2luZ1Rlc3Q6OmxvYWRVUkkodXJpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xl
YW4gcnVuQXV0aGVudGljYXRpb25DYWxsYmFjayhXZWJLaXRXZWJWaWV3KiwgV2ViS2l0QXV0aGVu
dGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0LCBBdXRoZW50aWNhdGlvblRlc3QqIHRlc3QpCisgICAg
eworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KHJlcXVlc3QsICJjYW5jZWxsZWQiLCBHX0NBTExC
QUNLKGF1dGhlbnRpY2F0aW9uQ2FuY2VsbGVkQ2FsbGJhY2spLCB0ZXN0KTsKKyAgICAgICAgdGVz
dC0+cnVuQXV0aGVudGljYXRpb24ocmVxdWVzdCk7CisgICAgICAgIHJldHVybiBUUlVFOworICAg
IH0KKworICAgIHN0YXRpYyB2b2lkIGF1dGhlbnRpY2F0aW9uQ2FuY2VsbGVkQ2FsbGJhY2soV2Vi
S2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiwgQXV0aGVudGljYXRpb25UZXN0KikKKyAgICB7Cisg
ICAgICAgIGF1dGhlbnRpY2F0aW9uQ2FuY2VsbGVkUmVjZWl2ZWQgPSB0cnVlOworICAgIH0KKwor
ICAgIHZvaWQgcnVuQXV0aGVudGljYXRpb24oV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiBy
ZXF1ZXN0KQorICAgIHsKKyAgICAgICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5p
c2hlcyhHX09CSkVDVChyZXF1ZXN0KSk7CisgICAgICAgIG1fYXV0aGVudGljYXRpb25SZXF1ZXN0
ID0gcmVxdWVzdDsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX21haW5Mb29wKTsKKyAgICB9
CisKKyAgICBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHdhaXRGb3JBdXRoZW50aWNhdGlv
blJlcXVlc3QoKQorICAgIHsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwor
ICAgICAgICByZXR1cm4gbV9hdXRoZW50aWNhdGlvblJlcXVlc3QuZ2V0KCk7CisgICAgfQorCitw
cml2YXRlOgorICAgIEdSZWZQdHI8V2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0PiBtX2F1dGhl
bnRpY2F0aW9uUmVxdWVzdDsKK307CisKK2ludCBBdXRoZW50aWNhdGlvblRlc3Q6OmF1dGhlbnRp
Y2F0aW9uUmV0cmllcyA9IDA7Citib29sIEF1dGhlbnRpY2F0aW9uVGVzdDo6YXV0aGVudGljYXRp
b25DYW5jZWxsZWRSZWNlaXZlZCA9IGZhbHNlOworCitzdGF0aWMgY29uc3QgY2hhciBhdXRoVGVz
dFVzZXJuYW1lW10gPSAidXNlcm5hbWUiOworc3RhdGljIGNvbnN0IGNoYXIgYXV0aFRlc3RQYXNz
d29yZFtdID0gInBhc3N3b3JkIjsKK3N0YXRpYyBjb25zdCBjaGFyIGF1dGhFeHBlY3RlZFN1Y2Nl
c3NUaXRsZVtdID0gIldlYktpdDJHdGsrIEF1dGhlbnRpY2F0aW9uIHRlc3QiOworc3RhdGljIGNv
bnN0IGNoYXIgYXV0aEV4cGVjdGVkRmFpbHVyZVRpdGxlW10gPSAiNDAxIEF1dGhvcml6YXRpb24g
UmVxdWlyZWQiOworc3RhdGljIGNvbnN0IGNoYXIgYXV0aEV4cGVjdGVkQXV0aG9yaXphdGlvbltd
ID0gIkJhc2ljIGRYTmxjbTVoYldVNmNHRnpjM2R2Y21RPSI7IC8vIEJhc2U2NCBlbmNvZGluZyBv
ZiAidXNlcm5hbWU6cGFzc3dvcmQiLgorc3RhdGljIGNvbnN0IGNoYXIgYXV0aFN1Y2Nlc3NIVE1M
U3RyaW5nW10gPQorICAgICI8aHRtbD4iCisgICAgIjxoZWFkPjx0aXRsZT5XZWJLaXQyR3RrKyBB
dXRoZW50aWNhdGlvbiB0ZXN0PC90aXRsZT48L2hlYWQ+IgorICAgICI8Ym9keT48L2JvZHk+PC9o
dG1sPiI7CitzdGF0aWMgY29uc3QgY2hhciBhdXRoRmFpbHVyZUhUTUxTdHJpbmdbXSA9CisgICAg
IjxodG1sPiIKKyAgICAiPGhlYWQ+PHRpdGxlPjQwMSBBdXRob3JpemF0aW9uIFJlcXVpcmVkPC90
aXRsZT48L2hlYWQ+IgorICAgICI8Ym9keT48L2JvZHk+PC9odG1sPiI7CisKK3N0YXRpYyB2b2lk
IHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25SZXF1ZXN0KEF1dGhlbnRpY2F0aW9uVGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICAvLyBUZXN0IGF1dGhlbnRpY2F0aW9uIHJlcXVlc3Qg
Z2V0dGVycyBtYXRjaCBzb3VwIGF1dGhlbnRpY2F0aW9uIGhlYWRlci4KKyAgICB0ZXN0LT5sb2Fk
VVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9hdXRoLXRlc3QuaHRtbCIpLmRhdGEoKSk7Cisg
ICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0ID0gdGVzdC0+d2FpdEZvckF1
dGhlbnRpY2F0aW9uUmVxdWVzdCgpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfYXV0aGVu
dGljYXRpb25fcmVxdWVzdF9nZXRfaG9zdChyZXF1ZXN0KSwgPT0sIHNvdXBfdXJpX2dldF9ob3N0
KGtTZXJ2ZXItPmJhc2VVUkkoKSkpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2F1dGhl
bnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3BvcnQocmVxdWVzdCksID09LCBzb3VwX3VyaV9nZXRfcG9y
dChrU2VydmVyLT5iYXNlVVJJKCkpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2F1dGhl
bnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3JlYWxtKHJlcXVlc3QpLCA9PSwgIm15IHJlYWxtIik7Cisg
ICAgZ19hc3NlcnQod2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3NjaGVtZShyZXF1
ZXN0KSA9PSBXRUJLSVRfQVVUSEVOVElDQVRJT05fU0NIRU1FX0hUVFBfQkFTSUMpOworICAgIGdf
YXNzZXJ0KCF3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9pc19mb3JfcHJveHkocmVxdWVz
dCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9pc19yZXRy
eShyZXF1ZXN0KSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25D
YW5jZWwoQXV0aGVudGljYXRpb25UZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIC8v
IFRlc3QgY2FuY2VsLgorICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgi
L2F1dGgtdGVzdC5odG1sIikuZGF0YSgpKTsKKyAgICBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVl
c3QqIHJlcXVlc3QgPSB0ZXN0LT53YWl0Rm9yQXV0aGVudGljYXRpb25SZXF1ZXN0KCk7CisgICAg
d2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfY2FuY2VsKHJlcXVlc3QpOworICAgIC8vIFNl
cnZlciBkb2Vzbid0IGFzayBmb3IgbmV3IGNyZWRlbnRpYWxzLgorICAgIHRlc3QtPndhaXRVbnRp
bExvYWRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50
cy5zaXplKCksID09LCAzKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRz
WzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7CisgICAg
Z19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rl
c3Q6OlByb3Zpc2lvbmFsTG9hZEZhaWxlZCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1f
bG9hZEV2ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7CisKKyAg
ICBnX2Fzc2VydF9lcnJvcih0ZXN0LT5tX2Vycm9yLmdldCgpLCBXRUJLSVRfTkVUV09SS19FUlJP
UiwgV0VCS0lUX05FVFdPUktfRVJST1JfQ0FOQ0VMTEVEKTsKK30KKworc3RhdGljIHZvaWQgdGVz
dFdlYlZpZXdBdXRoZW50aWNhdGlvbkxvYWRDYW5jZWxsZWQoQXV0aGVudGljYXRpb25UZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJ
Rm9yUGF0aCgiL2F1dGgtdGVzdC5odG1sIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0Rm9yQXV0
aGVudGljYXRpb25SZXF1ZXN0KCk7CisgICAgd2Via2l0X3dlYl92aWV3X3N0b3BfbG9hZGluZyh0
ZXN0LT5tX3dlYlZpZXcpOworICAgIC8vIEV4cGVjdCBlbXB0eSBwYWdlLgorICAgIHRlc3QtPndh
aXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0KHRlc3QtPmF1dGhlbnRpY2F0aW9u
Q2FuY2VsbGVkUmVjZWl2ZWQpOworCisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2
ZW50cy5zaXplKCksID09LCAzKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZl
bnRzWzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7Cisg
ICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2lu
Z1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZEZhaWxlZCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3Qt
Pm1fbG9hZEV2ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7CisK
KyAgICBnX2Fzc2VydF9lcnJvcih0ZXN0LT5tX2Vycm9yLmdldCgpLCBXRUJLSVRfTkVUV09SS19F
UlJPUiwgV0VCS0lUX05FVFdPUktfRVJST1JfQ0FOQ0VMTEVEKTsKK30KKworc3RhdGljIHZvaWQg
dGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvbkZhaWx1cmUoQXV0aGVudGljYXRpb25UZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQoreworICAgIC8vIFRlc3QgYXV0aGVudGljYXRpb24gZmFpbHVyZXMu
CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvYXV0aC10ZXN0Lmh0
bWwiKS5kYXRhKCkpOworICAgIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCA9
IHRlc3QtPndhaXRGb3JBdXRoZW50aWNhdGlvblJlcXVlc3QoKTsKKyAgICBnX2Fzc2VydCghd2Vi
a2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfaXNfcmV0cnkocmVxdWVzdCkpOworICAgIFdlYktp
dENyZWRlbnRpYWwqIGNyZWRlbnRpYWwgPSB3ZWJraXRfY3JlZGVudGlhbF9uZXcoYXV0aFRlc3RV
c2VybmFtZSwgIndyb25ncGFzc3dvcmQiLCBXRUJLSVRfQ1JFREVOVElBTF9QRVJTSVNURU5DRV9O
T05FKTsKKyAgICB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9hdXRoZW50aWNhdGUocmVx
dWVzdCwgY3JlZGVudGlhbCk7CisgICAgd2Via2l0X2NyZWRlbnRpYWxfZnJlZShjcmVkZW50aWFs
KTsKKyAgICAvLyBFeHBlY3QgYSBzZWNvbmQgYXV0aGVudGljYXRpb24gcmVxdWVzdC4KKyAgICBy
ZXF1ZXN0ID0gdGVzdC0+d2FpdEZvckF1dGhlbnRpY2F0aW9uUmVxdWVzdCgpOworICAgIGdfYXNz
ZXJ0KHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2lzX3JldHJ5KHJlcXVlc3QpKTsKKyAg
ICAvLyBUZXN0IHNlY29uZCBmYWlsdXJlLgorICAgIGNyZWRlbnRpYWwgPSB3ZWJraXRfY3JlZGVu
dGlhbF9uZXcoYXV0aFRlc3RVc2VybmFtZSwgIndyb25ncGFzc3dvcmQyIiwgV0VCS0lUX0NSRURF
TlRJQUxfUEVSU0lTVEVOQ0VfTk9ORSk7CisgICAgd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVl
c3RfYXV0aGVudGljYXRlKHJlcXVlc3QsIGNyZWRlbnRpYWwpOworICAgIHdlYmtpdF9jcmVkZW50
aWFsX2ZyZWUoY3JlZGVudGlhbCk7CisgICAgLy8gRXhwZWN0IGF1dGhlbnRpY2F0aW9uIGZhaWxl
ZCBwYWdlLgorICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgZ19hc3Nl
cnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50cy5zaXplKCksID09LCAzKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJv
dmlzaW9uYWxMb2FkU3RhcnRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2
ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRDb21taXR0ZWQpOworICAgIGdfYXNz
ZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMl0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpM
b2FkRmluaXNoZWQpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3Rp
dGxlKHRlc3QtPm1fd2ViVmlldyksID09LCBhdXRoRXhwZWN0ZWRGYWlsdXJlVGl0bGUpOworfQor
CitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uTm9DcmVkZW50aWFsKEF1dGhl
bnRpY2F0aW9uVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICAvLyBUZXN0IGNvbnRp
bnVlIHdpdGhvdXQgY3JlZGVudGlhbHMuCisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRV
UklGb3JQYXRoKCIvYXV0aC10ZXN0Lmh0bWwiKS5kYXRhKCkpOworICAgIFdlYktpdEF1dGhlbnRp
Y2F0aW9uUmVxdWVzdCogcmVxdWVzdCA9IHRlc3QtPndhaXRGb3JBdXRoZW50aWNhdGlvblJlcXVl
c3QoKTsKKyAgICB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9hdXRoZW50aWNhdGUocmVx
dWVzdCwgMCk7CisgICAgLy8gU2VydmVyIGRvZXNuJ3QgYXNrIGZvciBuZXcgY3JlZGVudGlhbHMu
CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydF9jbXBp
bnQodGVzdC0+bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0sIDMpOworICAgIGdfYXNzZXJ0X2NtcGlu
dCh0ZXN0LT5tX2xvYWRFdmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25h
bExvYWRTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzFd
LCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZENvbW1pdHRlZCk7CisgICAgZ19hc3NlcnRfY21w
aW50KHRlc3QtPm1fbG9hZEV2ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5p
c2hlZCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRfdGl0bGUodGVz
dC0+bV93ZWJWaWV3KSwgPT0sIGF1dGhFeHBlY3RlZEZhaWx1cmVUaXRsZSk7Cit9CisKK3N0YXRp
YyB2b2lkIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25TdG9yYWdlKEF1dGhlbnRpY2F0aW9uVGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICAvLyBFbmFibGUgcHJpdmF0ZSBicm93c2lu
ZyBiZWZvcmUgYXV0aGVudGljYXRpb24gcmVxdWVzdCB0byB0ZXN0IHRoYXQgY3JlZGVudGlhbHMg
Y2FuJ3QgYmUgc2F2ZWQuCisgICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfcHJpdmF0ZV9i
cm93c2luZyh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHRlc3QtPm1fd2ViVmlldyksIFRS
VUUpOworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2F1dGgtdGVz
dC5odG1sIikuZGF0YSgpKTsKKyAgICBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVl
c3QgPSB0ZXN0LT53YWl0Rm9yQXV0aGVudGljYXRpb25SZXF1ZXN0KCk7CisgICAgZ19hc3NlcnQo
IXdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9wcm9wb3NlZF9jcmVkZW50aWFsKHJl
cXVlc3QpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfY2Fu
X3NhdmVfY3JlZGVudGlhbHMocmVxdWVzdCkpOworCisgICAgLy8gSWYgV2ViS2l0IGhhcyBiZWVu
IGNvbXBpbGVkIHdpdGggbGlic2VjcmV0LCBhbmQgcHJpdmF0ZSBicm93c2luZyBpcyBkaXNhYmxl
ZAorICAgIC8vIHRoZW4gY2hlY2sgdGhhdCBjcmVkZW50aWFscyBjYW4gYmUgc2F2ZWQuCisjaWYg
RU5BQkxFKENSRURFTlRJQUxfU1RPUkFHRSkKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJs
ZV9wcml2YXRlX2Jyb3dzaW5nKHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3ModGVzdC0+bV93
ZWJWaWV3KSwgRkFMU0UpOworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0
aCgiL2F1dGgtdGVzdC5odG1sIikuZGF0YSgpKTsKKyAgICByZXF1ZXN0ID0gdGVzdC0+d2FpdEZv
ckF1dGhlbnRpY2F0aW9uUmVxdWVzdCgpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYXV0aGVudGlj
YXRpb25fcmVxdWVzdF9nZXRfcHJvcG9zZWRfY3JlZGVudGlhbChyZXF1ZXN0KSk7CisgICAgZ19h
c3NlcnQod2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfY2FuX3NhdmVfY3JlZGVudGlhbHMo
cmVxdWVzdCkpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3QXV0aGVudGlj
YXRpb25TdWNjZXNzKEF1dGhlbnRpY2F0aW9uVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sK
KyAgICAvLyBUZXN0IGNvcnJlY3QgYXV0aGVudGljYXRpb24uCisgICAgdGVzdC0+bG9hZFVSSShr
U2VydmVyLT5nZXRVUklGb3JQYXRoKCIvYXV0aC10ZXN0Lmh0bWwiKS5kYXRhKCkpOworICAgIFdl
YktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCA9IHRlc3QtPndhaXRGb3JBdXRoZW50
aWNhdGlvblJlcXVlc3QoKTsKKyAgICBXZWJLaXRDcmVkZW50aWFsKiBjcmVkZW50aWFsID0gd2Vi
a2l0X2NyZWRlbnRpYWxfbmV3KGF1dGhUZXN0VXNlcm5hbWUsIGF1dGhUZXN0UGFzc3dvcmQsIFdF
QktJVF9DUkVERU5USUFMX1BFUlNJU1RFTkNFX0ZPUl9TRVNTSU9OKTsKKyAgICB3ZWJraXRfYXV0
aGVudGljYXRpb25fcmVxdWVzdF9hdXRoZW50aWNhdGUocmVxdWVzdCwgY3JlZGVudGlhbCk7Cisg
ICAgd2Via2l0X2NyZWRlbnRpYWxfZnJlZShjcmVkZW50aWFsKTsKKyAgICB0ZXN0LT53YWl0VW50
aWxMb2FkRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVu
dHMuc2l6ZSgpLCA9PSwgMyk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50
c1swXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOworICAg
IGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdU
ZXN0OjpMb2FkQ29tbWl0dGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZl
bnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dldF90aXRsZSh0ZXN0LT5tX3dlYlZpZXcpLCA9PSwg
YXV0aEV4cGVjdGVkU3VjY2Vzc1RpdGxlKTsKKworICAgIC8vIFRlc3QgbG9hZGluZyB0aGUgc2Ft
ZSAoYXV0aG9yaXplZCkgcGFnZSBhZ2Fpbi4KKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdl
dFVSSUZvclBhdGgoIi9hdXRoLXRlc3QuaHRtbCIpLmRhdGEoKSk7CisgICAgLy8gVGhlcmUgaXMg
bm8gYXV0aGVudGljYXRpb24gY2hhbGxlbmdlLgorICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5p
c2hlZCgpOworCisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50cy5zaXplKCks
ID09LCAzKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzBdLCA9PSwg
TG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7CisgICAgZ19hc3NlcnRf
Y21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRD
b21taXR0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMl0sID09
LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3
ZWJraXRfd2ViX3ZpZXdfZ2V0X3RpdGxlKHRlc3QtPm1fd2ViVmlldyksID09LCBhdXRoRXhwZWN0
ZWRTdWNjZXNzVGl0bGUpOworfQorCitzdGF0aWMgdm9pZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2Vy
dmVyKiwgU291cE1lc3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUq
LCBTb3VwQ2xpZW50Q29udGV4dCosIHZvaWQqKQoreworICAgIGlmIChtZXNzYWdlLT5tZXRob2Qg
IT0gU09VUF9NRVRIT0RfR0VUKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1l
c3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoIXN0cmNtcChwYXRoLCAiL2F1dGgtdGVzdC5odG1sIikpIHsKKyAgICAg
ICAgY29uc3QgY2hhciogYXV0aG9yaXphdGlvbiA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9v
bmUobWVzc2FnZS0+cmVxdWVzdF9oZWFkZXJzLCAiQXV0aG9yaXphdGlvbiIpOworICAgICAgICAv
LyBSZXF1aXJlIGF1dGhlbnRpY2F0aW9uLgorICAgICAgICBpZiAoIWdfc3RyY21wMChhdXRob3Jp
emF0aW9uLCBhdXRoRXhwZWN0ZWRBdXRob3JpemF0aW9uKSkgeworICAgICAgICAgICAgLy8gU3Vj
Y2Vzc2Z1bCBhdXRoZW50aWNhdGlvbi4KKyAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3Rh
dHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKKyAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9i
b2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGF1
dGhTdWNjZXNzSFRNTFN0cmluZywgc3RybGVuKGF1dGhTdWNjZXNzSFRNTFN0cmluZykpOworICAg
ICAgICAgICAgQXV0aGVudGljYXRpb25UZXN0OjphdXRoZW50aWNhdGlvblJldHJpZXMgPSAwOwor
ICAgICAgICB9IGVsc2UgaWYgKCsrQXV0aGVudGljYXRpb25UZXN0OjphdXRoZW50aWNhdGlvblJl
dHJpZXMgPCAzKSB7CisgICAgICAgICAgICAvLyBObyBvciBpbnZhbGlkIGF1dGhvcml6YXRpb24g
aGVhZGVyIHByb3ZpZGVkIGJ5IHRoZSBjbGllbnQsIHJlcXVlc3QgYXV0aGVudGljYXRpb24gdHdp
Y2UgdGhlbiBmYWlsLgorICAgICAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2Fn
ZSwgU09VUF9TVEFUVVNfVU5BVVRIT1JJWkVEKTsKKyAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9o
ZWFkZXJzX2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiV1dXLUF1dGhlbnRpY2F0
ZSIsICJCYXNpYyByZWFsbT1cIm15IHJlYWxtXCIiKTsKKyAgICAgICAgICAgIC8vIEluY2x1ZGUg
YSBmYWlsdXJlIG1lc3NhZ2UgaW4gY2FzZSB0aGUgdXNlciBhdHRlbXB0cyB0byBwcm9jZWVkIHdp
dGhvdXQgYXV0aGVudGljYXRpb24uCisgICAgICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBl
bmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBhdXRoRmFpbHVy
ZUhUTUxTdHJpbmcsIHN0cmxlbihhdXRoRmFpbHVyZUhUTUxTdHJpbmcpKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIC8vIEF1dGhlbnRpY2F0aW9uIG5vdCBzdWNjZXNzZnVsLCBkaXNw
bGF5IGEgIjQwMSBBdXRob3JpemF0aW9uIFJlcXVpcmVkIiBwYWdlLgorICAgICAgICAgICAgc291
cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOworICAgICAgICAg
ICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBf
TUVNT1JZX1NUQVRJQywgYXV0aEZhaWx1cmVIVE1MU3RyaW5nLCBzdHJsZW4oYXV0aEZhaWx1cmVI
VE1MU3RyaW5nKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgc291cF9tZXNzYWdl
X3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0ZPVU5EKTsKKworICAgIHNvdXBf
bWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOworfQorCit2b2lk
IGJlZm9yZUFsbCgpCit7CisgICAga1NlcnZlciA9IG5ldyBXZWJLaXRUZXN0U2VydmVyKCk7Cisg
ICAga1NlcnZlci0+cnVuKHNlcnZlckNhbGxiYWNrKTsKKworICAgIEF1dGhlbnRpY2F0aW9uVGVz
dDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImF1dGhlbnRpY2F0aW9uLXJlcXVlc3QiLCB0ZXN0V2Vi
Vmlld0F1dGhlbnRpY2F0aW9uUmVxdWVzdCk7CisgICAgQXV0aGVudGljYXRpb25UZXN0OjphZGQo
IldlYktpdFdlYlZpZXciLCAiYXV0aGVudGljYXRpb24tY2FuY2VsIiwgdGVzdFdlYlZpZXdBdXRo
ZW50aWNhdGlvbkNhbmNlbCk7CisgICAgQXV0aGVudGljYXRpb25UZXN0OjphZGQoIldlYktpdFdl
YlZpZXciLCAiYXV0aGVudGljYXRpb24tbG9hZC1jYW5jZWxsZWQiLCB0ZXN0V2ViVmlld0F1dGhl
bnRpY2F0aW9uTG9hZENhbmNlbGxlZCk7CisgICAgQXV0aGVudGljYXRpb25UZXN0OjphZGQoIldl
YktpdFdlYlZpZXciLCAiYXV0aGVudGljYXRpb24tZmFpbHVyZSIsIHRlc3RXZWJWaWV3QXV0aGVu
dGljYXRpb25GYWlsdXJlKTsKKyAgICBBdXRoZW50aWNhdGlvblRlc3Q6OmFkZCgiV2ViS2l0V2Vi
VmlldyIsICJhdXRoZW50aWNhdGlvbi1uby1jcmVkZW50aWFsIiwgdGVzdFdlYlZpZXdBdXRoZW50
aWNhdGlvbk5vQ3JlZGVudGlhbCk7CisgICAgQXV0aGVudGljYXRpb25UZXN0OjphZGQoIldlYktp
dFdlYlZpZXciLCAiYXV0aGVudGljYXRpb24tc3RvcmFnZSIsIHRlc3RXZWJWaWV3QXV0aGVudGlj
YXRpb25TdG9yYWdlKTsKKyAgICAvLyBUZXN0aW5nIGF1dGhlbnRpY2F0aW9uIHN1Y2Nlc3MgbXVz
dCBiZSBkb25lIGxhc3QgYmVjYXVzZSBsaWJzb3VwIHdpbGwgbmV2ZXIgZmlyZQorICAgIC8vIHRo
ZSBhdXRoZW50aWNhdGUgc2lnbmFsIGFnYWluIG9uY2UgYXV0aGVudGljYXRpb24gaXMgc3VjY2Vz
c2Z1bC4KKyAgICBBdXRoZW50aWNhdGlvblRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJhdXRo
ZW50aWNhdGlvbi1zdWNjZXNzIiwgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvblN1Y2Nlc3MpOwor
fQorCit2b2lkIGFmdGVyQWxsKCkKK3sKKyAgICBkZWxldGUga1NlcnZlcjsKK30KZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0QmFja0ZvcndhcmRM
aXN0LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0QmFja0Zv
cndhcmRMaXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDc5MzY2
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3Rr
L1Rlc3RCYWNrRm9yd2FyZExpc3QuY3BwCkBAIC0wLDAgKzEsMjgwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUg
IldlYktpdFRlc3RTZXJ2ZXIuaCIKKyNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgorI2luY2x1ZGUg
PGd0ay9ndGsuaD4KKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKyNpbmNsdWRlIDxzdHJpbmcu
aD4KKyNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdDIuaD4KKworLy8gQmFjayBmb3J3YXJkIGxpc3Qg
bGltaXQgaXMgMTAwIGJ5IGRlZmF1bHQuCitzdGF0aWMgY29uc3QgaW50IGtCYWNrRm9yd2FyZExp
c3RMaW1pdCA9IDEwMDsKKworc3RhdGljIFdlYktpdFRlc3RTZXJ2ZXIqIGtTZXJ2ZXI7CisKK3N0
YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2Uq
IG1zZywgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSogcXVlcnksIFNvdXBDbGllbnRDb250
ZXh0KiBjb250ZXh0LCBncG9pbnRlciBkYXRhKQoreworICAgIGlmIChtc2ctPm1ldGhvZCAhPSBT
T1VQX01FVEhPRF9HRVQpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobXNnLCBT
T1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGdfc3RyX2hhc19zdWZmaXgocGF0aCwgImZhdmljb24uaWNvIikpIHsKKyAgICAgICAg
c291cF9tZXNzYWdlX3NldF9zdGF0dXMobXNnLCBTT1VQX1NUQVRVU19OT1RfRk9VTkQpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobXNnLCBT
T1VQX1NUQVRVU19PSyk7CisKKyAgICBjaGFyKiBib2R5ID0gZ19zdHJkdXBfcHJpbnRmKCI8aHRt
bD48dGl0bGU+JXM8L3RpdGxlPjxib2R5PiVzPC9ib2R5PjwvaHRtbD4iLCBwYXRoICsgMSwgcGF0
aCArIDEpOworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtc2ctPnJlc3BvbnNlX2JvZHks
IFNPVVBfTUVNT1JZX1RBS0UsIGJvZHksIHN0cmxlbihib2R5KSk7CisKKyAgICBzb3VwX21lc3Nh
Z2VfYm9keV9jb21wbGV0ZShtc2ctPnJlc3BvbnNlX2JvZHkpOworfQorCitjbGFzcyBCYWNrRm9y
d2FyZExpc3RUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJ
Ql9URVNUX0ZJWFRVUkUoQmFja0ZvcndhcmRMaXN0VGVzdCk7CisKKyAgICBlbnVtIHsKKyAgICAg
ICAgQmFja3dhcmQsCisgICAgICAgIEZvcndhcmQKKyAgICB9OworCisgICAgZW51bSB7CisgICAg
ICAgIEN1cnJlbnRJdGVtICA9IDEgPDwgMCwKKyAgICAgICAgQWRkZWRJdGVtICAgID0gMSA8PCAx
LAorICAgICAgICBSZW1vdmVkSXRlbXMgPSAxIDw8IDIKKyAgICB9OworCisgICAgc3RhdGljIHZv
aWQgY2hlY2tJdGVtKFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW0sIGNvbnN0IGNoYXIq
IHRpdGxlLCBjb25zdCBjaGFyKiB1cmksIGNvbnN0IGNoYXIqIG9yaWdpbmFsVVJJKQorICAgIHsK
KyAgICAgICAgZ19hc3NlcnQoaXRlbSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRf
YmFja19mb3J3YXJkX2xpc3RfaXRlbV9nZXRfdXJpKGl0ZW0pLCA9PSwgdXJpKTsKKyAgICAgICAg
Z19hc3NlcnRfY21wc3RyKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dldF90aXRsZShp
dGVtKSwgPT0gLCB0aXRsZSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfYmFja19m
b3J3YXJkX2xpc3RfaXRlbV9nZXRfb3JpZ2luYWxfdXJpKGl0ZW0pLCA9PSwgb3JpZ2luYWxVUkkp
OworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGNoZWNrSXRlbUluZGV4KFdlYktpdEJhY2tGb3J3
YXJkTGlzdCogbGlzdCkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9iYWNrX2Zvcndh
cmRfbGlzdF9nZXRfbnRoX2l0ZW0obGlzdCwgLTEpID09IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlz
dF9nZXRfYmFja19pdGVtKGxpc3QpKTsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X2JhY2tfZm9y
d2FyZF9saXN0X2dldF9udGhfaXRlbShsaXN0LCAwKSA9PSB3ZWJraXRfYmFja19mb3J3YXJkX2xp
c3RfZ2V0X2N1cnJlbnRfaXRlbShsaXN0KSk7CisgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9iYWNr
X2ZvcndhcmRfbGlzdF9nZXRfbnRoX2l0ZW0obGlzdCwgMSkgPT0gd2Via2l0X2JhY2tfZm9yd2Fy
ZF9saXN0X2dldF9mb3J3YXJkX2l0ZW0obGlzdCkpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lk
IGNoZWNrTGlzdChXZWJLaXRCYWNrRm9yd2FyZExpc3QqIGxpc3QsIHVuc2lnbmVkIHR5cGUsIFdl
YktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qKiBpdGVtcywgdW5zaWduZWQgbkl0ZW1zKQorICAgIHsK
KyAgICAgICAgR0xpc3QqIGxpc3RJdGVtcyA9IHR5cGUgPT0gQmFja0ZvcndhcmRMaXN0VGVzdDo6
QmFja3dhcmQgPyB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGlzdChsaXN0KSA6
CisgICAgICAgICAgICB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlzdChs
aXN0KTsKKyAgICAgICAgZ19hc3NlcnQobGlzdEl0ZW1zKTsKKworICAgICAgICB1bnNpZ25lZCBp
ID0gMDsKKyAgICAgICAgZm9yIChHTGlzdCogbGlzdEl0ZW0gPSBsaXN0SXRlbXM7IGxpc3RJdGVt
OyBsaXN0SXRlbSA9IGdfbGlzdF9uZXh0KGxpc3RJdGVtKSwgaSsrKSB7CisgICAgICAgICAgICBn
X2Fzc2VydF9jbXB1aW50KGksIDwsIG5JdGVtcyk7CisgICAgICAgICAgICBnX2Fzc2VydChsaXN0
SXRlbS0+ZGF0YSA9PSBpdGVtc1tpXSk7CisgICAgICAgIH0KKyAgICAgICAgZ19saXN0X2ZyZWUo
bGlzdEl0ZW1zKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBiYWNrRm9yd2FyZExpc3RDaGFu
Z2VkKFdlYktpdEJhY2tGb3J3YXJkTGlzdCogbGlzdCwgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRl
bSogYWRkZWRJdGVtLCBHTGlzdCogcmVtb3ZlZEl0ZW1zLCBCYWNrRm9yd2FyZExpc3RUZXN0KiB0
ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+bV9oYXNDaGFuZ2VkID0gdHJ1ZTsKKworICAgICAg
ICBpZiAodGVzdC0+bV9jaGFuZ2VkRmxhZ3MgJiBCYWNrRm9yd2FyZExpc3RUZXN0OjpBZGRlZEl0
ZW0pIHsKKyAgICAgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19CQUNLX0ZPUldBUkRfTElTVF9J
VEVNKGFkZGVkSXRlbSkpOworICAgICAgICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVk
V2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChhZGRlZEl0ZW0pKTsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICBnX2Fzc2VydCghYWRkZWRJdGVtKTsKKworICAgICAgICBpZiAodGVzdC0+bV9j
aGFuZ2VkRmxhZ3MgJiBCYWNrRm9yd2FyZExpc3RUZXN0OjpSZW1vdmVkSXRlbXMpIHsKKyAgICAg
ICAgICAgIGdfYXNzZXJ0KHJlbW92ZWRJdGVtcyk7CisgICAgICAgICAgICBmb3IgKEdMaXN0KiBp
dGVyID0gcmVtb3ZlZEl0ZW1zOyBpdGVyOyBpdGVyID0gaXRlci0+bmV4dCkgeworICAgICAgICAg
ICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19CQUNLX0ZPUldBUkRfTElTVF9JVEVNKGl0ZXItPmRh
dGEpKTsKKyAgICAgICAgICAgICAgICBpZiAodGVzdC0+bV9leHBlY3RlZFJlbW92ZWRJdGVtcykK
KyAgICAgICAgICAgICAgICAgICAgZ19hc3NlcnQoZ19saXN0X2ZpbmQodGVzdC0+bV9leHBlY3Rl
ZFJlbW92ZWRJdGVtcywgaXRlci0+ZGF0YSkpOworICAgICAgICAgICAgfQorCisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgZ19hc3NlcnQoIXJlbW92ZWRJdGVtcyk7CisgICAgfQorCisgICAg
QmFja0ZvcndhcmRMaXN0VGVzdCgpCisgICAgICAgIDogbV9saXN0KHdlYmtpdF93ZWJfdmlld19n
ZXRfYmFja19mb3J3YXJkX2xpc3QobV93ZWJWaWV3KSkKKyAgICAgICAgLCBtX2NoYW5nZWRGbGFn
cygwKQorICAgICAgICAsIG1faGFzQ2hhbmdlZChmYWxzZSkKKyAgICAgICAgLCBtX2V4cGVjdGVk
UmVtb3ZlZEl0ZW1zKDApCisgICAgeworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fbGlzdCwg
ImNoYW5nZWQiLCBHX0NBTExCQUNLKGJhY2tGb3J3YXJkTGlzdENoYW5nZWQpLCB0aGlzKTsKKyAg
ICAgICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChtX2xp
c3QpKTsKKyAgICB9CisKKyAgICB+QmFja0ZvcndhcmRMaXN0VGVzdCgpCisgICAgeworICAgICAg
ICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9saXN0LCBHX1NJR05BTF9N
QVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKKyAgICB9CisKKyAgICB2b2lkIHdhaXRVbnRp
bExvYWRGaW5pc2hlZCgpCisgICAgeworICAgICAgICBtX2hhc0NoYW5nZWQgPSBmYWxzZTsKKyAg
ICAgICAgV2ViVmlld1Rlc3Q6OndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgICAgICBnX2Fz
c2VydChtX2hhc0NoYW5nZWQpOworICAgIH0KKworICAgIHZvaWQgd2FpdFVudGlsTG9hZEZpbmlz
aGVkQW5kQ2hlY2tSZW1vdmVkSXRlbXMoR0xpc3QqIHJlbW92ZWRJdGVtcykKKyAgICB7CisgICAg
ICAgIG1fZXhwZWN0ZWRSZW1vdmVkSXRlbXMgPSByZW1vdmVkSXRlbXM7CisgICAgICAgIHdhaXRV
bnRpbExvYWRGaW5pc2hlZCgpOworICAgICAgICBtX2V4cGVjdGVkUmVtb3ZlZEl0ZW1zID0gMDsK
KyAgICB9CisKKyAgICBXZWJLaXRCYWNrRm9yd2FyZExpc3QqIG1fbGlzdDsKKyAgICB1bnNpZ25l
ZCBsb25nIG1fY2hhbmdlZEZsYWdzOworICAgIGJvb2wgbV9oYXNDaGFuZ2VkOworICAgIEdMaXN0
KiBtX2V4cGVjdGVkUmVtb3ZlZEl0ZW1zOworfTsKKworc3RhdGljIHZvaWQgdGVzdEJhY2tGb3J3
YXJkTGlzdE5hdmlnYXRpb24oQmFja0ZvcndhcmRMaXN0VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRl
cikKK3sKKyAgICBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiBpdGVtc1sxXTsKKworICAgIGdf
YXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2sodGVzdC0+bV93ZWJWaWV3KSk7Cisg
ICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh0ZXN0LT5tX3dlYlZp
ZXcpKTsKKworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dl
dF9sZW5ndGgodGVzdC0+bV9saXN0KSwgPT0sIDApOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFj
a19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh0ZXN0LT5tX2xpc3QpKTsKKyAgICBnX2Fz
c2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2l0ZW0odGVzdC0+bV9saXN0
KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9p
dGVtKHRlc3QtPm1fbGlzdCkpOworICAgIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OmNoZWNrSXRlbUlu
ZGV4KHRlc3QtPm1fbGlzdCk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlz
dF9nZXRfYmFja19saXN0KHRlc3QtPm1fbGlzdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFj
a19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlzdCh0ZXN0LT5tX2xpc3QpKTsKKworICAgIENT
dHJpbmcgdXJpUGFnZTEgPSBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvUGFnZTEiKTsKKyAgICB0
ZXN0LT5tX2NoYW5nZWRGbGFncyA9IEJhY2tGb3J3YXJkTGlzdFRlc3Q6OkN1cnJlbnRJdGVtIHwg
QmFja0ZvcndhcmRMaXN0VGVzdDo6QWRkZWRJdGVtOworICAgIHRlc3QtPmxvYWRVUkkodXJpUGFn
ZTEuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIGdf
YXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2sodGVzdC0+bV93ZWJWaWV3KSk7Cisg
ICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh0ZXN0LT5tX3dlYlZp
ZXcpKTsKKworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dl
dF9sZW5ndGgodGVzdC0+bV9saXN0KSwgPT0sIDEpOworICAgIFdlYktpdEJhY2tGb3J3YXJkTGlz
dEl0ZW0qIGl0ZW1QYWdlMSA9IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9p
dGVtKHRlc3QtPm1fbGlzdCk7CisgICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tJdGVtKGl0
ZW1QYWdlMSwgIlBhZ2UxIiwgdXJpUGFnZTEuZGF0YSgpLCB1cmlQYWdlMS5kYXRhKCkpOworICAg
IGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfaXRlbSh0ZXN0LT5t
X2xpc3QpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3
YXJkX2l0ZW0odGVzdC0+bV9saXN0KSk7CisgICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tJ
dGVtSW5kZXgodGVzdC0+bV9saXN0KTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2Fy
ZF9saXN0X2dldF9iYWNrX2xpc3QodGVzdC0+bV9saXN0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtp
dF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0KHRlc3QtPm1fbGlzdCkpOworCisg
ICAgQ1N0cmluZyB1cmlQYWdlMiA9IGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9QYWdlMiIpOwor
ICAgIHRlc3QtPm1fY2hhbmdlZEZsYWdzID0gQmFja0ZvcndhcmRMaXN0VGVzdDo6Q3VycmVudEl0
ZW0gfCBCYWNrRm9yd2FyZExpc3RUZXN0OjpBZGRlZEl0ZW07CisgICAgdGVzdC0+bG9hZFVSSSh1
cmlQYWdlMi5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisg
ICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrKHRlc3QtPm1fd2ViVmlldykp
OworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQodGVzdC0+bV93
ZWJWaWV3KSk7CisKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlz
dF9nZXRfbGVuZ3RoKHRlc3QtPm1fbGlzdCksID09LCAyKTsKKyAgICBXZWJLaXRCYWNrRm9yd2Fy
ZExpc3RJdGVtKiBpdGVtUGFnZTIgPSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJl
bnRfaXRlbSh0ZXN0LT5tX2xpc3QpOworICAgIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OmNoZWNrSXRl
bShpdGVtUGFnZTIsICJQYWdlMiIsIHVyaVBhZ2UyLmRhdGEoKSwgdXJpUGFnZTIuZGF0YSgpKTsK
KyAgICBnX2Fzc2VydCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfaXRlbSh0ZXN0
LT5tX2xpc3QpID09IGl0ZW1QYWdlMSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNrX2Zvcndh
cmRfbGlzdF9nZXRfZm9yd2FyZF9pdGVtKHRlc3QtPm1fbGlzdCkpOworICAgIEJhY2tGb3J3YXJk
TGlzdFRlc3Q6OmNoZWNrSXRlbUluZGV4KHRlc3QtPm1fbGlzdCk7CisgICAgaXRlbXNbMF0gPSBp
dGVtUGFnZTE7CisgICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tMaXN0KHRlc3QtPm1fbGlz
dCwgQmFja0ZvcndhcmRMaXN0VGVzdDo6QmFja3dhcmQsIGl0ZW1zLCAxKTsKKyAgICBnX2Fzc2Vy
dCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xpc3QodGVzdC0+bV9saXN0
KSk7CisKKyAgICB0ZXN0LT5tX2NoYW5nZWRGbGFncyA9IEJhY2tGb3J3YXJkTGlzdFRlc3Q6OkN1
cnJlbnRJdGVtOworICAgIHRlc3QtPmdvQmFjaygpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRG
aW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayh0
ZXN0LT5tX3dlYlZpZXcpKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2Zv
cndhcmQodGVzdC0+bV93ZWJWaWV3KSk7CisKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9i
YWNrX2ZvcndhcmRfbGlzdF9nZXRfbGVuZ3RoKHRlc3QtPm1fbGlzdCksID09LCAyKTsKKyAgICBn
X2Fzc2VydChpdGVtUGFnZTEgPT0gd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50
X2l0ZW0odGVzdC0+bV9saXN0KSk7CisgICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tJdGVt
KHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKHRlc3QtPm1fbGlzdCks
ICJQYWdlMSIsIHVyaVBhZ2UxLmRhdGEoKSwgdXJpUGFnZTEuZGF0YSgpKTsKKyAgICBnX2Fzc2Vy
dCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2l0ZW0odGVzdC0+bV9saXN0KSk7
CisgICAgZ19hc3NlcnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2l0ZW0o
dGVzdC0+bV9saXN0KSA9PSBpdGVtUGFnZTIpOworICAgIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OmNo
ZWNrSXRlbUluZGV4KHRlc3QtPm1fbGlzdCk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNrX2Zv
cndhcmRfbGlzdF9nZXRfYmFja19saXN0KHRlc3QtPm1fbGlzdCkpOworICAgIGl0ZW1zWzBdID0g
aXRlbVBhZ2UyOworICAgIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OmNoZWNrTGlzdCh0ZXN0LT5tX2xp
c3QsIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OkZvcndhcmQsIGl0ZW1zLCAxKTsKKworICAgIHRlc3Qt
Pm1fY2hhbmdlZEZsYWdzID0gQmFja0ZvcndhcmRMaXN0VGVzdDo6Q3VycmVudEl0ZW07CisgICAg
dGVzdC0+Z29Gb3J3YXJkKCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisK
KyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2sodGVzdC0+bV93ZWJWaWV3
KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh0ZXN0LT5t
X3dlYlZpZXcpKTsKKworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2JhY2tfZm9yd2FyZF9s
aXN0X2dldF9sZW5ndGgodGVzdC0+bV9saXN0KSwgPT0sIDIpOworICAgIGdfYXNzZXJ0KGl0ZW1Q
YWdlMiA9PSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh0ZXN0LT5t
X2xpc3QpKTsKKyAgICBCYWNrRm9yd2FyZExpc3RUZXN0OjpjaGVja0l0ZW0od2Via2l0X2JhY2tf
Zm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0odGVzdC0+bV9saXN0KSwgIlBhZ2UyIiwgdXJp
UGFnZTIuZGF0YSgpLCB1cmlQYWdlMi5kYXRhKCkpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9iYWNr
X2ZvcndhcmRfbGlzdF9nZXRfYmFja19pdGVtKHRlc3QtPm1fbGlzdCkgPT0gaXRlbVBhZ2UxKTsK
KyAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2l0ZW0o
dGVzdC0+bV9saXN0KSk7CisgICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tJdGVtSW5kZXgo
dGVzdC0+bV9saXN0KTsKKyAgICBpdGVtc1swXSA9IGl0ZW1QYWdlMTsKKyAgICBCYWNrRm9yd2Fy
ZExpc3RUZXN0OjpjaGVja0xpc3QodGVzdC0+bV9saXN0LCBCYWNrRm9yd2FyZExpc3RUZXN0OjpC
YWNrd2FyZCwgaXRlbXMsIDEpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xp
c3RfZ2V0X2ZvcndhcmRfbGlzdCh0ZXN0LT5tX2xpc3QpKTsKKworICAgIHRlc3QtPm1fY2hhbmdl
ZEZsYWdzID0gQmFja0ZvcndhcmRMaXN0VGVzdDo6Q3VycmVudEl0ZW07CisgICAgdGVzdC0+Z29U
b0JhY2tGb3J3YXJkTGlzdEl0ZW0oaXRlbVBhZ2UxKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2Fk
RmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KGl0ZW1QYWdlMSA9PSB3ZWJraXRfYmFja19mb3J3
YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh0ZXN0LT5tX2xpc3QpKTsKK30KKworc3RhdGljIHZv
aWQgdGVzdEJhY2tGb3J3YXJkTGlzdExpbWl0QW5kQ2FjaGUoQmFja0ZvcndhcmRMaXN0VGVzdCog
dGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGtCYWNrRm9y
d2FyZExpc3RMaW1pdDsgaSsrKSB7CisgICAgICAgIEdPd25QdHI8Y2hhcj4gcGF0aChnX3N0cmR1
cF9wcmludGYoIi9QYWdlJWQiLCBpKSk7CisgICAgICAgIHRlc3QtPm1fY2hhbmdlZEZsYWdzID0g
QmFja0ZvcndhcmRMaXN0VGVzdDo6Q3VycmVudEl0ZW0gfCBCYWNrRm9yd2FyZExpc3RUZXN0OjpB
ZGRlZEl0ZW07CisgICAgICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aChw
YXRoLmdldCgpKS5kYXRhKCkpOworICAgICAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQo
KTsKKyAgICB9CisKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlz
dF9nZXRfbGVuZ3RoKHRlc3QtPm1fbGlzdCksID09LCBrQmFja0ZvcndhcmRMaXN0TGltaXQpOwor
ICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW1QYWdlRmlyc3QgPSB3ZWJraXRfYmFj
a19mb3J3YXJkX2xpc3RfZ2V0X250aF9pdGVtKHRlc3QtPm1fbGlzdCwgLShrQmFja0ZvcndhcmRM
aXN0TGltaXQgLSAxKSk7CisgICAgR093blB0cjxHTGlzdD4gcmVtb3ZlZEl0ZW1zKGdfbGlzdF9w
cmVwZW5kKDAsIGl0ZW1QYWdlRmlyc3QpKTsKKworICAgIEdPd25QdHI8Y2hhcj4gcGF0aChnX3N0
cmR1cF9wcmludGYoIi9QYWdlJWQiLCBrQmFja0ZvcndhcmRMaXN0TGltaXQpKTsKKyAgICB0ZXN0
LT5tX2NoYW5nZWRGbGFncyA9IEJhY2tGb3J3YXJkTGlzdFRlc3Q6OkN1cnJlbnRJdGVtIHwgQmFj
a0ZvcndhcmRMaXN0VGVzdDo6QWRkZWRJdGVtIHwgQmFja0ZvcndhcmRMaXN0VGVzdDo6UmVtb3Zl
ZEl0ZW1zOworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aChwYXRoLmdl
dCgpKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZEFuZENoZWNrUmVt
b3ZlZEl0ZW1zKHJlbW92ZWRJdGVtcy5nZXQoKSk7CisKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdl
YmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbGVuZ3RoKHRlc3QtPm1fbGlzdCksID09LCBrQmFj
a0ZvcndhcmRMaXN0TGltaXQpOworfQorCit2b2lkIGJlZm9yZUFsbCgpCit7CisgICAga1NlcnZl
ciA9IG5ldyBXZWJLaXRUZXN0U2VydmVyKCk7CisgICAga1NlcnZlci0+cnVuKHNlcnZlckNhbGxi
YWNrKTsKKworICAgIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OmFkZCgiQmFja0ZvcndhcmRMaXN0Iiwg
Im5hdmlnYXRpb24iLCB0ZXN0QmFja0ZvcndhcmRMaXN0TmF2aWdhdGlvbik7CisgICAgQmFja0Zv
cndhcmRMaXN0VGVzdDo6YWRkKCJCYWNrRm9yd2FyZExpc3QiLCAibGlzdC1saW1pdC1hbmQtY2Fj
aGUiLCB0ZXN0QmFja0ZvcndhcmRMaXN0TGltaXRBbmRDYWNoZSk7Cit9CisKK3ZvaWQgYWZ0ZXJB
bGwoKQoreworICAgIGRlbGV0ZSBrU2VydmVyOworfQorCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdENvbnRleHRNZW51LmNwcCBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0Q29udGV4dE1lbnUuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyMzI5YjkKLS0tIC9kZXYvbnVsbAorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdENvbnRleHRNZW51LmNwcApA
QCAtMCwwICsxLDg2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCisjaW5jbHVkZSA8
d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCitjbGFzcyBDb250ZXh0TWVudVRlc3Q6IHB1YmxpYyBX
ZWJWaWV3VGVzdCB7CitwdWJsaWM6CisgICAgZW51bSBDb250ZXh0TWVudUl0ZW1TdGF0ZUZsYWdz
IHsKKyAgICAgICAgVmlzaWJsZSA9IDEgPDwgMCwKKyAgICAgICAgRW5hYmxlZCA9IDEgPDwgMSwK
KyAgICAgICAgQ2hlY2tlZCA9IDEgPDwgMgorICAgIH07CisKKyAgICB2b2lkIGNoZWNrQ29udGV4
dE1lbnVFdmVudChHZGtFdmVudCogZXZlbnQpCisgICAgeworICAgICAgICBnX2Fzc2VydChldmVu
dCk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChldmVudC0+dHlwZSwgPT0sIEdES19CVVRUT05f
UFJFU1MpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnQtPmJ1dHRvbi5idXR0b24sID09
LCAzKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGV2ZW50LT5idXR0b24ueCwgPT0sIG1fbWVu
dVBvc2l0aW9uWCk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChldmVudC0+YnV0dG9uLnksID09
LCBtX21lbnVQb3NpdGlvblkpOworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBjb250ZXh0
TWVudUNhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdENvbnRleHRNZW51KiBj
b250ZXh0TWVudSwgR2RrRXZlbnQqIGV2ZW50LCBXZWJLaXRIaXRUZXN0UmVzdWx0KiBoaXRUZXN0
UmVzdWx0LCBDb250ZXh0TWVudVRlc3QqIHRlc3QpCisgICAgeworICAgICAgICBnX2Fzc2VydChX
RUJLSVRfSVNfQ09OVEVYVF9NRU5VKGNvbnRleHRNZW51KSk7CisgICAgICAgIHRlc3QtPmFzc2Vy
dE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QoY29udGV4dE1lbnUpKTsK
KyAgICAgICAgdGVzdC0+Y2hlY2tDb250ZXh0TWVudUV2ZW50KGV2ZW50KTsKKyAgICAgICAgZ19h
c3NlcnQoV0VCS0lUX0lTX0hJVF9URVNUX1JFU1VMVChoaXRUZXN0UmVzdWx0KSk7CisgICAgICAg
IHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QoaGl0
VGVzdFJlc3VsdCkpOworCisgICAgICAgIHJldHVybiB0ZXN0LT5jb250ZXh0TWVudShjb250ZXh0
TWVudSwgZXZlbnQsIGhpdFRlc3RSZXN1bHQpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGNv
bnRleHRNZW51RGlzbWlzc2VkQ2FsbGJhY2soV2ViS2l0V2ViVmlldyosIENvbnRleHRNZW51VGVz
dCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPmNvbnRleHRNZW51RGlzbWlzc2VkKCk7Cisg
ICAgfQorCisgICAgQ29udGV4dE1lbnVUZXN0KCkKKyAgICAgICAgOiBtX21lbnVQb3NpdGlvblgo
MCkKKyAgICAgICAgLCBtX21lbnVQb3NpdGlvblkoMCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFs
X2Nvbm5lY3QobV93ZWJWaWV3LCAiY29udGV4dC1tZW51IiwgR19DQUxMQkFDSyhjb250ZXh0TWVu
dUNhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAi
Y29udGV4dC1tZW51LWRpc21pc3NlZCIsIEdfQ0FMTEJBQ0soY29udGV4dE1lbnVEaXNtaXNzZWRD
YWxsYmFjayksIHRoaXMpOworICAgIH0KKworICAgIH5Db250ZXh0TWVudVRlc3QoKQorICAgIHsK
KyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fd2ViVmlldywg
R19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7CisgICAgfQorCisgICAgdmly
dHVhbCBib29sIGNvbnRleHRNZW51KFdlYktpdENvbnRleHRNZW51KiwgR2RrRXZlbnQqLCBXZWJL
aXRIaXRUZXN0UmVzdWx0KikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGNvbnRleHRNZW51RGlz
bWlzc2VkKCkKKyAgICB7CisgICAgICAgIHF1aXRNYWluTG9vcCgpOworICAgIH0KKworICAgIEd0
a01lbnUqIGdldFBvcHVwTWVudSgpCisgICAgeworICAgICAgICBHT3duUHRyPEdMaXN0PiB0b3Bs
ZXZlbHMoZ3RrX3dpbmRvd19saXN0X3RvcGxldmVscygpKTsKKyAgICAgICAgZm9yIChHTGlzdCog
aXRlciA9IHRvcGxldmVscy5nZXQoKTsgaXRlcjsgaXRlciA9IGdfbGlzdF9uZXh0KGl0ZXIpKSB7
CisgICAgICAgICAgICBpZiAoIUdUS19JU19XSU5ET1coaXRlci0+ZGF0YSkpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIEd0a1dpZGdldCogY2hpbGQgPSBndGtfYmlu
X2dldF9jaGlsZChHVEtfQklOKGl0ZXItPmRhdGEpKTsKKyAgICAgICAgICAgIGlmICghR1RLX0lT
X01FTlUoY2hpbGQpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBp
ZiAoZ3RrX21lbnVfZ2V0X2F0dGFjaF93aWRnZXQoR1RLX01FTlUoY2hpbGQpKSA9PSBHVEtfV0lE
R0VUKG1fd2ViVmlldykpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdUS19NRU5VKGNoaWxkKTsK
KyAgICAgICAgfQorICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisKKyAgICBib29sIHNob3VsZFNob3dJbnB1dE1ldGhvZHNNZW51KCkKKyAg
ICB7CisgICAgICAgIEd0a1NldHRpbmdzKiBzZXR0aW5ncyA9IGd0a193aWRnZXRfZ2V0X3NldHRp
bmdzKEdUS19XSURHRVQobV93ZWJWaWV3KSk7CisgICAgICAgIGlmICghc2V0dGluZ3MpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBnYm9vbGVhbiBzaG93SW5wdXRNZXRob2RN
ZW51OworICAgICAgICBnX29iamVjdF9nZXQoc2V0dGluZ3MsICJndGstc2hvdy1pbnB1dC1tZXRo
b2QtbWVudSIsICZzaG93SW5wdXRNZXRob2RNZW51LCBOVUxMKTsKKyAgICAgICAgcmV0dXJuIHNo
b3dJbnB1dE1ldGhvZE1lbnU7CisgICAgfQorCisgICAgdm9pZCBjaGVja0FjdGlvblN0YXRlKEd0
a0FjdGlvbiogYWN0aW9uLCB1bnNpZ25lZCBzdGF0ZSkKKyAgICB7CisgICAgICAgIGlmIChzdGF0
ZSAmIFZpc2libGUpCisgICAgICAgICAgICBnX2Fzc2VydChndGtfYWN0aW9uX2dldF92aXNpYmxl
KGFjdGlvbikpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBnX2Fzc2VydCghZ3RrX2FjdGlv
bl9nZXRfdmlzaWJsZShhY3Rpb24pKTsKKworICAgICAgICBpZiAoc3RhdGUgJiBFbmFibGVkKQor
ICAgICAgICAgICAgZ19hc3NlcnQoZ3RrX2FjdGlvbl9nZXRfc2Vuc2l0aXZlKGFjdGlvbikpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBnX2Fzc2VydCghZ3RrX2FjdGlvbl9nZXRfc2Vuc2l0
aXZlKGFjdGlvbikpOworCisgICAgICAgIGlmIChHVEtfSVNfVE9HR0xFX0FDVElPTihhY3Rpb24p
KSB7CisgICAgICAgICAgICBpZiAoc3RhdGUgJiBDaGVja2VkKQorICAgICAgICAgICAgICAgIGdf
YXNzZXJ0KGd0a190b2dnbGVfYWN0aW9uX2dldF9hY3RpdmUoR1RLX1RPR0dMRV9BQ1RJT04oYWN0
aW9uKSkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGdfYXNzZXJ0KCFndGtf
dG9nZ2xlX2FjdGlvbl9nZXRfYWN0aXZlKEdUS19UT0dHTEVfQUNUSU9OKGFjdGlvbikpKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIEdMaXN0KiBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlv
bkFuZEdldE5leHQoR0xpc3QqIGl0ZW1zLCBXZWJLaXRDb250ZXh0TWVudUFjdGlvbiBzdG9ja0Fj
dGlvbiwgdW5zaWduZWQgc3RhdGUpCisgICAgeworICAgICAgICBnX2Fzc2VydChpdGVtcyk7Cisg
ICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19DT05URVhUX01FTlVfSVRFTShpdGVtcy0+ZGF0YSkp
OworCisgICAgICAgIFdlYktpdENvbnRleHRNZW51SXRlbSogaXRlbSA9IFdFQktJVF9DT05URVhU
X01FTlVfSVRFTShpdGVtcy0+ZGF0YSk7CisgICAgICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdo
ZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QoaXRlbSkpOworCisgICAgICAgIEd0a0FjdGlvbiogYWN0
aW9uID0gd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9hY3Rpb24oaXRlbSk7CisgICAgICAg
IGdfYXNzZXJ0KEdUS19JU19BQ1RJT04oYWN0aW9uKSk7CisKKyAgICAgICAgZ19hc3NlcnRfY21w
aW50KHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRfc3RvY2tfYWN0aW9uKGl0ZW0pLCA9PSwg
c3RvY2tBY3Rpb24pOworCisgICAgICAgIGNoZWNrQWN0aW9uU3RhdGUoYWN0aW9uLCBzdGF0ZSk7
CisKKyAgICAgICAgcmV0dXJuIGdfbGlzdF9uZXh0KGl0ZW1zKTsKKyAgICB9CisKKyAgICBHTGlz
dCogY2hlY2tDdXJyZW50SXRlbUlzQ3VzdG9tQWN0aW9uQW5kR2V0TmV4dChHTGlzdCogaXRlbXMs
IGNvbnN0IGNoYXIqIGxhYmVsLCB1bnNpZ25lZCBzdGF0ZSkKKyAgICB7CisgICAgICAgIGdfYXNz
ZXJ0KGl0ZW1zKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX0NPTlRFWFRfTUVOVV9JVEVN
KGl0ZW1zLT5kYXRhKSk7CisKKyAgICAgICAgV2ViS2l0Q29udGV4dE1lbnVJdGVtKiBpdGVtID0g
V0VCS0lUX0NPTlRFWFRfTUVOVV9JVEVNKGl0ZW1zLT5kYXRhKTsKKyAgICAgICAgYXNzZXJ0T2Jq
ZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChpdGVtKSk7CisKKyAgICAgICAg
R3RrQWN0aW9uKiBhY3Rpb24gPSB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X2FjdGlvbihp
dGVtKTsKKyAgICAgICAgZ19hc3NlcnQoR1RLX0lTX0FDVElPTihhY3Rpb24pKTsKKworICAgICAg
ICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9zdG9ja19hY3Rp
b24oaXRlbSksID09LCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DVVNUT00pOworICAgICAg
ICBnX2Fzc2VydF9jbXBzdHIoZ3RrX2FjdGlvbl9nZXRfbGFiZWwoYWN0aW9uKSwgPT0sIGxhYmVs
KTsKKworICAgICAgICBjaGVja0FjdGlvblN0YXRlKGFjdGlvbiwgc3RhdGUpOworCisgICAgICAg
IHJldHVybiBnX2xpc3RfbmV4dChpdGVtcyk7CisgICAgfQorCisgICAgR0xpc3QqIGNoZWNrQ3Vy
cmVudEl0ZW1Jc1N1Yk1lbnVBbmRHZXROZXh0KEdMaXN0KiBpdGVtcywgY29uc3QgY2hhciogbGFi
ZWwsIHVuc2lnbmVkIHN0YXRlLCBHTGlzdCoqIHN1Yk1lbnVJdGVyKQorICAgIHsKKyAgICAgICAg
Z19hc3NlcnQoaXRlbXMpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfQ09OVEVYVF9NRU5V
X0lURU0oaXRlbXMtPmRhdGEpKTsKKworICAgICAgICBXZWJLaXRDb250ZXh0TWVudUl0ZW0qIGl0
ZW0gPSBXRUJLSVRfQ09OVEVYVF9NRU5VX0lURU0oaXRlbXMtPmRhdGEpOworICAgICAgICBhc3Nl
cnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKGl0ZW0pKTsKKworICAg
ICAgICBHdGtBY3Rpb24qIGFjdGlvbiA9IHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRfYWN0
aW9uKGl0ZW0pOworICAgICAgICBnX2Fzc2VydChHVEtfSVNfQUNUSU9OKGFjdGlvbikpOworCisg
ICAgICAgIGdfYXNzZXJ0X2NtcHN0cihndGtfYWN0aW9uX2dldF9sYWJlbChhY3Rpb24pLCA9PSwg
bGFiZWwpOworICAgICAgICBjaGVja0FjdGlvblN0YXRlKGFjdGlvbiwgc3RhdGUpOworCisgICAg
ICAgIFdlYktpdENvbnRleHRNZW51KiBzdWJNZW51ID0gd2Via2l0X2NvbnRleHRfbWVudV9pdGVt
X2dldF9zdWJtZW51KGl0ZW0pOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfQ09OVEVYVF9N
RU5VKHN1Yk1lbnUpKTsKKyAgICAgICAgaWYgKHN1Yk1lbnVJdGVyKQorICAgICAgICAgICAgKnN1
Yk1lbnVJdGVyID0gd2Via2l0X2NvbnRleHRfbWVudV9nZXRfaXRlbXMoc3ViTWVudSk7CisKKyAg
ICAgICAgcmV0dXJuIGdfbGlzdF9uZXh0KGl0ZW1zKTsKKyAgICB9CisKKyAgICBHTGlzdCogY2hl
Y2tDdXJyZW50SXRlbUlzU2VwYXJhdG9yQW5kR2V0TmV4dChHTGlzdCogaXRlbXMpCisgICAgewor
ICAgICAgICBnX2Fzc2VydChpdGVtcyk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19DT05U
RVhUX01FTlVfSVRFTShpdGVtcy0+ZGF0YSkpOworCisgICAgICAgIFdlYktpdENvbnRleHRNZW51
SXRlbSogaXRlbSA9IFdFQktJVF9DT05URVhUX01FTlVfSVRFTShpdGVtcy0+ZGF0YSk7CisgICAg
ICAgIGdfYXNzZXJ0KHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9pc19zZXBhcmF0b3IoaXRlbSkp
OworCisgICAgICAgIHJldHVybiBnX2xpc3RfbmV4dChpdGVtcyk7CisgICAgfQorCisgICAgc3Rh
dGljIGdib29sZWFuIGRvUmlnaHRDbGlja0lkbGVDYWxsYmFjayhDb250ZXh0TWVudVRlc3QqIHRl
c3QpCisgICAgeworICAgICAgICB0ZXN0LT5jbGlja01vdXNlQnV0dG9uKHRlc3QtPm1fbWVudVBv
c2l0aW9uWCwgdGVzdC0+bV9tZW51UG9zaXRpb25ZLCAzKTsKKyAgICAgICAgcmV0dXJuIEZBTFNF
OworICAgIH0KKworICAgIHZvaWQgc2hvd0NvbnRleHRNZW51QXRQb3NpdGlvbkFuZFdhaXRVbnRp
bEZpbmlzaGVkKGludCB4LCBpbnQgeSkKKyAgICB7CisgICAgICAgIG1fbWVudVBvc2l0aW9uWCA9
IHg7CisgICAgICAgIG1fbWVudVBvc2l0aW9uWSA9IHk7CisgICAgICAgIGdfaWRsZV9hZGQocmVp
bnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oZG9SaWdodENsaWNrSWRsZUNhbGxiYWNrKSwgdGhp
cyk7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICB2
b2lkIHNob3dDb250ZXh0TWVudUFuZFdhaXRVbnRpbEZpbmlzaGVkKCkKKyAgICB7CisgICAgICAg
IHNob3dDb250ZXh0TWVudUF0UG9zaXRpb25BbmRXYWl0VW50aWxGaW5pc2hlZCgwLCAwKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gc2ltdWxhdGVFc2NLZXlJZGxlQ2FsbGJhY2soQ29u
dGV4dE1lbnVUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+a2V5U3Ryb2tlKEdES19L
RVlfRXNjYXBlKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIHZvaWQgZGlz
bWlzc0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmluaXNoZWQoKQorICAgIHsKKyAgICAgICAgZ19p
ZGxlX2FkZChyZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihzaW11bGF0ZUVzY0tleUlkbGVD
YWxsYmFjayksIHRoaXMpOworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Cisg
ICAgfQorCisgICAgZG91YmxlIG1fbWVudVBvc2l0aW9uWDsKKyAgICBkb3VibGUgbV9tZW51UG9z
aXRpb25ZOworfTsKKworY2xhc3MgQ29udGV4dE1lbnVEZWZhdWx0VGVzdDogcHVibGljIENvbnRl
eHRNZW51VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShDb250ZXh0
TWVudURlZmF1bHRUZXN0KTsKKworICAgIGVudW0gRGVmYXVsdE1lbnVUeXBlIHsKKyAgICAgICAg
TmF2aWdhdGlvbiwKKyAgICAgICAgTGluaywKKyAgICAgICAgSW1hZ2UsCisgICAgICAgIExpbmtJ
bWFnZSwKKyAgICAgICAgVmlkZW8sCisgICAgICAgIEF1ZGlvLAorICAgICAgICBFZGl0YWJsZQor
ICAgIH07CisKKyAgICBDb250ZXh0TWVudURlZmF1bHRUZXN0KCkKKyAgICAgICAgOiBtX2V4cGVj
dGVkTWVudVR5cGUoTmF2aWdhdGlvbikKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBjb250ZXh0
TWVudShXZWJLaXRDb250ZXh0TWVudSogY29udGV4dE1lbnUsIEdka0V2ZW50KiBldmVudCwgV2Vi
S2l0SGl0VGVzdFJlc3VsdCogaGl0VGVzdFJlc3VsdCkKKyAgICB7CisgICAgICAgIEdMaXN0KiBp
dGVyID0gd2Via2l0X2NvbnRleHRfbWVudV9nZXRfaXRlbXMoY29udGV4dE1lbnUpOworCisgICAg
ICAgIHN3aXRjaCAobV9leHBlY3RlZE1lbnVUeXBlKSB7CisgICAgICAgIGNhc2UgTmF2aWdhdGlv
bjoKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRf
aXNfbGluayhoaXRUZXN0UmVzdWx0KSk7CisgICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hp
dF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAg
ICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbWVkaWEoaGl0
VGVzdFJlc3VsdCkpOworICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1
bHRfY29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0UmVzdWx0KSk7CisgICAgICAgICAgICBpdGVy
ID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9D
T05URVhUX01FTlVfQUNUSU9OX0dPX0JBQ0ssIFZpc2libGUpOworICAgICAgICAgICAgaXRlciA9
IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09O
VEVYVF9NRU5VX0FDVElPTl9HT19GT1JXQVJELCBWaXNpYmxlKTsKKyAgICAgICAgICAgIGl0ZXIg
PSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NP
TlRFWFRfTUVOVV9BQ1RJT05fU1RPUCwgVmlzaWJsZSk7CisgICAgICAgICAgICBpdGVyID0gY2hl
Y2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhU
X01FTlVfQUNUSU9OX1JFTE9BRCwgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgTGluazoKKyAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRf
dGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAg
IGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVz
dFJlc3VsdCkpOworICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRf
Y29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7CisgICAgICAgICAgICBnX2Fzc2VydCgh
d2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQp
KTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdl
dE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9MSU5LLCBWaXNpYmxl
IHwgRW5hYmxlZCk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tB
Y3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5fTElO
S19JTl9ORVdfV0lORE9XLCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBpdGVyID0g
Y2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05U
RVhUX01FTlVfQUNUSU9OX0RPV05MT0FEX0xJTktfVE9fRElTSywgVmlzaWJsZSB8IEVuYWJsZWQp
OworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0
TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX0xJTktfVE9fQ0xJUEJP
QVJELCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBJbWFnZToKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2Nv
bnRleHRfaXNfbGluayhoaXRUZXN0UmVzdWx0KSk7CisgICAgICAgICAgICBnX2Fzc2VydCh3ZWJr
aXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkpOworICAg
ICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRp
YShoaXRUZXN0UmVzdWx0KSk7CisgICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0
X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAg
IGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VC
S0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9JTUFHRV9JTl9ORVdfV0lORE9XLCBWaXNpYmxl
IHwgRW5hYmxlZCk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tB
Y3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0RPV05MT0FE
X0lNQUdFX1RPX0RJU0ssIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGl0ZXIgPSBj
aGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fQ09QWV9JTUFHRV9UT19DTElQQk9BUkQsIFZpc2libGUgfCBFbmFibGVk
KTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdl
dE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9JTUFHRV9VUkxfVE9f
Q0xJUEJPQVJELCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBMaW5rSW1hZ2U6CisgICAgICAgICAgICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3Rf
cmVzdWx0X2NvbnRleHRfaXNfbGluayhoaXRUZXN0UmVzdWx0KSk7CisgICAgICAgICAgICBnX2Fz
c2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3Vs
dCkpOworICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4
dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7CisgICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0
X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKKyAg
ICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQo
aXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9MSU5LLCBWaXNpYmxlIHwgRW5h
YmxlZCk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25B
bmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5fTElOS19JTl9O
RVdfV0lORE9XLCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tD
dXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01F
TlVfQUNUSU9OX0RPV05MT0FEX0xJTktfVE9fRElTSywgVmlzaWJsZSB8IEVuYWJsZWQpOworICAg
ICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChp
dGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX0xJTktfVE9fQ0xJUEJPQVJELCBW
aXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlz
U2VwYXJhdG9yQW5kR2V0TmV4dChpdGVyKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJl
bnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9B
Q1RJT05fT1BFTl9JTUFHRV9JTl9ORVdfV0lORE9XLCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAg
ICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0
ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0RPV05MT0FEX0lNQUdFX1RPX0RJU0ssIFZp
c2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNT
dG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09Q
WV9JTUFHRV9UT19DTElQQk9BUkQsIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGl0
ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lU
X0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9JTUFHRV9VUkxfVE9fQ0xJUEJPQVJELCBWaXNpYmxl
IHwgRW5hYmxlZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWaWRlbzoKKyAg
ICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGlu
ayhoaXRUZXN0UmVzdWx0KSk7CisgICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0
X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGdf
YXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVz
dWx0KSk7CisgICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250
ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVj
a0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRf
TUVOVV9BQ1RJT05fTUVESUFfUExBWSwgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICAgICAg
aXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9NRURJQV9NVVRFLCBWaXNpYmxlKTsKKyAgICAgICAgICAg
IGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VC
S0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fVE9HR0xFX01FRElBX0NPTlRST0xTLCBWaXNpYmxlIHwg
RW5hYmxlZCB8IENoZWNrZWQpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1J
c1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9U
T0dHTEVfTUVESUFfTE9PUCwgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICAgICAgaXRlciA9
IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09O
VEVYVF9NRU5VX0FDVElPTl9FTlRFUl9WSURFT19GVUxMU0NSRUVOLCBWaXNpYmxlIHwgRW5hYmxl
ZCk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU2VwYXJhdG9yQW5kR2V0
TmV4dChpdGVyKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0Fj
dGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9WSURF
T19MSU5LX1RPX0NMSVBCT0FSRCwgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICAgICAgaXRl
ciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRf
Q09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX1ZJREVPX0lOX05FV19XSU5ET1csIFZpc2libGUgfCBF
bmFibGVkKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlv
bkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRE9XTkxPQURfVklE
RU9fVE9fRElTSywgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgQXVkaW86CisgICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jl
c3VsdF9jb250ZXh0X2lzX2xpbmsoaGl0VGVzdFJlc3VsdCkpOworICAgICAgICAgICAgZ19hc3Nl
cnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0
KSk7CisgICAgICAgICAgICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRf
aXNfbWVkaWEoaGl0VGVzdFJlc3VsdCkpOworICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9o
aXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0UmVzdWx0KSk7CisgICAg
ICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0
ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX01FRElBX1BMQVksIFZpc2libGUgfCBFbmFi
bGVkKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFu
ZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fTUVESUFfTVVURSwgVmlz
aWJsZSk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25B
bmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1RPR0dMRV9NRURJQV9D
T05UUk9MUywgVmlzaWJsZSB8IEVuYWJsZWQgfCBDaGVja2VkKTsKKyAgICAgICAgICAgIGl0ZXIg
PSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NP
TlRFWFRfTUVOVV9BQ1RJT05fVE9HR0xFX01FRElBX0xPT1AsIFZpc2libGUgfCBFbmFibGVkKTsK
KyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5l
eHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRU5URVJfVklERU9fRlVMTFNDUkVF
TiwgVmlzaWJsZSk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU2VwYXJh
dG9yQW5kR2V0TmV4dChpdGVyKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVt
SXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05f
Q09QWV9BVURJT19MSU5LX1RPX0NMSVBCT0FSRCwgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAg
ICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVy
LCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0FVRElPX0lOX05FV19XSU5ET1csIFZp
c2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNT
dG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRE9X
TkxPQURfQVVESU9fVE9fRElTSywgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgRWRpdGFibGU6CisgICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0
X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xpbmsoaGl0VGVzdFJlc3VsdCkpOworICAgICAg
ICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFnZSho
aXRUZXN0UmVzdWx0KSk7CisgICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jl
c3VsdF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGdfYXNz
ZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0UmVz
dWx0KSk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25B
bmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NVVCwgVmlzaWJsZSk7
CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXRO
ZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFksIFZpc2libGUpOworICAg
ICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChp
dGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9QQVNURSwgVmlzaWJsZSB8IEVuYWJsZWQp
OworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0
TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9ERUxFVEUsIFZpc2libGUpOwor
ICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1NlcGFyYXRvckFuZEdldE5leHQo
aXRlcik7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25B
bmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1NFTEVDVF9BTEwsIFZp
c2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNT
ZXBhcmF0b3JBbmRHZXROZXh0KGl0ZXIpOworICAgICAgICAgICAgaWYgKHNob3VsZFNob3dJbnB1
dE1ldGhvZHNNZW51KCkpCisgICAgICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1J
c1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9J
TlBVVF9NRVRIT0RTLCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBpdGVyID0gY2hl
Y2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhU
X01FTlVfQUNUSU9OX1VOSUNPREUsIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQo
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9k
ZXZlbG9wZXJfZXh0cmFzKHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3MobV93ZWJWaWV3KSkp
IHsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTZXBhcmF0b3JBbmRHZXRO
ZXh0KGl0ZXIpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0
aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9JTlNQRUNUX0VM
RU1FTlQsIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgfQorICAgICAgICBnX2Fzc2VydCgh
aXRlcik7CisKKyAgICAgICAgcXVpdE1haW5Mb29wKCk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgRGVmYXVsdE1lbnVUeXBlIG1fZXhwZWN0ZWRNZW51VHlwZTsKK307CisK
K3N0YXRpYyB2b2lkIHRlc3RDb250ZXh0TWVudURlZmF1bHRNZW51KENvbnRleHRNZW51RGVmYXVs
dFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+c2hvd0luV2luZG93QW5k
V2FpdFVudGlsTWFwcGVkKCk7CisKKyAgICBjb25zdCBjaGFyKiBsaW5rc0hUTUwgPQorICAgICAg
ICAiPGh0bWw+PGJvZHk+IgorICAgICAgICAiIDxhIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsg
bGVmdDoxOyB0b3A6MScgaHJlZj0naHR0cDovL3d3dy53ZWJraXRndGsub3JnJyB0aXRsZT0nV2Vi
S2l0R1RLKyBUaXRsZSc+V2ViS2l0R1RLKyBXZWJzaXRlPC9hPiIKKyAgICAgICAgIiA8aW1nIHN0
eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6MTAnIHNyYz0nMHhkZWFkYmVlZicg
d2lkdGg9NSBoZWlnaHQ9NT48L2ltZz4iCisgICAgICAgICIgPGEgc3R5bGU9J3Bvc2l0aW9uOmFi
c29sdXRlOyBsZWZ0OjE7IHRvcDoyMCcgaHJlZj0naHR0cDovL3d3dy53ZWJraXRndGsub3JnL2xv
Z28nIHRpdGxlPSdXZWJLaXRHVEsrIExvZ28nPjxpbWcgc3JjPScweGRlYWRiZWVmJyB3aWR0aD01
IGhlaWdodD01PjwvaW1nPjwvYT4iCisgICAgICAgICIgPGlucHV0IHN0eWxlPSdwb3NpdGlvbjph
YnNvbHV0ZTsgbGVmdDoxOyB0b3A6MzAnIHNpemU9JzEwJz48L2lucHV0PiIKKyAgICAgICAgIiA8
dmlkZW8gc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRvcDo1MCcgd2lkdGg9JzMw
MCcgaGVpZ2h0PSczMDAnIGNvbnRyb2xzPSdjb250cm9scycgcHJlbG9hZD0nbm9uZSc+PHNvdXJj
ZSBzcmM9J21vdmllLm9nZycgdHlwZT0ndmlkZW8vb2dnJyAvPjwvdmlkZW8+IgorICAgICAgICAi
IDxhdWRpbyBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjYwJyB3aWR0aD0n
NTAnIGhlaWdodD0nMjAnIGNvbnRyb2xzPSdjb250cm9scycgcHJlbG9hZD0nbm9uZSc+PHNvdXJj
ZSBzcmM9J3RyYWNrLm1wMycgdHlwZT0nYXVkaW8vbXAzJyAvPjwvYXVkaW8+IgorICAgICAgICAi
PC9ib2R5PjwvaHRtbD4iOworICAgIHRlc3QtPmxvYWRIdG1sKGxpbmtzSFRNTCwgImZpbGU6Ly8v
Iik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICAvLyBDb250ZXh0
IG1lbnUgZm9yIGRvY3VtZW50LgorICAgIHRlc3QtPm1fZXhwZWN0ZWRNZW51VHlwZSA9IENvbnRl
eHRNZW51RGVmYXVsdFRlc3Q6Ok5hdmlnYXRpb247CisgICAgdGVzdC0+c2hvd0NvbnRleHRNZW51
QXRQb3NpdGlvbkFuZFdhaXRVbnRpbEZpbmlzaGVkKDAsIDApOworCisgICAgLy8gQ29udGV4dCBt
ZW51IGZvciBsaW5rLgorICAgIHRlc3QtPm1fZXhwZWN0ZWRNZW51VHlwZSA9IENvbnRleHRNZW51
RGVmYXVsdFRlc3Q6Okxpbms7CisgICAgdGVzdC0+c2hvd0NvbnRleHRNZW51QXRQb3NpdGlvbkFu
ZFdhaXRVbnRpbEZpbmlzaGVkKDEsIDEpOworCisgICAgLy8gQ29udGV4dCBtZW51IGZvciBpbWFn
ZS4KKyAgICB0ZXN0LT5tX2V4cGVjdGVkTWVudVR5cGUgPSBDb250ZXh0TWVudURlZmF1bHRUZXN0
OjpJbWFnZTsKKyAgICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBdFBvc2l0aW9uQW5kV2FpdFVudGls
RmluaXNoZWQoMSwgMTApOworCisgICAgLy8gRW5hYmxlIGRldmVsb3BlciBleHRyYXMgbm93LCBz
byB0aGF0IGluc3BlY3RvciBlbGVtZW50CisgICAgLy8gd2lsbCBiZSBzaG93biBpbiB0aGUgZGVm
YXVsdCBjb250ZXh0IG1lbnUuCisgICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfZGV2ZWxv
cGVyX2V4dHJhcyh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHRlc3QtPm1fd2ViVmlldyks
IFRSVUUpOworCisgICAgLy8gQ29udGV4dCBtZW51IGZvciBpbWFnZSBsaW5rLgorICAgIHRlc3Qt
Pm1fZXhwZWN0ZWRNZW51VHlwZSA9IENvbnRleHRNZW51RGVmYXVsdFRlc3Q6OkxpbmtJbWFnZTsK
KyAgICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBdFBvc2l0aW9uQW5kV2FpdFVudGlsRmluaXNoZWQo
MSwgMjApOworCisgICAgLy8gQ29udGV4dCBtZW51IGZvciB2aWRlby4KKyAgICB0ZXN0LT5tX2V4
cGVjdGVkTWVudVR5cGUgPSBDb250ZXh0TWVudURlZmF1bHRUZXN0OjpWaWRlbzsKKyAgICB0ZXN0
LT5zaG93Q29udGV4dE1lbnVBdFBvc2l0aW9uQW5kV2FpdFVudGlsRmluaXNoZWQoMSwgNTApOwor
CisgICAgLy8gQ29udGV4dCBtZW51IGZvciBhdWRpby4KKyAgICB0ZXN0LT5tX2V4cGVjdGVkTWVu
dVR5cGUgPSBDb250ZXh0TWVudURlZmF1bHRUZXN0OjpBdWRpbzsKKyAgICB0ZXN0LT5zaG93Q29u
dGV4dE1lbnVBdFBvc2l0aW9uQW5kV2FpdFVudGlsRmluaXNoZWQoMSwgNjApOworCisgICAgLy8g
Q29udGV4dCBtZW51IGZvciBlZGl0YWJsZS4KKyAgICB0ZXN0LT5tX2V4cGVjdGVkTWVudVR5cGUg
PSBDb250ZXh0TWVudURlZmF1bHRUZXN0OjpFZGl0YWJsZTsKKyAgICB0ZXN0LT5zaG93Q29udGV4
dE1lbnVBdFBvc2l0aW9uQW5kV2FpdFVudGlsRmluaXNoZWQoNSwgMzUpOworfQorCitjbGFzcyBD
b250ZXh0TWVudUN1c3RvbVRlc3Q6IHB1YmxpYyBDb250ZXh0TWVudVRlc3QgeworcHVibGljOgor
ICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoQ29udGV4dE1lbnVDdXN0b21UZXN0KTsKKworICAg
IENvbnRleHRNZW51Q3VzdG9tVGVzdCgpCisgICAgICAgIDogbV9pdGVtVG9BY3RpdmF0ZUxhYmVs
KDApCisgICAgICAgICwgbV9hY3RpdmF0ZWQoZmFsc2UpCisgICAgICAgICwgbV90b2dnbGVkKGZh
bHNlKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGNvbnRleHRNZW51KFdlYktpdENvbnRleHRN
ZW51KiBjb250ZXh0TWVudSwgR2RrRXZlbnQqLCBXZWJLaXRIaXRUZXN0UmVzdWx0KiBoaXRUZXN0
UmVzdWx0KQorICAgIHsKKyAgICAgICAgLy8gQXBwZW5kIG91ciBjdXN0b20gaXRlbSB0byB0aGUg
ZGVmYXVsdCBtZW51LgorICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0
TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ldyhtX2FjdGlvbi5nZXQoKSkpOworICAg
ICAgICBxdWl0TWFpbkxvb3AoKTsKKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgR3RrTWVudUl0ZW0qIGdldE1lbnVJdGVtKEd0a01lbnUqIG1lbnUsIGNvbnN0IGdjaGFyKiBp
dGVtTGFiZWwpCisgICAgeworICAgICAgICBHT3duUHRyPEdMaXN0PiBpdGVtcyhndGtfY29udGFp
bmVyX2dldF9jaGlsZHJlbihHVEtfQ09OVEFJTkVSKG1lbnUpKSk7CisgICAgICAgIGZvciAoR0xp
c3QqIGl0ZXIgPSBpdGVtcy5nZXQoKTsgaXRlcjsgaXRlciA9IGdfbGlzdF9uZXh0KGl0ZXIpKSB7
CisgICAgICAgICAgICBHdGtNZW51SXRlbSogY2hpbGQgPSBHVEtfTUVOVV9JVEVNKGl0ZXItPmRh
dGEpOworICAgICAgICAgICAgaWYgKGdfc3RyX2VxdWFsKGl0ZW1MYWJlbCwgZ3RrX21lbnVfaXRl
bV9nZXRfbGFiZWwoY2hpbGQpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQ7CisgICAg
ICAgIH0KKyAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorCisgICAgdm9pZCBhY3RpdmF0ZU1lbnVJdGVtKCkKKyAgICB7CisgICAgICAgIGdf
YXNzZXJ0KG1faXRlbVRvQWN0aXZhdGVMYWJlbCk7CisgICAgICAgIEd0a01lbnUqIG1lbnUgPSBn
ZXRQb3B1cE1lbnUoKTsKKyAgICAgICAgR3RrTWVudUl0ZW0qIGl0ZW0gPSBnZXRNZW51SXRlbSht
ZW51LCBtX2l0ZW1Ub0FjdGl2YXRlTGFiZWwpOworICAgICAgICBndGtfbWVudV9zaGVsbF9hY3Rp
dmF0ZV9pdGVtKEdUS19NRU5VX1NIRUxMKG1lbnUpLCBHVEtfV0lER0VUKGl0ZW0pLCBUUlVFKTsK
KyAgICAgICAgbV9pdGVtVG9BY3RpdmF0ZUxhYmVsID0gMDsKKyAgICB9CisKKyAgICBzdGF0aWMg
Z2Jvb2xlYW4gYWN0aXZhdGVNZW51SXRlbUlkbGVDYWxsYmFjayhncG9pbnRlciB1c2VyRGF0YSkK
KyAgICB7CisgICAgICAgIENvbnRleHRNZW51Q3VzdG9tVGVzdCogdGVzdCA9IHN0YXRpY19jYXN0
PENvbnRleHRNZW51Q3VzdG9tVGVzdCo+KHVzZXJEYXRhKTsKKyAgICAgICAgdGVzdC0+YWN0aXZh
dGVNZW51SXRlbSgpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgdm9pZCBh
Y3RpdmF0ZUN1c3RvbU1lbnVJdGVtQW5kV2FpdFVudGlsQWN0aXZhdGVkKGNvbnN0IGNoYXIqIGFj
dGlvbkxhYmVsKQorICAgIHsKKyAgICAgICAgbV9hY3RpdmF0ZWQgPSBtX3RvZ2dsZWQgPSBmYWxz
ZTsKKyAgICAgICAgbV9pdGVtVG9BY3RpdmF0ZUxhYmVsID0gYWN0aW9uTGFiZWw7CisgICAgICAg
IGdfaWRsZV9hZGQoYWN0aXZhdGVNZW51SXRlbUlkbGVDYWxsYmFjaywgdGhpcyk7CisgICAgICAg
IGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICB2b2lkIHRvZ2dsZUN1
c3RvbU1lbnVJdGVtQW5kV2FpdFVudGlsVG9nZ2xlZChjb25zdCBjaGFyKiBhY3Rpb25MYWJlbCkK
KyAgICB7CisgICAgICAgIGFjdGl2YXRlQ3VzdG9tTWVudUl0ZW1BbmRXYWl0VW50aWxBY3RpdmF0
ZWQoYWN0aW9uTGFiZWwpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGFjdGlvbkFjdGl2YXRl
ZENhbGxiYWNrKEd0a0FjdGlvbiosIENvbnRleHRNZW51Q3VzdG9tVGVzdCogdGVzdCkKKyAgICB7
CisgICAgICAgIHRlc3QtPm1fYWN0aXZhdGVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMg
dm9pZCBhY3Rpb25Ub2dnbGVkQ2FsbGJhY2soR3RrQWN0aW9uKiwgQ29udGV4dE1lbnVDdXN0b21U
ZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+bV90b2dnbGVkID0gdHJ1ZTsKKyAgICB9
CisKKyAgICB2b2lkIHNldEFjdGlvbihHdGtBY3Rpb24qIGFjdGlvbikKKyAgICB7CisgICAgICAg
IG1fYWN0aW9uID0gYWN0aW9uOworICAgICAgICBpZiAoR1RLX0lTX1RPR0dMRV9BQ1RJT04oYWN0
aW9uKSkKKyAgICAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoYWN0aW9uLCAidG9nZ2xlZCIsIEdf
Q0FMTEJBQ0soYWN0aW9uVG9nZ2xlZENhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoYWN0aW9uLCAiYWN0aXZhdGUiLCBHX0NBTExCQUNL
KGFjdGlvbkFjdGl2YXRlZENhbGxiYWNrKSwgdGhpcyk7CisgICAgfQorCisgICAgR1JlZlB0cjxH
dGtBY3Rpb24+IG1fYWN0aW9uOworICAgIGNvbnN0IGNoYXIqIG1faXRlbVRvQWN0aXZhdGVMYWJl
bDsKKyAgICBib29sIG1fYWN0aXZhdGVkOworICAgIGJvb2wgbV90b2dnbGVkOworfTsKKworc3Rh
dGljIHZvaWQgdGVzdENvbnRleHRNZW51UG9wdWxhdGVNZW51KENvbnRleHRNZW51Q3VzdG9tVGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0
VW50aWxNYXBwZWQoKTsKKworICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keT5XZWJLaXRH
VEsrIENvbnRleHQgbWVudSB0ZXN0czwvYm9keT48L2h0bWw+IiwgImZpbGU6Ly8vIik7CisgICAg
dGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICAvLyBDcmVhdGUgYSBjdXN0b20g
bWVudSBpdGVtLgorICAgIEdSZWZQdHI8R3RrQWN0aW9uPiBhY3Rpb24gPSBhZG9wdEdSZWYoZ3Rr
X2FjdGlvbl9uZXcoIldlYktpdEdUSytDdXN0b21BY3Rpb24iLCAiQ3VzdG9tIF9BY3Rpb24iLCAw
LCAwKSk7CisgICAgdGVzdC0+c2V0QWN0aW9uKGFjdGlvbi5nZXQoKSk7CisgICAgdGVzdC0+c2hv
d0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmluaXNoZWQoKTsKKyAgICB0ZXN0LT5hY3RpdmF0ZUN1
c3RvbU1lbnVJdGVtQW5kV2FpdFVudGlsQWN0aXZhdGVkKGd0a19hY3Rpb25fZ2V0X2xhYmVsKGFj
dGlvbi5nZXQoKSkpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fYWN0aXZhdGVkKTsKKyAgICBnX2Fz
c2VydCghdGVzdC0+bV90b2dnbGVkKTsKKworICAgIC8vIENyZWF0ZSBhIGN1c3RvbSB0b2dnbGUg
bWVudSBpdGVtLgorICAgIEdSZWZQdHI8R3RrQWN0aW9uPiB0b2dnbGVBY3Rpb24gPSBhZG9wdEdS
ZWYoR1RLX0FDVElPTihndGtfdG9nZ2xlX2FjdGlvbl9uZXcoIldlYktpdEdUSytDdXN0b21Ub2dn
bGVBY3Rpb24iLCAiQ3VzdG9tIF9Ub2dnbGUgQWN0aW9uIiwgMCwgMCkpKTsKKyAgICB0ZXN0LT5z
ZXRBY3Rpb24odG9nZ2xlQWN0aW9uLmdldCgpKTsKKyAgICB0ZXN0LT5zaG93Q29udGV4dE1lbnVB
bmRXYWl0VW50aWxGaW5pc2hlZCgpOworICAgIHRlc3QtPnRvZ2dsZUN1c3RvbU1lbnVJdGVtQW5k
V2FpdFVudGlsVG9nZ2xlZChndGtfYWN0aW9uX2dldF9sYWJlbCh0b2dnbGVBY3Rpb24uZ2V0KCkp
KTsKKyAgICBnX2Fzc2VydCghdGVzdC0+bV9hY3RpdmF0ZWQpOworICAgIGdfYXNzZXJ0KHRlc3Qt
Pm1fdG9nZ2xlZCk7Cit9CisKK2NsYXNzIENvbnRleHRNZW51Q3VzdG9tRnVsbFRlc3Q6IHB1Ymxp
YyBDb250ZXh0TWVudVRlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUo
Q29udGV4dE1lbnVDdXN0b21GdWxsVGVzdCk7CisKKyAgICBib29sIGNvbnRleHRNZW51KFdlYktp
dENvbnRleHRNZW51KiBjb250ZXh0TWVudSwgR2RrRXZlbnQqLCBXZWJLaXRIaXRUZXN0UmVzdWx0
KikKKyAgICB7CisgICAgICAgIC8vIENsZWFyIHByb3Bvc2VkIG1lbnUgYW5kIGJ1aWxkIG91ciBv
d24uCisgICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfcmVtb3ZlX2FsbChjb250ZXh0TWVudSk7
CisgICAgICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfY29udGV4dF9tZW51X2dldF9uX2l0ZW1z
KGNvbnRleHRNZW51KSwgPT0sIDApOworCisgICAgICAgIC8vIEFkZCBhY3Rpb25zIGZyb20gc3Rv
Y2suCisgICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfcHJlcGVuZChjb250ZXh0TWVudSwgd2Vi
a2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19mcm9tX3N0b2NrX2FjdGlvbihXRUJLSVRfQ09OVEVY
VF9NRU5VX0FDVElPTl9HT19CQUNLKSk7CisgICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfYXBw
ZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X2Zyb21fc3RvY2tf
YWN0aW9uKFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0dPX0ZPUldBUkQpKTsKKyAgICAgICAg
d2Via2l0X2NvbnRleHRfbWVudV9pbnNlcnQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21l
bnVfaXRlbV9uZXdfc2VwYXJhdG9yKCksIDIpOworCisgICAgICAgIC8vIEFkZCBjdXN0b20gYWN0
aW9ucy4KKyAgICAgICAgR1JlZlB0cjxHdGtBY3Rpb24+IGFjdGlvbiA9IGFkb3B0R1JlZihndGtf
YWN0aW9uX25ldygiV2ViS2l0R1RLK0N1c3RvbUFjdGlvbiIsICJDdXN0b20gX0FjdGlvbiIsIDAs
IDApKTsKKyAgICAgICAgZ3RrX2FjdGlvbl9zZXRfc2Vuc2l0aXZlKGFjdGlvbi5nZXQoKSwgRkFM
U0UpOworICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2luc2VydChjb250ZXh0TWVudSwgd2Vi
a2l0X2NvbnRleHRfbWVudV9pdGVtX25ldyhhY3Rpb24uZ2V0KCkpLCAtMSk7CisgICAgICAgIEdS
ZWZQdHI8R3RrQWN0aW9uPiB0b2dnbGVBY3Rpb24gPSBhZG9wdEdSZWYoR1RLX0FDVElPTihndGtf
dG9nZ2xlX2FjdGlvbl9uZXcoIldlYktpdEdUSytDdXN0b21Ub2dnbGVBY3Rpb24iLCAiQ3VzdG9t
IF9Ub2dnbGUgQWN0aW9uIiwgMCwgMCkpKTsKKyAgICAgICAgZ3RrX3RvZ2dsZV9hY3Rpb25fc2V0
X2FjdGl2ZShHVEtfVE9HR0xFX0FDVElPTih0b2dnbGVBY3Rpb24uZ2V0KCkpLCBUUlVFKTsKKyAg
ICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBlbmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250
ZXh0X21lbnVfaXRlbV9uZXcodG9nZ2xlQWN0aW9uLmdldCgpKSk7CisgICAgICAgIHdlYmtpdF9j
b250ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1f
bmV3X3NlcGFyYXRvcigpKTsKKworICAgICAgICAvLyBBZGQgYSBzdWJtZW51LgorICAgICAgICBH
UmVmUHRyPFdlYktpdENvbnRleHRNZW51PiBzdWJNZW51ID0gYWRvcHRHUmVmKHdlYmtpdF9jb250
ZXh0X21lbnVfbmV3KCkpOworICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZp
bmlzaGVzKEdfT0JKRUNUKHN1Yk1lbnUuZ2V0KCkpKTsKKyAgICAgICAgd2Via2l0X2NvbnRleHRf
bWVudV9pbnNlcnQoc3ViTWVudS5nZXQoKSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19m
cm9tX3N0b2NrX2FjdGlvbl93aXRoX2xhYmVsKFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1NU
T1AsICJTdG9wIExvYWQiKSwgMCk7CisgICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfaW5zZXJ0
KHN1Yk1lbnUuZ2V0KCksIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfZnJvbV9zdG9ja19h
Y3Rpb24oV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fUkVMT0FEKSwgLTEpOworICAgICAgICB3
ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVu
dV9pdGVtX25ld193aXRoX3N1Ym1lbnUoIkxvYWQgb3B0aW9ucyIsIHN1Yk1lbnUuZ2V0KCkpKTsK
KyAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBlbmQoY29udGV4dE1lbnUsIHdlYmtpdF9j
b250ZXh0X21lbnVfaXRlbV9uZXdfc2VwYXJhdG9yKCkpOworCisgICAgICAgIC8vIE1vdmUgTG9h
ZCBzdWJtZW51IGJlZm9yZSBjdXN0b20gYWN0aW9ucy4KKyAgICAgICAgd2Via2l0X2NvbnRleHRf
bWVudV9tb3ZlX2l0ZW0oY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfbGFzdChjb250
ZXh0TWVudSksIDMpOworICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X21vdmVfaXRlbShjb250
ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9sYXN0KGNvbnRleHRNZW51KSwgMyk7CisKKyAg
ICAgICAgLy8gSWYgbGFzdCBpdGVtIGlzIGEgc2VwYXJhdG9yLCByZW1vdmUgaXQuCisgICAgICAg
IGlmICh3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1faXNfc2VwYXJhdG9yKHdlYmtpdF9jb250ZXh0
X21lbnVfbGFzdChjb250ZXh0TWVudSkpKQorICAgICAgICAgICAgd2Via2l0X2NvbnRleHRfbWVu
dV9yZW1vdmUoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfbGFzdChjb250ZXh0TWVu
dSkpOworCisgICAgICAgIC8vIENoZWNrIHRoZSBtZW51LgorICAgICAgICBHTGlzdCogaXRlciA9
IHdlYmtpdF9jb250ZXh0X21lbnVfZ2V0X2l0ZW1zKGNvbnRleHRNZW51KTsKKworICAgICAgICBp
dGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJ
VF9DT05URVhUX01FTlVfQUNUSU9OX0dPX0JBQ0ssIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAg
ICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9HT19GT1JXQVJELCBWaXNpYmxlIHwgRW5hYmxlZCk7
CisgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTZXBhcmF0b3JBbmRHZXROZXh0KGl0
ZXIpOworCisgICAgICAgIEdMaXN0KiBzdWJNZW51SXRlciA9IDA7CisgICAgICAgIGl0ZXIgPSBj
aGVja0N1cnJlbnRJdGVtSXNTdWJNZW51QW5kR2V0TmV4dChpdGVyLCAiTG9hZCBvcHRpb25zIiwg
VmlzaWJsZSB8IEVuYWJsZWQsICZzdWJNZW51SXRlcik7CisgICAgICAgIHN1Yk1lbnVJdGVyID0g
Y2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KHN1Yk1lbnVJdGVyLCBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9TVE9QLCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAg
IHN1Yk1lbnVJdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KHN1
Yk1lbnVJdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9SRUxPQUQsIFZpc2libGUgfCBF
bmFibGVkKTsKKyAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1NlcGFyYXRvckFuZEdl
dE5leHQoaXRlcik7CisKKyAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc0N1c3RvbUFj
dGlvbkFuZEdldE5leHQoaXRlciwgIkN1c3RvbSBfQWN0aW9uIiwgVmlzaWJsZSk7CisgICAgICAg
IGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNDdXN0b21BY3Rpb25BbmRHZXROZXh0KGl0ZXIsICJD
dXN0b20gX1RvZ2dsZSBBY3Rpb24iLCBWaXNpYmxlIHwgRW5hYmxlZCB8IENoZWNrZWQpOworICAg
ICAgICBnX2Fzc2VydCghaXRlcik7CisKKyAgICAgICAgcXVpdE1haW5Mb29wKCk7CisKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorfTsKKworc3RhdGljIHZvaWQgdGVzdENvbnRleHRNZW51
Q3VzdG9tTWVudShDb250ZXh0TWVudUN1c3RvbUZ1bGxUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVy
KQoreworICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOworCisgICAg
dGVzdC0+bG9hZEh0bWwoIjxodG1sPjxib2R5PldlYktpdEdUSysgQ29udGV4dCBtZW51IHRlc3Rz
PC9ib2R5PjwvaHRtbD4iLCAiZmlsZTovLy8iKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmlu
aXNoZWQoKTsKKworICAgIHRlc3QtPnNob3dDb250ZXh0TWVudUFuZFdhaXRVbnRpbEZpbmlzaGVk
KCk7Cit9CisKK2NsYXNzIENvbnRleHRNZW51RGlzYWJsZWRUZXN0OiBwdWJsaWMgQ29udGV4dE1l
bnVUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKENvbnRleHRNZW51
RGlzYWJsZWRUZXN0KTsKKworICAgIGVudW0gRGlzYWJsZU1vZGUgeworICAgICAgICBJZ25vcmVD
bGlja3MsCisgICAgICAgIElnbm9yZURlZmF1bHRNZW51CisgICAgfTsKKworICAgIHN0YXRpYyBn
Ym9vbGVhbiBidXR0b25QcmVzc0V2ZW50Q2FsbGJhY2soR3RrV2lkZ2V0KiwgR2RrRXZlbnQqIGV2
ZW50LCBDb250ZXh0TWVudURpc2FibGVkVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIGlmIChl
dmVudC0+YnV0dG9uLmJ1dHRvbiAhPSAzKQorICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAg
ICAgICByZXR1cm4gdGVzdC0+cmlnaHRCdXR0b25QcmVzc2VkKCk7CisgICAgfQorCisgICAgQ29u
dGV4dE1lbnVEaXNhYmxlZFRlc3QoKQorICAgICAgICA6IG1fZGlzYWJsZU1vZGUoSWdub3JlQ2xp
Y2tzKQorICAgIHsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJidXR0b24t
cHJlc3MtZXZlbnQiLCBHX0NBTExCQUNLKGJ1dHRvblByZXNzRXZlbnRDYWxsYmFjayksIHRoaXMp
OworICAgIH0KKworICAgIGJvb2wgY29udGV4dE1lbnUoV2ViS2l0Q29udGV4dE1lbnUqIGNvbnRl
eHRNZW51LCBHZGtFdmVudCosIFdlYktpdEhpdFRlc3RSZXN1bHQqKQorICAgIHsKKyAgICAgICAg
aWYgKG1fZGlzYWJsZU1vZGUgPT0gSWdub3JlQ2xpY2tzKQorICAgICAgICAgICAgZ19hc3NlcnRf
bm90X3JlYWNoZWQoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcXVpdE1haW5Mb29wKCk7
CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCByaWdodEJ1dHRvblBy
ZXNzZWQoKQorICAgIHsKKyAgICAgICAgaWYgKG1fZGlzYWJsZU1vZGUgPT0gSWdub3JlQ2xpY2tz
KSB7CisgICAgICAgICAgICBxdWl0TWFpbkxvb3BBZnRlclByb2Nlc3NpbmdQZW5kaW5nRXZlbnRz
KCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgRGlzYWJsZU1vZGUgbV9kaXNhYmxlTW9kZTsKK307CisKK3N0
YXRpYyB2b2lkIHRlc3RDb250ZXh0TWVudURpc2FibGVNZW51KENvbnRleHRNZW51RGlzYWJsZWRU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdh
aXRVbnRpbE1hcHBlZCgpOworCisgICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxib2R5PldlYktp
dEdUSysgQ29udGV4dCBtZW51IHRlc3RzPC9ib2R5PjwvaHRtbD4iLCAiZmlsZTovLy8iKTsKKyAg
ICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3QtPm1fZGlzYWJsZU1v
ZGUgPSBDb250ZXh0TWVudURpc2FibGVkVGVzdDo6SWdub3JlRGVmYXVsdE1lbnU7CisgICAgdGVz
dC0+c2hvd0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmluaXNoZWQoKTsKKworICAgIHRlc3QtPm1f
ZGlzYWJsZU1vZGUgPSBDb250ZXh0TWVudURpc2FibGVkVGVzdDo6SWdub3JlQ2xpY2tzOworICAg
IHRlc3QtPnNob3dDb250ZXh0TWVudUFuZFdhaXRVbnRpbEZpbmlzaGVkKCk7Cit9CisKK2NsYXNz
IENvbnRleHRNZW51U3VibWVudVRlc3Q6IHB1YmxpYyBDb250ZXh0TWVudVRlc3QgeworcHVibGlj
OgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoQ29udGV4dE1lbnVTdWJtZW51VGVzdCk7CisK
KyAgICBib29sIGNvbnRleHRNZW51KFdlYktpdENvbnRleHRNZW51KiBjb250ZXh0TWVudSwgR2Rr
RXZlbnQqLCBXZWJLaXRIaXRUZXN0UmVzdWx0KikKKyAgICB7CisgICAgICAgIHNpemVfdCBtZW51
U2l6ZSA9IHdlYmtpdF9jb250ZXh0X21lbnVfZ2V0X25faXRlbXMoY29udGV4dE1lbnUpOworICAg
ICAgICBHUmVmUHRyPFdlYktpdENvbnRleHRNZW51PiBzdWJNZW51ID0gYWRvcHRHUmVmKHdlYmtp
dF9jb250ZXh0X21lbnVfbmV3KCkpOworICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVu
ZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld193aXRoX3N1Ym1lbnUo
IlN1Yk1lbnVJdGVtIiwgc3ViTWVudS5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXB1aW50
KHdlYmtpdF9jb250ZXh0X21lbnVfZ2V0X25faXRlbXMoY29udGV4dE1lbnUpLCA9PSwgbWVudVNp
emUgKyAxKTsKKworICAgICAgICBHUmVmUHRyPFdlYktpdENvbnRleHRNZW51PiBzdWJNZW51MiA9
IGFkb3B0R1JlZih3ZWJraXRfY29udGV4dF9tZW51X25ldygpKTsKKyAgICAgICAgR1JlZlB0cjxX
ZWJLaXRDb250ZXh0TWVudUl0ZW0+IGl0ZW0gPSB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3
X2Zyb21fc3RvY2tfYWN0aW9uKFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5fTElOSyk7
CisKKyAgICAgICAgLy8gQWRkIHN1Ym1lbnUgdG8gbmV3bHkgY3JlYXRlZCBpdGVtLgorICAgICAg
ICBnX2Fzc2VydCghd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9zdWJtZW51KGl0ZW0uZ2V0
KCkpKTsKKyAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX3NldF9zdWJtZW51KGl0ZW0u
Z2V0KCksIHN1Yk1lbnUyLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X2NvbnRleHRf
bWVudV9pdGVtX2dldF9zdWJtZW51KGl0ZW0uZ2V0KCkpID09IHN1Yk1lbnUyLmdldCgpKTsKKwor
ICAgICAgICAvLyBSZXBsYWNlIHRoZSBzdWJtZW51LgorICAgICAgICB3ZWJraXRfY29udGV4dF9t
ZW51X2l0ZW1fc2V0X3N1Ym1lbnUoaXRlbS5nZXQoKSwgMCk7CisgICAgICAgIGdfYXNzZXJ0KCF3
ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X3N1Ym1lbnUoaXRlbS5nZXQoKSkpOworCisgICAg
ICAgIC8vIFRyeSB0byBhZGQgYSBzdWJtZW51IGFscmVhZHkgYWRkZWQgdG8gYW5vdGhlciBpdGVt
LgorICAgICAgICByZW1vdmVMb2dGYXRhbEZsYWcoR19MT0dfTEVWRUxfV0FSTklORyk7CisgICAg
ICAgIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9zZXRfc3VibWVudShpdGVtLmdldCgpLCBzdWJN
ZW51LmdldCgpKTsKKyAgICAgICAgYWRkTG9nRmF0YWxGbGFnKEdfTE9HX0xFVkVMX1dBUk5JTkcp
OworICAgICAgICBnX2Fzc2VydCghd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9zdWJtZW51
KGl0ZW0uZ2V0KCkpKTsKKworICAgICAgICAvLyBBIHJlbW92ZWQgc3VibWVudSBzaG91bGRuJ3Qg
aGF2ZSBhIHBhcmVudC4KKyAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX3NldF9zdWJt
ZW51KGl0ZW0uZ2V0KCksIHN1Yk1lbnUyLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0
X2NvbnRleHRfbWVudV9pdGVtX2dldF9zdWJtZW51KGl0ZW0uZ2V0KCkpID09IHN1Yk1lbnUyLmdl
dCgpKTsKKworICAgICAgICBxdWl0TWFpbkxvb3AoKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0Q29udGV4dE1lbnVTdWJNZW51KENvbnRleHRN
ZW51U3VibWVudVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+c2hvd0lu
V2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7CisKKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+
PGJvZHk+V2ViS2l0R1RLKyBDb250ZXh0IG1lbnUgdGVzdHM8L2JvZHk+PC9odG1sPiIsICJmaWxl
Oi8vLyIpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+
c2hvd0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmluaXNoZWQoKTsKK30KKworY2xhc3MgQ29udGV4
dE1lbnVEaXNtaXNzZWRUZXN0OiBwdWJsaWMgQ29udGV4dE1lbnVUZXN0IHsKK3B1YmxpYzoKKyAg
ICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKENvbnRleHRNZW51RGlzbWlzc2VkVGVzdCk7CisKKyAg
ICBDb250ZXh0TWVudURpc21pc3NlZFRlc3QoKQorICAgICAgICA6IG1fZGlzbWlzc2VkKGZhbHNl
KQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGNvbnRleHRNZW51KFdlYktpdENvbnRleHRNZW51
KiBjb250ZXh0TWVudSwgR2RrRXZlbnQqLCBXZWJLaXRIaXRUZXN0UmVzdWx0KikKKyAgICB7Cisg
ICAgICAgIHF1aXRNYWluTG9vcCgpOworICAgICAgICAvLyBTaG93IHRoZSBkZWZhdWx0IGNvbnRl
eHQgbWVudS4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHZvaWQgY29udGV4
dE1lbnVEaXNtaXNzZWQoKQorICAgIHsKKyAgICAgICAgbV9kaXNtaXNzZWQgPSB0cnVlOworICAg
ICAgICBDb250ZXh0TWVudVRlc3Q6OmNvbnRleHRNZW51RGlzbWlzc2VkKCk7CisgICAgfQorCisg
ICAgdm9pZCBzaG93Q29udGV4dE1lbnVBbmRXYWl0VW50aWxEaXNtaXNzZWQoKQorICAgIHsKKyAg
ICAgICAgc2hvd0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmluaXNoZWQoKTsKKyAgICAgICAgZGlz
bWlzc0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmluaXNoZWQoKTsKKyAgICB9CisKKyAgICBib29s
IG1fZGlzbWlzc2VkOworfTsKKworc3RhdGljIHZvaWQgdGVzdENvbnRleHRNZW51RGlzbWlzc2Vk
KENvbnRleHRNZW51RGlzbWlzc2VkVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0
ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKKworICAgIHRlc3QtPmxvYWRI
dG1sKCI8aHRtbD48Ym9keT5XZWJLaXRHVEsrIENvbnRleHQgbWVudSB0ZXN0czwvYm9keT48L2h0
bWw+IiwgImZpbGU6Ly8vIik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisK
KyAgICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBbmRXYWl0VW50aWxEaXNtaXNzZWQoKTsKKyAgICBn
X2Fzc2VydCh0ZXN0LT5tX2Rpc21pc3NlZCk7Cit9CisKK2NsYXNzIENvbnRleHRNZW51U21hcnRT
ZXBhcmF0b3JzVGVzdDogcHVibGljIENvbnRleHRNZW51VGVzdCB7CitwdWJsaWM6CisgICAgTUFL
RV9HTElCX1RFU1RfRklYVFVSRShDb250ZXh0TWVudVNtYXJ0U2VwYXJhdG9yc1Rlc3QpOworCisg
ICAgYm9vbCBjb250ZXh0TWVudShXZWJLaXRDb250ZXh0TWVudSogY29udGV4dE1lbnUsIEdka0V2
ZW50KiwgV2ViS2l0SGl0VGVzdFJlc3VsdCopCisgICAgeworICAgICAgICB3ZWJraXRfY29udGV4
dF9tZW51X3JlbW92ZV9hbGwoY29udGV4dE1lbnUpOworCisgICAgICAgIHdlYmtpdF9jb250ZXh0
X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X3Nl
cGFyYXRvcigpKTsKKyAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBlbmQoY29udGV4dE1l
bnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfc2VwYXJhdG9yKCkpOworICAgICAgICB3
ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVu
dV9pdGVtX25ld19mcm9tX3N0b2NrX2FjdGlvbihXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9H
T19CQUNLKSk7CisgICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51
LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X2Zyb21fc3RvY2tfYWN0aW9uKFdFQktJVF9D
T05URVhUX01FTlVfQUNUSU9OX0dPX0ZPUldBUkQpKTsKKyAgICAgICAgd2Via2l0X2NvbnRleHRf
bWVudV9hcHBlbmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfc2Vw
YXJhdG9yKCkpOworICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVu
dSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19zZXBhcmF0b3IoKSk7CisgICAgICAgIHdl
YmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51
X2l0ZW1fbmV3X2Zyb21fc3RvY2tfYWN0aW9uKFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NP
UFkpKTsKKyAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBlbmQoY29udGV4dE1lbnUsIHdl
YmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfc2VwYXJhdG9yKCkpOworICAgICAgICB3ZWJraXRf
Y29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVt
X25ld19mcm9tX3N0b2NrX2FjdGlvbihXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9JTlNQRUNU
X0VMRU1FTlQpKTsKKyAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBlbmQoY29udGV4dE1l
bnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfc2VwYXJhdG9yKCkpOworICAgICAgICB3
ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVu
dV9pdGVtX25ld19zZXBhcmF0b3IoKSk7CisKKyAgICAgICAgcXVpdE1haW5Mb29wKCk7CisKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEd0a01lbnUqIHNob3dDb250ZXh0TWVu
dUFuZEdldEd0a01lbnUoKQorICAgIHsKKyAgICAgICAgc2hvd0NvbnRleHRNZW51QW5kV2FpdFVu
dGlsRmluaXNoZWQoKTsKKyAgICAgICAgcmV0dXJuIGdldFBvcHVwTWVudSgpOworICAgIH0KK307
CisKK3N0YXRpYyB2b2lkIHRlc3RDb250ZXh0TWVudVNtYXJ0U2VwYXJhdG9ycyhDb250ZXh0TWVu
dVNtYXJ0U2VwYXJhdG9yc1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+
c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7CisKKyAgICB0ZXN0LT5sb2FkSHRtbCgi
PGh0bWw+PGJvZHk+V2ViS2l0R1RLKyBDb250ZXh0IG1lbnUgdGVzdHM8L2JvZHk+PC9odG1sPiIs
ICJmaWxlOi8vLyIpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAg
R3RrTWVudSogbWVudSA9IHRlc3QtPnNob3dDb250ZXh0TWVudUFuZEdldEd0a01lbnUoKTsKKyAg
ICBnX2Fzc2VydChtZW51KTsKKworICAgIC8vIExlYWRpbmcgYW5kIHRyYWlsaW5nIHNlcGFyYXRv
cnMgYXJlIG5vdCBhZGRlZCB0byB0aGUgY29udGV4dCBtZW51LgorICAgIEdPd25QdHI8R0xpc3Q+
IG1lbnVJdGVtcyhndGtfY29udGFpbmVyX2dldF9jaGlsZHJlbihHVEtfQ09OVEFJTkVSKG1lbnUp
KSk7CisgICAgZ19hc3NlcnRfY21wdWludChnX2xpc3RfbGVuZ3RoKG1lbnVJdGVtcy5nZXQoKSks
ID09LCA2KTsKKyAgICBHdGtXaWRnZXQqIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0
YShtZW51SXRlbXMuZ2V0KCksIDApKTsKKyAgICBnX2Fzc2VydCghR1RLX0lTX1NFUEFSQVRPUl9N
RU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7CisgICAgaXRl
bSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgMSkpOworICAg
IGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0
X2dldF92aXNpYmxlKGl0ZW0pKTsKKyAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2Rh
dGEobWVudUl0ZW1zLmdldCgpLCAyKSk7CisgICAgZ19hc3NlcnQoR1RLX0lTX1NFUEFSQVRPUl9N
RU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7CisgICAgaXRl
bSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgMykpOworICAg
IGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0
X2dldF92aXNpYmxlKGl0ZW0pKTsKKyAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2Rh
dGEobWVudUl0ZW1zLmdldCgpLCA0KSk7CisgICAgZ19hc3NlcnQoR1RLX0lTX1NFUEFSQVRPUl9N
RU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7CisgICAgaXRl
bSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgNSkpOworICAg
IGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0
X2dldF92aXNpYmxlKGl0ZW0pKTsKKworICAgIC8vIEhpZGluZyBhIG1lbnUgaXRlbSBiZXR3ZWVu
IHR3byBzZXBhcmF0b3JzIGhpZGVzIHRoZSBmb2xsb3dpbmcgc2VwYXJhdG9yLgorICAgIEd0a0Fj
dGlvbiogYWN0aW9uID0gZ3RrX2FjdGl2YXRhYmxlX2dldF9yZWxhdGVkX2FjdGlvbihHVEtfQUNU
SVZBVEFCTEUoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgMykpKTsKKyAgICBndGtf
YWN0aW9uX3NldF92aXNpYmxlKGFjdGlvbiwgRkFMU0UpOworICAgIG1lbnVJdGVtcy5zZXQoZ3Rr
X2NvbnRhaW5lcl9nZXRfY2hpbGRyZW4oR1RLX0NPTlRBSU5FUihtZW51KSkpOworICAgIGdfYXNz
ZXJ0X2NtcHVpbnQoZ19saXN0X2xlbmd0aChtZW51SXRlbXMuZ2V0KCkpLCA9PSwgNik7CisgICAg
aXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgMCkpOwor
ICAgIGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAmJiBndGtfd2lk
Z2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKKyAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRo
X2RhdGEobWVudUl0ZW1zLmdldCgpLCAxKSk7CisgICAgZ19hc3NlcnQoIUdUS19JU19TRVBBUkFU
T1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOworICAg
IGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDIpKTsK
KyAgICBnX2Fzc2VydChHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAmJiBndGtfd2lk
Z2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKKyAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRo
X2RhdGEobWVudUl0ZW1zLmdldCgpLCAzKSk7CisgICAgZ19hc3NlcnQoIUdUS19JU19TRVBBUkFU
T1JfTUVOVV9JVEVNKGl0ZW0pICYmICFndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKKyAg
ICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCA0KSk7
CisgICAgZ19hc3NlcnQoR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgIWd0a193
aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOworICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9u
dGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDUpKTsKKyAgICBnX2Fzc2VydCghR1RLX0lTX1NFUEFS
QVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7Cisg
ICAgZ3RrX2FjdGlvbl9zZXRfdmlzaWJsZShhY3Rpb24sIFRSVUUpOworCisgICAgLy8gU2hvd2lu
ZyBhbiBhY3Rpb24gYmV0d2VlbiB0d28gc2VwYXJhdG9ycyBzaG93cyB0aGUgaGlkZGVuIHNlcGFy
YXRvci4KKyAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdl
dCgpLCAwKSk7CisgICAgZ19hc3NlcnQoIUdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0p
ICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOworICAgIGl0ZW0gPSBHVEtfV0lER0VU
KGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDEpKTsKKyAgICBnX2Fzc2VydCghR1RL
X0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShp
dGVtKSk7CisgICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5n
ZXQoKSwgMikpOworICAgIGdfYXNzZXJ0KEdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0p
ICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOworICAgIGl0ZW0gPSBHVEtfV0lER0VU
KGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDMpKTsKKyAgICBnX2Fzc2VydCghR1RL
X0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShp
dGVtKSk7CisgICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5n
ZXQoKSwgNCkpOworICAgIGdfYXNzZXJ0KEdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0p
ICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOworICAgIGl0ZW0gPSBHVEtfV0lER0VU
KGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDUpKTsKKyAgICBnX2Fzc2VydCghR1RL
X0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShp
dGVtKSk7CisKKyAgICAvLyBUcmFpbGluZyBzZXBhcmF0b3JzIGFyZSBoaWRkZW4gdG9vLgorICAg
IGFjdGlvbiA9IGd0a19hY3RpdmF0YWJsZV9nZXRfcmVsYXRlZF9hY3Rpb24oR1RLX0FDVElWQVRB
QkxFKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDUpKSk7CisgICAgZ3RrX2FjdGlv
bl9zZXRfdmlzaWJsZShhY3Rpb24sIEZBTFNFKTsKKyAgICBtZW51SXRlbXMuc2V0KGd0a19jb250
YWluZXJfZ2V0X2NoaWxkcmVuKEdUS19DT05UQUlORVIobWVudSkpKTsKKyAgICBpdGVtID0gR1RL
X1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCAwKSk7CisgICAgZ19hc3Nl
cnQoIUdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zp
c2libGUoaXRlbSkpOworICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51
SXRlbXMuZ2V0KCksIDEpKTsKKyAgICBnX2Fzc2VydCghR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lU
RU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7CisgICAgaXRlbSA9IEdU
S19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgMikpOworICAgIGdfYXNz
ZXJ0KEdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zp
c2libGUoaXRlbSkpOworICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51
SXRlbXMuZ2V0KCksIDMpKTsKKyAgICBnX2Fzc2VydCghR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lU
RU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7CisgICAgaXRlbSA9IEdU
S19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgNCkpOworICAgIGdfYXNz
ZXJ0KEdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmICFndGtfd2lkZ2V0X2dldF92
aXNpYmxlKGl0ZW0pKTsKKyAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVu
dUl0ZW1zLmdldCgpLCA1KSk7CisgICAgZ19hc3NlcnQoIUdUS19JU19TRVBBUkFUT1JfTUVOVV9J
VEVNKGl0ZW0pICYmICFndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKK30KKwordm9pZCBi
ZWZvcmVBbGwoKQoreworICAgIENvbnRleHRNZW51RGVmYXVsdFRlc3Q6OmFkZCgiV2ViS2l0V2Vi
VmlldyIsICJkZWZhdWx0LW1lbnUiLCB0ZXN0Q29udGV4dE1lbnVEZWZhdWx0TWVudSk7CisgICAg
Q29udGV4dE1lbnVDdXN0b21UZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAicG9wdWxhdGUtbWVu
dSIsIHRlc3RDb250ZXh0TWVudVBvcHVsYXRlTWVudSk7CisgICAgQ29udGV4dE1lbnVDdXN0b21G
dWxsVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImN1c3RvbS1tZW51IiwgdGVzdENvbnRleHRN
ZW51Q3VzdG9tTWVudSk7CisgICAgQ29udGV4dE1lbnVEaXNhYmxlZFRlc3Q6OmFkZCgiV2ViS2l0
V2ViVmlldyIsICJkaXNhYmxlLW1lbnUiLCB0ZXN0Q29udGV4dE1lbnVEaXNhYmxlTWVudSk7Cisg
ICAgQ29udGV4dE1lbnVTdWJtZW51VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInN1Ym1lbnUi
LCB0ZXN0Q29udGV4dE1lbnVTdWJNZW51KTsKKyAgICBDb250ZXh0TWVudURpc21pc3NlZFRlc3Q6
OmFkZCgiV2ViS2l0V2ViVmlldyIsICJtZW51LWRpc21pc3NlZCIsIHRlc3RDb250ZXh0TWVudURp
c21pc3NlZCk7CisgICAgQ29udGV4dE1lbnVTbWFydFNlcGFyYXRvcnNUZXN0OjphZGQoIldlYktp
dFdlYlZpZXciLCAic21hcnQtc2VwYXJhdG9ycyIsIHRlc3RDb250ZXh0TWVudVNtYXJ0U2VwYXJh
dG9ycyk7Cit9CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RDb29raWVNYW5hZ2VyLmNwcCBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0Q29va2llTWFuYWdlci5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRjNmI1YgotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0Q29va2llTWFuYWdl
ci5jcHAKQEAgLTAsMCArMSwzMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlh
IFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5o
IgorI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCisjaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KKwor
c3RhdGljIFdlYktpdFRlc3RTZXJ2ZXIqIGtTZXJ2ZXI7CitzdGF0aWMgY2hhcioga1RlbXBEaXJl
Y3Rvcnk7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBrRmlyc3RQYXJ0eURvbWFpbiA9ICIxMjcuMC4w
LjEiOworc3RhdGljIGNvbnN0IGNoYXIqIGtUaGlyZFBhcnR5RG9tYWluID0gImxvY2FsaG9zdCI7
CitzdGF0aWMgY29uc3QgY2hhcioga0luZGV4SHRtbEZvcm1hdCA9CisgICAgIjxodG1sPjxib2R5
PiIKKyAgICAiIDxwPldlYktpdEdUSysgQ29va2llIE1hbmFnZXIgdGVzdDwvcD4iCisgICAgIiA8
aW1nIHNyYz0naHR0cDovL2xvY2FsaG9zdDoldS9pbWFnZS5wbmcnIHdpZHRoPTUgaGVpZ2h0PTU+
PC9pbWc+IgorICAgICI8L2JvZHk+PC9odG1sPiI7CisKK2NsYXNzIENvb2tpZU1hbmFnZXJUZXN0
OiBwdWJsaWMgV2ViVmlld1Rlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRV
UkUoQ29va2llTWFuYWdlclRlc3QpOworCisgICAgc3RhdGljIHZvaWQgY29va2llc0NoYW5nZWRD
YWxsYmFjayhXZWJLaXRDb29raWVNYW5hZ2VyKiwgQ29va2llTWFuYWdlclRlc3QqIHRlc3QpCisg
ICAgeworICAgICAgICB0ZXN0LT5tX2Nvb2tpZXNDaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgaWYg
KHRlc3QtPm1fZmluaXNoTG9vcFdoZW5Db29raWVzQ2hhbmdlKQorICAgICAgICAgICAgZ19tYWlu
X2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBDb29raWVNYW5hZ2Vy
VGVzdCgpCisgICAgICAgIDogV2ViVmlld1Rlc3QoKQorICAgICAgICAsIG1fY29va2llTWFuYWdl
cih3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Nvb2tpZV9tYW5hZ2VyKHdlYmtpdF93ZWJfdmlld19n
ZXRfY29udGV4dChtX3dlYlZpZXcpKSkKKyAgICAgICAgLCBtX2FjY2VwdFBvbGljeShXRUJLSVRf
Q09PS0lFX1BPTElDWV9BQ0NFUFRfTk9fVEhJUkRfUEFSVFkpCisgICAgICAgICwgbV9kb21haW5z
KDApCisgICAgICAgICwgbV9jb29raWVzQ2hhbmdlZChmYWxzZSkKKyAgICAgICAgLCBtX2Zpbmlz
aExvb3BXaGVuQ29va2llc0NoYW5nZShmYWxzZSkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2Nv
bm5lY3QobV9jb29raWVNYW5hZ2VyLCAiY2hhbmdlZCIsIEdfQ0FMTEJBQ0soY29va2llc0NoYW5n
ZWRDYWxsYmFjayksIHRoaXMpOworICAgIH0KKworICAgIH5Db29raWVNYW5hZ2VyVGVzdCgpCisg
ICAgeworICAgICAgICBnX3N0cmZyZWV2KG1fZG9tYWlucyk7CisgICAgICAgIGdfc2lnbmFsX2hh
bmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX2Nvb2tpZU1hbmFnZXIsIEdfU0lHTkFMX01BVENI
X0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOworICAgICAgICBpZiAobV9jb29raWVzVGV4dEZpbGUp
CisgICAgICAgICAgICBnX3VubGluayhtX2Nvb2tpZXNUZXh0RmlsZS5nZXQoKSk7CisgICAgICAg
IGlmIChtX2Nvb2tpZXNTUUxpdGVGaWxlKQorICAgICAgICAgICAgZ191bmxpbmsobV9jb29raWVz
U1FMaXRlRmlsZS5nZXQoKSk7CisgICAgfQorCisgICAgdm9pZCBzZXRQZXJzaXN0ZW50U3RvcmFn
ZShXZWJLaXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZSBzdG9yYWdlKQorICAgIHsKKyAgICAgICAg
Y29uc3QgY2hhciogZmlsZW5hbWUgPSAwOworICAgICAgICBzd2l0Y2ggKHN0b3JhZ2UpIHsKKyAg
ICAgICAgY2FzZSBXRUJLSVRfQ09PS0lFX1BFUlNJU1RFTlRfU1RPUkFHRV9URVhUOgorICAgICAg
ICAgICAgaWYgKCFtX2Nvb2tpZXNUZXh0RmlsZSkKKyAgICAgICAgICAgICAgICBtX2Nvb2tpZXNU
ZXh0RmlsZS5zZXQoZ19idWlsZF9maWxlbmFtZShrVGVtcERpcmVjdG9yeSwgImNvb2tpZXMudHh0
IiwgTlVMTCkpOworICAgICAgICAgICAgZmlsZW5hbWUgPSBtX2Nvb2tpZXNUZXh0RmlsZS5nZXQo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdFQktJVF9DT09LSUVfUEVSU0lT
VEVOVF9TVE9SQUdFX1NRTElURToKKyAgICAgICAgICAgIGlmICghbV9jb29raWVzU1FMaXRlRmls
ZSkKKyAgICAgICAgICAgICAgICBtX2Nvb2tpZXNTUUxpdGVGaWxlLnNldChnX2J1aWxkX2ZpbGVu
YW1lKGtUZW1wRGlyZWN0b3J5LCAiY29va2llcy5kYiIsIE5VTEwpKTsKKyAgICAgICAgICAgIGZp
bGVuYW1lID0gbV9jb29raWVzU1FMaXRlRmlsZS5nZXQoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAg
ICAgICAgfQorICAgICAgICB3ZWJraXRfY29va2llX21hbmFnZXJfc2V0X3BlcnNpc3RlbnRfc3Rv
cmFnZShtX2Nvb2tpZU1hbmFnZXIsIGZpbGVuYW1lLCBzdG9yYWdlKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgdm9pZCBnZXRBY2NlcHRQb2xpY3lSZWFkeUNhbGxiYWNrKEdPYmplY3QqIG9iamVjdCwg
R0FzeW5jUmVzdWx0KiByZXN1bHQsIGdwb2ludGVyIHVzZXJEYXRhKQorICAgIHsKKyAgICAgICAg
R093blB0cjxHRXJyb3I+IGVycm9yOworICAgICAgICBXZWJLaXRDb29raWVBY2NlcHRQb2xpY3kg
cG9saWN5ID0gd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5X2ZpbmlzaChX
RUJLSVRfQ09PS0lFX01BTkFHRVIob2JqZWN0KSwgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpOwor
ICAgICAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOworCisgICAgICAgIENvb2tpZU1hbmFnZXJU
ZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8Q29va2llTWFuYWdlclRlc3QqPih1c2VyRGF0YSk7Cisg
ICAgICAgIHRlc3QtPm1fYWNjZXB0UG9saWN5ID0gcG9saWN5OworICAgICAgICBnX21haW5fbG9v
cF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworICAgIH0KKworICAgIFdlYktpdENvb2tpZUFjY2Vw
dFBvbGljeSBnZXRBY2NlcHRQb2xpY3koKQorICAgIHsKKyAgICAgICAgbV9hY2NlcHRQb2xpY3kg
PSBXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfTk9fVEhJUkRfUEFSVFk7CisgICAgICAgIHdl
YmtpdF9jb29raWVfbWFuYWdlcl9nZXRfYWNjZXB0X3BvbGljeShtX2Nvb2tpZU1hbmFnZXIsIDAs
IGdldEFjY2VwdFBvbGljeVJlYWR5Q2FsbGJhY2ssIHRoaXMpOworICAgICAgICBnX21haW5fbG9v
cF9ydW4obV9tYWluTG9vcCk7CisKKyAgICAgICAgcmV0dXJuIG1fYWNjZXB0UG9saWN5OworICAg
IH0KKworICAgIHZvaWQgc2V0QWNjZXB0UG9saWN5KFdlYktpdENvb2tpZUFjY2VwdFBvbGljeSBw
b2xpY3kpCisgICAgeworICAgICAgICB3ZWJraXRfY29va2llX21hbmFnZXJfc2V0X2FjY2VwdF9w
b2xpY3kobV9jb29raWVNYW5hZ2VyLCBwb2xpY3kpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lk
IGdldERvbWFpbnNSZWFkeUNhbGxiYWNrKEdPYmplY3QqIG9iamVjdCwgR0FzeW5jUmVzdWx0KiBy
ZXN1bHQsIGdwb2ludGVyIHVzZXJEYXRhKQorICAgIHsKKyAgICAgICAgR093blB0cjxHRXJyb3I+
IGVycm9yOworICAgICAgICBjaGFyKiogZG9tYWlucyA9IHdlYmtpdF9jb29raWVfbWFuYWdlcl9n
ZXRfZG9tYWluc193aXRoX2Nvb2tpZXNfZmluaXNoKFdFQktJVF9DT09LSUVfTUFOQUdFUihvYmpl
Y3QpLCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSk7CisgICAgICAgIGdfYXNzZXJ0KCFlcnJvci5n
ZXQoKSk7CisKKyAgICAgICAgQ29va2llTWFuYWdlclRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxD
b29raWVNYW5hZ2VyVGVzdCo+KHVzZXJEYXRhKTsKKyAgICAgICAgdGVzdC0+bV9kb21haW5zID0g
ZG9tYWluczsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAg
ICB9CisKKyAgICBjaGFyKiogZ2V0RG9tYWlucygpCisgICAgeworICAgICAgICBnX3N0cmZyZWV2
KG1fZG9tYWlucyk7CisgICAgICAgIG1fZG9tYWlucyA9IDA7CisgICAgICAgIHdlYmtpdF9jb29r
aWVfbWFuYWdlcl9nZXRfZG9tYWluc193aXRoX2Nvb2tpZXMobV9jb29raWVNYW5hZ2VyLCAwLCBn
ZXREb21haW5zUmVhZHlDYWxsYmFjaywgdGhpcyk7CisgICAgICAgIGdfbWFpbl9sb29wX3J1biht
X21haW5Mb29wKTsKKworICAgICAgICByZXR1cm4gbV9kb21haW5zOworICAgIH0KKworICAgIGJv
b2wgaGFzRG9tYWluKGNvbnN0IGNoYXIqIGRvbWFpbikKKyAgICB7CisgICAgICAgIGlmICghbV9k
b21haW5zKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBtX2RvbWFpbnNbaV07ICsraSkKKyAgICAgICAgICAgIGlmIChnX3N0cl9lcXVhbCht
X2RvbWFpbnNbaV0sIGRvbWFpbikpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB2b2lkIGRlbGV0ZUNvb2tpZXNGb3JEb21h
aW4oY29uc3QgY2hhciogZG9tYWluKQorICAgIHsKKyAgICAgICAgd2Via2l0X2Nvb2tpZV9tYW5h
Z2VyX2RlbGV0ZV9jb29raWVzX2Zvcl9kb21haW4obV9jb29raWVNYW5hZ2VyLCBkb21haW4pOwor
ICAgIH0KKworICAgIHZvaWQgZGVsZXRlQWxsQ29va2llcygpCisgICAgeworICAgICAgICB3ZWJr
aXRfY29va2llX21hbmFnZXJfZGVsZXRlX2FsbF9jb29raWVzKG1fY29va2llTWFuYWdlcik7Cisg
ICAgfQorCisgICAgdm9pZCB3YWl0VW50aWxDb29raWVzQ2hhbmdlZCgpCisgICAgeworICAgICAg
ICBtX2Nvb2tpZXNDaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIG1fZmluaXNoTG9vcFdoZW5Db29r
aWVzQ2hhbmdlID0gdHJ1ZTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwor
ICAgICAgICBtX2ZpbmlzaExvb3BXaGVuQ29va2llc0NoYW5nZSA9IGZhbHNlOworICAgIH0KKwor
ICAgIFdlYktpdENvb2tpZU1hbmFnZXIqIG1fY29va2llTWFuYWdlcjsKKyAgICBXZWJLaXRDb29r
aWVBY2NlcHRQb2xpY3kgbV9hY2NlcHRQb2xpY3k7CisgICAgY2hhcioqIG1fZG9tYWluczsKKyAg
ICBib29sIG1fY29va2llc0NoYW5nZWQ7CisgICAgYm9vbCBtX2ZpbmlzaExvb3BXaGVuQ29va2ll
c0NoYW5nZTsKKyAgICBHT3duUHRyPGNoYXI+IG1fY29va2llc1RleHRGaWxlOworICAgIEdPd25Q
dHI8Y2hhcj4gbV9jb29raWVzU1FMaXRlRmlsZTsKK307CisKK3N0YXRpYyB2b2lkIHRlc3RDb29r
aWVNYW5hZ2VyQWNjZXB0UG9saWN5KENvb2tpZU1hbmFnZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2lu
dGVyKQoreworICAgIC8vIERlZmF1bHQgcG9saWN5IGlzIE5PX1RISVJEX1BBUlRZLgorICAgIGdf
YXNzZXJ0X2NtcGludCh0ZXN0LT5nZXRBY2NlcHRQb2xpY3koKSwgPT0sIFdFQktJVF9DT09LSUVf
UE9MSUNZX0FDQ0VQVF9OT19USElSRF9QQVJUWSk7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVy
LT5nZXRVUklGb3JQYXRoKCIvaW5kZXguaHRtbCIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVu
dGlsTG9hZEZpbmlzaGVkKCk7CisgICAgY2hhcioqIGRvbWFpbnMgPSB0ZXN0LT5nZXREb21haW5z
KCk7CisgICAgZ19hc3NlcnQoZG9tYWlucyk7CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9s
ZW5ndGgoZG9tYWlucyksID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoZG9tYWluc1swXSwg
PT0sIGtGaXJzdFBhcnR5RG9tYWluKTsKKyAgICB0ZXN0LT5kZWxldGVBbGxDb29raWVzKCk7CisK
KyAgICB0ZXN0LT5zZXRBY2NlcHRQb2xpY3koV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX0FM
V0FZUyk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPmdldEFjY2VwdFBvbGljeSgpLCA9PSwg
V0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX0FMV0FZUyk7CisgICAgdGVzdC0+bG9hZFVSSShr
U2VydmVyLT5nZXRVUklGb3JQYXRoKCIvaW5kZXguaHRtbCIpLmRhdGEoKSk7CisgICAgdGVzdC0+
d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZG9tYWlucyA9IHRlc3QtPmdldERvbWFpbnMo
KTsKKyAgICBnX2Fzc2VydChkb21haW5zKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xl
bmd0aChkb21haW5zKSwgPT0sIDIpOworICAgIGdfYXNzZXJ0KHRlc3QtPmhhc0RvbWFpbihrRmly
c3RQYXJ0eURvbWFpbikpOworICAgIGdfYXNzZXJ0KHRlc3QtPmhhc0RvbWFpbihrVGhpcmRQYXJ0
eURvbWFpbikpOworICAgIHRlc3QtPmRlbGV0ZUFsbENvb2tpZXMoKTsKKworICAgIHRlc3QtPnNl
dEFjY2VwdFBvbGljeShXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfTkVWRVIpOworICAgIGdf
YXNzZXJ0X2NtcGludCh0ZXN0LT5nZXRBY2NlcHRQb2xpY3koKSwgPT0sIFdFQktJVF9DT09LSUVf
UE9MSUNZX0FDQ0VQVF9ORVZFUik7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklG
b3JQYXRoKCIvaW5kZXguaHRtbCIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZp
bmlzaGVkKCk7CisgICAgZG9tYWlucyA9IHRlc3QtPmdldERvbWFpbnMoKTsKKyAgICBnX2Fzc2Vy
dChkb21haW5zKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aChkb21haW5zKSwg
PT0sIDApOworfQorCitzdGF0aWMgdm9pZCB0ZXN0Q29va2llTWFuYWdlckRlbGV0ZUNvb2tpZXMo
Q29va2llTWFuYWdlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+c2V0
QWNjZXB0UG9saWN5KFdFQktJVF9DT09LSUVfUE9MSUNZX0FDQ0VQVF9BTFdBWVMpOworICAgIHRl
c3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2luZGV4Lmh0bWwiKS5kYXRhKCkp
OworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChnX3N0cnZfbGVuZ3RoKHRlc3QtPmdldERvbWFpbnMoKSksID09LCAyKTsKKworICAgIC8vIERl
bGV0ZSBmaXJzdCBwYXJ0eSBjb29raWVzLgorICAgIHRlc3QtPmRlbGV0ZUNvb2tpZXNGb3JEb21h
aW4oa0ZpcnN0UGFydHlEb21haW4pOworICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3Ro
KHRlc3QtPmdldERvbWFpbnMoKSksID09LCAxKTsKKworICAgIC8vIERlbGV0ZSB0aGlyZCBwYXJ0
eSBjb29raWVzLgorICAgIHRlc3QtPmRlbGV0ZUNvb2tpZXNGb3JEb21haW4oa1RoaXJkUGFydHlE
b21haW4pOworICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKHRlc3QtPmdldERvbWFp
bnMoKSksID09LCAwKTsKKworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0
aCgiL2luZGV4Lmh0bWwiKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hl
ZCgpOworICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKHRlc3QtPmdldERvbWFpbnMo
KSksID09LCAyKTsKKworICAgIC8vIERlbGV0ZSBhbGwgY29va2llcy4KKyAgICB0ZXN0LT5kZWxl
dGVBbGxDb29raWVzKCk7CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgodGVzdC0+
Z2V0RG9tYWlucygpKSwgPT0sIDApOworfQorCitzdGF0aWMgdm9pZCB0ZXN0Q29va2llTWFuYWdl
ckNvb2tpZXNDaGFuZ2VkKENvb2tpZU1hbmFnZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQor
eworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX2Nvb2tpZXNDaGFuZ2VkKTsKKyAgICB0ZXN0LT5zZXRB
Y2NlcHRQb2xpY3koV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX0FMV0FZUyk7CisgICAgdGVz
dC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvaW5kZXguaHRtbCIpLmRhdGEoKSk7
CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnQodGVzdC0+
bV9jb29raWVzQ2hhbmdlZCk7CisKKyAgICB0ZXN0LT5kZWxldGVDb29raWVzRm9yRG9tYWluKGtG
aXJzdFBhcnR5RG9tYWluKTsKKyAgICB0ZXN0LT53YWl0VW50aWxDb29raWVzQ2hhbmdlZCgpOwor
ICAgIGdfYXNzZXJ0KHRlc3QtPm1fY29va2llc0NoYW5nZWQpOworCisgICAgdGVzdC0+ZGVsZXRl
QWxsQ29va2llcygpOworICAgIHRlc3QtPndhaXRVbnRpbENvb2tpZXNDaGFuZ2VkKCk7CisgICAg
Z19hc3NlcnQodGVzdC0+bV9jb29raWVzQ2hhbmdlZCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RD
b29raWVNYW5hZ2VyUGVyc2lzdGVudFN0b3JhZ2UoQ29va2llTWFuYWdlclRlc3QqIHRlc3QsIGdj
b25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+c2V0QWNjZXB0UG9saWN5KFdFQktJVF9DT09LSUVf
UE9MSUNZX0FDQ0VQVF9BTFdBWVMpOworCisgICAgLy8gVGV4dCBzdG9yYWdlIHVzaW5nIGEgbmV3
IGZpbGUuCisgICAgdGVzdC0+c2V0UGVyc2lzdGVudFN0b3JhZ2UoV0VCS0lUX0NPT0tJRV9QRVJT
SVNURU5UX1NUT1JBR0VfVEVYVCk7CisgICAgY2hhcioqIGRvbWFpbnMgPSB0ZXN0LT5nZXREb21h
aW5zKCk7CisgICAgZ19hc3NlcnQoZG9tYWlucyk7CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Ry
dl9sZW5ndGgoZG9tYWlucyksID09LCAwKTsKKworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+
Z2V0VVJJRm9yUGF0aCgiL2luZGV4Lmh0bWwiKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRp
bExvYWRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fY29va2llc0NoYW5nZWQpOwor
ICAgIGRvbWFpbnMgPSB0ZXN0LT5nZXREb21haW5zKCk7CisgICAgZ19hc3NlcnQoZG9tYWlucyk7
CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgoZG9tYWlucyksID09LCAyKTsKKwor
CisgICAgLy8gU1FMaXRlIHN0b3JhZ2UgdXNpbmcgYSBuZXcgZmlsZS4KKyAgICB0ZXN0LT5zZXRQ
ZXJzaXN0ZW50U3RvcmFnZShXRUJLSVRfQ09PS0lFX1BFUlNJU1RFTlRfU1RPUkFHRV9TUUxJVEUp
OworICAgIGRvbWFpbnMgPSB0ZXN0LT5nZXREb21haW5zKCk7CisgICAgZ19hc3NlcnQoZG9tYWlu
cyk7CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgoZG9tYWlucyksID09LCAwKTsK
KworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2luZGV4Lmh0bWwi
KS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIGdfYXNz
ZXJ0KHRlc3QtPm1fY29va2llc0NoYW5nZWQpOworICAgIGRvbWFpbnMgPSB0ZXN0LT5nZXREb21h
aW5zKCk7CisgICAgZ19hc3NlcnQoZG9tYWlucyk7CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Ry
dl9sZW5ndGgoZG9tYWlucyksID09LCAyKTsKKworICAgIC8vIFRleHQgc3RvcmFnZSB1c2luZyBh
biBleGlzdGluZyBmaWxlLgorICAgIHRlc3QtPnNldFBlcnNpc3RlbnRTdG9yYWdlKFdFQktJVF9D
T09LSUVfUEVSU0lTVEVOVF9TVE9SQUdFX1RFWFQpOworICAgIGRvbWFpbnMgPSB0ZXN0LT5nZXRE
b21haW5zKCk7CisgICAgZ19hc3NlcnQoZG9tYWlucyk7CisgICAgZ19hc3NlcnRfY21waW50KGdf
c3Rydl9sZW5ndGgoZG9tYWlucyksID09LCAyKTsKKyAgICB0ZXN0LT5kZWxldGVBbGxDb29raWVz
KCk7CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlucygp
KSwgPT0sIDApOworCisgICAgLy8gU1FMaXRlIHN0b3JhZ2Ugd2l0aCBhbiBleGlzdGluZyBmaWxl
LgorICAgIHRlc3QtPnNldFBlcnNpc3RlbnRTdG9yYWdlKFdFQktJVF9DT09LSUVfUEVSU0lTVEVO
VF9TVE9SQUdFX1NRTElURSk7CisgICAgZG9tYWlucyA9IHRlc3QtPmdldERvbWFpbnMoKTsKKyAg
ICBnX2Fzc2VydChkb21haW5zKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aChk
b21haW5zKSwgPT0sIDIpOworICAgIHRlc3QtPmRlbGV0ZUFsbENvb2tpZXMoKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0LT5nZXREb21haW5zKCkpLCA9PSwgMCk7Cit9
CisKK3N0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1l
c3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqLCBTb3VwQ2xpZW50
Q29udGV4dCosIGdwb2ludGVyKQoreworICAgIGlmIChtZXNzYWdlLT5tZXRob2QgIT0gU09VUF9N
RVRIT0RfR0VUKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNP
VVBfU1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7CisgICAg
aWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvaW5kZXguaHRtbCIpKSB7CisgICAgICAgIGNoYXIqIGlu
ZGV4SHRtbCA9IGdfc3RyZHVwX3ByaW50ZihrSW5kZXhIdG1sRm9ybWF0LCBzb3VwX3NlcnZlcl9n
ZXRfcG9ydChzZXJ2ZXIpKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfcmVwbGFjZSht
ZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiU2V0LUNvb2tpZSIsICJmb289YmFyOyBNYXgtQWdl
PTYwIik7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25z
ZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBpbmRleEh0bWwsIHN0cmxlbihpbmRleEh0bWwpKTsK
KyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvaW1hZ2UucG5nIikpCisgICAgICAg
IHNvdXBfbWVzc2FnZV9oZWFkZXJzX3JlcGxhY2UobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywg
IlNldC1Db29raWUiLCAiYmF6PXF1eDsgTWF4LUFnZT02MCIpOworICAgIGVsc2UKKyAgICAgICAg
c291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0ZPVU5EKTsK
KyAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsK
K30KKwordm9pZCBiZWZvcmVBbGwoKQoreworICAgIGtTZXJ2ZXIgPSBuZXcgV2ViS2l0VGVzdFNl
cnZlcigpOworICAgIGtTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFjayk7CisKKyAgICBrVGVtcERp
cmVjdG9yeSA9IGdfZGlyX21ha2VfdG1wKCJXZWJLaXQyVGVzdHMtWFhYWFhYIiwgMCk7CisgICAg
Z19hc3NlcnQoa1RlbXBEaXJlY3RvcnkpOworCisgICAgQ29va2llTWFuYWdlclRlc3Q6OmFkZCgi
V2ViS2l0Q29va2llTWFuYWdlciIsICJhY2NlcHQtcG9saWN5IiwgdGVzdENvb2tpZU1hbmFnZXJB
Y2NlcHRQb2xpY3kpOworICAgIENvb2tpZU1hbmFnZXJUZXN0OjphZGQoIldlYktpdENvb2tpZU1h
bmFnZXIiLCAiZGVsZXRlLWNvb2tpZXMiLCB0ZXN0Q29va2llTWFuYWdlckRlbGV0ZUNvb2tpZXMp
OworICAgIENvb2tpZU1hbmFnZXJUZXN0OjphZGQoIldlYktpdENvb2tpZU1hbmFnZXIiLCAiY29v
a2llcy1jaGFuZ2VkIiwgdGVzdENvb2tpZU1hbmFnZXJDb29raWVzQ2hhbmdlZCk7CisgICAgQ29v
a2llTWFuYWdlclRlc3Q6OmFkZCgiV2ViS2l0Q29va2llTWFuYWdlciIsICJwZXJzaXN0ZW50LXN0
b3JhZ2UiLCB0ZXN0Q29va2llTWFuYWdlclBlcnNpc3RlbnRTdG9yYWdlKTsKK30KKwordm9pZCBh
ZnRlckFsbCgpCit7CisgICAgZGVsZXRlIGtTZXJ2ZXI7CisgICAgZ19ybWRpcihrVGVtcERpcmVj
dG9yeSk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJH
dGsvVGVzdERPTURPTVdpbmRvdy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dDJHdGsvVGVzdERPTURPTVdpbmRvdy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uOThjNmUxMAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Mkd0ay9UZXN0RE9NRE9NV2luZG93LmNwcApAQCAtMCwwICsxLDE1MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Rlc3RSdW5uZXIuaCIKKyNpbmNsdWRlICJXZWJWaWV3VGVz
dC5oIgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdDIuaD4K
KworI2RlZmluZSBIVE1MX0RPQ1VNRU5UICI8aHRtbD48aGVhZD48dGl0bGU+PC90aXRsZT48L2hl
YWQ+PHN0eWxlIHR5cGU9J3RleHQvY3NzJz4jdGVzdCB7IGZvbnQtc2l6ZTogMTZweDsgfTwvc3R5
bGU+PGJvZHk+PHAgaWQ9J3Rlc3QnPnRlc3Q8L3A+PC9ib2R5PjwvaHRtbD4iCisKK3R5cGVkZWYg
c3RydWN0IHsKKyAgICBnYm9vbGVhbiBsb2FkZWQ7CisgICAgZ2Jvb2xlYW4gY2xpY2tlZDsKKyAg
ICBXZWJQcm9jZXNzVGVzdFJ1bm5lciogdGVzdFJ1bm5lcjsKKyAgICBXZWJWaWV3VGVzdCogdGVz
dDsKK30gRG9tRG9tV2luZG93VGVzdFN0YXR1czsKKworc3RhdGljIERvbURvbVdpbmRvd1Rlc3RT
dGF0dXMgc3RhdHVzOworCitzdGF0aWMgdm9pZCBzaWduYWxzTm90aWZ5Q2FsbGJhY2soY29uc3Qg
Z2NoYXIgKmtleSwgY29uc3QgZ2NoYXIgKnZhbHVlLCBnY29uc3Rwb2ludGVyKQoreworICAgIGlm
IChnX3N0cl9lcXVhbChrZXksICJyZWFkeSIpKSB7CisgICAgICAgIC8vIFRoZSBkb2N1bWVudCB3
YXMgYWxyZWFkeSBsb2FkZWQgaW4gdGhlIHdlYnByb2Nlc3MsIGFuZCBpdHMgImxvYWQiCisgICAg
ICAgIC8vIHNpZ25hbCBjb3VsZG4ndCBiZSBjYXB0dXJlZCBvbiB0aW1lICh3YXMgaXNzdWVkIGJl
Zm9yZSB0aGUgdGVzdAorICAgICAgICAvLyBzdGFydGVkKS4gV2UgbG9hZCBpdCBhZ2FpbiB0byBm
b3JjZSBhIG5ldyAibG9hZCIgc2lnbmFsIGluIHRoZQorICAgICAgICAvLyB3ZWJwcm9jZXNzLCB3
aGljaCB3aWxsIGJlIGNhcHR1cmVkIHRoaXMgdGltZQorICAgICAgICBzdGF0dXMudGVzdC0+bG9h
ZEh0bWwoSFRNTF9ET0NVTUVOVCwgMCk7CisgICAgfQorCisgICAgaWYgKGdfc3RyX2VxdWFsKGtl
eSwgImxvYWRlZCIpKSB7CisgICAgICAgIHN0YXR1cy5sb2FkZWQgPSBUUlVFOworICAgICAgICBz
dGF0dXMudGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7CisKKyAgICAgICAg
Ly8gQ2xpY2sgaW4gYSBrbm93biBsb2NhdGlvbiB3aGVyZSB0aGUgdGV4dCBpcworICAgICAgICBz
dGF0dXMudGVzdC0+Y2xpY2tNb3VzZUJ1dHRvbigyMCwgMTgsIDEsIDApOworICAgIH0KKworICAg
IGlmIChnX3N0cl9lcXVhbChrZXksICJjbGlja2VkIikpCisgICAgICAgIHN0YXR1cy5jbGlja2Vk
ID0gVFJVRTsKKworICAgIGlmIChnX3N0cl9lcXVhbChrZXksICJmaW5pc2giKSkgeworICAgICAg
ICBzdGF0dXMudGVzdCA9IDA7CisgICAgICAgIHN0YXR1cy50ZXN0UnVubmVyLT5maW5pc2hUZXN0
KHN0YXR1cy5sb2FkZWQgJiYgc3RhdHVzLmNsaWNrZWQpOworICAgIH0KK30KKworc3RhdGljIHZv
aWQgZGlzcGF0Y2hFdmVudE5vdGlmeUNhbGxiYWNrKGNvbnN0IGdjaGFyICprZXksIGNvbnN0IGdj
aGFyICp2YWx1ZSwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBpZiAoZ19zdHJfZXF1YWwoa2V5LCAi
cmVhZHkiKSkgeworICAgICAgICAvLyBUaGUgZG9jdW1lbnQgd2FzIGFscmVhZHkgbG9hZGVkIGlu
IHRoZSB3ZWJwcm9jZXNzLCBhbmQgaXRzICJsb2FkIgorICAgICAgICAvLyBzaWduYWwgY291bGRu
J3QgYmUgY2FwdHVyZWQgb24gdGltZSAod2FzIGlzc3VlZCBiZWZvcmUgdGhlIHRlc3QKKyAgICAg
ICAgLy8gc3RhcnRlZCkuIFdlIGxvYWQgaXQgYWdhaW4gdG8gZm9yY2UgYSBuZXcgImxvYWQiIHNp
Z25hbCBpbiB0aGUKKyAgICAgICAgLy8gd2VicHJvY2Vzcywgd2hpY2ggd2lsbCBiZSBjYXB0dXJl
ZCB0aGlzIHRpbWUKKyAgICAgICAgc3RhdHVzLnRlc3QtPmxvYWRIdG1sKEhUTUxfRE9DVU1FTlQs
IDApOworICAgIH0KKworICAgIGlmIChnX3N0cl9lcXVhbChrZXksICJsb2FkZWQiKSkKKyAgICAg
ICAgc3RhdHVzLmxvYWRlZCA9IFRSVUU7CisKKyAgICBpZiAoZ19zdHJfZXF1YWwoa2V5LCAiY2xp
Y2tlZCIpKQorICAgICAgICBzdGF0dXMuY2xpY2tlZCA9IFRSVUU7CisKKyAgICBpZiAoZ19zdHJf
ZXF1YWwoa2V5LCAiZmluaXNoIikpIHsKKyAgICAgICAgc3RhdHVzLnRlc3QgPSAwOworICAgICAg
ICBzdGF0dXMudGVzdFJ1bm5lci0+ZmluaXNoVGVzdChzdGF0dXMubG9hZGVkICYmIHN0YXR1cy5j
bGlja2VkKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJLaXRET01ET01XaW5kb3dT
aWduYWxzKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHN0YXR1cy5s
b2FkZWQgPSBGQUxTRTsKKyAgICBzdGF0dXMuY2xpY2tlZCA9IEZBTFNFOworICAgIHN0YXR1cy50
ZXN0ID0gdGVzdDsKKworICAgIHN0YXR1cy50ZXN0UnVubmVyLT5zZXROb3RpZnlDYWxsYmFjayhH
X0NBTExCQUNLKHNpZ25hbHNOb3RpZnlDYWxsYmFjayksIDApOworCisgICAgLy8gVGhlIEhUTUwg
ZG9jdW1lbnQgd2lsbCB3ZSBsb2FkZWQgbGF0ZXIsIHdoZW4gdGhlIHRlc3QgaXMgInJlYWR5IiBi
ZWNhdXNlCisgICAgLy8gd2Ugd2FudCB0byB0ZXN0IHRoZSAibG9hZCIgc2lnbmFsCisKKyAgICBH
VmFyaWFudEJ1aWxkZXIgYnVpbGRlcjsKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9pbml0KCZidWls
ZGVyLCBHX1ZBUklBTlRfVFlQRV9WQVJESUNUKTsKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQo
JmJ1aWxkZXIsICJ7c3Z9IiwgInBhZ2VJRCIsIGdfdmFyaWFudF9uZXdfdWludDY0KHdlYmtpdF93
ZWJfdmlld19nZXRfcGFnZV9pZChzdGF0dXMudGVzdC0+bV93ZWJWaWV3KSkpOworICAgIHN0YXR1
cy50ZXN0UnVubmVyLT5ydW5UZXN0QW5kV2FpdCgiV2ViS2l0RE9NRE9NV2luZG93IiwgInNpZ25h
bHMiLCBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQoJmJ1aWxkZXIpKTsKKyAgICBnX2Fzc2VydChzdGF0
dXMudGVzdFJ1bm5lci0+Z2V0VGVzdFJlc3VsdCgpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdl
YktpdERPTURPTVdpbmRvd0Rpc3BhdGNoRXZlbnQoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBv
aW50ZXIpCit7CisgICAgc3RhdHVzLmxvYWRlZCA9IEZBTFNFOworICAgIHN0YXR1cy5jbGlja2Vk
ID0gRkFMU0U7CisgICAgc3RhdHVzLnRlc3QgPSB0ZXN0OworCisgICAgc3RhdHVzLnRlc3RSdW5u
ZXItPnNldE5vdGlmeUNhbGxiYWNrKEdfQ0FMTEJBQ0soZGlzcGF0Y2hFdmVudE5vdGlmeUNhbGxi
YWNrKSwgMCk7CisKKyAgICAvLyBUaGUgSFRNTCBkb2N1bWVudCB3aWxsIHdlIGxvYWRlZCBsYXRl
ciwgd2hlbiB0aGUgdGVzdCBpcyAicmVhZHkiIGJlY2F1c2UKKyAgICAvLyB3ZSB3YW50IHRvIHRl
c3QgdGhlICJsb2FkIiBzaWduYWwKKworICAgIEdWYXJpYW50QnVpbGRlciBidWlsZGVyOworICAg
IGdfdmFyaWFudF9idWlsZGVyX2luaXQoJmJ1aWxkZXIsIEdfVkFSSUFOVF9UWVBFX1ZBUkRJQ1Qp
OworICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZCgmYnVpbGRlciwgIntzdn0iLCAicGFnZUlEIiwg
Z192YXJpYW50X25ld191aW50NjQod2Via2l0X3dlYl92aWV3X2dldF9wYWdlX2lkKHN0YXR1cy50
ZXN0LT5tX3dlYlZpZXcpKSk7CisgICAgc3RhdHVzLnRlc3RSdW5uZXItPnJ1blRlc3RBbmRXYWl0
KCJXZWJLaXRET01ET01XaW5kb3ciLCAiZGlzcGF0Y2gtZXZlbnQiLCBnX3ZhcmlhbnRfYnVpbGRl
cl9lbmQoJmJ1aWxkZXIpKTsKKyAgICBnX2Fzc2VydChzdGF0dXMudGVzdFJ1bm5lci0+Z2V0VGVz
dFJlc3VsdCgpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYktpdERPTURPTVdpbmRvd0dldENv
bXB1dGVkU3R5bGUoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgc3Rh
dHVzLmxvYWRlZCA9IEZBTFNFOworICAgIHN0YXR1cy5jbGlja2VkID0gRkFMU0U7CisgICAgc3Rh
dHVzLnRlc3QgPSB0ZXN0OworCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHRlc3RIVE1MID0gSFRN
TF9ET0NVTUVOVDsKKyAgICBzdGF0dXMudGVzdC0+bG9hZEh0bWwodGVzdEhUTUwsIDApOworICAg
IHN0YXR1cy50ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIEdWYXJpYW50QnVp
bGRlciBidWlsZGVyOworICAgIGdfdmFyaWFudF9idWlsZGVyX2luaXQoJmJ1aWxkZXIsIEdfVkFS
SUFOVF9UWVBFX1ZBUkRJQ1QpOworICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZCgmYnVpbGRlciwg
Intzdn0iLCAicGFnZUlEIiwgZ192YXJpYW50X25ld191aW50NjQod2Via2l0X3dlYl92aWV3X2dl
dF9wYWdlX2lkKHN0YXR1cy50ZXN0LT5tX3dlYlZpZXcpKSk7CisgICAgZ19hc3NlcnQoc3RhdHVz
LnRlc3RSdW5uZXItPnJ1blRlc3QoIldlYktpdERPTURPTVdpbmRvdyIsICJnZXQtY29tcHV0ZWQt
c3R5bGUiLCBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQoJmJ1aWxkZXIpKSk7Cit9CisKK3ZvaWQgYmVm
b3JlQWxsKCkKK3sKKyAgICBzdGF0dXMudGVzdFJ1bm5lciA9IG5ldyBXZWJQcm9jZXNzVGVzdFJ1
bm5lcigpOworICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfd2ViX2V4dGVuc2lvbnNfZGlyZWN0
b3J5KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpLCBXRUJLSVRfVEVTVF9XRUJfRVhU
RU5TSU9OU19ESVIpOworCisgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0RE9NRE9NV2luZG93
IiwgInNpZ25hbHMiLCB0ZXN0V2ViS2l0RE9NRE9NV2luZG93U2lnbmFscyk7CisgICAgV2ViVmll
d1Rlc3Q6OmFkZCgiV2ViS2l0RE9NRE9NV2luZG93IiwgImRpc3BhdGNoLWV2ZW50IiwgdGVzdFdl
YktpdERPTURPTVdpbmRvd0Rpc3BhdGNoRXZlbnQpOworICAgIFdlYlZpZXdUZXN0OjphZGQoIldl
YktpdERPTURPTVdpbmRvdyIsICJnZXQtY29tcHV0ZWQtc3R5bGUiLCB0ZXN0V2ViS2l0RE9NRE9N
V2luZG93R2V0Q29tcHV0ZWRTdHlsZSk7Cit9CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworICAgIGRl
bGV0ZSBzdGF0dXMudGVzdFJ1bm5lcjsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0RE9NTm9kZS5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdDJHdGsvVGVzdERPTU5vZGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmJkMzIwNzcKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdERPTU5vZGUuY3BwCkBAIC0wLDAgKzEsODcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2luY2x1ZGUgIldlYlByb2Nlc3NUZXN0UnVubmVyLmgiCisjaW5jbHVkZSAiV2ViVmlld1Rl
c3QuaCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+
CisKK3N0YXRpYyBXZWJQcm9jZXNzVGVzdFJ1bm5lciogdGVzdFJ1bm5lcjsKKworc3RhdGljIHZv
aWQgdGVzdFdlYktpdERPTU5vZGVIaWVyYXJjaHlOYXZpZ2F0aW9uKFdlYlZpZXdUZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyKiB0ZXN0SFRNTCA9ICI8
aHRtbD48aGVhZD48dGl0bGU+VGhpcyBpcyB0aGUgdGl0bGU8L3RpdGxlPjwvaGVhZD48Ym9keT48
cD4xPC9wPjxwPjI8L3A+PHA+MzwvcD48L2JvZHk+PC9odG1sPiI7CisgICAgdGVzdC0+bG9hZEh0
bWwodGVzdEhUTUwsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisg
ICAgR1ZhcmlhbnRCdWlsZGVyIGJ1aWxkZXI7CisgICAgZ192YXJpYW50X2J1aWxkZXJfaW5pdCgm
YnVpbGRlciwgR19WQVJJQU5UX1RZUEVfVkFSRElDVCk7CisgICAgZ192YXJpYW50X2J1aWxkZXJf
YWRkKCZidWlsZGVyLCAie3N2fSIsICJwYWdlSUQiLCBnX3ZhcmlhbnRfbmV3X3VpbnQ2NCh3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X3BhZ2VfaWQodGVzdC0+bV93ZWJWaWV3KSkpOworICAgIGdfYXNzZXJ0
KHRlc3RSdW5uZXItPnJ1blRlc3QoIldlYktpdERPTU5vZGUiLCAiaGllcmFyY2h5LW5hdmlnYXRp
b24iLCBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQoJmJ1aWxkZXIpKSk7Cit9CisKK3N0YXRpYyB2b2lk
IHRlc3RXZWJLaXRET01Ob2RlSW5zZXJ0aW9uKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2lu
dGVyKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyKiB0ZXN0SFRNTCA9ICI8aHRtbD48Ym9keT48
L2JvZHk+PC9odG1sPiI7CisgICAgdGVzdC0+bG9hZEh0bWwodGVzdEhUTUwsIDApOworICAgIHRl
c3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgR1ZhcmlhbnRCdWlsZGVyIGJ1aWxk
ZXI7CisgICAgZ192YXJpYW50X2J1aWxkZXJfaW5pdCgmYnVpbGRlciwgR19WQVJJQU5UX1RZUEVf
VkFSRElDVCk7CisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKCZidWlsZGVyLCAie3N2fSIsICJw
YWdlSUQiLCBnX3ZhcmlhbnRfbmV3X3VpbnQ2NCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3BhZ2VfaWQo
dGVzdC0+bV93ZWJWaWV3KSkpOworICAgIGdfYXNzZXJ0KHRlc3RSdW5uZXItPnJ1blRlc3QoIldl
YktpdERPTU5vZGUiLCAiaW5zZXJ0aW9uIiwgZ192YXJpYW50X2J1aWxkZXJfZW5kKCZidWlsZGVy
KSkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViS2l0RE9NTm9kZVRhZ05hbWVzKFdlYlZpZXdU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyKiB0ZXN0
SFRNTCA9ICI8aHRtbD48aGVhZD48L2hlYWQ+PGJvZHk+IgorICAgICAgICAiPHZpZGVvIGlkPSd2
aWRlbycgcHJlbG9hZD0nbm9uZSc+IgorICAgICAgICAiICAgIDxzb3VyY2Ugc3JjPSdtb3ZpZS5v
Z2cnIHR5cGU9J3ZpZGVvL29nZyc+IgorICAgICAgICAiICAgICAgICBZb3VyIGJyb3dzZXIgZG9l
cyBub3Qgc3VwcG9ydCB0aGUgdmlkZW8gdGFnLiIKKyAgICAgICAgIjwvdmlkZW8+IgorICAgICAg
ICAiPHZpZGVvIGlkPSd2aWRlbzInIHByZWxvYWQ9J25vbmUnPiIKKyAgICAgICAgIiAgICAgPHNv
dXJjZSBzcmM9J21vdmllLm9nZycgdHlwZT0ndmlkZW8vb2dnJz4iCisgICAgICAgICIgICAgICAg
IFlvdXIgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSB2aWRlbyB0YWcuIgorICAgICAgICAi
PC92aWRlbz4iCisgICAgICAgICI8aW5wdXQgdHlwZT0naGlkZGVuJyBpZD0ndGVzdCcgbmFtZT0n
ZmluaXNoJyB2YWx1ZT0nZmFsc2UnPjwvYm9keT48L2h0bWw+IjsKKyAgICB0ZXN0LT5sb2FkSHRt
bCh0ZXN0SFRNTCwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAg
ICBHVmFyaWFudEJ1aWxkZXIgYnVpbGRlcjsKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9pbml0KCZi
dWlsZGVyLCBHX1ZBUklBTlRfVFlQRV9WQVJESUNUKTsKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9h
ZGQoJmJ1aWxkZXIsICJ7c3Z9IiwgInBhZ2VJRCIsIGdfdmFyaWFudF9uZXdfdWludDY0KHdlYmtp
dF93ZWJfdmlld19nZXRfcGFnZV9pZCh0ZXN0LT5tX3dlYlZpZXcpKSk7CisgICAgZ19hc3NlcnQo
dGVzdFJ1bm5lci0+cnVuVGVzdCgiV2ViS2l0RE9NTm9kZSIsICJ0YWctbmFtZXMiLCBnX3Zhcmlh
bnRfYnVpbGRlcl9lbmQoJmJ1aWxkZXIpKSk7Cit9CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAg
ICB0ZXN0UnVubmVyID0gbmV3IFdlYlByb2Nlc3NUZXN0UnVubmVyKCk7CisgICAgd2Via2l0X3dl
Yl9jb250ZXh0X3NldF93ZWJfZXh0ZW5zaW9uc19kaXJlY3Rvcnkod2Via2l0X3dlYl9jb250ZXh0
X2dldF9kZWZhdWx0KCksIFdFQktJVF9URVNUX1dFQl9FWFRFTlNJT05TX0RJUik7CisKKyAgICBX
ZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRET01Ob2RlIiwgImhpZXJhcmNoeS1uYXZpZ2F0aW9uIiwg
dGVzdFdlYktpdERPTU5vZGVIaWVyYXJjaHlOYXZpZ2F0aW9uKTsKKyAgICBXZWJWaWV3VGVzdDo6
YWRkKCJXZWJLaXRET01Ob2RlIiwgImluc2VydGlvbiIsIHRlc3RXZWJLaXRET01Ob2RlSW5zZXJ0
aW9uKTsKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRET01Ob2RlIiwgInRhZy1uYW1lcyIs
IHRlc3RXZWJLaXRET01Ob2RlVGFnTmFtZXMpOworfQorCit2b2lkIGFmdGVyQWxsKCkKK3sKKyAg
ICBkZWxldGUgdGVzdFJ1bm5lcjsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Mkd0ay9UZXN0RG93bmxvYWRzLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Mkd0ay9UZXN0RG93bmxvYWRzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5jZTE1OTkwCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3REb3dubG9hZHMuY3BwCkBAIC0wLDAgKzEsNTIyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2luY2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKKyNpbmNsdWRlICJXZWJWaWV3VGVz
dC5oIgorI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2lu
Y2x1ZGUgPGxpYnNvdXAvc291cC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHdl
YmtpdDIvd2Via2l0Mi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYv
Z29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworc3RhdGljIGNoYXIqIGtUZW1wRGlyZWN0b3J5
OworCitjbGFzcyBEb3dubG9hZFRlc3Q6IHB1YmxpYyBUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtF
X0dMSUJfVEVTVF9GSVhUVVJFKERvd25sb2FkVGVzdCk7CisKKyAgICBlbnVtIERvd25sb2FkRXZl
bnQgeworICAgICAgICBTdGFydGVkLAorICAgICAgICBSZWNlaXZlZFJlc3BvbnNlLAorICAgICAg
ICBDcmVhdGVkRGVzdGluYXRpb24sCisgICAgICAgIFJlY2VpdmVkRGF0YSwKKyAgICAgICAgRmFp
bGVkLAorICAgICAgICBGaW5pc2hlZAorICAgIH07CisKKyAgICBzdGF0aWMgdm9pZCByZWNlaXZl
ZFJlc3BvbnNlQ2FsbGJhY2soV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBHUGFyYW1TcGVjKiwg
RG93bmxvYWRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X2Rvd25s
b2FkX2dldF9yZXNwb25zZShkb3dubG9hZCkpOworICAgICAgICB0ZXN0LT5yZWNlaXZlZFJlc3Bv
bnNlKGRvd25sb2FkKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gY3JlYXRlZERlc3Rp
bmF0aW9uQ2FsbGJhY2soV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBjb25zdCBnY2hhciogZGVz
dGluYXRpb24sIERvd25sb2FkVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KHdl
YmtpdF9kb3dubG9hZF9nZXRfZGVzdGluYXRpb24oZG93bmxvYWQpKTsKKyAgICAgICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF9kb3dubG9hZF9nZXRfZGVzdGluYXRpb24oZG93bmxvYWQpLCA9PSwg
ZGVzdGluYXRpb24pOworICAgICAgICB0ZXN0LT5jcmVhdGVkRGVzdGluYXRpb24oZG93bmxvYWQs
IGRlc3RpbmF0aW9uKTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgc3RhdGlj
IGdib29sZWFuIHJlY2VpdmVkRGF0YUNhbGxiYWNrKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwg
Z3VpbnQ2NCBkYXRhTGVuZ3RoLCBEb3dubG9hZFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICB0
ZXN0LT5yZWNlaXZlZERhdGEoZG93bmxvYWQsIGRhdGFMZW5ndGgpOworICAgICAgICByZXR1cm4g
VFJVRTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gZmluaXNoZWRDYWxsYmFjayhXZWJL
aXREb3dubG9hZCogZG93bmxvYWQsIERvd25sb2FkVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAg
IHRlc3QtPmZpbmlzaGVkKGRvd25sb2FkKTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQor
CisgICAgc3RhdGljIGdib29sZWFuIGZhaWxlZENhbGxiYWNrKFdlYktpdERvd25sb2FkKiBkb3du
bG9hZCwgR0Vycm9yKiBlcnJvciwgRG93bmxvYWRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAg
Z19hc3NlcnQoZXJyb3IpOworICAgICAgICB0ZXN0LT5mYWlsZWQoZG93bmxvYWQsIGVycm9yKTsK
KyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgc3RhdGljIGdib29sZWFuIGRlY2lk
ZURlc3RpbmF0aW9uQ2FsbGJhY2soV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBjb25zdCBnY2hh
ciogc3VnZ2VzdGVkRmlsZW5hbWUsIERvd25sb2FkVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAg
IGdfYXNzZXJ0KHN1Z2dlc3RlZEZpbGVuYW1lKTsKKyAgICAgICAgdGVzdC0+ZGVjaWRlRGVzdGlu
YXRpb24oZG93bmxvYWQsIHN1Z2dlc3RlZEZpbGVuYW1lKTsKKyAgICAgICAgcmV0dXJuIFRSVUU7
CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZG93bmxvYWRTdGFydGVkQ2FsbGJhY2soV2ViS2l0
V2ViQ29udGV4dCogY29udGV4dCwgV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBEb3dubG9hZFRl
c3QqIHRlc3QpCisgICAgeworICAgICAgICBnX2Fzc2VydCh3ZWJraXRfZG93bmxvYWRfZ2V0X3Jl
cXVlc3QoZG93bmxvYWQpKTsKKyAgICAgICAgdGVzdC0+c3RhcnRlZChkb3dubG9hZCk7CisgICAg
ICAgIGdfc2lnbmFsX2Nvbm5lY3QoZG93bmxvYWQsICJub3RpZnk6OnJlc3BvbnNlIiwgR19DQUxM
QkFDSyhyZWNlaXZlZFJlc3BvbnNlQ2FsbGJhY2spLCB0ZXN0KTsKKyAgICAgICAgZ19zaWduYWxf
Y29ubmVjdChkb3dubG9hZCwgImNyZWF0ZWQtZGVzdGluYXRpb24iLCBHX0NBTExCQUNLKGNyZWF0
ZWREZXN0aW5hdGlvbkNhbGxiYWNrKSwgdGVzdCk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
ZG93bmxvYWQsICJyZWNlaXZlZC1kYXRhIiwgR19DQUxMQkFDSyhyZWNlaXZlZERhdGFDYWxsYmFj
ayksIHRlc3QpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGRvd25sb2FkLCAiZmluaXNoZWQi
LCBHX0NBTExCQUNLKGZpbmlzaGVkQ2FsbGJhY2spLCB0ZXN0KTsKKyAgICAgICAgZ19zaWduYWxf
Y29ubmVjdChkb3dubG9hZCwgImZhaWxlZCIsIEdfQ0FMTEJBQ0soZmFpbGVkQ2FsbGJhY2spLCB0
ZXN0KTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChkb3dubG9hZCwgImRlY2lkZS1kZXN0aW5h
dGlvbiIsIEdfQ0FMTEJBQ0soZGVjaWRlRGVzdGluYXRpb25DYWxsYmFjayksIHRlc3QpOworICAg
IH0KKworICAgIERvd25sb2FkVGVzdCgpCisgICAgICAgIDogbV93ZWJDb250ZXh0KHdlYmtpdF93
ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpKQorICAgICAgICAsIG1fbWFpbkxvb3AoZ19tYWluX2xv
b3BfbmV3KDAsIFRSVUUpKQorICAgICAgICAsIG1fZG93bmxvYWRTaXplKDApCisgICAgeworICAg
ICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViQ29udGV4dCwgImRvd25sb2FkLXN0YXJ0ZWQiLCBH
X0NBTExCQUNLKGRvd25sb2FkU3RhcnRlZENhbGxiYWNrKSwgdGhpcyk7CisgICAgfQorCisgICAg
fkRvd25sb2FkVGVzdCgpCisgICAgeworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25u
ZWN0X21hdGNoZWQobV93ZWJDb250ZXh0LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAw
LCB0aGlzKTsKKyAgICAgICAgZ19tYWluX2xvb3BfdW5yZWYobV9tYWluTG9vcCk7CisgICAgfQor
CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0ZWQoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQorICAg
IHsKKyAgICAgICAgbV9kb3dubG9hZEV2ZW50cy5hcHBlbmQoU3RhcnRlZCk7CisgICAgfQorCisg
ICAgdmlydHVhbCB2b2lkIHJlY2VpdmVkUmVzcG9uc2UoV2ViS2l0RG93bmxvYWQqIGRvd25sb2Fk
KQorICAgIHsKKyAgICAgICAgbV9kb3dubG9hZEV2ZW50cy5hcHBlbmQoUmVjZWl2ZWRSZXNwb25z
ZSk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZWREZXN0aW5hdGlvbihXZWJLaXRE
b3dubG9hZCogZG93bmxvYWQsIGNvbnN0IGNoYXIqIGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAg
ICAgbV9kb3dubG9hZEV2ZW50cy5hcHBlbmQoQ3JlYXRlZERlc3RpbmF0aW9uKTsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWREYXRhKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwg
Z3VpbnQ2NCBkYXRhTGVuZ3RoKQorICAgIHsKKyAgICAgICAgbV9kb3dubG9hZFNpemUgKz0gZGF0
YUxlbmd0aDsKKyAgICAgICAgaWYgKCFtX2Rvd25sb2FkRXZlbnRzLmNvbnRhaW5zKFJlY2VpdmVk
RGF0YSkpCisgICAgICAgICAgICBtX2Rvd25sb2FkRXZlbnRzLmFwcGVuZChSZWNlaXZlZERhdGEp
OworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hlZChXZWJLaXREb3dubG9hZCogZG93
bmxvYWQpCisgICAgeworICAgICAgICBnX2Fzc2VydF9jbXB1aW50KG1fZG93bmxvYWRTaXplLCA9
PSwgd2Via2l0X2Rvd25sb2FkX2dldF9yZWNlaXZlZF9kYXRhX2xlbmd0aChkb3dubG9hZCkpOwor
ICAgICAgICBtX2Rvd25sb2FkRXZlbnRzLmFwcGVuZChGaW5pc2hlZCk7CisgICAgICAgIGdfbWFp
bl9sb29wX3F1aXQobV9tYWluTG9vcCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGZhaWxl
ZChXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIEdFcnJvciogZXJyb3IpCisgICAgeworICAgICAg
ICBtX2Rvd25sb2FkRXZlbnRzLmFwcGVuZChGYWlsZWQpOworICAgIH0KKworICAgIHZpcnR1YWwg
dm9pZCBkZWNpZGVEZXN0aW5hdGlvbihXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IGdj
aGFyKiBzdWdnZXN0ZWRGaWxlbmFtZSkKKyAgICB7CisgICAgICAgIEdPd25QdHI8Y2hhcj4gZGVz
dGluYXRpb24oZ19idWlsZF9maWxlbmFtZShrVGVtcERpcmVjdG9yeSwgc3VnZ2VzdGVkRmlsZW5h
bWUsIE5VTEwpKTsKKyAgICAgICAgR093blB0cjxjaGFyPiBkZXN0aW5hdGlvblVSSShnX2ZpbGVu
YW1lX3RvX3VyaShkZXN0aW5hdGlvbi5nZXQoKSwgMCwgMCkpOworICAgICAgICB3ZWJraXRfZG93
bmxvYWRfc2V0X2Rlc3RpbmF0aW9uKGRvd25sb2FkLCBkZXN0aW5hdGlvblVSSS5nZXQoKSk7Cisg
ICAgfQorCisgICAgV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkVVJJQW5kV2FpdFVudGlsRmluaXNo
ZXMoY29uc3QgQ1N0cmluZyYgcmVxdWVzdFVSSSkKKyAgICB7CisgICAgICAgIFdlYktpdERvd25s
b2FkKiBkb3dubG9hZCA9IHdlYmtpdF93ZWJfY29udGV4dF9kb3dubG9hZF91cmkobV93ZWJDb250
ZXh0LCByZXF1ZXN0VVJJLmRhdGEoKSk7CisgICAgICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdo
ZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QoZG93bmxvYWQpKTsKKworICAgICAgICBXZWJLaXRVUklS
ZXF1ZXN0KiByZXF1ZXN0ID0gd2Via2l0X2Rvd25sb2FkX2dldF9yZXF1ZXN0KGRvd25sb2FkKTsK
KyAgICAgICAgZ19hc3NlcnQocmVxdWVzdCk7CisgICAgICAgIEFTU0VSVF9DTVBfQ1NUUklORyh3
ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KSwgPT0sIHJlcXVlc3RVUkkpOworCisg
ICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKworICAgICAgICByZXR1cm4gZG93
bmxvYWQ7CisgICAgfQorCisgICAgdm9pZCBjaGVja0Rlc3RpbmF0aW9uQW5kRGVsZXRlRmlsZShX
ZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IGNoYXIqIGV4cGVjdGVkTmFtZSkKKyAgICB7
CisgICAgICAgIGlmICghd2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbihkb3dubG9hZCkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEdSZWZQdHI8R0ZpbGU+IGRlc3RGaWxlID0g
YWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3VyaSh3ZWJraXRfZG93bmxvYWRfZ2V0X2Rlc3RpbmF0
aW9uKGRvd25sb2FkKSkpOworICAgICAgICBHT3duUHRyPGNoYXI+IGRlc3RCYXNlbmFtZShnX2Zp
bGVfZ2V0X2Jhc2VuYW1lKGRlc3RGaWxlLmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0
cihkZXN0QmFzZW5hbWUuZ2V0KCksID09LCBleHBlY3RlZE5hbWUpOworCisgICAgICAgIGdfZmls
ZV9kZWxldGUoZGVzdEZpbGUuZ2V0KCksIDAsIDApOworICAgIH0KKworICAgIFdlYktpdFdlYkNv
bnRleHQqIG1fd2ViQ29udGV4dDsKKyAgICBHTWFpbkxvb3AqIG1fbWFpbkxvb3A7CisgICAgVmVj
dG9yPERvd25sb2FkRXZlbnQ+IG1fZG93bmxvYWRFdmVudHM7CisgICAgZ3VpbnQ2NCBtX2Rvd25s
b2FkU2l6ZTsKK307CisKK3N0YXRpYyB2b2lkIHRlc3REb3dubG9hZExvY2FsRmlsZShEb3dubG9h
ZFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgR093blB0cjxjaGFyPiBzb3VyY2VQ
YXRoKGdfYnVpbGRfZmlsZW5hbWUoVGVzdDo6Z2V0V2ViS2l0MVRlc3RSZXNvdWNlc0RpcigpLmRh
dGEoKSwgInRlc3QucGRmIiwgTlVMTCkpOworICAgIEdSZWZQdHI8R0ZpbGU+IHNvdXJjZSA9IGFk
b3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKHNvdXJjZVBhdGguZ2V0KCkpKTsKKyAgICBHUmVm
UHRyPEdGaWxlSW5mbz4gc291cmNlSW5mbyA9IGFkb3B0R1JlZihnX2ZpbGVfcXVlcnlfaW5mbyhz
b3VyY2UuZ2V0KCksIEdfRklMRV9BVFRSSUJVVEVfU1RBTkRBUkRfU0laRSwgc3RhdGljX2Nhc3Q8
R0ZpbGVRdWVyeUluZm9GbGFncz4oMCksIDAsIDApKTsKKyAgICBHT3duUHRyPGNoYXI+IHNvdXJj
ZVVSSShnX2ZpbGVfZ2V0X3VyaShzb3VyY2UuZ2V0KCkpKTsKKyAgICBHUmVmUHRyPFdlYktpdERv
d25sb2FkPiBkb3dubG9hZCA9IGFkb3B0R1JlZih0ZXN0LT5kb3dubG9hZFVSSUFuZFdhaXRVbnRp
bEZpbmlzaGVzKHNvdXJjZVVSSS5nZXQoKSkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG93bmxv
YWRfZ2V0X3dlYl92aWV3KGRvd25sb2FkLmdldCgpKSk7CisKKyAgICBWZWN0b3I8RG93bmxvYWRU
ZXN0OjpEb3dubG9hZEV2ZW50PiYgZXZlbnRzID0gdGVzdC0+bV9kb3dubG9hZEV2ZW50czsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDUpOworICAgIGdfYXNzZXJ0X2Nt
cGludChldmVudHNbMF0sID09LCBEb3dubG9hZFRlc3Q6OlN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0
X2NtcGludChldmVudHNbMV0sID09LCBEb3dubG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOwor
ICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBEb3dubG9hZFRlc3Q6OkNyZWF0ZWRE
ZXN0aW5hdGlvbik7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1szXSwgPT0sIERvd25sb2Fk
VGVzdDo6UmVjZWl2ZWREYXRhKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzRdLCA9PSwg
RG93bmxvYWRUZXN0OjpGaW5pc2hlZCk7CisKKyAgICBXZWJLaXRVUklSZXF1ZXN0KiByZXF1ZXN0
ID0gd2Via2l0X2Rvd25sb2FkX2dldF9yZXF1ZXN0KGRvd25sb2FkLmdldCgpKTsKKyAgICBnX2Fz
c2VydChyZXF1ZXN0KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3VyaV9yZXF1ZXN0X2dl
dF91cmkocmVxdWVzdCksID09LCBzb3VyY2VVUkkuZ2V0KCkpOworCisgICAgZ19hc3NlcnRfY21w
aW50KHRlc3QtPm1fZG93bmxvYWRTaXplLCA9PSwgZ19maWxlX2luZm9fZ2V0X3NpemUoc291cmNl
SW5mby5nZXQoKSkpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9kb3dubG9hZF9nZXRfZGVzdGluYXRp
b24oZG93bmxvYWQuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdCh3ZWJraXRfZG93bmxv
YWRfZ2V0X2VzdGltYXRlZF9wcm9ncmVzcyhkb3dubG9hZC5nZXQoKSksID09LCAxKTsKKyAgICB0
ZXN0LT5jaGVja0Rlc3RpbmF0aW9uQW5kRGVsZXRlRmlsZShkb3dubG9hZC5nZXQoKSwgInRlc3Qu
cGRmIik7Cit9CisKK2NsYXNzIERvd25sb2FkRXJyb3JUZXN0OiBwdWJsaWMgRG93bmxvYWRUZXN0
IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKERvd25sb2FkRXJyb3JUZXN0
KTsKKworICAgIERvd25sb2FkRXJyb3JUZXN0KCkKKyAgICAgICAgOiBtX2V4cGVjdGVkRXJyb3Io
V0VCS0lUX0RPV05MT0FEX0VSUk9SX05FVFdPUkspCisgICAgeworICAgIH0KKworICAgIHZvaWQg
cmVjZWl2ZWRSZXNwb25zZShXZWJLaXREb3dubG9hZCogZG93bmxvYWQpCisgICAgeworICAgICAg
ICBEb3dubG9hZFRlc3Q6OnJlY2VpdmVkUmVzcG9uc2UoZG93bmxvYWQpOworICAgICAgICBpZiAo
bV9leHBlY3RlZEVycm9yID09IFdFQktJVF9ET1dOTE9BRF9FUlJPUl9DQU5DRUxMRURfQllfVVNF
UikKKyAgICAgICAgICAgIHdlYmtpdF9kb3dubG9hZF9jYW5jZWwoZG93bmxvYWQpOworICAgIH0K
KworICAgIHZvaWQgY3JlYXRlZERlc3RpbmF0aW9uKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwg
Y29uc3QgY2hhciogZGVzdGluYXRpb24pCisgICAgeworICAgICAgICBnX2Fzc2VydF9ub3RfcmVh
Y2hlZCgpOworICAgIH0KKworICAgIHZvaWQgZmFpbGVkKFdlYktpdERvd25sb2FkKiBkb3dubG9h
ZCwgR0Vycm9yKiBlcnJvcikKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KGdfZXJyb3JfbWF0Y2hl
cyhlcnJvciwgV0VCS0lUX0RPV05MT0FEX0VSUk9SLCBtX2V4cGVjdGVkRXJyb3IpKTsKKyAgICAg
ICAgRG93bmxvYWRUZXN0OjpmYWlsZWQoZG93bmxvYWQsIGVycm9yKTsKKyAgICB9CisKKyAgICB2
b2lkIGRlY2lkZURlc3RpbmF0aW9uKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgY29uc3QgZ2No
YXIqIHN1Z2dlc3RlZEZpbGVuYW1lKQorICAgIHsKKyAgICAgICAgaWYgKG1fZXhwZWN0ZWRFcnJv
ciAhPSBXRUJLSVRfRE9XTkxPQURfRVJST1JfREVTVElOQVRJT04pIHsKKyAgICAgICAgICAgIERv
d25sb2FkVGVzdDo6ZGVjaWRlRGVzdGluYXRpb24oZG93bmxvYWQsIHN1Z2dlc3RlZEZpbGVuYW1l
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB3ZWJraXRfZG93bmxv
YWRfc2V0X2Rlc3RpbmF0aW9uKGRvd25sb2FkLCAiZmlsZTovLy9mb28vYmFyIik7CisgICAgfQor
CisgICAgV2ViS2l0RG93bmxvYWRFcnJvciBtX2V4cGVjdGVkRXJyb3I7Cit9OworCitzdGF0aWMg
dm9pZCB0ZXN0RG93bmxvYWRMb2NhbEZpbGVFcnJvcihEb3dubG9hZEVycm9yVGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5tX2V4cGVjdGVkRXJyb3IgPSBXRUJLSVRfRE9X
TkxPQURfRVJST1JfTkVUV09SSzsKKyAgICBHUmVmUHRyPFdlYktpdERvd25sb2FkPiBkb3dubG9h
ZCA9IGFkb3B0R1JlZih0ZXN0LT5kb3dubG9hZFVSSUFuZFdhaXRVbnRpbEZpbmlzaGVzKCJmaWxl
Oi8vL2Zvby9iYXIiKSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9kb3dubG9hZF9nZXRfd2ViX3Zp
ZXcoZG93bmxvYWQuZ2V0KCkpKTsKKworICAgIFZlY3RvcjxEb3dubG9hZFRlc3Q6OkRvd25sb2Fk
RXZlbnQ+JiBldmVudHMgPSB0ZXN0LT5tX2Rvd25sb2FkRXZlbnRzOworICAgIGdfYXNzZXJ0X2Nt
cGludChldmVudHMuc2l6ZSgpLCA9PSwgMyk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sw
XSwgPT0sIERvd25sb2FkVGVzdDo6U3RhcnRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50
c1sxXSwgPT0sIERvd25sb2FkVGVzdDo6RmFpbGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZl
bnRzWzJdLCA9PSwgRG93bmxvYWRUZXN0OjpGaW5pc2hlZCk7CisgICAgZXZlbnRzLmNsZWFyKCk7
CisgICAgZ19hc3NlcnRfY21wZmxvYXQod2Via2l0X2Rvd25sb2FkX2dldF9lc3RpbWF0ZWRfcHJv
Z3Jlc3MoZG93bmxvYWQuZ2V0KCkpLCA8LCAxKTsKKworICAgIHRlc3QtPm1fZXhwZWN0ZWRFcnJv
ciA9IFdFQktJVF9ET1dOTE9BRF9FUlJPUl9ERVNUSU5BVElPTjsKKyAgICBHT3duUHRyPGNoYXI+
IHBhdGgoZ19idWlsZF9maWxlbmFtZShUZXN0OjpnZXRXZWJLaXQxVGVzdFJlc291Y2VzRGlyKCku
ZGF0YSgpLCAidGVzdC5wZGYiLCBOVUxMKSk7CisgICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFk
b3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKHBhdGguZ2V0KCkpKTsKKyAgICBHT3duUHRyPGNo
YXI+IHVyaShnX2ZpbGVfZ2V0X3VyaShmaWxlLmdldCgpKSk7CisgICAgZG93bmxvYWQgPSBhZG9w
dEdSZWYodGVzdC0+ZG93bmxvYWRVUklBbmRXYWl0VW50aWxGaW5pc2hlcyh1cmkuZ2V0KCkpKTsK
KyAgICBnX2Fzc2VydCghd2Via2l0X2Rvd25sb2FkX2dldF93ZWJfdmlldyhkb3dubG9hZC5nZXQo
KSkpOworCisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCA0KTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgRG93bmxvYWRUZXN0OjpTdGFydGVkKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgRG93bmxvYWRUZXN0OjpSZWNlaXZlZFJl
c3BvbnNlKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgRG93bmxvYWRUZXN0
OjpGYWlsZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbM10sID09LCBEb3dubG9hZFRl
c3Q6OkZpbmlzaGVkKTsKKyAgICBldmVudHMuY2xlYXIoKTsKKyAgICBnX2Fzc2VydF9jbXBmbG9h
dCh3ZWJraXRfZG93bmxvYWRfZ2V0X2VzdGltYXRlZF9wcm9ncmVzcyhkb3dubG9hZC5nZXQoKSks
IDwsIDEpOworICAgIHRlc3QtPmNoZWNrRGVzdGluYXRpb25BbmREZWxldGVGaWxlKGRvd25sb2Fk
LmdldCgpLCAiYmFyIik7CisKKyAgICB0ZXN0LT5tX2V4cGVjdGVkRXJyb3IgPSBXRUJLSVRfRE9X
TkxPQURfRVJST1JfQ0FOQ0VMTEVEX0JZX1VTRVI7CisgICAgZG93bmxvYWQgPSBhZG9wdEdSZWYo
dGVzdC0+ZG93bmxvYWRVUklBbmRXYWl0VW50aWxGaW5pc2hlcyh1cmkuZ2V0KCkpKTsKKyAgICBn
X2Fzc2VydCghd2Via2l0X2Rvd25sb2FkX2dldF93ZWJfdmlldyhkb3dubG9hZC5nZXQoKSkpOwor
CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCA0KTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgRG93bmxvYWRUZXN0OjpTdGFydGVkKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgRG93bmxvYWRUZXN0OjpSZWNlaXZlZFJlc3BvbnNl
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgRG93bmxvYWRUZXN0OjpGYWls
ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbM10sID09LCBEb3dubG9hZFRlc3Q6OkZp
bmlzaGVkKTsKKyAgICBldmVudHMuY2xlYXIoKTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdCh3ZWJr
aXRfZG93bmxvYWRfZ2V0X2VzdGltYXRlZF9wcm9ncmVzcyhkb3dubG9hZC5nZXQoKSksIDwsIDEp
OworICAgIHRlc3QtPmNoZWNrRGVzdGluYXRpb25BbmREZWxldGVGaWxlKGRvd25sb2FkLmdldCgp
LCAidGVzdC5wZGYiKTsKK30KKworc3RhdGljIFdlYktpdFRlc3RTZXJ2ZXIqIGtTZXJ2ZXI7Citz
dGF0aWMgY29uc3QgY2hhcioga1NlcnZlclN1Z2dlc3RlZEZpbGVuYW1lID0gIndlYmtpdC1kb3du
bG9hZGVkLWZpbGUiOworCitzdGF0aWMgdm9pZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBz
ZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxl
KiwgU291cENsaWVudENvbnRleHQqLCBncG9pbnRlcikKK3sKKyAgICBpZiAobWVzc2FnZS0+bWV0
aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgeworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1
cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgR093blB0cjxjaGFyPiBmaWxlUGF0aChnX2J1aWxkX2ZpbGVuYW1lKFRl
c3Q6OmdldFdlYktpdDFUZXN0UmVzb3VjZXNEaXIoKS5kYXRhKCksIHBhdGgsIE5VTEwpKTsKKyAg
ICBjaGFyKiBjb250ZW50czsKKyAgICBnc2l6ZSBjb250ZW50c0xlbmd0aDsKKyAgICBpZiAoIWdf
ZmlsZV9nZXRfY29udGVudHMoZmlsZVBhdGguZ2V0KCksICZjb250ZW50cywgJmNvbnRlbnRzTGVu
Z3RoLCAwKSkgeworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQ
X1NUQVRVU19OT1RfRk9VTkQpOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZSht
ZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNv
dXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKKworICAgIEdP
d25QdHI8Y2hhcj4gY29udGVudERpc3Bvc2l0aW9uKGdfc3RyZHVwX3ByaW50ZigiZmlsZW5hbWU9
JXMiLCBrU2VydmVyU3VnZ2VzdGVkRmlsZW5hbWUpKTsKKyAgICBzb3VwX21lc3NhZ2VfaGVhZGVy
c19hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIkNvbnRlbnQtRGlzcG9zaXRpb24i
LCBjb250ZW50RGlzcG9zaXRpb24uZ2V0KCkpOworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVu
ZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBjb250ZW50cywgY29u
dGVudHNMZW5ndGgpOworCisgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+
cmVzcG9uc2VfYm9keSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3REb3dubG9hZFJlbW90ZUZpbGUo
RG93bmxvYWRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIEdSZWZQdHI8V2ViS2l0
RG93bmxvYWQ+IGRvd25sb2FkID0gYWRvcHRHUmVmKHRlc3QtPmRvd25sb2FkVVJJQW5kV2FpdFVu
dGlsRmluaXNoZXMoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3Rlc3QucGRmIikpKTsKKyAgICBn
X2Fzc2VydCghd2Via2l0X2Rvd25sb2FkX2dldF93ZWJfdmlldyhkb3dubG9hZC5nZXQoKSkpOwor
CisgICAgVmVjdG9yPERvd25sb2FkVGVzdDo6RG93bmxvYWRFdmVudD4mIGV2ZW50cyA9IHRlc3Qt
Pm1fZG93bmxvYWRFdmVudHM7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09
LCA1KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgRG93bmxvYWRUZXN0OjpT
dGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgRG93bmxvYWRUZXN0
OjpSZWNlaXZlZFJlc3BvbnNlKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwg
RG93bmxvYWRUZXN0OjpDcmVhdGVkRGVzdGluYXRpb24pOworICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHNbM10sID09LCBEb3dubG9hZFRlc3Q6OlJlY2VpdmVkRGF0YSk7CisgICAgZ19hc3NlcnRf
Y21waW50KGV2ZW50c1s0XSwgPT0sIERvd25sb2FkVGVzdDo6RmluaXNoZWQpOworICAgIGV2ZW50
cy5jbGVhcigpOworCisgICAgV2ViS2l0VVJJUmVxdWVzdCogcmVxdWVzdCA9IHdlYmtpdF9kb3du
bG9hZF9nZXRfcmVxdWVzdChkb3dubG9hZC5nZXQoKSk7CisgICAgZ19hc3NlcnQocmVxdWVzdCk7
CisgICAgQVNTRVJUX0NNUF9DU1RSSU5HKHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfdXJpKHJlcXVl
c3QpLCA9PSwga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3Rlc3QucGRmIikpOworCisgICAgZ19h
c3NlcnQod2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbihkb3dubG9hZC5nZXQoKSkpOwor
ICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dy
ZXNzKGRvd25sb2FkLmdldCgpKSwgPT0sIDEpOworICAgIHRlc3QtPmNoZWNrRGVzdGluYXRpb25B
bmREZWxldGVGaWxlKGRvd25sb2FkLmdldCgpLCBrU2VydmVyU3VnZ2VzdGVkRmlsZW5hbWUpOwor
fQorCitzdGF0aWMgdm9pZCB0ZXN0RG93bmxvYWRSZW1vdGVGaWxlRXJyb3IoRG93bmxvYWRFcnJv
clRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bV9leHBlY3RlZEVycm9y
ID0gV0VCS0lUX0RPV05MT0FEX0VSUk9SX05FVFdPUks7CisgICAgR1JlZlB0cjxXZWJLaXREb3du
bG9hZD4gZG93bmxvYWQgPSBhZG9wdEdSZWYodGVzdC0+ZG93bmxvYWRVUklBbmRXYWl0VW50aWxG
aW5pc2hlcyhrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvZm9vIikpKTsKKyAgICBnX2Fzc2VydCgh
d2Via2l0X2Rvd25sb2FkX2dldF93ZWJfdmlldyhkb3dubG9hZC5nZXQoKSkpOworCisgICAgVmVj
dG9yPERvd25sb2FkVGVzdDo6RG93bmxvYWRFdmVudD4mIGV2ZW50cyA9IHRlc3QtPm1fZG93bmxv
YWRFdmVudHM7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCA0KTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgRG93bmxvYWRUZXN0OjpTdGFydGVkKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgRG93bmxvYWRUZXN0OjpSZWNlaXZl
ZFJlc3BvbnNlKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgRG93bmxvYWRU
ZXN0OjpGYWlsZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbM10sID09LCBEb3dubG9h
ZFRlc3Q6OkZpbmlzaGVkKTsKKyAgICBldmVudHMuY2xlYXIoKTsKKyAgICBXZWJLaXRVUklSZXNw
b25zZSogcmVzcG9uc2UgPSB3ZWJraXRfZG93bmxvYWRfZ2V0X3Jlc3BvbnNlKGRvd25sb2FkLmdl
dCgpKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0X3N0YXR1
c19jb2RlKHJlc3BvbnNlKSwgPT0sIDQwNCk7CisgICAgZ19hc3NlcnRfY21wZmxvYXQod2Via2l0
X2Rvd25sb2FkX2dldF9lc3RpbWF0ZWRfcHJvZ3Jlc3MoZG93bmxvYWQuZ2V0KCkpLCA8LCAxKTsK
KworICAgIHRlc3QtPm1fZXhwZWN0ZWRFcnJvciA9IFdFQktJVF9ET1dOTE9BRF9FUlJPUl9ERVNU
SU5BVElPTjsKKyAgICBkb3dubG9hZCA9IGFkb3B0R1JlZih0ZXN0LT5kb3dubG9hZFVSSUFuZFdh
aXRVbnRpbEZpbmlzaGVzKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi90ZXN0LnBkZiIpKSk7Cisg
ICAgZ19hc3NlcnQoIXdlYmtpdF9kb3dubG9hZF9nZXRfd2ViX3ZpZXcoZG93bmxvYWQuZ2V0KCkp
KTsKKworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgNCk7CisgICAgZ19h
c3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIERvd25sb2FkVGVzdDo6U3RhcnRlZCk7CisgICAg
Z19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIERvd25sb2FkVGVzdDo6UmVjZWl2ZWRSZXNw
b25zZSk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIERvd25sb2FkVGVzdDo6
RmFpbGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzNdLCA9PSwgRG93bmxvYWRUZXN0
OjpGaW5pc2hlZCk7CisgICAgZXZlbnRzLmNsZWFyKCk7CisgICAgZ19hc3NlcnRfY21wZmxvYXQo
d2Via2l0X2Rvd25sb2FkX2dldF9lc3RpbWF0ZWRfcHJvZ3Jlc3MoZG93bmxvYWQuZ2V0KCkpLCA8
LCAxKTsKKyAgICB0ZXN0LT5jaGVja0Rlc3RpbmF0aW9uQW5kRGVsZXRlRmlsZShkb3dubG9hZC5n
ZXQoKSwgImJhciIpOworCisgICAgdGVzdC0+bV9leHBlY3RlZEVycm9yID0gV0VCS0lUX0RPV05M
T0FEX0VSUk9SX0NBTkNFTExFRF9CWV9VU0VSOworICAgIGRvd25sb2FkID0gYWRvcHRHUmVmKHRl
c3QtPmRvd25sb2FkVVJJQW5kV2FpdFVudGlsRmluaXNoZXMoa1NlcnZlci0+Z2V0VVJJRm9yUGF0
aCgiL3Rlc3QucGRmIikpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2Rvd25sb2FkX2dldF93ZWJf
dmlldyhkb3dubG9hZC5nZXQoKSkpOworCisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXpl
KCksID09LCA0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgRG93bmxvYWRU
ZXN0OjpTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgRG93bmxv
YWRUZXN0OjpSZWNlaXZlZFJlc3BvbnNlKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJd
LCA9PSwgRG93bmxvYWRUZXN0OjpGYWlsZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNb
M10sID09LCBEb3dubG9hZFRlc3Q6OkZpbmlzaGVkKTsKKyAgICBldmVudHMuY2xlYXIoKTsKKyAg
ICBnX2Fzc2VydF9jbXBmbG9hdCh3ZWJraXRfZG93bmxvYWRfZ2V0X2VzdGltYXRlZF9wcm9ncmVz
cyhkb3dubG9hZC5nZXQoKSksIDwsIDEpOworICAgIHRlc3QtPmNoZWNrRGVzdGluYXRpb25BbmRE
ZWxldGVGaWxlKGRvd25sb2FkLmdldCgpLCBrU2VydmVyU3VnZ2VzdGVkRmlsZW5hbWUpOworfQor
CitjbGFzcyBXZWJWaWV3RG93bmxvYWRUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3QgeworcHVibGlj
OgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoV2ViVmlld0Rvd25sb2FkVGVzdCk7CisKKyAg
ICBzdGF0aWMgdm9pZCBkb3dubG9hZFN0YXJ0ZWRDYWxsYmFjayhXZWJLaXRXZWJDb250ZXh0KiBj
b250ZXh0LCBXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIFdlYlZpZXdEb3dubG9hZFRlc3QqIHRl
c3QpCisgICAgeworICAgICAgICB0ZXN0LT5tX2Rvd25sb2FkID0gZG93bmxvYWQ7CisgICAgICAg
IHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QoZG93
bmxvYWQpKTsKKyAgICAgICAgdGVzdC0+cXVpdE1haW5Mb29wKCk7CisgICAgfQorCisgICAgV2Vi
Vmlld0Rvd25sb2FkVGVzdCgpCisgICAgeworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KHdlYmtp
dF93ZWJfdmlld19nZXRfY29udGV4dChtX3dlYlZpZXcpLCAiZG93bmxvYWQtc3RhcnRlZCIsIEdf
Q0FMTEJBQ0soZG93bmxvYWRTdGFydGVkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICB9CisKKyAgICB+
V2ViVmlld0Rvd25sb2FkVGVzdCgpCisgICAgeworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19k
aXNjb25uZWN0X21hdGNoZWQod2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KG1fd2ViVmlldyks
IEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOworICAgIH0KKworICAgIHZv
aWQgd2FpdFVudGlsRG93bmxvYWRTdGFydGVkKCkKKyAgICB7CisgICAgICAgIG1fZG93bmxvYWQg
PSAwOworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgICAgIGdfYXNz
ZXJ0KG1fZG93bmxvYWQuZ2V0KCkpOworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBkb3du
bG9hZERlY2lkZURlc3RpbmF0aW9uQ2FsbGJhY2soV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBj
b25zdCBnY2hhciogc3VnZ2VzdGVkRmlsZW5hbWUsIFdlYlZpZXdEb3dubG9hZFRlc3QqIHRlc3Qp
CisgICAgeworICAgICAgICBHT3duUHRyPGNoYXI+IGRlc3RpbmF0aW9uKGdfYnVpbGRfZmlsZW5h
bWUoa1RlbXBEaXJlY3RvcnksIHN1Z2dlc3RlZEZpbGVuYW1lLCBOVUxMKSk7CisgICAgICAgIEdP
d25QdHI8Y2hhcj4gZGVzdGluYXRpb25VUkkoZ19maWxlbmFtZV90b191cmkoZGVzdGluYXRpb24u
Z2V0KCksIDAsIDApKTsKKyAgICAgICAgd2Via2l0X2Rvd25sb2FkX3NldF9kZXN0aW5hdGlvbihk
b3dubG9hZCwgZGVzdGluYXRpb25VUkkuZ2V0KCkpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgdm9pZCBkb3dubG9hZEZpbmlzaGVkQ2FsbGJhY2soV2ViS2l0RG93
bmxvYWQqIGRvd25sb2FkLCBXZWJWaWV3RG93bmxvYWRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAg
ICAgdGVzdC0+cXVpdE1haW5Mb29wKCk7CisgICAgfQorCisgICAgdm9pZCB3YWl0VW50aWxEb3du
bG9hZEZpbmlzaGVkKCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9kb3dubG9h
ZC5nZXQoKSwgImRlY2lkZS1kZXN0aW5hdGlvbiIsIEdfQ0FMTEJBQ0soZG93bmxvYWREZWNpZGVE
ZXN0aW5hdGlvbkNhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9k
b3dubG9hZC5nZXQoKSwgImZpbmlzaGVkIiwgR19DQUxMQkFDSyhkb3dubG9hZEZpbmlzaGVkQ2Fs
bGJhY2spLCB0aGlzKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAg
IH0KKworICAgIEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+IG1fZG93bmxvYWQ7Cit9OworCitzdGF0
aWMgdm9pZCB0ZXN0V2ViVmlld0Rvd25sb2FkVVJJKFdlYlZpZXdEb3dubG9hZFRlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIpCit7CisgICAgR1JlZlB0cjxXZWJLaXREb3dubG9hZD4gZG93bmxvYWQg
PSBhZG9wdEdSZWYod2Via2l0X3dlYl92aWV3X2Rvd25sb2FkX3VyaSh0ZXN0LT5tX3dlYlZpZXcs
IGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi90ZXN0LnBkZiIpLmRhdGEoKSkpOworICAgIHRlc3Qt
PndhaXRVbnRpbERvd25sb2FkU3RhcnRlZCgpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fd2ViVmll
dyA9PSB3ZWJraXRfZG93bmxvYWRfZ2V0X3dlYl92aWV3KGRvd25sb2FkLmdldCgpKSk7CisgICAg
dGVzdC0+d2FpdFVudGlsRG93bmxvYWRGaW5pc2hlZCgpOworCisgICAgR1JlZlB0cjxHRmlsZT4g
ZG93bmxvYWRGaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3VyaSh3ZWJraXRfZG93bmxv
YWRfZ2V0X2Rlc3RpbmF0aW9uKGRvd25sb2FkLmdldCgpKSkpOworICAgIEdSZWZQdHI8R0ZpbGVJ
bmZvPiBkb3dubG9hZEZpbGVJbmZvID0gYWRvcHRHUmVmKGdfZmlsZV9xdWVyeV9pbmZvKGRvd25s
b2FkRmlsZS5nZXQoKSwgR19GSUxFX0FUVFJJQlVURV9TVEFOREFSRF9TSVpFLCBzdGF0aWNfY2Fz
dDxHRmlsZVF1ZXJ5SW5mb0ZsYWdzPigwKSwgMCwgMCkpOworICAgIGdfYXNzZXJ0X2NtcGludChn
X2ZpbGVfaW5mb19nZXRfc2l6ZShkb3dubG9hZEZpbGVJbmZvLmdldCgpKSwgPiwgMCk7CisgICAg
Z19maWxlX2RlbGV0ZShkb3dubG9hZEZpbGUuZ2V0KCksIDAsIDApOworfQorCitjbGFzcyBQb2xp
Y3lSZXNwb25zZURvd25sb2FkVGVzdDogcHVibGljIFdlYlZpZXdEb3dubG9hZFRlc3QgeworcHVi
bGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoUG9saWN5UmVzcG9uc2VEb3dubG9hZFRl
c3QpOworCisgICAgc3RhdGljIGdib29sZWFuIGRlY2lkZVBvbGljeUNhbGxiYWNrKFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcsIFdlYktpdFBvbGljeURlY2lzaW9uKiBkZWNpc2lvbiwgV2ViS2l0UG9s
aWN5RGVjaXNpb25UeXBlIHR5cGUsIFBvbGljeVJlc3BvbnNlRG93bmxvYWRUZXN0KiB0ZXN0KQor
ICAgIHsKKyAgICAgICAgaWYgKHR5cGUgIT0gV0VCS0lUX1BPTElDWV9ERUNJU0lPTl9UWVBFX1JF
U1BPTlNFKQorICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgICAgIHdlYmtpdF9wb2xp
Y3lfZGVjaXNpb25fZG93bmxvYWQoZGVjaXNpb24pOworICAgICAgICByZXR1cm4gVFJVRTsKKyAg
ICB9CisKKyAgICBQb2xpY3lSZXNwb25zZURvd25sb2FkVGVzdCgpCisgICAgeworICAgICAgICBn
X3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImRlY2lkZS1wb2xpY3kiLCBHX0NBTExCQUNLKGRl
Y2lkZVBvbGljeUNhbGxiYWNrKSwgdGhpcyk7CisgICAgfQorCisgICAgflBvbGljeVJlc3BvbnNl
RG93bmxvYWRUZXN0KCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5l
Y3RfbWF0Y2hlZChtX3dlYlZpZXcsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRo
aXMpOworICAgIH0KKworICAgIHZvaWQgY2FuY2VsRG93bmxvYWRBbmRXYWl0VW50aWxGaW5pc2hl
ZCgpCisgICAgeworICAgICAgICB3ZWJraXRfZG93bmxvYWRfY2FuY2VsKG1fZG93bmxvYWQuZ2V0
KCkpOworICAgICAgICB3YWl0VW50aWxEb3dubG9hZEZpbmlzaGVkKCk7CisgICAgICAgIG1fZG93
bmxvYWQgPSAwOworICAgIH0KK307CisKK3N0YXRpYyB2b2lkIHRlc3RQb2xpY3lSZXNwb25zZURv
d25sb2FkKFBvbGljeVJlc3BvbnNlRG93bmxvYWRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQor
eworICAgIC8vIFRlc3QgdGhhdCBhIGRvd25sb2FkIHN0YXJ0ZWQgYnkgdGhlIHRoZSBwb2xpY3kg
Y2hlY2tlciBjb250YWlucyB0aGUgd2ViIHZpZXcuCisgICAgQ1N0cmluZyByZXF1ZXN0VVJJID0g
a1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3Rlc3QucGRmIikuZGF0YSgpOworICAgIHRlc3QtPmxv
YWRVUkkocmVxdWVzdFVSSS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbERvd25sb2FkU3Rh
cnRlZCgpOworCisgICAgV2ViS2l0VVJJUmVxdWVzdCogcmVxdWVzdCA9IHdlYmtpdF9kb3dubG9h
ZF9nZXRfcmVxdWVzdCh0ZXN0LT5tX2Rvd25sb2FkLmdldCgpKTsKKyAgICBnX2Fzc2VydChyZXF1
ZXN0KTsKKyAgICBBU1NFUlRfQ01QX0NTVFJJTkcod2Via2l0X3VyaV9yZXF1ZXN0X2dldF91cmko
cmVxdWVzdCksID09LCByZXF1ZXN0VVJJKTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPm1fd2ViVmll
dyA9PSB3ZWJraXRfZG93bmxvYWRfZ2V0X3dlYl92aWV3KHRlc3QtPm1fZG93bmxvYWQuZ2V0KCkp
KTsKKyAgICB0ZXN0LT5jYW5jZWxEb3dubG9hZEFuZFdhaXRVbnRpbEZpbmlzaGVkKCk7Cit9CisK
K3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICBrU2VydmVyID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIo
KTsKKyAgICBrU2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2spOworCisgICAga1RlbXBEaXJlY3Rv
cnkgPSBnX2Rpcl9tYWtlX3RtcCgiV2ViS2l0MlRlc3RzLVhYWFhYWCIsIDApOworICAgIGdfYXNz
ZXJ0KGtUZW1wRGlyZWN0b3J5KTsKKworICAgIERvd25sb2FkVGVzdDo6YWRkKCJEb3dubG9hZHMi
LCAibG9jYWwtZmlsZSIsIHRlc3REb3dubG9hZExvY2FsRmlsZSk7CisgICAgRG93bmxvYWRFcnJv
clRlc3Q6OmFkZCgiRG93bmxvYWRzIiwgImxvY2FsLWZpbGUtZXJyb3IiLCB0ZXN0RG93bmxvYWRM
b2NhbEZpbGVFcnJvcik7CisgICAgRG93bmxvYWRUZXN0OjphZGQoIkRvd25sb2FkcyIsICJyZW1v
dGUtZmlsZSIsIHRlc3REb3dubG9hZFJlbW90ZUZpbGUpOworICAgIERvd25sb2FkRXJyb3JUZXN0
OjphZGQoIkRvd25sb2FkcyIsICJyZW1vdGUtZmlsZS1lcnJvciIsIHRlc3REb3dubG9hZFJlbW90
ZUZpbGVFcnJvcik7CisgICAgV2ViVmlld0Rvd25sb2FkVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3
IiwgImRvd25sb2FkLXVyaSIsIHRlc3RXZWJWaWV3RG93bmxvYWRVUkkpOworICAgIFBvbGljeVJl
c3BvbnNlRG93bmxvYWRUZXN0OjphZGQoIkRvd25sb2FkcyIsICJwb2xpY3ktZGVjaXNpb24tZG93
bmxvYWQiLCB0ZXN0UG9saWN5UmVzcG9uc2VEb3dubG9hZCk7Cit9CisKK3ZvaWQgYWZ0ZXJBbGwo
KQoreworICAgIGRlbGV0ZSBrU2VydmVyOworICAgIGdfcm1kaXIoa1RlbXBEaXJlY3RvcnkpOwor
fQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RG
cmFtZS5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdEZyYW1l
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjNiMDc5Ci0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RGcmFt
ZS5jcHAKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJZ2FsaWEg
Uy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Rlc3RSdW5u
ZXIuaCIKKyNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNp
bmNsdWRlIDx3ZWJraXQyL3dlYmtpdDIuaD4KKworc3RhdGljIFdlYlByb2Nlc3NUZXN0UnVubmVy
KiB0ZXN0UnVubmVyOworCitzdGF0aWMgdm9pZCB3ZWJraXRGcmFtZVRlc3RSdW4oV2ViVmlld1Rl
c3QqIHRlc3QsIGNvbnN0IGNoYXIqIHRlc3ROYW1lKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFy
KiB0ZXN0SFRNTCA9ICI8aHRtbD48Ym9keT48L2JvZHk+PC9odG1sPiI7CisgICAgdGVzdC0+bG9h
ZEh0bWwodGVzdEhUTUwsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwor
CisgICAgR1ZhcmlhbnRCdWlsZGVyIGJ1aWxkZXI7CisgICAgZ192YXJpYW50X2J1aWxkZXJfaW5p
dCgmYnVpbGRlciwgR19WQVJJQU5UX1RZUEVfVkFSRElDVCk7CisgICAgZ192YXJpYW50X2J1aWxk
ZXJfYWRkKCZidWlsZGVyLCAie3N2fSIsICJwYWdlSUQiLCBnX3ZhcmlhbnRfbmV3X3VpbnQ2NCh3
ZWJraXRfd2ViX3ZpZXdfZ2V0X3BhZ2VfaWQodGVzdC0+bV93ZWJWaWV3KSkpOworICAgIGdfYXNz
ZXJ0KHRlc3RSdW5uZXItPnJ1blRlc3QoIldlYktpdEZyYW1lIiwgdGVzdE5hbWUsIGdfdmFyaWFu
dF9idWlsZGVyX2VuZCgmYnVpbGRlcikpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYktpdEZy
YW1lTWFpbkZyYW1lKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHdl
YmtpdEZyYW1lVGVzdFJ1bih0ZXN0LCAibWFpbi1mcmFtZSIpOworfQorCitzdGF0aWMgdm9pZCB0
ZXN0V2ViS2l0RnJhbWVVUkkoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7Cisg
ICAgd2Via2l0RnJhbWVUZXN0UnVuKHRlc3QsICJ1cmkiKTsKK30KKworc3RhdGljIHZvaWQgdGVz
dFdlYktpdEZyYW1lSmF2YVNjcmlwdENvbnRleHQoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBv
aW50ZXIpCit7CisgICAgd2Via2l0RnJhbWVUZXN0UnVuKHRlc3QsICJqYXZhc2NyaXB0LWNvbnRl
eHQiKTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQoreworICAgIHRlc3RSdW5uZXIgPSBuZXcgV2Vi
UHJvY2Vzc1Rlc3RSdW5uZXIoKTsKKyAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3dlYl9leHRl
bnNpb25zX2RpcmVjdG9yeSh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSwgV0VCS0lU
X1RFU1RfV0VCX0VYVEVOU0lPTlNfRElSKTsKKworICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktp
dEZyYW1lIiwgIm1haW4tZnJhbWUiLCB0ZXN0V2ViS2l0RnJhbWVNYWluRnJhbWUpOworICAgIFdl
YlZpZXdUZXN0OjphZGQoIldlYktpdEZyYW1lIiwgInVyaSIsIHRlc3RXZWJLaXRGcmFtZVVSSSk7
CisgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0RnJhbWUiLCAiamF2YXNjcmlwdC1jb250ZXh0
IiwgdGVzdFdlYktpdEZyYW1lSmF2YVNjcmlwdENvbnRleHQpOworfQorCit2b2lkIGFmdGVyQWxs
KCkKK3sKKyAgICBkZWxldGUgdGVzdFJ1bm5lcjsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0SW5zcGVjdG9yLmNwcCBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0SW5zcGVjdG9yLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjA0MzAzCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RJbnNwZWN0b3IuY3BwCkBAIC0wLDAg
KzEsMzU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKworY2xhc3MgSW5zcGVj
dG9yVGVzdDogcHVibGljIFdlYlZpZXdUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVT
VF9GSVhUVVJFKEluc3BlY3RvclRlc3QpOworCisgICAgZW51bSBJbnNwZWN0b3JFdmVudHMgewor
ICAgICAgICBPcGVuV2luZG93LAorICAgICAgICBCcmluZ1RvRnJvbnQsCisgICAgICAgIENsb3Nl
ZCwKKyAgICAgICAgQXR0YWNoLAorICAgICAgICBEZXRhY2gKKyAgICB9OworCisgICAgc3RhdGlj
IGdib29sZWFuIG9wZW5XaW5kb3dDYWxsYmFjayhXZWJLaXRXZWJJbnNwZWN0b3IqLCBJbnNwZWN0
b3JUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRlc3QtPm9wZW5XaW5kb3coKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gYnJpbmdUb0Zyb250Q2FsbGJhY2soV2ViS2l0
V2ViSW5zcGVjdG9yKiwgSW5zcGVjdG9yVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHJldHVy
biB0ZXN0LT5icmluZ1RvRnJvbnQoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBjbG9zZWRD
YWxsYmFjayhXZWJLaXRXZWJJbnNwZWN0b3IqLCBJbnNwZWN0b3JUZXN0KiB0ZXN0KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRlc3QtPmNsb3NlZCgpOworICAgIH0KKworICAgIHN0YXRpYyBnYm9v
bGVhbiBhdHRhY2hDYWxsYmFjayhXZWJLaXRXZWJJbnNwZWN0b3IqLCBJbnNwZWN0b3JUZXN0KiB0
ZXN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRlc3QtPmF0dGFjaCgpOworICAgIH0KKworICAg
IHN0YXRpYyBnYm9vbGVhbiBkZXRhY2hDYWxsYmFjayhXZWJLaXRXZWJJbnNwZWN0b3IqLCBJbnNw
ZWN0b3JUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRlc3QtPmRldGFjaCgpOwor
ICAgIH0KKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBnTWluaW11bUF0dGFjaGVkSW5zcGVj
dG9yV2lkdGggPSA3NTA7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGdNaW5pbXVtQXR0YWNo
ZWRJbnNwZWN0b3JIZWlnaHQgPSAyNTA7CisKKyAgICBJbnNwZWN0b3JUZXN0KCkKKyAgICAgICAg
OiBXZWJWaWV3VGVzdCgpCisgICAgICAgICwgbV9pbnNwZWN0b3Iod2Via2l0X3dlYl92aWV3X2dl
dF9pbnNwZWN0b3IobV93ZWJWaWV3KSkKKyAgICB7CisgICAgICAgIHdlYmtpdF9zZXR0aW5nc19z
ZXRfZW5hYmxlX2RldmVsb3Blcl9leHRyYXMod2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyht
X3dlYlZpZXcpLCBUUlVFKTsKKyAgICAgICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RG
aW5pc2hlcyhHX09CSkVDVChtX2luc3BlY3RvcikpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0
KG1faW5zcGVjdG9yLCAib3Blbi13aW5kb3ciLCBHX0NBTExCQUNLKG9wZW5XaW5kb3dDYWxsYmFj
ayksIHRoaXMpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1faW5zcGVjdG9yLCAiYnJpbmct
dG8tZnJvbnQiLCBHX0NBTExCQUNLKGJyaW5nVG9Gcm9udENhbGxiYWNrKSwgdGhpcyk7CisgICAg
ICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9pbnNwZWN0b3IsICJjbG9zZWQiLCBHX0NBTExCQUNLKGNs
b3NlZENhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9pbnNwZWN0
b3IsICJhdHRhY2giLCBHX0NBTExCQUNLKGF0dGFjaENhbGxiYWNrKSwgdGhpcyk7CisgICAgICAg
IGdfc2lnbmFsX2Nvbm5lY3QobV9pbnNwZWN0b3IsICJkZXRhY2giLCBHX0NBTExCQUNLKGRldGFj
aENhbGxiYWNrKSwgdGhpcyk7CisgICAgfQorCisgICAgfkluc3BlY3RvclRlc3QoKQorICAgIHsK
KyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1faW5zcGVjdG9y
LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIGJvb2wgb3BlbldpbmRvdygpCisgICAgeworICAgICAgICBtX2V2ZW50cy5hcHBlbmQo
T3BlbldpbmRvdyk7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7CisgICAg
ICAgIHJldHVybiBUUlVFOworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBicmluZ1RvRnJvbnQo
KQorICAgIHsKKyAgICAgICAgbV9ldmVudHMuYXBwZW5kKEJyaW5nVG9Gcm9udCk7CisgICAgICAg
IGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2VkKCkKKyAgICB7CisgICAgICAgIG1fZXZlbnRz
LmFwcGVuZChDbG9zZWQpOworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBhdHRhY2goKQorICAg
IHsKKyAgICAgICAgbV9ldmVudHMuYXBwZW5kKEF0dGFjaCk7CisgICAgICAgIHJldHVybiBUUlVF
OworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBkZXRhY2goKQorICAgIHsKKyAgICAgICAgbV9l
dmVudHMuYXBwZW5kKERldGFjaCk7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKworCisg
ICAgc3RhdGljIGdib29sZWFuIHNob3dJZGxlKEluc3BlY3RvclRlc3QqIHRlc3QpCisgICAgewor
ICAgICAgICB3ZWJraXRfd2ViX2luc3BlY3Rvcl9zaG93KHRlc3QtPm1faW5zcGVjdG9yKTsKKyAg
ICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIHZvaWQgc2hvdygpCisgICAgeworICAg
ICAgICBnX2lkbGVfYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHNob3dJZGxlKSwg
dGhpcyk7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICB9CisKKyAg
ICB2b2lkIHJlc2l6ZVZpZXdBbmRBdHRhY2goKQorICAgIHsKKyAgICAgICAgLy8gUmVzaXplIHRo
ZSB2aWV3IHRvIG1ha2Ugcm9vbSBmb3IgdGhlIGluc3BlY3Rvci4KKyAgICAgICAgcmVzaXplVmll
dyhnTWluaW11bUF0dGFjaGVkSW5zcGVjdG9yV2lkdGgsIChnTWluaW11bUF0dGFjaGVkSW5zcGVj
dG9ySGVpZ2h0ICsgMSkgKiA0IC8gMyk7CisgICAgICAgIHdlYmtpdF93ZWJfaW5zcGVjdG9yX2F0
dGFjaChtX2luc3BlY3Rvcik7CisgICAgfQorCisgICAgc3RhdGljIGdib29sZWFuIGRldGFjaElk
bGUoSW5zcGVjdG9yVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHdlYmtpdF93ZWJfaW5zcGVj
dG9yX2RldGFjaCh0ZXN0LT5tX2luc3BlY3Rvcik7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAg
ICB9CisKKyAgICB2b2lkIGRldGFjaEFuZFdhaXRVbnRpbFdpbmRvd09wZW5lZCgpCisgICAgewor
ICAgICAgICBnX2lkbGVfYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KGRldGFjaElk
bGUpLCB0aGlzKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgIH0K
KworICAgIHZvaWQgY2xvc2UoKQorICAgIHsKKyAgICAgICAgd2Via2l0X3dlYl9pbnNwZWN0b3Jf
Y2xvc2UobV9pbnNwZWN0b3IpOworICAgIH0KKworICAgIFdlYktpdFdlYkluc3BlY3RvciogbV9p
bnNwZWN0b3I7CisgICAgVmVjdG9yPEluc3BlY3RvckV2ZW50cz4gbV9ldmVudHM7Cit9OworCitz
dGF0aWMgdm9pZCB0ZXN0SW5zcGVjdG9yRGVmYXVsdChJbnNwZWN0b3JUZXN0KiB0ZXN0LCBnY29u
c3Rwb2ludGVyKQoreworICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZChH
VEtfV0lORE9XX1RPUExFVkVMKTsKKyAgICB0ZXN0LT5yZXNpemVWaWV3KDIwMCwgMjAwKTsKKyAg
ICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHk+PHA+V2ViS2l0R1RLKyBJbnNwZWN0b3IgdGVz
dDwvcD48L2JvZHk+PC9odG1sPiIsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hl
ZCgpOworCisgICAgdGVzdC0+c2hvdygpOworICAgIC8vIFdlIGRvbid0IGFkZCB0aGUgdmlldyB0
byBhIGNvbnRhaW5lciwgc28gY29uc3VtZSB0aGUgd2VhayByZWYgd2l0aCBHUmVmUHRyLgorICAg
IEdSZWZQdHI8V2ViS2l0V2ViVmlld0Jhc2U+IGluc3BlY3RvclZpZXcgPSB3ZWJraXRfd2ViX2lu
c3BlY3Rvcl9nZXRfd2ViX3ZpZXcodGVzdC0+bV9pbnNwZWN0b3IpOworICAgIGdfYXNzZXJ0KGlu
c3BlY3RvclZpZXcuZ2V0KCkpOworICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5U
ZXN0RmluaXNoZXMoR19PQkpFQ1QoaW5zcGVjdG9yVmlldy5nZXQoKSkpOworICAgIGdfYXNzZXJ0
KCF3ZWJraXRfd2ViX2luc3BlY3Rvcl9pc19hdHRhY2hlZCh0ZXN0LT5tX2luc3BlY3RvcikpOwor
ICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X3dlYl9pbnNwZWN0b3JfZ2V0X2F0dGFjaGVkX2hl
aWdodCh0ZXN0LT5tX2luc3BlY3RvciksID09LCAwKTsKKyAgICBWZWN0b3I8SW5zcGVjdG9yVGVz
dDo6SW5zcGVjdG9yRXZlbnRzPiYgZXZlbnRzID0gdGVzdC0+bV9ldmVudHM7CisgICAgZ19hc3Nl
cnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZl
bnRzWzBdLCA9PSwgSW5zcGVjdG9yVGVzdDo6T3BlbldpbmRvdyk7CisgICAgdGVzdC0+bV9ldmVu
dHMuY2xlYXIoKTsKKworICAgIHRlc3QtPnNob3coKTsKKyAgICBldmVudHMgPSB0ZXN0LT5tX2V2
ZW50czsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDEpOworICAgIGdf
YXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBJbnNwZWN0b3JUZXN0OjpCcmluZ1RvRnJvbnQp
OworICAgIHRlc3QtPm1fZXZlbnRzLmNsZWFyKCk7CisKKyAgICB0ZXN0LT5yZXNpemVWaWV3QW5k
QXR0YWNoKCk7CisgICAgZ19hc3NlcnQod2Via2l0X3dlYl9pbnNwZWN0b3JfaXNfYXR0YWNoZWQo
dGVzdC0+bV9pbnNwZWN0b3IpKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF93ZWJfaW5z
cGVjdG9yX2dldF9hdHRhY2hlZF9oZWlnaHQodGVzdC0+bV9pbnNwZWN0b3IpLCA+PSwgSW5zcGVj
dG9yVGVzdDo6Z01pbmltdW1BdHRhY2hlZEluc3BlY3RvckhlaWdodCk7CisgICAgZXZlbnRzID0g
dGVzdC0+bV9ldmVudHM7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAx
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgSW5zcGVjdG9yVGVzdDo6QXR0
YWNoKTsKKyAgICB0ZXN0LT5tX2V2ZW50cy5jbGVhcigpOworCisgICAgdGVzdC0+ZGV0YWNoQW5k
V2FpdFVudGlsV2luZG93T3BlbmVkKCk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfaW5zcGVj
dG9yX2lzX2F0dGFjaGVkKHRlc3QtPm1faW5zcGVjdG9yKSk7CisgICAgZXZlbnRzID0gdGVzdC0+
bV9ldmVudHM7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAyKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgSW5zcGVjdG9yVGVzdDo6RGV0YWNoKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgSW5zcGVjdG9yVGVzdDo6T3Blbldp
bmRvdyk7CisgICAgdGVzdC0+bV9ldmVudHMuY2xlYXIoKTsKKworICAgIHRlc3QtPmNsb3NlKCk7
CisgICAgZXZlbnRzID0gdGVzdC0+bV9ldmVudHM7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50
cy5zaXplKCksID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgSW5z
cGVjdG9yVGVzdDo6Q2xvc2VkKTsKKyAgICB0ZXN0LT5tX2V2ZW50cy5jbGVhcigpOworfQorCitj
bGFzcyBDdXN0b21JbnNwZWN0b3JUZXN0OiBwdWJsaWMgSW5zcGVjdG9yVGVzdCB7CitwdWJsaWM6
CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShDdXN0b21JbnNwZWN0b3JUZXN0KTsKKworICAg
IEN1c3RvbUluc3BlY3RvclRlc3QoKQorICAgICAgICA6IEluc3BlY3RvclRlc3QoKQorICAgICAg
ICAsIG1faW5zcGVjdG9yV2luZG93KDApCisgICAgeworICAgIH0KKworICAgIH5DdXN0b21JbnNw
ZWN0b3JUZXN0KCkKKyAgICB7CisgICAgICAgIGlmIChtX2luc3BlY3RvcldpbmRvdykKKyAgICAg
ICAgICAgIGd0a193aWRnZXRfZGVzdHJveShtX2luc3BlY3RvcldpbmRvdyk7CisgICAgfQorCisg
ICAgYm9vbCBvcGVuV2luZG93KCkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KCFtX2luc3BlY3Rv
cldpbmRvdyk7CisgICAgICAgIG1faW5zcGVjdG9yV2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RL
X1dJTkRPV19UT1BMRVZFTCk7CisgICAgICAgIFdlYktpdFdlYlZpZXdCYXNlKiBpbnNwZWN0b3JW
aWV3ID0gd2Via2l0X3dlYl9pbnNwZWN0b3JfZ2V0X3dlYl92aWV3KG1faW5zcGVjdG9yKTsKKyAg
ICAgICAgZ19hc3NlcnQoaW5zcGVjdG9yVmlldyk7CisgICAgICAgIGd0a19jb250YWluZXJfYWRk
KEdUS19DT05UQUlORVIobV9pbnNwZWN0b3JXaW5kb3cpLCBHVEtfV0lER0VUKGluc3BlY3RvclZp
ZXcpKTsKKyAgICAgICAgZ3RrX3dpZGdldF9zaG93X2FsbChtX2luc3BlY3RvcldpbmRvdyk7CisK
KyAgICAgICAgcmV0dXJuIEluc3BlY3RvclRlc3Q6Om9wZW5XaW5kb3coKTsKKyAgICB9CisKKyAg
ICB2b2lkIGNsb3NlZCgpCisgICAgeworICAgICAgICBpZiAobV9pbnNwZWN0b3JXaW5kb3cpIHsK
KyAgICAgICAgICAgIGd0a193aWRnZXRfZGVzdHJveShtX2luc3BlY3RvcldpbmRvdyk7CisgICAg
ICAgICAgICBtX2luc3BlY3RvcldpbmRvdyA9IDA7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gSW5zcGVjdG9yVGVzdDo6Y2xvc2VkKCk7CisgICAgfQorCisgICAgYm9vbCBhdHRhY2goKQor
ICAgIHsKKyAgICAgICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3QmFzZT4gaW5zcGVjdG9yVmlldyA9
IHdlYmtpdF93ZWJfaW5zcGVjdG9yX2dldF93ZWJfdmlldyhtX2luc3BlY3Rvcik7CisgICAgICAg
IGlmIChtX2luc3BlY3RvcldpbmRvdykgeworICAgICAgICAgICAgZ3RrX2NvbnRhaW5lcl9yZW1v
dmUoR1RLX0NPTlRBSU5FUihtX2luc3BlY3RvcldpbmRvdyksIEdUS19XSURHRVQoaW5zcGVjdG9y
Vmlldy5nZXQoKSkpOworICAgICAgICAgICAgZ3RrX3dpZGdldF9kZXN0cm95KG1faW5zcGVjdG9y
V2luZG93KTsKKyAgICAgICAgICAgIG1faW5zcGVjdG9yV2luZG93ID0gMDsKKyAgICAgICAgfQor
CisgICAgICAgIEd0a1dpZGdldCogcGFuZTsKKyAgICAgICAgaWYgKGd0a19iaW5fZ2V0X2NoaWxk
KEdUS19CSU4obV9wYXJlbnRXaW5kb3cpKSA9PSBHVEtfV0lER0VUKG1fd2ViVmlldykpIHsKKyAg
ICAgICAgICAgIEdSZWZQdHI8V2ViS2l0V2ViVmlldz4gaW5zcGVjdGVkVmlldyA9IG1fd2ViVmll
dzsKKyAgICAgICAgICAgIGd0a19jb250YWluZXJfcmVtb3ZlKEdUS19DT05UQUlORVIobV9wYXJl
bnRXaW5kb3cpLCBHVEtfV0lER0VUKG1fd2ViVmlldykpOworICAgICAgICAgICAgcGFuZSA9IGd0
a19wYW5lZF9uZXcoR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMKTsKKyAgICAgICAgICAgIGd0a19w
YW5lZF9hZGQxKEdUS19QQU5FRChwYW5lKSwgR1RLX1dJREdFVChtX3dlYlZpZXcpKTsKKyAgICAg
ICAgICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIobV9wYXJlbnRXaW5kb3cpLCBw
YW5lKTsKKyAgICAgICAgICAgIGd0a193aWRnZXRfc2hvd19hbGwocGFuZSk7CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgcGFuZSA9IGd0a19iaW5fZ2V0X2NoaWxkKEdUS19CSU4obV9wYXJl
bnRXaW5kb3cpKTsKKyAgICAgICAgZ3RrX3BhbmVkX3NldF9wb3NpdGlvbihHVEtfUEFORUQocGFu
ZSksIHdlYmtpdF93ZWJfaW5zcGVjdG9yX2dldF9hdHRhY2hlZF9oZWlnaHQobV9pbnNwZWN0b3Ip
KTsKKyAgICAgICAgZ3RrX3BhbmVkX2FkZDIoR1RLX1BBTkVEKHBhbmUpLCBHVEtfV0lER0VUKGlu
c3BlY3RvclZpZXcuZ2V0KCkpKTsKKworICAgICAgICByZXR1cm4gSW5zcGVjdG9yVGVzdDo6YXR0
YWNoKCk7CisgICAgfQorCisgICAgYm9vbCBkZXRhY2goKQorICAgIHsKKyAgICAgICAgR1JlZlB0
cjxXZWJLaXRXZWJWaWV3QmFzZT4gaW5zcGVjdG9yVmlldyA9IHdlYmtpdF93ZWJfaW5zcGVjdG9y
X2dldF93ZWJfdmlldyhtX2luc3BlY3Rvcik7CisgICAgICAgIEd0a1dpZGdldCogcGFuZSA9IGd0
a19iaW5fZ2V0X2NoaWxkKEdUS19CSU4obV9wYXJlbnRXaW5kb3cpKTsKKyAgICAgICAgZ19hc3Nl
cnQoR1RLX0lTX1BBTkVEKHBhbmUpKTsKKyAgICAgICAgZ3RrX2NvbnRhaW5lcl9yZW1vdmUoR1RL
X0NPTlRBSU5FUihwYW5lKSwgR1RLX1dJREdFVChpbnNwZWN0b3JWaWV3LmdldCgpKSk7CisgICAg
ICAgIHJldHVybiBJbnNwZWN0b3JUZXN0OjpkZXRhY2goKTsKKyAgICB9CisKKyAgICB2b2lkIGRl
c3Ryb3lXaW5kb3coKQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQobV9pbnNwZWN0b3JXaW5kb3cp
OworICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV9pbnNwZWN0b3JXaW5kb3cpOworICAgICAg
ICBtX2luc3BlY3RvcldpbmRvdyA9IDA7CisgICAgfQorCisgICAgR3RrV2lkZ2V0KiBtX2luc3Bl
Y3RvcldpbmRvdzsKK307CisKK3N0YXRpYyB2b2lkIHRlc3RJbnNwZWN0b3JNYW51YWxBdHRhY2hE
ZXRhY2goQ3VzdG9tSW5zcGVjdG9yVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0
ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoR1RLX1dJTkRPV19UT1BMRVZFTCk7
CisgICAgdGVzdC0+cmVzaXplVmlldygyMDAsIDIwMCk7CisgICAgdGVzdC0+bG9hZEh0bWwoIjxo
dG1sPjxib2R5PjxwPldlYktpdEdUSysgSW5zcGVjdG9yIHRlc3Q8L3A+PC9ib2R5PjwvaHRtbD4i
LCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3QtPnNo
b3coKTsKKyAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdf
T0JKRUNUKHdlYmtpdF93ZWJfaW5zcGVjdG9yX2dldF93ZWJfdmlldyh0ZXN0LT5tX2luc3BlY3Rv
cikpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl9pbnNwZWN0b3JfaXNfYXR0YWNoZWQodGVz
dC0+bV9pbnNwZWN0b3IpKTsKKyAgICBWZWN0b3I8SW5zcGVjdG9yVGVzdDo6SW5zcGVjdG9yRXZl
bnRzPiYgZXZlbnRzID0gdGVzdC0+bV9ldmVudHM7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50
cy5zaXplKCksID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgSW5z
cGVjdG9yVGVzdDo6T3BlbldpbmRvdyk7CisgICAgdGVzdC0+bV9ldmVudHMuY2xlYXIoKTsKKwor
ICAgIHRlc3QtPnJlc2l6ZVZpZXdBbmRBdHRhY2goKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2Vi
X2luc3BlY3Rvcl9pc19hdHRhY2hlZCh0ZXN0LT5tX2luc3BlY3RvcikpOworICAgIGdfYXNzZXJ0
X2NtcHVpbnQod2Via2l0X3dlYl9pbnNwZWN0b3JfZ2V0X2F0dGFjaGVkX2hlaWdodCh0ZXN0LT5t
X2luc3BlY3RvciksID49LCBJbnNwZWN0b3JUZXN0OjpnTWluaW11bUF0dGFjaGVkSW5zcGVjdG9y
SGVpZ2h0KTsKKyAgICBldmVudHMgPSB0ZXN0LT5tX2V2ZW50czsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoZXZlbnRzLnNpemUoKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0s
ID09LCBJbnNwZWN0b3JUZXN0OjpBdHRhY2gpOworICAgIHRlc3QtPm1fZXZlbnRzLmNsZWFyKCk7
CisKKyAgICB0ZXN0LT5kZXRhY2hBbmRXYWl0VW50aWxXaW5kb3dPcGVuZWQoKTsKKyAgICBnX2Fz
c2VydCghd2Via2l0X3dlYl9pbnNwZWN0b3JfaXNfYXR0YWNoZWQodGVzdC0+bV9pbnNwZWN0b3Ip
KTsKKyAgICBldmVudHMgPSB0ZXN0LT5tX2V2ZW50czsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZl
bnRzLnNpemUoKSwgPT0sIDIpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBJ
bnNwZWN0b3JUZXN0OjpEZXRhY2gpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09
LCBJbnNwZWN0b3JUZXN0OjpPcGVuV2luZG93KTsKKyAgICB0ZXN0LT5tX2V2ZW50cy5jbGVhcigp
OworCisgICAgdGVzdC0+cmVzaXplVmlld0FuZEF0dGFjaCgpOworICAgIGdfYXNzZXJ0KHdlYmtp
dF93ZWJfaW5zcGVjdG9yX2lzX2F0dGFjaGVkKHRlc3QtPm1faW5zcGVjdG9yKSk7CisgICAgdGVz
dC0+bV9ldmVudHMuY2xlYXIoKTsKKyAgICB0ZXN0LT5jbG9zZSgpOworICAgIGV2ZW50cyA9IHRl
c3QtPm1fZXZlbnRzOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgMik7
CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIEluc3BlY3RvclRlc3Q6OkRldGFj
aCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIEluc3BlY3RvclRlc3Q6OkNs
b3NlZCk7CisgICAgdGVzdC0+bV9ldmVudHMuY2xlYXIoKTsKK30KKworc3RhdGljIHZvaWQgdGVz
dEluc3BlY3RvckN1c3RvbUNvbnRhaW5lckRlc3Ryb3llZChDdXN0b21JbnNwZWN0b3JUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRp
bE1hcHBlZChHVEtfV0lORE9XX1RPUExFVkVMKTsKKyAgICB0ZXN0LT5yZXNpemVWaWV3KDIwMCwg
MjAwKTsKKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHk+PHA+V2ViS2l0R1RLKyBJbnNw
ZWN0b3IgdGVzdDwvcD48L2JvZHk+PC9odG1sPiIsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExv
YWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+c2hvdygpOworICAgIHRlc3QtPmFzc2VydE9iamVj
dElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1Qod2Via2l0X3dlYl9pbnNwZWN0b3Jf
Z2V0X3dlYl92aWV3KHRlc3QtPm1faW5zcGVjdG9yKSkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRf
d2ViX2luc3BlY3Rvcl9pc19hdHRhY2hlZCh0ZXN0LT5tX2luc3BlY3RvcikpOworCisgICAgdGVz
dC0+bV9ldmVudHMuY2xlYXIoKTsKKyAgICB0ZXN0LT5kZXN0cm95V2luZG93KCk7CisgICAgVmVj
dG9yPEluc3BlY3RvclRlc3Q6Okluc3BlY3RvckV2ZW50cz4mIGV2ZW50cyA9IHRlc3QtPm1fZXZl
bnRzOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgMSk7CisgICAgZ19h
c3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIEluc3BlY3RvclRlc3Q6OkNsb3NlZCk7CisgICAg
dGVzdC0+bV9ldmVudHMuY2xlYXIoKTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQoreworICAgIElu
c3BlY3RvclRlc3Q6OmFkZCgiV2ViS2l0V2ViSW5zcGVjdG9yIiwgImRlZmF1bHQiLCB0ZXN0SW5z
cGVjdG9yRGVmYXVsdCk7CisgICAgQ3VzdG9tSW5zcGVjdG9yVGVzdDo6YWRkKCJXZWJLaXRXZWJJ
bnNwZWN0b3IiLCAibWFudWFsLWF0dGFjaC1kZXRhY2giLCB0ZXN0SW5zcGVjdG9yTWFudWFsQXR0
YWNoRGV0YWNoKTsKKyAgICBDdXN0b21JbnNwZWN0b3JUZXN0OjphZGQoIldlYktpdFdlYkluc3Bl
Y3RvciIsICJjdXN0b20tY29udGFpbmVyLWRlc3Ryb3llZCIsIHRlc3RJbnNwZWN0b3JDdXN0b21D
b250YWluZXJEZXN0cm95ZWQpOworfQorCit2b2lkIGFmdGVyQWxsKCkKK3sKK30KZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0SW5zcGVjdG9yU2Vy
dmVyLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0SW5zcGVj
dG9yU2VydmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmI2MmNl
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3Rr
L1Rlc3RJbnNwZWN0b3JTZXJ2ZXIuY3BwCkBAIC0wLDAgKzEsMjk0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MgTHRkLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisg
KiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJXZWJW
aWV3VGVzdC5oIgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworLy8gTmFtZSBvZiB0aGUgdGVzdCBzZXJ2ZXIgYXBwbGlj
YXRpb24gY3JlYXRpbmcgdGhlIHdlYlZpZXcgb2JqZWN0Lgorc3RhdGljIGNvbnN0IGNoYXIqIGdU
ZXN0U2VydmVyQXBwTmFtZSA9ICJJbnNwZWN0b3JUZXN0U2VydmVyIjsKKworLy8gTWF4IHNlY29u
ZHMgdG8gd2FpdCBmb3IgdGhlIHRlc3Qgc2VydmVyIGJlZm9yZSBpbnNwZWN0aW5nIGl0Lgorc3Rh
dGljIGNvbnN0IGludCBnTWF4V2FpdEZvckNoaWxkID0gNTsKKworLy8gVGhlIFBJRCBmb3IgdGhl
IHRlc3Qgc2VydmVyIHJ1bm5pbmcsIHNvIHdlIGNhbiBraWxsIGl0IGlmIG5lZWRlZC4KK3N0YXRp
YyBHUGlkIGdDaGlsZFByb2Nlc3NQaWQgPSAwOworCisvLyBXaGV0aGVyIHRoZSBjaGlsZCBoYXMg
cmVwbGllZCBhbmQgaXQncyByZWFkeS4KK3N0YXRpYyBib29sIGdDaGlsZElzUmVhZHkgPSBmYWxz
ZTsKKworc3RhdGljIHZvaWQgc3RvcFRlc3RTZXJ2ZXIoKQoreworICAgIC8vIERvIG5vdGhpbmcg
aWYgdGhlcmUncyBubyBzZXJ2ZXIgcnVubmluZy4KKyAgICBpZiAoIWdDaGlsZFByb2Nlc3NQaWQp
CisgICAgICAgIHJldHVybjsKKworICAgIGdfc3Bhd25fY2xvc2VfcGlkKGdDaGlsZFByb2Nlc3NQ
aWQpOworICAgIGtpbGwoZ0NoaWxkUHJvY2Vzc1BpZCwgU0lHVEVSTSk7CisgICAgZ0NoaWxkUHJv
Y2Vzc1BpZCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHNpZ0Fib3J0SGFuZGxlcihpbnQgc2lnTnVt
KQoreworICAgIC8vIEp1c3Qgc3RvcCB0aGUgdGVzdCBzZXJ2ZXIgaWYgU0lHQUJSVCB3YXMgcmVj
ZWl2ZWQuCisgICAgc3RvcFRlc3RTZXJ2ZXIoKTsKK30KKworc3RhdGljIGdwb2ludGVyIHRlc3RT
ZXJ2ZXJNb25pdG9yVGhyZWFkRnVuYyhncG9pbnRlcikKK3sKKyAgICAvLyBXYWl0IGZvciB0aGUg
c3BlY2lmaWVkIHRpbWVvdXQgdG8gaGFwcGVuLgorICAgIGdfdXNsZWVwKGdNYXhXYWl0Rm9yQ2hp
bGQgKiBHX1VTRUNfUEVSX1NFQyk7CisKKyAgICAvLyBLaWxsIHRoZSBjaGlsZCBwcm9jZXNzIGlm
IG5vdCByZWFkeSB5ZXQuCisgICAgaWYgKCFnQ2hpbGRJc1JlYWR5KQorICAgICAgICBzdG9wVGVz
dFNlcnZlcigpOworCisgICAgZ190aHJlYWRfZXhpdCgwKTsKKyAgICByZXR1cm4gMDsKK30KKwor
c3RhdGljIHZvaWQgc3RhcnRUZXN0U2VydmVyTW9uaXRvcigpCit7CisgICAgZ0NoaWxkSXNSZWFk
eSA9IGZhbHNlOworICAgIGdfdGhyZWFkX25ldygiVGVzdFNlcnZlck1vbml0b3IiLCB0ZXN0U2Vy
dmVyTW9uaXRvclRocmVhZEZ1bmMsIDApOworfQorCitzdGF0aWMgdm9pZCBzdGFydFRlc3RTZXJ2
ZXIoKQoreworICAgIC8vIFByZXBhcmUgYXJndltdIGZvciBzcGF3bmluZyB0aGUgc2VydmVyIHBy
b2Nlc3MuCisgICAgR093blB0cjxjaGFyPiB0ZXN0U2VydmVyUGF0aChnX2J1aWxkX2ZpbGVuYW1l
KFdFQktJVF9FWEVDX1BBVEgsICJUZXN0V2ViS2l0QVBJIiwgIldlYktpdDJHdGsiLCBnVGVzdFNl
cnZlckFwcE5hbWUsIE5VTEwpKTsKKworICAgIC8vIFdlIGluc3RhbGwgYSBoYW5kbGVyIHRvIGVu
c3VyZSB0aGF0IHdlIGtpbGwgdGhlIGNoaWxkIHByb2Nlc3MKKyAgICAvLyBpZiB0aGUgcGFyZW50
IGRpZXMgYmVjYXVzZSBvZiB3aGF0ZXZlciB0aGUgcmVhc29uIGlzLgorICAgIHNpZ25hbChTSUdB
QlJULCBzaWdBYm9ydEhhbmRsZXIpOworCisgICAgY2hhciogdGVzdFNlcnZlckFyZ3ZbMl07Cisg
ICAgdGVzdFNlcnZlckFyZ3ZbMF0gPSB0ZXN0U2VydmVyUGF0aC5nZXQoKTsKKyAgICB0ZXN0U2Vy
dmVyQXJndlsxXSA9IDA7CisKKyAgICAvLyBTcGF3biB0aGUgc2VydmVyLCBnZXR0aW5nIGl0cyBz
dGRvdXQgZmlsZSBkZXNjcmlwdG9yIHRvIHNldCBhCisgICAgLy8gY29tbXVuaWNhdGlvbiBjaGFu
bmVsLCBzbyB3ZSBrbm93IHdoZW4gaXQncyByZWFkeS4KKyAgICBpbnQgY2hpbGRTdGRvdXQgPSAw
OworICAgIGdfYXNzZXJ0KGdfc3Bhd25fYXN5bmNfd2l0aF9waXBlcygwLCB0ZXN0U2VydmVyQXJn
diwgMCwgc3RhdGljX2Nhc3Q8R1NwYXduRmxhZ3M+KDApLCAwLCAwLAorICAgICAgICAmZ0NoaWxk
UHJvY2Vzc1BpZCwgMCwgJmNoaWxkU3Rkb3V0LCAwLCAwKSk7CisKKyAgICAvLyBTdGFydCBtb25p
dG9yaW5nIHRoZSB0ZXN0IHNlcnZlciAoaW4gYSBzZXBhcmF0ZSB0aHJlYWQpIHRvCisgICAgLy8g
ZW5zdXJlIHdlIGRvbid0IGJsb2NrIG9uIHRoZSBjaGlsZCBwcm9jZXNzIG1vcmUgdGhhbiBhIHRp
bWVvdXQuCisgICAgc3RhcnRUZXN0U2VydmVyTW9uaXRvcigpOworCisgICAgY2hhciBtc2dbMl07
CisgICAgR0lPQ2hhbm5lbCogaW9DaGFubmVsID0gZ19pb19jaGFubmVsX3VuaXhfbmV3KGNoaWxk
U3Rkb3V0KTsKKyAgICBpZiAoZ19pb19jaGFubmVsX3JlYWRfY2hhcnMoaW9DaGFubmVsLCBtc2cs
IDIsIDAsIDApID09IEdfSU9fU1RBVFVTX05PUk1BTCkgeworICAgICAgICAvLyBDaGVjayB3aGV0
aGVyIHRoZSBzZXJ2ZXIgc2VudCBhIG1lc3NhZ2Ugc2F5aW5nIGl0J3MgcmVhZHkKKyAgICAgICAg
Ly8gYW5kIHN0b3JlIHRoZSByZXN1bHQgZ2xvYmFsbHksIHNvIHRoZSBtb25pdG9yIGNhbiBzZWUg
aXQuCisgICAgICAgIGdDaGlsZElzUmVhZHkgPSBtc2dbMF0gPT0gJ08nICYmIG1zZ1sxXSA9PSAn
Syc7CisgICAgfQorICAgIGdfaW9fY2hhbm5lbF91bnJlZihpb0NoYW5uZWwpOworICAgIGNsb3Nl
KGNoaWxkU3Rkb3V0KTsKKworICAgIC8vIFRoZSB0aW1lb3V0IHdhcyByZWFjaGVkIGFuZCB0aGUg
c2VydmVyIGlzIG5vdCByZWFkeSB5ZXQsIHNvCisgICAgLy8gc3RvcCBpdCBpbm1lZGlhdGVseSwg
YW5kIGxldCB0aGUgdW5pdCB0ZXN0cyBmYWlsLgorICAgIGlmICghZ0NoaWxkSXNSZWFkeSkKKyAg
ICAgICAgc3RvcFRlc3RTZXJ2ZXIoKTsKK30KKworY2xhc3MgSW5zcGVjdG9yU2VydmVyVGVzdDog
cHVibGljIFdlYlZpZXdUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJF
KEluc3BlY3RvclNlcnZlclRlc3QpOworCisgICAgSW5zcGVjdG9yU2VydmVyVGVzdCgpCisgICAg
ICAgIDogV2ViVmlld1Rlc3QoKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGdldFBhZ2VMaXN0
KCkKKyAgICB7CisgICAgICAgIGxvYWRIdG1sKCI8c2NyaXB0IHR5cGU9XCJ0ZXh0L2phdmFzY3Jp
cHRcIj5cbiIKKyAgICAgICAgICAgICJ2YXIgcGFnZXM7XG4iCisgICAgICAgICAgICAidmFyIHho
ciA9IG5ldyBYTUxIdHRwUmVxdWVzdDtcbiIKKyAgICAgICAgICAgICJ4aHIub3BlbihcIkdFVFwi
LCBcIi9wYWdlbGlzdC5qc29uXCIpO1xuIgorICAgICAgICAgICAgInhoci5vbmxvYWQgPSBmdW5j
dGlvbihlKSB7XG4iCisgICAgICAgICAgICAgICAgImlmICh4aHIuc3RhdHVzID09IDIwMCkge1xu
IgorICAgICAgICAgICAgICAgICAgICAicGFnZXMgPSBKU09OLnBhcnNlKHhoci5yZXNwb25zZVRl
eHQpO1xuIgorICAgICAgICAgICAgICAgICAgICAiZG9jdW1lbnQudGl0bGUgPSBcIk9LXCI7XG4i
CisgICAgICAgICAgICAgICAgIn0gZWxzZSBcbiIKKyAgICAgICAgICAgICAgICAgICAgImRvY3Vt
ZW50LnRpdGxlID0gXCJGQUlMXCI7XG4iCisgICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAg
ICAgICJ4aHIuc2VuZCgpO1xuIgorICAgICAgICAgICAgIjwvc2NyaXB0PlxuIiwKKyAgICAgICAg
ICAgICJodHRwOi8vMTI3LjAuMC4xOjI5OTkvIik7CisKKyAgICAgICAgd2FpdFVudGlsVGl0bGVD
aGFuZ2VkKCk7CisKKyAgICAgICAgaWYgKCFzdHJjbXAod2Via2l0X3dlYl92aWV3X2dldF90aXRs
ZShtX3dlYlZpZXcpLCAiT0siKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB+SW5zcGVjdG9yU2VydmVyVGVzdCgpCisgICAg
eworICAgIH0KK307CisKKy8vIFRlc3QgdG8gZ2V0IGluc3BlY3RvciBzZXJ2ZXIgcGFnZSBsaXN0
IGZyb20gdGhlIHRlc3Qgc2VydmVyLgorLy8gU2hvdWxkIGNvbnRhaW4gb25seSBvbmUgZW50cnkg
cG9pbnRpbmcgdG8gaHR0cDovLzEyNy4wLjAuMToyOTk5L3dlYmluc3BlY3Rvci9NYWluLmh0bWw/
cGFnZT0xCitzdGF0aWMgdm9pZCB0ZXN0SW5zcGVjdG9yU2VydmVyUGFnZUxpc3QoSW5zcGVjdG9y
U2VydmVyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBHT3duUHRyPEdFcnJvcj4g
ZXJyb3I7CisKKyAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoR1RLX1dJ
TkRPV19UT1BMRVZFTCk7CisgICAgZ19hc3NlcnQodGVzdC0+Z2V0UGFnZUxpc3QoKSk7CisKKyAg
ICBXZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2
YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJwYWdlcy5sZW5ndGg7IiwgJmVycm9yLm91dFB0
cigpKTsKKyAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydCghZXJy
b3IuZ2V0KCkpOworICAgIGdfYXNzZXJ0X2NtcGludChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJl
c3VsdFRvTnVtYmVyKGphdmFzY3JpcHRSZXN1bHQpLCA9PSwgMSk7CisKKyAgICBqYXZhc2NyaXB0
UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJwYWdlc1sw
XS5pZDsiLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQp
OworICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7CisgICAgaW50IHBhZ2VJZCA9IFdlYlZpZXdU
ZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9OdW1iZXIoamF2YXNjcmlwdFJlc3VsdCk7CisKKyAgICBH
T3duUHRyPGNoYXI+IHZhbHVlU3RyaW5nOworICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5y
dW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoInBhZ2VzWzBdLnVybDsiLCAmZXJyb3Iu
b3V0UHRyKCkpOworICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0
KCFlcnJvci5nZXQoKSk7CisgICAgdmFsdWVTdHJpbmcuc2V0KFdlYlZpZXdUZXN0OjpqYXZhc2Ny
aXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKKyAgICBnX2Fzc2VydF9jbXBz
dHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAiaHR0cDovLzEyNy4wLjAuMToyOTk5LyIpOworCisg
ICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5p
c2hlZCgicGFnZXNbMF0uaW5zcGVjdG9yVXJsOyIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19h
c3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKyAg
ICB2YWx1ZVN0cmluZy5zZXQoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0NTdHJpbmco
amF2YXNjcmlwdFJlc3VsdCkpOworICAgIFN0cmluZyB2YWxpZEluc3BlY3RvclVSTCA9IFN0cmlu
ZygiL01haW4uaHRtbD9wYWdlPSIpICsgU3RyaW5nOjpudW1iZXIocGFnZUlkKTsKKyAgICBBU1NF
UlRfQ01QX0NTVFJJTkcodmFsdWVTdHJpbmcuZ2V0KCksID09LCB2YWxpZEluc3BlY3RvclVSTC51
dGY4KCkpOworfQorCisvLyBUZXN0IHNlbmRpbmcgYSByYXcgcmVtb3RlIGRlYnVnZ2luZyBtZXNz
YWdlIHRocm91Z2ggb3VyIHdlYiBzb2NrZXQgc2VydmVyLgorLy8gRm9yIHRoaXMgc3BlY2lmaWMg
bWVzc2FnZSBzZWU6IGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vY2hyb21lL2RldnRvb2xzL2RvY3Mv
cHJvdG9jb2wvdG90L3J1bnRpbWUuaHRtbCNjb21tYW5kLWV2YWx1YXRlCitzdGF0aWMgdm9pZCB0
ZXN0UmVtb3RlRGVidWdnaW5nTWVzc2FnZShJbnNwZWN0b3JTZXJ2ZXJUZXN0KiB0ZXN0LCBnY29u
c3Rwb2ludGVyKQoreworICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZChH
VEtfV0lORE9XX1RPUExFVkVMKTsKKworICAgIHRlc3QtPmxvYWRIdG1sKCI8c2NyaXB0IHR5cGU9
XCJ0ZXh0L2phdmFzY3JpcHRcIj5cbiIKKyAgICAgICAgInZhciBzb2NrZXQgPSBuZXcgV2ViU29j
a2V0KCd3czovLzEyNy4wLjAuMToyOTk5L2RldnRvb2xzL3BhZ2UvMScpO1xuIgorICAgICAgICAi
c29ja2V0Lm9ubWVzc2FnZSA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHtcbiIKKyAgICAgICAgICAgICJ2
YXIgcmVzcG9uc2UgPSBKU09OLnBhcnNlKG1lc3NhZ2UuZGF0YSk7XG4iCisgICAgICAgICAgICAi
aWYgKHJlc3BvbnNlLmlkID09PSAxKVxuIgorICAgICAgICAgICAgICAgICJkb2N1bWVudC50aXRs
ZSA9IHJlc3BvbnNlLnJlc3VsdC5yZXN1bHQudmFsdWU7XG4iCisgICAgICAgICAgICAiZWxzZVxu
IgorICAgICAgICAgICAgICAgICJkb2N1bWVudC50aXRsZSA9IFwiRkFJTFwiO1xuIgorICAgICAg
ICAgICAgIn1cbiIKKyAgICAgICAgICAgICJzb2NrZXQub25vcGVuID0gZnVuY3Rpb24oKSB7XG4i
CisgICAgICAgICAgICAic29ja2V0LnNlbmQoJ3tcImlkXCI6IDEsIFwibWV0aG9kXCI6IFwiUnVu
dGltZS5ldmFsdWF0ZVwiLCBcInBhcmFtc1wiOiB7XCJleHByZXNzaW9uXCI6IFwiMiArIDJcIiB9
IH0nKTtcbiIKKyAgICAgICAgIn1cbiIKKyAgICAgICAgIjwvc2NyaXB0PiIsCisgICAgICAgICJo
dHRwOi8vMTI3LjAuMC4xOjI5OTkvIik7CisgICAgdGVzdC0+d2FpdFVudGlsVGl0bGVDaGFuZ2Vk
KCk7CisKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dldF90aXRsZSh0ZXN0
LT5tX3dlYlZpZXcpLCA9PSwgIjQiKTsKK30KKworc3RhdGljIHZvaWQgb3BlblJlbW90ZURlYnVn
Z2luZ1Nlc3Npb24oSW5zcGVjdG9yU2VydmVyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sK
KyAgICAvLyBUbyB0ZXN0IHRoZSB3aG9sZSBwaXBlbGluZSB0aGlzIGV4cGxvaXRzIGEgYmVoYXZp
b3Igb2YgdGhlIGluc3BlY3RvciBmcm9udC1lbmQgd2hpY2ggd29uJ3QgcHJvdmlkZSB0aGUgcGFn
ZSBhZGRyZXNzIGFzIHRpdGxlIHVubGVzcyB0aGUKKyAgICAvLyBkZWJ1Z2dpbmcgc2Vzc2lvbiB3
YXMgZXN0YWJsaXNoZWQgY29ycmVjdGx5IHRocm91Z2ggd2ViIHNvY2tldC4KKyAgICAvLyBJbiBv
dXIgY2FzZSBwYWdlIFVSTCBzaG91bGQgYmUgaHR0cDovLzEyNy4wLjAuMToyOTk5LworICAgIC8v
IFNvIHRoaXMgdGVzdCBjYXNlIHdpbGwgZmFpbCBpZjoKKyAgICAvLyAtIFRoZSBwYWdlIGxpc3Qg
ZGlkbid0IHJldHVybiBhIHZhbGlkIGluc3BlY3RvciBVUkwKKyAgICAvLyAtIE9yIHRoZSBmcm9u
dC1lbmQgY291bGRuJ3QgYmUgbG9hZGVkIHRocm91Z2ggdGhlIGluc3BlY3RvciBIVFRQIHNlcnZl
cgorICAgIC8vIC0gT3IgdGhlIHdlYiBzb2NrZXQgY29ubmVjdGlvbiBjb3VsZG4ndCBiZSBlc3Rh
Ymxpc2hlZCBiZXR3ZWVuIHRoZSBmcm9udC1lbmQgYW5kIHRoZSBwYWdlIHRocm91Z2ggdGhlIGlu
c3BlY3RvciBzZXJ2ZXIKKyAgICAvLyBMZXQncyBzZWUgaWYgdGhpcyB0ZXN0IGlzbid0IHJhaXNp
bmcgdG9vIG1hbnkgZmFsc2UgcG9zaXRpdmVzLCBpbiB3aGljaCBjYXNlIHdlIHNob3VsZCB1c2Ug
YSBiZXR0ZXIgcHJlZGljYXRlIGlmIGF2YWlsYWJsZS4KKworICAgIHRlc3QtPnNob3dJbldpbmRv
d0FuZFdhaXRVbnRpbE1hcHBlZChHVEtfV0lORE9XX1RPUExFVkVMKTsKKworICAgIGdfYXNzZXJ0
KHRlc3QtPmdldFBhZ2VMaXN0KCkpOworCisgICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAg
IFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZh
U2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoInBhZ2VzWzBdLmluc3BlY3RvclVybDsiLCAmZXJy
b3Iub3V0UHRyKCkpOworICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNz
ZXJ0KCFlcnJvci5nZXQoKSk7CisKKyAgICBTdHJpbmcgcmVzb2x2ZWRVUkwgPSBTdHJpbmcoImh0
dHA6Ly8xMjcuMC4wLjE6Mjk5OS8iKSArIFN0cmluZzo6ZnJvbVVURjgoV2ViVmlld1Rlc3Q6Omph
dmFzY3JpcHRSZXN1bHRUb0NTdHJpbmcoamF2YXNjcmlwdFJlc3VsdCkpOworICAgIHRlc3QtPmxv
YWRVUkkocmVzb2x2ZWRVUkwudXRmOCgpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9h
ZEZpbmlzaGVkKCk7CisKKyAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlw
dEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJ3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05h
bWUoJ2xpJylbMF0udGl0bGUiLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGdfYXNzZXJ0KGphdmFz
Y3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7CisKKyAgICBHT3duUHRy
PGNoYXI+IHRpdGxlKFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFz
Y3JpcHRSZXN1bHQpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGl0bGUuZ2V0KCksID09LCAiaHR0
cDovLzEyNy4wLjAuMToyOTk5LyIpOworfQorCitzdGF0aWMgdm9pZCBzZW5kSW5jb21wbGV0ZVJl
cXVlc3QoSW5zcGVjdG9yU2VydmVyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBH
T3duUHRyPEdFcnJvcj4gZXJyb3I7CisKKyAgICAvLyBDb25uZWN0IHRvIHRoZSBpbnNwZWN0b3Ig
c2VydmVyLgorICAgIEdSZWZQdHI8R1NvY2tldENsaWVudD4gY2xpZW50ID0gYWRvcHRHUmVmKGdf
c29ja2V0X2NsaWVudF9uZXcoKSk7CisgICAgR1JlZlB0cjxHU29ja2V0Q29ubmVjdGlvbj4gY29u
bmVjdGlvbiA9IGFkb3B0R1JlZihnX3NvY2tldF9jbGllbnRfY29ubmVjdF90b19ob3N0KGNsaWVu
dC5nZXQoKSwgIjEyNy4wLjAuMSIsIDI5OTksIDAsICZlcnJvci5vdXRQdHIoKSkpOworICAgIGdf
YXNzZXJ0X25vX2Vycm9yKGVycm9yLmdldCgpKTsKKworICAgIC8vIFNlbmQgaW5jb21wbGV0ZSBy
ZXF1ZXN0IChtaXNzaW5nIGJsYW5rIGxpbmUgYWZ0ZXIgaGVhZGVycykgYW5kIGNoZWNrIGlmIGlu
c3BlY3RvciBzZXJ2ZXIKKyAgICAvLyByZXBsaWVzLiBUaGUgc2VydmVyIHNob3VsZCBub3QgcmVw
bHkgdG8gYW4gaW5jb21wbGV0ZSByZXF1ZXN0IGFuZCB0aGUgdGVzdCBzaG91bGQgdGltZW91dAor
ICAgIC8vIG9uIHJlYWQuCisgICAgR091dHB1dFN0cmVhbSogb3N0cmVhbSA9IGdfaW9fc3RyZWFt
X2dldF9vdXRwdXRfc3RyZWFtKEdfSU9fU1RSRUFNKGNvbm5lY3Rpb24uZ2V0KCkpKTsKKyAgICAv
LyBSZXF1ZXN0IG1pc3NpbmcgYmxhbmsgbGluZSBhZnRlciBoZWFkZXJzLgorICAgIGNvbnN0IGdj
aGFyKiBpbmNvbXBsZXRlUmVxdWVzdCA9ICJHRVQgL2RldnRvb2xzL3BhZ2UvMSBIVFRQLzEuMVxy
XG5Ib3N0OiBMb2NhbGhvc3RcclxuIjsKKyAgICBnX291dHB1dF9zdHJlYW1fd3JpdGUob3N0cmVh
bSwgaW5jb21wbGV0ZVJlcXVlc3QsIHN0cmxlbihpbmNvbXBsZXRlUmVxdWVzdCksIDAsICZlcnJv
ci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnRfbm9fZXJyb3IoZXJyb3IuZ2V0KCkpOworCisgICAg
R0lucHV0U3RyZWFtKiBpc3RyZWFtID0gZ19pb19zdHJlYW1fZ2V0X2lucHV0X3N0cmVhbShHX0lP
X1NUUkVBTShjb25uZWN0aW9uLmdldCgpKSk7CisgICAgY2hhciByZXNwb25zZVsxNl07CisgICAg
bWVtc2V0KHJlc3BvbnNlLCAwLCBzaXplb2YocmVzcG9uc2UpKTsKKyAgICBHUmVmUHRyPEdDYW5j
ZWxsYWJsZT4gY2FuY2VsID0gYWRvcHRHUmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpOworICAgIGdf
aW5wdXRfc3RyZWFtX3JlYWRfYXN5bmMoaXN0cmVhbSwgcmVzcG9uc2UsIHNpemVvZihyZXNwb25z
ZSkgLSAxLCBHX1BSSU9SSVRZX0RFRkFVTFQsIGNhbmNlbC5nZXQoKSwgMCwgMCk7CisgICAgLy8g
R2l2ZSBhIGNoYW5jZSBmb3IgdGhlIHNlcnZlciB0byByZXBseS4KKyAgICB0ZXN0LT53YWl0KDEp
OworICAgIGdfY2FuY2VsbGFibGVfY2FuY2VsKGNhbmNlbC5nZXQoKSk7CisgICAgLy8gSWYgd2Ug
Z290IGFueSBhbnN3ZXIgaXQgbWVhbnMgdGhlIHNlcnZlciByZXBsaWVkIHRvIGFuIGluY29tcGxl
dGUgcmVxdWVzdCwgbGV0cyBmYWlsLgorICAgIGdfYXNzZXJ0KHJlc3BvbnNlWzBdID09ICdcMCcp
OworfQorCit2b2lkIGJlZm9yZUFsbCgpCit7CisgICAgLy8gT3ZlcndyaXRlIFdFQktJVF9JTlNQ
RUNUT1JfU0VSVkVSIHZhcmlhYmxlIHdpdGggZGVmYXVsdCBJUCBhZGRyZXNzIGJ1dCBkaWZmZXJl
bnQgcG9ydCB0byBhdm9pZCBjb25mbGljdCB3aXRoIHRoZSB0ZXN0IGluc3BlY3RvciBzZXJ2ZXIg
cGFnZS4KKyAgICBnX3NldGVudigiV0VCS0lUX0lOU1BFQ1RPUl9TRVJWRVIiLCAiMTI3LjAuMC4x
OjI5OTgiLCBUUlVFKTsKKworICAgIHN0YXJ0VGVzdFNlcnZlcigpOworICAgIEluc3BlY3RvclNl
cnZlclRlc3Q6OmFkZCgiV2ViS2l0V2ViSW5zcGVjdG9yU2VydmVyIiwgInRlc3QtcGFnZS1saXN0
IiwgdGVzdEluc3BlY3RvclNlcnZlclBhZ2VMaXN0KTsKKyAgICBJbnNwZWN0b3JTZXJ2ZXJUZXN0
OjphZGQoIldlYktpdFdlYkluc3BlY3RvclNlcnZlciIsICJ0ZXN0LXJlbW90ZS1kZWJ1Z2dpbmct
bWVzc2FnZSIsIHRlc3RSZW1vdGVEZWJ1Z2dpbmdNZXNzYWdlKTsKKyAgICBJbnNwZWN0b3JTZXJ2
ZXJUZXN0OjphZGQoIldlYktpdFdlYkluc3BlY3RvclNlcnZlciIsICJ0ZXN0LW9wZW4tZGVidWdn
aW5nLXNlc3Npb24iLCBvcGVuUmVtb3RlRGVidWdnaW5nU2Vzc2lvbik7CisgICAgSW5zcGVjdG9y
U2VydmVyVGVzdDo6YWRkKCJXZWJLaXRXZWJJbnNwZWN0b3JTZXJ2ZXIiLCAidGVzdC1pbmNvbXBs
ZXRlLXJlcXVlc3QiLCBzZW5kSW5jb21wbGV0ZVJlcXVlc3QpOworCit9CisKK3ZvaWQgYWZ0ZXJB
bGwoKQoreworICAgIHN0b3BUZXN0U2VydmVyKCk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdExvYWRlckNsaWVudC5jcHAgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdExvYWRlckNsaWVudC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMxOTE1ZQotLS0gL2Rldi9udWxsCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0TG9hZGVyQ2xpZW50LmNw
cApAQCAtMCwwICsxLDQ2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBHdXN0
YXZvIE5vcm9uaGEgU2lsdmEKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBJZ2FsaWEgUy5M
LgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDExIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJM
b2FkVHJhY2tpbmdUZXN0LmgiCisjaW5jbHVkZSAiV2ViS2l0VGVzdEJ1cy5oIgorI2luY2x1ZGUg
IldlYktpdFRlc3RTZXJ2ZXIuaCIKKyNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgorI2luY2x1ZGUg
PGd0ay9ndGsuaD4KKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKK3N0YXRpYyBXZWJLaXRUZXN0QnVzKiBidXM7CitzdGF0aWMgV2ViS2l0
VGVzdFNlcnZlcioga1NlcnZlcjsKKworY29uc3QgY2hhcioga0ROVEhlYWRlck5vdFByZXNlbnQg
PSAiRE5UIGhlYWRlciBub3QgcHJlc2VudCI7CisKK3N0YXRpYyB2b2lkIHRlc3RMb2FkaW5nU3Rh
dHVzKExvYWRUcmFja2luZ1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICB0
ZXN0LT5zZXRSZWRpcmVjdFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvbm9ybWFsIikuZGF0
YSgpKTsKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9yZWRpcmVj
dCIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBW
ZWN0b3I8TG9hZFRyYWNraW5nVGVzdDo6TG9hZEV2ZW50cz4mIGV2ZW50cyA9IHRlc3QtPm1fbG9h
ZEV2ZW50czsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDQpOworICAg
IGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNp
b25hbExvYWRTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgTG9h
ZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkUmVjZWl2ZWRTZXJ2ZXJSZWRpcmVjdCk7Cisg
ICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRD
b21taXR0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbM10sID09LCBMb2FkVHJhY2tp
bmdUZXN0OjpMb2FkRmluaXNoZWQpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0TG9hZGluZ0Vycm9y
KExvYWRUcmFja2luZ1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9h
ZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvZXJyb3IiKS5kYXRhKCkpOworICAgIHRlc3Qt
PndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgVmVjdG9yPExvYWRUcmFja2luZ1Rlc3Q6
OkxvYWRFdmVudHM+JiBldmVudHMgPSB0ZXN0LT5tX2xvYWRFdmVudHM7CisgICAgZ19hc3NlcnRf
Y21waW50KGV2ZW50cy5zaXplKCksID09LCAzKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRz
WzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7CisgICAg
Z19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lv
bmFsTG9hZEZhaWxlZCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIExvYWRU
cmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7Cit9CisKK3N0YXRpYyB2b2lkIGFzc2VydE5vcm1h
bExvYWRIYXBwZW5lZChWZWN0b3I8TG9hZFRyYWNraW5nVGVzdDo6TG9hZEV2ZW50cz4mIGV2ZW50
cykKK3sKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDMpOworICAgIGdf
YXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25h
bExvYWRTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgTG9hZFRy
YWNraW5nVGVzdDo6TG9hZENvbW1pdHRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sy
XSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7Cit9CisKK3N0YXRpYyB2b2lk
IHRlc3RMb2FkSHRtbChMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQorewor
ICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keT5IZWxsbyBXZWJLaXQtR1RLKzwvYm9keT48
L2h0bWw+IiwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgYXNz
ZXJ0Tm9ybWFsTG9hZEhhcHBlbmVkKHRlc3QtPm1fbG9hZEV2ZW50cyk7Cit9CisKK3N0YXRpYyB2
b2lkIHRlc3RMb2FkQWx0ZXJuYXRlSFRNTChMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0LCBnY29uc3Rw
b2ludGVyKQoreworICAgIHRlc3QtPmxvYWRBbHRlcm5hdGVIVE1MKCI8aHRtbD48Ym9keT5BbHRl
cm5hdGUgcGFnZTwvYm9keT48L2h0bWw+IiwgImh0dHA6Ly9lcnJvci1wYWdlLmZvby8iLCAwKTsK
KyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBhc3NlcnROb3JtYWxMb2Fk
SGFwcGVuZWQodGVzdC0+bV9sb2FkRXZlbnRzKTsKK30KKworc3RhdGljIHZvaWQgdGVzdExvYWRQ
bGFpblRleHQoTG9hZFRyYWNraW5nVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0
ZXN0LT5sb2FkUGxhaW5UZXh0KCJIZWxsbyBXZWJLaXQtR1RLKyIpOworICAgIHRlc3QtPndhaXRV
bnRpbExvYWRGaW5pc2hlZCgpOworICAgIGFzc2VydE5vcm1hbExvYWRIYXBwZW5lZCh0ZXN0LT5t
X2xvYWRFdmVudHMpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0TG9hZFJlcXVlc3QoTG9hZFRyYWNr
aW5nVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBHUmVmUHRyPFdlYktpdFVSSVJl
cXVlc3Q+IHJlcXVlc3Qod2Via2l0X3VyaV9yZXF1ZXN0X25ldyhrU2VydmVyLT5nZXRVUklGb3JQ
YXRoKCIvbm9ybWFsIikuZGF0YSgpKSk7CisgICAgdGVzdC0+bG9hZFJlcXVlc3QocmVxdWVzdC5n
ZXQoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgYXNzZXJ0Tm9y
bWFsTG9hZEhhcHBlbmVkKHRlc3QtPm1fbG9hZEV2ZW50cyk7Cit9CisKK2NsYXNzIExvYWRTdG9w
VHJhY2tpbmdUZXN0IDogcHVibGljIExvYWRUcmFja2luZ1Rlc3QgeworcHVibGljOgorICAgIE1B
S0VfR0xJQl9URVNUX0ZJWFRVUkUoTG9hZFN0b3BUcmFja2luZ1Rlc3QpOworCisgICAgdmlydHVh
bCB2b2lkIGxvYWRDb21taXR0ZWQoKQorICAgIHsKKyAgICAgICAgTG9hZFRyYWNraW5nVGVzdDo6
bG9hZENvbW1pdHRlZCgpOworICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfc3RvcF9sb2FkaW5nKG1f
d2ViVmlldyk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBsb2FkRmFpbGVkKGNvbnN0IGdjaGFy
KiBmYWlsaW5nVVJJLCBHRXJyb3IqIGVycm9yKQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQoZ19l
cnJvcl9tYXRjaGVzKGVycm9yLCBXRUJLSVRfTkVUV09SS19FUlJPUiwgV0VCS0lUX05FVFdPUktf
RVJST1JfQ0FOQ0VMTEVEKSk7CisgICAgICAgIExvYWRUcmFja2luZ1Rlc3Q6OmxvYWRGYWlsZWQo
ZmFpbGluZ1VSSSwgZXJyb3IpOworICAgIH0KK307CisKK3N0YXRpYyB2b2lkIHRlc3RMb2FkQ2Fu
Y2VsbGVkKExvYWRTdG9wVHJhY2tpbmdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAg
IHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2NhbmNlbGxlZCIpLmRhdGEo
KSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBWZWN0b3I8TG9h
ZFRyYWNraW5nVGVzdDo6TG9hZEV2ZW50cz4mIGV2ZW50cyA9IHRlc3QtPm1fbG9hZEV2ZW50czsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDQpOworICAgIGdfYXNzZXJ0
X2NtcGludChldmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRT
dGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5n
VGVzdDo6TG9hZENvbW1pdHRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0s
IExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGYWlsZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVu
dHNbM10sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOworfQorCitzdGF0aWMg
dm9pZCB0ZXN0V2ViVmlld1RpdGxlKExvYWRUcmFja2luZ1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCit7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19nZXRfdGl0bGUodGVzdC0+bV93
ZWJWaWV3KSk7CisgICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxoZWFkPjx0aXRsZT5XZWxjb21l
IHRvIFdlYktpdC1HVEsrITwvdGl0bGU+PC9oZWFkPjwvaHRtbD4iLCAwKTsKKyAgICB0ZXN0LT53
YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92
aWV3X2dldF90aXRsZSh0ZXN0LT5tX3dlYlZpZXcpLCA9PSwgIldlbGNvbWUgdG8gV2ViS2l0LUdU
SyshIik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3UmVsb2FkKExvYWRUcmFja2luZ1Rl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8gQ2hlY2sgdGhhdCBub3RoaW5nIGhh
cHBlbnMgd2hlbiB0aGVyZSdzIG5vdGhpbmcgdG8gcmVsb2FkLgorICAgIHRlc3QtPnJlbG9hZCgp
OworICAgIHRlc3QtPndhaXQoMC4yNSk7IC8vIFdhaXQgZm9yIGEgcXVhcnRlciBvZiBhIHNlY29u
ZC4KKworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL25vcm1hbCIp
LmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgYXNzZXJ0
Tm9ybWFsTG9hZEhhcHBlbmVkKHRlc3QtPm1fbG9hZEV2ZW50cyk7CisKKyAgICB0ZXN0LT5yZWxv
YWQoKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBhc3NlcnROb3Jt
YWxMb2FkSGFwcGVuZWQodGVzdC0+bV9sb2FkRXZlbnRzKTsKK30KKworc3RhdGljIHZvaWQgdGVz
dExvYWRQcm9ncmVzcyhMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQorewor
ICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL25vcm1hbCIpLmRhdGEo
KSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnRfY21w
ZmxvYXQodGVzdC0+bV9lc3RpbWF0ZWRQcm9ncmVzcywgPT0sIDEpOworfQorCitzdGF0aWMgdm9p
ZCB0ZXN0V2ViVmlld0hpc3RvcnlMb2FkKExvYWRUcmFja2luZ1Rlc3QqIHRlc3QsIGdjb25zdHBv
aW50ZXIpCit7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvbm9y
bWFsIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBh
c3NlcnROb3JtYWxMb2FkSGFwcGVuZWQodGVzdC0+bV9sb2FkRXZlbnRzKTsKKworICAgIHRlc3Qt
PmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL25vcm1hbDIiKS5kYXRhKCkpOworICAg
IHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIGFzc2VydE5vcm1hbExvYWRIYXBw
ZW5lZCh0ZXN0LT5tX2xvYWRFdmVudHMpOworCisgICAgLy8gQ2hlY2sgdGhhdCBsb2FkIHByb2Nl
c3MgaXMgdGhlIHNhbWUgZm9yIHBhZ2VzIGxvYWRlZCBmcm9tIGhpc3RvcnkgY2FjaGUuCisgICAg
dGVzdC0+Z29CYWNrKCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAg
YXNzZXJ0Tm9ybWFsTG9hZEhhcHBlbmVkKHRlc3QtPm1fbG9hZEV2ZW50cyk7CisKKyAgICB0ZXN0
LT5nb0ZvcndhcmQoKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBh
c3NlcnROb3JtYWxMb2FkSGFwcGVuZWQodGVzdC0+bV9sb2FkRXZlbnRzKTsKK30KKworY2xhc3Mg
Vmlld1VSSVRyYWNraW5nVGVzdDogcHVibGljIExvYWRUcmFja2luZ1Rlc3QgeworcHVibGljOgor
ICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoVmlld1VSSVRyYWNraW5nVGVzdCk7CisKKyAgICBz
dGF0aWMgdm9pZCB1cmlDaGFuZ2VkKEdPYmplY3QqLCBHUGFyYW1TcGVjKiwgVmlld1VSSVRyYWNr
aW5nVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXN0LT5tX2Fj
dGl2ZVVSSS5kYXRhKCksICE9LCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSh0ZXN0LT5tX3dlYlZp
ZXcpKTsKKyAgICAgICAgdGVzdC0+bV9hY3RpdmVVUkkgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3Vy
aSh0ZXN0LT5tX3dlYlZpZXcpOworICAgIH0KKworICAgIFZpZXdVUklUcmFja2luZ1Rlc3QoKQor
ICAgICAgICA6IG1fYWN0aXZlVVJJKHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKG1fd2ViVmlldykp
CisgICAgeworICAgICAgICBnX2Fzc2VydChtX2FjdGl2ZVVSSS5pc051bGwoKSk7CisgICAgICAg
IGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAibm90aWZ5Ojp1cmkiLCBHX0NBTExCQUNLKHVy
aUNoYW5nZWQpLCB0aGlzKTsKKyAgICB9CisKKyAgICB2b2lkIHByb3Zpc2lvbmFsTG9hZFN0YXJ0
ZWQoKQorICAgIHsKKyAgICAgICAgY2hlY2tBY3RpdmVVUkkoIi9yZWRpcmVjdCIpOworICAgIH0K
KworICAgIHZvaWQgcHJvdmlzaW9uYWxMb2FkUmVjZWl2ZWRTZXJ2ZXJSZWRpcmVjdCgpCisgICAg
eworICAgICAgICBjaGVja0FjdGl2ZVVSSSgiL25vcm1hbCIpOworICAgIH0KKworICAgIHZvaWQg
bG9hZENvbW1pdHRlZCgpCisgICAgeworICAgICAgICBjaGVja0FjdGl2ZVVSSSgiL25vcm1hbCIp
OworICAgIH0KKworICAgIHZvaWQgbG9hZEZpbmlzaGVkKCkKKyAgICB7CisgICAgICAgIGNoZWNr
QWN0aXZlVVJJKCIvbm9ybWFsIik7CisgICAgICAgIExvYWRUcmFja2luZ1Rlc3Q6OmxvYWRGaW5p
c2hlZCgpOworICAgIH0KKworICAgIENTdHJpbmcgbV9hY3RpdmVVUkk7CisKK3ByaXZhdGU6Cisg
ICAgdm9pZCBjaGVja0FjdGl2ZVVSSShjb25zdCBjaGFyKiB1cmkpCisgICAgeworICAgICAgICBB
U1NFUlRfQ01QX0NTVFJJTkcobV9hY3RpdmVVUkksID09LCBrU2VydmVyLT5nZXRVUklGb3JQYXRo
KHVyaSkpOworICAgIH0KK307CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3QWN0aXZlVVJJKFZp
ZXdVUklUcmFja2luZ1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9h
ZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvcmVkaXJlY3QiKS5kYXRhKCkpOworICAgIHRl
c3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworfQorCitjbGFzcyBWaWV3SXNMb2FkaW5nVGVz
dDogcHVibGljIExvYWRUcmFja2luZ1Rlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNU
X0ZJWFRVUkUoVmlld0lzTG9hZGluZ1Rlc3QpOworCisgICAgc3RhdGljIHZvaWQgaXNMb2FkaW5n
Q2hhbmdlZChHT2JqZWN0KiwgR1BhcmFtU3BlYyosIFZpZXdJc0xvYWRpbmdUZXN0KiB0ZXN0KQor
ICAgIHsKKyAgICAgICAgaWYgKHdlYmtpdF93ZWJfdmlld19pc19sb2FkaW5nKHRlc3QtPm1fd2Vi
VmlldykpCisgICAgICAgICAgICB0ZXN0LT5iZWdpbkxvYWQoKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgdGVzdC0+ZW5kTG9hZCgpOworICAgIH0KKworICAgIFZpZXdJc0xvYWRpbmdUZXN0
KCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAibm90aWZ5Ojpp
cy1sb2FkaW5nIiwgR19DQUxMQkFDSyhpc0xvYWRpbmdDaGFuZ2VkKSwgdGhpcyk7CisgICAgfQor
CisgICAgdm9pZCBiZWdpbkxvYWQoKQorICAgIHsKKyAgICAgICAgLy8gTmV3IGxvYWQsIGxvYWQt
c3RhcnRlZCBoYXNuJ3QgYmVlbiBlbWl0dGVkIHlldC4KKyAgICAgICAgZ19hc3NlcnQobV9sb2Fk
RXZlbnRzLmlzRW1wdHkoKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X3VyaShtX3dlYlZpZXcpLCA9PSwgbV9hY3RpdmVVUkkuZGF0YSgpKTsKKyAgICB9CisK
KyAgICB2b2lkIGVuZExvYWQoKQorICAgIHsKKyAgICAgICAgLy8gTG9hZCBmaW5pc2gsIGxvYWQt
ZmluaXNoZWQgYW5kIGxvYWQtZmFpbGVkIGhhdmVuJ3QgYmVlbiBlbWl0dGVkIHlldC4KKyAgICAg
ICAgZ19hc3NlcnQoIW1fbG9hZEV2ZW50cy5pc0VtcHR5KCkpOworICAgICAgICBnX2Fzc2VydCgh
bV9sb2FkRXZlbnRzLmNvbnRhaW5zKExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCkpOwor
ICAgICAgICBnX2Fzc2VydCghbV9sb2FkRXZlbnRzLmNvbnRhaW5zKExvYWRUcmFja2luZ1Rlc3Q6
OkxvYWRGYWlsZWQpKTsKKyAgICB9Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0lzTG9h
ZGluZyhWaWV3SXNMb2FkaW5nVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0
LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9ub3JtYWwiKS5kYXRhKCkpOworICAg
IHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+cmVsb2FkKCk7Cisg
ICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5sb2FkVVJJKGtT
ZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9lcnJvciIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVu
dGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZv
clBhdGgoIi9ub3JtYWwiKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hl
ZCgpOworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL25vcm1hbDIi
KS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgdGVz
dC0+Z29CYWNrKCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0
ZXN0LT5nb0ZvcndhcmQoKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKK30K
KworY2xhc3MgV2ViUGFnZVVSSVRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7CitwdWJsaWM6Cisg
ICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShXZWJQYWdlVVJJVGVzdCk7CisKKyAgICBzdGF0aWMg
dm9pZCB3ZWJQYWdlVVJJQ2hhbmdlZENhbGxiYWNrKEdEQnVzQ29ubmVjdGlvbiosIGNvbnN0IGNo
YXIqLCBjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBHVmFyaWFudCogcmVz
dWx0LCBXZWJQYWdlVVJJVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIGNvbnN0IGNoYXIqIHVy
aTsKKyAgICAgICAgZ192YXJpYW50X2dldChyZXN1bHQsICIoJnMpIiwgJnVyaSk7CisgICAgICAg
IHRlc3QtPm1fd2ViUGFnZVVSSXMuYXBwZW5kKHVyaSk7CisgICAgfQorCisgICAgc3RhdGljIHZv
aWQgd2ViVmlld1VSSUNoYW5nZWQoR09iamVjdCosIEdQYXJhbVNwZWMqLCBXZWJQYWdlVVJJVGVz
dCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPm1fd2ViVmlld1VSSXMuYXBwZW5kKHdlYmtp
dF93ZWJfdmlld19nZXRfdXJpKHRlc3QtPm1fd2ViVmlldykpOworICAgIH0KKworICAgIFdlYlBh
Z2VVUklUZXN0KCkKKyAgICB7CisgICAgICAgIEdSZWZQdHI8R0RCdXNQcm94eT4gcHJveHkgPSBh
ZG9wdEdSZWYoYnVzLT5jcmVhdGVQcm94eSgib3JnLndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9uVGVz
dCIsCisgICAgICAgICAgICAiL29yZy93ZWJraXQvZ3RrL1dlYkV4dGVuc2lvblRlc3QiLCAib3Jn
LndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9uVGVzdCIsIG1fbWFpbkxvb3ApKTsKKyAgICAgICAgbV91
cmlDaGFuZ2VkU2lnbmFsSUQgPSBnX2RidXNfY29ubmVjdGlvbl9zaWduYWxfc3Vic2NyaWJlKAor
ICAgICAgICAgICAgZ19kYnVzX3Byb3h5X2dldF9jb25uZWN0aW9uKHByb3h5LmdldCgpKSwKKyAg
ICAgICAgICAgIDAsCisgICAgICAgICAgICAib3JnLndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9uVGVz
dCIsCisgICAgICAgICAgICAiVVJJQ2hhbmdlZCIsCisgICAgICAgICAgICAiL29yZy93ZWJraXQv
Z3RrL1dlYkV4dGVuc2lvblRlc3QiLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIEdfREJV
U19TSUdOQUxfRkxBR1NfTk9ORSwKKyAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0RCdXNT
aWduYWxDYWxsYmFjaz4od2ViUGFnZVVSSUNoYW5nZWRDYWxsYmFjayksCisgICAgICAgICAgICB0
aGlzLAorICAgICAgICAgICAgMCk7CisgICAgICAgIGdfYXNzZXJ0KG1fdXJpQ2hhbmdlZFNpZ25h
bElEKTsKKworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgIm5vdGlmeTo6dXJp
IiwgR19DQUxMQkFDSyh3ZWJWaWV3VVJJQ2hhbmdlZCksIHRoaXMpOworICAgIH0KKworICAgIH5X
ZWJQYWdlVVJJVGVzdCgpCisgICAgeworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25u
ZWN0X21hdGNoZWQobV93ZWJWaWV3LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0
aGlzKTsKKyAgICAgICAgZ19kYnVzX2Nvbm5lY3Rpb25fc2lnbmFsX3Vuc3Vic2NyaWJlKGJ1cy0+
Y29ubmVjdGlvbigpLCBtX3VyaUNoYW5nZWRTaWduYWxJRCk7CisgICAgfQorCisgICAgdW5zaWdu
ZWQgbV91cmlDaGFuZ2VkU2lnbmFsSUQ7CisgICAgVmVjdG9yPENTdHJpbmc+IG1fd2ViUGFnZVVS
SXM7CisgICAgVmVjdG9yPENTdHJpbmc+IG1fd2ViVmlld1VSSXM7Cit9OworCitzdGF0aWMgdm9p
ZCB0ZXN0V2ViUGFnZVVSSShXZWJQYWdlVVJJVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sK
KyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9yZWRpcmVjdCIpLmRh
dGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQodGVzdC0+bV93ZWJQYWdlVVJJcy5zaXplKCksID09LCB0ZXN0LT5tX3dlYlZpZXdV
UklzLnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0ZXN0LT5tX3dlYlBhZ2VV
UklzLnNpemUoKTsgKytpKQorICAgICAgICBBU1NFUlRfQ01QX0NTVFJJTkcodGVzdC0+bV93ZWJQ
YWdlVVJJc1tpXSwgPT0sIHRlc3QtPm1fd2ViVmlld1VSSXNbaV0pOworCisgICAgZ19hc3NlcnRf
Y21waW50KHRlc3QtPm1fd2ViUGFnZVVSSXMuc2l6ZSgpLCA9PSwgMik7CisgICAgQVNTRVJUX0NN
UF9DU1RSSU5HKHRlc3QtPm1fd2ViUGFnZVVSSXNbMF0sID09LCBrU2VydmVyLT5nZXRVUklGb3JQ
YXRoKCIvcmVkaXJlY3QiKSk7CisgICAgQVNTRVJUX0NNUF9DU1RSSU5HKHRlc3QtPm1fd2ViUGFn
ZVVSSXNbMV0sID09LCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvbm9ybWFsIikpOworCit9CisK
K3N0YXRpYyB2b2lkIHRlc3RVUklSZXF1ZXN0SFRUUEhlYWRlcnMoV2ViVmlld1Rlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIpCit7CisgICAgR1JlZlB0cjxXZWJLaXRVUklSZXF1ZXN0PiB1cmlSZXF1
ZXN0ID0gYWRvcHRHUmVmKHdlYmtpdF91cmlfcmVxdWVzdF9uZXcoImZpbGU6Ly8vZm9vL2JhciIp
KTsKKyAgICBnX2Fzc2VydCh1cmlSZXF1ZXN0LmdldCgpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIo
d2Via2l0X3VyaV9yZXF1ZXN0X2dldF91cmkodXJpUmVxdWVzdC5nZXQoKSksID09LCAiZmlsZTov
Ly9mb28vYmFyIik7CisgICAgZ19hc3NlcnQoIXdlYmtpdF91cmlfcmVxdWVzdF9nZXRfaHR0cF9o
ZWFkZXJzKHVyaVJlcXVlc3QuZ2V0KCkpKTsKKworICAgIC8vIExvYWQgYSByZXF1ZXN0IHdpdGgg
bm8gRG8gTm90IFRyYWNrIGhlYWRlci4KKyAgICB3ZWJraXRfdXJpX3JlcXVlc3Rfc2V0X3VyaSh1
cmlSZXF1ZXN0LmdldCgpLCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvZG8tbm90LXRyYWNrLWhl
YWRlciIpLmRhdGEoKSk7CisgICAgdGVzdC0+bG9hZFJlcXVlc3QodXJpUmVxdWVzdC5nZXQoKSk7
CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBzaXplX3QgbWFpblJl
c291cmNlRGF0YVNpemUgPSAwOworICAgIGNvbnN0IGNoYXIqIG1haW5SZXNvdXJjZURhdGEgPSB0
ZXN0LT5tYWluUmVzb3VyY2VEYXRhKG1haW5SZXNvdXJjZURhdGFTaXplKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQobWFpblJlc291cmNlRGF0YVNpemUsID09LCBzdHJsZW4oa0ROVEhlYWRlck5vdFBy
ZXNlbnQpKTsKKyAgICBnX2Fzc2VydCghc3RybmNtcChtYWluUmVzb3VyY2VEYXRhLCBrRE5USGVh
ZGVyTm90UHJlc2VudCwgbWFpblJlc291cmNlRGF0YVNpemUpKTsKKworICAgIC8vIEFkZCB0aGUg
RG8gTm90IFRyYWNrIGhlYWRlciBhbmQgbG9hZCB0aGUgcmVxdWVzdCBhZ2Fpbi4KKyAgICBTb3Vw
TWVzc2FnZUhlYWRlcnMqIGhlYWRlcnMgPSB3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X2h0dHBfaGVh
ZGVycyh1cmlSZXF1ZXN0LmdldCgpKTsKKyAgICBnX2Fzc2VydChoZWFkZXJzKTsKKyAgICBzb3Vw
X21lc3NhZ2VfaGVhZGVyc19hcHBlbmQoaGVhZGVycywgIkROVCIsICIxIik7CisgICAgdGVzdC0+
bG9hZFJlcXVlc3QodXJpUmVxdWVzdC5nZXQoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZp
bmlzaGVkKCk7CisKKyAgICBtYWluUmVzb3VyY2VEYXRhID0gdGVzdC0+bWFpblJlc291cmNlRGF0
YShtYWluUmVzb3VyY2VEYXRhU2l6ZSk7CisgICAgZ19hc3NlcnRfY21waW50KG1haW5SZXNvdXJj
ZURhdGFTaXplLCA9PSwgMSk7CisgICAgZ19hc3NlcnQoIXN0cm5jbXAobWFpblJlc291cmNlRGF0
YSwgIjEiLCBtYWluUmVzb3VyY2VEYXRhU2l6ZSkpOworCisgICAgLy8gTG9hZCBhIFVSSSBmb3Ig
d2hpY2ggdGhlIHdlYiBleHRlbnNpb24gd2lsbCBhZGQgdGhlIERvIE5vdCBUcmFjayBoZWFkZXIu
CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvYWRkLWRvLW5vdC10
cmFjay1oZWFkZXIiKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgp
OworCisgICAgbWFpblJlc291cmNlRGF0YSA9IHRlc3QtPm1haW5SZXNvdXJjZURhdGEobWFpblJl
c291cmNlRGF0YVNpemUpOworICAgIGdfYXNzZXJ0X2NtcGludChtYWluUmVzb3VyY2VEYXRhU2l6
ZSwgPT0sIDEpOworICAgIGdfYXNzZXJ0KCFzdHJuY21wKG1haW5SZXNvdXJjZURhdGEsICIxIiwg
bWFpblJlc291cmNlRGF0YVNpemUpKTsKK30KKworc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2so
U291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0
aCwgR0hhc2hUYWJsZSosIFNvdXBDbGllbnRDb250ZXh0KiwgZ3BvaW50ZXIpCit7CisgICAgc3Rh
dGljIGNvbnN0IGNoYXIqIHJlc3BvbnNlU3RyaW5nID0gIjxodG1sPjxib2R5PlRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchIgorICAgICAgICAi
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchIgorICAgICAgICAiVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchIgorICAgICAgICAiVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchIgorICAgICAgICAiVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchIgorICAgICAgICAiVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchIgorICAgICAgICAiVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchIgorICAgICAgICAiVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchPC9ib2R5PjwvaHRtbD4iOworCisgICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01F
VEhPRF9HRVQpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09V
UF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKKworICAg
IGlmIChnX3N0cl9oYXNfcHJlZml4KHBhdGgsICIvbm9ybWFsIikpCisgICAgICAgIHNvdXBfbWVz
c2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFU
SUMsIHJlc3BvbnNlU3RyaW5nLCBzdHJsZW4ocmVzcG9uc2VTdHJpbmcpKTsKKyAgICBlbHNlIGlm
IChnX3N0cl9lcXVhbChwYXRoLCAiL2Vycm9yIikpCisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRf
c3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX0NBTlRfQ09OTkVDVCk7CisgICAgZWxzZSBpZiAo
Z19zdHJfZXF1YWwocGF0aCwgIi9yZWRpcmVjdCIpKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9z
ZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX01PVkVEX1BFUk1BTkVOVExZKTsKKyAgICAg
ICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMs
ICJMb2NhdGlvbiIsICIvbm9ybWFsIik7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRo
LCAiL2NhbmNlbGxlZCIpKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX3NldF9lbmNv
ZGluZyhtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCBTT1VQX0VOQ09ESU5HX0NIVU5LRUQpOwor
ICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwg
U09VUF9NRU1PUllfU1RBVElDLCByZXNwb25zZVN0cmluZywgc3RybGVuKHJlc3BvbnNlU3RyaW5n
KSk7CisgICAgICAgIHNvdXBfc2VydmVyX3VucGF1c2VfbWVzc2FnZShzZXJ2ZXIsIG1lc3NhZ2Up
OworICAgICAgICByZXR1cm47CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2Rv
LW5vdC10cmFjay1oZWFkZXIiKSB8fCBnX3N0cl9lcXVhbChwYXRoLCAiL2FkZC1kby1ub3QtdHJh
Y2staGVhZGVyIikpIHsKKyAgICAgICAgY29uc3QgY2hhciogZG9Ob3RUcmFjayA9IHNvdXBfbWVz
c2FnZV9oZWFkZXJzX2dldF9vbmUobWVzc2FnZS0+cmVxdWVzdF9oZWFkZXJzLCAiRE5UIik7Cisg
ICAgICAgIGlmIChkb05vdFRyYWNrKQorICAgICAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBw
ZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX0NPUFksIGRvTm90VHJhY2ss
IHN0cmxlbihkb05vdFRyYWNrKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNvdXBfbWVz
c2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFU
SUMsIGtETlRIZWFkZXJOb3RQcmVzZW50LCBzdHJsZW4oa0ROVEhlYWRlck5vdFByZXNlbnQpKTsK
KyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0sp
OworICAgIH0gZWxzZQorICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBT
T1VQX1NUQVRVU19OT1RfRk9VTkQpOworCisgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUo
bWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7Cit9CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICB3
ZWJraXRfd2ViX2NvbnRleHRfc2V0X3dlYl9leHRlbnNpb25zX2RpcmVjdG9yeSh3ZWJraXRfd2Vi
X2NvbnRleHRfZ2V0X2RlZmF1bHQoKSwgV0VCS0lUX1RFU1RfV0VCX0VYVEVOU0lPTlNfRElSKTsK
KyAgICBidXMgPSBuZXcgV2ViS2l0VGVzdEJ1cygpOworICAgIGlmICghYnVzLT5ydW4oKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAga1NlcnZlciA9IG5ldyBXZWJLaXRUZXN0U2VydmVyKCk7Cisg
ICAga1NlcnZlci0+cnVuKHNlcnZlckNhbGxiYWNrKTsKKworICAgIExvYWRUcmFja2luZ1Rlc3Q6
OmFkZCgiV2ViS2l0V2ViVmlldyIsICJsb2FkaW5nLXN0YXR1cyIsIHRlc3RMb2FkaW5nU3RhdHVz
KTsKKyAgICBMb2FkVHJhY2tpbmdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAibG9hZGluZy1l
cnJvciIsIHRlc3RMb2FkaW5nRXJyb3IpOworICAgIExvYWRUcmFja2luZ1Rlc3Q6OmFkZCgiV2Vi
S2l0V2ViVmlldyIsICJsb2FkLWh0bWwiLCB0ZXN0TG9hZEh0bWwpOworICAgIExvYWRUcmFja2lu
Z1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJsb2FkLWFsdGVybmF0ZS1odG1sIiwgdGVzdExv
YWRBbHRlcm5hdGVIVE1MKTsKKyAgICBMb2FkVHJhY2tpbmdUZXN0OjphZGQoIldlYktpdFdlYlZp
ZXciLCAibG9hZC1wbGFpbi10ZXh0IiwgdGVzdExvYWRQbGFpblRleHQpOworICAgIExvYWRUcmFj
a2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJsb2FkLXJlcXVlc3QiLCB0ZXN0TG9hZFJl
cXVlc3QpOworICAgIExvYWRTdG9wVHJhY2tpbmdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAi
c3RvcC1sb2FkaW5nIiwgdGVzdExvYWRDYW5jZWxsZWQpOworICAgIExvYWRUcmFja2luZ1Rlc3Q6
OmFkZCgiV2ViS2l0V2ViVmlldyIsICJ0aXRsZSIsIHRlc3RXZWJWaWV3VGl0bGUpOworICAgIExv
YWRUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJwcm9ncmVzcyIsIHRlc3RMb2Fk
UHJvZ3Jlc3MpOworICAgIExvYWRUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJy
ZWxvYWQiLCB0ZXN0V2ViVmlld1JlbG9hZCk7CisgICAgTG9hZFRyYWNraW5nVGVzdDo6YWRkKCJX
ZWJLaXRXZWJWaWV3IiwgImhpc3RvcnktbG9hZCIsIHRlc3RXZWJWaWV3SGlzdG9yeUxvYWQpOwor
CisgICAgLy8gVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IHdlYiB2aWV3IG5vdGlmeTo6dXJpIHNpZ25h
bCBpcyBjb3JyZWN0bHkgZW1pdHRlZAorICAgIC8vIGFuZCB0aGUgdXJpIGlzIGFscmVhZHkgdXBk
YXRlZCB3aGVuIGxvYWRlciBjbGllbnQgc2lnbmFscyBhcmUgZW1pdHRlZC4KKyAgICBWaWV3VVJJ
VHJhY2tpbmdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiYWN0aXZlLXVyaSIsIHRlc3RXZWJW
aWV3QWN0aXZlVVJJKTsKKworICAgIFZpZXdJc0xvYWRpbmdUZXN0OjphZGQoIldlYktpdFdlYlZp
ZXciLCAiaXMtbG9hZGluZyIsIHRlc3RXZWJWaWV3SXNMb2FkaW5nKTsKKyAgICBXZWJQYWdlVVJJ
VGVzdDo6YWRkKCJXZWJLaXRXZWJQYWdlIiwgImdldC11cmkiLCB0ZXN0V2ViUGFnZVVSSSk7Cisg
ICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0VVJJUmVxdWVzdCIsICJodHRwLWhlYWRlcnMiLCB0
ZXN0VVJJUmVxdWVzdEhUVFBIZWFkZXJzKTsKK30KKwordm9pZCBhZnRlckFsbCgpCit7CisgICAg
ZGVsZXRlIGJ1czsKKyAgICBkZWxldGUga1NlcnZlcjsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0UHJpbnRpbmcuY3BwIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RQcmludGluZy5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA4ZTJhYQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0UHJpbnRpbmcuY3BwCkBAIC0wLDAg
KzEsMjEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKKyNpbmNsdWRlIDxnbGliL2dz
dGRpby5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKworI2lmZGVmIEhBVkVf
R1RLX1VOSVhfUFJJTlRJTkcKKyNpbmNsdWRlIDxndGsvZ3RrdW5peHByaW50Lmg+CisjZW5kaWYK
Kworc3RhdGljIGNoYXIqIGtUZW1wRGlyZWN0b3J5OworCitzdGF0aWMgdm9pZCB0ZXN0UHJpbnRP
cGVyYXRpb25QcmludFNldHRpbmdzKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQor
eworICAgIEdSZWZQdHI8V2ViS2l0UHJpbnRPcGVyYXRpb24+IHByaW50T3BlcmF0aW9uID0gYWRv
cHRHUmVmKHdlYmtpdF9wcmludF9vcGVyYXRpb25fbmV3KHRlc3QtPm1fd2ViVmlldykpOworICAg
IHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QocHJp
bnRPcGVyYXRpb24uZ2V0KCkpKTsKKworICAgIGdfYXNzZXJ0KCF3ZWJraXRfcHJpbnRfb3BlcmF0
aW9uX2dldF9wcmludF9zZXR0aW5ncyhwcmludE9wZXJhdGlvbi5nZXQoKSkpOworICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX2dldF9wYWdlX3NldHVwKHByaW50T3BlcmF0aW9u
LmdldCgpKSk7CisKKyAgICBHUmVmUHRyPEd0a1ByaW50U2V0dGluZ3M+IHByaW50U2V0dGluZ3Mg
PSBhZG9wdEdSZWYoZ3RrX3ByaW50X3NldHRpbmdzX25ldygpKTsKKyAgICB0ZXN0LT5hc3NlcnRP
YmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHByaW50U2V0dGluZ3MuZ2V0
KCkpKTsKKworICAgIEdSZWZQdHI8R3RrUGFnZVNldHVwPiBwYWdlU2V0dXAgPSBhZG9wdEdSZWYo
Z3RrX3BhZ2Vfc2V0dXBfbmV3KCkpOworICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdo
ZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QocGFnZVNldHVwLmdldCgpKSk7CisKKyAgICB3ZWJraXRf
cHJpbnRfb3BlcmF0aW9uX3NldF9wcmludF9zZXR0aW5ncyhwcmludE9wZXJhdGlvbi5nZXQoKSwg
cHJpbnRTZXR0aW5ncy5nZXQoKSk7CisgICAgd2Via2l0X3ByaW50X29wZXJhdGlvbl9zZXRfcGFn
ZV9zZXR1cChwcmludE9wZXJhdGlvbi5nZXQoKSwgcGFnZVNldHVwLmdldCgpKTsKKworICAgIGdf
YXNzZXJ0KHdlYmtpdF9wcmludF9vcGVyYXRpb25fZ2V0X3ByaW50X3NldHRpbmdzKHByaW50T3Bl
cmF0aW9uLmdldCgpKSA9PSBwcmludFNldHRpbmdzLmdldCgpKTsKKyAgICBnX2Fzc2VydCh3ZWJr
aXRfcHJpbnRfb3BlcmF0aW9uX2dldF9wYWdlX3NldHVwKHByaW50T3BlcmF0aW9uLmdldCgpKSA9
PSBwYWdlU2V0dXAuZ2V0KCkpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2ViVmlld1ByaW50Q2Fs
bGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0UHJpbnRPcGVyYXRpb24qIHByaW50
T3BlcmF0aW9uLCBXZWJWaWV3VGVzdCogdGVzdCkKK3sKKyAgICBnX2Fzc2VydCh3ZWJWaWV3ID09
IHRlc3QtPm1fd2ViVmlldyk7CisKKyAgICBnX2Fzc2VydChXRUJLSVRfSVNfUFJJTlRfT1BFUkFU
SU9OKHByaW50T3BlcmF0aW9uKSk7CisgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hl
blRlc3RGaW5pc2hlcyhHX09CSkVDVChwcmludE9wZXJhdGlvbikpOworCisgICAgZ19hc3NlcnQo
IXdlYmtpdF9wcmludF9vcGVyYXRpb25fZ2V0X3ByaW50X3NldHRpbmdzKHByaW50T3BlcmF0aW9u
KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9wcmludF9vcGVyYXRpb25fZ2V0X3BhZ2Vfc2V0dXAo
cHJpbnRPcGVyYXRpb24pKTsKKworICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9v
cCk7CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdQcmlu
dChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBnX3NpZ25hbF9jb25u
ZWN0KHRlc3QtPm1fd2ViVmlldywgInByaW50IiwgR19DQUxMQkFDSyh3ZWJWaWV3UHJpbnRDYWxs
YmFjayksIHRlc3QpOworICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keSBvbkxvYWQ9XCJw
cmludCgpO1wiPldlYktpdEdUSysgcHJpbnRpbmcgdGVzdDwvYm9keT48L2h0bWw+IiwgMCk7Cisg
ICAgZ19tYWluX2xvb3BfcnVuKHRlc3QtPm1fbWFpbkxvb3ApOworfQorCisjaWZkZWYgSEFWRV9H
VEtfVU5JWF9QUklOVElORworY2xhc3MgUHJpbnRUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3Qgewor
cHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoUHJpbnRUZXN0KTsKKworICAgIHN0
YXRpYyB2b2lkIHByaW50RmluaXNoZWRDYWxsYmFjayhXZWJLaXRQcmludE9wZXJhdGlvbiosIFBy
aW50VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9t
YWluTG9vcCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcHJpbnRGYWlsZWRDYWxsYmFjayhX
ZWJLaXRQcmludE9wZXJhdGlvbiosIEdFcnJvciogZXJyb3IsIFByaW50VGVzdCogdGVzdCkKKyAg
ICB7CisgICAgICAgIGdfYXNzZXJ0KHRlc3QtPm1fZXhwZWN0ZWRFcnJvcik7CisgICAgICAgIGdf
YXNzZXJ0KGVycm9yKTsKKyAgICAgICAgZ19hc3NlcnQoZ19lcnJvcl9tYXRjaGVzKGVycm9yLCBX
RUJLSVRfUFJJTlRfRVJST1IsIHRlc3QtPm1fZXhwZWN0ZWRFcnJvcikpOworICAgIH0KKworICAg
IFByaW50VGVzdCgpCisgICAgICAgIDogbV9leHBlY3RlZEVycm9yKDApCisgICAgeworICAgICAg
ICBtX3ByaW50T3BlcmF0aW9uID0gYWRvcHRHUmVmKHdlYmtpdF9wcmludF9vcGVyYXRpb25fbmV3
KG1fd2ViVmlldykpOworICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlz
aGVzKEdfT0JKRUNUKG1fcHJpbnRPcGVyYXRpb24uZ2V0KCkpKTsKKyAgICAgICAgZ19zaWduYWxf
Y29ubmVjdChtX3ByaW50T3BlcmF0aW9uLmdldCgpLCAiZmluaXNoZWQiLCBHX0NBTExCQUNLKHBy
aW50RmluaXNoZWRDYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1f
cHJpbnRPcGVyYXRpb24uZ2V0KCksICJmYWlsZWQiLCBHX0NBTExCQUNLKHByaW50RmFpbGVkQ2Fs
bGJhY2spLCB0aGlzKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gdGVzdFByaW50T3Bl
cmF0aW9uUHJpbnRQcmludGVyKEd0a1ByaW50ZXIqIHByaW50ZXIsIGdwb2ludGVyIHVzZXJEYXRh
KQorICAgIHsKKyAgICAgICAgaWYgKHN0cmNtcChndGtfcHJpbnRlcl9nZXRfbmFtZShwcmludGVy
KSwgIlByaW50IHRvIEZpbGUiKSkKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgICAg
ICBHdGtQcmludGVyKiogZm91bmRQcmludGVyID0gc3RhdGljX2Nhc3Q8R3RrUHJpbnRlcioqPih1
c2VyRGF0YSk7CisgICAgICAgICpmb3VuZFByaW50ZXIgPSBzdGF0aWNfY2FzdDxHdGtQcmludGVy
Kj4oZ19vYmplY3RfcmVmKHByaW50ZXIpKTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQor
CisgICAgR3RrUHJpbnRlciogZmluZFByaW50VG9GaWxlUHJpbnRlcigpCisgICAgeworICAgICAg
ICBHdGtQcmludGVyKiBwcmludGVyID0gMDsKKyAgICAgICAgZ3RrX2VudW1lcmF0ZV9wcmludGVy
cyh0ZXN0UHJpbnRPcGVyYXRpb25QcmludFByaW50ZXIsICZwcmludGVyLCAwLCBUUlVFKTsKKyAg
ICAgICAgcmV0dXJuIHByaW50ZXI7CisgICAgfQorCisgICAgdm9pZCB3YWl0VW50aWxQcmludEZp
bmlzaGVkKCkKKyAgICB7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAg
ICB9CisKKyAgICBHUmVmUHRyPFdlYktpdFByaW50T3BlcmF0aW9uPiBtX3ByaW50T3BlcmF0aW9u
OworICAgIHVuc2lnbmVkIG1fZXhwZWN0ZWRFcnJvcjsKK307CisKK3N0YXRpYyB2b2lkIHRlc3RQ
cmludE9wZXJhdGlvblByaW50KFByaW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAg
ICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHk+V2ViS2l0R1RLKyBwcmludGluZyB0ZXN0PC9i
b2R5PjwvaHRtbD4iLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKwor
ICAgIEdSZWZQdHI8R3RrUHJpbnRlcj4gcHJpbnRlciA9IGFkb3B0R1JlZih0ZXN0LT5maW5kUHJp
bnRUb0ZpbGVQcmludGVyKCkpOworICAgIGlmICghcHJpbnRlcikgeworICAgICAgICBnX21lc3Nh
Z2UoIiVzIiwgIkNhbm5vdCB0ZXN0IFdlYktpdFByaW50T3BlcmF0aW9uL3ByaW50OiBubyBzdWl0
YWJsZSBwcmludGVyIGZvdW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBHT3du
UHRyPGNoYXI+IG91dHB1dEZpbGVuYW1lKGdfYnVpbGRfZmlsZW5hbWUoa1RlbXBEaXJlY3Rvcnks
ICJ3ZWJraXQtcHJpbnQucGRmIiwgTlVMTCkpOworICAgIEdSZWZQdHI8R0ZpbGU+IG91dHB1dEZp
bGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0aChvdXRwdXRGaWxlbmFtZS5nZXQoKSkp
OworICAgIEdPd25QdHI8Y2hhcj4gb3V0cHV0VVJJKGdfZmlsZV9nZXRfdXJpKG91dHB1dEZpbGUu
Z2V0KCkpKTsKKworICAgIEdSZWZQdHI8R3RrUHJpbnRTZXR0aW5ncz4gcHJpbnRTZXR0aW5ncyA9
IGFkb3B0R1JlZihndGtfcHJpbnRfc2V0dGluZ3NfbmV3KCkpOworICAgIGd0a19wcmludF9zZXR0
aW5nc19zZXRfcHJpbnRlcihwcmludFNldHRpbmdzLmdldCgpLCBndGtfcHJpbnRlcl9nZXRfbmFt
ZShwcmludGVyLmdldCgpKSk7CisgICAgZ3RrX3ByaW50X3NldHRpbmdzX3NldChwcmludFNldHRp
bmdzLmdldCgpLCBHVEtfUFJJTlRfU0VUVElOR1NfT1VUUFVUX1VSSSwgb3V0cHV0VVJJLmdldCgp
KTsKKworICAgIHdlYmtpdF9wcmludF9vcGVyYXRpb25fc2V0X3ByaW50X3NldHRpbmdzKHRlc3Qt
Pm1fcHJpbnRPcGVyYXRpb24uZ2V0KCksIHByaW50U2V0dGluZ3MuZ2V0KCkpOworICAgIHdlYmtp
dF9wcmludF9vcGVyYXRpb25fcHJpbnQodGVzdC0+bV9wcmludE9wZXJhdGlvbi5nZXQoKSk7Cisg
ICAgdGVzdC0+d2FpdFVudGlsUHJpbnRGaW5pc2hlZCgpOworCisgICAgR1JlZlB0cjxHRmlsZUlu
Zm8+IGZpbGVJbmZvID0gYWRvcHRHUmVmKGdfZmlsZV9xdWVyeV9pbmZvKG91dHB1dEZpbGUuZ2V0
KCksCisgICAgICAgIEdfRklMRV9BVFRSSUJVVEVfU1RBTkRBUkRfU0laRSAiLCIgR19GSUxFX0FU
VFJJQlVURV9TVEFOREFSRF9DT05URU5UX1RZUEUsCisgICAgICAgIHN0YXRpY19jYXN0PEdGaWxl
UXVlcnlJbmZvRmxhZ3M+KDApLCAwLCAwKSk7CisgICAgZ19hc3NlcnQoZmlsZUluZm8uZ2V0KCkp
OworICAgIGdfYXNzZXJ0X2NtcGludChnX2ZpbGVfaW5mb19nZXRfc2l6ZShmaWxlSW5mby5nZXQo
KSksID4sIDApOworICAgIGdfYXNzZXJ0X2NtcHN0cihnX2ZpbGVfaW5mb19nZXRfY29udGVudF90
eXBlKGZpbGVJbmZvLmdldCgpKSwgPT0sICJhcHBsaWNhdGlvbi9wZGYiKTsKKworICAgIGdfZmls
ZV9kZWxldGUob3V0cHV0RmlsZS5nZXQoKSwgMCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RQ
cmludE9wZXJhdGlvbkVycm9ycyhQcmludFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7Cisg
ICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxib2R5PldlYktpdEdUSysgcHJpbnRpbmcgZXJyb3Jz
IHRlc3Q8L2JvZHk+PC9odG1sPiIsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hl
ZCgpOworCisgICAgR1JlZlB0cjxHdGtQcmludGVyPiBwcmludGVyID0gYWRvcHRHUmVmKHRlc3Qt
PmZpbmRQcmludFRvRmlsZVByaW50ZXIoKSk7CisgICAgaWYgKCFwcmludGVyKSB7CisgICAgICAg
IGdfbWVzc2FnZSgiJXMiLCAiQ2Fubm90IHRlc3QgV2ViS2l0UHJpbnRPcGVyYXRpb24vcHJpbnQ6
IG5vIHN1aXRhYmxlIHByaW50ZXIgZm91bmQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIC8vIEdlbmVyYWwgRXJyb3I6IGludmFsaWQgZmlsZW5hbWUuCisgICAgdGVzdC0+bV9leHBl
Y3RlZEVycm9yID0gV0VCS0lUX1BSSU5UX0VSUk9SX0dFTkVSQUw7CisgICAgR1JlZlB0cjxHdGtQ
cmludFNldHRpbmdzPiBwcmludFNldHRpbmdzID0gYWRvcHRHUmVmKGd0a19wcmludF9zZXR0aW5n
c19uZXcoKSk7CisgICAgZ3RrX3ByaW50X3NldHRpbmdzX3NldF9wcmludGVyKHByaW50U2V0dGlu
Z3MuZ2V0KCksIGd0a19wcmludGVyX2dldF9uYW1lKHByaW50ZXIuZ2V0KCkpKTsKKyAgICBndGtf
cHJpbnRfc2V0dGluZ3Nfc2V0KHByaW50U2V0dGluZ3MuZ2V0KCksIEdUS19QUklOVF9TRVRUSU5H
U19PVVRQVVRfVVJJLCAiZmlsZTovLy9mb28vYmFyIik7CisgICAgd2Via2l0X3ByaW50X29wZXJh
dGlvbl9zZXRfcHJpbnRfc2V0dGluZ3ModGVzdC0+bV9wcmludE9wZXJhdGlvbi5nZXQoKSwgcHJp
bnRTZXR0aW5ncy5nZXQoKSk7CisgICAgd2Via2l0X3ByaW50X29wZXJhdGlvbl9wcmludCh0ZXN0
LT5tX3ByaW50T3BlcmF0aW9uLmdldCgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxQcmludEZpbmlz
aGVkKCk7CisKKyAgICAvLyBQcmludGVyIG5vdCBmb3VuZCBlcnJvci4KKyAgICB0ZXN0LT5tX2V4
cGVjdGVkRXJyb3IgPSBXRUJLSVRfUFJJTlRfRVJST1JfUFJJTlRFUl9OT1RfRk9VTkQ7CisgICAg
Z3RrX3ByaW50X3NldHRpbmdzX3NldF9wcmludGVyKHByaW50U2V0dGluZ3MuZ2V0KCksICJUaGUg
ZmFrZSBXZWJLaXQgcHJpbnRlciIpOworICAgIHdlYmtpdF9wcmludF9vcGVyYXRpb25fcHJpbnQo
dGVzdC0+bV9wcmludE9wZXJhdGlvbi5nZXQoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsUHJpbnRG
aW5pc2hlZCgpOworCisgICAgLy8gTm8gcGFnZXMgdG8gcHJpbnQ6IHByaW50IGV2ZW4gcGFnZXMg
Zm9yIGEgc2luZ2xlIHBhZ2UgZG9jdW1lbnQuCisgICAgdGVzdC0+bV9leHBlY3RlZEVycm9yID0g
V0VCS0lUX1BSSU5UX0VSUk9SX0lOVkFMSURfUEFHRV9SQU5HRTsKKyAgICBndGtfcHJpbnRfc2V0
dGluZ3Nfc2V0X3ByaW50ZXIocHJpbnRTZXR0aW5ncy5nZXQoKSwgZ3RrX3ByaW50ZXJfZ2V0X25h
bWUocHJpbnRlci5nZXQoKSkpOworICAgIGd0a19wcmludF9zZXR0aW5nc19zZXRfcGFnZV9zZXQo
cHJpbnRTZXR0aW5ncy5nZXQoKSwgR1RLX1BBR0VfU0VUX0VWRU4pOworICAgIHdlYmtpdF9wcmlu
dF9vcGVyYXRpb25fcHJpbnQodGVzdC0+bV9wcmludE9wZXJhdGlvbi5nZXQoKSk7CisgICAgdGVz
dC0+d2FpdFVudGlsUHJpbnRGaW5pc2hlZCgpOworfQorI2VuZGlmIC8vIEhBVkVfR1RLX1VOSVhf
UFJJTlRJTkcKKwordm9pZCBiZWZvcmVBbGwoKQoreworICAgIGtUZW1wRGlyZWN0b3J5ID0gZ19k
aXJfbWFrZV90bXAoIldlYktpdDJUZXN0cy1YWFhYWFgiLCAwKTsKKyAgICBnX2Fzc2VydChrVGVt
cERpcmVjdG9yeSk7CisKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRQcmludE9wZXJhdGlv
biIsICJwcmludGluZy1zZXR0aW5ncyIsIHRlc3RQcmludE9wZXJhdGlvblByaW50U2V0dGluZ3Mp
OworICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAicHJpbnQiLCB0ZXN0V2Vi
Vmlld1ByaW50KTsKKyNpZmRlZiBIQVZFX0dUS19VTklYX1BSSU5USU5HCisgICAgUHJpbnRUZXN0
OjphZGQoIldlYktpdFByaW50T3BlcmF0aW9uIiwgInByaW50IiwgdGVzdFByaW50T3BlcmF0aW9u
UHJpbnQpOworICAgIFByaW50VGVzdDo6YWRkKCJXZWJLaXRQcmludE9wZXJhdGlvbiIsICJwcmlu
dC1lcnJvcnMiLCB0ZXN0UHJpbnRPcGVyYXRpb25FcnJvcnMpOworI2VuZGlmCit9CisKK3ZvaWQg
YWZ0ZXJBbGwoKQoreworICAgIGdfcm1kaXIoa1RlbXBEaXJlY3RvcnkpOworfQpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RSZXNvdXJjZXMuY3Bw
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RSZXNvdXJjZXMuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMjFjNzEKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFJlc291cmNl
cy5jcHAKQEAgLTAsMCArMSw3ODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlh
IFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5o
IgorI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2lu
Y2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKworc3RhdGljIFdlYktpdFRlc3RTZXJ2ZXIq
IGtTZXJ2ZXI7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBrSW5kZXhIdG1sID0KKyAgICAiPGh0bWw+
PGhlYWQ+IgorICAgICIgPGxpbmsgcmVsPSdzdHlsZXNoZWV0JyBocmVmPScvc3R5bGUuY3NzJyB0
eXBlPSd0ZXh0L2Nzcyc+IgorICAgICIgPHNjcmlwdCBsYW5ndWFnZT0namF2YXNjcmlwdCcgc3Jj
PScvamF2YXNjcmlwdC5qcyc+PC9zY3JpcHQ+IgorICAgICI8L2hlYWQ+PGJvZHk+V2ViS2l0R1RL
KyByZXNvdXJjZXMgdGVzdDwvYm9keT48L2h0bWw+IjsKKworc3RhdGljIGNvbnN0IGNoYXIqIGtT
dHlsZUNTUyA9CisgICAgImJvZHkgeyIKKyAgICAiICAgIG1hcmdpbjogMHB4OyIKKyAgICAiICAg
IHBhZGRpbmc6IDBweDsiCisgICAgIiAgICBmb250LWZhbWlseTogc2Fucy1zZXJpZjsiCisgICAg
IiAgICBiYWNrZ3JvdW5kOiB1cmwoL2JsYW5rLmljbykgMCAwIG5vLXJlcGVhdDsiCisgICAgIiAg
ICBjb2xvcjogYmxhY2s7IgorICAgICJ9IjsKKworc3RhdGljIGNvbnN0IGNoYXIqIGtKYXZhc2Ny
aXB0ID0gImZ1bmN0aW9uIGZvbyAoKSB7IHZhciBhID0gMTsgfSI7CisKK2NsYXNzIFJlc291cmNl
c1Rlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1Rf
RklYVFVSRShSZXNvdXJjZXNUZXN0KTsKKworICAgIHN0YXRpYyB2b2lkIHJlc291cmNlU2VudFJl
cXVlc3RDYWxsYmFjayhXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIFdlYktpdFVSSVJlcXVl
c3QqIHJlcXVlc3QsIFdlYktpdFVSSVJlc3BvbnNlKiByZWRpcmVjdFJlc3BvbnNlLCBSZXNvdXJj
ZXNUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVk
V2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChyZXF1ZXN0KSk7CisgICAgICAgIGlmIChyZWRpcmVj
dFJlc3BvbnNlKQorICAgICAgICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRl
c3RGaW5pc2hlcyhHX09CSkVDVChyZWRpcmVjdFJlc3BvbnNlKSk7CisgICAgICAgIHRlc3QtPnJl
c291cmNlU2VudFJlcXVlc3QocmVzb3VyY2UsIHJlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpOwor
ICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHJlc291cmNlUmVjZWl2ZWRSZXNwb25zZUNhbGxiYWNr
KFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgR1BhcmFtU3BlYyosIFJlc291cmNlc1Rlc3Qq
IHRlc3QpCisgICAgeworICAgICAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3Jlc291cmNlX2dldF9y
ZXNwb25zZShyZXNvdXJjZSkpOworICAgICAgICB0ZXN0LT5yZXNvdXJjZVJlY2VpdmVkUmVzcG9u
c2UocmVzb3VyY2UpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHJlc291cmNlUmVjZWl2ZWRE
YXRhQ2FsbGJhY2soV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBndWludDY0IGJ5dGVzUmVj
ZWl2ZWQsIFJlc291cmNlc1Rlc3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT5yZXNvdXJj
ZVJlY2VpdmVkRGF0YShyZXNvdXJjZSwgYnl0ZXNSZWNlaXZlZCk7CisgICAgfQorCisgICAgc3Rh
dGljIHZvaWQgcmVzb3VyY2VGaW5pc2hlZENhbGxiYWNrKFdlYktpdFdlYlJlc291cmNlKiByZXNv
dXJjZSwgUmVzb3VyY2VzVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPnJlc291cmNl
RmluaXNoZWQocmVzb3VyY2UpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHJlc291cmNlRmFp
bGVkQ2FsbGJhY2soV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBHRXJyb3IqIGVycm9yLCBS
ZXNvdXJjZXNUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQoZXJyb3IpOworICAg
ICAgICB0ZXN0LT5yZXNvdXJjZUZhaWxlZChyZXNvdXJjZSwgZXJyb3IpOworICAgIH0KKworICAg
IHN0YXRpYyB2b2lkIHJlc291cmNlTG9hZFN0YXJ0ZWRDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3LCBXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIFdlYktpdFVSSVJlcXVlc3QqIHJl
cXVlc3QsIFJlc291cmNlc1Rlc3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT5hc3NlcnRP
YmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHJlc291cmNlKSk7CisgICAg
ICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1Qo
cmVxdWVzdCkpOworCisgICAgICAgIC8vIElnbm9yZSBmYXZpY29ucy4KKyAgICAgICAgaWYgKGdf
c3RyX2hhc19zdWZmaXgod2Via2l0X3VyaV9yZXF1ZXN0X2dldF91cmkocmVxdWVzdCksICJmYXZp
Y29uLmljbyIpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRlc3QtPnJlc291cmNl
TG9hZFN0YXJ0ZWQocmVzb3VyY2UsIHJlcXVlc3QpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0
KHJlc291cmNlLCAic2VudC1yZXF1ZXN0IiwgR19DQUxMQkFDSyhyZXNvdXJjZVNlbnRSZXF1ZXN0
Q2FsbGJhY2spLCB0ZXN0KTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChyZXNvdXJjZSwgIm5v
dGlmeTo6cmVzcG9uc2UiLCBHX0NBTExCQUNLKHJlc291cmNlUmVjZWl2ZWRSZXNwb25zZUNhbGxi
YWNrKSwgdGVzdCk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QocmVzb3VyY2UsICJyZWNlaXZl
ZC1kYXRhIiwgR19DQUxMQkFDSyhyZXNvdXJjZVJlY2VpdmVkRGF0YUNhbGxiYWNrKSwgdGVzdCk7
CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QocmVzb3VyY2UsICJmaW5pc2hlZCIsIEdfQ0FMTEJB
Q0socmVzb3VyY2VGaW5pc2hlZENhbGxiYWNrKSwgdGVzdCk7CisgICAgICAgIGdfc2lnbmFsX2Nv
bm5lY3QocmVzb3VyY2UsICJmYWlsZWQiLCBHX0NBTExCQUNLKHJlc291cmNlRmFpbGVkQ2FsbGJh
Y2spLCB0ZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyU3VicmVzb3VyY2VzKCkKKyAgICB7
CisgICAgICAgIGdfbGlzdF9mcmVlX2Z1bGwobV9zdWJyZXNvdXJjZXMsIHJlaW50ZXJwcmV0X2Nh
c3Q8R0Rlc3Ryb3lOb3RpZnk+KGdfb2JqZWN0X3VucmVmKSk7CisgICAgICAgIG1fc3VicmVzb3Vy
Y2VzID0gMDsKKyAgICB9CisKKyAgICBSZXNvdXJjZXNUZXN0KCkKKyAgICAgICAgOiBXZWJWaWV3
VGVzdCgpCisgICAgICAgICwgbV9yZXNvdXJjZXNMb2FkZWQoMCkKKyAgICAgICAgLCBtX3Jlc291
cmNlc1RvTG9hZCgwKQorICAgICAgICAsIG1fcmVzb3VyY2VEYXRhU2l6ZSgwKQorICAgICAgICAs
IG1fc3VicmVzb3VyY2VzKDApCisgICAgeworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2Vi
VmlldywgInJlc291cmNlLWxvYWQtc3RhcnRlZCIsIEdfQ0FMTEJBQ0socmVzb3VyY2VMb2FkU3Rh
cnRlZENhbGxiYWNrKSwgdGhpcyk7CisgICAgfQorCisgICAgflJlc291cmNlc1Rlc3QoKQorICAg
IHsKKyAgICAgICAgY2xlYXJTdWJyZXNvdXJjZXMoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgcmVzb3VyY2VMb2FkU3RhcnRlZChXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIFdlYktp
dFVSSVJlcXVlc3QqIHJlcXVlc3QpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBy
ZXNvdXJjZVNlbnRSZXF1ZXN0KFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgV2ViS2l0VVJJ
UmVxdWVzdCogcmVxdWVzdCwgV2ViS2l0VVJJUmVzcG9uc2UqIHJlZGlyZWN0UmVzcG9uc2UpCisg
ICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCByZXNvdXJjZVJlY2VpdmVkUmVzcG9uc2Uo
V2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgcmVzb3VyY2VSZWNlaXZlZERhdGEoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBn
dWludDY0IGJ5dGVzUmVjZWl2ZWQpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBy
ZXNvdXJjZUZpbmlzaGVkKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSkKKyAgICB7CisgICAg
ICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChyZXNvdXJjZSwgR19TSUdO
QUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7CisgICAgICAgIGlmICh3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X21haW5fcmVzb3VyY2UobV93ZWJWaWV3KSAhPSByZXNvdXJjZSkKKyAgICAgICAg
ICAgIG1fc3VicmVzb3VyY2VzID0gZ19saXN0X3ByZXBlbmQobV9zdWJyZXNvdXJjZXMsIGdfb2Jq
ZWN0X3JlZihyZXNvdXJjZSkpOworICAgICAgICBpZiAoKyttX3Jlc291cmNlc0xvYWRlZCA9PSBt
X3Jlc291cmNlc1RvTG9hZCkKKyAgICAgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9v
cCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHJlc291cmNlRmFpbGVkKFdlYktpdFdlYlJl
c291cmNlKiByZXNvdXJjZSwgR0Vycm9yKiBlcnJvcikKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0
X25vdF9yZWFjaGVkKCk7CisgICAgfQorCisgICAgdm9pZCB3YWl0VW50aWxSZXNvdXJjZXNMb2Fk
ZWQoc2l6ZV90IHJlc291cmNlc0NvdW50KQorICAgIHsKKyAgICAgICAgbV9yZXNvdXJjZXNMb2Fk
ZWQgPSAwOworICAgICAgICBtX3Jlc291cmNlc1RvTG9hZCA9IHJlc291cmNlc0NvdW50OworICAg
ICAgICBjbGVhclN1YnJlc291cmNlcygpOworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWlu
TG9vcCk7CisgICAgfQorCisgICAgR0xpc3QqIHN1YnJlc291cmNlcygpCisgICAgeworICAgICAg
ICByZXR1cm4gbV9zdWJyZXNvdXJjZXM7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVzb3Vy
Y2VHZXREYXRhQ2FsbGJhY2soR09iamVjdCogb2JqZWN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwg
Z3BvaW50ZXIgdXNlckRhdGEpCisgICAgeworICAgICAgICBzaXplX3QgZGF0YVNpemU7CisgICAg
ICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICAgICAgdW5zaWduZWQgY2hhciogZGF0YSA9
IHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X2RhdGFfZmluaXNoKFdFQktJVF9XRUJfUkVTT1VSQ0Uo
b2JqZWN0KSwgcmVzdWx0LCAmZGF0YVNpemUsICZlcnJvci5vdXRQdHIoKSk7CisgICAgICAgIGdf
YXNzZXJ0KCFlcnJvci5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KGRhdGEpOworICAgICAgICBn
X2Fzc2VydF9jbXBpbnQoZGF0YVNpemUsID4sIDApOworCisgICAgICAgIFJlc291cmNlc1Rlc3Qq
IHRlc3QgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZXNUZXN0Kj4odXNlckRhdGEpOworICAgICAgICB0
ZXN0LT5tX3Jlc291cmNlRGF0YS5zZXQocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZGF0YSkpOwor
ICAgICAgICB0ZXN0LT5tX3Jlc291cmNlRGF0YVNpemUgPSBkYXRhU2l6ZTsKKyAgICAgICAgZ19t
YWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9CisKKyAgICB2b2lkIGNoZWNr
UmVzb3VyY2VEYXRhKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSkKKyAgICB7CisgICAgICAg
IG1fcmVzb3VyY2VEYXRhU2l6ZSA9IDA7CisgICAgICAgIHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0
X2RhdGEocmVzb3VyY2UsIDAsIHJlc291cmNlR2V0RGF0YUNhbGxiYWNrLCB0aGlzKTsKKyAgICAg
ICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworCisgICAgICAgIGNvbnN0IGNoYXIqIHVy
aSA9IHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaShyZXNvdXJjZSk7CisgICAgICAgIGlmICh1
cmkgPT0ga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpKSB7CisgICAgICAgICAgICBnX2Fzc2Vy
dF9jbXBpbnQobV9yZXNvdXJjZURhdGFTaXplLCA9PSwgc3RybGVuKGtJbmRleEh0bWwpKTsKKyAg
ICAgICAgICAgIGdfYXNzZXJ0KCFzdHJuY21wKG1fcmVzb3VyY2VEYXRhLmdldCgpLCBrSW5kZXhI
dG1sLCBtX3Jlc291cmNlRGF0YVNpemUpKTsKKyAgICAgICAgfSBlbHNlIGlmICh1cmkgPT0ga1Nl
cnZlci0+Z2V0VVJJRm9yUGF0aCgiL3N0eWxlLmNzcyIpKSB7CisgICAgICAgICAgICBnX2Fzc2Vy
dF9jbXBpbnQobV9yZXNvdXJjZURhdGFTaXplLCA9PSwgc3RybGVuKGtTdHlsZUNTUykpOworICAg
ICAgICAgICAgZ19hc3NlcnQoIXN0cm5jbXAobV9yZXNvdXJjZURhdGEuZ2V0KCksIGtTdHlsZUNT
UywgbV9yZXNvdXJjZURhdGFTaXplKSk7CisgICAgICAgIH0gZWxzZSBpZiAodXJpID09IGtTZXJ2
ZXItPmdldFVSSUZvclBhdGgoIi9qYXZhc2NyaXB0LmpzIikpIHsKKyAgICAgICAgICAgIGdfYXNz
ZXJ0X2NtcGludChtX3Jlc291cmNlRGF0YVNpemUsID09LCBzdHJsZW4oa0phdmFzY3JpcHQpKTsK
KyAgICAgICAgICAgIGdfYXNzZXJ0KCFzdHJuY21wKG1fcmVzb3VyY2VEYXRhLmdldCgpLCBrSmF2
YXNjcmlwdCwgbV9yZXNvdXJjZURhdGFTaXplKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICAgICAgbV9yZXNvdXJjZURhdGEuY2xlYXIo
KTsKKyAgICB9CisKKyAgICBzaXplX3QgbV9yZXNvdXJjZXNMb2FkZWQ7CisgICAgc2l6ZV90IG1f
cmVzb3VyY2VzVG9Mb2FkOworICAgIEdPd25QdHI8Y2hhcj4gbV9yZXNvdXJjZURhdGE7CisgICAg
c2l6ZV90IG1fcmVzb3VyY2VEYXRhU2l6ZTsKKyAgICBHTGlzdCogbV9zdWJyZXNvdXJjZXM7Cit9
OworCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1Jlc291cmNlcyhSZXNvdXJjZXNUZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQoreworICAgIC8vIE5vdGhpbmcgbG9hZGVkIHlldCwgdGhlcmUgc2hv
dWxuZCd0IGJlIHJlc291cmNlcy4KKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2dldF9t
YWluX3Jlc291cmNlKHRlc3QtPm1fd2ViVmlldykpOworICAgIGdfYXNzZXJ0KCF0ZXN0LT5zdWJy
ZXNvdXJjZXMoKSk7CisKKyAgICAvLyBMb2FkIHNpbXBsZSBwYWdlIHdpdGhvdXQgc3VicmVzb3Vy
Y2VzLgorICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keT5UZXN0aW5nIFdlYktpdEdUSys8
L2JvZHk+PC9odG1sPiIsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwor
ICAgIFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSA9IHdlYmtpdF93ZWJfdmlld19nZXRfbWFp
bl9yZXNvdXJjZSh0ZXN0LT5tX3dlYlZpZXcpOworICAgIGdfYXNzZXJ0KHJlc291cmNlKTsKKyAg
ICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dldF91cmkodGVzdC0+bV93ZWJWaWV3
KSwgPT0sIHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaShyZXNvdXJjZSkpOworICAgIGdfYXNz
ZXJ0KCF0ZXN0LT5zdWJyZXNvdXJjZXMoKSk7CisKKyAgICAvLyBMb2FkIHNpbXBsZSBwYWdlIHdp
dGggc3VicmVzb3VyY2VzLgorICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0
aCgiLyIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VzTG9hZGVkKDQpOwor
CisgICAgcmVzb3VyY2UgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2UodGVzdC0+
bV93ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChyZXNvdXJjZSk7CisgICAgZ19hc3NlcnRfY21wc3Ry
KHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKHRlc3QtPm1fd2ViVmlldyksID09LCB3ZWJraXRfd2Vi
X3Jlc291cmNlX2dldF91cmkocmVzb3VyY2UpKTsKKyAgICBHTGlzdCogc3VicmVzb3VyY2VzID0g
dGVzdC0+c3VicmVzb3VyY2VzKCk7CisgICAgZ19hc3NlcnQoc3VicmVzb3VyY2VzKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoZ19saXN0X2xlbmd0aChzdWJyZXNvdXJjZXMpLCA9PSwgMyk7CisKKyNp
ZiAwCisgICAgLy8gTG9hZCB0aGUgc2FtZSBVUkkgYWdhaW4uCisgICAgLy8gRklYTUU6IHdlIG5l
ZWQgYSB3b3JrYXJvdW5kIGZvciBidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTc4NTEwLgorICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgi
LyIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VzTG9hZGVkKDQpOworI2Vu
ZGlmCisKKyAgICAvLyBSZWxvYWQuCisgICAgd2Via2l0X3dlYl92aWV3X3JlbG9hZF9ieXBhc3Nf
Y2FjaGUodGVzdC0+bV93ZWJWaWV3KTsKKyAgICB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZXNMb2Fk
ZWQoNCk7Cit9CisKK2NsYXNzIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6IHB1YmxpYyBSZXNvdXJj
ZXNUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFNpbmdsZVJlc291
cmNlTG9hZFRlc3QpOworCisgICAgZW51bSBMb2FkRXZlbnRzIHsKKyAgICAgICAgU3RhcnRlZCwK
KyAgICAgICAgU2VudFJlcXVlc3QsCisgICAgICAgIFJlZGlyZWN0ZWQsCisgICAgICAgIFJlY2Vp
dmVkUmVzcG9uc2UsCisgICAgICAgIFJlY2VpdmVkRGF0YSwKKyAgICAgICAgRmluaXNoZWQsCisg
ICAgICAgIEZhaWxlZAorICAgIH07CisKKyAgICBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0KCkKKyAg
ICAgICAgOiBSZXNvdXJjZXNUZXN0KCkKKyAgICAgICAgLCBtX3Jlc291cmNlRGF0YVJlY2VpdmVk
KDApCisgICAgeworICAgICAgICBtX3Jlc291cmNlc1RvTG9hZCA9IDI7CisgICAgfQorCisgICAg
dm9pZCByZXNvdXJjZUxvYWRTdGFydGVkKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgV2Vi
S2l0VVJJUmVxdWVzdCogcmVxdWVzdCkKKyAgICB7CisgICAgICAgIGlmIChyZXNvdXJjZSA9PSB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2UobV93ZWJWaWV3KSkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBtX3Jlc291cmNlRGF0YVJlY2VpdmVkID0gMDsKKyAgICAgICAg
bV9yZXNvdXJjZSA9IHJlc291cmNlOworICAgICAgICBtX2xvYWRFdmVudHMuYXBwZW5kKFN0YXJ0
ZWQpOworICAgIH0KKworICAgIHZvaWQgcmVzb3VyY2VTZW50UmVxdWVzdChXZWJLaXRXZWJSZXNv
dXJjZSogcmVzb3VyY2UsIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QsIFdlYktpdFVSSVJlc3Bv
bnNlKiByZWRpcmVjdFJlc3BvbnNlKQorICAgIHsKKyAgICAgICAgaWYgKHJlc291cmNlICE9IG1f
cmVzb3VyY2UpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKHJlZGlyZWN0UmVz
cG9uc2UpCisgICAgICAgICAgICBtX2xvYWRFdmVudHMuYXBwZW5kKFJlZGlyZWN0ZWQpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBtX2xvYWRFdmVudHMuYXBwZW5kKFNlbnRSZXF1ZXN0KTsK
KyAgICB9CisKKyAgICB2b2lkIHJlc291cmNlUmVjZWl2ZWRSZXNwb25zZShXZWJLaXRXZWJSZXNv
dXJjZSogcmVzb3VyY2UpCisgICAgeworICAgICAgICBpZiAocmVzb3VyY2UgIT0gbV9yZXNvdXJj
ZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX2xvYWRFdmVudHMuYXBwZW5kKFJl
Y2VpdmVkUmVzcG9uc2UpOworICAgIH0KKworICAgIHZvaWQgcmVzb3VyY2VSZWNlaXZlZERhdGEo
V2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBndWludDY0IGJ5dGVzUmVjZWl2ZWQpCisgICAg
eworICAgICAgICBpZiAocmVzb3VyY2UgIT0gbV9yZXNvdXJjZSkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBtX3Jlc291cmNlRGF0YVJlY2VpdmVkICs9IGJ5dGVzUmVjZWl2ZWQ7Cisg
ICAgICAgIGlmICghbV9sb2FkRXZlbnRzLmNvbnRhaW5zKFJlY2VpdmVkRGF0YSkpCisgICAgICAg
ICAgICBtX2xvYWRFdmVudHMuYXBwZW5kKFJlY2VpdmVkRGF0YSk7CisgICAgfQorCisgICAgdm9p
ZCByZXNvdXJjZUZpbmlzaGVkKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSkKKyAgICB7Cisg
ICAgICAgIGlmIChyZXNvdXJjZSAhPSBtX3Jlc291cmNlKSB7CisgICAgICAgICAgICBSZXNvdXJj
ZXNUZXN0OjpyZXNvdXJjZUZpbmlzaGVkKHJlc291cmNlKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGlmICghbV9sb2FkRXZlbnRzLmNvbnRhaW5zKEZhaWxlZCkp
IHsKKyAgICAgICAgICAgIFdlYktpdFVSSVJlc3BvbnNlKiByZXNwb25zZSA9IHdlYmtpdF93ZWJf
cmVzb3VyY2VfZ2V0X3Jlc3BvbnNlKG1fcmVzb3VyY2UuZ2V0KCkpOworICAgICAgICAgICAgZ19h
c3NlcnQocmVzcG9uc2UpOworICAgICAgICAgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF91cmlf
cmVzcG9uc2VfZ2V0X2NvbnRlbnRfbGVuZ3RoKHJlc3BvbnNlKSwgPT0sIG1fcmVzb3VyY2VEYXRh
UmVjZWl2ZWQpOworICAgICAgICB9CisgICAgICAgIG1fbG9hZEV2ZW50cy5hcHBlbmQoRmluaXNo
ZWQpOworICAgICAgICBSZXNvdXJjZXNUZXN0OjpyZXNvdXJjZUZpbmlzaGVkKHJlc291cmNlKTsK
KyAgICB9CisKKyAgICB2b2lkIHJlc291cmNlRmFpbGVkKFdlYktpdFdlYlJlc291cmNlKiByZXNv
dXJjZSwgR0Vycm9yKiBlcnJvcikKKyAgICB7CisgICAgICAgIGlmIChyZXNvdXJjZSA9PSBtX3Jl
c291cmNlKQorICAgICAgICAgICAgbV9sb2FkRXZlbnRzLmFwcGVuZChGYWlsZWQpOworICAgIH0K
KworICAgIHZvaWQgd2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWQoKQorICAgIHsKKyAgICAg
ICAgbV9yZXNvdXJjZSA9IDA7CisgICAgICAgIG1fcmVzb3VyY2VzTG9hZGVkID0gMDsKKyAgICAg
ICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIFdlYktpdFVSSVJl
c3BvbnNlKiB3YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZEFuZFJldHVyblVSSVJlc3BvbnNl
KCkKKyAgICB7CisgICAgICAgIHdhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlzaGVkKCk7CisgICAg
ICAgIGdfYXNzZXJ0KG1fcmVzb3VyY2UpOworICAgICAgICByZXR1cm4gd2Via2l0X3dlYl9yZXNv
dXJjZV9nZXRfcmVzcG9uc2UobV9yZXNvdXJjZS5nZXQoKSk7CisgICAgfQorCisgICAgR1JlZlB0
cjxXZWJLaXRXZWJSZXNvdXJjZT4gbV9yZXNvdXJjZTsKKyAgICBWZWN0b3I8TG9hZEV2ZW50cz4g
bV9sb2FkRXZlbnRzOworICAgIGd1aW50NjQgbV9yZXNvdXJjZURhdGFSZWNlaXZlZDsKK307CisK
K3N0YXRpYyB2b2lkIHRlc3RXZWJSZXNvdXJjZUxvYWRpbmcoU2luZ2xlUmVzb3VyY2VMb2FkVGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdl
dFVSSUZvclBhdGgoIi9qYXZhc2NyaXB0Lmh0bWwiKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRV
bnRpbFJlc291cmNlTG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9yZXNvdXJj
ZSk7CisgICAgVmVjdG9yPFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OkxvYWRFdmVudHM+JiBldmVu
dHMgPSB0ZXN0LT5tX2xvYWRFdmVudHM7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXpl
KCksID09LCA1KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgU2luZ2xlUmVz
b3VyY2VMb2FkVGVzdDo6U3RhcnRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwg
PT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlNlbnRSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoZXZlbnRzWzJdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6UmVjZWl2ZWRSZXNw
b25zZSk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1szXSwgPT0sIFNpbmdsZVJlc291cmNl
TG9hZFRlc3Q6OlJlY2VpdmVkRGF0YSk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1s0XSwg
PT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OkZpbmlzaGVkKTsKKyAgICBldmVudHMuY2xlYXIo
KTsKKworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3JlZGlyZWN0
ZWQtY3NzLmh0bWwiKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9hZEZp
bmlzaGVkKCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9yZXNvdXJjZSk7CisgICAgZ19hc3NlcnRf
Y21waW50KGV2ZW50cy5zaXplKCksID09LCA2KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRz
WzBdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6U3RhcnRlZCk7CisgICAgZ19hc3NlcnRf
Y21waW50KGV2ZW50c1sxXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlNlbnRSZXF1ZXN0
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2Fk
VGVzdDo6UmVkaXJlY3RlZCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1szXSwgPT0sIFNp
bmdsZVJlc291cmNlTG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOworICAgIGdfYXNzZXJ0X2Nt
cGludChldmVudHNbNF0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpSZWNlaXZlZERhdGEp
OworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbNV0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRU
ZXN0OjpGaW5pc2hlZCk7CisgICAgZXZlbnRzLmNsZWFyKCk7CisKKyAgICB0ZXN0LT5sb2FkVVJJ
KGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbnZhbGlkLWNzcy5odG1sIikuZGF0YSgpKTsKKyAg
ICB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0KHRl
c3QtPm1fcmVzb3VyY2UpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwg
NCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIFNpbmdsZVJlc291cmNlTG9h
ZFRlc3Q6OlN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBTaW5n
bGVSZXNvdXJjZUxvYWRUZXN0OjpTZW50UmVxdWVzdCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2
ZW50c1syXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OkZhaWxlZCk7CisgICAgZ19hc3Nl
cnRfY21waW50KGV2ZW50c1szXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OkZpbmlzaGVk
KTsKKyAgICBldmVudHMuY2xlYXIoKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlJlc291cmNl
UmVzcG9uc2UoU2luZ2xlUmVzb3VyY2VMb2FkVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sK
KyAgICAvLyBObyBjYWNoZWQgcmVzb3VyY2U6IEZpcnN0IGxvYWQuCisgICAgdGVzdC0+bG9hZFVS
SShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvamF2YXNjcmlwdC5odG1sIikuZGF0YSgpKTsKKyAg
ICBXZWJLaXRVUklSZXNwb25zZSogcmVzcG9uc2UgPSB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxv
YWRGaW5pc2hlZEFuZFJldHVyblVSSVJlc3BvbnNlKCk7CisgICAgZ19hc3NlcnRfY21waW50KHdl
YmtpdF91cmlfcmVzcG9uc2VfZ2V0X3N0YXR1c19jb2RlKHJlc3BvbnNlKSwgPT0sIFNPVVBfU1RB
VFVTX09LKTsKKworICAgIC8vIE5vIGNhY2hlZCByZXNvdXJjZTogU2Vjb25kIGxvYWQuCisgICAg
dGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvamF2YXNjcmlwdC5odG1sIiku
ZGF0YSgpKTsKKyAgICByZXNwb25zZSA9IHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlz
aGVkQW5kUmV0dXJuVVJJUmVzcG9uc2UoKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3Vy
aV9yZXNwb25zZV9nZXRfc3RhdHVzX2NvZGUocmVzcG9uc2UpLCA9PSwgU09VUF9TVEFUVVNfT0sp
OworCisgICAgLy8gTm8gY2FjaGVkIHJlc291cmNlOiBSZWxvYWQuCisgICAgd2Via2l0X3dlYl92
aWV3X3JlbG9hZCh0ZXN0LT5tX3dlYlZpZXcpOworICAgIHJlc3BvbnNlID0gdGVzdC0+d2FpdFVu
dGlsUmVzb3VyY2VMb2FkRmluaXNoZWRBbmRSZXR1cm5VUklSZXNwb25zZSgpOworICAgIGdfYXNz
ZXJ0X2NtcGludCh3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF9zdGF0dXNfY29kZShyZXNwb25zZSks
ID09LCBTT1VQX1NUQVRVU19PSyk7CisKKyAgICAvLyBDYWNoZWQgcmVzb3VyY2U6IEZpcnN0IGxv
YWQuCisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvaW1hZ2UuaHRt
bCIpLmRhdGEoKSk7CisgICAgcmVzcG9uc2UgPSB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRG
aW5pc2hlZEFuZFJldHVyblVSSVJlc3BvbnNlKCk7CisgICAgZ19hc3NlcnRfY21waW50KHdlYmtp
dF91cmlfcmVzcG9uc2VfZ2V0X3N0YXR1c19jb2RlKHJlc3BvbnNlKSwgPT0sIFNPVVBfU1RBVFVT
X09LKTsKKworICAgIC8vIENhY2hlZCByZXNvdXJjZTogU2Vjb25kIGxvYWQuCisgICAgdGVzdC0+
bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvaW1hZ2UuaHRtbCIpLmRhdGEoKSk7Cisg
ICAgcmVzcG9uc2UgPSB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZEFuZFJldHVy
blVSSVJlc3BvbnNlKCk7CisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF91cmlfcmVzcG9uc2Vf
Z2V0X3N0YXR1c19jb2RlKHJlc3BvbnNlKSwgPT0sIFNPVVBfU1RBVFVTX09LKTsKKworICAgIC8v
IENhY2hlZCByZXNvdXJjZTogUmVsb2FkLgorICAgIHdlYmtpdF93ZWJfdmlld19yZWxvYWQodGVz
dC0+bV93ZWJWaWV3KTsKKyAgICByZXNwb25zZSA9IHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9h
ZEZpbmlzaGVkQW5kUmV0dXJuVVJJUmVzcG9uc2UoKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Vi
a2l0X3VyaV9yZXNwb25zZV9nZXRfc3RhdHVzX2NvZGUocmVzcG9uc2UpLCA9PSwgU09VUF9TVEFU
VVNfTk9UX01PRElGSUVEKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlJlc291cmNlTWltZVR5
cGUoU2luZ2xlUmVzb3VyY2VMb2FkVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0
ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9qYXZhc2NyaXB0Lmh0bWwiKS5k
YXRhKCkpOworICAgIFdlYktpdFVSSVJlc3BvbnNlKiByZXNwb25zZSA9IHRlc3QtPndhaXRVbnRp
bFJlc291cmNlTG9hZEZpbmlzaGVkQW5kUmV0dXJuVVJJUmVzcG9uc2UoKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X3VyaV9yZXNwb25zZV9nZXRfbWltZV90eXBlKHJlc3BvbnNlKSwgPT0s
ICJ0ZXh0L2phdmFzY3JpcHQiKTsKKworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJ
Rm9yUGF0aCgiL2ltYWdlLmh0bWwiKS5kYXRhKCkpOworICAgIHJlc3BvbnNlID0gdGVzdC0+d2Fp
dFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWRBbmRSZXR1cm5VUklSZXNwb25zZSgpOworICAgIGdf
YXNzZXJ0X2NtcHN0cih3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF9taW1lX3R5cGUocmVzcG9uc2Up
LCA9PSwgImltYWdlL3ZuZC5taWNyb3NvZnQuaWNvbiIpOworCisgICAgdGVzdC0+bG9hZFVSSShr
U2VydmVyLT5nZXRVUklGb3JQYXRoKCIvcmVkaXJlY3RlZC1jc3MuaHRtbCIpLmRhdGEoKSk7Cisg
ICAgcmVzcG9uc2UgPSB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZEFuZFJldHVy
blVSSVJlc3BvbnNlKCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF91cmlfcmVzcG9uc2Vf
Z2V0X21pbWVfdHlwZShyZXNwb25zZSksID09LCAidGV4dC9jc3MiKTsKK30KKworc3RhdGljIHZv
aWQgdGVzdFdlYlJlc291cmNlU3VnZ2VzdGVkRmlsZW5hbWUoU2luZ2xlUmVzb3VyY2VMb2FkVGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdl
dFVSSUZvclBhdGgoIi9qYXZhc2NyaXB0Lmh0bWwiKS5kYXRhKCkpOworICAgIFdlYktpdFVSSVJl
c3BvbnNlKiByZXNwb25zZSA9IHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlzaGVkQW5k
UmV0dXJuVVJJUmVzcG9uc2UoKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3VyaV9yZXNw
b25zZV9nZXRfc3VnZ2VzdGVkX2ZpbGVuYW1lKHJlc3BvbnNlKSwgPT0sICJKYXZhU2NyaXB0Lmpz
Iik7CisKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbWFnZS5o
dG1sIikuZGF0YSgpKTsKKyAgICByZXNwb25zZSA9IHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9h
ZEZpbmlzaGVkQW5kUmV0dXJuVVJJUmVzcG9uc2UoKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3Vy
aV9yZXNwb25zZV9nZXRfc3VnZ2VzdGVkX2ZpbGVuYW1lKHJlc3BvbnNlKSk7Cit9CisKK2NsYXNz
IFJlc291cmNlVVJJVHJhY2tpbmdUZXN0OiBwdWJsaWMgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdCB7
CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShSZXNvdXJjZVVSSVRyYWNraW5n
VGVzdCk7CisKKyAgICBSZXNvdXJjZVVSSVRyYWNraW5nVGVzdCgpCisgICAgICAgIDogU2luZ2xl
UmVzb3VyY2VMb2FkVGVzdCgpCisgICAgeworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHVyaUNo
YW5nZWQoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBHUGFyYW1TcGVjKiwgUmVzb3VyY2VV
UklUcmFja2luZ1Rlc3QqIHRlc3QpCisgICAgeworICAgICAgICBnX2Fzc2VydChyZXNvdXJjZSA9
PSB0ZXN0LT5tX3Jlc291cmNlLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHRlc3Qt
Pm1fYWN0aXZlVVJJLmRhdGEoKSwgIT0sIHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaSh0ZXN0
LT5tX3Jlc291cmNlLmdldCgpKSk7CisgICAgICAgIHRlc3QtPm1fYWN0aXZlVVJJID0gd2Via2l0
X3dlYl9yZXNvdXJjZV9nZXRfdXJpKHRlc3QtPm1fcmVzb3VyY2UuZ2V0KCkpOworICAgIH0KKwor
ICAgIHZvaWQgcmVzb3VyY2VMb2FkU3RhcnRlZChXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2Us
IFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QpCisgICAgeworICAgICAgICBpZiAocmVzb3VyY2Ug
PT0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX3Jlc291cmNlKG1fd2ViVmlldykpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgbV9yZXNvdXJjZSA9IHJlc291cmNlOworICAgICAgICBt
X2FjdGl2ZVVSSSA9IHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaShyZXNvdXJjZSk7CisgICAg
ICAgIGNoZWNrQWN0aXZlVVJJKCIvcmVkaXJlY3RlZC5jc3MiKTsKKyAgICAgICAgZ19hc3NlcnRf
Y21wc3RyKG1fYWN0aXZlVVJJLmRhdGEoKSwgPT0sIHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfdXJp
KHJlcXVlc3QpKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChyZXNvdXJjZSwgIm5vdGlmeTo6
dXJpIiwgR19DQUxMQkFDSyh1cmlDaGFuZ2VkKSwgdGhpcyk7CisgICAgfQorCisgICAgdm9pZCBy
ZXNvdXJjZVNlbnRSZXF1ZXN0KFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgV2ViS2l0VVJJ
UmVxdWVzdCogcmVxdWVzdCwgV2ViS2l0VVJJUmVzcG9uc2UqIHJlZGlyZWN0UmVzcG9uc2UpCisg
ICAgeworICAgICAgICBpZiAocmVzb3VyY2UgIT0gbV9yZXNvdXJjZSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBpZiAocmVkaXJlY3RSZXNwb25zZSkKKyAgICAgICAgICAgIGNoZWNr
QWN0aXZlVVJJKCIvc2ltcGxlLXN0eWxlLmNzcyIpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBjaGVja0FjdGl2ZVVSSSgiL3JlZGlyZWN0ZWQuY3NzIik7CisgICAgICAgIGdfYXNzZXJ0X2Nt
cHN0cihtX2FjdGl2ZVVSSS5kYXRhKCksID09LCB3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3VyaShy
ZXF1ZXN0KSk7CisgICAgfQorCisgICAgdm9pZCByZXNvdXJjZVJlY2VpdmVkUmVzcG9uc2UoV2Vi
S2l0V2ViUmVzb3VyY2UqIHJlc291cmNlKQorICAgIHsKKyAgICAgICAgaWYgKHJlc291cmNlICE9
IG1fcmVzb3VyY2UpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2hlY2tBY3RpdmVV
UkkoIi9zaW1wbGUtc3R5bGUuY3NzIik7CisgICAgfQorCisgICAgdm9pZCByZXNvdXJjZVJlY2Vp
dmVkRGF0YShXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIGd1aW50NjQgYnl0ZXNSZWNlaXZl
ZCkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCByZXNvdXJjZUZpbmlzaGVkKFdlYktpdFdlYlJl
c291cmNlKiByZXNvdXJjZSkKKyAgICB7CisgICAgICAgIGlmIChyZXNvdXJjZSA9PSBtX3Jlc291
cmNlKQorICAgICAgICAgICAgY2hlY2tBY3RpdmVVUkkoIi9zaW1wbGUtc3R5bGUuY3NzIik7Cisg
ICAgICAgIFJlc291cmNlc1Rlc3Q6OnJlc291cmNlRmluaXNoZWQocmVzb3VyY2UpOworICAgIH0K
KworICAgIHZvaWQgcmVzb3VyY2VGYWlsZWQoV2ViS2l0V2ViUmVzb3VyY2UqLCBHRXJyb3IqKQor
ICAgIHsKKyAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICB9CisKKyAgICBDU3Ry
aW5nIG1fYWN0aXZlVVJJOworCitwcml2YXRlOgorICAgIHZvaWQgY2hlY2tBY3RpdmVVUkkoY29u
c3QgY2hhciogdXJpKQorICAgIHsKKyAgICAgICAgQVNTRVJUX0NNUF9DU1RSSU5HKG1fYWN0aXZl
VVJJLCA9PSwga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCh1cmkpKTsKKyAgICB9Cit9OworCitzdGF0
aWMgdm9pZCB0ZXN0V2ViUmVzb3VyY2VBY3RpdmVVUkkoUmVzb3VyY2VVUklUcmFja2luZ1Rlc3Qq
IHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRV
UklGb3JQYXRoKCIvcmVkaXJlY3RlZC1jc3MuaHRtbCIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2Fp
dFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWQoKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlJl
c291cmNlR2V0RGF0YShSZXNvdXJjZXNUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAg
IHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7CisgICAg
Ly8gRklYTUU6IHRoaXMgc2hvdWxkIGJlIDQgaW5zdGVhZCBvZiAzLCBidXQgd2UgZG9uJ3QgZ2V0
IHRoZSBjc3MgaW1hZ2UgcmVzb3VyY2UKKyAgICAvLyBkdWUgdG8gYnVnIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODUxMC4KKyAgICB0ZXN0LT53YWl0VW50aWxSZXNv
dXJjZXNMb2FkZWQoMyk7CisKKyAgICBXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2UodGVzdC0+bV93ZWJWaWV3KTsKKyAgICBnX2Fz
c2VydChyZXNvdXJjZSk7CisgICAgdGVzdC0+Y2hlY2tSZXNvdXJjZURhdGEocmVzb3VyY2UpOwor
CisgICAgR0xpc3QqIHN1YnJlc291cmNlcyA9IHRlc3QtPnN1YnJlc291cmNlcygpOworICAgIGZv
ciAoR0xpc3QqIGl0ZW0gPSBzdWJyZXNvdXJjZXM7IGl0ZW07IGl0ZW0gPSBnX2xpc3RfbmV4dChp
dGVtKSkKKyAgICAgICAgdGVzdC0+Y2hlY2tSZXNvdXJjZURhdGEoV0VCS0lUX1dFQl9SRVNPVVJD
RShpdGVtLT5kYXRhKSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3UmVzb3VyY2VzSGlz
dG9yeUNhY2hlKFNpbmdsZVJlc291cmNlTG9hZFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7
CisgICAgQ1N0cmluZyBqYXZhc2NyaXB0VVJJID0ga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2ph
dmFzY3JpcHQuaHRtbCIpOworICAgIHRlc3QtPmxvYWRVUkkoamF2YXNjcmlwdFVSSS5kYXRhKCkp
OworICAgIHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlzaGVkKCk7CisgICAgV2ViS2l0
V2ViUmVzb3VyY2UqIHJlc291cmNlID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX3Jlc291cmNl
KHRlc3QtPm1fd2ViVmlldyk7CisgICAgZ19hc3NlcnQocmVzb3VyY2UpOworICAgIGdfYXNzZXJ0
X2NtcHN0cih3ZWJraXRfd2ViX3Jlc291cmNlX2dldF91cmkocmVzb3VyY2UpLCA9PSwgamF2YXNj
cmlwdFVSSS5kYXRhKCkpOworCisgICAgQ1N0cmluZyBzaW1wbGVTdHlsZUNTU1VSSSA9IGtTZXJ2
ZXItPmdldFVSSUZvclBhdGgoIi9zaW1wbGUtc3R5bGUtY3NzLmh0bWwiKTsKKyAgICB0ZXN0LT5s
b2FkVVJJKHNpbXBsZVN0eWxlQ1NTVVJJLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsUmVz
b3VyY2VMb2FkRmluaXNoZWQoKTsKKyAgICByZXNvdXJjZSA9IHdlYmtpdF93ZWJfdmlld19nZXRf
bWFpbl9yZXNvdXJjZSh0ZXN0LT5tX3dlYlZpZXcpOworICAgIGdfYXNzZXJ0KHJlc291cmNlKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJpKHJlc291cmNl
KSwgPT0sIHNpbXBsZVN0eWxlQ1NTVVJJLmRhdGEoKSk7CisKKyAgICB0ZXN0LT5nb0JhY2soKTsK
KyAgICB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZCgpOworICAgIHJlc291cmNl
ID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX3Jlc291cmNlKHRlc3QtPm1fd2ViVmlldyk7Cisg
ICAgZ19hc3NlcnQocmVzb3VyY2UpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3Jl
c291cmNlX2dldF91cmkocmVzb3VyY2UpLCA9PSwgamF2YXNjcmlwdFVSSS5kYXRhKCkpOworCisg
ICAgdGVzdC0+Z29Gb3J3YXJkKCk7CisgICAgdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmlu
aXNoZWQoKTsKKyAgICByZXNvdXJjZSA9IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9yZXNvdXJj
ZSh0ZXN0LT5tX3dlYlZpZXcpOworICAgIGdfYXNzZXJ0KHJlc291cmNlKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJpKHJlc291cmNlKSwgPT0sIHNpbXBs
ZVN0eWxlQ1NTVVJJLmRhdGEoKSk7Cit9CisKK2NsYXNzIFNlbmRSZXF1ZXN0VGVzdDogcHVibGlj
IFNpbmdsZVJlc291cmNlTG9hZFRlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJ
WFRVUkUoU2VuZFJlcXVlc3RUZXN0KTsKKworICAgIHZvaWQgcmVzb3VyY2VTZW50UmVxdWVzdChX
ZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QsIFdl
YktpdFVSSVJlc3BvbnNlKiByZWRpcmVjdFJlc3BvbnNlKQorICAgIHsKKyAgICAgICAgaWYgKHJl
c291cmNlICE9IG1fcmVzb3VyY2UpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYg
KHJlZGlyZWN0UmVzcG9uc2UpCisgICAgICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3Vy
aV9yZXF1ZXN0X2dldF91cmkocmVxdWVzdCksID09LCBtX2V4cGVjdGVkTmV3UmVzb3VyY2VVUklB
ZnRlclJlZGlyZWN0aW9uLmRhdGEoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdfYXNz
ZXJ0X2NtcHN0cih3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KSwgPT0sIG1fZXhw
ZWN0ZWROZXdSZXNvdXJjZVVSSS5kYXRhKCkpOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Vi
a2l0X3VyaV9yZXF1ZXN0X2dldF91cmkocmVxdWVzdCksID09LCB3ZWJraXRfd2ViX3Jlc291cmNl
X2dldF91cmkocmVzb3VyY2UpKTsKKworICAgICAgICBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0Ojpy
ZXNvdXJjZVNlbnRSZXF1ZXN0KHJlc291cmNlLCByZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKTsK
KyAgICB9CisKKyAgICB2b2lkIHJlc291cmNlRmFpbGVkKFdlYktpdFdlYlJlc291cmNlKiByZXNv
dXJjZSwgR0Vycm9yKiBlcnJvcikKKyAgICB7CisgICAgICAgIGlmIChyZXNvdXJjZSAhPSBtX3Jl
c291cmNlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3
ZWJraXRfd2ViX3Jlc291cmNlX2dldF91cmkocmVzb3VyY2UpLCA9PSwgbV9leHBlY3RlZENhbmNl
bGxlZFJlc291cmNlVVJJLmRhdGEoKSk7CisgICAgICAgIGdfYXNzZXJ0X2Vycm9yKGVycm9yLCBX
RUJLSVRfTkVUV09SS19FUlJPUiwgV0VCS0lUX05FVFdPUktfRVJST1JfQ0FOQ0VMTEVEKTsKKwor
ICAgICAgICBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpyZXNvdXJjZUZhaWxlZChyZXNvdXJjZSwg
ZXJyb3IpOworICAgIH0KKworICAgIHZvaWQgc2V0RXhwZWN0ZWROZXdSZXNvdXJjZVVSSShjb25z
dCBDU3RyaW5nJiB1cmkpCisgICAgeworICAgICAgICBtX2V4cGVjdGVkTmV3UmVzb3VyY2VVUkkg
PSB1cmk7CisgICAgfQorCisgICAgdm9pZCBzZXRFeHBlY3RlZENhbmNlbGxlZFJlc291cmNlVVJJ
KGNvbnN0IENTdHJpbmcmIHVyaSkKKyAgICB7CisgICAgICAgIG1fZXhwZWN0ZWRDYW5jZWxsZWRS
ZXNvdXJjZVVSSSA9IHVyaTsKKyAgICB9CisKKyAgICB2b2lkIHNldEV4cGVjdGVkTmV3UmVzb3Vy
Y2VVUklBZnRlclJlZGlyZWN0aW9uKGNvbnN0IENTdHJpbmcmIHVyaSkKKyAgICB7CisgICAgICAg
IG1fZXhwZWN0ZWROZXdSZXNvdXJjZVVSSUFmdGVyUmVkaXJlY3Rpb24gPSB1cmk7CisgICAgfQor
CisgICAgQ1N0cmluZyBtX2V4cGVjdGVkTmV3UmVzb3VyY2VVUkk7CisgICAgQ1N0cmluZyBtX2V4
cGVjdGVkQ2FuY2VsbGVkUmVzb3VyY2VVUkk7CisgICAgQ1N0cmluZyBtX2V4cGVjdGVkTmV3UmVz
b3VyY2VVUklBZnRlclJlZGlyZWN0aW9uOworfTsKKworc3RhdGljIHZvaWQgdGVzdFdlYlJlc291
cmNlU2VuZFJlcXVlc3QoU2VuZFJlcXVlc3RUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQorewor
ICAgIHRlc3QtPnNldEV4cGVjdGVkTmV3UmVzb3VyY2VVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0
aCgiL2phdmFzY3JpcHQuanMiKSk7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklG
b3JQYXRoKCJyZWxhdGl2ZS1qYXZhc2NyaXB0Lmh0bWwiKS5kYXRhKCkpOworICAgIHRlc3QtPndh
aXRVbnRpbFJlc291cmNlTG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9yZXNv
dXJjZSk7CisKKyAgICBWZWN0b3I8U2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6TG9hZEV2ZW50cz4m
IGV2ZW50cyA9IHRlc3QtPm1fbG9hZEV2ZW50czsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRz
LnNpemUoKSwgPT0sIDUpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBTaW5n
bGVSZXNvdXJjZUxvYWRUZXN0OjpTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRz
WzFdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6U2VudFJlcXVlc3QpOworICAgIGdfYXNz
ZXJ0X2NtcGludChldmVudHNbMl0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpSZWNlaXZl
ZFJlc3BvbnNlKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzNdLCA9PSwgU2luZ2xlUmVz
b3VyY2VMb2FkVGVzdDo6UmVjZWl2ZWREYXRhKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRz
WzRdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6RmluaXNoZWQpOworICAgIGV2ZW50cy5j
bGVhcigpOworCisgICAgLy8gQ2FuY2VsIHJlcXVlc3QuCisgICAgdGVzdC0+c2V0RXhwZWN0ZWRD
YW5jZWxsZWRSZXNvdXJjZVVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvY2FuY2VsLXRoaXMu
anMiKSk7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvcmVzb3Vy
Y2UtdG8tY2FuY2VsLmh0bWwiKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbFJlc291cmNl
TG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9yZXNvdXJjZSk7CisKKyAgICBn
X2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDMpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHNbMF0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpTdGFydGVkKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6RmFp
bGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgU2luZ2xlUmVzb3VyY2VM
b2FkVGVzdDo6RmluaXNoZWQpOworICAgIGV2ZW50cy5jbGVhcigpOworCisgICAgLy8gVVJJIGNo
YW5nZWQgYWZ0ZXIgYSByZWRpcmVjdC4KKyAgICB0ZXN0LT5zZXRFeHBlY3RlZE5ld1Jlc291cmNl
VVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9yZWRpcmVjdGVkLmpzIikpOworICAgIHRlc3Qt
PnNldEV4cGVjdGVkTmV3UmVzb3VyY2VVUklBZnRlclJlZGlyZWN0aW9uKGtTZXJ2ZXItPmdldFVS
SUZvclBhdGgoIi9qYXZhc2NyaXB0LmpzIikpOworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+
Z2V0VVJJRm9yUGF0aCgicmVkaXJlY3RlZC1qYXZhc2NyaXB0Lmh0bWwiKS5kYXRhKCkpOworICAg
IHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnQodGVz
dC0+bV9yZXNvdXJjZSk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0s
IDYpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBTaW5nbGVSZXNvdXJjZUxv
YWRUZXN0OjpTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgU2lu
Z2xlUmVzb3VyY2VMb2FkVGVzdDo6U2VudFJlcXVlc3QpOworICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHNbMl0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpSZWRpcmVjdGVkKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoZXZlbnRzWzNdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6UmVj
ZWl2ZWRSZXNwb25zZSk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1s0XSwgPT0sIFNpbmds
ZVJlc291cmNlTG9hZFRlc3Q6OlJlY2VpdmVkRGF0YSk7CisgICAgZ19hc3NlcnRfY21waW50KGV2
ZW50c1s1XSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OkZpbmlzaGVkKTsKKyAgICBldmVu
dHMuY2xlYXIoKTsKKworICAgIC8vIENhbmNlbCBhZnRlciBhIHJlZGlyZWN0LgorICAgIHRlc3Qt
PnNldEV4cGVjdGVkTmV3UmVzb3VyY2VVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3JlZGly
ZWN0ZWQtdG8tY2FuY2VsLmpzIikpOworICAgIHRlc3QtPnNldEV4cGVjdGVkQ2FuY2VsbGVkUmVz
b3VyY2VVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3JlZGlyZWN0ZWQtdG8tY2FuY2VsLmpz
IikpOworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3JlZGlyZWN0
ZWQtdG8tY2FuY2VsLmh0bWwiKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbFJlc291cmNl
TG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9yZXNvdXJjZSk7CisKKyAgICBn
X2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDQpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHNbMF0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpTdGFydGVkKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6U2Vu
dFJlcXVlc3QpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBTaW5nbGVSZXNv
dXJjZUxvYWRUZXN0OjpGYWlsZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbM10sID09
LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpGaW5pc2hlZCk7CisgICAgZXZlbnRzLmNsZWFyKCk7
Cit9CisKK3N0YXRpYyB2b2lkIGFkZENhY2hlSFRUUEhlYWRlcnNUb1Jlc3BvbnNlKFNvdXBNZXNz
YWdlKiBtZXNzYWdlKQoreworICAgIC8vIFRoZSBhY3R1YWwgZGF0ZSBkb2Vzbid0IHJlYWxseSBt
YXR0ZXIuCisgICAgU291cERhdGUqIHNvdXBEYXRlID0gc291cF9kYXRlX25ld19mcm9tX25vdygw
KTsKKyAgICBHT3duUHRyPGNoYXI+IGRhdGUoc291cF9kYXRlX3RvX3N0cmluZyhzb3VwRGF0ZSwg
U09VUF9EQVRFX0hUVFApKTsKKyAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobWVzc2Fn
ZS0+cmVzcG9uc2VfaGVhZGVycywgIkxhc3QtTW9kaWZpZWQiLCBkYXRlLmdldCgpKTsKKyAgICBz
b3VwX2RhdGVfZnJlZShzb3VwRGF0ZSk7CisgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5k
KG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJDYWNoZS1jb250cm9sIiwgInB1YmxpYywgbWF4
LWFnZT0zMTUzNjAwMCIpOworICAgIHNvdXBEYXRlID0gc291cF9kYXRlX25ld19mcm9tX25vdygz
NjAwKTsKKyAgICBkYXRlLnNldChzb3VwX2RhdGVfdG9fc3RyaW5nKHNvdXBEYXRlLCBTT1VQX0RB
VEVfSFRUUCkpOworICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChtZXNzYWdlLT5yZXNw
b25zZV9oZWFkZXJzLCAiRXhwaXJlcyIsIGRhdGUuZ2V0KCkpOworICAgIHNvdXBfZGF0ZV9mcmVl
KHNvdXBEYXRlKTsKK30KKworc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciog
c2VydmVyLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJs
ZSosIFNvdXBDbGllbnRDb250ZXh0KiwgZ3BvaW50ZXIpCit7CisgICAgaWYgKG1lc3NhZ2UtPm1l
dGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0
dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RB
VFVTX09LKTsKKworICAgIGlmIChzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfb25lKG1lc3NhZ2Ut
PnJlcXVlc3RfaGVhZGVycywgIklmLU1vZGlmaWVkLVNpbmNlIikpIHsKKyAgICAgICAgc291cF9t
ZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX01PRElGSUVEKTsKKyAg
ICAgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi8i
KSkgeworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2Vf
Ym9keSwgU09VUF9NRU1PUllfU1RBVElDLCBrSW5kZXhIdG1sLCBzdHJsZW4oa0luZGV4SHRtbCkp
OworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9qYXZhc2NyaXB0Lmh0bWwiKSkg
eworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogamF2YXNjcmlwdEh0bWwgPSAiPGh0bWw+PGhl
YWQ+PHNjcmlwdCBsYW5ndWFnZT0namF2YXNjcmlwdCcgc3JjPScvamF2YXNjcmlwdC5qcyc+PC9z
Y3JpcHQ+PC9oZWFkPjxib2R5PjwvYm9keT48L2h0bWw+IjsKKyAgICAgICAgc291cF9tZXNzYWdl
X2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywg
amF2YXNjcmlwdEh0bWwsIHN0cmxlbihqYXZhc2NyaXB0SHRtbCkpOworICAgIH0gZWxzZSBpZiAo
Z19zdHJfZXF1YWwocGF0aCwgIi9pbWFnZS5odG1sIikpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0
IGNoYXIqIGltYWdlSFRNTCA9ICI8aHRtbD48Ym9keT48aW1nIHNyYz0nL2JsYW5rLmljbyc+PC9p
bWc+PC9ib2R5PjwvaHRtbD4iOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVz
c2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBpbWFnZUhUTUwsIHN0cmxl
bihpbWFnZUhUTUwpKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvcmVkaXJl
Y3RlZC1jc3MuaHRtbCIpKSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiByZWRpcmVjdGVk
Q1NTSHRtbCA9ICI8aHRtbD48aGVhZD48bGluayByZWw9J3N0eWxlc2hlZXQnIGhyZWY9Jy9yZWRp
cmVjdGVkLmNzcycgdHlwZT0ndGV4dC9jc3MnPjwvaGVhZD48Ym9keT48L2h0bWw+IjsKKyAgICAg
ICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBf
TUVNT1JZX1NUQVRJQywgcmVkaXJlY3RlZENTU0h0bWwsIHN0cmxlbihyZWRpcmVjdGVkQ1NTSHRt
bCkpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9pbnZhbGlkLWNzcy5odG1s
IikpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGludmFsaWRDU1NIdG1sID0gIjxodG1s
PjxoZWFkPjxsaW5rIHJlbD0nc3R5bGVzaGVldCcgaHJlZj0nL2ludmFsaWQuY3NzJyB0eXBlPSd0
ZXh0L2Nzcyc+PC9oZWFkPjxib2R5PjwvaHRtbD4iOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9k
eV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBpbnZh
bGlkQ1NTSHRtbCwgc3RybGVuKGludmFsaWRDU1NIdG1sKSk7CisgICAgfSBlbHNlIGlmIChnX3N0
cl9lcXVhbChwYXRoLCAiL3NpbXBsZS1zdHlsZS1jc3MuaHRtbCIpKSB7CisgICAgICAgIHN0YXRp
YyBjb25zdCBjaGFyKiBzaW1wbGVTdHlsZUNTU0h0bWwgPSAiPGh0bWw+PGhlYWQ+PGxpbmsgcmVs
PSdzdHlsZXNoZWV0JyBocmVmPScvc2ltcGxlLXN0eWxlLmNzcycgdHlwZT0ndGV4dC9jc3MnPjwv
aGVhZD48Ym9keT48L2h0bWw+IjsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1l
c3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgc2ltcGxlU3R5bGVDU1NI
dG1sLCBzdHJsZW4oc2ltcGxlU3R5bGVDU1NIdG1sKSk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9l
cXVhbChwYXRoLCAiL3N0eWxlLmNzcyIpKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2Fw
cGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGtTdHlsZUNT
Uywgc3RybGVuKGtTdHlsZUNTUykpOworICAgICAgICBhZGRDYWNoZUhUVFBIZWFkZXJzVG9SZXNw
b25zZShtZXNzYWdlKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1lc3Nh
Z2UtPnJlc3BvbnNlX2hlYWRlcnMsICJDb250ZW50LVR5cGUiLCAidGV4dC9jc3MiKTsKKyAgICB9
IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvamF2YXNjcmlwdC5qcyIpKSB7CisgICAgICAg
IHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01F
TU9SWV9TVEFUSUMsIGtKYXZhc2NyaXB0LCBzdHJsZW4oa0phdmFzY3JpcHQpKTsKKyAgICAgICAg
c291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJD
b250ZW50LVR5cGUiLCAidGV4dC9qYXZhc2NyaXB0Iik7CisgICAgICAgIHNvdXBfbWVzc2FnZV9o
ZWFkZXJzX2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiQ29udGVudC1EaXNwb3Np
dGlvbiIsICJmaWxlbmFtZT1KYXZhU2NyaXB0LmpzIik7CisgICAgfSBlbHNlIGlmIChnX3N0cl9l
cXVhbChwYXRoLCAiL3JlbGF0aXZlLWphdmFzY3JpcHQuaHRtbCIpKSB7CisgICAgICAgIHN0YXRp
YyBjb25zdCBjaGFyKiBqYXZhc2NyaXB0UmVsYXRpdmVIVE1MID0gIjxodG1sPjxoZWFkPjxzY3Jp
cHQgbGFuZ3VhZ2U9J2phdmFzY3JpcHQnIHNyYz0ncmVtb3ZlLXRoaXMvamF2YXNjcmlwdC5qcyc+
PC9zY3JpcHQ+PC9oZWFkPjxib2R5PjwvYm9keT48L2h0bWw+IjsKKyAgICAgICAgc291cF9tZXNz
YWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJ
QywgamF2YXNjcmlwdFJlbGF0aXZlSFRNTCwgc3RybGVuKGphdmFzY3JpcHRSZWxhdGl2ZUhUTUwp
KTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvcmVzb3VyY2UtdG8tY2FuY2Vs
Lmh0bWwiKSkgeworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogcmVzb3VyY2VUb0NhbmNlbEhU
TUwgPSAiPGh0bWw+PGhlYWQ+PHNjcmlwdCBsYW5ndWFnZT0namF2YXNjcmlwdCcgc3JjPSdjYW5j
ZWwtdGhpcy5qcyc+PC9zY3JpcHQ+PC9oZWFkPjxib2R5PjwvYm9keT48L2h0bWw+IjsKKyAgICAg
ICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBf
TUVNT1JZX1NUQVRJQywgcmVzb3VyY2VUb0NhbmNlbEhUTUwsIHN0cmxlbihyZXNvdXJjZVRvQ2Fu
Y2VsSFRNTCkpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9yZWRpcmVjdGVk
LWphdmFzY3JpcHQuaHRtbCIpKSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBqYXZhc2Ny
aXB0UmVsYXRpdmVIVE1MID0gIjxodG1sPjxoZWFkPjxzY3JpcHQgbGFuZ3VhZ2U9J2phdmFzY3Jp
cHQnIHNyYz0nL3JlZGlyZWN0ZWQuanMnPjwvc2NyaXB0PjwvaGVhZD48Ym9keT48L2JvZHk+PC9o
dG1sPiI7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25z
ZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGphdmFzY3JpcHRSZWxhdGl2ZUhUTUwsIHN0cmxl
bihqYXZhc2NyaXB0UmVsYXRpdmVIVE1MKSk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChw
YXRoLCAiL3JlZGlyZWN0ZWQtdG8tY2FuY2VsLmh0bWwiKSkgeworICAgICAgICBzdGF0aWMgY29u
c3QgY2hhciogamF2YXNjcmlwdFJlbGF0aXZlSFRNTCA9ICI8aHRtbD48aGVhZD48c2NyaXB0IGxh
bmd1YWdlPSdqYXZhc2NyaXB0JyBzcmM9Jy9yZWRpcmVjdGVkLXRvLWNhbmNlbC5qcyc+PC9zY3Jp
cHQ+PC9oZWFkPjxib2R5PjwvYm9keT48L2h0bWw+IjsKKyAgICAgICAgc291cF9tZXNzYWdlX2Jv
ZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgamF2
YXNjcmlwdFJlbGF0aXZlSFRNTCwgc3RybGVuKGphdmFzY3JpcHRSZWxhdGl2ZUhUTUwpKTsKKyAg
ICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvYmxhbmsuaWNvIikpIHsKKyAgICAgICAg
R093blB0cjxjaGFyPiBmaWxlUGF0aChnX2J1aWxkX2ZpbGVuYW1lKFRlc3Q6OmdldFdlYktpdDFU
ZXN0UmVzb3VjZXNEaXIoKS5kYXRhKCksIHBhdGgsIE5VTEwpKTsKKyAgICAgICAgY2hhciogY29u
dGVudHM7CisgICAgICAgIGdzaXplIGNvbnRlbnRzTGVuZ3RoOworICAgICAgICBnX2ZpbGVfZ2V0
X2NvbnRlbnRzKGZpbGVQYXRoLmdldCgpLCAmY29udGVudHMsICZjb250ZW50c0xlbmd0aCwgMCk7
CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5
LCBTT1VQX01FTU9SWV9UQUtFLCBjb250ZW50cywgY29udGVudHNMZW5ndGgpOworICAgICAgICBh
ZGRDYWNoZUhUVFBIZWFkZXJzVG9SZXNwb25zZShtZXNzYWdlKTsKKyAgICAgICAgc291cF9tZXNz
YWdlX2hlYWRlcnNfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJDb250ZW50LVR5
cGUiLCAiaW1hZ2Uvdm5kLm1pY3Jvc29mdC5pY29uIik7CisgICAgfSBlbHNlIGlmIChnX3N0cl9l
cXVhbChwYXRoLCAiL3NpbXBsZS1zdHlsZS5jc3MiKSkgeworICAgICAgICBzdGF0aWMgY29uc3Qg
Y2hhciogc2ltcGxlQ1NTID0KKyAgICAgICAgICAgICJib2R5IHsiCisgICAgICAgICAgICAiICAg
IG1hcmdpbjogMHB4OyIKKyAgICAgICAgICAgICIgICAgcGFkZGluZzogMHB4OyIKKyAgICAgICAg
ICAgICJ9IjsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3Bv
bnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgc2ltcGxlQ1NTLCBzdHJsZW4oc2ltcGxlQ1NT
KSk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChtZXNzYWdlLT5yZXNwb25z
ZV9oZWFkZXJzLCAiQ29udGVudC1UeXBlIiwgInRleHQvY3NzIik7CisgICAgfSBlbHNlIGlmIChn
X3N0cl9lcXVhbChwYXRoLCAiL3JlZGlyZWN0ZWQuY3NzIikpIHsKKyAgICAgICAgc291cF9tZXNz
YWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTU9WRURfUEVSTUFORU5UTFkpOwor
ICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVh
ZGVycywgIkxvY2F0aW9uIiwgIi9zaW1wbGUtc3R5bGUuY3NzIik7CisgICAgfSBlbHNlIGlmIChn
X3N0cl9lcXVhbChwYXRoLCAiL3JlZGlyZWN0ZWQuanMiKSkgeworICAgICAgICBzb3VwX21lc3Nh
Z2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19NT1ZFRF9QRVJNQU5FTlRMWSk7Cisg
ICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9oZWFk
ZXJzLCAiTG9jYXRpb24iLCAiL3JlbW92ZS10aGlzL2phdmFzY3JpcHQuanMiKTsKKyAgICB9IGVs
c2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvcmVkaXJlY3RlZC10by1jYW5jZWwuanMiKSkgewor
ICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19NT1ZF
RF9QRVJNQU5FTlRMWSk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChtZXNz
YWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiTG9jYXRpb24iLCAiL2NhbmNlbC10aGlzLmpzIik7Cisg
ICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2ludmFsaWQuY3NzIikpCisgICAgICAg
IHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX0NBTlRfQ09OTkVD
VCk7CisgICAgZWxzZQorICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBT
T1VQX1NUQVRVU19OT1RfRk9VTkQpOworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1l
c3NhZ2UtPnJlc3BvbnNlX2JvZHkpOworfQorCit2b2lkIGJlZm9yZUFsbCgpCit7CisgICAga1Nl
cnZlciA9IG5ldyBXZWJLaXRUZXN0U2VydmVyKCk7CisgICAga1NlcnZlci0+cnVuKHNlcnZlckNh
bGxiYWNrKTsKKworICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfd2ViX2V4dGVuc2lvbnNfZGly
ZWN0b3J5KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpLCBXRUJLSVRfVEVTVF9XRUJf
RVhURU5TSU9OU19ESVIpOworCisgICAgUmVzb3VyY2VzVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3
IiwgInJlc291cmNlcyIsIHRlc3RXZWJWaWV3UmVzb3VyY2VzKTsKKyAgICBTaW5nbGVSZXNvdXJj
ZUxvYWRUZXN0OjphZGQoIldlYktpdFdlYlJlc291cmNlIiwgImxvYWRpbmciLCB0ZXN0V2ViUmVz
b3VyY2VMb2FkaW5nKTsKKyAgICBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjphZGQoIldlYktpdFdl
YlJlc291cmNlIiwgInJlc3BvbnNlIiwgdGVzdFdlYlJlc291cmNlUmVzcG9uc2UpOworICAgIFNp
bmdsZVJlc291cmNlTG9hZFRlc3Q6OmFkZCgiV2ViS2l0V2ViUmVzb3VyY2UiLCAibWltZS10eXBl
IiwgdGVzdFdlYlJlc291cmNlTWltZVR5cGUpOworICAgIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6
OmFkZCgiV2ViS2l0V2ViUmVzb3VyY2UiLCAic3VnZ2VzdGVkLWZpbGVuYW1lIiwgdGVzdFdlYlJl
c291cmNlU3VnZ2VzdGVkRmlsZW5hbWUpOworICAgIFJlc291cmNlVVJJVHJhY2tpbmdUZXN0Ojph
ZGQoIldlYktpdFdlYlJlc291cmNlIiwgImFjdGl2ZS11cmkiLCB0ZXN0V2ViUmVzb3VyY2VBY3Rp
dmVVUkkpOworICAgIFJlc291cmNlc1Rlc3Q6OmFkZCgiV2ViS2l0V2ViUmVzb3VyY2UiLCAiZ2V0
LWRhdGEiLCB0ZXN0V2ViUmVzb3VyY2VHZXREYXRhKTsKKyAgICBTaW5nbGVSZXNvdXJjZUxvYWRU
ZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiaGlzdG9yeS1jYWNoZSIsIHRlc3RXZWJWaWV3UmVz
b3VyY2VzSGlzdG9yeUNhY2hlKTsKKyAgICBTZW5kUmVxdWVzdFRlc3Q6OmFkZCgiV2ViS2l0V2Vi
UGFnZSIsICJzZW5kLXJlcXVlc3QiLCB0ZXN0V2ViUmVzb3VyY2VTZW5kUmVxdWVzdCk7Cit9CisK
K3ZvaWQgYWZ0ZXJBbGwoKQoreworICAgIGRlbGV0ZSBrU2VydmVyOworfQpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RTU0wuY3BwIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RTU0wuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzMTgwYzUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFNTTC5jcHAKQEAgLTAsMCArMSwyOTAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaW5jbHVkZSAiTG9hZFRyYWNraW5nVGVzdC5oIgorI2luY2x1ZGUgIldlYktpdFRl
c3RTZXJ2ZXIuaCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK3N0YXRpYyBXZWJLaXRUZXN0U2Vy
dmVyKiBrSHR0cHNTZXJ2ZXI7CitzdGF0aWMgV2ViS2l0VGVzdFNlcnZlcioga0h0dHBTZXJ2ZXI7
CisKK3N0YXRpYyBjb25zdCBjaGFyKiBpbmRleEhUTUwgPSAiPGh0bWw+PGJvZHk+VGVzdGluZyBX
ZWJLaXQyR1RLKyBTU0w8L2JvZHk+PC9odG1sbD4iOworc3RhdGljIGNvbnN0IGNoYXIqIGluc2Vj
dXJlQ29udGVudEhUTUwgPSAiPGh0bWw+PHNjcmlwdCBzcmM9XCIlc1wiPjwvc2NyaXB0Pjxib2R5
PjxwPlRleHQgKyBpbWFnZSA8aW1nIHNyYz1cIiVzXCIgYWxpZ249XCJyaWdodFwiLz48L3A+PC9i
b2R5PjwvaHRtbD4iOworc3RhdGljIGNvbnN0IGNoYXIgVExTRXhwZWN0ZWRTdWNjZXNzVGl0bGVb
XSA9ICJXZWJLaXQyR3RrKyBUTFMgcGVybWlzc2lvbiB0ZXN0IjsKK3N0YXRpYyBjb25zdCBjaGFy
IFRMU1N1Y2Nlc3NIVE1MU3RyaW5nW10gPSAiPGh0bWw+PGhlYWQ+PHRpdGxlPldlYktpdDJHdGsr
IFRMUyBwZXJtaXNzaW9uIHRlc3Q8L3RpdGxlPjwvaGVhZD48Ym9keT48L2JvZHk+PC9odG1sPiI7
CisKK2NsYXNzIFNTTFRlc3Q6IHB1YmxpYyBMb2FkVHJhY2tpbmdUZXN0IHsKK3B1YmxpYzoKKyAg
ICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFNTTFRlc3QpOworCisgICAgU1NMVGVzdCgpCisgICAg
ICAgIDogbV90bHNFcnJvcnMoc3RhdGljX2Nhc3Q8R1Rsc0NlcnRpZmljYXRlRmxhZ3M+KDApKQor
ICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcHJvdmlzaW9uYWxMb2FkRmFpbGVkKGNv
bnN0IGdjaGFyKiBmYWlsaW5nVVJJLCBHRXJyb3IqIGVycm9yKQorICAgIHsKKyAgICAgICAgZ19h
c3NlcnRfZXJyb3IoZXJyb3IsIFNPVVBfSFRUUF9FUlJPUiwgU09VUF9TVEFUVVNfU1NMX0ZBSUxF
RCk7CisgICAgICAgIExvYWRUcmFja2luZ1Rlc3Q6OnByb3Zpc2lvbmFsTG9hZEZhaWxlZChmYWls
aW5nVVJJLCBlcnJvcik7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGxvYWRDb21taXR0ZWQo
KQorICAgIHsKKyAgICAgICAgR1Rsc0NlcnRpZmljYXRlKiBjZXJ0aWZpY2F0ZSA9IDA7CisgICAg
ICAgIHdlYmtpdF93ZWJfdmlld19nZXRfdGxzX2luZm8obV93ZWJWaWV3LCAmY2VydGlmaWNhdGUs
ICZtX3Rsc0Vycm9ycyk7CisgICAgICAgIG1fY2VydGlmaWNhdGUgPSBjZXJ0aWZpY2F0ZTsKKyAg
ICAgICAgTG9hZFRyYWNraW5nVGVzdDo6bG9hZENvbW1pdHRlZCgpOworICAgIH0KKworICAgIHZv
aWQgd2FpdFVudGlsTG9hZEZpbmlzaGVkKCkKKyAgICB7CisgICAgICAgIG1fY2VydGlmaWNhdGUg
PSAwOworICAgICAgICBtX3Rsc0Vycm9ycyA9IHN0YXRpY19jYXN0PEdUbHNDZXJ0aWZpY2F0ZUZs
YWdzPigwKTsKKyAgICAgICAgTG9hZFRyYWNraW5nVGVzdDo6d2FpdFVudGlsTG9hZEZpbmlzaGVk
KCk7CisgICAgfQorCisgICAgR1JlZlB0cjxHVGxzQ2VydGlmaWNhdGU+IG1fY2VydGlmaWNhdGU7
CisgICAgR1Rsc0NlcnRpZmljYXRlRmxhZ3MgbV90bHNFcnJvcnM7Cit9OworCitzdGF0aWMgdm9p
ZCB0ZXN0U1NMKFNTTFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9h
ZFVSSShrSHR0cHNTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi8iKS5kYXRhKCkpOworICAgIHRlc3Qt
PndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fY2VydGlmaWNh
dGUpOworICAgIC8vIFdlIGFsd2F5cyBleHBlY3QgZXJyb3JzIGJlY2F1c2Ugd2UgYXJlIHVzaW5n
IGEgc2VsZi1zaWduZWQgY2VydGlmaWNhdGUsCisgICAgLy8gYnV0IG9ubHkgR19UTFNfQ0VSVElG
SUNBVEVfVU5LTk9XTl9DQSBmbGFncyBzaG91bGQgYmUgcHJlc2VudC4KKyAgICBnX2Fzc2VydCh0
ZXN0LT5tX3Rsc0Vycm9ycyk7CisgICAgZ19hc3NlcnRfY21wdWludCh0ZXN0LT5tX3Rsc0Vycm9y
cywgPT0sIEdfVExTX0NFUlRJRklDQVRFX1VOS05PV05fQ0EpOworCisgICAgLy8gTm9uIEhUVFBT
IGxvYWRzIHNob3VsZG4ndCBoYXZlIGEgY2VydGlmaWNhdGUgbm9yIGVycm9ycy4KKyAgICB0ZXN0
LT5sb2FkSHRtbChpbmRleEhUTUwsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hl
ZCgpOworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX2NlcnRpZmljYXRlKTsKKyAgICBnX2Fzc2VydCgh
dGVzdC0+bV90bHNFcnJvcnMpOworfQorCitjbGFzcyBJbnNlY3VyZUNvbnRlbnRUZXN0OiBwdWJs
aWMgV2ViVmlld1Rlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoSW5z
ZWN1cmVDb250ZW50VGVzdCk7CisKKyAgICBJbnNlY3VyZUNvbnRlbnRUZXN0KCkKKyAgICAgICAg
OiBtX2luc2VjdXJlQ29udGVudFJ1bihmYWxzZSkKKyAgICAgICAgLCBtX2luc2VjdXJlQ29udGVu
dERpc3BsYXllZChmYWxzZSkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJW
aWV3LCAiaW5zZWN1cmUtY29udGVudC1kZXRlY3RlZCIsIEdfQ0FMTEJBQ0soaW5zZWN1cmVDb250
ZW50RGV0ZWN0ZWRDYWxsYmFjayksIHRoaXMpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGlu
c2VjdXJlQ29udGVudERldGVjdGVkQ2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2Vi
S2l0SW5zZWN1cmVDb250ZW50RXZlbnQgZXZlbnQsIEluc2VjdXJlQ29udGVudFRlc3QqIHRlc3Qp
CisgICAgeworICAgICAgICBnX2Fzc2VydCh3ZWJWaWV3ID09IHRlc3QtPm1fd2ViVmlldyk7CisK
KyAgICAgICAgaWYgKGV2ZW50ID09IFdFQktJVF9JTlNFQ1VSRV9DT05URU5UX1JVTikKKyAgICAg
ICAgICAgIHRlc3QtPm1faW5zZWN1cmVDb250ZW50UnVuID0gdHJ1ZTsKKworICAgICAgICBpZiAo
ZXZlbnQgPT0gV0VCS0lUX0lOU0VDVVJFX0NPTlRFTlRfRElTUExBWUVEKQorICAgICAgICAgICAg
dGVzdC0+bV9pbnNlY3VyZUNvbnRlbnREaXNwbGF5ZWQgPSB0cnVlOworICAgIH0KKworICAgIGJv
b2wgbV9pbnNlY3VyZUNvbnRlbnRSdW47CisgICAgYm9vbCBtX2luc2VjdXJlQ29udGVudERpc3Bs
YXllZDsKK307CisKK3N0YXRpYyB2b2lkIHRlc3RJbnNlY3VyZUNvbnRlbnQoSW5zZWN1cmVDb250
ZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkVVJJKGtIdHRw
c1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2luc2VjdXJlLWNvbnRlbnQvIikuZGF0YSgpKTsKKyAg
ICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPm1f
aW5zZWN1cmVDb250ZW50UnVuKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX2luc2VjdXJlQ29udGVu
dERpc3BsYXllZCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RUTFNFcnJvcnNQb2xpY3koU1NMVGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0
ID0gd2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KHRlc3QtPm1fd2ViVmlldyk7CisgICAgLy8g
VExTIGVycm9ycyBhcmUgaWdub3JlZCBieSBkZWZhdWx0LgorICAgIGdfYXNzZXJ0KHdlYmtpdF93
ZWJfY29udGV4dF9nZXRfdGxzX2Vycm9yc19wb2xpY3koY29udGV4dCkgPT0gV0VCS0lUX1RMU19F
UlJPUlNfUE9MSUNZX0lHTk9SRSk7CisgICAgdGVzdC0+bG9hZFVSSShrSHR0cHNTZXJ2ZXItPmdl
dFVSSUZvclBhdGgoIi8iKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hl
ZCgpOworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX2xvYWRGYWlsZWQpOworCisgICAgd2Via2l0X3dl
Yl9jb250ZXh0X3NldF90bHNfZXJyb3JzX3BvbGljeShjb250ZXh0LCBXRUJLSVRfVExTX0VSUk9S
U19QT0xJQ1lfRkFJTCk7CisgICAgdGVzdC0+bG9hZFVSSShrSHR0cHNTZXJ2ZXItPmdldFVSSUZv
clBhdGgoIi8iKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwor
ICAgIGdfYXNzZXJ0KHRlc3QtPm1fbG9hZEZhaWxlZCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9s
b2FkRXZlbnRzLmNvbnRhaW5zKExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZEZhaWxl
ZCkpOworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX2xvYWRFdmVudHMuY29udGFpbnMoTG9hZFRyYWNr
aW5nVGVzdDo6TG9hZENvbW1pdHRlZCkpOworfQorCitjbGFzcyBUTFNFcnJvcnNUZXN0OiBwdWJs
aWMgU1NMVGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShUTFNFcnJv
cnNUZXN0KTsKKworICAgIFRMU0Vycm9yc1Rlc3QoKQorICAgIHsKKyAgICAgICAgZ19zaWduYWxf
Y29ubmVjdChtX3dlYlZpZXcsICJsb2FkLWZhaWxlZC13aXRoLXRscy1lcnJvcnMiLCBHX0NBTExC
QUNLKHJ1bkxvYWRGYWlsZWRXaXRoVExTRXJyb3JzQ2FsbGJhY2spLCB0aGlzKTsKKyAgICB9CisK
KyAgICB+VExTRXJyb3JzVGVzdCgpCisgICAgeworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19k
aXNjb25uZWN0X21hdGNoZWQobV93ZWJWaWV3LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAw
LCAwLCB0aGlzKTsKKyAgICAgICAgaWYgKG1fY2VydGlmaWNhdGVJbmZvKQorICAgICAgICAgICAg
d2Via2l0X2NlcnRpZmljYXRlX2luZm9fZnJlZShtX2NlcnRpZmljYXRlSW5mbyk7CisgICAgfQor
CisgICAgc3RhdGljIGdib29sZWFuIHJ1bkxvYWRGYWlsZWRXaXRoVExTRXJyb3JzQ2FsbGJhY2so
V2ViS2l0V2ViVmlldyosIFdlYktpdENlcnRpZmljYXRlSW5mbyogaW5mbywgY29uc3QgY2hhciog
aG9zdCwgVExTRXJyb3JzVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPnJ1bkxvYWRG
YWlsZWRXaXRoVExTRXJyb3JzKGluZm8sIGhvc3QpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAg
ICB9CisKKyAgICB2b2lkIHJ1bkxvYWRGYWlsZWRXaXRoVExTRXJyb3JzKFdlYktpdENlcnRpZmlj
YXRlSW5mbyogaW5mbywgY29uc3QgY2hhciogaG9zdCkKKyAgICB7CisgICAgICAgIGlmIChtX2Nl
cnRpZmljYXRlSW5mbykKKyAgICAgICAgICAgIHdlYmtpdF9jZXJ0aWZpY2F0ZV9pbmZvX2ZyZWUo
bV9jZXJ0aWZpY2F0ZUluZm8pOworICAgICAgICBtX2NlcnRpZmljYXRlSW5mbyA9IHdlYmtpdF9j
ZXJ0aWZpY2F0ZV9pbmZvX2NvcHkoaW5mbyk7CisgICAgICAgIG1faG9zdC5zZXQoZ19zdHJkdXAo
aG9zdCkpOworICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3ApOworICAgIH0KKwor
ICAgIHZvaWQgd2FpdFVudGlsTG9hZEZhaWxlZFdpdGhUTFNFcnJvcnMoKQorICAgIHsKKyAgICAg
ICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIFdlYktpdENlcnRp
ZmljYXRlSW5mbyogY2VydGlmaWNhdGVJbmZvKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2Nl
cnRpZmljYXRlSW5mbzsKKyAgICB9CisKKyAgICBjb25zdCBjaGFyKiBob3N0KCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2hvc3QuZ2V0KCk7CisgICAgfQorCitwcml2YXRlOgorICAgIFdlYktp
dENlcnRpZmljYXRlSW5mbyogbV9jZXJ0aWZpY2F0ZUluZm87CisgICAgR093blB0cjxjaGFyPiBt
X2hvc3Q7Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0TG9hZEZhaWxlZFdpdGhUTFNFcnJvcnMoVExT
RXJyb3JzVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBXZWJLaXRXZWJDb250ZXh0
KiBjb250ZXh0ID0gd2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KHRlc3QtPm1fd2ViVmlldyk7
CisgICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF90bHNfZXJyb3JzX3BvbGljeShjb250ZXh0LCBX
RUJLSVRfVExTX0VSUk9SU19QT0xJQ1lfRkFJTCk7CisKKyAgICAvLyBUaGUgbG9hZC1mYWlsZWQt
d2l0aC10bHMtZXJyb3JzIHNpZ25hbCBzaG91bGQgYmUgZW1pdHRlZCB3aGVuIHRoZXJlIGlzIGEg
VExTIGZhaWx1cmUuCisgICAgdGVzdC0+bG9hZFVSSShrSHR0cHNTZXJ2ZXItPmdldFVSSUZvclBh
dGgoIi90ZXN0LXRscy8iKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGYWlsZWRX
aXRoVExTRXJyb3JzKCk7CisgICAgLy8gVGVzdCB0aGUgV2ViS2l0Q2VydGlmaWNhdGVJbmZvIEFQ
SS4KKyAgICBnX2Fzc2VydChHX0lTX1RMU19DRVJUSUZJQ0FURSh3ZWJraXRfY2VydGlmaWNhdGVf
aW5mb19nZXRfdGxzX2NlcnRpZmljYXRlKHRlc3QtPmNlcnRpZmljYXRlSW5mbygpKSkpOworICAg
IGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2NlcnRpZmljYXRlX2luZm9fZ2V0X3Rsc19lcnJvcnMo
dGVzdC0+Y2VydGlmaWNhdGVJbmZvKCkpLCA9PSwgR19UTFNfQ0VSVElGSUNBVEVfVU5LTk9XTl9D
QSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPmhvc3QoKSwgPT0sIHNvdXBfdXJpX2dldF9o
b3N0KGtIdHRwc1NlcnZlci0+YmFzZVVSSSgpKSk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3Qt
Pm1fbG9hZEV2ZW50c1swXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0
YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMV0sID09LCBM
b2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOworCisgICAgLy8gVGVzdCBhbGxvd2luZyBh
biBleGNlcHRpb24gZm9yIHRoaXMgY2VydGlmaWNhdGUgb24gdGhpcyBob3N0LgorICAgIHdlYmtp
dF93ZWJfY29udGV4dF9hbGxvd190bHNfY2VydGlmaWNhdGVfZm9yX2hvc3QoY29udGV4dCwgdGVz
dC0+Y2VydGlmaWNhdGVJbmZvKCksIHRlc3QtPmhvc3QoKSk7CisgICAgLy8gVGhlIHBhZ2Ugc2hv
dWxkIG5vdyBsb2FkIHdpdGhvdXQgZXJyb3JzLgorICAgIHRlc3QtPmxvYWRVUkkoa0h0dHBzU2Vy
dmVyLT5nZXRVUklGb3JQYXRoKCIvdGVzdC10bHMvIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0
VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRF
dmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNr
aW5nVGVzdDo6TG9hZENvbW1pdHRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9h
ZEV2ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7CisgICAgZ19h
c3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRfdGl0bGUodGVzdC0+bV93ZWJWaWV3KSwg
PT0sIFRMU0V4cGVjdGVkU3VjY2Vzc1RpdGxlKTsKK30KKworCitzdGF0aWMgdm9pZCBodHRwc1Nl
cnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1lc3NhZ2UsIGNv
bnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqLCBTb3VwQ2xpZW50Q29udGV4dCosIGdwb2ludGVy
KQoreworICAgIGlmIChtZXNzYWdlLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7CisgICAg
ICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9JTVBM
RU1FTlRFRCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZ19zdHJfZXF1YWwo
cGF0aCwgIi8iKSkgeworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBT
T1VQX1NUQVRVU19PSyk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdl
LT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGluZGV4SFRNTCwgc3RybGVuKGlu
ZGV4SFRNTCkpOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5y
ZXNwb25zZV9ib2R5KTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvaW5zZWN1
cmUtY29udGVudC8iKSkgeworICAgICAgICBHT3duUHRyPGNoYXI+IHJlc3BvbnNlSFRNTChnX3N0
cmR1cF9wcmludGYoaW5zZWN1cmVDb250ZW50SFRNTCwga0h0dHBTZXJ2ZXItPmdldFVSSUZvclBh
dGgoIi90ZXN0LXNjcmlwdCIpLmRhdGEoKSwga0h0dHBTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi90
ZXN0LWltYWdlIikuZGF0YSgpKSk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZCht
ZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9DT1BZLCByZXNwb25zZUhUTUwuZ2V0
KCksIHN0cmxlbihyZXNwb25zZUhUTUwuZ2V0KCkpKTsKKyAgICAgICAgc291cF9tZXNzYWdlX3Nl
dF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOworICAgICAgICBzb3VwX21lc3NhZ2Vf
Ym9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKKyAgICB9IGVsc2UgaWYgKGdf
c3RyX2VxdWFsKHBhdGgsICIvdGVzdC10bHMvIikpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3Nl
dF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOworICAgICAgICBzb3VwX21lc3NhZ2Vf
Ym9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBU
TFNTdWNjZXNzSFRNTFN0cmluZywgc3RybGVuKFRMU1N1Y2Nlc3NIVE1MU3RyaW5nKSk7CisgICAg
ICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOwor
ICAgIH0gZWxzZQorICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQ
X1NUQVRVU19OT1RfRk9VTkQpOworfQorCitzdGF0aWMgdm9pZCBodHRwU2VydmVyQ2FsbGJhY2so
U291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0
aCwgR0hhc2hUYWJsZSosIFNvdXBDbGllbnRDb250ZXh0KiwgZ3BvaW50ZXIpCit7CisgICAgaWYg
KG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKKyAgICAgICAgc291cF9tZXNz
YWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3Rlc3Qt
c2NyaXB0IikpIHsKKyAgICAgICAgR093blB0cjxjaGFyPiBwYXRoVG9GaWxlKGdfYnVpbGRfZmls
ZW5hbWUoVGVzdDo6Z2V0UmVzb3VyY2VzRGlyKCkuZGF0YSgpLCAibGluay10aXRsZS5qcyIsIE5V
TEwpKTsKKyAgICAgICAgY2hhciogY29udGVudHM7CisgICAgICAgIGdzaXplIGxlbmd0aDsKKyAg
ICAgICAgZ19maWxlX2dldF9jb250ZW50cyhwYXRoVG9GaWxlLmdldCgpLCAmY29udGVudHMsICZs
ZW5ndGgsIDApOworCisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5y
ZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBjb250ZW50cywgbGVuZ3RoKTsKKyAgICAg
ICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOworICAg
ICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsK
KyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvdGVzdC1pbWFnZSIpKSB7CisgICAg
ICAgIEdPd25QdHI8Y2hhcj4gcGF0aFRvRmlsZShnX2J1aWxkX2ZpbGVuYW1lKFRlc3Q6OmdldFdl
YktpdDFUZXN0UmVzb3VjZXNEaXIoKS5kYXRhKCksICJibGFuay5pY28iLCBOVUxMKSk7CisgICAg
ICAgIGNoYXIqIGNvbnRlbnRzOworICAgICAgICBnc2l6ZSBsZW5ndGg7CisgICAgICAgIGdfZmls
ZV9nZXRfY29udGVudHMocGF0aFRvRmlsZS5nZXQoKSwgJmNvbnRlbnRzLCAmbGVuZ3RoLCAwKTsK
KworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9k
eSwgU09VUF9NRU1PUllfVEFLRSwgY29udGVudHMsIGxlbmd0aCk7CisgICAgICAgIHNvdXBfbWVz
c2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKKyAgICAgICAgc291cF9t
ZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7CisgICAgfSBlbHNl
CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05P
VF9GT1VORCk7Cit9CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICBrSHR0cHNTZXJ2ZXIgPSBu
ZXcgV2ViS2l0VGVzdFNlcnZlcihXZWJLaXRUZXN0U2VydmVyOjpTZXJ2ZXJIVFRQUyk7CisgICAg
a0h0dHBzU2VydmVyLT5ydW4oaHR0cHNTZXJ2ZXJDYWxsYmFjayk7CisKKyAgICBrSHR0cFNlcnZl
ciA9IG5ldyBXZWJLaXRUZXN0U2VydmVyKFdlYktpdFRlc3RTZXJ2ZXI6OlNlcnZlckhUVFApOwor
ICAgIGtIdHRwU2VydmVyLT5ydW4oaHR0cFNlcnZlckNhbGxiYWNrKTsKKworICAgIFNTTFRlc3Q6
OmFkZCgiV2ViS2l0V2ViVmlldyIsICJzc2wiLCB0ZXN0U1NMKTsKKyAgICBJbnNlY3VyZUNvbnRl
bnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiaW5zZWN1cmUtY29udGVudCIsIHRlc3RJbnNl
Y3VyZUNvbnRlbnQpOworICAgIC8vIEluIHRoaXMgY2FzZSB0aGUgb3JkZXIgb2YgdGhlIHRlc3Rz
IGRvZXMgbWF0dGVyIGJlY2F1c2UgdGxzLWVycm9ycy1wb2xpY3kgdGVzdHMgdGhlIGRlZmF1bHQg
cG9saWN5LAorICAgIC8vIGFuZCBleHBlY3RzIHRoYXQgbm8gZXhjZXB0aW9uIHdpbGwgaGF2ZSBi
ZWVuIGFkZGVkIGZvciB0aGlzIGNlcnRpZmljYXRlIGFuZCBob3N0IHBhaXIgYXMgaXMKKyAgICAv
LyBkb25lIGluIHRoZSB0bHMtcGVybWlzc2lvbi1yZXF1ZXN0IHRlc3QuCisgICAgU1NMVGVzdDo6
YWRkKCJXZWJLaXRXZWJWaWV3IiwgInRscy1lcnJvcnMtcG9saWN5IiwgdGVzdFRMU0Vycm9yc1Bv
bGljeSk7CisgICAgVExTRXJyb3JzVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImxvYWQtZmFp
bGVkLXdpdGgtdGxzLWVycm9ycyIsIHRlc3RMb2FkRmFpbGVkV2l0aFRMU0Vycm9ycyk7Cit9CisK
K3ZvaWQgYWZ0ZXJBbGwoKQoreworICAgIGRlbGV0ZSBrSHR0cHNTZXJ2ZXI7CisgICAgZGVsZXRl
IGtIdHRwU2VydmVyOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyR3RrL1Rlc3RVSUNsaWVudC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdDJHdGsvVGVzdFVJQ2xpZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5iYzMwZDZkCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXQyR3RrL1Rlc3RVSUNsaWVudC5jcHAKQEAgLTAsMCArMSw2NzkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXZWJWaWV3VGVzdC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8
d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4K
Kworc3RhdGljIGNvbnN0IGNoYXIqIGtBbGVydERpYWxvZ01lc3NhZ2UgPSAiV2ViS2l0R1RLKyBh
bGVydCBkaWFsb2cgbWVzc2FnZSI7CitzdGF0aWMgY29uc3QgY2hhcioga0NvbmZpcm1EaWFsb2dN
ZXNzYWdlID0gIldlYktpdEdUSysgY29uZmlybSBkaWFsb2cgbWVzc2FnZSI7CitzdGF0aWMgY29u
c3QgY2hhcioga1Byb21wdERpYWxvZ01lc3NhZ2UgPSAiV2ViS2l0R1RLKyBwcm9tcHQgZGlhbG9n
IG1lc3NhZ2UiOworc3RhdGljIGNvbnN0IGNoYXIqIGtQcm9tcHREaWFsb2dSZXR1cm5lZFRleHQg
PSAiV2ViS2l0R1RLKyBwcm9tcHQgZGlhbG9nIHJldHVybmVkIHRleHQiOworCitjbGFzcyBVSUNs
aWVudFRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RF
U1RfRklYVFVSRShVSUNsaWVudFRlc3QpOworCisgICAgZW51bSBXZWJWaWV3RXZlbnRzIHsKKyAg
ICAgICAgQ3JlYXRlLAorICAgICAgICBSZWFkeVRvU2hvdywKKyAgICAgICAgUnVuQXNNb2RhbCwK
KyAgICAgICAgQ2xvc2UKKyAgICB9OworCisgICAgY2xhc3MgV2luZG93UHJvcGVydGllcyB7Cisg
ICAgcHVibGljOgorICAgICAgICBXaW5kb3dQcm9wZXJ0aWVzKCkKKyAgICAgICAgICAgIDogbV9p
c051bGwodHJ1ZSkKKyAgICAgICAgICAgICwgbV90b29sYmFyVmlzaWJsZSh0cnVlKQorICAgICAg
ICAgICAgLCBtX3N0YXR1c2JhclZpc2libGUodHJ1ZSkKKyAgICAgICAgICAgICwgbV9zY3JvbGxi
YXJzVmlzaWJsZSh0cnVlKQorICAgICAgICAgICAgLCBtX21lbnViYXJWaXNpYmxlKHRydWUpCisg
ICAgICAgICAgICAsIG1fbG9jYXRpb25iYXJWaXNpYmxlKHRydWUpCisgICAgICAgICAgICAsIG1f
cmVzaXphYmxlKHRydWUpCisgICAgICAgICAgICAsIG1fZnVsbHNjcmVlbihmYWxzZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgbWVtc2V0KCZtX2dlb21ldHJ5LCAwLCBzaXplb2YoR2RrUmVjdGFu
Z2xlKSk7CisgICAgICAgIH0KKworICAgICAgICBXaW5kb3dQcm9wZXJ0aWVzKFdlYktpdFdpbmRv
d1Byb3BlcnRpZXMqIHdpbmRvd1Byb3BlcnRpZXMpCisgICAgICAgICAgICA6IG1faXNOdWxsKGZh
bHNlKQorICAgICAgICAgICAgLCBtX3Rvb2xiYXJWaXNpYmxlKHdlYmtpdF93aW5kb3dfcHJvcGVy
dGllc19nZXRfdG9vbGJhcl92aXNpYmxlKHdpbmRvd1Byb3BlcnRpZXMpKQorICAgICAgICAgICAg
LCBtX3N0YXR1c2JhclZpc2libGUod2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF9zdGF0dXNi
YXJfdmlzaWJsZSh3aW5kb3dQcm9wZXJ0aWVzKSkKKyAgICAgICAgICAgICwgbV9zY3JvbGxiYXJz
VmlzaWJsZSh3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X3Njcm9sbGJhcnNfdmlzaWJsZSh3
aW5kb3dQcm9wZXJ0aWVzKSkKKyAgICAgICAgICAgICwgbV9tZW51YmFyVmlzaWJsZSh3ZWJraXRf
d2luZG93X3Byb3BlcnRpZXNfZ2V0X21lbnViYXJfdmlzaWJsZSh3aW5kb3dQcm9wZXJ0aWVzKSkK
KyAgICAgICAgICAgICwgbV9sb2NhdGlvbmJhclZpc2libGUod2Via2l0X3dpbmRvd19wcm9wZXJ0
aWVzX2dldF9sb2NhdGlvbmJhcl92aXNpYmxlKHdpbmRvd1Byb3BlcnRpZXMpKQorICAgICAgICAg
ICAgLCBtX3Jlc2l6YWJsZSh3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X3Jlc2l6YWJsZSh3
aW5kb3dQcm9wZXJ0aWVzKSkKKyAgICAgICAgICAgICwgbV9mdWxsc2NyZWVuKHdlYmtpdF93aW5k
b3dfcHJvcGVydGllc19nZXRfZnVsbHNjcmVlbih3aW5kb3dQcm9wZXJ0aWVzKSkKKyAgICAgICAg
eworICAgICAgICAgICAgd2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF9nZW9tZXRyeSh3aW5k
b3dQcm9wZXJ0aWVzLCAmbV9nZW9tZXRyeSk7CisgICAgICAgIH0KKworICAgICAgICBXaW5kb3dQ
cm9wZXJ0aWVzKEdka1JlY3RhbmdsZSogZ2VvbWV0cnksIGJvb2wgdG9vbGJhclZpc2libGUsIGJv
b2wgc3RhdHVzYmFyVmlzaWJsZSwgYm9vbCBzY3JvbGxiYXJzVmlzaWJsZSwgYm9vbCBtZW51YmFy
VmlzaWJsZSwgYm9vbCBsb2NhdGlvbmJhclZpc2libGUsIGJvb2wgcmVzaXphYmxlLCBib29sIGZ1
bGxzY3JlZW4pCisgICAgICAgICAgICA6IG1faXNOdWxsKGZhbHNlKQorICAgICAgICAgICAgLCBt
X2dlb21ldHJ5KCpnZW9tZXRyeSkKKyAgICAgICAgICAgICwgbV90b29sYmFyVmlzaWJsZSh0b29s
YmFyVmlzaWJsZSkKKyAgICAgICAgICAgICwgbV9zdGF0dXNiYXJWaXNpYmxlKHN0YXR1c2JhclZp
c2libGUpCisgICAgICAgICAgICAsIG1fc2Nyb2xsYmFyc1Zpc2libGUoc2Nyb2xsYmFyc1Zpc2li
bGUpCisgICAgICAgICAgICAsIG1fbWVudWJhclZpc2libGUobWVudWJhclZpc2libGUpCisgICAg
ICAgICAgICAsIG1fbG9jYXRpb25iYXJWaXNpYmxlKGxvY2F0aW9uYmFyVmlzaWJsZSkKKyAgICAg
ICAgICAgICwgbV9yZXNpemFibGUocmVzaXphYmxlKQorICAgICAgICAgICAgLCBtX2Z1bGxzY3Jl
ZW4oZnVsbHNjcmVlbikKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBpc051
bGwoKSBjb25zdCB7IHJldHVybiBtX2lzTnVsbDsgfQorCisgICAgICAgIHZvaWQgYXNzZXJ0RXF1
YWwoY29uc3QgV2luZG93UHJvcGVydGllcyYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAg
ICAgICAgIGdfYXNzZXJ0X2NtcGludChtX2dlb21ldHJ5LngsID09LCBvdGhlci5tX2dlb21ldHJ5
LngpOworICAgICAgICAgICAgZ19hc3NlcnRfY21waW50KG1fZ2VvbWV0cnkueSwgPT0sIG90aGVy
Lm1fZ2VvbWV0cnkueSk7CisgICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQobV9nZW9tZXRyeS53
aWR0aCwgPT0sIG90aGVyLm1fZ2VvbWV0cnkud2lkdGgpOworICAgICAgICAgICAgZ19hc3NlcnRf
Y21waW50KG1fZ2VvbWV0cnkuaGVpZ2h0LCA9PSwgb3RoZXIubV9nZW9tZXRyeS5oZWlnaHQpOwor
ICAgICAgICAgICAgZ19hc3NlcnRfY21waW50KHN0YXRpY19jYXN0PGludD4obV90b29sYmFyVmlz
aWJsZSksID09LCBzdGF0aWNfY2FzdDxpbnQ+KG90aGVyLm1fdG9vbGJhclZpc2libGUpKTsKKyAg
ICAgICAgICAgIGdfYXNzZXJ0X2NtcGludChzdGF0aWNfY2FzdDxpbnQ+KG1fc3RhdHVzYmFyVmlz
aWJsZSksID09LCBzdGF0aWNfY2FzdDxpbnQ+KG90aGVyLm1fc3RhdHVzYmFyVmlzaWJsZSkpOwor
ICAgICAgICAgICAgZ19hc3NlcnRfY21waW50KHN0YXRpY19jYXN0PGludD4obV9zY3JvbGxiYXJz
VmlzaWJsZSksID09LCBzdGF0aWNfY2FzdDxpbnQ+KG90aGVyLm1fc2Nyb2xsYmFyc1Zpc2libGUp
KTsKKyAgICAgICAgICAgIGdfYXNzZXJ0X2NtcGludChzdGF0aWNfY2FzdDxpbnQ+KG1fbWVudWJh
clZpc2libGUpLCA9PSwgc3RhdGljX2Nhc3Q8aW50PihvdGhlci5tX21lbnViYXJWaXNpYmxlKSk7
CisgICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQoc3RhdGljX2Nhc3Q8aW50PihtX2xvY2F0aW9u
YmFyVmlzaWJsZSksID09LCBzdGF0aWNfY2FzdDxpbnQ+KG90aGVyLm1fbG9jYXRpb25iYXJWaXNp
YmxlKSk7CisgICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQoc3RhdGljX2Nhc3Q8aW50PihtX3Jl
c2l6YWJsZSksID09LCBzdGF0aWNfY2FzdDxpbnQ+KG90aGVyLm1fcmVzaXphYmxlKSk7CisgICAg
ICAgICAgICBnX2Fzc2VydF9jbXBpbnQoc3RhdGljX2Nhc3Q8aW50PihtX2Z1bGxzY3JlZW4pLCA9
PSwgc3RhdGljX2Nhc3Q8aW50PihvdGhlci5tX2Z1bGxzY3JlZW4pKTsKKyAgICAgICAgfQorCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgYm9vbCBtX2lzTnVsbDsKKworICAgICAgICBHZGtSZWN0YW5n
bGUgbV9nZW9tZXRyeTsKKworICAgICAgICBib29sIG1fdG9vbGJhclZpc2libGU7CisgICAgICAg
IGJvb2wgbV9zdGF0dXNiYXJWaXNpYmxlOworICAgICAgICBib29sIG1fc2Nyb2xsYmFyc1Zpc2li
bGU7CisgICAgICAgIGJvb2wgbV9tZW51YmFyVmlzaWJsZTsKKyAgICAgICAgYm9vbCBtX2xvY2F0
aW9uYmFyVmlzaWJsZTsKKworICAgICAgICBib29sIG1fcmVzaXphYmxlOworICAgICAgICBib29s
IG1fZnVsbHNjcmVlbjsKKyAgICB9OworCisgICAgc3RhdGljIHZvaWQgd2luZG93UHJvcGVydGll
c05vdGlmeUNhbGxiYWNrKEdPYmplY3QqLCBHUGFyYW1TcGVjKiBwYXJhbVNwZWMsIFVJQ2xpZW50
VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPm1fd2luZG93UHJvcGVydGllc0NoYW5n
ZWQuYWRkKGdfcGFyYW1fc3BlY19nZXRfbmFtZShwYXJhbVNwZWMpKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgR3RrV2lkZ2V0KiB2aWV3Q3JlYXRlQ2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmll
dywgVUlDbGllbnRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRlc3QtPnZpZXdD
cmVhdGUod2ViVmlldyk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgdmlld1JlYWR5VG9TaG93
Q2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgVUlDbGllbnRUZXN0KiB0ZXN0KQorICAg
IHsKKyAgICAgICAgdGVzdC0+dmlld1JlYWR5VG9TaG93KHdlYlZpZXcpOworICAgIH0KKworICAg
IHN0YXRpYyB2b2lkIHZpZXdDbG9zZUNhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFVJ
Q2xpZW50VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPnZpZXdDbG9zZSh3ZWJWaWV3
KTsKKyAgICB9CisKKyAgICB2b2lkIHNjcmlwdEFsZXJ0KFdlYktpdFNjcmlwdERpYWxvZyogZGlh
bG9nKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX3NjcmlwdERpYWxvZ1R5cGUpIHsKKyAgICAg
ICAgY2FzZSBXRUJLSVRfU0NSSVBUX0RJQUxPR19BTEVSVDoKKyAgICAgICAgICAgIGdfYXNzZXJ0
X2NtcHN0cih3ZWJraXRfc2NyaXB0X2RpYWxvZ19nZXRfbWVzc2FnZShkaWFsb2cpLCA9PSwga0Fs
ZXJ0RGlhbG9nTWVzc2FnZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXRUJL
SVRfU0NSSVBUX0RJQUxPR19DT05GSVJNOgorICAgICAgICAgICAgZ19hc3NlcnQobV9zY3JpcHRE
aWFsb2dDb25maXJtZWQpOworICAgICAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zY3Jp
cHRfZGlhbG9nX2dldF9tZXNzYWdlKGRpYWxvZyksID09LCAiY29uZmlybWVkIik7CisKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdFQktJVF9TQ1JJUFRfRElBTE9HX1BST01QVDoK
KyAgICAgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2NyaXB0X2RpYWxvZ19nZXRfbWVz
c2FnZShkaWFsb2cpLCA9PSwga1Byb21wdERpYWxvZ1JldHVybmVkVGV4dCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9v
cCk7CisgICAgfQorCisgICAgdm9pZCBzY3JpcHRDb25maXJtKFdlYktpdFNjcmlwdERpYWxvZyog
ZGlhbG9nKQorICAgIHsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zY3JpcHRfZGlh
bG9nX2dldF9tZXNzYWdlKGRpYWxvZyksID09LCBrQ29uZmlybURpYWxvZ01lc3NhZ2UpOworICAg
ICAgICBtX3NjcmlwdERpYWxvZ0NvbmZpcm1lZCA9ICFtX3NjcmlwdERpYWxvZ0NvbmZpcm1lZDsK
KyAgICAgICAgd2Via2l0X3NjcmlwdF9kaWFsb2dfY29uZmlybV9zZXRfY29uZmlybWVkKGRpYWxv
ZywgbV9zY3JpcHREaWFsb2dDb25maXJtZWQpOworICAgIH0KKworICAgIHZvaWQgc2NyaXB0UHJv
bXB0KFdlYktpdFNjcmlwdERpYWxvZyogZGlhbG9nKQorICAgIHsKKyAgICAgICAgZ19hc3NlcnRf
Y21wc3RyKHdlYmtpdF9zY3JpcHRfZGlhbG9nX2dldF9tZXNzYWdlKGRpYWxvZyksID09LCBrUHJv
bXB0RGlhbG9nTWVzc2FnZSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2NyaXB0
X2RpYWxvZ19wcm9tcHRfZ2V0X2RlZmF1bHRfdGV4dChkaWFsb2cpLCA9PSwgImRlZmF1bHQiKTsK
KyAgICAgICAgd2Via2l0X3NjcmlwdF9kaWFsb2dfcHJvbXB0X3NldF90ZXh0KGRpYWxvZywga1By
b21wdERpYWxvZ1JldHVybmVkVGV4dCk7CisgICAgfQorCisgICAgc3RhdGljIGdib29sZWFuIHNj
cmlwdERpYWxvZyhXZWJLaXRXZWJWaWV3KiwgV2ViS2l0U2NyaXB0RGlhbG9nKiBkaWFsb2csIFVJ
Q2xpZW50VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAod2Via2l0X3NjcmlwdF9k
aWFsb2dfZ2V0X2RpYWxvZ190eXBlKGRpYWxvZykpIHsKKyAgICAgICAgY2FzZSBXRUJLSVRfU0NS
SVBUX0RJQUxPR19BTEVSVDoKKyAgICAgICAgICAgIHRlc3QtPnNjcmlwdEFsZXJ0KGRpYWxvZyk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXRUJLSVRfU0NSSVBUX0RJQUxPR19D
T05GSVJNOgorICAgICAgICAgICAgdGVzdC0+c2NyaXB0Q29uZmlybShkaWFsb2cpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0VCS0lUX1NDUklQVF9ESUFMT0dfUFJPTVBUOgor
ICAgICAgICAgICAgdGVzdC0+c2NyaXB0UHJvbXB0KGRpYWxvZyk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKworICAgIHN0YXRp
YyB2b2lkIG1vdXNlVGFyZ2V0Q2hhbmdlZChXZWJLaXRXZWJWaWV3KiwgV2ViS2l0SGl0VGVzdFJl
c3VsdCogaGl0VGVzdFJlc3VsdCwgZ3VpbnQgbW9kaWZpZXJzLCBVSUNsaWVudFRlc3QqIHRlc3Qp
CisgICAgeworICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfSElUX1RFU1RfUkVTVUxUKGhpdFRl
c3RSZXN1bHQpKTsKKyAgICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RG
aW5pc2hlcyhHX09CSkVDVChoaXRUZXN0UmVzdWx0KSk7CisKKyAgICAgICAgdGVzdC0+bV9tb3Vz
ZVRhcmdldEhpdFRlc3RSZXN1bHQgPSBoaXRUZXN0UmVzdWx0OworICAgICAgICB0ZXN0LT5tX21v
dXNlVGFyZ2V0TW9kaWZpZXJzID0gbW9kaWZpZXJzOworICAgICAgICBnX21haW5fbG9vcF9xdWl0
KHRlc3QtPm1fbWFpbkxvb3ApOworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBwZXJtaXNz
aW9uUmVxdWVzdGVkKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRQZXJtaXNzaW9uUmVxdWVzdCogcmVx
dWVzdCwgVUlDbGllbnRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lU
X0lTX1BFUk1JU1NJT05fUkVRVUVTVChyZXF1ZXN0KSk7CisgICAgICAgIHRlc3QtPmFzc2VydE9i
amVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QocmVxdWVzdCkpOworCisgICAg
ICAgIGlmICh0ZXN0LT5tX2FsbG93UGVybWlzc2lvblJlcXVlc3RzKQorICAgICAgICAgICAgd2Vi
a2l0X3Blcm1pc3Npb25fcmVxdWVzdF9hbGxvdyhyZXF1ZXN0KTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgd2Via2l0X3Blcm1pc3Npb25fcmVxdWVzdF9kZW55KHJlcXVlc3QpOworCisgICAg
ICAgIHJldHVybiBUUlVFOworICAgIH0KKworICAgIFVJQ2xpZW50VGVzdCgpCisgICAgICAgIDog
bV9zY3JpcHREaWFsb2dUeXBlKFdFQktJVF9TQ1JJUFRfRElBTE9HX0FMRVJUKQorICAgICAgICAs
IG1fc2NyaXB0RGlhbG9nQ29uZmlybWVkKHRydWUpCisgICAgICAgICwgbV9hbGxvd1Blcm1pc3Np
b25SZXF1ZXN0cyhmYWxzZSkKKyAgICAgICAgLCBtX21vdXNlVGFyZ2V0TW9kaWZpZXJzKDApCisg
ICAgeworICAgICAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2phdmFzY3JpcHRfY2FuX29wZW5fd2lu
ZG93c19hdXRvbWF0aWNhbGx5KHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3MobV93ZWJWaWV3
KSwgVFJVRSk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAiY3JlYXRlIiwg
R19DQUxMQkFDSyh2aWV3Q3JlYXRlQ2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgZ19zaWduYWxf
Y29ubmVjdChtX3dlYlZpZXcsICJzY3JpcHQtZGlhbG9nIiwgR19DQUxMQkFDSyhzY3JpcHREaWFs
b2cpLCB0aGlzKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJtb3VzZS10
YXJnZXQtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sobW91c2VUYXJnZXRDaGFuZ2VkKSwgdGhpcyk7Cisg
ICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAicGVybWlzc2lvbi1yZXF1ZXN0Iiwg
R19DQUxMQkFDSyhwZXJtaXNzaW9uUmVxdWVzdGVkKSwgdGhpcyk7CisgICAgfQorCisgICAgflVJ
Q2xpZW50VGVzdCgpCisgICAgeworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0
X21hdGNoZWQobV93ZWJWaWV3LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlz
KTsKKyAgICB9CisKKyAgICB2b2lkIHdhaXRVbnRpbE1haW5Mb29wRmluaXNoZXMoKQorICAgIHsK
KyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIHZvaWQg
c2V0RXhwZWN0ZWRXaW5kb3dQcm9wZXJ0aWVzKGNvbnN0IFdpbmRvd1Byb3BlcnRpZXMmIHdpbmRv
d1Byb3BlcnRpZXMpCisgICAgeworICAgICAgICBtX3dpbmRvd1Byb3BlcnRpZXMgPSB3aW5kb3dQ
cm9wZXJ0aWVzOworICAgIH0KKworICAgIFdlYktpdEhpdFRlc3RSZXN1bHQqIG1vdmVNb3VzZUFu
ZFdhaXRVbnRpbE1vdXNlVGFyZ2V0Q2hhbmdlZChpbnQgeCwgaW50IHksIHVuc2lnbmVkIG1vdXNl
TW9kaWZpZXJzID0gMCkKKyAgICB7CisgICAgICAgIG1vdXNlTW92ZVRvKHgsIHksIG1vdXNlTW9k
aWZpZXJzKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgICAgICBy
ZXR1cm4gbV9tb3VzZVRhcmdldEhpdFRlc3RSZXN1bHQuZ2V0KCk7CisgICAgfQorCisgICAgdmly
dHVhbCBHdGtXaWRnZXQqIHZpZXdDcmVhdGUoV2ViS2l0V2ViVmlldyogd2ViVmlldykKKyAgICB7
CisgICAgICAgIGdfYXNzZXJ0KHdlYlZpZXcgPT0gbV93ZWJWaWV3KTsKKworICAgICAgICBHdGtX
aWRnZXQqIG5ld1dlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3X3dpdGhfY29udGV4dCh3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQod2ViVmlldykpOworICAgICAgICBnX29iamVjdF9yZWZf
c2luayhuZXdXZWJWaWV3KTsKKworICAgICAgICBtX3dlYlZpZXdFdmVudHMuYXBwZW5kKENyZWF0
ZSk7CisKKyAgICAgICAgV2ViS2l0V2luZG93UHJvcGVydGllcyogd2luZG93UHJvcGVydGllcyA9
IHdlYmtpdF93ZWJfdmlld19nZXRfd2luZG93X3Byb3BlcnRpZXMoV0VCS0lUX1dFQl9WSUVXKG5l
d1dlYlZpZXcpKTsKKyAgICAgICAgZ19hc3NlcnQod2luZG93UHJvcGVydGllcyk7CisgICAgICAg
IGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1Qod2luZG93UHJv
cGVydGllcykpOworICAgICAgICBtX3dpbmRvd1Byb3BlcnRpZXNDaGFuZ2VkLmNsZWFyKCk7CisK
KyAgICAgICAgZ19zaWduYWxfY29ubmVjdCh3aW5kb3dQcm9wZXJ0aWVzLCAibm90aWZ5IiwgR19D
QUxMQkFDSyh3aW5kb3dQcm9wZXJ0aWVzTm90aWZ5Q2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAg
Z19zaWduYWxfY29ubmVjdChuZXdXZWJWaWV3LCAicmVhZHktdG8tc2hvdyIsIEdfQ0FMTEJBQ0so
dmlld1JlYWR5VG9TaG93Q2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVj
dChuZXdXZWJWaWV3LCAiY2xvc2UiLCBHX0NBTExCQUNLKHZpZXdDbG9zZUNhbGxiYWNrKSwgdGhp
cyk7CisKKyAgICAgICAgcmV0dXJuIG5ld1dlYlZpZXc7CisgICAgfQorCisgICAgdmlydHVhbCB2
b2lkIHZpZXdSZWFkeVRvU2hvdyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQorICAgIHsKKyAgICAg
ICAgZ19hc3NlcnQod2ViVmlldyAhPSBtX3dlYlZpZXcpOworCisgICAgICAgIFdlYktpdFdpbmRv
d1Byb3BlcnRpZXMqIHdpbmRvd1Byb3BlcnRpZXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRv
d19wcm9wZXJ0aWVzKHdlYlZpZXcpOworICAgICAgICBnX2Fzc2VydCh3aW5kb3dQcm9wZXJ0aWVz
KTsKKyAgICAgICAgaWYgKCFtX3dpbmRvd1Byb3BlcnRpZXMuaXNOdWxsKCkpCisgICAgICAgICAg
ICBXaW5kb3dQcm9wZXJ0aWVzKHdpbmRvd1Byb3BlcnRpZXMpLmFzc2VydEVxdWFsKG1fd2luZG93
UHJvcGVydGllcyk7CisKKyAgICAgICAgbV93ZWJWaWV3RXZlbnRzLmFwcGVuZChSZWFkeVRvU2hv
dyk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHZpZXdDbG9zZShXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3KQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQod2ViVmlldyAhPSBtX3dlYlZpZXcpOwor
CisgICAgICAgIG1fd2ViVmlld0V2ZW50cy5hcHBlbmQoQ2xvc2UpOworICAgICAgICBnX29iamVj
dF91bnJlZih3ZWJWaWV3KTsKKworICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3Ap
OworICAgIH0KKworICAgIFZlY3RvcjxXZWJWaWV3RXZlbnRzPiBtX3dlYlZpZXdFdmVudHM7Cisg
ICAgV2ViS2l0U2NyaXB0RGlhbG9nVHlwZSBtX3NjcmlwdERpYWxvZ1R5cGU7CisgICAgYm9vbCBt
X3NjcmlwdERpYWxvZ0NvbmZpcm1lZDsKKyAgICBib29sIG1fYWxsb3dQZXJtaXNzaW9uUmVxdWVz
dHM7CisgICAgV2luZG93UHJvcGVydGllcyBtX3dpbmRvd1Byb3BlcnRpZXM7CisgICAgSGFzaFNl
dDxXVEY6OlN0cmluZz4gbV93aW5kb3dQcm9wZXJ0aWVzQ2hhbmdlZDsKKyAgICBHUmVmUHRyPFdl
YktpdEhpdFRlc3RSZXN1bHQ+IG1fbW91c2VUYXJnZXRIaXRUZXN0UmVzdWx0OworICAgIHVuc2ln
bmVkIG1fbW91c2VUYXJnZXRNb2RpZmllcnM7Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmll
d0NyZWF0ZVJlYWR5Q2xvc2UoVUlDbGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQorewor
ICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keSBvbkxvYWQ9XCJ3aW5kb3cub3BlbigpLmNs
b3NlKCk7XCI+PC9odG1sPiIsIDApOworICAgIHRlc3QtPndhaXRVbnRpbE1haW5Mb29wRmluaXNo
ZXMoKTsKKworICAgIFZlY3RvcjxVSUNsaWVudFRlc3Q6OldlYlZpZXdFdmVudHM+JiBldmVudHMg
PSB0ZXN0LT5tX3dlYlZpZXdFdmVudHM7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXpl
KCksID09LCAzKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgVUlDbGllbnRU
ZXN0OjpDcmVhdGUpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBVSUNsaWVu
dFRlc3Q6OlJlYWR5VG9TaG93KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwg
VUlDbGllbnRUZXN0OjpDbG9zZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBjaGVja01pbWVUeXBl
Rm9yRmlsdGVyKEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciwgY29uc3QgZ2NoYXIqIG1pbWVUeXBlKQor
eworICAgIEd0a0ZpbGVGaWx0ZXJJbmZvIGZpbHRlckluZm87CisgICAgZmlsdGVySW5mby5jb250
YWlucyA9IEdUS19GSUxFX0ZJTFRFUl9NSU1FX1RZUEU7CisgICAgZmlsdGVySW5mby5taW1lX3R5
cGUgPSBtaW1lVHlwZTsKKyAgICByZXR1cm4gZ3RrX2ZpbGVfZmlsdGVyX2ZpbHRlcihmaWx0ZXIs
ICZmaWx0ZXJJbmZvKTsKK30KKworY2xhc3MgTW9kYWxEaWFsb2dzVGVzdDogcHVibGljIFVJQ2xp
ZW50VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShNb2RhbERpYWxv
Z3NUZXN0KTsKKworICAgIHN0YXRpYyB2b2lkIGRpYWxvZ1J1bkFzTW9kYWxDYWxsYmFjayhXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3LCBNb2RhbERpYWxvZ3NUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAg
ICAgZ19hc3NlcnQod2ViVmlldyAhPSB0ZXN0LT5tX3dlYlZpZXcpOworICAgICAgICB0ZXN0LT5t
X3dlYlZpZXdFdmVudHMuYXBwZW5kKFJ1bkFzTW9kYWwpOworICAgIH0KKworICAgIEd0a1dpZGdl
dCogdmlld0NyZWF0ZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQorICAgIHsKKyAgICAgICAgZ19h
c3NlcnQod2ViVmlldyA9PSBtX3dlYlZpZXcpOworCisgICAgICAgIEd0a1dpZGdldCogbmV3V2Vi
VmlldyA9IFVJQ2xpZW50VGVzdDo6dmlld0NyZWF0ZSh3ZWJWaWV3KTsKKyAgICAgICAgZ19zaWdu
YWxfY29ubmVjdChuZXdXZWJWaWV3LCAicnVuLWFzLW1vZGFsIiwgR19DQUxMQkFDSyhkaWFsb2dS
dW5Bc01vZGFsQ2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgcmV0dXJuIG5ld1dlYlZpZXc7Cisg
ICAgfQorCisgICAgdm9pZCB2aWV3UmVhZHlUb1Nob3coV2ViS2l0V2ViVmlldyogd2ViVmlldykK
KyAgICB7CisgICAgICAgIGdfYXNzZXJ0KHdlYlZpZXcgIT0gbV93ZWJWaWV3KTsKKyAgICAgICAg
bV93ZWJWaWV3RXZlbnRzLmFwcGVuZChSZWFkeVRvU2hvdyk7CisgICAgfQorfTsKKworc3RhdGlj
IHZvaWQgdGVzdFdlYlZpZXdBbGxvd01vZGFsRGlhbG9ncyhNb2RhbERpYWxvZ3NUZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQoreworICAgIFdlYktpdFNldHRpbmdzKiBzZXR0aW5ncyA9IHdlYmtp
dF93ZWJfdmlld19nZXRfc2V0dGluZ3ModGVzdC0+bV93ZWJWaWV3KTsKKyAgICB3ZWJraXRfc2V0
dGluZ3Nfc2V0X2FsbG93X21vZGFsX2RpYWxvZ3Moc2V0dGluZ3MsIFRSVUUpOworCisgICAgdGVz
dC0+bG9hZEh0bWwoIjxodG1sPjxib2R5IG9ubG9hZD1cIndpbmRvdy5zaG93TW9kYWxEaWFsb2co
J2RhdGE6dGV4dC9odG1sLDxodG1sPjxib2R5Lz48c2NyaXB0PndpbmRvdy5jbG9zZSgpOzwvc2Ny
aXB0PjwvaHRtbD4nKVwiPjwvYm9keT48L2h0bWw+IiwgMCk7CisgICAgdGVzdC0+d2FpdFVudGls
TWFpbkxvb3BGaW5pc2hlcygpOworCisgICAgVmVjdG9yPFVJQ2xpZW50VGVzdDo6V2ViVmlld0V2
ZW50cz4mIGV2ZW50cyA9IHRlc3QtPm1fd2ViVmlld0V2ZW50czsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoZXZlbnRzLnNpemUoKSwgPT0sIDQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0s
ID09LCBVSUNsaWVudFRlc3Q6OkNyZWF0ZSk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sx
XSwgPT0sIFVJQ2xpZW50VGVzdDo6UmVhZHlUb1Nob3cpOworICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHNbMl0sID09LCBVSUNsaWVudFRlc3Q6OlJ1bkFzTW9kYWwpOworICAgIGdfYXNzZXJ0X2Nt
cGludChldmVudHNbM10sID09LCBVSUNsaWVudFRlc3Q6OkNsb3NlKTsKK30KKworc3RhdGljIHZv
aWQgdGVzdFdlYlZpZXdEaXNhbGxvd01vZGFsRGlhbG9ncyhNb2RhbERpYWxvZ3NUZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQoreworICAgIFdlYktpdFNldHRpbmdzKiBzZXR0aW5ncyA9IHdlYmtp
dF93ZWJfdmlld19nZXRfc2V0dGluZ3ModGVzdC0+bV93ZWJWaWV3KTsKKyAgICB3ZWJraXRfc2V0
dGluZ3Nfc2V0X2FsbG93X21vZGFsX2RpYWxvZ3Moc2V0dGluZ3MsIEZBTFNFKTsKKworICAgIHRl
c3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keSBvbmxvYWQ9XCJ3aW5kb3cuc2hvd01vZGFsRGlhbG9n
KCdkYXRhOnRleHQvaHRtbCw8aHRtbD48Ym9keS8+PHNjcmlwdD53aW5kb3cuY2xvc2UoKTs8L3Nj
cmlwdD48L2h0bWw+JylcIj48L2JvZHk+PC9odG1sPiIsIDApOworICAgIC8vIFdlIG5lZWQgdG8g
dXNlIGEgdGltZW91dCBoZXJlIGJlY2F1c2UgdGhlIHZpZXdDbG9zZSgpIGZ1bmN0aW9uCisgICAg
Ly8gd29uJ3QgZXZlciBiZSBjYWxsZWQgYXMgdGhlIGRpYWxvZyB3b24ndCBiZSBjcmVhdGVkLgor
ICAgIHRlc3QtPndhaXQoMSk7CisKKyAgICBWZWN0b3I8VUlDbGllbnRUZXN0OjpXZWJWaWV3RXZl
bnRzPiYgZXZlbnRzID0gdGVzdC0+bV93ZWJWaWV3RXZlbnRzOworICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHMuc2l6ZSgpLCA9PSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3SmF2
YVNjcmlwdERpYWxvZ3MoVUlDbGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAg
IHN0YXRpYyBjb25zdCBjaGFyKiBodG1sT25Mb2FkRm9ybWF0ID0gIjxodG1sPjxib2R5IG9uTG9h
ZD1cIiVzXCI+PC9ib2R5PjwvaHRtbD4iOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBqc0FsZXJ0
Rm9ybWF0ID0gImFsZXJ0KCclcycpIjsKKyAgICBzdGF0aWMgY29uc3QgY2hhcioganNDb25maXJt
Rm9ybWF0ID0gImRvIHsgY29uZmlybWVkID0gY29uZmlybSgnJXMnKTsgfSB3aGlsZSAoIWNvbmZp
cm1lZCk7IGFsZXJ0KCdjb25maXJtZWQnKTsiOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBqc1By
b21wdEZvcm1hdCA9ICJhbGVydChwcm9tcHQoJyVzJywgJ2RlZmF1bHQnKSk7IjsKKworICAgIHRl
c3QtPm1fc2NyaXB0RGlhbG9nVHlwZSA9IFdFQktJVF9TQ1JJUFRfRElBTE9HX0FMRVJUOworICAg
IEdPd25QdHI8Y2hhcj4gYWxlcnREaWFsb2dNZXNzYWdlKGdfc3RyZHVwX3ByaW50Zihqc0FsZXJ0
Rm9ybWF0LCBrQWxlcnREaWFsb2dNZXNzYWdlKSk7CisgICAgR093blB0cjxjaGFyPiBhbGVydEhU
TUwoZ19zdHJkdXBfcHJpbnRmKGh0bWxPbkxvYWRGb3JtYXQsIGFsZXJ0RGlhbG9nTWVzc2FnZS5n
ZXQoKSkpOworICAgIHRlc3QtPmxvYWRIdG1sKGFsZXJ0SFRNTC5nZXQoKSwgMCk7CisgICAgdGVz
dC0+d2FpdFVudGlsTWFpbkxvb3BGaW5pc2hlcygpOworCisgICAgdGVzdC0+bV9zY3JpcHREaWFs
b2dUeXBlID0gV0VCS0lUX1NDUklQVF9ESUFMT0dfQ09ORklSTTsKKyAgICBHT3duUHRyPGNoYXI+
IGNvbmZpcm1EaWFsb2dNZXNzYWdlKGdfc3RyZHVwX3ByaW50Zihqc0NvbmZpcm1Gb3JtYXQsIGtD
b25maXJtRGlhbG9nTWVzc2FnZSkpOworICAgIEdPd25QdHI8Y2hhcj4gY29uZmlybUhUTUwoZ19z
dHJkdXBfcHJpbnRmKGh0bWxPbkxvYWRGb3JtYXQsIGNvbmZpcm1EaWFsb2dNZXNzYWdlLmdldCgp
KSk7CisgICAgdGVzdC0+bG9hZEh0bWwoY29uZmlybUhUTUwuZ2V0KCksIDApOworICAgIHRlc3Qt
PndhaXRVbnRpbE1haW5Mb29wRmluaXNoZXMoKTsKKworICAgIHRlc3QtPm1fc2NyaXB0RGlhbG9n
VHlwZSA9IFdFQktJVF9TQ1JJUFRfRElBTE9HX1BST01QVDsKKyAgICBHT3duUHRyPGNoYXI+IHBy
b21wdERpYWxvZ01lc3NhZ2UoZ19zdHJkdXBfcHJpbnRmKGpzUHJvbXB0Rm9ybWF0LCBrUHJvbXB0
RGlhbG9nTWVzc2FnZSkpOworICAgIEdPd25QdHI8Y2hhcj4gcHJvbXB0SFRNTChnX3N0cmR1cF9w
cmludGYoaHRtbE9uTG9hZEZvcm1hdCwgcHJvbXB0RGlhbG9nTWVzc2FnZS5nZXQoKSkpOworICAg
IHRlc3QtPmxvYWRIdG1sKHByb21wdEhUTUwuZ2V0KCksIDApOworICAgIHRlc3QtPndhaXRVbnRp
bE1haW5Mb29wRmluaXNoZXMoKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdXaW5kb3dQ
cm9wZXJ0aWVzKFVJQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBzdGF0
aWMgY29uc3QgY2hhciogd2luZG93UHJvcnBlcnRpZXNTdHJpbmcgPSAibGVmdD0xMDAsdG9wPTE1
MCx3aWR0aD00MDAsaGVpZ2h0PTQwMCxsb2NhdGlvbj1ubyxtZW51YmFyPW5vLHN0YXR1cz1ubyx0
b29sYmFyPW5vLHNjcm9sbGJhcnM9bm8iOworICAgIEdka1JlY3RhbmdsZSBnZW9tZXRyeSA9IHsg
MTAwLCAxNTAsIDQwMCwgNDAwIH07CisgICAgdGVzdC0+c2V0RXhwZWN0ZWRXaW5kb3dQcm9wZXJ0
aWVzKFVJQ2xpZW50VGVzdDo6V2luZG93UHJvcGVydGllcygmZ2VvbWV0cnksIGZhbHNlLCBmYWxz
ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UpKTsKKworICAgIEdPd25QdHI8Y2hh
cj4gaHRtbFN0cmluZyhnX3N0cmR1cF9wcmludGYoIjxodG1sPjxib2R5IG9uTG9hZD1cIndpbmRv
dy5vcGVuKCcnLCAnJywgJyVzJykuY2xvc2UoKTtcIj48L2JvZHk+PC9odG1sPiIsIHdpbmRvd1By
b3JwZXJ0aWVzU3RyaW5nKSk7CisgICAgdGVzdC0+bG9hZEh0bWwoaHRtbFN0cmluZy5nZXQoKSwg
MCk7CisgICAgdGVzdC0+d2FpdFVudGlsTWFpbkxvb3BGaW5pc2hlcygpOworCisgICAgc3RhdGlj
IGNvbnN0IGNoYXIqIHByb3BlcnRpZXNDaGFuZ2VkW10gPSB7CisgICAgICAgICJnZW9tZXRyeSIs
ICJsb2NhdGlvbmJhci12aXNpYmxlIiwgIm1lbnViYXItdmlzaWJsZSIsICJzdGF0dXNiYXItdmlz
aWJsZSIsICJ0b29sYmFyLXZpc2libGUiLCAic2Nyb2xsYmFycy12aXNpYmxlIgorICAgIH07Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMocHJvcGVydGllc0NoYW5nZWQp
OyArK2kpCisgICAgICAgIGdfYXNzZXJ0KHRlc3QtPm1fd2luZG93UHJvcGVydGllc0NoYW5nZWQu
Y29udGFpbnMocHJvcGVydGllc0NoYW5nZWRbaV0pKTsKKworICAgIFZlY3RvcjxVSUNsaWVudFRl
c3Q6OldlYlZpZXdFdmVudHM+JiBldmVudHMgPSB0ZXN0LT5tX3dlYlZpZXdFdmVudHM7CisgICAg
Z19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAzKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoZXZlbnRzWzBdLCA9PSwgVUlDbGllbnRUZXN0OjpDcmVhdGUpOworICAgIGdfYXNzZXJ0X2Nt
cGludChldmVudHNbMV0sID09LCBVSUNsaWVudFRlc3Q6OlJlYWR5VG9TaG93KTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgVUlDbGllbnRUZXN0OjpDbG9zZSk7Cit9CisKK3N0
YXRpYyB2b2lkIHRlc3RXZWJWaWV3TW91c2VUYXJnZXQoVUlDbGllbnRUZXN0KiB0ZXN0LCBnY29u
c3Rwb2ludGVyKQoreworICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZChH
VEtfV0lORE9XX1RPUExFVkVMKTsKKworICAgIGNvbnN0IGNoYXIqIGxpbmtzSG92ZXJlZEhUTUwg
PQorICAgICAgICAiPGh0bWw+PGJvZHk+IgorICAgICAgICAiIDxhIHN0eWxlPSdwb3NpdGlvbjph
YnNvbHV0ZTsgbGVmdDoxOyB0b3A6MScgaHJlZj0naHR0cDovL3d3dy53ZWJraXRndGsub3JnJyB0
aXRsZT0nV2ViS2l0R1RLKyBUaXRsZSc+V2ViS2l0R1RLKyBXZWJzaXRlPC9hPiIKKyAgICAgICAg
IiA8aW1nIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6MTAnIHNyYz0nMHhk
ZWFkYmVlZicgd2lkdGg9NSBoZWlnaHQ9NT48L2ltZz4iCisgICAgICAgICIgPGEgc3R5bGU9J3Bv
c2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRvcDoyMCcgaHJlZj0naHR0cDovL3d3dy53ZWJraXRn
dGsub3JnL2xvZ28nIHRpdGxlPSdXZWJLaXRHVEsrIExvZ28nPjxpbWcgc3JjPScweGRlYWRiZWVm
JyB3aWR0aD01IGhlaWdodD01PjwvaW1nPjwvYT4iCisgICAgICAgICIgPGlucHV0IHN0eWxlPSdw
b3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6MzAnIHNpemU9JzEwJz48L2lucHV0PiIKKyAg
ICAgICAgIiA8ZGl2IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6NTA7IHdp
ZHRoOjMwOyBoZWlnaHQ6MzA7IG92ZXJmbG93OnNjcm9sbCc+Jm5ic3A7PC9kaXY+IgorICAgICAg
ICAiIDx2aWRlbyBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjEwMCcgd2lk
dGg9JzMwMCcgaGVpZ2h0PSczMDAnIGNvbnRyb2xzPSdjb250cm9scycgcHJlbG9hZD0nbm9uZSc+
PHNvdXJjZSBzcmM9J21vdmllLm9nZycgdHlwZT0ndmlkZW8vb2dnJyAvPjwvdmlkZW8+IgorICAg
ICAgICAiPC9ib2R5PjwvaHRtbD4iOworCisgICAgdGVzdC0+bG9hZEh0bWwobGlua3NIb3ZlcmVk
SFRNTCwgImZpbGU6Ly8vIik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisK
KyAgICAvLyBNb3ZlIG92ZXIgbGluay4KKyAgICBXZWJLaXRIaXRUZXN0UmVzdWx0KiBoaXRUZXN0
UmVzdWx0ID0gdGVzdC0+bW92ZU1vdXNlQW5kV2FpdFVudGlsTW91c2VUYXJnZXRDaGFuZ2VkKDEs
IDEpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5r
KGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9j
b250ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hp
dF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fz
c2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RS
ZXN1bHQpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRf
bGlua191cmkoaGl0VGVzdFJlc3VsdCksID09LCAiaHR0cDovL3d3dy53ZWJraXRndGsub3JnLyIp
OworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9saW5rX3Rp
dGxlKGhpdFRlc3RSZXN1bHQpLCA9PSwgIldlYktpdEdUSysgVGl0bGUiKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfbGlua19sYWJlbChoaXRUZXN0UmVz
dWx0KSwgPT0sICJXZWJLaXRHVEsrIFdlYnNpdGUiKTsKKyAgICBnX2Fzc2VydCghdGVzdC0+bV9t
b3VzZVRhcmdldE1vZGlmaWVycyk7CisKKyAgICAvLyBNb3ZlIG91dCBvZiB0aGUgbGluay4KKyAg
ICBoaXRUZXN0UmVzdWx0ID0gdGVzdC0+bW92ZU1vdXNlQW5kV2FpdFVudGlsTW91c2VUYXJnZXRD
aGFuZ2VkKDAsIDApOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRl
eHRfaXNfbGluayhoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVz
dF9yZXN1bHRfY29udGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQo
IXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7
CisgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19lZGl0YWJs
ZShoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQoIXRlc3QtPm1fbW91c2VUYXJnZXRNb2Rp
ZmllcnMpOworCisgICAgLy8gTW92ZSBvdmVyIGltYWdlIHdpdGggR0RLX0NPTlRST0xfTUFTSy4K
KyAgICBoaXRUZXN0UmVzdWx0ID0gdGVzdC0+bW92ZU1vdXNlQW5kV2FpdFVudGlsTW91c2VUYXJn
ZXRDaGFuZ2VkKDEsIDEwLCBHREtfQ09OVFJPTF9NQVNLKTsKKyAgICBnX2Fzc2VydCghd2Via2l0
X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xpbmsoaGl0VGVzdFJlc3VsdCkpOworICAgIGdf
YXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFnZShoaXRUZXN0UmVz
dWx0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19t
ZWRpYShoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1
bHRfY29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQoIXdl
YmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19zY3JvbGxiYXIoaGl0VGVzdFJlc3VsdCkp
OworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9pbWFnZV91
cmkoaGl0VGVzdFJlc3VsdCksID09LCAiZmlsZTovLy8weGRlYWRiZWVmIik7CisgICAgZ19hc3Nl
cnQodGVzdC0+bV9tb3VzZVRhcmdldE1vZGlmaWVycyAmIEdES19DT05UUk9MX01BU0spOworCisg
ICAgLy8gTW92ZSBvdmVyIGltYWdlIGxpbmsuCisgICAgaGl0VGVzdFJlc3VsdCA9IHRlc3QtPm1v
dmVNb3VzZUFuZFdhaXRVbnRpbE1vdXNlVGFyZ2V0Q2hhbmdlZCgxLCAyMCk7CisgICAgZ19hc3Nl
cnQod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xpbmsoaGl0VGVzdFJlc3VsdCkp
OworICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFnZSho
aXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29u
dGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRf
dGVzdF9yZXN1bHRfY29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19h
c3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19zY3JvbGxiYXIoaGl0VGVz
dFJlc3VsdCkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dl
dF9saW5rX3VyaShoaXRUZXN0UmVzdWx0KSwgPT0sICJodHRwOi8vd3d3LndlYmtpdGd0ay5vcmcv
bG9nbyIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9p
bWFnZV91cmkoaGl0VGVzdFJlc3VsdCksID09LCAiZmlsZTovLy8weGRlYWRiZWVmIik7CisgICAg
Z19hc3NlcnRfY21wc3RyKHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2xpbmtfdGl0bGUoaGl0
VGVzdFJlc3VsdCksID09LCAiV2ViS2l0R1RLKyBMb2dvIik7CisgICAgZ19hc3NlcnQoIXdlYmtp
dF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2xpbmtfbGFiZWwoaGl0VGVzdFJlc3VsdCkpOworICAgIGdf
YXNzZXJ0KCF0ZXN0LT5tX21vdXNlVGFyZ2V0TW9kaWZpZXJzKTsKKworICAgIC8vIE1vdmUgb3Zl
ciBtZWRpYS4KKyAgICBoaXRUZXN0UmVzdWx0ID0gdGVzdC0+bW92ZU1vdXNlQW5kV2FpdFVudGls
TW91c2VUYXJnZXRDaGFuZ2VkKDEsIDEwMCk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVz
dF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCgh
d2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQpKTsK
KyAgICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbWVkaWEoaGl0
VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRl
eHRfaXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0
X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfc2Nyb2xsYmFyKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBn
X2Fzc2VydF9jbXBzdHIod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfbWVkaWFfdXJpKGhpdFRl
c3RSZXN1bHQpLCA9PSwgImZpbGU6Ly8vbW92aWUub2dnIik7CisgICAgZ19hc3NlcnQoIXRlc3Qt
Pm1fbW91c2VUYXJnZXRNb2RpZmllcnMpOworCisgICAgLy8gTW92ZXIgb3ZlciBpbnB1dC4KKyAg
ICBoaXRUZXN0UmVzdWx0ID0gdGVzdC0+bW92ZU1vdXNlQW5kV2FpdFVudGlsTW91c2VUYXJnZXRD
aGFuZ2VkKDUsIDM1KTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250
ZXh0X2lzX2xpbmsoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rl
c3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0
KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbWVkaWEoaGl0VGVzdFJlc3VsdCkp
OworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfc2Nyb2xs
YmFyKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0
X2NvbnRleHRfaXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF0ZXN0
LT5tX21vdXNlVGFyZ2V0TW9kaWZpZXJzKTsKKworICAgIC8vIE1vdmUgb3ZlciBzY3JvbGxiYXIu
CisgICAgaGl0VGVzdFJlc3VsdCA9IHRlc3QtPm1vdmVNb3VzZUFuZFdhaXRVbnRpbE1vdXNlVGFy
Z2V0Q2hhbmdlZCg1LCA3NSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRf
Y29udGV4dF9pc19saW5rKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hp
dF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fz
c2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1
bHQpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2Vk
aXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVz
dWx0X2NvbnRleHRfaXNfc2Nyb2xsYmFyKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCgh
dGVzdC0+bV9tb3VzZVRhcmdldE1vZGlmaWVycyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJW
aWV3UGVybWlzc2lvblJlcXVlc3RzKFVJQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikK
K3sKKyAgICAvLyBTb21lIHZlcnNpb25zIG9mIGdlb2NsdWUgZ2l2ZSBhIHJ1bnRpbWUgd2Fybmlu
ZyBiZWNhdXNlIGl0IHRyaWVzCisgICAgLy8gdG8gcmVnaXN0ZXIgdGhlIGVycm9yIHF1YXJrIHR3
aWNlLiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5ODU4Lgor
ICAgIC8vIE1ha2Ugd2FybmluZ3Mgbm9uLWZhdGFsIGZvciB0aGlzIHRlc3QgdG8gbWFrZSBpdCBw
YXNzLgorICAgIHRlc3QtPnJlbW92ZUxvZ0ZhdGFsRmxhZyhHX0xPR19MRVZFTF9XQVJOSU5HKTsK
KyAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKKyAgICBzdGF0aWMg
Y29uc3QgY2hhciogZ2VvbG9jYXRpb25SZXF1ZXN0SFRNTCA9CisgICAgICAgICI8aHRtbD4iCisg
ICAgICAgICIgIDxzY3JpcHQ+IgorICAgICAgICAiICBmdW5jdGlvbiBydW5UZXN0KCkiCisgICAg
ICAgICIgIHsiCisgICAgICAgICIgICAgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQ
b3NpdGlvbihmdW5jdGlvbihwKSB7IGRvY3VtZW50LnRpdGxlID0gXCJPS1wiIH0sIgorICAgICAg
ICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24o
ZSkgeyBkb2N1bWVudC50aXRsZSA9IGUuY29kZSB9KTsiCisgICAgICAgICIgIH0iCisgICAgICAg
ICIgIDwvc2NyaXB0PiIKKyAgICAgICAgIiAgPGJvZHkgb25sb2FkPSdydW5UZXN0KCk7Jz48L2Jv
ZHk+IgorICAgICAgICAiPC9odG1sPiI7CisKKyAgICAvLyBUZXN0IGRlbnlpbmcgYSBwZXJtaXNz
aW9uIHJlcXVlc3QuCisgICAgdGVzdC0+bV9hbGxvd1Blcm1pc3Npb25SZXF1ZXN0cyA9IGZhbHNl
OworICAgIHRlc3QtPmxvYWRIdG1sKGdlb2xvY2F0aW9uUmVxdWVzdEhUTUwsIDApOworICAgIHRl
c3QtPndhaXRVbnRpbFRpdGxlQ2hhbmdlZCgpOworCisgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBH
ZW9sb2NhdGlvbiBBUEkgc3BlY2lmaWNhdGlvbiwgJzEnIGlzIHRoZQorICAgIC8vIGVycm9yIGNv
ZGUgcmV0dXJuZWQgZm9yIHRoZSBQRVJNSVNTSU9OX0RFTklFRCBlcnJvci4KKyAgICAvLyBodHRw
Oi8vZGV2LnczLm9yZy9nZW8vYXBpL3NwZWMtc291cmNlLmh0bWwjcG9zaXRpb25fZXJyb3JfaW50
ZXJmYWNlCisgICAgY29uc3QgZ2NoYXIqIHJlc3VsdCA9IHdlYmtpdF93ZWJfdmlld19nZXRfdGl0
bGUodGVzdC0+bV93ZWJWaWV3KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIocmVzdWx0LCA9PSwgIjEi
KTsKKworICAgIC8vIFRlc3QgYWxsb3dpbmcgYSBwZXJtaXNzaW9uIHJlcXVlc3QuCisgICAgdGVz
dC0+bV9hbGxvd1Blcm1pc3Npb25SZXF1ZXN0cyA9IHRydWU7CisgICAgdGVzdC0+bG9hZEh0bWwo
Z2VvbG9jYXRpb25SZXF1ZXN0SFRNTCwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsVGl0bGVDaGFu
Z2VkKCk7CisKKyAgICAvLyBDaGVjayB0aGF0IHdlIGRpZCBub3QgZ2V0IHRoZSBQRVJNSVNTSU9O
X0RFTklFRCBlcnJvciBub3cuCisgICAgcmVzdWx0ID0gd2Via2l0X3dlYl92aWV3X2dldF90aXRs
ZSh0ZXN0LT5tX3dlYlZpZXcpOworICAgIGdfYXNzZXJ0X2NtcHN0cihyZXN1bHQsICE9LCAiMSIp
OworICAgIHRlc3QtPmFkZExvZ0ZhdGFsRmxhZyhHX0xPR19MRVZFTF9XQVJOSU5HKTsKK30KKwor
Y2xhc3MgRmlsZUNob29zZXJUZXN0OiBwdWJsaWMgVUlDbGllbnRUZXN0IHsKK3B1YmxpYzoKKyAg
ICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKEZpbGVDaG9vc2VyVGVzdCk7CisKKyAgICBGaWxlQ2hv
b3NlclRlc3QoKQorICAgIHsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJy
dW4tZmlsZS1jaG9vc2VyIiwgR19DQUxMQkFDSyhydW5GaWxlQ2hvb3NlckNhbGxiYWNrKSwgdGhp
cyk7CisgICAgfQorCisgICAgc3RhdGljIGdib29sZWFuIHJ1bkZpbGVDaG9vc2VyQ2FsbGJhY2so
V2ViS2l0V2ViVmlldyosIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCwgRmlsZUNo
b29zZXJUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+cnVuRmlsZUNob29zZXIocmVx
dWVzdCk7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKworICAgIHZvaWQgcnVuRmlsZUNo
b29zZXIoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0KQorICAgIHsKKyAgICAgICAg
YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChyZXF1ZXN0KSk7
CisgICAgICAgIG1fZmlsZUNob29zZXJSZXF1ZXN0ID0gcmVxdWVzdDsKKyAgICAgICAgZ19tYWlu
X2xvb3BfcXVpdChtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBXZWJLaXRGaWxlQ2hvb3NlclJl
cXVlc3QqIGNsaWNrTW91c2VCdXR0b25BbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0KGludCB4
LCBpbnQgeSkKKyAgICB7CisgICAgICAgIGNsaWNrTW91c2VCdXR0b24oeCwgeSk7CisgICAgICAg
IGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICAgICAgcmV0dXJuIG1fZmlsZUNob29z
ZXJSZXF1ZXN0LmdldCgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBHUmVmUHRyPFdlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdD4gbV9maWxlQ2hvb3NlclJlcXVlc3Q7Cit9OworCitzdGF0aWMgdm9p
ZCB0ZXN0V2ViVmlld0ZpbGVDaG9vc2VyUmVxdWVzdChGaWxlQ2hvb3NlclRlc3QqIHRlc3QsIGdj
b25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVk
KCk7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGZpbGVDaG9vc2VySFRNTEZvcm1hdCA9ICI8aHRt
bD48Ym9keT48aW5wdXQgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MDttYXJn
aW46MDtwYWRkaW5nOjAnIHR5cGU9J2ZpbGUnICVzLz48L2JvZHk+PC9odG1sPiI7CisKKyAgICAv
LyBNdWx0aXBsZSBzZWxlY3Rpb25zIG5vdCBhbGxvd2VkLCBubyBNSU1FIGZpbHRlcmluZy4KKyAg
ICBHT3duUHRyPGNoYXI+IHNpbXBsZUZpbGVVcGxvYWRIVE1MKGdfc3RyZHVwX3ByaW50ZihmaWxl
Q2hvb3NlckhUTUxGb3JtYXQsICIiKSk7CisgICAgdGVzdC0+bG9hZEh0bWwoc2ltcGxlRmlsZVVw
bG9hZEhUTUwuZ2V0KCksIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwor
ICAgIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogZmlsZUNob29zZXJSZXF1ZXN0ID0gdGVzdC0+
Y2xpY2tNb3VzZUJ1dHRvbkFuZFdhaXRGb3JGaWxlQ2hvb3NlclJlcXVlc3QoNSwgNSk7CisgICAg
Z19hc3NlcnQoIXdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxl
KGZpbGVDaG9vc2VyUmVxdWVzdCkpOworCisgICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBtaW1lVHlw
ZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMoZmlsZUNob29z
ZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghbWltZVR5cGVzKTsKKyAgICBHdGtGaWxlRmlsdGVy
KiBmaWx0ZXIgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmls
dGVyKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIWZpbHRlcik7CisgICAgY29u
c3QgZ2NoYXIqIGNvbnN0KiBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1
ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhmaWxlQ2hvb3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0
KCFzZWxlY3RlZEZpbGVzKTsKKyAgICB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2FuY2Vs
KGZpbGVDaG9vc2VyUmVxdWVzdCk7CisKKyAgICAvLyBNdWx0aXBsZSBzZWxlY3Rpb25zIGFsbG93
ZWQsIG5vIE1JTUUgZmlsdGVyaW5nLCBzb21lIHByZS1zZWxlY3RlZCBmaWxlcy4KKyAgICBHT3du
UHRyPGNoYXI+IG11bHRpcGxlU2VsZWN0aW9uRmlsZVVwbG9hZEhUTUwoZ19zdHJkdXBfcHJpbnRm
KGZpbGVDaG9vc2VySFRNTEZvcm1hdCwgIm11bHRpcGxlIikpOworICAgIHRlc3QtPmxvYWRIdG1s
KG11bHRpcGxlU2VsZWN0aW9uRmlsZVVwbG9hZEhUTUwuZ2V0KCksIDApOworICAgIHRlc3QtPndh
aXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIGZpbGVDaG9vc2VyUmVxdWVzdCA9IHRlc3QtPmNs
aWNrTW91c2VCdXR0b25BbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0KDUsIDUpOworICAgIGdf
YXNzZXJ0KHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxlKGZp
bGVDaG9vc2VyUmVxdWVzdCkpOworCisgICAgbWltZVR5cGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3Nl
cnQoIW1pbWVUeXBlcyk7CisgICAgZmlsdGVyID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X2dldF9taW1lX3R5cGVzX2ZpbHRlcihmaWxlQ2hvb3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0
KCFmaWx0ZXIpOworICAgIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVl
c3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQo
IXNlbGVjdGVkRmlsZXMpOworCisgICAgLy8gU2VsZWN0IHNvbWUgZmlsZXMuCisgICAgY29uc3Qg
Z2NoYXIqIGZpbGVzVG9TZWxlY3RbNF0gPSB7ICIvZm9vIiwgIi9mb28vYmFyIiwgIi9mb28vYmFy
L2JheiIsIDAgfTsKKyAgICB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rfc2VsZWN0X2ZpbGVz
KGZpbGVDaG9vc2VyUmVxdWVzdCwgZmlsZXNUb1NlbGVjdCk7CisKKyAgICAvLyBDaGVjayB0aGUg
ZmlsZXMgdGhhdCBoYXZlIGJlZW4ganVzdCBzZWxlY3RlZC4KKyAgICBzZWxlY3RlZEZpbGVzID0g
d2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhmaWxlQ2hvb3Nl
clJlcXVlc3QpOworICAgIGdfYXNzZXJ0KHNlbGVjdGVkRmlsZXMpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cihzZWxlY3RlZEZpbGVzWzBdLCA9PSwgIi9mb28iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIo
c2VsZWN0ZWRGaWxlc1sxXSwgPT0sICIvZm9vL2JhciIpOworICAgIGdfYXNzZXJ0X2NtcHN0cihz
ZWxlY3RlZEZpbGVzWzJdLCA9PSwgIi9mb28vYmFyL2JheiIpOworICAgIGdfYXNzZXJ0KCFzZWxl
Y3RlZEZpbGVzWzNdKTsKKworICAgIC8vIFBlcmZvcm0gYW5vdGhlciByZXF1ZXN0IHRvIGNoZWNr
IGlmIHRoZSBsaXN0IG9mIGZpbGVzIHNlbGVjdGVkCisgICAgLy8gaW4gdGhlIHByZXZpb3VzIHN0
ZXAgYXBwZWFycyBub3cgYXMgcGFydCBvZiB0aGUgbmV3IHJlcXVlc3QuCisgICAgZmlsZUNob29z
ZXJSZXF1ZXN0ID0gdGVzdC0+Y2xpY2tNb3VzZUJ1dHRvbkFuZFdhaXRGb3JGaWxlQ2hvb3NlclJl
cXVlc3QoNSwgNSk7CisgICAgc2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVx
dWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMoZmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2Vy
dChzZWxlY3RlZEZpbGVzKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1swXSwg
PT0sICIvZm9vIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMV0sID09LCAi
L2Zvby9iYXIiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1syXSwgPT0sICIv
Zm9vL2Jhci9iYXoiKTsKKyAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxlc1szXSk7CisgICAgd2Vi
a2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNlbChmaWxlQ2hvb3NlclJlcXVlc3QpOworCisg
ICAgLy8gTXVsdGlwbGUgc2VsZWN0aW9ucyBub3QgYWxsb3dlZCwgb25seSBhY2NlcHQgaW1hZ2Vz
LCBhdWRpbyBhbmQgdmlkZW8gZmlsZXMuLgorICAgIEdPd25QdHI8Y2hhcj4gbWltZUZpbHRlcmVk
RmlsZVVwbG9hZEhUTUwoZ19zdHJkdXBfcHJpbnRmKGZpbGVDaG9vc2VySFRNTEZvcm1hdCwgImFj
Y2VwdD0nYXVkaW8vKix2aWRlby8qLGltYWdlLyonIikpOworICAgIHRlc3QtPmxvYWRIdG1sKG1p
bWVGaWx0ZXJlZEZpbGVVcGxvYWRIVE1MLmdldCgpLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxM
b2FkRmluaXNoZWQoKTsKKyAgICBmaWxlQ2hvb3NlclJlcXVlc3QgPSB0ZXN0LT5jbGlja01vdXNl
QnV0dG9uQW5kV2FpdEZvckZpbGVDaG9vc2VyUmVxdWVzdCg1LCA1KTsKKyAgICBnX2Fzc2VydCgh
d2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RfbXVsdGlwbGUoZmlsZUNob29z
ZXJSZXF1ZXN0KSk7CisKKyAgICBtaW1lVHlwZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVl
c3RfZ2V0X21pbWVfdHlwZXMoZmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydChtaW1l
VHlwZXMpOworICAgIGdfYXNzZXJ0X2NtcHN0cihtaW1lVHlwZXNbMF0sID09LCAiYXVkaW8vKiIp
OworICAgIGdfYXNzZXJ0X2NtcHN0cihtaW1lVHlwZXNbMV0sID09LCAidmlkZW8vKiIpOworICAg
IGdfYXNzZXJ0X2NtcHN0cihtaW1lVHlwZXNbMl0sID09LCAiaW1hZ2UvKiIpOworICAgIGdfYXNz
ZXJ0KCFtaW1lVHlwZXNbM10pOworCisgICAgZmlsdGVyID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9y
ZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcihmaWxlQ2hvb3NlclJlcXVlc3QpOworICAgIGdf
YXNzZXJ0KEdUS19JU19GSUxFX0ZJTFRFUihmaWx0ZXIpKTsKKyAgICBnX2Fzc2VydChjaGVja01p
bWVUeXBlRm9yRmlsdGVyKGZpbHRlciwgImF1ZGlvLyoiKSk7CisgICAgZ19hc3NlcnQoY2hlY2tN
aW1lVHlwZUZvckZpbHRlcihmaWx0ZXIsICJ2aWRlby8qIikpOworICAgIGdfYXNzZXJ0KGNoZWNr
TWltZVR5cGVGb3JGaWx0ZXIoZmlsdGVyLCAiaW1hZ2UvKiIpKTsKKworICAgIHNlbGVjdGVkRmls
ZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKGZpbGVD
aG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIXNlbGVjdGVkRmlsZXMpOworICAgIHdlYmtp
dF9maWxlX2Nob29zZXJfcmVxdWVzdF9jYW5jZWwoZmlsZUNob29zZXJSZXF1ZXN0KTsKK30KKwor
dm9pZCBiZWZvcmVBbGwoKQoreworICAgIFVJQ2xpZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3
IiwgImNyZWF0ZS1yZWFkeS1jbG9zZSIsIHRlc3RXZWJWaWV3Q3JlYXRlUmVhZHlDbG9zZSk7Cisg
ICAgTW9kYWxEaWFsb2dzVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImFsbG93LW1vZGFsLWRp
YWxvZ3MiLCB0ZXN0V2ViVmlld0FsbG93TW9kYWxEaWFsb2dzKTsKKyAgICBNb2RhbERpYWxvZ3NU
ZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiZGlzYWxsb3ctbW9kYWwtZGlhbG9ncyIsIHRlc3RX
ZWJWaWV3RGlzYWxsb3dNb2RhbERpYWxvZ3MpOworICAgIFVJQ2xpZW50VGVzdDo6YWRkKCJXZWJL
aXRXZWJWaWV3IiwgImphdmFzY3JpcHQtZGlhbG9ncyIsIHRlc3RXZWJWaWV3SmF2YVNjcmlwdERp
YWxvZ3MpOworICAgIFVJQ2xpZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgIndpbmRvdy1w
cm9wZXJ0aWVzIiwgdGVzdFdlYlZpZXdXaW5kb3dQcm9wZXJ0aWVzKTsKKyAgICBVSUNsaWVudFRl
c3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJtb3VzZS10YXJnZXQiLCB0ZXN0V2ViVmlld01vdXNl
VGFyZ2V0KTsKKyAgICBVSUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJwZXJtaXNz
aW9uLXJlcXVlc3RzIiwgdGVzdFdlYlZpZXdQZXJtaXNzaW9uUmVxdWVzdHMpOworICAgIEZpbGVD
aG9vc2VyVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImZpbGUtY2hvb3Nlci1yZXF1ZXN0Iiwg
dGVzdFdlYlZpZXdGaWxlQ2hvb3NlclJlcXVlc3QpOworfQorCit2b2lkIGFmdGVyQWxsKCkKK3sK
K30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0
V2ViRXh0ZW5zaW9ucy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsv
VGVzdFdlYkV4dGVuc2lvbnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmIwM2M5ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdDJHdGsvVGVzdFdlYkV4dGVuc2lvbnMuY3BwCkBAIC0wLDAgKzEsMTk1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
bmNsdWRlICJXZWJLaXRUZXN0QnVzLmgiCisjaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKKyNpbmNs
dWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisKK3N0YXRpYyBXZWJLaXRUZXN0QnVzKiBidXM7
CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJFeHRlbnNpb25HZXRUaXRsZShXZWJWaWV3VGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGhlYWQ+PHRp
dGxlPldlYktpdEdUSysgV2ViIEV4dGVuc2lvbnMgVGVzdDwvdGl0bGU+PC9oZWFkPjxib2R5Pjwv
Ym9keT48L2h0bWw+IiwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisK
KyAgICBHUmVmUHRyPEdEQnVzUHJveHk+IHByb3h5ID0gYWRvcHRHUmVmKGJ1cy0+Y3JlYXRlUHJv
eHkoIm9yZy53ZWJraXQuZ3RrLldlYkV4dGVuc2lvblRlc3QiLAorICAgICAgICAiL29yZy93ZWJr
aXQvZ3RrL1dlYkV4dGVuc2lvblRlc3QiICwgIm9yZy53ZWJraXQuZ3RrLldlYkV4dGVuc2lvblRl
c3QiLCB0ZXN0LT5tX21haW5Mb29wKSk7CisgICAgR1JlZlB0cjxHVmFyaWFudD4gcmVzdWx0ID0g
YWRvcHRHUmVmKGdfZGJ1c19wcm94eV9jYWxsX3N5bmMoCisgICAgICAgIHByb3h5LmdldCgpLAor
ICAgICAgICAiR2V0VGl0bGUiLAorICAgICAgICBnX3ZhcmlhbnRfbmV3KCIodCkiLCB3ZWJraXRf
d2ViX3ZpZXdfZ2V0X3BhZ2VfaWQodGVzdC0+bV93ZWJWaWV3KSksCisgICAgICAgIEdfREJVU19D
QUxMX0ZMQUdTX05PTkUsCisgICAgICAgIC0xLCAwLCAwKSk7CisgICAgZ19hc3NlcnQocmVzdWx0
KTsKKworICAgIGNvbnN0IGNoYXIqIHRpdGxlOworICAgIGdfdmFyaWFudF9nZXQocmVzdWx0Lmdl
dCgpLCAiKCZzKSIsICZ0aXRsZSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRpdGxlLCA9PSwgIldl
YktpdEdUSysgV2ViIEV4dGVuc2lvbnMgVGVzdCIpOworfQorCitzdGF0aWMgdm9pZCBkb2N1bWVu
dExvYWRlZENhbGxiYWNrKEdEQnVzQ29ubmVjdGlvbiosIGNvbnN0IGNoYXIqLCBjb25zdCBjaGFy
KiwgY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBHVmFyaWFudCosIFdlYlZpZXdUZXN0KiB0ZXN0
KQoreworICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7Cit9CisKK3N0YXRp
YyB2b2lkIHRlc3REb2N1bWVudExvYWRlZFNpZ25hbChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKK3sKKyAgICBHUmVmUHRyPEdEQnVzUHJveHk+IHByb3h5ID0gYWRvcHRHUmVmKGJ1
cy0+Y3JlYXRlUHJveHkoIm9yZy53ZWJraXQuZ3RrLldlYkV4dGVuc2lvblRlc3QiLAorICAgICAg
ICAiL29yZy93ZWJraXQvZ3RrL1dlYkV4dGVuc2lvblRlc3QiLCAib3JnLndlYmtpdC5ndGsuV2Vi
RXh0ZW5zaW9uVGVzdCIsIHRlc3QtPm1fbWFpbkxvb3ApKTsKKyAgICBHREJ1c0Nvbm5lY3Rpb24q
IGNvbm5lY3Rpb24gPSBnX2RidXNfcHJveHlfZ2V0X2Nvbm5lY3Rpb24ocHJveHkuZ2V0KCkpOwor
ICAgIGd1aW50IGlkID0gZ19kYnVzX2Nvbm5lY3Rpb25fc2lnbmFsX3N1YnNjcmliZShjb25uZWN0
aW9uLAorICAgICAgICAwLAorICAgICAgICAib3JnLndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9uVGVz
dCIsCisgICAgICAgICJEb2N1bWVudExvYWRlZCIsCisgICAgICAgICIvb3JnL3dlYmtpdC9ndGsv
V2ViRXh0ZW5zaW9uVGVzdCIsCisgICAgICAgIDAsCisgICAgICAgIEdfREJVU19TSUdOQUxfRkxB
R1NfTk9ORSwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHREJ1c1NpZ25hbENhbGxiYWNrPihk
b2N1bWVudExvYWRlZENhbGxiYWNrKSwKKyAgICAgICAgdGVzdCwKKyAgICAgICAgMCk7CisgICAg
Z19hc3NlcnQoaWQpOworCisgICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxoZWFkPjx0aXRsZT5X
ZWJLaXRHVEsrIFdlYiBFeHRlbnNpb25zIFRlc3Q8L3RpdGxlPjwvaGVhZD48Ym9keT48L2JvZHk+
PC9odG1sPiIsIDApOworICAgIGdfbWFpbl9sb29wX3J1bih0ZXN0LT5tX21haW5Mb29wKTsKKyAg
ICBnX2RidXNfY29ubmVjdGlvbl9zaWduYWxfdW5zdWJzY3JpYmUoY29ubmVjdGlvbiwgaWQpOwor
fQorCitzdGF0aWMgZ2Jvb2xlYW4gd2ViUHJvY2Vzc0NyYXNoZWRDYWxsYmFjayhXZWJLaXRXZWJW
aWV3KiwgV2ViVmlld1Rlc3QqIHRlc3QpCit7CisgICAgdGVzdC0+cXVpdE1haW5Mb29wKCk7CisK
KyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJLaXRXZWJWaWV3UHJv
Y2Vzc0NyYXNoZWQoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVz
dC0+bG9hZEh0bWwoIjxodG1sPjwvaHRtbD4iLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2Fk
RmluaXNoZWQoKTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3QodGVzdC0+bV93ZWJWaWV3LCAid2Vi
LXByb2Nlc3MtY3Jhc2hlZCIsCisgICAgICAgIEdfQ0FMTEJBQ0sod2ViUHJvY2Vzc0NyYXNoZWRD
YWxsYmFjayksIHRlc3QpOworCisgICAgR1JlZlB0cjxHREJ1c1Byb3h5PiBwcm94eSA9IGFkb3B0
R1JlZihidXMtPmNyZWF0ZVByb3h5KCJvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwK
KyAgICAgICAgIi9vcmcvd2Via2l0L2d0ay9XZWJFeHRlbnNpb25UZXN0IiwgIm9yZy53ZWJraXQu
Z3RrLldlYkV4dGVuc2lvblRlc3QiLCB0ZXN0LT5tX21haW5Mb29wKSk7CisKKyAgICBHUmVmUHRy
PEdWYXJpYW50PiByZXN1bHQgPSBhZG9wdEdSZWYoZ19kYnVzX3Byb3h5X2NhbGxfc3luYygKKyAg
ICAgICAgcHJveHkuZ2V0KCksCisgICAgICAgICJBYm9ydFByb2Nlc3MiLAorICAgICAgICAwLAor
ICAgICAgICBHX0RCVVNfQ0FMTF9GTEFHU19OT05FLAorICAgICAgICAtMSwgMCwgMCkpOworICAg
IGdfYXNzZXJ0KCFyZXN1bHQpOworICAgIGdfbWFpbl9sb29wX3J1bih0ZXN0LT5tX21haW5Mb29w
KTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYkV4dGVuc2lvbldpbmRvd09iamVjdENsZWFyZWQo
V2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwo
IjxodG1sPjxoZWFkZXI+PC9oZWFkZXI+PGJvZHk+PC9ib2R5PjwvaHRtbD4iLCAwKTsKKyAgICB0
ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIEdPd25QdHI8R0Vycm9yPiBlcnJv
cjsKKyAgICBXZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+
cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJ3aW5kb3cuZWNobygnRm9vJyk7Iiwg
JmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBn
X2Fzc2VydCghZXJyb3IuZ2V0KCkpOworICAgIEdPd25QdHI8Y2hhcj4gdmFsdWVTdHJpbmcoV2Vi
Vmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0NTdHJpbmcoamF2YXNjcmlwdFJlc3VsdCkpOwor
ICAgIGdfYXNzZXJ0X2NtcHN0cih2YWx1ZVN0cmluZy5nZXQoKSwgPT0sICJGb28iKTsKK30KKwor
c3RhdGljIGdib29sZWFuIHNjcmlwdERpYWxvZ0NhbGxiYWNrKFdlYktpdFdlYlZpZXcqLCBXZWJL
aXRTY3JpcHREaWFsb2cqIGRpYWxvZywgY2hhcioqIHJlc3VsdCkKK3sKKyAgICBnX2Fzc2VydF9j
bXB1aW50KHdlYmtpdF9zY3JpcHRfZGlhbG9nX2dldF9kaWFsb2dfdHlwZShkaWFsb2cpLCA9PSwg
V0VCS0lUX1NDUklQVF9ESUFMT0dfQUxFUlQpOworICAgIGdfYXNzZXJ0KCEqcmVzdWx0KTsKKyAg
ICAqcmVzdWx0ID0gZ19zdHJkdXAod2Via2l0X3NjcmlwdF9kaWFsb2dfZ2V0X21lc3NhZ2UoZGlh
bG9nKSk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkIHJ1bkphdmFTY3JpcHRJ
bklzb2xhdGVkV29ybGRGaW5pc2hlZENhbGxiYWNrKEdEQnVzUHJveHkqIHByb3h5LCBHQXN5bmNS
ZXN1bHQqIHJlc3VsdCwgV2ViVmlld1Rlc3QqIHRlc3QpCit7CisgICAgZ19kYnVzX3Byb3h5X2Nh
bGxfZmluaXNoKHByb3h5LCByZXN1bHQsIDApOworICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+
bV9tYWluTG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJFeHRlbnNpb25Jc29sYXRlZFdv
cmxkKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRI
dG1sKCI8aHRtbD48aGVhZGVyPjwvaGVhZGVyPjxib2R5PjxkaXYgaWQ9J2NvbnNvbGUnPjwvZGl2
PjwvYm9keT48L2h0bWw+IiwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7
CisKKyAgICBHT3duUHRyPGNoYXI+IHJlc3VsdDsKKyAgICBndWxvbmcgc2NyaXB0RGlhbG9nSUQg
PSBnX3NpZ25hbF9jb25uZWN0KHRlc3QtPm1fd2ViVmlldywgInNjcmlwdC1kaWFsb2ciLCBHX0NB
TExCQUNLKHNjcmlwdERpYWxvZ0NhbGxiYWNrKSwgJnJlc3VsdC5vdXRQdHIoKSk7CisKKyAgICBz
dGF0aWMgY29uc3QgY2hhciogbWFpbldvcmxkU2NyaXB0ID0KKyAgICAgICAgInRvcC5mb28gPSAn
Rm9vJztcbiIKKyAgICAgICAgImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJykuaW5u
ZXJIVE1MID0gdG9wLmZvbztcbiIKKyAgICAgICAgIndpbmRvdy5vcGVuID0gZnVuY3Rpb24gKCkg
eyBhbGVydCgnTWFpbiBXb3JsZCcpOyB9XG4iCisgICAgICAgICJkb2N1bWVudC5vcGVuKDEsIDIs
IDMpOyI7CisgICAgdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKG1haW5X
b3JsZFNjcmlwdCwgMCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHJlc3VsdC5nZXQoKSwgPT0sICJN
YWluIFdvcmxkIik7CisgICAgcmVzdWx0LmNsZWFyKCk7CisKKyAgICBXZWJLaXRKYXZhc2NyaXB0
UmVzdWx0KiBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRp
bEZpbmlzaGVkKCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmlubmVySFRNTCIs
IDApOworICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOworICAgIEdPd25QdHI8Y2hhcj4g
dmFsdWVTdHJpbmcoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0NTdHJpbmcoamF2YXNj
cmlwdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih2YWx1ZVN0cmluZy5nZXQoKSwgPT0s
ICJGb28iKTsKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBpc29sYXRlZFdvcmxkU2NyaXB0ID0K
KyAgICAgICAgImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJykuaW5uZXJIVE1MID0g
dG9wLmZvbztcbiIKKyAgICAgICAgIndpbmRvdy5vcGVuID0gZnVuY3Rpb24gKCkgeyBhbGVydCgn
SXNvbGF0ZWQgV29ybGQnKTsgfVxuIgorICAgICAgICAiZG9jdW1lbnQub3BlbigxLCAyLCAzKTsi
OworICAgIEdSZWZQdHI8R0RCdXNQcm94eT4gcHJveHkgPSBhZG9wdEdSZWYoYnVzLT5jcmVhdGVQ
cm94eSgib3JnLndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9uVGVzdCIsCisgICAgICAgICIvb3JnL3dl
YmtpdC9ndGsvV2ViRXh0ZW5zaW9uVGVzdCIgLCAib3JnLndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9u
VGVzdCIsIHRlc3QtPm1fbWFpbkxvb3ApKTsKKyAgICBnX2RidXNfcHJveHlfY2FsbChwcm94eS5n
ZXQoKSwKKyAgICAgICAgIlJ1bkphdmFTY3JpcHRJbklzb2xhdGVkV29ybGQiLAorICAgICAgICBn
X3ZhcmlhbnRfbmV3KCIodCZzKSIsIHdlYmtpdF93ZWJfdmlld19nZXRfcGFnZV9pZCh0ZXN0LT5t
X3dlYlZpZXcpLCBpc29sYXRlZFdvcmxkU2NyaXB0KSwKKyAgICAgICAgR19EQlVTX0NBTExfRkxB
R1NfTk9ORSwKKyAgICAgICAgLTEsIDAsCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5j
UmVhZHlDYWxsYmFjaz4ocnVuSmF2YVNjcmlwdEluSXNvbGF0ZWRXb3JsZEZpbmlzaGVkQ2FsbGJh
Y2spLAorICAgICAgICB0ZXN0KTsKKyAgICBnX21haW5fbG9vcF9ydW4odGVzdC0+bV9tYWluTG9v
cCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHJlc3VsdC5nZXQoKSwgPT0sICJJc29sYXRlZCBXb3Js
ZCIpOworICAgIHJlc3VsdC5jbGVhcigpOworCisgICAgLy8gQ2hlY2sgdGhhdCAndG9wLmZvbycg
ZGVmaW5lZCBpbiBtYWluIHdvcmxkIGlzIG5vdCB2aXNpYmxlIGluIGlzb2xhdGVkIHdvcmxkLgor
ICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmlu
aXNoZWQoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJykuaW5uZXJIVE1MIiwgMCk7
CisgICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgdmFsdWVTdHJpbmcuc2V0KFdl
YlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAidW5kZWZpbmVkIik7
CisKKyAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QodGVzdC0+bV93ZWJWaWV3LCBzY3Jp
cHREaWFsb2dJRCk7Cit9CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICB3ZWJraXRfd2ViX2Nv
bnRleHRfc2V0X3dlYl9leHRlbnNpb25zX2RpcmVjdG9yeSh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0
X2RlZmF1bHQoKSwgV0VCS0lUX1RFU1RfV0VCX0VYVEVOU0lPTlNfRElSKTsKKyAgICBidXMgPSBu
ZXcgV2ViS2l0VGVzdEJ1cygpOworICAgIGlmICghYnVzLT5ydW4oKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViRXh0ZW5zaW9uIiwgImRvbS1kb2N1
bWVudC10aXRsZSIsIHRlc3RXZWJFeHRlbnNpb25HZXRUaXRsZSk7CisgICAgV2ViVmlld1Rlc3Q6
OmFkZCgiV2ViS2l0V2ViRXh0ZW5zaW9uIiwgImRvY3VtZW50LWxvYWRlZC1zaWduYWwiLCB0ZXN0
RG9jdW1lbnRMb2FkZWRTaWduYWwpOworICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYlZp
ZXciLCAid2ViLXByb2Nlc3MtY3Jhc2hlZCIsIHRlc3RXZWJLaXRXZWJWaWV3UHJvY2Vzc0NyYXNo
ZWQpOworICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYkV4dGVuc2lvbiIsICJ3aW5kb3ct
b2JqZWN0LWNsZWFyZWQiLCB0ZXN0V2ViRXh0ZW5zaW9uV2luZG93T2JqZWN0Q2xlYXJlZCk7Cisg
ICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViRXh0ZW5zaW9uIiwgImlzb2xhdGVkLXdvcmxk
IiwgdGVzdFdlYkV4dGVuc2lvbklzb2xhdGVkV29ybGQpOworfQorCit2b2lkIGFmdGVyQWxsKCkK
K3sKKyAgICBkZWxldGUgYnVzOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5LmNwcCBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0QWNjZXNzaWJpbGl0eS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ3Y2MzMQotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0QWNjZXNz
aWJpbGl0eS5jcHAKQEAgLTAsMCArMSwyMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
SWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlRlc3RNYWluLmgi
CisjaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKKworLy8gVGhlIGxpYmF0c3BpIGhlYWRlcnMgZG9u
J3QgdXNlIEdfQkVHSU5fREVDTFMKK2V4dGVybiAiQyIgeworI2luY2x1ZGUgPGF0c3BpL2F0c3Bp
Lmg+Cit9CisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVk
ZSA8Z2xpYi5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKworLy8gTmFtZSBvZiB0aGUgdGVz
dCBzZXJ2ZXIgYXBwbGljYXRpb24gY3JlYXRpbmcgdGhlIHdlYlZpZXcgb2JqZWN0Lgorc3RhdGlj
IGNvbnN0IGNoYXIqIGtUZXN0U2VydmVyQXBwTmFtZSA9ICJBY2Nlc3NpYmlsaXR5VGVzdFNlcnZl
ciI7CisKKy8vIE1heCBzZWNvbmRzIHRvIHdhaXQgZm9yIHRoZSB0ZXN0IHNlcnZlciBiZWZvcmUg
aW5zcGVjdGluZyBpdC4KK3N0YXRpYyBjb25zdCBpbnQga01heFdhaXRGb3JDaGlsZCA9IDU7CisK
Ky8vIFRoZSBQSUQgZm9yIHRoZSB0ZXN0IHNlcnZlciBydW5uaW5nLCBzbyB3ZSBjYW4ga2lsbCBp
dCBpZiBuZWVkZWQuCitzdGF0aWMgR1BpZCBrQ2hpbGRQcm9jZXNzUGlkID0gMDsKKworLy8gV2hl
dGhlciB0aGUgY2hpbGQgaGFzIHJlcGxpZWQgYW5kIGl0J3MgcmVhZHkuCitzdGF0aWMgYm9vbCBr
Q2hpbGRJc1JlYWR5ID0gZmFsc2U7CisKK3N0YXRpYyB2b2lkIHN0b3BUZXN0U2VydmVyKCkKK3sK
KyAgICAvLyBEbyBub3RoaW5nIGlmIHRoZXJlJ3Mgbm8gc2VydmVyIHJ1bm5pbmcuCisgICAgaWYg
KCFrQ2hpbGRQcm9jZXNzUGlkKQorICAgICAgICByZXR1cm47CisKKyAgICBnX3NwYXduX2Nsb3Nl
X3BpZChrQ2hpbGRQcm9jZXNzUGlkKTsKKyAgICBraWxsKGtDaGlsZFByb2Nlc3NQaWQsIFNJR1RF
Uk0pOworICAgIGtDaGlsZFByb2Nlc3NQaWQgPSAwOworfQorCitzdGF0aWMgdm9pZCBzaWdBYm9y
dEhhbmRsZXIoaW50IHNpZ051bSkKK3sKKyAgICAvLyBKdXN0IHN0b3AgdGhlIHRlc3Qgc2VydmVy
IGlmIFNJR0FCUlQgd2FzIHJlY2VpdmVkLgorICAgIHN0b3BUZXN0U2VydmVyKCk7Cit9CisKK3N0
YXRpYyBncG9pbnRlciB0ZXN0U2VydmVyTW9uaXRvclRocmVhZEZ1bmMoZ3BvaW50ZXIpCit7Cisg
ICAgLy8gV2FpdCBmb3IgdGhlIHNwZWNpZmllZCB0aW1lb3V0IHRvIGhhcHBlbi4KKyAgICBnX3Vz
bGVlcChrTWF4V2FpdEZvckNoaWxkICogR19VU0VDX1BFUl9TRUMpOworCisgICAgLy8gS2lsbCB0
aGUgY2hpbGQgcHJvY2VzcyBpZiBub3QgcmVhZHkgeWV0LgorICAgIGlmICgha0NoaWxkSXNSZWFk
eSkKKyAgICAgICAgc3RvcFRlc3RTZXJ2ZXIoKTsKKworICAgIGdfdGhyZWFkX2V4aXQoMCk7Cisg
ICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHN0YXJ0VGVzdFNlcnZlck1vbml0b3IoKQor
eworICAgIGtDaGlsZElzUmVhZHkgPSBmYWxzZTsKKyAgICBnX3RocmVhZF9uZXcoIlRlc3RTZXJ2
ZXJNb25pdG9yIiwgdGVzdFNlcnZlck1vbml0b3JUaHJlYWRGdW5jLCAwKTsKK30KKworc3RhdGlj
IHZvaWQgc3RhcnRUZXN0U2VydmVyKCkKK3sKKyAgICAvLyBQcmVwYXJlIGFyZ3ZbXSBmb3Igc3Bh
d25pbmcgdGhlIHNlcnZlciBwcm9jZXNzLgorICAgIEdPd25QdHI8Y2hhcj4gdGVzdFNlcnZlclBh
dGgoZ19idWlsZF9maWxlbmFtZShXRUJLSVRfRVhFQ19QQVRILCAiVGVzdFdlYktpdEFQSSIsICJX
ZWJLaXQyR3RrIiwga1Rlc3RTZXJ2ZXJBcHBOYW1lLCBOVUxMKSk7CisKKyAgICBjaGFyKiB0ZXN0
U2VydmVyQXJndlsyXTsKKyAgICB0ZXN0U2VydmVyQXJndlswXSA9IHRlc3RTZXJ2ZXJQYXRoLmdl
dCgpOworICAgIHRlc3RTZXJ2ZXJBcmd2WzFdID0gMDsKKworICAgIC8vIFNwYXduIHRoZSBzZXJ2
ZXIsIGdldHRpbmcgaXRzIHN0ZG91dCBmaWxlIGRlc2NyaXB0b3IgdG8gc2V0IGEKKyAgICAvLyBj
b21tdW5pY2F0aW9uIGNoYW5uZWwsIHNvIHdlIGtub3cgd2hlbiBpdCdzIHJlYWR5LgorICAgIGlu
dCBjaGlsZFN0ZG91dCA9IDA7CisgICAgaWYgKCFnX3NwYXduX2FzeW5jX3dpdGhfcGlwZXMoMCwg
dGVzdFNlcnZlckFyZ3YsIDAsIHN0YXRpY19jYXN0PEdTcGF3bkZsYWdzPigwKSwgMCwgMCwgJmtD
aGlsZFByb2Nlc3NQaWQsIDAsICZjaGlsZFN0ZG91dCwgMCwgMCkpIHsKKyAgICAgICAgY2xvc2Uo
Y2hpbGRTdGRvdXQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gU3RhcnQgbW9u
aXRvcmluZyB0aGUgdGVzdCBzZXJ2ZXIgKGluIGEgc2VwYXJhdGUgdGhyZWFkKSB0bworICAgIC8v
IGVuc3VyZSB3ZSBkb24ndCBibG9jayBvbiB0aGUgY2hpbGQgcHJvY2VzcyBtb3JlIHRoYW4gYSB0
aW1lb3V0LgorICAgIHN0YXJ0VGVzdFNlcnZlck1vbml0b3IoKTsKKworICAgIGNoYXIgbXNnWzJd
OworICAgIEdJT0NoYW5uZWwqIGlvQ2hhbm5lbCA9IGdfaW9fY2hhbm5lbF91bml4X25ldyhjaGls
ZFN0ZG91dCk7CisgICAgaWYgKGdfaW9fY2hhbm5lbF9yZWFkX2NoYXJzKGlvQ2hhbm5lbCwgbXNn
LCAyLCAwLCAwKSA9PSBHX0lPX1NUQVRVU19OT1JNQUwpIHsKKyAgICAgICAgLy8gQ2hlY2sgd2hl
dGhlciB0aGUgc2VydmVyIHNlbnQgYSBtZXNzYWdlIHNheWluZyBpdCdzIHJlYWR5CisgICAgICAg
IC8vIGFuZCBzdG9yZSB0aGUgcmVzdWx0IGdsb2JhbGx5LCBzbyB0aGUgbW9uaXRvciBjYW4gc2Vl
IGl0LgorICAgICAgICBrQ2hpbGRJc1JlYWR5ID0gbXNnWzBdID09ICdPJyAmJiBtc2dbMV0gPT0g
J0snOworICAgIH0KKyAgICBnX2lvX2NoYW5uZWxfdW5yZWYoaW9DaGFubmVsKTsKKyAgICBjbG9z
ZShjaGlsZFN0ZG91dCk7CisKKyAgICAvLyBUaGUgdGltZW91dCB3YXMgcmVhY2hlZCBhbmQgdGhl
IHNlcnZlciBpcyBub3QgcmVhZHkgeWV0LCBzbworICAgIC8vIHN0b3AgaXQgaW5tZWRpYXRlbHks
IGFuZCBsZXQgdGhlIHVuaXQgdGVzdHMgZmFpbC4KKyAgICBpZiAoIWtDaGlsZElzUmVhZHkpCisg
ICAgICAgIHN0b3BUZXN0U2VydmVyKCk7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrQXRzcGlBY2Nl
c3NpYmxlKEF0c3BpQWNjZXNzaWJsZSogYWNjZXNzaWJsZSwgY29uc3QgY2hhciogdGFyZ2V0TmFt
ZSwgQXRzcGlSb2xlIHRhcmdldFJvbGUpCit7CisgICAgZ19hc3NlcnQoQVRTUElfSVNfQUNDRVNT
SUJMRShhY2Nlc3NpYmxlKSk7CisKKyAgICBHT3duUHRyPGNoYXI+IG5hbWUoYXRzcGlfYWNjZXNz
aWJsZV9nZXRfbmFtZShhY2Nlc3NpYmxlLCAwKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRhcmdl
dE5hbWUsID09LCBuYW1lLmdldCgpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGFyZ2V0Um9sZSwg
PT0sIGF0c3BpX2FjY2Vzc2libGVfZ2V0X3JvbGUoYWNjZXNzaWJsZSwgMCkpOworfQorCitzdGF0
aWMgR1JlZlB0cjxBdHNwaUFjY2Vzc2libGU+IGZpbmRUZXN0U2VydmVyQXBwbGljYXRpb24oKQor
eworICAgIC8vIE9ubHkgb25lIGRlc2t0b3AgaXMgc3VwcG9ydGVkIGJ5IEFUU1BJIGF0IHRoZSBt
b21lbnQuCisgICAgR1JlZlB0cjxBdHNwaUFjY2Vzc2libGU+IGRlc2t0b3AgPSBhZG9wdEdSZWYo
YXRzcGlfZ2V0X2Rlc2t0b3AoMCkpOworCisgICAgLy8gTG9vayBmb3IgdGhlIHNlcnZlciBhcHBs
aWNhdGlvbiBpbiB0aGUgbGlzdCBvZiBhcHBzLgorICAgIEdSZWZQdHI8QXRzcGlBY2Nlc3NpYmxl
PiBjdXJyZW50OworICAgIGludCBjaGlsZENvdW50ID0gYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hp
bGRfY291bnQoZGVza3RvcC5nZXQoKSwgMCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGls
ZENvdW50OyBpKyspIHsKKyAgICAgICAgY3VycmVudCA9IGFkb3B0R1JlZihhdHNwaV9hY2Nlc3Np
YmxlX2dldF9jaGlsZF9hdF9pbmRleChkZXNrdG9wLmdldCgpLCBpLCAwKSk7CisgICAgICAgIGlm
ICghZ19zdHJjbXAwKGF0c3BpX2FjY2Vzc2libGVfZ2V0X25hbWUoY3VycmVudC5nZXQoKSwgMCks
IGtUZXN0U2VydmVyQXBwTmFtZSkpCisgICAgICAgICAgICByZXR1cm4gY3VycmVudDsKKyAgICB9
CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdGVzdEF0c3BpQmFzaWNIaWVyYXJj
aHkoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8gVGhlIHRlc3Qg
c2VydmVyJ3MgYWNjZXNzaWJpbGl0eSBvYmplY3QgKFVJIFByb2Nlc3MpLgorICAgIEdSZWZQdHI8
QXRzcGlBY2Nlc3NpYmxlPiB0ZXN0U2VydmVyQXBwID0gZmluZFRlc3RTZXJ2ZXJBcHBsaWNhdGlv
bigpOworICAgIGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUodGVzdFNlcnZlckFwcC5nZXQo
KSkpOworICAgIGNoZWNrQXRzcGlBY2Nlc3NpYmxlKHRlc3RTZXJ2ZXJBcHAuZ2V0KCksICJBY2Nl
c3NpYmlsaXR5VGVzdFNlcnZlciIsIEFUU1BJX1JPTEVfQVBQTElDQVRJT04pOworCisgICAgLy8g
VGhlIG1haW4gd2luZG93J3MgYWNjZXNzaWJpbGl0eSBvYmplY3QgKFVJIFByb2Nlc3MpLgorICAg
IEdSZWZQdHI8QXRzcGlBY2Nlc3NpYmxlPiBjdXJyZW50UGFyZW50ID0gdGVzdFNlcnZlckFwcDsK
KyAgICBHUmVmUHRyPEF0c3BpQWNjZXNzaWJsZT4gY3VycmVudENoaWxkID0gYWRvcHRHUmVmKGF0
c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQYXJlbnQuZ2V0KCksIDAs
IDApKTsKKyAgICBnX2Fzc2VydChBVFNQSV9JU19BQ0NFU1NJQkxFKGN1cnJlbnRDaGlsZC5nZXQo
KSkpOworICAgIGNoZWNrQXRzcGlBY2Nlc3NpYmxlKGN1cnJlbnRDaGlsZC5nZXQoKSwgIiIsIEFU
U1BJX1JPTEVfRlJBTUUpOworCisgICAgLy8gVGhlIFdlYlZpZXcncyBhY2Nlc3NpYmlsaXR5IG9i
amVjdCAoVUkgUHJvY2VzcykuCisgICAgY3VycmVudFBhcmVudCA9IGN1cnJlbnRDaGlsZDsKKyAg
ICBjdXJyZW50Q2hpbGQgPSBhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChjdXJy
ZW50UGFyZW50LmdldCgpLCAwLCAwKTsKKyAgICBnX2Fzc2VydChBVFNQSV9JU19BQ0NFU1NJQkxF
KGN1cnJlbnRDaGlsZC5nZXQoKSkpOworICAgIGNoZWNrQXRzcGlBY2Nlc3NpYmxlKGN1cnJlbnRD
aGlsZC5nZXQoKSwgIiIsIEFUU1BJX1JPTEVfRklMTEVSKTsKKworICAgIC8vIFRoZSBXZWJQYWdl
J3MgYWNjZXNzaWJpbGl0eSBvYmplY3QgKFdlYiBQcm9jZXNzKS4KKyAgICBjdXJyZW50UGFyZW50
ID0gY3VycmVudENoaWxkOworICAgIGN1cnJlbnRDaGlsZCA9IGF0c3BpX2FjY2Vzc2libGVfZ2V0
X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQYXJlbnQuZ2V0KCksIDAsIDApOworICAgIGdfYXNzZXJ0
KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY3VycmVudENoaWxkLmdldCgpKSk7CisgICAgY2hlY2tBdHNw
aUFjY2Vzc2libGUoY3VycmVudENoaWxkLmdldCgpLCAiIiwgQVRTUElfUk9MRV9GSUxMRVIpOwor
CisgICAgLy8gSFRNTCByb290IGVsZW1lbnQncyBhY2Nlc3NpYmxlIGVsZW1lbnQgKFdlYiBQcm9j
ZXNzKS4KKyAgICBjdXJyZW50UGFyZW50ID0gY3VycmVudENoaWxkOworICAgIGN1cnJlbnRDaGls
ZCA9IGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQYXJlbnQuZ2V0
KCksIDAsIDApOworICAgIGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY3VycmVudENoaWxk
LmdldCgpKSk7CisKKyAgICAvLyBIVE1MIGJvZHkncyBhY2Nlc3NpYmxlIGVsZW1lbnQgKFdlYiBQ
cm9jZXNzKS4KKyAgICBjdXJyZW50UGFyZW50ID0gY3VycmVudENoaWxkOworICAgIGN1cnJlbnRD
aGlsZCA9IGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQYXJlbnQu
Z2V0KCksIDAsIDApOworICAgIGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY3VycmVudENo
aWxkLmdldCgpKSk7CisgICAgY2hlY2tBdHNwaUFjY2Vzc2libGUoY3VycmVudENoaWxkLmdldCgp
LCAiIiwgQVRTUElfUk9MRV9ET0NVTUVOVF9XRUIpOworCisgICAgLy8gSFRNTCBIMSdzIGFjY2Vz
c2libGUgZWxlbWVudCAoV2ViIFByb2Nlc3MpLgorICAgIGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50
Q2hpbGQ7CisgICAgY3VycmVudENoaWxkID0gYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRf
aW5kZXgoY3VycmVudFBhcmVudC5nZXQoKSwgMCwgMCk7CisgICAgZ19hc3NlcnQoQVRTUElfSVNf
QUNDRVNTSUJMRShjdXJyZW50Q2hpbGQuZ2V0KCkpKTsKKyAgICBjaGVja0F0c3BpQWNjZXNzaWJs
ZShjdXJyZW50Q2hpbGQuZ2V0KCksICJUaGlzIGlzIGEgdGVzdCIsIEFUU1BJX1JPTEVfSEVBRElO
Ryk7CisKKyAgICAvLyBIVE1MIGZpcnN0IHBhcmFncmFwaCdzIGFjY2Vzc2libGUgZWxlbWVudCAo
V2ViIFByb2Nlc3MpLgorICAgIGN1cnJlbnRDaGlsZCA9IGF0c3BpX2FjY2Vzc2libGVfZ2V0X2No
aWxkX2F0X2luZGV4KGN1cnJlbnRQYXJlbnQuZ2V0KCksIDEsIDApOworICAgIGdfYXNzZXJ0KEFU
U1BJX0lTX0FDQ0VTU0lCTEUoY3VycmVudENoaWxkLmdldCgpKSk7CisgICAgY2hlY2tBdHNwaUFj
Y2Vzc2libGUoY3VycmVudENoaWxkLmdldCgpLCAiIiwgQVRTUElfUk9MRV9QQVJBR1JBUEgpOwor
CisgICAgLy8gSFRNTCBzZWNvbmQgcGFyYWdyYXBoJ3MgYWNjZXNzaWJsZSBlbGVtZW50IChXZWIg
UHJvY2VzcykuCisgICAgY3VycmVudENoaWxkID0gYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRf
YXRfaW5kZXgoY3VycmVudFBhcmVudC5nZXQoKSwgMiwgMCk7CisgICAgZ19hc3NlcnQoQVRTUElf
SVNfQUNDRVNTSUJMRShjdXJyZW50Q2hpbGQuZ2V0KCkpKTsKKyAgICBjaGVja0F0c3BpQWNjZXNz
aWJsZShjdXJyZW50Q2hpbGQuZ2V0KCksICIiLCBBVFNQSV9ST0xFX1BBUkFHUkFQSCk7CisKKyAg
ICAvLyBIVE1MIGxpbmsncyBhY2Nlc3NpYmxlIGVsZW1lbnQgKFdlYiBQcm9jZXNzKS4KKyAgICBj
dXJyZW50UGFyZW50ID0gY3VycmVudENoaWxkOworICAgIGN1cnJlbnRDaGlsZCA9IGF0c3BpX2Fj
Y2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQYXJlbnQuZ2V0KCksIDAsIDApOwor
ICAgIGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY3VycmVudENoaWxkLmdldCgpKSk7Cisg
ICAgY2hlY2tBdHNwaUFjY2Vzc2libGUoY3VycmVudENoaWxkLmdldCgpLCAiYSBsaW5rIiwgQVRT
UElfUk9MRV9MSU5LKTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQoreworICAgIC8vIFdlIGluc3Rh
bGwgYSBoYW5kbGVyIHRvIGVuc3VyZSB0aGF0IHdlIGtpbGwgdGhlIGNoaWxkIHByb2Nlc3MKKyAg
ICAvLyBpZiB0aGUgcGFyZW50IGRpZXMgYmVjYXVzZSBvZiB3aGF0ZXZlciB0aGUgcmVhc29uIGlz
LgorICAgIHNpZ25hbChTSUdBQlJULCBzaWdBYm9ydEhhbmRsZXIpOworCisgICAgLy8gU3RhcnQg
dGhlIGFjY2Vzc2liaWxpdHkgdGVzdCBzZXJ2ZXIgYW5kIGxvYWQgdGhlIHRlc3RzLgorICAgIHN0
YXJ0VGVzdFNlcnZlcigpOworICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdEFjY2Vzc2liaWxp
dHkiLCAiYXRzcGktYmFzaWMtaGllcmFyY2h5IiwgdGVzdEF0c3BpQmFzaWNIaWVyYXJjaHkpOwor
fQorCit2b2lkIGFmdGVyQWxsKCkKK3sKKyAgICAvLyBFbnN1cmUgd2Ugc3RvcCB0aGUgc2VydmVy
LgorICAgIHN0b3BUZXN0U2VydmVyKCk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdEZhdmljb25EYXRhYmFzZS5jcHAgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdEZhdmljb25EYXRhYmFz
ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEwNmY3NAotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2Vi
S2l0RmF2aWNvbkRhdGFiYXNlLmNwcApAQCAtMCwwICsxLDI3NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAi
V2ViS2l0VGVzdFNlcnZlci5oIgorI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCisjaW5jbHVkZSA8
Z2xpYi9nc3RkaW8uaD4KKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKyNpbmNsdWRlIDx3dGYv
Z29iamVjdC9HT3duUHRyLmg+CisKK3N0YXRpYyBXZWJLaXRUZXN0U2VydmVyKiBrU2VydmVyOwor
c3RhdGljIGNoYXIqIGtUZW1wRGlyZWN0b3J5OworCitjbGFzcyBGYXZpY29uRGF0YWJhc2VUZXN0
OiBwdWJsaWMgV2ViVmlld1Rlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRV
UkUoRmF2aWNvbkRhdGFiYXNlVGVzdCk7CisKKyAgICBGYXZpY29uRGF0YWJhc2VUZXN0KCkKKyAg
ICAgICAgOiBtX3dlYkNvbnRleHQod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCkpCisg
ICAgICAgICwgbV9mYXZpY29uKDApCisgICAgICAgICwgbV9lcnJvcigwKQorICAgICAgICAsIG1f
ZmF2aWNvbk5vdGlmaWNhdGlvblJlY2VpdmVkKGZhbHNlKQorICAgIHsKKyAgICAgICAgV2ViS2l0
RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZmF2aWNv
bl9kYXRhYmFzZShtX3dlYkNvbnRleHQpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGRhdGFi
YXNlLCAiZmF2aWNvbi1jaGFuZ2VkIiwgR19DQUxMQkFDSyhmYXZpY29uQ2hhbmdlZENhbGxiYWNr
KSwgdGhpcyk7CisgICAgfQorCisgICAgfkZhdmljb25EYXRhYmFzZVRlc3QoKQorICAgIHsKKyAg
ICAgICAgaWYgKG1fZmF2aWNvbikKKyAgICAgICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveSht
X2Zhdmljb24pOworCisgICAgICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3
ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2UobV93ZWJDb250ZXh0KTsKKyAg
ICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKGRhdGFiYXNlLCBHX1NJ
R05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKKyAgICB9CisKKyAgICBzdGF0aWMg
dm9pZCBmYXZpY29uQ2hhbmdlZENhbGxiYWNrKFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJh
c2UsIGNvbnN0IGNoYXIqIHBhZ2VVUkksIGNvbnN0IGNoYXIqIGZhdmljb25VUkksIEZhdmljb25E
YXRhYmFzZVRlc3QqIHRlc3QpCisgICAgeworICAgICAgICBpZiAoIWdfc3RyY21wMCh3ZWJraXRf
d2ViX3ZpZXdfZ2V0X3VyaSh0ZXN0LT5tX3dlYlZpZXcpLCBwYWdlVVJJKSkKKyAgICAgICAgICAg
IHRlc3QtPm1fZmF2aWNvblVSSSA9IGZhdmljb25VUkk7CisgICAgfQorCisgICAgc3RhdGljIHZv
aWQgdmlld0Zhdmljb25DaGFuZ2VkQ2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgR1Bh
cmFtU3BlYyogcHNwZWMsIGdwb2ludGVyIGRhdGEpCisgICAgeworICAgICAgICBGYXZpY29uRGF0
YWJhc2VUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8RmF2aWNvbkRhdGFiYXNlVGVzdCo+KGRhdGEp
OworICAgICAgICBnX2Fzc2VydCh0ZXN0LT5tX3dlYlZpZXcgPT0gd2ViVmlldyk7CisgICAgICAg
IHRlc3QtPm1fZmF2aWNvbk5vdGlmaWNhdGlvblJlY2VpdmVkID0gdHJ1ZTsKKyAgICAgICAgdGVz
dC0+cXVpdE1haW5Mb29wKCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZ2V0RmF2aWNvbkNh
bGxiYWNrKEdPYmplY3QqIHNvdXJjZU9iamVjdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIHZvaWQq
IGRhdGEpCisgICAgeworICAgICAgICBGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0ID0gc3RhdGlj
X2Nhc3Q8RmF2aWNvbkRhdGFiYXNlVGVzdCo+KGRhdGEpOworICAgICAgICBXZWJLaXRGYXZpY29u
RGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2RhdGFi
YXNlKHRlc3QtPm1fd2ViQ29udGV4dCk7CisgICAgICAgIHRlc3QtPm1fZmF2aWNvbiA9IHdlYmtp
dF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX2ZpbmlzaChkYXRhYmFzZSwgcmVzdWx0LCAm
dGVzdC0+bV9lcnJvci5vdXRQdHIoKSk7CisgICAgICAgIHRlc3QtPnF1aXRNYWluTG9vcCgpOwor
ICAgIH0KKworICAgIHZvaWQgd2FpdFVudGlsRmF2aWNvbkNoYW5nZWQoKQorICAgIHsKKyAgICAg
ICAgbV9mYXZpY29uTm90aWZpY2F0aW9uUmVjZWl2ZWQgPSBmYWxzZTsKKyAgICAgICAgdW5zaWdu
ZWQgbG9uZyBoYW5kbGVySUQgPSBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgIm5vdGlmeTo6
ZmF2aWNvbiIsIEdfQ0FMTEJBQ0sodmlld0Zhdmljb25DaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsK
KyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgICAgICBnX3NpZ25hbF9o
YW5kbGVyX2Rpc2Nvbm5lY3QobV93ZWJWaWV3LCBoYW5kbGVySUQpOworICAgIH0KKworICAgIHZv
aWQgZ2V0RmF2aWNvbkZvclBhZ2VVUklBbmRXYWl0VW50aWxSZWFkeShjb25zdCBjaGFyKiBwYWdl
VVJJKQorICAgIHsKKyAgICAgICAgbV9lcnJvci5jbGVhcigpOworICAgICAgICBpZiAobV9mYXZp
Y29uKSB7CisgICAgICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3kobV9mYXZpY29uKTsKKyAg
ICAgICAgICAgIG1fZmF2aWNvbiA9IDA7CisgICAgICAgIH0KKworICAgICAgICBXZWJLaXRGYXZp
Y29uRGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2Rh
dGFiYXNlKG1fd2ViQ29udGV4dCk7CisgICAgICAgIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dl
dF9mYXZpY29uKGRhdGFiYXNlLCBwYWdlVVJJLCAwLCBnZXRGYXZpY29uQ2FsbGJhY2ssIHRoaXMp
OworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgfQorCisgICAgV2Vi
S2l0V2ViQ29udGV4dCogbV93ZWJDb250ZXh0OworICAgIGNhaXJvX3N1cmZhY2VfdCogbV9mYXZp
Y29uOworICAgIENTdHJpbmcgbV9mYXZpY29uVVJJOworICAgIEdPd25QdHI8R0Vycm9yPiBtX2Vy
cm9yOworICAgIGJvb2wgbV9mYXZpY29uTm90aWZpY2F0aW9uUmVjZWl2ZWQ7Cit9OworCitzdGF0
aWMgdm9pZAorc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSog
bWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSogcXVlcnksIFNvdXBDbGllbnRD
b250ZXh0KiBjb250ZXh0LCB2b2lkKiBkYXRhKQoreworICAgIGlmIChtZXNzYWdlLT5tZXRob2Qg
IT0gU09VUF9NRVRIT0RfR0VUKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1l
c3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9mYXZpY29uLmljbyIpKSB7CisgICAg
ICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9GT1VO
RCk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNl
X2JvZHkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2hhciogY29udGVudHM7Cisg
ICAgZ3NpemUgbGVuZ3RoOworICAgIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2ljb24vZmF2aWNv
bi5pY28iKSkgeworICAgICAgICBHT3duUHRyPGNoYXI+IHBhdGhUb0Zhdmljb24oZ19idWlsZF9m
aWxlbmFtZShUZXN0OjpnZXRXZWJLaXQxVGVzdFJlc291Y2VzRGlyKCkuZGF0YSgpLCAiYmxhbmsu
aWNvIiwgTlVMTCkpOworICAgICAgICBnX2ZpbGVfZ2V0X2NvbnRlbnRzKHBhdGhUb0Zhdmljb24u
Z2V0KCksICZjb250ZW50cywgJmxlbmd0aCwgMCk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5
X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBjb250ZW50
cywgbGVuZ3RoKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvbm9mYXZpY29u
IikpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIG5vRmF2aWNvbkhUTUwgPSAiPGh0bWw+
PGhlYWQ+PGJvZHk+dGVzdDwvYm9keT48L2h0bWw+IjsKKyAgICAgICAgc291cF9tZXNzYWdlX2Jv
ZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgbm9G
YXZpY29uSFRNTCwgc3RybGVuKG5vRmF2aWNvbkhUTUwpKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBzdGF0aWMgY29uc3QgY2hhciogY29udGVudHNIVE1MID0gIjxodG1sPjxoZWFkPjxsaW5rIHJl
bD0naWNvbicgaHJlZj0nL2ljb24vZmF2aWNvbi5pY28nIHR5cGU9J2ltYWdlL3gtaWNvOyBjaGFy
c2V0PWJpbmFyeSc+PC9oZWFkPjxib2R5PnRlc3Q8L2JvZHk+PC9odG1sPiI7CisgICAgICAgIHNv
dXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9S
WV9TVEFUSUMsIGNvbnRlbnRzSFRNTCwgc3RybGVuKGNvbnRlbnRzSFRNTCkpOworICAgIH0KKwor
ICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKKyAg
ICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKK30K
Kworc3RhdGljIHZvaWQgdGVzdE5vdEluaXRpYWxpemVkKEZhdmljb25EYXRhYmFzZVRlc3QqIHRl
c3QpCit7CisgICAgLy8gVHJ5IHRvIHJldHJpZXZlIGEgdmFsaWQgZmF2aWNvbiBmcm9tIGEgbm90
IGluaXRpYWxpemVkIGRhdGFiYXNlLgorICAgIHRlc3QtPmdldEZhdmljb25Gb3JQYWdlVVJJQW5k
V2FpdFVudGlsUmVhZHkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2ZvbyIpLmRhdGEoKSk7Cisg
ICAgZ19hc3NlcnQoIXRlc3QtPm1fZmF2aWNvbik7CisgICAgZ19hc3NlcnQodGVzdC0+bV9lcnJv
cik7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fZXJyb3ItPmNvZGUsID09LCBXRUJLSVRf
RkFWSUNPTl9EQVRBQkFTRV9FUlJPUl9OT1RfSU5JVElBTElaRUQpOworfQorCitzdGF0aWMgdm9p
ZCB0ZXN0U2V0RGlyZWN0b3J5KEZhdmljb25EYXRhYmFzZVRlc3QqIHRlc3QpCit7CisgICAgd2Vi
a2l0X3dlYl9jb250ZXh0X3NldF9mYXZpY29uX2RhdGFiYXNlX2RpcmVjdG9yeSh0ZXN0LT5tX3dl
YkNvbnRleHQsIGtUZW1wRGlyZWN0b3J5KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoa1RlbXBEaXJl
Y3RvcnksID09LCB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2VfZGlyZWN0
b3J5KHRlc3QtPm1fd2ViQ29udGV4dCkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0Q2xlYXJEYXRh
YmFzZShGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0KQoreworICAgIFdlYktpdEZhdmljb25EYXRh
YmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2Uo
dGVzdC0+bV93ZWJDb250ZXh0KTsKKyAgICB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9jbGVhcihk
YXRhYmFzZSk7CisKKyAgICBHT3duUHRyPGNoYXI+IGljb25VUkkod2Via2l0X2Zhdmljb25fZGF0
YWJhc2VfZ2V0X2Zhdmljb25fdXJpKGRhdGFiYXNlLCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIv
Zm9vIikuZGF0YSgpKSk7CisgICAgZ19hc3NlcnQoIWljb25VUkkpOworfQorCitzdGF0aWMgdm9p
ZCB0ZXN0R2V0RmF2aWNvbihGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0KQoreworICAgIC8vIFdl
IG5lZWQgdG8gbG9hZCB0aGUgcGFnZSBmaXJzdCB0byBlbnN1cmUgdGhlIGljb24gZGF0YSB3aWxs
IGJlCisgICAgLy8gaW4gdGhlIGRhdGFiYXNlIGluIGNhc2UgdGhlcmUncyBhbiBhc3NvY2lhdGVk
IGZhdmljb24uCisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvZm9v
IikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGYXZpY29uQ2hhbmdlZCgpOworICAgIENT
dHJpbmcgZmF2aWNvblVSSSA9IGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pY29uL2Zhdmljb24u
aWNvIik7CisKKyAgICAvLyBDaGVjayB0aGUgQVBJIHJldHJpZXZpbmcgYSB2YWxpZCBmYXZpY29u
LgorICAgIHRlc3QtPmdldEZhdmljb25Gb3JQYWdlVVJJQW5kV2FpdFVudGlsUmVhZHkoa1NlcnZl
ci0+Z2V0VVJJRm9yUGF0aCgiL2ZvbyIpLmRhdGEoKSk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9m
YXZpY29uKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9mYXZpY29uVVJJLmRhdGEoKSwg
PT0sIGZhdmljb25VUkkuZGF0YSgpKTsKKyAgICBnX2Fzc2VydCghdGVzdC0+bV9lcnJvcik7CisK
KyAgICAvLyBDaGVjayB0aGF0IHdpZHRoIGFuZCBoZWlnaHQgbWF0Y2ggdGhvc2UgZnJvbSBibGFu
ay5pY28gKDE2eDE2IGZhdmljb24pLgorICAgIGdfYXNzZXJ0X2NtcGludChjYWlyb19pbWFnZV9z
dXJmYWNlX2dldF93aWR0aCh0ZXN0LT5tX2Zhdmljb24pLCA9PSwgMTYpOworICAgIGdfYXNzZXJ0
X2NtcGludChjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQodGVzdC0+bV9mYXZpY29uKSwg
PT0sIDE2KTsKKworICAgIC8vIENoZWNrIHRoYXQgYW5vdGhlciBwYWdlIHdpdGggdGhlIHNhbWUg
ZmF2aWNvbiByZXR1cm4gdGhlIHNhbWUgaWNvbi4KKyAgICBjYWlyb19zdXJmYWNlX3QqIGZhdmlj
b24gPSBjYWlyb19zdXJmYWNlX3JlZmVyZW5jZSh0ZXN0LT5tX2Zhdmljb24pOworICAgIHRlc3Qt
PmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2JhciIpLmRhdGEoKSk7CisgICAgLy8g
SXQncyBhIG5ldyBwYWdlIGluIHRoZSBkYXRhYmFzZSwgc28gZmF2aWNvbiB3aWxsIGNoYW5nZSB0
d2ljZSwgZmlyc3QgdG8gcmVzZXQgaXQKKyAgICAvLyBhbmQgdGhlbiB3aGVuIHRoZSBpY29uIGlz
IGxvYWRlZC4KKyAgICB0ZXN0LT53YWl0VW50aWxGYXZpY29uQ2hhbmdlZCgpOworICAgIHRlc3Qt
PndhaXRVbnRpbEZhdmljb25DaGFuZ2VkKCk7CisgICAgdGVzdC0+Z2V0RmF2aWNvbkZvclBhZ2VV
UklBbmRXYWl0VW50aWxSZWFkeShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvYmFyIikuZGF0YSgp
KTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX2Zhdmljb24pOworICAgIGdfYXNzZXJ0X2NtcHN0cih0
ZXN0LT5tX2Zhdmljb25VUkkuZGF0YSgpLCA9PSwgZmF2aWNvblVSSS5kYXRhKCkpOworICAgIGdf
YXNzZXJ0KHRlc3QtPm1fZmF2aWNvbiA9PSBmYXZpY29uKTsKKyAgICBnX2Fzc2VydCghdGVzdC0+
bV9lcnJvcik7CisgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KGZhdmljb24pOworCisgICAgLy8g
Q2hlY2sgdGhlIEFQSSByZXRyaWV2aW5nIGFuIGludmFsaWQgZmF2aWNvbi4KKyAgICB0ZXN0LT5s
b2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9ub2Zhdmljb24iKS5kYXRhKCkpOworICAg
IHRlc3QtPndhaXRVbnRpbEZhdmljb25DaGFuZ2VkKCk7CisKKyAgICB0ZXN0LT5nZXRGYXZpY29u
Rm9yUGFnZVVSSUFuZFdhaXRVbnRpbFJlYWR5KGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9ub2Zh
dmljb24iKS5kYXRhKCkpOworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX2Zhdmljb24pOworICAgIGdf
YXNzZXJ0KHRlc3QtPm1fZXJyb3IpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0R2V0RmF2aWNvblVS
SShGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0KQoreworICAgIFdlYktpdEZhdmljb25EYXRhYmFz
ZSogZGF0YWJhc2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2UodGVz
dC0+bV93ZWJDb250ZXh0KTsKKworICAgIENTdHJpbmcgYmFzZVVSSSA9IGtTZXJ2ZXItPmdldFVS
SUZvclBhdGgoIi9mb28iKTsKKyAgICBHT3duUHRyPGNoYXI+IGljb25VUkkod2Via2l0X2Zhdmlj
b25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fdXJpKGRhdGFiYXNlLCBiYXNlVVJJLmRhdGEoKSkpOwor
ICAgIEFTU0VSVF9DTVBfQ1NUUklORyhpY29uVVJJLmdldCgpLCA9PSwga1NlcnZlci0+Z2V0VVJJ
Rm9yUGF0aCgiL2ljb24vZmF2aWNvbi5pY28iKSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJW
aWV3RmF2aWNvbihGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0KQoreworICAgIHRlc3QtPm1fZmF2
aWNvblVSSSA9IENTdHJpbmcoKTsKKworICAgIGNhaXJvX3N1cmZhY2VfdCogaWNvbkZyb21XZWJW
aWV3ID0gd2Via2l0X3dlYl92aWV3X2dldF9mYXZpY29uKHRlc3QtPm1fd2ViVmlldyk7CisgICAg
Z19hc3NlcnQoIWljb25Gcm9tV2ViVmlldyk7CisKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXIt
PmdldFVSSUZvclBhdGgoIi9mb28iKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbEZhdmlj
b25DaGFuZ2VkKCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9mYXZpY29uTm90aWZpY2F0aW9uUmVj
ZWl2ZWQpOworICAgIC8vIFRoZSBpY29uIGlzIGtub3duIGFuZCBoYXNuJ3QgY2hhbmdlZCBpbiB0
aGUgZGF0YWJhc2UsIHNvIG5vdGlmeTo6ZmF2aWNvbiBpcyBlbWl0dGVkCisgICAgLy8gYnV0IFdl
YktpdEZhdmljb25EYXRhYmFzZTo6aWNvbi1jaGFuZ2VkIGlzbid0LgorICAgIGdfYXNzZXJ0KHRl
c3QtPm1fZmF2aWNvblVSSS5pc051bGwoKSk7CisKKyAgICBpY29uRnJvbVdlYlZpZXcgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X2Zhdmljb24odGVzdC0+bV93ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChp
Y29uRnJvbVdlYlZpZXcpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQoY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9nZXRfd2lkdGgoaWNvbkZyb21XZWJWaWV3KSwgPT0sIDE2KTsKKyAgICBnX2Fzc2VydF9jbXB1
aW50KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChpY29uRnJvbVdlYlZpZXcpLCA9PSwg
MTYpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0RmF2aWNvbkRhdGFiYXNlKEZhdmljb25EYXRhYmFz
ZVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8gVGhlc2UgdGVzdHMgZGVwZW5k
IG9uIHRoaXMgb3JkZXIgdG8gcnVuIHByb3Blcmx5IHNvIHdlIGRlY2xhcmUgdGhlbSBpbiBhIHNp
bmdsZSBvbmUuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMTE0MzQuCisgICAgdGVzdE5vdEluaXRpYWxpemVkKHRlc3QpOworICAgIHRlc3RTZXRE
aXJlY3RvcnkodGVzdCk7CisgICAgdGVzdEdldEZhdmljb24odGVzdCk7CisgICAgdGVzdEdldEZh
dmljb25VUkkodGVzdCk7CisgICAgdGVzdFdlYlZpZXdGYXZpY29uKHRlc3QpOworICAgIHRlc3RD
bGVhckRhdGFiYXNlKHRlc3QpOworfQorCit2b2lkIGJlZm9yZUFsbCgpCit7CisgICAgLy8gU3Rh
cnQgYSBzb3VwIHNlcnZlciBmb3IgdGVzdGluZy4KKyAgICBrU2VydmVyID0gbmV3IFdlYktpdFRl
c3RTZXJ2ZXIoKTsKKyAgICBrU2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2spOworCisgICAga1Rl
bXBEaXJlY3RvcnkgPSBnX2Rpcl9tYWtlX3RtcCgiV2ViS2l0MlRlc3RzLVhYWFhYWCIsIDApOwor
ICAgIGdfYXNzZXJ0KGtUZW1wRGlyZWN0b3J5KTsKKworICAgIC8vIEFkZCB0ZXN0cyB0byB0aGUg
c3VpdGUuCisgICAgRmF2aWNvbkRhdGFiYXNlVGVzdDo6YWRkKCJXZWJLaXRGYXZpY29uRGF0YWJh
c2UiLCAiZmF2aWNvbi1kYXRhYmFzZS10ZXN0IiwgdGVzdEZhdmljb25EYXRhYmFzZSk7Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdEZhdmljb25EYXRhYmFzZUZpbmFsaXplZENhbGxiYWNrKGdwb2lu
dGVyLCBHT2JqZWN0KikKK3sKKyAgICBpZiAoIWdfZmlsZV90ZXN0KGtUZW1wRGlyZWN0b3J5LCBH
X0ZJTEVfVEVTVF9JU19ESVIpKQorICAgICAgICByZXR1cm47CisKKyAgICBHT3duUHRyPGNoYXI+
IGZpbGVuYW1lKGdfYnVpbGRfZmlsZW5hbWUoa1RlbXBEaXJlY3RvcnksICJXZWJwYWdlSWNvbnMu
ZGIiLCBOVUxMKSk7CisgICAgZ191bmxpbmsoZmlsZW5hbWUuZ2V0KCkpOworCisgICAgZ19ybWRp
cihrVGVtcERpcmVjdG9yeSk7Cit9CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworICAgIGRlbGV0ZSBr
U2VydmVyOworCisgICAgLy8gRGVsZXRlIHRoZSB0ZW1wb3JhcnkgZmlsZXMgYWZ0ZXIgdGhlIElj
b25EYXRhYmFzZSBoYXMgYmVlbgorICAgIC8vIGNsb3NlZCwgdGhhdCBpcywgb25jZSBXZWJLaXRG
YXZpY29uRGF0YWJhc2UgaXMgYmVpbmcgZGVzdHJveWVkLgorICAgIFdlYktpdEZhdmljb25EYXRh
YmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2Uo
d2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCkpOworICAgIGdfb2JqZWN0X3dlYWtfcmVm
KEdfT0JKRUNUKGRhdGFiYXNlKSwgd2Via2l0RmF2aWNvbkRhdGFiYXNlRmluYWxpemVkQ2FsbGJh
Y2ssIDApOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQy
R3RrL1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxlci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdEZpbmRDb250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmVlZjRjCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxlci5j
cHAKQEAgLTAsMCArMSwzMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMu
TC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkxvYWRUcmFja2luZ1Rlc3QuaCIK
KyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+CisjaW5j
bHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCitzdGF0aWMgY29uc3QgY2hhciogdGVzdFN0
cmluZyA9ICI8aHRtbD48Ym9keT5maXJzdCB0ZXN0aW5nIHNlY29uZCB0ZXN0aW5nIHNlY29uZEhh
bGY8L2JvZHk+PC9odG1sPiI7CisKK2NsYXNzIEZpbmRDb250cm9sbGVyVGVzdDogcHVibGljIFdl
YlZpZXdUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKEZpbmRDb250
cm9sbGVyVGVzdCk7CisKKyAgICBGaW5kQ29udHJvbGxlclRlc3QoKQorICAgICAgICA6IG1fZmlu
ZENvbnRyb2xsZXIod2Via2l0X3dlYl92aWV3X2dldF9maW5kX2NvbnRyb2xsZXIobV93ZWJWaWV3
KSkKKyAgICAgICAgLCBtX3J1bkZpbmRVbnRpbENvbXBsZXRpb24oZmFsc2UpCisgICAgeworICAg
ICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKG1fZmlu
ZENvbnRyb2xsZXIuZ2V0KCkpKTsKKyAgICB9CisKKyAgICB+RmluZENvbnRyb2xsZXJUZXN0KCkK
KyAgICB7CisgICAgICAgIGlmIChtX2ZpbmRDb250cm9sbGVyKQorICAgICAgICAgICAgZ19zaWdu
YWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fZmluZENvbnRyb2xsZXIuZ2V0KCksIEdf
U0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOworICAgIH0KKworICAgIHZvaWQg
ZmluZChjb25zdCBjaGFyKiBzZWFyY2hUZXh0LCBndWludDMyIGZpbmRPcHRpb25zLCBndWludCBt
YXhNYXRjaENvdW50KQorICAgIHsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX2ZpbmRDb250
cm9sbGVyLmdldCgpLCAiZm91bmQtdGV4dCIsIEdfQ0FMTEJBQ0soZm91bmRUZXh0Q2FsbGJhY2sp
LCB0aGlzKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX2ZpbmRDb250cm9sbGVyLmdldCgp
LCAiZmFpbGVkLXRvLWZpbmQtdGV4dCIsIEdfQ0FMTEJBQ0soZmFpbGVkVG9GaW5kVGV4dENhbGxi
YWNrKSwgdGhpcyk7CisgICAgICAgIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoKG1fZmlu
ZENvbnRyb2xsZXIuZ2V0KCksIHNlYXJjaFRleHQsIGZpbmRPcHRpb25zLCBtYXhNYXRjaENvdW50
KTsKKyAgICB9CisKKyAgICB2b2lkIGNvdW50KGNvbnN0IGNoYXIqIHNlYXJjaFRleHQsIGd1aW50
MzIgZmluZE9wdGlvbnMsIGd1aW50IG1heE1hdGNoQ291bnQpCisgICAgeworICAgICAgICBnX3Np
Z25hbF9jb25uZWN0KG1fZmluZENvbnRyb2xsZXIuZ2V0KCksICJjb3VudGVkLW1hdGNoZXMiLCBH
X0NBTExCQUNLKGNvdW50ZWRNYXRjaGVzQ2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgd2Via2l0
X2ZpbmRfY29udHJvbGxlcl9jb3VudF9tYXRjaGVzKG1fZmluZENvbnRyb2xsZXIuZ2V0KCksIHNl
YXJjaFRleHQsIGZpbmRPcHRpb25zLCBtYXhNYXRjaENvdW50KTsKKyAgICB9CisKKyAgICB2b2lk
IHdhaXRVbnRpbEZpbmRGaW5pc2hlZCgpCisgICAgeworICAgICAgICBtX3J1bkZpbmRVbnRpbENv
bXBsZXRpb24gPSB0cnVlOworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Cisg
ICAgfQorCisgICAgR1JlZlB0cjxXZWJLaXRGaW5kQ29udHJvbGxlcj4gbV9maW5kQ29udHJvbGxl
cjsKKyAgICBib29sIG1fdGV4dEZvdW5kOworICAgIHVuc2lnbmVkIG1fbWF0Y2hDb3VudDsKKwor
cHJpdmF0ZToKKyAgICBib29sIG1fcnVuRmluZFVudGlsQ29tcGxldGlvbjsKKworICAgIHN0YXRp
YyB2b2lkIGZvdW5kVGV4dENhbGxiYWNrKFdlYktpdEZpbmRDb250cm9sbGVyKiwgZ3VpbnQgbWF0
Y2hDb3VudCwgRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+
bV90ZXh0Rm91bmQgPSB0cnVlOworICAgICAgICB0ZXN0LT5tX21hdGNoQ291bnQgPSBtYXRjaENv
dW50OworICAgICAgICBpZiAodGVzdC0+bV9ydW5GaW5kVW50aWxDb21wbGV0aW9uKQorICAgICAg
ICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgdm9pZCBmYWlsZWRUb0ZpbmRUZXh0Q2FsbGJhY2soV2ViS2l0RmluZENvbnRyb2xsZXIq
LCBGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT5tX3RleHRG
b3VuZCA9IGZhbHNlOworICAgICAgICBpZiAodGVzdC0+bV9ydW5GaW5kVW50aWxDb21wbGV0aW9u
KQorICAgICAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9
CisKKyAgICBzdGF0aWMgdm9pZCBjb3VudGVkTWF0Y2hlc0NhbGxiYWNrKFdlYktpdEZpbmRDb250
cm9sbGVyKiwgZ3VpbnQgbWF0Y2hDb3VudCwgRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0KQorICAg
IHsKKyAgICAgICAgdGVzdC0+bV9tYXRjaENvdW50ID0gbWF0Y2hDb3VudDsKKyAgICAgICAgaWYg
KHRlc3QtPm1fcnVuRmluZFVudGlsQ29tcGxldGlvbikKKyAgICAgICAgICAgIGdfbWFpbl9sb29w
X3F1aXQodGVzdC0+bV9tYWluTG9vcCk7CisgICAgfQorfTsKKworc3RhdGljIHZvaWQgdGVzdEZp
bmRDb250cm9sbGVyVGV4dEZvdW5kKEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCwgZ2NvbnN0cG9p
bnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0U3RyaW5nLCAwKTsKKyAgICB0ZXN0LT53
YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3QtPmZpbmQoInRlc3RpbmciLCBXRUJL
SVRfRklORF9PUFRJT05TX05PTkUsIDEpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hl
ZCgpOworCisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOworfQorCitzdGF0aWMgdm9p
ZCB0ZXN0RmluZENvbnRyb2xsZXJUZXh0Tm90Rm91bmQoRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRIdG1sKHRlc3RTdHJpbmcsIDApOwor
ICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+ZmluZCgibm90
Rm91bmQiLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUsIDEpOworICAgIHRlc3QtPndhaXRVbnRp
bEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQoIXRlc3QtPm1fdGV4dEZvdW5kKTsKK30K
Kworc3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVyTWF0Y2hDb3VudChGaW5kQ29udHJvbGxl
clRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwodGVzdFN0
cmluZywgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0
LT5maW5kKCJ0ZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAyKTsKKyAgICB0ZXN0
LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPm1fbWF0Y2hD
b3VudCA9PSAyKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7Cit9CisKK3N0YXRp
YyB2b2lkIHRlc3RGaW5kQ29udHJvbGxlck1heE1hdGNoQ291bnQoRmluZENvbnRyb2xsZXJUZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRIdG1sKHRlc3RTdHJpbmcs
IDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+Zmlu
ZCgidGVzdGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwgMSk7CisgICAgdGVzdC0+d2Fp
dFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX21hdGNoQ291bnQg
PT0gR19NQVhVSU5UKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7Cit9CisKK3N0
YXRpYyB2b2lkIHRlc3RGaW5kQ29udHJvbGxlck5leHQoRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRIdG1sKHRlc3RTdHJpbmcsIDApOwor
ICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+ZmluZCgidGVz
dGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwgMik7CisgICAgdGVzdC0+d2FpdFVudGls
RmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7CisgICAg
Z19hc3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09IDIpOworCisgICAgd2Via2l0X2ZpbmRfY29u
dHJvbGxlcl9zZWFyY2hfbmV4dCh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKTsKKyAgICB0
ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4
dEZvdW5kKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX21hdGNoQ291bnQgPT0gMSk7CisgICAgZ19h
c3NlcnQoISh3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9vcHRpb25zKHRlc3QtPm1fZmluZENv
bnRyb2xsZXIuZ2V0KCkpICYgV0VCS0lUX0ZJTkRfT1BUSU9OU19CQUNLV0FSRFMpKTsKKworICAg
IHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX25leHQodGVzdC0+bV9maW5kQ29udHJvbGxl
ci5nZXQoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fz
c2VydCghdGVzdC0+bV90ZXh0Rm91bmQpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fbWF0Y2hDb3Vu
dCA9PSAxKTsKKyAgICBnX2Fzc2VydCghKHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X29wdGlv
bnModGVzdC0+bV9maW5kQ29udHJvbGxlci5nZXQoKSkgJiBXRUJLSVRfRklORF9PUFRJT05TX0JB
Q0tXQVJEUykpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xsZXJQcmV2aW91cyhG
aW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9h
ZEh0bWwodGVzdFN0cmluZywgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7
CisKKyAgICB0ZXN0LT5maW5kKCJ0ZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAy
KTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRl
c3QtPm1fbWF0Y2hDb3VudCA9PSAyKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7
CisKKyAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF9uZXh0KHRlc3QtPm1fZmluZENv
bnRyb2xsZXIuZ2V0KCkpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworCisg
ICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fbWF0
Y2hDb3VudCA9PSAxKTsKKyAgICBnX2Fzc2VydCghKHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0
X29wdGlvbnModGVzdC0+bV9maW5kQ29udHJvbGxlci5nZXQoKSkgJiBXRUJLSVRfRklORF9PUFRJ
T05TX0JBQ0tXQVJEUykpOworCisgICAgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfcHJl
dmlvdXModGVzdC0+bV9maW5kQ29udHJvbGxlci5nZXQoKSk7CisgICAgdGVzdC0+d2FpdFVudGls
RmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7CisgICAg
Z19hc3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09IDEpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9m
aW5kX2NvbnRyb2xsZXJfZ2V0X29wdGlvbnModGVzdC0+bV9maW5kQ29udHJvbGxlci5nZXQoKSkg
JiBXRUJLSVRfRklORF9PUFRJT05TX0JBQ0tXQVJEUyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RG
aW5kQ29udHJvbGxlckNvdW50ZWRNYXRjaGVzKEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCwgZ2Nv
bnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0U3RyaW5nLCAwKTsKKyAgICB0
ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3QtPmNvdW50KCJ0ZXN0aW5n
IiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5k
RmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPm1fbWF0Y2hDb3VudCA9PSAyKTsKKwor
ICAgIHRlc3QtPmNvdW50KCJmaXJzdCIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwgMik7Cisg
ICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCh0ZXN0LT5t
X21hdGNoQ291bnQgPT0gMSk7CisKKyAgICB0ZXN0LT5jb3VudCgibm90Rm91bmQiLCBXRUJLSVRf
RklORF9PUFRJT05TX05PTkUsIDIpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgp
OworCisgICAgZ19hc3NlcnQoIXRlc3QtPm1fbWF0Y2hDb3VudCk7Cit9CisKK3N0YXRpYyB2b2lk
IHRlc3RGaW5kQ29udHJvbGxlck9wdGlvbnMoRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0LCBnY29u
c3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRIdG1sKHRlc3RTdHJpbmcsIDApOworICAgIHRl
c3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+ZmluZCgiVGVzdGluZyIs
IFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwgMik7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZp
bmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCghdGVzdC0+bV90ZXh0Rm91bmQpOworCisgICAgdGVz
dC0+ZmluZCgiVGVzdGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNfQ0FTRV9JTlNFTlNJVElWRSwg
Mik7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCh0
ZXN0LT5tX3RleHRGb3VuZCk7CisKKyAgICB0ZXN0LT5maW5kKCJlc3RpbmciLCBXRUJLSVRfRklO
RF9PUFRJT05TX05PTkUsIDIpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOwor
CisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOworCisgICAgdGVzdC0+ZmluZCgiZXN0
aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19BVF9XT1JEX1NUQVJUUywgMik7CisgICAgdGVzdC0+
d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCghdGVzdC0+bV90ZXh0Rm91
bmQpOworCisgICAgdGVzdC0+ZmluZCgiSGFsZiIsIFdFQktJVF9GSU5EX09QVElPTlNfQVRfV09S
RF9TVEFSVFMsIDIpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAg
Z19hc3NlcnQoIXRlc3QtPm1fdGV4dEZvdW5kKTsKKworICAgIHRlc3QtPmZpbmQoIkhhbGYiLCBX
RUJLSVRfRklORF9PUFRJT05TX0FUX1dPUkRfU1RBUlRTIHwgV0VCS0lUX0ZJTkRfT1BUSU9OU19U
UkVBVF9NRURJQUxfQ0FQSVRBTF9BU19XT1JEX1NUQVJULCAyKTsKKyAgICB0ZXN0LT53YWl0VW50
aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKKwor
ICAgIHRlc3QtPmZpbmQoInRlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05TX1dSQVBfQVJPVU5E
LCAzKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydCh0
ZXN0LT5tX3RleHRGb3VuZCk7CisKKyAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF9u
ZXh0KHRlc3QtPm1fZmluZENvbnRyb2xsZXIuZ2V0KCkpOworICAgIHRlc3QtPndhaXRVbnRpbEZp
bmRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKKworICAgIHdl
YmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX25leHQodGVzdC0+bV9maW5kQ29udHJvbGxlci5n
ZXQoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnQo
dGVzdC0+bV90ZXh0Rm91bmQpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xsZXJI
aWRlKEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0
LT5sb2FkSHRtbCh0ZXN0U3RyaW5nLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNo
ZWQoKTsKKworICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOworCisg
ICAgY2Fpcm9fc3VyZmFjZV90KiBvcmlnaW5hbFN1cmZhY2UgPSBjYWlyb19zdXJmYWNlX3JlZmVy
ZW5jZSgKKyAgICAgICAgdGVzdC0+Z2V0U25hcHNob3RBbmRXYWl0VW50aWxSZWFkeShXRUJLSVRf
U05BUFNIT1RfUkVHSU9OX0ZVTExfRE9DVU1FTlQsIFdFQktJVF9TTkFQU0hPVF9PUFRJT05TX05P
TkUpKTsKKyAgICBnX2Fzc2VydChvcmlnaW5hbFN1cmZhY2UpOworCisgICAgdGVzdC0+ZmluZCgi
dGVzdGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwgMSk7CisgICAgdGVzdC0+d2FpdFVu
dGlsRmluZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOworCisg
ICAgY2Fpcm9fc3VyZmFjZV90KiBoaWdobGlnaHRTdXJmYWNlID0gY2Fpcm9fc3VyZmFjZV9yZWZl
cmVuY2UoCisgICAgICAgIHRlc3QtPmdldFNuYXBzaG90QW5kV2FpdFVudGlsUmVhZHkoV0VCS0lU
X1NOQVBTSE9UX1JFR0lPTl9GVUxMX0RPQ1VNRU5ULCBXRUJLSVRfU05BUFNIT1RfT1BUSU9OU19O
T05FKSk7CisgICAgZ19hc3NlcnQoaGlnaGxpZ2h0U3VyZmFjZSk7CisgICAgZ19hc3NlcnQoIVRl
c3Q6OmNhaXJvU3VyZmFjZXNFcXVhbChvcmlnaW5hbFN1cmZhY2UsIGhpZ2hsaWdodFN1cmZhY2Up
KTsKKworICAgIFdlYktpdEZpbmRDb250cm9sbGVyKiBmaW5kQ29udHJvbGxlciA9IHdlYmtpdF93
ZWJfdmlld19nZXRfZmluZF9jb250cm9sbGVyKHRlc3QtPm1fd2ViVmlldyk7CisgICAgd2Via2l0
X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfZmluaXNoKGZpbmRDb250cm9sbGVyKTsKKyAgICB3ZWJr
aXRfd2ViX3ZpZXdfZXhlY3V0ZV9lZGl0aW5nX2NvbW1hbmQodGVzdC0+bV93ZWJWaWV3LCAiVW5z
ZWxlY3QiKTsKKworICAgIGNhaXJvX3N1cmZhY2VfdCogdW5oaWdobGlnaHRTdXJmYWNlID0gY2Fp
cm9fc3VyZmFjZV9yZWZlcmVuY2UoCisgICAgICAgIHRlc3QtPmdldFNuYXBzaG90QW5kV2FpdFVu
dGlsUmVhZHkoV0VCS0lUX1NOQVBTSE9UX1JFR0lPTl9GVUxMX0RPQ1VNRU5ULCBXRUJLSVRfU05B
UFNIT1RfT1BUSU9OU19OT05FKSk7CisgICAgZ19hc3NlcnQodW5oaWdobGlnaHRTdXJmYWNlKTsK
KyAgICBnX2Fzc2VydChUZXN0OjpjYWlyb1N1cmZhY2VzRXF1YWwob3JpZ2luYWxTdXJmYWNlLCB1
bmhpZ2hsaWdodFN1cmZhY2UpKTsKKworICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShvcmlnaW5h
bFN1cmZhY2UpOworICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShoaWdobGlnaHRTdXJmYWNlKTsK
KyAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3kodW5oaWdobGlnaHRTdXJmYWNlKTsKK30KKworc3Rh
dGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVySW5zdGFuY2UoRmluZENvbnRyb2xsZXJUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIFdlYktpdEZpbmRDb250cm9sbGVyKiBmaW5kQ29u
dHJvbGxlcjEgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ZpbmRfY29udHJvbGxlcih0ZXN0LT5tX3dl
YlZpZXcpOworICAgIFdlYktpdEZpbmRDb250cm9sbGVyKiBmaW5kQ29udHJvbGxlcjIgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X2ZpbmRfY29udHJvbGxlcih0ZXN0LT5tX3dlYlZpZXcpOworCisgICAg
Z19hc3NlcnQoZmluZENvbnRyb2xsZXIxID09IGZpbmRDb250cm9sbGVyMik7Cit9CisKK3N0YXRp
YyB2b2lkIHRlc3RGaW5kQ29udHJvbGxlckdldHRlcnMoRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQoreworICAgIGNvbnN0IGNoYXIqIHNlYXJjaFRleHQgPSAidGVzdGlu
ZyI7CisgICAgZ3VpbnQgbWF4TWF0Y2hDb3VudCA9IDE7CisgICAgZ3VpbnQzMiBmaW5kT3B0aW9u
cyA9IFdFQktJVF9GSU5EX09QVElPTlNfV1JBUF9BUk9VTkQgfCBXRUJLSVRfRklORF9PUFRJT05T
X0FUX1dPUkRfU1RBUlRTOworICAgIFdlYktpdEZpbmRDb250cm9sbGVyKiBmaW5kQ29udHJvbGxl
ciA9IHdlYmtpdF93ZWJfdmlld19nZXRfZmluZF9jb250cm9sbGVyKHRlc3QtPm1fd2ViVmlldyk7
CisKKyAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaChmaW5kQ29udHJvbGxlciwgc2Vh
cmNoVGV4dCwgZmluZE9wdGlvbnMsIG1heE1hdGNoQ291bnQpOworICAgIGdfYXNzZXJ0KHdlYmtp
dF9maW5kX2NvbnRyb2xsZXJfZ2V0X3dlYl92aWV3KGZpbmRDb250cm9sbGVyKSA9PSB0ZXN0LT5t
X3dlYlZpZXcpOworICAgIGdfYXNzZXJ0KCFnX3N0cmNtcDAod2Via2l0X2ZpbmRfY29udHJvbGxl
cl9nZXRfc2VhcmNoX3RleHQoZmluZENvbnRyb2xsZXIpLCBzZWFyY2hUZXh0KSk7CisgICAgZ19h
c3NlcnQod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfbWF4X21hdGNoX2NvdW50KGZpbmRDb250
cm9sbGVyKSA9PSBtYXhNYXRjaENvdW50KTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfZmluZF9jb250
cm9sbGVyX2dldF9vcHRpb25zKGZpbmRDb250cm9sbGVyKSA9PSBmaW5kT3B0aW9ucyk7Cit9CisK
K3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICBGaW5kQ29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0
RmluZENvbnRyb2xsZXIiLCAiZ2V0dGVycyIsIHRlc3RGaW5kQ29udHJvbGxlckdldHRlcnMpOwor
ICAgIEZpbmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udHJvbGxlciIsICJpbnN0
YW5jZSIsIHRlc3RGaW5kQ29udHJvbGxlckluc3RhbmNlKTsKKyAgICBGaW5kQ29udHJvbGxlclRl
c3Q6OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIiLCAidGV4dC1mb3VuZCIsIHRlc3RGaW5kQ29u
dHJvbGxlclRleHRGb3VuZCk7CisgICAgRmluZENvbnRyb2xsZXJUZXN0OjphZGQoIldlYktpdEZp
bmRDb250cm9sbGVyIiwgInRleHQtbm90LWZvdW5kIiwgdGVzdEZpbmRDb250cm9sbGVyVGV4dE5v
dEZvdW5kKTsKKyAgICBGaW5kQ29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRyb2xs
ZXIiLCAibWF0Y2gtY291bnQiLCB0ZXN0RmluZENvbnRyb2xsZXJNYXRjaENvdW50KTsKKyAgICBG
aW5kQ29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIiLCAibWF4LW1hdGNo
LWNvdW50IiwgdGVzdEZpbmRDb250cm9sbGVyTWF4TWF0Y2hDb3VudCk7CisgICAgRmluZENvbnRy
b2xsZXJUZXN0OjphZGQoIldlYktpdEZpbmRDb250cm9sbGVyIiwgIm5leHQiLCB0ZXN0RmluZENv
bnRyb2xsZXJOZXh0KTsKKyAgICBGaW5kQ29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENv
bnRyb2xsZXIiLCAicHJldmlvdXMiLCB0ZXN0RmluZENvbnRyb2xsZXJQcmV2aW91cyk7CisgICAg
RmluZENvbnRyb2xsZXJUZXN0OjphZGQoIldlYktpdEZpbmRDb250cm9sbGVyIiwgImNvdW50ZWQt
bWF0Y2hlcyIsIHRlc3RGaW5kQ29udHJvbGxlckNvdW50ZWRNYXRjaGVzKTsKKyAgICBGaW5kQ29u
dHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIiLCAib3B0aW9ucyIsIHRlc3RG
aW5kQ29udHJvbGxlck9wdGlvbnMpOworICAgIEZpbmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJL
aXRGaW5kQ29udHJvbGxlciIsICJoaWRlIiwgdGVzdEZpbmRDb250cm9sbGVySGlkZSk7Cit9CisK
K3ZvaWQgYWZ0ZXJBbGwoKQoreworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRQb2xpY3lDbGllbnQuY3BwIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRQb2xpY3lDbGllbnQuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwOWVhMDQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFBvbGljeUNs
aWVudC5jcHAKQEAgLTAsMCArMSwyNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdh
bGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiTG9hZFRyYWNraW5nVGVz
dC5oIgorI2luY2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKKyNpbmNsdWRlIDx3dGYvZ29iamVj
dC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCitzdGF0aWMgV2Vi
S2l0VGVzdFNlcnZlcioga1NlcnZlcjsKKworY2xhc3MgUG9saWN5Q2xpZW50VGVzdDogcHVibGlj
IExvYWRUcmFja2luZ1Rlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUo
UG9saWN5Q2xpZW50VGVzdCk7CisKKyAgICBlbnVtIFBvbGljeURlY2lzaW9uUmVzcG9uc2Ugewor
ICAgICAgICBVc2UsCisgICAgICAgIElnbm9yZSwKKyAgICAgICAgRG93bmxvYWQsCisgICAgICAg
IE5vbmUKKyAgICB9OworCisgICAgUG9saWN5Q2xpZW50VGVzdCgpCisgICAgICAgIDogTG9hZFRy
YWNraW5nVGVzdCgpCisgICAgICAgICwgbV9wb2xpY3lEZWNpc2lvblJlc3BvbnNlKE5vbmUpCisg
ICAgICAgICwgbV9wb2xpY3lEZWNpc2lvblR5cGVGaWx0ZXIoMCkKKyAgICAgICAgLCBtX3Jlc3Bv
bmRUb1BvbGljeURlY2lzaW9uQXN5bmNocm9ub3VzbHkoZmFsc2UpCisgICAgICAgICwgbV9oYWx0
TWFpbkxvb3BBZnRlck1ha2luZ0RlY2lzaW9uKGZhbHNlKQorICAgIHsKKyAgICAgICAgZ19zaWdu
YWxfY29ubmVjdChtX3dlYlZpZXcsICJkZWNpZGUtcG9saWN5IiwgR19DQUxMQkFDSyhkZWNpZGVQ
b2xpY3lDYWxsYmFjayksIHRoaXMpOworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBxdWl0
TWFpbkxvb3BMYXRlcihHTWFpbkxvb3AqIGxvb3ApCisgICAgeworICAgICAgICBnX21haW5fbG9v
cF9xdWl0KGxvb3ApOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgc3RhdGlj
IHZvaWQgcmVzcG9uZFRvUG9saWN5RGVjaXNpb24oUG9saWN5Q2xpZW50VGVzdCogdGVzdCwgV2Vi
S2l0UG9saWN5RGVjaXNpb24qIGRlY2lzaW9uKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0ZXN0
LT5tX3BvbGljeURlY2lzaW9uUmVzcG9uc2UpIHsKKyAgICAgICAgY2FzZSBVc2U6CisgICAgICAg
ICAgICB3ZWJraXRfcG9saWN5X2RlY2lzaW9uX3VzZShkZWNpc2lvbik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBJZ25vcmU6CisgICAgICAgICAgICB3ZWJraXRfcG9saWN5X2Rl
Y2lzaW9uX2lnbm9yZShkZWNpc2lvbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBEb3dubG9hZDoKKyAgICAgICAgICAgIHdlYmtpdF9wb2xpY3lfZGVjaXNpb25fZG93bmxvYWQo
ZGVjaXNpb24pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTm9uZToKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRlc3QtPm1faGFsdE1haW5M
b29wQWZ0ZXJNYWtpbmdEZWNpc2lvbikKKyAgICAgICAgICAgIGdfaWRsZV9hZGQocmVpbnRlcnBy
ZXRfY2FzdDxHU291cmNlRnVuYz4ocXVpdE1haW5Mb29wTGF0ZXIpLCB0ZXN0LT5tX21haW5Mb29w
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gcmVzcG9uZFRvUG9saWN5RGVjaXNpb25M
YXRlcihQb2xpY3lDbGllbnRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgcmVzcG9uZFRvUG9s
aWN5RGVjaXNpb24odGVzdCwgdGVzdC0+bV9wcmV2aW91c1BvbGljeURlY2lzaW9uLmdldCgpKTsK
KyAgICAgICAgdGVzdC0+bV9wcmV2aW91c1BvbGljeURlY2lzaW9uID0gMDsKKyAgICAgICAgcmV0
dXJuIEZBTFNFOworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBkZWNpZGVQb2xpY3lDYWxs
YmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRQb2xpY3lEZWNpc2lvbiogZGVjaXNp
b24sIFdlYktpdFBvbGljeURlY2lzaW9uVHlwZSB0eXBlLCBQb2xpY3lDbGllbnRUZXN0KiB0ZXN0
KQorICAgIHsKKyAgICAgICAgaWYgKHRlc3QtPm1fcG9saWN5RGVjaXNpb25UeXBlRmlsdGVyICE9
IHR5cGUpCisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICAgICAgdGVzdC0+bV9wcmV2
aW91c1BvbGljeURlY2lzaW9uID0gZGVjaXNpb247CisgICAgICAgIGlmICh0ZXN0LT5tX3Jlc3Bv
bmRUb1BvbGljeURlY2lzaW9uQXN5bmNocm9ub3VzbHkpIHsKKyAgICAgICAgICAgIGdfaWRsZV9h
ZGQocmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4ocmVzcG9uZFRvUG9saWN5RGVjaXNpb25M
YXRlciksIHRlc3QpOworICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0KKworICAg
ICAgICByZXNwb25kVG9Qb2xpY3lEZWNpc2lvbih0ZXN0LCBkZWNpc2lvbik7CisKKyAgICAgICAg
Ly8gV2UgcmV0dXJuIEZBTFNFIGhlcmUgdG8gZW5zdXJlIHRoYXQgdGhlIGRlZmF1bHQgcG9saWN5
IGRlY2lzaW9uCisgICAgICAgIC8vIGhhbmRsZXIgZG9lc24ndCBvdmVycmlkZSB3aGF0ZXZlciB3
ZSB1c2UgaGVyZS4KKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIFBvbGljeURl
Y2lzaW9uUmVzcG9uc2UgbV9wb2xpY3lEZWNpc2lvblJlc3BvbnNlOworICAgIGludCBtX3BvbGlj
eURlY2lzaW9uVHlwZUZpbHRlcjsKKyAgICBib29sIG1fcmVzcG9uZFRvUG9saWN5RGVjaXNpb25B
c3luY2hyb25vdXNseTsKKyAgICBib29sIG1faGFsdE1haW5Mb29wQWZ0ZXJNYWtpbmdEZWNpc2lv
bjsKKyAgICBHUmVmUHRyPFdlYktpdFBvbGljeURlY2lzaW9uPiBtX3ByZXZpb3VzUG9saWN5RGVj
aXNpb247Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0TmF2aWdhdGlvblBvbGljeShQb2xpY3lDbGll
bnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPm1fcG9saWN5RGVjaXNp
b25UeXBlRmlsdGVyID0gV0VCS0lUX1BPTElDWV9ERUNJU0lPTl9UWVBFX05BVklHQVRJT05fQUNU
SU9OOworCisgICAgdGVzdC0+bV9wb2xpY3lEZWNpc2lvblJlc3BvbnNlID0gUG9saWN5Q2xpZW50
VGVzdDo6VXNlOworICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbC8+IiwgImh0dHA6Ly93ZWJraXRn
dGsub3JnLyIpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIGdfYXNz
ZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHMuc2l6ZSgpLCA9PSwgMyk7CisKKyAgICAvLyBJ
ZGVhbGx5IHdlJ2QgbGlrZSB0byBoYXZlIGEgbW9yZSBpbnRlbnNpdmUgdGVzdCBoZXJlLCBidXQg
aXQncyBzdGlsbCBwcmV0dHkgdHJpY2t5CisgICAgLy8gdG8gdHJpZ2dlciBkaWZmZXJlbnQgdHlw
ZXMgb2YgbmF2aWdhdGlvbnMgd2l0aCB0aGUgR1RLKyBXZWJLaXQyIEFQSS4KKyAgICBXZWJLaXRO
YXZpZ2F0aW9uUG9saWN5RGVjaXNpb24qIGRlY2lzaW9uID0gV0VCS0lUX05BVklHQVRJT05fUE9M
SUNZX0RFQ0lTSU9OKHRlc3QtPm1fcHJldmlvdXNQb2xpY3lEZWNpc2lvbi5nZXQoKSk7CisgICAg
Z19hc3NlcnRfY21waW50KHdlYmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRfbmF2
aWdhdGlvbl90eXBlKGRlY2lzaW9uKSwgPT0sIFdFQktJVF9OQVZJR0FUSU9OX1RZUEVfT1RIRVIp
OworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25f
Z2V0X21vdXNlX2J1dHRvbihkZWNpc2lvbiksID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
d2Via2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF9tb2RpZmllcnMoZGVjaXNpb24p
LCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9k
ZWNpc2lvbl9nZXRfZnJhbWVfbmFtZShkZWNpc2lvbiksID09LCAwKTsKKyAgICBXZWJLaXRVUklS
ZXF1ZXN0KiByZXF1ZXN0ID0gd2Via2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF9y
ZXF1ZXN0KGRlY2lzaW9uKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3VyaV9yZXF1ZXN0
X2dldF91cmkocmVxdWVzdCksID09LCAiaHR0cDovL3dlYmtpdGd0ay5vcmcvIik7CisKKyAgICB0
ZXN0LT5tX3BvbGljeURlY2lzaW9uUmVzcG9uc2UgPSBQb2xpY3lDbGllbnRUZXN0OjpVc2U7Cisg
ICAgdGVzdC0+bV9yZXNwb25kVG9Qb2xpY3lEZWNpc2lvbkFzeW5jaHJvbm91c2x5ID0gdHJ1ZTsK
KyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWwvPiIsICJodHRwOi8vd2Via2l0Z3RrLm9yZy8iKTsK
KyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
dGVzdC0+bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0sIDMpOworCisgICAgLy8gSWYgd2UgYXJlIHdh
aXRpbmcgdW50aWwgbG9hZCBjb21wbGV0aW9uLCBpdCB3aWxsIG5ldmVyIGNvbXBsZXRlIGlmIHdl
IGlnbm9yZSB0aGUKKyAgICAvLyBuYXZpZ2F0aW9uLiBTbyB3ZSB0ZWxsIHRoZSBtYWluIGxvb3Ag
dG8gcXVpdCBzb21ldGltZSBsYXRlci4KKyAgICB0ZXN0LT5tX3BvbGljeURlY2lzaW9uUmVzcG9u
c2UgPSBQb2xpY3lDbGllbnRUZXN0OjpJZ25vcmU7CisgICAgdGVzdC0+bV9yZXNwb25kVG9Qb2xp
Y3lEZWNpc2lvbkFzeW5jaHJvbm91c2x5ID0gZmFsc2U7CisgICAgdGVzdC0+bV9oYWx0TWFpbkxv
b3BBZnRlck1ha2luZ0RlY2lzaW9uID0gdHJ1ZTsKKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWwv
PiIsICJodHRwOi8vd2Via2l0Z3RrLm9yZy8iKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmlu
aXNoZWQoKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzLnNpemUoKSwg
PT0sIDApOworCisgICAgdGVzdC0+bV9wb2xpY3lEZWNpc2lvblJlc3BvbnNlID0gUG9saWN5Q2xp
ZW50VGVzdDo6SWdub3JlOworICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbC8+IiwgImh0dHA6Ly93
ZWJraXRndGsub3JnLyIpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAg
IGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHMuc2l6ZSgpLCA9PSwgMCk7Cit9CisK
K3N0YXRpYyB2b2lkIHRlc3RSZXNwb25zZVBvbGljeShQb2xpY3lDbGllbnRUZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPm1fcG9saWN5RGVjaXNpb25UeXBlRmlsdGVyID0g
V0VCS0lUX1BPTElDWV9ERUNJU0lPTl9UWVBFX1JFU1BPTlNFOworCisgICAgdGVzdC0+bV9wb2xp
Y3lEZWNpc2lvblJlc3BvbnNlID0gUG9saWN5Q2xpZW50VGVzdDo6VXNlOworICAgIHRlc3QtPmxv
YWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2Fp
dFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2
ZW50cy5zaXplKCksID09LCAzKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZl
bnRzWzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7Cisg
ICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2lu
Z1Rlc3Q6OkxvYWRDb21taXR0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRF
dmVudHNbMl0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOworCisgICAgV2Vi
S2l0UmVzcG9uc2VQb2xpY3lEZWNpc2lvbiogZGVjaXNpb24gPSBXRUJLSVRfUkVTUE9OU0VfUE9M
SUNZX0RFQ0lTSU9OKHRlc3QtPm1fcHJldmlvdXNQb2xpY3lEZWNpc2lvbi5nZXQoKSk7CisgICAg
V2ViS2l0VVJJUmVxdWVzdCogcmVxdWVzdCA9IHdlYmtpdF9yZXNwb25zZV9wb2xpY3lfZGVjaXNp
b25fZ2V0X3JlcXVlc3QoZGVjaXNpb24pOworICAgIGdfYXNzZXJ0KFdFQktJVF9JU19VUklfUkVR
VUVTVChyZXF1ZXN0KSk7CisgICAgQVNTRVJUX0NNUF9DU1RSSU5HKHdlYmtpdF91cmlfcmVxdWVz
dF9nZXRfdXJpKHJlcXVlc3QpLCA9PSwga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpKTsKKyAg
ICBXZWJLaXRVUklSZXNwb25zZSogcmVzcG9uc2UgPSB3ZWJraXRfcmVzcG9uc2VfcG9saWN5X2Rl
Y2lzaW9uX2dldF9yZXNwb25zZShkZWNpc2lvbik7CisgICAgZ19hc3NlcnQoV0VCS0lUX0lTX1VS
SV9SRVNQT05TRShyZXNwb25zZSkpOworICAgIEFTU0VSVF9DTVBfQ1NUUklORyh3ZWJraXRfdXJp
X3Jlc3BvbnNlX2dldF91cmkocmVzcG9uc2UpLCA9PSwga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgi
LyIpKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfY2FuX3Nob3dfbWltZV90eXBlKHRl
c3QtPm1fd2ViVmlldywgd2Via2l0X3VyaV9yZXNwb25zZV9nZXRfbWltZV90eXBlKHJlc3BvbnNl
KSkgPT0KKyAgICAgICAgd2Via2l0X3Jlc3BvbnNlX3BvbGljeV9kZWNpc2lvbl9pc19taW1lX3R5
cGVfc3VwcG9ydGVkKGRlY2lzaW9uKSk7CisKKyAgICB0ZXN0LT5tX3Jlc3BvbmRUb1BvbGljeURl
Y2lzaW9uQXN5bmNocm9ub3VzbHkgPSB0cnVlOworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+
Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlz
aGVkKCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50cy5zaXplKCksID09
LCAzKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzBdLCA9PSwgTG9h
ZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7CisgICAgZ19hc3NlcnRfY21w
aW50KHRlc3QtPm1fbG9hZEV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRDb21t
aXR0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMl0sID09LCBM
b2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOworCisgICAgdGVzdC0+bV9yZXNwb25kVG9Q
b2xpY3lEZWNpc2lvbkFzeW5jaHJvbm91c2x5ID0gZmFsc2U7CisgICAgdGVzdC0+bV9wb2xpY3lE
ZWNpc2lvblJlc3BvbnNlID0gUG9saWN5Q2xpZW50VGVzdDo6SWdub3JlOworICAgIHRlc3QtPmxv
YWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2Fp
dFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2Fk
RXZlbnRzLnNpemUoKSwgPT0sIDMpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRF
dmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNr
aW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkRmFpbGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVz
dC0+bV9sb2FkRXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsK
K30KKworc3RydWN0IENyZWF0ZUNhbGxiYWNrRGF0YSB7CisgICAgYm9vbCB0cmllZFRvT3Blbldp
bmRvdzsKKyAgICBHTWFpbkxvb3AqIG1haW5Mb29wOworfTsKKworc3RhdGljIFdlYktpdFdlYlZp
ZXcqIGNyZWF0ZUNhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIENyZWF0ZUNhbGxiYWNr
RGF0YSogZGF0YSkKK3sKKyAgICBkYXRhLT50cmllZFRvT3BlbldpbmRvdyA9IHRydWU7CisgICAg
Z19tYWluX2xvb3BfcXVpdChkYXRhLT5tYWluTG9vcCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0
YXRpYyB2b2lkIHRlc3ROZXdXaW5kb3dQb2xpY3koUG9saWN5Q2xpZW50VGVzdCogdGVzdCwgZ2Nv
bnN0cG9pbnRlcikKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciogd2luZG93T3BlbmluZ0hUTUwg
PQorICAgICAgICAiPGh0bWw+PGJvZHk+IgorICAgICAgICAiICAgIDxhIGlkPVwibGlua1wiIGhy
ZWY9XCJodHRwOi8vd3d3Lmdvb2dsZS5jb21cIiB0YXJnZXQ9XCJfYmxhbmtcIj5MaW5rPC9hPiIK
KyAgICAgICAgIiAgICA8c2NyaXB0PiIKKyAgICAgICAgIiAgICAgICAgdmFyIGV2ZW50ID0gZG9j
dW1lbnQuY3JlYXRlRXZlbnQoJ01vdXNlRXZlbnRzJyk7IgorICAgICAgICAiICAgICAgICBldmVu
dC5pbml0RXZlbnQoJ2NsaWNrJywgdHJ1ZSwgZmFsc2UpOyIKKyAgICAgICAgIiAgICAgICAgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xpbmsnKS5kaXNwYXRjaEV2ZW50KGV2ZW50KTsiCisgICAg
ICAgICIgICAgPC9zY3JpcHQ+IgorICAgICAgICAiPC9ib2R5PjwvaHRtbD4iOworICAgIHRlc3Qt
Pm1fcG9saWN5RGVjaXNpb25UeXBlRmlsdGVyID0gV0VCS0lUX1BPTElDWV9ERUNJU0lPTl9UWVBF
X05FV19XSU5ET1dfQUNUSU9OOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfamF2YXNjcmlwdF9j
YW5fb3Blbl93aW5kb3dzX2F1dG9tYXRpY2FsbHkod2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5n
cyh0ZXN0LT5tX3dlYlZpZXcpLCBUUlVFKTsKKworICAgIENyZWF0ZUNhbGxiYWNrRGF0YSBkYXRh
OworICAgIGRhdGEudHJpZWRUb09wZW5XaW5kb3cgPSBmYWxzZTsKKyAgICBkYXRhLm1haW5Mb29w
ID0gdGVzdC0+bV9tYWluTG9vcDsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3QodGVzdC0+bV93ZWJW
aWV3LCAiY3JlYXRlIiwgR19DQUxMQkFDSyhjcmVhdGVDYWxsYmFjayksICZkYXRhKTsKKyAgICB0
ZXN0LT5tX3BvbGljeURlY2lzaW9uUmVzcG9uc2UgPSBQb2xpY3lDbGllbnRUZXN0OjpVc2U7Cisg
ICAgdGVzdC0+bG9hZEh0bWwod2luZG93T3BlbmluZ0hUTUwsICJodHRwOi8vd2Via2l0Z3RrLm9y
Zy8iKTsKKyAgICB0ZXN0LT53YWl0KDEpOworICAgIGdfYXNzZXJ0KGRhdGEudHJpZWRUb09wZW5X
aW5kb3cpOworCisgICAgV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uKiBkZWNpc2lvbiA9
IFdFQktJVF9OQVZJR0FUSU9OX1BPTElDWV9ERUNJU0lPTih0ZXN0LT5tX3ByZXZpb3VzUG9saWN5
RGVjaXNpb24uZ2V0KCkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfbmF2aWdhdGlvbl9w
b2xpY3lfZGVjaXNpb25fZ2V0X2ZyYW1lX25hbWUoZGVjaXNpb24pLCA9PSwgIl9ibGFuayIpOwor
CisgICAgLy8gVXNpbmcgYSBzaG9ydCB0aW1lb3V0IGlzIGEgYml0IHVnbHkgaGVyZSwgYnV0IGl0
J3MgaGFyZCB0byBnZXQgYXJvdW5kIGJlY2F1c2UgaWYgd2UgYmxvY2sKKyAgICAvLyB0aGUgbmV3
IHdpbmRvdyBzaWduYWwgd2UgY2Fubm90IGhhbHQgdGhlIG1haW4gbG9vcCBpbiB0aGUgY3JlYXRl
IGNhbGxiYWNrLiBJZiB3ZQorICAgIC8vIGhhbHQgdGhlIG1haW4gbG9vcCBpbiB0aGUgcG9saWN5
IGRlY2lzaW9uLCB0aGUgY3JlYXRlIGNhbGxiYWNrIG5ldmVyIGV4ZWN1dGVzLgorICAgIGRhdGEu
dHJpZWRUb09wZW5XaW5kb3cgPSBmYWxzZTsKKyAgICB0ZXN0LT5tX3BvbGljeURlY2lzaW9uUmVz
cG9uc2UgPSBQb2xpY3lDbGllbnRUZXN0OjpJZ25vcmU7CisgICAgdGVzdC0+bG9hZEh0bWwod2lu
ZG93T3BlbmluZ0hUTUwsICJodHRwOi8vd2Via2l0Z3RrLm9yZy8iKTsKKyAgICB0ZXN0LT53YWl0
KC4yKTsKKyAgICBnX2Fzc2VydCghZGF0YS50cmllZFRvT3BlbldpbmRvdyk7Cit9CisKK3N0YXRp
YyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1l
c3NhZ2UsIGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqLCBTb3VwQ2xpZW50Q29udGV4dCos
IGdwb2ludGVyKQoreworICAgIGlmIChtZXNzYWdlLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VU
KSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVT
X05PVF9JTVBMRU1FTlRFRCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZ19z
dHJfZXF1YWwocGF0aCwgIi8iKSkgeworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogcmVzcG9u
c2VTdHJpbmcgPSAiPGh0bWw+PGJvZHk+VGVzdGluZyE8L2JvZHk+PC9odG1sPiI7CisgICAgICAg
IHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKKyAgICAg
ICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBf
TUVNT1JZX1NUQVRJQywgcmVzcG9uc2VTdHJpbmcsIHN0cmxlbihyZXNwb25zZVN0cmluZykpOwor
ICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5
KTsKKyAgICB9IGVsc2UKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwg
U09VUF9TVEFUVVNfTk9UX0ZPVU5EKTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQoreworICAgIGtT
ZXJ2ZXIgPSBuZXcgV2ViS2l0VGVzdFNlcnZlcigpOworICAgIGtTZXJ2ZXItPnJ1bihzZXJ2ZXJD
YWxsYmFjayk7CisKKyAgICBQb2xpY3lDbGllbnRUZXN0OjphZGQoIldlYktpdFBvbGljeUNsaWVu
dCIsICJuYXZpZ2F0aW9uLXBvbGljeSIsIHRlc3ROYXZpZ2F0aW9uUG9saWN5KTsKKyAgICBQb2xp
Y3lDbGllbnRUZXN0OjphZGQoIldlYktpdFBvbGljeUNsaWVudCIsICJyZXNwb25zZS1wb2xpY3ki
LCB0ZXN0UmVzcG9uc2VQb2xpY3kpOworICAgIFBvbGljeUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0
UG9saWN5Q2xpZW50IiwgIm5ldy13aW5kb3ctcG9saWN5IiwgdGVzdE5ld1dpbmRvd1BvbGljeSk7
Cit9CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworICAgIGRlbGV0ZSBrU2VydmVyOworfQpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRTZXR0
aW5ncy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktp
dFNldHRpbmdzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGY5NjRl
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3Rr
L1Rlc3RXZWJLaXRTZXR0aW5ncy5jcHAKQEAgLTAsMCArMSwzNzEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKGMpIDIwMTEgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgCisgKiBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQg
bm90aWNlLCAKKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKgorICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyAqIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIAorICogb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgCisgKiBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IAorICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMgCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCAKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xE
RVIgT1IgCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIAor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSAKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIAorICogTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIAorICogU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVGVzdE1haW4uaCIKKyNp
bmNsdWRlICJXZWJWaWV3VGVzdC5oIgorI2luY2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKKyNp
bmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+CisjaW5jbHVk
ZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCitzdGF0aWMgV2ViS2l0VGVzdFNlcnZlciogZ1Nl
cnZlcjsKKworc3RhdGljIHZvaWQgdGVzdFdlYktpdFNldHRpbmdzKFRlc3QqLCBnY29uc3Rwb2lu
dGVyKQoreworICAgIFdlYktpdFNldHRpbmdzKiBzZXR0aW5ncyA9IHdlYmtpdF9zZXR0aW5nc19u
ZXcoKTsKKworICAgIC8vIEphdmFTY3JpcHQgaXMgZW5hYmxlZCBieSBkZWZhdWx0LgorICAgIGdf
YXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2phdmFzY3JpcHQoc2V0dGluZ3MpKTsK
KyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9qYXZhc2NyaXB0KHNldHRpbmdzLCBGQUxT
RSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2phdmFzY3JpcHQo
c2V0dGluZ3MpKTsKKworICAgIC8vIEJ5IGRlZmF1bHQgYXV0by1sb2FkLWltYWdlIGlzIHRydWUu
CisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9hdXRvX2xvYWRfaW1hZ2VzKHNldHRp
bmdzKSk7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9hdXRvX2xvYWRfaW1hZ2VzKHNldHRpbmdz
LCBGQUxTRSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfYXV0b19sb2FkX2lt
YWdlcyhzZXR0aW5ncykpOworCisgICAgLy8gbG9hZC1pY29ucy1pZ25vcmluZy1pbWFnZS1sb2Fk
LXNldHRpbmcgaXMgZmFsc2UgYnkgZGVmYXVsdC4KKyAgICBnX2Fzc2VydCghd2Via2l0X3NldHRp
bmdzX2dldF9sb2FkX2ljb25zX2lnbm9yaW5nX2ltYWdlX2xvYWRfc2V0dGluZyhzZXR0aW5ncykp
OworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfbG9hZF9pY29uc19pZ25vcmluZ19pbWFnZV9sb2Fk
X3NldHRpbmcoc2V0dGluZ3MsIFRSVUUpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19n
ZXRfbG9hZF9pY29uc19pZ25vcmluZ19pbWFnZV9sb2FkX3NldHRpbmcoc2V0dGluZ3MpKTsKKyAg
ICAKKyAgICAvLyBPZmZsaW5lIGFwcGxpY2F0aW9uIGNhY2hlIGlzIHRydWUgYnkgZGVmYXVsdC4K
KyAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9vZmZsaW5lX3dlYl9hcHBs
aWNhdGlvbl9jYWNoZShzZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxl
X29mZmxpbmVfd2ViX2FwcGxpY2F0aW9uX2NhY2hlKHNldHRpbmdzLCBGQUxTRSk7CisgICAgZ19h
c3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX29mZmxpbmVfd2ViX2FwcGxpY2F0aW9u
X2NhY2hlKHNldHRpbmdzKSk7CisKKyAgICAvLyBMb2NhbCBzdG9yYWdlIGlzIGVuYWJsZSBieSBk
ZWZhdWx0LgorICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2h0bWw1X2xv
Y2FsX3N0b3JhZ2Uoc2V0dGluZ3MpKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9o
dG1sNV9sb2NhbF9zdG9yYWdlKHNldHRpbmdzLCBGQUxTRSk7CisgICAgZ19hc3NlcnQoIXdlYmtp
dF9zZXR0aW5nc19nZXRfZW5hYmxlX2h0bWw1X2xvY2FsX3N0b3JhZ2Uoc2V0dGluZ3MpKTsKKwor
ICAgIC8vIEhUTUw1IGRhdGFiYXNlIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4KKyAgICBnX2Fzc2Vy
dCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9odG1sNV9kYXRhYmFzZShzZXR0aW5ncykpOwor
ICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX2h0bWw1X2RhdGFiYXNlKHNldHRpbmdzLCBG
QUxTRSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2h0bWw1X2Rh
dGFiYXNlKHNldHRpbmdzKSk7CisKKyAgICAvLyBYU1MgQXVkaXRvciBpcyBlbmFibGVkIGJ5IGRl
ZmF1bHQuCisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfeHNzX2F1ZGl0
b3Ioc2V0dGluZ3MpKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV94c3NfYXVkaXRv
cihzZXR0aW5ncywgRkFMU0UpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2Vu
YWJsZV94c3NfYXVkaXRvcihzZXR0aW5ncykpOworCisgICAgLy8gRnJhbWUgZmxhdHRlbmluZyBp
cyBkaXNhYmxlZCBieSBkZWZhdWx0LgorICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0
X2VuYWJsZV9mcmFtZV9mbGF0dGVuaW5nKHNldHRpbmdzKSk7CisgICAgd2Via2l0X3NldHRpbmdz
X3NldF9lbmFibGVfZnJhbWVfZmxhdHRlbmluZyhzZXR0aW5ncywgVFJVRSk7CisgICAgZ19hc3Nl
cnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfZnJhbWVfZmxhdHRlbmluZyhzZXR0aW5ncykp
OworCisgICAgLy8gUGx1Z2lucyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0LgorICAgIGdfYXNzZXJ0
KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3BsdWdpbnMoc2V0dGluZ3MpKTsKKyAgICB3ZWJr
aXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9wbHVnaW5zKHNldHRpbmdzLCBGQUxTRSk7CisgICAgZ19h
c3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3BsdWdpbnMoc2V0dGluZ3MpKTsKKwor
ICAgIC8vIEphdmEgaXMgZW5hYmxlZCBieSBkZWZhdWx0LgorICAgIGdfYXNzZXJ0KHdlYmtpdF9z
ZXR0aW5nc19nZXRfZW5hYmxlX2phdmEoc2V0dGluZ3MpKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nf
c2V0X2VuYWJsZV9qYXZhKHNldHRpbmdzLCBGQUxTRSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9z
ZXR0aW5nc19nZXRfZW5hYmxlX2phdmEoc2V0dGluZ3MpKTsKKworICAgIC8vIEJ5IGRlZmF1bHQs
IEphdmFTY3JpcHQgY2FuIG9wZW4gd2luZG93cyBhdXRvbWF0aWNhbGx5IGlzIGRpc2FibGVkLgor
ICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2phdmFzY3JpcHRfY2FuX29wZW5fd2lu
ZG93c19hdXRvbWF0aWNhbGx5KHNldHRpbmdzKSk7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9q
YXZhc2NyaXB0X2Nhbl9vcGVuX3dpbmRvd3NfYXV0b21hdGljYWxseShzZXR0aW5ncywgVFJVRSk7
CisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9qYXZhc2NyaXB0X2Nhbl9vcGVuX3dp
bmRvd3NfYXV0b21hdGljYWxseShzZXR0aW5ncykpOworCisgICAgLy8gQnkgZGVmYXVsdCBoeXBl
ciBsaW5rIGF1ZGl0aW5nIGlzIGRpc2FibGVkLgorICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGlu
Z3NfZ2V0X2VuYWJsZV9oeXBlcmxpbmtfYXVkaXRpbmcoc2V0dGluZ3MpKTsKKyAgICB3ZWJraXRf
c2V0dGluZ3Nfc2V0X2VuYWJsZV9oeXBlcmxpbmtfYXVkaXRpbmcoc2V0dGluZ3MsIFRSVUUpOwor
ICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2h5cGVybGlua19hdWRpdGlu
ZyhzZXR0aW5ncykpOworCisgICAgLy8gRGVmYXVsdCBmb250IGZhbWlseSBpcyAic2Fucy1zZXJp
ZiIuCisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zZXR0aW5nc19nZXRfZGVmYXVsdF9mb250
X2ZhbWlseShzZXR0aW5ncyksID09LCAic2Fucy1zZXJpZiIpOworICAgIHdlYmtpdF9zZXR0aW5n
c19zZXRfZGVmYXVsdF9mb250X2ZhbWlseShzZXR0aW5ncywgIm1vbm9zcGFjZSIpOworICAgIGdf
YXNzZXJ0X2NtcHN0cih3ZWJraXRfc2V0dGluZ3NfZ2V0X2RlZmF1bHRfZm9udF9mYW1pbHkoc2V0
dGluZ3MpLCA9PSwgIm1vbm9zcGFjZSIpOworCisgICAgLy8gRGVmYXVsdCBtb25vc3BhY2UgZm9u
dCBmYW1pbHkgZm9udCBmYW1pbHkgaXMgIm1vbm9zcGFjZSIuCisgICAgZ19hc3NlcnRfY21wc3Ry
KHdlYmtpdF9zZXR0aW5nc19nZXRfbW9ub3NwYWNlX2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0s
ICJtb25vc3BhY2UiKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X21vbm9zcGFjZV9mb250X2Zh
bWlseShzZXR0aW5ncywgInNhbnMtc2VyaWYiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0
X3NldHRpbmdzX2dldF9tb25vc3BhY2VfZm9udF9mYW1pbHkoc2V0dGluZ3MpLCA9PSwgInNhbnMt
c2VyaWYiKTsKKworICAgIC8vIERlZmF1bHQgc2VyaWYgZm9udCBmYW1pbHkgaXMgInNlcmlmIi4K
KyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NldHRpbmdzX2dldF9zZXJpZl9mb250X2ZhbWls
eShzZXR0aW5ncyksID09LCAic2VyaWYiKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X3Nlcmlm
X2ZvbnRfZmFtaWx5KHNldHRpbmdzLCAic2Fucy1zZXJpZiIpOworICAgIGdfYXNzZXJ0X2NtcHN0
cih3ZWJraXRfc2V0dGluZ3NfZ2V0X3NlcmlmX2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJz
YW5zLXNlcmlmIik7CisKKyAgICAvLyBEZWZhdWx0IHNhbnMgc2VyaWYgZm9udCBmYW1pbHkgaXMg
InNhbnMtc2VyaWYiLgorICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2V0dGluZ3NfZ2V0X3Nh
bnNfc2VyaWZfZm9udF9mYW1pbHkoc2V0dGluZ3MpLCA9PSwgInNhbnMtc2VyaWYiKTsKKyAgICB3
ZWJraXRfc2V0dGluZ3Nfc2V0X3NhbnNfc2VyaWZfZm9udF9mYW1pbHkoc2V0dGluZ3MsICJzZXJp
ZiIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2V0dGluZ3NfZ2V0X3NhbnNfc2VyaWZf
Zm9udF9mYW1pbHkoc2V0dGluZ3MpLCA9PSwgInNlcmlmIik7CisKKyAgICAvLyBEZWZhdWx0IGN1
cnNpdmUgZm9udCBmYW1pbHkgInNlcmlmIi4KKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3Nl
dHRpbmdzX2dldF9jdXJzaXZlX2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJzZXJpZiIpOwor
ICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfY3Vyc2l2ZV9mb250X2ZhbWlseShzZXR0aW5ncywgInNh
bnMtc2VyaWYiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NldHRpbmdzX2dldF9jdXJz
aXZlX2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJzYW5zLXNlcmlmIik7CisKKyAgICAvLyBE
ZWZhdWx0IGZhbnRhc3kgZm9udCBmYW1pbHkgaXMgInNlcmlmIi4KKyAgICBnX2Fzc2VydF9jbXBz
dHIod2Via2l0X3NldHRpbmdzX2dldF9mYW50YXN5X2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0s
ICJzZXJpZiIpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZmFudGFzeV9mb250X2ZhbWlseShz
ZXR0aW5ncywgInNhbnMtc2VyaWYiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NldHRp
bmdzX2dldF9mYW50YXN5X2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJzYW5zLXNlcmlmIik7
CisKKyAgICAvLyBEZWZhdWx0IHBpY3RvZ3JhcGggZm9udCBmYW1pbHkgaXMgInNlcmlmIi4KKyAg
ICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NldHRpbmdzX2dldF9waWN0b2dyYXBoX2ZvbnRfZmFt
aWx5KHNldHRpbmdzKSwgPT0sICJzZXJpZiIpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfcGlj
dG9ncmFwaF9mb250X2ZhbWlseShzZXR0aW5ncywgInNhbnMtc2VyaWYiKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X3NldHRpbmdzX2dldF9waWN0b2dyYXBoX2ZvbnRfZmFtaWx5KHNldHRp
bmdzKSwgPT0sICJzYW5zLXNlcmlmIik7CisKKyAgICAvLyBEZWZhdWx0IGZvbnQgc2l6ZSBpcyAx
Ni4KKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9zZXR0aW5nc19nZXRfZGVmYXVsdF9mb250
X3NpemUoc2V0dGluZ3MpLCA9PSwgMTYpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZGVmYXVs
dF9mb250X3NpemUoc2V0dGluZ3MsIDE0KTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9z
ZXR0aW5nc19nZXRfZGVmYXVsdF9mb250X3NpemUoc2V0dGluZ3MpLCA9PSwgMTQpOworCisgICAg
Ly8gRGVmYXVsdCBtb25vc3BhY2UgZm9udCBzaXplIGlzIDEzLgorICAgIGdfYXNzZXJ0X2NtcHVp
bnQod2Via2l0X3NldHRpbmdzX2dldF9kZWZhdWx0X21vbm9zcGFjZV9mb250X3NpemUoc2V0dGlu
Z3MpLCA9PSwgMTMpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZGVmYXVsdF9tb25vc3BhY2Vf
Zm9udF9zaXplKHNldHRpbmdzLCAxMCk7CisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfc2V0
dGluZ3NfZ2V0X2RlZmF1bHRfbW9ub3NwYWNlX2ZvbnRfc2l6ZShzZXR0aW5ncyksID09LCAxMCk7
CisKKyAgICAvLyBEZWZhdWx0IG1pbmltdW0gZm9udCBzaXplIGlzIDAuCisgICAgZ19hc3NlcnRf
Y21wdWludCh3ZWJraXRfc2V0dGluZ3NfZ2V0X21pbmltdW1fZm9udF9zaXplKHNldHRpbmdzKSwg
PT0sIDApOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfbWluaW11bV9mb250X3NpemUoc2V0dGlu
Z3MsIDcpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X3NldHRpbmdzX2dldF9taW5pbXVt
X2ZvbnRfc2l6ZShzZXR0aW5ncyksID09LCA3KTsKKworICAgIC8vIERlZmF1bHQgY2hhcnNldCBp
cyAiaXNvLTg4NTktMSIuCisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zZXR0aW5nc19nZXRf
ZGVmYXVsdF9jaGFyc2V0KHNldHRpbmdzKSwgPT0sICJpc28tODg1OS0xIik7CisgICAgd2Via2l0
X3NldHRpbmdzX3NldF9kZWZhdWx0X2NoYXJzZXQoc2V0dGluZ3MsICJ1dGY4Iik7CisgICAgZ19h
c3NlcnRfY21wc3RyKHdlYmtpdF9zZXR0aW5nc19nZXRfZGVmYXVsdF9jaGFyc2V0KHNldHRpbmdz
KSwgPT0sICJ1dGY4Iik7CisKKyAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFi
bGVfcHJpdmF0ZV9icm93c2luZyhzZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRf
ZW5hYmxlX3ByaXZhdGVfYnJvd3Npbmcoc2V0dGluZ3MsIFRSVUUpOworICAgIGdfYXNzZXJ0KHdl
YmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3ByaXZhdGVfYnJvd3Npbmcoc2V0dGluZ3MpKTsKKwor
ICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9kZXZlbG9wZXJfZXh0cmFz
KHNldHRpbmdzKSk7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfZGV2ZWxvcGVyX2V4
dHJhcyhzZXR0aW5ncywgVFJVRSk7CisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9l
bmFibGVfZGV2ZWxvcGVyX2V4dHJhcyhzZXR0aW5ncykpOworCisgICAgZ19hc3NlcnQod2Via2l0
X3NldHRpbmdzX2dldF9lbmFibGVfcmVzaXphYmxlX3RleHRfYXJlYXMoc2V0dGluZ3MpKTsKKyAg
ICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9yZXNpemFibGVfdGV4dF9hcmVhcyhzZXR0aW5n
cywgRkFMU0UpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9yZXNp
emFibGVfdGV4dF9hcmVhcyhzZXR0aW5ncykpOworCisgICAgZ19hc3NlcnQod2Via2l0X3NldHRp
bmdzX2dldF9lbmFibGVfdGFic190b19saW5rcyhzZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0
aW5nc19zZXRfZW5hYmxlX3RhYnNfdG9fbGlua3Moc2V0dGluZ3MsIEZBTFNFKTsKKyAgICBnX2Fz
c2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfdGFic190b19saW5rcyhzZXR0aW5ncykp
OworCisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2Ruc19wcmVmZXRj
aGluZyhzZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX2Ruc19wcmVm
ZXRjaGluZyhzZXR0aW5ncywgVFJVRSk7CisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dl
dF9lbmFibGVfZG5zX3ByZWZldGNoaW5nKHNldHRpbmdzKSk7CisKKyAgICAvLyBDYXJldCBicm93
c2luZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGlu
Z3NfZ2V0X2VuYWJsZV9jYXJldF9icm93c2luZyhzZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0
aW5nc19zZXRfZW5hYmxlX2NhcmV0X2Jyb3dzaW5nKHNldHRpbmdzLCBUUlVFKTsKKyAgICBnX2Fz
c2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9jYXJldF9icm93c2luZyhzZXR0aW5ncykp
OworCisgICAgLy8gRnVsbHNjcmVlbiBKYXZhU2NyaXB0IEFQSSBpcyBlbmFibGVkIGJ5IGRlZmF1
bHQuCisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfZnVsbHNjcmVlbihz
ZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX2Z1bGxzY3JlZW4oc2V0
dGluZ3MsIEZBTFNFKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVf
ZnVsbHNjcmVlbihzZXR0aW5ncykpOworCisgICAgLy8gUHJpbnQgYmFja2dyb3VuZHMgaXMgZW5h
YmxlZCBieSBkZWZhdWx0CisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9wcmludF9i
YWNrZ3JvdW5kcyhzZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfcHJpbnRfYmFj
a2dyb3VuZHMoc2V0dGluZ3MsIEZBTFNFKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdz
X2dldF9wcmludF9iYWNrZ3JvdW5kcyhzZXR0aW5ncykpOworCisgICAgLy8gV2ViQXVkaW8gaXMg
ZGlzYWJsZWQgYnkgZGVmYXVsdC4KKyAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9l
bmFibGVfd2ViYXVkaW8oc2V0dGluZ3MpKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJs
ZV93ZWJhdWRpbyhzZXR0aW5ncywgVFJVRSk7CisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdz
X2dldF9lbmFibGVfd2ViYXVkaW8oc2V0dGluZ3MpKTsKKworICAgIC8vIFdlYkdMIGlzIGRpc2Fi
bGVkIGJ5IGRlZmF1bHQuCisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxl
X3dlYmdsKHNldHRpbmdzKSk7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfd2ViZ2wo
c2V0dGluZ3MsIFRSVUUpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxl
X3dlYmdsKHNldHRpbmdzKSk7CisKKyAgICAvLyBBbGxvdyBNb2RhbCBEaWFsb2dzIGlzIGRpc2Fi
bGVkIGJ5IGRlZmF1bHQuCisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfYWxsb3df
bW9kYWxfZGlhbG9ncyhzZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfYWxsb3df
bW9kYWxfZGlhbG9ncyhzZXR0aW5ncywgVFJVRSk7CisgICAgZ19hc3NlcnQod2Via2l0X3NldHRp
bmdzX2dldF9hbGxvd19tb2RhbF9kaWFsb2dzKHNldHRpbmdzKSk7CisKKyAgICAvLyBab29tIHRl
eHQgb25seSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0
dGluZ3NfZ2V0X3pvb21fdGV4dF9vbmx5KHNldHRpbmdzKSk7CisgICAgd2Via2l0X3NldHRpbmdz
X3NldF96b29tX3RleHRfb25seShzZXR0aW5ncywgVFJVRSk7CisgICAgZ19hc3NlcnQod2Via2l0
X3NldHRpbmdzX2dldF96b29tX3RleHRfb25seShzZXR0aW5ncykpOworCisgICAgLy8gQnkgZGVm
YXVsdCwgSmF2YVNjcmlwdCBjYW5ub3QgYWNjZXNzIHRoZSBjbGlwYm9hcmQuCisgICAgZ19hc3Nl
cnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfamF2YXNjcmlwdF9jYW5fYWNjZXNzX2NsaXBib2FyZChz
ZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfamF2YXNjcmlwdF9jYW5fYWNjZXNz
X2NsaXBib2FyZChzZXR0aW5ncywgVFJVRSk7CisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdz
X2dldF9qYXZhc2NyaXB0X2Nhbl9hY2Nlc3NfY2xpcGJvYXJkKHNldHRpbmdzKSk7CisKKyAgICAv
LyBCeSBkZWZhdWx0LCBtZWRpYSBwbGF5YmFjayBkb2Vzbid0IHJlcXVpcmUgdXNlciBnZXN0dXJl
cy4KKyAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9tZWRpYV9wbGF5YmFja19yZXF1
aXJlc191c2VyX2dlc3R1cmUoc2V0dGluZ3MpKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X21l
ZGlhX3BsYXliYWNrX3JlcXVpcmVzX3VzZXJfZ2VzdHVyZShzZXR0aW5ncywgVFJVRSk7CisgICAg
Z19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9tZWRpYV9wbGF5YmFja19yZXF1aXJlc191c2Vy
X2dlc3R1cmUoc2V0dGluZ3MpKTsKKworICAgIC8vIEJ5IGRlZmF1bHQsIGlubGluZSBtZWRpYSBw
bGF5YmFjayBpcyBhbGxvd2VkCisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9tZWRp
YV9wbGF5YmFja19hbGxvd3NfaW5saW5lKHNldHRpbmdzKSk7CisgICAgd2Via2l0X3NldHRpbmdz
X3NldF9tZWRpYV9wbGF5YmFja19hbGxvd3NfaW5saW5lKHNldHRpbmdzLCBGQUxTRSk7CisgICAg
Z19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfbWVkaWFfcGxheWJhY2tfYWxsb3dzX2lubGlu
ZShzZXR0aW5ncykpOworCisgICAgLy8gQnkgZGVmYXVsdCwgZGVidWcgaW5kaWNhdG9ycyBhcmUg
ZGlzYWJsZWQuCisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZHJhd19jb21wb3Np
dGluZ19pbmRpY2F0b3JzKHNldHRpbmdzKSk7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9kcmF3
X2NvbXBvc2l0aW5nX2luZGljYXRvcnMoc2V0dGluZ3MsIFRSVUUpOworICAgIGdfYXNzZXJ0KHdl
YmtpdF9zZXR0aW5nc19nZXRfZHJhd19jb21wb3NpdGluZ19pbmRpY2F0b3JzKHNldHRpbmdzKSk7
CisKKyAgICAvLyBCeSBkZWZhdWx0LCBzaXRlIHNwZWNpZmljIHF1aXJrcyBhcmUgZGlzYWJsZWQu
CisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3NpdGVfc3BlY2lmaWNf
cXVpcmtzKHNldHRpbmdzKSk7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfc2l0ZV9z
cGVjaWZpY19xdWlya3Moc2V0dGluZ3MsIFRSVUUpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0
aW5nc19nZXRfZW5hYmxlX3NpdGVfc3BlY2lmaWNfcXVpcmtzKHNldHRpbmdzKSk7CisKKyAgICAv
LyBCeSBkZWZhdWx0LCBwYWdlIGNhY2hlIGlzIGVuYWJsZWQuCisgICAgZ19hc3NlcnQod2Via2l0
X3NldHRpbmdzX2dldF9lbmFibGVfcGFnZV9jYWNoZShzZXR0aW5ncykpOworICAgIHdlYmtpdF9z
ZXR0aW5nc19zZXRfZW5hYmxlX3BhZ2VfY2FjaGUoc2V0dGluZ3MsIEZBTFNFKTsKKyAgICBnX2Fz
c2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfcGFnZV9jYWNoZShzZXR0aW5ncykpOwor
CisgICAgLy8gQnkgZGVmYXVsdCwgc21vb3RoIHNjcm9sbGluZyBpcyBkaXNhYmxlZC4KKyAgICBn
X2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfc21vb3RoX3Njcm9sbGluZyhzZXR0
aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX3Ntb290aF9zY3JvbGxpbmco
c2V0dGluZ3MsIFRSVUUpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxl
X3Ntb290aF9zY3JvbGxpbmcoc2V0dGluZ3MpKTsKKworICAgIC8vIEJ5IGRlZmF1bHQsIGFjY2Vs
ZXJhdGVkIDJEIGNhbnZhcyBpcyBkaXNhYmxlZC4KKyAgICBnX2Fzc2VydCghd2Via2l0X3NldHRp
bmdzX2dldF9lbmFibGVfYWNjZWxlcmF0ZWRfMmRfY2FudmFzKHNldHRpbmdzKSk7CisgICAgd2Vi
a2l0X3NldHRpbmdzX3NldF9lbmFibGVfYWNjZWxlcmF0ZWRfMmRfY2FudmFzKHNldHRpbmdzLCBU
UlVFKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9hY2NlbGVyYXRl
ZF8yZF9jYW52YXMoc2V0dGluZ3MpKTsKKworICAgIC8vIEJ5IGRlZmF1bHQsIHdyaXRpbmcgb2Yg
Y29uc29sZSBtZXNzYWdlcyB0byBzdGRvdXQgaXMgZGlzYWJsZWQuCisgICAgZ19hc3NlcnQoIXdl
YmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3dyaXRlX2NvbnNvbGVfbWVzc2FnZXNfdG9fc3Rkb3V0
KHNldHRpbmdzKSk7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfd3JpdGVfY29uc29s
ZV9tZXNzYWdlc190b19zdGRvdXQoc2V0dGluZ3MsIFRSVUUpOworICAgIGdfYXNzZXJ0KHdlYmtp
dF9zZXR0aW5nc19nZXRfZW5hYmxlX3dyaXRlX2NvbnNvbGVfbWVzc2FnZXNfdG9fc3Rkb3V0KHNl
dHRpbmdzKSk7CisKKyAgICAvLyBNZWRpYVN0cmVhbSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0Lgor
ICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9tZWRpYV9zdHJlYW0oc2V0
dGluZ3MpKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9tZWRpYV9zdHJlYW0oc2V0
dGluZ3MsIFRSVUUpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX21l
ZGlhX3N0cmVhbShzZXR0aW5ncykpOworCisgICAgLy8gQnkgZGVmYXVsdCwgU3BhdGlhbE5hdmln
YXRpb24gaXMgZGlzYWJsZWQKKyAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFi
bGVfc3BhdGlhbF9uYXZpZ2F0aW9uKHNldHRpbmdzKSk7CisgICAgd2Via2l0X3NldHRpbmdzX3Nl
dF9lbmFibGVfc3BhdGlhbF9uYXZpZ2F0aW9uKHNldHRpbmdzLCBUUlVFKTsKKyAgICBnX2Fzc2Vy
dCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9zcGF0aWFsX25hdmlnYXRpb24oc2V0dGluZ3Mp
KTsKKworICAgIC8vIE1lZGlhU291cmNlIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQKKyAgICBnX2Fz
c2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfbWVkaWFzb3VyY2Uoc2V0dGluZ3MpKTsK
KyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9tZWRpYXNvdXJjZShzZXR0aW5ncywgVFJV
RSk7CisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfbWVkaWFzb3VyY2Uo
c2V0dGluZ3MpKTsKKworICAgIGdfb2JqZWN0X3VucmVmKEdfT0JKRUNUKHNldHRpbmdzKSk7Cit9
CisKK3ZvaWQgdGVzdFdlYktpdFNldHRpbmdzTmV3V2l0aFNldHRpbmdzKFRlc3QqIHRlc3QsIGdj
b25zdHBvaW50ZXIpCit7CisgICAgR1JlZlB0cjxXZWJLaXRTZXR0aW5ncz4gc2V0dGluZ3MgPSBh
ZG9wdEdSZWYod2Via2l0X3NldHRpbmdzX25ld193aXRoX3NldHRpbmdzKAorICAgICAgICAiZW5h
YmxlLWphdmFzY3JpcHQiLCBGQUxTRSwKKyAgICAgICAgImF1dG8tbG9hZC1pbWFnZXMiLCBGQUxT
RSwKKyAgICAgICAgImxvYWQtaWNvbnMtaWdub3JpbmctaW1hZ2UtbG9hZC1zZXR0aW5nIiwgVFJV
RSwKKyAgICAgICAgbnVsbHB0cikpOworICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdo
ZW5UZXN0RmluaXNoZXMoR19PQkpFQ1Qoc2V0dGluZ3MuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydCgh
d2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfamF2YXNjcmlwdChzZXR0aW5ncy5nZXQoKSkpOwor
ICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2F1dG9fbG9hZF9pbWFnZXMoc2V0dGlu
Z3MuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2xvYWRfaWNvbnNf
aWdub3JpbmdfaW1hZ2VfbG9hZF9zZXR0aW5nKHNldHRpbmdzLmdldCgpKSk7Cit9CisKK3N0YXRp
YyBDU3RyaW5nIGNvbnZlcnRXZWJWaWV3TWFpblJlc291cmNlRGF0YVRvQ1N0cmluZyhXZWJWaWV3
VGVzdCogdGVzdCkKK3sKKyAgICBzaXplX3QgbWFpblJlc291cmNlRGF0YVNpemUgPSAwOworICAg
IGNvbnN0IGNoYXIqIG1haW5SZXNvdXJjZURhdGEgPSB0ZXN0LT5tYWluUmVzb3VyY2VEYXRhKG1h
aW5SZXNvdXJjZURhdGFTaXplKTsKKyAgICByZXR1cm4gQ1N0cmluZyhtYWluUmVzb3VyY2VEYXRh
LCBtYWluUmVzb3VyY2VEYXRhU2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGFzc2VydFRoYXRVc2Vy
QWdlbnRJc1NlbnRJbkhlYWRlcnMoV2ViVmlld1Rlc3QqIHRlc3QsIGNvbnN0IENTdHJpbmcmIHVz
ZXJBZ2VudCkKK3sKKyAgICB0ZXN0LT5sb2FkVVJJKGdTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi8i
KS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIEFTU0VS
VF9DTVBfQ1NUUklORyhjb252ZXJ0V2ViVmlld01haW5SZXNvdXJjZURhdGFUb0NTdHJpbmcodGVz
dCksID09LCB1c2VyQWdlbnQpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViS2l0U2V0dGluZ3NV
c2VyQWdlbnQoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgR1JlZlB0
cjxXZWJLaXRTZXR0aW5ncz4gc2V0dGluZ3MgPSBhZG9wdEdSZWYod2Via2l0X3NldHRpbmdzX25l
dygpKTsKKyAgICBDU3RyaW5nIGRlZmF1bHRVc2VyQWdlbnQgPSB3ZWJraXRfc2V0dGluZ3NfZ2V0
X3VzZXJfYWdlbnQoc2V0dGluZ3MuZ2V0KCkpOworICAgIHdlYmtpdF93ZWJfdmlld19zZXRfc2V0
dGluZ3ModGVzdC0+bV93ZWJWaWV3LCBzZXR0aW5ncy5nZXQoKSk7CisKKyAgICBnX2Fzc2VydChn
X3N0cnN0cl9sZW4oZGVmYXVsdFVzZXJBZ2VudC5kYXRhKCksIC0xLCAiQXBwbGVXZWJLaXQiKSk7
CisgICAgZ19hc3NlcnQoZ19zdHJzdHJfbGVuKGRlZmF1bHRVc2VyQWdlbnQuZGF0YSgpLCAtMSwg
IlNhZmFyaSIpKTsKKworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfdXNlcl9hZ2VudChzZXR0aW5n
cy5nZXQoKSwgMCk7CisgICAgZ19hc3NlcnRfY21wc3RyKGRlZmF1bHRVc2VyQWdlbnQuZGF0YSgp
LCA9PSwgd2Via2l0X3NldHRpbmdzX2dldF91c2VyX2FnZW50KHNldHRpbmdzLmdldCgpKSk7Cisg
ICAgYXNzZXJ0VGhhdFVzZXJBZ2VudElzU2VudEluSGVhZGVycyh0ZXN0LCBkZWZhdWx0VXNlckFn
ZW50LmRhdGEoKSk7CisKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X3VzZXJfYWdlbnQoc2V0dGlu
Z3MuZ2V0KCksICIiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoZGVmYXVsdFVzZXJBZ2VudC5kYXRh
KCksID09LCB3ZWJraXRfc2V0dGluZ3NfZ2V0X3VzZXJfYWdlbnQoc2V0dGluZ3MuZ2V0KCkpKTsK
KworICAgIGNvbnN0IGNoYXIqIGZ1bmt5VXNlckFnZW50ID0gIkZ1bmt5ISI7CisgICAgd2Via2l0
X3NldHRpbmdzX3NldF91c2VyX2FnZW50KHNldHRpbmdzLmdldCgpLCBmdW5reVVzZXJBZ2VudCk7
CisgICAgZ19hc3NlcnRfY21wc3RyKGZ1bmt5VXNlckFnZW50LCA9PSwgd2Via2l0X3NldHRpbmdz
X2dldF91c2VyX2FnZW50KHNldHRpbmdzLmdldCgpKSk7CisgICAgYXNzZXJ0VGhhdFVzZXJBZ2Vu
dElzU2VudEluSGVhZGVycyh0ZXN0LCBmdW5reVVzZXJBZ2VudCk7CisKKyAgICB3ZWJraXRfc2V0
dGluZ3Nfc2V0X3VzZXJfYWdlbnRfd2l0aF9hcHBsaWNhdGlvbl9kZXRhaWxzKHNldHRpbmdzLmdl
dCgpLCAiV2ViS2l0R1RLKyIsIDApOworICAgIGNvbnN0IGNoYXIqIHVzZXJBZ2VudFdpdGhOdWxs
VmVyc2lvbiA9IHdlYmtpdF9zZXR0aW5nc19nZXRfdXNlcl9hZ2VudChzZXR0aW5ncy5nZXQoKSk7
CisgICAgZ19hc3NlcnRfY21wc3RyKGdfc3Ryc3RyX2xlbih1c2VyQWdlbnRXaXRoTnVsbFZlcnNp
b24sIC0xLCBkZWZhdWx0VXNlckFnZW50LmRhdGEoKSksID09LCB1c2VyQWdlbnRXaXRoTnVsbFZl
cnNpb24pOworICAgIGdfYXNzZXJ0KGdfc3Ryc3RyX2xlbih1c2VyQWdlbnRXaXRoTnVsbFZlcnNp
b24sIC0xLCAiV2ViS2l0R1RLKyIpKTsKKworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfdXNlcl9h
Z2VudF93aXRoX2FwcGxpY2F0aW9uX2RldGFpbHMoc2V0dGluZ3MuZ2V0KCksICJXZWJLaXRHVEsr
IiwgIiIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2V0dGluZ3NfZ2V0X3VzZXJfYWdl
bnQoc2V0dGluZ3MuZ2V0KCkpLCA9PSwgdXNlckFnZW50V2l0aE51bGxWZXJzaW9uKTsKKworICAg
IHdlYmtpdF9zZXR0aW5nc19zZXRfdXNlcl9hZ2VudF93aXRoX2FwcGxpY2F0aW9uX2RldGFpbHMo
c2V0dGluZ3MuZ2V0KCksICJXZWJDYXRHVEsrIiwgIjMuNC41Iik7CisgICAgY29uc3QgY2hhciog
bmV3VXNlckFnZW50ID0gd2Via2l0X3NldHRpbmdzX2dldF91c2VyX2FnZW50KHNldHRpbmdzLmdl
dCgpKTsKKyAgICBnX2Fzc2VydChnX3N0cnN0cl9sZW4obmV3VXNlckFnZW50LCAtMSwgIjMuNC41
IikpOworICAgIGdfYXNzZXJ0KGdfc3Ryc3RyX2xlbihuZXdVc2VyQWdlbnQsIC0xLCAiV2ViQ2F0
R1RLKyIpKTsKK30KKworc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2Vy
dmVyLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSos
IFNvdXBDbGllbnRDb250ZXh0KiwgZ3BvaW50ZXIpCit7CisgICAgaWYgKG1lc3NhZ2UtPm1ldGhv
ZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMo
bWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiLyIpKSB7CisgICAgICAgIGNvbnN0
IGNoYXIqIHVzZXJBZ2VudCA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9vbmUobWVzc2FnZS0+
cmVxdWVzdF9oZWFkZXJzLCAiVXNlci1BZ2VudCIpOworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0
X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9i
b2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9DT1BZLCB1c2Vy
QWdlbnQsIHN0cmxlbih1c2VyQWdlbnQpKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfY29t
cGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7CisgICAgfSBlbHNlCisgICAgICAgIHNvdXBf
bWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7Cit9CisK
K3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICBnU2VydmVyID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIo
KTsKKyAgICBnU2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2spOworCisgICAgVGVzdDo6YWRkKCJX
ZWJLaXRTZXR0aW5ncyIsICJ3ZWJraXQtc2V0dGluZ3MiLCB0ZXN0V2ViS2l0U2V0dGluZ3MpOwor
ICAgIFRlc3Q6OmFkZCgiV2ViS2l0U2V0dGluZ3MiLCAibmV3LXdpdGgtc2V0dGluZ3MiLCB0ZXN0
V2ViS2l0U2V0dGluZ3NOZXdXaXRoU2V0dGluZ3MpOworICAgIFdlYlZpZXdUZXN0OjphZGQoIldl
YktpdFNldHRpbmdzIiwgInVzZXItYWdlbnQiLCB0ZXN0V2ViS2l0U2V0dGluZ3NVc2VyQWdlbnQp
OworfQorCit2b2lkIGFmdGVyQWxsKCkKK3sKKyAgICBkZWxldGUgZ1NlcnZlcjsKK30KKwpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRW
ZXJzaW9uLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2Vi
S2l0VmVyc2lvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc0N2Zm
OQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0
ay9UZXN0V2ViS2l0VmVyc2lvbi5jcHAKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAi
VGVzdE1haW4uaCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d2Via2l0Mi93ZWJr
aXQyLmg+CisKKworc3RhdGljIHZvaWQgdGVzdFdlYktpdFZlcnNpb24oVGVzdCosIGdjb25zdHBv
aW50ZXIpCit7CisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfZ2V0X21ham9yX3ZlcnNpb24o
KSwgPT0sIFdFQktJVF9NQUpPUl9WRVJTSU9OKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtp
dF9nZXRfbWlub3JfdmVyc2lvbigpLCA9PSwgV0VCS0lUX01JTk9SX1ZFUlNJT04pOworICAgIGdf
YXNzZXJ0X2NtcHVpbnQod2Via2l0X2dldF9taWNyb192ZXJzaW9uKCksID09LCBXRUJLSVRfTUlD
Uk9fVkVSU0lPTik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJLaXRDaGVja1ZlcnNpb24oVGVz
dCosIGdjb25zdHBvaW50ZXIpCit7CisgICAgZ19hc3NlcnQoV0VCS0lUX0NIRUNLX1ZFUlNJT04o
V0VCS0lUX01BSk9SX1ZFUlNJT04sIFdFQktJVF9NSU5PUl9WRVJTSU9OLCBXRUJLSVRfTUlDUk9f
VkVSU0lPTikpOworICAgIGdfYXNzZXJ0KCFXRUJLSVRfQ0hFQ0tfVkVSU0lPTihXRUJLSVRfTUFK
T1JfVkVSU0lPTiArIDEsIFdFQktJVF9NSU5PUl9WRVJTSU9OLCBXRUJLSVRfTUlDUk9fVkVSU0lP
TikpOworICAgIGdfYXNzZXJ0KCFXRUJLSVRfQ0hFQ0tfVkVSU0lPTihXRUJLSVRfTUFKT1JfVkVS
U0lPTiwgV0VCS0lUX01JTk9SX1ZFUlNJT04gKyAxLCBXRUJLSVRfTUlDUk9fVkVSU0lPTikpOwor
ICAgIGdfYXNzZXJ0KCFXRUJLSVRfQ0hFQ0tfVkVSU0lPTihXRUJLSVRfTUFKT1JfVkVSU0lPTiwg
V0VCS0lUX01JTk9SX1ZFUlNJT04sIFdFQktJVF9NSUNST19WRVJTSU9OICsgMSkpOworfQorCit2
b2lkIGJlZm9yZUFsbCgpCit7CisgICAgVGVzdDo6YWRkKCJXZWJLaXRWZXJzaW9uIiwgInZlcnNp
b24iLCB0ZXN0V2ViS2l0VmVyc2lvbik7CisgICAgVGVzdDo6YWRkKCJXZWJLaXRWZXJzaW9uIiwg
ImNoZWNrLXZlcnNpb24iLCB0ZXN0V2ViS2l0Q2hlY2tWZXJzaW9uKTsKK30KKwordm9pZCBhZnRl
ckFsbCgpCit7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dDJHdGsvVGVzdFdlYktpdFdlYkNvbnRleHQuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRXZWJDb250ZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5hNDE0ODUzCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRXZWJDb250ZXh0LmNwcApAQCAtMCww
ICsxLDQyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiTG9hZFRyYWNraW5nVGVzdC5oIgorI2luY2x1ZGUg
IldlYktpdFRlc3RTZXJ2ZXIuaCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d2Vi
a2l0Mi93ZWJraXQyLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYv
Z29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworc3RhdGljIFdlYktpdFRlc3RTZXJ2ZXIq
IGtTZXJ2ZXI7CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJDb250ZXh0RGVmYXVsdChUZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQoreworICAgIC8vIENoZWNrIHRoZXJlJ3MgYSBzaW5nbGUgaW5zdGFu
Y2Ugb2YgdGhlIGRlZmF1bHQgd2ViIGNvbnRleHQuCisgICAgZ19hc3NlcnQod2Via2l0X3dlYl9j
b250ZXh0X2dldF9kZWZhdWx0KCkgPT0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCkp
OworfQorCitjbGFzcyBQbHVnaW5zVGVzdDogcHVibGljIFRlc3QgeworcHVibGljOgorICAgIE1B
S0VfR0xJQl9URVNUX0ZJWFRVUkUoUGx1Z2luc1Rlc3QpOworCisgICAgUGx1Z2luc1Rlc3QoKQor
ICAgICAgICA6IG1fY29udGV4dCh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSkKKyAg
ICAgICAgLCBtX21haW5Mb29wKGdfbWFpbl9sb29wX25ldygwLCBUUlVFKSkKKyAgICAgICAgLCBt
X3BsdWdpbnMoMCkKKyAgICB7CisgICAgICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfYWRkaXRp
b25hbF9wbHVnaW5zX2RpcmVjdG9yeShtX2NvbnRleHQsIFdFQktJVF9URVNUX1BMVUdJTl9ESVIp
OworICAgIH0KKworICAgIH5QbHVnaW5zVGVzdCgpCisgICAgeworICAgICAgICBnX21haW5fbG9v
cF91bnJlZihtX21haW5Mb29wKTsKKyAgICAgICAgZ19saXN0X2ZyZWVfZnVsbChtX3BsdWdpbnMs
IGdfb2JqZWN0X3VucmVmKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBnZXRQbHVnaW5zQXN5
bmNSZWFkeUNhbGxiYWNrKEdPYmplY3QqLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgUGx1Z2luc1Rl
c3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT5tX3BsdWdpbnMgPSB3ZWJraXRfd2ViX2Nv
bnRleHRfZ2V0X3BsdWdpbnNfZmluaXNoKHRlc3QtPm1fY29udGV4dCwgcmVzdWx0LCAwKTsKKyAg
ICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBH
TGlzdCogZ2V0UGx1Z2lucygpCisgICAgeworICAgICAgICBnX2xpc3RfZnJlZV9mdWxsKG1fcGx1
Z2lucywgZ19vYmplY3RfdW5yZWYpOworICAgICAgICB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3Bs
dWdpbnMobV9jb250ZXh0LCAwLCByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+
KGdldFBsdWdpbnNBc3luY1JlYWR5Q2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgZ19tYWluX2xv
b3BfcnVuKG1fbWFpbkxvb3ApOworICAgICAgICByZXR1cm4gbV9wbHVnaW5zOworICAgIH0KKwor
ICAgIFdlYktpdFdlYkNvbnRleHQqIG1fY29udGV4dDsKKyAgICBHTWFpbkxvb3AqIG1fbWFpbkxv
b3A7CisgICAgR0xpc3QqIG1fcGx1Z2luczsKK307CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJDb250
ZXh0R2V0UGx1Z2lucyhQbHVnaW5zVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBH
TGlzdCogcGx1Z2lucyA9IHRlc3QtPmdldFBsdWdpbnMoKTsKKyAgICBnX2Fzc2VydChwbHVnaW5z
KTsKKworICAgIEdSZWZQdHI8V2ViS2l0UGx1Z2luPiB0ZXN0UGx1Z2luOworICAgIGZvciAoR0xp
c3QqIGl0ZW0gPSBwbHVnaW5zOyBpdGVtOyBpdGVtID0gZ19saXN0X25leHQoaXRlbSkpIHsKKyAg
ICAgICAgV2ViS2l0UGx1Z2luKiBwbHVnaW4gPSBXRUJLSVRfUExVR0lOKGl0ZW0tPmRhdGEpOwor
ICAgICAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JK
RUNUKHBsdWdpbikpOworICAgICAgICBpZiAoIWdfc3RyY21wMCh3ZWJraXRfcGx1Z2luX2dldF9u
YW1lKHBsdWdpbiksICJXZWJLaXQgVGVzdCBQbHVnSW4iKSkgeworICAgICAgICAgICAgdGVzdFBs
dWdpbiA9IHBsdWdpbjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAg
IGdfYXNzZXJ0KFdFQktJVF9JU19QTFVHSU4odGVzdFBsdWdpbi5nZXQoKSkpOworCisgICAgR093
blB0cjxjaGFyPiBwbHVnaW5QYXRoKGdfYnVpbGRfZmlsZW5hbWUoV0VCS0lUX1RFU1RfUExVR0lO
X0RJUiwgImxpYlRlc3ROZXRzY2FwZVBsdWdpbi5zbyIsIE5VTEwpKTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIod2Via2l0X3BsdWdpbl9nZXRfcGF0aCh0ZXN0UGx1Z2luLmdldCgpKSwgPT0sIHBsdWdp
blBhdGguZ2V0KCkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfcGx1Z2luX2dldF9kZXNj
cmlwdGlvbih0ZXN0UGx1Z2luLmdldCgpKSwgPT0sICJTaW1wbGUgTmV0c2NhcGXCriBwbHVnLWlu
IHRoYXQgaGFuZGxlcyB0ZXN0IGNvbnRlbnQgZm9yIFdlYktpdCIpOworICAgIEdMaXN0KiBtaW1l
SW5mb0xpc3QgPSB3ZWJraXRfcGx1Z2luX2dldF9taW1lX2luZm9fbGlzdCh0ZXN0UGx1Z2luLmdl
dCgpKTsKKyAgICBnX2Fzc2VydChtaW1lSW5mb0xpc3QpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQo
Z19saXN0X2xlbmd0aChtaW1lSW5mb0xpc3QpLCA9PSwgMik7CisKKyAgICBXZWJLaXRNaW1lSW5m
byogbWltZUluZm8gPSBzdGF0aWNfY2FzdDxXZWJLaXRNaW1lSW5mbyo+KG1pbWVJbmZvTGlzdC0+
ZGF0YSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9taW1lX2luZm9fZ2V0X21pbWVfdHlw
ZShtaW1lSW5mbyksID09LCAiaW1hZ2UvcG5nIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtp
dF9taW1lX2luZm9fZ2V0X2Rlc2NyaXB0aW9uKG1pbWVJbmZvKSwgPT0sICJwbmcgaW1hZ2UiKTsK
KyAgICBjb25zdCBnY2hhciogY29uc3QqIGV4dGVuc2lvbnMgPSB3ZWJraXRfbWltZV9pbmZvX2dl
dF9leHRlbnNpb25zKG1pbWVJbmZvKTsKKyAgICBnX2Fzc2VydChleHRlbnNpb25zKTsKKyAgICBn
X2Fzc2VydF9jbXBzdHIoZXh0ZW5zaW9uc1swXSwgPT0sICJwbmciKTsKKworICAgIG1pbWVJbmZv
TGlzdCA9IGdfbGlzdF9uZXh0KG1pbWVJbmZvTGlzdCk7CisgICAgbWltZUluZm8gPSBzdGF0aWNf
Y2FzdDxXZWJLaXRNaW1lSW5mbyo+KG1pbWVJbmZvTGlzdC0+ZGF0YSk7CisgICAgZ19hc3NlcnRf
Y21wc3RyKHdlYmtpdF9taW1lX2luZm9fZ2V0X21pbWVfdHlwZShtaW1lSW5mbyksID09LCAiYXBw
bGljYXRpb24veC13ZWJraXQtdGVzdC1uZXRzY2FwZSIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3
ZWJraXRfbWltZV9pbmZvX2dldF9kZXNjcmlwdGlvbihtaW1lSW5mbyksID09LCAidGVzdCBuZXRz
Y2FwZSBjb250ZW50Iik7CisgICAgZXh0ZW5zaW9ucyA9IHdlYmtpdF9taW1lX2luZm9fZ2V0X2V4
dGVuc2lvbnMobWltZUluZm8pOworICAgIGdfYXNzZXJ0KGV4dGVuc2lvbnMpOworICAgIGdfYXNz
ZXJ0X2NtcHN0cihleHRlbnNpb25zWzBdLCA9PSwgInRlc3RuZXRzY2FwZSIpOworfQorCitzdGF0
aWMgY29uc3QgY2hhcioga0JhckhUTUwgPSAiPGh0bWw+PGJvZHk+QmFyPC9ib2R5PjwvaHRtbD4i
Oworc3RhdGljIGNvbnN0IGNoYXIqIGtFY2hvSFRNTEZvcm1hdCA9ICI8aHRtbD48Ym9keT4lczwv
Ym9keT48L2h0bWw+IjsKK3N0YXRpYyBjb25zdCBjaGFyKiBlcnJvckRvbWFpbiA9ICJ0ZXN0IjsK
K3N0YXRpYyBjb25zdCBpbnQgZXJyb3JDb2RlID0gMTA7CitzdGF0aWMgY29uc3QgY2hhciogZXJy
b3JNZXNzYWdlID0gIkVycm9yIG1lc3NhZ2UuIjsKKworY2xhc3MgVVJJU2NoZW1lVGVzdDogcHVi
bGljIExvYWRUcmFja2luZ1Rlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRV
UkUoVVJJU2NoZW1lVGVzdCk7CisKKyAgICBzdHJ1Y3QgVVJJU2NoZW1lSGFuZGxlciB7CisgICAg
ICAgIFVSSVNjaGVtZUhhbmRsZXIoKQorICAgICAgICAgICAgOiByZXBseUxlbmd0aCgwKQorICAg
ICAgICB7CisgICAgICAgIH0KKworICAgICAgICBVUklTY2hlbWVIYW5kbGVyKGNvbnN0IGNoYXIq
IHJlcGx5LCBpbnQgcmVwbHlMZW5ndGgsIGNvbnN0IGNoYXIqIG1pbWVUeXBlKQorICAgICAgICAg
ICAgOiByZXBseShyZXBseSkKKyAgICAgICAgICAgICwgcmVwbHlMZW5ndGgocmVwbHlMZW5ndGgp
CisgICAgICAgICAgICAsIG1pbWVUeXBlKG1pbWVUeXBlKQorICAgICAgICB7CisgICAgICAgIH0K
KworICAgICAgICBDU3RyaW5nIHJlcGx5OworICAgICAgICBpbnQgcmVwbHlMZW5ndGg7CisgICAg
ICAgIENTdHJpbmcgbWltZVR5cGU7CisgICAgfTsKKworICAgIHN0YXRpYyB2b2lkIHVyaVNjaGVt
ZVJlcXVlc3RDYWxsYmFjayhXZWJLaXRVUklTY2hlbWVSZXF1ZXN0KiByZXF1ZXN0LCBncG9pbnRl
ciB1c2VyRGF0YSkKKyAgICB7CisgICAgICAgIFVSSVNjaGVtZVRlc3QqIHRlc3QgPSBzdGF0aWNf
Y2FzdDxVUklTY2hlbWVUZXN0Kj4odXNlckRhdGEpOworICAgICAgICB0ZXN0LT5tX3VyaVNjaGVt
ZVJlcXVlc3QgPSByZXF1ZXN0OworICAgICAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRX
aGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHJlcXVlc3QpKTsKKworICAgICAgICBnX2Fzc2VydCh3
ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dldF93ZWJfdmlldyhyZXF1ZXN0KSA9PSB0ZXN0LT5t
X3dlYlZpZXcpOworCisgICAgICAgIEdSZWZQdHI8R0lucHV0U3RyZWFtPiBpbnB1dFN0cmVhbSA9
IGFkb3B0R1JlZihnX21lbW9yeV9pbnB1dF9zdHJlYW1fbmV3KCkpOworICAgICAgICB0ZXN0LT5h
c3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKGlucHV0U3RyZWFt
LmdldCgpKSk7CisKKyAgICAgICAgY29uc3QgY2hhciogc2NoZW1lID0gd2Via2l0X3VyaV9zY2hl
bWVfcmVxdWVzdF9nZXRfc2NoZW1lKHJlcXVlc3QpOworICAgICAgICBnX2Fzc2VydChzY2hlbWUp
OworICAgICAgICBnX2Fzc2VydCh0ZXN0LT5tX2hhbmRsZXJzTWFwLmNvbnRhaW5zKFN0cmluZzo6
ZnJvbVVURjgoc2NoZW1lKSkpOworCisgICAgICAgIGlmICghZ19zdHJjbXAwKHNjaGVtZSwgImVy
cm9yIikpIHsKKyAgICAgICAgICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcihnX2Vycm9yX25ld19s
aXRlcmFsKGdfcXVhcmtfZnJvbV9zdHJpbmcoZXJyb3JEb21haW4pLCBlcnJvckNvZGUsIGVycm9y
TWVzc2FnZSkpOworICAgICAgICAgICAgd2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9maW5pc2hf
ZXJyb3IocmVxdWVzdCwgZXJyb3IuZ2V0KCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgY29uc3QgVVJJU2NoZW1lSGFuZGxlciYgaGFuZGxlciA9IHRlc3QtPm1f
aGFuZGxlcnNNYXAuZ2V0KFN0cmluZzo6ZnJvbVVURjgoc2NoZW1lKSk7CisKKyAgICAgICAgaWYg
KCFnX3N0cmNtcDAoc2NoZW1lLCAiZWNobyIpKSB7CisgICAgICAgICAgICBjaGFyKiByZXBseUhU
TUwgPSBnX3N0cmR1cF9wcmludGYoaGFuZGxlci5yZXBseS5kYXRhKCksIHdlYmtpdF91cmlfc2No
ZW1lX3JlcXVlc3RfZ2V0X3BhdGgocmVxdWVzdCkpOworICAgICAgICAgICAgZ19tZW1vcnlfaW5w
dXRfc3RyZWFtX2FkZF9kYXRhKEdfTUVNT1JZX0lOUFVUX1NUUkVBTShpbnB1dFN0cmVhbS5nZXQo
KSksIHJlcGx5SFRNTCwgc3RybGVuKHJlcGx5SFRNTCksIGdfZnJlZSk7CisgICAgICAgIH0gZWxz
ZSBpZiAoIWdfc3RyY21wMChzY2hlbWUsICJjbG9zZWQiKSkKKyAgICAgICAgICAgIGdfaW5wdXRf
c3RyZWFtX2Nsb3NlKGlucHV0U3RyZWFtLmdldCgpLCAwLCAwKTsKKyAgICAgICAgZWxzZSBpZiAo
IWhhbmRsZXIucmVwbHkuaXNOdWxsKCkpCisgICAgICAgICAgICBnX21lbW9yeV9pbnB1dF9zdHJl
YW1fYWRkX2RhdGEoR19NRU1PUllfSU5QVVRfU1RSRUFNKGlucHV0U3RyZWFtLmdldCgpKSwgaGFu
ZGxlci5yZXBseS5kYXRhKCksIGhhbmRsZXIucmVwbHkubGVuZ3RoKCksIDApOworCisgICAgICAg
IHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZmluaXNoKHJlcXVlc3QsIGlucHV0U3RyZWFtLmdl
dCgpLCBoYW5kbGVyLnJlcGx5TGVuZ3RoLCBoYW5kbGVyLm1pbWVUeXBlLmRhdGEoKSk7CisgICAg
fQorCisgICAgdm9pZCByZWdpc3RlclVSSVNjaGVtZUhhbmRsZXIoY29uc3QgY2hhciogc2NoZW1l
LCBjb25zdCBjaGFyKiByZXBseSwgaW50IHJlcGx5TGVuZ3RoLCBjb25zdCBjaGFyKiBtaW1lVHlw
ZSkKKyAgICB7CisgICAgICAgIG1faGFuZGxlcnNNYXAuc2V0KFN0cmluZzo6ZnJvbVVURjgoc2No
ZW1lKSwgVVJJU2NoZW1lSGFuZGxlcihyZXBseSwgcmVwbHlMZW5ndGgsIG1pbWVUeXBlKSk7Cisg
ICAgICAgIHdlYmtpdF93ZWJfY29udGV4dF9yZWdpc3Rlcl91cmlfc2NoZW1lKHdlYmtpdF93ZWJf
Y29udGV4dF9nZXRfZGVmYXVsdCgpLCBzY2hlbWUsIHVyaVNjaGVtZVJlcXVlc3RDYWxsYmFjaywg
dGhpcywgMCk7CisgICAgfQorCisgICAgR1JlZlB0cjxXZWJLaXRVUklTY2hlbWVSZXF1ZXN0PiBt
X3VyaVNjaGVtZVJlcXVlc3Q7CisgICAgSGFzaE1hcDxTdHJpbmcsIFVSSVNjaGVtZUhhbmRsZXI+
IG1faGFuZGxlcnNNYXA7Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0V2ViQ29udGV4dFVSSVNjaGVt
ZShVUklTY2hlbWVUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPnJlZ2lz
dGVyVVJJU2NoZW1lSGFuZGxlcigiZm9vIiwga0JhckhUTUwsIHN0cmxlbihrQmFySFRNTCksICJ0
ZXh0L2h0bWwiKTsKKyAgICB0ZXN0LT5sb2FkVVJJKCJmb286YmxhbmsiKTsKKyAgICB0ZXN0LT53
YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBzaXplX3QgbWFpblJlc291cmNlRGF0YVNpemUg
PSAwOworICAgIGNvbnN0IGNoYXIqIG1haW5SZXNvdXJjZURhdGEgPSB0ZXN0LT5tYWluUmVzb3Vy
Y2VEYXRhKG1haW5SZXNvdXJjZURhdGFTaXplKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQobWFpblJl
c291cmNlRGF0YVNpemUsID09LCBzdHJsZW4oa0JhckhUTUwpKTsKKyAgICBnX2Fzc2VydCghc3Ry
bmNtcChtYWluUmVzb3VyY2VEYXRhLCBrQmFySFRNTCwgbWFpblJlc291cmNlRGF0YVNpemUpKTsK
KworICAgIHRlc3QtPnJlZ2lzdGVyVVJJU2NoZW1lSGFuZGxlcigiZWNobyIsIGtFY2hvSFRNTEZv
cm1hdCwgLTEsICJ0ZXh0L2h0bWwiKTsKKyAgICB0ZXN0LT5sb2FkVVJJKCJlY2hvOmhlbGxvIHdv
cmxkIik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgR093blB0cjxj
aGFyPiBlY2hvSFRNTChnX3N0cmR1cF9wcmludGYoa0VjaG9IVE1MRm9ybWF0LCB3ZWJraXRfdXJp
X3NjaGVtZV9yZXF1ZXN0X2dldF9wYXRoKHRlc3QtPm1fdXJpU2NoZW1lUmVxdWVzdC5nZXQoKSkp
KTsKKyAgICBtYWluUmVzb3VyY2VEYXRhU2l6ZSA9IDA7CisgICAgbWFpblJlc291cmNlRGF0YSA9
IHRlc3QtPm1haW5SZXNvdXJjZURhdGEobWFpblJlc291cmNlRGF0YVNpemUpOworICAgIGdfYXNz
ZXJ0X2NtcGludChtYWluUmVzb3VyY2VEYXRhU2l6ZSwgPT0sIHN0cmxlbihlY2hvSFRNTC5nZXQo
KSkpOworICAgIGdfYXNzZXJ0KCFzdHJuY21wKG1haW5SZXNvdXJjZURhdGEsIGVjaG9IVE1MLmdl
dCgpLCBtYWluUmVzb3VyY2VEYXRhU2l6ZSkpOworCisgICAgdGVzdC0+cmVnaXN0ZXJVUklTY2hl
bWVIYW5kbGVyKCJub21pbWUiLCBrQmFySFRNTCwgLTEsIDApOworICAgIHRlc3QtPm1fbG9hZEV2
ZW50cy5jbGVhcigpOworICAgIHRlc3QtPmxvYWRVUkkoIm5vbWltZTpmb28gYmFyIik7CisgICAg
dGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9sb2Fk
RXZlbnRzLmNvbnRhaW5zKExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZEZhaWxlZCkp
OworCisgICAgdGVzdC0+cmVnaXN0ZXJVUklTY2hlbWVIYW5kbGVyKCJlbXB0eSIsIDAsIDAsICJ0
ZXh0L2h0bWwiKTsKKyAgICB0ZXN0LT5tX2xvYWRFdmVudHMuY2xlYXIoKTsKKyAgICB0ZXN0LT5s
b2FkVVJJKCJlbXB0eTpub3RoaW5nIik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVk
KCk7CisgICAgZ19hc3NlcnQoIXRlc3QtPm1fbG9hZEV2ZW50cy5jb250YWlucyhMb2FkVHJhY2tp
bmdUZXN0OjpQcm92aXNpb25hbExvYWRGYWlsZWQpKTsKKyAgICBnX2Fzc2VydCghdGVzdC0+bV9s
b2FkRXZlbnRzLmNvbnRhaW5zKExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGYWlsZWQpKTsKKworICAg
IHRlc3QtPnJlZ2lzdGVyVVJJU2NoZW1lSGFuZGxlcigiZXJyb3IiLCAwLCAwLCAwKTsKKyAgICB0
ZXN0LT5tX2xvYWRFdmVudHMuY2xlYXIoKTsKKyAgICB0ZXN0LT5sb2FkVVJJKCJlcnJvcjplcnJv
ciIpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0KHRl
c3QtPm1fbG9hZEV2ZW50cy5jb250YWlucyhMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExv
YWRGYWlsZWQpKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX2xvYWRGYWlsZWQpOworICAgIGdfYXNz
ZXJ0X2Vycm9yKHRlc3QtPm1fZXJyb3IuZ2V0KCksIGdfcXVhcmtfZnJvbV9zdHJpbmcoZXJyb3JE
b21haW4pLCBlcnJvckNvZGUpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXN0LT5tX2Vycm9yLT5t
ZXNzYWdlLCA9PSwgZXJyb3JNZXNzYWdlKTsKKworICAgIHRlc3QtPnJlZ2lzdGVyVVJJU2NoZW1l
SGFuZGxlcigiY2xvc2VkIiwgMCwgMCwgMCk7CisgICAgdGVzdC0+bV9sb2FkRXZlbnRzLmNsZWFy
KCk7CisgICAgdGVzdC0+bG9hZFVSSSgiY2xvc2VkOmlucHV0LXN0cmVhbSIpOworICAgIHRlc3Qt
PndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fbG9hZEV2ZW50
cy5jb250YWlucyhMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRGYWlsZWQpKTsKKyAg
ICBnX2Fzc2VydCh0ZXN0LT5tX2xvYWRGYWlsZWQpOworICAgIGdfYXNzZXJ0X2Vycm9yKHRlc3Qt
Pm1fZXJyb3IuZ2V0KCksIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfQ0xPU0VEKTsKK30KKworc3Rh
dGljIHZvaWQgdGVzdFdlYkNvbnRleHRTcGVsbENoZWNrZXIoVGVzdCogdGVzdCwgZ2NvbnN0cG9p
bnRlcikKK3sKKyAgICBXZWJLaXRXZWJDb250ZXh0KiB3ZWJDb250ZXh0ID0gd2Via2l0X3dlYl9j
b250ZXh0X2dldF9kZWZhdWx0KCk7CisKKyAgICAvLyBDaGVjayB3aGF0IGhhcHBlbnMgaWYgbm8g
c3BlbGwgY2hlY2tpbmcgbGFuZ3VhZ2UgaGFzIGJlZW4gc2V0LgorICAgIGNvbnN0IGdjaGFyKiBj
b25zdCogY3VycmVudExhbmd1YWdlID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9zcGVsbF9jaGVj
a2luZ19sYW5ndWFnZXMod2ViQ29udGV4dCk7CisgICAgZ19hc3NlcnQoIWN1cnJlbnRMYW5ndWFn
ZSk7CisKKyAgICAvLyBTZXQgdGhlIGxhbmd1YWdlIHRvIGEgc3BlY2lmaWMgb25lLgorICAgIEdS
ZWZQdHI8R1B0ckFycmF5PiBsYW5ndWFnZXMgPSBhZG9wdEdSZWYoZ19wdHJfYXJyYXlfbmV3KCkp
OworICAgIGdfcHRyX2FycmF5X2FkZChsYW5ndWFnZXMuZ2V0KCksIGNvbnN0X2Nhc3Q8Z3BvaW50
ZXI+KHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqPigiZW5fVVMiKSkpOworICAgIGdfcHRyX2FycmF5
X2FkZChsYW5ndWFnZXMuZ2V0KCksIDApOworICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfc3Bl
bGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKHdlYkNvbnRleHQsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
Y2hhciogY29uc3QqPihsYW5ndWFnZXMtPnBkYXRhKSk7CisgICAgY3VycmVudExhbmd1YWdlID0g
d2Via2l0X3dlYl9jb250ZXh0X2dldF9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMod2ViQ29udGV4
dCk7CisgICAgZ19hc3NlcnRfY21wdWludChnX3N0cnZfbGVuZ3RoKGNvbnN0X2Nhc3Q8Y2hhcioq
PihjdXJyZW50TGFuZ3VhZ2UpKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcHN0cihjdXJyZW50
TGFuZ3VhZ2VbMF0sID09LCAiZW5fVVMiKTsKKworICAgIC8vIFNldCB0aGUgbGFuZ3VhZ2Ugc3Ry
aW5nIHRvIGxpc3Qgb2YgdmFsaWQgbGFuZ3VhZ2VzLgorICAgIGdfcHRyX2FycmF5X3JlbW92ZV9p
bmRleF9mYXN0KGxhbmd1YWdlcy5nZXQoKSwgbGFuZ3VhZ2VzLT5sZW4gLSAxKTsKKyAgICBnX3B0
cl9hcnJheV9hZGQobGFuZ3VhZ2VzLmdldCgpLCBjb25zdF9jYXN0PGdwb2ludGVyPihzdGF0aWNf
Y2FzdDxjb25zdCB2b2lkKj4oImVuX0dCIikpKTsKKyAgICBnX3B0cl9hcnJheV9hZGQobGFuZ3Vh
Z2VzLmdldCgpLCAwKTsKKyAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3NwZWxsX2NoZWNraW5n
X2xhbmd1YWdlcyh3ZWJDb250ZXh0LCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqIGNvbnN0
Kj4obGFuZ3VhZ2VzLT5wZGF0YSkpOworICAgIGN1cnJlbnRMYW5ndWFnZSA9IHdlYmtpdF93ZWJf
Y29udGV4dF9nZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKHdlYkNvbnRleHQpOworICAgIGdf
YXNzZXJ0X2NtcHVpbnQoZ19zdHJ2X2xlbmd0aChjb25zdF9jYXN0PGNoYXIqKj4oY3VycmVudExh
bmd1YWdlKSksID09LCAyKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoY3VycmVudExhbmd1YWdlWzBd
LCA9PSwgImVuX1VTIik7CisgICAgZ19hc3NlcnRfY21wc3RyKGN1cnJlbnRMYW5ndWFnZVsxXSwg
PT0sICJlbl9HQiIpOworCisgICAgLy8gVHJ5IHBhc3NpbmcgYSB3cm9uZyBsYW5ndWFnZSBhbG9u
ZyB3aXRoIGdvb2Qgb25lcy4KKyAgICBnX3B0cl9hcnJheV9yZW1vdmVfaW5kZXhfZmFzdChsYW5n
dWFnZXMuZ2V0KCksIGxhbmd1YWdlcy0+bGVuIC0gMSk7CisgICAgZ19wdHJfYXJyYXlfYWRkKGxh
bmd1YWdlcy5nZXQoKSwgY29uc3RfY2FzdDxncG9pbnRlcj4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9p
ZCo+KCJiZF9XUiIpKSk7CisgICAgZ19wdHJfYXJyYXlfYWRkKGxhbmd1YWdlcy5nZXQoKSwgMCk7
CisgICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMod2Vi
Q29udGV4dCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKiBjb25zdCo+KGxhbmd1YWdlcy0+
cGRhdGEpKTsKKyAgICBjdXJyZW50TGFuZ3VhZ2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3Nw
ZWxsX2NoZWNraW5nX2xhbmd1YWdlcyh3ZWJDb250ZXh0KTsKKyAgICBnX2Fzc2VydF9jbXB1aW50
KGdfc3Rydl9sZW5ndGgoY29uc3RfY2FzdDxjaGFyKio+KGN1cnJlbnRMYW5ndWFnZSkpLCA9PSwg
Mik7CisgICAgZ19hc3NlcnRfY21wc3RyKGN1cnJlbnRMYW5ndWFnZVswXSwgPT0sICJlbl9VUyIp
OworICAgIGdfYXNzZXJ0X2NtcHN0cihjdXJyZW50TGFuZ3VhZ2VbMV0sID09LCAiZW5fR0IiKTsK
KworICAgIC8vIFRyeSBwYXNzaW5nIGEgbGlzdCB3aXRoIG9ubHkgd3JvbmcgbGFuZ3VhZ2VzLgor
ICAgIGxhbmd1YWdlcyA9IGFkb3B0R1JlZihnX3B0cl9hcnJheV9uZXcoKSk7CisgICAgZ19wdHJf
YXJyYXlfYWRkKGxhbmd1YWdlcy5nZXQoKSwgY29uc3RfY2FzdDxncG9pbnRlcj4oc3RhdGljX2Nh
c3Q8Y29uc3Qgdm9pZCo+KCJiZF9XUiIpKSk7CisgICAgZ19wdHJfYXJyYXlfYWRkKGxhbmd1YWdl
cy5nZXQoKSwgY29uc3RfY2FzdDxncG9pbnRlcj4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KCJ3
cl9CRCIpKSk7CisgICAgZ19wdHJfYXJyYXlfYWRkKGxhbmd1YWdlcy5nZXQoKSwgMCk7CisgICAg
d2Via2l0X3dlYl9jb250ZXh0X3NldF9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMod2ViQ29udGV4
dCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKiBjb25zdCo+KGxhbmd1YWdlcy0+cGRhdGEp
KTsKKyAgICBjdXJyZW50TGFuZ3VhZ2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3NwZWxsX2No
ZWNraW5nX2xhbmd1YWdlcyh3ZWJDb250ZXh0KTsKKyAgICBnX2Fzc2VydCghY3VycmVudExhbmd1
YWdlKTsKKworICAgIC8vIENoZWNrIGRpc2FibGluZyBhbmQgcmUtZW5hYmxpbmcgc3BlbGwgY2hl
Y2tpbmcuCisgICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF9zcGVsbF9jaGVja2luZ19lbmFibGVk
KHdlYkNvbnRleHQsIEZBTFNFKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl9jb250ZXh0X2dl
dF9zcGVsbF9jaGVja2luZ19lbmFibGVkKHdlYkNvbnRleHQpKTsKKyAgICB3ZWJraXRfd2ViX2Nv
bnRleHRfc2V0X3NwZWxsX2NoZWNraW5nX2VuYWJsZWQod2ViQ29udGV4dCwgVFJVRSk7CisgICAg
Z19hc3NlcnQod2Via2l0X3dlYl9jb250ZXh0X2dldF9zcGVsbF9jaGVja2luZ19lbmFibGVkKHdl
YkNvbnRleHQpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYkNvbnRleHRMYW5ndWFnZXMoV2Vi
Vmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIq
IGV4cGVjdGVkRGVmYXVsdExhbmd1YWdlID0gImVuIjsKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2
ZXItPmdldFVSSUZvclBhdGgoIi8iKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRG
aW5pc2hlZCgpOworICAgIHNpemVfdCBtYWluUmVzb3VyY2VEYXRhU2l6ZSA9IDA7CisgICAgY29u
c3QgY2hhciogbWFpblJlc291cmNlRGF0YSA9IHRlc3QtPm1haW5SZXNvdXJjZURhdGEobWFpblJl
c291cmNlRGF0YVNpemUpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQobWFpblJlc291cmNlRGF0YVNp
emUsID09LCBzdHJsZW4oZXhwZWN0ZWREZWZhdWx0TGFuZ3VhZ2UpKTsKKyAgICBnX2Fzc2VydCgh
c3RybmNtcChtYWluUmVzb3VyY2VEYXRhLCBleHBlY3RlZERlZmF1bHRMYW5ndWFnZSwgbWFpblJl
c291cmNlRGF0YVNpemUpKTsKKworICAgIEdSZWZQdHI8R1B0ckFycmF5PiBsYW5ndWFnZXMgPSBh
ZG9wdEdSZWYoZ19wdHJfYXJyYXlfbmV3KCkpOworICAgIGdfcHRyX2FycmF5X2FkZChsYW5ndWFn
ZXMuZ2V0KCksIGNvbnN0X2Nhc3Q8Z3BvaW50ZXI+KHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqPigi
ZW4iKSkpOworICAgIGdfcHRyX2FycmF5X2FkZChsYW5ndWFnZXMuZ2V0KCksIGNvbnN0X2Nhc3Q8
Z3BvaW50ZXI+KHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqPigiRVNfZXMiKSkpOworICAgIGdfcHRy
X2FycmF5X2FkZChsYW5ndWFnZXMuZ2V0KCksIGNvbnN0X2Nhc3Q8Z3BvaW50ZXI+KHN0YXRpY19j
YXN0PGNvbnN0IHZvaWQqPigiZEUiKSkpOworICAgIGdfcHRyX2FycmF5X2FkZChsYW5ndWFnZXMu
Z2V0KCksIDApOworICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfcHJlZmVycmVkX2xhbmd1YWdl
cyh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBjaGFyKiBjb25zdCo+KGxhbmd1YWdlcy0+cGRhdGEpKTsKKworICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBleHBlY3RlZExhbmd1YWdlcyA9ICJlbiwgZXMtZXM7cT0wLjkwLCBkZTtxPTAuODAiOwor
ICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7Cisg
ICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgbWFpblJlc291cmNlRGF0YVNp
emUgPSAwOworICAgIG1haW5SZXNvdXJjZURhdGEgPSB0ZXN0LT5tYWluUmVzb3VyY2VEYXRhKG1h
aW5SZXNvdXJjZURhdGFTaXplKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KG1haW5SZXNvdXJjZURh
dGFTaXplLCA9PSwgc3RybGVuKGV4cGVjdGVkTGFuZ3VhZ2VzKSk7CisgICAgZ19hc3NlcnQoIXN0
cm5jbXAobWFpblJlc291cmNlRGF0YSwgZXhwZWN0ZWRMYW5ndWFnZXMsIG1haW5SZXNvdXJjZURh
dGFTaXplKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNl
cnZlciwgU291cE1lc3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUq
LCBTb3VwQ2xpZW50Q29udGV4dCosIGdwb2ludGVyKQoreworICAgIGlmIChtZXNzYWdlLT5tZXRo
b2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVz
KG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi8iKSkgeworICAgICAgICBjb25z
dCBjaGFyKiBhY2NlcHRMYW5ndWFnZSA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9vbmUobWVz
c2FnZS0+cmVxdWVzdF9oZWFkZXJzLCAiQWNjZXB0LUxhbmd1YWdlIik7CisgICAgICAgIHNvdXBf
bWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKKyAgICAgICAgc291
cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZ
X0NPUFksIGFjY2VwdExhbmd1YWdlLCBzdHJsZW4oYWNjZXB0TGFuZ3VhZ2UpKTsKKyAgICAgICAg
c291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7CisgICAg
fSBlbHNlCisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RB
VFVTX05PVF9GT1VORCk7Cit9CisKK2NsYXNzIFNlY3VyaXR5UG9saWN5VGVzdDogcHVibGljIFRl
c3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoU2VjdXJpdHlQb2xpY3lU
ZXN0KTsKKworICAgIGVudW0gU2VjdXJpdHlQb2xpY3kgeworICAgICAgICBMb2NhbCA9IDEgPDwg
MSwKKyAgICAgICAgTm9BY2Nlc3MgPSAxIDw8IDIsCisgICAgICAgIERpc3BsYXlJc29sYXRlZCA9
IDEgPDwgMywKKyAgICAgICAgU2VjdXJlID0gMSA8PCA0LAorICAgICAgICBDT1JTRW5hYmxlZCA9
IDEgPDwgNSwKKyAgICAgICAgRW1wdHlEb2N1bWVudCA9IDEgPDwgNgorICAgIH07CisKKyAgICBT
ZWN1cml0eVBvbGljeVRlc3QoKQorICAgICAgICA6IG1fbWFuYWdlcih3ZWJraXRfd2ViX2NvbnRl
eHRfZ2V0X3NlY3VyaXR5X21hbmFnZXIod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCkp
KQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHZlcmlmeVRoYXRTY2hlbWVNYXRjaGVzUG9saWN5
KGNvbnN0IGNoYXIqIHNjaGVtZSwgdW5zaWduZWQgcG9saWN5KQorICAgIHsKKyAgICAgICAgaWYg
KHBvbGljeSAmIExvY2FsKQorICAgICAgICAgICAgZ19hc3NlcnQod2Via2l0X3NlY3VyaXR5X21h
bmFnZXJfdXJpX3NjaGVtZV9pc19sb2NhbChtX21hbmFnZXIsIHNjaGVtZSkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X3NlY3VyaXR5X21hbmFnZXJfdXJpX3Nj
aGVtZV9pc19sb2NhbChtX21hbmFnZXIsIHNjaGVtZSkpOworICAgICAgICBpZiAocG9saWN5ICYg
Tm9BY2Nlc3MpCisgICAgICAgICAgICBnX2Fzc2VydCh3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl91
cmlfc2NoZW1lX2lzX25vX2FjY2VzcyhtX21hbmFnZXIsIHNjaGVtZSkpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X3NlY3VyaXR5X21hbmFnZXJfdXJpX3NjaGVt
ZV9pc19ub19hY2Nlc3MobV9tYW5hZ2VyLCBzY2hlbWUpKTsKKyAgICAgICAgaWYgKHBvbGljeSAm
IERpc3BsYXlJc29sYXRlZCkKKyAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9zZWN1cml0eV9t
YW5hZ2VyX3VyaV9zY2hlbWVfaXNfZGlzcGxheV9pc29sYXRlZChtX21hbmFnZXIsIHNjaGVtZSkp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X3NlY3VyaXR5X21h
bmFnZXJfdXJpX3NjaGVtZV9pc19kaXNwbGF5X2lzb2xhdGVkKG1fbWFuYWdlciwgc2NoZW1lKSk7
CisgICAgICAgIGlmIChwb2xpY3kgJiBTZWN1cmUpCisgICAgICAgICAgICBnX2Fzc2VydCh3ZWJr
aXRfc2VjdXJpdHlfbWFuYWdlcl91cmlfc2NoZW1lX2lzX3NlY3VyZShtX21hbmFnZXIsIHNjaGVt
ZSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X3NlY3VyaXR5
X21hbmFnZXJfdXJpX3NjaGVtZV9pc19zZWN1cmUobV9tYW5hZ2VyLCBzY2hlbWUpKTsKKyAgICAg
ICAgaWYgKHBvbGljeSAmIENPUlNFbmFibGVkKQorICAgICAgICAgICAgZ19hc3NlcnQod2Via2l0
X3NlY3VyaXR5X21hbmFnZXJfdXJpX3NjaGVtZV9pc19jb3JzX2VuYWJsZWQobV9tYW5hZ2VyLCBz
Y2hlbWUpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9zZWN1
cml0eV9tYW5hZ2VyX3VyaV9zY2hlbWVfaXNfY29yc19lbmFibGVkKG1fbWFuYWdlciwgc2NoZW1l
KSk7CisgICAgICAgIGlmIChwb2xpY3kgJiBFbXB0eURvY3VtZW50KQorICAgICAgICAgICAgZ19h
c3NlcnQod2Via2l0X3NlY3VyaXR5X21hbmFnZXJfdXJpX3NjaGVtZV9pc19lbXB0eV9kb2N1bWVu
dChtX21hbmFnZXIsIHNjaGVtZSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBnX2Fzc2Vy
dCghd2Via2l0X3NlY3VyaXR5X21hbmFnZXJfdXJpX3NjaGVtZV9pc19lbXB0eV9kb2N1bWVudCht
X21hbmFnZXIsIHNjaGVtZSkpOworICAgIH0KKworICAgIFdlYktpdFNlY3VyaXR5TWFuYWdlciog
bV9tYW5hZ2VyOworfTsKKworc3RhdGljIHZvaWQgdGVzdFdlYkNvbnRleHRTZWN1cml0eVBvbGlj
eShTZWN1cml0eVBvbGljeVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8gVmVy
aWZ5VGhhdFNjaGVtZU1hdGNoZXNQb2xpY3kgZGVmYXVsdCBwb2xpY3kgZm9yIHdlbGwga25vd24g
c2NoZW1lcy4KKyAgICB0ZXN0LT52ZXJpZnlUaGF0U2NoZW1lTWF0Y2hlc1BvbGljeSgiaHR0cCIs
IFNlY3VyaXR5UG9saWN5VGVzdDo6Q09SU0VuYWJsZWQpOworICAgIHRlc3QtPnZlcmlmeVRoYXRT
Y2hlbWVNYXRjaGVzUG9saWN5KCJodHRwcyIsIFNlY3VyaXR5UG9saWN5VGVzdDo6Q09SU0VuYWJs
ZWQgfCBTZWN1cml0eVBvbGljeVRlc3Q6OlNlY3VyZSk7CisgICAgdGVzdC0+dmVyaWZ5VGhhdFNj
aGVtZU1hdGNoZXNQb2xpY3koImZpbGUiLCBTZWN1cml0eVBvbGljeVRlc3Q6OkxvY2FsKTsKKyAg
ICB0ZXN0LT52ZXJpZnlUaGF0U2NoZW1lTWF0Y2hlc1BvbGljeSgiZGF0YSIsIFNlY3VyaXR5UG9s
aWN5VGVzdDo6Tm9BY2Nlc3MgfCBTZWN1cml0eVBvbGljeVRlc3Q6OlNlY3VyZSk7CisgICAgdGVz
dC0+dmVyaWZ5VGhhdFNjaGVtZU1hdGNoZXNQb2xpY3koImFib3V0IiwgU2VjdXJpdHlQb2xpY3lU
ZXN0OjpOb0FjY2VzcyB8IFNlY3VyaXR5UG9saWN5VGVzdDo6U2VjdXJlIHwgU2VjdXJpdHlQb2xp
Y3lUZXN0OjpFbXB0eURvY3VtZW50KTsKKworICAgIC8vIEN1c3RvbSBzY2hlbWUuCisgICAgdGVz
dC0+dmVyaWZ5VGhhdFNjaGVtZU1hdGNoZXNQb2xpY3koImZvbyIsIDApOworCisgICAgd2Via2l0
X3NlY3VyaXR5X21hbmFnZXJfcmVnaXN0ZXJfdXJpX3NjaGVtZV9hc19sb2NhbCh0ZXN0LT5tX21h
bmFnZXIsICJmb28iKTsKKyAgICB0ZXN0LT52ZXJpZnlUaGF0U2NoZW1lTWF0Y2hlc1BvbGljeSgi
Zm9vIiwgU2VjdXJpdHlQb2xpY3lUZXN0OjpMb2NhbCk7CisgICAgd2Via2l0X3NlY3VyaXR5X21h
bmFnZXJfcmVnaXN0ZXJfdXJpX3NjaGVtZV9hc19ub19hY2Nlc3ModGVzdC0+bV9tYW5hZ2VyLCAi
Zm9vIik7CisgICAgdGVzdC0+dmVyaWZ5VGhhdFNjaGVtZU1hdGNoZXNQb2xpY3koImZvbyIsIFNl
Y3VyaXR5UG9saWN5VGVzdDo6TG9jYWwgfCBTZWN1cml0eVBvbGljeVRlc3Q6Ok5vQWNjZXNzKTsK
KyAgICB3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl9yZWdpc3Rlcl91cmlfc2NoZW1lX2FzX2Rpc3Bs
YXlfaXNvbGF0ZWQodGVzdC0+bV9tYW5hZ2VyLCAiZm9vIik7CisgICAgdGVzdC0+dmVyaWZ5VGhh
dFNjaGVtZU1hdGNoZXNQb2xpY3koImZvbyIsIFNlY3VyaXR5UG9saWN5VGVzdDo6TG9jYWwgfCBT
ZWN1cml0eVBvbGljeVRlc3Q6Ok5vQWNjZXNzIHwgU2VjdXJpdHlQb2xpY3lUZXN0OjpEaXNwbGF5
SXNvbGF0ZWQpOworICAgIHdlYmtpdF9zZWN1cml0eV9tYW5hZ2VyX3JlZ2lzdGVyX3VyaV9zY2hl
bWVfYXNfc2VjdXJlKHRlc3QtPm1fbWFuYWdlciwgImZvbyIpOworICAgIHRlc3QtPnZlcmlmeVRo
YXRTY2hlbWVNYXRjaGVzUG9saWN5KCJmb28iLCBTZWN1cml0eVBvbGljeVRlc3Q6OkxvY2FsIHwg
U2VjdXJpdHlQb2xpY3lUZXN0OjpOb0FjY2VzcyB8IFNlY3VyaXR5UG9saWN5VGVzdDo6RGlzcGxh
eUlzb2xhdGVkIHwgU2VjdXJpdHlQb2xpY3lUZXN0OjpTZWN1cmUpOworICAgIHdlYmtpdF9zZWN1
cml0eV9tYW5hZ2VyX3JlZ2lzdGVyX3VyaV9zY2hlbWVfYXNfY29yc19lbmFibGVkKHRlc3QtPm1f
bWFuYWdlciwgImZvbyIpOworICAgIHRlc3QtPnZlcmlmeVRoYXRTY2hlbWVNYXRjaGVzUG9saWN5
KCJmb28iLCBTZWN1cml0eVBvbGljeVRlc3Q6OkxvY2FsIHwgU2VjdXJpdHlQb2xpY3lUZXN0OjpO
b0FjY2VzcyB8IFNlY3VyaXR5UG9saWN5VGVzdDo6RGlzcGxheUlzb2xhdGVkIHwgU2VjdXJpdHlQ
b2xpY3lUZXN0OjpTZWN1cmUKKyAgICAgICAgfCBTZWN1cml0eVBvbGljeVRlc3Q6OkNPUlNFbmFi
bGVkKTsKKyAgICB3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl9yZWdpc3Rlcl91cmlfc2NoZW1lX2Fz
X2VtcHR5X2RvY3VtZW50KHRlc3QtPm1fbWFuYWdlciwgImZvbyIpOworICAgIHRlc3QtPnZlcmlm
eVRoYXRTY2hlbWVNYXRjaGVzUG9saWN5KCJmb28iLCBTZWN1cml0eVBvbGljeVRlc3Q6OkxvY2Fs
IHwgU2VjdXJpdHlQb2xpY3lUZXN0OjpOb0FjY2VzcyB8IFNlY3VyaXR5UG9saWN5VGVzdDo6RGlz
cGxheUlzb2xhdGVkIHwgU2VjdXJpdHlQb2xpY3lUZXN0OjpTZWN1cmUKKyAgICAgICAgfCBTZWN1
cml0eVBvbGljeVRlc3Q6OkNPUlNFbmFibGVkIHwgU2VjdXJpdHlQb2xpY3lUZXN0OjpFbXB0eURv
Y3VtZW50KTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQoreworICAgIGtTZXJ2ZXIgPSBuZXcgV2Vi
S2l0VGVzdFNlcnZlcigpOworICAgIGtTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFjayk7CisKKyAg
ICBUZXN0OjphZGQoIldlYktpdFdlYkNvbnRleHQiLCAiZGVmYXVsdC1jb250ZXh0IiwgdGVzdFdl
YkNvbnRleHREZWZhdWx0KTsKKyAgICBQbHVnaW5zVGVzdDo6YWRkKCJXZWJLaXRXZWJDb250ZXh0
IiwgImdldC1wbHVnaW5zIiwgdGVzdFdlYkNvbnRleHRHZXRQbHVnaW5zKTsKKyAgICBVUklTY2hl
bWVUZXN0OjphZGQoIldlYktpdFdlYkNvbnRleHQiLCAidXJpLXNjaGVtZSIsIHRlc3RXZWJDb250
ZXh0VVJJU2NoZW1lKTsKKyAgICBUZXN0OjphZGQoIldlYktpdFdlYkNvbnRleHQiLCAic3BlbGwt
Y2hlY2tlciIsIHRlc3RXZWJDb250ZXh0U3BlbGxDaGVja2VyKTsKKyAgICBXZWJWaWV3VGVzdDo6
YWRkKCJXZWJLaXRXZWJDb250ZXh0IiwgImxhbmd1YWdlcyIsIHRlc3RXZWJDb250ZXh0TGFuZ3Vh
Z2VzKTsKKyAgICBTZWN1cml0eVBvbGljeVRlc3Q6OmFkZCgiV2ViS2l0U2VjdXJpdHlNYW5hZ2Vy
IiwgInNlY3VyaXR5LXBvbGljeSIsIHRlc3RXZWJDb250ZXh0U2VjdXJpdHlQb2xpY3kpOworfQor
Cit2b2lkIGFmdGVyQWxsKCkKK3sKKyAgICBkZWxldGUga1NlcnZlcjsKK30KZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0V2ViVmlldy5j
cHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFdlYlZp
ZXcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0OWIzNzYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdl
YktpdFdlYlZpZXcuY3BwCkBAIC0wLDAgKzEsNjA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIs
MSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViVmlld1Rl
c3QuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oPgorI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTVmFsdWVSZWYuaD4KKyNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgor
I2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKworc3RhdGljIHZvaWQgdGVzdFdlYlZp
ZXdEZWZhdWx0Q29udGV4dChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAg
ICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQodGVzdC0+bV93ZWJWaWV3KSA9
PSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSk7CisKKyAgICAvLyBDaGVjayB0aGF0
IGEgd2ViIHZpZXcgY3JlYXRlZCB3aXRoIGdfb2JqZWN0X25ldyBoYXMgdGhlIGRlZmF1bHQgY29u
dGV4dC4KKyAgICBHUmVmUHRyPFdlYktpdFdlYlZpZXc+IHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJ
RVcoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQl9WSUVXLCBOVUxMKSk7CisgICAgZ19hc3Nl
cnQod2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KHdlYlZpZXcuZ2V0KCkpID09IHdlYmtpdF93
ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdD
dXN0b21DaGFyc2V0KFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIGdf
YXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfZ2V0X2N1c3RvbV9jaGFyc2V0KHRlc3QtPm1fd2ViVmll
dykpOworICAgIHdlYmtpdF93ZWJfdmlld19zZXRfY3VzdG9tX2NoYXJzZXQodGVzdC0+bV93ZWJW
aWV3LCAidXRmOCIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X2N1
c3RvbV9jaGFyc2V0KHRlc3QtPm1fd2ViVmlldyksID09LCAidXRmOCIpOworICAgIC8vIEdvIGJh
Y2sgdG8gdGhlIGRlZmF1bHQgY2hhcnNldC4KKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X2N1c3Rv
bV9jaGFyc2V0KHRlc3QtPm1fd2ViVmlldywgMCk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJf
dmlld19nZXRfY3VzdG9tX2NoYXJzZXQodGVzdC0+bV93ZWJWaWV3KSk7Cit9CisKK3N0YXRpYyB2
b2lkIHRlc3RXZWJWaWV3U2V0dGluZ3MoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIp
Cit7CisgICAgV2ViS2l0U2V0dGluZ3MqIGRlZmF1bHRTZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmll
d19nZXRfc2V0dGluZ3ModGVzdC0+bV93ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChkZWZhdWx0U2V0
dGluZ3MpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2phdmFzY3Jp
cHQoZGVmYXVsdFNldHRpbmdzKSk7CisKKyAgICBHUmVmUHRyPFdlYktpdFNldHRpbmdzPiBuZXdT
ZXR0aW5ncyA9IGFkb3B0R1JlZih3ZWJraXRfc2V0dGluZ3NfbmV3KCkpOworICAgIGdfb2JqZWN0
X3NldChHX09CSkVDVChuZXdTZXR0aW5ncy5nZXQoKSksICJlbmFibGUtamF2YXNjcmlwdCIsIEZB
TFNFLCBOVUxMKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X3NldHRpbmdzKHRlc3QtPm1fd2Vi
VmlldywgbmV3U2V0dGluZ3MuZ2V0KCkpOworCisgICAgV2ViS2l0U2V0dGluZ3MqIHNldHRpbmdz
ID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh0ZXN0LT5tX3dlYlZpZXcpOworICAgIGdf
YXNzZXJ0KHNldHRpbmdzICE9IGRlZmF1bHRTZXR0aW5ncyk7CisgICAgZ19hc3NlcnQoIXdlYmtp
dF9zZXR0aW5nc19nZXRfZW5hYmxlX2phdmFzY3JpcHQoc2V0dGluZ3MpKTsKKworICAgIEdSZWZQ
dHI8R3RrV2lkZ2V0PiB3ZWJWaWV3MiA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKKyAgICB0ZXN0
LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHdlYlZpZXcy
LmdldCgpKSk7CisgICAgd2Via2l0X3dlYl92aWV3X3NldF9zZXR0aW5ncyhXRUJLSVRfV0VCX1ZJ
RVcod2ViVmlldzIuZ2V0KCkpLCBzZXR0aW5ncyk7CisgICAgZ19hc3NlcnQod2Via2l0X3dlYl92
aWV3X2dldF9zZXR0aW5ncyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldzIuZ2V0KCkpKSA9PSBzZXR0
aW5ncyk7CisKKyAgICBHUmVmUHRyPFdlYktpdFNldHRpbmdzPiBuZXdTZXR0aW5nczIgPSBhZG9w
dEdSZWYod2Via2l0X3NldHRpbmdzX25ldygpKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X3Nl
dHRpbmdzKFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3Mi5nZXQoKSksIG5ld1NldHRpbmdzMi5nZXQo
KSk7CisgICAgc2V0dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKFdFQktJVF9X
RUJfVklFVyh3ZWJWaWV3Mi5nZXQoKSkpOworICAgIGdfYXNzZXJ0KHNldHRpbmdzID09IG5ld1Nl
dHRpbmdzMi5nZXQoKSk7CisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVf
amF2YXNjcmlwdChzZXR0aW5ncykpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1pvb21M
ZXZlbChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBnX2Fzc2VydF9j
bXBmbG9hdCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3pvb21fbGV2ZWwodGVzdC0+bV93ZWJWaWV3KSwg
PT0sIDEpOworICAgIHdlYmtpdF93ZWJfdmlld19zZXRfem9vbV9sZXZlbCh0ZXN0LT5tX3dlYlZp
ZXcsIDIuNSk7CisgICAgZ19hc3NlcnRfY21wZmxvYXQod2Via2l0X3dlYl92aWV3X2dldF96b29t
X2xldmVsKHRlc3QtPm1fd2ViVmlldyksID09LCAyLjUpOworCisgICAgd2Via2l0X3NldHRpbmdz
X3NldF96b29tX3RleHRfb25seSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHRlc3QtPm1f
d2ViVmlldyksIFRSVUUpOworICAgIC8vIFRoZSB6b29tIGxldmVsIHNob3VsZG4ndCBjaGFuZ2Ug
d2hlbiB6b29tLXRleHQtb25seSBzZXR0aW5nIGNoYW5nZXMuCisgICAgZ19hc3NlcnRfY21wZmxv
YXQod2Via2l0X3dlYl92aWV3X2dldF96b29tX2xldmVsKHRlc3QtPm1fd2ViVmlldyksID09LCAy
LjUpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1J1bkphdmFTY3JpcHQoV2ViVmlld1Rl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGh0bWwg
PSAiPGh0bWw+PGJvZHk+PGEgaWQ9J1dlYktpdExpbmsnIGhyZWY9J2h0dHA6Ly93d3cud2Via2l0
Z3RrLm9yZy8nIHRpdGxlPSdXZWJLaXRHVEsrIFRpdGxlJz5XZWJLaXRHVEsrIFdlYnNpdGU8L2E+
PC9ib2R5PjwvaHRtbD4iOworICAgIHRlc3QtPmxvYWRIdG1sKGh0bWwsIDApOworICAgIHRlc3Qt
PndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgR093blB0cjxHRXJyb3I+IGVycm9yOwor
ICAgIFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5K
YXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoIndpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnV2ViS2l0TGluaycpLnRpdGxlOyIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3Nl
cnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKyAgICBH
T3duUHRyPGNoYXI+IHZhbHVlU3RyaW5nKFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9D
U3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJp
bmcuZ2V0KCksID09LCAiV2ViS2l0R1RLKyBUaXRsZSIpOworCisgICAgamF2YXNjcmlwdFJlc3Vs
dCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgid2luZG93LmRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCdXZWJLaXRMaW5rJykuaHJlZjsiLCAmZXJyb3Iub3V0UHRyKCkp
OworICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KCFlcnJvci5n
ZXQoKSk7CisgICAgdmFsdWVTdHJpbmcuc2V0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0
VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVT
dHJpbmcuZ2V0KCksID09LCAiaHR0cDovL3d3dy53ZWJraXRndGsub3JnLyIpOworCisgICAgamF2
YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgi
d2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdXZWJLaXRMaW5rJykudGV4dENvbnRlbnQi
LCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOworICAg
IGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7CisgICAgdmFsdWVTdHJpbmcuc2V0KFdlYlZpZXdUZXN0
OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKKyAgICBnX2Fz
c2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAiV2ViS2l0R1RLKyBXZWJzaXRlIik7
CisKKyAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRp
bEZpbmlzaGVkKCJhID0gMjU7IiwgJmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fzc2VydChqYXZh
c2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOworICAgIGdfYXNzZXJ0
X2NtcGZsb2F0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9OdW1iZXIoamF2YXNjcmlw
dFJlc3VsdCksID09LCAyNSk7CisKKyAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2
YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJhID0gMi41OyIsICZlcnJvci5vdXRQdHIoKSk7
CisgICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdl
dCgpKTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3Vs
dFRvTnVtYmVyKGphdmFzY3JpcHRSZXN1bHQpLCA9PSwgMi41KTsKKworICAgIGphdmFzY3JpcHRS
ZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImEgPSB0cnVl
IiwgJmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKKyAg
ICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOworICAgIGdfYXNzZXJ0KFdlYlZpZXdUZXN0OjpqYXZh
c2NyaXB0UmVzdWx0VG9Cb29sZWFuKGphdmFzY3JpcHRSZXN1bHQpKTsKKworICAgIGphdmFzY3Jp
cHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImEgPSBm
YWxzZSIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7
CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKyAgICBnX2Fzc2VydCghV2ViVmlld1Rlc3Q6
OmphdmFzY3JpcHRSZXN1bHRUb0Jvb2xlYW4oamF2YXNjcmlwdFJlc3VsdCkpOworCisgICAgamF2
YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgi
YSA9IG51bGwiLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1
bHQpOworICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7CisgICAgZ19hc3NlcnQoV2ViVmlld1Rl
c3Q6OmphdmFzY3JpcHRSZXN1bHRJc051bGwoamF2YXNjcmlwdFJlc3VsdCkpOworCisgICAgamF2
YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgi
ZnVuY3Rpb24gRm9vKCkgeyBhID0gMjU7IH0gRm9vKCk7IiwgJmVycm9yLm91dFB0cigpKTsKKyAg
ICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkp
OworICAgIGdfYXNzZXJ0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0SXNVbmRlZmluZWQo
amF2YXNjcmlwdFJlc3VsdCkpOworCisgICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkph
dmFTY3JpcHRGcm9tR1Jlc291cmNlQW5kV2FpdFVudGlsRmluaXNoZWQoIi9vcmcvd2Via2l0L3dl
YmtpdDJndGsvdGVzdHMvbGluay10aXRsZS5qcyIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19h
c3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKyAg
ICB2YWx1ZVN0cmluZy5zZXQoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0NTdHJpbmco
amF2YXNjcmlwdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih2YWx1ZVN0cmluZy5nZXQo
KSwgPT0sICJXZWJLaXRHVEsrIFRpdGxlIik7CisKKyAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVz
dC0+cnVuSmF2YVNjcmlwdEZyb21HUmVzb3VyY2VBbmRXYWl0VW50aWxGaW5pc2hlZCgiL3dyb25n
L3BhdGgvdG8vcmVzb3VyY2UuanMiLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGdfYXNzZXJ0KCFq
YXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydF9lcnJvcihlcnJvci5nZXQoKSwgR19SRVNP
VVJDRV9FUlJPUiwgR19SRVNPVVJDRV9FUlJPUl9OT1RfRk9VTkQpOworICAgIGVycm9yLmNsZWFy
KCk7CisKKyAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRV
bnRpbEZpbmlzaGVkKCJmb28oKTsiLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGdfYXNzZXJ0KCFq
YXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydF9lcnJvcihlcnJvci5nZXQoKSwgV0VCS0lU
X0pBVkFTQ1JJUFRfRVJST1IsIFdFQktJVF9KQVZBU0NSSVBUX0VSUk9SX1NDUklQVF9GQUlMRUQp
OworfQorCitjbGFzcyBGdWxsU2NyZWVuQ2xpZW50VGVzdDogcHVibGljIFdlYlZpZXdUZXN0IHsK
K3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKEZ1bGxTY3JlZW5DbGllbnRUZXN0
KTsKKworICAgIGVudW0gRnVsbFNjcmVlbkV2ZW50IHsKKyAgICAgICAgTm9uZSwKKyAgICAgICAg
RW50ZXIsCisgICAgICAgIExlYXZlCisgICAgfTsKKworICAgIHN0YXRpYyBnYm9vbGVhbiB2aWV3
RW50ZXJGdWxsU2NyZWVuQ2FsbGJhY2soV2ViS2l0V2ViVmlldyosIEZ1bGxTY3JlZW5DbGllbnRU
ZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+bV9ldmVudCA9IEVudGVyOworICAgICAg
ICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworICAgICAgICByZXR1cm4gRkFM
U0U7CisgICAgfQorCisgICAgc3RhdGljIGdib29sZWFuIHZpZXdMZWF2ZUZ1bGxTY3JlZW5DYWxs
YmFjayhXZWJLaXRXZWJWaWV3KiwgRnVsbFNjcmVlbkNsaWVudFRlc3QqIHRlc3QpCisgICAgewor
ICAgICAgICB0ZXN0LT5tX2V2ZW50ID0gTGVhdmU7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQo
dGVzdC0+bV9tYWluTG9vcCk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBG
dWxsU2NyZWVuQ2xpZW50VGVzdCgpCisgICAgICAgIDogbV9ldmVudChOb25lKQorICAgIHsKKyAg
ICAgICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfZnVsbHNjcmVlbih3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X3NldHRpbmdzKG1fd2ViVmlldyksIFRSVUUpOworICAgICAgICBnX3NpZ25hbF9jb25u
ZWN0KG1fd2ViVmlldywgImVudGVyLWZ1bGxzY3JlZW4iLCBHX0NBTExCQUNLKHZpZXdFbnRlckZ1
bGxTY3JlZW5DYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2Vi
VmlldywgImxlYXZlLWZ1bGxzY3JlZW4iLCBHX0NBTExCQUNLKHZpZXdMZWF2ZUZ1bGxTY3JlZW5D
YWxsYmFjayksIHRoaXMpOworICAgIH0KKworICAgIH5GdWxsU2NyZWVuQ2xpZW50VGVzdCgpCisg
ICAgeworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV93ZWJW
aWV3LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKKyAgICB9CisKKyAg
ICB2b2lkIHJlcXVlc3RGdWxsU2NyZWVuQW5kV2FpdFVudGlsRW50ZXJlZEZ1bGxTY3JlZW4oKQor
ICAgIHsKKyAgICAgICAgbV9ldmVudCA9IE5vbmU7CisgICAgICAgIHdlYmtpdF93ZWJfdmlld19y
dW5famF2YXNjcmlwdChtX3dlYlZpZXcsICJkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQud2Via2l0
UmVxdWVzdEZ1bGxTY3JlZW4oKTsiLCAwLCAwLCAwKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVu
KG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBsZWF2ZUZ1bGxTY3Jl
ZW5JZGxlKEZ1bGxTY3JlZW5DbGllbnRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+
a2V5U3Ryb2tlKEdES19LRVlfRXNjYXBlKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0K
KworICAgIHZvaWQgbGVhdmVGdWxsU2NyZWVuQW5kV2FpdFVudGlsTGVmdEZ1bGxTY3JlZW4oKQor
ICAgIHsKKyAgICAgICAgbV9ldmVudCA9IE5vbmU7CisgICAgICAgIGdfaWRsZV9hZGQocmVpbnRl
cnByZXRfY2FzdDxHU291cmNlRnVuYz4obGVhdmVGdWxsU2NyZWVuSWRsZSksIHRoaXMpOworICAg
ICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgfQorCisgICAgRnVsbFNjcmVl
bkV2ZW50IG1fZXZlbnQ7Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0Z1bGxTY3JlZW4o
RnVsbFNjcmVlbkNsaWVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+
c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7CisgICAgdGVzdC0+bG9hZEh0bWwoIjxo
dG1sPjxib2R5PkZ1bGxTY3JlZW4gdGVzdDwvYm9keT48L2h0bWw+IiwgMCk7CisgICAgdGVzdC0+
d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgdGVzdC0+cmVxdWVzdEZ1bGxTY3JlZW5BbmRX
YWl0VW50aWxFbnRlcmVkRnVsbFNjcmVlbigpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5t
X2V2ZW50LCA9PSwgRnVsbFNjcmVlbkNsaWVudFRlc3Q6OkVudGVyKTsKKyAgICB0ZXN0LT5sZWF2
ZUZ1bGxTY3JlZW5BbmRXYWl0VW50aWxMZWZ0RnVsbFNjcmVlbigpOworICAgIGdfYXNzZXJ0X2Nt
cGludCh0ZXN0LT5tX2V2ZW50LCA9PSwgRnVsbFNjcmVlbkNsaWVudFRlc3Q6OkxlYXZlKTsKK30K
Kworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdDYW5TaG93TUlNRVR5cGUoV2ViVmlld1Rlc3QqIHRl
c3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8gU3VwcG9ydGVkIE1JTUUgdHlwZXMuCisgICAg
Z19hc3NlcnQod2Via2l0X3dlYl92aWV3X2Nhbl9zaG93X21pbWVfdHlwZSh0ZXN0LT5tX3dlYlZp
ZXcsICJ0ZXh0L2h0bWwiKSk7CisgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2Nhbl9zaG93
X21pbWVfdHlwZSh0ZXN0LT5tX3dlYlZpZXcsICJ0ZXh0L3BsYWluIikpOworICAgIGdfYXNzZXJ0
KHdlYmtpdF93ZWJfdmlld19jYW5fc2hvd19taW1lX3R5cGUodGVzdC0+bV93ZWJWaWV3LCAiaW1h
Z2UvanBlZyIpKTsKKworICAgIC8vIFVuc3VwcG9ydGVkIE1JTUUgdHlwZXMuCisgICAgZ19hc3Nl
cnQoIXdlYmtpdF93ZWJfdmlld19jYW5fc2hvd19taW1lX3R5cGUodGVzdC0+bV93ZWJWaWV3LCAi
dGV4dC92Y2FyZCIpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9zaG93X21p
bWVfdHlwZSh0ZXN0LT5tX3dlYlZpZXcsICJhcHBsaWNhdGlvbi9wZGYiKSk7CisgICAgZ19hc3Nl
cnQoIXdlYmtpdF93ZWJfdmlld19jYW5fc2hvd19taW1lX3R5cGUodGVzdC0+bV93ZWJWaWV3LCAi
YXBwbGljYXRpb24vemlwIikpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX3No
b3dfbWltZV90eXBlKHRlc3QtPm1fd2ViVmlldywgImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIp
KTsKKworICAgIC8vIFBsdWdpbnMgYXJlIG9ubHkgc3VwcG9ydGVkIHdoZW4gZW5hYmxlZC4KKyAg
ICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X2FkZGl0aW9uYWxfcGx1Z2luc19kaXJlY3Rvcnkod2Vi
a2l0X3dlYl92aWV3X2dldF9jb250ZXh0KHRlc3QtPm1fd2ViVmlldyksIFdFQktJVF9URVNUX1BM
VUdJTl9ESVIpOworICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19jYW5fc2hvd19taW1lX3R5
cGUodGVzdC0+bV93ZWJWaWV3LCAiYXBwbGljYXRpb24veC13ZWJraXQtdGVzdC1uZXRzY2FwZSIp
KTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9wbHVnaW5zKHdlYmtpdF93ZWJfdmll
d19nZXRfc2V0dGluZ3ModGVzdC0+bV93ZWJWaWV3KSwgRkFMU0UpOworICAgIGdfYXNzZXJ0KCF3
ZWJraXRfd2ViX3ZpZXdfY2FuX3Nob3dfbWltZV90eXBlKHRlc3QtPm1fd2ViVmlldywgImFwcGxp
Y2F0aW9uL3gtd2Via2l0LXRlc3QtbmV0c2NhcGUiKSk7Cit9CisKK2NsYXNzIEZvcm1DbGllbnRU
ZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJ
WFRVUkUoRm9ybUNsaWVudFRlc3QpOworCisgICAgc3RhdGljIHZvaWQgc3VibWl0Rm9ybUNhbGxi
YWNrKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRGb3JtU3VibWlzc2lvblJlcXVlc3QqIHJlcXVlc3Qs
IEZvcm1DbGllbnRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+c3VibWl0Rm9ybShy
ZXF1ZXN0KTsKKyAgICB9CisKKyAgICBGb3JtQ2xpZW50VGVzdCgpCisgICAgICAgIDogbV9zdWJt
aXRQb3NpdGlvblgoMCkKKyAgICAgICAgLCBtX3N1Ym1pdFBvc2l0aW9uWSgwKQorICAgIHsKKyAg
ICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJzdWJtaXQtZm9ybSIsIEdfQ0FMTEJB
Q0soc3VibWl0Rm9ybUNhbGxiYWNrKSwgdGhpcyk7CisgICAgfQorCisgICAgfkZvcm1DbGllbnRU
ZXN0KCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hl
ZChtX3dlYlZpZXcsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOworICAg
IH0KKworICAgIHZvaWQgc3VibWl0Rm9ybShXZWJLaXRGb3JtU3VibWlzc2lvblJlcXVlc3QqIHJl
cXVlc3QpCisgICAgeworICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlz
aGVzKEdfT0JKRUNUKHJlcXVlc3QpKTsKKyAgICAgICAgbV9yZXF1ZXN0ID0gcmVxdWVzdDsKKyAg
ICAgICAgd2Via2l0X2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0X3N1Ym1pdChyZXF1ZXN0KTsKKyAg
ICAgICAgcXVpdE1haW5Mb29wKCk7CisgICAgfQorCisgICAgR0hhc2hUYWJsZSogd2FpdFVudGls
Rm9ybVN1Ym1pdHRlZEFuZEdldFRleHRGaWVsZHMoKQorICAgIHsKKyAgICAgICAgZ19tYWluX2xv
b3BfcnVuKG1fbWFpbkxvb3ApOworICAgICAgICByZXR1cm4gd2Via2l0X2Zvcm1fc3VibWlzc2lv
bl9yZXF1ZXN0X2dldF90ZXh0X2ZpZWxkcyhtX3JlcXVlc3QuZ2V0KCkpOworICAgIH0KKworICAg
IHN0YXRpYyBnYm9vbGVhbiBkb0NsaWNrSWRsZUNhbGxiYWNrKEZvcm1DbGllbnRUZXN0KiB0ZXN0
KQorICAgIHsKKyAgICAgICAgdGVzdC0+Y2xpY2tNb3VzZUJ1dHRvbih0ZXN0LT5tX3N1Ym1pdFBv
c2l0aW9uWCwgdGVzdC0+bV9zdWJtaXRQb3NpdGlvblksIDEpOworICAgICAgICByZXR1cm4gRkFM
U0U7CisgICAgfQorCisgICAgdm9pZCBzdWJtaXRGb3JtQXRQb3NpdGlvbihpbnQgeCwgaW50IHkp
CisgICAgeworICAgICAgICBtX3N1Ym1pdFBvc2l0aW9uWCA9IHg7CisgICAgICAgIG1fc3VibWl0
UG9zaXRpb25ZID0geTsKKyAgICAgICAgZ19pZGxlX2FkZChyZWludGVycHJldF9jYXN0PEdTb3Vy
Y2VGdW5jPihkb0NsaWNrSWRsZUNhbGxiYWNrKSwgdGhpcyk7CisgICAgfQorCisgICAgaW50IG1f
c3VibWl0UG9zaXRpb25YOworICAgIGludCBtX3N1Ym1pdFBvc2l0aW9uWTsKKyAgICBHUmVmUHRy
PFdlYktpdEZvcm1TdWJtaXNzaW9uUmVxdWVzdD4gbV9yZXF1ZXN0OworfTsKKworc3RhdGljIHZv
aWQgdGVzdFdlYlZpZXdTdWJtaXRGb3JtKEZvcm1DbGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2lu
dGVyKQoreworICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOworCisg
ICAgY29uc3QgY2hhciogZm9ybUhUTUwgPQorICAgICAgICAiPGh0bWw+PGJvZHk+IgorICAgICAg
ICAiIDxmb3JtIGFjdGlvbj0nIyc+IgorICAgICAgICAiICA8aW5wdXQgdHlwZT0ndGV4dCcgbmFt
ZT0ndGV4dDEnIHZhbHVlPSd2YWx1ZTEnPiIKKyAgICAgICAgIiAgPGlucHV0IHR5cGU9J3RleHQn
IG5hbWU9J3RleHQyJyB2YWx1ZT0ndmFsdWUyJz4iCisgICAgICAgICIgIDxpbnB1dCB0eXBlPSdw
YXNzd29yZCcgbmFtZT0ncGFzc3dvcmQnIHZhbHVlPSdzZWNyZXQnPiIKKyAgICAgICAgIiAgPHRl
eHRhcmVhIGNvbHM9JzUnIHJvd3M9JzUnIG5hbWU9J3RleHRhcmVhJz5UZXh0PC90ZXh0YXJlYT4i
CisgICAgICAgICIgIDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2hpZGRlbjEnIHZhbHVlPSdo
aWRkZW4xJz4iCisgICAgICAgICIgIDxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPSdTdWJtaXQn
IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6MScgc2l6ZT0nMTAnPiIKKyAg
ICAgICAgIiA8L2Zvcm0+IgorICAgICAgICAiPC9ib2R5PjwvaHRtbD4iOworCisgICAgdGVzdC0+
bG9hZEh0bWwoZm9ybUhUTUwsICJmaWxlOi8vLyIpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRG
aW5pc2hlZCgpOworCisgICAgdGVzdC0+c3VibWl0Rm9ybUF0UG9zaXRpb24oNSwgNSk7CisgICAg
R0hhc2hUYWJsZSogdmFsdWVzID0gdGVzdC0+d2FpdFVudGlsRm9ybVN1Ym1pdHRlZEFuZEdldFRl
eHRGaWVsZHMoKTsKKyAgICBnX2Fzc2VydCh2YWx1ZXMpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQo
Z19oYXNoX3RhYmxlX3NpemUodmFsdWVzKSwgPT0sIDMpOworICAgIGdfYXNzZXJ0X2NtcHN0cihz
dGF0aWNfY2FzdDxjaGFyKj4oZ19oYXNoX3RhYmxlX2xvb2t1cCh2YWx1ZXMsICJ0ZXh0MSIpKSwg
PT0sICJ2YWx1ZTEiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc3RhdGljX2Nhc3Q8Y2hhcio+KGdf
aGFzaF90YWJsZV9sb29rdXAodmFsdWVzLCAidGV4dDIiKSksID09LCAidmFsdWUyIik7CisgICAg
Z19hc3NlcnRfY21wc3RyKHN0YXRpY19jYXN0PGNoYXIqPihnX2hhc2hfdGFibGVfbG9va3VwKHZh
bHVlcywgInBhc3N3b3JkIikpLCA9PSwgInNlY3JldCIpOworfQorCitjbGFzcyBTYXZlV2ViVmll
d1Rlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1Rf
RklYVFVSRShTYXZlV2ViVmlld1Rlc3QpOworCisgICAgU2F2ZVdlYlZpZXdUZXN0KCkKKyAgICAg
ICAgOiBtX3RlbXBEaXJlY3RvcnkoZ19kaXJfbWFrZV90bXAoIldlYktpdDJTYXZlVmlld1Rlc3Qt
WFhYWFhYIiwgMCkpCisgICAgeworICAgIH0KKworICAgIH5TYXZlV2ViVmlld1Rlc3QoKQorICAg
IHsKKyAgICAgICAgaWYgKEdfSVNfRklMRShtX2ZpbGUuZ2V0KCkpKQorICAgICAgICAgICAgZ19m
aWxlX2RlbGV0ZShtX2ZpbGUuZ2V0KCksIDAsIDApOworCisgICAgICAgIGlmIChHX0lTX0lOUFVU
X1NUUkVBTShtX2lucHV0U3RyZWFtLmdldCgpKSkKKyAgICAgICAgICAgIGdfaW5wdXRfc3RyZWFt
X2Nsb3NlKG1faW5wdXRTdHJlYW0uZ2V0KCksIDAsIDApOworCisgICAgICAgIGlmIChtX3RlbXBE
aXJlY3RvcnkpCisgICAgICAgICAgICBnX3JtZGlyKG1fdGVtcERpcmVjdG9yeS5nZXQoKSk7Cisg
ICAgfQorCisgICAgc3RhdGljIHZvaWQgd2ViVmlld1NhdmVkVG9TdHJlYW1DYWxsYmFjayhHT2Jq
ZWN0KiBvYmplY3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBTYXZlV2ViVmlld1Rlc3QqIHRlc3Qp
CisgICAgeworICAgICAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgICAgIHRlc3QtPm1f
aW5wdXRTdHJlYW0gPSBhZG9wdEdSZWYod2Via2l0X3dlYl92aWV3X3NhdmVfZmluaXNoKHRlc3Qt
Pm1fd2ViVmlldywgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpKTsKKyAgICAgICAgZ19hc3NlcnQo
R19JU19JTlBVVF9TVFJFQU0odGVzdC0+bV9pbnB1dFN0cmVhbS5nZXQoKSkpOworICAgICAgICBn
X2Fzc2VydCghZXJyb3IpOworCisgICAgICAgIHRlc3QtPnF1aXRNYWluTG9vcCgpOworICAgIH0K
KworICAgIHN0YXRpYyB2b2lkIHdlYlZpZXdTYXZlZFRvRmlsZUNhbGxiYWNrKEdPYmplY3QqIG9i
amVjdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIFNhdmVXZWJWaWV3VGVzdCogdGVzdCkKKyAgICB7
CisgICAgICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0
X3dlYl92aWV3X3NhdmVfdG9fZmlsZV9maW5pc2godGVzdC0+bV93ZWJWaWV3LCByZXN1bHQsICZl
cnJvci5vdXRQdHIoKSkpOworICAgICAgICBnX2Fzc2VydCghZXJyb3IpOworCisgICAgICAgIHRl
c3QtPnF1aXRNYWluTG9vcCgpOworICAgIH0KKworICAgIHZvaWQgc2F2ZUFuZFdhaXRGb3JTdHJl
YW0oKQorICAgIHsKKyAgICAgICAgd2Via2l0X3dlYl92aWV3X3NhdmUobV93ZWJWaWV3LCBXRUJL
SVRfU0FWRV9NT0RFX01IVE1MLCAwLCByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJh
Y2s+KHdlYlZpZXdTYXZlZFRvU3RyZWFtQ2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgZ19tYWlu
X2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIHZvaWQgc2F2ZUFuZFdhaXRGb3JG
aWxlKCkKKyAgICB7CisgICAgICAgIG1fc2F2ZURlc3RpbmF0aW9uRmlsZVBhdGguc2V0KGdfYnVp
bGRfZmlsZW5hbWUobV90ZW1wRGlyZWN0b3J5LmdldCgpLCAidGVzdFdlYlZpZXdTYXZlUmVzdWx0
Lm1odCIsIE5VTEwpKTsKKyAgICAgICAgbV9maWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9y
X3BhdGgobV9zYXZlRGVzdGluYXRpb25GaWxlUGF0aC5nZXQoKSkpOworICAgICAgICB3ZWJraXRf
d2ViX3ZpZXdfc2F2ZV90b19maWxlKG1fd2ViVmlldywgbV9maWxlLmdldCgpLCBXRUJLSVRfU0FW
RV9NT0RFX01IVE1MLCAwLCByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KHdl
YlZpZXdTYXZlZFRvRmlsZUNhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIGdfbWFpbl9sb29wX3J1
bihtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBHT3duUHRyPGNoYXI+IG1fdGVtcERpcmVjdG9y
eTsKKyAgICBHT3duUHRyPGNoYXI+IG1fc2F2ZURlc3RpbmF0aW9uRmlsZVBhdGg7CisgICAgR1Jl
ZlB0cjxHSW5wdXRTdHJlYW0+IG1faW5wdXRTdHJlYW07CisgICAgR1JlZlB0cjxHRmlsZT4gbV9m
aWxlOworfTsKKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdTYXZlKFNhdmVXZWJWaWV3VGVzdCog
dGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+IgorICAg
ICAgICAiPGJvZHk+IgorICAgICAgICAiICA8cD5BIHBhcmFncmFwaCB3aXRoIHBsYWluIHRleHQ8
L3A+IgorICAgICAgICAiICA8cD4iCisgICAgICAgICIgICAgQSByZWQgYm94OiA8aW1nIHNyYz0n
ZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBSUFBQUFDQ0FJ
QUFBRDkxSnB6QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDNBWVdEVE1W
d25TWm53QUFBQjFwVkZoMFEyOXRiV1Z1ZEFBQUFBQUFRM0psWVhSbFpDQjNhWFJvSUVkSlRWQmtM
bVVIQUFBQUZrbEVRVlFJMTJQOHo4REF3TURBeE1EQXdNREFBQUFOSFFFREsrbW15QUFBQUFCSlJV
NUVya0pnZ2c9PSc+PC9icj4iCisgICAgICAgICIgICAgQSBibHVlIGJveDogPGltZyBzcmM9J2Rh
dGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUlBQUFBQ0NBSUFB
QUQ5MUpwekFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQjNSSlRVVUgzQVlXRFRNdkJI
aEFMUUFBQUIxcFZGaDBRMjl0YldWdWRBQUFBQUFBUTNKbFlYUmxaQ0IzYVhSb0lFZEpUVkJrTG1V
SEFBQUFGa2xFUVZRSTEyTms0UG5Qd01EQXhNREF3TURBQUFBTHJ3RVBQSXMxcGdBQUFBQkpSVTVF
cmtKZ2dnPT0nPiIKKyAgICAgICAgIiAgPC9wPiIKKyAgICAgICAgIjwvYm9keT4iCisgICAgICAg
ICI8L2h0bWw+IiwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAg
ICAvLyBXcml0ZSB0byBhIGZpbGUgYW5kIHRvIGFuIGlucHV0IHN0cmVhbS4KKyAgICB0ZXN0LT5z
YXZlQW5kV2FpdEZvckZpbGUoKTsKKyAgICB0ZXN0LT5zYXZlQW5kV2FpdEZvclN0cmVhbSgpOwor
CisgICAgLy8gV2Ugc2hvdWxkIGhhdmUgZXhhY3RseSB0aGUgc2FtZSBhbW91bnQgb2YgYnl0ZXMg
aW4gdGhlIGZpbGUKKyAgICAvLyB0aGFuIHRob3NlIGNvbWluZyBmcm9tIHRoZSBHSW5wdXRTdHJl
YW0uIFdlIGRvbid0IGNvbXBhcmUgdGhlCisgICAgLy8gc3RyaW5ncyByZWFkIHNpbmNlIHRoZSAn
RGF0ZScgZmllbGQgYW5kIHRoZSBib3VuZGFyaWVzIHdpbGwgYmUKKyAgICAvLyBkaWZmZXJlbnQg
b24gZWFjaCBjYXNlLiBNSFRNTCBmdW5jdGlvbmFsaXR5IHdpbGwgYmUgdGVzdGVkIGJ5CisgICAg
Ly8gTGF5b3V0IHRlc3RzLCBzbyBjaGVja2luZyB0aGUgYW1vdW50IG9mIGJ5dGVzIGlzIGVub3Vn
aC4KKyAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgZ2NoYXIgYnVmZmVyWzUxMl0gPSB7
IDAgfTsKKyAgICBnc3NpemUgcmVhZEJ5dGVzID0gMDsKKyAgICBnc3NpemUgdG90YWxCeXRlc0Zy
b21TdHJlYW0gPSAwOworICAgIHdoaWxlIChyZWFkQnl0ZXMgPSBnX2lucHV0X3N0cmVhbV9yZWFk
KHRlc3QtPm1faW5wdXRTdHJlYW0uZ2V0KCksICZidWZmZXIsIDUxMiwgMCwgJmVycm9yLm91dFB0
cigpKSkgeworICAgICAgICBnX2Fzc2VydCghZXJyb3IpOworICAgICAgICB0b3RhbEJ5dGVzRnJv
bVN0cmVhbSArPSByZWFkQnl0ZXM7CisgICAgfQorCisgICAgLy8gQ2hlY2sgdGhhdCB0aGUgZmls
ZSBleGlzdHMgYW5kIHRoYXQgaXQgY29udGFpbnMgdGhlIHNhbWUgYW1vdW50IG9mIGJ5dGVzLgor
ICAgIEdSZWZQdHI8R0ZpbGVJbmZvPiBmaWxlSW5mbyA9IGFkb3B0R1JlZihnX2ZpbGVfcXVlcnlf
aW5mbyh0ZXN0LT5tX2ZpbGUuZ2V0KCksIEdfRklMRV9BVFRSSUJVVEVfU1RBTkRBUkRfU0laRSwg
c3RhdGljX2Nhc3Q8R0ZpbGVRdWVyeUluZm9GbGFncz4oMCksIDAsIDApKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoZ19maWxlX2luZm9fZ2V0X3NpemUoZmlsZUluZm8uZ2V0KCkpLCA9PSwgdG90YWxC
eXRlc0Zyb21TdHJlYW0pOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld01vZGUoV2ViVmll
d1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGlu
ZGV4SFRNTCA9ICI8aHRtbD48Ym9keT48cD5UZXN0IFdlYiBWaWV3IE1vZGU8L3A+PC9ib2R5Pjwv
aHRtbD4iOworCisgICAgLy8gV2ViIG1vZGUuCisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRf
d2ViX3ZpZXdfZ2V0X3ZpZXdfbW9kZSh0ZXN0LT5tX3dlYlZpZXcpLCA9PSwgV0VCS0lUX1ZJRVdf
TU9ERV9XRUIpOworICAgIHRlc3QtPmxvYWRIdG1sKGluZGV4SFRNTCwgMCk7CisgICAgdGVzdC0+
d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCogamF2
YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgi
d2luZG93LmRvY3VtZW50LmJvZHkudGV4dENvbnRlbnQ7IiwgMCk7CisgICAgR093blB0cjxjaGFy
PiB2YWx1ZVN0cmluZyhXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZh
c2NyaXB0UmVzdWx0KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9
PSwgIlRlc3QgV2ViIFZpZXcgTW9kZSIpOworCisgICAgLy8gU291cmNlIG1vZGUuCisgICAgd2Vi
a2l0X3dlYl92aWV3X3NldF92aWV3X21vZGUodGVzdC0+bV93ZWJWaWV3LCBXRUJLSVRfVklFV19N
T0RFX1NPVVJDRSk7CisgICAgdGVzdC0+bG9hZEh0bWwoaW5kZXhIVE1MLCAwKTsKKyAgICB0ZXN0
LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+
cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJ3aW5kb3cuZG9jdW1lbnQuYm9keS50
ZXh0Q29udGVudDsiLCAwKTsKKyAgICB2YWx1ZVN0cmluZy5zZXQoV2ViVmlld1Rlc3Q6OmphdmFz
Y3JpcHRSZXN1bHRUb0NTdHJpbmcoamF2YXNjcmlwdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cih2YWx1ZVN0cmluZy5nZXQoKSwgPT0sIGluZGV4SFRNTCk7Cit9CisKKy8vIFRvIHRlc3Qg
cGFnZSB2aXNpYmlsaXR5IEFQSS4gQ3VycmVudGx5IG9ubHkgJ3Zpc2libGUnIGFuZCAnaGlkZGVu
JyBzdGF0ZXMgYXJlIGltcGxlbWVudGVkIGZ1bGx5IGluIFdlYkNvcmUuCisvLyBTZWUgYWxzbyBo
dHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1dELXBhZ2UtdmlzaWJpbGl0eS0yMDExMDYwMi8gYW5k
IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL2Nocm9tZS93aGl0ZXBhcGVycy9wYWdldmlz
aWJpbGl0eQorc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdQYWdlVmlzaWJpbGl0eShXZWJWaWV3VGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PHRp
dGxlPjwvdGl0bGU+IgorICAgICAgICAiPGJvZHk+PHA+VGVzdCBXZWIgUGFnZSBWaXNpYmlsaXR5
PC9wPiIKKyAgICAgICAgIjxzY3JpcHQ+IgorICAgICAgICAiZG9jdW1lbnQuYWRkRXZlbnRMaXN0
ZW5lcihcInZpc2liaWxpdHljaGFuZ2VcIiwgb25WaXNpYmlsaXR5Q2hhbmdlLCBmYWxzZSk7Igor
ICAgICAgICAiZnVuY3Rpb24gb25WaXNpYmlsaXR5Q2hhbmdlKCkgeyIKKyAgICAgICAgIiAgICBk
b2N1bWVudC50aXRsZSA9IGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZTsiCisgICAgICAgICJ9Igor
ICAgICAgICAiPC9zY3JpcHQ+IgorICAgICAgICAiPC9ib2R5PjwvaHRtbD4iLAorICAgICAgICAw
KTsKKworICAgIC8vIFdhaXQgdW50aWxsIHRoZSBwYWdlIGlzIGxvYWRlZC4gSW5pdGlhbCB2aXNp
YmlsaXR5IHNob3VsZCBiZSAnaGlkZGVuJy4KKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNo
ZWQoKTsKKworICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBXZWJLaXRKYXZhc2NyaXB0
UmVzdWx0KiBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRp
bEZpbmlzaGVkKCJkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU7IiwgJmVycm9yLm91dFB0cigpKTsK
KyAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydCghZXJyb3IuZ2V0
KCkpOworICAgIEdPd25QdHI8Y2hhcj4gdmFsdWVTdHJpbmcoV2ViVmlld1Rlc3Q6OmphdmFzY3Jp
cHRSZXN1bHRUb0NTdHJpbmcoamF2YXNjcmlwdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0X2NtcHN0
cih2YWx1ZVN0cmluZy5nZXQoKSwgPT0sICJoaWRkZW4iKTsKKworICAgIGphdmFzY3JpcHRSZXN1
bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImRvY3VtZW50Lmhp
ZGRlbjsiLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQp
OworICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7CisgICAgZ19hc3NlcnQoV2ViVmlld1Rlc3Q6
OmphdmFzY3JpcHRSZXN1bHRUb0Jvb2xlYW4oamF2YXNjcmlwdFJlc3VsdCkpOworCisgICAgLy8g
U2hvdyB0aGUgcGFnZS4gVGhlIHZpc2liaWxpdHkgc2hvdWxkIGJlIHVwZGF0ZWQgdG8gJ3Zpc2li
bGUnLgorICAgIHRlc3QtPnNob3dJbldpbmRvdygpOworICAgIHRlc3QtPndhaXRVbnRpbFRpdGxl
Q2hhbmdlZCgpOworCisgICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRB
bmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlOyIsICZlcnJvci5v
dXRQdHIoKSk7CisgICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQo
IWVycm9yLmdldCgpKTsKKyAgICB2YWx1ZVN0cmluZy5zZXQoV2ViVmlld1Rlc3Q6OmphdmFzY3Jp
cHRSZXN1bHRUb0NTdHJpbmcoamF2YXNjcmlwdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0X2NtcHN0
cih2YWx1ZVN0cmluZy5nZXQoKSwgPT0sICJ2aXNpYmxlIik7CisKKyAgICBqYXZhc2NyaXB0UmVz
dWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVudC5o
aWRkZW47IiwgJmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0
KTsKKyAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOworICAgIGdfYXNzZXJ0KCFXZWJWaWV3VGVz
dDo6amF2YXNjcmlwdFJlc3VsdFRvQm9vbGVhbihqYXZhc2NyaXB0UmVzdWx0KSk7CisKKyAgICAv
LyBIaWRlIHRoZSBwYWdlLiBUaGUgdmlzaWJpbGl0eSBzaG91bGQgYmUgdXBkYXRlZCB0byAnaGlk
ZGVuJy4KKyAgICBndGtfd2lkZ2V0X2hpZGUoR1RLX1dJREdFVCh0ZXN0LT5tX3dlYlZpZXcpKTsK
KyAgICB0ZXN0LT53YWl0VW50aWxUaXRsZUNoYW5nZWQoKTsKKworICAgIGphdmFzY3JpcHRSZXN1
bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImRvY3VtZW50LnZp
c2liaWxpdHlTdGF0ZTsiLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGdfYXNzZXJ0KGphdmFzY3Jp
cHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7CisgICAgdmFsdWVTdHJpbmcu
c2V0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1
bHQpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAiaGlkZGVu
Iik7CisKKyAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRV
bnRpbEZpbmlzaGVkKCJkb2N1bWVudC5oaWRkZW47IiwgJmVycm9yLm91dFB0cigpKTsKKyAgICBn
X2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOwor
ICAgIGdfYXNzZXJ0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9Cb29sZWFuKGphdmFz
Y3JpcHRSZXN1bHQpKTsKK30KKworY2xhc3MgU25hcHNob3RXZWJWaWV3VGVzdDogcHVibGljIFdl
YlZpZXdUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFNuYXBzaG90
V2ViVmlld1Rlc3QpOworCisgICAgc3RhdGljIHZvaWQgb25TbmFwc2hvdENhbmNlbGxlZFJlYWR5
KFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBHQXN5bmNSZXN1bHQqIHJlcywgU25hcHNob3RXZWJW
aWV3VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAg
ICAgICAgdGVzdC0+bV9zdXJmYWNlID0gd2Via2l0X3dlYl92aWV3X2dldF9zbmFwc2hvdF9maW5p
c2god2ViX3ZpZXcsIHJlcywgJmVycm9yLm91dFB0cigpKTsKKyAgICAgICAgZ19hc3NlcnQoIXRl
c3QtPm1fc3VyZmFjZSk7CisgICAgICAgIGdfYXNzZXJ0X2Vycm9yKGVycm9yLmdldCgpLCBHX0lP
X0VSUk9SLCBHX0lPX0VSUk9SX0NBTkNFTExFRCk7CisgICAgICAgIHRlc3QtPnF1aXRNYWluTG9v
cCgpOworICAgIH0KKworICAgIGdib29sZWFuIGdldFNuYXBzaG90QW5kQ2FuY2VsKCkKKyAgICB7
CisgICAgICAgIGlmIChtX3N1cmZhY2UpCisgICAgICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ry
b3kobV9zdXJmYWNlKTsKKyAgICAgICAgbV9zdXJmYWNlID0gMDsKKyAgICAgICAgR1JlZlB0cjxH
Q2FuY2VsbGFibGU+IGNhbmNlbGxhYmxlID0gYWRvcHRHUmVmKGdfY2FuY2VsbGFibGVfbmV3KCkp
OworICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NuYXBzaG90KG1fd2ViVmlldywgV0VCS0lU
X1NOQVBTSE9UX1JFR0lPTl9WSVNJQkxFLCBXRUJLSVRfU05BUFNIT1RfT1BUSU9OU19OT05FLCBj
YW5jZWxsYWJsZS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihv
blNuYXBzaG90Q2FuY2VsbGVkUmVhZHkpLCB0aGlzKTsKKyAgICAgICAgZ19jYW5jZWxsYWJsZV9j
YW5jZWwoY2FuY2VsbGFibGUuZ2V0KCkpOworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWlu
TG9vcCk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCit9OworCitzdGF0aWMgdm9p
ZCB0ZXN0V2ViVmlld1NuYXBzaG90KFNuYXBzaG90V2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBv
aW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxib2R5PjxwPldoYXRldmVyPC9w
PjwvYm9keT48L2h0bWw+IiwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7
CisKKyAgICAvLyBXZWJWaWV3IG5vdCB2aXNpYmxlLgorICAgIGNhaXJvX3N1cmZhY2VfdCogc3Vy
ZmFjZTEgPSB0ZXN0LT5nZXRTbmFwc2hvdEFuZFdhaXRVbnRpbFJlYWR5KFdFQktJVF9TTkFQU0hP
VF9SRUdJT05fVklTSUJMRSwgV0VCS0lUX1NOQVBTSE9UX09QVElPTlNfTk9ORSk7CisgICAgZ19h
c3NlcnQoIXN1cmZhY2UxKTsKKworICAgIC8vIFNob3cgc3VyZmFjZSwgcmVzaXplIHRvIDUweDUw
LCB0cnkgYWdhaW4uCisgICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7
CisgICAgdGVzdC0+cmVzaXplVmlldyg1MCwgNTApOworICAgIHN1cmZhY2UxID0gdGVzdC0+Z2V0
U25hcHNob3RBbmRXYWl0VW50aWxSZWFkeShXRUJLSVRfU05BUFNIT1RfUkVHSU9OX1ZJU0lCTEUs
IFdFQktJVF9TTkFQU0hPVF9PUFRJT05TX05PTkUpOworICAgIGdfYXNzZXJ0KHN1cmZhY2UxKTsK
KworICAgIC8vIG9idGFpbmVkIHN1cmZhY2Ugc2hvdWxkIGJlIGF0IHRoZSBtb3N0IDUweDUwLiBT
dG9yZSB0aGUgc2l6ZQorICAgIC8vIGZvciBjb21wYXJpc29uIGxhdGVyLgorICAgIGludCB3aWR0
aCA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UxKTsKKyAgICBpbnQgaGVp
Z2h0ID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UxKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQod2lkdGgsIDw9LCA1MCk7CisgICAgZ19hc3NlcnRfY21waW50KGhlaWdodCwg
PD0sIDUwKTsKKworICAgIC8vIFNlbGVjdCBhbGwgdGV4dCBpbiB0aGUgV2ViVmlldywgcmVxdWVz
dCBhIHNuYXBzaG90IGlnbm9yaW5nIHNlbGVjdGlvbi4KKyAgICB0ZXN0LT5zZWxlY3RBbGwoKTsK
KyAgICBzdXJmYWNlMSA9IGNhaXJvX3N1cmZhY2VfcmVmZXJlbmNlKHRlc3QtPmdldFNuYXBzaG90
QW5kV2FpdFVudGlsUmVhZHkoV0VCS0lUX1NOQVBTSE9UX1JFR0lPTl9WSVNJQkxFLCBXRUJLSVRf
U05BUFNIT1RfT1BUSU9OU19OT05FKSk7CisgICAgZ19hc3NlcnQoc3VyZmFjZTEpOworICAgIGdf
YXNzZXJ0X2NtcGludChjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChzdXJmYWNlMSksID09
LCB3aWR0aCk7CisgICAgZ19hc3NlcnRfY21waW50KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hl
aWdodChzdXJmYWNlMSksID09LCBoZWlnaHQpOworCisgICAgLy8gQ3JlYXRlIGlkZW50aWNhbCBz
dXJmYWNlLgorICAgIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZTIgPSB0ZXN0LT5nZXRTbmFwc2hv
dEFuZFdhaXRVbnRpbFJlYWR5KFdFQktJVF9TTkFQU0hPVF9SRUdJT05fVklTSUJMRSwgV0VCS0lU
X1NOQVBTSE9UX09QVElPTlNfTk9ORSk7CisgICAgZ19hc3NlcnQoc3VyZmFjZTIpOworCisgICAg
Ly8gQ29tcGFyZSB0aGVzZSB0d28sIHRoZXkgc2hvdWxkIGJlIGlkZW50aWNhbC4KKyAgICBnX2Fz
c2VydChUZXN0OjpjYWlyb1N1cmZhY2VzRXF1YWwoc3VyZmFjZTEsIHN1cmZhY2UyKSk7CisKKyAg
ICAvLyBSZXF1ZXN0IGEgbmV3IHNuYXBzaG90LCBpbmNsdWRpbmcgdGhlIHNlbGVjdGlvbiB0aGlz
IHRpbWUuIFRoZQorICAgIC8vIHNpemUgc2hvdWxkIGJlIHRoZSBzYW1lIGJ1dCB0aGUgcmVzdWx0
IG11c3QgYmUgZGlmZmVyZW50IHRvIHRoZQorICAgIC8vIG9uZSBwcmV2aW91c2x5IG9idGFpbmVk
LgorICAgIHN1cmZhY2UyID0gdGVzdC0+Z2V0U25hcHNob3RBbmRXYWl0VW50aWxSZWFkeShXRUJL
SVRfU05BUFNIT1RfUkVHSU9OX1ZJU0lCTEUsIFdFQktJVF9TTkFQU0hPVF9PUFRJT05TX0lOQ0xV
REVfU0VMRUNUSU9OX0hJR0hMSUdIVElORyk7CisgICAgZ19hc3NlcnQoc3VyZmFjZTIpOworICAg
IGdfYXNzZXJ0X2NtcGludChjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChzdXJmYWNlMiks
ID09LCB3aWR0aCk7CisgICAgZ19hc3NlcnRfY21waW50KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0
X2hlaWdodChzdXJmYWNlMiksID09LCBoZWlnaHQpOworICAgIGdfYXNzZXJ0KCFUZXN0OjpjYWly
b1N1cmZhY2VzRXF1YWwoc3VyZmFjZTEsIHN1cmZhY2UyKSk7CisKKyAgICAvLyBSZXF1ZXN0IGEg
c25hcHNob3Qgb2YgdGhlIHdob2xlIGRvY3VtZW50IGluIHRoZSBXZWJWaWV3LiBUaGUKKyAgICAv
LyByZXN1bHQgc2hvdWxkIGJlIGRpZmZlcmVudCBmcm9tIHRoZSBzaXplIG9idGFpbmVkIHByZXZp
b3VzbHkuCisgICAgc3VyZmFjZTIgPSB0ZXN0LT5nZXRTbmFwc2hvdEFuZFdhaXRVbnRpbFJlYWR5
KFdFQktJVF9TTkFQU0hPVF9SRUdJT05fRlVMTF9ET0NVTUVOVCwgV0VCS0lUX1NOQVBTSE9UX09Q
VElPTlNfTk9ORSk7CisgICAgZ19hc3NlcnQoc3VyZmFjZTIpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChzdXJmYWNlMiksICA+LCB3aWR0aCk7Cisg
ICAgZ19hc3NlcnRfY21waW50KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNl
MiksID4sIGhlaWdodCk7CisgICAgZ19hc3NlcnQoIVRlc3Q6OmNhaXJvU3VyZmFjZXNFcXVhbChz
dXJmYWNlMSwgc3VyZmFjZTIpKTsKKworICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShzdXJmYWNl
MSk7CisKKyAgICBnX2Fzc2VydCh0ZXN0LT5nZXRTbmFwc2hvdEFuZENhbmNlbCgpKTsKK30KKwor
dm9pZCBiZWZvcmVBbGwoKQoreworICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYlZpZXci
LCAiZGVmYXVsdC1jb250ZXh0IiwgdGVzdFdlYlZpZXdEZWZhdWx0Q29udGV4dCk7CisgICAgV2Vi
Vmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJjdXN0b20tY2hhcnNldCIsIHRlc3RXZWJW
aWV3Q3VzdG9tQ2hhcnNldCk7CisgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIs
ICJzZXR0aW5ncyIsIHRlc3RXZWJWaWV3U2V0dGluZ3MpOworICAgIFdlYlZpZXdUZXN0OjphZGQo
IldlYktpdFdlYlZpZXciLCAiem9vbS1sZXZlbCIsIHRlc3RXZWJWaWV3Wm9vbUxldmVsKTsKKyAg
ICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInJ1bi1qYXZhc2NyaXB0IiwgdGVz
dFdlYlZpZXdSdW5KYXZhU2NyaXB0KTsKKyAgICBGdWxsU2NyZWVuQ2xpZW50VGVzdDo6YWRkKCJX
ZWJLaXRXZWJWaWV3IiwgImZ1bGxzY3JlZW4iLCB0ZXN0V2ViVmlld0Z1bGxTY3JlZW4pOworICAg
IFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiY2FuLXNob3ctbWltZS10eXBlIiwg
dGVzdFdlYlZpZXdDYW5TaG93TUlNRVR5cGUpOworICAgIEZvcm1DbGllbnRUZXN0OjphZGQoIldl
YktpdFdlYlZpZXciLCAic3VibWl0LWZvcm0iLCB0ZXN0V2ViVmlld1N1Ym1pdEZvcm0pOworICAg
IFNhdmVXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInNhdmUiLCB0ZXN0V2ViVmll
d1NhdmUpOworICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAidmlldy1tb2Rl
IiwgdGVzdFdlYlZpZXdNb2RlKTsKKyAgICBTbmFwc2hvdFdlYlZpZXdUZXN0OjphZGQoIldlYktp
dFdlYlZpZXciLCAic25hcHNob3QiLCB0ZXN0V2ViVmlld1NuYXBzaG90KTsKKyAgICBXZWJWaWV3
VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInBhZ2UtdmlzaWJpbGl0eSIsIHRlc3RXZWJWaWV3
UGFnZVZpc2liaWxpdHkpOworfQorCit2b2lkIGFmdGVyQWxsKCkKK3sKK30KZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0V2ViVmlld0dy
b3VwLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0
V2ViVmlld0dyb3VwLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDE2
NTVmCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQy
R3RrL1Rlc3RXZWJLaXRXZWJWaWV3R3JvdXAuY3BwCkBAIC0wLDAgKzEsMjA2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
bmNsdWRlICJXZWJLaXRUZXN0U2VydmVyLmgiCisjaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKKyNp
bmNsdWRlIDxjc3RkYXJnPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQy
L3dlYmtpdDIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisKK3N0YXRpYyBX
ZWJLaXRUZXN0U2VydmVyKiBrU2VydmVyOworCisvLyBUaGVzZSBhcmUgYWxsIGhlcmUgc28gdGhh
dCB0aGV5IGNhbiBiZSBjaGFuZ2VkIGVhc2lseSwgaWYgbmVjZXNzYXJ5Lgorc3RhdGljIGNvbnN0
IGNoYXIqIGtTdHlsZVNoZWV0SFRNTCA9ICI8aHRtbD48ZGl2IGlkPVwic3R5bGVkRWxlbWVudFwi
PlN3ZWV0IHN0eWxleiE8L2Rpdj48L2h0bWw+IjsKK3N0YXRpYyBjb25zdCBjaGFyKiBrSW5qZWN0
ZWRTdHlsZVNoZWV0ID0gIiNzdHlsZWRFbGVtZW50IHsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0iOwor
c3RhdGljIGNvbnN0IGNoYXIqIGtTdHlsZVNoZWV0VGVzdFNjcmlwdCA9ICJnZXRDb21wdXRlZFN0
eWxlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdHlsZWRFbGVtZW50JykpWydmb250LXdlaWdo
dCddIjsKK3N0YXRpYyBjb25zdCBjaGFyKiBrU3R5bGVTaGVldFRlc3RTY3JpcHRSZXN1bHQgPSAi
Ym9sZCI7CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3R3JvdXBEZWZhdWx0KFRlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8gRGVmYXVsdCBncm91cCBpcyBzaGFyZWQgYnkgYWxs
IFdlYlZpZXdzIGJ5IGRlZmF1bHQuCisgICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3PiB3ZWJWaWV3
MSA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIEdSZWZQdHI8
V2ViS2l0V2ViVmlldz4gd2ViVmlldzIgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3
X25ldygpKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2dyb3VwKHdlYlZpZXcx
LmdldCgpKSA9PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2dyb3VwKHdlYlZpZXcyLmdldCgpKSk7CisK
KyAgICAvLyBTZXR0aW5ncyBhcmUgc2hhcmVkIGJ5IGFsbCB3ZWIgdmlldyBpbiB0aGUgc2FtZSBn
cm91cC4KKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdlYlZpZXcx
LmdldCgpKSA9PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdlYlZpZXcyLmdldCgpKSk7
CisgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3MS5nZXQo
KSkgPT0gd2Via2l0X3dlYl92aWV3X2dyb3VwX2dldF9zZXR0aW5ncyh3ZWJraXRfd2ViX3ZpZXdf
Z2V0X2dyb3VwKHdlYlZpZXcyLmdldCgpKSkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmll
d0dyb3VwTmV3R3JvdXAoVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICAvLyBQYXNz
aW5nIDAgYXMgZ3JvdXAgbmFtZSBnZW5lcmF0ZXMgdGhlIG5hbWUgYXV0b21hdGljYWxseS4KKyAg
ICBHUmVmUHRyPFdlYktpdFdlYlZpZXdHcm91cD4gdmlld0dyb3VwMSA9IGFkb3B0R1JlZih3ZWJr
aXRfd2ViX3ZpZXdfZ3JvdXBfbmV3KDApKTsKKyAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0
ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHZpZXdHcm91cDEuZ2V0KCkpKTsKKyAgICBnX2Fz
c2VydCh3ZWJraXRfd2ViX3ZpZXdfZ3JvdXBfZ2V0X25hbWUodmlld0dyb3VwMS5nZXQoKSkpOwor
CisgICAgLy8gTmV3IGdyb3VwIHdpdGggYSBnaXZlbiBuYW1lLgorICAgIEdSZWZQdHI8V2ViS2l0
V2ViVmlld0dyb3VwPiB2aWV3R3JvdXAyID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJfdmlld19ncm91
cF9uZXcoIlRlc3RHcm91cDIiKSk7CisgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hl
blRlc3RGaW5pc2hlcyhHX09CSkVDVCh2aWV3R3JvdXAyLmdldCgpKSk7CisgICAgZ19hc3NlcnRf
Y21wc3RyKHdlYmtpdF93ZWJfdmlld19ncm91cF9nZXRfbmFtZSh2aWV3R3JvdXAyLmdldCgpKSwg
PT0sICJUZXN0R3JvdXAyIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19n
cm91cF9nZXRfbmFtZSh2aWV3R3JvdXAyLmdldCgpKSwgIT0sIHdlYmtpdF93ZWJfdmlld19ncm91
cF9nZXRfbmFtZSh2aWV3R3JvdXAxLmdldCgpKSk7CisKKyAgICAvLyBFdmVyeSBncm91cCBoYXMg
aXRzIG93biBzZXR0aW5ncy4KKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ3JvdXBfZ2V0
X3NldHRpbmdzKHZpZXdHcm91cDEuZ2V0KCkpICE9IHdlYmtpdF93ZWJfdmlld19ncm91cF9nZXRf
c2V0dGluZ3Modmlld0dyb3VwMi5nZXQoKSkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmll
d05ld1dpdGhHcm91cChUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIEdSZWZQdHI8
V2ViS2l0V2ViVmlld0dyb3VwPiB2aWV3R3JvdXAxID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJfdmll
d19ncm91cF9uZXcoIlRlc3RHcm91cDEiKSk7CisgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxl
dGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVCh2aWV3R3JvdXAxLmdldCgpKSk7CisgICAgR1Jl
ZlB0cjxXZWJLaXRXZWJWaWV3PiB3ZWJWaWV3MSA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2Vi
X3ZpZXdfbmV3X3dpdGhfZ3JvdXAodmlld0dyb3VwMS5nZXQoKSkpOworICAgIGdfYXNzZXJ0KHdl
YmtpdF93ZWJfdmlld19nZXRfZ3JvdXAod2ViVmlldzEuZ2V0KCkpID09IHZpZXdHcm91cDEuZ2V0
KCkpOworCisgICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3PiB3ZWJWaWV3MiA9IFdFQktJVF9XRUJf
VklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmll
d19nZXRfZ3JvdXAod2ViVmlldzIuZ2V0KCkpICE9IHZpZXdHcm91cDEuZ2V0KCkpOworCisgICAg
Ly8gU2V0dGluZ3Mgc2hvdWxkIGJlIGRpZmZlcmVudCBmb3Igdmlld3MgaW4gZGlmZmVyZW50IGdy
b3Vwcy4KKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdlYlZpZXcx
LmdldCgpKSAhPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdlYlZpZXcyLmdldCgpKSk7
Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3R3JvdXBTZXR0aW5ncyhUZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQoreworICAgIEdSZWZQdHI8V2ViS2l0V2ViVmlld0dyb3VwPiB2aWV3R3Jv
dXAxID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJfdmlld19ncm91cF9uZXcoIlRlc3RHcm91cDEiKSk7
CisgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVD
VCh2aWV3R3JvdXAxLmdldCgpKSk7CisgICAgR1JlZlB0cjxXZWJLaXRTZXR0aW5ncz4gbmV3U2V0
dGluZ3MgPSBhZG9wdEdSZWYod2Via2l0X3NldHRpbmdzX25ld193aXRoX3NldHRpbmdzKCJlbmFi
bGUtamF2YXNjcmlwdCIsIEZBTFNFLCBudWxscHRyKSk7CisgICAgdGVzdC0+YXNzZXJ0T2JqZWN0
SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChuZXdTZXR0aW5ncy5nZXQoKSkpOwor
ICAgIHdlYmtpdF93ZWJfdmlld19ncm91cF9zZXRfc2V0dGluZ3Modmlld0dyb3VwMS5nZXQoKSwg
bmV3U2V0dGluZ3MuZ2V0KCkpOworICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19ncm91cF9n
ZXRfc2V0dGluZ3Modmlld0dyb3VwMS5nZXQoKSkgPT0gbmV3U2V0dGluZ3MuZ2V0KCkpOworCisg
ICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3PiB3ZWJWaWV3MSA9IFdFQktJVF9XRUJfVklFVyh3ZWJr
aXRfd2ViX3ZpZXdfbmV3X3dpdGhfZ3JvdXAodmlld0dyb3VwMS5nZXQoKSkpOworICAgIEdSZWZQ
dHI8V2ViS2l0V2ViVmlldz4gd2ViVmlldzIgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92
aWV3X25ldygpKTsKKyAgICBXZWJLaXRTZXR0aW5ncyogd2ViVmlldzFTZXR0aW5ncyA9IHdlYmtp
dF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmlldzEuZ2V0KCkpOworICAgIFdlYktpdFNldHRp
bmdzKiB3ZWJWaWV3MlNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJW
aWV3Mi5nZXQoKSk7CisgICAgZ19hc3NlcnQod2ViVmlldzFTZXR0aW5ncyAhPSB3ZWJWaWV3MlNl
dHRpbmdzKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9qYXZhc2Ny
aXB0KHdlYlZpZXcxU2V0dGluZ3MpICE9IHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2phdmFz
Y3JpcHQod2ViVmlldzJTZXR0aW5ncykpOworCisgICAgd2Via2l0X3dlYl92aWV3X3NldF9zZXR0
aW5ncyh3ZWJWaWV3MS5nZXQoKSwgd2ViVmlldzJTZXR0aW5ncyk7CisgICAgZ19hc3NlcnQod2Vi
a2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3MS5nZXQoKSkgPT0gd2ViVmlldzJTZXR0
aW5ncyk7CisgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dyb3VwX2dldF9zZXR0aW5ncyh3
ZWJraXRfd2ViX3ZpZXdfZ2V0X2dyb3VwKHdlYlZpZXcxLmdldCgpKSkgPT0gd2ViVmlldzJTZXR0
aW5ncyk7Cit9CisKK3N0YXRpYyBib29sIGlzU3R5bGVTaGVldEluamVjdGVkRm9yVVJMQXRQYXRo
KFdlYlZpZXdUZXN0KiB0ZXN0LCBjb25zdCBjaGFyKiBwYXRoKQoreworICAgIHRlc3QtPmxvYWRV
Ukkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aChwYXRoKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRV
bnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAgIFdl
YktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2Ny
aXB0QW5kV2FpdFVudGlsRmluaXNoZWQoa1N0eWxlU2hlZXRUZXN0U2NyaXB0LCAmZXJyb3Iub3V0
UHRyKCkpOworICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KCFl
cnJvci5nZXQoKSk7CisKKyAgICBHT3duUHRyPGNoYXI+IHJlc3VsdFN0cmluZyhXZWJWaWV3VGVz
dDo6amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7CisgICAgcmV0
dXJuICFnX3N0cmNtcDAocmVzdWx0U3RyaW5nLmdldCgpLCBrU3R5bGVTaGVldFRlc3RTY3JpcHRS
ZXN1bHQpOworfQorCitzdGF0aWMgdm9pZCBmaWxsVVJMTGlzdEZyb21QYXRocyhjaGFyKiogbGlz
dCwgY29uc3QgY2hhciogcGF0aCwgLi4uKQoreworICAgIHZhX2xpc3QgYXJndW1lbnRMaXN0Owor
ICAgIHZhX3N0YXJ0KGFyZ3VtZW50TGlzdCwgcGF0aCk7CisKKyAgICBpbnQgaSA9IDA7CisgICAg
d2hpbGUgKHBhdGgpIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIG11c3QgdXNlIGEgd2lsZGNhcmQg
Zm9yIHRoZSBob3N0IGhlcmUgdW50aWwgaHR0cDovL3drYnVnLmNvbS8xMTI0NzYgaXMgZml4ZWQu
CisgICAgICAgIC8vIFVudGlsIHRoYXQgdGltZSBwYXR0ZXJucyB3aXRoIHBvcnQgbnVtYmVycyBp
biB0aGVtIHdpbGwgbm90IHByb3Blcmx5IG1hdGNoIFVSTHMgd2l0aCBwb3J0IG51bWJlcnMuCisg
ICAgICAgIGxpc3RbaSsrXSA9IGdfc3RyZHVwX3ByaW50ZigiaHR0cDovLyovJXMqIiwgcGF0aCk7
CisgICAgICAgIHBhdGggPSB2YV9hcmcoYXJndW1lbnRMaXN0LCBjb25zdCBjaGFyKik7CisgICAg
fQorfQorCitzdGF0aWMgdm9pZCByZW1vdmVPbGRJbmplY3RlZFN0eWxlU2hlZXRzQW5kUmVzZXRM
aXN0cyhXZWJLaXRXZWJWaWV3R3JvdXAqIGdyb3VwLCBjaGFyKiogd2hpdGVsaXN0LCBjaGFyKiog
YmxhY2tsaXN0KQoreworICAgIHdlYmtpdF93ZWJfdmlld19ncm91cF9yZW1vdmVfYWxsX3VzZXJf
c3R5bGVfc2hlZXRzKGdyb3VwKTsKKworICAgIHdoaWxlICgqd2hpdGVsaXN0KSB7CisgICAgICAg
IGdfZnJlZSgqd2hpdGVsaXN0KTsKKyAgICAgICAgKndoaXRlbGlzdCA9IDA7CisgICAgICAgIHdo
aXRlbGlzdCsrOworICAgIH0KKworICAgIHdoaWxlICgqYmxhY2tsaXN0KSB7CisgICAgICAgIGdf
ZnJlZSgqYmxhY2tsaXN0KTsKKyAgICAgICAgKmJsYWNrbGlzdCA9IDA7CisgICAgICAgIGJsYWNr
bGlzdCsrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdHcm91cEluamVjdGVk
U3R5bGVTaGVldChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBXZWJL
aXRXZWJWaWV3R3JvdXAqIGdyb3VwID0gd2Via2l0X3dlYl92aWV3X2dldF9ncm91cCh0ZXN0LT5t
X3dlYlZpZXcpOworICAgIGNoYXIqIHdoaXRlbGlzdFszXSA9IHsgMCwgMCwgMCB9OworICAgIGNo
YXIqIGJsYWNrbGlzdFszXSA9IHsgMCwgMCwgMCB9OworCisgICAgcmVtb3ZlT2xkSW5qZWN0ZWRT
dHlsZVNoZWV0c0FuZFJlc2V0TGlzdHMoZ3JvdXAsIHdoaXRlbGlzdCwgYmxhY2tsaXN0KTsKKwor
ICAgIC8vIFdpdGhvdXQgYSB3aGl0ZWxpc3Qgb3IgYSBibGFja2xpc3QgYWxsIFVSTHMgc2hvdWxk
IGhhdmUgdGhlIGluamVjdGVkIHN0eWxlIHNoZWV0LgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBy
YW5kb21QYXRoID0gInNvbWVyYW5kb21wYXRoIjsKKyAgICBnX2Fzc2VydCghaXNTdHlsZVNoZWV0
SW5qZWN0ZWRGb3JVUkxBdFBhdGgodGVzdCwgcmFuZG9tUGF0aCkpOworICAgIHdlYmtpdF93ZWJf
dmlld19ncm91cF9hZGRfdXNlcl9zdHlsZV9zaGVldChncm91cCwga0luamVjdGVkU3R5bGVTaGVl
dCwgMCwgMCwgMCwgV0VCS0lUX0lOSkVDVEVEX0NPTlRFTlRfRlJBTUVTX0FMTCk7CisgICAgZ19h
c3NlcnQoaXNTdHlsZVNoZWV0SW5qZWN0ZWRGb3JVUkxBdFBhdGgodGVzdCwgcmFuZG9tUGF0aCkp
OworCisgICAgcmVtb3ZlT2xkSW5qZWN0ZWRTdHlsZVNoZWV0c0FuZFJlc2V0TGlzdHMoZ3JvdXAs
IHdoaXRlbGlzdCwgYmxhY2tsaXN0KTsKKworICAgIGZpbGxVUkxMaXN0RnJvbVBhdGhzKGJsYWNr
bGlzdCwgcmFuZG9tUGF0aCwgMCk7CisgICAgd2Via2l0X3dlYl92aWV3X2dyb3VwX2FkZF91c2Vy
X3N0eWxlX3NoZWV0KGdyb3VwLCBrSW5qZWN0ZWRTdHlsZVNoZWV0LCAwLCAwLCBibGFja2xpc3Qs
IFdFQktJVF9JTkpFQ1RFRF9DT05URU5UX0ZSQU1FU19BTEwpOworICAgIGdfYXNzZXJ0KCFpc1N0
eWxlU2hlZXRJbmplY3RlZEZvclVSTEF0UGF0aCh0ZXN0LCByYW5kb21QYXRoKSk7CisgICAgZ19h
c3NlcnQoaXNTdHlsZVNoZWV0SW5qZWN0ZWRGb3JVUkxBdFBhdGgodGVzdCwgInNvbWVvdGhlcnJh
bmRvbXBhdGgiKSk7CisKKyAgICByZW1vdmVPbGRJbmplY3RlZFN0eWxlU2hlZXRzQW5kUmVzZXRM
aXN0cyhncm91cCwgd2hpdGVsaXN0LCBibGFja2xpc3QpOworCisgICAgc3RhdGljIGNvbnN0IGNo
YXIqIGluVGhlV2hpdGVMaXN0ID0gImludGhld2hpdGVsaXN0IjsKKyAgICBzdGF0aWMgY29uc3Qg
Y2hhciogbm90SW5XaGl0ZWxpc3QgPSAibm90aW50aGV3aGl0ZWxpc3QiOworICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBpblRoZVdoaXRlTGlzdEFuZEJsYWNrTGlzdCA9ICJpbnRoZXdoaXRlbGlzdGFu
ZGJsYWNrbGlzdCI7CisKKyAgICBmaWxsVVJMTGlzdEZyb21QYXRocyh3aGl0ZWxpc3QsIGluVGhl
V2hpdGVMaXN0LCBpblRoZVdoaXRlTGlzdEFuZEJsYWNrTGlzdCwgMCk7CisgICAgZmlsbFVSTExp
c3RGcm9tUGF0aHMoYmxhY2tsaXN0LCBpblRoZVdoaXRlTGlzdEFuZEJsYWNrTGlzdCwgMCk7Cisg
ICAgd2Via2l0X3dlYl92aWV3X2dyb3VwX2FkZF91c2VyX3N0eWxlX3NoZWV0KGdyb3VwLCBrSW5q
ZWN0ZWRTdHlsZVNoZWV0LCAwLCB3aGl0ZWxpc3QsIGJsYWNrbGlzdCwgV0VCS0lUX0lOSkVDVEVE
X0NPTlRFTlRfRlJBTUVTX0FMTCk7CisgICAgZ19hc3NlcnQoaXNTdHlsZVNoZWV0SW5qZWN0ZWRG
b3JVUkxBdFBhdGgodGVzdCwgaW5UaGVXaGl0ZUxpc3QpKTsKKyAgICBnX2Fzc2VydCghaXNTdHls
ZVNoZWV0SW5qZWN0ZWRGb3JVUkxBdFBhdGgodGVzdCwgaW5UaGVXaGl0ZUxpc3RBbmRCbGFja0xp
c3QpKTsKKyAgICBnX2Fzc2VydCghaXNTdHlsZVNoZWV0SW5qZWN0ZWRGb3JVUkxBdFBhdGgodGVz
dCwgbm90SW5XaGl0ZWxpc3QpKTsKKworICAgIC8vIEl0J3MgaW1wb3J0YW50IHRvIGNsZWFuIHVw
IHRoZSBlbnZpcm9ubWVudCBiZWZvcmUgb3RoZXIgdGVzdHMuCisgICAgcmVtb3ZlT2xkSW5qZWN0
ZWRTdHlsZVNoZWV0c0FuZFJlc2V0TGlzdHMoZ3JvdXAsIHdoaXRlbGlzdCwgYmxhY2tsaXN0KTsK
K30KKworc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3Vw
TWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSosIFNvdXBDbGll
bnRDb250ZXh0KiwgZ3BvaW50ZXIpCit7CisgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVz
c2FnZSwgU09VUF9TVEFUVVNfT0spOworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNz
YWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGtTdHlsZVNoZWV0SFRNTCwg
c3RybGVuKGtTdHlsZVNoZWV0SFRNTCkpOworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRl
KG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOworfQorCit2b2lkIGJlZm9yZUFsbCgpCit7CisgICAg
a1NlcnZlciA9IG5ldyBXZWJLaXRUZXN0U2VydmVyKCk7CisgICAga1NlcnZlci0+cnVuKHNlcnZl
ckNhbGxiYWNrKTsKKworICAgIFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlld0dyb3VwIiwgImRlZmF1
bHQtZ3JvdXAiLCB0ZXN0V2ViVmlld0dyb3VwRGVmYXVsdCk7CisgICAgVGVzdDo6YWRkKCJXZWJL
aXRXZWJWaWV3R3JvdXAiLCAibmV3LWdyb3VwIiwgdGVzdFdlYlZpZXdHcm91cE5ld0dyb3VwKTsK
KyAgICBUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAibmV3LXdpdGgtZ3JvdXAiLCB0ZXN0V2Vi
Vmlld05ld1dpdGhHcm91cCk7CisgICAgVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3R3JvdXAiLCAi
c2V0dGluZ3MiLCB0ZXN0V2ViVmlld0dyb3VwU2V0dGluZ3MpOworICAgIFdlYlZpZXdUZXN0Ojph
ZGQoIldlYktpdFdlYlZpZXdHcm91cCIsICJpbmplY3RlZC1zdHlsZS1zaGVldCIsIHRlc3RXZWJW
aWV3R3JvdXBJbmplY3RlZFN0eWxlU2hlZXQpOworfQorCit2b2lkIGFmdGVyQWxsKCkKK3sKKyAg
ICBkZWxldGUga1NlcnZlcjsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Mkd0ay9UZXN0V2ViVmlld0VkaXRvci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYlZpZXdFZGl0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjFlYTJhY2QKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYlZpZXdFZGl0b3IuY3BwCkBAIC0wLDAg
KzEsMjAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKKyNpbmNsdWRlIDx3dGYvZ29i
amVjdC9HUmVmUHRyLmg+CisKK2NsYXNzIEVkaXRvclRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7
CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShFZGl0b3JUZXN0KTsKKworICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBrQ2xpcGJvYXJkV2FpdFRpbWVvdXQgPSA1MDsKKyAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQga0NsaXBib2FyZFdhaXRNYXhUcmllcyA9IDI7CisKKyAgICBF
ZGl0b3JUZXN0KCkKKyAgICAgICAgOiBtX2NsaXBib2FyZChndGtfY2xpcGJvYXJkX2dldChHREtf
U0VMRUNUSU9OX0NMSVBCT0FSRCkpCisgICAgICAgICwgbV9jYW5FeGVjdXRlRWRpdGluZ0NvbW1h
bmQoZmFsc2UpCisgICAgICAgICwgbV90cmllc0NvdW50KDApCisgICAgeworICAgICAgICBndGtf
Y2xpcGJvYXJkX2NsZWFyKG1fY2xpcGJvYXJkKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBj
YW5FeGVjdXRlRWRpdGluZ0NvbW1hbmRSZWFkeUNhbGxiYWNrKEdPYmplY3QqLCBHQXN5bmNSZXN1
bHQqIHJlc3VsdCwgRWRpdG9yVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIEdPd25QdHI8R0Vy
cm9yPiBlcnJvcjsKKyAgICAgICAgdGVzdC0+bV9jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQgPSB3
ZWJraXRfd2ViX3ZpZXdfY2FuX2V4ZWN1dGVfZWRpdGluZ19jb21tYW5kX2ZpbmlzaCh0ZXN0LT5t
X3dlYlZpZXcsIHJlc3VsdCwgJmVycm9yLm91dFB0cigpKTsKKyAgICAgICAgZ19hc3NlcnQoIWVy
cm9yLmdldCgpKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsK
KyAgICB9CisKKyAgICBib29sIGNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChjb25zdCBjaGFyKiBj
b21tYW5kKQorICAgIHsKKyAgICAgICAgbV9jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQgPSBmYWxz
ZTsKKyAgICAgICAgd2Via2l0X3dlYl92aWV3X2Nhbl9leGVjdXRlX2VkaXRpbmdfY29tbWFuZCht
X3dlYlZpZXcsIGNvbW1hbmQsIDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFj
az4oY2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kUmVhZHlDYWxsYmFjayksIHRoaXMpOworICAgICAg
ICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgICAgIHJldHVybiBtX2NhbkV4ZWN1
dGVFZGl0aW5nQ29tbWFuZDsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gd2FpdEZvckNs
aXBib2FyZFRleHQoRWRpdG9yVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPm1fdHJp
ZXNDb3VudCsrOworICAgICAgICBpZiAoZ3RrX2NsaXBib2FyZF93YWl0X2lzX3RleHRfYXZhaWxh
YmxlKHRlc3QtPm1fY2xpcGJvYXJkKSB8fCB0ZXN0LT5tX3RyaWVzQ291bnQgPiBrQ2xpcGJvYXJk
V2FpdE1heFRyaWVzKSB7CisgICAgICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFp
bkxvb3ApOworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgdm9pZCBjb3B5Q2xpcGJvYXJkKCkKKyAgICB7Cisg
ICAgICAgIHdlYmtpdF93ZWJfdmlld19leGVjdXRlX2VkaXRpbmdfY29tbWFuZChtX3dlYlZpZXcs
IFdFQktJVF9FRElUSU5HX0NPTU1BTkRfQ09QWSk7CisgICAgICAgIC8vIFRoZXJlJ3Mgbm8gd2F5
IHRvIGtub3cgd2hlbiB0aGUgc2VsZWN0aW9uIGhhcyBiZWVuIGNvcGllZCB0bworICAgICAgICAv
LyB0aGUgY2xpcGJvYXJkLCBzbyB1c2UgYSB0aW1lb3V0IHNvdXJjZSB0byBxdWVyeSB0aGUgY2xp
cGJvYXJkLgorICAgICAgICBtX3RyaWVzQ291bnQgPSAwOworICAgICAgICBnX3RpbWVvdXRfYWRk
KGtDbGlwYm9hcmRXYWl0VGltZW91dCwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4od2Fp
dEZvckNsaXBib2FyZFRleHQpLCB0aGlzKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFp
bkxvb3ApOworICAgIH0KKworICAgIEd0a0NsaXBib2FyZCogbV9jbGlwYm9hcmQ7CisgICAgYm9v
bCBtX2NhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZDsKKyAgICBzaXplX3QgbV90cmllc0NvdW50Owor
fTsKKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdFZGl0b3JDdXRDb3B5UGFzdGVOb25FZGl0YWJs
ZShFZGl0b3JUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBzZWxlY3RlZFNwYW5IVE1MID0gIjxodG1sPjxib2R5IGNvbnRlbnRFZGl0YWJsZT1cImZh
bHNlXCI+IgorICAgICAgICAiPHNwYW4gaWQ9XCJtYWluc3BhblwiPkFsbCB3b3JrIGFuZCBubyBw
bGF5IDxzcGFuIGlkPVwic3Vic3BhblwiPm1ha2UgSmFjayBhIGR1bGw8L3NwYW4+IGJveS48L3Nw
YW4+IgorICAgICAgICAiPHNjcmlwdD5kb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5jb2xsYXBzZSgp
O1xuIgorICAgICAgICAiZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0QWxsQ2hpbGRyZW4o
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1YnNwYW4nKSk7XG4iCisgICAgICAgICI8L3Njcmlw
dD48L2JvZHk+PC9odG1sPiI7CisKKyAgICAvLyBOb3RoaW5nIGxvYWRlZCB5ZXQuCisgICAgZ19h
c3NlcnQoIXRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElOR19DT01N
QU5EX0NVVCkpOworICAgIGdfYXNzZXJ0KCF0ZXN0LT5jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQo
V0VCS0lUX0VESVRJTkdfQ09NTUFORF9DT1BZKSk7CisgICAgZ19hc3NlcnQoIXRlc3QtPmNhbkV4
ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElOR19DT01NQU5EX1BBU1RFKSk7CisKKyAg
ICB0ZXN0LT5sb2FkSHRtbChzZWxlY3RlZFNwYW5IVE1MLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50
aWxMb2FkRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5n
Q29tbWFuZChXRUJLSVRfRURJVElOR19DT01NQU5EX0NPUFkpKTsKKyAgICAvLyBJdCdzIG5vdCBw
b3NzaWJsZSB0byBjdXQgYW5kIHBhc3RlIHdoZW4gY29udGVudCBpcyBub3QgZWRpdGFibGUKKyAg
ICAvLyBldmVuIGlmIHRoZXJlJ3MgYSBzZWxlY3Rpb24uCisgICAgZ19hc3NlcnQoIXRlc3QtPmNh
bkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElOR19DT01NQU5EX0NVVCkpOworICAg
IGdfYXNzZXJ0KCF0ZXN0LT5jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQoV0VCS0lUX0VESVRJTkdf
Q09NTUFORF9QQVNURSkpOworCisgICAgdGVzdC0+Y29weUNsaXBib2FyZCgpOworICAgIEdPd25Q
dHI8Y2hhcj4gY2xpcGJvYXJkVGV4dChndGtfY2xpcGJvYXJkX3dhaXRfZm9yX3RleHQodGVzdC0+
bV9jbGlwYm9hcmQpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoY2xpcGJvYXJkVGV4dC5nZXQoKSwg
PT0sICJtYWtlIEphY2sgYSBkdWxsIik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3RWRp
dG9yQ3V0Q29weVBhc3RlRWRpdGFibGUoRWRpdG9yVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikK
K3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciogc2VsZWN0ZWRTcGFuSFRNTCA9ICI8aHRtbD48Ym9k
eSBjb250ZW50RWRpdGFibGU9XCJ0cnVlXCI+IgorICAgICAgICAiPHNwYW4gaWQ9XCJtYWluc3Bh
blwiPkFsbCB3b3JrIGFuZCBubyBwbGF5IDxzcGFuPm1ha2UgSmFjayBhIGR1bGw8L3NwYW4+IGJv
eS48L3NwYW4+IgorICAgICAgICAiPHNjcmlwdD5kb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5jb2xs
YXBzZSgpO1xuIgorICAgICAgICAiZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0QWxsQ2hp
bGRyZW4oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW5zcGFuJykpO1xuIgorICAgICAgICAi
PC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4iOworCisgICAgLy8gTm90aGluZyBsb2FkZWQgeWV0Lgor
ICAgIGdfYXNzZXJ0KCF0ZXN0LT5jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQoV0VCS0lUX0VESVRJ
TkdfQ09NTUFORF9DVVQpKTsKKyAgICBnX2Fzc2VydCghdGVzdC0+Y2FuRXhlY3V0ZUVkaXRpbmdD
b21tYW5kKFdFQktJVF9FRElUSU5HX0NPTU1BTkRfQ09QWSkpOworICAgIGdfYXNzZXJ0KCF0ZXN0
LT5jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQoV0VCS0lUX0VESVRJTkdfQ09NTUFORF9QQVNURSkp
OworCisgICAgdGVzdC0+bG9hZEh0bWwoc2VsZWN0ZWRTcGFuSFRNTCwgMCk7CisgICAgdGVzdC0+
d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICAvLyBUaGVyZSdzIGEgc2VsZWN0aW9uLgor
ICAgIGdfYXNzZXJ0KHRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElO
R19DT01NQU5EX0NVVCkpOworICAgIGdfYXNzZXJ0KHRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29t
bWFuZChXRUJLSVRfRURJVElOR19DT01NQU5EX0NPUFkpKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5j
YW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQoV0VCS0lUX0VESVRJTkdfQ09NTUFORF9QQVNURSkpOwor
CisgICAgdGVzdC0+Y29weUNsaXBib2FyZCgpOworICAgIEdPd25QdHI8Y2hhcj4gY2xpcGJvYXJk
VGV4dChndGtfY2xpcGJvYXJkX3dhaXRfZm9yX3RleHQodGVzdC0+bV9jbGlwYm9hcmQpKTsKKyAg
ICBnX2Fzc2VydF9jbXBzdHIoY2xpcGJvYXJkVGV4dC5nZXQoKSwgPT0sICJBbGwgd29yayBhbmQg
bm8gcGxheSBtYWtlIEphY2sgYSBkdWxsIGJveS4iKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdl
YlZpZXdFZGl0b3JTZWxlY3RBbGxOb25FZGl0YWJsZShFZGl0b3JUZXN0KiB0ZXN0LCBnY29uc3Rw
b2ludGVyKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzZWxlY3RlZFNwYW5IVE1MID0gIjxo
dG1sPjxib2R5IGNvbnRlbnRFZGl0YWJsZT1cImZhbHNlXCI+IgorICAgICAgICAiPHNwYW4gaWQ9
XCJtYWluc3BhblwiPkFsbCB3b3JrIGFuZCBubyBwbGF5IDxzcGFuIGlkPVwic3Vic3BhblwiPm1h
a2UgSmFjayBhIGR1bGw8L3NwYW4+IGJveS48L3NwYW4+IgorICAgICAgICAiPHNjcmlwdD5kb2N1
bWVudC5nZXRTZWxlY3Rpb24oKS5jb2xsYXBzZSgpO1xuIgorICAgICAgICAiZG9jdW1lbnQuZ2V0
U2VsZWN0aW9uKCkuc2VsZWN0QWxsQ2hpbGRyZW4oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1
YnNwYW4nKSk7XG4iCisgICAgICAgICI8L3NjcmlwdD48L2JvZHk+PC9odG1sPiI7CisKKyAgICBn
X2Fzc2VydCh0ZXN0LT5jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQoV0VCS0lUX0VESVRJTkdfQ09N
TUFORF9TRUxFQ1RfQUxMKSk7CisKKyAgICB0ZXN0LT5sb2FkSHRtbChzZWxlY3RlZFNwYW5IVE1M
LCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0
KHRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElOR19DT01NQU5EX1NF
TEVDVF9BTEwpKTsKKworICAgIHRlc3QtPmNvcHlDbGlwYm9hcmQoKTsKKyAgICBHT3duUHRyPGNo
YXI+IGNsaXBib2FyZFRleHQoZ3RrX2NsaXBib2FyZF93YWl0X2Zvcl90ZXh0KHRlc3QtPm1fY2xp
cGJvYXJkKSk7CisKKyAgICAvLyBJbml0aWFsbHkgb25seSB0aGUgc3Vic3BhbiBpcyBzZWxlY3Rl
ZC4KKyAgICBnX2Fzc2VydF9jbXBzdHIoY2xpcGJvYXJkVGV4dC5nZXQoKSwgPT0sICJtYWtlIEph
Y2sgYSBkdWxsIik7CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfZXhlY3V0ZV9lZGl0aW5nX2NvbW1h
bmQodGVzdC0+bV93ZWJWaWV3LCBXRUJLSVRfRURJVElOR19DT01NQU5EX1NFTEVDVF9BTEwpOwor
ICAgIHRlc3QtPmNvcHlDbGlwYm9hcmQoKTsKKyAgICBjbGlwYm9hcmRUZXh0LnNldChndGtfY2xp
cGJvYXJkX3dhaXRfZm9yX3RleHQodGVzdC0+bV9jbGlwYm9hcmQpKTsKKworICAgIC8vIFRoZSBt
YWluc3BhbiBzaG91bGQgYmUgc2VsZWN0ZWQgYWZ0ZXIgY2FsbGluZyBTRUxFQ1RfQUxMLgorICAg
IGdfYXNzZXJ0X2NtcHN0cihjbGlwYm9hcmRUZXh0LmdldCgpLCA9PSwgIkFsbCB3b3JrIGFuZCBu
byBwbGF5IG1ha2UgSmFjayBhIGR1bGwgYm95LiIpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2Vi
Vmlld0VkaXRvclNlbGVjdEFsbEVkaXRhYmxlKEVkaXRvclRlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHNlbGVjdGVkU3BhbkhUTUwgPSAiPGh0bWw+
PGJvZHkgY29udGVudEVkaXRhYmxlPVwidHJ1ZVwiPiIKKyAgICAgICAgIjxzcGFuIGlkPVwibWFp
bnNwYW5cIj5BbGwgd29yayBhbmQgbm8gcGxheSA8c3BhbiBpZD1cInN1YnNwYW5cIj5tYWtlIEph
Y2sgYSBkdWxsPC9zcGFuPiBib3kuPC9zcGFuPiIKKyAgICAgICAgIjxzY3JpcHQ+ZG9jdW1lbnQu
Z2V0U2VsZWN0aW9uKCkuY29sbGFwc2UoKTtcbiIKKyAgICAgICAgImRvY3VtZW50LmdldFNlbGVj
dGlvbigpLnNlbGVjdEFsbENoaWxkcmVuKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdWJzcGFu
JykpO1xuIgorICAgICAgICAiPC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4iOworCisgICAgZ19hc3Nl
cnQodGVzdC0+Y2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kKFdFQktJVF9FRElUSU5HX0NPTU1BTkRf
U0VMRUNUX0FMTCkpOworCisgICAgdGVzdC0+bG9hZEh0bWwoc2VsZWN0ZWRTcGFuSFRNTCwgMCk7
CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCh0ZXN0
LT5jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQoV0VCS0lUX0VESVRJTkdfQ09NTUFORF9TRUxFQ1Rf
QUxMKSk7CisKKyAgICB0ZXN0LT5jb3B5Q2xpcGJvYXJkKCk7CisgICAgR093blB0cjxjaGFyPiBj
bGlwYm9hcmRUZXh0KGd0a19jbGlwYm9hcmRfd2FpdF9mb3JfdGV4dCh0ZXN0LT5tX2NsaXBib2Fy
ZCkpOworCisgICAgLy8gSW5pdGlhbGx5IG9ubHkgdGhlIHN1YnNwYW4gaXMgc2VsZWN0ZWQuCisg
ICAgZ19hc3NlcnRfY21wc3RyKGNsaXBib2FyZFRleHQuZ2V0KCksID09LCAibWFrZSBKYWNrIGEg
ZHVsbCIpOworCisgICAgd2Via2l0X3dlYl92aWV3X2V4ZWN1dGVfZWRpdGluZ19jb21tYW5kKHRl
c3QtPm1fd2ViVmlldywgV0VCS0lUX0VESVRJTkdfQ09NTUFORF9TRUxFQ1RfQUxMKTsKKyAgICB0
ZXN0LT5jb3B5Q2xpcGJvYXJkKCk7CisgICAgY2xpcGJvYXJkVGV4dC5zZXQoZ3RrX2NsaXBib2Fy
ZF93YWl0X2Zvcl90ZXh0KHRlc3QtPm1fY2xpcGJvYXJkKSk7CisKKyAgICAvLyBUaGUgbWFpbnNw
YW4gc2hvdWxkIGJlIHNlbGVjdGVkIGFmdGVyIGNhbGxpbmcgU0VMRUNUX0FMTC4KKyAgICBnX2Fz
c2VydF9jbXBzdHIoY2xpcGJvYXJkVGV4dC5nZXQoKSwgPT0sICJBbGwgd29yayBhbmQgbm8gcGxh
eSBtYWtlIEphY2sgYSBkdWxsIGJveS4iKTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQoreworICAg
IEVkaXRvclRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJjdXQtY29weS1wYXN0ZS9ub24tZWRp
dGFibGUiLCB0ZXN0V2ViVmlld0VkaXRvckN1dENvcHlQYXN0ZU5vbkVkaXRhYmxlKTsKKyAgICBF
ZGl0b3JUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiY3V0LWNvcHktcGFzdGUvZWRpdGFibGUi
LCB0ZXN0V2ViVmlld0VkaXRvckN1dENvcHlQYXN0ZUVkaXRhYmxlKTsKKyAgICBFZGl0b3JUZXN0
OjphZGQoIldlYktpdFdlYlZpZXciLCAic2VsZWN0LWFsbC9ub24tZWRpdGFibGUiLCB0ZXN0V2Vi
Vmlld0VkaXRvclNlbGVjdEFsbE5vbkVkaXRhYmxlKTsKKyAgICBFZGl0b3JUZXN0OjphZGQoIldl
YktpdFdlYlZpZXciLCAic2VsZWN0LWFsbC9lZGl0YWJsZSIsIHRlc3RXZWJWaWV3RWRpdG9yU2Vs
ZWN0QWxsRWRpdGFibGUpOworfQorCit2b2lkIGFmdGVyQWxsKCkKK3sKK30KZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9XZWJFeHRlbnNpb25UZXN0LmNw
cCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9XZWJFeHRlbnNpb25UZXN0
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGNiNmNhCi0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1dlYkV4dGVu
c2lvblRlc3QuY3BwCkBAIC0wLDAgKzEsMjY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0pTQ29udGV4dFJlZi5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTUmV0YWluUHRy
Lmg+CisjaW5jbHVkZSA8Z2lvL2dpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUg
PHN0cmluZy5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0LXdlYi1leHRlbnNpb24uaD4KKyNp
bmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5j
bHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKworc3RhdGljIGNvbnN0IGNoYXIgaW50cm9zcGVjdGlvblhNTFtdID0KKyAgICAiPG5vZGU+
IgorICAgICIgPGludGVyZmFjZSBuYW1lPSdvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0
Jz4iCisgICAgIiAgPG1ldGhvZCBuYW1lPSdHZXRUaXRsZSc+IgorICAgICIgICA8YXJnIHR5cGU9
J3QnIG5hbWU9J3BhZ2VJRCcgZGlyZWN0aW9uPSdpbicvPiIKKyAgICAiICAgPGFyZyB0eXBlPSdz
JyBuYW1lPSd0aXRsZScgZGlyZWN0aW9uPSdvdXQnLz4iCisgICAgIiAgPC9tZXRob2Q+IgorICAg
ICIgIDxtZXRob2QgbmFtZT0nQWJvcnRQcm9jZXNzJz4iCisgICAgIiAgPC9tZXRob2Q+IgorICAg
ICIgIDxtZXRob2QgbmFtZT0nUnVuSmF2YVNjcmlwdEluSXNvbGF0ZWRXb3JsZCc+IgorICAgICIg
ICA8YXJnIHR5cGU9J3QnIG5hbWU9J3BhZ2VJRCcgZGlyZWN0aW9uPSdpbicvPiIKKyAgICAiICAg
PGFyZyB0eXBlPSdzJyBuYW1lPSdzY3JpcHQnIGRpcmVjdGlvbj0naW4nLz4iCisgICAgIiAgPC9t
ZXRob2Q+IgorICAgICIgIDxzaWduYWwgbmFtZT0nRG9jdW1lbnRMb2FkZWQnLz4iCisgICAgIiAg
PHNpZ25hbCBuYW1lPSdVUklDaGFuZ2VkJz4iCisgICAgIiAgIDxhcmcgdHlwZT0ncycgbmFtZT0n
dXJpJyBkaXJlY3Rpb249J291dCcvPiIKKyAgICAiICA8L3NpZ25hbD4iCisgICAgIiA8L2ludGVy
ZmFjZT4iCisgICAgIjwvbm9kZT4iOworCit0eXBlZGVmIGVudW0geworICAgIERvY3VtZW50TG9h
ZGVkU2lnbmFsLAorICAgIFVSSUNoYW5nZWRTaWduYWwsCit9IERlbGF5ZWRTaWduYWxUeXBlOwor
CitzdHJ1Y3QgRGVsYXllZFNpZ25hbCB7CisgICAgRGVsYXllZFNpZ25hbChEZWxheWVkU2lnbmFs
VHlwZSB0eXBlKQorICAgICAgICA6IHR5cGUodHlwZSkKKyAgICB7CisgICAgfQorCisgICAgRGVs
YXllZFNpZ25hbChEZWxheWVkU2lnbmFsVHlwZSB0eXBlLCBjb25zdCBjaGFyKiB1cmkpCisgICAg
ICAgIDogdHlwZSh0eXBlKQorICAgICAgICAsIHVyaSh1cmkpCisgICAgeworICAgIH0KKworICAg
IERlbGF5ZWRTaWduYWxUeXBlIHR5cGU7CisgICAgQ1N0cmluZyB1cmk7Cit9OworCitEZXF1ZTxP
d25QdHI8RGVsYXllZFNpZ25hbD4+IGRlbGF5ZWRTaWduYWxzUXVldWU7CisKK3N0YXRpYyB2b2lk
IGVtaXREb2N1bWVudExvYWRlZChHREJ1c0Nvbm5lY3Rpb24qIGNvbm5lY3Rpb24pCit7CisgICAg
Ym9vbCBvayA9IGdfZGJ1c19jb25uZWN0aW9uX2VtaXRfc2lnbmFsKAorICAgICAgICBjb25uZWN0
aW9uLAorICAgICAgICAwLAorICAgICAgICAiL29yZy93ZWJraXQvZ3RrL1dlYkV4dGVuc2lvblRl
c3QiLAorICAgICAgICAib3JnLndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9uVGVzdCIsCisgICAgICAg
ICJEb2N1bWVudExvYWRlZCIsCisgICAgICAgIDAsCisgICAgICAgIDApOworICAgIGdfYXNzZXJ0
KG9rKTsKK30KKworc3RhdGljIHZvaWQgZG9jdW1lbnRMb2FkZWRDYWxsYmFjayhXZWJLaXRXZWJQ
YWdlKiwgV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24pCit7CisgICAgZ3BvaW50ZXIgZGF0
YSA9IGdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKGV4dGVuc2lvbiksICJkYnVzLWNvbm5lY3Rp
b24iKTsKKyAgICBpZiAoZGF0YSkKKyAgICAgICAgZW1pdERvY3VtZW50TG9hZGVkKEdfREJVU19D
T05ORUNUSU9OKGRhdGEpKTsKKyAgICBlbHNlCisgICAgICAgIGRlbGF5ZWRTaWduYWxzUXVldWUu
YXBwZW5kKGFkb3B0UHRyKG5ldyBEZWxheWVkU2lnbmFsKERvY3VtZW50TG9hZGVkU2lnbmFsKSkp
OworfQorCitzdGF0aWMgdm9pZCBlbWl0VVJJQ2hhbmdlZChHREJ1c0Nvbm5lY3Rpb24qIGNvbm5l
Y3Rpb24sIGNvbnN0IGNoYXIqIHVyaSkKK3sKKyAgICBib29sIG9rID0gZ19kYnVzX2Nvbm5lY3Rp
b25fZW1pdF9zaWduYWwoCisgICAgICAgIGNvbm5lY3Rpb24sCisgICAgICAgIDAsCisgICAgICAg
ICIvb3JnL3dlYmtpdC9ndGsvV2ViRXh0ZW5zaW9uVGVzdCIsCisgICAgICAgICJvcmcud2Via2l0
Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwKKyAgICAgICAgIlVSSUNoYW5nZWQiLAorICAgICAgICBn
X3ZhcmlhbnRfbmV3KCIocykiLCB1cmkpLAorICAgICAgICAwKTsKKyAgICBnX2Fzc2VydChvayk7
Cit9CisKK3N0YXRpYyB2b2lkIHVyaUNoYW5nZWRDYWxsYmFjayhXZWJLaXRXZWJQYWdlKiB3ZWJQ
YWdlLCBHUGFyYW1TcGVjKiBwc3BlYywgV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24pCit7
CisgICAgZ3BvaW50ZXIgZGF0YSA9IGdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKGV4dGVuc2lv
biksICJkYnVzLWNvbm5lY3Rpb24iKTsKKyAgICBpZiAoZGF0YSkKKyAgICAgICAgZW1pdFVSSUNo
YW5nZWQoR19EQlVTX0NPTk5FQ1RJT04oZGF0YSksIHdlYmtpdF93ZWJfcGFnZV9nZXRfdXJpKHdl
YlBhZ2UpKTsKKyAgICBlbHNlCisgICAgICAgIGRlbGF5ZWRTaWduYWxzUXVldWUuYXBwZW5kKGFk
b3B0UHRyKG5ldyBEZWxheWVkU2lnbmFsKFVSSUNoYW5nZWRTaWduYWwsIHdlYmtpdF93ZWJfcGFn
ZV9nZXRfdXJpKHdlYlBhZ2UpKSkpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gc2VuZFJlcXVlc3RD
YWxsYmFjayhXZWJLaXRXZWJQYWdlKiwgV2ViS2l0VVJJUmVxdWVzdCogcmVxdWVzdCwgV2ViS2l0
VVJJUmVzcG9uc2UqLCBncG9pbnRlcikKK3sKKyAgICBjb25zdCBjaGFyKiByZXF1ZXN0VVJJID0g
d2Via2l0X3VyaV9yZXF1ZXN0X2dldF91cmkocmVxdWVzdCk7CisgICAgZ19hc3NlcnQocmVxdWVz
dFVSSSk7CisKKyAgICBpZiAoY29uc3QgY2hhciogc3VmZml4ID0gZ19zdHJyc3RyKHJlcXVlc3RV
UkksICIvcmVtb3ZlLXRoaXMvamF2YXNjcmlwdC5qcyIpKSB7CisgICAgICAgIEdPd25QdHI8Y2hh
cj4gcHJlZml4KGdfc3RybmR1cChyZXF1ZXN0VVJJLCBzdHJsZW4ocmVxdWVzdFVSSSkgLSBzdHJs
ZW4oc3VmZml4KSkpOworICAgICAgICBHT3duUHRyPGNoYXI+IG5ld1VSSShnX3N0cmR1cF9wcmlu
dGYoIiVzL2phdmFzY3JpcHQuanMiLCBwcmVmaXguZ2V0KCkpKTsKKyAgICAgICAgd2Via2l0X3Vy
aV9yZXF1ZXN0X3NldF91cmkocmVxdWVzdCwgbmV3VVJJLmdldCgpKTsKKyAgICB9IGVsc2UgaWYg
KGdfc3RyX2hhc19zdWZmaXgocmVxdWVzdFVSSSwgIi9hZGQtZG8tbm90LXRyYWNrLWhlYWRlciIp
KSB7CisgICAgICAgIFNvdXBNZXNzYWdlSGVhZGVycyogaGVhZGVycyA9IHdlYmtpdF91cmlfcmVx
dWVzdF9nZXRfaHR0cF9oZWFkZXJzKHJlcXVlc3QpOworICAgICAgICBnX2Fzc2VydChoZWFkZXJz
KTsKKyAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKGhlYWRlcnMsICJETlQiLCAi
MSIpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfaGFzX3N1ZmZpeChyZXF1ZXN0VVJJLCAiL2NhbmNl
bC10aGlzLmpzIikpCisgICAgICAgIHJldHVybiBUUlVFOworCisgICAgcmV0dXJuIEZBTFNFOwor
fQorCitzdGF0aWMgdm9pZCBwYWdlQ3JlYXRlZENhbGxiYWNrKFdlYktpdFdlYkV4dGVuc2lvbiog
ZXh0ZW5zaW9uLCBXZWJLaXRXZWJQYWdlKiB3ZWJQYWdlLCBncG9pbnRlcikKK3sKKyAgICBnX3Np
Z25hbF9jb25uZWN0KHdlYlBhZ2UsICJkb2N1bWVudC1sb2FkZWQiLCBHX0NBTExCQUNLKGRvY3Vt
ZW50TG9hZGVkQ2FsbGJhY2spLCBleHRlbnNpb24pOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2Vi
UGFnZSwgIm5vdGlmeTo6dXJpIiwgR19DQUxMQkFDSyh1cmlDaGFuZ2VkQ2FsbGJhY2spLCBleHRl
bnNpb24pOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViUGFnZSwgInNlbmQtcmVxdWVzdCIsIEdf
Q0FMTEJBQ0soc2VuZFJlcXVlc3RDYWxsYmFjayksIDApOworfQorCitzdGF0aWMgSlNWYWx1ZVJl
ZiBlY2hvQ2FsbGJhY2soSlNDb250ZXh0UmVmIGpzQ29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2Jq
ZWN0UmVmLCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNb
XSwgSlNWYWx1ZVJlZiopCit7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPD0gMCkKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGpzQ29udGV4dCk7CisKKyAgICBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gc3RyaW5nKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGpzQ29udGV4
dCwgYXJndW1lbnRzWzBdLCAwKSk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlU3RyaW5nKGpzQ29u
dGV4dCwgc3RyaW5nLmdldCgpKTsKK30KKworc3RhdGljIHZvaWQgd2luZG93T2JqZWN0Q2xlYXJl
ZChXZWJLaXRTY3JpcHRXb3JsZCogd29ybGQsIFdlYktpdFdlYlBhZ2UqIHBhZ2UsIFdlYktpdEZy
YW1lKiBmcmFtZSwgZ3BvaW50ZXIpCit7CisgICAgSlNHbG9iYWxDb250ZXh0UmVmIGpzQ29udGV4
dCA9IHdlYmtpdF9mcmFtZV9nZXRfamF2YXNjcmlwdF9jb250ZXh0X2Zvcl9zY3JpcHRfd29ybGQo
ZnJhbWUsIHdvcmxkKTsKKyAgICBnX2Fzc2VydChqc0NvbnRleHQpOworICAgIEpTT2JqZWN0UmVm
IGdsb2JhbE9iamVjdCA9IEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChqc0NvbnRleHQpOworICAg
IGdfYXNzZXJ0KGdsb2JhbE9iamVjdCk7CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
ZnVuY3Rpb25OYW1lKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiZWNobyIp
KTsKKyAgICBKU09iamVjdFJlZiBmdW5jdGlvbiA9IEpTT2JqZWN0TWFrZUZ1bmN0aW9uV2l0aENh
bGxiYWNrKGpzQ29udGV4dCwgZnVuY3Rpb25OYW1lLmdldCgpLCBlY2hvQ2FsbGJhY2spOworICAg
IEpTT2JqZWN0U2V0UHJvcGVydHkoanNDb250ZXh0LCBnbG9iYWxPYmplY3QsIGZ1bmN0aW9uTmFt
ZS5nZXQoKSwgZnVuY3Rpb24sIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlUmVhZE9ubHksIDApOworfQorCitzdGF0aWMgV2ViS2l0V2ViUGFnZSog
Z2V0V2ViUGFnZShXZWJLaXRXZWJFeHRlbnNpb24qIGV4dGVuc2lvbiwgdWludDY0X3QgcGFnZUlE
LCBHREJ1c01ldGhvZEludm9jYXRpb24qIGludm9jYXRpb24pCit7CisgICAgV2ViS2l0V2ViUGFn
ZSogcGFnZSA9IHdlYmtpdF93ZWJfZXh0ZW5zaW9uX2dldF9wYWdlKGV4dGVuc2lvbiwgcGFnZUlE
KTsKKyAgICBpZiAoIXBhZ2UpIHsKKyAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3Jl
dHVybl9lcnJvcigKKyAgICAgICAgICAgIGludm9jYXRpb24sIEdfREJVU19FUlJPUiwgR19EQlVT
X0VSUk9SX0lOVkFMSURfQVJHUywKKyAgICAgICAgICAgICJJbnZhbGlkIHBhZ2UgSUQ6ICUiIEdf
R1VJTlQ2NF9GT1JNQVQsIHBhZ2VJRCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAg
IGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X3dlYl9wYWdlX2dldF9pZChwYWdlKSwgPT0sIHBhZ2VJ
RCk7CisgICAgcmV0dXJuIHBhZ2U7Cit9CisKK3N0YXRpYyB2b2lkIG1ldGhvZENhbGxDYWxsYmFj
ayhHREJ1c0Nvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIGNvbnN0IGNoYXIqIHNlbmRlciwgY29uc3Qg
Y2hhciogb2JqZWN0UGF0aCwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciog
bWV0aG9kTmFtZSwgR1ZhcmlhbnQqIHBhcmFtZXRlcnMsIEdEQnVzTWV0aG9kSW52b2NhdGlvbiog
aW52b2NhdGlvbiwgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgaWYgKGdfc3RyY21wMChpbnRl
cmZhY2VOYW1lLCAib3JnLndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9uVGVzdCIpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAiR2V0VGl0bGUiKSkgewor
ICAgICAgICB1aW50NjRfdCBwYWdlSUQ7CisgICAgICAgIGdfdmFyaWFudF9nZXQocGFyYW1ldGVy
cywgIih0KSIsICZwYWdlSUQpOworICAgICAgICBXZWJLaXRXZWJQYWdlKiBwYWdlID0gZ2V0V2Vi
UGFnZShXRUJLSVRfV0VCX0VYVEVOU0lPTih1c2VyRGF0YSksIHBhZ2VJRCwgaW52b2NhdGlvbik7
CisgICAgICAgIGlmICghcGFnZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBXZWJL
aXRET01Eb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3BhZ2VfZ2V0X2RvbV9kb2N1bWVu
dChwYWdlKTsKKyAgICAgICAgR093blB0cjxjaGFyPiB0aXRsZSh3ZWJraXRfZG9tX2RvY3VtZW50
X2dldF90aXRsZShkb2N1bWVudCkpOworICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9jYXRpb25f
cmV0dXJuX3ZhbHVlKGludm9jYXRpb24sIGdfdmFyaWFudF9uZXcoIihzKSIsIHRpdGxlLmdldCgp
KSk7CisgICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJSdW5KYXZhU2NyaXB0
SW5Jc29sYXRlZFdvcmxkIikpIHsKKyAgICAgICAgdWludDY0X3QgcGFnZUlEOworICAgICAgICBj
b25zdCBjaGFyKiBzY3JpcHQ7CisgICAgICAgIGdfdmFyaWFudF9nZXQocGFyYW1ldGVycywgIih0
JnMpIiwgJnBhZ2VJRCwgJnNjcmlwdCk7CisgICAgICAgIFdlYktpdFdlYlBhZ2UqIHBhZ2UgPSBn
ZXRXZWJQYWdlKFdFQktJVF9XRUJfRVhURU5TSU9OKHVzZXJEYXRhKSwgcGFnZUlELCBpbnZvY2F0
aW9uKTsKKyAgICAgICAgaWYgKCFwYWdlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IEdSZWZQdHI8V2ViS2l0U2NyaXB0V29ybGQ+IHdvcmxkID0gYWRvcHRHUmVmKHdlYmtpdF9zY3Jp
cHRfd29ybGRfbmV3KCkpOworICAgICAgICBnX2Fzc2VydCh3ZWJraXRfc2NyaXB0X3dvcmxkX2dl
dF9kZWZhdWx0KCkgIT0gd29ybGQuZ2V0KCkpOworICAgICAgICBXZWJLaXRGcmFtZSogZnJhbWUg
PSB3ZWJraXRfd2ViX3BhZ2VfZ2V0X21haW5fZnJhbWUocGFnZSk7CisgICAgICAgIEpTR2xvYmFs
Q29udGV4dFJlZiBqc0NvbnRleHQgPSB3ZWJraXRfZnJhbWVfZ2V0X2phdmFzY3JpcHRfY29udGV4
dF9mb3Jfc2NyaXB0X3dvcmxkKGZyYW1lLCB3b3JsZC5nZXQoKSk7CisgICAgICAgIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBqc1NjcmlwdChBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoc2NyaXB0KSk7CisgICAgICAgIEpTRXZhbHVhdGVTY3JpcHQoanNDb250ZXh0LCBqc1Nj
cmlwdC5nZXQoKSwgMCwgMCwgMCwgMCk7CisgICAgICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlv
bl9yZXR1cm5fdmFsdWUoaW52b2NhdGlvbiwgMCk7CisgICAgfSBlbHNlIGlmICghZ19zdHJjbXAw
KG1ldGhvZE5hbWUsICJBYm9ydFByb2Nlc3MiKSkKKyAgICAgICAgYWJvcnQoKTsKK30KKworc3Rh
dGljIGNvbnN0IEdEQnVzSW50ZXJmYWNlVlRhYmxlIGludGVyZmFjZVZpcnR1YWxUYWJsZSA9IHsK
KyAgICBtZXRob2RDYWxsQ2FsbGJhY2ssIDAsIDAsIHsgMCwgfQorfTsKKworc3RhdGljIHZvaWQg
YnVzQWNxdWlyZWRDYWxsYmFjayhHREJ1c0Nvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIGNvbnN0IGNo
YXIqIG5hbWUsIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIHN0YXRpYyBHREJ1c05vZGVJbmZv
KiBpbnRyb3NwZWN0aW9uRGF0YSA9IDA7CisgICAgaWYgKCFpbnRyb3NwZWN0aW9uRGF0YSkKKyAg
ICAgICAgaW50cm9zcGVjdGlvbkRhdGEgPSBnX2RidXNfbm9kZV9pbmZvX25ld19mb3JfeG1sKGlu
dHJvc3BlY3Rpb25YTUwsIDApOworCisgICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAgIHVu
c2lnbmVkIHJlZ2lzdHJhdGlvbklEID0gZ19kYnVzX2Nvbm5lY3Rpb25fcmVnaXN0ZXJfb2JqZWN0
KAorICAgICAgICBjb25uZWN0aW9uLAorICAgICAgICAiL29yZy93ZWJraXQvZ3RrL1dlYkV4dGVu
c2lvblRlc3QiLAorICAgICAgICBpbnRyb3NwZWN0aW9uRGF0YS0+aW50ZXJmYWNlc1swXSwKKyAg
ICAgICAgJmludGVyZmFjZVZpcnR1YWxUYWJsZSwKKyAgICAgICAgZ19vYmplY3RfcmVmKHVzZXJE
YXRhKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGdfb2JqZWN0X3VucmVm
KSwKKyAgICAgICAgJmVycm9yLm91dFB0cigpKTsKKyAgICBpZiAoIXJlZ2lzdHJhdGlvbklEKQor
ICAgICAgICBnX3dhcm5pbmcoIkZhaWxlZCB0byByZWdpc3RlciBvYmplY3Q6ICVzXG4iLCBlcnJv
ci0+bWVzc2FnZSk7CisKKyAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVCh1c2VyRGF0YSks
ICJkYnVzLWNvbm5lY3Rpb24iLCBjb25uZWN0aW9uKTsKKyAgICB3aGlsZSAoZGVsYXllZFNpZ25h
bHNRdWV1ZS5zaXplKCkpIHsKKyAgICAgICAgT3duUHRyPERlbGF5ZWRTaWduYWw+IGRlbGF5ZWRT
aWduYWwgPSBkZWxheWVkU2lnbmFsc1F1ZXVlLnRha2VGaXJzdCgpOworICAgICAgICBzd2l0Y2gg
KGRlbGF5ZWRTaWduYWwtPnR5cGUpIHsKKyAgICAgICAgY2FzZSBEb2N1bWVudExvYWRlZFNpZ25h
bDoKKyAgICAgICAgICAgIGVtaXREb2N1bWVudExvYWRlZChjb25uZWN0aW9uKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFVSSUNoYW5nZWRTaWduYWw6CisgICAgICAgICAgICBl
bWl0VVJJQ2hhbmdlZChjb25uZWN0aW9uLCBkZWxheWVkU2lnbmFsLT51cmkuZGF0YSgpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCitleHRlcm4gIkMiIHZvaWQg
d2Via2l0X3dlYl9leHRlbnNpb25faW5pdGlhbGl6ZShXZWJLaXRXZWJFeHRlbnNpb24qIGV4dGVu
c2lvbikKK3sKKyAgICBnX3NpZ25hbF9jb25uZWN0KGV4dGVuc2lvbiwgInBhZ2UtY3JlYXRlZCIs
IEdfQ0FMTEJBQ0socGFnZUNyZWF0ZWRDYWxsYmFjayksIGV4dGVuc2lvbik7CisgICAgZ19zaWdu
YWxfY29ubmVjdCh3ZWJraXRfc2NyaXB0X3dvcmxkX2dldF9kZWZhdWx0KCksICJ3aW5kb3ctb2Jq
ZWN0LWNsZWFyZWQiLCBHX0NBTExCQUNLKHdpbmRvd09iamVjdENsZWFyZWQpLCAwKTsKKworICAg
IGdfYnVzX293bl9uYW1lKAorICAgICAgICBHX0JVU19UWVBFX1NFU1NJT04sCisgICAgICAgICJv
cmcud2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwKKyAgICAgICAgR19CVVNfTkFNRV9PV05F
Ul9GTEFHU19OT05FLAorICAgICAgICBidXNBY3F1aXJlZENhbGxiYWNrLAorICAgICAgICAwLCAw
LAorICAgICAgICBnX29iamVjdF9yZWYoZXh0ZW5zaW9uKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8
R0Rlc3Ryb3lOb3RpZnk+KGdfb2JqZWN0X3VucmVmKSk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvV2ViUHJvY2Vzc1Rlc3QuY3BwIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1dlYlByb2Nlc3NUZXN0LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzAwODM3Ci0tLSAvZGV2L251bGwKKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1dlYlByb2Nlc3NUZXN0LmNwcApA
QCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJZ2FsaWEgUy5MLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Rlc3QuaCIKKworI2luY2x1
ZGUgPGdpby9naW8uaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisKK3R5cGVk
ZWYgSGFzaE1hcDxTdHJpbmcsIHN0ZDo6ZnVuY3Rpb248UGFzc093blB0cjxXZWJQcm9jZXNzVGVz
dD4gKCk+PiBUZXN0c01hcDsKK3N0YXRpYyBUZXN0c01hcCYgdGVzdHNNYXAoKQoreworICAgIERF
RklORV9TVEFUSUNfTE9DQUwoVGVzdHNNYXAsIHNfdGVzdHNNYXAsICgpKTsKKyAgICByZXR1cm4g
c190ZXN0c01hcDsKK30KKwordm9pZCBXZWJQcm9jZXNzVGVzdDo6YWRkKGNvbnN0IFN0cmluZyYg
dGVzdE5hbWUsIHN0ZDo6ZnVuY3Rpb248UGFzc093blB0cjxXZWJQcm9jZXNzVGVzdD4gKCk+IGNs
b3N1cmUpCit7CisgICAgdGVzdHNNYXAoKS5hZGQodGVzdE5hbWUsIHN0ZDo6Zm9yd2FyZDxzdGQ6
OmZ1bmN0aW9uPFBhc3NPd25QdHI8V2ViUHJvY2Vzc1Rlc3Q+ICgpPj4oY2xvc3VyZSkpOworfQor
CitQYXNzT3duUHRyPFdlYlByb2Nlc3NUZXN0PiBXZWJQcm9jZXNzVGVzdDo6Y3JlYXRlKGNvbnN0
IFN0cmluZyYgdGVzdE5hbWUpCit7CisgICAgZ19hc3NlcnQodGVzdHNNYXAoKS5jb250YWlucyh0
ZXN0TmFtZSkpOworICAgIHJldHVybiB0ZXN0c01hcCgpLmdldCh0ZXN0TmFtZSkoKTsKK30KKwor
c3RhdGljIGNvbnN0IGNoYXIgaW50cm9zcGVjdGlvblhNTFtdID0KKyAgICAiPG5vZGU+IgorICAg
ICIgPGludGVyZmFjZSBuYW1lPSdvcmcud2Via2l0Lmd0ay5XZWJQcm9jZXNzVGVzdCc+IgorICAg
ICIgIDxtZXRob2QgbmFtZT0nUnVuVGVzdCc+IgorICAgICIgICA8YXJnIHR5cGU9J3MnIG5hbWU9
J3BhdGgnIGRpcmVjdGlvbj0naW4nLz4iCisgICAgIiAgIDxhcmcgdHlwZT0nYXtzdn0nIG5hbWU9
J2FyZ3MnIGRpcmVjdGlvbj0naW4nLz4iCisgICAgIiAgIDxhcmcgdHlwZT0nYicgbmFtZT0ncmVz
dWx0JyBkaXJlY3Rpb249J291dCcvPiIKKyAgICAiICA8L21ldGhvZD4iCisgICAgIiA8L2ludGVy
ZmFjZT4iCisgICAgIjwvbm9kZT4iOworCitzdGF0aWMgdm9pZCBtZXRob2RDYWxsQ2FsbGJhY2so
R0RCdXNDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBjb25zdCBjaGFyKiBzZW5kZXIsIGNvbnN0IGNo
YXIqIG9iamVjdFBhdGgsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG1l
dGhvZE5hbWUsIEdWYXJpYW50KiBwYXJhbWV0ZXJzLCBHREJ1c01ldGhvZEludm9jYXRpb24qIGlu
dm9jYXRpb24sIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIGlmIChnX3N0cmNtcDAoaW50ZXJm
YWNlTmFtZSwgIm9yZy53ZWJraXQuZ3RrLldlYlByb2Nlc3NUZXN0IikpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJSdW5UZXN0IikpIHsKKyAgICAg
ICAgY29uc3QgY2hhciogdGVzdFBhdGg7CisgICAgICAgIEdWYXJpYW50KiBhcmdzOworICAgICAg
ICBnX3ZhcmlhbnRfZ2V0KHBhcmFtZXRlcnMsICIoJnNAYXtzdn0pIiwgJnRlc3RQYXRoLCAmYXJn
cyk7CisgICAgICAgIE93blB0cjxXZWJQcm9jZXNzVGVzdD4gdGVzdCA9IFdlYlByb2Nlc3NUZXN0
OjpjcmVhdGUoU3RyaW5nOjpmcm9tVVRGOCh0ZXN0UGF0aCkpOworICAgICAgICBib29sIHJlc3Vs
dCA9IHRlc3QtPnJ1blRlc3QoZ19zdHJyc3RyKHRlc3RQYXRoLCAiLyIpICsgMSwgV0VCS0lUX1dF
Ql9FWFRFTlNJT04odXNlckRhdGEpLCBhcmdzKTsKKyAgICAgICAgZ192YXJpYW50X3VucmVmKGFy
Z3MpOworCisgICAgICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUoaW52
b2NhdGlvbiwgZ192YXJpYW50X25ldygiKGIpIiwgcmVzdWx0KSk7CisgICAgfSBlbHNlCisgICAg
ICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Cit9CisKK3N0YXRpYyBjb25zdCBHREJ1c0ludGVy
ZmFjZVZUYWJsZSBpbnRlcmZhY2VWaXJ0dWFsVGFibGUgPSB7CisgICAgbWV0aG9kQ2FsbENhbGxi
YWNrLCAwLCAwLCB7IDAsIH0KK307CisKK3N0YXRpYyB2b2lkIGJ1c0FjcXVpcmVkQ2FsbGJhY2so
R0RCdXNDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBjb25zdCBjaGFyKiBuYW1lLCBncG9pbnRlciB1
c2VyRGF0YSkKK3sKKyAgICBzdGF0aWMgR0RCdXNOb2RlSW5mbyogaW50cm9zcGVjdGlvbkRhdGEg
PSAwOworICAgIGlmICghaW50cm9zcGVjdGlvbkRhdGEpCisgICAgICAgIGludHJvc3BlY3Rpb25E
YXRhID0gZ19kYnVzX25vZGVfaW5mb19uZXdfZm9yX3htbChpbnRyb3NwZWN0aW9uWE1MLCAwKTsK
KworICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICB1bnNpZ25lZCByZWdpc3RyYXRpb25J
RCA9IGdfZGJ1c19jb25uZWN0aW9uX3JlZ2lzdGVyX29iamVjdCgKKyAgICAgICAgY29ubmVjdGlv
biwKKyAgICAgICAgIi9vcmcvd2Via2l0L2d0ay9XZWJQcm9jZXNzVGVzdCIsCisgICAgICAgIGlu
dHJvc3BlY3Rpb25EYXRhLT5pbnRlcmZhY2VzWzBdLAorICAgICAgICAmaW50ZXJmYWNlVmlydHVh
bFRhYmxlLAorICAgICAgICBnX29iamVjdF9yZWYodXNlckRhdGEpLAorICAgICAgICBzdGF0aWNf
Y2FzdDxHRGVzdHJveU5vdGlmeT4oZ19vYmplY3RfdW5yZWYpLAorICAgICAgICAmZXJyb3Iub3V0
UHRyKCkpOworICAgIGlmICghcmVnaXN0cmF0aW9uSUQpCisgICAgICAgIGdfd2FybmluZygiRmFp
bGVkIHRvIHJlZ2lzdGVyIG9iamVjdDogJXNcbiIsIGVycm9yLT5tZXNzYWdlKTsKK30KKworZXh0
ZXJuICJDIiB2b2lkIHdlYmtpdF93ZWJfZXh0ZW5zaW9uX2luaXRpYWxpemUoV2ViS2l0V2ViRXh0
ZW5zaW9uKiBleHRlbnNpb24pCit7CisgICAgZ19idXNfb3duX25hbWUoCisgICAgICAgIEdfQlVT
X1RZUEVfU0VTU0lPTiwKKyAgICAgICAgIm9yZy53ZWJraXQuZ3RrLldlYlByb2Nlc3NUZXN0IiwK
KyAgICAgICAgR19CVVNfTkFNRV9PV05FUl9GTEFHU19OT05FLAorICAgICAgICBidXNBY3F1aXJl
ZENhbGxiYWNrLAorICAgICAgICAwLCAwLAorICAgICAgICBnX29iamVjdF9yZWYoZXh0ZW5zaW9u
KSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGdfb2JqZWN0X3VucmVmKSk7
Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvV2Vi
UHJvY2Vzc1Rlc3QuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9XZWJQ
cm9jZXNzVGVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzZWVkZDAK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsv
V2ViUHJvY2Vzc1Rlc3QuaApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdC13ZWItZXh0ZW5zaW9uLmg+
CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdIYXNoLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK2NsYXNzIFdlYlBy
b2Nlc3NUZXN0IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5XZWJQcm9jZXNzVGVzdCgpIHsgfQor
ICAgIHZpcnR1YWwgYm9vbCBydW5UZXN0KGNvbnN0IGNoYXIqIHRlc3ROYW1lLCBXZWJLaXRXZWJF
eHRlbnNpb24qLCBHVmFyaWFudCogYXJncykgPSAwOworCisgICAgc3RhdGljIHZvaWQgYWRkKGNv
bnN0IFN0cmluZyYgdGVzdE5hbWUsIHN0ZDo6ZnVuY3Rpb248UGFzc093blB0cjxXZWJQcm9jZXNz
VGVzdD4gKCk+KTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxXZWJQcm9jZXNzVGVzdD4gY3JlYXRl
KGNvbnN0IFN0cmluZyYgdGVzdE5hbWUpOworfTsKKworI2RlZmluZSBSRUdJU1RFUl9URVNUKENs
YXNzTmFtZSwgVGVzdE5hbWUpIFwKKyAgICBXZWJQcm9jZXNzVGVzdDo6YWRkKFN0cmluZzo6ZnJv
bVVURjgoVGVzdE5hbWUpLCBDbGFzc05hbWU6OmNyZWF0ZSkKKwpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL3Jlc291cmNlcy9saW5rLXRpdGxlLmpzIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL3Jlc291cmNlcy9saW5rLXRpdGxl
LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjODI0ZGEKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvcmVzb3VyY2Vz
L2xpbmstdGl0bGUuanMKQEAgLTAsMCArMSBAQAord2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdXZWJLaXRMaW5rJykudGl0bGU7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdDJHdGsvcmVzb3VyY2VzL3Rlc3QtY2VydC5wZW0gYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvcmVzb3VyY2VzL3Rlc3QtY2VydC5wZW0KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM0MzAxZgotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9yZXNvdXJjZXMvdGVzdC1jZXJ0LnBl
bQpAQCAtMCwwICsxLDEzIEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUI5akND
QVYrZ0F3SUJBZ0lKQUxldVhCbyt2d3o5TUEwR0NTcUdTSWIzRFFFQkJRVUFNQlF4RWpBUUJnTlYK
K0JBTU1DVEV5Tnk0d0xqQXVNVEFlRncweE1qQTNNVEl4TWpRNE1qUmFGdzB5TWpBM01UQXhNalE0
TWpSYU1CUXgKK0VqQVFCZ05WQkFNTUNURXlOeTR3TGpBdU1UQ0JuekFOQmdrcWhraUc5dzBCQVFF
RkFBT0JqUUF3Z1lrQ2dZRUEKKzBUVXpPUXhIQklLREQybWt1cSt0VTkybVF2RFpnNzNCMEcrTmhy
MlQyRzZNYmNMcUl3amcxUVl0QlpXSjgzdFoKK3hNTUVmaXdlSExGODVaOW9oYXZBZ3hKbEtHN1lt
dlpPNzlLa0ZwbWpWMlc1Q1ZSbTBlWU1QbnpteE5Db2FZcW8KK0RMbDB6c0g2S1pPTFBLdS9mWDRl
RFg5WHBBUDFmODNoV0IxVUZCbUhLTjhDQXdFQUFhTlFNRTR3SFFZRFZSME8KK0JCWUVGREh2NVpR
MUJkbWh6VHNEVUVvWTU1RVh5VWRLTUI4R0ExVWRJd1FZTUJhQUZESHY1WlExQmRtaHpUc0QKK1VF
b1k1NUVYeVVkS01Bd0dBMVVkRXdRRk1BTUJBZjh3RFFZSktvWklodmNOQVFFRkJRQURnWUVBaDNx
TUJ4N3YKK2pTb2RNZjNPeVRxVExFN2RlTG5tbkNlQlZwZ3p4UlpFb2l6Y0dxWWNqaXFPMjdpNU41
WjZLVlFzbklUbkxpeUMKK21VdHVSNUtuRjY5dVRLVXc0bS91Z1plNXdoamlnNU1xMmw0MTBLVks2
RWVHNHRkTGxmWFIrd2k0VTVLNEtqUDYKK3A0bmNoUVVYTGEyemNiSm4rVkJleEpuNi85d2RocitE
VUdZPQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL3Jlc291cmNlcy90ZXN0LWtleS5wZW0gYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvcmVzb3VyY2VzL3Rlc3Qta2V5LnBlbQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDM2MjIyCi0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL3Jlc291cmNlcy90ZXN0LWtl
eS5wZW0KQEAgLTAsMCArMSwxNiBAQAorLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCitNSUlD
ZHdJQkFEQU5CZ2txaGtpRzl3MEJBUUVGQUFTQ0FtRXdnZ0pkQWdFQUFvR0JBTkUxTXprTVJ3U0Nn
dzlwCitwTHF2clZQZHBrTHcyWU85d2RCdmpZYTlrOWh1akczQzZpTUk0TlVHTFFXVmlmTjdXY1RE
Qkg0c0hoeXhmT1dmCithSVdyd0lNU1pTaHUySnIyVHUvU3BCYVpvMWRsdVFsVVp0SG1ERDU4NXNU
UXFHbUtxQXk1ZE03QitpbVRpenlyCit2MzErSGcxL1Y2UUQ5WC9ONFZnZFZCUVpoeWpmQWdNQkFB
RUNnWUIyUXdPVXNSc0lNcHJSd0o5dEpOZnZPN0c3Cit6NWkxL3pPcmx4UEM0akhNUEJuSUJsSUN3
Z2NPaExJNG9PTGRyNUg4UjEybjBWcW9UN0RSd1AzOTZpd2xKaXBGCitpTzFoZURNbi84ejhMUEd3
a0NLLytjazA0ck1Ea3N4V0lkTXdZS0JYdDlhaG5KL3hSTHpRMS8zQUppQUdub2U1CisvUUxYUXdl
b2ZkNG1tZnNqS1FKQkFPMkN3VDd1TVA2bk1qWGd0Vk1KcTVRUDhVYmVDUzFzRU9QSkpiSHVEeEpC
CisvSGVQUUhCanE0a3pHNkNMNG9PN1QrNWZEdjRnK2ZJSUh6dVhlclowaW1zQ1FRRGhmbWlUSWM5
T3VjRUlmZzYvCittczBKaUtTbVdjK3FvaU9DdHJJTHVRdkZvTndKUmNpUUFOcWVKczZ3cGFEdmV2
U1V2QkxHZkcvN2IzSHZhRTVYCitpcUJkQWtCRVFJdnAycWNIdHVKTjYwb1FGN3BQclJrbnhVeWIy
ZThzbGpRWDRwSkFLK2d5TDE5VUxNQXhpQmRMCitWb2Q4VllxTnRKRnBZKzZQcDlmWjF4anpiNkFM
QWtFQTRKenJEQXcwbFFYQSszV2R1VXc0aXhPYWRyMmxkeUcwCiszNktlYmNEd3NmWk8xOG0wUTRV
bVB6MEd5N3pnTjB3eHp1b2NoYXcwVzYraVBVaVlLT2xFWFFKQkFNV1FyUGx1Citycmlub1pTMmY4
ZG9KOUJOTlVhK1JOcE11ZzZVWGM1NXFvVUpseWlYRWgrdHU0QWFNT3R4dUdJeUMwc0FjdXc2CitY
ZEFQVlBYS2Q3TW5lNzA9CistLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvcmVzb3VyY2VzL3dlYmtpdDJndGst
dGVzdHMuZ3Jlc291cmNlLnhtbCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0
ay9yZXNvdXJjZXMvd2Via2l0Mmd0ay10ZXN0cy5ncmVzb3VyY2UueG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzODg2ODQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvcmVzb3VyY2VzL3dlYmtpdDJndGstdGVzdHMu
Z3Jlc291cmNlLnhtbApAQCAtMCwwICsxLDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rp
bmc9IlVURi04Ij8+Cis8Z3Jlc291cmNlcz4KKyAgPGdyZXNvdXJjZSBwcmVmaXg9Ii9vcmcvd2Vi
a2l0L3dlYmtpdDJndGsvdGVzdHMvIj4KKyAgICA8ZmlsZSBhbGlhcz0ibGluay10aXRsZS5qcyI+
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL3Jlc291cmNlcy9saW5rLXRpdGxl
LmpzPC9maWxlPgorICA8L2dyZXNvdXJjZT4KKzwvZ3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Jlc291cmNlcy9ibGFuay5pY28gYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9yZXNvdXJjZXMvYmxhbmsuaWNvCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmVhODQ4Yjk5MTZlNTkwODQ0MTNmYzFlN2EwOTBkZWJmNWY0OTE0ZGIKR0lUIGJp
bmFyeSBwYXRjaApsaXRlcmFsIDE5OApwY21aUXpVPDUofDBWWGlMZnF7V1I0MlUmPVNPQUM+ZkVY
bD8zO2g1OEFEMHdlI1F9UlkxVmpKOwoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvcmVzb3VyY2VzL3Rlc3QuaHRt
bCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Jlc291cmNlcy90ZXN0Lmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThmN2Q0ZgotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Jlc291cmNlcy90
ZXN0Lmh0bWwKQEAgLTAsMCArMSw2IEBACis8aHRtbD4KKzxoZWFkPjx0aXRsZT50ZXN0PC90aXRs
ZT48L2hlYWQ+Cis8Ym9keT50ZXN0PC9ib2R5PgorPC9odG1sPj48L2hlYWQ+Cis8Ym9keT50ZXN0
PC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRHdGsvcmVzb3VyY2VzL3Rlc3Qub2dnIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRHdGsvcmVzb3VyY2VzL3Rlc3Qub2dnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdmM2EzYjljNWQ2NDdjNzJh
MTRkM2I0OTZjYzYyNmQ0MTJmOGIwMGYKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDMwMTMxCnpj
bWVGWmNVVil8X0F0Q3A4WCpLc0FpKz57TE1SM1pQTilLd05rUzRzSDkmJFBtUHRZfUd6RyptaihT
NWlndW5tLQp6UXEmMmQyb1c0V3omPHgxQVNmYjg1JGorYlklQENKSVE1UzJMRmVCMGUpcyE1QDkl
cV8tfUMrVj9xX0c4VURuP0YKej57WlRNZCEybzxacClUdmZCPTdtUjVDZXBBdURFTj0lSjwxJlRX
fkJyMG9rODJ5V1pMMXI4WT5mS05sfjdKQnxHCnpFY0FybjVfakwwSEFJaGh7fUdUTU1wXjtgTlJy
WiglaHpSWXB7NkQmViYwRVc0V0BjQW5FfWlkJXolYUFBb0tAZAp6UzU4bjIxaDg8OFhCYyUqSENg
JFBmQj1CWiQ8Xlh1Vno2c2RNTHFxcT5JJVVeWmpmMTZUflJubGlQTCV4e1dHRVoKeiNGR0kpMFR0
Yn1xflM/JEA+c3dZJUNlRzdUfGlRVnwxcWtHQ1VQI293RXJpVXhVSjNJJV8mPlFUJUVEenYxb1hx
CnpmRipGcUNxKnFKM2JqSzQxeF5td1hBVjBZSkRpRGdZdGlONHlvUlp7Vk9+IWc0QEx3JlpEfVk4
ZGA5bWM9YV9rUAp6VWs/Zk1vUXtiKmFSSVl3QEFrMlBaeDg+S243Jl5KNn19ZV4jd01QPyE3ZEUx
YzVTWkNnb3BhREVHa2dKJUxIcjcKek5XcTw/RTFtWE5DIUUmKHo9KlcrbyQlJkdpXjljbCpzKkUt
JlYoQn5jaWg7eUZTYV49IXw4cG9yfUg8PT01UDhyCnpVcnM2YkVCPjxZbzFZaXJgPXdKTXBtUGtV
ZGchWEIrM0Z0ej0jaEJeWjNxeSpmRCk9e0luQX1hQS1GailgOXhBKAp6dWt2X3IrTGJRR2xgaX55
NUNGai0zcWhBdSt4LThFaUxxNCl8OXhhQmh1cmBSI150MzlgJTQqNHllT3dqbkdCUW4KejcjOz5O
Tzw3VGwhQXpnRStrR3g9VWpAZ3RTPV5DfHUmWnl2N1g2YjUzdUZnPzwhTHtkVkx0KzZCZyRoayh8
NyYkCnopaTxfPi0rKW9FZlJYPW0kYlFjK0BJb0FwQnZ2Sj51LT5LZV9oP2JVISYyKDhMSEd8ZCEy
cyZ8TjdVTiErOD9oNQp6U2t5ayZ3VVgqNGB3QiZNJWcoZWAqUyk3Oz5YXisjbjNrQFdZWCleUzxG
KHR6ZzdMTFlBOTl+cil8c0BvVVdlOyEKenpDQ08pV0Z2PitsQ0lhOXdCRDQhZVBoUktwUn1BSSFN
VmJVeEBBM1FMPzZjY2khRTk9QTBGIXF4RFdSenlqN1FTCnojJmk+JGAhKVhYY1VNZ3A+aSZ+YFNU
Tm4+dnlgRERJbjtlNjd6TjNwKzJQPlF0Uz5BTT5PNjtDODwhVEJASXpYMgp6Zzs2JWtuekN9PHVi
Y2AlOV5wTH58MSl7ZCR7KUQ2djBVU0puU09IQT5rNEJiWH1kVFVfYEtzSEFxZWpZYjF9bWcKej1I
bFg+Q3I3dVIyb1IoK15+Xn0hbjx9RDBUJD9eZjZpaWZWZD9fMWFeSWt7X3N4dlJVOSlxUmctd0Y1
MT1eQW0jCnojSnxPQnVrOWwobyM4bSk8cV8/QFN9WVE7LTxjTUJYdmdoU2BJfX5VZH47KnBII2Rx
dVUwbT49alApPGMwa0Z7SQp6eV9kLWZoMVQ9WjtvSnowPT80UDtRKnRzJG0mKXUlJUE3KkdvV2lk
JnVLd1YmP25qPnFEXyoyZWNyPHlfMWJONCMKemJ3YWU/cmIqdn5OcFpzVCZWLXgyMl4mdUJpfHpl
T1VfT1k9SCNjX3RvOCZCcjJyWiFHcGBhWX56YT5YVUZMfmYhCno7dXVgKzZrRzF7Uz1FLXArU1p6
KlBoMGk0fEJ4Snw9Mio0bm18RjkjeGBiWD5sfmg9M0lIT08hZUIkfXB8MkY8aAp6YUBKLSMhNFp9
bVVaJkgoTnNpSWVKX3dla0U9S3J8QUooe2YwIUM7U1p9R25xMDAzaHRLSkApX0JyP2lsST84dUMK
eiUwbnoje2VQQWl4T0xobWU5e0wtWSRYNlQwNmMxSnA0d3chc1ZFSTdXR2tgMzFOTVUoMURfc2wq
cit7Rj5jfGclCno9QDMwaUs9bzlRMmpgUWY5IVFneVkhPyszeDVvP0U5PSRfUjR2JCsqO0t2Pm8p
WXx9eU9PU215KG1vVWtPV3J+Vgp6byZAMH09JklGJXd0JDBpIWlRekducXxmTlEyZHt6QEkqZTVD
Xi1IIzNfUV88MiU3TnVZYzY7ZXFjQE1gMThiODEKemRINjVwaXU4cm57bzduRHBLejhhe0NfXnZ7
fmg3flYmSzJVMEw8YyQxXmx6LSlIfUUlUlE/YitAUV90YjRTd2FMCnppaT5APFlQVzVlKXR0bjcp
dUxMSCQkdkAqdFlDbGUqfVpodHFHcj1scEc4TWF1SGAyRSVNdHxDJil8bG1GdEF7dQp6O29IN3tA
LT0pVHVmblhGTygqaF81dndOaWxLT3EqaFg0QkpRfjs8VDZRQlpDbXMkVjFydmB4fjBSSDlpdjlO
dDEKekN7S1daRGsxaSQyPnw1QHBEcTJiaHh6fHJgeVVmUkRtbmxNXmIrZklgendmJnhMOCY+ISVQ
K24halpkZVN0TXV5Cno3X280N2MwU0o1Q1VsPjhYRnghTXhwZE4lPnBxYz57SHZPaF51cm05JmBF
QXQwJkR+byh0T303QCN3ZG9ISmVgaAp6NW5lWjRxZmJKPj5JRnRTZEk5WnokYEZReVAmcGd8czd9
Q20tQG9lZFhMYEJAd3gwfV9HWjxIWDxWS1JocXM1eUoKekooTl5eVGQxZWtIWEZfXmhiT3hCVVBa
eWlvd0R7eylqcmBRXyRkck9qVztjPmVOd25FZzI4YVk0MkdRYTM1T3dYCnpwIUxleT0yaW8mTm0l
YXpyKn57eHRYYC15en1mfHwwM19hWXFjVEMyMW91MDhmYEpyJERCSWBeaEclQ194TCpPVgp6MGQ9
ITdBcj4+WVEwaWc7RmxVNFMpcmJ1b1kzYWgrZ2BhKX1OVlopeHBvViF0RC1aRSghcEIqMWFQeyZx
aj0mKjQKekQkMzJaM0NENEJ1OGQqfW5pYHxMTE9oelBxUjxZTjxzcSVxIzs3UClHKkIoXmhrcGBt
ZW5BQHdgflh7ZmFUU1d1CnpmTnp+UkEpWmVUWj98LTRxUUtAJkQ9QldsIztHWHhnemU7cmtkYlAq
WmRwQDI0MHJmb1IzS2J1MFVJMXlGaTJ4WAp6NmxlYk1jRyYobjApcyQrXiNSK08pQ2lgZj1zbWow
eiZOKSt1QXxGZmJPKUM9ZXxCXmtZX30kdEgtNHo4VTNLaioKej8wPElqRkMxclhmfm0yOURDYTgr
Ry1APiVhQnlpN01wWFdTeT15USRAOSRsfXxCVzU7K1k4OGxlJTEpJWVNZkBMCno9Pl8lOEZhdXkr
SXNrNFJAKlF+eF5fQG1vKElGUH1XdTdQMjZ9R3VCNHZocWt6JXtAMHxIPU40M2h0dkt7SXheegp6
KTVgektXI0ltTypZZHlqRmFMayRXfkN8Wkp1IWVYbVhCbmA8YHNMbElVT09GVT40aFVTcHV2bk9t
KCl9YkthPzwKekpTMnE3KEZWfCtFMzJmTWM4PU47K3RmSEVQNCU/QzdHUDR9U1J2SzhfQ0EwSzFs
UGUhayMwMHxYc1ZERmRHdTIxCnpRWE9FYnJOREpALVhUNDM5bFZxak0jdmVzdTUqeCpRcH1eKlpD
R2VjWTQ+JH55Z2pzWVN7bTJaPEk8b2xVI00mQQp6blcwcmdjQDJARzthcUpWYkxlTUVUJHxeJih1
MD0kemJ1WFJmUHF0QlVUfTtyWlhKQHNqQU5SaEUldW5NKmdsMl4KenRrd1IyPHhGOE92a19hJTgl
ITUzUmxPKDc4RiZ1fnYpPDRHaGJ7MGBSM2x8TyV4MldRZ2BIUjxfSSgyekhaTmhDCnoqfkk7YHAr
MnVYPk40RDhwI2glR3hvUFN7NUJoPjc5TWJ4KWhOZzsmc1B9IWI/QGVUUUU0cEIqVEVlX3I1ZTRf
bAp6aHYpY1VKSHJVVSFFP05DMiFYZShCIyFCYWhLaDArdUlhQV5jcGBaR3paJjMpOzkpLVdmSE1t
d2M7eTFATGdzemkKenh7IW01QUpQdkVQNEdsOzwlZzw7aVF3WDI8R3I3I0JGZ1BVNXF8dDQ3b0w4
T1pYTj4+LVh+VGUpez94IVNucCpQCnota31qcEk9ZzQyJEYtVDRnTS1fSF9fan1VamtDY2Y0bjMw
NDFTPFAtYUxBRHl0U2hFOVUrZE9YZVh4cGlyOCl8KQp6YVFEcDhkYWV6NEVhRl9Fej5uLTQwRlhw
NEQ9ZGtYb3M5P25FSX15KDtMUHcjRjdqQmM8cWkhLVUzIUBSdkxrKX4KenUre0chMzRkOD0wNHo4
WDdQUWNZVjZIbjxIY0JXfDRebG5yWlJ1eyFOWXg7XlVAc1VScEIwPXR0eSslVUk2azxeCnpnb0VW
fWF3UFVGJGtnQmVlITtTUHVrITI7PiFMLV5TbnY9NEVDcUEkcXdPWjMoZXlQQj1VQEUtT289dVF1
QVR2Rwp6O2BgPjY7MT5We1E3V31zYE5UaFApZnlJdSVOSy0lTUZgOz1mWmw2SzdKI3RXNTFZfTJH
OFgmNj4lbSZ+eldAODEKelU5ZkJJQz1ZYHU4PlB8aiglKUA9eDk0NUt5V0RwPD8rKDF2eXhSKzM5
fXk/UU4oUGZYczlrLSMqS19UPntrQnNPCnp7U20pX3FGNiRUNXxfVG8/XjZ9fXotZkk/SjYkUUJz
NllNVT0qeTF6c1pDZEgkTVAhNkh7I0Z5Jjl6Z3NRQXJ3NAp6YWwjK0JsZS1mYlV3ejRMb0hDJERs
SCszWUtnZXZeQn1QYyEhOVR5cFRDTk9xdSs1JTNjYHdBSj00bG4od0dyaEAKemFkZXdPQCR2VVp3
YUdSLWlwWGl9PVhiQlR5K0xMXntnSFItKnhSVzckZmNXJWRiI0tCYzA3cH0jdjl+Ylcoe0VhCnpl
KjBZZWZhVEVXYHFSK1kwVDBjKXpRI1gyYFBOekI0SnUwKGIlWm1zMStBKSZ7LUUmKHtKLW9KcjtQ
V31FfXYrNwp6PkJVVmptfj1eOGBCT1FFSWshOHA/akVTMDlEfWt5UFQtPGJJQElsdldyeSRIYmct
P3A3UztEe3t8RkVHTm8+MjcKeksxSit7MEApdShQfDcxRSQweD9SV3JrTGNNKmdAWU5aZndDYU1A
OHJaWk0lRUl6e1AzYj0+VnljJn0mVHd5ZkFaCnpYVFV0OG4qUTJmelcqMzhYWFUmKjF0MG1geH0/
fnhDRlghKHkwQUNMSzt7a3Y2X3NfbU0zI1AkXjRzTHJRdUw2PAp6VDxXNGNrbGFrOHZLTihGRF9n
a3R4cGVmOWpieDV1KnQjaU1WTlo5UiQ7JF9jMj9jTCFnQGJAQVFYaXZHNTB4OHMKejBTb0smNjZE
fCFoWTR3SnBHcWE9UCl9NHQlfkQrXk4+XmBBdSMkd3dwZyEqa3k7JFp7PFBRbT8tY0R0WGw+PVRh
CnpMeGA/QXtoXyZMPD1OIXt0aSRePFZsJnEteDZoN1hzfiUycVp8YGNYSFJiWEhGc05pQlZVYUVx
Uy17ST48Mz96bQp6SEY8PUQ+XyoxLVgmP3J1QSVaXyFZM2g7TlBaMDheYWxrdExeRD44SXlfKGdC
dTxsbHxQZURRPSlCbzBgb24jY20KejFMTjJuc3NkdH1RU2cqRFNReEVlVHVpVWJ3cF5NNjBjOSF4
WXBAa2tXRXMtdnpmUFNFYVdTQ2I9VkYlKUQtdUlZCnp2JV98TncwLW5lb0ExPTxHMFJXeHk2JElN
NWVPQEgtMW5ZWGArWUlgSVdGcXRTNjZFeUJBcjh1Myp7OV8wcj5Mdgp6RG91NmVVfXN+TyRIXik9
P3ZfRjRjfHJsOUlOOTc1SmEzZD4pM05qK2QoZzdrPGEpNlMoPWQ0NUwpb2NiRH59KTkKem9zKSQh
Pz1QKUFvNjxGR0BRRVFKJUIkKmBra05eaUQqK3FGQDc2QjxpQS1fSF5ERSlWeGRUb1FWdkR2OVUy
JWlyCnpARko8SFAyOW4tO056djY4Z2ZxaGxKfWk+KFMzSH5aalc8ZXUxViRUZzdMZm97Mms9KF5i
QE9CVE9vJEJtSzFFeAp6ZUJ+SGtHdzEpfXAzTExgMj9hZWFOVHN9YmIpRmZnNmJpZiZFPWZXRDVP
Yy1ARFFnRmtkX0shZTwqOT5DcUVgVm0Kem5uajBuJHdwYjBPfEReVFImNXxeJjFIYzRfNGp9S29B
blY0RzcjRig/RlF5aShFZEVIY3VVeT5CbGYoSzBIcUtqCno4OEx1cjNBcE17UXYzLUQyfUIzVFpB
Silvbig5dkN6PCM9eFBvc0xYM2tLJGVscH1uajQ4Yzc2YEB4UlZudipOYAp6SzV1XiN3QmdoMiEk
KFVGR2ptbjV0PTR2KTtsQU89RFQtfiUzckVAYF57MFJGeHVeS0hmXmMlWnVYZ2xNZXA2bkoKek1w
OWxRI25yNjEofigwcGdpPTs2WElmeCplWVN5am1GeVQ5TzVlISNlQ2Q1aVZ8UnFeTE5RdkRaclU/
Rld6OGItCnoyek1hKWR7KzVSVH1kZT11ZztRc29DWjJJNmxHQVBzfVcxSll9fWg7IX1GdnlpVEJ9
PkNQezA3I1JTJWFjYVVudQp6VWREfiNMfCppSTZrayhZK2NRfE04eWJqMyslQl99I0pMXk1wV3pn
IW5+c3JGP1BfO145ST5xNz0qeW94ayF1SnEKek47VzhQMFUzfXJncUdTcT0jdH1WMyoxemEmRlNs
STN9YyNDY0tpMHVLcFBNcyRxN3xZM0k+JTBJa1JYOWhKWE14CnokPlQoYk85dFp6Nl52YVVIKkFp
JVRIbXN5PE5KOX5qXjJzRkpSZX1saiEwTnNHYy1ORihgZTRgcntANEFPWGJ5cAp6UG9kalVeV0x6
aE48UGBFcyhvT0NXPktuNT49OGcwWVgqK2V2aiZrenYrPnQ2Xnk2ZGBFYHI/bmFPSHxAZEdXcXEK
ek5gOUx1WHgkTipGPkMqRnpnTzsoIS1tUjEjTXxXQmxBTFI9YDVyeEF5cyshb3smNFZLdmdHQkVI
bWI5YWY0bk5ECnpFcGJDaHVoZGFiY15oe2JTMEZ0ZE9eKyhGQ3tpY30jXlZMVVhLOVIoQGpPQ0t0
MG1YNkwpazhjXjdeRGBLQExfNQp6NSgkanJvP0I4dXJ8TGt+STdxWWhhcFhNY25POXxJaHQ9ZmQ0
fnB5bmZ3SVdQdVh4UUMrZmY4YjktbFltRmxPYGQKek8tdzQ0ZjNSekNEakNeZytuVnx9LXhoM1B2
UXt0MklefFRxY3p3QTc7V2BzNnZVKzAteVpEWG0/XkR3ISF9XjY8CnpGWSoyS2p0aVREd3h7QnM3
YmZYX09fRkApJTYjeTFONVpjNGdJVEJJanU4LXYmNjU9UnhVYFdRY3s1ST81K1FSWgp6RzYpcyN1
cGYoRlNHcS1yQSpBRldZOUl3RWtgMnNySzd5eitxdUxANCZCcjZmIXNrQG5PcWhycFcoTVVtUVB+
b3gKemwjPCM4Zmc/YUNBIX5KPlF5aVlRU258YH5IYV5raWAhNytON3kpNHBxTjtRTmJPIT5rbmVL
Qm4rZCZSZDdGK09zCnpsd0hoRzwtZXt9clNTVGRUWWwtUztxUzJjeVY7QSRyd1RrbWFtOzBRY0pg
S0NeRTVURjUzfSt7JEJJJHVpRD5oeAp6P2tNZmwrNCFQQ0xBaUdJJSF8ekR3MTUjb3RQWWJ7WWY1
e0F0Iz9DUFBlcjg5P2kyKXRHVy1OKzJUcWp3WCYwaXQKektSRCM2Jl5Pc2kyQ05XMU9IJlcrTERW
V0xsZ3d6OEArZWskbmIxMXAmTFpPNHIocktAZ1FHKShZfTl1VnFRPkIxCnp6fSM3eVJ2TlJjZCtt
e0VFLTUmISRGbzkpO1owezFvOHtKN0ZmMWJyNTtFaDFzaCVCQ19IcCQ+WnZ9NE0rczZyRwp6Rk0w
Xj5EU3o3UlA4UmwwY0hlaEJmOFhjeGhBbGElbHd6P0g1RWJxJk4wcW10dVBPSmY+TTVwTFhTRU05
SHlmfXoKeip9PUpJRHFARCE1RWpUJDlhTDY1bCNUKXY8UDFiQDVmaXhXdX5lTDVRe19lQHU0QnRS
bTVTV3BMQiN2MTVMSSFlCnoxJHNYeG9vPEZsOUxMSVRCTV5GOVBhVHJiOzdjVSs2ZDE2e1hLcmNP
K2M+WH5XYG5DP3d5R2tLPU4xRk5nSDRqOQp6YmtaMTw0OVEzZipSN0ImPihubCtfRH1BWlV0WFBn
KntQTy1vQXdzYnZONiNLaWlDQSUoKzF4Y1pIQ1ArSmVlPUcKekZZSHBnUEh0OUVOLX4tfkxSIVU+
OHVKPGE8ZnUkalZiSFRaWE5BflghJkE8M2h7V1RCREprLXNjP1pLc2hEfTNnCnpZTX45JXhzSXd5
dDBUbUJhQjBhYyFIQmNMZ3lJR2s+cm19eTtsJjxJWChCPHxJTXA0YFF0IUFYRlQtdSZ3bDJHbAp6
dDV0YztSYUJ0SHY2XlF8N2NVZTNlOT82PiM3dnN1czU5ZChzd0V1TzJZZjZ0XkApcUlHQUZ3eGI+
PWxLJiM0e3EKei1hSGd1bGx0Xm4hVTNQSGVlc3MlVT1UbD13JWZEZyZld1lETnUzKS1aJWU7XlZn
JCo3PTd4Y2xHJFNzYGlyYD4tCno+PnoqRlpqaG9ndCQ7QTFKamUjbSMjYj0mZ0dfIz1zclYrZF5t
JUstYVZlWUlJRyNRQ042P347KGdFRmtKdDc0Ywp6PU5ZKHoxSTEpZkczSVZTaWhAVztCYVVmWmpM
bEo3NTN+ZkxMMWc7PWp0JihNXmtZOHFeM2hSTnQzVno/cUpAQTUKejBGNSZYQX19P0FKUEh8aTMr
VzlldEJ8WiFgYDFfWUBCbFg/WFpEdW9mbyZgODxoUUYmWmZ7bSN0Y3JlKmVfMEY+CnpKQ2xuO15t
NF5QKj5PKkllSUdUcXNufUNHPG5xazl1b2EhUFR5Z253YSNQUzA+eGF1WkZOTnwqWDdaKVBqc3Er
PQp6UE9oblFze0dAZHNManN0Y088YSh6ZyZZWDhPfVNnKjtkOyNPcFN+fDlZKXBRTjtXZjFka09U
bWM9cCpCNCpnLXYKenl1MVMqLUFadDFQWW1qYys5aztFKFQ8b1JtZyNke2tCeE5XOUdqRDwyK1Yz
Ti1CeXI5VFkoKGJIc15XVmBBKWpLCnpiVmA5XjJjND5xWD57Wm50b0ptJnk7QVhqRFVTfmBvTWgt
fiRyUHtQIVNiI0ZrSXBSekVYezBpJC1kTzlYVHM9WAp6OHxRU2swTzlHSG5GYzZWOUN3VztzYlYl
NU4wcTx+N25WYW52YXJBYiVwJE8mSzJ7bmFjfkkzYyVoYWp9R14jQzwKeiVPI2wwaD4jIWZ0OXBl
aV93M1M3TzBzKGIoWnNmQTlNcmYyUHkkdmVRKlg7dVYraUFOaEpxKEhtdzlrM1Z0b0QoCno2WGBp
eDFWOzVMaz1kfllmWCkmR3hWS19wSWlpZDtGcmVReXRWTUQ7PXpQbEdwTX50OzJuZUBkeShFUDkk
Y2FaSAp6b190NSY8K0NYZnZENDVweXstN19Qeig4PylRYjUwcTltQFVeQzA4V3sqRVMobGVjNz44
ciRtaDtmYWI/PD1VYnMKemNqZHJJVGFzfEZCWGdSUGhIWj5iaiZpWDRqK0pDSnIpeTU9Syh8YXFY
KWlnSFUrUSg2dzZQN2NzSjhCKWlJMEp3CnpRUkM1WlJuTjh9NVQjQUd1dGU8NWluflZ7VSE2RldV
MSM+QyVvVjVOTXgkLUdqVjdJJnk9PnFgYT9HI1JKUENmMQp6d3N2czs/YUFLQFp2U25gQzhwemlu
OGJiWHI3ZD9kJTtkcndQQV9gaztuMzRGOGBAMDBvdzlnVHJ4d3FGWVVucW8KeiFQSmRaPD56Xiln
NjxyMHo5VDQ+TGx3NFZ7a2NrfGQqJmlWRiVaJVh0UFBRPksza0c5a2t3cDl6KFFORkJQdDFtCnoq
RiMyKWlhM0c5IyNvWGBaNE4qWmd5LVJyZUZ2UExTcUAxJGRHNEhJQHNTKWdaO0xCezRKMXtQRF4r
SSNEVUNFVwp6aDZVZlBxTD5DVzclaGhreEl7Uy0zcURxNUdxbmhyKEFafk5CP01wfHotcmxOMHkr
diZ6cHlIRDtqPChKKjV4QzEKejlmWip9Zno3dmtRbD9YOTxpNzxScHlhOX5jTHFEd25RdkhCUCRV
anR4cEdveVNOTyM+aDExbHtxVn1kcjV1QEUlCnorM1JlbVFoMGQyV1AweDQ4djhqLTFNWTsqcDZr
aVF3QSh6WURhZnJkQjM3RShnazgzWF85YHtiTSNiV1JISWoyTQp6WkA/PWo+cWNAPDMtWVZqMFpW
R0tOJGdvaCZxcUZvWGJ0WGY+OHJrcyN9RHA/bU9WWX51M35iIWhZRk4keD1WOU8KejxOTUVrLSFi
JSVKT3FtUDdzNl8xa0RUbzV6PTwlU0JSPHhPQFdBbEFzdU53aEJmQzVUQWBDYi1obyVVYzhYYWh0
Cno/PmMpaz5GLXlZVVV4QUw0Km9lJXd1QXl1KVpIaWk3UFheMEZ4aTZYaVI9OTF4RnVAJEJ0Y3s8
TUZSalNBIS0oKAp6cTV4KXwoYjx1LW9Db2UmNlMkfFc4U3xUSDJIblJqVWBrYERVXm13cjk3MExY
TT5JPy0ySzNRYCpwTlpsSTEqP2UKek0tN15ZR1k5LWREcnBXZHhIK1pjUypRbT1kTmpwZzJuO20j
Sz9zNV57TUhxS3VkIUpwJFRHKyVfZiU/M1hwciYjCnpuNW5GJVg0WEV5Y0pkRzloMW1KRlo8Wl89
TEBANUJYRzl3YzhPZD05K2glan5mK091eGB8akNXTWE1IS0tfDZENQp6VEE0VVpKVjQ5Ujw8SzdY
e2A5NzdQMkZLfUZgbSVGQkdWPztXTUotS1JHUEBueWtoRHRiaFlQcUpybyY2WmVhTE4KemxAc1JP
U09jYEJXJkZFbF8+fi01SXgmMHxiTnVCQUI5ZjB2Ul9AQnpuZkhMa1hWJnRAYXNrblZaQ2ZpdUdC
blYpCnpyTXt+OSVzYTcxT2Jhcl4qQiNKfVI5Q2VffExHcShlUT1RYkNQNWV+I3J5TzdMdk8xYEA+
ZFUxaHExUWheNjc4OAp6X08/V3JKMCFEUzUoVkhnOVZQZ0ZWXjh6bFJea2BPWlpEPlB7b0AqdXJP
dj56P0dfYHxJTWZzZSRXPlBIMDgydj4KejNAOEYzJEM7KGRNPTxBNnpAMTdySDFyWHNfIypPJWg5
PEc/emxjRSVOWlc5O2QxfCpBOztgcDFhRkxsNHNUK1kxCno+bEtyUFlFdj5XUyNFJFh3SEM3KUIq
cXFtcyVfJjtDPk5VPGgpZUg0Kn19ZTUpKjQld19YU3hhNFpFKntNdGpUZgp6SH1weSRhUVk8Sz0r
Zn1fPkU4PiFPIWg2UnpCclFBXntZcWAjJHZxPy00SVo7QyNCNChaZUlPOCY1PFFMejI3UVEKej5a
SHlBaWRtVl5USCZkKzF3ailqY1c1Jmp7ZlAtb3I2ejw+ZzBRKmJaOzUqYD0qT1hKcD13RSlMYCRx
IVZCMSk2CnpPYExPPD9mcTMtcXQhTEJCMTxQdiNTUlJfZFUme28ofkczRil3YCpMb3QyeDhIRXVF
PVlyYjVqSXtRPUFRX3txUAp6KEkmMWJEWFFIbEF2fnNUSXlZWDBhUXVBeD01NT15KXRqYXx7e0dQ
PmZBOVdUZ09tT2VLRF9Ba1lGelF6XlVJWT4KektIV0syUTJ6UytPbyFmWnVqKUo8PUpebjJjUl9Z
eFVxciUmTGM3WlpRdH02PDQocVFJQWA0RVAxXjxaYHU2blVgCnohOF9HRUhTOEl3ZHtfMV58SmBU
cl9RTzdzPzAyNm97aDlNTiNrTS1UQDtqSGxwVV9fcUp5S2FgdiQ3PFh1bDNmZAp6P2lANntiNXB+
UEJeNFV3WjtkdEs+e2ZhQzFAYiE3XkFaUCZTV0c4b1FESUd0cXxvQmlvTipWS0pXPU96NipXKn4K
ejZjTy1ybHVaZiokYmZgNCZpaTIxN0dAWjZ6QSpKNEd9VCg0M0g4Q3FNKH11VW5NPyhIYW0yNiUx
KjtBaEw+VytoCno/SnpAQnFkPnpoYVh+cEtKTGdyQ0hmNmlMd3omM3x7cis5dUQ9an5FIU44aEJv
SEMmOWx4ZH05KyF4ODYremtocwp6dTlMUT5tTnJTcWotakVFVlNFPHhEeysqc0cqV0Q4SD9iU25q
ejBLK3ojcTJtXnt9VHwlQFdIXkElVDUmZFZZZloKejdzSDBEPjdKQGk9bGspMnVRfSZAQV9jXzxj
aD91dnRTbkp4diYmbT00RFBLZ0tqZ3xHczgtNS1SWlVVWDNtQ294CnpKZFl9RzsjaD8+eFlybDw4
fW0hMWstanxOcVpWeCZpPGlCK0l5eEZfYnZhSit2TEgmPFBkPDwpcyR0Q05CRn4tZAp6WlZ8Tjsj
YVJ0V3d6fnhQTHE3N0p6MUJvMmcoUkRWUnwjSns4OVZkR3FrNjNiYnsjMnpxe3ZjWSF5MnpfPllM
eEYKekJEJmBUZEheIXBURz1yU2lkWXo9JTVlbnQ/RnI0UE4mPD8oWE9VNy1CSHI0U1phTWltdVV0
P1ZHaW5ab3QoQzBqCnpeX19LUyFUTXBiWUI0KEJZJU1QbE4qQTs3YGUqZyQ8fWo+R0pteUx8IVJz
SiN1XnBZVmRhaHpjOHshazdOO0hTPAp6Qzt5NU8kRTA5TENaYm5OSTN4dWxXcVlAe1hBYFFeTXR7
NCVKPl9FWnkmY3R2P2Foe1B1KUJnPmd6VGpvQj4yZyEKekJYMUxQPm5qOD0yNWJ1X05+Y2VAK2V0
Y1VUTU5hXl4tKEc5TDJiTCE3O097Nk1MUjFrKE09YlhZe2RRUkRpTWVqCnpeMiskRVdRWnw7cHAk
K1hXNXk4I2BLUlU5LSp3JXt0djZrZD8mIWthd2NeSk04KjN4X2J+R0YjeFhfMkUrPWYkPwp6Xno/
YGI2VEBpdEpiUnVXN2N5RUF1cTR8TG4lZCEkJnNwQm1jNk0+K2hLPTB7UjtBTzAlUTwwY0N8Zj9f
OT1fSjsKenQ+YExheiNyOGthaXcxPkBwOGNVNGhKTDJfPlk7IyNyRkd1U2V7bjl0SU1EUkUpOE1E
ZkgxfjAtS15odyRKc09NCnoySDY5fVY7T0VjQWxtQ0dWVSV2bXduKFdIK1opaChxNWo9RVlKOGV8
WEpjTUVeV3crV180PVI9XiR0MV4/VGBAMAp6a01EZkZTQElESlhxRHkkO1dIOSpyV0c9cVEzN0By
MSUrenxJKXV1QTE9RU9CWm51bloxZEF9LVB0YlhyRmdNSWAKelVCYlFxM0ZkbDRBe3VuV3hXbWVX
e15zdDI4TFJONSlGRF5GZSVCKjRBb1JgOF9iKntUTnBhLXRAWHpyMU4wIWUzCnpnPmtSN0s7OVY+
Nlo5K2BYJFFpbWR9XjRmbFMwcSVJe0RpQjY1cSthRkdeUj5jcT1GX0dZS2ZHZ1FgPzNxUHZeaAp6
aUpzb1RtU3hUbypIQXcpN0I4YFVofXN4NiZuTChqKXdGSzQkMCNtfCNxQztvJDcwLSNzUGdEOF48
am14Zl8kcnIKek1BJjg5N1BsZ1pAUnJeJkheYUB6VGZZR1VVekEzcTxXWXVmNTJ5QCZzK08oIzAm
VFhKc1pOdUtkRk9YdiRMVTJqCnokKm1ncSRTN3pgamRNNk1weUBIWXw1T2lGRVp2fjtAX0NrKXw2
OzNtYDI3d3VUWT19fExmPTJlSlpgJVRIOyU8VAp6XilHc1dlSC1gNTNmIV5FT0x+ay1JZilgem5g
V0VZa1E3fUxJOTJNU0lGWHZJV09oKGs2U2Zke25WTDkoTCtBfUIKeiY/RkJtT1kwMm12KFdeQ0lZ
emB8QHtqUl9nOSl1ckV7eVRUbzNrZj8zZ2RgYmczOzEzRUp5dzwxbjNCaChoZkYjCnpsOWRmdSoo
TkkzVGM/MX1ZWHcxSXZxXyMyS0JkKXgkSyQ/KnludGpzOHFENHpLM2hBV1puLU1qe2AybykmUUVm
VAp6ZVhaKl5MWnpTZkFfSCpRUTE7Z1opVCpGXmk1KjlLLVgwJTJJdj87TkNaJUJEYG5AJT1VJiMt
fTNtckRxLUxlU28Kem1YP3Y4R3ApSUszUWp6VUo9YzVKTGRFdiphaUUkTSNwSEVOPGV8RD1CIzF4
Tz9kY3dXZk1kMG8qa0sxfCVNVWVlCnpGfE1eZ3NIdUgoPyN4PTs4SVB+czB5Nk5PN31Zb2xOQ15Y
aFE8eXhwYSMyKTFHdyV1KVpOPUdmRmdEY1Y1eUA4Wgp6WT5vR3BAekhBOXI5Xj4kKz5XaHtrPTRz
KE8rRXJPSDF0Q3RJZTV3QiY0YWFpKiZmJEZOeG0tTUZMQFlzSlh2S3MKemN2UDdjPkI3d3FzaTVS
T0BFa3xWeEBlYnB4SHcwVDxxfiVBTDdWenEmPSYzSkhGUCFAT2R2MiNUOHdiV2cwK0YjCnpaaU4p
VTghfDFMeFhJZVNxa3c5TkBnUEt0eV4oQkIxeyNJSHQ3NmZTXitLTUgrcXtQKSRSYF49ITswKmdW
Mkw4MQp6dypkVmhQMkVEfVdjVFRhTlhZPyYkXzxDPDl5K3Q3RUVubC02ZlJoMSVzX3hVNDNzSnBw
bylPY2lmazVTLUN8PmwKek8wWUt+P35tXmBYQE92WXNBRjxJRE5Pc04/YyhwWnUpYkhldG9aeDJz
fG4xYWIyMSk3PEVsSjdRa3RKdkV2fGNNCnpVcj59KD4+VTtBSWpERjszSDNnSF9TdT9+R2VobkBW
aDwlVkMtZnw8RiYhTnlyQ0JhKiVtYUoreC1NfHFDczkrJQp6bVA/a21sQXNuYjxARyk5N2NhJGpp
QU54UERMWnBxcnxVJHc5QS0mQnk1aS1DPj9lK1I4RnlkQUd2YWJGaSokNCoKenF5RHlSe1h9a15w
YilmWW9vPkJ8WGV+TUdPLTlETGdxTl58N04wJW9BRy02cCoqNjhzKlNtJiRJY1VGTD42a0EqCnpQ
LTdvbWJzNCQzKHRJalYtNXo+KCk2SGM9U00mOU9DSHVUaXVIUl9DaWBWczxeb1ZSYzl1YWk0P35s
eWdZT0F3WQp6WUgoIWVHSXB6LSpJKXliNGBtb1ArJX5uZSV+YDZZYmVNeFpLPCMwUyFjcX5yKUVF
PmxjP2xWXkJkOWR3QkpATmQKeldOayNTeXd0Typ0cHZOPDEqO1YlJkV7JjtAPnJaK1FDMUNmPzJj
QWdRT3RsREFkOW1AY2J3NDRBZ2x0JSlSQlFUCnprZWl5T0ctUXJWS3VGZkZZP2N8SUhaMEpDPE8h
OSp1TXpVT0xAVko0a1kjUThOT3JMIUFmdXhBUnBDeGklOT9+SAp6Wn5PKyZnP1YqR3g0KlMrXkUw
VFllT0AtNjc8MDNwb0ZNaH1fRX5QanhWejA8eF83PDNGMj81JlVWb2c5SF5qXiEKem9IbEVOKiM2
bFVXM2J0LW4hKVhrYzdxNlhuPGItIy1ndnhFaz1XPjsrVUpYKW1BWVNkJU14RHB2OVlWUWdwJCsw
CnpLeGNvfHVUQWB8KmklKlNOUX5HNEJAMyM5bXQ0azxwS3VlWnBlKCVRMzBzVkY/V3l+bDU3KFcm
bTQ5MkB5KStyawp6Un1CJVpqd1ArTGNLbylPQVZ9JWo5QSNSZ3daciV6LU1TR09sVEQyV1VBK0Rn
YVpFNUJlKUMtS3tMRTExcSROMnoKeiplc0laMSNvOUNqbjZzI0piQ3JYRGF4VSV7dm55Vml4Q2k4
aDsoa2g2Yy1aQ1d1MnlCYnl5NiRfYFY1MzJfTztKCnpYYTx4fSQyPCNVOEchNjZBJlBMRXstUnEm
TDhLRmc5Zy0jRDBuayVHcngjaEgrSmFDPkRQOUx1O3klQG9zeHU8NQp6NHI5d2c0WE5WdDlFYG1W
KjUjTDYjeVVrbjExUWNBTFdLZTJASF5yKWJrWSNDZGNvNSV5YjxNUSFWMjZvP1JGVXAKemFiSjlX
I0JhLXZKY0MmQ3JOd1B+MT5SKytuXzxRdmplST4rcV40OSt7QkEhaHhGQTItUjItV29VbFFhby1R
OFc9Cno1Kk9RP3pkO2RsRzsrIzMjU2xTPWEtNWpKVnRxUkxsTj1aNCV+Oys3N09SXzB4MGUrWVVt
RHFxVHVRSnt2OVpqYAp6PCo2cH1ORDN5cnktfm40WDlRMUFkbkUxQkt6Izs4ZHFWTkR5am8tVCgl
QCV3JXlRRlk9T0FmUmBzYTxDJV9CYHgKeiNMK2RLTVJ7Q3pwQm5BVDc0fFYqYFF+RmBfcVkzKU0k
TENBSVQqSVZrPCF0KkhZM00wQE4lfE9rVjE4Q0N1WmZQCnpONllVfHlMSlhfYV8+UyhUakpXQXt2
TlRkNiF+LWRrTDxzNVVKVDlRYj1qVDlKYjkoQU80V3oqIVlCc0VoNypkOAp6cDBoWSQzXyVmODQm
eylyMmF6KSYlcTd7ezVzdTUpJk43UzR5YGUyKUJzM2ZxTnVFJmxEVn4hWXNiVW50NCV8VEcKeiZ7
WkpOOTN5c0FwditaTkFCTD5WLWlVTmVyIX1abFVZQmlFcyozO3dHOGE1ZDZPaTFPT0pMdiV6NHF3
WkZ2al88CnpUVnglNTFBZXo2S2tiPGkpfTNnMHN7QXJZJWJ1R1BeXz1RRldoTCZKSEpuO3M2eTly
PFlJJU5rPSQhUWlMcE8wcwp6bX55a3FXclIqX1cxTE92cnR3aTMxYGkpd1Fkej1sK3VNfFU0MTky
P2lpaXVrZUw7WF8lZ1ZkKnV0Sm5lV08xMzkKejB7XlZ2a3klQHI7aHN8X1lwWWk7eCZLKnJxRUVN
ZDttKmgrajRXYEgoI2w7eT5+QjBTKVU1Un1LMmsmSGBoQmBOCno0Szx+Tlpfb2VNS0B8Sl48ST5k
ZmI/LSMmcW1QQDBCTTxYUSlBcSNYbkdMdVIhczQ2QC15aDBtSktnbkV0cWN7dQp6MzYkdl5CaDQz
ZTNGd3JQMjNObH5OWShQNFB1ZFMzJVZicExfe3swcDJsdUVnTmNjRzdPS2k1JU47U0J0eD1VdCsK
ejNRdXZqYzA+VkBDc29OWnJqWClfbC0peClUYHw1P2dFaXZ8MEBrUGxYVkMpXitjUnAhNDlIXy1M
eVJkZGBGdWI4CnolMXd2RXcjOH55eVVgI3B2VHNJe20qeFRjPk9iPEVqP2JWdUhYTEFyTUY0M0p5
RUNpLV87Y35WaCt8PFIxWihGOQp6UGdHU2JzT3FhXj50dk83XnY+RnEmLVVAQTRQJkRIaSlYKGoj
RlpCd2A3T040TCh5RiVAK0spSEJrYC0zYlNkTVIKelZIQEAmKlNIPUcyel8kTTF+VTs+JG0zdFU3
dlZ2P1JTKzI/QnZGYmQzWVNKWTRwPSF0eXs3VGB4Q0dWPTNjLW9yCnpJUDBYdHdoSHMyQ0g8WVF0
eS1ge3R8SFNocmUqUkQraCk5TExBcTtgdXYjY3clSCpPQkdDaUQhcUhnRjZyRyVONgp6ZUNpX01X
KFheRzJhSyh6JWJ3I25WZUM7PVJaZ1JtP1d3aU8/bWxiT3pWWXlqQSZDajRaLXByU3QjfVokc0RD
ajEKent4ODJ8UmxlfiZvX2VtO3YocD8xMj8+clpMTm1qNT5mIUcqd3s2fEw9KzImKUNxSGFtVCQ/
d2UhSXNgfkR7WmxeCno8K2BLJWR3YDY1MmJqd2EwR0FSLWhRPjxCZ2FIRSVwKjBzI214S3o1VldJ
M0AlUy1AJjlFdzh0UUxDdmwxWDUyVAp6bTdXfDw1UnVLWEkrZEVMMDZ0Q1RZQ2FsNW82KGViUlNw
SDt8MkR5ems1I057VT9DN1A4Mn1hIzdfVWN3dU5SQiUKelYlelpjdmV6cGZKO2IpNUVSNFZKOSFx
bEtWRWg9TFV3WmNabXx0fC1fOGFvK2I/Y25yNFZ2UUVRNGQrVHgxTyZ9CnooTH48N0RNPndFRTVZ
eDBuWnxnKkFETFk+TzZvfXVZQUB5ISRydE5NbVJjKlA1ZUhSfW9vQmZkJWZ9WGRUZCRfJQp6Mklk
Vn1CU2RWZypBdmBhZE1XRUZze1RyMV9IZGhwNll3WT9jJHk7NkxYUV9NJHhnMVcyaypPdVFpRGJ0
UVNOOXAKenQ7WEVAPj5WcEJYWWE3RDc+fXE4SjFuUHViSDR2QFpyQUdJR2wjeEFVRUMoR1JkIThQ
bjZJV15ibEM4Q1Y5ZFB1CnpTc0RGdUA+Nnh8Qn13IVAtfUlgTllqKjlEWjtpUnFRK3dzSnZKSmdF
YTk9PVMqU0pOO3B0UyVVNj5TVXpDPCpwVAp6dGhxeFd0Sl5kQE1hMFVSMis9an1xKil2WlFKST04
cm9ZKjM3Yj9sd3ZmSldVZTIjX0lWe15rPWxxaitUQSlVczUKenpGQyRfPm5AbTskKldzKDxtTjtr
JnhGUG9xZ0RPYDcpfnpLNGhjbXApRG89OTdsOUZUbjttTlY5eXo4Zk1wWU96Cno8cmojP2lVSHVQ
RjlMU3hQNUMwcVk9R0E0eiopWW8rfClRZj0yeDJQYmJHa2c/VE9FRS1mWSZFPDsqNEtpT2lNTAp6
ZWc0TT0kOSRwJko0X1JFcllHKCNfZFAlRFZyaUchPkdfZm93Z1BefENMSzlVOSQ8IVVUPUh+Z1JA
Z2VuPE1KRGwKeittT1gtWDRoUnVWP0JkRFhxIzU9N0szazBUJnd+MDVRJDwtMShgYHVCVjxPaE8m
QEplNCRYVm1KVl81fnRjYFV2CnpKTWAwTW8/RG1VXkYkdGJINT8tWHFNdD5sKkVwJkMkUG19OT9A
PlZ9ZVlFfEYkRnpheXNqSmBLRjszZlhgcF5ARQp6dTdUKCNJMl89fXYkM3xkTGdpJD5QKUU9fDU1
YXQlRVJWdnRXY2UlaFdFS1h+UUp6O3U/algpMU9SWnF4U0B2Vn0KekBMeGBpLUxOTUU0aHYyVkc8
Xkw1c1NiQUQyT3MpU3pmJWlCMXA+WmNaQV5AR3tkJm9VXl93Syg0S2JXQj9uWClVCnp5UXBgUDt5
QiVLYzdEYXY5UmsoPkBEMm5VeTQ/WUhFaDVgP1Q7Qm12SjFWYjAqZ1pmOXY2dylLJEsySlpnZ1BG
bgp6Jm87LVgjPz5ENyVmVHZna0x5X05sTUVHcUY+TlQyJW8yOEVFfUM8VUJCUVBhY0UlJDczXjh+
ZTEtVGh5JEV+e2gKelc4REUoMVoqfFFzbzg5NnotbUIpS1VYdmtJVHBySzY8Nm9DM0J0SiNZOUk7
YSFnR3pTWXJkY2lRP3FocXB2YjRlCnpRU1owdWJ1QExDUHFrX0ZQSl4jcz4oal83eWBrQSpFY3cl
JGFnPjtiJXo8WjklfjdYQHg/LWw0NlUjNX4jakcjZAp6Q0RSVCl2PCl+OCRFNTRRaX57TUFUMTVA
KjVhKHdeTGopVXVOKGluXnp3OChZdzF1c0MzSV5vKnRkU1JZOD1KaUkKemx0eVdMJDZ7LUZYNXpW
QktNUUs2R34lRGxqPiRpUTNVVTdCOGkxNmNZfE5xV0lMfUV8djA0X2RhO3hYSz5YeiVkCnpvXjVm
TGp2eT1MJkN9azd1Q1JFUz1IbEYwdi1QTjUpem9eQT1HSVAoNHoreXZ3TGFTRk91RHBLNSN3ck4m
UC1WNAp6Yk1JcV5vbjt0XypWN09ASnsoMjNLSmFWXyFDYnVAOFI0Ri0ob0ZeKk5ISGhvR0I4eDZp
c1VmYnAqaU99a2gyVkUKejZvNncmQWQjNiRHTnttVjJiQVhEUyR4Z30+TEdRcEF2I3I3ajJWekU7
aiFCUVZzJiMrMG5vTDlqXmtMfXRncCZJCno/STdqIU50QDNeSmp5Nko4YmB1VzE8WmNpYVVBPl4z
SUwrNDFxVm1nV0BJdkpmTFYwMHo2Z19VTXBJd2Ypb1g9dQp6ZEV8PS1gLWJTKEBVXnJxIXYxQVI/
X01oX1dPaT0hJHdtdG9qeX1tVkhMQi1VdH1OdG0oemY7dmJMKmcmWCpvJlQKenJYPmtJbyNHOVFq
Wj5wTGdpR1NHKW1fdlhua0ohNFptI3JBSkI3RFM2QCtQQUR6PjlBY2pPK2ZQOGcqSjxYbnUlCnpX
ZHVkZ0FgIzFAU0x7d1QwVHdNPiQzJj5RQEdPZlY0fn1mQUlPWTJpdmY4clY5U0JVUUhqOzlDN2F3
ZD0/OCRDawp6WDtZcilsQzBXb0s1TjxKIzJUbHJOUGctZ3Y1VTl1VmctdjxsSW10Km1BZkgjRnFa
OyhpZkVgMWlyJXhkSG8tUWAKemVkbWB4SG9Ud1RCc3BITHFfXytzN3prVXNFZ3VvNjgpUnc1XkU+
LWdgbHFQU1BLQ0RKOTV9RSo3Yk1CbmEhcilnCnpBVit+PkUjcFVleVRrcT8mQEBjcGtyP1BINkFY
ZH4kbFhKMyQ8c19EVmRPZXo1S0pXWkNGYlc0ZUd1MyNGRUhrJgp6bFc3clRpWCM7ZnN8VklESVR8
R3o3JkxeaiYlM28pRkNGRD55JXNFeklUKmN4TjxSc30lLWlUel9CaDdNWWxjQFIKenRZNkJHJEFr
PDd7KVBlYkp5JWM2SGg8TX1ANVp7RytGaTgkbWZOQ05kMUVEYWo7bWN0eT4xQDZoKzRiMFpxNCFi
CnpUYz4rMVpkSzF7RzYoUkQqO2p0YkJXTyQwSG4rdXw2aWxfWmd3TTF8ZFFPRWQ/JGs9QkhJXnl2
RGFiMXtKQGgjdgp6V1lJeHxUdiVHITsjV09SM05iYUskJUgkeTQ+WnZuaEU9RmllMFRidUBhazJy
RFViSytGQlkmXnMraFpBWFB4REoKeis2Vzdvb2pQRnoqZ0NYbCM5QGg+RCQxV0RvWEVrazh4LS1S
ekVQVjRPI2s0JCoje3x5byhpNTNpKFM/U14pVF5jCnoqYkt4ZkV0SkFqanE9dFZrWVcwPiUlN2pB
e144SEdhTHRQWVZaeSRFUGdnVz1SREU5JVFCQkV2am09aDk9WSlDQQp6bkc/PiU7dVMyZSR9QXNg
bUoyKzR4MC1AZUVFUzQlb3Q9cDJYUjtuOVIzaSR9MWU2IVdINEU5UjZ2dTZ0YzlwZX0Kel5OTHM2
Uj9vN2I4NU1VeHFrP0VzcWRMTjxMbz9NdHRAYyM2UHpYbl57LUw+PjxGd1hOaDJuezxnOCtQTEwq
VnhyCno1YzsrfEFpeVlqQTJFSmhePlM9SjRPS2JlUyQqKnpwcWBZVT9YJUkqeGFINWppZmNIY25S
d3U+IzY/QVJAOWU2Rwp6cH1oR351ZGlFaSZpKDQkaHtOfUdHK3gtMUhkIy1WcT01NHRYYT0rKlJ+
ZFk2VFMhQCVgSXRveT1rT3hnQ1Y4KyUKelhzWV9NXnZjZ3pmPyUyIXglTlBFKCNWRjQ+IUk3PFpl
RnFFWTd3I3JZY3VpbklnNl9AQFlUSjBGfX08NCljNjdDCnpwQ1c+QW52Vit5VHZ4eys+KGZudDFB
WEt9KWZNSTdhcipoYVlyZiEhNXNSO0RyZG1SLW0pR2lSTnhqbkA8RE1kZQp6WDFoTVcyPy1RN1lW
YEJVOypPMWZBcFJpbGgkSm4zQHB1alRsWHY4d0IwT1Qja1k3RjxUTGl4Qnc9OWtGJmh8UH4Kekxp
eGNwVzZyRG9vRitxRm9pek4rKksyNCVRcz5GY0t4OTZBaW8wfFR4aWkmJjVlZldaPDckRigqdldl
SXl9K2J8CnpJdCQleUtqcUA+VG8+JlhycFkqKiltNnsoalF2VDxGWF8wJHotQFRWVDRnbTZzcl9v
fSZpdn1qU35fWD5VVmRRQgp6X1RxZzxGYXlyUyNRMz95WWpJYmlZNCgpTUx0OXBeSVpoOUs4U2w9
fT1LVm1+d1drfnpWOHxjV0JYPDxBRjBJXlgKellGMUo3JUQkVkZhbDg3JD5EWilaeWRicG4/VFNV
MVpiVWN2MCR5K3Z7WElCa2JIUUZmOT5LMnk7PV5qOXQyNDUrCno/UF9LY21gPHB3a1BQTmE3TSZT
aXZTa2Z9PXV1U0tlWjklRXF3U15UVE1YZjNJblFVdkhUYXFIc0stLT14ck57Twp6dl9+dFcje3do
eDtVbnRELThxeVYjQ30ocytSJDh8SHVkSXFvSXg+al4tUnx9VVg8ZiFgJmtwV0tpYT14bntANHkK
empKaXR8Um9XUWxNM2oyLXIpcH1PTkY3OFhjRmNIQmA9S0JDKjJxPHIjajk8OXVIOUlNRGZOcE9U
MndsQTMmcDwqCnpCQ3ZAWipPKFE4UlNuUDl1UVRSTSV8IUlxbmcpdjZDNnolNVRWMn1AZjZOUU49
RjQlM25VaF44aCtAMSFLNmpyTgp6SkFiPmJfZEUzRztRVyN2TSY7LTs3ZX5wO1hVREh8RyheaFEy
cko/djF5fUI2e3lHM0VpYk9UcHdedWZ1LXw0WEQKeiMlU3pgJDlDN0FKKHBnTmp5MGVeWVA+OTE8
I0IzXzJsfSVeT19Yek9sc1lEVSQ8TllnWmwzcDdRZ1JCVWI/fEtrCnpCaU1MSiFQTHEqQyZ5OyhA
OEVWYEc1bEZZLThMMnZNPiF6WkVLVT0mKlg8alpyeHRIJmNwM0Y2Vj1SdkpUVV9VIQp6S1l2JnMo
SWxXUDQ+TEBzbzEhKChQaXdVXk1ya2dTUyV0UEBmV3RPRl80JVJQYEs7UUI9O0VObjdaJXVHITBw
NC0KeiRARTsrOG93cFdlNkNweiZOT1RJelV+MVhRQEVDJjlETX1gJiRjWjcpVVA/UztkZnpATCs1
RClzbiZYeWVfajYtCnprRzwqRnFvS0kzY24yKzBgdEh+YEFWK05ZSXtEQ0hxTVVrV0Q3JHw3cT17
Z0NLYm4xNlZPYyNzcU9VOElHPzNvMwp6RTdScyVjQlV8OTB6UjJvaE8+P3B0Iyt7Y0NOIW1mI2B6
e1lfeiYqR3I2amxGR25kRDU0M1JgdXoxbFQtJU9lfSYKejdGfGxNPFBwKVAqQ0JTN2lgVTxRTjFJ
N2FmdnJsZ3lIRG1PczIqVHElQjU+YjEpZ3FFJVJiJXFgR3RiYytRK3chCnptOXtOQ3xIcm9qTUkk
YG8mYTB3amdNKT1ISE09OUp5QlhHSD8jbX5vbiNkanZfUGwzKUpoR3lVWkZnfHpQUmJhSgp6MkQz
fHohZjt1YTRLM3NzanomfSZXcXFOZypDS0x6VmIhJiVtLU5rM1J3bVEyKCFhazdOaXgwU0JBfj0t
XjdHTFoKemxfSWZDcnk7Vj53eEk9QE4kISo2a2IjIUM8QnBgVWM4PSlie1ktMV8zPFByfkVkZ04+
enhARHheeW4jYXJNTjlKCnpUZz1QZHVzRio3TzRDPXJ7dSlOdmRMZlk9Yj5AcVAhc1V4TEJiJFpZ
VlFyQD9VZjB0YHR+V29RJXZvfk09eXNESgp6ejdqN0xuZSFLY1ppbDJUaXtfeER7cFBfZEthVSVL
WWdVJXdKfj0keFpDJWZeZVgodVVySGhve1VoOHJHYHN1KnEKekloRH5UeTduZmxkOW5PSlVSP1cz
PipJektZb2JRbVA4JklkSyZteGdsK3dyQGtuKk5SP3Zyd0w9dXcraVkpKm5vCnpfM0hgdkV0Oz1z
I04zaytMcy09blhfI2lqVj1VRTk4YVopJVQ2JVohQyt1dDdkMlE+Pz9CUzRoY0dkUU1ld25NZQp6
ayVrcW1fJXI9bTFNd2NFYXE/K3B5WlJxQHp3eWhEJVJzJmYkTj1UIU1iITJlMFU3YW1Ac0YpYSpY
JmJXRXAmLUkKem4wTXV1ZXhpMS1YaHprWCNTQCRIYU9TUDItPjV+Zzc1P1hjPiRqWlZ3YjtGRmJE
O05ENC0yZlBjI3Y8c1FySjBBCnpvOClGdGMzWSNtcz92akFxM3hIcEJsbGJmXmU/ajFTQCFkO05h
NGo3JFcqUkp6PkUrJUNxT1BNLVBTN2NzYzUpaQp6WmFCTiVZNDc2MDdoRGdgb1EtTENfSmgyczIo
an1VSG02PHI9Mm5PfVBDUExFPnhweWM4IUgzOUxTPk1WWiowJj0KekZadFZVbFEmRHlXO3Z5d2Ap
diFIWCloZWJhfGNKNUVgdV8yZXkkc1FHXn16V2QyWj0oYngmYmlfTyR6Pj9QdD18CnolRWhsPGNH
bk9IPERrTyVBRDNDTEBOO2VSbUhnWX12P2JXSEpLU09gMHVNZEZyQ2A1Iz45TFZ8eWclb3tjIXxS
MAp6TW9pQG90TGVeOSlpIVJtWkhEeWdgRVREJHBqZUZSMWhVaVQzMT83ZjBTXm9+Q248RW9rTEop
QjA7IUVhYn1oN0sKejV2b0k4UEMwbFRDSCEkfDQ2OEo9Z2piJn54YThybXRLeV8zITwwVU1KRU5l
Sm89PFN9ZUlAQzhfN0I+YDBwdVVmCnpgPmVkPERLeEBlWik/VTJMZiNUcCRBLVU7TUdEUzVybmxZ
eVpOXi0yQShfTjt3NTZ8cXJlQ2c4YXl1dUw/I2JRaQp6UlY4REolQmFoRio2dG1ibDxoXlQhSmJX
PDItOEpGcTRtb1BjRW56d1peQCpQdmgzY2x6eHZ1ZT4qOEtQanBFN2IKemRFYWZneVhpfV91UXlZ
Nk1eeHIoSTxqaWI+JGgrJVdCVH0+JTx3X25qQyV9dVdqOGs3eGVJdnpGcCtvRHEtWGd2CnpIJXsr
KmVrT3plZypCXnJAQn5oaSF5WSRgOEtGbktUXkhRWCZBdVI1SjFqYztKb2RJKnokJWtGZHMwcjhy
cStgUQp6b0QrZi0pUnNVV1Q/QEhCQ1lWUV9qKyk0azkxeHAxaiVvSkhHb158SDY3SUIka0xEZmt8
RT0hQWlrS0hGVXtwQU8KenokRFE7Yml9K28lRFUhYiVHSERYJUE/RmQ0OX5xTkBidz5LISp1YnAp
P0BuNzdMb3AmPGd7QzlmJStBOEY4OEVPCnpzUkhabWtNZ1FiRFgxNXNvKmBYS25fJmZpRG1tbzV0
ellraFpaMGltPD9vRXEoV3YmcyM5UFc1KTZodSs/OHFhdAp6ZlJBMWxgRyU5RExRa2pAK3R2ST00
NVZCT2FAWnBBdzUjPkQ4eFImXi1Lekh0PVM4diFwYEdreVIzJDBZNDJVcGAKemRqIyZKNEIzUFgj
WSgqJCRmelBLN3krR2M9fndLX3gyQ2Y0eWN+WEFlej5lZnVmPnpZV3khRFJnS2dQbGx3NjsyCno3
TGlqWCNwZS1Tb0piVSV3Y0lPUEFEZ05pdmJNY2NqKCFVJDZRSEVlQUFKLWtLa2laQkM4dGY8JDBM
Ym04ZWZDagp6d3J2PjUwNTNCflh0WE9vYio3YU0oI1dMWXY/RndCQyM2VU88I3BoWEMmVjZscTsq
KzJhZklwZj0tWlhvMEBufX0Kelc2R1NQMEI+Jih8NzhONzBiLUt5PExDJUcyXktrOElSck17Pz1I
KHs4dmlme2diU01uMCFxXiM0YStVUmtmc282Cnp1ZVQxR0hEKGd4VCZTe1IyKThfJEZNZCo/Xkx0
dyQmejt1JD9ROTtMODVtM1VoM3BgUXF2e0lnO3whPCNycE9hYwp6PnIleE50dlBmV0NQbC1IOFBx
NjYjcV9Bem1hWCpPKT4qWXVPVCtENlVEb0pwSWE5KCEmXjJPbXlMZztScWlEMTUKenkmVmU3UmJZ
VVRAMjwoMnZje0FLNj5ZViM0S3lOaTJ4ZTlyLXF6aGlBM2ZvS1ZXeFNkKFkqO1oycyVGUVY+MmhH
CnpxSnZ4U0FQT3wte3UwYk9ja1Mxd2owNCYzaTtZOXxxKC11JjhHM25PSUdsPiRgY088TU18Wkwm
dVM2RFZhTiRLcQp6YENSXjtGQXxlNV9OPytAbHtfQmBeOVRUSFBaYig1MF9jN1hxKF8rU2N3bUoq
YnJLTCpxR0MwPE5IUkR5cW9IKGkKekF9JSY4d3x0dENJfXoySHROWEx2Rz9pKyE7ODd0YVEjZyhR
NEx0YjZ2RzskUCE3N0t7MjU/eUxBWWtBdHkpSXwtCnokQVRiblhpVVZxYiYrREJjd014M2VONDF1
eT84eDhJeElSbVFZYU9SQzZjSSg+cVJsXlY+ZTBIIShXekVFRHptVwp6SnZDaC16cjY3PjwxPX5H
YGcxPjZqNip4emRCa2o0Tyl9OS0obTdMSVM2OD5oYDxiKypraElUaUh2ZHQ9PjQkamgKek4+IXgk
b15fQVVzYCZAN2IzZHghbGU9YzBtU0huQS1UdFFuJkF1ZGFfRkdrclc7Sk0mQSRlMFkxcTdlQFdK
OH1PCnpNbDlsMFBVNzB5MCpZTTkofCoyOHlZMF4yK259d3xZeERRY3EzSVIwTDZkcHklMHJpe0wm
X2VRaGMmTVpvbkUmaAp6eHErMVdWYD1HWnM8PlR9QmBjMlBsRXVlNlJsZD59NlpFSGhmK3pUVU80
Pz15KyRjcW9fVlN0e3ZueT9SMnM4UkUKenNnUnR8Rjdzdlo5S2NrXz5WdWQ4JWtvYztTTUc1IVMz
NWlYZVAtbzglU1ZWdXJyTk58VDM1WnxZVkVELVByQ0dkCnpOKn48Uzc0TXBVYHw8SUVLVTtucWtf
WUZsRi0mck5nJnUrMjljT0VQK25Xcz89NygtaDIpfWdzRXtUNl5xSWBZcQp6cS1WcEE0TzJJUSgh
K09pOGZTMExtZy17STZSbit3bUxLK1lNUU4zdGdTSGMhd2phaF5Ld2oqJkBqZjBVaUhXayMKelUr
SDdKd3UqQklQMG99MCNLZUh5U0skMmUpJDMkPj5IZkNBQ0cwdEI8bnw4dkA0NnlRentLaUlFejB5
Kj5qN0Z8CnpGPkteS0hffnY1QmAzK1AtP050Z1BFSzcjOWNYKClaRk9GSmx7UVBhV2VMfS1CYEdg
IWVlMUhsUUNDKjEpVCYybgp6KkNxZUReI0lXYCo1a31nM3RFeTNsXzQpRko3U25zUlR0Y255aHV3
R0AhSVBPSS1qNHJfdl44N2JeJDY2X3JQRGMKemBAKWF3PDNuQShVdXM2VW4yOWd3a2tkJGN7R3hC
dFBSfn5yNH57RUdqYEtPK2xeMTdqYkhDVlR3aXI8YHRAemxACnpyR2VQRkpoOH1hb2AxWjJEdjsk
TVUoUUM4UV5jJDBuPkhwI1VTdjFROUo7VCUta1FERFc5XkMkQDQpVXxRfW9VMQp6Xm5EMlNGVFhQ
V2R9YUo4MzdxUUhjQ3BVcDFEMFoxI3YtQEZwUT4wWjNWa1A0JmVadml3JG0lUE5CdUptTylrJCoK
eiozKzhTSzZWPm13XyV0cSk4ZCFrTmdxKStVTnE5VjVucjhtUTRqcjVqOzAtM2U9bkNsZFFFenR6
flhPcFR0fVU5CnpWaUF0X2JtXntHXzdtZUprLVVqa0Z7JEJOdDRqU3tXel9Qcm5IeHRCQGxmbHhy
QGZxYVReIXp7SmVAKUp2PXdKegp6fE1yb349fCtDaEMjcVY5KUE5O2lrTnFDUHlVcmBad3dBPiVx
Y1JVIUoyYlJ0R3xDLW5vIWsxPj8+VUhXe3lnYyoKej8oPClsK1V8UTZedSojeShVO2ZSa19JPCpC
O0c0ViprZ1A1ITRwSG9CPnd5d3Z1X2VFK2BMX198SyZIdi1yfX4hCnp6bjxqKEkoalBeWURkMnli
a1EpTGBVM2d0OD1ZYW8oN0x7SHYmdWt4PCVyPm4jbWJNYiRVaT5GIVZURihuaWpXSQp6ZUgwXyEo
YlBqTSk8K3VNOCpWTWRjRV59bStmXjs/XktHQmI4N3lkOGRxJGRoSk5JcH0tNUR6MXVZbVdXVTlV
KiMKel5kMEUtQiE7RkV0UGJPKHF5WW9KOD4/djdNX1E0KGx8eGtoPGA9MFAqOTFKYilCMUpVd3xH
Jit1Nj9fXllKUWJGCnokMypQPGB0eSpRVShIZXVsVmhWNT8jbD1xdCtZKitJT1k/XkFkOStoTnZD
cXUkKlVUO3FKfTcpZEVkYCY1MSFLTwp6JUFmWWpmNFNBJFNMQjI/KUF6O1B5PnFWcCtme0ErZXwj
MHZhPng5VDtid0M4RHspZ25wbVhXREo4ZGhMbkRrOGIKelcxcj9AMilDdFdKcUVmVyglc0dNVk4p
RENgb3prc2QmXz9CUkV8enVZQHpsKTZLQ1YyUERgcUNuTztFTjUlVEhVCnp2OXhoaVNqYm1qJm12
eihmOWE8YGM+VmF0WiZ+TzJGWSNXPEY2NmhrQj5IWXk8aU57Q3lUOSN5dEJgZX5xVDU8cwp6VGZE
ZURIc1B5MEJGY3xFV3RrIT5CMjstdkZYOCU8T1RrUWZYUz00U1MzRD9uR1IyOWFjM3JxeElrPz0k
fDY8RVIKelVhe1cjR29wVnE8OEVNTk9PWkdWQDZhJH4rbkhteXMzKVcwP2NUS0F4aH5SIUAjSXA0
RFRndUdxfVc4QlNhVHt0CnptY1ltenZ+OCExQyNNYyM0U00qP3M8ekUkcEFfNXA9S1pndCZOTThr
R35vTl5BUF4hTkFQezBVaCljTUpyZXdBWgp6RDQxKTMwd0k8bUUtN2tSVzZNLUNGWEQhWHJEbXBX
Z1NkbiFnKGcmJTRYJkFPeE1wY2krY1p8ell9UGMqKCEpSTAKemI2eE1aYCtWVThvTzhKRXxOWn57
P2tlbmV7T3FVTUR5SSFnKjA0NGtKNWpuJDdeWlZiWFZsZTZZXjFLUXdWfWJKCnpIZj5UMndXQEQm
VE17M3tae3dkR25JYE82b3BiNUpoKFRee2QjaVQqU31TNnF4bzZIcSROVyVXSzBDV0s8XjAmIwp6
MTR2JXRmJChoZkFFdXA/THcyciotNWttKjhpZjVCY2pNYkI1djM5NVluZT4rc14rJDsoN2MhbjVt
KDNXY18jfUwKej4lYU4qO2BQMHsrRnFgJloqPVF4WnpqXzElfnZheSlrSyNrKk53STlzbDc/OSs1
RiRveE1TNnBVdSRPMXh3byN4Cno2M2NxQChASStqdjg1b2hPUjthQnc+fF9sQ2NyTyFeWlU4djZM
UmRAe0NpPHsyR1Vxez9UUDd4MW1SU3ojXnx2NAp6X29FPGBwR3szQGA0NzBIVE10SzBaRn13ZT9i
ZSozJHFeQ3hodjswZCl5PWA2YnRsPFA4ejlNX0h4U0NwTTBlZSUKemA8UTdGZXleNEw8KiE9Rjk9
Y3VKK3dodkhSYCUpPk9CfE5OdDh8S2V6QXN8RmMxQTIrKiErR3NxakpaYG4lfn4+CnpLRXQ3Wm1U
WWwoSShLVlMrNmt1Wj93RWNnPG9nKk9iXyp8Z2RUSW9AUyZjfD9fano+MUNFdWN1JWBzPFJrQ0RQ
Mgp6TUNYYiY+QUImaFVYZWUlUnR3JFRycjQhTVE2PTxEU2o+dzNoLWRWZHl5dSU2SmVJQ2dVa3Fy
ekkoTHBVUWpLeVEKem12KmUtdipPO0FOSyV4V3BsezZRSXcxdDFeUGk3clM5VzJ+R2lfczN2fXdB
YnprViRXKlI7e0BvWVUhNzg/R2BkCnp0cSomdWMyU3B1VWk9V35FKTd1bVgwKURXMU9AMXc8YjAh
cSlmbkI9Xm1UXkApMFNOQiY9bFgrSTN8SSE5YUYtbAp6a31HbzAzJWtlfk1CNTIoJTlSfld1YUdh
fC1gZztGS2g8eTNlRzRjU2oqUVA3XzMoey03ZEM4fFBJe1g9TEckJl4KekhTS0VMbSV5fntBV3km
aDIzZ3U+dDk8LWQjSj9OSS1zdT8/e1kyWWFJekxoYWlMNGprUkE4RnF6fmNxJntfbkZ3CnooeWdQ
bil7ISkxeT5KVms9TmplayRWPmNHUmYpa2hOPF4lUXhnYzd7YnA4SjdaKkRlIT9AKE9lUXY4YXhj
TysoZwp6Q3F0MCp2fnZwd1IpZHJgUm9AY3lucWdeU3g0KENhJnEoZU1fdzQlbnZ9XmlIKD43aGZy
T2dxd3kjamYwQzFPZXwKeiZ4K3kzcGtSM1olMTA0dUA4Pz9ZTFFUdH1YOCEjOTF8LWBSTyZxOz4t
WEB7Wk5EO1E8MmNLZjZHbnZrKXtJSyVJCnomZnFueEJGfGMkSFJUa1IrdG49UG17TDVYRmI8USs5
UW1uSk17dXN0UCZMZjkhRF8+RVREfmljKiktKFBLT01uRAp6TCRRdmJgOWhoeUQ/NTErKXpMbkhe
QFN7JHA0JkdHJH1lSCtfNmE/VnFCOWxkX0l+TS1II0l1MkIqUylaWEo0ZUEKejhaaloreX1RRklF
UTtrUDJgX1UkelZwQHlqTEp2WHVDP3RzZUVOXmFgPkpqcWFSTWYlYUUhRUBoeUZjNis3MEdKCno5
Sm9IU2BveldHeVk5eyhlSzVWK2N5WF9uXlZufE5uWCM7PjRxP3QpSnc+XmgtIyk1JmJTUnRHTWN+
QXdNY2cjRgp6eW5tPzdTdnh7S0lQeUI3SU9EVl5fNWFFNCEyU0xIcHN0QDFxNkxQN0RLSylMI3BY
PWxoTldlZXh3SmRLYyNWSGAKemEoSENidVY0SytsfmZjeHJkdipRM1o1Y3pALV9ZNUJ6Qkhqc1N2
bWArREsoMTZZUU5AcFVPQU4hJjx7TyUlcTt0Cnprc0MheGp6YzRBODNJZyZ5ODk+Qk18TVJVWn0t
ZmckRl9WN0BtZnJMN2ZkaHUmMmkpQT8lPllZX1B5QElsfHBWQwp6b05xXn1oflFSYTI4SDZsI20r
RXhBIVJCJGY1QyYzekNCfkR7WSZodk94ST5hZksyal9kfCFDVjhASFc8VnNFIT8Kel5hQzRieE5R
JGJKRCtxV3tgPkk0TEErPF9oKkA5T2p4XmI+dGdIO35nbUR3SW41ODtBRkpDbWU5a0AwKGJLd3hU
CnpvUEU2SU1BIXBkX08rSmQ9MEAobU8yXlduZmpDa290NmxmMHJTN0p4RUMpRDN3PnlWQWpzMT9i
QDVaKSZhfHI4RQp6am8yPl4/TShtSnAyUU4hT148K2hkclM9WmN5MkVvN0p6Wks5flQ7TDszcD1h
cjZUfExIQ1Imb1BzOCVEcnRyP3UKendrbT5NV0dmZU02eVY/UjEwcDYqKUFIJSVFQjRvbyMyKHFU
XlV7MXVYeyUyMUVaTnY7bWZFSlVsdVkpN1JAZy0kCnp3VjZhKjFOKj9wKEhHMndGRCNjSTJ5a2lj
cEw5WkRfakt2aEdqYGh9UWBBcUMoeDtAKlVBUWxne1EqNF5YdCFlTQp6PDxSfXgjIWMrbW02eDc4
b1N5d0M8PEVGc3hFJFF7QlE7aHpYfUNtZShRNUJ7d2lJfV5ART4od3BwUV5kKip4Ny0Kel5EQVNZ
eUhJWTZ8SXlpUSRBK1MteSVHI05oVFdBSkgwOWVAJmImJkZVa1lyYTk5VW4tND0rRS1XM1FAT2Nk
bDMwCnpkK1deJD9KOUZkS1pFMzVDSEFuenlPSnJqQERoOHQ1PGl0MGd5UzQpS0omVT82NVY/JFkq
bnNiWiMyNkFJaDU/Twp6dUIrRlNkLUxaWHpmUW44VD9hJnlLI3stUWotYjh8JDZyMVQlMWB7TCFJ
LWAqY3s7MDRARDdZPiFyUThGWjJ9eXgKek97ZVJpIyZkRHBIdndfUVM+RzZfKkAzbXwrTT9VK2Ek
JDkzMk8kekEoe2NBWGIlb30/P3RHQ0FgNzMhe2UmflQ0Cno1akthT2laSzc/KkI7ak0tMW9GIUpB
U3wyc35sbSVaVSFiNEU0OWpfOVlMYCUzJj9WOXM4THwrKzxmWk9BKUwtRgp6cDdHfGwjZz8/empv
Vl9FWncpNz1sNlAoOTJFbU4rS2dgWkgtQj89VlgqWEJVeG5wITtgX0B5dzl8Ny13JH17JTgKelpA
KWB6WVVnYEl4KDxyYjBZaU9iTDdle1hqKEYpLVcke1d5RCRlXktPSHhGKFFKQjhMLUBDTUFJX153
dXc3dWs0CnpkMDJgbjE5U1N3ZiVEU2hkMC1uVVcqNzEqYn41Wl9taFRPKDd0eSM5Kkg0Zk1aPlhV
SlF1byF0czlHZiNaV3FxOwp6JU1GOVI1eHl9dWF2VX4yN0NGYVlXflhCQVlETmlKPj9gcGd2Y2Bx
M0NUQkYpPkt8YUMxLVB0UzReJnw9NUpiNFcKelZ0PSN1SEBvWHpsRkhOOVQ7bzBMek45QW8wcUw0
OTNGWk5BKFNKVFc1Ki1sUkNjSFRpPys0NHkjUEQ9Rjl+NUZHCnpIU213KytpeVFUbTdhTHM/Vy16
cDNPLSVyOF9eeUJxaVZaKFYwcUA/JU5MK3o2dGJSdkBqQThqXz5NWk4mRFV3awp6VStiI196bTxR
e0Z0PD1qPlZSYkRTPzZTUGEhSjs5bmpmMzUoKHIyLXpuJHQ7UGtnZVFlZSp9Kl9SUGMyT3tsJjMK
emxPSyRoIW5qb3ZBcj8xJUwlJjVhNHtMMDs5aGU3c2dxWW1gY1RHNVFpJShoZTBoelkoPiFCWSlv
aENfTExEKVdGCnpWWHo/M1RPKGA/MnAhfntNKWRQV2FRVGtLeHJZTndybikxPnhrUnIqJigjQDZI
WnwpK3lVVSRVOz17JDg5diZGVwp6Wl81SVdrV2pefT8xJjZxeUxJWl53bk8odlppS3phYHdhe2VD
TU8+TD5lVTlIeml4bSlkYDhDWXdTbHEmRktHUkwKejhCRHJ5e0ZrcSsxbz4qbWItfGJsdlFKcWAk
RD8lVGEtd3wwMlpCKj93eF8yY1lvJHBsdVI4OXd4OV47TCNlR31qCnoke2tfS1h5Rm47dXJOcVZk
NGZqUnFgYHY1eXMzMD1HOT5icFBtS1dBKmU/Tmw3NTk/ZSZJSHVZbmZNck1Sb1NIQgp6XjlIKHYw
MF47eGdwRzleRGhqRTZyIUAwdjRYMnIhcHQ9bEw1SzJ0fEROVzR8QWcwRjs4WVQlU2EjaDcjJkpz
bTAKektsdTFeeEheOXlQR2oxTXJZN1NOc2tQQ1AmfShfIT9PYDVnQ1pUUHV3KmE/Z1d0KFVpZDN7
TT90YXM0azVuZzVGCnohcXIhJWlfUV43UHh5PVFwUitFZ24pNE5BPSVHNkA2fHoxR1IkMH56Jj4l
OXxmRnRBNUdOODdTKigrd0BvS3JncAp6c24tZDxZTmZGOWNsays8a1hsKGBXb2lya0B4QlRqLWNC
bkRmR253b0xGezVQPzxsIXdwYUxQMjJNYEVBbzkqdzwKekQ7Zjk4UktTdk4rd1ojN1ZDUnNidk5R
bDRNNnY8Q14rTWZzUUFJOGU5dnVINWU3YkVfYWw7TF9XfDRsP3F2TktWCnolQjA8JjhlR0oyPU1G
QF5JSiYmJEJWRUZxJXk0T0d5dnl9b2dMaG5xSjx3TTBMTWstdU9TUnBqeUxXSis9dX1vegp6VHdA
XjVtIyUzXj1ANz1eP1U8fWxANjJ7ODhLRlV2THd5bEM+RklWNmEqRFBXJnF6RT8tVThKLXBtQW47
KWhnJHsKelUpQ08wNGhATlRBVUJHQXpENWM0OH58el8+ZG9GY3Z5clBDTmFLYWZAS0RNbzV6KDl0
KmslTVZFN0lhYURxRm53CnpHTCZLN1hrU1U5cTNlOEJQXkVrUzBPe18pK2BXfnY2e3EmY0JePzlk
OSZhMGh1YCFeKCk0QzFxbnJIM0c7fllJYwp6S2lxYClxV0xGNnlTeWpBTC1xRm1zdXEzIW8wSSUr
UF9vMjI5RkVGNXpwVW8tIU94UDw4SzJXVz1VVH47WiRFRmQKenZMdVNuRWdlaE57IXl8bHF7ZTVr
cEI3I2g+K0E7YlNiMUdXQnMwfkghREhSeGNMMkFCZmRIWnpTP2g2NTwjYDFNCno9cDkmUTlVUigp
cHM0d0B6YWVPVlpseWZrcnM7VUxkbjJGQ01FY1JebWxZTi0tU3ApYVNVQEhkJFg5fEJOWkZ8VAp6
M0pYM3cwNy1LVClRKj5sRkBWS1I3Uz41PzsrTiRVVGBNYWZTN2NWdW11YXoqRCRhVCZ1K2kocXVN
VH54O2h+cFgKekFWMDNMVVYjNXl5eDFaaVVoRnhwbyR5Ujd0dWRTSz4jYz1UYV92WiE8TGBuNXtH
WjYhWFJwWFpjaChQWD1pdUU0CnpnfDEzfDBNS3RSUEskaV5tclQjZEMjUkJndGFXMGZRaD9LfHJN
P0l1O052YUFhRy1pYEI2a296YVBvUCRiR2QqTwp6M188amJqNGdWN3hiYSNTKEpMJko8MGwlOGZA
MVZhKFpXVG9ORHNuNjhjcjs4U1lTMm9ofjlWUT09VUVHWSpXQXgKenIpYVpaRCh0TlJRYXE7MXRg
S2dZVSt7VnpjZmh8aSglcF8yeHFnNGdpQD9TSytxRXllYVVSQEd6bCsqezY3WGdtCnpOd3RoRyN0
eSV6T31hQl5rcHg9WVg8TDdLMTc4dWpyPFk/YmNKYlJKTkpUbn13N3ItVFZRRy1ANF82aHJLKlY3
VAp6Vmo7OUB4bVArO1c8X1VCM0l6Yyo5fWhCMDcxczUrKipfZFFJdSh0Ymt+bFhHTXAlZC1oWEhs
S1YxMlJHbTgrX0EKeiliNUZiKXdiSVBMZjw4QHBhK0FhRGhyUzFLPitKc0tNRCE0Ul9nKD5KbnB9
cS1rJnlFTVRWMSR3O35zZiVaTlNxCnp6ZmlhWjlnZ309I29CU1dWRHk/MzBYX1FWJmNrTishMSh5
NkZNYUwhcn5TKjxIV2BTa0ZCTSklViF6MjlnWkk7Tgp6UH59UnhhRFpjTXJUTEl6KlI1Tlpib3lZ
JlIlZ2U8PW1hTTM0U302bkQ0V05tIWs3VUhLP2ZWdE5Ha3R2PHRfcnMKeitOUGwqQzxSdDNuNXBL
KUw8Pns2e0dAeWAjciVDLWt7WH5gUUZgTm5lWVJ8ZzQ9P1YwPUwod0BHQlNYbzN4Wl8tCnplTjc0
Y1R6PF5fSnAxJHpKLWErZXswcnlSU0Q3Z2BMMEpFezRIaGIkU2RKYCRMaWB1eG8wbEs3WXA3QThl
bT9VNAp6WU4hPj9eI141ZV9sbng5QCN+cnIhIWU8N0ZIfiFBazN6I04oek82d2V6cC1Keno+UUdB
VHRQZzxodGMrdllofEUKejkkcDxoZSlSenp5OUhWTipvbXpObHY9dkhYWTVoYF9eIz1kRF5+Z1dF
c3kjNyZ1eDFSKCRidklhcjtXJEFKQ2Z9Cno4V0U2Uj8lMiUmU2V4VGBmU1E8VHl7e2k4cSFtNHJa
X0lYYVRLKjwmJUwhWSMtS1JgbVZDZDlWampFRkU9WExMKQp6OWNeJigpeVpldXlRUV5UMCQjZWxk
fTVafDhGK1I5QT81UVhsbVNQbD5sfiZNdnVMcDFuJFJ8X3ZOPVU1PzJyel4KekoxbmpRUlZJdCRD
a01RQWE1UlV7T2Z3Mnw3Jjc8ekwrNCtaSTV1MX4hI3BNfVdKVnchbVk1P2Blfn1ucil+RTY7Cnpn
aWJXbUJkMSVJVklvSXdNVz96RV9KTGZDazt4OzRHYV5UOGV2MnB1S0hlbFoocy1HK2l+XlM7YW5y
KyZzdyo9fAp6KGhCITU9I1Z6dHVBa3hsVjdsZnhtSXhVQ1IwcDBmKTl7UWB5fTFGKHUpJjNVaWsk
KCZiQmskQHR4M3VFKTU9TFQKemNzdERIajJZN0NZbzRDVCMhTU9gRmk5OS1rbHdXVikweUZwIW99
Pmc4RHJMOHF1MTdSWDFxdVl3MUxnUVY1ZShjCnpQVGpna3tqMFVgRn1Ue0M9PSRqNF9mN1kkX31H
JUYjcUAtOEpDYXpMbWNsaWBrKEJeU3liYEImdX49T1MmUUBDUAp6IyZBTHJ5Zi0tTHtQVyh1KlYq
U04hSDVmXmM8YVRYPnMha0BsVXFmRXJkMUhZe1YxVntheGIkcTZ5LUhBZHhvfWQKelB1UUs8SXxH
bnN5TGlQT0B7bXpjWThWV3Q0YTFyU2J0Tmd8KTE2MHF1NnExY3gteHImIztoKUNLNFBoKUI2XnZi
CnpWWCZibT0lfEFNdTdyfFBiU0kkTlpEaTxVN2FaUjw0SmRtVk9mSzV8MzRVXnRXNjxlSF8rVGBA
czRuS3dXQVdycwp6azBtN1E/VzVHZnlBOGs3OHpXc1JBY0tMKWozLVlYSnFXPENKO1YlQjNQKzUl
b3daV1UwcnMraFdzezlpQWp+QmQKemJDd15RMDk1ciNJbjI5dGQ5JmFwWG5wMVBvNGNxSVc+JHZ8
Jn1IVmh2LXJWQ05KK3tkPD8+NUhOeV48WUQ2WDdCCnpPeV5sUjVKKCEtbCNld2QzcXJjcmRSWThC
ZyltNmt1PD1ZRjlfOWMmK0p9eF5ZRz9QeS0mYWxEQlVNQDVQZTE7ZAp6WH1SZEItI0Q4LSYycW9J
YXB+NDZuYFk8fWFKTnxAMUZlbEx3UkUrVzZkIWhMRWdaOH5QVztMISt1bU5XcD9XUiMKenV7IWRe
bElSNz00Xmd7LTt9NiZVNDNzdEk5b29yQygmeDQrNShlVHM+V0JmM2h4YVU3S248cTQ5aTxCdjA/
Sn1wCnpKamQoVkoxZjJ0Kns/Z2l1M3YoMj1DfHFWbDdsM1pwX3E2c1BZakRtMFNMa1hkKDwxUDQ1
PClUQDQjQmZMPyQyWQp6bT9Fb0A8PTN4OHpeWjBYQS0mQ04lXkw0SVRSN0c/NkgjbSlNbn5fbSRm
Tl8tYGZIO1VzdDRJSWo1PE9aQzF3aWcKeil0Jn17P3pPRTEhJXE7eDc+SXstYmZVfXl7Jmt0JlFV
YXdORlJ8PnUlMlFQQiV2bk49ayEzI2dTXiNkdmFqbkghCnpETU4tTkx5Oyg0cHNSeEM9ai1NTjMr
elJyO1NUTDBWWCZ8TD9OUlIlQ0V8KD91XmlTZUpUQzRhOFc/Wlc5QVp0IQp6RiVBZmAqb0xTI0ZJ
ZmB5N1NOcEJfK0NSYUQrcT0hTGhNeFZpc01LNloxZXk1K2l6eTVvOCVOJj1XfW0waV48XlYKeks3
cz8qKGxwdHNNUHpgeksmQ3hYSFhURi17PU1TWFJOIy0qY31lPipZdStLQXJidFZxYENVKGNAdjZj
JVhsb0QqCnpXVUg/PDhOK3BFQXUxN3lGWCpMSEklJmVFUzgxblByd2U0fnVpVnNEbn5XaEZtQmVn
cjxKMkt2ZFRPS2JuUn5EZgp6Qkp6QSNhTnVRIU8jbGw2U3J8K3FpcX09Z2RHRT4rdEZlJmspSVd4
JGNxX0pMWlNuRGJ2cEFEZjNeR01rK29rbzYKeiRBeGhNTDRnWTNXbDRCczRYcjdTcnJHWWdMOEdN
cmtWZHwqa1pgK0dJMXQ8PypAbjBBPX5AbXYyNWFJcy1zLXY2Cno2Y0xFPHBwZmEteF5xWmIhTlBm
b1pDO0orSGMmYU5KPkZTRCMkb35aMzVuTjBpbnlidF54NV4wQCR7RzxldENBewp6OzM9UEhGRFNs
OVd8WXQ/dzxeQiQzNjh6a0RRMTk3ME1VR08hUVRmfEFaVGMhMzw2a0VGJnJGVkRmUi1rMUxRK2MK
ejI4M1hQelFBdDBTP1EkSU5MKDF+SHU+fj83dEEyQTdEVWFGVVhvRjdGLUszOTM3fEgqdShARERe
Kj11JWV6Sj5YCnpmWWRXZzhaOVJUdXFyOHRFRVVNJD5HMSRSREk/ZncyWUo8YXRGVXNkVHBxaXs1
YjtqRFM1NFY4IztnQmcldHJuRgp6K0Z3dE56M00ra0pDVj83dio4PT5VKCpZYC1ZTTI+OCNqbzhN
KEcpRChoYjQtb3BaVzRzO08pMyVxZFp3bFZMYikKekNTdW9kcTFmaUBOTFJVNUchZnNmekEhWjg1
KFJhZ1UlVTZqMis9WExofVB2WClnV2RDemA0NmYoZlYkJCFBZzc1CnpPdVc9cntPamwzNj1ia0RK
fXFoaGZZOEteVmkoZV9fO3Z8UkdUTiU8cntRNz4oJnlReExiT3xeOSFXOW5zaj4kSAp6dHRRRDYy
T3F7dzZVUVghUmF1ZVFfS15VI3dPM3ZOJVdeOUZwYns4aDV1fHdkdStTODliaVYyOCoja2UzTDBO
djwKeih2bll1bHIrRDFURHZ7T1NiQXdpbDlFYkpWWCslMnFNMEJoKyVSX0xaO28pOyVCODxRenF6
RXhfWnxERllzMWg3CnpmMSU3UUdJWiNXYm0yK2A9dHJkfUJANl9HWDhrLWsjJSFKWmA0SmhIVlRI
K1Q0I1hKZmRKZUhMTypZRyphN0hmQAp6UEMmfjV0KyhwOzBzdF9OU2Z6NFNEYGxvVkstUiMzcUst
PkMwSjhDKyV8YEchZTdYNFMwezkpe3NCQG18ZVBfKHgKemR1TzFsbEhJV3ZIKTtmTF5VNX15OWJ1
fTw+UnJtTl57Zz1uSVJVN0VTaVpCSnIjOz1DelEwYWNTR0xiTGh0e3FPCno9Qz9vV1EjTlFhe2do
SnowfDBqZnhAYXw7Yz8kKDlaWXVZVzNTd3oobXJEe0FfUihQKkpSa15sdVF4NDktSkZZTgp6eUhV
aWZzRVchKzc8fHlkSDVhJlJEcUdlJVkmWnJzdnFsTykpTWclPGs9Xk53YVc9biFIQHJUdz5KQEhw
TiFhd1MKemE+UHxlOUpmZFl1S2tVOEkwcnFSbXE2YDJpVEpNOz5xRDA8U3MjZ1kkUElAYThHLTVS
eE8hbmM2Z1gtUl9ubVBoCnpMPjRmLWI8UH1VIVBwWl57NiNDcDExJk9QdUR9az9fPENuQXRfSXtz
OzZlYWNRVnNlNjNmWWRacjY5eEkkKncmZAp6V2JuRG4mRmZVe285Yi1ZPnpOeEoqS0c4N3V3ISVX
cFhOTyFBNFZkN3hkZUBVenJ0M1Fwazg3b0t0VlNXOXN1NDwKelMhYTltJihqS3taQ1pZb0okSEhL
d3khWUsjJCs4QEo5bEU9Tjd0NXBkMGxxIXlVRChgdU9DRXQ3aV87eWJYPmlNCnpALThZXlohYmxE
cHdrOEFpc2BtaTZQXkJua1lsZ0Uqc3NIKlYlcE05UHRwNyRTUUU3THBoOCYyRjdGVihhQiYwOAp6
TVh9R2k1anBfdUE5JjRpeWhZQzJtbnMtUTY4TmxATGIkQSNLQEAoZHF2MXkmP2FIQT5GYHBOfWN6
dypWYWszI0gKemZsTGlVaiY2WGFzWSshWHpDZXlEYUx9OGYrTyZIeGlgfHwkQ2diTUl5QEl3JSoy
VTdpMyp4MiZFM0l9UVo0dHBRCno2Xm5NdygheTVEPzhEU1gpclJQKih7PWBxcyl2JU04b1ohSCtZ
Q2UmTFZtUUBJQ090KCo8OHMpSnJAck91VDxWSAp6TkdzNHg1KGlEZzVTZTRVYU0qc3Q0LTEmZ1ht
RTZPUjBQOUVQU3ltcG9XTHgod29nakxzS19EfXZFNTU0JlhQQ0MKemdFQEdFd0BmWD0rNStLTCg4
YzNWKTgyYFIpLU12SF5+ZzxMUktiIVpaK31KPnN7NFdmYmk0S1YxKH0+STRgemJzCnpqKzdpN2FB
UTh6USREPHhIaFN1a3xFSWIjYV85MT5AUnpBSzs/WCZPNjMtRUtlNCVnc2RhRjNKeyVDeUozMGNV
QQp6RTZ5ZVZaREZFZj15M19MJk4pRmpUfUxafF90JSRZLU9jYyFPWDZaRHRQe2JrbHQkT3U3TjVw
Pm9QSnRJbVBmMEYKeipSaVlZZW9Pb0wraHp9RUtFTVQwZ2VHNVBEe0hUIURobEFGITtsbFFEfFdN
Q1Z1VFh0M3JoI2RUfXJLejM1ZnNoCnp4cjs0PSFlXytFVEwrIWdIaTs9akNwRU9lWndaVD5DWldO
MElYMmx2cyUkRlRBWUZBYkQ4eFhFTD9XQCZuTCQ1VQp6SnJFdmgmYzl9Qj4pfmw3M0FvNERaZFlC
Wk8rPjJhb3AoMktMMyYkRiQ9dEQzO28xd2tjYXkhPi0zJHVCX0NlcigKemFNUz9tOTthaWg1ZVlP
bG19NmFSIWIpTnBZYVF8UmItZnhBYmVwd0ImUCEkSGxifkx+YXd8aiFjU2EqOSNVJnpmCnprZjRM
ODdvZVooLX5yU2M7PUM9PXNgODFoX14pSXgmS0g+bCEyeiR0SjxQdUk5dE1+aDIhUjN3MkhBI2Y2
fG9+Uwp6MHI0bVRLPWFLZkE7NSQjUE5CQkcqXmwyWHc1Y04mTXQqbDsjVnBgaUA+SGBrQDlyWXct
UUQtdXs0KnVwXmYlT0gKeik0eldjT09QbjlaSjUjdHYycHF3PWRMO0ZIMUM2SGlsdHcmWlhHUGFf
aWxTdCM7RWp6X15odyE/aWw0e0N5amZQCnptTlU1TW5aKE5SZnRXN2JYOylWPlgqQExPMz1JUihw
NWwmTDJuLURUUj1MdEE7LW9wPSoxTHplOUdTKj9Tb0dWKgp6LSg2fHdWWD5kMFBuNSZQVl5XVjBi
NUJ2eTx6I2g5O2AoPys7WHBWd3grQG4yXkRra2ZVfEd0T3dMYUgzKjB3MzIKenQ7PDdKfERhRzVv
dl5vYXdgVSRRKDkjZDJwYWFxSCpTLURGdzlLRks9NF5MejY2aWxGSmxrWk50Ti1rbntkLXNECnoj
YlQ1ITN8Jnpgd2wxPEg5WS10Y0p5fGVGN18hOVQ8ejU8QyFpUzQ3dGppJUpuSENOajxDNmVBZUJo
YlIwbXt6ZAp6dXpIY204KCMqb3EmWXJfJl9SbVFGSyZQe0c/JEYjaj9hLU9yYH1CNFlMcEhqZ0Re
P3RCfUMjVU5QelM+MHg+blAKem0lfklrYkpOVi1hI15jSi1UfXZlX0tee05mZCZZSlo1RCQtNUxw
STFhVzRTdU5BMnh4dFBVMmRsdT1gS0dwZEg8CnpmRmRfWkx4JWljXzJjI2JQYzs3WGlrM0sqI3BB
M1pqRiEqTXBIRn04e0gqJFheN0hZfTdlMWRuSC1HJElBPGFmMwp6Y1lpcj5jRzFEJE1nPE9SdUI+
RSoqYilBYDZaKChrbShmVDA+JnBJRUoyMHx7SjVaazBhV2piRDl4eCEwZyFKQzQKejdFZm8mTjRz
cE5MWTh3bmpge1NDTzNQdDh1ZU1hLTwwa0Z3aSN5NUZQdEJwY2okS3xIaUNuRCVnYWN+amAofWwx
CnpEVV93TWs3cDIqKypEKypLa1VicTAkWF9pMXNBd3FKUn4xNSFPUmg/IWV4blFUd0VoYjhxNnpv
ciZAN204SzBkOQp6QkV7JnphO0lhMk88JGt6eD8wUFkmMmBTTzxBbzZaIU9XJCtwcD0hSFo4UD40
XkAreDlzQ21iVmJwQHwlX25gQWUKelNze209cDZzKjVgKi1janlqJmk8WE5kMCMpRDF4NWR4OEto
RmFXOGo7KnRLfDZ6WEUqWjBAYEBzbTRRb1FBUk1mCnokMnc/VylfenJfdnNybFRFI09QSENTP3tS
MTVJK25XZTFRb2dMRzF4U2dTTEtFI0BYMWFDV0l9RExARjl1Kn1gRQp6fEZsSTAyO2Q3YEFwak94
dU1yWl8mVj80QCYyJFY5M0NDbVBqeTduKDA2KypwQkBwUzNMaXQrJXhNMlZ8TigybzIKelVTTGBU
PERlKHp0ZUx7eFd0K2I2VGlgNlF1OyZYZ0hYMUA3XjhXejw1TTd0QVoqTWV5O3NrIztHSjVYa0tq
fipfCno8PUg3PkUobGIyNyUjYUNINnchOV4wUzUzV2x8YldFR35IK2Jgc2d3Ujh7MmFIZTgkMXNM
UHQ8Nn1jOFJ4OWp6ZAp6eVV0SSRDPClTbE42fW9DKnBmbCg2YDxwcXhDWDI8YFV4aSk1bXJ0XntX
d2ApNzU2QmdXTE5lPFpoekZrWkVxeE8KemM5V2B+WU1AV0tvPURVUj8wOHQpe3ZGaHNzfDdYWmlk
VUZUNSFLZlo0bUwjQ2I+YVA9aHpERG00VXJTcmtpaHRfCnp1TjRHREAkbGU7Qn0rV1o5U05manh6
Y1NzUl55ejhRUmtZYVFaWX5oZU4/VigyPWQjKGRiYWFTJDJWSTtwWnhaYgp6S3c3KSklJSlIS2VC
djx3Wmo7UlhXYEtwU2dIQlpFR1FjUEZMLUZ2Nz95aEBeVEBoU1lhND9UP3hCTH1gV0RWTXcKenI3
K2xDZ3NyWH4lSUhYcDFubkdZXk8jNjxZN2UwR3M+SU9uZjJuTkNiUWlXbHFqKiE8ST84bDlaNHtS
ZTUqSEI9CnppOEU4Q1FpTXImQ294bGMkbnMlUDRzUF9NeEc+bylUVHo3TjE5Pm9qM2MzJUg2X2kz
WFAtUm1JZnNKejJPRy0hLQp6OEFKdW40WF5mKU9DNkFtPWw1fG91VndQeWsrYTk0PFUjdG5HaW1S
MGBFNDV+WGE3RVR8RWFtRnZBQ2UxQjg1YTQKej1YM31wVFZyRGFKc31eMGVkeEx9QXJ6PkEwSCEt
c0xCKWg7SVNVKVd1YD8zYlR3bXA4K31aTHwhVW56eU9KWmx9CnoxRjByMGNUazl1NmAqNmlfZHtK
JS1MSEQmcVNSWiUkYUB9aSNYPX5lXyVKZjdATm4pPDUhcD0pMiUyc2A/cmhRJgp6Q21CN25GQ3RN
Q1RBVj16M0UxcFIoPChVU0ppYmtDbVB9X1UzLXN7e1klKUxBbCpYQ2BfTm8kUHZ7dz5wQDgkP3gK
enlNMnRjIUJ1I0h2MW1jdlNecyVyI28+WTdkRkxYfC19YEZrcy1GKDVgRUw3WDtXJiE/M3VQfWRf
T2k1PUQ8YER4Cnp7ISE5fVUzKWhTMHtDcDN2RkdzPjRMRGJLdGBFYVB2TUUhVmB9MlZzMWV4Rm1A
VD8mZm4qbGlZdlZ5KnspeVBFTAp6Q01mUEtBbmUxNm1sdntHRHFlbW5PWjdmcmtqOClUMFBXdHBg
Mmg/VFNaYyohNFU5bnJ0UWR6RStpT21CQ0k/V2MKeig8WWZlWW4lR29mTlRYNVNSXkN4Vy09Znsj
NSVFLTslRmdvWU5pYmxrUFFPTm9kQ2BUTGV4d0R6Mlh4RyQkLSl2CnpqJE5CQENvZShNUHpNfCF0
WDxobHYoMG1ZQlJ3TUxsJj9xNWVFV09oVkJKQX5sck80KHYlYU5IUH5PdUptZD9sRAp6e2prNjZn
Vk5ZTE1KS3R3fERkaz5BUUFlPldYZU4wQCl3NnNgPnNCRD5NMD5LekokKz84PGdzX2tePDR6e3p0
QFIKekBtelFfbTFnYlZSYSg1I0Q4Zm5HWT1udjhpZ0x8TDFKZyNzP29qJXxzOWotcHR9OWNRVCRy
Zkd1M05vOzl1cXZ6CnpYcFJxQnF9WWkxekA0UX0kaTxkdlo7TTZXa0VJejJzRHpiMnRYUC1jWVdW
Jj1NRX0pYXplPVR7JDReamNsamNyWgp6dEhhMnl4OypBWG5gU0dgTTxOUWpzaWdYMXNIcEpxQX1m
e1VmQmRoVntZez5JTVpuJXd3JEFmK0VgKk1+XzR6OGkKekpCaWFuPFRmNy02MSMtI0lUVHkpSmlR
QFBhWkN0VWZYemJiI3t2KiQjYzJSRzI8QlVUc1NHRzxRcjtXTkxaa2ZACnowZF4pRDg3TT53WklE
OCh0KjNCfVJyOFZ3SFg3dnhWaSo3Y25nJFVIYyZ8WWFqRkBMJnRRbCpMQTMkfmd7Pld1dgp6e2c5
XiZlKVhOJVReVnF2Qm1AUWNAJk57VmtfY2UzIUUrelM9VllOSjBHNlRJYUBoVmc1all3MSNkT0s7
cEt5dCMKeiglayo7b15eWFRxWD5WVl5Ucz5ndz8wMlQrNnVrOV9SKylCRW9VYiZ4M3M2VVhNNDF5
NX4+MCRzU3I+Qm5WOTdiCnoyO2VhPntrZDVVdCEjcTZ3WWdiamR9ejMlcDJ7Jjw4Mm82VD12VVUj
Y31FQnZNXkZ3P3NHPiZ1IWVSJVAmfFpqRAp6eTVaRXUjcW88LTdTSEA9NVIwIW9AYlJ2Mj1rPlFG
Y19ERiNmV34razVzRmhTJVR6flh2UmFqaVd3RXF9aCltWFkKeilMODxFdjZEdj4hUT1ZSkhreFhM
UD9zbCZhKGhkWkk8WH5oWFU2JjNffjNpMj1rWjBZMipydCg9UD5JcjZoRjFOCnpLbyZHME1JRGp3
Wl5aOEdEfGZPd1hYen1TWUFufXpPPFpmeXlJd29neHN1bmYwNU99Y2E1KW0rb2UwTGxpRFF9ZQp6
cDJqZW5EU1YoemY7VVU/S3JjaUZwZ0lEP1A/QDZsaTRtWTVMUitaYlRJOzRCNU5qLXZRVjNKQTdA
T1gxdkVoPnAKekM2cENNQ2EjYERQZkRTTW5MSVNyJm1MK3BsJkJUTFA1NUB2R01FfGV6QkwkP3pg
X2BoNSpmI1lYdHV9NHQ9fE9FCnoxWWpOO1Q/K1lDI3NYaSglM0pgZShnQ299KkZufU88bEV1I1Rj
RV5CTX1ISVEjUHx4UmA9TURZVjN5KEZQQlRIRwp6cGxAYXI5NGt6aWR6OEtAQXkhcCh7el84MHV+
e1JQbGJYUyNndHNubEhIUktfYnp+WmQ5X2pwaW01O3pMJVpKfDsKeihASFY2WCUpfnlEWHBZTj45
Q1godXhtZ1l6Y3FfbWxrVnFsXkJZQXJgUGFXS1pWV0dicHk8YFEqXy1vX2N5dX09Cnp7KjBeYjJU
U2I1YDNePHFCeG9uRVlSKnZNOWU9ZGFoKmtveDY/P1c0dCVAdlcxYCp9cnB3IWlBbkRBcWtJYGA2
fQp6Pk18dX13YTdQXng0d3puc3FMLUVoQ1IqdUhUTEQ5cl55fEdDODl6NVUxZHt1cHVmTHN6cVJY
U1hyO1puPD44SHIKenRBfH11QyFNX2BVI3lrPWM8MGUtSjd8NDxeKWVraGZKX3ljaGN6KEJsKndL
VGZqaTB5V1UoT0VDVEljKyphNjlJCnpmTiZiNWw8RDJIdlNoeFcjRkNZRUAjeiFMYk9vMUJCMjNL
MWJEKFdnNEE+aXM0NTlRZEcoVSNzKSsxemlkcFhQbgp6WmpoKWpVMUYlOG0/b1BIQUA5YXk5PmZs
I3lPZlohUkd+RnBWYzd1VVdlXzRkQUZ4XzhsOTBmO0U4fk9VTXRQQUYKel9DUU4wVit9ZFF7XiNu
PlhzaiF4QUB8Yz9pfD9tSVU2X0QzblUzR3o8cWIlbjE0anE4WWgya1hBXncjI0MkPUslCnpPamhX
KztLSlBObSg2b3llUkVUPkxUd2Y0LTNMTkNzYWBpUypFZCRWbShfdH15dGE+UXokYCQ5KHd6ZmJG
KUxgVgp6Z0Mtfm5NR0ZoUWxXezY0bjZzYVpueGFVLWlCb2IhLVdEPWB6O1BjRkZkaCopd2hoIWc1
b2Zpd3MtNWhNeDhYfSsKemR8VUVoZEA5VDswcD4kTiN0O3sxYz9RaEJffisoU3ItK3JkXlYmfCpZ
KUM8PDEyRngyUHZjb30tUUZ3dmpyIUBXCnpxYW9pY0l9NC0re15aMW9yJHl9P080d2R+NWF4dkZK
bzs/Wjw/PkZ1QDA9NVdgWGEpYXYlI31BQDJRVCNAPVd2bQp6VmxraihrQHZsM2tuYH02NXZ1SCNN
PGw4cEFgUytLITE3ZCk/Un4oaTVPfGBMYz88WHF7Mk1pMDt8UjFEcElVMkoKekUoNHhnLURhV3k3
Uio9ZytGfXFjQlgmYHkjcjhsZzJeZlZEYVReZk5mK156bWVoTmVISXRpSSZOOGo1KyF4cVM+Cnpt
MCZjRFdfQVRPZk5Ce0N4WDF5ckBLT3tBQ1I9fE1wY15FcTRkPmd5ZD8rS2RNXzEqRmJ4bTZzemor
N0MmRTtpfQp6enM+SkYjKFMwcGt1MkdCblBAfk5BRnU0YHtneFZAVzR3SUhKOW5uckZWfDJGNjlo
a3hPajxKfXtQbCF5IW1hRGsKenNYSGZ3e05udDRHOVg5fEoxMm5yaTIkWHIyWG1MYzc9eiRNVmJ5
VC1zREgjNTUtNVVAbUwxNHlhOHRVZl9Cb2UjCnphbU1UX0gtbDREeiU7eGxHYVZrcjB5KUVZSUJA
LSZpdl5hcS1RUHpqeklsRz4hdTAtKD9ReWdRZVR3TGZSUDd1VAp6b34/YU10WENnZUt6dyk4c2J7
bWJQNURZOVN7ezByWSM3a3dKVSFwbXpqPU1yKzx0PUwoQkJaWVE0T208VD5SYjcKejxKR0IjMTNL
Q3soeFd9QWpxWEZfcHBhdjloWlQ1UFd0RnBWTEpxZi0hS0ArJG5MbV9hTyZPYkxYIV4hYWopKWAo
CnoqI3pMNm8jbTRWYnFxPzUtJDJaNjFxfW9NUnx1NypfYGEocVB3XiZ6YWdzKHxrNzkjdyRnKWZq
MzsteCpHP2M3cAp6MjhLbDNUbXhabUBrZFhBODFzWSg3MXUzeTEyNiNEb1ZrM1gxSD1LR0Mhemkx
ISQ+cUk9Z3hYMEdXbGNxeGROT18KenY0PVgjVVMrMFhXZjlCZ3RQQH1zZylIQURJc0xZTV8leGUk
YHV2TSleOUlAYUVrOGFpYks3JVlWbjhiMGJrVFJFCnp2UGsqaEolaE4rYnB7ejk2cCgwQjVaXnkk
RmBnYXVGUHU1OEplfUMrbWhWc0wlcDRVM3puMUVpcDtCblpVM0ckUwp6Kj1hQjYwSWxoKDx5YD90
em5tRGxeJXklaiNZKm92Y01rd2UyJiUhUWVrZ0pmUWI0QWhqWVFUWmhkPTg0RHdGI1oKejBUaiVi
dkxlS0FLbTJgXkRqRFRENmpkditMNmhLbkN3aFVea3B8aiVNI2ZvWCM9T2gtbStHbzhZbzZlckw4
P2ktCnpBOEVSQHRzaiFQfEV3S2JVRkxuZDgpZSFmS0FVPWZOfiRpMG9FcT9xTGk9N249RFNgeUgm
bDFxVXNFMHtFPUVIbQp6YEtXPEZvNmMjPWc/KUY+e1p7cVYwRj1vQzx3ODNediVjZ0RLbSFvMShM
VzdqTjM/MHBMPH13WFdQcTAze1ZmIUIKejheYTdWP2pAN3V0JGlZSkdIbnVyWitMJnQ0RSsqUkol
QktObyluMEdTaXhmYUBnP35Ed1V3ZFdhdDwqNnlJaSpJCnp6JXBvKVFZZU5vMmlKaUhoRzgxdXor
XkM+PE9Vd0YyMExVfkk0bG49RnAyPn5GajxENktoIy11NTVxQlJVQHk9Qwp6VmheO143JGBEaSkr
LVZ7WnVlTEkqdSQ2N00kKnt9e1Z5fGJwTUEkI0AzPntwbilzeClMOERmUDwoM1okXmNybU4Kel51
VV93PyFrTClYP1ZCUG5BRHAwcVk8eGIla2FUKFg5V2lCTFZNI3YxJCljQlNHQj1veChCTDd1fihs
akpXLSp7CnpNTVhNMSlKc3x8Pk9mezJmRiM0SVgycWF6c2pXM1pFRXAkYGB9WWNjRTR2Z2M5ZmpN
cm48MCM0Mj1hdT0zekU2ZAp6eU5IXytGUWE5OWM7JFgqSVF2e3ZoI3ZZajxKX0tDMlAqOCY0QlFX
XitUeWR7SW0oIzdiP3V9UnghdllnMVdydDwKenpDJm93dHlrX3p1TVNVblptfWR9OShve01rZj5i
cnN6aVZsd0U3bkVtMSVmcHlUPWY1Mz9NezgkTzlgMW4kcGJDCnpLOGxWQWpNWUwwI1I0KldjWlYw
Pl5oKn1YRHdrJiNCTk85X3EzekJ9QkQreWlzNitPNztTb1lxalQqej88Kj9aMwp6OTBzb0QjQVk7
VyhwQWlgTHJ9QFluTVItbGdiMEBhOVc3TXhER1EkSFRtWj5LYnJnZ1Qpdip+P2g4O2pMSTwjUXsK
WkcjTVV7Uz1YTkJWaiVTfjUpZkF4KkYofDN7e1hnMVYoJE98CgpsaXRlcmFsIDAKSGNtVj9kMDAw
MDEKCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9yZXNv
dXJjZXMvdGVzdC5wZGYgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9yZXNv
dXJjZXMvdGVzdC5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjQyNGMxOWQ5OGI2MjFmZWFkZjNlNGQ2MWY3YmZm
NDcxMDdhMzc0ZApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgNzQyMQp6Y21haTNieSQ/IXdeb3JG
NUpYVD84NUtsd2RJJUFPZnVYeHdWclhWeTJtdUtKTmtLIztnYHE9MlFqbkJKcShNPzcKekM4USgt
cjFae3MmK28pTl9kZlN+bzt+d0BZcD95VCp6ZXdkdGlgUF5nQkZBYyEyI1RAKnskYGhSanB8TkM9
ZCs5CnpTPWEtXyNYLXMjdGN7eTM1SnI/fWczeHgzWld1Zlc/UCVfWGstPUV2dFN9TjEwOVE5VyNA
cT91blpnfVcyUko4bgp6QCUtKiMjOGRMSUJ3dFFpTWhASGk5Xm1eeFlsKDYpKERzMnpPaHsmV2E/
bVVhMmxtdVlRan1qWVhuREw1JmByMVkKekYzSmclb1RfLT9ZVm80V3t2QTQ9MEdTYFYxcD5OdGMo
e2dZbUQtMWlPI0VSNmVnUHtpSVhxfldMMmxOISE3MntHCnpWNkZiSk9uZjZiM24yTU9kVnhTN3F9
a3N4I0o/Z3p7dlZQMjVoKDtIMCl2YkVKKi04MlV2Pjg3Qj4oQnBhUlpiPAp6PmN7dEUlPUw8YiZ0
OWl+Mkk7dGtlI0deLUVDQFZII2RIckVNKnFvMnxNfHdgdE51I3RDQztZflg1UHpPJSspUzkKelh6
S25YSklKR0NwfFUxPGlmZ1BVPjZVNjw/e3xDQGB3Wk9tXnlifDkoKF50USNANCZ2NmxiSHdIY1hh
KCoyUUBvCno5UXZnI0E0blc7JUpJMj89X2JJRzAta2NZNzhPMkVQMDd3a1FVSllmaEhCMCRjNTlz
KjU8YkpTSkhHeHlKOXdHLQp6KlYhaCZeVXJlRlg4ZiVqNTllUC1wSWViPUtYcWw/OT1Ed15lRmFE
ZDIxQWY0PkZFeEtAPmgwZHIySjBYdnt6bHAKemRYQyVRemYoOW9oMjFRfXReNntIN1ZqWTIpbjBl
NEQwIylYZGAxOUg9Xn09X3tOU1RLMG97MTZ2cmdocHRhNFAjCnooZDk+KXZYVT51YHUpVldYb3F0
MFpCYFBgYEA0MGNIQzRQcTdQVkllRX1aeSgqM1FjfjZJYy0xYmYpNk5IWC1WaQp6WnRIdmZQSUUp
JjsjS340JE0xUz4xcFRWbXk2ezZOQzhYTE1vSkRueT5lZGBrYWRYLTxBVDlqYF9Celg+Y2ZwN0sK
elJMNTd9MXxDKEtGIWVSTHJrT0piK1JRPnZSdE9yPlZEZX5sQSVBKll0bDx3RSQyaXM+JnVuTER3
JUV8ODdjcUFACnpuSWdLe1ROOTw5ZSYjK1U3dz1DQSt+fDR1VVIofGxgNFpBbj11RHRCfEgzcnQ8
eX0wVko0MThDI25FYT51aVNKIQp6SjVGVjlBbnpBb0dWV0pmIVA5MXNBMiV3U2UlNlZiLVU1fTFy
TXhyc0pQWXhhamo3UiNHbSFFQz9jTlFrSWxYTjQKel5JVjVaRyglQ1VYbThhY0hPJFZAYWpTMmAt
TVUobzNIYFVKIUozQWY8SlkjMUNrPjcyZHB9KlhwUkNQc2FjI3sjCnpucTtmKUhaVXA2bX0pZlR0
RHUmKGp2YWpWR0hjOFpWUEpvYDZNRFlqUjE/VmVWTm9OQUtPczx4WEVCRWJWRFclRAp6dnBnKWJz
UjNFZXFTTXAlUF9WJlApRlVsTip5KmNEMXNBJUVJeXEkfCk5bGpYbkQyQVhVfFA0KDc+U004QlV2
d24KemowYiNoejFMdlRfdjROJCpOPmp1XjJ0PXIlcnY5cE5LUVBFXkpUJEZse215cyZXcVV+MVhq
TXd1Znt5KiZ6Pk9ICnpFUWA4KlVUYmNxeXk/LWNQJiluITR9VjgoSWBgMDFpTmZCfFokK0VXVClF
UlMxQ2lYPk1jQ01pN3RpTG9SSWFMcQp6KH5MYVhSV3BJSzVifCQ2KU1rc2klTjlTdWFAMUd4XllE
LWQ2TmBITiFVdy1OY28wIyNeVlY0S0BUNUVseSlwRiQKenNrKXFjSi1uISNvIWpON1dmTUwtaGtp
NHo0U01PIz1OfU10PSVjTl5lbzhJfm1AX3JuIzMxUkAmMlk0eC19TzVXCnp7WUlteVBgNHZaXj5p
RWtLayFpIVJ1aUhJc21yO3c5UGpKcHJPYUhWP3ZBXypSQmNsYXtBSngkSERNM2lFMTcmTwp6cD4l
PWpkYG0jJHEre2lsbVJAfStDOUJ1I0oxSS1EPENZRVFPez1yYXRUVk1NLVdLcSNXRl48PV5kPips
WmticUwKenJ8JDFnWHxVQVp4IUk5dHVgX2pUSitIeHlrMUgkWCpyLXE/eGdRb0R3ZHZRYytnMm9v
PTgta2ZkMEx1Ml9MKiorCnpfYWtPSEE2KVpKQmB2OzQ8WCNRMG4mUyZGWlBZQC0kemFjfjBUfjkw
aT5We3tmZiZOa2Jte3V1Xnw+Z18oKSlNbgp6MytRTmxyYWFyQkptc3xZY3h6MD4kNjkwPlQ9MThi
biFaY2QrcFotZll2eFQ+KDhSe1VWMnRjOXBOfFF1MFVnaDQKelRSe09maXliWktMR0tBTl9LWD8x
Q18kJWp5flVyMFRQdWtJR1IwWSpJWkAlfWcofn58MytFNCU8fiR7eDs0PTk7Cno2bSZMUD1vZCo8
KTZPPjBBMUNmIW9LOHtURG8mcGhzciVJaykqTWYhM2xpalVTWjlPdT11aH47O2hGYm5mIUUoNAp6
PVFSNHQ5aGAtNCV0cE1adlVpQU94dXZXQnJVVSooYWdnJT52d3F1T1A1clZ7VWUmQlU5RCN3VDhW
JVU1UnAkdVgKekFjRXs2RnRFNG4/ZmhuKSVNUDchWEUzeE84WnUxWEh6cyMyXmRwb2BoYVRVNGgl
el4xNTA7WT5CP300a3ZWUUlUCnpaRW9gJWpybHFEMHpGbmhFe0MpSkh3cnpoLVZYJVFHcCpLQU4z
aFEheU59Py1YOGhzJmBKUT9kI2JuRUxAMnhgbwp6LXRkfE1wbCQwJDJmdHdyVlZTdyEpTFQkKHB4
ZVdBbF9mUjd5RzExZUBmejQhQj09UntZZH1IbHA7Nzl7K3ImM1EKekA/V2VEMHV4ZiFTKmhNeHdS
T0lWWkoxTXtISns4WktCWmFIVkQ/aXV6czA4K3FXSjA9XmFqUUArdkw0MSk1QTMtCnooP19EUi1N
cl81SWN1Y3YjbnxhJCZaQSQwP1VHentJP15NUnk2WW4ldV84KmNqQTQtMUdrentGYHVkbFRkNnUk
SAp6RD82SjUhKURYbyVTP3U+JGJZJiptREx5VHUzNGAkcyNMNSF0LVJRNFNDam1xcTcpVnVFSyhU
ViQ5XzgwRFhZM3oKemJ3TlRydmZ5YXp0MXlpKiZHeypuZ21SSHkmQ2h7YGQjYzBTQGx1enI9PTE0
blowODhQKiZvaFRkaT4kO3QoUlJgCnoqbzA1eStqQGR7b3B7RlRAI2t2YXNrTTcpKGk+LXtfPHoq
diRvbm1yWGU9Xik4RiRyQiZEQyRVeSYhSVkrJWg9PAp6YD0+fkBua34qTz5VczdHNT5uPk9XPXBv
JDE9TUtrQTk/U3k2PH5MWWRTYVA5cGBEQlk1MygzKCNKd3ktLWh+bF8KenlAWF9uS2x7TT9VdkdV
O0FzOD1xa3JVdXEkMWE0K1VVLWZtKUFteVNkY0ZeX0xXR2ElbHNoOVlCaV83QmxkNXxuCnpaaigo
STFKNDViUXhgIzdKdVU+OVJ+VDZUUlFrNFZ0V0oydUZOdk9tV2F2aiQhYz49dFZFZn14MilIPTNh
SVFnbwp6IUI9eVpJYD5wYTVWZSRLeyRYVVJONE12JnFreDl8M3ZLX1hgVnhpejZQd3xmJVNIXnZj
RndlPWBSUzFFe19WKFQKekxMNmtGPDsmJVo+K096MEZJaChrZ1FnPjwhfSFVLXYkclRLV2VPMSQ4
ZHJeKVhpP1lUcHBtKG1nPV5uMDkmQipaCnp2LXlpQlBTNmJxVzttaThQUUVGUHpITFVGNHkyeHU5
fiVZWTNVT2NzajZHUlFESnVKZCg1UkdoRnVCIzU1ckh2Ygp6ZUg2Sl8tPTkxdDBrNm99RlpTaj9Q
X0EweXYwQkA0a2V2SS13OyRefWRnTnZucUFQS3FZfjJCUD97YXAxcFFMY0MKeiYyRzVGRktyM1N2
VW5wX0NrOFdaZ1lVKStkQSMlaD8qe2I/QlVZYmBfa3ZmQU1qWkZ6O0BaMk5KX1VWVzdjOWIpCnpa
Klh9SU5lZiZvfDFARnxDUnxYYmFeLVFSN2pNYTZnVW5Rcmt+Pnt6SyEoJTt5RX1IX3gjbjRIYzla
YzMmKCRpKAp6MUBmOUE/SW52PFZlSFB3STRKa3k3bUhCeHN3a2xsWFkkX2c9QXFHMXJ9a2gkYHB7
SSRjTV51RDlWMn49NTdgcFoKekNaPGdLV0Fqdj0wPUAyKEVRRGB8WU98JCFTMld2cVpVM0EmaCg2
aEdqbVJqdUl3eyolX2R2NEJ2ZVU5SWojQlNqCnoxM3hFTnZPUmZpWmYkeispN3NLblZuNElFUExw
R3FWPlFRezl3VSpzeWU3K29Ra0N7UTV0MyNuK0teNlRnRnxMcQp6MjlpaExGdVJ2LXZZe2d8e1dG
Mns1ayotNWR8PSl8KFcmYCQkWHYqaTNxYE99KWVeSVdaYHdNK2pfbHBPaV5eVSMKenl8JVFra2dM
OCYlekgpb0psK2llanBrXzx4WEByTSE8LSEjbWZpeG9CNjl5XkBwPFApZXpBKVBnO1lSaU8xSFc7
CnpeNWE4KlFnfEwjPmxCPyg+JGlZPitAcT1nQ3wwJFU/NG1TY2NsYmc+Rz0wcllkUiYqd0RCeihY
PCRfTTUrPlBpVAp6MTslJDMtaEYkYnZSTj5IUl8lZFZvYUJrXnhTMUB4SCNSbFNKNGo9MWpkNnt5
X0lUQj5LdU5MdENCPFpZbUlTWmwKekAhcVNKJXhDPj8tanIoPmVWMCYjejswVHJacW9kP2F1OE0+
R2ZATn43ZSY8QWF6RGA+YUA7Nn4pPXFnS3QpMz5jCnpSKjJIKi17ZGJaM1J4Xmk4SX5aMF5Mdk5i
MG1gNTYpaW4+VmQkcEVuJVQxd3p1SF91bkhhRSpTXmBAaEFiV0wmMwp6UzZAPFJuZ05xfnRfWn5N
cFo1fEdJfmd6WS0waztvZUE2Kn5veUVTb0R3JVBpTT15bmErUG07emU+K3xgd059OyEKenhpV09S
LWg/OTlRK2AyRnJ5VDR6Y3tGVCNlWGUkMktkeDFDPnEmNXY+OHhKc3JHcExJSnh4cCNfUDFFTlR8
SUsqCnp2YGdSZj9kMXIlcUl4P2MtQyp7N01IQWVRPnNpRyliTGtkeHNWaTU9SHc3KzUtbTlCN1ZB
U3JEKW0+YWlFVV5SPwp6VHFEIXQ7RGFPe3MrJnVCbGlRbCFwaTZtQSo3fCkxKFlWMEVDalJYMERY
YyFNPnt5UW5je2RANCk9MitlJD99Q2cKejxXQXpOJGAqP1diJGUoV3dwNT1fUUtoeTd3OTk7cmhp
Pno4VTVAUlpnNzchREFAWHNCV3ZXanZQbGVZVnMyZE0xCnorM0kzRjNvQVEtZERxIzM3Pi1CcEpD
M2MqaktRdW5vWFh5clRlbShnKyZAQDFVVTskfXkmanBXdE1NaERUNVA/fAp6az5gbnJ6JGFEZjRj
R2smazlhOzE0TXdXe2VHLW1aK1UxenpUKzVeVE9mcD40T2pzKVdDfTBRfHMhUmopN19TN18KemEr
O31FIWVsZElUWEBZMTNRXilLKl9gUXhYUVRyaWxGMmtnQEI3JDwzRExUVkl6TXZ+MituTUooUDNk
KF5IfUwjCnp7OHVfP3F4K3FRNTY1dDl3cS1vPTJVcGlOampEQFpOcXFhVUdmaFMqazdQJUAySzlv
Uks3YUIkPTh6NGhLQTxmYAp6Y3lEX0F5YyglYjEpPzBVN1VoQGR0VV5oT1pVfkNjXlZCKFgrOXcl
bSM5cE54NFJQU0hSfnlCQHNuaXghT3VQeyMKenApYmUkJFQka313KCo9U2Q7YVpaejxpeU5DNiFA
KlRCJClTQk5QOT9qbHpiYXpNT2NHNmBJTkpkTEw+YlgzeUlkCnoyQF84VUo9YD9gLVomUzkoI0Em
RSU5JE45QVYqQHJwbWVzZGJVaX5rTTdvVkNlNHVSaUQ2NkBLTjxtZzBGNVNyUAp6Zz1vMkx2RFA7
fDglI0JLQlJsRGQ1QVRrfVZfeWIkJHRVJjliTk41PE81cHNJSEJRQn10SnVaJC1wPFNSUEdgYE8K
ekFGYndWWHhwMVJvVVU+c1dWN1czTWB+KkxrVzJ5LU1aKUtVKTk8YEQ5ZihiciRqOHdIN2VxUWBv
Vlh7QWFGfVUyCno/fEM9JHl8djxOJVc9NHZId0Y9amR+aj5zZ1I8ZjcxK2tUPTRebFlHNGx9eUpr
V05gQUpOMGNoNSRBUygkTHQ0Wgp6PGg7b29zcGl1aVFWc2R8WFB5UEdyNDt2UkkqKllMJjA0SW5m
NnhRUHdTLTdsbndRO210WFdeKDIpZUN3NkxsdmYKelYhWGAlIzF6d0NZbUl5eHUxYDJzSmVfT0wr
ZlFYTG17MHZReD9FRUA+YnYyPFpmU04renEoIVBiJVJoVVV4ZzBFCnpXV3VsVmQtSlh8Pjw1bVZC
NHVePiF5V0RIclVweGApO19+MElvNmJ9XlNIKGdvaXVRcUFNWGZXcGh7PTVzPDVOIwp6amsjc25x
flZDVmh1IWZmNlMtUmM1ZCVZeTR3b3dOIT48U0k0UEtqM2RuWlQ1STxsSSgqeGM+JD9XTn0ycGBx
TzcKenJLTElScWE7UnhAIUA2QmJHU0xOSF9oRnhxNX0qQXRuU3JyaiFXNXR0T1VKOSlLYW5uUD1F
alUzTjQ8PyV4JE5BCnojS055cC09eWJHYC0kQTR5XiZ2SWFkSTlscFZUMipLfDgwISo4a00zSDYl
QSRPNVVJSUlIdH5PQ1JJKG1gPmFwawp6SUAhXjdXTE1ZI3NKbSlDUkJrbCN5fDNCeCR7eHp1MXdW
MytlZlo8P09EaDwqPUUlQXJHVXRWQio3cHV1dntnS3cKemBDRFo2SmVVeU0qTkg9cVdYbFktb0gy
ZCFfNDIyJXdiMyZZP1ctZUV4M2ViUXRxdndWcns5IU84K3lhd0wyODI7Cnp3N3Izc2NhP2BaQ2Je
KU1mYnpLfnRjRGpUZSY5cDswPCpTOFhwN0luY3pYczYtKloydUUkLXhDOCpBTEVse1g5Tgp6M3Qw
RmY2VmdYYyoqWHZARHV7UURnck9LT0NjV3oocCMxX1p2OVl+Xmd1SHR7eiE2ciZpei1ZSEVBQWJ6
em0yJkEKemItVXV6X1NEQXFnMF4hRVpFPipzUjUpI01YenZzYXN+RyNXTUwkQUA+d1NhOHU3UjNU
QmFeazQ5QklsYipQQH4kCnp2ZFhsVFB2WjZVdzEkQ0lUeXBjblM9KjF0aytGJVgzVD5MUHV3a0p4
JXI4RihMe3VWMUYoVFgoTilUYjxibCpzdgp6VnBMbWVDd04tbTlyYilwV2BGOGkydEx4UHBQQmRi
ZG10V0B0ejJBfnlaTG19WkA0UilnOzZWZit9NExMZXc/US0KekdRMUFGZHx5Q0UmX2ctO0VqVk1s
JVppVjFafCtPd2AwfWJ0YyFvWm9NQ3Y4VztWZ0A5JChDY3w8NnE+QjhKQE49Cnp6RzdrUCYlT203
WUBsUn0/SGNUMjVIbFJ3MUReNUwrKHg7JCphKlokQFl2Kz9YdWdeZCMyKERHaE1KVGBaY3xPeAp6
cU9FaE17TilxR3B6TkdjSlVwRndXIU56cGR3WUt+c09wLTYlS2ZNWkleeEtuRSpfZj4lfX5wNWt6
ej9OPWw8eSoKekBgfXA2PX15S3woZUJEdzR2eWpzKFExUT1ebjkkR2doWTt7aV90d0NPcU1ycVpj
aX1Ya25XWV9GSkdoUXVKaTl6Cno9d2RSezx1VF90VkFfPHNQTH5Db3psTT9zYEI/Mi02Mnh8YjBG
SW5mVjNCJWhSfmZkQCZMaHA8R3dZPSorVk8kfgp6bWhhQTZiLWN9IW5iTUpWJnFRLT4tWlFyYF5o
S0YqRGNSbWJybW4wMDRCa3YjVCM/Tn0qJlREaGopO3NlMlFjVVAKenBQZCNia1cqfjE7JWhzNU5D
e2lmdjZQPmB6LXFROFByRmMjdHR+LUlhcjBPbThSVkMjJD1FS01AMlB1cEIldHZvCnowODU9PyVF
cTEzcmZRX2hTOVV5KkRPVSNJQmB9NClmS0ZDZ2oydTU9c0I+PEVlOXoxT1QqamVjRilYU29OMDlR
cQp6NXd2MHxiMEA8SlQ9MWlLR2A9bjdTS2lmdUVVTzNkdGdkLUMpT2NaUD91LUNvOGx4QGkqXnQl
YHtsVWxzXnRHLXcKemNpeFhvaENnNVZAcm5mYzchVUhxVk4/MmdzK0diO2dCd1FqKyFqfCkpQ0dv
aWY2UihyKTlQYjclJHw+RlFNVU1DCnpULUBoPjJ7SUtWLSpOZkd3az04Nyp1RnYlI3lPbSVWVlRJ
ZG0lQ2RmbVBoJW08d3hvQmV5VkctTUhtWUFrMlcmbAp6a1Y0PWNaQHVyb29jZGwldlFDYFJ2d1dx
P3tjdmhIcTNnJnBmQSYpI0AoQUBqX2Ajc3txR3oxKnY+JCF9Uz55M0MKenRoI0drT0A0KERkTjRP
WnBFTlU3eiQ3JFg+OzI/d3QqRm9MeWhfIzVFeXhyWG4/NikxSTZoT1VMV3cjNHFnWDI/Cno3eUMz
JXVHIX50ZiU+KFk9PncoeUpIRjFUQFppX3xDSjd9Sy14KWstWXRmdTxSbVU0Mj1zJnF7JSo1PCkj
ZkV3TAp6JThZUytuV3V2Vz80WSRtKCgzME5ydXgzOGZvQnFmJjt0Xyp6b2FPP1NlOGEhcElHWDxv
VzJDbmhYal5CbiZyPlMKejZZdT1geFcmZ3pgTlVuWkxDeTxQI2pkbSQlPjBFcW5PSmBFPDQ/WkEp
TDwyQUokR0k5c1hhRWdFMjNle15kQClQCnp4S01FfEooWnxMWXs/fjBINFVAKSY8KDgke3RycXl4
YWZ1KDdxOUxFVDVYd0ZeQkV7NmBHYkFiT3ckMGRpdnQ1cQp6MDd1eFRfUCRiXkBqfU9WWXJUQiFt
NXgqTmlmJE9oam9NXldEODRiYlAwV2VLX0lRMjJYMlZlflU2Wk5gY1pHSUMKenh+fWZqQFZJVjZf
fHIpMSN1eEd2TitGOFo2I0JVSXB7clhJaWNTSVVRVndiRFNfM3hVUyZtckZgTD5ieVZwfTV1CnpB
U0B2bEl4aUhSTyU2el54T2xsbng9LWwpejZlTEVVYihKXmAtZno4bk9pKVZoeEIqNz5uTkBFNmor
WmFacEBLTwp6SCV8VGZAcFg4PmFFTnpvQEEwQ29mYDZXUCNOJmladUpTQk9SfEV6bykwQV54SlJ0
SzRLPEB5ckhNP0F0TVJpcVAKejxTNFh2PTJDIUNjWDdGPnIlR3BAZUBANGpkdWJJbDtDaD8tYEBK
YEc/R2MoP1IpWWluV0VUfTw/KkFfKE87V0x2CnpSTDRYPnB+OFJHRz09fUZYPS1+cFY/YnllKT1k
V0VZS2dhVmNFYl4/diYydFRiMC1XKVQ4aX1XRThBSU1AYUFySQp6SUlJPjFaKVhpNG0yWWlhZnBG
cHJRQnp0UD1WPkdlNWs+KzlWUEZeIzB0Tz8xcTlQQ3prYjt9SnFuKUpgKjJXUDcKejFPcUApdTln
X0E4JkVfUDBzeFZXa3Y7Xlc1RmBNRUdJeTU4KnhBXitrPTZrflQ1Y0Y4VTchZVkyPz9IOUZ+JmZG
CnpxJDtjP3Y4TVc7czt0T2c1JlRoS2g5YmZMUGolVmtuRl9XUWNyb31PQkBqfl5SKz1pSiVINkZR
Y2s0T3hzbUFBUAp6WElqVWxCRj51RVoqOTxeQ0tYS3tINGZIeVppUz55RjY7OTVQcDJ8bV4lVDE7
Yyh1cGM8KHdeaikoe3NjVSVPPzcKenpyTVhxKDdnRm1hWWc4PmspVCUmRWZVaFdlUWVINDl5QFBP
O0Npb3V2dHFRe3VLVEw9WFRqMHdge3k/Nyg4KGMrCnpFRz42SFE7aj4rRVZXZ3x2YCZqLVBOZ1Qq
NV8mWTFPPTQ8aDRDb2ZlbmxxaHlSTX55eUEpXlVPc0MoVzE0VkwpdAp6TDJ2UVFGVEIqUDRRZz1i
bkJSdiZjaiMmK1d2Ni0yRG9PQ0A4MmElM244RyVsRkV7Wm45ZnQ9QitkTThobEdMeUMKelEpcz9B
cj9LITtYdE1kflZXWG1pI0FsQDh6OChKeUtTY2paPGV5WGtYfU1kdGskOW52Y2dPc2VOfUljNE5T
cEQwCnpHcnx0PD5WfnA0JENHd2krNUNAcDVkY1dmJmRTWiEpZCs/fTBGZStkNUR0ZHtWSXJiSHNJ
Yyh3ZmRHU25xeWFeTQp6ZmhQYUc7ZVFia05hQ3BgMEhscjYhUD0yfTF3aGlhWVhiaHAxMHYqfmpS
cklYTlEmbTReTl8jSTY5WFg5XlMyNX0KejlnbmxyIW5oZk1oYGtHdEhwYko8PFI3cXF0QDw2bXkx
NU1vcTs4SFVhVFpQajBCS0BlYXFmNmFqNEtkQUdOQjFsCnohQzJYdWxhMnooMDc0VzI2b0VyY0t5
ckFUeUVDeH5xRDlRNUlvOCNnMVl6an5MVE0zP2ZRT3dXTXBJNTJxeVRneQp6PTI9MWxnZCNkZndC
UU9QYng7MXpjOUtjYkF0bk8tPjVlUGxVcEBmLWEpUCt2UGNLTWBSa0V7a0gzSShqbD1PK2gKenhz
ITc3X2VCMSFXQW9idiVBOXo3YVc9JUxaSFBoczRqS1NiYkgtcSRFSi0oayhTS3VzXmJISndTYShP
cXxOYTNKCnp2NmFvU0huJVpZS3s7dk9mMjh6MyVAdHgwUXRvY0hJSmBKbzdMNWpqO2xnMEJGcCZl
b0Z5ZXJOITk8I1hnXnxSNgp6O3Y1dUF5aUpJNXEkcUtxeypYZj9oeWY1Z00jUVY/NCtzUGFmflpT
VWB3YztZZ0Emejx5S0xvZGlUUkhub1R4KzYKemdBPHtWQm9tfVRmK20/RHU3UyFEfEF9K0l2NTEl
P15EeUVaTmU9dGRFSFFjK1YqQmQwajJMbFY2YXBvQkVDTG1VCnohVWUlbDl4I31QX2l0SkMjQUI9
aFU/Mm56QVJfKG8wRmVqOzM8MHpUe3ZrdWM1WDlffjl3N0VWR0I2bElyMUpsZQp6TEJZaEZ8NUp2
OWl4U1ZzS1ZASmpean5eSmleVG8/cnloYlJ7Rmg3Xnt4M1d2YVgwPl85dWtXRHc7b2pWVXBeeGQK
enFXQGx0NiNiaUJIQHJGVmcyJDdudCEzd3BBKktxWGlOZ2BPYFRHbjJLbmhyRTkxdWR7NClHI1Rr
TzNNMiNnVzNZCnphRmkkKkNXVkJkcktNent2TGF3ODhaSGYlS31rISZwa1JhcTtRdj00OVJlQWdD
Q1YwSz5FUDxfMU95PmJENm9gXwp4Q18pTT9EfXFLS0x7SkR9REpjO1Y1ZDtiJWpZTFZJTkt8JXBH
c25DQS1jbikrQV4+aH5TdjU0XnpXe25AX1dKKzsKCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Jlc291cmNlcy90
ZXN0LnR4dCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Jlc291cmNlcy90
ZXN0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGFlYWZiCi0tLSAv
ZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvcmVzb3Vy
Y2VzL3Rlc3QudHh0CkBAIC0wLDAgKzEgQEAKK3Rlc3QKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RfdXRpbHMuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RfdXRpbHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi42YmI2NDVkCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRHdGsvdGVzdF91dGlscy5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgQXJubyBSZW5ldmllcgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAidGVzdF91dGlscy5oIgor
CisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CisKK2ludCB0ZXN0
dXRpbHNfcmVsYXRpdmVfY2hkaXIoY29uc3QgZ2NoYXIgKnRhcmdldEZpbGVuYW1lLCBjb25zdCBn
Y2hhciAqZXhlY3V0YWJsZVBhdGgpCit7CisgICAgLyogdXNlciBjYW4gc2V0IGxvY2F0aW9uIG9m
IHRoZSB3ZWJraXQgcmVwb3NpdG9yeSBkaXJlY3RvcnkgaWYgaXQgZGlmZmVycyBmcm9tIGJ1aWxk
IGRpcmVjdG9yeSAqLworICAgIGNvbnN0IGdjaGFyICpyZXBvUGF0aCA9IGdfZ2V0ZW52KCJXRUJL
SVRSRVBPRElSIik7CisgICAgaWYgKHJlcG9QYXRoKSB7CisgICAgICAgIGlmIChnX2NoZGlyKHJl
cG9QYXRoKSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9IGVsc2UgaWYgKGdfY2hkaXIo
Z19wYXRoX2dldF9kaXJuYW1lKGV4ZWN1dGFibGVQYXRoKSkpCisgICAgICAgICAgICByZXR1cm4g
LTE7CisKKyAgICB3aGlsZSAoIWdfZmlsZV90ZXN0KHRhcmdldEZpbGVuYW1lLCBHX0ZJTEVfVEVT
VF9FWElTVFMpKSB7CisgICAgICAgIGdjaGFyICpwYXRoTmFtZTsKKyAgICAgICAgaWYgKGdfY2hk
aXIoIi4uIikpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGdfYXNzZXJ0KCFnX3N0
cl9lcXVhbCgocGF0aE5hbWUgPSBnX2dldF9jdXJyZW50X2RpcigpKSwgIi8iKSk7CisgICAgICAg
IGdfZnJlZShwYXRoTmFtZSk7CisgICAgfQorCisgICAgZ2NoYXIgKmRpck5hbWUgPSBnX3BhdGhf
Z2V0X2Rpcm5hbWUodGFyZ2V0RmlsZW5hbWUpOworICAgIGlmIChnX2NoZGlyKGRpck5hbWUpKSB7
CisgICAgICAgIGdfZnJlZShkaXJOYW1lKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKwor
ICAgIGdfZnJlZShkaXJOYW1lKTsKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RfdXRpbHMuaCBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RfdXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5lYzYwZGEzCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdF91dGlscy5oCkBAIC0wLDAgKzEsMyBAQAorI2lu
Y2x1ZGUgPGdsaWIuaD4KKworaW50IHRlc3R1dGlsc19yZWxhdGl2ZV9jaGRpcihjb25zdCBnY2hh
ciAqdGFyZ2V0RmlsZW5hbWUsIGNvbnN0IGdjaGFyICpleGVjdXRhYmxlUGF0aCk7CmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0YXBwbGljYXRpb25j
YWNoZS5jIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGFwcGxpY2F0
aW9uY2FjaGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MThmNDAxCi0t
LSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVz
dGFwcGxpY2F0aW9uY2FjaGUuYwpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEx1a2FzeiBTbGFjaGNpYWsKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxn
bGliLmg+CisjaW5jbHVkZSA8Z2xpYi9ncHJpbnRmLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgor
I2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKworc3RhdGljIHZvaWQgdGVzdF9hcHBsaWNhdGlv
bl9jYWNoZV9tYXhpbXVtX3NpemUoKQoreworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhTaXpl
ID0gODE5MjsKKyAgICB3ZWJraXRfYXBwbGljYXRpb25fY2FjaGVfc2V0X21heGltdW1fc2l6ZSht
YXhTaXplKTsKKworICAgIC8vIENyZWF0aW5nIGEgV2ViVmlldyAtIG1ha2Ugc3VyZSB0aGF0IGl0
IGRpZG4ndCBjaGFuZ2UgYW55dGhpbmcKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VC
S0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmplY3RfcmVmX3Np
bmsod2ViVmlldyk7CisgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7CisKKyAgICBnX2Fzc2Vy
dChtYXhTaXplID09IHdlYmtpdF9hcHBsaWNhdGlvbl9jYWNoZV9nZXRfbWF4aW11bV9zaXplKCkp
OworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgZ3RrX3Rlc3Rf
aW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXBwbGlj
YXRpb25fY2FjaGUvbWF4aW11bV9zaXplIiwKKyAgICAgICAgICAgICAgICAgICAgdGVzdF9hcHBs
aWNhdGlvbl9jYWNoZV9tYXhpbXVtX3NpemUpOworCisgICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsK
K30KKwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVz
dGF0ay5jIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGF0ay5jCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMmRiNjEKLS0tIC9kZXYvbnVsbAor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0YXRrLmMKQEAgLTAs
MCArMSwxNDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IElnYWxpYSBTLkwuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8Z2xp
Yi5oPgorI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2lu
Y2x1ZGUgPGxvY2FsZS5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHdlYmtpdC93
ZWJraXQuaD4KKworc3RhdGljIGNvbnN0IGNoYXIqIGNlbnRlcmVkQ29udGVudHMgPSAiPGh0bWw+
PGJvZHk+PHAgc3R5bGU9J3RleHQtYWxpZ246IGNlbnRlcjsnPlNob3J0IGxpbmU8L3A+PHAgc3R5
bGU9J3RleHQtYWxpZ246IGNlbnRlcjsnPkxvbmctc2l6ZSBsaW5lIHdpdGggc29tZSBmb28gYmFy
IGJheiBjb250ZW50PC9wPjxwIHN0eWxlPSd0ZXh0LWFsaWduOiBjZW50ZXI7Jz5TaG9ydCBsaW5l
PC9wPjxwIHN0eWxlPSd0ZXh0LWFsaWduOiBjZW50ZXI7Jz5UaGlzIGlzIGEgbXVsdGktbGluZSBw
YXJhZ3JhcGg8YnIgLz53aGVyZSB0aGUgZmlyc3QgbGluZTxiciAvPmlzIHRoZSBiaWdnZXN0IG9u
ZTwvcD48L2JvZHk+PC9odG1sPiI7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb250ZW50cyA9ICI8
aHRtbD48Ym9keT48cD5UaGlzIGlzIGEgdGVzdC4gVGhpcyBpcyB0aGUgc2Vjb25kIHNlbnRlbmNl
LiBBbmQgdGhpcyB0aGUgdGhpcmQuPC9wPjwvYm9keT48L2h0bWw+IjsKKworc3RhdGljIGNvbnN0
IGNoYXIqIGNvbnRlbnRzSW5UYWJsZVdpdGhIZWFkZXJzID0gIjxodG1sPjxib2R5Pjx0YWJsZT48
dHI+PHRoPmZvbzwvdGg+PHRoPmJhcjwvdGg+PHRoIGNvbHNwYW49JzInPmJhejwvdGg+PC90cj48
dHI+PHRoPnF1eDwvdGg+PHRkPjE8L3RkPjx0ZD4yPC90ZD48dGQ+MzwvdGQ+PC90cj48dHI+PHRo
IHJvd3NwYW49JzInPnF1dXg8L3RoPjx0ZD40PC90ZD48dGQ+NTwvdGQ+PHRkPjY8L3RkPjwvdHI+
PHRyPjx0ZD42PC90ZD48dGQ+NzwvdGQ+PHRkPjg8L3RkPjwvdHI+PHRyPjx0aD5jb3JnZTwvdGg+
PHRkPjk8L3RkPjx0ZD4xMDwvdGQ+PHRkPjExPC90ZD48L3RyPjwvdGFibGU+PHRhYmxlPjx0cj48
dGQ+MTwvdGQ+PHRkPjI8L3RkPjwvdHI+PHRyPjx0ZD4zPC90ZD48dGQ+NDwvdGQ+PC90cj48L3Rh
YmxlPjwvYm9keT48L2h0bWw+IjsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnRlbnRzV2l0aEV4
dHJhbmVvdXNXaGl0ZVNwYWNlcyA9ICI8aHRtbD48aGVhZD48Ym9keT48cD5UaGlzXG4gICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcmFncmFwaFxuICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3Jr
ZWQhPC9wPjwvYm9keT48L2h0bWw+IjsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbWJvQm94U2Vs
ZWN0b3IgPSAiPGh0bWw+PGJvZHk+PHNlbGVjdD48b3B0aW9uIHNlbGVjdGVkIHZhbHVlPSdmb28n
PmZvbzwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J2Jhcic+YmFyPC9vcHRpb24+PC9zZWxlY3Q+PC9i
b2R5PjwvaHRtbD4iOworCitzdGF0aWMgY29uc3QgY2hhciogZW1iZWRkZWRPYmplY3RzID0gIjxo
dG1sPjxib2R5PjxwPkNob29zZTogPGlucHV0IHZhbHVlPSdmb28nIHR5cGU9J2NoZWNrYm94Jy8+
Zm9vIDxpbnB1dCB2YWx1ZT0nYmFyJyB0eXBlPSdjaGVja2JveCcvPmJhciAocGljayBvbmUpPC9w
PjxwPkNob29zZTogPHNlbGVjdCBuYW1lPSdmb28nPjxvcHRpb24+YmFyPC9vcHRpb24+PG9wdGlv
bj5iYXo8L29wdGlvbj48L3NlbGVjdD4gKHBpY2sgb25lKTwvcD48cD48aW5wdXQgbmFtZT0nZm9v
YmFyYnV0dG9uJyB2YWx1ZT0nZm9vYmFyJyB0eXBlPSdidXR0b24nLz48L3A+PC9ib2R5PjwvaHRt
bD4iOworCitzdGF0aWMgY29uc3QgY2hhciogZm9ybVdpdGhUZXh0SW5wdXRzID0gIjxodG1sPjxi
b2R5Pjxmb3JtPjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdlbnRyeScgLz48aW5wdXQgdHlwZT0n
cGFzc3dvcmQnIG5hbWU9J3Bhc3N3b3JkRW50cnknIC8+PC9mb3JtPjwvYm9keT48L2h0bWw+IjsK
Kworc3RhdGljIGNvbnN0IGNoYXIqIGh5cGVydGV4dEFuZEh5cGVybGlua3MgPSAiPGh0bWw+PGJv
ZHk+PHA+QSBwYXJhZ3JhcGggd2l0aCBubyBsaW5rcyBhdCBhbGw8L3A+PHA+PGEgaHJlZj0naHR0
cDovL2Zvby5iYXIuYmF6Lyc+QSBsaW5lPC9hPiB3aXRoIDxhIGhyZWY9J2h0dHA6Ly9iYXIuYmF6
LmZvby8nPmEgbGluayBpbiB0aGUgbWlkZGxlPC9hPiBhcyB3ZWxsIGFzIGF0IHRoZSBiZWdpbm5p
bmcgYW5kIDxhIGhyZWY9J2h0dHA6Ly9iYXouZm9vLmJhci8nPmF0IHRoZSBlbmQ8L2E+PC9wPjxv
bD48bGk+TGlzdCBpdGVtIHdpdGggYSA8c3Bhbj48YSBocmVmPSdodHRwOi8vZm9vLmJhci5iYXov
Jz5saW5rIGluc2lkZSBhIHNwYW4gbm9kZTwvYT48L3NwYW4+PC9saT48L29sPjwvYm9keT48L2h0
bWw+IjsKKworc3RhdGljIGNvbnN0IGNoYXIqIGxheW91dEFuZERhdGFUYWJsZXMgPSAiPGh0bWw+
PGJvZHk+PHRhYmxlPjx0cj48dGg+T2RkPC90aD48dGg+RXZlbjwvdGg+PC90cj48dHI+PHRkPjE8
L3RkPjx0ZD4yPC90ZD48L3RyPjwvdGFibGU+PHRhYmxlPjx0cj48dGQ+Zm9vPC90ZD48dGQ+YmFy
PC90ZD48L3RyPjwvdGFibGU+PC9ib2R5PjwvaHRtbD4iOworCitzdGF0aWMgY29uc3QgY2hhciog
bGlua3NXaXRoSW5saW5lSW1hZ2VzID0gIjxodG1sPjxoZWFkPjxzdHlsZT5hLmh0dHA6YmVmb3Jl
IHtjb250ZW50OiB1cmwobm8taW1hZ2UucG5nKTt9PC9zdHlsZT48Ym9keT48cD48YSBjbGFzcz0n
aHR0cCcgaHJlZj0nZm9vJz5mb288L2E+IGJhciBiYXo8L3A+PHA+Zm9vIDxhIGNsYXNzPSdodHRw
JyBocmVmPSdiYXInPmJhcjwvYT4gYmF6PC9wPjxwPmZvbyBiYXIgPGEgY2xhc3M9J2h0dHAnIGhy
ZWY9J2Jheic+YmF6PC9hPjwvcD48L2JvZHk+PC9odG1sPiI7CisKK3N0YXRpYyBjb25zdCBjaGFy
KiBsaXN0c09mSXRlbXMgPSAiPGh0bWw+PGJvZHk+PHVsPjxsaT50ZXh0IG9ubHk8L2xpPjxsaT48
YSBocmVmPSdmb28nPmxpbmsgb25seTwvYT48L2xpPjxsaT50ZXh0IGFuZCBhIDxhIGhyZWY9J2Jh
cic+bGluazwvYT48L2xpPjwvdWw+PG9sPjxsaT50ZXh0IG9ubHk8L2xpPjxsaT48YSBocmVmPSdm
b28nPmxpbmsgb25seTwvYT48L2xpPjxsaT50ZXh0IGFuZCBhIDxhIGhyZWY9J2Jhcic+bGluazwv
YT48L2xpPjwvb2w+PC9ib2R5PjwvaHRtbD4iOworCitzdGF0aWMgY29uc3QgY2hhciogdGV4dEZv
ckNhcmV0QnJvd3NpbmcgPSAiPGh0bWw+PGJvZHk+PGgxPkEgdGV4dCBoZWFkZXI8L2gxPjxwPkEg
cGFyYWdyYXBoIDxhIGhyZWY9J2h0dHA6Ly9mb28uYmFyLmJhei8nPndpdGggYSBsaW5rPC9hPiBp
biB0aGUgbWlkZGxlPC9wPjxvbD48bGk+QSBsaXN0IGl0ZW08L2xpPjxsaT48c3BhbiBzdHlsZT0n
ZGlzcGxheTpibG9jazsnPkJsb2NrIHNwYW4gaW4gYSBsaXN0IGl0ZW08L3NwYW4+PHNwYW4+SW5s
aW5lIHNwYW4gaW4gYSBsaXN0IGl0ZW08L3NwYW4+PC9saT48bGk+PGEgaHJlZj0nZm9vJz48c3Bh
biBzdHlsZT0nZGlzcGxheTpibG9jazsnPkJsb2NrIHNwYW4gaW4gYSBsaW5rIGluIGEgbGlzdCBp
dGVtPC9zcGFuPjxzcGFuPklubGluZSBzcGFuIGluIGEgbGluayBpbiBhIGxpc3QgaXRlbTwvc3Bh
bj48L2E+PC9saT48L29sPjxzZWxlY3Q+PG9wdGlvbiBzZWxlY3RlZCB2YWx1ZT0nZm9vJz5BbiBv
cHRpb24gaW4gYSBjb21ibyBib3g8L29wdGlvbj48L3NlbGVjdD48aW5wdXQgdHlwZT0ndGV4dCcg
bmFtZT0nZm9vJyB2YWx1ZT0nZm9vIGJhciBiYXonIC8+PHRhYmxlPjx0cj48dGQ+YSB0YWJsZSBj
ZWxsPC90ZD48dGQ+PC90ZD48dGQ+PGEgaHJlZj0nZm9vJz48c3BhbiBzdHlsZT0nZGlzcGxheTpi
bG9jazsnPkJsb2NrIHNwYW4gaW4gYSBsaW5rIGluIGEgdGFibGUgY2VsbDwvc3Bhbj48c3Bhbj5J
bmxpbmUgc3BhbiBpbiBhIGxpbmsgaW4gYSB0YWJsZSBjZWxsPC9zcGFuPjwvYT48L3RkPjx0ZD48
c3BhbiBzdHlsZT0nZGlzcGxheTpibG9jazsnPkJsb2NrIHNwYW4gaW4gYSB0YWJsZSBjZWxsPC9z
cGFuPjxzcGFuPklubGluZSBzcGFuIGluIGEgdGFibGUgY2VsbDwvc3Bhbj48L3RkPjwvdHI+PC90
YWJsZT48aDQ+PGEgaHJlZj0nZm9vJz48c3BhbiBzdHlsZT0nZGlzcGxheTpibG9jazsnPkJsb2Nr
IHNwYW4gaW4gYSBsaW5rIGluIGEgaGVhZGluZzwvc3Bhbj48c3Bhbj5JbmxpbmUgc3BhbiBpbiBh
IGxpbmsgaW4gYSBoZWFkaW5nPC9zcGFuPjwvaDQ+PGg0PjxzcGFuIHN0eWxlPSdkaXNwbGF5OmJs
b2NrOyc+QmxvY2sgc3BhbiBpbiBhIGhlYWRpbmc8L3NwYW4+PHNwYW4+SW5saW5lIHNwYW4gaW4g
YSBoZWFkaW5nPC9zcGFuPjwvaDQ+PC9ib2R5PjwvaHRtbD4iOworCitzdGF0aWMgY29uc3QgY2hh
ciogdGV4dEZvclNlbGVjdGlvbnMgPSAiPGh0bWw+PGJvZHk+PHA+QSBwYXJhZ3JhcGggd2l0aCBw
bGFpbiB0ZXh0PC9wPjxwPkEgcGFyYWdyYXBoIHdpdGggPGEgaHJlZj0naHR0cDovL3dlYmtpdC5v
cmcnPmEgbGluazwvYT4gaW4gdGhlIG1pZGRsZTwvcD48b2w+PGxpPkEgbGlzdCBpdGVtPC9saT48
L29sPjxzZWxlY3Q+PC9ib2R5PjwvaHRtbD4iOworCitzdGF0aWMgY29uc3QgY2hhciogdGV4dFdp
dGhBdHRyaWJ1dGVzID0gIjxodG1sPjxoZWFkPjxzdHlsZT4uc3QxIHtmb250LWZhbWlseTogbW9u
b3NwYWNlOyBjb2xvcjpyZ2IoMTIwLDEyMSwxMjIpO30gLnN0MiB7dGV4dC1kZWNvcmF0aW9uOnVu
ZGVybGluZTsgYmFja2dyb3VuZC1jb2xvcjpyZ2IoODAsODEsODIpO308L3N0eWxlPjwvaGVhZD48
Ym9keT48cCBzdHlsZT1cImZvbnQtc2l6ZToxNDsgdGV4dC1hbGlnbjpyaWdodDtcIj5UaGlzIGlz
IHRoZSA8aT5maXJzdDwvaT48Yj4gc2VudGVuY2Ugb2YgdGhpcyB0ZXh0LjwvYj48L3A+PHAgY2xh
c3M9XCJzdDFcIj5UaGlzIHNlbnRlbmNlIHNob3VsZCBoYXZlIGFuIHN0eWxlIGFwcGxpZWQgPHNw
YW4gY2xhc3M9XCJzdDJcIj5hbmQgdGhpcyBwYXJ0IHNob3VsZCBoYXZlIGFub3RoZXIgb25lPC9z
cGFuPi48L3A+PHA+eDxzdWI+MTwvc3ViPjxzdXA+Mjwvc3VwPj14PHN1Yj4yPC9zdWI+PHN1cD4z
PC9zdXA+PC9wPjxwIHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXI7XCI+VGhpcyBzZW50ZW5jZSBp
cyB0aGUgPHN0cmlrZT5sYXN0PC9zdHJpa2U+IG9uZS48L3A+PC9ib2R5PjwvaHRtbD4iOworCitz
dGF0aWMgQXRrT2JqZWN0KiBnZXRXZWJBcmVhT2JqZWN0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcp
Cit7CisgICAgLyogTWFudWFsbHkgc3BpbiB0aGUgbWFpbiBjb250ZXh0IHRvIG1ha2Ugc3VyZSB0
aGUgYWNjZXNzaWJsZQorICAgICAgIG9iamVjdHMgYXJlIHByb3Blcmx5IGNyZWF0ZWQgYmVmb3Jl
IGNvbnRpbnVpbmcuICovCisgICAgd2hpbGUgKGdfbWFpbl9jb250ZXh0X3BlbmRpbmcoMCkpCisg
ICAgICAgIGdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbigwLCBUUlVFKTsKKworICAgIEF0a09iamVj
dCogcm9vdE9iamVjdCA9IGd0a193aWRnZXRfZ2V0X2FjY2Vzc2libGUoR1RLX1dJREdFVCh3ZWJW
aWV3KSk7CisgICAgaWYgKCFyb290T2JqZWN0KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAg
IEF0a09iamVjdCogd2ViQXJlYU9iamVjdCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hp
bGQocm9vdE9iamVjdCwgMCk7CisgICAgaWYgKCF3ZWJBcmVhT2JqZWN0KQorICAgICAgICByZXR1
cm4gTlVMTDsKKworICAgIC8qIFdlIGRvbid0IG5lZWQgdGhlIGV4dHJhIHJlZiBoZXJlLiAqLwor
ICAgIGdfb2JqZWN0X3VucmVmKHdlYkFyZWFPYmplY3QpOworCisgICAgcmV0dXJuIHdlYkFyZWFP
YmplY3Q7Cit9CisKK3N0YXRpYyBnY2hhciogdGV4dENhcmV0TW92ZWRSZXN1bHQgPSAwOworCitz
dGF0aWMgdm9pZCB0ZXh0Q2FyZXRNb3ZlZENhbGxiYWNrKEF0a1RleHQqIHRleHQsIGdpbnQgcG9z
LCBncG9pbnRlciBkYXRhKQoreworICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHRleHQpKTsKKwor
ICAgIGdfZnJlZSh0ZXh0Q2FyZXRNb3ZlZFJlc3VsdCk7CisgICAgQXRrUm9sZSByb2xlID0gYXRr
X29iamVjdF9nZXRfcm9sZShBVEtfT0JKRUNUKHRleHQpKTsKKyAgICB0ZXh0Q2FyZXRNb3ZlZFJl
c3VsdCA9IGdfc3RyZHVwX3ByaW50ZigifCVzfCVkfCIsIGF0a19yb2xlX2dldF9uYW1lKHJvbGUp
LCBwb3MpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrQ2FyZXRPZmZzZXRzKCkKK3sK
KyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJf
dmlld19uZXcoKSk7CisgICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7CisgICAgR3RrQWxs
b2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9OworICAgIGd0a193aWRnZXRf
c2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7CisgICAgd2Vi
a2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIHRleHRGb3JDYXJldEJyb3dzaW5nLCAw
LCAwLCAwKTsKKworICAgIEF0a09iamVjdCogb2JqZWN0ID0gZ2V0V2ViQXJlYU9iamVjdCh3ZWJW
aWV3KTsKKyAgICBnX2Fzc2VydChvYmplY3QpOworCisgICAgQXRrT2JqZWN0KiBoZWFkZXIgPSBh
dGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMCk7CisgICAgZ19hc3NlcnQo
QVRLX0lTX1RFWFQoaGVhZGVyKSk7CisgICAgZ19zaWduYWxfY29ubmVjdChoZWFkZXIsICJ0ZXh0
LWNhcmV0LW1vdmVkIiwgR19DQUxMQkFDSyh0ZXh0Q2FyZXRNb3ZlZENhbGxiYWNrKSwgMCk7CisK
KyAgICAvKiBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8gcGxhY2UgdGhlIGNhcmV0IGluc2lkZSBh
IGhlYWRlci4gKi8KKyAgICBnYm9vbGVhbiByZXN1bHQgPSBhdGtfdGV4dF9zZXRfY2FyZXRfb2Zm
c2V0KEFUS19URVhUKGhlYWRlciksIDUpOworICAgIGdfYXNzZXJ0X2NtcGludChyZXN1bHQsID09
LCBUUlVFKTsKKyAgICBnaW50IG9mZnNldCA9IGF0a190ZXh0X2dldF9jYXJldF9vZmZzZXQoQVRL
X1RFWFQoaGVhZGVyKSk7CisgICAgZ19hc3NlcnRfY21waW50KG9mZnNldCwgPT0sIDUpOworICAg
IGdfYXNzZXJ0X2NtcHN0cih0ZXh0Q2FyZXRNb3ZlZFJlc3VsdCwgPT0sICJ8aGVhZGluZ3w1fCIp
OworCisgICAgQXRrT2JqZWN0KiBwYXJhZ3JhcGggPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxl
X2NoaWxkKG9iamVjdCwgMSk7CisgICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQocGFyYWdyYXBoKSk7
CisgICAgZ19zaWduYWxfY29ubmVjdChwYXJhZ3JhcGgsICJ0ZXh0LWNhcmV0LW1vdmVkIiwgR19D
QUxMQkFDSyh0ZXh0Q2FyZXRNb3ZlZENhbGxiYWNrKSwgMCk7CisKKyAgICAvKiBJdCBzaG91bGQg
YmUgcG9zc2libGUgdG8gcGxhY2UgdGhlIGNhcmV0IGluc2lkZSBhIHBhcmFncmFwaCBhbmQgYSBs
aW5rLiAqLworICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQo
cGFyYWdyYXBoKSwgNSk7CisgICAgZ19hc3NlcnRfY21waW50KHJlc3VsdCwgPT0sIFRSVUUpOwor
ICAgIG9mZnNldCA9IGF0a190ZXh0X2dldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQocGFyYWdyYXBo
KSk7CisgICAgZ19hc3NlcnRfY21waW50KG9mZnNldCwgPT0sIDUpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cih0ZXh0Q2FyZXRNb3ZlZFJlc3VsdCwgPT0sICJ8cGFyYWdyYXBofDV8Iik7CisKKyAgICBy
ZXN1bHQgPSBhdGtfdGV4dF9zZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhUKHBhcmFncmFwaCksIDIw
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocmVzdWx0LCA9PSwgVFJVRSk7CisgICAgb2Zmc2V0ID0g
YXRrX3RleHRfZ2V0X2NhcmV0X29mZnNldChBVEtfVEVYVChwYXJhZ3JhcGgpKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQob2Zmc2V0LCA9PSwgMjApOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0Q2Fy
ZXRNb3ZlZFJlc3VsdCwgPT0sICJ8cGFyYWdyYXBofDIwfCIpOworCisgICAgcmVzdWx0ID0gYXRr
X3RleHRfc2V0X2NhcmV0X29mZnNldChBVEtfVEVYVChwYXJhZ3JhcGgpLCAzMCk7CisgICAgZ19h
c3NlcnRfY21waW50KHJlc3VsdCwgPT0sIFRSVUUpOworICAgIG9mZnNldCA9IGF0a190ZXh0X2dl
dF9jYXJldF9vZmZzZXQoQVRLX1RFWFQocGFyYWdyYXBoKSk7CisgICAgZ19hc3NlcnRfY21waW50
KG9mZnNldCwgPT0sIDMwKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGV4dENhcmV0TW92ZWRSZXN1
bHQsID09LCAifHBhcmFncmFwaHwzMHwiKTsKKworICAgIEF0a09iamVjdCogbGluayA9IGF0a19v
YmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQocGFyYWdyYXBoLCAwKTsKKyAgICBnX2Fzc2VydChB
VEtfSVNfVEVYVChsaW5rKSk7CisKKyAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfY2FyZXRfb2Zm
c2V0KEFUS19URVhUKGxpbmspLCA1KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocmVzdWx0LCA9PSwg
VFJVRSk7CisgICAgb2Zmc2V0ID0gYXRrX3RleHRfZ2V0X2NhcmV0X29mZnNldChBVEtfVEVYVChs
aW5rKSk7CisgICAgZ19hc3NlcnRfY21waW50KG9mZnNldCwgPT0sIDUpOworICAgIC8qIFBvc2l0
aW9ucyBpbnNpZGUgbGlua3MgYXJlIHJlcG9ydGVkIHJlbGF0aXZlIHRvIHRoZSBwYXJhZ3JhcGgu
ICovCisgICAgZ19hc3NlcnRfY21wc3RyKHRleHRDYXJldE1vdmVkUmVzdWx0LCA9PSwgInxwYXJh
Z3JhcGh8MTd8Iik7CisKKyAgICBBdGtPYmplY3QqIGxpc3QgPSBhdGtfb2JqZWN0X3JlZl9hY2Nl
c3NpYmxlX2NoaWxkKG9iamVjdCwgMik7CisgICAgZ19hc3NlcnQoQVRLX09CSkVDVChsaXN0KSk7
CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShsaXN0KSA9PSBBVEtfUk9MRV9MSVNU
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX29iamVjdF9nZXRfbl9hY2Nlc3NpYmxlX2NoaWxk
cmVuKGxpc3QpLCA9PSwgMyk7CisKKyAgICBBdGtPYmplY3QqIGxpc3RJdGVtID0gYXRrX29iamVj
dF9yZWZfYWNjZXNzaWJsZV9jaGlsZChsaXN0LCAwKTsKKyAgICBsaXN0SXRlbSA9IGF0a19vYmpl
Y3RfcmVmX2FjY2Vzc2libGVfY2hpbGQobGlzdCwgMik7CisgICAgZ19hc3NlcnQoQVRLX0lTX1RF
WFQobGlzdEl0ZW0pKTsKKworICAgIC8qIEl0J3Mgbm90IHBvc3NpYmxlIHRvIHBsYWNlIHRoZSBj
YXJldCBpbnNpZGUgYW4gaXRlbSdzIG1hcmtlci4gKi8KKyAgICByZXN1bHQgPSBhdGtfdGV4dF9z
ZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhUKGxpc3RJdGVtKSwgMSk7CisgICAgZ19hc3NlcnRfY21w
aW50KHJlc3VsdCwgPT0sIEZBTFNFKTsKKworICAgIC8qIEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0
byBwbGFjZSB0aGUgY2FyZXQgaW5zaWRlIGFuIGl0ZW0ncyB0ZXh0LiAqLworICAgIHJlc3VsdCA9
IGF0a190ZXh0X3NldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQobGlzdEl0ZW0pLCA1KTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQocmVzdWx0LCA9PSwgVFJVRSk7CisgICAgb2Zmc2V0ID0gYXRrX3RleHRf
Z2V0X2NhcmV0X29mZnNldChBVEtfVEVYVChsaXN0SXRlbSkpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChvZmZzZXQsID09LCA1KTsKKworICAgIEF0a09iamVjdCogcGFuZWwgPSBhdGtfb2JqZWN0X3Jl
Zl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMyk7CisgICAgZ19hc3NlcnQoQVRLX0lTX09CSkVD
VChwYW5lbCkpOworICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUocGFuZWwpID09IEFU
S19ST0xFX1BBTkVMKTsKKworICAgIEF0a09iamVjdCogY29tYm9Cb3ggPSBhdGtfb2JqZWN0X3Jl
Zl9hY2Nlc3NpYmxlX2NoaWxkKHBhbmVsLCAwKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfT0JKRUNU
KGNvbWJvQm94KSk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShjb21ib0JveCkg
PT0gQVRLX1JPTEVfQ09NQk9fQk9YKTsKKworICAgIEF0a09iamVjdCogbWVudVBvcHVwID0gYXRr
X29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChjb21ib0JveCwgMCk7CisgICAgZ19hc3NlcnQo
QVRLX0lTX09CSkVDVChtZW51UG9wdXApKTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9y
b2xlKG1lbnVQb3B1cCkgPT0gQVRLX1JPTEVfTUVOVSk7CisKKyAgICBBdGtPYmplY3QqIGNvbWJv
Qm94T3B0aW9uID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChtZW51UG9wdXAsIDAp
OworICAgIGdfYXNzZXJ0KEFUS19JU19PQkpFQ1QoY29tYm9Cb3hPcHRpb24pKTsKKyAgICBnX2Fz
c2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGNvbWJvQm94T3B0aW9uKSA9PSBBVEtfUk9MRV9NRU5V
X0lURU0pOworCisgICAgLyogSXQncyBub3QgcG9zc2libGUgdG8gcGxhY2UgdGhlIGNhcmV0IGlu
c2lkZSBhbiBvcHRpb24gZm9yIGEgY29tYm9ib3guICovCisgICAgcmVzdWx0ID0gYXRrX3RleHRf
c2V0X2NhcmV0X29mZnNldChBVEtfVEVYVChjb21ib0JveE9wdGlvbiksIDEpOworICAgIGdfYXNz
ZXJ0X2NtcGludChyZXN1bHQsID09LCBGQUxTRSk7CisKKyAgICBBdGtPYmplY3QqIHRleHRFbnRy
eSA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQocGFuZWwsIDEpOworICAgIGdfYXNz
ZXJ0KEFUS19JU19PQkpFQ1QodGV4dEVudHJ5KSk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9n
ZXRfcm9sZSh0ZXh0RW50cnkpID09IEFUS19ST0xFX0VOVFJZKTsKKworICAgIHJlc3VsdCA9IGF0
a190ZXh0X3NldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQodGV4dEVudHJ5KSwgNSk7CisgICAgZ19h
c3NlcnRfY21waW50KHJlc3VsdCwgPT0sIFRSVUUpOworICAgIG9mZnNldCA9IGF0a190ZXh0X2dl
dF9jYXJldF9vZmZzZXQoQVRLX1RFWFQodGV4dEVudHJ5KSk7CisgICAgZ19hc3NlcnRfY21waW50
KG9mZnNldCwgPT0sIDUpOworCisgICAgQXRrT2JqZWN0KiB0YWJsZSA9IGF0a19vYmplY3RfcmVm
X2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCA0KTsKKyAgICBnX2Fzc2VydChBVEtfSVNfT0JKRUNU
KHRhYmxlKSk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZSh0YWJsZSkgPT0gQVRL
X1JPTEVfVEFCTEUpOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfb2JqZWN0X2dldF9uX2FjY2Vz
c2libGVfY2hpbGRyZW4odGFibGUpLCA9PSwgNCk7CisKKyAgICBBdGtPYmplY3QqIHRhYmxlQ2Vs
bCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQodGFibGUsIDApOworICAgIGdfYXNz
ZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUodGFibGVDZWxsKSA9PSBBVEtfUk9MRV9UQUJMRV9DRUxM
KTsKKyAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhUKHRhYmxl
Q2VsbCksIDIpOworICAgIGdfYXNzZXJ0X2NtcGludChyZXN1bHQsID09LCBUUlVFKTsKKyAgICBv
ZmZzZXQgPSBhdGtfdGV4dF9nZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhUKHRhYmxlQ2VsbCkpOwor
ICAgIGdfYXNzZXJ0X2NtcGludChvZmZzZXQsID09LCAyKTsKKworICAgIGdfZnJlZSh0ZXh0Q2Fy
ZXRNb3ZlZFJlc3VsdCk7CisKKyAgICBnX29iamVjdF91bnJlZihwYXJhZ3JhcGgpOworICAgIGdf
b2JqZWN0X3VucmVmKGxpbmspOworICAgIGdfb2JqZWN0X3VucmVmKGxpc3QpOworICAgIGdfb2Jq
ZWN0X3VucmVmKGxpc3RJdGVtKTsKKyAgICBnX29iamVjdF91bnJlZihwYW5lbCk7CisgICAgZ19v
YmplY3RfdW5yZWYoY29tYm9Cb3gpOworICAgIGdfb2JqZWN0X3VucmVmKG1lbnVQb3B1cCk7Cisg
ICAgZ19vYmplY3RfdW5yZWYoY29tYm9Cb3hPcHRpb24pOworICAgIGdfb2JqZWN0X3VucmVmKHRl
eHRFbnRyeSk7CisgICAgZ19vYmplY3RfdW5yZWYodGFibGUpOworICAgIGdfb2JqZWN0X3VucmVm
KHRhYmxlQ2VsbCk7CisgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Cit9CisKK3N0YXRpYyB2
b2lkIHRlc3RXZWJraXRBdGtDYXJldE9mZnNldHNBbmRFeHRyYW5vdXNXaGl0ZVNwYWNlcygpCit7
CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2Vi
X3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOworICAgIEd0a0Fs
bG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgODAwLCA2MDAgfTsKKyAgICBndGtfd2lkZ2V0
X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOworICAgIHdl
YmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LCBjb250ZW50c1dpdGhFeHRyYW5lb3Vz
V2hpdGVTcGFjZXMsIDAsIDAsIDApOworCisgICAgLyogRW5hYmxlIGNhcmV0IGJyb3dzaW5nLiAq
LworICAgIFdlYktpdFdlYlNldHRpbmdzKiBzZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmlld19nZXRf
c2V0dGluZ3Mod2ViVmlldyk7CisgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKHNldHRpbmdzKSwg
ImVuYWJsZS1jYXJldC1icm93c2luZyIsIFRSVUUsIE5VTEwpOworCisgICAgLyogR2V0IHRvIHRo
ZSBpbm5lciBBdGtUZXh0IG9iamVjdC4gKi8KKyAgICBBdGtPYmplY3QqIG9iamVjdCA9IGdldFdl
YkFyZWFPYmplY3Qod2ViVmlldyk7CisgICAgZ19hc3NlcnQob2JqZWN0KTsKKyAgICBvYmplY3Qg
PSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMCk7CisgICAgZ19hc3Nl
cnQob2JqZWN0KTsKKworICAgIEF0a1RleHQqIHRleHRPYmplY3QgPSBBVEtfVEVYVChvYmplY3Qp
OworICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHRleHRPYmplY3QpKTsKKworICAgIGdpbnQgY2hh
cmFjdGVyQ291bnQgPSBhdGtfdGV4dF9nZXRfY2hhcmFjdGVyX2NvdW50KHRleHRPYmplY3QpOwor
ICAgIGdfYXNzZXJ0X2NtcGludChjaGFyYWN0ZXJDb3VudCwgPT0sIDI1KTsKKworICAgIGdib29s
ZWFuIHJlc3VsdCA9IGF0a190ZXh0X3NldF9jYXJldF9vZmZzZXQodGV4dE9iamVjdCwgY2hhcmFj
dGVyQ291bnQgLSAxKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocmVzdWx0LCA9PSwgVFJVRSk7CisK
KyAgICBnaW50IGNhcmV0T2Zmc2V0ID0gYXRrX3RleHRfZ2V0X2NhcmV0X29mZnNldCh0ZXh0T2Jq
ZWN0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoY2FyZXRPZmZzZXQsID09LCBjaGFyYWN0ZXJDb3Vu
dCAtIDEpOworCisgICAgcmVzdWx0ID0gYXRrX3RleHRfc2V0X2NhcmV0X29mZnNldCh0ZXh0T2Jq
ZWN0LCBjaGFyYWN0ZXJDb3VudCk7CisgICAgZ19hc3NlcnRfY21waW50KHJlc3VsdCwgPT0sIFRS
VUUpOworCisgICAgY2FyZXRPZmZzZXQgPSBhdGtfdGV4dF9nZXRfY2FyZXRfb2Zmc2V0KHRleHRP
YmplY3QpOworICAgIGdfYXNzZXJ0X2NtcGludChjYXJldE9mZnNldCwgPT0sIGNoYXJhY3RlckNv
dW50KTsKKworICAgIGdfb2JqZWN0X3VucmVmKG9iamVjdCk7CisgICAgZ19vYmplY3RfdW5yZWYo
d2ViVmlldyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtDb21ib0JveCgpCit7Cisg
ICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3Zp
ZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOworICAgIEd0a0FsbG9j
YXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgODAwLCA2MDAgfTsKKyAgICBndGtfd2lkZ2V0X3Np
emVfYWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOworICAgIHdlYmtp
dF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LCBjb21ib0JveFNlbGVjdG9yLCAwLCAwLCAw
KTsKKworICAgIEF0a09iamVjdCogb2JqZWN0ID0gZ2V0V2ViQXJlYU9iamVjdCh3ZWJWaWV3KTsK
KyAgICBnX2Fzc2VydChvYmplY3QpOworCisgICAgQXRrT2JqZWN0KiBmb3JtT2JqZWN0ID0gYXRr
X29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDApOworICAgIGdfYXNzZXJ0KGZv
cm1PYmplY3QpOworCisgICAgQXRrT2JqZWN0KiBjb21ib0JveCA9IGF0a19vYmplY3RfcmVmX2Fj
Y2Vzc2libGVfY2hpbGQoZm9ybU9iamVjdCwgMCk7CisgICAgZ19hc3NlcnQoQVRLX0lTX09CSkVD
VChjb21ib0JveCkpOworCisgICAgQXRrT2JqZWN0KiBtZW51UG9wdXAgPSBhdGtfb2JqZWN0X3Jl
Zl9hY2Nlc3NpYmxlX2NoaWxkKGNvbWJvQm94LCAwKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfT0JK
RUNUKG1lbnVQb3B1cCkpOworCisgICAgQXRrT2JqZWN0KiBpdGVtMSA9IGF0a19vYmplY3RfcmVm
X2FjY2Vzc2libGVfY2hpbGQobWVudVBvcHVwLCAwKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfT0JK
RUNUKGl0ZW0xKSk7CisKKyAgICBBdGtPYmplY3QqIGl0ZW0yID0gYXRrX29iamVjdF9yZWZfYWNj
ZXNzaWJsZV9jaGlsZChtZW51UG9wdXAsIDEpOworICAgIGdfYXNzZXJ0KEFUS19JU19PQkpFQ1Qo
aXRlbTIpKTsKKworICAgIC8qIENoZWNrIHJvbGVzLiAqLworICAgIGdfYXNzZXJ0KGF0a19vYmpl
Y3RfZ2V0X3JvbGUoY29tYm9Cb3gpID09IEFUS19ST0xFX0NPTUJPX0JPWCk7CisgICAgZ19hc3Nl
cnQoYXRrX29iamVjdF9nZXRfcm9sZShtZW51UG9wdXApID09IEFUS19ST0xFX01FTlUpOworICAg
IGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoaXRlbTEpID09IEFUS19ST0xFX01FTlVfSVRF
TSk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShpdGVtMikgPT0gQVRLX1JPTEVf
TUVOVV9JVEVNKTsKKworICAgIC8qIENoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQXRr
U2VsZWN0aW9uIGludGVyZmFjZS4gKi8KKyAgICBnX2Fzc2VydChBVEtfSVNfU0VMRUNUSU9OKGNv
bWJvQm94KSk7CisgICAgQXRrU2VsZWN0aW9uKiBhdGtTZWxlY3Rpb24gPSBBVEtfU0VMRUNUSU9O
KGNvbWJvQm94KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX3NlbGVjdGlvbl9nZXRfc2VsZWN0
aW9uX2NvdW50KGF0a1NlbGVjdGlvbiksID09LCAxKTsKKyAgICBnX2Fzc2VydChhdGtfc2VsZWN0
aW9uX2lzX2NoaWxkX3NlbGVjdGVkKGF0a1NlbGVjdGlvbiwgMCkpOworICAgIGdfYXNzZXJ0KCFh
dGtfc2VsZWN0aW9uX2lzX2NoaWxkX3NlbGVjdGVkKGF0a1NlbGVjdGlvbiwgMSkpOworICAgIEF0
a09iamVjdCogc2VsZWN0ZWRJdGVtID0gYXRrX3NlbGVjdGlvbl9yZWZfc2VsZWN0aW9uKGF0a1Nl
bGVjdGlvbiwgMCk7CisgICAgZ19hc3NlcnQoc2VsZWN0ZWRJdGVtID09IGl0ZW0xKTsKKyAgICBn
X29iamVjdF91bnJlZihzZWxlY3RlZEl0ZW0pOworCisgICAgLyogQ2hlY2sgdGhhdCB0aGUgbWVu
dSBwb3B1cCBoYXMgMCBsaW5rcyBhbmQgZG9lc24ndCBjcmFzaCBmcm9tIGNoZWNraW5nLiAqLwor
ICAgIGdpbnQgbkxpbmtzID0gYXRrX2h5cGVydGV4dF9nZXRfbl9saW5rcyhBVEtfSFlQRVJURVhU
KG1lbnVQb3B1cCkpOworICAgIGdfYXNzZXJ0X2NtcGludChuTGlua3MsID09LCAwKTsKKworICAg
IC8qIENoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIEF0a0FjdGlvbiBpbnRlcmZhY2Uu
ICovCisgICAgZ19hc3NlcnQoQVRLX0lTX0FDVElPTihjb21ib0JveCkpOworICAgIEF0a0FjdGlv
biogYXRrQWN0aW9uID0gQVRLX0FDVElPTihjb21ib0JveCk7CisgICAgZ19hc3NlcnRfY21waW50
KGF0a19hY3Rpb25fZ2V0X25fYWN0aW9ucyhhdGtBY3Rpb24pLCA9PSwgMSk7CisgICAgZ19hc3Nl
cnQoYXRrX2FjdGlvbl9kb19hY3Rpb24oYXRrQWN0aW9uLCAwKSk7CisKKyAgICBnX2Fzc2VydChB
VEtfSVNfQUNUSU9OKG1lbnVQb3B1cCkpOworICAgIGF0a0FjdGlvbiA9IEFUS19BQ1RJT04obWVu
dVBvcHVwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2FjdGlvbl9nZXRfbl9hY3Rpb25zKGF0
a0FjdGlvbiksID09LCAxKTsKKyAgICBnX2Fzc2VydChhdGtfYWN0aW9uX2RvX2FjdGlvbihhdGtB
Y3Rpb24sIDApKTsKKworICAgIGdfYXNzZXJ0KEFUS19JU19BQ1RJT04oaXRlbTEpKTsKKyAgICBh
dGtBY3Rpb24gPSBBVEtfQUNUSU9OKGl0ZW0xKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2Fj
dGlvbl9nZXRfbl9hY3Rpb25zKGF0a0FjdGlvbiksID09LCAxKTsKKyAgICBnX2Fzc2VydChhdGtf
YWN0aW9uX2RvX2FjdGlvbihhdGtBY3Rpb24sIDApKTsKKworICAgIGdfYXNzZXJ0KEFUS19JU19B
Q1RJT04oaXRlbTIpKTsKKyAgICBhdGtBY3Rpb24gPSBBVEtfQUNUSU9OKGl0ZW0yKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoYXRrX2FjdGlvbl9nZXRfbl9hY3Rpb25zKGF0a0FjdGlvbiksID09LCAx
KTsKKyAgICBnX2Fzc2VydChhdGtfYWN0aW9uX2RvX2FjdGlvbihhdGtBY3Rpb24sIDApKTsKKwor
ICAgIC8qIEFmdGVyIHNlbGVjdGluZyB0aGUgc2Vjb25kIGl0ZW0sIHNlbGVjdGlvbiBzaG91bGQg
aGF2ZSBjaGFuZ2VkLiAqLworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfc2VsZWN0aW9uX2dldF9z
ZWxlY3Rpb25fY291bnQoYXRrU2VsZWN0aW9uKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0KCFhdGtf
c2VsZWN0aW9uX2lzX2NoaWxkX3NlbGVjdGVkKGF0a1NlbGVjdGlvbiwgMCkpOworICAgIGdfYXNz
ZXJ0KGF0a19zZWxlY3Rpb25faXNfY2hpbGRfc2VsZWN0ZWQoYXRrU2VsZWN0aW9uLCAxKSk7Cisg
ICAgc2VsZWN0ZWRJdGVtID0gYXRrX3NlbGVjdGlvbl9yZWZfc2VsZWN0aW9uKGF0a1NlbGVjdGlv
biwgMCk7CisgICAgZ19hc3NlcnQoc2VsZWN0ZWRJdGVtID09IGl0ZW0yKTsKKyAgICBnX29iamVj
dF91bnJlZihzZWxlY3RlZEl0ZW0pOworCisgICAgZ19vYmplY3RfdW5yZWYoZm9ybU9iamVjdCk7
CisgICAgZ19vYmplY3RfdW5yZWYoY29tYm9Cb3gpOworICAgIGdfb2JqZWN0X3VucmVmKG1lbnVQ
b3B1cCk7CisgICAgZ19vYmplY3RfdW5yZWYoaXRlbTEpOworICAgIGdfb2JqZWN0X3VucmVmKGl0
ZW0yKTsKKyAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKK30KKworc3RhdGljIGdjaGFyKiBs
b2FkaW5nRXZlbnRzUmVzdWx0ID0gMDsKKworc3RhdGljIHZvaWQgdXBkYXRlTG9hZGluZ0V2ZW50
c1Jlc3VsdChjb25zdCBnY2hhciogc2lnbmFsTmFtZSkKK3sKKyAgICBnX2Fzc2VydChzaWduYWxO
YW1lKTsKKworICAgIGdjaGFyKiBwcmV2aW91c1Jlc3VsdCA9IGxvYWRpbmdFdmVudHNSZXN1bHQ7
CisgICAgbG9hZGluZ0V2ZW50c1Jlc3VsdCA9IGdfc3RyZHVwX3ByaW50ZigiJXN8JXMiLCBwcmV2
aW91c1Jlc3VsdCwgc2lnbmFsTmFtZSk7CisgICAgZ19mcmVlKHByZXZpb3VzUmVzdWx0KTsKK30K
Kworc3RhdGljIGdib29sZWFuIGRvY3VtZW50TG9hZGluZ0V2ZW50Q2FsbGJhY2soR1NpZ25hbElu
dm9jYXRpb25IaW50ICpzaWduYWxIaW50LCBndWludCBudW1QYXJhbVZhbHVlcywgY29uc3QgR1Zh
bHVlICpwYXJhbVZhbHVlcywgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICAvLyBBdCBsZWFzdCB3ZSBz
aG91bGQgcmVjZWl2ZSB0aGUgaW5zdGFuY2UgZW1pdHRpbmcgdGhlIHNpZ25hbC4KKyAgICBpZiAo
bnVtUGFyYW1WYWx1ZXMgPCAxKQorICAgICAgICByZXR1cm4gVFJVRTsKKworICAgIEdTaWduYWxR
dWVyeSBzaWduYWxfcXVlcnk7CisgICAgZ19zaWduYWxfcXVlcnkoc2lnbmFsSGludC0+c2lnbmFs
X2lkLCAmc2lnbmFsX3F1ZXJ5KTsKKworICAgIHVwZGF0ZUxvYWRpbmdFdmVudHNSZXN1bHQoc2ln
bmFsX3F1ZXJ5LnNpZ25hbF9uYW1lKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZv
aWQgdGVzdFdlYmtpdEF0a0RvY3VtZW50TG9hZGluZ0V2ZW50cygpCit7CisgICAgV2ViS2l0V2Vi
Vmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwor
ICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOworICAgIEd0a0FsbG9jYXRpb24gYWxsb2Nh
dGlvbiA9IHsgMCwgMCwgODAwLCA2MDAgfTsKKyAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUo
R1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOworCisgICAgLyogQ29ubmVjdCBnbG9i
YWxseSB0byBzZWUgdGhvc2UgZXZlbnRzIGR1cmluZyBhIGZ1dHVyZSBsb2FkLiAqLworICAgIGd1
aW50IGxvYWRDb21wbGV0ZUxpc3RlbmVySWQgPSBhdGtfYWRkX2dsb2JhbF9ldmVudF9saXN0ZW5l
cihkb2N1bWVudExvYWRpbmdFdmVudENhbGxiYWNrLCAiQVRLOkF0a0RvY3VtZW50OmxvYWQtY29t
cGxldGUiKTsKKworICAgIC8qIERvIHRoZSBsb2FkLCBzbyB3ZSBjYW4gc2VlIHRob3NlIGV2ZW50
cyBoYXBwZW5pbmcuICovCisgICAgbG9hZGluZ0V2ZW50c1Jlc3VsdCA9IGdfc3RyZHVwKCIiKTsK
KyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgY29udGVudHMsIDAsIDAs
IDApOworCisgICAgLyogVHJpZ2dlciB0aGUgY3JlYXRpb24gb2YgdGhlIGZ1bGwgYWNjZXNzaWJp
bGl0eSBoaWVyYXJjaHkgYnkKKyAgICAgICBhc2tpbmcgZm9yIHRoZSB3ZWJBcmVhIG9iamVjdCwg
c28gd2UgY2FuIGxpc3RlbiB0byBldmVudHMuICovCisgICAgZ2V0V2ViQXJlYU9iamVjdCh3ZWJW
aWV3KTsKKworICAgIGF0a19yZW1vdmVfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGxvYWRDb21wbGV0
ZUxpc3RlbmVySWQpOworCisgICAgZ19hc3NlcnRfY21wc3RyKGxvYWRpbmdFdmVudHNSZXN1bHQs
ID09LCAifGxvYWQtY29tcGxldGUiKTsKKworICAgIGdfZnJlZShsb2FkaW5nRXZlbnRzUmVzdWx0
KTsKKyAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdl
YmtpdEF0a0VtYmVkZGVkT2JqZWN0cygpCit7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9
IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3Jl
Zl9zaW5rKHdlYlZpZXcpOworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwg
ODAwLCA2MDAgfTsKKyAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJW
aWV3KSwgJmFsbG9jYXRpb24pOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJW
aWV3LCBlbWJlZGRlZE9iamVjdHMsIDAsIDAsIDApOworCisgICAgQXRrT2JqZWN0KiBvYmplY3Qg
PSBnZXRXZWJBcmVhT2JqZWN0KHdlYlZpZXcpOworICAgIGdfYXNzZXJ0KG9iamVjdCk7CisKKyAg
ICBBdGtUZXh0KiBwYXJhZ3JhcGgxID0gQVRLX1RFWFQoYXRrX29iamVjdF9yZWZfYWNjZXNzaWJs
ZV9jaGlsZChvYmplY3QsIDApKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChwYXJhZ3JhcGgx
KSk7CisgICAgZ19hc3NlcnQoQVRLX0lTX0hZUEVSVEVYVChwYXJhZ3JhcGgxKSk7CisKKyAgICBn
aW50IG5MaW5rcyA9IGF0a19oeXBlcnRleHRfZ2V0X25fbGlua3MoQVRLX0hZUEVSVEVYVChwYXJh
Z3JhcGgxKSk7CisgICAgZ19hc3NlcnRfY21waW50KG5MaW5rcywgPT0sIDIpOworCisgICAgQXRr
SHlwZXJsaW5rKiBoTGluayA9IGF0a19oeXBlcnRleHRfZ2V0X2xpbmsoQVRLX0hZUEVSVEVYVChw
YXJhZ3JhcGgxKSwgMCk7CisgICAgZ19hc3NlcnQoQVRLX0hZUEVSTElOSyhoTGluaykpOworICAg
IEF0a09iamVjdCogaExpbmtPYmplY3QgPSBhdGtfaHlwZXJsaW5rX2dldF9vYmplY3QoaExpbmss
IDApOworICAgIGdfYXNzZXJ0KEFUS19PQkpFQ1QoaExpbmtPYmplY3QpKTsKKyAgICBnX2Fzc2Vy
dChhdGtfb2JqZWN0X2dldF9yb2xlKGhMaW5rT2JqZWN0KSA9PSBBVEtfUk9MRV9DSEVDS19CT1gp
OworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9zdGFydF9pbmRleChoTGlu
ayksID09LCA4KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfZW5kX2lu
ZGV4KGhMaW5rKSwgPT0sIDkpOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dl
dF9uX2FuY2hvcnMoaExpbmspLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGF0a19oeXBl
cmxpbmtfZ2V0X3VyaShoTGluaywgMCksID09LCAwKTsKKworICAgIEF0a1RleHQqIHBhcmFncmFw
aDIgPSBBVEtfVEVYVChhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMSkp
OworICAgIGdfYXNzZXJ0KEFUS19JU19IWVBFUlRFWFQocGFyYWdyYXBoMikpOworCisgICAgbkxp
bmtzID0gYXRrX2h5cGVydGV4dF9nZXRfbl9saW5rcyhBVEtfSFlQRVJURVhUKHBhcmFncmFwaDIp
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQobkxpbmtzLCA9PSwgMSk7CisKKyAgICBoTGluayA9IGF0
a19oeXBlcnRleHRfZ2V0X2xpbmsoQVRLX0hZUEVSVEVYVChwYXJhZ3JhcGgyKSwgMCk7CisgICAg
Z19hc3NlcnQoQVRLX0hZUEVSTElOSyhoTGluaykpOworICAgIGhMaW5rT2JqZWN0ID0gYXRrX2h5
cGVybGlua19nZXRfb2JqZWN0KGhMaW5rLCAwKTsKKyAgICBnX2Fzc2VydChBVEtfT0JKRUNUKGhM
aW5rT2JqZWN0KSk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShoTGlua09iamVj
dCkgPT0gQVRLX1JPTEVfQ09NQk9fQk9YKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVy
bGlua19nZXRfc3RhcnRfaW5kZXgoaExpbmspLCA9PSwgOCk7CisgICAgZ19hc3NlcnRfY21waW50
KGF0a19oeXBlcmxpbmtfZ2V0X2VuZF9pbmRleChoTGluayksID09LCA5KTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfbl9hbmNob3JzKGhMaW5rKSwgPT0sIDEpOworICAg
IGdfYXNzZXJ0X2NtcHN0cihhdGtfaHlwZXJsaW5rX2dldF91cmkoaExpbmssIDApLCA9PSwgMCk7
CisKKyAgICBBdGtUZXh0KiBwYXJhZ3JhcGgzID0gQVRLX1RFWFQoYXRrX29iamVjdF9yZWZfYWNj
ZXNzaWJsZV9jaGlsZChvYmplY3QsIDIpKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfSFlQRVJURVhU
KHBhcmFncmFwaDMpKTsKKworICAgIG5MaW5rcyA9IGF0a19oeXBlcnRleHRfZ2V0X25fbGlua3Mo
QVRLX0hZUEVSVEVYVChwYXJhZ3JhcGgzKSk7CisgICAgZ19hc3NlcnRfY21waW50KG5MaW5rcywg
PT0sIDEpOworCisgICAgaExpbmsgPSBhdGtfaHlwZXJ0ZXh0X2dldF9saW5rKEFUS19IWVBFUlRF
WFQocGFyYWdyYXBoMyksIDApOworICAgIGdfYXNzZXJ0KEFUS19IWVBFUkxJTksoaExpbmspKTsK
KyAgICBoTGlua09iamVjdCA9IGF0a19oeXBlcmxpbmtfZ2V0X29iamVjdChoTGluaywgMCk7Cisg
ICAgZ19hc3NlcnQoQVRLX09CSkVDVChoTGlua09iamVjdCkpOworICAgIGdfYXNzZXJ0KGF0a19v
YmplY3RfZ2V0X3JvbGUoaExpbmtPYmplY3QpID09IEFUS19ST0xFX1BVU0hfQlVUVE9OKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfc3RhcnRfaW5kZXgoaExpbmspLCA9
PSwgMCk7CisgICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0X2VuZF9pbmRleCho
TGluayksID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfbl9h
bmNob3JzKGhMaW5rKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcHN0cihhdGtfaHlwZXJsaW5r
X2dldF91cmkoaExpbmssIDApLCA9PSwgMCk7CisKKyAgICBnX29iamVjdF91bnJlZihwYXJhZ3Jh
cGgxKTsKKyAgICBnX29iamVjdF91bnJlZihwYXJhZ3JhcGgyKTsKKyAgICBnX29iamVjdF91bnJl
ZihwYXJhZ3JhcGgzKTsKKyAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKK30KKworc3RhdGlj
IHZvaWQgdGVzdFdlYmtpdEF0a0dldEhlYWRlcnNJblRhYmxlKCkKK3sKKyAgICBXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Cisg
ICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0
aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9OworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShH
VEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7CisgICAgd2Via2l0X3dlYl92aWV3X2xv
YWRfc3RyaW5nKHdlYlZpZXcsIGNvbnRlbnRzSW5UYWJsZVdpdGhIZWFkZXJzLCAwLCAwLCAwKTsK
KworICAgIEF0a09iamVjdCogYXhXZWJWaWV3ID0gZ2V0V2ViQXJlYU9iamVjdCh3ZWJWaWV3KTsK
KyAgICBnX2Fzc2VydChheFdlYlZpZXcpOworCisgICAgLyogQ2hlY2sgdGFibGUgd2l0aCBib3Ro
IGNvbHVtbiBhbmQgcm93IGhlYWRlcnMuICovCisgICAgQXRrT2JqZWN0KiB0YWJsZSA9IGF0a19v
YmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoYXhXZWJWaWV3LCAwKTsKKyAgICBnX2Fzc2VydCh0
YWJsZSk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZSh0YWJsZSkgPT0gQVRLX1JP
TEVfVEFCTEUpOworCisgICAgQXRrT2JqZWN0KiBjb2xIZWFkZXIgPSBhdGtfdGFibGVfZ2V0X2Nv
bHVtbl9oZWFkZXIoQVRLX1RBQkxFKHRhYmxlKSwgMCk7CisgICAgZ19hc3NlcnQoY29sSGVhZGVy
KTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGNvbEhlYWRlcikgPT0gQVRLX1JP
TEVfVEFCTEVfQ0VMTCk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfaW5kZXhfaW5fcGFy
ZW50KGNvbEhlYWRlcikgPT0gMCk7CisKKyAgICBjb2xIZWFkZXIgPSBhdGtfdGFibGVfZ2V0X2Nv
bHVtbl9oZWFkZXIoQVRLX1RBQkxFKHRhYmxlKSwgMSk7CisgICAgZ19hc3NlcnQoY29sSGVhZGVy
KTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGNvbEhlYWRlcikgPT0gQVRLX1JP
TEVfVEFCTEVfQ0VMTCk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfaW5kZXhfaW5fcGFy
ZW50KGNvbEhlYWRlcikgPT0gMSk7CisKKyAgICBjb2xIZWFkZXIgPSBhdGtfdGFibGVfZ2V0X2Nv
bHVtbl9oZWFkZXIoQVRLX1RBQkxFKHRhYmxlKSwgMik7CisgICAgZ19hc3NlcnQoY29sSGVhZGVy
KTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGNvbEhlYWRlcikgPT0gQVRLX1JP
TEVfVEFCTEVfQ0VMTCk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfaW5kZXhfaW5fcGFy
ZW50KGNvbEhlYWRlcikgPT0gMik7CisKKyAgICBjb2xIZWFkZXIgPSBhdGtfdGFibGVfZ2V0X2Nv
bHVtbl9oZWFkZXIoQVRLX1RBQkxFKHRhYmxlKSwgMyk7CisgICAgZ19hc3NlcnQoY29sSGVhZGVy
KTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGNvbEhlYWRlcikgPT0gQVRLX1JP
TEVfVEFCTEVfQ0VMTCk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfaW5kZXhfaW5fcGFy
ZW50KGNvbEhlYWRlcikgPT0gMik7CisKKyAgICBBdGtPYmplY3QqIHJvd0hlYWRlciA9IGF0a190
YWJsZV9nZXRfcm93X2hlYWRlcihBVEtfVEFCTEUodGFibGUpLCAwKTsKKyAgICBnX2Fzc2VydChy
b3dIZWFkZXIpOworICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUocm93SGVhZGVyKSA9
PSBBVEtfUk9MRV9UQUJMRV9DRUxMKTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9pbmRl
eF9pbl9wYXJlbnQocm93SGVhZGVyKSA9PSAwKTsKKworICAgIHJvd0hlYWRlciA9IGF0a190YWJs
ZV9nZXRfcm93X2hlYWRlcihBVEtfVEFCTEUodGFibGUpLCAxKTsKKyAgICBnX2Fzc2VydChyb3dI
ZWFkZXIpOworICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUocm93SGVhZGVyKSA9PSBB
VEtfUk9MRV9UQUJMRV9DRUxMKTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9pbmRleF9p
bl9wYXJlbnQocm93SGVhZGVyKSA9PSAzKTsKKworICAgIHJvd0hlYWRlciA9IGF0a190YWJsZV9n
ZXRfcm93X2hlYWRlcihBVEtfVEFCTEUodGFibGUpLCAyKTsKKyAgICBnX2Fzc2VydChyb3dIZWFk
ZXIpOworICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUocm93SGVhZGVyKSA9PSBBVEtf
Uk9MRV9UQUJMRV9DRUxMKTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9pbmRleF9pbl9w
YXJlbnQocm93SGVhZGVyKSA9PSA3KTsKKworICAgIHJvd0hlYWRlciA9IGF0a190YWJsZV9nZXRf
cm93X2hlYWRlcihBVEtfVEFCTEUodGFibGUpLCAzKTsKKyAgICBnX2Fzc2VydChyb3dIZWFkZXIp
OworICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUocm93SGVhZGVyKSA9PSBBVEtfUk9M
RV9UQUJMRV9DRUxMKTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9pbmRleF9pbl9wYXJl
bnQocm93SGVhZGVyKSA9PSA3KTsKKworICAgIGdfb2JqZWN0X3VucmVmKHRhYmxlKTsKKworICAg
IC8qIENoZWNrIHRhYmxlIHdpdGggbm8gaGVhZGVycyBhdCBhbGwuICovCisgICAgdGFibGUgPSBh
dGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGF4V2ViVmlldywgMSk7CisgICAgZ19hc3Nl
cnQodGFibGUpOworICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUodGFibGUpID09IEFU
S19ST0xFX1RBQkxFKTsKKworICAgIGNvbEhlYWRlciA9IGF0a190YWJsZV9nZXRfY29sdW1uX2hl
YWRlcihBVEtfVEFCTEUodGFibGUpLCAwKTsKKyAgICBnX2Fzc2VydChjb2xIZWFkZXIgPT0gMCk7
CisKKyAgICBjb2xIZWFkZXIgPSBhdGtfdGFibGVfZ2V0X2NvbHVtbl9oZWFkZXIoQVRLX1RBQkxF
KHRhYmxlKSwgMSk7CisgICAgZ19hc3NlcnQoY29sSGVhZGVyID09IDApOworCisgICAgcm93SGVh
ZGVyID0gYXRrX3RhYmxlX2dldF9yb3dfaGVhZGVyKEFUS19UQUJMRSh0YWJsZSksIDApOworICAg
IGdfYXNzZXJ0KHJvd0hlYWRlciA9PSAwKTsKKworICAgIHJvd0hlYWRlciA9IGF0a190YWJsZV9n
ZXRfcm93X2hlYWRlcihBVEtfVEFCTEUodGFibGUpLCAxKTsKKyAgICBnX2Fzc2VydChyb3dIZWFk
ZXIgPT0gMCk7CisKKyAgICBnX29iamVjdF91bnJlZih0YWJsZSk7CisgICAgZ19vYmplY3RfdW5y
ZWYod2ViVmlldyk7Cit9CisKK3N0YXRpYyBnaW50IGNvbXBBdGtBdHRyaWJ1dGUoQXRrQXR0cmli
dXRlKiBhMSwgQXRrQXR0cmlidXRlKiBhMikKK3sKKyAgICBnaW50IHN0cmNtcFZhbCA9IGdfc3Ry
Y21wMChhMS0+bmFtZSwgYTItPm5hbWUpOworICAgIGlmIChzdHJjbXBWYWwpCisgICAgICAgIHJl
dHVybiBzdHJjbXBWYWw7CisgICAgcmV0dXJuIGdfc3RyY21wMChhMS0+dmFsdWUsIGEyLT52YWx1
ZSk7Cit9CisKK3N0YXRpYyBnaW50IGNvbXBBdGtBdHRyaWJ1dGVOYW1lKEF0a0F0dHJpYnV0ZSog
YTEsIEF0a0F0dHJpYnV0ZSogYTIpCit7CisgICAgcmV0dXJuIGdfc3RyY21wMChhMS0+bmFtZSwg
YTItPm5hbWUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gYXRrQXR0cmlidXRlU2V0QXR0cmlidXRl
TmFtZUhhc1ZhbHVlKEF0a0F0dHJpYnV0ZVNldCogc2V0LCBjb25zdCBnY2hhciogYXR0cmlidXRl
TmFtZSwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIEF0a0F0dHJpYnV0ZSBhdDsKKyAgICBh
dC5uYW1lID0gKGdjaGFyKilhdHRyaWJ1dGVOYW1lOworICAgIEdTTGlzdCogZWxlbWVudCA9IGdf
c2xpc3RfZmluZF9jdXN0b20oc2V0LCAmYXQsIChHQ29tcGFyZUZ1bmMpY29tcEF0a0F0dHJpYnV0
ZU5hbWUpOworICAgIHJldHVybiBlbGVtZW50ICYmICFnX3N0cmNtcDAoKChBdGtBdHRyaWJ1dGUq
KShlbGVtZW50LT5kYXRhKSktPnZhbHVlLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBh
dGtBdHRyaWJ1dGVTZXRDb250YWluc0F0dHJpYnV0ZU5hbWUoQXRrQXR0cmlidXRlU2V0KiBzZXQs
IGNvbnN0IGdjaGFyKiBhdHRyaWJ1dGVOYW1lKQoreworICAgIEF0a0F0dHJpYnV0ZSBhdDsKKyAg
ICBhdC5uYW1lID0gKGdjaGFyKilhdHRyaWJ1dGVOYW1lOworICAgIHJldHVybiBnX3NsaXN0X2Zp
bmRfY3VzdG9tKHNldCwgJmF0LCAoR0NvbXBhcmVGdW5jKWNvbXBBdGtBdHRyaWJ1dGVOYW1lKSA/
IHRydWUgOiBmYWxzZTsKK30KKworc3RhdGljIGdib29sZWFuIGF0a0F0dHJpYnV0ZVNldEF0dHJp
YnV0ZUhhc1ZhbHVlKEF0a0F0dHJpYnV0ZVNldCogc2V0LCBBdGtUZXh0QXR0cmlidXRlIGF0dHJp
YnV0ZSwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIHJldHVybiBhdGtBdHRyaWJ1dGVTZXRB
dHRyaWJ1dGVOYW1lSGFzVmFsdWUoc2V0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoYXR0
cmlidXRlKSwgdmFsdWUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gYXRrQXR0cmlidXRlU2V0QXJl
RXF1YWwoQXRrQXR0cmlidXRlU2V0KiBzZXQxLCBBdGtBdHRyaWJ1dGVTZXQqIHNldDIpCit7Cisg
ICAgaWYgKCFzZXQxKQorICAgICAgICByZXR1cm4gIXNldDI7CisKKyAgICBzZXQxID0gZ19zbGlz
dF9zb3J0KHNldDEsIChHQ29tcGFyZUZ1bmMpY29tcEF0a0F0dHJpYnV0ZSk7CisgICAgc2V0MiA9
IGdfc2xpc3Rfc29ydChzZXQyLCAoR0NvbXBhcmVGdW5jKWNvbXBBdGtBdHRyaWJ1dGUpOworCisg
ICAgd2hpbGUgKHNldDEpIHsKKyAgICAgICAgaWYgKCFzZXQyIHx8IGNvbXBBdGtBdHRyaWJ1dGUo
c2V0MS0+ZGF0YSwgc2V0Mi0+ZGF0YSkpCisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAg
ICAgICAgc2V0MSA9IHNldDEtPm5leHQ7CisgICAgICAgIHNldDIgPSBzZXQyLT5uZXh0OworICAg
IH0KKworICAgIHJldHVybiAoIXNldDIpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRr
VGV4dEF0dHJpYnV0ZXMoKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRf
V0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBnX29iamVjdF9yZWZfc2luayh3
ZWJWaWV3KTsKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDgwMCwgNjAw
IH07CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQod2ViVmlldyksICZh
bGxvY2F0aW9uKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgdGV4
dFdpdGhBdHRyaWJ1dGVzLCAwLCAwLCAwKTsKKworICAgIEF0a09iamVjdCogb2JqZWN0ID0gZ2V0
V2ViQXJlYU9iamVjdCh3ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChvYmplY3QpOworCisgICAgQXRr
T2JqZWN0KiBjaGlsZCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAw
KTsKKyAgICBnX2Fzc2VydChjaGlsZCAmJiBBVEtfSVNfVEVYVChjaGlsZCkpOworICAgIEF0a1Rl
eHQqIGNoaWxkVGV4dCA9IEFUS19URVhUKGNoaWxkKTsKKworICAgIGdpbnQgc3RhcnRPZmZzZXQ7
CisgICAgZ2ludCBlbmRPZmZzZXQ7CisgICAgQXRrQXR0cmlidXRlU2V0KiBzZXQxID0gYXRrX3Rl
eHRfZ2V0X3J1bl9hdHRyaWJ1dGVzKGNoaWxkVGV4dCwgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zm
c2V0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAwKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMTIpOworICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0
ZVNldEFyZUVxdWFsKHNldDEsIDApKTsKKworICAgIEF0a0F0dHJpYnV0ZVNldCogc2V0MiA9IGF0
a190ZXh0X2dldF9ydW5fYXR0cmlidXRlcyhjaGlsZFRleHQsIDE1LCAmc3RhcnRPZmZzZXQsICZl
bmRPZmZzZXQpOworICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDEyKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMTcpOworICAgIGdfYXNzZXJ0KGF0a0F0
dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDIsIEFUS19URVhUX0FUVFJfU1RZTEUsICJp
dGFsaWMiKSk7CisKKyAgICBBdGtBdHRyaWJ1dGVTZXQqIHNldDMgPSBhdGtfdGV4dF9nZXRfcnVu
X2F0dHJpYnV0ZXMoY2hpbGRUZXh0LCAxNywgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAxNyk7CisgICAgZ19hc3NlcnRfY21w
aW50KGVuZE9mZnNldCwgPT0sIDQwKTsKKyAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRy
aWJ1dGVIYXNWYWx1ZShzZXQzLCBBVEtfVEVYVF9BVFRSX1dFSUdIVCwgIjcwMCIpKTsKKworICAg
IEF0a0F0dHJpYnV0ZVNldCogc2V0NCA9IGF0a190ZXh0X2dldF9kZWZhdWx0X2F0dHJpYnV0ZXMo
Y2hpbGRUZXh0KTsKKyAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVIYXNWYWx1
ZShzZXQ0LCBBVEtfVEVYVF9BVFRSX1NUWUxFLCAibm9ybWFsIikpOworICAgIGdfYXNzZXJ0KGF0
a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDQsIEFUS19URVhUX0FUVFJfSlVTVElG
SUNBVElPTiwgInJpZ2h0IikpOworICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0
ZUhhc1ZhbHVlKHNldDQsIEFUS19URVhUX0FUVFJfU0laRSwgIjE0IikpOworICAgIGF0a19hdHRy
aWJ1dGVfc2V0X2ZyZWUoc2V0MSk7CisgICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJlZShzZXQyKTsK
KyAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHNldDMpOworICAgIGF0a19hdHRyaWJ1dGVfc2V0
X2ZyZWUoc2V0NCk7CisKKyAgICBnX29iamVjdF91bnJlZihjaGlsZCk7CisgICAgY2hpbGQgPSBh
dGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMSk7CisgICAgZ19hc3NlcnQo
Y2hpbGQgJiYgQVRLX0lTX1RFWFQoY2hpbGQpKTsKKyAgICBjaGlsZFRleHQgPSBBVEtfVEVYVChj
aGlsZCk7CisKKyAgICBzZXQxID0gYXRrX3RleHRfZ2V0X2RlZmF1bHRfYXR0cmlidXRlcyhjaGls
ZFRleHQpOworICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKHNl
dDEsIEFUS19URVhUX0FUVFJfRkFNSUxZX05BTUUsICJtb25vc3BhY2UiKSk7CisgICAgZ19hc3Nl
cnQoYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlSGFzVmFsdWUoc2V0MSwgQVRLX1RFWFRfQVRUUl9T
VFlMRSwgIm5vcm1hbCIpKTsKKyAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVI
YXNWYWx1ZShzZXQxLCBBVEtfVEVYVF9BVFRSX1NUUklLRVRIUk9VR0gsICJmYWxzZSIpKTsKKyAg
ICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVIYXNWYWx1ZShzZXQxLCBBVEtfVEVY
VF9BVFRSX1dFSUdIVCwgIjQwMCIpKTsKKyAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRy
aWJ1dGVIYXNWYWx1ZShzZXQxLCBBVEtfVEVYVF9BVFRSX0ZHX0NPTE9SLCAiMTIwLDEyMSwxMjIi
KSk7CisKKyAgICBzZXQyID0gYXRrX3RleHRfZ2V0X3J1bl9hdHRyaWJ1dGVzKGNoaWxkVGV4dCwg
NDMsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgZ19hc3NlcnRfY21waW50KHN0YXJ0
T2Zmc2V0LCA9PSwgNDMpOworICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCA4MCk7
CisgICAgLyogQ2hlY2tzIHRoYXQgZGVmYXVsdCBhdHRyaWJ1dGVzIG9mIHRleHQgYXJlIG5vdCBy
ZXR1cm5lZCB3aGVuIGNhbGxlZCB0byBhdGtfdGV4dF9nZXRfcnVuX2F0dHJpYnV0ZXMuICovCisg
ICAgZ19hc3NlcnQoIWF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDIsIEFUS19U
RVhUX0FUVFJfRkdfQ09MT1IsICIxMjAsMTIxLDEyMiIpKTsKKyAgICBnX2Fzc2VydChhdGtBdHRy
aWJ1dGVTZXRBdHRyaWJ1dGVIYXNWYWx1ZShzZXQyLCBBVEtfVEVYVF9BVFRSX1VOREVSTElORSwg
InNpbmdsZSIpKTsKKyAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVIYXNWYWx1
ZShzZXQyLCBBVEtfVEVYVF9BVFRSX0JHX0NPTE9SLCAiODAsODEsODIiKSk7CisgICAgYXRrX2F0
dHJpYnV0ZV9zZXRfZnJlZShzZXQxKTsKKyAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHNldDIp
OworICAgIGdfb2JqZWN0X3VucmVmKGNoaWxkKTsKKworICAgIGNoaWxkID0gYXRrX29iamVjdF9y
ZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDIpOworICAgIGdfYXNzZXJ0KGNoaWxkICYmIEFU
S19JU19URVhUKGNoaWxkKSk7CisgICAgY2hpbGRUZXh0ID0gQVRLX1RFWFQoY2hpbGQpOworCisg
ICAgc2V0MSA9IGF0a190ZXh0X2dldF9ydW5fYXR0cmlidXRlcyhjaGlsZFRleHQsIDAsICZzdGFy
dE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgc2V0MiA9IGF0a190ZXh0X2dldF9ydW5fYXR0cmli
dXRlcyhjaGlsZFRleHQsIDMsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgZ19hc3Nl
cnQoYXRrQXR0cmlidXRlU2V0QXJlRXF1YWwoc2V0MSwgc2V0MikpOworICAgIGF0a19hdHRyaWJ1
dGVfc2V0X2ZyZWUoc2V0Mik7CisKKyAgICBzZXQyID0gYXRrX3RleHRfZ2V0X3J1bl9hdHRyaWJ1
dGVzKGNoaWxkVGV4dCwgMSwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAgICBzZXQzID0g
YXRrX3RleHRfZ2V0X3J1bl9hdHRyaWJ1dGVzKGNoaWxkVGV4dCwgNSwgJnN0YXJ0T2Zmc2V0LCAm
ZW5kT2Zmc2V0KTsKKyAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBcmVFcXVhbChzZXQyLCBz
ZXQzKSk7CisgICAgZ19hc3NlcnQoIWF0a0F0dHJpYnV0ZVNldEFyZUVxdWFsKHNldDEsIHNldDIp
KTsKKyAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHNldDMpOworCisgICAgc2V0MyA9IGF0a190
ZXh0X2dldF9ydW5fYXR0cmlidXRlcyhjaGlsZFRleHQsIDIsICZzdGFydE9mZnNldCwgJmVuZE9m
ZnNldCk7CisgICAgc2V0NCA9IGF0a190ZXh0X2dldF9ydW5fYXR0cmlidXRlcyhjaGlsZFRleHQs
IDYsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgZ19hc3NlcnQoYXRrQXR0cmlidXRl
U2V0QXJlRXF1YWwoc2V0Mywgc2V0NCkpOworICAgIGdfYXNzZXJ0KCFhdGtBdHRyaWJ1dGVTZXRB
cmVFcXVhbChzZXQxLCBzZXQzKSk7CisgICAgZ19hc3NlcnQoIWF0a0F0dHJpYnV0ZVNldEFyZUVx
dWFsKHNldDIsIHNldDMpKTsKKyAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHNldDEpOworICAg
IGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0Mik7CisgICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJl
ZShzZXQzKTsKKyAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHNldDQpOworICAgIGdfb2JqZWN0
X3VucmVmKGNoaWxkKTsKKworICAgIGNoaWxkID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9j
aGlsZChvYmplY3QsIDMpOworICAgIGdfYXNzZXJ0KGNoaWxkICYmIEFUS19JU19URVhUKGNoaWxk
KSk7CisgICAgY2hpbGRUZXh0ID0gQVRLX1RFWFQoY2hpbGQpOworICAgIHNldDEgPSBhdGtfdGV4
dF9nZXRfcnVuX2F0dHJpYnV0ZXMoY2hpbGRUZXh0LCAyNCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zm
c2V0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAyMSk7CisgICAgZ19h
c3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0sIDI1KTsKKyAgICBnX2Fzc2VydChhdGtBdHRyaWJ1
dGVTZXRBdHRyaWJ1dGVIYXNWYWx1ZShzZXQxLCBBVEtfVEVYVF9BVFRSX1NUUklLRVRIUk9VR0gs
ICJ0cnVlIikpOworCisgICAgc2V0MiA9IGF0a190ZXh0X2dldF9ydW5fYXR0cmlidXRlcyhjaGls
ZFRleHQsIDI1LCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChzdGFydE9mZnNldCwgPT0sIDI1KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9
PSwgMzApOworICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEFyZUVxdWFsKHNldDIsIDApKTsK
KworICAgIHNldDMgPSBhdGtfdGV4dF9nZXRfZGVmYXVsdF9hdHRyaWJ1dGVzKGNoaWxkVGV4dCk7
CisgICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlSGFzVmFsdWUoc2V0MywgQVRL
X1RFWFRfQVRUUl9KVVNUSUZJQ0FUSU9OLCAiY2VudGVyIikpOworICAgIGF0a19hdHRyaWJ1dGVf
c2V0X2ZyZWUoc2V0MSk7CisgICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJlZShzZXQyKTsKKyAgICBh
dGtfYXR0cmlidXRlX3NldF9mcmVlKHNldDMpOworCisgICAgZ19vYmplY3RfdW5yZWYoY2hpbGQp
OworfQorCitzdGF0aWMgZ2NoYXIqIHRleHRTZWxlY3Rpb25DaGFuZ2VkUmVzdWx0ID0gMDsKKwor
c3RhdGljIHZvaWQgdGV4dFNlbGVjdGlvbkNoYW5nZWRDYWxsYmFjayhBdGtUZXh0KiB0ZXh0LCBn
cG9pbnRlciBkYXRhKQoreworICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHRleHQpKTsKKworICAg
IGdfZnJlZSh0ZXh0U2VsZWN0aW9uQ2hhbmdlZFJlc3VsdCk7CisgICAgQXRrUm9sZSByb2xlID0g
YXRrX29iamVjdF9nZXRfcm9sZShBVEtfT0JKRUNUKHRleHQpKTsKKyAgICBpbnQgc3RhcnRPZmZz
ZXQgPSAwOworICAgIGludCBlbmRPZmZzZXQgPSAwOworICAgIGF0a190ZXh0X2dldF9zZWxlY3Rp
b24oQVRLX1RFWFQodGV4dCksIDAsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgdGV4
dFNlbGVjdGlvbkNoYW5nZWRSZXN1bHQgPSBnX3N0cmR1cF9wcmludGYoInwlc3wlZHwlZHwiLCBh
dGtfcm9sZV9nZXRfbmFtZShyb2xlKSwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7Cit9CisKK3N0
YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtUZXh0U2VsZWN0aW9ucygpCit7CisgICAgV2ViS2l0V2Vi
Vmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwor
ICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOworICAgIEd0a0FsbG9jYXRpb24gYWxsb2Nh
dGlvbiA9IHsgMCwgMCwgODAwLCA2MDAgfTsKKyAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUo
R1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOworICAgIHdlYmtpdF93ZWJfdmlld19s
b2FkX3N0cmluZyh3ZWJWaWV3LCB0ZXh0Rm9yU2VsZWN0aW9ucywgMCwgMCwgMCk7CisKKyAgICBB
dGtPYmplY3QqIG9iamVjdCA9IGdldFdlYkFyZWFPYmplY3Qod2ViVmlldyk7CisgICAgZ19hc3Nl
cnQob2JqZWN0KTsKKworICAgIEF0a1RleHQqIHBhcmFncmFwaDEgPSBBVEtfVEVYVChhdGtfb2Jq
ZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMCkpOworICAgIGdfYXNzZXJ0KEFUS19J
U19URVhUKHBhcmFncmFwaDEpKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KHBhcmFncmFwaDEsICJ0
ZXh0LXNlbGVjdGlvbi1jaGFuZ2VkIiwgR19DQUxMQkFDSyh0ZXh0U2VsZWN0aW9uQ2hhbmdlZENh
bGxiYWNrKSwgMCk7CisKKyAgICBBdGtUZXh0KiBwYXJhZ3JhcGgyID0gQVRLX1RFWFQoYXRrX29i
amVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDEpKTsKKyAgICBnX2Fzc2VydChBVEtf
SVNfVEVYVChwYXJhZ3JhcGgyKSk7CisgICAgZ19zaWduYWxfY29ubmVjdChwYXJhZ3JhcGgyLCAi
dGV4dC1zZWxlY3Rpb24tY2hhbmdlZCIsIEdfQ0FMTEJBQ0sodGV4dFNlbGVjdGlvbkNoYW5nZWRD
YWxsYmFjayksIDApOworCisgICAgQXRrVGV4dCogbGluayA9IEFUS19URVhUKGF0a19vYmplY3Rf
cmVmX2FjY2Vzc2libGVfY2hpbGQoQVRLX09CSkVDVChwYXJhZ3JhcGgyKSwgMCkpOworICAgIGdf
YXNzZXJ0KEFUS19JU19URVhUKGxpbmspKTsKKworICAgIEF0a09iamVjdCogbGlzdCA9IGF0a19v
YmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAyKTsKKyAgICBnX2Fzc2VydChBVEtf
T0JKRUNUKGxpc3QpKTsKKworICAgIEF0a1RleHQqIGxpc3RJdGVtID0gQVRLX1RFWFQoYXRrX29i
amVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChsaXN0LCAwKSk7CisgICAgZ19hc3NlcnQoQVRLX0lT
X1RFWFQobGlzdEl0ZW0pKTsKKworICAgIC8qIEZpcnN0IHBhcmFncmFwaCAoc2ltcGxlIHRleHQp
LiAqLworCisgICAgLyogQmFzaWMgaW5pdGlhbCBjaGVja3MuICovCisgICAgZ19hc3NlcnRfY21w
aW50KGF0a190ZXh0X2dldF9uX3NlbGVjdGlvbnMocGFyYWdyYXBoMSksID09LCAwKTsKKworICAg
IGdpbnQgc3RhcnRPZmZzZXQ7CisgICAgZ2ludCBlbmRPZmZzZXQ7CisgICAgZ2NoYXIqIHNlbGVj
dGVkVGV4dCA9IGF0a190ZXh0X2dldF9zZWxlY3Rpb24ocGFyYWdyYXBoMSwgMCwgJnN0YXJ0T2Zm
c2V0LCAmZW5kT2Zmc2V0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAw
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMCk7CisgICAgZ19hc3NlcnRf
Y21wc3RyKHNlbGVjdGVkVGV4dCwgPT0sIDApOworICAgIGdfZnJlZSAoc2VsZWN0ZWRUZXh0KTsK
KworICAgIC8qIFRyeSByZW1vdmluZyBhIG5vbiBleGlzdGluZyAoeWV0KSBzZWxlY3Rpb24uICov
CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gYXRrX3RleHRfcmVtb3ZlX3NlbGVjdGlvbihwYXJhZ3Jh
cGgxLCAwKTsKKyAgICBnX2Fzc2VydCghcmVzdWx0KTsKKworICAgIC8qIFRyeSBzZXR0aW5nIGEg
MC1jaGFyIHNlbGVjdGlvbi4gKi8KKyAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfc2VsZWN0aW9u
KHBhcmFncmFwaDEsIDAsIDUsIDUpOworICAgIGdfYXNzZXJ0KHJlc3VsdCk7CisKKyAgICAvKiBN
YWtlIGEgc2VsZWN0aW9uIGFuZCB0ZXN0IGl0LiAqLworICAgIHJlc3VsdCA9IGF0a190ZXh0X3Nl
dF9zZWxlY3Rpb24ocGFyYWdyYXBoMSwgMCwgNSwgMjUpOworICAgIGdfYXNzZXJ0KHJlc3VsdCk7
CisgICAgZ19hc3NlcnRfY21waW50KGF0a190ZXh0X2dldF9uX3NlbGVjdGlvbnMocGFyYWdyYXBo
MSksID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGV4dFNlbGVjdGlvbkNoYW5nZWRSZXN1
bHQsID09LCAifHBhcmFncmFwaHw1fDI1fCIpOworICAgIHNlbGVjdGVkVGV4dCA9IGF0a190ZXh0
X2dldF9zZWxlY3Rpb24ocGFyYWdyYXBoMSwgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCA1KTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoZW5kT2Zmc2V0LCA9PSwgMjUpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZFRl
eHQsID09LCAiYWdyYXBoIHdpdGggcGxhaW4gdGUiKTsKKyAgICBnX2ZyZWUgKHNlbGVjdGVkVGV4
dCk7CisKKyAgICAvKiBUcnkgcmVtb3ZpbmcgdGhlIHNlbGVjdGlvbiBmcm9tIG90aGVyIEF0a1Rl
eHQgb2JqZWN0IChzaG91bGQgZmFpbCkuICovCisgICAgcmVzdWx0ID0gYXRrX3RleHRfcmVtb3Zl
X3NlbGVjdGlvbihwYXJhZ3JhcGgyLCAwKTsKKyAgICBnX2Fzc2VydCghcmVzdWx0KTsKKworICAg
IC8qIFJlbW92ZSB0aGUgc2VsZWN0aW9uIGFuZCB0ZXN0IGV2ZXJ5dGhpbmcgYWdhaW4uICovCisg
ICAgcmVzdWx0ID0gYXRrX3RleHRfcmVtb3ZlX3NlbGVjdGlvbihwYXJhZ3JhcGgxLCAwKTsKKyAg
ICBnX2Fzc2VydChyZXN1bHQpOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfdGV4dF9nZXRfbl9z
ZWxlY3Rpb25zKHBhcmFncmFwaDEpLCA9PSwgMCk7CisgICAgc2VsZWN0ZWRUZXh0ID0gYXRrX3Rl
eHRfZ2V0X3NlbGVjdGlvbihwYXJhZ3JhcGgxLCAwLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQp
OworICAgIC8qIE5vdyBvZmZzZXRzIHNob3VsZCBiZSB0aGUgc2FtZSwgc2V0IHRvIHRoZSBsYXN0
IHBvc2l0aW9uIG9mIHRoZSBjYXJldC4gKi8KKyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZz
ZXQsID09LCBlbmRPZmZzZXQpOworICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0s
IDI1KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMjUpOworICAgIGdfYXNz
ZXJ0X2NtcHN0cihzZWxlY3RlZFRleHQsID09LCAwKTsKKyAgICBnX2ZyZWUgKHNlbGVjdGVkVGV4
dCk7CisKKyAgICAvKiBTZWNvbmQgcGFyYWdyYXBoICh0ZXh0ICsgbGluayArIHRleHQpLiAqLwor
CisgICAgLyogU2V0IGEgc2VsZWN0aW9uIHBhcnRpYWxseSBjb3ZlcmluZyB0aGUgbGluayBhbmQg
dGVzdCBpdC4gKi8KKyAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfc2VsZWN0aW9uKHBhcmFncmFw
aDIsIDAsIDcsIDIxKTsKKyAgICBnX2Fzc2VydChyZXN1bHQpOworCisgICAgLyogVGVzdCB0aGUg
cGFyYWdyYXBoIGZpcnN0LiAqLworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfdGV4dF9nZXRfbl9z
ZWxlY3Rpb25zKHBhcmFncmFwaDIpLCA9PSwgMSk7CisgICAgc2VsZWN0ZWRUZXh0ID0gYXRrX3Rl
eHRfZ2V0X3NlbGVjdGlvbihwYXJhZ3JhcGgyLCAwLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQp
OworICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDcpOworICAgIGdfYXNzZXJ0
X2NtcGludChlbmRPZmZzZXQsID09LCAyMSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVk
VGV4dCwgPT0sICJyYXBoIHdpdGggYSBsaSIpOworICAgIGdfZnJlZSAoc2VsZWN0ZWRUZXh0KTsK
KworICAgIC8qIE5vdyB0ZXN0IGp1c3QgdGhlIGxpbmsuICovCisgICAgZ19hc3NlcnRfY21waW50
KGF0a190ZXh0X2dldF9uX3NlbGVjdGlvbnMobGluayksID09LCAxKTsKKyAgICBzZWxlY3RlZFRl
eHQgPSBhdGtfdGV4dF9nZXRfc2VsZWN0aW9uKGxpbmssIDAsICZzdGFydE9mZnNldCwgJmVuZE9m
ZnNldCk7CisgICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMCk7CisgICAgZ19h
c3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0sIDQpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxl
Y3RlZFRleHQsID09LCAiYSBsaSIpOworICAgIGdfZnJlZSAoc2VsZWN0ZWRUZXh0KTsKKworICAg
IC8qIE1ha2UgYSBzZWxlY3Rpb24gYWZ0ZXIgdGhlIGxpbmsgYW5kIGNoZWNrIHNlbGVjdGlvbiBm
b3IgdGhlIHdob2xlIHBhcmFncmFwaC4gKi8KKyAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfc2Vs
ZWN0aW9uKHBhcmFncmFwaDIsIDAsIDI3LCAzNyk7CisgICAgZ19hc3NlcnQocmVzdWx0KTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoYXRrX3RleHRfZ2V0X25fc2VsZWN0aW9ucyhwYXJhZ3JhcGgyKSwg
PT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0U2VsZWN0aW9uQ2hhbmdlZFJlc3VsdCwg
PT0sICJ8cGFyYWdyYXBofDI3fDM3fCIpOworICAgIHNlbGVjdGVkVGV4dCA9IGF0a190ZXh0X2dl
dF9zZWxlY3Rpb24ocGFyYWdyYXBoMiwgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAyNyk7CisgICAgZ19hc3NlcnRfY21w
aW50KGVuZE9mZnNldCwgPT0sIDM3KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRUZXh0
LCA9PSwgInRoZSBtaWRkbGUiKTsKKyAgICBnX2ZyZWUgKHNlbGVjdGVkVGV4dCk7CisKKyAgICAv
KiBSZW1vdmUgc2VsZWN0aW9ucyBhbmQgdGV4dCBldmVyeXRoaW5nIGFnYWluLiAqLworICAgIHJl
c3VsdCA9IGF0a190ZXh0X3JlbW92ZV9zZWxlY3Rpb24ocGFyYWdyYXBoMiwgMCk7CisgICAgZ19h
c3NlcnQocmVzdWx0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX3RleHRfZ2V0X25fc2VsZWN0
aW9ucyhwYXJhZ3JhcGgyKSwgPT0sIDApOworICAgIHNlbGVjdGVkVGV4dCA9IGF0a190ZXh0X2dl
dF9zZWxlY3Rpb24ocGFyYWdyYXBoMiwgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAg
ICAvKiBOb3cgb2Zmc2V0cyBzaG91bGQgYmUgdGhlIHNhbWUgKG5vIHNlbGVjdGlvbikuICovCisg
ICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgZW5kT2Zmc2V0KTsKKyAgICBnX2Fz
c2VydF9jbXBzdHIoc2VsZWN0ZWRUZXh0LCA9PSwgMCk7CisgICAgZ19mcmVlIChzZWxlY3RlZFRl
eHQpOworCisgICAgZ19hc3NlcnRfY21waW50KGF0a190ZXh0X2dldF9uX3NlbGVjdGlvbnMobGlu
ayksID09LCAwKTsKKyAgICBzZWxlY3RlZFRleHQgPSBhdGtfdGV4dF9nZXRfc2VsZWN0aW9uKGxp
bmssIDAsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgLyogTm93IG9mZnNldHMgc2hv
dWxkIGJlIHRoZSBzYW1lIChubyBzZWxlY3Rpb24pLiAqLworICAgIGdfYXNzZXJ0X2NtcGludChz
dGFydE9mZnNldCwgPT0sIGVuZE9mZnNldCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVk
VGV4dCwgPT0sIDApOworICAgIGdfZnJlZSAoc2VsZWN0ZWRUZXh0KTsKKworICAgIC8qIExpc3Qg
aXRlbSAqLworCisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShsaXN0KSA9PSBBVEtf
Uk9MRV9MSVNUKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX29iamVjdF9nZXRfbl9hY2Nlc3Np
YmxlX2NoaWxkcmVuKGxpc3QpLCA9PSwgMSk7CisKKyAgICAvKiBJdCdzIG5vdCBwb3NzaWJsZSB0
byBzZWxlY3QgdGV4dCBpbnNpZGUgYW4gaXRlbSdzIG1hcmtlci4gKi8KKyAgICByZXN1bHQgPSBh
dGtfdGV4dF9zZXRfc2VsZWN0aW9uIChsaXN0SXRlbSwgMCwgMCwgOSk7CisgICAgZ19hc3NlcnQo
IXJlc3VsdCk7CisgICAgcmVzdWx0ID0gYXRrX3RleHRfc2V0X3NlbGVjdGlvbiAobGlzdEl0ZW0s
IDAsIDksIDEpOworICAgIGdfYXNzZXJ0KCFyZXN1bHQpOworCisgICAgLyogSXQgc2hvdWxkIGJl
IHBvc3NpYmxlIHRvIHNlbGVjdCB0ZXh0IGluc2lkZSBhbiBpdGVtJ3MgdGV4dC4gKi8KKyAgICBy
ZXN1bHQgPSBhdGtfdGV4dF9zZXRfc2VsZWN0aW9uIChsaXN0SXRlbSwgMCwgMywgOSk7CisgICAg
Z19hc3NlcnQocmVzdWx0KTsKKworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfdGV4dF9nZXRfbl9z
ZWxlY3Rpb25zKGxpc3RJdGVtKSwgPT0sIDEpOworICAgIHNlbGVjdGVkVGV4dCA9IGF0a190ZXh0
X2dldF9zZWxlY3Rpb24obGlzdEl0ZW0sIDAsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7Cisg
ICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMyk7CisgICAgZ19hc3NlcnRfY21w
aW50KGVuZE9mZnNldCwgPT0sIDkpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZFRleHQs
ID09LCAiQSBsaXN0Iik7CisgICAgZ19mcmVlIChzZWxlY3RlZFRleHQpOworCisgICAgZ19mcmVl
KHRleHRTZWxlY3Rpb25DaGFuZ2VkUmVzdWx0KTsKKworICAgIGdfb2JqZWN0X3VucmVmKHBhcmFn
cmFwaDEpOworICAgIGdfb2JqZWN0X3VucmVmKHBhcmFncmFwaDIpOworICAgIGdfb2JqZWN0X3Vu
cmVmKGxpbmspOworICAgIGdfb2JqZWN0X3VucmVmKGxpc3QpOworICAgIGdfb2JqZWN0X3VucmVm
KGxpc3RJdGVtKTsKKyAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKK30KKworc3RhdGljIHZv
aWQgdGVzdFdlYmtpdEF0a0dldEV4dGVudHMoKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBnX29iamVj
dF9yZWZfc2luayh3ZWJWaWV3KTsKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAs
IDAsIDgwMCwgNjAwIH07CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQo
d2ViVmlldyksICZhbGxvY2F0aW9uKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmco
d2ViVmlldywgY2VudGVyZWRDb250ZW50cywgMCwgMCwgMCk7CisKKyAgICBBdGtPYmplY3QqIG9i
amVjdCA9IGdldFdlYkFyZWFPYmplY3Qod2ViVmlldyk7CisgICAgZ19hc3NlcnQob2JqZWN0KTsK
KworICAgIEF0a1RleHQqIHNob3J0VGV4dDEgPSBBVEtfVEVYVChhdGtfb2JqZWN0X3JlZl9hY2Nl
c3NpYmxlX2NoaWxkKG9iamVjdCwgMCkpOworICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHNob3J0
VGV4dDEpKTsKKyAgICBBdGtUZXh0KiBsb25nVGV4dCA9IEFUS19URVhUKGF0a19vYmplY3RfcmVm
X2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAxKSk7CisgICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQo
bG9uZ1RleHQpKTsKKyAgICBBdGtUZXh0KiBzaG9ydFRleHQyID0gQVRLX1RFWFQoYXRrX29iamVj
dF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDIpKTsKKyAgICBnX2Fzc2VydChBVEtfSVNf
VEVYVChzaG9ydFRleHQyKSk7CisgICAgQXRrVGV4dCogbXVsdGlsaW5lVGV4dCA9IEFUS19URVhU
KGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAzKSk7CisgICAgZ19hc3Nl
cnQoQVRLX0lTX1RFWFQobXVsdGlsaW5lVGV4dCkpOworCisgICAgLyogU3RhcnQgd2l0aCB3aW5k
b3cgZXh0ZW50cy4gKi8KKyAgICBBdGtUZXh0UmVjdGFuZ2xlIHNsaW5lX3dpbmRvdzEsIHNsaW5l
X3dpbmRvdzIsIGxsaW5lX3dpbmRvdywgbWxpbmVfd2luZG93OworICAgIGF0a190ZXh0X2dldF9y
YW5nZV9leHRlbnRzKHNob3J0VGV4dDEsIDAsIDEwLCBBVEtfWFlfV0lORE9XLCAmc2xpbmVfd2lu
ZG93MSk7CisgICAgYXRrX3RleHRfZ2V0X3JhbmdlX2V4dGVudHMobG9uZ1RleHQsIDAsIDQ0LCBB
VEtfWFlfV0lORE9XLCAmbGxpbmVfd2luZG93KTsKKyAgICBhdGtfdGV4dF9nZXRfcmFuZ2VfZXh0
ZW50cyhzaG9ydFRleHQyLCAwLCAxMCwgQVRLX1hZX1dJTkRPVywgJnNsaW5lX3dpbmRvdzIpOwor
ICAgIGF0a190ZXh0X2dldF9yYW5nZV9leHRlbnRzKG11bHRpbGluZVRleHQsIDAsIDYwLCBBVEtf
WFlfV0lORE9XLCAmbWxpbmVfd2luZG93KTsKKworICAgIC8qIENoZWNrIHZlcnRpY2FsIGxpbmUg
cG9zaXRpb24uICovCisgICAgZ19hc3NlcnRfY21waW50KHNsaW5lX3dpbmRvdzEueSArIHNsaW5l
X3dpbmRvdzEuaGVpZ2h0LCA8PSwgbGxpbmVfd2luZG93LnkpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChsbGluZV93aW5kb3cueSArIGxsaW5lX3dpbmRvdy5oZWlnaHQgKyBzbGluZV93aW5kb3cyLmhl
aWdodCwgPD0sIG1saW5lX3dpbmRvdy55KTsKKworICAgIC8qIFBhcmFncmFwaHMgMSBhbmQgMyBo
YXZlIGlkZW50aWNhbCB0ZXh0IGFuZCBhbGlnbm1lbnQuICovCisgICAgZ19hc3NlcnRfY21waW50
KHNsaW5lX3dpbmRvdzEueCwgPT0sIHNsaW5lX3dpbmRvdzIueCk7CisgICAgZ19hc3NlcnRfY21w
aW50KHNsaW5lX3dpbmRvdzEud2lkdGgsID09LCBzbGluZV93aW5kb3cyLndpZHRoKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoc2xpbmVfd2luZG93MS5oZWlnaHQsID09LCBzbGluZV93aW5kb3cyLmhl
aWdodCk7CisKKyAgICAvKiBBbGwgbGluZXMgc2hvdWxkIGJlIHRoZSBzYW1lIGhlaWdodDsgbGlu
ZSAyIGlzIHRoZSB3aWRlc3QgbGluZS4gKi8KKyAgICBnX2Fzc2VydF9jbXBpbnQoc2xpbmVfd2lu
ZG93MS5oZWlnaHQsID09LCBsbGluZV93aW5kb3cuaGVpZ2h0KTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoc2xpbmVfd2luZG93MS53aWR0aCwgPCwgbGxpbmVfd2luZG93LndpZHRoKTsKKworICAgIC8q
IE1ha2Ugc3VyZSB0aGUgY2hhcmFjdGVyIGV4dGVudHMgaml2ZSB3aXRoIHRoZSByYW5nZSBleHRl
bnRzLiAqLworICAgIGdpbnQgeDsKKyAgICBnaW50IHk7CisgICAgZ2ludCB3aWR0aDsKKyAgICBn
aW50IGhlaWdodDsKKworICAgIC8qIEZpcnN0IHBhcmFncmFwaCAoc2hvcnQgdGV4dCkuICovCisg
ICAgYXRrX3RleHRfZ2V0X2NoYXJhY3Rlcl9leHRlbnRzKHNob3J0VGV4dDEsIDAsICZ4LCAmeSwg
JndpZHRoLCAmaGVpZ2h0LCBBVEtfWFlfV0lORE9XKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoeCwg
PT0sIHNsaW5lX3dpbmRvdzEueCk7CisgICAgZ19hc3NlcnRfY21waW50KHksID09LCBzbGluZV93
aW5kb3cxLnkpOworICAgIGdfYXNzZXJ0X2NtcGludChoZWlnaHQsID09LCBzbGluZV93aW5kb3cx
LmhlaWdodCk7CisKKyAgICBhdGtfdGV4dF9nZXRfY2hhcmFjdGVyX2V4dGVudHMoc2hvcnRUZXh0
MSwgOSwgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQsIEFUS19YWV9XSU5ET1cpOworICAgIGdfYXNz
ZXJ0X2NtcGludCh4LCA9PSwgc2xpbmVfd2luZG93MS54ICsgc2xpbmVfd2luZG93MS53aWR0aCAt
IHdpZHRoKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoeSwgPT0sIHNsaW5lX3dpbmRvdzEueSk7Cisg
ICAgZ19hc3NlcnRfY21waW50KGhlaWdodCwgPT0sIHNsaW5lX3dpbmRvdzEuaGVpZ2h0KTsKKwor
ICAgIC8qIFNlY29uZCBwYXJhZ3JhcGggKGxvbmcgdGV4dCkuICovCisgICAgYXRrX3RleHRfZ2V0
X2NoYXJhY3Rlcl9leHRlbnRzKGxvbmdUZXh0LCAwLCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCwg
QVRLX1hZX1dJTkRPVyk7CisgICAgZ19hc3NlcnRfY21waW50KHgsID09LCBsbGluZV93aW5kb3cu
eCk7CisgICAgZ19hc3NlcnRfY21waW50KHksID09LCBsbGluZV93aW5kb3cueSk7CisgICAgZ19h
c3NlcnRfY21waW50KGhlaWdodCwgPT0sIGxsaW5lX3dpbmRvdy5oZWlnaHQpOworCisgICAgYXRr
X3RleHRfZ2V0X2NoYXJhY3Rlcl9leHRlbnRzKGxvbmdUZXh0LCA0MywgJngsICZ5LCAmd2lkdGgs
ICZoZWlnaHQsIEFUS19YWV9XSU5ET1cpOworICAgIGdfYXNzZXJ0X2NtcGludCh4LCA9PSwgbGxp
bmVfd2luZG93LnggKyBsbGluZV93aW5kb3cud2lkdGggLSB3aWR0aCk7CisgICAgZ19hc3NlcnRf
Y21waW50KHksID09LCBsbGluZV93aW5kb3cueSk7CisgICAgZ19hc3NlcnRfY21waW50KGhlaWdo
dCwgPT0sIGxsaW5lX3dpbmRvdy5oZWlnaHQpOworCisgICAgLyogVGhpcmQgcGFyYWdyYXBoIChz
aG9ydCB0ZXh0KS4gKi8KKyAgICBhdGtfdGV4dF9nZXRfY2hhcmFjdGVyX2V4dGVudHMoc2hvcnRU
ZXh0MiwgMCwgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQsIEFUS19YWV9XSU5ET1cpOworICAgIGdf
YXNzZXJ0X2NtcGludCh4LCA9PSwgc2xpbmVfd2luZG93Mi54KTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoeSwgPT0sIHNsaW5lX3dpbmRvdzIueSk7CisgICAgZ19hc3NlcnRfY21waW50KGhlaWdodCwg
PT0sIHNsaW5lX3dpbmRvdzIuaGVpZ2h0KTsKKworICAgIGF0a190ZXh0X2dldF9jaGFyYWN0ZXJf
ZXh0ZW50cyhzaG9ydFRleHQyLCA5LCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCwgQVRLX1hZX1dJ
TkRPVyk7CisgICAgZ19hc3NlcnRfY21waW50KHgsID09LCBzbGluZV93aW5kb3cyLnggKyBzbGlu
ZV93aW5kb3cyLndpZHRoIC0gd2lkdGgpOworICAgIGdfYXNzZXJ0X2NtcGludCh5LCA9PSwgc2xp
bmVfd2luZG93Mi55KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoaGVpZ2h0LCA9PSwgc2xpbmVfd2lu
ZG93Mi5oZWlnaHQpOworCisgICAgLyogRm91ciBwYXJhZ3JhcGggKDMgbGluZXMgbXVsdGktbGlu
ZSB0ZXh0KS4gKi8KKyAgICBhdGtfdGV4dF9nZXRfY2hhcmFjdGVyX2V4dGVudHMobXVsdGlsaW5l
VGV4dCwgMCwgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQsIEFUS19YWV9XSU5ET1cpOworICAgIGdf
YXNzZXJ0X2NtcGludCh4LCA9PSwgbWxpbmVfd2luZG93LngpOworICAgIGdfYXNzZXJ0X2NtcGlu
dCh5LCA9PSwgbWxpbmVfd2luZG93LnkpOworICAgIGdfYXNzZXJ0X2NtcGludCgzICogaGVpZ2h0
LCA9PSwgbWxpbmVfd2luZG93LmhlaWdodCk7CisKKyAgICBhdGtfdGV4dF9nZXRfY2hhcmFjdGVy
X2V4dGVudHMobXVsdGlsaW5lVGV4dCwgNTksICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0LCBBVEtf
WFlfV0lORE9XKTsKKyAgICAvKiBMYXN0IGxpbmUgd29uJ3QgZmlsbCB0aGUgd2hvbGUgd2lkdGgg
b2YgdGhlIHJlY3RhbmdsZS4gKi8KKyAgICBnX2Fzc2VydF9jbXBpbnQoeCwgPD0sIG1saW5lX3dp
bmRvdy54ICsgbWxpbmVfd2luZG93LndpZHRoIC0gd2lkdGgpOworICAgIGdfYXNzZXJ0X2NtcGlu
dCh5LCA9PSwgbWxpbmVfd2luZG93LnkgKyBtbGluZV93aW5kb3cuaGVpZ2h0IC0gaGVpZ2h0KTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoaGVpZ2h0LCA8PSwgbWxpbmVfd2luZG93LmhlaWdodCk7CisK
KyAgICAvKiBDaGVjayB0aGF0IGV4dGVudCBmb3IgYSBmdWxsIGxpbmUgYXJlIHRoZSBzYW1lIGhl
aWdodCB0aGFuIGZvcgorICAgICAgIGEgcGFydGlhbCBzZWN0aW9uIG9mIHRoZSBzYW1lIGxpbmUg
Ki8KKyAgICBnaW50IHN0YXJ0T2Zmc2V0OworICAgIGdpbnQgZW5kT2Zmc2V0OworCisjaWYgIUFU
S19DSEVDS19WRVJTSU9OKDIsIDEwLCAwKQorICAgIGdjaGFyKiB0ZXh0ID0gYXRrX3RleHRfZ2V0
X3RleHRfYXRfb2Zmc2V0KG11bHRpbGluZVRleHQsIDAsIEFUS19URVhUX0JPVU5EQVJZX0xJTkVf
U1RBUlQsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgZ19mcmVlKHRleHQpOworI2Vs
c2UKKyAgICBnY2hhciogdGV4dCA9IGF0a190ZXh0X2dldF9zdHJpbmdfYXRfb2Zmc2V0KG11bHRp
bGluZVRleHQsIDAsIEFUS19URVhUX0dSQU5VTEFSSVRZX0xJTkUsICZzdGFydE9mZnNldCwgJmVu
ZE9mZnNldCk7CisgICAgZ19mcmVlKHRleHQpOworI2VuZGlmCisKKyAgICBBdGtUZXh0UmVjdGFu
Z2xlIGZsaW5lX3dpbmRvdzsKKyAgICBBdGtUZXh0UmVjdGFuZ2xlIGFmbGluZV93aW5kb3c7Cisg
ICAgYXRrX3RleHRfZ2V0X3JhbmdlX2V4dGVudHMobXVsdGlsaW5lVGV4dCwgc3RhcnRPZmZzZXQs
IGVuZE9mZnNldCwgQVRLX1hZX1dJTkRPVywgJmZsaW5lX3dpbmRvdyk7CisgICAgYXRrX3RleHRf
Z2V0X3JhbmdlX2V4dGVudHMobXVsdGlsaW5lVGV4dCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCAt
IDEsIEFUS19YWV9XSU5ET1csICZhZmxpbmVfd2luZG93KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
ZmxpbmVfd2luZG93LngsID09LCBhZmxpbmVfd2luZG93LngpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChmbGluZV93aW5kb3cueSwgPT0sIGFmbGluZV93aW5kb3cueSk7CisgICAgZ19hc3NlcnRfY21w
aW50KGZsaW5lX3dpbmRvdy5oZWlnaHQsID09LCBhZmxpbmVfd2luZG93LmhlaWdodCk7CisKKyAg
ICBnX29iamVjdF91bnJlZihzaG9ydFRleHQxKTsKKyAgICBnX29iamVjdF91bnJlZihzaG9ydFRl
eHQyKTsKKyAgICBnX29iamVjdF91bnJlZihsb25nVGV4dCk7CisgICAgZ19vYmplY3RfdW5yZWYo
bXVsdGlsaW5lVGV4dCk7CisgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Cit9CisKK3N0YXRp
YyB2b2lkIHRlc3RXZWJraXRBdGtMYXlvdXRBbmREYXRhVGFibGVzKCkKK3sKKyAgICBXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7
CisgICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxv
Y2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9OworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0
ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7CisgICAgd2Via2l0X3dlYl92aWV3
X2xvYWRfc3RyaW5nKHdlYlZpZXcsIGxheW91dEFuZERhdGFUYWJsZXMsIDAsIDAsIDApOworCisg
ICAgQXRrT2JqZWN0KiBvYmplY3QgPSBnZXRXZWJBcmVhT2JqZWN0KHdlYlZpZXcpOworICAgIGdf
YXNzZXJ0KG9iamVjdCk7CisKKyAgICAvKiBDaGVjayB0aGUgbm9uLWxheW91dCB0YWJsZSAoZGF0
YSB0YWJsZSkuICovCisKKyAgICBBdGtPYmplY3QqIHRhYmxlMSA9IGF0a19vYmplY3RfcmVmX2Fj
Y2Vzc2libGVfY2hpbGQob2JqZWN0LCAwKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfVEFCTEUodGFi
bGUxKSk7CisgICAgQXRrQXR0cmlidXRlU2V0KiBzZXQxID0gYXRrX29iamVjdF9nZXRfYXR0cmli
dXRlcyh0YWJsZTEpOworICAgIGdfYXNzZXJ0KHNldDEpOworICAgIGdfYXNzZXJ0KCFhdGtBdHRy
aWJ1dGVTZXRDb250YWluc0F0dHJpYnV0ZU5hbWUoc2V0MSwgImxheW91dC1ndWVzcyIpKTsKKyAg
ICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHNldDEpOworCisgICAgLyogQ2hlY2sgdGhlIGxheW91
dCB0YWJsZS4gKi8KKworICAgIEF0a09iamVjdCogdGFibGUyID0gYXRrX29iamVjdF9yZWZfYWNj
ZXNzaWJsZV9jaGlsZChvYmplY3QsIDEpOworICAgIGdfYXNzZXJ0KEFUS19JU19UQUJMRSh0YWJs
ZTIpKTsKKyAgICBBdGtBdHRyaWJ1dGVTZXQqIHNldDIgPSBhdGtfb2JqZWN0X2dldF9hdHRyaWJ1
dGVzKHRhYmxlMik7CisgICAgZ19hc3NlcnQoc2V0Mik7CisgICAgZ19hc3NlcnQoYXRrQXR0cmli
dXRlU2V0Q29udGFpbnNBdHRyaWJ1dGVOYW1lKHNldDIsICJsYXlvdXQtZ3Vlc3MiKSk7CisgICAg
Z19hc3NlcnQoYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlTmFtZUhhc1ZhbHVlKHNldDIsICJsYXlv
dXQtZ3Vlc3MiLCAidHJ1ZSIpKTsKKyAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHNldDIpOwor
CisgICAgZ19vYmplY3RfdW5yZWYodGFibGUxKTsKKyAgICBnX29iamVjdF91bnJlZih0YWJsZTIp
OworICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2Vi
a2l0QXRrTGlua3NXaXRoSW5saW5lSW1hZ2VzKCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmpl
Y3RfcmVmX3Npbmsod2ViVmlldyk7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAw
LCAwLCA4MDAsIDYwMCB9OworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VU
KHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5n
KHdlYlZpZXcsIGxpbmtzV2l0aElubGluZUltYWdlcywgMCwgMCwgMCk7CisKKyAgICBBdGtPYmpl
Y3QqIG9iamVjdCA9IGdldFdlYkFyZWFPYmplY3Qod2ViVmlldyk7CisgICAgZ19hc3NlcnQob2Jq
ZWN0KTsKKworICAgIC8qIEZpcnN0IHBhcmFncmFwaCAobGluayBhdCB0aGUgYmVnaW5uaW5nKS4g
Ki8KKyAgICBBdGtPYmplY3QqIHBhcmFncmFwaCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVf
Y2hpbGQob2JqZWN0LCAwKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChwYXJhZ3JhcGgpKTsK
KyAgICBnaW50IHN0YXJ0T2Zmc2V0OworICAgIGdpbnQgZW5kT2Zmc2V0OworCisjaWYgIUFUS19D
SEVDS19WRVJTSU9OKDIsIDEwLCAwKQorICAgIGdjaGFyKiB0ZXh0ID0gYXRrX3RleHRfZ2V0X3Rl
eHRfYXRfb2Zmc2V0KEFUS19URVhUKHBhcmFncmFwaCksIDAsIEFUS19URVhUX0JPVU5EQVJZX0xJ
TkVfU1RBUlQsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgZ19hc3NlcnQodGV4dCk7
CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09LCAiZm9vIGJhciBiYXoiKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZW5k
T2Zmc2V0LCA9PSwgMTEpOworICAgIGdfZnJlZSh0ZXh0KTsKKyNlbHNlCisgICAgZ2NoYXIqIHRl
eHQgPSBhdGtfdGV4dF9nZXRfc3RyaW5nX2F0X29mZnNldChBVEtfVEVYVChwYXJhZ3JhcGgpLCAw
LCBBVEtfVEVYVF9HUkFOVUxBUklUWV9MSU5FLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOwor
ICAgIGdfYXNzZXJ0KHRleHQpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwgImZvbyBi
YXIgYmF6Iik7CisgICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMCk7CisgICAg
Z19hc3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0sIDExKTsKKyAgICBnX2ZyZWUodGV4dCk7Cisj
ZW5kaWYKKworICAgIGdfb2JqZWN0X3VucmVmKHBhcmFncmFwaCk7CisKKyAgICAvKiBTZWNvbmQg
cGFyYWdyYXBoIChsaW5rIGluIHRoZSBtaWRkbGUpLiAqLworICAgIHBhcmFncmFwaCA9IGF0a19v
YmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAxKTsKKyAgICBnX2Fzc2VydChBVEtf
SVNfVEVYVChwYXJhZ3JhcGgpKTsKKworI2lmICFBVEtfQ0hFQ0tfVkVSU0lPTigyLCAxMCwgMCkK
KyAgICB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0KEFUS19URVhUKHBhcmFncmFw
aCksIDAsIEFUS19URVhUX0JPVU5EQVJZX0xJTkVfU1RBUlQsICZzdGFydE9mZnNldCwgJmVuZE9m
ZnNldCk7CisgICAgZ19hc3NlcnQodGV4dCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09
LCAiZm9vIGJhciBiYXoiKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAw
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMTEpOworICAgIGdfZnJlZSh0
ZXh0KTsKKyNlbHNlCisgICAgdGV4dCA9IGF0a190ZXh0X2dldF9zdHJpbmdfYXRfb2Zmc2V0KEFU
S19URVhUKHBhcmFncmFwaCksIDAsIEFUS19URVhUX0dSQU5VTEFSSVRZX0xJTkUsICZzdGFydE9m
ZnNldCwgJmVuZE9mZnNldCk7CisgICAgZ19hc3NlcnQodGV4dCk7CisgICAgZ19hc3NlcnRfY21w
c3RyKHRleHQsID09LCAiZm9vIGJhciBiYXoiKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRP
ZmZzZXQsID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMTEpOwor
ICAgIGdfZnJlZSh0ZXh0KTsKKyNlbmRpZgorCisgICAgZ19vYmplY3RfdW5yZWYocGFyYWdyYXBo
KTsKKworICAgIC8qIFRoaXJkIHBhcmFncmFwaCAobGluayBhdCB0aGUgZW5kKS4gKi8KKyAgICBw
YXJhZ3JhcGggPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMik7Cisg
ICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQocGFyYWdyYXBoKSk7CisKKyNpZiAhQVRLX0NIRUNLX1ZF
UlNJT04oMiwgMTAsIDApCisgICAgdGV4dCA9IGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNldChB
VEtfVEVYVChwYXJhZ3JhcGgpLCAwLCBBVEtfVEVYVF9CT1VOREFSWV9MSU5FX1NUQVJULCAmc3Rh
cnRPZmZzZXQsICZlbmRPZmZzZXQpOworICAgIGdfYXNzZXJ0KHRleHQpOworICAgIGdfYXNzZXJ0
X2NtcHN0cih0ZXh0LCA9PSwgImZvbyBiYXIgYmF6Iik7CisgICAgZ19hc3NlcnRfY21waW50KHN0
YXJ0T2Zmc2V0LCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0sIDEx
KTsKKyAgICBnX2ZyZWUodGV4dCk7CisjZWxzZQorICAgIHRleHQgPSBhdGtfdGV4dF9nZXRfc3Ry
aW5nX2F0X29mZnNldChBVEtfVEVYVChwYXJhZ3JhcGgpLCAwLCBBVEtfVEVYVF9HUkFOVUxBUklU
WV9MSU5FLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOworICAgIGdfYXNzZXJ0KHRleHQpOwor
ICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwgImZvbyBiYXIgYmF6Iik7CisgICAgZ19hc3Nl
cnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21waW50KGVuZE9m
ZnNldCwgPT0sIDExKTsKKyAgICBnX2ZyZWUodGV4dCk7CisjZW5kaWYKKworICAgIGdfb2JqZWN0
X3VucmVmKHBhcmFncmFwaCk7CisgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Cit9CisKK3N0
YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtIeXBlcnRleHRBbmRIeXBlcmxpbmtzKCkKK3sKKyAgICBX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19u
ZXcoKSk7CisgICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7CisgICAgR3RrQWxsb2NhdGlv
biBhbGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9OworICAgIGd0a193aWRnZXRfc2l6ZV9h
bGxvY2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7CisgICAgd2Via2l0X3dl
Yl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIGh5cGVydGV4dEFuZEh5cGVybGlua3MsIDAsIDAs
IDApOworCisgICAgQXRrT2JqZWN0KiBvYmplY3QgPSBnZXRXZWJBcmVhT2JqZWN0KHdlYlZpZXcp
OworICAgIGdfYXNzZXJ0KG9iamVjdCk7CisKKyAgICBBdGtPYmplY3QqIHBhcmFncmFwaDEgPSBh
dGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMCk7CisgICAgZ19hc3NlcnQo
QVRLX09CSkVDVChwYXJhZ3JhcGgxKSk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9s
ZShwYXJhZ3JhcGgxKSA9PSBBVEtfUk9MRV9QQVJBR1JBUEgpOworICAgIGdfYXNzZXJ0KEFUS19J
U19IWVBFUlRFWFQocGFyYWdyYXBoMSkpOworCisgICAgLyogTm8gbGlua3MgaW4gdGhlIGZpcnN0
IHBhcmFncmFwaC4gKi8KKyAgICBnaW50IG5MaW5rcyA9IGF0a19oeXBlcnRleHRfZ2V0X25fbGlu
a3MoQVRLX0hZUEVSVEVYVChwYXJhZ3JhcGgxKSk7CisgICAgZ19hc3NlcnRfY21waW50KG5MaW5r
cywgPT0sIDApOworCisgICAgQXRrT2JqZWN0KiBwYXJhZ3JhcGgyID0gYXRrX29iamVjdF9yZWZf
YWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDEpOworICAgIGdfYXNzZXJ0KEFUS19PQkpFQ1QocGFy
YWdyYXBoMikpOworICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUocGFyYWdyYXBoMikg
PT0gQVRLX1JPTEVfUEFSQUdSQVBIKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfSFlQRVJURVhUKHBh
cmFncmFwaDIpKTsKKworICAgIC8qIENoZWNrIGxpbmtzIGluIHRoZSBzZWNvbmQgcGFyYWdyYXBo
LgorICAgICAgIG5MaW5rcyA9IGF0a19oeXBlcnRleHRfZ2V0X25fbGlua3MoQVRLX0hZUEVSVEVY
VChwYXJhZ3JhcGgyKSk7CisgICAgICAgZ19hc3NlcnRfY21waW50KG5MaW5rcywgPT0sIDMpOyAq
LworCisgICAgQXRrSHlwZXJsaW5rKiBoTGluazEgPSBhdGtfaHlwZXJ0ZXh0X2dldF9saW5rKEFU
S19IWVBFUlRFWFQocGFyYWdyYXBoMiksIDApOworICAgIGdfYXNzZXJ0KEFUS19IWVBFUkxJTkso
aExpbmsxKSk7CisgICAgQXRrT2JqZWN0KiBoTGlua09iamVjdDEgPSBhdGtfaHlwZXJsaW5rX2dl
dF9vYmplY3QoaExpbmsxLCAwKTsKKyAgICBnX2Fzc2VydChBVEtfT0JKRUNUKGhMaW5rT2JqZWN0
MSkpOworICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoaExpbmtPYmplY3QxKSA9PSBB
VEtfUk9MRV9MSU5LKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfc3Rh
cnRfaW5kZXgoaExpbmsxKSwgPT0sIDApOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJs
aW5rX2dldF9lbmRfaW5kZXgoaExpbmsxKSwgPT0sIDYpOworICAgIGdfYXNzZXJ0X2NtcGludChh
dGtfaHlwZXJsaW5rX2dldF9uX2FuY2hvcnMoaExpbmsxKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0
X2NtcHN0cihhdGtfaHlwZXJsaW5rX2dldF91cmkoaExpbmsxLCAwKSwgPT0sICJodHRwOi8vZm9v
LmJhci5iYXovIik7CisKKyAgICBBdGtIeXBlcmxpbmsqIGhMaW5rMiA9IGF0a19oeXBlcnRleHRf
Z2V0X2xpbmsoQVRLX0hZUEVSVEVYVChwYXJhZ3JhcGgyKSwgMSk7CisgICAgZ19hc3NlcnQoQVRL
X0hZUEVSTElOSyhoTGluazIpKTsKKyAgICBBdGtPYmplY3QqIGhMaW5rT2JqZWN0MiA9IGF0a19o
eXBlcmxpbmtfZ2V0X29iamVjdChoTGluazIsIDApOworICAgIGdfYXNzZXJ0KEFUS19PQkpFQ1Qo
aExpbmtPYmplY3QyKSk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShoTGlua09i
amVjdDIpID09IEFUS19ST0xFX0xJTkspOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJs
aW5rX2dldF9zdGFydF9pbmRleChoTGluazIpLCA9PSwgMTIpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChhdGtfaHlwZXJsaW5rX2dldF9lbmRfaW5kZXgoaExpbmsyKSwgPT0sIDMyKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfbl9hbmNob3JzKGhMaW5rMiksID09LCAxKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIoYXRrX2h5cGVybGlua19nZXRfdXJpKGhMaW5rMiwgMCksID09
LCAiaHR0cDovL2Jhci5iYXouZm9vLyIpOworCisgICAgQXRrSHlwZXJsaW5rKiBoTGluazMgPSBh
dGtfaHlwZXJ0ZXh0X2dldF9saW5rKEFUS19IWVBFUlRFWFQocGFyYWdyYXBoMiksIDIpOworICAg
IGdfYXNzZXJ0KEFUS19IWVBFUkxJTksoaExpbmszKSk7CisgICAgQXRrT2JqZWN0KiBoTGlua09i
amVjdDMgPSBhdGtfaHlwZXJsaW5rX2dldF9vYmplY3QoaExpbmszLCAwKTsKKyAgICBnX2Fzc2Vy
dChBVEtfT0JKRUNUKGhMaW5rT2JqZWN0MykpOworICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0
X3JvbGUoaExpbmtPYmplY3QzKSA9PSBBVEtfUk9MRV9MSU5LKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoYXRrX2h5cGVybGlua19nZXRfc3RhcnRfaW5kZXgoaExpbmszKSwgPT0sIDY1KTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfZW5kX2luZGV4KGhMaW5rMyksID09LCA3
NSk7CisgICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0X25fYW5jaG9ycyhoTGlu
azMpLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGF0a19oeXBlcmxpbmtfZ2V0X3VyaSho
TGluazMsIDApLCA9PSwgImh0dHA6Ly9iYXouZm9vLmJhci8iKTsKKworICAgIEF0a09iamVjdCog
bGlzdCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAyKTsKKyAgICBn
X2Fzc2VydChBVEtfT0JKRUNUKGxpc3QpKTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9y
b2xlKGxpc3QpID09IEFUS19ST0xFX0xJU1QpOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfb2Jq
ZWN0X2dldF9uX2FjY2Vzc2libGVfY2hpbGRyZW4obGlzdCksID09LCAxKTsKKworICAgIEF0a09i
amVjdCogbGlzdEl0ZW0gPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGxpc3QsIDAp
OworICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKGxpc3RJdGVtKSk7CisgICAgZ19hc3NlcnQoQVRL
X0lTX0hZUEVSVEVYVChsaXN0SXRlbSkpOworCisgICAgQXRrSHlwZXJsaW5rKiBoTGlua0luTGlz
dEl0ZW0gPSBhdGtfaHlwZXJ0ZXh0X2dldF9saW5rKEFUS19IWVBFUlRFWFQobGlzdEl0ZW0pLCAw
KTsKKyAgICBnX2Fzc2VydChBVEtfSFlQRVJMSU5LKGhMaW5rSW5MaXN0SXRlbSkpOworICAgIEF0
a09iamVjdCogaExpbmtPYmplY3QgPSBhdGtfaHlwZXJsaW5rX2dldF9vYmplY3QoaExpbmtJbkxp
c3RJdGVtLCAwKTsKKyAgICBnX2Fzc2VydChBVEtfT0JKRUNUKGhMaW5rT2JqZWN0KSk7CisgICAg
Z19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShoTGlua09iamVjdCkgPT0gQVRLX1JPTEVfTElO
Syk7CisgICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0X3N0YXJ0X2luZGV4KGhM
aW5rSW5MaXN0SXRlbSksID09LCAyMCk7CisgICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBlcmxp
bmtfZ2V0X2VuZF9pbmRleChoTGlua0luTGlzdEl0ZW0pLCA9PSwgNDMpOworICAgIGdfYXNzZXJ0
X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9uX2FuY2hvcnMoaExpbmtJbkxpc3RJdGVtKSwgPT0s
IDEpOworICAgIGdfYXNzZXJ0X2NtcHN0cihhdGtfaHlwZXJsaW5rX2dldF91cmkoaExpbmtJbkxp
c3RJdGVtLCAwKSwgPT0sICJodHRwOi8vZm9vLmJhci5iYXovIik7CisKKyAgICAvKiBGaW5hbGx5
IGNoZWNrIHRoZSBBdGtBY3Rpb24gaW50ZXJmYWNlIGZvciBhIGdpdmVuIEF0a0h5cGVybGluay4g
Ki8KKyAgICBnX2Fzc2VydChBVEtfSVNfQUNUSU9OKGhMaW5rMSkpOworICAgIGdfYXNzZXJ0X2Nt
cGludChhdGtfYWN0aW9uX2dldF9uX2FjdGlvbnMoQVRLX0FDVElPTihoTGluazEpKSwgPT0sIDEp
OworICAgIGdfYXNzZXJ0X2NtcHN0cihhdGtfYWN0aW9uX2dldF9rZXliaW5kaW5nKEFUS19BQ1RJ
T04oaExpbmsxKSwgMCksID09LCAiIik7CisgICAgZ19hc3NlcnRfY21wc3RyKGF0a19hY3Rpb25f
Z2V0X25hbWUoQVRLX0FDVElPTihoTGluazEpLCAwKSwgPT0sICJqdW1wIik7CisgICAgZ19hc3Nl
cnQoYXRrX2FjdGlvbl9kb19hY3Rpb24oQVRLX0FDVElPTihoTGluazEpLCAwKSk7CisKKyAgICBn
X29iamVjdF91bnJlZihwYXJhZ3JhcGgxKTsKKyAgICBnX29iamVjdF91bnJlZihwYXJhZ3JhcGgy
KTsKKyAgICBnX29iamVjdF91bnJlZihsaXN0KTsKKyAgICBnX29iamVjdF91bnJlZihsaXN0SXRl
bSk7CisgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RX
ZWJraXRBdGtMaXN0c09mSXRlbXMoKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBX
RUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBnX29iamVjdF9yZWZf
c2luayh3ZWJWaWV3KTsKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDgw
MCwgNjAwIH07CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQod2ViVmll
dyksICZhbGxvY2F0aW9uKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmll
dywgbGlzdHNPZkl0ZW1zLCAwLCAwLCAwKTsKKworICAgIEF0a09iamVjdCogb2JqZWN0ID0gZ2V0
V2ViQXJlYU9iamVjdCh3ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChvYmplY3QpOworCisgICAgLyog
VW5vcmRlcmVkIGxpc3QuICovCisKKyAgICBBdGtPYmplY3QqIHVMaXN0ID0gYXRrX29iamVjdF9y
ZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDApOworICAgIGdfYXNzZXJ0KEFUS19PQkpFQ1Qo
dUxpc3QpKTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKHVMaXN0KSA9PSBBVEtf
Uk9MRV9MSVNUKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX29iamVjdF9nZXRfbl9hY2Nlc3Np
YmxlX2NoaWxkcmVuKHVMaXN0KSwgPT0sIDMpOworCisgICAgQXRrT2JqZWN0KiBpdGVtMSA9IGF0
a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQodUxpc3QsIDApOworICAgIEF0a09iamVjdCog
aXRlbTIgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKHVMaXN0LCAxKTsKKyAgICBB
dGtPYmplY3QqIGl0ZW0zID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZCh1TGlzdCwg
Mik7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX29iamVjdF9nZXRfbl9hY2Nlc3NpYmxlX2No
aWxkcmVuKGl0ZW0xKSwgPT0sIDApOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfb2JqZWN0X2dl
dF9uX2FjY2Vzc2libGVfY2hpbGRyZW4oaXRlbTIpLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21w
aW50KGF0a19vYmplY3RfZ2V0X25fYWNjZXNzaWJsZV9jaGlsZHJlbihpdGVtMyksID09LCAxKTsK
KworICAgIGdfb2JqZWN0X3VucmVmKGl0ZW0xKTsKKyAgICBnX29iamVjdF91bnJlZihpdGVtMik7
CisgICAgZ19vYmplY3RfdW5yZWYoaXRlbTMpOworCisgICAgLyogT3JkZXJlZCBsaXN0LiAqLwor
CisgICAgQXRrT2JqZWN0KiBvTGlzdCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQo
b2JqZWN0LCAxKTsKKyAgICBnX2Fzc2VydChBVEtfT0JKRUNUKG9MaXN0KSk7CisgICAgZ19hc3Nl
cnQoYXRrX29iamVjdF9nZXRfcm9sZShvTGlzdCkgPT0gQVRLX1JPTEVfTElTVCk7CisgICAgZ19h
c3NlcnRfY21waW50KGF0a19vYmplY3RfZ2V0X25fYWNjZXNzaWJsZV9jaGlsZHJlbihvTGlzdCks
ID09LCAzKTsKKworICAgIGl0ZW0xID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChv
TGlzdCwgMCk7CisgICAgaXRlbTIgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9M
aXN0LCAxKTsKKyAgICBpdGVtMyA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob0xp
c3QsIDIpOworCisgICAgZ19hc3NlcnRfY21waW50KGF0a19vYmplY3RfZ2V0X25fYWNjZXNzaWJs
ZV9jaGlsZHJlbihpdGVtMSksID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX29iamVj
dF9nZXRfbl9hY2Nlc3NpYmxlX2NoaWxkcmVuKGl0ZW0yKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0
X2NtcGludChhdGtfb2JqZWN0X2dldF9uX2FjY2Vzc2libGVfY2hpbGRyZW4oaXRlbTMpLCA9PSwg
MSk7CisKKyAgICBnX29iamVjdF91bnJlZihpdGVtMSk7CisgICAgZ19vYmplY3RfdW5yZWYoaXRl
bTIpOworICAgIGdfb2JqZWN0X3VucmVmKGl0ZW0zKTsKKworICAgIGdfb2JqZWN0X3VucmVmKHVM
aXN0KTsKKyAgICBnX29iamVjdF91bnJlZihvTGlzdCk7CisgICAgZ19vYmplY3RfdW5yZWYod2Vi
Vmlldyk7Cit9CisKK3R5cGVkZWYgZW51bSB7CisgIFRFWFRfQ0hBTkdFX0lOU0VSVCA9IDEsCisg
IFRFWFRfQ0hBTkdFX1JFTU9WRSA9IDIKK30gVGV4dENoYW5nZVR5cGU7CisKK3N0YXRpYyBnY2hh
ciogdGV4dENoYW5nZWRSZXN1bHQgPSAwOworCitzdGF0aWMgdm9pZCB0ZXh0Q2hhbmdlZENiKEF0
a1RleHQqIHRleHQsIGdpbnQgcG9zLCBnaW50IGxlbiwgZ2NoYXIqIG1vZGlmaWVkVGV4dCwgZ3Bv
aW50ZXIgZGF0YSkKK3sKKyAgICBnX2Fzc2VydCh0ZXh0ICYmIEFUS19JU19PQkpFQ1QodGV4dCkp
OworCisgICAgVGV4dENoYW5nZVR5cGUgdHlwZSA9IEdQT0lOVEVSX1RPX0lOVChkYXRhKTsKKyAg
ICBnX2ZyZWUodGV4dENoYW5nZWRSZXN1bHQpOworICAgIHRleHRDaGFuZ2VkUmVzdWx0ID0gZ19z
dHJkdXBfcHJpbnRmKCJ8JWR8JWR8JWR8JyVzJ3wiLCB0eXBlLCBwb3MsIGxlbiwgbW9kaWZpZWRU
ZXh0KTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a1RleHRDaGFuZ2VkTm90aWZpY2F0
aW9ucygpCit7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3
ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOwor
ICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgODAwLCA2MDAgfTsKKyAgICBn
dGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24p
OworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LCBmb3JtV2l0aFRleHRJ
bnB1dHMsIDAsIDAsIDApOworCisgICAgQXRrT2JqZWN0KiBvYmplY3QgPSBnZXRXZWJBcmVhT2Jq
ZWN0KHdlYlZpZXcpOworICAgIGdfYXNzZXJ0KG9iamVjdCk7CisKKyAgICBBdGtPYmplY3QqIGZv
cm0gPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMCk7CisgICAgZ19h
c3NlcnQoQVRLX0lTX09CSkVDVChmb3JtKSk7CisKKyAgICAvKiBGaXJzdCBjaGVjayBub3JtYWwg
dGV4dCBlbnRyaWVzLiAqLworICAgIEF0a09iamVjdCogdGV4dEVudHJ5ID0gYXRrX29iamVjdF9y
ZWZfYWNjZXNzaWJsZV9jaGlsZChmb3JtLCAwKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfRURJVEFC
TEVfVEVYVCh0ZXh0RW50cnkpKTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKEFU
S19PQkpFQ1QodGV4dEVudHJ5KSkgPT0gQVRLX1JPTEVfRU5UUlkpOworCisgICAgZ19zaWduYWxf
Y29ubmVjdCh0ZXh0RW50cnksICJ0ZXh0LWluc2VydCIsCisgICAgICAgICAgICAgICAgICAgICBH
X0NBTExCQUNLKHRleHRDaGFuZ2VkQ2IpLAorICAgICAgICAgICAgICAgICAgICAgR0lOVF9UT19Q
T0lOVEVSKFRFWFRfQ0hBTkdFX0lOU0VSVCkpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QodGV4dEVu
dHJ5LCAidGV4dC1yZW1vdmUiLAorICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyh0ZXh0
Q2hhbmdlZENiKSwKKyAgICAgICAgICAgICAgICAgICAgIEdJTlRfVE9fUE9JTlRFUihURVhUX0NI
QU5HRV9SRU1PVkUpKTsKKworICAgIGdpbnQgcG9zID0gMDsKKyAgICBhdGtfZWRpdGFibGVfdGV4
dF9pbnNlcnRfdGV4dChBVEtfRURJVEFCTEVfVEVYVCh0ZXh0RW50cnkpLCAiZm9vIGJhciBiYXoi
LCAxMSwgJnBvcyk7CisgICAgY2hhciogdGV4dCA9IGF0a190ZXh0X2dldF90ZXh0KEFUS19URVhU
KHRleHRFbnRyeSksIDAsIC0xKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGV4dCwgPT0sICJmb28g
YmFyIGJheiIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0Q2hhbmdlZFJlc3VsdCwgPT0sICJ8
MXwwfDExfCdmb28gYmFyIGJheid8Iik7CisgICAgZ19mcmVlKHRleHQpOworCisgICAgYXRrX2Vk
aXRhYmxlX3RleHRfZGVsZXRlX3RleHQoQVRLX0VESVRBQkxFX1RFWFQodGV4dEVudHJ5KSwgNCwg
Nyk7CisgICAgdGV4dCA9IGF0a190ZXh0X2dldF90ZXh0KEFUS19URVhUKHRleHRFbnRyeSksIDAs
IC0xKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGV4dCwgPT0sICJmb28gIGJheiIpOworICAgIGdf
YXNzZXJ0X2NtcHN0cih0ZXh0Q2hhbmdlZFJlc3VsdCwgPT0sICJ8Mnw0fDN8J2Jhcid8Iik7Cisg
ICAgZ19mcmVlKHRleHQpOworCisgICAgcG9zID0gNDsKKyAgICBhdGtfZWRpdGFibGVfdGV4dF9p
bnNlcnRfdGV4dChBVEtfRURJVEFCTEVfVEVYVCh0ZXh0RW50cnkpLCAicXV4IHF1dXggdG9iZWln
bm9yZWQiLCA4LCAmcG9zKTsKKyAgICB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHQoQVRLX1RFWFQo
dGV4dEVudHJ5KSwgMCwgLTEpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwgImZvbyBx
dXggcXV1eCBiYXoiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGV4dENoYW5nZWRSZXN1bHQsID09
LCAifDF8NHw4fCdxdXggcXV1eCd8Iik7CisgICAgZ19mcmVlKHRleHQpOworCisgICAgLyogTm93
IGNoZWNrIGZvciBwYXNzd29yZCBlbnRyaWVzLiAqLworICAgIEF0a09iamVjdCogcGFzc3dvcmRF
bnRyeSA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoZm9ybSwgMSk7CisgICAgZ19h
c3NlcnQoQVRLX0lTX0VESVRBQkxFX1RFWFQocGFzc3dvcmRFbnRyeSkpOworICAgIGdfYXNzZXJ0
KGF0a19vYmplY3RfZ2V0X3JvbGUoQVRLX09CSkVDVChwYXNzd29yZEVudHJ5KSkgPT0gQVRLX1JP
TEVfUEFTU1dPUkRfVEVYVCk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHBhc3N3b3JkRW50cnks
ICJ0ZXh0LWluc2VydCIsCisgICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKHRleHRDaGFu
Z2VkQ2IpLAorICAgICAgICAgICAgICAgICAgICAgR0lOVF9UT19QT0lOVEVSKFRFWFRfQ0hBTkdF
X0lOU0VSVCkpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QocGFzc3dvcmRFbnRyeSwgInRleHQtcmVt
b3ZlIiwKKyAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sodGV4dENoYW5nZWRDYiksCisg
ICAgICAgICAgICAgICAgICAgICBHSU5UX1RPX1BPSU5URVIoVEVYVF9DSEFOR0VfUkVNT1ZFKSk7
CisKKyAgICBwb3MgPSAwOworICAgIC8qIEEgc2luZ2xlIGJ1bGxldCBjaGFyYWN0ZXIgaXMgJ1wz
NDJcMjAwXDI0MicgKi8KKyAgICBhdGtfZWRpdGFibGVfdGV4dF9pbnNlcnRfdGV4dChBVEtfRURJ
VEFCTEVfVEVYVChwYXNzd29yZEVudHJ5KSwgImZvb2JhciIsIDYsICZwb3MpOworICAgIGdfYXNz
ZXJ0X2NtcHN0cih0ZXh0Q2hhbmdlZFJlc3VsdCwgPT0sICJ8MXwwfDZ8J1wzNDJcMjAwXDI0Mlwz
NDJcMjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0
Mid8Iik7CisgICAgdGV4dCA9IGF0a190ZXh0X2dldF90ZXh0KEFUS19URVhUKHBhc3N3b3JkRW50
cnkpLCAwLCAtMSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09LCAiXDM0MlwyMDBcMjQy
XDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBc
MjQyIik7CisgICAgZ19mcmVlKHRleHQpOworCisgICAgYXRrX2VkaXRhYmxlX3RleHRfZGVsZXRl
X3RleHQoQVRLX0VESVRBQkxFX1RFWFQocGFzc3dvcmRFbnRyeSksIDIsIDQpOworICAgIGdfYXNz
ZXJ0X2NtcHN0cih0ZXh0Q2hhbmdlZFJlc3VsdCwgPT0sICJ8MnwyfDJ8J1wzNDJcMjAwXDI0Mlwz
NDJcMjAwXDI0Mid8Iik7CisKKyAgICB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHQoQVRLX1RFWFQo
cGFzc3dvcmRFbnRyeSksIDAsIC0xKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGV4dCwgPT0sICJc
MzQyXDIwMFwyNDJcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDIiKTsKKyAgICBn
X2ZyZWUodGV4dCk7CisKKyAgICBwb3MgPSAzOworICAgIGF0a19lZGl0YWJsZV90ZXh0X2luc2Vy
dF90ZXh0KEFUS19FRElUQUJMRV9URVhUKHBhc3N3b3JkRW50cnkpLCAicXV4IHRvYmVpZ25vcmVk
IiwgMywgJnBvcyk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHRDaGFuZ2VkUmVzdWx0LCA9PSwg
InwxfDN8M3wnXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyJ3wiKTsKKworICAg
IHRleHQgPSBhdGtfdGV4dF9nZXRfdGV4dChBVEtfVEVYVChwYXNzd29yZEVudHJ5KSwgMCwgLTEp
OworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwgIlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0
MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAw
XDI0MiIpOworICAgIGdfZnJlZSh0ZXh0KTsKKworICAgIGdfZnJlZSh0ZXh0Q2hhbmdlZFJlc3Vs
dCk7CisKKyAgICBnX29iamVjdF91bnJlZihmb3JtKTsKKyAgICBnX29iamVjdF91bnJlZih0ZXh0
RW50cnkpOworICAgIGdfb2JqZWN0X3VucmVmKHBhc3N3b3JkRW50cnkpOworICAgIGdfb2JqZWN0
X3VucmVmKHdlYlZpZXcpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrUGFyZW50Rm9y
Um9vdE9iamVjdCgpCit7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJf
VklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlv
biA9IHsgMCwgMCwgODAwLCA2MDAgfTsKKyAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RL
X1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOworICAgIHdlYmtpdF93ZWJfdmlld19sb2Fk
X3N0cmluZyh3ZWJWaWV3LCBjb250ZW50cywgMCwgMCwgMCk7CisKKyAgICAvKiBXZSBuZWVkIGEg
cGFyZW50IGNvbnRhaW5lciB3aWRnZXQgZm9yIHRoZSB3ZWJ2aWV3LiAqLworICAgIEd0a1dpZGdl
dCogcGFyZW50Q29udGFpbmVyID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7
CisgICAgZ19vYmplY3RfcmVmX3NpbmsocGFyZW50Q29udGFpbmVyKTsKKyAgICBndGtfY29udGFp
bmVyX2FkZChHVEtfQ09OVEFJTkVSKHBhcmVudENvbnRhaW5lciksIEdUS19XSURHRVQod2ViVmll
dykpOworCisgICAgQXRrT2JqZWN0KiBheFBhcmVudCA9IGd0a193aWRnZXRfZ2V0X2FjY2Vzc2li
bGUocGFyZW50Q29udGFpbmVyKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfT0JKRUNUKGF4UGFyZW50
KSk7CisKKyAgICBBdGtPYmplY3QqIGF4Um9vdCA9IGd0a193aWRnZXRfZ2V0X2FjY2Vzc2libGUo
R1RLX1dJREdFVCh3ZWJWaWV3KSk7CisgICAgZ19hc3NlcnQoQVRLX0lTX09CSkVDVChheFJvb3Qp
KTsKKworICAgIC8qIFRoZSBjaGlsZCBmb3IgdGhlIHBhcmVudCBjb250YWluZXIncyBhY2Nlc3Np
YmlsaXR5IG9iamVjdAorICAgICAgIHNob3VsZCBiZSB0aGUgYWNjZXNzaWJpbGl0eSBvYmplY3Qg
Zm9yIHRoZSBXZWJWaWV3J3Mgcm9vdC4gKi8KKyAgICBBdGtPYmplY3QqIGF4UGFyZW50Q2hpbGQg
PSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGF4UGFyZW50LCAwKTsKKyAgICBnX2Fz
c2VydChheFBhcmVudENoaWxkID09IGF4Um9vdCk7CisKKyAgICAvKiBCb3R0b20tdXAgbmF2aWdh
dGlvbiBzaG91bGQgbWF0Y2ggdG9wLWRvd24gb25lLiAqLworICAgIGdfYXNzZXJ0KGF0a19vYmpl
Y3RfZ2V0X3BhcmVudChheFBhcmVudENoaWxkKSA9PSBheFBhcmVudCk7CisKKyAgICBnX29iamVj
dF91bnJlZihheFBhcmVudENoaWxkKTsKKyAgICBnX29iamVjdF91bnJlZihwYXJlbnRDb250YWlu
ZXIpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrU2V0UGFyZW50Rm9yT2JqZWN0KCkK
K3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93
ZWJfdmlld19uZXcoKSk7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA4
MDAsIDYwMCB9OworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdlYlZp
ZXcpLCAmYWxsb2NhdGlvbik7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZp
ZXcsIGNvbnRlbnRzLCAwLCAwLCAwKTsKKworICAgIC8qIFB1dCB0aGUgd2VidmlldyBpbiBhIHBh
cmVudCBjb250YWluZXIgd2lkZ2V0IHRvIGNoZWNrIHRoYXQgdGhlCisgICAgICAgbm9ybWFsIGJl
aGF2aW91ciBrZWVwcyB3b3JraW5nIGFzIGV4cGVjdGVkIGJ5IGRlZmF1bHQuICovCisgICAgR3Rr
V2lkZ2V0KiBwYXJlbnRDb250YWluZXIgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExF
VkVMKTsKKyAgICBnX29iamVjdF9yZWZfc2luayhwYXJlbnRDb250YWluZXIpOworICAgIGd0a19j
b250YWluZXJfYWRkKEdUS19DT05UQUlORVIocGFyZW50Q29udGFpbmVyKSwgR1RLX1dJREdFVCh3
ZWJWaWV3KSk7CisKKyAgICBBdGtPYmplY3QqIGF4Um9vdCA9IGd0a193aWRnZXRfZ2V0X2FjY2Vz
c2libGUoR1RLX1dJREdFVCh3ZWJWaWV3KSk7CisgICAgZ19hc3NlcnQoQVRLX0lTX09CSkVDVChh
eFJvb3QpKTsKKworICAgIEF0a09iamVjdCogYXhQYXJlbnQgPSBndGtfd2lkZ2V0X2dldF9hY2Nl
c3NpYmxlKHBhcmVudENvbnRhaW5lcik7CisgICAgZ19hc3NlcnQoQVRLX0lTX09CSkVDVChheFBh
cmVudCkpOworCisgICAgLyogVGhlIHBhcmVudCBvZiB0aGUgcm9vdCBvYmplY3QgaXMgdGhlIHBh
cmVudCBjb250YWluZXIncyBhMTF5IG9iamVjdC4gKi8KKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0
X2dldF9wYXJlbnQoYXhSb290KSA9PSBheFBhcmVudCk7CisKKyAgICAvKiBXZSBub3cgbmVlZCB0
byB1c2Ugc29tZXRoaW5nIGFzIGEgYW4gYWx0ZXJuYXRpdmUgcGFyZW50IGZvcgorICAgICAgIHRo
ZSBhMTF5IG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIHJvb3Qgb2YgdGhlIERPTSB0cmVlLiAq
LworICAgIEd0a1dpZGdldCogYWx0ZXJuYXRpdmVQYXJlbnQgPSBndGtfYnV0dG9uX25ldygpOwor
ICAgIGdfb2JqZWN0X3JlZl9zaW5rKGFsdGVybmF0aXZlUGFyZW50KTsKKworICAgIEF0a09iamVj
dCogYXhBbHRlcm5hdGl2ZVBhcmVudCA9IGd0a193aWRnZXRfZ2V0X2FjY2Vzc2libGUoYWx0ZXJu
YXRpdmVQYXJlbnQpOworICAgIGdfYXNzZXJ0KEFUS19JU19PQkpFQ1QoYXhBbHRlcm5hdGl2ZVBh
cmVudCkpOworCisgICAgLyogTWFudWFsbHkgc2V0IHRoZSBhbHRlcm5hdGl2ZSBwYXJlbnQncyBh
Y2Nlc3NpYmlsaXR5IG9iamVjdCBhcworICAgICAgIHRoZSBwYXJlbnQgZm9yIHRoZSBXZWJLaXQg
YWNjZXNzaWJpbGl0eSByb290IG9iamVjdCBhbmQgY2hlY2suICovCisgICAgYXRrX29iamVjdF9z
ZXRfcGFyZW50KGF4Um9vdCwgYXhBbHRlcm5hdGl2ZVBhcmVudCk7CisgICAgZ19hc3NlcnQoYXRr
X29iamVjdF9nZXRfcGFyZW50KGF4Um9vdCkgPT0gYXhBbHRlcm5hdGl2ZVBhcmVudCk7CisKKyAg
ICBnX29iamVjdF91bnJlZihhbHRlcm5hdGl2ZVBhcmVudCk7CisgICAgZ19vYmplY3RfdW5yZWYo
cGFyZW50Q29udGFpbmVyKTsKK30KKworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCitzdGF0aWMg
dm9pZCBpbml0aWFsaXplVGVzdGluZ0ZyYW1ld29yayhpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7
CisgICAgLyogRW5zdXJlIEdBSUwgaXMgdGhlIG9ubHkgbW9kdWxlIGxvYWRlZC4gKi8KKyAgICBn
X3NldGVudigiR1RLX01PRFVMRVMiLCAiZ2FpbCIsIFRSVUUpOworCisgICAgLyogRm9sbG93aW5n
IGxpbmVzIHdlcmUgdGFrZW4gZnJvbSBndGtfdGVzdF9pbml0KCkuICovCisgICAgZ190ZXN0X2lu
aXQoJmFyZ2MsICZhcmd2LCAwKTsKKyAgICBndGtfZGlzYWJsZV9zZXRsb2NhbGUoKTsKKyAgICBz
ZXRsb2NhbGUoTENfQUxMLCAiQyIpOworCisgICAgZ3RrX2luaXQoJmFyZ2MsICZhcmd2KTsKK30K
KyNlbmRpZgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisjaWZkZWYgR1RL
X0FQSV9WRVJTSU9OXzIKKyAgICAvKiBXZSBjYW4ndCBqdXN0IGNhbGwgdG8gZ3RrX3Rlc3RfaW5p
dCgpIGluIHRoaXMgY2FzZSBiZWNhdXNlIGl0cworICAgICAgIGltcGxlbWVudGF0aW9uIG1ha2Vz
IHN1cmUgdGhhdCBubyBHVEsrIG1vZHVsZSB3aWxsIGJlIGxvYWRlZCwgYW5kCisgICAgICAgd2Ug
d2lsbCBuZWVkIHRvIGxvYWQgR0FJTCBmb3IgdGVzdHMgdGhhdCBuZWVkIHRvIHVzZSBBdGtPYmpl
Y3RzCisgICAgICAgZnJvbSBub24tV2ViS2l0IEd0a1dpZGdldHMgKGUuZyBwYXJlbnRGb3JSb290
T2JqZWN0KS4qLworICAgIGluaXRpYWxpemVUZXN0aW5nRnJhbWV3b3JrKGFyZ2MsIGFyZ3YpOwor
I2Vsc2UKKyAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7CisjZW5kaWYKKwor
ICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7CisgICAgZ190
ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9jYXJldE9mZnNldHMiLCB0ZXN0V2Via2l0QXRrQ2Fy
ZXRPZmZzZXRzKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2NhcmV0T2Zmc2V0
c0FuZEV4dHJhbm91c1doaXRlU3BhY2VzIiwgdGVzdFdlYmtpdEF0a0NhcmV0T2Zmc2V0c0FuZEV4
dHJhbm91c1doaXRlU3BhY2VzKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2Nv
bWJvQm94IiwgdGVzdFdlYmtpdEF0a0NvbWJvQm94KTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93
ZWJraXQvYXRrL2RvY3VtZW50TG9hZGluZ0V2ZW50cyIsIHRlc3RXZWJraXRBdGtEb2N1bWVudExv
YWRpbmdFdmVudHMpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvZW1iZWRkZWRP
YmplY3RzIiwgdGVzdFdlYmtpdEF0a0VtYmVkZGVkT2JqZWN0cyk7CisgICAgZ190ZXN0X2FkZF9m
dW5jKCIvd2Via2l0L2F0ay9nZXRIZWFkZXJzSW5UYWJsZSIsIHRlc3RXZWJraXRBdGtHZXRIZWFk
ZXJzSW5UYWJsZSk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay90ZXh0QXR0cmli
dXRlcyIsIHRlc3RXZWJraXRBdGtUZXh0QXR0cmlidXRlcyk7CisgICAgZ190ZXN0X2FkZF9mdW5j
KCIvd2Via2l0L2F0ay90ZXh0U2VsZWN0aW9ucyIsIHRlc3RXZWJraXRBdGtUZXh0U2VsZWN0aW9u
cyk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9nZXRFeHRlbnRzIiwgdGVzdFdl
YmtpdEF0a0dldEV4dGVudHMpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvaHlw
ZXJ0ZXh0QW5kSHlwZXJsaW5rcyIsIHRlc3RXZWJraXRBdGtIeXBlcnRleHRBbmRIeXBlcmxpbmtz
KTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2xheW91dEFuZERhdGFUYWJsZXMi
LCB0ZXN0V2Via2l0QXRrTGF5b3V0QW5kRGF0YVRhYmxlcyk7CisgICAgZ190ZXN0X2FkZF9mdW5j
KCIvd2Via2l0L2F0ay9saW5rc1dpdGhJbmxpbmVJbWFnZXMiLCB0ZXN0V2Via2l0QXRrTGlua3NX
aXRoSW5saW5lSW1hZ2VzKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2xpc3Rz
T2ZJdGVtcyIsIHRlc3RXZWJraXRBdGtMaXN0c09mSXRlbXMpOworICAgIGdfdGVzdF9hZGRfZnVu
YygiL3dlYmtpdC9hdGsvdGV4dENoYW5nZWROb3RpZmljYXRpb25zIiwgdGVzdFdlYmtpdEF0a1Rl
eHRDaGFuZ2VkTm90aWZpY2F0aW9ucyk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0
ay9wYXJlbnRGb3JSb290T2JqZWN0IiwgdGVzdFdlYmtpdEF0a1BhcmVudEZvclJvb3RPYmplY3Qp
OworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvc2V0UGFyZW50Rm9yT2JqZWN0Iiwg
dGVzdFdlYmtpdEF0a1NldFBhcmVudEZvck9iamVjdCk7CisgICAgcmV0dXJuIGdfdGVzdF9ydW4g
KCk7Cit9CisKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3Rr
L3Rlc3RhdGtyb2xlcy5jIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVz
dGF0a3JvbGVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg4MTdjZgot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rl
c3RhdGtyb2xlcy5jCkBAIC0wLDAgKzEsNDI2IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTAg
Sm9hbm1hcmllIERpZ2dzCisgKiBDb3B5cmlnaHQgwqkgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+
CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKworLyog
Tm9uIGZvcm0gcm9sZXMgKi8KKyNkZWZpbmUgSFRNTF9ET0NVTUVOVF9GUkFNRSAiPGh0bWw+PGJv
ZHk+VGhpcyBpcyBhIHRlc3QuPC9ib2R5PjwvaHRtbD4iCisjZGVmaW5lIEhUTUxfSEVBRElORyAi
PGh0bWw+PGJvZHk+PGgxPjE8L2gxPjxoMj4yPC9oMj48aDM+MzwvaDM+PGg0PjQ8L2g0PjxoNT41
PC9oNT48aDY+NjwvaDY+PC9ib2R5PjwvaHRtbD4iCisjZGVmaW5lIEhUTUxfSU1BR0UgIjxodG1s
Pjxib2R5PjxpbWcgc3JjPSdmb29iYXIucG5nJyBhbHQ9J1RoaXMgaXMgYSB0ZXN0LicvPjwvYm9k
eT48L2h0bWw+IgorI2RlZmluZSBIVE1MX0xJTktfVEVYVCAiPGh0bWw+PGJvZHk+PGEgaHJlZj0n
Zm9vYmFyLmh0bWwnPlRoaXMgaXMgYSB0ZXN0LjwvYT48L2JvZHk+PC9odG1sPiIKKyNkZWZpbmUg
SFRNTF9MSVNUICI8aHRtbD48Ym9keT48dWw+PGxpPjE8L2xpPjxsaT4yPC9saT48L3VsPjxvbD48
bGk+MTwvbGk+PGxpPjI8L2xpPjwvb2w+PC9ib2R5PjwvaHRtbD4iCisjZGVmaW5lIEhUTUxfUEFS
QUdSQVBIICI8aHRtbD48Ym9keT48cD5UaGlzIGlzIGEgdGVzdC48L3A+PC9ib2R5PjwvaHRtbD4i
CisjZGVmaW5lIEhUTUxfU0VDVElPTiAiPGh0bWw+PGJvZHk+PGRpdj5UaGlzIGlzIGEgdGVzdC48
L2Rpdj48L2JvZHk+PC9odG1sPiIKKyNkZWZpbmUgSFRNTF9UQUJMRSAiPGh0bWw+PGJvZHk+PHRh
YmxlIGJvcmRlcj0nMSc+PHRyPjx0ZD5UaGlzIGlzPC90ZD48dGQ+YSB0ZXN0LjwvdGQ+PC90cj48
L3RhYmxlPjwvYm9keT48L2h0bWw+IgorI2RlZmluZSBIVE1MX1NFUEFSQVRPUiAiPGh0bWw+PGJv
ZHk+PGhyLz48L2JvZHk+PC9odG1sPiIKKyNkZWZpbmUgSFRNTF9DT01CT0JPWCAiPGh0bWw+PGJv
ZHk+PHNlbGVjdCBzaXplPScxJz48b3B0aW9uPm9uZTwvb3B0aW9uPjxvcHRpb24+dHdvPC9vcHRp
b24+PG9wdGlvbj50aHJlZTwvb3B0aW9uPjwvc2VsZWN0PjwvYm9keT48L2h0bWw+IgorLyogRm9y
bSByb2xlcyAqLworI2RlZmluZSBIVE1MX0ZPUk0gIjxodG1sPjxib2R5Pjxmb3JtPlRoaXMgaXMg
YSB0ZXN0LjwvZm9ybT48L2JvZHk+PC9odG1sPiIKKyNkZWZpbmUgSFRNTF9DSEVDS19CT1ggIjxo
dG1sPjxib2R5PjxpbnB1dCB0eXBlPSdjaGVja2JveCcgLz5UaGlzIGlzIGEgdGVzdC48L2JvZHk+
PC9odG1sPiIKKyNkZWZpbmUgSFRNTF9MQUJFTEVEX0VOVFJZICI8aHRtbD48Ym9keT48bGFiZWwg
Zm9yPSdmb28nPk5hbWU6PC9sYWJlbD48aW5wdXQgdHlwZT0ndGV4dCcgaWQ9J2ZvbycgLz48L2Jv
ZHk+PC9odG1sPiIKKyNkZWZpbmUgSFRNTF9MSVNUQk9YICI8aHRtbD48Ym9keT48c2VsZWN0IHNp
emU9JzMnPjxvcHRpb24+b25lPC9vcHRpb24+PG9wdGlvbj50d288L29wdGlvbj48b3B0aW9uPnRo
cmVlPC9vcHRpb24+PC9zZWxlY3Q+PC9ib2R5PjwvaHRtbD4iCisjZGVmaW5lIEhUTUxfUEFTU1dP
UkRfVEVYVCAiPGh0bWw+PGJvZHk+PGlucHV0IHR5cGU9J3Bhc3N3b3JkJyAvPjwvYm9keT48L2h0
bWw+IgorI2RlZmluZSBIVE1MX1BVU0hfQlVUVE9OICI8aHRtbD48Ym9keT48aW5wdXQgdHlwZT0n
c3VibWl0JyB2YWx1ZT0nb2snIC8+VGhpcyBpcyBhIHRlc3QuPC9ib2R5PjwvaHRtbD4iCisjZGVm
aW5lIEhUTUxfUkFESU9fQlVUVE9OICI8aHRtbD48Ym9keT48aW5wdXQgdHlwZT0ncmFkaW8nIC8+
VGhpcyBpcyBhIHRlc3QuPC9ib2R5PjwvaHRtbD4iCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBB
dGtPYmplY3QqIGRvY3VtZW50OworICAgIEF0a09iamVjdCogb2JqOworICAgIEF0a1JvbGUgcm9s
ZTsKKyAgICBHdGtXaWRnZXQqIHdlYlZpZXc7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvYzsKKyAg
ICBHTWFpbkxvb3AqIGxvb3A7Cit9IEF0a1JvbGVzRml4dHVyZTsKKworc3RhdGljIGdib29sZWFu
IGZpbmlzaF9sb2FkaW5nKEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSkKK3sKKyAgICBpZiAoZ19t
YWluX2xvb3BfaXNfcnVubmluZyhmaXh0dXJlLT5sb29wKSkKKyAgICAgICAgZ19tYWluX2xvb3Bf
cXVpdChmaXh0dXJlLT5sb29wKTsKKworICAgIC8vIFdpdGggdGhlIGNoYW5nZSB0byBzdXBwb3J0
IFdLMiBhY2Nlc3NpYmlsaXR5LCB0aGUgcm9vdCBvYmplY3QKKyAgICAvLyBoYXMgY2hhbmdlZCBh
bmQgaXQncyBubyBsb25nZXIgdGhlIGRvY3VtZW50IGZyYW1lLCBidXQgYSBzY3JvbGwKKyAgICAv
LyBwYW5lIGNvbnRhaW5pbmcgdGhlIGRvY3VtZW50IGZyYW1lIGFzIGl0cyBvbmx5IGNoaWxkLiBT
ZWUgdGhlCisgICAgLy8gYnVnIDcyMzkwIGZvciBtb3JlIGRldGFpbHMgb24gdGhpcyBjaGFuZ2Uu
CisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyMzkwCisg
ICAgQXRrT2JqZWN0KiByb290T2JqZWN0ID0gZ3RrX3dpZGdldF9nZXRfYWNjZXNzaWJsZShmaXh0
dXJlLT53ZWJWaWV3KTsKKyAgICBmaXh0dXJlLT5kb2N1bWVudCA9IGF0a19vYmplY3RfcmVmX2Fj
Y2Vzc2libGVfY2hpbGQocm9vdE9iamVjdCwgMCk7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+ZG9j
dW1lbnQpOworCisgICAgLy8gUmVtb3ZlIHRoZSByZWZlcmVuY2UgYWRkZWQgYnkgcmVmX2FjY2Vz
c2libGVfY2hpbGQoKSBhbmQKKyAgICAvLyByZXR1cm4sIHNpbmNlIHdlIGRvbid0IG5lZWQgdG8g
a2VlcCB0aGF0IGV4dHJhIHJlZiBhdCBhbGwuCisgICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+
ZG9jdW1lbnQpOworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgYXRrX3JvbGVz
X2ZpeHR1cmVfc2V0dXAoQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRh
dGEpCit7CisgICAgZml4dHVyZS0+bG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsK
KyAgICBmaXh0dXJlLT5hbGxvYyA9IChHdGtBbGxvY2F0aW9uKSB7IDAsIDAsIDgwMCwgNjAwIH07
CisgICAgZml4dHVyZS0+d2ViVmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKKyAgICBnX29i
amVjdF9yZWZfc2luayhmaXh0dXJlLT53ZWJWaWV3KTsKKworICAgIGd0a193aWRnZXRfc2l6ZV9h
bGxvY2F0ZShmaXh0dXJlLT53ZWJWaWV3LCAmZml4dHVyZS0+YWxsb2MpOworCisgICAgaWYgKGRh
dGEgIT0gTlVMTCkKKyAgICAgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9X
RUJfVklFVyAoZml4dHVyZS0+d2ViVmlldyksIChjb25zdCBjaGFyKikgZGF0YSwgTlVMTCwgTlVM
TCwgTlVMTCk7CisKKyAgICBnX2lkbGVfYWRkKChHU291cmNlRnVuYykgZmluaXNoX2xvYWRpbmcs
IGZpeHR1cmUpOworICAgIGdfbWFpbl9sb29wX3J1bihmaXh0dXJlLT5sb29wKTsKK30KKworc3Rh
dGljIHZvaWQgYXRrX3JvbGVzX2ZpeHR1cmVfdGVhcmRvd24oQXRrUm9sZXNGaXh0dXJlKiBmaXh0
dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+
d2ViVmlldyk7CisgICAgZ19tYWluX2xvb3BfdW5yZWYoZml4dHVyZS0+bG9vcCk7Cit9CisKK3N0
YXRpYyB2b2lkIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKEF0a09iamVjdCogb2JqLCBnaW50IHBv
cywgQXRrUm9sZSByb2xlKQoreworICAgIEF0a09iamVjdCogY2hpbGQ7CisgICAgQXRrUm9sZSBj
aGlsZF9yb2xlOworCisgICAgY2hpbGQgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxk
KG9iaiwgcG9zKTsKKyAgICBnX2Fzc2VydChjaGlsZCk7CisgICAgY2hpbGRfcm9sZSA9IGF0a19v
YmplY3RfZ2V0X3JvbGUoY2hpbGQpOworICAgIGdfYXNzZXJ0KGNoaWxkX3JvbGUgPT0gcm9sZSk7
CisKKyAgICBnX29iamVjdF91bnJlZihjaGlsZCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Vi
a2l0X2F0a19nZXRfcm9sZV9kb2N1bWVudF9mcmFtZShBdGtSb2xlc0ZpeHR1cmUqIGZpeHR1cmUs
IGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBmaXh0dXJlLT5yb2xlID0gYXRrX29iamVjdF9n
ZXRfcm9sZShmaXh0dXJlLT5kb2N1bWVudCk7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+cm9sZSA9
PSBBVEtfUk9MRV9ET0NVTUVOVF9XRUIpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9h
dGtfZ2V0X3JvbGVfaGVhZGluZyhBdGtSb2xlc0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50
ZXIgZGF0YSkKK3sKKyAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5kb2N1bWVu
dCwgMCwgQVRLX1JPTEVfSEVBRElORyk7CisgICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4
dHVyZS0+ZG9jdW1lbnQsIDEsIEFUS19ST0xFX0hFQURJTkcpOworICAgIGdldF9jaGlsZF9hbmRf
dGVzdF9yb2xlKGZpeHR1cmUtPmRvY3VtZW50LCAyLCBBVEtfUk9MRV9IRUFESU5HKTsKKyAgICBn
ZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5kb2N1bWVudCwgMywgQVRLX1JPTEVfSEVB
RElORyk7CisgICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+ZG9jdW1lbnQsIDQs
IEFUS19ST0xFX0hFQURJTkcpOworICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUt
PmRvY3VtZW50LCA1LCBBVEtfUk9MRV9IRUFESU5HKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93
ZWJraXRfYXRrX2dldF9yb2xlX2ltYWdlKEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0
cG9pbnRlciBkYXRhKQoreworICAgIC8vIFRoaXMgaXMgYW4gZXh0cmFuZW91cyBvYmplY3Qgb2Yg
QVRLX1JPTEVfUEFORUwgd2hpY2ggd2Ugc2hvdWxkIGdldCByaWQgb2YuCisgICAgZml4dHVyZS0+
b2JqID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmaXh0dXJlLT5kb2N1bWVudCwg
MCk7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+b2JqKTsKKworICAgIGdldF9jaGlsZF9hbmRfdGVz
dF9yb2xlKGZpeHR1cmUtPm9iaiwgMCwgQVRLX1JPTEVfSU1BR0UpOworCisgICAgZ19vYmplY3Rf
dW5yZWYoZml4dHVyZS0+b2JqKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dl
dF9yb2xlX2xpbmsoQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEp
Cit7CisgICAgLy8gVGhpcyBpcyBhbiBleHRyYW5lb3VzIG9iamVjdCBvZiBBVEtfUk9MRV9QQU5F
TCB3aGljaCB3ZSBzaG91bGQgZ2V0IHJpZCBvZi4KKyAgICBmaXh0dXJlLT5vYmogPSBhdGtfb2Jq
ZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZpeHR1cmUtPmRvY3VtZW50LCAwKTsKKyAgICBnX2Fz
c2VydChmaXh0dXJlLT5vYmopOworCisgICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVy
ZS0+b2JqLCAwLCBBVEtfUk9MRV9MSU5LKTsKKworICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUt
Pm9iaik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9saXN0X2Fu
ZF9pdGVtKEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQorewor
ICAgIEF0a09iamVjdCogbGlzdE9iajsKKworICAgIGxpc3RPYmogPSBhdGtfb2JqZWN0X3JlZl9h
Y2Nlc3NpYmxlX2NoaWxkKGZpeHR1cmUtPmRvY3VtZW50LCAwKTsKKyAgICBnX2Fzc2VydChsaXN0
T2JqKTsKKyAgICBmaXh0dXJlLT5yb2xlID0gYXRrX29iamVjdF9nZXRfcm9sZShsaXN0T2JqKTsK
KyAgICBnX2Fzc2VydChmaXh0dXJlLT5yb2xlID09IEFUS19ST0xFX0xJU1QpOworCisgICAgZ2V0
X2NoaWxkX2FuZF90ZXN0X3JvbGUobGlzdE9iaiwgMCwgQVRLX1JPTEVfTElTVF9JVEVNKTsKKyAg
ICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShsaXN0T2JqLCAxLCBBVEtfUk9MRV9MSVNUX0lURU0p
OworICAgIGdfb2JqZWN0X3VucmVmKGxpc3RPYmopOworCisgICAgbGlzdE9iaiA9IGF0a19vYmpl
Y3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoZml4dHVyZS0+ZG9jdW1lbnQsIDEpOworICAgIGdfYXNz
ZXJ0KGxpc3RPYmopOworICAgIGZpeHR1cmUtPnJvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKGxp
c3RPYmopOworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPnJvbGUgPT0gQVRLX1JPTEVfTElTVCk7CisK
KyAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShsaXN0T2JqLCAwLCBBVEtfUk9MRV9MSVNUX0lU
RU0pOworICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGxpc3RPYmosIDEsIEFUS19ST0xFX0xJ
U1RfSVRFTSk7CisgICAgZ19vYmplY3RfdW5yZWYobGlzdE9iaik7Cit9CisKK3N0YXRpYyB2b2lk
IHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9wYXJhZ3JhcGgoQXRrUm9sZXNGaXh0dXJlKiBmaXh0
dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUo
Zml4dHVyZS0+ZG9jdW1lbnQsIDAsIEFUS19ST0xFX1BBUkFHUkFQSCk7Cit9CisKK3N0YXRpYyB2
b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9zZWN0aW9uKEF0a1JvbGVzRml4dHVyZSogZml4
dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xl
KGZpeHR1cmUtPmRvY3VtZW50LCAwLCBBVEtfUk9MRV9TRUNUSU9OKTsKK30KKworLy8gRG9lcyBu
b3QgeWV0IHRlc3QgdGFibGUgY2VsbHMgYmVjYXVzZSBvZiBidWcgMzA4OTUuCitzdGF0aWMgdm9p
ZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfdGFibGUoQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJl
LCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4
dHVyZS0+ZG9jdW1lbnQsIDAsIEFUS19ST0xFX1RBQkxFKTsKK30KKworc3RhdGljIHZvaWQgdGVz
dF93ZWJraXRfYXRrX2dldF9yb2xlX3NlcGFyYXRvcihBdGtSb2xlc0ZpeHR1cmUgKmZpeHR1cmUs
IGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0
dXJlLT5kb2N1bWVudCwgMCwgQVRLX1JPTEVfU0VQQVJBVE9SKTsKK30KKworc3RhdGljIHZvaWQg
dGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2NvbWJvYm94KEF0a1JvbGVzRml4dHVyZSAqZml4dHVy
ZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIEF0a09iamVjdCogY29tYm9ib3hNZW51Owor
CisgICAgLy8gVGhpcyBpcyBhbiBleHRyYW5lb3VzIG9iamVjdCBvZiBBVEtfUk9MRV9QQU5FTCB3
aGljaCB3ZSBzaG91bGQgZ2V0IHJpZCBvZi4KKyAgICBmaXh0dXJlLT5vYmogPSBhdGtfb2JqZWN0
X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZpeHR1cmUtPmRvY3VtZW50LCAwKTsKKyAgICBnX2Fzc2Vy
dChmaXh0dXJlLT5vYmopOworCisgICAgZml4dHVyZS0+b2JqID0gYXRrX29iamVjdF9yZWZfYWNj
ZXNzaWJsZV9jaGlsZChmaXh0dXJlLT5vYmosIDApOworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPm9i
aik7CisgICAgZml4dHVyZS0+cm9sZSA9IGF0a19vYmplY3RfZ2V0X3JvbGUoZml4dHVyZS0+b2Jq
KTsKKyAgICBnX2Fzc2VydChmaXh0dXJlLT5yb2xlID09IEFUS19ST0xFX0NPTUJPX0JPWCk7CisK
KyAgICBjb21ib2JveE1lbnUgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZpeHR1
cmUtPm9iaiwgMCk7CisgICAgZ19hc3NlcnQoY29tYm9ib3hNZW51KTsKKyAgICBmaXh0dXJlLT5y
b2xlID0gYXRrX29iamVjdF9nZXRfcm9sZShjb21ib2JveE1lbnUpOworICAgIGdfYXNzZXJ0KGZp
eHR1cmUtPnJvbGUgPT0gQVRLX1JPTEVfTUVOVSk7CisKKyAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rf
cm9sZShjb21ib2JveE1lbnUsIDAsIEFUS19ST0xFX01FTlVfSVRFTSk7CisgICAgZ2V0X2NoaWxk
X2FuZF90ZXN0X3JvbGUoY29tYm9ib3hNZW51LCAxLCBBVEtfUk9MRV9NRU5VX0lURU0pOworICAg
IGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGNvbWJvYm94TWVudSwgMiwgQVRLX1JPTEVfTUVOVV9J
VEVNKTsKKworICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9iaik7CisgICAgZ19vYmplY3Rf
dW5yZWYoY29tYm9ib3hNZW51KTsKK30KKworLyogRm9ybSByb2xlcyAqLworc3RhdGljIHZvaWQg
dGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2Zvcm0oQXRrUm9sZXNGaXh0dXJlICpmaXh0dXJlLCBn
Y29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVy
ZS0+ZG9jdW1lbnQsIDAsIEFUS19ST0xFX0ZPUk0pOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dl
YmtpdF9hdGtfZ2V0X3JvbGVfY2hlY2tfYm94KEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2Nv
bnN0cG9pbnRlciBkYXRhKQoreworICAgIC8vIFRoaXMgaXMgYW4gZXh0cmFuZW91cyBvYmplY3Qg
b2YgQVRLX1JPTEVfUEFORUwgd2hpY2ggd2Ugc2hvdWxkIGdldCByaWQgb2YuCisgICAgZml4dHVy
ZS0+b2JqID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmaXh0dXJlLT5kb2N1bWVu
dCwgMCk7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+b2JqKTsKKworICAgIGdldF9jaGlsZF9hbmRf
dGVzdF9yb2xlKGZpeHR1cmUtPm9iaiwgMCwgQVRLX1JPTEVfQ0hFQ0tfQk9YKTsKKworICAgIGdf
b2JqZWN0X3VucmVmKGZpeHR1cmUtPm9iaik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0
X2F0a19nZXRfcm9sZV9lbnRyeShBdGtSb2xlc0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50
ZXIgZGF0YSkKK3sKKyAgICAvLyBUaGlzIGlzIGFuIGV4dHJhbmVvdXMgb2JqZWN0IG9mIEFUS19S
T0xFX1BBTkVMIHdoaWNoIHdlIHNob3VsZCBnZXQgcmlkIG9mLgorICAgIGZpeHR1cmUtPm9iaiA9
IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoZml4dHVyZS0+ZG9jdW1lbnQsIDApOwor
ICAgIGdfYXNzZXJ0KGZpeHR1cmUtPm9iaik7CisKKyAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9s
ZShmaXh0dXJlLT5vYmosIDEsIEFUS19ST0xFX0VOVFJZKTsKKworICAgIGdfb2JqZWN0X3VucmVm
KGZpeHR1cmUtPm9iaik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9s
ZV9sYWJlbChBdGtSb2xlc0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sK
KyAgICAvLyBUaGlzIGlzIGFuIGV4dHJhbmVvdXMgb2JqZWN0IG9mIEFUS19ST0xFX1BBTkVMIHdo
aWNoIHdlIHNob3VsZCBnZXQgcmlkIG9mLgorICAgIGZpeHR1cmUtPm9iaiA9IGF0a19vYmplY3Rf
cmVmX2FjY2Vzc2libGVfY2hpbGQoZml4dHVyZS0+ZG9jdW1lbnQsIDApOworICAgIGdfYXNzZXJ0
KGZpeHR1cmUtPm9iaik7CisKKyAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5v
YmosIDAsIEFUS19ST0xFX0xBQkVMKTsKKworICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9i
aik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9saXN0Ym94KEF0
a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIEF0a09i
amVjdCogbGlzdGJveE9iajsKKyAgICAvLyBUaGlzIGlzIGFuIGV4dHJhbmVvdXMgb2JqZWN0IG9m
IEFUS19ST0xFX1BBTkVMIHdoaWNoIHdlIHNob3VsZCBnZXQgcmlkIG9mLgorICAgIGZpeHR1cmUt
Pm9iaiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoZml4dHVyZS0+ZG9jdW1lbnQs
IDApOworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPm9iaik7CisKKyAgICBsaXN0Ym94T2JqID0gYXRr
X29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmaXh0dXJlLT5vYmosIDApOworICAgIGdfYXNz
ZXJ0KGxpc3Rib3hPYmopOworICAgIGZpeHR1cmUtPnJvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xl
KGxpc3Rib3hPYmopOworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPnJvbGUgPT0gQVRLX1JPTEVfTElT
VCk7CisKKyAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShsaXN0Ym94T2JqLCAwLCBBVEtfUk9M
RV9MSVNUX0lURU0pOworICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGxpc3Rib3hPYmosIDEs
IEFUS19ST0xFX0xJU1RfSVRFTSk7CisgICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUobGlzdGJv
eE9iaiwgMiwgQVRLX1JPTEVfTElTVF9JVEVNKTsKKworICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1
cmUtPm9iaik7CisgICAgZ19vYmplY3RfdW5yZWYobGlzdGJveE9iaik7Cit9CisKK3N0YXRpYyB2
b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9wYXNzd29yZF90ZXh0KEF0a1JvbGVzRml4dHVy
ZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIC8vIFRoaXMgaXMgYW4gZXh0
cmFuZW91cyBvYmplY3Qgb2YgQVRLX1JPTEVfUEFORUwgd2hpY2ggd2Ugc2hvdWxkIGdldCByaWQg
b2YuCisgICAgZml4dHVyZS0+b2JqID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChm
aXh0dXJlLT5kb2N1bWVudCwgMCk7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+b2JqKTsKKworICAg
IGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPm9iaiwgMCwgQVRLX1JPTEVfUEFTU1dP
UkRfVEVYVCk7CisKKyAgICBnX29iamVjdF91bnJlZihmaXh0dXJlLT5vYmopOworfQorCitzdGF0
aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfcHVzaF9idXR0b24oQXRrUm9sZXNGaXh0
dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgLy8gVGhpcyBpcyBhbiBl
eHRyYW5lb3VzIG9iamVjdCBvZiBBVEtfUk9MRV9QQU5FTCB3aGljaCB3ZSBzaG91bGQgZ2V0IHJp
ZCBvZi4KKyAgICBmaXh0dXJlLT5vYmogPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxk
KGZpeHR1cmUtPmRvY3VtZW50LCAwKTsKKyAgICBnX2Fzc2VydChmaXh0dXJlLT5vYmopOworCisg
ICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+b2JqLCAwLCBBVEtfUk9MRV9QVVNI
X0JVVFRPTik7CisKKyAgICBnX29iamVjdF91bnJlZihmaXh0dXJlLT5vYmopOworfQorCitzdGF0
aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfcmFkaW9fYnV0dG9uKEF0a1JvbGVzRml4
dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIC8vIFRoaXMgaXMgYW4g
ZXh0cmFuZW91cyBvYmplY3Qgb2YgQVRLX1JPTEVfUEFORUwgd2hpY2ggd2Ugc2hvdWxkIGdldCBy
aWQgb2YuCisgICAgZml4dHVyZS0+b2JqID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGls
ZChmaXh0dXJlLT5kb2N1bWVudCwgMCk7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+b2JqKTsKKwor
ICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPm9iaiwgMCwgQVRLX1JPTEVfUkFE
SU9fQlVUVE9OKTsKKworICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9iaik7Cit9CisKK2lu
dCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBndGtfdGVzdF9pbml0KCZhcmdj
LCAmYXJndiwgTlVMTCk7CisKKyAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJr
aXQub3JnLyIpOworCisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9hdGsvdGVzdF93ZWJraXRfYXRr
X2dldF9yb2xlX2RvY3VtZW50X2ZyYW1lIiwKKyAgICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVy
ZSwgSFRNTF9ET0NVTUVOVF9GUkFNRSwKKyAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJl
X3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2RvY3VtZW50
X2ZyYW1lLAorICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfdGVhcmRvd24pOworCisg
ICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9hdGsvdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2hlYWRp
bmciLAorICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX0hFQURJTkcsCisgICAg
ICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3Rf
d2Via2l0X2F0a19nZXRfcm9sZV9oZWFkaW5nLAorICAgICAgICAgICAgICAgYXRrX3JvbGVzX2Zp
eHR1cmVfdGVhcmRvd24pOworCisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9hdGsvdGVzdF93ZWJr
aXRfYXRrX2dldF9yb2xlX2ltYWdlIiwKKyAgICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVyZSwg
SFRNTF9JTUFHRSwKKyAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAorICAg
ICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2ltYWdlLAorICAgICAgICAgICAg
ICAgYXRrX3JvbGVzX2ZpeHR1cmVfdGVhcmRvd24pOworCisgICAgZ190ZXN0X2FkZCgiL3dlYmtp
dC9hdGsvdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xpbmsiLAorICAgICAgICAgICAgICAgQXRr
Um9sZXNGaXh0dXJlLCBIVE1MX0xJTktfVEVYVCwKKyAgICAgICAgICAgICAgIGF0a19yb2xlc19m
aXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xp
bmssCisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICBn
X3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfbGlzdF9hbmRf
aXRlbSIsCisgICAgICAgICAgICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhUTUxfTElTVCwKKyAgICAg
ICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF93
ZWJraXRfYXRrX2dldF9yb2xlX2xpc3RfYW5kX2l0ZW0sCisgICAgICAgICAgICAgICBhdGtfcm9s
ZXNfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0
X3dlYmtpdF9hdGtfZ2V0X3JvbGVfcGFyYWdyYXBoIiwKKyAgICAgICAgICAgICAgIEF0a1JvbGVz
Rml4dHVyZSwgSFRNTF9QQVJBR1JBUEgsCisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVy
ZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9wYXJhZ3Jh
cGgsCisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICBn
X3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfc2VjdGlvbiIs
CisgICAgICAgICAgICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhUTUxfU0VDVElPTiwKKyAgICAgICAg
ICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF93ZWJr
aXRfYXRrX2dldF9yb2xlX3NlY3Rpb24sCisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVy
ZV90ZWFyZG93bik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9h
dGtfZ2V0X3JvbGVfdGFibGUiLAorICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1M
X1RBQkxFLAorICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAsCisgICAgICAg
ICAgICAgICB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfdGFibGUsCisgICAgICAgICAgICAgICBh
dGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0
ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfc2VwYXJhdG9yIiwKKyAgICAgICAgICAgICAgIEF0
a1JvbGVzRml4dHVyZSwgSFRNTF9TRVBBUkFUT1IsCisgICAgICAgICAgICAgICBhdGtfcm9sZXNf
Zml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9z
ZXBhcmF0b3IsCisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7CisK
KyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfY29t
Ym9ib3giLAorICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX0NPTUJPQk9YLAor
ICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0
ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfY29tYm9ib3gsCisgICAgICAgICAgICAgICBhdGtfcm9s
ZXNfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICAvKiBGb3JtIHJvbGVzICovCisgICAgZ190ZXN0
X2FkZCgiL3dlYmtpdC9hdGsvdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2Zvcm0iLAorICAgICAg
ICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX0ZPUk0sCisgICAgICAgICAgICAgICBhdGtf
cm9sZXNfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X2F0a19nZXRf
cm9sZV9mb3JtLAorICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfdGVhcmRvd24pOwor
ICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvYXRrL3Rlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9jaGVj
a19ib3giLAorICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX0NIRUNLX0JPWCwK
KyAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAg
dGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2NoZWNrX2JveCwKKyAgICAgICAgICAgICAgIGF0a19y
b2xlc19maXh0dXJlX3RlYXJkb3duKTsKKworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvYXRrL3Rl
c3Rfd2Via2l0X2F0a19nZXRfcm9sZV9lbnRyeSIsCisgICAgICAgICAgICAgICBBdGtSb2xlc0Zp
eHR1cmUsIEhUTUxfTEFCRUxFRF9FTlRSWSwKKyAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0
dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2VudHJ5
LAorICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfdGVhcmRvd24pOworCisgICAgZ190
ZXN0X2FkZCgiL3dlYmtpdC9hdGsvdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xhYmVsIiwKKyAg
ICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVyZSwgSFRNTF9MQUJFTEVEX0VOVFJZLAorICAgICAg
ICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0X3dl
YmtpdF9hdGtfZ2V0X3JvbGVfbGFiZWwsCisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVy
ZV90ZWFyZG93bik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9h
dGtfZ2V0X3JvbGVfbGlzdGJveCIsCisgICAgICAgICAgICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhU
TUxfTElTVEJPWCwKKyAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAorICAg
ICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xpc3Rib3gsCisgICAgICAgICAg
ICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Vi
a2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfcGFzc3dvcmRfdGV4dCIsCisgICAgICAg
ICAgICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhUTUxfUEFTU1dPUkRfVEVYVCwKKyAgICAgICAgICAg
ICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF93ZWJraXRf
YXRrX2dldF9yb2xlX3Bhc3N3b3JkX3RleHQsCisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4
dHVyZV90ZWFyZG93bik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtp
dF9hdGtfZ2V0X3JvbGVfcHVzaF9idXR0b24iLAorICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0
dXJlLCBIVE1MX1BVU0hfQlVUVE9OLAorICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVf
c2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfcHVzaF9idXR0
b24sCisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICBn
X3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfcmFkaW9fYnV0
dG9uIiwKKyAgICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVyZSwgSFRNTF9SQURJT19CVVRUT04s
CisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAg
IHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9yYWRpb19idXR0b24sCisgICAgICAgICAgICAgICBh
dGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICByZXR1cm4gZ190ZXN0X3J1bigpOwor
fQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGNv
bnRleHRtZW51LmMgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0Y29u
dGV4dG1lbnUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGFhYTU3Ci0t
LSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVz
dGNvbnRleHRtZW51LmMKQEAgLTAsMCArMSwzMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwx
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDx3ZWJraXQvd2Vi
a2l0Lmg+CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjaGFyICpkYXRhOworICAgIGd1aW50IGZs
YWc7Cit9IFRlc3RJbmZvOworCitzdGF0aWMgR01haW5Mb29wICpsb29wOworCit0eXBlZGVmIHN0
cnVjdCB7CisgICAgV2ViS2l0V2ViVmlldyAqd2ViVmlldzsKKyAgICBUZXN0SW5mbyAqaW5mbzsK
K30gQ29udGV4dE1lbnVGaXh0dXJlOworCitzdGF0aWMgVGVzdEluZm8gKnRlc3RJbmZvTmV3KGNv
bnN0IGNoYXIgKmRhdGEsIGd1aW50IGZsYWcpCit7CisgICAgVGVzdEluZm8gKmluZm8gPSBnX3Ns
aWNlX25ldyhUZXN0SW5mbyk7CisgICAgaW5mby0+ZGF0YSA9IGdfc3RyZHVwKGRhdGEpOworICAg
IGluZm8tPmZsYWcgPSBmbGFnOworCisgICAgcmV0dXJuIGluZm87Cit9CisKK3N0YXRpYyB2b2lk
IHRlc3RJbmZvRGVzdHJveShUZXN0SW5mbyAqaW5mbykKK3sKKyAgICBnX2ZyZWUoaW5mby0+ZGF0
YSk7CisgICAgZ19zbGljZV9mcmVlKFRlc3RJbmZvLCBpbmZvKTsKK30KKworc3RhdGljIHZvaWQg
Y29udGV4dE1lbnVGaXh0dXJlU2V0dXAoQ29udGV4dE1lbnVGaXh0dXJlICpmaXh0dXJlLCBnY29u
c3Rwb2ludGVyIGRhdGEpCit7CisgICAgZml4dHVyZS0+d2ViVmlldyA9IFdFQktJVF9XRUJfVklF
Vyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVM
TCwgVFJVRSk7CisgICAgZml4dHVyZS0+aW5mbyA9IChUZXN0SW5mbyAqKWRhdGE7Cit9CisKK3N0
YXRpYyB2b2lkIGNvbnRleHRNZW51Rml4dHVyZVRlYXJkb3duKENvbnRleHRNZW51Rml4dHVyZSAq
Zml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1
cmUtPndlYlZpZXcpOworICAgIGdfbWFpbl9sb29wX3VucmVmKGxvb3ApOworICAgIHRlc3RJbmZv
RGVzdHJveShmaXh0dXJlLT5pbmZvKTsKK30KKworc3RhdGljIEdMaXN0ICpjaGVja0FjdGlvbihH
TGlzdCAqaXRlciwgV2ViS2l0Q29udGV4dE1lbnVBY3Rpb24gYWN0aW9uKQoreworICAgIEd0a01l
bnVJdGVtICppdGVtID0gKEd0a01lbnVJdGVtICopaXRlci0+ZGF0YTsKKworICAgIGdfYXNzZXJ0
KEdUS19JU19NRU5VX0lURU0oaXRlbSkpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9jb250ZXh0X21l
bnVfaXRlbV9nZXRfYWN0aW9uKGl0ZW0pID09IGFjdGlvbik7CisKKyAgICByZXR1cm4gaXRlci0+
bmV4dDsKK30KKworc3RhdGljIEdMaXN0ICpjaGVja0FjdGlvbldpdGhTdWJtZW51KEdMaXN0ICpp
dGVyLCBXZWJLaXRDb250ZXh0TWVudUFjdGlvbiBhY3Rpb24pCit7CisgICAgR3RrTWVudUl0ZW0g
Kml0ZW0gPSAoR3RrTWVudUl0ZW0gKilpdGVyLT5kYXRhOworCisgICAgZ19hc3NlcnQoR1RLX0lT
X01FTlVfSVRFTShpdGVtKSk7CisgICAgZ19hc3NlcnQod2Via2l0X2NvbnRleHRfbWVudV9pdGVt
X2dldF9hY3Rpb24oaXRlbSkgPT0gYWN0aW9uKTsKKyAgICBnX2Fzc2VydChHVEtfSVNfTUVOVShn
dGtfbWVudV9pdGVtX2dldF9zdWJtZW51KGl0ZW0pKSk7CisKKyAgICByZXR1cm4gaXRlci0+bmV4
dDsKK30KKworc3RhdGljIEdMaXN0ICpjaGVja1NlcGFyYXRvcihHTGlzdCAqaXRlcikKK3sKKyAg
ICBHdGtNZW51SXRlbSAqaXRlbSA9IChHdGtNZW51SXRlbSAqKWl0ZXItPmRhdGE7CisKKyAgICBn
X2Fzc2VydChHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSk7CisKKyAgICByZXR1cm4g
aXRlci0+bmV4dDsKK30KKworc3RhdGljIGdib29sZWFuIGNvbnRleHRNZW51Q2FsbGJhY2soV2Vi
S2l0V2ViVmlldyAqd2ViVmlldywgR3RrV2lkZ2V0ICpkZWZhdWx0TWVudSwgV2ViS2l0SGl0VGVz
dFJlc3VsdCAqaGl0VGVzdFJlc3VsdCwgZ2Jvb2xlYW4ga2V5Ym9hcmRNb2RlLCBncG9pbnRlciB1
c2VyRGF0YSkKK3sKKyAgICBUZXN0SW5mbyAqaW5mbyA9IChUZXN0SW5mbyAqKXVzZXJEYXRhOwor
ICAgIGd1aW50IGNvbnRleHQ7CisgICAgR0xpc3QgKml0ZW1zOworICAgIEdMaXN0ICppdGVyOwor
CisgICAgLyogQ2hlY2sgc2lnbmFsIHBhcmFtZXRlcnMgKi8KKyAgICBnX2Fzc2VydChXRUJLSVRf
SVNfV0VCX1ZJRVcod2ViVmlldykpOworICAgIGdfYXNzZXJ0KEdUS19JU19NRU5VKGRlZmF1bHRN
ZW51KSk7CisgICAgZ19hc3NlcnQoV0VCS0lUX0lTX0hJVF9URVNUX1JFU1VMVChoaXRUZXN0UmVz
dWx0KSk7CisgICAgZ19hc3NlcnQoIWtleWJvYXJkTW9kZSk7CisKKyAgICBnX29iamVjdF9nZXQo
aGl0VGVzdFJlc3VsdCwgImNvbnRleHQiLCAmY29udGV4dCwgTlVMTCk7CisgICAgZ19hc3NlcnQo
Y29udGV4dCAmIGluZm8tPmZsYWcpOworCisgICAgaXRlbXMgPSBndGtfY29udGFpbmVyX2dldF9j
aGlsZHJlbihHVEtfQ09OVEFJTkVSKGRlZmF1bHRNZW51KSk7CisgICAgc3dpdGNoIChpbmZvLT5m
bGFnKSB7CisgICAgY2FzZSBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfRE9DVU1FTlQ6
CisgICAgICAgIGl0ZXIgPSBpdGVtczsKKyAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIs
IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0dPX0JBQ0spOworICAgICAgICBpdGVyID0gY2hl
Y2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fR09fRk9SV0FSRCk7Cisg
ICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
Tl9TVE9QKTsKKyAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhU
X01FTlVfQUNUSU9OX1JFTE9BRCk7CisgICAgICAgIGdfYXNzZXJ0KCFpdGVyKTsKKworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9JTUFHRToK
KyAgICAgICAgaXRlciA9IGl0ZW1zOworICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwg
V0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9JTUFHRV9JTl9ORVdfV0lORE9XKTsKKyAg
ICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9O
X0RPV05MT0FEX0lNQUdFX1RPX0RJU0spOworICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRl
ciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9JTUFHRV9UT19DTElQQk9BUkQpOwor
ICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T05fQ09QWV9JTUFHRV9VUkxfVE9fQ0xJUEJPQVJEKTsKKyAgICAgICAgZ19hc3NlcnQoIWl0ZXIp
OworCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05U
RVhUX0VESVRBQkxFOgorICAgICAgICBpdGVyID0gaXRlbXM7CisgICAgICAgIGl0ZXIgPSBjaGVj
a0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DVVQpOworICAgICAgICBp
dGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWSk7
CisgICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FD
VElPTl9QQVNURSk7CisgICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09O
VEVYVF9NRU5VX0FDVElPTl9ERUxFVEUpOworICAgICAgICBpdGVyID0gY2hlY2tTZXBhcmF0b3Io
aXRlcik7CisgICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9N
RU5VX0FDVElPTl9TRUxFQ1RfQUxMKTsKKyAgICAgICAgaXRlciA9IGNoZWNrU2VwYXJhdG9yKGl0
ZXIpOworICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb25XaXRoU3VibWVudShpdGVyLCBXRUJLSVRf
Q09OVEVYVF9NRU5VX0FDVElPTl9JTlBVVF9NRVRIT0RTKTsKKyAgICAgICAgaXRlciA9IGNoZWNr
QWN0aW9uV2l0aFN1Ym1lbnUoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fVU5JQ09E
RSk7CisgICAgICAgIGdfYXNzZXJ0KCFpdGVyKTsKKworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9MSU5LOgorICAgICAgICBpdGVyID0gaXRl
bXM7CisgICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5V
X0FDVElPTl9PUEVOX0xJTkspOworICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VC
S0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9MSU5LX0lOX05FV19XSU5ET1cpOworICAgICAg
ICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRE9X
TkxPQURfTElOS19UT19ESVNLKTsKKyAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdF
QktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFlfTElOS19UT19DTElQQk9BUkQpOworICAgICAg
ICBnX2Fzc2VydCghaXRlcik7CisKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICB9CisKKyAgICBnX2xpc3RfZnJlZShpdGVt
cyk7CisgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKKworICAgIHJldHVybiBUUlVFOworfQor
CitzdGF0aWMgdm9pZCBwdXNoRXZlbnQoV2ViS2l0V2ViVmlldyAqd2ViVmlldykKK3sKKyAgICBH
ZGtFdmVudCAqZXZlbnQgPSBnZGtfZXZlbnRfbmV3KEdES19CVVRUT05fUFJFU1MpOworI2lmIEdU
S19DSEVDS19WRVJTSU9OKDMsIDAsIDApCisgICAgR2RrRGV2aWNlTWFuYWdlciAqZGV2aWNlTWFu
YWdlcjsKKyNlbmRpZgorCisgICAgZXZlbnQtPmFueS53aW5kb3cgPSBnX29iamVjdF9yZWYoZ3Rr
X3dpZGdldF9nZXRfd2luZG93KEdUS19XSURHRVQod2ViVmlldykpKTsKKyAgICBldmVudC0+YW55
LnNlbmRfZXZlbnQgPSBGQUxTRTsKKyAgICBldmVudC0+YnV0dG9uLnRpbWUgPSBHREtfQ1VSUkVO
VF9USU1FOworICAgIGV2ZW50LT5idXR0b24uYnV0dG9uID0gMzsKKyAgICBldmVudC0+YnV0dG9u
LnggPSBldmVudC0+YnV0dG9uLnkgPSA1OworICAgIGV2ZW50LT5idXR0b24ueF9yb290ID0gZXZl
bnQtPmJ1dHRvbi54OworICAgIGV2ZW50LT5idXR0b24ueV9yb290ID0gZXZlbnQtPmJ1dHRvbi55
OworI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDAsIDApCisgICAgZGV2aWNlTWFuYWdlciA9IGdk
a19kaXNwbGF5X2dldF9kZXZpY2VfbWFuYWdlcihnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsK
KyAgICBldmVudC0+YnV0dG9uLmRldmljZSA9IGdka19kZXZpY2VfbWFuYWdlcl9nZXRfY2xpZW50
X3BvaW50ZXIoZGV2aWNlTWFuYWdlcik7CisjZW5kaWYKKworICAgIGdka19ldmVudF9wdXQoZXZl
bnQpOworICAgIGdka19ldmVudF9mcmVlKGV2ZW50KTsKK30KKworc3RhdGljIHZvaWQgbG9hZFN0
YXR1c0NhbGxiYWNrKFdlYktpdFdlYlZpZXcgKndlYlZpZXcsIEdQYXJhbVNwZWMgKnNwZWMsIGdw
b2ludGVyIGRhdGEpCit7CisgICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYlZpZXcpOworICAgIFRlc3RJbmZvICppbmZvID0gKFRl
c3RJbmZvICopZGF0YTsKKworICAgIGdfYXNzZXJ0KHN0YXR1cyAhPSBXRUJLSVRfTE9BRF9GQUlM
RUQpOworCisgICAgaWYgKHN0YXR1cyAhPSBXRUJLSVRfTE9BRF9GSU5JU0hFRCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAiY29udGV4dC1tZW51Iiwg
R19DQUxMQkFDSyhjb250ZXh0TWVudUNhbGxiYWNrKSwgaW5mbyk7CisgICAgcHVzaEV2ZW50KHdl
YlZpZXcpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gbWFwRXZlbnRDYWxsYmFjayhHdGtXaWRnZXQg
KndpZGdldCwgR2RrRXZlbnQgKmV2ZW50LCBncG9pbnRlciBkYXRhKQoreworICAgIGd0a193aWRn
ZXRfZ3JhYl9mb2N1cyh3aWRnZXQpOworICAgIENvbnRleHRNZW51Rml4dHVyZSAqZml4dHVyZSA9
IChDb250ZXh0TWVudUZpeHR1cmUgKilkYXRhOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0
cmluZyhmaXh0dXJlLT53ZWJWaWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
aXh0dXJlLT5pbmZvLT5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGV4
dC9odG1sIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInV0Zi04IiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGU6Ly8iKTsKKyAgICBnX3NpZ25hbF9jb25u
ZWN0KGZpeHR1cmUtPndlYlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhs
b2FkU3RhdHVzQ2FsbGJhY2spLCBmaXh0dXJlLT5pbmZvKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9
CisKK3N0YXRpYyB2b2lkIHRlc3RDb250ZXh0TWVudShDb250ZXh0TWVudUZpeHR1cmUgKmZpeHR1
cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24g
PSB7IDAsIDAsIDUwLCA1MCB9OworICAgIEd0a1dpZGdldCAqd2luZG93ID0gZ3RrX3dpbmRvd19u
ZXcoR1RLX1dJTkRPV19QT1BVUCk7CisKKyAgICBndGtfd2luZG93X3Jlc2l6ZShHVEtfV0lORE9X
KHdpbmRvdyksIDUwLCA1MCk7CisgICAgZ3RrX3dpbmRvd19tb3ZlKEdUS19XSU5ET1cod2luZG93
KSwgMCwgMCk7CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQoZml4dHVy
ZS0+d2ViVmlldyksICZhbGxvY2F0aW9uKTsKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09O
VEFJTkVSKHdpbmRvdyksIEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldykpOworICAgIGdfc2ln
bmFsX2Nvbm5lY3Qod2luZG93LCAibWFwLWV2ZW50IiwgR19DQUxMQkFDSyhtYXBFdmVudENhbGxi
YWNrKSwgZml4dHVyZSk7CisgICAgZ3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpOworCisgICAg
Z19tYWluX2xvb3BfcnVuKGxvb3ApOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gY29udGV4dE1lbnVD
dXN0b21JdGVtQ2FsbGJhY2soV2ViS2l0V2ViVmlldyAqd2ViVmlldywgR3RrV2lkZ2V0ICpkZWZh
dWx0TWVudSwgV2ViS2l0SGl0VGVzdFJlc3VsdCAqaGl0VGVzdFJlc3VsdCwgZ2Jvb2xlYW4ga2V5
Ym9hcmRNb2RlLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBUZXN0SW5mbyAqaW5mbyA9IChU
ZXN0SW5mbyAqKXVzZXJEYXRhOworICAgIGd1aW50IGNvbnRleHQ7CisgICAgR0xpc3QgKml0ZW1z
OworICAgIEdMaXN0ICppdGVyOworICAgIEd0a1dpZGdldCAqbWVudUl0ZW07CisgICAgR3RrQWN0
aW9uICphY3Rpb247CisKKyAgICAvKiBDaGVjayBzaWduYWwgcGFyYW1ldGVycyAqLworICAgIGdf
YXNzZXJ0KFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSk7CisgICAgZ19hc3NlcnQoR1RLX0lT
X01FTlUoZGVmYXVsdE1lbnUpKTsKKyAgICBnX2Fzc2VydChXRUJLSVRfSVNfSElUX1RFU1RfUkVT
VUxUKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCgha2V5Ym9hcmRNb2RlKTsKKworICAg
IGdfb2JqZWN0X2dldChoaXRUZXN0UmVzdWx0LCAiY29udGV4dCIsICZjb250ZXh0LCBOVUxMKTsK
KyAgICBnX2Fzc2VydChjb250ZXh0ICYgaW5mby0+ZmxhZyk7CisKKyAgICBhY3Rpb24gPSBndGtf
YWN0aW9uX25ldygiVGVzdEFjdGlvbiIsICJDdXN0b20gQWN0aW9uIiwgIkN1c3RvbSBBY3Rpb24g
VG9vbHRpcCIsIE5VTEwpOworICAgIG1lbnVJdGVtID0gZ3RrX2FjdGlvbl9jcmVhdGVfbWVudV9p
dGVtKGFjdGlvbik7CisgICAgZ19vYmplY3RfdW5yZWYoYWN0aW9uKTsKKworICAgIGd0a19tZW51
X3NoZWxsX2FwcGVuZChHVEtfTUVOVV9TSEVMTChkZWZhdWx0TWVudSksIG1lbnVJdGVtKTsKKyAg
ICBndGtfd2lkZ2V0X3Nob3cobWVudUl0ZW0pOworCisgICAgaXRlbXMgPSBndGtfY29udGFpbmVy
X2dldF9jaGlsZHJlbihHVEtfQ09OVEFJTkVSKGRlZmF1bHRNZW51KSk7CisgICAgaXRlciA9IGl0
ZW1zOworICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FD
VElPTl9HT19CQUNLKTsKKyAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fR09fRk9SV0FSRCk7CisgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIs
IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1NUT1ApOworICAgIGl0ZXIgPSBjaGVja0FjdGlv
bihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9SRUxPQUQpOworICAgIGl0ZXIgPSBj
aGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9OT19BQ1RJT04pOwor
ICAgIGdfYXNzZXJ0KCFpdGVyKTsKKworICAgIGdfbGlzdF9mcmVlKGl0ZW1zKTsKKyAgICBnX21h
aW5fbG9vcF9xdWl0KGxvb3ApOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lk
IHRlc3RDb250ZXh0TWVudUN1c3RvbUl0ZW0oQ29udGV4dE1lbnVGaXh0dXJlICpmaXh0dXJlLCBn
Y29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgR3RrV2lkZ2V0ICp3aW5kb3cgPSBndGtfd2luZG93
X25ldyhHVEtfV0lORE9XX1BPUFVQKTsKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJ
TkVSKHdpbmRvdyksIEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldykpOworICAgIGd0a193aWRn
ZXRfc2hvd19hbGwod2luZG93KTsKKyAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMoR1RLX1dJREdF
VChmaXh0dXJlLT53ZWJWaWV3KSk7CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmco
Zml4dHVyZS0+d2ViVmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4dHVy
ZS0+aW5mby0+ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRleHQvaHRt
bCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1dGYtOCIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJmaWxlOi8vIik7CisgICAgZ19zaWduYWxfY29ubmVjdChm
aXh0dXJlLT53ZWJWaWV3LCAiY29udGV4dC1tZW51IiwgR19DQUxMQkFDSyhjb250ZXh0TWVudUN1
c3RvbUl0ZW1DYWxsYmFjayksIGZpeHR1cmUtPmluZm8pOworICAgIHB1c2hFdmVudChmaXh0dXJl
LT53ZWJWaWV3KTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAg
IGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKKworICAgIGdfdGVzdF9idWdfYmFz
ZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0
L3Rlc3Rjb250ZXh0bWVudS9kb2N1bWVudCIsIENvbnRleHRNZW51Rml4dHVyZSwKKyAgICAgICAg
ICAgICAgIHRlc3RJbmZvTmV3KCI8aHRtbD48Ym9keT48aDE+V2ViS2l0R1RLKyE8L2gxPjwvYm9k
eT48L2h0bWw+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9ISVRfVEVTVF9S
RVNVTFRfQ09OVEVYVF9ET0NVTUVOVCksCisgICAgICAgICAgICAgICBjb250ZXh0TWVudUZpeHR1
cmVTZXR1cCwgdGVzdENvbnRleHRNZW51LCBjb250ZXh0TWVudUZpeHR1cmVUZWFyZG93bik7Cisg
ICAgLyogV2UgaGFyZGNvZGUgYWxsIGVsZW1lbnRzIHRvIGJlIGF0IDAsMCBzbyB0aGF0IHdlIGtu
b3cgd2hlcmUgdG8gZ2VuZXJhdGUgdGhlIGJ1dHRvbiBldmVudHMgKi8KKyAgICBnX3Rlc3RfYWRk
KCIvd2Via2l0L3Rlc3Rjb250ZXh0bWVudS9pbWFnZSIsIENvbnRleHRNZW51Rml4dHVyZSwKKyAg
ICAgICAgICAgICAgIHRlc3RJbmZvTmV3KCI8aHRtbD48Ym9keT48aW1nIHN0eWxlPSdwb3NpdGlv
bjphYnNvbHV0ZTsgbGVmdDowOyB0b3A6MCcgc3JjPScweGRlYWRiZWVmJyB3aWR0aD01MCBoZWln
aHQ9NTA+PC9pbWc+PC9ib2R5PjwvaHRtbD4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
V0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0lNQUdFKSwKKyAgICAgICAgICAgICAgIGNv
bnRleHRNZW51Rml4dHVyZVNldHVwLCB0ZXN0Q29udGV4dE1lbnUsIGNvbnRleHRNZW51Rml4dHVy
ZVRlYXJkb3duKTsKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L3Rlc3Rjb250ZXh0bWVudS9lZGl0
YWJsZSIsIENvbnRleHRNZW51Rml4dHVyZSwKKyAgICAgICAgICAgICAgIHRlc3RJbmZvTmV3KCI8
aHRtbD48Ym9keT48aW5wdXQgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjA7IHRvcDow
JyBzaXplPSczNSc+PC9pbnB1dD4+PC9ib2R5PjwvaHRtbD4iLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0VESVRBQkxFKSwKKyAgICAg
ICAgICAgICAgIGNvbnRleHRNZW51Rml4dHVyZVNldHVwLCB0ZXN0Q29udGV4dE1lbnUsIGNvbnRl
eHRNZW51Rml4dHVyZVRlYXJkb3duKTsKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L3Rlc3Rjb250
ZXh0bWVudS9saW5rIiwgQ29udGV4dE1lbnVGaXh0dXJlLAorICAgICAgICAgICAgICAgdGVzdElu
Zm9OZXcoIjxodG1sPjxib2R5PjxhIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDowOyB0
b3A6MCcgaHJlZj0naHR0cDovL3d3dy5leGFtcGxlLmNvbSc+SEVMTE8gV09STEQ8L2E+PC9ib2R5
PjwvaHRtbD4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX0hJVF9URVNUX1JF
U1VMVF9DT05URVhUX0xJTkspLAorICAgICAgICAgICAgICAgY29udGV4dE1lbnVGaXh0dXJlU2V0
dXAsIHRlc3RDb250ZXh0TWVudSwgY29udGV4dE1lbnVGaXh0dXJlVGVhcmRvd24pOworICAgIGdf
dGVzdF9hZGQoIi93ZWJraXQvdGVzdGNvbnRleHRtZW51L2N1c3RvbWl0ZW0iLCBDb250ZXh0TWVu
dUZpeHR1cmUsCisgICAgICAgICAgICAgICB0ZXN0SW5mb05ldygiPGh0bWw+PGJvZHk+PGgxPldl
YktpdEdUSyshPC9oMT48L2JvZHk+PC9odG1sPiIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfRE9DVU1FTlQpLAorICAgICAgICAgICAg
ICAgY29udGV4dE1lbnVGaXh0dXJlU2V0dXAsIHRlc3RDb250ZXh0TWVudUN1c3RvbUl0ZW0sIGNv
bnRleHRNZW51Rml4dHVyZVRlYXJkb3duKTsKKworICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7Cit9
CisKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3Rj
b3B5YW5kcGFzdGUuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3Rj
b3B5YW5kcGFzdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjM4ZWE2
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsv
dGVzdGNvcHlhbmRwYXN0ZS5jCkBAIC0wLDAgKzEsMjY2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8ZXJybm8u
aD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxn
bGliL2dzdGRpby5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ29u
dGV4dFJlZi5oPgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgY2hhciogcGFnZTsKKyAgICBjaGFy
KiBleHBlY3RlZENvbnRlbnQ7Cit9IFRlc3RJbmZvOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAg
R3RrV2lkZ2V0KiB3aW5kb3c7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldzsKKyAgICBHTWFp
bkxvb3AqIGxvb3A7CisgICAgVGVzdEluZm8qIGluZm87Cit9IENvcHlBbmRQYXN0ZUZpeHR1cmU7
CisKK1Rlc3RJbmZvKgordGVzdF9pbmZvX25ldyhjb25zdCBjaGFyKiBwYWdlLCBjb25zdCBjaGFy
KiBleHBlY3RlZENvbnRlbnQpCit7CisgICAgVGVzdEluZm8qIGluZm87CisgICAgaW5mbyA9IGdf
c2xpY2VfbmV3MChUZXN0SW5mbyk7CisgICAgaW5mby0+cGFnZSA9IGdfc3RyZHVwKHBhZ2UpOwor
ICAgIGlmIChleHBlY3RlZENvbnRlbnQpCisgICAgICAgIGluZm8tPmV4cGVjdGVkQ29udGVudCA9
IGdfc3RyZHVwKGV4cGVjdGVkQ29udGVudCk7CisgICAgcmV0dXJuIGluZm87Cit9CisKK3ZvaWQK
K3Rlc3RfaW5mb19kZXN0cm95KFRlc3RJbmZvKiBpbmZvKQoreworICAgIGdfZnJlZShpbmZvLT5w
YWdlKTsKKyAgICBnX2ZyZWUoaW5mby0+ZXhwZWN0ZWRDb250ZW50KTsKKyAgICBnX3NsaWNlX2Zy
ZWUoVGVzdEluZm8sIGluZm8pOworfQorCitzdGF0aWMgdm9pZCBjb3B5X2FuZF9wYXN0ZV9maXh0
dXJlX3NldHVwKENvcHlBbmRQYXN0ZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0
YSkKK3sKKyAgICBmaXh0dXJlLT5sb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwor
CisgICAgZml4dHVyZS0+d2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZF
TCk7CisgICAgZml4dHVyZS0+d2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3Zp
ZXdfbmV3KCkpOworCisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihmaXh0dXJl
LT53aW5kb3cpLCBHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpKTsKK30KKworc3RhdGljIHZv
aWQgY29weV9hbmRfcGFzdGVfZml4dHVyZV90ZWFyZG93bihDb3B5QW5kUGFzdGVGaXh0dXJlKiBm
aXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgZ3RrX3dpZGdldF9kZXN0cm95KGZp
eHR1cmUtPndpbmRvdyk7CisgICAgZ19tYWluX2xvb3BfdW5yZWYoZml4dHVyZS0+bG9vcCk7Cisg
ICAgdGVzdF9pbmZvX2Rlc3Ryb3koZml4dHVyZS0+aW5mbyk7Cit9CisKK3N0YXRpYyB2b2lkIGxv
YWRfc3RhdHVzX2NiKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEdQYXJhbVNwZWMqIHNwZWMsIGdw
b2ludGVyIGRhdGEpCit7CisgICAgQ29weUFuZFBhc3RlRml4dHVyZSogZml4dHVyZSA9IChDb3B5
QW5kUGFzdGVGaXh0dXJlKilkYXRhOworICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Vi
a2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJWaWV3KTsKKyAgICBpZiAoc3RhdHVzICE9
IFdFQktJVF9MT0FEX0ZJTklTSEVEKQorICAgICAgICByZXR1cm47CisKKyAgICBHdGtDbGlwYm9h
cmQqIGNsaXBib2FyZCA9IGd0a19jbGlwYm9hcmRfZ2V0KEdES19TRUxFQ1RJT05fQ0xJUEJPQVJE
KTsKKyAgICBndGtfY2xpcGJvYXJkX2NsZWFyKGNsaXBib2FyZCk7CisKKyAgICB3ZWJraXRfd2Vi
X3ZpZXdfY29weV9jbGlwYm9hcmQod2ViVmlldyk7CisKKyAgICBnY2hhciogdGV4dCA9IGd0a19j
bGlwYm9hcmRfd2FpdF9mb3JfdGV4dChjbGlwYm9hcmQpOworICAgIGdfYXNzZXJ0KHRleHQgfHwg
IWZpeHR1cmUtPmluZm8tPmV4cGVjdGVkQ29udGVudCk7CisgICAgZ19hc3NlcnQoIXRleHQgfHwg
IXN0cmNtcCh0ZXh0LCBmaXh0dXJlLT5pbmZvLT5leHBlY3RlZENvbnRlbnQpKTsKKyAgICBnX2Zy
ZWUodGV4dCk7CisKKyAgICAvLyBWZXJpZnkgdGhhdCB0aGUgbWFya3VwIHN0YXJ0cyB3aXRoIHRo
ZSBwcm9wZXIgY29udGVudC10eXBlIG1ldGEgdGFnIHByZWZpeC4KKyAgICBHdGtTZWxlY3Rpb25E
YXRhKiBzZWxlY3Rpb25EYXRhID0gZ3RrX2NsaXBib2FyZF93YWl0X2Zvcl9jb250ZW50cyhjbGlw
Ym9hcmQsIGdka19hdG9tX2ludGVybigidGV4dC9odG1sIiwgRkFMU0UpKTsKKyAgICBpZiAoc2Vs
ZWN0aW9uRGF0YSkgeworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogbWFya3VwUHJlZml4ID0g
IjxtZXRhIGh0dHAtZXF1aXY9XCJjb250ZW50LXR5cGVcIiBjb250ZW50PVwidGV4dC9odG1sOyBj
aGFyc2V0PXV0Zi04XCI+IjsKKyAgICAgICAgY2hhciogbWFya3VwID0gZ19zdHJuZHVwKChjb25z
dCBjaGFyKikgZ3RrX3NlbGVjdGlvbl9kYXRhX2dldF9kYXRhKHNlbGVjdGlvbkRhdGEpLAorICAg
ICAgICAgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX2dldF9sZW5ndGgoc2VsZWN0aW9uRGF0YSkpOwor
ICAgICAgICBnX2Fzc2VydChzdHJsZW4obWFya3VwUHJlZml4KSA8PSBzdHJsZW4obWFya3VwKSk7
CisgICAgICAgIGdfYXNzZXJ0KCFzdHJuY21wKG1hcmt1cFByZWZpeCwgbWFya3VwLCBzdHJsZW4o
bWFya3VwUHJlZml4KSkpOworICAgICAgICBnX2ZyZWUobWFya3VwKTsKKyAgICB9CisKKyAgICBn
X2Fzc2VydCghZ3RrX2NsaXBib2FyZF93YWl0X2lzX3VyaXNfYXZhaWxhYmxlKGNsaXBib2FyZCkp
OworICAgIGdfYXNzZXJ0KCFndGtfY2xpcGJvYXJkX3dhaXRfaXNfaW1hZ2VfYXZhaWxhYmxlKGNs
aXBib2FyZCkpOworCisgICAgZ19tYWluX2xvb3BfcXVpdChmaXh0dXJlLT5sb29wKTsKK30KKwor
Z2Jvb2xlYW4gbWFwX2V2ZW50X2NiKEd0a1dpZGdldCAqd2lkZ2V0LCBHZGtFdmVudCogZXZlbnQs
IGdwb2ludGVyIGRhdGEpCit7CisgICAgQ29weUFuZFBhc3RlRml4dHVyZSogZml4dHVyZSA9IChD
b3B5QW5kUGFzdGVGaXh0dXJlKilkYXRhOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmlu
ZyhmaXh0dXJlLT53ZWJWaWV3LCBmaXh0dXJlLT5pbmZvLT5wYWdlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAidGV4dC9odG1sIiwgInV0Zi04IiwgImZpbGU6Ly8iKTsKKyAgICBy
ZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfY29weV9hbmRfcGFzdGUoQ29weUFu
ZFBhc3RlRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGZpeHR1
cmUtPmluZm8gPSAoVGVzdEluZm8qKWRhdGE7CisgICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJl
LT53aW5kb3csICJtYXAtZXZlbnQiLAorICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyht
YXBfZXZlbnRfY2IpLCBmaXh0dXJlKTsKKworICAgIGd0a193aWRnZXRfc2hvdyhmaXh0dXJlLT53
aW5kb3cpOworICAgIGd0a193aWRnZXRfc2hvdyhHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcp
KTsKKyAgICBndGtfd2luZG93X3ByZXNlbnQoR1RLX1dJTkRPVyhmaXh0dXJlLT53aW5kb3cpKTsK
KyAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMoR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSk7
CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJub3RpZnk6OmxvYWQt
c3RhdHVzIiwKKyAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sobG9hZF9zdGF0dXNfY2Ip
LCBmaXh0dXJlKTsKKworICAgIGdfbWFpbl9sb29wX3J1bihmaXh0dXJlLT5sb29wKTsKK30KKwor
c3RhdGljIENvcHlBbmRQYXN0ZUZpeHR1cmUqIGN1cnJlbnRGaXh0dXJlOworc3RhdGljIEpTVmFs
dWVSZWYgcnVuUGFzdGVUZXN0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0
UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3Vu
dCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQor
eworICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1cyhHVEtfV0lER0VUKGN1cnJlbnRGaXh0dXJlLT53
ZWJWaWV3KSk7CisKKyAgICAvLyBTaW11bGF0ZSBhIHBhc3RlIGtleWJvYXJkIHNlcXVlbmNlLgor
ICAgIEdka0V2ZW50KiBldmVudCA9IGdka19ldmVudF9uZXcoR0RLX0tFWV9QUkVTUyk7CisgICAg
ZXZlbnQtPmtleS5rZXl2YWwgPSBnZGtfdW5pY29kZV90b19rZXl2YWwoJ3YnKTsKKyAgICBldmVu
dC0+a2V5LnN0YXRlID0gR0RLX0NPTlRST0xfTUFTSzsKKyAgICBldmVudC0+a2V5LndpbmRvdyA9
IGd0a193aWRnZXRfZ2V0X3dpbmRvdyhHVEtfV0lER0VUKGN1cnJlbnRGaXh0dXJlLT53ZWJWaWV3
KSk7CisgICAgZ19vYmplY3RfcmVmKGV2ZW50LT5rZXkud2luZG93KTsKKyNpZm5kZWYgR1RLX0FQ
SV9WRVJTSU9OXzIKKyAgICBHZGtEZXZpY2VNYW5hZ2VyKiBtYW5hZ2VyID0gIGdka19kaXNwbGF5
X2dldF9kZXZpY2VfbWFuYWdlcihnZGtfd2luZG93X2dldF9kaXNwbGF5KGV2ZW50LT5rZXkud2lu
ZG93KSk7CisgICAgZ2RrX2V2ZW50X3NldF9kZXZpY2UoZXZlbnQsIGdka19kZXZpY2VfbWFuYWdl
cl9nZXRfY2xpZW50X3BvaW50ZXIobWFuYWdlcikpOworI2VuZGlmCisKKyAgICBHZGtLZXltYXBL
ZXkqIGtleXM7CisgICAgZ2ludCBuX2tleXM7CisgICAgaWYgKGdka19rZXltYXBfZ2V0X2VudHJp
ZXNfZm9yX2tleXZhbChnZGtfa2V5bWFwX2dldF9kZWZhdWx0KCksIGV2ZW50LT5rZXkua2V5dmFs
LCAma2V5cywgJm5fa2V5cykpIHsKKyAgICAgICAgZXZlbnQtPmtleS5oYXJkd2FyZV9rZXljb2Rl
ID0ga2V5c1swXS5rZXljb2RlOworICAgICAgICBnX2ZyZWUoa2V5cyk7CisgICAgfQorCisgICAg
Z3RrX21haW5fZG9fZXZlbnQoZXZlbnQpOworICAgIGV2ZW50LT5rZXkudHlwZSA9IEdES19LRVlf
UkVMRUFTRTsKKyAgICBndGtfbWFpbl9kb19ldmVudChldmVudCk7CisgICAgZ2RrX2V2ZW50X2Zy
ZWUoZXZlbnQpOworCisgICAgSlNTdHJpbmdSZWYgc2NyaXB0U3RyaW5nID0gSlNTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoImRvY3VtZW50LmJvZHkuaW5uZXJIVE1MOyIpOworICAgIEpTVmFs
dWVSZWYgdmFsdWUgPSBKU0V2YWx1YXRlU2NyaXB0KGNvbnRleHQsIHNjcmlwdFN0cmluZywgMCwg
MCwgMCwgMCk7CisgICAgSlNTdHJpbmdSZWxlYXNlKHNjcmlwdFN0cmluZyk7CisKKyAgICBnX2Fz
c2VydChKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgdmFsdWUpKTsKKyAgICBKU1N0cmluZ1JlZiBh
Y3R1YWwgPSBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIHZhbHVlLCBleGNlcHRpb24pOwor
ICAgIGdfYXNzZXJ0KCFleGNlcHRpb24gfHwgISpleGNlcHRpb24pOworICAgIGdfYXNzZXJ0KGN1
cnJlbnRGaXh0dXJlLT5pbmZvLT5leHBlY3RlZENvbnRlbnQpOworICAgIEpTU3RyaW5nUmVmIGV4
cGVjdGVkID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoY3VycmVudEZpeHR1cmUtPmlu
Zm8tPmV4cGVjdGVkQ29udGVudCk7CisgICAgZ19hc3NlcnQoSlNTdHJpbmdJc0VxdWFsKGV4cGVj
dGVkLCBhY3R1YWwpKTsKKworICAgIEpTU3RyaW5nUmVsZWFzZShleHBlY3RlZCk7CisgICAgSlNT
dHJpbmdSZWxlYXNlKGFjdHVhbCk7CisgICAgZ19tYWluX2xvb3BfcXVpdChjdXJyZW50Rml4dHVy
ZS0+bG9vcCk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQor
CitzdGF0aWMgdm9pZCB3aW5kb3dfb2JqZWN0X2NsZWFyZWRfY2FsbGJhY2soV2ViS2l0V2ViVmll
dyogd2ViX3ZpZXcsIFdlYktpdFdlYkZyYW1lKiB3ZWJfZnJhbWUsIEpTR2xvYmFsQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dfb2JqZWN0LCBncG9pbnRlciBkYXRhKQorewor
ICAgIEpTU3RyaW5nUmVmIG5hbWUgPSBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicnVu
VGVzdCIpOworICAgIEpTT2JqZWN0UmVmIHRlc3RDb21wbGV0ZSA9IEpTT2JqZWN0TWFrZUZ1bmN0
aW9uV2l0aENhbGxiYWNrKGNvbnRleHQsIG5hbWUsIHJ1blBhc3RlVGVzdENhbGxiYWNrKTsKKyAg
ICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQsIHdpbmRvd19vYmplY3QsIG5hbWUsIHRlc3RD
b21wbGV0ZSwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lLCAwKTsKKyAgICBKU1N0cmluZ1JlbGVh
c2UobmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIHBhc3RpbmdfdGVzdF9nZXRfZGF0YV9jYWxsYmFj
ayhHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCwgR3RrU2VsZWN0aW9uRGF0YSogc2VsZWN0aW9uX2Rh
dGEsIGd1aW50IGluZm8sIGdwb2ludGVyIGRhdGEpCit7CisgICAgZ3RrX3NlbGVjdGlvbl9kYXRh
X3NldChzZWxlY3Rpb25fZGF0YSwgZ2RrX2F0b21faW50ZXJuKCJ0ZXh0L2h0bWwiLCBGQUxTRSks
IDgsIChjb25zdCBndWNoYXIqKSBkYXRhLCBzdHJsZW4oKGNoYXIqKWRhdGEpICsgMSk7Cit9CisK
K3N0YXRpYyB2b2lkIHBhc3RpbmdfdGVzdF9jbGVhcl9kYXRhX2NhbGxiYWNrKEd0a0NsaXBib2Fy
ZCogY2xpcGJvYXJkLCBncG9pbnRlciBkYXRhKQoreworICAgIGdfZnJlZShkYXRhKTsKK30KKwor
c3RhdGljIHZvaWQgdGVzdF9wYXN0aW5nX21hcmt1cChDb3B5QW5kUGFzdGVGaXh0dXJlKiBmaXh0
dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgZml4dHVyZS0+aW5mbyA9IChUZXN0SW5m
byopZGF0YTsKKyAgICBjdXJyZW50Rml4dHVyZSA9IGZpeHR1cmU7CisKKyAgICBHdGtUYXJnZXRM
aXN0KiB0YXJnZXRMaXN0ID0gZ3RrX3RhcmdldF9saXN0X25ldygwLCAwKTsKKyAgICBndGtfdGFy
Z2V0X2xpc3RfYWRkKHRhcmdldExpc3QsIGdka19hdG9tX2ludGVybigidGV4dC9odG1sIiwgRkFM
U0UpLCAwLCAwKTsKKworICAgIGludCBudW1iZXJPZlRhcmdldHMgPSAxOworICAgIEd0a1Rhcmdl
dEVudHJ5KiB0YXJnZXRUYWJsZSA9IGd0a190YXJnZXRfdGFibGVfbmV3X2Zyb21fbGlzdCh0YXJn
ZXRMaXN0LCAmbnVtYmVyT2ZUYXJnZXRzKTsKKyAgICBndGtfY2xpcGJvYXJkX3NldF93aXRoX2Rh
dGEoZ3RrX2NsaXBib2FyZF9nZXQoR0RLX1NFTEVDVElPTl9DTElQQk9BUkQpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRUYWJsZSwgbnVtYmVyT2ZUYXJnZXRzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXN0aW5nX3Rlc3RfZ2V0X2RhdGFfY2FsbGJh
Y2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RpbmdfdGVzdF9jbGVhcl9k
YXRhX2NhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3N0cmR1cChm
aXh0dXJlLT5pbmZvLT5leHBlY3RlZENvbnRlbnQpKTsKKyAgICBndGtfdGFyZ2V0X2xpc3RfdW5y
ZWYodGFyZ2V0TGlzdCk7CisgICAgZ3RrX3RhcmdldF90YWJsZV9mcmVlKHRhcmdldFRhYmxlLCBu
dW1iZXJPZlRhcmdldHMpOworCisgICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53aW5kb3cs
ICJtYXAtZXZlbnQiLAorICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhtYXBfZXZlbnRf
Y2IpLCBmaXh0dXJlKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJ3
aW5kb3ctb2JqZWN0LWNsZWFyZWQiLAorICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyh3
aW5kb3dfb2JqZWN0X2NsZWFyZWRfY2FsbGJhY2spLCBmaXh0dXJlKTsKKworICAgIGd0a193aWRn
ZXRfc2hvdyhmaXh0dXJlLT53aW5kb3cpOworICAgIGd0a193aWRnZXRfc2hvdyhHVEtfV0lER0VU
KGZpeHR1cmUtPndlYlZpZXcpKTsKKyAgICBndGtfd2luZG93X3ByZXNlbnQoR1RLX1dJTkRPVyhm
aXh0dXJlLT53aW5kb3cpKTsKKworICAgIGdfbWFpbl9sb29wX3J1bihmaXh0dXJlLT5sb29wKTsK
K30KKworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgZ3RrX3Rlc3Rf
aW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBjb25zdCBjaGFyKiBzZWxlY3RlZF9zcGFuX2h0bWwg
PSAiPGh0bWw+PGJvZHk+IgorICAgICAgICAiPHNwYW4gaWQ9XCJtYWluc3BhblwiPkFsbCB3b3Jr
IGFuZCBubyBwbGF5IDxzcGFuPm1ha2UgSmFjayBhIGR1bGw8L3NwYW4+IGJveS48L3NwYW4+Igor
ICAgICAgICAiPHNjcmlwdD5kb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5jb2xsYXBzZSgpO1xuIgor
ICAgICAgICAiZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0QWxsQ2hpbGRyZW4oZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ21haW5zcGFuJykpO1xuIgorICAgICAgICAiPC9zY3JpcHQ+PC9i
b2R5PjwvaHRtbD4iOworICAgIGNvbnN0IGNoYXIqIG5vX3NlbGVjdGlvbl9odG1sID0gIjxodG1s
Pjxib2R5PiIKKyAgICAgICAgIjxzcGFuIGlkPVwibWFpbnNwYW5cIj5BbGwgd29yayBhbmQgbm8g
cGxheSA8c3Bhbj5tYWtlIEphY2sgYSBkdWxsPC9zcGFuPiBib3k8L3NwYW4+IgorICAgICAgICAi
PHNjcmlwdD5kb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5jb2xsYXBzZSgpO1xuIgorICAgICAgICAi
PC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4iOworCisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9jb3B5
YW5kcGFzdGUvc2VsZWN0aW9uIiwgQ29weUFuZFBhc3RlRml4dHVyZSwKKyAgICAgICAgICAgICAg
IHRlc3RfaW5mb19uZXcoc2VsZWN0ZWRfc3Bhbl9odG1sLCAiQWxsIHdvcmsgYW5kIG5vIHBsYXkg
bWFrZSBKYWNrIGEgZHVsbCBib3kuIiksCisgICAgICAgICAgICAgICBjb3B5X2FuZF9wYXN0ZV9m
aXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF9jb3B5X2FuZF9wYXN0ZSwKKyAgICAg
ICAgICAgICAgIGNvcHlfYW5kX3Bhc3RlX2ZpeHR1cmVfdGVhcmRvd24pOworICAgIGdfdGVzdF9h
ZGQoIi93ZWJraXQvY29weWFuZHBhc3RlL25vLXNlbGVjdGlvbiIsIENvcHlBbmRQYXN0ZUZpeHR1
cmUsCisgICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KG5vX3NlbGVjdGlvbl9odG1sLCAwKSwK
KyAgICAgICAgICAgICAgIGNvcHlfYW5kX3Bhc3RlX2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAg
ICAgICB0ZXN0X2NvcHlfYW5kX3Bhc3RlLAorICAgICAgICAgICAgICAgY29weV9hbmRfcGFzdGVf
Zml4dHVyZV90ZWFyZG93bik7CisKKyAgICBjb25zdCBjaGFyKiBwYXN0ZV90ZXN0X2h0bWwgPSAi
PGh0bWw+IgorICAgICAgICAiPGJvZHkgb25Mb2FkPVwiZG9jdW1lbnQuYm9keS5mb2N1cygpOyBy
dW5UZXN0KCk7XCIgY29udGVudEVkaXRhYmxlPVwidHJ1ZVwiPiIKKyAgICAgICAgIjwvYm9keT48
L2h0bWw+IjsKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2NvcHlhbmRwYXN0ZS9wYXN0ZS1tYXJr
dXAiLCBDb3B5QW5kUGFzdGVGaXh0dXJlLAorICAgICAgICAgICAgICAgdGVzdF9pbmZvX25ldyhw
YXN0ZV90ZXN0X2h0bWwsICJib2JieSIpLAorICAgICAgICAgICAgICAgY29weV9hbmRfcGFzdGVf
Zml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3RfcGFzdGluZ19tYXJrdXAsCisgICAg
ICAgICAgICAgICBjb3B5X2FuZF9wYXN0ZV9maXh0dXJlX3RlYXJkb3duKTsKKworICAgIHJldHVy
biBnX3Rlc3RfcnVuKCk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdEd0ay90ZXN0ZG9tZG9jdW1lbnQuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0R3RrL3Rlc3Rkb21kb2N1bWVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjRjOTk3ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdEd0ay90ZXN0ZG9tZG9jdW1lbnQuYwpAQCAtMCwwICsxLDQyOCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAidGVzdF91dGlscy5oIgorCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGdsaWIv
Z3N0ZGlvLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQu
aD4KKworI2RlZmluZSBIVE1MX0RPQ1VNRU5UX1RJVExFICI8aHRtbD48aGVhZD48dGl0bGU+VGhp
cyBpcyB0aGUgdGl0bGU8L3RpdGxlPjwvaGVhZD48Ym9keT48L2JvZHk+PC9odG1sPiIKKyNkZWZp
bmUgSFRNTF9ET0NVTUVOVF9FTEVNRU5UUyAiPGh0bWw+PGJvZHk+PHVsPjxsaT4xPC9saT48bGk+
MjwvbGk+PGxpPjM8L2xpPjwvdWw+PC9ib2R5PjwvaHRtbD4iCisjZGVmaW5lIEhUTUxfRE9DVU1F
TlRfRUxFTUVOVFNfQ0xBU1MgIjxodG1sPjxib2R5PjxkaXYgY2xhc3M9XCJ0ZXN0XCI+PC9kaXY+
PGRpdiBjbGFzcz1cInN0cmFuZ2VcIj48L2Rpdj48ZGl2IGNsYXNzPVwidGVzdFwiPjwvZGl2Pjwv
Ym9keT48L2h0bWw+IgorI2RlZmluZSBIVE1MX0RPQ1VNRU5UX0VMRU1FTlRTX0lEICI8aHRtbD48
Ym9keT48ZGl2IGlkPVwidGVzdG9rXCI+PC9kaXY+PGRpdiBpZD1cInRlc3RiYWRcIj5maXJzdDwv
ZGl2PjxkaXYgaWQ9XCJ0ZXN0YmFkXCI+c2Vjb25kPC9kaXY+PC9ib2R5PjwvaHRtbD4iCisjZGVm
aW5lIEhUTUxfRE9DVU1FTlRfTElOS1MgIjxodG1sPjxoZWFkPjx0aXRsZT5UaXRsZTwvdGl0bGU+
PC9oZWFkPjxib2R5PjxhIGhyZWY9XCJhYm91dDpibGFua1wiPmJsYW5rPC9hPjxhIGhyZWY9XCJo
dHRwOi8vd3d3Lmdvb2dsZS5jb21cIj5nb29nbGU8L2E+PGEgaHJlZj1cImh0dHA6Ly93d3cud2Vi
a2l0Lm9yZ1wiPndlYmtpdDwvYT48L2JvZHk+PC9odG1sPiIKKyNkZWZpbmUgSFRNTF9ET0NVTUVO
VF9JRlJBTUUgIjxodG1sPjxoZWFkPjx0aXRsZT5JRnJhbWU8L3RpdGxlPjwvaGVhZD48Ym9keT48
aWZyYW1lIGlkPSdpZnJhbWUnPjwvaWZyYW1lPjxkaXYgaWQ9J3Rlc3QnPjwvZGl2PjwvYm9keT48
L2h0bWw+IgorI2RlZmluZSBIVE1MX0RPQ1VNRU5UX1RBQkxFICI8aHRtbD48Ym9keT48dGFibGUg
aWQ9XCJ0YWJsZVwiPjwvdGFibGU+PC9ib2R5PjwvaHRtbD4iCisjZGVmaW5lIEhUTUxfRE9DVU1F
TlRfRVZBTFVBVEUgIjxodG1sPjxoZWFkPjx0aXRsZT48L3RpdGxlPjwvaGVhZD48Ym9keT48ZGl2
PkZpcnN0IGRpdjwvZGl2PjxkaXY+U2Vjb25kIGRpdjwvZGl2PjwvYm9keT48L2h0bWw+IgorCit0
eXBlZGVmIHN0cnVjdCB7CisgICAgR3RrV2lkZ2V0KiB3ZWJWaWV3OworICAgIEdNYWluTG9vcCog
bG9vcDsKK30gRG9tRG9jdW1lbnRGaXh0dXJlOworCitzdGF0aWMgZ2Jvb2xlYW4gZmluaXNoX2xv
YWRpbmcoRG9tRG9jdW1lbnRGaXh0dXJlKiBmaXh0dXJlKQoreworICAgIGlmIChnX21haW5fbG9v
cF9pc19ydW5uaW5nKGZpeHR1cmUtPmxvb3ApKQorICAgICAgICBnX21haW5fbG9vcF9xdWl0KGZp
eHR1cmUtPmxvb3ApOworCisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZCBkb21f
ZG9jdW1lbnRfZml4dHVyZV9zZXR1cChEb21Eb2N1bWVudEZpeHR1cmUqIGZpeHR1cmUsIGdjb25z
dHBvaW50ZXIgZGF0YSkKK3sKKyAgICBmaXh0dXJlLT5sb29wID0gZ19tYWluX2xvb3BfbmV3KE5V
TEwsIFRSVUUpOworICAgIGZpeHR1cmUtPndlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7
CisgICAgZ19vYmplY3RfcmVmX3NpbmsoZml4dHVyZS0+d2ViVmlldyk7CisKKyAgICBpZiAoZGF0
YSAhPSBOVUxMKQorICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoV0VCS0lUX1dF
Ql9WSUVXIChmaXh0dXJlLT53ZWJWaWV3KSwgKGNvbnN0IGNoYXIqKSBkYXRhLCBOVUxMLCBOVUxM
LCBOVUxMKTsKKworICAgIGdfaWRsZV9hZGQoKEdTb3VyY2VGdW5jKWZpbmlzaF9sb2FkaW5nLCBm
aXh0dXJlKTsKKyAgICBnX21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7Cit9CisKK3N0YXRp
YyB2b2lkIGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKERvbURvY3VtZW50Rml4dHVyZSog
Zml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGlmIChmaXh0dXJlLT53ZWJWaWV3
KQorICAgICAgICBnX29iamVjdF91bnJlZihmaXh0dXJlLT53ZWJWaWV3KTsKKyAgICBnX21haW5f
bG9vcF91bnJlZihmaXh0dXJlLT5sb29wKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9kb21fZG9j
dW1lbnRfdGl0bGUoRG9tRG9jdW1lbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRh
dGEpCit7CisgICAgZ19hc3NlcnQoZml4dHVyZSk7CisgICAgV2ViS2l0V2ViVmlldyogdmlldyA9
IChXZWJLaXRXZWJWaWV3KilmaXh0dXJlLT53ZWJWaWV3OworICAgIGdfYXNzZXJ0KHZpZXcpOwor
ICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRfZG9t
X2RvY3VtZW50KHZpZXcpOworICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsKKyAgICBnY2hhciogdGl0
bGUgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF90aXRsZShkb2N1bWVudCk7CisgICAgZ19hc3Nl
cnQodGl0bGUpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0aXRsZSwgPT0sICJUaGlzIGlzIHRoZSB0
aXRsZSIpOworICAgIGdfZnJlZSh0aXRsZSk7CisgICAgd2Via2l0X2RvbV9kb2N1bWVudF9zZXRf
dGl0bGUoZG9jdW1lbnQsICJUaGlzIGlzIHRoZSBzZWNvbmQgdGl0bGUiKTsKKyAgICB0aXRsZSA9
IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3RpdGxlKGRvY3VtZW50KTsKKyAgICBnX2Fzc2VydCh0
aXRsZSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRpdGxlLCA9PSwgIlRoaXMgaXMgdGhlIHNlY29u
ZCB0aXRsZSIpOworICAgIGdfZnJlZSh0aXRsZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfZG9t
X2RvY3VtZW50X2dldF9lbGVtZW50c19ieV90YWdfbmFtZShEb21Eb2N1bWVudEZpeHR1cmUqIGZp
eHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBnX2Fzc2VydChmaXh0dXJlKTsKKyAg
ICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gKFdlYktpdFdlYlZpZXcqKWZpeHR1cmUtPndlYlZpZXc7
CisgICAgZ19hc3NlcnQodmlldyk7CisgICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50ID0g
d2Via2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQodmlldyk7CisgICAgZ19hc3NlcnQoZG9j
dW1lbnQpOworICAgIFdlYktpdERPTU5vZGVMaXN0KiBsaXN0ID0gd2Via2l0X2RvbV9kb2N1bWVu
dF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWUoZG9jdW1lbnQsICJsaSIpOworICAgIGdfYXNzZXJ0
KGxpc3QpOworICAgIGd1bG9uZyBsZW5ndGggPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVu
Z3RoKGxpc3QpOworICAgIGdfYXNzZXJ0X2NtcGludChsZW5ndGgsID09LCAzKTsKKworICAgIGd1
aW50IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgV2Vi
S2l0RE9NTm9kZSogaXRlbSA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdCwgaSk7Cisg
ICAgICAgIGdfYXNzZXJ0KGl0ZW0pOworICAgICAgICBXZWJLaXRET01FbGVtZW50KiBlbGVtZW50
ID0gKFdlYktpdERPTUVsZW1lbnQqKWl0ZW07CisgICAgICAgIGdfYXNzZXJ0KGVsZW1lbnQpOwor
ICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2RvbV9lbGVtZW50X2dldF90YWdfbmFtZShl
bGVtZW50KSwgPT0sICJMSSIpOworICAgICAgICBXZWJLaXRET01IVE1MRWxlbWVudCogaHRtbEVs
ZW1lbnQgPSAoV2ViS2l0RE9NSFRNTEVsZW1lbnQqKWVsZW1lbnQ7CisgICAgICAgIGNoYXIqIG4g
PSBnX3N0cmR1cF9wcmludGYoIiVkIiwgaSsxKTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdl
YmtpdF9kb21faHRtbF9lbGVtZW50X2dldF9pbm5lcl90ZXh0KGh0bWxFbGVtZW50KSwgPT0sIG4p
OworICAgICAgICBnX2ZyZWUobik7CisgICAgfQorCisgICAgZ19vYmplY3RfdW5yZWYobGlzdCk7
Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19ieV9jbGFz
c19uYW1lKERvbURvY3VtZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQor
eworICAgIGdfYXNzZXJ0KGZpeHR1cmUpOworICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSAoV2Vi
S2l0V2ViVmlldyopZml4dHVyZS0+d2ViVmlldzsKKyAgICBnX2Fzc2VydCh2aWV3KTsKKyAgICBX
ZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1
bWVudCh2aWV3KTsKKyAgICBnX2Fzc2VydChkb2N1bWVudCk7CisgICAgV2ViS2l0RE9NTm9kZUxp
c3QqIGxpc3QgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19ieV9jbGFzc19uYW1l
KGRvY3VtZW50LCAidGVzdCIpOworICAgIGdfYXNzZXJ0KGxpc3QpOworICAgIGd1bG9uZyBsZW5n
dGggPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QpOworICAgIGdfYXNzZXJ0
X2NtcGludChsZW5ndGgsID09LCAyKTsKKworICAgIGd1aW50IGk7CisKKyAgICBmb3IgKGkgPSAw
OyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgV2ViS2l0RE9NTm9kZSogaXRlbSA9IHdlYmtp
dF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdCwgaSk7CisgICAgICAgIGdfYXNzZXJ0KGl0ZW0pOwor
ICAgICAgICBXZWJLaXRET01FbGVtZW50KiBlbGVtZW50ID0gKFdlYktpdERPTUVsZW1lbnQqKWl0
ZW07CisgICAgICAgIGdfYXNzZXJ0KGVsZW1lbnQpOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIo
d2Via2l0X2RvbV9lbGVtZW50X2dldF90YWdfbmFtZShlbGVtZW50KSwgPT0sICJESVYiKTsKKyAg
ICB9CisKKyAgICBnX29iamVjdF91bnJlZihsaXN0KTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9k
b21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRfYnlfaWQoRG9tRG9jdW1lbnRGaXh0dXJlKiBmaXh0dXJl
LCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgZ19hc3NlcnQoZml4dHVyZSk7CisgICAgV2Vi
S2l0V2ViVmlldyogdmlldyA9IChXZWJLaXRXZWJWaWV3KilmaXh0dXJlLT53ZWJWaWV3OworICAg
IGdfYXNzZXJ0KHZpZXcpOworICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1bWVudCA9IHdlYmtp
dF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50KHZpZXcpOworICAgIGdfYXNzZXJ0KGRvY3VtZW50
KTsKKyAgICBXZWJLaXRET01FbGVtZW50KiBlbGVtZW50ID0gd2Via2l0X2RvbV9kb2N1bWVudF9n
ZXRfZWxlbWVudF9ieV9pZChkb2N1bWVudCwgInRlc3RvayIpOworICAgIGdfYXNzZXJ0KGVsZW1l
bnQpOworICAgIGVsZW1lbnQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50X2J5X2lk
KGRvY3VtZW50LCAidGhpcy1pZC1kb2VzLW5vdC1leGlzdCIpOworICAgIGdfYXNzZXJ0KGVsZW1l
bnQgPT0gMCk7CisgICAgLyogVGhlIERPTSBzcGVjIHNheXMgdGhlIHJldHVybiB2YWx1ZSBpcyB1
bmRlZmluZWQgd2hlbiB0aGVyZSdzCisgICAgICogbW9yZSB0aGFuIG9uZSBlbGVtZW50IHdpdGgg
dGhlIHNhbWUgaWQ7IGluIG91ciBjYXNlIHRoZSBmaXJzdAorICAgICAqIG9uZSB3aWxsIGJlIHJl
dHVybmVkICovCisgICAgZWxlbWVudCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRf
YnlfaWQoZG9jdW1lbnQsICJ0ZXN0YmFkIik7CisgICAgZ19hc3NlcnQoZWxlbWVudCk7CisgICAg
V2ViS2l0RE9NSFRNTEVsZW1lbnQqIGh0bWxFbGVtZW50ID0gKFdlYktpdERPTUhUTUxFbGVtZW50
KillbGVtZW50OworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9n
ZXRfaW5uZXJfdGV4dChodG1sRWxlbWVudCksID09LCAiZmlyc3QiKTsKK30KKworc3RhdGljIHZv
aWQgdGVzdF9kb21fZG9jdW1lbnRfZ2V0X2xpbmtzKERvbURvY3VtZW50Rml4dHVyZSogZml4dHVy
ZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGdfYXNzZXJ0KGZpeHR1cmUpOworICAgIFdl
YktpdFdlYlZpZXcqIHZpZXcgPSAoV2ViS2l0V2ViVmlldyopZml4dHVyZS0+d2ViVmlldzsKKyAg
ICBnX2Fzc2VydCh2aWV3KTsKKyAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKKyAgICBnX2Fzc2VydChkb2N1bWVu
dCk7CisgICAgV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24gKmNvbGxlY3Rpb24gPSB3ZWJraXRfZG9t
X2RvY3VtZW50X2dldF9saW5rcyhkb2N1bWVudCk7CisgICAgZ19hc3NlcnQoY29sbGVjdGlvbik7
CisgICAgZ3Vsb25nIGxlbmd0aCA9IHdlYmtpdF9kb21faHRtbF9jb2xsZWN0aW9uX2dldF9sZW5n
dGgoY29sbGVjdGlvbik7CisgICAgZ19hc3NlcnRfY21waW50KGxlbmd0aCwgPT0sIDMpOworCisg
ICAgZ3VpbnQgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAg
ICBzdGF0aWMgY29uc3QgY2hhciogbmFtZXNbXSA9IHsgImJsYW5rIiwgImdvb2dsZSIsICJ3ZWJr
aXQiIH07CisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiB1cmlzW10gPSB7ICJhYm91dDpibGFu
ayIsICJodHRwOi8vd3d3Lmdvb2dsZS5jb20vIiwgImh0dHA6Ly93d3cud2Via2l0Lm9yZy8iIH07
CisgICAgICAgIFdlYktpdERPTU5vZGUgKm5vZGUgPSB3ZWJraXRfZG9tX2h0bWxfY29sbGVjdGlv
bl9pdGVtKGNvbGxlY3Rpb24sIGkpOworICAgICAgICBnX2Fzc2VydChub2RlKTsKKyAgICAgICAg
V2ViS2l0RE9NRWxlbWVudCogZWxlbWVudCA9IChXZWJLaXRET01FbGVtZW50Kilub2RlOworICAg
ICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2RvbV9lbGVtZW50X2dldF90YWdfbmFtZShlbGVt
ZW50KSwgPT0sICJBIik7CisgICAgICAgIFdlYktpdERPTUhUTUxFbGVtZW50ICpodG1sRWxlbWVu
dCA9IChXZWJLaXRET01IVE1MRWxlbWVudCopZWxlbWVudDsKKyAgICAgICAgZ19hc3NlcnRfY21w
c3RyKHdlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF9pbm5lcl90ZXh0KGh0bWxFbGVtZW50KSwg
PT0sIG5hbWVzW2ldKTsKKyAgICAgICAgV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQgKmFuY2hv
ciA9IChXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCopZWxlbWVudDsKKyAgICAgICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfaHJlZihhbmNob3Ip
LCA9PSwgdXJpc1tpXSk7CisgICAgfQorICAgIGdfb2JqZWN0X3VucmVmKGNvbGxlY3Rpb24pOwor
fQorCitzdGF0aWMgdm9pZCB0ZXN0X2RvbV9kb2N1bWVudF9pbnNlcnRfcm93KERvbURvY3VtZW50
Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGdfYXNzZXJ0KGZp
eHR1cmUpOworICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSAoV2ViS2l0V2ViVmlldyopZml4dHVy
ZS0+d2ViVmlldzsKKyAgICBnX2Fzc2VydCh2aWV3KTsKKyAgICBXZWJLaXRET01Eb2N1bWVudCog
ZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKKyAgICBn
X2Fzc2VydChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKGRvY3VtZW50KSk7CisgICAgV2ViS2l0RE9N
RWxlbWVudCogdGFibGUgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50X2J5X2lkKGRv
Y3VtZW50LCAidGFibGUiKTsKKyAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVO
VCh0YWJsZSkpOworICAgIFdlYktpdERPTUhUTUxDb2xsZWN0aW9uKiByb3dzID0gd2Via2l0X2Rv
bV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X3Jvd3MoV0VCS0lUX0RPTV9IVE1MX1RBQkxFX0VMRU1F
TlQodGFibGUpKTsKKyAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfQ09MTEVDVElPTihy
b3dzKSk7CisKKyAgICAvLyBUYWJsZSBpcyBpbml0aWFsbHkgZW1wdHkuCisgICAgZ19hc3NlcnRf
Y21waW50KHdlYmtpdF9kb21faHRtbF9jb2xsZWN0aW9uX2dldF9sZW5ndGgocm93cyksID09LCAw
KTsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudCogcm93ID0gd2Via2l0X2RvbV9odG1sX3RhYmxl
X2VsZW1lbnRfaW5zZXJ0X3JvdyhXRUJLSVRfRE9NX0hUTUxfVEFCTEVfRUxFTUVOVCh0YWJsZSks
IC0xLCBOVUxMKTsKKyAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfUk9XX0VM
RU1FTlQocm93KSk7CisgICAgcm93cyA9IHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2dl
dF9yb3dzKFdFQktJVF9ET01fSFRNTF9UQUJMRV9FTEVNRU5UKHRhYmxlKSk7CisgICAgZ19hc3Nl
cnQoV0VCS0lUX0RPTV9JU19IVE1MX0NPTExFQ1RJT04ocm93cykpOworICAgIGdfYXNzZXJ0X2Nt
cGludCh3ZWJraXRfZG9tX2h0bWxfY29sbGVjdGlvbl9nZXRfbGVuZ3RoKHJvd3MpLCA9PSwgMSk7
Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfZG9tX2RvY3VtZW50X2V2YWx1YXRlKERvbURvY3VtZW50
Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGdfYXNzZXJ0KGZp
eHR1cmUpOworICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSAoV2ViS2l0V2ViVmlldyopZml4dHVy
ZS0+d2ViVmlldzsKKyAgICBnX2Fzc2VydCh2aWV3KTsKKyAgICBXZWJLaXRET01Eb2N1bWVudCog
ZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKKyAgICBn
X2Fzc2VydChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKGRvY3VtZW50KSk7CisgICAgV2ViS2l0RE9N
Tm9kZUxpc3QqIGxpc3QgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19ieV90YWdf
bmFtZShkb2N1bWVudCwgImh0bWwiKTsKKyAgICBnX2Fzc2VydChsaXN0KTsKKyAgICBndWxvbmcg
bGVuZ3RoID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChsaXN0KTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQobGVuZ3RoLCA9PSwgMSk7CisgICAgV2ViS2l0RE9NTm9kZSogaHRtbCA9IHdl
YmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdCwgMCk7CisgICAgZ19hc3NlcnQoV0VCS0lUX0RP
TV9JU19OT0RFKGh0bWwpKTsKKworICAgIFdlYktpdERPTVhQYXRoUmVzdWx0KiByZXN1bHQgPSB3
ZWJraXRfZG9tX2RvY3VtZW50X2V2YWx1YXRlKGRvY3VtZW50LCAiLy9kaXYiLCBodG1sLCBOVUxM
LCAwLCBOVUxMLCBOVUxMKTsKKyAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX1hQQVRIX1JFU1VM
VChyZXN1bHQpKTsKKworICAgIGludCBpID0gMDsKKyAgICBXZWJLaXRET01Ob2RlKiBub2RlOwor
ICAgIHdoaWxlICggKG5vZGUgPSB3ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9pdGVyYXRlX25leHQo
cmVzdWx0LCBOVUxMKSkgIT0gTlVMTCkgeworICAgICAgICBnX2Fzc2VydChub2RlKTsKKyAgICAg
ICAgV2ViS2l0RE9NRWxlbWVudCogZWxlbWVudCA9IChXZWJLaXRET01FbGVtZW50Kilub2RlOwor
ICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2RvbV9lbGVtZW50X2dldF90YWdfbmFtZShl
bGVtZW50KSwgPT0sICJESVYiKTsKKyAgICAgICAgaSsrOworICAgIH0KKyAgICBnX2Fzc2VydF9j
bXBpbnQoaSwgPT0sIDIpOworCisgICAgZ19vYmplY3RfdW5yZWYobGlzdCk7Cit9CisKK3N0YXRp
YyB2b2lkIHdlYWtfbm90aWZ5KGdwb2ludGVyIGRhdGEsIEdPYmplY3QqIHpvbWJpZSkKK3sKKyAg
ICBndWludCogY291bnQgPSAoZ3VpbnQqKWRhdGE7CisgICAgKCpjb3VudCkrKzsKK30KKworc3Rh
dGljIHZvaWQgdGVzdF9kb21fZG9jdW1lbnRfZ2FyYmFnZV9jb2xsZWN0aW9uKERvbURvY3VtZW50
Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGd1aW50IGNvdW50
ID0gMDsKKyAgICBnX2Fzc2VydChmaXh0dXJlKTsKKyAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0g
KFdlYktpdFdlYlZpZXcqKWZpeHR1cmUtPndlYlZpZXc7CisgICAgZ19hc3NlcnQodmlldyk7Cisg
ICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9kb21f
ZG9jdW1lbnQodmlldyk7CisgICAgZ19hc3NlcnQoZG9jdW1lbnQpOworICAgIGdfb2JqZWN0X3dl
YWtfcmVmKEdfT0JKRUNUKGRvY3VtZW50KSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291
bnQpOworICAgIFdlYktpdERPTUhUTUxIZWFkRWxlbWVudCogaGVhZCA9IHdlYmtpdF9kb21fZG9j
dW1lbnRfZ2V0X2hlYWQoZG9jdW1lbnQpOworICAgIGdfYXNzZXJ0KGhlYWQpOworICAgIGdfb2Jq
ZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGhlYWQpLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZj
b3VudCk7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQqIGJvZHkgPSB3ZWJraXRfZG9tX2RvY3Vt
ZW50X2dldF9ib2R5KGRvY3VtZW50KTsKKyAgICBnX2Fzc2VydChib2R5KTsKKyAgICBnX29iamVj
dF93ZWFrX3JlZihHX09CSkVDVChib2R5KSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291
bnQpOworICAgIFdlYktpdERPTUhUTUxDb2xsZWN0aW9uICpjb2xsZWN0aW9uID0gd2Via2l0X2Rv
bV9kb2N1bWVudF9nZXRfbGlua3MoZG9jdW1lbnQpOworICAgIGdfYXNzZXJ0KGNvbGxlY3Rpb24p
OworICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGNvbGxlY3Rpb24pLCAoR1dlYWtOb3Rp
Znkpd2Vha19ub3RpZnksICZjb3VudCk7CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJp
bmcoV0VCS0lUX1dFQl9WSUVXKHZpZXcpLCBIVE1MX0RPQ1VNRU5UX0xJTktTLCBOVUxMLCBOVUxM
LCBOVUxMKTsKKworICAgIHdoaWxlIChnX21haW5fY29udGV4dF9wZW5kaW5nKE5VTEwpKQorICAg
ICAgICBnX21haW5fY29udGV4dF9pdGVyYXRpb24oTlVMTCwgRkFMU0UpOworCisgICAgZ19hc3Nl
cnRfY21wdWludChjb3VudCwgPT0sIDMpOworCisgICAgZ19vYmplY3RfdW5yZWYoY29sbGVjdGlv
bik7CisgICAgZ19hc3NlcnRfY21wdWludChjb3VudCwgPT0sIDQpOworCisgICAgY291bnQgPSAw
OworCisgICAgZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3
KTsKKyAgICBnX2Fzc2VydChkb2N1bWVudCk7CisgICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpF
Q1QoZG9jdW1lbnQpLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7CisgICAgaGVh
ZCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2hlYWQoZG9jdW1lbnQpOworICAgIGdfYXNzZXJ0
KGhlYWQpOworICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGhlYWQpLCAoR1dlYWtOb3Rp
Znkpd2Vha19ub3RpZnksICZjb3VudCk7CisgICAgYm9keSA9IHdlYmtpdF9kb21fZG9jdW1lbnRf
Z2V0X2JvZHkoZG9jdW1lbnQpOworICAgIGdfYXNzZXJ0KGJvZHkpOworICAgIGdfb2JqZWN0X3dl
YWtfcmVmKEdfT0JKRUNUKGJvZHkpLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7
CisgICAgY29sbGVjdGlvbiA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2xpbmtzKGRvY3VtZW50
KTsKKyAgICBnX2Fzc2VydChjb2xsZWN0aW9uKTsKKyAgICBnX29iamVjdF93ZWFrX3JlZihHX09C
SkVDVChjb2xsZWN0aW9uKSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOworICAg
IC8qIEFzayB0d2ljZSBmb3IgdGhlIHNhbWUgb2JqZWN0ICovCisgICAgV2ViS2l0RE9NSFRNTENv
bGxlY3Rpb24qIGNvbGxlY3Rpb24yID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfbGlua3MoZG9j
dW1lbnQpOworICAgIGdfYXNzZXJ0KGNvbGxlY3Rpb24yKTsKKyAgICBnX29iamVjdF93ZWFrX3Jl
ZihHX09CSkVDVChjb2xsZWN0aW9uMiksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50
KTsKKworICAgIGdfb2JqZWN0X3VucmVmKGRvY3VtZW50KTsKKyAgICBnX29iamVjdF91bnJlZiho
ZWFkKTsKKyAgICBnX29iamVjdF91bnJlZihib2R5KTsKKyAgICBnX29iamVjdF91bnJlZihjb2xs
ZWN0aW9uKTsKKyAgICBnX29iamVjdF91bnJlZihjb2xsZWN0aW9uMik7CisKKyAgICBnX2Fzc2Vy
dF9jbXB1aW50KGNvdW50LCA9PSwgNSk7CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJp
bmcoV0VCS0lUX1dFQl9WSUVXKHZpZXcpLCBIVE1MX0RPQ1VNRU5UX0lGUkFNRSwgTlVMTCwgTlVM
TCwgTlVMTCk7CisKKyAgICB3aGlsZSAoZ19tYWluX2NvbnRleHRfcGVuZGluZyhOVUxMKSkKKyAg
ICAgICAgZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uKE5VTEwsIEZBTFNFKTsKKworICAgIGNvdW50
ID0gMDsKKworICAgIGRvY3VtZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQo
dmlldyk7CisgICAgV2ViS2l0RE9NRWxlbWVudCogZGl2ID0gd2Via2l0X2RvbV9kb2N1bWVudF9n
ZXRfZWxlbWVudF9ieV9pZChkb2N1bWVudCwgInRlc3QiKTsKKyAgICBnX2Fzc2VydChkaXYpOwor
ICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGRpdiksIChHV2Vha05vdGlmeSl3ZWFrX25v
dGlmeSwgJmNvdW50KTsKKyAgICBXZWJLaXRET01FbGVtZW50KiBpZnJhbWUgPSB3ZWJraXRfZG9t
X2RvY3VtZW50X2dldF9lbGVtZW50X2J5X2lkKGRvY3VtZW50LCAiaWZyYW1lIik7CisgICAgZ19h
c3NlcnQoaWZyYW1lKTsKKworICAgIHdlYmtpdF9kb21fZWxlbWVudF9zZXRfYXR0cmlidXRlKGlm
cmFtZSwgInNyYyIsICJkYXRhOjxodG1sPjxoZWFkPjwvaGVhZD48L2h0bWw+IiwgTlVMTCk7CisK
KyAgICB3aGlsZSAoZ19tYWluX2NvbnRleHRfcGVuZGluZyhOVUxMKSkKKyAgICAgICAgZ19tYWlu
X2NvbnRleHRfaXRlcmF0aW9uKE5VTEwsIEZBTFNFKTsKKworICAgIFdlYktpdERPTURvY3VtZW50
KiBpZnJhbWVEb2N1bWVudCA9IHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfY29u
dGVudF9kb2N1bWVudChXRUJLSVRfRE9NX0hUTUxfSUZSQU1FX0VMRU1FTlQoaWZyYW1lKSk7Cisg
ICAgZ19hc3NlcnQoaWZyYW1lRG9jdW1lbnQpOworICAgIGhlYWQgPSB3ZWJraXRfZG9tX2RvY3Vt
ZW50X2dldF9oZWFkKGlmcmFtZURvY3VtZW50KTsKKyAgICBnX2Fzc2VydChoZWFkKTsKKyAgICBn
X29iamVjdF93ZWFrX3JlZihHX09CSkVDVChoZWFkKSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5
LCAmY291bnQpOworCisgICAgd2Via2l0X2RvbV9lbGVtZW50X3NldF9hdHRyaWJ1dGUoaWZyYW1l
LCAic3JjIiwgImFib3V0OmJsYW5rIiwgTlVMTCk7CisKKyAgICB3aGlsZSAoZ19tYWluX2NvbnRl
eHRfcGVuZGluZyhOVUxMKSkKKyAgICAgICAgZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uKE5VTEws
IEZBTFNFKTsKKworICAgIGdfYXNzZXJ0X2NtcHVpbnQoY291bnQsID09LCAxKTsKKworICAgIHdl
YmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcodmlldyksIEhUTUxfRE9D
VU1FTlRfTElOS1MsIE5VTEwsIE5VTEwsIE5VTEwpOworCisgICAgd2hpbGUgKGdfbWFpbl9jb250
ZXh0X3BlbmRpbmcoTlVMTCkpCisgICAgICAgIGdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbihOVUxM
LCBGQUxTRSk7CisKKyAgICBnX2Fzc2VydF9jbXB1aW50KGNvdW50LCA9PSwgMik7CisKKyAgICBj
b3VudCA9IDA7CisKKyAgICBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3Vt
ZW50KHZpZXcpOworICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsKKyAgICBnX29iamVjdF93ZWFrX3Jl
ZihHX09CSkVDVChkb2N1bWVudCksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsK
KyAgICAvKiBBc2sgdHdpY2UgZm9yIHRoZSBEb2N1bWVudCAqLworICAgIFdlYktpdERPTURvY3Vt
ZW50KiBkb2N1bWVudDIgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsK
KyAgICBnX2Fzc2VydChkb2N1bWVudDIpOworICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNU
KGRvY3VtZW50MiksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKKyAgICBoZWFk
ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfaGVhZChkb2N1bWVudCk7CisgICAgZ19hc3NlcnQo
aGVhZCk7CisgICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1QoaGVhZCksIChHV2Vha05vdGlm
eSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKKyAgICBib2R5ID0gd2Via2l0X2RvbV9kb2N1bWVudF9n
ZXRfYm9keShkb2N1bWVudCk7CisgICAgZ19hc3NlcnQoYm9keSk7CisgICAgZ19vYmplY3Rfd2Vh
a19yZWYoR19PQkpFQ1QoYm9keSksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsK
KyAgICBjb2xsZWN0aW9uID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfbGlua3MoZG9jdW1lbnQp
OworICAgIGdfYXNzZXJ0KGNvbGxlY3Rpb24pOworICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JK
RUNUKGNvbGxlY3Rpb24pLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7CisKKyAg
ICBndGtfd2lkZ2V0X2Rlc3Ryb3koZml4dHVyZS0+d2ViVmlldyk7CisgICAgZml4dHVyZS0+d2Vi
VmlldyA9IE5VTEw7CisKKyAgICBnX2Fzc2VydF9jbXB1aW50KGNvdW50LCA9PSwgNCk7CisKKyAg
ICBnX29iamVjdF91bnJlZihjb2xsZWN0aW9uKTsKKworICAgIGdfYXNzZXJ0X2NtcHVpbnQoY291
bnQsID09LCA1KTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAg
IGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKKworICAgIGdfdGVzdF9idWdfYmFz
ZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0
L2RvbWRvY3VtZW50L3Rlc3RfdGl0bGUiLAorICAgICAgICAgICAgICAgRG9tRG9jdW1lbnRGaXh0
dXJlLCBIVE1MX0RPQ1VNRU5UX1RJVExFLAorICAgICAgICAgICAgICAgZG9tX2RvY3VtZW50X2Zp
eHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0X2RvbV9kb2N1bWVudF90aXRsZSwKKyAg
ICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKTsKKworICAgIGdfdGVz
dF9hZGQoIi93ZWJraXQvZG9tZG9jdW1lbnQvdGVzdF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWUi
LAorICAgICAgICAgICAgICAgRG9tRG9jdW1lbnRGaXh0dXJlLCBIVE1MX0RPQ1VNRU5UX0VMRU1F
TlRTLAorICAgICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfc2V0dXAsCisgICAgICAg
ICAgICAgICB0ZXN0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWUsCisgICAg
ICAgICAgICAgICBkb21fZG9jdW1lbnRfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICBnX3Rlc3Rf
YWRkKCIvd2Via2l0L2RvbWRvY3VtZW50L3Rlc3RfZ2V0X2VsZW1lbnRzX2J5X2NsYXNzX25hbWUi
LAorICAgICAgICAgICAgICAgRG9tRG9jdW1lbnRGaXh0dXJlLCBIVE1MX0RPQ1VNRU5UX0VMRU1F
TlRTX0NMQVNTLAorICAgICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfc2V0dXAsCisg
ICAgICAgICAgICAgICB0ZXN0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfY2xhc3NfbmFt
ZSwKKyAgICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKTsKKworICAg
IGdfdGVzdF9hZGQoIi93ZWJraXQvZG9tZG9jdW1lbnQvdGVzdF9nZXRfZWxlbWVudF9ieV9pZCIs
CisgICAgICAgICAgICAgICBEb21Eb2N1bWVudEZpeHR1cmUsIEhUTUxfRE9DVU1FTlRfRUxFTUVO
VFNfSUQsCisgICAgICAgICAgICAgICBkb21fZG9jdW1lbnRfZml4dHVyZV9zZXR1cCwKKyAgICAg
ICAgICAgICAgIHRlc3RfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50X2J5X2lkLAorICAgICAgICAg
ICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfdGVhcmRvd24pOworCisgICAgZ190ZXN0X2FkZCgi
L3dlYmtpdC9kb21kb2N1bWVudC90ZXN0X2dldF9saW5rcyIsCisgICAgICAgICAgICAgICBEb21E
b2N1bWVudEZpeHR1cmUsIEhUTUxfRE9DVU1FTlRfTElOS1MsCisgICAgICAgICAgICAgICBkb21f
ZG9jdW1lbnRfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3RfZG9tX2RvY3VtZW50
X2dldF9saW5rcywKKyAgICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3du
KTsKKworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvZG9tZG9jdW1lbnQvdGVzdF90YWJsZV9pbnNl
cnRfcm93IiwKKyAgICAgICAgICAgICAgIERvbURvY3VtZW50Rml4dHVyZSwgSFRNTF9ET0NVTUVO
VF9UQUJMRSwKKyAgICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3NldHVwLAorICAg
ICAgICAgICAgICAgdGVzdF9kb21fZG9jdW1lbnRfaW5zZXJ0X3JvdywKKyAgICAgICAgICAgICAg
IGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKTsKKworICAgIGdfdGVzdF9hZGQoIi93ZWJr
aXQvZG9tZG9jdW1lbnQvdGVzdF9kb2N1bWVudF9ldmFsdWF0ZSIsCisgICAgICAgICAgICAgICBE
b21Eb2N1bWVudEZpeHR1cmUsIEhUTUxfRE9DVU1FTlRfRVZBTFVBVEUsCisgICAgICAgICAgICAg
ICBkb21fZG9jdW1lbnRfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3RfZG9tX2Rv
Y3VtZW50X2V2YWx1YXRlLAorICAgICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfdGVh
cmRvd24pOworCisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9kb21kb2N1bWVudC90ZXN0X2dhcmJh
Z2VfY29sbGVjdGlvbiIsCisgICAgICAgICAgICAgICBEb21Eb2N1bWVudEZpeHR1cmUsIEhUTUxf
RE9DVU1FTlRfTElOS1MsCisgICAgICAgICAgICAgICBkb21fZG9jdW1lbnRfZml4dHVyZV9zZXR1
cCwKKyAgICAgICAgICAgICAgIHRlc3RfZG9tX2RvY3VtZW50X2dhcmJhZ2VfY29sbGVjdGlvbiwK
KyAgICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKTsKKworICAgIHJl
dHVybiBnX3Rlc3RfcnVuKCk7Cit9CisKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0R3RrL3Rlc3Rkb21kb213aW5kb3cuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0R3RrL3Rlc3Rkb21kb213aW5kb3cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4xNGZjZDE4Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGRvbWRvbXdpbmRvdy5jCkBAIC0wLDAgKzEsMjU4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJ0ZXN0X3V0aWxzLmgiCisKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVk
ZSA8Z2xpYi9nc3RkaW8uaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d2Via2l0
L3dlYmtpdC5oPgorCisjZGVmaW5lIEhUTUxfRE9DVU1FTlQgIjxodG1sPjxoZWFkPjx0aXRsZT48
L3RpdGxlPjwvaGVhZD48c3R5bGUgdHlwZT0ndGV4dC9jc3MnPiN0ZXN0IHsgZm9udC1zaXplOiAx
NnB4OyB9PC9zdHlsZT48Ym9keT48cCBpZD0ndGVzdCc+dGVzdDwvcD48L2JvZHk+PC9odG1sPiIK
KwordHlwZWRlZiBzdHJ1Y3QgeworICAgIEd0a1dpZGdldCogd2ViVmlldzsKKyAgICBHdGtXaWRn
ZXQqIHdpbmRvdzsKKyAgICBXZWJLaXRET01ET01XaW5kb3cqIGRvbVdpbmRvdzsKKyAgICBHTWFp
bkxvb3AqIGxvb3A7CisKKyAgICBnYm9vbGVhbiBsb2FkZWQ7CisgICAgZ2Jvb2xlYW4gY2xpY2tl
ZDsKKyAgICBnY29uc3Rwb2ludGVyIGRhdGE7Cit9IERvbURvbXZpZXdGaXh0dXJlOworCitzdGF0
aWMgZ2Jvb2xlYW4gZmluaXNoX2xvYWRpbmcoRG9tRG9tdmlld0ZpeHR1cmUqIGZpeHR1cmUpCit7
CisgICAgaWYgKGdfbWFpbl9sb29wX2lzX3J1bm5pbmcoZml4dHVyZS0+bG9vcCkpCisgICAgICAg
IGdfbWFpbl9sb29wX3F1aXQoZml4dHVyZS0+bG9vcCk7CisKKyAgICByZXR1cm4gRkFMU0U7Cit9
CisKK3N0YXRpYyB2b2lkIGRvbV9kb212aWV3X2ZpeHR1cmVfc2V0dXAoRG9tRG9tdmlld0ZpeHR1
cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBmaXh0dXJlLT5sb29wID0g
Z19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworICAgIGZpeHR1cmUtPndpbmRvdyA9IGd0a193
aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOworICAgIGZpeHR1cmUtPndlYlZpZXcgPSB3
ZWJraXRfd2ViX3ZpZXdfbmV3KCk7CisgICAgZml4dHVyZS0+ZGF0YSA9IGRhdGE7CisKKyAgICBn
dGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGZpeHR1cmUtPndpbmRvdyksIEdUS19XSURH
RVQoZml4dHVyZS0+d2ViVmlldykpOworfQorCitzdGF0aWMgdm9pZCBkb21fZG9tdmlld19maXh0
dXJlX3RlYXJkb3duKERvbURvbXZpZXdGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRh
dGEpCit7CisgICAgZ3RrX3dpZGdldF9kZXN0cm95KGZpeHR1cmUtPndpbmRvdyk7CisgICAgZ19t
YWluX2xvb3BfdW5yZWYoZml4dHVyZS0+bG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIGRvbV9kb21f
d2luZG93X2ZpeHR1cmVfc2V0dXAoRG9tRG9tdmlld0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBv
aW50ZXIgZGF0YSkKK3sKKyAgICBmaXh0dXJlLT5sb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEws
IFRSVUUpOworICAgIGZpeHR1cmUtPndlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7Cisg
ICAgZ19vYmplY3RfcmVmX3NpbmsoZml4dHVyZS0+d2ViVmlldyk7CisKKyAgICBpZiAoZGF0YSAh
PSBOVUxMKQorICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoV0VCS0lUX1dFQl9W
SUVXIChmaXh0dXJlLT53ZWJWaWV3KSwgKGNvbnN0IGNoYXIqKSBkYXRhLCBOVUxMLCBOVUxMLCBO
VUxMKTsKKworICAgIGdfaWRsZV9hZGQoKEdTb3VyY2VGdW5jKWZpbmlzaF9sb2FkaW5nLCBmaXh0
dXJlKTsKKyAgICBnX21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7Cit9CisKK3N0YXRpYyB2
b2lkIGRvbV9kb21fd2luZG93X2ZpeHR1cmVfdGVhcmRvd24oRG9tRG9tdmlld0ZpeHR1cmUqIGZp
eHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBpZiAoZml4dHVyZS0+d2ViVmlldykK
KyAgICAgICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+d2ViVmlldyk7CisgICAgZ19tYWluX2xv
b3BfdW5yZWYoZml4dHVyZS0+bG9vcCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBsb2FkZWRDYWxs
YmFjayhXZWJLaXRET01ET01XaW5kb3cqIHZpZXcsIFdlYktpdERPTUV2ZW50KiBldmVudCwgRG9t
RG9tdmlld0ZpeHR1cmUqIGZpeHR1cmUpCit7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+bG9hZGVk
ID09IEZBTFNFKTsKKyAgICBmaXh0dXJlLT5sb2FkZWQgPSBUUlVFOworCisgICAgcmV0dXJuIEZB
TFNFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gY2xpY2tlZENhbGxiYWNrKFdlYktpdERPTURPTVdp
bmRvdyogdmlldywgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBEb21Eb212aWV3Rml4dHVyZSogZml4
dHVyZSkKK3sKKyAgICBXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0OworICAgIGd1c2hvcnQg
cGhhc2U7CisKKyAgICBnX2Fzc2VydChldmVudCk7CisgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9J
U19FVkVOVChldmVudCkpOworCisgICAgLy8gV2Ugc2hvdWxkIGNhdGNoIHRoaXMgaW4gdGhlIGJ1
YmJsaW5nIHVwIHBoYXNlLCBzaW5jZSB3ZSBhcmUgY29ubmVjdGluZyB0byB0aGUgdG9wbGV2ZWwg
b2JqZWN0CisgICAgcGhhc2UgPSB3ZWJraXRfZG9tX2V2ZW50X2dldF9ldmVudF9waGFzZShldmVu
dCk7CisgICAgZ19hc3NlcnRfY21waW50KHBoYXNlLCA9PSwgMyk7CisKKyAgICB0YXJnZXQgPSB3
ZWJraXRfZG9tX2V2ZW50X2dldF9jdXJyZW50X3RhcmdldChldmVudCk7CisgICAgZ19hc3NlcnQo
dGFyZ2V0ID09IFdFQktJVF9ET01fRVZFTlRfVEFSR0VUKHZpZXcpKTsKKworICAgIGdfYXNzZXJ0
KGZpeHR1cmUtPmNsaWNrZWQgPT0gRkFMU0UpOworICAgIGZpeHR1cmUtPmNsaWNrZWQgPSBUUlVF
OworCisgICAgZmluaXNoX2xvYWRpbmcoZml4dHVyZSk7CisKKyAgICByZXR1cm4gRkFMU0U7Cit9
CisKK2dib29sZWFuIG1hcF9ldmVudF9jYihHdGtXaWRnZXQgKndpZGdldCwgR2RrRXZlbnQqIGV2
ZW50LCBEb21Eb212aWV3Rml4dHVyZSogZml4dHVyZSkKK3sKKyAgICB3ZWJraXRfd2ViX3ZpZXdf
bG9hZF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVXIChmaXh0dXJlLT53ZWJWaWV3KSwgKGNvbnN0IGNo
YXIqKWZpeHR1cmUtPmRhdGEsIE5VTEwsIE5VTEwsIE5VTEwpOworCisgICAgcmV0dXJuIEZBTFNF
OworfQorCitzdGF0aWMgdm9pZCBsb2FkX2V2ZW50X2NhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcsIEdQYXJhbVNwZWMqIHNwZWMsIERvbURvbXZpZXdGaXh0dXJlKiBmaXh0dXJlKQorewor
ICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0
YXR1cyh3ZWJWaWV3KTsKKyAgICBpZiAoc3RhdHVzID09IFdFQktJVF9MT0FEX0ZJTklTSEVEKSB7
CisgICAgICAgIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2FkZF9ldmVudF9saXN0ZW5lcihXRUJL
SVRfRE9NX0VWRU5UX1RBUkdFVChmaXh0dXJlLT5kb21XaW5kb3cpLCAiY2xpY2siLCBHX0NBTExC
QUNLKGNsaWNrZWRDYWxsYmFjayksIGZhbHNlLCBmaXh0dXJlKTsKKworICAgICAgICBnX2Fzc2Vy
dChmaXh0dXJlLT5jbGlja2VkID09IEZBTFNFKTsKKyAgICAgICAgZ3RrX3Rlc3Rfd2lkZ2V0X2Ns
aWNrKEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldyksIDEsIDApOworICAgIH0KKworfQorCitz
dGF0aWMgdm9pZCB0ZXN0X2RvbV9kb212aWV3X3NpZ25hbHMoRG9tRG9tdmlld0ZpeHR1cmUqIGZp
eHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBnX2Fzc2VydChmaXh0dXJlKTsKKyAg
ICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gKFdlYktpdFdlYlZpZXcqKWZpeHR1cmUtPndlYlZpZXc7
CisgICAgZ19hc3NlcnQodmlldyk7CisgICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50ID0g
d2Via2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQodmlldyk7CisgICAgZ19hc3NlcnQoZG9j
dW1lbnQpOworICAgIFdlYktpdERPTURPTVdpbmRvdyogZG9tV2luZG93ID0gd2Via2l0X2RvbV9k
b2N1bWVudF9nZXRfZGVmYXVsdF92aWV3KGRvY3VtZW50KTsKKyAgICBnX2Fzc2VydChkb21XaW5k
b3cpOworCisgICAgZml4dHVyZS0+ZG9tV2luZG93ID0gZG9tV2luZG93OworCisgICAgd2Via2l0
X2RvbV9ldmVudF90YXJnZXRfYWRkX2V2ZW50X2xpc3RlbmVyKFdFQktJVF9ET01fRVZFTlRfVEFS
R0VUKGZpeHR1cmUtPmRvbVdpbmRvdyksICJsb2FkIiwgR19DQUxMQkFDSyhsb2FkZWRDYWxsYmFj
ayksIGZhbHNlLCBmaXh0dXJlKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndpbmRv
dywgIm1hcC1ldmVudCIsIEdfQ0FMTEJBQ0sobWFwX2V2ZW50X2NiKSwgZml4dHVyZSk7CisgICAg
Z19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIs
IEdfQ0FMTEJBQ0sobG9hZF9ldmVudF9jYWxsYmFjayksIGZpeHR1cmUpOworCisgICAgZ3RrX3dp
ZGdldF9zaG93X2FsbChmaXh0dXJlLT53aW5kb3cpOworICAgIGd0a193aW5kb3dfcHJlc2VudChH
VEtfV0lORE9XKGZpeHR1cmUtPndpbmRvdykpOworCisgICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1
cmUtPmxvb3ApOworCisgICAgZ19hc3NlcnQoZml4dHVyZS0+bG9hZGVkKTsKKyAgICBnX2Fzc2Vy
dChmaXh0dXJlLT5jbGlja2VkKTsKK30KKworc3RhdGljIGdib29sZWFuCitjbGlja2VkX2NiKFdl
YktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgRG9tRG9t
dmlld0ZpeHR1cmUqIGZpeHR1cmUpCit7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+Y2xpY2tlZCA9
PSBGQUxTRSk7CisgICAgZml4dHVyZS0+Y2xpY2tlZCA9IFRSVUU7CisgICAgZmluaXNoX2xvYWRp
bmcoZml4dHVyZSk7CisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZCBsb2FkX3N0
YXR1c19jYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHUGFyYW1TcGVjKiBzcGVjLCBE
b21Eb212aWV3Rml4dHVyZSogZml4dHVyZSkKK3sKKyAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1
cyA9IHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMod2ViVmlldyk7CisgICAgaWYgKHN0
YXR1cyA9PSBXRUJLSVRfTE9BRF9GSU5JU0hFRCkgeworICAgICAgICBXZWJLaXRET01Eb2N1bWVu
dCogZG9jdW1lbnQ7CisgICAgICAgIFdlYktpdERPTURPTVdpbmRvdyogZG9tV2luZG93OworICAg
ICAgICBXZWJLaXRET01FbGVtZW50KiBlbGVtZW50OworICAgICAgICBXZWJLaXRET01FdmVudCog
ZXZlbnQ7CisgICAgICAgIGdsb25nIGNsaWVudFgsIGNsaWVudFk7CisKKyAgICAgICAgZG9jdW1l
bnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudChXRUJLSVRfV0VCX1ZJRVcoZml4
dHVyZS0+d2ViVmlldykpOworICAgICAgICBnX2Fzc2VydChkb2N1bWVudCk7CisgICAgICAgIGRv
bVdpbmRvdyA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2RlZmF1bHRfdmlldyhkb2N1bWVudCk7
CisgICAgICAgIGdfYXNzZXJ0KGRvbVdpbmRvdyk7CisgICAgICAgIGZpeHR1cmUtPmRvbVdpbmRv
dyA9IGRvbVdpbmRvdzsKKworICAgICAgICBlbGVtZW50ID0gd2Via2l0X2RvbV9kb2N1bWVudF9n
ZXRfZWxlbWVudF9ieV9pZChkb2N1bWVudCwgInRlc3QiKTsKKyAgICAgICAgZ19hc3NlcnQoZWxl
bWVudCk7CisgICAgICAgIGV2ZW50ID0gd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZXZlbnQo
ZG9jdW1lbnQsICJNb3VzZUV2ZW50IiwgTlVMTCk7CisgICAgICAgIGdfYXNzZXJ0KGV2ZW50KTsK
KyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19FVkVOVChldmVudCkpOworICAgICAgICBn
X2Fzc2VydChXRUJLSVRfRE9NX0lTX01PVVNFX0VWRU5UKGV2ZW50KSk7CisgICAgICAgIGNsaWVu
dFggPSB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2NsaWVudF9sZWZ0KGVsZW1lbnQpOworICAgICAg
ICBjbGllbnRZID0gd2Via2l0X2RvbV9lbGVtZW50X2dldF9jbGllbnRfdG9wKGVsZW1lbnQpOwor
ICAgICAgICB3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2luaXRfbW91c2VfZXZlbnQoV0VCS0lUX0RP
TV9NT1VTRV9FVkVOVChldmVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiY2xpY2siLCBUUlVFLCBUUlVFLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4dHVyZS0+ZG9tV2luZG93LCAwLCAwLCAwLCBj
bGllbnRYLCBjbGllbnRZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRkFMU0UsIEZBTFNFLCBGQUxTRSwgRkFMU0UsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBXRUJLSVRfRE9NX0VWRU5UX1RBUkdFVChl
bGVtZW50KSk7CisgICAgICAgIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2FkZF9ldmVudF9saXN0
ZW5lcihXRUJLSVRfRE9NX0VWRU5UX1RBUkdFVChlbGVtZW50KSwgImNsaWNrIiwgR19DQUxMQkFD
SyhjbGlja2VkX2NiKSwgZmFsc2UsIGZpeHR1cmUpOworICAgICAgICBnX2Fzc2VydChmaXh0dXJl
LT5jbGlja2VkID09IEZBTFNFKTsKKyAgICAgICAgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfZGlz
cGF0Y2hfZXZlbnQoV0VCS0lUX0RPTV9FVkVOVF9UQVJHRVQoZWxlbWVudCksIGV2ZW50LCBOVUxM
KTsKKyAgICB9CisKK30KKworc3RhdGljIHZvaWQgdGVzdF9kb21fZG9tdmlld19kaXNwYXRjaF9l
dmVudChEb21Eb212aWV3Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQorewor
ICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2luZG93LCAibWFwLWV2ZW50IiwgR19DQUxM
QkFDSyhtYXBfZXZlbnRfY2IpLCBmaXh0dXJlKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1
cmUtPndlYlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhsb2FkX3N0YXR1
c19jYWxsYmFjayksIGZpeHR1cmUpOworCisgICAgZ3RrX3dpZGdldF9zaG93X2FsbChmaXh0dXJl
LT53aW5kb3cpOworICAgIGd0a193aW5kb3dfcHJlc2VudChHVEtfV0lORE9XKGZpeHR1cmUtPndp
bmRvdykpOworCisgICAgZ19tYWluX2xvb3BfcnVuIChmaXh0dXJlLT5sb29wKTsKKyAgICBnX2Fz
c2VydChmaXh0dXJlLT5jbGlja2VkKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9kb21fZG9tX3dp
bmRvd19nZXRfY29tcHV0ZWRfc3R5bGUoRG9tRG9tdmlld0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25z
dHBvaW50ZXIgZGF0YSkKK3sKKyAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudChXRUJLSVRfV0VCX1ZJRVcoZml4dHVyZS0+d2Vi
VmlldykpOworICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsKKyAgICBXZWJLaXRET01ET01XaW5kb3cq
IGRvbVdpbmRvdyA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2RlZmF1bHRfdmlldyhkb2N1bWVu
dCk7CisgICAgZ19hc3NlcnQoZG9tV2luZG93KTsKKworICAgIFdlYktpdERPTUVsZW1lbnQqICBl
bGVtZW50ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudF9ieV9pZChkb2N1bWVudCwg
InRlc3QiKTsKKyAgICBnX2Fzc2VydChlbGVtZW50KTsKKyAgICBnX2Fzc2VydChXRUJLSVRfRE9N
X0lTX0VMRU1FTlQoZWxlbWVudCkpOworICAgIFdlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24q
IGNzc1N0eWxlID0gd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9jb21wdXRlZF9zdHlsZShkb21X
aW5kb3csIGVsZW1lbnQsIE5VTEwpOworICAgIGdjaGFyKiBmb250U2l6ZSA9IHdlYmtpdF9kb21f
Y3NzX3N0eWxlX2RlY2xhcmF0aW9uX2dldF9wcm9wZXJ0eV92YWx1ZShjc3NTdHlsZSwgImZvbnQt
c2l6ZSIpOworICAgIGdfYXNzZXJ0X2NtcHN0cihmb250U2l6ZSwgPT0sICIxNnB4Iik7Cit9CisK
K2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBndGtfdGVzdF9pbml0KCZh
cmdjLCAmYXJndiwgTlVMTCk7CisKKyAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53
ZWJraXQub3JnLyIpOworCisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9kb21kb212aWV3L3NpZ25h
bHMiLAorICAgICAgICAgICAgICAgRG9tRG9tdmlld0ZpeHR1cmUsIEhUTUxfRE9DVU1FTlQsCisg
ICAgICAgICAgICAgICBkb21fZG9tdmlld19maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAg
dGVzdF9kb21fZG9tdmlld19zaWduYWxzLAorICAgICAgICAgICAgICAgZG9tX2RvbXZpZXdfZml4
dHVyZV90ZWFyZG93bik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2RvbWRvbXZpZXcvZGlz
cGF0Y2hfZXZlbnQiLAorICAgICAgICAgICAgICAgRG9tRG9tdmlld0ZpeHR1cmUsIEhUTUxfRE9D
VU1FTlQsCisgICAgICAgICAgICAgICBkb21fZG9tdmlld19maXh0dXJlX3NldHVwLAorICAgICAg
ICAgICAgICAgdGVzdF9kb21fZG9tdmlld19kaXNwYXRjaF9ldmVudCwKKyAgICAgICAgICAgICAg
IGRvbV9kb212aWV3X2ZpeHR1cmVfdGVhcmRvd24pOworCisgICAgZ190ZXN0X2FkZCgiL3dlYmtp
dC9kb21kb213aW5kb3cvZ2V0X2NvbXB1dGVkX3N0eWxlIiwKKyAgICAgICAgICAgICAgIERvbURv
bXZpZXdGaXh0dXJlLCBIVE1MX0RPQ1VNRU5ULAorICAgICAgICAgICAgICAgZG9tX2RvbV93aW5k
b3dfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3RfZG9tX2RvbV93aW5kb3dfZ2V0
X2NvbXB1dGVkX3N0eWxlLAorICAgICAgICAgICAgICAgZG9tX2RvbV93aW5kb3dfZml4dHVyZV90
ZWFyZG93bik7CisKKyAgICByZXR1cm4gZ190ZXN0X3J1bigpOworfQorCmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0ZG9tbm9kZS5jIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGRvbW5vZGUuYwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDRiY2JkCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGRvbW5vZGUuYwpAQCAtMCwwICsxLDIx
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAidGVzdF91dGlscy5oIgorCisjaW5jbHVkZSA8Z2xpYi5oPgorI2lu
Y2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdl
YmtpdC93ZWJraXQuaD4KKworI2RlZmluZSBIVE1MX0RPQ1VNRU5UX0hJRVJBUkNIWV9OQVZJR0FU
SU9OICI8aHRtbD48aGVhZD48dGl0bGU+VGhpcyBpcyB0aGUgdGl0bGU8L3RpdGxlPjwvaGVhZD48
Ym9keT48cD4xPC9wPjxwPjI8L3A+PHA+MzwvcD48L2JvZHk+PC9odG1sPiIKKyNkZWZpbmUgSFRN
TF9ET0NVTUVOVF9OT0RFX0lOU0VSVElPTiAiPGh0bWw+PGJvZHk+PC9ib2R5PjwvaHRtbD4iCisK
K3R5cGVkZWYgc3RydWN0IHsKKyAgICBHdGtXaWRnZXQqIHdlYlZpZXc7CisgICAgR01haW5Mb29w
KiBsb29wOworfSBEb21Ob2RlRml4dHVyZTsKKworc3RhdGljIGdib29sZWFuIGZpbmlzaF9sb2Fk
aW5nKERvbU5vZGVGaXh0dXJlKiBmaXh0dXJlKQoreworICAgIGlmIChnX21haW5fbG9vcF9pc19y
dW5uaW5nKGZpeHR1cmUtPmxvb3ApKQorICAgICAgICBnX21haW5fbG9vcF9xdWl0KGZpeHR1cmUt
Pmxvb3ApOworCisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZCBkb21fbm9kZV9m
aXh0dXJlX3NldHVwKERvbU5vZGVGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEp
Cit7CisgICAgZml4dHVyZS0+bG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKKyAg
ICBmaXh0dXJlLT53ZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygpOworICAgIGdfb2JqZWN0
X3JlZl9zaW5rKGZpeHR1cmUtPndlYlZpZXcpOworCisgICAgaWYgKGRhdGEgIT0gTlVMTCkKKyAg
ICAgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklFVyhmaXh0dXJl
LT53ZWJWaWV3KSwgKGNvbnN0IGNoYXIqKWRhdGEsIE5VTEwsIE5VTEwsIE5VTEwpOworCisgICAg
Z19pZGxlX2FkZCgoR1NvdXJjZUZ1bmMpZmluaXNoX2xvYWRpbmcsIGZpeHR1cmUpOworICAgIGdf
bWFpbl9sb29wX3J1bihmaXh0dXJlLT5sb29wKTsKK30KKworc3RhdGljIHZvaWQgZG9tX25vZGVf
Zml4dHVyZV90ZWFyZG93bihEb21Ob2RlRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBk
YXRhKQoreworICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPndlYlZpZXcpOworICAgIGdfbWFp
bl9sb29wX3VucmVmKGZpeHR1cmUtPmxvb3ApOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2RvbV9u
b2RlX2hpZXJhcmNoeV9uYXZpZ2F0aW9uKERvbU5vZGVGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rw
b2ludGVyIGRhdGEpCit7CisgICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50OworICAgIFdl
YktpdERPTUhUTUxIZWFkRWxlbWVudCogaGVhZDsKKyAgICBXZWJLaXRET01IVE1MQm9keUVsZW1l
bnQqIGJvZHk7CisgICAgV2ViS2l0RE9NTm9kZUxpc3QqIGxpc3Q7CisgICAgV2ViS2l0RE9NTm9k
ZSogcHRyOworICAgIGd1bG9uZyBpLCBsZW5ndGg7CisKKyAgICBkb2N1bWVudCA9IHdlYmtpdF93
ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50KFdFQktJVF9XRUJfVklFVyhmaXh0dXJlLT53ZWJWaWV3
KSk7CisgICAgZ19hc3NlcnQoZG9jdW1lbnQpOworICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNf
RE9DVU1FTlQoZG9jdW1lbnQpKTsKKyAgICBoZWFkID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRf
aGVhZChkb2N1bWVudCk7CisgICAgZ19hc3NlcnQoaGVhZCk7CisgICAgZ19hc3NlcnQoV0VCS0lU
X0RPTV9JU19IVE1MX0hFQURfRUxFTUVOVChoZWFkKSk7CisKKyAgICAvKiBUaXRsZSwgaGVhZCdz
IGNoaWxkICovCisgICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2hhc19jaGlsZF9ub2RlcyhX
RUJLSVRfRE9NX05PREUoaGVhZCkpKTsKKyAgICBsaXN0ID0gd2Via2l0X2RvbV9ub2RlX2dldF9j
aGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoaGVhZCkpOworICAgIGdfYXNzZXJ0X2NtcGludCh3
ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QpLCA9PSwgMSk7CisgICAgcHRyID0g
d2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0LCAwKTsKKyAgICBnX2Fzc2VydChwdHIpOwor
ICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9USVRMRV9FTEVNRU5UKHB0cikpOworICAg
IGdfb2JqZWN0X3VucmVmKGxpc3QpOworCisgICAgLyogQm9keSwgSGVhZCBzaWJsaW5nICovCisg
ICAgcHRyID0gd2Via2l0X2RvbV9ub2RlX2dldF9uZXh0X3NpYmxpbmcoV0VCS0lUX0RPTV9OT0RF
KGhlYWQpKTsKKyAgICBnX2Fzc2VydChwdHIpOworICAgIGJvZHkgPSBXRUJLSVRfRE9NX0hUTUxf
Qk9EWV9FTEVNRU5UKHB0cik7CisgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0JPRFlf
RUxFTUVOVChib2R5KSk7CisKKyAgICAvKiBUaGVyZSBpcyBubyB0aGlyZCBzaWJsaW5nICovCisg
ICAgcHRyID0gd2Via2l0X2RvbV9ub2RlX2dldF9uZXh0X3NpYmxpbmcocHRyKTsKKyAgICBnX2Fz
c2VydChwdHIgPT0gTlVMTCk7CisKKyAgICAvKiBCb2R5J3MgcHJldmlvdXMgc2libGluZyBpcyBI
ZWFkICovCisgICAgcHRyID0gd2Via2l0X2RvbV9ub2RlX2dldF9wcmV2aW91c19zaWJsaW5nKFdF
QktJVF9ET01fTk9ERShib2R5KSk7CisgICAgZ19hc3NlcnQocHRyKTsKKyAgICBnX2Fzc2VydChX
RUJLSVRfRE9NX0lTX0hUTUxfSEVBRF9FTEVNRU5UKHB0cikpOworCisgICAgLyogQm9keSBoYXMg
MyBjaGlsZHJlbiAqLworICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9oYXNfY2hpbGRfbm9k
ZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKSk7CisgICAgbGlzdCA9IHdlYmtpdF9kb21fbm9kZV9n
ZXRfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKTsKKyAgICBsZW5ndGggPSB3ZWJr
aXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QpOworICAgIGdfYXNzZXJ0X2NtcGludChs
ZW5ndGgsID09LCAzKTsKKworICAgIC8qIFRoZSB0aHJlZSBvZiB0aGVtIGFyZSBQIHRhZ3MgKi8K
KyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgcHRyID0gd2Via2l0
X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0LCBpKTsKKyAgICAgICAgZ19hc3NlcnQocHRyKTsKKyAg
ICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX1BBUkFHUkFQSF9FTEVNRU5UKHB0cikp
OworICAgIH0KKworICAgIC8qIEdvIGJhY2t3YXJkcyAqLworICAgIGZvciAoaSA9IDA7IHB0cjsg
cHRyID0gd2Via2l0X2RvbV9ub2RlX2dldF9wcmV2aW91c19zaWJsaW5nKHB0ciksIGkrKykKKyAg
ICAgICAgLyogTm90aGluZyAqLzsKKworICAgIGdfYXNzZXJ0X2NtcGludChpLCA9PSwgMyk7Cisg
ICAgZ19vYmplY3RfdW5yZWYobGlzdCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfZG9tX25vZGVf
aW5zZXJ0aW9uKERvbU5vZGVGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7
CisgICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50OworICAgIFdlYktpdERPTUhUTUxFbGVt
ZW50KiBib2R5OworICAgIFdlYktpdERPTUVsZW1lbnQqIHAsICpkaXY7CisgICAgV2ViS2l0RE9N
Tm9kZUxpc3QqIGxpc3Q7CisgICAgV2ViS2l0RE9NTm9kZSogbm9kZTsKKworICAgIGRvY3VtZW50
ID0gd2Via2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQoV0VCS0lUX1dFQl9WSUVXKGZpeHR1
cmUtPndlYlZpZXcpKTsKKyAgICBnX2Fzc2VydChkb2N1bWVudCk7CisgICAgYm9keSA9IHdlYmtp
dF9kb21fZG9jdW1lbnRfZ2V0X2JvZHkoZG9jdW1lbnQpOworICAgIGdfYXNzZXJ0KGJvZHkpOwor
ICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKGJvZHkpKTsKKworICAgIC8q
IEJvZHkgc2hvdWxkbid0IGhhdmUgYW55IGNoaWxkcmVuIGF0IHRoaXMgcG9pbnQgKi8KKyAgICBn
X2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaGFzX2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShi
b2R5KSkgPT0gRkFMU0UpOworCisgICAgLyogSW5zZXJ0IG9uZSBQIGVsZW1lbnQgKi8KKyAgICBw
ID0gd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZWxlbWVudChkb2N1bWVudCwgIlAiLCBOVUxM
KTsKKyAgICB3ZWJraXRfZG9tX25vZGVfYXBwZW5kX2NoaWxkKFdFQktJVF9ET01fTk9ERShib2R5
KSwgV0VCS0lUX0RPTV9OT0RFKHApLCBOVUxMKTsKKworICAgIC8qIE5vdyBpdCBzaG91bGQgaGF2
ZSBvbmUsIHRoZSBzYW1lIHRoYXQgd2UgaW5zZXJ0ZWQgKi8KKyAgICBnX2Fzc2VydCh3ZWJraXRf
ZG9tX25vZGVfaGFzX2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSkpOworICAgIGxp
c3QgPSB3ZWJraXRfZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5
KSk7CisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9kb21fbm9kZV9saXN0X2dldF9sZW5ndGgo
bGlzdCksID09LCAxKTsKKyAgICBub2RlID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0
LCAwKTsKKyAgICBnX2Fzc2VydChub2RlKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVf
aXNfc2FtZV9ub2RlKFdFQktJVF9ET01fTk9ERShwKSwgbm9kZSkpOworICAgIGdfb2JqZWN0X3Vu
cmVmKGxpc3QpOworCisgICAgLyogUmVwbGFjZSB0aGUgUCB0YWcgd2l0aCBhIERJViB0YWcgKi8K
KyAgICBkaXYgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9lbGVtZW50KGRvY3VtZW50LCAi
RElWIiwgTlVMTCk7CisgICAgd2Via2l0X2RvbV9ub2RlX3JlcGxhY2VfY2hpbGQoV0VCS0lUX0RP
TV9OT0RFKGJvZHkpLCBXRUJLSVRfRE9NX05PREUoZGl2KSwgV0VCS0lUX0RPTV9OT0RFKHApLCBO
VUxMKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaGFzX2NoaWxkX25vZGVzKFdFQktJ
VF9ET01fTk9ERShib2R5KSkpOworICAgIGxpc3QgPSB3ZWJraXRfZG9tX25vZGVfZ2V0X2NoaWxk
X25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSk7CisgICAgZ19hc3NlcnRfY21waW50KHdlYmtp
dF9kb21fbm9kZV9saXN0X2dldF9sZW5ndGgobGlzdCksID09LCAxKTsKKyAgICBub2RlID0gd2Vi
a2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0LCAwKTsKKyAgICBnX2Fzc2VydChub2RlKTsKKyAg
ICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaXNfc2FtZV9ub2RlKFdFQktJVF9ET01fTk9ERShk
aXYpLCBub2RlKSk7CisgICAgZ19vYmplY3RfdW5yZWYobGlzdCk7CisKKyAgICAvKiBOb3cgcmVt
b3ZlIHRoZSB0YWcgKi8KKyAgICB3ZWJraXRfZG9tX25vZGVfcmVtb3ZlX2NoaWxkKFdFQktJVF9E
T01fTk9ERShib2R5KSwgbm9kZSwgTlVMTCk7CisgICAgbGlzdCA9IHdlYmtpdF9kb21fbm9kZV9n
ZXRfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQod2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChsaXN0KSwgPT0sIDApOworICAgIGdf
b2JqZWN0X3VucmVmKGxpc3QpOworCisgICAgLyogVGVzdCBpbnNlcnRfYmVmb3JlICovCisKKyAg
ICAvKiBJZiByZWZDaGlsZCBpcyBudWxsLCBpbnNlcnQgbmV3Q2hpbGQgYXMgbGFzdCBlbGVtZW50
IG9mIHBhcmVudCAqLworICAgIGRpdiA9IHdlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2VsZW1l
bnQoZG9jdW1lbnQsICJESVYiLCBOVUxMKTsKKyAgICB3ZWJraXRfZG9tX25vZGVfaW5zZXJ0X2Jl
Zm9yZShXRUJLSVRfRE9NX05PREUoYm9keSksIFdFQktJVF9ET01fTk9ERShkaXYpLCBOVUxMLCBO
VUxMKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaGFzX2NoaWxkX25vZGVzKFdFQktJ
VF9ET01fTk9ERShib2R5KSkpOworICAgIGxpc3QgPSB3ZWJraXRfZG9tX25vZGVfZ2V0X2NoaWxk
X25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSk7CisgICAgZ19hc3NlcnRfY21waW50KHdlYmtp
dF9kb21fbm9kZV9saXN0X2dldF9sZW5ndGgobGlzdCksID09LCAxKTsKKyAgICBub2RlID0gd2Vi
a2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0LCAwKTsKKyAgICBnX2Fzc2VydChub2RlKTsKKyAg
ICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaXNfc2FtZV9ub2RlKFdFQktJVF9ET01fTk9ERShk
aXYpLCBub2RlKSk7CisgICAgZ19vYmplY3RfdW5yZWYobGlzdCk7CisKKyAgICAvKiBOb3cgaW5z
ZXJ0IGEgJ3AnIGJlZm9yZSAnZGl2JyAqLworICAgIHAgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2Ny
ZWF0ZV9lbGVtZW50KGRvY3VtZW50LCAiUCIsIE5VTEwpOworICAgIHdlYmtpdF9kb21fbm9kZV9p
bnNlcnRfYmVmb3JlKFdFQktJVF9ET01fTk9ERShib2R5KSwgV0VCS0lUX0RPTV9OT0RFKHApLCBX
RUJLSVRfRE9NX05PREUoZGl2KSwgTlVMTCk7CisgICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2Rl
X2hhc19jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpKTsKKyAgICBsaXN0ID0gd2Vi
a2l0X2RvbV9ub2RlX2dldF9jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpOworICAg
IGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QpLCA9
PSwgMik7CisgICAgbm9kZSA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdCwgMCk7Cisg
ICAgZ19hc3NlcnQobm9kZSk7CisgICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2lzX3NhbWVf
bm9kZShXRUJLSVRfRE9NX05PREUocCksIG5vZGUpKTsKKyAgICBub2RlID0gd2Via2l0X2RvbV9u
b2RlX2xpc3RfaXRlbShsaXN0LCAxKTsKKyAgICBnX2Fzc2VydChub2RlKTsKKyAgICBnX2Fzc2Vy
dCh3ZWJraXRfZG9tX25vZGVfaXNfc2FtZV9ub2RlKFdFQktJVF9ET01fTk9ERShkaXYpLCBub2Rl
KSk7CisgICAgZ19vYmplY3RfdW5yZWYobGlzdCk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBj
aGFyKiogYXJndikKK3sKKyAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7CisK
KyAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOworCisgICAg
Z190ZXN0X2FkZCgiL3dlYmtpdC9kb21ub2RlL3Rlc3RfaGllcmFyY2h5X25hdmlnYXRpb24iLAor
ICAgICAgICAgICAgICAgRG9tTm9kZUZpeHR1cmUsIEhUTUxfRE9DVU1FTlRfSElFUkFSQ0hZX05B
VklHQVRJT04sCisgICAgICAgICAgICAgICBkb21fbm9kZV9maXh0dXJlX3NldHVwLAorICAgICAg
ICAgICAgICAgdGVzdF9kb21fbm9kZV9oaWVyYXJjaHlfbmF2aWdhdGlvbiwKKyAgICAgICAgICAg
ICAgIGRvbV9ub2RlX2ZpeHR1cmVfdGVhcmRvd24pOworCisgICAgZ190ZXN0X2FkZCgiL3dlYmtp
dC9kb21ub2RlL3Rlc3RfaW5zZXJ0aW9uIiwKKyAgICAgICAgICAgICAgIERvbU5vZGVGaXh0dXJl
LCBIVE1MX0RPQ1VNRU5UX05PREVfSU5TRVJUSU9OLAorICAgICAgICAgICAgICAgZG9tX25vZGVf
Zml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3RfZG9tX25vZGVfaW5zZXJ0aW9uLAor
ICAgICAgICAgICAgICAgZG9tX25vZGVfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICByZXR1cm4g
Z190ZXN0X3J1bigpOworfQorCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdEd0ay90ZXN0ZG93bmxvYWQuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0R3RrL3Rlc3Rkb3dubG9hZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmY4ZThkZWQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdEd0ay90ZXN0ZG93bmxvYWQuYwpAQCAtMCwwICsxLDMyMiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkB0d290b2FzdHMuZGU+CisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4K
KyNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKwor
R01haW5Mb29wKiBsb29wOworY2hhciogdGVtcG9yYXJ5RmlsZW5hbWUgPSBOVUxMOworV2ViS2l0
RG93bmxvYWQqIHRoZURvd25sb2FkID0gTlVMTDsKKworc3RhdGljIHZvaWQKK3Rlc3Rfd2Via2l0
X2Rvd25sb2FkX2NyZWF0ZSh2b2lkKQoreworICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1
ZXN0OworICAgIFdlYktpdERvd25sb2FkKiBkb3dubG9hZDsKKyAgICBjb25zdCBnY2hhciogdXJp
ID0gImh0dHA6Ly9leGFtcGxlLmNvbSI7CisgICAgZ2NoYXIqIHRtcERpcjsKKworICAgIHJlcXVl
c3QgPSB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X25ldyh1cmkpOworICAgIGRvd25sb2FkID0gd2Vi
a2l0X2Rvd25sb2FkX25ldyhyZXF1ZXN0KTsKKyAgICBnX29iamVjdF91bnJlZihyZXF1ZXN0KTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2Rvd25sb2FkX2dldF91cmkoZG93bmxvYWQpLCA9
PSwgdXJpKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfZG93bmxvYWRfZ2V0X25ldHdvcmtfcmVxdWVz
dChkb3dubG9hZCkgPT0gcmVxdWVzdCk7CisgICAgZ19hc3NlcnQoZ19zdHJyc3RyKHVyaSwgd2Vi
a2l0X2Rvd25sb2FkX2dldF9zdWdnZXN0ZWRfZmlsZW5hbWUoZG93bmxvYWQpKSk7CisgICAgZ19h
c3NlcnQod2Via2l0X2Rvd25sb2FkX2dldF9zdGF0dXMoZG93bmxvYWQpID09IFdFQktJVF9ET1dO
TE9BRF9TVEFUVVNfQ1JFQVRFRCk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9kb3dubG9hZF9nZXRf
dG90YWxfc2l6ZShkb3dubG9hZCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG93bmxvYWRfZ2V0
X2N1cnJlbnRfc2l6ZShkb3dubG9hZCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG93bmxvYWRf
Z2V0X3Byb2dyZXNzKGRvd25sb2FkKSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9kb3dubG9hZF9n
ZXRfZWxhcHNlZF90aW1lKGRvd25sb2FkKSk7CisgICAgdG1wRGlyID0gZ19maWxlbmFtZV90b191
cmkoZ19nZXRfdG1wX2RpcigpLCBOVUxMLCBOVUxMKTsKKyAgICB3ZWJraXRfZG93bmxvYWRfc2V0
X2Rlc3RpbmF0aW9uX3VyaShkb3dubG9hZCwgdG1wRGlyKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIo
dG1wRGlyLCA9PSwgd2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbl91cmkoZG93bmxvYWQp
KTs7CisgICAgZ19mcmVlKHRtcERpcik7CisgICAgZ19vYmplY3RfdW5yZWYoZG93bmxvYWQpOwor
fQorCitzdGF0aWMgZ2Jvb2xlYW4KK25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX3JlcXVlc3Rl
ZF9jYihXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXZWJLaXRXZWJGcmFtZSogd2ViX2ZyYW1lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFdlYk5hdmlnYXRp
b25BY3Rpb24qIGFjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXZWJLaXRXZWJQb2xpY3lEZWNpc2lvbiogZGVjaXNpb24sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICB3ZWJraXRfd2ViX3Bv
bGljeV9kZWNpc2lvbl9kb3dubG9hZChkZWNpc2lvbik7CisgICAgcmV0dXJuIFRSVUU7Cit9CisK
K3N0YXRpYyB2b2lkCitub3RpZnlfc3RhdHVzX2NiKEdPYmplY3QqIG9iamVjdCwgR1BhcmFtU3Bl
YyogcHNwZWMsIGdwb2ludGVyIGRhdGEpCit7CisgICAgV2ViS2l0RG93bmxvYWQqIGRvd25sb2Fk
ID0gV0VCS0lUX0RPV05MT0FEKG9iamVjdCk7CisgICAgc3dpdGNoICh3ZWJraXRfZG93bmxvYWRf
Z2V0X3N0YXR1cyhkb3dubG9hZCkpIHsKKyAgICBjYXNlIFdFQktJVF9ET1dOTE9BRF9TVEFUVVNf
RklOSVNIRUQ6CisgICAgY2FzZSBXRUJLSVRfRE9XTkxPQURfU1RBVFVTX0VSUk9SOgorICAgICAg
ICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdFQktJ
VF9ET1dOTE9BRF9TVEFUVVNfQ0FOQ0VMTEVEOgorICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hl
ZCgpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9
Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorc2V0X2ZpbGVuYW1lKGdjaGFyKiBmaWxlbmFtZSkKK3sK
KyAgICBnY2hhciAqdXJpID0gZ19maWxlbmFtZV90b191cmkoZmlsZW5hbWUsIE5VTEwsIE5VTEwp
OworCisgICAgd2Via2l0X2Rvd25sb2FkX3NldF9kZXN0aW5hdGlvbl91cmkodGhlRG93bmxvYWQs
IHVyaSk7CisgICAgZ19mcmVlKHVyaSk7CisKKyAgICB3ZWJraXRfZG93bmxvYWRfc3RhcnQodGhl
RG93bmxvYWQpOworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQKK2hhbmRsZV9k
b3dubG9hZF9yZXF1ZXN0ZWRfY2IoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiogYmVlblRoZXJlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnYm9vbGVhbiBhc3luY2gpCit7CisgICAgdGhlRG93bmxvYWQgPSBkb3du
bG9hZDsKKyAgICAqYmVlblRoZXJlID0gVFJVRTsKKworICAgIGlmICh0ZW1wb3JhcnlGaWxlbmFt
ZSkgeworICAgICAgICBpZiAoYXN5bmNoKSB7CisgICAgICAgICAgICBnX2lkbGVfYWRkKChHU291
cmNlRnVuYylzZXRfZmlsZW5hbWUsIHRlbXBvcmFyeUZpbGVuYW1lKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGdjaGFyICp1cmkgPSBnX2ZpbGVuYW1lX3RvX3VyaSh0ZW1wb3JhcnlG
aWxlbmFtZSwgTlVMTCwgTlVMTCk7CisgICAgICAgICAgICBpZiAodXJpKQorICAgICAgICAgICAg
ICAgIHdlYmtpdF9kb3dubG9hZF9zZXRfZGVzdGluYXRpb25fdXJpKGRvd25sb2FkLCB1cmkpOwor
ICAgICAgICAgICAgZ19mcmVlKHVyaSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBnX3NpZ25h
bF9jb25uZWN0KGRvd25sb2FkLCAibm90aWZ5OjpzdGF0dXMiLAorICAgICAgICAgICAgICAgICAg
ICAgR19DQUxMQkFDSyhub3RpZnlfc3RhdHVzX2NiKSwgTlVMTCk7Cit9CisKK3N0YXRpYyBnYm9v
bGVhbgorZG93bmxvYWRfcmVxdWVzdGVkX2NiKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LAorICAg
ICAgICAgICAgICAgICAgICAgIFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwKKyAgICAgICAgICAg
ICAgICAgICAgICBnYm9vbGVhbiogYmVlblRoZXJlKQoreworICAgIGhhbmRsZV9kb3dubG9hZF9y
ZXF1ZXN0ZWRfY2IoZG93bmxvYWQsIGJlZW5UaGVyZSwgRkFMU0UpOworICAgIHJldHVybiBUUlVF
OworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2Rvd25sb2FkX3JlcXVlc3RlZF9hc3luY2hfY2IoV2Vi
S2l0V2ViVmlldyogd2ViX3ZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktp
dERvd25sb2FkKiBkb3dubG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xl
YW4qIGJlZW5UaGVyZSkKK3sKKyAgICBoYW5kbGVfZG93bmxvYWRfcmVxdWVzdGVkX2NiKGRvd25s
b2FkLCBiZWVuVGhlcmUsIFRSVUUpOworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9p
ZAordGVzdF93ZWJraXRfZG93bmxvYWRfcGVyZm9ybShnYm9vbGVhbiBhc3luY2gpCit7CisgICAg
V2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdf
bmV3KCkpOworICAgIEdDYWxsYmFjayBkb3dubG9hZFJlcXVlc3RDYWxsYmFjayA9IE5VTEw7CisK
KyAgICBnX29iamVjdF9yZWZfc2luayhHX09CSkVDVCh3ZWJWaWV3KSk7CisKKyAgICBnX3NpZ25h
bF9jb25uZWN0KHdlYlZpZXcsICJuYXZpZ2F0aW9uLXBvbGljeS1kZWNpc2lvbi1yZXF1ZXN0ZWQi
LAorICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhuYXZpZ2F0aW9uX3BvbGljeV9kZWNp
c2lvbl9yZXF1ZXN0ZWRfY2IpLAorICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICBp
ZiAoYXN5bmNoKQorICAgICAgICBkb3dubG9hZFJlcXVlc3RDYWxsYmFjayA9IEdfQ0FMTEJBQ0so
ZG93bmxvYWRfcmVxdWVzdGVkX2FzeW5jaF9jYik7CisgICAgZWxzZQorICAgICAgICBkb3dubG9h
ZFJlcXVlc3RDYWxsYmFjayA9IEdfQ0FMTEJBQ0soZG93bmxvYWRfcmVxdWVzdGVkX2NiKTsKKwor
ICAgIGdib29sZWFuIGJlZW5UaGVyZSA9IEZBTFNFOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2Vi
VmlldywgImRvd25sb2FkLXJlcXVlc3RlZCIsCisgICAgICAgICAgICAgICAgICAgICBkb3dubG9h
ZFJlcXVlc3RDYWxsYmFjaywgJmJlZW5UaGVyZSk7CisKKyAgICAvKiBQcmVwYXJhdGlvbjsgRklY
TUU6IHdlIHNob3VsZCBtb3ZlIHRoaXMgY29kZSB0byBhIHRlc3QKKyAgICAgKiB1dGlsaXRpZXMg
ZmlsZSwgYmVjYXVzZSB3ZSBoYXZlIGEgdmVyeSBzaW1pbGFyIG9uZSBpbgorICAgICAqIHRlc3R3
ZWJmcmFtZS5jICovCisgICAgR0Vycm9yICplcnJvciA9IE5VTEw7CisgICAgZ2NoYXIqIGZpbGVu
YW1lOworICAgIGludCBmZCA9IGdfZmlsZV9vcGVuX3RtcCgid2Via2l0LXRlc3R3ZWJkb3dubG9h
ZC1YWFhYWFgiLCAmZmlsZW5hbWUsICZlcnJvcik7CisgICAgY2xvc2UoZmQpOworCisgICAgaWYg
KGVycm9yKQorICAgICAgICBnX2NyaXRpY2FsKCJGYWlsZWQgdG8gb3BlbiBhIHRlbXBvcmFyeSBm
aWxlIGZvciB3cml0aW5nOiAlcy4iLCBlcnJvci0+bWVzc2FnZSk7CisKKyAgICBpZiAoZ191bmxp
bmsoZmlsZW5hbWUpID09IC0xKQorICAgICAgICBnX2NyaXRpY2FsKCJGYWlsZWQgdG8gZGVsZXRl
IHRoZSB0ZW1wb3JhcnkgZmlsZTogJXMuIiwgZ19zdHJlcnJvcihlcnJubykpOworCisgICAgdGhl
RG93bmxvYWQgPSBOVUxMOworICAgIHRlbXBvcmFyeUZpbGVuYW1lID0gZmlsZW5hbWU7CisKKyAg
ICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworICAgIHdlYmtpdF93ZWJfdmll
d19sb2FkX3VyaSh3ZWJWaWV3LCAiaHR0cDovL2dub21lLm9yZy8iKTsKKyAgICBnX21haW5fbG9v
cF9ydW4obG9vcCk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQoYmVlblRoZXJlLCA9PSwgVFJVRSk7
CisKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19maWxlX3Rlc3QodGVtcG9yYXJ5RmlsZW5hbWUsIEdf
RklMRV9URVNUX0lTX1JFR1VMQVIpLCA9PSwgVFJVRSk7CisKKyAgICBnX3VubGluayh0ZW1wb3Jh
cnlGaWxlbmFtZSk7CisgICAgZ19mcmVlKHRlbXBvcmFyeUZpbGVuYW1lKTsKKyAgICB0ZW1wb3Jh
cnlGaWxlbmFtZSA9IE5VTEw7CisKKyAgICBnX21haW5fbG9vcF91bnJlZihsb29wKTsKKyAgICBn
X29iamVjdF91bnJlZih3ZWJWaWV3KTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3Rfd2Via2l0X2Rv
d25sb2FkX3N5bmNoKHZvaWQpCit7CisgICAgdGVzdF93ZWJraXRfZG93bmxvYWRfcGVyZm9ybShG
QUxTRSk7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3dlYmtpdF9kb3dubG9hZF9hc3luY2godm9p
ZCkKK3sKKyAgICB0ZXN0X3dlYmtpdF9kb3dubG9hZF9wZXJmb3JtKFRSVUUpOworfQorCitzdGF0
aWMgZ2Jvb2xlYW4gbWltZV90eXBlX3BvbGljeV9kZWNpc2lvbl9yZXF1ZXN0ZWRfY2IoV2ViS2l0
V2ViVmlldyogdmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0
KiByZXF1ZXN0LCBjb25zdCBjaGFyKiBtaW1lX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0V2ViUG9saWN5RGVjaXNpb24q
IGRlY2lzaW9uLCBncG9pbnRlciBkYXRhKQoreworICAgIHdlYmtpdF93ZWJfcG9saWN5X2RlY2lz
aW9uX2Rvd25sb2FkKGRlY2lzaW9uKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZv
aWQgaWRsZV9xdWl0X2xvb3BfY2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIEdQYXJhbVNwZWMq
IHBzcGVjLCBncG9pbnRlciBkYXRhKQoreworICAgIGlmICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xv
YWRfc3RhdHVzKHdlYl92aWV3KSA9PSBXRUJLSVRfTE9BRF9GSU5JU0hFRCB8fAorICAgICAgICB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYl92aWV3KSA9PSBXRUJLSVRfTE9BRF9G
QUlMRUQpCisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Cit9CisKK3N0YXRpYyB2b2lk
Cit0ZXN0X3dlYmtpdF9kb3dubG9hZF9kYXRhKHZvaWQpCit7CisgICAgZ2Jvb2xlYW4gYmVlblRo
ZXJlID0gRkFMU0U7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklF
Vyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcp
OworCisgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAiZG93bmxvYWQtcmVxdWVzdGVkIiwK
KyAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0soZG93bmxvYWRfcmVxdWVzdGVkX2NiKSwK
KyAgICAgICAgICAgICAgICAgICAgICZiZWVuVGhlcmUpOworCisgICAgZ19zaWduYWxfY29ubmVj
dCh3ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsCisgICAgICAgICAgICAgICAgICAgICBH
X0NBTExCQUNLKGlkbGVfcXVpdF9sb29wX2NiKSwKKyAgICAgICAgICAgICAgICAgICAgIE5VTEwp
OworCisgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAibWltZS10eXBlLXBvbGljeS1kZWNp
c2lvbi1yZXF1ZXN0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhtaW1lX3R5
cGVfcG9saWN5X2RlY2lzaW9uX3JlcXVlc3RlZF9jYiksCisgICAgICAgICAgICAgICAgICAgICBO
VUxMKTsKKworICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisKKyAgICAv
KiBXZSdyZSB0ZXN0aW5nIGZvciBhIGNyYXNoLCBzbyBqdXN0IG5vdCBjcmFzaGluZyBpcyBhIHBh
c3MgKi8KKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkod2ViVmlldywgImRhdGE6YXBwbGlj
YXRpb24vb2N0ZWN0LXN0cmVhbSwiKTsKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoYmVlblRoZXJlLCA9PSwgVFJVRSk7CisKKyAgICBnX21haW5fbG9v
cF91bnJlZihsb29wKTsKKyAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKK30KKworc3RhdGlj
IHZvaWQgbm90aWZ5RG93bmxvYWRTdGF0dXNDYWxsYmFjayhHT2JqZWN0ICpvYmplY3QsIEdQYXJh
bVNwZWMgKnBzcGVjLCBncG9pbnRlciBkYXRhKQoreworICAgIFdlYktpdERvd25sb2FkICpkb3du
bG9hZCA9IFdFQktJVF9ET1dOTE9BRChvYmplY3QpOworICAgIFdlYktpdE5ldHdvcmtSZXNwb25z
ZSAqcmVzcG9uc2UgPSB3ZWJraXRfZG93bmxvYWRfZ2V0X25ldHdvcmtfcmVzcG9uc2UoZG93bmxv
YWQpOworICAgIFNvdXBNZXNzYWdlICptZXNzYWdlID0gd2Via2l0X25ldHdvcmtfcmVzcG9uc2Vf
Z2V0X21lc3NhZ2UocmVzcG9uc2UpOworCisgICAgc3dpdGNoICh3ZWJraXRfZG93bmxvYWRfZ2V0
X3N0YXR1cyhkb3dubG9hZCkpIHsKKyAgICBjYXNlIFdFQktJVF9ET1dOTE9BRF9TVEFUVVNfRVJS
T1I6CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChtZXNzYWdlLT5zdGF0dXNfY29kZSwgPT0sIDQw
NCk7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgV0VCS0lUX0RPV05MT0FEX1NUQVRVU19GSU5JU0hFRDoKKyAgICBjYXNlIFdFQktJVF9E
T1dOTE9BRF9TVEFUVVNfQ0FOQ0VMTEVEOgorICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgp
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cit9
CisKK3N0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIgKnNlcnZlciwgU291cE1l
c3NhZ2UgKm1lc3NhZ2UsIGNvbnN0IGNoYXIgKnBhdGgsIEdIYXNoVGFibGUgKnF1ZXJ5LCBTb3Vw
Q2xpZW50Q29udGV4dCAqY29udGV4dCwgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgaWYgKG1l
c3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKKyAgICAgICAgc291cF9tZXNzYWdl
X3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2Us
IFNPVVBfU1RBVFVTX05PVF9GT1VORCk7CisgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUo
bWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2Rv
d25sb2FkX25vdF9mb3VuZCh2b2lkKQoreworICAgIFNvdXBTZXJ2ZXIgKnNlcnZlciA9IHNvdXBf
c2VydmVyX25ldyhTT1VQX1NFUlZFUl9QT1JULCAwLCBOVUxMKTsKKyAgICBzb3VwX3NlcnZlcl9y
dW5fYXN5bmMoc2VydmVyKTsKKyAgICBzb3VwX3NlcnZlcl9hZGRfaGFuZGxlcihzZXJ2ZXIsIE5V
TEwsIHNlcnZlckNhbGxiYWNrLCBOVUxMLCBOVUxMKTsKKyAgICBTb3VwVVJJICpiYXNlVVJJID0g
c291cF91cmlfbmV3KCJodHRwOi8vMTI3LjAuMC4xLyIpOworICAgIHNvdXBfdXJpX3NldF9wb3J0
KGJhc2VVUkksIHNvdXBfc2VydmVyX2dldF9wb3J0KHNlcnZlcikpOworCisgICAgU291cFVSSSAq
dXJpID0gc291cF91cmlfbmV3X3dpdGhfYmFzZShiYXNlVVJJLCAiL2ZvbyIpOworICAgIGNoYXIg
KnVyaVN0cmluZyA9IHNvdXBfdXJpX3RvX3N0cmluZyh1cmksIEZBTFNFKTsKKyAgICBzb3VwX3Vy
aV9mcmVlKHVyaSk7CisKKyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwor
ICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0ICpyZXF1ZXN0ID0gd2Via2l0X25ldHdvcmtfcmVxdWVz
dF9uZXcodXJpU3RyaW5nKTsKKyAgICBnX2ZyZWUgKHVyaVN0cmluZyk7CisgICAgV2ViS2l0RG93
bmxvYWQgKmRvd25sb2FkID0gd2Via2l0X2Rvd25sb2FkX25ldyhyZXF1ZXN0KTsKKyAgICBnX29i
amVjdF91bnJlZihyZXF1ZXN0KTsKKworICAgIHdlYmtpdF9kb3dubG9hZF9zZXRfZGVzdGluYXRp
b25fdXJpKGRvd25sb2FkLCAiZmlsZTovLy90bXAvZm9vIik7CisgICAgZ19zaWduYWxfY29ubmVj
dChkb3dubG9hZCwgIm5vdGlmeTo6c3RhdHVzIiwgR19DQUxMQkFDSyhub3RpZnlEb3dubG9hZFN0
YXR1c0NhbGxiYWNrKSwgTlVMTCk7CisKKyAgICB3ZWJraXRfZG93bmxvYWRfc3RhcnQoZG93bmxv
YWQpOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIGdfb2JqZWN0X3VucmVmKGRv
d25sb2FkKTsKKyAgICBnX21haW5fbG9vcF91bnJlZihsb29wKTsKKyAgICBzb3VwX3VyaV9mcmVl
KGJhc2VVUkkpOworICAgIGdfb2JqZWN0X3VucmVmKHNlcnZlcik7Cit9CisKK2ludCBtYWluKGlu
dCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwg
TlVMTCk7CisKKyAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIp
OworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9kb3dubG9hZC9jcmVhdGUiLCB0ZXN0X3dl
YmtpdF9kb3dubG9hZF9jcmVhdGUpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9kb3du
bG9hZC9zeW5jaCIsIHRlc3Rfd2Via2l0X2Rvd25sb2FkX3N5bmNoKTsKKyAgICBnX3Rlc3RfYWRk
X2Z1bmMoIi93ZWJraXQvZG93bmxvYWQvYXN5bmNoIiwgdGVzdF93ZWJraXRfZG93bmxvYWRfYXN5
bmNoKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvZG93bmxvYWQvZGF0YSIsIHRlc3Rf
d2Via2l0X2Rvd25sb2FkX2RhdGEpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9kb3du
bG9hZC9ub3QtZm91bmQiLCB0ZXN0X3dlYmtpdF9kb3dubG9hZF9ub3RfZm91bmQpOworICAgIHJl
dHVybiBnX3Rlc3RfcnVuICgpOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRHdGsvdGVzdGZhdmljb25kYXRhYmFzZS5jIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRHdGsvdGVzdGZhdmljb25kYXRhYmFzZS5jCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjQ3MmRhNDkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0ZmF2aWNvbmRhdGFiYXNlLmMKQEAgLTAsMCAr
MSwyNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgInRlc3RfdXRpbHMuaCIKKyNpbmNsdWRlIDxnbGliL2dzdGRp
by5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRl
IDx3ZWJraXQvd2Via2l0Lmg+CisKK2NvbnN0IGludCBnSWNvblNpemUgPSAxNjsKKworR01haW5M
b29wICpsb29wOworY2hhciAqYmFzZVVSSTsKKworc3RhdGljIHZvaWQKK3NlcnZlckNhbGxiYWNr
KFNvdXBTZXJ2ZXIgKnNlcnZlciwgU291cE1lc3NhZ2UgKm1lc3NhZ2UsIGNvbnN0IGNoYXIgKnBh
dGgsIEdIYXNoVGFibGUgKnF1ZXJ5LCBTb3VwQ2xpZW50Q29udGV4dCAqY29udGV4dCwgdm9pZCAq
ZGF0YSkKK3sKKyAgICBpZiAobWVzc2FnZS0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgewor
ICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1Rf
SU1QTEVNRU5URUQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc291cF9tZXNzYWdl
X3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOworCisgICAgY2hhciAqY29udGVu
dHM7CisgICAgZ3NpemUgbGVuZ3RoOworICAgIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2Zhdmlj
b24uaWNvIikpIHsKKyAgICAgICAgR0Vycm9yICplcnJvciA9IE5VTEw7CisKKyAgICAgICAgZ19m
aWxlX2dldF9jb250ZW50cygiYmxhbmsuaWNvIiwgJmNvbnRlbnRzLCAmbGVuZ3RoLCAmZXJyb3Ip
OworICAgICAgICBnX2Fzc2VydCghZXJyb3IpOworICAgIH0gZWxzZSB7CisgICAgICAgIGNvbnRl
bnRzID0gZ19zdHJkdXAoIjxodG1sPjxib2R5PnRlc3Q8L2JvZHk+PC9odG1sPiIpOworICAgICAg
ICBsZW5ndGggPSBzdHJsZW4oY29udGVudHMpOworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9i
b2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBjb250
ZW50cywgbGVuZ3RoKTsKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5y
ZXNwb25zZV9ib2R5KTsKK30KKworc3RhdGljIHZvaWQgZGVsZXRlRGF0YWJhc2VGaWxlSWZFeGlz
dHMoY29uc3QgY2hhciAqZGF0YWJhc2VQYXRoKQoreworICAgIGlmICghZ19maWxlX3Rlc3QoZGF0
YWJhc2VQYXRoLCBHX0ZJTEVfVEVTVF9JU19ESVIpKQorICAgICAgICByZXR1cm47CisKKyAgICBj
aGFyICpkYXRhYmFzZUZpbGVuYW1lID0gZ19idWlsZF9maWxlbmFtZShkYXRhYmFzZVBhdGgsICJX
ZWJwYWdlSWNvbnMuZGIiLCBOVUxMKTsKKyAgICBpZiAoZ191bmxpbmsoZGF0YWJhc2VGaWxlbmFt
ZSkgPT0gLTEpIHsKKyAgICAgICAgZ19mcmVlKGRhdGFiYXNlRmlsZW5hbWUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgZ19mcmVlKGRhdGFiYXNlRmlsZW5hbWUpOworICAgIGdfcm1k
aXIoZGF0YWJhc2VQYXRoKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYktpdEZhdmljb25EYXRh
YmFzZVNldFBhdGgoKQoreworICAgIGNoYXIgKmRhdGFiYXNlUGF0aCA9IGdfYnVpbGRfZmlsZW5h
bWUoZ19nZXRfdG1wX2RpcigpLCAid2Via2l0LXRlc3RmYXZpY29uZGF0YWJhc2UiLCBOVUxMKTsK
KyAgICBkZWxldGVEYXRhYmFzZUZpbGVJZkV4aXN0cyhkYXRhYmFzZVBhdGgpOworCisgICAgV2Vi
S2l0RmF2aWNvbkRhdGFiYXNlICpkYXRhYmFzZSA9IHdlYmtpdF9nZXRfZmF2aWNvbl9kYXRhYmFz
ZSgpOworICAgIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX3NldF9wYXRoKGRhdGFiYXNlLCBkYXRh
YmFzZVBhdGgpOworCisgICAgZ19hc3NlcnRfY21wc3RyKGRhdGFiYXNlUGF0aCwgPT0sIHdlYmtp
dF9mYXZpY29uX2RhdGFiYXNlX2dldF9wYXRoKGRhdGFiYXNlKSk7CisKKyAgICBnX2ZyZWUoZGF0
YWJhc2VQYXRoKTsKK30KKworLy8gU2VlIHRoZSBjb21tZW50IGluIG1haW4oKSBmdW5jdGlvbiB0
aGF0IGdvZXMgd2l0aCB0aGlzIHNhbWUgZ3VhcmQuCisjaWZkZWYgTkRFQlVHCisKK3N0YXRpYyB2
b2lkIGZhdmljb25EYXRhYmFzZUdldFZhbGlkRmF2aWNvbkNhbGxiYWNrKEdPYmplY3QgKnNvdXJj
ZU9iamVjdCwgR0FzeW5jUmVzdWx0ICpyZXN1bHQsIHZvaWQgKnVzZXJEYXRhKQoreworICAgIGdi
b29sZWFuICpiZWVuSGVyZSA9IChnYm9vbGVhbiopdXNlckRhdGE7CisgICAgR0Vycm9yICplcnJv
ciA9IE5VTEw7CisgICAgR2RrUGl4YnVmICppY29uID0gd2Via2l0X2Zhdmljb25fZGF0YWJhc2Vf
Z2V0X2Zhdmljb25fcGl4YnVmX2ZpbmlzaChXRUJLSVRfRkFWSUNPTl9EQVRBQkFTRShzb3VyY2VP
YmplY3QpLCByZXN1bHQsICZlcnJvcik7CisgICAgZ19hc3NlcnQoaWNvbik7CisgICAgZ19vYmpl
Y3RfdW5yZWYoaWNvbik7CisKKyAgICAqYmVlbkhlcmUgPSBUUlVFOworCisgICAgZ19tYWluX2xv
b3BfcXVpdChsb29wKTsKK30KKworc3RhdGljIHZvaWQgZmF2aWNvbkRhdGFiYXNlR2V0SW52YWxp
ZEZhdmljb25DYWxsYmFjayhHT2JqZWN0ICpzb3VyY2VPYmplY3QsIEdBc3luY1Jlc3VsdCAqcmVz
dWx0LCB2b2lkICp1c2VyRGF0YSkKK3sKKyAgICBnYm9vbGVhbiAqYmVlbkhlcmUgPSAoZ2Jvb2xl
YW4qKXVzZXJEYXRhOworICAgIEdFcnJvciAqZXJyb3IgPSBOVUxMOworICAgIEdka1BpeGJ1ZiAq
aWNvbiA9IHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX3BpeGJ1Zl9maW5pc2go
V0VCS0lUX0ZBVklDT05fREFUQUJBU0Uoc291cmNlT2JqZWN0KSwgcmVzdWx0LCAmZXJyb3IpOwor
ICAgIGdfYXNzZXJ0KCFpY29uKTsKKworICAgICpiZWVuSGVyZSA9IFRSVUU7CisKKyAgICBnX21h
aW5fbG9vcF9xdWl0KGxvb3ApOworfQorCitzdGF0aWMgdm9pZCBmYXZpY29uRGF0YWJhc2VHZXRG
YXZpY29uQ2FuY2VsbGVkQ2FsbGJhY2soR09iamVjdCAqc291cmNlT2JqZWN0LCBHQXN5bmNSZXN1
bHQgKnJlc3VsdCwgdm9pZCAqdXNlckRhdGEpCit7CisgICAgZ2Jvb2xlYW4gKmJlZW5IZXJlID0g
KGdib29sZWFuKil1c2VyRGF0YTsKKyAgICBHRXJyb3IgKmVycm9yID0gTlVMTDsKKyAgICBHZGtQ
aXhidWYgKmljb24gPSB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl9waXhidWZf
ZmluaXNoKFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFKHNvdXJjZU9iamVjdCksIHJlc3VsdCwgJmVy
cm9yKTsKKyAgICBnX2Fzc2VydCghaWNvbik7CisgICAgZ19hc3NlcnQoZXJyb3IgJiYgZ19lcnJv
cl9tYXRjaGVzKGVycm9yLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX0NBTkNFTExFRCkpOworCisg
ICAgKmJlZW5IZXJlID0gVFJVRTsKKworICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Cit9CisK
K3N0YXRpYyBpbmxpbmUgdm9pZCBxdWl0TWFpbkxvb3BJZkxvYWRDb21wbGV0ZWQoZ2Jvb2xlYW4g
Kmljb25PclBhZ2VMb2FkZWQpCit7CisgICAgaWYgKCppY29uT3JQYWdlTG9hZGVkKQorICAgICAg
ICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworICAgIGVsc2UKKyAgICAgICAgKmljb25PclBhZ2VM
b2FkZWQgPSBUUlVFOworfQorCitzdGF0aWMgdm9pZCBpZGxlUXVpdExvb3BDYWxsYmFjayhXZWJL
aXRXZWJWaWV3ICp3ZWJWaWV3LCBHUGFyYW1TcGVjICpwYXJhbVNwZWMsIGdib29sZWFuICppY29u
T3JQYWdlTG9hZGVkKQoreworICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dl
Yl92aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJWaWV3KTsKKworICAgIGlmIChzdGF0dXMgPT0gV0VC
S0lUX0xPQURfRklOSVNIRUQgfHwgc3RhdHVzID09IFdFQktJVF9MT0FEX0ZBSUxFRCkKKyAgICAg
ICAgcXVpdE1haW5Mb29wSWZMb2FkQ29tcGxldGVkKGljb25PclBhZ2VMb2FkZWQpOworfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3SWNvbkxvYWRlZChXZWJLaXRGYXZpY29uRGF0YWJhc2Ug
KmRhdGFiYXNlLCBjb25zdCBjaGFyICpmcmFtZVVSSSwgZ2Jvb2xlYW4gKmljb25PclBhZ2VMb2Fk
ZWQpCit7CisgICAgcXVpdE1haW5Mb29wSWZMb2FkQ29tcGxldGVkKGljb25PclBhZ2VMb2FkZWQp
OworfQorCitzdGF0aWMgdm9pZCBsb2FkVVJJKGNvbnN0IGNoYXIgKnVyaSkKK3sKKyAgICBXZWJL
aXRXZWJWaWV3ICp2aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7
CisgICAgZ2Jvb2xlYW4gaWNvbk9yUGFnZUxvYWRlZCA9IEZBTFNFOworCisgICAgd2Via2l0X3dl
Yl92aWV3X2xvYWRfdXJpKHZpZXcsIHVyaSk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHZpZXcs
ICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhpZGxlUXVpdExvb3BDYWxsYmFjayks
ICZpY29uT3JQYWdlTG9hZGVkKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KHZpZXcsICJpY29uLWxv
YWRlZCIsIEdfQ0FMTEJBQ0sod2Via2l0V2ViVmlld0ljb25Mb2FkZWQpLCAmaWNvbk9yUGFnZUxv
YWRlZCk7CisKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICBnX3NpZ25hbF9oYW5k
bGVyc19kaXNjb25uZWN0X21hdGNoZWQodmlldywgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwg
MCwgMCwgJmljb25PclBhZ2VMb2FkZWQpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gZmF2aWNvbkRh
dGFiYXNlR2V0VmFsaWRGYXZpY29uSWRsZSh2b2lkICp1c2VyRGF0YSkKK3sKKyAgICB3ZWJraXRf
ZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl9waXhidWYod2Via2l0X2dldF9mYXZpY29uX2Rh
dGFiYXNlKCksIGJhc2VVUkksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdJY29uU2l6ZSwgZ0ljb25TaXplLCBOVUxMLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYXZpY29uRGF0YWJhc2VHZXRWYWxpZEZhdmlj
b25DYWxsYmFjaywgdXNlckRhdGEpOworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGdi
b29sZWFuIGZhdmljb25EYXRhYmFzZUdldEludmFsaWRGYXZpY29uSWRsZSh2b2lkICp1c2VyRGF0
YSkKK3sKKyAgICB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl9waXhidWYod2Vi
a2l0X2dldF9mYXZpY29uX2RhdGFiYXNlKCksICJodHRwOi8vd3d3LndlYmtpdGd0ay5vcmcvIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ0ljb25TaXpl
LCBnSWNvblNpemUsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZhdmljb25EYXRhYmFzZUdldEludmFsaWRGYXZpY29uQ2FsbGJhY2ssIHVzZXJE
YXRhKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBmYXZpY29uRGF0
YWJhc2VHZXRGYXZpY29uQ2FuY2VsbGVkSWRsZSh2b2lkICp1c2VyRGF0YSkKK3sKKyAgICBHQ2Fu
Y2VsbGFibGUgKmNhbmNlbGxhYmxlID0gZ19jYW5jZWxsYWJsZV9uZXcoKTsKKyAgICB3ZWJraXRf
ZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl9waXhidWYod2Via2l0X2dldF9mYXZpY29uX2Rh
dGFiYXNlKCksIGJhc2VVUkksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdJY29uU2l6ZSwgZ0ljb25TaXplLCBjYW5jZWxsYWJsZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmF2aWNvbkRhdGFiYXNlR2V0RmF2
aWNvbkNhbmNlbGxlZENhbGxiYWNrLCB1c2VyRGF0YSk7CisgICAgZ19jYW5jZWxsYWJsZV9jYW5j
ZWwoY2FuY2VsbGFibGUpOworICAgIGdfb2JqZWN0X3VucmVmKGNhbmNlbGxhYmxlKTsKKyAgICBy
ZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VH
ZXRGYXZpY29uKCkKK3sKKyAgICBnYm9vbGVhbiBiZWVuVG9JY29uQ2FsbGJhY2s7CisKKyAgICBs
b29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworCisgICAgLyogTG9hZCB1cmkgdG8g
bWFrZSBzdXJlIGZhdmljb24gaXMgYWRkZWQgdG8gZGF0YWJhc2UuICovCisgICAgbG9hZFVSSShi
YXNlVVJJKTsKKworICAgIGJlZW5Ub0ljb25DYWxsYmFjayA9IEZBTFNFOworICAgIGdfaWRsZV9h
ZGQoKEdTb3VyY2VGdW5jKWZhdmljb25EYXRhYmFzZUdldFZhbGlkRmF2aWNvbklkbGUsICZiZWVu
VG9JY29uQ2FsbGJhY2spOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKyAgICBnX2Fzc2Vy
dChiZWVuVG9JY29uQ2FsbGJhY2spOworCisgICAgYmVlblRvSWNvbkNhbGxiYWNrID0gRkFMU0U7
CisgICAgZ19pZGxlX2FkZCgoR1NvdXJjZUZ1bmMpZmF2aWNvbkRhdGFiYXNlR2V0SW52YWxpZEZh
dmljb25JZGxlLCAmYmVlblRvSWNvbkNhbGxiYWNrKTsKKyAgICBnX21haW5fbG9vcF9ydW4obG9v
cCk7CisgICAgZ19hc3NlcnQoYmVlblRvSWNvbkNhbGxiYWNrKTsKKworICAgIGJlZW5Ub0ljb25D
YWxsYmFjayA9IEZBTFNFOworICAgIGdfaWRsZV9hZGQoKEdTb3VyY2VGdW5jKWZhdmljb25EYXRh
YmFzZUdldEZhdmljb25DYW5jZWxsZWRJZGxlLCAmYmVlblRvSWNvbkNhbGxiYWNrKTsKKyAgICBn
X21haW5fbG9vcF9ydW4obG9vcCk7CisgICAgZ19hc3NlcnQoYmVlblRvSWNvbkNhbGxiYWNrKTsK
K30KKworc3RhdGljIHZvaWQgdGVzdFdlYktpdEZhdmljb25EYXRhYmFzZUdldEZhdmljb25VUkko
KQoreworICAgIGNoYXIgKmljb25VUkkgPSB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2
aWNvbl91cmkod2Via2l0X2dldF9mYXZpY29uX2RhdGFiYXNlKCksIGJhc2VVUkkpOworICAgIGNo
YXIgKmV4cGVjdGVkVVJJID0gZ19zdHJkdXBfcHJpbnRmKCIlc2Zhdmljb24uaWNvIiwgYmFzZVVS
SSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGljb25VUkksID09LCBleHBlY3RlZFVSSSk7CisgICAg
Z19mcmVlKGV4cGVjdGVkVVJJKTsKKyAgICBnX2ZyZWUoaWNvblVSSSk7Cit9CisKKyNlbmRpZgor
CitzdGF0aWMgdm9pZCB0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlUmVtb3ZlQWxsKHZvaWQpCit7
CisgICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlICpkYXRhYmFzZSA9IHdlYmtpdF9nZXRfZmF2aWNv
bl9kYXRhYmFzZSgpOworICAgIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2NsZWFyKGRhdGFiYXNl
KTsKKyAgICBjaGFyICppY29uVVJJID0gd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmlj
b25fdXJpKGRhdGFiYXNlLCBiYXNlVVJJKTsKKyAgICBnX2Fzc2VydCghaWNvblVSSSk7CisgICAg
Z19mcmVlKGljb25VUkkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViS2l0RmF2aWNvbkRhdGFi
YXNlQ2xvc2VEYXRhYmFzZSh2b2lkKQoreworICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSAqZGF0
YWJhc2UgPSB3ZWJraXRfZ2V0X2Zhdmljb25fZGF0YWJhc2UoKTsKKyAgICBjaGFyICpkYXRhYmFz
ZVBhdGggPSBnX3N0cmR1cCh3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfcGF0aChkYXRhYmFz
ZSkpOworICAgIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX3NldF9wYXRoKGRhdGFiYXNlLCAwKTsK
KyAgICBkZWxldGVEYXRhYmFzZUZpbGVJZkV4aXN0cyhkYXRhYmFzZVBhdGgpOworICAgIGdfZnJl
ZShkYXRhYmFzZVBhdGgpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7
CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAgLyogVGhpcyBo
b3BlZnVsbHkgbWFrZXMgdGhlIHRlc3QgaW5kZXBlbmRlbnQgb2YgdGhlIHBhdGggaXQncyBjYWxs
ZWQgZnJvbS4gKi8KKyAgICB0ZXN0dXRpbHNfcmVsYXRpdmVfY2hkaXIoIlRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Jlc291cmNlcy90ZXN0Lmh0bWwiLCBhcmd2WzBdKTsKKwor
ICAgIFNvdXBTZXJ2ZXIgKnNlcnZlciA9IHNvdXBfc2VydmVyX25ldyhTT1VQX1NFUlZFUl9QT1JU
LCAwLCBOVUxMKTsKKyAgICBzb3VwX3NlcnZlcl9ydW5fYXN5bmMoc2VydmVyKTsKKworICAgIHNv
dXBfc2VydmVyX2FkZF9oYW5kbGVyKHNlcnZlciwgTlVMTCwgc2VydmVyQ2FsbGJhY2ssIE5VTEws
IE5VTEwpOworCisgICAgU291cFVSSSAqc291cFVSSSA9IHNvdXBfdXJpX25ldygiaHR0cDovLzEy
Ny4wLjAuMS8iKTsKKyAgICBzb3VwX3VyaV9zZXRfcG9ydChzb3VwVVJJLCBzb3VwX3NlcnZlcl9n
ZXRfcG9ydChzZXJ2ZXIpKTsKKworICAgIGJhc2VVUkkgPSBzb3VwX3VyaV90b19zdHJpbmcoc291
cFVSSSwgRkFMU0UpOworICAgIHNvdXBfdXJpX2ZyZWUoc291cFVSSSk7CisKKyAgICBnX3Rlc3Rf
YnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOworICAgIGdfdGVzdF9hZGRfZnVu
YygiL3dlYmtpdC9mYXZpY29uZGF0YWJhc2Uvc2V0LXBhdGgiLCB0ZXN0V2ViS2l0RmF2aWNvbkRh
dGFiYXNlU2V0UGF0aCk7CisKKyAgICAvLyBUaGVzZSB0d28gdGVzdHMgd2lsbCB0cmlnZ2VyIGFu
IEFTU0VSVElPTiBvbiBkZWJ1ZyBidWlsZHMgZHVlCisgICAgLy8gdG8gaHR0cDovL3dlYmtpdC5v
cmcvYi82NzU4Mi4gUmVtb3ZlIHRoZSBndWFyZHMgb25jZSB0aGUgYnVnIGlzIGZpeGVkLgorI2lm
ZGVmIE5ERUJVRworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9mYXZpY29uZGF0YWJhc2Uv
Z2V0LWZhdmljb24iLCB0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNvbik7CisgICAg
Z190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2Zhdmljb25kYXRhYmFzZS9nZXQtZmF2aWNvbi11cmki
LCB0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNvblVSSSk7CisjZW5kaWYKKworICAg
IGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9mYXZpY29uZGF0YWJhc2UvcmVtb3ZlLWFsbCIsIHRl
c3RXZWJLaXRGYXZpY29uRGF0YWJhc2VSZW1vdmVBbGwpOworICAgIGdfdGVzdF9hZGRfZnVuYygi
L3dlYmtpdC9mYXZpY29uZGF0YWJhc2UvY2xvc2UtZGIiLCB0ZXN0V2ViS2l0RmF2aWNvbkRhdGFi
YXNlQ2xvc2VEYXRhYmFzZSk7CisKKyAgICByZXR1cm4gZ190ZXN0X3J1bigpOworfQpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGdsb2JhbHMuYyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RnbG9iYWxzLmMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI5ZWM0ZgotLS0gL2Rldi9udWxsCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RnbG9iYWxzLmMKQEAgLTAs
MCArMSwxMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQ29sbGFib3JhIEx0ZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDxsaWJzb3Vw
L3NvdXAuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+CisKKy8vIE1ha2Ugc3VyZSB0aGUg
c2Vzc2lvbiBpcyBpbml0aWFsaXplZCBwcm9wZXJseSB3aGVuIHdlYmtpdF9nZXRfZGVmYXVsdF9z
ZXNzaW9uKCkgaXMgY2FsbGVkLgorc3RhdGljIHZvaWQgdGVzdF9nbG9iYWxzX2RlZmF1bHRfc2Vz
c2lvbigpCit7CisgICAgZ190ZXN0X2J1ZygiMzY3NTQiKTsKKworICAgIFNvdXBTZXNzaW9uKiBz
ZXNzaW9uID0gd2Via2l0X2dldF9kZWZhdWx0X3Nlc3Npb24oKTsKKyAgICBzb3VwX3Nlc3Npb25f
cmVtb3ZlX2ZlYXR1cmVfYnlfdHlwZShzZXNzaW9uLCBXRUJLSVRfVFlQRV9TT1VQX0FVVEhfRElB
TE9HKTsKKworICAgIC8vIFRoaXMgbWFrZXMgc3VyZSBvdXIgaW5pdGlhbGl6YXRpb24gcmFuLgor
ICAgIGdfYXNzZXJ0KHNvdXBfc2Vzc2lvbl9nZXRfZmVhdHVyZShzZXNzaW9uLCBTT1VQX1RZUEVf
Q09OVEVOVF9ERUNPREVSKSAhPSBOVUxMKTsKKworICAgIC8vIENyZWF0aW5nIGEgV2ViVmlldyBz
aG91bGQgbWFrZSBzdXJlIHRoZSBzZXNzaW9uIGlzCisgICAgLy8gaW5pdGlhbGl6ZWQsIGFuZCBu
b3QgbWVzcyB3aXRoIG91ciBjaGFuZ2VzLgorICAgIFdlYktpdFdlYlZpZXcqIHdlYl92aWV3ID0g
V0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmplY3RfcmVm
X3Npbmsod2ViX3ZpZXcpOworICAgIGdfb2JqZWN0X3VucmVmKHdlYl92aWV3KTsKKworICAgIC8v
IFRoZXNlIG1ha2VzIHN1cmUgb3VyIG1vZGlmaWNhdGlvbiB3YXMga2VwdC4KKyAgICBnX2Fzc2Vy
dChzb3VwX3Nlc3Npb25fZ2V0X2ZlYXR1cmUoc2Vzc2lvbiwgU09VUF9UWVBFX0NPTlRFTlRfREVD
T0RFUikgIT0gTlVMTCk7CisgICAgZ19hc3NlcnQoc291cF9zZXNzaW9uX2dldF9mZWF0dXJlKHNl
c3Npb24sIFdFQktJVF9UWVBFX1NPVVBfQVVUSF9ESUFMT0cpID09IE5VTEwpOworfQorCitzdGF0
aWMgdm9pZCB0ZXN0X2dsb2JhbHNfc2VjdXJpdHlfcG9saWN5KCkKK3sKKyAgICAvLyBDaGVjayBk
ZWZhdWx0IHBvbGljeSBmb3Igd2VsbCBrbm93biBzY2hlbWVzLgorICAgIFdlYktpdFNlY3VyaXR5
UG9saWN5IHBvbGljeSA9IHdlYmtpdF9nZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1l
KCJodHRwIik7CisgICAgZ3VpbnQgbWFzayA9IFdFQktJVF9TRUNVUklUWV9QT0xJQ1lfQ09SU19F
TkFCTEVEOworICAgIGdfYXNzZXJ0X2NtcHVpbnQocG9saWN5ICYgbWFzaywgPT0sIG1hc2spOwor
CisgICAgcG9saWN5ID0gd2Via2l0X2dldF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUo
Imh0dHBzIik7CisgICAgbWFzayA9IFdFQktJVF9TRUNVUklUWV9QT0xJQ1lfU0VDVVJFIHwgV0VC
S0lUX1NFQ1VSSVRZX1BPTElDWV9DT1JTX0VOQUJMRUQ7CisgICAgZ19hc3NlcnRfY21wdWludChw
b2xpY3kgJiBtYXNrLCA9PSwgbWFzayk7CisKKyAgICBwb2xpY3kgPSB3ZWJraXRfZ2V0X3NlY3Vy
aXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiZmlsZSIpOworICAgIG1hc2sgPSBXRUJLSVRfU0VD
VVJJVFlfUE9MSUNZX0xPQ0FMOworICAgIGdfYXNzZXJ0X2NtcHVpbnQocG9saWN5ICYgbWFzaywg
PT0sIG1hc2spOworCisgICAgcG9saWN5ID0gd2Via2l0X2dldF9zZWN1cml0eV9wb2xpY3lfZm9y
X3VyaV9zY2hlbWUoImRhdGEiKTsKKyAgICBtYXNrID0gV0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9O
T19BQ0NFU1NfVE9fT1RIRVJfU0NIRU1FIHwgV0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9TRUNVUkU7
CisgICAgZ19hc3NlcnRfY21wdWludChwb2xpY3kgJiBtYXNrLCA9PSwgbWFzayk7CisKKyAgICBw
b2xpY3kgPSB3ZWJraXRfZ2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiYWJvdXQi
KTsKKyAgICBtYXNrID0gV0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9OT19BQ0NFU1NfVE9fT1RIRVJf
U0NIRU1FIHwgV0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9TRUNVUkUgfCBXRUJLSVRfU0VDVVJJVFlf
UE9MSUNZX0VNUFRZX0RPQ1VNRU5UOworICAgIGdfYXNzZXJ0X2NtcHVpbnQocG9saWN5ICYgbWFz
aywgPT0sIG1hc2spOworCisgICAgLy8gQ3VzdG9tIHNjaGVtZS4KKyAgICBwb2xpY3kgPSB3ZWJr
aXRfZ2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiZm9vIik7CisgICAgZ19hc3Nl
cnQoIXBvbGljeSk7CisKKyAgICBwb2xpY3kgfD0gV0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9MT0NB
TDsKKyAgICB3ZWJraXRfc2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiZm9vIiwg
cG9saWN5KTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9nZXRfc2VjdXJpdHlfcG9saWN5
X2Zvcl91cmlfc2NoZW1lKCJmb28iKSwgPT0sIHBvbGljeSk7CisKKyAgICBwb2xpY3kgfD0gV0VC
S0lUX1NFQ1VSSVRZX1BPTElDWV9OT19BQ0NFU1NfVE9fT1RIRVJfU0NIRU1FOworICAgIHdlYmtp
dF9zZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJmb28iLCBwb2xpY3kpOworICAg
IGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2dldF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hl
bWUoImZvbyIpLCA9PSwgcG9saWN5KTsKKworICAgIHBvbGljeSB8PSBXRUJLSVRfU0VDVVJJVFlf
UE9MSUNZX0RJU1BMQVlfSVNPTEFURUQ7CisgICAgd2Via2l0X3NldF9zZWN1cml0eV9wb2xpY3lf
Zm9yX3VyaV9zY2hlbWUoImZvbyIsIHBvbGljeSk7CisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJr
aXRfZ2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiZm9vIiksID09LCBwb2xpY3kp
OworCisgICAgcG9saWN5IHw9IFdFQktJVF9TRUNVUklUWV9QT0xJQ1lfU0VDVVJFOworICAgIHdl
YmtpdF9zZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJmb28iLCBwb2xpY3kpOwor
ICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2dldF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9z
Y2hlbWUoImZvbyIpLCA9PSwgcG9saWN5KTsKKworICAgIHBvbGljeSB8PSBXRUJLSVRfU0VDVVJJ
VFlfUE9MSUNZX0NPUlNfRU5BQkxFRDsKKyAgICB3ZWJraXRfc2V0X3NlY3VyaXR5X3BvbGljeV9m
b3JfdXJpX3NjaGVtZSgiZm9vIiwgcG9saWN5KTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtp
dF9nZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJmb28iKSwgPT0sIHBvbGljeSk7
CisKKyAgICBwb2xpY3kgfD0gV0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9FTVBUWV9ET0NVTUVOVDsK
KyAgICB3ZWJraXRfc2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiZm9vIiwgcG9s
aWN5KTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9nZXRfc2VjdXJpdHlfcG9saWN5X2Zv
cl91cmlfc2NoZW1lKCJmb28iKSwgPT0sIHBvbGljeSk7Cit9CisKK2ludCBtYWluKGludCBhcmdj
LCBjaGFyKiogYXJndikKK3sKKyAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7
CisKKyAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOworICAg
IGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9nbG9iYWxzL2RlZmF1bHRfc2Vzc2lvbiIsCisgICAg
ICAgICAgICAgICAgICAgIHRlc3RfZ2xvYmFsc19kZWZhdWx0X3Nlc3Npb24pOworICAgIGdfdGVz
dF9hZGRfZnVuYygiL3dlYmtpdC9nbG9iYWxzL3NlY3VyaXR5LXBvbGljeSIsCisgICAgICAgICAg
ICAgICAgICAgIHRlc3RfZ2xvYmFsc19zZWN1cml0eV9wb2xpY3kpOworICAgIHJldHVybiBnX3Rl
c3RfcnVuKCk7Cit9CisKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0R3RrL3Rlc3RoaXR0ZXN0cmVzdWx0LmMgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdEd0ay90ZXN0aGl0dGVzdHJlc3VsdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmNiZjAxMTAKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdEd0ay90ZXN0aGl0dGVzdHJlc3VsdC5jCkBAIC0wLDAgKzEsMTY5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA5IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxnbGliL2dz
dGRpby5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKwordHlwZWRlZiBzdHJ1Y3Qgewor
ICBjaGFyKiBkYXRhOworICBndWludCBmbGFnOworfSBUZXN0SW5mbzsKKworc3RhdGljIEdNYWlu
TG9vcCogbG9vcDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXc7CisgICAgVGVzdEluZm8qIGluZm87Cit9IEhpdFRlc3RSZXN1bHRGaXh0dXJlOworCitUZXN0
SW5mbyoKK3Rlc3RfaW5mb19uZXcoY29uc3QgY2hhciogZGF0YSwgZ3VpbnQgZmxhZykKK3sKKyAg
ICBUZXN0SW5mbyogaW5mbzsKKworICAgIGluZm8gPSBnX3NsaWNlX25ldyhUZXN0SW5mbyk7Cisg
ICAgaW5mby0+ZGF0YSA9IGdfc3RyZHVwKGRhdGEpOworICAgIGluZm8tPmZsYWcgPSBmbGFnOwor
CisgICAgcmV0dXJuIGluZm87Cit9CisKK3ZvaWQKK3Rlc3RfaW5mb19kZXN0cm95KFRlc3RJbmZv
KiBpbmZvKQoreworICAgIGdfZnJlZShpbmZvLT5kYXRhKTsKKyAgICBnX3NsaWNlX2ZyZWUoVGVz
dEluZm8sIGluZm8pOworfQorCitzdGF0aWMgdm9pZCBoaXRfdGVzdF9yZXN1bHRfZml4dHVyZV9z
ZXR1cChIaXRUZXN0UmVzdWx0Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQor
eworICAgIGZpeHR1cmUtPndlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3
X25ldygpKTsKKyAgICBnX29iamVjdF9yZWZfc2luayhmaXh0dXJlLT53ZWJWaWV3KTsKKyAgICBs
b29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworICAgIGZpeHR1cmUtPmluZm8gPSAo
VGVzdEluZm8qKWRhdGE7Cit9CisKK3N0YXRpYyB2b2lkIGhpdF90ZXN0X3Jlc3VsdF9maXh0dXJl
X3RlYXJkb3duKEhpdFRlc3RSZXN1bHRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRh
dGEpCit7CisgICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+d2ViVmlldyk7CisgICAgZ19tYWlu
X2xvb3BfdW5yZWYobG9vcCk7CisgICAgdGVzdF9pbmZvX2Rlc3Ryb3koZml4dHVyZS0+aW5mbyk7
Cit9CisKK3N0YXRpYyB2b2lkCitsb2FkX3N0YXR1c19jYihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3
LAorICAgICAgICAgICAgICAgR1BhcmFtU3BlYyogc3BlYywKKyAgICAgICAgICAgICAgIGdwb2lu
dGVyIGRhdGEpCit7CisgICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYlZpZXcpOworICAgIFRlc3RJbmZvKiBpbmZvID0gKFRlc3RJ
bmZvKilkYXRhOworCisgICAgaWYgKHN0YXR1cyA9PSBXRUJLSVRfTE9BRF9GSU5JU0hFRCkgewor
ICAgICAgICBXZWJLaXRIaXRUZXN0UmVzdWx0KiByZXN1bHQ7CisgICAgICAgIGd1aW50IGNvbnRl
eHQ7CisgICAgICAgIEdka0V2ZW50KiBldmVudCA9IGdka19ldmVudF9uZXcoR0RLX0JVVFRPTl9Q
UkVTUyk7CisgICAgICAgIFdlYktpdERPTU5vZGUqIG5vZGU7CisgICAgICAgIGdpbnQgeCwgeTsK
KworICAgICAgICAvKiBDbG9zZSBlbm91Z2ggdG8gMCwwICovCisgICAgICAgIGV2ZW50LT5idXR0
b24ueCA9IDU7CisgICAgICAgIGV2ZW50LT5idXR0b24ueSA9IDU7CisKKyAgICAgICAgcmVzdWx0
ID0gd2Via2l0X3dlYl92aWV3X2dldF9oaXRfdGVzdF9yZXN1bHQod2ViVmlldywgKEdka0V2ZW50
QnV0dG9uKikgZXZlbnQpOworICAgICAgICBnZGtfZXZlbnRfZnJlZShldmVudCk7CisgICAgICAg
IGdfYXNzZXJ0KHJlc3VsdCk7CisKKyAgICAgICAgZ19vYmplY3RfZ2V0KHJlc3VsdCwgImNvbnRl
eHQiLCAmY29udGV4dCwgTlVMTCk7CisgICAgICAgIGdfYXNzZXJ0KGNvbnRleHQgJiBpbmZvLT5m
bGFnKTsKKworICAgICAgICBnX29iamVjdF9nZXQocmVzdWx0LCAiaW5uZXItbm9kZSIsICZub2Rl
LCBOVUxMKTsKKyAgICAgICAgZ19hc3NlcnQobm9kZSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJ
VF9ET01fSVNfTk9ERShub2RlKSk7CisKKyAgICAgICAgZ19vYmplY3RfZ2V0KHJlc3VsdCwgIngi
LCAmeCwgInkiLCAmeSwgTlVMTCk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludCh4LCA9PSwgNSk7
CisgICAgICAgIGdfYXNzZXJ0X2NtcGludCh5LCA9PSwgNSk7CisKKyAgICAgICAgLyogV2UgY2Fu
IG9ubHkgdGVzdCB0aGVzZSBub2RlIHR5cGVzIGF0IHRoZSBtb21lbnQuIEluIHRoZQorICAgICAg
ICAgKiBpbnB1dCBjYXNlIHRoZXJlIHNlZW1zIHRvIGJlIGFuIGV4dHJhIGxheWVyIHdpdGggYSBE
SVYgb24KKyAgICAgICAgICogdG9wIG9mIHRoZSBpbnB1dCwgd2hpY2ggZ2V0cyBhc3NpZ25lZCB0
byB0aGUgaW5uZXItbm9kZS4KKyAgICAgICAgICogdGFnICovCisgICAgICAgIGlmIChpbmZvLT5m
bGFnID09IFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9ET0NVTUVOVCkKKyAgICAgICAg
ICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9IVE1MX0VMRU1FTlQobm9kZSkpOworICAg
ICAgICBlbHNlIGlmIChpbmZvLT5mbGFnID09IFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVY
VF9JTUFHRSkKKyAgICAgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9JTUFHRV9F
TEVNRU5UKG5vZGUpKTsKKyAgICAgICAgZWxzZSBpZiAoaW5mby0+ZmxhZyA9PSBXRUJLSVRfSElU
X1RFU1RfUkVTVUxUX0NPTlRFWFRfTElOSykgeworICAgICAgICAgICAgLyogVGhlIGhpdCB0ZXN0
IHdpbGwgZ2l2ZSB1cyB0aGUgaW5uZXIgdGV4dCBub2RlLCB3ZSB3YW50CisgICAgICAgICAgICAg
KiB0aGUgQSB0YWcgKi8KKyAgICAgICAgICAgIFdlYktpdERPTU5vZGUqIHBhcmVudCA9IHdlYmtp
dF9kb21fbm9kZV9nZXRfcGFyZW50X25vZGUobm9kZSk7CisgICAgICAgICAgICBnX2Fzc2VydChX
RUJLSVRfRE9NX0lTX0hUTUxfQU5DSE9SX0VMRU1FTlQocGFyZW50KSk7CisgICAgICAgIH0KKwor
ICAgICAgICBnX29iamVjdF91bnJlZihyZXN1bHQpOworICAgICAgICBnX21haW5fbG9vcF9xdWl0
KGxvb3ApOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK3Rlc3Rfd2Via2l0X2hpdF90ZXN0X3Jl
c3VsdChIaXRUZXN0UmVzdWx0Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQor
eworICAgIFRlc3RJbmZvKiBpbmZvID0gKFRlc3RJbmZvKilkYXRhOworICAgIEd0a0FsbG9jYXRp
b24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgNTAsIDUwIH07CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdf
bG9hZF9zdHJpbmcoZml4dHVyZS0+d2ViVmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5mby0+ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRleHQv
aHRtbCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1dGYtOCIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlOi8vIik7CisgICAgZ3RrX3dpZGdldF9zaXpl
X2FsbG9jYXRlKEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldyksICZhbGxvY2F0aW9uKTsKKyAg
ICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVz
IiwgR19DQUxMQkFDSyhsb2FkX3N0YXR1c19jYiksIGluZm8pOworICAgIGdfbWFpbl9sb29wX3J1
bihsb29wKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIGd0
a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKKworICAgIGdfdGVzdF9idWdfYmFzZSgi
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2hp
dHRlc3RyZXN1bHQvZG9jdW1lbnQiLCBIaXRUZXN0UmVzdWx0Rml4dHVyZSwgCisgICAgICAgICAg
ICAgICB0ZXN0X2luZm9fbmV3KCI8aHRtbD48Ym9keT48aDE+V2ViS2l0R1RLKyE8L2gxPjwvYm9k
eT48L2h0bWw+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX0hJVF9URVNU
X1JFU1VMVF9DT05URVhUX0RPQ1VNRU5UKSwKKyAgICAgICAgICAgICAgIGhpdF90ZXN0X3Jlc3Vs
dF9maXh0dXJlX3NldHVwLCB0ZXN0X3dlYmtpdF9oaXRfdGVzdF9yZXN1bHQsIGhpdF90ZXN0X3Jl
c3VsdF9maXh0dXJlX3RlYXJkb3duKTsKKyAgICAvKiBXZSBoYXJkY29kZSBhbGwgZWxlbWVudHMg
dG8gYmUgYXQgMCwwIHNvIHRoYXQgd2Uga25vdyB3aGVyZSB0bworICAgICAqIGdlbmVyYXRlIHRo
ZSBidXR0b24gZXZlbnRzICovCisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9oaXR0ZXN0cmVzdWx0
L2ltYWdlIiwgSGl0VGVzdFJlc3VsdEZpeHR1cmUsCisgICAgICAgICAgICAgICB0ZXN0X2luZm9f
bmV3KCI8aHRtbD48Ym9keT48aW1nIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDowOyB0
b3A6MCdzcmM9JzB4ZGVhZGJlZWYnIHdpZHRoPTUwIGhlaWdodD01MD48L2ltZz48L2JvZHk+PC9o
dG1sPiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9ISVRfVEVTVF9SRVNV
TFRfQ09OVEVYVF9JTUFHRSksCisgICAgICAgICAgICAgICBoaXRfdGVzdF9yZXN1bHRfZml4dHVy
ZV9zZXR1cCwgdGVzdF93ZWJraXRfaGl0X3Rlc3RfcmVzdWx0LCBoaXRfdGVzdF9yZXN1bHRfZml4
dHVyZV90ZWFyZG93bik7CisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9oaXR0ZXN0cmVzdWx0L2Vk
aXRhYmxlIiwgSGl0VGVzdFJlc3VsdEZpeHR1cmUsCisgICAgICAgICAgICAgICB0ZXN0X2luZm9f
bmV3KCI8aHRtbD48Ym9keT48aW5wdXQgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjA7
IHRvcDowJyBzaXplPSczNSc+PC9pbnB1dD4+PC9ib2R5PjwvaHRtbD4iLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfRURJVEFCTEUp
LAorICAgICAgICAgICAgICAgaGl0X3Rlc3RfcmVzdWx0X2ZpeHR1cmVfc2V0dXAsIHRlc3Rfd2Vi
a2l0X2hpdF90ZXN0X3Jlc3VsdCwgaGl0X3Rlc3RfcmVzdWx0X2ZpeHR1cmVfdGVhcmRvd24pOwor
ICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvaGl0dGVzdHJlc3VsdC9saW5rIiwgSGl0VGVzdFJlc3Vs
dEZpeHR1cmUsCisgICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KCI8aHRtbD48Ym9keT48YSBz
dHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MDsgdG9wOjAnIGhyZWY9J2h0dHA6Ly93d3cu
ZXhhbXBsZS5jb20nPkhFTExPIFdPUkxEPC9hPjwvYm9keT48L2h0bWw+IiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0xJTkspLAor
ICAgICAgICAgICAgICAgaGl0X3Rlc3RfcmVzdWx0X2ZpeHR1cmVfc2V0dXAsIHRlc3Rfd2Via2l0
X2hpdF90ZXN0X3Jlc3VsdCwgaGl0X3Rlc3RfcmVzdWx0X2ZpeHR1cmVfdGVhcmRvd24pOworICAg
ICAgICAgICAgICAgCisgICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7Cit9CisKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RodHRwYmFja2VuZC5jIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGh0dHBiYWNrZW5kLmMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM3NzY4NwotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RodHRwYmFja2VuZC5j
CkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR3VzdGF2byBOb3Jv
bmhhIFNpbHZhCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1
ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxnbGliL2dzdGRpby5o
PgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+CisKKy8v
IE5vdCB5ZXQgcHVibGljIEFQSQorU291cE1lc3NhZ2UqIHdlYmtpdF9uZXR3b3JrX3JlcXVlc3Rf
Z2V0X21lc3NhZ2UoV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QpOworCitzdGF0aWMgZ2Jv
b2xlYW4gbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fcmVxdWVzdGVkX2NiKFdlYktpdFdlYlZp
ZXcqIHdlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXZWJLaXRXZWJGcmFtZSogd2ViX2ZyYW1lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXROZXR3b3JrUmVx
dWVzdCogcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgV2ViS2l0V2ViTmF2aWdhdGlvbkFjdGlvbiogYWN0aW9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRX
ZWJQb2xpY3lEZWNpc2lvbiogZGVjaXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIGRhdGEpCit7CisgICAgU291cE1l
c3NhZ2UqIG1lc3NhZ2UgPSB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X2dldF9tZXNzYWdlKHJlcXVl
c3QpOworCisgICAgLyogMSAtPiB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X3dpdGhfY29yZV9yZXF1
ZXN0CisgICAgICoKKyAgICAgKiBUaGUgU291cE1lc3NhZ2UgaXMgY3JlYXRlZCBleGNsdXNpdmVs
eSBmb3IgdGhlIGVtaXNzaW9uIG9mIHRoaXMKKyAgICAgKiBzaWduYWwuCisgICAgICovCisgICAg
Z19hc3NlcnRfY21waW50KEdfT0JKRUNUKG1lc3NhZ2UpLT5yZWZfY291bnQsID09LCAxKTsKKwor
ICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9zb3VwX21lc3NhZ2VfbGlm
ZXRpbWUoKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYl92aWV3ID0gV0VCS0lUX1dFQl9WSUVX
KHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisKKyAgICBnX29iamVjdF9yZWZfc2luayh3ZWJfdmll
dyk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdlYl92aWV3LCAibmF2aWdhdGlvbi1wb2xpY3kt
ZGVjaXNpb24tcmVxdWVzdGVkIiwKKyAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sobmF2
aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fcmVxdWVzdGVkX2NiKSwKKyAgICAgICAgICAgICAgICAg
ICAgIE5VTEwpOworCisgICAgLyogbG9hZF91cmkgd2lsbCB0cmlnZ2VyIHRoZSBuYXZpZ2F0aW9u
LXBvbGljeS1kZWNpc2lvbi1yZXF1ZXN0ZWQKKyAgICAgKiBzaWduYWwgZW1pc3Npb247CisgICAg
ICovCisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHdlYl92aWV3LCAiaHR0cDovLzEyNy4w
LjAuMS8iKTsKKworICAgIGdfb2JqZWN0X3VucmVmKHdlYl92aWV3KTsKK30KKworaW50IG1haW4o
aW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2
LCBOVUxMKTsKKworICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
Iik7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3NvdXBtZXNzYWdlL2xpZmV0aW1lIiwg
dGVzdF9zb3VwX21lc3NhZ2VfbGlmZXRpbWUpOworICAgIHJldHVybiBnX3Rlc3RfcnVuICgpOwor
fQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGtl
eWV2ZW50cy5jIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGtleWV2
ZW50cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjZDAxZjMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0a2V5
ZXZlbnRzLmMKQEAgLTAsMCArMSwzOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIw
MTAgTWFydGluIFJvYmluc29uIDxtcm9iaW5zb25Ad2Via2l0Lm9yZz4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUg
PHN0cmluZy5oPgorI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CisjaW5jbHVkZSA8d2Via2l0L3dl
YmtpdC5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+CisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0UmVmLmg+CisKK3R5cGVkZWYgc3RydWN0IHsKKyAg
ICBjaGFyKiBwYWdlOworICAgIGNoYXIqIHRleHQ7CisgICAgZ2Jvb2xlYW4gc2hvdWxkQmVIYW5k
bGVkOworfSBUZXN0SW5mbzsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIEd0a1dpZGdldCogd2lu
ZG93OworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXc7CisgICAgR01haW5Mb29wKiBsb29wOwor
ICAgIFRlc3RJbmZvKiBpbmZvOworfSBLZXlFdmVudEZpeHR1cmU7CisKK1Rlc3RJbmZvKgordGVz
dF9pbmZvX25ldyhjb25zdCBjaGFyKiBwYWdlLCBnYm9vbGVhbiBzaG91bGRCZUhhbmRsZWQpCit7
CisgICAgVGVzdEluZm8qIGluZm87CisKKyAgICBpbmZvID0gZ19zbGljZV9uZXcoVGVzdEluZm8p
OworICAgIGluZm8tPnBhZ2UgPSBnX3N0cmR1cChwYWdlKTsKKyAgICBpbmZvLT5zaG91bGRCZUhh
bmRsZWQgPSBzaG91bGRCZUhhbmRsZWQ7CisgICAgaW5mby0+dGV4dCA9IDA7CisKKyAgICByZXR1
cm4gaW5mbzsKK30KKwordm9pZAordGVzdF9pbmZvX2Rlc3Ryb3koVGVzdEluZm8qIGluZm8pCit7
CisgICAgZ19mcmVlKGluZm8tPnBhZ2UpOworICAgIGdfZnJlZShpbmZvLT50ZXh0KTsKKyAgICBn
X3NsaWNlX2ZyZWUoVGVzdEluZm8sIGluZm8pOworfQorCitzdGF0aWMgdm9pZCBrZXlfZXZlbnRf
Zml4dHVyZV9zZXR1cChLZXlFdmVudEZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0
YSkKK3sKKyAgICBmaXh0dXJlLT5sb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwor
CisgICAgZml4dHVyZS0+d2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZF
TCk7CisgICAgZml4dHVyZS0+d2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3Zp
ZXdfbmV3KCkpOworCisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihmaXh0dXJl
LT53aW5kb3cpLCBHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpKTsKK30KKworc3RhdGljIHZv
aWQga2V5X2V2ZW50X2ZpeHR1cmVfdGVhcmRvd24oS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJlLCBn
Y29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgZ3RrX3dpZGdldF9kZXN0cm95KGZpeHR1cmUtPndp
bmRvdyk7CisgICAgZ19tYWluX2xvb3BfdW5yZWYoZml4dHVyZS0+bG9vcCk7CisgICAgdGVzdF9p
bmZvX2Rlc3Ryb3koZml4dHVyZS0+aW5mbyk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBrZXlfcHJl
c3NfZXZlbnRfY2IoV2ViS2l0V2ViVmlldyogd2ViVmlldywgR2RrRXZlbnQqIGV2ZW50LCBncG9p
bnRlciBkYXRhKQoreworICAgIEtleUV2ZW50Rml4dHVyZSogZml4dHVyZSA9IChLZXlFdmVudEZp
eHR1cmUqKWRhdGE7CisgICAgZ2Jvb2xlYW4gaGFuZGxlZCA9IEdUS19XSURHRVRfR0VUX0NMQVNT
KGZpeHR1cmUtPndlYlZpZXcpLT5rZXlfcHJlc3NfZXZlbnQoR1RLX1dJREdFVChmaXh0dXJlLT53
ZWJWaWV3KSwgJmV2ZW50LT5rZXkpOworICAgIGdfYXNzZXJ0X2NtcGludChoYW5kbGVkLCA9PSwg
Zml4dHVyZS0+aW5mby0+c2hvdWxkQmVIYW5kbGVkKTsKKworICAgIHJldHVybiBGQUxTRTsKK30K
Kworc3RhdGljIGdib29sZWFuIGtleV9yZWxlYXNlX2V2ZW50X2NiKFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcsIEdka0V2ZW50KiBldmVudCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICAvLyBXZWJDb3Jl
IG5ldmVyIHNlZW1zIHRvIG1hcmsga2V5dXAgZXZlbnRzIGFzIGhhbmRsZWQuCisgICAgS2V5RXZl
bnRGaXh0dXJlKiBmaXh0dXJlID0gKEtleUV2ZW50Rml4dHVyZSopZGF0YTsKKyAgICBnYm9vbGVh
biBoYW5kbGVkID0gR1RLX1dJREdFVF9HRVRfQ0xBU1MoZml4dHVyZS0+d2ViVmlldyktPmtleV9w
cmVzc19ldmVudChHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpLCAmZXZlbnQtPmtleSk7Cisg
ICAgZ19hc3NlcnQoIWhhbmRsZWQpOworCisgICAgZ19tYWluX2xvb3BfcXVpdChmaXh0dXJlLT5s
b29wKTsKKworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9rZXlwcmVz
c19ldmVudHNfbG9hZF9zdGF0dXNfY2IoV2ViS2l0V2ViVmlldyogd2ViVmlldywgR1BhcmFtU3Bl
Yyogc3BlYywgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBLZXlFdmVudEZpeHR1cmUqIGZpeHR1cmUg
PSAoS2V5RXZlbnRGaXh0dXJlKilkYXRhOworICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0g
d2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJWaWV3KTsKKyAgICBpZiAoc3RhdHVz
ID09IFdFQktJVF9MT0FEX0ZJTklTSEVEKSB7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4
dHVyZS0+d2ViVmlldywgImtleS1wcmVzcy1ldmVudCIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgR19DQUxMQkFDSyhrZXlfcHJlc3NfZXZlbnRfY2IpLCBmaXh0dXJlKTsKKyAgICAgICAgZ19z
aWduYWxfY29ubmVjdChmaXh0dXJlLT53ZWJWaWV3LCAia2V5LXJlbGVhc2UtZXZlbnQiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0soa2V5X3JlbGVhc2VfZXZlbnRfY2IpLCBm
aXh0dXJlKTsKKyAgICAgICAgaWYgKCFndGtfdGVzdF93aWRnZXRfc2VuZF9rZXkoR1RLX1dJREdF
VChmaXh0dXJlLT53ZWJWaWV3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2RrX3VuaWNvZGVfdG9fa2V5dmFsKCdhJyksIDApKQorICAgICAgICAgICAgZ19hc3NlcnRf
bm90X3JlYWNoZWQoKTsKKyAgICB9CisKK30KKworZ2Jvb2xlYW4gbWFwX2V2ZW50X2NiKEd0a1dp
ZGdldCAqd2lkZ2V0LCBHZGtFdmVudCogZXZlbnQsIGdwb2ludGVyIGRhdGEpCit7CisgICAgS2V5
RXZlbnRGaXh0dXJlKiBmaXh0dXJlID0gKEtleUV2ZW50Rml4dHVyZSopZGF0YTsKKyAgICB3ZWJr
aXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoZml4dHVyZS0+d2ViVmlldywgZml4dHVyZS0+aW5mby0+
cGFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRleHQvaHRtbCIsICJ1dGYt
OCIsICJmaWxlOi8vIik7CisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZCBzZXR1
cF9rZXlldmVudF90ZXN0KEtleUV2ZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBk
YXRhLCBHQ2FsbGJhY2sgbG9hZF9ldmVudF9jYWxsYmFjaykKK3sKKyAgICBmaXh0dXJlLT5pbmZv
ID0gKFRlc3RJbmZvKilkYXRhOworICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2luZG93
LCAibWFwLWV2ZW50IiwKKyAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sobWFwX2V2ZW50
X2NiKSwgZml4dHVyZSk7CisKKyAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMoR1RLX1dJREdFVChm
aXh0dXJlLT53ZWJWaWV3KSk7CisgICAgZ3RrX3dpZGdldF9zaG93KGZpeHR1cmUtPndpbmRvdyk7
CisgICAgZ3RrX3dpZGdldF9zaG93KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldykpOworICAg
IGd0a193aW5kb3dfcHJlc2VudChHVEtfV0lORE9XKGZpeHR1cmUtPndpbmRvdykpOworCisgICAg
Z19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIs
CisgICAgICAgICAgICAgICAgICAgICBsb2FkX2V2ZW50X2NhbGxiYWNrLCBmaXh0dXJlKTsKKwor
ICAgIGdfbWFpbl9sb29wX3J1bihmaXh0dXJlLT5sb29wKTsKK30KKworc3RhdGljIHZvaWQgdGVz
dF9rZXlwcmVzc19ldmVudHMoS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVy
IGRhdGEpCit7CisgICAgc2V0dXBfa2V5ZXZlbnRfdGVzdChmaXh0dXJlLCBkYXRhLCBHX0NBTExC
QUNLKHRlc3Rfa2V5cHJlc3NfZXZlbnRzX2xvYWRfc3RhdHVzX2NiKSk7Cit9CisKK3N0YXRpYyBn
Ym9vbGVhbiBlbGVtZW50X3RleHRfZXF1YWxfdG8oSlNDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0
IGdjaGFyKiB0ZXh0KQoreworICAgIEpTU3RyaW5nUmVmIHNjcmlwdFN0cmluZyA9IEpTU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKAorICAgICAgIndpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50
QnlJZChcImluXCIpLnZhbHVlOyIpOworICAgIEpTVmFsdWVSZWYgdmFsdWUgPSBKU0V2YWx1YXRl
U2NyaXB0KGNvbnRleHQsIHNjcmlwdFN0cmluZywgMCwgMCwgMCwgMCk7CisgICAgSlNTdHJpbmdS
ZWxlYXNlKHNjcmlwdFN0cmluZyk7CisKKyAgICAvLyBJZiB0aGUgdmFsdWUgaXNuJ3QgYSBzdHJp
bmcsIHRoZSBlbGVtZW50IGlzIHByb2JhYmx5IGEgZGl2CisgICAgLy8gc28gZ3JhYiB0aGUgaW5u
ZXJUZXh0IGluc3RlYWQuCisgICAgaWYgKCFKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgdmFsdWUp
KSB7CisgICAgICAgIEpTU3RyaW5nUmVmIHNjcmlwdFN0cmluZyA9IEpTU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKAorICAgICAgICAgICJ3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
XCJpblwiKS5pbm5lclRleHQ7Iik7CisgICAgICAgIHZhbHVlID0gSlNFdmFsdWF0ZVNjcmlwdChj
b250ZXh0LCBzY3JpcHRTdHJpbmcsIDAsIDAsIDAsIDApOworICAgICAgICBKU1N0cmluZ1JlbGVh
c2Uoc2NyaXB0U3RyaW5nKTsKKyAgICB9CisKKyAgICBnX2Fzc2VydChKU1ZhbHVlSXNTdHJpbmco
Y29udGV4dCwgdmFsdWUpKTsKKyAgICBKU1N0cmluZ1JlZiBpbnB1dFN0cmluZyA9IEpTVmFsdWVU
b1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsIDApOworICAgIGdfYXNzZXJ0KGlucHV0U3RyaW5n
KTsKKworICAgIGdpbnQgc2l6ZSA9IEpTU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShp
bnB1dFN0cmluZyk7CisgICAgZ2NoYXIqIGNTdHJpbmcgPSBnX21hbGxvYyhzaXplKTsKKyAgICBK
U1N0cmluZ0dldFVURjhDU3RyaW5nKGlucHV0U3RyaW5nLCBjU3RyaW5nLCBzaXplKTsKKyAgICBK
U1N0cmluZ1JlbGVhc2UoaW5wdXRTdHJpbmcpOworCisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gZ191
dGY4X2NvbGxhdGUoY1N0cmluZywgdGV4dCkgPT0gMDsKKyAgICBnX2ZyZWUoY1N0cmluZyk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgdGVzdF9pbWVfbG9hZF9zdGF0dXNf
Y2IoV2ViS2l0V2ViVmlldyogd2ViVmlldywgR1BhcmFtU3BlYyogc3BlYywgZ3BvaW50ZXIgZGF0
YSkKK3sKKyAgICBLZXlFdmVudEZpeHR1cmUqIGZpeHR1cmUgPSAoS2V5RXZlbnRGaXh0dXJlKilk
YXRhOworICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9s
b2FkX3N0YXR1cyh3ZWJWaWV3KTsKKyAgICBpZiAoc3RhdHVzICE9IFdFQktJVF9MT0FEX0ZJTklT
SEVEKQorICAgICAgICByZXR1cm47CisKKyAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCA9
IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X2dsb2JhbF9jb250ZXh0KAorICAgICAgICB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X21haW5fZnJhbWUod2ViVmlldykpOworICAgIGdfYXNzZXJ0KGNvbnRleHQpOwor
CisgICAgR3RrSU1Db250ZXh0KiBpbUNvbnRleHQgPSAwOworICAgIGdfb2JqZWN0X2dldCh3ZWJW
aWV3LCAiaW0tY29udGV4dCIsICZpbUNvbnRleHQsIE5VTEwpOworICAgIGdfYXNzZXJ0KGltQ29u
dGV4dCk7CisKKyAgICAvLyBUZXN0IHRoYXQgY29tbWl0cyB0aGF0IGhhcHBlbiBvdXRzaWRlIG9m
IGtleSBldmVudHMKKyAgICAvLyBjaGFuZ2UgdGhlIHRleHQgZmllbGQgaW1tZWRpYXRlbHkuIFRo
aXMgY2xvc2VseSByZXBsaWNhdGVzCisgICAgLy8gdGhlIGJlaGF2aW9yIG9mIFNDSU0uCisgICAg
Z19hc3NlcnQoZWxlbWVudF90ZXh0X2VxdWFsX3RvKGNvbnRleHQsICIiKSk7CisgICAgZ19zaWdu
YWxfZW1pdF9ieV9uYW1lKGltQ29udGV4dCwgImNvbW1pdCIsICJhIik7CisgICAgZ19hc3NlcnQo
ZWxlbWVudF90ZXh0X2VxdWFsX3RvKGNvbnRleHQsICJhIikpOworICAgIGdfc2lnbmFsX2VtaXRf
YnlfbmFtZShpbUNvbnRleHQsICJjb21taXQiLCAiYiIpOworICAgIGdfYXNzZXJ0KGVsZW1lbnRf
dGV4dF9lcXVhbF90byhjb250ZXh0LCAiYWIiKSk7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1l
KGltQ29udGV4dCwgImNvbW1pdCIsICJjIik7CisgICAgZ19hc3NlcnQoZWxlbWVudF90ZXh0X2Vx
dWFsX3RvKGNvbnRleHQsICJhYmMiKSk7CisKKyAgICBnX29iamVjdF91bnJlZihpbUNvbnRleHQp
OworICAgIGdfbWFpbl9sb29wX3F1aXQoZml4dHVyZS0+bG9vcCk7Cit9CisKK3N0YXRpYyB2b2lk
IHRlc3RfaW1lKEtleUV2ZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQor
eworICAgIHNldHVwX2tleWV2ZW50X3Rlc3QoZml4dHVyZSwgZGF0YSwgR19DQUxMQkFDSyh0ZXN0
X2ltZV9sb2FkX3N0YXR1c19jYikpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gdmVyaWZ5X2NvbnRl
bnRzKGdwb2ludGVyIGRhdGEpCit7CisgICAgS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJlID0gKEtl
eUV2ZW50Rml4dHVyZSopZGF0YTsKKyAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCA9IHdl
YmtpdF93ZWJfZnJhbWVfZ2V0X2dsb2JhbF9jb250ZXh0KAorICAgICAgICB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X21haW5fZnJhbWUoZml4dHVyZS0+d2ViVmlldykpOworICAgIGdfYXNzZXJ0KGNvbnRl
eHQpOworCisgICAgZ19hc3NlcnQoZWxlbWVudF90ZXh0X2VxdWFsX3RvKGNvbnRleHQsIGZpeHR1
cmUtPmluZm8tPnRleHQpKTsKKyAgICBnX21haW5fbG9vcF9xdWl0KGZpeHR1cmUtPmxvb3ApOwor
ICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9ibG9ja2luZ19sb2FkX3N0
YXR1c19jYihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHUGFyYW1TcGVjKiBzcGVjLCBncG9pbnRl
ciBkYXRhKQoreworICAgIEtleUV2ZW50Rml4dHVyZSogZml4dHVyZSA9IChLZXlFdmVudEZpeHR1
cmUqKWRhdGE7CisgICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X2xvYWRfc3RhdHVzKHdlYlZpZXcpOworICAgIGlmIChzdGF0dXMgIT0gV0VCS0lUX0xPQURf
RklOSVNIRUQpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSBmaXJzdCBrZXlwcmVzcyBl
dmVudCBzaG91bGQgbm90IG1vZGlmeSB0aGUgZmllbGQuCisgICAgZml4dHVyZS0+aW5mby0+dGV4
dCA9IGdfc3RyZHVwKCJiYyIpOworICAgIGlmICghZ3RrX3Rlc3Rfd2lkZ2V0X3NlbmRfa2V5KEdU
S19XSURHRVQoZml4dHVyZS0+d2ViVmlldyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnZGtfdW5pY29kZV90b19rZXl2YWwoJ2EnKSwgMCkpCisgICAgICAgIGdfYXNzZXJ0X25v
dF9yZWFjaGVkKCk7CisgICAgaWYgKCFndGtfdGVzdF93aWRnZXRfc2VuZF9rZXkoR1RLX1dJREdF
VChmaXh0dXJlLT53ZWJWaWV3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
ZGtfdW5pY29kZV90b19rZXl2YWwoJ2InKSwgMCkpCisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFj
aGVkKCk7CisgICAgaWYgKCFndGtfdGVzdF93aWRnZXRfc2VuZF9rZXkoR1RLX1dJREdFVChmaXh0
dXJlLT53ZWJWaWV3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGtfdW5p
Y29kZV90b19rZXl2YWwoJ2MnKSwgMCkpCisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7
CisKKyAgICBnX2lkbGVfYWRkKHZlcmlmeV9jb250ZW50cywgZml4dHVyZSk7Cit9CisKK3N0YXRp
YyB2b2lkIHRlc3RfYmxvY2tpbmcoS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2lu
dGVyIGRhdGEpCit7CisgICAgc2V0dXBfa2V5ZXZlbnRfdGVzdChmaXh0dXJlLCBkYXRhLCBHX0NB
TExCQUNLKHRlc3RfYmxvY2tpbmdfbG9hZF9zdGF0dXNfY2IpKTsKK30KKworI2lmIGRlZmluZWQo
R0RLX1dJTkRPV0lOR19YMTEpCitzdGF0aWMgdm9pZCB0ZXN0X3hpbV9sb2FkX3N0YXR1c19jYihX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHUGFyYW1TcGVjKiBzcGVjLCBncG9pbnRlciBkYXRhKQor
eworICAgIEtleUV2ZW50Rml4dHVyZSogZml4dHVyZSA9IChLZXlFdmVudEZpeHR1cmUqKWRhdGE7
CisgICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRf
c3RhdHVzKHdlYlZpZXcpOworICAgIGlmIChzdGF0dXMgIT0gV0VCS0lUX0xPQURfRklOSVNIRUQp
CisgICAgICAgIHJldHVybjsKKworICAgIEd0a0lNQ29udGV4dCogaW1Db250ZXh0ID0gMDsKKyAg
ICBnX29iamVjdF9nZXQod2ViVmlldywgImltLWNvbnRleHQiLCAmaW1Db250ZXh0LCBOVUxMKTsK
KyAgICBnX2Fzc2VydChpbUNvbnRleHQpOworCisgICAgZ2NoYXIqIG9yaWdpbmFsSWQgPSBnX3N0
cmR1cChndGtfaW1fbXVsdGljb250ZXh0X2dldF9jb250ZXh0X2lkKEdUS19JTV9NVUxUSUNPTlRF
WFQoaW1Db250ZXh0KSkpOworICAgIGd0a19pbV9tdWx0aWNvbnRleHRfc2V0X2NvbnRleHRfaWQo
R1RLX0lNX01VTFRJQ09OVEVYVChpbUNvbnRleHQpLCAieGltIik7CisKKyAgICAvLyBUZXN0IHRo
YXQgY29tbWl0cyB0aGF0IGhhcHBlbiBvdXRzaWRlIG9mIGtleSBldmVudHMKKyAgICAvLyBjaGFu
Z2UgdGhlIHRleHQgZmllbGQgaW1tZWRpYXRlbHkuIFRoaXMgY2xvc2VseSByZXBsaWNhdGVzCisg
ICAgLy8gdGhlIGJlaGF2aW9yIG9mIFNDSU0uCisgICAgZml4dHVyZS0+aW5mby0+dGV4dCA9IGdf
c3RyZHVwKCJkZWJpYW4iKTsKKyAgICBpZiAoIWd0a190ZXN0X3dpZGdldF9zZW5kX2tleShHVEtf
V0lER0VUKGZpeHR1cmUtPndlYlZpZXcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2RrX3VuaWNvZGVfdG9fa2V5dmFsKCdkJyksIDApKQorICAgICAgICBnX2Fzc2VydF9ub3Rf
cmVhY2hlZCgpOworICAgIGlmICghZ3RrX3Rlc3Rfd2lkZ2V0X3NlbmRfa2V5KEdUS19XSURHRVQo
Zml4dHVyZS0+d2ViVmlldyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdka191bmlj
b2RlX3RvX2tleXZhbCgnZScpLCAwKSkKKyAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsK
KyAgICBpZiAoIWd0a190ZXN0X3dpZGdldF9zZW5kX2tleShHVEtfV0lER0VUKGZpeHR1cmUtPndl
YlZpZXcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGtfdW5pY29kZV90b19rZXl2
YWwoJ2InKSwgMCkpCisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgaWYgKCFn
dGtfdGVzdF93aWRnZXRfc2VuZF9rZXkoR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RrX3VuaWNvZGVfdG9fa2V5dmFsKCdpJyksIDAp
KQorICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgIGlmICghZ3RrX3Rlc3Rfd2lk
Z2V0X3NlbmRfa2V5KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldyksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdka191bmljb2RlX3RvX2tleXZhbCgnYScpLCAwKSkKKyAgICAgICAg
Z19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICBpZiAoIWd0a190ZXN0X3dpZGdldF9zZW5kX2tl
eShHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnZGtfdW5pY29kZV90b19rZXl2YWwoJ24nKSwgMCkpCisgICAgICAgIGdfYXNzZXJ0X25v
dF9yZWFjaGVkKCk7CisKKyAgICBndGtfaW1fbXVsdGljb250ZXh0X3NldF9jb250ZXh0X2lkKEdU
S19JTV9NVUxUSUNPTlRFWFQoaW1Db250ZXh0KSwgb3JpZ2luYWxJZCk7CisgICAgZ19mcmVlKG9y
aWdpbmFsSWQpOworICAgIGdfb2JqZWN0X3VucmVmKGltQ29udGV4dCk7CisKKyAgICBnX2lkbGVf
YWRkKHZlcmlmeV9jb250ZW50cywgZml4dHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfeGlt
KEtleUV2ZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIHNl
dHVwX2tleWV2ZW50X3Rlc3QoZml4dHVyZSwgZGF0YSwgR19DQUxMQkFDSyh0ZXN0X3hpbV9sb2Fk
X3N0YXR1c19jYikpOworfQorI2VuZGlmCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJn
dikKK3sKKyAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7CisKKyAgICBnX3Rl
c3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOworCisKKyAgICAvLyBXZSds
bCB0ZXN0IGlucHV0IG9uIGEgc2xldyBvZiBkaWZmZXJlbnQgbm9kZSB0eXBlcy4gS2V5IGV2ZW50
cyB0bworICAgIC8vIHRleHQgaW5wdXRzIGFuZCBlZGl0YWJsZSBkaXZzIHNob3VsZCBiZSBtYXJr
ZWQgYXMgaGFuZGxlZC4gS2V5IGV2ZW50cworICAgIC8vIHRvIGJ1dHRvbnMgYW5kIGxpbmtzIHNo
b3VsZCBub3QuCisgICAgY29uc3QgY2hhciogdGV4dGlucHV0X2h0bWwgPSAiPGh0bWw+PGJvZHk+
PGlucHV0IGlkPVwiaW5cIiB0eXBlPVwidGV4dFwiPiIKKyAgICAgICAgIjxzY3JpcHQ+ZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ2luJykuZm9jdXMoKTs8L3NjcmlwdD48L2JvZHk+PC9odG1sPiI7
CisgICAgY29uc3QgY2hhciogYnV0dG9uX2h0bWwgPSAiPGh0bWw+PGJvZHk+PGlucHV0IGlkPVwi
aW5cIiB0eXBlPVwiYnV0dG9uXCI+IgorICAgICAgICAiPHNjcmlwdD5kb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnaW4nKS5mb2N1cygpOzwvc2NyaXB0PjwvYm9keT48L2h0bWw+IjsKKyAgICBjb25z
dCBjaGFyKiBsaW5rX2h0bWwgPSAiPGh0bWw+PGJvZHk+PGEgaHJlZj1cImh0dHA6Ly93d3cuZ25v
bWUub3JnXCIgaWQ9XCJpblwiPiIKKyAgICAgICAgIkxJTktZIE1DTElOS0VSU09OPC9hPjxzY3Jp
cHQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2luJykuZm9jdXMoKTs8L3NjcmlwdD4iCisgICAg
ICAgICI8L2JvZHk+PC9odG1sPiI7CisgICAgY29uc3QgY2hhciogZGl2X2h0bWwgPSAiPGh0bWw+
PGJvZHk+PGRpdiBpZD1cImluXCIgY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiPiIKKyAgICAgICAg
IjxzY3JpcHQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2luJykuZm9jdXMoKTs8L3NjcmlwdD48
L2JvZHk+PC9odG1sPiI7CisKKyAgICAvLyBUaGVzZSBhcmUgc2ltaWxhciB0byB0aGUgYmxvY2tz
IGFib3ZlLCBidXQgdGhleSBzaG91bGQgYmxvY2sgdGhlIGZpcnN0CisgICAgLy8ga2V5cHJlc3Mg
bW9kaWZ5aW5nIHRoZSBlZGl0YWJsZSBub2RlLgorICAgIGNvbnN0IGNoYXIqIHRleHRpbnB1dF9o
dG1sX2Jsb2NraW5nID0gIjxodG1sPjxib2R5PiIKKyAgICAgICAgIjxpbnB1dCBpZD1cImluXCIg
dHlwZT1cInRleHRcIiAiCisgICAgICAgICJvbmtleXByZXNzPVwiaWYgKGZpcnN0KSB7ZXZlbnQu
cHJldmVudERlZmF1bHQoKTtmaXJzdD1mYWxzZTt9XCI+IgorICAgICAgICAiPHNjcmlwdD5maXJz
dCA9IHRydWU7XG5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW4nKS5mb2N1cygpOzwvc2NyaXB0
PlxuIgorICAgICAgICAiPC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4iOworICAgIGNvbnN0IGNoYXIq
IGRpdl9odG1sX2Jsb2NraW5nID0gIjxodG1sPjxib2R5PiIKKyAgICAgICAgIjxkaXYgaWQ9XCJp
blwiIGNvbnRlbnRlZGl0YWJsZT1cInRydWVcIiAiCisgICAgICAgICJvbmtleXByZXNzPVwiaWYg
KGZpcnN0KSB7ZXZlbnQucHJldmVudERlZmF1bHQoKTtmaXJzdD1mYWxzZTt9XCI+IgorICAgICAg
ICAiPHNjcmlwdD5maXJzdCA9IHRydWU7IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbicpLmZv
Y3VzKCk7PC9zY3JpcHQ+XG4iCisgICAgICAgICI8L3NjcmlwdD48L2JvZHk+PC9odG1sPiI7CisK
KyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2tleWV2ZW50cy9ldmVudC10ZXh0aW5wdXQiLCBLZXlF
dmVudEZpeHR1cmUsCisgICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KHRleHRpbnB1dF9odG1s
LCBUUlVFKSwKKyAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3NldHVwLAorICAgICAg
ICAgICAgICAgdGVzdF9rZXlwcmVzc19ldmVudHMsCisgICAgICAgICAgICAgICBrZXlfZXZlbnRf
Zml4dHVyZV90ZWFyZG93bik7CisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9rZXlldmVudHMvZXZl
bnQtYnV0dG9ucyIsIEtleUV2ZW50Rml4dHVyZSwKKyAgICAgICAgICAgICAgIHRlc3RfaW5mb19u
ZXcoYnV0dG9uX2h0bWwsIEZBTFNFKSwKKyAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJl
X3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF9rZXlwcmVzc19ldmVudHMsCisgICAgICAgICAg
ICAgICBrZXlfZXZlbnRfZml4dHVyZV90ZWFyZG93bik7CisgICAgZ190ZXN0X2FkZCgiL3dlYmtp
dC9rZXlldmVudHMvZXZlbnQtbGluayIsIEtleUV2ZW50Rml4dHVyZSwKKyAgICAgICAgICAgICAg
IHRlc3RfaW5mb19uZXcobGlua19odG1sLCBGQUxTRSksCisgICAgICAgICAgICAgICBrZXlfZXZl
bnRfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3Rfa2V5cHJlc3NfZXZlbnRzLAor
ICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfdGVhcmRvd24pOworICAgIGdfdGVzdF9h
ZGQoIi93ZWJraXQva2V5ZXZlbnQvZXZlbnQtZGl2IiwgS2V5RXZlbnRGaXh0dXJlLAorICAgICAg
ICAgICAgICAgdGVzdF9pbmZvX25ldyhkaXZfaHRtbCwgVFJVRSksCisgICAgICAgICAgICAgICBr
ZXlfZXZlbnRfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3Rfa2V5cHJlc3NfZXZl
bnRzLAorICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfdGVhcmRvd24pOworICAgIGdf
dGVzdF9hZGQoIi93ZWJraXQva2V5ZXZlbnQvaW1lLXRleHRpbnB1dCIsIEtleUV2ZW50Rml4dHVy
ZSwKKyAgICAgICAgICAgICAgIHRlc3RfaW5mb19uZXcodGV4dGlucHV0X2h0bWwsIFRSVUUpLAor
ICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0
ZXN0X2ltZSwKKyAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3RlYXJkb3duKTsKKyAg
ICBnX3Rlc3RfYWRkKCIvd2Via2l0L2tleWV2ZW50L2ltZS1kaXYiLCBLZXlFdmVudEZpeHR1cmUs
CisgICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KGRpdl9odG1sLCBUUlVFKSwKKyAgICAgICAg
ICAgICAgIGtleV9ldmVudF9maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF9pbWUs
CisgICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV90ZWFyZG93bik7CisgICAgZ190ZXN0
X2FkZCgiL3dlYmtpdC9rZXlldmVudC9ibG9jay10ZXh0aW5wdXQiLCBLZXlFdmVudEZpeHR1cmUs
CisgICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KHRleHRpbnB1dF9odG1sX2Jsb2NraW5nLCBU
UlVFKSwKKyAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3NldHVwLAorICAgICAgICAg
ICAgICAgdGVzdF9ibG9ja2luZywKKyAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3Rl
YXJkb3duKTsKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2tleWV2ZW50L2Jsb2NrLWRpdiIsIEtl
eUV2ZW50Rml4dHVyZSwKKyAgICAgICAgICAgICAgIHRlc3RfaW5mb19uZXcoZGl2X2h0bWxfYmxv
Y2tpbmcsIFRSVUUpLAorICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfc2V0dXAsCisg
ICAgICAgICAgICAgICB0ZXN0X2Jsb2NraW5nLAorICAgICAgICAgICAgICAga2V5X2V2ZW50X2Zp
eHR1cmVfdGVhcmRvd24pOworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpCisgICAgZ190
ZXN0X2FkZCgiL3dlYmtpdC9rZXlldmVudC94aW0tdGV4dGlucHV0IiwgS2V5RXZlbnRGaXh0dXJl
LAorICAgICAgICAgICAgICAgdGVzdF9pbmZvX25ldyh0ZXh0aW5wdXRfaHRtbCwgVFJVRSksCisg
ICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRl
c3RfeGltLAorICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfdGVhcmRvd24pOworICAg
IGdfdGVzdF9hZGQoIi93ZWJraXQva2V5ZXZlbnQveGltLWRpdiIsIEtleUV2ZW50Rml4dHVyZSwK
KyAgICAgICAgICAgICAgIHRlc3RfaW5mb19uZXcoZGl2X2h0bWwsIFRSVUUpLAorICAgICAgICAg
ICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0X3hpbSwK
KyAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3RlYXJkb3duKTsKKyNlbmRpZgorCisg
ICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsKK30KKwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGxvYWRpbmcuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0R3RrL3Rlc3Rsb2FkaW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uYTBhOTIwZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0R3RrL3Rlc3Rsb2FkaW5nLmMKQEAgLTAsMCArMSw0MzUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgR3VzdGF2byBOb3JvbmhhIFNpbHZhCisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPGd0
ay9ndGsuaD4KKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4K
KyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+CisKKy8qIFRoaXMgc3RyaW5nIGhhcyB0byBiZSBy
YXRoZXIgYmlnIGJlY2F1c2Ugb2YgdGhlIGNhbmNlbGxlZCB0ZXN0IC0gaXQKKyAqIGxvb2tzIGxp
a2Ugc291cCByZWZ1c2VzIHRvIHNlbmQgb3IgcmVjZWl2ZSBhIHRvbyBzbWFsbCBjaHVuayAqLwor
I2RlZmluZSBIVE1MX1NUUklORyAiPGh0bWw+PGJvZHk+VGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nITwvYm9keT48L2h0bWw+IgorCitT
b3VwVVJJKiBiYXNlX3VyaTsKKworLyogRm9yIHJlYWwgcmVxdWVzdCB0ZXN0aW5nICovCitzdGF0
aWMgdm9pZAorc2VydmVyX2NhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2Uq
IG1zZywKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiBxdWVy
eSwKKyAgICAgICAgICAgICAgICBTb3VwQ2xpZW50Q29udGV4dCogY29udGV4dCwgZ3BvaW50ZXIg
ZGF0YSkKK3sKKyAgICBpZiAobXNnLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7CisgICAg
ICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1zZywgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVO
VEVEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9zZXRfc3Rh
dHVzKG1zZywgU09VUF9TVEFUVVNfT0spOworCisgICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIv
dGVzdF9sb2FkaW5nX3N0YXR1cyIpIHx8IGdfc3RyX2VxdWFsKHBhdGgsICIvdGVzdF9sb2FkaW5n
X3N0YXR1czIiKSkKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1zZy0+cmVzcG9u
c2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBIVE1MX1NUUklORywgc3RybGVuKEhUTUxfU1RS
SU5HKSk7CisgICAgZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi90ZXN0X2xvYWRfZXJyb3Ii
KSkgeworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX0NB
TlRfQ09OTkVDVCk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3Rlc3RfbG9h
ZGluZ19jYW5jZWxsZWQiKSkgeworICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19zZXRfZW5j
b2RpbmcobXNnLT5yZXNwb25zZV9oZWFkZXJzLCBTT1VQX0VOQ09ESU5HX0NIVU5LRUQpOworICAg
ICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobXNnLT5yZXNwb25zZV9ib2R5LCBTT1VQX01F
TU9SWV9TVEFUSUMsIEhUTUxfU1RSSU5HLCBzdHJsZW4oSFRNTF9TVFJJTkcpKTsKKyAgICAgICAg
c291cF9zZXJ2ZXJfdW5wYXVzZV9tZXNzYWdlKHNlcnZlciwgbXNnKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1zZy0+cmVzcG9uc2Vf
Ym9keSk7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3
OworICAgIEdNYWluTG9vcCAqbG9vcDsKKyAgICBnYm9vbGVhbiBoYXNfYmVlbl9wcm92aXNpb25h
bDsKKyAgICBnYm9vbGVhbiBoYXNfYmVlbl9jb21taXR0ZWQ7CisgICAgZ2Jvb2xlYW4gaGFzX2Jl
ZW5fZmlyc3RfdmlzdWFsbHlfbm9uX2VtcHR5X2xheW91dDsKKyAgICBnYm9vbGVhbiBoYXNfYmVl
bl9maW5pc2hlZDsKKyAgICBnYm9vbGVhbiBoYXNfYmVlbl9mYWlsZWQ7CisgICAgZ2Jvb2xlYW4g
aGFzX2JlZW5fbG9hZF9lcnJvcjsKK30gV2ViTG9hZGluZ0ZpeHR1cmU7CisKK3N0YXRpYyB2b2lk
IHdlYl9sb2FkaW5nX2ZpeHR1cmVfc2V0dXAoV2ViTG9hZGluZ0ZpeHR1cmUqIGZpeHR1cmUsIGdj
b25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBmaXh0dXJlLT53ZWJWaWV3ID0gV0VCS0lUX1dFQl9W
SUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZml4dHVyZS0+bG9vcCA9IGdfbWFpbl9s
b29wX25ldyhOVUxMLCBUUlVFKTsKKyAgICBnX29iamVjdF9yZWZfc2luayhmaXh0dXJlLT53ZWJW
aWV3KTsKKyAgICBmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCA9IEZBTFNFOworICAgIGZp
eHR1cmUtPmhhc19iZWVuX2NvbW1pdHRlZCA9IEZBTFNFOworICAgIGZpeHR1cmUtPmhhc19iZWVu
X2ZpcnN0X3Zpc3VhbGx5X25vbl9lbXB0eV9sYXlvdXQgPSBGQUxTRTsKKyAgICBmaXh0dXJlLT5o
YXNfYmVlbl9maW5pc2hlZCA9IEZBTFNFOworICAgIGZpeHR1cmUtPmhhc19iZWVuX2ZhaWxlZCA9
IEZBTFNFOworICAgIGZpeHR1cmUtPmhhc19iZWVuX2xvYWRfZXJyb3IgPSBGQUxTRTsKK30KKwor
c3RhdGljIHZvaWQgd2ViX2xvYWRpbmdfZml4dHVyZV90ZWFyZG93bihXZWJMb2FkaW5nRml4dHVy
ZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGdfb2JqZWN0X3VucmVmKGZp
eHR1cmUtPndlYlZpZXcpOworICAgIGdfbWFpbl9sb29wX3VucmVmKGZpeHR1cmUtPmxvb3ApOwor
fQorCitzdGF0aWMgY2hhciogZ2V0X3VyaV9mb3JfcGF0aChjb25zdCBjaGFyKiBwYXRoKQorewor
ICAgIFNvdXBVUkkqIHVyaTsKKyAgICBjaGFyKiB1cmlfc3RyaW5nOworCisgICAgdXJpID0gc291
cF91cmlfbmV3X3dpdGhfYmFzZShiYXNlX3VyaSwgcGF0aCk7CisgICAgdXJpX3N0cmluZyA9IHNv
dXBfdXJpX3RvX3N0cmluZyh1cmksIEZBTFNFKTsKKyAgICBzb3VwX3VyaV9mcmVlICh1cmkpOwor
CisgICAgcmV0dXJuIHVyaV9zdHJpbmc7Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRfZmluaXNoZWRf
Y2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIFdlYktpdFdlYkZyYW1lKiB3ZWJfZnJhbWUsIFdl
YkxvYWRpbmdGaXh0dXJlKiBmaXh0dXJlKQoreworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19i
ZWVuX3Byb3Zpc2lvbmFsKTsKKyAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9jb21taXR0
ZWQpOworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX2ZpcnN0X3Zpc3VhbGx5X25vbl9l
bXB0eV9sYXlvdXQpOworCisgICAgZ19tYWluX2xvb3BfcXVpdChmaXh0dXJlLT5sb29wKTsKK30K
KworCitzdGF0aWMgdm9pZCBzdGF0dXNfY2hhbmdlZF9jYihHT2JqZWN0KiBvYmplY3QsIEdQYXJh
bVNwZWMqIHBzcGVjLCBXZWJMb2FkaW5nRml4dHVyZSogZml4dHVyZSkKK3sKKyAgICBXZWJLaXRM
b2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMoV0VCS0lU
X1dFQl9WSUVXKG9iamVjdCkpOworCisgICAgc3dpdGNoIChzdGF0dXMpIHsKKyAgICBjYXNlIFdF
QktJVF9MT0FEX1BST1ZJU0lPTkFMOgorICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2Jl
ZW5fcHJvdmlzaW9uYWwpOworICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fY29t
bWl0dGVkKTsKKyAgICAgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX2ZpcnN0X3Zpc3Vh
bGx5X25vbl9lbXB0eV9sYXlvdXQpOworICAgICAgICBmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNp
b25hbCA9IFRSVUU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0xPQURfQ09NTUlU
VEVEOgorICAgICAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCk7Cisg
ICAgICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNfYmVlbl9jb21taXR0ZWQpOworICAgICAgICBn
X2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fZmlyc3RfdmlzdWFsbHlfbm9uX2VtcHR5X2xheW91
dCk7CisgICAgICAgIGZpeHR1cmUtPmhhc19iZWVuX2NvbW1pdHRlZCA9IFRSVUU7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0xPQURfRklSU1RfVklTVUFMTFlfTk9OX0VNUFRZX0xB
WU9VVDoKKyAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwpOwor
ICAgICAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9jb21taXR0ZWQpOworICAgICAgICBn
X2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fZmlyc3RfdmlzdWFsbHlfbm9uX2VtcHR5X2xheW91
dCk7CisgICAgICAgIGZpeHR1cmUtPmhhc19iZWVuX2ZpcnN0X3Zpc3VhbGx5X25vbl9lbXB0eV9s
YXlvdXQgPSBUUlVFOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9MT0FEX0ZJTklT
SEVEOgorICAgICAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCk7Cisg
ICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX2NvbW1pdHRlZCk7CisgICAgICAgIGdf
YXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX2ZpcnN0X3Zpc3VhbGx5X25vbl9lbXB0eV9sYXlvdXQp
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBnX2Fzc2VydF9ub3RfcmVh
Y2hlZCgpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgdGVzdF9sb2FkaW5nX3N0YXR1cyhXZWJM
b2FkaW5nRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGNoYXIq
IHVyaV9zdHJpbmc7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl92aWV3X2dldF9s
b2FkX3N0YXR1cyhmaXh0dXJlLT53ZWJWaWV3KSwgPT0sIFdFQktJVF9MT0FEX1BST1ZJU0lPTkFM
KTsKKworICAgIGdfb2JqZWN0X2Nvbm5lY3QoR19PQkpFQ1QoZml4dHVyZS0+d2ViVmlldyksCisg
ICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjpub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxM
QkFDSyhzdGF0dXNfY2hhbmdlZF9jYiksIGZpeHR1cmUsCisgICAgICAgICAgICAgICAgICAgICAi
c2lnbmFsOjpsb2FkLWZpbmlzaGVkIiwgR19DQUxMQkFDSyhsb2FkX2ZpbmlzaGVkX2NiKSwgZml4
dHVyZSwKKyAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgdXJpX3N0cmluZyA9IGdl
dF91cmlfZm9yX3BhdGgoIi90ZXN0X2xvYWRpbmdfc3RhdHVzIik7CisKKyAgICAvKiBsb2FkX3Vy
aSB3aWxsIHRyaWdnZXIgdGhlIG5hdmlnYXRpb24tcG9saWN5LWRlY2lzaW9uLXJlcXVlc3RlZAor
ICAgICAqIHNpZ25hbCBlbWlzc2lvbjsKKyAgICAgKi8KKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9h
ZF91cmkoZml4dHVyZS0+d2ViVmlldywgdXJpX3N0cmluZyk7CisgICAgZ19mcmVlKHVyaV9zdHJp
bmcpOworCisgICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1cmUtPmxvb3ApOworfQorCitzdGF0aWMg
dm9pZCBsb2FkX2Vycm9yX3N0YXR1c19jaGFuZ2VkX2NiKEdPYmplY3QqIG9iamVjdCwgR1BhcmFt
U3BlYyogcHNwZWMsIFdlYkxvYWRpbmdGaXh0dXJlKiBmaXh0dXJlKQoreworICAgIFdlYktpdExv
YWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyhXRUJLSVRf
V0VCX1ZJRVcob2JqZWN0KSk7CisKKyAgICBzd2l0Y2goc3RhdHVzKSB7CisgICAgY2FzZSBXRUJL
SVRfTE9BRF9QUk9WSVNJT05BTDoKKyAgICAgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVu
X3Byb3Zpc2lvbmFsKTsKKyAgICAgICAgZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwgPSBU
UlVFOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9MT0FEX0NPTU1JVFRFRDoKKyAg
ICAgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX2NvbW1pdHRlZCk7CisgICAgICAgIGZp
eHR1cmUtPmhhc19iZWVuX2NvbW1pdHRlZCA9IFRSVUU7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgV0VCS0lUX0xPQURfRklOSVNIRUQ6CisgICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19i
ZWVuX3Byb3Zpc2lvbmFsKTsKKyAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fbG9h
ZF9lcnJvcik7CisgICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX2ZhaWxlZCk7Cisg
ICAgICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNfYmVlbl9maW5pc2hlZCk7CisgICAgICAgIGZp
eHR1cmUtPmhhc19iZWVuX2ZpbmlzaGVkID0gVFJVRTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBXRUJLSVRfTE9BRF9GQUlMRUQ6CisgICAgICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNfYmVl
bl9mYWlsZWQpOworICAgICAgICBmaXh0dXJlLT5oYXNfYmVlbl9mYWlsZWQgPSBUUlVFOworICAg
ICAgICBnX21haW5fbG9vcF9xdWl0KGZpeHR1cmUtPmxvb3ApOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBs
b2FkX2Vycm9yX2NiKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFdlYkZyYW1lKiBmcmFt
ZSwgY29uc3QgY2hhciogdXJpLCBHRXJyb3IgKmVycm9yLCBXZWJMb2FkaW5nRml4dHVyZSogZml4
dHVyZSkKK3sKKyAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCk7Cisg
ICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX2xvYWRfZXJyb3IpOworICAgIGZpeHR1cmUt
Pmhhc19iZWVuX2xvYWRfZXJyb3IgPSBUUlVFOworCisgICAgcmV0dXJuIEZBTFNFOworfQorCitz
dGF0aWMgdm9pZCB0ZXN0X2xvYWRpbmdfZXJyb3IoV2ViTG9hZGluZ0ZpeHR1cmUqIGZpeHR1cmUs
IGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBjaGFyKiB1cmlfc3RyaW5nOworCisgICAgZ190
ZXN0X2J1ZygiMjg4NDIiKTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2ViVmll
dywgImxvYWQtZXJyb3IiLCBHX0NBTExCQUNLKGxvYWRfZXJyb3JfY2IpLCBmaXh0dXJlKTsKKyAg
ICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVz
IiwgR19DQUxMQkFDSyhsb2FkX2Vycm9yX3N0YXR1c19jaGFuZ2VkX2NiKSwgZml4dHVyZSk7CisK
KyAgICB1cmlfc3RyaW5nID0gZ2V0X3VyaV9mb3JfcGF0aCgiL3Rlc3RfbG9hZF9lcnJvciIpOwor
ICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaShmaXh0dXJlLT53ZWJWaWV3LCB1cmlfc3RyaW5n
KTsKKyAgICBnX2ZyZWUodXJpX3N0cmluZyk7CisKKyAgICBnX21haW5fbG9vcF9ydW4oZml4dHVy
ZS0+bG9vcCk7CisKKyAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCk7
CisgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX2NvbW1pdHRlZCk7CisgICAgZ19hc3Nl
cnQoZml4dHVyZS0+aGFzX2JlZW5fbG9hZF9lcnJvcik7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+
aGFzX2JlZW5fZmFpbGVkKTsKKyAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fZmluaXNo
ZWQpOworfQorCisvKiBDYW5jZWxsZWQgbG9hZCAqLworCitzdGF0aWMgZ2Jvb2xlYW4gbG9hZF9j
YW5jZWxsZWRfY2IoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1l
LCBjb25zdCBjaGFyKiB1cmksIEdFcnJvciAqZXJyb3IsIFdlYkxvYWRpbmdGaXh0dXJlKiBmaXh0
dXJlKQoreworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsKTsKKyAg
ICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9mYWlsZWQpOworICAgIGdfYXNzZXJ0KCFmaXh0
dXJlLT5oYXNfYmVlbl9sb2FkX2Vycm9yKTsKKyAgICBnX2Fzc2VydChlcnJvci0+Y29kZSA9PSBX
RUJLSVRfTkVUV09SS19FUlJPUl9DQU5DRUxMRUQpOworICAgIGZpeHR1cmUtPmhhc19iZWVuX2xv
YWRfZXJyb3IgPSBUUlVFOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVh
biBzdG9wX2xvYWQgKGdwb2ludGVyIGRhdGEpCit7CisgICAgd2Via2l0X3dlYl92aWV3X3N0b3Bf
bG9hZGluZyhXRUJLSVRfV0VCX1ZJRVcoZGF0YSkpOworICAgIHJldHVybiBGQUxTRTsKK30KKwor
c3RhdGljIHZvaWQgbG9hZF9jYW5jZWxsZWRfc3RhdHVzX2NoYW5nZWRfY2IoR09iamVjdCogb2Jq
ZWN0LCBHUGFyYW1TcGVjKiBwc3BlYywgV2ViTG9hZGluZ0ZpeHR1cmUqIGZpeHR1cmUpCit7Cisg
ICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3Rh
dHVzKFdFQktJVF9XRUJfVklFVyhvYmplY3QpKTsKKworICAgIHN3aXRjaChzdGF0dXMpIHsKKyAg
ICBjYXNlIFdFQktJVF9MT0FEX1BST1ZJU0lPTkFMOgorICAgICAgICBnX2Fzc2VydCghZml4dHVy
ZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwpOworICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFz
X2JlZW5fZmFpbGVkKTsKKyAgICAgICAgZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwgPSBU
UlVFOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9MT0FEX0NPTU1JVFRFRDoKKyAg
ICAgICAgZ19pZGxlX2FkZCAoc3RvcF9sb2FkLCBvYmplY3QpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFdFQktJVF9MT0FEX0ZBSUxFRDoKKyAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFz
X2JlZW5fcHJvdmlzaW9uYWwpOworICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5f
ZmFpbGVkKTsKKyAgICAgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX2xvYWRfZXJyb3Ip
OworICAgICAgICBmaXh0dXJlLT5oYXNfYmVlbl9mYWlsZWQgPSBUUlVFOworICAgICAgICBnX21h
aW5fbG9vcF9xdWl0KGZpeHR1cmUtPmxvb3ApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdF
QktJVF9MT0FEX0ZJTklTSEVEOgorICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0
YXRpYyB2b2lkIHRlc3RfbG9hZGluZ19jYW5jZWxsZWQoV2ViTG9hZGluZ0ZpeHR1cmUqIGZpeHR1
cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBjaGFyKiB1cmlfc3RyaW5nOworCisgICAg
Z190ZXN0X2J1ZygiMjk2NDQiKTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2Vi
VmlldywgImxvYWQtZXJyb3IiLCBHX0NBTExCQUNLKGxvYWRfY2FuY2VsbGVkX2NiKSwgZml4dHVy
ZSk7CisgICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53ZWJWaWV3LCAibm90aWZ5Ojpsb2Fk
LXN0YXR1cyIsIEdfQ0FMTEJBQ0sobG9hZF9jYW5jZWxsZWRfc3RhdHVzX2NoYW5nZWRfY2IpLCBm
aXh0dXJlKTsKKworICAgIHVyaV9zdHJpbmcgPSBnZXRfdXJpX2Zvcl9wYXRoKCIvdGVzdF9sb2Fk
aW5nX2NhbmNlbGxlZCIpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaShmaXh0dXJlLT53
ZWJWaWV3LCB1cmlfc3RyaW5nKTsKKyAgICBnX2ZyZWUodXJpX3N0cmluZyk7CisKKyAgICBnX21h
aW5fbG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRfZ29iYWNr
X3N0YXR1c19jaGFuZ2VkX2NiKEdPYmplY3QqIG9iamVjdCwgR1BhcmFtU3BlYyogcHNwZWMsIFdl
YkxvYWRpbmdGaXh0dXJlKiBmaXh0dXJlKQoreworICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVz
ID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyhXRUJLSVRfV0VCX1ZJRVcob2JqZWN0
KSk7CisKKyAgICBzd2l0Y2goc3RhdHVzKSB7CisgICAgY2FzZSBXRUJLSVRfTE9BRF9QUk9WSVNJ
T05BTDoKKyAgICAgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsKTsK
KyAgICAgICAgZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwgPSBUUlVFOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFdFQktJVF9MT0FEX0NPTU1JVFRFRDoKKyAgICAgICAgZ19hc3NlcnQo
Zml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwpOworICAgICAgICBmaXh0dXJlLT5oYXNfYmVl
bl9jb21taXR0ZWQgPSBUUlVFOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9MT0FE
X0ZBSUxFRDoKKyAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBXRUJLSVRfTE9BRF9GSU5JU0hFRDoKKyAgICAgICAgZ19hc3NlcnQoZml4dHVy
ZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwpOworICAgICAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNf
YmVlbl9jb21taXR0ZWQpOworICAgICAgICBmaXh0dXJlLT5oYXNfYmVlbl9maW5pc2hlZCA9IFRS
VUU7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQoZml4dHVyZS0+bG9vcCk7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZv
aWQgbG9hZF93ZW50YmFja19zdGF0dXNfY2hhbmdlZF9jYihHT2JqZWN0KiBvYmplY3QsIEdQYXJh
bVNwZWMqIHBzcGVjLCBXZWJMb2FkaW5nRml4dHVyZSogZml4dHVyZSkKK3sKKyAgICBXZWJLaXRM
b2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMoV0VCS0lU
X1dFQl9WSUVXKG9iamVjdCkpOworICAgIGNoYXIqIHVyaV9zdHJpbmc7CisgICAgY2hhciogdXJp
X3N0cmluZzI7CisKKyAgICB1cmlfc3RyaW5nID0gZ2V0X3VyaV9mb3JfcGF0aCgiL3Rlc3RfbG9h
ZGluZ19zdGF0dXMiKTsKKyAgICB1cmlfc3RyaW5nMiA9IGdldF91cmlfZm9yX3BhdGgoIi90ZXN0
X2xvYWRpbmdfc3RhdHVzMiIpOworCisgICAgc3dpdGNoKHN0YXR1cykgeworICAgIGNhc2UgV0VC
S0lUX0xPQURfUFJPVklTSU9OQUw6CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X3VyaShmaXh0dXJlLT53ZWJWaWV3KSwgPT0sIHVyaV9zdHJpbmcyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBXRUJLSVRfTE9BRF9DT01NSVRURUQ6CisgICAgICAgIGdfYXNz
ZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaShmaXh0dXJlLT53ZWJWaWV3KSwgPT0s
IHVyaV9zdHJpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9MT0FEX0ZBSUxF
RDoKKyAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBXRUJLSVRfTE9BRF9GSU5JU0hFRDoKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtp
dF93ZWJfdmlld19nZXRfdXJpKGZpeHR1cmUtPndlYlZpZXcpLCA9PSwgdXJpX3N0cmluZyk7Cisg
ICAgICAgIGdfbWFpbl9sb29wX3F1aXQoZml4dHVyZS0+bG9vcCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGdfZnJlZSh1cmlfc3Ry
aW5nKTsKKyAgICBnX2ZyZWUodXJpX3N0cmluZzIpOworfQorCitzdGF0aWMgdm9pZCBsb2FkX2Vy
cm9yX3Rlc3QoV2ViS2l0V2ViVmlldyogd2VidmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLCBj
b25zdCBjaGFyKiB1cmksIEdFcnJvciogZXJyb3IpCit7CisgICAgZ19kZWJ1ZygiRXJyb3I6ICVz
IiwgZXJyb3ItPm1lc3NhZ2UpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2xvYWRpbmdfZ29iYWNr
KFdlYkxvYWRpbmdGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAg
Y2hhciogdXJpX3N0cmluZzsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2ViVmll
dywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLCBHX0NBTExCQUNLKGxvYWRfZ29iYWNrX3N0YXR1c19j
aGFuZ2VkX2NiKSwgZml4dHVyZSk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndl
YlZpZXcsICJsb2FkLWVycm9yIiwgR19DQUxMQkFDSyhsb2FkX2Vycm9yX3Rlc3QpLCBmaXh0dXJl
KTsKKworICAgIHVyaV9zdHJpbmcgPSBnZXRfdXJpX2Zvcl9wYXRoKCIvdGVzdF9sb2FkaW5nX3N0
YXR1cyIpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaShmaXh0dXJlLT53ZWJWaWV3LCB1
cmlfc3RyaW5nKTsKKyAgICBnX2ZyZWUodXJpX3N0cmluZyk7CisKKyAgICBnX21haW5fbG9vcF9y
dW4oZml4dHVyZS0+bG9vcCk7CisKKyAgICBmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCA9
IEZBTFNFOworICAgIGZpeHR1cmUtPmhhc19iZWVuX2NvbW1pdHRlZCA9IEZBTFNFOworICAgIGZp
eHR1cmUtPmhhc19iZWVuX2ZpcnN0X3Zpc3VhbGx5X25vbl9lbXB0eV9sYXlvdXQgPSBGQUxTRTsK
KyAgICBmaXh0dXJlLT5oYXNfYmVlbl9maW5pc2hlZCA9IEZBTFNFOworICAgIGZpeHR1cmUtPmhh
c19iZWVuX2ZhaWxlZCA9IEZBTFNFOworICAgIGZpeHR1cmUtPmhhc19iZWVuX2xvYWRfZXJyb3Ig
PSBGQUxTRTsKKworICAgIHVyaV9zdHJpbmcgPSBnZXRfdXJpX2Zvcl9wYXRoKCIvdGVzdF9sb2Fk
aW5nX3N0YXR1czIiKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkoZml4dHVyZS0+d2Vi
VmlldywgdXJpX3N0cmluZyk7CisgICAgZ19mcmVlKHVyaV9zdHJpbmcpOworCisgICAgZ19tYWlu
X2xvb3BfcnVuKGZpeHR1cmUtPmxvb3ApOworCisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29u
bmVjdF9ieV9mdW5jKGZpeHR1cmUtPndlYlZpZXcsIGxvYWRfZ29iYWNrX3N0YXR1c19jaGFuZ2Vk
X2NiLCBmaXh0dXJlKTsKKworICAgIGZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsID0gRkFM
U0U7CisgICAgZml4dHVyZS0+aGFzX2JlZW5fY29tbWl0dGVkID0gRkFMU0U7CisgICAgZml4dHVy
ZS0+aGFzX2JlZW5fZmlyc3RfdmlzdWFsbHlfbm9uX2VtcHR5X2xheW91dCA9IEZBTFNFOworICAg
IGZpeHR1cmUtPmhhc19iZWVuX2ZpbmlzaGVkID0gRkFMU0U7CisgICAgZml4dHVyZS0+aGFzX2Jl
ZW5fZmFpbGVkID0gRkFMU0U7CisgICAgZml4dHVyZS0+aGFzX2JlZW5fbG9hZF9lcnJvciA9IEZB
TFNFOworCisgICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53ZWJWaWV3LCAibm90aWZ5Ojps
b2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0sobG9hZF93ZW50YmFja19zdGF0dXNfY2hhbmdlZF9jYiks
IGZpeHR1cmUpOworICAgIHdlYmtpdF93ZWJfdmlld19nb19iYWNrKGZpeHR1cmUtPndlYlZpZXcp
OworCisgICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1cmUtPmxvb3ApOworCisgICAgZ19zaWduYWxf
aGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKGZpeHR1cmUtPndlYlZpZXcsIGxvYWRfd2VudGJh
Y2tfc3RhdHVzX2NoYW5nZWRfY2IsIGZpeHR1cmUpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywg
Y2hhcioqIGFyZ3YpCit7CisgICAgU291cFNlcnZlciogc2VydmVyOworCisgICAgZ3RrX3Rlc3Rf
aW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAgc2VydmVyID0gc291cF9zZXJ2ZXJfbmV3
KFNPVVBfU0VSVkVSX1BPUlQsIDAsIE5VTEwpOworICAgIHNvdXBfc2VydmVyX3J1bl9hc3luYyhz
ZXJ2ZXIpOworCisgICAgc291cF9zZXJ2ZXJfYWRkX2hhbmRsZXIoc2VydmVyLCBOVUxMLCBzZXJ2
ZXJfY2FsbGJhY2ssIE5VTEwsIE5VTEwpOworCisgICAgYmFzZV91cmkgPSBzb3VwX3VyaV9uZXco
Imh0dHA6Ly8xMjcuMC4wLjEvIik7CisgICAgc291cF91cmlfc2V0X3BvcnQoYmFzZV91cmksIHNv
dXBfc2VydmVyX2dldF9wb3J0KHNlcnZlcikpOworCisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2xvYWRpbmcv
c3RhdHVzIiwKKyAgICAgICAgICAgICAgIFdlYkxvYWRpbmdGaXh0dXJlLCBOVUxMLAorICAgICAg
ICAgICAgICAgd2ViX2xvYWRpbmdfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3Rf
bG9hZGluZ19zdGF0dXMsCisgICAgICAgICAgICAgICB3ZWJfbG9hZGluZ19maXh0dXJlX3RlYXJk
b3duKTsKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2xvYWRpbmcvZXJyb3IiLAorICAgICAgICAg
ICAgICAgV2ViTG9hZGluZ0ZpeHR1cmUsIE5VTEwsCisgICAgICAgICAgICAgICB3ZWJfbG9hZGlu
Z19maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF9sb2FkaW5nX2Vycm9yLAorICAg
ICAgICAgICAgICAgd2ViX2xvYWRpbmdfZml4dHVyZV90ZWFyZG93bik7CisgICAgZ190ZXN0X2Fk
ZCgiL3dlYmtpdC9sb2FkaW5nL2NhbmNlbGxlZCIsCisgICAgICAgICAgICAgICBXZWJMb2FkaW5n
Rml4dHVyZSwgTlVMTCwKKyAgICAgICAgICAgICAgIHdlYl9sb2FkaW5nX2ZpeHR1cmVfc2V0dXAs
CisgICAgICAgICAgICAgICB0ZXN0X2xvYWRpbmdfY2FuY2VsbGVkLAorICAgICAgICAgICAgICAg
d2ViX2xvYWRpbmdfZml4dHVyZV90ZWFyZG93bik7CisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9s
b2FkaW5nL2dvYmFjayIsCisgICAgICAgICAgICAgICBXZWJMb2FkaW5nRml4dHVyZSwgTlVMTCwK
KyAgICAgICAgICAgICAgIHdlYl9sb2FkaW5nX2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAg
ICB0ZXN0X2xvYWRpbmdfZ29iYWNrLAorICAgICAgICAgICAgICAgd2ViX2xvYWRpbmdfZml4dHVy
ZV90ZWFyZG93bik7CisgICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsKK30KKwpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdG1pbWVoYW5kbGluZy5jIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdG1pbWVoYW5kbGluZy5jCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjOTA2OTEKLS0tIC9kZXYvbnVsbAor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0bWltZWhhbmRsaW5n
LmMKQEAgLTAsMCArMSwyMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIE1pY2hh
ZWwgQWxvbnpvCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR3VzdGF2byBOb3JvbmhhIFNpbHZhCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJ0ZXN0X3V0aWxzLmgiCisKKyNpbmNsdWRlIDxn
bGliLmg+CisjaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAu
aD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+CisjaW5j
bHVkZSA8dW5pc3RkLmg+CisKK0dNYWluTG9vcCogbG9vcDsKK1NvdXBTZXNzaW9uICpzZXNzaW9u
OworY2hhciogYmFzZV91cmk7CisKKy8qIEZvciByZWFsIHJlcXVlc3QgdGVzdGluZyAqLworc3Rh
dGljIHZvaWQKK3NlcnZlcl9jYWxsYmFjayhTb3VwU2VydmVyICpzZXJ2ZXIsIFNvdXBNZXNzYWdl
ICptc2csCisgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsIEdIYXNoVGFibGUgKnF1
ZXJ5LAorICAgICAgICAgICAgICAgICBTb3VwQ2xpZW50Q29udGV4dCAqY29udGV4dCwgZ3BvaW50
ZXIgZGF0YSkKK3sKKyAgICBpZiAobXNnLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7Cisg
ICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1zZywgU09VUF9TVEFUVVNfTk9UX0lNUExF
TUVOVEVEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9zZXRf
c3RhdHVzKG1zZywgU09VUF9TVEFUVVNfT0spOworCisgICAgLyogUERGICovCisgICAgaWYgKGdf
c3RyX2VxdWFsKHBhdGgsICIvcGRmIikpIHsKKyAgICAgICAgY2hhciogY29udGVudHM7CisgICAg
ICAgIGdzaXplIGxlbmd0aDsKKyAgICAgICAgR0Vycm9yKiBlcnJvciA9IE5VTEw7CisKKyAgICAg
ICAgZ19maWxlX2dldF9jb250ZW50cygidGVzdC5wZGYiLCAmY29udGVudHMsICZsZW5ndGgsICZl
cnJvcik7CisgICAgICAgIGdfYXNzZXJ0KCFlcnJvcik7CisKKyAgICAgICAgc291cF9tZXNzYWdl
X2JvZHlfYXBwZW5kKG1zZy0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgY29udGVu
dHMsIGxlbmd0aCk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2h0bWwiKSkg
eworICAgICAgICBjaGFyKiBjb250ZW50czsKKyAgICAgICAgZ3NpemUgbGVuZ3RoOworICAgICAg
ICBHRXJyb3IqIGVycm9yID0gTlVMTDsKKworICAgICAgICBnX2ZpbGVfZ2V0X2NvbnRlbnRzKCJ0
ZXN0Lmh0bWwiLCAmY29udGVudHMsICZsZW5ndGgsICZlcnJvcik7CisgICAgICAgIGdfYXNzZXJ0
KCFlcnJvcik7CisKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1zZy0+cmVzcG9u
c2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgY29udGVudHMsIGxlbmd0aCk7CisgICAgfSBlbHNl
IGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3RleHQiKSkgeworICAgICAgICBjaGFyKiBjb250ZW50
czsKKyAgICAgICAgZ3NpemUgbGVuZ3RoOworICAgICAgICBHRXJyb3IqIGVycm9yID0gTlVMTDsK
KworICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobXNnLT5yZXNwb25zZV9oZWFk
ZXJzLCAiQ29udGVudC1EaXNwb3NpdGlvbiIsICJhdHRhY2htZW50OyBmaWxlbmFtZT10ZXN0LnR4
dCIpOworCisgICAgICAgIGdfZmlsZV9nZXRfY29udGVudHMoInRlc3QudHh0IiwgJmNvbnRlbnRz
LCAmbGVuZ3RoLCAmZXJyb3IpOworICAgICAgICBnX2Fzc2VydCghZXJyb3IpOworCisgICAgICAg
IHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtc2ctPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZ
X1RBS0UsIGNvbnRlbnRzLCBsZW5ndGgpOworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9ib2R5
X2NvbXBsZXRlKG1zZy0+cmVzcG9uc2VfYm9keSk7Cit9CisKK3N0YXRpYyB2b2lkIGlkbGVfcXVp
dF9sb29wX2NiKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBHUGFyYW1TcGVjKiBwc3BlYywgZ3Bv
aW50ZXIgZGF0YSkKK3sKKyAgICBpZiAod2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh3
ZWJfdmlldykgPT0gV0VCS0lUX0xPQURfRklOSVNIRUQgfHwKKyAgICAgICAgd2Via2l0X3dlYl92
aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJfdmlldykgPT0gV0VCS0lUX0xPQURfRkFJTEVEKQorICAg
ICAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gbWltZV90
eXBlX3BvbGljeV9kZWNpc2lvbl9yZXF1ZXN0ZWRfY2IoV2ViS2l0V2ViVmlldyogdmlldywgV2Vi
S2l0V2ViRnJhbWUqIGZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0LCBjb25zdCBj
aGFyKiBtaW1lX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgV2ViS2l0V2ViUG9saWN5RGVjaXNpb24qIGRlY2lzaW9uLCBncG9pbnRl
ciBkYXRhKQoreworICAgIGNoYXIqIHR5cGUgPSAoY2hhciopZGF0YTsKKworICAgIGlmIChnX3N0
cl9lcXVhbCh0eXBlLCAicGRmIikpIHsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKG1pbWVfdHlw
ZSwgPT0sICJhcHBsaWNhdGlvbi9wZGYiKTsKKyAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJf
dmlld19jYW5fc2hvd19taW1lX3R5cGUodmlldywgbWltZV90eXBlKSk7CisgICAgfSBlbHNlIGlm
IChnX3N0cl9lcXVhbCh0eXBlLCAiaHRtbCIpKSB7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0ciht
aW1lX3R5cGUsID09LCAidGV4dC9odG1sIik7CisgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJf
dmlld19jYW5fc2hvd19taW1lX3R5cGUodmlldywgbWltZV90eXBlKSk7CisgICAgfSBlbHNlIGlm
IChnX3N0cl9lcXVhbCh0eXBlLCAidGV4dCIpKSB7CisgICAgICAgIFdlYktpdE5ldHdvcmtSZXNw
b25zZSogcmVzcG9uc2UgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9uZXR3b3JrX3Jlc3BvbnNlKGZy
YW1lKTsKKyAgICAgICAgU291cE1lc3NhZ2UqIG1lc3NhZ2UgPSB3ZWJraXRfbmV0d29ya19yZXNw
b25zZV9nZXRfbWVzc2FnZShyZXNwb25zZSk7CisgICAgICAgIGNoYXIqIGRpc3Bvc2l0aW9uOwor
CisgICAgICAgIGdfYXNzZXJ0KG1lc3NhZ2UpOworICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVy
c19nZXRfY29udGVudF9kaXNwb3NpdGlvbihtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGlzcG9z
aXRpb24sIE5VTEwpOworICAgICAgICBnX29iamVjdF91bnJlZihyZXNwb25zZSk7CisKKyAgICAg
ICAgZ19hc3NlcnRfY21wc3RyKGRpc3Bvc2l0aW9uLCA9PSwgImF0dGFjaG1lbnQiKTsKKyAgICAg
ICAgZ19mcmVlKGRpc3Bvc2l0aW9uKTsKKworICAgICAgICBnX2Fzc2VydF9jbXBzdHIobWltZV90
eXBlLCA9PSwgInRleHQvcGxhaW4iKTsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3
X2Nhbl9zaG93X21pbWVfdHlwZSh2aWV3LCBtaW1lX3R5cGUpKTsKKyAgICB9CisKKyAgICBnX2Zy
ZWUodHlwZSk7CisKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RSZW1v
dGVNaW1lVHlwZShjb25zdCB2b2lkKiBkYXRhKQoreworICAgIGNvbnN0IGNoYXIqIG5hbWUgPSAo
Y29uc3QgY2hhciopIGRhdGE7CisgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IFdFQktJVF9XRUJf
VklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKEdfT0JK
RUNUKHZpZXcpKTsKKworICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisK
KyAgICBnX29iamVjdF9jb25uZWN0KEdfT0JKRUNUKHZpZXcpLAorICAgICAgICAgICAgICAgICAg
ICAgInNpZ25hbDo6bm90aWZ5Ojpsb2FkLXN0YXR1cyIsIGlkbGVfcXVpdF9sb29wX2NiLCBOVUxM
LAorICAgICAgICAgICAgICAgICAgICAgInNpZ25hbDo6bWltZS10eXBlLXBvbGljeS1kZWNpc2lv
bi1yZXF1ZXN0ZWQiLCBtaW1lX3R5cGVfcG9saWN5X2RlY2lzaW9uX3JlcXVlc3RlZF9jYiwgZ19z
dHJkdXAobmFtZSksCisgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKworICAgIGNoYXIqIGVm
ZmVjdGl2ZV91cmkgPSBnX3N0cmR1cF9wcmludGYoIiVzJXMiLCBiYXNlX3VyaSwgbmFtZSk7Cisg
ICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHZpZXcsIGVmZmVjdGl2ZV91cmkpOworICAgIGdf
ZnJlZShlZmZlY3RpdmVfdXJpKTsKKworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAg
IGdfb2JqZWN0X3VucmVmKHZpZXcpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0TG9jYWxNaW1lVHlw
ZShjb25zdCB2b2lkKiBkYXRhKQoreworICAgICBjb25zdCBjaGFyKiB0eXBlTmFtZSA9IChjb25z
dCBjaGFyKikgZGF0YTsKKyAgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IFdFQktJVF9XRUJfVklF
Vyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgICBnX29iamVjdF9yZWZfc2luayhHX09CSkVD
VCh2aWV3KSk7CisKKyAgICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKKwor
ICAgICBnX29iamVjdF9jb25uZWN0KEdfT0JKRUNUKHZpZXcpLAorICAgICAgICAgICAgICAgICAg
ICAgICJzaWduYWw6Om5vdGlmeTo6bG9hZC1zdGF0dXMiLCBpZGxlX3F1aXRfbG9vcF9jYiwgTlVM
TCwKKyAgICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjptaW1lLXR5cGUtcG9saWN5LWRlY2lz
aW9uLXJlcXVlc3RlZCIsIG1pbWVfdHlwZV9wb2xpY3lfZGVjaXNpb25fcmVxdWVzdGVkX2NiLCBn
X3N0cmR1cCh0eXBlTmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICAg
Z2NoYXIqIGZpbGVuYW1lID0gZ19zdHJkdXBfcHJpbnRmKCJ0ZXN0LiVzIiwgdHlwZU5hbWUpOwor
ICAgICBHRmlsZSogZmlsZSA9IGdfZmlsZV9uZXdfZm9yX3BhdGgoZmlsZW5hbWUpOworICAgICBn
X2ZyZWUoZmlsZW5hbWUpOworCisgICAgIGdjaGFyKiBmaWxlVVJJID0gZ19maWxlX2dldF91cmko
ZmlsZSk7CisgICAgIGdfb2JqZWN0X3VucmVmKGZpbGUpOworCisgICAgIHdlYmtpdF93ZWJfdmll
d19sb2FkX3VyaSh2aWV3LCBmaWxlVVJJKTsKKyAgICAgZ19mcmVlKGZpbGVVUkkpOworIAorICAg
ICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisgICAgIGdfb2JqZWN0X3VucmVmKHZpZXcpOworfQor
CitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgU291cFNlcnZlciogc2Vy
dmVyOworICAgIFNvdXBVUkkqIHNvdXBfdXJpOworCisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywg
JmFyZ3YsIE5VTEwpOworCisgICAgLyogSG9wZWZ1bGx5IG1ha2UgdGVzdCBpbmRlcGVuZGVudCBv
ZiB0aGUgcGF0aCBpdCdzIGNhbGxlZCBmcm9tLiAqLworICAgIHRlc3R1dGlsc19yZWxhdGl2ZV9j
aGRpcigiVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvcmVzb3VyY2VzL3Rlc3Qu
aHRtbCIsIGFyZ3ZbMF0pOworCisgICAgc2VydmVyID0gc291cF9zZXJ2ZXJfbmV3KFNPVVBfU0VS
VkVSX1BPUlQsIDAsIE5VTEwpOworICAgIHNvdXBfc2VydmVyX3J1bl9hc3luYyhzZXJ2ZXIpOwor
CisgICAgc291cF9zZXJ2ZXJfYWRkX2hhbmRsZXIoc2VydmVyLCBOVUxMLCBzZXJ2ZXJfY2FsbGJh
Y2ssIE5VTEwsIE5VTEwpOworCisgICAgc291cF91cmkgPSBzb3VwX3VyaV9uZXcoImh0dHA6Ly8x
MjcuMC4wLjEvIik7CisgICAgc291cF91cmlfc2V0X3BvcnQoc291cF91cmksIHNvdXBfc2VydmVy
X2dldF9wb3J0KHNlcnZlcikpOworCisgICAgYmFzZV91cmkgPSBzb3VwX3VyaV90b19zdHJpbmco
c291cF91cmksIEZBTFNFKTsKKyAgICBzb3VwX3VyaV9mcmVlKHNvdXBfdXJpKTsKKworICAgIGdf
dGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7CisgICAgZ190ZXN0X2Fk
ZF9kYXRhX2Z1bmMoIi93ZWJraXQvbWltZS9yZW1vdGUtUERGIiwgInBkZiIsIHRlc3RSZW1vdGVN
aW1lVHlwZSk7CisgICAgZ190ZXN0X2FkZF9kYXRhX2Z1bmMoIi93ZWJraXQvbWltZS9yZW1vdGUt
SFRNTCIsICJodG1sIiwgdGVzdFJlbW90ZU1pbWVUeXBlKTsKKyAgICBnX3Rlc3RfYWRkX2RhdGFf
ZnVuYygiL3dlYmtpdC9taW1lL3JlbW90ZS1URVhUIiwgInRleHQiLCB0ZXN0UmVtb3RlTWltZVR5
cGUpOworICAgIGdfdGVzdF9hZGRfZGF0YV9mdW5jKCIvd2Via2l0L21pbWUvbG9jYWwtUERGIiwg
InBkZiIsIHRlc3RMb2NhbE1pbWVUeXBlKTsKKyAgICBnX3Rlc3RfYWRkX2RhdGFfZnVuYygiL3dl
YmtpdC9taW1lL2xvY2FsLUhUTUwiLCAiaHRtbCIsIHRlc3RMb2NhbE1pbWVUeXBlKTsKKyAgICBn
X3Rlc3RfYWRkX2RhdGFfZnVuYygiL3dlYmtpdC9taW1lL2xvY2FsLVRFWFQiLCAidGV4dCIsIHRl
c3RMb2NhbE1pbWVUeXBlKTsKKworICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7Cit9CmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0bmV0d29ya3JlcXVl
c3QuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RuZXR3b3JrcmVx
dWVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMmM5MGYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0bmV0
d29ya3JlcXVlc3QuYwpAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5
IEd1c3Rhdm8gTm9yb25oYSBTaWx2YQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8ZXJy
bm8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8
Z2xpYi9nc3RkaW8uaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+
CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgorCitzdGF0aWMgdm9pZCB0ZXN0X25ldHdvcmtf
cmVxdWVzdF9jcmVhdGVfZGVzdHJveSgpCit7CisgICAgV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJl
cXVlc3Q7CisgICAgU291cE1lc3NhZ2UqIG1lc3NhZ2U7CisKKyAgICAvKiBUZXN0IGNyZWF0aW9u
IHdpdGggVVJJICovCisgICAgcmVxdWVzdCA9IFdFQktJVF9ORVRXT1JLX1JFUVVFU1QoZ19vYmpl
Y3RfbmV3KFdFQktJVF9UWVBFX05FVFdPUktfUkVRVUVTVCwgInVyaSIsICJodHRwOi8vZGViaWFu
Lm9yZy8iLCBOVUxMKSk7CisgICAgZ19hc3NlcnQoV0VCS0lUX0lTX05FVFdPUktfUkVRVUVTVChy
ZXF1ZXN0KSk7CisgICAgbWVzc2FnZSA9IHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfZ2V0X21lc3Nh
Z2UocmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIW1lc3NhZ2UpOworICAgIGdfb2JqZWN0X3VucmVm
KHJlcXVlc3QpOworCisgICAgLyogVGVzdCBjcmVhdGlvbiB3aXRoIFNvdXBNZXNzYWdlICovCisg
ICAgbWVzc2FnZSA9IHNvdXBfbWVzc2FnZV9uZXcoIkdFVCIsICJodHRwOi8vZGViaWFuLm9yZy8i
KTsKKyAgICByZXF1ZXN0ID0gV0VCS0lUX05FVFdPUktfUkVRVUVTVChnX29iamVjdF9uZXcoV0VC
S0lUX1RZUEVfTkVUV09SS19SRVFVRVNULCAibWVzc2FnZSIsIG1lc3NhZ2UsIE5VTEwpKTsKKyAg
ICBnX2Fzc2VydChXRUJLSVRfSVNfTkVUV09SS19SRVFVRVNUKHJlcXVlc3QpKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoR19PQkpFQ1QobWVzc2FnZSktPnJlZl9jb3VudCwgPT0sIDIpOworICAgIGdf
b2JqZWN0X3VucmVmKHJlcXVlc3QpOworICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChtZXNz
YWdlKS0+cmVmX2NvdW50LCA9PSwgMSk7CisgICAgZ19vYmplY3RfdW5yZWYobWVzc2FnZSk7CisK
KyAgICAvKiBUZXN0IGNyZWF0aW9uIHdpdGggYm90aCBTb3VwTWVzc2FnZSBhbmQgVVJJICovCisg
ICAgbWVzc2FnZSA9IHNvdXBfbWVzc2FnZV9uZXcoIkdFVCIsICJodHRwOi8vZGViaWFuLm9yZy8i
KTsKKyAgICByZXF1ZXN0ID0gV0VCS0lUX05FVFdPUktfUkVRVUVTVChnX29iamVjdF9uZXcoV0VC
S0lUX1RZUEVfTkVUV09SS19SRVFVRVNULCAibWVzc2FnZSIsIG1lc3NhZ2UsICJ1cmkiLCAiaHR0
cDovL2dub21lLm9yZy8iLCBOVUxMKSk7CisgICAgZ19hc3NlcnQoV0VCS0lUX0lTX05FVFdPUktf
UkVRVUVTVChyZXF1ZXN0KSk7CisgICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKG1lc3NhZ2Up
LT5yZWZfY291bnQsID09LCAyKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X25ldHdvcmtf
cmVxdWVzdF9nZXRfdXJpKHJlcXVlc3QpLCA9PSwgImh0dHA6Ly9nbm9tZS5vcmcvIik7CisgICAg
Z19vYmplY3RfdW5yZWYocmVxdWVzdCk7CisgICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKG1l
c3NhZ2UpLT5yZWZfY291bnQsID09LCAxKTsKKyAgICBnX29iamVjdF91bnJlZihtZXNzYWdlKTsK
K30KKworc3RhdGljIHZvaWQgdGVzdF9uZXR3b3JrX3JlcXVlc3RfcHJvcGVydGllcygpCit7Cisg
ICAgV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3Q7CisgICAgU291cE1lc3NhZ2UqIG1lc3Nh
Z2U7CisgICAgZ2NoYXIqIHNvdXBVUkk7CisKKyAgICAvKiBUZXN0IFVSSSBpcyBzZXQgY29ycmVj
dGx5IHdoZW4gY3JlYXRpbmcgd2l0aCBVUkkgKi8KKyAgICByZXF1ZXN0ID0gd2Via2l0X25ldHdv
cmtfcmVxdWVzdF9uZXcoImh0dHA6Ly9kZWJpYW4ub3JnLyIpOworICAgIGdfYXNzZXJ0KFdFQktJ
VF9JU19ORVRXT1JLX1JFUVVFU1QocmVxdWVzdCkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJr
aXRfbmV0d29ya19yZXF1ZXN0X2dldF91cmkocmVxdWVzdCksID09LCAiaHR0cDovL2RlYmlhbi5v
cmcvIik7CisgICAgZ19vYmplY3RfdW5yZWYocmVxdWVzdCk7CisKKyAgICAvKiBUZXN0IFVSSSBp
cyBzZXQgY29ycmVjdGx5IHdoZW4gY3JlYXRpbmcgd2l0aCBNZXNzYWdlICovCisgICAgbWVzc2Fn
ZSA9IHNvdXBfbWVzc2FnZV9uZXcoIkdFVCIsICJodHRwOi8vZGViaWFuLm9yZy8iKTsKKyAgICBy
ZXF1ZXN0ID0gV0VCS0lUX05FVFdPUktfUkVRVUVTVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVf
TkVUV09SS19SRVFVRVNULCAibWVzc2FnZSIsIG1lc3NhZ2UsIE5VTEwpKTsKKyAgICBnX2Fzc2Vy
dChXRUJLSVRfSVNfTkVUV09SS19SRVFVRVNUKHJlcXVlc3QpKTsKKyAgICBnX29iamVjdF91bnJl
ZihtZXNzYWdlKTsKKworICAgIG1lc3NhZ2UgPSB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X2dldF9t
ZXNzYWdlKHJlcXVlc3QpOworICAgIHNvdXBVUkkgPSBzb3VwX3VyaV90b19zdHJpbmcoc291cF9t
ZXNzYWdlX2dldF91cmkobWVzc2FnZSksIEZBTFNFKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc291
cFVSSSwgPT0sICJodHRwOi8vZGViaWFuLm9yZy8iKTsKKyAgICBnX2ZyZWUoc291cFVSSSk7CisK
KyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X25ldHdvcmtfcmVxdWVzdF9nZXRfdXJpKHJlcXVl
c3QpLCA9PSwgImh0dHA6Ly9kZWJpYW4ub3JnLyIpOworICAgIGdfb2JqZWN0X3VucmVmKHJlcXVl
c3QpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgZ3RrX3Rl
c3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvbmV0
d29ya3JlcXVlc3QvY3JlYXRlZGVzdHJveSIsIHRlc3RfbmV0d29ya19yZXF1ZXN0X2NyZWF0ZV9k
ZXN0cm95KTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvbmV0d29ya3JlcXVlc3QvcHJv
cGVydGllcyIsIHRlc3RfbmV0d29ya19yZXF1ZXN0X3Byb3BlcnRpZXMpOworICAgIHJldHVybiBn
X3Rlc3RfcnVuICgpOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRHdGsvdGVzdG5ldHdvcmtyZXNwb25zZS5jIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRHdGsvdGVzdG5ldHdvcmtyZXNwb25zZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmI4MDZhYTEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0bmV0d29ya3Jlc3BvbnNlLmMKQEAgLTAsMCArMSw5NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHdXN0YXZvIE5vcm9uaGEgU2lsdmEKKyAqIENv
cHlyaWdodCAoQykgMjAwOSBDb2xsYWJvcmEgTHRkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxnbGliLmg+Cisj
aW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8
c3RkbGliLmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgorCitzdGF0aWMgdm9pZCB0ZXN0
X25ldHdvcmtfcmVzcG9uc2VfY3JlYXRlX2Rlc3Ryb3koKQoreworICAgIFdlYktpdE5ldHdvcmtS
ZXNwb25zZSogcmVzcG9uc2U7CisgICAgU291cE1lc3NhZ2UqIG1lc3NhZ2U7CisKKyAgICAvKiBU
ZXN0IGNyZWF0aW9uIHdpdGggVVJJICovCisgICAgcmVzcG9uc2UgPSBXRUJLSVRfTkVUV09SS19S
RVNQT05TRShnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfTkVUV09SS19SRVNQT05TRSwgInVyaSIs
ICJodHRwOi8vZGViaWFuLm9yZy8iLCBOVUxMKSk7CisgICAgZ19hc3NlcnQoV0VCS0lUX0lTX05F
VFdPUktfUkVTUE9OU0UocmVzcG9uc2UpKTsKKyAgICBtZXNzYWdlID0gd2Via2l0X25ldHdvcmtf
cmVzcG9uc2VfZ2V0X21lc3NhZ2UocmVzcG9uc2UpOworICAgIGdfYXNzZXJ0KCFtZXNzYWdlKTsK
KyAgICBnX29iamVjdF91bnJlZihyZXNwb25zZSk7CisKKyAgICAvKiBUZXN0IGNyZWF0aW9uIHdp
dGggU291cE1lc3NhZ2UgKi8KKyAgICBtZXNzYWdlID0gc291cF9tZXNzYWdlX25ldygiR0VUIiwg
Imh0dHA6Ly9kZWJpYW4ub3JnLyIpOworICAgIHJlc3BvbnNlID0gV0VCS0lUX05FVFdPUktfUkVT
UE9OU0UoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX05FVFdPUktfUkVTUE9OU0UsICJtZXNzYWdl
IiwgbWVzc2FnZSwgTlVMTCkpOworICAgIGdfYXNzZXJ0KFdFQktJVF9JU19ORVRXT1JLX1JFU1BP
TlNFKHJlc3BvbnNlKSk7CisgICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKG1lc3NhZ2UpLT5y
ZWZfY291bnQsID09LCAyKTsKKyAgICBnX29iamVjdF91bnJlZihyZXNwb25zZSk7CisgICAgZ19h
c3NlcnRfY21waW50KEdfT0JKRUNUKG1lc3NhZ2UpLT5yZWZfY291bnQsID09LCAxKTsKKyAgICBn
X29iamVjdF91bnJlZihtZXNzYWdlKTsKKworICAgIC8qIFRlc3QgY3JlYXRpb24gd2l0aCBib3Ro
IFNvdXBNZXNzYWdlIGFuZCBVUkkgKi8KKyAgICBtZXNzYWdlID0gc291cF9tZXNzYWdlX25ldygi
R0VUIiwgImh0dHA6Ly9kZWJpYW4ub3JnLyIpOworICAgIHJlc3BvbnNlID0gV0VCS0lUX05FVFdP
UktfUkVTUE9OU0UoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX05FVFdPUktfUkVTUE9OU0UsICJt
ZXNzYWdlIiwgbWVzc2FnZSwgInVyaSIsICJodHRwOi8vZ25vbWUub3JnLyIsIE5VTEwpKTsKKyAg
ICBnX2Fzc2VydChXRUJLSVRfSVNfTkVUV09SS19SRVNQT05TRShyZXNwb25zZSkpOworICAgIGdf
YXNzZXJ0X2NtcGludChHX09CSkVDVChtZXNzYWdlKS0+cmVmX2NvdW50LCA9PSwgMik7CisgICAg
Z19hc3NlcnRfY21wc3RyKHdlYmtpdF9uZXR3b3JrX3Jlc3BvbnNlX2dldF91cmkocmVzcG9uc2Up
LCA9PSwgImh0dHA6Ly9nbm9tZS5vcmcvIik7CisgICAgZ19vYmplY3RfdW5yZWYocmVzcG9uc2Up
OworICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChtZXNzYWdlKS0+cmVmX2NvdW50LCA9PSwg
MSk7CisgICAgZ19vYmplY3RfdW5yZWYobWVzc2FnZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rf
bmV0d29ya19yZXNwb25zZV9wcm9wZXJ0aWVzKCkKK3sKKyAgICBXZWJLaXROZXR3b3JrUmVzcG9u
c2UqIHJlc3BvbnNlOworICAgIFNvdXBNZXNzYWdlKiBtZXNzYWdlOworICAgIGdjaGFyKiBzb3Vw
VVJJOworCisgICAgLyogVGVzdCBVUkkgaXMgc2V0IGNvcnJlY3RseSB3aGVuIGNyZWF0aW5nIHdp
dGggVVJJICovCisgICAgcmVzcG9uc2UgPSB3ZWJraXRfbmV0d29ya19yZXNwb25zZV9uZXcoImh0
dHA6Ly9kZWJpYW4ub3JnLyIpOworICAgIGdfYXNzZXJ0KFdFQktJVF9JU19ORVRXT1JLX1JFU1BP
TlNFKHJlc3BvbnNlKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9uZXR3b3JrX3Jlc3Bv
bnNlX2dldF91cmkocmVzcG9uc2UpLCA9PSwgImh0dHA6Ly9kZWJpYW4ub3JnLyIpOworICAgIGdf
b2JqZWN0X3VucmVmKHJlc3BvbnNlKTsKKworICAgIC8qIFRlc3QgVVJJIGlzIHNldCBjb3JyZWN0
bHkgd2hlbiBjcmVhdGluZyB3aXRoIE1lc3NhZ2UgKi8KKyAgICBtZXNzYWdlID0gc291cF9tZXNz
YWdlX25ldygiR0VUIiwgImh0dHA6Ly9kZWJpYW4ub3JnLyIpOworICAgIHJlc3BvbnNlID0gV0VC
S0lUX05FVFdPUktfUkVTUE9OU0UoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX05FVFdPUktfUkVT
UE9OU0UsICJtZXNzYWdlIiwgbWVzc2FnZSwgTlVMTCkpOworICAgIGdfYXNzZXJ0KFdFQktJVF9J
U19ORVRXT1JLX1JFU1BPTlNFKHJlc3BvbnNlKSk7CisgICAgZ19vYmplY3RfdW5yZWYobWVzc2Fn
ZSk7CisKKyAgICBtZXNzYWdlID0gd2Via2l0X25ldHdvcmtfcmVzcG9uc2VfZ2V0X21lc3NhZ2Uo
cmVzcG9uc2UpOworICAgIHNvdXBVUkkgPSBzb3VwX3VyaV90b19zdHJpbmcoc291cF9tZXNzYWdl
X2dldF91cmkobWVzc2FnZSksIEZBTFNFKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc291cFVSSSwg
PT0sICJodHRwOi8vZGViaWFuLm9yZy8iKTsKKyAgICBnX2ZyZWUoc291cFVSSSk7CisKKyAgICBn
X2Fzc2VydF9jbXBzdHIod2Via2l0X25ldHdvcmtfcmVzcG9uc2VfZ2V0X3VyaShyZXNwb25zZSks
ID09LCAiaHR0cDovL2RlYmlhbi5vcmcvIik7CisgICAgZ19vYmplY3RfdW5yZWYocmVzcG9uc2Up
OworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgZ3RrX3Rlc3Rf
aW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvbmV0d29y
a3Jlc3BvbnNlL2NyZWF0ZWRlc3Ryb3kiLCB0ZXN0X25ldHdvcmtfcmVzcG9uc2VfY3JlYXRlX2Rl
c3Ryb3kpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9uZXR3b3JrcmVzcG9uc2UvcHJv
cGVydGllcyIsIHRlc3RfbmV0d29ya19yZXNwb25zZV9wcm9wZXJ0aWVzKTsKKyAgICByZXR1cm4g
Z190ZXN0X3J1biAoKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0R3RrL3Rlc3R3ZWJiYWNrZm9yd2FyZGxpc3QuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJiYWNrZm9yd2FyZGxpc3QuYwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi43NzgyZDQwCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYmJhY2tmb3J3YXJkbGlzdC5jCkBAIC0w
LDAgKzEsMzI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVy
IEZyZXl0aGVyCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVk
ZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKworc3RhdGljIHZvaWQg
dGVzdF93ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9saWZldGltZSh2b2lkKQoreworICAgIFdlYktp
dFdlYlZpZXcqIHdlYlZpZXc7CisgICAgV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiBiYWNrRm9y
d2FyZExpc3Q7CisgICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGN1cnJlbnRJdGVtOworICAgIFdl
YktpdFdlYkhpc3RvcnlJdGVtKiBmb3J3YXJkSXRlbTsKKyAgICBXZWJLaXRXZWJIaXN0b3J5SXRl
bSogYmFja0l0ZW07CisgICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIG50aEl0ZW07CisgICAgV2Vi
S2l0V2ViSGlzdG9yeUl0ZW0qIGl0ZW0xOworICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBpdGVt
MjsKKyAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogaXRlbTM7CisgICAgV2ViS2l0V2ViSGlzdG9y
eUl0ZW0qIGl0ZW00OworICAgIEdMaXN0KiBiYWNrTGlzdCA9IE5VTEw7CisgICAgR0xpc3QqIGZv
cndhcmRMaXN0ID0gTlVMTDsKKyAgICBnX3Rlc3RfYnVnKCIxOTg5OCIpOworCisgICAgd2ViVmll
dyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0
X3JlZl9zaW5rKHdlYlZpZXcpOworICAgIGJhY2tGb3J3YXJkTGlzdCA9IHdlYmtpdF93ZWJfdmll
d19nZXRfYmFja19mb3J3YXJkX2xpc3Qod2ViVmlldyk7CisgICAgZ19hc3NlcnRfY21waW50KEdf
T0JKRUNUKGJhY2tGb3J3YXJkTGlzdCktPnJlZl9jb3VudCwgPT0sIDEpOworCisgICAgLyogYWRk
IHRlc3QgaXRlbXMgKi8KKyAgICBpdGVtMSA9IHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX25ld193
aXRoX2RhdGEoImh0dHA6Ly9leGFtcGxlLmNvbS8xLyIsICJTaXRlIDEiKTsKKyAgICB3ZWJraXRf
d2ViX2JhY2tfZm9yd2FyZF9saXN0X2FkZF9pdGVtKGJhY2tGb3J3YXJkTGlzdCwgaXRlbTEpOwor
ICAgIGdfb2JqZWN0X3VucmVmKGl0ZW0xKTsKKworICAgIGl0ZW0yID0gd2Via2l0X3dlYl9oaXN0
b3J5X2l0ZW1fbmV3X3dpdGhfZGF0YSgiaHR0cDovL2V4YW1wbGUuY29tLzIvIiwgIlNpdGUgMiIp
OworICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfYWRkX2l0ZW0oYmFja0ZvcndhcmRM
aXN0LCBpdGVtMik7CisgICAgZ19vYmplY3RfdW5yZWYoaXRlbTIpOworCisgICAgaXRlbTMgPSB3
ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9uZXdfd2l0aF9kYXRhKCJodHRwOi8vZXhhbXBsZS5jb20v
My8iLCAiU2l0ZSAzIik7CisgICAgd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9hZGRfaXRl
bShiYWNrRm9yd2FyZExpc3QsIGl0ZW0zKTsKKyAgICBnX29iamVjdF91bnJlZihpdGVtMyk7CisK
KyAgICBpdGVtNCA9IHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX25ld193aXRoX2RhdGEoImh0dHA6
Ly9leGFtcGxlLmNvbS80LyIsICJTaXRlIDQiKTsKKyAgICB3ZWJraXRfd2ViX2JhY2tfZm9yd2Fy
ZF9saXN0X2FkZF9pdGVtKGJhY2tGb3J3YXJkTGlzdCwgaXRlbTQpOworICAgIGdfb2JqZWN0X3Vu
cmVmKGl0ZW00KTsKKworICAgIC8qIG1ha2Ugc3VyZSB0aGVzZSBmdW5jdGlvbnMgZG9uJ3QgYWRk
IHVubmVjZXNzYXJ5IHJlZiB0byB0aGUgaGlzdG9yeSBpdGVtICovCisgICAgYmFja0l0ZW0gPSB3
ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2l0ZW0oYmFja0ZvcndhcmRMaXN0
KTsKKyAgICBnX29iamVjdF9yZWYoYmFja0l0ZW0pOworICAgIGdfYXNzZXJ0X2NtcGludChHX09C
SkVDVChiYWNrSXRlbSktPnJlZl9jb3VudCwgPT0sIDIpOworICAgIGdfb2JqZWN0X3VucmVmKGJh
Y2tJdGVtKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoYmFja0l0ZW0pLT5yZWZfY291
bnQsID09LCAxKTsKKworICAgIGN1cnJlbnRJdGVtID0gd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRf
bGlzdF9nZXRfY3VycmVudF9pdGVtKGJhY2tGb3J3YXJkTGlzdCk7CisgICAgZ19vYmplY3RfcmVm
KGN1cnJlbnRJdGVtKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoY3VycmVudEl0ZW0p
LT5yZWZfY291bnQsID09LCAyKTsKKyAgICBnX29iamVjdF91bnJlZihjdXJyZW50SXRlbSk7Cisg
ICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKGN1cnJlbnRJdGVtKS0+cmVmX2NvdW50LCA9PSwg
MSk7CisKKyAgICB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dvX3RvX2l0ZW0oYmFja0Zv
cndhcmRMaXN0LCBpdGVtMik7CisgICAgZm9yd2FyZEl0ZW0gPSB3ZWJraXRfd2ViX2JhY2tfZm9y
d2FyZF9saXN0X2dldF9mb3J3YXJkX2l0ZW0oYmFja0ZvcndhcmRMaXN0KTsKKyAgICBnX29iamVj
dF9yZWYoZm9yd2FyZEl0ZW0pOworICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChmb3J3YXJk
SXRlbSktPnJlZl9jb3VudCwgPT0sIDIpOworICAgIGdfb2JqZWN0X3VucmVmKGZvcndhcmRJdGVt
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoZm9yd2FyZEl0ZW0pLT5yZWZfY291bnQs
ID09LCAxKTsKKworICAgIG50aEl0ZW0gPSB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dl
dF9udGhfaXRlbShiYWNrRm9yd2FyZExpc3QsIDEpOworICAgIGdfb2JqZWN0X3JlZihudGhJdGVt
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QobnRoSXRlbSktPnJlZl9jb3VudCwgPT0s
IDIpOworICAgIGdfb2JqZWN0X3VucmVmKG50aEl0ZW0pOworICAgIGdfYXNzZXJ0X2NtcGludChH
X09CSkVDVChudGhJdGVtKS0+cmVmX2NvdW50LCA9PSwgMSk7CisKKyAgICBiYWNrTGlzdCA9IHdl
YmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGlzdF93aXRoX2xpbWl0KGJhY2tG
b3J3YXJkTGlzdCwgNSk7CisgICAgZm9yICg7IGJhY2tMaXN0OyBiYWNrTGlzdCA9IGJhY2tMaXN0
LT5uZXh0KQorICAgICAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoYmFja0xpc3QtPmRhdGEp
LT5yZWZfY291bnQsID09LCAxKTsKKworICAgIGZvcndhcmRMaXN0ID0gd2Via2l0X3dlYl9iYWNr
X2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0X3dpdGhfbGltaXQoYmFja0ZvcndhcmRMaXN0
LCA1KTsKKyAgICBmb3IgKDsgZm9yd2FyZExpc3Q7IGZvcndhcmRMaXN0ID0gZm9yd2FyZExpc3Qt
Pm5leHQpCisgICAgICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChmb3J3YXJkTGlzdC0+ZGF0
YSktPnJlZl9jb3VudCwgPT0sIDEpOworCisgICAgZ19saXN0X2ZyZWUoZm9yd2FyZExpc3QpOwor
ICAgIGdfbGlzdF9mcmVlKGJhY2tMaXN0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1Qo
aXRlbTEpLT5yZWZfY291bnQsID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1Qo
aXRlbTIpLT5yZWZfY291bnQsID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1Qo
aXRlbTMpLT5yZWZfY291bnQsID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1Qo
aXRlbTQpLT5yZWZfY291bnQsID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1Qo
YmFja0ZvcndhcmRMaXN0KS0+cmVmX2NvdW50LCA9PSwgMSk7CisgICAgZ19vYmplY3RfdW5yZWYo
d2ViVmlldyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRf
bGlzdF9vcmRlcih2b2lkKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXc7CisgICAgV2Vi
S2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJCYWNrRm9yd2FyZExpc3Q7CisgICAgV2ViS2l0V2Vi
SGlzdG9yeUl0ZW0qIGl0ZW0xOworICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBpdGVtMjsKKyAg
ICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogaXRlbTM7CisgICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0q
IGl0ZW00OworICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBjdXJyZW50SXRlbTsKKyAgICBHTGlz
dCogYmFja0xpc3QgPSBOVUxMOworICAgIEdMaXN0KiBmb3J3YXJkTGlzdCA9IE5VTEw7CisgICAg
Z190ZXN0X2J1ZygiMjI2OTQiKTsKKworICAgIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Vi
a2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKKwor
ICAgIHdlYmtpdF93ZWJfdmlld19zZXRfbWFpbnRhaW5zX2JhY2tfZm9yd2FyZF9saXN0KHdlYlZp
ZXcsIFRSVUUpOworICAgIHdlYkJhY2tGb3J3YXJkTGlzdCA9IHdlYmtpdF93ZWJfdmlld19nZXRf
YmFja19mb3J3YXJkX2xpc3Qod2ViVmlldyk7CisgICAgZ19hc3NlcnQod2ViQmFja0ZvcndhcmRM
aXN0KTsKKworICAgIC8vIENoZWNrIHRoYXQgdGhlcmUgaXMgbm8gaXRlbS4KKyAgICBnX2Fzc2Vy
dCghd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKHdlYkJhY2tG
b3J3YXJkTGlzdCkpOworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2ViX2JhY2tfZm9yd2Fy
ZF9saXN0X2dldF9mb3J3YXJkX2xlbmd0aCh3ZWJCYWNrRm9yd2FyZExpc3QpLCA9PSwgMCk7Cisg
ICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tf
bGVuZ3RoKHdlYkJhY2tGb3J3YXJkTGlzdCksID09LCAwKTsKKyAgICBnX2Fzc2VydCghd2Via2l0
X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHdlYlZpZXcpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0
X3dlYl92aWV3X2Nhbl9nb19iYWNrKHdlYlZpZXcpKTsKKworICAgIC8vIEFkZCBhIG5ldyBpdGVt
cworICAgIGl0ZW0xID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dpdGhfZGF0YSgiaHR0
cDovL2V4YW1wbGUuY29tLzEvIiwgIlNpdGUgMSIpOworICAgIHdlYmtpdF93ZWJfYmFja19mb3J3
YXJkX2xpc3RfYWRkX2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0LCBpdGVtMSk7CisgICAgZ19vYmpl
Y3RfdW5yZWYoaXRlbTEpOworICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xp
c3RfY29udGFpbnNfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QsIGl0ZW0xKSk7CisKKyAgICBpdGVt
MiA9IHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX25ld193aXRoX2RhdGEoImh0dHA6Ly9leGFtcGxl
LmNvbS8yLyIsICJTaXRlIDIiKTsKKyAgICB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2Fk
ZF9pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCwgaXRlbTIpOworICAgIGdfb2JqZWN0X3VucmVmKGl0
ZW0yKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2NvbnRhaW5z
X2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0LCBpdGVtMikpOworCisgICAgaXRlbTMgPSB3ZWJraXRf
d2ViX2hpc3RvcnlfaXRlbV9uZXdfd2l0aF9kYXRhKCJodHRwOi8vZXhhbXBsZS5jb20vMy8iLCAi
U2l0ZSAzIik7CisgICAgd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9hZGRfaXRlbSh3ZWJC
YWNrRm9yd2FyZExpc3QsIGl0ZW0zKTsKKyAgICBnX29iamVjdF91bnJlZihpdGVtMyk7CisgICAg
Z19hc3NlcnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9jb250YWluc19pdGVtKHdlYkJh
Y2tGb3J3YXJkTGlzdCwgaXRlbTMpKTsKKworICAgIGl0ZW00ID0gd2Via2l0X3dlYl9oaXN0b3J5
X2l0ZW1fbmV3X3dpdGhfZGF0YSgiaHR0cDovL2V4YW1wbGUuY29tLzQvIiwgIlNpdGUgNCIpOwor
ICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfYWRkX2l0ZW0od2ViQmFja0ZvcndhcmRM
aXN0LCBpdGVtNCk7CisgICAgZ19vYmplY3RfdW5yZWYoaXRlbTQpOworICAgIGdfYXNzZXJ0KHdl
YmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY29udGFpbnNfaXRlbSh3ZWJCYWNrRm9yd2FyZExp
c3QsIGl0ZW00KSk7CisKKyAgICAvLyBjaGVjayB0aGUgYmFjayBsaXN0IG9yZGVyCisgICAgYmFj
a0xpc3QgPSB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3Rfd2l0aF9s
aW1pdCh3ZWJCYWNrRm9yd2FyZExpc3QsIDUpOworICAgIGdfYXNzZXJ0KGJhY2tMaXN0KTsKKwor
ICAgIGN1cnJlbnRJdGVtID0gV0VCS0lUX1dFQl9ISVNUT1JZX0lURU0oYmFja0xpc3QtPmRhdGEp
OworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdXJpKGN1
cnJlbnRJdGVtKSwgPT0sICJodHRwOi8vZXhhbXBsZS5jb20vMy8iKTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3RpdGxlKGN1cnJlbnRJdGVtKSwgPT0s
ICJTaXRlIDMiKTsKKyAgICBiYWNrTGlzdCA9IGJhY2tMaXN0LT5uZXh0OworCisgICAgY3VycmVu
dEl0ZW0gPSBXRUJLSVRfV0VCX0hJU1RPUllfSVRFTShiYWNrTGlzdC0+ZGF0YSk7CisgICAgZ19h
c3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF91cmkoY3VycmVudEl0ZW0p
LCA9PSwgImh0dHA6Ly9leGFtcGxlLmNvbS8yLyIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJr
aXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdGl0bGUoY3VycmVudEl0ZW0pLCA9PSwgIlNpdGUgMiIp
OworICAgIGJhY2tMaXN0ID0gYmFja0xpc3QtPm5leHQ7CisKKyAgICBjdXJyZW50SXRlbSA9IFdF
QktJVF9XRUJfSElTVE9SWV9JVEVNKGJhY2tMaXN0LT5kYXRhKTsKKyAgICBnX2Fzc2VydF9jbXBz
dHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3VyaShjdXJyZW50SXRlbSksID09LCAiaHR0
cDovL2V4YW1wbGUuY29tLzEvIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlz
dG9yeV9pdGVtX2dldF90aXRsZShjdXJyZW50SXRlbSksID09LCAiU2l0ZSAxIik7CisgICAgZ19s
aXN0X2ZyZWUoYmFja0xpc3QpOworCisgICAgLy8gY2hlY2sgdGhlIGZvcndhcmQgbGlzdCBvcmRl
cgorICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19nb190b19iYWNrX2ZvcndhcmRfaXRlbSh3
ZWJWaWV3LCBpdGVtMSkpOworICAgIGZvcndhcmRMaXN0ID0gd2Via2l0X3dlYl9iYWNrX2Zvcndh
cmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0X3dpdGhfbGltaXQod2ViQmFja0ZvcndhcmRMaXN0LDUp
OworICAgIGdfYXNzZXJ0KGZvcndhcmRMaXN0KTsKKworICAgIGN1cnJlbnRJdGVtID0gV0VCS0lU
X1dFQl9ISVNUT1JZX0lURU0oZm9yd2FyZExpc3QtPmRhdGEpOworICAgIGdfYXNzZXJ0X2NtcHN0
cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdXJpKGN1cnJlbnRJdGVtKSwgPT0sICJodHRw
Oi8vZXhhbXBsZS5jb20vNC8iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0
b3J5X2l0ZW1fZ2V0X3RpdGxlKGN1cnJlbnRJdGVtKSwgPT0sICJTaXRlIDQiKTsKKyAgICBmb3J3
YXJkTGlzdCA9IGZvcndhcmRMaXN0LT5uZXh0OworCisgICAgY3VycmVudEl0ZW0gPSBXRUJLSVRf
V0VCX0hJU1RPUllfSVRFTShmb3J3YXJkTGlzdC0+ZGF0YSk7CisgICAgZ19hc3NlcnRfY21wc3Ry
KHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF91cmkoY3VycmVudEl0ZW0pLCA9PSwgImh0dHA6
Ly9leGFtcGxlLmNvbS8zLyIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3Rv
cnlfaXRlbV9nZXRfdGl0bGUoY3VycmVudEl0ZW0pLCA9PSwgIlNpdGUgMyIpOworICAgIGZvcndh
cmRMaXN0ID0gZm9yd2FyZExpc3QtPm5leHQ7CisKKyAgICBjdXJyZW50SXRlbSA9IFdFQktJVF9X
RUJfSElTVE9SWV9JVEVNKGZvcndhcmRMaXN0LT5kYXRhKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIo
d2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3VyaShjdXJyZW50SXRlbSksID09LCAiaHR0cDov
L2V4YW1wbGUuY29tLzIvIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9y
eV9pdGVtX2dldF90aXRsZShjdXJyZW50SXRlbSksID09LCAiU2l0ZSAyIik7CisKKyAgICBnX2xp
c3RfZnJlZShmb3J3YXJkTGlzdCk7CisgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Cit9CisK
K3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9hZGRfaXRlbSh2
b2lkKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXc7CisgICAgV2ViS2l0V2ViQmFja0Zv
cndhcmRMaXN0KiB3ZWJCYWNrRm9yd2FyZExpc3Q7CisgICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0q
IGFkZEl0ZW0xOworICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBhZGRJdGVtMjsKKyAgICBXZWJL
aXRXZWJIaXN0b3J5SXRlbSogYmFja0l0ZW07CisgICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGN1
cnJlbnRJdGVtOworICAgIGdfdGVzdF9idWcoIjIyOTg4Iik7CisKKyAgICB3ZWJWaWV3ID0gV0VC
S0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmplY3RfcmVmX3Np
bmsod2ViVmlldyk7CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X21haW50YWluc19iYWNrX2Zv
cndhcmRfbGlzdCh3ZWJWaWV3LCBUUlVFKTsKKyAgICB3ZWJCYWNrRm9yd2FyZExpc3QgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X2JhY2tfZm9yd2FyZF9saXN0KHdlYlZpZXcpOworICAgIGdfYXNzZXJ0
KHdlYkJhY2tGb3J3YXJkTGlzdCk7CisKKyAgICAvLyBDaGVjayB0aGF0IHRoZXJlIGlzIG5vIGl0
ZW0uCisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJl
bnRfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0
X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9sZW5ndGgod2ViQmFja0ZvcndhcmRM
aXN0KSwgPT0sIDApOworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2ViX2JhY2tfZm9yd2Fy
ZF9saXN0X2dldF9iYWNrX2xlbmd0aCh3ZWJCYWNrRm9yd2FyZExpc3QpLCA9PSwgMCk7CisgICAg
Z19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh3ZWJWaWV3KSk7CisgICAg
Z19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayh3ZWJWaWV3KSk7CisKKyAgICAv
LyBBZGQgYSBuZXcgaXRlbQorICAgIGFkZEl0ZW0xID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1f
bmV3X3dpdGhfZGF0YSgiaHR0cDovL2V4YW1wbGUuY29tLyIsICJBZGRlZCBzaXRlIik7CisgICAg
d2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9hZGRfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3Qs
IGFkZEl0ZW0xKTsKKyAgICBnX29iamVjdF91bnJlZihhZGRJdGVtMSk7CisgICAgZ19hc3NlcnQo
d2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9jb250YWluc19pdGVtKHdlYkJhY2tGb3J3YXJk
TGlzdCwgYWRkSXRlbTEpKTsKKworICAgIC8vIENoZWNrIHRoYXQgdGhlIGFkZGVkIGl0ZW0gaXMg
dGhlIGN1cnJlbnQgaXRlbS4KKyAgICBjdXJyZW50SXRlbSA9IHdlYmtpdF93ZWJfYmFja19mb3J3
YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QpOworICAgIGdfYXNz
ZXJ0KGN1cnJlbnRJdGVtKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2Zv
cndhcmRfbGlzdF9nZXRfZm9yd2FyZF9sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDAp
OworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9i
YWNrX2xlbmd0aCh3ZWJCYWNrRm9yd2FyZExpc3QpLCA9PSwgMCk7CisgICAgZ19hc3NlcnQoIXdl
YmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh3ZWJWaWV3KSk7CisgICAgZ19hc3NlcnQoIXdl
YmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayh3ZWJWaWV3KSk7CisgICAgZ19hc3NlcnRfY21wc3Ry
KHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF91cmkoY3VycmVudEl0ZW0pLCA9PSwgImh0dHA6
Ly9leGFtcGxlLmNvbS8iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5
X2l0ZW1fZ2V0X3RpdGxlKGN1cnJlbnRJdGVtKSwgPT0sICJBZGRlZCBzaXRlIik7CisKKyAgICAv
LyBBZGQgYW5vdGhlciBpdGVtLgorICAgIGFkZEl0ZW0yID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0
ZW1fbmV3X3dpdGhfZGF0YSgiaHR0cDovL2V4YW1wbGUuY29tLzIvIiwgIkFkZGVkIHNpdGUgMiIp
OworICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfYWRkX2l0ZW0od2ViQmFja0Zvcndh
cmRMaXN0LCBhZGRJdGVtMik7CisgICAgZ19vYmplY3RfdW5yZWYoYWRkSXRlbTIpOworICAgIGdf
YXNzZXJ0KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY29udGFpbnNfaXRlbSh3ZWJCYWNr
Rm9yd2FyZExpc3QsIGFkZEl0ZW0yKSk7CisKKyAgICAvLyBDaGVjayB0aGF0IHRoZSBhZGRlZCBp
dGVtIGlzIG5ldyBjdXJyZW50IGl0ZW0uCisgICAgY3VycmVudEl0ZW0gPSB3ZWJraXRfd2ViX2Jh
Y2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0KTsKKyAg
ICBnX2Fzc2VydChjdXJyZW50SXRlbSk7CisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJf
YmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGVuZ3RoKHdlYkJhY2tGb3J3YXJkTGlzdCks
ID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlz
dF9nZXRfYmFja19sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDEpOworICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQod2ViVmlldykpOworICAgIGdfYXNz
ZXJ0KHdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayh3ZWJWaWV3KSk7CisgICAgZ19hc3NlcnRf
Y21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF91cmkoY3VycmVudEl0ZW0pLCA9PSwg
Imh0dHA6Ly9leGFtcGxlLmNvbS8yLyIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2Vi
X2hpc3RvcnlfaXRlbV9nZXRfdGl0bGUoY3VycmVudEl0ZW0pLCA9PSwgIkFkZGVkIHNpdGUgMiIp
OworCisgICAgYmFja0l0ZW0gPSB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNr
X2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0KTsKKyAgICBnX2Fzc2VydChiYWNrSXRlbSk7CisgICAg
Z19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF91cmkoYmFja0l0ZW0p
LCA9PSwgImh0dHA6Ly9leGFtcGxlLmNvbS8iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0
X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3RpdGxlKGJhY2tJdGVtKSwgPT0sICJBZGRlZCBzaXRlIik7
CisKKyAgICAvLyBHbyB0byB0aGUgZmlyc3QgYWRkZWQgaXRlbS4KKyAgICBnX2Fzc2VydCh3ZWJr
aXRfd2ViX3ZpZXdfZ29fdG9fYmFja19mb3J3YXJkX2l0ZW0od2ViVmlldywgYWRkSXRlbTEpKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9y
d2FyZF9sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2Nt
cGludCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xlbmd0aCh3ZWJCYWNr
Rm9yd2FyZExpc3QpLCA9PSwgMCk7CisgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2Nhbl9n
b19mb3J3YXJkKHdlYlZpZXcpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9n
b19iYWNrKHdlYlZpZXcpKTsKKworICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOworfQorCitz
dGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY2xlYXIodm9pZCkK
K3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OworICAgIFdlYktpdFdlYkJhY2tGb3J3YXJk
TGlzdCogd2ViQmFja0ZvcndhcmRMaXN0OworICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBhZGRJ
dGVtOworICAgIGdfdGVzdF9idWcoIjM2MTczIik7CisKKyAgICB3ZWJWaWV3ID0gV0VCS0lUX1dF
Ql9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmplY3RfcmVmX3Npbmsod2Vi
Vmlldyk7CisKKyAgICB3ZWJCYWNrRm9yd2FyZExpc3QgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2Jh
Y2tfZm9yd2FyZF9saXN0KHdlYlZpZXcpOworICAgIGdfYXNzZXJ0KHdlYkJhY2tGb3J3YXJkTGlz
dCk7CisKKyAgICAvLyBDaGVjayB0aGF0IHRoZXJlIGlzIG5vIGl0ZW0uCisgICAgZ19hc3NlcnRf
Y21waW50KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGVuZ3RoKHdl
YkJhY2tGb3J3YXJkTGlzdCksID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dl
Yl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwg
PT0sIDApOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9j
dXJyZW50X2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93
ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh3ZWJWaWV3KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93
ZWJfdmlld19jYW5fZ29fYmFjayh3ZWJWaWV3KSk7CisKKyAgICAvLyBDaGVjayB0aGF0IGNsZWFy
aW5nIHRoZSBlbXB0eSBsaXN0IGRvZXMgbm90IG1vZGlmeSBjb3VudGVycworICAgIHdlYmtpdF93
ZWJfYmFja19mb3J3YXJkX2xpc3RfY2xlYXIod2ViQmFja0ZvcndhcmRMaXN0KTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9sZW5n
dGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDApOworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJr
aXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xlbmd0aCh3ZWJCYWNrRm9yd2FyZExp
c3QpLCA9PSwgMCk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3Rf
Z2V0X2N1cnJlbnRfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QpKTsKKyAgICBnX2Fzc2VydCghd2Vi
a2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHdlYlZpZXcpKTsKKyAgICBnX2Fzc2VydCghd2Vi
a2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrKHdlYlZpZXcpKTsKKworICAgIC8vIEFkZCBhIG5ldyBp
dGVtCisgICAgYWRkSXRlbSA9IHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX25ld193aXRoX2RhdGEo
Imh0dHA6Ly9leGFtcGxlLmNvbS8iLCAiQWRkZWQgc2l0ZSIpOworICAgIHdlYmtpdF93ZWJfYmFj
a19mb3J3YXJkX2xpc3RfYWRkX2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0LCBhZGRJdGVtKTsKKyAg
ICBnX29iamVjdF91bnJlZihhZGRJdGVtKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2JhY2tf
Zm9yd2FyZF9saXN0X2NvbnRhaW5zX2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0LCBhZGRJdGVtKSk7
CisKKyAgICAvLyBDaGVjayB0aGF0IGFmdGVyIGNsZWFyaW5nIHRoZSBsaXN0IHRoZSBhZGRlZCBp
dGVtIGlzIG5vIGxvbmdlciBpbiB0aGUgbGlzdAorICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJk
X2xpc3RfY2xlYXIod2ViQmFja0ZvcndhcmRMaXN0KTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dl
Yl9iYWNrX2ZvcndhcmRfbGlzdF9jb250YWluc19pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCwgYWRk
SXRlbSkpOworCisgICAgLy8gQ2hlY2sgdGhhdCBhZnRlciBjbGVhcmluZyBpdCwgdGhlIGxpc3Qg
aXMgZW1wdHkKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlz
dF9nZXRfZm9yd2FyZF9sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDApOworICAgIGdf
YXNzZXJ0X2NtcGludCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xlbmd0
aCh3ZWJCYWNrRm9yd2FyZExpc3QpLCA9PSwgMCk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJf
YmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QpKTsK
KyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHdlYlZpZXcpKTsK
KyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrKHdlYlZpZXcpKTsKKwor
ICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hh
cioqIGFyZ3YpCit7CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisg
ICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBnX3Rl
c3RfYWRkX2Z1bmMoIi93ZWJraXQvd2ViYmFja2ZvcndhcmRsaXN0L2FkZF9pdGVtIiwgdGVzdF93
ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2FkZF9pdGVtKTsKKyAgICBnX3Rlc3RfYWRkX2Z1
bmMoIi93ZWJraXQvd2ViYmFja2ZvcndhcmRsaXN0L2xpc3Rfb3JkZXIiLCB0ZXN0X3dlYmtpdF93
ZWJfYmFja19mb3J3YXJkX2xpc3Rfb3JkZXIpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtp
dC93ZWJoaXN0b3J5aXRlbS9saWZldGltZSIsIHRlc3Rfd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1f
bGlmZXRpbWUpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJiYWNrZm9yd2FyZGxp
c3QvY2xlYXIiLCB0ZXN0X3dlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY2xlYXIpOworICAg
IHJldHVybiBnX3Rlc3RfcnVuICgpOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYmRhdGFzb3VyY2UuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJkYXRhc291cmNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMDU2NjI1NwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJkYXRhc291cmNlLmMKQEAgLTAsMCArMSwy
NDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIE1pY2hhZWwgQWxvbnpvCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgor
I2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKworc3RhdGljIGNvbnN0IGdzaG9ydCBkZWZhdWx0
VGltZW91dCA9IDEwOworZ3VpbnQgd2FpdFRpbWVyOworZ2Jvb2xlYW4gc2hvdWxkV2FpdDsKKwor
dHlwZWRlZiBzdHJ1Y3QgeworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXc7CisgICAgV2ViS2l0
V2ViRnJhbWUqIG1haW5GcmFtZTsKK30gV2ViRGF0YVNvdXJjZUZpeHR1cmU7CisKK3N0YXRpYyB2
b2lkIHRlc3Rfd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfaW5pdGlhbF9yZXF1ZXN0KCkKK3sK
KyAgICBXZWJLaXRXZWJWaWV3KiB2aWV3OworICAgIFdlYktpdFdlYkZyYW1lKiBmcmFtZTsKKyAg
ICBXZWJLaXRXZWJEYXRhU291cmNlKiBkYXRhU291cmNlOworICAgIFdlYktpdE5ldHdvcmtSZXF1
ZXN0KiBpbml0aWFsUmVxdWVzdDsKKworICAgIHZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0
X3dlYl92aWV3X25ldygpKTsKKyAgICBnX29iamVjdF9yZWZfc2luayh2aWV3KTsKKyAgICBmcmFt
ZSA9IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh2aWV3KTsKKworICAgIFdlYktpdE5l
dHdvcmtSZXF1ZXN0KiByZXF1ZXN0ID0gd2Via2l0X25ldHdvcmtfcmVxdWVzdF9uZXcoImh0dHA6
Ly93d3cuZ29vZ2xlLmNvbSIpOworICAgIHdlYmtpdF93ZWJfZnJhbWVfbG9hZF9yZXF1ZXN0KGZy
YW1lLCByZXF1ZXN0KTsKKyAgICBnX29iamVjdF91bnJlZihyZXF1ZXN0KTsKKworICAgIGRhdGFT
b3VyY2UgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9wcm92aXNpb25hbF9kYXRhX3NvdXJjZShmcmFt
ZSk7CisgICAgZ19hc3NlcnQoZGF0YVNvdXJjZSk7CisgICAgaW5pdGlhbFJlcXVlc3QgPSB3ZWJr
aXRfd2ViX2RhdGFfc291cmNlX2dldF9pbml0aWFsX3JlcXVlc3QoZGF0YVNvdXJjZSk7CisgICAg
Z19hc3NlcnRfY21wc3RyKHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfZ2V0X3VyaShpbml0aWFsUmVx
dWVzdCksID09LCAiaHR0cDovL3d3dy5nb29nbGUuY29tLyIpOworCisgICAgZ19vYmplY3RfdW5y
ZWYodmlldyk7Cit9CisKK3N0YXRpYyB2b2lkIG5vdGlmeV9sb2FkX3N0YXR1c191bnJlYWNoYWJs
ZV9jYihXZWJLaXRXZWJWaWV3KiB2aWV3LCBHUGFyYW1TcGVjKiBwc3BlYywgR01haW5Mb29wKiBs
b29wKQoreworICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dl
dF9sb2FkX3N0YXR1cyAodmlldyk7CisgICAgV2ViS2l0V2ViRnJhbWUqIGZyYW1lID0gd2Via2l0
X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKHZpZXcpOworCisgICAgZ19hc3NlcnQoc3RhdHVzICE9
IFdFQktJVF9MT0FEX0ZJTklTSEVEKTsKKworICAgIGlmIChzdGF0dXMgIT0gV0VCS0lUX0xPQURf
RkFJTEVEKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJLaXRXZWJEYXRhU291cmNlKiBkYXRh
c291cmNlID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfZGF0YV9zb3VyY2UoZnJhbWUpOworCisgICAg
Z19hc3NlcnRfY21wc3RyKCJodHRwOi8vdGhpcy5ob3N0LmRvZXMubm90LmV4aXN0L2RvaXJlYWxs
eWV4aXN0Lmh0bWwiLCA9PSwKKyAgICAgICAgICAgICAgICAgICAgd2Via2l0X3dlYl9kYXRhX3Nv
dXJjZV9nZXRfdW5yZWFjaGFibGVfdXJpKGRhdGFzb3VyY2UpKTsKKworICAgIGdfbWFpbl9sb29w
X3F1aXQobG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIG5vdGlmeV9sb2FkX3N0YXR1c19jYihXZWJL
aXRXZWJWaWV3KiB2aWV3LCBHUGFyYW1TcGVjKiBwc3BlYywgR01haW5Mb29wKiBsb29wKQorewor
ICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0
YXR1cyAodmlldyk7CisgICAgV2ViS2l0V2ViRnJhbWUqIGZyYW1lID0gd2Via2l0X3dlYl92aWV3
X2dldF9tYWluX2ZyYW1lKHZpZXcpOworICAgIFdlYktpdFdlYkRhdGFTb3VyY2UqIGRhdGFTb3Vy
Y2UgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9kYXRhX3NvdXJjZShmcmFtZSk7CisKKyAgICBpZiAo
c3RhdHVzID09IFdFQktJVF9MT0FEX0NPTU1JVFRFRCkgeworICAgICAgICBnX2Fzc2VydCh3ZWJr
aXRfd2ViX2RhdGFfc291cmNlX2lzX2xvYWRpbmcoZGF0YVNvdXJjZSkpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGVsc2UgaWYgKHN0YXR1cyAhPSBXRUJLSVRfTE9BRF9GSU5JU0hFRCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgLyogVGVzdCBnZXRfcmVxdWVzdCAqLworICAgIGdfdGVz
dF9tZXNzYWdlKCJUZXN0aW5nIHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X3JlcXVlc3QiKTsK
KyAgICBXZWJLaXROZXR3b3JrUmVxdWVzdCogcmVxdWVzdCA9IHdlYmtpdF93ZWJfZGF0YV9zb3Vy
Y2VfZ2V0X3JlcXVlc3QoZGF0YVNvdXJjZSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9u
ZXR3b3JrX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KSwgPT0sICJodHRwOi8vd3d3LndlYmtpdC5v
cmcvIik7CisKKyAgICAvKiBUZXN0IGdldF9tYWluX3Jlc291cmNlICovCisgICAgZ190ZXN0X21l
c3NhZ2UoIlRlc3Rpbmcgd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfbWFpbl9yZXNvdXJjZSIp
OworICAgIFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSA9IHdlYmtpdF93ZWJfZGF0YV9zb3Vy
Y2VfZ2V0X21haW5fcmVzb3VyY2UoZGF0YVNvdXJjZSk7CisgICAgZ19hc3NlcnRfY21wc3RyKCJ0
ZXh0L2h0bWwiLCA9PSwgd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfbWltZV90eXBlKHJlc291cmNl
KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKCJodHRwOi8vd3d3LndlYmtpdC5vcmcvIiwgPT0sIHdl
YmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaShyZXNvdXJjZSkpOworCisgICAgLyogVGVzdCBnZXRf
ZGF0YS4gV2UganVzdCB0ZXN0IGlmIGRhdGEgaGFzIGNlcnRhaW4gc2l6ZSBmb3IgdGhlIG1lYW4g
dGltZSAqLworICAgIGdfdGVzdF9tZXNzYWdlKCJUZXN0aW5nIHdlYmtpdF93ZWJfZGF0YV9zb3Vy
Y2VfZ2V0X2RhdGEgaGFzIGNlcnRhaW4gc2l6ZSIpOworICAgIEdTdHJpbmcqIGRhdGEgPSB3ZWJr
aXRfd2ViX2RhdGFfc291cmNlX2dldF9kYXRhKGRhdGFTb3VyY2UpOworICAgIGdfYXNzZXJ0KGRh
dGEtPmxlbiA+IDEwMCk7CisKKyAgICAvKiBGSVhNRTogQWRkIHRlc3QgZm9yIGdldF9lbmNvZGlu
ZyAqLworCisgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKK30KKworc3RhdGljIGdib29sZWFu
IHdhaXRfdGltZXJfZmlyZWQoR01haW5Mb29wKiBsb29wKQoreworICAgIHdhaXRUaW1lciA9IDA7
CisgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKKworICAgIHJldHVybiBGQUxTRTsKK30KKwor
c3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX2RhdGFfc291cmNlKCkKK3sKKyAgICBXZWJLaXRX
ZWJWaWV3KiB2aWV3OworICAgIEdNYWluTG9vcCogbG9vcDsKKworICAgIHZpZXcgPSBXRUJLSVRf
V0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBnX29iamVjdF9yZWZfc2luayh2
aWV3KTsKKyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworICAgIGdfc2ln
bmFsX2Nvbm5lY3QodmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLCBHX0NBTExCQUNLKG5vdGlm
eV9sb2FkX3N0YXR1c19jYiksIGxvb3ApOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh2
aWV3LCAiaHR0cDovL3d3dy53ZWJraXQub3JnIik7CisKKyAgICB3YWl0VGltZXIgPSBnX3RpbWVv
dXRfYWRkX3NlY29uZHMoZGVmYXVsdFRpbWVvdXQsIChHU291cmNlRnVuYyl3YWl0X3RpbWVyX2Zp
cmVkLCBsb29wKTsKKworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIGlmICh3YWl0
VGltZXIpCisgICAgICAgIGdfc291cmNlX3JlbW92ZSh3YWl0VGltZXIpOworCisgICAgd2FpdFRp
bWVyID0gMDsKKworICAgIGdfbWFpbl9sb29wX3VucmVmKGxvb3ApOworICAgIGdfb2JqZWN0X3Vu
cmVmKHZpZXcpOworfQorCitzdGF0aWMgdm9pZCBub3RpZnlfbG9hZF9zdGF0dXNfbGlmZXRpbWVf
Y2IoV2ViS2l0V2ViVmlldyogdmlldywgR1BhcmFtU3BlYyogcHNwZWMsIEdNYWluTG9vcCogbG9v
cCkKK3sKKyAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJfdmlld19nZXRf
bG9hZF9zdGF0dXMgKHZpZXcpOworICAgIFdlYktpdFdlYkZyYW1lKiBmcmFtZSA9IHdlYmtpdF93
ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh2aWV3KTsKKyAgICBXZWJLaXRXZWJEYXRhU291cmNlKiBk
YXRhU291cmNlID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfZGF0YV9zb3VyY2UoZnJhbWUpOworCisg
ICAgaWYgKHN0YXR1cyA9PSBXRUJLSVRfTE9BRF9DT01NSVRURUQpIHsKKyAgICAgICAgZ19hc3Nl
cnQod2Via2l0X3dlYl9kYXRhX3NvdXJjZV9pc19sb2FkaW5nKGRhdGFTb3VyY2UpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9IFdFQktJVF9MT0FEX0ZJTklTSEVE
KQorICAgICAgICByZXR1cm47CisKKyAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworfQorCitz
dGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfZGF0YV9zb3VyY2VfbGlmZXRpbWUoKQoreworICAg
IFdlYktpdFdlYlZpZXcqIHZpZXc7CisgICAgR01haW5Mb29wKiBsb29wOworCisgICAgdmlldyA9
IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3Jl
Zl9zaW5rKHZpZXcpOworICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7Cisg
ICAgZ19zaWduYWxfY29ubmVjdCh2aWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJB
Q0sobm90aWZ5X2xvYWRfc3RhdHVzX2xpZmV0aW1lX2NiKSwgbG9vcCk7CisgICAgd2Via2l0X3dl
Yl92aWV3X2xvYWRfdXJpKHZpZXcsICJodHRwOi8vd3d3LndlYmtpdC5vcmciKTsKKworICAgIHdh
aXRUaW1lciA9IGdfdGltZW91dF9hZGRfc2Vjb25kcyhkZWZhdWx0VGltZW91dCwgKEdTb3VyY2VG
dW5jKXdhaXRfdGltZXJfZmlyZWQsIGxvb3ApOworCisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3Ap
OworCisgICAgV2ViS2l0V2ViRGF0YVNvdXJjZSogZGF0YVNvdXJjZSA9IHdlYmtpdF93ZWJfZnJh
bWVfZ2V0X2RhdGFfc291cmNlKHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh2aWV3KSk7
CisgICAgR0xpc3QqIHN1YlJlc291cmNlcyA9IHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X3N1
YnJlc291cmNlcyhkYXRhU291cmNlKTsKKyAgICBnaW50IG51bWJlck9mUmVzb3VyY2VzID0gZ19s
aXN0X2xlbmd0aChzdWJSZXNvdXJjZXMpOworICAgIGdfbGlzdF9mcmVlKHN1YlJlc291cmNlcyk7
CisKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh2
aWV3KSwgPT0sIFdFQktJVF9MT0FEX0ZJTklTSEVEKTsKKworICAgIHdlYmtpdF93ZWJfdmlld19s
b2FkX3VyaSh2aWV3LCAiaHR0cDovL2dub21lLm9yZyIpOworCisgICAgZ19hc3NlcnRfY21waW50
KHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXModmlldyksID09LCBXRUJLSVRfTE9BRF9Q
Uk9WSVNJT05BTCk7CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfc3RvcF9sb2FkaW5nKHZpZXcpOwor
CisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXModmll
dyksID09LCBXRUJLSVRfTE9BRF9GQUlMRUQpOworCisgICAgc3ViUmVzb3VyY2VzID0gd2Via2l0
X3dlYl9kYXRhX3NvdXJjZV9nZXRfc3VicmVzb3VyY2VzKGRhdGFTb3VyY2UpOworICAgIGdfYXNz
ZXJ0X2NtcGludChudW1iZXJPZlJlc291cmNlcywgPT0sIGdfbGlzdF9sZW5ndGgoc3ViUmVzb3Vy
Y2VzKSk7CisgICAgZ19saXN0X2ZyZWUoc3ViUmVzb3VyY2VzKTsKKworICAgIGlmICh3YWl0VGlt
ZXIpCisgICAgICAgIGdfc291cmNlX3JlbW92ZSh3YWl0VGltZXIpOworCisgICAgd2FpdFRpbWVy
ID0gMDsKKworICAgIGdfbWFpbl9sb29wX3VucmVmKGxvb3ApOworICAgIGdfb2JqZWN0X3VucmVm
KHZpZXcpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfZGF0YV9zb3VyY2VfdW5y
ZWFjaGFibGVfdXJpKCkKK3sKKyAgICAvKiBGSVhNRTogdGhpcyB0ZXN0IGZhaWxzIGN1cnJlbnRs
eS4gKi8KKyAgICByZXR1cm47CisKKyAgICBXZWJLaXRXZWJWaWV3KiB2aWV3OworICAgIEdNYWlu
TG9vcCogbG9vcDsKKworICAgIHZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3
X25ldygpKTsKKyAgICBnX29iamVjdF9yZWZfc2luayh2aWV3KTsKKyAgICBsb29wID0gZ19tYWlu
X2xvb3BfbmV3KE5VTEwsIFRSVUUpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QodmlldywgIm5vdGlm
eTo6bG9hZC1zdGF0dXMiLCBHX0NBTExCQUNLKG5vdGlmeV9sb2FkX3N0YXR1c191bnJlYWNoYWJs
ZV9jYiksIGxvb3ApOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh2aWV3LCAiaHR0cDov
L3RoaXMuaG9zdC5kb2VzLm5vdC5leGlzdC9kb2lyZWFsbHlleGlzdC5odG1sIik7CisKKyAgICB3
YWl0VGltZXIgPSBnX3RpbWVvdXRfYWRkX3NlY29uZHMoZGVmYXVsdFRpbWVvdXQsIChHU291cmNl
RnVuYyl3YWl0X3RpbWVyX2ZpcmVkLCBsb29wKTsKKworICAgIGdfbWFpbl9sb29wX3J1bihsb29w
KTsKKworICAgIGlmICh3YWl0VGltZXIpCisgICAgICAgIGdfc291cmNlX3JlbW92ZSh3YWl0VGlt
ZXIpOworCisgICAgd2FpdFRpbWVyID0gMDsKKworICAgIGdfbWFpbl9sb29wX3VucmVmKGxvb3Ap
OworICAgIGdfb2JqZWN0X3VucmVmKHZpZXcpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hh
cioqIGFyZ3YpCit7CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisg
ICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBnX3Rl
c3RfYnVnKCIyNDc1OCIpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJkYXRhc291
cmNlL2dldF9pbml0aWFsX3JlcXVlc3QiLAorICAgICAgICAgICAgICAgICAgICB0ZXN0X3dlYmtp
dF93ZWJfZGF0YV9zb3VyY2VfZ2V0X2luaXRpYWxfcmVxdWVzdCk7CisgICAgZ190ZXN0X2FkZF9m
dW5jKCIvd2Via2l0L3dlYmRhdGFzb3VyY2UvYXBpIiwKKyAgICAgICAgICAgICAgICAgICAgdGVz
dF93ZWJraXRfd2ViX2RhdGFfc291cmNlKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQv
d2ViZGF0YXNvdXJjZS91bnJlYWNoYWJsZV91cmkiLAorICAgICAgICAgICAgICAgICAgICB0ZXN0
X3dlYmtpdF93ZWJfZGF0YV9zb3VyY2VfdW5yZWFjaGFibGVfdXJpKTsKKyAgICBnX3Rlc3RfYWRk
X2Z1bmMoIi93ZWJraXQvd2ViZGF0YXNvdXJjZS9saWZldGltZSIsCisgICAgICAgICAgICAgICAg
ICAgIHRlc3Rfd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9saWZldGltZSk7CisKKyAgICByZXR1cm4g
Z190ZXN0X3J1biAoKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0R3RrL3Rlc3R3ZWJmcmFtZS5jIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRHdGsvdGVzdHdlYmZyYW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MTEzMTg3MwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0R3RrL3Rlc3R3ZWJmcmFtZS5jCkBAIC0wLDAgKzEsMjIwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgQ29sbGFib3JhIEx0ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPGVycm5vLmg+
CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGdsaWIv
Z3N0ZGlvLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQu
aD4KKworc3RhdGljIGludCBudW1iZXJPZkZyYW1lc0NyZWF0ZWQgPSAwOworCitzdGF0aWMgdm9p
ZCBjcmVhdGVGcmFtZVNpZ25hbFRlc3RGcmFtZUNyZWF0ZWRDYWxsYmFjayhXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3LCBXZWJLaXRXZWJGcmFtZSogZnJhbWUsIGdwb2ludGVyIGRhdGEpCit7CisgICAg
bnVtYmVyT2ZGcmFtZXNDcmVhdGVkKys7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBjcmVhdGVGcmFt
ZVNpZ25hbFRlc3RUaW1lb3V0KGdwb2ludGVyIGRhdGEpCit7CisgICAgZ19hc3NlcnRfY21waW50
KG51bWJlck9mRnJhbWVzQ3JlYXRlZCwgPT0sIDIpOworICAgIGdfbWFpbl9sb29wX3F1aXQoKEdN
YWluTG9vcCopIGRhdGEpOworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgdGVz
dF93ZWJraXRfd2ViX2ZyYW1lX2NyZWF0ZWRfc2lnbmFsKHZvaWQpCit7CisgICAgR3RrV2lkZ2V0
KiB3ZWJWaWV3OworICAgIEd0a1dpZGdldCogd2luZG93OworICAgIEdNYWluTG9vcCogbG9vcCA9
IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKKworICAgIHdpbmRvdyA9IGd0a193aW5kb3df
bmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOworCisgICAgd2ViVmlldyA9IHdlYmtpdF93ZWJfdmll
d19uZXcoKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJmcmFtZS1jcmVhdGVkIiwg
R19DQUxMQkFDSyhjcmVhdGVGcmFtZVNpZ25hbFRlc3RGcmFtZUNyZWF0ZWRDYWxsYmFjayksIGxv
b3ApOworCisgICAgLy8gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCBleGFjdGx5IHR3byBjcmVhdGUt
ZnJhbWUgc2lnbmFscyBhcmUKKyAgICAvLyBmaXJlZCBhbmQgbm8gbW9yZSwgc28gd2Ugc2V0IGEg
dGltZW91dCBoZXJlLiBUaGVyZSBkb2VzIG5vdCBhcHBlYXIKKyAgICAvLyB0byBiZSBhIHNpbXBs
ZSB3YXkgdmlhIHRoZSBBUEkgdG8gZmlndXJlIG91dCB3aGVuIGFsbCBmcmFtZXMgaGF2ZQorICAg
IC8vIGxvYWRlZC4KKyAgICBnX3RpbWVvdXRfYWRkKDUwMCwgY3JlYXRlRnJhbWVTaWduYWxUZXN0
VGltZW91dCwgbG9vcCk7CisKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdp
bmRvdyksIHdlYlZpZXcpOworICAgIGd0a193aWRnZXRfc2hvdyh3aW5kb3cpOworICAgIGd0a193
aWRnZXRfc2hvdyh3ZWJWaWV3KTsKKworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhX
RUJLSVRfV0VCX1ZJRVcod2ViVmlldyksCisgICAgICAgICI8aHRtbD48Ym9keT5GcmFtZXMhIgor
ICAgICAgICAiPGlmcmFtZT48L2lmcmFtZT4iCisgICAgICAgICI8aWZyYW1lPjwvaWZyYW1lPiIK
KyAgICAgICAgIjwvYm9keT48L2h0bWw+IiwKKyAgICAgICAgInRleHQvaHRtbCIsICJ1dGYtOCIs
ICJmaWxlOi8vIik7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworfQorCitzdGF0aWMgdm9p
ZCB0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfY3JlYXRlX2Rlc3Ryb3kodm9pZCkKK3sKKyAgICBHdGtX
aWRnZXQgKndlYlZpZXc7CisgICAgR3RrV2lkZ2V0ICp3aW5kb3c7CisKKyAgICBnX3Rlc3RfYnVn
KCIyMTgzNyIpOworICAgIHdlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7CisgICAgZ19v
YmplY3RfcmVmX3Npbmsod2ViVmlldyk7CisgICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKHdl
YlZpZXcpLT5yZWZfY291bnQsID09LCAxKTsKKyAgICAvLyBUaGlzIGNyYXNoZWQgd2l0aCB0aGUg
b3JpZ2luYWwgdmVyc2lvbgorICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOworCisgICAgZ190
ZXN0X2J1ZygiMjUwNDIiKTsKKyAgICB3aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9X
X1RPUExFVkVMKTsKKyAgICB3ZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygpOworICAgIGd0
a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgd2ViVmlldyk7CisgICAgZ3Rr
X3dpZGdldF9zaG93KHdpbmRvdyk7CisgICAgZ3RrX3dpZGdldF9zaG93KHdlYlZpZXcpOworICAg
IGd0a193aWRnZXRfZGVzdHJveSh3ZWJWaWV3KTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJr
aXRfd2ViX2ZyYW1lX2xpZmV0aW1lKHZvaWQpCit7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmll
dzsKKyAgICBXZWJLaXRXZWJGcmFtZSogd2ViRnJhbWU7CisgICAgZ190ZXN0X2J1ZygiMjE4Mzci
KTsKKworICAgIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygp
KTsKKyAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
R19PQkpFQ1Qod2ViVmlldyktPnJlZl9jb3VudCwgPT0sIDEpOworICAgIHdlYkZyYW1lID0gd2Vi
a2l0X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKHdlYlZpZXcpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChHX09CSkVDVCh3ZWJGcmFtZSktPnJlZl9jb3VudCwgPT0sIDEpOworCisgICAgLy8gQWRkIGR1
bW15IHJlZmVyZW5jZSBvbiB0aGUgV2ViS2l0V2ViRnJhbWUgdG8ga2VlcCBpdCBhbGl2ZQorICAg
IGdfb2JqZWN0X3JlZih3ZWJGcmFtZSk7CisgICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKHdl
YkZyYW1lKS0+cmVmX2NvdW50LCA9PSwgMik7CisKKyAgICAvLyBUaGlzIGNyYXNoZWQgd2l0aCB0
aGUgb3JpZ2luYWwgdmVyc2lvbgorICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOworCisgICAg
Ly8gTWFrZSBzdXJlIHRoYXQgdGhlIGZyYW1lIGdvdCBkZWxldGVkIGFzIHdlbGwuIFdlIGRpZCB0
aGlzCisgICAgLy8gYnkgYWRkaW5nIGFuIGV4dHJhIHJlZiBvbiB0aGUgV2ViS2l0V2ViRnJhbWUg
YW5kIHdlIHNob3VsZAorICAgIC8vIGJlIHRoZSBvbmUgaG9sZGluZyB0aGUgbGFzdCByZWZlcmVu
Y2UuCisgICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKHdlYkZyYW1lKS0+cmVmX2NvdW50LCA9
PSwgMSk7CisgICAgZ19vYmplY3RfdW5yZWYod2ViRnJhbWUpOworfQorCitzdGF0aWMgZ2Jvb2xl
YW4gcHJpbnRfcmVxdWVzdGVkX2NiKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFdlYkZy
YW1lKiB3ZWJGcmFtZSwgR01haW5Mb29wKiBsb29wKQoreworICAgIGdfb2JqZWN0X3NldF9kYXRh
KEdfT0JKRUNUKHdlYlZpZXcpLCAic2lnbmFsLWhhbmRsZWQiLCBHSU5UX1RPX1BPSU5URVIoVFJV
RSkpOworICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisK
K3N0YXRpYyB2b2lkIHByaW50X3RpbWVvdXQoR01haW5Mb29wKiBsb29wKQoreworICAgIGlmIChn
X21haW5fbG9vcF9pc19ydW5uaW5nKGxvb3ApKQorICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxv
b3ApOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfcHJpbnRpbmcodm9p
ZCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OworCisgICAgd2ViVmlldyA9IFdFQktJ
VF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3JlZl9zaW5r
KHdlYlZpZXcpOworICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVCh3ZWJWaWV3KS0+cmVmX2Nv
dW50LCA9PSwgMSk7CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxodG1sPjxib2R5PjxoMT5XZWJLaXRH
VEsrITwvaDE+PC9ib2R5PjwvaHRtbD4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAidGV4dC9odG1sIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInV0Zi04IiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGU6Ly8iKTsKKworICAgIEdNYWlu
TG9vcCogbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKKworICAgIC8vIERvZXMg
amF2YXNjcmlwdCBwcmludCgpIHdvcmsgY29ycmVjdGx5PworICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
d2ViVmlldywgInByaW50LXJlcXVlc3RlZCIsCisgICAgICAgICAgICAgICAgICAgICBHX0NBTExC
QUNLKHByaW50X3JlcXVlc3RlZF9jYiksCisgICAgICAgICAgICAgICAgICAgICBsb29wKTsKKwor
ICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKHdlYlZpZXcpLCAic2lnbmFsLWhhbmRsZWQi
LCBHSU5UX1RPX1BPSU5URVIoRkFMU0UpKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfZXhlY3V0ZV9z
Y3JpcHQgKHdlYlZpZXcsICJwcmludCgpOyIpOworCisgICAgLy8gR2l2ZSBqYXZhc2NyaXB0Y29y
ZSBzb21lIHRpbWUgdG8gcHJvY2VzcyB0aGUgcHJpbnQgcmVxdWVzdCwgYnV0CisgICAgLy8gcHJl
cGFyZSBhIHRpbWVvdXQgdG8gYXZvaWQgaXQgcnVubmluZyBmb3JldmVyIGluIGNhc2UgdGhlIHNp
Z25hbCBpcworICAgIC8vIG5ldmVyIGVtaXR0ZWQuCisgICAgZ190aW1lb3V0X2FkZCgxMDAwLCAo
R1NvdXJjZUZ1bmMpcHJpbnRfdGltZW91dCwgbG9vcCk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxv
b3ApOworCisgICAgZ19hc3NlcnRfY21waW50KEdQT0lOVEVSX1RPX0lOVChnX29iamVjdF9nZXRf
ZGF0YShHX09CSkVDVCh3ZWJWaWV3KSwgInNpZ25hbC1oYW5kbGVkIikpLCA9PSwgVFJVRSk7CisK
KyAgICAvLyBEb2VzIHByaW50aW5nIGRpcmVjdGx5IHRvIGEgZmlsZT8KKyAgICBHRXJyb3IgKmVy
cm9yID0gTlVMTDsKKyAgICBnY2hhciogdGVtcG9yYXJ5RmlsZW5hbWUgPSBOVUxMOworICAgIGdp
bnQgZmQgPSBnX2ZpbGVfb3Blbl90bXAgKCJ3ZWJraXQtdGVzdHdlYmZyYW1lLVhYWFhYWCIsICZ0
ZW1wb3JhcnlGaWxlbmFtZSwgJmVycm9yKTsKKyAgICBjbG9zZShmZCk7CisKKyAgICBpZiAoZXJy
b3IpIHsKKyAgICAgICAgZ19jcml0aWNhbCgiRmFpbGVkIHRvIG9wZW4gYSB0ZW1wb3JhcnkgZmls
ZSBmb3Igd3JpdGluZzogJXMuIiwgZXJyb3ItPm1lc3NhZ2UpOworICAgICAgICBnX2Vycm9yX2Zy
ZWUoZXJyb3IpOworICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgICAgLy8gV2UgZGVs
ZXRlIHRoZSBmaWxlLCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgZmlndXJlIG91dCB0aGF0IHRoZQor
ICAgIC8vIGZpbGUgZ290IHByaW50ZWQ7CisgICAgaWYgKGdfdW5saW5rKHRlbXBvcmFyeUZpbGVu
YW1lKSA9PSAtMSkgeworICAgICAgICBnX3dhcm5pbmcoIkZhaWxlZCB0byBkZWxldGUgdGhlIHRl
bXBvcmFyeSBmaWxlOiAlcy5cblRoaXMgbWF5IGNhdXNlIHRoZSB0ZXN0IHRvIGJlIGJvZ3VzLiIs
IGdfc3RyZXJyb3IoZXJybm8pKTsKKyAgICB9CisKKyAgICBXZWJLaXRXZWJGcmFtZSogd2ViRnJh
bWUgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUod2ViVmlldyk7CisgICAgR3RrUHJp
bnRPcGVyYXRpb24qIG9wZXJhdGlvbiA9IGd0a19wcmludF9vcGVyYXRpb25fbmV3KCk7CisgICAg
R3RrUHJpbnRPcGVyYXRpb25BY3Rpb24gYWN0aW9uID0gR1RLX1BSSU5UX09QRVJBVElPTl9BQ1RJ
T05fRVhQT1JUOworICAgIEd0a1ByaW50T3BlcmF0aW9uUmVzdWx0IHJlc3VsdDsKKworICAgIGd0
a19wcmludF9vcGVyYXRpb25fc2V0X2V4cG9ydF9maWxlbmFtZShvcGVyYXRpb24sIHRlbXBvcmFy
eUZpbGVuYW1lKTsKKyAgICByZXN1bHQgPSB3ZWJraXRfd2ViX2ZyYW1lX3ByaW50X2Z1bGwgKHdl
YkZyYW1lLCBvcGVyYXRpb24sIGFjdGlvbiwgTlVMTCk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQo
cmVzdWx0LCA9PSwgR1RLX1BSSU5UX09QRVJBVElPTl9SRVNVTFRfQVBQTFkpOworICAgIGdfYXNz
ZXJ0X2NtcGludChnX2ZpbGVfdGVzdCh0ZW1wb3JhcnlGaWxlbmFtZSwgR19GSUxFX1RFU1RfSVNf
UkVHVUxBUiksID09LCBUUlVFKTsKKworICAgIGdfdW5saW5rKHRlbXBvcmFyeUZpbGVuYW1lKTsK
KyAgICBnX29iamVjdF91bnJlZihvcGVyYXRpb24pOworY2xlYW51cDoKKyAgICBnX29iamVjdF91
bnJlZih3ZWJWaWV3KTsKKyAgICBnX2ZyZWUodGVtcG9yYXJ5RmlsZW5hbWUpOworfQorCitzdGF0
aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfcmVzcG9uc2UoKQoreworICAgIFdlYktpdFdl
YkZyYW1lKiBmcmFtZSA9IGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfRlJBTUUsIE5VTEwp
OworICAgIFdlYktpdE5ldHdvcmtSZXNwb25zZSogcmVzcG9uc2UgPSB3ZWJraXRfd2ViX2ZyYW1l
X2dldF9uZXR3b3JrX3Jlc3BvbnNlKGZyYW1lKTsKKyAgICBnX2Fzc2VydCghcmVzcG9uc2UpOwor
ICAgIGdfb2JqZWN0X3VucmVmKGZyYW1lKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIq
KiBhcmd2KQoreworICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKKworICAg
IGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7CisgICAgZ190ZXN0
X2FkZF9mdW5jKCIvd2Via2l0L3dlYnZpZXcvY3JlYXRlX2Rlc3Ryb3kiLCB0ZXN0X3dlYmtpdF93
ZWJfZnJhbWVfY3JlYXRlX2Rlc3Ryb3kpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93
ZWJ2aWV3L2ZyYW1lLWNyZWF0ZWRfc2lnbmFsIiwgdGVzdF93ZWJraXRfd2ViX2ZyYW1lX2NyZWF0
ZWRfc2lnbmFsKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2ViZnJhbWUvbGlmZXRp
bWUiLCB0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfbGlmZXRpbWUpOworICAgIGdfdGVzdF9hZGRfZnVu
YygiL3dlYmtpdC93ZWJ2aWV3L3ByaW50aW5nIiwgdGVzdF93ZWJraXRfd2ViX2ZyYW1lX3ByaW50
aW5nKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vidmlldy9yZXNwb25zZSIsIHRl
c3Rfd2Via2l0X3dlYl9mcmFtZV9yZXNwb25zZSk7CisgICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7
Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0
d2ViaGlzdG9yeWl0ZW0uYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rl
c3R3ZWJoaXN0b3J5aXRlbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgy
ZTE5MWMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dEd0ay90ZXN0d2ViaGlzdG9yeWl0ZW0uYwpAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA5IEphbiBNaWNoYWVsIEFsb256bworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Vi
a2l0Lmg+CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogaXRl
bTsKK30gV2ViSGlzdG9yeUl0ZW1GaXh0dXJlOworCitzdGF0aWMgdm9pZCB3ZWJfaGlzdG9yeV9p
dGVtX2ZpeHR1cmVfc2V0dXAoV2ViSGlzdG9yeUl0ZW1GaXh0dXJlKiBmaXh0dXJlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjb25zdHBvaW50ZXIgZGF0YSkK
K3sKKyAgICBmaXh0dXJlLT5pdGVtID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dpdGhf
ZGF0YSgiaHR0cDovL2V4YW1wbGUuY29tLyIsICJFeGFtcGxlMSIpOworICAgIGdfYXNzZXJ0X2Nt
cGludChHX09CSkVDVChmaXh0dXJlLT5pdGVtKS0+cmVmX2NvdW50LCA9PSAsIDEpOworICAgIGdf
YXNzZXJ0KGZpeHR1cmUtPml0ZW0gIT0gTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYl9oaXN0
b3J5X2l0ZW1fZml4dHVyZV90ZWFyZG93bihXZWJIaXN0b3J5SXRlbUZpeHR1cmUqIGZpeHR1cmUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NvbnN0cG9p
bnRlciBkYXRhKQoreworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPml0ZW0gIT0gTlVMTCk7CisgICAg
Z19hc3NlcnRfY21waW50KEdfT0JKRUNUKGZpeHR1cmUtPml0ZW0pLT5yZWZfY291bnQsID09LCAx
KTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfZGF0
YShXZWJIaXN0b3J5SXRlbUZpeHR1cmUqIGZpeHR1cmUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBn
X2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3RpdGxlKGZpeHR1cmUt
Pml0ZW0pLCA9PSwgIkV4YW1wbGUxIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJf
aGlzdG9yeV9pdGVtX2dldF91cmkoZml4dHVyZS0+aXRlbSksID09LCAiaHR0cDovL2V4YW1wbGUu
Y29tLyIpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2Fs
dGVybmF0ZV90aXRsZShXZWJIaXN0b3J5SXRlbUZpeHR1cmUqIGZpeHR1cmUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY29uc3Rwb2lu
dGVyIGRhdGEpCit7CisgICAgd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fc2V0X2FsdGVybmF0ZV90
aXRsZShmaXh0dXJlLT5pdGVtLCAiQWx0ZXJuYXRlIHRpdGxlIik7CisgICAgZ19hc3NlcnRfY21w
c3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF9hbHRlcm5hdGVfdGl0bGUoZml4dHVyZS0+
aXRlbSksID09LCAiQWx0ZXJuYXRlIHRpdGxlIik7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBj
aGFyKiogYXJndikKK3sKKyAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7CisK
KyAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOworICAgIGdf
dGVzdF9hZGQoIi93ZWJraXQvd2ViaGlzdG9yeWl0ZW0vZ2V0X2RhdGEiLAorICAgICAgICAgICAg
ICAgV2ViSGlzdG9yeUl0ZW1GaXh0dXJlLCAwLCB3ZWJfaGlzdG9yeV9pdGVtX2ZpeHR1cmVfc2V0
dXAsCisgICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF9kYXRh
LCB3ZWJfaGlzdG9yeV9pdGVtX2ZpeHR1cmVfdGVhcmRvd24pOworICAgIGdfdGVzdF9hZGQoIi93
ZWJraXQvd2ViaGlzdG9yeWl0ZW0vYWx0ZXJuYXRlX3RpdGxlIiwKKyAgICAgICAgICAgICAgIFdl
Ykhpc3RvcnlJdGVtRml4dHVyZSwgMCwgd2ViX2hpc3RvcnlfaXRlbV9maXh0dXJlX3NldHVwLAor
ICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9hbHRlcm5hdGVfdGl0
bGUsIHdlYl9oaXN0b3J5X2l0ZW1fZml4dHVyZV90ZWFyZG93bik7CisgICAgcmV0dXJuIGdfdGVz
dF9ydW4gKCk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dEd0ay90ZXN0d2ViaW5zcGVjdG9yLmMgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dEd0ay90ZXN0d2ViaW5zcGVjdG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uYTc0MzgyZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0R3RrL3Rlc3R3ZWJpbnNwZWN0b3IuYwpAQCAtMCwwICsxLDE3MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9tZS5vcmc+Cisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJ0ZXN0X3V0aWxzLmgiCisKKyNpbmNsdWRlIDxz
dHJpbmcuaD4KKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1
ZGUgPHdlYmtpdC93ZWJraXQuaD4KKworR01haW5Mb29wICpsb29wOworR3RrV2lkZ2V0ICp3aW5k
b3c7CisKK3N0YXRpYyBnYm9vbGVhbiBxdWl0TG9vcChncG9pbnRlciBkYXRhKQoreworICAgIGdf
bWFpbl9sb29wX3F1aXQobG9vcCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKKy8qIElnbm9yZSBz
aW1wbGUgdHJhbnNsYXRpb24tcmVsYXRlZCBtZXNzYWdlcyBhbmQgdXBncmFkZSBvdGhlcgorICog
bWVzc2FnZXMgdG8gd2FybmluZ3MuCisgKi8KK3N0YXRpYyBnYm9vbGVhbiBjb25zb2xlTWVzc2Fn
ZUNhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIHVu
c2lnbmVkIGludCBsaW5lLCBjb25zdCBjaGFyKiBzb3VyY2VJZCkKK3sKKyAgICBpZiAoc3Ryc3Ry
KG1lc3NhZ2UsICJMb2NhbGl6ZWQgc3RyaW5nIikgfHwgc3Ryc3RyKG1lc3NhZ2UsICJQcm90b2Nv
bCBFcnJvcjogdGhlIG1lc3NhZ2UgaXMgZm9yIG5vbi1leGlzdGluZyBkb21haW4gJ1Byb2ZpbGVy
JyIpIHx8CisgICAgICAgIHN0cnN0cihtZXNzYWdlLCAiRGlkbid0IGZpbmQgYSBUcmVlRWxlbWVu
dCBmb3IgYSByZXByZXNlbnRlZE9iamVjdCIpKQorICAgICAgICByZXR1cm4gVFJVRTsKKworICAg
IGdfd2FybmluZygiQ29uc29sZTogJXMgQCVkOiAlc1xuIiwgc291cmNlSWQsIGxpbmUsIG1lc3Nh
Z2UpOworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgV2ViS2l0V2ViVmlldyogaW5zcGVj
dEVsZW1lbnRDYWxsYmFjayhXZWJLaXRXZWJJbnNwZWN0b3IgKmluc3BlY3RvciwgV2ViS2l0V2Vi
VmlldyAqaW5zcGVjdGVkV2ViVmlldywgaW50ICp0aW1lc0VsZW1lbnRJbnNwZWN0ZWQpCit7Cisg
ICAgKnRpbWVzRWxlbWVudEluc3BlY3RlZCA9ICp0aW1lc0VsZW1lbnRJbnNwZWN0ZWQgKyAxOwor
CisgICAgd2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7CisKKyAg
ICBHdGtXaWRnZXQgKm5ld1dlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7CisgICAgZ3Rr
X2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCBuZXdXZWJWaWV3KTsKKworICAg
IGdfc2lnbmFsX2Nvbm5lY3QobmV3V2ViVmlldywgImNvbnNvbGUtbWVzc2FnZSIsCisgICAgICAg
ICAgICAgICAgICAgICBHX0NBTExCQUNLKGNvbnNvbGVNZXNzYWdlQ2FsbGJhY2spLCBOVUxMKTsK
KworICAgIHJldHVybiBXRUJLSVRfV0VCX1ZJRVcobmV3V2ViVmlldyk7Cit9CisKK3N0YXRpYyBn
Ym9vbGVhbiBjbG9zZUluc3BlY3RvcihXZWJLaXRXZWJJbnNwZWN0b3IgKmluc3BlY3RvciwgaW50
ICp0aW1lc0Nsb3NlZCkKK3sKKyAgICAqdGltZXNDbG9zZWQgPSAqdGltZXNDbG9zZWQgKyAxOwor
CisgICAgZ3RrX3dpZGdldF9kZXN0cm95KHdpbmRvdyk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisK
K3N0YXRpYyBnYm9vbGVhbiBzaG93SW5zcGVjdG9yKFdlYktpdFdlYkluc3BlY3RvciAqaW5zcGVj
dG9yLCBncG9pbnRlciBkYXRhKQoreworICAgIGdfaWRsZV9hZGQocXVpdExvb3AsIE5VTEwpOwor
ICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZCBsb2FkRmluaXNoZWQoV2ViS2l0V2Vi
VmlldyAqd2ViVmlldywgV2ViS2l0V2ViRnJhbWUgKmZyYW1lLCBnYm9vbGVhbiAqaXNMb2FkRmlu
aXNoZWQpCit7CisgICAgKmlzTG9hZEZpbmlzaGVkID0gVFJVRTsKKyAgICBpZiAoZ19tYWluX2xv
b3BfaXNfcnVubmluZyhsb29wKSkKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKK30K
Kworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX2luc3BlY3Rvcl9jbG9zZV9hbmRfaW5zcGVj
dCgpCit7CisgICAgV2ViS2l0V2ViVmlldyAqd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJr
aXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJV
RSk7CisKKyAgICBnYm9vbGVhbiBpc0xvYWRGaW5pc2hlZCA9IEZBTFNFOworICAgIGdfc2lnbmFs
X2Nvbm5lY3Qod2ViVmlldywgImxvYWQtZmluaXNoZWQiLCBHX0NBTExCQUNLKGxvYWRGaW5pc2hl
ZCksICZpc0xvYWRGaW5pc2hlZCk7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdl
YlZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8aHRtbD48Ym9keT48cD53
b29ob288L3A+PC9ib2R5PjwvaHRtbD4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAidGV4dC9odG1sIiwgIlVURi04IiwgImZpbGU6Ly8iKTsKKyAgICBpZiAoIWlzTG9hZEZpbmlz
aGVkKQorICAgICAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICBnX29iamVjdF9zZXQo
d2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3KSwgImVuYWJsZS1kZXZlbG9wZXIt
ZXh0cmFzIiwgVFJVRSwgTlVMTCk7CisgICAgV2ViS2l0V2ViSW5zcGVjdG9yICppbnNwZWN0b3Ig
PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2luc3BlY3Rvcih3ZWJWaWV3KTsKKworICAgIGludCB0aW1l
c0VsZW1lbnRJbnNwZWN0ZWQgPSAwOworICAgIGludCB0aW1lc0Nsb3NlZCA9IDA7CisgICAgZ19v
YmplY3RfY29ubmVjdChpbnNwZWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjpp
bnNwZWN0LXdlYi12aWV3IiwgR19DQUxMQkFDSyhpbnNwZWN0RWxlbWVudENhbGxiYWNrKSwgJnRp
bWVzRWxlbWVudEluc3BlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6OnNob3ct
d2luZG93IiwgR19DQUxMQkFDSyhzaG93SW5zcGVjdG9yKSwgTlVMTCwKKyAgICAgICAgICAgICAg
ICAgICAgICJzaWduYWw6OmNsb3NlLXdpbmRvdyIsIEdfQ0FMTEJBQ0soY2xvc2VJbnNwZWN0b3Ip
LCAmdGltZXNDbG9zZWQsCisgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKworICAgIHdlYmtp
dF93ZWJfaW5zcGVjdG9yX2luc3BlY3RfY29vcmRpbmF0ZXMoaW5zcGVjdG9yLCAwLjAsIDAuMCk7
CisgICAgZ19hc3NlcnRfY21waW50KHRpbWVzRWxlbWVudEluc3BlY3RlZCwgPT0sIDEpOworCisg
ICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgd2Via2l0X3dlYl9pbnNwZWN0b3JfY2xv
c2UoaW5zcGVjdG9yKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGltZXNDbG9zZWQsID09LCAxKTsK
KworICAgIHdlYmtpdF93ZWJfaW5zcGVjdG9yX2luc3BlY3RfY29vcmRpbmF0ZXMoaW5zcGVjdG9y
LCAwLjAsIDAuMCk7CisgICAgZ19hc3NlcnRfY21waW50KHRpbWVzRWxlbWVudEluc3BlY3RlZCwg
PT0sIDIpOworCisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgZ3RrX3dpZGdldF9k
ZXN0cm95KEdUS19XSURHRVQod2ViVmlldykpOworICAgIGdfYXNzZXJ0X2NtcGludCh0aW1lc0Ns
b3NlZCwgPT0sIDIpOworCisgICAgZ19tYWluX2xvb3BfdW5yZWYobG9vcCk7Cit9CisKK3N0YXRp
YyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9pbnNwZWN0b3JfZGVzdHJveV9pbnNwZWN0ZWRfd2ViX3Zp
ZXcoKQoreworICAgIFdlYktpdFdlYlZpZXcgKndlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Vi
a2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRS
VUUpOworCisgICAgZ2Jvb2xlYW4gaXNMb2FkRmluaXNoZWQgPSBGQUxTRTsKKyAgICBnX3NpZ25h
bF9jb25uZWN0KHdlYlZpZXcsICJsb2FkLWZpbmlzaGVkIiwgR19DQUxMQkFDSyhsb2FkRmluaXNo
ZWQpLCAmaXNMb2FkRmluaXNoZWQpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3
ZWJWaWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGh0bWw+PGJvZHk+PHA+
d29vaG9vPC9wPjwvYm9keT48L2h0bWw+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgInRleHQvaHRtbCIsICJVVEYtOCIsICJmaWxlOi8vIik7CisgICAgaWYgKCFpc0xvYWRGaW5p
c2hlZCkKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgZ19vYmplY3Rfc2V0
KHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmlldyksICJlbmFibGUtZGV2ZWxvcGVy
LWV4dHJhcyIsIFRSVUUsIE5VTEwpOworICAgIFdlYktpdFdlYkluc3BlY3RvciAqaW5zcGVjdG9y
ID0gd2Via2l0X3dlYl92aWV3X2dldF9pbnNwZWN0b3Iod2ViVmlldyk7CisKKyAgICBpbnQgdGlt
ZXNFbGVtZW50SW5zcGVjdGVkID0gMDsKKyAgICBpbnQgdGltZXNDbG9zZWQgPSAwOworICAgIGdf
b2JqZWN0X2Nvbm5lY3QoaW5zcGVjdG9yLAorICAgICAgICAgICAgICAgICAgICAgInNpZ25hbDo6
aW5zcGVjdC13ZWItdmlldyIsIEdfQ0FMTEJBQ0soaW5zcGVjdEVsZW1lbnRDYWxsYmFjayksICZ0
aW1lc0VsZW1lbnRJbnNwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjpzaG93
LXdpbmRvdyIsIEdfQ0FMTEJBQ0soc2hvd0luc3BlY3RvciksIE5VTEwsCisgICAgICAgICAgICAg
ICAgICAgICAic2lnbmFsOjpjbG9zZS13aW5kb3ciLCBHX0NBTExCQUNLKGNsb3NlSW5zcGVjdG9y
KSwgJnRpbWVzQ2xvc2VkLAorICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICB3ZWJr
aXRfd2ViX2luc3BlY3Rvcl9pbnNwZWN0X2Nvb3JkaW5hdGVzKGluc3BlY3RvciwgMC4wLCAwLjAp
OworICAgIGdfYXNzZXJ0X2NtcGludCh0aW1lc0VsZW1lbnRJbnNwZWN0ZWQsID09LCAxKTsKKwor
ICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIGd0a193aWRnZXRfZGVzdHJveShHVEtf
V0lER0VUKHdlYlZpZXcpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGltZXNDbG9zZWQsID09LCAx
KTsKKworICAgIGdfbWFpbl9sb29wX3VucmVmKGxvb3ApOworfQorCitpbnQgbWFpbihpbnQgYXJn
YywgY2hhcioqIGFyZ3YpCit7CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwp
OworCisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKKyAg
ICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2ViaW5zcGVjdG9yL2Rlc3Ryb3ktaW5zcGVjdGVk
LXdlYi12aWV3IiwgdGVzdF93ZWJraXRfd2ViX2luc3BlY3Rvcl9kZXN0cm95X2luc3BlY3RlZF93
ZWJfdmlldyk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYmluc3BlY3Rvci9jbG9z
ZS1hbmQtaW5zcGVjdCIsIHRlc3Rfd2Via2l0X3dlYl9pbnNwZWN0b3JfY2xvc2VfYW5kX2luc3Bl
Y3QpOworCisgICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJwbHVnaW5kYXRhYmFzZS5jIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYnBsdWdpbmRhdGFiYXNlLmMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUyODExYgotLS0gL2Rldi9udWxs
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJwbHVnaW5k
YXRhYmFzZS5jCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdh
bGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVk
ZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5o
PgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKworLyogVGhpcyBmdW5jdGlvbiBpcyBub3Qg
cHVibGljLCBzbyB3ZSBuZWVkIGFuIGV4dGVybiBkZWNsYXJhdGlvbiAqLworZXh0ZXJuIHZvaWQg
d2Via2l0X3dlYl9zZXR0aW5nc19hZGRfZXh0cmFfcGx1Z2luX2RpcmVjdG9yeShXZWJLaXRXZWJW
aWV3KiB2aWV3LCBjb25zdCBnY2hhciogZGlyZWN0b3J5KTsKKworc3RhdGljIHZvaWQgdGVzdF93
ZWJraXRfd2ViX3BsdWdpbl9kYXRhYmFzZV9nZXRfcGx1Z2lucygpCit7CisgICAgV2ViS2l0V2Vi
VmlldyogdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAg
IFdlYktpdFdlYlBsdWdpbkRhdGFiYXNlKiBkYXRhYmFzZTsKKyAgICBHU0xpc3QqIHBsdWdpbkxp
c3QsICpwOworICAgIGdib29sZWFuIGZvdW5kID0gRkFMU0U7CisgICAgZ2Jvb2xlYW4gZW5hYmxl
ZCA9IEZBTFNFOworCisgICAgd2Via2l0X3dlYl9zZXR0aW5nc19hZGRfZXh0cmFfcGx1Z2luX2Rp
cmVjdG9yeSh2aWV3LCBURVNUX1BMVUdJTl9ESVIpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKEdf
T0JKRUNUKHZpZXcpKTsKKworICAgIGRhdGFiYXNlID0gd2Via2l0X2dldF93ZWJfcGx1Z2luX2Rh
dGFiYXNlKCk7CisgICAgcGx1Z2luTGlzdCA9IHdlYmtpdF93ZWJfcGx1Z2luX2RhdGFiYXNlX2dl
dF9wbHVnaW5zKGRhdGFiYXNlKTsKKyAgICBmb3IgKHAgPSBwbHVnaW5MaXN0OyBwOyBwID0gcC0+
bmV4dCkgeworICAgICAgICBXZWJLaXRXZWJQbHVnaW4qIHBsdWdpbiA9IChXZWJLaXRXZWJQbHVn
aW4qKXAtPmRhdGE7CisgICAgICAgIGlmICghZ19zdHJjbXAwKHdlYmtpdF93ZWJfcGx1Z2luX2dl
dF9uYW1lKHBsdWdpbiksICJXZWJLaXQgVGVzdCBQbHVnSW4iKSAmJgorICAgICAgICAgICAgIWdf
c3RyY21wMCh3ZWJraXRfd2ViX3BsdWdpbl9nZXRfZGVzY3JpcHRpb24ocGx1Z2luKSwgIlNpbXBs
ZSBOZXRzY2FwZcKuIHBsdWctaW4gdGhhdCBoYW5kbGVzIHRlc3QgY29udGVudCBmb3IgV2ViS2l0
IikpIHsKKyAgICAgICAgICAgIGZvdW5kID0gVFJVRTsKKyAgICAgICAgICAgIGVuYWJsZWQgPSB3
ZWJraXRfd2ViX3BsdWdpbl9nZXRfZW5hYmxlZChwbHVnaW4pOworICAgICAgICAgICAgd2Via2l0
X3dlYl9wbHVnaW5fc2V0X2VuYWJsZWQocGx1Z2luLCBGQUxTRSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgd2Via2l0X3dlYl9wbHVnaW5fZGF0YWJhc2VfcGx1Z2luc19saXN0X2ZyZWUocGx1Z2lu
TGlzdCk7CisgICAgZ19hc3NlcnQoZm91bmQpOworICAgIGdfYXNzZXJ0KGVuYWJsZWQpOworCisg
ICAgd2Via2l0X3dlYl9wbHVnaW5fZGF0YWJhc2VfcmVmcmVzaChkYXRhYmFzZSk7CisgICAgcGx1
Z2luTGlzdCA9IHdlYmtpdF93ZWJfcGx1Z2luX2RhdGFiYXNlX2dldF9wbHVnaW5zKGRhdGFiYXNl
KTsKKworICAgIGZvciAocCA9IHBsdWdpbkxpc3Q7IHA7IHAgPSBwLT5uZXh0KSB7CisgICAgICAg
IFdlYktpdFdlYlBsdWdpbiogcGx1Z2luID0gKFdlYktpdFdlYlBsdWdpbiopcC0+ZGF0YTsKKyAg
ICAgICAgaWYgKCFnX3N0cmNtcDAod2Via2l0X3dlYl9wbHVnaW5fZ2V0X25hbWUocGx1Z2luKSwg
IldlYktpdCBUZXN0IFBsdWdJbiIpICYmCisgICAgICAgICAgICAhZ19zdHJjbXAwKHdlYmtpdF93
ZWJfcGx1Z2luX2dldF9kZXNjcmlwdGlvbihwbHVnaW4pLCAiU2ltcGxlIE5ldHNjYXBlwq4gcGx1
Zy1pbiB0aGF0IGhhbmRsZXMgdGVzdCBjb250ZW50IGZvciBXZWJLaXQiKSkKKyAgICAgICAgICAg
IGVuYWJsZWQgPSB3ZWJraXRfd2ViX3BsdWdpbl9nZXRfZW5hYmxlZChwbHVnaW4pOworICAgIH0K
KyAgICB3ZWJraXRfd2ViX3BsdWdpbl9kYXRhYmFzZV9wbHVnaW5zX2xpc3RfZnJlZShwbHVnaW5M
aXN0KTsKKyAgICBnX2Fzc2VydCghZW5hYmxlZCk7CisKKyAgICBnX29iamVjdF91bnJlZih2aWV3
KTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIGd0a190ZXN0
X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKKworICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvIik7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnBs
dWdpbmRhdGFiYXNlL2dldHBsdWdpbnMiLCB0ZXN0X3dlYmtpdF93ZWJfcGx1Z2luX2RhdGFiYXNl
X2dldF9wbHVnaW5zKTsKKyAgICByZXR1cm4gZ190ZXN0X3J1biAoKTsKK30KZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJyZXNvdXJjZS5jIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYnJlc291cmNlLmMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM1OGI3YQotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJyZXNvdXJjZS5j
CkBAIC0wLDAgKzEsMzMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEphbiBNaWNoYWVs
IEFsb256bworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUg
PGd0ay9ndGsuaD4KKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKyNpbmNsdWRlIDxzdHJpbmcu
aD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+CisKKyNkZWZpbmUgSU5ERVhfSFRNTCAiPGh0
bWw+PC9odG1sPiIKKyNkZWZpbmUgTUFJTl9IVE1MICI8aHRtbD48aGVhZD48c2NyaXB0IGxhbmd1
YWdlPVwiamF2YXNjcmlwdFwiIHNyYz1cIi9qYXZhc2NyaXB0LmpzXCI+PC9zY3JpcHQ+PC9oZWFk
Pjxib2R5PjxoMT5oYWg8L2gxPjwvaHRtbD4iCisjZGVmaW5lIEpBVkFTQ1JJUFQgImZ1bmN0aW9u
IGJsYWggKCkgeyB2YXIgYSA9IDE7IH0iCisKK0dNYWluTG9vcCogbG9vcDsKK1NvdXBTZXNzaW9u
ICpzZXNzaW9uOworY2hhciAqYmFzZV91cmk7CitXZWJLaXRXZWJSZXNvdXJjZSogbWFpbl9yZXNv
dXJjZTsKK1dlYktpdFdlYlJlc291cmNlKiBzdWJfcmVzb3VyY2U7CisKK3R5cGVkZWYgc3RydWN0
IHsKKyAgICBXZWJLaXRXZWJSZXNvdXJjZSogd2ViUmVzb3VyY2U7CisgICAgV2ViS2l0V2ViVmll
dyogd2ViVmlldzsKK30gV2ViUmVzb3VyY2VGaXh0dXJlOworCisvKiBGb3IgcmVhbCByZXF1ZXN0
IHRlc3RpbmcgKi8KK3N0YXRpYyB2b2lkCitzZXJ2ZXJfY2FsbGJhY2sgKFNvdXBTZXJ2ZXIgKnNl
cnZlciwgU291cE1lc3NhZ2UgKm1zZywKKyAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0
aCwgR0hhc2hUYWJsZSAqcXVlcnksCisgICAgICAgICAgICAgICAgIFNvdXBDbGllbnRDb250ZXh0
ICpjb250ZXh0LCBncG9pbnRlciBkYXRhKQoreworICAgIGlmIChtc2ctPm1ldGhvZCAhPSBTT1VQ
X01FVEhPRF9HRVQpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMgKG1zZywgU09V
UF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzIChtc2csIFNPVVBfU1RBVFVTX09LKTsKKworICAgIC8q
IFJlZGlyZWN0ICovCisgICAgaWYgKGdfc3RyX2VxdWFsIChwYXRoLCAiLyIpKSB7CisgICAgICAg
IHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzIChtc2csIFNPVVBfU1RBVFVTX01PVkVEX1BFUk1BTkVO
VExZKTsKKworICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQgKG1zZy0+cmVzcG9u
c2VfaGVhZGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTG9jYXRp
b24iLCAiL2luZGV4Lmh0bWwiKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsIChwYXRoLCAi
L2luZGV4Lmh0bWwiKSkgeworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQgKG1zZy0+
cmVzcG9uc2VfYm9keSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT1VQX01F
TU9SWV9DT1BZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOREVYX0hUTUws
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuIChJTkRFWF9IVE1MKSk7
CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbCAocGF0aCwgIi9tYWluLmh0bWwiKSkgeworICAg
ICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQgKG1zZy0+cmVzcG9uc2VfYm9keSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT1VQX01FTU9SWV9DT1BZLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE1BSU5fSFRNTCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdHJsZW4gKE1BSU5fSFRNTCkpOworICAgIH0gZWxzZSBpZiAoZ19zdHJf
ZXF1YWwgKHBhdGgsICIvamF2YXNjcmlwdC5qcyIpKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9i
b2R5X2FwcGVuZCAobXNnLT5yZXNwb25zZV9ib2R5LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFNPVVBfTUVNT1JZX0NPUFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgSkFWQVNDUklQVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJs
ZW4gKEpBVkFTQ1JJUFQpKTsKKyAgICB9CisKKworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBs
ZXRlIChtc2ctPnJlc3BvbnNlX2JvZHkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJfcmVzb3VyY2Vf
Zml4dHVyZV9zZXR1cChXZWJSZXNvdXJjZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIg
ZGF0YSkKK3sKKyAgICBmaXh0dXJlLT53ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93
ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmplY3RfcmVmX3NpbmsoZml4dHVyZS0+d2ViVmlldyk7
CisgICAgY29uc3QgZ2NoYXIqIHdlYkRhdGEgPSAiPGh0bWw+PC9odG1sPiI7CisgICAgZml4dHVy
ZS0+d2ViUmVzb3VyY2UgPSB3ZWJraXRfd2ViX3Jlc291cmNlX25ldyh3ZWJEYXRhLCBzdHJsZW4o
d2ViRGF0YSksICJodHRwOi8vZXhhbXBsZS5jb20vIiwgInRleHQvaHRtbCIsICJ1dGY4IiwgIkV4
YW1wbGUuY29tIik7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+d2ViUmVzb3VyY2UpOworfQorCitz
dGF0aWMgdm9pZCB3ZWJfcmVzb3VyY2VfZml4dHVyZV90ZWFyZG93bihXZWJSZXNvdXJjZUZpeHR1
cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBnX2Fzc2VydChmaXh0dXJl
LT53ZWJSZXNvdXJjZSk7CisgICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+d2ViUmVzb3VyY2Up
OworICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPndlYlZpZXcpOworfQorCitzdGF0aWMgdm9p
ZCB0ZXN0X3dlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VybChXZWJSZXNvdXJjZUZpeHR1cmUqIGZp
eHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBnY2hhciogdXJsOworICAgIGdfb2Jq
ZWN0X2dldChHX09CSkVDVChmaXh0dXJlLT53ZWJSZXNvdXJjZSksICJ1cmkiLCAmdXJsLCBOVUxM
KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodXJsLCA9PSwgImh0dHA6Ly9leGFtcGxlLmNvbS8iKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJpKGZpeHR1cmUt
PndlYlJlc291cmNlKSAsPT0sImh0dHA6Ly9leGFtcGxlLmNvbS8iKTsKKyAgICBnX2ZyZWUodXJs
KTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3Jlc291cmNlX2dldF9kYXRhKFdl
YlJlc291cmNlRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIEdT
dHJpbmcqIGNoYXJEYXRhID0gd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZGF0YShmaXh0dXJlLT53
ZWJSZXNvdXJjZSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGNoYXJEYXRhLT5zdHIsID09LCAiPGh0
bWw+PC9odG1sPiIpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfcmVzb3VyY2Vf
Z2V0X21pbWVfdHlwZShXZWJSZXNvdXJjZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIg
ZGF0YSkKK3sKKyAgICBnY2hhciogbWltZV90eXBlOworICAgIGdfb2JqZWN0X2dldChHX09CSkVD
VChmaXh0dXJlLT53ZWJSZXNvdXJjZSksICJtaW1lLXR5cGUiLCAmbWltZV90eXBlLCBOVUxMKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIobWltZV90eXBlLCA9PSwgInRleHQvaHRtbCIpOworICAgIGdf
YXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3Jlc291cmNlX2dldF9taW1lX3R5cGUoZml4dHVyZS0+
d2ViUmVzb3VyY2UpLD09LCJ0ZXh0L2h0bWwiKTsKKyAgICBnX2ZyZWUobWltZV90eXBlKTsKK30K
Kworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3Jlc291cmNlX2dldF9lbmNvZGluZyhXZWJS
ZXNvdXJjZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBnY2hh
ciogdGV4dF9lbmNvZGluZzsKKyAgICBnX29iamVjdF9nZXQoR19PQkpFQ1QoZml4dHVyZS0+d2Vi
UmVzb3VyY2UpLCAiZW5jb2RpbmciLCAmdGV4dF9lbmNvZGluZywgTlVMTCk7CisgICAgZ19hc3Nl
cnRfY21wc3RyKHRleHRfZW5jb2RpbmcsID09LCAidXRmOCIpOworICAgIGdfYXNzZXJ0X2NtcHN0
cih3ZWJraXRfd2ViX3Jlc291cmNlX2dldF9lbmNvZGluZyhmaXh0dXJlLT53ZWJSZXNvdXJjZSks
PT0sInV0ZjgiKTsKKyAgICBnX2ZyZWUodGV4dF9lbmNvZGluZyk7Cit9CisKK3N0YXRpYyB2b2lk
IHRlc3Rfd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZnJhbWVfbmFtZShXZWJSZXNvdXJjZUZpeHR1
cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBnY2hhciogZnJhbWVfbmFt
ZTsKKyAgICBnX29iamVjdF9nZXQoR19PQkpFQ1QoZml4dHVyZS0+d2ViUmVzb3VyY2UpLCAiZnJh
bWUtbmFtZSIsICZmcmFtZV9uYW1lLCBOVUxMKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoZnJhbWVf
bmFtZSwgPT0sICJFeGFtcGxlLmNvbSIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2Vi
X3Jlc291cmNlX2dldF9mcmFtZV9uYW1lKGZpeHR1cmUtPndlYlJlc291cmNlKSw9PSwiRXhhbXBs
ZS5jb20iKTsKKyAgICBnX2ZyZWUoZnJhbWVfbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIHJlc291
cmNlX3JlcXVlc3Rfc3RhcnRpbmdfY2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIFdlYktpdFdl
YkZyYW1lKiB3ZWJfZnJhbWUsIFdlYktpdFdlYlJlc291cmNlKiB3ZWJfcmVzb3VyY2UsIFdlYktp
dE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0LCBXZWJLaXROZXR3b3JrUmVzcG9uc2UqIHJlc3BvbnNl
LCBncG9pbnRlciBkYXRhKQoreworICAgIGdpbnQqIGJlZW5fdGhlcmUgPSBkYXRhOworICAgICpi
ZWVuX3RoZXJlID0gKmJlZW5fdGhlcmUgKyAxOworCisgICAgaWYgKCpiZWVuX3RoZXJlID09IDEp
IHsKKyAgICAgICAgZ19hc3NlcnQoIW1haW5fcmVzb3VyY2UpOworICAgICAgICBtYWluX3Jlc291
cmNlID0gZ19vYmplY3RfcmVmKHdlYl9yZXNvdXJjZSk7CisKKyAgICAgICAgZ19hc3NlcnRfY21w
c3RyKHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaSh3ZWJfcmVzb3VyY2UpLCA9PSwgYmFzZV91
cmkpOworCisgICAgICAgIC8qIFRoaXMgc2hvdWxkIGJlIGEgcmVkaXJlY3QsIHNvIHRoZSByZXNw
b25zZSBtdXN0IGJlIE5VTEwgKi8KKyAgICAgICAgZ19hc3NlcnQoIXJlc3BvbnNlKTsKKyAgICB9
IGVsc2UgaWYgKCpiZWVuX3RoZXJlID09IDIpIHsKKyAgICAgICAgY2hhciogdXJpID0gZ19zdHJk
dXBfcHJpbnRmKCIlc2luZGV4Lmh0bWwiLCBiYXNlX3VyaSk7CisKKyAgICAgICAgZ19hc3NlcnRf
Y21wc3RyKHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaSh3ZWJfcmVzb3VyY2UpLCA9PSwgdXJp
KTsKKworICAgICAgICAvKiBDYW5jZWwgdGhlIHJlcXVlc3QuICovCisgICAgICAgIHdlYmtpdF9u
ZXR3b3JrX3JlcXVlc3Rfc2V0X3VyaShyZXF1ZXN0LCAiYWJvdXQ6YmxhbmsiKTsKKworICAgICAg
ICBnX2ZyZWUodXJpKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIG5vdGlmeV9sb2FkX3N0YXR1
c19jYihXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgR1BhcmFtU3BlYyogcHNwZWMsIGdwb2ludGVy
IGRhdGEpCit7CisgICAgaWYgKHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMod2ViX3Zp
ZXcpID09IFdFQktJVF9MT0FEX0ZJTklTSEVEKSB7CisgICAgICAgIGdib29sZWFuKiBiZWVuX3Ro
ZXJlID0gZGF0YTsKKyAgICAgICAgKmJlZW5fdGhlcmUgPSBUUlVFOworCisgICAgICAgIGdfYXNz
ZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSh3ZWJfdmlldyksID09LCAiYWJvdXQ6
YmxhbmsiKTsKKworICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworICAgIH0KK30KKwor
c3RhdGljIHZvaWQgdGVzdF93ZWJfcmVzb3VyY2VfbG9hZGluZygpCit7CisgICAgV2ViS2l0V2Vi
Vmlldyogd2ViX3ZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsK
KyAgICBnaW50IGJlZW5fdG9fcmVzb3VyY2VfcmVxdWVzdF9zdGFydGluZyA9IDA7CisgICAgZ2Jv
b2xlYW4gYmVlbl90b19sb2FkX2ZpbmlzaGVkID0gRkFMU0U7CisgICAgV2ViS2l0V2ViRnJhbWUq
IHdlYl9mcmFtZTsKKyAgICBXZWJLaXRXZWJEYXRhU291cmNlKiBkYXRhX3NvdXJjZTsKKworICAg
IGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisKKyAgICBnX29iamVjdF9yZWZf
c2luayh3ZWJfdmlldyk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdlYl92aWV3LCAicmVzb3Vy
Y2UtcmVxdWVzdC1zdGFydGluZyIsCisgICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKHJl
c291cmNlX3JlcXVlc3Rfc3RhcnRpbmdfY2IpLAorICAgICAgICAgICAgICAgICAgICAgJmJlZW5f
dG9fcmVzb3VyY2VfcmVxdWVzdF9zdGFydGluZyk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdl
Yl92aWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsCisgICAgICAgICAgICAgICAgICAgICBHX0NB
TExCQUNLKG5vdGlmeV9sb2FkX3N0YXR1c19jYiksCisgICAgICAgICAgICAgICAgICAgICAmYmVl
bl90b19sb2FkX2ZpbmlzaGVkKTsKKworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh3ZWJf
dmlldywgYmFzZV91cmkpOworCisgICAgLyogV2Ugd29uJ3QgZ2V0IGZpbmlzaGVkIGltbWVkaWF0
ZWx5LCBiZWNhdXNlIG9mIHRoZSByZWRpcmVjdCAqLworICAgIGdfbWFpbl9sb29wX3J1bihsb29w
KTsKKyAgICAKKyAgICB3ZWJfZnJhbWUgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUo
d2ViX3ZpZXcpOworICAgIGRhdGFfc291cmNlID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfZGF0YV9z
b3VyY2Uod2ViX2ZyYW1lKTsKKworICAgIGdfYXNzZXJ0KG1haW5fcmVzb3VyY2UpOworICAgIGdf
YXNzZXJ0KHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X21haW5fcmVzb3VyY2UoZGF0YV9zb3Vy
Y2UpID09IG1haW5fcmVzb3VyY2UpOworICAgIGdfb2JqZWN0X3VucmVmKG1haW5fcmVzb3VyY2Up
OworICAgIAorICAgIGdfYXNzZXJ0X2NtcGludChiZWVuX3RvX3Jlc291cmNlX3JlcXVlc3Rfc3Rh
cnRpbmcsID09LCAyKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYmVlbl90b19sb2FkX2ZpbmlzaGVk
LCA9PSwgVFJVRSk7CisKKyAgICBnX29iamVjdF91bnJlZih3ZWJfdmlldyk7CisgICAgZ19tYWlu
X2xvb3BfdW5yZWYobG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlc291cmNlX3JlcXVlc3Rfc3Rh
cnRpbmdfc3ViX2NiKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBXZWJLaXRXZWJGcmFtZSogd2Vi
X2ZyYW1lLCBXZWJLaXRXZWJSZXNvdXJjZSogd2ViX3Jlc291cmNlLCBXZWJLaXROZXR3b3JrUmVx
dWVzdCogcmVxdWVzdCwgV2ViS2l0TmV0d29ya1Jlc3BvbnNlKiByZXNwb25zZSwgZ3BvaW50ZXIg
ZGF0YSkKK3sKKyAgICBpZiAoIW1haW5fcmVzb3VyY2UpCisgICAgICAgIG1haW5fcmVzb3VyY2Ug
PSBnX29iamVjdF9yZWYod2ViX3Jlc291cmNlKTsKKyAgICBlbHNlIGlmICghc3ViX3Jlc291cmNl
KQorICAgICAgc3ViX3Jlc291cmNlID0gZ19vYmplY3RfcmVmKHdlYl9yZXNvdXJjZSk7Cit9CisK
K3N0YXRpYyB2b2lkIG5vdGlmeV9sb2FkX3N0YXR1c19zdWJfY2IoV2ViS2l0V2ViVmlldyogd2Vi
X3ZpZXcsIEdQYXJhbVNwZWMqIHBzcGVjLCBncG9pbnRlciBkYXRhKQoreworICAgIGlmICh3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYl92aWV3KSA9PSBXRUJLSVRfTE9BRF9GSU5J
U0hFRCkKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKK30KKworc3RhdGljIGdib29s
ZWFuIGlkbGVfcXVpdF9sb29wX2NiKGdwb2ludGVyIGRhdGEpCit7CisgICAgZ19tYWluX2xvb3Bf
cXVpdChsb29wKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Vi
X3Jlc291cmNlX3N1Yl9yZXNvdXJjZV9sb2FkaW5nKCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3
ZWJfdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIFdl
YktpdFdlYkZyYW1lKiB3ZWJfZnJhbWU7CisgICAgV2ViS2l0V2ViRGF0YVNvdXJjZSogZGF0YV9z
b3VyY2U7CisgICAgR0xpc3QqIHN1Yl9yZXNvdXJjZXM7CisgICAgY2hhciogdXJpID0gZ19zdHJk
dXBfcHJpbnRmKCIlc21haW4uaHRtbCIsIGJhc2VfdXJpKTsKKworICAgIG1haW5fcmVzb3VyY2Ug
PSBOVUxMOworICAgIAorICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisK
KyAgICBnX29iamVjdF9yZWZfc2luayh3ZWJfdmlldyk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0
KHdlYl92aWV3LCAicmVzb3VyY2UtcmVxdWVzdC1zdGFydGluZyIsCisgICAgICAgICAgICAgICAg
ICAgICBHX0NBTExCQUNLKHJlc291cmNlX3JlcXVlc3Rfc3RhcnRpbmdfc3ViX2NiKSwKKyAgICAg
ICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJfdmlldywg
Im5vdGlmeTo6bG9hZC1zdGF0dXMiLAorICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhu
b3RpZnlfbG9hZF9zdGF0dXNfc3ViX2NiKSwKKyAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwor
CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHdlYl92aWV3LCB1cmkpOworCisgICAgZ19t
YWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgLyogVGhlIG1haW4gcmVzb3VyY2Ugc2hvdWxkIGJl
IGxvYWRlZDsgbm93IGxldCdzIHdhaXQgZm9yIHRoZSBzdWItcmVzb3VyY2UgdG8gbG9hZCAqLwor
ICAgIGdfaWRsZV9hZGQoaWRsZV9xdWl0X2xvb3BfY2IsIE5VTEwpOworICAgIGdfbWFpbl9sb29w
X3J1bihsb29wKTsKKyAgICAKKyAgICBnX2Fzc2VydChtYWluX3Jlc291cmNlICYmIHN1Yl9yZXNv
dXJjZSk7CisgICAgZ19hc3NlcnQobWFpbl9yZXNvdXJjZSAhPSBzdWJfcmVzb3VyY2UpOworCisg
ICAgd2ViX2ZyYW1lID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKHdlYl92aWV3KTsK
KyAgICBkYXRhX3NvdXJjZSA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X2RhdGFfc291cmNlKHdlYl9m
cmFtZSk7CisKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2RhdGFfc291cmNlX2dldF9tYWluX3Jl
c291cmNlKGRhdGFfc291cmNlKSA9PSBtYWluX3Jlc291cmNlKTsKKyAgICBnX29iamVjdF91bnJl
ZihtYWluX3Jlc291cmNlKTsKKworICAgIHN1Yl9yZXNvdXJjZXMgPSB3ZWJraXRfd2ViX2RhdGFf
c291cmNlX2dldF9zdWJyZXNvdXJjZXMoZGF0YV9zb3VyY2UpOworICAgIC8vIEV4cGVjdGVkIHJl
c291cmNlczogamF2YXNjcmlwdHMuanMsIGZhdmljb24uaWNvCisgICAgZ19hc3NlcnQoc3ViX3Jl
c291cmNlcyk7CisgICAgZ19hc3NlcnQoc3ViX3Jlc291cmNlcy0+bmV4dCk7CisgICAgZ19hc3Nl
cnQoIXN1Yl9yZXNvdXJjZXMtPm5leHQtPm5leHQpOworCisgICAgLy8gVGVzdCB0aGF0IHRoZSBv
YmplY3Qgd2UgZ290IGZyb20gdGhlIGRhdGEgc291cmNlIGlzIHRoZSBzYW1lCisgICAgLy8gdGhh
dCB3ZW50IHRocm91Z2ggcmVzb3VyY2UtcmVxdWVzdC1zdGFydGluZy4gTm90ZSB0aGF0IHRoZSBv
cmRlciBpcworICAgIC8vIG5vdCBpbXBvcnRhbnQgKGFuZCBub3QgZ3VhcmFudGVlZCBzaW5jZSB0
aGUgcmVzb3VyY2VzIGFyZSBzdG9yZWQgaW4gYQorICAgIC8vIGhhc2h0YWJsZSkuCisgICAgZ19h
c3NlcnQoV0VCS0lUX1dFQl9SRVNPVVJDRShzdWJfcmVzb3VyY2VzLT5kYXRhKSA9PSBzdWJfcmVz
b3VyY2UKKyAgICAgICAgICAgICB8fCBXRUJLSVRfV0VCX1JFU09VUkNFKHN1Yl9yZXNvdXJjZXMt
Pm5leHQtPmRhdGEpID09IHN1Yl9yZXNvdXJjZSk7CisKKyAgICBnX29iamVjdF91bnJlZih3ZWJf
dmlldyk7CisgICAgZ19tYWluX2xvb3BfdW5yZWYobG9vcCk7Cit9CisKK2ludCBtYWluKGludCBh
cmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBTb3VwU2VydmVyKiBzZXJ2ZXI7CisgICAgU291cFVS
SSogc291cF91cmk7CisKKyAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7CisK
KyAgICBzZXJ2ZXIgPSBzb3VwX3NlcnZlcl9uZXcoU09VUF9TRVJWRVJfUE9SVCwgMCwgTlVMTCk7
CisgICAgc291cF9zZXJ2ZXJfcnVuX2FzeW5jKHNlcnZlcik7CisKKyAgICBzb3VwX3NlcnZlcl9h
ZGRfaGFuZGxlcihzZXJ2ZXIsIE5VTEwsIHNlcnZlcl9jYWxsYmFjaywgTlVMTCwgTlVMTCk7CisK
KyAgICBzb3VwX3VyaSA9IHNvdXBfdXJpX25ldygiaHR0cDovLzEyNy4wLjAuMS8iKTsKKyAgICBz
b3VwX3VyaV9zZXRfcG9ydChzb3VwX3VyaSwgc291cF9zZXJ2ZXJfZ2V0X3BvcnQoc2VydmVyKSk7
CisKKyAgICBiYXNlX3VyaSA9IHNvdXBfdXJpX3RvX3N0cmluZyhzb3VwX3VyaSwgRkFMU0UpOwor
ICAgIHNvdXBfdXJpX2ZyZWUoc291cF91cmkpOworCisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L3dlYnJlc291
cmNlL2dldF91cmwiLAorICAgICAgICAgICAgICAgV2ViUmVzb3VyY2VGaXh0dXJlLCAwLCB3ZWJf
cmVzb3VyY2VfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X3dlYl9y
ZXNvdXJjZV9nZXRfdXJsLCB3ZWJfcmVzb3VyY2VfZml4dHVyZV90ZWFyZG93bik7CisgICAgZ190
ZXN0X2FkZCgiL3dlYmtpdC93ZWJyZXNvdXJjZS9nZXRfbWltZV90eXBlIiwKKyAgICAgICAgICAg
ICAgIFdlYlJlc291cmNlRml4dHVyZSwgMCwgd2ViX3Jlc291cmNlX2ZpeHR1cmVfc2V0dXAsCisg
ICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X21pbWVfdHlwZSwgd2Vi
X3Jlc291cmNlX2ZpeHR1cmVfdGVhcmRvd24pOworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvd2Vi
cmVzb3VyY2UvZ2V0X3RleHRfZW5jb2RpbmdfbmFtZSIsCisgICAgICAgICAgICAgICBXZWJSZXNv
dXJjZUZpeHR1cmUsIDAsIHdlYl9yZXNvdXJjZV9maXh0dXJlX3NldHVwLAorICAgICAgICAgICAg
ICAgdGVzdF93ZWJraXRfd2ViX3Jlc291cmNlX2dldF9lbmNvZGluZywgd2ViX3Jlc291cmNlX2Zp
eHR1cmVfdGVhcmRvd24pOworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvd2VicmVzb3VyY2UvZ2V0
X2ZyYW1lX25hbWUiLAorICAgICAgICAgICAgICAgV2ViUmVzb3VyY2VGaXh0dXJlLCAwLCB3ZWJf
cmVzb3VyY2VfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X3dlYl9y
ZXNvdXJjZV9nZXRfZnJhbWVfbmFtZSwgd2ViX3Jlc291cmNlX2ZpeHR1cmVfdGVhcmRvd24pOwor
ICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvd2VicmVzb3VyY2UvZ2V0X2RhdGEiLAorICAgICAgICAg
ICAgICAgV2ViUmVzb3VyY2VGaXh0dXJlLCAwLCB3ZWJfcmVzb3VyY2VfZml4dHVyZV9zZXR1cCwK
KyAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZGF0YSwgd2ViX3Jl
c291cmNlX2ZpeHR1cmVfdGVhcmRvd24pOworCisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0
L3dlYnJlc291cmNlL2xvYWRpbmciLCB0ZXN0X3dlYl9yZXNvdXJjZV9sb2FkaW5nKTsKKyAgICBn
X3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2VicmVzb3VyY2Uvc3ViX3Jlc291cmNlX2xvYWRpbmci
LCB0ZXN0X3dlYl9yZXNvdXJjZV9zdWJfcmVzb3VyY2VfbG9hZGluZyk7CisKKyAgICByZXR1cm4g
Z190ZXN0X3J1biAoKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0R3RrL3Rlc3R3ZWJzZXR0aW5ncy5jIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRHdGsvdGVzdHdlYnNldHRpbmdzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMzU0ODljZAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0R3RrL3Rlc3R3ZWJzZXR0aW5ncy5jCkBAIC0wLDAgKzEsMTU5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA5IEphbiBNaWNoYWVsIEFsb256bworICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJr
aXQvd2Via2l0Lmg+CisKKy8qIFByaXZhdGUgQVBJICovCitjaGFyKiB3ZWJraXRXZWJTZXR0aW5n
c1VzZXJBZ2VudEZvclVSSShXZWJLaXRXZWJTZXR0aW5ncyAqc2V0dGluZ3MsIGNvbnN0IGNoYXIg
KnVyaSk7CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9zZXR0aW5nc19jb3B5KHZvaWQp
Cit7CisgICAgV2ViS2l0V2ViU2V0dGluZ3MgKnNldHRpbmdzID0gd2Via2l0X3dlYl9zZXR0aW5n
c19uZXcoKTsKKworICAgIC8vIFNldCBzb21lIG5vbi1kZWZhdWx0IHNldHRpbmdzIHRvIHZlcmlm
eSB0aGF0IHNldHRpbmdzIGFyZSBwcm9wZXJseSBjb3BpZWQuCisgICAgZ19vYmplY3Rfc2V0KHNl
dHRpbmdzLAorICAgICAgICAgICAgICAgICAiZW5hYmxlLXdlYmdsIiwgVFJVRSwKKyAgICAgICAg
ICAgICAgICAgImVuYWJsZS1mdWxsc2NyZWVuIiwgVFJVRSwKKyAgICAgICAgICAgICAgICAgImF1
dG8tbG9hZC1pbWFnZXMiLCBGQUxTRSwKKyAgICAgICAgICAgICAgICAgImRlZmF1bHQtZW5jb2Rp
bmciLCAidXRmLTgiLAorICAgICAgICAgICAgICAgICAiZW5hYmxlLW1lZGlhc291cmNlIiwgVFJV
RSwKKyAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICBXZWJLaXRXZWJTZXR0aW5ncyAqY29w
eSA9IHdlYmtpdF93ZWJfc2V0dGluZ3NfY29weShzZXR0aW5ncyk7CisKKyAgICBnYm9vbGVhbiBl
bmFibGVXZWJHTCA9IEZBTFNFOworICAgIGdib29sZWFuIGVuYWJsZUZ1bGxzY3JlZW4gPSBGQUxT
RTsKKyAgICBnYm9vbGVhbiBhdXRvTG9hZEltYWdlcyA9IEZBTFNFOworICAgIGdib29sZWFuIGVu
YWJsZU1lZGlhU291cmNlID0gRkFMU0U7CisgICAgY2hhciAqZGVmYXVsdEVuY29kaW5nID0gMDsK
KyAgICBnX29iamVjdF9nZXQoY29weSwKKyAgICAgICAgICAgICAgICAgImVuYWJsZS1mdWxsc2Ny
ZWVuIiwgJmVuYWJsZUZ1bGxzY3JlZW4sCisgICAgICAgICAgICAgICAgICJlbmFibGUtd2ViZ2wi
LCAmZW5hYmxlV2ViR0wsCisgICAgICAgICAgICAgICAgICJhdXRvLWxvYWQtaW1hZ2VzIiwgJmF1
dG9Mb2FkSW1hZ2VzLAorICAgICAgICAgICAgICAgICAiZGVmYXVsdC1lbmNvZGluZyIsICZkZWZh
dWx0RW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICJlbmFibGUtbWVkaWFzb3VyY2UiLCAmZW5h
YmxlTWVkaWFTb3VyY2UsCisgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgZ19hc3NlcnQo
ZW5hYmxlV2ViR0wpOworICAgIGdfYXNzZXJ0KGVuYWJsZUZ1bGxzY3JlZW4pOworICAgIGdfYXNz
ZXJ0KCFhdXRvTG9hZEltYWdlcyk7CisgICAgZ19hc3NlcnRfY21wc3RyKGRlZmF1bHRFbmNvZGlu
ZywgPT0sICJ1dGYtOCIpOworICAgIGdfYXNzZXJ0KGVuYWJsZU1lZGlhU291cmNlKTsKKyAgICBn
X2ZyZWUoZGVmYXVsdEVuY29kaW5nKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9ub25fcXVpcmt5
X3VzZXJfYWdlbnRzKFdlYktpdFdlYlNldHRpbmdzICpzZXR0aW5ncywgY29uc3QgY2hhciAqZGVm
YXVsdFVzZXJBZ2VudCkKK3sKKyAgICBjaGFyICp1c2VyQWdlbnQgPSAwOworCisgICAgLy8gdGVz
dCBhIGN1c3RvbSBVQSBzdHJpbmcKKyAgICB1c2VyQWdlbnQgPSAwOworICAgIGdfb2JqZWN0X3Nl
dChzZXR0aW5ncywgInVzZXItYWdlbnQiLCAidGVzdHdlYnNldHRpbmdzLzAuMSIsIE5VTEwpOwor
ICAgIGdfb2JqZWN0X2dldChzZXR0aW5ncywidXNlci1hZ2VudCIsICZ1c2VyQWdlbnQsIE5VTEwp
OworICAgIGdfYXNzZXJ0X2NtcHN0cih1c2VyQWdlbnQsID09LCAidGVzdHdlYnNldHRpbmdzLzAu
MSIpOworICAgIGdfZnJlZSh1c2VyQWdlbnQpOworCisgICAgLy8gc2V0dGluZyBpdCB0byBOVUxM
IG9yIGFuIGVtcHR5IHZhbHVlIHNob3VsZCBnaXZlIHVzIHRoZSBkZWZhdWx0IFVBIHN0cmluZwor
ICAgIHVzZXJBZ2VudCA9IDA7CisgICAgZ19vYmplY3Rfc2V0KHNldHRpbmdzLCAidXNlci1hZ2Vu
dCIsIDAsIE5VTEwpOworICAgIGdfb2JqZWN0X2dldChzZXR0aW5ncywidXNlci1hZ2VudCIsICZ1
c2VyQWdlbnQsIE5VTEwpOworICAgIGdfYXNzZXJ0X2NtcHN0cih1c2VyQWdlbnQsID09LCBkZWZh
dWx0VXNlckFnZW50KTsKKyAgICBnX2ZyZWUodXNlckFnZW50KTsKKworICAgIHVzZXJBZ2VudCA9
IDA7CisgICAgZ19vYmplY3Rfc2V0KHNldHRpbmdzLCAidXNlci1hZ2VudCIsICIiLCBOVUxMKTsK
KyAgICBnX29iamVjdF9nZXQoc2V0dGluZ3MsInVzZXItYWdlbnQiLCAmdXNlckFnZW50LCBOVUxM
KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodXNlckFnZW50LCA9PSwgZGVmYXVsdFVzZXJBZ2VudCk7
CisgICAgZ19mcmVlKHVzZXJBZ2VudCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dl
Yl9zZXR0aW5nc191c2VyX2FnZW50KHZvaWQpCit7CisgICAgV2ViS2l0V2ViU2V0dGluZ3MgKnNl
dHRpbmdzOworICAgIEd0a1dpZGdldCAqd2ViVmlldzsKKyAgICBjaGFyICpkZWZhdWx0VXNlckFn
ZW50OworICAgIGNoYXIgKnVzZXJBZ2VudCA9IDA7CisgICAgZ190ZXN0X2J1ZygiMTczNzUiKTsK
KworICAgIHdlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7CisgICAgZ19vYmplY3RfcmVm
X3Npbmsod2ViVmlldyk7CisKKyAgICBzZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0
dGluZ3MoV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpKTsKKyAgICBkZWZhdWx0VXNlckFnZW50ID0g
Z19zdHJkdXAod2Via2l0X3dlYl9zZXR0aW5nc19nZXRfdXNlcl9hZ2VudChzZXR0aW5ncykpOwor
CisgICAgdGVzdF9ub25fcXVpcmt5X3VzZXJfYWdlbnRzKHNldHRpbmdzLCBkZWZhdWx0VXNlckFn
ZW50KTsKKworICAgIC8qIFRlc3QgcXVpcmt5IGdvb2dsZSBkb21haW5zICovCisgICAgZ19vYmpl
Y3Rfc2V0KHNldHRpbmdzLCAidXNlci1hZ2VudCIsICJ0ZXN0d2Vic2V0dGluZ3MvMC4xIiwgTlVM
TCk7CisKKyAgICB1c2VyQWdlbnQgPSB3ZWJraXRXZWJTZXR0aW5nc1VzZXJBZ2VudEZvclVSSShz
ZXR0aW5ncywgImh0dHA6Ly93d3cuZ29vZ2xlLmNvbS8iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIo
dXNlckFnZW50LCA9PSwgInRlc3R3ZWJzZXR0aW5ncy8wLjEiKTsKKyAgICBnX2ZyZWUodXNlckFn
ZW50KTsKKworICAgIHVzZXJBZ2VudCA9IHdlYmtpdFdlYlNldHRpbmdzVXNlckFnZW50Rm9yVVJJ
KHNldHRpbmdzLCAiaHR0cDovL2dtYWlsLmNvbS8iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodXNl
ckFnZW50LCA9PSwgInRlc3R3ZWJzZXR0aW5ncy8wLjEiKTsKKyAgICBnX2ZyZWUodXNlckFnZW50
KTsKKworICAgIHVzZXJBZ2VudCA9IHdlYmtpdFdlYlNldHRpbmdzVXNlckFnZW50Rm9yVVJJKHNl
dHRpbmdzLCAiaHR0cDovL3d3dy5nb29nbGUuY29tLmJyLyIpOworICAgIGdfYXNzZXJ0X2NtcHN0
cih1c2VyQWdlbnQsID09LCAidGVzdHdlYnNldHRpbmdzLzAuMSIpOworICAgIGdfZnJlZSh1c2Vy
QWdlbnQpOworCisgICAgdXNlckFnZW50ID0gd2Via2l0V2ViU2V0dGluZ3NVc2VyQWdlbnRGb3JV
Ukkoc2V0dGluZ3MsICJodHRwOi8vY2FsZW5kYXIuZ29vZ2xlLmNvbS8iKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIodXNlckFnZW50LCA9PSwgInRlc3R3ZWJzZXR0aW5ncy8wLjEiKTsKKyAgICBnX2Zy
ZWUodXNlckFnZW50KTsKKworICAgIC8qIE5vdyBlbmFibGUgcXVpcmtzIGhhbmRsaW5nICovCisg
ICAgZ19vYmplY3Rfc2V0KHNldHRpbmdzLCAiZW5hYmxlLXNpdGUtc3BlY2lmaWMtcXVpcmtzIiwg
VFJVRSwgTlVMTCk7CisKKyAgICB0ZXN0X25vbl9xdWlya3lfdXNlcl9hZ2VudHMoc2V0dGluZ3Ms
IGRlZmF1bHRVc2VyQWdlbnQpOworCisgICAgZ19vYmplY3Rfc2V0KHNldHRpbmdzLCAidXNlci1h
Z2VudCIsICJ0ZXN0d2Vic2V0dGluZ3MvMC4xIiwgTlVMTCk7CisKKyAgICB1c2VyQWdlbnQgPSB3
ZWJraXRXZWJTZXR0aW5nc1VzZXJBZ2VudEZvclVSSShzZXR0aW5ncywgImh0dHA6Ly93d3cuZ29v
Z2xlLmNvbS8iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodXNlckFnZW50LCA9PSwgZGVmYXVsdFVz
ZXJBZ2VudCk7CisgICAgZ19mcmVlKHVzZXJBZ2VudCk7CisKKyAgICB1c2VyQWdlbnQgPSB3ZWJr
aXRXZWJTZXR0aW5nc1VzZXJBZ2VudEZvclVSSShzZXR0aW5ncywgImh0dHA6Ly9nbWFpbC5jb20v
Iik7CisgICAgZ19hc3NlcnRfY21wc3RyKHVzZXJBZ2VudCwgPT0sIGRlZmF1bHRVc2VyQWdlbnQp
OworICAgIGdfZnJlZSh1c2VyQWdlbnQpOworCisgICAgdXNlckFnZW50ID0gd2Via2l0V2ViU2V0
dGluZ3NVc2VyQWdlbnRGb3JVUkkoc2V0dGluZ3MsICJodHRwOi8vd3d3Lmdvb2dsZS5jb20uYnIv
Iik7CisgICAgZ19hc3NlcnRfY21wc3RyKHVzZXJBZ2VudCwgPT0sIGRlZmF1bHRVc2VyQWdlbnQp
OworICAgIGdfZnJlZSh1c2VyQWdlbnQpOworCisgICAgdXNlckFnZW50ID0gd2Via2l0V2ViU2V0
dGluZ3NVc2VyQWdlbnRGb3JVUkkoc2V0dGluZ3MsICJodHRwOi8vd3d3Lmdvb2dsZS51ay5ub3Qu
Y29tLmJyLyIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih1c2VyQWdlbnQsID09LCAidGVzdHdlYnNl
dHRpbmdzLzAuMSIpOworICAgIGdfZnJlZSh1c2VyQWdlbnQpOworCisgICAgZ19mcmVlKGRlZmF1
bHRVc2VyQWdlbnQpOworICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOworfQorCitpbnQgbWFp
bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFy
Z3YsIE5VTEwpOworCisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy8iKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vic2V0dGluZ3MvdXNlcl9hZ2Vu
dCIsIHRlc3Rfd2Via2l0X3dlYl9zZXR0aW5nc191c2VyX2FnZW50KTsKKyAgICBnX3Rlc3RfYWRk
X2Z1bmMoIi93ZWJraXQvd2Vic2V0dGluZ3MvY29weSIsIHRlc3Rfd2Via2l0X3dlYl9zZXR0aW5n
c19jb3B5KTsKKyAgICByZXR1cm4gZ190ZXN0X3J1biAoKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJ2aWV3LmMgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2Vidmlldy5jCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjY0ZDkyYTIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2Vidmlldy5jCkBAIC0wLDAgKzEsNzQ2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgQ29sbGFib3JhIEx0ZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAidGVzdF91
dGlscy5oIgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNs
dWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxnbGliL2dzdGRp
by5oPgorI2luY2x1ZGUgPGdkay9nZGsuaD4KKyNpbmNsdWRlIDxnZGsvZ2Rra2V5c3ltcy5oPgor
I2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+CisKK0dNYWlu
TG9vcCogbG9vcDsKK1NvdXBTZXNzaW9uICpzZXNzaW9uOworY2hhciogYmFzZV91cmk7CisKKy8q
IEZvciByZWFsIHJlcXVlc3QgdGVzdGluZyAqLworc3RhdGljIHZvaWQKK3NlcnZlcl9jYWxsYmFj
ayhTb3VwU2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtc2csCisgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqIHF1ZXJ5LAorICAgICAgICAgICAgICAgICBT
b3VwQ2xpZW50Q29udGV4dCogY29udGV4dCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBpZiAobXNn
LT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRf
c3RhdHVzKG1zZywgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1zZywgU09VUF9TVEFUVVNf
T0spOworCisgICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvZmF2aWNvbi5pY28iKSkgeworICAg
ICAgICBjaGFyKiBjb250ZW50czsKKyAgICAgICAgZ3NpemUgbGVuZ3RoOworICAgICAgICBHRXJy
b3IqIGVycm9yID0gTlVMTDsKKworICAgICAgICBnX2ZpbGVfZ2V0X2NvbnRlbnRzKCJibGFuay5p
Y28iLCAmY29udGVudHMsICZsZW5ndGgsICZlcnJvcik7CisgICAgICAgIGdfYXNzZXJ0KCFlcnJv
cik7CisKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1zZy0+cmVzcG9uc2VfYm9k
eSwgU09VUF9NRU1PUllfVEFLRSwgY29udGVudHMsIGxlbmd0aCk7CisgICAgfSBlbHNlIGlmIChn
X3N0cl9lcXVhbChwYXRoLCAiL2JpZ2Rpdi5odG1sIikpIHsKKyAgICAgICAgY2hhciogY29udGVu
dHMgPSBnX3N0cmR1cCgiPGh0bWw+PGJvZHk+PGEgaWQ9XCJsaW5rXCIgaHJlZj1cImh0dHA6Ly9h
YmMuZGVmXCI+dGVzdDwvYT48ZGl2IHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogZ3JlZW47IGhl
aWdodDogMTIwMHB4O1wiPjwvZGl2PjwvYm9keT48L2h0bWw+Iik7CisgICAgICAgIHNvdXBfbWVz
c2FnZV9ib2R5X2FwcGVuZChtc2ctPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGNv
bnRlbnRzLCBzdHJsZW4oY29udGVudHMpKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBh
dGgsICIvaWZyYW1lLmh0bWwiKSkgeworICAgICAgICBjaGFyKiBjb250ZW50cyA9IGdfc3RyZHVw
KCI8aHRtbD48Ym9keSBpZD1cInNvbWUtY29udGVudFwiPjxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5k
LWNvbG9yOiBncmVlbjsgaGVpZ2h0OiA1MHB4O1wiPjwvZGl2PjxpZnJhbWUgc3JjPVwiYmlnZGl2
Lmh0bWxcIj48L2lmcmFtZT48L2JvZHk+PC9odG1sPiIpOworICAgICAgICBzb3VwX21lc3NhZ2Vf
Ym9keV9hcHBlbmQobXNnLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBjb250ZW50
cywgc3RybGVuKGNvbnRlbnRzKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2hhciogY29udGVu
dHMgPSBnX3N0cmR1cCgiPGh0bWw+PGJvZHk+dGVzdDwvYm9keT48L2h0bWw+Iik7CisgICAgICAg
IHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtc2ctPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZ
X1RBS0UsIGNvbnRlbnRzLCBzdHJsZW4oY29udGVudHMpKTsKKyAgICB9CisKKyAgICBzb3VwX21l
c3NhZ2VfYm9keV9jb21wbGV0ZShtc2ctPnJlc3BvbnNlX2JvZHkpOworfQorCitzdGF0aWMgdm9p
ZCBpZGxlX3F1aXRfbG9vcF9jYihXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgR1BhcmFtU3BlYyog
cHNwZWMsIGdwb2ludGVyIGRhdGEpCit7CisgICAgaWYgKHdlYmtpdF93ZWJfdmlld19nZXRfbG9h
ZF9zdGF0dXMod2ViX3ZpZXcpID09IFdFQktJVF9MT0FEX0ZJTklTSEVEIHx8CisgICAgICAgIHdl
YmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMod2ViX3ZpZXcpID09IFdFQktJVF9MT0FEX0ZB
SUxFRCkKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKK30KKworc3RhdGljIGdib29s
ZWFuIHRpbWVvdXRfY2IoZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBnX2Vycm9yKCJEaWRuJ3QgZ2V0
IGljb24tdXJpIGJlZm9yZSB0aW1pbmcgb3V0LiIpOworICAgIHJldHVybiBGQUxTRTsKK30KKwor
c3RhdGljIHZvaWQgaWNvbl91cmlfY2hhbmdlZF9jYihXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywg
R1BhcmFtU3BlYyogcHNwZWMsIGdwb2ludGVyIGRhdGEpCit7CisgICAgY2hhciogZXhwZWN0ZWRf
dXJpOworCisgICAgZ19hc3NlcnRfY21wc3RyKGdfcGFyYW1fc3BlY19nZXRfbmFtZShwc3BlYyks
ID09LCAiaWNvbi11cmkiKTsKKworICAgIGV4cGVjdGVkX3VyaSA9IGdfc3RyZHVwX3ByaW50Zigi
JXNmYXZpY29uLmljbyIsIGJhc2VfdXJpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dl
Yl92aWV3X2dldF9pY29uX3VyaSh3ZWJfdmlldyksID09LCBleHBlY3RlZF91cmkpOworICAgIGdf
ZnJlZShleHBlY3RlZF91cmkpOworCisgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKK30KKwor
c3RhdGljIHZvaWQgaWNvbl9sb2FkZWRfY2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIGNoYXIq
IGljb25fdXJpLCBncG9pbnRlciBkYXRhKQoreworICAgIGdib29sZWFuKiBiZWVuX2hlcmUgPSAo
Z2Jvb2xlYW4qKWRhdGE7CisgICAgY2hhciogZXhwZWN0ZWRfdXJpID0gZ19zdHJkdXBfcHJpbnRm
KCIlc2Zhdmljb24uaWNvIiwgYmFzZV91cmkpOworICAgIGdfYXNzZXJ0X2NtcHN0cihpY29uX3Vy
aSwgPT0sIGV4cGVjdGVkX3VyaSk7CisgICAgZ19mcmVlKGV4cGVjdGVkX3VyaSk7CisKKyAgICBn
X2Fzc2VydF9jbXBzdHIoaWNvbl91cmksID09LCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fdXJp
KHdlYl92aWV3KSk7CisKKyAgICAqYmVlbl9oZXJlID0gVFJVRTsKK30KKworc3RhdGljIHZvaWQg
dGVzdF93ZWJraXRfd2ViX3ZpZXdfaWNvbl91cmkoKQoreworICAgIGdib29sZWFuIGJlZW5fdG9f
aWNvbl9sb2FkZWQgPSBGQUxTRTsKKyAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gV0VCS0lUX1dF
Ql9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmplY3RfcmVmX3NpbmsoR19P
QkpFQ1QodmlldykpOworCisgICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsK
KworICAgIGdfb2JqZWN0X2Nvbm5lY3QoR19PQkpFQ1QodmlldyksCisgICAgICAgICAgICAgICAg
ICAgICAic2lnbmFsOjpub3RpZnk6Omljb24tdXJpIiwgaWNvbl91cmlfY2hhbmdlZF9jYiwgTlVM
TCwKKyAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6Omljb24tbG9hZGVkIiwgaWNvbl9sb2Fk
ZWRfY2IsICZiZWVuX3RvX2ljb25fbG9hZGVkLAorICAgICAgICAgICAgICAgICAgICAgTlVMTCk7
CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkodmlldywgYmFzZV91cmkpOworCisgICAg
Z3VpbnQgdGltZW91dF9pZCA9IGdfdGltZW91dF9hZGQoNTAwLCB0aW1lb3V0X2NiLCAwKTsKKwor
ICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIGdfc291cmNlX3JlbW92ZSh0aW1lb3V0
X2lkKTsKKworICAgIGdfYXNzZXJ0KGJlZW5fdG9faWNvbl9sb2FkZWQpOworCisgICAgZ19vYmpl
Y3RfdW5yZWYodmlldyk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBtYXBfZXZlbnRfY2IoR3RrV2lk
Z2V0ICp3aWRnZXQsIEdka0V2ZW50KiBldmVudCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBHTWFp
bkxvb3AqIGxvb3AgPSAoR01haW5Mb29wKilkYXRhOworICAgIGdfbWFpbl9sb29wX3F1aXQobG9v
cCk7CisKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBxdWl0X2FmdGVy
X3Nob3J0X2RlbGF5X2NiKGdwb2ludGVyIGRhdGEpCit7CisgICAgZ19tYWluX2xvb3BfcXVpdCgo
R01haW5Mb29wKilkYXRhKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkIHRl
c3Rfd2Via2l0X3dlYl92aWV3X2dyYWJfZm9jdXMoKQoreworICAgIGNoYXIqIHVyaSA9IGdfc3Ry
Y29uY2F0KGJhc2VfdXJpLCAiaWZyYW1lLmh0bWwiLCBOVUxMKTsKKyAgICBHdGtXaWRnZXQqIHdp
bmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfUE9QVVApOworICAgIEd0a1dpZGdldCog
c2Nyb2xsZWRfd2luZG93ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19uZXcoTlVMTCwgTlVMTCk7Cisg
ICAgV2ViS2l0V2ViVmlldyogdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdf
bmV3KCkpOworICAgIEd0a0FkanVzdG1lbnQqIGFkanVzdG1lbnQ7CisKKyAgICBndGtfd2luZG93
X3NldF9kZWZhdWx0X3NpemUoR1RLX1dJTkRPVyh3aW5kb3cpLCA0MDAsIDIwMCk7CisKKyAgICBn
dGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHNjcm9sbGVkX3dpbmRvdyk7
CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihzY3JvbGxlZF93aW5kb3cpLCBH
VEtfV0lER0VUKHZpZXcpKTsKKworICAgIGd0a19zY3JvbGxlZF93aW5kb3dfc2V0X3BvbGljeShH
VEtfU0NST0xMRURfV0lORE9XKHNjcm9sbGVkX3dpbmRvdyksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdUS19QT0xJQ1lfQVVUT01BVElDLCBHVEtfUE9MSUNZX0FVVE9NQVRJ
Qyk7CisKKyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworCisgICAgZ19z
aWduYWxfY29ubmVjdCh2aWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0soaWRs
ZV9xdWl0X2xvb3BfY2IpLCBOVUxMKTsKKworICAgIC8qIFdhaXQgZm9yIHdpbmRvdyB0byBzaG93
IHVwICovCisgICAgZ3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpOworICAgIGdfc2lnbmFsX2Nv
bm5lY3Qod2luZG93LCAibWFwLWV2ZW50IiwKKyAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJB
Q0sobWFwX2V2ZW50X2NiKSwgbG9vcCk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisg
ICAgLyogTG9hZCBhIHBhZ2Ugd2l0aCBhIGJpZyBkaXYgdGhhdCB3aWxsIGNhdXNlIHNjcm9sbGJh
cnMgdG8gYXBwZWFyICovCisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHZpZXcsIHVyaSk7
CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgYWRqdXN0bWVudCA9IGd0a19zY3Jv
bGxlZF93aW5kb3dfZ2V0X3ZhZGp1c3RtZW50KEdUS19TQ1JPTExFRF9XSU5ET1coc2Nyb2xsZWRf
d2luZG93KSk7CisgICAgZ19hc3NlcnRfY21wZmxvYXQoZ3RrX2FkanVzdG1lbnRfZ2V0X3ZhbHVl
KGFkanVzdG1lbnQpLCA9PSwgMC4wKTsKKworICAgIC8qIFNpbmNlIHdlYmtpdF93ZWJfdmlld19l
eGVjdXRlX3NjcmlwdCBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZSwKKyAgICAgICBpdCBpcyBpbXBv
c3NpYmxlIHRvIGtub3cgaWYgYW4gaW5uZXIgZG9jdW1lbnQgaGFzIGZvY3VzIGFmdGVyCisgICAg
ICAgYSBub2RlIG9mIGl0IHdhcyBmb2N1c2VkIHZpYSAuZm9jdXMoKSBtZXRob2QuCisgICAgICAg
VGhlIGNvZGUgYmVsb3cgaXMgYW4gd29ya2Fyb3VuZDogaWYgdGhlIG5vZGUgaGFzIGZvY3VzLCBh
IHNjcm9sbAorICAgICAgIGFjdGlvbiBpcyBwZXJmb3JtZWQgYW5kIGFmdGVyd2FyZCBpdCBpcyBj
aGVja2VkIGlmIHRoZSBhZGp1c3RtZW50CisgICAgICAgaGFzIHRvIGJlIGRpZmZlcmVudCBmcm9t
IDAuCisgICAgKi8KKyAgICBjaGFyIHNjcmlwdFtdID0gInZhciBpbm5lckRvYyA9IGRvY3VtZW50
LmRlZmF1bHRWaWV3LmZyYW1lc1swXS5kb2N1bWVudDsgXAorICAgICAgICAgICAgICAgICAgICAg
aW5uZXJEb2MuZ2V0RWxlbWVudEJ5SWQoXCJsaW5rXCIpLmZvY3VzKCk7ICAgICAgICAgICAgICBc
CisgICAgICAgICAgICAgICAgICAgICBpZiAoaW5uZXJEb2MuaGFzRm9jdXMoKSkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5z
Y3JvbGxCeSgwLCAxMDApOyI7CisKKyAgICAvKiBGb2N1cyBhbiBlbGVtZW50IHVzaW5nIEphdmFT
Y3JpcHQgKi8KKyAgICB3ZWJraXRfd2ViX3ZpZXdfZXhlY3V0ZV9zY3JpcHQodmlldywgc2NyaXB0
KTsKKworICAgIC8qIEFkanVzdG1lbnRzIHVwZGF0ZSBhc3luY2hyb25vdXNseSwgc28gd2UgbXVz
dCB3YWl0IGEgYml0LiAqLworICAgIGdfdGltZW91dF9hZGQoMTAwLCBxdWl0X2FmdGVyX3Nob3J0
X2RlbGF5X2NiLCBsb29wKTsKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICAvKiBN
YWtlIHN1cmUgdGhlIFNjcm9sbGVkV2luZG93IG5vdGljZWQgdGhlIHNjcm9sbCAqLworICAgIGdf
YXNzZXJ0X2NtcGZsb2F0KGd0a19hZGp1c3RtZW50X2dldF92YWx1ZShhZGp1c3RtZW50KSwgIT0s
IDAuMCk7CisKKyAgICBnX2ZyZWUodXJpKTsKKyAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kod2luZG93
KTsKK30KKworc3RhdGljIHZvaWQgZG9fdGVzdF93ZWJraXRfd2ViX3ZpZXdfYWRqdXN0bWVudHMo
Z2Jvb2xlYW4gd2l0aF9wYWdlX2NhY2hlKQoreworICAgIGNoYXIqIGVmZmVjdGl2ZV91cmkgPSBn
X3N0cmNvbmNhdChiYXNlX3VyaSwgImJpZ2Rpdi5odG1sIiwgTlVMTCk7CisgICAgY2hhciogc2Vj
b25kX3VyaSA9IGdfc3RyY29uY2F0KGJhc2VfdXJpLCAiaWZyYW1lLmh0bWwiLCBOVUxMKTsKKyAg
ICBHdGtXaWRnZXQqIHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwp
OworICAgIEd0a1dpZGdldCogc2Nyb2xsZWRfd2luZG93ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19u
ZXcoTlVMTCwgTlVMTCk7CisgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IFdFQktJVF9XRUJfVklF
Vyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIEd0a0FkanVzdG1lbnQqIGFkanVzdG1lbnQ7
CisgICAgZG91YmxlIGxvd2VyOworICAgIGRvdWJsZSB1cHBlcjsKKworICAgIGlmICh3aXRoX3Bh
Z2VfY2FjaGUpIHsKKyAgICAgICAgV2ViS2l0V2ViU2V0dGluZ3MqIHNldHRpbmdzID0gd2Via2l0
X3dlYl92aWV3X2dldF9zZXR0aW5ncyh2aWV3KTsKKyAgICAgICAgZ19vYmplY3Rfc2V0KHNldHRp
bmdzLCAiZW5hYmxlLXBhZ2UtY2FjaGUiLCBUUlVFLCBOVUxMKTsKKyAgICB9CisKKyAgICBndGtf
d2luZG93X3NldF9kZWZhdWx0X3NpemUoR1RLX1dJTkRPVyh3aW5kb3cpLCA0MDAsIDIwMCk7CisK
KyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHNjcm9sbGVkX3dp
bmRvdyk7CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihzY3JvbGxlZF93aW5k
b3cpLCBHVEtfV0lER0VUKHZpZXcpKTsKKworICAgIGd0a19zY3JvbGxlZF93aW5kb3dfc2V0X3Bv
bGljeShHVEtfU0NST0xMRURfV0lORE9XKHNjcm9sbGVkX3dpbmRvdyksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdUS19QT0xJQ1lfQVVUT01BVElDLCBHVEtfUE9MSUNZX0FV
VE9NQVRJQyk7CisKKyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworCisg
ICAgZ19vYmplY3RfY29ubmVjdChHX09CSkVDVCh2aWV3KSwKKyAgICAgICAgICAgICAgICAgICAg
ICJzaWduYWw6Om5vdGlmeTo6bG9hZC1zdGF0dXMiLCBpZGxlX3F1aXRfbG9vcF9jYiwgTlVMTCwK
KyAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgLyogV2FpdCBmb3Igd2luZG93IHRv
IHNob3cgdXAgKi8KKyAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7CisgICAgZ19zaWdu
YWxfY29ubmVjdCh3aW5kb3csICJtYXAtZXZlbnQiLAorICAgICAgICAgICAgICAgICAgICAgR19D
QUxMQkFDSyhtYXBfZXZlbnRfY2IpLCBsb29wKTsKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7
CisKKyAgICAvKiBMb2FkIGEgcGFnZSB3aXRoIGEgYmlnIGRpdiB0aGF0IHdpbGwgY2F1c2Ugc2Ny
b2xsYmFycyB0byBhcHBlYXIgKi8KKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkodmlldywg
ZWZmZWN0aXZlX3VyaSk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgLyogQWRq
dXN0bWVudHMgdXBkYXRlIGFzeW5jaHJvbm91c2x5LCBzbyB3ZSBtdXN0IHdhaXQgYSBiaXQuICov
CisgICAgZ190aW1lb3V0X2FkZCgxMDAsIHF1aXRfYWZ0ZXJfc2hvcnRfZGVsYXlfY2IsIGxvb3Ap
OworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIGFkanVzdG1lbnQgPSBndGtfc2Ny
b2xsZWRfd2luZG93X2dldF92YWRqdXN0bWVudChHVEtfU0NST0xMRURfV0lORE9XKHNjcm9sbGVk
X3dpbmRvdykpOworICAgIGdfYXNzZXJ0X2NtcGZsb2F0KGd0a19hZGp1c3RtZW50X2dldF92YWx1
ZShhZGp1c3RtZW50KSwgPT0sIDAuMCk7CisKKyAgICBsb3dlciA9IGd0a19hZGp1c3RtZW50X2dl
dF9sb3dlcihhZGp1c3RtZW50KTsKKyAgICB1cHBlciA9IGd0a19hZGp1c3RtZW50X2dldF91cHBl
cihhZGp1c3RtZW50KTsKKworICAgIC8qIFNjcm9sbCB0aGUgdmlldyB1c2luZyBKYXZhU2NyaXB0
ICovCisgICAgd2Via2l0X3dlYl92aWV3X2V4ZWN1dGVfc2NyaXB0KHZpZXcsICJ3aW5kb3cuc2Ny
b2xsQnkoMCwgMTAwKSIpOworCisgICAgLyogQWRqdXN0bWVudHMgdXBkYXRlIGFzeW5jaHJvbm91
c2x5LCBzbyB3ZSBtdXN0IHdhaXQgYSBiaXQuICovCisgICAgZ190aW1lb3V0X2FkZCgxMDAsIHF1
aXRfYWZ0ZXJfc2hvcnRfZGVsYXlfY2IsIGxvb3ApOworICAgIGdfbWFpbl9sb29wX3J1bihsb29w
KTsKKworICAgIC8qIE1ha2Ugc3VyZSB0aGUgU2Nyb2xsZWRXaW5kb3cgbm90aWNlZCB0aGUgc2Ny
b2xsICovCisgICAgZ19hc3NlcnRfY21wZmxvYXQoZ3RrX2FkanVzdG1lbnRfZ2V0X3ZhbHVlKGFk
anVzdG1lbnQpLCA9PSwgMTAwLjApOworCisgICAgLyogTG9hZCBhIHNlY29uZCBVUkkgKi8KKyAg
ICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkodmlldywgc2Vjb25kX3VyaSk7CisgICAgZ19tYWlu
X2xvb3BfcnVuKGxvb3ApOworCisgICAgLyogVGhlIHBhZ2UgbG9hZGVkIGJ1dCB0aGUgYWRqdXN0
bWVudHMgbWF5IG5vdCBiZSB1cGRhdGVkIHlldC4gV2FpdCBhIGJpdC4gKi8KKyAgICBnX3RpbWVv
dXRfYWRkKDEwMCwgcXVpdF9hZnRlcl9zaG9ydF9kZWxheV9jYiwgbG9vcCk7CisgICAgZ19tYWlu
X2xvb3BfcnVuKGxvb3ApOworCisgICAgLyogTWFrZSBzdXJlIHRoZSBzY3JvbGxiYXIgaGFzIGJl
ZW4gcmVzZXQgKi8KKyAgICBnX2Fzc2VydF9jbXBmbG9hdChndGtfYWRqdXN0bWVudF9nZXRfdmFs
dWUoYWRqdXN0bWVudCksID09LCAwLjApOworCisgICAgLyogR28gYmFjayAqLworICAgIHdlYmtp
dF93ZWJfdmlld19nb19iYWNrKHZpZXcpOworCisgICAgLyogV2hlbiB1c2luZyBwYWdlIGNhY2hl
LCBnb19iYWNrIHdpbGwgcmV0dXJuIHN5bmNyb25vdXNseSAqLworICAgIGlmICghd2l0aF9wYWdl
X2NhY2hlKQorICAgICAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICAvKiBNYWtlIHN1
cmUgR1RLKyBoYXMgdGltZSB0byBwcm9jZXNzIHRoZSBjaGFuZ2VzIGluIHNpemUsIGZvciB0aGUg
YWRqdXNtZW50cyAqLworICAgIHdoaWxlIChndGtfZXZlbnRzX3BlbmRpbmcoKSkKKyAgICAgICAg
Z3RrX21haW5faXRlcmF0aW9uKCk7CisKKyAgICAvKiBNYWtlIHN1cmUgdXBwZXIgYW5kIGxvd2Vy
IGJvdW5kcyBoYXZlIGJlZW4gcmVzdG9yZWQgY29ycmVjdGx5ICovCisgICAgZ19hc3NlcnRfY21w
ZmxvYXQobG93ZXIsID09LCBndGtfYWRqdXN0bWVudF9nZXRfbG93ZXIoYWRqdXN0bWVudCkpOwor
ICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHVwcGVyLCA9PSwgZ3RrX2FkanVzdG1lbnRfZ2V0X3VwcGVy
KGFkanVzdG1lbnQpKTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdChndGtfYWRqdXN0bWVudF9nZXRf
dmFsdWUoYWRqdXN0bWVudCksID09LCAxMDAuMCk7CisKKyAgICBnX2ZyZWUoZWZmZWN0aXZlX3Vy
aSk7CisgICAgZ19mcmVlKHNlY29uZF91cmkpOworCisgICAgZ3RrX3dpZGdldF9kZXN0cm95KHdp
bmRvdyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl92aWV3X2FkanVzdG1lbnRz
KCkKK3sKKyAgICAvKiBUZXN0IHRoaXMgd2l0aCBwYWdlIGNhY2hlIGRpc2FibGVkLCBhbmQgZW5h
YmxlZC4gKi8KKyAgICBkb190ZXN0X3dlYmtpdF93ZWJfdmlld19hZGp1c3RtZW50cyhGQUxTRSk7
CisgICAgZG9fdGVzdF93ZWJraXRfd2ViX3ZpZXdfYWRqdXN0bWVudHMoVFJVRSk7Cit9CisKK2di
b29sZWFuIGRlbGF5ZWRfZGVzdHJveShncG9pbnRlciBkYXRhKQoreworICAgIGd0a193aWRnZXRf
ZGVzdHJveShHVEtfV0lER0VUKGRhdGEpKTsKKyAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwor
ICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3ZpZXdf
ZGVzdHJveSgpCit7CisgICAgR3RrV2lkZ2V0KiB3aW5kb3c7CisgICAgR3RrV2lkZ2V0KiB3ZWJf
dmlldzsKKworICAgIHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwp
OworICAgIHdlYl92aWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygpOworCisgICAgZ3RrX2NvbnRh
aW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB3ZWJfdmlldyk7CisKKyAgICBndGtfd2lk
Z2V0X3Nob3dfYWxsKHdpbmRvdyk7CisKKyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEws
IFRSVUUpOworCisgICAgZ19zaWduYWxfY29ubmVjdCh3aW5kb3csICJtYXAtZXZlbnQiLAorICAg
ICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhtYXBfZXZlbnRfY2IpLCBsb29wKTsKKyAgICBn
X21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICBnX2lkbGVfYWRkKGRlbGF5ZWRfZGVzdHJveSwg
d2ViX3ZpZXcpOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIGd0a193aWRnZXRf
ZGVzdHJveSh3aW5kb3cpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfdmlld193
aW5kb3dfZmVhdHVyZXMoKQoreworICAgIEd0a1dpZGdldCogd2luZG93OworICAgIEd0a1dpZGdl
dCogd2ViX3ZpZXc7CisgICAgCisgICAgd2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRP
V19UT1BMRVZFTCk7CisgICAgd2ViX3ZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7CisgICAg
CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB3ZWJfdmlldyk7
CisgICAgCisgICAgZ3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpOworICAgIAorICAgIGxvb3Ag
PSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdp
bmRvdywgIm1hcC1ldmVudCIsCisgICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKG1hcF9l
dmVudF9jYiksIGxvb3ApOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKyAgICAKKyAgICAv
KiBCdWcgIzM2MTQ0ICovCisgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKHdlYl92aWV3KSwgIndp
bmRvdy1mZWF0dXJlcyIsIE5VTEwsIE5VTEwpOworICAgIAorICAgIGd0a193aWRnZXRfZGVzdHJv
eSh3aW5kb3cpOworfSAgICAKKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3ZpZXdfaW5f
b2Zmc2NyZWVuX3dpbmRvd19kb2VzX25vdF9jcmFzaCgpCit7CisgICAgbG9vcCA9IGdfbWFpbl9s
b29wX25ldyhOVUxMLCBUUlVFKTsKKworICAgIEd0a1dpZGdldCAqd2luZG93ID0gZ3RrX29mZnNj
cmVlbl93aW5kb3dfbmV3KCk7CisgICAgR3RrV2lkZ2V0ICp3ZWJfdmlldyA9IHdlYmtpdF93ZWJf
dmlld19uZXcoKTsKKworICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93
KSwgd2ViX3ZpZXcpOworICAgIGd0a193aWRnZXRfc2hvd19hbGwod2luZG93KTsKKyAgICBnX3Np
Z25hbF9jb25uZWN0KHdlYl92aWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0so
aWRsZV9xdWl0X2xvb3BfY2IpLCBOVUxMKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmko
V0VCS0lUX1dFQl9WSUVXKHdlYl92aWV3KSwgYmFzZV91cmkpOworCisgICAgZ19tYWluX2xvb3Bf
cnVuKGxvb3ApOworCisgICAgZ3RrX3dpZGdldF9kZXN0cm95KHdpbmRvdyk7CisgICAgZ19tYWlu
X2xvb3BfdW5yZWYobG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl92aWV3
X2RvZXNfbm90X3N0ZWFsX2ZvY3VzKCkKK3sKKyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5V
TEwsIFRSVUUpOworCisgICAgR3RrV2lkZ2V0ICp3aW5kb3cgPSBndGtfb2Zmc2NyZWVuX3dpbmRv
d19uZXcoKTsKKyAgICBHdGtXaWRnZXQgKndlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7
CisgICAgR3RrV2lkZ2V0ICplbnRyeSA9IGd0a19lbnRyeV9uZXcoKTsKKworI2lmZGVmIEdUS19B
UElfVkVSU0lPTl8yCisgICAgR3RrV2lkZ2V0ICpib3ggPSBndGtfaGJveF9uZXcoRkFMU0UsIDAp
OworI2Vsc2UKKyAgICBHdGtXaWRnZXQgKmJveCA9IGd0a19ib3hfbmV3KEdUS19PUklFTlRBVElP
Tl9IT1JJWk9OVEFMLCAwKTsKKyNlbmRpZgorCisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NP
TlRBSU5FUihib3gpLCB3ZWJWaWV3KTsKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJ
TkVSKGJveCksIGVudHJ5KTsKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdp
bmRvdyksIGJveCk7CisgICAgZ3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpOworCisgICAgZ3Rr
X3dpZGdldF9ncmFiX2ZvY3VzKGVudHJ5KTsKKyAgICBnX2Fzc2VydChndGtfd2lkZ2V0X2lzX2Zv
Y3VzKGVudHJ5KSk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJub3RpZnk6Omxv
YWQtc3RhdHVzIiwgR19DQUxMQkFDSyhpZGxlX3F1aXRfbG9vcF9jYiksIE5VTEwpOworICAgIHdl
YmtpdF93ZWJfdmlld19sb2FkX2h0bWxfc3RyaW5nKFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3KSwK
KyAgICAgICAgIjxodG1sPjxib2R5PiIKKyAgICAgICAgIiAgICA8aW5wdXQgaWQ9XCJlbnRyeVwi
IHR5cGU9XCJ0ZXh0XCIvPiIKKyAgICAgICAgIiAgICA8c2NyaXB0PiIKKyAgICAgICAgIiAgICAg
ICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJlbnRyeVwiKS5mb2N1cygpOyIKKyAgICAgICAg
IiAgICA8L3NjcmlwdD4iCisgICAgICAgICI8L2JvZHk+PC9odG1sPiIsICJmaWxlOi8vIik7CisK
KyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICBnX2Fzc2VydChndGtfd2lkZ2V0X2lz
X2ZvY3VzKGVudHJ5KSk7CisKKyAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kod2luZG93KTsKKyAgICBn
X21haW5fbG9vcF91bnJlZihsb29wKTsKK30KKworc3RhdGljIGdib29sZWFuIGVtaXRLZXlTdHJv
a2UoV2ViS2l0V2ViVmlldyogd2ViVmlldykKK3sKKyAgICBHZGtFdmVudCogcHJlc3NFdmVudCA9
IGdka19ldmVudF9uZXcoR0RLX0tFWV9QUkVTUyk7CisgICAgcHJlc3NFdmVudC0+a2V5LmtleXZh
bCA9IEdES19LRVlfZjsKKyAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dp
bmRvdyhHVEtfV0lER0VUKHdlYlZpZXcpKTsKKyAgICBwcmVzc0V2ZW50LT5rZXkud2luZG93ID0g
d2luZG93OworICAgIGdfb2JqZWN0X3JlZihwcmVzc0V2ZW50LT5rZXkud2luZG93KTsKKworI2lm
bmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorICAgIEdka0RldmljZU1hbmFnZXIqIG1hbmFnZXIgPSBn
ZGtfZGlzcGxheV9nZXRfZGV2aWNlX21hbmFnZXIoZ2RrX3dpbmRvd19nZXRfZGlzcGxheSh3aW5k
b3cpKTsKKyAgICBnZGtfZXZlbnRfc2V0X2RldmljZShwcmVzc0V2ZW50LCBnZGtfZGV2aWNlX21h
bmFnZXJfZ2V0X2NsaWVudF9wb2ludGVyKG1hbmFnZXIpKTsKKyNlbmRpZgorCisgICAgLy8gV2hl
biBzeW50aGVzaXppbmcgYW4gZXZlbnQsIGFuIGludmFsaWQgaGFyZHdhcmVfa2V5Y29kZSB2YWx1
ZQorICAgIC8vIGNhbiBjYXVzZSBpdCB0byBiZSBiYWRseSBwcm9jZXNzZWQgYnkgR3RrKy4KKyAg
ICBHZGtLZXltYXBLZXkqIGtleXM7CisgICAgZ2ludCBuX2tleXM7CisgICAgaWYgKGdka19rZXlt
YXBfZ2V0X2VudHJpZXNfZm9yX2tleXZhbChnZGtfa2V5bWFwX2dldF9kZWZhdWx0KCksIEdES19L
RVlfZiwgJmtleXMsICZuX2tleXMpKSB7CisgICAgICAgIHByZXNzRXZlbnQtPmtleS5oYXJkd2Fy
ZV9rZXljb2RlID0ga2V5c1swXS5rZXljb2RlOworICAgICAgICBnX2ZyZWUoa2V5cyk7CisgICAg
fQorCisgICAgR2RrRXZlbnQqIHJlbGVhc2VFdmVudCA9IGdka19ldmVudF9jb3B5KHByZXNzRXZl
bnQpOworICAgIGd0a19tYWluX2RvX2V2ZW50KHByZXNzRXZlbnQpOworICAgIGdka19ldmVudF9m
cmVlKHByZXNzRXZlbnQpOworICAgIHJlbGVhc2VFdmVudC0+a2V5LnR5cGUgPSBHREtfS0VZX1JF
TEVBU0U7CisgICAgZ3RrX21haW5fZG9fZXZlbnQocmVsZWFzZUV2ZW50KTsKKyAgICBnZGtfZXZl
bnRfZnJlZShyZWxlYXNlRXZlbnQpOworCisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMg
Z2Jvb2xlYW4gZW50ZXJpbmdfZnVsbHNjcmVlbl9jYihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBH
T2JqZWN0KiBlbGVtZW50LCBnYm9vbGVhbiBibG9ja2VkKQoreworICAgIGlmIChibG9ja2VkKQor
ICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworICAgIGVsc2UKKyAgICAgICAgZ190aW1l
b3V0X2FkZCgyMDAsIChHU291cmNlRnVuYykgZW1pdEtleVN0cm9rZSwgd2ViVmlldyk7CisgICAg
cmV0dXJuIGJsb2NrZWQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBsZWF2aW5nX2Z1bGxzY3JlZW5f
Y2IoV2ViS2l0V2ViVmlldyogd2ViVmlldywgR09iamVjdCogZWxlbWVudCwgZ3BvaW50ZXIgZGF0
YSkKK3sKKyAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworICAgIHJldHVybiBGQUxTRTsKK30K
Kworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3ZpZXdfZnVsbHNjcmVlbihnY29uc3Rwb2lu
dGVyIGJsb2NrZWQpCit7CisgICAgR3RrV2lkZ2V0KiB3aW5kb3c7CisgICAgR3RrV2lkZ2V0KiB3
ZWJfdmlldzsKKyAgICBXZWJLaXRXZWJTZXR0aW5ncyAqc2V0dGluZ3M7CisKKyAgICB3aW5kb3cg
PSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKKyAgICB3ZWJfdmlldyA9IHdl
YmtpdF93ZWJfdmlld19uZXcoKTsKKworICAgIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dl
dF9zZXR0aW5ncyhXRUJLSVRfV0VCX1ZJRVcod2ViX3ZpZXcpKTsKKyAgICBnX29iamVjdF9zZXQo
c2V0dGluZ3MsICJlbmFibGUtZnVsbHNjcmVlbiIsIFRSVUUsIE5VTEwpOworICAgIHdlYmtpdF93
ZWJfdmlld19zZXRfc2V0dGluZ3MoV0VCS0lUX1dFQl9WSUVXKHdlYl92aWV3KSwgc2V0dGluZ3Mp
OworCisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB3ZWJfdmll
dyk7CisKKyAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7CisKKyAgICBsb29wID0gZ19t
YWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworCisgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJfdmll
dywgImVudGVyaW5nLWZ1bGxzY3JlZW4iLCBHX0NBTExCQUNLKGVudGVyaW5nX2Z1bGxzY3JlZW5f
Y2IpLCAoZ3BvaW50ZXIpIGJsb2NrZWQpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViX3ZpZXcs
ICJsZWF2aW5nLWZ1bGxzY3JlZW4iLCBHX0NBTExCQUNLKGxlYXZpbmdfZnVsbHNjcmVlbl9jYiks
IE5VTEwpOworCisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklF
Vyh3ZWJfdmlldyksICI8aHRtbD48Ym9keT4iCisgICAgICAgICAgICAgICAgICAgIjxzY3JpcHQ+
IgorICAgICAgICAgICAgICAgICAgICJ2YXIgZXZlbnROYW1lID0gJ2tleXByZXNzJzsiCisgICAg
ICAgICAgICAgICAgICAgImRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBmdW5j
dGlvbiAoKSB7IgorICAgICAgICAgICAgICAgICAgICIgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVt
ZW50LndlYmtpdFJlcXVlc3RGdWxsU2NyZWVuKCk7IgorICAgICAgICAgICAgICAgICAgICJ9LCBm
YWxzZSk7IgorICAgICAgICAgICAgICAgICAgICI8L3NjcmlwdD48L2JvZHk+PC9odG1sPiIsIE5V
TEwsIE5VTEwsIE5VTEwpOworCisgICAgZ190aW1lb3V0X2FkZCgxMDAsIChHU291cmNlRnVuYykg
ZW1pdEtleVN0cm9rZSwgV0VCS0lUX1dFQl9WSUVXKHdlYl92aWV3KSk7CisgICAgZ19tYWluX2xv
b3BfcnVuKGxvb3ApOworCisgICAgZ3RrX3dpZGdldF9kZXN0cm95KHdpbmRvdyk7Cit9CisKK3N0
YXRpYyBnYm9vbGVhbiBjaGVja01pbWVUeXBlRm9yRmlsdGVyKEd0a0ZpbGVGaWx0ZXIqIGZpbHRl
ciwgY29uc3QgZ2NoYXIqIG1pbWVUeXBlKQoreworICAgIEd0a0ZpbGVGaWx0ZXJJbmZvIGZpbHRl
cl9pbmZvOworICAgIGZpbHRlcl9pbmZvLmNvbnRhaW5zID0gR1RLX0ZJTEVfRklMVEVSX01JTUVf
VFlQRTsKKyAgICBmaWx0ZXJfaW5mby5taW1lX3R5cGUgPSBtaW1lVHlwZTsKKyAgICByZXR1cm4g
Z3RrX2ZpbGVfZmlsdGVyX2ZpbHRlcihmaWx0ZXIsICZmaWx0ZXJfaW5mbyk7Cit9CisKK3N0YXRp
YyBnYm9vbGVhbiBydW5GaWxlQ2hvb3NlckNiTm9NdWx0aXNlbE5vTWltZShXZWJLaXRXZWJWaWV3
KiB3ZWJ2aWV3LCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QsIGdwb2ludGVyIGRh
dGEpCit7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2Vs
ZWN0X211bHRpcGxlKHJlcXVlc3QpKTsKKworICAgIGNvbnN0IGdjaGFyKiBjb25zdCogbWltZVR5
cGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKHJlcXVlc3Qp
OworICAgIGdfYXNzZXJ0KCFtaW1lVHlwZXMpOworICAgIEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciA9
IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIocmVxdWVz
dCk7CisgICAgZ19hc3NlcnQoIWZpbHRlcik7CisKKyAgICBjb25zdCBnY2hhciogY29uc3QqIHNl
bGVjdGVkRmlsZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2Zp
bGVzKHJlcXVlc3QpOworICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZpbGVzKTsKKworICAgIGdfbWFp
bl9sb29wX3F1aXQobG9vcCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVh
biBydW5GaWxlQ2hvb3NlckNiTXVsdGlzZWxOb01pbWUoV2ViS2l0V2ViVmlldyogd2Vidmlldywg
V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0LCBncG9pbnRlciBkYXRhKQoreworICAg
IGdfYXNzZXJ0KHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxl
KHJlcXVlc3QpKTsKKworICAgIGNvbnN0IGdjaGFyKiBjb25zdCogbWltZVR5cGVzID0gd2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKHJlcXVlc3QpOworICAgIGdfYXNz
ZXJ0KCFtaW1lVHlwZXMpOworICAgIEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciA9IHdlYmtpdF9maWxl
X2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIocmVxdWVzdCk7CisgICAgZ19h
c3NlcnQoIWZpbHRlcik7CisgICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBzZWxlY3RlZEZpbGVzID0g
d2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0KTsK
KyAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxlcyk7CisKKyAgICAvLyBTZWxlY3Qgc29tZSBmaWxl
cy4KKyAgICBjb25zdCBnY2hhciogZmlsZXNUb1NlbGVjdFs0XSA9IHsgIi9mb28iLCAiL2Zvby9i
YXIiLCAiL2Zvby9iYXIvYmF6IiwgMCB9OworICAgIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVz
dF9zZWxlY3RfZmlsZXMocmVxdWVzdCwgZmlsZXNUb1NlbGVjdCk7CisKKyAgICAvLyBDaGVjayB0
aGUgZmlsZXMgdGhhdCBoYXZlIGJlZW4ganVzdCBzZWxlY3RlZC4KKyAgICBzZWxlY3RlZEZpbGVz
ID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0
KTsKKyAgICBnX2Fzc2VydChzZWxlY3RlZEZpbGVzKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2Vs
ZWN0ZWRGaWxlc1swXSwgPT0sICIvZm9vIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVk
RmlsZXNbMV0sID09LCAiL2Zvby9iYXIiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRG
aWxlc1syXSwgPT0sICIvZm9vL2Jhci9iYXoiKTsKKyAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxl
c1szXSk7CisKKyAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworICAgIHJldHVybiBUUlVFOwor
fQorCitzdGF0aWMgZ2Jvb2xlYW4gcnVuRmlsZUNob29zZXJDYlNlbGVjdGlvblJldGFpbmVkKFdl
YktpdFdlYlZpZXcqIHdlYnZpZXcsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCwg
Z3BvaW50ZXIgZGF0YSkKK3sKKyAgICBjb25zdCBnY2hhciogY29uc3QqIHNlbGVjdGVkRmlsZXMg
PSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKHJlcXVlc3Qp
OworICAgIGdfYXNzZXJ0KHNlbGVjdGVkRmlsZXMpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxl
Y3RlZEZpbGVzWzBdLCA9PSwgIi9mb28iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRG
aWxlc1sxXSwgPT0sICIvZm9vL2JhciIpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZp
bGVzWzJdLCA9PSwgIi9mb28vYmFyL2JheiIpOworICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZpbGVz
WzNdKTsKKworICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7CisgICAgcmV0dXJuIFRSVUU7Cit9
CisKK3N0YXRpYyBnYm9vbGVhbiBydW5GaWxlQ2hvb3NlckNiTm9NdWx0aXNlbEFjY2VwdFR5cGVz
KFdlYktpdFdlYlZpZXcqIHdlYnZpZXcsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVz
dCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBnX2Fzc2VydCghd2Via2l0X2ZpbGVfY2hvb3Nlcl9y
ZXF1ZXN0X2dldF9zZWxlY3RfbXVsdGlwbGUocmVxdWVzdCkpOworCisgICAgY29uc3QgZ2NoYXIq
IGNvbnN0KiBtaW1lVHlwZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVf
dHlwZXMocmVxdWVzdCk7CisgICAgZ19hc3NlcnQobWltZVR5cGVzKTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIobWltZVR5cGVzWzBdLCA9PSwgImF1ZGlvLyoiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIo
bWltZVR5cGVzWzFdLCA9PSwgInZpZGVvLyoiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIobWltZVR5
cGVzWzJdLCA9PSwgImltYWdlLyoiKTsKKyAgICBnX2Fzc2VydCghbWltZVR5cGVzWzNdKTsKKwor
ICAgIEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9n
ZXRfbWltZV90eXBlc19maWx0ZXIocmVxdWVzdCk7CisgICAgZ19hc3NlcnQoR1RLX0lTX0ZJTEVf
RklMVEVSKGZpbHRlcikpOworICAgIGdfYXNzZXJ0KGNoZWNrTWltZVR5cGVGb3JGaWx0ZXIoZmls
dGVyLCAiYXVkaW8vKiIpKTsKKyAgICBnX2Fzc2VydChjaGVja01pbWVUeXBlRm9yRmlsdGVyKGZp
bHRlciwgInZpZGVvLyoiKSk7CisgICAgZ19hc3NlcnQoY2hlY2tNaW1lVHlwZUZvckZpbHRlcihm
aWx0ZXIsICJpbWFnZS8qIikpOworCisgICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBzZWxlY3RlZEZp
bGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1
ZXN0KTsKKyAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxlcyk7CisKKyAgICBnX21haW5fbG9vcF9x
dWl0KGxvb3ApOworICAgIHJldHVybiBUUlVFOworfQorCit2b2lkIGRvTW91c2VCdXR0b25FdmVu
dChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRUeXBlIGV2ZW50VHlwZSwgaW50IHgsIGludCB5
LCB1bnNpZ25lZCBpbnQgYnV0dG9uLCB1bnNpZ25lZCBpbnQgbW9kaWZpZXJzKQoreworICAgIGdf
YXNzZXJ0KGd0a193aWRnZXRfZ2V0X3JlYWxpemVkKHdpZGdldCkpOworCisgICAgR2RrRXZlbnQq
IGV2ZW50ID0gZ2RrX2V2ZW50X25ldyhldmVudFR5cGUpOworICAgIGV2ZW50LT5idXR0b24ud2lu
ZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KHdpZGdldCk7CisgICAgZ19vYmplY3RfcmVmKGV2
ZW50LT5idXR0b24ud2luZG93KTsKKworICAgIGV2ZW50LT5idXR0b24udGltZSA9IEdES19DVVJS
RU5UX1RJTUU7CisgICAgZXZlbnQtPmJ1dHRvbi54ID0geDsKKyAgICBldmVudC0+YnV0dG9uLnkg
PSB5OworICAgIGV2ZW50LT5idXR0b24uYXhlcyA9IDA7CisgICAgZXZlbnQtPmJ1dHRvbi5zdGF0
ZSA9IG1vZGlmaWVyczsKKyAgICBldmVudC0+YnV0dG9uLmJ1dHRvbiA9IGJ1dHRvbjsKKworI2lm
bmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorICAgIGV2ZW50LT5idXR0b24uZGV2aWNlID0gZ2RrX2Rl
dmljZV9tYW5hZ2VyX2dldF9jbGllbnRfcG9pbnRlcihnZGtfZGlzcGxheV9nZXRfZGV2aWNlX21h
bmFnZXIoZ3RrX3dpZGdldF9nZXRfZGlzcGxheSh3aWRnZXQpKSk7CisjZW5kaWYKKworICAgIGlu
dCB4Um9vdCwgeVJvb3Q7CisgICAgZ2RrX3dpbmRvd19nZXRfcm9vdF9jb29yZHMoZ3RrX3dpZGdl
dF9nZXRfd2luZG93KHdpZGdldCksIHgsIHksICZ4Um9vdCwgJnlSb290KTsKKyAgICBldmVudC0+
YnV0dG9uLnhfcm9vdCA9IHhSb290OworICAgIGV2ZW50LT5idXR0b24ueV9yb290ID0geVJvb3Q7
CisgICAgZ3RrX21haW5fZG9fZXZlbnQoZXZlbnQpOworfQorCitzdGF0aWMgdm9pZCBjbGlja01v
dXNlQnV0dG9uKEd0a1dpZGdldCogd2lkZ2V0LCBpbnQgeCwgaW50IHksIHVuc2lnbmVkIGludCBi
dXR0b24sIHVuc2lnbmVkIGludCBtb2RpZmllcnMpCit7CisgICAgZG9Nb3VzZUJ1dHRvbkV2ZW50
KHdpZGdldCwgR0RLX0JVVFRPTl9QUkVTUywgeCwgeSwgYnV0dG9uLCBtb2RpZmllcnMpOworICAg
IGRvTW91c2VCdXR0b25FdmVudCh3aWRnZXQsIEdES19CVVRUT05fUkVMRUFTRSwgeCwgeSwgYnV0
dG9uLCBtb2RpZmllcnMpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gY2xpY2tNb3VzZUJ1dHRvbkFu
ZFdhaXRGb3JGaWxlQ2hvb3NlclJlcXVlc3QoV2ViS2l0V2ViVmlldyogd2ViVmlldykKK3sKKyAg
ICBjbGlja01vdXNlQnV0dG9uKEdUS19XSURHRVQod2ViVmlldyksIDUsIDUsIDEsIDApOworICAg
IHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfdmlld19maWxl
X2Nob29zZXIoKQoreworICAgIGNvbnN0IGdjaGFyKiBodG1sRm9ybWF0QmFzZSA9ICI8aHRtbD48
Ym9keT4iCisgICAgICAgICAgICAiPGlucHV0IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0
OjA7dG9wOjA7bWFyZ2luOjA7cGFkZGluZzowJyB0eXBlPSdmaWxlJyAlcy8+IgorICAgICAgICAg
ICAgIjwvYm9keT48L2h0bWw+IjsKKworICAgIEd0a1dpZGdldCogd2luZG93ID0gZ3RrX3dpbmRv
d19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7CisgICAgR3RrV2lkZ2V0KiB3ZWJWaWV3ID0gd2Vi
a2l0X3dlYl92aWV3X25ldygpOworICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIo
d2luZG93KSwgd2ViVmlldyk7CisgICAgZ3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpOworCisg
ICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKKworICAgIC8vIE11bHRpcGxl
IHNlbGVjdGlvbnMgbm90IGFsbG93ZWQsIG5vIE1JTUUgZmlsdGVyaW5nLgorICAgIGd1bG9uZyBo
YW5kbGVyID0gZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAicnVuLWZpbGUtY2hvb3NlciIsIEdf
Q0FMTEJBQ0socnVuRmlsZUNob29zZXJDYk5vTXVsdGlzZWxOb01pbWUpLCBOVUxMKTsKKyAgICBn
Y2hhciogaHRtbEZvcm1hdCA9IGdfc3RyZHVwX3ByaW50ZihodG1sRm9ybWF0QmFzZSwgIiIpOwor
ICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldyks
IGh0bWxGb3JtYXQsIE5VTEwsIE5VTEwsIE5VTEwpOworICAgIGdfZnJlZShodG1sRm9ybWF0KTsK
KworICAgIGdfdGltZW91dF9hZGQoMTAwLCAoR1NvdXJjZUZ1bmMpIGNsaWNrTW91c2VCdXR0b25B
bmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0LCBXRUJLSVRfV0VCX1ZJRVcod2ViVmlldykpOwor
ICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29u
bmVjdCh3ZWJWaWV3LCBoYW5kbGVyKTsKKworICAgIC8vIE11bHRpcGxlIHNlbGVjdGlvbnMgYWxs
b3dlZCwgbm8gTUlNRSBmaWx0ZXJpbmcsIHNvbWUgcHJlLXNlbGVjdGVkIGZpbGVzLgorICAgIGhh
bmRsZXIgPSBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJydW4tZmlsZS1jaG9vc2VyIiwgR19D
QUxMQkFDSyhydW5GaWxlQ2hvb3NlckNiTXVsdGlzZWxOb01pbWUpLCBOVUxMKTsKKyAgICBodG1s
Rm9ybWF0ID0gZ19zdHJkdXBfcHJpbnRmKGh0bWxGb3JtYXRCYXNlLCAibXVsdGlwbGUiKTsKKyAg
ICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpLCBo
dG1sRm9ybWF0LCBOVUxMLCBOVUxMLCBOVUxMKTsKKyAgICBnX2ZyZWUoaHRtbEZvcm1hdCk7CisK
KyAgICBnX3RpbWVvdXRfYWRkKDEwMCwgKEdTb3VyY2VGdW5jKSBjbGlja01vdXNlQnV0dG9uQW5k
V2FpdEZvckZpbGVDaG9vc2VyUmVxdWVzdCwgV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpKTsKKyAg
ICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5l
Y3Qod2ViVmlldywgaGFuZGxlcik7CisKKyAgICAvLyBQZXJmb3JtIGFub3RoZXIgcmVxdWVzdCB0
byBjaGVjayBpZiB0aGUgbGlzdCBvZiBmaWxlcyBzZWxlY3RlZAorICAgIC8vIGluIHRoZSBwcmV2
aW91cyBzdGVwIGFwcGVhcnMgbm93IGFzIHBhcnQgb2YgdGhlIG5ldyByZXF1ZXN0LgorICAgIGhh
bmRsZXIgPSBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJydW4tZmlsZS1jaG9vc2VyIiwgR19D
QUxMQkFDSyhydW5GaWxlQ2hvb3NlckNiU2VsZWN0aW9uUmV0YWluZWQpLCBOVUxMKTsKKyAgICBn
X3RpbWVvdXRfYWRkKDEwMCwgKEdTb3VyY2VGdW5jKSBjbGlja01vdXNlQnV0dG9uQW5kV2FpdEZv
ckZpbGVDaG9vc2VyUmVxdWVzdCwgV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpKTsKKyAgICBnX21h
aW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3Qod2Vi
VmlldywgaGFuZGxlcik7CisKKyAgICAvLyBNdWx0aXBsZSBzZWxlY3Rpb25zIG5vdCBhbGxvd2Vk
LCBvbmx5IGFjY2VwdCBpbWFnZXMsIGF1ZGlvIGFuZCB2aWRlbyBmaWxlcy4KKyAgICBoYW5kbGVy
ID0gZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAicnVuLWZpbGUtY2hvb3NlciIsIEdfQ0FMTEJB
Q0socnVuRmlsZUNob29zZXJDYk5vTXVsdGlzZWxBY2NlcHRUeXBlcyksIE5VTEwpOworICAgIGh0
bWxGb3JtYXQgPSBnX3N0cmR1cF9wcmludGYoaHRtbEZvcm1hdEJhc2UsICJhY2NlcHQ9J2F1ZGlv
LyosdmlkZW8vKixpbWFnZS8qJyIpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhX
RUJLSVRfV0VCX1ZJRVcod2ViVmlldyksIGh0bWxGb3JtYXQsIE5VTEwsIE5VTEwsIE5VTEwpOwor
ICAgIGdfZnJlZShodG1sRm9ybWF0KTsKKworICAgIGdfdGltZW91dF9hZGQoMTAwLCAoR1NvdXJj
ZUZ1bmMpIGNsaWNrTW91c2VCdXR0b25BbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0LCBXRUJL
SVRfV0VCX1ZJRVcod2ViVmlldykpOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAg
IGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdCh3ZWJWaWV3LCBoYW5kbGVyKTsKKyAgICBndGtf
d2lkZ2V0X2Rlc3Ryb3kod2luZG93KTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2Vi
X3ZpZXdfc291cmNlX21vZGUoKQoreworICAgIEd0a1dpZGdldCogd2ViX3ZpZXc7CisKKyAgICB3
ZWJfdmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKKworICAgIHdlYmtpdF93ZWJfdmlld19s
b2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcod2ViX3ZpZXcpLCAiPGh0bWw+PGJvZHk+PC9ib2R5
PjwvaHRtbD4iLCBOVUxMLCBOVUxMLCBOVUxMKTsKKworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X3ZpZXdfc291cmNlX21vZGUoV0VCS0lUX1dFQl9WSUVXKHdlYl92aWV3KSkpOwor
CisgICAgd2Via2l0X3dlYl92aWV3X3NldF92aWV3X3NvdXJjZV9tb2RlKFdFQktJVF9XRUJfVklF
Vyh3ZWJfdmlldyksIFRSVUUpOworCisgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dldF92
aWV3X3NvdXJjZV9tb2RlKFdFQktJVF9XRUJfVklFVyh3ZWJfdmlldykpKTsKKworICAgIHdlYmtp
dF93ZWJfdmlld19zZXRfdmlld19zb3VyY2VfbW9kZShXRUJLSVRfV0VCX1ZJRVcod2ViX3ZpZXcp
LCBGQUxTRSk7CisKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2dldF92aWV3X3NvdXJj
ZV9tb2RlKFdFQktJVF9XRUJfVklFVyh3ZWJfdmlldykpKTsKKworICAgIGd0a193aWRnZXRfZGVz
dHJveSh3ZWJfdmlldyk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sK
KyAgICBTb3VwU2VydmVyKiBzZXJ2ZXI7CisgICAgU291cFVSSSogc291cF91cmk7CisKKyAgICBn
dGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7CisKKyAgICAvKiBIb3BlZnVsbHkgbWFr
ZSB0ZXN0IGluZGVwZW5kZW50IG9mIHRoZSBwYXRoIGl0J3MgY2FsbGVkIGZyb20uICovCisgICAg
dGVzdHV0aWxzX3JlbGF0aXZlX2NoZGlyKCJUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dEd0ay9yZXNvdXJjZXMvdGVzdC5odG1sIiwgYXJndlswXSk7CisKKyAgICBzZXJ2ZXIgPSBzb3Vw
X3NlcnZlcl9uZXcoU09VUF9TRVJWRVJfUE9SVCwgMCwgTlVMTCk7CisgICAgc291cF9zZXJ2ZXJf
cnVuX2FzeW5jKHNlcnZlcik7CisKKyAgICBzb3VwX3NlcnZlcl9hZGRfaGFuZGxlcihzZXJ2ZXIs
IE5VTEwsIHNlcnZlcl9jYWxsYmFjaywgTlVMTCwgTlVMTCk7CisKKyAgICBzb3VwX3VyaSA9IHNv
dXBfdXJpX25ldygiaHR0cDovLzEyNy4wLjAuMS8iKTsKKyAgICBzb3VwX3VyaV9zZXRfcG9ydChz
b3VwX3VyaSwgc291cF9zZXJ2ZXJfZ2V0X3BvcnQoc2VydmVyKSk7CisKKyAgICBiYXNlX3VyaSA9
IHNvdXBfdXJpX3RvX3N0cmluZyhzb3VwX3VyaSwgRkFMU0UpOworICAgIHNvdXBfdXJpX2ZyZWUo
c291cF91cmkpOworCisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy8iKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vidmlldy9pY29uLXVyaSIsIHRl
c3Rfd2Via2l0X3dlYl92aWV3X2ljb25fdXJpKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJr
aXQvd2Vidmlldy9hZGp1c3RtZW50cyIsIHRlc3Rfd2Via2l0X3dlYl92aWV3X2FkanVzdG1lbnRz
KTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vidmlldy9kZXN0cm95IiwgdGVzdF93
ZWJraXRfd2ViX3ZpZXdfZGVzdHJveSk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dl
YnZpZXcvZ3JhYl9mb2N1cyIsIHRlc3Rfd2Via2l0X3dlYl92aWV3X2dyYWJfZm9jdXMpOworICAg
IGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJ2aWV3L3dpbmRvdy1mZWF0dXJlcyIsIHRlc3Rf
d2Via2l0X3dlYl92aWV3X3dpbmRvd19mZWF0dXJlcyk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIv
d2Via2l0L3dlYnZpZXcvd2Vidmlldy1pbi1vZmZzY3JlZW4td2luZG93LWRvZXMtbm90LWNyYXNo
IiwgdGVzdF93ZWJraXRfd2ViX3ZpZXdfaW5fb2Zmc2NyZWVuX3dpbmRvd19kb2VzX25vdF9jcmFz
aCk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnZpZXcvd2Vidmlldy1kb2VzLW5v
dC1zdGVhbC1mb2N1cyIsIHRlc3Rfd2Via2l0X3dlYl92aWV3X2RvZXNfbm90X3N0ZWFsX2ZvY3Vz
KTsKKyAgICBnX3Rlc3RfYWRkX2RhdGFfZnVuYygiL3dlYmtpdC93ZWJ2aWV3L2Z1bGxzY3JlZW4i
LCBHSU5UX1RPX1BPSU5URVIoRkFMU0UpLCB0ZXN0X3dlYmtpdF93ZWJfdmlld19mdWxsc2NyZWVu
KTsKKyAgICBnX3Rlc3RfYWRkX2RhdGFfZnVuYygiL3dlYmtpdC93ZWJ2aWV3L2Z1bGxzY3JlZW4t
YmxvY2tlZCIsIEdJTlRfVE9fUE9JTlRFUihUUlVFKSwgdGVzdF93ZWJraXRfd2ViX3ZpZXdfZnVs
bHNjcmVlbik7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnZpZXcvZmlsZS1jaG9v
c2VyIiwgdGVzdF93ZWJraXRfd2ViX3ZpZXdfZmlsZV9jaG9vc2VyKTsKKyAgICBnX3Rlc3RfYWRk
X2Z1bmMoIi93ZWJraXQvd2Vidmlldy9zb3VyY2UtbW9kZSIsIHRlc3Rfd2Via2l0X3dlYl92aWV3
X3NvdXJjZV9tb2RlKTsKKworICAgIHJldHVybiBnX3Rlc3RfcnVuICgpOworfQpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdpbmRvdy5jIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdpbmRvdy5jCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlZGE0N2IKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2luZG93LmMKQEAgLTAsMCArMSwx
MTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQ29sbGFib3JhIEx0ZC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0
Lmg+CisKK3N0YXRpYyB2b2lkIG5vdGlmeV9sb2FkX3N0YXR1c19jYihXZWJLaXRXZWJWaWV3KiB3
ZWJfdmlldywgR1BhcmFtU3BlYyogcHNwZWMsIGdwb2ludGVyIGRhdGEpCit7CisgICAgaWYgKHdl
YmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMod2ViX3ZpZXcpID09IFdFQktJVF9MT0FEX0ZJ
TklTSEVEKSB7CisgICAgICAgIEdNYWluTG9vcCogbG9vcCA9IChHTWFpbkxvb3AqKWRhdGE7CisK
KyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk
IHRlc3Rfd2Via2l0X3dpbmRvd19zY3JvbGxiYXJfcG9saWN5KHZvaWQpCit7CisgICAgR01haW5M
b29wKiBsb29wOworICAgIEd0a1dpZGdldCogc2Nyb2xsZWRXaW5kb3c7CisgICAgR3RrV2lkZ2V0
KiB3ZWJWaWV3OworICAgIFdlYktpdFdlYkZyYW1lKiBtYWluRnJhbWU7CisgICAgR3RrUG9saWN5
VHlwZSBob3Jpem9udGFsUG9saWN5OworICAgIEd0a1BvbGljeVR5cGUgdmVydGljYWxQb2xpY3k7
CisKKyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworCisgICAgc2Nyb2xs
ZWRXaW5kb3cgPSBndGtfc2Nyb2xsZWRfd2luZG93X25ldyhOVUxMLCBOVUxMKTsKKyAgICBndGtf
c2Nyb2xsZWRfd2luZG93X3NldF9wb2xpY3koR1RLX1NDUk9MTEVEX1dJTkRPVyhzY3JvbGxlZFdp
bmRvdyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19QT0xJQ1lfQVVU
T01BVElDLCBHVEtfUE9MSUNZX0FVVE9NQVRJQyk7CisKKyAgICB3ZWJWaWV3ID0gd2Via2l0X3dl
Yl92aWV3X25ldygpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOworCisgICAgZ19z
aWduYWxfY29ubmVjdCh3ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsCisgICAgICAgICAg
ICAgICAgICAgICBHX0NBTExCQUNLKG5vdGlmeV9sb2FkX3N0YXR1c19jYiksIGxvb3ApOworCisg
ICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihzY3JvbGxlZFdpbmRvdyksIHdlYlZp
ZXcpOworCisgICAgbWFpbkZyYW1lID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKFdF
QktJVF9XRUJfVklFVyh3ZWJWaWV3KSk7CisKKyAgICAvKiBUZXN0IHdlIGNvcnJlY3RseSBhcHBs
eSBwb2xpY3kgZm9yIG5vdCBoYXZpbmcgc2Nyb2xsYmFyczsgVGhpcworICAgICAqIGNhc2UgaXMg
c3BlY2lhbCwgYmVjYXVzZSB3ZSB0dXJuIHRoZSBwb2xpY3kgZnJvbSBORVZFUiB0bworICAgICAq
IEFVVE9NQVRJQywgc2luY2Ugd2UgY2Fubm90IGVhc2lseSByZXByZXNlbnQgdGhlIHNhbWUgdGhp
bmcKKyAgICAgKiB1c2luZyBHdGtTY3JvbGxlZFdpbmRvdyAqLworICAgIHdlYmtpdF93ZWJfdmll
d19sb2FkX2h0bWxfc3RyaW5nKFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3KSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiPGh0bWw+PGJvZHk+V2ViS2l0ITwvYm9keT48c2Ny
aXB0PmRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0uc3R5bGUub3ZlcmZs
b3cgPSAnaGlkZGVuJzs8L3NjcmlwdD48L2h0bWw+IiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiZmlsZTovLyIpOworCisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwor
CisgICAgZ3RrX3Njcm9sbGVkX3dpbmRvd19nZXRfcG9saWN5KEdUS19TQ1JPTExFRF9XSU5ET1co
c2Nyb2xsZWRXaW5kb3cpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaG9y
aXpvbnRhbFBvbGljeSwgJnZlcnRpY2FsUG9saWN5KTsKKworICAgIGdfYXNzZXJ0KGhvcml6b250
YWxQb2xpY3kgPT0gR1RLX1BPTElDWV9BVVRPTUFUSUMpOworICAgIGdfYXNzZXJ0KHZlcnRpY2Fs
UG9saWN5ID09IEdUS19QT0xJQ1lfQVVUT01BVElDKTsKKworICAgIGdfYXNzZXJ0KEdUS19QT0xJ
Q1lfTkVWRVIgPT0gd2Via2l0X3dlYl9mcmFtZV9nZXRfaG9yaXpvbnRhbF9zY3JvbGxiYXJfcG9s
aWN5KG1haW5GcmFtZSkpOworICAgIGdfYXNzZXJ0KEdUS19QT0xJQ1lfTkVWRVIgPT0gd2Via2l0
X3dlYl9mcmFtZV9nZXRfdmVydGljYWxfc2Nyb2xsYmFyX3BvbGljeShtYWluRnJhbWUpKTsKKwor
ICAgIC8qIFRlc3Qgd2UgY29ycmVjdGx5IGFwcGx5IHBvbGljeSBmb3IgYWx3YXlzIGhhdmluZyBz
Y3JvbGxiYXJzICovCisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfaHRtbF9zdHJpbmcoV0VCS0lU
X1dFQl9WSUVXKHdlYlZpZXcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICI8aHRtbD48Ym9keT5XZWJLaXQhPC9ib2R5PjxzY3JpcHQ+ZG9jdW1lbnQuZ2V0RWxlbWVudHNC
eVRhZ05hbWUoJ2JvZHknKVswXS5zdHlsZS5vdmVyZmxvdyA9ICdzY3JvbGwnOzwvc2NyaXB0Pjwv
aHRtbD4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlOi8vIik7
CisKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICBndGtfc2Nyb2xsZWRfd2luZG93
X2dldF9wb2xpY3koR1RLX1NDUk9MTEVEX1dJTkRPVyhzY3JvbGxlZFdpbmRvdyksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZob3Jpem9udGFsUG9saWN5LCAmdmVydGljYWxQ
b2xpY3kpOworCisgICAgZ19hc3NlcnQoaG9yaXpvbnRhbFBvbGljeSA9PSBHVEtfUE9MSUNZX0FM
V0FZUyk7CisgICAgZ19hc3NlcnQodmVydGljYWxQb2xpY3kgPT0gR1RLX1BPTElDWV9BTFdBWVMp
OworCisgICAgZ19hc3NlcnQoaG9yaXpvbnRhbFBvbGljeSA9PSB3ZWJraXRfd2ViX2ZyYW1lX2dl
dF9ob3Jpem9udGFsX3Njcm9sbGJhcl9wb2xpY3kobWFpbkZyYW1lKSk7CisgICAgZ19hc3NlcnQo
dmVydGljYWxQb2xpY3kgPT0gd2Via2l0X3dlYl9mcmFtZV9nZXRfdmVydGljYWxfc2Nyb2xsYmFy
X3BvbGljeShtYWluRnJhbWUpKTsKKworICAgIC8qIFRlc3Qgd2UgY29ycmVjdGx5IGFwcGx5IHBv
bGljeSBmb3IgaGF2aW5nIHNjcm9sbGJhcnMgd2hlbiBuZWVkZWQgKi8KKyAgICB3ZWJraXRfd2Vi
X3ZpZXdfbG9hZF9odG1sX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldyksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxodG1sPjxib2R5PldlYktpdCE8L2JvZHk+
PHNjcmlwdD5kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdLnN0eWxlLm92
ZXJmbG93ID0gJ2F1dG8nOzwvc2NyaXB0PjwvaHRtbD4iLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJmaWxlOi8vIik7CisKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7
CisKKyAgICBndGtfc2Nyb2xsZWRfd2luZG93X2dldF9wb2xpY3koR1RLX1NDUk9MTEVEX1dJTkRP
VyhzY3JvbGxlZFdpbmRvdyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZo
b3Jpem9udGFsUG9saWN5LCAmdmVydGljYWxQb2xpY3kpOworCisgICAgZ19hc3NlcnQoaG9yaXpv
bnRhbFBvbGljeSA9PSBHVEtfUE9MSUNZX0FVVE9NQVRJQyk7CisgICAgZ19hc3NlcnQodmVydGlj
YWxQb2xpY3kgPT0gR1RLX1BPTElDWV9BVVRPTUFUSUMpOworCisgICAgZ19hc3NlcnQoaG9yaXpv
bnRhbFBvbGljeSA9PSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9ob3Jpem9udGFsX3Njcm9sbGJhcl9w
b2xpY3kobWFpbkZyYW1lKSk7CisgICAgZ19hc3NlcnQodmVydGljYWxQb2xpY3kgPT0gd2Via2l0
X3dlYl9mcmFtZV9nZXRfdmVydGljYWxfc2Nyb2xsYmFyX3BvbGljeShtYWluRnJhbWUpKTsKKwor
ICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hh
cioqIGFyZ3YpCit7CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisg
ICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBnX3Rl
c3RfYWRkX2Z1bmMoIi93ZWJraXQvd2luZG93L3Njcm9sbGJhcl9wb2xpY3kiLCB0ZXN0X3dlYmtp
dF93aW5kb3dfc2Nyb2xsYmFyX3BvbGljeSk7CisgICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7Cit9
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL0xvYWRUcmFj
a2luZ1Rlc3QuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9Mb2FkVHJh
Y2tpbmdUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjM0MjA0
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9M
b2FkVHJhY2tpbmdUZXN0LmNwcApAQCAtMCwwICsxLDIwNyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTG9hZFRy
YWNraW5nVGVzdC5oIgorCisjaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+CisKK3N0YXRpYyB2
b2lkIGxvYWRDaGFuZ2VkQ2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0TG9h
ZEV2ZW50IGxvYWRFdmVudCwgTG9hZFRyYWNraW5nVGVzdCogdGVzdCkKK3sKKyAgICBzd2l0Y2gg
KGxvYWRFdmVudCkgeworICAgIGNhc2UgV0VCS0lUX0xPQURfU1RBUlRFRDoKKyAgICAgICAgZ19h
c3NlcnQod2Via2l0X3dlYl92aWV3X2lzX2xvYWRpbmcod2ViVmlldykpOworICAgICAgICBnX2Fz
c2VydF9jbXBzdHIodGVzdC0+bV9hY3RpdmVVUkkuZGF0YSgpLCA9PSwgd2Via2l0X3dlYl92aWV3
X2dldF91cmkod2ViVmlldykpOworICAgICAgICB0ZXN0LT5wcm92aXNpb25hbExvYWRTdGFydGVk
KCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0xPQURfUkVESVJFQ1RFRDoKKyAg
ICAgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2lzX2xvYWRpbmcod2ViVmlldykpOworICAg
ICAgICB0ZXN0LT5tX2FjdGl2ZVVSSSA9IHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKHdlYlZpZXcp
OworICAgICAgICBpZiAoIXRlc3QtPm1fcmVkaXJlY3RVUkkuaXNOdWxsKCkpCisgICAgICAgICAg
ICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9yZWRpcmVjdFVSSS5kYXRhKCksID09LCB0ZXN0LT5t
X2FjdGl2ZVVSSS5kYXRhKCkpOworICAgICAgICB0ZXN0LT5wcm92aXNpb25hbExvYWRSZWNlaXZl
ZFNlcnZlclJlZGlyZWN0KCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0xPQURf
Q09NTUlUVEVEOiB7CisgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19pc19sb2FkaW5n
KHdlYlZpZXcpKTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPm1fYWN0aXZlVVJJLmRh
dGEoKSwgPT0sIHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKHdlYlZpZXcpKTsKKworICAgICAgICAv
LyBDaGVjayB0aGF0IG9uIGNvbW1pdHRlZCB3ZSBhbHdheXMgaGF2ZSBhIG1haW4gcmVzb3VyY2Ug
d2l0aCBhIHJlc3BvbnNlLgorICAgICAgICBXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UgPSB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2Uod2ViVmlldyk7CisgICAgICAgIGdfYXNz
ZXJ0KHJlc291cmNlKTsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X3dlYl9yZXNvdXJjZV9nZXRf
cmVzcG9uc2UocmVzb3VyY2UpKTsKKworICAgICAgICB0ZXN0LT5sb2FkQ29tbWl0dGVkKCk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFdFQktJVF9MT0FEX0ZJTklTSEVEOgorICAg
ICAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2lzX2xvYWRpbmcod2ViVmlldykpOworICAg
ICAgICBpZiAoIXRlc3QtPm1fbG9hZEZhaWxlZCkKKyAgICAgICAgICAgIGdfYXNzZXJ0X2NtcHN0
cih0ZXN0LT5tX2FjdGl2ZVVSSS5kYXRhKCksID09LCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSh3
ZWJWaWV3KSk7CisgICAgICAgIHRlc3QtPmxvYWRGaW5pc2hlZCgpOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgIH0KK30K
Kworc3RhdGljIHZvaWQgbG9hZEZhaWxlZENhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcs
IFdlYktpdExvYWRFdmVudCBsb2FkRXZlbnQsIGNvbnN0IGNoYXIqIGZhaWxpbmdVUkksIEdFcnJv
ciogZXJyb3IsIExvYWRUcmFja2luZ1Rlc3QqIHRlc3QpCit7CisgICAgdGVzdC0+bV9sb2FkRmFp
bGVkID0gdHJ1ZTsKKyAgICB0ZXN0LT5tX2Vycm9yLnNldChnX2Vycm9yX2NvcHkoZXJyb3IpKTsK
KworICAgIHN3aXRjaCAobG9hZEV2ZW50KSB7CisgICAgY2FzZSBXRUJLSVRfTE9BRF9TVEFSVEVE
OgorICAgICAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2lzX2xvYWRpbmcod2ViVmlldykp
OworICAgICAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9hY3RpdmVVUkkuZGF0YSgpLCA9PSwg
d2Via2l0X3dlYl92aWV3X2dldF91cmkod2ViVmlldykpOworICAgICAgICBnX2Fzc2VydChlcnJv
cik7CisgICAgICAgIHRlc3QtPnByb3Zpc2lvbmFsTG9hZEZhaWxlZChmYWlsaW5nVVJJLCBlcnJv
cik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0xPQURfQ09NTUlUVEVEOgorICAg
ICAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2lzX2xvYWRpbmcod2ViVmlldykpOworICAg
ICAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9hY3RpdmVVUkkuZGF0YSgpLCA9PSwgd2Via2l0
X3dlYl92aWV3X2dldF91cmkod2ViVmlldykpOworICAgICAgICBnX2Fzc2VydChlcnJvcik7Cisg
ICAgICAgIHRlc3QtPmxvYWRGYWlsZWQoZmFpbGluZ1VSSSwgZXJyb3IpOworICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgIH0K
K30KKworc3RhdGljIHZvaWQgZXN0aW1hdGVkUHJvZ3Jlc3NDaGFuZ2VkQ2FsbGJhY2soR09iamVj
dCosIEdQYXJhbVNwZWMqLCBMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0KQoreworICAgIHRlc3QtPmVz
dGltYXRlZFByb2dyZXNzQ2hhbmdlZCgpOworfQorCitMb2FkVHJhY2tpbmdUZXN0OjpMb2FkVHJh
Y2tpbmdUZXN0KCkKKyAgICA6IG1fcnVuTG9hZFVudGlsQ29tcGxldGlvbihmYWxzZSkKKyAgICAs
IG1fbG9hZEZhaWxlZChmYWxzZSkKK3sKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywg
ImxvYWQtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sobG9hZENoYW5nZWRDYWxsYmFjayksIHRoaXMpOwor
ICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAibG9hZC1mYWlsZWQiLCBHX0NBTExCQUNL
KGxvYWRGYWlsZWRDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJW
aWV3LCAibm90aWZ5Ojplc3RpbWF0ZWQtbG9hZC1wcm9ncmVzcyIsIEdfQ0FMTEJBQ0soZXN0aW1h
dGVkUHJvZ3Jlc3NDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKKworICAgIGdfYXNzZXJ0KCF3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X3VyaShtX3dlYlZpZXcpKTsKK30KKworTG9hZFRyYWNraW5nVGVzdDo6
fkxvYWRUcmFja2luZ1Rlc3QoKQoreworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3Rf
bWF0Y2hlZChtX3dlYlZpZXcsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMp
OworfQorCit2b2lkIExvYWRUcmFja2luZ1Rlc3Q6OndhaXRVbnRpbExvYWRGaW5pc2hlZCgpCit7
CisgICAgbV9lc3RpbWF0ZWRQcm9ncmVzcyA9IDA7CisgICAgbV9ydW5Mb2FkVW50aWxDb21wbGV0
aW9uID0gdHJ1ZTsKKyAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Cit9CisKK3ZvaWQg
TG9hZFRyYWNraW5nVGVzdDo6cHJvdmlzaW9uYWxMb2FkU3RhcnRlZCgpCit7CisgICAgbV9sb2Fk
RXZlbnRzLmFwcGVuZChQcm92aXNpb25hbExvYWRTdGFydGVkKTsKK30KKwordm9pZCBMb2FkVHJh
Y2tpbmdUZXN0Ojpwcm92aXNpb25hbExvYWRSZWNlaXZlZFNlcnZlclJlZGlyZWN0KCkKK3sKKyAg
ICBtX2xvYWRFdmVudHMuYXBwZW5kKFByb3Zpc2lvbmFsTG9hZFJlY2VpdmVkU2VydmVyUmVkaXJl
Y3QpOworfQorCit2b2lkIExvYWRUcmFja2luZ1Rlc3Q6OnByb3Zpc2lvbmFsTG9hZEZhaWxlZChj
b25zdCBnY2hhciogZmFpbGluZ1VSSSwgR0Vycm9yKiBlcnJvcikKK3sKKyAgICBtX2xvYWRFdmVu
dHMuYXBwZW5kKFByb3Zpc2lvbmFsTG9hZEZhaWxlZCk7Cit9CisKK3ZvaWQgTG9hZFRyYWNraW5n
VGVzdDo6bG9hZENvbW1pdHRlZCgpCit7CisgICAgbV9sb2FkRXZlbnRzLmFwcGVuZChMb2FkQ29t
bWl0dGVkKTsKK30KKwordm9pZCBMb2FkVHJhY2tpbmdUZXN0Ojpsb2FkRmluaXNoZWQoKQorewor
ICAgIG1fbG9hZEV2ZW50cy5hcHBlbmQoTG9hZEZpbmlzaGVkKTsKKyAgICBpZiAobV9ydW5Mb2Fk
VW50aWxDb21wbGV0aW9uKQorICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3ApOwor
fQorCit2b2lkIExvYWRUcmFja2luZ1Rlc3Q6OmxvYWRGYWlsZWQoY29uc3QgZ2NoYXIqIGZhaWxp
bmdVUkksIEdFcnJvciogZXJyb3IpCit7CisgICAgbV9sb2FkRXZlbnRzLmFwcGVuZChMb2FkRmFp
bGVkKTsKK30KKwordm9pZCBMb2FkVHJhY2tpbmdUZXN0Ojplc3RpbWF0ZWRQcm9ncmVzc0NoYW5n
ZWQoKQoreworICAgIGRvdWJsZSBwcm9ncmVzcyA9IHdlYmtpdF93ZWJfdmlld19nZXRfZXN0aW1h
dGVkX2xvYWRfcHJvZ3Jlc3MobV93ZWJWaWV3KTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdChtX2Vz
dGltYXRlZFByb2dyZXNzLCA8LCBwcm9ncmVzcyk7CisgICAgbV9lc3RpbWF0ZWRQcm9ncmVzcyA9
IHByb2dyZXNzOworfQorCit2b2lkIExvYWRUcmFja2luZ1Rlc3Q6OmxvYWRVUkkoY29uc3QgY2hh
ciogdXJpKQoreworICAgIG1fbG9hZEV2ZW50cy5jbGVhcigpOworICAgIG1fZXN0aW1hdGVkUHJv
Z3Jlc3MgPSAwOworICAgIG1fZXJyb3IuY2xlYXIoKTsKKyAgICBXZWJWaWV3VGVzdDo6bG9hZFVS
SSh1cmkpOworfQorCit2b2lkIExvYWRUcmFja2luZ1Rlc3Q6OmxvYWRIdG1sKGNvbnN0IGNoYXIq
IGh0bWwsIGNvbnN0IGNoYXIqIGJhc2VVUkkpCit7CisgICAgbV9sb2FkRXZlbnRzLmNsZWFyKCk7
CisgICAgbV9lc3RpbWF0ZWRQcm9ncmVzcyA9IDA7CisgICAgbV9lcnJvci5jbGVhcigpOworICAg
IFdlYlZpZXdUZXN0Ojpsb2FkSHRtbChodG1sLCBiYXNlVVJJKTsKK30KKwordm9pZCBMb2FkVHJh
Y2tpbmdUZXN0Ojpsb2FkUGxhaW5UZXh0KGNvbnN0IGNoYXIqIHBsYWluVGV4dCkKK3sKKyAgICBt
X2xvYWRFdmVudHMuY2xlYXIoKTsKKyAgICBtX2VzdGltYXRlZFByb2dyZXNzID0gMDsKKyAgICBt
X2Vycm9yLmNsZWFyKCk7CisgICAgV2ViVmlld1Rlc3Q6OmxvYWRQbGFpblRleHQocGxhaW5UZXh0
KTsKK30KKwordm9pZCBMb2FkVHJhY2tpbmdUZXN0Ojpsb2FkUmVxdWVzdChXZWJLaXRVUklSZXF1
ZXN0KiByZXF1ZXN0KQoreworICAgIG1fbG9hZEV2ZW50cy5jbGVhcigpOworICAgIG1fZXN0aW1h
dGVkUHJvZ3Jlc3MgPSAwOworICAgIG1fZXJyb3IuY2xlYXIoKTsKKyAgICBXZWJWaWV3VGVzdDo6
bG9hZFJlcXVlc3QocmVxdWVzdCk7Cit9CisKK3ZvaWQgTG9hZFRyYWNraW5nVGVzdDo6cmVsb2Fk
KCkKK3sKKyAgICBtX2xvYWRFdmVudHMuY2xlYXIoKTsKKyAgICBtX2VzdGltYXRlZFByb2dyZXNz
ID0gMDsKKyAgICBtX2Vycm9yLmNsZWFyKCk7CisgICAgd2Via2l0X3dlYl92aWV3X3JlbG9hZCht
X3dlYlZpZXcpOworfQorCit2b2lkIExvYWRUcmFja2luZ1Rlc3Q6OmdvQmFjaygpCit7CisgICAg
bV9sb2FkRXZlbnRzLmNsZWFyKCk7CisgICAgbV9lc3RpbWF0ZWRQcm9ncmVzcyA9IDA7CisgICAg
bV9lcnJvci5jbGVhcigpOworICAgIFdlYlZpZXdUZXN0Ojpnb0JhY2soKTsKK30KKwordm9pZCBM
b2FkVHJhY2tpbmdUZXN0Ojpnb0ZvcndhcmQoKQoreworICAgIG1fbG9hZEV2ZW50cy5jbGVhcigp
OworICAgIG1fZXN0aW1hdGVkUHJvZ3Jlc3MgPSAwOworICAgIG1fZXJyb3IuY2xlYXIoKTsKKyAg
ICBXZWJWaWV3VGVzdDo6Z29Gb3J3YXJkKCk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL2d0ay9XZWJLaXQyR3RrL0xvYWRUcmFja2luZ1Rlc3QuaCBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvZ3RrL1dlYktpdDJHdGsvTG9hZFRyYWNraW5nVGVzdC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmEzY2Y3ODQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL0xvYWRUcmFja2luZ1Rlc3QuaApAQCAtMCwwICsxLDY4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgTG9hZFRy
YWNraW5nVGVzdF9oCisjZGVmaW5lIExvYWRUcmFja2luZ1Rlc3RfaAorCisjaW5jbHVkZSAiVGVz
dE1haW4uaCIKKyNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworY2xhc3MgTG9hZFRyYWNraW5nVGVzdCA6IHB1YmxpYyBXZWJWaWV3VGVzdCB7CitwdWJs
aWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShMb2FkVHJhY2tpbmdUZXN0KTsKKyAgICBM
b2FkVHJhY2tpbmdUZXN0KCk7CisgICAgdmlydHVhbCB+TG9hZFRyYWNraW5nVGVzdCgpOworICAg
IHZvaWQgd2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcHJvdmlz
aW9uYWxMb2FkU3RhcnRlZCgpOworICAgIHZpcnR1YWwgdm9pZCBwcm92aXNpb25hbExvYWRSZWNl
aXZlZFNlcnZlclJlZGlyZWN0KCk7CisgICAgdmlydHVhbCB2b2lkIHByb3Zpc2lvbmFsTG9hZEZh
aWxlZChjb25zdCBnY2hhciogZmFpbGluZ1VSSSwgR0Vycm9yKik7CisgICAgdmlydHVhbCB2b2lk
IGxvYWRDb21taXR0ZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZEZpbmlzaGVkKCk7CisgICAg
dmlydHVhbCB2b2lkIGxvYWRGYWlsZWQoY29uc3QgY2hhciogZmFpbGluZ1VSSSwgR0Vycm9yKik7
CisgICAgdmlydHVhbCB2b2lkIGVzdGltYXRlZFByb2dyZXNzQ2hhbmdlZCgpOworCisgICAgdm9p
ZCBsb2FkVVJJKGNvbnN0IGNoYXIqIHVyaSk7CisgICAgdm9pZCBsb2FkSHRtbChjb25zdCBjaGFy
KiBodG1sLCBjb25zdCBjaGFyKiBiYXNlVVJJKTsKKyAgICB2b2lkIGxvYWRQbGFpblRleHQoY29u
c3QgY2hhciogcGxhaW5UZXh0KTsKKyAgICB2b2lkIGxvYWRSZXF1ZXN0KFdlYktpdFVSSVJlcXVl
c3QqKTsKKyAgICB2b2lkIHJlbG9hZCgpOworICAgIHZvaWQgZ29CYWNrKCk7CisgICAgdm9pZCBn
b0ZvcndhcmQoKTsKKworICAgIHZvaWQgc2V0UmVkaXJlY3RVUkkoY29uc3QgY2hhciogdXJpKSB7
IG1fcmVkaXJlY3RVUkkgPSB1cmk7IH0KKworICAgIGVudW0gTG9hZEV2ZW50cyB7CisgICAgICAg
IFByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQsCisgICAgICAgIFByb3Zpc2lvbmFsTG9hZFJlY2VpdmVk
U2VydmVyUmVkaXJlY3QsCisgICAgICAgIFByb3Zpc2lvbmFsTG9hZEZhaWxlZCwKKyAgICAgICAg
TG9hZENvbW1pdHRlZCwKKyAgICAgICAgTG9hZEZpbmlzaGVkLAorICAgICAgICBMb2FkRmFpbGVk
CisgICAgfTsKKyAgICBib29sIG1fcnVuTG9hZFVudGlsQ29tcGxldGlvbjsKKyAgICBib29sIG1f
bG9hZEZhaWxlZDsKKyAgICBHT3duUHRyPEdFcnJvcj4gbV9lcnJvcjsKKyAgICBWZWN0b3I8TG9h
ZEV2ZW50cz4gbV9sb2FkRXZlbnRzOworICAgIGZsb2F0IG1fZXN0aW1hdGVkUHJvZ3Jlc3M7Cisg
ICAgQ1N0cmluZyBtX3JlZGlyZWN0VVJJOworfTsKKworI2VuZGlmIC8vIExvYWRUcmFja2luZ1Rl
c3RfaApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9UZXN0
TWFpbi5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1Rlc3RNYWluLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjFmZmQ3Ci0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9UZXN0TWFpbi5jcHAK
QEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdE1haW4uaCIKKworI2luY2x1ZGUgPGds
aWIvZ3N0ZGlvLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Vi
a2l0Mi5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKwordm9pZCBiZWZvcmVB
bGwoKTsKK3ZvaWQgYWZ0ZXJBbGwoKTsKKworc3RhdGljIHZvaWQgcmVnaXN0ZXJHUmVzb3VyY2Uo
dm9pZCkKK3sKKyAgICBHT3duUHRyPGNoYXI+IHJlc291cmNlc1BhdGgoZ19idWlsZF9maWxlbmFt
ZShXRUJLSVRfRVhFQ19QQVRILCAiVGVzdFdlYktpdEFQSSIsICJXZWJLaXQyR3RrIiwgInJlc291
cmNlcyIsICJ3ZWJraXQyZ3RrLXRlc3RzLXJlc291cmNlcy5ncmVzb3VyY2UiLCBOVUxMKSk7Cisg
ICAgR1Jlc291cmNlKiByZXNvdXJjZSA9IGdfcmVzb3VyY2VfbG9hZChyZXNvdXJjZXNQYXRoLmdl
dCgpLCAwKTsKKyAgICBnX2Fzc2VydChyZXNvdXJjZSk7CisKKyAgICBnX3Jlc291cmNlc19yZWdp
c3RlcihyZXNvdXJjZSk7CisgICAgZ19yZXNvdXJjZV91bnJlZihyZXNvdXJjZSk7Cit9CisKK3N0
YXRpYyB2b2lkIHJlbW92ZU5vbkVtcHR5RGlyZWN0b3J5KGNvbnN0IGNoYXIqIGRpcmVjdG9yeVBh
dGgpCit7CisgICAgR0RpciogZGlyZWN0b3J5ID0gZ19kaXJfb3BlbihkaXJlY3RvcnlQYXRoLCAw
LCAwKTsKKyAgICBnX2Fzc2VydChkaXJlY3RvcnkpOworICAgIGNvbnN0IGNoYXIqIGZpbGVOYW1l
OworICAgIHdoaWxlICgoZmlsZU5hbWUgPSBnX2Rpcl9yZWFkX25hbWUoZGlyZWN0b3J5KSkpIHsK
KyAgICAgICAgR093blB0cjxjaGFyPiBmaWxlUGF0aChnX2J1aWxkX2ZpbGVuYW1lKGRpcmVjdG9y
eVBhdGgsIGZpbGVOYW1lLCBOVUxMKSk7CisgICAgICAgIGdfdW5saW5rKGZpbGVQYXRoLmdldCgp
KTsKKyAgICB9CisgICAgZ19kaXJfY2xvc2UoZGlyZWN0b3J5KTsKKyAgICBnX3JtZGlyKGRpcmVj
dG9yeVBhdGgpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAg
Z191bnNldGVudigiREJVU19TRVNTSU9OX0JVU19BRERSRVNTIik7CisgICAgZ3RrX3Rlc3RfaW5p
dCgmYXJnYywgJmFyZ3YsIDApOworICAgIGdfc2V0ZW52KCJXRUJLSVRfRVhFQ19QQVRIIiwgV0VC
S0lUX0VYRUNfUEFUSCwgRkFMU0UpOworICAgIGdfc2V0ZW52KCJXRUJLSVRfSU5KRUNURURfQlVO
RExFX1BBVEgiLCBXRUJLSVRfSU5KRUNURURfQlVORExFX1BBVEgsIEZBTFNFKTsKKyAgICBnX3Nl
dGVudigiTENfQUxMIiwgIkMiLCBUUlVFKTsKKyAgICBnX3NldGVudigiR0lPX1VTRV9WRlMiLCAi
bG9jYWwiLCBUUlVFKTsKKyAgICBnX3NldGVudigiR1NFVFRJTkdTX0JBQ0tFTkQiLCAibWVtb3J5
IiwgVFJVRSk7CisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8i
KTsKKworICAgIHJlZ2lzdGVyR1Jlc291cmNlKCk7CisKKyAgICBHT3duUHRyPGNoYXI+IGRpc2tD
YWNoZVRlbXBEaXJlY3RvcnkoZ19kaXJfbWFrZV90bXAoIldlYktpdDJUZXN0c0Rpc2tDYWNoZS1Y
WFhYWFgiLCAwKSk7CisgICAgZ19hc3NlcnQoZGlza0NhY2hlVGVtcERpcmVjdG9yeS5nZXQoKSk7
CisgICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF9kaXNrX2NhY2hlX2RpcmVjdG9yeSh3ZWJraXRf
d2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSwgZGlza0NhY2hlVGVtcERpcmVjdG9yeS5nZXQoKSk7
CisKKyAgICBiZWZvcmVBbGwoKTsKKyAgICBpbnQgcmV0dXJuVmFsdWUgPSBnX3Rlc3RfcnVuKCk7
CisgICAgYWZ0ZXJBbGwoKTsKKworICAgIHJlbW92ZU5vbkVtcHR5RGlyZWN0b3J5KGRpc2tDYWNo
ZVRlbXBEaXJlY3RvcnkuZ2V0KCkpOworCisgICAgcmV0dXJuIHJldHVyblZhbHVlOworfQpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9UZXN0TWFpbi5oIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9UZXN0TWFpbi5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMTFkNDAKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1Rlc3RNYWluLmgKQEAgLTAsMCArMSwxMjQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBUZXN0TWFp
bl9oCisjZGVmaW5lIFRlc3RNYWluX2gKKworI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8
Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9n
b2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNkZWZp
bmUgTUFLRV9HTElCX1RFU1RfRklYVFVSRShDbGFzc05hbWUpIFwKKyAgICBzdGF0aWMgdm9pZCBz
ZXRVcChDbGFzc05hbWUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkgXAorICAgIHsgXAor
ICAgICAgICBuZXcgKGZpeHR1cmUpIENsYXNzTmFtZTsgXAorICAgIH0gXAorICAgIHN0YXRpYyB2
b2lkIHRlYXJEb3duKENsYXNzTmFtZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKSBcCisg
ICAgeyBcCisgICAgICAgIGZpeHR1cmUtPn5DbGFzc05hbWUoKTsgXAorICAgIH0gXAorICAgIHN0
YXRpYyB2b2lkIGFkZChjb25zdCBjaGFyKiBzdWl0ZU5hbWUsIGNvbnN0IGNoYXIqIHRlc3ROYW1l
LCB2b2lkICgqdGVzdEZ1bmMpKENsYXNzTmFtZSosIGNvbnN0IHZvaWQqKSkgXAorICAgIHsgXAor
ICAgICAgICBHT3duUHRyPGdjaGFyPiB0ZXN0UGF0aChnX3N0cmR1cF9wcmludGYoIi93ZWJraXQy
LyVzLyVzIiwgc3VpdGVOYW1lLCB0ZXN0TmFtZSkpOyBcCisgICAgICAgIGdfdGVzdF9hZGQodGVz
dFBhdGguZ2V0KCksIENsYXNzTmFtZSwgMCwgQ2xhc3NOYW1lOjpzZXRVcCwgdGVzdEZ1bmMsIENs
YXNzTmFtZTo6dGVhckRvd24pOyBcCisgICAgfQorCisjZGVmaW5lIEFTU0VSVF9DTVBfQ1NUUklO
RyhzMSwgY21wLCBzMikgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgQ1N0cmluZyBfX3Mx
ID0gKHMxKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgIENTdHJpbmcgX19zMiA9IChzMik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoZ19zdHJjbXAwKF9fczEuZGF0YSgpLCBfX3My
LmRhdGEoKSkgY21wIDApIDsgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZWxzZSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgICAgICBnX2Fzc2VydGlvbl9tZXNzYWdlX2NtcHN0cihHX0xPR19ET01BSU4sIF9fRklM
RV9fLCBfX0xJTkVfXywgXAorICAgICAgICAgICAgICAgIEdfU1RSRlVOQywgI3MxICIgIiAjY21w
ICIgIiAjczIsIF9fczEuZGF0YSgpLCAjY21wLCBfX3MyLmRhdGEoKSk7IFwKKyAgICB9IHdoaWxl
ICgwKQorCisKK2NsYXNzIFRlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRV
UkUoVGVzdCk7CisKKyAgICB+VGVzdCgpCisgICAgeworICAgICAgICBpZiAobV93YXRjaGVkT2Jq
ZWN0cy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgZ19wcmludCgi
TGVha2VkIG9iamVjdHM6Iik7CisgICAgICAgIEhhc2hTZXQ8R09iamVjdCo+Ojpjb25zdF9pdGVy
YXRvciBlbmQgPSBtX3dhdGNoZWRPYmplY3RzLmVuZCgpOworICAgICAgICBmb3IgKEhhc2hTZXQ8
R09iamVjdCo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fd2F0Y2hlZE9iamVjdHMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgZ19wcmludCgiICVzKCVwKSIsIGdfdHlwZV9u
YW1lX2Zyb21faW5zdGFuY2UocmVpbnRlcnByZXRfY2FzdDxHVHlwZUluc3RhbmNlKj4oKml0KSks
ICppdCk7CisgICAgICAgIGdfcHJpbnQoIlxuIik7CisKKyAgICAgICAgZ19hc3NlcnQobV93YXRj
aGVkT2JqZWN0cy5pc0VtcHR5KCkpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIG9iamVjdEZp
bmFsaXplZChUZXN0KiB0ZXN0LCBHT2JqZWN0KiBmaW5hbGl6ZWRPYmplY3QpCisgICAgeworICAg
ICAgICB0ZXN0LT5tX3dhdGNoZWRPYmplY3RzLnJlbW92ZShmaW5hbGl6ZWRPYmplY3QpOworICAg
IH0KKworICAgIHZvaWQgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHT2Jq
ZWN0KiBvYmplY3QpCisgICAgeworICAgICAgICBtX3dhdGNoZWRPYmplY3RzLmFkZChvYmplY3Qp
OworICAgICAgICBnX29iamVjdF93ZWFrX3JlZihvYmplY3QsIHJlaW50ZXJwcmV0X2Nhc3Q8R1dl
YWtOb3RpZnk+KG9iamVjdEZpbmFsaXplZCksIHRoaXMpOworICAgIH0KKworICAgIHN0YXRpYyBD
U3RyaW5nIGdldFdlYktpdDFUZXN0UmVzb3VjZXNEaXIoKQorICAgIHsKKyAgICAgICAgR093blB0
cjxjaGFyPiByZXNvdXJjZXNEaXIoZ19idWlsZF9maWxlbmFtZShXRUJLSVRfU1JDX0RJUiwgIlRv
b2xzIiwgIlRlc3RXZWJLaXRBUEkiLCAiVGVzdHMiLCAiV2ViS2l0R3RrIiwgInJlc291cmNlcyIs
IE5VTEwpKTsKKyAgICAgICAgcmV0dXJuIHJlc291cmNlc0Rpci5nZXQoKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgQ1N0cmluZyBnZXRSZXNvdXJjZXNEaXIoKQorICAgIHsKKyAgICAgICAgR093blB0
cjxjaGFyPiByZXNvdXJjZXNEaXIoZ19idWlsZF9maWxlbmFtZShXRUJLSVRfU1JDX0RJUiwgIlRv
b2xzIiwgIlRlc3RXZWJLaXRBUEkiLCAiVGVzdHMiLCAiV2ViS2l0Mkd0ayIsICJyZXNvdXJjZXMi
LCBOVUxMKSk7CisgICAgICAgIHJldHVybiByZXNvdXJjZXNEaXIuZ2V0KCk7CisgICAgfQorCisg
ICAgdm9pZCBhZGRMb2dGYXRhbEZsYWcodW5zaWduZWQgZmxhZykKKyAgICB7CisgICAgICAgIHVu
c2lnbmVkIGZhdGFsTWFzayA9IGdfbG9nX3NldF9hbHdheXNfZmF0YWwoc3RhdGljX2Nhc3Q8R0xv
Z0xldmVsRmxhZ3M+KEdfTE9HX0ZBVEFMX01BU0spKTsKKyAgICAgICAgZmF0YWxNYXNrIHw9IGZs
YWc7CisgICAgICAgIGdfbG9nX3NldF9hbHdheXNfZmF0YWwoc3RhdGljX2Nhc3Q8R0xvZ0xldmVs
RmxhZ3M+KGZhdGFsTWFzaykpOworICAgIH0KKworICAgIHZvaWQgcmVtb3ZlTG9nRmF0YWxGbGFn
KHVuc2lnbmVkIGZsYWcpCisgICAgeworICAgICAgICB1bnNpZ25lZCBmYXRhbE1hc2sgPSBnX2xv
Z19zZXRfYWx3YXlzX2ZhdGFsKHN0YXRpY19jYXN0PEdMb2dMZXZlbEZsYWdzPihHX0xPR19GQVRB
TF9NQVNLKSk7CisgICAgICAgIGZhdGFsTWFzayAmPSB+ZmxhZzsKKyAgICAgICAgZ19sb2dfc2V0
X2Fsd2F5c19mYXRhbChzdGF0aWNfY2FzdDxHTG9nTGV2ZWxGbGFncz4oZmF0YWxNYXNrKSk7Cisg
ICAgfQorCisgICAgc3RhdGljIGJvb2wgY2Fpcm9TdXJmYWNlc0VxdWFsKGNhaXJvX3N1cmZhY2Vf
dCogczEsIGNhaXJvX3N1cmZhY2VfdCogczIpCisgICAgeworICAgICAgICByZXR1cm4gKGNhaXJv
X2ltYWdlX3N1cmZhY2VfZ2V0X2Zvcm1hdChzMSkgPT0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRf
Zm9ybWF0KHMyKQorICAgICAgICAgICAgJiYgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgo
czEpID09IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHMyKQorICAgICAgICAgICAgJiYg
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHMxKSA9PSBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF9oZWlnaHQoczIpCisgICAgICAgICAgICAmJiBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9z
dHJpZGUoczEpID09IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShzMikKKyAgICAgICAg
ICAgICYmICFtZW1jbXAoY29uc3RfY2FzdDxjb25zdCB2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzMSkpKSwKKyAgICAgICAgICAgICAg
ICBjb25zdF9jYXN0PGNvbnN0IHZvaWQqPihyZWludGVycHJldF9jYXN0PHZvaWQqPihjYWlyb19p
bWFnZV9zdXJmYWNlX2dldF9kYXRhKHMyKSkpLAorICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdl
X3N1cmZhY2VfZ2V0X2hlaWdodChzMSkqY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKHMx
KSkpOworICAgIH0KKworICAgIEhhc2hTZXQ8R09iamVjdCo+IG1fd2F0Y2hlZE9iamVjdHM7Cit9
OworCisjZW5kaWYgLy8gVGVzdE1haW5faApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9ndGsvV2ViS2l0Mkd0ay9XZWJLaXRUZXN0QnVzLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
Z3RrL1dlYktpdDJHdGsvV2ViS2l0VGVzdEJ1cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uOGMyZDNmNgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvZ3RrL1dlYktpdDJHdGsvV2ViS2l0VGVzdEJ1cy5jcHAKQEAgLTAsMCArMSwxMDYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldlYktpdFRlc3RCdXMuaCIKKworI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25Q
dHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworV2ViS2l0VGVzdEJ1czo6
V2ViS2l0VGVzdEJ1cygpCisgICAgOiBtX3BpZCgtMSkKK3sKK30KKworYm9vbCBXZWJLaXRUZXN0
QnVzOjpydW4oKQoreworICAgIC8vIEZJWE1FOiBVc2UgR1Rlc3REQnVzIHdoZW4gd2UgYnVtcCBn
bGliIHRvIDIuMzQuCisgICAgR093blB0cjxjaGFyPiBkYnVzTGF1bmNoKGdfZmluZF9wcm9ncmFt
X2luX3BhdGgoImRidXMtbGF1bmNoIikpOworICAgIGlmICghZGJ1c0xhdW5jaCkgeworICAgICAg
ICBnX3dhcm5pbmcoIkVycm9yIHN0YXJ0aW5nIERCVVMgZGFlbW9uOiBkYnVzLWxhdW5jaCBub3Qg
Zm91bmQgaW4gcGF0aCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgR093
blB0cjxjaGFyPiBvdXRwdXQ7CisgICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAgIGlmICgh
Z19zcGF3bl9jb21tYW5kX2xpbmVfc3luYyhkYnVzTGF1bmNoLmdldCgpLCAmb3V0cHV0Lm91dFB0
cigpLCAwLCAwLCAmZXJyb3Iub3V0UHRyKCkpKSB7CisgICAgICAgIGdfd2FybmluZygiRXJyb3Ig
c3RhcnRpbmcgREJVUyBkYWVtb246ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgU3RyaW5nIG91dHB1dFN0cmluZyA9IFN0cmluZzo6ZnJv
bVVURjgob3V0cHV0LmdldCgpKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBsaW5lczsKKyAgICBvdXRw
dXRTdHJpbmcuc3BsaXQoVUNoYXIoJ1xuJyksIC8qIGFsbG93RW1wdHlFbnRyaWVzICovIGZhbHNl
LCBsaW5lcyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaW5lcy5zaXplKCk7ICsraSkg
eworICAgICAgICBjaGFyKioga2V5VmFsdWUgPSBnX3N0cnNwbGl0KGxpbmVzW2ldLnV0ZjgoKS5k
YXRhKCksICI9IiwgMik7CisgICAgICAgIGdfYXNzZXJ0X2NtcHVpbnQoZ19zdHJ2X2xlbmd0aChr
ZXlWYWx1ZSksID09LCAyKTsKKyAgICAgICAgaWYgKCFnX3N0cmNtcDAoa2V5VmFsdWVbMF0sICJE
QlVTX1NFU1NJT05fQlVTX0FERFJFU1MiKSkgeworICAgICAgICAgICAgbV9hZGRyZXNzID0ga2V5
VmFsdWVbMV07CisgICAgICAgICAgICBnX3NldGVudigiREJVU19TRVNTSU9OX0JVU19BRERSRVNT
Iiwga2V5VmFsdWVbMV0sIFRSVUUpOworICAgICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAoa2V5
VmFsdWVbMF0sICJEQlVTX1NFU1NJT05fQlVTX1BJRCIpKQorICAgICAgICAgICAgbV9waWQgPSBn
X2FzY2lpX3N0cnRvbGwoa2V5VmFsdWVbMV0sIDAsIDEwKTsKKyAgICAgICAgZ19zdHJmcmVldihr
ZXlWYWx1ZSk7CisgICAgfQorCisgICAgcmV0dXJuIG1fcGlkID4gMDsKK30KKworV2ViS2l0VGVz
dEJ1czo6fldlYktpdFRlc3RCdXMoKQoreworICAgIGdfdW5zZXRlbnYoIkRCVVNfU0VTU0lPTl9C
VVNfQUREUkVTUyIpOworCisgICAgaWYgKG1fcGlkICE9IC0xKQorICAgICAgICBraWxsKG1fcGlk
LCBTSUdURVJNKTsKK30KKworR0RCdXNDb25uZWN0aW9uKiBXZWJLaXRUZXN0QnVzOjpnZXRPckNy
ZWF0ZUNvbm5lY3Rpb24oKQoreworICAgIGlmIChtX2Nvbm5lY3Rpb24pCisgICAgICAgIHJldHVy
biBtX2Nvbm5lY3Rpb24uZ2V0KCk7CisKKyAgICBnX2Fzc2VydCghbV9hZGRyZXNzLmlzTnVsbCgp
KTsKKyAgICBtX2Nvbm5lY3Rpb24gPSBhZG9wdEdSZWYoZ19kYnVzX2Nvbm5lY3Rpb25fbmV3X2Zv
cl9hZGRyZXNzX3N5bmMobV9hZGRyZXNzLmRhdGEoKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8R0RC
dXNDb25uZWN0aW9uRmxhZ3M+KEdfREJVU19DT05ORUNUSU9OX0ZMQUdTX0FVVEhFTlRJQ0FUSU9O
X0NMSUVOVCB8IEdfREJVU19DT05ORUNUSU9OX0ZMQUdTX01FU1NBR0VfQlVTX0NPTk5FQ1RJT04p
LAorICAgICAgICAwLCAwLCAwKSk7CisgICAgcmV0dXJuIG1fY29ubmVjdGlvbi5nZXQoKTsKK30K
Kworc3RhdGljIHZvaWQgb25OYW1lQXBwZWFyZWQoR0RCdXNDb25uZWN0aW9uKiwgY29uc3QgY2hh
ciosIGNvbnN0IGNoYXIqLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBnX21haW5fbG9vcF9x
dWl0KHN0YXRpY19jYXN0PEdNYWluTG9vcCo+KHVzZXJEYXRhKSk7Cit9CisKK0dEQnVzUHJveHkq
IFdlYktpdFRlc3RCdXM6OmNyZWF0ZVByb3h5KGNvbnN0IGNoYXIqIHNlcnZpY2VOYW1lLCBjb25z
dCBjaGFyKiBvYmplY3RQYXRoLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBHTWFpbkxvb3Aq
IG1haW5Mb29wKQoreworICAgIHVuc2lnbmVkIHdhdGNoZXJJRCA9IGdfYnVzX3dhdGNoX25hbWVf
b25fY29ubmVjdGlvbihnZXRPckNyZWF0ZUNvbm5lY3Rpb24oKSwgc2VydmljZU5hbWUsIEdfQlVT
X05BTUVfV0FUQ0hFUl9GTEFHU19OT05FLCBvbk5hbWVBcHBlYXJlZCwgMCwgbWFpbkxvb3AsIDAp
OworICAgIGdfbWFpbl9sb29wX3J1bihtYWluTG9vcCk7CisgICAgZ19idXNfdW53YXRjaF9uYW1l
KHdhdGNoZXJJRCk7CisKKyAgICBHREJ1c1Byb3h5KiBwcm94eSA9IGdfZGJ1c19wcm94eV9uZXdf
c3luYygKKyAgICAgICAgY29ubmVjdGlvbigpLAorICAgICAgICBHX0RCVVNfUFJPWFlfRkxBR1Nf
RE9fTk9UX0FVVE9fU1RBUlQsCisgICAgICAgIDAsIC8vIEdEQnVzSW50ZXJmYWNlSW5mbworICAg
ICAgICBzZXJ2aWNlTmFtZSwKKyAgICAgICAgb2JqZWN0UGF0aCwKKyAgICAgICAgaW50ZXJmYWNl
TmFtZSwKKyAgICAgICAgMCwgLy8gR0NhbmNlbGxhYmxlCisgICAgICAgIDApOworICAgIGdfYXNz
ZXJ0KHByb3h5KTsKKyAgICByZXR1cm4gcHJveHk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYktpdFRlc3RCdXMuaCBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViS2l0VGVzdEJ1cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmI5Zjg1NmIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYktpdFRlc3RCdXMuaApAQCAtMCwwICsxLDQ0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0VGVzdEJ1
c19oCisjZGVmaW5lIFdlYktpdFRlc3RCdXNfaAorCisjaW5jbHVkZSA8Z2lvL2dpby5oPgorI2lu
Y2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisKK2NsYXNzIFdlYktpdFRlc3RCdXMgeworcHVibGljOgorICAgIFdlYktpdFRlc3RCdXMo
KTsKKyAgICB2aXJ0dWFsIH5XZWJLaXRUZXN0QnVzKCk7CisKKyAgICBib29sIHJ1bigpOworICAg
IEdEQnVzUHJveHkqIGNyZWF0ZVByb3h5KGNvbnN0IGNoYXIqIHNlcnZpY2VOYW1lLCBjb25zdCBj
aGFyKiBvYmplY3RQYXRoLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBHTWFpbkxvb3AqKTsK
KyAgICBHREJ1c0Nvbm5lY3Rpb24qIGNvbm5lY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2Nvbm5l
Y3Rpb24uZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBHREJ1c0Nvbm5lY3Rpb24qIGdldE9yQ3Jl
YXRlQ29ubmVjdGlvbigpOworCisgICAgcGlkX3QgbV9waWQ7CisgICAgQ1N0cmluZyBtX2FkZHJl
c3M7CisgICAgR1JlZlB0cjxHREJ1c0Nvbm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKK307CisKKyNl
bmRpZiAvLyBXZWJLaXRUZXN0QnVzX2gKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
Z3RrL1dlYktpdDJHdGsvV2ViS2l0VGVzdFNlcnZlci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L2d0ay9XZWJLaXQyR3RrL1dlYktpdFRlc3RTZXJ2ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjBhYTg2YmMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYktpdFRlc3RTZXJ2ZXIuY3BwCkBAIC0wLDAgKzEsNjQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKKworI2luY2x1ZGUgIlRlc3RNYWlu
LmgiCisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorCitXZWJLaXRUZXN0U2VydmVy
OjpXZWJLaXRUZXN0U2VydmVyKFNlcnZlclR5cGUgdHlwZSkKK3sKKyAgICBHT3duUHRyPGNoYXI+
IHNzbENlcnRpZmljYXRlRmlsZTsKKyAgICBHT3duUHRyPGNoYXI+IHNzbEtleUZpbGU7CisgICAg
aWYgKHR5cGUgPT0gU2VydmVySFRUUFMpIHsKKyAgICAgICAgQ1N0cmluZyByZXNvdXJjZXNEaXIg
PSBUZXN0OjpnZXRSZXNvdXJjZXNEaXIoKTsKKyAgICAgICAgc3NsQ2VydGlmaWNhdGVGaWxlLnNl
dChnX2J1aWxkX2ZpbGVuYW1lKHJlc291cmNlc0Rpci5kYXRhKCksICJ0ZXN0LWNlcnQucGVtIiwg
TlVMTCkpOworICAgICAgICBzc2xLZXlGaWxlLnNldChnX2J1aWxkX2ZpbGVuYW1lKHJlc291cmNl
c0Rpci5kYXRhKCksICJ0ZXN0LWtleS5wZW0iLCBOVUxMKSk7CisgICAgfQorCisgICAgR1JlZlB0
cjxTb3VwQWRkcmVzcz4gYWRkcmVzcyA9IGFkb3B0R1JlZihzb3VwX2FkZHJlc3NfbmV3KCIxMjcu
MC4wLjEiLCBTT1VQX0FERFJFU1NfQU5ZX1BPUlQpKTsKKyAgICBzb3VwX2FkZHJlc3NfcmVzb2x2
ZV9zeW5jKGFkZHJlc3MuZ2V0KCksIDApOworCisgICAgbV9zb3VwU2VydmVyID0gYWRvcHRHUmVm
KHNvdXBfc2VydmVyX25ldyhTT1VQX1NFUlZFUl9JTlRFUkZBQ0UsIGFkZHJlc3MuZ2V0KCksCisg
ICAgICAgIFNPVVBfU0VSVkVSX1NTTF9DRVJUX0ZJTEUsIHNzbENlcnRpZmljYXRlRmlsZS5nZXQo
KSwKKyAgICAgICAgU09VUF9TRVJWRVJfU1NMX0tFWV9GSUxFLCBzc2xLZXlGaWxlLmdldCgpLCBu
dWxscHRyKSk7CisgICAgbV9iYXNlVVJJID0gdHlwZSA9PSBTZXJ2ZXJIVFRQUyA/IHNvdXBfdXJp
X25ldygiaHR0cHM6Ly8xMjcuMC4wLjEvIikgOiBzb3VwX3VyaV9uZXcoImh0dHA6Ly8xMjcuMC4w
LjEvIik7CisgICAgc291cF91cmlfc2V0X3BvcnQobV9iYXNlVVJJLCBzb3VwX3NlcnZlcl9nZXRf
cG9ydChtX3NvdXBTZXJ2ZXIuZ2V0KCkpKTsKK30KKworV2ViS2l0VGVzdFNlcnZlcjo6fldlYktp
dFRlc3RTZXJ2ZXIoKQoreworICAgIHNvdXBfdXJpX2ZyZWUobV9iYXNlVVJJKTsKK30KKwordm9p
ZCBXZWJLaXRUZXN0U2VydmVyOjpydW4oU291cFNlcnZlckNhbGxiYWNrIHNlcnZlckNhbGxiYWNr
KQoreworICAgIHNvdXBfc2VydmVyX3J1bl9hc3luYyhtX3NvdXBTZXJ2ZXIuZ2V0KCkpOworICAg
IHNvdXBfc2VydmVyX2FkZF9oYW5kbGVyKG1fc291cFNlcnZlci5nZXQoKSwgMCwgc2VydmVyQ2Fs
bGJhY2ssIDAsIDApOworfQorCitDU3RyaW5nIFdlYktpdFRlc3RTZXJ2ZXI6OmdldFVSSUZvclBh
dGgoY29uc3QgY2hhciogcGF0aCkKK3sKKyAgICBTb3VwVVJJKiB1cmkgPSBzb3VwX3VyaV9uZXdf
d2l0aF9iYXNlKG1fYmFzZVVSSSwgcGF0aCk7CisgICAgR093blB0cjxnY2hhcj4gdXJpU3RyaW5n
KHNvdXBfdXJpX3RvX3N0cmluZyh1cmksIEZBTFNFKSk7CisgICAgc291cF91cmlfZnJlZSh1cmkp
OworICAgIHJldHVybiB1cmlTdHJpbmcuZ2V0KCk7Cit9CisKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViS2l0VGVzdFNlcnZlci5oIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9XZWJLaXRUZXN0U2VydmVyLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTAyZjdmYQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViS2l0VGVzdFNlcnZlci5oCkBAIC0wLDAg
KzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBX
ZWJLaXRUZXN0U2VydmVyX2gKKyNkZWZpbmUgV2ViS2l0VGVzdFNlcnZlcl9oCisKKyNpbmNsdWRl
IDxsaWJzb3VwL3NvdXAuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdDIuaD4KKyNpbmNsdWRl
IDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
CitjbGFzcyBXZWJLaXRUZXN0U2VydmVyIHsKK3B1YmxpYzoKKworICAgIGVudW0gU2VydmVyVHlw
ZSB7CisgICAgICAgIFNlcnZlckhUVFAsCisgICAgICAgIFNlcnZlckhUVFBTCisgICAgfTsKKwor
ICAgIFdlYktpdFRlc3RTZXJ2ZXIoU2VydmVyVHlwZSA9IFNlcnZlckhUVFApOworICAgIHZpcnR1
YWwgfldlYktpdFRlc3RTZXJ2ZXIoKTsKKworICAgIFNvdXBVUkkqIGJhc2VVUkkoKSB7IHJldHVy
biBtX2Jhc2VVUkk7IH0KKworICAgIENTdHJpbmcgZ2V0VVJJRm9yUGF0aChjb25zdCBjaGFyKiBw
YXRoKTsKKyAgICB2b2lkIHJ1bihTb3VwU2VydmVyQ2FsbGJhY2spOworCitwcml2YXRlOgorICAg
IEdSZWZQdHI8U291cFNlcnZlcj4gbV9zb3VwU2VydmVyOworICAgIFNvdXBVUkkqIG1fYmFzZVVS
STsKK307CisKKyNlbmRpZiAvLyBXZWJLaXRUZXN0U2VydmVyX2gKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViUHJvY2Vzc1Rlc3RSdW5uZXIuY3BwIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9XZWJQcm9jZXNzVGVzdFJ1bm5lci5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEzY2Q5NgotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViUHJvY2Vzc1Rl
c3RSdW5uZXIuY3BwCkBAIC0wLDAgKzEsMTE1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzVGVz
dFJ1bm5lci5oIgorCisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorCitXZWJQcm9j
ZXNzVGVzdFJ1bm5lcjo6V2ViUHJvY2Vzc1Rlc3RSdW5uZXIoKQorICAgIDogbV9tYWluTG9vcChn
X21haW5fbG9vcF9uZXcoMCwgVFJVRSkpCisgICAgLCBtX2J1cyhhZG9wdEdSZWYoZ190ZXN0X2Ri
dXNfbmV3KEdfVEVTVF9EQlVTX05PTkUpKSkKK3sKKyAgICAvLyBTYXZlIHRoZSBESVNQTEFZIGVu
diB2YXIgdG8gcmVzdG9yZSBpdCBhZnRlciBjYWxsaW5nIGdfdGVzdF9kYnVzX3VwKCkgdGhhdCB1
bnNldHMgaXQuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMjU2MjEuCisgICAgY29uc3QgY2hhciogZGlzcGxheSA9IGdfZ2V0ZW52KCJESVNQTEFZ
Iik7CisgICAgZ190ZXN0X2RidXNfdXAobV9idXMuZ2V0KCkpOworICAgIGdfc2V0ZW52KCJESVNQ
TEFZIiwgZGlzcGxheSwgRkFMU0UpOworICAgIG1fY29ubmVjdGlvbiA9IGFkb3B0R1JlZihnX2J1
c19nZXRfc3luYyhHX0JVU19UWVBFX1NFU1NJT04sIDAsIDApKTsKK30KKworV2ViUHJvY2Vzc1Rl
c3RSdW5uZXI6On5XZWJQcm9jZXNzVGVzdFJ1bm5lcigpCit7CisgICAgZ19tYWluX2xvb3BfdW5y
ZWYobV9tYWluTG9vcCk7CisKKyAgICAvLyBnX3Rlc3RfZGJ1c19kb3duIHdhaXRzIHVudGlsIHRo
ZSBjb25uZWN0aW9uIGlzIGZyZWVkLCBzbyByZWxlYXNlIG91ciByZWZzIGV4cGxpY2l0bHkgYmVm
b3JlIGNhbGxpbmcgaXQuCisgICAgbV9jb25uZWN0aW9uID0gMDsKKyAgICBtX3Byb3h5ID0gMDsK
KyAgICBnX3Rlc3RfZGJ1c19kb3duKG1fYnVzLmdldCgpKTsKK30KKwordm9pZCBXZWJQcm9jZXNz
VGVzdFJ1bm5lcjo6cHJveHlDcmVhdGVkQ2FsbGJhY2soR09iamVjdCosIEdBc3luY1Jlc3VsdCog
cmVzdWx0LCBXZWJQcm9jZXNzVGVzdFJ1bm5lciogdGVzdFJ1bm5lcikKK3sKKyAgICB0ZXN0UnVu
bmVyLT5tX3Byb3h5ID0gYWRvcHRHUmVmKGdfZGJ1c19wcm94eV9uZXdfZmluaXNoKHJlc3VsdCwg
MCkpOworICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdFJ1bm5lci0+bV9tYWluTG9vcCk7Cit9CisK
K0dEQnVzUHJveHkqIFdlYlByb2Nlc3NUZXN0UnVubmVyOjpwcm94eSgpCit7CisgICAgaWYgKG1f
cHJveHkpCisgICAgICAgIHJldHVybiBtX3Byb3h5LmdldCgpOworCisgICAgZ19kYnVzX3Byb3h5
X25ldyhtX2Nvbm5lY3Rpb24uZ2V0KCksIEdfREJVU19QUk9YWV9GTEFHU19ET19OT1RfQVVUT19T
VEFSVCwgMCwKKyAgICAgICAgIm9yZy53ZWJraXQuZ3RrLldlYlByb2Nlc3NUZXN0IiwgIi9vcmcv
d2Via2l0L2d0ay9XZWJQcm9jZXNzVGVzdCIsICJvcmcud2Via2l0Lmd0ay5XZWJQcm9jZXNzVGVz
dCIsCisgICAgICAgIDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4oV2Vi
UHJvY2Vzc1Rlc3RSdW5uZXI6OnByb3h5Q3JlYXRlZENhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19t
YWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgIGdfYXNzZXJ0KG1fcHJveHkuZ2V0KCkpOwor
CisgICAgcmV0dXJuIG1fcHJveHkuZ2V0KCk7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzc1Rlc3RSdW5u
ZXI6Om9uTmFtZUFwcGVhcmVkKEdEQnVzQ29ubmVjdGlvbiosIGNvbnN0IGNoYXIqLCBjb25zdCBj
aGFyKiwgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgV2ViUHJvY2Vzc1Rlc3RSdW5uZXIqIHRl
c3RSdW5uZXIgPSBzdGF0aWNfY2FzdDxXZWJQcm9jZXNzVGVzdFJ1bm5lcio+KHVzZXJEYXRhKTsK
KyAgICBnX21haW5fbG9vcF9xdWl0KHRlc3RSdW5uZXItPm1fbWFpbkxvb3ApOworfQorCit2b2lk
IFdlYlByb2Nlc3NUZXN0UnVubmVyOjpvbk5hbWVWYW5pc2hlZChHREJ1c0Nvbm5lY3Rpb24qLCBj
b25zdCBjaGFyKiBuYW1lLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBfZXhpdCgxKTsKK30K
Kwordm9pZCBXZWJQcm9jZXNzVGVzdFJ1bm5lcjo6dGVzdEZpbmlzaGVkQ2FsbGJhY2soR0RCdXNQ
cm94eSogcHJveHksIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBXZWJQcm9jZXNzVGVzdFJ1bm5lciog
dGVzdFJ1bm5lcikKK3sKKyAgICBHUmVmUHRyPEdWYXJpYW50PiByZXR1cm5WYWx1ZSA9IGFkb3B0
R1JlZihnX2RidXNfcHJveHlfY2FsbF9maW5pc2gocHJveHksIHJlc3VsdCwgMCkpOworICAgIGdf
YXNzZXJ0KHJldHVyblZhbHVlLmdldCgpKTsKKyAgICBnYm9vbGVhbiB0ZXN0UmVzdWx0OworICAg
IGdfdmFyaWFudF9nZXQocmV0dXJuVmFsdWUuZ2V0KCksICIoYikiLCAmdGVzdFJlc3VsdCk7Cisg
ICAgdGVzdFJ1bm5lci0+ZmluaXNoVGVzdCh0ZXN0UmVzdWx0KTsKK30KKworYm9vbCBXZWJQcm9j
ZXNzVGVzdFJ1bm5lcjo6cnVuVGVzdChjb25zdCBjaGFyKiBzdWl0ZU5hbWUsIGNvbnN0IGNoYXIq
IHRlc3ROYW1lLCBHVmFyaWFudCogYXJncykKK3sKKyAgICBnX2Fzc2VydChnX3ZhcmlhbnRfaXNf
b2ZfdHlwZShhcmdzLCBHX1ZBUklBTlRfVFlQRV9WQVJESUNUKSk7CisKKyAgICB1bnNpZ25lZCB3
YXRjaGVySUQgPSBnX2J1c193YXRjaF9uYW1lX29uX2Nvbm5lY3Rpb24obV9jb25uZWN0aW9uLmdl
dCgpLCAib3JnLndlYmtpdC5ndGsuV2ViUHJvY2Vzc1Rlc3QiLCBHX0JVU19OQU1FX1dBVENIRVJf
RkxBR1NfTk9ORSwKKyAgICAgICAgV2ViUHJvY2Vzc1Rlc3RSdW5uZXI6Om9uTmFtZUFwcGVhcmVk
LCBXZWJQcm9jZXNzVGVzdFJ1bm5lcjo6b25OYW1lVmFuaXNoZWQsIHRoaXMsIDApOworICAgIGdf
bWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKworICAgIG1fdGVzdFJlc3VsdCA9IGZhbHNlOwor
ICAgIEdPd25QdHI8Y2hhcj4gdGVzdFBhdGgoZ19zdHJkdXBfcHJpbnRmKCIlcy8lcyIsIHN1aXRl
TmFtZSwgdGVzdE5hbWUpKTsKKyAgICBnX2RidXNfcHJveHlfY2FsbCgKKyAgICAgICAgcHJveHko
KSwKKyAgICAgICAgIlJ1blRlc3QiLAorICAgICAgICBnX3ZhcmlhbnRfbmV3KCIoc0Bhe3N2fSki
LCB0ZXN0UGF0aC5nZXQoKSwgYXJncyksCisgICAgICAgIEdfREJVU19DQUxMX0ZMQUdTX05PTkUs
CisgICAgICAgIC0xLCAwLAorICAgICAgICByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2Fs
bGJhY2s+KFdlYlByb2Nlc3NUZXN0UnVubmVyOjp0ZXN0RmluaXNoZWRDYWxsYmFjayksCisgICAg
ICAgIHRoaXMpOworICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICBnX2J1c191
bndhdGNoX25hbWUod2F0Y2hlcklEKTsKKworICAgIHJldHVybiBtX3Rlc3RSZXN1bHQ7Cit9CisK
K3ZvaWQgV2ViUHJvY2Vzc1Rlc3RSdW5uZXI6OmZpbmlzaFRlc3QoYm9vbCByZXN1bHQpCit7Cisg
ICAgbV90ZXN0UmVzdWx0ID0gcmVzdWx0OworICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9v
cCk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dl
YlByb2Nlc3NUZXN0UnVubmVyLmggYi9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3Rr
L1dlYlByb2Nlc3NUZXN0UnVubmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uYzQwZmE5NgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1dl
YktpdDJHdGsvV2ViUHJvY2Vzc1Rlc3RSdW5uZXIuaApAQCAtMCwwICsxLDUwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViUHJvY2Vzc1Rlc3RSdW5u
ZXJfaAorI2RlZmluZSBXZWJQcm9jZXNzVGVzdFJ1bm5lcl9oCisKKyNpbmNsdWRlIDxnaW8vZ2lv
Lmg+CisjaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3Qv
R1JlZlB0ci5oPgorCitjbGFzcyBXZWJQcm9jZXNzVGVzdFJ1bm5lciB7CitwdWJsaWM6CisgICAg
V2ViUHJvY2Vzc1Rlc3RSdW5uZXIoKTsKKyAgICB+V2ViUHJvY2Vzc1Rlc3RSdW5uZXIoKTsKKwor
ICAgIGJvb2wgcnVuVGVzdChjb25zdCBjaGFyKiBzdWl0ZU5hbWUsIGNvbnN0IGNoYXIqIHRlc3RO
YW1lLCBHVmFyaWFudCogYXJncyk7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgcHJveHlD
cmVhdGVkQ2FsbGJhY2soR09iamVjdCosIEdBc3luY1Jlc3VsdCosIFdlYlByb2Nlc3NUZXN0UnVu
bmVyKik7CisgICAgc3RhdGljIHZvaWQgb25OYW1lQXBwZWFyZWQoR0RCdXNDb25uZWN0aW9uKiwg
Y29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBncG9pbnRlcik7CisgICAgc3RhdGljIHZvaWQgb25O
YW1lVmFuaXNoZWQoR0RCdXNDb25uZWN0aW9uKiwgY29uc3QgY2hhciosIGdwb2ludGVyKTsKKyAg
ICBzdGF0aWMgdm9pZCB0ZXN0RmluaXNoZWRDYWxsYmFjayhHREJ1c1Byb3h5KiwgR0FzeW5jUmVz
dWx0KiwgV2ViUHJvY2Vzc1Rlc3RSdW5uZXIqKTsKKworICAgIEdEQnVzUHJveHkqIHByb3h5KCk7
CisgICAgdm9pZCBmaW5pc2hUZXN0KGJvb2wgcmVzdWx0KTsKKworICAgIEdNYWluTG9vcCogbV9t
YWluTG9vcDsKKyAgICBHUmVmUHRyPEdUZXN0REJ1cz4gbV9idXM7CisgICAgR1JlZlB0cjxHREJ1
c0Nvbm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKKyAgICBHUmVmUHRyPEdEQnVzUHJveHk+IG1fcHJv
eHk7CisgICAgYm9vbCBtX3Rlc3RSZXN1bHQ7Cit9OworCisjZW5kaWYgLy8gV2ViUHJvY2Vzc1Rl
c3RSdW5uZXJfaApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0
ay9XZWJWaWV3VGVzdC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dl
YlZpZXdUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDZkZjU1
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9X
ZWJWaWV3VGVzdC5jcHAKQEAgLTAsMCArMSw0NDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgSWdhbGlhIFMuTC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMSBNb3Rvcm9sYSBN
b2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1Jl
dGFpblB0ci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR093blB0ckd0ay5oPgorCitXZWJWaWV3VGVz
dDo6V2ViVmlld1Rlc3QoKQorICAgIDogbV93ZWJWaWV3KFdFQktJVF9XRUJfVklFVyhnX29iamVj
dF9yZWZfc2luayh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpKSkKKyAgICAsIG1fbWFpbkxvb3AoZ19t
YWluX2xvb3BfbmV3KDAsIFRSVUUpKQorICAgICwgbV9wYXJlbnRXaW5kb3coMCkKKyAgICAsIG1f
amF2YXNjcmlwdFJlc3VsdCgwKQorICAgICwgbV9yZXNvdXJjZURhdGFTaXplKDApCisgICAgLCBt
X3N1cmZhY2UoMCkKK3sKKyAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVz
KEdfT0JKRUNUKG1fd2ViVmlldykpOworfQorCitXZWJWaWV3VGVzdDo6fldlYlZpZXdUZXN0KCkK
K3sKKyAgICBpZiAobV9wYXJlbnRXaW5kb3cpCisgICAgICAgIGd0a193aWRnZXRfZGVzdHJveSht
X3BhcmVudFdpbmRvdyk7CisgICAgaWYgKG1famF2YXNjcmlwdFJlc3VsdCkKKyAgICAgICAgd2Vi
a2l0X2phdmFzY3JpcHRfcmVzdWx0X3VucmVmKG1famF2YXNjcmlwdFJlc3VsdCk7CisgICAgaWYg
KG1fc3VyZmFjZSkKKyAgICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KG1fc3VyZmFjZSk7Cisg
ICAgZ19vYmplY3RfdW5yZWYobV93ZWJWaWV3KTsKKyAgICBnX21haW5fbG9vcF91bnJlZihtX21h
aW5Mb29wKTsKK30KKwordm9pZCBXZWJWaWV3VGVzdDo6bG9hZFVSSShjb25zdCBjaGFyKiB1cmkp
Cit7CisgICAgbV9hY3RpdmVVUkkgPSB1cmk7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJp
KG1fd2ViVmlldywgdXJpKTsKK30KKwordm9pZCBXZWJWaWV3VGVzdDo6bG9hZEh0bWwoY29uc3Qg
Y2hhciogaHRtbCwgY29uc3QgY2hhciogYmFzZVVSSSkKK3sKKyAgICBpZiAoIWJhc2VVUkkpCisg
ICAgICAgIG1fYWN0aXZlVVJJID0gImFib3V0OmJsYW5rIjsKKyAgICBlbHNlCisgICAgICAgIG1f
YWN0aXZlVVJJID0gYmFzZVVSSTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9odG1sKG1fd2Vi
VmlldywgaHRtbCwgYmFzZVVSSSk7Cit9CisKK3ZvaWQgV2ViVmlld1Rlc3Q6OmxvYWRQbGFpblRl
eHQoY29uc3QgY2hhciogcGxhaW5UZXh0KQoreworICAgIG1fYWN0aXZlVVJJID0gImFib3V0OmJs
YW5rIjsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9wbGFpbl90ZXh0KG1fd2ViVmlldywgcGxh
aW5UZXh0KTsKK30KKwordm9pZCBXZWJWaWV3VGVzdDo6bG9hZFJlcXVlc3QoV2ViS2l0VVJJUmVx
dWVzdCogcmVxdWVzdCkKK3sKKyAgICBtX2FjdGl2ZVVSSSA9IHdlYmtpdF91cmlfcmVxdWVzdF9n
ZXRfdXJpKHJlcXVlc3QpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3JlcXVlc3QobV93ZWJW
aWV3LCByZXF1ZXN0KTsKK30KKwordm9pZCBXZWJWaWV3VGVzdDo6bG9hZEFsdGVybmF0ZUhUTUwo
Y29uc3QgY2hhciogaHRtbCwgY29uc3QgY2hhciogY29udGVudFVSSSwgY29uc3QgY2hhciogYmFz
ZVVSSSkKK3sKKyAgICBtX2FjdGl2ZVVSSSA9IGNvbnRlbnRVUkk7CisgICAgd2Via2l0X3dlYl92
aWV3X2xvYWRfYWx0ZXJuYXRlX2h0bWwobV93ZWJWaWV3LCBodG1sLCBjb250ZW50VVJJLCBiYXNl
VVJJKTsKK30KKwordm9pZCBXZWJWaWV3VGVzdDo6Z29CYWNrKCkKK3sKKyAgICBpZiAod2Via2l0
X3dlYl92aWV3X2Nhbl9nb19iYWNrKG1fd2ViVmlldykpIHsKKyAgICAgICAgV2ViS2l0QmFja0Zv
cndhcmRMaXN0KiBsaXN0ID0gd2Via2l0X3dlYl92aWV3X2dldF9iYWNrX2ZvcndhcmRfbGlzdCht
X3dlYlZpZXcpOworICAgICAgICBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiBpdGVtID0gd2Vi
a2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9udGhfaXRlbShsaXN0LCAtMSk7CisgICAgICAgIG1f
YWN0aXZlVVJJID0gd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0X29yaWdpbmFsX3Vy
aShpdGVtKTsKKyAgICB9CisKKyAgICAvLyBDYWxsIGdvX2JhY2sgZXZlbiB3aGVuIGNhbl9nb19i
YWNrIHJldHVybnMgRkFMU0UgdG8gY2hlY2sgbm90aGluZyBoYXBwZW5zLgorICAgIHdlYmtpdF93
ZWJfdmlld19nb19iYWNrKG1fd2ViVmlldyk7Cit9CisKK3ZvaWQgV2ViVmlld1Rlc3Q6OmdvRm9y
d2FyZCgpCit7CisgICAgaWYgKHdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZChtX3dlYlZp
ZXcpKSB7CisgICAgICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdCogbGlzdCA9IHdlYmtpdF93ZWJf
dmlld19nZXRfYmFja19mb3J3YXJkX2xpc3QobV93ZWJWaWV3KTsKKyAgICAgICAgV2ViS2l0QmFj
a0ZvcndhcmRMaXN0SXRlbSogaXRlbSA9IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbnRo
X2l0ZW0obGlzdCwgMSk7CisgICAgICAgIG1fYWN0aXZlVVJJID0gd2Via2l0X2JhY2tfZm9yd2Fy
ZF9saXN0X2l0ZW1fZ2V0X29yaWdpbmFsX3VyaShpdGVtKTsKKyAgICB9CisKKyAgICAvLyBDYWxs
IGdvX2ZvcndhcmQgZXZlbiB3aGVuIGNhbl9nb19mb3J3YXJkIHJldHVybnMgRkFMU0UgdG8gY2hl
Y2sgbm90aGluZyBoYXBwZW5zLgorICAgIHdlYmtpdF93ZWJfdmlld19nb19mb3J3YXJkKG1fd2Vi
Vmlldyk7Cit9CisKK3ZvaWQgV2ViVmlld1Rlc3Q6OmdvVG9CYWNrRm9yd2FyZExpc3RJdGVtKFdl
YktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW0pCit7CisgICAgbV9hY3RpdmVVUkkgPSB3ZWJr
aXRfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9nZXRfb3JpZ2luYWxfdXJpKGl0ZW0pOworICAgIHdl
YmtpdF93ZWJfdmlld19nb190b19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtKG1fd2ViVmlldywgaXRl
bSk7Cit9CisKK3ZvaWQgV2ViVmlld1Rlc3Q6OnF1aXRNYWluTG9vcCgpCit7CisgICAgZ19tYWlu
X2xvb3BfcXVpdChtX21haW5Mb29wKTsKK30KKwordm9pZCBXZWJWaWV3VGVzdDo6cXVpdE1haW5M
b29wQWZ0ZXJQcm9jZXNzaW5nUGVuZGluZ0V2ZW50cygpCit7CisgICAgd2hpbGUgKGd0a19ldmVu
dHNfcGVuZGluZygpKQorICAgICAgICBndGtfbWFpbl9pdGVyYXRpb24oKTsKKyAgICBxdWl0TWFp
bkxvb3AoKTsKK30KKworc3RhdGljIGdib29sZWFuIHF1aXRNYWluTG9vcElkbGVDYWxsYmFjayhX
ZWJWaWV3VGVzdCogdGVzdCkKK3sKKyAgICB0ZXN0LT5xdWl0TWFpbkxvb3AoKTsKKyAgICByZXR1
cm4gRkFMU0U7Cit9CisKK3ZvaWQgV2ViVmlld1Rlc3Q6OndhaXQoZG91YmxlIHNlY29uZHMpCit7
CisgICAgZ190aW1lb3V0X2FkZF9zZWNvbmRzKHNlY29uZHMsIHJlaW50ZXJwcmV0X2Nhc3Q8R1Nv
dXJjZUZ1bmM+KHF1aXRNYWluTG9vcElkbGVDYWxsYmFjayksIHRoaXMpOworICAgIGdfbWFpbl9s
b29wX3J1bihtX21haW5Mb29wKTsKK30KKworc3RhdGljIHZvaWQgbG9hZENoYW5nZWQoV2ViS2l0
V2ViVmlldyogd2ViVmlldywgV2ViS2l0TG9hZEV2ZW50IGxvYWRFdmVudCwgV2ViVmlld1Rlc3Qq
IHRlc3QpCit7CisgICAgaWYgKGxvYWRFdmVudCAhPSBXRUJLSVRfTE9BRF9GSU5JU0hFRCkKKyAg
ICAgICAgcmV0dXJuOworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyh3
ZWJWaWV3LCByZWludGVycHJldF9jYXN0PHZvaWQqPihsb2FkQ2hhbmdlZCksIHRlc3QpOworICAg
IGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7Cit9CisKK3ZvaWQgV2ViVmlld1Rl
c3Q6OndhaXRVbnRpbExvYWRGaW5pc2hlZCgpCit7CisgICAgZ19zaWduYWxfY29ubmVjdChtX3dl
YlZpZXcsICJsb2FkLWNoYW5nZWQiLCBHX0NBTExCQUNLKGxvYWRDaGFuZ2VkKSwgdGhpcyk7Cisg
ICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworfQorCitzdGF0aWMgdm9pZCB0aXRsZUNo
YW5nZWQoV2ViS2l0V2ViVmlldyogd2ViVmlldywgR1BhcmFtU3BlYyosIFdlYlZpZXdUZXN0KiB0
ZXN0KQoreworICAgIGlmICghdGVzdC0+bV9leHBlY3RlZFRpdGxlLmlzTnVsbCgpICYmIHRlc3Qt
Pm1fZXhwZWN0ZWRUaXRsZSAhPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3RpdGxlKHdlYlZpZXcpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1
bmMod2ViVmlldywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odGl0bGVDaGFuZ2VkKSwgdGVzdCk7
CisgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKK30KKwordm9pZCBXZWJW
aWV3VGVzdDo6d2FpdFVudGlsVGl0bGVDaGFuZ2VkVG8oY29uc3QgY2hhciogZXhwZWN0ZWRUaXRs
ZSkKK3sKKyAgICBtX2V4cGVjdGVkVGl0bGUgPSBleHBlY3RlZFRpdGxlOworICAgIGdfc2lnbmFs
X2Nvbm5lY3QobV93ZWJWaWV3LCAibm90aWZ5Ojp0aXRsZSIsIEdfQ0FMTEJBQ0sodGl0bGVDaGFu
Z2VkKSwgdGhpcyk7CisgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgIG1fZXhw
ZWN0ZWRUaXRsZSA9IENTdHJpbmcoKTsKK30KKwordm9pZCBXZWJWaWV3VGVzdDo6d2FpdFVudGls
VGl0bGVDaGFuZ2VkKCkKK3sKKyAgICB3YWl0VW50aWxUaXRsZUNoYW5nZWRUbygwKTsKK30KKwor
c3RhdGljIGdib29sZWFuIHBhcmVudFdpbmRvd01hcHBlZChHdGtXaWRnZXQqIHdpZGdldCwgR2Rr
RXZlbnQqLCBXZWJWaWV3VGVzdCogdGVzdCkKK3sKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNj
b25uZWN0X2J5X2Z1bmMod2lkZ2V0LCByZWludGVycHJldF9jYXN0PHZvaWQqPihwYXJlbnRXaW5k
b3dNYXBwZWQpLCB0ZXN0KTsKKyAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3Ap
OworCisgICAgcmV0dXJuIEZBTFNFOworfQorCit2b2lkIFdlYlZpZXdUZXN0OjpzaG93SW5XaW5k
b3coR3RrV2luZG93VHlwZSB3aW5kb3dUeXBlKQoreworICAgIGdfYXNzZXJ0KCFtX3BhcmVudFdp
bmRvdyk7CisgICAgbV9wYXJlbnRXaW5kb3cgPSBndGtfd2luZG93X25ldyh3aW5kb3dUeXBlKTsK
KyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKG1fcGFyZW50V2luZG93KSwgR1RL
X1dJREdFVChtX3dlYlZpZXcpKTsKKyAgICBndGtfd2lkZ2V0X3Nob3coR1RLX1dJREdFVChtX3dl
YlZpZXcpKTsKKyAgICBndGtfd2lkZ2V0X3Nob3cobV9wYXJlbnRXaW5kb3cpOworfQorCit2b2lk
IFdlYlZpZXdUZXN0OjpzaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoR3RrV2luZG93VHlw
ZSB3aW5kb3dUeXBlKQoreworICAgIGdfYXNzZXJ0KCFtX3BhcmVudFdpbmRvdyk7CisgICAgbV9w
YXJlbnRXaW5kb3cgPSBndGtfd2luZG93X25ldyh3aW5kb3dUeXBlKTsKKyAgICBndGtfY29udGFp
bmVyX2FkZChHVEtfQ09OVEFJTkVSKG1fcGFyZW50V2luZG93KSwgR1RLX1dJREdFVChtX3dlYlZp
ZXcpKTsKKyAgICBndGtfd2lkZ2V0X3Nob3coR1RLX1dJREdFVChtX3dlYlZpZXcpKTsKKworICAg
IGdfc2lnbmFsX2Nvbm5lY3QobV9wYXJlbnRXaW5kb3csICJtYXAtZXZlbnQiLCBHX0NBTExCQUNL
KHBhcmVudFdpbmRvd01hcHBlZCksIHRoaXMpOworICAgIGd0a193aWRnZXRfc2hvdyhtX3BhcmVu
dFdpbmRvdyk7CisgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworfQorCit2b2lkIFdl
YlZpZXdUZXN0OjpyZXNpemVWaWV3KGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBHdGtB
bGxvY2F0aW9uIGFsbG9jYXRpb247CisgICAgZ3RrX3dpZGdldF9nZXRfYWxsb2NhdGlvbihHVEtf
V0lER0VUKG1fd2ViVmlldyksICZhbGxvY2F0aW9uKTsKKyAgICBpZiAod2lkdGggIT0gLTEpCisg
ICAgICAgIGFsbG9jYXRpb24ud2lkdGggPSB3aWR0aDsKKyAgICBpZiAoaGVpZ2h0ICE9IC0xKQor
ICAgICAgICBhbGxvY2F0aW9uLmhlaWdodCA9IGhlaWdodDsKKyAgICBndGtfd2lkZ2V0X3NpemVf
YWxsb2NhdGUoR1RLX1dJREdFVChtX3dlYlZpZXcpLCAmYWxsb2NhdGlvbik7Cit9CisKK3ZvaWQg
V2ViVmlld1Rlc3Q6OnNlbGVjdEFsbCgpCit7CisgICAgd2Via2l0X3dlYl92aWV3X2V4ZWN1dGVf
ZWRpdGluZ19jb21tYW5kKG1fd2ViVmlldywgIlNlbGVjdEFsbCIpOworfQorCitzdGF0aWMgdm9p
ZCByZXNvdXJjZUdldERhdGFDYWxsYmFjayhHT2JqZWN0KiBvYmplY3QsIEdBc3luY1Jlc3VsdCog
cmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBzaXplX3QgZGF0YVNpemU7CisgICAg
R093blB0cjxHRXJyb3I+IGVycm9yOworICAgIHVuc2lnbmVkIGNoYXIqIGRhdGEgPSB3ZWJraXRf
d2ViX3Jlc291cmNlX2dldF9kYXRhX2ZpbmlzaChXRUJLSVRfV0VCX1JFU09VUkNFKG9iamVjdCks
IHJlc3VsdCwgJmRhdGFTaXplLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGdfYXNzZXJ0KGRhdGEp
OworCisgICAgV2ViVmlld1Rlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxXZWJWaWV3VGVzdCo+KHVz
ZXJEYXRhKTsKKyAgICB0ZXN0LT5tX3Jlc291cmNlRGF0YS5zZXQocmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4oZGF0YSkpOworICAgIHRlc3QtPm1fcmVzb3VyY2VEYXRhU2l6ZSA9IGRhdGFTaXplOwor
ICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7Cit9CisKK2NvbnN0IGNoYXIq
IFdlYlZpZXdUZXN0OjptYWluUmVzb3VyY2VEYXRhKHNpemVfdCYgbWFpblJlc291cmNlRGF0YVNp
emUpCit7CisgICAgbV9yZXNvdXJjZURhdGFTaXplID0gMDsKKyAgICBtX3Jlc291cmNlRGF0YS5j
bGVhcigpOworICAgIFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSA9IHdlYmtpdF93ZWJfdmll
d19nZXRfbWFpbl9yZXNvdXJjZShtX3dlYlZpZXcpOworICAgIGdfYXNzZXJ0KHJlc291cmNlKTsK
KworICAgIHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X2RhdGEocmVzb3VyY2UsIDAsIHJlc291cmNl
R2V0RGF0YUNhbGxiYWNrLCB0aGlzKTsKKyAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7
CisKKyAgICBtYWluUmVzb3VyY2VEYXRhU2l6ZSA9IG1fcmVzb3VyY2VEYXRhU2l6ZTsKKyAgICBy
ZXR1cm4gbV9yZXNvdXJjZURhdGEuZ2V0KCk7Cit9CisKK3ZvaWQgV2ViVmlld1Rlc3Q6Om1vdXNl
TW92ZVRvKGludCB4LCBpbnQgeSwgdW5zaWduZWQgbW91c2VNb2RpZmllcnMpCit7CisgICAgZ19h
c3NlcnQobV9wYXJlbnRXaW5kb3cpOworICAgIEd0a1dpZGdldCogdmlld1dpZGdldCA9IEdUS19X
SURHRVQobV93ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChndGtfd2lkZ2V0X2dldF9yZWFsaXplZCh2
aWV3V2lkZ2V0KSk7CisKKyAgICBHT3duUHRyPEdka0V2ZW50PiBldmVudChnZGtfZXZlbnRfbmV3
KEdES19NT1RJT05fTk9USUZZKSk7CisgICAgZXZlbnQtPm1vdGlvbi54ID0geDsKKyAgICBldmVu
dC0+bW90aW9uLnkgPSB5OworCisgICAgZXZlbnQtPm1vdGlvbi50aW1lID0gR0RLX0NVUlJFTlRf
VElNRTsKKyAgICBldmVudC0+bW90aW9uLndpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyh2
aWV3V2lkZ2V0KTsKKyAgICBnX29iamVjdF9yZWYoZXZlbnQtPm1vdGlvbi53aW5kb3cpOworICAg
IGV2ZW50LT5tb3Rpb24uZGV2aWNlID0gZ2RrX2RldmljZV9tYW5hZ2VyX2dldF9jbGllbnRfcG9p
bnRlcihnZGtfZGlzcGxheV9nZXRfZGV2aWNlX21hbmFnZXIoZ3RrX3dpZGdldF9nZXRfZGlzcGxh
eSh2aWV3V2lkZ2V0KSkpOworICAgIGV2ZW50LT5tb3Rpb24uc3RhdGUgPSBtb3VzZU1vZGlmaWVy
czsKKyAgICBldmVudC0+bW90aW9uLmF4ZXMgPSAwOworCisgICAgaW50IHhSb290LCB5Um9vdDsK
KyAgICBnZGtfd2luZG93X2dldF9yb290X2Nvb3JkcyhndGtfd2lkZ2V0X2dldF93aW5kb3codmll
d1dpZGdldCksIHgsIHksICZ4Um9vdCwgJnlSb290KTsKKyAgICBldmVudC0+bW90aW9uLnhfcm9v
dCA9IHhSb290OworICAgIGV2ZW50LT5tb3Rpb24ueV9yb290ID0geVJvb3Q7CisgICAgZ3RrX21h
aW5fZG9fZXZlbnQoZXZlbnQuZ2V0KCkpOworfQorCit2b2lkIFdlYlZpZXdUZXN0OjpjbGlja01v
dXNlQnV0dG9uKGludCB4LCBpbnQgeSwgdW5zaWduZWQgYnV0dG9uLCB1bnNpZ25lZCBtb3VzZU1v
ZGlmaWVycykKK3sKKyAgICBkb01vdXNlQnV0dG9uRXZlbnQoR0RLX0JVVFRPTl9QUkVTUywgeCwg
eSwgYnV0dG9uLCBtb3VzZU1vZGlmaWVycyk7CisgICAgZG9Nb3VzZUJ1dHRvbkV2ZW50KEdES19C
VVRUT05fUkVMRUFTRSwgeCwgeSwgYnV0dG9uLCBtb3VzZU1vZGlmaWVycyk7Cit9CisKK3ZvaWQg
V2ViVmlld1Rlc3Q6OmtleVN0cm9rZSh1bnNpZ25lZCBrZXlWYWwsIHVuc2lnbmVkIGtleU1vZGlm
aWVycykKK3sKKyAgICBnX2Fzc2VydChtX3BhcmVudFdpbmRvdyk7CisgICAgR3RrV2lkZ2V0KiB2
aWV3V2lkZ2V0ID0gR1RLX1dJREdFVChtX3dlYlZpZXcpOworICAgIGdfYXNzZXJ0KGd0a193aWRn
ZXRfZ2V0X3JlYWxpemVkKHZpZXdXaWRnZXQpKTsKKworICAgIEdPd25QdHI8R2RrRXZlbnQ+IGV2
ZW50KGdka19ldmVudF9uZXcoR0RLX0tFWV9QUkVTUykpOworICAgIGV2ZW50LT5rZXkua2V5dmFs
ID0ga2V5VmFsOworCisgICAgZXZlbnQtPmtleS50aW1lID0gR0RLX0NVUlJFTlRfVElNRTsKKyAg
ICBldmVudC0+a2V5LndpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyh2aWV3V2lkZ2V0KTsK
KyAgICBnX29iamVjdF9yZWYoZXZlbnQtPmtleS53aW5kb3cpOworICAgIGdka19ldmVudF9zZXRf
ZGV2aWNlKGV2ZW50LmdldCgpLCBnZGtfZGV2aWNlX21hbmFnZXJfZ2V0X2NsaWVudF9wb2ludGVy
KGdka19kaXNwbGF5X2dldF9kZXZpY2VfbWFuYWdlcihndGtfd2lkZ2V0X2dldF9kaXNwbGF5KHZp
ZXdXaWRnZXQpKSkpOworICAgIGV2ZW50LT5rZXkuc3RhdGUgPSBrZXlNb2RpZmllcnM7CisKKyAg
ICAvLyBXaGVuIHN5bnRoZXNpemluZyBhbiBldmVudCwgYW4gaW52YWxpZCBoYXJkd2FyZV9rZXlj
b2RlIHZhbHVlIGNhbiBjYXVzZSBpdCB0byBiZSBiYWRseSBwcm9jZXNzZWQgYnkgR1RLKy4KKyAg
ICBHT3duUHRyPEdka0tleW1hcEtleT4ga2V5czsKKyAgICBpbnQga2V5c0NvdW50OworICAgIGlm
IChnZGtfa2V5bWFwX2dldF9lbnRyaWVzX2Zvcl9rZXl2YWwoZ2RrX2tleW1hcF9nZXRfZGVmYXVs
dCgpLCBrZXlWYWwsICZrZXlzLm91dFB0cigpLCAma2V5c0NvdW50KSkKKyAgICAgICAgZXZlbnQt
PmtleS5oYXJkd2FyZV9rZXljb2RlID0ga2V5cy5nZXQoKVswXS5rZXljb2RlOworCisgICAgZ3Rr
X21haW5fZG9fZXZlbnQoZXZlbnQuZ2V0KCkpOworICAgIGV2ZW50LT5rZXkudHlwZSA9IEdES19L
RVlfUkVMRUFTRTsKKyAgICBndGtfbWFpbl9kb19ldmVudChldmVudC5nZXQoKSk7Cit9CisKK3Zv
aWQgV2ViVmlld1Rlc3Q6OmRvTW91c2VCdXR0b25FdmVudChHZGtFdmVudFR5cGUgZXZlbnRUeXBl
LCBpbnQgeCwgaW50IHksIHVuc2lnbmVkIGJ1dHRvbiwgdW5zaWduZWQgbW91c2VNb2RpZmllcnMp
Cit7CisgICAgZ19hc3NlcnQobV9wYXJlbnRXaW5kb3cpOworICAgIEd0a1dpZGdldCogdmlld1dp
ZGdldCA9IEdUS19XSURHRVQobV93ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChndGtfd2lkZ2V0X2dl
dF9yZWFsaXplZCh2aWV3V2lkZ2V0KSk7CisKKyAgICBHT3duUHRyPEdka0V2ZW50PiBldmVudChn
ZGtfZXZlbnRfbmV3KGV2ZW50VHlwZSkpOworICAgIGV2ZW50LT5idXR0b24ud2luZG93ID0gZ3Rr
X3dpZGdldF9nZXRfd2luZG93KHZpZXdXaWRnZXQpOworICAgIGdfb2JqZWN0X3JlZihldmVudC0+
YnV0dG9uLndpbmRvdyk7CisKKyAgICBldmVudC0+YnV0dG9uLnRpbWUgPSBHREtfQ1VSUkVOVF9U
SU1FOworICAgIGV2ZW50LT5idXR0b24ueCA9IHg7CisgICAgZXZlbnQtPmJ1dHRvbi55ID0geTsK
KyAgICBldmVudC0+YnV0dG9uLmF4ZXMgPSAwOworICAgIGV2ZW50LT5idXR0b24uc3RhdGUgPSBt
b3VzZU1vZGlmaWVyczsKKyAgICBldmVudC0+YnV0dG9uLmJ1dHRvbiA9IGJ1dHRvbjsKKworICAg
IGV2ZW50LT5idXR0b24uZGV2aWNlID0gZ2RrX2RldmljZV9tYW5hZ2VyX2dldF9jbGllbnRfcG9p
bnRlcihnZGtfZGlzcGxheV9nZXRfZGV2aWNlX21hbmFnZXIoZ3RrX3dpZGdldF9nZXRfZGlzcGxh
eSh2aWV3V2lkZ2V0KSkpOworCisgICAgaW50IHhSb290LCB5Um9vdDsKKyAgICBnZGtfd2luZG93
X2dldF9yb290X2Nvb3JkcyhndGtfd2lkZ2V0X2dldF93aW5kb3codmlld1dpZGdldCksIHgsIHks
ICZ4Um9vdCwgJnlSb290KTsKKyAgICBldmVudC0+YnV0dG9uLnhfcm9vdCA9IHhSb290OworICAg
IGV2ZW50LT5idXR0b24ueV9yb290ID0geVJvb3Q7CisgICAgZ3RrX21haW5fZG9fZXZlbnQoZXZl
bnQuZ2V0KCkpOworfQorCitzdGF0aWMgdm9pZCBydW5KYXZhU2NyaXB0UmVhZHlDYWxsYmFjayhH
T2JqZWN0KiwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIFdlYlZpZXdUZXN0KiB0ZXN0KQoreworICAg
IHRlc3QtPm1famF2YXNjcmlwdFJlc3VsdCA9IHdlYmtpdF93ZWJfdmlld19ydW5famF2YXNjcmlw
dF9maW5pc2godGVzdC0+bV93ZWJWaWV3LCByZXN1bHQsIHRlc3QtPm1famF2YXNjcmlwdEVycm9y
KTsKKyAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworfQorCitzdGF0aWMg
dm9pZCBydW5KYXZhU2NyaXB0RnJvbUdSZXNvdXJjZVJlYWR5Q2FsbGJhY2soR09iamVjdCosIEdB
c3luY1Jlc3VsdCogcmVzdWx0LCBXZWJWaWV3VGVzdCogdGVzdCkKK3sKKyAgICB0ZXN0LT5tX2ph
dmFzY3JpcHRSZXN1bHQgPSB3ZWJraXRfd2ViX3ZpZXdfcnVuX2phdmFzY3JpcHRfZnJvbV9ncmVz
b3VyY2VfZmluaXNoKHRlc3QtPm1fd2ViVmlldywgcmVzdWx0LCB0ZXN0LT5tX2phdmFzY3JpcHRF
cnJvcik7CisgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKK30KKworV2Vi
S2l0SmF2YXNjcmlwdFJlc3VsdCogV2ViVmlld1Rlc3Q6OnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50
aWxGaW5pc2hlZChjb25zdCBjaGFyKiBqYXZhc2NyaXB0LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAg
ICBpZiAobV9qYXZhc2NyaXB0UmVzdWx0KQorICAgICAgICB3ZWJraXRfamF2YXNjcmlwdF9yZXN1
bHRfdW5yZWYobV9qYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBtX2phdmFzY3JpcHRSZXN1bHQgPSAw
OworICAgIG1famF2YXNjcmlwdEVycm9yID0gZXJyb3I7CisgICAgd2Via2l0X3dlYl92aWV3X3J1
bl9qYXZhc2NyaXB0KG1fd2ViVmlldywgamF2YXNjcmlwdCwgMCwgcmVpbnRlcnByZXRfY2FzdDxH
QXN5bmNSZWFkeUNhbGxiYWNrPihydW5KYXZhU2NyaXB0UmVhZHlDYWxsYmFjayksIHRoaXMpOwor
ICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKworICAgIHJldHVybiBtX2phdmFzY3Jp
cHRSZXN1bHQ7Cit9CisKK1dlYktpdEphdmFzY3JpcHRSZXN1bHQqIFdlYlZpZXdUZXN0OjpydW5K
YXZhU2NyaXB0RnJvbUdSZXNvdXJjZUFuZFdhaXRVbnRpbEZpbmlzaGVkKGNvbnN0IGNoYXIqIHJl
c291cmNlLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBpZiAobV9qYXZhc2NyaXB0UmVzdWx0KQor
ICAgICAgICB3ZWJraXRfamF2YXNjcmlwdF9yZXN1bHRfdW5yZWYobV9qYXZhc2NyaXB0UmVzdWx0
KTsKKyAgICBtX2phdmFzY3JpcHRSZXN1bHQgPSAwOworICAgIG1famF2YXNjcmlwdEVycm9yID0g
ZXJyb3I7CisgICAgd2Via2l0X3dlYl92aWV3X3J1bl9qYXZhc2NyaXB0X2Zyb21fZ3Jlc291cmNl
KG1fd2ViVmlldywgcmVzb3VyY2UsIDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxs
YmFjaz4ocnVuSmF2YVNjcmlwdEZyb21HUmVzb3VyY2VSZWFkeUNhbGxiYWNrKSwgdGhpcyk7Cisg
ICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworCisgICAgcmV0dXJuIG1famF2YXNjcmlw
dFJlc3VsdDsKK30KKworc3RhdGljIGNoYXIqIGpzVmFsdWVUb0NTdHJpbmcoSlNHbG9iYWxDb250
ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCit7CisgICAgZ19hc3NlcnQodmFsdWUp
OworICAgIGdfYXNzZXJ0KEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCB2YWx1ZSkpOworCisgICAg
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHN0cmluZ1ZhbHVlKEFkb3B0LCBKU1ZhbHVlVG9TdHJp
bmdDb3B5KGNvbnRleHQsIHZhbHVlLCAwKSk7CisgICAgZ19hc3NlcnQoc3RyaW5nVmFsdWUpOwor
CisgICAgc2l6ZV90IGNTdHJpbmdMZW5ndGggPSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmlu
Z1NpemUoc3RyaW5nVmFsdWUuZ2V0KCkpOworICAgIGNoYXIqIGNTdHJpbmcgPSBzdGF0aWNfY2Fz
dDxjaGFyKj4oZ19tYWxsb2MoY1N0cmluZ0xlbmd0aCkpOworICAgIEpTU3RyaW5nR2V0VVRGOENT
dHJpbmcoc3RyaW5nVmFsdWUuZ2V0KCksIGNTdHJpbmcsIGNTdHJpbmdMZW5ndGgpOworICAgIHJl
dHVybiBjU3RyaW5nOworfQorCitjaGFyKiBXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRv
Q1N0cmluZyhXZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBqYXZhc2NyaXB0UmVzdWx0KQoreworICAg
IEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0ID0gd2Via2l0X2phdmFzY3JpcHRfcmVzdWx0X2dl
dF9nbG9iYWxfY29udGV4dChqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydChjb250ZXh0
KTsKKyAgICByZXR1cm4ganNWYWx1ZVRvQ1N0cmluZyhjb250ZXh0LCB3ZWJraXRfamF2YXNjcmlw
dF9yZXN1bHRfZ2V0X3ZhbHVlKGphdmFzY3JpcHRSZXN1bHQpKTsKK30KKworZG91YmxlIFdlYlZp
ZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9OdW1iZXIoV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCog
amF2YXNjcmlwdFJlc3VsdCkKK3sKKyAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCA9IHdl
YmtpdF9qYXZhc2NyaXB0X3Jlc3VsdF9nZXRfZ2xvYmFsX2NvbnRleHQoamF2YXNjcmlwdFJlc3Vs
dCk7CisgICAgZ19hc3NlcnQoY29udGV4dCk7CisgICAgSlNWYWx1ZVJlZiB2YWx1ZSA9IHdlYmtp
dF9qYXZhc2NyaXB0X3Jlc3VsdF9nZXRfdmFsdWUoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19h
c3NlcnQodmFsdWUpOworICAgIGdfYXNzZXJ0KEpTVmFsdWVJc051bWJlcihjb250ZXh0LCB2YWx1
ZSkpOworCisgICAgcmV0dXJuIEpTVmFsdWVUb051bWJlcihjb250ZXh0LCB2YWx1ZSwgMCk7Cit9
CisKK2Jvb2wgV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0Jvb2xlYW4oV2ViS2l0SmF2
YXNjcmlwdFJlc3VsdCogamF2YXNjcmlwdFJlc3VsdCkKK3sKKyAgICBKU0dsb2JhbENvbnRleHRS
ZWYgY29udGV4dCA9IHdlYmtpdF9qYXZhc2NyaXB0X3Jlc3VsdF9nZXRfZ2xvYmFsX2NvbnRleHQo
amF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoY29udGV4dCk7CisgICAgSlNWYWx1ZVJl
ZiB2YWx1ZSA9IHdlYmtpdF9qYXZhc2NyaXB0X3Jlc3VsdF9nZXRfdmFsdWUoamF2YXNjcmlwdFJl
c3VsdCk7CisgICAgZ19hc3NlcnQodmFsdWUpOworICAgIGdfYXNzZXJ0KEpTVmFsdWVJc0Jvb2xl
YW4oY29udGV4dCwgdmFsdWUpKTsKKworICAgIHJldHVybiBKU1ZhbHVlVG9Cb29sZWFuKGNvbnRl
eHQsIHZhbHVlKTsKK30KKworYm9vbCBXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdElzTnVs
bChXZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBqYXZhc2NyaXB0UmVzdWx0KQoreworICAgIEpTR2xv
YmFsQ29udGV4dFJlZiBjb250ZXh0ID0gd2Via2l0X2phdmFzY3JpcHRfcmVzdWx0X2dldF9nbG9i
YWxfY29udGV4dChqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydChjb250ZXh0KTsKKyAg
ICBKU1ZhbHVlUmVmIHZhbHVlID0gd2Via2l0X2phdmFzY3JpcHRfcmVzdWx0X2dldF92YWx1ZShq
YXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydCh2YWx1ZSk7CisKKyAgICByZXR1cm4gSlNW
YWx1ZUlzTnVsbChjb250ZXh0LCB2YWx1ZSk7Cit9CisKK2Jvb2wgV2ViVmlld1Rlc3Q6OmphdmFz
Y3JpcHRSZXN1bHRJc1VuZGVmaW5lZChXZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBqYXZhc2NyaXB0
UmVzdWx0KQoreworICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0ID0gd2Via2l0X2phdmFz
Y3JpcHRfcmVzdWx0X2dldF9nbG9iYWxfY29udGV4dChqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBn
X2Fzc2VydChjb250ZXh0KTsKKyAgICBKU1ZhbHVlUmVmIHZhbHVlID0gd2Via2l0X2phdmFzY3Jp
cHRfcmVzdWx0X2dldF92YWx1ZShqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydCh2YWx1
ZSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZUlzVW5kZWZpbmVkKGNvbnRleHQsIHZhbHVlKTsKK30K
Kworc3RhdGljIHZvaWQgb25TbmFwc2hvdFJlYWR5KFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBH
QXN5bmNSZXN1bHQqIHJlcywgV2ViVmlld1Rlc3QqIHRlc3QpCit7CisgICAgR093blB0cjxHRXJy
b3I+IGVycm9yOworICAgIHRlc3QtPm1fc3VyZmFjZSA9IHdlYmtpdF93ZWJfdmlld19nZXRfc25h
cHNob3RfZmluaXNoKHdlYl92aWV3LCByZXMsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3Nl
cnQoIXRlc3QtPm1fc3VyZmFjZSB8fCAhZXJyb3IuZ2V0KCkpOworICAgIGlmIChlcnJvcikKKyAg
ICAgICAgZ19hc3NlcnRfZXJyb3IoZXJyb3IuZ2V0KCksIFdFQktJVF9TTkFQU0hPVF9FUlJPUiwg
V0VCS0lUX1NOQVBTSE9UX0VSUk9SX0ZBSUxFRF9UT19DUkVBVEUpOworICAgIHRlc3QtPnF1aXRN
YWluTG9vcCgpOworfQorCitjYWlyb19zdXJmYWNlX3QqIFdlYlZpZXdUZXN0OjpnZXRTbmFwc2hv
dEFuZFdhaXRVbnRpbFJlYWR5KFdlYktpdFNuYXBzaG90UmVnaW9uIHJlZ2lvbiwgV2ViS2l0U25h
cHNob3RPcHRpb25zIG9wdGlvbnMpCit7CisgICAgaWYgKG1fc3VyZmFjZSkKKyAgICAgICAgY2Fp
cm9fc3VyZmFjZV9kZXN0cm95KG1fc3VyZmFjZSk7CisgICAgbV9zdXJmYWNlID0gMDsKKyAgICB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X3NuYXBzaG90KG1fd2ViVmlldywgcmVnaW9uLCBvcHRpb25zLCAw
LCByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KG9uU25hcHNob3RSZWFkeSks
IHRoaXMpOworICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICByZXR1cm4gbV9z
dXJmYWNlOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0
ay9XZWJWaWV3VGVzdC5oIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9XZWJW
aWV3VGVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlZWIwNjIKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYlZp
ZXdUZXN0LmgKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2Fs
aWEgUy5MLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDExIE1vdG9yb2xhIE1vYmlsaXR5
LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYlZpZXdUZXN0X2gKKyNkZWZp
bmUgV2ViVmlld1Rlc3RfaAorCisjaW5jbHVkZSAiVGVzdE1haW4uaCIKKyNpbmNsdWRlIDx3ZWJr
aXQyL3dlYmtpdDIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK2NsYXNzIFdl
YlZpZXdUZXN0OiBwdWJsaWMgVGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklY
VFVSRShXZWJWaWV3VGVzdCk7CisgICAgV2ViVmlld1Rlc3QoKTsKKyAgICB2aXJ0dWFsIH5XZWJW
aWV3VGVzdCgpOworCisgICAgdmlydHVhbCB2b2lkIGxvYWRVUkkoY29uc3QgY2hhciogdXJpKTsK
KyAgICB2aXJ0dWFsIHZvaWQgbG9hZEh0bWwoY29uc3QgY2hhciogaHRtbCwgY29uc3QgY2hhciog
YmFzZVVSSSk7CisgICAgdmlydHVhbCB2b2lkIGxvYWRQbGFpblRleHQoY29uc3QgY2hhciogcGxh
aW5UZXh0KTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlcXVlc3QoV2ViS2l0VVJJUmVxdWVzdCop
OworICAgIHZvaWQgbG9hZEFsdGVybmF0ZUhUTUwoY29uc3QgY2hhciogaHRtbCwgY29uc3QgY2hh
ciogY29udGVudFVSSSwgY29uc3QgY2hhciogYmFzZVVSSSk7CisgICAgdm9pZCBnb0JhY2soKTsK
KyAgICB2b2lkIGdvRm9yd2FyZCgpOworICAgIHZvaWQgZ29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW0o
V2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSopOworCisgICAgdm9pZCBxdWl0TWFpbkxvb3AoKTsK
KyAgICB2b2lkIHF1aXRNYWluTG9vcEFmdGVyUHJvY2Vzc2luZ1BlbmRpbmdFdmVudHMoKTsKKyAg
ICB2b2lkIHdhaXQoZG91YmxlIHNlY29uZHMpOworICAgIHZvaWQgd2FpdFVudGlsTG9hZEZpbmlz
aGVkKCk7CisgICAgdm9pZCB3YWl0VW50aWxUaXRsZUNoYW5nZWRUbyhjb25zdCBjaGFyKiBleHBl
Y3RlZFRpdGxlKTsKKyAgICB2b2lkIHdhaXRVbnRpbFRpdGxlQ2hhbmdlZCgpOworICAgIHZvaWQg
c2hvd0luV2luZG93KEd0a1dpbmRvd1R5cGUgPSBHVEtfV0lORE9XX1BPUFVQKTsKKyAgICB2b2lk
IHNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZChHdGtXaW5kb3dUeXBlID0gR1RLX1dJTkRP
V19QT1BVUCk7CisgICAgdm9pZCByZXNpemVWaWV3KGludCB3aWR0aCwgaW50IGhlaWdodCk7Cisg
ICAgdm9pZCBzZWxlY3RBbGwoKTsKKyAgICBjb25zdCBjaGFyKiBtYWluUmVzb3VyY2VEYXRhKHNp
emVfdCYgbWFpblJlc291cmNlRGF0YVNpemUpOworCisgICAgdm9pZCBtb3VzZU1vdmVUbyhpbnQg
eCwgaW50IHksIHVuc2lnbmVkIG1vdXNlTW9kaWZpZXJzID0gMCk7CisgICAgdm9pZCBjbGlja01v
dXNlQnV0dG9uKGludCB4LCBpbnQgeSwgdW5zaWduZWQgYnV0dG9uID0gMSwgdW5zaWduZWQgbW91
c2VNb2RpZmllcnMgPSAwKTsKKyAgICB2b2lkIGtleVN0cm9rZSh1bnNpZ25lZCBrZXlWYWwsIHVu
c2lnbmVkIGtleU1vZGlmaWVycyA9IDApOworCisgICAgV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCog
cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKGNvbnN0IGNoYXIqIGphdmFzY3JpcHQs
IEdFcnJvcioqKTsKKyAgICBXZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBydW5KYXZhU2NyaXB0RnJv
bUdSZXNvdXJjZUFuZFdhaXRVbnRpbEZpbmlzaGVkKGNvbnN0IGNoYXIqIHJlc291cmNlLCBHRXJy
b3IqKik7CisKKyAgICAvLyBKYXZhc2NyaXB0IHJlc3VsdCBoZWxwZXJzLgorICAgIHN0YXRpYyBj
aGFyKiBqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKFdlYktpdEphdmFzY3JpcHRSZXN1bHQqKTsK
KyAgICBzdGF0aWMgZG91YmxlIGphdmFzY3JpcHRSZXN1bHRUb051bWJlcihXZWJLaXRKYXZhc2Ny
aXB0UmVzdWx0Kik7CisgICAgc3RhdGljIGJvb2wgamF2YXNjcmlwdFJlc3VsdFRvQm9vbGVhbihX
ZWJLaXRKYXZhc2NyaXB0UmVzdWx0Kik7CisgICAgc3RhdGljIGJvb2wgamF2YXNjcmlwdFJlc3Vs
dElzTnVsbChXZWJLaXRKYXZhc2NyaXB0UmVzdWx0Kik7CisgICAgc3RhdGljIGJvb2wgamF2YXNj
cmlwdFJlc3VsdElzVW5kZWZpbmVkKFdlYktpdEphdmFzY3JpcHRSZXN1bHQqKTsKKworICAgIGNh
aXJvX3N1cmZhY2VfdCogZ2V0U25hcHNob3RBbmRXYWl0VW50aWxSZWFkeShXZWJLaXRTbmFwc2hv
dFJlZ2lvbiwgV2ViS2l0U25hcHNob3RPcHRpb25zKTsKKworICAgIFdlYktpdFdlYlZpZXcqIG1f
d2ViVmlldzsKKyAgICBHTWFpbkxvb3AqIG1fbWFpbkxvb3A7CisgICAgQ1N0cmluZyBtX2FjdGl2
ZVVSSTsKKyAgICBHdGtXaWRnZXQqIG1fcGFyZW50V2luZG93OworICAgIENTdHJpbmcgbV9leHBl
Y3RlZFRpdGxlOworICAgIFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIG1famF2YXNjcmlwdFJlc3Vs
dDsKKyAgICBHRXJyb3IqKiBtX2phdmFzY3JpcHRFcnJvcjsKKyAgICBHT3duUHRyPGNoYXI+IG1f
cmVzb3VyY2VEYXRhOworICAgIHNpemVfdCBtX3Jlc291cmNlRGF0YVNpemU7CisgICAgY2Fpcm9f
c3VyZmFjZV90KiBtX3N1cmZhY2U7CisKK3ByaXZhdGU6CisgICAgdm9pZCBkb01vdXNlQnV0dG9u
RXZlbnQoR2RrRXZlbnRUeXBlLCBpbnQsIGludCwgdW5zaWduZWQsIHVuc2lnbmVkKTsKK307CisK
KyNlbmRpZiAvLyBXZWJWaWV3VGVzdF9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220377</attachid>
            <date>2014-01-04 12:31:36 -0800</date>
            <delta_ts>2014-01-06 10:13:13 -0800</delta_ts>
            <desc>Include CMake build support</desc>
            <filename>bug-126342-20140104123118.patch</filename>
            <type>text/plain</type>
            <size>1827820</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYxMzExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0
ay9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggYjQ5MGE2NTZh
NWEyYWZmMmQxNTM3NjUxYTQ0MmZlYWQzZjFiZjdjMS4uODU4ZTE5YTc2MGY4MzVmMWEzNGQ4YjZi
NjQ2ZmJkODQ1ZjAzN2I3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE0
LTAxLTA0ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAg
ICAgICBbR1RLXSBNb3ZlIGFsbCBHVEsvR09iamVjdCB1bml0IHRlc3RzIHRvIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEyNjM0MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogdGVzdHMvQ01ha2VMaXN0cy50eHQ6IFJlbW92ZWQuCisgICAgICAgICogdGVzdHMvR05VbWFr
ZWZpbGUuYW06IFJlbW92ZWQuCisKIDIwMTQtMDEtMDIgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8
Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjE2MDMwNCk6IFtHVEtd
IERpc2FibGUgbGlidG9vbCBmYXN0IGluc3RhbGwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAwNDMzMzY0ZDE4OWY0
MzM4MTNmN2Q2ZjllOGRkZWJlZGE2NDdlNzIxLi5lMzVhYTc2NmQwNTM2M2E5MmY0YjE1MzM3ODI0
ZWJiMzIzNzkzNTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTQtMDEtMDQgIENh
cmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtd
IE1vdmUgYWxsIEdUSy9HT2JqZWN0IHVuaXQgdGVzdHMgdG8gVG9vbHMvVGVzdFdlYktpdEFQSQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI2MzQyCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9DTWFrZUxpc3RzLnR4dDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbTogUmVtb3ZlZC4KKwogMjAxNC0wMS0w
NCAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dU
S10gW0NNYWtlXSBQYXJhbGxlbCBidWlsZHMgc3RpbGwgZmFpbCB3aGVuIGJ1aWxkaW5nIFdlYktp
dDIgR09iamVjdCBBUEkgdW5pdCB0ZXN0cwpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtR1RL
LmNtYWtlIGIvU291cmNlL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IDgyYzZiOWUxYzc4MWFiMzlj
MGY1YzMzMzI5ZjYxNDVkYmE0YmM0M2EuLjI2YjllNzNiY2M0M2FkYjg3OTdjMTI4ODg0MjJmYzhh
MjYwNzQzY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3Vy
Y2UvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTMsMTUgKzMsNiBAQCBhZGRfc3ViZGlyZWN0b3J5KCR7
V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2d0ay9wbykKICMgVGhpcyBhbGxvd3MgZXhwb3NpbmcgYSAn
Z2lyJyB0YXJnZXQgd2hpY2ggYnVpbGRzIGFsbCBHT2JqZWN0IGludHJvc3BlY3Rpb24gZmlsZXMu
CiBhZGRfY3VzdG9tX3RhcmdldChnaXIgQUxMIERFUEVORFMgJHtHT2JqZWN0SW50cm9zcGVjdGlv
blRhcmdldHN9KQogCi1pZiAoRU5BQkxFX0FQSV9URVNUUykKLSAgICBpZiAoRU5BQkxFX1dFQktJ
VCkKLSAgICAgICAgYWRkX3N1YmRpcmVjdG9yeSgke1dFQktJVF9ESVJ9L2d0ay90ZXN0cykKLSAg
ICBlbmRpZiAoKQotICAgIGlmIChFTkFCTEVfV0VCS0lUMikKLSAgICAgICAgYWRkX3N1YmRpcmVj
dG9yeSgke1dFQktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cykKLSAgICBlbmRpZiAo
KQotZW5kaWYgKCkKLQogc2V0KERvY3VtZW50YXRpb25EZXBlbmRlbmNpZXMKICAgICAiJHtDTUFL
RV9TT1VSQ0VfRElSfS9Tb3VyY2UvV2ViS2l0L2d0ay9kb2NzL3dlYmtpdGVudmlyb25tZW50Lnht
bCIKICkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL0NNYWtlTGlzdHMudHh0
IGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvQ01ha2VMaXN0cy50eHQKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDk1MWE5OWY5Y2ViNTQwMzJlOWE3NTVjZjVkY2Q3N2UwZmRkNzljMGYu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdC9ndGsvdGVzdHMvQ01ha2VMaXN0cy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCww
IEBACi1hZGRfZGVmaW5pdGlvbnMoLURURVNUX1BMVUdJTl9ESVI9IiR7Q01BS0VfTElCUkFSWV9P
VVRQVVRfRElSRUNUT1JZfSIpCi1pbmNsdWRlX2RpcmVjdG9yaWVzKAotICAgICR7Q01BS0VfQklO
QVJZX0RJUn0KLSAgICAke0NNQUtFX1NPVVJDRV9ESVJ9L1NvdXJjZQotICAgICR7Q01BS0VfU09V
UkNFX0RJUn0vU291cmNlL0phdmFTY3JpcHRDb3JlL0ZvcndhcmRpbmdIZWFkZXJzCi0gICAgJHtD
TUFLRV9TT1VSQ0VfRElSfS9Tb3VyY2UvV2ViS2l0L2d0awotICAgICR7Q01BS0VfU09VUkNFX0RJ
Un0vU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrCi0gICAgJHtDTUFLRV9TT1VSQ0VfRElSfS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybQotICAgICR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNlL1dU
RgotICAgICR7REVSSVZFRF9TT1VSQ0VTX0RJUn0KLSAgICAke0RFUklWRURfU09VUkNFU19XRUJL
SVRHVEtfRElSfQotICAgICR7R0xJQl9JTkNMVURFX0RJUlN9Ci0gICAgJHtHVEszX0lOQ0xVREVf
RElSU30KLSAgICAke0xJQlNPVVBfSU5DTFVERV9ESVJTfQotKQotCi1tYWNybyhBRERfV0sxX1RF
U1QgdGVzdF9uYW1lKQotICAgIGFkZF9leGVjdXRhYmxlKCR7dGVzdF9uYW1lfSAke0FSR059KQot
ICAgIHRhcmdldF9saW5rX2xpYnJhcmllcygke3Rlc3RfbmFtZX0KLSAgICAgICAgSmF2YVNjcmlw
dENvcmUKLSAgICAgICAgV2ViS2l0Ci0gICAgICAgICR7R0xJQl9MSUJSQVJJRVN9Ci0gICAgICAg
ICR7R1RLM19MSUJSQVJJRVN9Ci0gICAgICAgICR7TElCU09VUF9MSUJSQVJJRVN9Ci0gICAgKQot
ICAgIHNldF90YXJnZXRfcHJvcGVydGllcygke3Rlc3RfbmFtZX0gUFJPUEVSVElFUwotICAgICAg
ICBSVU5USU1FX09VVFBVVF9ESVJFQ1RPUlkgJHtDTUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RP
Ull9L1dlYktpdDFHT2JqZWN0QVBJVGVzdHMKLSAgICApCi1lbmRtYWNybygpCi0KLUFERF9XSzFf
VEVTVCh0ZXN0YXBwbGljYXRpb25jYWNoZSB0ZXN0YXBwbGljYXRpb25jYWNoZS5jKQotQUREX1dL
MV9URVNUKHRlc3RhdGtyb2xlcyB0ZXN0YXRrcm9sZXMuYykKLUFERF9XSzFfVEVTVCh0ZXN0YXRr
IHRlc3RhdGsuYykKLUFERF9XSzFfVEVTVCh0ZXN0Y29udGV4dG1lbnUgdGVzdGNvbnRleHRtZW51
LmMpCi1BRERfV0sxX1RFU1QodGVzdGNvcHlhbmRwYXN0ZSB0ZXN0Y29weWFuZHBhc3RlLmMgJHtX
RUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3RrL0d0a1ZlcnNpb25pbmcuYykKLUFERF9XSzFfVEVTVCh0
ZXN0ZG9tZG9jdW1lbnQgdGVzdGRvbWRvY3VtZW50LmMpCi1BRERfV0sxX1RFU1QodGVzdGRvbWRv
bXdpbmRvdyB0ZXN0ZG9tZG9td2luZG93LmMpCi1BRERfV0sxX1RFU1QodGVzdGRvbW5vZGUgdGVz
dGRvbW5vZGUuYykKLUFERF9XSzFfVEVTVCh0ZXN0ZG93bmxvYWQgdGVzdGRvd25sb2FkLmMpCi1B
RERfV0sxX1RFU1QodGVzdGZhdmljb25kYXRhYmFzZSB0ZXN0ZmF2aWNvbmRhdGFiYXNlLmMgdGVz
dF91dGlscy5jKQotQUREX1dLMV9URVNUKHRlc3RnbG9iYWxzIHRlc3RnbG9iYWxzLmMpCi1BRERf
V0sxX1RFU1QodGVzdGhpdHRlc3RyZXN1bHQgdGVzdGhpdHRlc3RyZXN1bHQuYykKLUFERF9XSzFf
VEVTVCh0ZXN0aHR0cGJhY2tlbmQgdGVzdGh0dHBiYWNrZW5kLmMpCi1BRERfV0sxX1RFU1QodGVz
dGtleWV2ZW50cyB0ZXN0a2V5ZXZlbnRzLmMpCi1BRERfV0sxX1RFU1QodGVzdGxvYWRpbmcgdGVz
dGxvYWRpbmcuYykKLUFERF9XSzFfVEVTVCh0ZXN0bWltZWhhbmRsaW5nIHRlc3RtaW1laGFuZGxp
bmcuYyB0ZXN0X3V0aWxzLmMpCi1BRERfV0sxX1RFU1QodGVzdG5ldHdvcmtyZXF1ZXN0IHRlc3Ru
ZXR3b3JrcmVxdWVzdC5jKQotQUREX1dLMV9URVNUKHRlc3RuZXR3b3JrcmVzcG9uc2UgdGVzdG5l
dHdvcmtyZXNwb25zZS5jKQotQUREX1dLMV9URVNUKHRlc3R3ZWJiYWNrZm9yd2FyZGxpc3QgdGVz
dHdlYmJhY2tmb3J3YXJkbGlzdC5jKQotQUREX1dLMV9URVNUKHRlc3R3ZWJkYXRhc291cmNlIHRl
c3R3ZWJkYXRhc291cmNlLmMpCi1BRERfV0sxX1RFU1QodGVzdHdlYmZyYW1lIHRlc3R3ZWJmcmFt
ZS5jKQotQUREX1dLMV9URVNUKHRlc3R3ZWJoaXN0b3J5aXRlbSB0ZXN0d2ViaGlzdG9yeWl0ZW0u
YykKLUFERF9XSzFfVEVTVCh0ZXN0d2ViaW5zcGVjdG9yIHRlc3R3ZWJpbnNwZWN0b3IuYyB0ZXN0
X3V0aWxzLmMpCi1BRERfV0sxX1RFU1QodGVzdHdlYnBsdWdpbmRhdGFiYXNlIHRlc3R3ZWJwbHVn
aW5kYXRhYmFzZS5jKQotQUREX1dLMV9URVNUKHRlc3R3ZWJyZXNvdXJjZSB0ZXN0d2VicmVzb3Vy
Y2UuYykKLUFERF9XSzFfVEVTVCh0ZXN0d2Vic2V0dGluZ3MgdGVzdHdlYnNldHRpbmdzLmMpCi1B
RERfV0sxX1RFU1QodGVzdHdlYnZpZXcgdGVzdHdlYnZpZXcuYyB0ZXN0X3V0aWxzLmMpCi1BRERf
V0sxX1RFU1QodGVzdHdpbmRvdyB0ZXN0d2luZG93LmMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL0dO
VW1ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Yjg2YTczYzhiZWM0
YmRiNjFjMzQzMzRiOWJlMDE0Y2E4NTZiMTU0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFt
CisrKyAvZGV2L251bGwKQEAgLTEsMjA4ICswLDAgQEAKLSMgQnVpbGQgdW5pdCB0ZXN0cwotd2Vi
a2l0X3Rlc3RzX2NmbGFncyA9IFwKLQktZm5vLXN0cmljdC1hbGlhc2luZyBcCi0JLUkkKHNyY2Rp
cikvU291cmNlL0phdmFTY3JpcHRDb3JlL0ZvcndhcmRpbmdIZWFkZXJzIFwKLQktSSQoV2ViS2l0
KSBcCi0JLUkkKEdFTlNPVVJDRVMpIFwKLQktSSQodG9wX2J1aWxkZGlyKS9Tb3VyY2UvV2ViS2l0
L2d0ayBcCi0JLUkkKHRvcF9zcmNkaXIpL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzIFwKLQktSSQo
dG9wX3NyY2RpcikvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdCBcCi0JJChnbG9iYWxf
Y3BwZmxhZ3MpIFwKLQkkKGdsb2JhbF9jZmxhZ3MpIFwKLQkkKGphdmFzY3JpcHRjb3JlX2NwcGZs
YWdzKSBcCi0JJChGUkVFVFlQRV9DRkxBR1MpIFwKLQkkKEdMSUJfQ0ZMQUdTKSBcCi0JJChHVEtf
Q0ZMQUdTKSBcCi0JJChMSUJTT1VQX0NGTEFHUykgXAotCSQoWFJFTkRFUl9DRkxBR1MpIFwKLQkk
KFhUX0NGTEFHUykKLQotd2Via2l0X3Rlc3RzX2xkYWRkID0gXAotCWxpYmphdmFzY3JpcHRjb3Jl
Z3RrLUBXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05ALkBXRUJLSVRHVEtfQVBJX01JTk9SX1ZF
UlNJT05ALmxhIFwKLQlsaWJ3ZWJraXRndGstQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkAu
QFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkAubGEgXAotCSQoRlJFRVRZUEVfTElCUykgXAot
CSQoR1RLX0xJQlMpIFwKLQkkKEdMSUJfTElCUykgXAotCSQoTElCU09VUF9MSUJTKSBcCi0JJChY
UkVOREVSX0xJQlMpCi0KLXdlYmtpdF90ZXN0c19sZGZsYWdzID0gXAotCS1uby1pbnN0YWxsCi0K
LWlmIEVOQUJMRV9XRUJLSVQxCi1ub2luc3RfUFJPR1JBTVMgKz0gXAotCVByb2dyYW1zL1dlYktp
dDFHT2JqZWN0QVBJVGVzdHMvdGVzdGFwcGxpY2F0aW9uY2FjaGUgXAotCVByb2dyYW1zL1dlYktp
dDFHT2JqZWN0QVBJVGVzdHMvdGVzdGNvbnRleHRtZW51IFwKLQlQcm9ncmFtcy9XZWJLaXQxR09i
amVjdEFQSVRlc3RzL3Rlc3Rkb21kb2N1bWVudCBcCi0JUHJvZ3JhbXMvV2ViS2l0MUdPYmplY3RB
UElUZXN0cy90ZXN0ZG9tZG9td2luZG93IFwKLQlQcm9ncmFtcy9XZWJLaXQxR09iamVjdEFQSVRl
c3RzL3Rlc3Rkb21ub2RlIFwKLQlQcm9ncmFtcy9XZWJLaXQxR09iamVjdEFQSVRlc3RzL3Rlc3Ro
dHRwYmFja2VuZCBcCi0JUHJvZ3JhbXMvV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0ZmF2aWNv
bmRhdGFiYXNlIFwKLQlQcm9ncmFtcy9XZWJLaXQxR09iamVjdEFQSVRlc3RzL3Rlc3Rsb2FkaW5n
IFwKLQlQcm9ncmFtcy9XZWJLaXQxR09iamVjdEFQSVRlc3RzL3Rlc3RnbG9iYWxzIFwKLQlQcm9n
cmFtcy9XZWJLaXQxR09iamVjdEFQSVRlc3RzL3Rlc3RtaW1laGFuZGxpbmcgXAotCVByb2dyYW1z
L1dlYktpdDFHT2JqZWN0QVBJVGVzdHMvdGVzdG5ldHdvcmtyZXF1ZXN0IFwKLQlQcm9ncmFtcy9X
ZWJLaXQxR09iamVjdEFQSVRlc3RzL3Rlc3RuZXR3b3JrcmVzcG9uc2UgXAotCVByb2dyYW1zL1dl
YktpdDFHT2JqZWN0QVBJVGVzdHMvdGVzdHdlYmZyYW1lIFwKLQlQcm9ncmFtcy9XZWJLaXQxR09i
amVjdEFQSVRlc3RzL3Rlc3R3ZWJiYWNrZm9yd2FyZGxpc3QgXAotCVByb2dyYW1zL1dlYktpdDFH
T2JqZWN0QVBJVGVzdHMvdGVzdHdlYmhpc3RvcnlpdGVtIFwKLQlQcm9ncmFtcy9XZWJLaXQxR09i
amVjdEFQSVRlc3RzL3Rlc3R3aW5kb3cgXAotCVByb2dyYW1zL1dlYktpdDFHT2JqZWN0QVBJVGVz
dHMvdGVzdGRvd25sb2FkIFwKLQlQcm9ncmFtcy9XZWJLaXQxR09iamVjdEFQSVRlc3RzL3Rlc3Rh
dGsgXAotCVByb2dyYW1zL1dlYktpdDFHT2JqZWN0QVBJVGVzdHMvdGVzdGF0a3JvbGVzIFwKLQlQ
cm9ncmFtcy9XZWJLaXQxR09iamVjdEFQSVRlc3RzL3Rlc3RoaXR0ZXN0cmVzdWx0IFwKLQlQcm9n
cmFtcy9XZWJLaXQxR09iamVjdEFQSVRlc3RzL3Rlc3R3ZWJpbnNwZWN0b3IgXAotCVByb2dyYW1z
L1dlYktpdDFHT2JqZWN0QVBJVGVzdHMvdGVzdHdlYnNldHRpbmdzIFwKLQlQcm9ncmFtcy9XZWJL
aXQxR09iamVjdEFQSVRlc3RzL3Rlc3R3ZWJyZXNvdXJjZSBcCi0JUHJvZ3JhbXMvV2ViS2l0MUdP
YmplY3RBUElUZXN0cy90ZXN0d2ViZGF0YXNvdXJjZSBcCi0JUHJvZ3JhbXMvV2ViS2l0MUdPYmpl
Y3RBUElUZXN0cy90ZXN0d2VicGx1Z2luZGF0YWJhc2UgXAotCVByb2dyYW1zL1dlYktpdDFHT2Jq
ZWN0QVBJVGVzdHMvdGVzdHdlYnZpZXcgXAotCVByb2dyYW1zL1dlYktpdDFHT2JqZWN0QVBJVGVz
dHMvdGVzdGtleWV2ZW50cyBcCi0JUHJvZ3JhbXMvV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0
Y29weWFuZHBhc3RlCi1lbmRpZgotCi0jIEFkZCBhZGRpdGlvbmFsIHRlc3RzIGhlcmUKLVByb2dy
YW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGFwcGxpY2F0aW9uY2FjaGVfU09VUkNFUyA9
IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhcHBsaWNhdGlvbmNhY2hlLmMKLVByb2dyYW1z
X1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGFwcGxpY2F0aW9uY2FjaGVfQ0ZMQUdTID0gJCh3
ZWJraXRfdGVzdHNfY2ZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0
YXBwbGljYXRpb25jYWNoZV9MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNf
V2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0YXBwbGljYXRpb25jYWNoZV9MREZMQUdTID0gJCh3
ZWJraXRfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190
ZXN0Y29udGV4dG1lbnVfU09VUkNFUyA9IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rjb250
ZXh0bWVudS5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rjb250ZXh0bWVu
dV9DRkxBR1MgPSAkKHdlYmtpdF90ZXN0c19jZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVj
dEFQSVRlc3RzX3Rlc3Rjb250ZXh0bWVudV9MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQot
UHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0Y29udGV4dG1lbnVfTERGTEFHUyA9
ICQod2Via2l0X3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVz
dHNfdGVzdGRvbWRvY3VtZW50X1NPVVJDRVMgPSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0
ZG9tZG9jdW1lbnQuYwotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0ZG9tZG9j
dW1lbnRfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0MUdP
YmplY3RBUElUZXN0c190ZXN0ZG9tZG9jdW1lbnRfTERBREQgPSAkKHdlYmtpdF90ZXN0c19sZGFk
ZCkKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGRvbWRvY3VtZW50X0xERkxB
R1MgPSAkKHdlYmtpdF90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQ
SVRlc3RzX3Rlc3Rkb21kb213aW5kb3dfU09VUkNFUyA9IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3Rz
L3Rlc3Rkb21kb213aW5kb3cuYwotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0
ZG9tZG9td2luZG93X0NGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykKLVByb2dyYW1zX1dl
YktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGRvbWRvbXdpbmRvd19MREFERCA9ICQod2Via2l0X3Rl
c3RzX2xkYWRkKQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0ZG9tZG9td2lu
ZG93X0xERkxBR1MgPSAkKHdlYmtpdF90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQx
R09iamVjdEFQSVRlc3RzX3Rlc3Rkb21ub2RlX1NPVVJDRVMgPSBTb3VyY2UvV2ViS2l0L2d0ay90
ZXN0cy90ZXN0ZG9tbm9kZS5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rk
b21ub2RlX0NGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykKLVByb2dyYW1zX1dlYktpdDFH
T2JqZWN0QVBJVGVzdHNfdGVzdGRvbW5vZGVfTERBREQgPSAkKHdlYmtpdF90ZXN0c19sZGFkZCkK
LVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGRvbW5vZGVfTERGTEFHUyA9ICQo
d2Via2l0X3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNf
dGVzdGh0dHBiYWNrZW5kX1NPVVJDRVMgPSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0aHR0
cGJhY2tlbmQuYwotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0aHR0cGJhY2tl
bmRfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0MUdPYmpl
Y3RBUElUZXN0c190ZXN0aHR0cGJhY2tlbmRfTERBREQgPSAkKHdlYmtpdF90ZXN0c19sZGFkZCkK
LVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGh0dHBiYWNrZW5kX0xERkxBR1Mg
PSAkKHdlYmtpdF90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRl
c3RzX3Rlc3RmYXZpY29uZGF0YWJhc2VfU09VUkNFUyA9IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3Rz
L3Rlc3RmYXZpY29uZGF0YWJhc2UuYyBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0X3V0aWxz
LmMKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGZhdmljb25kYXRhYmFzZV9D
RkxBR1MgPSAkKHdlYmtpdF90ZXN0c19jZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQ
SVRlc3RzX3Rlc3RmYXZpY29uZGF0YWJhc2VfTERBREQgPSAkKHdlYmtpdF90ZXN0c19sZGFkZCkK
LVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGZhdmljb25kYXRhYmFzZV9MREZM
QUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RB
UElUZXN0c190ZXN0Z2xvYmFsc19TT1VSQ0VTID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVz
dGdsb2JhbHMuYwotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0Z2xvYmFsc19D
RkxBR1MgPSAkKHdlYmtpdF90ZXN0c19jZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQ
SVRlc3RzX3Rlc3RnbG9iYWxzX0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFt
c19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RnbG9iYWxzX0xERkxBR1MgPSAkKHdlYmtpdF90
ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rsb2Fk
aW5nX1NPVVJDRVMgPSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0bG9hZGluZy5jCi1Qcm9n
cmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3Rsb2FkaW5nX0NGTEFHUyA9ICQod2Via2l0
X3Rlc3RzX2NmbGFncykKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGxvYWRp
bmdfTERBREQgPSAkKHdlYmtpdF90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0
QVBJVGVzdHNfdGVzdGxvYWRpbmdfTERGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2xkZmxhZ3MpCi0K
LVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdG1pbWVoYW5kbGluZ19TT1VSQ0VT
ID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdG1pbWVoYW5kbGluZy5jIFNvdXJjZS9XZWJL
aXQvZ3RrL3Rlc3RzL3Rlc3RfdXRpbHMuYwotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0
c190ZXN0bWltZWhhbmRsaW5nX0NGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykKLVByb2dy
YW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdG1pbWVoYW5kbGluZ19MREFERCA9ICQod2Vi
a2l0X3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0bWlt
ZWhhbmRsaW5nX0xERkxBR1MgPSAkKHdlYmtpdF90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19X
ZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RuZXR3b3JrcmVxdWVzdF9TT1VSQ0VTID0gU291cmNl
L1dlYktpdC9ndGsvdGVzdHMvdGVzdG5ldHdvcmtyZXF1ZXN0LmMKLVByb2dyYW1zX1dlYktpdDFH
T2JqZWN0QVBJVGVzdHNfdGVzdG5ldHdvcmtyZXF1ZXN0X0NGTEFHUyA9ICQod2Via2l0X3Rlc3Rz
X2NmbGFncykKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdG5ldHdvcmtyZXF1
ZXN0X0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVj
dEFQSVRlc3RzX3Rlc3RuZXR3b3JrcmVxdWVzdF9MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNfbGRm
bGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0bmV0d29ya3Jlc3Bv
bnNlX1NPVVJDRVMgPSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0bmV0d29ya3Jlc3BvbnNl
LmMKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdG5ldHdvcmtyZXNwb25zZV9D
RkxBR1MgPSAkKHdlYmtpdF90ZXN0c19jZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQ
SVRlc3RzX3Rlc3RuZXR3b3JrcmVzcG9uc2VfTERBREQgPSAkKHdlYmtpdF90ZXN0c19sZGFkZCkK
LVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdG5ldHdvcmtyZXNwb25zZV9MREZM
QUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RB
UElUZXN0c190ZXN0d2ViZnJhbWVfU09VUkNFUyA9IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rl
c3R3ZWJmcmFtZS5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3R3ZWJmcmFt
ZV9DRkxBR1MgPSAkKHdlYmtpdF90ZXN0c19jZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVj
dEFQSVRlc3RzX3Rlc3R3ZWJmcmFtZV9MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQotUHJv
Z3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0d2ViZnJhbWVfTERGTEFHUyA9ICQod2Vi
a2l0X3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVz
dHdlYnBsdWdpbmRhdGFiYXNlX1NPVVJDRVMgPSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0
d2VicGx1Z2luZGF0YWJhc2UuYwotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0
d2VicGx1Z2luZGF0YWJhc2VfQ0ZMQUdTID0gLURURVNUX1BMVUdJTl9ESVI9XCIke3NoZWxsIHB3
ZH0vJHt0b3BfYnVpbGRkaXJ9L1Rlc3ROZXRzY2FwZVBsdWdpbi8ubGlic1wiICQod2Via2l0X3Rl
c3RzX2NmbGFncykKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYnBsdWdp
bmRhdGFiYXNlX0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQx
R09iamVjdEFQSVRlc3RzX3Rlc3R3ZWJwbHVnaW5kYXRhYmFzZV9MREZMQUdTID0gJCh3ZWJraXRf
dGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0d2Vi
YmFja2ZvcndhcmRsaXN0X1NPVVJDRVMgPSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2Vi
YmFja2ZvcndhcmRsaXN0LmMKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdl
YmJhY2tmb3J3YXJkbGlzdF9DRkxBR1MgPSAkKHdlYmtpdF90ZXN0c19jZmxhZ3MpCi1Qcm9ncmFt
c19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3R3ZWJiYWNrZm9yd2FyZGxpc3RfTERBREQgPSAk
KHdlYmtpdF90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVz
dHdlYmJhY2tmb3J3YXJkbGlzdF9MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFncykKLQot
UHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0d2ViaGlzdG9yeWl0ZW1fU09VUkNF
UyA9IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJoaXN0b3J5aXRlbS5jCi1Qcm9ncmFt
c19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3R3ZWJoaXN0b3J5aXRlbV9DRkxBR1MgPSAkKHdl
YmtpdF90ZXN0c19jZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3R3
ZWJoaXN0b3J5aXRlbV9MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfV2Vi
S2l0MUdPYmplY3RBUElUZXN0c190ZXN0d2ViaGlzdG9yeWl0ZW1fTERGTEFHUyA9ICQod2Via2l0
X3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdp
bmRvd19TT1VSQ0VTID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdpbmRvdy5jCi1Qcm9n
cmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3R3aW5kb3dfQ0ZMQUdTID0gJCh3ZWJraXRf
dGVzdHNfY2ZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0d2luZG93
X0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQ
SVRlc3RzX3Rlc3R3aW5kb3dfTERGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2xkZmxhZ3MpCi0KLVBy
b2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGRvd25sb2FkX1NPVVJDRVMgPSBTb3Vy
Y2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0ZG93bmxvYWQuYwotUHJvZ3JhbXNfV2ViS2l0MUdPYmpl
Y3RBUElUZXN0c190ZXN0ZG93bmxvYWRfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQot
UHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0ZG93bmxvYWRfTERBREQgPSAkKHdl
YmtpdF90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGRv
d25sb2FkX0xERkxBR1MgPSAkKHdlYmtpdF90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJL
aXQxR09iamVjdEFQSVRlc3RzX3Rlc3RhdGtfU09VUkNFUyA9IFNvdXJjZS9XZWJLaXQvZ3RrL3Rl
c3RzL3Rlc3RhdGsuYwotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0YXRrX0NG
TEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJ
VGVzdHNfdGVzdGF0a19MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfV2Vi
S2l0MUdPYmplY3RBUElUZXN0c190ZXN0YXRrX0xERkxBR1MgPSAkKHdlYmtpdF90ZXN0c19sZGZs
YWdzKQotCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3RhdGtyb2xlc19TT1VS
Q0VTID0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGF0a3JvbGVzLmMKLVByb2dyYW1zX1dl
YktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGF0a3JvbGVzX0NGTEFHUyA9ICQod2Via2l0X3Rlc3Rz
X2NmbGFncykKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGF0a3JvbGVzX0xE
QUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRl
c3RzX3Rlc3RhdGtyb2xlc19MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFncykKLQotUHJv
Z3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0d2ViaW5zcGVjdG9yX1NPVVJDRVMgPSBT
b3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2ViaW5zcGVjdG9yLmMgU291cmNlL1dlYktpdC9n
dGsvdGVzdHMvdGVzdF91dGlscy5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rl
c3R3ZWJpbnNwZWN0b3JfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQotUHJvZ3JhbXNf
V2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0d2ViaW5zcGVjdG9yX0xEQUREID0gJCh3ZWJraXRf
dGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3R3ZWJpbnNw
ZWN0b3JfTERGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktp
dDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYnNldHRpbmdzX1NPVVJDRVMgPSBTb3VyY2UvV2ViS2l0
L2d0ay90ZXN0cy90ZXN0d2Vic2V0dGluZ3MuYwotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElU
ZXN0c190ZXN0d2Vic2V0dGluZ3NfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQotUHJv
Z3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0d2Vic2V0dGluZ3NfTERBREQgPSAkKHdl
YmtpdF90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdl
YnNldHRpbmdzX0xERkxBR1MgPSAkKHdlYmtpdF90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19X
ZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3R3ZWJyZXNvdXJjZV9TT1VSQ0VTID0gU291cmNlL1dl
YktpdC9ndGsvdGVzdHMvdGVzdHdlYnJlc291cmNlLmMKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0
QVBJVGVzdHNfdGVzdHdlYnJlc291cmNlX0NGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykK
LVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYnJlc291cmNlX0xEQUREID0g
JCh3ZWJraXRfdGVzdHNfbGRhZGQpCi0KLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNf
dGVzdHdlYmRhdGFzb3VyY2VfU09VUkNFUyA9IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3
ZWJkYXRhc291cmNlLmMKLVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdHdlYmRh
dGFzb3VyY2VfQ0ZMQUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0
MUdPYmplY3RBUElUZXN0c190ZXN0d2ViZGF0YXNvdXJjZV9MREFERCA9ICQod2Via2l0X3Rlc3Rz
X2xkYWRkKQotCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3R3ZWJ2aWV3X1NP
VVJDRVMgPSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2Vidmlldy5jIFNvdXJjZS9XZWJL
aXQvZ3RrL3Rlc3RzL3Rlc3RfdXRpbHMuYwotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0
c190ZXN0d2Vidmlld19DRkxBR1MgPSAkKHdlYmtpdF90ZXN0c19jZmxhZ3MpCi1Qcm9ncmFtc19X
ZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3R3ZWJ2aWV3X0xEQUREID0gJCh3ZWJraXRfdGVzdHNf
bGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rlc3R3ZWJ2aWV3X0xERkxB
R1MgPSAkKHdlYmtpdF90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQ
SVRlc3RzX3Rlc3RoaXR0ZXN0cmVzdWx0X1NPVVJDRVMgPSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0
cy90ZXN0aGl0dGVzdHJlc3VsdC5jCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rl
c3RoaXR0ZXN0cmVzdWx0X0NGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykKLVByb2dyYW1z
X1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGhpdHRlc3RyZXN1bHRfTERBREQgPSAkKHdlYmtp
dF90ZXN0c19sZGFkZCkKLQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0a2V5
ZXZlbnRzX1NPVVJDRVMgPSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0a2V5ZXZlbnRzLmMK
LVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGtleWV2ZW50c19DRkxBR1MgPSAk
KHdlYmtpdF90ZXN0c19jZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQxR09iamVjdEFQSVRlc3RzX3Rl
c3RrZXlldmVudHNfTERBREQgPSAkKHdlYmtpdF90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktp
dDFHT2JqZWN0QVBJVGVzdHNfdGVzdGtleWV2ZW50c19MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNf
bGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MUdPYmplY3RBUElUZXN0c190ZXN0Y29weWFuZHBh
c3RlX1NPVVJDRVMgPSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0Y29weWFuZHBhc3RlLmMg
XAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtWZXJzaW9uaW5nLmMKLVByb2dyYW1z
X1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGNvcHlhbmRwYXN0ZV9DRkxBR1MgPSAkKHdlYmtp
dF90ZXN0c19jZmxhZ3MpIFwKLQktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsgXAotCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlCi1Qcm9ncmFtc19XZWJLaXQxR09iamVj
dEFQSVRlc3RzX3Rlc3Rjb3B5YW5kcGFzdGVfTERBREQgPSAkKHdlYmtpdF90ZXN0c19sZGFkZCkK
LVByb2dyYW1zX1dlYktpdDFHT2JqZWN0QVBJVGVzdHNfdGVzdGNvcHlhbmRwYXN0ZV9MREZMQUdT
ID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFncykKLQotRVhUUkFfRElTVCArPSAgXAotCSQoV2ViS2l0
KS90ZXN0cy9yZXNvdXJjZXMvKiBcCi0JJChXZWJLaXQpL3Rlc3RzL3Rlc3RfdXRpbHMuaAotCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy9yZXNvdXJjZXMvYmxhbmsuaWNvIGIv
U291cmNlL1dlYktpdC9ndGsvdGVzdHMvcmVzb3VyY2VzL2JsYW5rLmljbwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZWE4NDhiOTkxNmU1OTA4NDQxM2ZjMWU3YTA5MGRlYmY1ZjQ5MTRk
Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMApHSVQgYmluYXJ5IHBh
dGNoCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKbGl0ZXJhbCAxOTgKcGNtWlF6VTw1KHwwVlhpTGZx
e1dSNDJVJj1TT0FDPmZFWGw/MztoNThBRDB3ZSNRfVJZMVZqSjsKCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay90ZXN0cy9yZXNvdXJjZXMvdGVzdC5odG1sIGIvU291cmNlL1dlYktpdC9n
dGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3QuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggOThmN2Q0ZmQ5M2JiNGFkZDQyZWE0NjBlY2U4NTJmMTcxZTUwODQ2Ni4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0
cy9yZXNvdXJjZXMvdGVzdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi08aHRt
bD4KLTxoZWFkPjx0aXRsZT50ZXN0PC90aXRsZT48L2hlYWQ+Ci08Ym9keT50ZXN0PC9ib2R5Pgot
PC9odG1sPj48L2hlYWQ+Ci08Ym9keT50ZXN0PC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9ndGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3Qub2dnIGIvU291cmNlL1dlYktp
dC9ndGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3Qub2dnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA3ZjNhM2I5YzVkNjQ3YzcyYTE0ZDNiNDk2Y2M2MjZkNDEyZjhiMDBmLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAw
CkhjbVY/ZDAwMDAxCgpsaXRlcmFsIDMwMTMxCnpjbWVGWmNVVil8X0F0Q3A4WCpLc0FpKz57TE1S
M1pQTilLd05rUzRzSDkmJFBtUHRZfUd6RyptaihTNWlndW5tLQp6UXEmMmQyb1c0V3omPHgxQVNm
Yjg1JGorYlklQENKSVE1UzJMRmVCMGUpcyE1QDklcV8tfUMrVj9xX0c4VURuP0YKej57WlRNZCEy
bzxacClUdmZCPTdtUjVDZXBBdURFTj0lSjwxJlRXfkJyMG9rODJ5V1pMMXI4WT5mS05sfjdKQnxH
CnpFY0FybjVfakwwSEFJaGh7fUdUTU1wXjtgTlJyWiglaHpSWXB7NkQmViYwRVc0V0BjQW5FfWlk
JXolYUFBb0tAZAp6UzU4bjIxaDg8OFhCYyUqSENgJFBmQj1CWiQ8Xlh1Vno2c2RNTHFxcT5JJVVe
WmpmMTZUflJubGlQTCV4e1dHRVoKeiNGR0kpMFR0Yn1xflM/JEA+c3dZJUNlRzdUfGlRVnwxcWtH
Q1VQI293RXJpVXhVSjNJJV8mPlFUJUVEenYxb1hxCnpmRipGcUNxKnFKM2JqSzQxeF5td1hBVjBZ
SkRpRGdZdGlONHlvUlp7Vk9+IWc0QEx3JlpEfVk4ZGA5bWM9YV9rUAp6VWs/Zk1vUXtiKmFSSVl3
QEFrMlBaeDg+S243Jl5KNn19ZV4jd01QPyE3ZEUxYzVTWkNnb3BhREVHa2dKJUxIcjcKek5XcTw/
RTFtWE5DIUUmKHo9KlcrbyQlJkdpXjljbCpzKkUtJlYoQn5jaWg7eUZTYV49IXw4cG9yfUg8PT01
UDhyCnpVcnM2YkVCPjxZbzFZaXJgPXdKTXBtUGtVZGchWEIrM0Z0ej0jaEJeWjNxeSpmRCk9e0lu
QX1hQS1GailgOXhBKAp6dWt2X3IrTGJRR2xgaX55NUNGai0zcWhBdSt4LThFaUxxNCl8OXhhQmh1
cmBSI150MzlgJTQqNHllT3dqbkdCUW4KejcjOz5OTzw3VGwhQXpnRStrR3g9VWpAZ3RTPV5DfHUm
Wnl2N1g2YjUzdUZnPzwhTHtkVkx0KzZCZyRoayh8NyYkCnopaTxfPi0rKW9FZlJYPW0kYlFjK0BJ
b0FwQnZ2Sj51LT5LZV9oP2JVISYyKDhMSEd8ZCEycyZ8TjdVTiErOD9oNQp6U2t5ayZ3VVgqNGB3
QiZNJWcoZWAqUyk3Oz5YXisjbjNrQFdZWCleUzxGKHR6ZzdMTFlBOTl+cil8c0BvVVdlOyEKenpD
Q08pV0Z2PitsQ0lhOXdCRDQhZVBoUktwUn1BSSFNVmJVeEBBM1FMPzZjY2khRTk9QTBGIXF4RFdS
enlqN1FTCnojJmk+JGAhKVhYY1VNZ3A+aSZ+YFNUTm4+dnlgRERJbjtlNjd6TjNwKzJQPlF0Uz5B
TT5PNjtDODwhVEJASXpYMgp6Zzs2JWtuekN9PHViY2AlOV5wTH58MSl7ZCR7KUQ2djBVU0puU09I
QT5rNEJiWH1kVFVfYEtzSEFxZWpZYjF9bWcKej1IbFg+Q3I3dVIyb1IoK15+Xn0hbjx9RDBUJD9e
ZjZpaWZWZD9fMWFeSWt7X3N4dlJVOSlxUmctd0Y1MT1eQW0jCnojSnxPQnVrOWwobyM4bSk8cV8/
QFN9WVE7LTxjTUJYdmdoU2BJfX5VZH47KnBII2RxdVUwbT49alApPGMwa0Z7SQp6eV9kLWZoMVQ9
WjtvSnowPT80UDtRKnRzJG0mKXUlJUE3KkdvV2lkJnVLd1YmP25qPnFEXyoyZWNyPHlfMWJONCMK
emJ3YWU/cmIqdn5OcFpzVCZWLXgyMl4mdUJpfHplT1VfT1k9SCNjX3RvOCZCcjJyWiFHcGBhWX56
YT5YVUZMfmYhCno7dXVgKzZrRzF7Uz1FLXArU1p6KlBoMGk0fEJ4Snw9Mio0bm18RjkjeGBiWD5s
fmg9M0lIT08hZUIkfXB8MkY8aAp6YUBKLSMhNFp9bVVaJkgoTnNpSWVKX3dla0U9S3J8QUooe2Yw
IUM7U1p9R25xMDAzaHRLSkApX0JyP2lsST84dUMKeiUwbnoje2VQQWl4T0xobWU5e0wtWSRYNlQw
NmMxSnA0d3chc1ZFSTdXR2tgMzFOTVUoMURfc2wqcit7Rj5jfGclCno9QDMwaUs9bzlRMmpgUWY5
IVFneVkhPyszeDVvP0U5PSRfUjR2JCsqO0t2Pm8pWXx9eU9PU215KG1vVWtPV3J+Vgp6byZAMH09
JklGJXd0JDBpIWlRekducXxmTlEyZHt6QEkqZTVDXi1IIzNfUV88MiU3TnVZYzY7ZXFjQE1gMThi
ODEKemRINjVwaXU4cm57bzduRHBLejhhe0NfXnZ7fmg3flYmSzJVMEw8YyQxXmx6LSlIfUUlUlE/
YitAUV90YjRTd2FMCnppaT5APFlQVzVlKXR0bjcpdUxMSCQkdkAqdFlDbGUqfVpodHFHcj1scEc4
TWF1SGAyRSVNdHxDJil8bG1GdEF7dQp6O29IN3tALT0pVHVmblhGTygqaF81dndOaWxLT3EqaFg0
QkpRfjs8VDZRQlpDbXMkVjFydmB4fjBSSDlpdjlOdDEKekN7S1daRGsxaSQyPnw1QHBEcTJiaHh6
fHJgeVVmUkRtbmxNXmIrZklgendmJnhMOCY+ISVQK24halpkZVN0TXV5Cno3X280N2MwU0o1Q1Vs
PjhYRnghTXhwZE4lPnBxYz57SHZPaF51cm05JmBFQXQwJkR+byh0T303QCN3ZG9ISmVgaAp6NW5l
WjRxZmJKPj5JRnRTZEk5WnokYEZReVAmcGd8czd9Q20tQG9lZFhMYEJAd3gwfV9HWjxIWDxWS1Jo
cXM1eUoKekooTl5eVGQxZWtIWEZfXmhiT3hCVVBaeWlvd0R7eylqcmBRXyRkck9qVztjPmVOd25F
ZzI4YVk0MkdRYTM1T3dYCnpwIUxleT0yaW8mTm0lYXpyKn57eHRYYC15en1mfHwwM19hWXFjVEMy
MW91MDhmYEpyJERCSWBeaEclQ194TCpPVgp6MGQ9ITdBcj4+WVEwaWc7RmxVNFMpcmJ1b1kzYWgr
Z2BhKX1OVlopeHBvViF0RC1aRSghcEIqMWFQeyZxaj0mKjQKekQkMzJaM0NENEJ1OGQqfW5pYHxM
TE9oelBxUjxZTjxzcSVxIzs3UClHKkIoXmhrcGBtZW5BQHdgflh7ZmFUU1d1CnpmTnp+UkEpWmVU
Wj98LTRxUUtAJkQ9QldsIztHWHhnemU7cmtkYlAqWmRwQDI0MHJmb1IzS2J1MFVJMXlGaTJ4WAp6
NmxlYk1jRyYobjApcyQrXiNSK08pQ2lgZj1zbWoweiZOKSt1QXxGZmJPKUM9ZXxCXmtZX30kdEgt
NHo4VTNLaioKej8wPElqRkMxclhmfm0yOURDYTgrRy1APiVhQnlpN01wWFdTeT15USRAOSRsfXxC
VzU7K1k4OGxlJTEpJWVNZkBMCno9Pl8lOEZhdXkrSXNrNFJAKlF+eF5fQG1vKElGUH1XdTdQMjZ9
R3VCNHZocWt6JXtAMHxIPU40M2h0dkt7SXheegp6KTVgektXI0ltTypZZHlqRmFMayRXfkN8Wkp1
IWVYbVhCbmA8YHNMbElVT09GVT40aFVTcHV2bk9tKCl9YkthPzwKekpTMnE3KEZWfCtFMzJmTWM4
PU47K3RmSEVQNCU/QzdHUDR9U1J2SzhfQ0EwSzFsUGUhayMwMHxYc1ZERmRHdTIxCnpRWE9FYnJO
REpALVhUNDM5bFZxak0jdmVzdTUqeCpRcH1eKlpDR2VjWTQ+JH55Z2pzWVN7bTJaPEk8b2xVI00m
QQp6blcwcmdjQDJARzthcUpWYkxlTUVUJHxeJih1MD0kemJ1WFJmUHF0QlVUfTtyWlhKQHNqQU5S
aEUldW5NKmdsMl4KenRrd1IyPHhGOE92a19hJTglITUzUmxPKDc4RiZ1fnYpPDRHaGJ7MGBSM2x8
TyV4MldRZ2BIUjxfSSgyekhaTmhDCnoqfkk7YHArMnVYPk40RDhwI2glR3hvUFN7NUJoPjc5TWJ4
KWhOZzsmc1B9IWI/QGVUUUU0cEIqVEVlX3I1ZTRfbAp6aHYpY1VKSHJVVSFFP05DMiFYZShCIyFC
YWhLaDArdUlhQV5jcGBaR3paJjMpOzkpLVdmSE1td2M7eTFATGdzemkKenh7IW01QUpQdkVQNEds
OzwlZzw7aVF3WDI8R3I3I0JGZ1BVNXF8dDQ3b0w4T1pYTj4+LVh+VGUpez94IVNucCpQCnota31q
cEk9ZzQyJEYtVDRnTS1fSF9fan1VamtDY2Y0bjMwNDFTPFAtYUxBRHl0U2hFOVUrZE9YZVh4cGly
OCl8KQp6YVFEcDhkYWV6NEVhRl9Fej5uLTQwRlhwNEQ9ZGtYb3M5P25FSX15KDtMUHcjRjdqQmM8
cWkhLVUzIUBSdkxrKX4KenUre0chMzRkOD0wNHo4WDdQUWNZVjZIbjxIY0JXfDRebG5yWlJ1eyFO
WXg7XlVAc1VScEIwPXR0eSslVUk2azxeCnpnb0VWfWF3UFVGJGtnQmVlITtTUHVrITI7PiFMLV5T
bnY9NEVDcUEkcXdPWjMoZXlQQj1VQEUtT289dVF1QVR2Rwp6O2BgPjY7MT5We1E3V31zYE5UaFAp
ZnlJdSVOSy0lTUZgOz1mWmw2SzdKI3RXNTFZfTJHOFgmNj4lbSZ+eldAODEKelU5ZkJJQz1ZYHU4
PlB8aiglKUA9eDk0NUt5V0RwPD8rKDF2eXhSKzM5fXk/UU4oUGZYczlrLSMqS19UPntrQnNPCnp7
U20pX3FGNiRUNXxfVG8/XjZ9fXotZkk/SjYkUUJzNllNVT0qeTF6c1pDZEgkTVAhNkh7I0Z5Jjl6
Z3NRQXJ3NAp6YWwjK0JsZS1mYlV3ejRMb0hDJERsSCszWUtnZXZeQn1QYyEhOVR5cFRDTk9xdSs1
JTNjYHdBSj00bG4od0dyaEAKemFkZXdPQCR2VVp3YUdSLWlwWGl9PVhiQlR5K0xMXntnSFItKnhS
VzckZmNXJWRiI0tCYzA3cH0jdjl+Ylcoe0VhCnplKjBZZWZhVEVXYHFSK1kwVDBjKXpRI1gyYFBO
ekI0SnUwKGIlWm1zMStBKSZ7LUUmKHtKLW9KcjtQV31FfXYrNwp6PkJVVmptfj1eOGBCT1FFSWsh
OHA/akVTMDlEfWt5UFQtPGJJQElsdldyeSRIYmctP3A3UztEe3t8RkVHTm8+MjcKeksxSit7MEAp
dShQfDcxRSQweD9SV3JrTGNNKmdAWU5aZndDYU1AOHJaWk0lRUl6e1AzYj0+VnljJn0mVHd5ZkFa
CnpYVFV0OG4qUTJmelcqMzhYWFUmKjF0MG1geH0/fnhDRlghKHkwQUNMSzt7a3Y2X3NfbU0zI1Ak
XjRzTHJRdUw2PAp6VDxXNGNrbGFrOHZLTihGRF9na3R4cGVmOWpieDV1KnQjaU1WTlo5UiQ7JF9j
Mj9jTCFnQGJAQVFYaXZHNTB4OHMKejBTb0smNjZEfCFoWTR3SnBHcWE9UCl9NHQlfkQrXk4+XmBB
dSMkd3dwZyEqa3k7JFp7PFBRbT8tY0R0WGw+PVRhCnpMeGA/QXtoXyZMPD1OIXt0aSRePFZsJnEt
eDZoN1hzfiUycVp8YGNYSFJiWEhGc05pQlZVYUVxUy17ST48Mz96bQp6SEY8PUQ+XyoxLVgmP3J1
QSVaXyFZM2g7TlBaMDheYWxrdExeRD44SXlfKGdCdTxsbHxQZURRPSlCbzBgb24jY20KejFMTjJu
c3NkdH1RU2cqRFNReEVlVHVpVWJ3cF5NNjBjOSF4WXBAa2tXRXMtdnpmUFNFYVdTQ2I9VkYlKUQt
dUlZCnp2JV98TncwLW5lb0ExPTxHMFJXeHk2JElNNWVPQEgtMW5ZWGArWUlgSVdGcXRTNjZFeUJB
cjh1Myp7OV8wcj5Mdgp6RG91NmVVfXN+TyRIXik9P3ZfRjRjfHJsOUlOOTc1SmEzZD4pM05qK2Qo
ZzdrPGEpNlMoPWQ0NUwpb2NiRH59KTkKem9zKSQhPz1QKUFvNjxGR0BRRVFKJUIkKmBra05eaUQq
K3FGQDc2QjxpQS1fSF5ERSlWeGRUb1FWdkR2OVUyJWlyCnpARko8SFAyOW4tO056djY4Z2ZxaGxK
fWk+KFMzSH5aalc8ZXUxViRUZzdMZm97Mms9KF5iQE9CVE9vJEJtSzFFeAp6ZUJ+SGtHdzEpfXAz
TExgMj9hZWFOVHN9YmIpRmZnNmJpZiZFPWZXRDVPYy1ARFFnRmtkX0shZTwqOT5DcUVgVm0Kem5u
ajBuJHdwYjBPfEReVFImNXxeJjFIYzRfNGp9S29BblY0RzcjRig/RlF5aShFZEVIY3VVeT5CbGYo
SzBIcUtqCno4OEx1cjNBcE17UXYzLUQyfUIzVFpBSilvbig5dkN6PCM9eFBvc0xYM2tLJGVscH1u
ajQ4Yzc2YEB4UlZudipOYAp6SzV1XiN3QmdoMiEkKFVGR2ptbjV0PTR2KTtsQU89RFQtfiUzckVA
YF57MFJGeHVeS0hmXmMlWnVYZ2xNZXA2bkoKek1wOWxRI25yNjEofigwcGdpPTs2WElmeCplWVN5
am1GeVQ5TzVlISNlQ2Q1aVZ8UnFeTE5RdkRaclU/Rld6OGItCnoyek1hKWR7KzVSVH1kZT11ZztR
c29DWjJJNmxHQVBzfVcxSll9fWg7IX1GdnlpVEJ9PkNQezA3I1JTJWFjYVVudQp6VWREfiNMfCpp
STZrayhZK2NRfE04eWJqMyslQl99I0pMXk1wV3pnIW5+c3JGP1BfO145ST5xNz0qeW94ayF1SnEK
ek47VzhQMFUzfXJncUdTcT0jdH1WMyoxemEmRlNsSTN9YyNDY0tpMHVLcFBNcyRxN3xZM0k+JTBJ
a1JYOWhKWE14CnokPlQoYk85dFp6Nl52YVVIKkFpJVRIbXN5PE5KOX5qXjJzRkpSZX1saiEwTnNH
Yy1ORihgZTRgcntANEFPWGJ5cAp6UG9kalVeV0x6aE48UGBFcyhvT0NXPktuNT49OGcwWVgqK2V2
aiZrenYrPnQ2Xnk2ZGBFYHI/bmFPSHxAZEdXcXEKek5gOUx1WHgkTipGPkMqRnpnTzsoIS1tUjEj
TXxXQmxBTFI9YDVyeEF5cyshb3smNFZLdmdHQkVIbWI5YWY0bk5ECnpFcGJDaHVoZGFiY15oe2JT
MEZ0ZE9eKyhGQ3tpY30jXlZMVVhLOVIoQGpPQ0t0MG1YNkwpazhjXjdeRGBLQExfNQp6NSgkanJv
P0I4dXJ8TGt+STdxWWhhcFhNY25POXxJaHQ9ZmQ0fnB5bmZ3SVdQdVh4UUMrZmY4YjktbFltRmxP
YGQKek8tdzQ0ZjNSekNEakNeZytuVnx9LXhoM1B2UXt0MklefFRxY3p3QTc7V2BzNnZVKzAteVpE
WG0/XkR3ISF9XjY8CnpGWSoyS2p0aVREd3h7QnM3YmZYX09fRkApJTYjeTFONVpjNGdJVEJJanU4
LXYmNjU9UnhVYFdRY3s1ST81K1FSWgp6RzYpcyN1cGYoRlNHcS1yQSpBRldZOUl3RWtgMnNySzd5
eitxdUxANCZCcjZmIXNrQG5PcWhycFcoTVVtUVB+b3gKemwjPCM4Zmc/YUNBIX5KPlF5aVlRU258
YH5IYV5raWAhNytON3kpNHBxTjtRTmJPIT5rbmVLQm4rZCZSZDdGK09zCnpsd0hoRzwtZXt9clNT
VGRUWWwtUztxUzJjeVY7QSRyd1RrbWFtOzBRY0pgS0NeRTVURjUzfSt7JEJJJHVpRD5oeAp6P2tN
ZmwrNCFQQ0xBaUdJJSF8ekR3MTUjb3RQWWJ7WWY1e0F0Iz9DUFBlcjg5P2kyKXRHVy1OKzJUcWp3
WCYwaXQKektSRCM2Jl5Pc2kyQ05XMU9IJlcrTERWV0xsZ3d6OEArZWskbmIxMXAmTFpPNHIocktA
Z1FHKShZfTl1VnFRPkIxCnp6fSM3eVJ2TlJjZCtte0VFLTUmISRGbzkpO1owezFvOHtKN0ZmMWJy
NTtFaDFzaCVCQ19IcCQ+WnZ9NE0rczZyRwp6Rk0wXj5EU3o3UlA4UmwwY0hlaEJmOFhjeGhBbGEl
bHd6P0g1RWJxJk4wcW10dVBPSmY+TTVwTFhTRU05SHlmfXoKeip9PUpJRHFARCE1RWpUJDlhTDY1
bCNUKXY8UDFiQDVmaXhXdX5lTDVRe19lQHU0QnRSbTVTV3BMQiN2MTVMSSFlCnoxJHNYeG9vPEZs
OUxMSVRCTV5GOVBhVHJiOzdjVSs2ZDE2e1hLcmNPK2M+WH5XYG5DP3d5R2tLPU4xRk5nSDRqOQp6
YmtaMTw0OVEzZipSN0ImPihubCtfRH1BWlV0WFBnKntQTy1vQXdzYnZONiNLaWlDQSUoKzF4Y1pI
Q1ArSmVlPUcKekZZSHBnUEh0OUVOLX4tfkxSIVU+OHVKPGE8ZnUkalZiSFRaWE5BflghJkE8M2h7
V1RCREprLXNjP1pLc2hEfTNnCnpZTX45JXhzSXd5dDBUbUJhQjBhYyFIQmNMZ3lJR2s+cm19eTts
JjxJWChCPHxJTXA0YFF0IUFYRlQtdSZ3bDJHbAp6dDV0YztSYUJ0SHY2XlF8N2NVZTNlOT82PiM3
dnN1czU5ZChzd0V1TzJZZjZ0XkApcUlHQUZ3eGI+PWxLJiM0e3EKei1hSGd1bGx0Xm4hVTNQSGVl
c3MlVT1UbD13JWZEZyZld1lETnUzKS1aJWU7XlZnJCo3PTd4Y2xHJFNzYGlyYD4tCno+PnoqRlpq
aG9ndCQ7QTFKamUjbSMjYj0mZ0dfIz1zclYrZF5tJUstYVZlWUlJRyNRQ042P347KGdFRmtKdDc0
Ywp6PU5ZKHoxSTEpZkczSVZTaWhAVztCYVVmWmpMbEo3NTN+ZkxMMWc7PWp0JihNXmtZOHFeM2hS
TnQzVno/cUpAQTUKejBGNSZYQX19P0FKUEh8aTMrVzlldEJ8WiFgYDFfWUBCbFg/WFpEdW9mbyZg
ODxoUUYmWmZ7bSN0Y3JlKmVfMEY+CnpKQ2xuO15tNF5QKj5PKkllSUdUcXNufUNHPG5xazl1b2Eh
UFR5Z253YSNQUzA+eGF1WkZOTnwqWDdaKVBqc3ErPQp6UE9oblFze0dAZHNManN0Y088YSh6ZyZZ
WDhPfVNnKjtkOyNPcFN+fDlZKXBRTjtXZjFka09UbWM9cCpCNCpnLXYKenl1MVMqLUFadDFQWW1q
Yys5aztFKFQ8b1JtZyNke2tCeE5XOUdqRDwyK1YzTi1CeXI5VFkoKGJIc15XVmBBKWpLCnpiVmA5
XjJjND5xWD57Wm50b0ptJnk7QVhqRFVTfmBvTWgtfiRyUHtQIVNiI0ZrSXBSekVYezBpJC1kTzlY
VHM9WAp6OHxRU2swTzlHSG5GYzZWOUN3VztzYlYlNU4wcTx+N25WYW52YXJBYiVwJE8mSzJ7bmFj
fkkzYyVoYWp9R14jQzwKeiVPI2wwaD4jIWZ0OXBlaV93M1M3TzBzKGIoWnNmQTlNcmYyUHkkdmVR
Klg7dVYraUFOaEpxKEhtdzlrM1Z0b0QoCno2WGBpeDFWOzVMaz1kfllmWCkmR3hWS19wSWlpZDtG
cmVReXRWTUQ7PXpQbEdwTX50OzJuZUBkeShFUDkkY2FaSAp6b190NSY8K0NYZnZENDVweXstN19Q
eig4PylRYjUwcTltQFVeQzA4V3sqRVMobGVjNz44ciRtaDtmYWI/PD1VYnMKemNqZHJJVGFzfEZC
WGdSUGhIWj5iaiZpWDRqK0pDSnIpeTU9Syh8YXFYKWlnSFUrUSg2dzZQN2NzSjhCKWlJMEp3CnpR
UkM1WlJuTjh9NVQjQUd1dGU8NWluflZ7VSE2RldVMSM+QyVvVjVOTXgkLUdqVjdJJnk9PnFgYT9H
I1JKUENmMQp6d3N2czs/YUFLQFp2U25gQzhwemluOGJiWHI3ZD9kJTtkcndQQV9gaztuMzRGOGBA
MDBvdzlnVHJ4d3FGWVVucW8KeiFQSmRaPD56XilnNjxyMHo5VDQ+TGx3NFZ7a2NrfGQqJmlWRiVa
JVh0UFBRPksza0c5a2t3cDl6KFFORkJQdDFtCnoqRiMyKWlhM0c5IyNvWGBaNE4qWmd5LVJyZUZ2
UExTcUAxJGRHNEhJQHNTKWdaO0xCezRKMXtQRF4rSSNEVUNFVwp6aDZVZlBxTD5DVzclaGhreEl7
Uy0zcURxNUdxbmhyKEFafk5CP01wfHotcmxOMHkrdiZ6cHlIRDtqPChKKjV4QzEKejlmWip9Zno3
dmtRbD9YOTxpNzxScHlhOX5jTHFEd25RdkhCUCRVanR4cEdveVNOTyM+aDExbHtxVn1kcjV1QEUl
CnorM1JlbVFoMGQyV1AweDQ4djhqLTFNWTsqcDZraVF3QSh6WURhZnJkQjM3RShnazgzWF85YHti
TSNiV1JISWoyTQp6WkA/PWo+cWNAPDMtWVZqMFpWR0tOJGdvaCZxcUZvWGJ0WGY+OHJrcyN9RHA/
bU9WWX51M35iIWhZRk4keD1WOU8KejxOTUVrLSFiJSVKT3FtUDdzNl8xa0RUbzV6PTwlU0JSPHhP
QFdBbEFzdU53aEJmQzVUQWBDYi1obyVVYzhYYWh0Cno/PmMpaz5GLXlZVVV4QUw0Km9lJXd1QXl1
KVpIaWk3UFheMEZ4aTZYaVI9OTF4RnVAJEJ0Y3s8TUZSalNBIS0oKAp6cTV4KXwoYjx1LW9Db2Um
NlMkfFc4U3xUSDJIblJqVWBrYERVXm13cjk3MExYTT5JPy0ySzNRYCpwTlpsSTEqP2UKek0tN15Z
R1k5LWREcnBXZHhIK1pjUypRbT1kTmpwZzJuO20jSz9zNV57TUhxS3VkIUpwJFRHKyVfZiU/M1hw
ciYjCnpuNW5GJVg0WEV5Y0pkRzloMW1KRlo8Wl89TEBANUJYRzl3YzhPZD05K2glan5mK091eGB8
akNXTWE1IS0tfDZENQp6VEE0VVpKVjQ5Ujw8SzdYe2A5NzdQMkZLfUZgbSVGQkdWPztXTUotS1JH
UEBueWtoRHRiaFlQcUpybyY2WmVhTE4KemxAc1JPU09jYEJXJkZFbF8+fi01SXgmMHxiTnVCQUI5
ZjB2Ul9AQnpuZkhMa1hWJnRAYXNrblZaQ2ZpdUdCblYpCnpyTXt+OSVzYTcxT2Jhcl4qQiNKfVI5
Q2VffExHcShlUT1RYkNQNWV+I3J5TzdMdk8xYEA+ZFUxaHExUWheNjc4OAp6X08/V3JKMCFEUzUo
VkhnOVZQZ0ZWXjh6bFJea2BPWlpEPlB7b0AqdXJPdj56P0dfYHxJTWZzZSRXPlBIMDgydj4KejNA
OEYzJEM7KGRNPTxBNnpAMTdySDFyWHNfIypPJWg5PEc/emxjRSVOWlc5O2QxfCpBOztgcDFhRkxs
NHNUK1kxCno+bEtyUFlFdj5XUyNFJFh3SEM3KUIqcXFtcyVfJjtDPk5VPGgpZUg0Kn19ZTUpKjQl
d19YU3hhNFpFKntNdGpUZgp6SH1weSRhUVk8Sz0rZn1fPkU4PiFPIWg2UnpCclFBXntZcWAjJHZx
Py00SVo7QyNCNChaZUlPOCY1PFFMejI3UVEKej5aSHlBaWRtVl5USCZkKzF3ailqY1c1Jmp7ZlAt
b3I2ejw+ZzBRKmJaOzUqYD0qT1hKcD13RSlMYCRxIVZCMSk2CnpPYExPPD9mcTMtcXQhTEJCMTxQ
diNTUlJfZFUme28ofkczRil3YCpMb3QyeDhIRXVFPVlyYjVqSXtRPUFRX3txUAp6KEkmMWJEWFFI
bEF2fnNUSXlZWDBhUXVBeD01NT15KXRqYXx7e0dQPmZBOVdUZ09tT2VLRF9Ba1lGelF6XlVJWT4K
ektIV0syUTJ6UytPbyFmWnVqKUo8PUpebjJjUl9ZeFVxciUmTGM3WlpRdH02PDQocVFJQWA0RVAx
XjxaYHU2blVgCnohOF9HRUhTOEl3ZHtfMV58SmBUcl9RTzdzPzAyNm97aDlNTiNrTS1UQDtqSGxw
VV9fcUp5S2FgdiQ3PFh1bDNmZAp6P2lANntiNXB+UEJeNFV3WjtkdEs+e2ZhQzFAYiE3XkFaUCZT
V0c4b1FESUd0cXxvQmlvTipWS0pXPU96NipXKn4KejZjTy1ybHVaZiokYmZgNCZpaTIxN0dAWjZ6
QSpKNEd9VCg0M0g4Q3FNKH11VW5NPyhIYW0yNiUxKjtBaEw+VytoCno/SnpAQnFkPnpoYVh+cEtK
TGdyQ0hmNmlMd3omM3x7cis5dUQ9an5FIU44aEJvSEMmOWx4ZH05KyF4ODYremtocwp6dTlMUT5t
TnJTcWotakVFVlNFPHhEeysqc0cqV0Q4SD9iU25qejBLK3ojcTJtXnt9VHwlQFdIXkElVDUmZFZZ
ZloKejdzSDBEPjdKQGk9bGspMnVRfSZAQV9jXzxjaD91dnRTbkp4diYmbT00RFBLZ0tqZ3xHczgt
NS1SWlVVWDNtQ294CnpKZFl9RzsjaD8+eFlybDw4fW0hMWstanxOcVpWeCZpPGlCK0l5eEZfYnZh
Sit2TEgmPFBkPDwpcyR0Q05CRn4tZAp6WlZ8TjsjYVJ0V3d6fnhQTHE3N0p6MUJvMmcoUkRWUnwj
Sns4OVZkR3FrNjNiYnsjMnpxe3ZjWSF5MnpfPllMeEYKekJEJmBUZEheIXBURz1yU2lkWXo9JTVl
bnQ/RnI0UE4mPD8oWE9VNy1CSHI0U1phTWltdVV0P1ZHaW5ab3QoQzBqCnpeX19LUyFUTXBiWUI0
KEJZJU1QbE4qQTs3YGUqZyQ8fWo+R0pteUx8IVJzSiN1XnBZVmRhaHpjOHshazdOO0hTPAp6Qzt5
NU8kRTA5TENaYm5OSTN4dWxXcVlAe1hBYFFeTXR7NCVKPl9FWnkmY3R2P2Foe1B1KUJnPmd6VGpv
Qj4yZyEKekJYMUxQPm5qOD0yNWJ1X05+Y2VAK2V0Y1VUTU5hXl4tKEc5TDJiTCE3O097Nk1MUjFr
KE09YlhZe2RRUkRpTWVqCnpeMiskRVdRWnw7cHAkK1hXNXk4I2BLUlU5LSp3JXt0djZrZD8mIWth
d2NeSk04KjN4X2J+R0YjeFhfMkUrPWYkPwp6Xno/YGI2VEBpdEpiUnVXN2N5RUF1cTR8TG4lZCEk
JnNwQm1jNk0+K2hLPTB7UjtBTzAlUTwwY0N8Zj9fOT1fSjsKenQ+YExheiNyOGthaXcxPkBwOGNV
NGhKTDJfPlk7IyNyRkd1U2V7bjl0SU1EUkUpOE1EZkgxfjAtS15odyRKc09NCnoySDY5fVY7T0Vj
QWxtQ0dWVSV2bXduKFdIK1opaChxNWo9RVlKOGV8WEpjTUVeV3crV180PVI9XiR0MV4/VGBAMAp6
a01EZkZTQElESlhxRHkkO1dIOSpyV0c9cVEzN0ByMSUrenxJKXV1QTE9RU9CWm51bloxZEF9LVB0
YlhyRmdNSWAKelVCYlFxM0ZkbDRBe3VuV3hXbWVXe15zdDI4TFJONSlGRF5GZSVCKjRBb1JgOF9i
KntUTnBhLXRAWHpyMU4wIWUzCnpnPmtSN0s7OVY+Nlo5K2BYJFFpbWR9XjRmbFMwcSVJe0RpQjY1
cSthRkdeUj5jcT1GX0dZS2ZHZ1FgPzNxUHZeaAp6aUpzb1RtU3hUbypIQXcpN0I4YFVofXN4NiZu
TChqKXdGSzQkMCNtfCNxQztvJDcwLSNzUGdEOF48am14Zl8kcnIKek1BJjg5N1BsZ1pAUnJeJkhe
YUB6VGZZR1VVekEzcTxXWXVmNTJ5QCZzK08oIzAmVFhKc1pOdUtkRk9YdiRMVTJqCnokKm1ncSRT
N3pgamRNNk1weUBIWXw1T2lGRVp2fjtAX0NrKXw2OzNtYDI3d3VUWT19fExmPTJlSlpgJVRIOyU8
VAp6XilHc1dlSC1gNTNmIV5FT0x+ay1JZilgem5gV0VZa1E3fUxJOTJNU0lGWHZJV09oKGs2U2Zk
e25WTDkoTCtBfUIKeiY/RkJtT1kwMm12KFdeQ0lZemB8QHtqUl9nOSl1ckV7eVRUbzNrZj8zZ2Rg
YmczOzEzRUp5dzwxbjNCaChoZkYjCnpsOWRmdSooTkkzVGM/MX1ZWHcxSXZxXyMyS0JkKXgkSyQ/
KnludGpzOHFENHpLM2hBV1puLU1qe2AybykmUUVmVAp6ZVhaKl5MWnpTZkFfSCpRUTE7Z1opVCpG
Xmk1KjlLLVgwJTJJdj87TkNaJUJEYG5AJT1VJiMtfTNtckRxLUxlU28Kem1YP3Y4R3ApSUszUWp6
VUo9YzVKTGRFdiphaUUkTSNwSEVOPGV8RD1CIzF4Tz9kY3dXZk1kMG8qa0sxfCVNVWVlCnpGfE1e
Z3NIdUgoPyN4PTs4SVB+czB5Nk5PN31Zb2xOQ15YaFE8eXhwYSMyKTFHdyV1KVpOPUdmRmdEY1Y1
eUA4Wgp6WT5vR3BAekhBOXI5Xj4kKz5XaHtrPTRzKE8rRXJPSDF0Q3RJZTV3QiY0YWFpKiZmJEZO
eG0tTUZMQFlzSlh2S3MKemN2UDdjPkI3d3FzaTVST0BFa3xWeEBlYnB4SHcwVDxxfiVBTDdWenEm
PSYzSkhGUCFAT2R2MiNUOHdiV2cwK0YjCnpaaU4pVTghfDFMeFhJZVNxa3c5TkBnUEt0eV4oQkIx
eyNJSHQ3NmZTXitLTUgrcXtQKSRSYF49ITswKmdWMkw4MQp6dypkVmhQMkVEfVdjVFRhTlhZPyYk
XzxDPDl5K3Q3RUVubC02ZlJoMSVzX3hVNDNzSnBwbylPY2lmazVTLUN8PmwKek8wWUt+P35tXmBY
QE92WXNBRjxJRE5Pc04/YyhwWnUpYkhldG9aeDJzfG4xYWIyMSk3PEVsSjdRa3RKdkV2fGNNCnpV
cj59KD4+VTtBSWpERjszSDNnSF9TdT9+R2VobkBWaDwlVkMtZnw8RiYhTnlyQ0JhKiVtYUoreC1N
fHFDczkrJQp6bVA/a21sQXNuYjxARyk5N2NhJGppQU54UERMWnBxcnxVJHc5QS0mQnk1aS1DPj9l
K1I4RnlkQUd2YWJGaSokNCoKenF5RHlSe1h9a15wYilmWW9vPkJ8WGV+TUdPLTlETGdxTl58N04w
JW9BRy02cCoqNjhzKlNtJiRJY1VGTD42a0EqCnpQLTdvbWJzNCQzKHRJalYtNXo+KCk2SGM9U00m
OU9DSHVUaXVIUl9DaWBWczxeb1ZSYzl1YWk0P35seWdZT0F3WQp6WUgoIWVHSXB6LSpJKXliNGBt
b1ArJX5uZSV+YDZZYmVNeFpLPCMwUyFjcX5yKUVFPmxjP2xWXkJkOWR3QkpATmQKeldOayNTeXd0
Typ0cHZOPDEqO1YlJkV7JjtAPnJaK1FDMUNmPzJjQWdRT3RsREFkOW1AY2J3NDRBZ2x0JSlSQlFU
CnprZWl5T0ctUXJWS3VGZkZZP2N8SUhaMEpDPE8hOSp1TXpVT0xAVko0a1kjUThOT3JMIUFmdXhB
UnBDeGklOT9+SAp6Wn5PKyZnP1YqR3g0KlMrXkUwVFllT0AtNjc8MDNwb0ZNaH1fRX5QanhWejA8
eF83PDNGMj81JlVWb2c5SF5qXiEKem9IbEVOKiM2bFVXM2J0LW4hKVhrYzdxNlhuPGItIy1ndnhF
az1XPjsrVUpYKW1BWVNkJU14RHB2OVlWUWdwJCswCnpLeGNvfHVUQWB8KmklKlNOUX5HNEJAMyM5
bXQ0azxwS3VlWnBlKCVRMzBzVkY/V3l+bDU3KFcmbTQ5MkB5KStyawp6Un1CJVpqd1ArTGNLbylP
QVZ9JWo5QSNSZ3daciV6LU1TR09sVEQyV1VBK0RnYVpFNUJlKUMtS3tMRTExcSROMnoKeiplc0la
MSNvOUNqbjZzI0piQ3JYRGF4VSV7dm55Vml4Q2k4aDsoa2g2Yy1aQ1d1MnlCYnl5NiRfYFY1MzJf
TztKCnpYYTx4fSQyPCNVOEchNjZBJlBMRXstUnEmTDhLRmc5Zy0jRDBuayVHcngjaEgrSmFDPkRQ
OUx1O3klQG9zeHU8NQp6NHI5d2c0WE5WdDlFYG1WKjUjTDYjeVVrbjExUWNBTFdLZTJASF5yKWJr
WSNDZGNvNSV5YjxNUSFWMjZvP1JGVXAKemFiSjlXI0JhLXZKY0MmQ3JOd1B+MT5SKytuXzxRdmpl
ST4rcV40OSt7QkEhaHhGQTItUjItV29VbFFhby1ROFc9Cno1Kk9RP3pkO2RsRzsrIzMjU2xTPWEt
NWpKVnRxUkxsTj1aNCV+Oys3N09SXzB4MGUrWVVtRHFxVHVRSnt2OVpqYAp6PCo2cH1ORDN5cnkt
fm40WDlRMUFkbkUxQkt6Izs4ZHFWTkR5am8tVCglQCV3JXlRRlk9T0FmUmBzYTxDJV9CYHgKeiNM
K2RLTVJ7Q3pwQm5BVDc0fFYqYFF+RmBfcVkzKU0kTENBSVQqSVZrPCF0KkhZM00wQE4lfE9rVjE4
Q0N1WmZQCnpONllVfHlMSlhfYV8+UyhUakpXQXt2TlRkNiF+LWRrTDxzNVVKVDlRYj1qVDlKYjko
QU80V3oqIVlCc0VoNypkOAp6cDBoWSQzXyVmODQmeylyMmF6KSYlcTd7ezVzdTUpJk43UzR5YGUy
KUJzM2ZxTnVFJmxEVn4hWXNiVW50NCV8VEcKeiZ7WkpOOTN5c0FwditaTkFCTD5WLWlVTmVyIX1a
bFVZQmlFcyozO3dHOGE1ZDZPaTFPT0pMdiV6NHF3WkZ2al88CnpUVnglNTFBZXo2S2tiPGkpfTNn
MHN7QXJZJWJ1R1BeXz1RRldoTCZKSEpuO3M2eTlyPFlJJU5rPSQhUWlMcE8wcwp6bX55a3FXclIq
X1cxTE92cnR3aTMxYGkpd1Fkej1sK3VNfFU0MTkyP2lpaXVrZUw7WF8lZ1ZkKnV0Sm5lV08xMzkK
ejB7XlZ2a3klQHI7aHN8X1lwWWk7eCZLKnJxRUVNZDttKmgrajRXYEgoI2w7eT5+QjBTKVU1Un1L
MmsmSGBoQmBOCno0Szx+Tlpfb2VNS0B8Sl48ST5kZmI/LSMmcW1QQDBCTTxYUSlBcSNYbkdMdVIh
czQ2QC15aDBtSktnbkV0cWN7dQp6MzYkdl5CaDQzZTNGd3JQMjNObH5OWShQNFB1ZFMzJVZicExf
e3swcDJsdUVnTmNjRzdPS2k1JU47U0J0eD1VdCsKejNRdXZqYzA+VkBDc29OWnJqWClfbC0peClU
YHw1P2dFaXZ8MEBrUGxYVkMpXitjUnAhNDlIXy1MeVJkZGBGdWI4CnolMXd2RXcjOH55eVVgI3B2
VHNJe20qeFRjPk9iPEVqP2JWdUhYTEFyTUY0M0p5RUNpLV87Y35WaCt8PFIxWihGOQp6UGdHU2Jz
T3FhXj50dk83XnY+RnEmLVVAQTRQJkRIaSlYKGojRlpCd2A3T040TCh5RiVAK0spSEJrYC0zYlNk
TVIKelZIQEAmKlNIPUcyel8kTTF+VTs+JG0zdFU3dlZ2P1JTKzI/QnZGYmQzWVNKWTRwPSF0eXs3
VGB4Q0dWPTNjLW9yCnpJUDBYdHdoSHMyQ0g8WVF0eS1ge3R8SFNocmUqUkQraCk5TExBcTtgdXYj
Y3clSCpPQkdDaUQhcUhnRjZyRyVONgp6ZUNpX01XKFheRzJhSyh6JWJ3I25WZUM7PVJaZ1JtP1d3
aU8/bWxiT3pWWXlqQSZDajRaLXByU3QjfVokc0RDajEKent4ODJ8UmxlfiZvX2VtO3YocD8xMj8+
clpMTm1qNT5mIUcqd3s2fEw9KzImKUNxSGFtVCQ/d2UhSXNgfkR7WmxeCno8K2BLJWR3YDY1MmJq
d2EwR0FSLWhRPjxCZ2FIRSVwKjBzI214S3o1VldJM0AlUy1AJjlFdzh0UUxDdmwxWDUyVAp6bTdX
fDw1UnVLWEkrZEVMMDZ0Q1RZQ2FsNW82KGViUlNwSDt8MkR5ems1I057VT9DN1A4Mn1hIzdfVWN3
dU5SQiUKelYlelpjdmV6cGZKO2IpNUVSNFZKOSFxbEtWRWg9TFV3WmNabXx0fC1fOGFvK2I/Y25y
NFZ2UUVRNGQrVHgxTyZ9CnooTH48N0RNPndFRTVZeDBuWnxnKkFETFk+TzZvfXVZQUB5ISRydE5N
bVJjKlA1ZUhSfW9vQmZkJWZ9WGRUZCRfJQp6MklkVn1CU2RWZypBdmBhZE1XRUZze1RyMV9IZGhw
Nll3WT9jJHk7NkxYUV9NJHhnMVcyaypPdVFpRGJ0UVNOOXAKenQ7WEVAPj5WcEJYWWE3RDc+fXE4
SjFuUHViSDR2QFpyQUdJR2wjeEFVRUMoR1JkIThQbjZJV15ibEM4Q1Y5ZFB1CnpTc0RGdUA+Nnh8
Qn13IVAtfUlgTllqKjlEWjtpUnFRK3dzSnZKSmdFYTk9PVMqU0pOO3B0UyVVNj5TVXpDPCpwVAp6
dGhxeFd0Sl5kQE1hMFVSMis9an1xKil2WlFKST04cm9ZKjM3Yj9sd3ZmSldVZTIjX0lWe15rPWxx
aitUQSlVczUKenpGQyRfPm5AbTskKldzKDxtTjtrJnhGUG9xZ0RPYDcpfnpLNGhjbXApRG89OTds
OUZUbjttTlY5eXo4Zk1wWU96Cno8cmojP2lVSHVQRjlMU3hQNUMwcVk9R0E0eiopWW8rfClRZj0y
eDJQYmJHa2c/VE9FRS1mWSZFPDsqNEtpT2lNTAp6ZWc0TT0kOSRwJko0X1JFcllHKCNfZFAlRFZy
aUchPkdfZm93Z1BefENMSzlVOSQ8IVVUPUh+Z1JAZ2VuPE1KRGwKeittT1gtWDRoUnVWP0JkRFhx
IzU9N0szazBUJnd+MDVRJDwtMShgYHVCVjxPaE8mQEplNCRYVm1KVl81fnRjYFV2CnpKTWAwTW8/
RG1VXkYkdGJINT8tWHFNdD5sKkVwJkMkUG19OT9APlZ9ZVlFfEYkRnpheXNqSmBLRjszZlhgcF5A
RQp6dTdUKCNJMl89fXYkM3xkTGdpJD5QKUU9fDU1YXQlRVJWdnRXY2UlaFdFS1h+UUp6O3U/algp
MU9SWnF4U0B2Vn0KekBMeGBpLUxOTUU0aHYyVkc8Xkw1c1NiQUQyT3MpU3pmJWlCMXA+WmNaQV5A
R3tkJm9VXl93Syg0S2JXQj9uWClVCnp5UXBgUDt5QiVLYzdEYXY5UmsoPkBEMm5VeTQ/WUhFaDVg
P1Q7Qm12SjFWYjAqZ1pmOXY2dylLJEsySlpnZ1BGbgp6Jm87LVgjPz5ENyVmVHZna0x5X05sTUVH
cUY+TlQyJW8yOEVFfUM8VUJCUVBhY0UlJDczXjh+ZTEtVGh5JEV+e2gKelc4REUoMVoqfFFzbzg5
NnotbUIpS1VYdmtJVHBySzY8Nm9DM0J0SiNZOUk7YSFnR3pTWXJkY2lRP3FocXB2YjRlCnpRU1ow
dWJ1QExDUHFrX0ZQSl4jcz4oal83eWBrQSpFY3clJGFnPjtiJXo8WjklfjdYQHg/LWw0NlUjNX4j
akcjZAp6Q0RSVCl2PCl+OCRFNTRRaX57TUFUMTVAKjVhKHdeTGopVXVOKGluXnp3OChZdzF1c0Mz
SV5vKnRkU1JZOD1KaUkKemx0eVdMJDZ7LUZYNXpWQktNUUs2R34lRGxqPiRpUTNVVTdCOGkxNmNZ
fE5xV0lMfUV8djA0X2RhO3hYSz5YeiVkCnpvXjVmTGp2eT1MJkN9azd1Q1JFUz1IbEYwdi1QTjUp
em9eQT1HSVAoNHoreXZ3TGFTRk91RHBLNSN3ck4mUC1WNAp6Yk1JcV5vbjt0XypWN09ASnsoMjNL
SmFWXyFDYnVAOFI0Ri0ob0ZeKk5ISGhvR0I4eDZpc1VmYnAqaU99a2gyVkUKejZvNncmQWQjNiRH
TnttVjJiQVhEUyR4Z30+TEdRcEF2I3I3ajJWekU7aiFCUVZzJiMrMG5vTDlqXmtMfXRncCZJCno/
STdqIU50QDNeSmp5Nko4YmB1VzE8WmNpYVVBPl4zSUwrNDFxVm1nV0BJdkpmTFYwMHo2Z19VTXBJ
d2Ypb1g9dQp6ZEV8PS1gLWJTKEBVXnJxIXYxQVI/X01oX1dPaT0hJHdtdG9qeX1tVkhMQi1VdH1O
dG0oemY7dmJMKmcmWCpvJlQKenJYPmtJbyNHOVFqWj5wTGdpR1NHKW1fdlhua0ohNFptI3JBSkI3
RFM2QCtQQUR6PjlBY2pPK2ZQOGcqSjxYbnUlCnpXZHVkZ0FgIzFAU0x7d1QwVHdNPiQzJj5RQEdP
ZlY0fn1mQUlPWTJpdmY4clY5U0JVUUhqOzlDN2F3ZD0/OCRDawp6WDtZcilsQzBXb0s1TjxKIzJU
bHJOUGctZ3Y1VTl1VmctdjxsSW10Km1BZkgjRnFaOyhpZkVgMWlyJXhkSG8tUWAKemVkbWB4SG9U
d1RCc3BITHFfXytzN3prVXNFZ3VvNjgpUnc1XkU+LWdgbHFQU1BLQ0RKOTV9RSo3Yk1CbmEhciln
CnpBVit+PkUjcFVleVRrcT8mQEBjcGtyP1BINkFYZH4kbFhKMyQ8c19EVmRPZXo1S0pXWkNGYlc0
ZUd1MyNGRUhrJgp6bFc3clRpWCM7ZnN8VklESVR8R3o3JkxeaiYlM28pRkNGRD55JXNFeklUKmN4
TjxSc30lLWlUel9CaDdNWWxjQFIKenRZNkJHJEFrPDd7KVBlYkp5JWM2SGg8TX1ANVp7RytGaTgk
bWZOQ05kMUVEYWo7bWN0eT4xQDZoKzRiMFpxNCFiCnpUYz4rMVpkSzF7RzYoUkQqO2p0YkJXTyQw
SG4rdXw2aWxfWmd3TTF8ZFFPRWQ/JGs9QkhJXnl2RGFiMXtKQGgjdgp6V1lJeHxUdiVHITsjV09S
M05iYUskJUgkeTQ+WnZuaEU9RmllMFRidUBhazJyRFViSytGQlkmXnMraFpBWFB4REoKeis2Vzdv
b2pQRnoqZ0NYbCM5QGg+RCQxV0RvWEVrazh4LS1SekVQVjRPI2s0JCoje3x5byhpNTNpKFM/U14p
VF5jCnoqYkt4ZkV0SkFqanE9dFZrWVcwPiUlN2pBe144SEdhTHRQWVZaeSRFUGdnVz1SREU5JVFC
QkV2am09aDk9WSlDQQp6bkc/PiU7dVMyZSR9QXNgbUoyKzR4MC1AZUVFUzQlb3Q9cDJYUjtuOVIz
aSR9MWU2IVdINEU5UjZ2dTZ0YzlwZX0Kel5OTHM2Uj9vN2I4NU1VeHFrP0VzcWRMTjxMbz9NdHRA
YyM2UHpYbl57LUw+PjxGd1hOaDJuezxnOCtQTEwqVnhyCno1YzsrfEFpeVlqQTJFSmhePlM9SjRP
S2JlUyQqKnpwcWBZVT9YJUkqeGFINWppZmNIY25Sd3U+IzY/QVJAOWU2Rwp6cH1oR351ZGlFaSZp
KDQkaHtOfUdHK3gtMUhkIy1WcT01NHRYYT0rKlJ+ZFk2VFMhQCVgSXRveT1rT3hnQ1Y4KyUKelhz
WV9NXnZjZ3pmPyUyIXglTlBFKCNWRjQ+IUk3PFplRnFFWTd3I3JZY3VpbklnNl9AQFlUSjBGfX08
NCljNjdDCnpwQ1c+QW52Vit5VHZ4eys+KGZudDFBWEt9KWZNSTdhcipoYVlyZiEhNXNSO0RyZG1S
LW0pR2lSTnhqbkA8RE1kZQp6WDFoTVcyPy1RN1lWYEJVOypPMWZBcFJpbGgkSm4zQHB1alRsWHY4
d0IwT1Qja1k3RjxUTGl4Qnc9OWtGJmh8UH4KekxpeGNwVzZyRG9vRitxRm9pek4rKksyNCVRcz5G
Y0t4OTZBaW8wfFR4aWkmJjVlZldaPDckRigqdldlSXl9K2J8CnpJdCQleUtqcUA+VG8+JlhycFkq
KiltNnsoalF2VDxGWF8wJHotQFRWVDRnbTZzcl9vfSZpdn1qU35fWD5VVmRRQgp6X1RxZzxGYXly
UyNRMz95WWpJYmlZNCgpTUx0OXBeSVpoOUs4U2w9fT1LVm1+d1drfnpWOHxjV0JYPDxBRjBJXlgK
ellGMUo3JUQkVkZhbDg3JD5EWilaeWRicG4/VFNVMVpiVWN2MCR5K3Z7WElCa2JIUUZmOT5LMnk7
PV5qOXQyNDUrCno/UF9LY21gPHB3a1BQTmE3TSZTaXZTa2Z9PXV1U0tlWjklRXF3U15UVE1YZjNJ
blFVdkhUYXFIc0stLT14ck57Twp6dl9+dFcje3doeDtVbnRELThxeVYjQ30ocytSJDh8SHVkSXFv
SXg+al4tUnx9VVg8ZiFgJmtwV0tpYT14bntANHkKempKaXR8Um9XUWxNM2oyLXIpcH1PTkY3OFhj
RmNIQmA9S0JDKjJxPHIjajk8OXVIOUlNRGZOcE9UMndsQTMmcDwqCnpCQ3ZAWipPKFE4UlNuUDl1
UVRSTSV8IUlxbmcpdjZDNnolNVRWMn1AZjZOUU49RjQlM25VaF44aCtAMSFLNmpyTgp6SkFiPmJf
ZEUzRztRVyN2TSY7LTs3ZX5wO1hVREh8RyheaFEycko/djF5fUI2e3lHM0VpYk9UcHdedWZ1LXw0
WEQKeiMlU3pgJDlDN0FKKHBnTmp5MGVeWVA+OTE8I0IzXzJsfSVeT19Yek9sc1lEVSQ8TllnWmwz
cDdRZ1JCVWI/fEtrCnpCaU1MSiFQTHEqQyZ5OyhAOEVWYEc1bEZZLThMMnZNPiF6WkVLVT0mKlg8
alpyeHRIJmNwM0Y2Vj1SdkpUVV9VIQp6S1l2JnMoSWxXUDQ+TEBzbzEhKChQaXdVXk1ya2dTUyV0
UEBmV3RPRl80JVJQYEs7UUI9O0VObjdaJXVHITBwNC0KeiRARTsrOG93cFdlNkNweiZOT1RJelV+
MVhRQEVDJjlETX1gJiRjWjcpVVA/UztkZnpATCs1RClzbiZYeWVfajYtCnprRzwqRnFvS0kzY24y
KzBgdEh+YEFWK05ZSXtEQ0hxTVVrV0Q3JHw3cT17Z0NLYm4xNlZPYyNzcU9VOElHPzNvMwp6RTdS
cyVjQlV8OTB6UjJvaE8+P3B0Iyt7Y0NOIW1mI2B6e1lfeiYqR3I2amxGR25kRDU0M1JgdXoxbFQt
JU9lfSYKejdGfGxNPFBwKVAqQ0JTN2lgVTxRTjFJN2FmdnJsZ3lIRG1PczIqVHElQjU+YjEpZ3FF
JVJiJXFgR3RiYytRK3chCnptOXtOQ3xIcm9qTUkkYG8mYTB3amdNKT1ISE09OUp5QlhHSD8jbX5v
biNkanZfUGwzKUpoR3lVWkZnfHpQUmJhSgp6MkQzfHohZjt1YTRLM3NzanomfSZXcXFOZypDS0x6
VmIhJiVtLU5rM1J3bVEyKCFhazdOaXgwU0JBfj0tXjdHTFoKemxfSWZDcnk7Vj53eEk9QE4kISo2
a2IjIUM8QnBgVWM4PSlie1ktMV8zPFByfkVkZ04+enhARHheeW4jYXJNTjlKCnpUZz1QZHVzRio3
TzRDPXJ7dSlOdmRMZlk9Yj5AcVAhc1V4TEJiJFpZVlFyQD9VZjB0YHR+V29RJXZvfk09eXNESgp6
ejdqN0xuZSFLY1ppbDJUaXtfeER7cFBfZEthVSVLWWdVJXdKfj0keFpDJWZeZVgodVVySGhve1Vo
OHJHYHN1KnEKekloRH5UeTduZmxkOW5PSlVSP1czPipJektZb2JRbVA4JklkSyZteGdsK3dyQGtu
Kk5SP3Zyd0w9dXcraVkpKm5vCnpfM0hgdkV0Oz1zI04zaytMcy09blhfI2lqVj1VRTk4YVopJVQ2
JVohQyt1dDdkMlE+Pz9CUzRoY0dkUU1ld25NZQp6ayVrcW1fJXI9bTFNd2NFYXE/K3B5WlJxQHp3
eWhEJVJzJmYkTj1UIU1iITJlMFU3YW1Ac0YpYSpYJmJXRXAmLUkKem4wTXV1ZXhpMS1YaHprWCNT
QCRIYU9TUDItPjV+Zzc1P1hjPiRqWlZ3YjtGRmJEO05ENC0yZlBjI3Y8c1FySjBBCnpvOClGdGMz
WSNtcz92akFxM3hIcEJsbGJmXmU/ajFTQCFkO05hNGo3JFcqUkp6PkUrJUNxT1BNLVBTN2NzYzUp
aQp6WmFCTiVZNDc2MDdoRGdgb1EtTENfSmgyczIoan1VSG02PHI9Mm5PfVBDUExFPnhweWM4IUgz
OUxTPk1WWiowJj0KekZadFZVbFEmRHlXO3Z5d2ApdiFIWCloZWJhfGNKNUVgdV8yZXkkc1FHXn16
V2QyWj0oYngmYmlfTyR6Pj9QdD18CnolRWhsPGNHbk9IPERrTyVBRDNDTEBOO2VSbUhnWX12P2JX
SEpLU09gMHVNZEZyQ2A1Iz45TFZ8eWclb3tjIXxSMAp6TW9pQG90TGVeOSlpIVJtWkhEeWdgRVRE
JHBqZUZSMWhVaVQzMT83ZjBTXm9+Q248RW9rTEopQjA7IUVhYn1oN0sKejV2b0k4UEMwbFRDSCEk
fDQ2OEo9Z2piJn54YThybXRLeV8zITwwVU1KRU5lSm89PFN9ZUlAQzhfN0I+YDBwdVVmCnpgPmVk
PERLeEBlWik/VTJMZiNUcCRBLVU7TUdEUzVybmxZeVpOXi0yQShfTjt3NTZ8cXJlQ2c4YXl1dUw/
I2JRaQp6UlY4REolQmFoRio2dG1ibDxoXlQhSmJXPDItOEpGcTRtb1BjRW56d1peQCpQdmgzY2x6
eHZ1ZT4qOEtQanBFN2IKemRFYWZneVhpfV91UXlZNk1eeHIoSTxqaWI+JGgrJVdCVH0+JTx3X25q
QyV9dVdqOGs3eGVJdnpGcCtvRHEtWGd2CnpIJXsrKmVrT3plZypCXnJAQn5oaSF5WSRgOEtGbktU
XkhRWCZBdVI1SjFqYztKb2RJKnokJWtGZHMwcjhycStgUQp6b0QrZi0pUnNVV1Q/QEhCQ1lWUV9q
Kyk0azkxeHAxaiVvSkhHb158SDY3SUIka0xEZmt8RT0hQWlrS0hGVXtwQU8KenokRFE7Yml9K28l
RFUhYiVHSERYJUE/RmQ0OX5xTkBidz5LISp1YnApP0BuNzdMb3AmPGd7QzlmJStBOEY4OEVPCnpz
UkhabWtNZ1FiRFgxNXNvKmBYS25fJmZpRG1tbzV0ellraFpaMGltPD9vRXEoV3YmcyM5UFc1KTZo
dSs/OHFhdAp6ZlJBMWxgRyU5RExRa2pAK3R2ST00NVZCT2FAWnBBdzUjPkQ4eFImXi1Lekh0PVM4
diFwYEdreVIzJDBZNDJVcGAKemRqIyZKNEIzUFgjWSgqJCRmelBLN3krR2M9fndLX3gyQ2Y0eWN+
WEFlej5lZnVmPnpZV3khRFJnS2dQbGx3NjsyCno3TGlqWCNwZS1Tb0piVSV3Y0lPUEFEZ05pdmJN
Y2NqKCFVJDZRSEVlQUFKLWtLa2laQkM4dGY8JDBMYm04ZWZDagp6d3J2PjUwNTNCflh0WE9vYio3
YU0oI1dMWXY/RndCQyM2VU88I3BoWEMmVjZscTsqKzJhZklwZj0tWlhvMEBufX0Kelc2R1NQMEI+
Jih8NzhONzBiLUt5PExDJUcyXktrOElSck17Pz1IKHs4dmlme2diU01uMCFxXiM0YStVUmtmc282
Cnp1ZVQxR0hEKGd4VCZTe1IyKThfJEZNZCo/Xkx0dyQmejt1JD9ROTtMODVtM1VoM3BgUXF2e0ln
O3whPCNycE9hYwp6PnIleE50dlBmV0NQbC1IOFBxNjYjcV9Bem1hWCpPKT4qWXVPVCtENlVEb0pw
SWE5KCEmXjJPbXlMZztScWlEMTUKenkmVmU3UmJZVVRAMjwoMnZje0FLNj5ZViM0S3lOaTJ4ZTly
LXF6aGlBM2ZvS1ZXeFNkKFkqO1oycyVGUVY+MmhHCnpxSnZ4U0FQT3wte3UwYk9ja1Mxd2owNCYz
aTtZOXxxKC11JjhHM25PSUdsPiRgY088TU18WkwmdVM2RFZhTiRLcQp6YENSXjtGQXxlNV9OPytA
bHtfQmBeOVRUSFBaYig1MF9jN1hxKF8rU2N3bUoqYnJLTCpxR0MwPE5IUkR5cW9IKGkKekF9JSY4
d3x0dENJfXoySHROWEx2Rz9pKyE7ODd0YVEjZyhRNEx0YjZ2RzskUCE3N0t7MjU/eUxBWWtBdHkp
SXwtCnokQVRiblhpVVZxYiYrREJjd014M2VONDF1eT84eDhJeElSbVFZYU9SQzZjSSg+cVJsXlY+
ZTBIIShXekVFRHptVwp6SnZDaC16cjY3PjwxPX5HYGcxPjZqNip4emRCa2o0Tyl9OS0obTdMSVM2
OD5oYDxiKypraElUaUh2ZHQ9PjQkamgKek4+IXgkb15fQVVzYCZAN2IzZHghbGU9YzBtU0huQS1U
dFFuJkF1ZGFfRkdrclc7Sk0mQSRlMFkxcTdlQFdKOH1PCnpNbDlsMFBVNzB5MCpZTTkofCoyOHlZ
MF4yK259d3xZeERRY3EzSVIwTDZkcHklMHJpe0wmX2VRaGMmTVpvbkUmaAp6eHErMVdWYD1HWnM8
PlR9QmBjMlBsRXVlNlJsZD59NlpFSGhmK3pUVU80Pz15KyRjcW9fVlN0e3ZueT9SMnM4UkUKenNn
UnR8Rjdzdlo5S2NrXz5WdWQ4JWtvYztTTUc1IVMzNWlYZVAtbzglU1ZWdXJyTk58VDM1WnxZVkVE
LVByQ0dkCnpOKn48Uzc0TXBVYHw8SUVLVTtucWtfWUZsRi0mck5nJnUrMjljT0VQK25Xcz89Nygt
aDIpfWdzRXtUNl5xSWBZcQp6cS1WcEE0TzJJUSghK09pOGZTMExtZy17STZSbit3bUxLK1lNUU4z
dGdTSGMhd2phaF5Ld2oqJkBqZjBVaUhXayMKelUrSDdKd3UqQklQMG99MCNLZUh5U0skMmUpJDMk
Pj5IZkNBQ0cwdEI8bnw4dkA0NnlRentLaUlFejB5Kj5qN0Z8CnpGPkteS0hffnY1QmAzK1AtP050
Z1BFSzcjOWNYKClaRk9GSmx7UVBhV2VMfS1CYEdgIWVlMUhsUUNDKjEpVCYybgp6KkNxZUReI0lX
YCo1a31nM3RFeTNsXzQpRko3U25zUlR0Y255aHV3R0AhSVBPSS1qNHJfdl44N2JeJDY2X3JQRGMK
emBAKWF3PDNuQShVdXM2VW4yOWd3a2tkJGN7R3hCdFBSfn5yNH57RUdqYEtPK2xeMTdqYkhDVlR3
aXI8YHRAemxACnpyR2VQRkpoOH1hb2AxWjJEdjskTVUoUUM4UV5jJDBuPkhwI1VTdjFROUo7VCUt
a1FERFc5XkMkQDQpVXxRfW9VMQp6Xm5EMlNGVFhQV2R9YUo4MzdxUUhjQ3BVcDFEMFoxI3YtQEZw
UT4wWjNWa1A0JmVadml3JG0lUE5CdUptTylrJCoKeiozKzhTSzZWPm13XyV0cSk4ZCFrTmdxKStV
TnE5VjVucjhtUTRqcjVqOzAtM2U9bkNsZFFFenR6flhPcFR0fVU5CnpWaUF0X2JtXntHXzdtZUpr
LVVqa0Z7JEJOdDRqU3tXel9Qcm5IeHRCQGxmbHhyQGZxYVReIXp7SmVAKUp2PXdKegp6fE1yb349
fCtDaEMjcVY5KUE5O2lrTnFDUHlVcmBad3dBPiVxY1JVIUoyYlJ0R3xDLW5vIWsxPj8+VUhXe3ln
YyoKej8oPClsK1V8UTZedSojeShVO2ZSa19JPCpCO0c0ViprZ1A1ITRwSG9CPnd5d3Z1X2VFK2BM
X198SyZIdi1yfX4hCnp6bjxqKEkoalBeWURkMnlia1EpTGBVM2d0OD1ZYW8oN0x7SHYmdWt4PCVy
Pm4jbWJNYiRVaT5GIVZURihuaWpXSQp6ZUgwXyEoYlBqTSk8K3VNOCpWTWRjRV59bStmXjs/XktH
QmI4N3lkOGRxJGRoSk5JcH0tNUR6MXVZbVdXVTlVKiMKel5kMEUtQiE7RkV0UGJPKHF5WW9KOD4/
djdNX1E0KGx8eGtoPGA9MFAqOTFKYilCMUpVd3xHJit1Nj9fXllKUWJGCnokMypQPGB0eSpRVShI
ZXVsVmhWNT8jbD1xdCtZKitJT1k/XkFkOStoTnZDcXUkKlVUO3FKfTcpZEVkYCY1MSFLTwp6JUFm
WWpmNFNBJFNMQjI/KUF6O1B5PnFWcCtme0ErZXwjMHZhPng5VDtid0M4RHspZ25wbVhXREo4ZGhM
bkRrOGIKelcxcj9AMilDdFdKcUVmVyglc0dNVk4pRENgb3prc2QmXz9CUkV8enVZQHpsKTZLQ1Yy
UERgcUNuTztFTjUlVEhVCnp2OXhoaVNqYm1qJm12eihmOWE8YGM+VmF0WiZ+TzJGWSNXPEY2Nmhr
Qj5IWXk8aU57Q3lUOSN5dEJgZX5xVDU8cwp6VGZEZURIc1B5MEJGY3xFV3RrIT5CMjstdkZYOCU8
T1RrUWZYUz00U1MzRD9uR1IyOWFjM3JxeElrPz0kfDY8RVIKelVhe1cjR29wVnE8OEVNTk9PWkdW
QDZhJH4rbkhteXMzKVcwP2NUS0F4aH5SIUAjSXA0RFRndUdxfVc4QlNhVHt0CnptY1ltenZ+OCEx
QyNNYyM0U00qP3M8ekUkcEFfNXA9S1pndCZOTThrR35vTl5BUF4hTkFQezBVaCljTUpyZXdBWgp6
RDQxKTMwd0k8bUUtN2tSVzZNLUNGWEQhWHJEbXBXZ1NkbiFnKGcmJTRYJkFPeE1wY2krY1p8ell9
UGMqKCEpSTAKemI2eE1aYCtWVThvTzhKRXxOWn57P2tlbmV7T3FVTUR5SSFnKjA0NGtKNWpuJDde
WlZiWFZsZTZZXjFLUXdWfWJKCnpIZj5UMndXQEQmVE17M3tae3dkR25JYE82b3BiNUpoKFRee2Qj
aVQqU31TNnF4bzZIcSROVyVXSzBDV0s8XjAmIwp6MTR2JXRmJChoZkFFdXA/THcyciotNWttKjhp
ZjVCY2pNYkI1djM5NVluZT4rc14rJDsoN2MhbjVtKDNXY18jfUwKej4lYU4qO2BQMHsrRnFgJloq
PVF4WnpqXzElfnZheSlrSyNrKk53STlzbDc/OSs1RiRveE1TNnBVdSRPMXh3byN4Cno2M2NxQChA
SStqdjg1b2hPUjthQnc+fF9sQ2NyTyFeWlU4djZMUmRAe0NpPHsyR1Vxez9UUDd4MW1SU3ojXnx2
NAp6X29FPGBwR3szQGA0NzBIVE10SzBaRn13ZT9iZSozJHFeQ3hodjswZCl5PWA2YnRsPFA4ejlN
X0h4U0NwTTBlZSUKemA8UTdGZXleNEw8KiE9Rjk9Y3VKK3dodkhSYCUpPk9CfE5OdDh8S2V6QXN8
RmMxQTIrKiErR3NxakpaYG4lfn4+CnpLRXQ3Wm1UWWwoSShLVlMrNmt1Wj93RWNnPG9nKk9iXyp8
Z2RUSW9AUyZjfD9fano+MUNFdWN1JWBzPFJrQ0RQMgp6TUNYYiY+QUImaFVYZWUlUnR3JFRycjQh
TVE2PTxEU2o+dzNoLWRWZHl5dSU2SmVJQ2dVa3FyekkoTHBVUWpLeVEKem12KmUtdipPO0FOSyV4
V3BsezZRSXcxdDFeUGk3clM5VzJ+R2lfczN2fXdBYnprViRXKlI7e0BvWVUhNzg/R2BkCnp0cSom
dWMyU3B1VWk9V35FKTd1bVgwKURXMU9AMXc8YjAhcSlmbkI9Xm1UXkApMFNOQiY9bFgrSTN8SSE5
YUYtbAp6a31HbzAzJWtlfk1CNTIoJTlSfld1YUdhfC1gZztGS2g8eTNlRzRjU2oqUVA3XzMoey03
ZEM4fFBJe1g9TEckJl4KekhTS0VMbSV5fntBV3kmaDIzZ3U+dDk8LWQjSj9OSS1zdT8/e1kyWWFJ
ekxoYWlMNGprUkE4RnF6fmNxJntfbkZ3CnooeWdQbil7ISkxeT5KVms9TmplayRWPmNHUmYpa2hO
PF4lUXhnYzd7YnA4SjdaKkRlIT9AKE9lUXY4YXhjTysoZwp6Q3F0MCp2fnZwd1IpZHJgUm9AY3lu
cWdeU3g0KENhJnEoZU1fdzQlbnZ9XmlIKD43aGZyT2dxd3kjamYwQzFPZXwKeiZ4K3kzcGtSM1ol
MTA0dUA4Pz9ZTFFUdH1YOCEjOTF8LWBSTyZxOz4tWEB7Wk5EO1E8MmNLZjZHbnZrKXtJSyVJCnom
ZnFueEJGfGMkSFJUa1IrdG49UG17TDVYRmI8USs5UW1uSk17dXN0UCZMZjkhRF8+RVREfmljKikt
KFBLT01uRAp6TCRRdmJgOWhoeUQ/NTErKXpMbkheQFN7JHA0JkdHJH1lSCtfNmE/VnFCOWxkX0l+
TS1II0l1MkIqUylaWEo0ZUEKejhaaloreX1RRklFUTtrUDJgX1UkelZwQHlqTEp2WHVDP3RzZUVO
XmFgPkpqcWFSTWYlYUUhRUBoeUZjNis3MEdKCno5Sm9IU2BveldHeVk5eyhlSzVWK2N5WF9uXlZu
fE5uWCM7PjRxP3QpSnc+XmgtIyk1JmJTUnRHTWN+QXdNY2cjRgp6eW5tPzdTdnh7S0lQeUI3SU9E
Vl5fNWFFNCEyU0xIcHN0QDFxNkxQN0RLSylMI3BYPWxoTldlZXh3SmRLYyNWSGAKemEoSENidVY0
SytsfmZjeHJkdipRM1o1Y3pALV9ZNUJ6Qkhqc1N2bWArREsoMTZZUU5AcFVPQU4hJjx7TyUlcTt0
Cnprc0MheGp6YzRBODNJZyZ5ODk+Qk18TVJVWn0tZmckRl9WN0BtZnJMN2ZkaHUmMmkpQT8lPllZ
X1B5QElsfHBWQwp6b05xXn1oflFSYTI4SDZsI20rRXhBIVJCJGY1QyYzekNCfkR7WSZodk94ST5h
Zksyal9kfCFDVjhASFc8VnNFIT8Kel5hQzRieE5RJGJKRCtxV3tgPkk0TEErPF9oKkA5T2p4XmI+
dGdIO35nbUR3SW41ODtBRkpDbWU5a0AwKGJLd3hUCnpvUEU2SU1BIXBkX08rSmQ9MEAobU8yXldu
ZmpDa290NmxmMHJTN0p4RUMpRDN3PnlWQWpzMT9iQDVaKSZhfHI4RQp6am8yPl4/TShtSnAyUU4h
T148K2hkclM9WmN5MkVvN0p6Wks5flQ7TDszcD1hcjZUfExIQ1Imb1BzOCVEcnRyP3UKendrbT5N
V0dmZU02eVY/UjEwcDYqKUFIJSVFQjRvbyMyKHFUXlV7MXVYeyUyMUVaTnY7bWZFSlVsdVkpN1JA
Zy0kCnp3VjZhKjFOKj9wKEhHMndGRCNjSTJ5a2ljcEw5WkRfakt2aEdqYGh9UWBBcUMoeDtAKlVB
UWxne1EqNF5YdCFlTQp6PDxSfXgjIWMrbW02eDc4b1N5d0M8PEVGc3hFJFF7QlE7aHpYfUNtZShR
NUJ7d2lJfV5ART4od3BwUV5kKip4Ny0Kel5EQVNZeUhJWTZ8SXlpUSRBK1MteSVHI05oVFdBSkgw
OWVAJmImJkZVa1lyYTk5VW4tND0rRS1XM1FAT2NkbDMwCnpkK1deJD9KOUZkS1pFMzVDSEFuenlP
SnJqQERoOHQ1PGl0MGd5UzQpS0omVT82NVY/JFkqbnNiWiMyNkFJaDU/Twp6dUIrRlNkLUxaWHpm
UW44VD9hJnlLI3stUWotYjh8JDZyMVQlMWB7TCFJLWAqY3s7MDRARDdZPiFyUThGWjJ9eXgKek97
ZVJpIyZkRHBIdndfUVM+RzZfKkAzbXwrTT9VK2EkJDkzMk8kekEoe2NBWGIlb30/P3RHQ0FgNzMh
e2UmflQ0Cno1akthT2laSzc/KkI7ak0tMW9GIUpBU3wyc35sbSVaVSFiNEU0OWpfOVlMYCUzJj9W
OXM4THwrKzxmWk9BKUwtRgp6cDdHfGwjZz8/empvVl9FWncpNz1sNlAoOTJFbU4rS2dgWkgtQj89
VlgqWEJVeG5wITtgX0B5dzl8Ny13JH17JTgKelpAKWB6WVVnYEl4KDxyYjBZaU9iTDdle1hqKEYp
LVcke1d5RCRlXktPSHhGKFFKQjhMLUBDTUFJX153dXc3dWs0CnpkMDJgbjE5U1N3ZiVEU2hkMC1u
VVcqNzEqYn41Wl9taFRPKDd0eSM5Kkg0Zk1aPlhVSlF1byF0czlHZiNaV3FxOwp6JU1GOVI1eHl9
dWF2VX4yN0NGYVlXflhCQVlETmlKPj9gcGd2Y2BxM0NUQkYpPkt8YUMxLVB0UzReJnw9NUpiNFcK
elZ0PSN1SEBvWHpsRkhOOVQ7bzBMek45QW8wcUw0OTNGWk5BKFNKVFc1Ki1sUkNjSFRpPys0NHkj
UEQ9Rjl+NUZHCnpIU213KytpeVFUbTdhTHM/Vy16cDNPLSVyOF9eeUJxaVZaKFYwcUA/JU5MK3o2
dGJSdkBqQThqXz5NWk4mRFV3awp6VStiI196bTxRe0Z0PD1qPlZSYkRTPzZTUGEhSjs5bmpmMzUo
KHIyLXpuJHQ7UGtnZVFlZSp9Kl9SUGMyT3tsJjMKemxPSyRoIW5qb3ZBcj8xJUwlJjVhNHtMMDs5
aGU3c2dxWW1gY1RHNVFpJShoZTBoelkoPiFCWSlvaENfTExEKVdGCnpWWHo/M1RPKGA/MnAhfntN
KWRQV2FRVGtLeHJZTndybikxPnhrUnIqJigjQDZIWnwpK3lVVSRVOz17JDg5diZGVwp6Wl81SVdr
V2pefT8xJjZxeUxJWl53bk8odlppS3phYHdhe2VDTU8+TD5lVTlIeml4bSlkYDhDWXdTbHEmRktH
UkwKejhCRHJ5e0ZrcSsxbz4qbWItfGJsdlFKcWAkRD8lVGEtd3wwMlpCKj93eF8yY1lvJHBsdVI4
OXd4OV47TCNlR31qCnoke2tfS1h5Rm47dXJOcVZkNGZqUnFgYHY1eXMzMD1HOT5icFBtS1dBKmU/
Tmw3NTk/ZSZJSHVZbmZNck1Sb1NIQgp6XjlIKHYwMF47eGdwRzleRGhqRTZyIUAwdjRYMnIhcHQ9
bEw1SzJ0fEROVzR8QWcwRjs4WVQlU2EjaDcjJkpzbTAKektsdTFeeEheOXlQR2oxTXJZN1NOc2tQ
Q1AmfShfIT9PYDVnQ1pUUHV3KmE/Z1d0KFVpZDN7TT90YXM0azVuZzVGCnohcXIhJWlfUV43UHh5
PVFwUitFZ24pNE5BPSVHNkA2fHoxR1IkMH56Jj4lOXxmRnRBNUdOODdTKigrd0BvS3JncAp6c24t
ZDxZTmZGOWNsays8a1hsKGBXb2lya0B4QlRqLWNCbkRmR253b0xGezVQPzxsIXdwYUxQMjJNYEVB
bzkqdzwKekQ7Zjk4UktTdk4rd1ojN1ZDUnNidk5RbDRNNnY8Q14rTWZzUUFJOGU5dnVINWU3YkVf
YWw7TF9XfDRsP3F2TktWCnolQjA8JjhlR0oyPU1GQF5JSiYmJEJWRUZxJXk0T0d5dnl9b2dMaG5x
Sjx3TTBMTWstdU9TUnBqeUxXSis9dX1vegp6VHdAXjVtIyUzXj1ANz1eP1U8fWxANjJ7ODhLRlV2
THd5bEM+RklWNmEqRFBXJnF6RT8tVThKLXBtQW47KWhnJHsKelUpQ08wNGhATlRBVUJHQXpENWM0
OH58el8+ZG9GY3Z5clBDTmFLYWZAS0RNbzV6KDl0KmslTVZFN0lhYURxRm53CnpHTCZLN1hrU1U5
cTNlOEJQXkVrUzBPe18pK2BXfnY2e3EmY0JePzlkOSZhMGh1YCFeKCk0QzFxbnJIM0c7fllJYwp6
S2lxYClxV0xGNnlTeWpBTC1xRm1zdXEzIW8wSSUrUF9vMjI5RkVGNXpwVW8tIU94UDw4SzJXVz1V
VH47WiRFRmQKenZMdVNuRWdlaE57IXl8bHF7ZTVrcEI3I2g+K0E7YlNiMUdXQnMwfkghREhSeGNM
MkFCZmRIWnpTP2g2NTwjYDFNCno9cDkmUTlVUigpcHM0d0B6YWVPVlpseWZrcnM7VUxkbjJGQ01F
Y1JebWxZTi0tU3ApYVNVQEhkJFg5fEJOWkZ8VAp6M0pYM3cwNy1LVClRKj5sRkBWS1I3Uz41Pzsr
TiRVVGBNYWZTN2NWdW11YXoqRCRhVCZ1K2kocXVNVH54O2h+cFgKekFWMDNMVVYjNXl5eDFaaVVo
RnhwbyR5Ujd0dWRTSz4jYz1UYV92WiE8TGBuNXtHWjYhWFJwWFpjaChQWD1pdUU0CnpnfDEzfDBN
S3RSUEskaV5tclQjZEMjUkJndGFXMGZRaD9LfHJNP0l1O052YUFhRy1pYEI2a296YVBvUCRiR2Qq
Twp6M188amJqNGdWN3hiYSNTKEpMJko8MGwlOGZAMVZhKFpXVG9ORHNuNjhjcjs4U1lTMm9ofjlW
UT09VUVHWSpXQXgKenIpYVpaRCh0TlJRYXE7MXRgS2dZVSt7VnpjZmh8aSglcF8yeHFnNGdpQD9T
SytxRXllYVVSQEd6bCsqezY3WGdtCnpOd3RoRyN0eSV6T31hQl5rcHg9WVg8TDdLMTc4dWpyPFk/
YmNKYlJKTkpUbn13N3ItVFZRRy1ANF82aHJLKlY3VAp6Vmo7OUB4bVArO1c8X1VCM0l6Yyo5fWhC
MDcxczUrKipfZFFJdSh0Ymt+bFhHTXAlZC1oWEhsS1YxMlJHbTgrX0EKeiliNUZiKXdiSVBMZjw4
QHBhK0FhRGhyUzFLPitKc0tNRCE0Ul9nKD5KbnB9cS1rJnlFTVRWMSR3O35zZiVaTlNxCnp6Zmlh
WjlnZ309I29CU1dWRHk/MzBYX1FWJmNrTishMSh5NkZNYUwhcn5TKjxIV2BTa0ZCTSklViF6Mjln
Wkk7Tgp6UH59UnhhRFpjTXJUTEl6KlI1Tlpib3lZJlIlZ2U8PW1hTTM0U302bkQ0V05tIWs3VUhL
P2ZWdE5Ha3R2PHRfcnMKeitOUGwqQzxSdDNuNXBLKUw8Pns2e0dAeWAjciVDLWt7WH5gUUZgTm5l
WVJ8ZzQ9P1YwPUwod0BHQlNYbzN4Wl8tCnplTjc0Y1R6PF5fSnAxJHpKLWErZXswcnlSU0Q3Z2BM
MEpFezRIaGIkU2RKYCRMaWB1eG8wbEs3WXA3QThlbT9VNAp6WU4hPj9eI141ZV9sbng5QCN+cnIh
IWU8N0ZIfiFBazN6I04oek82d2V6cC1Keno+UUdBVHRQZzxodGMrdllofEUKejkkcDxoZSlSenp5
OUhWTipvbXpObHY9dkhYWTVoYF9eIz1kRF5+Z1dFc3kjNyZ1eDFSKCRidklhcjtXJEFKQ2Z9Cno4
V0U2Uj8lMiUmU2V4VGBmU1E8VHl7e2k4cSFtNHJaX0lYYVRLKjwmJUwhWSMtS1JgbVZDZDlWampF
RkU9WExMKQp6OWNeJigpeVpldXlRUV5UMCQjZWxkfTVafDhGK1I5QT81UVhsbVNQbD5sfiZNdnVM
cDFuJFJ8X3ZOPVU1PzJyel4KekoxbmpRUlZJdCRDa01RQWE1UlV7T2Z3Mnw3Jjc8ekwrNCtaSTV1
MX4hI3BNfVdKVnchbVk1P2Blfn1ucil+RTY7CnpnaWJXbUJkMSVJVklvSXdNVz96RV9KTGZDazt4
OzRHYV5UOGV2MnB1S0hlbFoocy1HK2l+XlM7YW5yKyZzdyo9fAp6KGhCITU9I1Z6dHVBa3hsVjds
ZnhtSXhVQ1IwcDBmKTl7UWB5fTFGKHUpJjNVaWskKCZiQmskQHR4M3VFKTU9TFQKemNzdERIajJZ
N0NZbzRDVCMhTU9gRmk5OS1rbHdXVikweUZwIW99Pmc4RHJMOHF1MTdSWDFxdVl3MUxnUVY1ZShj
CnpQVGpna3tqMFVgRn1Ue0M9PSRqNF9mN1kkX31HJUYjcUAtOEpDYXpMbWNsaWBrKEJeU3liYEIm
dX49T1MmUUBDUAp6IyZBTHJ5Zi0tTHtQVyh1KlYqU04hSDVmXmM8YVRYPnMha0BsVXFmRXJkMUhZ
e1YxVntheGIkcTZ5LUhBZHhvfWQKelB1UUs8SXxHbnN5TGlQT0B7bXpjWThWV3Q0YTFyU2J0Tmd8
KTE2MHF1NnExY3gteHImIztoKUNLNFBoKUI2XnZiCnpWWCZibT0lfEFNdTdyfFBiU0kkTlpEaTxV
N2FaUjw0SmRtVk9mSzV8MzRVXnRXNjxlSF8rVGBAczRuS3dXQVdycwp6azBtN1E/VzVHZnlBOGs3
OHpXc1JBY0tMKWozLVlYSnFXPENKO1YlQjNQKzUlb3daV1UwcnMraFdzezlpQWp+QmQKemJDd15R
MDk1ciNJbjI5dGQ5JmFwWG5wMVBvNGNxSVc+JHZ8Jn1IVmh2LXJWQ05KK3tkPD8+NUhOeV48WUQ2
WDdCCnpPeV5sUjVKKCEtbCNld2QzcXJjcmRSWThCZyltNmt1PD1ZRjlfOWMmK0p9eF5ZRz9QeS0m
YWxEQlVNQDVQZTE7ZAp6WH1SZEItI0Q4LSYycW9JYXB+NDZuYFk8fWFKTnxAMUZlbEx3UkUrVzZk
IWhMRWdaOH5QVztMISt1bU5XcD9XUiMKenV7IWRebElSNz00Xmd7LTt9NiZVNDNzdEk5b29yQygm
eDQrNShlVHM+V0JmM2h4YVU3S248cTQ5aTxCdjA/Sn1wCnpKamQoVkoxZjJ0Kns/Z2l1M3YoMj1D
fHFWbDdsM1pwX3E2c1BZakRtMFNMa1hkKDwxUDQ1PClUQDQjQmZMPyQyWQp6bT9Fb0A8PTN4OHpe
WjBYQS0mQ04lXkw0SVRSN0c/NkgjbSlNbn5fbSRmTl8tYGZIO1VzdDRJSWo1PE9aQzF3aWcKeil0
Jn17P3pPRTEhJXE7eDc+SXstYmZVfXl7Jmt0JlFVYXdORlJ8PnUlMlFQQiV2bk49ayEzI2dTXiNk
dmFqbkghCnpETU4tTkx5Oyg0cHNSeEM9ai1NTjMrelJyO1NUTDBWWCZ8TD9OUlIlQ0V8KD91XmlT
ZUpUQzRhOFc/Wlc5QVp0IQp6RiVBZmAqb0xTI0ZJZmB5N1NOcEJfK0NSYUQrcT0hTGhNeFZpc01L
NloxZXk1K2l6eTVvOCVOJj1XfW0waV48XlYKeks3cz8qKGxwdHNNUHpgeksmQ3hYSFhURi17PU1T
WFJOIy0qY31lPipZdStLQXJidFZxYENVKGNAdjZjJVhsb0QqCnpXVUg/PDhOK3BFQXUxN3lGWCpM
SEklJmVFUzgxblByd2U0fnVpVnNEbn5XaEZtQmVncjxKMkt2ZFRPS2JuUn5EZgp6Qkp6QSNhTnVR
IU8jbGw2U3J8K3FpcX09Z2RHRT4rdEZlJmspSVd4JGNxX0pMWlNuRGJ2cEFEZjNeR01rK29rbzYK
eiRBeGhNTDRnWTNXbDRCczRYcjdTcnJHWWdMOEdNcmtWZHwqa1pgK0dJMXQ8PypAbjBBPX5AbXYy
NWFJcy1zLXY2Cno2Y0xFPHBwZmEteF5xWmIhTlBmb1pDO0orSGMmYU5KPkZTRCMkb35aMzVuTjBp
bnlidF54NV4wQCR7RzxldENBewp6OzM9UEhGRFNsOVd8WXQ/dzxeQiQzNjh6a0RRMTk3ME1VR08h
UVRmfEFaVGMhMzw2a0VGJnJGVkRmUi1rMUxRK2MKejI4M1hQelFBdDBTP1EkSU5MKDF+SHU+fj83
dEEyQTdEVWFGVVhvRjdGLUszOTM3fEgqdShAREReKj11JWV6Sj5YCnpmWWRXZzhaOVJUdXFyOHRF
RVVNJD5HMSRSREk/ZncyWUo8YXRGVXNkVHBxaXs1YjtqRFM1NFY4IztnQmcldHJuRgp6K0Z3dE56
M00ra0pDVj83dio4PT5VKCpZYC1ZTTI+OCNqbzhNKEcpRChoYjQtb3BaVzRzO08pMyVxZFp3bFZM
YikKekNTdW9kcTFmaUBOTFJVNUchZnNmekEhWjg1KFJhZ1UlVTZqMis9WExofVB2WClnV2RDemA0
NmYoZlYkJCFBZzc1CnpPdVc9cntPamwzNj1ia0RKfXFoaGZZOEteVmkoZV9fO3Z8UkdUTiU8cntR
Nz4oJnlReExiT3xeOSFXOW5zaj4kSAp6dHRRRDYyT3F7dzZVUVghUmF1ZVFfS15VI3dPM3ZOJVde
OUZwYns4aDV1fHdkdStTODliaVYyOCoja2UzTDBOdjwKeih2bll1bHIrRDFURHZ7T1NiQXdpbDlF
YkpWWCslMnFNMEJoKyVSX0xaO28pOyVCODxRenF6RXhfWnxERllzMWg3CnpmMSU3UUdJWiNXYm0y
K2A9dHJkfUJANl9HWDhrLWsjJSFKWmA0SmhIVlRIK1Q0I1hKZmRKZUhMTypZRyphN0hmQAp6UEMm
fjV0KyhwOzBzdF9OU2Z6NFNEYGxvVkstUiMzcUstPkMwSjhDKyV8YEchZTdYNFMwezkpe3NCQG18
ZVBfKHgKemR1TzFsbEhJV3ZIKTtmTF5VNX15OWJ1fTw+UnJtTl57Zz1uSVJVN0VTaVpCSnIjOz1D
elEwYWNTR0xiTGh0e3FPCno9Qz9vV1EjTlFhe2doSnowfDBqZnhAYXw7Yz8kKDlaWXVZVzNTd3oo
bXJEe0FfUihQKkpSa15sdVF4NDktSkZZTgp6eUhVaWZzRVchKzc8fHlkSDVhJlJEcUdlJVkmWnJz
dnFsTykpTWclPGs9Xk53YVc9biFIQHJUdz5KQEhwTiFhd1MKemE+UHxlOUpmZFl1S2tVOEkwcnFS
bXE2YDJpVEpNOz5xRDA8U3MjZ1kkUElAYThHLTVSeE8hbmM2Z1gtUl9ubVBoCnpMPjRmLWI8UH1V
IVBwWl57NiNDcDExJk9QdUR9az9fPENuQXRfSXtzOzZlYWNRVnNlNjNmWWRacjY5eEkkKncmZAp6
V2JuRG4mRmZVe285Yi1ZPnpOeEoqS0c4N3V3ISVXcFhOTyFBNFZkN3hkZUBVenJ0M1Fwazg3b0t0
VlNXOXN1NDwKelMhYTltJihqS3taQ1pZb0okSEhLd3khWUsjJCs4QEo5bEU9Tjd0NXBkMGxxIXlV
RChgdU9DRXQ3aV87eWJYPmlNCnpALThZXlohYmxEcHdrOEFpc2BtaTZQXkJua1lsZ0Uqc3NIKlYl
cE05UHRwNyRTUUU3THBoOCYyRjdGVihhQiYwOAp6TVh9R2k1anBfdUE5JjRpeWhZQzJtbnMtUTY4
TmxATGIkQSNLQEAoZHF2MXkmP2FIQT5GYHBOfWN6dypWYWszI0gKemZsTGlVaiY2WGFzWSshWHpD
ZXlEYUx9OGYrTyZIeGlgfHwkQ2diTUl5QEl3JSoyVTdpMyp4MiZFM0l9UVo0dHBRCno2Xm5Ndygh
eTVEPzhEU1gpclJQKih7PWBxcyl2JU04b1ohSCtZQ2UmTFZtUUBJQ090KCo8OHMpSnJAck91VDxW
SAp6TkdzNHg1KGlEZzVTZTRVYU0qc3Q0LTEmZ1htRTZPUjBQOUVQU3ltcG9XTHgod29nakxzS19E
fXZFNTU0JlhQQ0MKemdFQEdFd0BmWD0rNStLTCg4YzNWKTgyYFIpLU12SF5+ZzxMUktiIVpaK31K
PnN7NFdmYmk0S1YxKH0+STRgemJzCnpqKzdpN2FBUTh6USREPHhIaFN1a3xFSWIjYV85MT5AUnpB
Szs/WCZPNjMtRUtlNCVnc2RhRjNKeyVDeUozMGNVQQp6RTZ5ZVZaREZFZj15M19MJk4pRmpUfUxa
fF90JSRZLU9jYyFPWDZaRHRQe2JrbHQkT3U3TjVwPm9QSnRJbVBmMEYKeipSaVlZZW9Pb0wraHp9
RUtFTVQwZ2VHNVBEe0hUIURobEFGITtsbFFEfFdNQ1Z1VFh0M3JoI2RUfXJLejM1ZnNoCnp4cjs0
PSFlXytFVEwrIWdIaTs9akNwRU9lWndaVD5DWldOMElYMmx2cyUkRlRBWUZBYkQ4eFhFTD9XQCZu
TCQ1VQp6SnJFdmgmYzl9Qj4pfmw3M0FvNERaZFlCWk8rPjJhb3AoMktMMyYkRiQ9dEQzO28xd2tj
YXkhPi0zJHVCX0NlcigKemFNUz9tOTthaWg1ZVlPbG19NmFSIWIpTnBZYVF8UmItZnhBYmVwd0Im
UCEkSGxifkx+YXd8aiFjU2EqOSNVJnpmCnprZjRMODdvZVooLX5yU2M7PUM9PXNgODFoX14pSXgm
S0g+bCEyeiR0SjxQdUk5dE1+aDIhUjN3MkhBI2Y2fG9+Uwp6MHI0bVRLPWFLZkE7NSQjUE5CQkcq
XmwyWHc1Y04mTXQqbDsjVnBgaUA+SGBrQDlyWXctUUQtdXs0KnVwXmYlT0gKeik0eldjT09Qbjla
SjUjdHYycHF3PWRMO0ZIMUM2SGlsdHcmWlhHUGFfaWxTdCM7RWp6X15odyE/aWw0e0N5amZQCnpt
TlU1TW5aKE5SZnRXN2JYOylWPlgqQExPMz1JUihwNWwmTDJuLURUUj1MdEE7LW9wPSoxTHplOUdT
Kj9Tb0dWKgp6LSg2fHdWWD5kMFBuNSZQVl5XVjBiNUJ2eTx6I2g5O2AoPys7WHBWd3grQG4yXkRr
a2ZVfEd0T3dMYUgzKjB3MzIKenQ7PDdKfERhRzVvdl5vYXdgVSRRKDkjZDJwYWFxSCpTLURGdzlL
Rks9NF5MejY2aWxGSmxrWk50Ti1rbntkLXNECnojYlQ1ITN8Jnpgd2wxPEg5WS10Y0p5fGVGN18h
OVQ8ejU8QyFpUzQ3dGppJUpuSENOajxDNmVBZUJoYlIwbXt6ZAp6dXpIY204KCMqb3EmWXJfJl9S
bVFGSyZQe0c/JEYjaj9hLU9yYH1CNFlMcEhqZ0ReP3RCfUMjVU5QelM+MHg+blAKem0lfklrYkpO
Vi1hI15jSi1UfXZlX0tee05mZCZZSlo1RCQtNUxwSTFhVzRTdU5BMnh4dFBVMmRsdT1gS0dwZEg8
CnpmRmRfWkx4JWljXzJjI2JQYzs3WGlrM0sqI3BBM1pqRiEqTXBIRn04e0gqJFheN0hZfTdlMWRu
SC1HJElBPGFmMwp6Y1lpcj5jRzFEJE1nPE9SdUI+RSoqYilBYDZaKChrbShmVDA+JnBJRUoyMHx7
SjVaazBhV2piRDl4eCEwZyFKQzQKejdFZm8mTjRzcE5MWTh3bmpge1NDTzNQdDh1ZU1hLTwwa0Z3
aSN5NUZQdEJwY2okS3xIaUNuRCVnYWN+amAofWwxCnpEVV93TWs3cDIqKypEKypLa1VicTAkWF9p
MXNBd3FKUn4xNSFPUmg/IWV4blFUd0VoYjhxNnpvciZAN204SzBkOQp6QkV7JnphO0lhMk88JGt6
eD8wUFkmMmBTTzxBbzZaIU9XJCtwcD0hSFo4UD40XkAreDlzQ21iVmJwQHwlX25gQWUKelNze209
cDZzKjVgKi1janlqJmk8WE5kMCMpRDF4NWR4OEtoRmFXOGo7KnRLfDZ6WEUqWjBAYEBzbTRRb1FB
Uk1mCnokMnc/VylfenJfdnNybFRFI09QSENTP3tSMTVJK25XZTFRb2dMRzF4U2dTTEtFI0BYMWFD
V0l9RExARjl1Kn1gRQp6fEZsSTAyO2Q3YEFwak94dU1yWl8mVj80QCYyJFY5M0NDbVBqeTduKDA2
KypwQkBwUzNMaXQrJXhNMlZ8TigybzIKelVTTGBUPERlKHp0ZUx7eFd0K2I2VGlgNlF1OyZYZ0hY
MUA3XjhXejw1TTd0QVoqTWV5O3NrIztHSjVYa0tqfipfCno8PUg3PkUobGIyNyUjYUNINnchOV4w
UzUzV2x8YldFR35IK2Jgc2d3Ujh7MmFIZTgkMXNMUHQ8Nn1jOFJ4OWp6ZAp6eVV0SSRDPClTbE42
fW9DKnBmbCg2YDxwcXhDWDI8YFV4aSk1bXJ0XntXd2ApNzU2QmdXTE5lPFpoekZrWkVxeE8KemM5
V2B+WU1AV0tvPURVUj8wOHQpe3ZGaHNzfDdYWmlkVUZUNSFLZlo0bUwjQ2I+YVA9aHpERG00VXJT
cmtpaHRfCnp1TjRHREAkbGU7Qn0rV1o5U05manh6Y1NzUl55ejhRUmtZYVFaWX5oZU4/VigyPWQj
KGRiYWFTJDJWSTtwWnhaYgp6S3c3KSklJSlIS2VCdjx3Wmo7UlhXYEtwU2dIQlpFR1FjUEZMLUZ2
Nz95aEBeVEBoU1lhND9UP3hCTH1gV0RWTXcKenI3K2xDZ3NyWH4lSUhYcDFubkdZXk8jNjxZN2Uw
R3M+SU9uZjJuTkNiUWlXbHFqKiE8ST84bDlaNHtSZTUqSEI9CnppOEU4Q1FpTXImQ294bGMkbnMl
UDRzUF9NeEc+bylUVHo3TjE5Pm9qM2MzJUg2X2kzWFAtUm1JZnNKejJPRy0hLQp6OEFKdW40WF5m
KU9DNkFtPWw1fG91VndQeWsrYTk0PFUjdG5HaW1SMGBFNDV+WGE3RVR8RWFtRnZBQ2UxQjg1YTQK
ej1YM31wVFZyRGFKc31eMGVkeEx9QXJ6PkEwSCEtc0xCKWg7SVNVKVd1YD8zYlR3bXA4K31aTHwh
VW56eU9KWmx9CnoxRjByMGNUazl1NmAqNmlfZHtKJS1MSEQmcVNSWiUkYUB9aSNYPX5lXyVKZjdA
Tm4pPDUhcD0pMiUyc2A/cmhRJgp6Q21CN25GQ3RNQ1RBVj16M0UxcFIoPChVU0ppYmtDbVB9X1Uz
LXN7e1klKUxBbCpYQ2BfTm8kUHZ7dz5wQDgkP3gKenlNMnRjIUJ1I0h2MW1jdlNecyVyI28+WTdk
RkxYfC19YEZrcy1GKDVgRUw3WDtXJiE/M3VQfWRfT2k1PUQ8YER4Cnp7ISE5fVUzKWhTMHtDcDN2
RkdzPjRMRGJLdGBFYVB2TUUhVmB9MlZzMWV4Rm1AVD8mZm4qbGlZdlZ5KnspeVBFTAp6Q01mUEtB
bmUxNm1sdntHRHFlbW5PWjdmcmtqOClUMFBXdHBgMmg/VFNaYyohNFU5bnJ0UWR6RStpT21CQ0k/
V2MKeig8WWZlWW4lR29mTlRYNVNSXkN4Vy09ZnsjNSVFLTslRmdvWU5pYmxrUFFPTm9kQ2BUTGV4
d0R6Mlh4RyQkLSl2CnpqJE5CQENvZShNUHpNfCF0WDxobHYoMG1ZQlJ3TUxsJj9xNWVFV09oVkJK
QX5sck80KHYlYU5IUH5PdUptZD9sRAp6e2prNjZnVk5ZTE1KS3R3fERkaz5BUUFlPldYZU4wQCl3
NnNgPnNCRD5NMD5LekokKz84PGdzX2tePDR6e3p0QFIKekBtelFfbTFnYlZSYSg1I0Q4Zm5HWT1u
djhpZ0x8TDFKZyNzP29qJXxzOWotcHR9OWNRVCRyZkd1M05vOzl1cXZ6CnpYcFJxQnF9WWkxekA0
UX0kaTxkdlo7TTZXa0VJejJzRHpiMnRYUC1jWVdWJj1NRX0pYXplPVR7JDReamNsamNyWgp6dEhh
Mnl4OypBWG5gU0dgTTxOUWpzaWdYMXNIcEpxQX1me1VmQmRoVntZez5JTVpuJXd3JEFmK0VgKk1+
XzR6OGkKekpCaWFuPFRmNy02MSMtI0lUVHkpSmlRQFBhWkN0VWZYemJiI3t2KiQjYzJSRzI8QlVU
c1NHRzxRcjtXTkxaa2ZACnowZF4pRDg3TT53WklEOCh0KjNCfVJyOFZ3SFg3dnhWaSo3Y25nJFVI
YyZ8WWFqRkBMJnRRbCpMQTMkfmd7Pld1dgp6e2c5XiZlKVhOJVReVnF2Qm1AUWNAJk57VmtfY2Uz
IUUrelM9VllOSjBHNlRJYUBoVmc1all3MSNkT0s7cEt5dCMKeiglayo7b15eWFRxWD5WVl5Ucz5n
dz8wMlQrNnVrOV9SKylCRW9VYiZ4M3M2VVhNNDF5NX4+MCRzU3I+Qm5WOTdiCnoyO2VhPntrZDVV
dCEjcTZ3WWdiamR9ejMlcDJ7Jjw4Mm82VD12VVUjY31FQnZNXkZ3P3NHPiZ1IWVSJVAmfFpqRAp6
eTVaRXUjcW88LTdTSEA9NVIwIW9AYlJ2Mj1rPlFGY19ERiNmV34razVzRmhTJVR6flh2UmFqaVd3
RXF9aCltWFkKeilMODxFdjZEdj4hUT1ZSkhreFhMUD9zbCZhKGhkWkk8WH5oWFU2JjNffjNpMj1r
WjBZMipydCg9UD5JcjZoRjFOCnpLbyZHME1JRGp3Wl5aOEdEfGZPd1hYen1TWUFufXpPPFpmeXlJ
d29neHN1bmYwNU99Y2E1KW0rb2UwTGxpRFF9ZQp6cDJqZW5EU1YoemY7VVU/S3JjaUZwZ0lEP1A/
QDZsaTRtWTVMUitaYlRJOzRCNU5qLXZRVjNKQTdAT1gxdkVoPnAKekM2cENNQ2EjYERQZkRTTW5M
SVNyJm1MK3BsJkJUTFA1NUB2R01FfGV6QkwkP3pgX2BoNSpmI1lYdHV9NHQ9fE9FCnoxWWpOO1Q/
K1lDI3NYaSglM0pgZShnQ299KkZufU88bEV1I1RjRV5CTX1ISVEjUHx4UmA9TURZVjN5KEZQQlRI
Rwp6cGxAYXI5NGt6aWR6OEtAQXkhcCh7el84MHV+e1JQbGJYUyNndHNubEhIUktfYnp+WmQ5X2pw
aW01O3pMJVpKfDsKeihASFY2WCUpfnlEWHBZTj45Q1godXhtZ1l6Y3FfbWxrVnFsXkJZQXJgUGFX
S1pWV0dicHk8YFEqXy1vX2N5dX09Cnp7KjBeYjJUU2I1YDNePHFCeG9uRVlSKnZNOWU9ZGFoKmtv
eDY/P1c0dCVAdlcxYCp9cnB3IWlBbkRBcWtJYGA2fQp6Pk18dX13YTdQXng0d3puc3FMLUVoQ1Iq
dUhUTEQ5cl55fEdDODl6NVUxZHt1cHVmTHN6cVJYU1hyO1puPD44SHIKenRBfH11QyFNX2BVI3lr
PWM8MGUtSjd8NDxeKWVraGZKX3ljaGN6KEJsKndLVGZqaTB5V1UoT0VDVEljKyphNjlJCnpmTiZi
NWw8RDJIdlNoeFcjRkNZRUAjeiFMYk9vMUJCMjNLMWJEKFdnNEE+aXM0NTlRZEcoVSNzKSsxemlk
cFhQbgp6WmpoKWpVMUYlOG0/b1BIQUA5YXk5PmZsI3lPZlohUkd+RnBWYzd1VVdlXzRkQUZ4Xzhs
OTBmO0U4fk9VTXRQQUYKel9DUU4wVit9ZFF7XiNuPlhzaiF4QUB8Yz9pfD9tSVU2X0QzblUzR3o8
cWIlbjE0anE4WWgya1hBXncjI0MkPUslCnpPamhXKztLSlBObSg2b3llUkVUPkxUd2Y0LTNMTkNz
YWBpUypFZCRWbShfdH15dGE+UXokYCQ5KHd6ZmJGKUxgVgp6Z0Mtfm5NR0ZoUWxXezY0bjZzYVpu
eGFVLWlCb2IhLVdEPWB6O1BjRkZkaCopd2hoIWc1b2Zpd3MtNWhNeDhYfSsKemR8VUVoZEA5VDsw
cD4kTiN0O3sxYz9RaEJffisoU3ItK3JkXlYmfCpZKUM8PDEyRngyUHZjb30tUUZ3dmpyIUBXCnpx
YW9pY0l9NC0re15aMW9yJHl9P080d2R+NWF4dkZKbzs/Wjw/PkZ1QDA9NVdgWGEpYXYlI31BQDJR
VCNAPVd2bQp6VmxraihrQHZsM2tuYH02NXZ1SCNNPGw4cEFgUytLITE3ZCk/Un4oaTVPfGBMYz88
WHF7Mk1pMDt8UjFEcElVMkoKekUoNHhnLURhV3k3Uio9ZytGfXFjQlgmYHkjcjhsZzJeZlZEYVRe
Zk5mK156bWVoTmVISXRpSSZOOGo1KyF4cVM+CnptMCZjRFdfQVRPZk5Ce0N4WDF5ckBLT3tBQ1I9
fE1wY15FcTRkPmd5ZD8rS2RNXzEqRmJ4bTZzemorN0MmRTtpfQp6enM+SkYjKFMwcGt1MkdCblBA
fk5BRnU0YHtneFZAVzR3SUhKOW5uckZWfDJGNjloa3hPajxKfXtQbCF5IW1hRGsKenNYSGZ3e05u
dDRHOVg5fEoxMm5yaTIkWHIyWG1MYzc9eiRNVmJ5VC1zREgjNTUtNVVAbUwxNHlhOHRVZl9Cb2Uj
CnphbU1UX0gtbDREeiU7eGxHYVZrcjB5KUVZSUJALSZpdl5hcS1RUHpqeklsRz4hdTAtKD9ReWdR
ZVR3TGZSUDd1VAp6b34/YU10WENnZUt6dyk4c2J7bWJQNURZOVN7ezByWSM3a3dKVSFwbXpqPU1y
Kzx0PUwoQkJaWVE0T208VD5SYjcKejxKR0IjMTNLQ3soeFd9QWpxWEZfcHBhdjloWlQ1UFd0RnBW
TEpxZi0hS0ArJG5MbV9hTyZPYkxYIV4hYWopKWAoCnoqI3pMNm8jbTRWYnFxPzUtJDJaNjFxfW9N
Unx1NypfYGEocVB3XiZ6YWdzKHxrNzkjdyRnKWZqMzsteCpHP2M3cAp6MjhLbDNUbXhabUBrZFhB
ODFzWSg3MXUzeTEyNiNEb1ZrM1gxSD1LR0MhemkxISQ+cUk9Z3hYMEdXbGNxeGROT18KenY0PVgj
VVMrMFhXZjlCZ3RQQH1zZylIQURJc0xZTV8leGUkYHV2TSleOUlAYUVrOGFpYks3JVlWbjhiMGJr
VFJFCnp2UGsqaEolaE4rYnB7ejk2cCgwQjVaXnkkRmBnYXVGUHU1OEplfUMrbWhWc0wlcDRVM3pu
MUVpcDtCblpVM0ckUwp6Kj1hQjYwSWxoKDx5YD90em5tRGxeJXklaiNZKm92Y01rd2UyJiUhUWVr
Z0pmUWI0QWhqWVFUWmhkPTg0RHdGI1oKejBUaiVidkxlS0FLbTJgXkRqRFRENmpkditMNmhLbkN3
aFVea3B8aiVNI2ZvWCM9T2gtbStHbzhZbzZlckw4P2ktCnpBOEVSQHRzaiFQfEV3S2JVRkxuZDgp
ZSFmS0FVPWZOfiRpMG9FcT9xTGk9N249RFNgeUgmbDFxVXNFMHtFPUVIbQp6YEtXPEZvNmMjPWc/
KUY+e1p7cVYwRj1vQzx3ODNediVjZ0RLbSFvMShMVzdqTjM/MHBMPH13WFdQcTAze1ZmIUIKejhe
YTdWP2pAN3V0JGlZSkdIbnVyWitMJnQ0RSsqUkolQktObyluMEdTaXhmYUBnP35Ed1V3ZFdhdDwq
NnlJaSpJCnp6JXBvKVFZZU5vMmlKaUhoRzgxdXorXkM+PE9Vd0YyMExVfkk0bG49RnAyPn5GajxE
NktoIy11NTVxQlJVQHk9Qwp6VmheO143JGBEaSkrLVZ7WnVlTEkqdSQ2N00kKnt9e1Z5fGJwTUEk
I0AzPntwbilzeClMOERmUDwoM1okXmNybU4Kel51VV93PyFrTClYP1ZCUG5BRHAwcVk8eGIla2FU
KFg5V2lCTFZNI3YxJCljQlNHQj1veChCTDd1fihsakpXLSp7CnpNTVhNMSlKc3x8Pk9mezJmRiM0
SVgycWF6c2pXM1pFRXAkYGB9WWNjRTR2Z2M5ZmpNcm48MCM0Mj1hdT0zekU2ZAp6eU5IXytGUWE5
OWM7JFgqSVF2e3ZoI3ZZajxKX0tDMlAqOCY0QlFXXitUeWR7SW0oIzdiP3V9UnghdllnMVdydDwK
enpDJm93dHlrX3p1TVNVblptfWR9OShve01rZj5icnN6aVZsd0U3bkVtMSVmcHlUPWY1Mz9Nezgk
TzlgMW4kcGJDCnpLOGxWQWpNWUwwI1I0KldjWlYwPl5oKn1YRHdrJiNCTk85X3EzekJ9QkQreWlz
NitPNztTb1lxalQqej88Kj9aMwp6OTBzb0QjQVk7VyhwQWlgTHJ9QFluTVItbGdiMEBhOVc3TXhE
R1EkSFRtWj5LYnJnZ1Qpdip+P2g4O2pMSTwjUXsKWkcjTVV7Uz1YTkJWaiVTfjUpZkF4KkYofDN7
e1hnMVYoJE98CgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QucGRmIGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3QucGRmCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDI0YzE5ZDk4YjYyMWZlYWRmM2U0ZDYxZjdi
ZmY0NzEwN2EzNzRkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCkdJ
VCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpsaXRlcmFsIDc0MjEKemNtYWkz
YnkkPyF3Xm9yRjVKWFQ/ODVLbHdkSSVBT2Z1WHh3VnJYVnkybXVLSk5rSyM7Z2BxPTJRam5CSnEo
TT83CnpDOFEoLXIxWntzJitvKU5fZGZTfm87fndAWXA/eVQqemV3ZHRpYFBeZ0JGQWMhMiNUQCp7
JGBoUmpwfE5DPWQrOQp6Uz1hLV8jWC1zI3Rje3kzNUpyP31nM3h4M1pXdWZXP1AlX1hrLT1FdnRT
fU4xMDlROVcjQHE/dW5aZ31XMlJKOG4KekAlLSojIzhkTElCd3RRaU1oQEhpOV5tXnhZbCg2KShE
czJ6T2h7JldhP21VYTJsbXVZUWp9allYbkRMNSZgcjFZCnpGM0pnJW9UXy0/WVZvNFd7dkE0PTBH
U2BWMXA+TnRjKHtnWW1ELTFpTyNFUjZlZ1B7aUlYcX5XTDJsTiEhNzJ7Rwp6VjZGYkpPbmY2YjNu
Mk1PZFZ4UzdxfWtzeCNKP2d6e3ZWUDI1aCg7SDApdmJFSiotODJVdj44N0I+KEJwYVJaYjwKej5j
e3RFJT1MPGImdDlpfjJJO3RrZSNHXi1FQ0BWSCNkSHJFTSpxbzJ8TXx3YHROdSN0Q0M7WX5YNVB6
TyUrKVM5CnpYektuWEpJSkdDcHxVMTxpZmdQVT42VTY8P3t8Q0Bgd1pPbV55Ynw5KChedFEjQDQm
djZsYkh3SGNYYSgqMlFAbwp6OVF2ZyNBNG5XOyVKSTI/PV9iSUcwLWtjWTc4TzJFUDA3d2tRVUpZ
ZmhIQjAkYzU5cyo1PGJKU0pIR3h5Sjl3Ry0KeipWIWgmXlVyZUZYOGYlajU5ZVAtcEllYj1LWHFs
Pzk9RHdeZUZhRGQyMUFmND5GRXhLQD5oMGRyMkowWHZ7emxwCnpkWEMlUXpmKDlvaDIxUX10XjZ7
SDdWalkyKW4wZTREMCMpWGRgMTlIPV59PV97TlNUSzBvezE2dnJnaHB0YTRQIwp6KGQ5Pil2WFU+
dWB1KVZXWG9xdDBaQmBQYGBANDBjSEM0UHE3UFZJZUV9WnkoKjNRY342SWMtMWJmKTZOSFgtVmkK
elp0SHZmUElFKSY7I0t+NCRNMVM+MXBUVm15Nns2TkM4WExNb0pEbnk+ZWRga2FkWC08QVQ5amBf
QnpYPmNmcDdLCnpSTDU3fTF8QyhLRiFlUkxya09KYitSUT52UnRPcj5WRGV+bEElQSpZdGw8d0Uk
MmlzPiZ1bkxEdyVFfDg3Y3FBQAp6bklnS3tUTjk8OWUmIytVN3c9Q0Erfnw0dVVSKHxsYDRaQW49
dUR0QnxIM3J0PHl9MFZKNDE4QyNuRWE+dWlTSiEKeko1RlY5QW56QW9HVldKZiFQOTFzQTIld1Nl
JTZWYi1VNX0xck14cnNKUFl4YWpqN1IjR20hRUM/Y05Ra0lsWE40CnpeSVY1WkcoJUNVWG04YWNI
TyRWQGFqUzJgLU1VKG8zSGBVSiFKM0FmPEpZIzFDaz43MmRwfSpYcFJDUHNhYyN7Iwp6bnE7ZilI
WlVwNm19KWZUdER1JihqdmFqVkdIYzhaVlBKb2A2TURZalIxP1ZlVk5vTkFLT3M8eFhFQkViVkRX
JUQKenZwZylic1IzRWVxU01wJVBfViZQKUZVbE4qeSpjRDFzQSVFSXlxJHwpOWxqWG5EMkFYVXxQ
NCg3PlNNOEJVdnduCnpqMGIjaHoxTHZUX3Y0TiQqTj5qdV4ydD1yJXJ2OXBOS1FQRV5KVCRGbHtt
eXMmV3FVfjFYak13dWZ7eSomej5PSAp6RVFgOCpVVGJjcXl5Py1jUCYpbiE0fVY4KElgYDAxaU5m
QnxaJCtFV1QpRVJTMUNpWD5NY0NNaTd0aUxvUklhTHEKeih+TGFYUldwSUs1YnwkNilNa3NpJU45
U3VhQDFHeF5ZRC1kNk5gSE4hVXctTmNvMCMjXlZWNEtAVDVFbHkpcEYkCnpzaylxY0otbiEjbyFq
TjdXZk1MLWhraTR6NFNNTyM9Tn1NdD0lY05eZW84SX5tQF9ybiMzMVJAJjJZNHgtfU81Vwp6e1lJ
bXlQYDR2Wl4+aUVrS2shaSFSdWlISXNtcjt3OVBqSnByT2FIVj92QV8qUkJjbGF7QUp4JEhETTNp
RTE3Jk8KenA+JT1qZGBtIyRxK3tpbG1SQH0rQzlCdSNKMUktRDxDWUVRT3s9cmF0VFZNTS1XS3Ej
V0ZePD1eZD4qbFprYnFMCnpyfCQxZ1h8VUFaeCFJOXR1YF9qVEorSHh5azFIJFgqci1xP3hnUW9E
d2R2UWMrZzJvbz04LWtmZDBMdTJfTCoqKwp6X2FrT0hBNilaSkJgdjs0PFgjUTBuJlMmRlpQWUAt
JHphY34wVH45MGk+Vnt7ZmYmTmtibXt1dV58PmdfKCkpTW4KejMrUU5scmFhckJKbXN8WWN4ejA+
JDY5MD5UPTE4Ym4hWmNkK3BaLWZZdnhUPig4UntVVjJ0YzlwTnxRdTBVZ2g0CnpUUntPZml5YlpL
TEdLQU5fS1g/MUNfJCVqeX5VcjBUUHVrSUdSMFkqSVpAJX1nKH5+fDMrRTQlPH4ke3g7ND05Owp6
Nm0mTFA9b2QqPCk2Tz4wQTFDZiFvSzh7VERvJnBoc3IlSWspKk1mITNsaWpVU1o5T3U9dWh+Ozto
RmJuZiFFKDQKej1RUjR0OWhgLTQldHBNWnZVaUFPeHV2V0JyVVUqKGFnZyU+dndxdU9QNXJWe1Vl
JkJVOUQjd1Q4ViVVNVJwJHVYCnpBY0V7NkZ0RTRuP2ZobiklTVA3IVhFM3hPOFp1MVhIenMjMl5k
cG9gaGFUVTRoJXpeMTUwO1k+Qj99NGt2VlFJVAp6WkVvYCVqcmxxRDB6Rm5oRXtDKUpId3J6aC1W
WCVRR3AqS0FOM2hRIXlOfT8tWDhocyZgSlE/ZCNibkVMQDJ4YG8Kei10ZHxNcGwkMCQyZnR3clZW
U3chKUxUJChweGVXQWxfZlI3eUcxMWVAZno0IUI9PVJ7WWR9SGxwOzc5eytyJjNRCnpAP1dlRDB1
eGYhUypoTXh3Uk9JVlpKMU17SEp7OFpLQlphSFZEP2l1enMwOCtxV0owPV5halFAK3ZMNDEpNUEz
LQp6KD9fRFItTXJfNUljdWN2I258YSQmWkEkMD9VR3p7ST9eTVJ5NlluJXVfOCpjakE0LTFHa3p7
RmB1ZGxUZDZ1JEgKekQ/Nko1ISlEWG8lUz91PiRiWSYqbURMeVR1MzRgJHMjTDUhdC1SUTRTQ2pt
cXE3KVZ1RUsoVFYkOV84MERYWTN6Cnpid05UcnZmeWF6dDF5aSomR3sqbmdtUkh5JkNoe2BkI2Mw
U0BsdXpyPT0xNG5aMDg4UComb2hUZGk+JDt0KFJSYAp6Km8wNXkrakBke29we0ZUQCNrdmFza003
KShpPi17Xzx6KnYkb25tclhlPV4pOEYkckImREMkVXkmIUlZKyVoPTwKemA9Pn5Abmt+Kk8+VXM3
RzU+bj5PVz1wbyQxPU1La0E5P1N5Njx+TFlkU2FQOXBgREJZNTMoMygjSnd5LS1ofmxfCnp5QFhf
bktse00/VXZHVTtBczg9cWtyVXVxJDFhNCtVVS1mbSlBbXlTZGNGXl9MV0dhJWxzaDlZQmlfN0Js
ZDV8bgp6WmooKEkxSjQ1YlF4YCM3SnVVPjlSflQ2VFJRazRWdFdKMnVGTnZPbVdhdmokIWM+PXRW
RWZ9eDIpSD0zYUlRZ28KeiFCPXlaSWA+cGE1VmUkS3skWFVSTjRNdiZxa3g5fDN2S19YYFZ4aXo2
UHd8ZiVTSF52Y0Z3ZT1gUlMxRXtfVihUCnpMTDZrRjw7JiVaPitPejBGSWgoa2dRZz48IX0hVS12
JHJUS1dlTzEkOGRyXilYaT9ZVHBwbShtZz1ebjA5JkIqWgp6di15aUJQUzZicVc7bWk4UFFFRlB6
SExVRjR5Mnh1OX4lWVkzVU9jc2o2R1JRREp1SmQoNVJHaEZ1QiM1NXJIdmIKemVINkpfLT05MXQw
azZvfUZaU2o/UF9BMHl2MEJANGtldkktdzskXn1kZ052bnFBUEtxWX4yQlA/e2FwMXBRTGNDCnom
Mkc1RkZLcjNTdlVucF9DazhXWmdZVSkrZEEjJWg/KntiP0JVWWJgX2t2ZkFNalpGejtAWjJOSl9V
Vlc3YzliKQp6WipYfUlOZWYmb3wxQEZ8Q1J8WGJhXi1RUjdqTWE2Z1VuUXJrfj57ekshKCU7eUV9
SF94I240SGM5WmMzJigkaSgKejFAZjlBP0ludjxWZUhQd0k0Smt5N21IQnhzd2tsbFhZJF9nPUFx
RzFyfWtoJGBwe0kkY01edUQ5VjJ+PTU3YHBaCnpDWjxnS1dBanY9MD1AMihFUURgfFlPfCQhUzJX
dnFaVTNBJmgoNmhHam1SanVJd3sqJV9kdjRCdmVVOUlqI0JTagp6MTN4RU52T1JmaVpmJHorKTdz
S25WbjRJRVBMcEdxVj5RUXs5d1Uqc3llNytvUWtDe1E1dDMjbitLXjZUZ0Z8THEKejI5aWhMRnVS
di12WXtnfHtXRjJ7NWsqLTVkfD0pfChXJmAkJFh2KmkzcWBPfSllXklXWmB3TStqX2xwT2leXlUj
Cnp5fCVRa2tnTDgmJXpIKW9KbCtpZWpwa188eFhAck0hPC0hI21maXhvQjY5eV5AcDxQKWV6QSlQ
ZztZUmlPMUhXOwp6XjVhOCpRZ3xMIz5sQj8oPiRpWT4rQHE9Z0N8MCRVPzRtU2NjbGJnPkc9MHJZ
ZFImKndEQnooWDwkX001Kz5QaVQKejE7JSQzLWhGJGJ2Uk4+SFJfJWRWb2FCa154UzFAeEgjUmxT
SjRqPTFqZDZ7eV9JVEI+S3VOTHRDQjxaWW1JU1psCnpAIXFTSiV4Qz4/LWpyKD5lVjAmI3o7MFRy
WnFvZD9hdThNPkdmQE5+N2UmPEFhekRgPmFAOzZ+KT1xZ0t0KTM+Ywp6UioySCote2RiWjNSeF5p
OEl+WjBeTHZOYjBtYDU2KWluPlZkJHBFbiVUMXd6dUhfdW5IYUUqU15gQGhBYldMJjMKelM2QDxS
bmdOcX50X1p+TXBaNXxHSX5nelktMGs7b2VBNip+b3lFU29EdyVQaU09eW5hK1BtO3plPit8YHdO
fTshCnp4aVdPUi1oPzk5UStgMkZyeVQ0emN7RlQjZVhlJDJLZHgxQz5xJjV2Pjh4SnNyR3BMSUp4
eHAjX1AxRU5UfElLKgp6dmBnUmY/ZDFyJXFJeD9jLUMqezdNSEFlUT5zaUcpYkxrZHhzVmk1PUh3
Nys1LW05QjdWQVNyRCltPmFpRVVeUj8KelRxRCF0O0RhT3tzKyZ1QmxpUWwhcGk2bUEqN3wpMShZ
VjBFQ2pSWDBEWGMhTT57eVFuY3tkQDQpPTIrZSQ/fUNnCno8V0F6TiRgKj9XYiRlKFd3cDU9X1FL
aHk3dzk5O3JoaT56OFU1QFJaZzc3IURBQFhzQld2V2p2UGxlWVZzMmRNMQp6KzNJM0Yzb0FRLWRE
cSMzNz4tQnBKQzNjKmpLUXVub1hYeXJUZW0oZysmQEAxVVU7JH15JmpwV3RNTWhEVDVQP3wKems+
YG5yeiRhRGY0Y0drJms5YTsxNE13V3tlRy1tWitVMXp6VCs1XlRPZnA+NE9qcylXQ30wUXxzIVJq
KTdfUzdfCnphKzt9RSFlbGRJVFhAWTEzUV4pSypfYFF4WFFUcmlsRjJrZ0BCNyQ8M0RMVFZJek12
fjIrbk1KKFAzZCheSH1MIwp6ezh1Xz9xeCtxUTU2NXQ5d3Etbz0yVXBpTmpqREBaTnFxYVVHZmhT
Kms3UCVAMks5b1JLN2FCJD04ejRoS0E8ZmAKemN5RF9BeWMoJWIxKT8wVTdVaEBkdFVeaE9aVX5D
Y15WQihYKzl3JW0jOXBOeDRSUFNIUn55QkBzbml4IU91UHsjCnpwKWJlJCRUJGt9dygqPVNkO2Fa
Wno8aXlOQzYhQCpUQiQpU0JOUDk/amx6YmF6TU9jRzZgSU5KZExMPmJYM3lJZAp6MkBfOFVKPWA/
YC1aJlM5KCNBJkUlOSROOUFWKkBycG1lc2RiVWl+a003b1ZDZTR1UmlENjZAS048bWcwRjVTclAK
emc9bzJMdkRQO3w4JSNCS0JSbERkNUFUa31WX3liJCR0VSY5Yk5ONTxPNXBzSUhCUUJ9dEp1WiQt
cDxTUlBHYGBPCnpBRmJ3Vlh4cDFSb1VVPnNXVjdXM01gfipMa1cyeS1NWilLVSk5PGBEOWYoYnIk
ajh3SDdlcVFgb1ZYe0FhRn1VMgp6P3xDPSR5fHY8TiVXPTR2SHdGPWpkfmo+c2dSPGY3MStrVD00
XmxZRzRsfXlKa1dOYEFKTjBjaDUkQVMoJEx0NFoKejxoO29vc3BpdWlRVnNkfFhQeVBHcjQ7dlJJ
KipZTCYwNEluZjZ4UVB3Uy03bG53UTttdFhXXigyKWVDdzZMbHZmCnpWIVhgJSMxendDWW1JeXh1
MWAyc0plX09MK2ZRWExtezB2UXg/RUVAPmJ2MjxaZlNOK3pxKCFQYiVSaFVVeGcwRQp6V1d1bFZk
LUpYfD48NW1WQjR1Xj4heVdESHJVcHhgKTtffjBJbzZifV5TSChnb2l1UXFBTVhmV3Boez01czw1
TiMKemprI3NucX5WQ1ZodSFmZjZTLVJjNWQlWXk0d293TiE+PFNJNFBLajNkblpUNUk8bEkoKnhj
PiQ/V059MnBgcU83CnpyS0xJUnFhO1J4QCFANkJiR1NMTkhfaEZ4cTV9KkF0blNycmohVzV0dE9V
SjkpS2FublA9RWpVM040PD8leCROQQp6I0tOeXAtPXliR2AtJEE0eV4mdklhZEk5bHBWVDIqS3w4
MCEqOGtNM0g2JUEkTzVVSUlJSHR+T0NSSShtYD5hcGsKeklAIV43V0xNWSNzSm0pQ1JCa2wjeXwz
Qngke3h6dTF3VjMrZWZaPD9PRGg8Kj1FJUFyR1V0VkIqN3B1dXZ7Z0t3CnpgQ0RaNkplVXlNKk5I
PXFXWGxZLW9IMmQhXzQyMiV3YjMmWT9XLWVFeDNlYlF0cXZ3VnJ7OSFPOCt5YXdMMjgyOwp6dzdy
M3NjYT9gWkNiXilNZmJ6S350Y0RqVGUmOXA7MDwqUzhYcDdJbmN6WHM2LSpaMnVFJC14QzgqQUxF
bHtYOU4KejN0MEZmNlZnWGMqKlh2QER1e1FEZ3JPS09DY1d6KHAjMV9adjlZfl5ndUh0e3ohNnIm
aXotWUhFQUFienptMiZBCnpiLVV1el9TREFxZzBeIUVaRT4qc1I1KSNNWHp2c2FzfkcjV01MJEFA
PndTYTh1N1IzVEJhXms0OUJJbGIqUEB+JAp6dmRYbFRQdlo2VXcxJENJVHlwY25TPSoxdGsrRiVY
M1Q+TFB1d2tKeCVyOEYoTHt1VjFGKFRYKE4pVGI8Ymwqc3YKelZwTG1lQ3dOLW05cmIpcFdgRjhp
MnRMeFBwUEJkYmRtdFdAdHoyQX55WkxtfVpANFIpZzs2VmYrfTRMTGV3P1EtCnpHUTFBRmR8eUNF
Jl9nLTtFalZNbCVaaVYxWnwrT3dgMH1idGMhb1pvTUN2OFc7VmdAOSQoQ2N8PDZxPkI4SkBOPQp6
ekc3a1AmJU9tN1lAbFJ9P0hjVDI1SGxSdzFEXjVMKyh4OyQqYSpaJEBZdis/WHVnXmQjMihER2hN
SlRgWmN8T3gKenFPRWhNe04pcUdwek5HY0pVcEZ3VyFOenBkd1lLfnNPcC02JUtmTVpJXnhLbkUq
X2Y+JX1+cDVreno/Tj1sPHkqCnpAYH1wNj19eUt8KGVCRHc0dnlqcyhRMVE9Xm45JEdnaFk7e2lf
dHdDT3FNcnFaY2l9WGtuV1lfRkpHaFF1Smk5egp6PXdkUns8dVRfdFZBXzxzUEx+Q296bE0/c2BC
PzItNjJ4fGIwRkluZlYzQiVoUn5mZEAmTGhwPEd3WT0qK1ZPJH4Kem1oYUE2Yi1jfSFuYk1KViZx
US0+LVpRcmBeaEtGKkRjUm1icm1uMDA0Qmt2I1QjP059KiZURGhqKTtzZTJRY1VQCnpwUGQjYmtX
Kn4xOyVoczVOQ3tpZnY2UD5gei1xUThQckZjI3R0fi1JYXIwT204UlZDIyQ9RUtNQDJQdXBCJXR2
bwp6MDg1PT8lRXExM3JmUV9oUzlVeSpET1UjSUJgfTQpZktGQ2dqMnU1PXNCPjxFZTl6MU9UKmpl
Y0YpWFNvTjA5UXEKejV3djB8YjBAPEpUPTFpS0dgPW43U0tpZnVFVU8zZHRnZC1DKU9jWlA/dS1D
bzhseEBpKl50JWB7bFVsc150Ry13CnpjaXhYb2hDZzVWQHJuZmM3IVVIcVZOPzJncytHYjtnQndR
aishanwpKUNHb2lmNlIocik5UGI3JSR8PkZRTVVNQwp6VC1AaD4ye0lLVi0qTmZHd2s9ODcqdUZ2
JSN5T20lVlZUSWRtJUNkZm1QaCVtPHd4b0JleVZHLU1IbVlBazJXJmwKemtWND1jWkB1cm9vY2Rs
JXZRQ2BSdndXcT97Y3ZoSHEzZyZwZkEmKSNAKEFAal9gI3N7cUd6MSp2PiQhfVM+eTNDCnp0aCNH
a09ANChEZE40T1pwRU5VN3okNyRYPjsyP3d0KkZvTHloXyM1RXl4clhuPzYpMUk2aE9VTFd3IzRx
Z1gyPwp6N3lDMyV1RyF+dGYlPihZPT53KHlKSEYxVEBaaV98Q0o3fUsteClrLVl0ZnU8Um1VNDI9
cyZxeyUqNTwpI2ZFd0wKeiU4WVMrbld1dlc/NFkkbSgoMzBOcnV4Mzhmb0JxZiY7dF8qem9hTz9T
ZThhIXBJR1g8b1cyQ25oWGpeQm4mcj5TCno2WXU9YHhXJmd6YE5VblpMQ3k8UCNqZG0kJT4wRXFu
T0pgRTw0P1pBKUw8MkFKJEdJOXNYYUVnRTIzZXteZEApUAp6eEtNRXxKKFp8TFl7P34wSDRVQCkm
PCg4JHt0cnF5eGFmdSg3cTlMRVQ1WHdGXkJFezZgR2JBYk93JDBkaXZ0NXEKejA3dXhUX1AkYl5A
an1PVllyVEIhbTV4Kk5pZiRPaGpvTV5XRDg0YmJQMFdlS19JUTIyWDJWZX5VNlpOYGNaR0lDCnp4
fn1makBWSVY2X3xyKTEjdXhHdk4rRjhaNiNCVUlwe3JYSWljU0lVUVZ3YkRTXzN4VVMmbXJGYEw+
YnlWcH01dQp6QVNAdmxJeGlIUk8lNnpeeE9sbG54PS1sKXo2ZUxFVWIoSl5gLWZ6OG5PaSlWaHhC
Kjc+bk5ARTZqK1phWnBAS08KekglfFRmQHBYOD5hRU56b0BBMENvZmA2V1AjTiZpWnVKU0JPUnxF
em8pMEFeeEpSdEs0SzxAeXJITT9BdE1SaXFQCno8UzRYdj0yQyFDY1g3Rj5yJUdwQGVAQDRqZHVi
SWw7Q2g/LWBASmBHP0djKD9SKVlpbldFVH08PypBXyhPO1dMdgp6Ukw0WD5wfjhSR0c9PX1GWD0t
fnBWP2J5ZSk9ZFdFWUtnYVZjRWJeP3YmMnRUYjAtVylUOGl9V0U4QUlNQGFBckkKeklJST4xWilY
aTRtMllpYWZwRnByUUJ6dFA9Vj5HZTVrPis5VlBGXiMwdE8/MXE5UEN6a2I7fUpxbilKYCoyV1A3
CnoxT3FAKXU5Z19BOCZFX1Awc3hWV2t2O15XNUZgTUVHSXk1OCp4QV4raz02a35UNWNGOFU3IWVZ
Mj8/SDlGfiZmRgp6cSQ7Yz92OE1XO3M7dE9nNSZUaEtoOWJmTFBqJVZrbkZfV1Fjcm99T0JAan5e
Uis9aUolSDZGUWNrNE94c21BQVAKelhJalVsQkY+dUVaKjk8XkNLWEt7SDRmSHlaaVM+eUY2Ozk1
UHAyfG1eJVQxO2ModXBjPCh3XmopKHtzY1UlTz83Cnp6ck1YcSg3Z0ZtYVlnOD5rKVQlJkVmVWhX
ZVFlSDQ5eUBQTztDaW91dnRxUXt1S1RMPVhUajB3YHt5PzcoOChjKwp6RUc+NkhRO2o+K0VWV2d8
dmAmai1QTmdUKjVfJlkxTz00PGg0Q29mZW5scWh5Uk1+eXlBKV5VT3NDKFcxNFZMKXQKekwydlFR
RlRCKlA0UWc9Ym5CUnYmY2ojJitXdjYtMkRvT0NAODJhJTNuOEclbEZFe1puOWZ0PUIrZE04aGxH
THlDCnpRKXM/QXI/SyE7WHRNZH5WV1htaSNBbEA4ejgoSnlLU2NqWjxleVhrWH1NZHRrJDludmNn
T3NlTn1JYzROU3BEMAp6R3J8dDw+Vn5wNCRDR3dpKzVDQHA1ZGNXZiZkU1ohKWQrP30wRmUrZDVE
dGR7VklyYkhzSWMod2ZkR1NucXlhXk0KemZoUGFHO2VRYmtOYUNwYDBIbHI2IVA9Mn0xd2hpYVlY
YmhwMTB2Kn5qUnJJWE5RJm00Xk5fI0k2OVhYOV5TMjV9Cno5Z25sciFuaGZNaGBrR3RIcGJKPDxS
N3FxdEA8Nm15MTVNb3E7OEhVYVRaUGowQktAZWFxZjZhajRLZEFHTkIxbAp6IUMyWHVsYTJ6KDA3
NFcyNm9FcmNLeXJBVHlFQ3h+cUQ5UTVJbzgjZzFZemp+TFRNMz9mUU93V01wSTUycXlUZ3kKej0y
PTFsZ2QjZGZ3QlFPUGJ4OzF6YzlLY2JBdG5PLT41ZVBsVXBAZi1hKVArdlBjS01gUmtFe2tIM0ko
amw9TytoCnp4cyE3N19lQjEhV0FvYnYlQTl6N2FXPSVMWkhQaHM0aktTYmJILXEkRUotKGsoU0t1
c15iSEp3U2EoT3F8TmEzSgp6djZhb1NIbiVaWUt7O3ZPZjI4ejMlQHR4MFF0b2NISUpgSm83TDVq
ajtsZzBCRnAmZW9GeWVyTiE5PCNYZ158UjYKejt2NXVBeWlKSTVxJHFLcXsqWGY/aHlmNWdNI1FW
PzQrc1BhZn5aU1Vgd2M7WWdBJno8eUtMb2RpVFJIbm9UeCs2CnpnQTx7VkJvbX1UZittP0R1N1Mh
RHxBfStJdjUxJT9eRHlFWk5lPXRkRUhRYytWKkJkMGoyTGxWNmFwb0JFQ0xtVQp6IVVlJWw5eCN9
UF9pdEpDI0FCPWhVPzJuekFSXyhvMEZlajszPDB6VHt2a3VjNVg5X345dzdFVkdCNmxJcjFKbGUK
ekxCWWhGfDVKdjlpeFNWc0tWQEpqXmp+XkppXlRvP3J5aGJSe0ZoN157eDNXdmFYMD5fOXVrV0R3
O29qVlVwXnhkCnpxV0BsdDYjYmlCSEByRlZnMiQ3bnQhM3dwQSpLcVhpTmdgT2BUR24yS25ockU5
MXVkezQpRyNUa08zTTIjZ1czWQp6YUZpJCpDV1ZCZHJLTXp7dkxhdzg4WkhmJUt9ayEmcGtSYXE7
UXY9NDlSZUFnQ0NWMEs+RVA8XzFPeT5iRDZvYF8KeENfKU0/RH1xS0tMe0pEfURKYztWNWQ7YiVq
WUxWSU5LfCVwR3NuQ0EtY24pK0FePmh+U3Y1NF56V3tuQF9XSis7CgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9ndGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3QudHh0IGIvU291cmNlL1dlYktpdC9n
dGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3QudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA5ZGFlYWZiOTg2NGNmNDMwNTVhZTkzYmViMGFmZDZjN2QxNDRiZmE0Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3Rz
L3Jlc291cmNlcy90ZXN0LnR4dAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXRlc3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RfdXRpbHMuYyBiL1NvdXJjZS9X
ZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RfdXRpbHMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNmJiNjQ1ZDBkY2NiYWE0MTkxN2I5ZjYxOTRkNWYxYjkyYWRkOGQxNC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0
cy90ZXN0X3V0aWxzLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwIEFybm8gUmVuZXZpZXIKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgInRlc3RfdXRpbHMuaCIKLQot
I2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgotCi1pbnQgdGVzdHV0
aWxzX3JlbGF0aXZlX2NoZGlyKGNvbnN0IGdjaGFyICp0YXJnZXRGaWxlbmFtZSwgY29uc3QgZ2No
YXIgKmV4ZWN1dGFibGVQYXRoKQotewotICAgIC8qIHVzZXIgY2FuIHNldCBsb2NhdGlvbiBvZiB0
aGUgd2Via2l0IHJlcG9zaXRvcnkgZGlyZWN0b3J5IGlmIGl0IGRpZmZlcnMgZnJvbSBidWlsZCBk
aXJlY3RvcnkgKi8KLSAgICBjb25zdCBnY2hhciAqcmVwb1BhdGggPSBnX2dldGVudigiV0VCS0lU
UkVQT0RJUiIpOwotICAgIGlmIChyZXBvUGF0aCkgewotICAgICAgICBpZiAoZ19jaGRpcihyZXBv
UGF0aCkpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgfSBlbHNlIGlmIChnX2NoZGlyKGdf
cGF0aF9nZXRfZGlybmFtZShleGVjdXRhYmxlUGF0aCkpKQotICAgICAgICAgICAgcmV0dXJuIC0x
OwotCi0gICAgd2hpbGUgKCFnX2ZpbGVfdGVzdCh0YXJnZXRGaWxlbmFtZSwgR19GSUxFX1RFU1Rf
RVhJU1RTKSkgewotICAgICAgICBnY2hhciAqcGF0aE5hbWU7Ci0gICAgICAgIGlmIChnX2NoZGly
KCIuLiIpKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBnX2Fzc2VydCghZ19zdHJf
ZXF1YWwoKHBhdGhOYW1lID0gZ19nZXRfY3VycmVudF9kaXIoKSksICIvIikpOwotICAgICAgICBn
X2ZyZWUocGF0aE5hbWUpOwotICAgIH0KLQotICAgIGdjaGFyICpkaXJOYW1lID0gZ19wYXRoX2dl
dF9kaXJuYW1lKHRhcmdldEZpbGVuYW1lKTsKLSAgICBpZiAoZ19jaGRpcihkaXJOYW1lKSkgewot
ICAgICAgICBnX2ZyZWUoZGlyTmFtZSk7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAg
ICBnX2ZyZWUoZGlyTmFtZSk7Ci0gICAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2d0ay90ZXN0cy90ZXN0X3V0aWxzLmggYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90
ZXN0X3V0aWxzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjNjBkYTNmMGZhYmIz
YWVkOGJhODA0NTgyMDJjNzk0YThlM2Y3MjAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdF91dGlscy5oCisr
KyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jaW5jbHVkZSA8Z2xpYi5oPgotCi1pbnQgdGVz
dHV0aWxzX3JlbGF0aXZlX2NoZGlyKGNvbnN0IGdjaGFyICp0YXJnZXRGaWxlbmFtZSwgY29uc3Qg
Z2NoYXIgKmV4ZWN1dGFibGVQYXRoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rl
c3RzL3Rlc3RhcHBsaWNhdGlvbmNhY2hlLmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0
YXBwbGljYXRpb25jYWNoZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MThmNDAx
YTdiN2ExNTU1M2MwYjM5YzY0NzFhZDI1OTI3NzYwM2UzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhcHBs
aWNhdGlvbmNhY2hlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDExIEx1a2FzeiBTbGFjaGNpYWsKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z2xpYi9ncHJpbnRmLmg+Ci0jaW5jbHVkZSA8Z3Rr
L2d0ay5oPgotI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KLQotc3RhdGljIHZvaWQgdGVzdF9h
cHBsaWNhdGlvbl9jYWNoZV9tYXhpbXVtX3NpemUoKQotewotICAgIHVuc2lnbmVkIGxvbmcgbG9u
ZyBtYXhTaXplID0gODE5MjsKLSAgICB3ZWJraXRfYXBwbGljYXRpb25fY2FjaGVfc2V0X21heGlt
dW1fc2l6ZShtYXhTaXplKTsKLQotICAgIC8vIENyZWF0aW5nIGEgV2ViVmlldyAtIG1ha2Ugc3Vy
ZSB0aGF0IGl0IGRpZG4ndCBjaGFuZ2UgYW55dGhpbmcKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmpl
Y3RfcmVmX3Npbmsod2ViVmlldyk7Ci0gICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Ci0KLSAg
ICBnX2Fzc2VydChtYXhTaXplID09IHdlYmtpdF9hcHBsaWNhdGlvbl9jYWNoZV9nZXRfbWF4aW11
bV9zaXplKCkpOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCi17Ci0gICAg
Z3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOwotCi0gICAgZ190ZXN0X2J1Z19iYXNl
KCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJr
aXQvYXBwbGljYXRpb25fY2FjaGUvbWF4aW11bV9zaXplIiwKLSAgICAgICAgICAgICAgICAgICAg
dGVzdF9hcHBsaWNhdGlvbl9jYWNoZV9tYXhpbXVtX3NpemUpOwotCi0gICAgcmV0dXJuIGdfdGVz
dF9ydW4oKTsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGF0
ay5jIGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGF0ay5jCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAyYTJkYjYxNDZlYTA4NmRlMzc4ZDdhZDEzMzY1NWQyZTIyMTljN2IwLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQvZ3RrL3Rlc3RzL3Rlc3RhdGsuYworKysgL2Rldi9udWxsCkBAIC0xLDE0NzYgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBJZ2FsaWEgUy5MLgotICogQ29weXJpZ2h0IChDKSAy
MDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRl
IDxnbGliL2dzdGRpby5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDxsb2NhbGUu
aD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+Ci0KLXN0
YXRpYyBjb25zdCBjaGFyKiBjZW50ZXJlZENvbnRlbnRzID0gIjxodG1sPjxib2R5PjxwIHN0eWxl
PSd0ZXh0LWFsaWduOiBjZW50ZXI7Jz5TaG9ydCBsaW5lPC9wPjxwIHN0eWxlPSd0ZXh0LWFsaWdu
OiBjZW50ZXI7Jz5Mb25nLXNpemUgbGluZSB3aXRoIHNvbWUgZm9vIGJhciBiYXogY29udGVudDwv
cD48cCBzdHlsZT0ndGV4dC1hbGlnbjogY2VudGVyOyc+U2hvcnQgbGluZTwvcD48cCBzdHlsZT0n
dGV4dC1hbGlnbjogY2VudGVyOyc+VGhpcyBpcyBhIG11bHRpLWxpbmUgcGFyYWdyYXBoPGJyIC8+
d2hlcmUgdGhlIGZpcnN0IGxpbmU8YnIgLz5pcyB0aGUgYmlnZ2VzdCBvbmU8L3A+PC9ib2R5Pjwv
aHRtbD4iOwotCi1zdGF0aWMgY29uc3QgY2hhciogY29udGVudHMgPSAiPGh0bWw+PGJvZHk+PHA+
VGhpcyBpcyBhIHRlc3QuIFRoaXMgaXMgdGhlIHNlY29uZCBzZW50ZW5jZS4gQW5kIHRoaXMgdGhl
IHRoaXJkLjwvcD48L2JvZHk+PC9odG1sPiI7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBjb250ZW50
c0luVGFibGVXaXRoSGVhZGVycyA9ICI8aHRtbD48Ym9keT48dGFibGU+PHRyPjx0aD5mb288L3Ro
Pjx0aD5iYXI8L3RoPjx0aCBjb2xzcGFuPScyJz5iYXo8L3RoPjwvdHI+PHRyPjx0aD5xdXg8L3Ro
Pjx0ZD4xPC90ZD48dGQ+MjwvdGQ+PHRkPjM8L3RkPjwvdHI+PHRyPjx0aCByb3dzcGFuPScyJz5x
dXV4PC90aD48dGQ+NDwvdGQ+PHRkPjU8L3RkPjx0ZD42PC90ZD48L3RyPjx0cj48dGQ+NjwvdGQ+
PHRkPjc8L3RkPjx0ZD44PC90ZD48L3RyPjx0cj48dGg+Y29yZ2U8L3RoPjx0ZD45PC90ZD48dGQ+
MTA8L3RkPjx0ZD4xMTwvdGQ+PC90cj48L3RhYmxlPjx0YWJsZT48dHI+PHRkPjE8L3RkPjx0ZD4y
PC90ZD48L3RyPjx0cj48dGQ+MzwvdGQ+PHRkPjQ8L3RkPjwvdHI+PC90YWJsZT48L2JvZHk+PC9o
dG1sPiI7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBjb250ZW50c1dpdGhFeHRyYW5lb3VzV2hpdGVT
cGFjZXMgPSAiPGh0bWw+PGhlYWQ+PGJvZHk+PHA+VGhpc1xuICAgICAgICAgICAgICAgICAgICAg
ICAgICBwYXJhZ3JhcGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9ya2VkITwvcD48L2JvZHk+
PC9odG1sPiI7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBjb21ib0JveFNlbGVjdG9yID0gIjxodG1s
Pjxib2R5PjxzZWxlY3Q+PG9wdGlvbiBzZWxlY3RlZCB2YWx1ZT0nZm9vJz5mb288L29wdGlvbj48
b3B0aW9uIHZhbHVlPSdiYXInPmJhcjwvb3B0aW9uPjwvc2VsZWN0PjwvYm9keT48L2h0bWw+IjsK
LQotc3RhdGljIGNvbnN0IGNoYXIqIGVtYmVkZGVkT2JqZWN0cyA9ICI8aHRtbD48Ym9keT48cD5D
aG9vc2U6IDxpbnB1dCB2YWx1ZT0nZm9vJyB0eXBlPSdjaGVja2JveCcvPmZvbyA8aW5wdXQgdmFs
dWU9J2JhcicgdHlwZT0nY2hlY2tib3gnLz5iYXIgKHBpY2sgb25lKTwvcD48cD5DaG9vc2U6IDxz
ZWxlY3QgbmFtZT0nZm9vJz48b3B0aW9uPmJhcjwvb3B0aW9uPjxvcHRpb24+YmF6PC9vcHRpb24+
PC9zZWxlY3Q+IChwaWNrIG9uZSk8L3A+PHA+PGlucHV0IG5hbWU9J2Zvb2JhcmJ1dHRvbicgdmFs
dWU9J2Zvb2JhcicgdHlwZT0nYnV0dG9uJy8+PC9wPjwvYm9keT48L2h0bWw+IjsKLQotc3RhdGlj
IGNvbnN0IGNoYXIqIGZvcm1XaXRoVGV4dElucHV0cyA9ICI8aHRtbD48Ym9keT48Zm9ybT48aW5w
dXQgdHlwZT0ndGV4dCcgbmFtZT0nZW50cnknIC8+PGlucHV0IHR5cGU9J3Bhc3N3b3JkJyBuYW1l
PSdwYXNzd29yZEVudHJ5JyAvPjwvZm9ybT48L2JvZHk+PC9odG1sPiI7Ci0KLXN0YXRpYyBjb25z
dCBjaGFyKiBoeXBlcnRleHRBbmRIeXBlcmxpbmtzID0gIjxodG1sPjxib2R5PjxwPkEgcGFyYWdy
YXBoIHdpdGggbm8gbGlua3MgYXQgYWxsPC9wPjxwPjxhIGhyZWY9J2h0dHA6Ly9mb28uYmFyLmJh
ei8nPkEgbGluZTwvYT4gd2l0aCA8YSBocmVmPSdodHRwOi8vYmFyLmJhei5mb28vJz5hIGxpbmsg
aW4gdGhlIG1pZGRsZTwvYT4gYXMgd2VsbCBhcyBhdCB0aGUgYmVnaW5uaW5nIGFuZCA8YSBocmVm
PSdodHRwOi8vYmF6LmZvby5iYXIvJz5hdCB0aGUgZW5kPC9hPjwvcD48b2w+PGxpPkxpc3QgaXRl
bSB3aXRoIGEgPHNwYW4+PGEgaHJlZj0naHR0cDovL2Zvby5iYXIuYmF6Lyc+bGluayBpbnNpZGUg
YSBzcGFuIG5vZGU8L2E+PC9zcGFuPjwvbGk+PC9vbD48L2JvZHk+PC9odG1sPiI7Ci0KLXN0YXRp
YyBjb25zdCBjaGFyKiBsYXlvdXRBbmREYXRhVGFibGVzID0gIjxodG1sPjxib2R5Pjx0YWJsZT48
dHI+PHRoPk9kZDwvdGg+PHRoPkV2ZW48L3RoPjwvdHI+PHRyPjx0ZD4xPC90ZD48dGQ+MjwvdGQ+
PC90cj48L3RhYmxlPjx0YWJsZT48dHI+PHRkPmZvbzwvdGQ+PHRkPmJhcjwvdGQ+PC90cj48L3Rh
YmxlPjwvYm9keT48L2h0bWw+IjsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGxpbmtzV2l0aElubGlu
ZUltYWdlcyA9ICI8aHRtbD48aGVhZD48c3R5bGU+YS5odHRwOmJlZm9yZSB7Y29udGVudDogdXJs
KG5vLWltYWdlLnBuZyk7fTwvc3R5bGU+PGJvZHk+PHA+PGEgY2xhc3M9J2h0dHAnIGhyZWY9J2Zv
byc+Zm9vPC9hPiBiYXIgYmF6PC9wPjxwPmZvbyA8YSBjbGFzcz0naHR0cCcgaHJlZj0nYmFyJz5i
YXI8L2E+IGJhejwvcD48cD5mb28gYmFyIDxhIGNsYXNzPSdodHRwJyBocmVmPSdiYXonPmJhejwv
YT48L3A+PC9ib2R5PjwvaHRtbD4iOwotCi1zdGF0aWMgY29uc3QgY2hhciogbGlzdHNPZkl0ZW1z
ID0gIjxodG1sPjxib2R5Pjx1bD48bGk+dGV4dCBvbmx5PC9saT48bGk+PGEgaHJlZj0nZm9vJz5s
aW5rIG9ubHk8L2E+PC9saT48bGk+dGV4dCBhbmQgYSA8YSBocmVmPSdiYXInPmxpbms8L2E+PC9s
aT48L3VsPjxvbD48bGk+dGV4dCBvbmx5PC9saT48bGk+PGEgaHJlZj0nZm9vJz5saW5rIG9ubHk8
L2E+PC9saT48bGk+dGV4dCBhbmQgYSA8YSBocmVmPSdiYXInPmxpbms8L2E+PC9saT48L29sPjwv
Ym9keT48L2h0bWw+IjsKLQotc3RhdGljIGNvbnN0IGNoYXIqIHRleHRGb3JDYXJldEJyb3dzaW5n
ID0gIjxodG1sPjxib2R5PjxoMT5BIHRleHQgaGVhZGVyPC9oMT48cD5BIHBhcmFncmFwaCA8YSBo
cmVmPSdodHRwOi8vZm9vLmJhci5iYXovJz53aXRoIGEgbGluazwvYT4gaW4gdGhlIG1pZGRsZTwv
cD48b2w+PGxpPkEgbGlzdCBpdGVtPC9saT48bGk+PHNwYW4gc3R5bGU9J2Rpc3BsYXk6YmxvY2s7
Jz5CbG9jayBzcGFuIGluIGEgbGlzdCBpdGVtPC9zcGFuPjxzcGFuPklubGluZSBzcGFuIGluIGEg
bGlzdCBpdGVtPC9zcGFuPjwvbGk+PGxpPjxhIGhyZWY9J2Zvbyc+PHNwYW4gc3R5bGU9J2Rpc3Bs
YXk6YmxvY2s7Jz5CbG9jayBzcGFuIGluIGEgbGluayBpbiBhIGxpc3QgaXRlbTwvc3Bhbj48c3Bh
bj5JbmxpbmUgc3BhbiBpbiBhIGxpbmsgaW4gYSBsaXN0IGl0ZW08L3NwYW4+PC9hPjwvbGk+PC9v
bD48c2VsZWN0PjxvcHRpb24gc2VsZWN0ZWQgdmFsdWU9J2Zvbyc+QW4gb3B0aW9uIGluIGEgY29t
Ym8gYm94PC9vcHRpb24+PC9zZWxlY3Q+PGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J2ZvbycgdmFs
dWU9J2ZvbyBiYXIgYmF6JyAvPjx0YWJsZT48dHI+PHRkPmEgdGFibGUgY2VsbDwvdGQ+PHRkPjwv
dGQ+PHRkPjxhIGhyZWY9J2Zvbyc+PHNwYW4gc3R5bGU9J2Rpc3BsYXk6YmxvY2s7Jz5CbG9jayBz
cGFuIGluIGEgbGluayBpbiBhIHRhYmxlIGNlbGw8L3NwYW4+PHNwYW4+SW5saW5lIHNwYW4gaW4g
YSBsaW5rIGluIGEgdGFibGUgY2VsbDwvc3Bhbj48L2E+PC90ZD48dGQ+PHNwYW4gc3R5bGU9J2Rp
c3BsYXk6YmxvY2s7Jz5CbG9jayBzcGFuIGluIGEgdGFibGUgY2VsbDwvc3Bhbj48c3Bhbj5Jbmxp
bmUgc3BhbiBpbiBhIHRhYmxlIGNlbGw8L3NwYW4+PC90ZD48L3RyPjwvdGFibGU+PGg0PjxhIGhy
ZWY9J2Zvbyc+PHNwYW4gc3R5bGU9J2Rpc3BsYXk6YmxvY2s7Jz5CbG9jayBzcGFuIGluIGEgbGlu
ayBpbiBhIGhlYWRpbmc8L3NwYW4+PHNwYW4+SW5saW5lIHNwYW4gaW4gYSBsaW5rIGluIGEgaGVh
ZGluZzwvc3Bhbj48L2g0PjxoND48c3BhbiBzdHlsZT0nZGlzcGxheTpibG9jazsnPkJsb2NrIHNw
YW4gaW4gYSBoZWFkaW5nPC9zcGFuPjxzcGFuPklubGluZSBzcGFuIGluIGEgaGVhZGluZzwvc3Bh
bj48L2g0PjwvYm9keT48L2h0bWw+IjsKLQotc3RhdGljIGNvbnN0IGNoYXIqIHRleHRGb3JTZWxl
Y3Rpb25zID0gIjxodG1sPjxib2R5PjxwPkEgcGFyYWdyYXBoIHdpdGggcGxhaW4gdGV4dDwvcD48
cD5BIHBhcmFncmFwaCB3aXRoIDxhIGhyZWY9J2h0dHA6Ly93ZWJraXQub3JnJz5hIGxpbms8L2E+
IGluIHRoZSBtaWRkbGU8L3A+PG9sPjxsaT5BIGxpc3QgaXRlbTwvbGk+PC9vbD48c2VsZWN0Pjwv
Ym9keT48L2h0bWw+IjsKLQotc3RhdGljIGNvbnN0IGNoYXIqIHRleHRXaXRoQXR0cmlidXRlcyA9
ICI8aHRtbD48aGVhZD48c3R5bGU+LnN0MSB7Zm9udC1mYW1pbHk6IG1vbm9zcGFjZTsgY29sb3I6
cmdiKDEyMCwxMjEsMTIyKTt9IC5zdDIge3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7IGJhY2tn
cm91bmQtY29sb3I6cmdiKDgwLDgxLDgyKTt9PC9zdHlsZT48L2hlYWQ+PGJvZHk+PHAgc3R5bGU9
XCJmb250LXNpemU6MTQ7IHRleHQtYWxpZ246cmlnaHQ7XCI+VGhpcyBpcyB0aGUgPGk+Zmlyc3Q8
L2k+PGI+IHNlbnRlbmNlIG9mIHRoaXMgdGV4dC48L2I+PC9wPjxwIGNsYXNzPVwic3QxXCI+VGhp
cyBzZW50ZW5jZSBzaG91bGQgaGF2ZSBhbiBzdHlsZSBhcHBsaWVkIDxzcGFuIGNsYXNzPVwic3Qy
XCI+YW5kIHRoaXMgcGFydCBzaG91bGQgaGF2ZSBhbm90aGVyIG9uZTwvc3Bhbj4uPC9wPjxwPng8
c3ViPjE8L3N1Yj48c3VwPjI8L3N1cD49eDxzdWI+Mjwvc3ViPjxzdXA+Mzwvc3VwPjwvcD48cCBz
dHlsZT1cInRleHQtYWxpZ246Y2VudGVyO1wiPlRoaXMgc2VudGVuY2UgaXMgdGhlIDxzdHJpa2U+
bGFzdDwvc3RyaWtlPiBvbmUuPC9wPjwvYm9keT48L2h0bWw+IjsKLQotc3RhdGljIEF0a09iamVj
dCogZ2V0V2ViQXJlYU9iamVjdChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQotewotICAgIC8qIE1h
bnVhbGx5IHNwaW4gdGhlIG1haW4gY29udGV4dCB0byBtYWtlIHN1cmUgdGhlIGFjY2Vzc2libGUK
LSAgICAgICBvYmplY3RzIGFyZSBwcm9wZXJseSBjcmVhdGVkIGJlZm9yZSBjb250aW51aW5nLiAq
LwotICAgIHdoaWxlIChnX21haW5fY29udGV4dF9wZW5kaW5nKDApKQotICAgICAgICBnX21haW5f
Y29udGV4dF9pdGVyYXRpb24oMCwgVFJVRSk7Ci0KLSAgICBBdGtPYmplY3QqIHJvb3RPYmplY3Qg
PSBndGtfd2lkZ2V0X2dldF9hY2Nlc3NpYmxlKEdUS19XSURHRVQod2ViVmlldykpOwotICAgIGlm
ICghcm9vdE9iamVjdCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBBdGtPYmplY3QqIHdl
YkFyZWFPYmplY3QgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKHJvb3RPYmplY3Qs
IDApOwotICAgIGlmICghd2ViQXJlYU9iamVjdCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAg
ICAvKiBXZSBkb24ndCBuZWVkIHRoZSBleHRyYSByZWYgaGVyZS4gKi8KLSAgICBnX29iamVjdF91
bnJlZih3ZWJBcmVhT2JqZWN0KTsKLQotICAgIHJldHVybiB3ZWJBcmVhT2JqZWN0OwotfQotCi1z
dGF0aWMgZ2NoYXIqIHRleHRDYXJldE1vdmVkUmVzdWx0ID0gMDsKLQotc3RhdGljIHZvaWQgdGV4
dENhcmV0TW92ZWRDYWxsYmFjayhBdGtUZXh0KiB0ZXh0LCBnaW50IHBvcywgZ3BvaW50ZXIgZGF0
YSkKLXsKLSAgICBnX2Fzc2VydChBVEtfSVNfVEVYVCh0ZXh0KSk7Ci0KLSAgICBnX2ZyZWUodGV4
dENhcmV0TW92ZWRSZXN1bHQpOwotICAgIEF0a1JvbGUgcm9sZSA9IGF0a19vYmplY3RfZ2V0X3Jv
bGUoQVRLX09CSkVDVCh0ZXh0KSk7Ci0gICAgdGV4dENhcmV0TW92ZWRSZXN1bHQgPSBnX3N0cmR1
cF9wcmludGYoInwlc3wlZHwiLCBhdGtfcm9sZV9nZXRfbmFtZShyb2xlKSwgcG9zKTsKLX0KLQot
c3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0NhcmV0T2Zmc2V0cygpCi17Ci0gICAgV2ViS2l0V2Vi
Vmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwot
ICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOwotICAgIEd0a0FsbG9jYXRpb24gYWxsb2Nh
dGlvbiA9IHsgMCwgMCwgODAwLCA2MDAgfTsKLSAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUo
R1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOwotICAgIHdlYmtpdF93ZWJfdmlld19s
b2FkX3N0cmluZyh3ZWJWaWV3LCB0ZXh0Rm9yQ2FyZXRCcm93c2luZywgMCwgMCwgMCk7Ci0KLSAg
ICBBdGtPYmplY3QqIG9iamVjdCA9IGdldFdlYkFyZWFPYmplY3Qod2ViVmlldyk7Ci0gICAgZ19h
c3NlcnQob2JqZWN0KTsKLQotICAgIEF0a09iamVjdCogaGVhZGVyID0gYXRrX29iamVjdF9yZWZf
YWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDApOwotICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKGhl
YWRlcikpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoaGVhZGVyLCAidGV4dC1jYXJldC1tb3ZlZCIs
IEdfQ0FMTEJBQ0sodGV4dENhcmV0TW92ZWRDYWxsYmFjayksIDApOwotCi0gICAgLyogSXQgc2hv
dWxkIGJlIHBvc3NpYmxlIHRvIHBsYWNlIHRoZSBjYXJldCBpbnNpZGUgYSBoZWFkZXIuICovCi0g
ICAgZ2Jvb2xlYW4gcmVzdWx0ID0gYXRrX3RleHRfc2V0X2NhcmV0X29mZnNldChBVEtfVEVYVCho
ZWFkZXIpLCA1KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQocmVzdWx0LCA9PSwgVFJVRSk7Ci0gICAg
Z2ludCBvZmZzZXQgPSBhdGtfdGV4dF9nZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhUKGhlYWRlcikp
OwotICAgIGdfYXNzZXJ0X2NtcGludChvZmZzZXQsID09LCA1KTsKLSAgICBnX2Fzc2VydF9jbXBz
dHIodGV4dENhcmV0TW92ZWRSZXN1bHQsID09LCAifGhlYWRpbmd8NXwiKTsKLQotICAgIEF0a09i
amVjdCogcGFyYWdyYXBoID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3Qs
IDEpOwotICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHBhcmFncmFwaCkpOwotICAgIGdfc2lnbmFs
X2Nvbm5lY3QocGFyYWdyYXBoLCAidGV4dC1jYXJldC1tb3ZlZCIsIEdfQ0FMTEJBQ0sodGV4dENh
cmV0TW92ZWRDYWxsYmFjayksIDApOwotCi0gICAgLyogSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRv
IHBsYWNlIHRoZSBjYXJldCBpbnNpZGUgYSBwYXJhZ3JhcGggYW5kIGEgbGluay4gKi8KLSAgICBy
ZXN1bHQgPSBhdGtfdGV4dF9zZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhUKHBhcmFncmFwaCksIDUp
OwotICAgIGdfYXNzZXJ0X2NtcGludChyZXN1bHQsID09LCBUUlVFKTsKLSAgICBvZmZzZXQgPSBh
dGtfdGV4dF9nZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhUKHBhcmFncmFwaCkpOwotICAgIGdfYXNz
ZXJ0X2NtcGludChvZmZzZXQsID09LCA1KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGV4dENhcmV0
TW92ZWRSZXN1bHQsID09LCAifHBhcmFncmFwaHw1fCIpOwotCi0gICAgcmVzdWx0ID0gYXRrX3Rl
eHRfc2V0X2NhcmV0X29mZnNldChBVEtfVEVYVChwYXJhZ3JhcGgpLCAyMCk7Ci0gICAgZ19hc3Nl
cnRfY21waW50KHJlc3VsdCwgPT0sIFRSVUUpOwotICAgIG9mZnNldCA9IGF0a190ZXh0X2dldF9j
YXJldF9vZmZzZXQoQVRLX1RFWFQocGFyYWdyYXBoKSk7Ci0gICAgZ19hc3NlcnRfY21waW50KG9m
ZnNldCwgPT0sIDIwKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGV4dENhcmV0TW92ZWRSZXN1bHQs
ID09LCAifHBhcmFncmFwaHwyMHwiKTsKLQotICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9jYXJl
dF9vZmZzZXQoQVRLX1RFWFQocGFyYWdyYXBoKSwgMzApOwotICAgIGdfYXNzZXJ0X2NtcGludChy
ZXN1bHQsID09LCBUUlVFKTsKLSAgICBvZmZzZXQgPSBhdGtfdGV4dF9nZXRfY2FyZXRfb2Zmc2V0
KEFUS19URVhUKHBhcmFncmFwaCkpOwotICAgIGdfYXNzZXJ0X2NtcGludChvZmZzZXQsID09LCAz
MCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRleHRDYXJldE1vdmVkUmVzdWx0LCA9PSwgInxwYXJh
Z3JhcGh8MzB8Iik7Ci0KLSAgICBBdGtPYmplY3QqIGxpbmsgPSBhdGtfb2JqZWN0X3JlZl9hY2Nl
c3NpYmxlX2NoaWxkKHBhcmFncmFwaCwgMCk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQobGlu
aykpOwotCi0gICAgcmVzdWx0ID0gYXRrX3RleHRfc2V0X2NhcmV0X29mZnNldChBVEtfVEVYVChs
aW5rKSwgNSk7Ci0gICAgZ19hc3NlcnRfY21waW50KHJlc3VsdCwgPT0sIFRSVUUpOwotICAgIG9m
ZnNldCA9IGF0a190ZXh0X2dldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQobGluaykpOwotICAgIGdf
YXNzZXJ0X2NtcGludChvZmZzZXQsID09LCA1KTsKLSAgICAvKiBQb3NpdGlvbnMgaW5zaWRlIGxp
bmtzIGFyZSByZXBvcnRlZCByZWxhdGl2ZSB0byB0aGUgcGFyYWdyYXBoLiAqLwotICAgIGdfYXNz
ZXJ0X2NtcHN0cih0ZXh0Q2FyZXRNb3ZlZFJlc3VsdCwgPT0sICJ8cGFyYWdyYXBofDE3fCIpOwot
Ci0gICAgQXRrT2JqZWN0KiBsaXN0ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChv
YmplY3QsIDIpOwotICAgIGdfYXNzZXJ0KEFUS19PQkpFQ1QobGlzdCkpOwotICAgIGdfYXNzZXJ0
KGF0a19vYmplY3RfZ2V0X3JvbGUobGlzdCkgPT0gQVRLX1JPTEVfTElTVCk7Ci0gICAgZ19hc3Nl
cnRfY21waW50KGF0a19vYmplY3RfZ2V0X25fYWNjZXNzaWJsZV9jaGlsZHJlbihsaXN0KSwgPT0s
IDMpOwotCi0gICAgQXRrT2JqZWN0KiBsaXN0SXRlbSA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2li
bGVfY2hpbGQobGlzdCwgMCk7Ci0gICAgbGlzdEl0ZW0gPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3Np
YmxlX2NoaWxkKGxpc3QsIDIpOwotICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKGxpc3RJdGVtKSk7
Ci0KLSAgICAvKiBJdCdzIG5vdCBwb3NzaWJsZSB0byBwbGFjZSB0aGUgY2FyZXQgaW5zaWRlIGFu
IGl0ZW0ncyBtYXJrZXIuICovCi0gICAgcmVzdWx0ID0gYXRrX3RleHRfc2V0X2NhcmV0X29mZnNl
dChBVEtfVEVYVChsaXN0SXRlbSksIDEpOwotICAgIGdfYXNzZXJ0X2NtcGludChyZXN1bHQsID09
LCBGQUxTRSk7Ci0KLSAgICAvKiBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8gcGxhY2UgdGhlIGNh
cmV0IGluc2lkZSBhbiBpdGVtJ3MgdGV4dC4gKi8KLSAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRf
Y2FyZXRfb2Zmc2V0KEFUS19URVhUKGxpc3RJdGVtKSwgNSk7Ci0gICAgZ19hc3NlcnRfY21waW50
KHJlc3VsdCwgPT0sIFRSVUUpOwotICAgIG9mZnNldCA9IGF0a190ZXh0X2dldF9jYXJldF9vZmZz
ZXQoQVRLX1RFWFQobGlzdEl0ZW0pKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQob2Zmc2V0LCA9PSwg
NSk7Ci0KLSAgICBBdGtPYmplY3QqIHBhbmVsID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9j
aGlsZChvYmplY3QsIDMpOwotICAgIGdfYXNzZXJ0KEFUS19JU19PQkpFQ1QocGFuZWwpKTsKLSAg
ICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKHBhbmVsKSA9PSBBVEtfUk9MRV9QQU5FTCk7
Ci0KLSAgICBBdGtPYmplY3QqIGNvbWJvQm94ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9j
aGlsZChwYW5lbCwgMCk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX09CSkVDVChjb21ib0JveCkpOwot
ICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoY29tYm9Cb3gpID09IEFUS19ST0xFX0NP
TUJPX0JPWCk7Ci0KLSAgICBBdGtPYmplY3QqIG1lbnVQb3B1cCA9IGF0a19vYmplY3RfcmVmX2Fj
Y2Vzc2libGVfY2hpbGQoY29tYm9Cb3gsIDApOwotICAgIGdfYXNzZXJ0KEFUS19JU19PQkpFQ1Qo
bWVudVBvcHVwKSk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShtZW51UG9wdXAp
ID09IEFUS19ST0xFX01FTlUpOwotCi0gICAgQXRrT2JqZWN0KiBjb21ib0JveE9wdGlvbiA9IGF0
a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQobWVudVBvcHVwLCAwKTsKLSAgICBnX2Fzc2Vy
dChBVEtfSVNfT0JKRUNUKGNvbWJvQm94T3B0aW9uKSk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVj
dF9nZXRfcm9sZShjb21ib0JveE9wdGlvbikgPT0gQVRLX1JPTEVfTUVOVV9JVEVNKTsKLQotICAg
IC8qIEl0J3Mgbm90IHBvc3NpYmxlIHRvIHBsYWNlIHRoZSBjYXJldCBpbnNpZGUgYW4gb3B0aW9u
IGZvciBhIGNvbWJvYm94LiAqLwotICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9jYXJldF9vZmZz
ZXQoQVRLX1RFWFQoY29tYm9Cb3hPcHRpb24pLCAxKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQocmVz
dWx0LCA9PSwgRkFMU0UpOwotCi0gICAgQXRrT2JqZWN0KiB0ZXh0RW50cnkgPSBhdGtfb2JqZWN0
X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKHBhbmVsLCAxKTsKLSAgICBnX2Fzc2VydChBVEtfSVNfT0JK
RUNUKHRleHRFbnRyeSkpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUodGV4dEVu
dHJ5KSA9PSBBVEtfUk9MRV9FTlRSWSk7Ci0KLSAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfY2Fy
ZXRfb2Zmc2V0KEFUS19URVhUKHRleHRFbnRyeSksIDUpOwotICAgIGdfYXNzZXJ0X2NtcGludChy
ZXN1bHQsID09LCBUUlVFKTsKLSAgICBvZmZzZXQgPSBhdGtfdGV4dF9nZXRfY2FyZXRfb2Zmc2V0
KEFUS19URVhUKHRleHRFbnRyeSkpOwotICAgIGdfYXNzZXJ0X2NtcGludChvZmZzZXQsID09LCA1
KTsKLQotICAgIEF0a09iamVjdCogdGFibGUgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2No
aWxkKG9iamVjdCwgNCk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX09CSkVDVCh0YWJsZSkpOwotICAg
IGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUodGFibGUpID09IEFUS19ST0xFX1RBQkxFKTsK
LSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX29iamVjdF9nZXRfbl9hY2Nlc3NpYmxlX2NoaWxkcmVu
KHRhYmxlKSwgPT0sIDQpOwotCi0gICAgQXRrT2JqZWN0KiB0YWJsZUNlbGwgPSBhdGtfb2JqZWN0
X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKHRhYmxlLCAwKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0
X2dldF9yb2xlKHRhYmxlQ2VsbCkgPT0gQVRLX1JPTEVfVEFCTEVfQ0VMTCk7Ci0gICAgcmVzdWx0
ID0gYXRrX3RleHRfc2V0X2NhcmV0X29mZnNldChBVEtfVEVYVCh0YWJsZUNlbGwpLCAyKTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQocmVzdWx0LCA9PSwgVFJVRSk7Ci0gICAgb2Zmc2V0ID0gYXRrX3Rl
eHRfZ2V0X2NhcmV0X29mZnNldChBVEtfVEVYVCh0YWJsZUNlbGwpKTsKLSAgICBnX2Fzc2VydF9j
bXBpbnQob2Zmc2V0LCA9PSwgMik7Ci0KLSAgICBnX2ZyZWUodGV4dENhcmV0TW92ZWRSZXN1bHQp
OwotCi0gICAgZ19vYmplY3RfdW5yZWYocGFyYWdyYXBoKTsKLSAgICBnX29iamVjdF91bnJlZihs
aW5rKTsKLSAgICBnX29iamVjdF91bnJlZihsaXN0KTsKLSAgICBnX29iamVjdF91bnJlZihsaXN0
SXRlbSk7Ci0gICAgZ19vYmplY3RfdW5yZWYocGFuZWwpOwotICAgIGdfb2JqZWN0X3VucmVmKGNv
bWJvQm94KTsKLSAgICBnX29iamVjdF91bnJlZihtZW51UG9wdXApOwotICAgIGdfb2JqZWN0X3Vu
cmVmKGNvbWJvQm94T3B0aW9uKTsKLSAgICBnX29iamVjdF91bnJlZih0ZXh0RW50cnkpOwotICAg
IGdfb2JqZWN0X3VucmVmKHRhYmxlKTsKLSAgICBnX29iamVjdF91bnJlZih0YWJsZUNlbGwpOwot
ICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2Via2l0
QXRrQ2FyZXRPZmZzZXRzQW5kRXh0cmFub3VzV2hpdGVTcGFjZXMoKQotewotICAgIFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsK
LSAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9j
YXRpb24gPSB7IDAsIDAsIDgwMCwgNjAwIH07Ci0gICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRl
KEdUS19XSURHRVQod2ViVmlldyksICZhbGxvY2F0aW9uKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdf
bG9hZF9zdHJpbmcod2ViVmlldywgY29udGVudHNXaXRoRXh0cmFuZW91c1doaXRlU3BhY2VzLCAw
LCAwLCAwKTsKLQotICAgIC8qIEVuYWJsZSBjYXJldCBicm93c2luZy4gKi8KLSAgICBXZWJLaXRX
ZWJTZXR0aW5ncyogc2V0dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdlYlZp
ZXcpOwotICAgIGdfb2JqZWN0X3NldChHX09CSkVDVChzZXR0aW5ncyksICJlbmFibGUtY2FyZXQt
YnJvd3NpbmciLCBUUlVFLCBOVUxMKTsKLQotICAgIC8qIEdldCB0byB0aGUgaW5uZXIgQXRrVGV4
dCBvYmplY3QuICovCi0gICAgQXRrT2JqZWN0KiBvYmplY3QgPSBnZXRXZWJBcmVhT2JqZWN0KHdl
YlZpZXcpOwotICAgIGdfYXNzZXJ0KG9iamVjdCk7Ci0gICAgb2JqZWN0ID0gYXRrX29iamVjdF9y
ZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDApOwotICAgIGdfYXNzZXJ0KG9iamVjdCk7Ci0K
LSAgICBBdGtUZXh0KiB0ZXh0T2JqZWN0ID0gQVRLX1RFWFQob2JqZWN0KTsKLSAgICBnX2Fzc2Vy
dChBVEtfSVNfVEVYVCh0ZXh0T2JqZWN0KSk7Ci0KLSAgICBnaW50IGNoYXJhY3RlckNvdW50ID0g
YXRrX3RleHRfZ2V0X2NoYXJhY3Rlcl9jb3VudCh0ZXh0T2JqZWN0KTsKLSAgICBnX2Fzc2VydF9j
bXBpbnQoY2hhcmFjdGVyQ291bnQsID09LCAyNSk7Ci0KLSAgICBnYm9vbGVhbiByZXN1bHQgPSBh
dGtfdGV4dF9zZXRfY2FyZXRfb2Zmc2V0KHRleHRPYmplY3QsIGNoYXJhY3RlckNvdW50IC0gMSk7
Ci0gICAgZ19hc3NlcnRfY21waW50KHJlc3VsdCwgPT0sIFRSVUUpOwotCi0gICAgZ2ludCBjYXJl
dE9mZnNldCA9IGF0a190ZXh0X2dldF9jYXJldF9vZmZzZXQodGV4dE9iamVjdCk7Ci0gICAgZ19h
c3NlcnRfY21waW50KGNhcmV0T2Zmc2V0LCA9PSwgY2hhcmFjdGVyQ291bnQgLSAxKTsKLQotICAg
IHJlc3VsdCA9IGF0a190ZXh0X3NldF9jYXJldF9vZmZzZXQodGV4dE9iamVjdCwgY2hhcmFjdGVy
Q291bnQpOwotICAgIGdfYXNzZXJ0X2NtcGludChyZXN1bHQsID09LCBUUlVFKTsKLQotICAgIGNh
cmV0T2Zmc2V0ID0gYXRrX3RleHRfZ2V0X2NhcmV0X29mZnNldCh0ZXh0T2JqZWN0KTsKLSAgICBn
X2Fzc2VydF9jbXBpbnQoY2FyZXRPZmZzZXQsID09LCBjaGFyYWN0ZXJDb3VudCk7Ci0KLSAgICBn
X29iamVjdF91bnJlZihvYmplY3QpOwotICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwotfQot
Ci1zdGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrQ29tYm9Cb3goKQotewotICAgIFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAg
ICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRp
b24gPSB7IDAsIDAsIDgwMCwgNjAwIH07Ci0gICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdU
S19XSURHRVQod2ViVmlldyksICZhbGxvY2F0aW9uKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9h
ZF9zdHJpbmcod2ViVmlldywgY29tYm9Cb3hTZWxlY3RvciwgMCwgMCwgMCk7Ci0KLSAgICBBdGtP
YmplY3QqIG9iamVjdCA9IGdldFdlYkFyZWFPYmplY3Qod2ViVmlldyk7Ci0gICAgZ19hc3NlcnQo
b2JqZWN0KTsKLQotICAgIEF0a09iamVjdCogZm9ybU9iamVjdCA9IGF0a19vYmplY3RfcmVmX2Fj
Y2Vzc2libGVfY2hpbGQob2JqZWN0LCAwKTsKLSAgICBnX2Fzc2VydChmb3JtT2JqZWN0KTsKLQot
ICAgIEF0a09iamVjdCogY29tYm9Cb3ggPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxk
KGZvcm1PYmplY3QsIDApOwotICAgIGdfYXNzZXJ0KEFUS19JU19PQkpFQ1QoY29tYm9Cb3gpKTsK
LQotICAgIEF0a09iamVjdCogbWVudVBvcHVwID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9j
aGlsZChjb21ib0JveCwgMCk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX09CSkVDVChtZW51UG9wdXAp
KTsKLQotICAgIEF0a09iamVjdCogaXRlbTEgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2No
aWxkKG1lbnVQb3B1cCwgMCk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX09CSkVDVChpdGVtMSkpOwot
Ci0gICAgQXRrT2JqZWN0KiBpdGVtMiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQo
bWVudVBvcHVwLCAxKTsKLSAgICBnX2Fzc2VydChBVEtfSVNfT0JKRUNUKGl0ZW0yKSk7Ci0KLSAg
ICAvKiBDaGVjayByb2xlcy4gKi8KLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGNv
bWJvQm94KSA9PSBBVEtfUk9MRV9DT01CT19CT1gpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3Rf
Z2V0X3JvbGUobWVudVBvcHVwKSA9PSBBVEtfUk9MRV9NRU5VKTsKLSAgICBnX2Fzc2VydChhdGtf
b2JqZWN0X2dldF9yb2xlKGl0ZW0xKSA9PSBBVEtfUk9MRV9NRU5VX0lURU0pOwotICAgIGdfYXNz
ZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoaXRlbTIpID09IEFUS19ST0xFX01FTlVfSVRFTSk7Ci0K
LSAgICAvKiBDaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIEF0a1NlbGVjdGlvbiBpbnRl
cmZhY2UuICovCi0gICAgZ19hc3NlcnQoQVRLX0lTX1NFTEVDVElPTihjb21ib0JveCkpOwotICAg
IEF0a1NlbGVjdGlvbiogYXRrU2VsZWN0aW9uID0gQVRLX1NFTEVDVElPTihjb21ib0JveCk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KGF0a19zZWxlY3Rpb25fZ2V0X3NlbGVjdGlvbl9jb3VudChhdGtT
ZWxlY3Rpb24pLCA9PSwgMSk7Ci0gICAgZ19hc3NlcnQoYXRrX3NlbGVjdGlvbl9pc19jaGlsZF9z
ZWxlY3RlZChhdGtTZWxlY3Rpb24sIDApKTsKLSAgICBnX2Fzc2VydCghYXRrX3NlbGVjdGlvbl9p
c19jaGlsZF9zZWxlY3RlZChhdGtTZWxlY3Rpb24sIDEpKTsKLSAgICBBdGtPYmplY3QqIHNlbGVj
dGVkSXRlbSA9IGF0a19zZWxlY3Rpb25fcmVmX3NlbGVjdGlvbihhdGtTZWxlY3Rpb24sIDApOwot
ICAgIGdfYXNzZXJ0KHNlbGVjdGVkSXRlbSA9PSBpdGVtMSk7Ci0gICAgZ19vYmplY3RfdW5yZWYo
c2VsZWN0ZWRJdGVtKTsKLQotICAgIC8qIENoZWNrIHRoYXQgdGhlIG1lbnUgcG9wdXAgaGFzIDAg
bGlua3MgYW5kIGRvZXNuJ3QgY3Jhc2ggZnJvbSBjaGVja2luZy4gKi8KLSAgICBnaW50IG5MaW5r
cyA9IGF0a19oeXBlcnRleHRfZ2V0X25fbGlua3MoQVRLX0hZUEVSVEVYVChtZW51UG9wdXApKTsK
LSAgICBnX2Fzc2VydF9jbXBpbnQobkxpbmtzLCA9PSwgMCk7Ci0KLSAgICAvKiBDaGVjayB0aGUg
aW1wbGVtZW50YXRpb25zIG9mIHRoZSBBdGtBY3Rpb24gaW50ZXJmYWNlLiAqLwotICAgIGdfYXNz
ZXJ0KEFUS19JU19BQ1RJT04oY29tYm9Cb3gpKTsKLSAgICBBdGtBY3Rpb24qIGF0a0FjdGlvbiA9
IEFUS19BQ1RJT04oY29tYm9Cb3gpOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfYWN0aW9uX2dl
dF9uX2FjdGlvbnMoYXRrQWN0aW9uKSwgPT0sIDEpOwotICAgIGdfYXNzZXJ0KGF0a19hY3Rpb25f
ZG9fYWN0aW9uKGF0a0FjdGlvbiwgMCkpOwotCi0gICAgZ19hc3NlcnQoQVRLX0lTX0FDVElPTiht
ZW51UG9wdXApKTsKLSAgICBhdGtBY3Rpb24gPSBBVEtfQUNUSU9OKG1lbnVQb3B1cCk7Ci0gICAg
Z19hc3NlcnRfY21waW50KGF0a19hY3Rpb25fZ2V0X25fYWN0aW9ucyhhdGtBY3Rpb24pLCA9PSwg
MSk7Ci0gICAgZ19hc3NlcnQoYXRrX2FjdGlvbl9kb19hY3Rpb24oYXRrQWN0aW9uLCAwKSk7Ci0K
LSAgICBnX2Fzc2VydChBVEtfSVNfQUNUSU9OKGl0ZW0xKSk7Ci0gICAgYXRrQWN0aW9uID0gQVRL
X0FDVElPTihpdGVtMSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a19hY3Rpb25fZ2V0X25fYWN0
aW9ucyhhdGtBY3Rpb24pLCA9PSwgMSk7Ci0gICAgZ19hc3NlcnQoYXRrX2FjdGlvbl9kb19hY3Rp
b24oYXRrQWN0aW9uLCAwKSk7Ci0KLSAgICBnX2Fzc2VydChBVEtfSVNfQUNUSU9OKGl0ZW0yKSk7
Ci0gICAgYXRrQWN0aW9uID0gQVRLX0FDVElPTihpdGVtMik7Ci0gICAgZ19hc3NlcnRfY21waW50
KGF0a19hY3Rpb25fZ2V0X25fYWN0aW9ucyhhdGtBY3Rpb24pLCA9PSwgMSk7Ci0gICAgZ19hc3Nl
cnQoYXRrX2FjdGlvbl9kb19hY3Rpb24oYXRrQWN0aW9uLCAwKSk7Ci0KLSAgICAvKiBBZnRlciBz
ZWxlY3RpbmcgdGhlIHNlY29uZCBpdGVtLCBzZWxlY3Rpb24gc2hvdWxkIGhhdmUgY2hhbmdlZC4g
Ki8KLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX3NlbGVjdGlvbl9nZXRfc2VsZWN0aW9uX2NvdW50
KGF0a1NlbGVjdGlvbiksID09LCAxKTsKLSAgICBnX2Fzc2VydCghYXRrX3NlbGVjdGlvbl9pc19j
aGlsZF9zZWxlY3RlZChhdGtTZWxlY3Rpb24sIDApKTsKLSAgICBnX2Fzc2VydChhdGtfc2VsZWN0
aW9uX2lzX2NoaWxkX3NlbGVjdGVkKGF0a1NlbGVjdGlvbiwgMSkpOwotICAgIHNlbGVjdGVkSXRl
bSA9IGF0a19zZWxlY3Rpb25fcmVmX3NlbGVjdGlvbihhdGtTZWxlY3Rpb24sIDApOwotICAgIGdf
YXNzZXJ0KHNlbGVjdGVkSXRlbSA9PSBpdGVtMik7Ci0gICAgZ19vYmplY3RfdW5yZWYoc2VsZWN0
ZWRJdGVtKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGZvcm1PYmplY3QpOwotICAgIGdfb2JqZWN0
X3VucmVmKGNvbWJvQm94KTsKLSAgICBnX29iamVjdF91bnJlZihtZW51UG9wdXApOwotICAgIGdf
b2JqZWN0X3VucmVmKGl0ZW0xKTsKLSAgICBnX29iamVjdF91bnJlZihpdGVtMik7Ci0gICAgZ19v
YmplY3RfdW5yZWYod2ViVmlldyk7Ci19Ci0KLXN0YXRpYyBnY2hhciogbG9hZGluZ0V2ZW50c1Jl
c3VsdCA9IDA7Ci0KLXN0YXRpYyB2b2lkIHVwZGF0ZUxvYWRpbmdFdmVudHNSZXN1bHQoY29uc3Qg
Z2NoYXIqIHNpZ25hbE5hbWUpCi17Ci0gICAgZ19hc3NlcnQoc2lnbmFsTmFtZSk7Ci0KLSAgICBn
Y2hhciogcHJldmlvdXNSZXN1bHQgPSBsb2FkaW5nRXZlbnRzUmVzdWx0OwotICAgIGxvYWRpbmdF
dmVudHNSZXN1bHQgPSBnX3N0cmR1cF9wcmludGYoIiVzfCVzIiwgcHJldmlvdXNSZXN1bHQsIHNp
Z25hbE5hbWUpOwotICAgIGdfZnJlZShwcmV2aW91c1Jlc3VsdCk7Ci19Ci0KLXN0YXRpYyBnYm9v
bGVhbiBkb2N1bWVudExvYWRpbmdFdmVudENhbGxiYWNrKEdTaWduYWxJbnZvY2F0aW9uSGludCAq
c2lnbmFsSGludCwgZ3VpbnQgbnVtUGFyYW1WYWx1ZXMsIGNvbnN0IEdWYWx1ZSAqcGFyYW1WYWx1
ZXMsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgLy8gQXQgbGVhc3Qgd2Ugc2hvdWxkIHJlY2VpdmUg
dGhlIGluc3RhbmNlIGVtaXR0aW5nIHRoZSBzaWduYWwuCi0gICAgaWYgKG51bVBhcmFtVmFsdWVz
IDwgMSkKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0KLSAgICBHU2lnbmFsUXVlcnkgc2lnbmFsX3F1
ZXJ5OwotICAgIGdfc2lnbmFsX3F1ZXJ5KHNpZ25hbEhpbnQtPnNpZ25hbF9pZCwgJnNpZ25hbF9x
dWVyeSk7Ci0KLSAgICB1cGRhdGVMb2FkaW5nRXZlbnRzUmVzdWx0KHNpZ25hbF9xdWVyeS5zaWdu
YWxfbmFtZSk7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJraXRB
dGtEb2N1bWVudExvYWRpbmdFdmVudHMoKQotewotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcg
PSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBnX29iamVjdF9y
ZWZfc2luayh3ZWJWaWV3KTsKLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAs
IDgwMCwgNjAwIH07Ci0gICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQod2Vi
VmlldyksICZhbGxvY2F0aW9uKTsKLQotICAgIC8qIENvbm5lY3QgZ2xvYmFsbHkgdG8gc2VlIHRo
b3NlIGV2ZW50cyBkdXJpbmcgYSBmdXR1cmUgbG9hZC4gKi8KLSAgICBndWludCBsb2FkQ29tcGxl
dGVMaXN0ZW5lcklkID0gYXRrX2FkZF9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoZG9jdW1lbnRMb2Fk
aW5nRXZlbnRDYWxsYmFjaywgIkFUSzpBdGtEb2N1bWVudDpsb2FkLWNvbXBsZXRlIik7Ci0KLSAg
ICAvKiBEbyB0aGUgbG9hZCwgc28gd2UgY2FuIHNlZSB0aG9zZSBldmVudHMgaGFwcGVuaW5nLiAq
LwotICAgIGxvYWRpbmdFdmVudHNSZXN1bHQgPSBnX3N0cmR1cCgiIik7Ci0gICAgd2Via2l0X3dl
Yl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIGNvbnRlbnRzLCAwLCAwLCAwKTsKLQotICAgIC8q
IFRyaWdnZXIgdGhlIGNyZWF0aW9uIG9mIHRoZSBmdWxsIGFjY2Vzc2liaWxpdHkgaGllcmFyY2h5
IGJ5Ci0gICAgICAgYXNraW5nIGZvciB0aGUgd2ViQXJlYSBvYmplY3QsIHNvIHdlIGNhbiBsaXN0
ZW4gdG8gZXZlbnRzLiAqLwotICAgIGdldFdlYkFyZWFPYmplY3Qod2ViVmlldyk7Ci0KLSAgICBh
dGtfcmVtb3ZlX2dsb2JhbF9ldmVudF9saXN0ZW5lcihsb2FkQ29tcGxldGVMaXN0ZW5lcklkKTsK
LQotICAgIGdfYXNzZXJ0X2NtcHN0cihsb2FkaW5nRXZlbnRzUmVzdWx0LCA9PSwgInxsb2FkLWNv
bXBsZXRlIik7Ci0KLSAgICBnX2ZyZWUobG9hZGluZ0V2ZW50c1Jlc3VsdCk7Ci0gICAgZ19vYmpl
Y3RfdW5yZWYod2ViVmlldyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtFbWJlZGRl
ZE9iamVjdHMoKQotewotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJ
RVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3
KTsKLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDgwMCwgNjAwIH07Ci0g
ICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQod2ViVmlldyksICZhbGxvY2F0
aW9uKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgZW1iZWRkZWRP
YmplY3RzLCAwLCAwLCAwKTsKLQotICAgIEF0a09iamVjdCogb2JqZWN0ID0gZ2V0V2ViQXJlYU9i
amVjdCh3ZWJWaWV3KTsKLSAgICBnX2Fzc2VydChvYmplY3QpOwotCi0gICAgQXRrVGV4dCogcGFy
YWdyYXBoMSA9IEFUS19URVhUKGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0
LCAwKSk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQocGFyYWdyYXBoMSkpOwotICAgIGdfYXNz
ZXJ0KEFUS19JU19IWVBFUlRFWFQocGFyYWdyYXBoMSkpOwotCi0gICAgZ2ludCBuTGlua3MgPSBh
dGtfaHlwZXJ0ZXh0X2dldF9uX2xpbmtzKEFUS19IWVBFUlRFWFQocGFyYWdyYXBoMSkpOwotICAg
IGdfYXNzZXJ0X2NtcGludChuTGlua3MsID09LCAyKTsKLQotICAgIEF0a0h5cGVybGluayogaExp
bmsgPSBhdGtfaHlwZXJ0ZXh0X2dldF9saW5rKEFUS19IWVBFUlRFWFQocGFyYWdyYXBoMSksIDAp
OwotICAgIGdfYXNzZXJ0KEFUS19IWVBFUkxJTksoaExpbmspKTsKLSAgICBBdGtPYmplY3QqIGhM
aW5rT2JqZWN0ID0gYXRrX2h5cGVybGlua19nZXRfb2JqZWN0KGhMaW5rLCAwKTsKLSAgICBnX2Fz
c2VydChBVEtfT0JKRUNUKGhMaW5rT2JqZWN0KSk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9n
ZXRfcm9sZShoTGlua09iamVjdCkgPT0gQVRLX1JPTEVfQ0hFQ0tfQk9YKTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfc3RhcnRfaW5kZXgoaExpbmspLCA9PSwgOCk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0X2VuZF9pbmRleChoTGluayksID09
LCA5KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfbl9hbmNob3JzKGhM
aW5rKSwgPT0sIDEpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihhdGtfaHlwZXJsaW5rX2dldF91cmko
aExpbmssIDApLCA9PSwgMCk7Ci0KLSAgICBBdGtUZXh0KiBwYXJhZ3JhcGgyID0gQVRLX1RFWFQo
YXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDEpKTsKLSAgICBnX2Fzc2Vy
dChBVEtfSVNfSFlQRVJURVhUKHBhcmFncmFwaDIpKTsKLQotICAgIG5MaW5rcyA9IGF0a19oeXBl
cnRleHRfZ2V0X25fbGlua3MoQVRLX0hZUEVSVEVYVChwYXJhZ3JhcGgyKSk7Ci0gICAgZ19hc3Nl
cnRfY21waW50KG5MaW5rcywgPT0sIDEpOwotCi0gICAgaExpbmsgPSBhdGtfaHlwZXJ0ZXh0X2dl
dF9saW5rKEFUS19IWVBFUlRFWFQocGFyYWdyYXBoMiksIDApOwotICAgIGdfYXNzZXJ0KEFUS19I
WVBFUkxJTksoaExpbmspKTsKLSAgICBoTGlua09iamVjdCA9IGF0a19oeXBlcmxpbmtfZ2V0X29i
amVjdChoTGluaywgMCk7Ci0gICAgZ19hc3NlcnQoQVRLX09CSkVDVChoTGlua09iamVjdCkpOwot
ICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoaExpbmtPYmplY3QpID09IEFUS19ST0xF
X0NPTUJPX0JPWCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0X3N0YXJ0
X2luZGV4KGhMaW5rKSwgPT0sIDgpOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5r
X2dldF9lbmRfaW5kZXgoaExpbmspLCA9PSwgOSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a19o
eXBlcmxpbmtfZ2V0X25fYW5jaG9ycyhoTGluayksID09LCAxKTsKLSAgICBnX2Fzc2VydF9jbXBz
dHIoYXRrX2h5cGVybGlua19nZXRfdXJpKGhMaW5rLCAwKSwgPT0sIDApOwotCi0gICAgQXRrVGV4
dCogcGFyYWdyYXBoMyA9IEFUS19URVhUKGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQo
b2JqZWN0LCAyKSk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX0hZUEVSVEVYVChwYXJhZ3JhcGgzKSk7
Ci0KLSAgICBuTGlua3MgPSBhdGtfaHlwZXJ0ZXh0X2dldF9uX2xpbmtzKEFUS19IWVBFUlRFWFQo
cGFyYWdyYXBoMykpOwotICAgIGdfYXNzZXJ0X2NtcGludChuTGlua3MsID09LCAxKTsKLQotICAg
IGhMaW5rID0gYXRrX2h5cGVydGV4dF9nZXRfbGluayhBVEtfSFlQRVJURVhUKHBhcmFncmFwaDMp
LCAwKTsKLSAgICBnX2Fzc2VydChBVEtfSFlQRVJMSU5LKGhMaW5rKSk7Ci0gICAgaExpbmtPYmpl
Y3QgPSBhdGtfaHlwZXJsaW5rX2dldF9vYmplY3QoaExpbmssIDApOwotICAgIGdfYXNzZXJ0KEFU
S19PQkpFQ1QoaExpbmtPYmplY3QpKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xl
KGhMaW5rT2JqZWN0KSA9PSBBVEtfUk9MRV9QVVNIX0JVVFRPTik7Ci0gICAgZ19hc3NlcnRfY21w
aW50KGF0a19oeXBlcmxpbmtfZ2V0X3N0YXJ0X2luZGV4KGhMaW5rKSwgPT0sIDApOwotICAgIGdf
YXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9lbmRfaW5kZXgoaExpbmspLCA9PSwgMSk7
Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0X25fYW5jaG9ycyhoTGluayks
ID09LCAxKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoYXRrX2h5cGVybGlua19nZXRfdXJpKGhMaW5r
LCAwKSwgPT0sIDApOwotCi0gICAgZ19vYmplY3RfdW5yZWYocGFyYWdyYXBoMSk7Ci0gICAgZ19v
YmplY3RfdW5yZWYocGFyYWdyYXBoMik7Ci0gICAgZ19vYmplY3RfdW5yZWYocGFyYWdyYXBoMyk7
Ci0gICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJr
aXRBdGtHZXRIZWFkZXJzSW5UYWJsZSgpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9
IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0X3Jl
Zl9zaW5rKHdlYlZpZXcpOwotICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwg
ODAwLCA2MDAgfTsKLSAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJW
aWV3KSwgJmFsbG9jYXRpb24pOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJW
aWV3LCBjb250ZW50c0luVGFibGVXaXRoSGVhZGVycywgMCwgMCwgMCk7Ci0KLSAgICBBdGtPYmpl
Y3QqIGF4V2ViVmlldyA9IGdldFdlYkFyZWFPYmplY3Qod2ViVmlldyk7Ci0gICAgZ19hc3NlcnQo
YXhXZWJWaWV3KTsKLQotICAgIC8qIENoZWNrIHRhYmxlIHdpdGggYm90aCBjb2x1bW4gYW5kIHJv
dyBoZWFkZXJzLiAqLwotICAgIEF0a09iamVjdCogdGFibGUgPSBhdGtfb2JqZWN0X3JlZl9hY2Nl
c3NpYmxlX2NoaWxkKGF4V2ViVmlldywgMCk7Ci0gICAgZ19hc3NlcnQodGFibGUpOwotICAgIGdf
YXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUodGFibGUpID09IEFUS19ST0xFX1RBQkxFKTsKLQot
ICAgIEF0a09iamVjdCogY29sSGVhZGVyID0gYXRrX3RhYmxlX2dldF9jb2x1bW5faGVhZGVyKEFU
S19UQUJMRSh0YWJsZSksIDApOwotICAgIGdfYXNzZXJ0KGNvbEhlYWRlcik7Ci0gICAgZ19hc3Nl
cnQoYXRrX29iamVjdF9nZXRfcm9sZShjb2xIZWFkZXIpID09IEFUS19ST0xFX1RBQkxFX0NFTEwp
OwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X2luZGV4X2luX3BhcmVudChjb2xIZWFkZXIp
ID09IDApOwotCi0gICAgY29sSGVhZGVyID0gYXRrX3RhYmxlX2dldF9jb2x1bW5faGVhZGVyKEFU
S19UQUJMRSh0YWJsZSksIDEpOwotICAgIGdfYXNzZXJ0KGNvbEhlYWRlcik7Ci0gICAgZ19hc3Nl
cnQoYXRrX29iamVjdF9nZXRfcm9sZShjb2xIZWFkZXIpID09IEFUS19ST0xFX1RBQkxFX0NFTEwp
OwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X2luZGV4X2luX3BhcmVudChjb2xIZWFkZXIp
ID09IDEpOwotCi0gICAgY29sSGVhZGVyID0gYXRrX3RhYmxlX2dldF9jb2x1bW5faGVhZGVyKEFU
S19UQUJMRSh0YWJsZSksIDIpOwotICAgIGdfYXNzZXJ0KGNvbEhlYWRlcik7Ci0gICAgZ19hc3Nl
cnQoYXRrX29iamVjdF9nZXRfcm9sZShjb2xIZWFkZXIpID09IEFUS19ST0xFX1RBQkxFX0NFTEwp
OwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X2luZGV4X2luX3BhcmVudChjb2xIZWFkZXIp
ID09IDIpOwotCi0gICAgY29sSGVhZGVyID0gYXRrX3RhYmxlX2dldF9jb2x1bW5faGVhZGVyKEFU
S19UQUJMRSh0YWJsZSksIDMpOwotICAgIGdfYXNzZXJ0KGNvbEhlYWRlcik7Ci0gICAgZ19hc3Nl
cnQoYXRrX29iamVjdF9nZXRfcm9sZShjb2xIZWFkZXIpID09IEFUS19ST0xFX1RBQkxFX0NFTEwp
OwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X2luZGV4X2luX3BhcmVudChjb2xIZWFkZXIp
ID09IDIpOwotCi0gICAgQXRrT2JqZWN0KiByb3dIZWFkZXIgPSBhdGtfdGFibGVfZ2V0X3Jvd19o
ZWFkZXIoQVRLX1RBQkxFKHRhYmxlKSwgMCk7Ci0gICAgZ19hc3NlcnQocm93SGVhZGVyKTsKLSAg
ICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKHJvd0hlYWRlcikgPT0gQVRLX1JPTEVfVEFC
TEVfQ0VMTCk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfaW5kZXhfaW5fcGFyZW50KHJv
d0hlYWRlcikgPT0gMCk7Ci0KLSAgICByb3dIZWFkZXIgPSBhdGtfdGFibGVfZ2V0X3Jvd19oZWFk
ZXIoQVRLX1RBQkxFKHRhYmxlKSwgMSk7Ci0gICAgZ19hc3NlcnQocm93SGVhZGVyKTsKLSAgICBn
X2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKHJvd0hlYWRlcikgPT0gQVRLX1JPTEVfVEFCTEVf
Q0VMTCk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfaW5kZXhfaW5fcGFyZW50KHJvd0hl
YWRlcikgPT0gMyk7Ci0KLSAgICByb3dIZWFkZXIgPSBhdGtfdGFibGVfZ2V0X3Jvd19oZWFkZXIo
QVRLX1RBQkxFKHRhYmxlKSwgMik7Ci0gICAgZ19hc3NlcnQocm93SGVhZGVyKTsKLSAgICBnX2Fz
c2VydChhdGtfb2JqZWN0X2dldF9yb2xlKHJvd0hlYWRlcikgPT0gQVRLX1JPTEVfVEFCTEVfQ0VM
TCk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfaW5kZXhfaW5fcGFyZW50KHJvd0hlYWRl
cikgPT0gNyk7Ci0KLSAgICByb3dIZWFkZXIgPSBhdGtfdGFibGVfZ2V0X3Jvd19oZWFkZXIoQVRL
X1RBQkxFKHRhYmxlKSwgMyk7Ci0gICAgZ19hc3NlcnQocm93SGVhZGVyKTsKLSAgICBnX2Fzc2Vy
dChhdGtfb2JqZWN0X2dldF9yb2xlKHJvd0hlYWRlcikgPT0gQVRLX1JPTEVfVEFCTEVfQ0VMTCk7
Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfaW5kZXhfaW5fcGFyZW50KHJvd0hlYWRlcikg
PT0gNyk7Ci0KLSAgICBnX29iamVjdF91bnJlZih0YWJsZSk7Ci0KLSAgICAvKiBDaGVjayB0YWJs
ZSB3aXRoIG5vIGhlYWRlcnMgYXQgYWxsLiAqLwotICAgIHRhYmxlID0gYXRrX29iamVjdF9yZWZf
YWNjZXNzaWJsZV9jaGlsZChheFdlYlZpZXcsIDEpOwotICAgIGdfYXNzZXJ0KHRhYmxlKTsKLSAg
ICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKHRhYmxlKSA9PSBBVEtfUk9MRV9UQUJMRSk7
Ci0KLSAgICBjb2xIZWFkZXIgPSBhdGtfdGFibGVfZ2V0X2NvbHVtbl9oZWFkZXIoQVRLX1RBQkxF
KHRhYmxlKSwgMCk7Ci0gICAgZ19hc3NlcnQoY29sSGVhZGVyID09IDApOwotCi0gICAgY29sSGVh
ZGVyID0gYXRrX3RhYmxlX2dldF9jb2x1bW5faGVhZGVyKEFUS19UQUJMRSh0YWJsZSksIDEpOwot
ICAgIGdfYXNzZXJ0KGNvbEhlYWRlciA9PSAwKTsKLQotICAgIHJvd0hlYWRlciA9IGF0a190YWJs
ZV9nZXRfcm93X2hlYWRlcihBVEtfVEFCTEUodGFibGUpLCAwKTsKLSAgICBnX2Fzc2VydChyb3dI
ZWFkZXIgPT0gMCk7Ci0KLSAgICByb3dIZWFkZXIgPSBhdGtfdGFibGVfZ2V0X3Jvd19oZWFkZXIo
QVRLX1RBQkxFKHRhYmxlKSwgMSk7Ci0gICAgZ19hc3NlcnQocm93SGVhZGVyID09IDApOwotCi0g
ICAgZ19vYmplY3RfdW5yZWYodGFibGUpOwotICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwot
fQotCi1zdGF0aWMgZ2ludCBjb21wQXRrQXR0cmlidXRlKEF0a0F0dHJpYnV0ZSogYTEsIEF0a0F0
dHJpYnV0ZSogYTIpCi17Ci0gICAgZ2ludCBzdHJjbXBWYWwgPSBnX3N0cmNtcDAoYTEtPm5hbWUs
IGEyLT5uYW1lKTsKLSAgICBpZiAoc3RyY21wVmFsKQotICAgICAgICByZXR1cm4gc3RyY21wVmFs
OwotICAgIHJldHVybiBnX3N0cmNtcDAoYTEtPnZhbHVlLCBhMi0+dmFsdWUpOwotfQotCi1zdGF0
aWMgZ2ludCBjb21wQXRrQXR0cmlidXRlTmFtZShBdGtBdHRyaWJ1dGUqIGExLCBBdGtBdHRyaWJ1
dGUqIGEyKQotewotICAgIHJldHVybiBnX3N0cmNtcDAoYTEtPm5hbWUsIGEyLT5uYW1lKTsKLX0K
LQotc3RhdGljIGdib29sZWFuIGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZU5hbWVIYXNWYWx1ZShB
dGtBdHRyaWJ1dGVTZXQqIHNldCwgY29uc3QgZ2NoYXIqIGF0dHJpYnV0ZU5hbWUsIGNvbnN0IGdj
aGFyKiB2YWx1ZSkKLXsKLSAgICBBdGtBdHRyaWJ1dGUgYXQ7Ci0gICAgYXQubmFtZSA9IChnY2hh
ciopYXR0cmlidXRlTmFtZTsKLSAgICBHU0xpc3QqIGVsZW1lbnQgPSBnX3NsaXN0X2ZpbmRfY3Vz
dG9tKHNldCwgJmF0LCAoR0NvbXBhcmVGdW5jKWNvbXBBdGtBdHRyaWJ1dGVOYW1lKTsKLSAgICBy
ZXR1cm4gZWxlbWVudCAmJiAhZ19zdHJjbXAwKCgoQXRrQXR0cmlidXRlKikoZWxlbWVudC0+ZGF0
YSkpLT52YWx1ZSwgdmFsdWUpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gYXRrQXR0cmlidXRlU2V0
Q29udGFpbnNBdHRyaWJ1dGVOYW1lKEF0a0F0dHJpYnV0ZVNldCogc2V0LCBjb25zdCBnY2hhciog
YXR0cmlidXRlTmFtZSkKLXsKLSAgICBBdGtBdHRyaWJ1dGUgYXQ7Ci0gICAgYXQubmFtZSA9IChn
Y2hhciopYXR0cmlidXRlTmFtZTsKLSAgICByZXR1cm4gZ19zbGlzdF9maW5kX2N1c3RvbShzZXQs
ICZhdCwgKEdDb21wYXJlRnVuYyljb21wQXRrQXR0cmlidXRlTmFtZSkgPyB0cnVlIDogZmFsc2U7
Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVIYXNWYWx1ZShB
dGtBdHRyaWJ1dGVTZXQqIHNldCwgQXRrVGV4dEF0dHJpYnV0ZSBhdHRyaWJ1dGUsIGNvbnN0IGdj
aGFyKiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlTmFtZUhh
c1ZhbHVlKHNldCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9uYW1lKGF0dHJpYnV0ZSksIHZhbHVl
KTsKLX0KLQotc3RhdGljIGdib29sZWFuIGF0a0F0dHJpYnV0ZVNldEFyZUVxdWFsKEF0a0F0dHJp
YnV0ZVNldCogc2V0MSwgQXRrQXR0cmlidXRlU2V0KiBzZXQyKQotewotICAgIGlmICghc2V0MSkK
LSAgICAgICAgcmV0dXJuICFzZXQyOwotCi0gICAgc2V0MSA9IGdfc2xpc3Rfc29ydChzZXQxLCAo
R0NvbXBhcmVGdW5jKWNvbXBBdGtBdHRyaWJ1dGUpOwotICAgIHNldDIgPSBnX3NsaXN0X3NvcnQo
c2V0MiwgKEdDb21wYXJlRnVuYyljb21wQXRrQXR0cmlidXRlKTsKLQotICAgIHdoaWxlIChzZXQx
KSB7Ci0gICAgICAgIGlmICghc2V0MiB8fCBjb21wQXRrQXR0cmlidXRlKHNldDEtPmRhdGEsIHNl
dDItPmRhdGEpKQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwotCi0gICAgICAgIHNldDEgPSBz
ZXQxLT5uZXh0OwotICAgICAgICBzZXQyID0gc2V0Mi0+bmV4dDsKLSAgICB9Ci0KLSAgICByZXR1
cm4gKCFzZXQyKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a1RleHRBdHRyaWJ1dGVz
KCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtp
dF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7Ci0gICAg
R3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9OwotICAgIGd0a193
aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7Ci0g
ICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIHRleHRXaXRoQXR0cmlidXRl
cywgMCwgMCwgMCk7Ci0KLSAgICBBdGtPYmplY3QqIG9iamVjdCA9IGdldFdlYkFyZWFPYmplY3Qo
d2ViVmlldyk7Ci0gICAgZ19hc3NlcnQob2JqZWN0KTsKLQotICAgIEF0a09iamVjdCogY2hpbGQg
PSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMCk7Ci0gICAgZ19hc3Nl
cnQoY2hpbGQgJiYgQVRLX0lTX1RFWFQoY2hpbGQpKTsKLSAgICBBdGtUZXh0KiBjaGlsZFRleHQg
PSBBVEtfVEVYVChjaGlsZCk7Ci0KLSAgICBnaW50IHN0YXJ0T2Zmc2V0OwotICAgIGdpbnQgZW5k
T2Zmc2V0OwotICAgIEF0a0F0dHJpYnV0ZVNldCogc2V0MSA9IGF0a190ZXh0X2dldF9ydW5fYXR0
cmlidXRlcyhjaGlsZFRleHQsIDAsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7Ci0gICAgZ19h
c3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGVu
ZE9mZnNldCwgPT0sIDEyKTsKLSAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBcmVFcXVhbChz
ZXQxLCAwKSk7Ci0KLSAgICBBdGtBdHRyaWJ1dGVTZXQqIHNldDIgPSBhdGtfdGV4dF9nZXRfcnVu
X2F0dHJpYnV0ZXMoY2hpbGRUZXh0LCAxNSwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAxMik7Ci0gICAgZ19hc3NlcnRfY21w
aW50KGVuZE9mZnNldCwgPT0sIDE3KTsKLSAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRy
aWJ1dGVIYXNWYWx1ZShzZXQyLCBBVEtfVEVYVF9BVFRSX1NUWUxFLCAiaXRhbGljIikpOwotCi0g
ICAgQXRrQXR0cmlidXRlU2V0KiBzZXQzID0gYXRrX3RleHRfZ2V0X3J1bl9hdHRyaWJ1dGVzKGNo
aWxkVGV4dCwgMTcsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7Ci0gICAgZ19hc3NlcnRfY21w
aW50KHN0YXJ0T2Zmc2V0LCA9PSwgMTcpOwotICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQs
ID09LCA0MCk7Ci0gICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlSGFzVmFsdWUo
c2V0MywgQVRLX1RFWFRfQVRUUl9XRUlHSFQsICI3MDAiKSk7Ci0KLSAgICBBdGtBdHRyaWJ1dGVT
ZXQqIHNldDQgPSBhdGtfdGV4dF9nZXRfZGVmYXVsdF9hdHRyaWJ1dGVzKGNoaWxkVGV4dCk7Ci0g
ICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlSGFzVmFsdWUoc2V0NCwgQVRLX1RF
WFRfQVRUUl9TVFlMRSwgIm5vcm1hbCIpKTsKLSAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRB
dHRyaWJ1dGVIYXNWYWx1ZShzZXQ0LCBBVEtfVEVYVF9BVFRSX0pVU1RJRklDQVRJT04sICJyaWdo
dCIpKTsKLSAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVIYXNWYWx1ZShzZXQ0
LCBBVEtfVEVYVF9BVFRSX1NJWkUsICIxNCIpKTsKLSAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVl
KHNldDEpOwotICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0Mik7Ci0gICAgYXRrX2F0dHJp
YnV0ZV9zZXRfZnJlZShzZXQzKTsKLSAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHNldDQpOwot
Ci0gICAgZ19vYmplY3RfdW5yZWYoY2hpbGQpOwotICAgIGNoaWxkID0gYXRrX29iamVjdF9yZWZf
YWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDEpOwotICAgIGdfYXNzZXJ0KGNoaWxkICYmIEFUS19J
U19URVhUKGNoaWxkKSk7Ci0gICAgY2hpbGRUZXh0ID0gQVRLX1RFWFQoY2hpbGQpOwotCi0gICAg
c2V0MSA9IGF0a190ZXh0X2dldF9kZWZhdWx0X2F0dHJpYnV0ZXMoY2hpbGRUZXh0KTsKLSAgICBn
X2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVIYXNWYWx1ZShzZXQxLCBBVEtfVEVYVF9B
VFRSX0ZBTUlMWV9OQU1FLCAibW9ub3NwYWNlIikpOwotICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0
ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDEsIEFUS19URVhUX0FUVFJfU1RZTEUsICJub3JtYWwi
KSk7Ci0gICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlSGFzVmFsdWUoc2V0MSwg
QVRLX1RFWFRfQVRUUl9TVFJJS0VUSFJPVUdILCAiZmFsc2UiKSk7Ci0gICAgZ19hc3NlcnQoYXRr
QXR0cmlidXRlU2V0QXR0cmlidXRlSGFzVmFsdWUoc2V0MSwgQVRLX1RFWFRfQVRUUl9XRUlHSFQs
ICI0MDAiKSk7Ci0gICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlSGFzVmFsdWUo
c2V0MSwgQVRLX1RFWFRfQVRUUl9GR19DT0xPUiwgIjEyMCwxMjEsMTIyIikpOwotCi0gICAgc2V0
MiA9IGF0a190ZXh0X2dldF9ydW5fYXR0cmlidXRlcyhjaGlsZFRleHQsIDQzLCAmc3RhcnRPZmZz
ZXQsICZlbmRPZmZzZXQpOwotICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDQz
KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgODApOwotICAgIC8qIENoZWNr
cyB0aGF0IGRlZmF1bHQgYXR0cmlidXRlcyBvZiB0ZXh0IGFyZSBub3QgcmV0dXJuZWQgd2hlbiBj
YWxsZWQgdG8gYXRrX3RleHRfZ2V0X3J1bl9hdHRyaWJ1dGVzLiAqLwotICAgIGdfYXNzZXJ0KCFh
dGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVIYXNWYWx1ZShzZXQyLCBBVEtfVEVYVF9BVFRSX0ZHX0NP
TE9SLCAiMTIwLDEyMSwxMjIiKSk7Ci0gICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0QXR0cmli
dXRlSGFzVmFsdWUoc2V0MiwgQVRLX1RFWFRfQVRUUl9VTkRFUkxJTkUsICJzaW5nbGUiKSk7Ci0g
ICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlSGFzVmFsdWUoc2V0MiwgQVRLX1RF
WFRfQVRUUl9CR19DT0xPUiwgIjgwLDgxLDgyIikpOwotICAgIGF0a19hdHRyaWJ1dGVfc2V0X2Zy
ZWUoc2V0MSk7Ci0gICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJlZShzZXQyKTsKLSAgICBnX29iamVj
dF91bnJlZihjaGlsZCk7Ci0KLSAgICBjaGlsZCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVf
Y2hpbGQob2JqZWN0LCAyKTsKLSAgICBnX2Fzc2VydChjaGlsZCAmJiBBVEtfSVNfVEVYVChjaGls
ZCkpOwotICAgIGNoaWxkVGV4dCA9IEFUS19URVhUKGNoaWxkKTsKLQotICAgIHNldDEgPSBhdGtf
dGV4dF9nZXRfcnVuX2F0dHJpYnV0ZXMoY2hpbGRUZXh0LCAwLCAmc3RhcnRPZmZzZXQsICZlbmRP
ZmZzZXQpOwotICAgIHNldDIgPSBhdGtfdGV4dF9nZXRfcnVuX2F0dHJpYnV0ZXMoY2hpbGRUZXh0
LCAzLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOwotICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0
ZVNldEFyZUVxdWFsKHNldDEsIHNldDIpKTsKLSAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHNl
dDIpOwotCi0gICAgc2V0MiA9IGF0a190ZXh0X2dldF9ydW5fYXR0cmlidXRlcyhjaGlsZFRleHQs
IDEsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7Ci0gICAgc2V0MyA9IGF0a190ZXh0X2dldF9y
dW5fYXR0cmlidXRlcyhjaGlsZFRleHQsIDUsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7Ci0g
ICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0QXJlRXF1YWwoc2V0Miwgc2V0MykpOwotICAgIGdf
YXNzZXJ0KCFhdGtBdHRyaWJ1dGVTZXRBcmVFcXVhbChzZXQxLCBzZXQyKSk7Ci0gICAgYXRrX2F0
dHJpYnV0ZV9zZXRfZnJlZShzZXQzKTsKLQotICAgIHNldDMgPSBhdGtfdGV4dF9nZXRfcnVuX2F0
dHJpYnV0ZXMoY2hpbGRUZXh0LCAyLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOwotICAgIHNl
dDQgPSBhdGtfdGV4dF9nZXRfcnVuX2F0dHJpYnV0ZXMoY2hpbGRUZXh0LCA2LCAmc3RhcnRPZmZz
ZXQsICZlbmRPZmZzZXQpOwotICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEFyZUVxdWFsKHNl
dDMsIHNldDQpKTsKLSAgICBnX2Fzc2VydCghYXRrQXR0cmlidXRlU2V0QXJlRXF1YWwoc2V0MSwg
c2V0MykpOwotICAgIGdfYXNzZXJ0KCFhdGtBdHRyaWJ1dGVTZXRBcmVFcXVhbChzZXQyLCBzZXQz
KSk7Ci0gICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJlZShzZXQxKTsKLSAgICBhdGtfYXR0cmlidXRl
X3NldF9mcmVlKHNldDIpOwotICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0Myk7Ci0gICAg
YXRrX2F0dHJpYnV0ZV9zZXRfZnJlZShzZXQ0KTsKLSAgICBnX29iamVjdF91bnJlZihjaGlsZCk7
Ci0KLSAgICBjaGlsZCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAz
KTsKLSAgICBnX2Fzc2VydChjaGlsZCAmJiBBVEtfSVNfVEVYVChjaGlsZCkpOwotICAgIGNoaWxk
VGV4dCA9IEFUS19URVhUKGNoaWxkKTsKLSAgICBzZXQxID0gYXRrX3RleHRfZ2V0X3J1bl9hdHRy
aWJ1dGVzKGNoaWxkVGV4dCwgMjQsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7Ci0gICAgZ19h
c3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMjEpOwotICAgIGdfYXNzZXJ0X2NtcGludChl
bmRPZmZzZXQsID09LCAyNSk7Ci0gICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0QXR0cmlidXRl
SGFzVmFsdWUoc2V0MSwgQVRLX1RFWFRfQVRUUl9TVFJJS0VUSFJPVUdILCAidHJ1ZSIpKTsKLQot
ICAgIHNldDIgPSBhdGtfdGV4dF9nZXRfcnVuX2F0dHJpYnV0ZXMoY2hpbGRUZXh0LCAyNSwgJnN0
YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQs
ID09LCAyNSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0sIDMwKTsKLSAgICBn
X2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBcmVFcXVhbChzZXQyLCAwKSk7Ci0KLSAgICBzZXQzID0g
YXRrX3RleHRfZ2V0X2RlZmF1bHRfYXR0cmlidXRlcyhjaGlsZFRleHQpOwotICAgIGdfYXNzZXJ0
KGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDMsIEFUS19URVhUX0FUVFJfSlVT
VElGSUNBVElPTiwgImNlbnRlciIpKTsKLSAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHNldDEp
OwotICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0Mik7Ci0gICAgYXRrX2F0dHJpYnV0ZV9z
ZXRfZnJlZShzZXQzKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGNoaWxkKTsKLX0KLQotc3RhdGlj
IGdjaGFyKiB0ZXh0U2VsZWN0aW9uQ2hhbmdlZFJlc3VsdCA9IDA7Ci0KLXN0YXRpYyB2b2lkIHRl
eHRTZWxlY3Rpb25DaGFuZ2VkQ2FsbGJhY2soQXRrVGV4dCogdGV4dCwgZ3BvaW50ZXIgZGF0YSkK
LXsKLSAgICBnX2Fzc2VydChBVEtfSVNfVEVYVCh0ZXh0KSk7Ci0KLSAgICBnX2ZyZWUodGV4dFNl
bGVjdGlvbkNoYW5nZWRSZXN1bHQpOwotICAgIEF0a1JvbGUgcm9sZSA9IGF0a19vYmplY3RfZ2V0
X3JvbGUoQVRLX09CSkVDVCh0ZXh0KSk7Ci0gICAgaW50IHN0YXJ0T2Zmc2V0ID0gMDsKLSAgICBp
bnQgZW5kT2Zmc2V0ID0gMDsKLSAgICBhdGtfdGV4dF9nZXRfc2VsZWN0aW9uKEFUS19URVhUKHRl
eHQpLCAwLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOwotICAgIHRleHRTZWxlY3Rpb25DaGFu
Z2VkUmVzdWx0ID0gZ19zdHJkdXBfcHJpbnRmKCJ8JXN8JWR8JWR8IiwgYXRrX3JvbGVfZ2V0X25h
bWUocm9sZSksIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0
V2Via2l0QXRrVGV4dFNlbGVjdGlvbnMoKQotewotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcg
PSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBnX29iamVjdF9y
ZWZfc2luayh3ZWJWaWV3KTsKLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAs
IDgwMCwgNjAwIH07Ci0gICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQod2Vi
VmlldyksICZhbGxvY2F0aW9uKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2Vi
VmlldywgdGV4dEZvclNlbGVjdGlvbnMsIDAsIDAsIDApOwotCi0gICAgQXRrT2JqZWN0KiBvYmpl
Y3QgPSBnZXRXZWJBcmVhT2JqZWN0KHdlYlZpZXcpOwotICAgIGdfYXNzZXJ0KG9iamVjdCk7Ci0K
LSAgICBBdGtUZXh0KiBwYXJhZ3JhcGgxID0gQVRLX1RFWFQoYXRrX29iamVjdF9yZWZfYWNjZXNz
aWJsZV9jaGlsZChvYmplY3QsIDApKTsKLSAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChwYXJhZ3Jh
cGgxKSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChwYXJhZ3JhcGgxLCAidGV4dC1zZWxlY3Rpb24t
Y2hhbmdlZCIsIEdfQ0FMTEJBQ0sodGV4dFNlbGVjdGlvbkNoYW5nZWRDYWxsYmFjayksIDApOwot
Ci0gICAgQXRrVGV4dCogcGFyYWdyYXBoMiA9IEFUS19URVhUKGF0a19vYmplY3RfcmVmX2FjY2Vz
c2libGVfY2hpbGQob2JqZWN0LCAxKSk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQocGFyYWdy
YXBoMikpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QocGFyYWdyYXBoMiwgInRleHQtc2VsZWN0aW9u
LWNoYW5nZWQiLCBHX0NBTExCQUNLKHRleHRTZWxlY3Rpb25DaGFuZ2VkQ2FsbGJhY2spLCAwKTsK
LQotICAgIEF0a1RleHQqIGxpbmsgPSBBVEtfVEVYVChhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxl
X2NoaWxkKEFUS19PQkpFQ1QocGFyYWdyYXBoMiksIDApKTsKLSAgICBnX2Fzc2VydChBVEtfSVNf
VEVYVChsaW5rKSk7Ci0KLSAgICBBdGtPYmplY3QqIGxpc3QgPSBhdGtfb2JqZWN0X3JlZl9hY2Nl
c3NpYmxlX2NoaWxkKG9iamVjdCwgMik7Ci0gICAgZ19hc3NlcnQoQVRLX09CSkVDVChsaXN0KSk7
Ci0KLSAgICBBdGtUZXh0KiBsaXN0SXRlbSA9IEFUS19URVhUKGF0a19vYmplY3RfcmVmX2FjY2Vz
c2libGVfY2hpbGQobGlzdCwgMCkpOwotICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKGxpc3RJdGVt
KSk7Ci0KLSAgICAvKiBGaXJzdCBwYXJhZ3JhcGggKHNpbXBsZSB0ZXh0KS4gKi8KLQotICAgIC8q
IEJhc2ljIGluaXRpYWwgY2hlY2tzLiAqLwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfdGV4dF9n
ZXRfbl9zZWxlY3Rpb25zKHBhcmFncmFwaDEpLCA9PSwgMCk7Ci0KLSAgICBnaW50IHN0YXJ0T2Zm
c2V0OwotICAgIGdpbnQgZW5kT2Zmc2V0OwotICAgIGdjaGFyKiBzZWxlY3RlZFRleHQgPSBhdGtf
dGV4dF9nZXRfc2VsZWN0aW9uKHBhcmFncmFwaDEsIDAsICZzdGFydE9mZnNldCwgJmVuZE9mZnNl
dCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMCk7Ci0gICAgZ19hc3Nl
cnRfY21waW50KGVuZE9mZnNldCwgPT0sIDApOwotICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3Rl
ZFRleHQsID09LCAwKTsKLSAgICBnX2ZyZWUgKHNlbGVjdGVkVGV4dCk7Ci0KLSAgICAvKiBUcnkg
cmVtb3ZpbmcgYSBub24gZXhpc3RpbmcgKHlldCkgc2VsZWN0aW9uLiAqLwotICAgIGdib29sZWFu
IHJlc3VsdCA9IGF0a190ZXh0X3JlbW92ZV9zZWxlY3Rpb24ocGFyYWdyYXBoMSwgMCk7Ci0gICAg
Z19hc3NlcnQoIXJlc3VsdCk7Ci0KLSAgICAvKiBUcnkgc2V0dGluZyBhIDAtY2hhciBzZWxlY3Rp
b24uICovCi0gICAgcmVzdWx0ID0gYXRrX3RleHRfc2V0X3NlbGVjdGlvbihwYXJhZ3JhcGgxLCAw
LCA1LCA1KTsKLSAgICBnX2Fzc2VydChyZXN1bHQpOwotCi0gICAgLyogTWFrZSBhIHNlbGVjdGlv
biBhbmQgdGVzdCBpdC4gKi8KLSAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfc2VsZWN0aW9uKHBh
cmFncmFwaDEsIDAsIDUsIDI1KTsKLSAgICBnX2Fzc2VydChyZXN1bHQpOwotICAgIGdfYXNzZXJ0
X2NtcGludChhdGtfdGV4dF9nZXRfbl9zZWxlY3Rpb25zKHBhcmFncmFwaDEpLCA9PSwgMSk7Ci0g
ICAgZ19hc3NlcnRfY21wc3RyKHRleHRTZWxlY3Rpb25DaGFuZ2VkUmVzdWx0LCA9PSwgInxwYXJh
Z3JhcGh8NXwyNXwiKTsKLSAgICBzZWxlY3RlZFRleHQgPSBhdGtfdGV4dF9nZXRfc2VsZWN0aW9u
KHBhcmFncmFwaDEsIDAsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgNSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGVuZE9mZnNl
dCwgPT0sIDI1KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRUZXh0LCA9PSwgImFncmFw
aCB3aXRoIHBsYWluIHRlIik7Ci0gICAgZ19mcmVlIChzZWxlY3RlZFRleHQpOwotCi0gICAgLyog
VHJ5IHJlbW92aW5nIHRoZSBzZWxlY3Rpb24gZnJvbSBvdGhlciBBdGtUZXh0IG9iamVjdCAoc2hv
dWxkIGZhaWwpLiAqLwotICAgIHJlc3VsdCA9IGF0a190ZXh0X3JlbW92ZV9zZWxlY3Rpb24ocGFy
YWdyYXBoMiwgMCk7Ci0gICAgZ19hc3NlcnQoIXJlc3VsdCk7Ci0KLSAgICAvKiBSZW1vdmUgdGhl
IHNlbGVjdGlvbiBhbmQgdGVzdCBldmVyeXRoaW5nIGFnYWluLiAqLwotICAgIHJlc3VsdCA9IGF0
a190ZXh0X3JlbW92ZV9zZWxlY3Rpb24ocGFyYWdyYXBoMSwgMCk7Ci0gICAgZ19hc3NlcnQocmVz
dWx0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX3RleHRfZ2V0X25fc2VsZWN0aW9ucyhwYXJh
Z3JhcGgxKSwgPT0sIDApOwotICAgIHNlbGVjdGVkVGV4dCA9IGF0a190ZXh0X2dldF9zZWxlY3Rp
b24ocGFyYWdyYXBoMSwgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAgICAvKiBOb3cg
b2Zmc2V0cyBzaG91bGQgYmUgdGhlIHNhbWUsIHNldCB0byB0aGUgbGFzdCBwb3NpdGlvbiBvZiB0
aGUgY2FyZXQuICovCi0gICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgZW5kT2Zm
c2V0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAyNSk7Ci0gICAgZ19h
c3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0sIDI1KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc2Vs
ZWN0ZWRUZXh0LCA9PSwgMCk7Ci0gICAgZ19mcmVlIChzZWxlY3RlZFRleHQpOwotCi0gICAgLyog
U2Vjb25kIHBhcmFncmFwaCAodGV4dCArIGxpbmsgKyB0ZXh0KS4gKi8KLQotICAgIC8qIFNldCBh
IHNlbGVjdGlvbiBwYXJ0aWFsbHkgY292ZXJpbmcgdGhlIGxpbmsgYW5kIHRlc3QgaXQuICovCi0g
ICAgcmVzdWx0ID0gYXRrX3RleHRfc2V0X3NlbGVjdGlvbihwYXJhZ3JhcGgyLCAwLCA3LCAyMSk7
Ci0gICAgZ19hc3NlcnQocmVzdWx0KTsKLQotICAgIC8qIFRlc3QgdGhlIHBhcmFncmFwaCBmaXJz
dC4gKi8KLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX3RleHRfZ2V0X25fc2VsZWN0aW9ucyhwYXJh
Z3JhcGgyKSwgPT0sIDEpOwotICAgIHNlbGVjdGVkVGV4dCA9IGF0a190ZXh0X2dldF9zZWxlY3Rp
b24ocGFyYWdyYXBoMiwgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCA3KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zm
c2V0LCA9PSwgMjEpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZFRleHQsID09LCAicmFw
aCB3aXRoIGEgbGkiKTsKLSAgICBnX2ZyZWUgKHNlbGVjdGVkVGV4dCk7Ci0KLSAgICAvKiBOb3cg
dGVzdCBqdXN0IHRoZSBsaW5rLiAqLwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfdGV4dF9nZXRf
bl9zZWxlY3Rpb25zKGxpbmspLCA9PSwgMSk7Ci0gICAgc2VsZWN0ZWRUZXh0ID0gYXRrX3RleHRf
Z2V0X3NlbGVjdGlvbihsaW5rLCAwLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOwotICAgIGdf
YXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDApOwotICAgIGdfYXNzZXJ0X2NtcGludChl
bmRPZmZzZXQsID09LCA0KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRUZXh0LCA9PSwg
ImEgbGkiKTsKLSAgICBnX2ZyZWUgKHNlbGVjdGVkVGV4dCk7Ci0KLSAgICAvKiBNYWtlIGEgc2Vs
ZWN0aW9uIGFmdGVyIHRoZSBsaW5rIGFuZCBjaGVjayBzZWxlY3Rpb24gZm9yIHRoZSB3aG9sZSBw
YXJhZ3JhcGguICovCi0gICAgcmVzdWx0ID0gYXRrX3RleHRfc2V0X3NlbGVjdGlvbihwYXJhZ3Jh
cGgyLCAwLCAyNywgMzcpOwotICAgIGdfYXNzZXJ0KHJlc3VsdCk7Ci0gICAgZ19hc3NlcnRfY21w
aW50KGF0a190ZXh0X2dldF9uX3NlbGVjdGlvbnMocGFyYWdyYXBoMiksID09LCAxKTsKLSAgICBn
X2Fzc2VydF9jbXBzdHIodGV4dFNlbGVjdGlvbkNoYW5nZWRSZXN1bHQsID09LCAifHBhcmFncmFw
aHwyN3wzN3wiKTsKLSAgICBzZWxlY3RlZFRleHQgPSBhdGtfdGV4dF9nZXRfc2VsZWN0aW9uKHBh
cmFncmFwaDIsIDAsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7Ci0gICAgZ19hc3NlcnRfY21w
aW50KHN0YXJ0T2Zmc2V0LCA9PSwgMjcpOwotICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQs
ID09LCAzNyk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkVGV4dCwgPT0sICJ0aGUgbWlk
ZGxlIik7Ci0gICAgZ19mcmVlIChzZWxlY3RlZFRleHQpOwotCi0gICAgLyogUmVtb3ZlIHNlbGVj
dGlvbnMgYW5kIHRleHQgZXZlcnl0aGluZyBhZ2Fpbi4gKi8KLSAgICByZXN1bHQgPSBhdGtfdGV4
dF9yZW1vdmVfc2VsZWN0aW9uKHBhcmFncmFwaDIsIDApOwotICAgIGdfYXNzZXJ0KHJlc3VsdCk7
Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a190ZXh0X2dldF9uX3NlbGVjdGlvbnMocGFyYWdyYXBo
MiksID09LCAwKTsKLSAgICBzZWxlY3RlZFRleHQgPSBhdGtfdGV4dF9nZXRfc2VsZWN0aW9uKHBh
cmFncmFwaDIsIDAsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7Ci0gICAgLyogTm93IG9mZnNl
dHMgc2hvdWxkIGJlIHRoZSBzYW1lIChubyBzZWxlY3Rpb24pLiAqLwotICAgIGdfYXNzZXJ0X2Nt
cGludChzdGFydE9mZnNldCwgPT0sIGVuZE9mZnNldCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHNl
bGVjdGVkVGV4dCwgPT0sIDApOwotICAgIGdfZnJlZSAoc2VsZWN0ZWRUZXh0KTsKLQotICAgIGdf
YXNzZXJ0X2NtcGludChhdGtfdGV4dF9nZXRfbl9zZWxlY3Rpb25zKGxpbmspLCA9PSwgMCk7Ci0g
ICAgc2VsZWN0ZWRUZXh0ID0gYXRrX3RleHRfZ2V0X3NlbGVjdGlvbihsaW5rLCAwLCAmc3RhcnRP
ZmZzZXQsICZlbmRPZmZzZXQpOwotICAgIC8qIE5vdyBvZmZzZXRzIHNob3VsZCBiZSB0aGUgc2Ft
ZSAobm8gc2VsZWN0aW9uKS4gKi8KLSAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09
LCBlbmRPZmZzZXQpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZFRleHQsID09LCAwKTsK
LSAgICBnX2ZyZWUgKHNlbGVjdGVkVGV4dCk7Ci0KLSAgICAvKiBMaXN0IGl0ZW0gKi8KLQotICAg
IGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUobGlzdCkgPT0gQVRLX1JPTEVfTElTVCk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KGF0a19vYmplY3RfZ2V0X25fYWNjZXNzaWJsZV9jaGlsZHJlbihs
aXN0KSwgPT0sIDEpOwotCi0gICAgLyogSXQncyBub3QgcG9zc2libGUgdG8gc2VsZWN0IHRleHQg
aW5zaWRlIGFuIGl0ZW0ncyBtYXJrZXIuICovCi0gICAgcmVzdWx0ID0gYXRrX3RleHRfc2V0X3Nl
bGVjdGlvbiAobGlzdEl0ZW0sIDAsIDAsIDkpOwotICAgIGdfYXNzZXJ0KCFyZXN1bHQpOwotICAg
IHJlc3VsdCA9IGF0a190ZXh0X3NldF9zZWxlY3Rpb24gKGxpc3RJdGVtLCAwLCA5LCAxKTsKLSAg
ICBnX2Fzc2VydCghcmVzdWx0KTsKLQotICAgIC8qIEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBz
ZWxlY3QgdGV4dCBpbnNpZGUgYW4gaXRlbSdzIHRleHQuICovCi0gICAgcmVzdWx0ID0gYXRrX3Rl
eHRfc2V0X3NlbGVjdGlvbiAobGlzdEl0ZW0sIDAsIDMsIDkpOwotICAgIGdfYXNzZXJ0KHJlc3Vs
dCk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX3RleHRfZ2V0X25fc2VsZWN0aW9ucyhsaXN0
SXRlbSksID09LCAxKTsKLSAgICBzZWxlY3RlZFRleHQgPSBhdGtfdGV4dF9nZXRfc2VsZWN0aW9u
KGxpc3RJdGVtLCAwLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOwotICAgIGdfYXNzZXJ0X2Nt
cGludChzdGFydE9mZnNldCwgPT0sIDMpOwotICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQs
ID09LCA5KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRUZXh0LCA9PSwgIkEgbGlzdCIp
OwotICAgIGdfZnJlZSAoc2VsZWN0ZWRUZXh0KTsKLQotICAgIGdfZnJlZSh0ZXh0U2VsZWN0aW9u
Q2hhbmdlZFJlc3VsdCk7Ci0KLSAgICBnX29iamVjdF91bnJlZihwYXJhZ3JhcGgxKTsKLSAgICBn
X29iamVjdF91bnJlZihwYXJhZ3JhcGgyKTsKLSAgICBnX29iamVjdF91bnJlZihsaW5rKTsKLSAg
ICBnX29iamVjdF91bnJlZihsaXN0KTsKLSAgICBnX29iamVjdF91bnJlZihsaXN0SXRlbSk7Ci0g
ICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJraXRB
dGtHZXRFeHRlbnRzKCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dF
Ql9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsod2Vi
Vmlldyk7Ci0gICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9
OwotICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxs
b2NhdGlvbik7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIGNlbnRl
cmVkQ29udGVudHMsIDAsIDAsIDApOwotCi0gICAgQXRrT2JqZWN0KiBvYmplY3QgPSBnZXRXZWJB
cmVhT2JqZWN0KHdlYlZpZXcpOwotICAgIGdfYXNzZXJ0KG9iamVjdCk7Ci0KLSAgICBBdGtUZXh0
KiBzaG9ydFRleHQxID0gQVRLX1RFWFQoYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChv
YmplY3QsIDApKTsKLSAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChzaG9ydFRleHQxKSk7Ci0gICAg
QXRrVGV4dCogbG9uZ1RleHQgPSBBVEtfVEVYVChhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2No
aWxkKG9iamVjdCwgMSkpOwotICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKGxvbmdUZXh0KSk7Ci0g
ICAgQXRrVGV4dCogc2hvcnRUZXh0MiA9IEFUS19URVhUKGF0a19vYmplY3RfcmVmX2FjY2Vzc2li
bGVfY2hpbGQob2JqZWN0LCAyKSk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQoc2hvcnRUZXh0
MikpOwotICAgIEF0a1RleHQqIG11bHRpbGluZVRleHQgPSBBVEtfVEVYVChhdGtfb2JqZWN0X3Jl
Zl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMykpOwotICAgIGdfYXNzZXJ0KEFUS19JU19URVhU
KG11bHRpbGluZVRleHQpKTsKLQotICAgIC8qIFN0YXJ0IHdpdGggd2luZG93IGV4dGVudHMuICov
Ci0gICAgQXRrVGV4dFJlY3RhbmdsZSBzbGluZV93aW5kb3cxLCBzbGluZV93aW5kb3cyLCBsbGlu
ZV93aW5kb3csIG1saW5lX3dpbmRvdzsKLSAgICBhdGtfdGV4dF9nZXRfcmFuZ2VfZXh0ZW50cyhz
aG9ydFRleHQxLCAwLCAxMCwgQVRLX1hZX1dJTkRPVywgJnNsaW5lX3dpbmRvdzEpOwotICAgIGF0
a190ZXh0X2dldF9yYW5nZV9leHRlbnRzKGxvbmdUZXh0LCAwLCA0NCwgQVRLX1hZX1dJTkRPVywg
JmxsaW5lX3dpbmRvdyk7Ci0gICAgYXRrX3RleHRfZ2V0X3JhbmdlX2V4dGVudHMoc2hvcnRUZXh0
MiwgMCwgMTAsIEFUS19YWV9XSU5ET1csICZzbGluZV93aW5kb3cyKTsKLSAgICBhdGtfdGV4dF9n
ZXRfcmFuZ2VfZXh0ZW50cyhtdWx0aWxpbmVUZXh0LCAwLCA2MCwgQVRLX1hZX1dJTkRPVywgJm1s
aW5lX3dpbmRvdyk7Ci0KLSAgICAvKiBDaGVjayB2ZXJ0aWNhbCBsaW5lIHBvc2l0aW9uLiAqLwot
ICAgIGdfYXNzZXJ0X2NtcGludChzbGluZV93aW5kb3cxLnkgKyBzbGluZV93aW5kb3cxLmhlaWdo
dCwgPD0sIGxsaW5lX3dpbmRvdy55KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQobGxpbmVfd2luZG93
LnkgKyBsbGluZV93aW5kb3cuaGVpZ2h0ICsgc2xpbmVfd2luZG93Mi5oZWlnaHQsIDw9LCBtbGlu
ZV93aW5kb3cueSk7Ci0KLSAgICAvKiBQYXJhZ3JhcGhzIDEgYW5kIDMgaGF2ZSBpZGVudGljYWwg
dGV4dCBhbmQgYWxpZ25tZW50LiAqLwotICAgIGdfYXNzZXJ0X2NtcGludChzbGluZV93aW5kb3cx
LngsID09LCBzbGluZV93aW5kb3cyLngpOwotICAgIGdfYXNzZXJ0X2NtcGludChzbGluZV93aW5k
b3cxLndpZHRoLCA9PSwgc2xpbmVfd2luZG93Mi53aWR0aCk7Ci0gICAgZ19hc3NlcnRfY21waW50
KHNsaW5lX3dpbmRvdzEuaGVpZ2h0LCA9PSwgc2xpbmVfd2luZG93Mi5oZWlnaHQpOwotCi0gICAg
LyogQWxsIGxpbmVzIHNob3VsZCBiZSB0aGUgc2FtZSBoZWlnaHQ7IGxpbmUgMiBpcyB0aGUgd2lk
ZXN0IGxpbmUuICovCi0gICAgZ19hc3NlcnRfY21waW50KHNsaW5lX3dpbmRvdzEuaGVpZ2h0LCA9
PSwgbGxpbmVfd2luZG93LmhlaWdodCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHNsaW5lX3dpbmRv
dzEud2lkdGgsIDwsIGxsaW5lX3dpbmRvdy53aWR0aCk7Ci0KLSAgICAvKiBNYWtlIHN1cmUgdGhl
IGNoYXJhY3RlciBleHRlbnRzIGppdmUgd2l0aCB0aGUgcmFuZ2UgZXh0ZW50cy4gKi8KLSAgICBn
aW50IHg7Ci0gICAgZ2ludCB5OwotICAgIGdpbnQgd2lkdGg7Ci0gICAgZ2ludCBoZWlnaHQ7Ci0K
LSAgICAvKiBGaXJzdCBwYXJhZ3JhcGggKHNob3J0IHRleHQpLiAqLwotICAgIGF0a190ZXh0X2dl
dF9jaGFyYWN0ZXJfZXh0ZW50cyhzaG9ydFRleHQxLCAwLCAmeCwgJnksICZ3aWR0aCwgJmhlaWdo
dCwgQVRLX1hZX1dJTkRPVyk7Ci0gICAgZ19hc3NlcnRfY21waW50KHgsID09LCBzbGluZV93aW5k
b3cxLngpOwotICAgIGdfYXNzZXJ0X2NtcGludCh5LCA9PSwgc2xpbmVfd2luZG93MS55KTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQoaGVpZ2h0LCA9PSwgc2xpbmVfd2luZG93MS5oZWlnaHQpOwotCi0g
ICAgYXRrX3RleHRfZ2V0X2NoYXJhY3Rlcl9leHRlbnRzKHNob3J0VGV4dDEsIDksICZ4LCAmeSwg
JndpZHRoLCAmaGVpZ2h0LCBBVEtfWFlfV0lORE9XKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoeCwg
PT0sIHNsaW5lX3dpbmRvdzEueCArIHNsaW5lX3dpbmRvdzEud2lkdGggLSB3aWR0aCk7Ci0gICAg
Z19hc3NlcnRfY21waW50KHksID09LCBzbGluZV93aW5kb3cxLnkpOwotICAgIGdfYXNzZXJ0X2Nt
cGludChoZWlnaHQsID09LCBzbGluZV93aW5kb3cxLmhlaWdodCk7Ci0KLSAgICAvKiBTZWNvbmQg
cGFyYWdyYXBoIChsb25nIHRleHQpLiAqLwotICAgIGF0a190ZXh0X2dldF9jaGFyYWN0ZXJfZXh0
ZW50cyhsb25nVGV4dCwgMCwgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQsIEFUS19YWV9XSU5ET1cp
OwotICAgIGdfYXNzZXJ0X2NtcGludCh4LCA9PSwgbGxpbmVfd2luZG93LngpOwotICAgIGdfYXNz
ZXJ0X2NtcGludCh5LCA9PSwgbGxpbmVfd2luZG93LnkpOwotICAgIGdfYXNzZXJ0X2NtcGludCho
ZWlnaHQsID09LCBsbGluZV93aW5kb3cuaGVpZ2h0KTsKLQotICAgIGF0a190ZXh0X2dldF9jaGFy
YWN0ZXJfZXh0ZW50cyhsb25nVGV4dCwgNDMsICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0LCBBVEtf
WFlfV0lORE9XKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoeCwgPT0sIGxsaW5lX3dpbmRvdy54ICsg
bGxpbmVfd2luZG93LndpZHRoIC0gd2lkdGgpOwotICAgIGdfYXNzZXJ0X2NtcGludCh5LCA9PSwg
bGxpbmVfd2luZG93LnkpOwotICAgIGdfYXNzZXJ0X2NtcGludChoZWlnaHQsID09LCBsbGluZV93
aW5kb3cuaGVpZ2h0KTsKLQotICAgIC8qIFRoaXJkIHBhcmFncmFwaCAoc2hvcnQgdGV4dCkuICov
Ci0gICAgYXRrX3RleHRfZ2V0X2NoYXJhY3Rlcl9leHRlbnRzKHNob3J0VGV4dDIsIDAsICZ4LCAm
eSwgJndpZHRoLCAmaGVpZ2h0LCBBVEtfWFlfV0lORE9XKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
eCwgPT0sIHNsaW5lX3dpbmRvdzIueCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHksID09LCBzbGlu
ZV93aW5kb3cyLnkpOwotICAgIGdfYXNzZXJ0X2NtcGludChoZWlnaHQsID09LCBzbGluZV93aW5k
b3cyLmhlaWdodCk7Ci0KLSAgICBhdGtfdGV4dF9nZXRfY2hhcmFjdGVyX2V4dGVudHMoc2hvcnRU
ZXh0MiwgOSwgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQsIEFUS19YWV9XSU5ET1cpOwotICAgIGdf
YXNzZXJ0X2NtcGludCh4LCA9PSwgc2xpbmVfd2luZG93Mi54ICsgc2xpbmVfd2luZG93Mi53aWR0
aCAtIHdpZHRoKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoeSwgPT0sIHNsaW5lX3dpbmRvdzIueSk7
Ci0gICAgZ19hc3NlcnRfY21waW50KGhlaWdodCwgPT0sIHNsaW5lX3dpbmRvdzIuaGVpZ2h0KTsK
LQotICAgIC8qIEZvdXIgcGFyYWdyYXBoICgzIGxpbmVzIG11bHRpLWxpbmUgdGV4dCkuICovCi0g
ICAgYXRrX3RleHRfZ2V0X2NoYXJhY3Rlcl9leHRlbnRzKG11bHRpbGluZVRleHQsIDAsICZ4LCAm
eSwgJndpZHRoLCAmaGVpZ2h0LCBBVEtfWFlfV0lORE9XKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
eCwgPT0sIG1saW5lX3dpbmRvdy54KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoeSwgPT0sIG1saW5l
X3dpbmRvdy55KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoMyAqIGhlaWdodCwgPT0sIG1saW5lX3dp
bmRvdy5oZWlnaHQpOwotCi0gICAgYXRrX3RleHRfZ2V0X2NoYXJhY3Rlcl9leHRlbnRzKG11bHRp
bGluZVRleHQsIDU5LCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCwgQVRLX1hZX1dJTkRPVyk7Ci0g
ICAgLyogTGFzdCBsaW5lIHdvbid0IGZpbGwgdGhlIHdob2xlIHdpZHRoIG9mIHRoZSByZWN0YW5n
bGUuICovCi0gICAgZ19hc3NlcnRfY21waW50KHgsIDw9LCBtbGluZV93aW5kb3cueCArIG1saW5l
X3dpbmRvdy53aWR0aCAtIHdpZHRoKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoeSwgPT0sIG1saW5l
X3dpbmRvdy55ICsgbWxpbmVfd2luZG93LmhlaWdodCAtIGhlaWdodCk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KGhlaWdodCwgPD0sIG1saW5lX3dpbmRvdy5oZWlnaHQpOwotCi0gICAgLyogQ2hlY2sg
dGhhdCBleHRlbnQgZm9yIGEgZnVsbCBsaW5lIGFyZSB0aGUgc2FtZSBoZWlnaHQgdGhhbiBmb3IK
LSAgICAgICBhIHBhcnRpYWwgc2VjdGlvbiBvZiB0aGUgc2FtZSBsaW5lICovCi0gICAgZ2ludCBz
dGFydE9mZnNldDsKLSAgICBnaW50IGVuZE9mZnNldDsKLQotI2lmICFBVEtfQ0hFQ0tfVkVSU0lP
TigyLCAxMCwgMCkKLSAgICBnY2hhciogdGV4dCA9IGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNl
dChtdWx0aWxpbmVUZXh0LCAwLCBBVEtfVEVYVF9CT1VOREFSWV9MSU5FX1NUQVJULCAmc3RhcnRP
ZmZzZXQsICZlbmRPZmZzZXQpOwotICAgIGdfZnJlZSh0ZXh0KTsKLSNlbHNlCi0gICAgZ2NoYXIq
IHRleHQgPSBhdGtfdGV4dF9nZXRfc3RyaW5nX2F0X29mZnNldChtdWx0aWxpbmVUZXh0LCAwLCBB
VEtfVEVYVF9HUkFOVUxBUklUWV9MSU5FLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOwotICAg
IGdfZnJlZSh0ZXh0KTsKLSNlbmRpZgotCi0gICAgQXRrVGV4dFJlY3RhbmdsZSBmbGluZV93aW5k
b3c7Ci0gICAgQXRrVGV4dFJlY3RhbmdsZSBhZmxpbmVfd2luZG93OwotICAgIGF0a190ZXh0X2dl
dF9yYW5nZV9leHRlbnRzKG11bHRpbGluZVRleHQsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIEFU
S19YWV9XSU5ET1csICZmbGluZV93aW5kb3cpOwotICAgIGF0a190ZXh0X2dldF9yYW5nZV9leHRl
bnRzKG11bHRpbGluZVRleHQsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgLSAxLCBBVEtfWFlfV0lO
RE9XLCAmYWZsaW5lX3dpbmRvdyk7Ci0gICAgZ19hc3NlcnRfY21waW50KGZsaW5lX3dpbmRvdy54
LCA9PSwgYWZsaW5lX3dpbmRvdy54KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZmxpbmVfd2luZG93
LnksID09LCBhZmxpbmVfd2luZG93LnkpOwotICAgIGdfYXNzZXJ0X2NtcGludChmbGluZV93aW5k
b3cuaGVpZ2h0LCA9PSwgYWZsaW5lX3dpbmRvdy5oZWlnaHQpOwotCi0gICAgZ19vYmplY3RfdW5y
ZWYoc2hvcnRUZXh0MSk7Ci0gICAgZ19vYmplY3RfdW5yZWYoc2hvcnRUZXh0Mik7Ci0gICAgZ19v
YmplY3RfdW5yZWYobG9uZ1RleHQpOwotICAgIGdfb2JqZWN0X3VucmVmKG11bHRpbGluZVRleHQp
OwotICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2Vi
a2l0QXRrTGF5b3V0QW5kRGF0YVRhYmxlcygpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmll
dyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0
X3JlZl9zaW5rKHdlYlZpZXcpOwotICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwg
MCwgODAwLCA2MDAgfTsKLSAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVCh3
ZWJWaWV3KSwgJmFsbG9jYXRpb24pOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3
ZWJWaWV3LCBsYXlvdXRBbmREYXRhVGFibGVzLCAwLCAwLCAwKTsKLQotICAgIEF0a09iamVjdCog
b2JqZWN0ID0gZ2V0V2ViQXJlYU9iamVjdCh3ZWJWaWV3KTsKLSAgICBnX2Fzc2VydChvYmplY3Qp
OwotCi0gICAgLyogQ2hlY2sgdGhlIG5vbi1sYXlvdXQgdGFibGUgKGRhdGEgdGFibGUpLiAqLwot
Ci0gICAgQXRrT2JqZWN0KiB0YWJsZTEgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxk
KG9iamVjdCwgMCk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX1RBQkxFKHRhYmxlMSkpOwotICAgIEF0
a0F0dHJpYnV0ZVNldCogc2V0MSA9IGF0a19vYmplY3RfZ2V0X2F0dHJpYnV0ZXModGFibGUxKTsK
LSAgICBnX2Fzc2VydChzZXQxKTsKLSAgICBnX2Fzc2VydCghYXRrQXR0cmlidXRlU2V0Q29udGFp
bnNBdHRyaWJ1dGVOYW1lKHNldDEsICJsYXlvdXQtZ3Vlc3MiKSk7Ci0gICAgYXRrX2F0dHJpYnV0
ZV9zZXRfZnJlZShzZXQxKTsKLQotICAgIC8qIENoZWNrIHRoZSBsYXlvdXQgdGFibGUuICovCi0K
LSAgICBBdGtPYmplY3QqIHRhYmxlMiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQo
b2JqZWN0LCAxKTsKLSAgICBnX2Fzc2VydChBVEtfSVNfVEFCTEUodGFibGUyKSk7Ci0gICAgQXRr
QXR0cmlidXRlU2V0KiBzZXQyID0gYXRrX29iamVjdF9nZXRfYXR0cmlidXRlcyh0YWJsZTIpOwot
ICAgIGdfYXNzZXJ0KHNldDIpOwotICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldENvbnRhaW5z
QXR0cmlidXRlTmFtZShzZXQyLCAibGF5b3V0LWd1ZXNzIikpOwotICAgIGdfYXNzZXJ0KGF0a0F0
dHJpYnV0ZVNldEF0dHJpYnV0ZU5hbWVIYXNWYWx1ZShzZXQyLCAibGF5b3V0LWd1ZXNzIiwgInRy
dWUiKSk7Ci0gICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJlZShzZXQyKTsKLQotICAgIGdfb2JqZWN0
X3VucmVmKHRhYmxlMSk7Ci0gICAgZ19vYmplY3RfdW5yZWYodGFibGUyKTsKLSAgICBnX29iamVj
dF91bnJlZih3ZWJWaWV3KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0xpbmtzV2l0
aElubGluZUltYWdlcygpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9X
RUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdl
YlZpZXcpOwotICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgODAwLCA2MDAg
fTsKLSAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFs
bG9jYXRpb24pOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LCBsaW5r
c1dpdGhJbmxpbmVJbWFnZXMsIDAsIDAsIDApOwotCi0gICAgQXRrT2JqZWN0KiBvYmplY3QgPSBn
ZXRXZWJBcmVhT2JqZWN0KHdlYlZpZXcpOwotICAgIGdfYXNzZXJ0KG9iamVjdCk7Ci0KLSAgICAv
KiBGaXJzdCBwYXJhZ3JhcGggKGxpbmsgYXQgdGhlIGJlZ2lubmluZykuICovCi0gICAgQXRrT2Jq
ZWN0KiBwYXJhZ3JhcGggPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwg
MCk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQocGFyYWdyYXBoKSk7Ci0gICAgZ2ludCBzdGFy
dE9mZnNldDsKLSAgICBnaW50IGVuZE9mZnNldDsKLQotI2lmICFBVEtfQ0hFQ0tfVkVSU0lPTigy
LCAxMCwgMCkKLSAgICBnY2hhciogdGV4dCA9IGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNldChB
VEtfVEVYVChwYXJhZ3JhcGgpLCAwLCBBVEtfVEVYVF9CT1VOREFSWV9MSU5FX1NUQVJULCAmc3Rh
cnRPZmZzZXQsICZlbmRPZmZzZXQpOwotICAgIGdfYXNzZXJ0KHRleHQpOwotICAgIGdfYXNzZXJ0
X2NtcHN0cih0ZXh0LCA9PSwgImZvbyBiYXIgYmF6Iik7Ci0gICAgZ19hc3NlcnRfY21waW50KHN0
YXJ0T2Zmc2V0LCA9PSwgMCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0sIDEx
KTsKLSAgICBnX2ZyZWUodGV4dCk7Ci0jZWxzZQotICAgIGdjaGFyKiB0ZXh0ID0gYXRrX3RleHRf
Z2V0X3N0cmluZ19hdF9vZmZzZXQoQVRLX1RFWFQocGFyYWdyYXBoKSwgMCwgQVRLX1RFWFRfR1JB
TlVMQVJJVFlfTElORSwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAgICBnX2Fzc2VydCh0
ZXh0KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGV4dCwgPT0sICJmb28gYmFyIGJheiIpOwotICAg
IGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDApOwotICAgIGdfYXNzZXJ0X2NtcGlu
dChlbmRPZmZzZXQsID09LCAxMSk7Ci0gICAgZ19mcmVlKHRleHQpOwotI2VuZGlmCi0KLSAgICBn
X29iamVjdF91bnJlZihwYXJhZ3JhcGgpOwotCi0gICAgLyogU2Vjb25kIHBhcmFncmFwaCAobGlu
ayBpbiB0aGUgbWlkZGxlKS4gKi8KLSAgICBwYXJhZ3JhcGggPSBhdGtfb2JqZWN0X3JlZl9hY2Nl
c3NpYmxlX2NoaWxkKG9iamVjdCwgMSk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQocGFyYWdy
YXBoKSk7Ci0KLSNpZiAhQVRLX0NIRUNLX1ZFUlNJT04oMiwgMTAsIDApCi0gICAgdGV4dCA9IGF0
a190ZXh0X2dldF90ZXh0X2F0X29mZnNldChBVEtfVEVYVChwYXJhZ3JhcGgpLCAwLCBBVEtfVEVY
VF9CT1VOREFSWV9MSU5FX1NUQVJULCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOwotICAgIGdf
YXNzZXJ0KHRleHQpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwgImZvbyBiYXIgYmF6
Iik7Ci0gICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMCk7Ci0gICAgZ19hc3Nl
cnRfY21waW50KGVuZE9mZnNldCwgPT0sIDExKTsKLSAgICBnX2ZyZWUodGV4dCk7Ci0jZWxzZQot
ICAgIHRleHQgPSBhdGtfdGV4dF9nZXRfc3RyaW5nX2F0X29mZnNldChBVEtfVEVYVChwYXJhZ3Jh
cGgpLCAwLCBBVEtfVEVYVF9HUkFOVUxBUklUWV9MSU5FLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZz
ZXQpOwotICAgIGdfYXNzZXJ0KHRleHQpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwg
ImZvbyBiYXIgYmF6Iik7Ci0gICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMCk7
Ci0gICAgZ19hc3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0sIDExKTsKLSAgICBnX2ZyZWUodGV4
dCk7Ci0jZW5kaWYKLQotICAgIGdfb2JqZWN0X3VucmVmKHBhcmFncmFwaCk7Ci0KLSAgICAvKiBU
aGlyZCBwYXJhZ3JhcGggKGxpbmsgYXQgdGhlIGVuZCkuICovCi0gICAgcGFyYWdyYXBoID0gYXRr
X29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDIpOwotICAgIGdfYXNzZXJ0KEFU
S19JU19URVhUKHBhcmFncmFwaCkpOwotCi0jaWYgIUFUS19DSEVDS19WRVJTSU9OKDIsIDEwLCAw
KQotICAgIHRleHQgPSBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQoQVRLX1RFWFQocGFyYWdy
YXBoKSwgMCwgQVRLX1RFWFRfQk9VTkRBUllfTElORV9TVEFSVCwgJnN0YXJ0T2Zmc2V0LCAmZW5k
T2Zmc2V0KTsKLSAgICBnX2Fzc2VydCh0ZXh0KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGV4dCwg
PT0sICJmb28gYmFyIGJheiIpOwotICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0s
IDApOwotICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCAxMSk7Ci0gICAgZ19mcmVl
KHRleHQpOwotI2Vsc2UKLSAgICB0ZXh0ID0gYXRrX3RleHRfZ2V0X3N0cmluZ19hdF9vZmZzZXQo
QVRLX1RFWFQocGFyYWdyYXBoKSwgMCwgQVRLX1RFWFRfR1JBTlVMQVJJVFlfTElORSwgJnN0YXJ0
T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAgICBnX2Fzc2VydCh0ZXh0KTsKLSAgICBnX2Fzc2VydF9j
bXBzdHIodGV4dCwgPT0sICJmb28gYmFyIGJheiIpOwotICAgIGdfYXNzZXJ0X2NtcGludChzdGFy
dE9mZnNldCwgPT0sIDApOwotICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCAxMSk7
Ci0gICAgZ19mcmVlKHRleHQpOwotI2VuZGlmCi0KLSAgICBnX29iamVjdF91bnJlZihwYXJhZ3Jh
cGgpOwotICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0
V2Via2l0QXRrSHlwZXJ0ZXh0QW5kSHlwZXJsaW5rcygpCi17Ci0gICAgV2ViS2l0V2ViVmlldyog
d2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdf
b2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOwotICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9
IHsgMCwgMCwgODAwLCA2MDAgfTsKLSAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJ
REdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0
cmluZyh3ZWJWaWV3LCBoeXBlcnRleHRBbmRIeXBlcmxpbmtzLCAwLCAwLCAwKTsKLQotICAgIEF0
a09iamVjdCogb2JqZWN0ID0gZ2V0V2ViQXJlYU9iamVjdCh3ZWJWaWV3KTsKLSAgICBnX2Fzc2Vy
dChvYmplY3QpOwotCi0gICAgQXRrT2JqZWN0KiBwYXJhZ3JhcGgxID0gYXRrX29iamVjdF9yZWZf
YWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDApOwotICAgIGdfYXNzZXJ0KEFUS19PQkpFQ1QocGFy
YWdyYXBoMSkpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUocGFyYWdyYXBoMSkg
PT0gQVRLX1JPTEVfUEFSQUdSQVBIKTsKLSAgICBnX2Fzc2VydChBVEtfSVNfSFlQRVJURVhUKHBh
cmFncmFwaDEpKTsKLQotICAgIC8qIE5vIGxpbmtzIGluIHRoZSBmaXJzdCBwYXJhZ3JhcGguICov
Ci0gICAgZ2ludCBuTGlua3MgPSBhdGtfaHlwZXJ0ZXh0X2dldF9uX2xpbmtzKEFUS19IWVBFUlRF
WFQocGFyYWdyYXBoMSkpOwotICAgIGdfYXNzZXJ0X2NtcGludChuTGlua3MsID09LCAwKTsKLQot
ICAgIEF0a09iamVjdCogcGFyYWdyYXBoMiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hp
bGQob2JqZWN0LCAxKTsKLSAgICBnX2Fzc2VydChBVEtfT0JKRUNUKHBhcmFncmFwaDIpKTsKLSAg
ICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKHBhcmFncmFwaDIpID09IEFUS19ST0xFX1BB
UkFHUkFQSCk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX0hZUEVSVEVYVChwYXJhZ3JhcGgyKSk7Ci0K
LSAgICAvKiBDaGVjayBsaW5rcyBpbiB0aGUgc2Vjb25kIHBhcmFncmFwaC4KLSAgICAgICBuTGlu
a3MgPSBhdGtfaHlwZXJ0ZXh0X2dldF9uX2xpbmtzKEFUS19IWVBFUlRFWFQocGFyYWdyYXBoMikp
OwotICAgICAgIGdfYXNzZXJ0X2NtcGludChuTGlua3MsID09LCAzKTsgKi8KLQotICAgIEF0a0h5
cGVybGluayogaExpbmsxID0gYXRrX2h5cGVydGV4dF9nZXRfbGluayhBVEtfSFlQRVJURVhUKHBh
cmFncmFwaDIpLCAwKTsKLSAgICBnX2Fzc2VydChBVEtfSFlQRVJMSU5LKGhMaW5rMSkpOwotICAg
IEF0a09iamVjdCogaExpbmtPYmplY3QxID0gYXRrX2h5cGVybGlua19nZXRfb2JqZWN0KGhMaW5r
MSwgMCk7Ci0gICAgZ19hc3NlcnQoQVRLX09CSkVDVChoTGlua09iamVjdDEpKTsKLSAgICBnX2Fz
c2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGhMaW5rT2JqZWN0MSkgPT0gQVRLX1JPTEVfTElOSyk7
Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0X3N0YXJ0X2luZGV4KGhMaW5r
MSksID09LCAwKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfZW5kX2lu
ZGV4KGhMaW5rMSksID09LCA2KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19n
ZXRfbl9hbmNob3JzKGhMaW5rMSksID09LCAxKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoYXRrX2h5
cGVybGlua19nZXRfdXJpKGhMaW5rMSwgMCksID09LCAiaHR0cDovL2Zvby5iYXIuYmF6LyIpOwot
Ci0gICAgQXRrSHlwZXJsaW5rKiBoTGluazIgPSBhdGtfaHlwZXJ0ZXh0X2dldF9saW5rKEFUS19I
WVBFUlRFWFQocGFyYWdyYXBoMiksIDEpOwotICAgIGdfYXNzZXJ0KEFUS19IWVBFUkxJTksoaExp
bmsyKSk7Ci0gICAgQXRrT2JqZWN0KiBoTGlua09iamVjdDIgPSBhdGtfaHlwZXJsaW5rX2dldF9v
YmplY3QoaExpbmsyLCAwKTsKLSAgICBnX2Fzc2VydChBVEtfT0JKRUNUKGhMaW5rT2JqZWN0Mikp
OwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoaExpbmtPYmplY3QyKSA9PSBBVEtf
Uk9MRV9MSU5LKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfc3RhcnRf
aW5kZXgoaExpbmsyKSwgPT0sIDEyKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlu
a19nZXRfZW5kX2luZGV4KGhMaW5rMiksID09LCAzMik7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0
a19oeXBlcmxpbmtfZ2V0X25fYW5jaG9ycyhoTGluazIpLCA9PSwgMSk7Ci0gICAgZ19hc3NlcnRf
Y21wc3RyKGF0a19oeXBlcmxpbmtfZ2V0X3VyaShoTGluazIsIDApLCA9PSwgImh0dHA6Ly9iYXIu
YmF6LmZvby8iKTsKLQotICAgIEF0a0h5cGVybGluayogaExpbmszID0gYXRrX2h5cGVydGV4dF9n
ZXRfbGluayhBVEtfSFlQRVJURVhUKHBhcmFncmFwaDIpLCAyKTsKLSAgICBnX2Fzc2VydChBVEtf
SFlQRVJMSU5LKGhMaW5rMykpOwotICAgIEF0a09iamVjdCogaExpbmtPYmplY3QzID0gYXRrX2h5
cGVybGlua19nZXRfb2JqZWN0KGhMaW5rMywgMCk7Ci0gICAgZ19hc3NlcnQoQVRLX09CSkVDVCho
TGlua09iamVjdDMpKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGhMaW5rT2Jq
ZWN0MykgPT0gQVRLX1JPTEVfTElOSyk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBlcmxp
bmtfZ2V0X3N0YXJ0X2luZGV4KGhMaW5rMyksID09LCA2NSk7Ci0gICAgZ19hc3NlcnRfY21waW50
KGF0a19oeXBlcmxpbmtfZ2V0X2VuZF9pbmRleChoTGluazMpLCA9PSwgNzUpOwotICAgIGdfYXNz
ZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9uX2FuY2hvcnMoaExpbmszKSwgPT0sIDEpOwot
ICAgIGdfYXNzZXJ0X2NtcHN0cihhdGtfaHlwZXJsaW5rX2dldF91cmkoaExpbmszLCAwKSwgPT0s
ICJodHRwOi8vYmF6LmZvby5iYXIvIik7Ci0KLSAgICBBdGtPYmplY3QqIGxpc3QgPSBhdGtfb2Jq
ZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMik7Ci0gICAgZ19hc3NlcnQoQVRLX09C
SkVDVChsaXN0KSk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShsaXN0KSA9PSBB
VEtfUk9MRV9MSVNUKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX29iamVjdF9nZXRfbl9hY2Nl
c3NpYmxlX2NoaWxkcmVuKGxpc3QpLCA9PSwgMSk7Ci0KLSAgICBBdGtPYmplY3QqIGxpc3RJdGVt
ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChsaXN0LCAwKTsKLSAgICBnX2Fzc2Vy
dChBVEtfSVNfVEVYVChsaXN0SXRlbSkpOwotICAgIGdfYXNzZXJ0KEFUS19JU19IWVBFUlRFWFQo
bGlzdEl0ZW0pKTsKLQotICAgIEF0a0h5cGVybGluayogaExpbmtJbkxpc3RJdGVtID0gYXRrX2h5
cGVydGV4dF9nZXRfbGluayhBVEtfSFlQRVJURVhUKGxpc3RJdGVtKSwgMCk7Ci0gICAgZ19hc3Nl
cnQoQVRLX0hZUEVSTElOSyhoTGlua0luTGlzdEl0ZW0pKTsKLSAgICBBdGtPYmplY3QqIGhMaW5r
T2JqZWN0ID0gYXRrX2h5cGVybGlua19nZXRfb2JqZWN0KGhMaW5rSW5MaXN0SXRlbSwgMCk7Ci0g
ICAgZ19hc3NlcnQoQVRLX09CSkVDVChoTGlua09iamVjdCkpOwotICAgIGdfYXNzZXJ0KGF0a19v
YmplY3RfZ2V0X3JvbGUoaExpbmtPYmplY3QpID09IEFUS19ST0xFX0xJTkspOwotICAgIGdfYXNz
ZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9zdGFydF9pbmRleChoTGlua0luTGlzdEl0ZW0p
LCA9PSwgMjApOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9lbmRfaW5k
ZXgoaExpbmtJbkxpc3RJdGVtKSwgPT0sIDQzKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5
cGVybGlua19nZXRfbl9hbmNob3JzKGhMaW5rSW5MaXN0SXRlbSksID09LCAxKTsKLSAgICBnX2Fz
c2VydF9jbXBzdHIoYXRrX2h5cGVybGlua19nZXRfdXJpKGhMaW5rSW5MaXN0SXRlbSwgMCksID09
LCAiaHR0cDovL2Zvby5iYXIuYmF6LyIpOwotCi0gICAgLyogRmluYWxseSBjaGVjayB0aGUgQXRr
QWN0aW9uIGludGVyZmFjZSBmb3IgYSBnaXZlbiBBdGtIeXBlcmxpbmsuICovCi0gICAgZ19hc3Nl
cnQoQVRLX0lTX0FDVElPTihoTGluazEpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2FjdGlv
bl9nZXRfbl9hY3Rpb25zKEFUS19BQ1RJT04oaExpbmsxKSksID09LCAxKTsKLSAgICBnX2Fzc2Vy
dF9jbXBzdHIoYXRrX2FjdGlvbl9nZXRfa2V5YmluZGluZyhBVEtfQUNUSU9OKGhMaW5rMSksIDAp
LCA9PSwgIiIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihhdGtfYWN0aW9uX2dldF9uYW1lKEFUS19B
Q1RJT04oaExpbmsxKSwgMCksID09LCAianVtcCIpOwotICAgIGdfYXNzZXJ0KGF0a19hY3Rpb25f
ZG9fYWN0aW9uKEFUS19BQ1RJT04oaExpbmsxKSwgMCkpOwotCi0gICAgZ19vYmplY3RfdW5yZWYo
cGFyYWdyYXBoMSk7Ci0gICAgZ19vYmplY3RfdW5yZWYocGFyYWdyYXBoMik7Ci0gICAgZ19vYmpl
Y3RfdW5yZWYobGlzdCk7Ci0gICAgZ19vYmplY3RfdW5yZWYobGlzdEl0ZW0pOwotICAgIGdfb2Jq
ZWN0X3VucmVmKHdlYlZpZXcpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrTGlzdHNP
Zkl0ZW1zKCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVX
KHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7
Ci0gICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9OwotICAg
IGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlv
bik7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIGxpc3RzT2ZJdGVt
cywgMCwgMCwgMCk7Ci0KLSAgICBBdGtPYmplY3QqIG9iamVjdCA9IGdldFdlYkFyZWFPYmplY3Qo
d2ViVmlldyk7Ci0gICAgZ19hc3NlcnQob2JqZWN0KTsKLQotICAgIC8qIFVub3JkZXJlZCBsaXN0
LiAqLwotCi0gICAgQXRrT2JqZWN0KiB1TGlzdCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVf
Y2hpbGQob2JqZWN0LCAwKTsKLSAgICBnX2Fzc2VydChBVEtfT0JKRUNUKHVMaXN0KSk7Ci0gICAg
Z19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZSh1TGlzdCkgPT0gQVRLX1JPTEVfTElTVCk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KGF0a19vYmplY3RfZ2V0X25fYWNjZXNzaWJsZV9jaGlsZHJlbih1
TGlzdCksID09LCAzKTsKLQotICAgIEF0a09iamVjdCogaXRlbTEgPSBhdGtfb2JqZWN0X3JlZl9h
Y2Nlc3NpYmxlX2NoaWxkKHVMaXN0LCAwKTsKLSAgICBBdGtPYmplY3QqIGl0ZW0yID0gYXRrX29i
amVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZCh1TGlzdCwgMSk7Ci0gICAgQXRrT2JqZWN0KiBpdGVt
MyA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQodUxpc3QsIDIpOwotCi0gICAgZ19h
c3NlcnRfY21waW50KGF0a19vYmplY3RfZ2V0X25fYWNjZXNzaWJsZV9jaGlsZHJlbihpdGVtMSks
ID09LCAwKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX29iamVjdF9nZXRfbl9hY2Nlc3NpYmxl
X2NoaWxkcmVuKGl0ZW0yKSwgPT0sIDEpOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfb2JqZWN0
X2dldF9uX2FjY2Vzc2libGVfY2hpbGRyZW4oaXRlbTMpLCA9PSwgMSk7Ci0KLSAgICBnX29iamVj
dF91bnJlZihpdGVtMSk7Ci0gICAgZ19vYmplY3RfdW5yZWYoaXRlbTIpOwotICAgIGdfb2JqZWN0
X3VucmVmKGl0ZW0zKTsKLQotICAgIC8qIE9yZGVyZWQgbGlzdC4gKi8KLQotICAgIEF0a09iamVj
dCogb0xpc3QgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMSk7Ci0g
ICAgZ19hc3NlcnQoQVRLX09CSkVDVChvTGlzdCkpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3Rf
Z2V0X3JvbGUob0xpc3QpID09IEFUS19ST0xFX0xJU1QpOwotICAgIGdfYXNzZXJ0X2NtcGludChh
dGtfb2JqZWN0X2dldF9uX2FjY2Vzc2libGVfY2hpbGRyZW4ob0xpc3QpLCA9PSwgMyk7Ci0KLSAg
ICBpdGVtMSA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob0xpc3QsIDApOwotICAg
IGl0ZW0yID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvTGlzdCwgMSk7Ci0gICAg
aXRlbTMgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9MaXN0LCAyKTsKLQotICAg
IGdfYXNzZXJ0X2NtcGludChhdGtfb2JqZWN0X2dldF9uX2FjY2Vzc2libGVfY2hpbGRyZW4oaXRl
bTEpLCA9PSwgMCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a19vYmplY3RfZ2V0X25fYWNjZXNz
aWJsZV9jaGlsZHJlbihpdGVtMiksID09LCAxKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX29i
amVjdF9nZXRfbl9hY2Nlc3NpYmxlX2NoaWxkcmVuKGl0ZW0zKSwgPT0sIDEpOwotCi0gICAgZ19v
YmplY3RfdW5yZWYoaXRlbTEpOwotICAgIGdfb2JqZWN0X3VucmVmKGl0ZW0yKTsKLSAgICBnX29i
amVjdF91bnJlZihpdGVtMyk7Ci0KLSAgICBnX29iamVjdF91bnJlZih1TGlzdCk7Ci0gICAgZ19v
YmplY3RfdW5yZWYob0xpc3QpOwotICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwotfQotCi10
eXBlZGVmIGVudW0gewotICBURVhUX0NIQU5HRV9JTlNFUlQgPSAxLAotICBURVhUX0NIQU5HRV9S
RU1PVkUgPSAyCi19IFRleHRDaGFuZ2VUeXBlOwotCi1zdGF0aWMgZ2NoYXIqIHRleHRDaGFuZ2Vk
UmVzdWx0ID0gMDsKLQotc3RhdGljIHZvaWQgdGV4dENoYW5nZWRDYihBdGtUZXh0KiB0ZXh0LCBn
aW50IHBvcywgZ2ludCBsZW4sIGdjaGFyKiBtb2RpZmllZFRleHQsIGdwb2ludGVyIGRhdGEpCi17
Ci0gICAgZ19hc3NlcnQodGV4dCAmJiBBVEtfSVNfT0JKRUNUKHRleHQpKTsKLQotICAgIFRleHRD
aGFuZ2VUeXBlIHR5cGUgPSBHUE9JTlRFUl9UT19JTlQoZGF0YSk7Ci0gICAgZ19mcmVlKHRleHRD
aGFuZ2VkUmVzdWx0KTsKLSAgICB0ZXh0Q2hhbmdlZFJlc3VsdCA9IGdfc3RyZHVwX3ByaW50Zigi
fCVkfCVkfCVkfCclcyd8IiwgdHlwZSwgcG9zLCBsZW4sIG1vZGlmaWVkVGV4dCk7Ci19Ci0KLXN0
YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtUZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbnMoKQotewotICAg
IFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3
X25ldygpKTsKLSAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKLSAgICBHdGtBbGxvY2F0
aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDgwMCwgNjAwIH07Ci0gICAgZ3RrX3dpZGdldF9zaXpl
X2FsbG9jYXRlKEdUS19XSURHRVQod2ViVmlldyksICZhbGxvY2F0aW9uKTsKLSAgICB3ZWJraXRf
d2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgZm9ybVdpdGhUZXh0SW5wdXRzLCAwLCAwLCAw
KTsKLQotICAgIEF0a09iamVjdCogb2JqZWN0ID0gZ2V0V2ViQXJlYU9iamVjdCh3ZWJWaWV3KTsK
LSAgICBnX2Fzc2VydChvYmplY3QpOwotCi0gICAgQXRrT2JqZWN0KiBmb3JtID0gYXRrX29iamVj
dF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDApOwotICAgIGdfYXNzZXJ0KEFUS19JU19P
QkpFQ1QoZm9ybSkpOwotCi0gICAgLyogRmlyc3QgY2hlY2sgbm9ybWFsIHRleHQgZW50cmllcy4g
Ki8KLSAgICBBdGtPYmplY3QqIHRleHRFbnRyeSA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVf
Y2hpbGQoZm9ybSwgMCk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX0VESVRBQkxFX1RFWFQodGV4dEVu
dHJ5KSk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShBVEtfT0JKRUNUKHRleHRF
bnRyeSkpID09IEFUS19ST0xFX0VOVFJZKTsKLQotICAgIGdfc2lnbmFsX2Nvbm5lY3QodGV4dEVu
dHJ5LCAidGV4dC1pbnNlcnQiLAotICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyh0ZXh0
Q2hhbmdlZENiKSwKLSAgICAgICAgICAgICAgICAgICAgIEdJTlRfVE9fUE9JTlRFUihURVhUX0NI
QU5HRV9JTlNFUlQpKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHRleHRFbnRyeSwgInRleHQtcmVt
b3ZlIiwKLSAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sodGV4dENoYW5nZWRDYiksCi0g
ICAgICAgICAgICAgICAgICAgICBHSU5UX1RPX1BPSU5URVIoVEVYVF9DSEFOR0VfUkVNT1ZFKSk7
Ci0KLSAgICBnaW50IHBvcyA9IDA7Ci0gICAgYXRrX2VkaXRhYmxlX3RleHRfaW5zZXJ0X3RleHQo
QVRLX0VESVRBQkxFX1RFWFQodGV4dEVudHJ5KSwgImZvbyBiYXIgYmF6IiwgMTEsICZwb3MpOwot
ICAgIGNoYXIqIHRleHQgPSBhdGtfdGV4dF9nZXRfdGV4dChBVEtfVEVYVCh0ZXh0RW50cnkpLCAw
LCAtMSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09LCAiZm9vIGJhciBiYXoiKTsKLSAg
ICBnX2Fzc2VydF9jbXBzdHIodGV4dENoYW5nZWRSZXN1bHQsID09LCAifDF8MHwxMXwnZm9vIGJh
ciBiYXonfCIpOwotICAgIGdfZnJlZSh0ZXh0KTsKLQotICAgIGF0a19lZGl0YWJsZV90ZXh0X2Rl
bGV0ZV90ZXh0KEFUS19FRElUQUJMRV9URVhUKHRleHRFbnRyeSksIDQsIDcpOwotICAgIHRleHQg
PSBhdGtfdGV4dF9nZXRfdGV4dChBVEtfVEVYVCh0ZXh0RW50cnkpLCAwLCAtMSk7Ci0gICAgZ19h
c3NlcnRfY21wc3RyKHRleHQsID09LCAiZm9vICBiYXoiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIo
dGV4dENoYW5nZWRSZXN1bHQsID09LCAifDJ8NHwzfCdiYXInfCIpOwotICAgIGdfZnJlZSh0ZXh0
KTsKLQotICAgIHBvcyA9IDQ7Ci0gICAgYXRrX2VkaXRhYmxlX3RleHRfaW5zZXJ0X3RleHQoQVRL
X0VESVRBQkxFX1RFWFQodGV4dEVudHJ5KSwgInF1eCBxdXV4IHRvYmVpZ25vcmVkIiwgOCwgJnBv
cyk7Ci0gICAgdGV4dCA9IGF0a190ZXh0X2dldF90ZXh0KEFUS19URVhUKHRleHRFbnRyeSksIDAs
IC0xKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGV4dCwgPT0sICJmb28gcXV4IHF1dXggYmF6Iik7
Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRleHRDaGFuZ2VkUmVzdWx0LCA9PSwgInwxfDR8OHwncXV4
IHF1dXgnfCIpOwotICAgIGdfZnJlZSh0ZXh0KTsKLQotICAgIC8qIE5vdyBjaGVjayBmb3IgcGFz
c3dvcmQgZW50cmllcy4gKi8KLSAgICBBdGtPYmplY3QqIHBhc3N3b3JkRW50cnkgPSBhdGtfb2Jq
ZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZvcm0sIDEpOwotICAgIGdfYXNzZXJ0KEFUS19JU19F
RElUQUJMRV9URVhUKHBhc3N3b3JkRW50cnkpKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dl
dF9yb2xlKEFUS19PQkpFQ1QocGFzc3dvcmRFbnRyeSkpID09IEFUS19ST0xFX1BBU1NXT1JEX1RF
WFQpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdChwYXNzd29yZEVudHJ5LCAidGV4dC1pbnNlcnQi
LAotICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyh0ZXh0Q2hhbmdlZENiKSwKLSAgICAg
ICAgICAgICAgICAgICAgIEdJTlRfVE9fUE9JTlRFUihURVhUX0NIQU5HRV9JTlNFUlQpKTsKLSAg
ICBnX3NpZ25hbF9jb25uZWN0KHBhc3N3b3JkRW50cnksICJ0ZXh0LXJlbW92ZSIsCi0gICAgICAg
ICAgICAgICAgICAgICBHX0NBTExCQUNLKHRleHRDaGFuZ2VkQ2IpLAotICAgICAgICAgICAgICAg
ICAgICAgR0lOVF9UT19QT0lOVEVSKFRFWFRfQ0hBTkdFX1JFTU9WRSkpOwotCi0gICAgcG9zID0g
MDsKLSAgICAvKiBBIHNpbmdsZSBidWxsZXQgY2hhcmFjdGVyIGlzICdcMzQyXDIwMFwyNDInICov
Ci0gICAgYXRrX2VkaXRhYmxlX3RleHRfaW5zZXJ0X3RleHQoQVRLX0VESVRBQkxFX1RFWFQocGFz
c3dvcmRFbnRyeSksICJmb29iYXIiLCA2LCAmcG9zKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGV4
dENoYW5nZWRSZXN1bHQsID09LCAifDF8MHw2fCdcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDJcMzQy
XDIwMFwyNDJcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDInfCIpOwotICAgIHRl
eHQgPSBhdGtfdGV4dF9nZXRfdGV4dChBVEtfVEVYVChwYXNzd29yZEVudHJ5KSwgMCwgLTEpOwot
ICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwgIlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0Mlwz
NDJcMjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MiIpOwotICAgIGdf
ZnJlZSh0ZXh0KTsKLQotICAgIGF0a19lZGl0YWJsZV90ZXh0X2RlbGV0ZV90ZXh0KEFUS19FRElU
QUJMRV9URVhUKHBhc3N3b3JkRW50cnkpLCAyLCA0KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGV4
dENoYW5nZWRSZXN1bHQsID09LCAifDJ8MnwyfCdcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDInfCIp
OwotCi0gICAgdGV4dCA9IGF0a190ZXh0X2dldF90ZXh0KEFUS19URVhUKHBhc3N3b3JkRW50cnkp
LCAwLCAtMSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09LCAiXDM0MlwyMDBcMjQyXDM0
MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyIik7Ci0gICAgZ19mcmVlKHRleHQpOwot
Ci0gICAgcG9zID0gMzsKLSAgICBhdGtfZWRpdGFibGVfdGV4dF9pbnNlcnRfdGV4dChBVEtfRURJ
VEFCTEVfVEVYVChwYXNzd29yZEVudHJ5KSwgInF1eCB0b2JlaWdub3JlZCIsIDMsICZwb3MpOwot
ICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0Q2hhbmdlZFJlc3VsdCwgPT0sICJ8MXwzfDN8J1wzNDJc
MjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0Mid8Iik7Ci0KLSAgICB0ZXh0ID0gYXRrX3Rl
eHRfZ2V0X3RleHQoQVRLX1RFWFQocGFzc3dvcmRFbnRyeSksIDAsIC0xKTsKLSAgICBnX2Fzc2Vy
dF9jbXBzdHIodGV4dCwgPT0sICJcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDJc
MzQyXDIwMFwyNDJcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDIiKTsKLSAgICBn
X2ZyZWUodGV4dCk7Ci0KLSAgICBnX2ZyZWUodGV4dENoYW5nZWRSZXN1bHQpOwotCi0gICAgZ19v
YmplY3RfdW5yZWYoZm9ybSk7Ci0gICAgZ19vYmplY3RfdW5yZWYodGV4dEVudHJ5KTsKLSAgICBn
X29iamVjdF91bnJlZihwYXNzd29yZEVudHJ5KTsKLSAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3
KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a1BhcmVudEZvclJvb3RPYmplY3QoKQot
ewotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dl
Yl92aWV3X25ldygpKTsKLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDgw
MCwgNjAwIH07Ci0gICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQod2ViVmll
dyksICZhbGxvY2F0aW9uKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmll
dywgY29udGVudHMsIDAsIDAsIDApOwotCi0gICAgLyogV2UgbmVlZCBhIHBhcmVudCBjb250YWlu
ZXIgd2lkZ2V0IGZvciB0aGUgd2Vidmlldy4gKi8KLSAgICBHdGtXaWRnZXQqIHBhcmVudENvbnRh
aW5lciA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOwotICAgIGdfb2JqZWN0
X3JlZl9zaW5rKHBhcmVudENvbnRhaW5lcik7Ci0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NP
TlRBSU5FUihwYXJlbnRDb250YWluZXIpLCBHVEtfV0lER0VUKHdlYlZpZXcpKTsKLQotICAgIEF0
a09iamVjdCogYXhQYXJlbnQgPSBndGtfd2lkZ2V0X2dldF9hY2Nlc3NpYmxlKHBhcmVudENvbnRh
aW5lcik7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX09CSkVDVChheFBhcmVudCkpOwotCi0gICAgQXRr
T2JqZWN0KiBheFJvb3QgPSBndGtfd2lkZ2V0X2dldF9hY2Nlc3NpYmxlKEdUS19XSURHRVQod2Vi
VmlldykpOwotICAgIGdfYXNzZXJ0KEFUS19JU19PQkpFQ1QoYXhSb290KSk7Ci0KLSAgICAvKiBU
aGUgY2hpbGQgZm9yIHRoZSBwYXJlbnQgY29udGFpbmVyJ3MgYWNjZXNzaWJpbGl0eSBvYmplY3QK
LSAgICAgICBzaG91bGQgYmUgdGhlIGFjY2Vzc2liaWxpdHkgb2JqZWN0IGZvciB0aGUgV2ViVmll
dydzIHJvb3QuICovCi0gICAgQXRrT2JqZWN0KiBheFBhcmVudENoaWxkID0gYXRrX29iamVjdF9y
ZWZfYWNjZXNzaWJsZV9jaGlsZChheFBhcmVudCwgMCk7Ci0gICAgZ19hc3NlcnQoYXhQYXJlbnRD
aGlsZCA9PSBheFJvb3QpOwotCi0gICAgLyogQm90dG9tLXVwIG5hdmlnYXRpb24gc2hvdWxkIG1h
dGNoIHRvcC1kb3duIG9uZS4gKi8KLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9wYXJlbnQo
YXhQYXJlbnRDaGlsZCkgPT0gYXhQYXJlbnQpOwotCi0gICAgZ19vYmplY3RfdW5yZWYoYXhQYXJl
bnRDaGlsZCk7Ci0gICAgZ19vYmplY3RfdW5yZWYocGFyZW50Q29udGFpbmVyKTsKLX0KLQotc3Rh
dGljIHZvaWQgdGVzdFdlYmtpdEF0a1NldFBhcmVudEZvck9iamVjdCgpCi17Ci0gICAgV2ViS2l0
V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkp
OwotICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgODAwLCA2MDAgfTsKLSAg
ICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRp
b24pOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LCBjb250ZW50cywg
MCwgMCwgMCk7Ci0KLSAgICAvKiBQdXQgdGhlIHdlYnZpZXcgaW4gYSBwYXJlbnQgY29udGFpbmVy
IHdpZGdldCB0byBjaGVjayB0aGF0IHRoZQotICAgICAgIG5vcm1hbCBiZWhhdmlvdXIga2VlcHMg
d29ya2luZyBhcyBleHBlY3RlZCBieSBkZWZhdWx0LiAqLwotICAgIEd0a1dpZGdldCogcGFyZW50
Q29udGFpbmVyID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7Ci0gICAgZ19v
YmplY3RfcmVmX3NpbmsocGFyZW50Q29udGFpbmVyKTsKLSAgICBndGtfY29udGFpbmVyX2FkZChH
VEtfQ09OVEFJTkVSKHBhcmVudENvbnRhaW5lciksIEdUS19XSURHRVQod2ViVmlldykpOwotCi0g
ICAgQXRrT2JqZWN0KiBheFJvb3QgPSBndGtfd2lkZ2V0X2dldF9hY2Nlc3NpYmxlKEdUS19XSURH
RVQod2ViVmlldykpOwotICAgIGdfYXNzZXJ0KEFUS19JU19PQkpFQ1QoYXhSb290KSk7Ci0KLSAg
ICBBdGtPYmplY3QqIGF4UGFyZW50ID0gZ3RrX3dpZGdldF9nZXRfYWNjZXNzaWJsZShwYXJlbnRD
b250YWluZXIpOwotICAgIGdfYXNzZXJ0KEFUS19JU19PQkpFQ1QoYXhQYXJlbnQpKTsKLQotICAg
IC8qIFRoZSBwYXJlbnQgb2YgdGhlIHJvb3Qgb2JqZWN0IGlzIHRoZSBwYXJlbnQgY29udGFpbmVy
J3MgYTExeSBvYmplY3QuICovCi0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcGFyZW50KGF4
Um9vdCkgPT0gYXhQYXJlbnQpOwotCi0gICAgLyogV2Ugbm93IG5lZWQgdG8gdXNlIHNvbWV0aGlu
ZyBhcyBhIGFuIGFsdGVybmF0aXZlIHBhcmVudCBmb3IKLSAgICAgICB0aGUgYTExeSBvYmplY3Qg
YXNzb2NpYXRlZCB3aXRoIHRoZSByb290IG9mIHRoZSBET00gdHJlZS4gKi8KLSAgICBHdGtXaWRn
ZXQqIGFsdGVybmF0aXZlUGFyZW50ID0gZ3RrX2J1dHRvbl9uZXcoKTsKLSAgICBnX29iamVjdF9y
ZWZfc2luayhhbHRlcm5hdGl2ZVBhcmVudCk7Ci0KLSAgICBBdGtPYmplY3QqIGF4QWx0ZXJuYXRp
dmVQYXJlbnQgPSBndGtfd2lkZ2V0X2dldF9hY2Nlc3NpYmxlKGFsdGVybmF0aXZlUGFyZW50KTsK
LSAgICBnX2Fzc2VydChBVEtfSVNfT0JKRUNUKGF4QWx0ZXJuYXRpdmVQYXJlbnQpKTsKLQotICAg
IC8qIE1hbnVhbGx5IHNldCB0aGUgYWx0ZXJuYXRpdmUgcGFyZW50J3MgYWNjZXNzaWJpbGl0eSBv
YmplY3QgYXMKLSAgICAgICB0aGUgcGFyZW50IGZvciB0aGUgV2ViS2l0IGFjY2Vzc2liaWxpdHkg
cm9vdCBvYmplY3QgYW5kIGNoZWNrLiAqLwotICAgIGF0a19vYmplY3Rfc2V0X3BhcmVudChheFJv
b3QsIGF4QWx0ZXJuYXRpdmVQYXJlbnQpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3Bh
cmVudChheFJvb3QpID09IGF4QWx0ZXJuYXRpdmVQYXJlbnQpOwotCi0gICAgZ19vYmplY3RfdW5y
ZWYoYWx0ZXJuYXRpdmVQYXJlbnQpOwotICAgIGdfb2JqZWN0X3VucmVmKHBhcmVudENvbnRhaW5l
cik7Ci19Ci0KLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotc3RhdGljIHZvaWQgaW5pdGlhbGl6
ZVRlc3RpbmdGcmFtZXdvcmsoaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotewotICAgIC8qIEVuc3Vy
ZSBHQUlMIGlzIHRoZSBvbmx5IG1vZHVsZSBsb2FkZWQuICovCi0gICAgZ19zZXRlbnYoIkdUS19N
T0RVTEVTIiwgImdhaWwiLCBUUlVFKTsKLQotICAgIC8qIEZvbGxvd2luZyBsaW5lcyB3ZXJlIHRh
a2VuIGZyb20gZ3RrX3Rlc3RfaW5pdCgpLiAqLwotICAgIGdfdGVzdF9pbml0KCZhcmdjLCAmYXJn
diwgMCk7Ci0gICAgZ3RrX2Rpc2FibGVfc2V0bG9jYWxlKCk7Ci0gICAgc2V0bG9jYWxlKExDX0FM
TCwgIkMiKTsKLQotICAgIGd0a19pbml0KCZhcmdjLCAmYXJndik7Ci19Ci0jZW5kaWYKLQotaW50
IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotewotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8y
Ci0gICAgLyogV2UgY2FuJ3QganVzdCBjYWxsIHRvIGd0a190ZXN0X2luaXQoKSBpbiB0aGlzIGNh
c2UgYmVjYXVzZSBpdHMKLSAgICAgICBpbXBsZW1lbnRhdGlvbiBtYWtlcyBzdXJlIHRoYXQgbm8g
R1RLKyBtb2R1bGUgd2lsbCBiZSBsb2FkZWQsIGFuZAotICAgICAgIHdlIHdpbGwgbmVlZCB0byBs
b2FkIEdBSUwgZm9yIHRlc3RzIHRoYXQgbmVlZCB0byB1c2UgQXRrT2JqZWN0cwotICAgICAgIGZy
b20gbm9uLVdlYktpdCBHdGtXaWRnZXRzIChlLmcgcGFyZW50Rm9yUm9vdE9iamVjdCkuKi8KLSAg
ICBpbml0aWFsaXplVGVzdGluZ0ZyYW1ld29yayhhcmdjLCBhcmd2KTsKLSNlbHNlCi0gICAgZ3Rr
X3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOwotI2VuZGlmCi0KLSAgICBnX3Rlc3RfYnVn
X2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwotICAgIGdfdGVzdF9hZGRfZnVuYygi
L3dlYmtpdC9hdGsvY2FyZXRPZmZzZXRzIiwgdGVzdFdlYmtpdEF0a0NhcmV0T2Zmc2V0cyk7Ci0g
ICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9jYXJldE9mZnNldHNBbmRFeHRyYW5vdXNX
aGl0ZVNwYWNlcyIsIHRlc3RXZWJraXRBdGtDYXJldE9mZnNldHNBbmRFeHRyYW5vdXNXaGl0ZVNw
YWNlcyk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9jb21ib0JveCIsIHRlc3RX
ZWJraXRBdGtDb21ib0JveCk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9kb2N1
bWVudExvYWRpbmdFdmVudHMiLCB0ZXN0V2Via2l0QXRrRG9jdW1lbnRMb2FkaW5nRXZlbnRzKTsK
LSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2VtYmVkZGVkT2JqZWN0cyIsIHRlc3RX
ZWJraXRBdGtFbWJlZGRlZE9iamVjdHMpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9h
dGsvZ2V0SGVhZGVyc0luVGFibGUiLCB0ZXN0V2Via2l0QXRrR2V0SGVhZGVyc0luVGFibGUpOwot
ICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvdGV4dEF0dHJpYnV0ZXMiLCB0ZXN0V2Vi
a2l0QXRrVGV4dEF0dHJpYnV0ZXMpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsv
dGV4dFNlbGVjdGlvbnMiLCB0ZXN0V2Via2l0QXRrVGV4dFNlbGVjdGlvbnMpOwotICAgIGdfdGVz
dF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvZ2V0RXh0ZW50cyIsIHRlc3RXZWJraXRBdGtHZXRFeHRl
bnRzKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2h5cGVydGV4dEFuZEh5cGVy
bGlua3MiLCB0ZXN0V2Via2l0QXRrSHlwZXJ0ZXh0QW5kSHlwZXJsaW5rcyk7Ci0gICAgZ190ZXN0
X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9sYXlvdXRBbmREYXRhVGFibGVzIiwgdGVzdFdlYmtpdEF0
a0xheW91dEFuZERhdGFUYWJsZXMpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsv
bGlua3NXaXRoSW5saW5lSW1hZ2VzIiwgdGVzdFdlYmtpdEF0a0xpbmtzV2l0aElubGluZUltYWdl
cyk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9saXN0c09mSXRlbXMiLCB0ZXN0
V2Via2l0QXRrTGlzdHNPZkl0ZW1zKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRr
L3RleHRDaGFuZ2VkTm90aWZpY2F0aW9ucyIsIHRlc3RXZWJraXRBdGtUZXh0Q2hhbmdlZE5vdGlm
aWNhdGlvbnMpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvcGFyZW50Rm9yUm9v
dE9iamVjdCIsIHRlc3RXZWJraXRBdGtQYXJlbnRGb3JSb290T2JqZWN0KTsKLSAgICBnX3Rlc3Rf
YWRkX2Z1bmMoIi93ZWJraXQvYXRrL3NldFBhcmVudEZvck9iamVjdCIsIHRlc3RXZWJraXRBdGtT
ZXRQYXJlbnRGb3JPYmplY3QpOwotICAgIHJldHVybiBnX3Rlc3RfcnVuICgpOwotfQotCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXRrcm9sZXMuYyBiL1NvdXJjZS9X
ZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhdGtyb2xlcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA4ODgxN2NmOGFlOWZjYWI0NTcxMTFlZWVkMGM2ZmNlNDI5NTcxMTk4Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rl
c3RzL3Rlc3RhdGtyb2xlcy5jCisrKyAvZGV2L251bGwKQEAgLTEsNDI2ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgwqkgMjAxMCBKb2FubWFyaWUgRGlnZ3MKLSAqIENvcHlyaWdodCDCqSAyMDEw
IElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5j
bHVkZSA8Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d2Vi
a2l0L3dlYmtpdC5oPgotCi0vKiBOb24gZm9ybSByb2xlcyAqLwotI2RlZmluZSBIVE1MX0RPQ1VN
RU5UX0ZSQU1FICI8aHRtbD48Ym9keT5UaGlzIGlzIGEgdGVzdC48L2JvZHk+PC9odG1sPiIKLSNk
ZWZpbmUgSFRNTF9IRUFESU5HICI8aHRtbD48Ym9keT48aDE+MTwvaDE+PGgyPjI8L2gyPjxoMz4z
PC9oMz48aDQ+NDwvaDQ+PGg1PjU8L2g1PjxoNj42PC9oNj48L2JvZHk+PC9odG1sPiIKLSNkZWZp
bmUgSFRNTF9JTUFHRSAiPGh0bWw+PGJvZHk+PGltZyBzcmM9J2Zvb2Jhci5wbmcnIGFsdD0nVGhp
cyBpcyBhIHRlc3QuJy8+PC9ib2R5PjwvaHRtbD4iCi0jZGVmaW5lIEhUTUxfTElOS19URVhUICI8
aHRtbD48Ym9keT48YSBocmVmPSdmb29iYXIuaHRtbCc+VGhpcyBpcyBhIHRlc3QuPC9hPjwvYm9k
eT48L2h0bWw+IgotI2RlZmluZSBIVE1MX0xJU1QgIjxodG1sPjxib2R5Pjx1bD48bGk+MTwvbGk+
PGxpPjI8L2xpPjwvdWw+PG9sPjxsaT4xPC9saT48bGk+MjwvbGk+PC9vbD48L2JvZHk+PC9odG1s
PiIKLSNkZWZpbmUgSFRNTF9QQVJBR1JBUEggIjxodG1sPjxib2R5PjxwPlRoaXMgaXMgYSB0ZXN0
LjwvcD48L2JvZHk+PC9odG1sPiIKLSNkZWZpbmUgSFRNTF9TRUNUSU9OICI8aHRtbD48Ym9keT48
ZGl2PlRoaXMgaXMgYSB0ZXN0LjwvZGl2PjwvYm9keT48L2h0bWw+IgotI2RlZmluZSBIVE1MX1RB
QkxFICI8aHRtbD48Ym9keT48dGFibGUgYm9yZGVyPScxJz48dHI+PHRkPlRoaXMgaXM8L3RkPjx0
ZD5hIHRlc3QuPC90ZD48L3RyPjwvdGFibGU+PC9ib2R5PjwvaHRtbD4iCi0jZGVmaW5lIEhUTUxf
U0VQQVJBVE9SICI8aHRtbD48Ym9keT48aHIvPjwvYm9keT48L2h0bWw+IgotI2RlZmluZSBIVE1M
X0NPTUJPQk9YICI8aHRtbD48Ym9keT48c2VsZWN0IHNpemU9JzEnPjxvcHRpb24+b25lPC9vcHRp
b24+PG9wdGlvbj50d288L29wdGlvbj48b3B0aW9uPnRocmVlPC9vcHRpb24+PC9zZWxlY3Q+PC9i
b2R5PjwvaHRtbD4iCi0vKiBGb3JtIHJvbGVzICovCi0jZGVmaW5lIEhUTUxfRk9STSAiPGh0bWw+
PGJvZHk+PGZvcm0+VGhpcyBpcyBhIHRlc3QuPC9mb3JtPjwvYm9keT48L2h0bWw+IgotI2RlZmlu
ZSBIVE1MX0NIRUNLX0JPWCAiPGh0bWw+PGJvZHk+PGlucHV0IHR5cGU9J2NoZWNrYm94JyAvPlRo
aXMgaXMgYSB0ZXN0LjwvYm9keT48L2h0bWw+IgotI2RlZmluZSBIVE1MX0xBQkVMRURfRU5UUlkg
IjxodG1sPjxib2R5PjxsYWJlbCBmb3I9J2Zvbyc+TmFtZTo8L2xhYmVsPjxpbnB1dCB0eXBlPSd0
ZXh0JyBpZD0nZm9vJyAvPjwvYm9keT48L2h0bWw+IgotI2RlZmluZSBIVE1MX0xJU1RCT1ggIjxo
dG1sPjxib2R5PjxzZWxlY3Qgc2l6ZT0nMyc+PG9wdGlvbj5vbmU8L29wdGlvbj48b3B0aW9uPnR3
bzwvb3B0aW9uPjxvcHRpb24+dGhyZWU8L29wdGlvbj48L3NlbGVjdD48L2JvZHk+PC9odG1sPiIK
LSNkZWZpbmUgSFRNTF9QQVNTV09SRF9URVhUICI8aHRtbD48Ym9keT48aW5wdXQgdHlwZT0ncGFz
c3dvcmQnIC8+PC9ib2R5PjwvaHRtbD4iCi0jZGVmaW5lIEhUTUxfUFVTSF9CVVRUT04gIjxodG1s
Pjxib2R5PjxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPSdvaycgLz5UaGlzIGlzIGEgdGVzdC48
L2JvZHk+PC9odG1sPiIKLSNkZWZpbmUgSFRNTF9SQURJT19CVVRUT04gIjxodG1sPjxib2R5Pjxp
bnB1dCB0eXBlPSdyYWRpbycgLz5UaGlzIGlzIGEgdGVzdC48L2JvZHk+PC9odG1sPiIKLQotdHlw
ZWRlZiBzdHJ1Y3QgewotICAgIEF0a09iamVjdCogZG9jdW1lbnQ7Ci0gICAgQXRrT2JqZWN0KiBv
Ymo7Ci0gICAgQXRrUm9sZSByb2xlOwotICAgIEd0a1dpZGdldCogd2ViVmlldzsKLSAgICBHdGtB
bGxvY2F0aW9uIGFsbG9jOwotICAgIEdNYWluTG9vcCogbG9vcDsKLX0gQXRrUm9sZXNGaXh0dXJl
OwotCi1zdGF0aWMgZ2Jvb2xlYW4gZmluaXNoX2xvYWRpbmcoQXRrUm9sZXNGaXh0dXJlKiBmaXh0
dXJlKQotewotICAgIGlmIChnX21haW5fbG9vcF9pc19ydW5uaW5nKGZpeHR1cmUtPmxvb3ApKQot
ICAgICAgICBnX21haW5fbG9vcF9xdWl0KGZpeHR1cmUtPmxvb3ApOwotCi0gICAgLy8gV2l0aCB0
aGUgY2hhbmdlIHRvIHN1cHBvcnQgV0syIGFjY2Vzc2liaWxpdHksIHRoZSByb290IG9iamVjdAot
ICAgIC8vIGhhcyBjaGFuZ2VkIGFuZCBpdCdzIG5vIGxvbmdlciB0aGUgZG9jdW1lbnQgZnJhbWUs
IGJ1dCBhIHNjcm9sbAotICAgIC8vIHBhbmUgY29udGFpbmluZyB0aGUgZG9jdW1lbnQgZnJhbWUg
YXMgaXRzIG9ubHkgY2hpbGQuIFNlZSB0aGUKLSAgICAvLyBidWcgNzIzOTAgZm9yIG1vcmUgZGV0
YWlscyBvbiB0aGlzIGNoYW5nZS4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NzIzOTAKLSAgICBBdGtPYmplY3QqIHJvb3RPYmplY3QgPSBndGtfd2lkZ2V0
X2dldF9hY2Nlc3NpYmxlKGZpeHR1cmUtPndlYlZpZXcpOwotICAgIGZpeHR1cmUtPmRvY3VtZW50
ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChyb290T2JqZWN0LCAwKTsKLSAgICBn
X2Fzc2VydChmaXh0dXJlLT5kb2N1bWVudCk7Ci0KLSAgICAvLyBSZW1vdmUgdGhlIHJlZmVyZW5j
ZSBhZGRlZCBieSByZWZfYWNjZXNzaWJsZV9jaGlsZCgpIGFuZAotICAgIC8vIHJldHVybiwgc2lu
Y2Ugd2UgZG9uJ3QgbmVlZCB0byBrZWVwIHRoYXQgZXh0cmEgcmVmIGF0IGFsbC4KLSAgICBnX29i
amVjdF91bnJlZihmaXh0dXJlLT5kb2N1bWVudCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1z
dGF0aWMgdm9pZCBhdGtfcm9sZXNfZml4dHVyZV9zZXR1cChBdGtSb2xlc0ZpeHR1cmUqIGZpeHR1
cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBmaXh0dXJlLT5sb29wID0gZ19tYWluX2xv
b3BfbmV3KE5VTEwsIFRSVUUpOwotICAgIGZpeHR1cmUtPmFsbG9jID0gKEd0a0FsbG9jYXRpb24p
IHsgMCwgMCwgODAwLCA2MDAgfTsKLSAgICBmaXh0dXJlLT53ZWJWaWV3ID0gd2Via2l0X3dlYl92
aWV3X25ldygpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKGZpeHR1cmUtPndlYlZpZXcpOwotCi0g
ICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKGZpeHR1cmUtPndlYlZpZXcsICZmaXh0dXJlLT5h
bGxvYyk7Ci0KLSAgICBpZiAoZGF0YSAhPSBOVUxMKQotICAgICAgICB3ZWJraXRfd2ViX3ZpZXdf
bG9hZF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVXIChmaXh0dXJlLT53ZWJWaWV3KSwgKGNvbnN0IGNo
YXIqKSBkYXRhLCBOVUxMLCBOVUxMLCBOVUxMKTsKLQotICAgIGdfaWRsZV9hZGQoKEdTb3VyY2VG
dW5jKSBmaW5pc2hfbG9hZGluZywgZml4dHVyZSk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1
cmUtPmxvb3ApOwotfQotCi1zdGF0aWMgdm9pZCBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bihB
dGtSb2xlc0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBnX29i
amVjdF91bnJlZihmaXh0dXJlLT53ZWJWaWV3KTsKLSAgICBnX21haW5fbG9vcF91bnJlZihmaXh0
dXJlLT5sb29wKTsKLX0KLQotc3RhdGljIHZvaWQgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoQXRr
T2JqZWN0KiBvYmosIGdpbnQgcG9zLCBBdGtSb2xlIHJvbGUpCi17Ci0gICAgQXRrT2JqZWN0KiBj
aGlsZDsKLSAgICBBdGtSb2xlIGNoaWxkX3JvbGU7Ci0KLSAgICBjaGlsZCA9IGF0a19vYmplY3Rf
cmVmX2FjY2Vzc2libGVfY2hpbGQob2JqLCBwb3MpOwotICAgIGdfYXNzZXJ0KGNoaWxkKTsKLSAg
ICBjaGlsZF9yb2xlID0gYXRrX29iamVjdF9nZXRfcm9sZShjaGlsZCk7Ci0gICAgZ19hc3NlcnQo
Y2hpbGRfcm9sZSA9PSByb2xlKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGNoaWxkKTsKLX0KLQot
c3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2RvY3VtZW50X2ZyYW1lKEF0a1Jv
bGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGZpeHR1cmUt
PnJvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKGZpeHR1cmUtPmRvY3VtZW50KTsKLSAgICBnX2Fz
c2VydChmaXh0dXJlLT5yb2xlID09IEFUS19ST0xFX0RPQ1VNRU5UX1dFQik7Ci19Ci0KLXN0YXRp
YyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9oZWFkaW5nKEF0a1JvbGVzRml4dHVyZSog
Zml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGdldF9jaGlsZF9hbmRfdGVzdF9y
b2xlKGZpeHR1cmUtPmRvY3VtZW50LCAwLCBBVEtfUk9MRV9IRUFESU5HKTsKLSAgICBnZXRfY2hp
bGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5kb2N1bWVudCwgMSwgQVRLX1JPTEVfSEVBRElORyk7
Ci0gICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+ZG9jdW1lbnQsIDIsIEFUS19S
T0xFX0hFQURJTkcpOwotICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPmRvY3Vt
ZW50LCAzLCBBVEtfUk9MRV9IRUFESU5HKTsKLSAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShm
aXh0dXJlLT5kb2N1bWVudCwgNCwgQVRLX1JPTEVfSEVBRElORyk7Ci0gICAgZ2V0X2NoaWxkX2Fu
ZF90ZXN0X3JvbGUoZml4dHVyZS0+ZG9jdW1lbnQsIDUsIEFUS19ST0xFX0hFQURJTkcpOwotfQot
Ci1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfaW1hZ2UoQXRrUm9sZXNGaXh0
dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgLy8gVGhpcyBpcyBhbiBl
eHRyYW5lb3VzIG9iamVjdCBvZiBBVEtfUk9MRV9QQU5FTCB3aGljaCB3ZSBzaG91bGQgZ2V0IHJp
ZCBvZi4KLSAgICBmaXh0dXJlLT5vYmogPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxk
KGZpeHR1cmUtPmRvY3VtZW50LCAwKTsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT5vYmopOwotCi0g
ICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+b2JqLCAwLCBBVEtfUk9MRV9JTUFH
RSk7Ci0KLSAgICBnX29iamVjdF91bnJlZihmaXh0dXJlLT5vYmopOwotfQotCi1zdGF0aWMgdm9p
ZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfbGluayhBdGtSb2xlc0ZpeHR1cmUqIGZpeHR1cmUs
IGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICAvLyBUaGlzIGlzIGFuIGV4dHJhbmVvdXMgb2Jq
ZWN0IG9mIEFUS19ST0xFX1BBTkVMIHdoaWNoIHdlIHNob3VsZCBnZXQgcmlkIG9mLgotICAgIGZp
eHR1cmUtPm9iaiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoZml4dHVyZS0+ZG9j
dW1lbnQsIDApOwotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPm9iaik7Ci0KLSAgICBnZXRfY2hpbGRf
YW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5vYmosIDAsIEFUS19ST0xFX0xJTkspOwotCi0gICAgZ19v
YmplY3RfdW5yZWYoZml4dHVyZS0+b2JqKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRf
YXRrX2dldF9yb2xlX2xpc3RfYW5kX2l0ZW0oQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29u
c3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgQXRrT2JqZWN0KiBsaXN0T2JqOwotCi0gICAgbGlzdE9i
aiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoZml4dHVyZS0+ZG9jdW1lbnQsIDAp
OwotICAgIGdfYXNzZXJ0KGxpc3RPYmopOwotICAgIGZpeHR1cmUtPnJvbGUgPSBhdGtfb2JqZWN0
X2dldF9yb2xlKGxpc3RPYmopOwotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPnJvbGUgPT0gQVRLX1JP
TEVfTElTVCk7Ci0KLSAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShsaXN0T2JqLCAwLCBBVEtf
Uk9MRV9MSVNUX0lURU0pOwotICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGxpc3RPYmosIDEs
IEFUS19ST0xFX0xJU1RfSVRFTSk7Ci0gICAgZ19vYmplY3RfdW5yZWYobGlzdE9iaik7Ci0KLSAg
ICBsaXN0T2JqID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmaXh0dXJlLT5kb2N1
bWVudCwgMSk7Ci0gICAgZ19hc3NlcnQobGlzdE9iaik7Ci0gICAgZml4dHVyZS0+cm9sZSA9IGF0
a19vYmplY3RfZ2V0X3JvbGUobGlzdE9iaik7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+cm9sZSA9
PSBBVEtfUk9MRV9MSVNUKTsKLQotICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGxpc3RPYmos
IDAsIEFUS19ST0xFX0xJU1RfSVRFTSk7Ci0gICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUobGlz
dE9iaiwgMSwgQVRLX1JPTEVfTElTVF9JVEVNKTsKLSAgICBnX29iamVjdF91bnJlZihsaXN0T2Jq
KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX3BhcmFncmFwaChB
dGtSb2xlc0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBnZXRf
Y2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5kb2N1bWVudCwgMCwgQVRLX1JPTEVfUEFSQUdS
QVBIKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX3NlY3Rpb24o
QXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ2V0
X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+ZG9jdW1lbnQsIDAsIEFUS19ST0xFX1NFQ1RJ
T04pOwotfQotCi0vLyBEb2VzIG5vdCB5ZXQgdGVzdCB0YWJsZSBjZWxscyBiZWNhdXNlIG9mIGJ1
ZyAzMDg5NS4KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV90YWJsZShBdGtS
b2xlc0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBnZXRfY2hp
bGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5kb2N1bWVudCwgMCwgQVRLX1JPTEVfVEFCTEUpOwot
fQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfc2VwYXJhdG9yKEF0a1Jv
bGVzRml4dHVyZSAqZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGdldF9jaGls
ZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPmRvY3VtZW50LCAwLCBBVEtfUk9MRV9TRVBBUkFUT1Ip
OwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfY29tYm9ib3goQXRr
Um9sZXNGaXh0dXJlICpmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgQXRrT2Jq
ZWN0KiBjb21ib2JveE1lbnU7Ci0KLSAgICAvLyBUaGlzIGlzIGFuIGV4dHJhbmVvdXMgb2JqZWN0
IG9mIEFUS19ST0xFX1BBTkVMIHdoaWNoIHdlIHNob3VsZCBnZXQgcmlkIG9mLgotICAgIGZpeHR1
cmUtPm9iaiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoZml4dHVyZS0+ZG9jdW1l
bnQsIDApOwotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPm9iaik7Ci0KLSAgICBmaXh0dXJlLT5vYmog
PSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZpeHR1cmUtPm9iaiwgMCk7Ci0gICAg
Z19hc3NlcnQoZml4dHVyZS0+b2JqKTsKLSAgICBmaXh0dXJlLT5yb2xlID0gYXRrX29iamVjdF9n
ZXRfcm9sZShmaXh0dXJlLT5vYmopOwotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPnJvbGUgPT0gQVRL
X1JPTEVfQ09NQk9fQk9YKTsKLQotICAgIGNvbWJvYm94TWVudSA9IGF0a19vYmplY3RfcmVmX2Fj
Y2Vzc2libGVfY2hpbGQoZml4dHVyZS0+b2JqLCAwKTsKLSAgICBnX2Fzc2VydChjb21ib2JveE1l
bnUpOwotICAgIGZpeHR1cmUtPnJvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKGNvbWJvYm94TWVu
dSk7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+cm9sZSA9PSBBVEtfUk9MRV9NRU5VKTsKLQotICAg
IGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGNvbWJvYm94TWVudSwgMCwgQVRLX1JPTEVfTUVOVV9J
VEVNKTsKLSAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShjb21ib2JveE1lbnUsIDEsIEFUS19S
T0xFX01FTlVfSVRFTSk7Ci0gICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoY29tYm9ib3hNZW51
LCAyLCBBVEtfUk9MRV9NRU5VX0lURU0pOwotCi0gICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+
b2JqKTsKLSAgICBnX29iamVjdF91bnJlZihjb21ib2JveE1lbnUpOwotfQotCi0vKiBGb3JtIHJv
bGVzICovCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfZm9ybShBdGtSb2xl
c0ZpeHR1cmUgKmZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBnZXRfY2hpbGRf
YW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5kb2N1bWVudCwgMCwgQVRLX1JPTEVfRk9STSk7Ci19Ci0K
LXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9jaGVja19ib3goQXRrUm9sZXNG
aXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgLy8gVGhpcyBpcyBh
biBleHRyYW5lb3VzIG9iamVjdCBvZiBBVEtfUk9MRV9QQU5FTCB3aGljaCB3ZSBzaG91bGQgZ2V0
IHJpZCBvZi4KLSAgICBmaXh0dXJlLT5vYmogPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2No
aWxkKGZpeHR1cmUtPmRvY3VtZW50LCAwKTsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT5vYmopOwot
Ci0gICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+b2JqLCAwLCBBVEtfUk9MRV9D
SEVDS19CT1gpOwotCi0gICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+b2JqKTsKLX0KLQotc3Rh
dGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2VudHJ5KEF0a1JvbGVzRml4dHVyZSog
Zml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIC8vIFRoaXMgaXMgYW4gZXh0cmFu
ZW91cyBvYmplY3Qgb2YgQVRLX1JPTEVfUEFORUwgd2hpY2ggd2Ugc2hvdWxkIGdldCByaWQgb2Yu
Ci0gICAgZml4dHVyZS0+b2JqID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmaXh0
dXJlLT5kb2N1bWVudCwgMCk7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+b2JqKTsKLQotICAgIGdl
dF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPm9iaiwgMSwgQVRLX1JPTEVfRU5UUlkpOwot
Ci0gICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+b2JqKTsKLX0KLQotc3RhdGljIHZvaWQgdGVz
dF93ZWJraXRfYXRrX2dldF9yb2xlX2xhYmVsKEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2Nv
bnN0cG9pbnRlciBkYXRhKQotewotICAgIC8vIFRoaXMgaXMgYW4gZXh0cmFuZW91cyBvYmplY3Qg
b2YgQVRLX1JPTEVfUEFORUwgd2hpY2ggd2Ugc2hvdWxkIGdldCByaWQgb2YuCi0gICAgZml4dHVy
ZS0+b2JqID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmaXh0dXJlLT5kb2N1bWVu
dCwgMCk7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+b2JqKTsKLQotICAgIGdldF9jaGlsZF9hbmRf
dGVzdF9yb2xlKGZpeHR1cmUtPm9iaiwgMCwgQVRLX1JPTEVfTEFCRUwpOwotCi0gICAgZ19vYmpl
Y3RfdW5yZWYoZml4dHVyZS0+b2JqKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRr
X2dldF9yb2xlX2xpc3Rib3goQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVy
IGRhdGEpCi17Ci0gICAgQXRrT2JqZWN0KiBsaXN0Ym94T2JqOwotICAgIC8vIFRoaXMgaXMgYW4g
ZXh0cmFuZW91cyBvYmplY3Qgb2YgQVRLX1JPTEVfUEFORUwgd2hpY2ggd2Ugc2hvdWxkIGdldCBy
aWQgb2YuCi0gICAgZml4dHVyZS0+b2JqID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGls
ZChmaXh0dXJlLT5kb2N1bWVudCwgMCk7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+b2JqKTsKLQot
ICAgIGxpc3Rib3hPYmogPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZpeHR1cmUt
Pm9iaiwgMCk7Ci0gICAgZ19hc3NlcnQobGlzdGJveE9iaik7Ci0gICAgZml4dHVyZS0+cm9sZSA9
IGF0a19vYmplY3RfZ2V0X3JvbGUobGlzdGJveE9iaik7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+
cm9sZSA9PSBBVEtfUk9MRV9MSVNUKTsKLQotICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGxp
c3Rib3hPYmosIDAsIEFUS19ST0xFX0xJU1RfSVRFTSk7Ci0gICAgZ2V0X2NoaWxkX2FuZF90ZXN0
X3JvbGUobGlzdGJveE9iaiwgMSwgQVRLX1JPTEVfTElTVF9JVEVNKTsKLSAgICBnZXRfY2hpbGRf
YW5kX3Rlc3Rfcm9sZShsaXN0Ym94T2JqLCAyLCBBVEtfUk9MRV9MSVNUX0lURU0pOwotCi0gICAg
Z19vYmplY3RfdW5yZWYoZml4dHVyZS0+b2JqKTsKLSAgICBnX29iamVjdF91bnJlZihsaXN0Ym94
T2JqKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX3Bhc3N3b3Jk
X3RleHQoQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0g
ICAgLy8gVGhpcyBpcyBhbiBleHRyYW5lb3VzIG9iamVjdCBvZiBBVEtfUk9MRV9QQU5FTCB3aGlj
aCB3ZSBzaG91bGQgZ2V0IHJpZCBvZi4KLSAgICBmaXh0dXJlLT5vYmogPSBhdGtfb2JqZWN0X3Jl
Zl9hY2Nlc3NpYmxlX2NoaWxkKGZpeHR1cmUtPmRvY3VtZW50LCAwKTsKLSAgICBnX2Fzc2VydChm
aXh0dXJlLT5vYmopOwotCi0gICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+b2Jq
LCAwLCBBVEtfUk9MRV9QQVNTV09SRF9URVhUKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1
cmUtPm9iaik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9wdXNo
X2J1dHRvbihBdGtSb2xlc0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsK
LSAgICAvLyBUaGlzIGlzIGFuIGV4dHJhbmVvdXMgb2JqZWN0IG9mIEFUS19ST0xFX1BBTkVMIHdo
aWNoIHdlIHNob3VsZCBnZXQgcmlkIG9mLgotICAgIGZpeHR1cmUtPm9iaiA9IGF0a19vYmplY3Rf
cmVmX2FjY2Vzc2libGVfY2hpbGQoZml4dHVyZS0+ZG9jdW1lbnQsIDApOwotICAgIGdfYXNzZXJ0
KGZpeHR1cmUtPm9iaik7Ci0KLSAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5v
YmosIDAsIEFUS19ST0xFX1BVU0hfQlVUVE9OKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1
cmUtPm9iaik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9yYWRp
b19idXR0b24oQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17
Ci0gICAgLy8gVGhpcyBpcyBhbiBleHRyYW5lb3VzIG9iamVjdCBvZiBBVEtfUk9MRV9QQU5FTCB3
aGljaCB3ZSBzaG91bGQgZ2V0IHJpZCBvZi4KLSAgICBmaXh0dXJlLT5vYmogPSBhdGtfb2JqZWN0
X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZpeHR1cmUtPmRvY3VtZW50LCAwKTsKLSAgICBnX2Fzc2Vy
dChmaXh0dXJlLT5vYmopOwotCi0gICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+
b2JqLCAwLCBBVEtfUk9MRV9SQURJT19CVVRUT04pOwotCi0gICAgZ19vYmplY3RfdW5yZWYoZml4
dHVyZS0+b2JqKTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotewotICAg
IGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLQotICAgIGdfdGVzdF9idWdfYmFz
ZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0
L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfZG9jdW1lbnRfZnJhbWUiLAotICAgICAgICAg
ICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX0RPQ1VNRU5UX0ZSQU1FLAotICAgICAgICAgICAg
ICAgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF9h
dGtfZ2V0X3JvbGVfZG9jdW1lbnRfZnJhbWUsCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4
dHVyZV90ZWFyZG93bik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtp
dF9hdGtfZ2V0X3JvbGVfaGVhZGluZyIsCi0gICAgICAgICAgICAgICBBdGtSb2xlc0ZpeHR1cmUs
IEhUTUxfSEVBRElORywKLSAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAot
ICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2hlYWRpbmcsCi0gICAgICAg
ICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIv
d2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfaW1hZ2UiLAotICAgICAgICAgICAg
ICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX0lNQUdFLAotICAgICAgICAgICAgICAgYXRrX3JvbGVz
X2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVf
aW1hZ2UsCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAg
ICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfbGluayIs
Ci0gICAgICAgICAgICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhUTUxfTElOS19URVhULAotICAgICAg
ICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X3dl
YmtpdF9hdGtfZ2V0X3JvbGVfbGluaywKLSAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJl
X3RlYXJkb3duKTsKLQotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvYXRrL3Rlc3Rfd2Via2l0X2F0
a19nZXRfcm9sZV9saXN0X2FuZF9pdGVtIiwKLSAgICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVy
ZSwgSFRNTF9MSVNULAotICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAsCi0g
ICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfbGlzdF9hbmRfaXRlbSwKLSAg
ICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3RlYXJkb3duKTsKLQotICAgIGdfdGVzdF9h
ZGQoIi93ZWJraXQvYXRrL3Rlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9wYXJhZ3JhcGgiLAotICAg
ICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX1BBUkFHUkFQSCwKLSAgICAgICAgICAg
ICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF93ZWJraXRf
YXRrX2dldF9yb2xlX3BhcmFncmFwaCwKLSAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJl
X3RlYXJkb3duKTsKLQotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvYXRrL3Rlc3Rfd2Via2l0X2F0
a19nZXRfcm9sZV9zZWN0aW9uIiwKLSAgICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVyZSwgSFRN
TF9TRUNUSU9OLAotICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAsCi0gICAg
ICAgICAgICAgICB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfc2VjdGlvbiwKLSAgICAgICAgICAg
ICAgIGF0a19yb2xlc19maXh0dXJlX3RlYXJkb3duKTsKLQotICAgIGdfdGVzdF9hZGQoIi93ZWJr
aXQvYXRrL3Rlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV90YWJsZSIsCi0gICAgICAgICAgICAgICBB
dGtSb2xlc0ZpeHR1cmUsIEhUTUxfVEFCTEUsCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4
dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV90YWJs
ZSwKLSAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3RlYXJkb3duKTsKLQotICAgIGdf
dGVzdF9hZGQoIi93ZWJraXQvYXRrL3Rlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9zZXBhcmF0b3Ii
LAotICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX1NFUEFSQVRPUiwKLSAgICAg
ICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF93
ZWJraXRfYXRrX2dldF9yb2xlX3NlcGFyYXRvciwKLSAgICAgICAgICAgICAgIGF0a19yb2xlc19m
aXh0dXJlX3RlYXJkb3duKTsKLQotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvYXRrL3Rlc3Rfd2Vi
a2l0X2F0a19nZXRfcm9sZV9jb21ib2JveCIsCi0gICAgICAgICAgICAgICBBdGtSb2xlc0ZpeHR1
cmUsIEhUTUxfQ09NQk9CT1gsCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV9zZXR1
cCwKLSAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9jb21ib2JveCwKLSAg
ICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3RlYXJkb3duKTsKLQotICAgIC8qIEZvcm0g
cm9sZXMgKi8KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0
X3JvbGVfZm9ybSIsCi0gICAgICAgICAgICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhUTUxfRk9STSwK
LSAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAg
dGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2Zvcm0sCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNf
Zml4dHVyZV90ZWFyZG93bik7Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9hdGsvdGVzdF93ZWJr
aXRfYXRrX2dldF9yb2xlX2NoZWNrX2JveCIsCi0gICAgICAgICAgICAgICBBdGtSb2xlc0ZpeHR1
cmUsIEhUTUxfQ0hFQ0tfQk9YLAotICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0
dXAsCi0gICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfY2hlY2tfYm94LAot
ICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAgZ190ZXN0
X2FkZCgiL3dlYmtpdC9hdGsvdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2VudHJ5IiwKLSAgICAg
ICAgICAgICAgIEF0a1JvbGVzRml4dHVyZSwgSFRNTF9MQUJFTEVEX0VOVFJZLAotICAgICAgICAg
ICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X3dlYmtp
dF9hdGtfZ2V0X3JvbGVfZW50cnksCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90
ZWFyZG93bik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtf
Z2V0X3JvbGVfbGFiZWwiLAotICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX0xB
QkVMRURfRU5UUlksCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV9zZXR1cCwKLSAg
ICAgICAgICAgICAgIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9sYWJlbCwKLSAgICAgICAgICAg
ICAgIGF0a19yb2xlc19maXh0dXJlX3RlYXJkb3duKTsKLQotICAgIGdfdGVzdF9hZGQoIi93ZWJr
aXQvYXRrL3Rlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9saXN0Ym94IiwKLSAgICAgICAgICAgICAg
IEF0a1JvbGVzRml4dHVyZSwgSFRNTF9MSVNUQk9YLAotICAgICAgICAgICAgICAgYXRrX3JvbGVz
X2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVf
bGlzdGJveCwKLSAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3RlYXJkb3duKTsKLQot
ICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvYXRrL3Rlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9wYXNz
d29yZF90ZXh0IiwKLSAgICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVyZSwgSFRNTF9QQVNTV09S
RF9URVhULAotICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAg
ICAgICAgICB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfcGFzc3dvcmRfdGV4dCwKLSAgICAgICAg
ICAgICAgIGF0a19yb2xlc19maXh0dXJlX3RlYXJkb3duKTsKLQotICAgIGdfdGVzdF9hZGQoIi93
ZWJraXQvYXRrL3Rlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9wdXNoX2J1dHRvbiIsCi0gICAgICAg
ICAgICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhUTUxfUFVTSF9CVVRUT04sCi0gICAgICAgICAgICAg
ICBhdGtfcm9sZXNfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X2F0
a19nZXRfcm9sZV9wdXNoX2J1dHRvbiwKLSAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJl
X3RlYXJkb3duKTsKLQotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvYXRrL3Rlc3Rfd2Via2l0X2F0
a19nZXRfcm9sZV9yYWRpb19idXR0b24iLAotICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJl
LCBIVE1MX1JBRElPX0JVVFRPTiwKLSAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3Nl
dHVwLAotICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX3JhZGlvX2J1dHRv
biwKLSAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3RlYXJkb3duKTsKLQotICAgIHJl
dHVybiBnX3Rlc3RfcnVuKCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0
cy90ZXN0Y29udGV4dG1lbnUuYyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rjb250ZXh0
bWVudS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NGFhYTU3MTk2MWNmNjExNzZm
YzljZjRlNDhjYjkzOTY1YTg1NTVmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rjb250ZXh0bWVudS5jCisr
KyAvZGV2L251bGwKQEAgLTEsMzE0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
SWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiwxIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0
Lmg+Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBjaGFyICpkYXRhOwotICAgIGd1aW50IGZsYWc7
Ci19IFRlc3RJbmZvOwotCi1zdGF0aWMgR01haW5Mb29wICpsb29wOwotCi10eXBlZGVmIHN0cnVj
dCB7Ci0gICAgV2ViS2l0V2ViVmlldyAqd2ViVmlldzsKLSAgICBUZXN0SW5mbyAqaW5mbzsKLX0g
Q29udGV4dE1lbnVGaXh0dXJlOwotCi1zdGF0aWMgVGVzdEluZm8gKnRlc3RJbmZvTmV3KGNvbnN0
IGNoYXIgKmRhdGEsIGd1aW50IGZsYWcpCi17Ci0gICAgVGVzdEluZm8gKmluZm8gPSBnX3NsaWNl
X25ldyhUZXN0SW5mbyk7Ci0gICAgaW5mby0+ZGF0YSA9IGdfc3RyZHVwKGRhdGEpOwotICAgIGlu
Zm8tPmZsYWcgPSBmbGFnOwotCi0gICAgcmV0dXJuIGluZm87Ci19Ci0KLXN0YXRpYyB2b2lkIHRl
c3RJbmZvRGVzdHJveShUZXN0SW5mbyAqaW5mbykKLXsKLSAgICBnX2ZyZWUoaW5mby0+ZGF0YSk7
Ci0gICAgZ19zbGljZV9mcmVlKFRlc3RJbmZvLCBpbmZvKTsKLX0KLQotc3RhdGljIHZvaWQgY29u
dGV4dE1lbnVGaXh0dXJlU2V0dXAoQ29udGV4dE1lbnVGaXh0dXJlICpmaXh0dXJlLCBnY29uc3Rw
b2ludGVyIGRhdGEpCi17Ci0gICAgZml4dHVyZS0+d2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3
ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwg
VFJVRSk7Ci0gICAgZml4dHVyZS0+aW5mbyA9IChUZXN0SW5mbyAqKWRhdGE7Ci19Ci0KLXN0YXRp
YyB2b2lkIGNvbnRleHRNZW51Rml4dHVyZVRlYXJkb3duKENvbnRleHRNZW51Rml4dHVyZSAqZml4
dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUt
PndlYlZpZXcpOwotICAgIGdfbWFpbl9sb29wX3VucmVmKGxvb3ApOwotICAgIHRlc3RJbmZvRGVz
dHJveShmaXh0dXJlLT5pbmZvKTsKLX0KLQotc3RhdGljIEdMaXN0ICpjaGVja0FjdGlvbihHTGlz
dCAqaXRlciwgV2ViS2l0Q29udGV4dE1lbnVBY3Rpb24gYWN0aW9uKQotewotICAgIEd0a01lbnVJ
dGVtICppdGVtID0gKEd0a01lbnVJdGVtICopaXRlci0+ZGF0YTsKLQotICAgIGdfYXNzZXJ0KEdU
S19JU19NRU5VX0lURU0oaXRlbSkpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9jb250ZXh0X21lbnVf
aXRlbV9nZXRfYWN0aW9uKGl0ZW0pID09IGFjdGlvbik7Ci0KLSAgICByZXR1cm4gaXRlci0+bmV4
dDsKLX0KLQotc3RhdGljIEdMaXN0ICpjaGVja0FjdGlvbldpdGhTdWJtZW51KEdMaXN0ICppdGVy
LCBXZWJLaXRDb250ZXh0TWVudUFjdGlvbiBhY3Rpb24pCi17Ci0gICAgR3RrTWVudUl0ZW0gKml0
ZW0gPSAoR3RrTWVudUl0ZW0gKilpdGVyLT5kYXRhOwotCi0gICAgZ19hc3NlcnQoR1RLX0lTX01F
TlVfSVRFTShpdGVtKSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dl
dF9hY3Rpb24oaXRlbSkgPT0gYWN0aW9uKTsKLSAgICBnX2Fzc2VydChHVEtfSVNfTUVOVShndGtf
bWVudV9pdGVtX2dldF9zdWJtZW51KGl0ZW0pKSk7Ci0KLSAgICByZXR1cm4gaXRlci0+bmV4dDsK
LX0KLQotc3RhdGljIEdMaXN0ICpjaGVja1NlcGFyYXRvcihHTGlzdCAqaXRlcikKLXsKLSAgICBH
dGtNZW51SXRlbSAqaXRlbSA9IChHdGtNZW51SXRlbSAqKWl0ZXItPmRhdGE7Ci0KLSAgICBnX2Fz
c2VydChHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSk7Ci0KLSAgICByZXR1cm4gaXRl
ci0+bmV4dDsKLX0KLQotc3RhdGljIGdib29sZWFuIGNvbnRleHRNZW51Q2FsbGJhY2soV2ViS2l0
V2ViVmlldyAqd2ViVmlldywgR3RrV2lkZ2V0ICpkZWZhdWx0TWVudSwgV2ViS2l0SGl0VGVzdFJl
c3VsdCAqaGl0VGVzdFJlc3VsdCwgZ2Jvb2xlYW4ga2V5Ym9hcmRNb2RlLCBncG9pbnRlciB1c2Vy
RGF0YSkKLXsKLSAgICBUZXN0SW5mbyAqaW5mbyA9IChUZXN0SW5mbyAqKXVzZXJEYXRhOwotICAg
IGd1aW50IGNvbnRleHQ7Ci0gICAgR0xpc3QgKml0ZW1zOwotICAgIEdMaXN0ICppdGVyOwotCi0g
ICAgLyogQ2hlY2sgc2lnbmFsIHBhcmFtZXRlcnMgKi8KLSAgICBnX2Fzc2VydChXRUJLSVRfSVNf
V0VCX1ZJRVcod2ViVmlldykpOwotICAgIGdfYXNzZXJ0KEdUS19JU19NRU5VKGRlZmF1bHRNZW51
KSk7Ci0gICAgZ19hc3NlcnQoV0VCS0lUX0lTX0hJVF9URVNUX1JFU1VMVChoaXRUZXN0UmVzdWx0
KSk7Ci0gICAgZ19hc3NlcnQoIWtleWJvYXJkTW9kZSk7Ci0KLSAgICBnX29iamVjdF9nZXQoaGl0
VGVzdFJlc3VsdCwgImNvbnRleHQiLCAmY29udGV4dCwgTlVMTCk7Ci0gICAgZ19hc3NlcnQoY29u
dGV4dCAmIGluZm8tPmZsYWcpOwotCi0gICAgaXRlbXMgPSBndGtfY29udGFpbmVyX2dldF9jaGls
ZHJlbihHVEtfQ09OVEFJTkVSKGRlZmF1bHRNZW51KSk7Ci0gICAgc3dpdGNoIChpbmZvLT5mbGFn
KSB7Ci0gICAgY2FzZSBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfRE9DVU1FTlQ6Ci0g
ICAgICAgIGl0ZXIgPSBpdGVtczsKLSAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdF
QktJVF9DT05URVhUX01FTlVfQUNUSU9OX0dPX0JBQ0spOwotICAgICAgICBpdGVyID0gY2hlY2tB
Y3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fR09fRk9SV0FSRCk7Ci0gICAg
ICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9T
VE9QKTsKLSAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01F
TlVfQUNUSU9OX1JFTE9BRCk7Ci0gICAgICAgIGdfYXNzZXJ0KCFpdGVyKTsKLQotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9JTUFHRToKLSAg
ICAgICAgaXRlciA9IGl0ZW1zOwotICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VC
S0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9JTUFHRV9JTl9ORVdfV0lORE9XKTsKLSAgICAg
ICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0RP
V05MT0FEX0lNQUdFX1RPX0RJU0spOwotICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwg
V0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9JTUFHRV9UT19DTElQQk9BUkQpOwotICAg
ICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05f
Q09QWV9JTUFHRV9VUkxfVE9fQ0xJUEJPQVJEKTsKLSAgICAgICAgZ19hc3NlcnQoIWl0ZXIpOwot
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhU
X0VESVRBQkxFOgotICAgICAgICBpdGVyID0gaXRlbXM7Ci0gICAgICAgIGl0ZXIgPSBjaGVja0Fj
dGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DVVQpOwotICAgICAgICBpdGVy
ID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWSk7Ci0g
ICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
Tl9QQVNURSk7Ci0gICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVY
VF9NRU5VX0FDVElPTl9ERUxFVEUpOwotICAgICAgICBpdGVyID0gY2hlY2tTZXBhcmF0b3IoaXRl
cik7Ci0gICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5V
X0FDVElPTl9TRUxFQ1RfQUxMKTsKLSAgICAgICAgaXRlciA9IGNoZWNrU2VwYXJhdG9yKGl0ZXIp
OwotICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb25XaXRoU3VibWVudShpdGVyLCBXRUJLSVRfQ09O
VEVYVF9NRU5VX0FDVElPTl9JTlBVVF9NRVRIT0RTKTsKLSAgICAgICAgaXRlciA9IGNoZWNrQWN0
aW9uV2l0aFN1Ym1lbnUoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fVU5JQ09ERSk7
Ci0gICAgICAgIGdfYXNzZXJ0KCFpdGVyKTsKLQotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdF
QktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9MSU5LOgotICAgICAgICBpdGVyID0gaXRlbXM7
Ci0gICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FD
VElPTl9PUEVOX0xJTkspOwotICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lU
X0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9MSU5LX0lOX05FV19XSU5ET1cpOwotICAgICAgICBp
dGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRE9XTkxP
QURfTElOS19UT19ESVNLKTsKLSAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJ
VF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFlfTElOS19UT19DTElQQk9BUkQpOwotICAgICAgICBn
X2Fzc2VydCghaXRlcik7Ci0KLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
Z19hc3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICB9Ci0KLSAgICBnX2xpc3RfZnJlZShpdGVtcyk7
Ci0gICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKLQotICAgIHJldHVybiBUUlVFOwotfQotCi1z
dGF0aWMgdm9pZCBwdXNoRXZlbnQoV2ViS2l0V2ViVmlldyAqd2ViVmlldykKLXsKLSAgICBHZGtF
dmVudCAqZXZlbnQgPSBnZGtfZXZlbnRfbmV3KEdES19CVVRUT05fUFJFU1MpOwotI2lmIEdUS19D
SEVDS19WRVJTSU9OKDMsIDAsIDApCi0gICAgR2RrRGV2aWNlTWFuYWdlciAqZGV2aWNlTWFuYWdl
cjsKLSNlbmRpZgotCi0gICAgZXZlbnQtPmFueS53aW5kb3cgPSBnX29iamVjdF9yZWYoZ3RrX3dp
ZGdldF9nZXRfd2luZG93KEdUS19XSURHRVQod2ViVmlldykpKTsKLSAgICBldmVudC0+YW55LnNl
bmRfZXZlbnQgPSBGQUxTRTsKLSAgICBldmVudC0+YnV0dG9uLnRpbWUgPSBHREtfQ1VSUkVOVF9U
SU1FOwotICAgIGV2ZW50LT5idXR0b24uYnV0dG9uID0gMzsKLSAgICBldmVudC0+YnV0dG9uLngg
PSBldmVudC0+YnV0dG9uLnkgPSA1OwotICAgIGV2ZW50LT5idXR0b24ueF9yb290ID0gZXZlbnQt
PmJ1dHRvbi54OwotICAgIGV2ZW50LT5idXR0b24ueV9yb290ID0gZXZlbnQtPmJ1dHRvbi55Owot
I2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDAsIDApCi0gICAgZGV2aWNlTWFuYWdlciA9IGdka19k
aXNwbGF5X2dldF9kZXZpY2VfbWFuYWdlcihnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsKLSAg
ICBldmVudC0+YnV0dG9uLmRldmljZSA9IGdka19kZXZpY2VfbWFuYWdlcl9nZXRfY2xpZW50X3Bv
aW50ZXIoZGV2aWNlTWFuYWdlcik7Ci0jZW5kaWYKLQotICAgIGdka19ldmVudF9wdXQoZXZlbnQp
OwotICAgIGdka19ldmVudF9mcmVlKGV2ZW50KTsKLX0KLQotc3RhdGljIHZvaWQgbG9hZFN0YXR1
c0NhbGxiYWNrKFdlYktpdFdlYlZpZXcgKndlYlZpZXcsIEdQYXJhbVNwZWMgKnNwZWMsIGdwb2lu
dGVyIGRhdGEpCi17Ci0gICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYlZpZXcpOwotICAgIFRlc3RJbmZvICppbmZvID0gKFRlc3RJ
bmZvICopZGF0YTsKLQotICAgIGdfYXNzZXJ0KHN0YXR1cyAhPSBXRUJLSVRfTE9BRF9GQUlMRUQp
OwotCi0gICAgaWYgKHN0YXR1cyAhPSBXRUJLSVRfTE9BRF9GSU5JU0hFRCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAiY29udGV4dC1tZW51IiwgR19D
QUxMQkFDSyhjb250ZXh0TWVudUNhbGxiYWNrKSwgaW5mbyk7Ci0gICAgcHVzaEV2ZW50KHdlYlZp
ZXcpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gbWFwRXZlbnRDYWxsYmFjayhHdGtXaWRnZXQgKndp
ZGdldCwgR2RrRXZlbnQgKmV2ZW50LCBncG9pbnRlciBkYXRhKQotewotICAgIGd0a193aWRnZXRf
Z3JhYl9mb2N1cyh3aWRnZXQpOwotICAgIENvbnRleHRNZW51Rml4dHVyZSAqZml4dHVyZSA9IChD
b250ZXh0TWVudUZpeHR1cmUgKilkYXRhOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmlu
ZyhmaXh0dXJlLT53ZWJWaWV3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXh0
dXJlLT5pbmZvLT5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGV4dC9o
dG1sIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInV0Zi04IiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImZpbGU6Ly8iKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0
KGZpeHR1cmUtPndlYlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhsb2Fk
U3RhdHVzQ2FsbGJhY2spLCBmaXh0dXJlLT5pbmZvKTsKLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0K
LXN0YXRpYyB2b2lkIHRlc3RDb250ZXh0TWVudShDb250ZXh0TWVudUZpeHR1cmUgKmZpeHR1cmUs
IGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7
IDAsIDAsIDUwLCA1MCB9OwotICAgIEd0a1dpZGdldCAqd2luZG93ID0gZ3RrX3dpbmRvd19uZXco
R1RLX1dJTkRPV19QT1BVUCk7Ci0KLSAgICBndGtfd2luZG93X3Jlc2l6ZShHVEtfV0lORE9XKHdp
bmRvdyksIDUwLCA1MCk7Ci0gICAgZ3RrX3dpbmRvd19tb3ZlKEdUS19XSU5ET1cod2luZG93KSwg
MCwgMCk7Ci0gICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQoZml4dHVyZS0+
d2ViVmlldyksICZhbGxvY2F0aW9uKTsKLSAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJ
TkVSKHdpbmRvdyksIEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldykpOwotICAgIGdfc2lnbmFs
X2Nvbm5lY3Qod2luZG93LCAibWFwLWV2ZW50IiwgR19DQUxMQkFDSyhtYXBFdmVudENhbGxiYWNr
KSwgZml4dHVyZSk7Ci0gICAgZ3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpOwotCi0gICAgZ19t
YWluX2xvb3BfcnVuKGxvb3ApOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gY29udGV4dE1lbnVDdXN0
b21JdGVtQ2FsbGJhY2soV2ViS2l0V2ViVmlldyAqd2ViVmlldywgR3RrV2lkZ2V0ICpkZWZhdWx0
TWVudSwgV2ViS2l0SGl0VGVzdFJlc3VsdCAqaGl0VGVzdFJlc3VsdCwgZ2Jvb2xlYW4ga2V5Ym9h
cmRNb2RlLCBncG9pbnRlciB1c2VyRGF0YSkKLXsKLSAgICBUZXN0SW5mbyAqaW5mbyA9IChUZXN0
SW5mbyAqKXVzZXJEYXRhOwotICAgIGd1aW50IGNvbnRleHQ7Ci0gICAgR0xpc3QgKml0ZW1zOwot
ICAgIEdMaXN0ICppdGVyOwotICAgIEd0a1dpZGdldCAqbWVudUl0ZW07Ci0gICAgR3RrQWN0aW9u
ICphY3Rpb247Ci0KLSAgICAvKiBDaGVjayBzaWduYWwgcGFyYW1ldGVycyAqLwotICAgIGdfYXNz
ZXJ0KFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSk7Ci0gICAgZ19hc3NlcnQoR1RLX0lTX01F
TlUoZGVmYXVsdE1lbnUpKTsKLSAgICBnX2Fzc2VydChXRUJLSVRfSVNfSElUX1RFU1RfUkVTVUxU
KGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCgha2V5Ym9hcmRNb2RlKTsKLQotICAgIGdf
b2JqZWN0X2dldChoaXRUZXN0UmVzdWx0LCAiY29udGV4dCIsICZjb250ZXh0LCBOVUxMKTsKLSAg
ICBnX2Fzc2VydChjb250ZXh0ICYgaW5mby0+ZmxhZyk7Ci0KLSAgICBhY3Rpb24gPSBndGtfYWN0
aW9uX25ldygiVGVzdEFjdGlvbiIsICJDdXN0b20gQWN0aW9uIiwgIkN1c3RvbSBBY3Rpb24gVG9v
bHRpcCIsIE5VTEwpOwotICAgIG1lbnVJdGVtID0gZ3RrX2FjdGlvbl9jcmVhdGVfbWVudV9pdGVt
KGFjdGlvbik7Ci0gICAgZ19vYmplY3RfdW5yZWYoYWN0aW9uKTsKLQotICAgIGd0a19tZW51X3No
ZWxsX2FwcGVuZChHVEtfTUVOVV9TSEVMTChkZWZhdWx0TWVudSksIG1lbnVJdGVtKTsKLSAgICBn
dGtfd2lkZ2V0X3Nob3cobWVudUl0ZW0pOwotCi0gICAgaXRlbXMgPSBndGtfY29udGFpbmVyX2dl
dF9jaGlsZHJlbihHVEtfQ09OVEFJTkVSKGRlZmF1bHRNZW51KSk7Ci0gICAgaXRlciA9IGl0ZW1z
OwotICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
Tl9HT19CQUNLKTsKLSAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRf
TUVOVV9BQ1RJT05fR09fRk9SV0FSRCk7Ci0gICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdF
QktJVF9DT05URVhUX01FTlVfQUNUSU9OX1NUT1ApOwotICAgIGl0ZXIgPSBjaGVja0FjdGlvbihp
dGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9SRUxPQUQpOwotICAgIGl0ZXIgPSBjaGVj
a0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9OT19BQ1RJT04pOwotICAg
IGdfYXNzZXJ0KCFpdGVyKTsKLQotICAgIGdfbGlzdF9mcmVlKGl0ZW1zKTsKLSAgICBnX21haW5f
bG9vcF9xdWl0KGxvb3ApOwotCi0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkIHRl
c3RDb250ZXh0TWVudUN1c3RvbUl0ZW0oQ29udGV4dE1lbnVGaXh0dXJlICpmaXh0dXJlLCBnY29u
c3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgR3RrV2lkZ2V0ICp3aW5kb3cgPSBndGtfd2luZG93X25l
dyhHVEtfV0lORE9XX1BPUFVQKTsKLSAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVS
KHdpbmRvdyksIEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldykpOwotICAgIGd0a193aWRnZXRf
c2hvd19hbGwod2luZG93KTsKLSAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMoR1RLX1dJREdFVChm
aXh0dXJlLT53ZWJWaWV3KSk7Ci0KLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoZml4
dHVyZS0+d2ViVmlldywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4dHVyZS0+
aW5mby0+ZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRleHQvaHRtbCIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1dGYtOCIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJmaWxlOi8vIik7Ci0gICAgZ19zaWduYWxfY29ubmVjdChmaXh0
dXJlLT53ZWJWaWV3LCAiY29udGV4dC1tZW51IiwgR19DQUxMQkFDSyhjb250ZXh0TWVudUN1c3Rv
bUl0ZW1DYWxsYmFjayksIGZpeHR1cmUtPmluZm8pOwotICAgIHB1c2hFdmVudChmaXh0dXJlLT53
ZWJWaWV3KTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICAgIGd0
a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLQotICAgIGdfdGVzdF9idWdfYmFzZSgi
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L3Rl
c3Rjb250ZXh0bWVudS9kb2N1bWVudCIsIENvbnRleHRNZW51Rml4dHVyZSwKLSAgICAgICAgICAg
ICAgIHRlc3RJbmZvTmV3KCI8aHRtbD48Ym9keT48aDE+V2ViS2l0R1RLKyE8L2gxPjwvYm9keT48
L2h0bWw+IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9ISVRfVEVTVF9SRVNV
TFRfQ09OVEVYVF9ET0NVTUVOVCksCi0gICAgICAgICAgICAgICBjb250ZXh0TWVudUZpeHR1cmVT
ZXR1cCwgdGVzdENvbnRleHRNZW51LCBjb250ZXh0TWVudUZpeHR1cmVUZWFyZG93bik7Ci0gICAg
LyogV2UgaGFyZGNvZGUgYWxsIGVsZW1lbnRzIHRvIGJlIGF0IDAsMCBzbyB0aGF0IHdlIGtub3cg
d2hlcmUgdG8gZ2VuZXJhdGUgdGhlIGJ1dHRvbiBldmVudHMgKi8KLSAgICBnX3Rlc3RfYWRkKCIv
d2Via2l0L3Rlc3Rjb250ZXh0bWVudS9pbWFnZSIsIENvbnRleHRNZW51Rml4dHVyZSwKLSAgICAg
ICAgICAgICAgIHRlc3RJbmZvTmV3KCI8aHRtbD48Ym9keT48aW1nIHN0eWxlPSdwb3NpdGlvbjph
YnNvbHV0ZTsgbGVmdDowOyB0b3A6MCcgc3JjPScweGRlYWRiZWVmJyB3aWR0aD01MCBoZWlnaHQ9
NTA+PC9pbWc+PC9ib2R5PjwvaHRtbD4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VC
S0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0lNQUdFKSwKLSAgICAgICAgICAgICAgIGNvbnRl
eHRNZW51Rml4dHVyZVNldHVwLCB0ZXN0Q29udGV4dE1lbnUsIGNvbnRleHRNZW51Rml4dHVyZVRl
YXJkb3duKTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L3Rlc3Rjb250ZXh0bWVudS9lZGl0YWJs
ZSIsIENvbnRleHRNZW51Rml4dHVyZSwKLSAgICAgICAgICAgICAgIHRlc3RJbmZvTmV3KCI8aHRt
bD48Ym9keT48aW5wdXQgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjA7IHRvcDowJyBz
aXplPSczNSc+PC9pbnB1dD4+PC9ib2R5PjwvaHRtbD4iLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0VESVRBQkxFKSwKLSAgICAgICAg
ICAgICAgIGNvbnRleHRNZW51Rml4dHVyZVNldHVwLCB0ZXN0Q29udGV4dE1lbnUsIGNvbnRleHRN
ZW51Rml4dHVyZVRlYXJkb3duKTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L3Rlc3Rjb250ZXh0
bWVudS9saW5rIiwgQ29udGV4dE1lbnVGaXh0dXJlLAotICAgICAgICAgICAgICAgdGVzdEluZm9O
ZXcoIjxodG1sPjxib2R5PjxhIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDowOyB0b3A6
MCcgaHJlZj0naHR0cDovL3d3dy5leGFtcGxlLmNvbSc+SEVMTE8gV09STEQ8L2E+PC9ib2R5Pjwv
aHRtbD4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX0hJVF9URVNUX1JFU1VM
VF9DT05URVhUX0xJTkspLAotICAgICAgICAgICAgICAgY29udGV4dE1lbnVGaXh0dXJlU2V0dXAs
IHRlc3RDb250ZXh0TWVudSwgY29udGV4dE1lbnVGaXh0dXJlVGVhcmRvd24pOwotICAgIGdfdGVz
dF9hZGQoIi93ZWJraXQvdGVzdGNvbnRleHRtZW51L2N1c3RvbWl0ZW0iLCBDb250ZXh0TWVudUZp
eHR1cmUsCi0gICAgICAgICAgICAgICB0ZXN0SW5mb05ldygiPGh0bWw+PGJvZHk+PGgxPldlYktp
dEdUSyshPC9oMT48L2JvZHk+PC9odG1sPiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBX
RUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfRE9DVU1FTlQpLAotICAgICAgICAgICAgICAg
Y29udGV4dE1lbnVGaXh0dXJlU2V0dXAsIHRlc3RDb250ZXh0TWVudUN1c3RvbUl0ZW0sIGNvbnRl
eHRNZW51Rml4dHVyZVRlYXJkb3duKTsKLQotICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7Ci19Ci0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rjb3B5YW5kcGFzdGUuYyBi
L1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rjb3B5YW5kcGFzdGUuYwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYmIzOGVhNjZiMDQ1NGJhNmE2MDhiYzE4NjFmMjkxZjM5NWYwNDEz
Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2d0ay90ZXN0cy90ZXN0Y29weWFuZHBhc3RlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwy
NjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0j
aW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRlIDx3
ZWJraXQvd2Via2l0Lmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4K
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NvbnRleHRSZWYuaD4KLQotdHlwZWRlZiBzdHJ1
Y3QgewotICAgIGNoYXIqIHBhZ2U7Ci0gICAgY2hhciogZXhwZWN0ZWRDb250ZW50OwotfSBUZXN0
SW5mbzsKLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIEd0a1dpZGdldCogd2luZG93OwotICAgIFdl
YktpdFdlYlZpZXcqIHdlYlZpZXc7Ci0gICAgR01haW5Mb29wKiBsb29wOwotICAgIFRlc3RJbmZv
KiBpbmZvOwotfSBDb3B5QW5kUGFzdGVGaXh0dXJlOwotCi1UZXN0SW5mbyoKLXRlc3RfaW5mb19u
ZXcoY29uc3QgY2hhciogcGFnZSwgY29uc3QgY2hhciogZXhwZWN0ZWRDb250ZW50KQotewotICAg
IFRlc3RJbmZvKiBpbmZvOwotICAgIGluZm8gPSBnX3NsaWNlX25ldzAoVGVzdEluZm8pOwotICAg
IGluZm8tPnBhZ2UgPSBnX3N0cmR1cChwYWdlKTsKLSAgICBpZiAoZXhwZWN0ZWRDb250ZW50KQot
ICAgICAgICBpbmZvLT5leHBlY3RlZENvbnRlbnQgPSBnX3N0cmR1cChleHBlY3RlZENvbnRlbnQp
OwotICAgIHJldHVybiBpbmZvOwotfQotCi12b2lkCi10ZXN0X2luZm9fZGVzdHJveShUZXN0SW5m
byogaW5mbykKLXsKLSAgICBnX2ZyZWUoaW5mby0+cGFnZSk7Ci0gICAgZ19mcmVlKGluZm8tPmV4
cGVjdGVkQ29udGVudCk7Ci0gICAgZ19zbGljZV9mcmVlKFRlc3RJbmZvLCBpbmZvKTsKLX0KLQot
c3RhdGljIHZvaWQgY29weV9hbmRfcGFzdGVfZml4dHVyZV9zZXR1cChDb3B5QW5kUGFzdGVGaXh0
dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZml4dHVyZS0+bG9vcCA9
IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLQotICAgIGZpeHR1cmUtPndpbmRvdyA9IGd0
a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOwotICAgIGZpeHR1cmUtPndlYlZpZXcg
PSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLQotICAgIGd0a19jb250
YWluZXJfYWRkKEdUS19DT05UQUlORVIoZml4dHVyZS0+d2luZG93KSwgR1RLX1dJREdFVChmaXh0
dXJlLT53ZWJWaWV3KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNvcHlfYW5kX3Bhc3RlX2ZpeHR1cmVf
dGVhcmRvd24oQ29weUFuZFBhc3RlRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRh
KQotewotICAgIGd0a193aWRnZXRfZGVzdHJveShmaXh0dXJlLT53aW5kb3cpOwotICAgIGdfbWFp
bl9sb29wX3VucmVmKGZpeHR1cmUtPmxvb3ApOwotICAgIHRlc3RfaW5mb19kZXN0cm95KGZpeHR1
cmUtPmluZm8pOwotfQotCi1zdGF0aWMgdm9pZCBsb2FkX3N0YXR1c19jYihXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3LCBHUGFyYW1TcGVjKiBzcGVjLCBncG9pbnRlciBkYXRhKQotewotICAgIENvcHlB
bmRQYXN0ZUZpeHR1cmUqIGZpeHR1cmUgPSAoQ29weUFuZFBhc3RlRml4dHVyZSopZGF0YTsKLSAg
ICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0
dXMod2ViVmlldyk7Ci0gICAgaWYgKHN0YXR1cyAhPSBXRUJLSVRfTE9BRF9GSU5JU0hFRCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQgPSBndGtfY2xpcGJv
YXJkX2dldChHREtfU0VMRUNUSU9OX0NMSVBCT0FSRCk7Ci0gICAgZ3RrX2NsaXBib2FyZF9jbGVh
cihjbGlwYm9hcmQpOwotCi0gICAgd2Via2l0X3dlYl92aWV3X2NvcHlfY2xpcGJvYXJkKHdlYlZp
ZXcpOwotCi0gICAgZ2NoYXIqIHRleHQgPSBndGtfY2xpcGJvYXJkX3dhaXRfZm9yX3RleHQoY2xp
cGJvYXJkKTsKLSAgICBnX2Fzc2VydCh0ZXh0IHx8ICFmaXh0dXJlLT5pbmZvLT5leHBlY3RlZENv
bnRlbnQpOwotICAgIGdfYXNzZXJ0KCF0ZXh0IHx8ICFzdHJjbXAodGV4dCwgZml4dHVyZS0+aW5m
by0+ZXhwZWN0ZWRDb250ZW50KSk7Ci0gICAgZ19mcmVlKHRleHQpOwotCi0gICAgLy8gVmVyaWZ5
IHRoYXQgdGhlIG1hcmt1cCBzdGFydHMgd2l0aCB0aGUgcHJvcGVyIGNvbnRlbnQtdHlwZSBtZXRh
IHRhZyBwcmVmaXguCi0gICAgR3RrU2VsZWN0aW9uRGF0YSogc2VsZWN0aW9uRGF0YSA9IGd0a19j
bGlwYm9hcmRfd2FpdF9mb3JfY29udGVudHMoY2xpcGJvYXJkLCBnZGtfYXRvbV9pbnRlcm4oInRl
eHQvaHRtbCIsIEZBTFNFKSk7Ci0gICAgaWYgKHNlbGVjdGlvbkRhdGEpIHsKLSAgICAgICAgc3Rh
dGljIGNvbnN0IGNoYXIqIG1hcmt1cFByZWZpeCA9ICI8bWV0YSBodHRwLWVxdWl2PVwiY29udGVu
dC10eXBlXCIgY29udGVudD1cInRleHQvaHRtbDsgY2hhcnNldD11dGYtOFwiPiI7Ci0gICAgICAg
IGNoYXIqIG1hcmt1cCA9IGdfc3RybmR1cCgoY29uc3QgY2hhciopIGd0a19zZWxlY3Rpb25fZGF0
YV9nZXRfZGF0YShzZWxlY3Rpb25EYXRhKSwKLSAgICAgICAgICAgIGd0a19zZWxlY3Rpb25fZGF0
YV9nZXRfbGVuZ3RoKHNlbGVjdGlvbkRhdGEpKTsKLSAgICAgICAgZ19hc3NlcnQoc3RybGVuKG1h
cmt1cFByZWZpeCkgPD0gc3RybGVuKG1hcmt1cCkpOwotICAgICAgICBnX2Fzc2VydCghc3RybmNt
cChtYXJrdXBQcmVmaXgsIG1hcmt1cCwgc3RybGVuKG1hcmt1cFByZWZpeCkpKTsKLSAgICAgICAg
Z19mcmVlKG1hcmt1cCk7Ci0gICAgfQotCi0gICAgZ19hc3NlcnQoIWd0a19jbGlwYm9hcmRfd2Fp
dF9pc191cmlzX2F2YWlsYWJsZShjbGlwYm9hcmQpKTsKLSAgICBnX2Fzc2VydCghZ3RrX2NsaXBi
b2FyZF93YWl0X2lzX2ltYWdlX2F2YWlsYWJsZShjbGlwYm9hcmQpKTsKLQotICAgIGdfbWFpbl9s
b29wX3F1aXQoZml4dHVyZS0+bG9vcCk7Ci19Ci0KLWdib29sZWFuIG1hcF9ldmVudF9jYihHdGtX
aWRnZXQgKndpZGdldCwgR2RrRXZlbnQqIGV2ZW50LCBncG9pbnRlciBkYXRhKQotewotICAgIENv
cHlBbmRQYXN0ZUZpeHR1cmUqIGZpeHR1cmUgPSAoQ29weUFuZFBhc3RlRml4dHVyZSopZGF0YTsK
LSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoZml4dHVyZS0+d2ViVmlldywgZml4dHVy
ZS0+aW5mby0+cGFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRleHQvaHRt
bCIsICJ1dGYtOCIsICJmaWxlOi8vIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMg
dm9pZCB0ZXN0X2NvcHlfYW5kX3Bhc3RlKENvcHlBbmRQYXN0ZUZpeHR1cmUqIGZpeHR1cmUsIGdj
b25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBmaXh0dXJlLT5pbmZvID0gKFRlc3RJbmZvKilkYXRh
OwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2luZG93LCAibWFwLWV2ZW50IiwKLSAg
ICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sobWFwX2V2ZW50X2NiKSwgZml4dHVyZSk7Ci0K
LSAgICBndGtfd2lkZ2V0X3Nob3coZml4dHVyZS0+d2luZG93KTsKLSAgICBndGtfd2lkZ2V0X3No
b3coR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSk7Ci0gICAgZ3RrX3dpbmRvd19wcmVzZW50
KEdUS19XSU5ET1coZml4dHVyZS0+d2luZG93KSk7Ci0gICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3Vz
KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldykpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdChm
aXh0dXJlLT53ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsCi0gICAgICAgICAgICAgICAg
ICAgICBHX0NBTExCQUNLKGxvYWRfc3RhdHVzX2NiKSwgZml4dHVyZSk7Ci0KLSAgICBnX21haW5f
bG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7Ci19Ci0KLXN0YXRpYyBDb3B5QW5kUGFzdGVGaXh0dXJl
KiBjdXJyZW50Rml4dHVyZTsKLXN0YXRpYyBKU1ZhbHVlUmVmIHJ1blBhc3RlVGVzdENhbGxiYWNr
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYg
dGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1l
bnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBndGtfd2lkZ2V0X2dyYWJfZm9j
dXMoR1RLX1dJREdFVChjdXJyZW50Rml4dHVyZS0+d2ViVmlldykpOwotCi0gICAgLy8gU2ltdWxh
dGUgYSBwYXN0ZSBrZXlib2FyZCBzZXF1ZW5jZS4KLSAgICBHZGtFdmVudCogZXZlbnQgPSBnZGtf
ZXZlbnRfbmV3KEdES19LRVlfUFJFU1MpOwotICAgIGV2ZW50LT5rZXkua2V5dmFsID0gZ2RrX3Vu
aWNvZGVfdG9fa2V5dmFsKCd2Jyk7Ci0gICAgZXZlbnQtPmtleS5zdGF0ZSA9IEdES19DT05UUk9M
X01BU0s7Ci0gICAgZXZlbnQtPmtleS53aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3coR1RL
X1dJREdFVChjdXJyZW50Rml4dHVyZS0+d2ViVmlldykpOwotICAgIGdfb2JqZWN0X3JlZihldmVu
dC0+a2V5LndpbmRvdyk7Ci0jaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCi0gICAgR2RrRGV2aWNl
TWFuYWdlciogbWFuYWdlciA9ICBnZGtfZGlzcGxheV9nZXRfZGV2aWNlX21hbmFnZXIoZ2RrX3dp
bmRvd19nZXRfZGlzcGxheShldmVudC0+a2V5LndpbmRvdykpOwotICAgIGdka19ldmVudF9zZXRf
ZGV2aWNlKGV2ZW50LCBnZGtfZGV2aWNlX21hbmFnZXJfZ2V0X2NsaWVudF9wb2ludGVyKG1hbmFn
ZXIpKTsKLSNlbmRpZgotCi0gICAgR2RrS2V5bWFwS2V5KiBrZXlzOwotICAgIGdpbnQgbl9rZXlz
OwotICAgIGlmIChnZGtfa2V5bWFwX2dldF9lbnRyaWVzX2Zvcl9rZXl2YWwoZ2RrX2tleW1hcF9n
ZXRfZGVmYXVsdCgpLCBldmVudC0+a2V5LmtleXZhbCwgJmtleXMsICZuX2tleXMpKSB7Ci0gICAg
ICAgIGV2ZW50LT5rZXkuaGFyZHdhcmVfa2V5Y29kZSA9IGtleXNbMF0ua2V5Y29kZTsKLSAgICAg
ICAgZ19mcmVlKGtleXMpOwotICAgIH0KLQotICAgIGd0a19tYWluX2RvX2V2ZW50KGV2ZW50KTsK
LSAgICBldmVudC0+a2V5LnR5cGUgPSBHREtfS0VZX1JFTEVBU0U7Ci0gICAgZ3RrX21haW5fZG9f
ZXZlbnQoZXZlbnQpOwotICAgIGdka19ldmVudF9mcmVlKGV2ZW50KTsKLQotICAgIEpTU3RyaW5n
UmVmIHNjcmlwdFN0cmluZyA9IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJkb2N1bWVu
dC5ib2R5LmlubmVySFRNTDsiKTsKLSAgICBKU1ZhbHVlUmVmIHZhbHVlID0gSlNFdmFsdWF0ZVNj
cmlwdChjb250ZXh0LCBzY3JpcHRTdHJpbmcsIDAsIDAsIDAsIDApOwotICAgIEpTU3RyaW5nUmVs
ZWFzZShzY3JpcHRTdHJpbmcpOwotCi0gICAgZ19hc3NlcnQoSlNWYWx1ZUlzU3RyaW5nKGNvbnRl
eHQsIHZhbHVlKSk7Ci0gICAgSlNTdHJpbmdSZWYgYWN0dWFsID0gSlNWYWx1ZVRvU3RyaW5nQ29w
eShjb250ZXh0LCB2YWx1ZSwgZXhjZXB0aW9uKTsKLSAgICBnX2Fzc2VydCghZXhjZXB0aW9uIHx8
ICEqZXhjZXB0aW9uKTsKLSAgICBnX2Fzc2VydChjdXJyZW50Rml4dHVyZS0+aW5mby0+ZXhwZWN0
ZWRDb250ZW50KTsKLSAgICBKU1N0cmluZ1JlZiBleHBlY3RlZCA9IEpTU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKGN1cnJlbnRGaXh0dXJlLT5pbmZvLT5leHBlY3RlZENvbnRlbnQpOwotICAg
IGdfYXNzZXJ0KEpTU3RyaW5nSXNFcXVhbChleHBlY3RlZCwgYWN0dWFsKSk7Ci0KLSAgICBKU1N0
cmluZ1JlbGVhc2UoZXhwZWN0ZWQpOwotICAgIEpTU3RyaW5nUmVsZWFzZShhY3R1YWwpOwotICAg
IGdfbWFpbl9sb29wX3F1aXQoY3VycmVudEZpeHR1cmUtPmxvb3ApOwotICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIHZvaWQgd2luZG93X29iamVj
dF9jbGVhcmVkX2NhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBXZWJLaXRXZWJGcmFt
ZSogd2ViX2ZyYW1lLCBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgd2lu
ZG93X29iamVjdCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBKU1N0cmluZ1JlZiBuYW1lID0gSlNT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInJ1blRlc3QiKTsKLSAgICBKU09iamVjdFJlZiB0
ZXN0Q29tcGxldGUgPSBKU09iamVjdE1ha2VGdW5jdGlvbldpdGhDYWxsYmFjayhjb250ZXh0LCBu
YW1lLCBydW5QYXN0ZVRlc3RDYWxsYmFjayk7Ci0gICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250
ZXh0LCB3aW5kb3dfb2JqZWN0LCBuYW1lLCB0ZXN0Q29tcGxldGUsIGtKU1Byb3BlcnR5QXR0cmli
dXRlTm9uZSwgMCk7Ci0gICAgSlNTdHJpbmdSZWxlYXNlKG5hbWUpOwotfQotCi1zdGF0aWMgdm9p
ZCBwYXN0aW5nX3Rlc3RfZ2V0X2RhdGFfY2FsbGJhY2soR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQs
IEd0a1NlbGVjdGlvbkRhdGEqIHNlbGVjdGlvbl9kYXRhLCBndWludCBpbmZvLCBncG9pbnRlciBk
YXRhKQotewotICAgIGd0a19zZWxlY3Rpb25fZGF0YV9zZXQoc2VsZWN0aW9uX2RhdGEsIGdka19h
dG9tX2ludGVybigidGV4dC9odG1sIiwgRkFMU0UpLCA4LCAoY29uc3QgZ3VjaGFyKikgZGF0YSwg
c3RybGVuKChjaGFyKilkYXRhKSArIDEpOwotfQotCi1zdGF0aWMgdm9pZCBwYXN0aW5nX3Rlc3Rf
Y2xlYXJfZGF0YV9jYWxsYmFjayhHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCwgZ3BvaW50ZXIgZGF0
YSkKLXsKLSAgICBnX2ZyZWUoZGF0YSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RfcGFzdGluZ19t
YXJrdXAoQ29weUFuZFBhc3RlRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQot
ewotICAgIGZpeHR1cmUtPmluZm8gPSAoVGVzdEluZm8qKWRhdGE7Ci0gICAgY3VycmVudEZpeHR1
cmUgPSBmaXh0dXJlOwotCi0gICAgR3RrVGFyZ2V0TGlzdCogdGFyZ2V0TGlzdCA9IGd0a190YXJn
ZXRfbGlzdF9uZXcoMCwgMCk7Ci0gICAgZ3RrX3RhcmdldF9saXN0X2FkZCh0YXJnZXRMaXN0LCBn
ZGtfYXRvbV9pbnRlcm4oInRleHQvaHRtbCIsIEZBTFNFKSwgMCwgMCk7Ci0KLSAgICBpbnQgbnVt
YmVyT2ZUYXJnZXRzID0gMTsKLSAgICBHdGtUYXJnZXRFbnRyeSogdGFyZ2V0VGFibGUgPSBndGtf
dGFyZ2V0X3RhYmxlX25ld19mcm9tX2xpc3QodGFyZ2V0TGlzdCwgJm51bWJlck9mVGFyZ2V0cyk7
Ci0gICAgZ3RrX2NsaXBib2FyZF9zZXRfd2l0aF9kYXRhKGd0a19jbGlwYm9hcmRfZ2V0KEdES19T
RUxFQ1RJT05fQ0xJUEJPQVJEKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFy
Z2V0VGFibGUsIG51bWJlck9mVGFyZ2V0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFzdGluZ190ZXN0X2dldF9kYXRhX2NhbGxiYWNrLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXN0aW5nX3Rlc3RfY2xlYXJfZGF0YV9jYWxsYmFjaywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ19zdHJkdXAoZml4dHVyZS0+aW5mby0+ZXhwZWN0ZWRDb250
ZW50KSk7Ci0gICAgZ3RrX3RhcmdldF9saXN0X3VucmVmKHRhcmdldExpc3QpOwotICAgIGd0a190
YXJnZXRfdGFibGVfZnJlZSh0YXJnZXRUYWJsZSwgbnVtYmVyT2ZUYXJnZXRzKTsKLQotICAgIGdf
c2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2luZG93LCAibWFwLWV2ZW50IiwKLSAgICAgICAgICAg
ICAgICAgICAgIEdfQ0FMTEJBQ0sobWFwX2V2ZW50X2NiKSwgZml4dHVyZSk7Ci0gICAgZ19zaWdu
YWxfY29ubmVjdChmaXh0dXJlLT53ZWJWaWV3LCAid2luZG93LW9iamVjdC1jbGVhcmVkIiwKLSAg
ICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sod2luZG93X29iamVjdF9jbGVhcmVkX2NhbGxi
YWNrKSwgZml4dHVyZSk7Ci0KLSAgICBndGtfd2lkZ2V0X3Nob3coZml4dHVyZS0+d2luZG93KTsK
LSAgICBndGtfd2lkZ2V0X3Nob3coR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSk7Ci0gICAg
Z3RrX3dpbmRvd19wcmVzZW50KEdUS19XSU5ET1coZml4dHVyZS0+d2luZG93KSk7Ci0KLSAgICBn
X21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7Ci19Ci0KLQotaW50IG1haW4oaW50IGFyZ2Ms
IGNoYXIqKiBhcmd2KQotewotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsK
LQotICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0gICAg
Y29uc3QgY2hhciogc2VsZWN0ZWRfc3Bhbl9odG1sID0gIjxodG1sPjxib2R5PiIKLSAgICAgICAg
IjxzcGFuIGlkPVwibWFpbnNwYW5cIj5BbGwgd29yayBhbmQgbm8gcGxheSA8c3Bhbj5tYWtlIEph
Y2sgYSBkdWxsPC9zcGFuPiBib3kuPC9zcGFuPiIKLSAgICAgICAgIjxzY3JpcHQ+ZG9jdW1lbnQu
Z2V0U2VsZWN0aW9uKCkuY29sbGFwc2UoKTtcbiIKLSAgICAgICAgImRvY3VtZW50LmdldFNlbGVj
dGlvbigpLnNlbGVjdEFsbENoaWxkcmVuKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluc3Bh
bicpKTtcbiIKLSAgICAgICAgIjwvc2NyaXB0PjwvYm9keT48L2h0bWw+IjsKLSAgICBjb25zdCBj
aGFyKiBub19zZWxlY3Rpb25faHRtbCA9ICI8aHRtbD48Ym9keT4iCi0gICAgICAgICI8c3BhbiBp
ZD1cIm1haW5zcGFuXCI+QWxsIHdvcmsgYW5kIG5vIHBsYXkgPHNwYW4+bWFrZSBKYWNrIGEgZHVs
bDwvc3Bhbj4gYm95PC9zcGFuPiIKLSAgICAgICAgIjxzY3JpcHQ+ZG9jdW1lbnQuZ2V0U2VsZWN0
aW9uKCkuY29sbGFwc2UoKTtcbiIKLSAgICAgICAgIjwvc2NyaXB0PjwvYm9keT48L2h0bWw+IjsK
LQotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvY29weWFuZHBhc3RlL3NlbGVjdGlvbiIsIENvcHlB
bmRQYXN0ZUZpeHR1cmUsCi0gICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KHNlbGVjdGVkX3Nw
YW5faHRtbCwgIkFsbCB3b3JrIGFuZCBubyBwbGF5IG1ha2UgSmFjayBhIGR1bGwgYm95LiIpLAot
ICAgICAgICAgICAgICAgY29weV9hbmRfcGFzdGVfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAg
ICAgIHRlc3RfY29weV9hbmRfcGFzdGUsCi0gICAgICAgICAgICAgICBjb3B5X2FuZF9wYXN0ZV9m
aXh0dXJlX3RlYXJkb3duKTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2NvcHlhbmRwYXN0ZS9u
by1zZWxlY3Rpb24iLCBDb3B5QW5kUGFzdGVGaXh0dXJlLAotICAgICAgICAgICAgICAgdGVzdF9p
bmZvX25ldyhub19zZWxlY3Rpb25faHRtbCwgMCksCi0gICAgICAgICAgICAgICBjb3B5X2FuZF9w
YXN0ZV9maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF9jb3B5X2FuZF9wYXN0ZSwK
LSAgICAgICAgICAgICAgIGNvcHlfYW5kX3Bhc3RlX2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAg
Y29uc3QgY2hhciogcGFzdGVfdGVzdF9odG1sID0gIjxodG1sPiIKLSAgICAgICAgIjxib2R5IG9u
TG9hZD1cImRvY3VtZW50LmJvZHkuZm9jdXMoKTsgcnVuVGVzdCgpO1wiIGNvbnRlbnRFZGl0YWJs
ZT1cInRydWVcIj4iCi0gICAgICAgICI8L2JvZHk+PC9odG1sPiI7Ci0gICAgZ190ZXN0X2FkZCgi
L3dlYmtpdC9jb3B5YW5kcGFzdGUvcGFzdGUtbWFya3VwIiwgQ29weUFuZFBhc3RlRml4dHVyZSwK
LSAgICAgICAgICAgICAgIHRlc3RfaW5mb19uZXcocGFzdGVfdGVzdF9odG1sLCAiYm9iYnkiKSwK
LSAgICAgICAgICAgICAgIGNvcHlfYW5kX3Bhc3RlX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAg
ICAgICB0ZXN0X3Bhc3RpbmdfbWFya3VwLAotICAgICAgICAgICAgICAgY29weV9hbmRfcGFzdGVf
Zml4dHVyZV90ZWFyZG93bik7Ci0KLSAgICByZXR1cm4gZ190ZXN0X3J1bigpOwotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvbWRvY3VtZW50LmMgYi9Tb3VyY2Uv
V2ViS2l0L2d0ay90ZXN0cy90ZXN0ZG9tZG9jdW1lbnQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNGM5OTdkZGFkM2EwNDVjNzYwYjE5YWI2ZGJhYmZjMDIwZTZjNWZhMS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0
ay90ZXN0cy90ZXN0ZG9tZG9jdW1lbnQuYworKysgL2Rldi9udWxsCkBAIC0xLDQyOCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJ0ZXN0X3V0aWxzLmgiCi0KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVk
ZSA8Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d2Via2l0
L3dlYmtpdC5oPgotCi0jZGVmaW5lIEhUTUxfRE9DVU1FTlRfVElUTEUgIjxodG1sPjxoZWFkPjx0
aXRsZT5UaGlzIGlzIHRoZSB0aXRsZTwvdGl0bGU+PC9oZWFkPjxib2R5PjwvYm9keT48L2h0bWw+
IgotI2RlZmluZSBIVE1MX0RPQ1VNRU5UX0VMRU1FTlRTICI8aHRtbD48Ym9keT48dWw+PGxpPjE8
L2xpPjxsaT4yPC9saT48bGk+MzwvbGk+PC91bD48L2JvZHk+PC9odG1sPiIKLSNkZWZpbmUgSFRN
TF9ET0NVTUVOVF9FTEVNRU5UU19DTEFTUyAiPGh0bWw+PGJvZHk+PGRpdiBjbGFzcz1cInRlc3Rc
Ij48L2Rpdj48ZGl2IGNsYXNzPVwic3RyYW5nZVwiPjwvZGl2PjxkaXYgY2xhc3M9XCJ0ZXN0XCI+
PC9kaXY+PC9ib2R5PjwvaHRtbD4iCi0jZGVmaW5lIEhUTUxfRE9DVU1FTlRfRUxFTUVOVFNfSUQg
IjxodG1sPjxib2R5PjxkaXYgaWQ9XCJ0ZXN0b2tcIj48L2Rpdj48ZGl2IGlkPVwidGVzdGJhZFwi
PmZpcnN0PC9kaXY+PGRpdiBpZD1cInRlc3RiYWRcIj5zZWNvbmQ8L2Rpdj48L2JvZHk+PC9odG1s
PiIKLSNkZWZpbmUgSFRNTF9ET0NVTUVOVF9MSU5LUyAiPGh0bWw+PGhlYWQ+PHRpdGxlPlRpdGxl
PC90aXRsZT48L2hlYWQ+PGJvZHk+PGEgaHJlZj1cImFib3V0OmJsYW5rXCI+Ymxhbms8L2E+PGEg
aHJlZj1cImh0dHA6Ly93d3cuZ29vZ2xlLmNvbVwiPmdvb2dsZTwvYT48YSBocmVmPVwiaHR0cDov
L3d3dy53ZWJraXQub3JnXCI+d2Via2l0PC9hPjwvYm9keT48L2h0bWw+IgotI2RlZmluZSBIVE1M
X0RPQ1VNRU5UX0lGUkFNRSAiPGh0bWw+PGhlYWQ+PHRpdGxlPklGcmFtZTwvdGl0bGU+PC9oZWFk
Pjxib2R5PjxpZnJhbWUgaWQ9J2lmcmFtZSc+PC9pZnJhbWU+PGRpdiBpZD0ndGVzdCc+PC9kaXY+
PC9ib2R5PjwvaHRtbD4iCi0jZGVmaW5lIEhUTUxfRE9DVU1FTlRfVEFCTEUgIjxodG1sPjxib2R5
Pjx0YWJsZSBpZD1cInRhYmxlXCI+PC90YWJsZT48L2JvZHk+PC9odG1sPiIKLSNkZWZpbmUgSFRN
TF9ET0NVTUVOVF9FVkFMVUFURSAiPGh0bWw+PGhlYWQ+PHRpdGxlPjwvdGl0bGU+PC9oZWFkPjxi
b2R5PjxkaXY+Rmlyc3QgZGl2PC9kaXY+PGRpdj5TZWNvbmQgZGl2PC9kaXY+PC9ib2R5PjwvaHRt
bD4iCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBHdGtXaWRnZXQqIHdlYlZpZXc7Ci0gICAgR01h
aW5Mb29wKiBsb29wOwotfSBEb21Eb2N1bWVudEZpeHR1cmU7Ci0KLXN0YXRpYyBnYm9vbGVhbiBm
aW5pc2hfbG9hZGluZyhEb21Eb2N1bWVudEZpeHR1cmUqIGZpeHR1cmUpCi17Ci0gICAgaWYgKGdf
bWFpbl9sb29wX2lzX3J1bm5pbmcoZml4dHVyZS0+bG9vcCkpCi0gICAgICAgIGdfbWFpbl9sb29w
X3F1aXQoZml4dHVyZS0+bG9vcCk7Ci0KLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2
b2lkIGRvbV9kb2N1bWVudF9maXh0dXJlX3NldHVwKERvbURvY3VtZW50Rml4dHVyZSogZml4dHVy
ZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGZpeHR1cmUtPmxvb3AgPSBnX21haW5fbG9v
cF9uZXcoTlVMTCwgVFJVRSk7Ci0gICAgZml4dHVyZS0+d2ViVmlldyA9IHdlYmtpdF93ZWJfdmll
d19uZXcoKTsKLSAgICBnX29iamVjdF9yZWZfc2luayhmaXh0dXJlLT53ZWJWaWV3KTsKLQotICAg
IGlmIChkYXRhICE9IE5VTEwpCi0gICAgICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhX
RUJLSVRfV0VCX1ZJRVcgKGZpeHR1cmUtPndlYlZpZXcpLCAoY29uc3QgY2hhciopIGRhdGEsIE5V
TEwsIE5VTEwsIE5VTEwpOwotCi0gICAgZ19pZGxlX2FkZCgoR1NvdXJjZUZ1bmMpZmluaXNoX2xv
YWRpbmcsIGZpeHR1cmUpOwotICAgIGdfbWFpbl9sb29wX3J1bihmaXh0dXJlLT5sb29wKTsKLX0K
LQotc3RhdGljIHZvaWQgZG9tX2RvY3VtZW50X2ZpeHR1cmVfdGVhcmRvd24oRG9tRG9jdW1lbnRG
aXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgaWYgKGZpeHR1cmUt
PndlYlZpZXcpCi0gICAgICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPndlYlZpZXcpOwotICAg
IGdfbWFpbl9sb29wX3VucmVmKGZpeHR1cmUtPmxvb3ApOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0
X2RvbV9kb2N1bWVudF90aXRsZShEb21Eb2N1bWVudEZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBv
aW50ZXIgZGF0YSkKLXsKLSAgICBnX2Fzc2VydChmaXh0dXJlKTsKLSAgICBXZWJLaXRXZWJWaWV3
KiB2aWV3ID0gKFdlYktpdFdlYlZpZXcqKWZpeHR1cmUtPndlYlZpZXc7Ci0gICAgZ19hc3NlcnQo
dmlldyk7Ci0gICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50ID0gd2Via2l0X3dlYl92aWV3
X2dldF9kb21fZG9jdW1lbnQodmlldyk7Ci0gICAgZ19hc3NlcnQoZG9jdW1lbnQpOwotICAgIGdj
aGFyKiB0aXRsZSA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3RpdGxlKGRvY3VtZW50KTsKLSAg
ICBnX2Fzc2VydCh0aXRsZSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRpdGxlLCA9PSwgIlRoaXMg
aXMgdGhlIHRpdGxlIik7Ci0gICAgZ19mcmVlKHRpdGxlKTsKLSAgICB3ZWJraXRfZG9tX2RvY3Vt
ZW50X3NldF90aXRsZShkb2N1bWVudCwgIlRoaXMgaXMgdGhlIHNlY29uZCB0aXRsZSIpOwotICAg
IHRpdGxlID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfdGl0bGUoZG9jdW1lbnQpOwotICAgIGdf
YXNzZXJ0KHRpdGxlKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGl0bGUsID09LCAiVGhpcyBpcyB0
aGUgc2Vjb25kIHRpdGxlIik7Ci0gICAgZ19mcmVlKHRpdGxlKTsKLX0KLQotc3RhdGljIHZvaWQg
dGVzdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRzX2J5X3RhZ19uYW1lKERvbURvY3VtZW50Rml4
dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGdfYXNzZXJ0KGZpeHR1
cmUpOwotICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSAoV2ViS2l0V2ViVmlldyopZml4dHVyZS0+
d2ViVmlldzsKLSAgICBnX2Fzc2VydCh2aWV3KTsKLSAgICBXZWJLaXRET01Eb2N1bWVudCogZG9j
dW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKLSAgICBnX2Fz
c2VydChkb2N1bWVudCk7Ci0gICAgV2ViS2l0RE9NTm9kZUxpc3QqIGxpc3QgPSB3ZWJraXRfZG9t
X2RvY3VtZW50X2dldF9lbGVtZW50c19ieV90YWdfbmFtZShkb2N1bWVudCwgImxpIik7Ci0gICAg
Z19hc3NlcnQobGlzdCk7Ci0gICAgZ3Vsb25nIGxlbmd0aCA9IHdlYmtpdF9kb21fbm9kZV9saXN0
X2dldF9sZW5ndGgobGlzdCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGxlbmd0aCwgPT0sIDMpOwot
Ci0gICAgZ3VpbnQgaTsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAg
ICAgICBXZWJLaXRET01Ob2RlKiBpdGVtID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0
LCBpKTsKLSAgICAgICAgZ19hc3NlcnQoaXRlbSk7Ci0gICAgICAgIFdlYktpdERPTUVsZW1lbnQq
IGVsZW1lbnQgPSAoV2ViS2l0RE9NRWxlbWVudCopaXRlbTsKLSAgICAgICAgZ19hc3NlcnQoZWxl
bWVudCk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3Rh
Z19uYW1lKGVsZW1lbnQpLCA9PSwgIkxJIik7Ci0gICAgICAgIFdlYktpdERPTUhUTUxFbGVtZW50
KiBodG1sRWxlbWVudCA9IChXZWJLaXRET01IVE1MRWxlbWVudCopZWxlbWVudDsKLSAgICAgICAg
Y2hhciogbiA9IGdfc3RyZHVwX3ByaW50ZigiJWQiLCBpKzEpOwotICAgICAgICBnX2Fzc2VydF9j
bXBzdHIod2Via2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0X2lubmVyX3RleHQoaHRtbEVsZW1lbnQp
LCA9PSwgbik7Ci0gICAgICAgIGdfZnJlZShuKTsKLSAgICB9Ci0KLSAgICBnX29iamVjdF91bnJl
ZihsaXN0KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRz
X2J5X2NsYXNzX25hbWUoRG9tRG9jdW1lbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVy
IGRhdGEpCi17Ci0gICAgZ19hc3NlcnQoZml4dHVyZSk7Ci0gICAgV2ViS2l0V2ViVmlldyogdmll
dyA9IChXZWJLaXRXZWJWaWV3KilmaXh0dXJlLT53ZWJWaWV3OwotICAgIGdfYXNzZXJ0KHZpZXcp
OwotICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRf
ZG9tX2RvY3VtZW50KHZpZXcpOwotICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsKLSAgICBXZWJLaXRE
T01Ob2RlTGlzdCogbGlzdCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRzX2J5X2Ns
YXNzX25hbWUoZG9jdW1lbnQsICJ0ZXN0Iik7Ci0gICAgZ19hc3NlcnQobGlzdCk7Ci0gICAgZ3Vs
b25nIGxlbmd0aCA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2dldF9sZW5ndGgobGlzdCk7Ci0gICAg
Z19hc3NlcnRfY21waW50KGxlbmd0aCwgPT0sIDIpOwotCi0gICAgZ3VpbnQgaTsKLQotICAgIGZv
ciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBXZWJLaXRET01Ob2RlKiBpdGVt
ID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0LCBpKTsKLSAgICAgICAgZ19hc3NlcnQo
aXRlbSk7Ci0gICAgICAgIFdlYktpdERPTUVsZW1lbnQqIGVsZW1lbnQgPSAoV2ViS2l0RE9NRWxl
bWVudCopaXRlbTsKLSAgICAgICAgZ19hc3NlcnQoZWxlbWVudCk7Ci0gICAgICAgIGdfYXNzZXJ0
X2NtcHN0cih3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3RhZ19uYW1lKGVsZW1lbnQpLCA9PSwgIkRJ
ViIpOwotICAgIH0KLQotICAgIGdfb2JqZWN0X3VucmVmKGxpc3QpOwotfQotCi1zdGF0aWMgdm9p
ZCB0ZXN0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudF9ieV9pZChEb21Eb2N1bWVudEZpeHR1cmUq
IGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBnX2Fzc2VydChmaXh0dXJlKTsK
LSAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gKFdlYktpdFdlYlZpZXcqKWZpeHR1cmUtPndlYlZp
ZXc7Ci0gICAgZ19hc3NlcnQodmlldyk7Ci0gICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50
ID0gd2Via2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQodmlldyk7Ci0gICAgZ19hc3NlcnQo
ZG9jdW1lbnQpOwotICAgIFdlYktpdERPTUVsZW1lbnQqIGVsZW1lbnQgPSB3ZWJraXRfZG9tX2Rv
Y3VtZW50X2dldF9lbGVtZW50X2J5X2lkKGRvY3VtZW50LCAidGVzdG9rIik7Ci0gICAgZ19hc3Nl
cnQoZWxlbWVudCk7Ci0gICAgZWxlbWVudCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1l
bnRfYnlfaWQoZG9jdW1lbnQsICJ0aGlzLWlkLWRvZXMtbm90LWV4aXN0Iik7Ci0gICAgZ19hc3Nl
cnQoZWxlbWVudCA9PSAwKTsKLSAgICAvKiBUaGUgRE9NIHNwZWMgc2F5cyB0aGUgcmV0dXJuIHZh
bHVlIGlzIHVuZGVmaW5lZCB3aGVuIHRoZXJlJ3MKLSAgICAgKiBtb3JlIHRoYW4gb25lIGVsZW1l
bnQgd2l0aCB0aGUgc2FtZSBpZDsgaW4gb3VyIGNhc2UgdGhlIGZpcnN0Ci0gICAgICogb25lIHdp
bGwgYmUgcmV0dXJuZWQgKi8KLSAgICBlbGVtZW50ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRf
ZWxlbWVudF9ieV9pZChkb2N1bWVudCwgInRlc3RiYWQiKTsKLSAgICBnX2Fzc2VydChlbGVtZW50
KTsKLSAgICBXZWJLaXRET01IVE1MRWxlbWVudCogaHRtbEVsZW1lbnQgPSAoV2ViS2l0RE9NSFRN
TEVsZW1lbnQqKWVsZW1lbnQ7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9kb21faHRtbF9l
bGVtZW50X2dldF9pbm5lcl90ZXh0KGh0bWxFbGVtZW50KSwgPT0sICJmaXJzdCIpOwotfQotCi1z
dGF0aWMgdm9pZCB0ZXN0X2RvbV9kb2N1bWVudF9nZXRfbGlua3MoRG9tRG9jdW1lbnRGaXh0dXJl
KiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19hc3NlcnQoZml4dHVyZSk7
Ci0gICAgV2ViS2l0V2ViVmlldyogdmlldyA9IChXZWJLaXRXZWJWaWV3KilmaXh0dXJlLT53ZWJW
aWV3OwotICAgIGdfYXNzZXJ0KHZpZXcpOwotICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1bWVu
dCA9IHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50KHZpZXcpOwotICAgIGdfYXNzZXJ0
KGRvY3VtZW50KTsKLSAgICBXZWJLaXRET01IVE1MQ29sbGVjdGlvbiAqY29sbGVjdGlvbiA9IHdl
YmtpdF9kb21fZG9jdW1lbnRfZ2V0X2xpbmtzKGRvY3VtZW50KTsKLSAgICBnX2Fzc2VydChjb2xs
ZWN0aW9uKTsKLSAgICBndWxvbmcgbGVuZ3RoID0gd2Via2l0X2RvbV9odG1sX2NvbGxlY3Rpb25f
Z2V0X2xlbmd0aChjb2xsZWN0aW9uKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQobGVuZ3RoLCA9PSwg
Myk7Ci0KLSAgICBndWludCBpOwotCi0gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7
Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBuYW1lc1tdID0geyAiYmxhbmsiLCAiZ29vZ2xl
IiwgIndlYmtpdCIgfTsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHVyaXNbXSA9IHsgImFi
b3V0OmJsYW5rIiwgImh0dHA6Ly93d3cuZ29vZ2xlLmNvbS8iLCAiaHR0cDovL3d3dy53ZWJraXQu
b3JnLyIgfTsKLSAgICAgICAgV2ViS2l0RE9NTm9kZSAqbm9kZSA9IHdlYmtpdF9kb21faHRtbF9j
b2xsZWN0aW9uX2l0ZW0oY29sbGVjdGlvbiwgaSk7Ci0gICAgICAgIGdfYXNzZXJ0KG5vZGUpOwot
ICAgICAgICBXZWJLaXRET01FbGVtZW50KiBlbGVtZW50ID0gKFdlYktpdERPTUVsZW1lbnQqKW5v
ZGU7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3RhZ19u
YW1lKGVsZW1lbnQpLCA9PSwgIkEiKTsKLSAgICAgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQgKmh0
bWxFbGVtZW50ID0gKFdlYktpdERPTUhUTUxFbGVtZW50KillbGVtZW50OwotICAgICAgICBnX2Fz
c2VydF9jbXBzdHIod2Via2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0X2lubmVyX3RleHQoaHRtbEVs
ZW1lbnQpLCA9PSwgbmFtZXNbaV0pOwotICAgICAgICBXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVu
dCAqYW5jaG9yID0gKFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KillbGVtZW50OwotICAgICAg
ICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9ocmVm
KGFuY2hvciksID09LCB1cmlzW2ldKTsKLSAgICB9Ci0gICAgZ19vYmplY3RfdW5yZWYoY29sbGVj
dGlvbik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RfZG9tX2RvY3VtZW50X2luc2VydF9yb3coRG9t
RG9jdW1lbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19h
c3NlcnQoZml4dHVyZSk7Ci0gICAgV2ViS2l0V2ViVmlldyogdmlldyA9IChXZWJLaXRXZWJWaWV3
KilmaXh0dXJlLT53ZWJWaWV3OwotICAgIGdfYXNzZXJ0KHZpZXcpOwotICAgIFdlYktpdERPTURv
Y3VtZW50KiBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50KHZpZXcp
OwotICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfRE9DVU1FTlQoZG9jdW1lbnQpKTsKLSAgICBX
ZWJLaXRET01FbGVtZW50KiB0YWJsZSA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRf
YnlfaWQoZG9jdW1lbnQsICJ0YWJsZSIpOwotICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRN
TF9FTEVNRU5UKHRhYmxlKSk7Ci0gICAgV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24qIHJvd3MgPSB3
ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRfcm93cyhXRUJLSVRfRE9NX0hUTUxfVEFC
TEVfRUxFTUVOVCh0YWJsZSkpOwotICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9DT0xM
RUNUSU9OKHJvd3MpKTsKLQotICAgIC8vIFRhYmxlIGlzIGluaXRpYWxseSBlbXB0eS4KLSAgICBn
X2Fzc2VydF9jbXBpbnQod2Via2l0X2RvbV9odG1sX2NvbGxlY3Rpb25fZ2V0X2xlbmd0aChyb3dz
KSwgPT0sIDApOwotICAgIFdlYktpdERPTUhUTUxFbGVtZW50KiByb3cgPSB3ZWJraXRfZG9tX2h0
bWxfdGFibGVfZWxlbWVudF9pbnNlcnRfcm93KFdFQktJVF9ET01fSFRNTF9UQUJMRV9FTEVNRU5U
KHRhYmxlKSwgLTEsIE5VTEwpOwotICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9UQUJM
RV9ST1dfRUxFTUVOVChyb3cpKTsKLSAgICByb3dzID0gd2Via2l0X2RvbV9odG1sX3RhYmxlX2Vs
ZW1lbnRfZ2V0X3Jvd3MoV0VCS0lUX0RPTV9IVE1MX1RBQkxFX0VMRU1FTlQodGFibGUpKTsKLSAg
ICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfQ09MTEVDVElPTihyb3dzKSk7Ci0gICAgZ19h
c3NlcnRfY21waW50KHdlYmtpdF9kb21faHRtbF9jb2xsZWN0aW9uX2dldF9sZW5ndGgocm93cyks
ID09LCAxKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF9kb21fZG9jdW1lbnRfZXZhbHVhdGUoRG9t
RG9jdW1lbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19h
c3NlcnQoZml4dHVyZSk7Ci0gICAgV2ViS2l0V2ViVmlldyogdmlldyA9IChXZWJLaXRXZWJWaWV3
KilmaXh0dXJlLT53ZWJWaWV3OwotICAgIGdfYXNzZXJ0KHZpZXcpOwotICAgIFdlYktpdERPTURv
Y3VtZW50KiBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50KHZpZXcp
OwotICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfRE9DVU1FTlQoZG9jdW1lbnQpKTsKLSAgICBX
ZWJLaXRET01Ob2RlTGlzdCogbGlzdCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRz
X2J5X3RhZ19uYW1lKGRvY3VtZW50LCAiaHRtbCIpOwotICAgIGdfYXNzZXJ0KGxpc3QpOwotICAg
IGd1bG9uZyBsZW5ndGggPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QpOwot
ICAgIGdfYXNzZXJ0X2NtcGludChsZW5ndGgsID09LCAxKTsKLSAgICBXZWJLaXRET01Ob2RlKiBo
dG1sID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0LCAwKTsKLSAgICBnX2Fzc2VydChX
RUJLSVRfRE9NX0lTX05PREUoaHRtbCkpOwotCi0gICAgV2ViS2l0RE9NWFBhdGhSZXN1bHQqIHJl
c3VsdCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZXZhbHVhdGUoZG9jdW1lbnQsICIvL2RpdiIsIGh0
bWwsIE5VTEwsIDAsIE5VTEwsIE5VTEwpOwotICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfWFBB
VEhfUkVTVUxUKHJlc3VsdCkpOwotCi0gICAgaW50IGkgPSAwOwotICAgIFdlYktpdERPTU5vZGUq
IG5vZGU7Ci0gICAgd2hpbGUgKCAobm9kZSA9IHdlYmtpdF9kb21feHBhdGhfcmVzdWx0X2l0ZXJh
dGVfbmV4dChyZXN1bHQsIE5VTEwpKSAhPSBOVUxMKSB7Ci0gICAgICAgIGdfYXNzZXJ0KG5vZGUp
OwotICAgICAgICBXZWJLaXRET01FbGVtZW50KiBlbGVtZW50ID0gKFdlYktpdERPTUVsZW1lbnQq
KW5vZGU7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3Rh
Z19uYW1lKGVsZW1lbnQpLCA9PSwgIkRJViIpOwotICAgICAgICBpKys7Ci0gICAgfQotICAgIGdf
YXNzZXJ0X2NtcGludChpLCA9PSwgMik7Ci0KLSAgICBnX29iamVjdF91bnJlZihsaXN0KTsKLX0K
LQotc3RhdGljIHZvaWQgd2Vha19ub3RpZnkoZ3BvaW50ZXIgZGF0YSwgR09iamVjdCogem9tYmll
KQotewotICAgIGd1aW50KiBjb3VudCA9IChndWludCopZGF0YTsKLSAgICAoKmNvdW50KSsrOwot
fQotCi1zdGF0aWMgdm9pZCB0ZXN0X2RvbV9kb2N1bWVudF9nYXJiYWdlX2NvbGxlY3Rpb24oRG9t
RG9jdW1lbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ3Vp
bnQgY291bnQgPSAwOwotICAgIGdfYXNzZXJ0KGZpeHR1cmUpOwotICAgIFdlYktpdFdlYlZpZXcq
IHZpZXcgPSAoV2ViS2l0V2ViVmlldyopZml4dHVyZS0+d2ViVmlldzsKLSAgICBnX2Fzc2VydCh2
aWV3KTsKLSAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKLSAgICBnX2Fzc2VydChkb2N1bWVudCk7Ci0gICAgZ19v
YmplY3Rfd2Vha19yZWYoR19PQkpFQ1QoZG9jdW1lbnQpLCAoR1dlYWtOb3RpZnkpd2Vha19ub3Rp
ZnksICZjb3VudCk7Ci0gICAgV2ViS2l0RE9NSFRNTEhlYWRFbGVtZW50KiBoZWFkID0gd2Via2l0
X2RvbV9kb2N1bWVudF9nZXRfaGVhZChkb2N1bWVudCk7Ci0gICAgZ19hc3NlcnQoaGVhZCk7Ci0g
ICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1QoaGVhZCksIChHV2Vha05vdGlmeSl3ZWFrX25v
dGlmeSwgJmNvdW50KTsKLSAgICBXZWJLaXRET01IVE1MRWxlbWVudCogYm9keSA9IHdlYmtpdF9k
b21fZG9jdW1lbnRfZ2V0X2JvZHkoZG9jdW1lbnQpOwotICAgIGdfYXNzZXJ0KGJvZHkpOwotICAg
IGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGJvZHkpLCAoR1dlYWtOb3RpZnkpd2Vha19ub3Rp
ZnksICZjb3VudCk7Ci0gICAgV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24gKmNvbGxlY3Rpb24gPSB3
ZWJraXRfZG9tX2RvY3VtZW50X2dldF9saW5rcyhkb2N1bWVudCk7Ci0gICAgZ19hc3NlcnQoY29s
bGVjdGlvbik7Ci0gICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1QoY29sbGVjdGlvbiksIChH
V2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKLQotICAgIHdlYmtpdF93ZWJfdmlld19s
b2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcodmlldyksIEhUTUxfRE9DVU1FTlRfTElOS1MsIE5V
TEwsIE5VTEwsIE5VTEwpOwotCi0gICAgd2hpbGUgKGdfbWFpbl9jb250ZXh0X3BlbmRpbmcoTlVM
TCkpCi0gICAgICAgIGdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbihOVUxMLCBGQUxTRSk7Ci0KLSAg
ICBnX2Fzc2VydF9jbXB1aW50KGNvdW50LCA9PSwgMyk7Ci0KLSAgICBnX29iamVjdF91bnJlZihj
b2xsZWN0aW9uKTsKLSAgICBnX2Fzc2VydF9jbXB1aW50KGNvdW50LCA9PSwgNCk7Ci0KLSAgICBj
b3VudCA9IDA7Ci0KLSAgICBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3Vt
ZW50KHZpZXcpOwotICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsKLSAgICBnX29iamVjdF93ZWFrX3Jl
ZihHX09CSkVDVChkb2N1bWVudCksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsK
LSAgICBoZWFkID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfaGVhZChkb2N1bWVudCk7Ci0gICAg
Z19hc3NlcnQoaGVhZCk7Ci0gICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1QoaGVhZCksIChH
V2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKLSAgICBib2R5ID0gd2Via2l0X2RvbV9k
b2N1bWVudF9nZXRfYm9keShkb2N1bWVudCk7Ci0gICAgZ19hc3NlcnQoYm9keSk7Ci0gICAgZ19v
YmplY3Rfd2Vha19yZWYoR19PQkpFQ1QoYm9keSksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwg
JmNvdW50KTsKLSAgICBjb2xsZWN0aW9uID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfbGlua3Mo
ZG9jdW1lbnQpOwotICAgIGdfYXNzZXJ0KGNvbGxlY3Rpb24pOwotICAgIGdfb2JqZWN0X3dlYWtf
cmVmKEdfT0JKRUNUKGNvbGxlY3Rpb24pLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3Vu
dCk7Ci0gICAgLyogQXNrIHR3aWNlIGZvciB0aGUgc2FtZSBvYmplY3QgKi8KLSAgICBXZWJLaXRE
T01IVE1MQ29sbGVjdGlvbiogY29sbGVjdGlvbjIgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9s
aW5rcyhkb2N1bWVudCk7Ci0gICAgZ19hc3NlcnQoY29sbGVjdGlvbjIpOwotICAgIGdfb2JqZWN0
X3dlYWtfcmVmKEdfT0JKRUNUKGNvbGxlY3Rpb24yKSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5
LCAmY291bnQpOwotCi0gICAgZ19vYmplY3RfdW5yZWYoZG9jdW1lbnQpOwotICAgIGdfb2JqZWN0
X3VucmVmKGhlYWQpOwotICAgIGdfb2JqZWN0X3VucmVmKGJvZHkpOwotICAgIGdfb2JqZWN0X3Vu
cmVmKGNvbGxlY3Rpb24pOwotICAgIGdfb2JqZWN0X3VucmVmKGNvbGxlY3Rpb24yKTsKLQotICAg
IGdfYXNzZXJ0X2NtcHVpbnQoY291bnQsID09LCA1KTsKLQotICAgIHdlYmtpdF93ZWJfdmlld19s
b2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcodmlldyksIEhUTUxfRE9DVU1FTlRfSUZSQU1FLCBO
VUxMLCBOVUxMLCBOVUxMKTsKLQotICAgIHdoaWxlIChnX21haW5fY29udGV4dF9wZW5kaW5nKE5V
TEwpKQotICAgICAgICBnX21haW5fY29udGV4dF9pdGVyYXRpb24oTlVMTCwgRkFMU0UpOwotCi0g
ICAgY291bnQgPSAwOwotCi0gICAgZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9k
b2N1bWVudCh2aWV3KTsKLSAgICBXZWJLaXRET01FbGVtZW50KiBkaXYgPSB3ZWJraXRfZG9tX2Rv
Y3VtZW50X2dldF9lbGVtZW50X2J5X2lkKGRvY3VtZW50LCAidGVzdCIpOwotICAgIGdfYXNzZXJ0
KGRpdik7Ci0gICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1QoZGl2KSwgKEdXZWFrTm90aWZ5
KXdlYWtfbm90aWZ5LCAmY291bnQpOwotICAgIFdlYktpdERPTUVsZW1lbnQqIGlmcmFtZSA9IHdl
YmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRfYnlfaWQoZG9jdW1lbnQsICJpZnJhbWUiKTsK
LSAgICBnX2Fzc2VydChpZnJhbWUpOwotCi0gICAgd2Via2l0X2RvbV9lbGVtZW50X3NldF9hdHRy
aWJ1dGUoaWZyYW1lLCAic3JjIiwgImRhdGE6PGh0bWw+PGhlYWQ+PC9oZWFkPjwvaHRtbD4iLCBO
VUxMKTsKLQotICAgIHdoaWxlIChnX21haW5fY29udGV4dF9wZW5kaW5nKE5VTEwpKQotICAgICAg
ICBnX21haW5fY29udGV4dF9pdGVyYXRpb24oTlVMTCwgRkFMU0UpOwotCi0gICAgV2ViS2l0RE9N
RG9jdW1lbnQqIGlmcmFtZURvY3VtZW50ID0gd2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50
X2dldF9jb250ZW50X2RvY3VtZW50KFdFQktJVF9ET01fSFRNTF9JRlJBTUVfRUxFTUVOVChpZnJh
bWUpKTsKLSAgICBnX2Fzc2VydChpZnJhbWVEb2N1bWVudCk7Ci0gICAgaGVhZCA9IHdlYmtpdF9k
b21fZG9jdW1lbnRfZ2V0X2hlYWQoaWZyYW1lRG9jdW1lbnQpOwotICAgIGdfYXNzZXJ0KGhlYWQp
OwotICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGhlYWQpLCAoR1dlYWtOb3RpZnkpd2Vh
a19ub3RpZnksICZjb3VudCk7Ci0KLSAgICB3ZWJraXRfZG9tX2VsZW1lbnRfc2V0X2F0dHJpYnV0
ZShpZnJhbWUsICJzcmMiLCAiYWJvdXQ6YmxhbmsiLCBOVUxMKTsKLQotICAgIHdoaWxlIChnX21h
aW5fY29udGV4dF9wZW5kaW5nKE5VTEwpKQotICAgICAgICBnX21haW5fY29udGV4dF9pdGVyYXRp
b24oTlVMTCwgRkFMU0UpOwotCi0gICAgZ19hc3NlcnRfY21wdWludChjb3VudCwgPT0sIDEpOwot
Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklFVyh2aWV3KSwg
SFRNTF9ET0NVTUVOVF9MSU5LUywgTlVMTCwgTlVMTCwgTlVMTCk7Ci0KLSAgICB3aGlsZSAoZ19t
YWluX2NvbnRleHRfcGVuZGluZyhOVUxMKSkKLSAgICAgICAgZ19tYWluX2NvbnRleHRfaXRlcmF0
aW9uKE5VTEwsIEZBTFNFKTsKLQotICAgIGdfYXNzZXJ0X2NtcHVpbnQoY291bnQsID09LCAyKTsK
LQotICAgIGNvdW50ID0gMDsKLQotICAgIGRvY3VtZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9k
b21fZG9jdW1lbnQodmlldyk7Ci0gICAgZ19hc3NlcnQoZG9jdW1lbnQpOwotICAgIGdfb2JqZWN0
X3dlYWtfcmVmKEdfT0JKRUNUKGRvY3VtZW50KSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAm
Y291bnQpOwotICAgIC8qIEFzayB0d2ljZSBmb3IgdGhlIERvY3VtZW50ICovCi0gICAgV2ViS2l0
RE9NRG9jdW1lbnQqIGRvY3VtZW50MiA9IHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50
KHZpZXcpOwotICAgIGdfYXNzZXJ0KGRvY3VtZW50Mik7Ci0gICAgZ19vYmplY3Rfd2Vha19yZWYo
R19PQkpFQ1QoZG9jdW1lbnQyKSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOwot
ICAgIGhlYWQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9oZWFkKGRvY3VtZW50KTsKLSAgICBn
X2Fzc2VydChoZWFkKTsKLSAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVDVChoZWFkKSwgKEdX
ZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOwotICAgIGJvZHkgPSB3ZWJraXRfZG9tX2Rv
Y3VtZW50X2dldF9ib2R5KGRvY3VtZW50KTsKLSAgICBnX2Fzc2VydChib2R5KTsKLSAgICBnX29i
amVjdF93ZWFrX3JlZihHX09CSkVDVChib2R5KSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAm
Y291bnQpOwotICAgIGNvbGxlY3Rpb24gPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9saW5rcyhk
b2N1bWVudCk7Ci0gICAgZ19hc3NlcnQoY29sbGVjdGlvbik7Ci0gICAgZ19vYmplY3Rfd2Vha19y
ZWYoR19PQkpFQ1QoY29sbGVjdGlvbiksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50
KTsKLQotICAgIGd0a193aWRnZXRfZGVzdHJveShmaXh0dXJlLT53ZWJWaWV3KTsKLSAgICBmaXh0
dXJlLT53ZWJWaWV3ID0gTlVMTDsKLQotICAgIGdfYXNzZXJ0X2NtcHVpbnQoY291bnQsID09LCA0
KTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGNvbGxlY3Rpb24pOwotCi0gICAgZ19hc3NlcnRfY21w
dWludChjb3VudCwgPT0sIDUpOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3Yp
Ci17Ci0gICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOwotCi0gICAgZ190ZXN0
X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKLQotICAgIGdfdGVzdF9hZGQo
Ii93ZWJraXQvZG9tZG9jdW1lbnQvdGVzdF90aXRsZSIsCi0gICAgICAgICAgICAgICBEb21Eb2N1
bWVudEZpeHR1cmUsIEhUTUxfRE9DVU1FTlRfVElUTEUsCi0gICAgICAgICAgICAgICBkb21fZG9j
dW1lbnRfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3RfZG9tX2RvY3VtZW50X3Rp
dGxlLAotICAgICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfdGVhcmRvd24pOwotCi0g
ICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9kb21kb2N1bWVudC90ZXN0X2dldF9lbGVtZW50c19ieV90
YWdfbmFtZSIsCi0gICAgICAgICAgICAgICBEb21Eb2N1bWVudEZpeHR1cmUsIEhUTUxfRE9DVU1F
TlRfRUxFTUVOVFMsCi0gICAgICAgICAgICAgICBkb21fZG9jdW1lbnRfZml4dHVyZV9zZXR1cCwK
LSAgICAgICAgICAgICAgIHRlc3RfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19ieV90YWdfbmFt
ZSwKLSAgICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKTsKLQotICAg
IGdfdGVzdF9hZGQoIi93ZWJraXQvZG9tZG9jdW1lbnQvdGVzdF9nZXRfZWxlbWVudHNfYnlfY2xh
c3NfbmFtZSIsCi0gICAgICAgICAgICAgICBEb21Eb2N1bWVudEZpeHR1cmUsIEhUTUxfRE9DVU1F
TlRfRUxFTUVOVFNfQ0xBU1MsCi0gICAgICAgICAgICAgICBkb21fZG9jdW1lbnRfZml4dHVyZV9z
ZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3RfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19ieV9j
bGFzc19uYW1lLAotICAgICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfdGVhcmRvd24p
OwotCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9kb21kb2N1bWVudC90ZXN0X2dldF9lbGVtZW50
X2J5X2lkIiwKLSAgICAgICAgICAgICAgIERvbURvY3VtZW50Rml4dHVyZSwgSFRNTF9ET0NVTUVO
VF9FTEVNRU5UU19JRCwKLSAgICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3NldHVw
LAotICAgICAgICAgICAgICAgdGVzdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRfYnlfaWQsCi0g
ICAgICAgICAgICAgICBkb21fZG9jdW1lbnRfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAgICBnX3Rl
c3RfYWRkKCIvd2Via2l0L2RvbWRvY3VtZW50L3Rlc3RfZ2V0X2xpbmtzIiwKLSAgICAgICAgICAg
ICAgIERvbURvY3VtZW50Rml4dHVyZSwgSFRNTF9ET0NVTUVOVF9MSU5LUywKLSAgICAgICAgICAg
ICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF9kb21f
ZG9jdW1lbnRfZ2V0X2xpbmtzLAotICAgICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVf
dGVhcmRvd24pOwotCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9kb21kb2N1bWVudC90ZXN0X3Rh
YmxlX2luc2VydF9yb3ciLAotICAgICAgICAgICAgICAgRG9tRG9jdW1lbnRGaXh0dXJlLCBIVE1M
X0RPQ1VNRU5UX1RBQkxFLAotICAgICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfc2V0
dXAsCi0gICAgICAgICAgICAgICB0ZXN0X2RvbV9kb2N1bWVudF9pbnNlcnRfcm93LAotICAgICAg
ICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAgZ190ZXN0X2Fk
ZCgiL3dlYmtpdC9kb21kb2N1bWVudC90ZXN0X2RvY3VtZW50X2V2YWx1YXRlIiwKLSAgICAgICAg
ICAgICAgIERvbURvY3VtZW50Rml4dHVyZSwgSFRNTF9ET0NVTUVOVF9FVkFMVUFURSwKLSAgICAg
ICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVz
dF9kb21fZG9jdW1lbnRfZXZhbHVhdGUsCi0gICAgICAgICAgICAgICBkb21fZG9jdW1lbnRfZml4
dHVyZV90ZWFyZG93bik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2RvbWRvY3VtZW50L3Rl
c3RfZ2FyYmFnZV9jb2xsZWN0aW9uIiwKLSAgICAgICAgICAgICAgIERvbURvY3VtZW50Rml4dHVy
ZSwgSFRNTF9ET0NVTUVOVF9MSU5LUywKLSAgICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0
dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF9kb21fZG9jdW1lbnRfZ2FyYmFnZV9jb2xs
ZWN0aW9uLAotICAgICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfdGVhcmRvd24pOwot
Ci0gICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9ndGsvdGVzdHMvdGVzdGRvbWRvbXdpbmRvdy5jIGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMv
dGVzdGRvbWRvbXdpbmRvdy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGZjZDE4
NmEwZWU4NDJhYTBhOGQ5MTU3YTA3MjRkNjk2NTM4YWQ4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rkb21k
b213aW5kb3cuYworKysgL2Rldi9udWxsCkBAIC0xLDI1OCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJ0
ZXN0X3V0aWxzLmgiCi0KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z2xpYi9nc3RkaW8u
aD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgotCi0j
ZGVmaW5lIEhUTUxfRE9DVU1FTlQgIjxodG1sPjxoZWFkPjx0aXRsZT48L3RpdGxlPjwvaGVhZD48
c3R5bGUgdHlwZT0ndGV4dC9jc3MnPiN0ZXN0IHsgZm9udC1zaXplOiAxNnB4OyB9PC9zdHlsZT48
Ym9keT48cCBpZD0ndGVzdCc+dGVzdDwvcD48L2JvZHk+PC9odG1sPiIKLQotdHlwZWRlZiBzdHJ1
Y3QgewotICAgIEd0a1dpZGdldCogd2ViVmlldzsKLSAgICBHdGtXaWRnZXQqIHdpbmRvdzsKLSAg
ICBXZWJLaXRET01ET01XaW5kb3cqIGRvbVdpbmRvdzsKLSAgICBHTWFpbkxvb3AqIGxvb3A7Ci0K
LSAgICBnYm9vbGVhbiBsb2FkZWQ7Ci0gICAgZ2Jvb2xlYW4gY2xpY2tlZDsKLSAgICBnY29uc3Rw
b2ludGVyIGRhdGE7Ci19IERvbURvbXZpZXdGaXh0dXJlOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZmlu
aXNoX2xvYWRpbmcoRG9tRG9tdmlld0ZpeHR1cmUqIGZpeHR1cmUpCi17Ci0gICAgaWYgKGdfbWFp
bl9sb29wX2lzX3J1bm5pbmcoZml4dHVyZS0+bG9vcCkpCi0gICAgICAgIGdfbWFpbl9sb29wX3F1
aXQoZml4dHVyZS0+bG9vcCk7Ci0KLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lk
IGRvbV9kb212aWV3X2ZpeHR1cmVfc2V0dXAoRG9tRG9tdmlld0ZpeHR1cmUqIGZpeHR1cmUsIGdj
b25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBmaXh0dXJlLT5sb29wID0gZ19tYWluX2xvb3BfbmV3
KE5VTEwsIFRSVUUpOwotICAgIGZpeHR1cmUtPndpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19X
SU5ET1dfVE9QTEVWRUwpOwotICAgIGZpeHR1cmUtPndlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdf
bmV3KCk7Ci0gICAgZml4dHVyZS0+ZGF0YSA9IGRhdGE7Ci0KLSAgICBndGtfY29udGFpbmVyX2Fk
ZChHVEtfQ09OVEFJTkVSKGZpeHR1cmUtPndpbmRvdyksIEdUS19XSURHRVQoZml4dHVyZS0+d2Vi
VmlldykpOwotfQotCi1zdGF0aWMgdm9pZCBkb21fZG9tdmlld19maXh0dXJlX3RlYXJkb3duKERv
bURvbXZpZXdGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ3Rr
X3dpZGdldF9kZXN0cm95KGZpeHR1cmUtPndpbmRvdyk7Ci0gICAgZ19tYWluX2xvb3BfdW5yZWYo
Zml4dHVyZS0+bG9vcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRvbV9kb21fd2luZG93X2ZpeHR1cmVf
c2V0dXAoRG9tRG9tdmlld0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsK
LSAgICBmaXh0dXJlLT5sb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotICAgIGZp
eHR1cmUtPndlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7Ci0gICAgZ19vYmplY3RfcmVm
X3NpbmsoZml4dHVyZS0+d2ViVmlldyk7Ci0KLSAgICBpZiAoZGF0YSAhPSBOVUxMKQotICAgICAg
ICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVXIChmaXh0dXJlLT53
ZWJWaWV3KSwgKGNvbnN0IGNoYXIqKSBkYXRhLCBOVUxMLCBOVUxMLCBOVUxMKTsKLQotICAgIGdf
aWRsZV9hZGQoKEdTb3VyY2VGdW5jKWZpbmlzaF9sb2FkaW5nLCBmaXh0dXJlKTsKLSAgICBnX21h
aW5fbG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRvbV9kb21fd2lu
ZG93X2ZpeHR1cmVfdGVhcmRvd24oRG9tRG9tdmlld0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBv
aW50ZXIgZGF0YSkKLXsKLSAgICBpZiAoZml4dHVyZS0+d2ViVmlldykKLSAgICAgICAgZ19vYmpl
Y3RfdW5yZWYoZml4dHVyZS0+d2ViVmlldyk7Ci0gICAgZ19tYWluX2xvb3BfdW5yZWYoZml4dHVy
ZS0+bG9vcCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBsb2FkZWRDYWxsYmFjayhXZWJLaXRET01E
T01XaW5kb3cqIHZpZXcsIFdlYktpdERPTUV2ZW50KiBldmVudCwgRG9tRG9tdmlld0ZpeHR1cmUq
IGZpeHR1cmUpCi17Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+bG9hZGVkID09IEZBTFNFKTsKLSAg
ICBmaXh0dXJlLT5sb2FkZWQgPSBUUlVFOwotCi0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0
aWMgZ2Jvb2xlYW4gY2xpY2tlZENhbGxiYWNrKFdlYktpdERPTURPTVdpbmRvdyogdmlldywgV2Vi
S2l0RE9NRXZlbnQqIGV2ZW50LCBEb21Eb212aWV3Rml4dHVyZSogZml4dHVyZSkKLXsKLSAgICBX
ZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0OwotICAgIGd1c2hvcnQgcGhhc2U7Ci0KLSAgICBn
X2Fzc2VydChldmVudCk7Ci0gICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19FVkVOVChldmVudCkp
OwotCi0gICAgLy8gV2Ugc2hvdWxkIGNhdGNoIHRoaXMgaW4gdGhlIGJ1YmJsaW5nIHVwIHBoYXNl
LCBzaW5jZSB3ZSBhcmUgY29ubmVjdGluZyB0byB0aGUgdG9wbGV2ZWwgb2JqZWN0Ci0gICAgcGhh
c2UgPSB3ZWJraXRfZG9tX2V2ZW50X2dldF9ldmVudF9waGFzZShldmVudCk7Ci0gICAgZ19hc3Nl
cnRfY21waW50KHBoYXNlLCA9PSwgMyk7Ci0KLSAgICB0YXJnZXQgPSB3ZWJraXRfZG9tX2V2ZW50
X2dldF9jdXJyZW50X3RhcmdldChldmVudCk7Ci0gICAgZ19hc3NlcnQodGFyZ2V0ID09IFdFQktJ
VF9ET01fRVZFTlRfVEFSR0VUKHZpZXcpKTsKLQotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmNsaWNr
ZWQgPT0gRkFMU0UpOwotICAgIGZpeHR1cmUtPmNsaWNrZWQgPSBUUlVFOwotCi0gICAgZmluaXNo
X2xvYWRpbmcoZml4dHVyZSk7Ci0KLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLWdib29sZWFuIG1h
cF9ldmVudF9jYihHdGtXaWRnZXQgKndpZGdldCwgR2RrRXZlbnQqIGV2ZW50LCBEb21Eb212aWV3
Rml4dHVyZSogZml4dHVyZSkKLXsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoV0VC
S0lUX1dFQl9WSUVXIChmaXh0dXJlLT53ZWJWaWV3KSwgKGNvbnN0IGNoYXIqKWZpeHR1cmUtPmRh
dGEsIE5VTEwsIE5VTEwsIE5VTEwpOwotCi0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMg
dm9pZCBsb2FkX2V2ZW50X2NhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEdQYXJhbVNw
ZWMqIHNwZWMsIERvbURvbXZpZXdGaXh0dXJlKiBmaXh0dXJlKQotewotICAgIFdlYktpdExvYWRT
dGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJWaWV3KTsK
LSAgICBpZiAoc3RhdHVzID09IFdFQktJVF9MT0FEX0ZJTklTSEVEKSB7Ci0gICAgICAgIHdlYmtp
dF9kb21fZXZlbnRfdGFyZ2V0X2FkZF9ldmVudF9saXN0ZW5lcihXRUJLSVRfRE9NX0VWRU5UX1RB
UkdFVChmaXh0dXJlLT5kb21XaW5kb3cpLCAiY2xpY2siLCBHX0NBTExCQUNLKGNsaWNrZWRDYWxs
YmFjayksIGZhbHNlLCBmaXh0dXJlKTsKLQotICAgICAgICBnX2Fzc2VydChmaXh0dXJlLT5jbGlj
a2VkID09IEZBTFNFKTsKLSAgICAgICAgZ3RrX3Rlc3Rfd2lkZ2V0X2NsaWNrKEdUS19XSURHRVQo
Zml4dHVyZS0+d2ViVmlldyksIDEsIDApOwotICAgIH0KLQotfQotCi1zdGF0aWMgdm9pZCB0ZXN0
X2RvbV9kb212aWV3X3NpZ25hbHMoRG9tRG9tdmlld0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBv
aW50ZXIgZGF0YSkKLXsKLSAgICBnX2Fzc2VydChmaXh0dXJlKTsKLSAgICBXZWJLaXRXZWJWaWV3
KiB2aWV3ID0gKFdlYktpdFdlYlZpZXcqKWZpeHR1cmUtPndlYlZpZXc7Ci0gICAgZ19hc3NlcnQo
dmlldyk7Ci0gICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50ID0gd2Via2l0X3dlYl92aWV3
X2dldF9kb21fZG9jdW1lbnQodmlldyk7Ci0gICAgZ19hc3NlcnQoZG9jdW1lbnQpOwotICAgIFdl
YktpdERPTURPTVdpbmRvdyogZG9tV2luZG93ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZGVm
YXVsdF92aWV3KGRvY3VtZW50KTsKLSAgICBnX2Fzc2VydChkb21XaW5kb3cpOwotCi0gICAgZml4
dHVyZS0+ZG9tV2luZG93ID0gZG9tV2luZG93OwotCi0gICAgd2Via2l0X2RvbV9ldmVudF90YXJn
ZXRfYWRkX2V2ZW50X2xpc3RlbmVyKFdFQktJVF9ET01fRVZFTlRfVEFSR0VUKGZpeHR1cmUtPmRv
bVdpbmRvdyksICJsb2FkIiwgR19DQUxMQkFDSyhsb2FkZWRDYWxsYmFjayksIGZhbHNlLCBmaXh0
dXJlKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndpbmRvdywgIm1hcC1ldmVudCIs
IEdfQ0FMTEJBQ0sobWFwX2V2ZW50X2NiKSwgZml4dHVyZSk7Ci0gICAgZ19zaWduYWxfY29ubmVj
dChmaXh0dXJlLT53ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0sobG9h
ZF9ldmVudF9jYWxsYmFjayksIGZpeHR1cmUpOwotCi0gICAgZ3RrX3dpZGdldF9zaG93X2FsbChm
aXh0dXJlLT53aW5kb3cpOwotICAgIGd0a193aW5kb3dfcHJlc2VudChHVEtfV0lORE9XKGZpeHR1
cmUtPndpbmRvdykpOwotCi0gICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1cmUtPmxvb3ApOwotCi0g
ICAgZ19hc3NlcnQoZml4dHVyZS0+bG9hZGVkKTsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT5jbGlj
a2VkKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1jbGlja2VkX2NiKFdlYktpdERPTUV2ZW50VGFy
Z2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgRG9tRG9tdmlld0ZpeHR1cmUqIGZp
eHR1cmUpCi17Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+Y2xpY2tlZCA9PSBGQUxTRSk7Ci0gICAg
Zml4dHVyZS0+Y2xpY2tlZCA9IFRSVUU7Ci0gICAgZmluaXNoX2xvYWRpbmcoZml4dHVyZSk7Ci0g
ICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCBsb2FkX3N0YXR1c19jYWxsYmFjayhX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHUGFyYW1TcGVjKiBzcGVjLCBEb21Eb212aWV3Rml4dHVy
ZSogZml4dHVyZSkKLXsKLSAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJf
dmlld19nZXRfbG9hZF9zdGF0dXMod2ViVmlldyk7Ci0gICAgaWYgKHN0YXR1cyA9PSBXRUJLSVRf
TE9BRF9GSU5JU0hFRCkgewotICAgICAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQ7Ci0g
ICAgICAgIFdlYktpdERPTURPTVdpbmRvdyogZG9tV2luZG93OwotICAgICAgICBXZWJLaXRET01F
bGVtZW50KiBlbGVtZW50OwotICAgICAgICBXZWJLaXRET01FdmVudCogZXZlbnQ7Ci0gICAgICAg
IGdsb25nIGNsaWVudFgsIGNsaWVudFk7Ci0KLSAgICAgICAgZG9jdW1lbnQgPSB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X2RvbV9kb2N1bWVudChXRUJLSVRfV0VCX1ZJRVcoZml4dHVyZS0+d2ViVmlldykp
OwotICAgICAgICBnX2Fzc2VydChkb2N1bWVudCk7Ci0gICAgICAgIGRvbVdpbmRvdyA9IHdlYmtp
dF9kb21fZG9jdW1lbnRfZ2V0X2RlZmF1bHRfdmlldyhkb2N1bWVudCk7Ci0gICAgICAgIGdfYXNz
ZXJ0KGRvbVdpbmRvdyk7Ci0gICAgICAgIGZpeHR1cmUtPmRvbVdpbmRvdyA9IGRvbVdpbmRvdzsK
LQotICAgICAgICBlbGVtZW50ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudF9ieV9p
ZChkb2N1bWVudCwgInRlc3QiKTsKLSAgICAgICAgZ19hc3NlcnQoZWxlbWVudCk7Ci0gICAgICAg
IGV2ZW50ID0gd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZXZlbnQoZG9jdW1lbnQsICJNb3Vz
ZUV2ZW50IiwgTlVMTCk7Ci0gICAgICAgIGdfYXNzZXJ0KGV2ZW50KTsKLSAgICAgICAgZ19hc3Nl
cnQoV0VCS0lUX0RPTV9JU19FVkVOVChldmVudCkpOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRf
RE9NX0lTX01PVVNFX0VWRU5UKGV2ZW50KSk7Ci0gICAgICAgIGNsaWVudFggPSB3ZWJraXRfZG9t
X2VsZW1lbnRfZ2V0X2NsaWVudF9sZWZ0KGVsZW1lbnQpOwotICAgICAgICBjbGllbnRZID0gd2Vi
a2l0X2RvbV9lbGVtZW50X2dldF9jbGllbnRfdG9wKGVsZW1lbnQpOwotICAgICAgICB3ZWJraXRf
ZG9tX21vdXNlX2V2ZW50X2luaXRfbW91c2VfZXZlbnQoV0VCS0lUX0RPTV9NT1VTRV9FVkVOVChl
dmVudCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
Y2xpY2siLCBUUlVFLCBUUlVFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZml4dHVyZS0+ZG9tV2luZG93LCAwLCAwLCAwLCBjbGllbnRYLCBjbGllbnRZ
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0Us
IEZBTFNFLCBGQUxTRSwgRkFMU0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAxLCBXRUJLSVRfRE9NX0VWRU5UX1RBUkdFVChlbGVtZW50KSk7Ci0gICAg
ICAgIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2FkZF9ldmVudF9saXN0ZW5lcihXRUJLSVRfRE9N
X0VWRU5UX1RBUkdFVChlbGVtZW50KSwgImNsaWNrIiwgR19DQUxMQkFDSyhjbGlja2VkX2NiKSwg
ZmFsc2UsIGZpeHR1cmUpOwotICAgICAgICBnX2Fzc2VydChmaXh0dXJlLT5jbGlja2VkID09IEZB
TFNFKTsKLSAgICAgICAgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfZGlzcGF0Y2hfZXZlbnQoV0VC
S0lUX0RPTV9FVkVOVF9UQVJHRVQoZWxlbWVudCksIGV2ZW50LCBOVUxMKTsKLSAgICB9Ci0KLX0K
LQotc3RhdGljIHZvaWQgdGVzdF9kb21fZG9tdmlld19kaXNwYXRjaF9ldmVudChEb21Eb212aWV3
Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGdfc2lnbmFsX2Nv
bm5lY3QoZml4dHVyZS0+d2luZG93LCAibWFwLWV2ZW50IiwgR19DQUxMQkFDSyhtYXBfZXZlbnRf
Y2IpLCBmaXh0dXJlKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJu
b3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhsb2FkX3N0YXR1c19jYWxsYmFjayksIGZp
eHR1cmUpOwotCi0gICAgZ3RrX3dpZGdldF9zaG93X2FsbChmaXh0dXJlLT53aW5kb3cpOwotICAg
IGd0a193aW5kb3dfcHJlc2VudChHVEtfV0lORE9XKGZpeHR1cmUtPndpbmRvdykpOwotCi0gICAg
Z19tYWluX2xvb3BfcnVuIChmaXh0dXJlLT5sb29wKTsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT5j
bGlja2VkKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF9kb21fZG9tX3dpbmRvd19nZXRfY29tcHV0
ZWRfc3R5bGUoRG9tRG9tdmlld0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkK
LXsKLSAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X2RvbV9kb2N1bWVudChXRUJLSVRfV0VCX1ZJRVcoZml4dHVyZS0+d2ViVmlldykpOwotICAgIGdf
YXNzZXJ0KGRvY3VtZW50KTsKLSAgICBXZWJLaXRET01ET01XaW5kb3cqIGRvbVdpbmRvdyA9IHdl
YmtpdF9kb21fZG9jdW1lbnRfZ2V0X2RlZmF1bHRfdmlldyhkb2N1bWVudCk7Ci0gICAgZ19hc3Nl
cnQoZG9tV2luZG93KTsKLQotICAgIFdlYktpdERPTUVsZW1lbnQqICBlbGVtZW50ID0gd2Via2l0
X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudF9ieV9pZChkb2N1bWVudCwgInRlc3QiKTsKLSAgICBn
X2Fzc2VydChlbGVtZW50KTsKLSAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoZWxl
bWVudCkpOwotICAgIFdlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24qIGNzc1N0eWxlID0gd2Vi
a2l0X2RvbV9kb21fd2luZG93X2dldF9jb21wdXRlZF9zdHlsZShkb21XaW5kb3csIGVsZW1lbnQs
IE5VTEwpOwotICAgIGdjaGFyKiBmb250U2l6ZSA9IHdlYmtpdF9kb21fY3NzX3N0eWxlX2RlY2xh
cmF0aW9uX2dldF9wcm9wZXJ0eV92YWx1ZShjc3NTdHlsZSwgImZvbnQtc2l6ZSIpOwotICAgIGdf
YXNzZXJ0X2NtcHN0cihmb250U2l6ZSwgPT0sICIxNnB4Iik7Ci19Ci0KLWludCBtYWluKGludCBh
cmdjLCBjaGFyKiogYXJndikKLXsKLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVM
TCk7Ci0KLSAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwot
Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9kb21kb212aWV3L3NpZ25hbHMiLAotICAgICAgICAg
ICAgICAgRG9tRG9tdmlld0ZpeHR1cmUsIEhUTUxfRE9DVU1FTlQsCi0gICAgICAgICAgICAgICBk
b21fZG9tdmlld19maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF9kb21fZG9tdmll
d19zaWduYWxzLAotICAgICAgICAgICAgICAgZG9tX2RvbXZpZXdfZml4dHVyZV90ZWFyZG93bik7
Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2RvbWRvbXZpZXcvZGlzcGF0Y2hfZXZlbnQiLAot
ICAgICAgICAgICAgICAgRG9tRG9tdmlld0ZpeHR1cmUsIEhUTUxfRE9DVU1FTlQsCi0gICAgICAg
ICAgICAgICBkb21fZG9tdmlld19maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF9k
b21fZG9tdmlld19kaXNwYXRjaF9ldmVudCwKLSAgICAgICAgICAgICAgIGRvbV9kb212aWV3X2Zp
eHR1cmVfdGVhcmRvd24pOwotCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9kb21kb213aW5kb3cv
Z2V0X2NvbXB1dGVkX3N0eWxlIiwKLSAgICAgICAgICAgICAgIERvbURvbXZpZXdGaXh0dXJlLCBI
VE1MX0RPQ1VNRU5ULAotICAgICAgICAgICAgICAgZG9tX2RvbV93aW5kb3dfZml4dHVyZV9zZXR1
cCwKLSAgICAgICAgICAgICAgIHRlc3RfZG9tX2RvbV93aW5kb3dfZ2V0X2NvbXB1dGVkX3N0eWxl
LAotICAgICAgICAgICAgICAgZG9tX2RvbV93aW5kb3dfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAg
ICByZXR1cm4gZ190ZXN0X3J1bigpOwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0
ay90ZXN0cy90ZXN0ZG9tbm9kZS5jIGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvbW5v
ZGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ0YmNiZGFhNjIwN2ZhMDJjNjhl
MjgyYmUyY2RiZjljZjVlMjc0ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0ZG9tbm9kZS5jCisrKyAvZGV2
L251bGwKQEAgLTEsMjE5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlh
IFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgInRlc3RfdXRpbHMuaCIKLQotI2lu
Y2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgotI2luY2x1ZGUgPGd0ay9n
dGsuaD4KLSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+Ci0KLSNkZWZpbmUgSFRNTF9ET0NVTUVO
VF9ISUVSQVJDSFlfTkFWSUdBVElPTiAiPGh0bWw+PGhlYWQ+PHRpdGxlPlRoaXMgaXMgdGhlIHRp
dGxlPC90aXRsZT48L2hlYWQ+PGJvZHk+PHA+MTwvcD48cD4yPC9wPjxwPjM8L3A+PC9ib2R5Pjwv
aHRtbD4iCi0jZGVmaW5lIEhUTUxfRE9DVU1FTlRfTk9ERV9JTlNFUlRJT04gIjxodG1sPjxib2R5
PjwvYm9keT48L2h0bWw+IgotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgR3RrV2lkZ2V0KiB3ZWJW
aWV3OwotICAgIEdNYWluTG9vcCogbG9vcDsKLX0gRG9tTm9kZUZpeHR1cmU7Ci0KLXN0YXRpYyBn
Ym9vbGVhbiBmaW5pc2hfbG9hZGluZyhEb21Ob2RlRml4dHVyZSogZml4dHVyZSkKLXsKLSAgICBp
ZiAoZ19tYWluX2xvb3BfaXNfcnVubmluZyhmaXh0dXJlLT5sb29wKSkKLSAgICAgICAgZ19tYWlu
X2xvb3BfcXVpdChmaXh0dXJlLT5sb29wKTsKLQotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3Rh
dGljIHZvaWQgZG9tX25vZGVfZml4dHVyZV9zZXR1cChEb21Ob2RlRml4dHVyZSogZml4dHVyZSwg
Z2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGZpeHR1cmUtPmxvb3AgPSBnX21haW5fbG9vcF9u
ZXcoTlVMTCwgVFJVRSk7Ci0gICAgZml4dHVyZS0+d2ViVmlldyA9IHdlYmtpdF93ZWJfdmlld19u
ZXcoKTsKLSAgICBnX29iamVjdF9yZWZfc2luayhmaXh0dXJlLT53ZWJWaWV3KTsKLQotICAgIGlm
IChkYXRhICE9IE5VTEwpCi0gICAgICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhXRUJL
SVRfV0VCX1ZJRVcoZml4dHVyZS0+d2ViVmlldyksIChjb25zdCBjaGFyKilkYXRhLCBOVUxMLCBO
VUxMLCBOVUxMKTsKLQotICAgIGdfaWRsZV9hZGQoKEdTb3VyY2VGdW5jKWZpbmlzaF9sb2FkaW5n
LCBmaXh0dXJlKTsKLSAgICBnX21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7Ci19Ci0KLXN0
YXRpYyB2b2lkIGRvbV9ub2RlX2ZpeHR1cmVfdGVhcmRvd24oRG9tTm9kZUZpeHR1cmUqIGZpeHR1
cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBnX29iamVjdF91bnJlZihmaXh0dXJlLT53
ZWJWaWV3KTsKLSAgICBnX21haW5fbG9vcF91bnJlZihmaXh0dXJlLT5sb29wKTsKLX0KLQotc3Rh
dGljIHZvaWQgdGVzdF9kb21fbm9kZV9oaWVyYXJjaHlfbmF2aWdhdGlvbihEb21Ob2RlRml4dHVy
ZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIFdlYktpdERPTURvY3VtZW50
KiBkb2N1bWVudDsKLSAgICBXZWJLaXRET01IVE1MSGVhZEVsZW1lbnQqIGhlYWQ7Ci0gICAgV2Vi
S2l0RE9NSFRNTEJvZHlFbGVtZW50KiBib2R5OwotICAgIFdlYktpdERPTU5vZGVMaXN0KiBsaXN0
OwotICAgIFdlYktpdERPTU5vZGUqIHB0cjsKLSAgICBndWxvbmcgaSwgbGVuZ3RoOwotCi0gICAg
ZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudChXRUJLSVRfV0VCX1ZJ
RVcoZml4dHVyZS0+d2ViVmlldykpOwotICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsKLSAgICBnX2Fz
c2VydChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKGRvY3VtZW50KSk7Ci0gICAgaGVhZCA9IHdlYmtp
dF9kb21fZG9jdW1lbnRfZ2V0X2hlYWQoZG9jdW1lbnQpOwotICAgIGdfYXNzZXJ0KGhlYWQpOwot
ICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9IRUFEX0VMRU1FTlQoaGVhZCkpOwotCi0g
ICAgLyogVGl0bGUsIGhlYWQncyBjaGlsZCAqLwotICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9k
ZV9oYXNfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGhlYWQpKSk7Ci0gICAgbGlzdCA9IHdl
YmtpdF9kb21fbm9kZV9nZXRfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGhlYWQpKTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChsaXN0KSwg
PT0sIDEpOwotICAgIHB0ciA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdCwgMCk7Ci0g
ICAgZ19hc3NlcnQocHRyKTsKLSAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfVElUTEVf
RUxFTUVOVChwdHIpKTsKLSAgICBnX29iamVjdF91bnJlZihsaXN0KTsKLQotICAgIC8qIEJvZHks
IEhlYWQgc2libGluZyAqLwotICAgIHB0ciA9IHdlYmtpdF9kb21fbm9kZV9nZXRfbmV4dF9zaWJs
aW5nKFdFQktJVF9ET01fTk9ERShoZWFkKSk7Ci0gICAgZ19hc3NlcnQocHRyKTsKLSAgICBib2R5
ID0gV0VCS0lUX0RPTV9IVE1MX0JPRFlfRUxFTUVOVChwdHIpOwotICAgIGdfYXNzZXJ0KFdFQktJ
VF9ET01fSVNfSFRNTF9CT0RZX0VMRU1FTlQoYm9keSkpOwotCi0gICAgLyogVGhlcmUgaXMgbm8g
dGhpcmQgc2libGluZyAqLwotICAgIHB0ciA9IHdlYmtpdF9kb21fbm9kZV9nZXRfbmV4dF9zaWJs
aW5nKHB0cik7Ci0gICAgZ19hc3NlcnQocHRyID09IE5VTEwpOwotCi0gICAgLyogQm9keSdzIHBy
ZXZpb3VzIHNpYmxpbmcgaXMgSGVhZCAqLwotICAgIHB0ciA9IHdlYmtpdF9kb21fbm9kZV9nZXRf
cHJldmlvdXNfc2libGluZyhXRUJLSVRfRE9NX05PREUoYm9keSkpOwotICAgIGdfYXNzZXJ0KHB0
cik7Ci0gICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0hFQURfRUxFTUVOVChwdHIpKTsK
LQotICAgIC8qIEJvZHkgaGFzIDMgY2hpbGRyZW4gKi8KLSAgICBnX2Fzc2VydCh3ZWJraXRfZG9t
X25vZGVfaGFzX2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSkpOwotICAgIGxpc3Qg
PSB3ZWJraXRfZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSk7
Ci0gICAgbGVuZ3RoID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChsaXN0KTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQobGVuZ3RoLCA9PSwgMyk7Ci0KLSAgICAvKiBUaGUgdGhyZWUgb2Yg
dGhlbSBhcmUgUCB0YWdzICovCi0gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0g
ICAgICAgIHB0ciA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdCwgaSk7Ci0gICAgICAg
IGdfYXNzZXJ0KHB0cik7Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9QQVJB
R1JBUEhfRUxFTUVOVChwdHIpKTsKLSAgICB9Ci0KLSAgICAvKiBHbyBiYWNrd2FyZHMgKi8KLSAg
ICBmb3IgKGkgPSAwOyBwdHI7IHB0ciA9IHdlYmtpdF9kb21fbm9kZV9nZXRfcHJldmlvdXNfc2li
bGluZyhwdHIpLCBpKyspCi0gICAgICAgIC8qIE5vdGhpbmcgKi87Ci0KLSAgICBnX2Fzc2VydF9j
bXBpbnQoaSwgPT0sIDMpOwotICAgIGdfb2JqZWN0X3VucmVmKGxpc3QpOwotfQotCi1zdGF0aWMg
dm9pZCB0ZXN0X2RvbV9ub2RlX2luc2VydGlvbihEb21Ob2RlRml4dHVyZSogZml4dHVyZSwgZ2Nv
bnN0cG9pbnRlciBkYXRhKQotewotICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1bWVudDsKLSAg
ICBXZWJLaXRET01IVE1MRWxlbWVudCogYm9keTsKLSAgICBXZWJLaXRET01FbGVtZW50KiBwLCAq
ZGl2OwotICAgIFdlYktpdERPTU5vZGVMaXN0KiBsaXN0OwotICAgIFdlYktpdERPTU5vZGUqIG5v
ZGU7Ci0KLSAgICBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50KFdF
QktJVF9XRUJfVklFVyhmaXh0dXJlLT53ZWJWaWV3KSk7Ci0gICAgZ19hc3NlcnQoZG9jdW1lbnQp
OwotICAgIGJvZHkgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9ib2R5KGRvY3VtZW50KTsKLSAg
ICBnX2Fzc2VydChib2R5KTsKLSAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVO
VChib2R5KSk7Ci0KLSAgICAvKiBCb2R5IHNob3VsZG4ndCBoYXZlIGFueSBjaGlsZHJlbiBhdCB0
aGlzIHBvaW50ICovCi0gICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2hhc19jaGlsZF9ub2Rl
cyhXRUJLSVRfRE9NX05PREUoYm9keSkpID09IEZBTFNFKTsKLQotICAgIC8qIEluc2VydCBvbmUg
UCBlbGVtZW50ICovCi0gICAgcCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2VsZW1lbnQo
ZG9jdW1lbnQsICJQIiwgTlVMTCk7Ci0gICAgd2Via2l0X2RvbV9ub2RlX2FwcGVuZF9jaGlsZChX
RUJLSVRfRE9NX05PREUoYm9keSksIFdFQktJVF9ET01fTk9ERShwKSwgTlVMTCk7Ci0KLSAgICAv
KiBOb3cgaXQgc2hvdWxkIGhhdmUgb25lLCB0aGUgc2FtZSB0aGF0IHdlIGluc2VydGVkICovCi0g
ICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2hhc19jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05P
REUoYm9keSkpKTsKLSAgICBsaXN0ID0gd2Via2l0X2RvbV9ub2RlX2dldF9jaGlsZF9ub2RlcyhX
RUJLSVRfRE9NX05PREUoYm9keSkpOwotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfZG9tX25v
ZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QpLCA9PSwgMSk7Ci0gICAgbm9kZSA9IHdlYmtpdF9kb21f
bm9kZV9saXN0X2l0ZW0obGlzdCwgMCk7Ci0gICAgZ19hc3NlcnQobm9kZSk7Ci0gICAgZ19hc3Nl
cnQod2Via2l0X2RvbV9ub2RlX2lzX3NhbWVfbm9kZShXRUJLSVRfRE9NX05PREUocCksIG5vZGUp
KTsKLSAgICBnX29iamVjdF91bnJlZihsaXN0KTsKLQotICAgIC8qIFJlcGxhY2UgdGhlIFAgdGFn
IHdpdGggYSBESVYgdGFnICovCi0gICAgZGl2ID0gd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVf
ZWxlbWVudChkb2N1bWVudCwgIkRJViIsIE5VTEwpOwotICAgIHdlYmtpdF9kb21fbm9kZV9yZXBs
YWNlX2NoaWxkKFdFQktJVF9ET01fTk9ERShib2R5KSwgV0VCS0lUX0RPTV9OT0RFKGRpdiksIFdF
QktJVF9ET01fTk9ERShwKSwgTlVMTCk7Ci0gICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2hh
c19jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpKTsKLSAgICBsaXN0ID0gd2Via2l0
X2RvbV9ub2RlX2dldF9jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpOwotICAgIGdf
YXNzZXJ0X2NtcGludCh3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QpLCA9PSwg
MSk7Ci0gICAgbm9kZSA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdCwgMCk7Ci0gICAg
Z19hc3NlcnQobm9kZSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2lzX3NhbWVfbm9k
ZShXRUJLSVRfRE9NX05PREUoZGl2KSwgbm9kZSkpOwotICAgIGdfb2JqZWN0X3VucmVmKGxpc3Qp
OwotCi0gICAgLyogTm93IHJlbW92ZSB0aGUgdGFnICovCi0gICAgd2Via2l0X2RvbV9ub2RlX3Jl
bW92ZV9jaGlsZChXRUJLSVRfRE9NX05PREUoYm9keSksIG5vZGUsIE5VTEwpOwotICAgIGxpc3Qg
PSB3ZWJraXRfZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSk7
Ci0gICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9kb21fbm9kZV9saXN0X2dldF9sZW5ndGgobGlz
dCksID09LCAwKTsKLSAgICBnX29iamVjdF91bnJlZihsaXN0KTsKLQotICAgIC8qIFRlc3QgaW5z
ZXJ0X2JlZm9yZSAqLwotCi0gICAgLyogSWYgcmVmQ2hpbGQgaXMgbnVsbCwgaW5zZXJ0IG5ld0No
aWxkIGFzIGxhc3QgZWxlbWVudCBvZiBwYXJlbnQgKi8KLSAgICBkaXYgPSB3ZWJraXRfZG9tX2Rv
Y3VtZW50X2NyZWF0ZV9lbGVtZW50KGRvY3VtZW50LCAiRElWIiwgTlVMTCk7Ci0gICAgd2Via2l0
X2RvbV9ub2RlX2luc2VydF9iZWZvcmUoV0VCS0lUX0RPTV9OT0RFKGJvZHkpLCBXRUJLSVRfRE9N
X05PREUoZGl2KSwgTlVMTCwgTlVMTCk7Ci0gICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2hh
c19jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpKTsKLSAgICBsaXN0ID0gd2Via2l0
X2RvbV9ub2RlX2dldF9jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpOwotICAgIGdf
YXNzZXJ0X2NtcGludCh3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QpLCA9PSwg
MSk7Ci0gICAgbm9kZSA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdCwgMCk7Ci0gICAg
Z19hc3NlcnQobm9kZSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2lzX3NhbWVfbm9k
ZShXRUJLSVRfRE9NX05PREUoZGl2KSwgbm9kZSkpOwotICAgIGdfb2JqZWN0X3VucmVmKGxpc3Qp
OwotCi0gICAgLyogTm93IGluc2VydCBhICdwJyBiZWZvcmUgJ2RpdicgKi8KLSAgICBwID0gd2Vi
a2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZWxlbWVudChkb2N1bWVudCwgIlAiLCBOVUxMKTsKLSAg
ICB3ZWJraXRfZG9tX25vZGVfaW5zZXJ0X2JlZm9yZShXRUJLSVRfRE9NX05PREUoYm9keSksIFdF
QktJVF9ET01fTk9ERShwKSwgV0VCS0lUX0RPTV9OT0RFKGRpdiksIE5VTEwpOwotICAgIGdfYXNz
ZXJ0KHdlYmtpdF9kb21fbm9kZV9oYXNfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkp
KSk7Ci0gICAgbGlzdCA9IHdlYmtpdF9kb21fbm9kZV9nZXRfY2hpbGRfbm9kZXMoV0VCS0lUX0RP
TV9OT0RFKGJvZHkpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X2RvbV9ub2RlX2xpc3Rf
Z2V0X2xlbmd0aChsaXN0KSwgPT0sIDIpOwotICAgIG5vZGUgPSB3ZWJraXRfZG9tX25vZGVfbGlz
dF9pdGVtKGxpc3QsIDApOwotICAgIGdfYXNzZXJ0KG5vZGUpOwotICAgIGdfYXNzZXJ0KHdlYmtp
dF9kb21fbm9kZV9pc19zYW1lX25vZGUoV0VCS0lUX0RPTV9OT0RFKHApLCBub2RlKSk7Ci0gICAg
bm9kZSA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdCwgMSk7Ci0gICAgZ19hc3NlcnQo
bm9kZSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2lzX3NhbWVfbm9kZShXRUJLSVRf
RE9NX05PREUoZGl2KSwgbm9kZSkpOwotICAgIGdfb2JqZWN0X3VucmVmKGxpc3QpOwotfQotCi1p
bnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCi17Ci0gICAgZ3RrX3Rlc3RfaW5pdCgmYXJn
YywgJmFyZ3YsIE5VTEwpOwotCi0gICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy8iKTsKLQotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvZG9tbm9kZS90ZXN0X2hpZXJh
cmNoeV9uYXZpZ2F0aW9uIiwKLSAgICAgICAgICAgICAgIERvbU5vZGVGaXh0dXJlLCBIVE1MX0RP
Q1VNRU5UX0hJRVJBUkNIWV9OQVZJR0FUSU9OLAotICAgICAgICAgICAgICAgZG9tX25vZGVfZml4
dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3RfZG9tX25vZGVfaGllcmFyY2h5X25hdmln
YXRpb24sCi0gICAgICAgICAgICAgICBkb21fbm9kZV9maXh0dXJlX3RlYXJkb3duKTsKLQotICAg
IGdfdGVzdF9hZGQoIi93ZWJraXQvZG9tbm9kZS90ZXN0X2luc2VydGlvbiIsCi0gICAgICAgICAg
ICAgICBEb21Ob2RlRml4dHVyZSwgSFRNTF9ET0NVTUVOVF9OT0RFX0lOU0VSVElPTiwKLSAgICAg
ICAgICAgICAgIGRvbV9ub2RlX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X2Rv
bV9ub2RlX2luc2VydGlvbiwKLSAgICAgICAgICAgICAgIGRvbV9ub2RlX2ZpeHR1cmVfdGVhcmRv
d24pOwotCi0gICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvd25sb2FkLmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0
cy90ZXN0ZG93bmxvYWQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjhlOGRlZDkz
MjJmNGRiODQ0ZDVmYzA5M2I0ZDg2ODlmODUwNWE0ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0ZG93bmxv
YWQuYworKysgL2Rldi9udWxsCkBAIC0xLDMyMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA5IENocmlzdGlhbiBEeXdhbiA8Y2hyaXN0aWFuQHR3b3RvYXN0cy5kZT4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2lu
Y2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgotCi1HTWFp
bkxvb3AqIGxvb3A7Ci1jaGFyKiB0ZW1wb3JhcnlGaWxlbmFtZSA9IE5VTEw7Ci1XZWJLaXREb3du
bG9hZCogdGhlRG93bmxvYWQgPSBOVUxMOwotCi1zdGF0aWMgdm9pZAotdGVzdF93ZWJraXRfZG93
bmxvYWRfY3JlYXRlKHZvaWQpCi17Ci0gICAgV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3Q7
Ci0gICAgV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkOwotICAgIGNvbnN0IGdjaGFyKiB1cmkgPSAi
aHR0cDovL2V4YW1wbGUuY29tIjsKLSAgICBnY2hhciogdG1wRGlyOwotCi0gICAgcmVxdWVzdCA9
IHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfbmV3KHVyaSk7Ci0gICAgZG93bmxvYWQgPSB3ZWJraXRf
ZG93bmxvYWRfbmV3KHJlcXVlc3QpOwotICAgIGdfb2JqZWN0X3VucmVmKHJlcXVlc3QpOwotICAg
IGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfZG93bmxvYWRfZ2V0X3VyaShkb3dubG9hZCksID09LCB1
cmkpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9kb3dubG9hZF9nZXRfbmV0d29ya19yZXF1ZXN0KGRv
d25sb2FkKSA9PSByZXF1ZXN0KTsKLSAgICBnX2Fzc2VydChnX3N0cnJzdHIodXJpLCB3ZWJraXRf
ZG93bmxvYWRfZ2V0X3N1Z2dlc3RlZF9maWxlbmFtZShkb3dubG9hZCkpKTsKLSAgICBnX2Fzc2Vy
dCh3ZWJraXRfZG93bmxvYWRfZ2V0X3N0YXR1cyhkb3dubG9hZCkgPT0gV0VCS0lUX0RPV05MT0FE
X1NUQVRVU19DUkVBVEVEKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2Rvd25sb2FkX2dldF90b3Rh
bF9zaXplKGRvd25sb2FkKSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9kb3dubG9hZF9nZXRfY3Vy
cmVudF9zaXplKGRvd25sb2FkKSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9kb3dubG9hZF9nZXRf
cHJvZ3Jlc3MoZG93bmxvYWQpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2Rvd25sb2FkX2dldF9l
bGFwc2VkX3RpbWUoZG93bmxvYWQpKTsKLSAgICB0bXBEaXIgPSBnX2ZpbGVuYW1lX3RvX3VyaShn
X2dldF90bXBfZGlyKCksIE5VTEwsIE5VTEwpOwotICAgIHdlYmtpdF9kb3dubG9hZF9zZXRfZGVz
dGluYXRpb25fdXJpKGRvd25sb2FkLCB0bXBEaXIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih0bXBE
aXIsID09LCB3ZWJraXRfZG93bmxvYWRfZ2V0X2Rlc3RpbmF0aW9uX3VyaShkb3dubG9hZCkpOzsK
LSAgICBnX2ZyZWUodG1wRGlyKTsKLSAgICBnX29iamVjdF91bnJlZihkb3dubG9hZCk7Ci19Ci0K
LXN0YXRpYyBnYm9vbGVhbgotbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fcmVxdWVzdGVkX2Ni
KFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdlYktpdFdlYkZyYW1lKiB3ZWJfZnJhbWUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0V2ViTmF2aWdhdGlvbkFj
dGlvbiogYWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdl
YktpdFdlYlBvbGljeURlY2lzaW9uKiBkZWNpc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBncG9pbnRlciBkYXRhKQotewotICAgIHdlYmtpdF93ZWJfcG9saWN5
X2RlY2lzaW9uX2Rvd25sb2FkKGRlY2lzaW9uKTsKLSAgICByZXR1cm4gVFJVRTsKLX0KLQotc3Rh
dGljIHZvaWQKLW5vdGlmeV9zdGF0dXNfY2IoR09iamVjdCogb2JqZWN0LCBHUGFyYW1TcGVjKiBw
c3BlYywgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBXZWJLaXREb3dubG9hZCogZG93bmxvYWQgPSBX
RUJLSVRfRE9XTkxPQUQob2JqZWN0KTsKLSAgICBzd2l0Y2ggKHdlYmtpdF9kb3dubG9hZF9nZXRf
c3RhdHVzKGRvd25sb2FkKSkgewotICAgIGNhc2UgV0VCS0lUX0RPV05MT0FEX1NUQVRVU19GSU5J
U0hFRDoKLSAgICBjYXNlIFdFQktJVF9ET1dOTE9BRF9TVEFUVVNfRVJST1I6Ci0gICAgICAgIGdf
bWFpbl9sb29wX3F1aXQobG9vcCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV0VCS0lUX0RP
V05MT0FEX1NUQVRVU19DQU5DRUxMRUQ6Ci0gICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0K
LQotc3RhdGljIGdib29sZWFuCi1zZXRfZmlsZW5hbWUoZ2NoYXIqIGZpbGVuYW1lKQotewotICAg
IGdjaGFyICp1cmkgPSBnX2ZpbGVuYW1lX3RvX3VyaShmaWxlbmFtZSwgTlVMTCwgTlVMTCk7Ci0K
LSAgICB3ZWJraXRfZG93bmxvYWRfc2V0X2Rlc3RpbmF0aW9uX3VyaSh0aGVEb3dubG9hZCwgdXJp
KTsKLSAgICBnX2ZyZWUodXJpKTsKLQotICAgIHdlYmtpdF9kb3dubG9hZF9zdGFydCh0aGVEb3du
bG9hZCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZAotaGFuZGxlX2Rvd25s
b2FkX3JlcXVlc3RlZF9jYihXZWJLaXREb3dubG9hZCogZG93bmxvYWQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdib29sZWFuKiBiZWVuVGhlcmUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdib29sZWFuIGFzeW5jaCkKLXsKLSAgICB0aGVEb3dubG9hZCA9IGRvd25sb2Fk
OwotICAgICpiZWVuVGhlcmUgPSBUUlVFOwotCi0gICAgaWYgKHRlbXBvcmFyeUZpbGVuYW1lKSB7
Ci0gICAgICAgIGlmIChhc3luY2gpIHsKLSAgICAgICAgICAgIGdfaWRsZV9hZGQoKEdTb3VyY2VG
dW5jKXNldF9maWxlbmFtZSwgdGVtcG9yYXJ5RmlsZW5hbWUpOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgZ2NoYXIgKnVyaSA9IGdfZmlsZW5hbWVfdG9fdXJpKHRlbXBvcmFyeUZpbGVu
YW1lLCBOVUxMLCBOVUxMKTsKLSAgICAgICAgICAgIGlmICh1cmkpCi0gICAgICAgICAgICAgICAg
d2Via2l0X2Rvd25sb2FkX3NldF9kZXN0aW5hdGlvbl91cmkoZG93bmxvYWQsIHVyaSk7Ci0gICAg
ICAgICAgICBnX2ZyZWUodXJpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGdfc2lnbmFsX2Nv
bm5lY3QoZG93bmxvYWQsICJub3RpZnk6OnN0YXR1cyIsCi0gICAgICAgICAgICAgICAgICAgICBH
X0NBTExCQUNLKG5vdGlmeV9zdGF0dXNfY2IpLCBOVUxMKTsKLX0KLQotc3RhdGljIGdib29sZWFu
Ci1kb3dubG9hZF9yZXF1ZXN0ZWRfY2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsCi0gICAgICAg
ICAgICAgICAgICAgICAgV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLAotICAgICAgICAgICAgICAg
ICAgICAgIGdib29sZWFuKiBiZWVuVGhlcmUpCi17Ci0gICAgaGFuZGxlX2Rvd25sb2FkX3JlcXVl
c3RlZF9jYihkb3dubG9hZCwgYmVlblRoZXJlLCBGQUxTRSk7Ci0gICAgcmV0dXJuIFRSVUU7Ci19
Ci0KLXN0YXRpYyBnYm9vbGVhbgotZG93bmxvYWRfcmVxdWVzdGVkX2FzeW5jaF9jYihXZWJLaXRX
ZWJWaWV3KiB3ZWJfdmlldywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0RG93
bmxvYWQqIGRvd25sb2FkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiog
YmVlblRoZXJlKQotewotICAgIGhhbmRsZV9kb3dubG9hZF9yZXF1ZXN0ZWRfY2IoZG93bmxvYWQs
IGJlZW5UaGVyZSwgVFJVRSk7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi10
ZXN0X3dlYmtpdF9kb3dubG9hZF9wZXJmb3JtKGdib29sZWFuIGFzeW5jaCkKLXsKLSAgICBXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXco
KSk7Ci0gICAgR0NhbGxiYWNrIGRvd25sb2FkUmVxdWVzdENhbGxiYWNrID0gTlVMTDsKLQotICAg
IGdfb2JqZWN0X3JlZl9zaW5rKEdfT0JKRUNUKHdlYlZpZXcpKTsKLQotICAgIGdfc2lnbmFsX2Nv
bm5lY3Qod2ViVmlldywgIm5hdmlnYXRpb24tcG9saWN5LWRlY2lzaW9uLXJlcXVlc3RlZCIsCi0g
ICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKG5hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9u
X3JlcXVlc3RlZF9jYiksCi0gICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLQotICAgIGlmIChh
c3luY2gpCi0gICAgICAgIGRvd25sb2FkUmVxdWVzdENhbGxiYWNrID0gR19DQUxMQkFDSyhkb3du
bG9hZF9yZXF1ZXN0ZWRfYXN5bmNoX2NiKTsKLSAgICBlbHNlCi0gICAgICAgIGRvd25sb2FkUmVx
dWVzdENhbGxiYWNrID0gR19DQUxMQkFDSyhkb3dubG9hZF9yZXF1ZXN0ZWRfY2IpOwotCi0gICAg
Z2Jvb2xlYW4gYmVlblRoZXJlID0gRkFMU0U7Ci0gICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3
LCAiZG93bmxvYWQtcmVxdWVzdGVkIiwKLSAgICAgICAgICAgICAgICAgICAgIGRvd25sb2FkUmVx
dWVzdENhbGxiYWNrLCAmYmVlblRoZXJlKTsKLQotICAgIC8qIFByZXBhcmF0aW9uOyBGSVhNRTog
d2Ugc2hvdWxkIG1vdmUgdGhpcyBjb2RlIHRvIGEgdGVzdAotICAgICAqIHV0aWxpdGllcyBmaWxl
LCBiZWNhdXNlIHdlIGhhdmUgYSB2ZXJ5IHNpbWlsYXIgb25lIGluCi0gICAgICogdGVzdHdlYmZy
YW1lLmMgKi8KLSAgICBHRXJyb3IgKmVycm9yID0gTlVMTDsKLSAgICBnY2hhciogZmlsZW5hbWU7
Ci0gICAgaW50IGZkID0gZ19maWxlX29wZW5fdG1wKCJ3ZWJraXQtdGVzdHdlYmRvd25sb2FkLVhY
WFhYWCIsICZmaWxlbmFtZSwgJmVycm9yKTsKLSAgICBjbG9zZShmZCk7Ci0KLSAgICBpZiAoZXJy
b3IpCi0gICAgICAgIGdfY3JpdGljYWwoIkZhaWxlZCB0byBvcGVuIGEgdGVtcG9yYXJ5IGZpbGUg
Zm9yIHdyaXRpbmc6ICVzLiIsIGVycm9yLT5tZXNzYWdlKTsKLQotICAgIGlmIChnX3VubGluayhm
aWxlbmFtZSkgPT0gLTEpCi0gICAgICAgIGdfY3JpdGljYWwoIkZhaWxlZCB0byBkZWxldGUgdGhl
IHRlbXBvcmFyeSBmaWxlOiAlcy4iLCBnX3N0cmVycm9yKGVycm5vKSk7Ci0KLSAgICB0aGVEb3du
bG9hZCA9IE5VTEw7Ci0gICAgdGVtcG9yYXJ5RmlsZW5hbWUgPSBmaWxlbmFtZTsKLQotICAgIGxv
b3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xv
YWRfdXJpKHdlYlZpZXcsICJodHRwOi8vZ25vbWUub3JnLyIpOwotICAgIGdfbWFpbl9sb29wX3J1
bihsb29wKTsKLQotICAgIGdfYXNzZXJ0X2NtcGludChiZWVuVGhlcmUsID09LCBUUlVFKTsKLQot
ICAgIGdfYXNzZXJ0X2NtcGludChnX2ZpbGVfdGVzdCh0ZW1wb3JhcnlGaWxlbmFtZSwgR19GSUxF
X1RFU1RfSVNfUkVHVUxBUiksID09LCBUUlVFKTsKLQotICAgIGdfdW5saW5rKHRlbXBvcmFyeUZp
bGVuYW1lKTsKLSAgICBnX2ZyZWUodGVtcG9yYXJ5RmlsZW5hbWUpOwotICAgIHRlbXBvcmFyeUZp
bGVuYW1lID0gTlVMTDsKLQotICAgIGdfbWFpbl9sb29wX3VucmVmKGxvb3ApOwotICAgIGdfb2Jq
ZWN0X3VucmVmKHdlYlZpZXcpOwotfQotCi1zdGF0aWMgdm9pZAotdGVzdF93ZWJraXRfZG93bmxv
YWRfc3luY2godm9pZCkKLXsKLSAgICB0ZXN0X3dlYmtpdF9kb3dubG9hZF9wZXJmb3JtKEZBTFNF
KTsKLX0KLQotc3RhdGljIHZvaWQKLXRlc3Rfd2Via2l0X2Rvd25sb2FkX2FzeW5jaCh2b2lkKQot
ewotICAgIHRlc3Rfd2Via2l0X2Rvd25sb2FkX3BlcmZvcm0oVFJVRSk7Ci19Ci0KLXN0YXRpYyBn
Ym9vbGVhbiBtaW1lX3R5cGVfcG9saWN5X2RlY2lzaW9uX3JlcXVlc3RlZF9jYihXZWJLaXRXZWJW
aWV3KiB2aWV3LCBXZWJLaXRXZWJGcmFtZSogZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJl
cXVlc3QsIGNvbnN0IGNoYXIqIG1pbWVfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRXZWJQb2xpY3lEZWNpc2lvbiogZGVj
aXNpb24sIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgd2Via2l0X3dlYl9wb2xpY3lfZGVjaXNpb25f
ZG93bmxvYWQoZGVjaXNpb24pOwotICAgIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZCBp
ZGxlX3F1aXRfbG9vcF9jYihXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgR1BhcmFtU3BlYyogcHNw
ZWMsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgaWYgKHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9z
dGF0dXMod2ViX3ZpZXcpID09IFdFQktJVF9MT0FEX0ZJTklTSEVEIHx8Ci0gICAgICAgIHdlYmtp
dF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMod2ViX3ZpZXcpID09IFdFQktJVF9MT0FEX0ZBSUxF
RCkKLSAgICAgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKLX0KLQotc3RhdGljIHZvaWQKLXRl
c3Rfd2Via2l0X2Rvd25sb2FkX2RhdGEodm9pZCkKLXsKLSAgICBnYm9vbGVhbiBiZWVuVGhlcmUg
PSBGQUxTRTsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdl
YmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7Ci0K
LSAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJkb3dubG9hZC1yZXF1ZXN0ZWQiLAotICAg
ICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhkb3dubG9hZF9yZXF1ZXN0ZWRfY2IpLAotICAg
ICAgICAgICAgICAgICAgICAgJmJlZW5UaGVyZSk7Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KHdl
YlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwKLSAgICAgICAgICAgICAgICAgICAgIEdfQ0FM
TEJBQ0soaWRsZV9xdWl0X2xvb3BfY2IpLAotICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0K
LSAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJtaW1lLXR5cGUtcG9saWN5LWRlY2lzaW9u
LXJlcXVlc3RlZCIsCi0gICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKG1pbWVfdHlwZV9w
b2xpY3lfZGVjaXNpb25fcmVxdWVzdGVkX2NiKSwKLSAgICAgICAgICAgICAgICAgICAgIE5VTEwp
OwotCi0gICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLQotICAgIC8qIFdl
J3JlIHRlc3RpbmcgZm9yIGEgY3Jhc2gsIHNvIGp1c3Qgbm90IGNyYXNoaW5nIGlzIGEgcGFzcyAq
LwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh3ZWJWaWV3LCAiZGF0YTphcHBsaWNhdGlv
bi9vY3RlY3Qtc3RyZWFtLCIpOwotICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLQotICAgIGdf
YXNzZXJ0X2NtcGludChiZWVuVGhlcmUsID09LCBUUlVFKTsKLQotICAgIGdfbWFpbl9sb29wX3Vu
cmVmKGxvb3ApOwotICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwotfQotCi1zdGF0aWMgdm9p
ZCBub3RpZnlEb3dubG9hZFN0YXR1c0NhbGxiYWNrKEdPYmplY3QgKm9iamVjdCwgR1BhcmFtU3Bl
YyAqcHNwZWMsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgV2ViS2l0RG93bmxvYWQgKmRvd25sb2Fk
ID0gV0VCS0lUX0RPV05MT0FEKG9iamVjdCk7Ci0gICAgV2ViS2l0TmV0d29ya1Jlc3BvbnNlICpy
ZXNwb25zZSA9IHdlYmtpdF9kb3dubG9hZF9nZXRfbmV0d29ya19yZXNwb25zZShkb3dubG9hZCk7
Ci0gICAgU291cE1lc3NhZ2UgKm1lc3NhZ2UgPSB3ZWJraXRfbmV0d29ya19yZXNwb25zZV9nZXRf
bWVzc2FnZShyZXNwb25zZSk7Ci0KLSAgICBzd2l0Y2ggKHdlYmtpdF9kb3dubG9hZF9nZXRfc3Rh
dHVzKGRvd25sb2FkKSkgewotICAgIGNhc2UgV0VCS0lUX0RPV05MT0FEX1NUQVRVU19FUlJPUjoK
LSAgICAgICAgZ19hc3NlcnRfY21waW50KG1lc3NhZ2UtPnN0YXR1c19jb2RlLCA9PSwgNDA0KTsK
LSAgICAgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBXRUJLSVRfRE9XTkxPQURfU1RBVFVTX0ZJTklTSEVEOgotICAgIGNhc2UgV0VCS0lUX0RPV05M
T0FEX1NUQVRVU19DQU5DRUxMRUQ6Ci0gICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQot
c3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciAqc2VydmVyLCBTb3VwTWVzc2Fn
ZSAqbWVzc2FnZSwgY29uc3QgY2hhciAqcGF0aCwgR0hhc2hUYWJsZSAqcXVlcnksIFNvdXBDbGll
bnRDb250ZXh0ICpjb250ZXh0LCBncG9pbnRlciB1c2VyRGF0YSkKLXsKLSAgICBpZiAobWVzc2Fn
ZS0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgewotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0
X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09V
UF9TVEFUVVNfTk9UX0ZPVU5EKTsKLSAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNz
YWdlLT5yZXNwb25zZV9ib2R5KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfZG93bmxv
YWRfbm90X2ZvdW5kKHZvaWQpCi17Ci0gICAgU291cFNlcnZlciAqc2VydmVyID0gc291cF9zZXJ2
ZXJfbmV3KFNPVVBfU0VSVkVSX1BPUlQsIDAsIE5VTEwpOwotICAgIHNvdXBfc2VydmVyX3J1bl9h
c3luYyhzZXJ2ZXIpOwotICAgIHNvdXBfc2VydmVyX2FkZF9oYW5kbGVyKHNlcnZlciwgTlVMTCwg
c2VydmVyQ2FsbGJhY2ssIE5VTEwsIE5VTEwpOwotICAgIFNvdXBVUkkgKmJhc2VVUkkgPSBzb3Vw
X3VyaV9uZXcoImh0dHA6Ly8xMjcuMC4wLjEvIik7Ci0gICAgc291cF91cmlfc2V0X3BvcnQoYmFz
ZVVSSSwgc291cF9zZXJ2ZXJfZ2V0X3BvcnQoc2VydmVyKSk7Ci0KLSAgICBTb3VwVVJJICp1cmkg
PSBzb3VwX3VyaV9uZXdfd2l0aF9iYXNlKGJhc2VVUkksICIvZm9vIik7Ci0gICAgY2hhciAqdXJp
U3RyaW5nID0gc291cF91cmlfdG9fc3RyaW5nKHVyaSwgRkFMU0UpOwotICAgIHNvdXBfdXJpX2Zy
ZWUodXJpKTsKLQotICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7Ci0gICAg
V2ViS2l0TmV0d29ya1JlcXVlc3QgKnJlcXVlc3QgPSB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X25l
dyh1cmlTdHJpbmcpOwotICAgIGdfZnJlZSAodXJpU3RyaW5nKTsKLSAgICBXZWJLaXREb3dubG9h
ZCAqZG93bmxvYWQgPSB3ZWJraXRfZG93bmxvYWRfbmV3KHJlcXVlc3QpOwotICAgIGdfb2JqZWN0
X3VucmVmKHJlcXVlc3QpOwotCi0gICAgd2Via2l0X2Rvd25sb2FkX3NldF9kZXN0aW5hdGlvbl91
cmkoZG93bmxvYWQsICJmaWxlOi8vL3RtcC9mb28iKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGRv
d25sb2FkLCAibm90aWZ5OjpzdGF0dXMiLCBHX0NBTExCQUNLKG5vdGlmeURvd25sb2FkU3RhdHVz
Q2FsbGJhY2spLCBOVUxMKTsKLQotICAgIHdlYmtpdF9kb3dubG9hZF9zdGFydChkb3dubG9hZCk7
Ci0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAgZ19vYmplY3RfdW5yZWYoZG93bmxv
YWQpOwotICAgIGdfbWFpbl9sb29wX3VucmVmKGxvb3ApOwotICAgIHNvdXBfdXJpX2ZyZWUoYmFz
ZVVSSSk7Ci0gICAgZ19vYmplY3RfdW5yZWYoc2VydmVyKTsKLX0KLQotaW50IG1haW4oaW50IGFy
Z2MsIGNoYXIqKiBhcmd2KQotewotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxM
KTsKLQotICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0g
ICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2Rvd25sb2FkL2NyZWF0ZSIsIHRlc3Rfd2Via2l0
X2Rvd25sb2FkX2NyZWF0ZSk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2Rvd25sb2Fk
L3N5bmNoIiwgdGVzdF93ZWJraXRfZG93bmxvYWRfc3luY2gpOwotICAgIGdfdGVzdF9hZGRfZnVu
YygiL3dlYmtpdC9kb3dubG9hZC9hc3luY2giLCB0ZXN0X3dlYmtpdF9kb3dubG9hZF9hc3luY2gp
OwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9kb3dubG9hZC9kYXRhIiwgdGVzdF93ZWJr
aXRfZG93bmxvYWRfZGF0YSk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2Rvd25sb2Fk
L25vdC1mb3VuZCIsIHRlc3Rfd2Via2l0X2Rvd25sb2FkX25vdF9mb3VuZCk7Ci0gICAgcmV0dXJu
IGdfdGVzdF9ydW4gKCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90
ZXN0ZmF2aWNvbmRhdGFiYXNlLmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0ZmF2aWNv
bmRhdGFiYXNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiYzYwNmE2MTc2MTg0
YWNjNzViNzEzYzEwYTEyNGJhZjEzMDM2OGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGZhdmljb25kYXRh
YmFzZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgInRlc3Rf
dXRpbHMuaCIKLSNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4K
LSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+Ci0KLWNvbnN0
IGludCBnSWNvblNpemUgPSAxNjsKLQotR01haW5Mb29wICpsb29wOwotY2hhciAqYmFzZVVSSTsK
LQotc3RhdGljIHZvaWQKLXNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIgKnNlcnZlciwgU291cE1l
c3NhZ2UgKm1lc3NhZ2UsIGNvbnN0IGNoYXIgKnBhdGgsIEdIYXNoVGFibGUgKnF1ZXJ5LCBTb3Vw
Q2xpZW50Q29udGV4dCAqY29udGV4dCwgdm9pZCAqZGF0YSkKLXsKLSAgICBpZiAobWVzc2FnZS0+
bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgewotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0
YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9T
VEFUVVNfT0spOwotCi0gICAgY2hhciAqY29udGVudHM7Ci0gICAgZ3NpemUgbGVuZ3RoOwotICAg
IGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2Zhdmljb24uaWNvIikpIHsKLSAgICAgICAgR0Vycm9y
ICplcnJvciA9IE5VTEw7Ci0KLSAgICAgICAgZ19maWxlX2dldF9jb250ZW50cygiYmxhbmsuaWNv
IiwgJmNvbnRlbnRzLCAmbGVuZ3RoLCAmZXJyb3IpOwotICAgICAgICBnX2Fzc2VydCghZXJyb3Ip
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvbnRlbnRzID0gZ19zdHJkdXAoIjxodG1sPjxib2R5
PnRlc3Q8L2JvZHk+PC9odG1sPiIpOwotICAgICAgICBsZW5ndGggPSBzdHJsZW4oY29udGVudHMp
OwotICAgIH0KLQotICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25z
ZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBjb250ZW50cywgbGVuZ3RoKTsKLSAgICBzb3VwX21l
c3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKLX0KLQotc3RhdGlj
IHZvaWQgZGVsZXRlRGF0YWJhc2VGaWxlSWZFeGlzdHMoY29uc3QgY2hhciAqZGF0YWJhc2VQYXRo
KQotewotICAgIGlmICghZ19maWxlX3Rlc3QoZGF0YWJhc2VQYXRoLCBHX0ZJTEVfVEVTVF9JU19E
SVIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjaGFyICpkYXRhYmFzZUZpbGVuYW1lID0gZ19i
dWlsZF9maWxlbmFtZShkYXRhYmFzZVBhdGgsICJXZWJwYWdlSWNvbnMuZGIiLCBOVUxMKTsKLSAg
ICBpZiAoZ191bmxpbmsoZGF0YWJhc2VGaWxlbmFtZSkgPT0gLTEpIHsKLSAgICAgICAgZ19mcmVl
KGRhdGFiYXNlRmlsZW5hbWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZ19mcmVl
KGRhdGFiYXNlRmlsZW5hbWUpOwotICAgIGdfcm1kaXIoZGF0YWJhc2VQYXRoKTsKLX0KLQotc3Rh
dGljIHZvaWQgdGVzdFdlYktpdEZhdmljb25EYXRhYmFzZVNldFBhdGgoKQotewotICAgIGNoYXIg
KmRhdGFiYXNlUGF0aCA9IGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfdG1wX2RpcigpLCAid2Via2l0
LXRlc3RmYXZpY29uZGF0YWJhc2UiLCBOVUxMKTsKLSAgICBkZWxldGVEYXRhYmFzZUZpbGVJZkV4
aXN0cyhkYXRhYmFzZVBhdGgpOwotCi0gICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlICpkYXRhYmFz
ZSA9IHdlYmtpdF9nZXRfZmF2aWNvbl9kYXRhYmFzZSgpOwotICAgIHdlYmtpdF9mYXZpY29uX2Rh
dGFiYXNlX3NldF9wYXRoKGRhdGFiYXNlLCBkYXRhYmFzZVBhdGgpOwotCi0gICAgZ19hc3NlcnRf
Y21wc3RyKGRhdGFiYXNlUGF0aCwgPT0sIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9wYXRo
KGRhdGFiYXNlKSk7Ci0KLSAgICBnX2ZyZWUoZGF0YWJhc2VQYXRoKTsKLX0KLQotLy8gU2VlIHRo
ZSBjb21tZW50IGluIG1haW4oKSBmdW5jdGlvbiB0aGF0IGdvZXMgd2l0aCB0aGlzIHNhbWUgZ3Vh
cmQuCi0jaWZkZWYgTkRFQlVHCi0KLXN0YXRpYyB2b2lkIGZhdmljb25EYXRhYmFzZUdldFZhbGlk
RmF2aWNvbkNhbGxiYWNrKEdPYmplY3QgKnNvdXJjZU9iamVjdCwgR0FzeW5jUmVzdWx0ICpyZXN1
bHQsIHZvaWQgKnVzZXJEYXRhKQotewotICAgIGdib29sZWFuICpiZWVuSGVyZSA9IChnYm9vbGVh
biopdXNlckRhdGE7Ci0gICAgR0Vycm9yICplcnJvciA9IE5VTEw7Ci0gICAgR2RrUGl4YnVmICpp
Y29uID0gd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fcGl4YnVmX2ZpbmlzaChX
RUJLSVRfRkFWSUNPTl9EQVRBQkFTRShzb3VyY2VPYmplY3QpLCByZXN1bHQsICZlcnJvcik7Ci0g
ICAgZ19hc3NlcnQoaWNvbik7Ci0gICAgZ19vYmplY3RfdW5yZWYoaWNvbik7Ci0KLSAgICAqYmVl
bkhlcmUgPSBUUlVFOwotCi0gICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKLX0KLQotc3RhdGlj
IHZvaWQgZmF2aWNvbkRhdGFiYXNlR2V0SW52YWxpZEZhdmljb25DYWxsYmFjayhHT2JqZWN0ICpz
b3VyY2VPYmplY3QsIEdBc3luY1Jlc3VsdCAqcmVzdWx0LCB2b2lkICp1c2VyRGF0YSkKLXsKLSAg
ICBnYm9vbGVhbiAqYmVlbkhlcmUgPSAoZ2Jvb2xlYW4qKXVzZXJEYXRhOwotICAgIEdFcnJvciAq
ZXJyb3IgPSBOVUxMOwotICAgIEdka1BpeGJ1ZiAqaWNvbiA9IHdlYmtpdF9mYXZpY29uX2RhdGFi
YXNlX2dldF9mYXZpY29uX3BpeGJ1Zl9maW5pc2goV0VCS0lUX0ZBVklDT05fREFUQUJBU0Uoc291
cmNlT2JqZWN0KSwgcmVzdWx0LCAmZXJyb3IpOwotICAgIGdfYXNzZXJ0KCFpY29uKTsKLQotICAg
ICpiZWVuSGVyZSA9IFRSVUU7Ci0KLSAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwotfQotCi1z
dGF0aWMgdm9pZCBmYXZpY29uRGF0YWJhc2VHZXRGYXZpY29uQ2FuY2VsbGVkQ2FsbGJhY2soR09i
amVjdCAqc291cmNlT2JqZWN0LCBHQXN5bmNSZXN1bHQgKnJlc3VsdCwgdm9pZCAqdXNlckRhdGEp
Ci17Ci0gICAgZ2Jvb2xlYW4gKmJlZW5IZXJlID0gKGdib29sZWFuKil1c2VyRGF0YTsKLSAgICBH
RXJyb3IgKmVycm9yID0gTlVMTDsKLSAgICBHZGtQaXhidWYgKmljb24gPSB3ZWJraXRfZmF2aWNv
bl9kYXRhYmFzZV9nZXRfZmF2aWNvbl9waXhidWZfZmluaXNoKFdFQktJVF9GQVZJQ09OX0RBVEFC
QVNFKHNvdXJjZU9iamVjdCksIHJlc3VsdCwgJmVycm9yKTsKLSAgICBnX2Fzc2VydCghaWNvbik7
Ci0gICAgZ19hc3NlcnQoZXJyb3IgJiYgZ19lcnJvcl9tYXRjaGVzKGVycm9yLCBHX0lPX0VSUk9S
LCBHX0lPX0VSUk9SX0NBTkNFTExFRCkpOwotCi0gICAgKmJlZW5IZXJlID0gVFJVRTsKLQotICAg
IGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBxdWl0TWFp
bkxvb3BJZkxvYWRDb21wbGV0ZWQoZ2Jvb2xlYW4gKmljb25PclBhZ2VMb2FkZWQpCi17Ci0gICAg
aWYgKCppY29uT3JQYWdlTG9hZGVkKQotICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwot
ICAgIGVsc2UKLSAgICAgICAgKmljb25PclBhZ2VMb2FkZWQgPSBUUlVFOwotfQotCi1zdGF0aWMg
dm9pZCBpZGxlUXVpdExvb3BDYWxsYmFjayhXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3LCBHUGFyYW1T
cGVjICpwYXJhbVNwZWMsIGdib29sZWFuICppY29uT3JQYWdlTG9hZGVkKQotewotICAgIFdlYktp
dExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJW
aWV3KTsKLQotICAgIGlmIChzdGF0dXMgPT0gV0VCS0lUX0xPQURfRklOSVNIRUQgfHwgc3RhdHVz
ID09IFdFQktJVF9MT0FEX0ZBSUxFRCkKLSAgICAgICAgcXVpdE1haW5Mb29wSWZMb2FkQ29tcGxl
dGVkKGljb25PclBhZ2VMb2FkZWQpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3SWNv
bkxvYWRlZChXZWJLaXRGYXZpY29uRGF0YWJhc2UgKmRhdGFiYXNlLCBjb25zdCBjaGFyICpmcmFt
ZVVSSSwgZ2Jvb2xlYW4gKmljb25PclBhZ2VMb2FkZWQpCi17Ci0gICAgcXVpdE1haW5Mb29wSWZM
b2FkQ29tcGxldGVkKGljb25PclBhZ2VMb2FkZWQpOwotfQotCi1zdGF0aWMgdm9pZCBsb2FkVVJJ
KGNvbnN0IGNoYXIgKnVyaSkKLXsKLSAgICBXZWJLaXRXZWJWaWV3ICp2aWV3ID0gV0VCS0lUX1dF
Ql9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZ2Jvb2xlYW4gaWNvbk9yUGFnZUxv
YWRlZCA9IEZBTFNFOwotCi0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHZpZXcsIHVyaSk7
Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KHZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19D
QUxMQkFDSyhpZGxlUXVpdExvb3BDYWxsYmFjayksICZpY29uT3JQYWdlTG9hZGVkKTsKLSAgICBn
X3NpZ25hbF9jb25uZWN0KHZpZXcsICJpY29uLWxvYWRlZCIsIEdfQ0FMTEJBQ0sod2Via2l0V2Vi
Vmlld0ljb25Mb2FkZWQpLCAmaWNvbk9yUGFnZUxvYWRlZCk7Ci0KLSAgICBnX21haW5fbG9vcF9y
dW4obG9vcCk7Ci0KLSAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQodmll
dywgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgJmljb25PclBhZ2VMb2FkZWQpOwot
fQotCi1zdGF0aWMgZ2Jvb2xlYW4gZmF2aWNvbkRhdGFiYXNlR2V0VmFsaWRGYXZpY29uSWRsZSh2
b2lkICp1c2VyRGF0YSkKLXsKLSAgICB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNv
bl9waXhidWYod2Via2l0X2dldF9mYXZpY29uX2RhdGFiYXNlKCksIGJhc2VVUkksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdJY29uU2l6ZSwgZ0ljb25T
aXplLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmYXZpY29uRGF0YWJhc2VHZXRWYWxpZEZhdmljb25DYWxsYmFjaywgdXNlckRhdGEpOwotICAg
IHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGdib29sZWFuIGZhdmljb25EYXRhYmFzZUdldElu
dmFsaWRGYXZpY29uSWRsZSh2b2lkICp1c2VyRGF0YSkKLXsKLSAgICB3ZWJraXRfZmF2aWNvbl9k
YXRhYmFzZV9nZXRfZmF2aWNvbl9waXhidWYod2Via2l0X2dldF9mYXZpY29uX2RhdGFiYXNlKCks
ICJodHRwOi8vd3d3LndlYmtpdGd0ay5vcmcvIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ0ljb25TaXplLCBnSWNvblNpemUsIE5VTEwsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhdmljb25EYXRhYmFzZUdl
dEludmFsaWRGYXZpY29uQ2FsbGJhY2ssIHVzZXJEYXRhKTsKLSAgICByZXR1cm4gRkFMU0U7Ci19
Ci0KLXN0YXRpYyBnYm9vbGVhbiBmYXZpY29uRGF0YWJhc2VHZXRGYXZpY29uQ2FuY2VsbGVkSWRs
ZSh2b2lkICp1c2VyRGF0YSkKLXsKLSAgICBHQ2FuY2VsbGFibGUgKmNhbmNlbGxhYmxlID0gZ19j
YW5jZWxsYWJsZV9uZXcoKTsKLSAgICB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNv
bl9waXhidWYod2Via2l0X2dldF9mYXZpY29uX2RhdGFiYXNlKCksIGJhc2VVUkksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdJY29uU2l6ZSwgZ0ljb25T
aXplLCBjYW5jZWxsYWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNvbkNhbmNlbGxlZENhbGxiYWNrLCB1c2Vy
RGF0YSk7Ci0gICAgZ19jYW5jZWxsYWJsZV9jYW5jZWwoY2FuY2VsbGFibGUpOwotICAgIGdfb2Jq
ZWN0X3VucmVmKGNhbmNlbGxhYmxlKTsKLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2
b2lkIHRlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VHZXRGYXZpY29uKCkKLXsKLSAgICBnYm9vbGVh
biBiZWVuVG9JY29uQ2FsbGJhY2s7Ci0KLSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEws
IFRSVUUpOwotCi0gICAgLyogTG9hZCB1cmkgdG8gbWFrZSBzdXJlIGZhdmljb24gaXMgYWRkZWQg
dG8gZGF0YWJhc2UuICovCi0gICAgbG9hZFVSSShiYXNlVVJJKTsKLQotICAgIGJlZW5Ub0ljb25D
YWxsYmFjayA9IEZBTFNFOwotICAgIGdfaWRsZV9hZGQoKEdTb3VyY2VGdW5jKWZhdmljb25EYXRh
YmFzZUdldFZhbGlkRmF2aWNvbklkbGUsICZiZWVuVG9JY29uQ2FsbGJhY2spOwotICAgIGdfbWFp
bl9sb29wX3J1bihsb29wKTsKLSAgICBnX2Fzc2VydChiZWVuVG9JY29uQ2FsbGJhY2spOwotCi0g
ICAgYmVlblRvSWNvbkNhbGxiYWNrID0gRkFMU0U7Ci0gICAgZ19pZGxlX2FkZCgoR1NvdXJjZUZ1
bmMpZmF2aWNvbkRhdGFiYXNlR2V0SW52YWxpZEZhdmljb25JZGxlLCAmYmVlblRvSWNvbkNhbGxi
YWNrKTsKLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0gICAgZ19hc3NlcnQoYmVlblRvSWNv
bkNhbGxiYWNrKTsKLQotICAgIGJlZW5Ub0ljb25DYWxsYmFjayA9IEZBTFNFOwotICAgIGdfaWRs
ZV9hZGQoKEdTb3VyY2VGdW5jKWZhdmljb25EYXRhYmFzZUdldEZhdmljb25DYW5jZWxsZWRJZGxl
LCAmYmVlblRvSWNvbkNhbGxiYWNrKTsKLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0gICAg
Z19hc3NlcnQoYmVlblRvSWNvbkNhbGxiYWNrKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYktp
dEZhdmljb25EYXRhYmFzZUdldEZhdmljb25VUkkoKQotewotICAgIGNoYXIgKmljb25VUkkgPSB3
ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl91cmkod2Via2l0X2dldF9mYXZpY29u
X2RhdGFiYXNlKCksIGJhc2VVUkkpOwotICAgIGNoYXIgKmV4cGVjdGVkVVJJID0gZ19zdHJkdXBf
cHJpbnRmKCIlc2Zhdmljb24uaWNvIiwgYmFzZVVSSSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKGlj
b25VUkksID09LCBleHBlY3RlZFVSSSk7Ci0gICAgZ19mcmVlKGV4cGVjdGVkVVJJKTsKLSAgICBn
X2ZyZWUoaWNvblVSSSk7Ci19Ci0KLSNlbmRpZgotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViS2l0RmF2
aWNvbkRhdGFiYXNlUmVtb3ZlQWxsKHZvaWQpCi17Ci0gICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNl
ICpkYXRhYmFzZSA9IHdlYmtpdF9nZXRfZmF2aWNvbl9kYXRhYmFzZSgpOwotICAgIHdlYmtpdF9m
YXZpY29uX2RhdGFiYXNlX2NsZWFyKGRhdGFiYXNlKTsKLSAgICBjaGFyICppY29uVVJJID0gd2Vi
a2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fdXJpKGRhdGFiYXNlLCBiYXNlVVJJKTsK
LSAgICBnX2Fzc2VydCghaWNvblVSSSk7Ci0gICAgZ19mcmVlKGljb25VUkkpOwotfQotCi1zdGF0
aWMgdm9pZCB0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlQ2xvc2VEYXRhYmFzZSh2b2lkKQotewot
ICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSAqZGF0YWJhc2UgPSB3ZWJraXRfZ2V0X2Zhdmljb25f
ZGF0YWJhc2UoKTsKLSAgICBjaGFyICpkYXRhYmFzZVBhdGggPSBnX3N0cmR1cCh3ZWJraXRfZmF2
aWNvbl9kYXRhYmFzZV9nZXRfcGF0aChkYXRhYmFzZSkpOwotICAgIHdlYmtpdF9mYXZpY29uX2Rh
dGFiYXNlX3NldF9wYXRoKGRhdGFiYXNlLCAwKTsKLSAgICBkZWxldGVEYXRhYmFzZUZpbGVJZkV4
aXN0cyhkYXRhYmFzZVBhdGgpOwotICAgIGdfZnJlZShkYXRhYmFzZVBhdGgpOwotfQotCi1pbnQg
bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywg
JmFyZ3YsIE5VTEwpOwotCi0gICAgLyogVGhpcyBob3BlZnVsbHkgbWFrZXMgdGhlIHRlc3QgaW5k
ZXBlbmRlbnQgb2YgdGhlIHBhdGggaXQncyBjYWxsZWQgZnJvbS4gKi8KLSAgICB0ZXN0dXRpbHNf
cmVsYXRpdmVfY2hkaXIoIlNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Jlc291cmNlcy90ZXN0Lmh0
bWwiLCBhcmd2WzBdKTsKLQotICAgIFNvdXBTZXJ2ZXIgKnNlcnZlciA9IHNvdXBfc2VydmVyX25l
dyhTT1VQX1NFUlZFUl9QT1JULCAwLCBOVUxMKTsKLSAgICBzb3VwX3NlcnZlcl9ydW5fYXN5bmMo
c2VydmVyKTsKLQotICAgIHNvdXBfc2VydmVyX2FkZF9oYW5kbGVyKHNlcnZlciwgTlVMTCwgc2Vy
dmVyQ2FsbGJhY2ssIE5VTEwsIE5VTEwpOwotCi0gICAgU291cFVSSSAqc291cFVSSSA9IHNvdXBf
dXJpX25ldygiaHR0cDovLzEyNy4wLjAuMS8iKTsKLSAgICBzb3VwX3VyaV9zZXRfcG9ydChzb3Vw
VVJJLCBzb3VwX3NlcnZlcl9nZXRfcG9ydChzZXJ2ZXIpKTsKLQotICAgIGJhc2VVUkkgPSBzb3Vw
X3VyaV90b19zdHJpbmcoc291cFVSSSwgRkFMU0UpOwotICAgIHNvdXBfdXJpX2ZyZWUoc291cFVS
SSk7Ci0KLSAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwot
ICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9mYXZpY29uZGF0YWJhc2Uvc2V0LXBhdGgiLCB0
ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlU2V0UGF0aCk7Ci0KLSAgICAvLyBUaGVzZSB0d28gdGVz
dHMgd2lsbCB0cmlnZ2VyIGFuIEFTU0VSVElPTiBvbiBkZWJ1ZyBidWlsZHMgZHVlCi0gICAgLy8g
dG8gaHR0cDovL3dlYmtpdC5vcmcvYi82NzU4Mi4gUmVtb3ZlIHRoZSBndWFyZHMgb25jZSB0aGUg
YnVnIGlzIGZpeGVkLgotI2lmZGVmIE5ERUJVRwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtp
dC9mYXZpY29uZGF0YWJhc2UvZ2V0LWZhdmljb24iLCB0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNl
R2V0RmF2aWNvbik7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2Zhdmljb25kYXRhYmFz
ZS9nZXQtZmF2aWNvbi11cmkiLCB0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNvblVS
SSk7Ci0jZW5kaWYKLQotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9mYXZpY29uZGF0YWJh
c2UvcmVtb3ZlLWFsbCIsIHRlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VSZW1vdmVBbGwpOwotICAg
IGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9mYXZpY29uZGF0YWJhc2UvY2xvc2UtZGIiLCB0ZXN0
V2ViS2l0RmF2aWNvbkRhdGFiYXNlQ2xvc2VEYXRhYmFzZSk7Ci0KLSAgICByZXR1cm4gZ190ZXN0
X3J1bigpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGdsb2Jh
bHMuYyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RnbG9iYWxzLmMKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDRiOWVjNGZjZjVkOGE2NjBjNGQ4NDlkZTA1OGU5MWE5NWE1ZmUz
NzcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdC9ndGsvdGVzdHMvdGVzdGdsb2JhbHMuYworKysgL2Rldi9udWxsCkBAIC0xLDExMCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIENvbGxhYm9yYSBMdGQuCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8bGlic291cC9zb3Vw
Lmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgotCi0vLyBNYWtlIHN1cmUgdGhlIHNlc3Np
b24gaXMgaW5pdGlhbGl6ZWQgcHJvcGVybHkgd2hlbiB3ZWJraXRfZ2V0X2RlZmF1bHRfc2Vzc2lv
bigpIGlzIGNhbGxlZC4KLXN0YXRpYyB2b2lkIHRlc3RfZ2xvYmFsc19kZWZhdWx0X3Nlc3Npb24o
KQotewotICAgIGdfdGVzdF9idWcoIjM2NzU0Iik7Ci0KLSAgICBTb3VwU2Vzc2lvbiogc2Vzc2lv
biA9IHdlYmtpdF9nZXRfZGVmYXVsdF9zZXNzaW9uKCk7Ci0gICAgc291cF9zZXNzaW9uX3JlbW92
ZV9mZWF0dXJlX2J5X3R5cGUoc2Vzc2lvbiwgV0VCS0lUX1RZUEVfU09VUF9BVVRIX0RJQUxPRyk7
Ci0KLSAgICAvLyBUaGlzIG1ha2VzIHN1cmUgb3VyIGluaXRpYWxpemF0aW9uIHJhbi4KLSAgICBn
X2Fzc2VydChzb3VwX3Nlc3Npb25fZ2V0X2ZlYXR1cmUoc2Vzc2lvbiwgU09VUF9UWVBFX0NPTlRF
TlRfREVDT0RFUikgIT0gTlVMTCk7Ci0KLSAgICAvLyBDcmVhdGluZyBhIFdlYlZpZXcgc2hvdWxk
IG1ha2Ugc3VyZSB0aGUgc2Vzc2lvbiBpcwotICAgIC8vIGluaXRpYWxpemVkLCBhbmQgbm90IG1l
c3Mgd2l0aCBvdXIgY2hhbmdlcy4KLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldyA9IFdFQktJ
VF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5r
KHdlYl92aWV3KTsKLSAgICBnX29iamVjdF91bnJlZih3ZWJfdmlldyk7Ci0KLSAgICAvLyBUaGVz
ZSBtYWtlcyBzdXJlIG91ciBtb2RpZmljYXRpb24gd2FzIGtlcHQuCi0gICAgZ19hc3NlcnQoc291
cF9zZXNzaW9uX2dldF9mZWF0dXJlKHNlc3Npb24sIFNPVVBfVFlQRV9DT05URU5UX0RFQ09ERVIp
ICE9IE5VTEwpOwotICAgIGdfYXNzZXJ0KHNvdXBfc2Vzc2lvbl9nZXRfZmVhdHVyZShzZXNzaW9u
LCBXRUJLSVRfVFlQRV9TT1VQX0FVVEhfRElBTE9HKSA9PSBOVUxMKTsKLX0KLQotc3RhdGljIHZv
aWQgdGVzdF9nbG9iYWxzX3NlY3VyaXR5X3BvbGljeSgpCi17Ci0gICAgLy8gQ2hlY2sgZGVmYXVs
dCBwb2xpY3kgZm9yIHdlbGwga25vd24gc2NoZW1lcy4KLSAgICBXZWJLaXRTZWN1cml0eVBvbGlj
eSBwb2xpY3kgPSB3ZWJraXRfZ2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiaHR0
cCIpOwotICAgIGd1aW50IG1hc2sgPSBXRUJLSVRfU0VDVVJJVFlfUE9MSUNZX0NPUlNfRU5BQkxF
RDsKLSAgICBnX2Fzc2VydF9jbXB1aW50KHBvbGljeSAmIG1hc2ssID09LCBtYXNrKTsKLQotICAg
IHBvbGljeSA9IHdlYmtpdF9nZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJodHRw
cyIpOwotICAgIG1hc2sgPSBXRUJLSVRfU0VDVVJJVFlfUE9MSUNZX1NFQ1VSRSB8IFdFQktJVF9T
RUNVUklUWV9QT0xJQ1lfQ09SU19FTkFCTEVEOwotICAgIGdfYXNzZXJ0X2NtcHVpbnQocG9saWN5
ICYgbWFzaywgPT0sIG1hc2spOwotCi0gICAgcG9saWN5ID0gd2Via2l0X2dldF9zZWN1cml0eV9w
b2xpY3lfZm9yX3VyaV9zY2hlbWUoImZpbGUiKTsKLSAgICBtYXNrID0gV0VCS0lUX1NFQ1VSSVRZ
X1BPTElDWV9MT0NBTDsKLSAgICBnX2Fzc2VydF9jbXB1aW50KHBvbGljeSAmIG1hc2ssID09LCBt
YXNrKTsKLQotICAgIHBvbGljeSA9IHdlYmtpdF9nZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlf
c2NoZW1lKCJkYXRhIik7Ci0gICAgbWFzayA9IFdFQktJVF9TRUNVUklUWV9QT0xJQ1lfTk9fQUND
RVNTX1RPX09USEVSX1NDSEVNRSB8IFdFQktJVF9TRUNVUklUWV9QT0xJQ1lfU0VDVVJFOwotICAg
IGdfYXNzZXJ0X2NtcHVpbnQocG9saWN5ICYgbWFzaywgPT0sIG1hc2spOwotCi0gICAgcG9saWN5
ID0gd2Via2l0X2dldF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUoImFib3V0Iik7Ci0g
ICAgbWFzayA9IFdFQktJVF9TRUNVUklUWV9QT0xJQ1lfTk9fQUNDRVNTX1RPX09USEVSX1NDSEVN
RSB8IFdFQktJVF9TRUNVUklUWV9QT0xJQ1lfU0VDVVJFIHwgV0VCS0lUX1NFQ1VSSVRZX1BPTElD
WV9FTVBUWV9ET0NVTUVOVDsKLSAgICBnX2Fzc2VydF9jbXB1aW50KHBvbGljeSAmIG1hc2ssID09
LCBtYXNrKTsKLQotICAgIC8vIEN1c3RvbSBzY2hlbWUuCi0gICAgcG9saWN5ID0gd2Via2l0X2dl
dF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUoImZvbyIpOwotICAgIGdfYXNzZXJ0KCFw
b2xpY3kpOwotCi0gICAgcG9saWN5IHw9IFdFQktJVF9TRUNVUklUWV9QT0xJQ1lfTE9DQUw7Ci0g
ICAgd2Via2l0X3NldF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUoImZvbyIsIHBvbGlj
eSk7Ci0gICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfZ2V0X3NlY3VyaXR5X3BvbGljeV9mb3Jf
dXJpX3NjaGVtZSgiZm9vIiksID09LCBwb2xpY3kpOwotCi0gICAgcG9saWN5IHw9IFdFQktJVF9T
RUNVUklUWV9QT0xJQ1lfTk9fQUNDRVNTX1RPX09USEVSX1NDSEVNRTsKLSAgICB3ZWJraXRfc2V0
X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiZm9vIiwgcG9saWN5KTsKLSAgICBnX2Fz
c2VydF9jbXB1aW50KHdlYmtpdF9nZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJm
b28iKSwgPT0sIHBvbGljeSk7Ci0KLSAgICBwb2xpY3kgfD0gV0VCS0lUX1NFQ1VSSVRZX1BPTElD
WV9ESVNQTEFZX0lTT0xBVEVEOwotICAgIHdlYmtpdF9zZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91
cmlfc2NoZW1lKCJmb28iLCBwb2xpY3kpOwotICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2dl
dF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUoImZvbyIpLCA9PSwgcG9saWN5KTsKLQot
ICAgIHBvbGljeSB8PSBXRUJLSVRfU0VDVVJJVFlfUE9MSUNZX1NFQ1VSRTsKLSAgICB3ZWJraXRf
c2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiZm9vIiwgcG9saWN5KTsKLSAgICBn
X2Fzc2VydF9jbXB1aW50KHdlYmtpdF9nZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1l
KCJmb28iKSwgPT0sIHBvbGljeSk7Ci0KLSAgICBwb2xpY3kgfD0gV0VCS0lUX1NFQ1VSSVRZX1BP
TElDWV9DT1JTX0VOQUJMRUQ7Ci0gICAgd2Via2l0X3NldF9zZWN1cml0eV9wb2xpY3lfZm9yX3Vy
aV9zY2hlbWUoImZvbyIsIHBvbGljeSk7Ci0gICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfZ2V0
X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiZm9vIiksID09LCBwb2xpY3kpOwotCi0g
ICAgcG9saWN5IHw9IFdFQktJVF9TRUNVUklUWV9QT0xJQ1lfRU1QVFlfRE9DVU1FTlQ7Ci0gICAg
d2Via2l0X3NldF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUoImZvbyIsIHBvbGljeSk7
Ci0gICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfZ2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJp
X3NjaGVtZSgiZm9vIiksID09LCBwb2xpY3kpOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hh
cioqIGFyZ3YpCi17Ci0gICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOwotCi0g
ICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKLSAgICBnX3Rl
c3RfYWRkX2Z1bmMoIi93ZWJraXQvZ2xvYmFscy9kZWZhdWx0X3Nlc3Npb24iLAotICAgICAgICAg
ICAgICAgICAgICB0ZXN0X2dsb2JhbHNfZGVmYXVsdF9zZXNzaW9uKTsKLSAgICBnX3Rlc3RfYWRk
X2Z1bmMoIi93ZWJraXQvZ2xvYmFscy9zZWN1cml0eS1wb2xpY3kiLAotICAgICAgICAgICAgICAg
ICAgICB0ZXN0X2dsb2JhbHNfc2VjdXJpdHlfcG9saWN5KTsKLSAgICByZXR1cm4gZ190ZXN0X3J1
bigpOwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0aGl0dGVz
dHJlc3VsdC5jIGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGhpdHRlc3RyZXN1bHQuYwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JmMDExMDQ4M2ExMDA3Y2I2Zjk1MmRkYmMz
ZWJjMDA1N2E0OWFlZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0aGl0dGVzdHJlc3VsdC5jCisrKyAvZGV2
L251bGwKQEAgLTEsMTY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSWdhbGlh
IFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiwxIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUg
PHVuaXN0ZC5oPgotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dl
YmtpdC5oPgotCi10eXBlZGVmIHN0cnVjdCB7Ci0gIGNoYXIqIGRhdGE7Ci0gIGd1aW50IGZsYWc7
Ci19IFRlc3RJbmZvOwotCi1zdGF0aWMgR01haW5Mb29wKiBsb29wOwotCi10eXBlZGVmIHN0cnVj
dCB7Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldzsKLSAgICBUZXN0SW5mbyogaW5mbzsKLX0g
SGl0VGVzdFJlc3VsdEZpeHR1cmU7Ci0KLVRlc3RJbmZvKgotdGVzdF9pbmZvX25ldyhjb25zdCBj
aGFyKiBkYXRhLCBndWludCBmbGFnKQotewotICAgIFRlc3RJbmZvKiBpbmZvOwotCi0gICAgaW5m
byA9IGdfc2xpY2VfbmV3KFRlc3RJbmZvKTsKLSAgICBpbmZvLT5kYXRhID0gZ19zdHJkdXAoZGF0
YSk7Ci0gICAgaW5mby0+ZmxhZyA9IGZsYWc7Ci0KLSAgICByZXR1cm4gaW5mbzsKLX0KLQotdm9p
ZAotdGVzdF9pbmZvX2Rlc3Ryb3koVGVzdEluZm8qIGluZm8pCi17Ci0gICAgZ19mcmVlKGluZm8t
PmRhdGEpOwotICAgIGdfc2xpY2VfZnJlZShUZXN0SW5mbywgaW5mbyk7Ci19Ci0KLXN0YXRpYyB2
b2lkIGhpdF90ZXN0X3Jlc3VsdF9maXh0dXJlX3NldHVwKEhpdFRlc3RSZXN1bHRGaXh0dXJlKiBm
aXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZml4dHVyZS0+d2ViVmlldyA9IFdF
QktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0X3JlZl9z
aW5rKGZpeHR1cmUtPndlYlZpZXcpOwotICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwg
VFJVRSk7Ci0gICAgZml4dHVyZS0+aW5mbyA9IChUZXN0SW5mbyopZGF0YTsKLX0KLQotc3RhdGlj
IHZvaWQgaGl0X3Rlc3RfcmVzdWx0X2ZpeHR1cmVfdGVhcmRvd24oSGl0VGVzdFJlc3VsdEZpeHR1
cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBnX29iamVjdF91bnJlZihm
aXh0dXJlLT53ZWJWaWV3KTsKLSAgICBnX21haW5fbG9vcF91bnJlZihsb29wKTsKLSAgICB0ZXN0
X2luZm9fZGVzdHJveShmaXh0dXJlLT5pbmZvKTsKLX0KLQotc3RhdGljIHZvaWQKLWxvYWRfc3Rh
dHVzX2NiKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsCi0gICAgICAgICAgICAgICBHUGFyYW1TcGVj
KiBzcGVjLAotICAgICAgICAgICAgICAgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBXZWJLaXRMb2Fk
U3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMod2ViVmlldyk7
Ci0gICAgVGVzdEluZm8qIGluZm8gPSAoVGVzdEluZm8qKWRhdGE7Ci0KLSAgICBpZiAoc3RhdHVz
ID09IFdFQktJVF9MT0FEX0ZJTklTSEVEKSB7Ci0gICAgICAgIFdlYktpdEhpdFRlc3RSZXN1bHQq
IHJlc3VsdDsKLSAgICAgICAgZ3VpbnQgY29udGV4dDsKLSAgICAgICAgR2RrRXZlbnQqIGV2ZW50
ID0gZ2RrX2V2ZW50X25ldyhHREtfQlVUVE9OX1BSRVNTKTsKLSAgICAgICAgV2ViS2l0RE9NTm9k
ZSogbm9kZTsKLSAgICAgICAgZ2ludCB4LCB5OwotCi0gICAgICAgIC8qIENsb3NlIGVub3VnaCB0
byAwLDAgKi8KLSAgICAgICAgZXZlbnQtPmJ1dHRvbi54ID0gNTsKLSAgICAgICAgZXZlbnQtPmJ1
dHRvbi55ID0gNTsKLQotICAgICAgICByZXN1bHQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2hpdF90
ZXN0X3Jlc3VsdCh3ZWJWaWV3LCAoR2RrRXZlbnRCdXR0b24qKSBldmVudCk7Ci0gICAgICAgIGdk
a19ldmVudF9mcmVlKGV2ZW50KTsKLSAgICAgICAgZ19hc3NlcnQocmVzdWx0KTsKLQotICAgICAg
ICBnX29iamVjdF9nZXQocmVzdWx0LCAiY29udGV4dCIsICZjb250ZXh0LCBOVUxMKTsKLSAgICAg
ICAgZ19hc3NlcnQoY29udGV4dCAmIGluZm8tPmZsYWcpOwotCi0gICAgICAgIGdfb2JqZWN0X2dl
dChyZXN1bHQsICJpbm5lci1ub2RlIiwgJm5vZGUsIE5VTEwpOwotICAgICAgICBnX2Fzc2VydChu
b2RlKTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19OT0RFKG5vZGUpKTsKLQotICAg
ICAgICBnX29iamVjdF9nZXQocmVzdWx0LCAieCIsICZ4LCAieSIsICZ5LCBOVUxMKTsKLSAgICAg
ICAgZ19hc3NlcnRfY21waW50KHgsID09LCA1KTsKLSAgICAgICAgZ19hc3NlcnRfY21waW50KHks
ID09LCA1KTsKLQotICAgICAgICAvKiBXZSBjYW4gb25seSB0ZXN0IHRoZXNlIG5vZGUgdHlwZXMg
YXQgdGhlIG1vbWVudC4gSW4gdGhlCi0gICAgICAgICAqIGlucHV0IGNhc2UgdGhlcmUgc2VlbXMg
dG8gYmUgYW4gZXh0cmEgbGF5ZXIgd2l0aCBhIERJViBvbgotICAgICAgICAgKiB0b3Agb2YgdGhl
IGlucHV0LCB3aGljaCBnZXRzIGFzc2lnbmVkIHRvIHRoZSBpbm5lci1ub2RlLgotICAgICAgICAg
KiB0YWcgKi8KLSAgICAgICAgaWYgKGluZm8tPmZsYWcgPT0gV0VCS0lUX0hJVF9URVNUX1JFU1VM
VF9DT05URVhUX0RPQ1VNRU5UKQotICAgICAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19I
VE1MX0hUTUxfRUxFTUVOVChub2RlKSk7Ci0gICAgICAgIGVsc2UgaWYgKGluZm8tPmZsYWcgPT0g
V0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0lNQUdFKQotICAgICAgICAgICAgZ19hc3Nl
cnQoV0VCS0lUX0RPTV9JU19IVE1MX0lNQUdFX0VMRU1FTlQobm9kZSkpOwotICAgICAgICBlbHNl
IGlmIChpbmZvLT5mbGFnID09IFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9MSU5LKSB7
Ci0gICAgICAgICAgICAvKiBUaGUgaGl0IHRlc3Qgd2lsbCBnaXZlIHVzIHRoZSBpbm5lciB0ZXh0
IG5vZGUsIHdlIHdhbnQKLSAgICAgICAgICAgICAqIHRoZSBBIHRhZyAqLwotICAgICAgICAgICAg
V2ViS2l0RE9NTm9kZSogcGFyZW50ID0gd2Via2l0X2RvbV9ub2RlX2dldF9wYXJlbnRfbm9kZShu
b2RlKTsKLSAgICAgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9BTkNIT1JfRUxF
TUVOVChwYXJlbnQpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdfb2JqZWN0X3VucmVmKHJlc3Vs
dCk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci0gICAgfQotfQotCi1zdGF0aWMg
dm9pZAotdGVzdF93ZWJraXRfaGl0X3Rlc3RfcmVzdWx0KEhpdFRlc3RSZXN1bHRGaXh0dXJlKiBm
aXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgVGVzdEluZm8qIGluZm8gPSAoVGVz
dEluZm8qKWRhdGE7Ci0gICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA1MCwg
NTAgfTsKLQotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhmaXh0dXJlLT53ZWJWaWV3
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLT5kYXRhLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAidGV4dC9odG1sIiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgInV0Zi04IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZp
bGU6Ly8iKTsKLSAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVChmaXh0dXJl
LT53ZWJWaWV3KSwgJmFsbG9jYXRpb24pOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+
d2ViVmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLCBHX0NBTExCQUNLKGxvYWRfc3RhdHVzX2Ni
KSwgaW5mbyk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotfQotCi1pbnQgbWFpbihpbnQg
YXJnYywgY2hhcioqIGFyZ3YpCi17Ci0gICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5V
TEwpOwotCi0gICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsK
LQotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvaGl0dGVzdHJlc3VsdC9kb2N1bWVudCIsIEhpdFRl
c3RSZXN1bHRGaXh0dXJlLCAKLSAgICAgICAgICAgICAgIHRlc3RfaW5mb19uZXcoIjxodG1sPjxi
b2R5PjxoMT5XZWJLaXRHVEsrITwvaDE+PC9ib2R5PjwvaHRtbD4iLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfRE9DVU1FTlQpLAot
ICAgICAgICAgICAgICAgaGl0X3Rlc3RfcmVzdWx0X2ZpeHR1cmVfc2V0dXAsIHRlc3Rfd2Via2l0
X2hpdF90ZXN0X3Jlc3VsdCwgaGl0X3Rlc3RfcmVzdWx0X2ZpeHR1cmVfdGVhcmRvd24pOwotICAg
IC8qIFdlIGhhcmRjb2RlIGFsbCBlbGVtZW50cyB0byBiZSBhdCAwLDAgc28gdGhhdCB3ZSBrbm93
IHdoZXJlIHRvCi0gICAgICogZ2VuZXJhdGUgdGhlIGJ1dHRvbiBldmVudHMgKi8KLSAgICBnX3Rl
c3RfYWRkKCIvd2Via2l0L2hpdHRlc3RyZXN1bHQvaW1hZ2UiLCBIaXRUZXN0UmVzdWx0Rml4dHVy
ZSwKLSAgICAgICAgICAgICAgIHRlc3RfaW5mb19uZXcoIjxodG1sPjxib2R5PjxpbWcgc3R5bGU9
J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjA7IHRvcDowJ3NyYz0nMHhkZWFkYmVlZicgd2lkdGg9
NTAgaGVpZ2h0PTUwPjwvaW1nPjwvYm9keT48L2h0bWw+IiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0lNQUdFKSwKLSAgICAgICAg
ICAgICAgIGhpdF90ZXN0X3Jlc3VsdF9maXh0dXJlX3NldHVwLCB0ZXN0X3dlYmtpdF9oaXRfdGVz
dF9yZXN1bHQsIGhpdF90ZXN0X3Jlc3VsdF9maXh0dXJlX3RlYXJkb3duKTsKLSAgICBnX3Rlc3Rf
YWRkKCIvd2Via2l0L2hpdHRlc3RyZXN1bHQvZWRpdGFibGUiLCBIaXRUZXN0UmVzdWx0Rml4dHVy
ZSwKLSAgICAgICAgICAgICAgIHRlc3RfaW5mb19uZXcoIjxodG1sPjxib2R5PjxpbnB1dCBzdHls
ZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MDsgdG9wOjAnIHNpemU9JzM1Jz48L2lucHV0Pj48
L2JvZHk+PC9odG1sPiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9ISVRf
VEVTVF9SRVNVTFRfQ09OVEVYVF9FRElUQUJMRSksCi0gICAgICAgICAgICAgICBoaXRfdGVzdF9y
ZXN1bHRfZml4dHVyZV9zZXR1cCwgdGVzdF93ZWJraXRfaGl0X3Rlc3RfcmVzdWx0LCBoaXRfdGVz
dF9yZXN1bHRfZml4dHVyZV90ZWFyZG93bik7Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9oaXR0
ZXN0cmVzdWx0L2xpbmsiLCBIaXRUZXN0UmVzdWx0Rml4dHVyZSwKLSAgICAgICAgICAgICAgIHRl
c3RfaW5mb19uZXcoIjxodG1sPjxib2R5PjxhIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVm
dDowOyB0b3A6MCcgaHJlZj0naHR0cDovL3d3dy5leGFtcGxlLmNvbSc+SEVMTE8gV09STEQ8L2E+
PC9ib2R5PjwvaHRtbD4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfSElU
X1RFU1RfUkVTVUxUX0NPTlRFWFRfTElOSyksCi0gICAgICAgICAgICAgICBoaXRfdGVzdF9yZXN1
bHRfZml4dHVyZV9zZXR1cCwgdGVzdF93ZWJraXRfaGl0X3Rlc3RfcmVzdWx0LCBoaXRfdGVzdF9y
ZXN1bHRfZml4dHVyZV90ZWFyZG93bik7Ci0gICAgICAgICAgICAgICAKLSAgICByZXR1cm4gZ190
ZXN0X3J1biAoKTsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVz
dGh0dHBiYWNrZW5kLmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0aHR0cGJhY2tlbmQu
YwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM3NzY4NzliMDUzYTY2ZjVmNTVkMjlk
MmIyODY4NTZkOTY3OGNiYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0aHR0cGJhY2tlbmQuYworKysgL2Rl
di9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR3VzdGF2
byBOb3JvbmhhIFNpbHZhCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Ci0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlIDxlcnJuby5oPgot
I2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxnbGliL2dz
dGRpby5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+
Ci0KLS8vIE5vdCB5ZXQgcHVibGljIEFQSQotU291cE1lc3NhZ2UqIHdlYmtpdF9uZXR3b3JrX3Jl
cXVlc3RfZ2V0X21lc3NhZ2UoV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QpOwotCi1zdGF0
aWMgZ2Jvb2xlYW4gbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fcmVxdWVzdGVkX2NiKFdlYktp
dFdlYlZpZXcqIHdlYl92aWV3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBXZWJLaXRXZWJGcmFtZSogd2ViX2ZyYW1lLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXROZXR3
b3JrUmVxdWVzdCogcmVxdWVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV2ViS2l0V2ViTmF2aWdhdGlvbkFjdGlvbiogYWN0aW9uLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBX
ZWJLaXRXZWJQb2xpY3lEZWNpc2lvbiogZGVjaXNpb24sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIGRhdGEpCi17Ci0gICAg
U291cE1lc3NhZ2UqIG1lc3NhZ2UgPSB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X2dldF9tZXNzYWdl
KHJlcXVlc3QpOwotCi0gICAgLyogMSAtPiB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X3dpdGhfY29y
ZV9yZXF1ZXN0Ci0gICAgICoKLSAgICAgKiBUaGUgU291cE1lc3NhZ2UgaXMgY3JlYXRlZCBleGNs
dXNpdmVseSBmb3IgdGhlIGVtaXNzaW9uIG9mIHRoaXMKLSAgICAgKiBzaWduYWwuCi0gICAgICov
Ci0gICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKG1lc3NhZ2UpLT5yZWZfY291bnQsID09LCAx
KTsKLQotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF9zb3VwX21lc3Nh
Z2VfbGlmZXRpbWUoKQotewotICAgIFdlYktpdFdlYlZpZXcqIHdlYl92aWV3ID0gV0VCS0lUX1dF
Ql9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0KLSAgICBnX29iamVjdF9yZWZfc2luayh3
ZWJfdmlldyk7Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KHdlYl92aWV3LCAibmF2aWdhdGlvbi1w
b2xpY3ktZGVjaXNpb24tcmVxdWVzdGVkIiwKLSAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJB
Q0sobmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fcmVxdWVzdGVkX2NiKSwKLSAgICAgICAgICAg
ICAgICAgICAgIE5VTEwpOwotCi0gICAgLyogbG9hZF91cmkgd2lsbCB0cmlnZ2VyIHRoZSBuYXZp
Z2F0aW9uLXBvbGljeS1kZWNpc2lvbi1yZXF1ZXN0ZWQKLSAgICAgKiBzaWduYWwgZW1pc3Npb247
Ci0gICAgICovCi0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHdlYl92aWV3LCAiaHR0cDov
LzEyNy4wLjAuMS8iKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKHdlYl92aWV3KTsKLX0KLQotaW50
IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotewotICAgIGd0a190ZXN0X2luaXQoJmFyZ2Ms
ICZhcmd2LCBOVUxMKTsKLQotICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvIik7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3NvdXBtZXNzYWdlL2xpZmV0
aW1lIiwgdGVzdF9zb3VwX21lc3NhZ2VfbGlmZXRpbWUpOwotICAgIHJldHVybiBnX3Rlc3RfcnVu
ICgpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGtleWV2ZW50
cy5jIGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGtleWV2ZW50cy5jCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBhY2QwMWYzNWY0OGYyZDY2MTZjNzE4ZmIyMGUwZGM5YWY2YmNl
YmE5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RrZXlldmVudHMuYworKysgL2Rldi9udWxsCkBAIC0xLDM5
MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIE1hcnRpbiBSb2JpbnNv
biA8bXJvYmluc29uQHdlYmtpdC5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2
ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8
ZXJybm8uaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNs
dWRlIDxnbGliL2dzdGRpby5oPgotI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTQ29udGV4dFJlZi5oPgotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgY2hhciogcGFnZTsKLSAg
ICBjaGFyKiB0ZXh0OwotICAgIGdib29sZWFuIHNob3VsZEJlSGFuZGxlZDsKLX0gVGVzdEluZm87
Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBHdGtXaWRnZXQqIHdpbmRvdzsKLSAgICBXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3OwotICAgIEdNYWluTG9vcCogbG9vcDsKLSAgICBUZXN0SW5mbyogaW5m
bzsKLX0gS2V5RXZlbnRGaXh0dXJlOwotCi1UZXN0SW5mbyoKLXRlc3RfaW5mb19uZXcoY29uc3Qg
Y2hhciogcGFnZSwgZ2Jvb2xlYW4gc2hvdWxkQmVIYW5kbGVkKQotewotICAgIFRlc3RJbmZvKiBp
bmZvOwotCi0gICAgaW5mbyA9IGdfc2xpY2VfbmV3KFRlc3RJbmZvKTsKLSAgICBpbmZvLT5wYWdl
ID0gZ19zdHJkdXAocGFnZSk7Ci0gICAgaW5mby0+c2hvdWxkQmVIYW5kbGVkID0gc2hvdWxkQmVI
YW5kbGVkOwotICAgIGluZm8tPnRleHQgPSAwOwotCi0gICAgcmV0dXJuIGluZm87Ci19Ci0KLXZv
aWQKLXRlc3RfaW5mb19kZXN0cm95KFRlc3RJbmZvKiBpbmZvKQotewotICAgIGdfZnJlZShpbmZv
LT5wYWdlKTsKLSAgICBnX2ZyZWUoaW5mby0+dGV4dCk7Ci0gICAgZ19zbGljZV9mcmVlKFRlc3RJ
bmZvLCBpbmZvKTsKLX0KLQotc3RhdGljIHZvaWQga2V5X2V2ZW50X2ZpeHR1cmVfc2V0dXAoS2V5
RXZlbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZml4dHVy
ZS0+bG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLQotICAgIGZpeHR1cmUtPndp
bmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOwotICAgIGZpeHR1cmUt
PndlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLQotICAg
IGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIoZml4dHVyZS0+d2luZG93KSwgR1RLX1dJ
REdFVChmaXh0dXJlLT53ZWJWaWV3KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGtleV9ldmVudF9maXh0
dXJlX3RlYXJkb3duKEtleUV2ZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRh
KQotewotICAgIGd0a193aWRnZXRfZGVzdHJveShmaXh0dXJlLT53aW5kb3cpOwotICAgIGdfbWFp
bl9sb29wX3VucmVmKGZpeHR1cmUtPmxvb3ApOwotICAgIHRlc3RfaW5mb19kZXN0cm95KGZpeHR1
cmUtPmluZm8pOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4ga2V5X3ByZXNzX2V2ZW50X2NiKFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcsIEdka0V2ZW50KiBldmVudCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAg
ICBLZXlFdmVudEZpeHR1cmUqIGZpeHR1cmUgPSAoS2V5RXZlbnRGaXh0dXJlKilkYXRhOwotICAg
IGdib29sZWFuIGhhbmRsZWQgPSBHVEtfV0lER0VUX0dFVF9DTEFTUyhmaXh0dXJlLT53ZWJWaWV3
KS0+a2V5X3ByZXNzX2V2ZW50KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldyksICZldmVudC0+
a2V5KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoaGFuZGxlZCwgPT0sIGZpeHR1cmUtPmluZm8tPnNo
b3VsZEJlSGFuZGxlZCk7Ci0KLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVh
biBrZXlfcmVsZWFzZV9ldmVudF9jYihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHZGtFdmVudCog
ZXZlbnQsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgLy8gV2ViQ29yZSBuZXZlciBzZWVtcyB0byBt
YXJrIGtleXVwIGV2ZW50cyBhcyBoYW5kbGVkLgotICAgIEtleUV2ZW50Rml4dHVyZSogZml4dHVy
ZSA9IChLZXlFdmVudEZpeHR1cmUqKWRhdGE7Ci0gICAgZ2Jvb2xlYW4gaGFuZGxlZCA9IEdUS19X
SURHRVRfR0VUX0NMQVNTKGZpeHR1cmUtPndlYlZpZXcpLT5rZXlfcHJlc3NfZXZlbnQoR1RLX1dJ
REdFVChmaXh0dXJlLT53ZWJWaWV3KSwgJmV2ZW50LT5rZXkpOwotICAgIGdfYXNzZXJ0KCFoYW5k
bGVkKTsKLQotICAgIGdfbWFpbl9sb29wX3F1aXQoZml4dHVyZS0+bG9vcCk7Ci0KLSAgICByZXR1
cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfa2V5cHJlc3NfZXZlbnRzX2xvYWRfc3Rh
dHVzX2NiKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEdQYXJhbVNwZWMqIHNwZWMsIGdwb2ludGVy
IGRhdGEpCi17Ci0gICAgS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJlID0gKEtleUV2ZW50Rml4dHVy
ZSopZGF0YTsKLSAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJfdmlld19n
ZXRfbG9hZF9zdGF0dXMod2ViVmlldyk7Ci0gICAgaWYgKHN0YXR1cyA9PSBXRUJLSVRfTE9BRF9G
SU5JU0hFRCkgewotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJr
ZXktcHJlc3MtZXZlbnQiLAotICAgICAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0soa2V5
X3ByZXNzX2V2ZW50X2NiKSwgZml4dHVyZSk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4
dHVyZS0+d2ViVmlldywgImtleS1yZWxlYXNlLWV2ZW50IiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICBHX0NBTExCQUNLKGtleV9yZWxlYXNlX2V2ZW50X2NiKSwgZml4dHVyZSk7Ci0gICAgICAg
IGlmICghZ3RrX3Rlc3Rfd2lkZ2V0X3NlbmRfa2V5KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmll
dyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdka191bmljb2RlX3Rv
X2tleXZhbCgnYScpLCAwKSkKLSAgICAgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0g
ICAgfQotCi19Ci0KLWdib29sZWFuIG1hcF9ldmVudF9jYihHdGtXaWRnZXQgKndpZGdldCwgR2Rr
RXZlbnQqIGV2ZW50LCBncG9pbnRlciBkYXRhKQotewotICAgIEtleUV2ZW50Rml4dHVyZSogZml4
dHVyZSA9IChLZXlFdmVudEZpeHR1cmUqKWRhdGE7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRf
c3RyaW5nKGZpeHR1cmUtPndlYlZpZXcsIGZpeHR1cmUtPmluZm8tPnBhZ2UsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJ0ZXh0L2h0bWwiLCAidXRmLTgiLCAiZmlsZTovLyIpOwot
ICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQgc2V0dXBfa2V5ZXZlbnRfdGVzdChL
ZXlFdmVudEZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSwgR0NhbGxiYWNrIGxv
YWRfZXZlbnRfY2FsbGJhY2spCi17Ci0gICAgZml4dHVyZS0+aW5mbyA9IChUZXN0SW5mbyopZGF0
YTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndpbmRvdywgIm1hcC1ldmVudCIsCi0g
ICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKG1hcF9ldmVudF9jYiksIGZpeHR1cmUpOwot
Ci0gICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldykp
OwotICAgIGd0a193aWRnZXRfc2hvdyhmaXh0dXJlLT53aW5kb3cpOwotICAgIGd0a193aWRnZXRf
c2hvdyhHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpKTsKLSAgICBndGtfd2luZG93X3ByZXNl
bnQoR1RLX1dJTkRPVyhmaXh0dXJlLT53aW5kb3cpKTsKLQotICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
Zml4dHVyZS0+d2ViVmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLAotICAgICAgICAgICAgICAg
ICAgICAgbG9hZF9ldmVudF9jYWxsYmFjaywgZml4dHVyZSk7Ci0KLSAgICBnX21haW5fbG9vcF9y
dW4oZml4dHVyZS0+bG9vcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfa2V5cHJlc3NfZXZlbnRz
KEtleUV2ZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIHNl
dHVwX2tleWV2ZW50X3Rlc3QoZml4dHVyZSwgZGF0YSwgR19DQUxMQkFDSyh0ZXN0X2tleXByZXNz
X2V2ZW50c19sb2FkX3N0YXR1c19jYikpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gZWxlbWVudF90
ZXh0X2VxdWFsX3RvKEpTQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBnY2hhciogdGV4dCkKLXsK
LSAgICBKU1N0cmluZ1JlZiBzY3JpcHRTdHJpbmcgPSBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygKLSAgICAgICJ3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJpblwiKS52YWx1
ZTsiKTsKLSAgICBKU1ZhbHVlUmVmIHZhbHVlID0gSlNFdmFsdWF0ZVNjcmlwdChjb250ZXh0LCBz
Y3JpcHRTdHJpbmcsIDAsIDAsIDAsIDApOwotICAgIEpTU3RyaW5nUmVsZWFzZShzY3JpcHRTdHJp
bmcpOwotCi0gICAgLy8gSWYgdGhlIHZhbHVlIGlzbid0IGEgc3RyaW5nLCB0aGUgZWxlbWVudCBp
cyBwcm9iYWJseSBhIGRpdgotICAgIC8vIHNvIGdyYWIgdGhlIGlubmVyVGV4dCBpbnN0ZWFkLgot
ICAgIGlmICghSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIHZhbHVlKSkgewotICAgICAgICBKU1N0
cmluZ1JlZiBzY3JpcHRTdHJpbmcgPSBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygKLSAg
ICAgICAgICAid2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaW5cIikuaW5uZXJUZXh0
OyIpOwotICAgICAgICB2YWx1ZSA9IEpTRXZhbHVhdGVTY3JpcHQoY29udGV4dCwgc2NyaXB0U3Ry
aW5nLCAwLCAwLCAwLCAwKTsKLSAgICAgICAgSlNTdHJpbmdSZWxlYXNlKHNjcmlwdFN0cmluZyk7
Ci0gICAgfQotCi0gICAgZ19hc3NlcnQoSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIHZhbHVlKSk7
Ci0gICAgSlNTdHJpbmdSZWYgaW5wdXRTdHJpbmcgPSBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRl
eHQsIHZhbHVlLCAwKTsKLSAgICBnX2Fzc2VydChpbnB1dFN0cmluZyk7Ci0KLSAgICBnaW50IHNp
emUgPSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUoaW5wdXRTdHJpbmcpOwotICAg
IGdjaGFyKiBjU3RyaW5nID0gZ19tYWxsb2Moc2l6ZSk7Ci0gICAgSlNTdHJpbmdHZXRVVEY4Q1N0
cmluZyhpbnB1dFN0cmluZywgY1N0cmluZywgc2l6ZSk7Ci0gICAgSlNTdHJpbmdSZWxlYXNlKGlu
cHV0U3RyaW5nKTsKLQotICAgIGdib29sZWFuIHJlc3VsdCA9IGdfdXRmOF9jb2xsYXRlKGNTdHJp
bmcsIHRleHQpID09IDA7Ci0gICAgZ19mcmVlKGNTdHJpbmcpOwotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RfaW1lX2xvYWRfc3RhdHVzX2NiKFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcsIEdQYXJhbVNwZWMqIHNwZWMsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgS2V5RXZl
bnRGaXh0dXJlKiBmaXh0dXJlID0gKEtleUV2ZW50Rml4dHVyZSopZGF0YTsKLSAgICBXZWJLaXRM
b2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMod2ViVmll
dyk7Ci0gICAgaWYgKHN0YXR1cyAhPSBXRUJLSVRfTE9BRF9GSU5JU0hFRCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQgPSB3ZWJraXRfd2ViX2ZyYW1l
X2dldF9nbG9iYWxfY29udGV4dCgKLSAgICAgICAgd2Via2l0X3dlYl92aWV3X2dldF9tYWluX2Zy
YW1lKHdlYlZpZXcpKTsKLSAgICBnX2Fzc2VydChjb250ZXh0KTsKLQotICAgIEd0a0lNQ29udGV4
dCogaW1Db250ZXh0ID0gMDsKLSAgICBnX29iamVjdF9nZXQod2ViVmlldywgImltLWNvbnRleHQi
LCAmaW1Db250ZXh0LCBOVUxMKTsKLSAgICBnX2Fzc2VydChpbUNvbnRleHQpOwotCi0gICAgLy8g
VGVzdCB0aGF0IGNvbW1pdHMgdGhhdCBoYXBwZW4gb3V0c2lkZSBvZiBrZXkgZXZlbnRzCi0gICAg
Ly8gY2hhbmdlIHRoZSB0ZXh0IGZpZWxkIGltbWVkaWF0ZWx5LiBUaGlzIGNsb3NlbHkgcmVwbGlj
YXRlcwotICAgIC8vIHRoZSBiZWhhdmlvciBvZiBTQ0lNLgotICAgIGdfYXNzZXJ0KGVsZW1lbnRf
dGV4dF9lcXVhbF90byhjb250ZXh0LCAiIikpOwotICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShp
bUNvbnRleHQsICJjb21taXQiLCAiYSIpOwotICAgIGdfYXNzZXJ0KGVsZW1lbnRfdGV4dF9lcXVh
bF90byhjb250ZXh0LCAiYSIpKTsKLSAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoaW1Db250ZXh0
LCAiY29tbWl0IiwgImIiKTsKLSAgICBnX2Fzc2VydChlbGVtZW50X3RleHRfZXF1YWxfdG8oY29u
dGV4dCwgImFiIikpOwotICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShpbUNvbnRleHQsICJjb21t
aXQiLCAiYyIpOwotICAgIGdfYXNzZXJ0KGVsZW1lbnRfdGV4dF9lcXVhbF90byhjb250ZXh0LCAi
YWJjIikpOwotCi0gICAgZ19vYmplY3RfdW5yZWYoaW1Db250ZXh0KTsKLSAgICBnX21haW5fbG9v
cF9xdWl0KGZpeHR1cmUtPmxvb3ApOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X2ltZShLZXlFdmVu
dEZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBzZXR1cF9rZXll
dmVudF90ZXN0KGZpeHR1cmUsIGRhdGEsIEdfQ0FMTEJBQ0sodGVzdF9pbWVfbG9hZF9zdGF0dXNf
Y2IpKTsKLX0KLQotc3RhdGljIGdib29sZWFuIHZlcmlmeV9jb250ZW50cyhncG9pbnRlciBkYXRh
KQotewotICAgIEtleUV2ZW50Rml4dHVyZSogZml4dHVyZSA9IChLZXlFdmVudEZpeHR1cmUqKWRh
dGE7Ci0gICAgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQgPSB3ZWJraXRfd2ViX2ZyYW1lX2dl
dF9nbG9iYWxfY29udGV4dCgKLSAgICAgICAgd2Via2l0X3dlYl92aWV3X2dldF9tYWluX2ZyYW1l
KGZpeHR1cmUtPndlYlZpZXcpKTsKLSAgICBnX2Fzc2VydChjb250ZXh0KTsKLQotICAgIGdfYXNz
ZXJ0KGVsZW1lbnRfdGV4dF9lcXVhbF90byhjb250ZXh0LCBmaXh0dXJlLT5pbmZvLT50ZXh0KSk7
Ci0gICAgZ19tYWluX2xvb3BfcXVpdChmaXh0dXJlLT5sb29wKTsKLSAgICByZXR1cm4gRkFMU0U7
Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RfYmxvY2tpbmdfbG9hZF9zdGF0dXNfY2IoV2ViS2l0V2Vi
Vmlldyogd2ViVmlldywgR1BhcmFtU3BlYyogc3BlYywgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBL
ZXlFdmVudEZpeHR1cmUqIGZpeHR1cmUgPSAoS2V5RXZlbnRGaXh0dXJlKilkYXRhOwotICAgIFdl
YktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh3
ZWJWaWV3KTsKLSAgICBpZiAoc3RhdHVzICE9IFdFQktJVF9MT0FEX0ZJTklTSEVEKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICAvLyBUaGUgZmlyc3Qga2V5cHJlc3MgZXZlbnQgc2hvdWxkIG5vdCBt
b2RpZnkgdGhlIGZpZWxkLgotICAgIGZpeHR1cmUtPmluZm8tPnRleHQgPSBnX3N0cmR1cCgiYmMi
KTsKLSAgICBpZiAoIWd0a190ZXN0X3dpZGdldF9zZW5kX2tleShHVEtfV0lER0VUKGZpeHR1cmUt
PndlYlZpZXcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RrX3VuaWNvZGVf
dG9fa2V5dmFsKCdhJyksIDApKQotICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAg
IGlmICghZ3RrX3Rlc3Rfd2lkZ2V0X3NlbmRfa2V5KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmll
dyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RrX3VuaWNvZGVfdG9fa2V5
dmFsKCdiJyksIDApKQotICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAgIGlmICgh
Z3RrX3Rlc3Rfd2lkZ2V0X3NlbmRfa2V5KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldyksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RrX3VuaWNvZGVfdG9fa2V5dmFsKCdj
JyksIDApKQotICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotCi0gICAgZ19pZGxlX2Fk
ZCh2ZXJpZnlfY29udGVudHMsIGZpeHR1cmUpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X2Jsb2Nr
aW5nKEtleUV2ZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAg
IHNldHVwX2tleWV2ZW50X3Rlc3QoZml4dHVyZSwgZGF0YSwgR19DQUxMQkFDSyh0ZXN0X2Jsb2Nr
aW5nX2xvYWRfc3RhdHVzX2NiKSk7Ci19Ci0KLSNpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDEx
KQotc3RhdGljIHZvaWQgdGVzdF94aW1fbG9hZF9zdGF0dXNfY2IoV2ViS2l0V2ViVmlldyogd2Vi
VmlldywgR1BhcmFtU3BlYyogc3BlYywgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBLZXlFdmVudEZp
eHR1cmUqIGZpeHR1cmUgPSAoS2V5RXZlbnRGaXh0dXJlKilkYXRhOwotICAgIFdlYktpdExvYWRT
dGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJWaWV3KTsK
LSAgICBpZiAoc3RhdHVzICE9IFdFQktJVF9MT0FEX0ZJTklTSEVEKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBHdGtJTUNvbnRleHQqIGltQ29udGV4dCA9IDA7Ci0gICAgZ19vYmplY3RfZ2V0KHdl
YlZpZXcsICJpbS1jb250ZXh0IiwgJmltQ29udGV4dCwgTlVMTCk7Ci0gICAgZ19hc3NlcnQoaW1D
b250ZXh0KTsKLQotICAgIGdjaGFyKiBvcmlnaW5hbElkID0gZ19zdHJkdXAoZ3RrX2ltX211bHRp
Y29udGV4dF9nZXRfY29udGV4dF9pZChHVEtfSU1fTVVMVElDT05URVhUKGltQ29udGV4dCkpKTsK
LSAgICBndGtfaW1fbXVsdGljb250ZXh0X3NldF9jb250ZXh0X2lkKEdUS19JTV9NVUxUSUNPTlRF
WFQoaW1Db250ZXh0KSwgInhpbSIpOwotCi0gICAgLy8gVGVzdCB0aGF0IGNvbW1pdHMgdGhhdCBo
YXBwZW4gb3V0c2lkZSBvZiBrZXkgZXZlbnRzCi0gICAgLy8gY2hhbmdlIHRoZSB0ZXh0IGZpZWxk
IGltbWVkaWF0ZWx5LiBUaGlzIGNsb3NlbHkgcmVwbGljYXRlcwotICAgIC8vIHRoZSBiZWhhdmlv
ciBvZiBTQ0lNLgotICAgIGZpeHR1cmUtPmluZm8tPnRleHQgPSBnX3N0cmR1cCgiZGViaWFuIik7
Ci0gICAgaWYgKCFndGtfdGVzdF93aWRnZXRfc2VuZF9rZXkoR1RLX1dJREdFVChmaXh0dXJlLT53
ZWJWaWV3KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdka191bmljb2RlX3Rv
X2tleXZhbCgnZCcpLCAwKSkKLSAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICBp
ZiAoIWd0a190ZXN0X3dpZGdldF9zZW5kX2tleShHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGtfdW5pY29kZV90b19rZXl2YWwoJ2Un
KSwgMCkpCi0gICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0gICAgaWYgKCFndGtfdGVz
dF93aWRnZXRfc2VuZF9rZXkoR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2RrX3VuaWNvZGVfdG9fa2V5dmFsKCdiJyksIDApKQotICAg
ICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAgIGlmICghZ3RrX3Rlc3Rfd2lkZ2V0X3Nl
bmRfa2V5KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldyksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdka191bmljb2RlX3RvX2tleXZhbCgnaScpLCAwKSkKLSAgICAgICAgZ19hc3Nl
cnRfbm90X3JlYWNoZWQoKTsKLSAgICBpZiAoIWd0a190ZXN0X3dpZGdldF9zZW5kX2tleShHVEtf
V0lER0VUKGZpeHR1cmUtPndlYlZpZXcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
ZGtfdW5pY29kZV90b19rZXl2YWwoJ2EnKSwgMCkpCi0gICAgICAgIGdfYXNzZXJ0X25vdF9yZWFj
aGVkKCk7Ci0gICAgaWYgKCFndGtfdGVzdF93aWRnZXRfc2VuZF9rZXkoR1RLX1dJREdFVChmaXh0
dXJlLT53ZWJWaWV3KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RrX3VuaWNvZGVf
dG9fa2V5dmFsKCduJyksIDApKQotICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotCi0g
ICAgZ3RrX2ltX211bHRpY29udGV4dF9zZXRfY29udGV4dF9pZChHVEtfSU1fTVVMVElDT05URVhU
KGltQ29udGV4dCksIG9yaWdpbmFsSWQpOwotICAgIGdfZnJlZShvcmlnaW5hbElkKTsKLSAgICBn
X29iamVjdF91bnJlZihpbUNvbnRleHQpOwotCi0gICAgZ19pZGxlX2FkZCh2ZXJpZnlfY29udGVu
dHMsIGZpeHR1cmUpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3hpbShLZXlFdmVudEZpeHR1cmUq
IGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBzZXR1cF9rZXlldmVudF90ZXN0
KGZpeHR1cmUsIGRhdGEsIEdfQ0FMTEJBQ0sodGVzdF94aW1fbG9hZF9zdGF0dXNfY2IpKTsKLX0K
LSNlbmRpZgotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCi17Ci0gICAgZ3RrX3Rl
c3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOwotCi0gICAgZ190ZXN0X2J1Z19iYXNlKCJodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKLQotCi0gICAgLy8gV2UnbGwgdGVzdCBpbnB1dCBvbiBh
IHNsZXcgb2YgZGlmZmVyZW50IG5vZGUgdHlwZXMuIEtleSBldmVudHMgdG8KLSAgICAvLyB0ZXh0
IGlucHV0cyBhbmQgZWRpdGFibGUgZGl2cyBzaG91bGQgYmUgbWFya2VkIGFzIGhhbmRsZWQuIEtl
eSBldmVudHMKLSAgICAvLyB0byBidXR0b25zIGFuZCBsaW5rcyBzaG91bGQgbm90LgotICAgIGNv
bnN0IGNoYXIqIHRleHRpbnB1dF9odG1sID0gIjxodG1sPjxib2R5PjxpbnB1dCBpZD1cImluXCIg
dHlwZT1cInRleHRcIj4iCi0gICAgICAgICI8c2NyaXB0PmRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdpbicpLmZvY3VzKCk7PC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4iOwotICAgIGNvbnN0IGNoYXIq
IGJ1dHRvbl9odG1sID0gIjxodG1sPjxib2R5PjxpbnB1dCBpZD1cImluXCIgdHlwZT1cImJ1dHRv
blwiPiIKLSAgICAgICAgIjxzY3JpcHQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2luJykuZm9j
dXMoKTs8L3NjcmlwdD48L2JvZHk+PC9odG1sPiI7Ci0gICAgY29uc3QgY2hhciogbGlua19odG1s
ID0gIjxodG1sPjxib2R5PjxhIGhyZWY9XCJodHRwOi8vd3d3Lmdub21lLm9yZ1wiIGlkPVwiaW5c
Ij4iCi0gICAgICAgICJMSU5LWSBNQ0xJTktFUlNPTjwvYT48c2NyaXB0PmRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdpbicpLmZvY3VzKCk7PC9zY3JpcHQ+IgotICAgICAgICAiPC9ib2R5PjwvaHRt
bD4iOwotICAgIGNvbnN0IGNoYXIqIGRpdl9odG1sID0gIjxodG1sPjxib2R5PjxkaXYgaWQ9XCJp
blwiIGNvbnRlbnRlZGl0YWJsZT1cInRydWVcIj4iCi0gICAgICAgICI8c2NyaXB0PmRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdpbicpLmZvY3VzKCk7PC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4iOwot
Ci0gICAgLy8gVGhlc2UgYXJlIHNpbWlsYXIgdG8gdGhlIGJsb2NrcyBhYm92ZSwgYnV0IHRoZXkg
c2hvdWxkIGJsb2NrIHRoZSBmaXJzdAotICAgIC8vIGtleXByZXNzIG1vZGlmeWluZyB0aGUgZWRp
dGFibGUgbm9kZS4KLSAgICBjb25zdCBjaGFyKiB0ZXh0aW5wdXRfaHRtbF9ibG9ja2luZyA9ICI8
aHRtbD48Ym9keT4iCi0gICAgICAgICI8aW5wdXQgaWQ9XCJpblwiIHR5cGU9XCJ0ZXh0XCIgIgot
ICAgICAgICAib25rZXlwcmVzcz1cImlmIChmaXJzdCkge2V2ZW50LnByZXZlbnREZWZhdWx0KCk7
Zmlyc3Q9ZmFsc2U7fVwiPiIKLSAgICAgICAgIjxzY3JpcHQ+Zmlyc3QgPSB0cnVlO1xuZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ2luJykuZm9jdXMoKTs8L3NjcmlwdD5cbiIKLSAgICAgICAgIjwv
c2NyaXB0PjwvYm9keT48L2h0bWw+IjsKLSAgICBjb25zdCBjaGFyKiBkaXZfaHRtbF9ibG9ja2lu
ZyA9ICI8aHRtbD48Ym9keT4iCi0gICAgICAgICI8ZGl2IGlkPVwiaW5cIiBjb250ZW50ZWRpdGFi
bGU9XCJ0cnVlXCIgIgotICAgICAgICAib25rZXlwcmVzcz1cImlmIChmaXJzdCkge2V2ZW50LnBy
ZXZlbnREZWZhdWx0KCk7Zmlyc3Q9ZmFsc2U7fVwiPiIKLSAgICAgICAgIjxzY3JpcHQ+Zmlyc3Qg
PSB0cnVlOyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW4nKS5mb2N1cygpOzwvc2NyaXB0Plxu
IgotICAgICAgICAiPC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4iOwotCi0gICAgZ190ZXN0X2FkZCgi
L3dlYmtpdC9rZXlldmVudHMvZXZlbnQtdGV4dGlucHV0IiwgS2V5RXZlbnRGaXh0dXJlLAotICAg
ICAgICAgICAgICAgdGVzdF9pbmZvX25ldyh0ZXh0aW5wdXRfaHRtbCwgVFJVRSksCi0gICAgICAg
ICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3Rfa2V5
cHJlc3NfZXZlbnRzLAotICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfdGVhcmRvd24p
OwotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQva2V5ZXZlbnRzL2V2ZW50LWJ1dHRvbnMiLCBLZXlF
dmVudEZpeHR1cmUsCi0gICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KGJ1dHRvbl9odG1sLCBG
QUxTRSksCi0gICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV9zZXR1cCwKLSAgICAgICAg
ICAgICAgIHRlc3Rfa2V5cHJlc3NfZXZlbnRzLAotICAgICAgICAgICAgICAga2V5X2V2ZW50X2Zp
eHR1cmVfdGVhcmRvd24pOwotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQva2V5ZXZlbnRzL2V2ZW50
LWxpbmsiLCBLZXlFdmVudEZpeHR1cmUsCi0gICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KGxp
bmtfaHRtbCwgRkFMU0UpLAotICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfc2V0dXAs
Ci0gICAgICAgICAgICAgICB0ZXN0X2tleXByZXNzX2V2ZW50cywKLSAgICAgICAgICAgICAgIGtl
eV9ldmVudF9maXh0dXJlX3RlYXJkb3duKTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2tleWV2
ZW50L2V2ZW50LWRpdiIsIEtleUV2ZW50Rml4dHVyZSwKLSAgICAgICAgICAgICAgIHRlc3RfaW5m
b19uZXcoZGl2X2h0bWwsIFRSVUUpLAotICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVf
c2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X2tleXByZXNzX2V2ZW50cywKLSAgICAgICAgICAg
ICAgIGtleV9ldmVudF9maXh0dXJlX3RlYXJkb3duKTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0
L2tleWV2ZW50L2ltZS10ZXh0aW5wdXQiLCBLZXlFdmVudEZpeHR1cmUsCi0gICAgICAgICAgICAg
ICB0ZXN0X2luZm9fbmV3KHRleHRpbnB1dF9odG1sLCBUUlVFKSwKLSAgICAgICAgICAgICAgIGtl
eV9ldmVudF9maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF9pbWUsCi0gICAgICAg
ICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV90ZWFyZG93bik7Ci0gICAgZ190ZXN0X2FkZCgiL3dl
YmtpdC9rZXlldmVudC9pbWUtZGl2IiwgS2V5RXZlbnRGaXh0dXJlLAotICAgICAgICAgICAgICAg
dGVzdF9pbmZvX25ldyhkaXZfaHRtbCwgVFJVRSksCi0gICAgICAgICAgICAgICBrZXlfZXZlbnRf
Zml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3RfaW1lLAotICAgICAgICAgICAgICAg
a2V5X2V2ZW50X2ZpeHR1cmVfdGVhcmRvd24pOwotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQva2V5
ZXZlbnQvYmxvY2stdGV4dGlucHV0IiwgS2V5RXZlbnRGaXh0dXJlLAotICAgICAgICAgICAgICAg
dGVzdF9pbmZvX25ldyh0ZXh0aW5wdXRfaHRtbF9ibG9ja2luZywgVFJVRSksCi0gICAgICAgICAg
ICAgICBrZXlfZXZlbnRfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3RfYmxvY2tp
bmcsCi0gICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV90ZWFyZG93bik7Ci0gICAgZ190
ZXN0X2FkZCgiL3dlYmtpdC9rZXlldmVudC9ibG9jay1kaXYiLCBLZXlFdmVudEZpeHR1cmUsCi0g
ICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KGRpdl9odG1sX2Jsb2NraW5nLCBUUlVFKSwKLSAg
ICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVz
dF9ibG9ja2luZywKLSAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3RlYXJkb3duKTsK
LSNpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKQotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQv
a2V5ZXZlbnQveGltLXRleHRpbnB1dCIsIEtleUV2ZW50Rml4dHVyZSwKLSAgICAgICAgICAgICAg
IHRlc3RfaW5mb19uZXcodGV4dGlucHV0X2h0bWwsIFRSVUUpLAotICAgICAgICAgICAgICAga2V5
X2V2ZW50X2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X3hpbSwKLSAgICAgICAg
ICAgICAgIGtleV9ldmVudF9maXh0dXJlX3RlYXJkb3duKTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Vi
a2l0L2tleWV2ZW50L3hpbS1kaXYiLCBLZXlFdmVudEZpeHR1cmUsCi0gICAgICAgICAgICAgICB0
ZXN0X2luZm9fbmV3KGRpdl9odG1sLCBUUlVFKSwKLSAgICAgICAgICAgICAgIGtleV9ldmVudF9m
aXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF94aW0sCi0gICAgICAgICAgICAgICBr
ZXlfZXZlbnRfZml4dHVyZV90ZWFyZG93bik7Ci0jZW5kaWYKLQotICAgIHJldHVybiBnX3Rlc3Rf
cnVuKCk7Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rsb2Fk
aW5nLmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0bG9hZGluZy5jCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBhMGE5MjBmMDRjNWMyMGRmNWQ2MmRhZDg2ZmQ0ODM4MWIyNTc1
ZDRkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rsb2FkaW5nLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MzUg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBHdXN0YXZvIE5vcm9uaGEg
U2lsdmEKLSAqIENvcHlyaWdodCAoQykgMjAwOSBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgotI2lu
Y2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KLQotLyogVGhpcyBz
dHJpbmcgaGFzIHRvIGJlIHJhdGhlciBiaWcgYmVjYXVzZSBvZiB0aGUgY2FuY2VsbGVkIHRlc3Qg
LSBpdAotICogbG9va3MgbGlrZSBzb3VwIHJlZnVzZXMgdG8gc2VuZCBvciByZWNlaXZlIGEgdG9v
IHNtYWxsIGNodW5rICovCi0jZGVmaW5lIEhUTUxfU1RSSU5HICI8aHRtbD48Ym9keT5UZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchPC9i
b2R5PjwvaHRtbD4iCi0KLVNvdXBVUkkqIGJhc2VfdXJpOwotCi0vKiBGb3IgcmVhbCByZXF1ZXN0
IHRlc3RpbmcgKi8KLXN0YXRpYyB2b2lkCi1zZXJ2ZXJfY2FsbGJhY2soU291cFNlcnZlciogc2Vy
dmVyLCBTb3VwTWVzc2FnZSogbXNnLAotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHBhdGgs
IEdIYXNoVGFibGUqIHF1ZXJ5LAotICAgICAgICAgICAgICAgIFNvdXBDbGllbnRDb250ZXh0KiBj
b250ZXh0LCBncG9pbnRlciBkYXRhKQotewotICAgIGlmIChtc2ctPm1ldGhvZCAhPSBTT1VQX01F
VEhPRF9HRVQpIHsKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobXNnLCBTT1VQX1NU
QVRVU19OT1RfSU1QTEVNRU5URUQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc291
cF9tZXNzYWdlX3NldF9zdGF0dXMobXNnLCBTT1VQX1NUQVRVU19PSyk7Ci0KLSAgICBpZiAoZ19z
dHJfZXF1YWwocGF0aCwgIi90ZXN0X2xvYWRpbmdfc3RhdHVzIikgfHwgZ19zdHJfZXF1YWwocGF0
aCwgIi90ZXN0X2xvYWRpbmdfc3RhdHVzMiIpKQotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9h
cHBlbmQobXNnLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIEhUTUxfU1RSSU5H
LCBzdHJsZW4oSFRNTF9TVFJJTkcpKTsKLSAgICBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAi
L3Rlc3RfbG9hZF9lcnJvciIpKSB7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1z
ZywgU09VUF9TVEFUVVNfQ0FOVF9DT05ORUNUKTsKLSAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFs
KHBhdGgsICIvdGVzdF9sb2FkaW5nX2NhbmNlbGxlZCIpKSB7Ci0gICAgICAgIHNvdXBfbWVzc2Fn
ZV9oZWFkZXJzX3NldF9lbmNvZGluZyhtc2ctPnJlc3BvbnNlX2hlYWRlcnMsIFNPVVBfRU5DT0RJ
TkdfQ0hVTktFRCk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtc2ctPnJlc3Bv
bnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgSFRNTF9TVFJJTkcsIHN0cmxlbihIVE1MX1NU
UklORykpOwotICAgICAgICBzb3VwX3NlcnZlcl91bnBhdXNlX21lc3NhZ2Uoc2VydmVyLCBtc2cp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxl
dGUobXNnLT5yZXNwb25zZV9ib2R5KTsKLX0KLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIFdlYktp
dFdlYlZpZXcqIHdlYlZpZXc7Ci0gICAgR01haW5Mb29wICpsb29wOwotICAgIGdib29sZWFuIGhh
c19iZWVuX3Byb3Zpc2lvbmFsOwotICAgIGdib29sZWFuIGhhc19iZWVuX2NvbW1pdHRlZDsKLSAg
ICBnYm9vbGVhbiBoYXNfYmVlbl9maXJzdF92aXN1YWxseV9ub25fZW1wdHlfbGF5b3V0OwotICAg
IGdib29sZWFuIGhhc19iZWVuX2ZpbmlzaGVkOwotICAgIGdib29sZWFuIGhhc19iZWVuX2ZhaWxl
ZDsKLSAgICBnYm9vbGVhbiBoYXNfYmVlbl9sb2FkX2Vycm9yOwotfSBXZWJMb2FkaW5nRml4dHVy
ZTsKLQotc3RhdGljIHZvaWQgd2ViX2xvYWRpbmdfZml4dHVyZV9zZXR1cChXZWJMb2FkaW5nRml4
dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGZpeHR1cmUtPndlYlZp
ZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBmaXh0dXJl
LT5sb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotICAgIGdfb2JqZWN0X3JlZl9z
aW5rKGZpeHR1cmUtPndlYlZpZXcpOwotICAgIGZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFs
ID0gRkFMU0U7Ci0gICAgZml4dHVyZS0+aGFzX2JlZW5fY29tbWl0dGVkID0gRkFMU0U7Ci0gICAg
Zml4dHVyZS0+aGFzX2JlZW5fZmlyc3RfdmlzdWFsbHlfbm9uX2VtcHR5X2xheW91dCA9IEZBTFNF
OwotICAgIGZpeHR1cmUtPmhhc19iZWVuX2ZpbmlzaGVkID0gRkFMU0U7Ci0gICAgZml4dHVyZS0+
aGFzX2JlZW5fZmFpbGVkID0gRkFMU0U7Ci0gICAgZml4dHVyZS0+aGFzX2JlZW5fbG9hZF9lcnJv
ciA9IEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJfbG9hZGluZ19maXh0dXJlX3RlYXJkb3du
KFdlYkxvYWRpbmdGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAg
Z19vYmplY3RfdW5yZWYoZml4dHVyZS0+d2ViVmlldyk7Ci0gICAgZ19tYWluX2xvb3BfdW5yZWYo
Zml4dHVyZS0+bG9vcCk7Ci19Ci0KLXN0YXRpYyBjaGFyKiBnZXRfdXJpX2Zvcl9wYXRoKGNvbnN0
IGNoYXIqIHBhdGgpCi17Ci0gICAgU291cFVSSSogdXJpOwotICAgIGNoYXIqIHVyaV9zdHJpbmc7
Ci0KLSAgICB1cmkgPSBzb3VwX3VyaV9uZXdfd2l0aF9iYXNlKGJhc2VfdXJpLCBwYXRoKTsKLSAg
ICB1cmlfc3RyaW5nID0gc291cF91cmlfdG9fc3RyaW5nKHVyaSwgRkFMU0UpOwotICAgIHNvdXBf
dXJpX2ZyZWUgKHVyaSk7Ci0KLSAgICByZXR1cm4gdXJpX3N0cmluZzsKLX0KLQotc3RhdGljIHZv
aWQgbG9hZF9maW5pc2hlZF9jYihXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgV2ViS2l0V2ViRnJh
bWUqIHdlYl9mcmFtZSwgV2ViTG9hZGluZ0ZpeHR1cmUqIGZpeHR1cmUpCi17Ci0gICAgZ19hc3Nl
cnQoZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwpOwotICAgIGdfYXNzZXJ0KGZpeHR1cmUt
Pmhhc19iZWVuX2NvbW1pdHRlZCk7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fZmly
c3RfdmlzdWFsbHlfbm9uX2VtcHR5X2xheW91dCk7Ci0KLSAgICBnX21haW5fbG9vcF9xdWl0KGZp
eHR1cmUtPmxvb3ApOwotfQotCi0KLXN0YXRpYyB2b2lkIHN0YXR1c19jaGFuZ2VkX2NiKEdPYmpl
Y3QqIG9iamVjdCwgR1BhcmFtU3BlYyogcHNwZWMsIFdlYkxvYWRpbmdGaXh0dXJlKiBmaXh0dXJl
KQotewotICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9s
b2FkX3N0YXR1cyhXRUJLSVRfV0VCX1ZJRVcob2JqZWN0KSk7Ci0KLSAgICBzd2l0Y2ggKHN0YXR1
cykgewotICAgIGNhc2UgV0VCS0lUX0xPQURfUFJPVklTSU9OQUw6Ci0gICAgICAgIGdfYXNzZXJ0
KCFmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCk7Ci0gICAgICAgIGdfYXNzZXJ0KCFmaXh0
dXJlLT5oYXNfYmVlbl9jb21taXR0ZWQpOwotICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFz
X2JlZW5fZmlyc3RfdmlzdWFsbHlfbm9uX2VtcHR5X2xheW91dCk7Ci0gICAgICAgIGZpeHR1cmUt
Pmhhc19iZWVuX3Byb3Zpc2lvbmFsID0gVFJVRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBX
RUJLSVRfTE9BRF9DT01NSVRURUQ6Ci0gICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVu
X3Byb3Zpc2lvbmFsKTsKLSAgICAgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX2NvbW1p
dHRlZCk7Ci0gICAgICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNfYmVlbl9maXJzdF92aXN1YWxs
eV9ub25fZW1wdHlfbGF5b3V0KTsKLSAgICAgICAgZml4dHVyZS0+aGFzX2JlZW5fY29tbWl0dGVk
ID0gVFJVRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXRUJLSVRfTE9BRF9GSVJTVF9WSVNV
QUxMWV9OT05fRU1QVFlfTEFZT1VUOgotICAgICAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVl
bl9wcm92aXNpb25hbCk7Ci0gICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX2NvbW1p
dHRlZCk7Ci0gICAgICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNfYmVlbl9maXJzdF92aXN1YWxs
eV9ub25fZW1wdHlfbGF5b3V0KTsKLSAgICAgICAgZml4dHVyZS0+aGFzX2JlZW5fZmlyc3Rfdmlz
dWFsbHlfbm9uX2VtcHR5X2xheW91dCA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
V0VCS0lUX0xPQURfRklOSVNIRUQ6Ci0gICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVu
X3Byb3Zpc2lvbmFsKTsKLSAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fY29tbWl0
dGVkKTsKLSAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fZmlyc3RfdmlzdWFsbHlf
bm9uX2VtcHR5X2xheW91dCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X2xv
YWRpbmdfc3RhdHVzKFdlYkxvYWRpbmdGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRh
dGEpCi17Ci0gICAgY2hhciogdXJpX3N0cmluZzsKLQotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKGZpeHR1cmUtPndlYlZpZXcpLCA9PSwgV0VCS0lU
X0xPQURfUFJPVklTSU9OQUwpOwotCi0gICAgZ19vYmplY3RfY29ubmVjdChHX09CSkVDVChmaXh0
dXJlLT53ZWJWaWV3KSwKLSAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6Om5vdGlmeTo6bG9h
ZC1zdGF0dXMiLCBHX0NBTExCQUNLKHN0YXR1c19jaGFuZ2VkX2NiKSwgZml4dHVyZSwKLSAgICAg
ICAgICAgICAgICAgICAgICJzaWduYWw6OmxvYWQtZmluaXNoZWQiLCBHX0NBTExCQUNLKGxvYWRf
ZmluaXNoZWRfY2IpLCBmaXh0dXJlLAotICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0KLSAg
ICB1cmlfc3RyaW5nID0gZ2V0X3VyaV9mb3JfcGF0aCgiL3Rlc3RfbG9hZGluZ19zdGF0dXMiKTsK
LQotICAgIC8qIGxvYWRfdXJpIHdpbGwgdHJpZ2dlciB0aGUgbmF2aWdhdGlvbi1wb2xpY3ktZGVj
aXNpb24tcmVxdWVzdGVkCi0gICAgICogc2lnbmFsIGVtaXNzaW9uOwotICAgICAqLwotICAgIHdl
YmtpdF93ZWJfdmlld19sb2FkX3VyaShmaXh0dXJlLT53ZWJWaWV3LCB1cmlfc3RyaW5nKTsKLSAg
ICBnX2ZyZWUodXJpX3N0cmluZyk7Ci0KLSAgICBnX21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9v
cCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGxvYWRfZXJyb3Jfc3RhdHVzX2NoYW5nZWRfY2IoR09iamVj
dCogb2JqZWN0LCBHUGFyYW1TcGVjKiBwc3BlYywgV2ViTG9hZGluZ0ZpeHR1cmUqIGZpeHR1cmUp
Ci17Ci0gICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xv
YWRfc3RhdHVzKFdFQktJVF9XRUJfVklFVyhvYmplY3QpKTsKLQotICAgIHN3aXRjaChzdGF0dXMp
IHsKLSAgICBjYXNlIFdFQktJVF9MT0FEX1BST1ZJU0lPTkFMOgotICAgICAgICBnX2Fzc2VydCgh
Zml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwpOwotICAgICAgICBmaXh0dXJlLT5oYXNfYmVl
bl9wcm92aXNpb25hbCA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV0VCS0lUX0xP
QURfQ09NTUlUVEVEOgotICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fY29tbWl0
dGVkKTsKLSAgICAgICAgZml4dHVyZS0+aGFzX2JlZW5fY29tbWl0dGVkID0gVFJVRTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBXRUJLSVRfTE9BRF9GSU5JU0hFRDoKLSAgICAgICAgZ19hc3Nl
cnQoZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwpOwotICAgICAgICBnX2Fzc2VydChmaXh0
dXJlLT5oYXNfYmVlbl9sb2FkX2Vycm9yKTsKLSAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFz
X2JlZW5fZmFpbGVkKTsKLSAgICAgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX2Zpbmlz
aGVkKTsKLSAgICAgICAgZml4dHVyZS0+aGFzX2JlZW5fZmluaXNoZWQgPSBUUlVFOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIFdFQktJVF9MT0FEX0ZBSUxFRDoKLSAgICAgICAgZ19hc3NlcnQo
IWZpeHR1cmUtPmhhc19iZWVuX2ZhaWxlZCk7Ci0gICAgICAgIGZpeHR1cmUtPmhhc19iZWVuX2Zh
aWxlZCA9IFRSVUU7Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQoZml4dHVyZS0+bG9vcCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQot
c3RhdGljIGdib29sZWFuIGxvYWRfZXJyb3JfY2IoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2Vi
S2l0V2ViRnJhbWUqIGZyYW1lLCBjb25zdCBjaGFyKiB1cmksIEdFcnJvciAqZXJyb3IsIFdlYkxv
YWRpbmdGaXh0dXJlKiBmaXh0dXJlKQotewotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVu
X3Byb3Zpc2lvbmFsKTsKLSAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fbG9hZF9lcnJv
cik7Ci0gICAgZml4dHVyZS0+aGFzX2JlZW5fbG9hZF9lcnJvciA9IFRSVUU7Ci0KLSAgICByZXR1
cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RfbG9hZGluZ19lcnJvcihXZWJMb2FkaW5n
Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGNoYXIqIHVyaV9z
dHJpbmc7Ci0KLSAgICBnX3Rlc3RfYnVnKCIyODg0MiIpOwotCi0gICAgZ19zaWduYWxfY29ubmVj
dChmaXh0dXJlLT53ZWJWaWV3LCAibG9hZC1lcnJvciIsIEdfQ0FMTEJBQ0sobG9hZF9lcnJvcl9j
YiksIGZpeHR1cmUpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2ViVmlldywgIm5v
dGlmeTo6bG9hZC1zdGF0dXMiLCBHX0NBTExCQUNLKGxvYWRfZXJyb3Jfc3RhdHVzX2NoYW5nZWRf
Y2IpLCBmaXh0dXJlKTsKLQotICAgIHVyaV9zdHJpbmcgPSBnZXRfdXJpX2Zvcl9wYXRoKCIvdGVz
dF9sb2FkX2Vycm9yIik7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKGZpeHR1cmUtPndl
YlZpZXcsIHVyaV9zdHJpbmcpOwotICAgIGdfZnJlZSh1cmlfc3RyaW5nKTsKLQotICAgIGdfbWFp
bl9sb29wX3J1bihmaXh0dXJlLT5sb29wKTsKLQotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19i
ZWVuX3Byb3Zpc2lvbmFsKTsKLSAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fY29tbWl0
dGVkKTsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9sb2FkX2Vycm9yKTsKLSAgICBn
X2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9mYWlsZWQpOwotICAgIGdfYXNzZXJ0KCFmaXh0dXJl
LT5oYXNfYmVlbl9maW5pc2hlZCk7Ci19Ci0KLS8qIENhbmNlbGxlZCBsb2FkICovCi0KLXN0YXRp
YyBnYm9vbGVhbiBsb2FkX2NhbmNlbGxlZF9jYihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJL
aXRXZWJGcmFtZSogZnJhbWUsIGNvbnN0IGNoYXIqIHVyaSwgR0Vycm9yICplcnJvciwgV2ViTG9h
ZGluZ0ZpeHR1cmUqIGZpeHR1cmUpCi17Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5f
cHJvdmlzaW9uYWwpOwotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX2ZhaWxlZCk7Ci0g
ICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX2xvYWRfZXJyb3IpOwotICAgIGdfYXNzZXJ0
KGVycm9yLT5jb2RlID09IFdFQktJVF9ORVRXT1JLX0VSUk9SX0NBTkNFTExFRCk7Ci0gICAgZml4
dHVyZS0+aGFzX2JlZW5fbG9hZF9lcnJvciA9IFRSVUU7Ci0KLSAgICByZXR1cm4gVFJVRTsKLX0K
LQotc3RhdGljIGdib29sZWFuIHN0b3BfbG9hZCAoZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICB3ZWJr
aXRfd2ViX3ZpZXdfc3RvcF9sb2FkaW5nKFdFQktJVF9XRUJfVklFVyhkYXRhKSk7Ci0gICAgcmV0
dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCBsb2FkX2NhbmNlbGxlZF9zdGF0dXNfY2hhbmdl
ZF9jYihHT2JqZWN0KiBvYmplY3QsIEdQYXJhbVNwZWMqIHBzcGVjLCBXZWJMb2FkaW5nRml4dHVy
ZSogZml4dHVyZSkKLXsKLSAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJf
dmlld19nZXRfbG9hZF9zdGF0dXMoV0VCS0lUX1dFQl9WSUVXKG9iamVjdCkpOwotCi0gICAgc3dp
dGNoKHN0YXR1cykgewotICAgIGNhc2UgV0VCS0lUX0xPQURfUFJPVklTSU9OQUw6Ci0gICAgICAg
IGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCk7Ci0gICAgICAgIGdfYXNz
ZXJ0KCFmaXh0dXJlLT5oYXNfYmVlbl9mYWlsZWQpOwotICAgICAgICBmaXh0dXJlLT5oYXNfYmVl
bl9wcm92aXNpb25hbCA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV0VCS0lUX0xP
QURfQ09NTUlUVEVEOgotICAgICAgICBnX2lkbGVfYWRkIChzdG9wX2xvYWQsIG9iamVjdCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgV0VCS0lUX0xPQURfRkFJTEVEOgotICAgICAgICBnX2Fz
c2VydChmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCk7Ci0gICAgICAgIGdfYXNzZXJ0KCFm
aXh0dXJlLT5oYXNfYmVlbl9mYWlsZWQpOwotICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFz
X2JlZW5fbG9hZF9lcnJvcik7Ci0gICAgICAgIGZpeHR1cmUtPmhhc19iZWVuX2ZhaWxlZCA9IFRS
VUU7Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQoZml4dHVyZS0+bG9vcCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgV0VCS0lUX0xPQURfRklOSVNIRUQ6Ci0gICAgICAgIGdfYXNzZXJ0X25v
dF9yZWFjaGVkKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgdGVzdF9sb2FkaW5nX2NhbmNlbGxlZChXZWJMb2Fk
aW5nRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGNoYXIqIHVy
aV9zdHJpbmc7Ci0KLSAgICBnX3Rlc3RfYnVnKCIyOTY0NCIpOwotCi0gICAgZ19zaWduYWxfY29u
bmVjdChmaXh0dXJlLT53ZWJWaWV3LCAibG9hZC1lcnJvciIsIEdfQ0FMTEJBQ0sobG9hZF9jYW5j
ZWxsZWRfY2IpLCBmaXh0dXJlKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZp
ZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhsb2FkX2NhbmNlbGxlZF9zdGF0
dXNfY2hhbmdlZF9jYiksIGZpeHR1cmUpOwotCi0gICAgdXJpX3N0cmluZyA9IGdldF91cmlfZm9y
X3BhdGgoIi90ZXN0X2xvYWRpbmdfY2FuY2VsbGVkIik7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xv
YWRfdXJpKGZpeHR1cmUtPndlYlZpZXcsIHVyaV9zdHJpbmcpOwotICAgIGdfZnJlZSh1cmlfc3Ry
aW5nKTsKLQotICAgIGdfbWFpbl9sb29wX3J1bihmaXh0dXJlLT5sb29wKTsKLX0KLQotc3RhdGlj
IHZvaWQgbG9hZF9nb2JhY2tfc3RhdHVzX2NoYW5nZWRfY2IoR09iamVjdCogb2JqZWN0LCBHUGFy
YW1TcGVjKiBwc3BlYywgV2ViTG9hZGluZ0ZpeHR1cmUqIGZpeHR1cmUpCi17Ci0gICAgV2ViS2l0
TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKFdFQktJ
VF9XRUJfVklFVyhvYmplY3QpKTsKLQotICAgIHN3aXRjaChzdGF0dXMpIHsKLSAgICBjYXNlIFdF
QktJVF9MT0FEX1BST1ZJU0lPTkFMOgotICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2Jl
ZW5fcHJvdmlzaW9uYWwpOwotICAgICAgICBmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCA9
IFRSVUU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV0VCS0lUX0xPQURfQ09NTUlUVEVEOgot
ICAgICAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCk7Ci0gICAgICAg
IGZpeHR1cmUtPmhhc19iZWVuX2NvbW1pdHRlZCA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgV0VCS0lUX0xPQURfRkFJTEVEOgotICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdFQktJVF9MT0FEX0ZJTklTSEVEOgotICAgICAg
ICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCk7Ci0gICAgICAgIGdfYXNz
ZXJ0KGZpeHR1cmUtPmhhc19iZWVuX2NvbW1pdHRlZCk7Ci0gICAgICAgIGZpeHR1cmUtPmhhc19i
ZWVuX2ZpbmlzaGVkID0gVFJVRTsKLSAgICAgICAgZ19tYWluX2xvb3BfcXVpdChmaXh0dXJlLT5s
b29wKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotfQotCi1zdGF0aWMgdm9pZCBsb2FkX3dlbnRiYWNrX3N0YXR1c19jaGFuZ2VkX2NiKEdPYmpl
Y3QqIG9iamVjdCwgR1BhcmFtU3BlYyogcHNwZWMsIFdlYkxvYWRpbmdGaXh0dXJlKiBmaXh0dXJl
KQotewotICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9s
b2FkX3N0YXR1cyhXRUJLSVRfV0VCX1ZJRVcob2JqZWN0KSk7Ci0gICAgY2hhciogdXJpX3N0cmlu
ZzsKLSAgICBjaGFyKiB1cmlfc3RyaW5nMjsKLQotICAgIHVyaV9zdHJpbmcgPSBnZXRfdXJpX2Zv
cl9wYXRoKCIvdGVzdF9sb2FkaW5nX3N0YXR1cyIpOwotICAgIHVyaV9zdHJpbmcyID0gZ2V0X3Vy
aV9mb3JfcGF0aCgiL3Rlc3RfbG9hZGluZ19zdGF0dXMyIik7Ci0KLSAgICBzd2l0Y2goc3RhdHVz
KSB7Ci0gICAgY2FzZSBXRUJLSVRfTE9BRF9QUk9WSVNJT05BTDoKLSAgICAgICAgZ19hc3NlcnRf
Y21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKGZpeHR1cmUtPndlYlZpZXcpLCA9PSwgdXJp
X3N0cmluZzIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdFQktJVF9MT0FEX0NPTU1JVFRF
RDoKLSAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKGZpeHR1
cmUtPndlYlZpZXcpLCA9PSwgdXJpX3N0cmluZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
V0VCS0lUX0xPQURfRkFJTEVEOgotICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIFdFQktJVF9MT0FEX0ZJTklTSEVEOgotICAgICAgICBnX2Fz
c2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dldF91cmkoZml4dHVyZS0+d2ViVmlldyksID09
LCB1cmlfc3RyaW5nKTsKLSAgICAgICAgZ19tYWluX2xvb3BfcXVpdChmaXh0dXJlLT5sb29wKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0g
ICAgZ19mcmVlKHVyaV9zdHJpbmcpOwotICAgIGdfZnJlZSh1cmlfc3RyaW5nMik7Ci19Ci0KLXN0
YXRpYyB2b2lkIGxvYWRfZXJyb3JfdGVzdChXZWJLaXRXZWJWaWV3KiB3ZWJ2aWV3LCBXZWJLaXRX
ZWJGcmFtZSogZnJhbWUsIGNvbnN0IGNoYXIqIHVyaSwgR0Vycm9yKiBlcnJvcikKLXsKLSAgICBn
X2RlYnVnKCJFcnJvcjogJXMiLCBlcnJvci0+bWVzc2FnZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRl
c3RfbG9hZGluZ19nb2JhY2soV2ViTG9hZGluZ0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50
ZXIgZGF0YSkKLXsKLSAgICBjaGFyKiB1cmlfc3RyaW5nOwotCi0gICAgZ19zaWduYWxfY29ubmVj
dChmaXh0dXJlLT53ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0sobG9h
ZF9nb2JhY2tfc3RhdHVzX2NoYW5nZWRfY2IpLCBmaXh0dXJlKTsKLQotICAgIGdfc2lnbmFsX2Nv
bm5lY3QoZml4dHVyZS0+d2ViVmlldywgImxvYWQtZXJyb3IiLCBHX0NBTExCQUNLKGxvYWRfZXJy
b3JfdGVzdCksIGZpeHR1cmUpOwotCi0gICAgdXJpX3N0cmluZyA9IGdldF91cmlfZm9yX3BhdGgo
Ii90ZXN0X2xvYWRpbmdfc3RhdHVzIik7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKGZp
eHR1cmUtPndlYlZpZXcsIHVyaV9zdHJpbmcpOwotICAgIGdfZnJlZSh1cmlfc3RyaW5nKTsKLQot
ICAgIGdfbWFpbl9sb29wX3J1bihmaXh0dXJlLT5sb29wKTsKLQotICAgIGZpeHR1cmUtPmhhc19i
ZWVuX3Byb3Zpc2lvbmFsID0gRkFMU0U7Ci0gICAgZml4dHVyZS0+aGFzX2JlZW5fY29tbWl0dGVk
ID0gRkFMU0U7Ci0gICAgZml4dHVyZS0+aGFzX2JlZW5fZmlyc3RfdmlzdWFsbHlfbm9uX2VtcHR5
X2xheW91dCA9IEZBTFNFOwotICAgIGZpeHR1cmUtPmhhc19iZWVuX2ZpbmlzaGVkID0gRkFMU0U7
Ci0gICAgZml4dHVyZS0+aGFzX2JlZW5fZmFpbGVkID0gRkFMU0U7Ci0gICAgZml4dHVyZS0+aGFz
X2JlZW5fbG9hZF9lcnJvciA9IEZBTFNFOwotCi0gICAgdXJpX3N0cmluZyA9IGdldF91cmlfZm9y
X3BhdGgoIi90ZXN0X2xvYWRpbmdfc3RhdHVzMiIpOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2Fk
X3VyaShmaXh0dXJlLT53ZWJWaWV3LCB1cmlfc3RyaW5nKTsKLSAgICBnX2ZyZWUodXJpX3N0cmlu
Zyk7Ci0KLSAgICBnX21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7Ci0KLSAgICBnX3NpZ25h
bF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMoZml4dHVyZS0+d2ViVmlldywgbG9hZF9nb2Jh
Y2tfc3RhdHVzX2NoYW5nZWRfY2IsIGZpeHR1cmUpOwotCi0gICAgZml4dHVyZS0+aGFzX2JlZW5f
cHJvdmlzaW9uYWwgPSBGQUxTRTsKLSAgICBmaXh0dXJlLT5oYXNfYmVlbl9jb21taXR0ZWQgPSBG
QUxTRTsKLSAgICBmaXh0dXJlLT5oYXNfYmVlbl9maXJzdF92aXN1YWxseV9ub25fZW1wdHlfbGF5
b3V0ID0gRkFMU0U7Ci0gICAgZml4dHVyZS0+aGFzX2JlZW5fZmluaXNoZWQgPSBGQUxTRTsKLSAg
ICBmaXh0dXJlLT5oYXNfYmVlbl9mYWlsZWQgPSBGQUxTRTsKLSAgICBmaXh0dXJlLT5oYXNfYmVl
bl9sb2FkX2Vycm9yID0gRkFMU0U7Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndl
YlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhsb2FkX3dlbnRiYWNrX3N0
YXR1c19jaGFuZ2VkX2NiKSwgZml4dHVyZSk7Ci0gICAgd2Via2l0X3dlYl92aWV3X2dvX2JhY2so
Zml4dHVyZS0+d2ViVmlldyk7Ci0KLSAgICBnX21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7
Ci0KLSAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMoZml4dHVyZS0+d2Vi
VmlldywgbG9hZF93ZW50YmFja19zdGF0dXNfY2hhbmdlZF9jYiwgZml4dHVyZSk7Ci19Ci0KLWlu
dCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKLXsKLSAgICBTb3VwU2VydmVyKiBzZXJ2ZXI7
Ci0KLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAgICBzZXJ2ZXIg
PSBzb3VwX3NlcnZlcl9uZXcoU09VUF9TRVJWRVJfUE9SVCwgMCwgTlVMTCk7Ci0gICAgc291cF9z
ZXJ2ZXJfcnVuX2FzeW5jKHNlcnZlcik7Ci0KLSAgICBzb3VwX3NlcnZlcl9hZGRfaGFuZGxlcihz
ZXJ2ZXIsIE5VTEwsIHNlcnZlcl9jYWxsYmFjaywgTlVMTCwgTlVMTCk7Ci0KLSAgICBiYXNlX3Vy
aSA9IHNvdXBfdXJpX25ldygiaHR0cDovLzEyNy4wLjAuMS8iKTsKLSAgICBzb3VwX3VyaV9zZXRf
cG9ydChiYXNlX3VyaSwgc291cF9zZXJ2ZXJfZ2V0X3BvcnQoc2VydmVyKSk7Ci0KLSAgICBnX3Rl
c3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwotICAgIGdfdGVzdF9hZGQo
Ii93ZWJraXQvbG9hZGluZy9zdGF0dXMiLAotICAgICAgICAgICAgICAgV2ViTG9hZGluZ0ZpeHR1
cmUsIE5VTEwsCi0gICAgICAgICAgICAgICB3ZWJfbG9hZGluZ19maXh0dXJlX3NldHVwLAotICAg
ICAgICAgICAgICAgdGVzdF9sb2FkaW5nX3N0YXR1cywKLSAgICAgICAgICAgICAgIHdlYl9sb2Fk
aW5nX2ZpeHR1cmVfdGVhcmRvd24pOwotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvbG9hZGluZy9l
cnJvciIsCi0gICAgICAgICAgICAgICBXZWJMb2FkaW5nRml4dHVyZSwgTlVMTCwKLSAgICAgICAg
ICAgICAgIHdlYl9sb2FkaW5nX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X2xv
YWRpbmdfZXJyb3IsCi0gICAgICAgICAgICAgICB3ZWJfbG9hZGluZ19maXh0dXJlX3RlYXJkb3du
KTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2xvYWRpbmcvY2FuY2VsbGVkIiwKLSAgICAgICAg
ICAgICAgIFdlYkxvYWRpbmdGaXh0dXJlLCBOVUxMLAotICAgICAgICAgICAgICAgd2ViX2xvYWRp
bmdfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3RfbG9hZGluZ19jYW5jZWxsZWQs
Ci0gICAgICAgICAgICAgICB3ZWJfbG9hZGluZ19maXh0dXJlX3RlYXJkb3duKTsKLSAgICBnX3Rl
c3RfYWRkKCIvd2Via2l0L2xvYWRpbmcvZ29iYWNrIiwKLSAgICAgICAgICAgICAgIFdlYkxvYWRp
bmdGaXh0dXJlLCBOVUxMLAotICAgICAgICAgICAgICAgd2ViX2xvYWRpbmdfZml4dHVyZV9zZXR1
cCwKLSAgICAgICAgICAgICAgIHRlc3RfbG9hZGluZ19nb2JhY2ssCi0gICAgICAgICAgICAgICB3
ZWJfbG9hZGluZ19maXh0dXJlX3RlYXJkb3duKTsKLSAgICByZXR1cm4gZ190ZXN0X3J1bigpOwot
fQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0bWltZWhhbmRsaW5n
LmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0bWltZWhhbmRsaW5nLmMKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkOGUxYzZkNjdhMGE1NWUzOTcwMTU0ZjFjZDdmMjJhZGMy
MGU4NzcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdG1pbWVoYW5kbGluZy5jCisrKyAvZGV2L251bGwKQEAg
LTEsMjAzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIE1pY2hhZWwgQWxv
bnpvCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR3VzdGF2byBOb3JvbmhhIFNpbHZhCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJ0ZXN0X3V0aWxzLmgiCi0KLSNpbmNsdWRlIDxnbGliLmg+
Ci0jaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KLSNp
bmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+Ci0jaW5jbHVkZSA8
dW5pc3RkLmg+Ci0KLUdNYWluTG9vcCogbG9vcDsKLVNvdXBTZXNzaW9uICpzZXNzaW9uOwotY2hh
ciogYmFzZV91cmk7Ci0KLS8qIEZvciByZWFsIHJlcXVlc3QgdGVzdGluZyAqLwotc3RhdGljIHZv
aWQKLXNlcnZlcl9jYWxsYmFjayhTb3VwU2VydmVyICpzZXJ2ZXIsIFNvdXBNZXNzYWdlICptc2cs
Ci0gICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsIEdIYXNoVGFibGUgKnF1ZXJ5LAot
ICAgICAgICAgICAgICAgICBTb3VwQ2xpZW50Q29udGV4dCAqY29udGV4dCwgZ3BvaW50ZXIgZGF0
YSkKLXsKLSAgICBpZiAobXNnLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7Ci0gICAgICAg
IHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1zZywgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVE
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVz
KG1zZywgU09VUF9TVEFUVVNfT0spOwotCi0gICAgLyogUERGICovCi0gICAgaWYgKGdfc3RyX2Vx
dWFsKHBhdGgsICIvcGRmIikpIHsKLSAgICAgICAgY2hhciogY29udGVudHM7Ci0gICAgICAgIGdz
aXplIGxlbmd0aDsKLSAgICAgICAgR0Vycm9yKiBlcnJvciA9IE5VTEw7Ci0KLSAgICAgICAgZ19m
aWxlX2dldF9jb250ZW50cygidGVzdC5wZGYiLCAmY29udGVudHMsICZsZW5ndGgsICZlcnJvcik7
Ci0gICAgICAgIGdfYXNzZXJ0KCFlcnJvcik7Ci0KLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlf
YXBwZW5kKG1zZy0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgY29udGVudHMsIGxl
bmd0aCk7Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2h0bWwiKSkgewotICAg
ICAgICBjaGFyKiBjb250ZW50czsKLSAgICAgICAgZ3NpemUgbGVuZ3RoOwotICAgICAgICBHRXJy
b3IqIGVycm9yID0gTlVMTDsKLQotICAgICAgICBnX2ZpbGVfZ2V0X2NvbnRlbnRzKCJ0ZXN0Lmh0
bWwiLCAmY29udGVudHMsICZsZW5ndGgsICZlcnJvcik7Ci0gICAgICAgIGdfYXNzZXJ0KCFlcnJv
cik7Ci0KLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1zZy0+cmVzcG9uc2VfYm9k
eSwgU09VUF9NRU1PUllfVEFLRSwgY29udGVudHMsIGxlbmd0aCk7Ci0gICAgfSBlbHNlIGlmIChn
X3N0cl9lcXVhbChwYXRoLCAiL3RleHQiKSkgewotICAgICAgICBjaGFyKiBjb250ZW50czsKLSAg
ICAgICAgZ3NpemUgbGVuZ3RoOwotICAgICAgICBHRXJyb3IqIGVycm9yID0gTlVMTDsKLQotICAg
ICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobXNnLT5yZXNwb25zZV9oZWFkZXJzLCAi
Q29udGVudC1EaXNwb3NpdGlvbiIsICJhdHRhY2htZW50OyBmaWxlbmFtZT10ZXN0LnR4dCIpOwot
Ci0gICAgICAgIGdfZmlsZV9nZXRfY29udGVudHMoInRlc3QudHh0IiwgJmNvbnRlbnRzLCAmbGVu
Z3RoLCAmZXJyb3IpOwotICAgICAgICBnX2Fzc2VydCghZXJyb3IpOwotCi0gICAgICAgIHNvdXBf
bWVzc2FnZV9ib2R5X2FwcGVuZChtc2ctPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0Us
IGNvbnRlbnRzLCBsZW5ndGgpOwotICAgIH0KLQotICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBs
ZXRlKG1zZy0+cmVzcG9uc2VfYm9keSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlkbGVfcXVpdF9sb29w
X2NiKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBHUGFyYW1TcGVjKiBwc3BlYywgZ3BvaW50ZXIg
ZGF0YSkKLXsKLSAgICBpZiAod2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJfdmll
dykgPT0gV0VCS0lUX0xPQURfRklOSVNIRUQgfHwKLSAgICAgICAgd2Via2l0X3dlYl92aWV3X2dl
dF9sb2FkX3N0YXR1cyh3ZWJfdmlldykgPT0gV0VCS0lUX0xPQURfRkFJTEVEKQotICAgICAgICBn
X21haW5fbG9vcF9xdWl0KGxvb3ApOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gbWltZV90eXBlX3Bv
bGljeV9kZWNpc2lvbl9yZXF1ZXN0ZWRfY2IoV2ViS2l0V2ViVmlldyogdmlldywgV2ViS2l0V2Vi
RnJhbWUqIGZyYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0LCBjb25zdCBjaGFyKiBt
aW1lX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgV2ViS2l0V2ViUG9saWN5RGVjaXNpb24qIGRlY2lzaW9uLCBncG9pbnRlciBkYXRh
KQotewotICAgIGNoYXIqIHR5cGUgPSAoY2hhciopZGF0YTsKLQotICAgIGlmIChnX3N0cl9lcXVh
bCh0eXBlLCAicGRmIikpIHsKLSAgICAgICAgZ19hc3NlcnRfY21wc3RyKG1pbWVfdHlwZSwgPT0s
ICJhcHBsaWNhdGlvbi9wZGYiKTsKLSAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19j
YW5fc2hvd19taW1lX3R5cGUodmlldywgbWltZV90eXBlKSk7Ci0gICAgfSBlbHNlIGlmIChnX3N0
cl9lcXVhbCh0eXBlLCAiaHRtbCIpKSB7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cihtaW1lX3R5
cGUsID09LCAidGV4dC9odG1sIik7Ci0gICAgICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19j
YW5fc2hvd19taW1lX3R5cGUodmlldywgbWltZV90eXBlKSk7Ci0gICAgfSBlbHNlIGlmIChnX3N0
cl9lcXVhbCh0eXBlLCAidGV4dCIpKSB7Ci0gICAgICAgIFdlYktpdE5ldHdvcmtSZXNwb25zZSog
cmVzcG9uc2UgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9uZXR3b3JrX3Jlc3BvbnNlKGZyYW1lKTsK
LSAgICAgICAgU291cE1lc3NhZ2UqIG1lc3NhZ2UgPSB3ZWJraXRfbmV0d29ya19yZXNwb25zZV9n
ZXRfbWVzc2FnZShyZXNwb25zZSk7Ci0gICAgICAgIGNoYXIqIGRpc3Bvc2l0aW9uOwotCi0gICAg
ICAgIGdfYXNzZXJ0KG1lc3NhZ2UpOwotICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRf
Y29udGVudF9kaXNwb3NpdGlvbihtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGlzcG9zaXRpb24s
IE5VTEwpOwotICAgICAgICBnX29iamVjdF91bnJlZihyZXNwb25zZSk7Ci0KLSAgICAgICAgZ19h
c3NlcnRfY21wc3RyKGRpc3Bvc2l0aW9uLCA9PSwgImF0dGFjaG1lbnQiKTsKLSAgICAgICAgZ19m
cmVlKGRpc3Bvc2l0aW9uKTsKLQotICAgICAgICBnX2Fzc2VydF9jbXBzdHIobWltZV90eXBlLCA9
PSwgInRleHQvcGxhaW4iKTsKLSAgICAgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2Nhbl9z
aG93X21pbWVfdHlwZSh2aWV3LCBtaW1lX3R5cGUpKTsKLSAgICB9Ci0KLSAgICBnX2ZyZWUodHlw
ZSk7Ci0KLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RSZW1vdGVNaW1l
VHlwZShjb25zdCB2b2lkKiBkYXRhKQotewotICAgIGNvbnN0IGNoYXIqIG5hbWUgPSAoY29uc3Qg
Y2hhciopIGRhdGE7Ci0gICAgV2ViS2l0V2ViVmlldyogdmlldyA9IFdFQktJVF9XRUJfVklFVyh3
ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKEdfT0JKRUNUKHZp
ZXcpKTsKLQotICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7Ci0KLSAgICBn
X29iamVjdF9jb25uZWN0KEdfT0JKRUNUKHZpZXcpLAotICAgICAgICAgICAgICAgICAgICAgInNp
Z25hbDo6bm90aWZ5Ojpsb2FkLXN0YXR1cyIsIGlkbGVfcXVpdF9sb29wX2NiLCBOVUxMLAotICAg
ICAgICAgICAgICAgICAgICAgInNpZ25hbDo6bWltZS10eXBlLXBvbGljeS1kZWNpc2lvbi1yZXF1
ZXN0ZWQiLCBtaW1lX3R5cGVfcG9saWN5X2RlY2lzaW9uX3JlcXVlc3RlZF9jYiwgZ19zdHJkdXAo
bmFtZSksCi0gICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLQotICAgIGNoYXIqIGVmZmVjdGl2
ZV91cmkgPSBnX3N0cmR1cF9wcmludGYoIiVzJXMiLCBiYXNlX3VyaSwgbmFtZSk7Ci0gICAgd2Vi
a2l0X3dlYl92aWV3X2xvYWRfdXJpKHZpZXcsIGVmZmVjdGl2ZV91cmkpOwotICAgIGdfZnJlZShl
ZmZlY3RpdmVfdXJpKTsKLQotICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLQotICAgIGdfb2Jq
ZWN0X3VucmVmKHZpZXcpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0TG9jYWxNaW1lVHlwZShjb25z
dCB2b2lkKiBkYXRhKQotewotICAgICBjb25zdCBjaGFyKiB0eXBlTmFtZSA9IChjb25zdCBjaGFy
KikgZGF0YTsKLSAgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJr
aXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgICBnX29iamVjdF9yZWZfc2luayhHX09CSkVDVCh2aWV3
KSk7Ci0KLSAgICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLQotICAgICBn
X29iamVjdF9jb25uZWN0KEdfT0JKRUNUKHZpZXcpLAotICAgICAgICAgICAgICAgICAgICAgICJz
aWduYWw6Om5vdGlmeTo6bG9hZC1zdGF0dXMiLCBpZGxlX3F1aXRfbG9vcF9jYiwgTlVMTCwKLSAg
ICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjptaW1lLXR5cGUtcG9saWN5LWRlY2lzaW9uLXJl
cXVlc3RlZCIsIG1pbWVfdHlwZV9wb2xpY3lfZGVjaXNpb25fcmVxdWVzdGVkX2NiLCBnX3N0cmR1
cCh0eXBlTmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0KLSAgICAgZ2NoYXIq
IGZpbGVuYW1lID0gZ19zdHJkdXBfcHJpbnRmKCJ0ZXN0LiVzIiwgdHlwZU5hbWUpOwotICAgICBH
RmlsZSogZmlsZSA9IGdfZmlsZV9uZXdfZm9yX3BhdGgoZmlsZW5hbWUpOwotICAgICBnX2ZyZWUo
ZmlsZW5hbWUpOwotCi0gICAgIGdjaGFyKiBmaWxlVVJJID0gZ19maWxlX2dldF91cmkoZmlsZSk7
Ci0gICAgIGdfb2JqZWN0X3VucmVmKGZpbGUpOwotCi0gICAgIHdlYmtpdF93ZWJfdmlld19sb2Fk
X3VyaSh2aWV3LCBmaWxlVVJJKTsKLSAgICAgZ19mcmVlKGZpbGVVUkkpOwotIAotICAgICBnX21h
aW5fbG9vcF9ydW4obG9vcCk7Ci0gICAgIGdfb2JqZWN0X3VucmVmKHZpZXcpOwotfQotCi1pbnQg
bWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCi17Ci0gICAgU291cFNlcnZlciogc2VydmVyOwot
ICAgIFNvdXBVUkkqIHNvdXBfdXJpOwotCi0gICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3Ys
IE5VTEwpOwotCi0gICAgLyogSG9wZWZ1bGx5IG1ha2UgdGVzdCBpbmRlcGVuZGVudCBvZiB0aGUg
cGF0aCBpdCdzIGNhbGxlZCBmcm9tLiAqLwotICAgIHRlc3R1dGlsc19yZWxhdGl2ZV9jaGRpcigi
U291cmNlL1dlYktpdC9ndGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3QuaHRtbCIsIGFyZ3ZbMF0pOwot
Ci0gICAgc2VydmVyID0gc291cF9zZXJ2ZXJfbmV3KFNPVVBfU0VSVkVSX1BPUlQsIDAsIE5VTEwp
OwotICAgIHNvdXBfc2VydmVyX3J1bl9hc3luYyhzZXJ2ZXIpOwotCi0gICAgc291cF9zZXJ2ZXJf
YWRkX2hhbmRsZXIoc2VydmVyLCBOVUxMLCBzZXJ2ZXJfY2FsbGJhY2ssIE5VTEwsIE5VTEwpOwot
Ci0gICAgc291cF91cmkgPSBzb3VwX3VyaV9uZXcoImh0dHA6Ly8xMjcuMC4wLjEvIik7Ci0gICAg
c291cF91cmlfc2V0X3BvcnQoc291cF91cmksIHNvdXBfc2VydmVyX2dldF9wb3J0KHNlcnZlcikp
OwotCi0gICAgYmFzZV91cmkgPSBzb3VwX3VyaV90b19zdHJpbmcoc291cF91cmksIEZBTFNFKTsK
LSAgICBzb3VwX3VyaV9mcmVlKHNvdXBfdXJpKTsKLQotICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0gICAgZ190ZXN0X2FkZF9kYXRhX2Z1bmMoIi93ZWJr
aXQvbWltZS9yZW1vdGUtUERGIiwgInBkZiIsIHRlc3RSZW1vdGVNaW1lVHlwZSk7Ci0gICAgZ190
ZXN0X2FkZF9kYXRhX2Z1bmMoIi93ZWJraXQvbWltZS9yZW1vdGUtSFRNTCIsICJodG1sIiwgdGVz
dFJlbW90ZU1pbWVUeXBlKTsKLSAgICBnX3Rlc3RfYWRkX2RhdGFfZnVuYygiL3dlYmtpdC9taW1l
L3JlbW90ZS1URVhUIiwgInRleHQiLCB0ZXN0UmVtb3RlTWltZVR5cGUpOwotICAgIGdfdGVzdF9h
ZGRfZGF0YV9mdW5jKCIvd2Via2l0L21pbWUvbG9jYWwtUERGIiwgInBkZiIsIHRlc3RMb2NhbE1p
bWVUeXBlKTsKLSAgICBnX3Rlc3RfYWRkX2RhdGFfZnVuYygiL3dlYmtpdC9taW1lL2xvY2FsLUhU
TUwiLCAiaHRtbCIsIHRlc3RMb2NhbE1pbWVUeXBlKTsKLSAgICBnX3Rlc3RfYWRkX2RhdGFfZnVu
YygiL3dlYmtpdC9taW1lL2xvY2FsLVRFWFQiLCAidGV4dCIsIHRlc3RMb2NhbE1pbWVUeXBlKTsK
LQotICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2d0ay90ZXN0cy90ZXN0bmV0d29ya3JlcXVlc3QuYyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3Rz
L3Rlc3RuZXR3b3JrcmVxdWVzdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjJj
OTBmMmQyM2FiMjFjMDgzMjQyNDZiZDFjYmU0YThkNDczMTQzLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Ru
ZXR3b3JrcmVxdWVzdC5jCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOSBHdXN0YXZvIE5vcm9uaGEgU2lsdmEKLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8Z2xp
Yi5oPgotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2lu
Y2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KLQotc3RhdGljIHZv
aWQgdGVzdF9uZXR3b3JrX3JlcXVlc3RfY3JlYXRlX2Rlc3Ryb3koKQotewotICAgIFdlYktpdE5l
dHdvcmtSZXF1ZXN0KiByZXF1ZXN0OwotICAgIFNvdXBNZXNzYWdlKiBtZXNzYWdlOwotCi0gICAg
LyogVGVzdCBjcmVhdGlvbiB3aXRoIFVSSSAqLwotICAgIHJlcXVlc3QgPSBXRUJLSVRfTkVUV09S
S19SRVFVRVNUKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9ORVRXT1JLX1JFUVVFU1QsICJ1cmki
LCAiaHR0cDovL2RlYmlhbi5vcmcvIiwgTlVMTCkpOwotICAgIGdfYXNzZXJ0KFdFQktJVF9JU19O
RVRXT1JLX1JFUVVFU1QocmVxdWVzdCkpOwotICAgIG1lc3NhZ2UgPSB3ZWJraXRfbmV0d29ya19y
ZXF1ZXN0X2dldF9tZXNzYWdlKHJlcXVlc3QpOwotICAgIGdfYXNzZXJ0KCFtZXNzYWdlKTsKLSAg
ICBnX29iamVjdF91bnJlZihyZXF1ZXN0KTsKLQotICAgIC8qIFRlc3QgY3JlYXRpb24gd2l0aCBT
b3VwTWVzc2FnZSAqLwotICAgIG1lc3NhZ2UgPSBzb3VwX21lc3NhZ2VfbmV3KCJHRVQiLCAiaHR0
cDovL2RlYmlhbi5vcmcvIik7Ci0gICAgcmVxdWVzdCA9IFdFQktJVF9ORVRXT1JLX1JFUVVFU1Qo
Z19vYmplY3RfbmV3KFdFQktJVF9UWVBFX05FVFdPUktfUkVRVUVTVCwgIm1lc3NhZ2UiLCBtZXNz
YWdlLCBOVUxMKSk7Ci0gICAgZ19hc3NlcnQoV0VCS0lUX0lTX05FVFdPUktfUkVRVUVTVChyZXF1
ZXN0KSk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKG1lc3NhZ2UpLT5yZWZfY291bnQs
ID09LCAyKTsKLSAgICBnX29iamVjdF91bnJlZihyZXF1ZXN0KTsKLSAgICBnX2Fzc2VydF9jbXBp
bnQoR19PQkpFQ1QobWVzc2FnZSktPnJlZl9jb3VudCwgPT0sIDEpOwotICAgIGdfb2JqZWN0X3Vu
cmVmKG1lc3NhZ2UpOwotCi0gICAgLyogVGVzdCBjcmVhdGlvbiB3aXRoIGJvdGggU291cE1lc3Nh
Z2UgYW5kIFVSSSAqLwotICAgIG1lc3NhZ2UgPSBzb3VwX21lc3NhZ2VfbmV3KCJHRVQiLCAiaHR0
cDovL2RlYmlhbi5vcmcvIik7Ci0gICAgcmVxdWVzdCA9IFdFQktJVF9ORVRXT1JLX1JFUVVFU1Qo
Z19vYmplY3RfbmV3KFdFQktJVF9UWVBFX05FVFdPUktfUkVRVUVTVCwgIm1lc3NhZ2UiLCBtZXNz
YWdlLCAidXJpIiwgImh0dHA6Ly9nbm9tZS5vcmcvIiwgTlVMTCkpOwotICAgIGdfYXNzZXJ0KFdF
QktJVF9JU19ORVRXT1JLX1JFUVVFU1QocmVxdWVzdCkpOwotICAgIGdfYXNzZXJ0X2NtcGludChH
X09CSkVDVChtZXNzYWdlKS0+cmVmX2NvdW50LCA9PSwgMik7Ci0gICAgZ19hc3NlcnRfY21wc3Ry
KHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KSwgPT0sICJodHRwOi8vZ25v
bWUub3JnLyIpOwotICAgIGdfb2JqZWN0X3VucmVmKHJlcXVlc3QpOwotICAgIGdfYXNzZXJ0X2Nt
cGludChHX09CSkVDVChtZXNzYWdlKS0+cmVmX2NvdW50LCA9PSwgMSk7Ci0gICAgZ19vYmplY3Rf
dW5yZWYobWVzc2FnZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RfbmV0d29ya19yZXF1ZXN0X3By
b3BlcnRpZXMoKQotewotICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0OwotICAgIFNv
dXBNZXNzYWdlKiBtZXNzYWdlOwotICAgIGdjaGFyKiBzb3VwVVJJOwotCi0gICAgLyogVGVzdCBV
UkkgaXMgc2V0IGNvcnJlY3RseSB3aGVuIGNyZWF0aW5nIHdpdGggVVJJICovCi0gICAgcmVxdWVz
dCA9IHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfbmV3KCJodHRwOi8vZGViaWFuLm9yZy8iKTsKLSAg
ICBnX2Fzc2VydChXRUJLSVRfSVNfTkVUV09SS19SRVFVRVNUKHJlcXVlc3QpKTsKLSAgICBnX2Fz
c2VydF9jbXBzdHIod2Via2l0X25ldHdvcmtfcmVxdWVzdF9nZXRfdXJpKHJlcXVlc3QpLCA9PSwg
Imh0dHA6Ly9kZWJpYW4ub3JnLyIpOwotICAgIGdfb2JqZWN0X3VucmVmKHJlcXVlc3QpOwotCi0g
ICAgLyogVGVzdCBVUkkgaXMgc2V0IGNvcnJlY3RseSB3aGVuIGNyZWF0aW5nIHdpdGggTWVzc2Fn
ZSAqLwotICAgIG1lc3NhZ2UgPSBzb3VwX21lc3NhZ2VfbmV3KCJHRVQiLCAiaHR0cDovL2RlYmlh
bi5vcmcvIik7Ci0gICAgcmVxdWVzdCA9IFdFQktJVF9ORVRXT1JLX1JFUVVFU1QoZ19vYmplY3Rf
bmV3KFdFQktJVF9UWVBFX05FVFdPUktfUkVRVUVTVCwgIm1lc3NhZ2UiLCBtZXNzYWdlLCBOVUxM
KSk7Ci0gICAgZ19hc3NlcnQoV0VCS0lUX0lTX05FVFdPUktfUkVRVUVTVChyZXF1ZXN0KSk7Ci0g
ICAgZ19vYmplY3RfdW5yZWYobWVzc2FnZSk7Ci0KLSAgICBtZXNzYWdlID0gd2Via2l0X25ldHdv
cmtfcmVxdWVzdF9nZXRfbWVzc2FnZShyZXF1ZXN0KTsKLSAgICBzb3VwVVJJID0gc291cF91cmlf
dG9fc3RyaW5nKHNvdXBfbWVzc2FnZV9nZXRfdXJpKG1lc3NhZ2UpLCBGQUxTRSk7Ci0gICAgZ19h
c3NlcnRfY21wc3RyKHNvdXBVUkksID09LCAiaHR0cDovL2RlYmlhbi5vcmcvIik7Ci0gICAgZ19m
cmVlKHNvdXBVUkkpOwotCi0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9uZXR3b3JrX3JlcXVl
c3RfZ2V0X3VyaShyZXF1ZXN0KSwgPT0sICJodHRwOi8vZGViaWFuLm9yZy8iKTsKLSAgICBnX29i
amVjdF91bnJlZihyZXF1ZXN0KTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2
KQotewotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLQotICAgIGdfdGVz
dF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0gICAgZ190ZXN0X2FkZF9m
dW5jKCIvd2Via2l0L25ldHdvcmtyZXF1ZXN0L2NyZWF0ZWRlc3Ryb3kiLCB0ZXN0X25ldHdvcmtf
cmVxdWVzdF9jcmVhdGVfZGVzdHJveSk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L25l
dHdvcmtyZXF1ZXN0L3Byb3BlcnRpZXMiLCB0ZXN0X25ldHdvcmtfcmVxdWVzdF9wcm9wZXJ0aWVz
KTsKLSAgICByZXR1cm4gZ190ZXN0X3J1biAoKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvZ3RrL3Rlc3RzL3Rlc3RuZXR3b3JrcmVzcG9uc2UuYyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rl
c3RzL3Rlc3RuZXR3b3JrcmVzcG9uc2UuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YjgwNmFhMTExZmU4YjYyNzkxNzYyZDJmYzM5MzI1ZGE1N2RlYTdhYi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90
ZXN0bmV0d29ya3Jlc3BvbnNlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA5IEd1c3Rhdm8gTm9yb25oYSBTaWx2YQotICogQ29weXJpZ2h0
IChDKSAyMDA5IENvbGxhYm9yYSBMdGQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlIDxl
cnJuby5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRl
IDxnbGliL2dzdGRpby5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDxzdGRsaWIu
aD4KLSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+Ci0KLXN0YXRpYyB2b2lkIHRlc3RfbmV0d29y
a19yZXNwb25zZV9jcmVhdGVfZGVzdHJveSgpCi17Ci0gICAgV2ViS2l0TmV0d29ya1Jlc3BvbnNl
KiByZXNwb25zZTsKLSAgICBTb3VwTWVzc2FnZSogbWVzc2FnZTsKLQotICAgIC8qIFRlc3QgY3Jl
YXRpb24gd2l0aCBVUkkgKi8KLSAgICByZXNwb25zZSA9IFdFQktJVF9ORVRXT1JLX1JFU1BPTlNF
KGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9ORVRXT1JLX1JFU1BPTlNFLCAidXJpIiwgImh0dHA6
Ly9kZWJpYW4ub3JnLyIsIE5VTEwpKTsKLSAgICBnX2Fzc2VydChXRUJLSVRfSVNfTkVUV09SS19S
RVNQT05TRShyZXNwb25zZSkpOwotICAgIG1lc3NhZ2UgPSB3ZWJraXRfbmV0d29ya19yZXNwb25z
ZV9nZXRfbWVzc2FnZShyZXNwb25zZSk7Ci0gICAgZ19hc3NlcnQoIW1lc3NhZ2UpOwotICAgIGdf
b2JqZWN0X3VucmVmKHJlc3BvbnNlKTsKLQotICAgIC8qIFRlc3QgY3JlYXRpb24gd2l0aCBTb3Vw
TWVzc2FnZSAqLwotICAgIG1lc3NhZ2UgPSBzb3VwX21lc3NhZ2VfbmV3KCJHRVQiLCAiaHR0cDov
L2RlYmlhbi5vcmcvIik7Ci0gICAgcmVzcG9uc2UgPSBXRUJLSVRfTkVUV09SS19SRVNQT05TRShn
X29iamVjdF9uZXcoV0VCS0lUX1RZUEVfTkVUV09SS19SRVNQT05TRSwgIm1lc3NhZ2UiLCBtZXNz
YWdlLCBOVUxMKSk7Ci0gICAgZ19hc3NlcnQoV0VCS0lUX0lTX05FVFdPUktfUkVTUE9OU0UocmVz
cG9uc2UpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QobWVzc2FnZSktPnJlZl9jb3Vu
dCwgPT0sIDIpOwotICAgIGdfb2JqZWN0X3VucmVmKHJlc3BvbnNlKTsKLSAgICBnX2Fzc2VydF9j
bXBpbnQoR19PQkpFQ1QobWVzc2FnZSktPnJlZl9jb3VudCwgPT0sIDEpOwotICAgIGdfb2JqZWN0
X3VucmVmKG1lc3NhZ2UpOwotCi0gICAgLyogVGVzdCBjcmVhdGlvbiB3aXRoIGJvdGggU291cE1l
c3NhZ2UgYW5kIFVSSSAqLwotICAgIG1lc3NhZ2UgPSBzb3VwX21lc3NhZ2VfbmV3KCJHRVQiLCAi
aHR0cDovL2RlYmlhbi5vcmcvIik7Ci0gICAgcmVzcG9uc2UgPSBXRUJLSVRfTkVUV09SS19SRVNQ
T05TRShnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfTkVUV09SS19SRVNQT05TRSwgIm1lc3NhZ2Ui
LCBtZXNzYWdlLCAidXJpIiwgImh0dHA6Ly9nbm9tZS5vcmcvIiwgTlVMTCkpOwotICAgIGdfYXNz
ZXJ0KFdFQktJVF9JU19ORVRXT1JLX1JFU1BPTlNFKHJlc3BvbnNlKSk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KEdfT0JKRUNUKG1lc3NhZ2UpLT5yZWZfY291bnQsID09LCAyKTsKLSAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X25ldHdvcmtfcmVzcG9uc2VfZ2V0X3VyaShyZXNwb25zZSksID09LCAi
aHR0cDovL2dub21lLm9yZy8iKTsKLSAgICBnX29iamVjdF91bnJlZihyZXNwb25zZSk7Ci0gICAg
Z19hc3NlcnRfY21waW50KEdfT0JKRUNUKG1lc3NhZ2UpLT5yZWZfY291bnQsID09LCAxKTsKLSAg
ICBnX29iamVjdF91bnJlZihtZXNzYWdlKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF9uZXR3b3Jr
X3Jlc3BvbnNlX3Byb3BlcnRpZXMoKQotewotICAgIFdlYktpdE5ldHdvcmtSZXNwb25zZSogcmVz
cG9uc2U7Ci0gICAgU291cE1lc3NhZ2UqIG1lc3NhZ2U7Ci0gICAgZ2NoYXIqIHNvdXBVUkk7Ci0K
LSAgICAvKiBUZXN0IFVSSSBpcyBzZXQgY29ycmVjdGx5IHdoZW4gY3JlYXRpbmcgd2l0aCBVUkkg
Ki8KLSAgICByZXNwb25zZSA9IHdlYmtpdF9uZXR3b3JrX3Jlc3BvbnNlX25ldygiaHR0cDovL2Rl
Ymlhbi5vcmcvIik7Ci0gICAgZ19hc3NlcnQoV0VCS0lUX0lTX05FVFdPUktfUkVTUE9OU0UocmVz
cG9uc2UpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X25ldHdvcmtfcmVzcG9uc2VfZ2V0
X3VyaShyZXNwb25zZSksID09LCAiaHR0cDovL2RlYmlhbi5vcmcvIik7Ci0gICAgZ19vYmplY3Rf
dW5yZWYocmVzcG9uc2UpOwotCi0gICAgLyogVGVzdCBVUkkgaXMgc2V0IGNvcnJlY3RseSB3aGVu
IGNyZWF0aW5nIHdpdGggTWVzc2FnZSAqLwotICAgIG1lc3NhZ2UgPSBzb3VwX21lc3NhZ2VfbmV3
KCJHRVQiLCAiaHR0cDovL2RlYmlhbi5vcmcvIik7Ci0gICAgcmVzcG9uc2UgPSBXRUJLSVRfTkVU
V09SS19SRVNQT05TRShnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfTkVUV09SS19SRVNQT05TRSwg
Im1lc3NhZ2UiLCBtZXNzYWdlLCBOVUxMKSk7Ci0gICAgZ19hc3NlcnQoV0VCS0lUX0lTX05FVFdP
UktfUkVTUE9OU0UocmVzcG9uc2UpKTsKLSAgICBnX29iamVjdF91bnJlZihtZXNzYWdlKTsKLQot
ICAgIG1lc3NhZ2UgPSB3ZWJraXRfbmV0d29ya19yZXNwb25zZV9nZXRfbWVzc2FnZShyZXNwb25z
ZSk7Ci0gICAgc291cFVSSSA9IHNvdXBfdXJpX3RvX3N0cmluZyhzb3VwX21lc3NhZ2VfZ2V0X3Vy
aShtZXNzYWdlKSwgRkFMU0UpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihzb3VwVVJJLCA9PSwgImh0
dHA6Ly9kZWJpYW4ub3JnLyIpOwotICAgIGdfZnJlZShzb3VwVVJJKTsKLQotICAgIGdfYXNzZXJ0
X2NtcHN0cih3ZWJraXRfbmV0d29ya19yZXNwb25zZV9nZXRfdXJpKHJlc3BvbnNlKSwgPT0sICJo
dHRwOi8vZGViaWFuLm9yZy8iKTsKLSAgICBnX29iamVjdF91bnJlZihyZXNwb25zZSk7Ci19Ci0K
LWludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKLXsKLSAgICBndGtfdGVzdF9pbml0KCZh
cmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53
ZWJraXQub3JnLyIpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9uZXR3b3JrcmVzcG9u
c2UvY3JlYXRlZGVzdHJveSIsIHRlc3RfbmV0d29ya19yZXNwb25zZV9jcmVhdGVfZGVzdHJveSk7
Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L25ldHdvcmtyZXNwb25zZS9wcm9wZXJ0aWVz
IiwgdGVzdF9uZXR3b3JrX3Jlc3BvbnNlX3Byb3BlcnRpZXMpOwotICAgIHJldHVybiBnX3Rlc3Rf
cnVuICgpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYmJh
Y2tmb3J3YXJkbGlzdC5jIGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYmJhY2tmb3J3
YXJkbGlzdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzgyZDQwNzA0MTgyZmZm
ZWNkYjc1Y2YwODRkMWE0NmFlM2MwZDY1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJiYWNrZm9yd2Fy
ZGxpc3QuYworKysgL2Rldi9udWxsCkBAIC0xLDMyNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHdlYmtp
dC93ZWJraXQuaD4KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9s
aWZldGltZSh2b2lkKQotewotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXc7Ci0gICAgV2ViS2l0
V2ViQmFja0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3Q7Ci0gICAgV2ViS2l0V2ViSGlzdG9y
eUl0ZW0qIGN1cnJlbnRJdGVtOwotICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBmb3J3YXJkSXRl
bTsKLSAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogYmFja0l0ZW07Ci0gICAgV2ViS2l0V2ViSGlz
dG9yeUl0ZW0qIG50aEl0ZW07Ci0gICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGl0ZW0xOwotICAg
IFdlYktpdFdlYkhpc3RvcnlJdGVtKiBpdGVtMjsKLSAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSog
aXRlbTM7Ci0gICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGl0ZW00OwotICAgIEdMaXN0KiBiYWNr
TGlzdCA9IE5VTEw7Ci0gICAgR0xpc3QqIGZvcndhcmRMaXN0ID0gTlVMTDsKLSAgICBnX3Rlc3Rf
YnVnKCIxOTg5OCIpOwotCi0gICAgd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2Vi
X3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOwotICAgIGJhY2tG
b3J3YXJkTGlzdCA9IHdlYmtpdF93ZWJfdmlld19nZXRfYmFja19mb3J3YXJkX2xpc3Qod2ViVmll
dyk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKGJhY2tGb3J3YXJkTGlzdCktPnJlZl9j
b3VudCwgPT0sIDEpOwotCi0gICAgLyogYWRkIHRlc3QgaXRlbXMgKi8KLSAgICBpdGVtMSA9IHdl
YmtpdF93ZWJfaGlzdG9yeV9pdGVtX25ld193aXRoX2RhdGEoImh0dHA6Ly9leGFtcGxlLmNvbS8x
LyIsICJTaXRlIDEiKTsKLSAgICB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2FkZF9pdGVt
KGJhY2tGb3J3YXJkTGlzdCwgaXRlbTEpOwotICAgIGdfb2JqZWN0X3VucmVmKGl0ZW0xKTsKLQot
ICAgIGl0ZW0yID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dpdGhfZGF0YSgiaHR0cDov
L2V4YW1wbGUuY29tLzIvIiwgIlNpdGUgMiIpOwotICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJk
X2xpc3RfYWRkX2l0ZW0oYmFja0ZvcndhcmRMaXN0LCBpdGVtMik7Ci0gICAgZ19vYmplY3RfdW5y
ZWYoaXRlbTIpOwotCi0gICAgaXRlbTMgPSB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9uZXdfd2l0
aF9kYXRhKCJodHRwOi8vZXhhbXBsZS5jb20vMy8iLCAiU2l0ZSAzIik7Ci0gICAgd2Via2l0X3dl
Yl9iYWNrX2ZvcndhcmRfbGlzdF9hZGRfaXRlbShiYWNrRm9yd2FyZExpc3QsIGl0ZW0zKTsKLSAg
ICBnX29iamVjdF91bnJlZihpdGVtMyk7Ci0KLSAgICBpdGVtNCA9IHdlYmtpdF93ZWJfaGlzdG9y
eV9pdGVtX25ld193aXRoX2RhdGEoImh0dHA6Ly9leGFtcGxlLmNvbS80LyIsICJTaXRlIDQiKTsK
LSAgICB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2FkZF9pdGVtKGJhY2tGb3J3YXJkTGlz
dCwgaXRlbTQpOwotICAgIGdfb2JqZWN0X3VucmVmKGl0ZW00KTsKLQotICAgIC8qIG1ha2Ugc3Vy
ZSB0aGVzZSBmdW5jdGlvbnMgZG9uJ3QgYWRkIHVubmVjZXNzYXJ5IHJlZiB0byB0aGUgaGlzdG9y
eSBpdGVtICovCi0gICAgYmFja0l0ZW0gPSB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dl
dF9iYWNrX2l0ZW0oYmFja0ZvcndhcmRMaXN0KTsKLSAgICBnX29iamVjdF9yZWYoYmFja0l0ZW0p
OwotICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChiYWNrSXRlbSktPnJlZl9jb3VudCwgPT0s
IDIpOwotICAgIGdfb2JqZWN0X3VucmVmKGJhY2tJdGVtKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
R19PQkpFQ1QoYmFja0l0ZW0pLT5yZWZfY291bnQsID09LCAxKTsKLQotICAgIGN1cnJlbnRJdGVt
ID0gd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKGJhY2tGb3J3
YXJkTGlzdCk7Ci0gICAgZ19vYmplY3RfcmVmKGN1cnJlbnRJdGVtKTsKLSAgICBnX2Fzc2VydF9j
bXBpbnQoR19PQkpFQ1QoY3VycmVudEl0ZW0pLT5yZWZfY291bnQsID09LCAyKTsKLSAgICBnX29i
amVjdF91bnJlZihjdXJyZW50SXRlbSk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKGN1
cnJlbnRJdGVtKS0+cmVmX2NvdW50LCA9PSwgMSk7Ci0KLSAgICB3ZWJraXRfd2ViX2JhY2tfZm9y
d2FyZF9saXN0X2dvX3RvX2l0ZW0oYmFja0ZvcndhcmRMaXN0LCBpdGVtMik7Ci0gICAgZm9yd2Fy
ZEl0ZW0gPSB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2l0ZW0oYmFj
a0ZvcndhcmRMaXN0KTsKLSAgICBnX29iamVjdF9yZWYoZm9yd2FyZEl0ZW0pOwotICAgIGdfYXNz
ZXJ0X2NtcGludChHX09CSkVDVChmb3J3YXJkSXRlbSktPnJlZl9jb3VudCwgPT0sIDIpOwotICAg
IGdfb2JqZWN0X3VucmVmKGZvcndhcmRJdGVtKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpF
Q1QoZm9yd2FyZEl0ZW0pLT5yZWZfY291bnQsID09LCAxKTsKLQotICAgIG50aEl0ZW0gPSB3ZWJr
aXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9udGhfaXRlbShiYWNrRm9yd2FyZExpc3QsIDEp
OwotICAgIGdfb2JqZWN0X3JlZihudGhJdGVtKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpF
Q1QobnRoSXRlbSktPnJlZl9jb3VudCwgPT0sIDIpOwotICAgIGdfb2JqZWN0X3VucmVmKG50aEl0
ZW0pOwotICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChudGhJdGVtKS0+cmVmX2NvdW50LCA9
PSwgMSk7Ci0KLSAgICBiYWNrTGlzdCA9IHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0
X2JhY2tfbGlzdF93aXRoX2xpbWl0KGJhY2tGb3J3YXJkTGlzdCwgNSk7Ci0gICAgZm9yICg7IGJh
Y2tMaXN0OyBiYWNrTGlzdCA9IGJhY2tMaXN0LT5uZXh0KQotICAgICAgICBnX2Fzc2VydF9jbXBp
bnQoR19PQkpFQ1QoYmFja0xpc3QtPmRhdGEpLT5yZWZfY291bnQsID09LCAxKTsKLQotICAgIGZv
cndhcmRMaXN0ID0gd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0
X3dpdGhfbGltaXQoYmFja0ZvcndhcmRMaXN0LCA1KTsKLSAgICBmb3IgKDsgZm9yd2FyZExpc3Q7
IGZvcndhcmRMaXN0ID0gZm9yd2FyZExpc3QtPm5leHQpCi0gICAgICAgIGdfYXNzZXJ0X2NtcGlu
dChHX09CSkVDVChmb3J3YXJkTGlzdC0+ZGF0YSktPnJlZl9jb3VudCwgPT0sIDEpOwotCi0gICAg
Z19saXN0X2ZyZWUoZm9yd2FyZExpc3QpOwotICAgIGdfbGlzdF9mcmVlKGJhY2tMaXN0KTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoaXRlbTEpLT5yZWZfY291bnQsID09LCAxKTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoaXRlbTIpLT5yZWZfY291bnQsID09LCAxKTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoaXRlbTMpLT5yZWZfY291bnQsID09LCAxKTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoaXRlbTQpLT5yZWZfY291bnQsID09LCAxKTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoYmFja0ZvcndhcmRMaXN0KS0+cmVmX2NvdW50LCA9
PSwgMSk7Ci0gICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRl
c3Rfd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9vcmRlcih2b2lkKQotewotICAgIFdlYktp
dFdlYlZpZXcqIHdlYlZpZXc7Ci0gICAgV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJCYWNr
Rm9yd2FyZExpc3Q7Ci0gICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGl0ZW0xOwotICAgIFdlYktp
dFdlYkhpc3RvcnlJdGVtKiBpdGVtMjsKLSAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogaXRlbTM7
Ci0gICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGl0ZW00OwotICAgIFdlYktpdFdlYkhpc3RvcnlJ
dGVtKiBjdXJyZW50SXRlbTsKLSAgICBHTGlzdCogYmFja0xpc3QgPSBOVUxMOwotICAgIEdMaXN0
KiBmb3J3YXJkTGlzdCA9IE5VTEw7Ci0gICAgZ190ZXN0X2J1ZygiMjI2OTQiKTsKLQotICAgIHdl
YlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBnX29i
amVjdF9yZWZfc2luayh3ZWJWaWV3KTsKLQotICAgIHdlYmtpdF93ZWJfdmlld19zZXRfbWFpbnRh
aW5zX2JhY2tfZm9yd2FyZF9saXN0KHdlYlZpZXcsIFRSVUUpOwotICAgIHdlYkJhY2tGb3J3YXJk
TGlzdCA9IHdlYmtpdF93ZWJfdmlld19nZXRfYmFja19mb3J3YXJkX2xpc3Qod2ViVmlldyk7Ci0g
ICAgZ19hc3NlcnQod2ViQmFja0ZvcndhcmRMaXN0KTsKLQotICAgIC8vIENoZWNrIHRoYXQgdGhl
cmUgaXMgbm8gaXRlbS4KLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlz
dF9nZXRfY3VycmVudF9pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCkpOwotICAgIGdfYXNzZXJ0X2Nt
cGludCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xlbmd0aCh3ZWJC
YWNrRm9yd2FyZExpc3QpLCA9PSwgMCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJf
YmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGVuZ3RoKHdlYkJhY2tGb3J3YXJkTGlzdCksID09
LCAwKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHdlYlZp
ZXcpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrKHdlYlZpZXcp
KTsKLQotICAgIC8vIEFkZCBhIG5ldyBpdGVtcwotICAgIGl0ZW0xID0gd2Via2l0X3dlYl9oaXN0
b3J5X2l0ZW1fbmV3X3dpdGhfZGF0YSgiaHR0cDovL2V4YW1wbGUuY29tLzEvIiwgIlNpdGUgMSIp
OwotICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfYWRkX2l0ZW0od2ViQmFja0Zvcndh
cmRMaXN0LCBpdGVtMSk7Ci0gICAgZ19vYmplY3RfdW5yZWYoaXRlbTEpOwotICAgIGdfYXNzZXJ0
KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY29udGFpbnNfaXRlbSh3ZWJCYWNrRm9yd2Fy
ZExpc3QsIGl0ZW0xKSk7Ci0KLSAgICBpdGVtMiA9IHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX25l
d193aXRoX2RhdGEoImh0dHA6Ly9leGFtcGxlLmNvbS8yLyIsICJTaXRlIDIiKTsKLSAgICB3ZWJr
aXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2FkZF9pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCwgaXRl
bTIpOwotICAgIGdfb2JqZWN0X3VucmVmKGl0ZW0yKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfd2Vi
X2JhY2tfZm9yd2FyZF9saXN0X2NvbnRhaW5zX2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0LCBpdGVt
MikpOwotCi0gICAgaXRlbTMgPSB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9uZXdfd2l0aF9kYXRh
KCJodHRwOi8vZXhhbXBsZS5jb20vMy8iLCAiU2l0ZSAzIik7Ci0gICAgd2Via2l0X3dlYl9iYWNr
X2ZvcndhcmRfbGlzdF9hZGRfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QsIGl0ZW0zKTsKLSAgICBn
X29iamVjdF91bnJlZihpdGVtMyk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3dlYl9iYWNrX2Zvcndh
cmRfbGlzdF9jb250YWluc19pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCwgaXRlbTMpKTsKLQotICAg
IGl0ZW00ID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dpdGhfZGF0YSgiaHR0cDovL2V4
YW1wbGUuY29tLzQvIiwgIlNpdGUgNCIpOwotICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xp
c3RfYWRkX2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0LCBpdGVtNCk7Ci0gICAgZ19vYmplY3RfdW5y
ZWYoaXRlbTQpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY29u
dGFpbnNfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QsIGl0ZW00KSk7Ci0KLSAgICAvLyBjaGVjayB0
aGUgYmFjayBsaXN0IG9yZGVyCi0gICAgYmFja0xpc3QgPSB3ZWJraXRfd2ViX2JhY2tfZm9yd2Fy
ZF9saXN0X2dldF9iYWNrX2xpc3Rfd2l0aF9saW1pdCh3ZWJCYWNrRm9yd2FyZExpc3QsIDUpOwot
ICAgIGdfYXNzZXJ0KGJhY2tMaXN0KTsKLQotICAgIGN1cnJlbnRJdGVtID0gV0VCS0lUX1dFQl9I
SVNUT1JZX0lURU0oYmFja0xpc3QtPmRhdGEpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRf
d2ViX2hpc3RvcnlfaXRlbV9nZXRfdXJpKGN1cnJlbnRJdGVtKSwgPT0sICJodHRwOi8vZXhhbXBs
ZS5jb20vMy8iKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1f
Z2V0X3RpdGxlKGN1cnJlbnRJdGVtKSwgPT0sICJTaXRlIDMiKTsKLSAgICBiYWNrTGlzdCA9IGJh
Y2tMaXN0LT5uZXh0OwotCi0gICAgY3VycmVudEl0ZW0gPSBXRUJLSVRfV0VCX0hJU1RPUllfSVRF
TShiYWNrTGlzdC0+ZGF0YSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9y
eV9pdGVtX2dldF91cmkoY3VycmVudEl0ZW0pLCA9PSwgImh0dHA6Ly9leGFtcGxlLmNvbS8yLyIp
OwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdGl0bGUo
Y3VycmVudEl0ZW0pLCA9PSwgIlNpdGUgMiIpOwotICAgIGJhY2tMaXN0ID0gYmFja0xpc3QtPm5l
eHQ7Ci0KLSAgICBjdXJyZW50SXRlbSA9IFdFQktJVF9XRUJfSElTVE9SWV9JVEVNKGJhY2tMaXN0
LT5kYXRhKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0
X3VyaShjdXJyZW50SXRlbSksID09LCAiaHR0cDovL2V4YW1wbGUuY29tLzEvIik7Ci0gICAgZ19h
c3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF90aXRsZShjdXJyZW50SXRl
bSksID09LCAiU2l0ZSAxIik7Ci0gICAgZ19saXN0X2ZyZWUoYmFja0xpc3QpOwotCi0gICAgLy8g
Y2hlY2sgdGhlIGZvcndhcmQgbGlzdCBvcmRlcgotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmll
d19nb190b19iYWNrX2ZvcndhcmRfaXRlbSh3ZWJWaWV3LCBpdGVtMSkpOwotICAgIGZvcndhcmRM
aXN0ID0gd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0X3dpdGhf
bGltaXQod2ViQmFja0ZvcndhcmRMaXN0LDUpOwotICAgIGdfYXNzZXJ0KGZvcndhcmRMaXN0KTsK
LQotICAgIGN1cnJlbnRJdGVtID0gV0VCS0lUX1dFQl9ISVNUT1JZX0lURU0oZm9yd2FyZExpc3Qt
PmRhdGEpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRf
dXJpKGN1cnJlbnRJdGVtKSwgPT0sICJodHRwOi8vZXhhbXBsZS5jb20vNC8iKTsKLSAgICBnX2Fz
c2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3RpdGxlKGN1cnJlbnRJdGVt
KSwgPT0sICJTaXRlIDQiKTsKLSAgICBmb3J3YXJkTGlzdCA9IGZvcndhcmRMaXN0LT5uZXh0Owot
Ci0gICAgY3VycmVudEl0ZW0gPSBXRUJLSVRfV0VCX0hJU1RPUllfSVRFTShmb3J3YXJkTGlzdC0+
ZGF0YSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF91
cmkoY3VycmVudEl0ZW0pLCA9PSwgImh0dHA6Ly9leGFtcGxlLmNvbS8zLyIpOwotICAgIGdfYXNz
ZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdGl0bGUoY3VycmVudEl0ZW0p
LCA9PSwgIlNpdGUgMyIpOwotICAgIGZvcndhcmRMaXN0ID0gZm9yd2FyZExpc3QtPm5leHQ7Ci0K
LSAgICBjdXJyZW50SXRlbSA9IFdFQktJVF9XRUJfSElTVE9SWV9JVEVNKGZvcndhcmRMaXN0LT5k
YXRhKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3Vy
aShjdXJyZW50SXRlbSksID09LCAiaHR0cDovL2V4YW1wbGUuY29tLzIvIik7Ci0gICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF90aXRsZShjdXJyZW50SXRlbSks
ID09LCAiU2l0ZSAyIik7Ci0KLSAgICBnX2xpc3RfZnJlZShmb3J3YXJkTGlzdCk7Ci0gICAgZ19v
YmplY3RfdW5yZWYod2ViVmlldyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9i
YWNrX2ZvcndhcmRfbGlzdF9hZGRfaXRlbSh2b2lkKQotewotICAgIFdlYktpdFdlYlZpZXcqIHdl
YlZpZXc7Ci0gICAgV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJCYWNrRm9yd2FyZExpc3Q7
Ci0gICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGFkZEl0ZW0xOwotICAgIFdlYktpdFdlYkhpc3Rv
cnlJdGVtKiBhZGRJdGVtMjsKLSAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogYmFja0l0ZW07Ci0g
ICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGN1cnJlbnRJdGVtOwotICAgIGdfdGVzdF9idWcoIjIy
OTg4Iik7Ci0KLSAgICB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19u
ZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7Ci0KLSAgICB3ZWJraXRfd2Vi
X3ZpZXdfc2V0X21haW50YWluc19iYWNrX2ZvcndhcmRfbGlzdCh3ZWJWaWV3LCBUUlVFKTsKLSAg
ICB3ZWJCYWNrRm9yd2FyZExpc3QgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2JhY2tfZm9yd2FyZF9s
aXN0KHdlYlZpZXcpOwotICAgIGdfYXNzZXJ0KHdlYkJhY2tGb3J3YXJkTGlzdCk7Ci0KLSAgICAv
LyBDaGVjayB0aGF0IHRoZXJlIGlzIG5vIGl0ZW0uCi0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJf
YmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QpKTsK
LSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9y
d2FyZF9sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDApOwotICAgIGdfYXNzZXJ0X2Nt
cGludCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xlbmd0aCh3ZWJCYWNr
Rm9yd2FyZExpc3QpLCA9PSwgMCk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5f
Z29fZm9yd2FyZCh3ZWJWaWV3KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5f
Z29fYmFjayh3ZWJWaWV3KSk7Ci0KLSAgICAvLyBBZGQgYSBuZXcgaXRlbQotICAgIGFkZEl0ZW0x
ID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dpdGhfZGF0YSgiaHR0cDovL2V4YW1wbGUu
Y29tLyIsICJBZGRlZCBzaXRlIik7Ci0gICAgd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9h
ZGRfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QsIGFkZEl0ZW0xKTsKLSAgICBnX29iamVjdF91bnJl
ZihhZGRJdGVtMSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9j
b250YWluc19pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCwgYWRkSXRlbTEpKTsKLQotICAgIC8vIENo
ZWNrIHRoYXQgdGhlIGFkZGVkIGl0ZW0gaXMgdGhlIGN1cnJlbnQgaXRlbS4KLSAgICBjdXJyZW50
SXRlbSA9IHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh3ZWJC
YWNrRm9yd2FyZExpc3QpOwotICAgIGdfYXNzZXJ0KGN1cnJlbnRJdGVtKTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9sZW5ndGgo
d2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDApOwotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRf
d2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xlbmd0aCh3ZWJCYWNrRm9yd2FyZExpc3Qp
LCA9PSwgMCk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh3
ZWJWaWV3KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayh3ZWJW
aWV3KSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF91
cmkoY3VycmVudEl0ZW0pLCA9PSwgImh0dHA6Ly9leGFtcGxlLmNvbS8iKTsKLSAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3RpdGxlKGN1cnJlbnRJdGVtKSwg
PT0sICJBZGRlZCBzaXRlIik7Ci0KLSAgICAvLyBBZGQgYW5vdGhlciBpdGVtLgotICAgIGFkZEl0
ZW0yID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dpdGhfZGF0YSgiaHR0cDovL2V4YW1w
bGUuY29tLzIvIiwgIkFkZGVkIHNpdGUgMiIpOwotICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJk
X2xpc3RfYWRkX2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0LCBhZGRJdGVtMik7Ci0gICAgZ19vYmpl
Y3RfdW5yZWYoYWRkSXRlbTIpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfYmFja19mb3J3YXJk
X2xpc3RfY29udGFpbnNfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QsIGFkZEl0ZW0yKSk7Ci0KLSAg
ICAvLyBDaGVjayB0aGF0IHRoZSBhZGRlZCBpdGVtIGlzIG5ldyBjdXJyZW50IGl0ZW0uCi0gICAg
Y3VycmVudEl0ZW0gPSB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0
ZW0od2ViQmFja0ZvcndhcmRMaXN0KTsKLSAgICBnX2Fzc2VydChjdXJyZW50SXRlbSk7Ci0gICAg
Z19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRf
bGVuZ3RoKHdlYkJhY2tGb3J3YXJkTGlzdCksID09LCAwKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
d2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19sZW5ndGgod2ViQmFja0Zvcndh
cmRMaXN0KSwgPT0sIDEpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2Zv
cndhcmQod2ViVmlldykpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFj
ayh3ZWJWaWV3KSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVt
X2dldF91cmkoY3VycmVudEl0ZW0pLCA9PSwgImh0dHA6Ly9leGFtcGxlLmNvbS8yLyIpOwotICAg
IGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdGl0bGUoY3VycmVu
dEl0ZW0pLCA9PSwgIkFkZGVkIHNpdGUgMiIpOwotCi0gICAgYmFja0l0ZW0gPSB3ZWJraXRfd2Vi
X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0KTsKLSAg
ICBnX2Fzc2VydChiYWNrSXRlbSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlz
dG9yeV9pdGVtX2dldF91cmkoYmFja0l0ZW0pLCA9PSwgImh0dHA6Ly9leGFtcGxlLmNvbS8iKTsK
LSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3RpdGxlKGJh
Y2tJdGVtKSwgPT0sICJBZGRlZCBzaXRlIik7Ci0KLSAgICAvLyBHbyB0byB0aGUgZmlyc3QgYWRk
ZWQgaXRlbS4KLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ29fdG9fYmFja19mb3J3YXJk
X2l0ZW0od2ViVmlldywgYWRkSXRlbTEpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dl
Yl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0
KSwgPT0sIDEpOwotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9s
aXN0X2dldF9iYWNrX2xlbmd0aCh3ZWJCYWNrRm9yd2FyZExpc3QpLCA9PSwgMCk7Ci0gICAgZ19h
c3NlcnQod2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHdlYlZpZXcpKTsKLSAgICBnX2Fz
c2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrKHdlYlZpZXcpKTsKLQotICAgIGdfb2Jq
ZWN0X3VucmVmKHdlYlZpZXcpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfYmFj
a19mb3J3YXJkX2xpc3RfY2xlYXIodm9pZCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3
OwotICAgIFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViQmFja0ZvcndhcmRMaXN0OwotICAg
IFdlYktpdFdlYkhpc3RvcnlJdGVtKiBhZGRJdGVtOwotICAgIGdfdGVzdF9idWcoIjM2MTczIik7
Ci0KLSAgICB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7
Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7Ci0KLSAgICB3ZWJCYWNrRm9yd2FyZExp
c3QgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2JhY2tfZm9yd2FyZF9saXN0KHdlYlZpZXcpOwotICAg
IGdfYXNzZXJ0KHdlYkJhY2tGb3J3YXJkTGlzdCk7Ci0KLSAgICAvLyBDaGVjayB0aGF0IHRoZXJl
IGlzIG5vIGl0ZW0uCi0gICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJfYmFja19mb3J3YXJk
X2xpc3RfZ2V0X2ZvcndhcmRfbGVuZ3RoKHdlYkJhY2tGb3J3YXJkTGlzdCksID09LCAwKTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19s
ZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDApOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRf
d2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0
KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh3ZWJWaWV3
KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayh3ZWJWaWV3KSk7
Ci0KLSAgICAvLyBDaGVjayB0aGF0IGNsZWFyaW5nIHRoZSBlbXB0eSBsaXN0IGRvZXMgbm90IG1v
ZGlmeSBjb3VudGVycwotICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY2xlYXIod2Vi
QmFja0ZvcndhcmRMaXN0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2Zv
cndhcmRfbGlzdF9nZXRfZm9yd2FyZF9sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDAp
OwotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9i
YWNrX2xlbmd0aCh3ZWJCYWNrRm9yd2FyZExpc3QpLCA9PSwgMCk7Ci0gICAgZ19hc3NlcnQoIXdl
YmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh3ZWJCYWNrRm9yd2Fy
ZExpc3QpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHdl
YlZpZXcpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrKHdlYlZp
ZXcpKTsKLQotICAgIC8vIEFkZCBhIG5ldyBpdGVtCi0gICAgYWRkSXRlbSA9IHdlYmtpdF93ZWJf
aGlzdG9yeV9pdGVtX25ld193aXRoX2RhdGEoImh0dHA6Ly9leGFtcGxlLmNvbS8iLCAiQWRkZWQg
c2l0ZSIpOwotICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfYWRkX2l0ZW0od2ViQmFj
a0ZvcndhcmRMaXN0LCBhZGRJdGVtKTsKLSAgICBnX29iamVjdF91bnJlZihhZGRJdGVtKTsKLSAg
ICBnX2Fzc2VydCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2NvbnRhaW5zX2l0ZW0od2Vi
QmFja0ZvcndhcmRMaXN0LCBhZGRJdGVtKSk7Ci0KLSAgICAvLyBDaGVjayB0aGF0IGFmdGVyIGNs
ZWFyaW5nIHRoZSBsaXN0IHRoZSBhZGRlZCBpdGVtIGlzIG5vIGxvbmdlciBpbiB0aGUgbGlzdAot
ICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY2xlYXIod2ViQmFja0ZvcndhcmRMaXN0
KTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9jb250YWluc19p
dGVtKHdlYkJhY2tGb3J3YXJkTGlzdCwgYWRkSXRlbSkpOwotCi0gICAgLy8gQ2hlY2sgdGhhdCBh
ZnRlciBjbGVhcmluZyBpdCwgdGhlIGxpc3QgaXMgZW1wdHkKLSAgICBnX2Fzc2VydF9jbXBpbnQo
d2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9sZW5ndGgod2ViQmFja0Zv
cndhcmRMaXN0KSwgPT0sIDApOwotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2ViX2JhY2tf
Zm9yd2FyZF9saXN0X2dldF9iYWNrX2xlbmd0aCh3ZWJCYWNrRm9yd2FyZExpc3QpLCA9PSwgMCk7
Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRf
aXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3
X2Nhbl9nb19mb3J3YXJkKHdlYlZpZXcpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3
X2Nhbl9nb19iYWNrKHdlYlZpZXcpKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwot
fQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCi17Ci0gICAgZ3RrX3Rlc3RfaW5p
dCgmYXJnYywgJmFyZ3YsIE5VTEwpOwotCi0gICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy8iKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2ViYmFja2Zv
cndhcmRsaXN0L2FkZF9pdGVtIiwgdGVzdF93ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2Fk
ZF9pdGVtKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2ViYmFja2ZvcndhcmRsaXN0
L2xpc3Rfb3JkZXIiLCB0ZXN0X3dlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3Rfb3JkZXIpOwot
ICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJoaXN0b3J5aXRlbS9saWZldGltZSIsIHRl
c3Rfd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbGlmZXRpbWUpOwotICAgIGdfdGVzdF9hZGRfZnVu
YygiL3dlYmtpdC93ZWJiYWNrZm9yd2FyZGxpc3QvY2xlYXIiLCB0ZXN0X3dlYmtpdF93ZWJfYmFj
a19mb3J3YXJkX2xpc3RfY2xlYXIpOwotICAgIHJldHVybiBnX3Rlc3RfcnVuICgpOwotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYmRhdGFzb3VyY2UuYyBiL1Nv
dXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJkYXRhc291cmNlLmMKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDA1NjYyNTc0NDhiYzc3ZGYzNWNiNGFjMzQwYWU2YWJhMDM4OTI3Yjku
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdC9ndGsvdGVzdHMvdGVzdHdlYmRhdGFzb3VyY2UuYworKysgL2Rldi9udWxsCkBAIC0xLDI0
MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEphbiBNaWNoYWVsIEFsb256bwot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGd0ay9ndGsu
aD4KLSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+Ci0KLXN0YXRpYyBjb25zdCBnc2hvcnQgZGVm
YXVsdFRpbWVvdXQgPSAxMDsKLWd1aW50IHdhaXRUaW1lcjsKLWdib29sZWFuIHNob3VsZFdhaXQ7
Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OwotICAgIFdl
YktpdFdlYkZyYW1lKiBtYWluRnJhbWU7Ci19IFdlYkRhdGFTb3VyY2VGaXh0dXJlOwotCi1zdGF0
aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X2luaXRpYWxfcmVxdWVzdCgp
Ci17Ci0gICAgV2ViS2l0V2ViVmlldyogdmlldzsKLSAgICBXZWJLaXRXZWJGcmFtZSogZnJhbWU7
Ci0gICAgV2ViS2l0V2ViRGF0YVNvdXJjZSogZGF0YVNvdXJjZTsKLSAgICBXZWJLaXROZXR3b3Jr
UmVxdWVzdCogaW5pdGlhbFJlcXVlc3Q7Ci0KLSAgICB2aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdl
YmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsodmlldyk7Ci0gICAg
ZnJhbWUgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUodmlldyk7Ci0KLSAgICBXZWJL
aXROZXR3b3JrUmVxdWVzdCogcmVxdWVzdCA9IHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfbmV3KCJo
dHRwOi8vd3d3Lmdvb2dsZS5jb20iKTsKLSAgICB3ZWJraXRfd2ViX2ZyYW1lX2xvYWRfcmVxdWVz
dChmcmFtZSwgcmVxdWVzdCk7Ci0gICAgZ19vYmplY3RfdW5yZWYocmVxdWVzdCk7Ci0KLSAgICBk
YXRhU291cmNlID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfcHJvdmlzaW9uYWxfZGF0YV9zb3VyY2Uo
ZnJhbWUpOwotICAgIGdfYXNzZXJ0KGRhdGFTb3VyY2UpOwotICAgIGluaXRpYWxSZXF1ZXN0ID0g
d2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfaW5pdGlhbF9yZXF1ZXN0KGRhdGFTb3VyY2UpOwot
ICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfbmV0d29ya19yZXF1ZXN0X2dldF91cmkoaW5pdGlh
bFJlcXVlc3QpLCA9PSwgImh0dHA6Ly93d3cuZ29vZ2xlLmNvbS8iKTsKLQotICAgIGdfb2JqZWN0
X3VucmVmKHZpZXcpOwotfQotCi1zdGF0aWMgdm9pZCBub3RpZnlfbG9hZF9zdGF0dXNfdW5yZWFj
aGFibGVfY2IoV2ViS2l0V2ViVmlldyogdmlldywgR1BhcmFtU3BlYyogcHNwZWMsIEdNYWluTG9v
cCogbG9vcCkKLXsKLSAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJfdmll
d19nZXRfbG9hZF9zdGF0dXMgKHZpZXcpOwotICAgIFdlYktpdFdlYkZyYW1lKiBmcmFtZSA9IHdl
YmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh2aWV3KTsKLQotICAgIGdfYXNzZXJ0KHN0YXR1
cyAhPSBXRUJLSVRfTE9BRF9GSU5JU0hFRCk7Ci0KLSAgICBpZiAoc3RhdHVzICE9IFdFQktJVF9M
T0FEX0ZBSUxFRCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViS2l0V2ViRGF0YVNvdXJjZSog
ZGF0YXNvdXJjZSA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X2RhdGFfc291cmNlKGZyYW1lKTsKLQot
ICAgIGdfYXNzZXJ0X2NtcHN0cigiaHR0cDovL3RoaXMuaG9zdC5kb2VzLm5vdC5leGlzdC9kb2ly
ZWFsbHlleGlzdC5odG1sIiwgPT0sCi0gICAgICAgICAgICAgICAgICAgIHdlYmtpdF93ZWJfZGF0
YV9zb3VyY2VfZ2V0X3VucmVhY2hhYmxlX3VyaShkYXRhc291cmNlKSk7Ci0KLSAgICBnX21haW5f
bG9vcF9xdWl0KGxvb3ApOwotfQotCi1zdGF0aWMgdm9pZCBub3RpZnlfbG9hZF9zdGF0dXNfY2Io
V2ViS2l0V2ViVmlldyogdmlldywgR1BhcmFtU3BlYyogcHNwZWMsIEdNYWluTG9vcCogbG9vcCkK
LXsKLSAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJfdmlld19nZXRfbG9h
ZF9zdGF0dXMgKHZpZXcpOwotICAgIFdlYktpdFdlYkZyYW1lKiBmcmFtZSA9IHdlYmtpdF93ZWJf
dmlld19nZXRfbWFpbl9mcmFtZSh2aWV3KTsKLSAgICBXZWJLaXRXZWJEYXRhU291cmNlKiBkYXRh
U291cmNlID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfZGF0YV9zb3VyY2UoZnJhbWUpOwotCi0gICAg
aWYgKHN0YXR1cyA9PSBXRUJLSVRfTE9BRF9DT01NSVRURUQpIHsKLSAgICAgICAgZ19hc3NlcnQo
d2Via2l0X3dlYl9kYXRhX3NvdXJjZV9pc19sb2FkaW5nKGRhdGFTb3VyY2UpKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBlbHNlIGlmIChzdGF0dXMgIT0gV0VCS0lUX0xPQURfRklOSVNI
RUQpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8qIFRlc3QgZ2V0X3JlcXVlc3QgKi8KLSAgICBn
X3Rlc3RfbWVzc2FnZSgiVGVzdGluZyB3ZWJraXRfd2ViX2RhdGFfc291cmNlX2dldF9yZXF1ZXN0
Iik7Ci0gICAgV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QgPSB3ZWJraXRfd2ViX2RhdGFf
c291cmNlX2dldF9yZXF1ZXN0KGRhdGFTb3VyY2UpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJr
aXRfbmV0d29ya19yZXF1ZXN0X2dldF91cmkocmVxdWVzdCksID09LCAiaHR0cDovL3d3dy53ZWJr
aXQub3JnLyIpOwotCi0gICAgLyogVGVzdCBnZXRfbWFpbl9yZXNvdXJjZSAqLwotICAgIGdfdGVz
dF9tZXNzYWdlKCJUZXN0aW5nIHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X21haW5fcmVzb3Vy
Y2UiKTsKLSAgICBXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UgPSB3ZWJraXRfd2ViX2RhdGFf
c291cmNlX2dldF9tYWluX3Jlc291cmNlKGRhdGFTb3VyY2UpOwotICAgIGdfYXNzZXJ0X2NtcHN0
cigidGV4dC9odG1sIiwgPT0sIHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X21pbWVfdHlwZShyZXNv
dXJjZSkpOwotICAgIGdfYXNzZXJ0X2NtcHN0cigiaHR0cDovL3d3dy53ZWJraXQub3JnLyIsID09
LCB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF91cmkocmVzb3VyY2UpKTsKLQotICAgIC8qIFRlc3Qg
Z2V0X2RhdGEuIFdlIGp1c3QgdGVzdCBpZiBkYXRhIGhhcyBjZXJ0YWluIHNpemUgZm9yIHRoZSBt
ZWFuIHRpbWUgKi8KLSAgICBnX3Rlc3RfbWVzc2FnZSgiVGVzdGluZyB3ZWJraXRfd2ViX2RhdGFf
c291cmNlX2dldF9kYXRhIGhhcyBjZXJ0YWluIHNpemUiKTsKLSAgICBHU3RyaW5nKiBkYXRhID0g
d2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfZGF0YShkYXRhU291cmNlKTsKLSAgICBnX2Fzc2Vy
dChkYXRhLT5sZW4gPiAxMDApOwotCi0gICAgLyogRklYTUU6IEFkZCB0ZXN0IGZvciBnZXRfZW5j
b2RpbmcgKi8KLQotICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci19Ci0KLXN0YXRpYyBnYm9v
bGVhbiB3YWl0X3RpbWVyX2ZpcmVkKEdNYWluTG9vcCogbG9vcCkKLXsKLSAgICB3YWl0VGltZXIg
PSAwOwotICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci0KLSAgICByZXR1cm4gRkFMU0U7Ci19
Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9kYXRhX3NvdXJjZSgpCi17Ci0gICAgV2Vi
S2l0V2ViVmlldyogdmlldzsKLSAgICBHTWFpbkxvb3AqIGxvb3A7Ci0KLSAgICB2aWV3ID0gV0VC
S0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3Np
bmsodmlldyk7Ci0gICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLSAgICBn
X3NpZ25hbF9jb25uZWN0KHZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhu
b3RpZnlfbG9hZF9zdGF0dXNfY2IpLCBsb29wKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91
cmkodmlldywgImh0dHA6Ly93d3cud2Via2l0Lm9yZyIpOwotCi0gICAgd2FpdFRpbWVyID0gZ190
aW1lb3V0X2FkZF9zZWNvbmRzKGRlZmF1bHRUaW1lb3V0LCAoR1NvdXJjZUZ1bmMpd2FpdF90aW1l
cl9maXJlZCwgbG9vcCk7Ci0KLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICBpZiAo
d2FpdFRpbWVyKQotICAgICAgICBnX3NvdXJjZV9yZW1vdmUod2FpdFRpbWVyKTsKLQotICAgIHdh
aXRUaW1lciA9IDA7Ci0KLSAgICBnX21haW5fbG9vcF91bnJlZihsb29wKTsKLSAgICBnX29iamVj
dF91bnJlZih2aWV3KTsKLX0KLQotc3RhdGljIHZvaWQgbm90aWZ5X2xvYWRfc3RhdHVzX2xpZmV0
aW1lX2NiKFdlYktpdFdlYlZpZXcqIHZpZXcsIEdQYXJhbVNwZWMqIHBzcGVjLCBHTWFpbkxvb3Aq
IGxvb3ApCi17Ci0gICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X2xvYWRfc3RhdHVzICh2aWV3KTsKLSAgICBXZWJLaXRXZWJGcmFtZSogZnJhbWUgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUodmlldyk7Ci0gICAgV2ViS2l0V2ViRGF0YVNvdXJj
ZSogZGF0YVNvdXJjZSA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X2RhdGFfc291cmNlKGZyYW1lKTsK
LQotICAgIGlmIChzdGF0dXMgPT0gV0VCS0lUX0xPQURfQ09NTUlUVEVEKSB7Ci0gICAgICAgIGdf
YXNzZXJ0KHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfaXNfbG9hZGluZyhkYXRhU291cmNlKSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPSBXRUJLSVRfTE9BRF9GSU5J
U0hFRCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKLX0K
LQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX2RhdGFfc291cmNlX2xpZmV0aW1lKCkKLXsK
LSAgICBXZWJLaXRXZWJWaWV3KiB2aWV3OwotICAgIEdNYWluTG9vcCogbG9vcDsKLQotICAgIHZp
ZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBnX29iamVj
dF9yZWZfc2luayh2aWV3KTsKLSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUp
OwotICAgIGdfc2lnbmFsX2Nvbm5lY3QodmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLCBHX0NB
TExCQUNLKG5vdGlmeV9sb2FkX3N0YXR1c19saWZldGltZV9jYiksIGxvb3ApOwotICAgIHdlYmtp
dF93ZWJfdmlld19sb2FkX3VyaSh2aWV3LCAiaHR0cDovL3d3dy53ZWJraXQub3JnIik7Ci0KLSAg
ICB3YWl0VGltZXIgPSBnX3RpbWVvdXRfYWRkX3NlY29uZHMoZGVmYXVsdFRpbWVvdXQsIChHU291
cmNlRnVuYyl3YWl0X3RpbWVyX2ZpcmVkLCBsb29wKTsKLQotICAgIGdfbWFpbl9sb29wX3J1bihs
b29wKTsKLQotICAgIFdlYktpdFdlYkRhdGFTb3VyY2UqIGRhdGFTb3VyY2UgPSB3ZWJraXRfd2Vi
X2ZyYW1lX2dldF9kYXRhX3NvdXJjZSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUodmll
dykpOwotICAgIEdMaXN0KiBzdWJSZXNvdXJjZXMgPSB3ZWJraXRfd2ViX2RhdGFfc291cmNlX2dl
dF9zdWJyZXNvdXJjZXMoZGF0YVNvdXJjZSk7Ci0gICAgZ2ludCBudW1iZXJPZlJlc291cmNlcyA9
IGdfbGlzdF9sZW5ndGgoc3ViUmVzb3VyY2VzKTsKLSAgICBnX2xpc3RfZnJlZShzdWJSZXNvdXJj
ZXMpOwotCi0gICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0
dXModmlldyksID09LCBXRUJLSVRfTE9BRF9GSU5JU0hFRCk7Ci0KLSAgICB3ZWJraXRfd2ViX3Zp
ZXdfbG9hZF91cmkodmlldywgImh0dHA6Ly9nbm9tZS5vcmciKTsKLQotICAgIGdfYXNzZXJ0X2Nt
cGludCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHZpZXcpLCA9PSwgV0VCS0lUX0xP
QURfUFJPVklTSU9OQUwpOwotCi0gICAgd2Via2l0X3dlYl92aWV3X3N0b3BfbG9hZGluZyh2aWV3
KTsKLQotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVz
KHZpZXcpLCA9PSwgV0VCS0lUX0xPQURfRkFJTEVEKTsKLQotICAgIHN1YlJlc291cmNlcyA9IHdl
YmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X3N1YnJlc291cmNlcyhkYXRhU291cmNlKTsKLSAgICBn
X2Fzc2VydF9jbXBpbnQobnVtYmVyT2ZSZXNvdXJjZXMsID09LCBnX2xpc3RfbGVuZ3RoKHN1YlJl
c291cmNlcykpOwotICAgIGdfbGlzdF9mcmVlKHN1YlJlc291cmNlcyk7Ci0KLSAgICBpZiAod2Fp
dFRpbWVyKQotICAgICAgICBnX3NvdXJjZV9yZW1vdmUod2FpdFRpbWVyKTsKLQotICAgIHdhaXRU
aW1lciA9IDA7Ci0KLSAgICBnX21haW5fbG9vcF91bnJlZihsb29wKTsKLSAgICBnX29iamVjdF91
bnJlZih2aWV3KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX2RhdGFfc291cmNl
X3VucmVhY2hhYmxlX3VyaSgpCi17Ci0gICAgLyogRklYTUU6IHRoaXMgdGVzdCBmYWlscyBjdXJy
ZW50bHkuICovCi0gICAgcmV0dXJuOwotCi0gICAgV2ViS2l0V2ViVmlldyogdmlldzsKLSAgICBH
TWFpbkxvb3AqIGxvb3A7Ci0KLSAgICB2aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJf
dmlld19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsodmlldyk7Ci0gICAgbG9vcCA9IGdf
bWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHZpZXcsICJu
b3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhub3RpZnlfbG9hZF9zdGF0dXNfdW5yZWFj
aGFibGVfY2IpLCBsb29wKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkodmlldywgImh0
dHA6Ly90aGlzLmhvc3QuZG9lcy5ub3QuZXhpc3QvZG9pcmVhbGx5ZXhpc3QuaHRtbCIpOwotCi0g
ICAgd2FpdFRpbWVyID0gZ190aW1lb3V0X2FkZF9zZWNvbmRzKGRlZmF1bHRUaW1lb3V0LCAoR1Nv
dXJjZUZ1bmMpd2FpdF90aW1lcl9maXJlZCwgbG9vcCk7Ci0KLSAgICBnX21haW5fbG9vcF9ydW4o
bG9vcCk7Ci0KLSAgICBpZiAod2FpdFRpbWVyKQotICAgICAgICBnX3NvdXJjZV9yZW1vdmUod2Fp
dFRpbWVyKTsKLQotICAgIHdhaXRUaW1lciA9IDA7Ci0KLSAgICBnX21haW5fbG9vcF91bnJlZihs
b29wKTsKLSAgICBnX29iamVjdF91bnJlZih2aWV3KTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2Ms
IGNoYXIqKiBhcmd2KQotewotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsK
LQotICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0gICAg
Z190ZXN0X2J1ZygiMjQ3NTgiKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2ViZGF0
YXNvdXJjZS9nZXRfaW5pdGlhbF9yZXF1ZXN0IiwKLSAgICAgICAgICAgICAgICAgICAgdGVzdF93
ZWJraXRfd2ViX2RhdGFfc291cmNlX2dldF9pbml0aWFsX3JlcXVlc3QpOwotICAgIGdfdGVzdF9h
ZGRfZnVuYygiL3dlYmtpdC93ZWJkYXRhc291cmNlL2FwaSIsCi0gICAgICAgICAgICAgICAgICAg
IHRlc3Rfd2Via2l0X3dlYl9kYXRhX3NvdXJjZSk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Vi
a2l0L3dlYmRhdGFzb3VyY2UvdW5yZWFjaGFibGVfdXJpIiwKLSAgICAgICAgICAgICAgICAgICAg
dGVzdF93ZWJraXRfd2ViX2RhdGFfc291cmNlX3VucmVhY2hhYmxlX3VyaSk7Ci0gICAgZ190ZXN0
X2FkZF9mdW5jKCIvd2Via2l0L3dlYmRhdGFzb3VyY2UvbGlmZXRpbWUiLAotICAgICAgICAgICAg
ICAgICAgICB0ZXN0X3dlYmtpdF93ZWJfZGF0YV9zb3VyY2VfbGlmZXRpbWUpOwotCi0gICAgcmV0
dXJuIGdfdGVzdF9ydW4gKCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0
cy90ZXN0d2ViZnJhbWUuYyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJmcmFtZS5j
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTMxODczZDRkOGVlN2Q2OGIzZTdiMzQx
Yjk4NDRlZDNjZDI0NTU1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJmcmFtZS5jCisrKyAvZGV2L251
bGwKQEAgLTEsMjIwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhh
bnMgUGV0ZXIgRnJleXRoZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOSBDb2xsYWJvcmEgTHRkLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDx1bmlzdGQu
aD4KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRl
IDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgotCi1zdGF0aWMgaW50IG51
bWJlck9mRnJhbWVzQ3JlYXRlZCA9IDA7Ci0KLXN0YXRpYyB2b2lkIGNyZWF0ZUZyYW1lU2lnbmFs
VGVzdEZyYW1lQ3JlYXRlZENhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFdl
YkZyYW1lKiBmcmFtZSwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBudW1iZXJPZkZyYW1lc0NyZWF0
ZWQrKzsKLX0KLQotc3RhdGljIGdib29sZWFuIGNyZWF0ZUZyYW1lU2lnbmFsVGVzdFRpbWVvdXQo
Z3BvaW50ZXIgZGF0YSkKLXsKLSAgICBnX2Fzc2VydF9jbXBpbnQobnVtYmVyT2ZGcmFtZXNDcmVh
dGVkLCA9PSwgMik7Ci0gICAgZ19tYWluX2xvb3BfcXVpdCgoR01haW5Mb29wKikgZGF0YSk7Ci0g
ICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfZnJhbWVf
Y3JlYXRlZF9zaWduYWwodm9pZCkKLXsKLSAgICBHdGtXaWRnZXQqIHdlYlZpZXc7Ci0gICAgR3Rr
V2lkZ2V0KiB3aW5kb3c7Ci0gICAgR01haW5Mb29wKiBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5V
TEwsIFRSVUUpOwotCi0gICAgd2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BM
RVZFTCk7Ci0KLSAgICB3ZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygpOwotICAgIGdfc2ln
bmFsX2Nvbm5lY3Qod2ViVmlldywgImZyYW1lLWNyZWF0ZWQiLCBHX0NBTExCQUNLKGNyZWF0ZUZy
YW1lU2lnbmFsVGVzdEZyYW1lQ3JlYXRlZENhbGxiYWNrKSwgbG9vcCk7Ci0KLSAgICAvLyBXZSB3
YW50IHRvIGVuc3VyZSB0aGF0IGV4YWN0bHkgdHdvIGNyZWF0ZS1mcmFtZSBzaWduYWxzIGFyZQot
ICAgIC8vIGZpcmVkIGFuZCBubyBtb3JlLCBzbyB3ZSBzZXQgYSB0aW1lb3V0IGhlcmUuIFRoZXJl
IGRvZXMgbm90IGFwcGVhcgotICAgIC8vIHRvIGJlIGEgc2ltcGxlIHdheSB2aWEgdGhlIEFQSSB0
byBmaWd1cmUgb3V0IHdoZW4gYWxsIGZyYW1lcyBoYXZlCi0gICAgLy8gbG9hZGVkLgotICAgIGdf
dGltZW91dF9hZGQoNTAwLCBjcmVhdGVGcmFtZVNpZ25hbFRlc3RUaW1lb3V0LCBsb29wKTsKLQot
ICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgd2ViVmlldyk7Ci0g
ICAgZ3RrX3dpZGdldF9zaG93KHdpbmRvdyk7Ci0gICAgZ3RrX3dpZGdldF9zaG93KHdlYlZpZXcp
OwotCi0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklFVyh3ZWJW
aWV3KSwKLSAgICAgICAgIjxodG1sPjxib2R5PkZyYW1lcyEiCi0gICAgICAgICI8aWZyYW1lPjwv
aWZyYW1lPiIKLSAgICAgICAgIjxpZnJhbWU+PC9pZnJhbWU+IgotICAgICAgICAiPC9ib2R5Pjwv
aHRtbD4iLAotICAgICAgICAidGV4dC9odG1sIiwgInV0Zi04IiwgImZpbGU6Ly8iKTsKLSAgICBn
X21haW5fbG9vcF9ydW4obG9vcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9m
cmFtZV9jcmVhdGVfZGVzdHJveSh2b2lkKQotewotICAgIEd0a1dpZGdldCAqd2ViVmlldzsKLSAg
ICBHdGtXaWRnZXQgKndpbmRvdzsKLQotICAgIGdfdGVzdF9idWcoIjIxODM3Iik7Ci0gICAgd2Vi
VmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKLSAgICBnX29iamVjdF9yZWZfc2luayh3ZWJW
aWV3KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1Qod2ViVmlldyktPnJlZl9jb3VudCwg
PT0sIDEpOwotICAgIC8vIFRoaXMgY3Jhc2hlZCB3aXRoIHRoZSBvcmlnaW5hbCB2ZXJzaW9uCi0g
ICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Ci0KLSAgICBnX3Rlc3RfYnVnKCIyNTA0MiIpOwot
ICAgIHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOwotICAgIHdl
YlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7Ci0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RL
X0NPTlRBSU5FUih3aW5kb3cpLCB3ZWJWaWV3KTsKLSAgICBndGtfd2lkZ2V0X3Nob3cod2luZG93
KTsKLSAgICBndGtfd2lkZ2V0X3Nob3cod2ViVmlldyk7Ci0gICAgZ3RrX3dpZGdldF9kZXN0cm95
KHdlYlZpZXcpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfbGlmZXRp
bWUodm9pZCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OwotICAgIFdlYktpdFdlYkZy
YW1lKiB3ZWJGcmFtZTsKLSAgICBnX3Rlc3RfYnVnKCIyMTgzNyIpOwotCi0gICAgd2ViVmlldyA9
IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0X3Jl
Zl9zaW5rKHdlYlZpZXcpOwotICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVCh3ZWJWaWV3KS0+
cmVmX2NvdW50LCA9PSwgMSk7Ci0gICAgd2ViRnJhbWUgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21h
aW5fZnJhbWUod2ViVmlldyk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKHdlYkZyYW1l
KS0+cmVmX2NvdW50LCA9PSwgMSk7Ci0KLSAgICAvLyBBZGQgZHVtbXkgcmVmZXJlbmNlIG9uIHRo
ZSBXZWJLaXRXZWJGcmFtZSB0byBrZWVwIGl0IGFsaXZlCi0gICAgZ19vYmplY3RfcmVmKHdlYkZy
YW1lKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1Qod2ViRnJhbWUpLT5yZWZfY291bnQs
ID09LCAyKTsKLQotICAgIC8vIFRoaXMgY3Jhc2hlZCB3aXRoIHRoZSBvcmlnaW5hbCB2ZXJzaW9u
Ci0gICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhhdCB0
aGUgZnJhbWUgZ290IGRlbGV0ZWQgYXMgd2VsbC4gV2UgZGlkIHRoaXMKLSAgICAvLyBieSBhZGRp
bmcgYW4gZXh0cmEgcmVmIG9uIHRoZSBXZWJLaXRXZWJGcmFtZSBhbmQgd2Ugc2hvdWxkCi0gICAg
Ly8gYmUgdGhlIG9uZSBob2xkaW5nIHRoZSBsYXN0IHJlZmVyZW5jZS4KLSAgICBnX2Fzc2VydF9j
bXBpbnQoR19PQkpFQ1Qod2ViRnJhbWUpLT5yZWZfY291bnQsID09LCAxKTsKLSAgICBnX29iamVj
dF91bnJlZih3ZWJGcmFtZSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBwcmludF9yZXF1ZXN0ZWRf
Y2IoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0V2ViRnJhbWUqIHdlYkZyYW1lLCBHTWFp
bkxvb3AqIGxvb3ApCi17Ci0gICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1Qod2ViVmlldyks
ICJzaWduYWwtaGFuZGxlZCIsIEdJTlRfVE9fUE9JTlRFUihUUlVFKSk7Ci0gICAgZ19tYWluX2xv
b3BfcXVpdChsb29wKTsKLSAgICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQgcHJpbnRf
dGltZW91dChHTWFpbkxvb3AqIGxvb3ApCi17Ci0gICAgaWYgKGdfbWFpbl9sb29wX2lzX3J1bm5p
bmcobG9vcCkpCi0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci19Ci0KLXN0YXRpYyB2
b2lkIHRlc3Rfd2Via2l0X3dlYl9mcmFtZV9wcmludGluZyh2b2lkKQotewotICAgIFdlYktpdFdl
YlZpZXcqIHdlYlZpZXc7Ci0KLSAgICB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93
ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7Ci0gICAgZ19h
c3NlcnRfY21waW50KEdfT0JKRUNUKHdlYlZpZXcpLT5yZWZfY291bnQsID09LCAxKTsKLQotICAg
IHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiPGh0bWw+PGJvZHk+PGgxPldlYktpdEdUSyshPC9oMT48L2JvZHk+PC9o
dG1sPiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXh0L2h0bWwiLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXRmLTgiLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiZmlsZTovLyIpOwotCi0gICAgR01haW5Mb29wKiBsb29wID0gZ19tYWlu
X2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotCi0gICAgLy8gRG9lcyBqYXZhc2NyaXB0IHByaW50KCkg
d29yayBjb3JyZWN0bHk/Ci0gICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAicHJpbnQtcmVx
dWVzdGVkIiwKLSAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0socHJpbnRfcmVxdWVzdGVk
X2NiKSwKLSAgICAgICAgICAgICAgICAgICAgIGxvb3ApOwotCi0gICAgZ19vYmplY3Rfc2V0X2Rh
dGEoR19PQkpFQ1Qod2ViVmlldyksICJzaWduYWwtaGFuZGxlZCIsIEdJTlRfVE9fUE9JTlRFUihG
QUxTRSkpOwotICAgIHdlYmtpdF93ZWJfdmlld19leGVjdXRlX3NjcmlwdCAod2ViVmlldywgInBy
aW50KCk7Iik7Ci0KLSAgICAvLyBHaXZlIGphdmFzY3JpcHRjb3JlIHNvbWUgdGltZSB0byBwcm9j
ZXNzIHRoZSBwcmludCByZXF1ZXN0LCBidXQKLSAgICAvLyBwcmVwYXJlIGEgdGltZW91dCB0byBh
dm9pZCBpdCBydW5uaW5nIGZvcmV2ZXIgaW4gY2FzZSB0aGUgc2lnbmFsIGlzCi0gICAgLy8gbmV2
ZXIgZW1pdHRlZC4KLSAgICBnX3RpbWVvdXRfYWRkKDEwMDAsIChHU291cmNlRnVuYylwcmludF90
aW1lb3V0LCBsb29wKTsKLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoR1BPSU5URVJfVE9fSU5UKGdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKHdlYlZp
ZXcpLCAic2lnbmFsLWhhbmRsZWQiKSksID09LCBUUlVFKTsKLQotICAgIC8vIERvZXMgcHJpbnRp
bmcgZGlyZWN0bHkgdG8gYSBmaWxlPwotICAgIEdFcnJvciAqZXJyb3IgPSBOVUxMOwotICAgIGdj
aGFyKiB0ZW1wb3JhcnlGaWxlbmFtZSA9IE5VTEw7Ci0gICAgZ2ludCBmZCA9IGdfZmlsZV9vcGVu
X3RtcCAoIndlYmtpdC10ZXN0d2ViZnJhbWUtWFhYWFhYIiwgJnRlbXBvcmFyeUZpbGVuYW1lLCAm
ZXJyb3IpOwotICAgIGNsb3NlKGZkKTsKLQotICAgIGlmIChlcnJvcikgewotICAgICAgICBnX2Ny
aXRpY2FsKCJGYWlsZWQgdG8gb3BlbiBhIHRlbXBvcmFyeSBmaWxlIGZvciB3cml0aW5nOiAlcy4i
LCBlcnJvci0+bWVzc2FnZSk7Ci0gICAgICAgIGdfZXJyb3JfZnJlZShlcnJvcik7Ci0gICAgICAg
IGdvdG8gY2xlYW51cDsKLSAgICB9Ci0KLSAgICAvLyBXZSBkZWxldGUgdGhlIGZpbGUsIHNvIHRo
YXQgd2UgY2FuIGVhc2lseSBmaWd1cmUgb3V0IHRoYXQgdGhlCi0gICAgLy8gZmlsZSBnb3QgcHJp
bnRlZDsKLSAgICBpZiAoZ191bmxpbmsodGVtcG9yYXJ5RmlsZW5hbWUpID09IC0xKSB7Ci0gICAg
ICAgIGdfd2FybmluZygiRmFpbGVkIHRvIGRlbGV0ZSB0aGUgdGVtcG9yYXJ5IGZpbGU6ICVzLlxu
VGhpcyBtYXkgY2F1c2UgdGhlIHRlc3QgdG8gYmUgYm9ndXMuIiwgZ19zdHJlcnJvcihlcnJubykp
OwotICAgIH0KLQotICAgIFdlYktpdFdlYkZyYW1lKiB3ZWJGcmFtZSA9IHdlYmtpdF93ZWJfdmll
d19nZXRfbWFpbl9mcmFtZSh3ZWJWaWV3KTsKLSAgICBHdGtQcmludE9wZXJhdGlvbiogb3BlcmF0
aW9uID0gZ3RrX3ByaW50X29wZXJhdGlvbl9uZXcoKTsKLSAgICBHdGtQcmludE9wZXJhdGlvbkFj
dGlvbiBhY3Rpb24gPSBHVEtfUFJJTlRfT1BFUkFUSU9OX0FDVElPTl9FWFBPUlQ7Ci0gICAgR3Rr
UHJpbnRPcGVyYXRpb25SZXN1bHQgcmVzdWx0OwotCi0gICAgZ3RrX3ByaW50X29wZXJhdGlvbl9z
ZXRfZXhwb3J0X2ZpbGVuYW1lKG9wZXJhdGlvbiwgdGVtcG9yYXJ5RmlsZW5hbWUpOwotICAgIHJl
c3VsdCA9IHdlYmtpdF93ZWJfZnJhbWVfcHJpbnRfZnVsbCAod2ViRnJhbWUsIG9wZXJhdGlvbiwg
YWN0aW9uLCBOVUxMKTsKLQotICAgIGdfYXNzZXJ0X2NtcGludChyZXN1bHQsID09LCBHVEtfUFJJ
TlRfT1BFUkFUSU9OX1JFU1VMVF9BUFBMWSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGdfZmlsZV90
ZXN0KHRlbXBvcmFyeUZpbGVuYW1lLCBHX0ZJTEVfVEVTVF9JU19SRUdVTEFSKSwgPT0sIFRSVUUp
OwotCi0gICAgZ191bmxpbmsodGVtcG9yYXJ5RmlsZW5hbWUpOwotICAgIGdfb2JqZWN0X3VucmVm
KG9wZXJhdGlvbik7Ci1jbGVhbnVwOgotICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwotICAg
IGdfZnJlZSh0ZW1wb3JhcnlGaWxlbmFtZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0
X3dlYl9mcmFtZV9yZXNwb25zZSgpCi17Ci0gICAgV2ViS2l0V2ViRnJhbWUqIGZyYW1lID0gZ19v
YmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQl9GUkFNRSwgTlVMTCk7Ci0gICAgV2ViS2l0TmV0d29y
a1Jlc3BvbnNlKiByZXNwb25zZSA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X25ldHdvcmtfcmVzcG9u
c2UoZnJhbWUpOwotICAgIGdfYXNzZXJ0KCFyZXNwb25zZSk7Ci0gICAgZ19vYmplY3RfdW5yZWYo
ZnJhbWUpOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCi17Ci0gICAgZ3Rr
X3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOwotCi0gICAgZ190ZXN0X2J1Z19iYXNlKCJo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQv
d2Vidmlldy9jcmVhdGVfZGVzdHJveSIsIHRlc3Rfd2Via2l0X3dlYl9mcmFtZV9jcmVhdGVfZGVz
dHJveSk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnZpZXcvZnJhbWUtY3JlYXRl
ZF9zaWduYWwiLCB0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfY3JlYXRlZF9zaWduYWwpOwotICAgIGdf
dGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJmcmFtZS9saWZldGltZSIsIHRlc3Rfd2Via2l0X3dl
Yl9mcmFtZV9saWZldGltZSk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnZpZXcv
cHJpbnRpbmciLCB0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfcHJpbnRpbmcpOwotICAgIGdfdGVzdF9h
ZGRfZnVuYygiL3dlYmtpdC93ZWJ2aWV3L3Jlc3BvbnNlIiwgdGVzdF93ZWJraXRfd2ViX2ZyYW1l
X3Jlc3BvbnNlKTsKLSAgICByZXR1cm4gZ190ZXN0X3J1biAoKTsKLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJoaXN0b3J5aXRlbS5jIGIvU291cmNlL1dlYktp
dC9ndGsvdGVzdHMvdGVzdHdlYmhpc3RvcnlpdGVtLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDgyZTE5MWMyMDhjNzUzOTgwZGViNWJiOWU2MDc1Y2ZiNjRjMWFiOWQuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9ndGsv
dGVzdHMvdGVzdHdlYmhpc3RvcnlpdGVtLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEphbiBNaWNoYWVsIEFsb256bwotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNs
dWRlIDx3ZWJraXQvd2Via2l0Lmg+Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBXZWJLaXRXZWJI
aXN0b3J5SXRlbSogaXRlbTsKLX0gV2ViSGlzdG9yeUl0ZW1GaXh0dXJlOwotCi1zdGF0aWMgdm9p
ZCB3ZWJfaGlzdG9yeV9pdGVtX2ZpeHR1cmVfc2V0dXAoV2ViSGlzdG9yeUl0ZW1GaXh0dXJlKiBm
aXh0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjb25z
dHBvaW50ZXIgZGF0YSkKLXsKLSAgICBmaXh0dXJlLT5pdGVtID0gd2Via2l0X3dlYl9oaXN0b3J5
X2l0ZW1fbmV3X3dpdGhfZGF0YSgiaHR0cDovL2V4YW1wbGUuY29tLyIsICJFeGFtcGxlMSIpOwot
ICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChmaXh0dXJlLT5pdGVtKS0+cmVmX2NvdW50LCA9
PSAsIDEpOwotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPml0ZW0gIT0gTlVMTCk7Ci19Ci0KLXN0YXRp
YyB2b2lkIHdlYl9oaXN0b3J5X2l0ZW1fZml4dHVyZV90ZWFyZG93bihXZWJIaXN0b3J5SXRlbUZp
eHR1cmUqIGZpeHR1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPml0ZW0g
IT0gTlVMTCk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKGZpeHR1cmUtPml0ZW0pLT5y
ZWZfY291bnQsID09LCAxKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX2hpc3Rv
cnlfaXRlbV9nZXRfZGF0YShXZWJIaXN0b3J5SXRlbUZpeHR1cmUqIGZpeHR1cmUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjb25zdHBvaW50ZXIg
ZGF0YSkKLXsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0
X3RpdGxlKGZpeHR1cmUtPml0ZW0pLCA9PSwgIkV4YW1wbGUxIik7Ci0gICAgZ19hc3NlcnRfY21w
c3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF91cmkoZml4dHVyZS0+aXRlbSksID09LCAi
aHR0cDovL2V4YW1wbGUuY29tLyIpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJf
aGlzdG9yeV9pdGVtX2FsdGVybmF0ZV90aXRsZShXZWJIaXN0b3J5SXRlbUZpeHR1cmUqIGZpeHR1
cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1f
c2V0X2FsdGVybmF0ZV90aXRsZShmaXh0dXJlLT5pdGVtLCAiQWx0ZXJuYXRlIHRpdGxlIik7Ci0g
ICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF9hbHRlcm5hdGVf
dGl0bGUoZml4dHVyZS0+aXRlbSksID09LCAiQWx0ZXJuYXRlIHRpdGxlIik7Ci19Ci0KLWludCBt
YWluKGludCBhcmdjLCBjaGFyKiogYXJndikKLXsKLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAm
YXJndiwgTlVMTCk7Ci0KLSAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQu
b3JnLyIpOwotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvd2ViaGlzdG9yeWl0ZW0vZ2V0X2RhdGEi
LAotICAgICAgICAgICAgICAgV2ViSGlzdG9yeUl0ZW1GaXh0dXJlLCAwLCB3ZWJfaGlzdG9yeV9p
dGVtX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF93ZWJfaGlzdG9y
eV9pdGVtX2dldF9kYXRhLCB3ZWJfaGlzdG9yeV9pdGVtX2ZpeHR1cmVfdGVhcmRvd24pOwotICAg
IGdfdGVzdF9hZGQoIi93ZWJraXQvd2ViaGlzdG9yeWl0ZW0vYWx0ZXJuYXRlX3RpdGxlIiwKLSAg
ICAgICAgICAgICAgIFdlYkhpc3RvcnlJdGVtRml4dHVyZSwgMCwgd2ViX2hpc3RvcnlfaXRlbV9m
aXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfd2ViX2hpc3RvcnlfaXRl
bV9hbHRlcm5hdGVfdGl0bGUsIHdlYl9oaXN0b3J5X2l0ZW1fZml4dHVyZV90ZWFyZG93bik7Ci0g
ICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0
ay90ZXN0cy90ZXN0d2ViaW5zcGVjdG9yLmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0
d2ViaW5zcGVjdG9yLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3NDM4MmZmM2Y0
M2NiZTNkYjJkZmYxODUyYmY0ODA0NTI5YWUzNGUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYmluc3Bl
Y3Rvci5jCisrKyAvZGV2L251bGwKQEAgLTEsMTczICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIgR3VzdGF2byBOb3JvbmhhIFNpbHZhIDxnbnNAZ25vbWUub3JnPgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAidGVzdF91dGlscy5oIgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+
Ci0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3ZWJr
aXQvd2Via2l0Lmg+Ci0KLUdNYWluTG9vcCAqbG9vcDsKLUd0a1dpZGdldCAqd2luZG93OwotCi1z
dGF0aWMgZ2Jvb2xlYW4gcXVpdExvb3AoZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBnX21haW5fbG9v
cF9xdWl0KGxvb3ApOwotICAgIHJldHVybiBUUlVFOwotfQotCi0vKiBJZ25vcmUgc2ltcGxlIHRy
YW5zbGF0aW9uLXJlbGF0ZWQgbWVzc2FnZXMgYW5kIHVwZ3JhZGUgb3RoZXIKLSAqIG1lc3NhZ2Vz
IHRvIHdhcm5pbmdzLgotICovCi1zdGF0aWMgZ2Jvb2xlYW4gY29uc29sZU1lc3NhZ2VDYWxsYmFj
ayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBjb25zdCBjaGFyKiBtZXNzYWdlLCB1bnNpZ25lZCBp
bnQgbGluZSwgY29uc3QgY2hhciogc291cmNlSWQpCi17Ci0gICAgaWYgKHN0cnN0cihtZXNzYWdl
LCAiTG9jYWxpemVkIHN0cmluZyIpIHx8IHN0cnN0cihtZXNzYWdlLCAiUHJvdG9jb2wgRXJyb3I6
IHRoZSBtZXNzYWdlIGlzIGZvciBub24tZXhpc3RpbmcgZG9tYWluICdQcm9maWxlciciKSB8fAot
ICAgICAgICBzdHJzdHIobWVzc2FnZSwgIkRpZG4ndCBmaW5kIGEgVHJlZUVsZW1lbnQgZm9yIGEg
cmVwcmVzZW50ZWRPYmplY3QiKSkKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0KLSAgICBnX3dhcm5p
bmcoIkNvbnNvbGU6ICVzIEAlZDogJXNcbiIsIHNvdXJjZUlkLCBsaW5lLCBtZXNzYWdlKTsKLSAg
ICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIFdlYktpdFdlYlZpZXcqIGluc3BlY3RFbGVtZW50
Q2FsbGJhY2soV2ViS2l0V2ViSW5zcGVjdG9yICppbnNwZWN0b3IsIFdlYktpdFdlYlZpZXcgKmlu
c3BlY3RlZFdlYlZpZXcsIGludCAqdGltZXNFbGVtZW50SW5zcGVjdGVkKQotewotICAgICp0aW1l
c0VsZW1lbnRJbnNwZWN0ZWQgPSAqdGltZXNFbGVtZW50SW5zcGVjdGVkICsgMTsKLQotICAgIHdp
bmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOwotCi0gICAgR3RrV2lk
Z2V0ICpuZXdXZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygpOwotICAgIGd0a19jb250YWlu
ZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgbmV3V2ViVmlldyk7Ci0KLSAgICBnX3NpZ25h
bF9jb25uZWN0KG5ld1dlYlZpZXcsICJjb25zb2xlLW1lc3NhZ2UiLAotICAgICAgICAgICAgICAg
ICAgICAgR19DQUxMQkFDSyhjb25zb2xlTWVzc2FnZUNhbGxiYWNrKSwgTlVMTCk7Ci0KLSAgICBy
ZXR1cm4gV0VCS0lUX1dFQl9WSUVXKG5ld1dlYlZpZXcpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4g
Y2xvc2VJbnNwZWN0b3IoV2ViS2l0V2ViSW5zcGVjdG9yICppbnNwZWN0b3IsIGludCAqdGltZXND
bG9zZWQpCi17Ci0gICAgKnRpbWVzQ2xvc2VkID0gKnRpbWVzQ2xvc2VkICsgMTsKLQotICAgIGd0
a193aWRnZXRfZGVzdHJveSh3aW5kb3cpOwotICAgIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMg
Z2Jvb2xlYW4gc2hvd0luc3BlY3RvcihXZWJLaXRXZWJJbnNwZWN0b3IgKmluc3BlY3RvciwgZ3Bv
aW50ZXIgZGF0YSkKLXsKLSAgICBnX2lkbGVfYWRkKHF1aXRMb29wLCBOVUxMKTsKLSAgICByZXR1
cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQgbG9hZEZpbmlzaGVkKFdlYktpdFdlYlZpZXcgKndl
YlZpZXcsIFdlYktpdFdlYkZyYW1lICpmcmFtZSwgZ2Jvb2xlYW4gKmlzTG9hZEZpbmlzaGVkKQot
ewotICAgICppc0xvYWRGaW5pc2hlZCA9IFRSVUU7Ci0gICAgaWYgKGdfbWFpbl9sb29wX2lzX3J1
bm5pbmcobG9vcCkpCi0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci19Ci0KLXN0YXRp
YyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9pbnNwZWN0b3JfY2xvc2VfYW5kX2luc3BlY3QoKQotewot
ICAgIFdlYktpdFdlYlZpZXcgKndlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92
aWV3X25ldygpKTsKLSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotCi0g
ICAgZ2Jvb2xlYW4gaXNMb2FkRmluaXNoZWQgPSBGQUxTRTsKLSAgICBnX3NpZ25hbF9jb25uZWN0
KHdlYlZpZXcsICJsb2FkLWZpbmlzaGVkIiwgR19DQUxMQkFDSyhsb2FkRmluaXNoZWQpLCAmaXNM
b2FkRmluaXNoZWQpOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGh0bWw+PGJvZHk+PHA+d29vaG9vPC9w
PjwvYm9keT48L2h0bWw+IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRleHQv
aHRtbCIsICJVVEYtOCIsICJmaWxlOi8vIik7Ci0gICAgaWYgKCFpc0xvYWRGaW5pc2hlZCkKLSAg
ICAgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAgZ19vYmplY3Rfc2V0KHdlYmtpdF93
ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmlldyksICJlbmFibGUtZGV2ZWxvcGVyLWV4dHJhcyIs
IFRSVUUsIE5VTEwpOwotICAgIFdlYktpdFdlYkluc3BlY3RvciAqaW5zcGVjdG9yID0gd2Via2l0
X3dlYl92aWV3X2dldF9pbnNwZWN0b3Iod2ViVmlldyk7Ci0KLSAgICBpbnQgdGltZXNFbGVtZW50
SW5zcGVjdGVkID0gMDsKLSAgICBpbnQgdGltZXNDbG9zZWQgPSAwOwotICAgIGdfb2JqZWN0X2Nv
bm5lY3QoaW5zcGVjdG9yLAotICAgICAgICAgICAgICAgICAgICAgInNpZ25hbDo6aW5zcGVjdC13
ZWItdmlldyIsIEdfQ0FMTEJBQ0soaW5zcGVjdEVsZW1lbnRDYWxsYmFjayksICZ0aW1lc0VsZW1l
bnRJbnNwZWN0ZWQsCi0gICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjpzaG93LXdpbmRvdyIs
IEdfQ0FMTEJBQ0soc2hvd0luc3BlY3RvciksIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAi
c2lnbmFsOjpjbG9zZS13aW5kb3ciLCBHX0NBTExCQUNLKGNsb3NlSW5zcGVjdG9yKSwgJnRpbWVz
Q2xvc2VkLAotICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0KLSAgICB3ZWJraXRfd2ViX2lu
c3BlY3Rvcl9pbnNwZWN0X2Nvb3JkaW5hdGVzKGluc3BlY3RvciwgMC4wLCAwLjApOwotICAgIGdf
YXNzZXJ0X2NtcGludCh0aW1lc0VsZW1lbnRJbnNwZWN0ZWQsID09LCAxKTsKLQotICAgIGdfbWFp
bl9sb29wX3J1bihsb29wKTsKLQotICAgIHdlYmtpdF93ZWJfaW5zcGVjdG9yX2Nsb3NlKGluc3Bl
Y3Rvcik7Ci0gICAgZ19hc3NlcnRfY21waW50KHRpbWVzQ2xvc2VkLCA9PSwgMSk7Ci0KLSAgICB3
ZWJraXRfd2ViX2luc3BlY3Rvcl9pbnNwZWN0X2Nvb3JkaW5hdGVzKGluc3BlY3RvciwgMC4wLCAw
LjApOwotICAgIGdfYXNzZXJ0X2NtcGludCh0aW1lc0VsZW1lbnRJbnNwZWN0ZWQsID09LCAyKTsK
LQotICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLQotICAgIGd0a193aWRnZXRfZGVzdHJveShH
VEtfV0lER0VUKHdlYlZpZXcpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGltZXNDbG9zZWQsID09
LCAyKTsKLQotICAgIGdfbWFpbl9sb29wX3VucmVmKGxvb3ApOwotfQotCi1zdGF0aWMgdm9pZCB0
ZXN0X3dlYmtpdF93ZWJfaW5zcGVjdG9yX2Rlc3Ryb3lfaW5zcGVjdGVkX3dlYl92aWV3KCkKLXsK
LSAgICBXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJf
dmlld19uZXcoKSk7Ci0gICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLQot
ICAgIGdib29sZWFuIGlzTG9hZEZpbmlzaGVkID0gRkFMU0U7Ci0gICAgZ19zaWduYWxfY29ubmVj
dCh3ZWJWaWV3LCAibG9hZC1maW5pc2hlZCIsIEdfQ0FMTEJBQ0sobG9hZEZpbmlzaGVkKSwgJmlz
TG9hZEZpbmlzaGVkKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxodG1sPjxib2R5PjxwPndvb2hvbzwv
cD48L2JvZHk+PC9odG1sPiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXh0
L2h0bWwiLCAiVVRGLTgiLCAiZmlsZTovLyIpOwotICAgIGlmICghaXNMb2FkRmluaXNoZWQpCi0g
ICAgICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLQotICAgIGdfb2JqZWN0X3NldCh3ZWJraXRf
d2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdlYlZpZXcpLCAiZW5hYmxlLWRldmVsb3Blci1leHRyYXMi
LCBUUlVFLCBOVUxMKTsKLSAgICBXZWJLaXRXZWJJbnNwZWN0b3IgKmluc3BlY3RvciA9IHdlYmtp
dF93ZWJfdmlld19nZXRfaW5zcGVjdG9yKHdlYlZpZXcpOwotCi0gICAgaW50IHRpbWVzRWxlbWVu
dEluc3BlY3RlZCA9IDA7Ci0gICAgaW50IHRpbWVzQ2xvc2VkID0gMDsKLSAgICBnX29iamVjdF9j
b25uZWN0KGluc3BlY3RvciwKLSAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6Omluc3BlY3Qt
d2ViLXZpZXciLCBHX0NBTExCQUNLKGluc3BlY3RFbGVtZW50Q2FsbGJhY2spLCAmdGltZXNFbGVt
ZW50SW5zcGVjdGVkLAotICAgICAgICAgICAgICAgICAgICAgInNpZ25hbDo6c2hvdy13aW5kb3ci
LCBHX0NBTExCQUNLKHNob3dJbnNwZWN0b3IpLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAg
InNpZ25hbDo6Y2xvc2Utd2luZG93IiwgR19DQUxMQkFDSyhjbG9zZUluc3BlY3RvciksICZ0aW1l
c0Nsb3NlZCwKLSAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotCi0gICAgd2Via2l0X3dlYl9p
bnNwZWN0b3JfaW5zcGVjdF9jb29yZGluYXRlcyhpbnNwZWN0b3IsIDAuMCwgMC4wKTsKLSAgICBn
X2Fzc2VydF9jbXBpbnQodGltZXNFbGVtZW50SW5zcGVjdGVkLCA9PSwgMSk7Ci0KLSAgICBnX21h
aW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koR1RLX1dJREdFVCh3
ZWJWaWV3KSk7Ci0gICAgZ19hc3NlcnRfY21waW50KHRpbWVzQ2xvc2VkLCA9PSwgMSk7Ci0KLSAg
ICBnX21haW5fbG9vcF91bnJlZihsb29wKTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIq
KiBhcmd2KQotewotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLQotICAg
IGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0gICAgZ190ZXN0
X2FkZF9mdW5jKCIvd2Via2l0L3dlYmluc3BlY3Rvci9kZXN0cm95LWluc3BlY3RlZC13ZWItdmll
dyIsIHRlc3Rfd2Via2l0X3dlYl9pbnNwZWN0b3JfZGVzdHJveV9pbnNwZWN0ZWRfd2ViX3ZpZXcp
OwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJpbnNwZWN0b3IvY2xvc2UtYW5kLWlu
c3BlY3QiLCB0ZXN0X3dlYmtpdF93ZWJfaW5zcGVjdG9yX2Nsb3NlX2FuZF9pbnNwZWN0KTsKLQot
ICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0
ay90ZXN0cy90ZXN0d2VicGx1Z2luZGF0YWJhc2UuYyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3Rz
L3Rlc3R3ZWJwbHVnaW5kYXRhYmFzZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2
NTI4MTFiMTM5MDU4NzRjOTg3N2E0YTlhMDg5ZDU0ZDVlZWZiNTQ4Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rl
c3R3ZWJwbHVnaW5kYXRhYmFzZS5jCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgot
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z2xpYi9nc3Rk
aW8uaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgot
Ci0vKiBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBwdWJsaWMsIHNvIHdlIG5lZWQgYW4gZXh0ZXJuIGRl
Y2xhcmF0aW9uICovCi1leHRlcm4gdm9pZCB3ZWJraXRfd2ViX3NldHRpbmdzX2FkZF9leHRyYV9w
bHVnaW5fZGlyZWN0b3J5KFdlYktpdFdlYlZpZXcqIHZpZXcsIGNvbnN0IGdjaGFyKiBkaXJlY3Rv
cnkpOwotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfcGx1Z2luX2RhdGFiYXNlX2dldF9w
bHVnaW5zKCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdl
YmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgV2ViS2l0V2ViUGx1Z2luRGF0YWJhc2UqIGRhdGFi
YXNlOwotICAgIEdTTGlzdCogcGx1Z2luTGlzdCwgKnA7Ci0gICAgZ2Jvb2xlYW4gZm91bmQgPSBG
QUxTRTsKLSAgICBnYm9vbGVhbiBlbmFibGVkID0gRkFMU0U7Ci0KLSAgICB3ZWJraXRfd2ViX3Nl
dHRpbmdzX2FkZF9leHRyYV9wbHVnaW5fZGlyZWN0b3J5KHZpZXcsIFRFU1RfUExVR0lOX0RJUik7
Ci0gICAgZ19vYmplY3RfcmVmX3NpbmsoR19PQkpFQ1QodmlldykpOwotCi0gICAgZGF0YWJhc2Ug
PSB3ZWJraXRfZ2V0X3dlYl9wbHVnaW5fZGF0YWJhc2UoKTsKLSAgICBwbHVnaW5MaXN0ID0gd2Vi
a2l0X3dlYl9wbHVnaW5fZGF0YWJhc2VfZ2V0X3BsdWdpbnMoZGF0YWJhc2UpOwotICAgIGZvciAo
cCA9IHBsdWdpbkxpc3Q7IHA7IHAgPSBwLT5uZXh0KSB7Ci0gICAgICAgIFdlYktpdFdlYlBsdWdp
biogcGx1Z2luID0gKFdlYktpdFdlYlBsdWdpbiopcC0+ZGF0YTsKLSAgICAgICAgaWYgKCFnX3N0
cmNtcDAod2Via2l0X3dlYl9wbHVnaW5fZ2V0X25hbWUocGx1Z2luKSwgIldlYktpdCBUZXN0IFBs
dWdJbiIpICYmCi0gICAgICAgICAgICAhZ19zdHJjbXAwKHdlYmtpdF93ZWJfcGx1Z2luX2dldF9k
ZXNjcmlwdGlvbihwbHVnaW4pLCAiU2ltcGxlIE5ldHNjYXBlwq4gcGx1Zy1pbiB0aGF0IGhhbmRs
ZXMgdGVzdCBjb250ZW50IGZvciBXZWJLaXQiKSkgewotICAgICAgICAgICAgZm91bmQgPSBUUlVF
OwotICAgICAgICAgICAgZW5hYmxlZCA9IHdlYmtpdF93ZWJfcGx1Z2luX2dldF9lbmFibGVkKHBs
dWdpbik7Ci0gICAgICAgICAgICB3ZWJraXRfd2ViX3BsdWdpbl9zZXRfZW5hYmxlZChwbHVnaW4s
IEZBTFNFKTsKLSAgICAgICAgfQotICAgIH0KLSAgICB3ZWJraXRfd2ViX3BsdWdpbl9kYXRhYmFz
ZV9wbHVnaW5zX2xpc3RfZnJlZShwbHVnaW5MaXN0KTsKLSAgICBnX2Fzc2VydChmb3VuZCk7Ci0g
ICAgZ19hc3NlcnQoZW5hYmxlZCk7Ci0KLSAgICB3ZWJraXRfd2ViX3BsdWdpbl9kYXRhYmFzZV9y
ZWZyZXNoKGRhdGFiYXNlKTsKLSAgICBwbHVnaW5MaXN0ID0gd2Via2l0X3dlYl9wbHVnaW5fZGF0
YWJhc2VfZ2V0X3BsdWdpbnMoZGF0YWJhc2UpOwotCi0gICAgZm9yIChwID0gcGx1Z2luTGlzdDsg
cDsgcCA9IHAtPm5leHQpIHsKLSAgICAgICAgV2ViS2l0V2ViUGx1Z2luKiBwbHVnaW4gPSAoV2Vi
S2l0V2ViUGx1Z2luKilwLT5kYXRhOwotICAgICAgICBpZiAoIWdfc3RyY21wMCh3ZWJraXRfd2Vi
X3BsdWdpbl9nZXRfbmFtZShwbHVnaW4pLCAiV2ViS2l0IFRlc3QgUGx1Z0luIikgJiYKLSAgICAg
ICAgICAgICFnX3N0cmNtcDAod2Via2l0X3dlYl9wbHVnaW5fZ2V0X2Rlc2NyaXB0aW9uKHBsdWdp
biksICJTaW1wbGUgTmV0c2NhcGXCriBwbHVnLWluIHRoYXQgaGFuZGxlcyB0ZXN0IGNvbnRlbnQg
Zm9yIFdlYktpdCIpKQotICAgICAgICAgICAgZW5hYmxlZCA9IHdlYmtpdF93ZWJfcGx1Z2luX2dl
dF9lbmFibGVkKHBsdWdpbik7Ci0gICAgfQotICAgIHdlYmtpdF93ZWJfcGx1Z2luX2RhdGFiYXNl
X3BsdWdpbnNfbGlzdF9mcmVlKHBsdWdpbkxpc3QpOwotICAgIGdfYXNzZXJ0KCFlbmFibGVkKTsK
LQotICAgIGdfb2JqZWN0X3VucmVmKHZpZXcpOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hh
cioqIGFyZ3YpCi17Ci0gICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOwotCi0g
ICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKLSAgICBnX3Rl
c3RfYWRkX2Z1bmMoIi93ZWJraXQvd2VicGx1Z2luZGF0YWJhc2UvZ2V0cGx1Z2lucyIsIHRlc3Rf
d2Via2l0X3dlYl9wbHVnaW5fZGF0YWJhc2VfZ2V0X3BsdWdpbnMpOwotICAgIHJldHVybiBnX3Rl
c3RfcnVuICgpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdl
YnJlc291cmNlLmMgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2VicmVzb3VyY2UuYwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM1OGI3YWQ3MmExNjg3Zjg1YWMxMmFkZGM1
NjZhODkxOWQ2MzQxYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2VicmVzb3VyY2UuYworKysgL2Rldi9u
dWxsCkBAIC0xLDMzMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEphbiBNaWNo
YWVsIEFsb256bwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1
ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KLSNpbmNsdWRlIDxzdHJp
bmcuaD4KLSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+Ci0KLSNkZWZpbmUgSU5ERVhfSFRNTCAi
PGh0bWw+PC9odG1sPiIKLSNkZWZpbmUgTUFJTl9IVE1MICI8aHRtbD48aGVhZD48c2NyaXB0IGxh
bmd1YWdlPVwiamF2YXNjcmlwdFwiIHNyYz1cIi9qYXZhc2NyaXB0LmpzXCI+PC9zY3JpcHQ+PC9o
ZWFkPjxib2R5PjxoMT5oYWg8L2gxPjwvaHRtbD4iCi0jZGVmaW5lIEpBVkFTQ1JJUFQgImZ1bmN0
aW9uIGJsYWggKCkgeyB2YXIgYSA9IDE7IH0iCi0KLUdNYWluTG9vcCogbG9vcDsKLVNvdXBTZXNz
aW9uICpzZXNzaW9uOwotY2hhciAqYmFzZV91cmk7Ci1XZWJLaXRXZWJSZXNvdXJjZSogbWFpbl9y
ZXNvdXJjZTsKLVdlYktpdFdlYlJlc291cmNlKiBzdWJfcmVzb3VyY2U7Ci0KLXR5cGVkZWYgc3Ry
dWN0IHsKLSAgICBXZWJLaXRXZWJSZXNvdXJjZSogd2ViUmVzb3VyY2U7Ci0gICAgV2ViS2l0V2Vi
Vmlldyogd2ViVmlldzsKLX0gV2ViUmVzb3VyY2VGaXh0dXJlOwotCi0vKiBGb3IgcmVhbCByZXF1
ZXN0IHRlc3RpbmcgKi8KLXN0YXRpYyB2b2lkCi1zZXJ2ZXJfY2FsbGJhY2sgKFNvdXBTZXJ2ZXIg
KnNlcnZlciwgU291cE1lc3NhZ2UgKm1zZywKLSAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq
cGF0aCwgR0hhc2hUYWJsZSAqcXVlcnksCi0gICAgICAgICAgICAgICAgIFNvdXBDbGllbnRDb250
ZXh0ICpjb250ZXh0LCBncG9pbnRlciBkYXRhKQotewotICAgIGlmIChtc2ctPm1ldGhvZCAhPSBT
T1VQX01FVEhPRF9HRVQpIHsKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMgKG1zZywg
U09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzIChtc2csIFNPVVBfU1RBVFVTX09LKTsKLQotICAg
IC8qIFJlZGlyZWN0ICovCi0gICAgaWYgKGdfc3RyX2VxdWFsIChwYXRoLCAiLyIpKSB7Ci0gICAg
ICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzIChtc2csIFNPVVBfU1RBVFVTX01PVkVEX1BFUk1B
TkVOVExZKTsKLQotICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQgKG1zZy0+cmVz
cG9uc2VfaGVhZGVycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTG9j
YXRpb24iLCAiL2luZGV4Lmh0bWwiKTsKLSAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsIChwYXRo
LCAiL2luZGV4Lmh0bWwiKSkgewotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQgKG1z
Zy0+cmVzcG9uc2VfYm9keSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT1VQ
X01FTU9SWV9DT1BZLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOREVYX0hU
TUwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuIChJTkRFWF9IVE1M
KSk7Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbCAocGF0aCwgIi9tYWluLmh0bWwiKSkgewot
ICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQgKG1zZy0+cmVzcG9uc2VfYm9keSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT1VQX01FTU9SWV9DT1BZLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BSU5fSFRNTCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdHJsZW4gKE1BSU5fSFRNTCkpOwotICAgIH0gZWxzZSBpZiAoZ19z
dHJfZXF1YWwgKHBhdGgsICIvamF2YXNjcmlwdC5qcyIpKSB7Ci0gICAgICAgIHNvdXBfbWVzc2Fn
ZV9ib2R5X2FwcGVuZCAobXNnLT5yZXNwb25zZV9ib2R5LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNPVVBfTUVNT1JZX0NPUFksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgSkFWQVNDUklQVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHJsZW4gKEpBVkFTQ1JJUFQpKTsKLSAgICB9Ci0KLQotICAgIHNvdXBfbWVzc2FnZV9ib2R5X2Nv
bXBsZXRlIChtc2ctPnJlc3BvbnNlX2JvZHkpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJfcmVzb3Vy
Y2VfZml4dHVyZV9zZXR1cChXZWJSZXNvdXJjZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50
ZXIgZGF0YSkKLXsKLSAgICBmaXh0dXJlLT53ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtp
dF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3NpbmsoZml4dHVyZS0+d2ViVmll
dyk7Ci0gICAgY29uc3QgZ2NoYXIqIHdlYkRhdGEgPSAiPGh0bWw+PC9odG1sPiI7Ci0gICAgZml4
dHVyZS0+d2ViUmVzb3VyY2UgPSB3ZWJraXRfd2ViX3Jlc291cmNlX25ldyh3ZWJEYXRhLCBzdHJs
ZW4od2ViRGF0YSksICJodHRwOi8vZXhhbXBsZS5jb20vIiwgInRleHQvaHRtbCIsICJ1dGY4Iiwg
IkV4YW1wbGUuY29tIik7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+d2ViUmVzb3VyY2UpOwotfQot
Ci1zdGF0aWMgdm9pZCB3ZWJfcmVzb3VyY2VfZml4dHVyZV90ZWFyZG93bihXZWJSZXNvdXJjZUZp
eHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBnX2Fzc2VydChmaXh0
dXJlLT53ZWJSZXNvdXJjZSk7Ci0gICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+d2ViUmVzb3Vy
Y2UpOwotICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPndlYlZpZXcpOwotfQotCi1zdGF0aWMg
dm9pZCB0ZXN0X3dlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VybChXZWJSZXNvdXJjZUZpeHR1cmUq
IGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBnY2hhciogdXJsOwotICAgIGdf
b2JqZWN0X2dldChHX09CSkVDVChmaXh0dXJlLT53ZWJSZXNvdXJjZSksICJ1cmkiLCAmdXJsLCBO
VUxMKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodXJsLCA9PSwgImh0dHA6Ly9leGFtcGxlLmNvbS8i
KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJpKGZpeHR1
cmUtPndlYlJlc291cmNlKSAsPT0sImh0dHA6Ly9leGFtcGxlLmNvbS8iKTsKLSAgICBnX2ZyZWUo
dXJsKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3Jlc291cmNlX2dldF9kYXRh
KFdlYlJlc291cmNlRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAg
IEdTdHJpbmcqIGNoYXJEYXRhID0gd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZGF0YShmaXh0dXJl
LT53ZWJSZXNvdXJjZSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKGNoYXJEYXRhLT5zdHIsID09LCAi
PGh0bWw+PC9odG1sPiIpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfcmVzb3Vy
Y2VfZ2V0X21pbWVfdHlwZShXZWJSZXNvdXJjZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50
ZXIgZGF0YSkKLXsKLSAgICBnY2hhciogbWltZV90eXBlOwotICAgIGdfb2JqZWN0X2dldChHX09C
SkVDVChmaXh0dXJlLT53ZWJSZXNvdXJjZSksICJtaW1lLXR5cGUiLCAmbWltZV90eXBlLCBOVUxM
KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIobWltZV90eXBlLCA9PSwgInRleHQvaHRtbCIpOwotICAg
IGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3Jlc291cmNlX2dldF9taW1lX3R5cGUoZml4dHVy
ZS0+d2ViUmVzb3VyY2UpLD09LCJ0ZXh0L2h0bWwiKTsKLSAgICBnX2ZyZWUobWltZV90eXBlKTsK
LX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3Jlc291cmNlX2dldF9lbmNvZGluZyhX
ZWJSZXNvdXJjZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBn
Y2hhciogdGV4dF9lbmNvZGluZzsKLSAgICBnX29iamVjdF9nZXQoR19PQkpFQ1QoZml4dHVyZS0+
d2ViUmVzb3VyY2UpLCAiZW5jb2RpbmciLCAmdGV4dF9lbmNvZGluZywgTlVMTCk7Ci0gICAgZ19h
c3NlcnRfY21wc3RyKHRleHRfZW5jb2RpbmcsID09LCAidXRmOCIpOwotICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfd2ViX3Jlc291cmNlX2dldF9lbmNvZGluZyhmaXh0dXJlLT53ZWJSZXNvdXJj
ZSksPT0sInV0ZjgiKTsKLSAgICBnX2ZyZWUodGV4dF9lbmNvZGluZyk7Ci19Ci0KLXN0YXRpYyB2
b2lkIHRlc3Rfd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZnJhbWVfbmFtZShXZWJSZXNvdXJjZUZp
eHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBnY2hhciogZnJhbWVf
bmFtZTsKLSAgICBnX29iamVjdF9nZXQoR19PQkpFQ1QoZml4dHVyZS0+d2ViUmVzb3VyY2UpLCAi
ZnJhbWUtbmFtZSIsICZmcmFtZV9uYW1lLCBOVUxMKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoZnJh
bWVfbmFtZSwgPT0sICJFeGFtcGxlLmNvbSIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRf
d2ViX3Jlc291cmNlX2dldF9mcmFtZV9uYW1lKGZpeHR1cmUtPndlYlJlc291cmNlKSw9PSwiRXhh
bXBsZS5jb20iKTsKLSAgICBnX2ZyZWUoZnJhbWVfbmFtZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJl
c291cmNlX3JlcXVlc3Rfc3RhcnRpbmdfY2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIFdlYktp
dFdlYkZyYW1lKiB3ZWJfZnJhbWUsIFdlYktpdFdlYlJlc291cmNlKiB3ZWJfcmVzb3VyY2UsIFdl
YktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0LCBXZWJLaXROZXR3b3JrUmVzcG9uc2UqIHJlc3Bv
bnNlLCBncG9pbnRlciBkYXRhKQotewotICAgIGdpbnQqIGJlZW5fdGhlcmUgPSBkYXRhOwotICAg
ICpiZWVuX3RoZXJlID0gKmJlZW5fdGhlcmUgKyAxOwotCi0gICAgaWYgKCpiZWVuX3RoZXJlID09
IDEpIHsKLSAgICAgICAgZ19hc3NlcnQoIW1haW5fcmVzb3VyY2UpOwotICAgICAgICBtYWluX3Jl
c291cmNlID0gZ19vYmplY3RfcmVmKHdlYl9yZXNvdXJjZSk7Ci0KLSAgICAgICAgZ19hc3NlcnRf
Y21wc3RyKHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaSh3ZWJfcmVzb3VyY2UpLCA9PSwgYmFz
ZV91cmkpOwotCi0gICAgICAgIC8qIFRoaXMgc2hvdWxkIGJlIGEgcmVkaXJlY3QsIHNvIHRoZSBy
ZXNwb25zZSBtdXN0IGJlIE5VTEwgKi8KLSAgICAgICAgZ19hc3NlcnQoIXJlc3BvbnNlKTsKLSAg
ICB9IGVsc2UgaWYgKCpiZWVuX3RoZXJlID09IDIpIHsKLSAgICAgICAgY2hhciogdXJpID0gZ19z
dHJkdXBfcHJpbnRmKCIlc2luZGV4Lmh0bWwiLCBiYXNlX3VyaSk7Ci0KLSAgICAgICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaSh3ZWJfcmVzb3VyY2UpLCA9PSwg
dXJpKTsKLQotICAgICAgICAvKiBDYW5jZWwgdGhlIHJlcXVlc3QuICovCi0gICAgICAgIHdlYmtp
dF9uZXR3b3JrX3JlcXVlc3Rfc2V0X3VyaShyZXF1ZXN0LCAiYWJvdXQ6YmxhbmsiKTsKLQotICAg
ICAgICBnX2ZyZWUodXJpKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIG5vdGlmeV9sb2FkX3N0
YXR1c19jYihXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgR1BhcmFtU3BlYyogcHNwZWMsIGdwb2lu
dGVyIGRhdGEpCi17Ci0gICAgaWYgKHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMod2Vi
X3ZpZXcpID09IFdFQktJVF9MT0FEX0ZJTklTSEVEKSB7Ci0gICAgICAgIGdib29sZWFuKiBiZWVu
X3RoZXJlID0gZGF0YTsKLSAgICAgICAgKmJlZW5fdGhlcmUgPSBUUlVFOwotCi0gICAgICAgIGdf
YXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSh3ZWJfdmlldyksID09LCAiYWJv
dXQ6YmxhbmsiKTsKLQotICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwotICAgIH0KLX0K
LQotc3RhdGljIHZvaWQgdGVzdF93ZWJfcmVzb3VyY2VfbG9hZGluZygpCi17Ci0gICAgV2ViS2l0
V2ViVmlldyogd2ViX3ZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygp
KTsKLSAgICBnaW50IGJlZW5fdG9fcmVzb3VyY2VfcmVxdWVzdF9zdGFydGluZyA9IDA7Ci0gICAg
Z2Jvb2xlYW4gYmVlbl90b19sb2FkX2ZpbmlzaGVkID0gRkFMU0U7Ci0gICAgV2ViS2l0V2ViRnJh
bWUqIHdlYl9mcmFtZTsKLSAgICBXZWJLaXRXZWJEYXRhU291cmNlKiBkYXRhX3NvdXJjZTsKLQot
ICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7Ci0KLSAgICBnX29iamVjdF9y
ZWZfc2luayh3ZWJfdmlldyk7Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KHdlYl92aWV3LCAicmVz
b3VyY2UtcmVxdWVzdC1zdGFydGluZyIsCi0gICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNL
KHJlc291cmNlX3JlcXVlc3Rfc3RhcnRpbmdfY2IpLAotICAgICAgICAgICAgICAgICAgICAgJmJl
ZW5fdG9fcmVzb3VyY2VfcmVxdWVzdF9zdGFydGluZyk7Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0
KHdlYl92aWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsCi0gICAgICAgICAgICAgICAgICAgICBH
X0NBTExCQUNLKG5vdGlmeV9sb2FkX3N0YXR1c19jYiksCi0gICAgICAgICAgICAgICAgICAgICAm
YmVlbl90b19sb2FkX2ZpbmlzaGVkKTsKLQotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh3
ZWJfdmlldywgYmFzZV91cmkpOwotCi0gICAgLyogV2Ugd29uJ3QgZ2V0IGZpbmlzaGVkIGltbWVk
aWF0ZWx5LCBiZWNhdXNlIG9mIHRoZSByZWRpcmVjdCAqLwotICAgIGdfbWFpbl9sb29wX3J1bihs
b29wKTsKLSAgICAKLSAgICB3ZWJfZnJhbWUgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJh
bWUod2ViX3ZpZXcpOwotICAgIGRhdGFfc291cmNlID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfZGF0
YV9zb3VyY2Uod2ViX2ZyYW1lKTsKLQotICAgIGdfYXNzZXJ0KG1haW5fcmVzb3VyY2UpOwotICAg
IGdfYXNzZXJ0KHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X21haW5fcmVzb3VyY2UoZGF0YV9z
b3VyY2UpID09IG1haW5fcmVzb3VyY2UpOwotICAgIGdfb2JqZWN0X3VucmVmKG1haW5fcmVzb3Vy
Y2UpOwotICAgIAotICAgIGdfYXNzZXJ0X2NtcGludChiZWVuX3RvX3Jlc291cmNlX3JlcXVlc3Rf
c3RhcnRpbmcsID09LCAyKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYmVlbl90b19sb2FkX2Zpbmlz
aGVkLCA9PSwgVFJVRSk7Ci0KLSAgICBnX29iamVjdF91bnJlZih3ZWJfdmlldyk7Ci0gICAgZ19t
YWluX2xvb3BfdW5yZWYobG9vcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlc291cmNlX3JlcXVlc3Rf
c3RhcnRpbmdfc3ViX2NiKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBXZWJLaXRXZWJGcmFtZSog
d2ViX2ZyYW1lLCBXZWJLaXRXZWJSZXNvdXJjZSogd2ViX3Jlc291cmNlLCBXZWJLaXROZXR3b3Jr
UmVxdWVzdCogcmVxdWVzdCwgV2ViS2l0TmV0d29ya1Jlc3BvbnNlKiByZXNwb25zZSwgZ3BvaW50
ZXIgZGF0YSkKLXsKLSAgICBpZiAoIW1haW5fcmVzb3VyY2UpCi0gICAgICAgIG1haW5fcmVzb3Vy
Y2UgPSBnX29iamVjdF9yZWYod2ViX3Jlc291cmNlKTsKLSAgICBlbHNlIGlmICghc3ViX3Jlc291
cmNlKQotICAgICAgc3ViX3Jlc291cmNlID0gZ19vYmplY3RfcmVmKHdlYl9yZXNvdXJjZSk7Ci19
Ci0KLXN0YXRpYyB2b2lkIG5vdGlmeV9sb2FkX3N0YXR1c19zdWJfY2IoV2ViS2l0V2ViVmlldyog
d2ViX3ZpZXcsIEdQYXJhbVNwZWMqIHBzcGVjLCBncG9pbnRlciBkYXRhKQotewotICAgIGlmICh3
ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYl92aWV3KSA9PSBXRUJLSVRfTE9BRF9G
SU5JU0hFRCkKLSAgICAgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKLX0KLQotc3RhdGljIGdi
b29sZWFuIGlkbGVfcXVpdF9sb29wX2NiKGdwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19tYWluX2xv
b3BfcXVpdChsb29wKTsKLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rf
d2ViX3Jlc291cmNlX3N1Yl9yZXNvdXJjZV9sb2FkaW5nKCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3
KiB3ZWJfdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAg
IFdlYktpdFdlYkZyYW1lKiB3ZWJfZnJhbWU7Ci0gICAgV2ViS2l0V2ViRGF0YVNvdXJjZSogZGF0
YV9zb3VyY2U7Ci0gICAgR0xpc3QqIHN1Yl9yZXNvdXJjZXM7Ci0gICAgY2hhciogdXJpID0gZ19z
dHJkdXBfcHJpbnRmKCIlc21haW4uaHRtbCIsIGJhc2VfdXJpKTsKLQotICAgIG1haW5fcmVzb3Vy
Y2UgPSBOVUxMOwotICAgIAotICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7
Ci0KLSAgICBnX29iamVjdF9yZWZfc2luayh3ZWJfdmlldyk7Ci0KLSAgICBnX3NpZ25hbF9jb25u
ZWN0KHdlYl92aWV3LCAicmVzb3VyY2UtcmVxdWVzdC1zdGFydGluZyIsCi0gICAgICAgICAgICAg
ICAgICAgICBHX0NBTExCQUNLKHJlc291cmNlX3JlcXVlc3Rfc3RhcnRpbmdfc3ViX2NiKSwKLSAg
ICAgICAgICAgICAgICAgICAgIE5VTEwpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh3ZWJfdmll
dywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLAotICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFD
Syhub3RpZnlfbG9hZF9zdGF0dXNfc3ViX2NiKSwKLSAgICAgICAgICAgICAgICAgICAgIE5VTEwp
OwotCi0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHdlYl92aWV3LCB1cmkpOwotCi0gICAg
Z19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAgLyogVGhlIG1haW4gcmVzb3VyY2Ugc2hvdWxk
IGJlIGxvYWRlZDsgbm93IGxldCdzIHdhaXQgZm9yIHRoZSBzdWItcmVzb3VyY2UgdG8gbG9hZCAq
LwotICAgIGdfaWRsZV9hZGQoaWRsZV9xdWl0X2xvb3BfY2IsIE5VTEwpOwotICAgIGdfbWFpbl9s
b29wX3J1bihsb29wKTsKLSAgICAKLSAgICBnX2Fzc2VydChtYWluX3Jlc291cmNlICYmIHN1Yl9y
ZXNvdXJjZSk7Ci0gICAgZ19hc3NlcnQobWFpbl9yZXNvdXJjZSAhPSBzdWJfcmVzb3VyY2UpOwot
Ci0gICAgd2ViX2ZyYW1lID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKHdlYl92aWV3
KTsKLSAgICBkYXRhX3NvdXJjZSA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X2RhdGFfc291cmNlKHdl
Yl9mcmFtZSk7Ci0KLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2RhdGFfc291cmNlX2dldF9tYWlu
X3Jlc291cmNlKGRhdGFfc291cmNlKSA9PSBtYWluX3Jlc291cmNlKTsKLSAgICBnX29iamVjdF91
bnJlZihtYWluX3Jlc291cmNlKTsKLQotICAgIHN1Yl9yZXNvdXJjZXMgPSB3ZWJraXRfd2ViX2Rh
dGFfc291cmNlX2dldF9zdWJyZXNvdXJjZXMoZGF0YV9zb3VyY2UpOwotICAgIC8vIEV4cGVjdGVk
IHJlc291cmNlczogamF2YXNjcmlwdHMuanMsIGZhdmljb24uaWNvCi0gICAgZ19hc3NlcnQoc3Vi
X3Jlc291cmNlcyk7Ci0gICAgZ19hc3NlcnQoc3ViX3Jlc291cmNlcy0+bmV4dCk7Ci0gICAgZ19h
c3NlcnQoIXN1Yl9yZXNvdXJjZXMtPm5leHQtPm5leHQpOwotCi0gICAgLy8gVGVzdCB0aGF0IHRo
ZSBvYmplY3Qgd2UgZ290IGZyb20gdGhlIGRhdGEgc291cmNlIGlzIHRoZSBzYW1lCi0gICAgLy8g
dGhhdCB3ZW50IHRocm91Z2ggcmVzb3VyY2UtcmVxdWVzdC1zdGFydGluZy4gTm90ZSB0aGF0IHRo
ZSBvcmRlciBpcwotICAgIC8vIG5vdCBpbXBvcnRhbnQgKGFuZCBub3QgZ3VhcmFudGVlZCBzaW5j
ZSB0aGUgcmVzb3VyY2VzIGFyZSBzdG9yZWQgaW4gYQotICAgIC8vIGhhc2h0YWJsZSkuCi0gICAg
Z19hc3NlcnQoV0VCS0lUX1dFQl9SRVNPVVJDRShzdWJfcmVzb3VyY2VzLT5kYXRhKSA9PSBzdWJf
cmVzb3VyY2UKLSAgICAgICAgICAgICB8fCBXRUJLSVRfV0VCX1JFU09VUkNFKHN1Yl9yZXNvdXJj
ZXMtPm5leHQtPmRhdGEpID09IHN1Yl9yZXNvdXJjZSk7Ci0KLSAgICBnX29iamVjdF91bnJlZih3
ZWJfdmlldyk7Ci0gICAgZ19tYWluX2xvb3BfdW5yZWYobG9vcCk7Ci19Ci0KLWludCBtYWluKGlu
dCBhcmdjLCBjaGFyKiogYXJndikKLXsKLSAgICBTb3VwU2VydmVyKiBzZXJ2ZXI7Ci0gICAgU291
cFVSSSogc291cF91cmk7Ci0KLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7
Ci0KLSAgICBzZXJ2ZXIgPSBzb3VwX3NlcnZlcl9uZXcoU09VUF9TRVJWRVJfUE9SVCwgMCwgTlVM
TCk7Ci0gICAgc291cF9zZXJ2ZXJfcnVuX2FzeW5jKHNlcnZlcik7Ci0KLSAgICBzb3VwX3NlcnZl
cl9hZGRfaGFuZGxlcihzZXJ2ZXIsIE5VTEwsIHNlcnZlcl9jYWxsYmFjaywgTlVMTCwgTlVMTCk7
Ci0KLSAgICBzb3VwX3VyaSA9IHNvdXBfdXJpX25ldygiaHR0cDovLzEyNy4wLjAuMS8iKTsKLSAg
ICBzb3VwX3VyaV9zZXRfcG9ydChzb3VwX3VyaSwgc291cF9zZXJ2ZXJfZ2V0X3BvcnQoc2VydmVy
KSk7Ci0KLSAgICBiYXNlX3VyaSA9IHNvdXBfdXJpX3RvX3N0cmluZyhzb3VwX3VyaSwgRkFMU0Up
OwotICAgIHNvdXBfdXJpX2ZyZWUoc291cF91cmkpOwotCi0gICAgZ190ZXN0X2J1Z19iYXNlKCJo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L3dlYnJl
c291cmNlL2dldF91cmwiLAotICAgICAgICAgICAgICAgV2ViUmVzb3VyY2VGaXh0dXJlLCAwLCB3
ZWJfcmVzb3VyY2VfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X3dl
Yl9yZXNvdXJjZV9nZXRfdXJsLCB3ZWJfcmVzb3VyY2VfZml4dHVyZV90ZWFyZG93bik7Ci0gICAg
Z190ZXN0X2FkZCgiL3dlYmtpdC93ZWJyZXNvdXJjZS9nZXRfbWltZV90eXBlIiwKLSAgICAgICAg
ICAgICAgIFdlYlJlc291cmNlRml4dHVyZSwgMCwgd2ViX3Jlc291cmNlX2ZpeHR1cmVfc2V0dXAs
Ci0gICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X21pbWVfdHlwZSwg
d2ViX3Jlc291cmNlX2ZpeHR1cmVfdGVhcmRvd24pOwotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQv
d2VicmVzb3VyY2UvZ2V0X3RleHRfZW5jb2RpbmdfbmFtZSIsCi0gICAgICAgICAgICAgICBXZWJS
ZXNvdXJjZUZpeHR1cmUsIDAsIHdlYl9yZXNvdXJjZV9maXh0dXJlX3NldHVwLAotICAgICAgICAg
ICAgICAgdGVzdF93ZWJraXRfd2ViX3Jlc291cmNlX2dldF9lbmNvZGluZywgd2ViX3Jlc291cmNl
X2ZpeHR1cmVfdGVhcmRvd24pOwotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvd2VicmVzb3VyY2Uv
Z2V0X2ZyYW1lX25hbWUiLAotICAgICAgICAgICAgICAgV2ViUmVzb3VyY2VGaXh0dXJlLCAwLCB3
ZWJfcmVzb3VyY2VfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X3dl
Yl9yZXNvdXJjZV9nZXRfZnJhbWVfbmFtZSwgd2ViX3Jlc291cmNlX2ZpeHR1cmVfdGVhcmRvd24p
OwotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvd2VicmVzb3VyY2UvZ2V0X2RhdGEiLAotICAgICAg
ICAgICAgICAgV2ViUmVzb3VyY2VGaXh0dXJlLCAwLCB3ZWJfcmVzb3VyY2VfZml4dHVyZV9zZXR1
cCwKLSAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZGF0YSwgd2Vi
X3Jlc291cmNlX2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Vi
a2l0L3dlYnJlc291cmNlL2xvYWRpbmciLCB0ZXN0X3dlYl9yZXNvdXJjZV9sb2FkaW5nKTsKLSAg
ICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2VicmVzb3VyY2Uvc3ViX3Jlc291cmNlX2xvYWRp
bmciLCB0ZXN0X3dlYl9yZXNvdXJjZV9zdWJfcmVzb3VyY2VfbG9hZGluZyk7Ci0KLSAgICByZXR1
cm4gZ190ZXN0X3J1biAoKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3Rz
L3Rlc3R3ZWJzZXR0aW5ncy5jIGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYnNldHRp
bmdzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1NDg5Y2RkZDk5MzQ1MTg4MmE2
ODk3NDA5ODEyZDg0MjIxMWE3MzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYnNldHRpbmdzLmMKKysr
IC9kZXYvbnVsbApAQCAtMSwxNTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBK
YW4gTWljaGFlbCBBbG9uem8KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgPGdsaWIuaD4K
LSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgotCi0vKiBQ
cml2YXRlIEFQSSAqLwotY2hhciogd2Via2l0V2ViU2V0dGluZ3NVc2VyQWdlbnRGb3JVUkkoV2Vi
S2l0V2ViU2V0dGluZ3MgKnNldHRpbmdzLCBjb25zdCBjaGFyICp1cmkpOwotCi1zdGF0aWMgdm9p
ZCB0ZXN0X3dlYmtpdF93ZWJfc2V0dGluZ3NfY29weSh2b2lkKQotewotICAgIFdlYktpdFdlYlNl
dHRpbmdzICpzZXR0aW5ncyA9IHdlYmtpdF93ZWJfc2V0dGluZ3NfbmV3KCk7Ci0KLSAgICAvLyBT
ZXQgc29tZSBub24tZGVmYXVsdCBzZXR0aW5ncyB0byB2ZXJpZnkgdGhhdCBzZXR0aW5ncyBhcmUg
cHJvcGVybHkgY29waWVkLgotICAgIGdfb2JqZWN0X3NldChzZXR0aW5ncywKLSAgICAgICAgICAg
ICAgICAgImVuYWJsZS13ZWJnbCIsIFRSVUUsCi0gICAgICAgICAgICAgICAgICJlbmFibGUtZnVs
bHNjcmVlbiIsIFRSVUUsCi0gICAgICAgICAgICAgICAgICJhdXRvLWxvYWQtaW1hZ2VzIiwgRkFM
U0UsCi0gICAgICAgICAgICAgICAgICJkZWZhdWx0LWVuY29kaW5nIiwgInV0Zi04IiwKLSAgICAg
ICAgICAgICAgICAgImVuYWJsZS1tZWRpYXNvdXJjZSIsIFRSVUUsCi0gICAgICAgICAgICAgICAg
IE5VTEwpOwotCi0gICAgV2ViS2l0V2ViU2V0dGluZ3MgKmNvcHkgPSB3ZWJraXRfd2ViX3NldHRp
bmdzX2NvcHkoc2V0dGluZ3MpOwotCi0gICAgZ2Jvb2xlYW4gZW5hYmxlV2ViR0wgPSBGQUxTRTsK
LSAgICBnYm9vbGVhbiBlbmFibGVGdWxsc2NyZWVuID0gRkFMU0U7Ci0gICAgZ2Jvb2xlYW4gYXV0
b0xvYWRJbWFnZXMgPSBGQUxTRTsKLSAgICBnYm9vbGVhbiBlbmFibGVNZWRpYVNvdXJjZSA9IEZB
TFNFOwotICAgIGNoYXIgKmRlZmF1bHRFbmNvZGluZyA9IDA7Ci0gICAgZ19vYmplY3RfZ2V0KGNv
cHksCi0gICAgICAgICAgICAgICAgICJlbmFibGUtZnVsbHNjcmVlbiIsICZlbmFibGVGdWxsc2Ny
ZWVuLAotICAgICAgICAgICAgICAgICAiZW5hYmxlLXdlYmdsIiwgJmVuYWJsZVdlYkdMLAotICAg
ICAgICAgICAgICAgICAiYXV0by1sb2FkLWltYWdlcyIsICZhdXRvTG9hZEltYWdlcywKLSAgICAg
ICAgICAgICAgICAgImRlZmF1bHQtZW5jb2RpbmciLCAmZGVmYXVsdEVuY29kaW5nLAotICAgICAg
ICAgICAgICAgICAiZW5hYmxlLW1lZGlhc291cmNlIiwgJmVuYWJsZU1lZGlhU291cmNlLAotICAg
ICAgICAgICAgICAgICBOVUxMKTsKLQotICAgIGdfYXNzZXJ0KGVuYWJsZVdlYkdMKTsKLSAgICBn
X2Fzc2VydChlbmFibGVGdWxsc2NyZWVuKTsKLSAgICBnX2Fzc2VydCghYXV0b0xvYWRJbWFnZXMp
OwotICAgIGdfYXNzZXJ0X2NtcHN0cihkZWZhdWx0RW5jb2RpbmcsID09LCAidXRmLTgiKTsKLSAg
ICBnX2Fzc2VydChlbmFibGVNZWRpYVNvdXJjZSk7Ci0gICAgZ19mcmVlKGRlZmF1bHRFbmNvZGlu
Zyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfbm9uX3F1aXJreV91c2VyX2FnZW50cyhXZWJLaXRX
ZWJTZXR0aW5ncyAqc2V0dGluZ3MsIGNvbnN0IGNoYXIgKmRlZmF1bHRVc2VyQWdlbnQpCi17Ci0g
ICAgY2hhciAqdXNlckFnZW50ID0gMDsKLQotICAgIC8vIHRlc3QgYSBjdXN0b20gVUEgc3RyaW5n
Ci0gICAgdXNlckFnZW50ID0gMDsKLSAgICBnX29iamVjdF9zZXQoc2V0dGluZ3MsICJ1c2VyLWFn
ZW50IiwgInRlc3R3ZWJzZXR0aW5ncy8wLjEiLCBOVUxMKTsKLSAgICBnX29iamVjdF9nZXQoc2V0
dGluZ3MsInVzZXItYWdlbnQiLCAmdXNlckFnZW50LCBOVUxMKTsKLSAgICBnX2Fzc2VydF9jbXBz
dHIodXNlckFnZW50LCA9PSwgInRlc3R3ZWJzZXR0aW5ncy8wLjEiKTsKLSAgICBnX2ZyZWUodXNl
ckFnZW50KTsKLQotICAgIC8vIHNldHRpbmcgaXQgdG8gTlVMTCBvciBhbiBlbXB0eSB2YWx1ZSBz
aG91bGQgZ2l2ZSB1cyB0aGUgZGVmYXVsdCBVQSBzdHJpbmcKLSAgICB1c2VyQWdlbnQgPSAwOwot
ICAgIGdfb2JqZWN0X3NldChzZXR0aW5ncywgInVzZXItYWdlbnQiLCAwLCBOVUxMKTsKLSAgICBn
X29iamVjdF9nZXQoc2V0dGluZ3MsInVzZXItYWdlbnQiLCAmdXNlckFnZW50LCBOVUxMKTsKLSAg
ICBnX2Fzc2VydF9jbXBzdHIodXNlckFnZW50LCA9PSwgZGVmYXVsdFVzZXJBZ2VudCk7Ci0gICAg
Z19mcmVlKHVzZXJBZ2VudCk7Ci0KLSAgICB1c2VyQWdlbnQgPSAwOwotICAgIGdfb2JqZWN0X3Nl
dChzZXR0aW5ncywgInVzZXItYWdlbnQiLCAiIiwgTlVMTCk7Ci0gICAgZ19vYmplY3RfZ2V0KHNl
dHRpbmdzLCJ1c2VyLWFnZW50IiwgJnVzZXJBZ2VudCwgTlVMTCk7Ci0gICAgZ19hc3NlcnRfY21w
c3RyKHVzZXJBZ2VudCwgPT0sIGRlZmF1bHRVc2VyQWdlbnQpOwotICAgIGdfZnJlZSh1c2VyQWdl
bnQpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfc2V0dGluZ3NfdXNlcl9hZ2Vu
dCh2b2lkKQotewotICAgIFdlYktpdFdlYlNldHRpbmdzICpzZXR0aW5nczsKLSAgICBHdGtXaWRn
ZXQgKndlYlZpZXc7Ci0gICAgY2hhciAqZGVmYXVsdFVzZXJBZ2VudDsKLSAgICBjaGFyICp1c2Vy
QWdlbnQgPSAwOwotICAgIGdfdGVzdF9idWcoIjE3Mzc1Iik7Ci0KLSAgICB3ZWJWaWV3ID0gd2Vi
a2l0X3dlYl92aWV3X25ldygpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOwotCi0g
ICAgc2V0dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKFdFQktJVF9XRUJfVklF
Vyh3ZWJWaWV3KSk7Ci0gICAgZGVmYXVsdFVzZXJBZ2VudCA9IGdfc3RyZHVwKHdlYmtpdF93ZWJf
c2V0dGluZ3NfZ2V0X3VzZXJfYWdlbnQoc2V0dGluZ3MpKTsKLQotICAgIHRlc3Rfbm9uX3F1aXJr
eV91c2VyX2FnZW50cyhzZXR0aW5ncywgZGVmYXVsdFVzZXJBZ2VudCk7Ci0KLSAgICAvKiBUZXN0
IHF1aXJreSBnb29nbGUgZG9tYWlucyAqLwotICAgIGdfb2JqZWN0X3NldChzZXR0aW5ncywgInVz
ZXItYWdlbnQiLCAidGVzdHdlYnNldHRpbmdzLzAuMSIsIE5VTEwpOwotCi0gICAgdXNlckFnZW50
ID0gd2Via2l0V2ViU2V0dGluZ3NVc2VyQWdlbnRGb3JVUkkoc2V0dGluZ3MsICJodHRwOi8vd3d3
Lmdvb2dsZS5jb20vIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHVzZXJBZ2VudCwgPT0sICJ0ZXN0
d2Vic2V0dGluZ3MvMC4xIik7Ci0gICAgZ19mcmVlKHVzZXJBZ2VudCk7Ci0KLSAgICB1c2VyQWdl
bnQgPSB3ZWJraXRXZWJTZXR0aW5nc1VzZXJBZ2VudEZvclVSSShzZXR0aW5ncywgImh0dHA6Ly9n
bWFpbC5jb20vIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHVzZXJBZ2VudCwgPT0sICJ0ZXN0d2Vi
c2V0dGluZ3MvMC4xIik7Ci0gICAgZ19mcmVlKHVzZXJBZ2VudCk7Ci0KLSAgICB1c2VyQWdlbnQg
PSB3ZWJraXRXZWJTZXR0aW5nc1VzZXJBZ2VudEZvclVSSShzZXR0aW5ncywgImh0dHA6Ly93d3cu
Z29vZ2xlLmNvbS5ici8iKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodXNlckFnZW50LCA9PSwgInRl
c3R3ZWJzZXR0aW5ncy8wLjEiKTsKLSAgICBnX2ZyZWUodXNlckFnZW50KTsKLQotICAgIHVzZXJB
Z2VudCA9IHdlYmtpdFdlYlNldHRpbmdzVXNlckFnZW50Rm9yVVJJKHNldHRpbmdzLCAiaHR0cDov
L2NhbGVuZGFyLmdvb2dsZS5jb20vIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHVzZXJBZ2VudCwg
PT0sICJ0ZXN0d2Vic2V0dGluZ3MvMC4xIik7Ci0gICAgZ19mcmVlKHVzZXJBZ2VudCk7Ci0KLSAg
ICAvKiBOb3cgZW5hYmxlIHF1aXJrcyBoYW5kbGluZyAqLwotICAgIGdfb2JqZWN0X3NldChzZXR0
aW5ncywgImVuYWJsZS1zaXRlLXNwZWNpZmljLXF1aXJrcyIsIFRSVUUsIE5VTEwpOwotCi0gICAg
dGVzdF9ub25fcXVpcmt5X3VzZXJfYWdlbnRzKHNldHRpbmdzLCBkZWZhdWx0VXNlckFnZW50KTsK
LQotICAgIGdfb2JqZWN0X3NldChzZXR0aW5ncywgInVzZXItYWdlbnQiLCAidGVzdHdlYnNldHRp
bmdzLzAuMSIsIE5VTEwpOwotCi0gICAgdXNlckFnZW50ID0gd2Via2l0V2ViU2V0dGluZ3NVc2Vy
QWdlbnRGb3JVUkkoc2V0dGluZ3MsICJodHRwOi8vd3d3Lmdvb2dsZS5jb20vIik7Ci0gICAgZ19h
c3NlcnRfY21wc3RyKHVzZXJBZ2VudCwgPT0sIGRlZmF1bHRVc2VyQWdlbnQpOwotICAgIGdfZnJl
ZSh1c2VyQWdlbnQpOwotCi0gICAgdXNlckFnZW50ID0gd2Via2l0V2ViU2V0dGluZ3NVc2VyQWdl
bnRGb3JVUkkoc2V0dGluZ3MsICJodHRwOi8vZ21haWwuY29tLyIpOwotICAgIGdfYXNzZXJ0X2Nt
cHN0cih1c2VyQWdlbnQsID09LCBkZWZhdWx0VXNlckFnZW50KTsKLSAgICBnX2ZyZWUodXNlckFn
ZW50KTsKLQotICAgIHVzZXJBZ2VudCA9IHdlYmtpdFdlYlNldHRpbmdzVXNlckFnZW50Rm9yVVJJ
KHNldHRpbmdzLCAiaHR0cDovL3d3dy5nb29nbGUuY29tLmJyLyIpOwotICAgIGdfYXNzZXJ0X2Nt
cHN0cih1c2VyQWdlbnQsID09LCBkZWZhdWx0VXNlckFnZW50KTsKLSAgICBnX2ZyZWUodXNlckFn
ZW50KTsKLQotICAgIHVzZXJBZ2VudCA9IHdlYmtpdFdlYlNldHRpbmdzVXNlckFnZW50Rm9yVVJJ
KHNldHRpbmdzLCAiaHR0cDovL3d3dy5nb29nbGUudWsubm90LmNvbS5ici8iKTsKLSAgICBnX2Fz
c2VydF9jbXBzdHIodXNlckFnZW50LCA9PSwgInRlc3R3ZWJzZXR0aW5ncy8wLjEiKTsKLSAgICBn
X2ZyZWUodXNlckFnZW50KTsKLQotICAgIGdfZnJlZShkZWZhdWx0VXNlckFnZW50KTsKLSAgICBn
X29iamVjdF91bnJlZih3ZWJWaWV3KTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiph
cmd2KQotewotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLQotICAgIGdf
dGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0gICAgZ190ZXN0X2Fk
ZF9mdW5jKCIvd2Via2l0L3dlYnNldHRpbmdzL3VzZXJfYWdlbnQiLCB0ZXN0X3dlYmtpdF93ZWJf
c2V0dGluZ3NfdXNlcl9hZ2VudCk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnNl
dHRpbmdzL2NvcHkiLCB0ZXN0X3dlYmtpdF93ZWJfc2V0dGluZ3NfY29weSk7Ci0gICAgcmV0dXJu
IGdfdGVzdF9ydW4gKCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90
ZXN0d2Vidmlldy5jIGIvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYnZpZXcuYwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTcwMzcyY2RjYzRjY2NiZjM5NjFlNjQxM2RkY2M5
ZDI1NmUwN2I3Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2Vidmlldy5jCisrKyAvZGV2L251bGwKQEAg
LTEsNzQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0
ZXIgRnJleXRoZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBDb2xsYWJvcmEgTHRkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJ0ZXN0X3V0aWxzLmgiCi0KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHVu
aXN0ZC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1
ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0jaW5jbHVkZSA8Z2RrL2dkay5oPgotI2luY2x1ZGUgPGdkay9n
ZGtrZXlzeW1zLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHdlYmtpdC93ZWJr
aXQuaD4KLQotR01haW5Mb29wKiBsb29wOwotU291cFNlc3Npb24gKnNlc3Npb247Ci1jaGFyKiBi
YXNlX3VyaTsKLQotLyogRm9yIHJlYWwgcmVxdWVzdCB0ZXN0aW5nICovCi1zdGF0aWMgdm9pZAot
c2VydmVyX2NhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1zZywKLSAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSogcXVlcnksCi0gICAg
ICAgICAgICAgICAgIFNvdXBDbGllbnRDb250ZXh0KiBjb250ZXh0LCBncG9pbnRlciBkYXRhKQot
ewotICAgIGlmIChtc2ctPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKLSAgICAgICAgc291
cF9tZXNzYWdlX3NldF9zdGF0dXMobXNnLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobXNn
LCBTT1VQX1NUQVRVU19PSyk7Ci0KLSAgICBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9mYXZpY29u
LmljbyIpKSB7Ci0gICAgICAgIGNoYXIqIGNvbnRlbnRzOwotICAgICAgICBnc2l6ZSBsZW5ndGg7
Ci0gICAgICAgIEdFcnJvciogZXJyb3IgPSBOVUxMOwotCi0gICAgICAgIGdfZmlsZV9nZXRfY29u
dGVudHMoImJsYW5rLmljbyIsICZjb250ZW50cywgJmxlbmd0aCwgJmVycm9yKTsKLSAgICAgICAg
Z19hc3NlcnQoIWVycm9yKTsKLQotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobXNn
LT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBjb250ZW50cywgbGVuZ3RoKTsKLSAg
ICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvYmlnZGl2Lmh0bWwiKSkgewotICAgICAg
ICBjaGFyKiBjb250ZW50cyA9IGdfc3RyZHVwKCI8aHRtbD48Ym9keT48YSBpZD1cImxpbmtcIiBo
cmVmPVwiaHR0cDovL2FiYy5kZWZcIj50ZXN0PC9hPjxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kLWNv
bG9yOiBncmVlbjsgaGVpZ2h0OiAxMjAwcHg7XCI+PC9kaXY+PC9ib2R5PjwvaHRtbD4iKTsKLSAg
ICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1zZy0+cmVzcG9uc2VfYm9keSwgU09VUF9N
RU1PUllfVEFLRSwgY29udGVudHMsIHN0cmxlbihjb250ZW50cykpOwotICAgIH0gZWxzZSBpZiAo
Z19zdHJfZXF1YWwocGF0aCwgIi9pZnJhbWUuaHRtbCIpKSB7Ci0gICAgICAgIGNoYXIqIGNvbnRl
bnRzID0gZ19zdHJkdXAoIjxodG1sPjxib2R5IGlkPVwic29tZS1jb250ZW50XCI+PGRpdiBzdHls
ZT1cImJhY2tncm91bmQtY29sb3I6IGdyZWVuOyBoZWlnaHQ6IDUwcHg7XCI+PC9kaXY+PGlmcmFt
ZSBzcmM9XCJiaWdkaXYuaHRtbFwiPjwvaWZyYW1lPjwvYm9keT48L2h0bWw+Iik7Ci0gICAgICAg
IHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtc2ctPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZ
X1RBS0UsIGNvbnRlbnRzLCBzdHJsZW4oY29udGVudHMpKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBjaGFyKiBjb250ZW50cyA9IGdfc3RyZHVwKCI8aHRtbD48Ym9keT50ZXN0PC9ib2R5PjwvaHRt
bD4iKTsKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1zZy0+cmVzcG9uc2VfYm9k
eSwgU09VUF9NRU1PUllfVEFLRSwgY29udGVudHMsIHN0cmxlbihjb250ZW50cykpOwotICAgIH0K
LQotICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1zZy0+cmVzcG9uc2VfYm9keSk7Ci19
Ci0KLXN0YXRpYyB2b2lkIGlkbGVfcXVpdF9sb29wX2NiKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3
LCBHUGFyYW1TcGVjKiBwc3BlYywgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBpZiAod2Via2l0X3dl
Yl92aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJfdmlldykgPT0gV0VCS0lUX0xPQURfRklOSVNIRUQg
fHwKLSAgICAgICAgd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJfdmlldykgPT0g
V0VCS0lUX0xPQURfRkFJTEVEKQotICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwotfQot
Ci1zdGF0aWMgZ2Jvb2xlYW4gdGltZW91dF9jYihncG9pbnRlciBkYXRhKQotewotICAgIGdfZXJy
b3IoIkRpZG4ndCBnZXQgaWNvbi11cmkgYmVmb3JlIHRpbWluZyBvdXQuIik7Ci0gICAgcmV0dXJu
IEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCBpY29uX3VyaV9jaGFuZ2VkX2NiKFdlYktpdFdlYlZp
ZXcqIHdlYl92aWV3LCBHUGFyYW1TcGVjKiBwc3BlYywgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBj
aGFyKiBleHBlY3RlZF91cmk7Ci0KLSAgICBnX2Fzc2VydF9jbXBzdHIoZ19wYXJhbV9zcGVjX2dl
dF9uYW1lKHBzcGVjKSwgPT0sICJpY29uLXVyaSIpOwotCi0gICAgZXhwZWN0ZWRfdXJpID0gZ19z
dHJkdXBfcHJpbnRmKCIlc2Zhdmljb24uaWNvIiwgYmFzZV91cmkpOwotICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fdXJpKHdlYl92aWV3KSwgPT0sIGV4cGVjdGVk
X3VyaSk7Ci0gICAgZ19mcmVlKGV4cGVjdGVkX3VyaSk7Ci0KLSAgICBnX21haW5fbG9vcF9xdWl0
KGxvb3ApOwotfQotCi1zdGF0aWMgdm9pZCBpY29uX2xvYWRlZF9jYihXZWJLaXRXZWJWaWV3KiB3
ZWJfdmlldywgY2hhciogaWNvbl91cmksIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgZ2Jvb2xlYW4q
IGJlZW5faGVyZSA9IChnYm9vbGVhbiopZGF0YTsKLSAgICBjaGFyKiBleHBlY3RlZF91cmkgPSBn
X3N0cmR1cF9wcmludGYoIiVzZmF2aWNvbi5pY28iLCBiYXNlX3VyaSk7Ci0gICAgZ19hc3NlcnRf
Y21wc3RyKGljb25fdXJpLCA9PSwgZXhwZWN0ZWRfdXJpKTsKLSAgICBnX2ZyZWUoZXhwZWN0ZWRf
dXJpKTsKLQotICAgIGdfYXNzZXJ0X2NtcHN0cihpY29uX3VyaSwgPT0sIHdlYmtpdF93ZWJfdmll
d19nZXRfaWNvbl91cmkod2ViX3ZpZXcpKTsKLQotICAgICpiZWVuX2hlcmUgPSBUUlVFOwotfQot
Ci1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfdmlld19pY29uX3VyaSgpCi17Ci0gICAgZ2Jv
b2xlYW4gYmVlbl90b19pY29uX2xvYWRlZCA9IEZBTFNFOwotICAgIFdlYktpdFdlYlZpZXcqIHZp
ZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBnX29iamVj
dF9yZWZfc2luayhHX09CSkVDVCh2aWV3KSk7Ci0KLSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3
KE5VTEwsIFRSVUUpOwotCi0gICAgZ19vYmplY3RfY29ubmVjdChHX09CSkVDVCh2aWV3KSwKLSAg
ICAgICAgICAgICAgICAgICAgICJzaWduYWw6Om5vdGlmeTo6aWNvbi11cmkiLCBpY29uX3VyaV9j
aGFuZ2VkX2NiLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgInNpZ25hbDo6aWNvbi1sb2Fk
ZWQiLCBpY29uX2xvYWRlZF9jYiwgJmJlZW5fdG9faWNvbl9sb2FkZWQsCi0gICAgICAgICAgICAg
ICAgICAgICBOVUxMKTsKLQotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh2aWV3LCBiYXNl
X3VyaSk7Ci0KLSAgICBndWludCB0aW1lb3V0X2lkID0gZ190aW1lb3V0X2FkZCg1MDAsIHRpbWVv
dXRfY2IsIDApOwotCi0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAgZ19zb3VyY2Vf
cmVtb3ZlKHRpbWVvdXRfaWQpOwotCi0gICAgZ19hc3NlcnQoYmVlbl90b19pY29uX2xvYWRlZCk7
Ci0KLSAgICBnX29iamVjdF91bnJlZih2aWV3KTsKLX0KLQotc3RhdGljIGdib29sZWFuIG1hcF9l
dmVudF9jYihHdGtXaWRnZXQgKndpZGdldCwgR2RrRXZlbnQqIGV2ZW50LCBncG9pbnRlciBkYXRh
KQotewotICAgIEdNYWluTG9vcCogbG9vcCA9IChHTWFpbkxvb3AqKWRhdGE7Ci0gICAgZ19tYWlu
X2xvb3BfcXVpdChsb29wKTsKLQotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGdib29s
ZWFuIHF1aXRfYWZ0ZXJfc2hvcnRfZGVsYXlfY2IoZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBnX21h
aW5fbG9vcF9xdWl0KChHTWFpbkxvb3AqKWRhdGEpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQot
c3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3ZpZXdfZ3JhYl9mb2N1cygpCi17Ci0gICAgY2hh
ciogdXJpID0gZ19zdHJjb25jYXQoYmFzZV91cmksICJpZnJhbWUuaHRtbCIsIE5VTEwpOwotICAg
IEd0a1dpZGdldCogd2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19QT1BVUCk7Ci0g
ICAgR3RrV2lkZ2V0KiBzY3JvbGxlZF93aW5kb3cgPSBndGtfc2Nyb2xsZWRfd2luZG93X25ldyhO
VUxMLCBOVUxMKTsKLSAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdl
YmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgR3RrQWRqdXN0bWVudCogYWRqdXN0bWVudDsKLQot
ICAgIGd0a193aW5kb3dfc2V0X2RlZmF1bHRfc2l6ZShHVEtfV0lORE9XKHdpbmRvdyksIDQwMCwg
MjAwKTsKLQotICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgc2Ny
b2xsZWRfd2luZG93KTsKLSAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHNjcm9s
bGVkX3dpbmRvdyksIEdUS19XSURHRVQodmlldykpOwotCi0gICAgZ3RrX3Njcm9sbGVkX3dpbmRv
d19zZXRfcG9saWN5KEdUS19TQ1JPTExFRF9XSU5ET1coc2Nyb2xsZWRfd2luZG93KSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1BPTElDWV9BVVRPTUFUSUMsIEdUS19Q
T0xJQ1lfQVVUT01BVElDKTsKLQotICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJV
RSk7Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KHZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwg
R19DQUxMQkFDSyhpZGxlX3F1aXRfbG9vcF9jYiksIE5VTEwpOwotCi0gICAgLyogV2FpdCBmb3Ig
d2luZG93IHRvIHNob3cgdXAgKi8KLSAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7Ci0g
ICAgZ19zaWduYWxfY29ubmVjdCh3aW5kb3csICJtYXAtZXZlbnQiLAotICAgICAgICAgICAgICAg
ICAgICAgR19DQUxMQkFDSyhtYXBfZXZlbnRfY2IpLCBsb29wKTsKLSAgICBnX21haW5fbG9vcF9y
dW4obG9vcCk7Ci0KLSAgICAvKiBMb2FkIGEgcGFnZSB3aXRoIGEgYmlnIGRpdiB0aGF0IHdpbGwg
Y2F1c2Ugc2Nyb2xsYmFycyB0byBhcHBlYXIgKi8KLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91
cmkodmlldywgdXJpKTsKLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICBhZGp1c3Rt
ZW50ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19nZXRfdmFkanVzdG1lbnQoR1RLX1NDUk9MTEVEX1dJ
TkRPVyhzY3JvbGxlZF93aW5kb3cpKTsKLSAgICBnX2Fzc2VydF9jbXBmbG9hdChndGtfYWRqdXN0
bWVudF9nZXRfdmFsdWUoYWRqdXN0bWVudCksID09LCAwLjApOwotCi0gICAgLyogU2luY2Ugd2Vi
a2l0X3dlYl92aWV3X2V4ZWN1dGVfc2NyaXB0IGRvZXMgbm90IHJldHVybiBhIHZhbHVlLAotICAg
ICAgIGl0IGlzIGltcG9zc2libGUgdG8ga25vdyBpZiBhbiBpbm5lciBkb2N1bWVudCBoYXMgZm9j
dXMgYWZ0ZXIKLSAgICAgICBhIG5vZGUgb2YgaXQgd2FzIGZvY3VzZWQgdmlhIC5mb2N1cygpIG1l
dGhvZC4KLSAgICAgICBUaGUgY29kZSBiZWxvdyBpcyBhbiB3b3JrYXJvdW5kOiBpZiB0aGUgbm9k
ZSBoYXMgZm9jdXMsIGEgc2Nyb2xsCi0gICAgICAgYWN0aW9uIGlzIHBlcmZvcm1lZCBhbmQgYWZ0
ZXJ3YXJkIGl0IGlzIGNoZWNrZWQgaWYgdGhlIGFkanVzdG1lbnQKLSAgICAgICBoYXMgdG8gYmUg
ZGlmZmVyZW50IGZyb20gMC4KLSAgICAqLwotICAgIGNoYXIgc2NyaXB0W10gPSAidmFyIGlubmVy
RG9jID0gZG9jdW1lbnQuZGVmYXVsdFZpZXcuZnJhbWVzWzBdLmRvY3VtZW50OyBcCi0gICAgICAg
ICAgICAgICAgICAgICBpbm5lckRvYy5nZXRFbGVtZW50QnlJZChcImxpbmtcIikuZm9jdXMoKTsg
ICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgIGlmIChpbm5lckRvYy5oYXNGb2N1
cygpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAg
ICAgICAgd2luZG93LnNjcm9sbEJ5KDAsIDEwMCk7IjsKLQotICAgIC8qIEZvY3VzIGFuIGVsZW1l
bnQgdXNpbmcgSmF2YVNjcmlwdCAqLwotICAgIHdlYmtpdF93ZWJfdmlld19leGVjdXRlX3Njcmlw
dCh2aWV3LCBzY3JpcHQpOwotCi0gICAgLyogQWRqdXN0bWVudHMgdXBkYXRlIGFzeW5jaHJvbm91
c2x5LCBzbyB3ZSBtdXN0IHdhaXQgYSBiaXQuICovCi0gICAgZ190aW1lb3V0X2FkZCgxMDAsIHF1
aXRfYWZ0ZXJfc2hvcnRfZGVsYXlfY2IsIGxvb3ApOwotICAgIGdfbWFpbl9sb29wX3J1bihsb29w
KTsKLQotICAgIC8qIE1ha2Ugc3VyZSB0aGUgU2Nyb2xsZWRXaW5kb3cgbm90aWNlZCB0aGUgc2Ny
b2xsICovCi0gICAgZ19hc3NlcnRfY21wZmxvYXQoZ3RrX2FkanVzdG1lbnRfZ2V0X3ZhbHVlKGFk
anVzdG1lbnQpLCAhPSwgMC4wKTsKLQotICAgIGdfZnJlZSh1cmkpOwotICAgIGd0a193aWRnZXRf
ZGVzdHJveSh3aW5kb3cpOwotfQotCi1zdGF0aWMgdm9pZCBkb190ZXN0X3dlYmtpdF93ZWJfdmll
d19hZGp1c3RtZW50cyhnYm9vbGVhbiB3aXRoX3BhZ2VfY2FjaGUpCi17Ci0gICAgY2hhciogZWZm
ZWN0aXZlX3VyaSA9IGdfc3RyY29uY2F0KGJhc2VfdXJpLCAiYmlnZGl2Lmh0bWwiLCBOVUxMKTsK
LSAgICBjaGFyKiBzZWNvbmRfdXJpID0gZ19zdHJjb25jYXQoYmFzZV91cmksICJpZnJhbWUuaHRt
bCIsIE5VTEwpOwotICAgIEd0a1dpZGdldCogd2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJ
TkRPV19UT1BMRVZFTCk7Ci0gICAgR3RrV2lkZ2V0KiBzY3JvbGxlZF93aW5kb3cgPSBndGtfc2Ny
b2xsZWRfd2luZG93X25ldyhOVUxMLCBOVUxMKTsKLSAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0g
V0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgR3RrQWRqdXN0bWVu
dCogYWRqdXN0bWVudDsKLSAgICBkb3VibGUgbG93ZXI7Ci0gICAgZG91YmxlIHVwcGVyOwotCi0g
ICAgaWYgKHdpdGhfcGFnZV9jYWNoZSkgewotICAgICAgICBXZWJLaXRXZWJTZXR0aW5ncyogc2V0
dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHZpZXcpOwotICAgICAgICBnX29i
amVjdF9zZXQoc2V0dGluZ3MsICJlbmFibGUtcGFnZS1jYWNoZSIsIFRSVUUsIE5VTEwpOwotICAg
IH0KLQotICAgIGd0a193aW5kb3dfc2V0X2RlZmF1bHRfc2l6ZShHVEtfV0lORE9XKHdpbmRvdyks
IDQwMCwgMjAwKTsKLQotICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93
KSwgc2Nyb2xsZWRfd2luZG93KTsKLSAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVS
KHNjcm9sbGVkX3dpbmRvdyksIEdUS19XSURHRVQodmlldykpOwotCi0gICAgZ3RrX3Njcm9sbGVk
X3dpbmRvd19zZXRfcG9saWN5KEdUS19TQ1JPTExFRF9XSU5ET1coc2Nyb2xsZWRfd2luZG93KSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1BPTElDWV9BVVRPTUFUSUMs
IEdUS19QT0xJQ1lfQVVUT01BVElDKTsKLQotICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVM
TCwgVFJVRSk7Ci0KLSAgICBnX29iamVjdF9jb25uZWN0KEdfT0JKRUNUKHZpZXcpLAotICAgICAg
ICAgICAgICAgICAgICAgInNpZ25hbDo6bm90aWZ5Ojpsb2FkLXN0YXR1cyIsIGlkbGVfcXVpdF9s
b29wX2NiLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0KLSAgICAvKiBXYWl0
IGZvciB3aW5kb3cgdG8gc2hvdyB1cCAqLwotICAgIGd0a193aWRnZXRfc2hvd19hbGwod2luZG93
KTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHdpbmRvdywgIm1hcC1ldmVudCIsCi0gICAgICAgICAg
ICAgICAgICAgICBHX0NBTExCQUNLKG1hcF9ldmVudF9jYiksIGxvb3ApOwotICAgIGdfbWFpbl9s
b29wX3J1bihsb29wKTsKLQotICAgIC8qIExvYWQgYSBwYWdlIHdpdGggYSBiaWcgZGl2IHRoYXQg
d2lsbCBjYXVzZSBzY3JvbGxiYXJzIHRvIGFwcGVhciAqLwotICAgIHdlYmtpdF93ZWJfdmlld19s
b2FkX3VyaSh2aWV3LCBlZmZlY3RpdmVfdXJpKTsKLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7
Ci0KLSAgICAvKiBBZGp1c3RtZW50cyB1cGRhdGUgYXN5bmNocm9ub3VzbHksIHNvIHdlIG11c3Qg
d2FpdCBhIGJpdC4gKi8KLSAgICBnX3RpbWVvdXRfYWRkKDEwMCwgcXVpdF9hZnRlcl9zaG9ydF9k
ZWxheV9jYiwgbG9vcCk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAgYWRqdXN0
bWVudCA9IGd0a19zY3JvbGxlZF93aW5kb3dfZ2V0X3ZhZGp1c3RtZW50KEdUS19TQ1JPTExFRF9X
SU5ET1coc2Nyb2xsZWRfd2luZG93KSk7Ci0gICAgZ19hc3NlcnRfY21wZmxvYXQoZ3RrX2FkanVz
dG1lbnRfZ2V0X3ZhbHVlKGFkanVzdG1lbnQpLCA9PSwgMC4wKTsKLQotICAgIGxvd2VyID0gZ3Rr
X2FkanVzdG1lbnRfZ2V0X2xvd2VyKGFkanVzdG1lbnQpOwotICAgIHVwcGVyID0gZ3RrX2FkanVz
dG1lbnRfZ2V0X3VwcGVyKGFkanVzdG1lbnQpOwotCi0gICAgLyogU2Nyb2xsIHRoZSB2aWV3IHVz
aW5nIEphdmFTY3JpcHQgKi8KLSAgICB3ZWJraXRfd2ViX3ZpZXdfZXhlY3V0ZV9zY3JpcHQodmll
dywgIndpbmRvdy5zY3JvbGxCeSgwLCAxMDApIik7Ci0KLSAgICAvKiBBZGp1c3RtZW50cyB1cGRh
dGUgYXN5bmNocm9ub3VzbHksIHNvIHdlIG11c3Qgd2FpdCBhIGJpdC4gKi8KLSAgICBnX3RpbWVv
dXRfYWRkKDEwMCwgcXVpdF9hZnRlcl9zaG9ydF9kZWxheV9jYiwgbG9vcCk7Ci0gICAgZ19tYWlu
X2xvb3BfcnVuKGxvb3ApOwotCi0gICAgLyogTWFrZSBzdXJlIHRoZSBTY3JvbGxlZFdpbmRvdyBu
b3RpY2VkIHRoZSBzY3JvbGwgKi8KLSAgICBnX2Fzc2VydF9jbXBmbG9hdChndGtfYWRqdXN0bWVu
dF9nZXRfdmFsdWUoYWRqdXN0bWVudCksID09LCAxMDAuMCk7Ci0KLSAgICAvKiBMb2FkIGEgc2Vj
b25kIFVSSSAqLwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh2aWV3LCBzZWNvbmRfdXJp
KTsKLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICAvKiBUaGUgcGFnZSBsb2FkZWQg
YnV0IHRoZSBhZGp1c3RtZW50cyBtYXkgbm90IGJlIHVwZGF0ZWQgeWV0LiBXYWl0IGEgYml0LiAq
LwotICAgIGdfdGltZW91dF9hZGQoMTAwLCBxdWl0X2FmdGVyX3Nob3J0X2RlbGF5X2NiLCBsb29w
KTsKLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICAvKiBNYWtlIHN1cmUgdGhlIHNj
cm9sbGJhciBoYXMgYmVlbiByZXNldCAqLwotICAgIGdfYXNzZXJ0X2NtcGZsb2F0KGd0a19hZGp1
c3RtZW50X2dldF92YWx1ZShhZGp1c3RtZW50KSwgPT0sIDAuMCk7Ci0KLSAgICAvKiBHbyBiYWNr
ICovCi0gICAgd2Via2l0X3dlYl92aWV3X2dvX2JhY2sodmlldyk7Ci0KLSAgICAvKiBXaGVuIHVz
aW5nIHBhZ2UgY2FjaGUsIGdvX2JhY2sgd2lsbCByZXR1cm4gc3luY3Jvbm91c2x5ICovCi0gICAg
aWYgKCF3aXRoX3BhZ2VfY2FjaGUpCi0gICAgICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLQot
ICAgIC8qIE1ha2Ugc3VyZSBHVEsrIGhhcyB0aW1lIHRvIHByb2Nlc3MgdGhlIGNoYW5nZXMgaW4g
c2l6ZSwgZm9yIHRoZSBhZGp1c21lbnRzICovCi0gICAgd2hpbGUgKGd0a19ldmVudHNfcGVuZGlu
ZygpKQotICAgICAgICBndGtfbWFpbl9pdGVyYXRpb24oKTsKLQotICAgIC8qIE1ha2Ugc3VyZSB1
cHBlciBhbmQgbG93ZXIgYm91bmRzIGhhdmUgYmVlbiByZXN0b3JlZCBjb3JyZWN0bHkgKi8KLSAg
ICBnX2Fzc2VydF9jbXBmbG9hdChsb3dlciwgPT0sIGd0a19hZGp1c3RtZW50X2dldF9sb3dlcihh
ZGp1c3RtZW50KSk7Ci0gICAgZ19hc3NlcnRfY21wZmxvYXQodXBwZXIsID09LCBndGtfYWRqdXN0
bWVudF9nZXRfdXBwZXIoYWRqdXN0bWVudCkpOwotICAgIGdfYXNzZXJ0X2NtcGZsb2F0KGd0a19h
ZGp1c3RtZW50X2dldF92YWx1ZShhZGp1c3RtZW50KSwgPT0sIDEwMC4wKTsKLQotICAgIGdfZnJl
ZShlZmZlY3RpdmVfdXJpKTsKLSAgICBnX2ZyZWUoc2Vjb25kX3VyaSk7Ci0KLSAgICBndGtfd2lk
Z2V0X2Rlc3Ryb3kod2luZG93KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3Zp
ZXdfYWRqdXN0bWVudHMoKQotewotICAgIC8qIFRlc3QgdGhpcyB3aXRoIHBhZ2UgY2FjaGUgZGlz
YWJsZWQsIGFuZCBlbmFibGVkLiAqLwotICAgIGRvX3Rlc3Rfd2Via2l0X3dlYl92aWV3X2FkanVz
dG1lbnRzKEZBTFNFKTsKLSAgICBkb190ZXN0X3dlYmtpdF93ZWJfdmlld19hZGp1c3RtZW50cyhU
UlVFKTsKLX0KLQotZ2Jvb2xlYW4gZGVsYXllZF9kZXN0cm95KGdwb2ludGVyIGRhdGEpCi17Ci0g
ICAgZ3RrX3dpZGdldF9kZXN0cm95KEdUS19XSURHRVQoZGF0YSkpOwotICAgIGdfbWFpbl9sb29w
X3F1aXQobG9vcCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dl
YmtpdF93ZWJfdmlld19kZXN0cm95KCkKLXsKLSAgICBHdGtXaWRnZXQqIHdpbmRvdzsKLSAgICBH
dGtXaWRnZXQqIHdlYl92aWV3OwotCi0gICAgd2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJ
TkRPV19UT1BMRVZFTCk7Ci0gICAgd2ViX3ZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7Ci0K
LSAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHdlYl92aWV3KTsK
LQotICAgIGd0a193aWRnZXRfc2hvd19hbGwod2luZG93KTsKLQotICAgIGxvb3AgPSBnX21haW5f
bG9vcF9uZXcoTlVMTCwgVFJVRSk7Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KHdpbmRvdywgIm1h
cC1ldmVudCIsCi0gICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKG1hcF9ldmVudF9jYiks
IGxvb3ApOwotICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLQotICAgIGdfaWRsZV9hZGQoZGVs
YXllZF9kZXN0cm95LCB3ZWJfdmlldyk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0g
ICAgZ3RrX3dpZGdldF9kZXN0cm95KHdpbmRvdyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Vi
a2l0X3dlYl92aWV3X3dpbmRvd19mZWF0dXJlcygpCi17Ci0gICAgR3RrV2lkZ2V0KiB3aW5kb3c7
Ci0gICAgR3RrV2lkZ2V0KiB3ZWJfdmlldzsKLSAgICAKLSAgICB3aW5kb3cgPSBndGtfd2luZG93
X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKLSAgICB3ZWJfdmlldyA9IHdlYmtpdF93ZWJfdmll
d19uZXcoKTsKLSAgICAKLSAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRv
dyksIHdlYl92aWV3KTsKLSAgICAKLSAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7Ci0g
ICAgCi0gICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLQotICAgIGdfc2ln
bmFsX2Nvbm5lY3Qod2luZG93LCAibWFwLWV2ZW50IiwKLSAgICAgICAgICAgICAgICAgICAgIEdf
Q0FMTEJBQ0sobWFwX2V2ZW50X2NiKSwgbG9vcCk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3Ap
OwotICAgIAotICAgIC8qIEJ1ZyAjMzYxNDQgKi8KLSAgICBnX29iamVjdF9zZXQoR19PQkpFQ1Qo
d2ViX3ZpZXcpLCAid2luZG93LWZlYXR1cmVzIiwgTlVMTCwgTlVMTCk7Ci0gICAgCi0gICAgZ3Rr
X3dpZGdldF9kZXN0cm95KHdpbmRvdyk7Ci19ICAgIAotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtp
dF93ZWJfdmlld19pbl9vZmZzY3JlZW5fd2luZG93X2RvZXNfbm90X2NyYXNoKCkKLXsKLSAgICBs
b29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotCi0gICAgR3RrV2lkZ2V0ICp3aW5k
b3cgPSBndGtfb2Zmc2NyZWVuX3dpbmRvd19uZXcoKTsKLSAgICBHdGtXaWRnZXQgKndlYl92aWV3
ID0gd2Via2l0X3dlYl92aWV3X25ldygpOwotCi0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NP
TlRBSU5FUih3aW5kb3cpLCB3ZWJfdmlldyk7Ci0gICAgZ3RrX3dpZGdldF9zaG93X2FsbCh3aW5k
b3cpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViX3ZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVz
IiwgR19DQUxMQkFDSyhpZGxlX3F1aXRfbG9vcF9jYiksIE5VTEwpOwotICAgIHdlYmtpdF93ZWJf
dmlld19sb2FkX3VyaShXRUJLSVRfV0VCX1ZJRVcod2ViX3ZpZXcpLCBiYXNlX3VyaSk7Ci0KLSAg
ICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kod2luZG93
KTsKLSAgICBnX21haW5fbG9vcF91bnJlZihsb29wKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93
ZWJraXRfd2ViX3ZpZXdfZG9lc19ub3Rfc3RlYWxfZm9jdXMoKQotewotICAgIGxvb3AgPSBnX21h
aW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7Ci0KLSAgICBHdGtXaWRnZXQgKndpbmRvdyA9IGd0a19v
ZmZzY3JlZW5fd2luZG93X25ldygpOwotICAgIEd0a1dpZGdldCAqd2ViVmlldyA9IHdlYmtpdF93
ZWJfdmlld19uZXcoKTsKLSAgICBHdGtXaWRnZXQgKmVudHJ5ID0gZ3RrX2VudHJ5X25ldygpOwot
Ci0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSAgICBHdGtXaWRnZXQgKmJveCA9IGd0a19oYm94
X25ldyhGQUxTRSwgMCk7Ci0jZWxzZQotICAgIEd0a1dpZGdldCAqYm94ID0gZ3RrX2JveF9uZXco
R1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUwsIDApOwotI2VuZGlmCi0KLSAgICBndGtfY29udGFp
bmVyX2FkZChHVEtfQ09OVEFJTkVSKGJveCksIHdlYlZpZXcpOwotICAgIGd0a19jb250YWluZXJf
YWRkKEdUS19DT05UQUlORVIoYm94KSwgZW50cnkpOwotICAgIGd0a19jb250YWluZXJfYWRkKEdU
S19DT05UQUlORVIod2luZG93KSwgYm94KTsKLSAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRv
dyk7Ci0KLSAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMoZW50cnkpOwotICAgIGdfYXNzZXJ0KGd0
a193aWRnZXRfaXNfZm9jdXMoZW50cnkpKTsKLQotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmll
dywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLCBHX0NBTExCQUNLKGlkbGVfcXVpdF9sb29wX2NiKSwg
TlVMTCk7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfaHRtbF9zdHJpbmcoV0VCS0lUX1dFQl9W
SUVXKHdlYlZpZXcpLAotICAgICAgICAiPGh0bWw+PGJvZHk+IgotICAgICAgICAiICAgIDxpbnB1
dCBpZD1cImVudHJ5XCIgdHlwZT1cInRleHRcIi8+IgotICAgICAgICAiICAgIDxzY3JpcHQ+Igot
ICAgICAgICAiICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImVudHJ5XCIpLmZvY3Vz
KCk7IgotICAgICAgICAiICAgIDwvc2NyaXB0PiIKLSAgICAgICAgIjwvYm9keT48L2h0bWw+Iiwg
ImZpbGU6Ly8iKTsKLQotICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLQotICAgIGdfYXNzZXJ0
KGd0a193aWRnZXRfaXNfZm9jdXMoZW50cnkpKTsKLQotICAgIGd0a193aWRnZXRfZGVzdHJveSh3
aW5kb3cpOwotICAgIGdfbWFpbl9sb29wX3VucmVmKGxvb3ApOwotfQotCi1zdGF0aWMgZ2Jvb2xl
YW4gZW1pdEtleVN0cm9rZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQotewotICAgIEdka0V2ZW50
KiBwcmVzc0V2ZW50ID0gZ2RrX2V2ZW50X25ldyhHREtfS0VZX1BSRVNTKTsKLSAgICBwcmVzc0V2
ZW50LT5rZXkua2V5dmFsID0gR0RLX0tFWV9mOwotICAgIEdka1dpbmRvdyogd2luZG93ID0gZ3Rr
X3dpZGdldF9nZXRfd2luZG93KEdUS19XSURHRVQod2ViVmlldykpOwotICAgIHByZXNzRXZlbnQt
PmtleS53aW5kb3cgPSB3aW5kb3c7Ci0gICAgZ19vYmplY3RfcmVmKHByZXNzRXZlbnQtPmtleS53
aW5kb3cpOwotCi0jaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCi0gICAgR2RrRGV2aWNlTWFuYWdl
ciogbWFuYWdlciA9IGdka19kaXNwbGF5X2dldF9kZXZpY2VfbWFuYWdlcihnZGtfd2luZG93X2dl
dF9kaXNwbGF5KHdpbmRvdykpOwotICAgIGdka19ldmVudF9zZXRfZGV2aWNlKHByZXNzRXZlbnQs
IGdka19kZXZpY2VfbWFuYWdlcl9nZXRfY2xpZW50X3BvaW50ZXIobWFuYWdlcikpOwotI2VuZGlm
Ci0KLSAgICAvLyBXaGVuIHN5bnRoZXNpemluZyBhbiBldmVudCwgYW4gaW52YWxpZCBoYXJkd2Fy
ZV9rZXljb2RlIHZhbHVlCi0gICAgLy8gY2FuIGNhdXNlIGl0IHRvIGJlIGJhZGx5IHByb2Nlc3Nl
ZCBieSBHdGsrLgotICAgIEdka0tleW1hcEtleSoga2V5czsKLSAgICBnaW50IG5fa2V5czsKLSAg
ICBpZiAoZ2RrX2tleW1hcF9nZXRfZW50cmllc19mb3Jfa2V5dmFsKGdka19rZXltYXBfZ2V0X2Rl
ZmF1bHQoKSwgR0RLX0tFWV9mLCAma2V5cywgJm5fa2V5cykpIHsKLSAgICAgICAgcHJlc3NFdmVu
dC0+a2V5LmhhcmR3YXJlX2tleWNvZGUgPSBrZXlzWzBdLmtleWNvZGU7Ci0gICAgICAgIGdfZnJl
ZShrZXlzKTsKLSAgICB9Ci0KLSAgICBHZGtFdmVudCogcmVsZWFzZUV2ZW50ID0gZ2RrX2V2ZW50
X2NvcHkocHJlc3NFdmVudCk7Ci0gICAgZ3RrX21haW5fZG9fZXZlbnQocHJlc3NFdmVudCk7Ci0g
ICAgZ2RrX2V2ZW50X2ZyZWUocHJlc3NFdmVudCk7Ci0gICAgcmVsZWFzZUV2ZW50LT5rZXkudHlw
ZSA9IEdES19LRVlfUkVMRUFTRTsKLSAgICBndGtfbWFpbl9kb19ldmVudChyZWxlYXNlRXZlbnQp
OwotICAgIGdka19ldmVudF9mcmVlKHJlbGVhc2VFdmVudCk7Ci0KLSAgICByZXR1cm4gRkFMU0U7
Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBlbnRlcmluZ19mdWxsc2NyZWVuX2NiKFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcsIEdPYmplY3QqIGVsZW1lbnQsIGdib29sZWFuIGJsb2NrZWQpCi17Ci0gICAg
aWYgKGJsb2NrZWQpCi0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci0gICAgZWxzZQot
ICAgICAgICBnX3RpbWVvdXRfYWRkKDIwMCwgKEdTb3VyY2VGdW5jKSBlbWl0S2V5U3Ryb2tlLCB3
ZWJWaWV3KTsKLSAgICByZXR1cm4gYmxvY2tlZDsKLX0KLQotc3RhdGljIGdib29sZWFuIGxlYXZp
bmdfZnVsbHNjcmVlbl9jYihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHT2JqZWN0KiBlbGVtZW50
LCBncG9pbnRlciBkYXRhKQotewotICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci0gICAgcmV0
dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfdmlld19mdWxsc2Ny
ZWVuKGdjb25zdHBvaW50ZXIgYmxvY2tlZCkKLXsKLSAgICBHdGtXaWRnZXQqIHdpbmRvdzsKLSAg
ICBHdGtXaWRnZXQqIHdlYl92aWV3OwotICAgIFdlYktpdFdlYlNldHRpbmdzICpzZXR0aW5nczsK
LQotICAgIHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOwotICAg
IHdlYl92aWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygpOwotCi0gICAgc2V0dGluZ3MgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKFdFQktJVF9XRUJfVklFVyh3ZWJfdmlldykpOwotICAg
IGdfb2JqZWN0X3NldChzZXR0aW5ncywgImVuYWJsZS1mdWxsc2NyZWVuIiwgVFJVRSwgTlVMTCk7
Ci0gICAgd2Via2l0X3dlYl92aWV3X3NldF9zZXR0aW5ncyhXRUJLSVRfV0VCX1ZJRVcod2ViX3Zp
ZXcpLCBzZXR0aW5ncyk7Ci0KLSAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdp
bmRvdyksIHdlYl92aWV3KTsKLQotICAgIGd0a193aWRnZXRfc2hvd19hbGwod2luZG93KTsKLQot
ICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7Ci0KLSAgICBnX3NpZ25hbF9j
b25uZWN0KHdlYl92aWV3LCAiZW50ZXJpbmctZnVsbHNjcmVlbiIsIEdfQ0FMTEJBQ0soZW50ZXJp
bmdfZnVsbHNjcmVlbl9jYiksIChncG9pbnRlcikgYmxvY2tlZCk7Ci0gICAgZ19zaWduYWxfY29u
bmVjdCh3ZWJfdmlldywgImxlYXZpbmctZnVsbHNjcmVlbiIsIEdfQ0FMTEJBQ0sobGVhdmluZ19m
dWxsc2NyZWVuX2NiKSwgTlVMTCk7Ci0KLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmco
V0VCS0lUX1dFQl9WSUVXKHdlYl92aWV3KSwgIjxodG1sPjxib2R5PiIKLSAgICAgICAgICAgICAg
ICAgICAiPHNjcmlwdD4iCi0gICAgICAgICAgICAgICAgICAgInZhciBldmVudE5hbWUgPSAna2V5
cHJlc3MnOyIKLSAgICAgICAgICAgICAgICAgICAiZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihl
dmVudE5hbWUsIGZ1bmN0aW9uICgpIHsiCi0gICAgICAgICAgICAgICAgICAgIiAgICBkb2N1bWVu
dC5kb2N1bWVudEVsZW1lbnQud2Via2l0UmVxdWVzdEZ1bGxTY3JlZW4oKTsiCi0gICAgICAgICAg
ICAgICAgICAgIn0sIGZhbHNlKTsiCi0gICAgICAgICAgICAgICAgICAgIjwvc2NyaXB0PjwvYm9k
eT48L2h0bWw+IiwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0KLSAgICBnX3RpbWVvdXRfYWRkKDEwMCwg
KEdTb3VyY2VGdW5jKSBlbWl0S2V5U3Ryb2tlLCBXRUJLSVRfV0VCX1ZJRVcod2ViX3ZpZXcpKTsK
LSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kod2lu
ZG93KTsKLX0KLQotc3RhdGljIGdib29sZWFuIGNoZWNrTWltZVR5cGVGb3JGaWx0ZXIoR3RrRmls
ZUZpbHRlciogZmlsdGVyLCBjb25zdCBnY2hhciogbWltZVR5cGUpCi17Ci0gICAgR3RrRmlsZUZp
bHRlckluZm8gZmlsdGVyX2luZm87Ci0gICAgZmlsdGVyX2luZm8uY29udGFpbnMgPSBHVEtfRklM
RV9GSUxURVJfTUlNRV9UWVBFOwotICAgIGZpbHRlcl9pbmZvLm1pbWVfdHlwZSA9IG1pbWVUeXBl
OwotICAgIHJldHVybiBndGtfZmlsZV9maWx0ZXJfZmlsdGVyKGZpbHRlciwgJmZpbHRlcl9pbmZv
KTsKLX0KLQotc3RhdGljIGdib29sZWFuIHJ1bkZpbGVDaG9vc2VyQ2JOb011bHRpc2VsTm9NaW1l
KFdlYktpdFdlYlZpZXcqIHdlYnZpZXcsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVz
dCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBnX2Fzc2VydCghd2Via2l0X2ZpbGVfY2hvb3Nlcl9y
ZXF1ZXN0X2dldF9zZWxlY3RfbXVsdGlwbGUocmVxdWVzdCkpOwotCi0gICAgY29uc3QgZ2NoYXIq
IGNvbnN0KiBtaW1lVHlwZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVf
dHlwZXMocmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQoIW1pbWVUeXBlcyk7Ci0gICAgR3RrRmlsZUZp
bHRlciogZmlsdGVyID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVz
X2ZpbHRlcihyZXF1ZXN0KTsKLSAgICBnX2Fzc2VydCghZmlsdGVyKTsKLQotICAgIGNvbnN0IGdj
aGFyKiBjb25zdCogc2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9n
ZXRfc2VsZWN0ZWRfZmlsZXMocmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQoIXNlbGVjdGVkRmlsZXMp
OwotCi0gICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKLSAgICByZXR1cm4gVFJVRTsKLX0KLQot
c3RhdGljIGdib29sZWFuIHJ1bkZpbGVDaG9vc2VyQ2JNdWx0aXNlbE5vTWltZShXZWJLaXRXZWJW
aWV3KiB3ZWJ2aWV3LCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QsIGdwb2ludGVy
IGRhdGEpCi17Ci0gICAgZ19hc3NlcnQod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9z
ZWxlY3RfbXVsdGlwbGUocmVxdWVzdCkpOwotCi0gICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBtaW1l
VHlwZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMocmVxdWVz
dCk7Ci0gICAgZ19hc3NlcnQoIW1pbWVUeXBlcyk7Ci0gICAgR3RrRmlsZUZpbHRlciogZmlsdGVy
ID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcihyZXF1
ZXN0KTsKLSAgICBnX2Fzc2VydCghZmlsdGVyKTsKLSAgICBjb25zdCBnY2hhciogY29uc3QqIHNl
bGVjdGVkRmlsZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2Zp
bGVzKHJlcXVlc3QpOwotICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZpbGVzKTsKLQotICAgIC8vIFNl
bGVjdCBzb21lIGZpbGVzLgotICAgIGNvbnN0IGdjaGFyKiBmaWxlc1RvU2VsZWN0WzRdID0geyAi
L2ZvbyIsICIvZm9vL2JhciIsICIvZm9vL2Jhci9iYXoiLCAwIH07Ci0gICAgd2Via2l0X2ZpbGVf
Y2hvb3Nlcl9yZXF1ZXN0X3NlbGVjdF9maWxlcyhyZXF1ZXN0LCBmaWxlc1RvU2VsZWN0KTsKLQot
ICAgIC8vIENoZWNrIHRoZSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBqdXN0IHNlbGVjdGVkLgotICAg
IHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVk
X2ZpbGVzKHJlcXVlc3QpOwotICAgIGdfYXNzZXJ0KHNlbGVjdGVkRmlsZXMpOwotICAgIGdfYXNz
ZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzBdLCA9PSwgIi9mb28iKTsKLSAgICBnX2Fzc2VydF9j
bXBzdHIoc2VsZWN0ZWRGaWxlc1sxXSwgPT0sICIvZm9vL2JhciIpOwotICAgIGdfYXNzZXJ0X2Nt
cHN0cihzZWxlY3RlZEZpbGVzWzJdLCA9PSwgIi9mb28vYmFyL2JheiIpOwotICAgIGdfYXNzZXJ0
KCFzZWxlY3RlZEZpbGVzWzNdKTsKLQotICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci0gICAg
cmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBydW5GaWxlQ2hvb3NlckNiU2VsZWN0
aW9uUmV0YWluZWQoV2ViS2l0V2ViVmlldyogd2VidmlldywgV2ViS2l0RmlsZUNob29zZXJSZXF1
ZXN0KiByZXF1ZXN0LCBncG9pbnRlciBkYXRhKQotewotICAgIGNvbnN0IGdjaGFyKiBjb25zdCog
c2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRf
ZmlsZXMocmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQoc2VsZWN0ZWRGaWxlcyk7Ci0gICAgZ19hc3Nl
cnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMF0sID09LCAiL2ZvbyIpOwotICAgIGdfYXNzZXJ0X2Nt
cHN0cihzZWxlY3RlZEZpbGVzWzFdLCA9PSwgIi9mb28vYmFyIik7Ci0gICAgZ19hc3NlcnRfY21w
c3RyKHNlbGVjdGVkRmlsZXNbMl0sID09LCAiL2Zvby9iYXIvYmF6Iik7Ci0gICAgZ19hc3NlcnQo
IXNlbGVjdGVkRmlsZXNbM10pOwotCi0gICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKLSAgICBy
ZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuIHJ1bkZpbGVDaG9vc2VyQ2JOb011bHRp
c2VsQWNjZXB0VHlwZXMoV2ViS2l0V2ViVmlldyogd2VidmlldywgV2ViS2l0RmlsZUNob29zZXJS
ZXF1ZXN0KiByZXF1ZXN0LCBncG9pbnRlciBkYXRhKQotewotICAgIGdfYXNzZXJ0KCF3ZWJraXRf
ZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdF9tdWx0aXBsZShyZXF1ZXN0KSk7Ci0KLSAg
ICBjb25zdCBnY2hhciogY29uc3QqIG1pbWVUeXBlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVx
dWVzdF9nZXRfbWltZV90eXBlcyhyZXF1ZXN0KTsKLSAgICBnX2Fzc2VydChtaW1lVHlwZXMpOwot
ICAgIGdfYXNzZXJ0X2NtcHN0cihtaW1lVHlwZXNbMF0sID09LCAiYXVkaW8vKiIpOwotICAgIGdf
YXNzZXJ0X2NtcHN0cihtaW1lVHlwZXNbMV0sID09LCAidmlkZW8vKiIpOwotICAgIGdfYXNzZXJ0
X2NtcHN0cihtaW1lVHlwZXNbMl0sID09LCAiaW1hZ2UvKiIpOwotICAgIGdfYXNzZXJ0KCFtaW1l
VHlwZXNbM10pOwotCi0gICAgR3RrRmlsZUZpbHRlciogZmlsdGVyID0gd2Via2l0X2ZpbGVfY2hv
b3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcihyZXF1ZXN0KTsKLSAgICBnX2Fzc2Vy
dChHVEtfSVNfRklMRV9GSUxURVIoZmlsdGVyKSk7Ci0gICAgZ19hc3NlcnQoY2hlY2tNaW1lVHlw
ZUZvckZpbHRlcihmaWx0ZXIsICJhdWRpby8qIikpOwotICAgIGdfYXNzZXJ0KGNoZWNrTWltZVR5
cGVGb3JGaWx0ZXIoZmlsdGVyLCAidmlkZW8vKiIpKTsKLSAgICBnX2Fzc2VydChjaGVja01pbWVU
eXBlRm9yRmlsdGVyKGZpbHRlciwgImltYWdlLyoiKSk7Ci0KLSAgICBjb25zdCBnY2hhciogY29u
c3QqIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVj
dGVkX2ZpbGVzKHJlcXVlc3QpOwotICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZpbGVzKTsKLQotICAg
IGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXZvaWQgZG9N
b3VzZUJ1dHRvbkV2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudFR5cGUgZXZlbnRUeXBl
LCBpbnQgeCwgaW50IHksIHVuc2lnbmVkIGludCBidXR0b24sIHVuc2lnbmVkIGludCBtb2RpZmll
cnMpCi17Ci0gICAgZ19hc3NlcnQoZ3RrX3dpZGdldF9nZXRfcmVhbGl6ZWQod2lkZ2V0KSk7Ci0K
LSAgICBHZGtFdmVudCogZXZlbnQgPSBnZGtfZXZlbnRfbmV3KGV2ZW50VHlwZSk7Ci0gICAgZXZl
bnQtPmJ1dHRvbi53aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3cod2lkZ2V0KTsKLSAgICBn
X29iamVjdF9yZWYoZXZlbnQtPmJ1dHRvbi53aW5kb3cpOwotCi0gICAgZXZlbnQtPmJ1dHRvbi50
aW1lID0gR0RLX0NVUlJFTlRfVElNRTsKLSAgICBldmVudC0+YnV0dG9uLnggPSB4OwotICAgIGV2
ZW50LT5idXR0b24ueSA9IHk7Ci0gICAgZXZlbnQtPmJ1dHRvbi5heGVzID0gMDsKLSAgICBldmVu
dC0+YnV0dG9uLnN0YXRlID0gbW9kaWZpZXJzOwotICAgIGV2ZW50LT5idXR0b24uYnV0dG9uID0g
YnV0dG9uOwotCi0jaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCi0gICAgZXZlbnQtPmJ1dHRvbi5k
ZXZpY2UgPSBnZGtfZGV2aWNlX21hbmFnZXJfZ2V0X2NsaWVudF9wb2ludGVyKGdka19kaXNwbGF5
X2dldF9kZXZpY2VfbWFuYWdlcihndGtfd2lkZ2V0X2dldF9kaXNwbGF5KHdpZGdldCkpKTsKLSNl
bmRpZgotCi0gICAgaW50IHhSb290LCB5Um9vdDsKLSAgICBnZGtfd2luZG93X2dldF9yb290X2Nv
b3JkcyhndGtfd2lkZ2V0X2dldF93aW5kb3cod2lkZ2V0KSwgeCwgeSwgJnhSb290LCAmeVJvb3Qp
OwotICAgIGV2ZW50LT5idXR0b24ueF9yb290ID0geFJvb3Q7Ci0gICAgZXZlbnQtPmJ1dHRvbi55
X3Jvb3QgPSB5Um9vdDsKLSAgICBndGtfbWFpbl9kb19ldmVudChldmVudCk7Ci19Ci0KLXN0YXRp
YyB2b2lkIGNsaWNrTW91c2VCdXR0b24oR3RrV2lkZ2V0KiB3aWRnZXQsIGludCB4LCBpbnQgeSwg
dW5zaWduZWQgaW50IGJ1dHRvbiwgdW5zaWduZWQgaW50IG1vZGlmaWVycykKLXsKLSAgICBkb01v
dXNlQnV0dG9uRXZlbnQod2lkZ2V0LCBHREtfQlVUVE9OX1BSRVNTLCB4LCB5LCBidXR0b24sIG1v
ZGlmaWVycyk7Ci0gICAgZG9Nb3VzZUJ1dHRvbkV2ZW50KHdpZGdldCwgR0RLX0JVVFRPTl9SRUxF
QVNFLCB4LCB5LCBidXR0b24sIG1vZGlmaWVycyk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBjbGlj
a01vdXNlQnV0dG9uQW5kV2FpdEZvckZpbGVDaG9vc2VyUmVxdWVzdChXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3KQotewotICAgIGNsaWNrTW91c2VCdXR0b24oR1RLX1dJREdFVCh3ZWJWaWV3KSwgNSwg
NSwgMSwgMCk7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0
X3dlYl92aWV3X2ZpbGVfY2hvb3NlcigpCi17Ci0gICAgY29uc3QgZ2NoYXIqIGh0bWxGb3JtYXRC
YXNlID0gIjxodG1sPjxib2R5PiIKLSAgICAgICAgICAgICI8aW5wdXQgc3R5bGU9J3Bvc2l0aW9u
OmFic29sdXRlO2xlZnQ6MDt0b3A6MDttYXJnaW46MDtwYWRkaW5nOjAnIHR5cGU9J2ZpbGUnICVz
Lz4iCi0gICAgICAgICAgICAiPC9ib2R5PjwvaHRtbD4iOwotCi0gICAgR3RrV2lkZ2V0KiB3aW5k
b3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKLSAgICBHdGtXaWRnZXQq
IHdlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7Ci0gICAgZ3RrX2NvbnRhaW5lcl9hZGQo
R1RLX0NPTlRBSU5FUih3aW5kb3cpLCB3ZWJWaWV3KTsKLSAgICBndGtfd2lkZ2V0X3Nob3dfYWxs
KHdpbmRvdyk7Ci0KLSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotCi0g
ICAgLy8gTXVsdGlwbGUgc2VsZWN0aW9ucyBub3QgYWxsb3dlZCwgbm8gTUlNRSBmaWx0ZXJpbmcu
Ci0gICAgZ3Vsb25nIGhhbmRsZXIgPSBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJydW4tZmls
ZS1jaG9vc2VyIiwgR19DQUxMQkFDSyhydW5GaWxlQ2hvb3NlckNiTm9NdWx0aXNlbE5vTWltZSks
IE5VTEwpOwotICAgIGdjaGFyKiBodG1sRm9ybWF0ID0gZ19zdHJkdXBfcHJpbnRmKGh0bWxGb3Jt
YXRCYXNlLCAiIik7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJf
VklFVyh3ZWJWaWV3KSwgaHRtbEZvcm1hdCwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0gICAgZ19mcmVl
KGh0bWxGb3JtYXQpOwotCi0gICAgZ190aW1lb3V0X2FkZCgxMDAsIChHU291cmNlRnVuYykgY2xp
Y2tNb3VzZUJ1dHRvbkFuZFdhaXRGb3JGaWxlQ2hvb3NlclJlcXVlc3QsIFdFQktJVF9XRUJfVklF
Vyh3ZWJWaWV3KSk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAgZ19zaWduYWxf
aGFuZGxlcl9kaXNjb25uZWN0KHdlYlZpZXcsIGhhbmRsZXIpOwotCi0gICAgLy8gTXVsdGlwbGUg
c2VsZWN0aW9ucyBhbGxvd2VkLCBubyBNSU1FIGZpbHRlcmluZywgc29tZSBwcmUtc2VsZWN0ZWQg
ZmlsZXMuCi0gICAgaGFuZGxlciA9IGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgInJ1bi1maWxl
LWNob29zZXIiLCBHX0NBTExCQUNLKHJ1bkZpbGVDaG9vc2VyQ2JNdWx0aXNlbE5vTWltZSksIE5V
TEwpOwotICAgIGh0bWxGb3JtYXQgPSBnX3N0cmR1cF9wcmludGYoaHRtbEZvcm1hdEJhc2UsICJt
dWx0aXBsZSIpOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJ
RVcod2ViVmlldyksIGh0bWxGb3JtYXQsIE5VTEwsIE5VTEwsIE5VTEwpOwotICAgIGdfZnJlZSho
dG1sRm9ybWF0KTsKLQotICAgIGdfdGltZW91dF9hZGQoMTAwLCAoR1NvdXJjZUZ1bmMpIGNsaWNr
TW91c2VCdXR0b25BbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0LCBXRUJLSVRfV0VCX1ZJRVco
d2ViVmlldykpOwotICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLQotICAgIGdfc2lnbmFsX2hh
bmRsZXJfZGlzY29ubmVjdCh3ZWJWaWV3LCBoYW5kbGVyKTsKLQotICAgIC8vIFBlcmZvcm0gYW5v
dGhlciByZXF1ZXN0IHRvIGNoZWNrIGlmIHRoZSBsaXN0IG9mIGZpbGVzIHNlbGVjdGVkCi0gICAg
Ly8gaW4gdGhlIHByZXZpb3VzIHN0ZXAgYXBwZWFycyBub3cgYXMgcGFydCBvZiB0aGUgbmV3IHJl
cXVlc3QuCi0gICAgaGFuZGxlciA9IGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgInJ1bi1maWxl
LWNob29zZXIiLCBHX0NBTExCQUNLKHJ1bkZpbGVDaG9vc2VyQ2JTZWxlY3Rpb25SZXRhaW5lZCks
IE5VTEwpOwotICAgIGdfdGltZW91dF9hZGQoMTAwLCAoR1NvdXJjZUZ1bmMpIGNsaWNrTW91c2VC
dXR0b25BbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0LCBXRUJLSVRfV0VCX1ZJRVcod2ViVmll
dykpOwotICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLQotICAgIGdfc2lnbmFsX2hhbmRsZXJf
ZGlzY29ubmVjdCh3ZWJWaWV3LCBoYW5kbGVyKTsKLQotICAgIC8vIE11bHRpcGxlIHNlbGVjdGlv
bnMgbm90IGFsbG93ZWQsIG9ubHkgYWNjZXB0IGltYWdlcywgYXVkaW8gYW5kIHZpZGVvIGZpbGVz
LgotICAgIGhhbmRsZXIgPSBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJydW4tZmlsZS1jaG9v
c2VyIiwgR19DQUxMQkFDSyhydW5GaWxlQ2hvb3NlckNiTm9NdWx0aXNlbEFjY2VwdFR5cGVzKSwg
TlVMTCk7Ci0gICAgaHRtbEZvcm1hdCA9IGdfc3RyZHVwX3ByaW50ZihodG1sRm9ybWF0QmFzZSwg
ImFjY2VwdD0nYXVkaW8vKix2aWRlby8qLGltYWdlLyonIik7Ci0gICAgd2Via2l0X3dlYl92aWV3
X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3KSwgaHRtbEZvcm1hdCwgTlVMTCwg
TlVMTCwgTlVMTCk7Ci0gICAgZ19mcmVlKGh0bWxGb3JtYXQpOwotCi0gICAgZ190aW1lb3V0X2Fk
ZCgxMDAsIChHU291cmNlRnVuYykgY2xpY2tNb3VzZUJ1dHRvbkFuZFdhaXRGb3JGaWxlQ2hvb3Nl
clJlcXVlc3QsIFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3KSk7Ci0gICAgZ19tYWluX2xvb3BfcnVu
KGxvb3ApOwotCi0gICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KHdlYlZpZXcsIGhhbmRs
ZXIpOwotICAgIGd0a193aWRnZXRfZGVzdHJveSh3aW5kb3cpOwotfQotCi1zdGF0aWMgdm9pZCB0
ZXN0X3dlYmtpdF93ZWJfdmlld19zb3VyY2VfbW9kZSgpCi17Ci0gICAgR3RrV2lkZ2V0KiB3ZWJf
dmlldzsKLQotICAgIHdlYl92aWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygpOwotCi0gICAgd2Vi
a2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklFVyh3ZWJfdmlldyksICI8aHRt
bD48Ym9keT48L2JvZHk+PC9odG1sPiIsIE5VTEwsIE5VTEwsIE5VTEwpOwotCi0gICAgZ19hc3Nl
cnQoIXdlYmtpdF93ZWJfdmlld19nZXRfdmlld19zb3VyY2VfbW9kZShXRUJLSVRfV0VCX1ZJRVco
d2ViX3ZpZXcpKSk7Ci0KLSAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X3ZpZXdfc291cmNlX21vZGUo
V0VCS0lUX1dFQl9WSUVXKHdlYl92aWV3KSwgVFJVRSk7Ci0KLSAgICBnX2Fzc2VydCh3ZWJraXRf
d2ViX3ZpZXdfZ2V0X3ZpZXdfc291cmNlX21vZGUoV0VCS0lUX1dFQl9WSUVXKHdlYl92aWV3KSkp
OwotCi0gICAgd2Via2l0X3dlYl92aWV3X3NldF92aWV3X3NvdXJjZV9tb2RlKFdFQktJVF9XRUJf
VklFVyh3ZWJfdmlldyksIEZBTFNFKTsKLQotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdf
Z2V0X3ZpZXdfc291cmNlX21vZGUoV0VCS0lUX1dFQl9WSUVXKHdlYl92aWV3KSkpOwotCi0gICAg
Z3RrX3dpZGdldF9kZXN0cm95KHdlYl92aWV3KTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNo
YXIqKiBhcmd2KQotewotICAgIFNvdXBTZXJ2ZXIqIHNlcnZlcjsKLSAgICBTb3VwVVJJKiBzb3Vw
X3VyaTsKLQotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLQotICAgIC8q
IEhvcGVmdWxseSBtYWtlIHRlc3QgaW5kZXBlbmRlbnQgb2YgdGhlIHBhdGggaXQncyBjYWxsZWQg
ZnJvbS4gKi8KLSAgICB0ZXN0dXRpbHNfcmVsYXRpdmVfY2hkaXIoIlNvdXJjZS9XZWJLaXQvZ3Rr
L3Rlc3RzL3Jlc291cmNlcy90ZXN0Lmh0bWwiLCBhcmd2WzBdKTsKLQotICAgIHNlcnZlciA9IHNv
dXBfc2VydmVyX25ldyhTT1VQX1NFUlZFUl9QT1JULCAwLCBOVUxMKTsKLSAgICBzb3VwX3NlcnZl
cl9ydW5fYXN5bmMoc2VydmVyKTsKLQotICAgIHNvdXBfc2VydmVyX2FkZF9oYW5kbGVyKHNlcnZl
ciwgTlVMTCwgc2VydmVyX2NhbGxiYWNrLCBOVUxMLCBOVUxMKTsKLQotICAgIHNvdXBfdXJpID0g
c291cF91cmlfbmV3KCJodHRwOi8vMTI3LjAuMC4xLyIpOwotICAgIHNvdXBfdXJpX3NldF9wb3J0
KHNvdXBfdXJpLCBzb3VwX3NlcnZlcl9nZXRfcG9ydChzZXJ2ZXIpKTsKLQotICAgIGJhc2VfdXJp
ID0gc291cF91cmlfdG9fc3RyaW5nKHNvdXBfdXJpLCBGQUxTRSk7Ci0gICAgc291cF91cmlfZnJl
ZShzb3VwX3VyaSk7Ci0KLSAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQu
b3JnLyIpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJ2aWV3L2ljb24tdXJpIiwg
dGVzdF93ZWJraXRfd2ViX3ZpZXdfaWNvbl91cmkpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dl
YmtpdC93ZWJ2aWV3L2FkanVzdG1lbnRzIiwgdGVzdF93ZWJraXRfd2ViX3ZpZXdfYWRqdXN0bWVu
dHMpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJ2aWV3L2Rlc3Ryb3kiLCB0ZXN0
X3dlYmtpdF93ZWJfdmlld19kZXN0cm95KTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQv
d2Vidmlldy9ncmFiX2ZvY3VzIiwgdGVzdF93ZWJraXRfd2ViX3ZpZXdfZ3JhYl9mb2N1cyk7Ci0g
ICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnZpZXcvd2luZG93LWZlYXR1cmVzIiwgdGVz
dF93ZWJraXRfd2ViX3ZpZXdfd2luZG93X2ZlYXR1cmVzKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMo
Ii93ZWJraXQvd2Vidmlldy93ZWJ2aWV3LWluLW9mZnNjcmVlbi13aW5kb3ctZG9lcy1ub3QtY3Jh
c2giLCB0ZXN0X3dlYmtpdF93ZWJfdmlld19pbl9vZmZzY3JlZW5fd2luZG93X2RvZXNfbm90X2Ny
YXNoKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vidmlldy93ZWJ2aWV3LWRvZXMt
bm90LXN0ZWFsLWZvY3VzIiwgdGVzdF93ZWJraXRfd2ViX3ZpZXdfZG9lc19ub3Rfc3RlYWxfZm9j
dXMpOwotICAgIGdfdGVzdF9hZGRfZGF0YV9mdW5jKCIvd2Via2l0L3dlYnZpZXcvZnVsbHNjcmVl
biIsIEdJTlRfVE9fUE9JTlRFUihGQUxTRSksIHRlc3Rfd2Via2l0X3dlYl92aWV3X2Z1bGxzY3Jl
ZW4pOwotICAgIGdfdGVzdF9hZGRfZGF0YV9mdW5jKCIvd2Via2l0L3dlYnZpZXcvZnVsbHNjcmVl
bi1ibG9ja2VkIiwgR0lOVF9UT19QT0lOVEVSKFRSVUUpLCB0ZXN0X3dlYmtpdF93ZWJfdmlld19m
dWxsc2NyZWVuKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vidmlldy9maWxlLWNo
b29zZXIiLCB0ZXN0X3dlYmtpdF93ZWJfdmlld19maWxlX2Nob29zZXIpOwotICAgIGdfdGVzdF9h
ZGRfZnVuYygiL3dlYmtpdC93ZWJ2aWV3L3NvdXJjZS1tb2RlIiwgdGVzdF93ZWJraXRfd2ViX3Zp
ZXdfc291cmNlX21vZGUpOwotCi0gICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7Ci19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2luZG93LmMgYi9Tb3VyY2UvV2ViS2l0
L2d0ay90ZXN0cy90ZXN0d2luZG93LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVl
ZGE0N2IxMjc3ZDY1ZGNiNThlMWUzNzlhN2EyYmNlZTY2YTVhMGEuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVz
dHdpbmRvdy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgQ29sbGFib3JhIEx0ZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
PGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+Ci0KLXN0YXRpYyB2b2lkIG5v
dGlmeV9sb2FkX3N0YXR1c19jYihXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgR1BhcmFtU3BlYyog
cHNwZWMsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgaWYgKHdlYmtpdF93ZWJfdmlld19nZXRfbG9h
ZF9zdGF0dXMod2ViX3ZpZXcpID09IFdFQktJVF9MT0FEX0ZJTklTSEVEKSB7Ci0gICAgICAgIEdN
YWluTG9vcCogbG9vcCA9IChHTWFpbkxvb3AqKWRhdGE7Ci0KLSAgICAgICAgZ19tYWluX2xvb3Bf
cXVpdChsb29wKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dpbmRvd19z
Y3JvbGxiYXJfcG9saWN5KHZvaWQpCi17Ci0gICAgR01haW5Mb29wKiBsb29wOwotICAgIEd0a1dp
ZGdldCogc2Nyb2xsZWRXaW5kb3c7Ci0gICAgR3RrV2lkZ2V0KiB3ZWJWaWV3OwotICAgIFdlYktp
dFdlYkZyYW1lKiBtYWluRnJhbWU7Ci0gICAgR3RrUG9saWN5VHlwZSBob3Jpem9udGFsUG9saWN5
OwotICAgIEd0a1BvbGljeVR5cGUgdmVydGljYWxQb2xpY3k7Ci0KLSAgICBsb29wID0gZ19tYWlu
X2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotCi0gICAgc2Nyb2xsZWRXaW5kb3cgPSBndGtfc2Nyb2xs
ZWRfd2luZG93X25ldyhOVUxMLCBOVUxMKTsKLSAgICBndGtfc2Nyb2xsZWRfd2luZG93X3NldF9w
b2xpY3koR1RLX1NDUk9MTEVEX1dJTkRPVyhzY3JvbGxlZFdpbmRvdyksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdUS19QT0xJQ1lfQVVUT01BVElDLCBHVEtfUE9MSUNZX0FV
VE9NQVRJQyk7Ci0KLSAgICB3ZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygpOwotICAgIGdf
b2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3
LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsCi0gICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNL
KG5vdGlmeV9sb2FkX3N0YXR1c19jYiksIGxvb3ApOwotCi0gICAgZ3RrX2NvbnRhaW5lcl9hZGQo
R1RLX0NPTlRBSU5FUihzY3JvbGxlZFdpbmRvdyksIHdlYlZpZXcpOwotCi0gICAgbWFpbkZyYW1l
ID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3
KSk7Ci0KLSAgICAvKiBUZXN0IHdlIGNvcnJlY3RseSBhcHBseSBwb2xpY3kgZm9yIG5vdCBoYXZp
bmcgc2Nyb2xsYmFyczsgVGhpcwotICAgICAqIGNhc2UgaXMgc3BlY2lhbCwgYmVjYXVzZSB3ZSB0
dXJuIHRoZSBwb2xpY3kgZnJvbSBORVZFUiB0bwotICAgICAqIEFVVE9NQVRJQywgc2luY2Ugd2Ug
Y2Fubm90IGVhc2lseSByZXByZXNlbnQgdGhlIHNhbWUgdGhpbmcKLSAgICAgKiB1c2luZyBHdGtT
Y3JvbGxlZFdpbmRvdyAqLwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX2h0bWxfc3RyaW5nKFdF
QktJVF9XRUJfVklFVyh3ZWJWaWV3KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiPGh0bWw+PGJvZHk+V2ViS2l0ITwvYm9keT48c2NyaXB0PmRvY3VtZW50LmdldEVsZW1l
bnRzQnlUYWdOYW1lKCdib2R5JylbMF0uc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJzs8L3Njcmlw
dD48L2h0bWw+IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZTov
LyIpOwotCi0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAgZ3RrX3Njcm9sbGVkX3dp
bmRvd19nZXRfcG9saWN5KEdUS19TQ1JPTExFRF9XSU5ET1coc2Nyb2xsZWRXaW5kb3cpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaG9yaXpvbnRhbFBvbGljeSwgJnZlcnRp
Y2FsUG9saWN5KTsKLQotICAgIGdfYXNzZXJ0KGhvcml6b250YWxQb2xpY3kgPT0gR1RLX1BPTElD
WV9BVVRPTUFUSUMpOwotICAgIGdfYXNzZXJ0KHZlcnRpY2FsUG9saWN5ID09IEdUS19QT0xJQ1lf
QVVUT01BVElDKTsKLQotICAgIGdfYXNzZXJ0KEdUS19QT0xJQ1lfTkVWRVIgPT0gd2Via2l0X3dl
Yl9mcmFtZV9nZXRfaG9yaXpvbnRhbF9zY3JvbGxiYXJfcG9saWN5KG1haW5GcmFtZSkpOwotICAg
IGdfYXNzZXJ0KEdUS19QT0xJQ1lfTkVWRVIgPT0gd2Via2l0X3dlYl9mcmFtZV9nZXRfdmVydGlj
YWxfc2Nyb2xsYmFyX3BvbGljeShtYWluRnJhbWUpKTsKLQotICAgIC8qIFRlc3Qgd2UgY29ycmVj
dGx5IGFwcGx5IHBvbGljeSBmb3IgYWx3YXlzIGhhdmluZyBzY3JvbGxiYXJzICovCi0gICAgd2Vi
a2l0X3dlYl92aWV3X2xvYWRfaHRtbF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8aHRtbD48Ym9keT5XZWJLaXQh
PC9ib2R5PjxzY3JpcHQ+ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHknKVswXS5z
dHlsZS5vdmVyZmxvdyA9ICdzY3JvbGwnOzwvc2NyaXB0PjwvaHRtbD4iLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlOi8vIik7Ci0KLSAgICBnX21haW5fbG9vcF9y
dW4obG9vcCk7Ci0KLSAgICBndGtfc2Nyb2xsZWRfd2luZG93X2dldF9wb2xpY3koR1RLX1NDUk9M
TEVEX1dJTkRPVyhzY3JvbGxlZFdpbmRvdyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZob3Jpem9udGFsUG9saWN5LCAmdmVydGljYWxQb2xpY3kpOwotCi0gICAgZ19hc3Nl
cnQoaG9yaXpvbnRhbFBvbGljeSA9PSBHVEtfUE9MSUNZX0FMV0FZUyk7Ci0gICAgZ19hc3NlcnQo
dmVydGljYWxQb2xpY3kgPT0gR1RLX1BPTElDWV9BTFdBWVMpOwotCi0gICAgZ19hc3NlcnQoaG9y
aXpvbnRhbFBvbGljeSA9PSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9ob3Jpem9udGFsX3Njcm9sbGJh
cl9wb2xpY3kobWFpbkZyYW1lKSk7Ci0gICAgZ19hc3NlcnQodmVydGljYWxQb2xpY3kgPT0gd2Vi
a2l0X3dlYl9mcmFtZV9nZXRfdmVydGljYWxfc2Nyb2xsYmFyX3BvbGljeShtYWluRnJhbWUpKTsK
LQotICAgIC8qIFRlc3Qgd2UgY29ycmVjdGx5IGFwcGx5IHBvbGljeSBmb3IgaGF2aW5nIHNjcm9s
bGJhcnMgd2hlbiBuZWVkZWQgKi8KLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9odG1sX3N0cmlu
ZyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIjxodG1sPjxib2R5PldlYktpdCE8L2JvZHk+PHNjcmlwdD5kb2N1bWVudC5nZXRF
bGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdLnN0eWxlLm92ZXJmbG93ID0gJ2F1dG8nOzwvc2Ny
aXB0PjwvaHRtbD4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxl
Oi8vIik7Ci0KLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICBndGtfc2Nyb2xsZWRf
d2luZG93X2dldF9wb2xpY3koR1RLX1NDUk9MTEVEX1dJTkRPVyhzY3JvbGxlZFdpbmRvdyksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZob3Jpem9udGFsUG9saWN5LCAmdmVy
dGljYWxQb2xpY3kpOwotCi0gICAgZ19hc3NlcnQoaG9yaXpvbnRhbFBvbGljeSA9PSBHVEtfUE9M
SUNZX0FVVE9NQVRJQyk7Ci0gICAgZ19hc3NlcnQodmVydGljYWxQb2xpY3kgPT0gR1RLX1BPTElD
WV9BVVRPTUFUSUMpOwotCi0gICAgZ19hc3NlcnQoaG9yaXpvbnRhbFBvbGljeSA9PSB3ZWJraXRf
d2ViX2ZyYW1lX2dldF9ob3Jpem9udGFsX3Njcm9sbGJhcl9wb2xpY3kobWFpbkZyYW1lKSk7Ci0g
ICAgZ19hc3NlcnQodmVydGljYWxQb2xpY3kgPT0gd2Via2l0X3dlYl9mcmFtZV9nZXRfdmVydGlj
YWxfc2Nyb2xsYmFyX3BvbGljeShtYWluRnJhbWUpKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKHdl
YlZpZXcpOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCi17Ci0gICAgZ3Rr
X3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOwotCi0gICAgZ190ZXN0X2J1Z19iYXNlKCJo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQv
d2luZG93L3Njcm9sbGJhcl9wb2xpY3kiLCB0ZXN0X3dlYmtpdF93aW5kb3dfc2Nyb2xsYmFyX3Bv
bGljeSk7Ci0gICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9BY2Nlc3NpYmlsaXR5VGVzdFNlcnZlci5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9BY2Nlc3NpYmlsaXR5
VGVzdFNlcnZlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1NTAwNTBiOTEx
NGFlMWNjNTBjZmUzNGFhYjUwODhmYzI4YjE4NzAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvQWNjZXNzaWJpbGl0eVRlc3RTZXJ2ZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0
Mi5oPgotCi1zdGF0aWMgdm9pZCBsb2FkQ2hhbmdlZENhbGxiYWNrKFdlYktpdFdlYlZpZXcqLCBX
ZWJLaXRMb2FkRXZlbnQgbG9hZEV2ZW50LCBncG9pbnRlcikKLXsKLSAgICAvLyBTZW5kIGEgbWVz
c2FnZSB0byB0aGUgcGFyZW50IHByb2Nlc3Mgd2hlbiB3ZSdyZSByZWFkeS4KLSAgICBpZiAobG9h
ZEV2ZW50ID09IFdFQktJVF9MT0FEX0ZJTklTSEVEKQotICAgICAgICBnX3ByaW50KCJPSyIpOwot
fQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCi17Ci0gICAgLy8gTWFrZSBzdXJl
IHRoYXQgdGhlIEFUSyBicmlkZ2UgaXMgbG9hZGVkLgotICAgIGdfc2V0ZW52KCJHVEtfTU9EVUxF
UyIsICJhdGstYnJpZGdlIiwgVFJVRSk7Ci0KLSAgICBndGtfaW5pdCgmYXJnYywgJmFyZ3YpOwot
Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2Vi
X3ZpZXdfbmV3KCkpOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX2h0bWwod2ViVmlldywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8aHRtbD4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiICA8Ym9keT4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAg
PGgxPlRoaXMgaXMgYSB0ZXN0PC9oMT4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
ICAgPHA+VGhpcyBpcyBhIHBhcmFncmFwaCB3aXRoIHNvbWUgcGxhaW4gdGV4dC48L3A+IgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgIDxwPlRoaXMgcGFyYWdyYXBoIGNvbnRhaW5z
IDxhIGhyZWY9XCJodHRwOi8vd3d3LndlYmtpdGd0ay5vcmdcIj5hIGxpbms8L2E+IGluIHRoZSBt
aWRkbGUuPC9wPiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIDwvYm9keT4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPC9odG1sPiIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAwKTsKLQotICAgIEd0a1dpZGdldCogd2luZG93ID0gZ3RrX3dpbmRvd19u
ZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7Ci0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRB
SU5FUih3aW5kb3cpLCBHVEtfV0lER0VUKHdlYlZpZXcpKTsKLSAgICBndGtfd2lkZ2V0X3Nob3df
YWxsKHdpbmRvdyk7Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KHdpbmRvdywgImRlbGV0ZS1ldmVu
dCIsIEdfQ0FMTEJBQ0soZ3RrX21haW5fcXVpdCksIDApOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
d2ViVmlldywgImxvYWQtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sobG9hZENoYW5nZWRDYWxsYmFjayks
IDApOwotCi0gICAgZ3RrX21haW4oKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvdGVzdHMvQ01ha2VMaXN0cy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDE3NWE0MzhkYzNjYjYxYWVlNzNjZjI5YjI3NjY2YTBiNTdhYjcwOTIuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvQ01ha2VMaXN0cy50eHQKKysrIC9kZXYvbnVsbApAQCAt
MSwxMDQgKzAsMCBAQAotc2V0KFRFU1RfTElCUkFSWV9ESVIgJHtDTUFLRV9MSUJSQVJZX09VVFBV
VF9ESVJFQ1RPUll9L1dlYktpdDJHT2JqZWN0QVBJVGVzdHMpCi1zZXQoVEVTVF9SRVNPVVJDRVNf
RElSICR7Q01BS0VfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZfS9yZXNvdXJjZXMpCi1maWxlKE1B
S0VfRElSRUNUT1JZICR7VEVTVF9SRVNPVVJDRVNfRElSfSkKLQotYWRkX2RlZmluaXRpb25zKAot
ICAgIC1EV0VCS0lUX1RFU1RfUExVR0lOX0RJUj0iJHtDTUFLRV9MSUJSQVJZX09VVFBVVF9ESVJF
Q1RPUll9IgotICAgIC1EV0VCS0lUX0VYRUNfUEFUSD0iJHtDTUFLRV9SVU5USU1FX09VVFBVVF9E
SVJFQ1RPUll9IgotICAgIC1EV0VCS0lUX1NSQ19ESVI9IiR7Q01BS0VfU09VUkNFX0RJUn0iCi0g
ICAgLURXRUJLSVRfVEVTVF9XRUJfRVhURU5TSU9OU19ESVI9IiR7VEVTVF9MSUJSQVJZX0RJUn0i
Ci0gICAgLURXRUJLSVRfSU5KRUNURURfQlVORExFX1BBVEg9IiR7Q01BS0VfTElCUkFSWV9PVVRQ
VVRfRElSRUNUT1JZfSIKLSkKLQotaW5jbHVkZV9kaXJlY3RvcmllcygKLSAgICAke0NNQUtFX0JJ
TkFSWV9ESVJ9Ci0gICAgJHtDTUFLRV9TT1VSQ0VfRElSfS9Tb3VyY2UKLSAgICAke0NNQUtFX1NP
VVJDRV9ESVJ9L1NvdXJjZS9XVEYKLSAgICAke0RFUklWRURfU09VUkNFU19ESVJ9Ci0gICAgJHtE
RVJJVkVEX1NPVVJDRVNfV0VCS0lUMkdUS19ESVJ9Ci0gICAgJHtGT1JXQVJESU5HX0hFQURFUlNf
RElSfQotICAgICR7Rk9SV0FSRElOR19IRUFERVJTX1dFQktJVDJHVEtfRElSfQotICAgICR7Rk9S
V0FSRElOR19IRUFERVJTX1dFQktJVDJHVEtfRVhURU5TSU9OX0RJUn0KLSAgICAke0FUU1BJX0lO
Q0xVREVfRElSU30KLSAgICAke0dMSUJfSU5DTFVERV9ESVJTfQotICAgICR7R1RLM19JTkNMVURF
X0RJUlN9Ci0gICAgJHtMSUJTT1VQX0lOQ0xVREVfRElSU30KLSkKLQotYWRkX2xpYnJhcnkoV2Vi
S2l0MkFQSVRlc3RDb3JlIFNUQVRJQwotICAgIExvYWRUcmFja2luZ1Rlc3QuY3BwCi0gICAgV2Vi
S2l0VGVzdEJ1cy5jcHAKLSAgICBXZWJLaXRUZXN0U2VydmVyLmNwcAotICAgIFdlYlByb2Nlc3NU
ZXN0UnVubmVyLmNwcAotICAgIFRlc3RNYWluLmNwcAotICAgIFdlYlZpZXdUZXN0LmNwcAotKQot
Ci10YXJnZXRfbGlua19saWJyYXJpZXMoV2ViS2l0MkFQSVRlc3RDb3JlIFdlYktpdDIpCi0KLWFk
ZF9jdXN0b21fdGFyZ2V0KHRlc3QtZ3Jlc291cmNlLWJ1bmRsZQotICAgIERFUEVORFMgcmVzb3Vy
Y2VzL3dlYmtpdDJndGstdGVzdHMuZ3Jlc291cmNlLnhtbAotICAgICAgICAgICAgcmVzb3VyY2Vz
L2xpbmstdGl0bGUuanMKLSAgICBDT01NQU5EIGdsaWItY29tcGlsZS1yZXNvdXJjZXMgLS10YXJn
ZXQ9JHtURVNUX1JFU09VUkNFU19ESVJ9L3dlYmtpdDJndGstdGVzdHMtcmVzb3VyY2VzLmdyZXNv
dXJjZSAtLXNvdXJjZWRpcj0ke0NNQUtFX1NPVVJDRV9ESVJ9ICR7Q01BS0VfU09VUkNFX0RJUn0v
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvcmVzb3VyY2VzL3dlYmtpdDJn
dGstdGVzdHMuZ3Jlc291cmNlLnhtbAotKQotCi1tYWNybyhBRERfV0syX1RFU1RfV0VCX0VYVEVO
U0lPTiBleHRlbnNpb25fbmFtZSkKLSAgICBhZGRfbGlicmFyeSgke2V4dGVuc2lvbl9uYW1lfSBN
T0RVTEUgJHtBUkdOfSkKLSAgICBhZGRfZGVwZW5kZW5jaWVzKCR7ZXh0ZW5zaW9uX25hbWV9IFdl
YktpdDIpCi0gICAgc2V0X3Byb3BlcnR5KAotICAgICAgICBUQVJHRVQgJHtleHRlbnNpb25fbmFt
ZX0KLSAgICAgICAgQVBQRU5ECi0gICAgICAgIFBST1BFUlRZIENPTVBJTEVfREVGSU5JVElPTlMg
V0VCS0lUMl9DT01QSUxBVElPTgotICAgICkKLSAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoJHtl
eHRlbnNpb25fbmFtZX0gUFJPUEVSVElFUwotICAgICAgICBMSUJSQVJZX09VVFBVVF9ESVJFQ1RP
UlkgJHtURVNUX0xJQlJBUllfRElSfQotICAgICkKLWVuZG1hY3JvKCkKLQotbWFjcm8oQUREX1dL
Ml9URVNUIHRlc3RfbmFtZSkKLSAgICBhZGRfZXhlY3V0YWJsZSgke3Rlc3RfbmFtZX0gJHtBUkdO
fSkKLSAgICBhZGRfZGVwZW5kZW5jaWVzKCR7dGVzdF9uYW1lfQotICAgICAgICB0ZXN0LWdyZXNv
dXJjZS1idW5kbGUKLSAgICAgICAgV2ViRXh0ZW5zaW9uVGVzdAotICAgICkKLSAgICB0YXJnZXRf
bGlua19saWJyYXJpZXMoJHt0ZXN0X25hbWV9Ci0gICAgICAgIEphdmFTY3JpcHRDb3JlCi0gICAg
ICAgIFdlYktpdDIKLSAgICAgICAgV2ViS2l0MkFQSVRlc3RDb3JlCi0gICAgICAgICR7QVRTUElf
TElCUkFSSUVTfQotICAgICAgICAke0dMSUJfTElCUkFSSUVTfQotICAgICAgICAke0dUSzNfTElC
UkFSSUVTfQotICAgICAgICAke0xJQlNPVVBfTElCUkFSSUVTfQotICAgICkKLSAgICBzZXRfdGFy
Z2V0X3Byb3BlcnRpZXMoJHt0ZXN0X25hbWV9IFBST1BFUlRJRVMKLSAgICAgICAgUlVOVElNRV9P
VVRQVVRfRElSRUNUT1JZICR7Q01BS0VfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZfS9XZWJLaXQy
R09iamVjdEFQSVRlc3RzCi0gICAgKQotZW5kbWFjcm8oKQotCi1BRERfV0syX1RFU1RfV0VCX0VY
VEVOU0lPTihXZWJFeHRlbnNpb25UZXN0IFdlYkV4dGVuc2lvblRlc3QuY3BwKQotQUREX1dLMl9U
RVNUX1dFQl9FWFRFTlNJT04oV2ViUHJvY2Vzc1Rlc3QgRE9NTm9kZVRlc3QuY3BwIEZyYW1lVGVz
dC5jcHAgV2ViUHJvY2Vzc1Rlc3QuY3BwKQotCi1BRERfV0syX1RFU1QoSW5zcGVjdG9yVGVzdFNl
cnZlciBJbnNwZWN0b3JUZXN0U2VydmVyLmNwcCkKLUFERF9XSzJfVEVTVChUZXN0QmFja0Zvcndh
cmRMaXN0IFRlc3RCYWNrRm9yd2FyZExpc3QuY3BwKQotQUREX1dLMl9URVNUKFRlc3RDb250ZXh0
TWVudSBUZXN0Q29udGV4dE1lbnUuY3BwKQotQUREX1dLMl9URVNUKFRlc3RDb29raWVNYW5hZ2Vy
IFRlc3RDb29raWVNYW5hZ2VyLmNwcCkKLUFERF9XSzJfVEVTVChUZXN0RE9NTm9kZSBUZXN0RE9N
Tm9kZS5jcHApCi1BRERfV0syX1RFU1QoVGVzdERvd25sb2FkcyBUZXN0RG93bmxvYWRzLmNwcCkK
LUFERF9XSzJfVEVTVChUZXN0RnJhbWUgVGVzdEZyYW1lLmNwcCkKLUFERF9XSzJfVEVTVChUZXN0
SW5zcGVjdG9yIFRlc3RJbnNwZWN0b3IuY3BwKQotQUREX1dLMl9URVNUKFRlc3RJbnNwZWN0b3JT
ZXJ2ZXIgVGVzdEluc3BlY3RvclNlcnZlci5jcHApCi1BRERfV0syX1RFU1QoVGVzdExvYWRlckNs
aWVudCBUZXN0TG9hZGVyQ2xpZW50LmNwcCkKLUFERF9XSzJfVEVTVChUZXN0UHJpbnRpbmcgVGVz
dFByaW50aW5nLmNwcCkKLUFERF9XSzJfVEVTVChUZXN0U1NMIFRlc3RTU0wuY3BwKQotQUREX1dL
Ml9URVNUKFRlc3RXZWJFeHRlbnNpb25zIFRlc3RXZWJFeHRlbnNpb25zLmNwcCkKLUFERF9XSzJf
VEVTVChUZXN0V2ViS2l0UG9saWN5Q2xpZW50IFRlc3RXZWJLaXRQb2xpY3lDbGllbnQuY3BwKQot
QUREX1dLMl9URVNUKFRlc3RXZWJLaXRTZXR0aW5ncyBUZXN0V2ViS2l0U2V0dGluZ3MuY3BwKQot
QUREX1dLMl9URVNUKFRlc3RXZWJLaXRWZXJzaW9uIFRlc3RXZWJLaXRWZXJzaW9uLmNwcCkKLUFE
RF9XSzJfVEVTVChUZXN0V2ViS2l0V2ViVmlld0dyb3VwIFRlc3RXZWJLaXRXZWJWaWV3R3JvdXAu
Y3BwKQotQUREX1dLMl9URVNUKFRlc3RXZWJLaXRXZWJDb250ZXh0IFRlc3RXZWJLaXRXZWJDb250
ZXh0LmNwcCkKLUFERF9XSzJfVEVTVChUZXN0V2ViS2l0V2ViVmlldyBUZXN0V2ViS2l0V2ViVmll
dy5jcHApCi0KLWlmIChBVFNQSV9GT1VORCkKLSAgICBBRERfV0syX1RFU1QoQWNjZXNzaWJpbGl0
eVRlc3RTZXJ2ZXIgQWNjZXNzaWJpbGl0eVRlc3RTZXJ2ZXIuY3BwKQotICAgIEFERF9XSzJfVEVT
VChUZXN0V2ViS2l0QWNjZXNzaWJpbGl0eSBUZXN0V2ViS2l0QWNjZXNzaWJpbGl0eS5jcHApCi1l
bmRpZiAoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvRE9NTm9kZVRlc3QuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvRE9NTm9kZVRlc3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTc1NGNm
MjFkZmQwZjk4NTQyYjQwYTJkYmY4ZjA2YmE5MjUwMTdiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL0RPTU5vZGVUZXN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIxNiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LQotI2luY2x1ZGUgIldlYlByb2Nlc3NUZXN0LmgiCi0jaW5jbHVkZSA8Z2lvL2dpby5oPgotI2lu
Y2x1ZGUgPHdlYmtpdDIvd2Via2l0LXdlYi1leHRlbnNpb24uaD4KLSNpbmNsdWRlIDx3dGYvZ29i
amVjdC9HT3duUHRyLmg+Ci0KLWNsYXNzIFdlYktpdERPTU5vZGVUZXN0IDogcHVibGljIFdlYlBy
b2Nlc3NUZXN0IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxXZWJQcm9jZXNzVGVz
dD4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IFdlYktpdERPTU5vZGVUZXN0KCkpOyB9
Ci0KLXByaXZhdGU6Ci0gICAgZ3VpbnQ2NCB3ZWJQYWdlRnJvbUFyZ3MoR1ZhcmlhbnQqIGFyZ3Mp
Ci0gICAgewotICAgICAgICBHVmFyaWFudEl0ZXIgaXRlcjsKLSAgICAgICAgZ192YXJpYW50X2l0
ZXJfaW5pdCgmaXRlciwgYXJncyk7Ci0KLSAgICAgICAgY29uc3QgY2hhcioga2V5OwotICAgICAg
ICBHVmFyaWFudCogdmFsdWU7Ci0gICAgICAgIHdoaWxlIChnX3ZhcmlhbnRfaXRlcl9sb29wKCZp
dGVyLCAieyZzdn0iLCAma2V5LCAmdmFsdWUpKSB7Ci0gICAgICAgICAgICBpZiAoIXN0cmNtcChr
ZXksICJwYWdlSUQiKSAmJiBnX3ZhcmlhbnRfY2xhc3NpZnkodmFsdWUpID09IEdfVkFSSUFOVF9D
TEFTU19VSU5UNjQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGdfdmFyaWFudF9nZXRfdWludDY0
KHZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0g
ICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGJvb2wgdGVzdEhpZXJhcmNoeU5hdmlnYXRp
b24oV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24sIEdWYXJpYW50KiBhcmdzKQotICAgIHsK
LSAgICAgICAgV2ViS2l0V2ViUGFnZSogcGFnZSA9IHdlYmtpdF93ZWJfZXh0ZW5zaW9uX2dldF9w
YWdlKGV4dGVuc2lvbiwgd2ViUGFnZUZyb21BcmdzKGFyZ3MpKTsKLSAgICAgICAgZ19hc3NlcnQo
V0VCS0lUX0lTX1dFQl9QQUdFKHBhZ2UpKTsKLSAgICAgICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRv
Y3VtZW50ID0gd2Via2l0X3dlYl9wYWdlX2dldF9kb21fZG9jdW1lbnQocGFnZSk7Ci0gICAgICAg
IGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfRE9DVU1FTlQoZG9jdW1lbnQpKTsKLQotICAgICAgICBX
ZWJLaXRET01IVE1MSGVhZEVsZW1lbnQqIGhlYWQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9o
ZWFkKGRvY3VtZW50KTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0hFQURf
RUxFTUVOVChoZWFkKSk7Ci0KLSAgICAgICAgLy8gVGl0bGUsIGhlYWQncyBjaGlsZC4KLSAgICAg
ICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2hhc19jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05P
REUoaGVhZCkpKTsKLSAgICAgICAgR1JlZlB0cjxXZWJLaXRET01Ob2RlTGlzdD4gbGlzdCA9IGFk
b3B0R1JlZih3ZWJraXRfZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERSho
ZWFkKSkpOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX05PREVfTElTVChsaXN0Lmdl
dCgpKSk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRf
bGVuZ3RoKGxpc3QuZ2V0KCkpLCA9PSwgMSk7Ci0gICAgICAgIFdlYktpdERPTU5vZGUqIG5vZGUg
PSB3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtKGxpc3QuZ2V0KCksIDApOwotICAgICAgICBnX2Fz
c2VydChXRUJLSVRfRE9NX0lTX0hUTUxfVElUTEVfRUxFTUVOVChub2RlKSk7Ci0KLSAgICAgICAg
Ly8gQm9keSwgSGVhZCBzaWJsaW5nLgotICAgICAgICBub2RlID0gd2Via2l0X2RvbV9ub2RlX2dl
dF9uZXh0X3NpYmxpbmcoV0VCS0lUX0RPTV9OT0RFKGhlYWQpKTsKLSAgICAgICAgZ19hc3NlcnQo
V0VCS0lUX0RPTV9JU19IVE1MX0JPRFlfRUxFTUVOVChub2RlKSk7Ci0gICAgICAgIFdlYktpdERP
TUhUTUxCb2R5RWxlbWVudCogYm9keSA9IFdFQktJVF9ET01fSFRNTF9CT0RZX0VMRU1FTlQobm9k
ZSk7Ci0KLSAgICAgICAgLy8gVGhlcmUgaXMgbm8gdGhpcmQgc2libGluZwotICAgICAgICBnX2Fz
c2VydCghd2Via2l0X2RvbV9ub2RlX2dldF9uZXh0X3NpYmxpbmcobm9kZSkpOwotCi0gICAgICAg
IC8vIEJvZHkncyBwcmV2aW91cyBzaWJsaW5nIGlzIEhlYWQuCi0gICAgICAgIG5vZGUgPSB3ZWJr
aXRfZG9tX25vZGVfZ2V0X3ByZXZpb3VzX3NpYmxpbmcoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKTsK
LSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0hFQURfRUxFTUVOVChub2RlKSk7
Ci0KLSAgICAgICAgLy8gQm9keSBoYXMgMyBjaGlsZHJlbi4KLSAgICAgICAgZ19hc3NlcnQod2Vi
a2l0X2RvbV9ub2RlX2hhc19jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpKTsKLSAg
ICAgICAgbGlzdCA9IGFkb3B0R1JlZih3ZWJraXRfZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVzKFdF
QktJVF9ET01fTk9ERShib2R5KSkpOwotICAgICAgICB1bnNpZ25lZCBsb25nIGxlbmd0aCA9IHdl
YmtpdF9kb21fbm9kZV9saXN0X2dldF9sZW5ndGgobGlzdC5nZXQoKSk7Ci0gICAgICAgIGdfYXNz
ZXJ0X2NtcGludChsZW5ndGgsID09LCAzKTsKLQotICAgICAgICAvLyBUaGUgdGhyZWUgb2YgdGhl
bSBhcmUgUCB0YWdzLgotICAgICAgICBmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDA7IGkgPCBsZW5n
dGg7IGkrKykgewotICAgICAgICAgICAgbm9kZSA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0o
bGlzdC5nZXQoKSwgaSk7Ci0gICAgICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxf
UEFSQUdSQVBIX0VMRU1FTlQobm9kZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gR28gYmFj
a3dhcmRzCi0gICAgICAgIHVuc2lnbmVkIGk7Ci0gICAgICAgIGZvciAoaSA9IDA7IG5vZGU7IG5v
ZGUgPSB3ZWJraXRfZG9tX25vZGVfZ2V0X3ByZXZpb3VzX3NpYmxpbmcobm9kZSksIGkrKykgeyB9
Ci0gICAgICAgIGdfYXNzZXJ0X2NtcGludChpLCA9PSwgMyk7Ci0KLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotCi0gICAgYm9vbCB0ZXN0SW5zZXJ0aW9uKFdlYktpdFdlYkV4dGVuc2lvbiog
ZXh0ZW5zaW9uLCBHVmFyaWFudCogYXJncykKLSAgICB7Ci0gICAgICAgIFdlYktpdFdlYlBhZ2Uq
IHBhZ2UgPSB3ZWJraXRfd2ViX2V4dGVuc2lvbl9nZXRfcGFnZShleHRlbnNpb24sIHdlYlBhZ2VG
cm9tQXJncyhhcmdzKSk7Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19XRUJfUEFHRShwYWdl
KSk7Ci0gICAgICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1bWVudCA9IHdlYmtpdF93ZWJfcGFn
ZV9nZXRfZG9tX2RvY3VtZW50KHBhZ2UpOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lT
X0RPQ1VNRU5UKGRvY3VtZW50KSk7Ci0KLSAgICAgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQqIGJv
ZHkgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9ib2R5KGRvY3VtZW50KTsKLSAgICAgICAgZ19h
c3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0VMRU1FTlQoYm9keSkpOwotCi0gICAgICAgIC8vIEJv
ZHkgc2hvdWxkbid0IGhhdmUgYW55IGNoaWxkcmVuIGF0IHRoaXMgcG9pbnQuCi0gICAgICAgIGdf
YXNzZXJ0KCF3ZWJraXRfZG9tX25vZGVfaGFzX2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShi
b2R5KSkpOwotCi0gICAgICAgIC8vIEluc2VydCBvbmUgUCBlbGVtZW50LgotICAgICAgICBXZWJL
aXRET01FbGVtZW50KiBwID0gd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZWxlbWVudChkb2N1
bWVudCwgIlAiLCAwKTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0VMRU1F
TlQocCkpOwotICAgICAgICB3ZWJraXRfZG9tX25vZGVfYXBwZW5kX2NoaWxkKFdFQktJVF9ET01f
Tk9ERShib2R5KSwgV0VCS0lUX0RPTV9OT0RFKHApLCAwKTsKLQotICAgICAgICAvLyBOb3cgaXQg
c2hvdWxkIGhhdmUgb25lLCB0aGUgc2FtZSB0aGF0IHdlIGluc2VydGVkLgotICAgICAgICBnX2Fz
c2VydCh3ZWJraXRfZG9tX25vZGVfaGFzX2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5
KSkpOwotICAgICAgICBHUmVmUHRyPFdlYktpdERPTU5vZGVMaXN0PiBsaXN0ID0gYWRvcHRHUmVm
KHdlYmtpdF9kb21fbm9kZV9nZXRfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKSk7
Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfTk9ERV9MSVNUKGxpc3QuZ2V0KCkpKTsK
LSAgICAgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9kb21fbm9kZV9saXN0X2dldF9sZW5ndGgo
bGlzdC5nZXQoKSksID09LCAxKTsKLSAgICAgICAgV2ViS2l0RE9NTm9kZSogbm9kZSA9IHdlYmtp
dF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdC5nZXQoKSwgMCk7Ci0gICAgICAgIGdfYXNzZXJ0KFdF
QktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKG5vZGUpKTsKLSAgICAgICAgZ19hc3NlcnQod2Via2l0
X2RvbV9ub2RlX2lzX3NhbWVfbm9kZShXRUJLSVRfRE9NX05PREUocCksIG5vZGUpKTsKLQotICAg
ICAgICAvLyBSZXBsYWNlIHRoZSBQIHRhZyB3aXRoIGEgRElWIHRhZy4KLSAgICAgICAgV2ViS2l0
RE9NRWxlbWVudCogZGl2ID0gd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZWxlbWVudChkb2N1
bWVudCwgIkRJViIsIDApOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfRUxF
TUVOVChkaXYpKTsKLSAgICAgICAgd2Via2l0X2RvbV9ub2RlX3JlcGxhY2VfY2hpbGQoV0VCS0lU
X0RPTV9OT0RFKGJvZHkpLCBXRUJLSVRfRE9NX05PREUoZGl2KSwgV0VCS0lUX0RPTV9OT0RFKHAp
LCAwKTsKLSAgICAgICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2hhc19jaGlsZF9ub2RlcyhX
RUJLSVRfRE9NX05PREUoYm9keSkpKTsKLSAgICAgICAgbGlzdCA9IGFkb3B0R1JlZih3ZWJraXRf
ZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSkpOwotICAgICAg
ICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX05PREVfTElTVChsaXN0LmdldCgpKSk7Ci0gICAgICAg
IGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QuZ2V0
KCkpLCA9PSwgMSk7Ci0gICAgICAgIG5vZGUgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtKGxp
c3QuZ2V0KCksIDApOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVO
VChub2RlKSk7Ci0gICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9pc19zYW1lX25vZGUo
V0VCS0lUX0RPTV9OT0RFKGRpdiksIG5vZGUpKTsKLQotICAgICAgICAvLyBOb3cgcmVtb3ZlIHRo
ZSB0YWcuCi0gICAgICAgIHdlYmtpdF9kb21fbm9kZV9yZW1vdmVfY2hpbGQoV0VCS0lUX0RPTV9O
T0RFKGJvZHkpLCBub2RlLCAwKTsKLSAgICAgICAgbGlzdCA9IGFkb3B0R1JlZih3ZWJraXRfZG9t
X25vZGVfZ2V0X2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSkpOwotICAgICAgICBn
X2Fzc2VydChXRUJLSVRfRE9NX0lTX05PREVfTElTVChsaXN0LmdldCgpKSk7Ci0gICAgICAgIGdf
YXNzZXJ0X2NtcGludCh3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QuZ2V0KCkp
LCA9PSwgMCk7Ci0KLSAgICAgICAgLy8gVGVzdCBpbnNlcnQgYmVmb3JlLiBJZiByZWZDaGlsZCBp
cyBudWxsLCBpbnNlcnQgbmV3Q2hpbGQgYXMgbGFzdCBlbGVtZW50IG9mIHBhcmVudC4KLSAgICAg
ICAgZGl2ID0gd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZWxlbWVudChkb2N1bWVudCwgIkRJ
ViIsIDApOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChkaXYp
KTsKLSAgICAgICAgd2Via2l0X2RvbV9ub2RlX2luc2VydF9iZWZvcmUoV0VCS0lUX0RPTV9OT0RF
KGJvZHkpLCBXRUJLSVRfRE9NX05PREUoZGl2KSwgMCwgMCk7Ci0gICAgICAgIGdfYXNzZXJ0KHdl
YmtpdF9kb21fbm9kZV9oYXNfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKSk7Ci0g
ICAgICAgIGxpc3QgPSBhZG9wdEdSZWYod2Via2l0X2RvbV9ub2RlX2dldF9jaGlsZF9ub2RlcyhX
RUJLSVRfRE9NX05PREUoYm9keSkpKTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19O
T0RFX0xJU1QobGlzdC5nZXQoKSkpOwotICAgICAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X2Rv
bV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChsaXN0LmdldCgpKSwgPT0sIDEpOwotICAgICAgICBub2Rl
ID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0LmdldCgpLCAwKTsKLSAgICAgICAgZ19h
c3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0VMRU1FTlQobm9kZSkpOwotICAgICAgICBnX2Fzc2Vy
dCh3ZWJraXRfZG9tX25vZGVfaXNfc2FtZV9ub2RlKFdFQktJVF9ET01fTk9ERShkaXYpLCBub2Rl
KSk7Ci0KLSAgICAgICAgLy8gTm93IGluc2VydCBhICdwJyBiZWZvcmUgJ2RpdicuCi0gICAgICAg
IHAgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9lbGVtZW50KGRvY3VtZW50LCAiUCIsIDAp
OwotICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChwKSk7Ci0gICAg
ICAgIHdlYmtpdF9kb21fbm9kZV9pbnNlcnRfYmVmb3JlKFdFQktJVF9ET01fTk9ERShib2R5KSwg
V0VCS0lUX0RPTV9OT0RFKHApLCBXRUJLSVRfRE9NX05PREUoZGl2KSwgMCk7Ci0gICAgICAgIGdf
YXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9oYXNfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJv
ZHkpKSk7Ci0gICAgICAgIGxpc3QgPSBhZG9wdEdSZWYod2Via2l0X2RvbV9ub2RlX2dldF9jaGls
ZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpKTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lU
X0RPTV9JU19OT0RFX0xJU1QobGlzdC5nZXQoKSkpOwotICAgICAgICBnX2Fzc2VydF9jbXBpbnQo
d2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChsaXN0LmdldCgpKSwgPT0sIDIpOwotICAg
ICAgICBub2RlID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0LmdldCgpLCAwKTsKLSAg
ICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0VMRU1FTlQobm9kZSkpOwotICAgICAg
ICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaXNfc2FtZV9ub2RlKFdFQktJVF9ET01fTk9ERShw
KSwgbm9kZSkpOwotICAgICAgICBub2RlID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0
LmdldCgpLCAxKTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0VMRU1FTlQo
bm9kZSkpOwotICAgICAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaXNfc2FtZV9ub2RlKFdF
QktJVF9ET01fTk9ERShkaXYpLCBub2RlKSk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotCi0gICAgYm9vbCB0ZXN0VGFnTmFtZXMoV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24s
IEdWYXJpYW50KiBhcmdzKQotICAgIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGV4cGVj
dGVkVGFnTmFtZXNbXSA9IHsgIkhUTUwiLCAiSEVBRCIsICJCT0RZIiwgIlZJREVPIiwgIlNPVVJD
RSIsICJWSURFTyIsICJTT1VSQ0UiLCAiSU5QVVQiIH07Ci0KLSAgICAgICAgV2ViS2l0V2ViUGFn
ZSogcGFnZSA9IHdlYmtpdF93ZWJfZXh0ZW5zaW9uX2dldF9wYWdlKGV4dGVuc2lvbiwgd2ViUGFn
ZUZyb21BcmdzKGFyZ3MpKTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX1dFQl9QQUdFKHBh
Z2UpKTsKLSAgICAgICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50ID0gd2Via2l0X3dlYl9w
YWdlX2dldF9kb21fZG9jdW1lbnQocGFnZSk7Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01f
SVNfRE9DVU1FTlQoZG9jdW1lbnQpKTsKLQotICAgICAgICBXZWJLaXRET01Ob2RlTGlzdCogbGlz
dCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRzX2J5X3RhZ19uYW1lKGRvY3VtZW50
LCAiKiIpOwotICAgICAgICBndWxvbmcgbm9kZUNvdW50ID0gd2Via2l0X2RvbV9ub2RlX2xpc3Rf
Z2V0X2xlbmd0aChsaXN0KTsKLSAgICAgICAgZ19hc3NlcnRfY21wdWludChub2RlQ291bnQsID09
LCBHX05fRUxFTUVOVFMoZXhwZWN0ZWRUYWdOYW1lcykpOwotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbm9kZUNvdW50OyBpKyspIHsKLSAgICAgICAgICAgIFdlYktpdERPTU5vZGUq
IG5vZGUgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtKGxpc3QsIGkpOwotICAgICAgICAgICAg
Z19hc3NlcnQoV0VCS0lUX0RPTV9JU19OT0RFKG5vZGUpKTsKLSAgICAgICAgICAgIEdPd25QdHI8
Y2hhcj4gdGFnTmFtZSh3ZWJraXRfZG9tX25vZGVfZ2V0X25vZGVfbmFtZShub2RlKSk7Ci0gICAg
ICAgICAgICBnX2Fzc2VydF9jbXBzdHIodGFnTmFtZS5nZXQoKSwgPT0sIGV4cGVjdGVkVGFnTmFt
ZXNbaV0pOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAg
dmlydHVhbCBib29sIHJ1blRlc3QoY29uc3QgY2hhciogdGVzdE5hbWUsIFdlYktpdFdlYkV4dGVu
c2lvbiogZXh0ZW5zaW9uLCBHVmFyaWFudCogYXJncykKLSAgICB7Ci0gICAgICAgIGlmICghc3Ry
Y21wKHRlc3ROYW1lLCAiaGllcmFyY2h5LW5hdmlnYXRpb24iKSkKLSAgICAgICAgICAgIHJldHVy
biB0ZXN0SGllcmFyY2h5TmF2aWdhdGlvbihleHRlbnNpb24sIGFyZ3MpOwotICAgICAgICBpZiAo
IXN0cmNtcCh0ZXN0TmFtZSwgImluc2VydGlvbiIpKQotICAgICAgICAgICAgcmV0dXJuIHRlc3RJ
bnNlcnRpb24oZXh0ZW5zaW9uLCBhcmdzKTsKLSAgICAgICAgaWYgKCFzdHJjbXAodGVzdE5hbWUs
ICJ0YWctbmFtZXMiKSkKLSAgICAgICAgICAgIHJldHVybiB0ZXN0VGFnTmFtZXMoZXh0ZW5zaW9u
LCBhcmdzKTsKLQotICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotfTsKLQotc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXygoY29uc3Ry
dWN0b3IpKSByZWdpc3RlclRlc3RzKCkKLXsKLSAgICBSRUdJU1RFUl9URVNUKFdlYktpdERPTU5v
ZGVUZXN0LCAiV2ViS2l0RE9NTm9kZS9oaWVyYXJjaHktbmF2aWdhdGlvbiIpOwotICAgIFJFR0lT
VEVSX1RFU1QoV2ViS2l0RE9NTm9kZVRlc3QsICJXZWJLaXRET01Ob2RlL2luc2VydGlvbiIpOwot
ICAgIFJFR0lTVEVSX1RFU1QoV2ViS2l0RE9NTm9kZVRlc3QsICJXZWJLaXRET01Ob2RlL3RhZy1u
YW1lcyIpOwotfQotCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL0ZyYW1lVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9GcmFtZVRlc3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDQ4
NTBmNTIxYjM5YWY3MmEzZmUwMTZkYjczZTcwYjY0ZWE5MTA4Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL0ZyYW1lVGVzdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0g
KgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0g
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0KLSNpbmNsdWRlICJXZWJQcm9jZXNzVGVzdC5oIgotI2luY2x1ZGUgPGdpby9naW8uaD4KLSNp
bmNsdWRlIDx3ZWJraXQyL3dlYmtpdC13ZWItZXh0ZW5zaW9uLmg+Ci0KLWNsYXNzIFdlYktpdEZy
YW1lVGVzdCA6IHB1YmxpYyBXZWJQcm9jZXNzVGVzdCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NPd25QdHI8V2ViUHJvY2Vzc1Rlc3Q+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBX
ZWJLaXRGcmFtZVRlc3QoKSk7IH0KLQotcHJpdmF0ZToKLSAgICBndWludDY0IHdlYlBhZ2VGcm9t
QXJncyhHVmFyaWFudCogYXJncykKLSAgICB7Ci0gICAgICAgIEdWYXJpYW50SXRlciBpdGVyOwot
ICAgICAgICBnX3ZhcmlhbnRfaXRlcl9pbml0KCZpdGVyLCBhcmdzKTsKLQotICAgICAgICBjb25z
dCBjaGFyKiBrZXk7Ci0gICAgICAgIEdWYXJpYW50KiB2YWx1ZTsKLSAgICAgICAgd2hpbGUgKGdf
dmFyaWFudF9pdGVyX2xvb3AoJml0ZXIsICJ7JnN2fSIsICZrZXksICZ2YWx1ZSkpIHsKLSAgICAg
ICAgICAgIGlmICghc3RyY21wKGtleSwgInBhZ2VJRCIpICYmIGdfdmFyaWFudF9jbGFzc2lmeSh2
YWx1ZSkgPT0gR19WQVJJQU5UX0NMQVNTX1VJTlQ2NCkKLSAgICAgICAgICAgICAgICByZXR1cm4g
Z192YXJpYW50X2dldF91aW50NjQodmFsdWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ19hc3Nl
cnRfbm90X3JlYWNoZWQoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgYm9vbCB0
ZXN0TWFpbkZyYW1lKFdlYktpdFdlYkV4dGVuc2lvbiogZXh0ZW5zaW9uLCBHVmFyaWFudCogYXJn
cykKLSAgICB7Ci0gICAgICAgIFdlYktpdFdlYlBhZ2UqIHBhZ2UgPSB3ZWJraXRfd2ViX2V4dGVu
c2lvbl9nZXRfcGFnZShleHRlbnNpb24sIHdlYlBhZ2VGcm9tQXJncyhhcmdzKSk7Ci0gICAgICAg
IGdfYXNzZXJ0KFdFQktJVF9JU19XRUJfUEFHRShwYWdlKSk7Ci0KLSAgICAgICAgV2ViS2l0RnJh
bWUqIGZyYW1lID0gd2Via2l0X3dlYl9wYWdlX2dldF9tYWluX2ZyYW1lKHBhZ2UpOwotICAgICAg
ICBnX2Fzc2VydChXRUJLSVRfSVNfRlJBTUUoZnJhbWUpKTsKLSAgICAgICAgZ19hc3NlcnQod2Vi
a2l0X2ZyYW1lX2lzX21haW5fZnJhbWUoZnJhbWUpKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICBib29sIHRlc3RVUkkoV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24s
IEdWYXJpYW50KiBhcmdzKQotICAgIHsKLSAgICAgICAgV2ViS2l0V2ViUGFnZSogcGFnZSA9IHdl
YmtpdF93ZWJfZXh0ZW5zaW9uX2dldF9wYWdlKGV4dGVuc2lvbiwgd2ViUGFnZUZyb21BcmdzKGFy
Z3MpKTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX1dFQl9QQUdFKHBhZ2UpKTsKLQotICAg
ICAgICBXZWJLaXRGcmFtZSogZnJhbWUgPSB3ZWJraXRfd2ViX3BhZ2VfZ2V0X21haW5fZnJhbWUo
cGFnZSk7Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19GUkFNRShmcmFtZSkpOwotICAgICAg
ICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9wYWdlX2dldF91cmkocGFnZSksID09LCB3ZWJr
aXRfZnJhbWVfZ2V0X3VyaShmcmFtZSkpOwotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LQotICAgIGJvb2wgdGVzdEphdmFTY3JpcHRDb250ZXh0KFdlYktpdFdlYkV4dGVuc2lvbiogZXh0
ZW5zaW9uLCBHVmFyaWFudCogYXJncykKLSAgICB7Ci0gICAgICAgIFdlYktpdFdlYlBhZ2UqIHBh
Z2UgPSB3ZWJraXRfd2ViX2V4dGVuc2lvbl9nZXRfcGFnZShleHRlbnNpb24sIHdlYlBhZ2VGcm9t
QXJncyhhcmdzKSk7Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19XRUJfUEFHRShwYWdlKSk7
Ci0KLSAgICAgICAgV2ViS2l0RnJhbWUqIGZyYW1lID0gd2Via2l0X3dlYl9wYWdlX2dldF9tYWlu
X2ZyYW1lKHBhZ2UpOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfRlJBTUUoZnJhbWUpKTsK
LSAgICAgICAgZ19hc3NlcnQod2Via2l0X2ZyYW1lX2dldF9qYXZhc2NyaXB0X2dsb2JhbF9jb250
ZXh0KGZyYW1lKSk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgdmlydHVh
bCBib29sIHJ1blRlc3QoY29uc3QgY2hhciogdGVzdE5hbWUsIFdlYktpdFdlYkV4dGVuc2lvbiog
ZXh0ZW5zaW9uLCBHVmFyaWFudCogYXJncykKLSAgICB7Ci0gICAgICAgIGlmICghc3RyY21wKHRl
c3ROYW1lLCAibWFpbi1mcmFtZSIpKQotICAgICAgICAgICAgcmV0dXJuIHRlc3RNYWluRnJhbWUo
ZXh0ZW5zaW9uLCBhcmdzKTsKLSAgICAgICAgaWYgKCFzdHJjbXAodGVzdE5hbWUsICJ1cmkiKSkK
LSAgICAgICAgICAgIHJldHVybiB0ZXN0VVJJKGV4dGVuc2lvbiwgYXJncyk7Ci0gICAgICAgIGlm
ICghc3RyY21wKHRlc3ROYW1lLCAiamF2YXNjcmlwdC1jb250ZXh0IikpCi0gICAgICAgICAgICBy
ZXR1cm4gdGVzdEphdmFTY3JpcHRDb250ZXh0KGV4dGVuc2lvbiwgYXJncyk7Ci0KLSAgICAgICAg
Z19hc3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX07
Ci0KLXN0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKGNvbnN0cnVjdG9yKSkgcmVnaXN0ZXJUZXN0
cygpCi17Ci0gICAgUkVHSVNURVJfVEVTVChXZWJLaXRGcmFtZVRlc3QsICJXZWJLaXRGcmFtZS9t
YWluLWZyYW1lIik7Ci0gICAgUkVHSVNURVJfVEVTVChXZWJLaXRGcmFtZVRlc3QsICJXZWJLaXRG
cmFtZS91cmkiKTsKLSAgICBSRUdJU1RFUl9URVNUKFdlYktpdEZyYW1lVGVzdCwgIldlYktpdEZy
YW1lL2phdmFzY3JpcHQtY29udGV4dCIpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMTVlYzdkMTg3ZmE4NGJmOWRjMTIzYTJhZjQ3MzViZjQ2ODFlZjNhMC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBA
IC0xLDMyNiArMCwwIEBACi1pZiBFTkFCTEVfV0VCS0lUMgotCi1URVNUX1BST0dTICs9IFwKLQlQ
cm9ncmFtcy9XZWJLaXQyR09iamVjdEFQSVRlc3RzL0luc3BlY3RvclRlc3RTZXJ2ZXIgXAotCVBy
b2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdEF1dGhlbnRpY2F0aW9uIFwKLQlQcm9n
cmFtcy9XZWJLaXQyR09iamVjdEFQSVRlc3RzL1Rlc3RCYWNrRm9yd2FyZExpc3QgXAotCVByb2dy
YW1zL1dlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdENvbnRleHRNZW51IFwKLQlQcm9ncmFtcy9X
ZWJLaXQyR09iamVjdEFQSVRlc3RzL1Rlc3RDb29raWVNYW5hZ2VyIFwKLQlQcm9ncmFtcy9XZWJL
aXQyR09iamVjdEFQSVRlc3RzL1Rlc3RET01Ob2RlIFwKLQlQcm9ncmFtcy9XZWJLaXQyR09iamVj
dEFQSVRlc3RzL1Rlc3REb3dubG9hZHMgXAotCVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVz
dHMvVGVzdEZyYW1lIFwKLQlQcm9ncmFtcy9XZWJLaXQyR09iamVjdEFQSVRlc3RzL1Rlc3RJbnNw
ZWN0b3IgXAotCVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdEluc3BlY3RvclNl
cnZlciBcCi0JUHJvZ3JhbXMvV2ViS2l0MkdPYmplY3RBUElUZXN0cy9UZXN0TG9hZGVyQ2xpZW50
IFwKLQlQcm9ncmFtcy9XZWJLaXQyR09iamVjdEFQSVRlc3RzL1Rlc3RQcmludGluZyBcCi0JUHJv
Z3JhbXMvV2ViS2l0MkdPYmplY3RBUElUZXN0cy9UZXN0UmVzb3VyY2VzIFwKLQlQcm9ncmFtcy9X
ZWJLaXQyR09iamVjdEFQSVRlc3RzL1Rlc3RTU0wgXAotCVByb2dyYW1zL1dlYktpdDJHT2JqZWN0
QVBJVGVzdHMvVGVzdFVJQ2xpZW50IFwKLQlQcm9ncmFtcy9XZWJLaXQyR09iamVjdEFQSVRlc3Rz
L1Rlc3RXZWJFeHRlbnNpb25zIFwKLQlQcm9ncmFtcy9XZWJLaXQyR09iamVjdEFQSVRlc3RzL1Rl
c3RXZWJLaXRWZXJzaW9uIFwKLQlQcm9ncmFtcy9XZWJLaXQyR09iamVjdEFQSVRlc3RzL1Rlc3RX
ZWJLaXRGYXZpY29uRGF0YWJhc2UgXAotCVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVzdHMv
VGVzdFdlYktpdEZpbmRDb250cm9sbGVyIFwKLQlQcm9ncmFtcy9XZWJLaXQyR09iamVjdEFQSVRl
c3RzL1Rlc3RXZWJLaXRQb2xpY3lDbGllbnQgXAotCVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJ
VGVzdHMvVGVzdFdlYktpdFNldHRpbmdzIFwKLQlQcm9ncmFtcy9XZWJLaXQyR09iamVjdEFQSVRl
c3RzL1Rlc3RXZWJLaXRXZWJDb250ZXh0IFwKLQlQcm9ncmFtcy9XZWJLaXQyR09iamVjdEFQSVRl
c3RzL1Rlc3RXZWJLaXRXZWJWaWV3IFwKLQlQcm9ncmFtcy9XZWJLaXQyR09iamVjdEFQSVRlc3Rz
L1Rlc3RXZWJLaXRXZWJWaWV3R3JvdXAgXAotCVByb2dyYW1zL1dlYktpdDJHT2JqZWN0QVBJVGVz
dHMvVGVzdFdlYlZpZXdFZGl0b3IKLQotbm9pbnN0X1BST0dSQU1TICs9ICQoVEVTVF9QUk9HUykK
LQotaWYgSEFWRV9BVFNQSTIKLVRFU1RfUFJPR1MgKz0gUHJvZ3JhbXMvV2ViS2l0MkdPYmplY3RB
UElUZXN0cy9UZXN0V2ViS2l0QWNjZXNzaWJpbGl0eQotCi1ub2luc3RfUFJPR1JBTVMgKz0gUHJv
Z3JhbXMvV2ViS2l0MkdPYmplY3RBUElUZXN0cy9BY2Nlc3NpYmlsaXR5VGVzdFNlcnZlcgotZW5k
aWYKLQotd2Via2l0Ml90ZXN0c19jcHBmbGFncyA9IFwKLQktRFdFQktJVF9FWEVDX1BBVEg9XCIk
e3NoZWxsIHB3ZH0vJCh0b3BfYnVpbGRkaXIpL1Byb2dyYW1zXCIgXAotCS1EV0VCS0lUX1NSQ19E
SVI9XCIke3NoZWxsIHB3ZH0vJHtzcmNkaXJ9XCIgXAotCS1EV0VCS0lUX0RFUklWRURfU1JDX0RJ
Uj1cIiR7c2hlbGwgcHdkfS8ke3RvcF9idWlsZGRpcn0vRGVyaXZlZFNvdXJjZXNcIiBcCi0JLURX
RUJLSVRfVEVTVF9QTFVHSU5fRElSPVwiJHtzaGVsbCBwd2R9LyR7dG9wX2J1aWxkZGlyfS9UZXN0
TmV0c2NhcGVQbHVnaW4vLmxpYnNcIiBcCi0JLURXRUJLSVRfVEVTVF9XRUJfRVhURU5TSU9OU19E
SVI9XCIke3NoZWxsIHB3ZH0vJHt0b3BfYnVpbGRkaXJ9L0xpYnJhcmllcy9XZWJFeHRlbnNpb25z
Ly5saWJzXCIgXAotCS1EV0VCS0lUX0lOSkVDVEVEX0JVTkRMRV9QQVRIPVwiJHtzaGVsbCBwd2R9
LyQodG9wX2J1aWxkZGlyKS8ubGlic1wiIFwKLQkkKGphdmFzY3JpcHRjb3JlX2NwcGZsYWdzKSBc
Ci0JLUkkKHNyY2RpcikvU291cmNlL0phdmFTY3JpcHRDb3JlIFwKLQktSSQoc3JjZGlyKS9Tb3Vy
Y2UgXAotCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQyIFwKLQktSSQodG9wX2J1aWxkZGlyKS9E
ZXJpdmVkU291cmNlcy9XZWJLaXQyL2luY2x1ZGUgXAotCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2
ZWRTb3VyY2VzL1dlYktpdDIvd2Via2l0Mmd0ayBcCi0JLUkkKHRvcF9idWlsZGRpcikvRGVyaXZl
ZFNvdXJjZXMvV2ViS2l0Mi93ZWJraXQyZ3RrL2luY2x1ZGUgXAotCS1JJChzcmNkaXIpL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrIFwKLQkkKGdsb2JhbF9jcHBmbGFncykgXAotCSQo
RlJFRVRZUEVfQ0ZMQUdTKSBcCi0JJChHTElCX0NGTEFHUykgXAotCSQoR1RLX0NGTEFHUykgXAot
CSQoTElCU09VUF9DRkxBR1MpCi0KLXdlYmtpdDJfdGVzdHNfbGRhZGQgPSBcCi0JTGlicmFyaWVz
L2xpYldlYktpdDJBUElUZXN0Q29yZS5sYSBcCi0JbGliamF2YXNjcmlwdGNvcmVndGstQFdFQktJ
VEdUS19BUElfTUFKT1JfVkVSU0lPTkAuQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkAubGEg
XAotCWxpYndlYmtpdDJndGstQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkAuQFdFQktJVEdU
S19BUElfTUlOT1JfVkVSU0lPTkAubGEgXAotCSQoRlJFRVRZUEVfTElCUykgXAotCSQoR0VPQ0xV
RV9MSUJTKSBcCi0JJChHTElCX0xJQlMpIFwKLQkkKEdUS19MSUJTKSBcCi0JJChMSUJTT1VQX0xJ
QlMpCi0KLXdlYmtpdDJfdGVzdHNfbGRmbGFncyA9IFwKLQktbm8taW5zdGFsbAotCi1Qcm9ncmFt
cy9yZXNvdXJjZXMvd2Via2l0Mmd0ay10ZXN0cy1yZXNvdXJjZXMuZ3Jlc291cmNlOiBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9yZXNvdXJjZXMvd2Via2l0Mmd0ay10ZXN0
cy5ncmVzb3VyY2UueG1sICQoc2hlbGwgJChHTElCX0NPTVBJTEVfUkVTT1VSQ0VTKSAtLXNvdXJj
ZWRpcj0kKHNyY2RpcikgLS1nZW5lcmF0ZS1kZXBlbmRlbmNpZXMgJChzcmNkaXIpL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL3Jlc291cmNlcy93ZWJraXQyZ3RrLXRlc3Rz
LmdyZXNvdXJjZS54bWwpCi0JJChBTV9WX2F0KW1rZGlyIC1wICR7R0VOUFJPR1JBTVN9L3Jlc291
cmNlcwotCSQoQU1fVl9HRU4pICQoR0xJQl9DT01QSUxFX1JFU09VUkNFUykgLS10YXJnZXQ9JEAg
LS1zb3VyY2VkaXI9JChzcmNkaXIpICQ8Ci0KLVByb2dyYW1zL3Jlc291cmNlcy9pbnNwZWN0b3Iv
aW5zcGVjdG9yUGFnZUluZGV4Lmh0bWw6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0
b3JTZXJ2ZXIvZnJvbnQtZW5kL2luc3BlY3RvclBhZ2VJbmRleC5odG1sCi0JJChBTV9WX2F0KW1r
ZGlyIC1wICR7R0VOUFJPR1JBTVN9L3Jlc291cmNlcy9pbnNwZWN0b3IKLQkkKEFNX1ZfR0VOKWNw
ICQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL2Zyb250
LWVuZC9pbnNwZWN0b3JQYWdlSW5kZXguaHRtbCAke0dFTlBST0dSQU1TfS9yZXNvdXJjZXMvaW5z
cGVjdG9yCi0KLURJU1RDTEVBTkZJTEVTICs9IFwKLQlQcm9ncmFtcy9yZXNvdXJjZXMvd2Via2l0
Mmd0ay10ZXN0cy1yZXNvdXJjZXMuZ3Jlc291cmNlIFwKLQlQcm9ncmFtcy9yZXNvdXJjZXMvaW5z
cGVjdG9yL2luc3BlY3RvclBhZ2VJbmRleC5odG1sCi0KLW5vaW5zdF9EQVRBICs9IFwKLQlQcm9n
cmFtcy9yZXNvdXJjZXMvd2Via2l0Mmd0ay10ZXN0cy1yZXNvdXJjZXMuZ3Jlc291cmNlIFwKLQlQ
cm9ncmFtcy9yZXNvdXJjZXMvaW5zcGVjdG9yL2luc3BlY3RvclBhZ2VJbmRleC5odG1sCi0KLW5v
aW5zdF9MVExJQlJBUklFUyArPSBMaWJyYXJpZXMvbGliV2ViS2l0MkFQSVRlc3RDb3JlLmxhCi1M
aWJyYXJpZXNfbGliV2ViS2l0MkFQSVRlc3RDb3JlX2xhX1NPVVJDRVMgPSBcCi0JU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvTG9hZFRyYWNraW5nVGVzdC5jcHAgXAotCVNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0xvYWRUcmFja2luZ1Rlc3QuaCBc
Ci0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViS2l0VGVzdEJ1cy5j
cHAgXAotCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYktpdFRlc3RC
dXMuaCBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViS2l0VGVz
dFNlcnZlci5jcHAgXAotCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dl
YktpdFRlc3RTZXJ2ZXIuaCBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvV2ViUHJvY2Vzc1Rlc3RSdW5uZXIuY3BwIFwKLQlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9XZWJQcm9jZXNzVGVzdFJ1bm5lci5oIFwKLQlTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0TWFpbi5jcHAgXAotCVNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RNYWluLmggXAotCVNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcCBcCi0JU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuaAotTGlicmFyaWVzX2xpYldlYktpdDJB
UElUZXN0Q29yZV9sYV9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKLQotbm9p
bnN0X0xUTElCUkFSSUVTICs9IExpYnJhcmllcy9XZWJFeHRlbnNpb25zL2xpYldlYkV4dGVuc2lv
blRlc3QubGEKLUxpYnJhcmllc19XZWJFeHRlbnNpb25zX2xpYldlYkV4dGVuc2lvblRlc3RfbGFf
U09VUkNFUyA9IFwKLQlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJF
eHRlbnNpb25UZXN0LmNwcAotCi1MaWJyYXJpZXNfV2ViRXh0ZW5zaW9uc19saWJXZWJFeHRlbnNp
b25UZXN0X2xhX0xERkxBR1MgPSBcCi0JLXJwYXRoICR7c2hlbGwgcHdkfS8kKHRvcF9idWlsZGRp
cikvTGlicmFyaWVzL1dlYkV4dGVuc2lvbnMvLmxpYnMgXAotCSQobm9fdW5kZWZpbmVkKSBcCi0J
LWF2b2lkLXZlcnNpb24gXAotCS1tb2R1bGUKLQotTGlicmFyaWVzX1dlYkV4dGVuc2lvbnNfbGli
V2ViRXh0ZW5zaW9uVGVzdF9sYV9DUFBGTEFHUyA9IFwKLQktSSQoc3JjZGlyKS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsgXAotCS1JJCh0b3BfYnVpbGRk
aXIpL0Rlcml2ZWRTb3VyY2VzIFwKLQktSSQodG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcy9X
ZWJLaXQyL3dlYmtpdDJleHRlbnNpb24vaW5jbHVkZSBcCi0JLURXRUJLSVQyX0NPTVBJTEFUSU9O
IFwKLQkkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MpCi0KLUxpYnJhcmllc19XZWJFeHRlbnNpb25z
X2xpYldlYkV4dGVuc2lvblRlc3RfbGFfQ1hYRkxBR1MgPSBcCi0gICAgICAgICQoZ2xvYmFsX2N4
eGZsYWdzKQotCi1MaWJyYXJpZXNfV2ViRXh0ZW5zaW9uc19saWJXZWJFeHRlbnNpb25UZXN0X2xh
X0NGTEFHUyA9IFwKLSAgICAgICAgJChnbG9iYWxfY2ZsYWdzKQotCi0KLW5vaW5zdF9MVExJQlJB
UklFUyArPSBMaWJyYXJpZXMvV2ViRXh0ZW5zaW9ucy9saWJXZWJQcm9jZXNzVGVzdC5sYQotTGli
cmFyaWVzX1dlYkV4dGVuc2lvbnNfbGliV2ViUHJvY2Vzc1Rlc3RfbGFfU09VUkNFUyA9IFwKLQlT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9ET01Ob2RlVGVzdC5jcHAgXAot
CVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0ZyYW1lVGVzdC5jcHAgXAot
CVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlByb2Nlc3NUZXN0LmNw
cCBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViUHJvY2Vzc1Rl
c3QuaAotCi1MaWJyYXJpZXNfV2ViRXh0ZW5zaW9uc19saWJXZWJQcm9jZXNzVGVzdF9sYV9MREZM
QUdTID0gXAotCS1ycGF0aCAke3NoZWxsIHB3ZH0vJCh0b3BfYnVpbGRkaXIpL0xpYnJhcmllcy9X
ZWJFeHRlbnNpb25zLy5saWJzIFwKLQkkKG5vX3VuZGVmaW5lZCkgXAotCS1hdm9pZC12ZXJzaW9u
IFwKLQktbW9kdWxlCi0KLUxpYnJhcmllc19XZWJFeHRlbnNpb25zX2xpYldlYlByb2Nlc3NUZXN0
X2xhX0NQUEZMQUdTID0gXAotCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ayBcCi0JLUkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJj
ZXMgXAotCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvd2Via2l0MmV4
dGVuc2lvbi9pbmNsdWRlIFwKLQktRFdFQktJVDJfQ09NUElMQVRJT04gXAotCSQod2Via2l0Ml90
ZXN0c19jcHBmbGFncykKLQotTGlicmFyaWVzX1dlYkV4dGVuc2lvbnNfbGliV2ViUHJvY2Vzc1Rl
c3RfbGFfQ1hYRkxBR1MgPSBcCi0JJChnbG9iYWxfY3h4ZmxhZ3MpCi0KLUxpYnJhcmllc19XZWJF
eHRlbnNpb25zX2xpYldlYlByb2Nlc3NUZXN0X2xhX0NGTEFHUyA9IFwKLQkkKGdsb2JhbF9jZmxh
Z3MpCi0KLQotRVhUUkFfRElTVCArPSBcCi0JU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3QtY2VydC5wZW0gXAotCVNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL3Jlc291cmNlcy90ZXN0LWtleS5wZW0gXAotCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL3Jlc291cmNlcy93ZWJraXQyZ3RrLXRlc3RzLmdy
ZXNvdXJjZS54bWwgXAotCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL3Jl
c291cmNlcy9saW5rLXRpdGxlLmpzCi0KLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNf
VGVzdFdlYktpdFdlYkNvbnRleHRfU09VUkNFUyA9IFwKLQlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViQ29udGV4dC5jcHAKLVByb2dyYW1zX1dlYktp
dDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktpdFdlYkNvbnRleHRfQ1BQRkxBR1MgPSAkKHdlYmtp
dDJfdGVzdHNfY3BwZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RX
ZWJLaXRXZWJDb250ZXh0X0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNf
V2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2ViS2l0V2ViQ29udGV4dF9MREZMQUdTID0gJCh3
ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNf
VGVzdFdlYktpdFdlYlZpZXdfU09VUkNFUyA9IFwKLQlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlldy5jcHAKLVByb2dyYW1zX1dlYktpdDJHT2Jq
ZWN0QVBJVGVzdHNfVGVzdFdlYktpdFdlYlZpZXdfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNf
Y3BwZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJLaXRXZWJW
aWV3X0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfV2ViS2l0MkdPYmpl
Y3RBUElUZXN0c19UZXN0V2ViS2l0V2ViVmlld19MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xk
ZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdExvYWRlckNsaWVu
dF9TT1VSQ0VTID0gXAotCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rl
c3RMb2FkZXJDbGllbnQuY3BwCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RM
b2FkZXJDbGllbnRfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MpCi1Qcm9ncmFt
c19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RMb2FkZXJDbGllbnRfTERBREQgPSAkKHdlYmtp
dDJfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RMb2Fk
ZXJDbGllbnRfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19X
ZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJLaXRTZXR0aW5nc19TT1VSQ0VTID0gXAotCVNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRTZXR0aW5ncy5j
cHAKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktpdFNldHRpbmdzX0NQ
UEZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0MkdPYmpl
Y3RBUElUZXN0c19UZXN0V2ViS2l0U2V0dGluZ3NfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRh
ZGQpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJLaXRTZXR0aW5nc19M
REZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDJHT2Jq
ZWN0QVBJVGVzdHNfSW5zcGVjdG9yVGVzdFNlcnZlcl9TT1VSQ0VTID0gXAotCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0luc3BlY3RvclRlc3RTZXJ2ZXIuY3BwCi1Qcm9n
cmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX0luc3BlY3RvclRlc3RTZXJ2ZXJfQ1BQRkxBR1Mg
PSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRl
c3RzX0luc3BlY3RvclRlc3RTZXJ2ZXJfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCi1Q
cm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX0luc3BlY3RvclRlc3RTZXJ2ZXJfTERGTEFH
UyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQ
SVRlc3RzX1Rlc3RCYWNrRm9yd2FyZExpc3RfU09VUkNFUyA9IFwKLSAgICAgICAgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdEJhY2tGb3J3YXJkTGlzdC5jcHAKLVBy
b2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdEJhY2tGb3J3YXJkTGlzdF9DUFBGTEFH
UyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJ
VGVzdHNfVGVzdEJhY2tGb3J3YXJkTGlzdF9MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkK
LVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdEJhY2tGb3J3YXJkTGlzdF9MREZM
QUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0
QVBJVGVzdHNfVGVzdFdlYktpdFBvbGljeUNsaWVudF9TT1VSQ0VTID0gXAotICAgICAgICBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0UG9saWN5Q2xpZW50
LmNwcAotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2ViS2l0UG9saWN5Q2xp
ZW50X0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0
MkdPYmplY3RBUElUZXN0c19UZXN0V2ViS2l0UG9saWN5Q2xpZW50X0xEQUREID0gJCh3ZWJraXQy
X3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2ViS2l0
UG9saWN5Q2xpZW50X0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKLQotaWYgSEFW
RV9BVFNQSTIKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfQWNjZXNzaWJpbGl0eVRl
c3RTZXJ2ZXJfU09VUkNFUyA9IFwKLQlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9BY2Nlc3NpYmlsaXR5VGVzdFNlcnZlci5jcHAKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0
QVBJVGVzdHNfQWNjZXNzaWJpbGl0eVRlc3RTZXJ2ZXJfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVz
dHNfY3BwZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX0FjY2Vzc2liaWxp
dHlUZXN0U2VydmVyX0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfV2Vi
S2l0MkdPYmplY3RBUElUZXN0c19BY2Nlc3NpYmlsaXR5VGVzdFNlcnZlcl9MREZMQUdTID0gJCh3
ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNf
VGVzdFdlYktpdEFjY2Vzc2liaWxpdHlfU09VUkNFUyA9IFwKLQlTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0QWNjZXNzaWJpbGl0eS5jcHAKLVByb2dyYW1z
X1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktpdEFjY2Vzc2liaWxpdHlfQ1BQRkxBR1Mg
PSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MpICQoQVRTUEkyX0NGTEFHUykKLVByb2dyYW1zX1dl
YktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktpdEFjY2Vzc2liaWxpdHlfTERBREQgPSAkKHdl
YmtpdDJfdGVzdHNfbGRhZGQpICQoQVRTUEkyX0xJQlMpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVj
dEFQSVRlc3RzX1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5X0xERkxBR1MgPSAkKHdlYmtpdDJfdGVz
dHNfbGRmbGFncykKLWVuZGlmCi0KLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVz
dERvd25sb2Fkc19TT1VSQ0VTID0gXAotICAgICAgICBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9UZXN0RG93bmxvYWRzLmNwcAotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RB
UElUZXN0c19UZXN0RG93bmxvYWRzX0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdz
KQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0RG93bmxvYWRzX0xEQUREID0g
JCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19U
ZXN0RG93bmxvYWRzX0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKLQotUHJvZ3Jh
bXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2ViVmlld0VkaXRvcl9TT1VSQ0VTID0gXAot
ICAgICAgICBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViVmll
d0VkaXRvci5jcHAKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYlZpZXdF
ZGl0b3JfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MpCi1Qcm9ncmFtc19XZWJL
aXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJWaWV3RWRpdG9yX0xEQUREID0gJCh3ZWJraXQyX3Rl
c3RzX2xkYWRkKQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2ViVmlld0Vk
aXRvcl9MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktp
dDJHT2JqZWN0QVBJVGVzdHNfVGVzdFByaW50aW5nX1NPVVJDRVMgPSBcCi0gICAgICAgIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RQcmludGluZy5jcHAKLVByb2dy
YW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFByaW50aW5nX0NQUEZMQUdTID0gJCh3ZWJr
aXQyX3Rlc3RzX2NwcGZsYWdzKSAkKEdUS19VTklYX1BSSU5USU5HX0NGTEFHUykKLVByb2dyYW1z
X1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFByaW50aW5nX0xEQUREID0gJCh3ZWJraXQyX3Rl
c3RzX2xkYWRkKSAkKEdUS19VTklYX1BSSU5USU5HX0xJQlMpCi1Qcm9ncmFtc19XZWJLaXQyR09i
amVjdEFQSVRlc3RzX1Rlc3RQcmludGluZ19MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxh
Z3MpCi0KLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktpdEZhdmljb25E
YXRhYmFzZV9TT1VSQ0VTID0gXAotCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL1Rlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2UuY3BwCi1Qcm9ncmFtc19XZWJLaXQyR09iamVj
dEFQSVRlc3RzX1Rlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VfQ1BQRkxBR1MgPSAkKHdlYmtpdDJf
dGVzdHNfY3BwZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJL
aXRGYXZpY29uRGF0YWJhc2VfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCi1Qcm9ncmFt
c19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VfTERGTEFH
UyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQ
SVRlc3RzX1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxlcl9TT1VSQ0VTID0gXAotCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxlci5jcHAK
LVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYktpdEZpbmRDb250cm9sbGVy
X0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0MkdP
YmplY3RBUElUZXN0c19UZXN0V2ViS2l0RmluZENvbnRyb2xsZXJfTERBREQgPSAkKHdlYmtpdDJf
dGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJLaXRG
aW5kQ29udHJvbGxlcl9MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dy
YW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFJlc291cmNlc19TT1VSQ0VTID0gXAotICAg
ICAgICBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0UmVzb3VyY2Vz
LmNwcAotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0UmVzb3VyY2VzX0NQUEZM
QUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RB
UElUZXN0c19UZXN0UmVzb3VyY2VzX0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQotUHJv
Z3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0UmVzb3VyY2VzX0xERkxBR1MgPSAkKHdl
YmtpdDJfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19U
ZXN0Q29va2llTWFuYWdlcl9TT1VSQ0VTID0gXAotICAgICAgICBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0Q29va2llTWFuYWdlci5jcHAKLVByb2dyYW1zX1dlYktp
dDJHT2JqZWN0QVBJVGVzdHNfVGVzdENvb2tpZU1hbmFnZXJfQ1BQRkxBR1MgPSAkKHdlYmtpdDJf
dGVzdHNfY3BwZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RDb29r
aWVNYW5hZ2VyX0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfV2ViS2l0
MkdPYmplY3RBUElUZXN0c19UZXN0Q29va2llTWFuYWdlcl9MREZMQUdTID0gJCh3ZWJraXQyX3Rl
c3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdEluc3Bl
Y3Rvcl9TT1VSQ0VTID0gXAotICAgICAgICBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9UZXN0SW5zcGVjdG9yLmNwcAotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0
c19UZXN0SW5zcGVjdG9yX0NQUEZMQUdTID0gXAotCSQod2Via2l0Ml90ZXN0c19jcHBmbGFncykK
LVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdEluc3BlY3Rvcl9MREFERCA9ICQo
d2Via2l0Ml90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVz
dEluc3BlY3Rvcl9MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1z
X1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdEluc3BlY3RvclNlcnZlcl9TT1VSQ0VTID0gXAot
CVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RJbnNwZWN0b3JTZXJ2
ZXIuY3BwCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RJbnNwZWN0b3JTZXJ2
ZXJfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQy
R09iamVjdEFQSVRlc3RzX1Rlc3RJbnNwZWN0b3JTZXJ2ZXJfTERBREQgPSAkKHdlYmtpdDJfdGVz
dHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RJbnNwZWN0b3JT
ZXJ2ZXJfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJL
aXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJLaXRWZXJzaW9uX1NPVVJDRVMgPSBcCi0gICAgICAg
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRWZXJzaW9u
LmNwcAotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2ViS2l0VmVyc2lvbl9D
UFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKLVByb2dyYW1zX1dlYktpdDJHT2Jq
ZWN0QVBJVGVzdHNfVGVzdFdlYktpdFZlcnNpb25fTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRh
ZGQpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJLaXRWZXJzaW9uX0xE
RkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MkdPYmpl
Y3RBUElUZXN0c19UZXN0Q29udGV4dE1lbnVfU09VUkNFUyA9IFwKLSAgICAgICAgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdENvbnRleHRNZW51LmNwcAotUHJvZ3Jh
bXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0Q29udGV4dE1lbnVfQ1BQRkxBR1MgPSAkKHdl
YmtpdDJfdGVzdHNfY3BwZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rl
c3RDb250ZXh0TWVudV9MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dl
YktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdENvbnRleHRNZW51X0xERkxBR1MgPSAkKHdlYmtpdDJf
dGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0U1NM
X1NPVVJDRVMgPSBcCi0gICAgICAgIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL1Rlc3RTU0wuY3BwCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RTU0xf
Q1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQyR09i
amVjdEFQSVRlc3RzX1Rlc3RTU0xfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCi1Qcm9n
cmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RTU0xfTERGTEFHUyA9ICQod2Via2l0Ml90
ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJF
eHRlbnNpb25zX1NPVVJDRVMgPSBcCi0gICAgICAgIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL1Rlc3RXZWJFeHRlbnNpb25zLmNwcAotUHJvZ3JhbXNfV2ViS2l0MkdPYmpl
Y3RBUElUZXN0c19UZXN0V2ViRXh0ZW5zaW9uc19DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19j
cHBmbGFncykKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFdlYkV4dGVuc2lv
bnNfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVj
dEFQSVRlc3RzX1Rlc3RXZWJFeHRlbnNpb25zX0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRm
bGFncykKLQotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0V2ViS2l0V2ViVmll
d0dyb3VwX1NPVVJDRVMgPSBcCi0gICAgICAgIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3R3JvdXAuY3BwCi1Qcm9ncmFtc19XZWJLaXQyR09i
amVjdEFQSVRlc3RzX1Rlc3RXZWJLaXRXZWJWaWV3R3JvdXBfQ1BQRkxBR1MgPSAkKHdlYmtpdDJf
dGVzdHNfY3BwZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJL
aXRXZWJWaWV3R3JvdXBfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19X
ZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RXZWJLaXRXZWJWaWV3R3JvdXBfTERGTEFHUyA9ICQo
d2Via2l0Ml90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3Rz
X1Rlc3RET01Ob2RlX1NPVVJDRVMgPSBcCi0gICAgICAgIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL1Rlc3RET01Ob2RlLmNwcAotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RB
UElUZXN0c19UZXN0RE9NTm9kZV9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykK
LVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdERPTU5vZGVfTERBREQgPSAkKHdl
YmtpdDJfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RE
T01Ob2RlX0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKLQotUHJvZ3JhbXNfV2Vi
S2l0MkdPYmplY3RBUElUZXN0c19UZXN0RnJhbWVfU09VUkNFUyA9IFwKLSAgICAgICAgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdEZyYW1lLmNwcAotUHJvZ3JhbXNf
V2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0RnJhbWVfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVz
dHNfY3BwZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RGcmFtZV9M
REFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJ
VGVzdHNfVGVzdEZyYW1lX0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKLQotUHJv
Z3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0QXV0aGVudGljYXRpb25fU09VUkNFUyA9
IFwKLSAgICAgICAgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdEF1
dGhlbnRpY2F0aW9uLmNwcAotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0QXV0
aGVudGljYXRpb25fQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MpCi1Qcm9ncmFt
c19XZWJLaXQyR09iamVjdEFQSVRlc3RzX1Rlc3RBdXRoZW50aWNhdGlvbl9MREFERCA9ICQod2Vi
a2l0Ml90ZXN0c19sZGFkZCkKLVByb2dyYW1zX1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdEF1
dGhlbnRpY2F0aW9uX0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKLQotUHJvZ3Jh
bXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0VUlDbGllbnRfU09VUkNFUyA9IFwKLSAgICAg
ICAgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFVJQ2xpZW50LmNw
cAotUHJvZ3JhbXNfV2ViS2l0MkdPYmplY3RBUElUZXN0c19UZXN0VUlDbGllbnRfQ1BQRkxBR1Mg
PSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MpCi1Qcm9ncmFtc19XZWJLaXQyR09iamVjdEFQSVRl
c3RzX1Rlc3RVSUNsaWVudF9MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKLVByb2dyYW1z
X1dlYktpdDJHT2JqZWN0QVBJVGVzdHNfVGVzdFVJQ2xpZW50X0xERkxBR1MgPSAkKHdlYmtpdDJf
dGVzdHNfbGRmbGFncykKLQotZW5kaWYgIyBFTkFCTEVfV0VCS0lUMgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvSW5zcGVjdG9yVGVzdFNlcnZlci5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9JbnNwZWN0b3JUZXN0
U2VydmVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjEzYjA0M2RmMTZkODlk
MGViYTA0NzcyZmYwZjQxYzZjOGQ5NGJhZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9J
bnNwZWN0b3JUZXN0U2VydmVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcyBMdGQuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAotICog
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IKLSAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lu
Y2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdDIuaD4KLQotc3RhdGlj
IHZvaWQgbG9hZENoYW5nZWRDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiwgV2ViS2l0TG9hZEV2ZW50
IGxvYWRFdmVudCwgZ3BvaW50ZXIpCi17Ci0gICAgLy8gU2VuZCBhIG1lc3NhZ2UgdG8gdGhlIHBh
cmVudCBwcm9jZXNzIHdoZW4gd2UncmUgcmVhZHkuCi0gICAgaWYgKGxvYWRFdmVudCA9PSBXRUJL
SVRfTE9BRF9GSU5JU0hFRCkKLSAgICAgICAgZ19wcmludCgiT0siKTsKLX0KLQotaW50IG1haW4o
aW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotewotICAgIGd0a19pbml0KCZhcmdjLCAmYXJndik7Ci0K
LSAgICAvLyBPdmVyd3JpdGUgV0VCS0lUX0lOU1BFQ1RPUl9TRVJWRVIgdmFyaWFibGUgd2l0aCBk
ZWZhdWx0IHZhbHVlLgotICAgIGdfc2V0ZW52KCJXRUJLSVRfSU5TUEVDVE9SX1NFUlZFUiIsICIx
MjcuMC4wLjE6Mjk5OSIsIFRSVUUpOwotCi0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdF
QktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIHdlYmtpdF9zZXR0aW5n
c19zZXRfZW5hYmxlX2RldmVsb3Blcl9leHRyYXMod2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5n
cyh3ZWJWaWV3KSwgVFJVRSk7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfaHRtbCh3ZWJWaWV3
LAotICAgICAgICAiPGh0bWw+PGJvZHk+PHA+V2ViS2l0R1RLKyBJbnNwZWN0b3IgVGVzdCBTZXJ2
ZXI8L3A+PC9ib2R5PjwvaHRtbD4iLAotICAgICAgICAiaHR0cDovLzEyNy4wLjAuMToyOTk5LyIp
OwotCi0gICAgR3RrV2lkZ2V0KiB3aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RP
UExFVkVMKTsKLSAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIEdU
S19XSURHRVQod2ViVmlldykpOwotICAgIGd0a193aWRnZXRfc2hvd19hbGwod2luZG93KTsKLQot
ICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2luZG93LCAiZGVsZXRlLWV2ZW50IiwgR19DQUxMQkFDSyhn
dGtfbWFpbl9xdWl0KSwgMCk7Ci0gICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAibG9hZC1j
aGFuZ2VkIiwgR19DQUxMQkFDSyhsb2FkQ2hhbmdlZENhbGxiYWNrKSwgMCk7Ci0KLSAgICBndGtf
bWFpbigpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvTG9hZFRyYWNraW5nVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9Mb2FkVHJhY2tpbmdUZXN0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZGYzNDIwNDkyYzk4YjczZWFhZTRkYTkyZmM2NmM2OGJiYjZiY2E0Ni4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9Mb2FkVHJhY2tpbmdUZXN0LmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDIwNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJMb2FkVHJhY2tpbmdUZXN0LmgiCi0KLSNpbmNs
dWRlIDx3ZWJraXQyL3dlYmtpdDIuaD4KLQotc3RhdGljIHZvaWQgbG9hZENoYW5nZWRDYWxsYmFj
ayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRMb2FkRXZlbnQgbG9hZEV2ZW50LCBMb2Fk
VHJhY2tpbmdUZXN0KiB0ZXN0KQotewotICAgIHN3aXRjaCAobG9hZEV2ZW50KSB7Ci0gICAgY2Fz
ZSBXRUJLSVRfTE9BRF9TVEFSVEVEOgotICAgICAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdf
aXNfbG9hZGluZyh3ZWJWaWV3KSk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXN0LT5tX2Fj
dGl2ZVVSSS5kYXRhKCksID09LCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSh3ZWJWaWV3KSk7Ci0g
ICAgICAgIHRlc3QtPnByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQoKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBXRUJLSVRfTE9BRF9SRURJUkVDVEVEOgotICAgICAgICBnX2Fzc2VydCh3ZWJraXRf
d2ViX3ZpZXdfaXNfbG9hZGluZyh3ZWJWaWV3KSk7Ci0gICAgICAgIHRlc3QtPm1fYWN0aXZlVVJJ
ID0gd2Via2l0X3dlYl92aWV3X2dldF91cmkod2ViVmlldyk7Ci0gICAgICAgIGlmICghdGVzdC0+
bV9yZWRpcmVjdFVSSS5pc051bGwoKSkKLSAgICAgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXN0
LT5tX3JlZGlyZWN0VVJJLmRhdGEoKSwgPT0sIHRlc3QtPm1fYWN0aXZlVVJJLmRhdGEoKSk7Ci0g
ICAgICAgIHRlc3QtPnByb3Zpc2lvbmFsTG9hZFJlY2VpdmVkU2VydmVyUmVkaXJlY3QoKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXRUJLSVRfTE9BRF9DT01NSVRURUQ6IHsKLSAgICAgICAg
Z19hc3NlcnQod2Via2l0X3dlYl92aWV3X2lzX2xvYWRpbmcod2ViVmlldykpOwotICAgICAgICBn
X2Fzc2VydF9jbXBzdHIodGVzdC0+bV9hY3RpdmVVUkkuZGF0YSgpLCA9PSwgd2Via2l0X3dlYl92
aWV3X2dldF91cmkod2ViVmlldykpOwotCi0gICAgICAgIC8vIENoZWNrIHRoYXQgb24gY29tbWl0
dGVkIHdlIGFsd2F5cyBoYXZlIGEgbWFpbiByZXNvdXJjZSB3aXRoIGEgcmVzcG9uc2UuCi0gICAg
ICAgIFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSA9IHdlYmtpdF93ZWJfdmlld19nZXRfbWFp
bl9yZXNvdXJjZSh3ZWJWaWV3KTsKLSAgICAgICAgZ19hc3NlcnQocmVzb3VyY2UpOwotICAgICAg
ICBnX2Fzc2VydCh3ZWJraXRfd2ViX3Jlc291cmNlX2dldF9yZXNwb25zZShyZXNvdXJjZSkpOwot
Ci0gICAgICAgIHRlc3QtPmxvYWRDb21taXR0ZWQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIGNhc2UgV0VCS0lUX0xPQURfRklOSVNIRUQ6Ci0gICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRf
d2ViX3ZpZXdfaXNfbG9hZGluZyh3ZWJWaWV3KSk7Ci0gICAgICAgIGlmICghdGVzdC0+bV9sb2Fk
RmFpbGVkKQotICAgICAgICAgICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPm1fYWN0aXZlVVJJLmRh
dGEoKSwgPT0sIHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKHdlYlZpZXcpKTsKLSAgICAgICAgdGVz
dC0+bG9hZEZpbmlzaGVkKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBsb2FkRmFp
bGVkQ2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0TG9hZEV2ZW50IGxvYWRF
dmVudCwgY29uc3QgY2hhciogZmFpbGluZ1VSSSwgR0Vycm9yKiBlcnJvciwgTG9hZFRyYWNraW5n
VGVzdCogdGVzdCkKLXsKLSAgICB0ZXN0LT5tX2xvYWRGYWlsZWQgPSB0cnVlOwotICAgIHRlc3Qt
Pm1fZXJyb3Iuc2V0KGdfZXJyb3JfY29weShlcnJvcikpOwotCi0gICAgc3dpdGNoIChsb2FkRXZl
bnQpIHsKLSAgICBjYXNlIFdFQktJVF9MT0FEX1NUQVJURUQ6Ci0gICAgICAgIGdfYXNzZXJ0KCF3
ZWJraXRfd2ViX3ZpZXdfaXNfbG9hZGluZyh3ZWJWaWV3KSk7Ci0gICAgICAgIGdfYXNzZXJ0X2Nt
cHN0cih0ZXN0LT5tX2FjdGl2ZVVSSS5kYXRhKCksID09LCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3Vy
aSh3ZWJWaWV3KSk7Ci0gICAgICAgIGdfYXNzZXJ0KGVycm9yKTsKLSAgICAgICAgdGVzdC0+cHJv
dmlzaW9uYWxMb2FkRmFpbGVkKGZhaWxpbmdVUkksIGVycm9yKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBXRUJLSVRfTE9BRF9DT01NSVRURUQ6Ci0gICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRf
d2ViX3ZpZXdfaXNfbG9hZGluZyh3ZWJWaWV3KSk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cih0
ZXN0LT5tX2FjdGl2ZVVSSS5kYXRhKCksID09LCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSh3ZWJW
aWV3KSk7Ci0gICAgICAgIGdfYXNzZXJ0KGVycm9yKTsKLSAgICAgICAgdGVzdC0+bG9hZEZhaWxl
ZChmYWlsaW5nVVJJLCBlcnJvcik7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBlc3Rp
bWF0ZWRQcm9ncmVzc0NoYW5nZWRDYWxsYmFjayhHT2JqZWN0KiwgR1BhcmFtU3BlYyosIExvYWRU
cmFja2luZ1Rlc3QqIHRlc3QpCi17Ci0gICAgdGVzdC0+ZXN0aW1hdGVkUHJvZ3Jlc3NDaGFuZ2Vk
KCk7Ci19Ci0KLUxvYWRUcmFja2luZ1Rlc3Q6OkxvYWRUcmFja2luZ1Rlc3QoKQotICAgIDogbV9y
dW5Mb2FkVW50aWxDb21wbGV0aW9uKGZhbHNlKQotICAgICwgbV9sb2FkRmFpbGVkKGZhbHNlKQot
ewotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAibG9hZC1jaGFuZ2VkIiwgR19DQUxM
QkFDSyhsb2FkQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdCht
X3dlYlZpZXcsICJsb2FkLWZhaWxlZCIsIEdfQ0FMTEJBQ0sobG9hZEZhaWxlZENhbGxiYWNrKSwg
dGhpcyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJub3RpZnk6OmVzdGltYXRl
ZC1sb2FkLXByb2dyZXNzIiwgR19DQUxMQkFDSyhlc3RpbWF0ZWRQcm9ncmVzc0NoYW5nZWRDYWxs
YmFjayksIHRoaXMpOwotCi0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19nZXRfdXJpKG1f
d2ViVmlldykpOwotfQotCi1Mb2FkVHJhY2tpbmdUZXN0Ojp+TG9hZFRyYWNraW5nVGVzdCgpCi17
Ci0gICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fd2ViVmlldywgR19T
SUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7Ci19Ci0KLXZvaWQgTG9hZFRyYWNr
aW5nVGVzdDo6d2FpdFVudGlsTG9hZEZpbmlzaGVkKCkKLXsKLSAgICBtX2VzdGltYXRlZFByb2dy
ZXNzID0gMDsKLSAgICBtX3J1bkxvYWRVbnRpbENvbXBsZXRpb24gPSB0cnVlOwotICAgIGdfbWFp
bl9sb29wX3J1bihtX21haW5Mb29wKTsKLX0KLQotdm9pZCBMb2FkVHJhY2tpbmdUZXN0Ojpwcm92
aXNpb25hbExvYWRTdGFydGVkKCkKLXsKLSAgICBtX2xvYWRFdmVudHMuYXBwZW5kKFByb3Zpc2lv
bmFsTG9hZFN0YXJ0ZWQpOwotfQotCi12b2lkIExvYWRUcmFja2luZ1Rlc3Q6OnByb3Zpc2lvbmFs
TG9hZFJlY2VpdmVkU2VydmVyUmVkaXJlY3QoKQotewotICAgIG1fbG9hZEV2ZW50cy5hcHBlbmQo
UHJvdmlzaW9uYWxMb2FkUmVjZWl2ZWRTZXJ2ZXJSZWRpcmVjdCk7Ci19Ci0KLXZvaWQgTG9hZFRy
YWNraW5nVGVzdDo6cHJvdmlzaW9uYWxMb2FkRmFpbGVkKGNvbnN0IGdjaGFyKiBmYWlsaW5nVVJJ
LCBHRXJyb3IqIGVycm9yKQotewotICAgIG1fbG9hZEV2ZW50cy5hcHBlbmQoUHJvdmlzaW9uYWxM
b2FkRmFpbGVkKTsKLX0KLQotdm9pZCBMb2FkVHJhY2tpbmdUZXN0Ojpsb2FkQ29tbWl0dGVkKCkK
LXsKLSAgICBtX2xvYWRFdmVudHMuYXBwZW5kKExvYWRDb21taXR0ZWQpOwotfQotCi12b2lkIExv
YWRUcmFja2luZ1Rlc3Q6OmxvYWRGaW5pc2hlZCgpCi17Ci0gICAgbV9sb2FkRXZlbnRzLmFwcGVu
ZChMb2FkRmluaXNoZWQpOwotICAgIGlmIChtX3J1bkxvYWRVbnRpbENvbXBsZXRpb24pCi0gICAg
ICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7Ci19Ci0KLXZvaWQgTG9hZFRyYWNraW5n
VGVzdDo6bG9hZEZhaWxlZChjb25zdCBnY2hhciogZmFpbGluZ1VSSSwgR0Vycm9yKiBlcnJvcikK
LXsKLSAgICBtX2xvYWRFdmVudHMuYXBwZW5kKExvYWRGYWlsZWQpOwotfQotCi12b2lkIExvYWRU
cmFja2luZ1Rlc3Q6OmVzdGltYXRlZFByb2dyZXNzQ2hhbmdlZCgpCi17Ci0gICAgZG91YmxlIHBy
b2dyZXNzID0gd2Via2l0X3dlYl92aWV3X2dldF9lc3RpbWF0ZWRfbG9hZF9wcm9ncmVzcyhtX3dl
YlZpZXcpOwotICAgIGdfYXNzZXJ0X2NtcGZsb2F0KG1fZXN0aW1hdGVkUHJvZ3Jlc3MsIDwsIHBy
b2dyZXNzKTsKLSAgICBtX2VzdGltYXRlZFByb2dyZXNzID0gcHJvZ3Jlc3M7Ci19Ci0KLXZvaWQg
TG9hZFRyYWNraW5nVGVzdDo6bG9hZFVSSShjb25zdCBjaGFyKiB1cmkpCi17Ci0gICAgbV9sb2Fk
RXZlbnRzLmNsZWFyKCk7Ci0gICAgbV9lc3RpbWF0ZWRQcm9ncmVzcyA9IDA7Ci0gICAgbV9lcnJv
ci5jbGVhcigpOwotICAgIFdlYlZpZXdUZXN0Ojpsb2FkVVJJKHVyaSk7Ci19Ci0KLXZvaWQgTG9h
ZFRyYWNraW5nVGVzdDo6bG9hZEh0bWwoY29uc3QgY2hhciogaHRtbCwgY29uc3QgY2hhciogYmFz
ZVVSSSkKLXsKLSAgICBtX2xvYWRFdmVudHMuY2xlYXIoKTsKLSAgICBtX2VzdGltYXRlZFByb2dy
ZXNzID0gMDsKLSAgICBtX2Vycm9yLmNsZWFyKCk7Ci0gICAgV2ViVmlld1Rlc3Q6OmxvYWRIdG1s
KGh0bWwsIGJhc2VVUkkpOwotfQotCi12b2lkIExvYWRUcmFja2luZ1Rlc3Q6OmxvYWRQbGFpblRl
eHQoY29uc3QgY2hhciogcGxhaW5UZXh0KQotewotICAgIG1fbG9hZEV2ZW50cy5jbGVhcigpOwot
ICAgIG1fZXN0aW1hdGVkUHJvZ3Jlc3MgPSAwOwotICAgIG1fZXJyb3IuY2xlYXIoKTsKLSAgICBX
ZWJWaWV3VGVzdDo6bG9hZFBsYWluVGV4dChwbGFpblRleHQpOwotfQotCi12b2lkIExvYWRUcmFj
a2luZ1Rlc3Q6OmxvYWRSZXF1ZXN0KFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QpCi17Ci0gICAg
bV9sb2FkRXZlbnRzLmNsZWFyKCk7Ci0gICAgbV9lc3RpbWF0ZWRQcm9ncmVzcyA9IDA7Ci0gICAg
bV9lcnJvci5jbGVhcigpOwotICAgIFdlYlZpZXdUZXN0Ojpsb2FkUmVxdWVzdChyZXF1ZXN0KTsK
LX0KLQotdm9pZCBMb2FkVHJhY2tpbmdUZXN0OjpyZWxvYWQoKQotewotICAgIG1fbG9hZEV2ZW50
cy5jbGVhcigpOwotICAgIG1fZXN0aW1hdGVkUHJvZ3Jlc3MgPSAwOwotICAgIG1fZXJyb3IuY2xl
YXIoKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfcmVsb2FkKG1fd2ViVmlldyk7Ci19Ci0KLXZvaWQg
TG9hZFRyYWNraW5nVGVzdDo6Z29CYWNrKCkKLXsKLSAgICBtX2xvYWRFdmVudHMuY2xlYXIoKTsK
LSAgICBtX2VzdGltYXRlZFByb2dyZXNzID0gMDsKLSAgICBtX2Vycm9yLmNsZWFyKCk7Ci0gICAg
V2ViVmlld1Rlc3Q6OmdvQmFjaygpOwotfQotCi12b2lkIExvYWRUcmFja2luZ1Rlc3Q6OmdvRm9y
d2FyZCgpCi17Ci0gICAgbV9sb2FkRXZlbnRzLmNsZWFyKCk7Ci0gICAgbV9lc3RpbWF0ZWRQcm9n
cmVzcyA9IDA7Ci0gICAgbV9lcnJvci5jbGVhcigpOwotICAgIFdlYlZpZXdUZXN0Ojpnb0Zvcndh
cmQoKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL0xvYWRUcmFja2luZ1Rlc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL0xvYWRUcmFja2luZ1Rlc3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YTNjZjc4NDNkOTI3MTRiNjlhZTBhYzIyYTZmZmVhY2VkYjg2ZjFlZS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9Mb2FkVHJhY2tpbmdUZXN0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgTG9h
ZFRyYWNraW5nVGVzdF9oCi0jZGVmaW5lIExvYWRUcmFja2luZ1Rlc3RfaAotCi0jaW5jbHVkZSAi
VGVzdE1haW4uaCIKLSNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgotI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KLQotY2xhc3MgTG9hZFRyYWNraW5nVGVzdCA6IHB1YmxpYyBXZWJWaWV3VGVzdCB7Ci1w
dWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShMb2FkVHJhY2tpbmdUZXN0KTsKLSAg
ICBMb2FkVHJhY2tpbmdUZXN0KCk7Ci0gICAgdmlydHVhbCB+TG9hZFRyYWNraW5nVGVzdCgpOwot
ICAgIHZvaWQgd2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcHJv
dmlzaW9uYWxMb2FkU3RhcnRlZCgpOwotICAgIHZpcnR1YWwgdm9pZCBwcm92aXNpb25hbExvYWRS
ZWNlaXZlZFNlcnZlclJlZGlyZWN0KCk7Ci0gICAgdmlydHVhbCB2b2lkIHByb3Zpc2lvbmFsTG9h
ZEZhaWxlZChjb25zdCBnY2hhciogZmFpbGluZ1VSSSwgR0Vycm9yKik7Ci0gICAgdmlydHVhbCB2
b2lkIGxvYWRDb21taXR0ZWQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZEZpbmlzaGVkKCk7Ci0g
ICAgdmlydHVhbCB2b2lkIGxvYWRGYWlsZWQoY29uc3QgY2hhciogZmFpbGluZ1VSSSwgR0Vycm9y
Kik7Ci0gICAgdmlydHVhbCB2b2lkIGVzdGltYXRlZFByb2dyZXNzQ2hhbmdlZCgpOwotCi0gICAg
dm9pZCBsb2FkVVJJKGNvbnN0IGNoYXIqIHVyaSk7Ci0gICAgdm9pZCBsb2FkSHRtbChjb25zdCBj
aGFyKiBodG1sLCBjb25zdCBjaGFyKiBiYXNlVVJJKTsKLSAgICB2b2lkIGxvYWRQbGFpblRleHQo
Y29uc3QgY2hhciogcGxhaW5UZXh0KTsKLSAgICB2b2lkIGxvYWRSZXF1ZXN0KFdlYktpdFVSSVJl
cXVlc3QqKTsKLSAgICB2b2lkIHJlbG9hZCgpOwotICAgIHZvaWQgZ29CYWNrKCk7Ci0gICAgdm9p
ZCBnb0ZvcndhcmQoKTsKLQotICAgIHZvaWQgc2V0UmVkaXJlY3RVUkkoY29uc3QgY2hhciogdXJp
KSB7IG1fcmVkaXJlY3RVUkkgPSB1cmk7IH0KLQotICAgIGVudW0gTG9hZEV2ZW50cyB7Ci0gICAg
ICAgIFByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQsCi0gICAgICAgIFByb3Zpc2lvbmFsTG9hZFJlY2Vp
dmVkU2VydmVyUmVkaXJlY3QsCi0gICAgICAgIFByb3Zpc2lvbmFsTG9hZEZhaWxlZCwKLSAgICAg
ICAgTG9hZENvbW1pdHRlZCwKLSAgICAgICAgTG9hZEZpbmlzaGVkLAotICAgICAgICBMb2FkRmFp
bGVkCi0gICAgfTsKLSAgICBib29sIG1fcnVuTG9hZFVudGlsQ29tcGxldGlvbjsKLSAgICBib29s
IG1fbG9hZEZhaWxlZDsKLSAgICBHT3duUHRyPEdFcnJvcj4gbV9lcnJvcjsKLSAgICBWZWN0b3I8
TG9hZEV2ZW50cz4gbV9sb2FkRXZlbnRzOwotICAgIGZsb2F0IG1fZXN0aW1hdGVkUHJvZ3Jlc3M7
Ci0gICAgQ1N0cmluZyBtX3JlZGlyZWN0VVJJOwotfTsKLQotI2VuZGlmIC8vIExvYWRUcmFja2lu
Z1Rlc3RfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvVGVzdEF1dGhlbnRpY2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL1Rlc3RBdXRoZW50aWNhdGlvbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGVkZTQyMjU1NmMwNTBkMzE5MjAxZTliYWJiMGJmYzBmOGQ4NjJhNTkuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdEF1dGhlbnRpY2F0aW9uLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDI4NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwu
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTG9hZFRyYWNraW5nVGVzdC5oIgotI2lu
Y2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRy
Lmg+Ci0KLXN0YXRpYyBXZWJLaXRUZXN0U2VydmVyKiBrU2VydmVyOwotCi1jbGFzcyBBdXRoZW50
aWNhdGlvblRlc3Q6IHB1YmxpYyBMb2FkVHJhY2tpbmdUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtF
X0dMSUJfVEVTVF9GSVhUVVJFKEF1dGhlbnRpY2F0aW9uVGVzdCk7Ci0KLSAgICBBdXRoZW50aWNh
dGlvblRlc3QoKQotICAgIHsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJh
dXRoZW50aWNhdGUiLCBHX0NBTExCQUNLKHJ1bkF1dGhlbnRpY2F0aW9uQ2FsbGJhY2spLCB0aGlz
KTsKLSAgICB9Ci0KLSAgICB+QXV0aGVudGljYXRpb25UZXN0KCkKLSAgICB7Ci0gICAgICAgIGdf
c2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3dlYlZpZXcsIEdfU0lHTkFMX01B
VENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOwotICAgIH0KLQotICAgIHN0YXRpYyBpbnQgYXV0
aGVudGljYXRpb25SZXRyaWVzOwotICAgIHN0YXRpYyBib29sIGF1dGhlbnRpY2F0aW9uQ2FuY2Vs
bGVkUmVjZWl2ZWQ7Ci0KLSAgICB2b2lkIGxvYWRVUkkoY29uc3QgY2hhciogdXJpKQotICAgIHsK
LSAgICAgICAgLy8gUmVzZXQgdGhlIHJldHJ5IGNvdW50IG9mIHRoZSBmYWtlIHNlcnZlciB3aGVu
IGEgcGFnZSBpcyBsb2FkZWQuCi0gICAgICAgIGF1dGhlbnRpY2F0aW9uUmV0cmllcyA9IDA7Ci0g
ICAgICAgIGF1dGhlbnRpY2F0aW9uQ2FuY2VsbGVkUmVjZWl2ZWQgPSBmYWxzZTsKLSAgICAgICAg
TG9hZFRyYWNraW5nVGVzdDo6bG9hZFVSSSh1cmkpOwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9v
bGVhbiBydW5BdXRoZW50aWNhdGlvbkNhbGxiYWNrKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRBdXRo
ZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QsIEF1dGhlbnRpY2F0aW9uVGVzdCogdGVzdCkKLSAg
ICB7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QocmVxdWVzdCwgImNhbmNlbGxlZCIsIEdfQ0FM
TEJBQ0soYXV0aGVudGljYXRpb25DYW5jZWxsZWRDYWxsYmFjayksIHRlc3QpOwotICAgICAgICB0
ZXN0LT5ydW5BdXRoZW50aWNhdGlvbihyZXF1ZXN0KTsKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0g
ICAgfQotCi0gICAgc3RhdGljIHZvaWQgYXV0aGVudGljYXRpb25DYW5jZWxsZWRDYWxsYmFjayhX
ZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqLCBBdXRoZW50aWNhdGlvblRlc3QqKQotICAgIHsK
LSAgICAgICAgYXV0aGVudGljYXRpb25DYW5jZWxsZWRSZWNlaXZlZCA9IHRydWU7Ci0gICAgfQot
Ci0gICAgdm9pZCBydW5BdXRoZW50aWNhdGlvbihXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3Qq
IHJlcXVlc3QpCi0gICAgewotICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZp
bmlzaGVzKEdfT0JKRUNUKHJlcXVlc3QpKTsKLSAgICAgICAgbV9hdXRoZW50aWNhdGlvblJlcXVl
c3QgPSByZXF1ZXN0OwotICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3ApOwotICAg
IH0KLQotICAgIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogd2FpdEZvckF1dGhlbnRpY2F0
aW9uUmVxdWVzdCgpCi0gICAgewotICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7
Ci0gICAgICAgIHJldHVybiBtX2F1dGhlbnRpY2F0aW9uUmVxdWVzdC5nZXQoKTsKLSAgICB9Ci0K
LXByaXZhdGU6Ci0gICAgR1JlZlB0cjxXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3Q+IG1fYXV0
aGVudGljYXRpb25SZXF1ZXN0OwotfTsKLQotaW50IEF1dGhlbnRpY2F0aW9uVGVzdDo6YXV0aGVu
dGljYXRpb25SZXRyaWVzID0gMDsKLWJvb2wgQXV0aGVudGljYXRpb25UZXN0OjphdXRoZW50aWNh
dGlvbkNhbmNlbGxlZFJlY2VpdmVkID0gZmFsc2U7Ci0KLXN0YXRpYyBjb25zdCBjaGFyIGF1dGhU
ZXN0VXNlcm5hbWVbXSA9ICJ1c2VybmFtZSI7Ci1zdGF0aWMgY29uc3QgY2hhciBhdXRoVGVzdFBh
c3N3b3JkW10gPSAicGFzc3dvcmQiOwotc3RhdGljIGNvbnN0IGNoYXIgYXV0aEV4cGVjdGVkU3Vj
Y2Vzc1RpdGxlW10gPSAiV2ViS2l0Mkd0aysgQXV0aGVudGljYXRpb24gdGVzdCI7Ci1zdGF0aWMg
Y29uc3QgY2hhciBhdXRoRXhwZWN0ZWRGYWlsdXJlVGl0bGVbXSA9ICI0MDEgQXV0aG9yaXphdGlv
biBSZXF1aXJlZCI7Ci1zdGF0aWMgY29uc3QgY2hhciBhdXRoRXhwZWN0ZWRBdXRob3JpemF0aW9u
W10gPSAiQmFzaWMgZFhObGNtNWhiV1U2Y0dGemMzZHZjbVE9IjsgLy8gQmFzZTY0IGVuY29kaW5n
IG9mICJ1c2VybmFtZTpwYXNzd29yZCIuCi1zdGF0aWMgY29uc3QgY2hhciBhdXRoU3VjY2Vzc0hU
TUxTdHJpbmdbXSA9Ci0gICAgIjxodG1sPiIKLSAgICAiPGhlYWQ+PHRpdGxlPldlYktpdDJHdGsr
IEF1dGhlbnRpY2F0aW9uIHRlc3Q8L3RpdGxlPjwvaGVhZD4iCi0gICAgIjxib2R5PjwvYm9keT48
L2h0bWw+IjsKLXN0YXRpYyBjb25zdCBjaGFyIGF1dGhGYWlsdXJlSFRNTFN0cmluZ1tdID0KLSAg
ICAiPGh0bWw+IgotICAgICI8aGVhZD48dGl0bGU+NDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQ8
L3RpdGxlPjwvaGVhZD4iCi0gICAgIjxib2R5PjwvYm9keT48L2h0bWw+IjsKLQotc3RhdGljIHZv
aWQgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvblJlcXVlc3QoQXV0aGVudGljYXRpb25UZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIC8vIFRlc3QgYXV0aGVudGljYXRpb24gcmVxdWVz
dCBnZXR0ZXJzIG1hdGNoIHNvdXAgYXV0aGVudGljYXRpb24gaGVhZGVyLgotICAgIHRlc3QtPmxv
YWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2F1dGgtdGVzdC5odG1sIikuZGF0YSgpKTsK
LSAgICBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QgPSB0ZXN0LT53YWl0Rm9y
QXV0aGVudGljYXRpb25SZXF1ZXN0KCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9hdXRo
ZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9ob3N0KHJlcXVlc3QpLCA9PSwgc291cF91cmlfZ2V0X2hv
c3Qoa1NlcnZlci0+YmFzZVVSSSgpKSk7Ci0gICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfYXV0
aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcG9ydChyZXF1ZXN0KSwgPT0sIHNvdXBfdXJpX2dldF9w
b3J0KGtTZXJ2ZXItPmJhc2VVUkkoKSkpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfYXV0
aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcmVhbG0ocmVxdWVzdCksID09LCAibXkgcmVhbG0iKTsK
LSAgICBnX2Fzc2VydCh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfc2NoZW1lKHJl
cXVlc3QpID09IFdFQktJVF9BVVRIRU5USUNBVElPTl9TQ0hFTUVfSFRUUF9CQVNJQyk7Ci0gICAg
Z19hc3NlcnQoIXdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2lzX2Zvcl9wcm94eShyZXF1
ZXN0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2lzX3Jl
dHJ5KHJlcXVlc3QpKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlv
bkNhbmNlbChBdXRoZW50aWNhdGlvblRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAg
Ly8gVGVzdCBjYW5jZWwuCi0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRo
KCIvYXV0aC10ZXN0Lmh0bWwiKS5kYXRhKCkpOwotICAgIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVx
dWVzdCogcmVxdWVzdCA9IHRlc3QtPndhaXRGb3JBdXRoZW50aWNhdGlvblJlcXVlc3QoKTsKLSAg
ICB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jYW5jZWwocmVxdWVzdCk7Ci0gICAgLy8g
U2VydmVyIGRvZXNuJ3QgYXNrIGZvciBuZXcgY3JlZGVudGlhbHMuCi0gICAgdGVzdC0+d2FpdFVu
dGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZl
bnRzLnNpemUoKSwgPT0sIDMpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVu
dHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5n
VGVzdDo6UHJvdmlzaW9uYWxMb2FkRmFpbGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+
bV9sb2FkRXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKLQot
ICAgIGdfYXNzZXJ0X2Vycm9yKHRlc3QtPm1fZXJyb3IuZ2V0KCksIFdFQktJVF9ORVRXT1JLX0VS
Uk9SLCBXRUJLSVRfTkVUV09SS19FUlJPUl9DQU5DRUxMRUQpOwotfQotCi1zdGF0aWMgdm9pZCB0
ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uTG9hZENhbmNlbGxlZChBdXRoZW50aWNhdGlvblRlc3Qq
IHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRV
UklGb3JQYXRoKCIvYXV0aC10ZXN0Lmh0bWwiKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRGb3JB
dXRoZW50aWNhdGlvblJlcXVlc3QoKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfc3RvcF9sb2FkaW5n
KHRlc3QtPm1fd2ViVmlldyk7Ci0gICAgLy8gRXhwZWN0IGVtcHR5IHBhZ2UuCi0gICAgdGVzdC0+
d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgZ19hc3NlcnQodGVzdC0+YXV0aGVudGljYXRp
b25DYW5jZWxsZWRSZWNlaXZlZCk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2Fk
RXZlbnRzLnNpemUoKSwgPT0sIDMpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRF
dmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsK
LSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNr
aW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkRmFpbGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVz
dC0+bV9sb2FkRXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsK
LQotICAgIGdfYXNzZXJ0X2Vycm9yKHRlc3QtPm1fZXJyb3IuZ2V0KCksIFdFQktJVF9ORVRXT1JL
X0VSUk9SLCBXRUJLSVRfTkVUV09SS19FUlJPUl9DQU5DRUxMRUQpOwotfQotCi1zdGF0aWMgdm9p
ZCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uRmFpbHVyZShBdXRoZW50aWNhdGlvblRlc3QqIHRl
c3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgLy8gVGVzdCBhdXRoZW50aWNhdGlvbiBmYWlsdXJl
cy4KLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9hdXRoLXRlc3Qu
aHRtbCIpLmRhdGEoKSk7Ci0gICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0
ID0gdGVzdC0+d2FpdEZvckF1dGhlbnRpY2F0aW9uUmVxdWVzdCgpOwotICAgIGdfYXNzZXJ0KCF3
ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9pc19yZXRyeShyZXF1ZXN0KSk7Ci0gICAgV2Vi
S2l0Q3JlZGVudGlhbCogY3JlZGVudGlhbCA9IHdlYmtpdF9jcmVkZW50aWFsX25ldyhhdXRoVGVz
dFVzZXJuYW1lLCAid3JvbmdwYXNzd29yZCIsIFdFQktJVF9DUkVERU5USUFMX1BFUlNJU1RFTkNF
X05PTkUpOwotICAgIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2F1dGhlbnRpY2F0ZShy
ZXF1ZXN0LCBjcmVkZW50aWFsKTsKLSAgICB3ZWJraXRfY3JlZGVudGlhbF9mcmVlKGNyZWRlbnRp
YWwpOwotICAgIC8vIEV4cGVjdCBhIHNlY29uZCBhdXRoZW50aWNhdGlvbiByZXF1ZXN0LgotICAg
IHJlcXVlc3QgPSB0ZXN0LT53YWl0Rm9yQXV0aGVudGljYXRpb25SZXF1ZXN0KCk7Ci0gICAgZ19h
c3NlcnQod2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfaXNfcmV0cnkocmVxdWVzdCkpOwot
ICAgIC8vIFRlc3Qgc2Vjb25kIGZhaWx1cmUuCi0gICAgY3JlZGVudGlhbCA9IHdlYmtpdF9jcmVk
ZW50aWFsX25ldyhhdXRoVGVzdFVzZXJuYW1lLCAid3JvbmdwYXNzd29yZDIiLCBXRUJLSVRfQ1JF
REVOVElBTF9QRVJTSVNURU5DRV9OT05FKTsKLSAgICB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVx
dWVzdF9hdXRoZW50aWNhdGUocmVxdWVzdCwgY3JlZGVudGlhbCk7Ci0gICAgd2Via2l0X2NyZWRl
bnRpYWxfZnJlZShjcmVkZW50aWFsKTsKLSAgICAvLyBFeHBlY3QgYXV0aGVudGljYXRpb24gZmFp
bGVkIHBhZ2UuCi0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBnX2Fz
c2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0sIDMpOwotICAgIGdfYXNz
ZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQ
cm92aXNpb25hbExvYWRTdGFydGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2Fk
RXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZENvbW1pdHRlZCk7Ci0gICAgZ19h
c3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6
OkxvYWRGaW5pc2hlZCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRf
dGl0bGUodGVzdC0+bV93ZWJWaWV3KSwgPT0sIGF1dGhFeHBlY3RlZEZhaWx1cmVUaXRsZSk7Ci19
Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25Ob0NyZWRlbnRpYWwoQXV0
aGVudGljYXRpb25UZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIC8vIFRlc3QgY29u
dGludWUgd2l0aG91dCBjcmVkZW50aWFscy4KLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdl
dFVSSUZvclBhdGgoIi9hdXRoLXRlc3QuaHRtbCIpLmRhdGEoKSk7Ci0gICAgV2ViS2l0QXV0aGVu
dGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0ID0gdGVzdC0+d2FpdEZvckF1dGhlbnRpY2F0aW9uUmVx
dWVzdCgpOwotICAgIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2F1dGhlbnRpY2F0ZShy
ZXF1ZXN0LCAwKTsKLSAgICAvLyBTZXJ2ZXIgZG9lc24ndCBhc2sgZm9yIG5ldyBjcmVkZW50aWFs
cy4KLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0X2Nt
cGludCh0ZXN0LT5tX2xvYWRFdmVudHMuc2l6ZSgpLCA9PSwgMyk7Ci0gICAgZ19hc3NlcnRfY21w
aW50KHRlc3QtPm1fbG9hZEV2ZW50c1swXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lv
bmFsTG9hZFN0YXJ0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNb
MV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkQ29tbWl0dGVkKTsKLSAgICBnX2Fzc2VydF9j
bXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZp
bmlzaGVkKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dldF90aXRsZSh0
ZXN0LT5tX3dlYlZpZXcpLCA9PSwgYXV0aEV4cGVjdGVkRmFpbHVyZVRpdGxlKTsKLX0KLQotc3Rh
dGljIHZvaWQgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvblN0b3JhZ2UoQXV0aGVudGljYXRpb25U
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIC8vIEVuYWJsZSBwcml2YXRlIGJyb3dz
aW5nIGJlZm9yZSBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IHRvIHRlc3QgdGhhdCBjcmVkZW50aWFs
cyBjYW4ndCBiZSBzYXZlZC4KLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9wcml2YXRl
X2Jyb3dzaW5nKHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3ModGVzdC0+bV93ZWJWaWV3KSwg
VFJVRSk7Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvYXV0aC10
ZXN0Lmh0bWwiKS5kYXRhKCkpOwotICAgIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVx
dWVzdCA9IHRlc3QtPndhaXRGb3JBdXRoZW50aWNhdGlvblJlcXVlc3QoKTsKLSAgICBnX2Fzc2Vy
dCghd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3Byb3Bvc2VkX2NyZWRlbnRpYWwo
cmVxdWVzdCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9j
YW5fc2F2ZV9jcmVkZW50aWFscyhyZXF1ZXN0KSk7Ci0KLSAgICAvLyBJZiBXZWJLaXQgaGFzIGJl
ZW4gY29tcGlsZWQgd2l0aCBsaWJzZWNyZXQsIGFuZCBwcml2YXRlIGJyb3dzaW5nIGlzIGRpc2Fi
bGVkCi0gICAgLy8gdGhlbiBjaGVjayB0aGF0IGNyZWRlbnRpYWxzIGNhbiBiZSBzYXZlZC4KLSNp
ZiBFTkFCTEUoQ1JFREVOVElBTF9TVE9SQUdFKQotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5h
YmxlX3ByaXZhdGVfYnJvd3Npbmcod2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh0ZXN0LT5t
X3dlYlZpZXcpLCBGQUxTRSk7Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQ
YXRoKCIvYXV0aC10ZXN0Lmh0bWwiKS5kYXRhKCkpOwotICAgIHJlcXVlc3QgPSB0ZXN0LT53YWl0
Rm9yQXV0aGVudGljYXRpb25SZXF1ZXN0KCk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9hdXRoZW50
aWNhdGlvbl9yZXF1ZXN0X2dldF9wcm9wb3NlZF9jcmVkZW50aWFsKHJlcXVlc3QpKTsKLSAgICBn
X2Fzc2VydCh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jYW5fc2F2ZV9jcmVkZW50aWFs
cyhyZXF1ZXN0KSk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdBdXRoZW50
aWNhdGlvblN1Y2Nlc3MoQXV0aGVudGljYXRpb25UZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQot
ewotICAgIC8vIFRlc3QgY29ycmVjdCBhdXRoZW50aWNhdGlvbi4KLSAgICB0ZXN0LT5sb2FkVVJJ
KGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9hdXRoLXRlc3QuaHRtbCIpLmRhdGEoKSk7Ci0gICAg
V2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0ID0gdGVzdC0+d2FpdEZvckF1dGhl
bnRpY2F0aW9uUmVxdWVzdCgpOwotICAgIFdlYktpdENyZWRlbnRpYWwqIGNyZWRlbnRpYWwgPSB3
ZWJraXRfY3JlZGVudGlhbF9uZXcoYXV0aFRlc3RVc2VybmFtZSwgYXV0aFRlc3RQYXNzd29yZCwg
V0VCS0lUX0NSRURFTlRJQUxfUEVSU0lTVEVOQ0VfRk9SX1NFU1NJT04pOwotICAgIHdlYmtpdF9h
dXRoZW50aWNhdGlvbl9yZXF1ZXN0X2F1dGhlbnRpY2F0ZShyZXF1ZXN0LCBjcmVkZW50aWFsKTsK
LSAgICB3ZWJraXRfY3JlZGVudGlhbF9mcmVlKGNyZWRlbnRpYWwpOwotICAgIHRlc3QtPndhaXRV
bnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2
ZW50cy5zaXplKCksID09LCAzKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZl
bnRzWzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2lu
Z1Rlc3Q6OkxvYWRDb21taXR0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRF
dmVudHNbMl0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOwotICAgIGdfYXNz
ZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3RpdGxlKHRlc3QtPm1fd2ViVmlldyksID09
LCBhdXRoRXhwZWN0ZWRTdWNjZXNzVGl0bGUpOwotCi0gICAgLy8gVGVzdCBsb2FkaW5nIHRoZSBz
YW1lIChhdXRob3JpemVkKSBwYWdlIGFnYWluLgotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+
Z2V0VVJJRm9yUGF0aCgiL2F1dGgtdGVzdC5odG1sIikuZGF0YSgpKTsKLSAgICAvLyBUaGVyZSBp
cyBubyBhdXRoZW50aWNhdGlvbiBjaGFsbGVuZ2UuCi0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZp
bmlzaGVkKCk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzLnNpemUo
KSwgPT0sIDMpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMF0sID09
LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9h
ZENvbW1pdHRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1syXSwg
PT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7Ci0gICAgZ19hc3NlcnRfY21wc3Ry
KHdlYmtpdF93ZWJfdmlld19nZXRfdGl0bGUodGVzdC0+bV93ZWJWaWV3KSwgPT0sIGF1dGhFeHBl
Y3RlZFN1Y2Nlc3NUaXRsZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBT
ZXJ2ZXIqLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJs
ZSosIFNvdXBDbGllbnRDb250ZXh0Kiwgdm9pZCopCi17Ci0gICAgaWYgKG1lc3NhZ2UtPm1ldGhv
ZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMo
bWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmICghc3RyY21wKHBhdGgsICIvYXV0aC10ZXN0Lmh0bWwiKSkgewotICAg
ICAgICBjb25zdCBjaGFyKiBhdXRob3JpemF0aW9uID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0
X29uZShtZXNzYWdlLT5yZXF1ZXN0X2hlYWRlcnMsICJBdXRob3JpemF0aW9uIik7Ci0gICAgICAg
IC8vIFJlcXVpcmUgYXV0aGVudGljYXRpb24uCi0gICAgICAgIGlmICghZ19zdHJjbXAwKGF1dGhv
cml6YXRpb24sIGF1dGhFeHBlY3RlZEF1dGhvcml6YXRpb24pKSB7Ci0gICAgICAgICAgICAvLyBT
dWNjZXNzZnVsIGF1dGhlbnRpY2F0aW9uLgotICAgICAgICAgICAgc291cF9tZXNzYWdlX3NldF9z
dGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOwotICAgICAgICAgICAgc291cF9tZXNzYWdl
X2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywg
YXV0aFN1Y2Nlc3NIVE1MU3RyaW5nLCBzdHJsZW4oYXV0aFN1Y2Nlc3NIVE1MU3RyaW5nKSk7Ci0g
ICAgICAgICAgICBBdXRoZW50aWNhdGlvblRlc3Q6OmF1dGhlbnRpY2F0aW9uUmV0cmllcyA9IDA7
Ci0gICAgICAgIH0gZWxzZSBpZiAoKytBdXRoZW50aWNhdGlvblRlc3Q6OmF1dGhlbnRpY2F0aW9u
UmV0cmllcyA8IDMpIHsKLSAgICAgICAgICAgIC8vIE5vIG9yIGludmFsaWQgYXV0aG9yaXphdGlv
biBoZWFkZXIgcHJvdmlkZWQgYnkgdGhlIGNsaWVudCwgcmVxdWVzdCBhdXRoZW50aWNhdGlvbiB0
d2ljZSB0aGVuIGZhaWwuCi0gICAgICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNz
YWdlLCBTT1VQX1NUQVRVU19VTkFVVEhPUklaRUQpOwotICAgICAgICAgICAgc291cF9tZXNzYWdl
X2hlYWRlcnNfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJXV1ctQXV0aGVudGlj
YXRlIiwgIkJhc2ljIHJlYWxtPVwibXkgcmVhbG1cIiIpOwotICAgICAgICAgICAgLy8gSW5jbHVk
ZSBhIGZhaWx1cmUgbWVzc2FnZSBpbiBjYXNlIHRoZSB1c2VyIGF0dGVtcHRzIHRvIHByb2NlZWQg
d2l0aG91dCBhdXRoZW50aWNhdGlvbi4KLSAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2Fw
cGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGF1dGhGYWls
dXJlSFRNTFN0cmluZywgc3RybGVuKGF1dGhGYWlsdXJlSFRNTFN0cmluZykpOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgLy8gQXV0aGVudGljYXRpb24gbm90IHN1Y2Nlc3NmdWwsIGRp
c3BsYXkgYSAiNDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQiIHBhZ2UuCi0gICAgICAgICAgICBz
b3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7Ci0gICAgICAg
ICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09V
UF9NRU1PUllfU1RBVElDLCBhdXRoRmFpbHVyZUhUTUxTdHJpbmcsIHN0cmxlbihhdXRoRmFpbHVy
ZUhUTUxTdHJpbmcpKTsKLSAgICAgICAgfQotICAgIH0gZWxzZQotICAgICAgICBzb3VwX21lc3Nh
Z2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfRk9VTkQpOwotCi0gICAgc291
cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7Ci19Ci0KLXZv
aWQgYmVmb3JlQWxsKCkKLXsKLSAgICBrU2VydmVyID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIoKTsK
LSAgICBrU2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2spOwotCi0gICAgQXV0aGVudGljYXRpb25U
ZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiYXV0aGVudGljYXRpb24tcmVxdWVzdCIsIHRlc3RX
ZWJWaWV3QXV0aGVudGljYXRpb25SZXF1ZXN0KTsKLSAgICBBdXRoZW50aWNhdGlvblRlc3Q6OmFk
ZCgiV2ViS2l0V2ViVmlldyIsICJhdXRoZW50aWNhdGlvbi1jYW5jZWwiLCB0ZXN0V2ViVmlld0F1
dGhlbnRpY2F0aW9uQ2FuY2VsKTsKLSAgICBBdXRoZW50aWNhdGlvblRlc3Q6OmFkZCgiV2ViS2l0
V2ViVmlldyIsICJhdXRoZW50aWNhdGlvbi1sb2FkLWNhbmNlbGxlZCIsIHRlc3RXZWJWaWV3QXV0
aGVudGljYXRpb25Mb2FkQ2FuY2VsbGVkKTsKLSAgICBBdXRoZW50aWNhdGlvblRlc3Q6OmFkZCgi
V2ViS2l0V2ViVmlldyIsICJhdXRoZW50aWNhdGlvbi1mYWlsdXJlIiwgdGVzdFdlYlZpZXdBdXRo
ZW50aWNhdGlvbkZhaWx1cmUpOwotICAgIEF1dGhlbnRpY2F0aW9uVGVzdDo6YWRkKCJXZWJLaXRX
ZWJWaWV3IiwgImF1dGhlbnRpY2F0aW9uLW5vLWNyZWRlbnRpYWwiLCB0ZXN0V2ViVmlld0F1dGhl
bnRpY2F0aW9uTm9DcmVkZW50aWFsKTsKLSAgICBBdXRoZW50aWNhdGlvblRlc3Q6OmFkZCgiV2Vi
S2l0V2ViVmlldyIsICJhdXRoZW50aWNhdGlvbi1zdG9yYWdlIiwgdGVzdFdlYlZpZXdBdXRoZW50
aWNhdGlvblN0b3JhZ2UpOwotICAgIC8vIFRlc3RpbmcgYXV0aGVudGljYXRpb24gc3VjY2VzcyBt
dXN0IGJlIGRvbmUgbGFzdCBiZWNhdXNlIGxpYnNvdXAgd2lsbCBuZXZlciBmaXJlCi0gICAgLy8g
dGhlIGF1dGhlbnRpY2F0ZSBzaWduYWwgYWdhaW4gb25jZSBhdXRoZW50aWNhdGlvbiBpcyBzdWNj
ZXNzZnVsLgotICAgIEF1dGhlbnRpY2F0aW9uVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImF1
dGhlbnRpY2F0aW9uLXN1Y2Nlc3MiLCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uU3VjY2Vzcyk7
Ci19Ci0KLXZvaWQgYWZ0ZXJBbGwoKQotewotICAgIGRlbGV0ZSBrU2VydmVyOwotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdEJhY2tGb3J3
YXJkTGlzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0
QmFja0ZvcndhcmRMaXN0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQ3OTM2
NmE0MjI4NDczZjU5ZWU0MzcwMTc1ZDVhMWM0NmM0MDcxZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9UZXN0QmFja0ZvcndhcmRMaXN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI4MCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLQotI2luY2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKLSNpbmNsdWRlICJXZWJW
aWV3VGVzdC5oIgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDxsaWJzb3VwL3NvdXAu
aD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdDIuaD4KLQot
Ly8gQmFjayBmb3J3YXJkIGxpc3QgbGltaXQgaXMgMTAwIGJ5IGRlZmF1bHQuCi1zdGF0aWMgY29u
c3QgaW50IGtCYWNrRm9yd2FyZExpc3RMaW1pdCA9IDEwMDsKLQotc3RhdGljIFdlYktpdFRlc3RT
ZXJ2ZXIqIGtTZXJ2ZXI7Ci0KLXN0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIq
IHNlcnZlciwgU291cE1lc3NhZ2UqIG1zZywgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSog
cXVlcnksIFNvdXBDbGllbnRDb250ZXh0KiBjb250ZXh0LCBncG9pbnRlciBkYXRhKQotewotICAg
IGlmIChtc2ctPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKLSAgICAgICAgc291cF9tZXNz
YWdlX3NldF9zdGF0dXMobXNnLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGdfc3RyX2hhc19zdWZmaXgocGF0aCwgImZhdmlj
b24uaWNvIikpIHsKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobXNnLCBTT1VQX1NU
QVRVU19OT1RfRk9VTkQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc291cF9tZXNz
YWdlX3NldF9zdGF0dXMobXNnLCBTT1VQX1NUQVRVU19PSyk7Ci0KLSAgICBjaGFyKiBib2R5ID0g
Z19zdHJkdXBfcHJpbnRmKCI8aHRtbD48dGl0bGU+JXM8L3RpdGxlPjxib2R5PiVzPC9ib2R5Pjwv
aHRtbD4iLCBwYXRoICsgMSwgcGF0aCArIDEpOwotICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVu
ZChtc2ctPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGJvZHksIHN0cmxlbihib2R5
KSk7Ci0KLSAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtc2ctPnJlc3BvbnNlX2JvZHkp
OwotfQotCi1jbGFzcyBCYWNrRm9yd2FyZExpc3RUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3Qgewot
cHVibGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoQmFja0ZvcndhcmRMaXN0VGVzdCk7
Ci0KLSAgICBlbnVtIHsKLSAgICAgICAgQmFja3dhcmQsCi0gICAgICAgIEZvcndhcmQKLSAgICB9
OwotCi0gICAgZW51bSB7Ci0gICAgICAgIEN1cnJlbnRJdGVtICA9IDEgPDwgMCwKLSAgICAgICAg
QWRkZWRJdGVtICAgID0gMSA8PCAxLAotICAgICAgICBSZW1vdmVkSXRlbXMgPSAxIDw8IDIKLSAg
ICB9OwotCi0gICAgc3RhdGljIHZvaWQgY2hlY2tJdGVtKFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0
ZW0qIGl0ZW0sIGNvbnN0IGNoYXIqIHRpdGxlLCBjb25zdCBjaGFyKiB1cmksIGNvbnN0IGNoYXIq
IG9yaWdpbmFsVVJJKQotICAgIHsKLSAgICAgICAgZ19hc3NlcnQoaXRlbSk7Ci0gICAgICAgIGdf
YXNzZXJ0X2NtcHN0cih3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9nZXRfdXJpKGl0ZW0p
LCA9PSwgdXJpKTsKLSAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9iYWNrX2ZvcndhcmRf
bGlzdF9pdGVtX2dldF90aXRsZShpdGVtKSwgPT0gLCB0aXRsZSk7Ci0gICAgICAgIGdfYXNzZXJ0
X2NtcHN0cih3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9nZXRfb3JpZ2luYWxfdXJpKGl0
ZW0pLCA9PSwgb3JpZ2luYWxVUkkpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGNoZWNrSXRl
bUluZGV4KFdlYktpdEJhY2tGb3J3YXJkTGlzdCogbGlzdCkKLSAgICB7Ci0gICAgICAgIGdfYXNz
ZXJ0KHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbnRoX2l0ZW0obGlzdCwgLTEpID09IHdl
YmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19pdGVtKGxpc3QpKTsKLSAgICAgICAgZ19h
c3NlcnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9udGhfaXRlbShsaXN0LCAwKSA9PSB3
ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbShsaXN0KSk7Ci0gICAgICAg
IGdfYXNzZXJ0KHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbnRoX2l0ZW0obGlzdCwgMSkg
PT0gd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2l0ZW0obGlzdCkpOwotICAg
IH0KLQotICAgIHN0YXRpYyB2b2lkIGNoZWNrTGlzdChXZWJLaXRCYWNrRm9yd2FyZExpc3QqIGxp
c3QsIHVuc2lnbmVkIHR5cGUsIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qKiBpdGVtcywgdW5z
aWduZWQgbkl0ZW1zKQotICAgIHsKLSAgICAgICAgR0xpc3QqIGxpc3RJdGVtcyA9IHR5cGUgPT0g
QmFja0ZvcndhcmRMaXN0VGVzdDo6QmFja3dhcmQgPyB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3Rf
Z2V0X2JhY2tfbGlzdChsaXN0KSA6Ci0gICAgICAgICAgICB3ZWJraXRfYmFja19mb3J3YXJkX2xp
c3RfZ2V0X2ZvcndhcmRfbGlzdChsaXN0KTsKLSAgICAgICAgZ19hc3NlcnQobGlzdEl0ZW1zKTsK
LQotICAgICAgICB1bnNpZ25lZCBpID0gMDsKLSAgICAgICAgZm9yIChHTGlzdCogbGlzdEl0ZW0g
PSBsaXN0SXRlbXM7IGxpc3RJdGVtOyBsaXN0SXRlbSA9IGdfbGlzdF9uZXh0KGxpc3RJdGVtKSwg
aSsrKSB7Ci0gICAgICAgICAgICBnX2Fzc2VydF9jbXB1aW50KGksIDwsIG5JdGVtcyk7Ci0gICAg
ICAgICAgICBnX2Fzc2VydChsaXN0SXRlbS0+ZGF0YSA9PSBpdGVtc1tpXSk7Ci0gICAgICAgIH0K
LSAgICAgICAgZ19saXN0X2ZyZWUobGlzdEl0ZW1zKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9p
ZCBiYWNrRm9yd2FyZExpc3RDaGFuZ2VkKFdlYktpdEJhY2tGb3J3YXJkTGlzdCogbGlzdCwgV2Vi
S2l0QmFja0ZvcndhcmRMaXN0SXRlbSogYWRkZWRJdGVtLCBHTGlzdCogcmVtb3ZlZEl0ZW1zLCBC
YWNrRm9yd2FyZExpc3RUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+bV9oYXNDaGFu
Z2VkID0gdHJ1ZTsKLQotICAgICAgICBpZiAodGVzdC0+bV9jaGFuZ2VkRmxhZ3MgJiBCYWNrRm9y
d2FyZExpc3RUZXN0OjpBZGRlZEl0ZW0pIHsKLSAgICAgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9J
U19CQUNLX0ZPUldBUkRfTElTVF9JVEVNKGFkZGVkSXRlbSkpOwotICAgICAgICAgICAgdGVzdC0+
YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChhZGRlZEl0ZW0p
KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBnX2Fzc2VydCghYWRkZWRJdGVtKTsKLQot
ICAgICAgICBpZiAodGVzdC0+bV9jaGFuZ2VkRmxhZ3MgJiBCYWNrRm9yd2FyZExpc3RUZXN0OjpS
ZW1vdmVkSXRlbXMpIHsKLSAgICAgICAgICAgIGdfYXNzZXJ0KHJlbW92ZWRJdGVtcyk7Ci0gICAg
ICAgICAgICBmb3IgKEdMaXN0KiBpdGVyID0gcmVtb3ZlZEl0ZW1zOyBpdGVyOyBpdGVyID0gaXRl
ci0+bmV4dCkgewotICAgICAgICAgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19CQUNLX0ZPUldB
UkRfTElTVF9JVEVNKGl0ZXItPmRhdGEpKTsKLSAgICAgICAgICAgICAgICBpZiAodGVzdC0+bV9l
eHBlY3RlZFJlbW92ZWRJdGVtcykKLSAgICAgICAgICAgICAgICAgICAgZ19hc3NlcnQoZ19saXN0
X2ZpbmQodGVzdC0+bV9leHBlY3RlZFJlbW92ZWRJdGVtcywgaXRlci0+ZGF0YSkpOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZ19hc3NlcnQoIXJlbW92ZWRJ
dGVtcyk7Ci0gICAgfQotCi0gICAgQmFja0ZvcndhcmRMaXN0VGVzdCgpCi0gICAgICAgIDogbV9s
aXN0KHdlYmtpdF93ZWJfdmlld19nZXRfYmFja19mb3J3YXJkX2xpc3QobV93ZWJWaWV3KSkKLSAg
ICAgICAgLCBtX2NoYW5nZWRGbGFncygwKQotICAgICAgICAsIG1faGFzQ2hhbmdlZChmYWxzZSkK
LSAgICAgICAgLCBtX2V4cGVjdGVkUmVtb3ZlZEl0ZW1zKDApCi0gICAgewotICAgICAgICBnX3Np
Z25hbF9jb25uZWN0KG1fbGlzdCwgImNoYW5nZWQiLCBHX0NBTExCQUNLKGJhY2tGb3J3YXJkTGlz
dENoYW5nZWQpLCB0aGlzKTsKLSAgICAgICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RG
aW5pc2hlcyhHX09CSkVDVChtX2xpc3QpKTsKLSAgICB9Ci0KLSAgICB+QmFja0ZvcndhcmRMaXN0
VGVzdCgpCi0gICAgewotICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNo
ZWQobV9saXN0LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKLSAgICB9
Ci0KLSAgICB2b2lkIHdhaXRVbnRpbExvYWRGaW5pc2hlZCgpCi0gICAgewotICAgICAgICBtX2hh
c0NoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgV2ViVmlld1Rlc3Q6OndhaXRVbnRpbExvYWRGaW5p
c2hlZCgpOwotICAgICAgICBnX2Fzc2VydChtX2hhc0NoYW5nZWQpOwotICAgIH0KLQotICAgIHZv
aWQgd2FpdFVudGlsTG9hZEZpbmlzaGVkQW5kQ2hlY2tSZW1vdmVkSXRlbXMoR0xpc3QqIHJlbW92
ZWRJdGVtcykKLSAgICB7Ci0gICAgICAgIG1fZXhwZWN0ZWRSZW1vdmVkSXRlbXMgPSByZW1vdmVk
SXRlbXM7Ci0gICAgICAgIHdhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgICAgICBtX2V4cGVj
dGVkUmVtb3ZlZEl0ZW1zID0gMDsKLSAgICB9Ci0KLSAgICBXZWJLaXRCYWNrRm9yd2FyZExpc3Qq
IG1fbGlzdDsKLSAgICB1bnNpZ25lZCBsb25nIG1fY2hhbmdlZEZsYWdzOwotICAgIGJvb2wgbV9o
YXNDaGFuZ2VkOwotICAgIEdMaXN0KiBtX2V4cGVjdGVkUmVtb3ZlZEl0ZW1zOwotfTsKLQotc3Rh
dGljIHZvaWQgdGVzdEJhY2tGb3J3YXJkTGlzdE5hdmlnYXRpb24oQmFja0ZvcndhcmRMaXN0VGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVt
KiBpdGVtc1sxXTsKLQotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2so
dGVzdC0+bV93ZWJWaWV3KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29f
Zm9yd2FyZCh0ZXN0LT5tX3dlYlZpZXcpKTsKLQotICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0
X2JhY2tfZm9yd2FyZF9saXN0X2dldF9sZW5ndGgodGVzdC0+bV9saXN0KSwgPT0sIDApOwotICAg
IGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh0ZXN0
LT5tX2xpc3QpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9i
YWNrX2l0ZW0odGVzdC0+bV9saXN0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNrX2Zvcndh
cmRfbGlzdF9nZXRfZm9yd2FyZF9pdGVtKHRlc3QtPm1fbGlzdCkpOwotICAgIEJhY2tGb3J3YXJk
TGlzdFRlc3Q6OmNoZWNrSXRlbUluZGV4KHRlc3QtPm1fbGlzdCk7Ci0gICAgZ19hc3NlcnQoIXdl
YmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19saXN0KHRlc3QtPm1fbGlzdCkpOwotICAg
IGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlzdCh0ZXN0
LT5tX2xpc3QpKTsKLQotICAgIENTdHJpbmcgdXJpUGFnZTEgPSBrU2VydmVyLT5nZXRVUklGb3JQ
YXRoKCIvUGFnZTEiKTsKLSAgICB0ZXN0LT5tX2NoYW5nZWRGbGFncyA9IEJhY2tGb3J3YXJkTGlz
dFRlc3Q6OkN1cnJlbnRJdGVtIHwgQmFja0ZvcndhcmRMaXN0VGVzdDo6QWRkZWRJdGVtOwotICAg
IHRlc3QtPmxvYWRVUkkodXJpUGFnZTEuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2Fk
RmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2so
dGVzdC0+bV93ZWJWaWV3KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29f
Zm9yd2FyZCh0ZXN0LT5tX3dlYlZpZXcpKTsKLQotICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0
X2JhY2tfZm9yd2FyZF9saXN0X2dldF9sZW5ndGgodGVzdC0+bV9saXN0KSwgPT0sIDEpOwotICAg
IFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW1QYWdlMSA9IHdlYmtpdF9iYWNrX2Zvcndh
cmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKHRlc3QtPm1fbGlzdCk7Ci0gICAgQmFja0ZvcndhcmRM
aXN0VGVzdDo6Y2hlY2tJdGVtKGl0ZW1QYWdlMSwgIlBhZ2UxIiwgdXJpUGFnZTEuZGF0YSgpLCB1
cmlQYWdlMS5kYXRhKCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3Rf
Z2V0X2JhY2tfaXRlbSh0ZXN0LT5tX2xpc3QpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tf
Zm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2l0ZW0odGVzdC0+bV9saXN0KSk7Ci0gICAgQmFja0Zv
cndhcmRMaXN0VGVzdDo6Y2hlY2tJdGVtSW5kZXgodGVzdC0+bV9saXN0KTsKLSAgICBnX2Fzc2Vy
dCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3QodGVzdC0+bV9saXN0KSk7
Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0
KHRlc3QtPm1fbGlzdCkpOwotCi0gICAgQ1N0cmluZyB1cmlQYWdlMiA9IGtTZXJ2ZXItPmdldFVS
SUZvclBhdGgoIi9QYWdlMiIpOwotICAgIHRlc3QtPm1fY2hhbmdlZEZsYWdzID0gQmFja0Zvcndh
cmRMaXN0VGVzdDo6Q3VycmVudEl0ZW0gfCBCYWNrRm9yd2FyZExpc3RUZXN0OjpBZGRlZEl0ZW07
Ci0gICAgdGVzdC0+bG9hZFVSSSh1cmlQYWdlMi5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRp
bExvYWRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2Nhbl9nb19i
YWNrKHRlc3QtPm1fd2ViVmlldykpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2Fu
X2dvX2ZvcndhcmQodGVzdC0+bV93ZWJWaWV3KSk7Ci0KLSAgICBnX2Fzc2VydF9jbXB1aW50KHdl
YmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbGVuZ3RoKHRlc3QtPm1fbGlzdCksID09LCAyKTsK
LSAgICBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiBpdGVtUGFnZTIgPSB3ZWJraXRfYmFja19m
b3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh0ZXN0LT5tX2xpc3QpOwotICAgIEJhY2tGb3J3
YXJkTGlzdFRlc3Q6OmNoZWNrSXRlbShpdGVtUGFnZTIsICJQYWdlMiIsIHVyaVBhZ2UyLmRhdGEo
KSwgdXJpUGFnZTIuZGF0YSgpKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfYmFja19mb3J3YXJkX2xp
c3RfZ2V0X2JhY2tfaXRlbSh0ZXN0LT5tX2xpc3QpID09IGl0ZW1QYWdlMSk7Ci0gICAgZ19hc3Nl
cnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9pdGVtKHRlc3QtPm1fbGlz
dCkpOwotICAgIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OmNoZWNrSXRlbUluZGV4KHRlc3QtPm1fbGlz
dCk7Ci0gICAgaXRlbXNbMF0gPSBpdGVtUGFnZTE7Ci0gICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6
Y2hlY2tMaXN0KHRlc3QtPm1fbGlzdCwgQmFja0ZvcndhcmRMaXN0VGVzdDo6QmFja3dhcmQsIGl0
ZW1zLCAxKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3
YXJkX2xpc3QodGVzdC0+bV9saXN0KSk7Ci0KLSAgICB0ZXN0LT5tX2NoYW5nZWRGbGFncyA9IEJh
Y2tGb3J3YXJkTGlzdFRlc3Q6OkN1cnJlbnRJdGVtOwotICAgIHRlc3QtPmdvQmFjaygpOwotICAg
IHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3NlcnQoIXdlYmtpdF93
ZWJfdmlld19jYW5fZ29fYmFjayh0ZXN0LT5tX3dlYlZpZXcpKTsKLSAgICBnX2Fzc2VydCh3ZWJr
aXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQodGVzdC0+bV93ZWJWaWV3KSk7Ci0KLSAgICBnX2Fz
c2VydF9jbXB1aW50KHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbGVuZ3RoKHRlc3QtPm1f
bGlzdCksID09LCAyKTsKLSAgICBnX2Fzc2VydChpdGVtUGFnZTEgPT0gd2Via2l0X2JhY2tfZm9y
d2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0odGVzdC0+bV9saXN0KSk7Ci0gICAgQmFja0Zvcndh
cmRMaXN0VGVzdDo6Y2hlY2tJdGVtKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVu
dF9pdGVtKHRlc3QtPm1fbGlzdCksICJQYWdlMSIsIHVyaVBhZ2UxLmRhdGEoKSwgdXJpUGFnZTEu
ZGF0YSgpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNr
X2l0ZW0odGVzdC0+bV9saXN0KSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X2JhY2tfZm9yd2FyZF9s
aXN0X2dldF9mb3J3YXJkX2l0ZW0odGVzdC0+bV9saXN0KSA9PSBpdGVtUGFnZTIpOwotICAgIEJh
Y2tGb3J3YXJkTGlzdFRlc3Q6OmNoZWNrSXRlbUluZGV4KHRlc3QtPm1fbGlzdCk7Ci0gICAgZ19h
c3NlcnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19saXN0KHRlc3QtPm1fbGlz
dCkpOwotICAgIGl0ZW1zWzBdID0gaXRlbVBhZ2UyOwotICAgIEJhY2tGb3J3YXJkTGlzdFRlc3Q6
OmNoZWNrTGlzdCh0ZXN0LT5tX2xpc3QsIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OkZvcndhcmQsIGl0
ZW1zLCAxKTsKLQotICAgIHRlc3QtPm1fY2hhbmdlZEZsYWdzID0gQmFja0ZvcndhcmRMaXN0VGVz
dDo6Q3VycmVudEl0ZW07Ci0gICAgdGVzdC0+Z29Gb3J3YXJkKCk7Ci0gICAgdGVzdC0+d2FpdFVu
dGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfY2FuX2dv
X2JhY2sodGVzdC0+bV93ZWJWaWV3KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19j
YW5fZ29fZm9yd2FyZCh0ZXN0LT5tX3dlYlZpZXcpKTsKLQotICAgIGdfYXNzZXJ0X2NtcHVpbnQo
d2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9sZW5ndGgodGVzdC0+bV9saXN0KSwgPT0sIDIp
OwotICAgIGdfYXNzZXJ0KGl0ZW1QYWdlMiA9PSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0
X2N1cnJlbnRfaXRlbSh0ZXN0LT5tX2xpc3QpKTsKLSAgICBCYWNrRm9yd2FyZExpc3RUZXN0Ojpj
aGVja0l0ZW0od2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0odGVzdC0+
bV9saXN0KSwgIlBhZ2UyIiwgdXJpUGFnZTIuZGF0YSgpLCB1cmlQYWdlMi5kYXRhKCkpOwotICAg
IGdfYXNzZXJ0KHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19pdGVtKHRlc3QtPm1f
bGlzdCkgPT0gaXRlbVBhZ2UxKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9s
aXN0X2dldF9mb3J3YXJkX2l0ZW0odGVzdC0+bV9saXN0KSk7Ci0gICAgQmFja0ZvcndhcmRMaXN0
VGVzdDo6Y2hlY2tJdGVtSW5kZXgodGVzdC0+bV9saXN0KTsKLSAgICBpdGVtc1swXSA9IGl0ZW1Q
YWdlMTsKLSAgICBCYWNrRm9yd2FyZExpc3RUZXN0OjpjaGVja0xpc3QodGVzdC0+bV9saXN0LCBC
YWNrRm9yd2FyZExpc3RUZXN0OjpCYWNrd2FyZCwgaXRlbXMsIDEpOwotICAgIGdfYXNzZXJ0KCF3
ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlzdCh0ZXN0LT5tX2xpc3QpKTsK
LQotICAgIHRlc3QtPm1fY2hhbmdlZEZsYWdzID0gQmFja0ZvcndhcmRMaXN0VGVzdDo6Q3VycmVu
dEl0ZW07Ci0gICAgdGVzdC0+Z29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW0oaXRlbVBhZ2UxKTsKLSAg
ICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0KGl0ZW1QYWdl
MSA9PSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh0ZXN0LT5tX2xp
c3QpKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdEJhY2tGb3J3YXJkTGlzdExpbWl0QW5kQ2FjaGUo
QmFja0ZvcndhcmRMaXN0VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGtCYWNrRm9yd2FyZExpc3RMaW1pdDsgaSsrKSB7Ci0gICAgICAgIEdPd25Q
dHI8Y2hhcj4gcGF0aChnX3N0cmR1cF9wcmludGYoIi9QYWdlJWQiLCBpKSk7Ci0gICAgICAgIHRl
c3QtPm1fY2hhbmdlZEZsYWdzID0gQmFja0ZvcndhcmRMaXN0VGVzdDo6Q3VycmVudEl0ZW0gfCBC
YWNrRm9yd2FyZExpc3RUZXN0OjpBZGRlZEl0ZW07Ci0gICAgICAgIHRlc3QtPmxvYWRVUkkoa1Nl
cnZlci0+Z2V0VVJJRm9yUGF0aChwYXRoLmdldCgpKS5kYXRhKCkpOwotICAgICAgICB0ZXN0LT53
YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICB9Ci0KLSAgICBnX2Fzc2VydF9jbXB1aW50KHdl
YmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbGVuZ3RoKHRlc3QtPm1fbGlzdCksID09LCBrQmFj
a0ZvcndhcmRMaXN0TGltaXQpOwotICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW1Q
YWdlRmlyc3QgPSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X250aF9pdGVtKHRlc3QtPm1f
bGlzdCwgLShrQmFja0ZvcndhcmRMaXN0TGltaXQgLSAxKSk7Ci0gICAgR093blB0cjxHTGlzdD4g
cmVtb3ZlZEl0ZW1zKGdfbGlzdF9wcmVwZW5kKDAsIGl0ZW1QYWdlRmlyc3QpKTsKLQotICAgIEdP
d25QdHI8Y2hhcj4gcGF0aChnX3N0cmR1cF9wcmludGYoIi9QYWdlJWQiLCBrQmFja0ZvcndhcmRM
aXN0TGltaXQpKTsKLSAgICB0ZXN0LT5tX2NoYW5nZWRGbGFncyA9IEJhY2tGb3J3YXJkTGlzdFRl
c3Q6OkN1cnJlbnRJdGVtIHwgQmFja0ZvcndhcmRMaXN0VGVzdDo6QWRkZWRJdGVtIHwgQmFja0Zv
cndhcmRMaXN0VGVzdDo6UmVtb3ZlZEl0ZW1zOwotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+
Z2V0VVJJRm9yUGF0aChwYXRoLmdldCgpKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExv
YWRGaW5pc2hlZEFuZENoZWNrUmVtb3ZlZEl0ZW1zKHJlbW92ZWRJdGVtcy5nZXQoKSk7Ci0KLSAg
ICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbGVuZ3RoKHRl
c3QtPm1fbGlzdCksID09LCBrQmFja0ZvcndhcmRMaXN0TGltaXQpOwotfQotCi12b2lkIGJlZm9y
ZUFsbCgpCi17Ci0gICAga1NlcnZlciA9IG5ldyBXZWJLaXRUZXN0U2VydmVyKCk7Ci0gICAga1Nl
cnZlci0+cnVuKHNlcnZlckNhbGxiYWNrKTsKLQotICAgIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OmFk
ZCgiQmFja0ZvcndhcmRMaXN0IiwgIm5hdmlnYXRpb24iLCB0ZXN0QmFja0ZvcndhcmRMaXN0TmF2
aWdhdGlvbik7Ci0gICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6YWRkKCJCYWNrRm9yd2FyZExpc3Qi
LCAibGlzdC1saW1pdC1hbmQtY2FjaGUiLCB0ZXN0QmFja0ZvcndhcmRMaXN0TGltaXRBbmRDYWNo
ZSk7Ci19Ci0KLXZvaWQgYWZ0ZXJBbGwoKQotewotICAgIGRlbGV0ZSBrU2VydmVyOwotfQotCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0Q29u
dGV4dE1lbnUuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVz
dENvbnRleHRNZW51LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTIzMjliOWQ4
MTk5N2U0YWRmMGE1YTAxZTg3NTA1ZTQzYzA2NGE2NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9UZXN0Q29udGV4dE1lbnUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODY3ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
Ci0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQ
dHIuaD4KLQotY2xhc3MgQ29udGV4dE1lbnVUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3QgewotcHVi
bGljOgotICAgIGVudW0gQ29udGV4dE1lbnVJdGVtU3RhdGVGbGFncyB7Ci0gICAgICAgIFZpc2li
bGUgPSAxIDw8IDAsCi0gICAgICAgIEVuYWJsZWQgPSAxIDw8IDEsCi0gICAgICAgIENoZWNrZWQg
PSAxIDw8IDIKLSAgICB9OwotCi0gICAgdm9pZCBjaGVja0NvbnRleHRNZW51RXZlbnQoR2RrRXZl
bnQqIGV2ZW50KQotICAgIHsKLSAgICAgICAgZ19hc3NlcnQoZXZlbnQpOwotICAgICAgICBnX2Fz
c2VydF9jbXBpbnQoZXZlbnQtPnR5cGUsID09LCBHREtfQlVUVE9OX1BSRVNTKTsKLSAgICAgICAg
Z19hc3NlcnRfY21waW50KGV2ZW50LT5idXR0b24uYnV0dG9uLCA9PSwgMyk7Ci0gICAgICAgIGdf
YXNzZXJ0X2NtcGludChldmVudC0+YnV0dG9uLngsID09LCBtX21lbnVQb3NpdGlvblgpOwotICAg
ICAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnQtPmJ1dHRvbi55LCA9PSwgbV9tZW51UG9zaXRpb25Z
KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZ2Jvb2xlYW4gY29udGV4dE1lbnVDYWxsYmFjayhXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRDb250ZXh0TWVudSogY29udGV4dE1lbnUsIEdka0V2
ZW50KiBldmVudCwgV2ViS2l0SGl0VGVzdFJlc3VsdCogaGl0VGVzdFJlc3VsdCwgQ29udGV4dE1l
bnVUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX0NPTlRFWFRf
TUVOVShjb250ZXh0TWVudSkpOwotICAgICAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRX
aGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKGNvbnRleHRNZW51KSk7Ci0gICAgICAgIHRlc3QtPmNo
ZWNrQ29udGV4dE1lbnVFdmVudChldmVudCk7Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19I
SVRfVEVTVF9SRVNVTFQoaGl0VGVzdFJlc3VsdCkpOwotICAgICAgICB0ZXN0LT5hc3NlcnRPYmpl
Y3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKGhpdFRlc3RSZXN1bHQpKTsKLQot
ICAgICAgICByZXR1cm4gdGVzdC0+Y29udGV4dE1lbnUoY29udGV4dE1lbnUsIGV2ZW50LCBoaXRU
ZXN0UmVzdWx0KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBjb250ZXh0TWVudURpc21pc3Nl
ZENhbGxiYWNrKFdlYktpdFdlYlZpZXcqLCBDb250ZXh0TWVudVRlc3QqIHRlc3QpCi0gICAgewot
ICAgICAgICB0ZXN0LT5jb250ZXh0TWVudURpc21pc3NlZCgpOwotICAgIH0KLQotICAgIENvbnRl
eHRNZW51VGVzdCgpCi0gICAgICAgIDogbV9tZW51UG9zaXRpb25YKDApCi0gICAgICAgICwgbV9t
ZW51UG9zaXRpb25ZKDApCi0gICAgewotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmll
dywgImNvbnRleHQtbWVudSIsIEdfQ0FMTEJBQ0soY29udGV4dE1lbnVDYWxsYmFjayksIHRoaXMp
OwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImNvbnRleHQtbWVudS1kaXNt
aXNzZWQiLCBHX0NBTExCQUNLKGNvbnRleHRNZW51RGlzbWlzc2VkQ2FsbGJhY2spLCB0aGlzKTsK
LSAgICB9Ci0KLSAgICB+Q29udGV4dE1lbnVUZXN0KCkKLSAgICB7Ci0gICAgICAgIGdfc2lnbmFs
X2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3dlYlZpZXcsIEdfU0lHTkFMX01BVENIX0RB
VEEsIDAsIDAsIDAsIDAsIHRoaXMpOwotICAgIH0KLQotICAgIHZpcnR1YWwgYm9vbCBjb250ZXh0
TWVudShXZWJLaXRDb250ZXh0TWVudSosIEdka0V2ZW50KiwgV2ViS2l0SGl0VGVzdFJlc3VsdCop
ID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0TWVudURpc21pc3NlZCgpCi0gICAgewot
ICAgICAgICBxdWl0TWFpbkxvb3AoKTsKLSAgICB9Ci0KLSAgICBHdGtNZW51KiBnZXRQb3B1cE1l
bnUoKQotICAgIHsKLSAgICAgICAgR093blB0cjxHTGlzdD4gdG9wbGV2ZWxzKGd0a193aW5kb3df
bGlzdF90b3BsZXZlbHMoKSk7Ci0gICAgICAgIGZvciAoR0xpc3QqIGl0ZXIgPSB0b3BsZXZlbHMu
Z2V0KCk7IGl0ZXI7IGl0ZXIgPSBnX2xpc3RfbmV4dChpdGVyKSkgewotICAgICAgICAgICAgaWYg
KCFHVEtfSVNfV0lORE9XKGl0ZXItPmRhdGEpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgICAgICBHdGtXaWRnZXQqIGNoaWxkID0gZ3RrX2Jpbl9nZXRfY2hpbGQoR1RLX0JJ
TihpdGVyLT5kYXRhKSk7Ci0gICAgICAgICAgICBpZiAoIUdUS19JU19NRU5VKGNoaWxkKSkKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgaWYgKGd0a19tZW51X2dldF9h
dHRhY2hfd2lkZ2V0KEdUS19NRU5VKGNoaWxkKSkgPT0gR1RLX1dJREdFVChtX3dlYlZpZXcpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBHVEtfTUVOVShjaGlsZCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0g
ICAgYm9vbCBzaG91bGRTaG93SW5wdXRNZXRob2RzTWVudSgpCi0gICAgewotICAgICAgICBHdGtT
ZXR0aW5ncyogc2V0dGluZ3MgPSBndGtfd2lkZ2V0X2dldF9zZXR0aW5ncyhHVEtfV0lER0VUKG1f
d2ViVmlldykpOwotICAgICAgICBpZiAoIXNldHRpbmdzKQotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICAgICAgZ2Jvb2xlYW4gc2hvd0lucHV0TWV0aG9kTWVudTsKLSAgICAgICAgZ19v
YmplY3RfZ2V0KHNldHRpbmdzLCAiZ3RrLXNob3ctaW5wdXQtbWV0aG9kLW1lbnUiLCAmc2hvd0lu
cHV0TWV0aG9kTWVudSwgTlVMTCk7Ci0gICAgICAgIHJldHVybiBzaG93SW5wdXRNZXRob2RNZW51
OwotICAgIH0KLQotICAgIHZvaWQgY2hlY2tBY3Rpb25TdGF0ZShHdGtBY3Rpb24qIGFjdGlvbiwg
dW5zaWduZWQgc3RhdGUpCi0gICAgewotICAgICAgICBpZiAoc3RhdGUgJiBWaXNpYmxlKQotICAg
ICAgICAgICAgZ19hc3NlcnQoZ3RrX2FjdGlvbl9nZXRfdmlzaWJsZShhY3Rpb24pKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgZ19hc3NlcnQoIWd0a19hY3Rpb25fZ2V0X3Zpc2libGUoYWN0
aW9uKSk7Ci0KLSAgICAgICAgaWYgKHN0YXRlICYgRW5hYmxlZCkKLSAgICAgICAgICAgIGdfYXNz
ZXJ0KGd0a19hY3Rpb25fZ2V0X3NlbnNpdGl2ZShhY3Rpb24pKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgZ19hc3NlcnQoIWd0a19hY3Rpb25fZ2V0X3NlbnNpdGl2ZShhY3Rpb24pKTsKLQot
ICAgICAgICBpZiAoR1RLX0lTX1RPR0dMRV9BQ1RJT04oYWN0aW9uKSkgewotICAgICAgICAgICAg
aWYgKHN0YXRlICYgQ2hlY2tlZCkKLSAgICAgICAgICAgICAgICBnX2Fzc2VydChndGtfdG9nZ2xl
X2FjdGlvbl9nZXRfYWN0aXZlKEdUS19UT0dHTEVfQUNUSU9OKGFjdGlvbikpKTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBnX2Fzc2VydCghZ3RrX3RvZ2dsZV9hY3Rpb25fZ2V0
X2FjdGl2ZShHVEtfVE9HR0xFX0FDVElPTihhY3Rpb24pKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBHTGlzdCogY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KEdMaXN0
KiBpdGVtcywgV2ViS2l0Q29udGV4dE1lbnVBY3Rpb24gc3RvY2tBY3Rpb24sIHVuc2lnbmVkIHN0
YXRlKQotICAgIHsKLSAgICAgICAgZ19hc3NlcnQoaXRlbXMpOwotICAgICAgICBnX2Fzc2VydChX
RUJLSVRfSVNfQ09OVEVYVF9NRU5VX0lURU0oaXRlbXMtPmRhdGEpKTsKLQotICAgICAgICBXZWJL
aXRDb250ZXh0TWVudUl0ZW0qIGl0ZW0gPSBXRUJLSVRfQ09OVEVYVF9NRU5VX0lURU0oaXRlbXMt
PmRhdGEpOwotICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdf
T0JKRUNUKGl0ZW0pKTsKLQotICAgICAgICBHdGtBY3Rpb24qIGFjdGlvbiA9IHdlYmtpdF9jb250
ZXh0X21lbnVfaXRlbV9nZXRfYWN0aW9uKGl0ZW0pOwotICAgICAgICBnX2Fzc2VydChHVEtfSVNf
QUNUSU9OKGFjdGlvbikpOwotCi0gICAgICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfY29udGV4
dF9tZW51X2l0ZW1fZ2V0X3N0b2NrX2FjdGlvbihpdGVtKSwgPT0sIHN0b2NrQWN0aW9uKTsKLQot
ICAgICAgICBjaGVja0FjdGlvblN0YXRlKGFjdGlvbiwgc3RhdGUpOwotCi0gICAgICAgIHJldHVy
biBnX2xpc3RfbmV4dChpdGVtcyk7Ci0gICAgfQotCi0gICAgR0xpc3QqIGNoZWNrQ3VycmVudEl0
ZW1Jc0N1c3RvbUFjdGlvbkFuZEdldE5leHQoR0xpc3QqIGl0ZW1zLCBjb25zdCBjaGFyKiBsYWJl
bCwgdW5zaWduZWQgc3RhdGUpCi0gICAgewotICAgICAgICBnX2Fzc2VydChpdGVtcyk7Ci0gICAg
ICAgIGdfYXNzZXJ0KFdFQktJVF9JU19DT05URVhUX01FTlVfSVRFTShpdGVtcy0+ZGF0YSkpOwot
Ci0gICAgICAgIFdlYktpdENvbnRleHRNZW51SXRlbSogaXRlbSA9IFdFQktJVF9DT05URVhUX01F
TlVfSVRFTShpdGVtcy0+ZGF0YSk7Ci0gICAgICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5U
ZXN0RmluaXNoZXMoR19PQkpFQ1QoaXRlbSkpOwotCi0gICAgICAgIEd0a0FjdGlvbiogYWN0aW9u
ID0gd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9hY3Rpb24oaXRlbSk7Ci0gICAgICAgIGdf
YXNzZXJ0KEdUS19JU19BQ1RJT04oYWN0aW9uKSk7Ci0KLSAgICAgICAgZ19hc3NlcnRfY21waW50
KHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRfc3RvY2tfYWN0aW9uKGl0ZW0pLCA9PSwgV0VC
S0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ1VTVE9NKTsKLSAgICAgICAgZ19hc3NlcnRfY21wc3Ry
KGd0a19hY3Rpb25fZ2V0X2xhYmVsKGFjdGlvbiksID09LCBsYWJlbCk7Ci0KLSAgICAgICAgY2hl
Y2tBY3Rpb25TdGF0ZShhY3Rpb24sIHN0YXRlKTsKLQotICAgICAgICByZXR1cm4gZ19saXN0X25l
eHQoaXRlbXMpOwotICAgIH0KLQotICAgIEdMaXN0KiBjaGVja0N1cnJlbnRJdGVtSXNTdWJNZW51
QW5kR2V0TmV4dChHTGlzdCogaXRlbXMsIGNvbnN0IGNoYXIqIGxhYmVsLCB1bnNpZ25lZCBzdGF0
ZSwgR0xpc3QqKiBzdWJNZW51SXRlcikKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0KGl0ZW1zKTsK
LSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX0NPTlRFWFRfTUVOVV9JVEVNKGl0ZW1zLT5kYXRh
KSk7Ci0KLSAgICAgICAgV2ViS2l0Q29udGV4dE1lbnVJdGVtKiBpdGVtID0gV0VCS0lUX0NPTlRF
WFRfTUVOVV9JVEVNKGl0ZW1zLT5kYXRhKTsKLSAgICAgICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVk
V2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChpdGVtKSk7Ci0KLSAgICAgICAgR3RrQWN0aW9uKiBh
Y3Rpb24gPSB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X2FjdGlvbihpdGVtKTsKLSAgICAg
ICAgZ19hc3NlcnQoR1RLX0lTX0FDVElPTihhY3Rpb24pKTsKLQotICAgICAgICBnX2Fzc2VydF9j
bXBzdHIoZ3RrX2FjdGlvbl9nZXRfbGFiZWwoYWN0aW9uKSwgPT0sIGxhYmVsKTsKLSAgICAgICAg
Y2hlY2tBY3Rpb25TdGF0ZShhY3Rpb24sIHN0YXRlKTsKLQotICAgICAgICBXZWJLaXRDb250ZXh0
TWVudSogc3ViTWVudSA9IHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRfc3VibWVudShpdGVt
KTsKLSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX0NPTlRFWFRfTUVOVShzdWJNZW51KSk7Ci0g
ICAgICAgIGlmIChzdWJNZW51SXRlcikKLSAgICAgICAgICAgICpzdWJNZW51SXRlciA9IHdlYmtp
dF9jb250ZXh0X21lbnVfZ2V0X2l0ZW1zKHN1Yk1lbnUpOwotCi0gICAgICAgIHJldHVybiBnX2xp
c3RfbmV4dChpdGVtcyk7Ci0gICAgfQotCi0gICAgR0xpc3QqIGNoZWNrQ3VycmVudEl0ZW1Jc1Nl
cGFyYXRvckFuZEdldE5leHQoR0xpc3QqIGl0ZW1zKQotICAgIHsKLSAgICAgICAgZ19hc3NlcnQo
aXRlbXMpOwotICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfQ09OVEVYVF9NRU5VX0lURU0oaXRl
bXMtPmRhdGEpKTsKLQotICAgICAgICBXZWJLaXRDb250ZXh0TWVudUl0ZW0qIGl0ZW0gPSBXRUJL
SVRfQ09OVEVYVF9NRU5VX0lURU0oaXRlbXMtPmRhdGEpOwotICAgICAgICBnX2Fzc2VydCh3ZWJr
aXRfY29udGV4dF9tZW51X2l0ZW1faXNfc2VwYXJhdG9yKGl0ZW0pKTsKLQotICAgICAgICByZXR1
cm4gZ19saXN0X25leHQoaXRlbXMpOwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiBkb1Jp
Z2h0Q2xpY2tJZGxlQ2FsbGJhY2soQ29udGV4dE1lbnVUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAg
ICAgdGVzdC0+Y2xpY2tNb3VzZUJ1dHRvbih0ZXN0LT5tX21lbnVQb3NpdGlvblgsIHRlc3QtPm1f
bWVudVBvc2l0aW9uWSwgMyk7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAgICB2
b2lkIHNob3dDb250ZXh0TWVudUF0UG9zaXRpb25BbmRXYWl0VW50aWxGaW5pc2hlZChpbnQgeCwg
aW50IHkpCi0gICAgewotICAgICAgICBtX21lbnVQb3NpdGlvblggPSB4OwotICAgICAgICBtX21l
bnVQb3NpdGlvblkgPSB5OwotICAgICAgICBnX2lkbGVfYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8R1Nv
dXJjZUZ1bmM+KGRvUmlnaHRDbGlja0lkbGVDYWxsYmFjayksIHRoaXMpOwotICAgICAgICBnX21h
aW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgdm9pZCBzaG93Q29udGV4dE1l
bnVBbmRXYWl0VW50aWxGaW5pc2hlZCgpCi0gICAgewotICAgICAgICBzaG93Q29udGV4dE1lbnVB
dFBvc2l0aW9uQW5kV2FpdFVudGlsRmluaXNoZWQoMCwgMCk7Ci0gICAgfQotCi0gICAgc3RhdGlj
IGdib29sZWFuIHNpbXVsYXRlRXNjS2V5SWRsZUNhbGxiYWNrKENvbnRleHRNZW51VGVzdCogdGVz
dCkKLSAgICB7Ci0gICAgICAgIHRlc3QtPmtleVN0cm9rZShHREtfS0VZX0VzY2FwZSk7Ci0gICAg
ICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAgICB2b2lkIGRpc21pc3NDb250ZXh0TWVudUFu
ZFdhaXRVbnRpbEZpbmlzaGVkKCkKLSAgICB7Ci0gICAgICAgIGdfaWRsZV9hZGQocmVpbnRlcnBy
ZXRfY2FzdDxHU291cmNlRnVuYz4oc2ltdWxhdGVFc2NLZXlJZGxlQ2FsbGJhY2spLCB0aGlzKTsK
LSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIGRvdWJs
ZSBtX21lbnVQb3NpdGlvblg7Ci0gICAgZG91YmxlIG1fbWVudVBvc2l0aW9uWTsKLX07Ci0KLWNs
YXNzIENvbnRleHRNZW51RGVmYXVsdFRlc3Q6IHB1YmxpYyBDb250ZXh0TWVudVRlc3QgewotcHVi
bGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoQ29udGV4dE1lbnVEZWZhdWx0VGVzdCk7
Ci0KLSAgICBlbnVtIERlZmF1bHRNZW51VHlwZSB7Ci0gICAgICAgIE5hdmlnYXRpb24sCi0gICAg
ICAgIExpbmssCi0gICAgICAgIEltYWdlLAotICAgICAgICBMaW5rSW1hZ2UsCi0gICAgICAgIFZp
ZGVvLAotICAgICAgICBBdWRpbywKLSAgICAgICAgRWRpdGFibGUKLSAgICB9OwotCi0gICAgQ29u
dGV4dE1lbnVEZWZhdWx0VGVzdCgpCi0gICAgICAgIDogbV9leHBlY3RlZE1lbnVUeXBlKE5hdmln
YXRpb24pCi0gICAgewotICAgIH0KLQotICAgIGJvb2wgY29udGV4dE1lbnUoV2ViS2l0Q29udGV4
dE1lbnUqIGNvbnRleHRNZW51LCBHZGtFdmVudCogZXZlbnQsIFdlYktpdEhpdFRlc3RSZXN1bHQq
IGhpdFRlc3RSZXN1bHQpCi0gICAgewotICAgICAgICBHTGlzdCogaXRlciA9IHdlYmtpdF9jb250
ZXh0X21lbnVfZ2V0X2l0ZW1zKGNvbnRleHRNZW51KTsKLQotICAgICAgICBzd2l0Y2ggKG1fZXhw
ZWN0ZWRNZW51VHlwZSkgewotICAgICAgICBjYXNlIE5hdmlnYXRpb246Ci0gICAgICAgICAgICBn
X2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xpbmsoaGl0VGVzdFJl
c3VsdCkpOwotICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29u
dGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgICAgICAgICBnX2Fzc2VydCghd2Vi
a2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQpKTsKLSAg
ICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfZWRp
dGFibGUoaGl0VGVzdFJlc3VsdCkpOwotICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0
ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
Tl9HT19CQUNLLCBWaXNpYmxlKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVt
SXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05f
R09fRk9SV0FSRCwgVmlzaWJsZSk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRl
bUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9O
X1NUT1AsIFZpc2libGUpOwotICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0
b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9SRUxP
QUQsIFZpc2libGUgfCBFbmFibGVkKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IExpbms6Ci0gICAgICAgICAgICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRl
eHRfaXNfbGluayhoaXRUZXN0UmVzdWx0KSk7Ci0gICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0
X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQpKTsKLSAgICAg
ICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbWVkaWEo
aGl0VGVzdFJlc3VsdCkpOwotICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9y
ZXN1bHRfY29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgICAgICAgICBp
dGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJ
VF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5fTElOSywgVmlzaWJsZSB8IEVuYWJsZWQpOwotICAg
ICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChp
dGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0xJTktfSU5fTkVXX1dJTkRPVywg
VmlzaWJsZSB8IEVuYWJsZWQpOwotICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1J
c1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9E
T1dOTE9BRF9MSU5LX1RPX0RJU0ssIFZpc2libGUgfCBFbmFibGVkKTsKLSAgICAgICAgICAgIGl0
ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lU
X0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9MSU5LX1RPX0NMSVBCT0FSRCwgVmlzaWJsZSB8IEVu
YWJsZWQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW1hZ2U6Ci0gICAgICAg
ICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xpbmsoaGl0
VGVzdFJlc3VsdCkpOwotICAgICAgICAgICAgZ19hc3NlcnQod2Via2l0X2hpdF90ZXN0X3Jlc3Vs
dF9jb250ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQpKTsKLSAgICAgICAgICAgIGdfYXNzZXJ0
KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbWVkaWEoaGl0VGVzdFJlc3VsdCkp
OwotICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9p
c19lZGl0YWJsZShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJy
ZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVf
QUNUSU9OX09QRU5fSU1BR0VfSU5fTkVXX1dJTkRPVywgVmlzaWJsZSB8IEVuYWJsZWQpOwotICAg
ICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChp
dGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9ET1dOTE9BRF9JTUFHRV9UT19ESVNLLCBW
aXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlz
U3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NP
UFlfSU1BR0VfVE9fQ0xJUEJPQVJELCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgICAgICBp
dGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJ
VF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFlfSU1BR0VfVVJMX1RPX0NMSVBCT0FSRCwgVmlzaWJs
ZSB8IEVuYWJsZWQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTGlua0ltYWdl
OgotICAgICAgICAgICAgZ19hc3NlcnQod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lz
X2xpbmsoaGl0VGVzdFJlc3VsdCkpOwotICAgICAgICAgICAgZ19hc3NlcnQod2Via2l0X2hpdF90
ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQpKTsKLSAgICAgICAgICAg
IGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbWVkaWEoaGl0VGVz
dFJlc3VsdCkpOwotICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRf
Y29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgICAgICAgICBpdGVyID0g
Y2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05U
RVhUX01FTlVfQUNUSU9OX09QRU5fTElOSywgVmlzaWJsZSB8IEVuYWJsZWQpOwotICAgICAgICAg
ICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0xJTktfSU5fTkVXX1dJTkRPVywgVmlzaWJs
ZSB8IEVuYWJsZWQpOwotICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2Nr
QWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9ET1dOTE9B
RF9MSU5LX1RPX0RJU0ssIFZpc2libGUgfCBFbmFibGVkKTsKLSAgICAgICAgICAgIGl0ZXIgPSBj
aGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fQ09QWV9MSU5LX1RPX0NMSVBCT0FSRCwgVmlzaWJsZSB8IEVuYWJsZWQp
OwotICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1NlcGFyYXRvckFuZEdldE5l
eHQoaXRlcik7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rp
b25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX09QRU5fSU1BR0Vf
SU5fTkVXX1dJTkRPVywgVmlzaWJsZSB8IEVuYWJsZWQpOwotICAgICAgICAgICAgaXRlciA9IGNo
ZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVY
VF9NRU5VX0FDVElPTl9ET1dOTE9BRF9JTUFHRV9UT19ESVNLLCBWaXNpYmxlIHwgRW5hYmxlZCk7
Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXRO
ZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFlfSU1BR0VfVE9fQ0xJUEJP
QVJELCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50
SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNU
SU9OX0NPUFlfSU1BR0VfVVJMX1RPX0NMSVBCT0FSRCwgVmlzaWJsZSB8IEVuYWJsZWQpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVmlkZW86Ci0gICAgICAgICAgICBnX2Fzc2Vy
dCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xpbmsoaGl0VGVzdFJlc3VsdCkp
OwotICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9p
c19pbWFnZShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgICAgICAgICBnX2Fzc2VydCh3ZWJraXRfaGl0
X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbWVkaWEoaGl0VGVzdFJlc3VsdCkpOwotICAgICAgICAg
ICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19lZGl0YWJsZSho
aXRUZXN0UmVzdWx0KSk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3Rv
Y2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX01FRElB
X1BMQVksIFZpc2libGUgfCBFbmFibGVkKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJl
bnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9B
Q1RJT05fTUVESUFfTVVURSwgVmlzaWJsZSk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJy
ZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVf
QUNUSU9OX1RPR0dMRV9NRURJQV9DT05UUk9MUywgVmlzaWJsZSB8IEVuYWJsZWQgfCBDaGVja2Vk
KTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdl
dE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fVE9HR0xFX01FRElBX0xPT1As
IFZpc2libGUgfCBFbmFibGVkKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVt
SXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05f
RU5URVJfVklERU9fRlVMTFNDUkVFTiwgVmlzaWJsZSB8IEVuYWJsZWQpOwotICAgICAgICAgICAg
aXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1NlcGFyYXRvckFuZEdldE5leHQoaXRlcik7Ci0gICAg
ICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0
ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFlfVklERU9fTElOS19UT19DTElQQk9B
UkQsIFZpc2libGUgfCBFbmFibGVkKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJ
dGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T05fT1BFTl9WSURFT19JTl9ORVdfV0lORE9XLCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAg
ICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIs
IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0RPV05MT0FEX1ZJREVPX1RPX0RJU0ssIFZpc2li
bGUgfCBFbmFibGVkKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEF1ZGlvOgot
ICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19s
aW5rKGhpdFRlc3RSZXN1bHQpKTsKLSAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rl
c3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkpOwotICAgICAgICAgICAg
Z19hc3NlcnQod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RS
ZXN1bHQpKTsKLSAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2Nv
bnRleHRfaXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkpOwotICAgICAgICAgICAgaXRlciA9IGNo
ZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVY
VF9NRU5VX0FDVElPTl9NRURJQV9QTEFZLCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgICAg
ICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdF
QktJVF9DT05URVhUX01FTlVfQUNUSU9OX01FRElBX01VVEUsIFZpc2libGUpOwotICAgICAgICAg
ICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9UT0dHTEVfTUVESUFfQ09OVFJPTFMsIFZpc2libGUg
fCBFbmFibGVkIHwgQ2hlY2tlZCk7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRl
bUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9O
X1RPR0dMRV9NRURJQV9MT09QLCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgICAgICBpdGVy
ID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9D
T05URVhUX01FTlVfQUNUSU9OX0VOVEVSX1ZJREVPX0ZVTExTQ1JFRU4sIFZpc2libGUpOwotICAg
ICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1NlcGFyYXRvckFuZEdldE5leHQoaXRl
cik7Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRH
ZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFlfQVVESU9fTElOS19U
T19DTElQQk9BUkQsIFZpc2libGUgfCBFbmFibGVkKTsKLSAgICAgICAgICAgIGl0ZXIgPSBjaGVj
a0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRf
TUVOVV9BQ1RJT05fT1BFTl9BVURJT19JTl9ORVdfV0lORE9XLCBWaXNpYmxlIHwgRW5hYmxlZCk7
Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXRO
ZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0RPV05MT0FEX0FVRElPX1RPX0RJ
U0ssIFZpc2libGUgfCBFbmFibGVkKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEVkaXRhYmxlOgotICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRf
Y29udGV4dF9pc19saW5rKGhpdFRlc3RSZXN1bHQpKTsKLSAgICAgICAgICAgIGdfYXNzZXJ0KCF3
ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkpOwot
ICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19t
ZWRpYShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgICAgICAgICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rl
c3RfcmVzdWx0X2NvbnRleHRfaXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkpOwotICAgICAgICAg
ICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DVVQsIFZpc2libGUpOwotICAgICAgICAgICAgaXRl
ciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRf
Q09OVEVYVF9NRU5VX0FDVElPTl9DT1BZLCBWaXNpYmxlKTsKLSAgICAgICAgICAgIGl0ZXIgPSBj
aGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fUEFTVEUsIFZpc2libGUgfCBFbmFibGVkKTsKLSAgICAgICAgICAgIGl0
ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lU
X0NPTlRFWFRfTUVOVV9BQ1RJT05fREVMRVRFLCBWaXNpYmxlKTsKLSAgICAgICAgICAgIGl0ZXIg
PSBjaGVja0N1cnJlbnRJdGVtSXNTZXBhcmF0b3JBbmRHZXROZXh0KGl0ZXIpOwotICAgICAgICAg
ICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9TRUxFQ1RfQUxMLCBWaXNpYmxlIHwgRW5hYmxlZCk7
Ci0gICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU2VwYXJhdG9yQW5kR2V0TmV4
dChpdGVyKTsKLSAgICAgICAgICAgIGlmIChzaG91bGRTaG93SW5wdXRNZXRob2RzTWVudSgpKQot
ICAgICAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdl
dE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fSU5QVVRfTUVUSE9EUywgVmlz
aWJsZSB8IEVuYWJsZWQpOwotICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0
b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9VTklD
T0RFLCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfZGV2ZWxvcGVyX2V4dHJhcyh3
ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKG1fd2ViVmlldykpKSB7Ci0gICAgICAgICAgICBp
dGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU2VwYXJhdG9yQW5kR2V0TmV4dChpdGVyKTsKLSAgICAg
ICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRl
ciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fSU5TUEVDVF9FTEVNRU5ULCBWaXNpYmxlIHwg
RW5hYmxlZCk7Ci0gICAgICAgIH0KLSAgICAgICAgZ19hc3NlcnQoIWl0ZXIpOwotCi0gICAgICAg
IHF1aXRNYWluTG9vcCgpOwotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIERl
ZmF1bHRNZW51VHlwZSBtX2V4cGVjdGVkTWVudVR5cGU7Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0
Q29udGV4dE1lbnVEZWZhdWx0TWVudShDb250ZXh0TWVudURlZmF1bHRUZXN0KiB0ZXN0LCBnY29u
c3Rwb2ludGVyKQotewotICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgp
OwotCi0gICAgY29uc3QgY2hhciogbGlua3NIVE1MID0KLSAgICAgICAgIjxodG1sPjxib2R5PiIK
LSAgICAgICAgIiA8YSBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjEnIGhy
ZWY9J2h0dHA6Ly93d3cud2Via2l0Z3RrLm9yZycgdGl0bGU9J1dlYktpdEdUSysgVGl0bGUnPldl
YktpdEdUSysgV2Vic2l0ZTwvYT4iCi0gICAgICAgICIgPGltZyBzdHlsZT0ncG9zaXRpb246YWJz
b2x1dGU7IGxlZnQ6MTsgdG9wOjEwJyBzcmM9JzB4ZGVhZGJlZWYnIHdpZHRoPTUgaGVpZ2h0PTU+
PC9pbWc+IgotICAgICAgICAiIDxhIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0
b3A6MjAnIGhyZWY9J2h0dHA6Ly93d3cud2Via2l0Z3RrLm9yZy9sb2dvJyB0aXRsZT0nV2ViS2l0
R1RLKyBMb2dvJz48aW1nIHNyYz0nMHhkZWFkYmVlZicgd2lkdGg9NSBoZWlnaHQ9NT48L2ltZz48
L2E+IgotICAgICAgICAiIDxpbnB1dCBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsg
dG9wOjMwJyBzaXplPScxMCc+PC9pbnB1dD4iCi0gICAgICAgICIgPHZpZGVvIHN0eWxlPSdwb3Np
dGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6NTAnIHdpZHRoPSczMDAnIGhlaWdodD0nMzAwJyBj
b250cm9scz0nY29udHJvbHMnIHByZWxvYWQ9J25vbmUnPjxzb3VyY2Ugc3JjPSdtb3ZpZS5vZ2cn
IHR5cGU9J3ZpZGVvL29nZycgLz48L3ZpZGVvPiIKLSAgICAgICAgIiA8YXVkaW8gc3R5bGU9J3Bv
c2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRvcDo2MCcgd2lkdGg9JzUwJyBoZWlnaHQ9JzIwJyBj
b250cm9scz0nY29udHJvbHMnIHByZWxvYWQ9J25vbmUnPjxzb3VyY2Ugc3JjPSd0cmFjay5tcDMn
IHR5cGU9J2F1ZGlvL21wMycgLz48L2F1ZGlvPiIKLSAgICAgICAgIjwvYm9keT48L2h0bWw+IjsK
LSAgICB0ZXN0LT5sb2FkSHRtbChsaW5rc0hUTUwsICJmaWxlOi8vLyIpOwotICAgIHRlc3QtPndh
aXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgLy8gQ29udGV4dCBtZW51IGZvciBkb2N1bWVu
dC4KLSAgICB0ZXN0LT5tX2V4cGVjdGVkTWVudVR5cGUgPSBDb250ZXh0TWVudURlZmF1bHRUZXN0
OjpOYXZpZ2F0aW9uOwotICAgIHRlc3QtPnNob3dDb250ZXh0TWVudUF0UG9zaXRpb25BbmRXYWl0
VW50aWxGaW5pc2hlZCgwLCAwKTsKLQotICAgIC8vIENvbnRleHQgbWVudSBmb3IgbGluay4KLSAg
ICB0ZXN0LT5tX2V4cGVjdGVkTWVudVR5cGUgPSBDb250ZXh0TWVudURlZmF1bHRUZXN0OjpMaW5r
OwotICAgIHRlc3QtPnNob3dDb250ZXh0TWVudUF0UG9zaXRpb25BbmRXYWl0VW50aWxGaW5pc2hl
ZCgxLCAxKTsKLQotICAgIC8vIENvbnRleHQgbWVudSBmb3IgaW1hZ2UuCi0gICAgdGVzdC0+bV9l
eHBlY3RlZE1lbnVUeXBlID0gQ29udGV4dE1lbnVEZWZhdWx0VGVzdDo6SW1hZ2U7Ci0gICAgdGVz
dC0+c2hvd0NvbnRleHRNZW51QXRQb3NpdGlvbkFuZFdhaXRVbnRpbEZpbmlzaGVkKDEsIDEwKTsK
LQotICAgIC8vIEVuYWJsZSBkZXZlbG9wZXIgZXh0cmFzIG5vdywgc28gdGhhdCBpbnNwZWN0b3Ig
ZWxlbWVudAotICAgIC8vIHdpbGwgYmUgc2hvd24gaW4gdGhlIGRlZmF1bHQgY29udGV4dCBtZW51
LgotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX2RldmVsb3Blcl9leHRyYXMod2Via2l0
X3dlYl92aWV3X2dldF9zZXR0aW5ncyh0ZXN0LT5tX3dlYlZpZXcpLCBUUlVFKTsKLQotICAgIC8v
IENvbnRleHQgbWVudSBmb3IgaW1hZ2UgbGluay4KLSAgICB0ZXN0LT5tX2V4cGVjdGVkTWVudVR5
cGUgPSBDb250ZXh0TWVudURlZmF1bHRUZXN0OjpMaW5rSW1hZ2U7Ci0gICAgdGVzdC0+c2hvd0Nv
bnRleHRNZW51QXRQb3NpdGlvbkFuZFdhaXRVbnRpbEZpbmlzaGVkKDEsIDIwKTsKLQotICAgIC8v
IENvbnRleHQgbWVudSBmb3IgdmlkZW8uCi0gICAgdGVzdC0+bV9leHBlY3RlZE1lbnVUeXBlID0g
Q29udGV4dE1lbnVEZWZhdWx0VGVzdDo6VmlkZW87Ci0gICAgdGVzdC0+c2hvd0NvbnRleHRNZW51
QXRQb3NpdGlvbkFuZFdhaXRVbnRpbEZpbmlzaGVkKDEsIDUwKTsKLQotICAgIC8vIENvbnRleHQg
bWVudSBmb3IgYXVkaW8uCi0gICAgdGVzdC0+bV9leHBlY3RlZE1lbnVUeXBlID0gQ29udGV4dE1l
bnVEZWZhdWx0VGVzdDo6QXVkaW87Ci0gICAgdGVzdC0+c2hvd0NvbnRleHRNZW51QXRQb3NpdGlv
bkFuZFdhaXRVbnRpbEZpbmlzaGVkKDEsIDYwKTsKLQotICAgIC8vIENvbnRleHQgbWVudSBmb3Ig
ZWRpdGFibGUuCi0gICAgdGVzdC0+bV9leHBlY3RlZE1lbnVUeXBlID0gQ29udGV4dE1lbnVEZWZh
dWx0VGVzdDo6RWRpdGFibGU7Ci0gICAgdGVzdC0+c2hvd0NvbnRleHRNZW51QXRQb3NpdGlvbkFu
ZFdhaXRVbnRpbEZpbmlzaGVkKDUsIDM1KTsKLX0KLQotY2xhc3MgQ29udGV4dE1lbnVDdXN0b21U
ZXN0OiBwdWJsaWMgQ29udGV4dE1lbnVUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVT
VF9GSVhUVVJFKENvbnRleHRNZW51Q3VzdG9tVGVzdCk7Ci0KLSAgICBDb250ZXh0TWVudUN1c3Rv
bVRlc3QoKQotICAgICAgICA6IG1faXRlbVRvQWN0aXZhdGVMYWJlbCgwKQotICAgICAgICAsIG1f
YWN0aXZhdGVkKGZhbHNlKQotICAgICAgICAsIG1fdG9nZ2xlZChmYWxzZSkKLSAgICB7Ci0gICAg
fQotCi0gICAgYm9vbCBjb250ZXh0TWVudShXZWJLaXRDb250ZXh0TWVudSogY29udGV4dE1lbnUs
IEdka0V2ZW50KiwgV2ViS2l0SGl0VGVzdFJlc3VsdCogaGl0VGVzdFJlc3VsdCkKLSAgICB7Ci0g
ICAgICAgIC8vIEFwcGVuZCBvdXIgY3VzdG9tIGl0ZW0gdG8gdGhlIGRlZmF1bHQgbWVudS4KLSAg
ICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBlbmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250
ZXh0X21lbnVfaXRlbV9uZXcobV9hY3Rpb24uZ2V0KCkpKTsKLSAgICAgICAgcXVpdE1haW5Mb29w
KCk7Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEd0a01lbnVJdGVtKiBn
ZXRNZW51SXRlbShHdGtNZW51KiBtZW51LCBjb25zdCBnY2hhciogaXRlbUxhYmVsKQotICAgIHsK
LSAgICAgICAgR093blB0cjxHTGlzdD4gaXRlbXMoZ3RrX2NvbnRhaW5lcl9nZXRfY2hpbGRyZW4o
R1RLX0NPTlRBSU5FUihtZW51KSkpOwotICAgICAgICBmb3IgKEdMaXN0KiBpdGVyID0gaXRlbXMu
Z2V0KCk7IGl0ZXI7IGl0ZXIgPSBnX2xpc3RfbmV4dChpdGVyKSkgewotICAgICAgICAgICAgR3Rr
TWVudUl0ZW0qIGNoaWxkID0gR1RLX01FTlVfSVRFTShpdGVyLT5kYXRhKTsKLSAgICAgICAgICAg
IGlmIChnX3N0cl9lcXVhbChpdGVtTGFiZWwsIGd0a19tZW51X2l0ZW1fZ2V0X2xhYmVsKGNoaWxk
KSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkOwotICAgICAgICB9Ci0gICAgICAgIGdf
YXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHZv
aWQgYWN0aXZhdGVNZW51SXRlbSgpCi0gICAgewotICAgICAgICBnX2Fzc2VydChtX2l0ZW1Ub0Fj
dGl2YXRlTGFiZWwpOwotICAgICAgICBHdGtNZW51KiBtZW51ID0gZ2V0UG9wdXBNZW51KCk7Ci0g
ICAgICAgIEd0a01lbnVJdGVtKiBpdGVtID0gZ2V0TWVudUl0ZW0obWVudSwgbV9pdGVtVG9BY3Rp
dmF0ZUxhYmVsKTsKLSAgICAgICAgZ3RrX21lbnVfc2hlbGxfYWN0aXZhdGVfaXRlbShHVEtfTUVO
VV9TSEVMTChtZW51KSwgR1RLX1dJREdFVChpdGVtKSwgVFJVRSk7Ci0gICAgICAgIG1faXRlbVRv
QWN0aXZhdGVMYWJlbCA9IDA7Ci0gICAgfQotCi0gICAgc3RhdGljIGdib29sZWFuIGFjdGl2YXRl
TWVudUl0ZW1JZGxlQ2FsbGJhY2soZ3BvaW50ZXIgdXNlckRhdGEpCi0gICAgewotICAgICAgICBD
b250ZXh0TWVudUN1c3RvbVRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxDb250ZXh0TWVudUN1c3Rv
bVRlc3QqPih1c2VyRGF0YSk7Ci0gICAgICAgIHRlc3QtPmFjdGl2YXRlTWVudUl0ZW0oKTsKLSAg
ICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQotICAgIHZvaWQgYWN0aXZhdGVDdXN0b21NZW51
SXRlbUFuZFdhaXRVbnRpbEFjdGl2YXRlZChjb25zdCBjaGFyKiBhY3Rpb25MYWJlbCkKLSAgICB7
Ci0gICAgICAgIG1fYWN0aXZhdGVkID0gbV90b2dnbGVkID0gZmFsc2U7Ci0gICAgICAgIG1faXRl
bVRvQWN0aXZhdGVMYWJlbCA9IGFjdGlvbkxhYmVsOwotICAgICAgICBnX2lkbGVfYWRkKGFjdGl2
YXRlTWVudUl0ZW1JZGxlQ2FsbGJhY2ssIHRoaXMpOwotICAgICAgICBnX21haW5fbG9vcF9ydW4o
bV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgdm9pZCB0b2dnbGVDdXN0b21NZW51SXRlbUFuZFdh
aXRVbnRpbFRvZ2dsZWQoY29uc3QgY2hhciogYWN0aW9uTGFiZWwpCi0gICAgewotICAgICAgICBh
Y3RpdmF0ZUN1c3RvbU1lbnVJdGVtQW5kV2FpdFVudGlsQWN0aXZhdGVkKGFjdGlvbkxhYmVsKTsK
LSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBhY3Rpb25BY3RpdmF0ZWRDYWxsYmFjayhHdGtBY3Rp
b24qLCBDb250ZXh0TWVudUN1c3RvbVRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICB0ZXN0LT5t
X2FjdGl2YXRlZCA9IHRydWU7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgYWN0aW9uVG9nZ2xl
ZENhbGxiYWNrKEd0a0FjdGlvbiosIENvbnRleHRNZW51Q3VzdG9tVGVzdCogdGVzdCkKLSAgICB7
Ci0gICAgICAgIHRlc3QtPm1fdG9nZ2xlZCA9IHRydWU7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRB
Y3Rpb24oR3RrQWN0aW9uKiBhY3Rpb24pCi0gICAgewotICAgICAgICBtX2FjdGlvbiA9IGFjdGlv
bjsKLSAgICAgICAgaWYgKEdUS19JU19UT0dHTEVfQUNUSU9OKGFjdGlvbikpCi0gICAgICAgICAg
ICBnX3NpZ25hbF9jb25uZWN0KGFjdGlvbiwgInRvZ2dsZWQiLCBHX0NBTExCQUNLKGFjdGlvblRv
Z2dsZWRDYWxsYmFjayksIHRoaXMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBnX3NpZ25h
bF9jb25uZWN0KGFjdGlvbiwgImFjdGl2YXRlIiwgR19DQUxMQkFDSyhhY3Rpb25BY3RpdmF0ZWRD
YWxsYmFjayksIHRoaXMpOwotICAgIH0KLQotICAgIEdSZWZQdHI8R3RrQWN0aW9uPiBtX2FjdGlv
bjsKLSAgICBjb25zdCBjaGFyKiBtX2l0ZW1Ub0FjdGl2YXRlTGFiZWw7Ci0gICAgYm9vbCBtX2Fj
dGl2YXRlZDsKLSAgICBib29sIG1fdG9nZ2xlZDsKLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RDb250
ZXh0TWVudVBvcHVsYXRlTWVudShDb250ZXh0TWVudUN1c3RvbVRlc3QqIHRlc3QsIGdjb25zdHBv
aW50ZXIpCi17Ci0gICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7Ci0K
LSAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHk+V2ViS2l0R1RLKyBDb250ZXh0IG1lbnUg
dGVzdHM8L2JvZHk+PC9odG1sPiIsICJmaWxlOi8vLyIpOwotICAgIHRlc3QtPndhaXRVbnRpbExv
YWRGaW5pc2hlZCgpOwotCi0gICAgLy8gQ3JlYXRlIGEgY3VzdG9tIG1lbnUgaXRlbS4KLSAgICBH
UmVmUHRyPEd0a0FjdGlvbj4gYWN0aW9uID0gYWRvcHRHUmVmKGd0a19hY3Rpb25fbmV3KCJXZWJL
aXRHVEsrQ3VzdG9tQWN0aW9uIiwgIkN1c3RvbSBfQWN0aW9uIiwgMCwgMCkpOwotICAgIHRlc3Qt
PnNldEFjdGlvbihhY3Rpb24uZ2V0KCkpOwotICAgIHRlc3QtPnNob3dDb250ZXh0TWVudUFuZFdh
aXRVbnRpbEZpbmlzaGVkKCk7Ci0gICAgdGVzdC0+YWN0aXZhdGVDdXN0b21NZW51SXRlbUFuZFdh
aXRVbnRpbEFjdGl2YXRlZChndGtfYWN0aW9uX2dldF9sYWJlbChhY3Rpb24uZ2V0KCkpKTsKLSAg
ICBnX2Fzc2VydCh0ZXN0LT5tX2FjdGl2YXRlZCk7Ci0gICAgZ19hc3NlcnQoIXRlc3QtPm1fdG9n
Z2xlZCk7Ci0KLSAgICAvLyBDcmVhdGUgYSBjdXN0b20gdG9nZ2xlIG1lbnUgaXRlbS4KLSAgICBH
UmVmUHRyPEd0a0FjdGlvbj4gdG9nZ2xlQWN0aW9uID0gYWRvcHRHUmVmKEdUS19BQ1RJT04oZ3Rr
X3RvZ2dsZV9hY3Rpb25fbmV3KCJXZWJLaXRHVEsrQ3VzdG9tVG9nZ2xlQWN0aW9uIiwgIkN1c3Rv
bSBfVG9nZ2xlIEFjdGlvbiIsIDAsIDApKSk7Ci0gICAgdGVzdC0+c2V0QWN0aW9uKHRvZ2dsZUFj
dGlvbi5nZXQoKSk7Ci0gICAgdGVzdC0+c2hvd0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmluaXNo
ZWQoKTsKLSAgICB0ZXN0LT50b2dnbGVDdXN0b21NZW51SXRlbUFuZFdhaXRVbnRpbFRvZ2dsZWQo
Z3RrX2FjdGlvbl9nZXRfbGFiZWwodG9nZ2xlQWN0aW9uLmdldCgpKSk7Ci0gICAgZ19hc3NlcnQo
IXRlc3QtPm1fYWN0aXZhdGVkKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX3RvZ2dsZWQpOwotfQot
Ci1jbGFzcyBDb250ZXh0TWVudUN1c3RvbUZ1bGxUZXN0OiBwdWJsaWMgQ29udGV4dE1lbnVUZXN0
IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKENvbnRleHRNZW51Q3VzdG9t
RnVsbFRlc3QpOwotCi0gICAgYm9vbCBjb250ZXh0TWVudShXZWJLaXRDb250ZXh0TWVudSogY29u
dGV4dE1lbnUsIEdka0V2ZW50KiwgV2ViS2l0SGl0VGVzdFJlc3VsdCopCi0gICAgewotICAgICAg
ICAvLyBDbGVhciBwcm9wb3NlZCBtZW51IGFuZCBidWlsZCBvdXIgb3duLgotICAgICAgICB3ZWJr
aXRfY29udGV4dF9tZW51X3JlbW92ZV9hbGwoY29udGV4dE1lbnUpOwotICAgICAgICBnX2Fzc2Vy
dF9jbXBpbnQod2Via2l0X2NvbnRleHRfbWVudV9nZXRfbl9pdGVtcyhjb250ZXh0TWVudSksID09
LCAwKTsKLQotICAgICAgICAvLyBBZGQgYWN0aW9ucyBmcm9tIHN0b2NrLgotICAgICAgICB3ZWJr
aXRfY29udGV4dF9tZW51X3ByZXBlbmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVf
aXRlbV9uZXdfZnJvbV9zdG9ja19hY3Rpb24oV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fR09f
QkFDSykpOwotICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwg
d2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19mcm9tX3N0b2NrX2FjdGlvbihXRUJLSVRfQ09O
VEVYVF9NRU5VX0FDVElPTl9HT19GT1JXQVJEKSk7Ci0gICAgICAgIHdlYmtpdF9jb250ZXh0X21l
bnVfaW5zZXJ0KGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X3NlcGFy
YXRvcigpLCAyKTsKLQotICAgICAgICAvLyBBZGQgY3VzdG9tIGFjdGlvbnMuCi0gICAgICAgIEdS
ZWZQdHI8R3RrQWN0aW9uPiBhY3Rpb24gPSBhZG9wdEdSZWYoZ3RrX2FjdGlvbl9uZXcoIldlYktp
dEdUSytDdXN0b21BY3Rpb24iLCAiQ3VzdG9tIF9BY3Rpb24iLCAwLCAwKSk7Ci0gICAgICAgIGd0
a19hY3Rpb25fc2V0X3NlbnNpdGl2ZShhY3Rpb24uZ2V0KCksIEZBTFNFKTsKLSAgICAgICAgd2Vi
a2l0X2NvbnRleHRfbWVudV9pbnNlcnQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVf
aXRlbV9uZXcoYWN0aW9uLmdldCgpKSwgLTEpOwotICAgICAgICBHUmVmUHRyPEd0a0FjdGlvbj4g
dG9nZ2xlQWN0aW9uID0gYWRvcHRHUmVmKEdUS19BQ1RJT04oZ3RrX3RvZ2dsZV9hY3Rpb25fbmV3
KCJXZWJLaXRHVEsrQ3VzdG9tVG9nZ2xlQWN0aW9uIiwgIkN1c3RvbSBfVG9nZ2xlIEFjdGlvbiIs
IDAsIDApKSk7Ci0gICAgICAgIGd0a190b2dnbGVfYWN0aW9uX3NldF9hY3RpdmUoR1RLX1RPR0dM
RV9BQ1RJT04odG9nZ2xlQWN0aW9uLmdldCgpKSwgVFJVRSk7Ci0gICAgICAgIHdlYmtpdF9jb250
ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3
KHRvZ2dsZUFjdGlvbi5nZXQoKSkpOwotICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVu
ZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19zZXBhcmF0b3IoKSk7
Ci0KLSAgICAgICAgLy8gQWRkIGEgc3VibWVudS4KLSAgICAgICAgR1JlZlB0cjxXZWJLaXRDb250
ZXh0TWVudT4gc3ViTWVudSA9IGFkb3B0R1JlZih3ZWJraXRfY29udGV4dF9tZW51X25ldygpKTsK
LSAgICAgICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChz
dWJNZW51LmdldCgpKSk7Ci0gICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfaW5zZXJ0KHN1Yk1l
bnUuZ2V0KCksIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfZnJvbV9zdG9ja19hY3Rpb25f
d2l0aF9sYWJlbChXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9TVE9QLCAiU3RvcCBMb2FkIiks
IDApOwotICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2luc2VydChzdWJNZW51LmdldCgpLCB3
ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X2Zyb21fc3RvY2tfYWN0aW9uKFdFQktJVF9DT05U
RVhUX01FTlVfQUNUSU9OX1JFTE9BRCksIC0xKTsKLSAgICAgICAgd2Via2l0X2NvbnRleHRfbWVu
dV9hcHBlbmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfd2l0aF9z
dWJtZW51KCJMb2FkIG9wdGlvbnMiLCBzdWJNZW51LmdldCgpKSk7Ci0gICAgICAgIHdlYmtpdF9j
b250ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1f
bmV3X3NlcGFyYXRvcigpKTsKLQotICAgICAgICAvLyBNb3ZlIExvYWQgc3VibWVudSBiZWZvcmUg
Y3VzdG9tIGFjdGlvbnMuCi0gICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfbW92ZV9pdGVtKGNv
bnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2xhc3QoY29udGV4dE1lbnUpLCAzKTsKLSAg
ICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9tb3ZlX2l0ZW0oY29udGV4dE1lbnUsIHdlYmtpdF9j
b250ZXh0X21lbnVfbGFzdChjb250ZXh0TWVudSksIDMpOwotCi0gICAgICAgIC8vIElmIGxhc3Qg
aXRlbSBpcyBhIHNlcGFyYXRvciwgcmVtb3ZlIGl0LgotICAgICAgICBpZiAod2Via2l0X2NvbnRl
eHRfbWVudV9pdGVtX2lzX3NlcGFyYXRvcih3ZWJraXRfY29udGV4dF9tZW51X2xhc3QoY29udGV4
dE1lbnUpKSkKLSAgICAgICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfcmVtb3ZlKGNvbnRleHRN
ZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2xhc3QoY29udGV4dE1lbnUpKTsKLQotICAgICAgICAv
LyBDaGVjayB0aGUgbWVudS4KLSAgICAgICAgR0xpc3QqIGl0ZXIgPSB3ZWJraXRfY29udGV4dF9t
ZW51X2dldF9pdGVtcyhjb250ZXh0TWVudSk7Ci0KLSAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVu
dEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FD
VElPTl9HT19CQUNLLCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAgIGl0ZXIgPSBjaGVja0N1
cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVO
VV9BQ1RJT05fR09fRk9SV0FSRCwgVmlzaWJsZSB8IEVuYWJsZWQpOwotICAgICAgICBpdGVyID0g
Y2hlY2tDdXJyZW50SXRlbUlzU2VwYXJhdG9yQW5kR2V0TmV4dChpdGVyKTsKLQotICAgICAgICBH
TGlzdCogc3ViTWVudUl0ZXIgPSAwOwotICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlz
U3ViTWVudUFuZEdldE5leHQoaXRlciwgIkxvYWQgb3B0aW9ucyIsIFZpc2libGUgfCBFbmFibGVk
LCAmc3ViTWVudUl0ZXIpOwotICAgICAgICBzdWJNZW51SXRlciA9IGNoZWNrQ3VycmVudEl0ZW1J
c1N0b2NrQWN0aW9uQW5kR2V0TmV4dChzdWJNZW51SXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9B
Q1RJT05fU1RPUCwgVmlzaWJsZSB8IEVuYWJsZWQpOwotICAgICAgICBzdWJNZW51SXRlciA9IGNo
ZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChzdWJNZW51SXRlciwgV0VCS0lU
X0NPTlRFWFRfTUVOVV9BQ1RJT05fUkVMT0FELCBWaXNpYmxlIHwgRW5hYmxlZCk7Ci0gICAgICAg
IGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTZXBhcmF0b3JBbmRHZXROZXh0KGl0ZXIpOwotCi0g
ICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNDdXN0b21BY3Rpb25BbmRHZXROZXh0KGl0
ZXIsICJDdXN0b20gX0FjdGlvbiIsIFZpc2libGUpOwotICAgICAgICBpdGVyID0gY2hlY2tDdXJy
ZW50SXRlbUlzQ3VzdG9tQWN0aW9uQW5kR2V0TmV4dChpdGVyLCAiQ3VzdG9tIF9Ub2dnbGUgQWN0
aW9uIiwgVmlzaWJsZSB8IEVuYWJsZWQgfCBDaGVja2VkKTsKLSAgICAgICAgZ19hc3NlcnQoIWl0
ZXIpOwotCi0gICAgICAgIHF1aXRNYWluTG9vcCgpOwotCi0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RDb250ZXh0TWVudUN1c3RvbU1lbnUoQ29udGV4
dE1lbnVDdXN0b21GdWxsVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5z
aG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKLQotICAgIHRlc3QtPmxvYWRIdG1sKCI8
aHRtbD48Ym9keT5XZWJLaXRHVEsrIENvbnRleHQgbWVudSB0ZXN0czwvYm9keT48L2h0bWw+Iiwg
ImZpbGU6Ly8vIik7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICB0
ZXN0LT5zaG93Q29udGV4dE1lbnVBbmRXYWl0VW50aWxGaW5pc2hlZCgpOwotfQotCi1jbGFzcyBD
b250ZXh0TWVudURpc2FibGVkVGVzdDogcHVibGljIENvbnRleHRNZW51VGVzdCB7Ci1wdWJsaWM6
Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShDb250ZXh0TWVudURpc2FibGVkVGVzdCk7Ci0K
LSAgICBlbnVtIERpc2FibGVNb2RlIHsKLSAgICAgICAgSWdub3JlQ2xpY2tzLAotICAgICAgICBJ
Z25vcmVEZWZhdWx0TWVudQotICAgIH07Ci0KLSAgICBzdGF0aWMgZ2Jvb2xlYW4gYnV0dG9uUHJl
c3NFdmVudENhbGxiYWNrKEd0a1dpZGdldCosIEdka0V2ZW50KiBldmVudCwgQ29udGV4dE1lbnVE
aXNhYmxlZFRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICBpZiAoZXZlbnQtPmJ1dHRvbi5idXR0
b24gIT0gMykKLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgICAgcmV0dXJuIHRlc3Qt
PnJpZ2h0QnV0dG9uUHJlc3NlZCgpOwotICAgIH0KLQotICAgIENvbnRleHRNZW51RGlzYWJsZWRU
ZXN0KCkKLSAgICAgICAgOiBtX2Rpc2FibGVNb2RlKElnbm9yZUNsaWNrcykKLSAgICB7Ci0gICAg
ICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAiYnV0dG9uLXByZXNzLWV2ZW50IiwgR19D
QUxMQkFDSyhidXR0b25QcmVzc0V2ZW50Q2FsbGJhY2spLCB0aGlzKTsKLSAgICB9Ci0KLSAgICBi
b29sIGNvbnRleHRNZW51KFdlYktpdENvbnRleHRNZW51KiBjb250ZXh0TWVudSwgR2RrRXZlbnQq
LCBXZWJLaXRIaXRUZXN0UmVzdWx0KikKLSAgICB7Ci0gICAgICAgIGlmIChtX2Rpc2FibGVNb2Rl
ID09IElnbm9yZUNsaWNrcykKLSAgICAgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHF1aXRNYWluTG9vcCgpOwotCi0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIGJvb2wgcmlnaHRCdXR0b25QcmVzc2VkKCkKLSAgICB7Ci0g
ICAgICAgIGlmIChtX2Rpc2FibGVNb2RlID09IElnbm9yZUNsaWNrcykgewotICAgICAgICAgICAg
cXVpdE1haW5Mb29wQWZ0ZXJQcm9jZXNzaW5nUGVuZGluZ0V2ZW50cygpOwotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIERpc2FibGVNb2RlIG1fZGlzYWJsZU1vZGU7Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0Q29u
dGV4dE1lbnVEaXNhYmxlTWVudShDb250ZXh0TWVudURpc2FibGVkVGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsK
LQotICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keT5XZWJLaXRHVEsrIENvbnRleHQgbWVu
dSB0ZXN0czwvYm9keT48L2h0bWw+IiwgImZpbGU6Ly8vIik7Ci0gICAgdGVzdC0+d2FpdFVudGls
TG9hZEZpbmlzaGVkKCk7Ci0KLSAgICB0ZXN0LT5tX2Rpc2FibGVNb2RlID0gQ29udGV4dE1lbnVE
aXNhYmxlZFRlc3Q6Oklnbm9yZURlZmF1bHRNZW51OwotICAgIHRlc3QtPnNob3dDb250ZXh0TWVu
dUFuZFdhaXRVbnRpbEZpbmlzaGVkKCk7Ci0KLSAgICB0ZXN0LT5tX2Rpc2FibGVNb2RlID0gQ29u
dGV4dE1lbnVEaXNhYmxlZFRlc3Q6Oklnbm9yZUNsaWNrczsKLSAgICB0ZXN0LT5zaG93Q29udGV4
dE1lbnVBbmRXYWl0VW50aWxGaW5pc2hlZCgpOwotfQotCi1jbGFzcyBDb250ZXh0TWVudVN1Ym1l
bnVUZXN0OiBwdWJsaWMgQ29udGV4dE1lbnVUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJf
VEVTVF9GSVhUVVJFKENvbnRleHRNZW51U3VibWVudVRlc3QpOwotCi0gICAgYm9vbCBjb250ZXh0
TWVudShXZWJLaXRDb250ZXh0TWVudSogY29udGV4dE1lbnUsIEdka0V2ZW50KiwgV2ViS2l0SGl0
VGVzdFJlc3VsdCopCi0gICAgewotICAgICAgICBzaXplX3QgbWVudVNpemUgPSB3ZWJraXRfY29u
dGV4dF9tZW51X2dldF9uX2l0ZW1zKGNvbnRleHRNZW51KTsKLSAgICAgICAgR1JlZlB0cjxXZWJL
aXRDb250ZXh0TWVudT4gc3ViTWVudSA9IGFkb3B0R1JlZih3ZWJraXRfY29udGV4dF9tZW51X25l
dygpKTsKLSAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBlbmQoY29udGV4dE1lbnUsIHdl
YmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfd2l0aF9zdWJtZW51KCJTdWJNZW51SXRlbSIsIHN1
Yk1lbnUuZ2V0KCkpKTsKLSAgICAgICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfY29udGV4dF9t
ZW51X2dldF9uX2l0ZW1zKGNvbnRleHRNZW51KSwgPT0sIG1lbnVTaXplICsgMSk7Ci0KLSAgICAg
ICAgR1JlZlB0cjxXZWJLaXRDb250ZXh0TWVudT4gc3ViTWVudTIgPSBhZG9wdEdSZWYod2Via2l0
X2NvbnRleHRfbWVudV9uZXcoKSk7Ci0gICAgICAgIEdSZWZQdHI8V2ViS2l0Q29udGV4dE1lbnVJ
dGVtPiBpdGVtID0gd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19mcm9tX3N0b2NrX2FjdGlv
bihXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0xJTkspOwotCi0gICAgICAgIC8vIEFk
ZCBzdWJtZW51IHRvIG5ld2x5IGNyZWF0ZWQgaXRlbS4KLSAgICAgICAgZ19hc3NlcnQoIXdlYmtp
dF9jb250ZXh0X21lbnVfaXRlbV9nZXRfc3VibWVudShpdGVtLmdldCgpKSk7Ci0gICAgICAgIHdl
YmtpdF9jb250ZXh0X21lbnVfaXRlbV9zZXRfc3VibWVudShpdGVtLmdldCgpLCBzdWJNZW51Mi5n
ZXQoKSk7Ci0gICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRfc3Vi
bWVudShpdGVtLmdldCgpKSA9PSBzdWJNZW51Mi5nZXQoKSk7Ci0KLSAgICAgICAgLy8gUmVwbGFj
ZSB0aGUgc3VibWVudS4KLSAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX3NldF9zdWJt
ZW51KGl0ZW0uZ2V0KCksIDApOwotICAgICAgICBnX2Fzc2VydCghd2Via2l0X2NvbnRleHRfbWVu
dV9pdGVtX2dldF9zdWJtZW51KGl0ZW0uZ2V0KCkpKTsKLQotICAgICAgICAvLyBUcnkgdG8gYWRk
IGEgc3VibWVudSBhbHJlYWR5IGFkZGVkIHRvIGFub3RoZXIgaXRlbS4KLSAgICAgICAgcmVtb3Zl
TG9nRmF0YWxGbGFnKEdfTE9HX0xFVkVMX1dBUk5JTkcpOwotICAgICAgICB3ZWJraXRfY29udGV4
dF9tZW51X2l0ZW1fc2V0X3N1Ym1lbnUoaXRlbS5nZXQoKSwgc3ViTWVudS5nZXQoKSk7Ci0gICAg
ICAgIGFkZExvZ0ZhdGFsRmxhZyhHX0xPR19MRVZFTF9XQVJOSU5HKTsKLSAgICAgICAgZ19hc3Nl
cnQoIXdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRfc3VibWVudShpdGVtLmdldCgpKSk7Ci0K
LSAgICAgICAgLy8gQSByZW1vdmVkIHN1Ym1lbnUgc2hvdWxkbid0IGhhdmUgYSBwYXJlbnQuCi0g
ICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9zZXRfc3VibWVudShpdGVtLmdldCgpLCBz
dWJNZW51Mi5nZXQoKSk7Ci0gICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9jb250ZXh0X21lbnVfaXRl
bV9nZXRfc3VibWVudShpdGVtLmdldCgpKSA9PSBzdWJNZW51Mi5nZXQoKSk7Ci0KLSAgICAgICAg
cXVpdE1haW5Mb29wKCk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotfTsKLQotc3Rh
dGljIHZvaWQgdGVzdENvbnRleHRNZW51U3ViTWVudShDb250ZXh0TWVudVN1Ym1lbnVUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRp
bE1hcHBlZCgpOwotCi0gICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxib2R5PldlYktpdEdUSysg
Q29udGV4dCBtZW51IHRlc3RzPC9ib2R5PjwvaHRtbD4iLCAiZmlsZTovLy8iKTsKLSAgICB0ZXN0
LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIHRlc3QtPnNob3dDb250ZXh0TWVudUFu
ZFdhaXRVbnRpbEZpbmlzaGVkKCk7Ci19Ci0KLWNsYXNzIENvbnRleHRNZW51RGlzbWlzc2VkVGVz
dDogcHVibGljIENvbnRleHRNZW51VGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1Rf
RklYVFVSRShDb250ZXh0TWVudURpc21pc3NlZFRlc3QpOwotCi0gICAgQ29udGV4dE1lbnVEaXNt
aXNzZWRUZXN0KCkKLSAgICAgICAgOiBtX2Rpc21pc3NlZChmYWxzZSkKLSAgICB7Ci0gICAgfQot
Ci0gICAgYm9vbCBjb250ZXh0TWVudShXZWJLaXRDb250ZXh0TWVudSogY29udGV4dE1lbnUsIEdk
a0V2ZW50KiwgV2ViS2l0SGl0VGVzdFJlc3VsdCopCi0gICAgewotICAgICAgICBxdWl0TWFpbkxv
b3AoKTsKLSAgICAgICAgLy8gU2hvdyB0aGUgZGVmYXVsdCBjb250ZXh0IG1lbnUuCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICB2b2lkIGNvbnRleHRNZW51RGlzbWlzc2VkKCkK
LSAgICB7Ci0gICAgICAgIG1fZGlzbWlzc2VkID0gdHJ1ZTsKLSAgICAgICAgQ29udGV4dE1lbnVU
ZXN0Ojpjb250ZXh0TWVudURpc21pc3NlZCgpOwotICAgIH0KLQotICAgIHZvaWQgc2hvd0NvbnRl
eHRNZW51QW5kV2FpdFVudGlsRGlzbWlzc2VkKCkKLSAgICB7Ci0gICAgICAgIHNob3dDb250ZXh0
TWVudUFuZFdhaXRVbnRpbEZpbmlzaGVkKCk7Ci0gICAgICAgIGRpc21pc3NDb250ZXh0TWVudUFu
ZFdhaXRVbnRpbEZpbmlzaGVkKCk7Ci0gICAgfQotCi0gICAgYm9vbCBtX2Rpc21pc3NlZDsKLX07
Ci0KLXN0YXRpYyB2b2lkIHRlc3RDb250ZXh0TWVudURpc21pc3NlZChDb250ZXh0TWVudURpc21p
c3NlZFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+c2hvd0luV2luZG93
QW5kV2FpdFVudGlsTWFwcGVkKCk7Ci0KLSAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHk+
V2ViS2l0R1RLKyBDb250ZXh0IG1lbnUgdGVzdHM8L2JvZHk+PC9odG1sPiIsICJmaWxlOi8vLyIp
OwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgdGVzdC0+c2hvd0Nv
bnRleHRNZW51QW5kV2FpdFVudGlsRGlzbWlzc2VkKCk7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV9k
aXNtaXNzZWQpOwotfQotCi1jbGFzcyBDb250ZXh0TWVudVNtYXJ0U2VwYXJhdG9yc1Rlc3Q6IHB1
YmxpYyBDb250ZXh0TWVudVRlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRV
UkUoQ29udGV4dE1lbnVTbWFydFNlcGFyYXRvcnNUZXN0KTsKLQotICAgIGJvb2wgY29udGV4dE1l
bnUoV2ViS2l0Q29udGV4dE1lbnUqIGNvbnRleHRNZW51LCBHZGtFdmVudCosIFdlYktpdEhpdFRl
c3RSZXN1bHQqKQotICAgIHsKLSAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9yZW1vdmVfYWxs
KGNvbnRleHRNZW51KTsKLQotICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250
ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19zZXBhcmF0b3IoKSk7Ci0gICAg
ICAgIHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4
dF9tZW51X2l0ZW1fbmV3X3NlcGFyYXRvcigpKTsKLSAgICAgICAgd2Via2l0X2NvbnRleHRfbWVu
dV9hcHBlbmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfZnJvbV9z
dG9ja19hY3Rpb24oV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fR09fQkFDSykpOwotICAgICAg
ICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRf
bWVudV9pdGVtX25ld19mcm9tX3N0b2NrX2FjdGlvbihXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
Tl9HT19GT1JXQVJEKSk7Ci0gICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRl
eHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X3NlcGFyYXRvcigpKTsKLSAgICAg
ICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBlbmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0
X21lbnVfaXRlbV9uZXdfc2VwYXJhdG9yKCkpOwotICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51
X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19mcm9tX3N0
b2NrX2FjdGlvbihXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZKSk7Ci0gICAgICAgIHdl
YmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51
X2l0ZW1fbmV3X3NlcGFyYXRvcigpKTsKLSAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBl
bmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfZnJvbV9zdG9ja19h
Y3Rpb24oV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fSU5TUEVDVF9FTEVNRU5UKSk7Ci0gICAg
ICAgIHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4
dF9tZW51X2l0ZW1fbmV3X3NlcGFyYXRvcigpKTsKLSAgICAgICAgd2Via2l0X2NvbnRleHRfbWVu
dV9hcHBlbmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfc2VwYXJh
dG9yKCkpOwotCi0gICAgICAgIHF1aXRNYWluTG9vcCgpOwotCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICBHdGtNZW51KiBzaG93Q29udGV4dE1lbnVBbmRHZXRHdGtNZW51KCkK
LSAgICB7Ci0gICAgICAgIHNob3dDb250ZXh0TWVudUFuZFdhaXRVbnRpbEZpbmlzaGVkKCk7Ci0g
ICAgICAgIHJldHVybiBnZXRQb3B1cE1lbnUoKTsKLSAgICB9Ci19OwotCi1zdGF0aWMgdm9pZCB0
ZXN0Q29udGV4dE1lbnVTbWFydFNlcGFyYXRvcnMoQ29udGV4dE1lbnVTbWFydFNlcGFyYXRvcnNU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdh
aXRVbnRpbE1hcHBlZCgpOwotCi0gICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxib2R5PldlYktp
dEdUSysgQ29udGV4dCBtZW51IHRlc3RzPC9ib2R5PjwvaHRtbD4iLCAiZmlsZTovLy8iKTsKLSAg
ICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIEd0a01lbnUqIG1lbnUgPSB0
ZXN0LT5zaG93Q29udGV4dE1lbnVBbmRHZXRHdGtNZW51KCk7Ci0gICAgZ19hc3NlcnQobWVudSk7
Ci0KLSAgICAvLyBMZWFkaW5nIGFuZCB0cmFpbGluZyBzZXBhcmF0b3JzIGFyZSBub3QgYWRkZWQg
dG8gdGhlIGNvbnRleHQgbWVudS4KLSAgICBHT3duUHRyPEdMaXN0PiBtZW51SXRlbXMoZ3RrX2Nv
bnRhaW5lcl9nZXRfY2hpbGRyZW4oR1RLX0NPTlRBSU5FUihtZW51KSkpOwotICAgIGdfYXNzZXJ0
X2NtcHVpbnQoZ19saXN0X2xlbmd0aChtZW51SXRlbXMuZ2V0KCkpLCA9PSwgNik7Ci0gICAgR3Rr
V2lkZ2V0KiBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgp
LCAwKSk7Ci0gICAgZ19hc3NlcnQoIUdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYm
IGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOwotICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdf
bGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDEpKTsKLSAgICBnX2Fzc2VydCghR1RLX0lT
X1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVt
KSk7Ci0gICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQo
KSwgMikpOwotICAgIGdfYXNzZXJ0KEdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYm
IGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOwotICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdf
bGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDMpKTsKLSAgICBnX2Fzc2VydCghR1RLX0lT
X1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVt
KSk7Ci0gICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQo
KSwgNCkpOwotICAgIGdfYXNzZXJ0KEdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYm
IGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOwotICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdf
bGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDUpKTsKLSAgICBnX2Fzc2VydCghR1RLX0lT
X1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVt
KSk7Ci0KLSAgICAvLyBIaWRpbmcgYSBtZW51IGl0ZW0gYmV0d2VlbiB0d28gc2VwYXJhdG9ycyBo
aWRlcyB0aGUgZm9sbG93aW5nIHNlcGFyYXRvci4KLSAgICBHdGtBY3Rpb24qIGFjdGlvbiA9IGd0
a19hY3RpdmF0YWJsZV9nZXRfcmVsYXRlZF9hY3Rpb24oR1RLX0FDVElWQVRBQkxFKGdfbGlzdF9u
dGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDMpKSk7Ci0gICAgZ3RrX2FjdGlvbl9zZXRfdmlzaWJs
ZShhY3Rpb24sIEZBTFNFKTsKLSAgICBtZW51SXRlbXMuc2V0KGd0a19jb250YWluZXJfZ2V0X2No
aWxkcmVuKEdUS19DT05UQUlORVIobWVudSkpKTsKLSAgICBnX2Fzc2VydF9jbXB1aW50KGdfbGlz
dF9sZW5ndGgobWVudUl0ZW1zLmdldCgpKSwgPT0sIDYpOwotICAgIGl0ZW0gPSBHVEtfV0lER0VU
KGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDApKTsKLSAgICBnX2Fzc2VydCghR1RL
X0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShp
dGVtKSk7Ci0gICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5n
ZXQoKSwgMSkpOwotICAgIGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVt
KSAmJiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKLSAgICBpdGVtID0gR1RLX1dJREdF
VChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCAyKSk7Ci0gICAgZ19hc3NlcnQoR1RL
X0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShp
dGVtKSk7Ci0gICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5n
ZXQoKSwgMykpOwotICAgIGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVt
KSAmJiAhZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7Ci0gICAgaXRlbSA9IEdUS19XSURH
RVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgNCkpOwotICAgIGdfYXNzZXJ0KEdU
S19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmICFndGtfd2lkZ2V0X2dldF92aXNpYmxl
KGl0ZW0pKTsKLSAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1z
LmdldCgpLCA1KSk7Ci0gICAgZ19hc3NlcnQoIUdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0
ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOwotICAgIGd0a19hY3Rpb25fc2V0
X3Zpc2libGUoYWN0aW9uLCBUUlVFKTsKLQotICAgIC8vIFNob3dpbmcgYW4gYWN0aW9uIGJldHdl
ZW4gdHdvIHNlcGFyYXRvcnMgc2hvd3MgdGhlIGhpZGRlbiBzZXBhcmF0b3IuCi0gICAgaXRlbSA9
IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgMCkpOwotICAgIGdf
YXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0X2dl
dF92aXNpYmxlKGl0ZW0pKTsKLSAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEo
bWVudUl0ZW1zLmdldCgpLCAxKSk7Ci0gICAgZ19hc3NlcnQoIUdUS19JU19TRVBBUkFUT1JfTUVO
VV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOwotICAgIGl0ZW0g
PSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDIpKTsKLSAgICBn
X2Fzc2VydChHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0X2dl
dF92aXNpYmxlKGl0ZW0pKTsKLSAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEo
bWVudUl0ZW1zLmdldCgpLCAzKSk7Ci0gICAgZ19hc3NlcnQoIUdUS19JU19TRVBBUkFUT1JfTUVO
VV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOwotICAgIGl0ZW0g
PSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDQpKTsKLSAgICBn
X2Fzc2VydChHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0X2dl
dF92aXNpYmxlKGl0ZW0pKTsKLSAgICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEo
bWVudUl0ZW1zLmdldCgpLCA1KSk7Ci0gICAgZ19hc3NlcnQoIUdUS19JU19TRVBBUkFUT1JfTUVO
VV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOwotCi0gICAgLy8g
VHJhaWxpbmcgc2VwYXJhdG9ycyBhcmUgaGlkZGVuIHRvby4KLSAgICBhY3Rpb24gPSBndGtfYWN0
aXZhdGFibGVfZ2V0X3JlbGF0ZWRfYWN0aW9uKEdUS19BQ1RJVkFUQUJMRShnX2xpc3RfbnRoX2Rh
dGEobWVudUl0ZW1zLmdldCgpLCA1KSkpOwotICAgIGd0a19hY3Rpb25fc2V0X3Zpc2libGUoYWN0
aW9uLCBGQUxTRSk7Ci0gICAgbWVudUl0ZW1zLnNldChndGtfY29udGFpbmVyX2dldF9jaGlsZHJl
bihHVEtfQ09OVEFJTkVSKG1lbnUpKSk7Ci0gICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250
aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgMCkpOwotICAgIGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJB
VE9SX01FTlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKLSAg
ICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCAxKSk7
Ci0gICAgZ19hc3NlcnQoIUdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193
aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOwotICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9u
dGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDIpKTsKLSAgICBnX2Fzc2VydChHVEtfSVNfU0VQQVJB
VE9SX01FTlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKLSAg
ICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCAzKSk7
Ci0gICAgZ19hc3NlcnQoIUdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193
aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOwotICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9u
dGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDQpKTsKLSAgICBnX2Fzc2VydChHVEtfSVNfU0VQQVJB
VE9SX01FTlVfSVRFTShpdGVtKSAmJiAhZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7Ci0g
ICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgNSkp
OwotICAgIGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAmJiAhZ3Rr
X3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7Ci19Ci0KLXZvaWQgYmVmb3JlQWxsKCkKLXsKLSAg
ICBDb250ZXh0TWVudURlZmF1bHRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiZGVmYXVsdC1t
ZW51IiwgdGVzdENvbnRleHRNZW51RGVmYXVsdE1lbnUpOwotICAgIENvbnRleHRNZW51Q3VzdG9t
VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInBvcHVsYXRlLW1lbnUiLCB0ZXN0Q29udGV4dE1l
bnVQb3B1bGF0ZU1lbnUpOwotICAgIENvbnRleHRNZW51Q3VzdG9tRnVsbFRlc3Q6OmFkZCgiV2Vi
S2l0V2ViVmlldyIsICJjdXN0b20tbWVudSIsIHRlc3RDb250ZXh0TWVudUN1c3RvbU1lbnUpOwot
ICAgIENvbnRleHRNZW51RGlzYWJsZWRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiZGlzYWJs
ZS1tZW51IiwgdGVzdENvbnRleHRNZW51RGlzYWJsZU1lbnUpOwotICAgIENvbnRleHRNZW51U3Vi
bWVudVRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJzdWJtZW51IiwgdGVzdENvbnRleHRNZW51
U3ViTWVudSk7Ci0gICAgQ29udGV4dE1lbnVEaXNtaXNzZWRUZXN0OjphZGQoIldlYktpdFdlYlZp
ZXciLCAibWVudS1kaXNtaXNzZWQiLCB0ZXN0Q29udGV4dE1lbnVEaXNtaXNzZWQpOwotICAgIENv
bnRleHRNZW51U21hcnRTZXBhcmF0b3JzVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInNtYXJ0
LXNlcGFyYXRvcnMiLCB0ZXN0Q29udGV4dE1lbnVTbWFydFNlcGFyYXRvcnMpOwotfQotCi12b2lk
IGFmdGVyQWxsKCkKLXsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL1Rlc3RDb29raWVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RDb29raWVNYW5hZ2VyLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYWRjNmI1YjliYWZjMDE0Mjc2M2EwNGE1Njc1ODVhZjdmOTAzNThiZS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0Q29va2llTWFuYWdlci5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwzMzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2Fs
aWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJXZWJLaXRUZXN0U2VydmVy
LmgiCi0jaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKLSNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgot
Ci1zdGF0aWMgV2ViS2l0VGVzdFNlcnZlcioga1NlcnZlcjsKLXN0YXRpYyBjaGFyKiBrVGVtcERp
cmVjdG9yeTsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGtGaXJzdFBhcnR5RG9tYWluID0gIjEyNy4w
LjAuMSI7Ci1zdGF0aWMgY29uc3QgY2hhcioga1RoaXJkUGFydHlEb21haW4gPSAibG9jYWxob3N0
IjsKLXN0YXRpYyBjb25zdCBjaGFyKiBrSW5kZXhIdG1sRm9ybWF0ID0KLSAgICAiPGh0bWw+PGJv
ZHk+IgotICAgICIgPHA+V2ViS2l0R1RLKyBDb29raWUgTWFuYWdlciB0ZXN0PC9wPiIKLSAgICAi
IDxpbWcgc3JjPSdodHRwOi8vbG9jYWxob3N0OiV1L2ltYWdlLnBuZycgd2lkdGg9NSBoZWlnaHQ9
NT48L2ltZz4iCi0gICAgIjwvYm9keT48L2h0bWw+IjsKLQotY2xhc3MgQ29va2llTWFuYWdlclRl
c3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklY
VFVSRShDb29raWVNYW5hZ2VyVGVzdCk7Ci0KLSAgICBzdGF0aWMgdm9pZCBjb29raWVzQ2hhbmdl
ZENhbGxiYWNrKFdlYktpdENvb2tpZU1hbmFnZXIqLCBDb29raWVNYW5hZ2VyVGVzdCogdGVzdCkK
LSAgICB7Ci0gICAgICAgIHRlc3QtPm1fY29va2llc0NoYW5nZWQgPSB0cnVlOwotICAgICAgICBp
ZiAodGVzdC0+bV9maW5pc2hMb29wV2hlbkNvb2tpZXNDaGFuZ2UpCi0gICAgICAgICAgICBnX21h
aW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIENvb2tpZU1hbmFn
ZXJUZXN0KCkKLSAgICAgICAgOiBXZWJWaWV3VGVzdCgpCi0gICAgICAgICwgbV9jb29raWVNYW5h
Z2VyKHdlYmtpdF93ZWJfY29udGV4dF9nZXRfY29va2llX21hbmFnZXIod2Via2l0X3dlYl92aWV3
X2dldF9jb250ZXh0KG1fd2ViVmlldykpKQotICAgICAgICAsIG1fYWNjZXB0UG9saWN5KFdFQktJ
VF9DT09LSUVfUE9MSUNZX0FDQ0VQVF9OT19USElSRF9QQVJUWSkKLSAgICAgICAgLCBtX2RvbWFp
bnMoMCkKLSAgICAgICAgLCBtX2Nvb2tpZXNDaGFuZ2VkKGZhbHNlKQotICAgICAgICAsIG1fZmlu
aXNoTG9vcFdoZW5Db29raWVzQ2hhbmdlKGZhbHNlKQotICAgIHsKLSAgICAgICAgZ19zaWduYWxf
Y29ubmVjdChtX2Nvb2tpZU1hbmFnZXIsICJjaGFuZ2VkIiwgR19DQUxMQkFDSyhjb29raWVzQ2hh
bmdlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgfQotCi0gICAgfkNvb2tpZU1hbmFnZXJUZXN0KCkK
LSAgICB7Ci0gICAgICAgIGdfc3RyZnJlZXYobV9kb21haW5zKTsKLSAgICAgICAgZ19zaWduYWxf
aGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fY29va2llTWFuYWdlciwgR19TSUdOQUxfTUFU
Q0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7Ci0gICAgICAgIGlmIChtX2Nvb2tpZXNUZXh0Rmls
ZSkKLSAgICAgICAgICAgIGdfdW5saW5rKG1fY29va2llc1RleHRGaWxlLmdldCgpKTsKLSAgICAg
ICAgaWYgKG1fY29va2llc1NRTGl0ZUZpbGUpCi0gICAgICAgICAgICBnX3VubGluayhtX2Nvb2tp
ZXNTUUxpdGVGaWxlLmdldCgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldFBlcnNpc3RlbnRTdG9y
YWdlKFdlYktpdENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlIHN0b3JhZ2UpCi0gICAgewotICAgICAg
ICBjb25zdCBjaGFyKiBmaWxlbmFtZSA9IDA7Ci0gICAgICAgIHN3aXRjaCAoc3RvcmFnZSkgewot
ICAgICAgICBjYXNlIFdFQktJVF9DT09LSUVfUEVSU0lTVEVOVF9TVE9SQUdFX1RFWFQ6Ci0gICAg
ICAgICAgICBpZiAoIW1fY29va2llc1RleHRGaWxlKQotICAgICAgICAgICAgICAgIG1fY29va2ll
c1RleHRGaWxlLnNldChnX2J1aWxkX2ZpbGVuYW1lKGtUZW1wRGlyZWN0b3J5LCAiY29va2llcy50
eHQiLCBOVUxMKSk7Ci0gICAgICAgICAgICBmaWxlbmFtZSA9IG1fY29va2llc1RleHRGaWxlLmdl
dCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV0VCS0lUX0NPT0tJRV9QRVJT
SVNURU5UX1NUT1JBR0VfU1FMSVRFOgotICAgICAgICAgICAgaWYgKCFtX2Nvb2tpZXNTUUxpdGVG
aWxlKQotICAgICAgICAgICAgICAgIG1fY29va2llc1NRTGl0ZUZpbGUuc2V0KGdfYnVpbGRfZmls
ZW5hbWUoa1RlbXBEaXJlY3RvcnksICJjb29raWVzLmRiIiwgTlVMTCkpOwotICAgICAgICAgICAg
ZmlsZW5hbWUgPSBtX2Nvb2tpZXNTUUxpdGVGaWxlLmdldCgpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwot
ICAgICAgICB9Ci0gICAgICAgIHdlYmtpdF9jb29raWVfbWFuYWdlcl9zZXRfcGVyc2lzdGVudF9z
dG9yYWdlKG1fY29va2llTWFuYWdlciwgZmlsZW5hbWUsIHN0b3JhZ2UpOwotICAgIH0KLQotICAg
IHN0YXRpYyB2b2lkIGdldEFjY2VwdFBvbGljeVJlYWR5Q2FsbGJhY2soR09iamVjdCogb2JqZWN0
LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEpCi0gICAgewotICAgICAg
ICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgICAgIFdlYktpdENvb2tpZUFjY2VwdFBvbGlj
eSBwb2xpY3kgPSB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2FjY2VwdF9wb2xpY3lfZmluaXNo
KFdFQktJVF9DT09LSUVfTUFOQUdFUihvYmplY3QpLCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSk7
Ci0gICAgICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7Ci0KLSAgICAgICAgQ29va2llTWFuYWdl
clRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxDb29raWVNYW5hZ2VyVGVzdCo+KHVzZXJEYXRhKTsK
LSAgICAgICAgdGVzdC0+bV9hY2NlcHRQb2xpY3kgPSBwb2xpY3k7Ci0gICAgICAgIGdfbWFpbl9s
b29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgV2ViS2l0Q29va2llQWNj
ZXB0UG9saWN5IGdldEFjY2VwdFBvbGljeSgpCi0gICAgewotICAgICAgICBtX2FjY2VwdFBvbGlj
eSA9IFdFQktJVF9DT09LSUVfUE9MSUNZX0FDQ0VQVF9OT19USElSRF9QQVJUWTsKLSAgICAgICAg
d2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5KG1fY29va2llTWFuYWdlciwg
MCwgZ2V0QWNjZXB0UG9saWN5UmVhZHlDYWxsYmFjaywgdGhpcyk7Ci0gICAgICAgIGdfbWFpbl9s
b29wX3J1bihtX21haW5Mb29wKTsKLQotICAgICAgICByZXR1cm4gbV9hY2NlcHRQb2xpY3k7Ci0g
ICAgfQotCi0gICAgdm9pZCBzZXRBY2NlcHRQb2xpY3koV2ViS2l0Q29va2llQWNjZXB0UG9saWN5
IHBvbGljeSkKLSAgICB7Ci0gICAgICAgIHdlYmtpdF9jb29raWVfbWFuYWdlcl9zZXRfYWNjZXB0
X3BvbGljeShtX2Nvb2tpZU1hbmFnZXIsIHBvbGljeSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZv
aWQgZ2V0RG9tYWluc1JlYWR5Q2FsbGJhY2soR09iamVjdCogb2JqZWN0LCBHQXN5bmNSZXN1bHQq
IHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEpCi0gICAgewotICAgICAgICBHT3duUHRyPEdFcnJv
cj4gZXJyb3I7Ci0gICAgICAgIGNoYXIqKiBkb21haW5zID0gd2Via2l0X2Nvb2tpZV9tYW5hZ2Vy
X2dldF9kb21haW5zX3dpdGhfY29va2llc19maW5pc2goV0VCS0lUX0NPT0tJRV9NQU5BR0VSKG9i
amVjdCksIHJlc3VsdCwgJmVycm9yLm91dFB0cigpKTsKLSAgICAgICAgZ19hc3NlcnQoIWVycm9y
LmdldCgpKTsKLQotICAgICAgICBDb29raWVNYW5hZ2VyVGVzdCogdGVzdCA9IHN0YXRpY19jYXN0
PENvb2tpZU1hbmFnZXJUZXN0Kj4odXNlckRhdGEpOwotICAgICAgICB0ZXN0LT5tX2RvbWFpbnMg
PSBkb21haW5zOwotICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOwot
ICAgIH0KLQotICAgIGNoYXIqKiBnZXREb21haW5zKCkKLSAgICB7Ci0gICAgICAgIGdfc3RyZnJl
ZXYobV9kb21haW5zKTsKLSAgICAgICAgbV9kb21haW5zID0gMDsKLSAgICAgICAgd2Via2l0X2Nv
b2tpZV9tYW5hZ2VyX2dldF9kb21haW5zX3dpdGhfY29va2llcyhtX2Nvb2tpZU1hbmFnZXIsIDAs
IGdldERvbWFpbnNSZWFkeUNhbGxiYWNrLCB0aGlzKTsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVu
KG1fbWFpbkxvb3ApOwotCi0gICAgICAgIHJldHVybiBtX2RvbWFpbnM7Ci0gICAgfQotCi0gICAg
Ym9vbCBoYXNEb21haW4oY29uc3QgY2hhciogZG9tYWluKQotICAgIHsKLSAgICAgICAgaWYgKCFt
X2RvbWFpbnMpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IG1fZG9tYWluc1tpXTsgKytpKQotICAgICAgICAgICAgaWYgKGdfc3RyX2VxdWFs
KG1fZG9tYWluc1tpXSwgZG9tYWluKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHZvaWQgZGVsZXRlQ29va2llc0ZvckRv
bWFpbihjb25zdCBjaGFyKiBkb21haW4pCi0gICAgewotICAgICAgICB3ZWJraXRfY29va2llX21h
bmFnZXJfZGVsZXRlX2Nvb2tpZXNfZm9yX2RvbWFpbihtX2Nvb2tpZU1hbmFnZXIsIGRvbWFpbik7
Ci0gICAgfQotCi0gICAgdm9pZCBkZWxldGVBbGxDb29raWVzKCkKLSAgICB7Ci0gICAgICAgIHdl
YmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfYWxsX2Nvb2tpZXMobV9jb29raWVNYW5hZ2VyKTsK
LSAgICB9Ci0KLSAgICB2b2lkIHdhaXRVbnRpbENvb2tpZXNDaGFuZ2VkKCkKLSAgICB7Ci0gICAg
ICAgIG1fY29va2llc0NoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgbV9maW5pc2hMb29wV2hlbkNv
b2tpZXNDaGFuZ2UgPSB0cnVlOwotICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7
Ci0gICAgICAgIG1fZmluaXNoTG9vcFdoZW5Db29raWVzQ2hhbmdlID0gZmFsc2U7Ci0gICAgfQot
Ci0gICAgV2ViS2l0Q29va2llTWFuYWdlciogbV9jb29raWVNYW5hZ2VyOwotICAgIFdlYktpdENv
b2tpZUFjY2VwdFBvbGljeSBtX2FjY2VwdFBvbGljeTsKLSAgICBjaGFyKiogbV9kb21haW5zOwot
ICAgIGJvb2wgbV9jb29raWVzQ2hhbmdlZDsKLSAgICBib29sIG1fZmluaXNoTG9vcFdoZW5Db29r
aWVzQ2hhbmdlOwotICAgIEdPd25QdHI8Y2hhcj4gbV9jb29raWVzVGV4dEZpbGU7Ci0gICAgR093
blB0cjxjaGFyPiBtX2Nvb2tpZXNTUUxpdGVGaWxlOwotfTsKLQotc3RhdGljIHZvaWQgdGVzdENv
b2tpZU1hbmFnZXJBY2NlcHRQb2xpY3koQ29va2llTWFuYWdlclRlc3QqIHRlc3QsIGdjb25zdHBv
aW50ZXIpCi17Ci0gICAgLy8gRGVmYXVsdCBwb2xpY3kgaXMgTk9fVEhJUkRfUEFSVFkuCi0gICAg
Z19hc3NlcnRfY21waW50KHRlc3QtPmdldEFjY2VwdFBvbGljeSgpLCA9PSwgV0VCS0lUX0NPT0tJ
RV9QT0xJQ1lfQUNDRVBUX05PX1RISVJEX1BBUlRZKTsKLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2
ZXItPmdldFVSSUZvclBhdGgoIi9pbmRleC5odG1sIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0
VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBjaGFyKiogZG9tYWlucyA9IHRlc3QtPmdldERvbWFp
bnMoKTsKLSAgICBnX2Fzc2VydChkb21haW5zKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2
X2xlbmd0aChkb21haW5zKSwgPT0sIDEpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihkb21haW5zWzBd
LCA9PSwga0ZpcnN0UGFydHlEb21haW4pOwotICAgIHRlc3QtPmRlbGV0ZUFsbENvb2tpZXMoKTsK
LQotICAgIHRlc3QtPnNldEFjY2VwdFBvbGljeShXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRf
QUxXQVlTKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+Z2V0QWNjZXB0UG9saWN5KCksID09
LCBXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfQUxXQVlTKTsKLSAgICB0ZXN0LT5sb2FkVVJJ
KGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbmRleC5odG1sIikuZGF0YSgpKTsKLSAgICB0ZXN0
LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBkb21haW5zID0gdGVzdC0+Z2V0RG9tYWlu
cygpOwotICAgIGdfYXNzZXJ0KGRvbWFpbnMpOwotICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZf
bGVuZ3RoKGRvbWFpbnMpLCA9PSwgMik7Ci0gICAgZ19hc3NlcnQodGVzdC0+aGFzRG9tYWluKGtG
aXJzdFBhcnR5RG9tYWluKSk7Ci0gICAgZ19hc3NlcnQodGVzdC0+aGFzRG9tYWluKGtUaGlyZFBh
cnR5RG9tYWluKSk7Ci0gICAgdGVzdC0+ZGVsZXRlQWxsQ29va2llcygpOwotCi0gICAgdGVzdC0+
c2V0QWNjZXB0UG9saWN5KFdFQktJVF9DT09LSUVfUE9MSUNZX0FDQ0VQVF9ORVZFUik7Ci0gICAg
Z19hc3NlcnRfY21waW50KHRlc3QtPmdldEFjY2VwdFBvbGljeSgpLCA9PSwgV0VCS0lUX0NPT0tJ
RV9QT0xJQ1lfQUNDRVBUX05FVkVSKTsKLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVS
SUZvclBhdGgoIi9pbmRleC5odG1sIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2Fk
RmluaXNoZWQoKTsKLSAgICBkb21haW5zID0gdGVzdC0+Z2V0RG9tYWlucygpOwotICAgIGdfYXNz
ZXJ0KGRvbWFpbnMpOwotICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKGRvbWFpbnMp
LCA9PSwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RDb29raWVNYW5hZ2VyRGVsZXRlQ29va2ll
cyhDb29raWVNYW5hZ2VyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5z
ZXRBY2NlcHRQb2xpY3koV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX0FMV0FZUyk7Ci0gICAg
dGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvaW5kZXguaHRtbCIpLmRhdGEo
KSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgZ19hc3NlcnRfY21w
aW50KGdfc3Rydl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlucygpKSwgPT0sIDIpOwotCi0gICAgLy8g
RGVsZXRlIGZpcnN0IHBhcnR5IGNvb2tpZXMuCi0gICAgdGVzdC0+ZGVsZXRlQ29va2llc0ZvckRv
bWFpbihrRmlyc3RQYXJ0eURvbWFpbik7Ci0gICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5n
dGgodGVzdC0+Z2V0RG9tYWlucygpKSwgPT0sIDEpOwotCi0gICAgLy8gRGVsZXRlIHRoaXJkIHBh
cnR5IGNvb2tpZXMuCi0gICAgdGVzdC0+ZGVsZXRlQ29va2llc0ZvckRvbWFpbihrVGhpcmRQYXJ0
eURvbWFpbik7Ci0gICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgodGVzdC0+Z2V0RG9t
YWlucygpKSwgPT0sIDApOwotCi0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQ
YXRoKCIvaW5kZXguaHRtbCIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlz
aGVkKCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlu
cygpKSwgPT0sIDIpOwotCi0gICAgLy8gRGVsZXRlIGFsbCBjb29raWVzLgotICAgIHRlc3QtPmRl
bGV0ZUFsbENvb2tpZXMoKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0
LT5nZXREb21haW5zKCkpLCA9PSwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RDb29raWVNYW5h
Z2VyQ29va2llc0NoYW5nZWQoQ29va2llTWFuYWdlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIp
Ci17Ci0gICAgZ19hc3NlcnQoIXRlc3QtPm1fY29va2llc0NoYW5nZWQpOwotICAgIHRlc3QtPnNl
dEFjY2VwdFBvbGljeShXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfQUxXQVlTKTsKLSAgICB0
ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbmRleC5odG1sIikuZGF0YSgp
KTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydCh0ZXN0
LT5tX2Nvb2tpZXNDaGFuZ2VkKTsKLQotICAgIHRlc3QtPmRlbGV0ZUNvb2tpZXNGb3JEb21haW4o
a0ZpcnN0UGFydHlEb21haW4pOwotICAgIHRlc3QtPndhaXRVbnRpbENvb2tpZXNDaGFuZ2VkKCk7
Ci0gICAgZ19hc3NlcnQodGVzdC0+bV9jb29raWVzQ2hhbmdlZCk7Ci0KLSAgICB0ZXN0LT5kZWxl
dGVBbGxDb29raWVzKCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsQ29va2llc0NoYW5nZWQoKTsKLSAg
ICBnX2Fzc2VydCh0ZXN0LT5tX2Nvb2tpZXNDaGFuZ2VkKTsKLX0KLQotc3RhdGljIHZvaWQgdGVz
dENvb2tpZU1hbmFnZXJQZXJzaXN0ZW50U3RvcmFnZShDb29raWVNYW5hZ2VyVGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5zZXRBY2NlcHRQb2xpY3koV0VCS0lUX0NPT0tJ
RV9QT0xJQ1lfQUNDRVBUX0FMV0FZUyk7Ci0KLSAgICAvLyBUZXh0IHN0b3JhZ2UgdXNpbmcgYSBu
ZXcgZmlsZS4KLSAgICB0ZXN0LT5zZXRQZXJzaXN0ZW50U3RvcmFnZShXRUJLSVRfQ09PS0lFX1BF
UlNJU1RFTlRfU1RPUkFHRV9URVhUKTsKLSAgICBjaGFyKiogZG9tYWlucyA9IHRlc3QtPmdldERv
bWFpbnMoKTsKLSAgICBnX2Fzc2VydChkb21haW5zKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZ19z
dHJ2X2xlbmd0aChkb21haW5zKSwgPT0sIDApOwotCi0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVy
LT5nZXRVUklGb3JQYXRoKCIvaW5kZXguaHRtbCIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVu
dGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV9jb29raWVzQ2hhbmdlZCk7
Ci0gICAgZG9tYWlucyA9IHRlc3QtPmdldERvbWFpbnMoKTsKLSAgICBnX2Fzc2VydChkb21haW5z
KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aChkb21haW5zKSwgPT0sIDIpOwot
Ci0KLSAgICAvLyBTUUxpdGUgc3RvcmFnZSB1c2luZyBhIG5ldyBmaWxlLgotICAgIHRlc3QtPnNl
dFBlcnNpc3RlbnRTdG9yYWdlKFdFQktJVF9DT09LSUVfUEVSU0lTVEVOVF9TVE9SQUdFX1NRTElU
RSk7Ci0gICAgZG9tYWlucyA9IHRlc3QtPmdldERvbWFpbnMoKTsKLSAgICBnX2Fzc2VydChkb21h
aW5zKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aChkb21haW5zKSwgPT0sIDAp
OwotCi0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvaW5kZXguaHRt
bCIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgZ19h
c3NlcnQodGVzdC0+bV9jb29raWVzQ2hhbmdlZCk7Ci0gICAgZG9tYWlucyA9IHRlc3QtPmdldERv
bWFpbnMoKTsKLSAgICBnX2Fzc2VydChkb21haW5zKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZ19z
dHJ2X2xlbmd0aChkb21haW5zKSwgPT0sIDIpOwotCi0gICAgLy8gVGV4dCBzdG9yYWdlIHVzaW5n
IGFuIGV4aXN0aW5nIGZpbGUuCi0gICAgdGVzdC0+c2V0UGVyc2lzdGVudFN0b3JhZ2UoV0VCS0lU
X0NPT0tJRV9QRVJTSVNURU5UX1NUT1JBR0VfVEVYVCk7Ci0gICAgZG9tYWlucyA9IHRlc3QtPmdl
dERvbWFpbnMoKTsKLSAgICBnX2Fzc2VydChkb21haW5zKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
Z19zdHJ2X2xlbmd0aChkb21haW5zKSwgPT0sIDIpOwotICAgIHRlc3QtPmRlbGV0ZUFsbENvb2tp
ZXMoKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0LT5nZXREb21haW5z
KCkpLCA9PSwgMCk7Ci0KLSAgICAvLyBTUUxpdGUgc3RvcmFnZSB3aXRoIGFuIGV4aXN0aW5nIGZp
bGUuCi0gICAgdGVzdC0+c2V0UGVyc2lzdGVudFN0b3JhZ2UoV0VCS0lUX0NPT0tJRV9QRVJTSVNU
RU5UX1NUT1JBR0VfU1FMSVRFKTsKLSAgICBkb21haW5zID0gdGVzdC0+Z2V0RG9tYWlucygpOwot
ICAgIGdfYXNzZXJ0KGRvbWFpbnMpOwotICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3Ro
KGRvbWFpbnMpLCA9PSwgMik7Ci0gICAgdGVzdC0+ZGVsZXRlQWxsQ29va2llcygpOwotICAgIGdf
YXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKHRlc3QtPmdldERvbWFpbnMoKSksID09LCAwKTsK
LX0KLQotc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3Vw
TWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSosIFNvdXBDbGll
bnRDb250ZXh0KiwgZ3BvaW50ZXIpCi17Ci0gICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQ
X01FVEhPRF9HRVQpIHsKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwg
U09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKLSAg
ICBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9pbmRleC5odG1sIikpIHsKLSAgICAgICAgY2hhciog
aW5kZXhIdG1sID0gZ19zdHJkdXBfcHJpbnRmKGtJbmRleEh0bWxGb3JtYXQsIHNvdXBfc2VydmVy
X2dldF9wb3J0KHNlcnZlcikpOwotICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19yZXBsYWNl
KG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJTZXQtQ29va2llIiwgImZvbz1iYXI7IE1heC1B
Z2U9NjAiKTsKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3Bv
bnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGluZGV4SHRtbCwgc3RybGVuKGluZGV4SHRtbCkp
OwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9pbWFnZS5wbmciKSkKLSAgICAg
ICAgc291cF9tZXNzYWdlX2hlYWRlcnNfcmVwbGFjZShtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJz
LCAiU2V0LUNvb2tpZSIsICJiYXo9cXV4OyBNYXgtQWdlPTYwIik7Ci0gICAgZWxzZQotICAgICAg
ICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfRk9VTkQp
OwotICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkp
OwotfQotCi12b2lkIGJlZm9yZUFsbCgpCi17Ci0gICAga1NlcnZlciA9IG5ldyBXZWJLaXRUZXN0
U2VydmVyKCk7Ci0gICAga1NlcnZlci0+cnVuKHNlcnZlckNhbGxiYWNrKTsKLQotICAgIGtUZW1w
RGlyZWN0b3J5ID0gZ19kaXJfbWFrZV90bXAoIldlYktpdDJUZXN0cy1YWFhYWFgiLCAwKTsKLSAg
ICBnX2Fzc2VydChrVGVtcERpcmVjdG9yeSk7Ci0KLSAgICBDb29raWVNYW5hZ2VyVGVzdDo6YWRk
KCJXZWJLaXRDb29raWVNYW5hZ2VyIiwgImFjY2VwdC1wb2xpY3kiLCB0ZXN0Q29va2llTWFuYWdl
ckFjY2VwdFBvbGljeSk7Ci0gICAgQ29va2llTWFuYWdlclRlc3Q6OmFkZCgiV2ViS2l0Q29va2ll
TWFuYWdlciIsICJkZWxldGUtY29va2llcyIsIHRlc3RDb29raWVNYW5hZ2VyRGVsZXRlQ29va2ll
cyk7Ci0gICAgQ29va2llTWFuYWdlclRlc3Q6OmFkZCgiV2ViS2l0Q29va2llTWFuYWdlciIsICJj
b29raWVzLWNoYW5nZWQiLCB0ZXN0Q29va2llTWFuYWdlckNvb2tpZXNDaGFuZ2VkKTsKLSAgICBD
b29raWVNYW5hZ2VyVGVzdDo6YWRkKCJXZWJLaXRDb29raWVNYW5hZ2VyIiwgInBlcnNpc3RlbnQt
c3RvcmFnZSIsIHRlc3RDb29raWVNYW5hZ2VyUGVyc2lzdGVudFN0b3JhZ2UpOwotfQotCi12b2lk
IGFmdGVyQWxsKCkKLXsKLSAgICBkZWxldGUga1NlcnZlcjsKLSAgICBnX3JtZGlyKGtUZW1wRGly
ZWN0b3J5KTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL1Rlc3RET01Ob2RlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL1Rlc3RET01Ob2RlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQz
MjA3NzZmMzVjYTYyNWZiMTNlMGQ5ZGJhYTE0YjVlZWEzOWE2ZC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9UZXN0RE9NTm9kZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0KLSNpbmNsdWRlICJXZWJQcm9jZXNzVGVzdFJ1bm5lci5oIgotI2luY2x1ZGUgIldlYlZp
ZXdUZXN0LmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0
Mi5oPgotCi1zdGF0aWMgV2ViUHJvY2Vzc1Rlc3RSdW5uZXIqIHRlc3RSdW5uZXI7Ci0KLXN0YXRp
YyB2b2lkIHRlc3RXZWJLaXRET01Ob2RlSGllcmFyY2h5TmF2aWdhdGlvbihXZWJWaWV3VGVzdCog
dGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogdGVzdEhUTUwg
PSAiPGh0bWw+PGhlYWQ+PHRpdGxlPlRoaXMgaXMgdGhlIHRpdGxlPC90aXRsZT48L2hlYWQ+PGJv
ZHk+PHA+MTwvcD48cD4yPC9wPjxwPjM8L3A+PC9ib2R5PjwvaHRtbD4iOwotICAgIHRlc3QtPmxv
YWRIdG1sKHRlc3RIVE1MLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsK
LQotICAgIEdWYXJpYW50QnVpbGRlciBidWlsZGVyOwotICAgIGdfdmFyaWFudF9idWlsZGVyX2lu
aXQoJmJ1aWxkZXIsIEdfVkFSSUFOVF9UWVBFX1ZBUkRJQ1QpOwotICAgIGdfdmFyaWFudF9idWls
ZGVyX2FkZCgmYnVpbGRlciwgIntzdn0iLCAicGFnZUlEIiwgZ192YXJpYW50X25ld191aW50NjQo
d2Via2l0X3dlYl92aWV3X2dldF9wYWdlX2lkKHRlc3QtPm1fd2ViVmlldykpKTsKLSAgICBnX2Fz
c2VydCh0ZXN0UnVubmVyLT5ydW5UZXN0KCJXZWJLaXRET01Ob2RlIiwgImhpZXJhcmNoeS1uYXZp
Z2F0aW9uIiwgZ192YXJpYW50X2J1aWxkZXJfZW5kKCZidWlsZGVyKSkpOwotfQotCi1zdGF0aWMg
dm9pZCB0ZXN0V2ViS2l0RE9NTm9kZUluc2VydGlvbihXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKLXsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogdGVzdEhUTUwgPSAiPGh0bWw+PGJv
ZHk+PC9ib2R5PjwvaHRtbD4iOwotICAgIHRlc3QtPmxvYWRIdG1sKHRlc3RIVE1MLCAwKTsKLSAg
ICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIEdWYXJpYW50QnVpbGRlciBi
dWlsZGVyOwotICAgIGdfdmFyaWFudF9idWlsZGVyX2luaXQoJmJ1aWxkZXIsIEdfVkFSSUFOVF9U
WVBFX1ZBUkRJQ1QpOwotICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZCgmYnVpbGRlciwgIntzdn0i
LCAicGFnZUlEIiwgZ192YXJpYW50X25ld191aW50NjQod2Via2l0X3dlYl92aWV3X2dldF9wYWdl
X2lkKHRlc3QtPm1fd2ViVmlldykpKTsKLSAgICBnX2Fzc2VydCh0ZXN0UnVubmVyLT5ydW5UZXN0
KCJXZWJLaXRET01Ob2RlIiwgImluc2VydGlvbiIsIGdfdmFyaWFudF9idWlsZGVyX2VuZCgmYnVp
bGRlcikpKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYktpdERPTU5vZGVUYWdOYW1lcyhXZWJW
aWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBzdGF0aWMgY29uc3QgY2hhciog
dGVzdEhUTUwgPSAiPGh0bWw+PGhlYWQ+PC9oZWFkPjxib2R5PiIKLSAgICAgICAgIjx2aWRlbyBp
ZD0ndmlkZW8nIHByZWxvYWQ9J25vbmUnPiIKLSAgICAgICAgIiAgICA8c291cmNlIHNyYz0nbW92
aWUub2dnJyB0eXBlPSd2aWRlby9vZ2cnPiIKLSAgICAgICAgIiAgICAgICAgWW91ciBicm93c2Vy
IGRvZXMgbm90IHN1cHBvcnQgdGhlIHZpZGVvIHRhZy4iCi0gICAgICAgICI8L3ZpZGVvPiIKLSAg
ICAgICAgIjx2aWRlbyBpZD0ndmlkZW8yJyBwcmVsb2FkPSdub25lJz4iCi0gICAgICAgICIgICAg
IDxzb3VyY2Ugc3JjPSdtb3ZpZS5vZ2cnIHR5cGU9J3ZpZGVvL29nZyc+IgotICAgICAgICAiICAg
ICAgICBZb3VyIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgdmlkZW8gdGFnLiIKLSAgICAg
ICAgIjwvdmlkZW8+IgotICAgICAgICAiPGlucHV0IHR5cGU9J2hpZGRlbicgaWQ9J3Rlc3QnIG5h
bWU9J2ZpbmlzaCcgdmFsdWU9J2ZhbHNlJz48L2JvZHk+PC9odG1sPiI7Ci0gICAgdGVzdC0+bG9h
ZEh0bWwodGVzdEhUTUwsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwot
Ci0gICAgR1ZhcmlhbnRCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgZ192YXJpYW50X2J1aWxkZXJfaW5p
dCgmYnVpbGRlciwgR19WQVJJQU5UX1RZUEVfVkFSRElDVCk7Ci0gICAgZ192YXJpYW50X2J1aWxk
ZXJfYWRkKCZidWlsZGVyLCAie3N2fSIsICJwYWdlSUQiLCBnX3ZhcmlhbnRfbmV3X3VpbnQ2NCh3
ZWJraXRfd2ViX3ZpZXdfZ2V0X3BhZ2VfaWQodGVzdC0+bV93ZWJWaWV3KSkpOwotICAgIGdfYXNz
ZXJ0KHRlc3RSdW5uZXItPnJ1blRlc3QoIldlYktpdERPTU5vZGUiLCAidGFnLW5hbWVzIiwgZ192
YXJpYW50X2J1aWxkZXJfZW5kKCZidWlsZGVyKSkpOwotfQotCi12b2lkIGJlZm9yZUFsbCgpCi17
Ci0gICAgdGVzdFJ1bm5lciA9IG5ldyBXZWJQcm9jZXNzVGVzdFJ1bm5lcigpOwotICAgIHdlYmtp
dF93ZWJfY29udGV4dF9zZXRfd2ViX2V4dGVuc2lvbnNfZGlyZWN0b3J5KHdlYmtpdF93ZWJfY29u
dGV4dF9nZXRfZGVmYXVsdCgpLCBXRUJLSVRfVEVTVF9XRUJfRVhURU5TSU9OU19ESVIpOwotCi0g
ICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0RE9NTm9kZSIsICJoaWVyYXJjaHktbmF2aWdhdGlv
biIsIHRlc3RXZWJLaXRET01Ob2RlSGllcmFyY2h5TmF2aWdhdGlvbik7Ci0gICAgV2ViVmlld1Rl
c3Q6OmFkZCgiV2ViS2l0RE9NTm9kZSIsICJpbnNlcnRpb24iLCB0ZXN0V2ViS2l0RE9NTm9kZUlu
c2VydGlvbik7Ci0gICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0RE9NTm9kZSIsICJ0YWctbmFt
ZXMiLCB0ZXN0V2ViS2l0RE9NTm9kZVRhZ05hbWVzKTsKLX0KLQotdm9pZCBhZnRlckFsbCgpCi17
Ci0gICAgZGVsZXRlIHRlc3RSdW5uZXI7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0RG93bmxvYWRzLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3REb3dubG9hZHMuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBjZTE1OTkwNmM5ZWI1MTI0NmU1MDUxNjBlZTc5Y2IzMDc4MzJmMTFl
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3REb3dubG9hZHMuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsNTIyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlh
IFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5o
IgotI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCi0jaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KLSNp
bmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8bGlic291cC9zb3VwLmg+Ci0jaW5jbHVkZSA8
c3RyaW5nLmg+Ci0jaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+Ci0jaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYv
Z29iamVjdC9HUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1zdGF0
aWMgY2hhcioga1RlbXBEaXJlY3Rvcnk7Ci0KLWNsYXNzIERvd25sb2FkVGVzdDogcHVibGljIFRl
c3QgewotcHVibGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoRG93bmxvYWRUZXN0KTsK
LQotICAgIGVudW0gRG93bmxvYWRFdmVudCB7Ci0gICAgICAgIFN0YXJ0ZWQsCi0gICAgICAgIFJl
Y2VpdmVkUmVzcG9uc2UsCi0gICAgICAgIENyZWF0ZWREZXN0aW5hdGlvbiwKLSAgICAgICAgUmVj
ZWl2ZWREYXRhLAotICAgICAgICBGYWlsZWQsCi0gICAgICAgIEZpbmlzaGVkCi0gICAgfTsKLQot
ICAgIHN0YXRpYyB2b2lkIHJlY2VpdmVkUmVzcG9uc2VDYWxsYmFjayhXZWJLaXREb3dubG9hZCog
ZG93bmxvYWQsIEdQYXJhbVNwZWMqLCBEb3dubG9hZFRlc3QqIHRlc3QpCi0gICAgewotICAgICAg
ICBnX2Fzc2VydCh3ZWJraXRfZG93bmxvYWRfZ2V0X3Jlc3BvbnNlKGRvd25sb2FkKSk7Ci0gICAg
ICAgIHRlc3QtPnJlY2VpdmVkUmVzcG9uc2UoZG93bmxvYWQpOwotICAgIH0KLQotICAgIHN0YXRp
YyBnYm9vbGVhbiBjcmVhdGVkRGVzdGluYXRpb25DYWxsYmFjayhXZWJLaXREb3dubG9hZCogZG93
bmxvYWQsIGNvbnN0IGdjaGFyKiBkZXN0aW5hdGlvbiwgRG93bmxvYWRUZXN0KiB0ZXN0KQotICAg
IHsKLSAgICAgICAgZ19hc3NlcnQod2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbihkb3du
bG9hZCkpOwotICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2Rvd25sb2FkX2dldF9kZXN0
aW5hdGlvbihkb3dubG9hZCksID09LCBkZXN0aW5hdGlvbik7Ci0gICAgICAgIHRlc3QtPmNyZWF0
ZWREZXN0aW5hdGlvbihkb3dubG9hZCwgZGVzdGluYXRpb24pOwotICAgICAgICByZXR1cm4gVFJV
RTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZ2Jvb2xlYW4gcmVjZWl2ZWREYXRhQ2FsbGJhY2soV2Vi
S2l0RG93bmxvYWQqIGRvd25sb2FkLCBndWludDY0IGRhdGFMZW5ndGgsIERvd25sb2FkVGVzdCog
dGVzdCkKLSAgICB7Ci0gICAgICAgIHRlc3QtPnJlY2VpdmVkRGF0YShkb3dubG9hZCwgZGF0YUxl
bmd0aCk7Ci0gICAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9vbGVh
biBmaW5pc2hlZENhbGxiYWNrKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgRG93bmxvYWRUZXN0
KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+ZmluaXNoZWQoZG93bmxvYWQpOwotICAgICAg
ICByZXR1cm4gVFJVRTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZ2Jvb2xlYW4gZmFpbGVkQ2FsbGJh
Y2soV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBHRXJyb3IqIGVycm9yLCBEb3dubG9hZFRlc3Qq
IHRlc3QpCi0gICAgewotICAgICAgICBnX2Fzc2VydChlcnJvcik7Ci0gICAgICAgIHRlc3QtPmZh
aWxlZChkb3dubG9hZCwgZXJyb3IpOwotICAgICAgICByZXR1cm4gVFJVRTsKLSAgICB9Ci0KLSAg
ICBzdGF0aWMgZ2Jvb2xlYW4gZGVjaWRlRGVzdGluYXRpb25DYWxsYmFjayhXZWJLaXREb3dubG9h
ZCogZG93bmxvYWQsIGNvbnN0IGdjaGFyKiBzdWdnZXN0ZWRGaWxlbmFtZSwgRG93bmxvYWRUZXN0
KiB0ZXN0KQotICAgIHsKLSAgICAgICAgZ19hc3NlcnQoc3VnZ2VzdGVkRmlsZW5hbWUpOwotICAg
ICAgICB0ZXN0LT5kZWNpZGVEZXN0aW5hdGlvbihkb3dubG9hZCwgc3VnZ2VzdGVkRmlsZW5hbWUp
OwotICAgICAgICByZXR1cm4gVFJVRTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBkb3dubG9h
ZFN0YXJ0ZWRDYWxsYmFjayhXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0LCBXZWJLaXREb3dubG9h
ZCogZG93bmxvYWQsIERvd25sb2FkVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0
KHdlYmtpdF9kb3dubG9hZF9nZXRfcmVxdWVzdChkb3dubG9hZCkpOwotICAgICAgICB0ZXN0LT5z
dGFydGVkKGRvd25sb2FkKTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChkb3dubG9hZCwgIm5v
dGlmeTo6cmVzcG9uc2UiLCBHX0NBTExCQUNLKHJlY2VpdmVkUmVzcG9uc2VDYWxsYmFjayksIHRl
c3QpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGRvd25sb2FkLCAiY3JlYXRlZC1kZXN0aW5h
dGlvbiIsIEdfQ0FMTEJBQ0soY3JlYXRlZERlc3RpbmF0aW9uQ2FsbGJhY2spLCB0ZXN0KTsKLSAg
ICAgICAgZ19zaWduYWxfY29ubmVjdChkb3dubG9hZCwgInJlY2VpdmVkLWRhdGEiLCBHX0NBTExC
QUNLKHJlY2VpdmVkRGF0YUNhbGxiYWNrKSwgdGVzdCk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5l
Y3QoZG93bmxvYWQsICJmaW5pc2hlZCIsIEdfQ0FMTEJBQ0soZmluaXNoZWRDYWxsYmFjayksIHRl
c3QpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGRvd25sb2FkLCAiZmFpbGVkIiwgR19DQUxM
QkFDSyhmYWlsZWRDYWxsYmFjayksIHRlc3QpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGRv
d25sb2FkLCAiZGVjaWRlLWRlc3RpbmF0aW9uIiwgR19DQUxMQkFDSyhkZWNpZGVEZXN0aW5hdGlv
bkNhbGxiYWNrKSwgdGVzdCk7Ci0gICAgfQotCi0gICAgRG93bmxvYWRUZXN0KCkKLSAgICAgICAg
OiBtX3dlYkNvbnRleHQod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCkpCi0gICAgICAg
ICwgbV9tYWluTG9vcChnX21haW5fbG9vcF9uZXcoMCwgVFJVRSkpCi0gICAgICAgICwgbV9kb3du
bG9hZFNpemUoMCkKLSAgICB7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJDb250ZXh0
LCAiZG93bmxvYWQtc3RhcnRlZCIsIEdfQ0FMTEJBQ0soZG93bmxvYWRTdGFydGVkQ2FsbGJhY2sp
LCB0aGlzKTsKLSAgICB9Ci0KLSAgICB+RG93bmxvYWRUZXN0KCkKLSAgICB7Ci0gICAgICAgIGdf
c2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3dlYkNvbnRleHQsIEdfU0lHTkFM
X01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOwotICAgICAgICBnX21haW5fbG9vcF91bnJl
ZihtX21haW5Mb29wKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnRlZChXZWJLaXRE
b3dubG9hZCogZG93bmxvYWQpCi0gICAgewotICAgICAgICBtX2Rvd25sb2FkRXZlbnRzLmFwcGVu
ZChTdGFydGVkKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRSZXNwb25zZShX
ZWJLaXREb3dubG9hZCogZG93bmxvYWQpCi0gICAgewotICAgICAgICBtX2Rvd25sb2FkRXZlbnRz
LmFwcGVuZChSZWNlaXZlZFJlc3BvbnNlKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY3Jl
YXRlZERlc3RpbmF0aW9uKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgY29uc3QgY2hhciogZGVz
dGluYXRpb24pCi0gICAgewotICAgICAgICBtX2Rvd25sb2FkRXZlbnRzLmFwcGVuZChDcmVhdGVk
RGVzdGluYXRpb24pOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlZERhdGEoV2Vi
S2l0RG93bmxvYWQqIGRvd25sb2FkLCBndWludDY0IGRhdGFMZW5ndGgpCi0gICAgewotICAgICAg
ICBtX2Rvd25sb2FkU2l6ZSArPSBkYXRhTGVuZ3RoOwotICAgICAgICBpZiAoIW1fZG93bmxvYWRF
dmVudHMuY29udGFpbnMoUmVjZWl2ZWREYXRhKSkKLSAgICAgICAgICAgIG1fZG93bmxvYWRFdmVu
dHMuYXBwZW5kKFJlY2VpdmVkRGF0YSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIGZpbmlz
aGVkKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCkKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0X2Nt
cHVpbnQobV9kb3dubG9hZFNpemUsID09LCB3ZWJraXRfZG93bmxvYWRfZ2V0X3JlY2VpdmVkX2Rh
dGFfbGVuZ3RoKGRvd25sb2FkKSk7Ci0gICAgICAgIG1fZG93bmxvYWRFdmVudHMuYXBwZW5kKEZp
bmlzaGVkKTsKLSAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX21haW5Mb29wKTsKLSAgICB9Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgZmFpbGVkKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgR0Vycm9y
KiBlcnJvcikKLSAgICB7Ci0gICAgICAgIG1fZG93bmxvYWRFdmVudHMuYXBwZW5kKEZhaWxlZCk7
Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIGRlY2lkZURlc3RpbmF0aW9uKFdlYktpdERvd25s
b2FkKiBkb3dubG9hZCwgY29uc3QgZ2NoYXIqIHN1Z2dlc3RlZEZpbGVuYW1lKQotICAgIHsKLSAg
ICAgICAgR093blB0cjxjaGFyPiBkZXN0aW5hdGlvbihnX2J1aWxkX2ZpbGVuYW1lKGtUZW1wRGly
ZWN0b3J5LCBzdWdnZXN0ZWRGaWxlbmFtZSwgTlVMTCkpOwotICAgICAgICBHT3duUHRyPGNoYXI+
IGRlc3RpbmF0aW9uVVJJKGdfZmlsZW5hbWVfdG9fdXJpKGRlc3RpbmF0aW9uLmdldCgpLCAwLCAw
KSk7Ci0gICAgICAgIHdlYmtpdF9kb3dubG9hZF9zZXRfZGVzdGluYXRpb24oZG93bmxvYWQsIGRl
c3RpbmF0aW9uVVJJLmdldCgpKTsKLSAgICB9Ci0KLSAgICBXZWJLaXREb3dubG9hZCogZG93bmxv
YWRVUklBbmRXYWl0VW50aWxGaW5pc2hlcyhjb25zdCBDU3RyaW5nJiByZXF1ZXN0VVJJKQotICAg
IHsKLSAgICAgICAgV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkID0gd2Via2l0X3dlYl9jb250ZXh0
X2Rvd25sb2FkX3VyaShtX3dlYkNvbnRleHQsIHJlcXVlc3RVUkkuZGF0YSgpKTsKLSAgICAgICAg
YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChkb3dubG9hZCkp
OwotCi0gICAgICAgIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QgPSB3ZWJraXRfZG93bmxvYWRf
Z2V0X3JlcXVlc3QoZG93bmxvYWQpOwotICAgICAgICBnX2Fzc2VydChyZXF1ZXN0KTsKLSAgICAg
ICAgQVNTRVJUX0NNUF9DU1RSSU5HKHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfdXJpKHJlcXVlc3Qp
LCA9PSwgcmVxdWVzdFVSSSk7Ci0KLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3Ap
OwotCi0gICAgICAgIHJldHVybiBkb3dubG9hZDsKLSAgICB9Ci0KLSAgICB2b2lkIGNoZWNrRGVz
dGluYXRpb25BbmREZWxldGVGaWxlKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgY29uc3QgY2hh
ciogZXhwZWN0ZWROYW1lKQotICAgIHsKLSAgICAgICAgaWYgKCF3ZWJraXRfZG93bmxvYWRfZ2V0
X2Rlc3RpbmF0aW9uKGRvd25sb2FkKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgR1Jl
ZlB0cjxHRmlsZT4gZGVzdEZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfdXJpKHdlYmtp
dF9kb3dubG9hZF9nZXRfZGVzdGluYXRpb24oZG93bmxvYWQpKSk7Ci0gICAgICAgIEdPd25QdHI8
Y2hhcj4gZGVzdEJhc2VuYW1lKGdfZmlsZV9nZXRfYmFzZW5hbWUoZGVzdEZpbGUuZ2V0KCkpKTsK
LSAgICAgICAgZ19hc3NlcnRfY21wc3RyKGRlc3RCYXNlbmFtZS5nZXQoKSwgPT0sIGV4cGVjdGVk
TmFtZSk7Ci0KLSAgICAgICAgZ19maWxlX2RlbGV0ZShkZXN0RmlsZS5nZXQoKSwgMCwgMCk7Ci0g
ICAgfQotCi0gICAgV2ViS2l0V2ViQ29udGV4dCogbV93ZWJDb250ZXh0OwotICAgIEdNYWluTG9v
cCogbV9tYWluTG9vcDsKLSAgICBWZWN0b3I8RG93bmxvYWRFdmVudD4gbV9kb3dubG9hZEV2ZW50
czsKLSAgICBndWludDY0IG1fZG93bmxvYWRTaXplOwotfTsKLQotc3RhdGljIHZvaWQgdGVzdERv
d25sb2FkTG9jYWxGaWxlKERvd25sb2FkVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAg
ICBHT3duUHRyPGNoYXI+IHNvdXJjZVBhdGgoZ19idWlsZF9maWxlbmFtZShUZXN0OjpnZXRXZWJL
aXQxVGVzdFJlc291Y2VzRGlyKCkuZGF0YSgpLCAidGVzdC5wZGYiLCBOVUxMKSk7Ci0gICAgR1Jl
ZlB0cjxHRmlsZT4gc291cmNlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgoc291cmNl
UGF0aC5nZXQoKSkpOwotICAgIEdSZWZQdHI8R0ZpbGVJbmZvPiBzb3VyY2VJbmZvID0gYWRvcHRH
UmVmKGdfZmlsZV9xdWVyeV9pbmZvKHNvdXJjZS5nZXQoKSwgR19GSUxFX0FUVFJJQlVURV9TVEFO
REFSRF9TSVpFLCBzdGF0aWNfY2FzdDxHRmlsZVF1ZXJ5SW5mb0ZsYWdzPigwKSwgMCwgMCkpOwot
ICAgIEdPd25QdHI8Y2hhcj4gc291cmNlVVJJKGdfZmlsZV9nZXRfdXJpKHNvdXJjZS5nZXQoKSkp
OwotICAgIEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkID0gYWRvcHRHUmVmKHRlc3Qt
PmRvd25sb2FkVVJJQW5kV2FpdFVudGlsRmluaXNoZXMoc291cmNlVVJJLmdldCgpKSk7Ci0gICAg
Z19hc3NlcnQoIXdlYmtpdF9kb3dubG9hZF9nZXRfd2ViX3ZpZXcoZG93bmxvYWQuZ2V0KCkpKTsK
LQotICAgIFZlY3RvcjxEb3dubG9hZFRlc3Q6OkRvd25sb2FkRXZlbnQ+JiBldmVudHMgPSB0ZXN0
LT5tX2Rvd25sb2FkRXZlbnRzOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9
PSwgNSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIERvd25sb2FkVGVzdDo6
U3RhcnRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIERvd25sb2FkVGVz
dDo6UmVjZWl2ZWRSZXNwb25zZSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0s
IERvd25sb2FkVGVzdDo6Q3JlYXRlZERlc3RpbmF0aW9uKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
ZXZlbnRzWzNdLCA9PSwgRG93bmxvYWRUZXN0OjpSZWNlaXZlZERhdGEpOwotICAgIGdfYXNzZXJ0
X2NtcGludChldmVudHNbNF0sID09LCBEb3dubG9hZFRlc3Q6OkZpbmlzaGVkKTsKLQotICAgIFdl
YktpdFVSSVJlcXVlc3QqIHJlcXVlc3QgPSB3ZWJraXRfZG93bmxvYWRfZ2V0X3JlcXVlc3QoZG93
bmxvYWQuZ2V0KCkpOwotICAgIGdfYXNzZXJ0KHJlcXVlc3QpOwotICAgIGdfYXNzZXJ0X2NtcHN0
cih3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KSwgPT0sIHNvdXJjZVVSSS5nZXQo
KSk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9kb3dubG9hZFNpemUsID09LCBnX2Zp
bGVfaW5mb19nZXRfc2l6ZShzb3VyY2VJbmZvLmdldCgpKSk7Ci0gICAgZ19hc3NlcnQod2Via2l0
X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbihkb3dubG9hZC5nZXQoKSkpOwotICAgIGdfYXNzZXJ0
X2NtcGZsb2F0KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNzKGRvd25sb2Fk
LmdldCgpKSwgPT0sIDEpOwotICAgIHRlc3QtPmNoZWNrRGVzdGluYXRpb25BbmREZWxldGVGaWxl
KGRvd25sb2FkLmdldCgpLCAidGVzdC5wZGYiKTsKLX0KLQotY2xhc3MgRG93bmxvYWRFcnJvclRl
c3Q6IHB1YmxpYyBEb3dubG9hZFRlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJ
WFRVUkUoRG93bmxvYWRFcnJvclRlc3QpOwotCi0gICAgRG93bmxvYWRFcnJvclRlc3QoKQotICAg
ICAgICA6IG1fZXhwZWN0ZWRFcnJvcihXRUJLSVRfRE9XTkxPQURfRVJST1JfTkVUV09SSykKLSAg
ICB7Ci0gICAgfQotCi0gICAgdm9pZCByZWNlaXZlZFJlc3BvbnNlKFdlYktpdERvd25sb2FkKiBk
b3dubG9hZCkKLSAgICB7Ci0gICAgICAgIERvd25sb2FkVGVzdDo6cmVjZWl2ZWRSZXNwb25zZShk
b3dubG9hZCk7Ci0gICAgICAgIGlmIChtX2V4cGVjdGVkRXJyb3IgPT0gV0VCS0lUX0RPV05MT0FE
X0VSUk9SX0NBTkNFTExFRF9CWV9VU0VSKQotICAgICAgICAgICAgd2Via2l0X2Rvd25sb2FkX2Nh
bmNlbChkb3dubG9hZCk7Ci0gICAgfQotCi0gICAgdm9pZCBjcmVhdGVkRGVzdGluYXRpb24oV2Vi
S2l0RG93bmxvYWQqIGRvd25sb2FkLCBjb25zdCBjaGFyKiBkZXN0aW5hdGlvbikKLSAgICB7Ci0g
ICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0gICAgfQotCi0gICAgdm9pZCBmYWlsZWQo
V2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBHRXJyb3IqIGVycm9yKQotICAgIHsKLSAgICAgICAg
Z19hc3NlcnQoZ19lcnJvcl9tYXRjaGVzKGVycm9yLCBXRUJLSVRfRE9XTkxPQURfRVJST1IsIG1f
ZXhwZWN0ZWRFcnJvcikpOwotICAgICAgICBEb3dubG9hZFRlc3Q6OmZhaWxlZChkb3dubG9hZCwg
ZXJyb3IpOwotICAgIH0KLQotICAgIHZvaWQgZGVjaWRlRGVzdGluYXRpb24oV2ViS2l0RG93bmxv
YWQqIGRvd25sb2FkLCBjb25zdCBnY2hhciogc3VnZ2VzdGVkRmlsZW5hbWUpCi0gICAgewotICAg
ICAgICBpZiAobV9leHBlY3RlZEVycm9yICE9IFdFQktJVF9ET1dOTE9BRF9FUlJPUl9ERVNUSU5B
VElPTikgewotICAgICAgICAgICAgRG93bmxvYWRUZXN0OjpkZWNpZGVEZXN0aW5hdGlvbihkb3du
bG9hZCwgc3VnZ2VzdGVkRmlsZW5hbWUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgICAgIHdlYmtpdF9kb3dubG9hZF9zZXRfZGVzdGluYXRpb24oZG93bmxvYWQsICJmaWxl
Oi8vL2Zvby9iYXIiKTsKLSAgICB9Ci0KLSAgICBXZWJLaXREb3dubG9hZEVycm9yIG1fZXhwZWN0
ZWRFcnJvcjsKLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3REb3dubG9hZExvY2FsRmlsZUVycm9yKERv
d25sb2FkRXJyb3JUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPm1fZXhw
ZWN0ZWRFcnJvciA9IFdFQktJVF9ET1dOTE9BRF9FUlJPUl9ORVRXT1JLOwotICAgIEdSZWZQdHI8
V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkID0gYWRvcHRHUmVmKHRlc3QtPmRvd25sb2FkVVJJQW5k
V2FpdFVudGlsRmluaXNoZXMoImZpbGU6Ly8vZm9vL2JhciIpKTsKLSAgICBnX2Fzc2VydCghd2Vi
a2l0X2Rvd25sb2FkX2dldF93ZWJfdmlldyhkb3dubG9hZC5nZXQoKSkpOwotCi0gICAgVmVjdG9y
PERvd25sb2FkVGVzdDo6RG93bmxvYWRFdmVudD4mIGV2ZW50cyA9IHRlc3QtPm1fZG93bmxvYWRF
dmVudHM7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAzKTsKLSAgICBn
X2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgRG93bmxvYWRUZXN0OjpTdGFydGVkKTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgRG93bmxvYWRUZXN0OjpGYWlsZWQpOwot
ICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBEb3dubG9hZFRlc3Q6OkZpbmlzaGVk
KTsKLSAgICBldmVudHMuY2xlYXIoKTsKLSAgICBnX2Fzc2VydF9jbXBmbG9hdCh3ZWJraXRfZG93
bmxvYWRfZ2V0X2VzdGltYXRlZF9wcm9ncmVzcyhkb3dubG9hZC5nZXQoKSksIDwsIDEpOwotCi0g
ICAgdGVzdC0+bV9leHBlY3RlZEVycm9yID0gV0VCS0lUX0RPV05MT0FEX0VSUk9SX0RFU1RJTkFU
SU9OOwotICAgIEdPd25QdHI8Y2hhcj4gcGF0aChnX2J1aWxkX2ZpbGVuYW1lKFRlc3Q6OmdldFdl
YktpdDFUZXN0UmVzb3VjZXNEaXIoKS5kYXRhKCksICJ0ZXN0LnBkZiIsIE5VTEwpKTsKLSAgICBH
UmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgocGF0aC5n
ZXQoKSkpOwotICAgIEdPd25QdHI8Y2hhcj4gdXJpKGdfZmlsZV9nZXRfdXJpKGZpbGUuZ2V0KCkp
KTsKLSAgICBkb3dubG9hZCA9IGFkb3B0R1JlZih0ZXN0LT5kb3dubG9hZFVSSUFuZFdhaXRVbnRp
bEZpbmlzaGVzKHVyaS5nZXQoKSkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG93bmxvYWRfZ2V0
X3dlYl92aWV3KGRvd25sb2FkLmdldCgpKSk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRz
LnNpemUoKSwgPT0sIDQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBEb3du
bG9hZFRlc3Q6OlN0YXJ0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBE
b3dubG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVu
dHNbMl0sID09LCBEb3dubG9hZFRlc3Q6OkZhaWxlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2
ZW50c1szXSwgPT0sIERvd25sb2FkVGVzdDo6RmluaXNoZWQpOwotICAgIGV2ZW50cy5jbGVhcigp
OwotICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3By
b2dyZXNzKGRvd25sb2FkLmdldCgpKSwgPCwgMSk7Ci0gICAgdGVzdC0+Y2hlY2tEZXN0aW5hdGlv
bkFuZERlbGV0ZUZpbGUoZG93bmxvYWQuZ2V0KCksICJiYXIiKTsKLQotICAgIHRlc3QtPm1fZXhw
ZWN0ZWRFcnJvciA9IFdFQktJVF9ET1dOTE9BRF9FUlJPUl9DQU5DRUxMRURfQllfVVNFUjsKLSAg
ICBkb3dubG9hZCA9IGFkb3B0R1JlZih0ZXN0LT5kb3dubG9hZFVSSUFuZFdhaXRVbnRpbEZpbmlz
aGVzKHVyaS5nZXQoKSkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG93bmxvYWRfZ2V0X3dlYl92
aWV3KGRvd25sb2FkLmdldCgpKSk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUo
KSwgPT0sIDQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBEb3dubG9hZFRl
c3Q6OlN0YXJ0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBEb3dubG9h
ZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0s
ID09LCBEb3dubG9hZFRlc3Q6OkZhaWxlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sz
XSwgPT0sIERvd25sb2FkVGVzdDo6RmluaXNoZWQpOwotICAgIGV2ZW50cy5jbGVhcigpOwotICAg
IGdfYXNzZXJ0X2NtcGZsb2F0KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNz
KGRvd25sb2FkLmdldCgpKSwgPCwgMSk7Ci0gICAgdGVzdC0+Y2hlY2tEZXN0aW5hdGlvbkFuZERl
bGV0ZUZpbGUoZG93bmxvYWQuZ2V0KCksICJ0ZXN0LnBkZiIpOwotfQotCi1zdGF0aWMgV2ViS2l0
VGVzdFNlcnZlcioga1NlcnZlcjsKLXN0YXRpYyBjb25zdCBjaGFyKiBrU2VydmVyU3VnZ2VzdGVk
RmlsZW5hbWUgPSAid2Via2l0LWRvd25sb2FkZWQtZmlsZSI7Ci0KLXN0YXRpYyB2b2lkIHNlcnZl
ckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1lc3NhZ2UsIGNvbnN0
IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqLCBTb3VwQ2xpZW50Q29udGV4dCosIGdwb2ludGVyKQot
ewotICAgIGlmIChtZXNzYWdlLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7Ci0gICAgICAg
IHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9JTVBMRU1F
TlRFRCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBHT3duUHRyPGNoYXI+IGZpbGVQ
YXRoKGdfYnVpbGRfZmlsZW5hbWUoVGVzdDo6Z2V0V2ViS2l0MVRlc3RSZXNvdWNlc0RpcigpLmRh
dGEoKSwgcGF0aCwgTlVMTCkpOwotICAgIGNoYXIqIGNvbnRlbnRzOwotICAgIGdzaXplIGNvbnRl
bnRzTGVuZ3RoOwotICAgIGlmICghZ19maWxlX2dldF9jb250ZW50cyhmaWxlUGF0aC5nZXQoKSwg
JmNvbnRlbnRzLCAmY29udGVudHNMZW5ndGgsIDApKSB7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9z
ZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7Ci0gICAgICAgIHNvdXBf
bWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09V
UF9TVEFUVVNfT0spOwotCi0gICAgR093blB0cjxjaGFyPiBjb250ZW50RGlzcG9zaXRpb24oZ19z
dHJkdXBfcHJpbnRmKCJmaWxlbmFtZT0lcyIsIGtTZXJ2ZXJTdWdnZXN0ZWRGaWxlbmFtZSkpOwot
ICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJz
LCAiQ29udGVudC1EaXNwb3NpdGlvbiIsIGNvbnRlbnREaXNwb3NpdGlvbi5nZXQoKSk7Ci0gICAg
c291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVN
T1JZX1RBS0UsIGNvbnRlbnRzLCBjb250ZW50c0xlbmd0aCk7Ci0KLSAgICBzb3VwX21lc3NhZ2Vf
Ym9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKLX0KLQotc3RhdGljIHZvaWQg
dGVzdERvd25sb2FkUmVtb3RlRmlsZShEb3dubG9hZFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIp
Ci17Ci0gICAgR1JlZlB0cjxXZWJLaXREb3dubG9hZD4gZG93bmxvYWQgPSBhZG9wdEdSZWYodGVz
dC0+ZG93bmxvYWRVUklBbmRXYWl0VW50aWxGaW5pc2hlcyhrU2VydmVyLT5nZXRVUklGb3JQYXRo
KCIvdGVzdC5wZGYiKSkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG93bmxvYWRfZ2V0X3dlYl92
aWV3KGRvd25sb2FkLmdldCgpKSk7Ci0KLSAgICBWZWN0b3I8RG93bmxvYWRUZXN0OjpEb3dubG9h
ZEV2ZW50PiYgZXZlbnRzID0gdGVzdC0+bV9kb3dubG9hZEV2ZW50czsKLSAgICBnX2Fzc2VydF9j
bXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDUpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNb
MF0sID09LCBEb3dubG9hZFRlc3Q6OlN0YXJ0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVu
dHNbMV0sID09LCBEb3dubG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOwotICAgIGdfYXNzZXJ0
X2NtcGludChldmVudHNbMl0sID09LCBEb3dubG9hZFRlc3Q6OkNyZWF0ZWREZXN0aW5hdGlvbik7
Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1szXSwgPT0sIERvd25sb2FkVGVzdDo6UmVjZWl2
ZWREYXRhKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzRdLCA9PSwgRG93bmxvYWRUZXN0
OjpGaW5pc2hlZCk7Ci0gICAgZXZlbnRzLmNsZWFyKCk7Ci0KLSAgICBXZWJLaXRVUklSZXF1ZXN0
KiByZXF1ZXN0ID0gd2Via2l0X2Rvd25sb2FkX2dldF9yZXF1ZXN0KGRvd25sb2FkLmdldCgpKTsK
LSAgICBnX2Fzc2VydChyZXF1ZXN0KTsKLSAgICBBU1NFUlRfQ01QX0NTVFJJTkcod2Via2l0X3Vy
aV9yZXF1ZXN0X2dldF91cmkocmVxdWVzdCksID09LCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIv
dGVzdC5wZGYiKSk7Ci0KLSAgICBnX2Fzc2VydCh3ZWJraXRfZG93bmxvYWRfZ2V0X2Rlc3RpbmF0
aW9uKGRvd25sb2FkLmdldCgpKSk7Ci0gICAgZ19hc3NlcnRfY21wZmxvYXQod2Via2l0X2Rvd25s
b2FkX2dldF9lc3RpbWF0ZWRfcHJvZ3Jlc3MoZG93bmxvYWQuZ2V0KCkpLCA9PSwgMSk7Ci0gICAg
dGVzdC0+Y2hlY2tEZXN0aW5hdGlvbkFuZERlbGV0ZUZpbGUoZG93bmxvYWQuZ2V0KCksIGtTZXJ2
ZXJTdWdnZXN0ZWRGaWxlbmFtZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3REb3dubG9hZFJlbW90
ZUZpbGVFcnJvcihEb3dubG9hZEVycm9yVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAg
ICB0ZXN0LT5tX2V4cGVjdGVkRXJyb3IgPSBXRUJLSVRfRE9XTkxPQURfRVJST1JfTkVUV09SSzsK
LSAgICBHUmVmUHRyPFdlYktpdERvd25sb2FkPiBkb3dubG9hZCA9IGFkb3B0R1JlZih0ZXN0LT5k
b3dubG9hZFVSSUFuZFdhaXRVbnRpbEZpbmlzaGVzKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9m
b28iKSkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG93bmxvYWRfZ2V0X3dlYl92aWV3KGRvd25s
b2FkLmdldCgpKSk7Ci0KLSAgICBWZWN0b3I8RG93bmxvYWRUZXN0OjpEb3dubG9hZEV2ZW50PiYg
ZXZlbnRzID0gdGVzdC0+bV9kb3dubG9hZEV2ZW50czsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZl
bnRzLnNpemUoKSwgPT0sIDQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBE
b3dubG9hZFRlc3Q6OlN0YXJ0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09
LCBEb3dubG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOwotICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHNbMl0sID09LCBEb3dubG9hZFRlc3Q6OkZhaWxlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50
KGV2ZW50c1szXSwgPT0sIERvd25sb2FkVGVzdDo6RmluaXNoZWQpOwotICAgIGV2ZW50cy5jbGVh
cigpOwotICAgIFdlYktpdFVSSVJlc3BvbnNlKiByZXNwb25zZSA9IHdlYmtpdF9kb3dubG9hZF9n
ZXRfcmVzcG9uc2UoZG93bmxvYWQuZ2V0KCkpOwotICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0
X3VyaV9yZXNwb25zZV9nZXRfc3RhdHVzX2NvZGUocmVzcG9uc2UpLCA9PSwgNDA0KTsKLSAgICBn
X2Fzc2VydF9jbXBmbG9hdCh3ZWJraXRfZG93bmxvYWRfZ2V0X2VzdGltYXRlZF9wcm9ncmVzcyhk
b3dubG9hZC5nZXQoKSksIDwsIDEpOwotCi0gICAgdGVzdC0+bV9leHBlY3RlZEVycm9yID0gV0VC
S0lUX0RPV05MT0FEX0VSUk9SX0RFU1RJTkFUSU9OOwotICAgIGRvd25sb2FkID0gYWRvcHRHUmVm
KHRlc3QtPmRvd25sb2FkVVJJQW5kV2FpdFVudGlsRmluaXNoZXMoa1NlcnZlci0+Z2V0VVJJRm9y
UGF0aCgiL3Rlc3QucGRmIikpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2Rvd25sb2FkX2dldF93
ZWJfdmlldyhkb3dubG9hZC5nZXQoKSkpOwotCi0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5z
aXplKCksID09LCA0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgRG93bmxv
YWRUZXN0OjpTdGFydGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgRG93
bmxvYWRUZXN0OjpSZWNlaXZlZFJlc3BvbnNlKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRz
WzJdLCA9PSwgRG93bmxvYWRUZXN0OjpGYWlsZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVu
dHNbM10sID09LCBEb3dubG9hZFRlc3Q6OkZpbmlzaGVkKTsKLSAgICBldmVudHMuY2xlYXIoKTsK
LSAgICBnX2Fzc2VydF9jbXBmbG9hdCh3ZWJraXRfZG93bmxvYWRfZ2V0X2VzdGltYXRlZF9wcm9n
cmVzcyhkb3dubG9hZC5nZXQoKSksIDwsIDEpOwotICAgIHRlc3QtPmNoZWNrRGVzdGluYXRpb25B
bmREZWxldGVGaWxlKGRvd25sb2FkLmdldCgpLCAiYmFyIik7Ci0KLSAgICB0ZXN0LT5tX2V4cGVj
dGVkRXJyb3IgPSBXRUJLSVRfRE9XTkxPQURfRVJST1JfQ0FOQ0VMTEVEX0JZX1VTRVI7Ci0gICAg
ZG93bmxvYWQgPSBhZG9wdEdSZWYodGVzdC0+ZG93bmxvYWRVUklBbmRXYWl0VW50aWxGaW5pc2hl
cyhrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvdGVzdC5wZGYiKSkpOwotICAgIGdfYXNzZXJ0KCF3
ZWJraXRfZG93bmxvYWRfZ2V0X3dlYl92aWV3KGRvd25sb2FkLmdldCgpKSk7Ci0KLSAgICBnX2Fz
c2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDQpOwotICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHNbMF0sID09LCBEb3dubG9hZFRlc3Q6OlN0YXJ0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHNbMV0sID09LCBEb3dubG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOwotICAgIGdf
YXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBEb3dubG9hZFRlc3Q6OkZhaWxlZCk7Ci0gICAg
Z19hc3NlcnRfY21waW50KGV2ZW50c1szXSwgPT0sIERvd25sb2FkVGVzdDo6RmluaXNoZWQpOwot
ICAgIGV2ZW50cy5jbGVhcigpOwotICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHdlYmtpdF9kb3dubG9h
ZF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNzKGRvd25sb2FkLmdldCgpKSwgPCwgMSk7Ci0gICAgdGVz
dC0+Y2hlY2tEZXN0aW5hdGlvbkFuZERlbGV0ZUZpbGUoZG93bmxvYWQuZ2V0KCksIGtTZXJ2ZXJT
dWdnZXN0ZWRGaWxlbmFtZSk7Ci19Ci0KLWNsYXNzIFdlYlZpZXdEb3dubG9hZFRlc3Q6IHB1Ymxp
YyBXZWJWaWV3VGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShXZWJW
aWV3RG93bmxvYWRUZXN0KTsKLQotICAgIHN0YXRpYyB2b2lkIGRvd25sb2FkU3RhcnRlZENhbGxi
YWNrKFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwg
V2ViVmlld0Rvd25sb2FkVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHRlc3QtPm1fZG93bmxv
YWQgPSBkb3dubG9hZDsKLSAgICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRl
c3RGaW5pc2hlcyhHX09CSkVDVChkb3dubG9hZCkpOwotICAgICAgICB0ZXN0LT5xdWl0TWFpbkxv
b3AoKTsKLSAgICB9Ci0KLSAgICBXZWJWaWV3RG93bmxvYWRUZXN0KCkKLSAgICB7Ci0gICAgICAg
IGdfc2lnbmFsX2Nvbm5lY3Qod2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KG1fd2ViVmlldyks
ICJkb3dubG9hZC1zdGFydGVkIiwgR19DQUxMQkFDSyhkb3dubG9hZFN0YXJ0ZWRDYWxsYmFjayks
IHRoaXMpOwotICAgIH0KLQotICAgIH5XZWJWaWV3RG93bmxvYWRUZXN0KCkKLSAgICB7Ci0gICAg
ICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZCh3ZWJraXRfd2ViX3ZpZXdf
Z2V0X2NvbnRleHQobV93ZWJWaWV3KSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwg
dGhpcyk7Ci0gICAgfQotCi0gICAgdm9pZCB3YWl0VW50aWxEb3dubG9hZFN0YXJ0ZWQoKQotICAg
IHsKLSAgICAgICAgbV9kb3dubG9hZCA9IDA7Ci0gICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21h
aW5Mb29wKTsKLSAgICAgICAgZ19hc3NlcnQobV9kb3dubG9hZC5nZXQoKSk7Ci0gICAgfQotCi0g
ICAgc3RhdGljIGdib29sZWFuIGRvd25sb2FkRGVjaWRlRGVzdGluYXRpb25DYWxsYmFjayhXZWJL
aXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IGdjaGFyKiBzdWdnZXN0ZWRGaWxlbmFtZSwgV2Vi
Vmlld0Rvd25sb2FkVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIEdPd25QdHI8Y2hhcj4gZGVz
dGluYXRpb24oZ19idWlsZF9maWxlbmFtZShrVGVtcERpcmVjdG9yeSwgc3VnZ2VzdGVkRmlsZW5h
bWUsIE5VTEwpKTsKLSAgICAgICAgR093blB0cjxjaGFyPiBkZXN0aW5hdGlvblVSSShnX2ZpbGVu
YW1lX3RvX3VyaShkZXN0aW5hdGlvbi5nZXQoKSwgMCwgMCkpOwotICAgICAgICB3ZWJraXRfZG93
bmxvYWRfc2V0X2Rlc3RpbmF0aW9uKGRvd25sb2FkLCBkZXN0aW5hdGlvblVSSS5nZXQoKSk7Ci0g
ICAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGRvd25sb2FkRmlu
aXNoZWRDYWxsYmFjayhXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIFdlYlZpZXdEb3dubG9hZFRl
c3QqIHRlc3QpCi0gICAgewotICAgICAgICB0ZXN0LT5xdWl0TWFpbkxvb3AoKTsKLSAgICB9Ci0K
LSAgICB2b2lkIHdhaXRVbnRpbERvd25sb2FkRmluaXNoZWQoKQotICAgIHsKLSAgICAgICAgZ19z
aWduYWxfY29ubmVjdChtX2Rvd25sb2FkLmdldCgpLCAiZGVjaWRlLWRlc3RpbmF0aW9uIiwgR19D
QUxMQkFDSyhkb3dubG9hZERlY2lkZURlc3RpbmF0aW9uQ2FsbGJhY2spLCB0aGlzKTsKLSAgICAg
ICAgZ19zaWduYWxfY29ubmVjdChtX2Rvd25sb2FkLmdldCgpLCAiZmluaXNoZWQiLCBHX0NBTExC
QUNLKGRvd25sb2FkRmluaXNoZWRDYWxsYmFjayksIHRoaXMpOwotICAgICAgICBnX21haW5fbG9v
cF9ydW4obV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgR1JlZlB0cjxXZWJLaXREb3dubG9hZD4g
bV9kb3dubG9hZDsKLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3RG93bmxvYWRVUkkoV2Vi
Vmlld0Rvd25sb2FkVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBHUmVmUHRyPFdl
YktpdERvd25sb2FkPiBkb3dubG9hZCA9IGFkb3B0R1JlZih3ZWJraXRfd2ViX3ZpZXdfZG93bmxv
YWRfdXJpKHRlc3QtPm1fd2ViVmlldywga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3Rlc3QucGRm
IikuZGF0YSgpKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsRG93bmxvYWRTdGFydGVkKCk7Ci0gICAg
Z19hc3NlcnQodGVzdC0+bV93ZWJWaWV3ID09IHdlYmtpdF9kb3dubG9hZF9nZXRfd2ViX3ZpZXco
ZG93bmxvYWQuZ2V0KCkpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxEb3dubG9hZEZpbmlzaGVkKCk7
Ci0KLSAgICBHUmVmUHRyPEdGaWxlPiBkb3dubG9hZEZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25l
d19mb3JfdXJpKHdlYmtpdF9kb3dubG9hZF9nZXRfZGVzdGluYXRpb24oZG93bmxvYWQuZ2V0KCkp
KSk7Ci0gICAgR1JlZlB0cjxHRmlsZUluZm8+IGRvd25sb2FkRmlsZUluZm8gPSBhZG9wdEdSZWYo
Z19maWxlX3F1ZXJ5X2luZm8oZG93bmxvYWRGaWxlLmdldCgpLCBHX0ZJTEVfQVRUUklCVVRFX1NU
QU5EQVJEX1NJWkUsIHN0YXRpY19jYXN0PEdGaWxlUXVlcnlJbmZvRmxhZ3M+KDApLCAwLCAwKSk7
Ci0gICAgZ19hc3NlcnRfY21waW50KGdfZmlsZV9pbmZvX2dldF9zaXplKGRvd25sb2FkRmlsZUlu
Zm8uZ2V0KCkpLCA+LCAwKTsKLSAgICBnX2ZpbGVfZGVsZXRlKGRvd25sb2FkRmlsZS5nZXQoKSwg
MCwgMCk7Ci19Ci0KLWNsYXNzIFBvbGljeVJlc3BvbnNlRG93bmxvYWRUZXN0OiBwdWJsaWMgV2Vi
Vmlld0Rvd25sb2FkVGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShQ
b2xpY3lSZXNwb25zZURvd25sb2FkVGVzdCk7Ci0KLSAgICBzdGF0aWMgZ2Jvb2xlYW4gZGVjaWRl
UG9saWN5Q2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0UG9saWN5RGVjaXNp
b24qIGRlY2lzaW9uLCBXZWJLaXRQb2xpY3lEZWNpc2lvblR5cGUgdHlwZSwgUG9saWN5UmVzcG9u
c2VEb3dubG9hZFRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICBpZiAodHlwZSAhPSBXRUJLSVRf
UE9MSUNZX0RFQ0lTSU9OX1RZUEVfUkVTUE9OU0UpCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7
Ci0KLSAgICAgICAgd2Via2l0X3BvbGljeV9kZWNpc2lvbl9kb3dubG9hZChkZWNpc2lvbik7Ci0g
ICAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQotICAgIFBvbGljeVJlc3BvbnNlRG93bmxvYWRU
ZXN0KCkKLSAgICB7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAiZGVjaWRl
LXBvbGljeSIsIEdfQ0FMTEJBQ0soZGVjaWRlUG9saWN5Q2FsbGJhY2spLCB0aGlzKTsKLSAgICB9
Ci0KLSAgICB+UG9saWN5UmVzcG9uc2VEb3dubG9hZFRlc3QoKQotICAgIHsKLSAgICAgICAgZ19z
aWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fd2ViVmlldywgR19TSUdOQUxfTUFU
Q0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7Ci0gICAgfQotCi0gICAgdm9pZCBjYW5jZWxEb3du
bG9hZEFuZFdhaXRVbnRpbEZpbmlzaGVkKCkKLSAgICB7Ci0gICAgICAgIHdlYmtpdF9kb3dubG9h
ZF9jYW5jZWwobV9kb3dubG9hZC5nZXQoKSk7Ci0gICAgICAgIHdhaXRVbnRpbERvd25sb2FkRmlu
aXNoZWQoKTsKLSAgICAgICAgbV9kb3dubG9hZCA9IDA7Ci0gICAgfQotfTsKLQotc3RhdGljIHZv
aWQgdGVzdFBvbGljeVJlc3BvbnNlRG93bmxvYWQoUG9saWN5UmVzcG9uc2VEb3dubG9hZFRlc3Qq
IHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgLy8gVGVzdCB0aGF0IGEgZG93bmxvYWQgc3Rh
cnRlZCBieSB0aGUgdGhlIHBvbGljeSBjaGVja2VyIGNvbnRhaW5zIHRoZSB3ZWIgdmlldy4KLSAg
ICBDU3RyaW5nIHJlcXVlc3RVUkkgPSBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvdGVzdC5wZGYi
KS5kYXRhKCk7Ci0gICAgdGVzdC0+bG9hZFVSSShyZXF1ZXN0VVJJLmRhdGEoKSk7Ci0gICAgdGVz
dC0+d2FpdFVudGlsRG93bmxvYWRTdGFydGVkKCk7Ci0KLSAgICBXZWJLaXRVUklSZXF1ZXN0KiBy
ZXF1ZXN0ID0gd2Via2l0X2Rvd25sb2FkX2dldF9yZXF1ZXN0KHRlc3QtPm1fZG93bmxvYWQuZ2V0
KCkpOwotICAgIGdfYXNzZXJ0KHJlcXVlc3QpOwotICAgIEFTU0VSVF9DTVBfQ1NUUklORyh3ZWJr
aXRfdXJpX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KSwgPT0sIHJlcXVlc3RVUkkpOwotCi0gICAg
Z19hc3NlcnQodGVzdC0+bV93ZWJWaWV3ID09IHdlYmtpdF9kb3dubG9hZF9nZXRfd2ViX3ZpZXco
dGVzdC0+bV9kb3dubG9hZC5nZXQoKSkpOwotICAgIHRlc3QtPmNhbmNlbERvd25sb2FkQW5kV2Fp
dFVudGlsRmluaXNoZWQoKTsKLX0KLQotdm9pZCBiZWZvcmVBbGwoKQotewotICAgIGtTZXJ2ZXIg
PSBuZXcgV2ViS2l0VGVzdFNlcnZlcigpOwotICAgIGtTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFj
ayk7Ci0KLSAgICBrVGVtcERpcmVjdG9yeSA9IGdfZGlyX21ha2VfdG1wKCJXZWJLaXQyVGVzdHMt
WFhYWFhYIiwgMCk7Ci0gICAgZ19hc3NlcnQoa1RlbXBEaXJlY3RvcnkpOwotCi0gICAgRG93bmxv
YWRUZXN0OjphZGQoIkRvd25sb2FkcyIsICJsb2NhbC1maWxlIiwgdGVzdERvd25sb2FkTG9jYWxG
aWxlKTsKLSAgICBEb3dubG9hZEVycm9yVGVzdDo6YWRkKCJEb3dubG9hZHMiLCAibG9jYWwtZmls
ZS1lcnJvciIsIHRlc3REb3dubG9hZExvY2FsRmlsZUVycm9yKTsKLSAgICBEb3dubG9hZFRlc3Q6
OmFkZCgiRG93bmxvYWRzIiwgInJlbW90ZS1maWxlIiwgdGVzdERvd25sb2FkUmVtb3RlRmlsZSk7
Ci0gICAgRG93bmxvYWRFcnJvclRlc3Q6OmFkZCgiRG93bmxvYWRzIiwgInJlbW90ZS1maWxlLWVy
cm9yIiwgdGVzdERvd25sb2FkUmVtb3RlRmlsZUVycm9yKTsKLSAgICBXZWJWaWV3RG93bmxvYWRU
ZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiZG93bmxvYWQtdXJpIiwgdGVzdFdlYlZpZXdEb3du
bG9hZFVSSSk7Ci0gICAgUG9saWN5UmVzcG9uc2VEb3dubG9hZFRlc3Q6OmFkZCgiRG93bmxvYWRz
IiwgInBvbGljeS1kZWNpc2lvbi1kb3dubG9hZCIsIHRlc3RQb2xpY3lSZXNwb25zZURvd25sb2Fk
KTsKLX0KLQotdm9pZCBhZnRlckFsbCgpCi17Ci0gICAgZGVsZXRlIGtTZXJ2ZXI7Ci0gICAgZ19y
bWRpcihrVGVtcERpcmVjdG9yeSk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0RnJhbWUuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvVGVzdEZyYW1lLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYTYzYjA3OWRjZDk1MGNmYWViNWExNzhiMWU1N2MyNjc3NzA5MzUwOS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0RnJhbWUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjkg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBJZ2FsaWEgUy5MLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiV2ViUHJvY2Vzc1Rlc3RSdW5uZXIuaCIKLSNpbmNsdWRl
ICJXZWJWaWV3VGVzdC5oIgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3ZWJraXQy
L3dlYmtpdDIuaD4KLQotc3RhdGljIFdlYlByb2Nlc3NUZXN0UnVubmVyKiB0ZXN0UnVubmVyOwot
Ci1zdGF0aWMgdm9pZCB3ZWJraXRGcmFtZVRlc3RSdW4oV2ViVmlld1Rlc3QqIHRlc3QsIGNvbnN0
IGNoYXIqIHRlc3ROYW1lKQotewotICAgIHN0YXRpYyBjb25zdCBjaGFyKiB0ZXN0SFRNTCA9ICI8
aHRtbD48Ym9keT48L2JvZHk+PC9odG1sPiI7Ci0gICAgdGVzdC0+bG9hZEh0bWwodGVzdEhUTUws
IDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgR1ZhcmlhbnRC
dWlsZGVyIGJ1aWxkZXI7Ci0gICAgZ192YXJpYW50X2J1aWxkZXJfaW5pdCgmYnVpbGRlciwgR19W
QVJJQU5UX1RZUEVfVkFSRElDVCk7Ci0gICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKCZidWlsZGVy
LCAie3N2fSIsICJwYWdlSUQiLCBnX3ZhcmlhbnRfbmV3X3VpbnQ2NCh3ZWJraXRfd2ViX3ZpZXdf
Z2V0X3BhZ2VfaWQodGVzdC0+bV93ZWJWaWV3KSkpOwotICAgIGdfYXNzZXJ0KHRlc3RSdW5uZXIt
PnJ1blRlc3QoIldlYktpdEZyYW1lIiwgdGVzdE5hbWUsIGdfdmFyaWFudF9idWlsZGVyX2VuZCgm
YnVpbGRlcikpKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYktpdEZyYW1lTWFpbkZyYW1lKFdl
YlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHdlYmtpdEZyYW1lVGVzdFJ1
bih0ZXN0LCAibWFpbi1mcmFtZSIpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViS2l0RnJhbWVV
UkkoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgd2Via2l0RnJhbWVU
ZXN0UnVuKHRlc3QsICJ1cmkiKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYktpdEZyYW1lSmF2
YVNjcmlwdENvbnRleHQoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAg
d2Via2l0RnJhbWVUZXN0UnVuKHRlc3QsICJqYXZhc2NyaXB0LWNvbnRleHQiKTsKLX0KLQotdm9p
ZCBiZWZvcmVBbGwoKQotewotICAgIHRlc3RSdW5uZXIgPSBuZXcgV2ViUHJvY2Vzc1Rlc3RSdW5u
ZXIoKTsKLSAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3dlYl9leHRlbnNpb25zX2RpcmVjdG9y
eSh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSwgV0VCS0lUX1RFU1RfV0VCX0VYVEVO
U0lPTlNfRElSKTsKLQotICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdEZyYW1lIiwgIm1haW4t
ZnJhbWUiLCB0ZXN0V2ViS2l0RnJhbWVNYWluRnJhbWUpOwotICAgIFdlYlZpZXdUZXN0OjphZGQo
IldlYktpdEZyYW1lIiwgInVyaSIsIHRlc3RXZWJLaXRGcmFtZVVSSSk7Ci0gICAgV2ViVmlld1Rl
c3Q6OmFkZCgiV2ViS2l0RnJhbWUiLCAiamF2YXNjcmlwdC1jb250ZXh0IiwgdGVzdFdlYktpdEZy
YW1lSmF2YVNjcmlwdENvbnRleHQpOwotfQotCi12b2lkIGFmdGVyQWxsKCkKLXsKLSAgICBkZWxl
dGUgdGVzdFJ1bm5lcjsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL1Rlc3RJbnNwZWN0b3IuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvVGVzdEluc3BlY3Rvci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDFmMDQzMDM4OTE0MGY0MTg1YWQ1MWRhMmQ0YjY4Y2QxYmJjNTQ5ZTQuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdEluc3BlY3Rvci5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwzNTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgotI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Ci0KLWNsYXNzIElu
c3BlY3RvclRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElC
X1RFU1RfRklYVFVSRShJbnNwZWN0b3JUZXN0KTsKLQotICAgIGVudW0gSW5zcGVjdG9yRXZlbnRz
IHsKLSAgICAgICAgT3BlbldpbmRvdywKLSAgICAgICAgQnJpbmdUb0Zyb250LAotICAgICAgICBD
bG9zZWQsCi0gICAgICAgIEF0dGFjaCwKLSAgICAgICAgRGV0YWNoCi0gICAgfTsKLQotICAgIHN0
YXRpYyBnYm9vbGVhbiBvcGVuV2luZG93Q2FsbGJhY2soV2ViS2l0V2ViSW5zcGVjdG9yKiwgSW5z
cGVjdG9yVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0ZXN0LT5vcGVuV2luZG93
KCk7Ci0gICAgfQotCi0gICAgc3RhdGljIGdib29sZWFuIGJyaW5nVG9Gcm9udENhbGxiYWNrKFdl
YktpdFdlYkluc3BlY3RvciosIEluc3BlY3RvclRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICBy
ZXR1cm4gdGVzdC0+YnJpbmdUb0Zyb250KCk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgY2xv
c2VkQ2FsbGJhY2soV2ViS2l0V2ViSW5zcGVjdG9yKiwgSW5zcGVjdG9yVGVzdCogdGVzdCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB0ZXN0LT5jbG9zZWQoKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMg
Z2Jvb2xlYW4gYXR0YWNoQ2FsbGJhY2soV2ViS2l0V2ViSW5zcGVjdG9yKiwgSW5zcGVjdG9yVGVz
dCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0ZXN0LT5hdHRhY2goKTsKLSAgICB9Ci0K
LSAgICBzdGF0aWMgZ2Jvb2xlYW4gZGV0YWNoQ2FsbGJhY2soV2ViS2l0V2ViSW5zcGVjdG9yKiwg
SW5zcGVjdG9yVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0ZXN0LT5kZXRhY2go
KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZ01pbmltdW1BdHRhY2hlZElu
c3BlY3RvcldpZHRoID0gNzUwOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBnTWluaW11bUF0
dGFjaGVkSW5zcGVjdG9ySGVpZ2h0ID0gMjUwOwotCi0gICAgSW5zcGVjdG9yVGVzdCgpCi0gICAg
ICAgIDogV2ViVmlld1Rlc3QoKQotICAgICAgICAsIG1faW5zcGVjdG9yKHdlYmtpdF93ZWJfdmll
d19nZXRfaW5zcGVjdG9yKG1fd2ViVmlldykpCi0gICAgewotICAgICAgICB3ZWJraXRfc2V0dGlu
Z3Nfc2V0X2VuYWJsZV9kZXZlbG9wZXJfZXh0cmFzKHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGlu
Z3MobV93ZWJWaWV3KSwgVFJVRSk7Ci0gICAgICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5U
ZXN0RmluaXNoZXMoR19PQkpFQ1QobV9pbnNwZWN0b3IpKTsKLSAgICAgICAgZ19zaWduYWxfY29u
bmVjdChtX2luc3BlY3RvciwgIm9wZW4td2luZG93IiwgR19DQUxMQkFDSyhvcGVuV2luZG93Q2Fs
bGJhY2spLCB0aGlzKTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX2luc3BlY3RvciwgImJy
aW5nLXRvLWZyb250IiwgR19DQUxMQkFDSyhicmluZ1RvRnJvbnRDYWxsYmFjayksIHRoaXMpOwot
ICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1faW5zcGVjdG9yLCAiY2xvc2VkIiwgR19DQUxMQkFD
SyhjbG9zZWRDYWxsYmFjayksIHRoaXMpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1faW5z
cGVjdG9yLCAiYXR0YWNoIiwgR19DQUxMQkFDSyhhdHRhY2hDYWxsYmFjayksIHRoaXMpOwotICAg
ICAgICBnX3NpZ25hbF9jb25uZWN0KG1faW5zcGVjdG9yLCAiZGV0YWNoIiwgR19DQUxMQkFDSyhk
ZXRhY2hDYWxsYmFjayksIHRoaXMpOwotICAgIH0KLQotICAgIH5JbnNwZWN0b3JUZXN0KCkKLSAg
ICB7Ci0gICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX2luc3Bl
Y3RvciwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7Ci0gICAgfQotCi0g
ICAgdmlydHVhbCBib29sIG9wZW5XaW5kb3coKQotICAgIHsKLSAgICAgICAgbV9ldmVudHMuYXBw
ZW5kKE9wZW5XaW5kb3cpOwotICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3ApOwot
ICAgICAgICByZXR1cm4gVFJVRTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgYnJpbmdUb0Zy
b250KCkKLSAgICB7Ci0gICAgICAgIG1fZXZlbnRzLmFwcGVuZChCcmluZ1RvRnJvbnQpOwotICAg
ICAgICBnX21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3ApOwotICAgICAgICByZXR1cm4gRkFMU0U7
Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIGNsb3NlZCgpCi0gICAgewotICAgICAgICBtX2V2
ZW50cy5hcHBlbmQoQ2xvc2VkKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgYXR0YWNoKCkK
LSAgICB7Ci0gICAgICAgIG1fZXZlbnRzLmFwcGVuZChBdHRhY2gpOwotICAgICAgICByZXR1cm4g
VFJVRTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZGV0YWNoKCkKLSAgICB7Ci0gICAgICAg
IG1fZXZlbnRzLmFwcGVuZChEZXRhY2gpOwotICAgICAgICByZXR1cm4gVFJVRTsKLSAgICB9Ci0K
LQotICAgIHN0YXRpYyBnYm9vbGVhbiBzaG93SWRsZShJbnNwZWN0b3JUZXN0KiB0ZXN0KQotICAg
IHsKLSAgICAgICAgd2Via2l0X3dlYl9pbnNwZWN0b3Jfc2hvdyh0ZXN0LT5tX2luc3BlY3Rvcik7
Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAgICB2b2lkIHNob3coKQotICAgIHsK
LSAgICAgICAgZ19pZGxlX2FkZChyZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihzaG93SWRs
ZSksIHRoaXMpOwotICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Ci0gICAgfQot
Ci0gICAgdm9pZCByZXNpemVWaWV3QW5kQXR0YWNoKCkKLSAgICB7Ci0gICAgICAgIC8vIFJlc2l6
ZSB0aGUgdmlldyB0byBtYWtlIHJvb20gZm9yIHRoZSBpbnNwZWN0b3IuCi0gICAgICAgIHJlc2l6
ZVZpZXcoZ01pbmltdW1BdHRhY2hlZEluc3BlY3RvcldpZHRoLCAoZ01pbmltdW1BdHRhY2hlZElu
c3BlY3RvckhlaWdodCArIDEpICogNCAvIDMpOwotICAgICAgICB3ZWJraXRfd2ViX2luc3BlY3Rv
cl9hdHRhY2gobV9pbnNwZWN0b3IpOwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiBkZXRh
Y2hJZGxlKEluc3BlY3RvclRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICB3ZWJraXRfd2ViX2lu
c3BlY3Rvcl9kZXRhY2godGVzdC0+bV9pbnNwZWN0b3IpOwotICAgICAgICByZXR1cm4gRkFMU0U7
Ci0gICAgfQotCi0gICAgdm9pZCBkZXRhY2hBbmRXYWl0VW50aWxXaW5kb3dPcGVuZWQoKQotICAg
IHsKLSAgICAgICAgZ19pZGxlX2FkZChyZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihkZXRh
Y2hJZGxlKSwgdGhpcyk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAg
ICB9Ci0KLSAgICB2b2lkIGNsb3NlKCkKLSAgICB7Ci0gICAgICAgIHdlYmtpdF93ZWJfaW5zcGVj
dG9yX2Nsb3NlKG1faW5zcGVjdG9yKTsKLSAgICB9Ci0KLSAgICBXZWJLaXRXZWJJbnNwZWN0b3Iq
IG1faW5zcGVjdG9yOwotICAgIFZlY3RvcjxJbnNwZWN0b3JFdmVudHM+IG1fZXZlbnRzOwotfTsK
LQotc3RhdGljIHZvaWQgdGVzdEluc3BlY3RvckRlZmF1bHQoSW5zcGVjdG9yVGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBw
ZWQoR1RLX1dJTkRPV19UT1BMRVZFTCk7Ci0gICAgdGVzdC0+cmVzaXplVmlldygyMDAsIDIwMCk7
Ci0gICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxib2R5PjxwPldlYktpdEdUSysgSW5zcGVjdG9y
IHRlc3Q8L3A+PC9ib2R5PjwvaHRtbD4iLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmlu
aXNoZWQoKTsKLQotICAgIHRlc3QtPnNob3coKTsKLSAgICAvLyBXZSBkb24ndCBhZGQgdGhlIHZp
ZXcgdG8gYSBjb250YWluZXIsIHNvIGNvbnN1bWUgdGhlIHdlYWsgcmVmIHdpdGggR1JlZlB0ci4K
LSAgICBHUmVmUHRyPFdlYktpdFdlYlZpZXdCYXNlPiBpbnNwZWN0b3JWaWV3ID0gd2Via2l0X3dl
Yl9pbnNwZWN0b3JfZ2V0X3dlYl92aWV3KHRlc3QtPm1faW5zcGVjdG9yKTsKLSAgICBnX2Fzc2Vy
dChpbnNwZWN0b3JWaWV3LmdldCgpKTsKLSAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRX
aGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKGluc3BlY3RvclZpZXcuZ2V0KCkpKTsKLSAgICBnX2Fz
c2VydCghd2Via2l0X3dlYl9pbnNwZWN0b3JfaXNfYXR0YWNoZWQodGVzdC0+bV9pbnNwZWN0b3Ip
KTsKLSAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF93ZWJfaW5zcGVjdG9yX2dldF9hdHRhY2hl
ZF9oZWlnaHQodGVzdC0+bV9pbnNwZWN0b3IpLCA9PSwgMCk7Ci0gICAgVmVjdG9yPEluc3BlY3Rv
clRlc3Q6Okluc3BlY3RvckV2ZW50cz4mIGV2ZW50cyA9IHRlc3QtPm1fZXZlbnRzOwotICAgIGdf
YXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgMSk7Ci0gICAgZ19hc3NlcnRfY21waW50
KGV2ZW50c1swXSwgPT0sIEluc3BlY3RvclRlc3Q6Ok9wZW5XaW5kb3cpOwotICAgIHRlc3QtPm1f
ZXZlbnRzLmNsZWFyKCk7Ci0KLSAgICB0ZXN0LT5zaG93KCk7Ci0gICAgZXZlbnRzID0gdGVzdC0+
bV9ldmVudHM7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAxKTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgSW5zcGVjdG9yVGVzdDo6QnJpbmdUb0Zy
b250KTsKLSAgICB0ZXN0LT5tX2V2ZW50cy5jbGVhcigpOwotCi0gICAgdGVzdC0+cmVzaXplVmll
d0FuZEF0dGFjaCgpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfaW5zcGVjdG9yX2lzX2F0dGFj
aGVkKHRlc3QtPm1faW5zcGVjdG9yKSk7Ci0gICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfd2Vi
X2luc3BlY3Rvcl9nZXRfYXR0YWNoZWRfaGVpZ2h0KHRlc3QtPm1faW5zcGVjdG9yKSwgPj0sIElu
c3BlY3RvclRlc3Q6OmdNaW5pbXVtQXR0YWNoZWRJbnNwZWN0b3JIZWlnaHQpOwotICAgIGV2ZW50
cyA9IHRlc3QtPm1fZXZlbnRzOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9
PSwgMSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIEluc3BlY3RvclRlc3Q6
OkF0dGFjaCk7Ci0gICAgdGVzdC0+bV9ldmVudHMuY2xlYXIoKTsKLQotICAgIHRlc3QtPmRldGFj
aEFuZFdhaXRVbnRpbFdpbmRvd09wZW5lZCgpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX2lu
c3BlY3Rvcl9pc19hdHRhY2hlZCh0ZXN0LT5tX2luc3BlY3RvcikpOwotICAgIGV2ZW50cyA9IHRl
c3QtPm1fZXZlbnRzOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgMik7
Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIEluc3BlY3RvclRlc3Q6OkRldGFj
aCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIEluc3BlY3RvclRlc3Q6Ok9w
ZW5XaW5kb3cpOwotICAgIHRlc3QtPm1fZXZlbnRzLmNsZWFyKCk7Ci0KLSAgICB0ZXN0LT5jbG9z
ZSgpOwotICAgIGV2ZW50cyA9IHRlc3QtPm1fZXZlbnRzOwotICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHMuc2l6ZSgpLCA9PSwgMSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0s
IEluc3BlY3RvclRlc3Q6OkNsb3NlZCk7Ci0gICAgdGVzdC0+bV9ldmVudHMuY2xlYXIoKTsKLX0K
LQotY2xhc3MgQ3VzdG9tSW5zcGVjdG9yVGVzdDogcHVibGljIEluc3BlY3RvclRlc3QgewotcHVi
bGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoQ3VzdG9tSW5zcGVjdG9yVGVzdCk7Ci0K
LSAgICBDdXN0b21JbnNwZWN0b3JUZXN0KCkKLSAgICAgICAgOiBJbnNwZWN0b3JUZXN0KCkKLSAg
ICAgICAgLCBtX2luc3BlY3RvcldpbmRvdygwKQotICAgIHsKLSAgICB9Ci0KLSAgICB+Q3VzdG9t
SW5zcGVjdG9yVGVzdCgpCi0gICAgewotICAgICAgICBpZiAobV9pbnNwZWN0b3JXaW5kb3cpCi0g
ICAgICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV9pbnNwZWN0b3JXaW5kb3cpOwotICAgIH0K
LQotICAgIGJvb2wgb3BlbldpbmRvdygpCi0gICAgewotICAgICAgICBnX2Fzc2VydCghbV9pbnNw
ZWN0b3JXaW5kb3cpOwotICAgICAgICBtX2luc3BlY3RvcldpbmRvdyA9IGd0a193aW5kb3dfbmV3
KEdUS19XSU5ET1dfVE9QTEVWRUwpOwotICAgICAgICBXZWJLaXRXZWJWaWV3QmFzZSogaW5zcGVj
dG9yVmlldyA9IHdlYmtpdF93ZWJfaW5zcGVjdG9yX2dldF93ZWJfdmlldyhtX2luc3BlY3Rvcik7
Ci0gICAgICAgIGdfYXNzZXJ0KGluc3BlY3RvclZpZXcpOwotICAgICAgICBndGtfY29udGFpbmVy
X2FkZChHVEtfQ09OVEFJTkVSKG1faW5zcGVjdG9yV2luZG93KSwgR1RLX1dJREdFVChpbnNwZWN0
b3JWaWV3KSk7Ci0gICAgICAgIGd0a193aWRnZXRfc2hvd19hbGwobV9pbnNwZWN0b3JXaW5kb3cp
OwotCi0gICAgICAgIHJldHVybiBJbnNwZWN0b3JUZXN0OjpvcGVuV2luZG93KCk7Ci0gICAgfQot
Ci0gICAgdm9pZCBjbG9zZWQoKQotICAgIHsKLSAgICAgICAgaWYgKG1faW5zcGVjdG9yV2luZG93
KSB7Ci0gICAgICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV9pbnNwZWN0b3JXaW5kb3cpOwot
ICAgICAgICAgICAgbV9pbnNwZWN0b3JXaW5kb3cgPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAg
cmV0dXJuIEluc3BlY3RvclRlc3Q6OmNsb3NlZCgpOwotICAgIH0KLQotICAgIGJvb2wgYXR0YWNo
KCkKLSAgICB7Ci0gICAgICAgIEdSZWZQdHI8V2ViS2l0V2ViVmlld0Jhc2U+IGluc3BlY3RvclZp
ZXcgPSB3ZWJraXRfd2ViX2luc3BlY3Rvcl9nZXRfd2ViX3ZpZXcobV9pbnNwZWN0b3IpOwotICAg
ICAgICBpZiAobV9pbnNwZWN0b3JXaW5kb3cpIHsKLSAgICAgICAgICAgIGd0a19jb250YWluZXJf
cmVtb3ZlKEdUS19DT05UQUlORVIobV9pbnNwZWN0b3JXaW5kb3cpLCBHVEtfV0lER0VUKGluc3Bl
Y3RvclZpZXcuZ2V0KCkpKTsKLSAgICAgICAgICAgIGd0a193aWRnZXRfZGVzdHJveShtX2luc3Bl
Y3RvcldpbmRvdyk7Ci0gICAgICAgICAgICBtX2luc3BlY3RvcldpbmRvdyA9IDA7Ci0gICAgICAg
IH0KLQotICAgICAgICBHdGtXaWRnZXQqIHBhbmU7Ci0gICAgICAgIGlmIChndGtfYmluX2dldF9j
aGlsZChHVEtfQklOKG1fcGFyZW50V2luZG93KSkgPT0gR1RLX1dJREdFVChtX3dlYlZpZXcpKSB7
Ci0gICAgICAgICAgICBHUmVmUHRyPFdlYktpdFdlYlZpZXc+IGluc3BlY3RlZFZpZXcgPSBtX3dl
YlZpZXc7Ci0gICAgICAgICAgICBndGtfY29udGFpbmVyX3JlbW92ZShHVEtfQ09OVEFJTkVSKG1f
cGFyZW50V2luZG93KSwgR1RLX1dJREdFVChtX3dlYlZpZXcpKTsKLSAgICAgICAgICAgIHBhbmUg
PSBndGtfcGFuZWRfbmV3KEdUS19PUklFTlRBVElPTl9WRVJUSUNBTCk7Ci0gICAgICAgICAgICBn
dGtfcGFuZWRfYWRkMShHVEtfUEFORUQocGFuZSksIEdUS19XSURHRVQobV93ZWJWaWV3KSk7Ci0g
ICAgICAgICAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKG1fcGFyZW50V2luZG93
KSwgcGFuZSk7Ci0gICAgICAgICAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKHBhbmUpOwotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIHBhbmUgPSBndGtfYmluX2dldF9jaGlsZChHVEtfQklOKG1f
cGFyZW50V2luZG93KSk7Ci0gICAgICAgIGd0a19wYW5lZF9zZXRfcG9zaXRpb24oR1RLX1BBTkVE
KHBhbmUpLCB3ZWJraXRfd2ViX2luc3BlY3Rvcl9nZXRfYXR0YWNoZWRfaGVpZ2h0KG1faW5zcGVj
dG9yKSk7Ci0gICAgICAgIGd0a19wYW5lZF9hZGQyKEdUS19QQU5FRChwYW5lKSwgR1RLX1dJREdF
VChpbnNwZWN0b3JWaWV3LmdldCgpKSk7Ci0KLSAgICAgICAgcmV0dXJuIEluc3BlY3RvclRlc3Q6
OmF0dGFjaCgpOwotICAgIH0KLQotICAgIGJvb2wgZGV0YWNoKCkKLSAgICB7Ci0gICAgICAgIEdS
ZWZQdHI8V2ViS2l0V2ViVmlld0Jhc2U+IGluc3BlY3RvclZpZXcgPSB3ZWJraXRfd2ViX2luc3Bl
Y3Rvcl9nZXRfd2ViX3ZpZXcobV9pbnNwZWN0b3IpOwotICAgICAgICBHdGtXaWRnZXQqIHBhbmUg
PSBndGtfYmluX2dldF9jaGlsZChHVEtfQklOKG1fcGFyZW50V2luZG93KSk7Ci0gICAgICAgIGdf
YXNzZXJ0KEdUS19JU19QQU5FRChwYW5lKSk7Ci0gICAgICAgIGd0a19jb250YWluZXJfcmVtb3Zl
KEdUS19DT05UQUlORVIocGFuZSksIEdUS19XSURHRVQoaW5zcGVjdG9yVmlldy5nZXQoKSkpOwot
ICAgICAgICByZXR1cm4gSW5zcGVjdG9yVGVzdDo6ZGV0YWNoKCk7Ci0gICAgfQotCi0gICAgdm9p
ZCBkZXN0cm95V2luZG93KCkKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0KG1faW5zcGVjdG9yV2lu
ZG93KTsKLSAgICAgICAgZ3RrX3dpZGdldF9kZXN0cm95KG1faW5zcGVjdG9yV2luZG93KTsKLSAg
ICAgICAgbV9pbnNwZWN0b3JXaW5kb3cgPSAwOwotICAgIH0KLQotICAgIEd0a1dpZGdldCogbV9p
bnNwZWN0b3JXaW5kb3c7Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0SW5zcGVjdG9yTWFudWFsQXR0
YWNoRGV0YWNoKEN1c3RvbUluc3BlY3RvclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0g
ICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKEdUS19XSU5ET1dfVE9QTEVW
RUwpOwotICAgIHRlc3QtPnJlc2l6ZVZpZXcoMjAwLCAyMDApOwotICAgIHRlc3QtPmxvYWRIdG1s
KCI8aHRtbD48Ym9keT48cD5XZWJLaXRHVEsrIEluc3BlY3RvciB0ZXN0PC9wPjwvYm9keT48L2h0
bWw+IiwgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICB0ZXN0
LT5zaG93KCk7Ci0gICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hl
cyhHX09CSkVDVCh3ZWJraXRfd2ViX2luc3BlY3Rvcl9nZXRfd2ViX3ZpZXcodGVzdC0+bV9pbnNw
ZWN0b3IpKSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfaW5zcGVjdG9yX2lzX2F0dGFjaGVk
KHRlc3QtPm1faW5zcGVjdG9yKSk7Ci0gICAgVmVjdG9yPEluc3BlY3RvclRlc3Q6Okluc3BlY3Rv
ckV2ZW50cz4mIGV2ZW50cyA9IHRlc3QtPm1fZXZlbnRzOwotICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHMuc2l6ZSgpLCA9PSwgMSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0s
IEluc3BlY3RvclRlc3Q6Ok9wZW5XaW5kb3cpOwotICAgIHRlc3QtPm1fZXZlbnRzLmNsZWFyKCk7
Ci0KLSAgICB0ZXN0LT5yZXNpemVWaWV3QW5kQXR0YWNoKCk7Ci0gICAgZ19hc3NlcnQod2Via2l0
X3dlYl9pbnNwZWN0b3JfaXNfYXR0YWNoZWQodGVzdC0+bV9pbnNwZWN0b3IpKTsKLSAgICBnX2Fz
c2VydF9jbXB1aW50KHdlYmtpdF93ZWJfaW5zcGVjdG9yX2dldF9hdHRhY2hlZF9oZWlnaHQodGVz
dC0+bV9pbnNwZWN0b3IpLCA+PSwgSW5zcGVjdG9yVGVzdDo6Z01pbmltdW1BdHRhY2hlZEluc3Bl
Y3RvckhlaWdodCk7Ci0gICAgZXZlbnRzID0gdGVzdC0+bV9ldmVudHM7Ci0gICAgZ19hc3NlcnRf
Y21waW50KGV2ZW50cy5zaXplKCksID09LCAxKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRz
WzBdLCA9PSwgSW5zcGVjdG9yVGVzdDo6QXR0YWNoKTsKLSAgICB0ZXN0LT5tX2V2ZW50cy5jbGVh
cigpOwotCi0gICAgdGVzdC0+ZGV0YWNoQW5kV2FpdFVudGlsV2luZG93T3BlbmVkKCk7Ci0gICAg
Z19hc3NlcnQoIXdlYmtpdF93ZWJfaW5zcGVjdG9yX2lzX2F0dGFjaGVkKHRlc3QtPm1faW5zcGVj
dG9yKSk7Ci0gICAgZXZlbnRzID0gdGVzdC0+bV9ldmVudHM7Ci0gICAgZ19hc3NlcnRfY21waW50
KGV2ZW50cy5zaXplKCksID09LCAyKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9
PSwgSW5zcGVjdG9yVGVzdDo6RGV0YWNoKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFd
LCA9PSwgSW5zcGVjdG9yVGVzdDo6T3BlbldpbmRvdyk7Ci0gICAgdGVzdC0+bV9ldmVudHMuY2xl
YXIoKTsKLQotICAgIHRlc3QtPnJlc2l6ZVZpZXdBbmRBdHRhY2goKTsKLSAgICBnX2Fzc2VydCh3
ZWJraXRfd2ViX2luc3BlY3Rvcl9pc19hdHRhY2hlZCh0ZXN0LT5tX2luc3BlY3RvcikpOwotICAg
IHRlc3QtPm1fZXZlbnRzLmNsZWFyKCk7Ci0gICAgdGVzdC0+Y2xvc2UoKTsKLSAgICBldmVudHMg
PSB0ZXN0LT5tX2V2ZW50czsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0s
IDIpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBJbnNwZWN0b3JUZXN0OjpE
ZXRhY2gpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBJbnNwZWN0b3JUZXN0
OjpDbG9zZWQpOwotICAgIHRlc3QtPm1fZXZlbnRzLmNsZWFyKCk7Ci19Ci0KLXN0YXRpYyB2b2lk
IHRlc3RJbnNwZWN0b3JDdXN0b21Db250YWluZXJEZXN0cm95ZWQoQ3VzdG9tSW5zcGVjdG9yVGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0
VW50aWxNYXBwZWQoR1RLX1dJTkRPV19UT1BMRVZFTCk7Ci0gICAgdGVzdC0+cmVzaXplVmlldygy
MDAsIDIwMCk7Ci0gICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxib2R5PjxwPldlYktpdEdUSysg
SW5zcGVjdG9yIHRlc3Q8L3A+PC9ib2R5PjwvaHRtbD4iLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50
aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIHRlc3QtPnNob3coKTsKLSAgICB0ZXN0LT5hc3NlcnRP
YmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHdlYmtpdF93ZWJfaW5zcGVj
dG9yX2dldF93ZWJfdmlldyh0ZXN0LT5tX2luc3BlY3RvcikpKTsKLSAgICBnX2Fzc2VydCghd2Vi
a2l0X3dlYl9pbnNwZWN0b3JfaXNfYXR0YWNoZWQodGVzdC0+bV9pbnNwZWN0b3IpKTsKLQotICAg
IHRlc3QtPm1fZXZlbnRzLmNsZWFyKCk7Ci0gICAgdGVzdC0+ZGVzdHJveVdpbmRvdygpOwotICAg
IFZlY3RvcjxJbnNwZWN0b3JUZXN0OjpJbnNwZWN0b3JFdmVudHM+JiBldmVudHMgPSB0ZXN0LT5t
X2V2ZW50czsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDEpOwotICAg
IGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBJbnNwZWN0b3JUZXN0OjpDbG9zZWQpOwot
ICAgIHRlc3QtPm1fZXZlbnRzLmNsZWFyKCk7Ci19Ci0KLXZvaWQgYmVmb3JlQWxsKCkKLXsKLSAg
ICBJbnNwZWN0b3JUZXN0OjphZGQoIldlYktpdFdlYkluc3BlY3RvciIsICJkZWZhdWx0IiwgdGVz
dEluc3BlY3RvckRlZmF1bHQpOwotICAgIEN1c3RvbUluc3BlY3RvclRlc3Q6OmFkZCgiV2ViS2l0
V2ViSW5zcGVjdG9yIiwgIm1hbnVhbC1hdHRhY2gtZGV0YWNoIiwgdGVzdEluc3BlY3Rvck1hbnVh
bEF0dGFjaERldGFjaCk7Ci0gICAgQ3VzdG9tSW5zcGVjdG9yVGVzdDo6YWRkKCJXZWJLaXRXZWJJ
bnNwZWN0b3IiLCAiY3VzdG9tLWNvbnRhaW5lci1kZXN0cm95ZWQiLCB0ZXN0SW5zcGVjdG9yQ3Vz
dG9tQ29udGFpbmVyRGVzdHJveWVkKTsKLX0KLQotdm9pZCBhZnRlckFsbCgpCi17Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0SW5zcGVj
dG9yU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rl
c3RJbnNwZWN0b3JTZXJ2ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjRi
ZjU0Y2I5ZmI5MWZiMmU4NjdjMjQwMzY1M2ViM2EwZGI5ZmNlLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL1Rlc3RJbnNwZWN0b3JTZXJ2ZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjk0
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcyBM
dGQuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IKLSAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLQotI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCi0jaW5jbHVkZSA8d3RmL2dvYmplY3Qv
R1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0vLyBOYW1lIG9m
IHRoZSB0ZXN0IHNlcnZlciBhcHBsaWNhdGlvbiBjcmVhdGluZyB0aGUgd2ViVmlldyBvYmplY3Qu
Ci1zdGF0aWMgY29uc3QgY2hhciogZ1Rlc3RTZXJ2ZXJBcHBOYW1lID0gIkluc3BlY3RvclRlc3RT
ZXJ2ZXIiOwotCi0vLyBNYXggc2Vjb25kcyB0byB3YWl0IGZvciB0aGUgdGVzdCBzZXJ2ZXIgYmVm
b3JlIGluc3BlY3RpbmcgaXQuCi1zdGF0aWMgY29uc3QgaW50IGdNYXhXYWl0Rm9yQ2hpbGQgPSA1
OwotCi0vLyBUaGUgUElEIGZvciB0aGUgdGVzdCBzZXJ2ZXIgcnVubmluZywgc28gd2UgY2FuIGtp
bGwgaXQgaWYgbmVlZGVkLgotc3RhdGljIEdQaWQgZ0NoaWxkUHJvY2Vzc1BpZCA9IDA7Ci0KLS8v
IFdoZXRoZXIgdGhlIGNoaWxkIGhhcyByZXBsaWVkIGFuZCBpdCdzIHJlYWR5Lgotc3RhdGljIGJv
b2wgZ0NoaWxkSXNSZWFkeSA9IGZhbHNlOwotCi1zdGF0aWMgdm9pZCBzdG9wVGVzdFNlcnZlcigp
Ci17Ci0gICAgLy8gRG8gbm90aGluZyBpZiB0aGVyZSdzIG5vIHNlcnZlciBydW5uaW5nLgotICAg
IGlmICghZ0NoaWxkUHJvY2Vzc1BpZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZ19zcGF3bl9j
bG9zZV9waWQoZ0NoaWxkUHJvY2Vzc1BpZCk7Ci0gICAga2lsbChnQ2hpbGRQcm9jZXNzUGlkLCBT
SUdURVJNKTsKLSAgICBnQ2hpbGRQcm9jZXNzUGlkID0gMDsKLX0KLQotc3RhdGljIHZvaWQgc2ln
QWJvcnRIYW5kbGVyKGludCBzaWdOdW0pCi17Ci0gICAgLy8gSnVzdCBzdG9wIHRoZSB0ZXN0IHNl
cnZlciBpZiBTSUdBQlJUIHdhcyByZWNlaXZlZC4KLSAgICBzdG9wVGVzdFNlcnZlcigpOwotfQot
Ci1zdGF0aWMgZ3BvaW50ZXIgdGVzdFNlcnZlck1vbml0b3JUaHJlYWRGdW5jKGdwb2ludGVyKQot
ewotICAgIC8vIFdhaXQgZm9yIHRoZSBzcGVjaWZpZWQgdGltZW91dCB0byBoYXBwZW4uCi0gICAg
Z191c2xlZXAoZ01heFdhaXRGb3JDaGlsZCAqIEdfVVNFQ19QRVJfU0VDKTsKLQotICAgIC8vIEtp
bGwgdGhlIGNoaWxkIHByb2Nlc3MgaWYgbm90IHJlYWR5IHlldC4KLSAgICBpZiAoIWdDaGlsZElz
UmVhZHkpCi0gICAgICAgIHN0b3BUZXN0U2VydmVyKCk7Ci0KLSAgICBnX3RocmVhZF9leGl0KDAp
OwotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBzdGFydFRlc3RTZXJ2ZXJNb25pdG9y
KCkKLXsKLSAgICBnQ2hpbGRJc1JlYWR5ID0gZmFsc2U7Ci0gICAgZ190aHJlYWRfbmV3KCJUZXN0
U2VydmVyTW9uaXRvciIsIHRlc3RTZXJ2ZXJNb25pdG9yVGhyZWFkRnVuYywgMCk7Ci19Ci0KLXN0
YXRpYyB2b2lkIHN0YXJ0VGVzdFNlcnZlcigpCi17Ci0gICAgLy8gUHJlcGFyZSBhcmd2W10gZm9y
IHNwYXduaW5nIHRoZSBzZXJ2ZXIgcHJvY2Vzcy4KLSAgICBHT3duUHRyPGNoYXI+IHRlc3RTZXJ2
ZXJQYXRoKGdfYnVpbGRfZmlsZW5hbWUoV0VCS0lUX0VYRUNfUEFUSCwgIldlYktpdDJHT2JqZWN0
QVBJVGVzdHMiLCBnVGVzdFNlcnZlckFwcE5hbWUsIE5VTEwpKTsKLQotICAgIC8vIFdlIGluc3Rh
bGwgYSBoYW5kbGVyIHRvIGVuc3VyZSB0aGF0IHdlIGtpbGwgdGhlIGNoaWxkIHByb2Nlc3MKLSAg
ICAvLyBpZiB0aGUgcGFyZW50IGRpZXMgYmVjYXVzZSBvZiB3aGF0ZXZlciB0aGUgcmVhc29uIGlz
LgotICAgIHNpZ25hbChTSUdBQlJULCBzaWdBYm9ydEhhbmRsZXIpOwotCi0gICAgY2hhciogdGVz
dFNlcnZlckFyZ3ZbMl07Ci0gICAgdGVzdFNlcnZlckFyZ3ZbMF0gPSB0ZXN0U2VydmVyUGF0aC5n
ZXQoKTsKLSAgICB0ZXN0U2VydmVyQXJndlsxXSA9IDA7Ci0KLSAgICAvLyBTcGF3biB0aGUgc2Vy
dmVyLCBnZXR0aW5nIGl0cyBzdGRvdXQgZmlsZSBkZXNjcmlwdG9yIHRvIHNldCBhCi0gICAgLy8g
Y29tbXVuaWNhdGlvbiBjaGFubmVsLCBzbyB3ZSBrbm93IHdoZW4gaXQncyByZWFkeS4KLSAgICBp
bnQgY2hpbGRTdGRvdXQgPSAwOwotICAgIGdfYXNzZXJ0KGdfc3Bhd25fYXN5bmNfd2l0aF9waXBl
cygwLCB0ZXN0U2VydmVyQXJndiwgMCwgc3RhdGljX2Nhc3Q8R1NwYXduRmxhZ3M+KDApLCAwLCAw
LAotICAgICAgICAmZ0NoaWxkUHJvY2Vzc1BpZCwgMCwgJmNoaWxkU3Rkb3V0LCAwLCAwKSk7Ci0K
LSAgICAvLyBTdGFydCBtb25pdG9yaW5nIHRoZSB0ZXN0IHNlcnZlciAoaW4gYSBzZXBhcmF0ZSB0
aHJlYWQpIHRvCi0gICAgLy8gZW5zdXJlIHdlIGRvbid0IGJsb2NrIG9uIHRoZSBjaGlsZCBwcm9j
ZXNzIG1vcmUgdGhhbiBhIHRpbWVvdXQuCi0gICAgc3RhcnRUZXN0U2VydmVyTW9uaXRvcigpOwot
Ci0gICAgY2hhciBtc2dbMl07Ci0gICAgR0lPQ2hhbm5lbCogaW9DaGFubmVsID0gZ19pb19jaGFu
bmVsX3VuaXhfbmV3KGNoaWxkU3Rkb3V0KTsKLSAgICBpZiAoZ19pb19jaGFubmVsX3JlYWRfY2hh
cnMoaW9DaGFubmVsLCBtc2csIDIsIDAsIDApID09IEdfSU9fU1RBVFVTX05PUk1BTCkgewotICAg
ICAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBzZXJ2ZXIgc2VudCBhIG1lc3NhZ2Ugc2F5aW5nIGl0
J3MgcmVhZHkKLSAgICAgICAgLy8gYW5kIHN0b3JlIHRoZSByZXN1bHQgZ2xvYmFsbHksIHNvIHRo
ZSBtb25pdG9yIGNhbiBzZWUgaXQuCi0gICAgICAgIGdDaGlsZElzUmVhZHkgPSBtc2dbMF0gPT0g
J08nICYmIG1zZ1sxXSA9PSAnSyc7Ci0gICAgfQotICAgIGdfaW9fY2hhbm5lbF91bnJlZihpb0No
YW5uZWwpOwotICAgIGNsb3NlKGNoaWxkU3Rkb3V0KTsKLQotICAgIC8vIFRoZSB0aW1lb3V0IHdh
cyByZWFjaGVkIGFuZCB0aGUgc2VydmVyIGlzIG5vdCByZWFkeSB5ZXQsIHNvCi0gICAgLy8gc3Rv
cCBpdCBpbm1lZGlhdGVseSwgYW5kIGxldCB0aGUgdW5pdCB0ZXN0cyBmYWlsLgotICAgIGlmICgh
Z0NoaWxkSXNSZWFkeSkKLSAgICAgICAgc3RvcFRlc3RTZXJ2ZXIoKTsKLX0KLQotY2xhc3MgSW5z
cGVjdG9yU2VydmVyVGVzdDogcHVibGljIFdlYlZpZXdUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtF
X0dMSUJfVEVTVF9GSVhUVVJFKEluc3BlY3RvclNlcnZlclRlc3QpOwotCi0gICAgSW5zcGVjdG9y
U2VydmVyVGVzdCgpCi0gICAgICAgIDogV2ViVmlld1Rlc3QoKQotICAgIHsKLSAgICB9Ci0KLSAg
ICBib29sIGdldFBhZ2VMaXN0KCkKLSAgICB7Ci0gICAgICAgIGxvYWRIdG1sKCI8c2NyaXB0IHR5
cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIj5cbiIKLSAgICAgICAgICAgICJ2YXIgcGFnZXM7XG4iCi0g
ICAgICAgICAgICAidmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdDtcbiIKLSAgICAgICAgICAg
ICJ4aHIub3BlbihcIkdFVFwiLCBcIi9wYWdlbGlzdC5qc29uXCIpO1xuIgotICAgICAgICAgICAg
Inhoci5vbmxvYWQgPSBmdW5jdGlvbihlKSB7XG4iCi0gICAgICAgICAgICAgICAgImlmICh4aHIu
c3RhdHVzID09IDIwMCkge1xuIgotICAgICAgICAgICAgICAgICAgICAicGFnZXMgPSBKU09OLnBh
cnNlKHhoci5yZXNwb25zZVRleHQpO1xuIgotICAgICAgICAgICAgICAgICAgICAiZG9jdW1lbnQu
dGl0bGUgPSBcIk9LXCI7XG4iCi0gICAgICAgICAgICAgICAgIn0gZWxzZSBcbiIKLSAgICAgICAg
ICAgICAgICAgICAgImRvY3VtZW50LnRpdGxlID0gXCJGQUlMXCI7XG4iCi0gICAgICAgICAgICAg
ICAgIn1cbiIKLSAgICAgICAgICAgICJ4aHIuc2VuZCgpO1xuIgotICAgICAgICAgICAgIjwvc2Ny
aXB0PlxuIiwKLSAgICAgICAgICAgICJodHRwOi8vMTI3LjAuMC4xOjI5OTkvIik7Ci0KLSAgICAg
ICAgd2FpdFVudGlsVGl0bGVDaGFuZ2VkKCk7Ci0KLSAgICAgICAgaWYgKCFzdHJjbXAod2Via2l0
X3dlYl92aWV3X2dldF90aXRsZShtX3dlYlZpZXcpLCAiT0siKSkKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICB+SW5zcGVjdG9y
U2VydmVyVGVzdCgpCi0gICAgewotICAgIH0KLX07Ci0KLS8vIFRlc3QgdG8gZ2V0IGluc3BlY3Rv
ciBzZXJ2ZXIgcGFnZSBsaXN0IGZyb20gdGhlIHRlc3Qgc2VydmVyLgotLy8gU2hvdWxkIGNvbnRh
aW4gb25seSBvbmUgZW50cnkgcG9pbnRpbmcgdG8gaHR0cDovLzEyNy4wLjAuMToyOTk5L3dlYmlu
c3BlY3Rvci9NYWluLmh0bWw/cGFnZT0xCi1zdGF0aWMgdm9pZCB0ZXN0SW5zcGVjdG9yU2VydmVy
UGFnZUxpc3QoSW5zcGVjdG9yU2VydmVyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAg
ICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7Ci0KLSAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0
VW50aWxNYXBwZWQoR1RLX1dJTkRPV19UT1BMRVZFTCk7Ci0gICAgZ19hc3NlcnQodGVzdC0+Z2V0
UGFnZUxpc3QoKSk7Ci0KLSAgICBXZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBqYXZhc2NyaXB0UmVz
dWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJwYWdlcy5sZW5n
dGg7IiwgJmVycm9yLm91dFB0cigpKTsKLSAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsK
LSAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOwotICAgIGdfYXNzZXJ0X2NtcGludChXZWJWaWV3
VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvTnVtYmVyKGphdmFzY3JpcHRSZXN1bHQpLCA9PSwgMSk7
Ci0KLSAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRp
bEZpbmlzaGVkKCJwYWdlc1swXS5pZDsiLCAmZXJyb3Iub3V0UHRyKCkpOwotICAgIGdfYXNzZXJ0
KGphdmFzY3JpcHRSZXN1bHQpOwotICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7Ci0gICAgaW50
IHBhZ2VJZCA9IFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9OdW1iZXIoamF2YXNjcmlw
dFJlc3VsdCk7Ci0KLSAgICBHT3duUHRyPGNoYXI+IHZhbHVlU3RyaW5nOwotICAgIGphdmFzY3Jp
cHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoInBhZ2Vz
WzBdLnVybDsiLCAmZXJyb3Iub3V0UHRyKCkpOwotICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1
bHQpOwotICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7Ci0gICAgdmFsdWVTdHJpbmcuc2V0KFdl
YlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsK
LSAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAiaHR0cDovLzEyNy4w
LjAuMToyOTk5LyIpOwotCi0gICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3Jp
cHRBbmRXYWl0VW50aWxGaW5pc2hlZCgicGFnZXNbMF0uaW5zcGVjdG9yVXJsOyIsICZlcnJvci5v
dXRQdHIoKSk7Ci0gICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAgZ19hc3NlcnQo
IWVycm9yLmdldCgpKTsKLSAgICB2YWx1ZVN0cmluZy5zZXQoV2ViVmlld1Rlc3Q6OmphdmFzY3Jp
cHRSZXN1bHRUb0NTdHJpbmcoamF2YXNjcmlwdFJlc3VsdCkpOwotICAgIFN0cmluZyB2YWxpZElu
c3BlY3RvclVSTCA9IFN0cmluZygiL01haW4uaHRtbD9wYWdlPSIpICsgU3RyaW5nOjpudW1iZXIo
cGFnZUlkKTsKLSAgICBBU1NFUlRfQ01QX0NTVFJJTkcodmFsdWVTdHJpbmcuZ2V0KCksID09LCB2
YWxpZEluc3BlY3RvclVSTC51dGY4KCkpOwotfQotCi0vLyBUZXN0IHNlbmRpbmcgYSByYXcgcmVt
b3RlIGRlYnVnZ2luZyBtZXNzYWdlIHRocm91Z2ggb3VyIHdlYiBzb2NrZXQgc2VydmVyLgotLy8g
Rm9yIHRoaXMgc3BlY2lmaWMgbWVzc2FnZSBzZWU6IGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vY2hy
b21lL2RldnRvb2xzL2RvY3MvcHJvdG9jb2wvdG90L3J1bnRpbWUuaHRtbCNjb21tYW5kLWV2YWx1
YXRlCi1zdGF0aWMgdm9pZCB0ZXN0UmVtb3RlRGVidWdnaW5nTWVzc2FnZShJbnNwZWN0b3JTZXJ2
ZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPnNob3dJbldpbmRvd0Fu
ZFdhaXRVbnRpbE1hcHBlZChHVEtfV0lORE9XX1RPUExFVkVMKTsKLQotICAgIHRlc3QtPmxvYWRI
dG1sKCI8c2NyaXB0IHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIj5cbiIKLSAgICAgICAgInZhciBz
b2NrZXQgPSBuZXcgV2ViU29ja2V0KCd3czovLzEyNy4wLjAuMToyOTk5L2RldnRvb2xzL3BhZ2Uv
MScpO1xuIgotICAgICAgICAic29ja2V0Lm9ubWVzc2FnZSA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHtc
biIKLSAgICAgICAgICAgICJ2YXIgcmVzcG9uc2UgPSBKU09OLnBhcnNlKG1lc3NhZ2UuZGF0YSk7
XG4iCi0gICAgICAgICAgICAiaWYgKHJlc3BvbnNlLmlkID09PSAxKVxuIgotICAgICAgICAgICAg
ICAgICJkb2N1bWVudC50aXRsZSA9IHJlc3BvbnNlLnJlc3VsdC5yZXN1bHQudmFsdWU7XG4iCi0g
ICAgICAgICAgICAiZWxzZVxuIgotICAgICAgICAgICAgICAgICJkb2N1bWVudC50aXRsZSA9IFwi
RkFJTFwiO1xuIgotICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICJzb2NrZXQub25vcGVu
ID0gZnVuY3Rpb24oKSB7XG4iCi0gICAgICAgICAgICAic29ja2V0LnNlbmQoJ3tcImlkXCI6IDEs
IFwibWV0aG9kXCI6IFwiUnVudGltZS5ldmFsdWF0ZVwiLCBcInBhcmFtc1wiOiB7XCJleHByZXNz
aW9uXCI6IFwiMiArIDJcIiB9IH0nKTtcbiIKLSAgICAgICAgIn1cbiIKLSAgICAgICAgIjwvc2Ny
aXB0PiIsCi0gICAgICAgICJodHRwOi8vMTI3LjAuMC4xOjI5OTkvIik7Ci0gICAgdGVzdC0+d2Fp
dFVudGlsVGl0bGVDaGFuZ2VkKCk7Ci0KLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92
aWV3X2dldF90aXRsZSh0ZXN0LT5tX3dlYlZpZXcpLCA9PSwgIjQiKTsKLX0KLQotc3RhdGljIHZv
aWQgb3BlblJlbW90ZURlYnVnZ2luZ1Nlc3Npb24oSW5zcGVjdG9yU2VydmVyVGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKLXsKLSAgICAvLyBUbyB0ZXN0IHRoZSB3aG9sZSBwaXBlbGluZSB0aGlz
IGV4cGxvaXRzIGEgYmVoYXZpb3Igb2YgdGhlIGluc3BlY3RvciBmcm9udC1lbmQgd2hpY2ggd29u
J3QgcHJvdmlkZSB0aGUgcGFnZSBhZGRyZXNzIGFzIHRpdGxlIHVubGVzcyB0aGUKLSAgICAvLyBk
ZWJ1Z2dpbmcgc2Vzc2lvbiB3YXMgZXN0YWJsaXNoZWQgY29ycmVjdGx5IHRocm91Z2ggd2ViIHNv
Y2tldC4KLSAgICAvLyBJbiBvdXIgY2FzZSBwYWdlIFVSTCBzaG91bGQgYmUgaHR0cDovLzEyNy4w
LjAuMToyOTk5LwotICAgIC8vIFNvIHRoaXMgdGVzdCBjYXNlIHdpbGwgZmFpbCBpZjoKLSAgICAv
LyAtIFRoZSBwYWdlIGxpc3QgZGlkbid0IHJldHVybiBhIHZhbGlkIGluc3BlY3RvciBVUkwKLSAg
ICAvLyAtIE9yIHRoZSBmcm9udC1lbmQgY291bGRuJ3QgYmUgbG9hZGVkIHRocm91Z2ggdGhlIGlu
c3BlY3RvciBIVFRQIHNlcnZlcgotICAgIC8vIC0gT3IgdGhlIHdlYiBzb2NrZXQgY29ubmVjdGlv
biBjb3VsZG4ndCBiZSBlc3RhYmxpc2hlZCBiZXR3ZWVuIHRoZSBmcm9udC1lbmQgYW5kIHRoZSBw
YWdlIHRocm91Z2ggdGhlIGluc3BlY3RvciBzZXJ2ZXIKLSAgICAvLyBMZXQncyBzZWUgaWYgdGhp
cyB0ZXN0IGlzbid0IHJhaXNpbmcgdG9vIG1hbnkgZmFsc2UgcG9zaXRpdmVzLCBpbiB3aGljaCBj
YXNlIHdlIHNob3VsZCB1c2UgYSBiZXR0ZXIgcHJlZGljYXRlIGlmIGF2YWlsYWJsZS4KLQotICAg
IHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZChHVEtfV0lORE9XX1RPUExFVkVM
KTsKLQotICAgIGdfYXNzZXJ0KHRlc3QtPmdldFBhZ2VMaXN0KCkpOwotCi0gICAgR093blB0cjxH
RXJyb3I+IGVycm9yOwotICAgIFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1
bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoInBhZ2VzWzBdLmlu
c3BlY3RvclVybDsiLCAmZXJyb3Iub3V0UHRyKCkpOwotICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRS
ZXN1bHQpOwotICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7Ci0KLSAgICBTdHJpbmcgcmVzb2x2
ZWRVUkwgPSBTdHJpbmcoImh0dHA6Ly8xMjcuMC4wLjE6Mjk5OS8iKSArIFN0cmluZzo6ZnJvbVVU
RjgoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0NTdHJpbmcoamF2YXNjcmlwdFJlc3Vs
dCkpOwotICAgIHRlc3QtPmxvYWRVUkkocmVzb2x2ZWRVUkwudXRmOCgpLmRhdGEoKSk7Ci0gICAg
dGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBqYXZhc2NyaXB0UmVzdWx0ID0g
dGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJ3aW5kb3cuZG9jdW1lbnQu
Z2V0RWxlbWVudHNCeVRhZ05hbWUoJ2xpJylbMF0udGl0bGUiLCAmZXJyb3Iub3V0UHRyKCkpOwot
ICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOwotICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQo
KSk7Ci0KLSAgICBHT3duUHRyPGNoYXI+IHRpdGxlKFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVz
dWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGl0
bGUuZ2V0KCksID09LCAiaHR0cDovLzEyNy4wLjAuMToyOTk5LyIpOwotfQotCi1zdGF0aWMgdm9p
ZCBzZW5kSW5jb21wbGV0ZVJlcXVlc3QoSW5zcGVjdG9yU2VydmVyVGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKLXsKLSAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7Ci0KLSAgICAvLyBDb25uZWN0
IHRvIHRoZSBpbnNwZWN0b3Igc2VydmVyLgotICAgIEdSZWZQdHI8R1NvY2tldENsaWVudD4gY2xp
ZW50ID0gYWRvcHRHUmVmKGdfc29ja2V0X2NsaWVudF9uZXcoKSk7Ci0gICAgR1JlZlB0cjxHU29j
a2V0Q29ubmVjdGlvbj4gY29ubmVjdGlvbiA9IGFkb3B0R1JlZihnX3NvY2tldF9jbGllbnRfY29u
bmVjdF90b19ob3N0KGNsaWVudC5nZXQoKSwgIjEyNy4wLjAuMSIsIDI5OTksIDAsICZlcnJvci5v
dXRQdHIoKSkpOwotICAgIGdfYXNzZXJ0X25vX2Vycm9yKGVycm9yLmdldCgpKTsKLQotICAgIC8v
IFNlbmQgaW5jb21wbGV0ZSByZXF1ZXN0IChtaXNzaW5nIGJsYW5rIGxpbmUgYWZ0ZXIgaGVhZGVy
cykgYW5kIGNoZWNrIGlmIGluc3BlY3RvciBzZXJ2ZXIKLSAgICAvLyByZXBsaWVzLiBUaGUgc2Vy
dmVyIHNob3VsZCBub3QgcmVwbHkgdG8gYW4gaW5jb21wbGV0ZSByZXF1ZXN0IGFuZCB0aGUgdGVz
dCBzaG91bGQgdGltZW91dAotICAgIC8vIG9uIHJlYWQuCi0gICAgR091dHB1dFN0cmVhbSogb3N0
cmVhbSA9IGdfaW9fc3RyZWFtX2dldF9vdXRwdXRfc3RyZWFtKEdfSU9fU1RSRUFNKGNvbm5lY3Rp
b24uZ2V0KCkpKTsKLSAgICAvLyBSZXF1ZXN0IG1pc3NpbmcgYmxhbmsgbGluZSBhZnRlciBoZWFk
ZXJzLgotICAgIGNvbnN0IGdjaGFyKiBpbmNvbXBsZXRlUmVxdWVzdCA9ICJHRVQgL2RldnRvb2xz
L3BhZ2UvMSBIVFRQLzEuMVxyXG5Ib3N0OiBMb2NhbGhvc3RcclxuIjsKLSAgICBnX291dHB1dF9z
dHJlYW1fd3JpdGUob3N0cmVhbSwgaW5jb21wbGV0ZVJlcXVlc3QsIHN0cmxlbihpbmNvbXBsZXRl
UmVxdWVzdCksIDAsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgZ19hc3NlcnRfbm9fZXJyb3IoZXJy
b3IuZ2V0KCkpOwotCi0gICAgR0lucHV0U3RyZWFtKiBpc3RyZWFtID0gZ19pb19zdHJlYW1fZ2V0
X2lucHV0X3N0cmVhbShHX0lPX1NUUkVBTShjb25uZWN0aW9uLmdldCgpKSk7Ci0gICAgY2hhciBy
ZXNwb25zZVsxNl07Ci0gICAgbWVtc2V0KHJlc3BvbnNlLCAwLCBzaXplb2YocmVzcG9uc2UpKTsK
LSAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gY2FuY2VsID0gYWRvcHRHUmVmKGdfY2FuY2VsbGFi
bGVfbmV3KCkpOwotICAgIGdfaW5wdXRfc3RyZWFtX3JlYWRfYXN5bmMoaXN0cmVhbSwgcmVzcG9u
c2UsIHNpemVvZihyZXNwb25zZSkgLSAxLCBHX1BSSU9SSVRZX0RFRkFVTFQsIGNhbmNlbC5nZXQo
KSwgMCwgMCk7Ci0gICAgLy8gR2l2ZSBhIGNoYW5jZSBmb3IgdGhlIHNlcnZlciB0byByZXBseS4K
LSAgICB0ZXN0LT53YWl0KDEpOwotICAgIGdfY2FuY2VsbGFibGVfY2FuY2VsKGNhbmNlbC5nZXQo
KSk7Ci0gICAgLy8gSWYgd2UgZ290IGFueSBhbnN3ZXIgaXQgbWVhbnMgdGhlIHNlcnZlciByZXBs
aWVkIHRvIGFuIGluY29tcGxldGUgcmVxdWVzdCwgbGV0cyBmYWlsLgotICAgIGdfYXNzZXJ0KHJl
c3BvbnNlWzBdID09ICdcMCcpOwotfQotCi12b2lkIGJlZm9yZUFsbCgpCi17Ci0gICAgLy8gT3Zl
cndyaXRlIFdFQktJVF9JTlNQRUNUT1JfU0VSVkVSIHZhcmlhYmxlIHdpdGggZGVmYXVsdCBJUCBh
ZGRyZXNzIGJ1dCBkaWZmZXJlbnQgcG9ydCB0byBhdm9pZCBjb25mbGljdCB3aXRoIHRoZSB0ZXN0
IGluc3BlY3RvciBzZXJ2ZXIgcGFnZS4KLSAgICBnX3NldGVudigiV0VCS0lUX0lOU1BFQ1RPUl9T
RVJWRVIiLCAiMTI3LjAuMC4xOjI5OTgiLCBUUlVFKTsKLQotICAgIHN0YXJ0VGVzdFNlcnZlcigp
OwotICAgIEluc3BlY3RvclNlcnZlclRlc3Q6OmFkZCgiV2ViS2l0V2ViSW5zcGVjdG9yU2VydmVy
IiwgInRlc3QtcGFnZS1saXN0IiwgdGVzdEluc3BlY3RvclNlcnZlclBhZ2VMaXN0KTsKLSAgICBJ
bnNwZWN0b3JTZXJ2ZXJUZXN0OjphZGQoIldlYktpdFdlYkluc3BlY3RvclNlcnZlciIsICJ0ZXN0
LXJlbW90ZS1kZWJ1Z2dpbmctbWVzc2FnZSIsIHRlc3RSZW1vdGVEZWJ1Z2dpbmdNZXNzYWdlKTsK
LSAgICBJbnNwZWN0b3JTZXJ2ZXJUZXN0OjphZGQoIldlYktpdFdlYkluc3BlY3RvclNlcnZlciIs
ICJ0ZXN0LW9wZW4tZGVidWdnaW5nLXNlc3Npb24iLCBvcGVuUmVtb3RlRGVidWdnaW5nU2Vzc2lv
bik7Ci0gICAgSW5zcGVjdG9yU2VydmVyVGVzdDo6YWRkKCJXZWJLaXRXZWJJbnNwZWN0b3JTZXJ2
ZXIiLCAidGVzdC1pbmNvbXBsZXRlLXJlcXVlc3QiLCBzZW5kSW5jb21wbGV0ZVJlcXVlc3QpOwot
Ci19Ci0KLXZvaWQgYWZ0ZXJBbGwoKQotewotICAgIHN0b3BUZXN0U2VydmVyKCk7Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0TG9hZGVy
Q2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RM
b2FkZXJDbGllbnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzE5MTVlMDA0
NTQ2ZTQ3NGM4NjdkM2NiN2E3ZmQyMTQ2ZmJlMzQ5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL1Rlc3RMb2FkZXJDbGllbnQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDY1ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgR3VzdGF2byBOb3JvbmhhIFNpbHZhCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEgSWdhbGlhIFMuTC4KLSAqIFBvcnRpb25zIENvcHly
aWdodCAoYykgMjAxMSBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiTG9hZFRyYWNraW5nVGVzdC5oIgot
I2luY2x1ZGUgIldlYktpdFRlc3RCdXMuaCIKLSNpbmNsdWRlICJXZWJLaXRUZXN0U2VydmVyLmgi
Ci0jaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVk
ZSA8bGlic291cC9zb3VwLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1zdGF0
aWMgV2ViS2l0VGVzdEJ1cyogYnVzOwotc3RhdGljIFdlYktpdFRlc3RTZXJ2ZXIqIGtTZXJ2ZXI7
Ci0KLWNvbnN0IGNoYXIqIGtETlRIZWFkZXJOb3RQcmVzZW50ID0gIkROVCBoZWFkZXIgbm90IHBy
ZXNlbnQiOwotCi1zdGF0aWMgdm9pZCB0ZXN0TG9hZGluZ1N0YXR1cyhMb2FkVHJhY2tpbmdUZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgdGVzdC0+c2V0UmVkaXJlY3RVUkko
a1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL25vcm1hbCIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+bG9h
ZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvcmVkaXJlY3QiKS5kYXRhKCkpOwotICAgIHRl
c3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgVmVjdG9yPExvYWRUcmFja2luZ1Rl
c3Q6OkxvYWRFdmVudHM+JiBldmVudHMgPSB0ZXN0LT5tX2xvYWRFdmVudHM7Ci0gICAgZ19hc3Nl
cnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCA0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZl
bnRzWzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zp
c2lvbmFsTG9hZFJlY2VpdmVkU2VydmVyUmVkaXJlY3QpOwotICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHNbMl0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkQ29tbWl0dGVkKTsKLSAgICBnX2Fz
c2VydF9jbXBpbnQoZXZlbnRzWzNdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVk
KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdExvYWRpbmdFcnJvcihMb2FkVHJhY2tpbmdUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJ
Rm9yUGF0aCgiL2Vycm9yIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNo
ZWQoKTsKLQotICAgIFZlY3RvcjxMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRXZlbnRzPiYgZXZlbnRz
ID0gdGVzdC0+bV9sb2FkRXZlbnRzOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgp
LCA9PSwgMyk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIExvYWRUcmFja2lu
Z1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVu
dHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRGYWlsZWQpOwotICAg
IGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmlu
aXNoZWQpOwotfQotCi1zdGF0aWMgdm9pZCBhc3NlcnROb3JtYWxMb2FkSGFwcGVuZWQoVmVjdG9y
PExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRFdmVudHM+JiBldmVudHMpCi17Ci0gICAgZ19hc3NlcnRf
Y21waW50KGV2ZW50cy5zaXplKCksID09LCAzKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRz
WzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7Ci0gICAg
Z19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRDb21t
aXR0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBMb2FkVHJhY2tpbmdU
ZXN0OjpMb2FkRmluaXNoZWQpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0TG9hZEh0bWwoTG9hZFRy
YWNraW5nVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5sb2FkSHRtbCgi
PGh0bWw+PGJvZHk+SGVsbG8gV2ViS2l0LUdUSys8L2JvZHk+PC9odG1sPiIsIDApOwotICAgIHRl
c3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGFzc2VydE5vcm1hbExvYWRIYXBwZW5l
ZCh0ZXN0LT5tX2xvYWRFdmVudHMpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0TG9hZEFsdGVybmF0
ZUhUTUwoTG9hZFRyYWNraW5nVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0
LT5sb2FkQWx0ZXJuYXRlSFRNTCgiPGh0bWw+PGJvZHk+QWx0ZXJuYXRlIHBhZ2U8L2JvZHk+PC9o
dG1sPiIsICJodHRwOi8vZXJyb3ItcGFnZS5mb28vIiwgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGls
TG9hZEZpbmlzaGVkKCk7Ci0gICAgYXNzZXJ0Tm9ybWFsTG9hZEhhcHBlbmVkKHRlc3QtPm1fbG9h
ZEV2ZW50cyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RMb2FkUGxhaW5UZXh0KExvYWRUcmFja2lu
Z1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+bG9hZFBsYWluVGV4dCgi
SGVsbG8gV2ViS2l0LUdUSysiKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsK
LSAgICBhc3NlcnROb3JtYWxMb2FkSGFwcGVuZWQodGVzdC0+bV9sb2FkRXZlbnRzKTsKLX0KLQot
c3RhdGljIHZvaWQgdGVzdExvYWRSZXF1ZXN0KExvYWRUcmFja2luZ1Rlc3QqIHRlc3QsIGdjb25z
dHBvaW50ZXIpCi17Ci0gICAgR1JlZlB0cjxXZWJLaXRVUklSZXF1ZXN0PiByZXF1ZXN0KHdlYmtp
dF91cmlfcmVxdWVzdF9uZXcoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL25vcm1hbCIpLmRhdGEo
KSkpOwotICAgIHRlc3QtPmxvYWRSZXF1ZXN0KHJlcXVlc3QuZ2V0KCkpOwotICAgIHRlc3QtPndh
aXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGFzc2VydE5vcm1hbExvYWRIYXBwZW5lZCh0ZXN0
LT5tX2xvYWRFdmVudHMpOwotfQotCi1jbGFzcyBMb2FkU3RvcFRyYWNraW5nVGVzdCA6IHB1Ymxp
YyBMb2FkVHJhY2tpbmdUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJF
KExvYWRTdG9wVHJhY2tpbmdUZXN0KTsKLQotICAgIHZpcnR1YWwgdm9pZCBsb2FkQ29tbWl0dGVk
KCkKLSAgICB7Ci0gICAgICAgIExvYWRUcmFja2luZ1Rlc3Q6OmxvYWRDb21taXR0ZWQoKTsKLSAg
ICAgICAgd2Via2l0X3dlYl92aWV3X3N0b3BfbG9hZGluZyhtX3dlYlZpZXcpOwotICAgIH0KLSAg
ICB2aXJ0dWFsIHZvaWQgbG9hZEZhaWxlZChjb25zdCBnY2hhciogZmFpbGluZ1VSSSwgR0Vycm9y
KiBlcnJvcikKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0KGdfZXJyb3JfbWF0Y2hlcyhlcnJvciwg
V0VCS0lUX05FVFdPUktfRVJST1IsIFdFQktJVF9ORVRXT1JLX0VSUk9SX0NBTkNFTExFRCkpOwot
ICAgICAgICBMb2FkVHJhY2tpbmdUZXN0Ojpsb2FkRmFpbGVkKGZhaWxpbmdVUkksIGVycm9yKTsK
LSAgICB9Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0TG9hZENhbmNlbGxlZChMb2FkU3RvcFRyYWNr
aW5nVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2
ZXItPmdldFVSSUZvclBhdGgoIi9jYW5jZWxsZWQiKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRV
bnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgVmVjdG9yPExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRF
dmVudHM+JiBldmVudHMgPSB0ZXN0LT5tX2xvYWRFdmVudHM7Ci0gICAgZ19hc3NlcnRfY21waW50
KGV2ZW50cy5zaXplKCksID09LCA0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9
PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7Ci0gICAgZ19hc3Nl
cnRfY21waW50KGV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRDb21taXR0ZWQp
OwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpM
b2FkRmFpbGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzNdLCA9PSwgTG9hZFRyYWNr
aW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdUaXRs
ZShMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIGdfYXNzZXJ0
KCF3ZWJraXRfd2ViX3ZpZXdfZ2V0X3RpdGxlKHRlc3QtPm1fd2ViVmlldykpOwotICAgIHRlc3Qt
PmxvYWRIdG1sKCI8aHRtbD48aGVhZD48dGl0bGU+V2VsY29tZSB0byBXZWJLaXQtR1RLKyE8L3Rp
dGxlPjwvaGVhZD48L2h0bWw+IiwgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVk
KCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRfdGl0bGUodGVzdC0+
bV93ZWJWaWV3KSwgPT0sICJXZWxjb21lIHRvIFdlYktpdC1HVEsrISIpOwotfQotCi1zdGF0aWMg
dm9pZCB0ZXN0V2ViVmlld1JlbG9hZChMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0LCBnY29uc3Rwb2lu
dGVyKQotewotICAgIC8vIENoZWNrIHRoYXQgbm90aGluZyBoYXBwZW5zIHdoZW4gdGhlcmUncyBu
b3RoaW5nIHRvIHJlbG9hZC4KLSAgICB0ZXN0LT5yZWxvYWQoKTsKLSAgICB0ZXN0LT53YWl0KDAu
MjUpOyAvLyBXYWl0IGZvciBhIHF1YXJ0ZXIgb2YgYSBzZWNvbmQuCi0KLSAgICB0ZXN0LT5sb2Fk
VVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9ub3JtYWwiKS5kYXRhKCkpOwotICAgIHRlc3Qt
PndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGFzc2VydE5vcm1hbExvYWRIYXBwZW5lZCh0
ZXN0LT5tX2xvYWRFdmVudHMpOwotCi0gICAgdGVzdC0+cmVsb2FkKCk7Ci0gICAgdGVzdC0+d2Fp
dFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgYXNzZXJ0Tm9ybWFsTG9hZEhhcHBlbmVkKHRlc3Qt
Pm1fbG9hZEV2ZW50cyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RMb2FkUHJvZ3Jlc3MoTG9hZFRy
YWNraW5nVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5sb2FkVVJJKGtT
ZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9ub3JtYWwiKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRV
bnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHRlc3QtPm1fZXN0aW1h
dGVkUHJvZ3Jlc3MsID09LCAxKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdIaXN0b3J5
TG9hZChMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3Qt
PmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL25vcm1hbCIpLmRhdGEoKSk7Ci0gICAg
dGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgYXNzZXJ0Tm9ybWFsTG9hZEhhcHBl
bmVkKHRlc3QtPm1fbG9hZEV2ZW50cyk7Ci0KLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdl
dFVSSUZvclBhdGgoIi9ub3JtYWwyIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2Fk
RmluaXNoZWQoKTsKLSAgICBhc3NlcnROb3JtYWxMb2FkSGFwcGVuZWQodGVzdC0+bV9sb2FkRXZl
bnRzKTsKLQotICAgIC8vIENoZWNrIHRoYXQgbG9hZCBwcm9jZXNzIGlzIHRoZSBzYW1lIGZvciBw
YWdlcyBsb2FkZWQgZnJvbSBoaXN0b3J5IGNhY2hlLgotICAgIHRlc3QtPmdvQmFjaygpOwotICAg
IHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGFzc2VydE5vcm1hbExvYWRIYXBw
ZW5lZCh0ZXN0LT5tX2xvYWRFdmVudHMpOwotCi0gICAgdGVzdC0+Z29Gb3J3YXJkKCk7Ci0gICAg
dGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgYXNzZXJ0Tm9ybWFsTG9hZEhhcHBl
bmVkKHRlc3QtPm1fbG9hZEV2ZW50cyk7Ci19Ci0KLWNsYXNzIFZpZXdVUklUcmFja2luZ1Rlc3Q6
IHB1YmxpYyBMb2FkVHJhY2tpbmdUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9G
SVhUVVJFKFZpZXdVUklUcmFja2luZ1Rlc3QpOwotCi0gICAgc3RhdGljIHZvaWQgdXJpQ2hhbmdl
ZChHT2JqZWN0KiwgR1BhcmFtU3BlYyosIFZpZXdVUklUcmFja2luZ1Rlc3QqIHRlc3QpCi0gICAg
ewotICAgICAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9hY3RpdmVVUkkuZGF0YSgpLCAhPSwg
d2Via2l0X3dlYl92aWV3X2dldF91cmkodGVzdC0+bV93ZWJWaWV3KSk7Ci0gICAgICAgIHRlc3Qt
Pm1fYWN0aXZlVVJJID0gd2Via2l0X3dlYl92aWV3X2dldF91cmkodGVzdC0+bV93ZWJWaWV3KTsK
LSAgICB9Ci0KLSAgICBWaWV3VVJJVHJhY2tpbmdUZXN0KCkKLSAgICAgICAgOiBtX2FjdGl2ZVVS
SSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaShtX3dlYlZpZXcpKQotICAgIHsKLSAgICAgICAgZ19h
c3NlcnQobV9hY3RpdmVVUkkuaXNOdWxsKCkpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1f
d2ViVmlldywgIm5vdGlmeTo6dXJpIiwgR19DQUxMQkFDSyh1cmlDaGFuZ2VkKSwgdGhpcyk7Ci0g
ICAgfQotCi0gICAgdm9pZCBwcm92aXNpb25hbExvYWRTdGFydGVkKCkKLSAgICB7Ci0gICAgICAg
IGNoZWNrQWN0aXZlVVJJKCIvcmVkaXJlY3QiKTsKLSAgICB9Ci0KLSAgICB2b2lkIHByb3Zpc2lv
bmFsTG9hZFJlY2VpdmVkU2VydmVyUmVkaXJlY3QoKQotICAgIHsKLSAgICAgICAgY2hlY2tBY3Rp
dmVVUkkoIi9ub3JtYWwiKTsKLSAgICB9Ci0KLSAgICB2b2lkIGxvYWRDb21taXR0ZWQoKQotICAg
IHsKLSAgICAgICAgY2hlY2tBY3RpdmVVUkkoIi9ub3JtYWwiKTsKLSAgICB9Ci0KLSAgICB2b2lk
IGxvYWRGaW5pc2hlZCgpCi0gICAgewotICAgICAgICBjaGVja0FjdGl2ZVVSSSgiL25vcm1hbCIp
OwotICAgICAgICBMb2FkVHJhY2tpbmdUZXN0Ojpsb2FkRmluaXNoZWQoKTsKLSAgICB9Ci0KLSAg
ICBDU3RyaW5nIG1fYWN0aXZlVVJJOwotCi1wcml2YXRlOgotICAgIHZvaWQgY2hlY2tBY3RpdmVV
UkkoY29uc3QgY2hhciogdXJpKQotICAgIHsKLSAgICAgICAgQVNTRVJUX0NNUF9DU1RSSU5HKG1f
YWN0aXZlVVJJLCA9PSwga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCh1cmkpKTsKLSAgICB9Ci19Owot
Ci1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0FjdGl2ZVVSSShWaWV3VVJJVHJhY2tpbmdUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJ
Rm9yUGF0aCgiL3JlZGlyZWN0IikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmlu
aXNoZWQoKTsKLX0KLQotY2xhc3MgVmlld0lzTG9hZGluZ1Rlc3Q6IHB1YmxpYyBMb2FkVHJhY2tp
bmdUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFZpZXdJc0xvYWRp
bmdUZXN0KTsKLQotICAgIHN0YXRpYyB2b2lkIGlzTG9hZGluZ0NoYW5nZWQoR09iamVjdCosIEdQ
YXJhbVNwZWMqLCBWaWV3SXNMb2FkaW5nVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIGlmICh3
ZWJraXRfd2ViX3ZpZXdfaXNfbG9hZGluZyh0ZXN0LT5tX3dlYlZpZXcpKQotICAgICAgICAgICAg
dGVzdC0+YmVnaW5Mb2FkKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRlc3QtPmVuZExv
YWQoKTsKLSAgICB9Ci0KLSAgICBWaWV3SXNMb2FkaW5nVGVzdCgpCi0gICAgewotICAgICAgICBn
X3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgIm5vdGlmeTo6aXMtbG9hZGluZyIsIEdfQ0FMTEJB
Q0soaXNMb2FkaW5nQ2hhbmdlZCksIHRoaXMpOwotICAgIH0KLQotICAgIHZvaWQgYmVnaW5Mb2Fk
KCkKLSAgICB7Ci0gICAgICAgIC8vIE5ldyBsb2FkLCBsb2FkLXN0YXJ0ZWQgaGFzbid0IGJlZW4g
ZW1pdHRlZCB5ZXQuCi0gICAgICAgIGdfYXNzZXJ0KG1fbG9hZEV2ZW50cy5pc0VtcHR5KCkpOwot
ICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dldF91cmkobV93ZWJWaWV3
KSwgPT0sIG1fYWN0aXZlVVJJLmRhdGEoKSk7Ci0gICAgfQotCi0gICAgdm9pZCBlbmRMb2FkKCkK
LSAgICB7Ci0gICAgICAgIC8vIExvYWQgZmluaXNoLCBsb2FkLWZpbmlzaGVkIGFuZCBsb2FkLWZh
aWxlZCBoYXZlbid0IGJlZW4gZW1pdHRlZCB5ZXQuCi0gICAgICAgIGdfYXNzZXJ0KCFtX2xvYWRF
dmVudHMuaXNFbXB0eSgpKTsKLSAgICAgICAgZ19hc3NlcnQoIW1fbG9hZEV2ZW50cy5jb250YWlu
cyhMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpKTsKLSAgICAgICAgZ19hc3NlcnQoIW1f
bG9hZEV2ZW50cy5jb250YWlucyhMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmFpbGVkKSk7Ci0gICAg
fQotfTsKLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdJc0xvYWRpbmcoVmlld0lzTG9hZGluZ1Rl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5n
ZXRVUklGb3JQYXRoKCIvbm9ybWFsIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2Fk
RmluaXNoZWQoKTsKLQotICAgIHRlc3QtPnJlbG9hZCgpOwotICAgIHRlc3QtPndhaXRVbnRpbExv
YWRGaW5pc2hlZCgpOwotCi0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRo
KCIvZXJyb3IiKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwot
Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvbm9ybWFsIikuZGF0
YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICB0ZXN0LT5sb2Fk
VVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9ub3JtYWwyIikuZGF0YSgpKTsKLSAgICB0ZXN0
LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIHRlc3QtPmdvQmFjaygpOwotICAgIHRl
c3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgdGVzdC0+Z29Gb3J3YXJkKCk7Ci0g
ICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci19Ci0KLWNsYXNzIFdlYlBhZ2VVUklU
ZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJ
WFRVUkUoV2ViUGFnZVVSSVRlc3QpOwotCi0gICAgc3RhdGljIHZvaWQgd2ViUGFnZVVSSUNoYW5n
ZWRDYWxsYmFjayhHREJ1c0Nvbm5lY3Rpb24qLCBjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIGNv
bnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgR1ZhcmlhbnQqIHJlc3VsdCwgV2ViUGFnZVVSSVRlc3Qq
IHRlc3QpCi0gICAgewotICAgICAgICBjb25zdCBjaGFyKiB1cmk7Ci0gICAgICAgIGdfdmFyaWFu
dF9nZXQocmVzdWx0LCAiKCZzKSIsICZ1cmkpOwotICAgICAgICB0ZXN0LT5tX3dlYlBhZ2VVUklz
LmFwcGVuZCh1cmkpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHdlYlZpZXdVUklDaGFuZ2Vk
KEdPYmplY3QqLCBHUGFyYW1TcGVjKiwgV2ViUGFnZVVSSVRlc3QqIHRlc3QpCi0gICAgewotICAg
ICAgICB0ZXN0LT5tX3dlYlZpZXdVUklzLmFwcGVuZCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSh0
ZXN0LT5tX3dlYlZpZXcpKTsKLSAgICB9Ci0KLSAgICBXZWJQYWdlVVJJVGVzdCgpCi0gICAgewot
ICAgICAgICBHUmVmUHRyPEdEQnVzUHJveHk+IHByb3h5ID0gYWRvcHRHUmVmKGJ1cy0+Y3JlYXRl
UHJveHkoIm9yZy53ZWJraXQuZ3RrLldlYkV4dGVuc2lvblRlc3QiLAotICAgICAgICAgICAgIi9v
cmcvd2Via2l0L2d0ay9XZWJFeHRlbnNpb25UZXN0IiwgIm9yZy53ZWJraXQuZ3RrLldlYkV4dGVu
c2lvblRlc3QiLCBtX21haW5Mb29wKSk7Ci0gICAgICAgIG1fdXJpQ2hhbmdlZFNpZ25hbElEID0g
Z19kYnVzX2Nvbm5lY3Rpb25fc2lnbmFsX3N1YnNjcmliZSgKLSAgICAgICAgICAgIGdfZGJ1c19w
cm94eV9nZXRfY29ubmVjdGlvbihwcm94eS5nZXQoKSksCi0gICAgICAgICAgICAwLAotICAgICAg
ICAgICAgIm9yZy53ZWJraXQuZ3RrLldlYkV4dGVuc2lvblRlc3QiLAotICAgICAgICAgICAgIlVS
SUNoYW5nZWQiLAotICAgICAgICAgICAgIi9vcmcvd2Via2l0L2d0ay9XZWJFeHRlbnNpb25UZXN0
IiwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICBHX0RCVVNfU0lHTkFMX0ZMQUdTX05PTkUs
Ci0gICAgICAgICAgICByZWludGVycHJldF9jYXN0PEdEQnVzU2lnbmFsQ2FsbGJhY2s+KHdlYlBh
Z2VVUklDaGFuZ2VkQ2FsbGJhY2spLAotICAgICAgICAgICAgdGhpcywKLSAgICAgICAgICAgIDAp
OwotICAgICAgICBnX2Fzc2VydChtX3VyaUNoYW5nZWRTaWduYWxJRCk7Ci0KLSAgICAgICAgZ19z
aWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJub3RpZnk6OnVyaSIsIEdfQ0FMTEJBQ0sod2ViVmll
d1VSSUNoYW5nZWQpLCB0aGlzKTsKLSAgICB9Ci0KLSAgICB+V2ViUGFnZVVSSVRlc3QoKQotICAg
IHsKLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fd2ViVmll
dywgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7Ci0gICAgICAgIGdfZGJ1
c19jb25uZWN0aW9uX3NpZ25hbF91bnN1YnNjcmliZShidXMtPmNvbm5lY3Rpb24oKSwgbV91cmlD
aGFuZ2VkU2lnbmFsSUQpOwotICAgIH0KLQotICAgIHVuc2lnbmVkIG1fdXJpQ2hhbmdlZFNpZ25h
bElEOwotICAgIFZlY3RvcjxDU3RyaW5nPiBtX3dlYlBhZ2VVUklzOwotICAgIFZlY3RvcjxDU3Ry
aW5nPiBtX3dlYlZpZXdVUklzOwotfTsKLQotc3RhdGljIHZvaWQgdGVzdFdlYlBhZ2VVUkkoV2Vi
UGFnZVVSSVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+bG9hZFVSSShr
U2VydmVyLT5nZXRVUklGb3JQYXRoKCIvcmVkaXJlY3QiKS5kYXRhKCkpOwotICAgIHRlc3QtPndh
aXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fd2Vi
UGFnZVVSSXMuc2l6ZSgpLCA9PSwgdGVzdC0+bV93ZWJWaWV3VVJJcy5zaXplKCkpOwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgdGVzdC0+bV93ZWJQYWdlVVJJcy5zaXplKCk7ICsraSkKLSAg
ICAgICAgQVNTRVJUX0NNUF9DU1RSSU5HKHRlc3QtPm1fd2ViUGFnZVVSSXNbaV0sID09LCB0ZXN0
LT5tX3dlYlZpZXdVUklzW2ldKTsKLQotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX3dlYlBh
Z2VVUklzLnNpemUoKSwgPT0sIDIpOwotICAgIEFTU0VSVF9DTVBfQ1NUUklORyh0ZXN0LT5tX3dl
YlBhZ2VVUklzWzBdLCA9PSwga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3JlZGlyZWN0IikpOwot
ICAgIEFTU0VSVF9DTVBfQ1NUUklORyh0ZXN0LT5tX3dlYlBhZ2VVUklzWzFdLCA9PSwga1NlcnZl
ci0+Z2V0VVJJRm9yUGF0aCgiL25vcm1hbCIpKTsKLQotfQotCi1zdGF0aWMgdm9pZCB0ZXN0VVJJ
UmVxdWVzdEhUVFBIZWFkZXJzKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewot
ICAgIEdSZWZQdHI8V2ViS2l0VVJJUmVxdWVzdD4gdXJpUmVxdWVzdCA9IGFkb3B0R1JlZih3ZWJr
aXRfdXJpX3JlcXVlc3RfbmV3KCJmaWxlOi8vL2Zvby9iYXIiKSk7Ci0gICAgZ19hc3NlcnQodXJp
UmVxdWVzdC5nZXQoKSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF91cmlfcmVxdWVzdF9n
ZXRfdXJpKHVyaVJlcXVlc3QuZ2V0KCkpLCA9PSwgImZpbGU6Ly8vZm9vL2JhciIpOwotICAgIGdf
YXNzZXJ0KCF3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X2h0dHBfaGVhZGVycyh1cmlSZXF1ZXN0Lmdl
dCgpKSk7Ci0KLSAgICAvLyBMb2FkIGEgcmVxdWVzdCB3aXRoIG5vIERvIE5vdCBUcmFjayBoZWFk
ZXIuCi0gICAgd2Via2l0X3VyaV9yZXF1ZXN0X3NldF91cmkodXJpUmVxdWVzdC5nZXQoKSwga1Nl
cnZlci0+Z2V0VVJJRm9yUGF0aCgiL2RvLW5vdC10cmFjay1oZWFkZXIiKS5kYXRhKCkpOwotICAg
IHRlc3QtPmxvYWRSZXF1ZXN0KHVyaVJlcXVlc3QuZ2V0KCkpOwotICAgIHRlc3QtPndhaXRVbnRp
bExvYWRGaW5pc2hlZCgpOwotCi0gICAgc2l6ZV90IG1haW5SZXNvdXJjZURhdGFTaXplID0gMDsK
LSAgICBjb25zdCBjaGFyKiBtYWluUmVzb3VyY2VEYXRhID0gdGVzdC0+bWFpblJlc291cmNlRGF0
YShtYWluUmVzb3VyY2VEYXRhU2l6ZSk7Ci0gICAgZ19hc3NlcnRfY21waW50KG1haW5SZXNvdXJj
ZURhdGFTaXplLCA9PSwgc3RybGVuKGtETlRIZWFkZXJOb3RQcmVzZW50KSk7Ci0gICAgZ19hc3Nl
cnQoIXN0cm5jbXAobWFpblJlc291cmNlRGF0YSwga0ROVEhlYWRlck5vdFByZXNlbnQsIG1haW5S
ZXNvdXJjZURhdGFTaXplKSk7Ci0KLSAgICAvLyBBZGQgdGhlIERvIE5vdCBUcmFjayBoZWFkZXIg
YW5kIGxvYWQgdGhlIHJlcXVlc3QgYWdhaW4uCi0gICAgU291cE1lc3NhZ2VIZWFkZXJzKiBoZWFk
ZXJzID0gd2Via2l0X3VyaV9yZXF1ZXN0X2dldF9odHRwX2hlYWRlcnModXJpUmVxdWVzdC5nZXQo
KSk7Ci0gICAgZ19hc3NlcnQoaGVhZGVycyk7Ci0gICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBw
ZW5kKGhlYWRlcnMsICJETlQiLCAiMSIpOwotICAgIHRlc3QtPmxvYWRSZXF1ZXN0KHVyaVJlcXVl
c3QuZ2V0KCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgbWFp
blJlc291cmNlRGF0YSA9IHRlc3QtPm1haW5SZXNvdXJjZURhdGEobWFpblJlc291cmNlRGF0YVNp
emUpOwotICAgIGdfYXNzZXJ0X2NtcGludChtYWluUmVzb3VyY2VEYXRhU2l6ZSwgPT0sIDEpOwot
ICAgIGdfYXNzZXJ0KCFzdHJuY21wKG1haW5SZXNvdXJjZURhdGEsICIxIiwgbWFpblJlc291cmNl
RGF0YVNpemUpKTsKLQotICAgIC8vIExvYWQgYSBVUkkgZm9yIHdoaWNoIHRoZSB3ZWIgZXh0ZW5z
aW9uIHdpbGwgYWRkIHRoZSBEbyBOb3QgVHJhY2sgaGVhZGVyLgotICAgIHRlc3QtPmxvYWRVUkko
a1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2FkZC1kby1ub3QtdHJhY2staGVhZGVyIikuZGF0YSgp
KTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIG1haW5SZXNvdXJj
ZURhdGEgPSB0ZXN0LT5tYWluUmVzb3VyY2VEYXRhKG1haW5SZXNvdXJjZURhdGFTaXplKTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQobWFpblJlc291cmNlRGF0YVNpemUsID09LCAxKTsKLSAgICBnX2Fz
c2VydCghc3RybmNtcChtYWluUmVzb3VyY2VEYXRhLCAiMSIsIG1haW5SZXNvdXJjZURhdGFTaXpl
KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwg
U291cE1lc3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqLCBTb3Vw
Q2xpZW50Q29udGV4dCosIGdwb2ludGVyKQotewotICAgIHN0YXRpYyBjb25zdCBjaGFyKiByZXNw
b25zZVN0cmluZyA9ICI8aHRtbD48Ym9keT5UZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nISIKLSAgICAgICAgIlRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nISIKLSAgICAgICAgIlRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nISIKLSAgICAgICAgIlRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nISIKLSAgICAgICAgIlRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
ISIKLSAgICAgICAgIlRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nISIKLSAg
ICAgICAgIlRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nISIKLSAgICAgICAg
IlRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nITwvYm9keT48L2h0bWw+IjsK
LQotICAgIGlmIChtZXNzYWdlLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7Ci0gICAgICAg
IHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9JTVBMRU1F
TlRFRCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0
YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7Ci0KLSAgICBpZiAoZ19zdHJfaGFzX3ByZWZp
eChwYXRoLCAiL25vcm1hbCIpKQotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVz
c2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCByZXNwb25zZVN0cmluZywg
c3RybGVuKHJlc3BvbnNlU3RyaW5nKSk7Ci0gICAgZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwg
Ii9lcnJvciIpKQotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQ
X1NUQVRVU19DQU5UX0NPTk5FQ1QpOwotICAgIGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIv
cmVkaXJlY3QiKSkgewotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBT
T1VQX1NUQVRVU19NT1ZFRF9QRVJNQU5FTlRMWSk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9oZWFk
ZXJzX2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiTG9jYXRpb24iLCAiL25vcm1h
bCIpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9jYW5jZWxsZWQiKSkgewot
ICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19zZXRfZW5jb2RpbmcobWVzc2FnZS0+cmVzcG9u
c2VfaGVhZGVycywgU09VUF9FTkNPRElOR19DSFVOS0VEKTsKLSAgICAgICAgc291cF9tZXNzYWdl
X2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywg
cmVzcG9uc2VTdHJpbmcsIHN0cmxlbihyZXNwb25zZVN0cmluZykpOwotICAgICAgICBzb3VwX3Nl
cnZlcl91bnBhdXNlX21lc3NhZ2Uoc2VydmVyLCBtZXNzYWdlKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9kby1ub3QtdHJhY2staGVhZGVyIikg
fHwgZ19zdHJfZXF1YWwocGF0aCwgIi9hZGQtZG8tbm90LXRyYWNrLWhlYWRlciIpKSB7Ci0gICAg
ICAgIGNvbnN0IGNoYXIqIGRvTm90VHJhY2sgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfb25l
KG1lc3NhZ2UtPnJlcXVlc3RfaGVhZGVycywgIkROVCIpOwotICAgICAgICBpZiAoZG9Ob3RUcmFj
aykKLSAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25z
ZV9ib2R5LCBTT1VQX01FTU9SWV9DT1BZLCBkb05vdFRyYWNrLCBzdHJsZW4oZG9Ob3RUcmFjaykp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVz
c2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBrRE5USGVhZGVyTm90UHJl
c2VudCwgc3RybGVuKGtETlRIZWFkZXJOb3RQcmVzZW50KSk7Ci0gICAgICAgIHNvdXBfbWVzc2Fn
ZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0ZPVU5E
KTsKLQotICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2Jv
ZHkpOwotfQotCi12b2lkIGJlZm9yZUFsbCgpCi17Ci0gICAgd2Via2l0X3dlYl9jb250ZXh0X3Nl
dF93ZWJfZXh0ZW5zaW9uc19kaXJlY3Rvcnkod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0
KCksIFdFQktJVF9URVNUX1dFQl9FWFRFTlNJT05TX0RJUik7Ci0gICAgYnVzID0gbmV3IFdlYktp
dFRlc3RCdXMoKTsKLSAgICBpZiAoIWJ1cy0+cnVuKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGtTZXJ2ZXIgPSBuZXcgV2ViS2l0VGVzdFNlcnZlcigpOwotICAgIGtTZXJ2ZXItPnJ1bihzZXJ2
ZXJDYWxsYmFjayk7Ci0KLSAgICBMb2FkVHJhY2tpbmdUZXN0OjphZGQoIldlYktpdFdlYlZpZXci
LCAibG9hZGluZy1zdGF0dXMiLCB0ZXN0TG9hZGluZ1N0YXR1cyk7Ci0gICAgTG9hZFRyYWNraW5n
VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImxvYWRpbmctZXJyb3IiLCB0ZXN0TG9hZGluZ0Vy
cm9yKTsKLSAgICBMb2FkVHJhY2tpbmdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAibG9hZC1o
dG1sIiwgdGVzdExvYWRIdG1sKTsKLSAgICBMb2FkVHJhY2tpbmdUZXN0OjphZGQoIldlYktpdFdl
YlZpZXciLCAibG9hZC1hbHRlcm5hdGUtaHRtbCIsIHRlc3RMb2FkQWx0ZXJuYXRlSFRNTCk7Ci0g
ICAgTG9hZFRyYWNraW5nVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImxvYWQtcGxhaW4tdGV4
dCIsIHRlc3RMb2FkUGxhaW5UZXh0KTsKLSAgICBMb2FkVHJhY2tpbmdUZXN0OjphZGQoIldlYktp
dFdlYlZpZXciLCAibG9hZC1yZXF1ZXN0IiwgdGVzdExvYWRSZXF1ZXN0KTsKLSAgICBMb2FkU3Rv
cFRyYWNraW5nVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInN0b3AtbG9hZGluZyIsIHRlc3RM
b2FkQ2FuY2VsbGVkKTsKLSAgICBMb2FkVHJhY2tpbmdUZXN0OjphZGQoIldlYktpdFdlYlZpZXci
LCAidGl0bGUiLCB0ZXN0V2ViVmlld1RpdGxlKTsKLSAgICBMb2FkVHJhY2tpbmdUZXN0OjphZGQo
IldlYktpdFdlYlZpZXciLCAicHJvZ3Jlc3MiLCB0ZXN0TG9hZFByb2dyZXNzKTsKLSAgICBMb2Fk
VHJhY2tpbmdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAicmVsb2FkIiwgdGVzdFdlYlZpZXdS
ZWxvYWQpOwotICAgIExvYWRUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJoaXN0
b3J5LWxvYWQiLCB0ZXN0V2ViVmlld0hpc3RvcnlMb2FkKTsKLQotICAgIC8vIFRoaXMgdGVzdCBj
aGVja3MgdGhhdCB3ZWIgdmlldyBub3RpZnk6OnVyaSBzaWduYWwgaXMgY29ycmVjdGx5IGVtaXR0
ZWQKLSAgICAvLyBhbmQgdGhlIHVyaSBpcyBhbHJlYWR5IHVwZGF0ZWQgd2hlbiBsb2FkZXIgY2xp
ZW50IHNpZ25hbHMgYXJlIGVtaXR0ZWQuCi0gICAgVmlld1VSSVRyYWNraW5nVGVzdDo6YWRkKCJX
ZWJLaXRXZWJWaWV3IiwgImFjdGl2ZS11cmkiLCB0ZXN0V2ViVmlld0FjdGl2ZVVSSSk7Ci0KLSAg
ICBWaWV3SXNMb2FkaW5nVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImlzLWxvYWRpbmciLCB0
ZXN0V2ViVmlld0lzTG9hZGluZyk7Ci0gICAgV2ViUGFnZVVSSVRlc3Q6OmFkZCgiV2ViS2l0V2Vi
UGFnZSIsICJnZXQtdXJpIiwgdGVzdFdlYlBhZ2VVUkkpOwotICAgIFdlYlZpZXdUZXN0OjphZGQo
IldlYktpdFVSSVJlcXVlc3QiLCAiaHR0cC1oZWFkZXJzIiwgdGVzdFVSSVJlcXVlc3RIVFRQSGVh
ZGVycyk7Ci19Ci0KLXZvaWQgYWZ0ZXJBbGwoKQotewotICAgIGRlbGV0ZSBidXM7Ci0gICAgZGVs
ZXRlIGtTZXJ2ZXI7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9UZXN0TWFpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9UZXN0TWFpbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3ODE5
Y2ZkYzhkZjNmYTJkNDBlM2ZiMTRhOWQyYjUyMGJjZThiNDAuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvVGVzdE1haW4uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgot
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiVGVzdE1haW4uaCIKLQotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0jaW5jbHVk
ZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgotI2luY2x1ZGUgPHd0
Zi9nb2JqZWN0L0dPd25QdHIuaD4KLQotdm9pZCBiZWZvcmVBbGwoKTsKLXZvaWQgYWZ0ZXJBbGwo
KTsKLQotc3RhdGljIHZvaWQgcmVnaXN0ZXJHUmVzb3VyY2Uodm9pZCkKLXsKLSAgICBHT3duUHRy
PGNoYXI+IHJlc291cmNlc1BhdGgoZ19idWlsZF9maWxlbmFtZShXRUJLSVRfRVhFQ19QQVRILCAi
cmVzb3VyY2VzIiwgIndlYmtpdDJndGstdGVzdHMtcmVzb3VyY2VzLmdyZXNvdXJjZSIsIE5VTEwp
KTsKLSAgICBHUmVzb3VyY2UqIHJlc291cmNlID0gZ19yZXNvdXJjZV9sb2FkKHJlc291cmNlc1Bh
dGguZ2V0KCksIDApOwotICAgIGdfYXNzZXJ0KHJlc291cmNlKTsKLQotICAgIGdfcmVzb3VyY2Vz
X3JlZ2lzdGVyKHJlc291cmNlKTsKLSAgICBnX3Jlc291cmNlX3VucmVmKHJlc291cmNlKTsKLX0K
LQotc3RhdGljIHZvaWQgcmVtb3ZlTm9uRW1wdHlEaXJlY3RvcnkoY29uc3QgY2hhciogZGlyZWN0
b3J5UGF0aCkKLXsKLSAgICBHRGlyKiBkaXJlY3RvcnkgPSBnX2Rpcl9vcGVuKGRpcmVjdG9yeVBh
dGgsIDAsIDApOwotICAgIGdfYXNzZXJ0KGRpcmVjdG9yeSk7Ci0gICAgY29uc3QgY2hhciogZmls
ZU5hbWU7Ci0gICAgd2hpbGUgKChmaWxlTmFtZSA9IGdfZGlyX3JlYWRfbmFtZShkaXJlY3Rvcnkp
KSkgewotICAgICAgICBHT3duUHRyPGNoYXI+IGZpbGVQYXRoKGdfYnVpbGRfZmlsZW5hbWUoZGly
ZWN0b3J5UGF0aCwgZmlsZU5hbWUsIE5VTEwpKTsKLSAgICAgICAgZ191bmxpbmsoZmlsZVBhdGgu
Z2V0KCkpOwotICAgIH0KLSAgICBnX2Rpcl9jbG9zZShkaXJlY3RvcnkpOwotICAgIGdfcm1kaXIo
ZGlyZWN0b3J5UGF0aCk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKLXsK
LSAgICBnX3Vuc2V0ZW52KCJEQlVTX1NFU1NJT05fQlVTX0FERFJFU1MiKTsKLSAgICBndGtfdGVz
dF9pbml0KCZhcmdjLCAmYXJndiwgMCk7Ci0gICAgZ19zZXRlbnYoIldFQktJVF9FWEVDX1BBVEgi
LCBXRUJLSVRfRVhFQ19QQVRILCBGQUxTRSk7Ci0gICAgZ19zZXRlbnYoIldFQktJVF9JTkpFQ1RF
RF9CVU5ETEVfUEFUSCIsIFdFQktJVF9JTkpFQ1RFRF9CVU5ETEVfUEFUSCwgRkFMU0UpOwotICAg
IGdfc2V0ZW52KCJMQ19BTEwiLCAiQyIsIFRSVUUpOwotICAgIGdfc2V0ZW52KCJHSU9fVVNFX1ZG
UyIsICJsb2NhbCIsIFRSVUUpOwotICAgIGdfc2V0ZW52KCJHU0VUVElOR1NfQkFDS0VORCIsICJt
ZW1vcnkiLCBUUlVFKTsKLSAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQu
b3JnLyIpOwotCi0gICAgcmVnaXN0ZXJHUmVzb3VyY2UoKTsKLQotICAgIEdPd25QdHI8Y2hhcj4g
ZGlza0NhY2hlVGVtcERpcmVjdG9yeShnX2Rpcl9tYWtlX3RtcCgiV2ViS2l0MlRlc3RzRGlza0Nh
Y2hlLVhYWFhYWCIsIDApKTsKLSAgICBnX2Fzc2VydChkaXNrQ2FjaGVUZW1wRGlyZWN0b3J5Lmdl
dCgpKTsKLSAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X2Rpc2tfY2FjaGVfZGlyZWN0b3J5KHdl
YmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpLCBkaXNrQ2FjaGVUZW1wRGlyZWN0b3J5Lmdl
dCgpKTsKLQotICAgIGJlZm9yZUFsbCgpOwotICAgIGludCByZXR1cm5WYWx1ZSA9IGdfdGVzdF9y
dW4oKTsKLSAgICBhZnRlckFsbCgpOwotCi0gICAgcmVtb3ZlTm9uRW1wdHlEaXJlY3RvcnkoZGlz
a0NhY2hlVGVtcERpcmVjdG9yeS5nZXQoKSk7Ci0KLSAgICByZXR1cm4gcmV0dXJuVmFsdWU7Ci19
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0
TWFpbi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdE1haW4u
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJjOTA3MDljNDNhOWFlNjU2ZTljYjk1
NDQ3ZjhmOTI4NDhkM2M4Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0TWFpbi5o
CisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBUZXN0TWFpbl9oCi0jZGVmaW5lIFRlc3RNYWluX2gKLQot
I2luY2x1ZGUgPGNhaXJvLmg+Ci0jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KLSNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNkZWZpbmUgTUFLRV9HTElCX1RFU1RfRklYVFVSRShD
bGFzc05hbWUpIFwKLSAgICBzdGF0aWMgdm9pZCBzZXRVcChDbGFzc05hbWUqIGZpeHR1cmUsIGdj
b25zdHBvaW50ZXIgZGF0YSkgXAotICAgIHsgXAotICAgICAgICBuZXcgKGZpeHR1cmUpIENsYXNz
TmFtZTsgXAotICAgIH0gXAotICAgIHN0YXRpYyB2b2lkIHRlYXJEb3duKENsYXNzTmFtZSogZml4
dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKSBcCi0gICAgeyBcCi0gICAgICAgIGZpeHR1cmUtPn5D
bGFzc05hbWUoKTsgXAotICAgIH0gXAotICAgIHN0YXRpYyB2b2lkIGFkZChjb25zdCBjaGFyKiBz
dWl0ZU5hbWUsIGNvbnN0IGNoYXIqIHRlc3ROYW1lLCB2b2lkICgqdGVzdEZ1bmMpKENsYXNzTmFt
ZSosIGNvbnN0IHZvaWQqKSkgXAotICAgIHsgXAotICAgICAgICBHT3duUHRyPGdjaGFyPiB0ZXN0
UGF0aChnX3N0cmR1cF9wcmludGYoIi93ZWJraXQyLyVzLyVzIiwgc3VpdGVOYW1lLCB0ZXN0TmFt
ZSkpOyBcCi0gICAgICAgIGdfdGVzdF9hZGQodGVzdFBhdGguZ2V0KCksIENsYXNzTmFtZSwgMCwg
Q2xhc3NOYW1lOjpzZXRVcCwgdGVzdEZ1bmMsIENsYXNzTmFtZTo6dGVhckRvd24pOyBcCi0gICAg
fQotCi0jZGVmaW5lIEFTU0VSVF9DTVBfQ1NUUklORyhzMSwgY21wLCBzMikgXAotICAgIGRvIHsg
Q1N0cmluZyBfX3MxID0gKHMxKTsgQ1N0cmluZyBfX3MyID0gKHMyKTsgXAotICAgICAgICBpZiAo
Z19zdHJjbXAwKF9fczEuZGF0YSgpLCBfX3MyLmRhdGEoKSkgY21wIDApIDsgZWxzZSBcCi0gICAg
ICAgICAgICBnX2Fzc2VydGlvbl9tZXNzYWdlX2NtcHN0cihHX0xPR19ET01BSU4sIF9fRklMRV9f
LCBfX0xJTkVfXywgR19TVFJGVU5DLCBcCi0gICAgICAgICAgICAgICAgI3MxICIgIiAjY21wICIg
IiAjczIsIF9fczEuZGF0YSgpLCAjY21wLCBfX3MyLmRhdGEoKSk7IH0gd2hpbGUgKDApCi0KLWNs
YXNzIFRlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoVGVzdCk7Ci0K
LSAgICB+VGVzdCgpCi0gICAgewotICAgICAgICBpZiAobV93YXRjaGVkT2JqZWN0cy5pc0VtcHR5
KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgZ19wcmludCgiTGVha2VkIG9iamVj
dHM6Iik7Ci0gICAgICAgIEhhc2hTZXQ8R09iamVjdCo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBt
X3dhdGNoZWRPYmplY3RzLmVuZCgpOwotICAgICAgICBmb3IgKEhhc2hTZXQ8R09iamVjdCo+Ojpj
b25zdF9pdGVyYXRvciBpdCA9IG1fd2F0Y2hlZE9iamVjdHMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICAgICAgZ19wcmludCgiICVzKCVwKSIsIGdfdHlwZV9uYW1lX2Zyb21faW5z
dGFuY2UocmVpbnRlcnByZXRfY2FzdDxHVHlwZUluc3RhbmNlKj4oKml0KSksICppdCk7Ci0gICAg
ICAgIGdfcHJpbnQoIlxuIik7Ci0KLSAgICAgICAgZ19hc3NlcnQobV93YXRjaGVkT2JqZWN0cy5p
c0VtcHR5KCkpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIG9iamVjdEZpbmFsaXplZChUZXN0
KiB0ZXN0LCBHT2JqZWN0KiBmaW5hbGl6ZWRPYmplY3QpCi0gICAgewotICAgICAgICB0ZXN0LT5t
X3dhdGNoZWRPYmplY3RzLnJlbW92ZShmaW5hbGl6ZWRPYmplY3QpOwotICAgIH0KLQotICAgIHZv
aWQgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHT2JqZWN0KiBvYmplY3Qp
Ci0gICAgewotICAgICAgICBtX3dhdGNoZWRPYmplY3RzLmFkZChvYmplY3QpOwotICAgICAgICBn
X29iamVjdF93ZWFrX3JlZihvYmplY3QsIHJlaW50ZXJwcmV0X2Nhc3Q8R1dlYWtOb3RpZnk+KG9i
amVjdEZpbmFsaXplZCksIHRoaXMpOwotICAgIH0KLQotICAgIHN0YXRpYyBDU3RyaW5nIGdldFdl
YktpdDFUZXN0UmVzb3VjZXNEaXIoKQotICAgIHsKLSAgICAgICAgR093blB0cjxjaGFyPiByZXNv
dXJjZXNEaXIoZ19idWlsZF9maWxlbmFtZShXRUJLSVRfU1JDX0RJUiwgIlNvdXJjZSIsICJXZWJL
aXQiLCAiZ3RrIiwgInRlc3RzIiwgInJlc291cmNlcyIsIE5VTEwpKTsKLSAgICAgICAgcmV0dXJu
IHJlc291cmNlc0Rpci5nZXQoKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgQ1N0cmluZyBnZXRSZXNv
dXJjZXNEaXIoKQotICAgIHsKLSAgICAgICAgR093blB0cjxjaGFyPiByZXNvdXJjZXNEaXIoZ19i
dWlsZF9maWxlbmFtZShXRUJLSVRfU1JDX0RJUiwgIlNvdXJjZSIsICJXZWJLaXQyIiwgIlVJUHJv
Y2VzcyIsICJBUEkiLCAiZ3RrIiwgInRlc3RzIiwgInJlc291cmNlcyIsIE5VTEwpKTsKLSAgICAg
ICAgcmV0dXJuIHJlc291cmNlc0Rpci5nZXQoKTsKLSAgICB9Ci0KLSAgICB2b2lkIGFkZExvZ0Zh
dGFsRmxhZyh1bnNpZ25lZCBmbGFnKQotICAgIHsKLSAgICAgICAgdW5zaWduZWQgZmF0YWxNYXNr
ID0gZ19sb2dfc2V0X2Fsd2F5c19mYXRhbChzdGF0aWNfY2FzdDxHTG9nTGV2ZWxGbGFncz4oR19M
T0dfRkFUQUxfTUFTSykpOwotICAgICAgICBmYXRhbE1hc2sgfD0gZmxhZzsKLSAgICAgICAgZ19s
b2dfc2V0X2Fsd2F5c19mYXRhbChzdGF0aWNfY2FzdDxHTG9nTGV2ZWxGbGFncz4oZmF0YWxNYXNr
KSk7Ci0gICAgfQotCi0gICAgdm9pZCByZW1vdmVMb2dGYXRhbEZsYWcodW5zaWduZWQgZmxhZykK
LSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGZhdGFsTWFzayA9IGdfbG9nX3NldF9hbHdheXNfZmF0
YWwoc3RhdGljX2Nhc3Q8R0xvZ0xldmVsRmxhZ3M+KEdfTE9HX0ZBVEFMX01BU0spKTsKLSAgICAg
ICAgZmF0YWxNYXNrICY9IH5mbGFnOwotICAgICAgICBnX2xvZ19zZXRfYWx3YXlzX2ZhdGFsKHN0
YXRpY19jYXN0PEdMb2dMZXZlbEZsYWdzPihmYXRhbE1hc2spKTsKLSAgICB9Ci0KLSAgICBzdGF0
aWMgYm9vbCBjYWlyb1N1cmZhY2VzRXF1YWwoY2Fpcm9fc3VyZmFjZV90KiBzMSwgY2Fpcm9fc3Vy
ZmFjZV90KiBzMikKLSAgICB7Ci0gICAgICAgIHJldHVybiAoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfZm9ybWF0KHMxKSA9PSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9mb3JtYXQoczIpCi0gICAg
ICAgICAgICAmJiBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChzMSkgPT0gY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9nZXRfd2lkdGgoczIpCi0gICAgICAgICAgICAmJiBjYWlyb19pbWFnZV9zdXJm
YWNlX2dldF9oZWlnaHQoczEpID09IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzMikK
LSAgICAgICAgICAgICYmIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShzMSkgPT0gY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKHMyKQotICAgICAgICAgICAgJiYgIW1lbWNtcChj
b25zdF9jYXN0PGNvbnN0IHZvaWQqPihyZWludGVycHJldF9jYXN0PHZvaWQqPihjYWlyb19pbWFn
ZV9zdXJmYWNlX2dldF9kYXRhKHMxKSkpLAotICAgICAgICAgICAgICAgIGNvbnN0X2Nhc3Q8Y29u
c3Qgdm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0
X2RhdGEoczIpKSksCi0gICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVp
Z2h0KHMxKSpjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoczEpKSk7Ci0gICAgfQotCi0g
ICAgSGFzaFNldDxHT2JqZWN0Kj4gbV93YXRjaGVkT2JqZWN0czsKLX07Ci0KLSNlbmRpZiAvLyBU
ZXN0TWFpbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9UZXN0UHJpbnRpbmcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvVGVzdFByaW50aW5nLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzJj
MmNmYmJkYzI2NDk0MzYwNzkyNmQzNDBiZTc5MDk1NDAyZTI0ZS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9UZXN0UHJpbnRpbmcuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjA5ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+
Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgotCi0jaWZkZWYgSEFWRV9HVEtfVU5J
WF9QUklOVElORwotI2luY2x1ZGUgPGd0ay9ndGt1bml4cHJpbnQuaD4KLSNlbmRpZgotCi1zdGF0
aWMgY2hhcioga1RlbXBEaXJlY3Rvcnk7Ci0KLXN0YXRpYyB2b2lkIHRlc3RQcmludE9wZXJhdGlv
blByaW50U2V0dGluZ3MoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAg
R1JlZlB0cjxXZWJLaXRQcmludE9wZXJhdGlvbj4gcHJpbnRPcGVyYXRpb24gPSBhZG9wdEdSZWYo
d2Via2l0X3ByaW50X29wZXJhdGlvbl9uZXcodGVzdC0+bV93ZWJWaWV3KSk7Ci0gICAgdGVzdC0+
YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChwcmludE9wZXJh
dGlvbi5nZXQoKSkpOwotCi0gICAgZ19hc3NlcnQoIXdlYmtpdF9wcmludF9vcGVyYXRpb25fZ2V0
X3ByaW50X3NldHRpbmdzKHByaW50T3BlcmF0aW9uLmdldCgpKSk7Ci0gICAgZ19hc3NlcnQoIXdl
YmtpdF9wcmludF9vcGVyYXRpb25fZ2V0X3BhZ2Vfc2V0dXAocHJpbnRPcGVyYXRpb24uZ2V0KCkp
KTsKLQotICAgIEdSZWZQdHI8R3RrUHJpbnRTZXR0aW5ncz4gcHJpbnRTZXR0aW5ncyA9IGFkb3B0
R1JlZihndGtfcHJpbnRfc2V0dGluZ3NfbmV3KCkpOwotICAgIHRlc3QtPmFzc2VydE9iamVjdElz
RGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QocHJpbnRTZXR0aW5ncy5nZXQoKSkpOwot
Ci0gICAgR1JlZlB0cjxHdGtQYWdlU2V0dXA+IHBhZ2VTZXR1cCA9IGFkb3B0R1JlZihndGtfcGFn
ZV9zZXR1cF9uZXcoKSk7Ci0gICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RG
aW5pc2hlcyhHX09CSkVDVChwYWdlU2V0dXAuZ2V0KCkpKTsKLQotICAgIHdlYmtpdF9wcmludF9v
cGVyYXRpb25fc2V0X3ByaW50X3NldHRpbmdzKHByaW50T3BlcmF0aW9uLmdldCgpLCBwcmludFNl
dHRpbmdzLmdldCgpKTsKLSAgICB3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX3NldF9wYWdlX3NldHVw
KHByaW50T3BlcmF0aW9uLmdldCgpLCBwYWdlU2V0dXAuZ2V0KCkpOwotCi0gICAgZ19hc3NlcnQo
d2Via2l0X3ByaW50X29wZXJhdGlvbl9nZXRfcHJpbnRfc2V0dGluZ3MocHJpbnRPcGVyYXRpb24u
Z2V0KCkpID09IHByaW50U2V0dGluZ3MuZ2V0KCkpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9wcmlu
dF9vcGVyYXRpb25fZ2V0X3BhZ2Vfc2V0dXAocHJpbnRPcGVyYXRpb24uZ2V0KCkpID09IHBhZ2VT
ZXR1cC5nZXQoKSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3UHJpbnRDYWxsYmFjayhX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRQcmludE9wZXJhdGlvbiogcHJpbnRPcGVyYXRp
b24sIFdlYlZpZXdUZXN0KiB0ZXN0KQotewotICAgIGdfYXNzZXJ0KHdlYlZpZXcgPT0gdGVzdC0+
bV93ZWJWaWV3KTsKLQotICAgIGdfYXNzZXJ0KFdFQktJVF9JU19QUklOVF9PUEVSQVRJT04ocHJp
bnRPcGVyYXRpb24pKTsKLSAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZp
bmlzaGVzKEdfT0JKRUNUKHByaW50T3BlcmF0aW9uKSk7Ci0KLSAgICBnX2Fzc2VydCghd2Via2l0
X3ByaW50X29wZXJhdGlvbl9nZXRfcHJpbnRfc2V0dGluZ3MocHJpbnRPcGVyYXRpb24pKTsKLSAg
ICBnX2Fzc2VydCghd2Via2l0X3ByaW50X29wZXJhdGlvbl9nZXRfcGFnZV9zZXR1cChwcmludE9w
ZXJhdGlvbikpOwotCi0gICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKLQot
ICAgIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1ByaW50KFdlYlZp
ZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIGdfc2lnbmFsX2Nvbm5lY3QodGVz
dC0+bV93ZWJWaWV3LCAicHJpbnQiLCBHX0NBTExCQUNLKHdlYlZpZXdQcmludENhbGxiYWNrKSwg
dGVzdCk7Ci0gICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxib2R5IG9uTG9hZD1cInByaW50KCk7
XCI+V2ViS2l0R1RLKyBwcmludGluZyB0ZXN0PC9ib2R5PjwvaHRtbD4iLCAwKTsKLSAgICBnX21h
aW5fbG9vcF9ydW4odGVzdC0+bV9tYWluTG9vcCk7Ci19Ci0KLSNpZmRlZiBIQVZFX0dUS19VTklY
X1BSSU5USU5HCi1jbGFzcyBQcmludFRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7Ci1wdWJsaWM6
Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShQcmludFRlc3QpOwotCi0gICAgc3RhdGljIHZv
aWQgcHJpbnRGaW5pc2hlZENhbGxiYWNrKFdlYktpdFByaW50T3BlcmF0aW9uKiwgUHJpbnRUZXN0
KiB0ZXN0KQotICAgIHsKLSAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29w
KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBwcmludEZhaWxlZENhbGxiYWNrKFdlYktpdFBy
aW50T3BlcmF0aW9uKiwgR0Vycm9yKiBlcnJvciwgUHJpbnRUZXN0KiB0ZXN0KQotICAgIHsKLSAg
ICAgICAgZ19hc3NlcnQodGVzdC0+bV9leHBlY3RlZEVycm9yKTsKLSAgICAgICAgZ19hc3NlcnQo
ZXJyb3IpOwotICAgICAgICBnX2Fzc2VydChnX2Vycm9yX21hdGNoZXMoZXJyb3IsIFdFQktJVF9Q
UklOVF9FUlJPUiwgdGVzdC0+bV9leHBlY3RlZEVycm9yKSk7Ci0gICAgfQotCi0gICAgUHJpbnRU
ZXN0KCkKLSAgICAgICAgOiBtX2V4cGVjdGVkRXJyb3IoMCkKLSAgICB7Ci0gICAgICAgIG1fcHJp
bnRPcGVyYXRpb24gPSBhZG9wdEdSZWYod2Via2l0X3ByaW50X29wZXJhdGlvbl9uZXcobV93ZWJW
aWV3KSk7Ci0gICAgICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19P
QkpFQ1QobV9wcmludE9wZXJhdGlvbi5nZXQoKSkpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0
KG1fcHJpbnRPcGVyYXRpb24uZ2V0KCksICJmaW5pc2hlZCIsIEdfQ0FMTEJBQ0socHJpbnRGaW5p
c2hlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9wcmludE9w
ZXJhdGlvbi5nZXQoKSwgImZhaWxlZCIsIEdfQ0FMTEJBQ0socHJpbnRGYWlsZWRDYWxsYmFjayks
IHRoaXMpOwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiB0ZXN0UHJpbnRPcGVyYXRpb25Q
cmludFByaW50ZXIoR3RrUHJpbnRlciogcHJpbnRlciwgZ3BvaW50ZXIgdXNlckRhdGEpCi0gICAg
ewotICAgICAgICBpZiAoc3RyY21wKGd0a19wcmludGVyX2dldF9uYW1lKHByaW50ZXIpLCAiUHJp
bnQgdG8gRmlsZSIpKQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwotCi0gICAgICAgIEd0a1By
aW50ZXIqKiBmb3VuZFByaW50ZXIgPSBzdGF0aWNfY2FzdDxHdGtQcmludGVyKio+KHVzZXJEYXRh
KTsKLSAgICAgICAgKmZvdW5kUHJpbnRlciA9IHN0YXRpY19jYXN0PEd0a1ByaW50ZXIqPihnX29i
amVjdF9yZWYocHJpbnRlcikpOwotICAgICAgICByZXR1cm4gVFJVRTsKLSAgICB9Ci0KLSAgICBH
dGtQcmludGVyKiBmaW5kUHJpbnRUb0ZpbGVQcmludGVyKCkKLSAgICB7Ci0gICAgICAgIEd0a1By
aW50ZXIqIHByaW50ZXIgPSAwOwotICAgICAgICBndGtfZW51bWVyYXRlX3ByaW50ZXJzKHRlc3RQ
cmludE9wZXJhdGlvblByaW50UHJpbnRlciwgJnByaW50ZXIsIDAsIFRSVUUpOwotICAgICAgICBy
ZXR1cm4gcHJpbnRlcjsKLSAgICB9Ci0KLSAgICB2b2lkIHdhaXRVbnRpbFByaW50RmluaXNoZWQo
KQotICAgIHsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotICAgIH0KLQot
ICAgIEdSZWZQdHI8V2ViS2l0UHJpbnRPcGVyYXRpb24+IG1fcHJpbnRPcGVyYXRpb247Ci0gICAg
dW5zaWduZWQgaW50IG1fZXhwZWN0ZWRFcnJvcjsKLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RQcmlu
dE9wZXJhdGlvblByaW50KFByaW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0
ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHk+V2ViS2l0R1RLKyBwcmludGluZyB0ZXN0PC9ib2R5
PjwvaHRtbD4iLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAg
IEdSZWZQdHI8R3RrUHJpbnRlcj4gcHJpbnRlciA9IGFkb3B0R1JlZih0ZXN0LT5maW5kUHJpbnRU
b0ZpbGVQcmludGVyKCkpOwotICAgIGlmICghcHJpbnRlcikgewotICAgICAgICBnX21lc3NhZ2Uo
IiVzIiwgIkNhbm5vdCB0ZXN0IFdlYktpdFByaW50T3BlcmF0aW9uL3ByaW50OiBubyBzdWl0YWJs
ZSBwcmludGVyIGZvdW5kIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBHT3duUHRy
PGNoYXI+IG91dHB1dEZpbGVuYW1lKGdfYnVpbGRfZmlsZW5hbWUoa1RlbXBEaXJlY3RvcnksICJ3
ZWJraXQtcHJpbnQucGRmIiwgTlVMTCkpOwotICAgIEdSZWZQdHI8R0ZpbGU+IG91dHB1dEZpbGUg
PSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0aChvdXRwdXRGaWxlbmFtZS5nZXQoKSkpOwot
ICAgIEdPd25QdHI8Y2hhcj4gb3V0cHV0VVJJKGdfZmlsZV9nZXRfdXJpKG91dHB1dEZpbGUuZ2V0
KCkpKTsKLQotICAgIEdSZWZQdHI8R3RrUHJpbnRTZXR0aW5ncz4gcHJpbnRTZXR0aW5ncyA9IGFk
b3B0R1JlZihndGtfcHJpbnRfc2V0dGluZ3NfbmV3KCkpOwotICAgIGd0a19wcmludF9zZXR0aW5n
c19zZXRfcHJpbnRlcihwcmludFNldHRpbmdzLmdldCgpLCBndGtfcHJpbnRlcl9nZXRfbmFtZShw
cmludGVyLmdldCgpKSk7Ci0gICAgZ3RrX3ByaW50X3NldHRpbmdzX3NldChwcmludFNldHRpbmdz
LmdldCgpLCBHVEtfUFJJTlRfU0VUVElOR1NfT1VUUFVUX1VSSSwgb3V0cHV0VVJJLmdldCgpKTsK
LQotICAgIHdlYmtpdF9wcmludF9vcGVyYXRpb25fc2V0X3ByaW50X3NldHRpbmdzKHRlc3QtPm1f
cHJpbnRPcGVyYXRpb24uZ2V0KCksIHByaW50U2V0dGluZ3MuZ2V0KCkpOwotICAgIHdlYmtpdF9w
cmludF9vcGVyYXRpb25fcHJpbnQodGVzdC0+bV9wcmludE9wZXJhdGlvbi5nZXQoKSk7Ci0gICAg
dGVzdC0+d2FpdFVudGlsUHJpbnRGaW5pc2hlZCgpOwotCi0gICAgR1JlZlB0cjxHRmlsZUluZm8+
IGZpbGVJbmZvID0gYWRvcHRHUmVmKGdfZmlsZV9xdWVyeV9pbmZvKG91dHB1dEZpbGUuZ2V0KCks
IEdfRklMRV9BVFRSSUJVVEVfU1RBTkRBUkRfU0laRSAiLCIgR19GSUxFX0FUVFJJQlVURV9TVEFO
REFSRF9DT05URU5UX1RZUEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEdGaWxlUXVlcnlJbmZvRmxhZ3M+
KDApLCAwLCAwKSk7Ci0gICAgZ19hc3NlcnQoZmlsZUluZm8uZ2V0KCkpOwotICAgIGdfYXNzZXJ0
X2NtcGludChnX2ZpbGVfaW5mb19nZXRfc2l6ZShmaWxlSW5mby5nZXQoKSksID4sIDApOwotICAg
IGdfYXNzZXJ0X2NtcHN0cihnX2ZpbGVfaW5mb19nZXRfY29udGVudF90eXBlKGZpbGVJbmZvLmdl
dCgpKSwgPT0sICJhcHBsaWNhdGlvbi9wZGYiKTsKLQotICAgIGdfZmlsZV9kZWxldGUob3V0cHV0
RmlsZS5nZXQoKSwgMCwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RQcmludE9wZXJhdGlvbkVy
cm9ycyhQcmludFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+bG9hZEh0
bWwoIjxodG1sPjxib2R5PldlYktpdEdUSysgcHJpbnRpbmcgZXJyb3JzIHRlc3Q8L2JvZHk+PC9o
dG1sPiIsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgR1Jl
ZlB0cjxHdGtQcmludGVyPiBwcmludGVyID0gYWRvcHRHUmVmKHRlc3QtPmZpbmRQcmludFRvRmls
ZVByaW50ZXIoKSk7Ci0gICAgaWYgKCFwcmludGVyKSB7Ci0gICAgICAgIGdfbWVzc2FnZSgiJXMi
LCAiQ2Fubm90IHRlc3QgV2ViS2l0UHJpbnRPcGVyYXRpb24vcHJpbnQ6IG5vIHN1aXRhYmxlIHBy
aW50ZXIgZm91bmQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEdlbmVyYWwg
RXJyb3I6IGludmFsaWQgZmlsZW5hbWUuCi0gICAgdGVzdC0+bV9leHBlY3RlZEVycm9yID0gV0VC
S0lUX1BSSU5UX0VSUk9SX0dFTkVSQUw7Ci0gICAgR1JlZlB0cjxHdGtQcmludFNldHRpbmdzPiBw
cmludFNldHRpbmdzID0gYWRvcHRHUmVmKGd0a19wcmludF9zZXR0aW5nc19uZXcoKSk7Ci0gICAg
Z3RrX3ByaW50X3NldHRpbmdzX3NldF9wcmludGVyKHByaW50U2V0dGluZ3MuZ2V0KCksIGd0a19w
cmludGVyX2dldF9uYW1lKHByaW50ZXIuZ2V0KCkpKTsKLSAgICBndGtfcHJpbnRfc2V0dGluZ3Nf
c2V0KHByaW50U2V0dGluZ3MuZ2V0KCksIEdUS19QUklOVF9TRVRUSU5HU19PVVRQVVRfVVJJLCAi
ZmlsZTovLy9mb28vYmFyIik7Ci0gICAgd2Via2l0X3ByaW50X29wZXJhdGlvbl9zZXRfcHJpbnRf
c2V0dGluZ3ModGVzdC0+bV9wcmludE9wZXJhdGlvbi5nZXQoKSwgcHJpbnRTZXR0aW5ncy5nZXQo
KSk7Ci0gICAgd2Via2l0X3ByaW50X29wZXJhdGlvbl9wcmludCh0ZXN0LT5tX3ByaW50T3BlcmF0
aW9uLmdldCgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxQcmludEZpbmlzaGVkKCk7Ci0KLSAgICAv
LyBQcmludGVyIG5vdCBmb3VuZCBlcnJvci4KLSAgICB0ZXN0LT5tX2V4cGVjdGVkRXJyb3IgPSBX
RUJLSVRfUFJJTlRfRVJST1JfUFJJTlRFUl9OT1RfRk9VTkQ7Ci0gICAgZ3RrX3ByaW50X3NldHRp
bmdzX3NldF9wcmludGVyKHByaW50U2V0dGluZ3MuZ2V0KCksICJUaGUgZmFrZSBXZWJLaXQgcHJp
bnRlciIpOwotICAgIHdlYmtpdF9wcmludF9vcGVyYXRpb25fcHJpbnQodGVzdC0+bV9wcmludE9w
ZXJhdGlvbi5nZXQoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsUHJpbnRGaW5pc2hlZCgpOwotCi0g
ICAgLy8gTm8gcGFnZXMgdG8gcHJpbnQ6IHByaW50IGV2ZW4gcGFnZXMgZm9yIGEgc2luZ2xlIHBh
Z2UgZG9jdW1lbnQuCi0gICAgdGVzdC0+bV9leHBlY3RlZEVycm9yID0gV0VCS0lUX1BSSU5UX0VS
Uk9SX0lOVkFMSURfUEFHRV9SQU5HRTsKLSAgICBndGtfcHJpbnRfc2V0dGluZ3Nfc2V0X3ByaW50
ZXIocHJpbnRTZXR0aW5ncy5nZXQoKSwgZ3RrX3ByaW50ZXJfZ2V0X25hbWUocHJpbnRlci5nZXQo
KSkpOwotICAgIGd0a19wcmludF9zZXR0aW5nc19zZXRfcGFnZV9zZXQocHJpbnRTZXR0aW5ncy5n
ZXQoKSwgR1RLX1BBR0VfU0VUX0VWRU4pOwotICAgIHdlYmtpdF9wcmludF9vcGVyYXRpb25fcHJp
bnQodGVzdC0+bV9wcmludE9wZXJhdGlvbi5nZXQoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsUHJp
bnRGaW5pc2hlZCgpOwotfQotI2VuZGlmIC8vIEhBVkVfR1RLX1VOSVhfUFJJTlRJTkcKLQotdm9p
ZCBiZWZvcmVBbGwoKQotewotICAgIGtUZW1wRGlyZWN0b3J5ID0gZ19kaXJfbWFrZV90bXAoIldl
YktpdDJUZXN0cy1YWFhYWFgiLCAwKTsKLSAgICBnX2Fzc2VydChrVGVtcERpcmVjdG9yeSk7Ci0K
LSAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRQcmludE9wZXJhdGlvbiIsICJwcmludGluZy1z
ZXR0aW5ncyIsIHRlc3RQcmludE9wZXJhdGlvblByaW50U2V0dGluZ3MpOwotICAgIFdlYlZpZXdU
ZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAicHJpbnQiLCB0ZXN0V2ViVmlld1ByaW50KTsKLSNp
ZmRlZiBIQVZFX0dUS19VTklYX1BSSU5USU5HCi0gICAgUHJpbnRUZXN0OjphZGQoIldlYktpdFBy
aW50T3BlcmF0aW9uIiwgInByaW50IiwgdGVzdFByaW50T3BlcmF0aW9uUHJpbnQpOwotICAgIFBy
aW50VGVzdDo6YWRkKCJXZWJLaXRQcmludE9wZXJhdGlvbiIsICJwcmludC1lcnJvcnMiLCB0ZXN0
UHJpbnRPcGVyYXRpb25FcnJvcnMpOwotI2VuZGlmCi19Ci0KLXZvaWQgYWZ0ZXJBbGwoKQotewot
ICAgIGdfcm1kaXIoa1RlbXBEaXJlY3RvcnkpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFJlc291cmNlcy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0UmVzb3VyY2VzLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNTdmMTgyYzBhYmUwMWIxYjcxZWI4MTczYTI5NzdhMDg2OTYx
NjU2NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0UmVzb3VyY2VzLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDc4OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEln
YWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIldlYktpdFRlc3RTZXJ2
ZXIuaCIKLSNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
LSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Ci0KLXN0YXRpYyBXZWJLaXRUZXN0U2Vy
dmVyKiBrU2VydmVyOwotCi1zdGF0aWMgY29uc3QgY2hhcioga0luZGV4SHRtbCA9Ci0gICAgIjxo
dG1sPjxoZWFkPiIKLSAgICAiIDxsaW5rIHJlbD0nc3R5bGVzaGVldCcgaHJlZj0nL3N0eWxlLmNz
cycgdHlwZT0ndGV4dC9jc3MnPiIKLSAgICAiIDxzY3JpcHQgbGFuZ3VhZ2U9J2phdmFzY3JpcHQn
IHNyYz0nL2phdmFzY3JpcHQuanMnPjwvc2NyaXB0PiIKLSAgICAiPC9oZWFkPjxib2R5PldlYktp
dEdUSysgcmVzb3VyY2VzIHRlc3Q8L2JvZHk+PC9odG1sPiI7Ci0KLXN0YXRpYyBjb25zdCBjaGFy
KiBrU3R5bGVDU1MgPQotICAgICJib2R5IHsiCi0gICAgIiAgICBtYXJnaW46IDBweDsiCi0gICAg
IiAgICBwYWRkaW5nOiAwcHg7IgotICAgICIgICAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7Igot
ICAgICIgICAgYmFja2dyb3VuZDogdXJsKC9ibGFuay5pY28pIDAgMCBuby1yZXBlYXQ7IgotICAg
ICIgICAgY29sb3I6IGJsYWNrOyIKLSAgICAifSI7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBrSmF2
YXNjcmlwdCA9ICJmdW5jdGlvbiBmb28gKCkgeyB2YXIgYSA9IDE7IH0iOwotCi1jbGFzcyBSZXNv
dXJjZXNUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJQl9U
RVNUX0ZJWFRVUkUoUmVzb3VyY2VzVGVzdCk7Ci0KLSAgICBzdGF0aWMgdm9pZCByZXNvdXJjZVNl
bnRSZXF1ZXN0Q2FsbGJhY2soV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBXZWJLaXRVUklS
ZXF1ZXN0KiByZXF1ZXN0LCBXZWJLaXRVUklSZXNwb25zZSogcmVkaXJlY3RSZXNwb25zZSwgUmVz
b3VyY2VzVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVs
ZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QocmVxdWVzdCkpOwotICAgICAgICBpZiAocmVk
aXJlY3RSZXNwb25zZSkKLSAgICAgICAgICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdo
ZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QocmVkaXJlY3RSZXNwb25zZSkpOwotICAgICAgICB0ZXN0
LT5yZXNvdXJjZVNlbnRSZXF1ZXN0KHJlc291cmNlLCByZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNl
KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCByZXNvdXJjZVJlY2VpdmVkUmVzcG9uc2VDYWxs
YmFjayhXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIEdQYXJhbVNwZWMqLCBSZXNvdXJjZXNU
ZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgZ19hc3NlcnQod2Via2l0X3dlYl9yZXNvdXJjZV9n
ZXRfcmVzcG9uc2UocmVzb3VyY2UpKTsKLSAgICAgICAgdGVzdC0+cmVzb3VyY2VSZWNlaXZlZFJl
c3BvbnNlKHJlc291cmNlKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCByZXNvdXJjZVJlY2Vp
dmVkRGF0YUNhbGxiYWNrKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgZ3VpbnQ2NCBieXRl
c1JlY2VpdmVkLCBSZXNvdXJjZXNUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+cmVz
b3VyY2VSZWNlaXZlZERhdGEocmVzb3VyY2UsIGJ5dGVzUmVjZWl2ZWQpOwotICAgIH0KLQotICAg
IHN0YXRpYyB2b2lkIHJlc291cmNlRmluaXNoZWRDYWxsYmFjayhXZWJLaXRXZWJSZXNvdXJjZSog
cmVzb3VyY2UsIFJlc291cmNlc1Rlc3QqIHRlc3QpCi0gICAgewotICAgICAgICB0ZXN0LT5yZXNv
dXJjZUZpbmlzaGVkKHJlc291cmNlKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCByZXNvdXJj
ZUZhaWxlZENhbGxiYWNrKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgR0Vycm9yKiBlcnJv
ciwgUmVzb3VyY2VzVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0KGVycm9yKTsK
LSAgICAgICAgdGVzdC0+cmVzb3VyY2VGYWlsZWQocmVzb3VyY2UsIGVycm9yKTsKLSAgICB9Ci0K
LSAgICBzdGF0aWMgdm9pZCByZXNvdXJjZUxvYWRTdGFydGVkQ2FsbGJhY2soV2ViS2l0V2ViVmll
dyogd2ViVmlldywgV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBXZWJLaXRVUklSZXF1ZXN0
KiByZXF1ZXN0LCBSZXNvdXJjZXNUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+YXNz
ZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChyZXNvdXJjZSkpOwot
ICAgICAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JK
RUNUKHJlcXVlc3QpKTsKLQotICAgICAgICAvLyBJZ25vcmUgZmF2aWNvbnMuCi0gICAgICAgIGlm
IChnX3N0cl9oYXNfc3VmZml4KHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfdXJpKHJlcXVlc3QpLCAi
ZmF2aWNvbi5pY28iKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0ZXN0LT5yZXNv
dXJjZUxvYWRTdGFydGVkKHJlc291cmNlLCByZXF1ZXN0KTsKLSAgICAgICAgZ19zaWduYWxfY29u
bmVjdChyZXNvdXJjZSwgInNlbnQtcmVxdWVzdCIsIEdfQ0FMTEJBQ0socmVzb3VyY2VTZW50UmVx
dWVzdENhbGxiYWNrKSwgdGVzdCk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QocmVzb3VyY2Us
ICJub3RpZnk6OnJlc3BvbnNlIiwgR19DQUxMQkFDSyhyZXNvdXJjZVJlY2VpdmVkUmVzcG9uc2VD
YWxsYmFjayksIHRlc3QpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KHJlc291cmNlLCAicmVj
ZWl2ZWQtZGF0YSIsIEdfQ0FMTEJBQ0socmVzb3VyY2VSZWNlaXZlZERhdGFDYWxsYmFjayksIHRl
c3QpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KHJlc291cmNlLCAiZmluaXNoZWQiLCBHX0NB
TExCQUNLKHJlc291cmNlRmluaXNoZWRDYWxsYmFjayksIHRlc3QpOwotICAgICAgICBnX3NpZ25h
bF9jb25uZWN0KHJlc291cmNlLCAiZmFpbGVkIiwgR19DQUxMQkFDSyhyZXNvdXJjZUZhaWxlZENh
bGxiYWNrKSwgdGVzdCk7Ci0gICAgfQotCi0gICAgdm9pZCBjbGVhclN1YnJlc291cmNlcygpCi0g
ICAgewotICAgICAgICBnX2xpc3RfZnJlZV9mdWxsKG1fc3VicmVzb3VyY2VzLCByZWludGVycHJl
dF9jYXN0PEdEZXN0cm95Tm90aWZ5PihnX29iamVjdF91bnJlZikpOwotICAgICAgICBtX3N1YnJl
c291cmNlcyA9IDA7Ci0gICAgfQotCi0gICAgUmVzb3VyY2VzVGVzdCgpCi0gICAgICAgIDogV2Vi
Vmlld1Rlc3QoKQotICAgICAgICAsIG1fcmVzb3VyY2VzTG9hZGVkKDApCi0gICAgICAgICwgbV9y
ZXNvdXJjZXNUb0xvYWQoMCkKLSAgICAgICAgLCBtX3Jlc291cmNlRGF0YVNpemUoMCkKLSAgICAg
ICAgLCBtX3N1YnJlc291cmNlcygwKQotICAgIHsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdCht
X3dlYlZpZXcsICJyZXNvdXJjZS1sb2FkLXN0YXJ0ZWQiLCBHX0NBTExCQUNLKHJlc291cmNlTG9h
ZFN0YXJ0ZWRDYWxsYmFjayksIHRoaXMpOwotICAgIH0KLQotICAgIH5SZXNvdXJjZXNUZXN0KCkK
LSAgICB7Ci0gICAgICAgIGNsZWFyU3VicmVzb3VyY2VzKCk7Ci0gICAgfQotCi0gICAgdmlydHVh
bCB2b2lkIHJlc291cmNlTG9hZFN0YXJ0ZWQoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBX
ZWJLaXRVUklSZXF1ZXN0KiByZXF1ZXN0KQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgcmVzb3VyY2VTZW50UmVxdWVzdChXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIFdlYktp
dFVSSVJlcXVlc3QqIHJlcXVlc3QsIFdlYktpdFVSSVJlc3BvbnNlKiByZWRpcmVjdFJlc3BvbnNl
KQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcmVzb3VyY2VSZWNlaXZlZFJlc3Bv
bnNlKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSkKLSAgICB7Ci0gICAgfQotCi0gICAgdmly
dHVhbCB2b2lkIHJlc291cmNlUmVjZWl2ZWREYXRhKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJj
ZSwgZ3VpbnQ2NCBieXRlc1JlY2VpdmVkKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgcmVzb3VyY2VGaW5pc2hlZChXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UpCi0gICAgewot
ICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQocmVzb3VyY2UsIEdf
U0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOwotICAgICAgICBpZiAod2Via2l0
X3dlYl92aWV3X2dldF9tYWluX3Jlc291cmNlKG1fd2ViVmlldykgIT0gcmVzb3VyY2UpCi0gICAg
ICAgICAgICBtX3N1YnJlc291cmNlcyA9IGdfbGlzdF9wcmVwZW5kKG1fc3VicmVzb3VyY2VzLCBn
X29iamVjdF9yZWYocmVzb3VyY2UpKTsKLSAgICAgICAgaWYgKCsrbV9yZXNvdXJjZXNMb2FkZWQg
PT0gbV9yZXNvdXJjZXNUb0xvYWQpCi0gICAgICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1fbWFp
bkxvb3ApOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCByZXNvdXJjZUZhaWxlZChXZWJLaXRX
ZWJSZXNvdXJjZSogcmVzb3VyY2UsIEdFcnJvciogZXJyb3IpCi0gICAgewotICAgICAgICBnX2Fz
c2VydF9ub3RfcmVhY2hlZCgpOwotICAgIH0KLQotICAgIHZvaWQgd2FpdFVudGlsUmVzb3VyY2Vz
TG9hZGVkKHNpemVfdCByZXNvdXJjZXNDb3VudCkKLSAgICB7Ci0gICAgICAgIG1fcmVzb3VyY2Vz
TG9hZGVkID0gMDsKLSAgICAgICAgbV9yZXNvdXJjZXNUb0xvYWQgPSByZXNvdXJjZXNDb3VudDsK
LSAgICAgICAgY2xlYXJTdWJyZXNvdXJjZXMoKTsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1f
bWFpbkxvb3ApOwotICAgIH0KLQotICAgIEdMaXN0KiBzdWJyZXNvdXJjZXMoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fc3VicmVzb3VyY2VzOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHJl
c291cmNlR2V0RGF0YUNhbGxiYWNrKEdPYmplY3QqIG9iamVjdCwgR0FzeW5jUmVzdWx0KiByZXN1
bHQsIGdwb2ludGVyIHVzZXJEYXRhKQotICAgIHsKLSAgICAgICAgc2l6ZV90IGRhdGFTaXplOwot
ICAgICAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIqIGRh
dGEgPSB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF9kYXRhX2ZpbmlzaChXRUJLSVRfV0VCX1JFU09V
UkNFKG9iamVjdCksIHJlc3VsdCwgJmRhdGFTaXplLCAmZXJyb3Iub3V0UHRyKCkpOwotICAgICAg
ICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOwotICAgICAgICBnX2Fzc2VydChkYXRhKTsKLSAgICAg
ICAgZ19hc3NlcnRfY21waW50KGRhdGFTaXplLCA+LCAwKTsKLQotICAgICAgICBSZXNvdXJjZXNU
ZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VzVGVzdCo+KHVzZXJEYXRhKTsKLSAgICAg
ICAgdGVzdC0+bV9yZXNvdXJjZURhdGEuc2V0KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGRhdGEp
KTsKLSAgICAgICAgdGVzdC0+bV9yZXNvdXJjZURhdGFTaXplID0gZGF0YVNpemU7Ci0gICAgICAg
IGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgdm9pZCBj
aGVja1Jlc291cmNlRGF0YShXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UpCi0gICAgewotICAg
ICAgICBtX3Jlc291cmNlRGF0YVNpemUgPSAwOwotICAgICAgICB3ZWJraXRfd2ViX3Jlc291cmNl
X2dldF9kYXRhKHJlc291cmNlLCAwLCByZXNvdXJjZUdldERhdGFDYWxsYmFjaywgdGhpcyk7Ci0g
ICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLQotICAgICAgICBjb25zdCBjaGFy
KiB1cmkgPSB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF91cmkocmVzb3VyY2UpOwotICAgICAgICBp
ZiAodXJpID09IGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi8iKSkgewotICAgICAgICAgICAgZ19h
c3NlcnRfY21waW50KG1fcmVzb3VyY2VEYXRhU2l6ZSwgPT0sIHN0cmxlbihrSW5kZXhIdG1sKSk7
Ci0gICAgICAgICAgICBnX2Fzc2VydCghc3RybmNtcChtX3Jlc291cmNlRGF0YS5nZXQoKSwga0lu
ZGV4SHRtbCwgbV9yZXNvdXJjZURhdGFTaXplKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAodXJpID09
IGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9zdHlsZS5jc3MiKSkgewotICAgICAgICAgICAgZ19h
c3NlcnRfY21waW50KG1fcmVzb3VyY2VEYXRhU2l6ZSwgPT0sIHN0cmxlbihrU3R5bGVDU1MpKTsK
LSAgICAgICAgICAgIGdfYXNzZXJ0KCFzdHJuY21wKG1fcmVzb3VyY2VEYXRhLmdldCgpLCBrU3R5
bGVDU1MsIG1fcmVzb3VyY2VEYXRhU2l6ZSkpOwotICAgICAgICB9IGVsc2UgaWYgKHVyaSA9PSBr
U2VydmVyLT5nZXRVUklGb3JQYXRoKCIvamF2YXNjcmlwdC5qcyIpKSB7Ci0gICAgICAgICAgICBn
X2Fzc2VydF9jbXBpbnQobV9yZXNvdXJjZURhdGFTaXplLCA9PSwgc3RybGVuKGtKYXZhc2NyaXB0
KSk7Ci0gICAgICAgICAgICBnX2Fzc2VydCghc3RybmNtcChtX3Jlc291cmNlRGF0YS5nZXQoKSwg
a0phdmFzY3JpcHQsIG1fcmVzb3VyY2VEYXRhU2l6ZSkpOwotICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0gICAgICAgIG1fcmVzb3VyY2VEYXRhLmNs
ZWFyKCk7Ci0gICAgfQotCi0gICAgc2l6ZV90IG1fcmVzb3VyY2VzTG9hZGVkOwotICAgIHNpemVf
dCBtX3Jlc291cmNlc1RvTG9hZDsKLSAgICBHT3duUHRyPGNoYXI+IG1fcmVzb3VyY2VEYXRhOwot
ICAgIHNpemVfdCBtX3Jlc291cmNlRGF0YVNpemU7Ci0gICAgR0xpc3QqIG1fc3VicmVzb3VyY2Vz
OwotfTsKLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdSZXNvdXJjZXMoUmVzb3VyY2VzVGVzdCog
dGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICAvLyBOb3RoaW5nIGxvYWRlZCB5ZXQsIHRoZXJl
IHNob3VsbmQndCBiZSByZXNvdXJjZXMuCi0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19n
ZXRfbWFpbl9yZXNvdXJjZSh0ZXN0LT5tX3dlYlZpZXcpKTsKLSAgICBnX2Fzc2VydCghdGVzdC0+
c3VicmVzb3VyY2VzKCkpOwotCi0gICAgLy8gTG9hZCBzaW1wbGUgcGFnZSB3aXRob3V0IHN1YnJl
c291cmNlcy4KLSAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHk+VGVzdGluZyBXZWJLaXRH
VEsrPC9ib2R5PjwvaHRtbD4iLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQo
KTsKLSAgICBXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X21haW5fcmVzb3VyY2UodGVzdC0+bV93ZWJWaWV3KTsKLSAgICBnX2Fzc2VydChyZXNvdXJjZSk7
Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKHRlc3QtPm1fd2Vi
VmlldyksID09LCB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF91cmkocmVzb3VyY2UpKTsKLSAgICBn
X2Fzc2VydCghdGVzdC0+c3VicmVzb3VyY2VzKCkpOwotCi0gICAgLy8gTG9hZCBzaW1wbGUgcGFn
ZSB3aXRoIHN1YnJlc291cmNlcy4KLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZv
clBhdGgoIi8iKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbFJlc291cmNlc0xvYWRlZCg0
KTsKLQotICAgIHJlc291cmNlID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX3Jlc291cmNlKHRl
c3QtPm1fd2ViVmlldyk7Ci0gICAgZ19hc3NlcnQocmVzb3VyY2UpOwotICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSh0ZXN0LT5tX3dlYlZpZXcpLCA9PSwgd2Via2l0
X3dlYl9yZXNvdXJjZV9nZXRfdXJpKHJlc291cmNlKSk7Ci0gICAgR0xpc3QqIHN1YnJlc291cmNl
cyA9IHRlc3QtPnN1YnJlc291cmNlcygpOwotICAgIGdfYXNzZXJ0KHN1YnJlc291cmNlcyk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KGdfbGlzdF9sZW5ndGgoc3VicmVzb3VyY2VzKSwgPT0sIDMpOwot
Ci0jaWYgMAotICAgIC8vIExvYWQgdGhlIHNhbWUgVVJJIGFnYWluLgotICAgIC8vIEZJWE1FOiB3
ZSBuZWVkIGEgd29ya2Fyb3VuZCBmb3IgYnVnIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03ODUxMC4KLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBh
dGgoIi8iKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbFJlc291cmNlc0xvYWRlZCg0KTsK
LSNlbmRpZgotCi0gICAgLy8gUmVsb2FkLgotICAgIHdlYmtpdF93ZWJfdmlld19yZWxvYWRfYnlw
YXNzX2NhY2hlKHRlc3QtPm1fd2ViVmlldyk7Ci0gICAgdGVzdC0+d2FpdFVudGlsUmVzb3VyY2Vz
TG9hZGVkKDQpOwotfQotCi1jbGFzcyBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OiBwdWJsaWMgUmVz
b3VyY2VzVGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShTaW5nbGVS
ZXNvdXJjZUxvYWRUZXN0KTsKLQotICAgIGVudW0gTG9hZEV2ZW50cyB7Ci0gICAgICAgIFN0YXJ0
ZWQsCi0gICAgICAgIFNlbnRSZXF1ZXN0LAotICAgICAgICBSZWRpcmVjdGVkLAotICAgICAgICBS
ZWNlaXZlZFJlc3BvbnNlLAotICAgICAgICBSZWNlaXZlZERhdGEsCi0gICAgICAgIEZpbmlzaGVk
LAotICAgICAgICBGYWlsZWQKLSAgICB9OwotCi0gICAgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdCgp
Ci0gICAgICAgIDogUmVzb3VyY2VzVGVzdCgpCi0gICAgICAgICwgbV9yZXNvdXJjZURhdGFSZWNl
aXZlZCgwKQotICAgIHsKLSAgICAgICAgIG1fcmVzb3VyY2VzVG9Mb2FkID0gMjsKLSAgICB9Ci0K
LSAgICB2b2lkIHJlc291cmNlTG9hZFN0YXJ0ZWQoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNl
LCBXZWJLaXRVUklSZXF1ZXN0KiByZXF1ZXN0KQotICAgIHsKLSAgICAgICAgaWYgKHJlc291cmNl
ID09IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9yZXNvdXJjZShtX3dlYlZpZXcpKQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIG1fcmVzb3VyY2VEYXRhUmVjZWl2ZWQgPSAwOwotICAg
ICAgICBtX3Jlc291cmNlID0gcmVzb3VyY2U7Ci0gICAgICAgIG1fbG9hZEV2ZW50cy5hcHBlbmQo
U3RhcnRlZCk7Ci0gICAgfQotCi0gICAgdm9pZCByZXNvdXJjZVNlbnRSZXF1ZXN0KFdlYktpdFdl
YlJlc291cmNlKiByZXNvdXJjZSwgV2ViS2l0VVJJUmVxdWVzdCogcmVxdWVzdCwgV2ViS2l0VVJJ
UmVzcG9uc2UqIHJlZGlyZWN0UmVzcG9uc2UpCi0gICAgewotICAgICAgICBpZiAocmVzb3VyY2Ug
IT0gbV9yZXNvdXJjZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAocmVkaXJl
Y3RSZXNwb25zZSkKLSAgICAgICAgICAgIG1fbG9hZEV2ZW50cy5hcHBlbmQoUmVkaXJlY3RlZCk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fbG9hZEV2ZW50cy5hcHBlbmQoU2VudFJlcXVl
c3QpOwotICAgIH0KLQotICAgIHZvaWQgcmVzb3VyY2VSZWNlaXZlZFJlc3BvbnNlKFdlYktpdFdl
YlJlc291cmNlKiByZXNvdXJjZSkKLSAgICB7Ci0gICAgICAgIGlmIChyZXNvdXJjZSAhPSBtX3Jl
c291cmNlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG1fbG9hZEV2ZW50cy5hcHBl
bmQoUmVjZWl2ZWRSZXNwb25zZSk7Ci0gICAgfQotCi0gICAgdm9pZCByZXNvdXJjZVJlY2VpdmVk
RGF0YShXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIGd1aW50NjQgYnl0ZXNSZWNlaXZlZCkK
LSAgICB7Ci0gICAgICAgIGlmIChyZXNvdXJjZSAhPSBtX3Jlc291cmNlKQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIG1fcmVzb3VyY2VEYXRhUmVjZWl2ZWQgKz0gYnl0ZXNSZWNlaXZl
ZDsKLSAgICAgICAgaWYgKCFtX2xvYWRFdmVudHMuY29udGFpbnMoUmVjZWl2ZWREYXRhKSkKLSAg
ICAgICAgICAgIG1fbG9hZEV2ZW50cy5hcHBlbmQoUmVjZWl2ZWREYXRhKTsKLSAgICB9Ci0KLSAg
ICB2b2lkIHJlc291cmNlRmluaXNoZWQoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlKQotICAg
IHsKLSAgICAgICAgaWYgKHJlc291cmNlICE9IG1fcmVzb3VyY2UpIHsKLSAgICAgICAgICAgIFJl
c291cmNlc1Rlc3Q6OnJlc291cmNlRmluaXNoZWQocmVzb3VyY2UpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFtX2xvYWRFdmVudHMuY29udGFpbnMoRmFp
bGVkKSkgewotICAgICAgICAgICAgV2ViS2l0VVJJUmVzcG9uc2UqIHJlc3BvbnNlID0gd2Via2l0
X3dlYl9yZXNvdXJjZV9nZXRfcmVzcG9uc2UobV9yZXNvdXJjZS5nZXQoKSk7Ci0gICAgICAgICAg
ICBnX2Fzc2VydChyZXNwb25zZSk7Ci0gICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0
X3VyaV9yZXNwb25zZV9nZXRfY29udGVudF9sZW5ndGgocmVzcG9uc2UpLCA9PSwgbV9yZXNvdXJj
ZURhdGFSZWNlaXZlZCk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9sb2FkRXZlbnRzLmFwcGVuZChG
aW5pc2hlZCk7Ci0gICAgICAgIFJlc291cmNlc1Rlc3Q6OnJlc291cmNlRmluaXNoZWQocmVzb3Vy
Y2UpOwotICAgIH0KLQotICAgIHZvaWQgcmVzb3VyY2VGYWlsZWQoV2ViS2l0V2ViUmVzb3VyY2Uq
IHJlc291cmNlLCBHRXJyb3IqIGVycm9yKQotICAgIHsKLSAgICAgICAgaWYgKHJlc291cmNlID09
IG1fcmVzb3VyY2UpCi0gICAgICAgICAgICBtX2xvYWRFdmVudHMuYXBwZW5kKEZhaWxlZCk7Ci0g
ICAgfQotCi0gICAgdm9pZCB3YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZCgpCi0gICAgewot
ICAgICAgICBtX3Jlc291cmNlID0gMDsKLSAgICAgICAgbV9yZXNvdXJjZXNMb2FkZWQgPSAwOwot
ICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgV2ViS2l0
VVJJUmVzcG9uc2UqIHdhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlzaGVkQW5kUmV0dXJuVVJJUmVz
cG9uc2UoKQotICAgIHsKLSAgICAgICAgd2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWQoKTsK
LSAgICAgICAgZ19hc3NlcnQobV9yZXNvdXJjZSk7Ci0gICAgICAgIHJldHVybiB3ZWJraXRfd2Vi
X3Jlc291cmNlX2dldF9yZXNwb25zZShtX3Jlc291cmNlLmdldCgpKTsKLSAgICB9Ci0KLSAgICBH
UmVmUHRyPFdlYktpdFdlYlJlc291cmNlPiBtX3Jlc291cmNlOwotICAgIFZlY3RvcjxMb2FkRXZl
bnRzPiBtX2xvYWRFdmVudHM7Ci0gICAgZ3VpbnQ2NCBtX3Jlc291cmNlRGF0YVJlY2VpdmVkOwot
fTsKLQotc3RhdGljIHZvaWQgdGVzdFdlYlJlc291cmNlTG9hZGluZyhTaW5nbGVSZXNvdXJjZUxv
YWRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZl
ci0+Z2V0VVJJRm9yUGF0aCgiL2phdmFzY3JpcHQuaHRtbCIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+
d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX3Jl
c291cmNlKTsKLSAgICBWZWN0b3I8U2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6TG9hZEV2ZW50cz4m
IGV2ZW50cyA9IHRlc3QtPm1fbG9hZEV2ZW50czsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRz
LnNpemUoKSwgPT0sIDUpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBTaW5n
bGVSZXNvdXJjZUxvYWRUZXN0OjpTdGFydGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRz
WzFdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6U2VudFJlcXVlc3QpOwotICAgIGdfYXNz
ZXJ0X2NtcGludChldmVudHNbMl0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpSZWNlaXZl
ZFJlc3BvbnNlKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzNdLCA9PSwgU2luZ2xlUmVz
b3VyY2VMb2FkVGVzdDo6UmVjZWl2ZWREYXRhKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRz
WzRdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6RmluaXNoZWQpOwotICAgIGV2ZW50cy5j
bGVhcigpOwotCi0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvcmVk
aXJlY3RlZC1jc3MuaHRtbCIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VM
b2FkRmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX3Jlc291cmNlKTsKLSAgICBnX2Fz
c2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDYpOwotICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHNbMF0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpTdGFydGVkKTsKLSAgICBnX2Fz
c2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6U2VudFJl
cXVlc3QpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBTaW5nbGVSZXNvdXJj
ZUxvYWRUZXN0OjpSZWRpcmVjdGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzNdLCA9
PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6UmVjZWl2ZWRSZXNwb25zZSk7Ci0gICAgZ19hc3Nl
cnRfY21waW50KGV2ZW50c1s0XSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlJlY2VpdmVk
RGF0YSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1s1XSwgPT0sIFNpbmdsZVJlc291cmNl
TG9hZFRlc3Q6OkZpbmlzaGVkKTsKLSAgICBldmVudHMuY2xlYXIoKTsKLQotICAgIHRlc3QtPmxv
YWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2ludmFsaWQtY3NzLmh0bWwiKS5kYXRhKCkp
OwotICAgIHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlzaGVkKCk7Ci0gICAgZ19hc3Nl
cnQodGVzdC0+bV9yZXNvdXJjZSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCks
ID09LCA0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgU2luZ2xlUmVzb3Vy
Y2VMb2FkVGVzdDo6U3RhcnRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0s
IFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlNlbnRSZXF1ZXN0KTsKLSAgICBnX2Fzc2VydF9jbXBp
bnQoZXZlbnRzWzJdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6RmFpbGVkKTsKLSAgICBn
X2Fzc2VydF9jbXBpbnQoZXZlbnRzWzNdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6Rmlu
aXNoZWQpOwotICAgIGV2ZW50cy5jbGVhcigpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViUmVz
b3VyY2VSZXNwb25zZShTaW5nbGVSZXNvdXJjZUxvYWRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVy
KQotewotICAgIC8vIE5vIGNhY2hlZCByZXNvdXJjZTogRmlyc3QgbG9hZC4KLSAgICB0ZXN0LT5s
b2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9qYXZhc2NyaXB0Lmh0bWwiKS5kYXRhKCkp
OwotICAgIFdlYktpdFVSSVJlc3BvbnNlKiByZXNwb25zZSA9IHRlc3QtPndhaXRVbnRpbFJlc291
cmNlTG9hZEZpbmlzaGVkQW5kUmV0dXJuVVJJUmVzcG9uc2UoKTsKLSAgICBnX2Fzc2VydF9jbXBp
bnQod2Via2l0X3VyaV9yZXNwb25zZV9nZXRfc3RhdHVzX2NvZGUocmVzcG9uc2UpLCA9PSwgU09V
UF9TVEFUVVNfT0spOwotCi0gICAgLy8gTm8gY2FjaGVkIHJlc291cmNlOiBTZWNvbmQgbG9hZC4K
LSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9qYXZhc2NyaXB0Lmh0
bWwiKS5kYXRhKCkpOwotICAgIHJlc3BvbnNlID0gdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2Fk
RmluaXNoZWRBbmRSZXR1cm5VUklSZXNwb25zZSgpOwotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJr
aXRfdXJpX3Jlc3BvbnNlX2dldF9zdGF0dXNfY29kZShyZXNwb25zZSksID09LCBTT1VQX1NUQVRV
U19PSyk7Ci0KLSAgICAvLyBObyBjYWNoZWQgcmVzb3VyY2U6IFJlbG9hZC4KLSAgICB3ZWJraXRf
d2ViX3ZpZXdfcmVsb2FkKHRlc3QtPm1fd2ViVmlldyk7Ci0gICAgcmVzcG9uc2UgPSB0ZXN0LT53
YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZEFuZFJldHVyblVSSVJlc3BvbnNlKCk7Ci0gICAg
Z19hc3NlcnRfY21waW50KHdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0X3N0YXR1c19jb2RlKHJlc3Bv
bnNlKSwgPT0sIFNPVVBfU1RBVFVTX09LKTsKLQotICAgIC8vIENhY2hlZCByZXNvdXJjZTogRmly
c3QgbG9hZC4KLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbWFn
ZS5odG1sIikuZGF0YSgpKTsKLSAgICByZXNwb25zZSA9IHRlc3QtPndhaXRVbnRpbFJlc291cmNl
TG9hZEZpbmlzaGVkQW5kUmV0dXJuVVJJUmVzcG9uc2UoKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
d2Via2l0X3VyaV9yZXNwb25zZV9nZXRfc3RhdHVzX2NvZGUocmVzcG9uc2UpLCA9PSwgU09VUF9T
VEFUVVNfT0spOwotCi0gICAgLy8gQ2FjaGVkIHJlc291cmNlOiBTZWNvbmQgbG9hZC4KLSAgICB0
ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbWFnZS5odG1sIikuZGF0YSgp
KTsKLSAgICByZXNwb25zZSA9IHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlzaGVkQW5k
UmV0dXJuVVJJUmVzcG9uc2UoKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3VyaV9yZXNw
b25zZV9nZXRfc3RhdHVzX2NvZGUocmVzcG9uc2UpLCA9PSwgU09VUF9TVEFUVVNfT0spOwotCi0g
ICAgLy8gQ2FjaGVkIHJlc291cmNlOiBSZWxvYWQuCi0gICAgd2Via2l0X3dlYl92aWV3X3JlbG9h
ZCh0ZXN0LT5tX3dlYlZpZXcpOwotICAgIHJlc3BvbnNlID0gdGVzdC0+d2FpdFVudGlsUmVzb3Vy
Y2VMb2FkRmluaXNoZWRBbmRSZXR1cm5VUklSZXNwb25zZSgpOwotICAgIGdfYXNzZXJ0X2NtcGlu
dCh3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF9zdGF0dXNfY29kZShyZXNwb25zZSksID09LCBTT1VQ
X1NUQVRVU19OT1RfTU9ESUZJRUQpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViUmVzb3VyY2VN
aW1lVHlwZShTaW5nbGVSZXNvdXJjZUxvYWRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewot
ICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2phdmFzY3JpcHQuaHRt
bCIpLmRhdGEoKSk7Ci0gICAgV2ViS2l0VVJJUmVzcG9uc2UqIHJlc3BvbnNlID0gdGVzdC0+d2Fp
dFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWRBbmRSZXR1cm5VUklSZXNwb25zZSgpOwotICAgIGdf
YXNzZXJ0X2NtcHN0cih3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF9taW1lX3R5cGUocmVzcG9uc2Up
LCA9PSwgInRleHQvamF2YXNjcmlwdCIpOwotCi0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5n
ZXRVUklGb3JQYXRoKCIvaW1hZ2UuaHRtbCIpLmRhdGEoKSk7Ci0gICAgcmVzcG9uc2UgPSB0ZXN0
LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZEFuZFJldHVyblVSSVJlc3BvbnNlKCk7Ci0g
ICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0X21pbWVfdHlwZShyZXNw
b25zZSksID09LCAiaW1hZ2Uvdm5kLm1pY3Jvc29mdC5pY29uIik7Ci0KLSAgICB0ZXN0LT5sb2Fk
VVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9yZWRpcmVjdGVkLWNzcy5odG1sIikuZGF0YSgp
KTsKLSAgICByZXNwb25zZSA9IHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlzaGVkQW5k
UmV0dXJuVVJJUmVzcG9uc2UoKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3VyaV9yZXNw
b25zZV9nZXRfbWltZV90eXBlKHJlc3BvbnNlKSwgPT0sICJ0ZXh0L2NzcyIpOwotfQotCi1zdGF0
aWMgdm9pZCB0ZXN0V2ViUmVzb3VyY2VTdWdnZXN0ZWRGaWxlbmFtZShTaW5nbGVSZXNvdXJjZUxv
YWRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZl
ci0+Z2V0VVJJRm9yUGF0aCgiL2phdmFzY3JpcHQuaHRtbCIpLmRhdGEoKSk7Ci0gICAgV2ViS2l0
VVJJUmVzcG9uc2UqIHJlc3BvbnNlID0gdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNo
ZWRBbmRSZXR1cm5VUklSZXNwb25zZSgpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfdXJp
X3Jlc3BvbnNlX2dldF9zdWdnZXN0ZWRfZmlsZW5hbWUocmVzcG9uc2UpLCA9PSwgIkphdmFTY3Jp
cHQuanMiKTsKLQotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2lt
YWdlLmh0bWwiKS5kYXRhKCkpOwotICAgIHJlc3BvbnNlID0gdGVzdC0+d2FpdFVudGlsUmVzb3Vy
Y2VMb2FkRmluaXNoZWRBbmRSZXR1cm5VUklSZXNwb25zZSgpOwotICAgIGdfYXNzZXJ0KCF3ZWJr
aXRfdXJpX3Jlc3BvbnNlX2dldF9zdWdnZXN0ZWRfZmlsZW5hbWUocmVzcG9uc2UpKTsKLX0KLQot
Y2xhc3MgUmVzb3VyY2VVUklUcmFja2luZ1Rlc3Q6IHB1YmxpYyBTaW5nbGVSZXNvdXJjZUxvYWRU
ZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFJlc291cmNlVVJJVHJh
Y2tpbmdUZXN0KTsKLQotICAgIFJlc291cmNlVVJJVHJhY2tpbmdUZXN0KCkKLSAgICAgICAgOiBT
aW5nbGVSZXNvdXJjZUxvYWRUZXN0KCkKLSAgICB7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQg
dXJpQ2hhbmdlZChXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIEdQYXJhbVNwZWMqLCBSZXNv
dXJjZVVSSVRyYWNraW5nVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0KHJlc291
cmNlID09IHRlc3QtPm1fcmVzb3VyY2UuZ2V0KCkpOwotICAgICAgICBnX2Fzc2VydF9jbXBzdHIo
dGVzdC0+bV9hY3RpdmVVUkkuZGF0YSgpLCAhPSwgd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJp
KHRlc3QtPm1fcmVzb3VyY2UuZ2V0KCkpKTsKLSAgICAgICAgdGVzdC0+bV9hY3RpdmVVUkkgPSB3
ZWJraXRfd2ViX3Jlc291cmNlX2dldF91cmkodGVzdC0+bV9yZXNvdXJjZS5nZXQoKSk7Ci0gICAg
fQotCi0gICAgdm9pZCByZXNvdXJjZUxvYWRTdGFydGVkKFdlYktpdFdlYlJlc291cmNlKiByZXNv
dXJjZSwgV2ViS2l0VVJJUmVxdWVzdCogcmVxdWVzdCkKLSAgICB7Ci0gICAgICAgIGlmIChyZXNv
dXJjZSA9PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2UobV93ZWJWaWV3KSkKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBtX3Jlc291cmNlID0gcmVzb3VyY2U7Ci0gICAg
ICAgIG1fYWN0aXZlVVJJID0gd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJpKHJlc291cmNlKTsK
LSAgICAgICAgY2hlY2tBY3RpdmVVUkkoIi9yZWRpcmVjdGVkLmNzcyIpOwotICAgICAgICBnX2Fz
c2VydF9jbXBzdHIobV9hY3RpdmVVUkkuZGF0YSgpLCA9PSwgd2Via2l0X3VyaV9yZXF1ZXN0X2dl
dF91cmkocmVxdWVzdCkpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KHJlc291cmNlLCAibm90
aWZ5Ojp1cmkiLCBHX0NBTExCQUNLKHVyaUNoYW5nZWQpLCB0aGlzKTsKLSAgICB9Ci0KLSAgICB2
b2lkIHJlc291cmNlU2VudFJlcXVlc3QoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBXZWJL
aXRVUklSZXF1ZXN0KiByZXF1ZXN0LCBXZWJLaXRVUklSZXNwb25zZSogcmVkaXJlY3RSZXNwb25z
ZSkKLSAgICB7Ci0gICAgICAgIGlmIChyZXNvdXJjZSAhPSBtX3Jlc291cmNlKQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChyZWRpcmVjdFJlc3BvbnNlKQotICAgICAgICAgICAg
Y2hlY2tBY3RpdmVVUkkoIi9zaW1wbGUtc3R5bGUuY3NzIik7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGNoZWNrQWN0aXZlVVJJKCIvcmVkaXJlY3RlZC5jc3MiKTsKLSAgICAgICAgZ19hc3Nl
cnRfY21wc3RyKG1fYWN0aXZlVVJJLmRhdGEoKSwgPT0sIHdlYmtpdF91cmlfcmVxdWVzdF9nZXRf
dXJpKHJlcXVlc3QpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlc291cmNlUmVjZWl2ZWRSZXNwb25z
ZShXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UpCi0gICAgewotICAgICAgICBpZiAocmVzb3Vy
Y2UgIT0gbV9yZXNvdXJjZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBjaGVja0Fj
dGl2ZVVSSSgiL3NpbXBsZS1zdHlsZS5jc3MiKTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlc291cmNl
UmVjZWl2ZWREYXRhKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgZ3VpbnQ2NCBieXRlc1Jl
Y2VpdmVkKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIHJlc291cmNlRmluaXNoZWQoV2ViS2l0
V2ViUmVzb3VyY2UqIHJlc291cmNlKQotICAgIHsKLSAgICAgICAgaWYgKHJlc291cmNlID09IG1f
cmVzb3VyY2UpCi0gICAgICAgICAgICBjaGVja0FjdGl2ZVVSSSgiL3NpbXBsZS1zdHlsZS5jc3Mi
KTsKLSAgICAgICAgUmVzb3VyY2VzVGVzdDo6cmVzb3VyY2VGaW5pc2hlZChyZXNvdXJjZSk7Ci0g
ICAgfQotCi0gICAgdm9pZCByZXNvdXJjZUZhaWxlZChXZWJLaXRXZWJSZXNvdXJjZSosIEdFcnJv
ciopCi0gICAgewotICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAgIH0KLQotICAg
IENTdHJpbmcgbV9hY3RpdmVVUkk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBjaGVja0FjdGl2ZVVS
SShjb25zdCBjaGFyKiB1cmkpCi0gICAgewotICAgICAgICBBU1NFUlRfQ01QX0NTVFJJTkcobV9h
Y3RpdmVVUkksID09LCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKHVyaSkpOwotICAgIH0KLX07Ci0K
LXN0YXRpYyB2b2lkIHRlc3RXZWJSZXNvdXJjZUFjdGl2ZVVSSShSZXNvdXJjZVVSSVRyYWNraW5n
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXIt
PmdldFVSSUZvclBhdGgoIi9yZWRpcmVjdGVkLWNzcy5odG1sIikuZGF0YSgpKTsKLSAgICB0ZXN0
LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZCgpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0
V2ViUmVzb3VyY2VHZXREYXRhKFJlc291cmNlc1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17
Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIikuZGF0YSgpKTsK
LSAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgYmUgNCBpbnN0ZWFkIG9mIDMsIGJ1dCB3ZSBkb24n
dCBnZXQgdGhlIGNzcyBpbWFnZSByZXNvdXJjZQotICAgIC8vIGR1ZSB0byBidWcgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NTEwLgotICAgIHRlc3QtPndhaXRVbnRp
bFJlc291cmNlc0xvYWRlZCgzKTsKLQotICAgIFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSA9
IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9yZXNvdXJjZSh0ZXN0LT5tX3dlYlZpZXcpOwotICAg
IGdfYXNzZXJ0KHJlc291cmNlKTsKLSAgICB0ZXN0LT5jaGVja1Jlc291cmNlRGF0YShyZXNvdXJj
ZSk7Ci0KLSAgICBHTGlzdCogc3VicmVzb3VyY2VzID0gdGVzdC0+c3VicmVzb3VyY2VzKCk7Ci0g
ICAgZm9yIChHTGlzdCogaXRlbSA9IHN1YnJlc291cmNlczsgaXRlbTsgaXRlbSA9IGdfbGlzdF9u
ZXh0KGl0ZW0pKQotICAgICAgICB0ZXN0LT5jaGVja1Jlc291cmNlRGF0YShXRUJLSVRfV0VCX1JF
U09VUkNFKGl0ZW0tPmRhdGEpKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdSZXNvdXJj
ZXNIaXN0b3J5Q2FjaGUoU2luZ2xlUmVzb3VyY2VMb2FkVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRl
cikKLXsKLSAgICBDU3RyaW5nIGphdmFzY3JpcHRVUkkgPSBrU2VydmVyLT5nZXRVUklGb3JQYXRo
KCIvamF2YXNjcmlwdC5odG1sIik7Ci0gICAgdGVzdC0+bG9hZFVSSShqYXZhc2NyaXB0VVJJLmRh
dGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWQoKTsKLSAgICBX
ZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVz
b3VyY2UodGVzdC0+bV93ZWJWaWV3KTsKLSAgICBnX2Fzc2VydChyZXNvdXJjZSk7Ci0gICAgZ19h
c3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaShyZXNvdXJjZSksID09LCBq
YXZhc2NyaXB0VVJJLmRhdGEoKSk7Ci0KLSAgICBDU3RyaW5nIHNpbXBsZVN0eWxlQ1NTVVJJID0g
a1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3NpbXBsZS1zdHlsZS1jc3MuaHRtbCIpOwotICAgIHRl
c3QtPmxvYWRVUkkoc2ltcGxlU3R5bGVDU1NVUkkuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50
aWxSZXNvdXJjZUxvYWRGaW5pc2hlZCgpOwotICAgIHJlc291cmNlID0gd2Via2l0X3dlYl92aWV3
X2dldF9tYWluX3Jlc291cmNlKHRlc3QtPm1fd2ViVmlldyk7Ci0gICAgZ19hc3NlcnQocmVzb3Vy
Y2UpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3Jlc291cmNlX2dldF91cmkocmVz
b3VyY2UpLCA9PSwgc2ltcGxlU3R5bGVDU1NVUkkuZGF0YSgpKTsKLQotICAgIHRlc3QtPmdvQmFj
aygpOwotICAgIHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlzaGVkKCk7Ci0gICAgcmVz
b3VyY2UgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2UodGVzdC0+bV93ZWJWaWV3
KTsKLSAgICBnX2Fzc2VydChyZXNvdXJjZSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93
ZWJfcmVzb3VyY2VfZ2V0X3VyaShyZXNvdXJjZSksID09LCBqYXZhc2NyaXB0VVJJLmRhdGEoKSk7
Ci0KLSAgICB0ZXN0LT5nb0ZvcndhcmQoKTsKLSAgICB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxv
YWRGaW5pc2hlZCgpOwotICAgIHJlc291cmNlID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX3Jl
c291cmNlKHRlc3QtPm1fd2ViVmlldyk7Ci0gICAgZ19hc3NlcnQocmVzb3VyY2UpOwotICAgIGdf
YXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3Jlc291cmNlX2dldF91cmkocmVzb3VyY2UpLCA9PSwg
c2ltcGxlU3R5bGVDU1NVUkkuZGF0YSgpKTsKLX0KLQotY2xhc3MgU2VuZFJlcXVlc3RUZXN0OiBw
dWJsaWMgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RF
U1RfRklYVFVSRShTZW5kUmVxdWVzdFRlc3QpOwotCi0gICAgdm9pZCByZXNvdXJjZVNlbnRSZXF1
ZXN0KFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgV2ViS2l0VVJJUmVxdWVzdCogcmVxdWVz
dCwgV2ViS2l0VVJJUmVzcG9uc2UqIHJlZGlyZWN0UmVzcG9uc2UpCi0gICAgewotICAgICAgICBp
ZiAocmVzb3VyY2UgIT0gbV9yZXNvdXJjZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICBpZiAocmVkaXJlY3RSZXNwb25zZSkKLSAgICAgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJr
aXRfdXJpX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KSwgPT0sIG1fZXhwZWN0ZWROZXdSZXNvdXJj
ZVVSSUFmdGVyUmVkaXJlY3Rpb24uZGF0YSgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
Z19hc3NlcnRfY21wc3RyKHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfdXJpKHJlcXVlc3QpLCA9PSwg
bV9leHBlY3RlZE5ld1Jlc291cmNlVVJJLmRhdGEoKSk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0
cih3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KSwgPT0sIHdlYmtpdF93ZWJfcmVz
b3VyY2VfZ2V0X3VyaShyZXNvdXJjZSkpOwotCi0gICAgICAgIFNpbmdsZVJlc291cmNlTG9hZFRl
c3Q6OnJlc291cmNlU2VudFJlcXVlc3QocmVzb3VyY2UsIHJlcXVlc3QsIHJlZGlyZWN0UmVzcG9u
c2UpOwotICAgIH0KLQotICAgIHZvaWQgcmVzb3VyY2VGYWlsZWQoV2ViS2l0V2ViUmVzb3VyY2Uq
IHJlc291cmNlLCBHRXJyb3IqIGVycm9yKQotICAgIHsKLSAgICAgICAgaWYgKHJlc291cmNlICE9
IG1fcmVzb3VyY2UpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgZ19hc3NlcnRfY21w
c3RyKHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaShyZXNvdXJjZSksID09LCBtX2V4cGVjdGVk
Q2FuY2VsbGVkUmVzb3VyY2VVUkkuZGF0YSgpKTsKLSAgICAgICAgZ19hc3NlcnRfZXJyb3IoZXJy
b3IsIFdFQktJVF9ORVRXT1JLX0VSUk9SLCBXRUJLSVRfTkVUV09SS19FUlJPUl9DQU5DRUxMRUQp
OwotCi0gICAgICAgIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OnJlc291cmNlRmFpbGVkKHJlc291
cmNlLCBlcnJvcik7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRFeHBlY3RlZE5ld1Jlc291cmNlVVJJ
KGNvbnN0IENTdHJpbmcmIHVyaSkKLSAgICB7Ci0gICAgICAgIG1fZXhwZWN0ZWROZXdSZXNvdXJj
ZVVSSSA9IHVyaTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldEV4cGVjdGVkQ2FuY2VsbGVkUmVzb3Vy
Y2VVUkkoY29uc3QgQ1N0cmluZyYgdXJpKQotICAgIHsKLSAgICAgICAgbV9leHBlY3RlZENhbmNl
bGxlZFJlc291cmNlVVJJID0gdXJpOwotICAgIH0KLQotICAgIHZvaWQgc2V0RXhwZWN0ZWROZXdS
ZXNvdXJjZVVSSUFmdGVyUmVkaXJlY3Rpb24oY29uc3QgQ1N0cmluZyYgdXJpKQotICAgIHsKLSAg
ICAgICAgbV9leHBlY3RlZE5ld1Jlc291cmNlVVJJQWZ0ZXJSZWRpcmVjdGlvbiA9IHVyaTsKLSAg
ICB9Ci0KLSAgICBDU3RyaW5nIG1fZXhwZWN0ZWROZXdSZXNvdXJjZVVSSTsKLSAgICBDU3RyaW5n
IG1fZXhwZWN0ZWRDYW5jZWxsZWRSZXNvdXJjZVVSSTsKLSAgICBDU3RyaW5nIG1fZXhwZWN0ZWRO
ZXdSZXNvdXJjZVVSSUFmdGVyUmVkaXJlY3Rpb247Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0V2Vi
UmVzb3VyY2VTZW5kUmVxdWVzdChTZW5kUmVxdWVzdFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIp
Ci17Ci0gICAgdGVzdC0+c2V0RXhwZWN0ZWROZXdSZXNvdXJjZVVSSShrU2VydmVyLT5nZXRVUklG
b3JQYXRoKCIvamF2YXNjcmlwdC5qcyIpKTsKLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdl
dFVSSUZvclBhdGgoInJlbGF0aXZlLWphdmFzY3JpcHQuaHRtbCIpLmRhdGEoKSk7Ci0gICAgdGVz
dC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5t
X3Jlc291cmNlKTsKLQotICAgIFZlY3RvcjxTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpMb2FkRXZl
bnRzPiYgZXZlbnRzID0gdGVzdC0+bV9sb2FkRXZlbnRzOwotICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHMuc2l6ZSgpLCA9PSwgNSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0s
IFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlN0YXJ0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHNbMV0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpTZW50UmVxdWVzdCk7Ci0gICAg
Z19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlJl
Y2VpdmVkUmVzcG9uc2UpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbM10sID09LCBTaW5n
bGVSZXNvdXJjZUxvYWRUZXN0OjpSZWNlaXZlZERhdGEpOwotICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHNbNF0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpGaW5pc2hlZCk7Ci0gICAgZXZl
bnRzLmNsZWFyKCk7Ci0KLSAgICAvLyBDYW5jZWwgcmVxdWVzdC4KLSAgICB0ZXN0LT5zZXRFeHBl
Y3RlZENhbmNlbGxlZFJlc291cmNlVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9jYW5jZWwt
dGhpcy5qcyIpKTsKLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9y
ZXNvdXJjZS10by1jYW5jZWwuaHRtbCIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsUmVz
b3VyY2VMb2FkRmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX3Jlc291cmNlKTsKLQot
ICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgMyk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KGV2ZW50c1swXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlN0YXJ0ZWQpOwot
ICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0
OjpGYWlsZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBTaW5nbGVSZXNv
dXJjZUxvYWRUZXN0OjpGaW5pc2hlZCk7Ci0gICAgZXZlbnRzLmNsZWFyKCk7Ci0KLSAgICAvLyBV
UkkgY2hhbmdlZCBhZnRlciBhIHJlZGlyZWN0LgotICAgIHRlc3QtPnNldEV4cGVjdGVkTmV3UmVz
b3VyY2VVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3JlZGlyZWN0ZWQuanMiKSk7Ci0gICAg
dGVzdC0+c2V0RXhwZWN0ZWROZXdSZXNvdXJjZVVSSUFmdGVyUmVkaXJlY3Rpb24oa1NlcnZlci0+
Z2V0VVJJRm9yUGF0aCgiL2phdmFzY3JpcHQuanMiKSk7Ci0gICAgdGVzdC0+bG9hZFVSSShrU2Vy
dmVyLT5nZXRVUklGb3JQYXRoKCJyZWRpcmVjdGVkLWphdmFzY3JpcHQuaHRtbCIpLmRhdGEoKSk7
Ci0gICAgdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWQoKTsKLSAgICBnX2Fzc2Vy
dCh0ZXN0LT5tX3Jlc291cmNlKTsKLQotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgp
LCA9PSwgNik7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIFNpbmdsZVJlc291
cmNlTG9hZFRlc3Q6OlN0YXJ0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09
LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpTZW50UmVxdWVzdCk7Ci0gICAgZ19hc3NlcnRfY21w
aW50KGV2ZW50c1syXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlJlZGlyZWN0ZWQpOwot
ICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbM10sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0
OjpSZWNlaXZlZFJlc3BvbnNlKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzRdLCA9PSwg
U2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6UmVjZWl2ZWREYXRhKTsKLSAgICBnX2Fzc2VydF9jbXBp
bnQoZXZlbnRzWzVdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6RmluaXNoZWQpOwotICAg
IGV2ZW50cy5jbGVhcigpOwotCi0gICAgLy8gQ2FuY2VsIGFmdGVyIGEgcmVkaXJlY3QuCi0gICAg
dGVzdC0+c2V0RXhwZWN0ZWROZXdSZXNvdXJjZVVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIv
cmVkaXJlY3RlZC10by1jYW5jZWwuanMiKSk7Ci0gICAgdGVzdC0+c2V0RXhwZWN0ZWRDYW5jZWxs
ZWRSZXNvdXJjZVVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvcmVkaXJlY3RlZC10by1jYW5j
ZWwuanMiKSk7Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvcmVk
aXJlY3RlZC10by1jYW5jZWwuaHRtbCIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsUmVz
b3VyY2VMb2FkRmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX3Jlc291cmNlKTsKLQot
ICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgNCk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KGV2ZW50c1swXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlN0YXJ0ZWQpOwot
ICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0
OjpTZW50UmVxdWVzdCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIFNpbmds
ZVJlc291cmNlTG9hZFRlc3Q6OkZhaWxlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sz
XSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OkZpbmlzaGVkKTsKLSAgICBldmVudHMuY2xl
YXIoKTsKLX0KLQotc3RhdGljIHZvaWQgYWRkQ2FjaGVIVFRQSGVhZGVyc1RvUmVzcG9uc2UoU291
cE1lc3NhZ2UqIG1lc3NhZ2UpCi17Ci0gICAgLy8gVGhlIGFjdHVhbCBkYXRlIGRvZXNuJ3QgcmVh
bGx5IG1hdHRlci4KLSAgICBTb3VwRGF0ZSogc291cERhdGUgPSBzb3VwX2RhdGVfbmV3X2Zyb21f
bm93KDApOwotICAgIEdPd25QdHI8Y2hhcj4gZGF0ZShzb3VwX2RhdGVfdG9fc3RyaW5nKHNvdXBE
YXRlLCBTT1VQX0RBVEVfSFRUUCkpOwotICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZCht
ZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiTGFzdC1Nb2RpZmllZCIsIGRhdGUuZ2V0KCkpOwot
ICAgIHNvdXBfZGF0ZV9mcmVlKHNvdXBEYXRlKTsKLSAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19h
cHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIkNhY2hlLWNvbnRyb2wiLCAicHVibGlj
LCBtYXgtYWdlPTMxNTM2MDAwIik7Ci0gICAgc291cERhdGUgPSBzb3VwX2RhdGVfbmV3X2Zyb21f
bm93KDM2MDApOwotICAgIGRhdGUuc2V0KHNvdXBfZGF0ZV90b19zdHJpbmcoc291cERhdGUsIFNP
VVBfREFURV9IVFRQKSk7Ci0gICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1lc3NhZ2Ut
PnJlc3BvbnNlX2hlYWRlcnMsICJFeHBpcmVzIiwgZGF0ZS5nZXQoKSk7Ci0gICAgc291cF9kYXRl
X2ZyZWUoc291cERhdGUpOwotfQotCi1zdGF0aWMgdm9pZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2Vy
dmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBjaGFyKiBwYXRoLCBHSGFz
aFRhYmxlKiwgU291cENsaWVudENvbnRleHQqLCBncG9pbnRlcikKLXsKLSAgICBpZiAobWVzc2Fn
ZS0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgewotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0
X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09V
UF9TVEFUVVNfT0spOwotCi0gICAgaWYgKHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9vbmUobWVz
c2FnZS0+cmVxdWVzdF9oZWFkZXJzLCAiSWYtTW9kaWZpZWQtU2luY2UiKSkgewotICAgICAgICBz
b3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfTU9ESUZJRUQp
OwotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9i
b2R5KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChnX3N0cl9lcXVhbChwYXRo
LCAiLyIpKSB7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNw
b25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGtJbmRleEh0bWwsIHN0cmxlbihrSW5kZXhI
dG1sKSk7Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2phdmFzY3JpcHQuaHRt
bCIpKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBqYXZhc2NyaXB0SHRtbCA9ICI8aHRt
bD48aGVhZD48c2NyaXB0IGxhbmd1YWdlPSdqYXZhc2NyaXB0JyBzcmM9Jy9qYXZhc2NyaXB0Lmpz
Jz48L3NjcmlwdD48L2hlYWQ+PGJvZHk+PC9ib2R5PjwvaHRtbD4iOwotICAgICAgICBzb3VwX21l
c3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RB
VElDLCBqYXZhc2NyaXB0SHRtbCwgc3RybGVuKGphdmFzY3JpcHRIdG1sKSk7Ci0gICAgfSBlbHNl
IGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2ltYWdlLmh0bWwiKSkgewotICAgICAgICBzdGF0aWMg
Y29uc3QgY2hhciogaW1hZ2VIVE1MID0gIjxodG1sPjxib2R5PjxpbWcgc3JjPScvYmxhbmsuaWNv
Jz48L2ltZz48L2JvZHk+PC9odG1sPiI7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVu
ZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGltYWdlSFRNTCwg
c3RybGVuKGltYWdlSFRNTCkpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9y
ZWRpcmVjdGVkLWNzcy5odG1sIikpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHJlZGly
ZWN0ZWRDU1NIdG1sID0gIjxodG1sPjxoZWFkPjxsaW5rIHJlbD0nc3R5bGVzaGVldCcgaHJlZj0n
L3JlZGlyZWN0ZWQuY3NzJyB0eXBlPSd0ZXh0L2Nzcyc+PC9oZWFkPjxib2R5PjwvaHRtbD4iOwot
ICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwg
U09VUF9NRU1PUllfU1RBVElDLCByZWRpcmVjdGVkQ1NTSHRtbCwgc3RybGVuKHJlZGlyZWN0ZWRD
U1NIdG1sKSk7Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2ludmFsaWQtY3Nz
Lmh0bWwiKSkgewotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogaW52YWxpZENTU0h0bWwgPSAi
PGh0bWw+PGhlYWQ+PGxpbmsgcmVsPSdzdHlsZXNoZWV0JyBocmVmPScvaW52YWxpZC5jc3MnIHR5
cGU9J3RleHQvY3NzJz48L2hlYWQ+PGJvZHk+PC9odG1sPiI7Ci0gICAgICAgIHNvdXBfbWVzc2Fn
ZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMs
IGludmFsaWRDU1NIdG1sLCBzdHJsZW4oaW52YWxpZENTU0h0bWwpKTsKLSAgICB9IGVsc2UgaWYg
KGdfc3RyX2VxdWFsKHBhdGgsICIvc2ltcGxlLXN0eWxlLWNzcy5odG1sIikpIHsKLSAgICAgICAg
c3RhdGljIGNvbnN0IGNoYXIqIHNpbXBsZVN0eWxlQ1NTSHRtbCA9ICI8aHRtbD48aGVhZD48bGlu
ayByZWw9J3N0eWxlc2hlZXQnIGhyZWY9Jy9zaW1wbGUtc3R5bGUuY3NzJyB0eXBlPSd0ZXh0L2Nz
cyc+PC9oZWFkPjxib2R5PjwvaHRtbD4iOwotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBl
bmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBzaW1wbGVTdHls
ZUNTU0h0bWwsIHN0cmxlbihzaW1wbGVTdHlsZUNTU0h0bWwpKTsKLSAgICB9IGVsc2UgaWYgKGdf
c3RyX2VxdWFsKHBhdGgsICIvc3R5bGUuY3NzIikpIHsKLSAgICAgICAgc291cF9tZXNzYWdlX2Jv
ZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywga1N0
eWxlQ1NTLCBzdHJsZW4oa1N0eWxlQ1NTKSk7Ci0gICAgICAgIGFkZENhY2hlSFRUUEhlYWRlcnNU
b1Jlc3BvbnNlKG1lc3NhZ2UpOwotICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQo
bWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIkNvbnRlbnQtVHlwZSIsICJ0ZXh0L2NzcyIpOwot
ICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9qYXZhc2NyaXB0LmpzIikpIHsKLSAg
ICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNP
VVBfTUVNT1JZX1NUQVRJQywga0phdmFzY3JpcHQsIHN0cmxlbihrSmF2YXNjcmlwdCkpOwotICAg
ICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVy
cywgIkNvbnRlbnQtVHlwZSIsICJ0ZXh0L2phdmFzY3JpcHQiKTsKLSAgICAgICAgc291cF9tZXNz
YWdlX2hlYWRlcnNfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJDb250ZW50LURp
c3Bvc2l0aW9uIiwgImZpbGVuYW1lPUphdmFTY3JpcHQuanMiKTsKLSAgICB9IGVsc2UgaWYgKGdf
c3RyX2VxdWFsKHBhdGgsICIvcmVsYXRpdmUtamF2YXNjcmlwdC5odG1sIikpIHsKLSAgICAgICAg
c3RhdGljIGNvbnN0IGNoYXIqIGphdmFzY3JpcHRSZWxhdGl2ZUhUTUwgPSAiPGh0bWw+PGhlYWQ+
PHNjcmlwdCBsYW5ndWFnZT0namF2YXNjcmlwdCcgc3JjPSdyZW1vdmUtdGhpcy9qYXZhc2NyaXB0
LmpzJz48L3NjcmlwdD48L2hlYWQ+PGJvZHk+PC9ib2R5PjwvaHRtbD4iOwotICAgICAgICBzb3Vw
X21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllf
U1RBVElDLCBqYXZhc2NyaXB0UmVsYXRpdmVIVE1MLCBzdHJsZW4oamF2YXNjcmlwdFJlbGF0aXZl
SFRNTCkpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9yZXNvdXJjZS10by1j
YW5jZWwuaHRtbCIpKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiByZXNvdXJjZVRvQ2Fu
Y2VsSFRNTCA9ICI8aHRtbD48aGVhZD48c2NyaXB0IGxhbmd1YWdlPSdqYXZhc2NyaXB0JyBzcmM9
J2NhbmNlbC10aGlzLmpzJz48L3NjcmlwdD48L2hlYWQ+PGJvZHk+PC9ib2R5PjwvaHRtbD4iOwot
ICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwg
U09VUF9NRU1PUllfU1RBVElDLCByZXNvdXJjZVRvQ2FuY2VsSFRNTCwgc3RybGVuKHJlc291cmNl
VG9DYW5jZWxIVE1MKSk7Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3JlZGly
ZWN0ZWQtamF2YXNjcmlwdC5odG1sIikpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGph
dmFzY3JpcHRSZWxhdGl2ZUhUTUwgPSAiPGh0bWw+PGhlYWQ+PHNjcmlwdCBsYW5ndWFnZT0namF2
YXNjcmlwdCcgc3JjPScvcmVkaXJlY3RlZC5qcyc+PC9zY3JpcHQ+PC9oZWFkPjxib2R5PjwvYm9k
eT48L2h0bWw+IjsKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJl
c3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgamF2YXNjcmlwdFJlbGF0aXZlSFRNTCwg
c3RybGVuKGphdmFzY3JpcHRSZWxhdGl2ZUhUTUwpKTsKLSAgICB9IGVsc2UgaWYgKGdfc3RyX2Vx
dWFsKHBhdGgsICIvcmVkaXJlY3RlZC10by1jYW5jZWwuaHRtbCIpKSB7Ci0gICAgICAgIHN0YXRp
YyBjb25zdCBjaGFyKiBqYXZhc2NyaXB0UmVsYXRpdmVIVE1MID0gIjxodG1sPjxoZWFkPjxzY3Jp
cHQgbGFuZ3VhZ2U9J2phdmFzY3JpcHQnIHNyYz0nL3JlZGlyZWN0ZWQtdG8tY2FuY2VsLmpzJz48
L3NjcmlwdD48L2hlYWQ+PGJvZHk+PC9ib2R5PjwvaHRtbD4iOwotICAgICAgICBzb3VwX21lc3Nh
Z2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElD
LCBqYXZhc2NyaXB0UmVsYXRpdmVIVE1MLCBzdHJsZW4oamF2YXNjcmlwdFJlbGF0aXZlSFRNTCkp
OwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9ibGFuay5pY28iKSkgewotICAg
ICAgICBHT3duUHRyPGNoYXI+IGZpbGVQYXRoKGdfYnVpbGRfZmlsZW5hbWUoVGVzdDo6Z2V0V2Vi
S2l0MVRlc3RSZXNvdWNlc0RpcigpLmRhdGEoKSwgcGF0aCwgTlVMTCkpOwotICAgICAgICBjaGFy
KiBjb250ZW50czsKLSAgICAgICAgZ3NpemUgY29udGVudHNMZW5ndGg7Ci0gICAgICAgIGdfZmls
ZV9nZXRfY29udGVudHMoZmlsZVBhdGguZ2V0KCksICZjb250ZW50cywgJmNvbnRlbnRzTGVuZ3Ro
LCAwKTsKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNl
X2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGNvbnRlbnRzLCBjb250ZW50c0xlbmd0aCk7Ci0gICAg
ICAgIGFkZENhY2hlSFRUUEhlYWRlcnNUb1Jlc3BvbnNlKG1lc3NhZ2UpOwotICAgICAgICBzb3Vw
X21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIkNvbnRl
bnQtVHlwZSIsICJpbWFnZS92bmQubWljcm9zb2Z0Lmljb24iKTsKLSAgICB9IGVsc2UgaWYgKGdf
c3RyX2VxdWFsKHBhdGgsICIvc2ltcGxlLXN0eWxlLmNzcyIpKSB7Ci0gICAgICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBzaW1wbGVDU1MgPQotICAgICAgICAgICAgImJvZHkgeyIKLSAgICAgICAgICAg
ICIgICAgbWFyZ2luOiAwcHg7IgotICAgICAgICAgICAgIiAgICBwYWRkaW5nOiAwcHg7IgotICAg
ICAgICAgICAgIn0iOwotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+
cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBzaW1wbGVDU1MsIHN0cmxlbihzaW1w
bGVDU1MpKTsKLSAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1lc3NhZ2UtPnJl
c3BvbnNlX2hlYWRlcnMsICJDb250ZW50LVR5cGUiLCAidGV4dC9jc3MiKTsKLSAgICB9IGVsc2Ug
aWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvcmVkaXJlY3RlZC5jc3MiKSkgewotICAgICAgICBzb3Vw
X21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19NT1ZFRF9QRVJNQU5FTlRM
WSk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChtZXNzYWdlLT5yZXNwb25z
ZV9oZWFkZXJzLCAiTG9jYXRpb24iLCAiL3NpbXBsZS1zdHlsZS5jc3MiKTsKLSAgICB9IGVsc2Ug
aWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvcmVkaXJlY3RlZC5qcyIpKSB7Ci0gICAgICAgIHNvdXBf
bWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX01PVkVEX1BFUk1BTkVOVExZ
KTsKLSAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNl
X2hlYWRlcnMsICJMb2NhdGlvbiIsICIvcmVtb3ZlLXRoaXMvamF2YXNjcmlwdC5qcyIpOwotICAg
IH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9yZWRpcmVjdGVkLXRvLWNhbmNlbC5qcyIp
KSB7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVT
X01PVkVEX1BFUk1BTkVOVExZKTsKLSAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5k
KG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJMb2NhdGlvbiIsICIvY2FuY2VsLXRoaXMuanMi
KTsKLSAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvaW52YWxpZC5jc3MiKSkKLSAg
ICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfQ0FOVF9D
T05ORUNUKTsKLSAgICBlbHNlCi0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3Nh
Z2UsIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7Ci0gICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxl
dGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7Ci19Ci0KLXZvaWQgYmVmb3JlQWxsKCkKLXsKLSAg
ICBrU2VydmVyID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIoKTsKLSAgICBrU2VydmVyLT5ydW4oc2Vy
dmVyQ2FsbGJhY2spOwotCi0gICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF93ZWJfZXh0ZW5zaW9u
c19kaXJlY3Rvcnkod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCksIFdFQktJVF9URVNU
X1dFQl9FWFRFTlNJT05TX0RJUik7Ci0KLSAgICBSZXNvdXJjZXNUZXN0OjphZGQoIldlYktpdFdl
YlZpZXciLCAicmVzb3VyY2VzIiwgdGVzdFdlYlZpZXdSZXNvdXJjZXMpOwotICAgIFNpbmdsZVJl
c291cmNlTG9hZFRlc3Q6OmFkZCgiV2ViS2l0V2ViUmVzb3VyY2UiLCAibG9hZGluZyIsIHRlc3RX
ZWJSZXNvdXJjZUxvYWRpbmcpOwotICAgIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OmFkZCgiV2Vi
S2l0V2ViUmVzb3VyY2UiLCAicmVzcG9uc2UiLCB0ZXN0V2ViUmVzb3VyY2VSZXNwb25zZSk7Ci0g
ICAgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6YWRkKCJXZWJLaXRXZWJSZXNvdXJjZSIsICJtaW1l
LXR5cGUiLCB0ZXN0V2ViUmVzb3VyY2VNaW1lVHlwZSk7Ci0gICAgU2luZ2xlUmVzb3VyY2VMb2Fk
VGVzdDo6YWRkKCJXZWJLaXRXZWJSZXNvdXJjZSIsICJzdWdnZXN0ZWQtZmlsZW5hbWUiLCB0ZXN0
V2ViUmVzb3VyY2VTdWdnZXN0ZWRGaWxlbmFtZSk7Ci0gICAgUmVzb3VyY2VVUklUcmFja2luZ1Rl
c3Q6OmFkZCgiV2ViS2l0V2ViUmVzb3VyY2UiLCAiYWN0aXZlLXVyaSIsIHRlc3RXZWJSZXNvdXJj
ZUFjdGl2ZVVSSSk7Ci0gICAgUmVzb3VyY2VzVGVzdDo6YWRkKCJXZWJLaXRXZWJSZXNvdXJjZSIs
ICJnZXQtZGF0YSIsIHRlc3RXZWJSZXNvdXJjZUdldERhdGEpOwotICAgIFNpbmdsZVJlc291cmNl
TG9hZFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJoaXN0b3J5LWNhY2hlIiwgdGVzdFdlYlZp
ZXdSZXNvdXJjZXNIaXN0b3J5Q2FjaGUpOwotICAgIFNlbmRSZXF1ZXN0VGVzdDo6YWRkKCJXZWJL
aXRXZWJQYWdlIiwgInNlbmQtcmVxdWVzdCIsIHRlc3RXZWJSZXNvdXJjZVNlbmRSZXF1ZXN0KTsK
LX0KLQotdm9pZCBhZnRlckFsbCgpCi17Ci0gICAgZGVsZXRlIGtTZXJ2ZXI7Ci19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0U1NMLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RTU0wuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzE4MGM1YmM4YzkyNDg3YmMxMzRhMTY0YmJkNGRm
MmI4MmI3YTQyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RTU0wuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMjkwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdh
bGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiTG9hZFRyYWNraW5nVGVz
dC5oIgotI2luY2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKLSNpbmNsdWRlIDxndGsvZ3RrLmg+
Ci0KLXN0YXRpYyBXZWJLaXRUZXN0U2VydmVyKiBrSHR0cHNTZXJ2ZXI7Ci1zdGF0aWMgV2ViS2l0
VGVzdFNlcnZlcioga0h0dHBTZXJ2ZXI7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBpbmRleEhUTUwg
PSAiPGh0bWw+PGJvZHk+VGVzdGluZyBXZWJLaXQyR1RLKyBTU0w8L2JvZHk+PC9odG1sbD4iOwot
c3RhdGljIGNvbnN0IGNoYXIqIGluc2VjdXJlQ29udGVudEhUTUwgPSAiPGh0bWw+PHNjcmlwdCBz
cmM9XCIlc1wiPjwvc2NyaXB0Pjxib2R5PjxwPlRleHQgKyBpbWFnZSA8aW1nIHNyYz1cIiVzXCIg
YWxpZ249XCJyaWdodFwiLz48L3A+PC9ib2R5PjwvaHRtbD4iOwotc3RhdGljIGNvbnN0IGNoYXIg
VExTRXhwZWN0ZWRTdWNjZXNzVGl0bGVbXSA9ICJXZWJLaXQyR3RrKyBUTFMgcGVybWlzc2lvbiB0
ZXN0IjsKLXN0YXRpYyBjb25zdCBjaGFyIFRMU1N1Y2Nlc3NIVE1MU3RyaW5nW10gPSAiPGh0bWw+
PGhlYWQ+PHRpdGxlPldlYktpdDJHdGsrIFRMUyBwZXJtaXNzaW9uIHRlc3Q8L3RpdGxlPjwvaGVh
ZD48Ym9keT48L2JvZHk+PC9odG1sPiI7Ci0KLWNsYXNzIFNTTFRlc3Q6IHB1YmxpYyBMb2FkVHJh
Y2tpbmdUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFNTTFRlc3Qp
OwotCi0gICAgU1NMVGVzdCgpCi0gICAgICAgIDogbV90bHNFcnJvcnMoc3RhdGljX2Nhc3Q8R1Rs
c0NlcnRpZmljYXRlRmxhZ3M+KDApKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
cHJvdmlzaW9uYWxMb2FkRmFpbGVkKGNvbnN0IGdjaGFyKiBmYWlsaW5nVVJJLCBHRXJyb3IqIGVy
cm9yKQotICAgIHsKLSAgICAgICAgZ19hc3NlcnRfZXJyb3IoZXJyb3IsIFNPVVBfSFRUUF9FUlJP
UiwgU09VUF9TVEFUVVNfU1NMX0ZBSUxFRCk7Ci0gICAgICAgIExvYWRUcmFja2luZ1Rlc3Q6OnBy
b3Zpc2lvbmFsTG9hZEZhaWxlZChmYWlsaW5nVVJJLCBlcnJvcik7Ci0gICAgfQotCi0gICAgdmly
dHVhbCB2b2lkIGxvYWRDb21taXR0ZWQoKQotICAgIHsKLSAgICAgICAgR1Rsc0NlcnRpZmljYXRl
KiBjZXJ0aWZpY2F0ZSA9IDA7Ci0gICAgICAgIHdlYmtpdF93ZWJfdmlld19nZXRfdGxzX2luZm8o
bV93ZWJWaWV3LCAmY2VydGlmaWNhdGUsICZtX3Rsc0Vycm9ycyk7Ci0gICAgICAgIG1fY2VydGlm
aWNhdGUgPSBjZXJ0aWZpY2F0ZTsKLSAgICAgICAgTG9hZFRyYWNraW5nVGVzdDo6bG9hZENvbW1p
dHRlZCgpOwotICAgIH0KLQotICAgIHZvaWQgd2FpdFVudGlsTG9hZEZpbmlzaGVkKCkKLSAgICB7
Ci0gICAgICAgIG1fY2VydGlmaWNhdGUgPSAwOwotICAgICAgICBtX3Rsc0Vycm9ycyA9IHN0YXRp
Y19jYXN0PEdUbHNDZXJ0aWZpY2F0ZUZsYWdzPigwKTsKLSAgICAgICAgTG9hZFRyYWNraW5nVGVz
dDo6d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgfQotCi0gICAgR1JlZlB0cjxHVGxzQ2Vy
dGlmaWNhdGU+IG1fY2VydGlmaWNhdGU7Ci0gICAgR1Rsc0NlcnRpZmljYXRlRmxhZ3MgbV90bHNF
cnJvcnM7Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0U1NMKFNTTFRlc3QqIHRlc3QsIGdjb25zdHBv
aW50ZXIpCi17Ci0gICAgdGVzdC0+bG9hZFVSSShrSHR0cHNTZXJ2ZXItPmdldFVSSUZvclBhdGgo
Ii8iKS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGdf
YXNzZXJ0KHRlc3QtPm1fY2VydGlmaWNhdGUpOwotICAgIC8vIFdlIGFsd2F5cyBleHBlY3QgZXJy
b3JzIGJlY2F1c2Ugd2UgYXJlIHVzaW5nIGEgc2VsZi1zaWduZWQgY2VydGlmaWNhdGUsCi0gICAg
Ly8gYnV0IG9ubHkgR19UTFNfQ0VSVElGSUNBVEVfVU5LTk9XTl9DQSBmbGFncyBzaG91bGQgYmUg
cHJlc2VudC4KLSAgICBnX2Fzc2VydCh0ZXN0LT5tX3Rsc0Vycm9ycyk7Ci0gICAgZ19hc3NlcnRf
Y21wdWludCh0ZXN0LT5tX3Rsc0Vycm9ycywgPT0sIEdfVExTX0NFUlRJRklDQVRFX1VOS05PV05f
Q0EpOwotCi0gICAgLy8gTm9uIEhUVFBTIGxvYWRzIHNob3VsZG4ndCBoYXZlIGEgY2VydGlmaWNh
dGUgbm9yIGVycm9ycy4KLSAgICB0ZXN0LT5sb2FkSHRtbChpbmRleEhUTUwsIDApOwotICAgIHRl
c3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX2NlcnRp
ZmljYXRlKTsKLSAgICBnX2Fzc2VydCghdGVzdC0+bV90bHNFcnJvcnMpOwotfQotCi1jbGFzcyBJ
bnNlY3VyZUNvbnRlbnRUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3QgewotcHVibGljOgotICAgIE1B
S0VfR0xJQl9URVNUX0ZJWFRVUkUoSW5zZWN1cmVDb250ZW50VGVzdCk7Ci0KLSAgICBJbnNlY3Vy
ZUNvbnRlbnRUZXN0KCkKLSAgICAgICAgOiBtX2luc2VjdXJlQ29udGVudFJ1bihmYWxzZSkKLSAg
ICAgICAgLCBtX2luc2VjdXJlQ29udGVudERpc3BsYXllZChmYWxzZSkKLSAgICB7Ci0gICAgICAg
IGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAiaW5zZWN1cmUtY29udGVudC1kZXRlY3RlZCIs
IEdfQ0FMTEJBQ0soaW5zZWN1cmVDb250ZW50RGV0ZWN0ZWRDYWxsYmFjayksIHRoaXMpOwotICAg
IH0KLQotICAgIHN0YXRpYyB2b2lkIGluc2VjdXJlQ29udGVudERldGVjdGVkQ2FsbGJhY2soV2Vi
S2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0SW5zZWN1cmVDb250ZW50RXZlbnQgZXZlbnQsIElu
c2VjdXJlQ29udGVudFRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICBnX2Fzc2VydCh3ZWJWaWV3
ID09IHRlc3QtPm1fd2ViVmlldyk7Ci0KLSAgICAgICAgaWYgKGV2ZW50ID09IFdFQktJVF9JTlNF
Q1VSRV9DT05URU5UX1JVTikKLSAgICAgICAgICAgIHRlc3QtPm1faW5zZWN1cmVDb250ZW50UnVu
ID0gdHJ1ZTsKLQotICAgICAgICBpZiAoZXZlbnQgPT0gV0VCS0lUX0lOU0VDVVJFX0NPTlRFTlRf
RElTUExBWUVEKQotICAgICAgICAgICAgdGVzdC0+bV9pbnNlY3VyZUNvbnRlbnREaXNwbGF5ZWQg
PSB0cnVlOwotICAgIH0KLQotICAgIGJvb2wgbV9pbnNlY3VyZUNvbnRlbnRSdW47Ci0gICAgYm9v
bCBtX2luc2VjdXJlQ29udGVudERpc3BsYXllZDsKLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RJbnNl
Y3VyZUNvbnRlbnQoSW5zZWN1cmVDb250ZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsK
LSAgICB0ZXN0LT5sb2FkVVJJKGtIdHRwc1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2luc2VjdXJl
LWNvbnRlbnQvIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsK
LQotICAgIGdfYXNzZXJ0KHRlc3QtPm1faW5zZWN1cmVDb250ZW50UnVuKTsKLSAgICBnX2Fzc2Vy
dCh0ZXN0LT5tX2luc2VjdXJlQ29udGVudERpc3BsYXllZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRl
c3RUTFNFcnJvcnNQb2xpY3koU1NMVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBX
ZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0ID0gd2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KHRl
c3QtPm1fd2ViVmlldyk7Ci0gICAgLy8gVExTIGVycm9ycyBhcmUgaWdub3JlZCBieSBkZWZhdWx0
LgotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfdGxzX2Vycm9yc19wb2xpY3ko
Y29udGV4dCkgPT0gV0VCS0lUX1RMU19FUlJPUlNfUE9MSUNZX0lHTk9SRSk7Ci0gICAgdGVzdC0+
bG9hZFVSSShrSHR0cHNTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi8iKS5kYXRhKCkpOwotICAgIHRl
c3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX2xvYWRG
YWlsZWQpOwotCi0gICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF90bHNfZXJyb3JzX3BvbGljeShj
b250ZXh0LCBXRUJLSVRfVExTX0VSUk9SU19QT0xJQ1lfRkFJTCk7Ci0gICAgdGVzdC0+bG9hZFVS
SShrSHR0cHNTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi8iKS5kYXRhKCkpOwotICAgIHRlc3QtPndh
aXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fbG9hZEZhaWxlZCk7
Ci0gICAgZ19hc3NlcnQodGVzdC0+bV9sb2FkRXZlbnRzLmNvbnRhaW5zKExvYWRUcmFja2luZ1Rl
c3Q6OlByb3Zpc2lvbmFsTG9hZEZhaWxlZCkpOwotICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX2xvYWRF
dmVudHMuY29udGFpbnMoTG9hZFRyYWNraW5nVGVzdDo6TG9hZENvbW1pdHRlZCkpOwotfQotCi1j
bGFzcyBUTFNFcnJvcnNUZXN0OiBwdWJsaWMgU1NMVGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9H
TElCX1RFU1RfRklYVFVSRShUTFNFcnJvcnNUZXN0KTsKLQotICAgIFRMU0Vycm9yc1Rlc3QoKQot
ICAgIHsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJsb2FkLWZhaWxlZC13
aXRoLXRscy1lcnJvcnMiLCBHX0NBTExCQUNLKHJ1bkxvYWRGYWlsZWRXaXRoVExTRXJyb3JzQ2Fs
bGJhY2spLCB0aGlzKTsKLSAgICB9Ci0KLSAgICB+VExTRXJyb3JzVGVzdCgpCi0gICAgewotICAg
ICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV93ZWJWaWV3LCBHX1NJ
R05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKLSAgICAgICAgaWYgKG1fY2VydGlm
aWNhdGVJbmZvKQotICAgICAgICAgICAgd2Via2l0X2NlcnRpZmljYXRlX2luZm9fZnJlZShtX2Nl
cnRpZmljYXRlSW5mbyk7Ci0gICAgfQotCi0gICAgc3RhdGljIGdib29sZWFuIHJ1bkxvYWRGYWls
ZWRXaXRoVExTRXJyb3JzQ2FsbGJhY2soV2ViS2l0V2ViVmlldyosIFdlYktpdENlcnRpZmljYXRl
SW5mbyogaW5mbywgY29uc3QgY2hhciogaG9zdCwgVExTRXJyb3JzVGVzdCogdGVzdCkKLSAgICB7
Ci0gICAgICAgIHRlc3QtPnJ1bkxvYWRGYWlsZWRXaXRoVExTRXJyb3JzKGluZm8sIGhvc3QpOwot
ICAgICAgICByZXR1cm4gVFJVRTsKLSAgICB9Ci0KLSAgICB2b2lkIHJ1bkxvYWRGYWlsZWRXaXRo
VExTRXJyb3JzKFdlYktpdENlcnRpZmljYXRlSW5mbyogaW5mbywgY29uc3QgY2hhciogaG9zdCkK
LSAgICB7Ci0gICAgICAgIGlmIChtX2NlcnRpZmljYXRlSW5mbykKLSAgICAgICAgICAgIHdlYmtp
dF9jZXJ0aWZpY2F0ZV9pbmZvX2ZyZWUobV9jZXJ0aWZpY2F0ZUluZm8pOwotICAgICAgICBtX2Nl
cnRpZmljYXRlSW5mbyA9IHdlYmtpdF9jZXJ0aWZpY2F0ZV9pbmZvX2NvcHkoaW5mbyk7Ci0gICAg
ICAgIG1faG9zdC5zZXQoZ19zdHJkdXAoaG9zdCkpOwotICAgICAgICBnX21haW5fbG9vcF9xdWl0
KG1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIHZvaWQgd2FpdFVudGlsTG9hZEZhaWxlZFdpdGhU
TFNFcnJvcnMoKQotICAgIHsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwot
ICAgIH0KLQotICAgIFdlYktpdENlcnRpZmljYXRlSW5mbyogY2VydGlmaWNhdGVJbmZvKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtX2NlcnRpZmljYXRlSW5mbzsKLSAgICB9Ci0KLSAgICBjb25z
dCBjaGFyKiBob3N0KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2hvc3QuZ2V0KCk7Ci0gICAg
fQotCi1wcml2YXRlOgotICAgIFdlYktpdENlcnRpZmljYXRlSW5mbyogbV9jZXJ0aWZpY2F0ZUlu
Zm87Ci0gICAgR093blB0cjxjaGFyPiBtX2hvc3Q7Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0TG9h
ZEZhaWxlZFdpdGhUTFNFcnJvcnMoVExTRXJyb3JzVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikK
LXsKLSAgICBXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0ID0gd2Via2l0X3dlYl92aWV3X2dldF9j
b250ZXh0KHRlc3QtPm1fd2ViVmlldyk7Ci0gICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF90bHNf
ZXJyb3JzX3BvbGljeShjb250ZXh0LCBXRUJLSVRfVExTX0VSUk9SU19QT0xJQ1lfRkFJTCk7Ci0K
LSAgICAvLyBUaGUgbG9hZC1mYWlsZWQtd2l0aC10bHMtZXJyb3JzIHNpZ25hbCBzaG91bGQgYmUg
ZW1pdHRlZCB3aGVuIHRoZXJlIGlzIGEgVExTIGZhaWx1cmUuCi0gICAgdGVzdC0+bG9hZFVSSShr
SHR0cHNTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi90ZXN0LXRscy8iKS5kYXRhKCkpOwotICAgIHRl
c3QtPndhaXRVbnRpbExvYWRGYWlsZWRXaXRoVExTRXJyb3JzKCk7Ci0gICAgLy8gVGVzdCB0aGUg
V2ViS2l0Q2VydGlmaWNhdGVJbmZvIEFQSS4KLSAgICBnX2Fzc2VydChHX0lTX1RMU19DRVJUSUZJ
Q0FURSh3ZWJraXRfY2VydGlmaWNhdGVfaW5mb19nZXRfdGxzX2NlcnRpZmljYXRlKHRlc3QtPmNl
cnRpZmljYXRlSW5mbygpKSkpOwotICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2NlcnRpZmlj
YXRlX2luZm9fZ2V0X3Rsc19lcnJvcnModGVzdC0+Y2VydGlmaWNhdGVJbmZvKCkpLCA9PSwgR19U
TFNfQ0VSVElGSUNBVEVfVU5LTk9XTl9DQSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPmhv
c3QoKSwgPT0sIHNvdXBfdXJpX2dldF9ob3N0KGtIdHRwc1NlcnZlci0+YmFzZVVSSSgpKSk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1swXSwgPT0sIExvYWRUcmFja2lu
Z1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0
LT5tX2xvYWRFdmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOwot
Ci0gICAgLy8gVGVzdCBhbGxvd2luZyBhbiBleGNlcHRpb24gZm9yIHRoaXMgY2VydGlmaWNhdGUg
b24gdGhpcyBob3N0LgotICAgIHdlYmtpdF93ZWJfY29udGV4dF9hbGxvd190bHNfY2VydGlmaWNh
dGVfZm9yX2hvc3QoY29udGV4dCwgdGVzdC0+Y2VydGlmaWNhdGVJbmZvKCksIHRlc3QtPmhvc3Qo
KSk7Ci0gICAgLy8gVGhlIHBhZ2Ugc2hvdWxkIG5vdyBsb2FkIHdpdGhvdXQgZXJyb3JzLgotICAg
IHRlc3QtPmxvYWRVUkkoa0h0dHBzU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvdGVzdC10bHMvIiku
ZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIGdfYXNz
ZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQ
cm92aXNpb25hbExvYWRTdGFydGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2Fk
RXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZENvbW1pdHRlZCk7Ci0gICAgZ19h
c3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6
OkxvYWRGaW5pc2hlZCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRf
dGl0bGUodGVzdC0+bV93ZWJWaWV3KSwgPT0sIFRMU0V4cGVjdGVkU3VjY2Vzc1RpdGxlKTsKLX0K
LQotCi1zdGF0aWMgdm9pZCBodHRwc1NlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwg
U291cE1lc3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqLCBTb3Vw
Q2xpZW50Q29udGV4dCosIGdwb2ludGVyKQotewotICAgIGlmIChtZXNzYWdlLT5tZXRob2QgIT0g
U09VUF9NRVRIT0RfR0VUKSB7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3Nh
Z2UsIFNPVVBfU1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi8iKSkgewotICAgICAgICBzb3VwX21lc3Nh
Z2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7Ci0gICAgICAgIHNvdXBfbWVz
c2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFU
SUMsIGluZGV4SFRNTCwgc3RybGVuKGluZGV4SFRNTCkpOwotICAgICAgICBzb3VwX21lc3NhZ2Vf
Ym9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKLSAgICB9IGVsc2UgaWYgKGdf
c3RyX2VxdWFsKHBhdGgsICIvaW5zZWN1cmUtY29udGVudC8iKSkgewotICAgICAgICBHT3duUHRy
PGNoYXI+IHJlc3BvbnNlSFRNTChnX3N0cmR1cF9wcmludGYoaW5zZWN1cmVDb250ZW50SFRNTCwg
a0h0dHBTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi90ZXN0LXNjcmlwdCIpLmRhdGEoKSwga0h0dHBT
ZXJ2ZXItPmdldFVSSUZvclBhdGgoIi90ZXN0LWltYWdlIikuZGF0YSgpKSk7Ci0gICAgICAgIHNv
dXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9S
WV9DT1BZLCByZXNwb25zZUhUTUwuZ2V0KCksIHN0cmxlbihyZXNwb25zZUhUTUwuZ2V0KCkpKTsK
LSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0sp
OwotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9i
b2R5KTsKLSAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvdGVzdC10bHMvIikpIHsK
LSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0sp
OwotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9k
eSwgU09VUF9NRU1PUllfU1RBVElDLCBUTFNTdWNjZXNzSFRNTFN0cmluZywgc3RybGVuKFRMU1N1
Y2Nlc3NIVE1MU3RyaW5nKSk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1l
c3NhZ2UtPnJlc3BvbnNlX2JvZHkpOwotICAgIH0gZWxzZQotICAgICAgICBzb3VwX21lc3NhZ2Vf
c2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfRk9VTkQpOwotfQotCi1zdGF0aWMg
dm9pZCBodHRwU2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSog
bWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSosIFNvdXBDbGllbnRDb250ZXh0
KiwgZ3BvaW50ZXIpCi17Ci0gICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9H
RVQpIHsKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFU
VVNfTk9UX0lNUExFTUVOVEVEKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChn
X3N0cl9lcXVhbChwYXRoLCAiL3Rlc3Qtc2NyaXB0IikpIHsKLSAgICAgICAgR093blB0cjxjaGFy
PiBwYXRoVG9GaWxlKGdfYnVpbGRfZmlsZW5hbWUoVGVzdDo6Z2V0UmVzb3VyY2VzRGlyKCkuZGF0
YSgpLCAibGluay10aXRsZS5qcyIsIE5VTEwpKTsKLSAgICAgICAgY2hhciogY29udGVudHM7Ci0g
ICAgICAgIGdzaXplIGxlbmd0aDsKLSAgICAgICAgZ19maWxlX2dldF9jb250ZW50cyhwYXRoVG9G
aWxlLmdldCgpLCAmY29udGVudHMsICZsZW5ndGgsIDApOwotCi0gICAgICAgIHNvdXBfbWVzc2Fn
ZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBj
b250ZW50cywgbGVuZ3RoKTsKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2Fn
ZSwgU09VUF9TVEFUVVNfT0spOwotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZSht
ZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKLSAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgs
ICIvdGVzdC1pbWFnZSIpKSB7Ci0gICAgICAgIEdPd25QdHI8Y2hhcj4gcGF0aFRvRmlsZShnX2J1
aWxkX2ZpbGVuYW1lKFRlc3Q6OmdldFdlYktpdDFUZXN0UmVzb3VjZXNEaXIoKS5kYXRhKCksICJi
bGFuay5pY28iLCBOVUxMKSk7Ci0gICAgICAgIGNoYXIqIGNvbnRlbnRzOwotICAgICAgICBnc2l6
ZSBsZW5ndGg7Ci0gICAgICAgIGdfZmlsZV9nZXRfY29udGVudHMocGF0aFRvRmlsZS5nZXQoKSwg
JmNvbnRlbnRzLCAmbGVuZ3RoLCAwKTsKLQotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBl
bmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgY29udGVudHMsIGxl
bmd0aCk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RB
VFVTX09LKTsKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVz
cG9uc2VfYm9keSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVz
KG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7Ci19Ci0KLXZvaWQgYmVmb3JlQWxsKCkK
LXsKLSAgICBrSHR0cHNTZXJ2ZXIgPSBuZXcgV2ViS2l0VGVzdFNlcnZlcihXZWJLaXRUZXN0U2Vy
dmVyOjpTZXJ2ZXJIVFRQUyk7Ci0gICAga0h0dHBzU2VydmVyLT5ydW4oaHR0cHNTZXJ2ZXJDYWxs
YmFjayk7Ci0KLSAgICBrSHR0cFNlcnZlciA9IG5ldyBXZWJLaXRUZXN0U2VydmVyKFdlYktpdFRl
c3RTZXJ2ZXI6OlNlcnZlckhUVFApOwotICAgIGtIdHRwU2VydmVyLT5ydW4oaHR0cFNlcnZlckNh
bGxiYWNrKTsKLQotICAgIFNTTFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJzc2wiLCB0ZXN0
U1NMKTsKLSAgICBJbnNlY3VyZUNvbnRlbnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiaW5z
ZWN1cmUtY29udGVudCIsIHRlc3RJbnNlY3VyZUNvbnRlbnQpOwotICAgIC8vIEluIHRoaXMgY2Fz
ZSB0aGUgb3JkZXIgb2YgdGhlIHRlc3RzIGRvZXMgbWF0dGVyIGJlY2F1c2UgdGxzLWVycm9ycy1w
b2xpY3kgdGVzdHMgdGhlIGRlZmF1bHQgcG9saWN5LAotICAgIC8vIGFuZCBleHBlY3RzIHRoYXQg
bm8gZXhjZXB0aW9uIHdpbGwgaGF2ZSBiZWVuIGFkZGVkIGZvciB0aGlzIGNlcnRpZmljYXRlIGFu
ZCBob3N0IHBhaXIgYXMgaXMKLSAgICAvLyBkb25lIGluIHRoZSB0bHMtcGVybWlzc2lvbi1yZXF1
ZXN0IHRlc3QuCi0gICAgU1NMVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInRscy1lcnJvcnMt
cG9saWN5IiwgdGVzdFRMU0Vycm9yc1BvbGljeSk7Ci0gICAgVExTRXJyb3JzVGVzdDo6YWRkKCJX
ZWJLaXRXZWJWaWV3IiwgImxvYWQtZmFpbGVkLXdpdGgtdGxzLWVycm9ycyIsIHRlc3RMb2FkRmFp
bGVkV2l0aFRMU0Vycm9ycyk7Ci19Ci0KLXZvaWQgYWZ0ZXJBbGwoKQotewotICAgIGRlbGV0ZSBr
SHR0cHNTZXJ2ZXI7Ci0gICAgZGVsZXRlIGtIdHRwU2VydmVyOwotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFVJQ2xpZW50LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RVSUNsaWVudC5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjMzBkNmRhNjIxMjA0YzEwNWE2Y2YzY2VlNzZi
ZmJmNTU4MWQzZWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFVJQ2xpZW50LmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDY3OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDExIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIs
MSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViVmlld1Rl
c3QuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dS
ZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0KLXN0YXRpYyBjb25z
dCBjaGFyKiBrQWxlcnREaWFsb2dNZXNzYWdlID0gIldlYktpdEdUSysgYWxlcnQgZGlhbG9nIG1l
c3NhZ2UiOwotc3RhdGljIGNvbnN0IGNoYXIqIGtDb25maXJtRGlhbG9nTWVzc2FnZSA9ICJXZWJL
aXRHVEsrIGNvbmZpcm0gZGlhbG9nIG1lc3NhZ2UiOwotc3RhdGljIGNvbnN0IGNoYXIqIGtQcm9t
cHREaWFsb2dNZXNzYWdlID0gIldlYktpdEdUSysgcHJvbXB0IGRpYWxvZyBtZXNzYWdlIjsKLXN0
YXRpYyBjb25zdCBjaGFyKiBrUHJvbXB0RGlhbG9nUmV0dXJuZWRUZXh0ID0gIldlYktpdEdUSysg
cHJvbXB0IGRpYWxvZyByZXR1cm5lZCB0ZXh0IjsKLQotY2xhc3MgVUlDbGllbnRUZXN0OiBwdWJs
aWMgV2ViVmlld1Rlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoVUlD
bGllbnRUZXN0KTsKLQotICAgIGVudW0gV2ViVmlld0V2ZW50cyB7Ci0gICAgICAgIENyZWF0ZSwK
LSAgICAgICAgUmVhZHlUb1Nob3csCi0gICAgICAgIFJ1bkFzTW9kYWwsCi0gICAgICAgIENsb3Nl
Ci0gICAgfTsKLQotICAgIGNsYXNzIFdpbmRvd1Byb3BlcnRpZXMgewotICAgIHB1YmxpYzoKLSAg
ICAgICAgV2luZG93UHJvcGVydGllcygpCi0gICAgICAgICAgICA6IG1faXNOdWxsKHRydWUpCi0g
ICAgICAgICAgICAsIG1fdG9vbGJhclZpc2libGUodHJ1ZSkKLSAgICAgICAgICAgICwgbV9zdGF0
dXNiYXJWaXNpYmxlKHRydWUpCi0gICAgICAgICAgICAsIG1fc2Nyb2xsYmFyc1Zpc2libGUodHJ1
ZSkKLSAgICAgICAgICAgICwgbV9tZW51YmFyVmlzaWJsZSh0cnVlKQotICAgICAgICAgICAgLCBt
X2xvY2F0aW9uYmFyVmlzaWJsZSh0cnVlKQotICAgICAgICAgICAgLCBtX3Jlc2l6YWJsZSh0cnVl
KQotICAgICAgICAgICAgLCBtX2Z1bGxzY3JlZW4oZmFsc2UpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIG1lbXNldCgmbV9nZW9tZXRyeSwgMCwgc2l6ZW9mKEdka1JlY3RhbmdsZSkpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgV2luZG93UHJvcGVydGllcyhXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzKiB3
aW5kb3dQcm9wZXJ0aWVzKQotICAgICAgICAgICAgOiBtX2lzTnVsbChmYWxzZSkKLSAgICAgICAg
ICAgICwgbV90b29sYmFyVmlzaWJsZSh3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X3Rvb2xi
YXJfdmlzaWJsZSh3aW5kb3dQcm9wZXJ0aWVzKSkKLSAgICAgICAgICAgICwgbV9zdGF0dXNiYXJW
aXNpYmxlKHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRfc3RhdHVzYmFyX3Zpc2libGUod2lu
ZG93UHJvcGVydGllcykpCi0gICAgICAgICAgICAsIG1fc2Nyb2xsYmFyc1Zpc2libGUod2Via2l0
X3dpbmRvd19wcm9wZXJ0aWVzX2dldF9zY3JvbGxiYXJzX3Zpc2libGUod2luZG93UHJvcGVydGll
cykpCi0gICAgICAgICAgICAsIG1fbWVudWJhclZpc2libGUod2Via2l0X3dpbmRvd19wcm9wZXJ0
aWVzX2dldF9tZW51YmFyX3Zpc2libGUod2luZG93UHJvcGVydGllcykpCi0gICAgICAgICAgICAs
IG1fbG9jYXRpb25iYXJWaXNpYmxlKHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRfbG9jYXRp
b25iYXJfdmlzaWJsZSh3aW5kb3dQcm9wZXJ0aWVzKSkKLSAgICAgICAgICAgICwgbV9yZXNpemFi
bGUod2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF9yZXNpemFibGUod2luZG93UHJvcGVydGll
cykpCi0gICAgICAgICAgICAsIG1fZnVsbHNjcmVlbih3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNf
Z2V0X2Z1bGxzY3JlZW4od2luZG93UHJvcGVydGllcykpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRfZ2VvbWV0cnkod2luZG93UHJvcGVydGllcywg
Jm1fZ2VvbWV0cnkpOwotICAgICAgICB9Ci0KLSAgICAgICAgV2luZG93UHJvcGVydGllcyhHZGtS
ZWN0YW5nbGUqIGdlb21ldHJ5LCBib29sIHRvb2xiYXJWaXNpYmxlLCBib29sIHN0YXR1c2JhclZp
c2libGUsIGJvb2wgc2Nyb2xsYmFyc1Zpc2libGUsIGJvb2wgbWVudWJhclZpc2libGUsIGJvb2wg
bG9jYXRpb25iYXJWaXNpYmxlLCBib29sIHJlc2l6YWJsZSwgYm9vbCBmdWxsc2NyZWVuKQotICAg
ICAgICAgICAgOiBtX2lzTnVsbChmYWxzZSkKLSAgICAgICAgICAgICwgbV9nZW9tZXRyeSgqZ2Vv
bWV0cnkpCi0gICAgICAgICAgICAsIG1fdG9vbGJhclZpc2libGUodG9vbGJhclZpc2libGUpCi0g
ICAgICAgICAgICAsIG1fc3RhdHVzYmFyVmlzaWJsZShzdGF0dXNiYXJWaXNpYmxlKQotICAgICAg
ICAgICAgLCBtX3Njcm9sbGJhcnNWaXNpYmxlKHNjcm9sbGJhcnNWaXNpYmxlKQotICAgICAgICAg
ICAgLCBtX21lbnViYXJWaXNpYmxlKG1lbnViYXJWaXNpYmxlKQotICAgICAgICAgICAgLCBtX2xv
Y2F0aW9uYmFyVmlzaWJsZShsb2NhdGlvbmJhclZpc2libGUpCi0gICAgICAgICAgICAsIG1fcmVz
aXphYmxlKHJlc2l6YWJsZSkKLSAgICAgICAgICAgICwgbV9mdWxsc2NyZWVuKGZ1bGxzY3JlZW4p
Ci0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc051bGw7IH0KLQotICAgICAgICB2b2lkIGFzc2VydEVxdWFsKGNvbnN0IFdpbmRv
d1Byb3BlcnRpZXMmIG90aGVyKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBnX2Fzc2Vy
dF9jbXBpbnQobV9nZW9tZXRyeS54LCA9PSwgb3RoZXIubV9nZW9tZXRyeS54KTsKLSAgICAgICAg
ICAgIGdfYXNzZXJ0X2NtcGludChtX2dlb21ldHJ5LnksID09LCBvdGhlci5tX2dlb21ldHJ5Lnkp
OwotICAgICAgICAgICAgZ19hc3NlcnRfY21waW50KG1fZ2VvbWV0cnkud2lkdGgsID09LCBvdGhl
ci5tX2dlb21ldHJ5LndpZHRoKTsKLSAgICAgICAgICAgIGdfYXNzZXJ0X2NtcGludChtX2dlb21l
dHJ5LmhlaWdodCwgPT0sIG90aGVyLm1fZ2VvbWV0cnkuaGVpZ2h0KTsKLSAgICAgICAgICAgIGdf
YXNzZXJ0X2NtcGludChzdGF0aWNfY2FzdDxpbnQ+KG1fdG9vbGJhclZpc2libGUpLCA9PSwgc3Rh
dGljX2Nhc3Q8aW50PihvdGhlci5tX3Rvb2xiYXJWaXNpYmxlKSk7Ci0gICAgICAgICAgICBnX2Fz
c2VydF9jbXBpbnQoc3RhdGljX2Nhc3Q8aW50PihtX3N0YXR1c2JhclZpc2libGUpLCA9PSwgc3Rh
dGljX2Nhc3Q8aW50PihvdGhlci5tX3N0YXR1c2JhclZpc2libGUpKTsKLSAgICAgICAgICAgIGdf
YXNzZXJ0X2NtcGludChzdGF0aWNfY2FzdDxpbnQ+KG1fc2Nyb2xsYmFyc1Zpc2libGUpLCA9PSwg
c3RhdGljX2Nhc3Q8aW50PihvdGhlci5tX3Njcm9sbGJhcnNWaXNpYmxlKSk7Ci0gICAgICAgICAg
ICBnX2Fzc2VydF9jbXBpbnQoc3RhdGljX2Nhc3Q8aW50PihtX21lbnViYXJWaXNpYmxlKSwgPT0s
IHN0YXRpY19jYXN0PGludD4ob3RoZXIubV9tZW51YmFyVmlzaWJsZSkpOwotICAgICAgICAgICAg
Z19hc3NlcnRfY21waW50KHN0YXRpY19jYXN0PGludD4obV9sb2NhdGlvbmJhclZpc2libGUpLCA9
PSwgc3RhdGljX2Nhc3Q8aW50PihvdGhlci5tX2xvY2F0aW9uYmFyVmlzaWJsZSkpOwotICAgICAg
ICAgICAgZ19hc3NlcnRfY21waW50KHN0YXRpY19jYXN0PGludD4obV9yZXNpemFibGUpLCA9PSwg
c3RhdGljX2Nhc3Q8aW50PihvdGhlci5tX3Jlc2l6YWJsZSkpOwotICAgICAgICAgICAgZ19hc3Nl
cnRfY21waW50KHN0YXRpY19jYXN0PGludD4obV9mdWxsc2NyZWVuKSwgPT0sIHN0YXRpY19jYXN0
PGludD4ob3RoZXIubV9mdWxsc2NyZWVuKSk7Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0g
ICAgICAgIGJvb2wgbV9pc051bGw7Ci0KLSAgICAgICAgR2RrUmVjdGFuZ2xlIG1fZ2VvbWV0cnk7
Ci0KLSAgICAgICAgYm9vbCBtX3Rvb2xiYXJWaXNpYmxlOwotICAgICAgICBib29sIG1fc3RhdHVz
YmFyVmlzaWJsZTsKLSAgICAgICAgYm9vbCBtX3Njcm9sbGJhcnNWaXNpYmxlOwotICAgICAgICBi
b29sIG1fbWVudWJhclZpc2libGU7Ci0gICAgICAgIGJvb2wgbV9sb2NhdGlvbmJhclZpc2libGU7
Ci0KLSAgICAgICAgYm9vbCBtX3Jlc2l6YWJsZTsKLSAgICAgICAgYm9vbCBtX2Z1bGxzY3JlZW47
Ci0gICAgfTsKLQotICAgIHN0YXRpYyB2b2lkIHdpbmRvd1Byb3BlcnRpZXNOb3RpZnlDYWxsYmFj
ayhHT2JqZWN0KiwgR1BhcmFtU3BlYyogcGFyYW1TcGVjLCBVSUNsaWVudFRlc3QqIHRlc3QpCi0g
ICAgewotICAgICAgICB0ZXN0LT5tX3dpbmRvd1Byb3BlcnRpZXNDaGFuZ2VkLmFkZChnX3BhcmFt
X3NwZWNfZ2V0X25hbWUocGFyYW1TcGVjKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIEd0a1dpZGdl
dCogdmlld0NyZWF0ZUNhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFVJQ2xpZW50VGVz
dCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0ZXN0LT52aWV3Q3JlYXRlKHdlYlZpZXcp
OwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHZpZXdSZWFkeVRvU2hvd0NhbGxiYWNrKFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcsIFVJQ2xpZW50VGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHRl
c3QtPnZpZXdSZWFkeVRvU2hvdyh3ZWJWaWV3KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCB2
aWV3Q2xvc2VDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBVSUNsaWVudFRlc3QqIHRl
c3QpCi0gICAgewotICAgICAgICB0ZXN0LT52aWV3Q2xvc2Uod2ViVmlldyk7Ci0gICAgfQotCi0g
ICAgdm9pZCBzY3JpcHRBbGVydChXZWJLaXRTY3JpcHREaWFsb2cqIGRpYWxvZykKLSAgICB7Ci0g
ICAgICAgIHN3aXRjaCAobV9zY3JpcHREaWFsb2dUeXBlKSB7Ci0gICAgICAgIGNhc2UgV0VCS0lU
X1NDUklQVF9ESUFMT0dfQUxFUlQ6Ci0gICAgICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0
X3NjcmlwdF9kaWFsb2dfZ2V0X21lc3NhZ2UoZGlhbG9nKSwgPT0sIGtBbGVydERpYWxvZ01lc3Nh
Z2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV0VCS0lUX1NDUklQVF9ESUFM
T0dfQ09ORklSTToKLSAgICAgICAgICAgIGdfYXNzZXJ0KG1fc2NyaXB0RGlhbG9nQ29uZmlybWVk
KTsKLSAgICAgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2NyaXB0X2RpYWxvZ19nZXRf
bWVzc2FnZShkaWFsb2cpLCA9PSwgImNvbmZpcm1lZCIpOwotCi0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBXRUJLSVRfU0NSSVBUX0RJQUxPR19QUk9NUFQ6Ci0gICAgICAgICAgICBn
X2Fzc2VydF9jbXBzdHIod2Via2l0X3NjcmlwdF9kaWFsb2dfZ2V0X21lc3NhZ2UoZGlhbG9nKSwg
PT0sIGtQcm9tcHREaWFsb2dSZXR1cm5lZFRleHQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLQotICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3ApOwotICAgIH0KLQot
ICAgIHZvaWQgc2NyaXB0Q29uZmlybShXZWJLaXRTY3JpcHREaWFsb2cqIGRpYWxvZykKLSAgICB7
Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2NyaXB0X2RpYWxvZ19nZXRfbWVzc2Fn
ZShkaWFsb2cpLCA9PSwga0NvbmZpcm1EaWFsb2dNZXNzYWdlKTsKLSAgICAgICAgbV9zY3JpcHRE
aWFsb2dDb25maXJtZWQgPSAhbV9zY3JpcHREaWFsb2dDb25maXJtZWQ7Ci0gICAgICAgIHdlYmtp
dF9zY3JpcHRfZGlhbG9nX2NvbmZpcm1fc2V0X2NvbmZpcm1lZChkaWFsb2csIG1fc2NyaXB0RGlh
bG9nQ29uZmlybWVkKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNjcmlwdFByb21wdChXZWJLaXRTY3Jp
cHREaWFsb2cqIGRpYWxvZykKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRf
c2NyaXB0X2RpYWxvZ19nZXRfbWVzc2FnZShkaWFsb2cpLCA9PSwga1Byb21wdERpYWxvZ01lc3Nh
Z2UpOwotICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NjcmlwdF9kaWFsb2dfcHJvbXB0
X2dldF9kZWZhdWx0X3RleHQoZGlhbG9nKSwgPT0sICJkZWZhdWx0Iik7Ci0gICAgICAgIHdlYmtp
dF9zY3JpcHRfZGlhbG9nX3Byb21wdF9zZXRfdGV4dChkaWFsb2csIGtQcm9tcHREaWFsb2dSZXR1
cm5lZFRleHQpOwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiBzY3JpcHREaWFsb2coV2Vi
S2l0V2ViVmlldyosIFdlYktpdFNjcmlwdERpYWxvZyogZGlhbG9nLCBVSUNsaWVudFRlc3QqIHRl
c3QpCi0gICAgewotICAgICAgICBzd2l0Y2ggKHdlYmtpdF9zY3JpcHRfZGlhbG9nX2dldF9kaWFs
b2dfdHlwZShkaWFsb2cpKSB7Ci0gICAgICAgIGNhc2UgV0VCS0lUX1NDUklQVF9ESUFMT0dfQUxF
UlQ6Ci0gICAgICAgICAgICB0ZXN0LT5zY3JpcHRBbGVydChkaWFsb2cpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgV0VCS0lUX1NDUklQVF9ESUFMT0dfQ09ORklSTToKLSAgICAg
ICAgICAgIHRlc3QtPnNjcmlwdENvbmZpcm0oZGlhbG9nKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIFdFQktJVF9TQ1JJUFRfRElBTE9HX1BST01QVDoKLSAgICAgICAgICAgIHRl
c3QtPnNjcmlwdFByb21wdChkaWFsb2cpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LQotICAgICAgICByZXR1cm4gVFJVRTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBtb3VzZVRh
cmdldENoYW5nZWQoV2ViS2l0V2ViVmlldyosIFdlYktpdEhpdFRlc3RSZXN1bHQqIGhpdFRlc3RS
ZXN1bHQsIGd1aW50IG1vZGlmaWVycywgVUlDbGllbnRUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAg
ICAgZ19hc3NlcnQoV0VCS0lUX0lTX0hJVF9URVNUX1JFU1VMVChoaXRUZXN0UmVzdWx0KSk7Ci0g
ICAgICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpF
Q1QoaGl0VGVzdFJlc3VsdCkpOwotCi0gICAgICAgIHRlc3QtPm1fbW91c2VUYXJnZXRIaXRUZXN0
UmVzdWx0ID0gaGl0VGVzdFJlc3VsdDsKLSAgICAgICAgdGVzdC0+bV9tb3VzZVRhcmdldE1vZGlm
aWVycyA9IG1vZGlmaWVyczsKLSAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5M
b29wKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZ2Jvb2xlYW4gcGVybWlzc2lvblJlcXVlc3RlZChX
ZWJLaXRXZWJWaWV3KiwgV2ViS2l0UGVybWlzc2lvblJlcXVlc3QqIHJlcXVlc3QsIFVJQ2xpZW50
VGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19QRVJNSVNTSU9O
X1JFUVVFU1QocmVxdWVzdCkpOwotICAgICAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRX
aGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHJlcXVlc3QpKTsKLQotICAgICAgICBpZiAodGVzdC0+
bV9hbGxvd1Blcm1pc3Npb25SZXF1ZXN0cykKLSAgICAgICAgICAgIHdlYmtpdF9wZXJtaXNzaW9u
X3JlcXVlc3RfYWxsb3cocmVxdWVzdCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHdlYmtp
dF9wZXJtaXNzaW9uX3JlcXVlc3RfZGVueShyZXF1ZXN0KTsKLQotICAgICAgICByZXR1cm4gVFJV
RTsKLSAgICB9Ci0KLSAgICBVSUNsaWVudFRlc3QoKQotICAgICAgICA6IG1fc2NyaXB0RGlhbG9n
VHlwZShXRUJLSVRfU0NSSVBUX0RJQUxPR19BTEVSVCkKLSAgICAgICAgLCBtX3NjcmlwdERpYWxv
Z0NvbmZpcm1lZCh0cnVlKQotICAgICAgICAsIG1fYWxsb3dQZXJtaXNzaW9uUmVxdWVzdHMoZmFs
c2UpCi0gICAgICAgICwgbV9tb3VzZVRhcmdldE1vZGlmaWVycygwKQotICAgIHsKLSAgICAgICAg
d2Via2l0X3NldHRpbmdzX3NldF9qYXZhc2NyaXB0X2Nhbl9vcGVuX3dpbmRvd3NfYXV0b21hdGlj
YWxseSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKG1fd2ViVmlldyksIFRSVUUpOwotICAg
ICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImNyZWF0ZSIsIEdfQ0FMTEJBQ0sodmll
d0NyZWF0ZUNhbGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJW
aWV3LCAic2NyaXB0LWRpYWxvZyIsIEdfQ0FMTEJBQ0soc2NyaXB0RGlhbG9nKSwgdGhpcyk7Ci0g
ICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAibW91c2UtdGFyZ2V0LWNoYW5nZWQi
LCBHX0NBTExCQUNLKG1vdXNlVGFyZ2V0Q2hhbmdlZCksIHRoaXMpOwotICAgICAgICBnX3NpZ25h
bF9jb25uZWN0KG1fd2ViVmlldywgInBlcm1pc3Npb24tcmVxdWVzdCIsIEdfQ0FMTEJBQ0socGVy
bWlzc2lvblJlcXVlc3RlZCksIHRoaXMpOwotICAgIH0KLQotICAgIH5VSUNsaWVudFRlc3QoKQot
ICAgIHsKLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fd2Vi
VmlldywgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7Ci0gICAgfQotCi0g
ICAgdm9pZCB3YWl0VW50aWxNYWluTG9vcEZpbmlzaGVzKCkKLSAgICB7Ci0gICAgICAgIGdfbWFp
bl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldEV4cGVjdGVkV2lu
ZG93UHJvcGVydGllcyhjb25zdCBXaW5kb3dQcm9wZXJ0aWVzJiB3aW5kb3dQcm9wZXJ0aWVzKQot
ICAgIHsKLSAgICAgICAgbV93aW5kb3dQcm9wZXJ0aWVzID0gd2luZG93UHJvcGVydGllczsKLSAg
ICB9Ci0KLSAgICBXZWJLaXRIaXRUZXN0UmVzdWx0KiBtb3ZlTW91c2VBbmRXYWl0VW50aWxNb3Vz
ZVRhcmdldENoYW5nZWQoaW50IHgsIGludCB5LCB1bnNpZ25lZCBtb3VzZU1vZGlmaWVycyA9IDAp
Ci0gICAgewotICAgICAgICBtb3VzZU1vdmVUbyh4LCB5LCBtb3VzZU1vZGlmaWVycyk7Ci0gICAg
ICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAgICAgICAgcmV0dXJuIG1fbW91c2VU
YXJnZXRIaXRUZXN0UmVzdWx0LmdldCgpOwotICAgIH0KLQotICAgIHZpcnR1YWwgR3RrV2lkZ2V0
KiB2aWV3Q3JlYXRlKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCi0gICAgewotICAgICAgICBnX2Fz
c2VydCh3ZWJWaWV3ID09IG1fd2ViVmlldyk7Ci0KLSAgICAgICAgR3RrV2lkZ2V0KiBuZXdXZWJW
aWV3ID0gd2Via2l0X3dlYl92aWV3X25ld193aXRoX2NvbnRleHQod2Via2l0X3dlYl92aWV3X2dl
dF9jb250ZXh0KHdlYlZpZXcpKTsKLSAgICAgICAgZ19vYmplY3RfcmVmX3NpbmsobmV3V2ViVmll
dyk7Ci0KLSAgICAgICAgbV93ZWJWaWV3RXZlbnRzLmFwcGVuZChDcmVhdGUpOwotCi0gICAgICAg
IFdlYktpdFdpbmRvd1Byb3BlcnRpZXMqIHdpbmRvd1Byb3BlcnRpZXMgPSB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X3dpbmRvd19wcm9wZXJ0aWVzKFdFQktJVF9XRUJfVklFVyhuZXdXZWJWaWV3KSk7Ci0g
ICAgICAgIGdfYXNzZXJ0KHdpbmRvd1Byb3BlcnRpZXMpOwotICAgICAgICBhc3NlcnRPYmplY3RJ
c0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHdpbmRvd1Byb3BlcnRpZXMpKTsKLSAg
ICAgICAgbV93aW5kb3dQcm9wZXJ0aWVzQ2hhbmdlZC5jbGVhcigpOwotCi0gICAgICAgIGdfc2ln
bmFsX2Nvbm5lY3Qod2luZG93UHJvcGVydGllcywgIm5vdGlmeSIsIEdfQ0FMTEJBQ0sod2luZG93
UHJvcGVydGllc05vdGlmeUNhbGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5l
Y3QobmV3V2ViVmlldywgInJlYWR5LXRvLXNob3ciLCBHX0NBTExCQUNLKHZpZXdSZWFkeVRvU2hv
d0NhbGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobmV3V2ViVmlldywg
ImNsb3NlIiwgR19DQUxMQkFDSyh2aWV3Q2xvc2VDYWxsYmFjayksIHRoaXMpOwotCi0gICAgICAg
IHJldHVybiBuZXdXZWJWaWV3OwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aWV3UmVhZHlU
b1Nob3coV2ViS2l0V2ViVmlldyogd2ViVmlldykKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0KHdl
YlZpZXcgIT0gbV93ZWJWaWV3KTsKLQotICAgICAgICBXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzKiB3
aW5kb3dQcm9wZXJ0aWVzID0gd2Via2l0X3dlYl92aWV3X2dldF93aW5kb3dfcHJvcGVydGllcyh3
ZWJWaWV3KTsKLSAgICAgICAgZ19hc3NlcnQod2luZG93UHJvcGVydGllcyk7Ci0gICAgICAgIGlm
ICghbV93aW5kb3dQcm9wZXJ0aWVzLmlzTnVsbCgpKQotICAgICAgICAgICAgV2luZG93UHJvcGVy
dGllcyh3aW5kb3dQcm9wZXJ0aWVzKS5hc3NlcnRFcXVhbChtX3dpbmRvd1Byb3BlcnRpZXMpOwot
Ci0gICAgICAgIG1fd2ViVmlld0V2ZW50cy5hcHBlbmQoUmVhZHlUb1Nob3cpOwotICAgIH0KLQot
ICAgIHZpcnR1YWwgdm9pZCB2aWV3Q2xvc2UoV2ViS2l0V2ViVmlldyogd2ViVmlldykKLSAgICB7
Ci0gICAgICAgIGdfYXNzZXJ0KHdlYlZpZXcgIT0gbV93ZWJWaWV3KTsKLQotICAgICAgICBtX3dl
YlZpZXdFdmVudHMuYXBwZW5kKENsb3NlKTsKLSAgICAgICAgZ19vYmplY3RfdW5yZWYod2ViVmll
dyk7Ci0KLSAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX21haW5Mb29wKTsKLSAgICB9Ci0KLSAg
ICBWZWN0b3I8V2ViVmlld0V2ZW50cz4gbV93ZWJWaWV3RXZlbnRzOwotICAgIFdlYktpdFNjcmlw
dERpYWxvZ1R5cGUgbV9zY3JpcHREaWFsb2dUeXBlOwotICAgIGJvb2wgbV9zY3JpcHREaWFsb2dD
b25maXJtZWQ7Ci0gICAgYm9vbCBtX2FsbG93UGVybWlzc2lvblJlcXVlc3RzOwotICAgIFdpbmRv
d1Byb3BlcnRpZXMgbV93aW5kb3dQcm9wZXJ0aWVzOwotICAgIEhhc2hTZXQ8V1RGOjpTdHJpbmc+
IG1fd2luZG93UHJvcGVydGllc0NoYW5nZWQ7Ci0gICAgR1JlZlB0cjxXZWJLaXRIaXRUZXN0UmVz
dWx0PiBtX21vdXNlVGFyZ2V0SGl0VGVzdFJlc3VsdDsKLSAgICB1bnNpZ25lZCBtX21vdXNlVGFy
Z2V0TW9kaWZpZXJzOwotfTsKLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdDcmVhdGVSZWFkeUNs
b3NlKFVJQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5sb2Fk
SHRtbCgiPGh0bWw+PGJvZHkgb25Mb2FkPVwid2luZG93Lm9wZW4oKS5jbG9zZSgpO1wiPjwvaHRt
bD4iLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxNYWluTG9vcEZpbmlzaGVzKCk7Ci0KLSAgICBW
ZWN0b3I8VUlDbGllbnRUZXN0OjpXZWJWaWV3RXZlbnRzPiYgZXZlbnRzID0gdGVzdC0+bV93ZWJW
aWV3RXZlbnRzOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgMyk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIFVJQ2xpZW50VGVzdDo6Q3JlYXRlKTsK
LSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgVUlDbGllbnRUZXN0OjpSZWFkeVRv
U2hvdyk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIFVJQ2xpZW50VGVzdDo6
Q2xvc2UpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gY2hlY2tNaW1lVHlwZUZvckZpbHRlcihHdGtG
aWxlRmlsdGVyKiBmaWx0ZXIsIGNvbnN0IGdjaGFyKiBtaW1lVHlwZSkKLXsKLSAgICBHdGtGaWxl
RmlsdGVySW5mbyBmaWx0ZXJJbmZvOwotICAgIGZpbHRlckluZm8uY29udGFpbnMgPSBHVEtfRklM
RV9GSUxURVJfTUlNRV9UWVBFOwotICAgIGZpbHRlckluZm8ubWltZV90eXBlID0gbWltZVR5cGU7
Ci0gICAgcmV0dXJuIGd0a19maWxlX2ZpbHRlcl9maWx0ZXIoZmlsdGVyLCAmZmlsdGVySW5mbyk7
Ci19Ci0KLWNsYXNzIE1vZGFsRGlhbG9nc1Rlc3Q6IHB1YmxpYyBVSUNsaWVudFRlc3QgewotcHVi
bGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoTW9kYWxEaWFsb2dzVGVzdCk7Ci0KLSAg
ICBzdGF0aWMgdm9pZCBkaWFsb2dSdW5Bc01vZGFsQ2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2Vi
VmlldywgTW9kYWxEaWFsb2dzVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0KHdl
YlZpZXcgIT0gdGVzdC0+bV93ZWJWaWV3KTsKLSAgICAgICAgdGVzdC0+bV93ZWJWaWV3RXZlbnRz
LmFwcGVuZChSdW5Bc01vZGFsKTsKLSAgICB9Ci0KLSAgICBHdGtXaWRnZXQqIHZpZXdDcmVhdGUo
V2ViS2l0V2ViVmlldyogd2ViVmlldykKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0KHdlYlZpZXcg
PT0gbV93ZWJWaWV3KTsKLQotICAgICAgICBHdGtXaWRnZXQqIG5ld1dlYlZpZXcgPSBVSUNsaWVu
dFRlc3Q6OnZpZXdDcmVhdGUod2ViVmlldyk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobmV3
V2ViVmlldywgInJ1bi1hcy1tb2RhbCIsIEdfQ0FMTEJBQ0soZGlhbG9nUnVuQXNNb2RhbENhbGxi
YWNrKSwgdGhpcyk7Ci0gICAgICAgIHJldHVybiBuZXdXZWJWaWV3OwotICAgIH0KLQotICAgIHZv
aWQgdmlld1JlYWR5VG9TaG93KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCi0gICAgewotICAgICAg
ICBnX2Fzc2VydCh3ZWJWaWV3ICE9IG1fd2ViVmlldyk7Ci0gICAgICAgIG1fd2ViVmlld0V2ZW50
cy5hcHBlbmQoUmVhZHlUb1Nob3cpOwotICAgIH0KLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJW
aWV3QWxsb3dNb2RhbERpYWxvZ3MoTW9kYWxEaWFsb2dzVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRl
cikKLXsKLSAgICBXZWJLaXRTZXR0aW5ncyogc2V0dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X3NldHRpbmdzKHRlc3QtPm1fd2ViVmlldyk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9hbGxv
d19tb2RhbF9kaWFsb2dzKHNldHRpbmdzLCBUUlVFKTsKLQotICAgIHRlc3QtPmxvYWRIdG1sKCI8
aHRtbD48Ym9keSBvbmxvYWQ9XCJ3aW5kb3cuc2hvd01vZGFsRGlhbG9nKCdkYXRhOnRleHQvaHRt
bCw8aHRtbD48Ym9keS8+PHNjcmlwdD53aW5kb3cuY2xvc2UoKTs8L3NjcmlwdD48L2h0bWw+Jylc
Ij48L2JvZHk+PC9odG1sPiIsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbE1haW5Mb29wRmluaXNo
ZXMoKTsKLQotICAgIFZlY3RvcjxVSUNsaWVudFRlc3Q6OldlYlZpZXdFdmVudHM+JiBldmVudHMg
PSB0ZXN0LT5tX3dlYlZpZXdFdmVudHM7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXpl
KCksID09LCA0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgVUlDbGllbnRU
ZXN0OjpDcmVhdGUpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBVSUNsaWVu
dFRlc3Q6OlJlYWR5VG9TaG93KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwg
VUlDbGllbnRUZXN0OjpSdW5Bc01vZGFsKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzNd
LCA9PSwgVUlDbGllbnRUZXN0OjpDbG9zZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3
RGlzYWxsb3dNb2RhbERpYWxvZ3MoTW9kYWxEaWFsb2dzVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRl
cikKLXsKLSAgICBXZWJLaXRTZXR0aW5ncyogc2V0dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X3NldHRpbmdzKHRlc3QtPm1fd2ViVmlldyk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9hbGxv
d19tb2RhbF9kaWFsb2dzKHNldHRpbmdzLCBGQUxTRSk7Ci0KLSAgICB0ZXN0LT5sb2FkSHRtbCgi
PGh0bWw+PGJvZHkgb25sb2FkPVwid2luZG93LnNob3dNb2RhbERpYWxvZygnZGF0YTp0ZXh0L2h0
bWwsPGh0bWw+PGJvZHkvPjxzY3JpcHQ+d2luZG93LmNsb3NlKCk7PC9zY3JpcHQ+PC9odG1sPicp
XCI+PC9ib2R5PjwvaHRtbD4iLCAwKTsKLSAgICAvLyBXZSBuZWVkIHRvIHVzZSBhIHRpbWVvdXQg
aGVyZSBiZWNhdXNlIHRoZSB2aWV3Q2xvc2UoKSBmdW5jdGlvbgotICAgIC8vIHdvbid0IGV2ZXIg
YmUgY2FsbGVkIGFzIHRoZSBkaWFsb2cgd29uJ3QgYmUgY3JlYXRlZC4KLSAgICB0ZXN0LT53YWl0
KDEpOwotCi0gICAgVmVjdG9yPFVJQ2xpZW50VGVzdDo6V2ViVmlld0V2ZW50cz4mIGV2ZW50cyA9
IHRlc3QtPm1fd2ViVmlld0V2ZW50czsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUo
KSwgPT0sIDApOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0phdmFTY3JpcHREaWFsb2dz
KFVJQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBzdGF0aWMgY29uc3Qg
Y2hhciogaHRtbE9uTG9hZEZvcm1hdCA9ICI8aHRtbD48Ym9keSBvbkxvYWQ9XCIlc1wiPjwvYm9k
eT48L2h0bWw+IjsKLSAgICBzdGF0aWMgY29uc3QgY2hhcioganNBbGVydEZvcm1hdCA9ICJhbGVy
dCgnJXMnKSI7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGpzQ29uZmlybUZvcm1hdCA9ICJkbyB7
IGNvbmZpcm1lZCA9IGNvbmZpcm0oJyVzJyk7IH0gd2hpbGUgKCFjb25maXJtZWQpOyBhbGVydCgn
Y29uZmlybWVkJyk7IjsKLSAgICBzdGF0aWMgY29uc3QgY2hhcioganNQcm9tcHRGb3JtYXQgPSAi
YWxlcnQocHJvbXB0KCclcycsICdkZWZhdWx0JykpOyI7Ci0KLSAgICB0ZXN0LT5tX3NjcmlwdERp
YWxvZ1R5cGUgPSBXRUJLSVRfU0NSSVBUX0RJQUxPR19BTEVSVDsKLSAgICBHT3duUHRyPGNoYXI+
IGFsZXJ0RGlhbG9nTWVzc2FnZShnX3N0cmR1cF9wcmludGYoanNBbGVydEZvcm1hdCwga0FsZXJ0
RGlhbG9nTWVzc2FnZSkpOwotICAgIEdPd25QdHI8Y2hhcj4gYWxlcnRIVE1MKGdfc3RyZHVwX3By
aW50ZihodG1sT25Mb2FkRm9ybWF0LCBhbGVydERpYWxvZ01lc3NhZ2UuZ2V0KCkpKTsKLSAgICB0
ZXN0LT5sb2FkSHRtbChhbGVydEhUTUwuZ2V0KCksIDApOwotICAgIHRlc3QtPndhaXRVbnRpbE1h
aW5Mb29wRmluaXNoZXMoKTsKLQotICAgIHRlc3QtPm1fc2NyaXB0RGlhbG9nVHlwZSA9IFdFQktJ
VF9TQ1JJUFRfRElBTE9HX0NPTkZJUk07Ci0gICAgR093blB0cjxjaGFyPiBjb25maXJtRGlhbG9n
TWVzc2FnZShnX3N0cmR1cF9wcmludGYoanNDb25maXJtRm9ybWF0LCBrQ29uZmlybURpYWxvZ01l
c3NhZ2UpKTsKLSAgICBHT3duUHRyPGNoYXI+IGNvbmZpcm1IVE1MKGdfc3RyZHVwX3ByaW50Ziho
dG1sT25Mb2FkRm9ybWF0LCBjb25maXJtRGlhbG9nTWVzc2FnZS5nZXQoKSkpOwotICAgIHRlc3Qt
PmxvYWRIdG1sKGNvbmZpcm1IVE1MLmdldCgpLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxNYWlu
TG9vcEZpbmlzaGVzKCk7Ci0KLSAgICB0ZXN0LT5tX3NjcmlwdERpYWxvZ1R5cGUgPSBXRUJLSVRf
U0NSSVBUX0RJQUxPR19QUk9NUFQ7Ci0gICAgR093blB0cjxjaGFyPiBwcm9tcHREaWFsb2dNZXNz
YWdlKGdfc3RyZHVwX3ByaW50Zihqc1Byb21wdEZvcm1hdCwga1Byb21wdERpYWxvZ01lc3NhZ2Up
KTsKLSAgICBHT3duUHRyPGNoYXI+IHByb21wdEhUTUwoZ19zdHJkdXBfcHJpbnRmKGh0bWxPbkxv
YWRGb3JtYXQsIHByb21wdERpYWxvZ01lc3NhZ2UuZ2V0KCkpKTsKLSAgICB0ZXN0LT5sb2FkSHRt
bChwcm9tcHRIVE1MLmdldCgpLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxNYWluTG9vcEZpbmlz
aGVzKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3V2luZG93UHJvcGVydGllcyhVSUNs
aWVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIq
IHdpbmRvd1Byb3JwZXJ0aWVzU3RyaW5nID0gImxlZnQ9MTAwLHRvcD0xNTAsd2lkdGg9NDAwLGhl
aWdodD00MDAsbG9jYXRpb249bm8sbWVudWJhcj1ubyxzdGF0dXM9bm8sdG9vbGJhcj1ubyxzY3Jv
bGxiYXJzPW5vIjsKLSAgICBHZGtSZWN0YW5nbGUgZ2VvbWV0cnkgPSB7IDEwMCwgMTUwLCA0MDAs
IDQwMCB9OwotICAgIHRlc3QtPnNldEV4cGVjdGVkV2luZG93UHJvcGVydGllcyhVSUNsaWVudFRl
c3Q6OldpbmRvd1Byb3BlcnRpZXMoJmdlb21ldHJ5LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxz
ZSwgZmFsc2UsIHRydWUsIGZhbHNlKSk7Ci0KLSAgICBHT3duUHRyPGNoYXI+IGh0bWxTdHJpbmco
Z19zdHJkdXBfcHJpbnRmKCI8aHRtbD48Ym9keSBvbkxvYWQ9XCJ3aW5kb3cub3BlbignJywgJycs
ICclcycpLmNsb3NlKCk7XCI+PC9ib2R5PjwvaHRtbD4iLCB3aW5kb3dQcm9ycGVydGllc1N0cmlu
ZykpOwotICAgIHRlc3QtPmxvYWRIdG1sKGh0bWxTdHJpbmcuZ2V0KCksIDApOwotICAgIHRlc3Qt
PndhaXRVbnRpbE1haW5Mb29wRmluaXNoZXMoKTsKLQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBw
cm9wZXJ0aWVzQ2hhbmdlZFtdID0gewotICAgICAgICAiZ2VvbWV0cnkiLCAibG9jYXRpb25iYXIt
dmlzaWJsZSIsICJtZW51YmFyLXZpc2libGUiLCAic3RhdHVzYmFyLXZpc2libGUiLCAidG9vbGJh
ci12aXNpYmxlIiwgInNjcm9sbGJhcnMtdmlzaWJsZSIKLSAgICB9OwotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgR19OX0VMRU1FTlRTKHByb3BlcnRpZXNDaGFuZ2VkKTsgKytpKQotICAgICAg
ICBnX2Fzc2VydCh0ZXN0LT5tX3dpbmRvd1Byb3BlcnRpZXNDaGFuZ2VkLmNvbnRhaW5zKHByb3Bl
cnRpZXNDaGFuZ2VkW2ldKSk7Ci0KLSAgICBWZWN0b3I8VUlDbGllbnRUZXN0OjpXZWJWaWV3RXZl
bnRzPiYgZXZlbnRzID0gdGVzdC0+bV93ZWJWaWV3RXZlbnRzOwotICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHMuc2l6ZSgpLCA9PSwgMyk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwg
PT0sIFVJQ2xpZW50VGVzdDo6Q3JlYXRlKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFd
LCA9PSwgVUlDbGllbnRUZXN0OjpSZWFkeVRvU2hvdyk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2
ZW50c1syXSwgPT0sIFVJQ2xpZW50VGVzdDo6Q2xvc2UpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0
V2ViVmlld01vdXNlVGFyZ2V0KFVJQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsK
LSAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoR1RLX1dJTkRPV19UT1BM
RVZFTCk7Ci0KLSAgICBjb25zdCBjaGFyKiBsaW5rc0hvdmVyZWRIVE1MID0KLSAgICAgICAgIjxo
dG1sPjxib2R5PiIKLSAgICAgICAgIiA8YSBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6
MTsgdG9wOjEnIGhyZWY9J2h0dHA6Ly93d3cud2Via2l0Z3RrLm9yZycgdGl0bGU9J1dlYktpdEdU
SysgVGl0bGUnPldlYktpdEdUSysgV2Vic2l0ZTwvYT4iCi0gICAgICAgICIgPGltZyBzdHlsZT0n
cG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjEwJyBzcmM9JzB4ZGVhZGJlZWYnIHdpZHRo
PTUgaGVpZ2h0PTU+PC9pbWc+IgotICAgICAgICAiIDxhIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0
ZTsgbGVmdDoxOyB0b3A6MjAnIGhyZWY9J2h0dHA6Ly93d3cud2Via2l0Z3RrLm9yZy9sb2dvJyB0
aXRsZT0nV2ViS2l0R1RLKyBMb2dvJz48aW1nIHNyYz0nMHhkZWFkYmVlZicgd2lkdGg9NSBoZWln
aHQ9NT48L2ltZz48L2E+IgotICAgICAgICAiIDxpbnB1dCBzdHlsZT0ncG9zaXRpb246YWJzb2x1
dGU7IGxlZnQ6MTsgdG9wOjMwJyBzaXplPScxMCc+PC9pbnB1dD4iCi0gICAgICAgICIgPGRpdiBz
dHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjUwOyB3aWR0aDozMDsgaGVpZ2h0
OjMwOyBvdmVyZmxvdzpzY3JvbGwnPiZuYnNwOzwvZGl2PiIKLSAgICAgICAgIiA8dmlkZW8gc3R5
bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRvcDoxMDAnIHdpZHRoPSczMDAnIGhlaWdo
dD0nMzAwJyBjb250cm9scz0nY29udHJvbHMnIHByZWxvYWQ9J25vbmUnPjxzb3VyY2Ugc3JjPSdt
b3ZpZS5vZ2cnIHR5cGU9J3ZpZGVvL29nZycgLz48L3ZpZGVvPiIKLSAgICAgICAgIjwvYm9keT48
L2h0bWw+IjsKLQotICAgIHRlc3QtPmxvYWRIdG1sKGxpbmtzSG92ZXJlZEhUTUwsICJmaWxlOi8v
LyIpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgLy8gTW92ZSBv
dmVyIGxpbmsuCi0gICAgV2ViS2l0SGl0VGVzdFJlc3VsdCogaGl0VGVzdFJlc3VsdCA9IHRlc3Qt
Pm1vdmVNb3VzZUFuZFdhaXRVbnRpbE1vdXNlVGFyZ2V0Q2hhbmdlZCgxLCAxKTsKLSAgICBnX2Fz
c2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluayhoaXRUZXN0UmVzdWx0
KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFn
ZShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRf
Y29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9o
aXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0UmVzdWx0KSk7Ci0gICAg
Z19hc3NlcnRfY21wc3RyKHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2xpbmtfdXJpKGhpdFRl
c3RSZXN1bHQpLCA9PSwgImh0dHA6Ly93d3cud2Via2l0Z3RrLm9yZy8iKTsKLSAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfbGlua190aXRsZShoaXRUZXN0UmVz
dWx0KSwgPT0sICJXZWJLaXRHVEsrIFRpdGxlIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtp
dF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2xpbmtfbGFiZWwoaGl0VGVzdFJlc3VsdCksID09LCAiV2Vi
S2l0R1RLKyBXZWJzaXRlIik7Ci0gICAgZ19hc3NlcnQoIXRlc3QtPm1fbW91c2VUYXJnZXRNb2Rp
ZmllcnMpOwotCi0gICAgLy8gTW92ZSBvdXQgb2YgdGhlIGxpbmsuCi0gICAgaGl0VGVzdFJlc3Vs
dCA9IHRlc3QtPm1vdmVNb3VzZUFuZFdhaXRVbnRpbE1vdXNlVGFyZ2V0Q2hhbmdlZCgwLCAwKTsK
LSAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xpbmsoaGl0
VGVzdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRl
eHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rl
c3RfcmVzdWx0X2NvbnRleHRfaXNfbWVkaWEoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0
KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfZWRpdGFibGUoaGl0VGVzdFJlc3Vs
dCkpOwotICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX21vdXNlVGFyZ2V0TW9kaWZpZXJzKTsKLQotICAg
IC8vIE1vdmUgb3ZlciBpbWFnZSB3aXRoIEdES19DT05UUk9MX01BU0suCi0gICAgaGl0VGVzdFJl
c3VsdCA9IHRlc3QtPm1vdmVNb3VzZUFuZFdhaXRVbnRpbE1vdXNlVGFyZ2V0Q2hhbmdlZCgxLCAx
MCwgR0RLX0NPTlRST0xfTUFTSyk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1
bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRf
aGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdf
YXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbWVkaWEoaGl0VGVzdFJl
c3VsdCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNf
ZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3Rf
cmVzdWx0X2NvbnRleHRfaXNfc2Nyb2xsYmFyKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfaW1hZ2VfdXJpKGhpdFRlc3RSZXN1
bHQpLCA9PSwgImZpbGU6Ly8vMHhkZWFkYmVlZiIpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fbW91
c2VUYXJnZXRNb2RpZmllcnMgJiBHREtfQ09OVFJPTF9NQVNLKTsKLQotICAgIC8vIE1vdmUgb3Zl
ciBpbWFnZSBsaW5rLgotICAgIGhpdFRlc3RSZXN1bHQgPSB0ZXN0LT5tb3ZlTW91c2VBbmRXYWl0
VW50aWxNb3VzZVRhcmdldENoYW5nZWQoMSwgMjApOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRf
dGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2Vy
dCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkp
OwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbWVkaWEo
aGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2Nv
bnRleHRfaXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRf
aGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfc2Nyb2xsYmFyKGhpdFRlc3RSZXN1bHQpKTsKLSAg
ICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfbGlua191cmkoaGl0
VGVzdFJlc3VsdCksID09LCAiaHR0cDovL3d3dy53ZWJraXRndGsub3JnL2xvZ28iKTsKLSAgICBn
X2Fzc2VydF9jbXBzdHIod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfaW1hZ2VfdXJpKGhpdFRl
c3RSZXN1bHQpLCA9PSwgImZpbGU6Ly8vMHhkZWFkYmVlZiIpOwotICAgIGdfYXNzZXJ0X2NtcHN0
cih3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9saW5rX3RpdGxlKGhpdFRlc3RSZXN1bHQpLCA9
PSwgIldlYktpdEdUSysgTG9nbyIpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVz
dWx0X2dldF9saW5rX2xhYmVsKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCghdGVzdC0+
bV9tb3VzZVRhcmdldE1vZGlmaWVycyk7Ci0KLSAgICAvLyBNb3ZlIG92ZXIgbWVkaWEuCi0gICAg
aGl0VGVzdFJlc3VsdCA9IHRlc3QtPm1vdmVNb3VzZUFuZFdhaXRVbnRpbE1vdXNlVGFyZ2V0Q2hh
bmdlZCgxLCAxMDApOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRl
eHRfaXNfbGluayhoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVz
dF9yZXN1bHRfY29udGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQo
d2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQpKTsK
LSAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRhYmxl
KGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9j
b250ZXh0X2lzX3Njcm9sbGJhcihoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnRfY21wc3Ry
KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X21lZGlhX3VyaShoaXRUZXN0UmVzdWx0KSwgPT0s
ICJmaWxlOi8vL21vdmllLm9nZyIpOwotICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX21vdXNlVGFyZ2V0
TW9kaWZpZXJzKTsKLQotICAgIC8vIE1vdmVyIG92ZXIgaW5wdXQuCi0gICAgaGl0VGVzdFJlc3Vs
dCA9IHRlc3QtPm1vdmVNb3VzZUFuZFdhaXRVbnRpbE1vdXNlVGFyZ2V0Q2hhbmdlZCg1LCAzNSk7
Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhp
dFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250
ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90
ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2Vy
dCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX3Njcm9sbGJhcihoaXRUZXN0UmVz
dWx0KSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2Vk
aXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCghdGVzdC0+bV9tb3VzZVRhcmdl
dE1vZGlmaWVycyk7Ci0KLSAgICAvLyBNb3ZlIG92ZXIgc2Nyb2xsYmFyLgotICAgIGhpdFRlc3RS
ZXN1bHQgPSB0ZXN0LT5tb3ZlTW91c2VBbmRXYWl0VW50aWxNb3VzZVRhcmdldENoYW5nZWQoNSwg
NzUpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGlu
ayhoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRf
Y29udGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9o
aXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19h
c3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0
UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lz
X3Njcm9sbGJhcihoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIXRlc3QtPm1fbW91c2VU
YXJnZXRNb2RpZmllcnMpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1Blcm1pc3Npb25S
ZXF1ZXN0cyhVSUNsaWVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgLy8gU29t
ZSB2ZXJzaW9ucyBvZiBnZW9jbHVlIGdpdmUgYSBydW50aW1lIHdhcm5pbmcgYmVjYXVzZSBpdCB0
cmllcwotICAgIC8vIHRvIHJlZ2lzdGVyIHRoZSBlcnJvciBxdWFyayB0d2ljZS4gU2VlIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTg1OC4KLSAgICAvLyBNYWtlIHdh
cm5pbmdzIG5vbi1mYXRhbCBmb3IgdGhpcyB0ZXN0IHRvIG1ha2UgaXQgcGFzcy4KLSAgICB0ZXN0
LT5yZW1vdmVMb2dGYXRhbEZsYWcoR19MT0dfTEVWRUxfV0FSTklORyk7Ci0gICAgdGVzdC0+c2hv
d0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGdl
b2xvY2F0aW9uUmVxdWVzdEhUTUwgPQotICAgICAgICAiPGh0bWw+IgotICAgICAgICAiICA8c2Ny
aXB0PiIKLSAgICAgICAgIiAgZnVuY3Rpb24gcnVuVGVzdCgpIgotICAgICAgICAiICB7IgotICAg
ICAgICAiICAgIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZnVuY3Rp
b24ocCkgeyBkb2N1bWVudC50aXRsZSA9IFwiT0tcIiB9LCIKLSAgICAgICAgIiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGUpIHsgZG9jdW1lbnQu
dGl0bGUgPSBlLmNvZGUgfSk7IgotICAgICAgICAiICB9IgotICAgICAgICAiICA8L3NjcmlwdD4i
Ci0gICAgICAgICIgIDxib2R5IG9ubG9hZD0ncnVuVGVzdCgpOyc+PC9ib2R5PiIKLSAgICAgICAg
IjwvaHRtbD4iOwotCi0gICAgLy8gVGVzdCBkZW55aW5nIGEgcGVybWlzc2lvbiByZXF1ZXN0Lgot
ICAgIHRlc3QtPm1fYWxsb3dQZXJtaXNzaW9uUmVxdWVzdHMgPSBmYWxzZTsKLSAgICB0ZXN0LT5s
b2FkSHRtbChnZW9sb2NhdGlvblJlcXVlc3RIVE1MLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxU
aXRsZUNoYW5nZWQoKTsKLQotICAgIC8vIEFjY29yZGluZyB0byB0aGUgR2VvbG9jYXRpb24gQVBJ
IHNwZWNpZmljYXRpb24sICcxJyBpcyB0aGUKLSAgICAvLyBlcnJvciBjb2RlIHJldHVybmVkIGZv
ciB0aGUgUEVSTUlTU0lPTl9ERU5JRUQgZXJyb3IuCi0gICAgLy8gaHR0cDovL2Rldi53My5vcmcv
Z2VvL2FwaS9zcGVjLXNvdXJjZS5odG1sI3Bvc2l0aW9uX2Vycm9yX2ludGVyZmFjZQotICAgIGNv
bnN0IGdjaGFyKiByZXN1bHQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3RpdGxlKHRlc3QtPm1fd2Vi
Vmlldyk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHJlc3VsdCwgPT0sICIxIik7Ci0KLSAgICAvLyBU
ZXN0IGFsbG93aW5nIGEgcGVybWlzc2lvbiByZXF1ZXN0LgotICAgIHRlc3QtPm1fYWxsb3dQZXJt
aXNzaW9uUmVxdWVzdHMgPSB0cnVlOwotICAgIHRlc3QtPmxvYWRIdG1sKGdlb2xvY2F0aW9uUmVx
dWVzdEhUTUwsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbFRpdGxlQ2hhbmdlZCgpOwotCi0gICAg
Ly8gQ2hlY2sgdGhhdCB3ZSBkaWQgbm90IGdldCB0aGUgUEVSTUlTU0lPTl9ERU5JRUQgZXJyb3Ig
bm93LgotICAgIHJlc3VsdCA9IHdlYmtpdF93ZWJfdmlld19nZXRfdGl0bGUodGVzdC0+bV93ZWJW
aWV3KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIocmVzdWx0LCAhPSwgIjEiKTsKLSAgICB0ZXN0LT5h
ZGRMb2dGYXRhbEZsYWcoR19MT0dfTEVWRUxfV0FSTklORyk7Ci19Ci0KLWNsYXNzIEZpbGVDaG9v
c2VyVGVzdDogcHVibGljIFVJQ2xpZW50VGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RF
U1RfRklYVFVSRShGaWxlQ2hvb3NlclRlc3QpOwotCi0gICAgRmlsZUNob29zZXJUZXN0KCkKLSAg
ICB7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAicnVuLWZpbGUtY2hvb3Nl
ciIsIEdfQ0FMTEJBQ0socnVuRmlsZUNob29zZXJDYWxsYmFjayksIHRoaXMpOwotICAgIH0KLQot
ICAgIHN0YXRpYyBnYm9vbGVhbiBydW5GaWxlQ2hvb3NlckNhbGxiYWNrKFdlYktpdFdlYlZpZXcq
LCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QsIEZpbGVDaG9vc2VyVGVzdCogdGVz
dCkKLSAgICB7Ci0gICAgICAgIHRlc3QtPnJ1bkZpbGVDaG9vc2VyKHJlcXVlc3QpOwotICAgICAg
ICByZXR1cm4gVFJVRTsKLSAgICB9Ci0KLSAgICB2b2lkIHJ1bkZpbGVDaG9vc2VyKFdlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKLSAgICB7Ci0gICAgICAgIGFzc2VydE9iamVjdElz
RGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QocmVxdWVzdCkpOwotICAgICAgICBtX2Zp
bGVDaG9vc2VyUmVxdWVzdCA9IHJlcXVlc3Q7Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9t
YWluTG9vcCk7Ci0gICAgfQotCi0gICAgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiBjbGlja01v
dXNlQnV0dG9uQW5kV2FpdEZvckZpbGVDaG9vc2VyUmVxdWVzdChpbnQgeCwgaW50IHkpCi0gICAg
ewotICAgICAgICBjbGlja01vdXNlQnV0dG9uKHgsIHkpOwotICAgICAgICBnX21haW5fbG9vcF9y
dW4obV9tYWluTG9vcCk7Ci0gICAgICAgIHJldHVybiBtX2ZpbGVDaG9vc2VyUmVxdWVzdC5nZXQo
KTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgR1JlZlB0cjxXZWJLaXRGaWxlQ2hvb3NlclJlcXVl
c3Q+IG1fZmlsZUNob29zZXJSZXF1ZXN0OwotfTsKLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdG
aWxlQ2hvb3NlclJlcXVlc3QoRmlsZUNob29zZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQot
ewotICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOwotICAgIHN0YXRp
YyBjb25zdCBjaGFyKiBmaWxlQ2hvb3NlckhUTUxGb3JtYXQgPSAiPGh0bWw+PGJvZHk+PGlucHV0
IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjA7bWFyZ2luOjA7cGFkZGluZzow
JyB0eXBlPSdmaWxlJyAlcy8+PC9ib2R5PjwvaHRtbD4iOwotCi0gICAgLy8gTXVsdGlwbGUgc2Vs
ZWN0aW9ucyBub3QgYWxsb3dlZCwgbm8gTUlNRSBmaWx0ZXJpbmcuCi0gICAgR093blB0cjxjaGFy
PiBzaW1wbGVGaWxlVXBsb2FkSFRNTChnX3N0cmR1cF9wcmludGYoZmlsZUNob29zZXJIVE1MRm9y
bWF0LCAiIikpOwotICAgIHRlc3QtPmxvYWRIdG1sKHNpbXBsZUZpbGVVcGxvYWRIVE1MLmdldCgp
LCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBXZWJLaXRGaWxl
Q2hvb3NlclJlcXVlc3QqIGZpbGVDaG9vc2VyUmVxdWVzdCA9IHRlc3QtPmNsaWNrTW91c2VCdXR0
b25BbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0KDUsIDUpOwotICAgIGdfYXNzZXJ0KCF3ZWJr
aXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdF9tdWx0aXBsZShmaWxlQ2hvb3NlclJl
cXVlc3QpKTsKLQotICAgIGNvbnN0IGdjaGFyKiBjb25zdCogbWltZVR5cGVzID0gd2Via2l0X2Zp
bGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKGZpbGVDaG9vc2VyUmVxdWVzdCk7Ci0g
ICAgZ19hc3NlcnQoIW1pbWVUeXBlcyk7Ci0gICAgR3RrRmlsZUZpbHRlciogZmlsdGVyID0gd2Vi
a2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcihmaWxlQ2hvb3Nl
clJlcXVlc3QpOwotICAgIGdfYXNzZXJ0KCFmaWx0ZXIpOwotICAgIGNvbnN0IGdjaGFyKiBjb25z
dCogc2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0
ZWRfZmlsZXMoZmlsZUNob29zZXJSZXF1ZXN0KTsKLSAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxl
cyk7Ci0gICAgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNlbChmaWxlQ2hvb3NlclJl
cXVlc3QpOwotCi0gICAgLy8gTXVsdGlwbGUgc2VsZWN0aW9ucyBhbGxvd2VkLCBubyBNSU1FIGZp
bHRlcmluZywgc29tZSBwcmUtc2VsZWN0ZWQgZmlsZXMuCi0gICAgR093blB0cjxjaGFyPiBtdWx0
aXBsZVNlbGVjdGlvbkZpbGVVcGxvYWRIVE1MKGdfc3RyZHVwX3ByaW50ZihmaWxlQ2hvb3NlckhU
TUxGb3JtYXQsICJtdWx0aXBsZSIpKTsKLSAgICB0ZXN0LT5sb2FkSHRtbChtdWx0aXBsZVNlbGVj
dGlvbkZpbGVVcGxvYWRIVE1MLmdldCgpLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmlu
aXNoZWQoKTsKLSAgICBmaWxlQ2hvb3NlclJlcXVlc3QgPSB0ZXN0LT5jbGlja01vdXNlQnV0dG9u
QW5kV2FpdEZvckZpbGVDaG9vc2VyUmVxdWVzdCg1LCA1KTsKLSAgICBnX2Fzc2VydCh3ZWJraXRf
ZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdF9tdWx0aXBsZShmaWxlQ2hvb3NlclJlcXVl
c3QpKTsKLQotICAgIG1pbWVUeXBlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRf
bWltZV90eXBlcyhmaWxlQ2hvb3NlclJlcXVlc3QpOwotICAgIGdfYXNzZXJ0KCFtaW1lVHlwZXMp
OwotICAgIGZpbHRlciA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBl
c19maWx0ZXIoZmlsZUNob29zZXJSZXF1ZXN0KTsKLSAgICBnX2Fzc2VydCghZmlsdGVyKTsKLSAg
ICBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3Rl
ZF9maWxlcyhmaWxlQ2hvb3NlclJlcXVlc3QpOwotICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZpbGVz
KTsKLQotICAgIC8vIFNlbGVjdCBzb21lIGZpbGVzLgotICAgIGNvbnN0IGdjaGFyKiBmaWxlc1Rv
U2VsZWN0WzRdID0geyAiL2ZvbyIsICIvZm9vL2JhciIsICIvZm9vL2Jhci9iYXoiLCAwIH07Ci0g
ICAgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3NlbGVjdF9maWxlcyhmaWxlQ2hvb3NlclJl
cXVlc3QsIGZpbGVzVG9TZWxlY3QpOwotCi0gICAgLy8gQ2hlY2sgdGhlIGZpbGVzIHRoYXQgaGF2
ZSBiZWVuIGp1c3Qgc2VsZWN0ZWQuCi0gICAgc2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9maWxlX2No
b29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMoZmlsZUNob29zZXJSZXF1ZXN0KTsKLSAg
ICBnX2Fzc2VydChzZWxlY3RlZEZpbGVzKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRG
aWxlc1swXSwgPT0sICIvZm9vIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNb
MV0sID09LCAiL2Zvby9iYXIiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1sy
XSwgPT0sICIvZm9vL2Jhci9iYXoiKTsKLSAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxlc1szXSk7
Ci0KLSAgICAvLyBQZXJmb3JtIGFub3RoZXIgcmVxdWVzdCB0byBjaGVjayBpZiB0aGUgbGlzdCBv
ZiBmaWxlcyBzZWxlY3RlZAotICAgIC8vIGluIHRoZSBwcmV2aW91cyBzdGVwIGFwcGVhcnMgbm93
IGFzIHBhcnQgb2YgdGhlIG5ldyByZXF1ZXN0LgotICAgIGZpbGVDaG9vc2VyUmVxdWVzdCA9IHRl
c3QtPmNsaWNrTW91c2VCdXR0b25BbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0KDUsIDUpOwot
ICAgIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVj
dGVkX2ZpbGVzKGZpbGVDaG9vc2VyUmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQoc2VsZWN0ZWRGaWxl
cyk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMF0sID09LCAiL2ZvbyIpOwot
ICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzFdLCA9PSwgIi9mb28vYmFyIik7Ci0g
ICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMl0sID09LCAiL2Zvby9iYXIvYmF6Iik7
Ci0gICAgZ19hc3NlcnQoIXNlbGVjdGVkRmlsZXNbM10pOwotICAgIHdlYmtpdF9maWxlX2Nob29z
ZXJfcmVxdWVzdF9jYW5jZWwoZmlsZUNob29zZXJSZXF1ZXN0KTsKLQotICAgIC8vIE11bHRpcGxl
IHNlbGVjdGlvbnMgbm90IGFsbG93ZWQsIG9ubHkgYWNjZXB0IGltYWdlcywgYXVkaW8gYW5kIHZp
ZGVvIGZpbGVzLi4KLSAgICBHT3duUHRyPGNoYXI+IG1pbWVGaWx0ZXJlZEZpbGVVcGxvYWRIVE1M
KGdfc3RyZHVwX3ByaW50ZihmaWxlQ2hvb3NlckhUTUxGb3JtYXQsICJhY2NlcHQ9J2F1ZGlvLyos
dmlkZW8vKixpbWFnZS8qJyIpKTsKLSAgICB0ZXN0LT5sb2FkSHRtbChtaW1lRmlsdGVyZWRGaWxl
VXBsb2FkSFRNTC5nZXQoKSwgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7
Ci0gICAgZmlsZUNob29zZXJSZXF1ZXN0ID0gdGVzdC0+Y2xpY2tNb3VzZUJ1dHRvbkFuZFdhaXRG
b3JGaWxlQ2hvb3NlclJlcXVlc3QoNSwgNSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9maWxlX2No
b29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxlKGZpbGVDaG9vc2VyUmVxdWVzdCkpOwot
Ci0gICAgbWltZVR5cGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5
cGVzKGZpbGVDaG9vc2VyUmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQobWltZVR5cGVzKTsKLSAgICBn
X2Fzc2VydF9jbXBzdHIobWltZVR5cGVzWzBdLCA9PSwgImF1ZGlvLyoiKTsKLSAgICBnX2Fzc2Vy
dF9jbXBzdHIobWltZVR5cGVzWzFdLCA9PSwgInZpZGVvLyoiKTsKLSAgICBnX2Fzc2VydF9jbXBz
dHIobWltZVR5cGVzWzJdLCA9PSwgImltYWdlLyoiKTsKLSAgICBnX2Fzc2VydCghbWltZVR5cGVz
WzNdKTsKLQotICAgIGZpbHRlciA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWlt
ZV90eXBlc19maWx0ZXIoZmlsZUNob29zZXJSZXF1ZXN0KTsKLSAgICBnX2Fzc2VydChHVEtfSVNf
RklMRV9GSUxURVIoZmlsdGVyKSk7Ci0gICAgZ19hc3NlcnQoY2hlY2tNaW1lVHlwZUZvckZpbHRl
cihmaWx0ZXIsICJhdWRpby8qIikpOwotICAgIGdfYXNzZXJ0KGNoZWNrTWltZVR5cGVGb3JGaWx0
ZXIoZmlsdGVyLCAidmlkZW8vKiIpKTsKLSAgICBnX2Fzc2VydChjaGVja01pbWVUeXBlRm9yRmls
dGVyKGZpbHRlciwgImltYWdlLyoiKSk7Ci0KLSAgICBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2Zp
bGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhmaWxlQ2hvb3NlclJlcXVlc3Qp
OwotICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZpbGVzKTsKLSAgICB3ZWJraXRfZmlsZV9jaG9vc2Vy
X3JlcXVlc3RfY2FuY2VsKGZpbGVDaG9vc2VyUmVxdWVzdCk7Ci19Ci0KLXZvaWQgYmVmb3JlQWxs
KCkKLXsKLSAgICBVSUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJjcmVhdGUtcmVh
ZHktY2xvc2UiLCB0ZXN0V2ViVmlld0NyZWF0ZVJlYWR5Q2xvc2UpOwotICAgIE1vZGFsRGlhbG9n
c1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJhbGxvdy1tb2RhbC1kaWFsb2dzIiwgdGVzdFdl
YlZpZXdBbGxvd01vZGFsRGlhbG9ncyk7Ci0gICAgTW9kYWxEaWFsb2dzVGVzdDo6YWRkKCJXZWJL
aXRXZWJWaWV3IiwgImRpc2FsbG93LW1vZGFsLWRpYWxvZ3MiLCB0ZXN0V2ViVmlld0Rpc2FsbG93
TW9kYWxEaWFsb2dzKTsKLSAgICBVSUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJq
YXZhc2NyaXB0LWRpYWxvZ3MiLCB0ZXN0V2ViVmlld0phdmFTY3JpcHREaWFsb2dzKTsKLSAgICBV
SUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJ3aW5kb3ctcHJvcGVydGllcyIsIHRl
c3RXZWJWaWV3V2luZG93UHJvcGVydGllcyk7Ci0gICAgVUlDbGllbnRUZXN0OjphZGQoIldlYktp
dFdlYlZpZXciLCAibW91c2UtdGFyZ2V0IiwgdGVzdFdlYlZpZXdNb3VzZVRhcmdldCk7Ci0gICAg
VUlDbGllbnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAicGVybWlzc2lvbi1yZXF1ZXN0cyIs
IHRlc3RXZWJWaWV3UGVybWlzc2lvblJlcXVlc3RzKTsKLSAgICBGaWxlQ2hvb3NlclRlc3Q6OmFk
ZCgiV2ViS2l0V2ViVmlldyIsICJmaWxlLWNob29zZXItcmVxdWVzdCIsIHRlc3RXZWJWaWV3Rmls
ZUNob29zZXJSZXF1ZXN0KTsKLX0KLQotdm9pZCBhZnRlckFsbCgpCi17Ci19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViRXh0ZW5zaW9u
cy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViRXh0
ZW5zaW9ucy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxY2I3YWFkYTFkY2U0
M2RlOGI3ODI2Yzc1NTljYTFlNjUzOTE4ODAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
VGVzdFdlYkV4dGVuc2lvbnMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTk1ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LQotI2luY2x1ZGUgIldlYktpdFRlc3RCdXMuaCIKLSNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgot
I2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLQotc3RhdGljIFdlYktpdFRlc3RCdXMq
IGJ1czsKLQotc3RhdGljIHZvaWQgdGVzdFdlYkV4dGVuc2lvbkdldFRpdGxlKFdlYlZpZXdUZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48aGVh
ZD48dGl0bGU+V2ViS2l0R1RLKyBXZWIgRXh0ZW5zaW9ucyBUZXN0PC90aXRsZT48L2hlYWQ+PGJv
ZHk+PC9ib2R5PjwvaHRtbD4iLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQo
KTsKLQotICAgIEdSZWZQdHI8R0RCdXNQcm94eT4gcHJveHkgPSBhZG9wdEdSZWYoYnVzLT5jcmVh
dGVQcm94eSgib3JnLndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9uVGVzdCIsCi0gICAgICAgICIvb3Jn
L3dlYmtpdC9ndGsvV2ViRXh0ZW5zaW9uVGVzdCIgLCAib3JnLndlYmtpdC5ndGsuV2ViRXh0ZW5z
aW9uVGVzdCIsIHRlc3QtPm1fbWFpbkxvb3ApKTsKLSAgICBHUmVmUHRyPEdWYXJpYW50PiByZXN1
bHQgPSBhZG9wdEdSZWYoZ19kYnVzX3Byb3h5X2NhbGxfc3luYygKLSAgICAgICAgcHJveHkuZ2V0
KCksCi0gICAgICAgICJHZXRUaXRsZSIsCi0gICAgICAgIGdfdmFyaWFudF9uZXcoIih0KSIsIHdl
YmtpdF93ZWJfdmlld19nZXRfcGFnZV9pZCh0ZXN0LT5tX3dlYlZpZXcpKSwKLSAgICAgICAgR19E
QlVTX0NBTExfRkxBR1NfTk9ORSwKLSAgICAgICAgLTEsIDAsIDApKTsKLSAgICBnX2Fzc2VydChy
ZXN1bHQpOwotCi0gICAgY29uc3QgY2hhciogdGl0bGU7Ci0gICAgZ192YXJpYW50X2dldChyZXN1
bHQuZ2V0KCksICIoJnMpIiwgJnRpdGxlKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGl0bGUsID09
LCAiV2ViS2l0R1RLKyBXZWIgRXh0ZW5zaW9ucyBUZXN0Iik7Ci19Ci0KLXN0YXRpYyB2b2lkIGRv
Y3VtZW50TG9hZGVkQ2FsbGJhY2soR0RCdXNDb25uZWN0aW9uKiwgY29uc3QgY2hhciosIGNvbnN0
IGNoYXIqLCBjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIEdWYXJpYW50KiwgV2ViVmlld1Rlc3Qq
IHRlc3QpCi17Ci0gICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKLX0KLQot
c3RhdGljIHZvaWQgdGVzdERvY3VtZW50TG9hZGVkU2lnbmFsKFdlYlZpZXdUZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQotewotICAgIEdSZWZQdHI8R0RCdXNQcm94eT4gcHJveHkgPSBhZG9wdEdS
ZWYoYnVzLT5jcmVhdGVQcm94eSgib3JnLndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9uVGVzdCIsCi0g
ICAgICAgICIvb3JnL3dlYmtpdC9ndGsvV2ViRXh0ZW5zaW9uVGVzdCIsICJvcmcud2Via2l0Lmd0
ay5XZWJFeHRlbnNpb25UZXN0IiwgdGVzdC0+bV9tYWluTG9vcCkpOwotICAgIEdEQnVzQ29ubmVj
dGlvbiogY29ubmVjdGlvbiA9IGdfZGJ1c19wcm94eV9nZXRfY29ubmVjdGlvbihwcm94eS5nZXQo
KSk7Ci0gICAgZ3VpbnQgaWQgPSBnX2RidXNfY29ubmVjdGlvbl9zaWduYWxfc3Vic2NyaWJlKGNv
bm5lY3Rpb24sCi0gICAgICAgIDAsCi0gICAgICAgICJvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNp
b25UZXN0IiwKLSAgICAgICAgIkRvY3VtZW50TG9hZGVkIiwKLSAgICAgICAgIi9vcmcvd2Via2l0
L2d0ay9XZWJFeHRlbnNpb25UZXN0IiwKLSAgICAgICAgMCwKLSAgICAgICAgR19EQlVTX1NJR05B
TF9GTEFHU19OT05FLAotICAgICAgICByZWludGVycHJldF9jYXN0PEdEQnVzU2lnbmFsQ2FsbGJh
Y2s+KGRvY3VtZW50TG9hZGVkQ2FsbGJhY2spLAotICAgICAgICB0ZXN0LAotICAgICAgICAwKTsK
LSAgICBnX2Fzc2VydChpZCk7Ci0KLSAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGhlYWQ+PHRp
dGxlPldlYktpdEdUSysgV2ViIEV4dGVuc2lvbnMgVGVzdDwvdGl0bGU+PC9oZWFkPjxib2R5Pjwv
Ym9keT48L2h0bWw+IiwgMCk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKHRlc3QtPm1fbWFpbkxvb3Ap
OwotICAgIGdfZGJ1c19jb25uZWN0aW9uX3NpZ25hbF91bnN1YnNjcmliZShjb25uZWN0aW9uLCBp
ZCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiB3ZWJQcm9jZXNzQ3Jhc2hlZENhbGxiYWNrKFdlYktp
dFdlYlZpZXcqLCBXZWJWaWV3VGVzdCogdGVzdCkKLXsKLSAgICB0ZXN0LT5xdWl0TWFpbkxvb3Ao
KTsKLQotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYktpdFdlYlZp
ZXdQcm9jZXNzQ3Jhc2hlZChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAg
ICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PC9odG1sPiIsIDApOwotICAgIHRlc3QtPndhaXRVbnRp
bExvYWRGaW5pc2hlZCgpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh0ZXN0LT5tX3dlYlZpZXcs
ICJ3ZWItcHJvY2Vzcy1jcmFzaGVkIiwKLSAgICAgICAgR19DQUxMQkFDSyh3ZWJQcm9jZXNzQ3Jh
c2hlZENhbGxiYWNrKSwgdGVzdCk7Ci0KLSAgICBHUmVmUHRyPEdEQnVzUHJveHk+IHByb3h5ID0g
YWRvcHRHUmVmKGJ1cy0+Y3JlYXRlUHJveHkoIm9yZy53ZWJraXQuZ3RrLldlYkV4dGVuc2lvblRl
c3QiLAotICAgICAgICAiL29yZy93ZWJraXQvZ3RrL1dlYkV4dGVuc2lvblRlc3QiLCAib3JnLndl
YmtpdC5ndGsuV2ViRXh0ZW5zaW9uVGVzdCIsIHRlc3QtPm1fbWFpbkxvb3ApKTsKLQotICAgIEdS
ZWZQdHI8R1ZhcmlhbnQ+IHJlc3VsdCA9IGFkb3B0R1JlZihnX2RidXNfcHJveHlfY2FsbF9zeW5j
KAotICAgICAgICBwcm94eS5nZXQoKSwKLSAgICAgICAgIkFib3J0UHJvY2VzcyIsCi0gICAgICAg
IDAsCi0gICAgICAgIEdfREJVU19DQUxMX0ZMQUdTX05PTkUsCi0gICAgICAgIC0xLCAwLCAwKSk7
Ci0gICAgZ19hc3NlcnQoIXJlc3VsdCk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKHRlc3QtPm1fbWFp
bkxvb3ApOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViRXh0ZW5zaW9uV2luZG93T2JqZWN0Q2xl
YXJlZChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5sb2Fk
SHRtbCgiPGh0bWw+PGhlYWRlcj48L2hlYWRlcj48Ym9keT48L2JvZHk+PC9odG1sPiIsIDApOwot
ICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgR093blB0cjxHRXJyb3I+
IGVycm9yOwotICAgIFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQgPSB0
ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoIndpbmRvdy5lY2hvKCdGb28n
KTsiLCAmZXJyb3Iub3V0UHRyKCkpOwotICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOwot
ICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7Ci0gICAgR093blB0cjxjaGFyPiB2YWx1ZVN0cmlu
ZyhXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0
KSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgIkZvbyIpOwot
fQotCi1zdGF0aWMgZ2Jvb2xlYW4gc2NyaXB0RGlhbG9nQ2FsbGJhY2soV2ViS2l0V2ViVmlldyos
IFdlYktpdFNjcmlwdERpYWxvZyogZGlhbG9nLCBjaGFyKiogcmVzdWx0KQotewotICAgIGdfYXNz
ZXJ0X2NtcHVpbnQod2Via2l0X3NjcmlwdF9kaWFsb2dfZ2V0X2RpYWxvZ190eXBlKGRpYWxvZyks
ID09LCBXRUJLSVRfU0NSSVBUX0RJQUxPR19BTEVSVCk7Ci0gICAgZ19hc3NlcnQoISpyZXN1bHQp
OwotICAgICpyZXN1bHQgPSBnX3N0cmR1cCh3ZWJraXRfc2NyaXB0X2RpYWxvZ19nZXRfbWVzc2Fn
ZShkaWFsb2cpKTsKLSAgICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQgcnVuSmF2YVNj
cmlwdEluSXNvbGF0ZWRXb3JsZEZpbmlzaGVkQ2FsbGJhY2soR0RCdXNQcm94eSogcHJveHksIEdB
c3luY1Jlc3VsdCogcmVzdWx0LCBXZWJWaWV3VGVzdCogdGVzdCkKLXsKLSAgICBnX2RidXNfcHJv
eHlfY2FsbF9maW5pc2gocHJveHksIHJlc3VsdCwgMCk7Ci0gICAgZ19tYWluX2xvb3BfcXVpdCh0
ZXN0LT5tX21haW5Mb29wKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYkV4dGVuc2lvbklzb2xh
dGVkV29ybGQoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+
bG9hZEh0bWwoIjxodG1sPjxoZWFkZXI+PC9oZWFkZXI+PGJvZHk+PGRpdiBpZD0nY29uc29sZSc+
PC9kaXY+PC9ib2R5PjwvaHRtbD4iLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNo
ZWQoKTsKLQotICAgIEdPd25QdHI8Y2hhcj4gcmVzdWx0OwotICAgIGd1bG9uZyBzY3JpcHREaWFs
b2dJRCA9IGdfc2lnbmFsX2Nvbm5lY3QodGVzdC0+bV93ZWJWaWV3LCAic2NyaXB0LWRpYWxvZyIs
IEdfQ0FMTEJBQ0soc2NyaXB0RGlhbG9nQ2FsbGJhY2spLCAmcmVzdWx0Lm91dFB0cigpKTsKLQot
ICAgIHN0YXRpYyBjb25zdCBjaGFyICptYWluV29ybGRTY3JpcHQgPQotICAgICAgICAidG9wLmZv
byA9ICdGb28nO1xuIgotICAgICAgICAiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUn
KS5pbm5lckhUTUwgPSB0b3AuZm9vO1xuIgotICAgICAgICAid2luZG93Lm9wZW4gPSBmdW5jdGlv
biAoKSB7IGFsZXJ0KCdNYWluIFdvcmxkJyk7IH1cbiIKLSAgICAgICAgImRvY3VtZW50Lm9wZW4o
MSwgMiwgMyk7IjsKLSAgICB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQo
bWFpbldvcmxkU2NyaXB0LCAwKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIocmVzdWx0LmdldCgpLCA9
PSwgIk1haW4gV29ybGQiKTsKLSAgICByZXN1bHQuY2xlYXIoKTsKLQotICAgIFdlYktpdEphdmFz
Y3JpcHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2Fp
dFVudGlsRmluaXNoZWQoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJykuaW5uZXJI
VE1MIiwgMCk7Ci0gICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAgR093blB0cjxj
aGFyPiB2YWx1ZVN0cmluZyhXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhq
YXZhc2NyaXB0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgp
LCA9PSwgIkZvbyIpOwotCi0gICAgc3RhdGljIGNvbnN0IGNoYXIgKmlzb2xhdGVkV29ybGRTY3Jp
cHQgPQotICAgICAgICAiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5pbm5lckhU
TUwgPSB0b3AuZm9vO1xuIgotICAgICAgICAid2luZG93Lm9wZW4gPSBmdW5jdGlvbiAoKSB7IGFs
ZXJ0KCdJc29sYXRlZCBXb3JsZCcpOyB9XG4iCi0gICAgICAgICJkb2N1bWVudC5vcGVuKDEsIDIs
IDMpOyI7Ci0gICAgR1JlZlB0cjxHREJ1c1Byb3h5PiBwcm94eSA9IGFkb3B0R1JlZihidXMtPmNy
ZWF0ZVByb3h5KCJvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwKLSAgICAgICAgIi9v
cmcvd2Via2l0L2d0ay9XZWJFeHRlbnNpb25UZXN0IiAsICJvcmcud2Via2l0Lmd0ay5XZWJFeHRl
bnNpb25UZXN0IiwgdGVzdC0+bV9tYWluTG9vcCkpOwotICAgIGdfZGJ1c19wcm94eV9jYWxsKHBy
b3h5LmdldCgpLAotICAgICAgICAiUnVuSmF2YVNjcmlwdEluSXNvbGF0ZWRXb3JsZCIsCi0gICAg
ICAgIGdfdmFyaWFudF9uZXcoIih0JnMpIiwgd2Via2l0X3dlYl92aWV3X2dldF9wYWdlX2lkKHRl
c3QtPm1fd2ViVmlldyksIGlzb2xhdGVkV29ybGRTY3JpcHQpLAotICAgICAgICBHX0RCVVNfQ0FM
TF9GTEFHU19OT05FLAotICAgICAgICAtMSwgMCwKLSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxH
QXN5bmNSZWFkeUNhbGxiYWNrPihydW5KYXZhU2NyaXB0SW5Jc29sYXRlZFdvcmxkRmluaXNoZWRD
YWxsYmFjayksCi0gICAgICAgIHRlc3QpOwotICAgIGdfbWFpbl9sb29wX3J1bih0ZXN0LT5tX21h
aW5Mb29wKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIocmVzdWx0LmdldCgpLCA9PSwgIklzb2xhdGVk
IFdvcmxkIik7Ci0gICAgcmVzdWx0LmNsZWFyKCk7Ci0KLSAgICAvLyBDaGVjayB0aGF0ICd0b3Au
Zm9vJyBkZWZpbmVkIGluIG1haW4gd29ybGQgaXMgbm90IHZpc2libGUgaW4gaXNvbGF0ZWQgd29y
bGQuCi0gICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50
aWxGaW5pc2hlZCgiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5pbm5lckhUTUwi
LCAwKTsKLSAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKLSAgICB2YWx1ZVN0cmluZy5z
ZXQoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0NTdHJpbmcoamF2YXNjcmlwdFJlc3Vs
dCkpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih2YWx1ZVN0cmluZy5nZXQoKSwgPT0sICJ1bmRlZmlu
ZWQiKTsKLQotICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdCh0ZXN0LT5tX3dlYlZpZXcs
IHNjcmlwdERpYWxvZ0lEKTsKLX0KLQotdm9pZCBiZWZvcmVBbGwoKQotewotICAgIHdlYmtpdF93
ZWJfY29udGV4dF9zZXRfd2ViX2V4dGVuc2lvbnNfZGlyZWN0b3J5KHdlYmtpdF93ZWJfY29udGV4
dF9nZXRfZGVmYXVsdCgpLCBXRUJLSVRfVEVTVF9XRUJfRVhURU5TSU9OU19ESVIpOwotICAgIGJ1
cyA9IG5ldyBXZWJLaXRUZXN0QnVzKCk7Ci0gICAgaWYgKCFidXMtPnJ1bigpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJFeHRlbnNpb24iLCAiZG9t
LWRvY3VtZW50LXRpdGxlIiwgdGVzdFdlYkV4dGVuc2lvbkdldFRpdGxlKTsKLSAgICBXZWJWaWV3
VGVzdDo6YWRkKCJXZWJLaXRXZWJFeHRlbnNpb24iLCAiZG9jdW1lbnQtbG9hZGVkLXNpZ25hbCIs
IHRlc3REb2N1bWVudExvYWRlZFNpZ25hbCk7Ci0gICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0
V2ViVmlldyIsICJ3ZWItcHJvY2Vzcy1jcmFzaGVkIiwgdGVzdFdlYktpdFdlYlZpZXdQcm9jZXNz
Q3Jhc2hlZCk7Ci0gICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViRXh0ZW5zaW9uIiwgIndp
bmRvdy1vYmplY3QtY2xlYXJlZCIsIHRlc3RXZWJFeHRlbnNpb25XaW5kb3dPYmplY3RDbGVhcmVk
KTsKLSAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJFeHRlbnNpb24iLCAiaXNvbGF0ZWQt
d29ybGQiLCB0ZXN0V2ViRXh0ZW5zaW9uSXNvbGF0ZWRXb3JsZCk7Ci19Ci0KLXZvaWQgYWZ0ZXJB
bGwoKQotewotICAgIGRlbGV0ZSBidXM7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0QWNjZXNzaWJpbGl0eS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0QWNjZXNzaWJpbGl0
eS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxYmQzODM1OTBmMTQ2ZWU0ZTcx
OGYzYjQxYTNhZDVjYjcwNWFlZTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdl
YktpdEFjY2Vzc2liaWxpdHkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjI1ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LQotI2luY2x1ZGUgIlRlc3RNYWluLmgiCi0jaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKLQotLy8g
VGhlIGxpYmF0c3BpIGhlYWRlcnMgZG9uJ3QgdXNlIEdfQkVHSU5fREVDTFMKLWV4dGVybiAiQyIg
ewotI2luY2x1ZGUgPGF0c3BpL2F0c3BpLmg+Ci19Ci0KLSNpbmNsdWRlIDxlcnJuby5oPgotI2lu
Y2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPHNpZ25hbC5oPgot
I2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVk
ZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIu
aD4KLQotLy8gTmFtZSBvZiB0aGUgdGVzdCBzZXJ2ZXIgYXBwbGljYXRpb24gY3JlYXRpbmcgdGhl
IHdlYlZpZXcgb2JqZWN0Lgotc3RhdGljIGNvbnN0IGNoYXIqIGtUZXN0U2VydmVyQXBwTmFtZSA9
ICJBY2Nlc3NpYmlsaXR5VGVzdFNlcnZlciI7Ci0KLS8vIE1heCBzZWNvbmRzIHRvIHdhaXQgZm9y
IHRoZSB0ZXN0IHNlcnZlciBiZWZvcmUgaW5zcGVjdGluZyBpdC4KLXN0YXRpYyBjb25zdCBpbnQg
a01heFdhaXRGb3JDaGlsZCA9IDU7Ci0KLS8vIFRoZSBQSUQgZm9yIHRoZSB0ZXN0IHNlcnZlciBy
dW5uaW5nLCBzbyB3ZSBjYW4ga2lsbCBpdCBpZiBuZWVkZWQuCi1zdGF0aWMgR1BpZCBrQ2hpbGRQ
cm9jZXNzUGlkID0gMDsKLQotLy8gV2hldGhlciB0aGUgY2hpbGQgaGFzIHJlcGxpZWQgYW5kIGl0
J3MgcmVhZHkuCi1zdGF0aWMgYm9vbCBrQ2hpbGRJc1JlYWR5ID0gZmFsc2U7Ci0KLXN0YXRpYyB2
b2lkIHN0b3BUZXN0U2VydmVyKCkKLXsKLSAgICAvLyBEbyBub3RoaW5nIGlmIHRoZXJlJ3Mgbm8g
c2VydmVyIHJ1bm5pbmcuCi0gICAgaWYgKCFrQ2hpbGRQcm9jZXNzUGlkKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBnX3NwYXduX2Nsb3NlX3BpZChrQ2hpbGRQcm9jZXNzUGlkKTsKLSAgICBraWxs
KGtDaGlsZFByb2Nlc3NQaWQsIFNJR1RFUk0pOwotICAgIGtDaGlsZFByb2Nlc3NQaWQgPSAwOwot
fQotCi1zdGF0aWMgdm9pZCBzaWdBYm9ydEhhbmRsZXIoaW50IHNpZ051bSkKLXsKLSAgICAvLyBK
dXN0IHN0b3AgdGhlIHRlc3Qgc2VydmVyIGlmIFNJR0FCUlQgd2FzIHJlY2VpdmVkLgotICAgIHN0
b3BUZXN0U2VydmVyKCk7Ci19Ci0KLXN0YXRpYyBncG9pbnRlciB0ZXN0U2VydmVyTW9uaXRvclRo
cmVhZEZ1bmMoZ3BvaW50ZXIpCi17Ci0gICAgLy8gV2FpdCBmb3IgdGhlIHNwZWNpZmllZCB0aW1l
b3V0IHRvIGhhcHBlbi4KLSAgICBnX3VzbGVlcChrTWF4V2FpdEZvckNoaWxkICogR19VU0VDX1BF
Ul9TRUMpOwotCi0gICAgLy8gS2lsbCB0aGUgY2hpbGQgcHJvY2VzcyBpZiBub3QgcmVhZHkgeWV0
LgotICAgIGlmICgha0NoaWxkSXNSZWFkeSkKLSAgICAgICAgc3RvcFRlc3RTZXJ2ZXIoKTsKLQot
ICAgIGdfdGhyZWFkX2V4aXQoMCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0
YXJ0VGVzdFNlcnZlck1vbml0b3IoKQotewotICAgIGtDaGlsZElzUmVhZHkgPSBmYWxzZTsKLSAg
ICBnX3RocmVhZF9uZXcoIlRlc3RTZXJ2ZXJNb25pdG9yIiwgdGVzdFNlcnZlck1vbml0b3JUaHJl
YWRGdW5jLCAwKTsKLX0KLQotc3RhdGljIHZvaWQgc3RhcnRUZXN0U2VydmVyKCkKLXsKLSAgICAv
LyBQcmVwYXJlIGFyZ3ZbXSBmb3Igc3Bhd25pbmcgdGhlIHNlcnZlciBwcm9jZXNzLgotICAgIEdP
d25QdHI8Y2hhcj4gdGVzdFNlcnZlclBhdGgoZ19idWlsZF9maWxlbmFtZShXRUJLSVRfRVhFQ19Q
QVRILCAiV2ViS2l0MkdPYmplY3RBUElUZXN0cyIsIGtUZXN0U2VydmVyQXBwTmFtZSwgTlVMTCkp
OwotCi0gICAgY2hhciogdGVzdFNlcnZlckFyZ3ZbMl07Ci0gICAgdGVzdFNlcnZlckFyZ3ZbMF0g
PSB0ZXN0U2VydmVyUGF0aC5nZXQoKTsKLSAgICB0ZXN0U2VydmVyQXJndlsxXSA9IDA7Ci0KLSAg
ICAvLyBTcGF3biB0aGUgc2VydmVyLCBnZXR0aW5nIGl0cyBzdGRvdXQgZmlsZSBkZXNjcmlwdG9y
IHRvIHNldCBhCi0gICAgLy8gY29tbXVuaWNhdGlvbiBjaGFubmVsLCBzbyB3ZSBrbm93IHdoZW4g
aXQncyByZWFkeS4KLSAgICBpbnQgY2hpbGRTdGRvdXQgPSAwOwotICAgIGlmICghZ19zcGF3bl9h
c3luY193aXRoX3BpcGVzKDAsIHRlc3RTZXJ2ZXJBcmd2LCAwLCBzdGF0aWNfY2FzdDxHU3Bhd25G
bGFncz4oMCksIDAsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtDaGls
ZFByb2Nlc3NQaWQsIDAsICZjaGlsZFN0ZG91dCwgMCwgMCkpIHsKLSAgICAgICAgY2xvc2UoY2hp
bGRTdGRvdXQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gU3RhcnQgbW9uaXRv
cmluZyB0aGUgdGVzdCBzZXJ2ZXIgKGluIGEgc2VwYXJhdGUgdGhyZWFkKSB0bwotICAgIC8vIGVu
c3VyZSB3ZSBkb24ndCBibG9jayBvbiB0aGUgY2hpbGQgcHJvY2VzcyBtb3JlIHRoYW4gYSB0aW1l
b3V0LgotICAgIHN0YXJ0VGVzdFNlcnZlck1vbml0b3IoKTsKLQotICAgIGNoYXIgbXNnWzJdOwot
ICAgIEdJT0NoYW5uZWwqIGlvQ2hhbm5lbCA9IGdfaW9fY2hhbm5lbF91bml4X25ldyhjaGlsZFN0
ZG91dCk7Ci0gICAgaWYgKGdfaW9fY2hhbm5lbF9yZWFkX2NoYXJzKGlvQ2hhbm5lbCwgbXNnLCAy
LCAwLCAwKSA9PSBHX0lPX1NUQVRVU19OT1JNQUwpIHsKLSAgICAgICAgLy8gQ2hlY2sgd2hldGhl
ciB0aGUgc2VydmVyIHNlbnQgYSBtZXNzYWdlIHNheWluZyBpdCdzIHJlYWR5Ci0gICAgICAgIC8v
IGFuZCBzdG9yZSB0aGUgcmVzdWx0IGdsb2JhbGx5LCBzbyB0aGUgbW9uaXRvciBjYW4gc2VlIGl0
LgotICAgICAgICBrQ2hpbGRJc1JlYWR5ID0gbXNnWzBdID09ICdPJyAmJiBtc2dbMV0gPT0gJ0sn
OwotICAgIH0KLSAgICBnX2lvX2NoYW5uZWxfdW5yZWYoaW9DaGFubmVsKTsKLSAgICBjbG9zZShj
aGlsZFN0ZG91dCk7Ci0KLSAgICAvLyBUaGUgdGltZW91dCB3YXMgcmVhY2hlZCBhbmQgdGhlIHNl
cnZlciBpcyBub3QgcmVhZHkgeWV0LCBzbwotICAgIC8vIHN0b3AgaXQgaW5tZWRpYXRlbHksIGFu
ZCBsZXQgdGhlIHVuaXQgdGVzdHMgZmFpbC4KLSAgICBpZiAoIWtDaGlsZElzUmVhZHkpCi0gICAg
ICAgIHN0b3BUZXN0U2VydmVyKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNoZWNrQXRzcGlBY2Nlc3Np
YmxlKEF0c3BpQWNjZXNzaWJsZSogYWNjZXNzaWJsZSwgY29uc3QgY2hhciogdGFyZ2V0TmFtZSwg
QXRzcGlSb2xlIHRhcmdldFJvbGUpCi17Ci0gICAgZ19hc3NlcnQoQVRTUElfSVNfQUNDRVNTSUJM
RShhY2Nlc3NpYmxlKSk7Ci0KLSAgICBHT3duUHRyPGNoYXI+IG5hbWUoYXRzcGlfYWNjZXNzaWJs
ZV9nZXRfbmFtZShhY2Nlc3NpYmxlLCAwKSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRhcmdldE5h
bWUsID09LCBuYW1lLmdldCgpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGFyZ2V0Um9sZSwgPT0s
IGF0c3BpX2FjY2Vzc2libGVfZ2V0X3JvbGUoYWNjZXNzaWJsZSwgMCkpOwotfQotCi1zdGF0aWMg
R1JlZlB0cjxBdHNwaUFjY2Vzc2libGU+IGZpbmRUZXN0U2VydmVyQXBwbGljYXRpb24oKQotewot
ICAgIC8vIE9ubHkgb25lIGRlc2t0b3AgaXMgc3VwcG9ydGVkIGJ5IEFUU1BJIGF0IHRoZSBtb21l
bnQuCi0gICAgR1JlZlB0cjxBdHNwaUFjY2Vzc2libGU+IGRlc2t0b3AgPSBhZG9wdEdSZWYoYXRz
cGlfZ2V0X2Rlc2t0b3AoMCkpOwotCi0gICAgLy8gTG9vayBmb3IgdGhlIHNlcnZlciBhcHBsaWNh
dGlvbiBpbiB0aGUgbGlzdCBvZiBhcHBzLgotICAgIEdSZWZQdHI8QXRzcGlBY2Nlc3NpYmxlPiBj
dXJyZW50OwotICAgIGludCBjaGlsZENvdW50ID0gYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRf
Y291bnQoZGVza3RvcC5nZXQoKSwgMCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZENv
dW50OyBpKyspIHsKLSAgICAgICAgY3VycmVudCA9IGFkb3B0R1JlZihhdHNwaV9hY2Nlc3NpYmxl
X2dldF9jaGlsZF9hdF9pbmRleChkZXNrdG9wLmdldCgpLCBpLCAwKSk7Ci0gICAgICAgIGlmICgh
Z19zdHJjbXAwKGF0c3BpX2FjY2Vzc2libGVfZ2V0X25hbWUoY3VycmVudC5nZXQoKSwgMCksIGtU
ZXN0U2VydmVyQXBwTmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gY3VycmVudDsKLSAgICB9Ci0K
LSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgdGVzdEF0c3BpQmFzaWNIaWVyYXJjaHko
V2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgLy8gVGhlIHRlc3Qgc2Vy
dmVyJ3MgYWNjZXNzaWJpbGl0eSBvYmplY3QgKFVJIFByb2Nlc3MpLgotICAgIEdSZWZQdHI8QXRz
cGlBY2Nlc3NpYmxlPiB0ZXN0U2VydmVyQXBwID0gZmluZFRlc3RTZXJ2ZXJBcHBsaWNhdGlvbigp
OwotICAgIGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUodGVzdFNlcnZlckFwcC5nZXQoKSkp
OwotICAgIGNoZWNrQXRzcGlBY2Nlc3NpYmxlKHRlc3RTZXJ2ZXJBcHAuZ2V0KCksICJBY2Nlc3Np
YmlsaXR5VGVzdFNlcnZlciIsIEFUU1BJX1JPTEVfQVBQTElDQVRJT04pOwotCi0gICAgLy8gVGhl
IG1haW4gd2luZG93J3MgYWNjZXNzaWJpbGl0eSBvYmplY3QgKFVJIFByb2Nlc3MpLgotICAgIEdS
ZWZQdHI8QXRzcGlBY2Nlc3NpYmxlPiBjdXJyZW50UGFyZW50ID0gdGVzdFNlcnZlckFwcDsKLSAg
ICBHUmVmUHRyPEF0c3BpQWNjZXNzaWJsZT4gY3VycmVudENoaWxkID0gYWRvcHRHUmVmKGF0c3Bp
X2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQYXJlbnQuZ2V0KCksIDAsIDAp
KTsKLSAgICBnX2Fzc2VydChBVFNQSV9JU19BQ0NFU1NJQkxFKGN1cnJlbnRDaGlsZC5nZXQoKSkp
OwotICAgIGNoZWNrQXRzcGlBY2Nlc3NpYmxlKGN1cnJlbnRDaGlsZC5nZXQoKSwgIiIsIEFUU1BJ
X1JPTEVfRlJBTUUpOwotCi0gICAgLy8gVGhlIFdlYlZpZXcncyBhY2Nlc3NpYmlsaXR5IG9iamVj
dCAoVUkgUHJvY2VzcykuCi0gICAgY3VycmVudFBhcmVudCA9IGN1cnJlbnRDaGlsZDsKLSAgICBj
dXJyZW50Q2hpbGQgPSBhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChjdXJyZW50
UGFyZW50LmdldCgpLCAwLCAwKTsKLSAgICBnX2Fzc2VydChBVFNQSV9JU19BQ0NFU1NJQkxFKGN1
cnJlbnRDaGlsZC5nZXQoKSkpOwotICAgIGNoZWNrQXRzcGlBY2Nlc3NpYmxlKGN1cnJlbnRDaGls
ZC5nZXQoKSwgIiIsIEFUU1BJX1JPTEVfRklMTEVSKTsKLQotICAgIC8vIFRoZSBXZWJQYWdlJ3Mg
YWNjZXNzaWJpbGl0eSBvYmplY3QgKFdlYiBQcm9jZXNzKS4KLSAgICBjdXJyZW50UGFyZW50ID0g
Y3VycmVudENoaWxkOwotICAgIGN1cnJlbnRDaGlsZCA9IGF0c3BpX2FjY2Vzc2libGVfZ2V0X2No
aWxkX2F0X2luZGV4KGN1cnJlbnRQYXJlbnQuZ2V0KCksIDAsIDApOwotICAgIGdfYXNzZXJ0KEFU
U1BJX0lTX0FDQ0VTU0lCTEUoY3VycmVudENoaWxkLmdldCgpKSk7Ci0gICAgY2hlY2tBdHNwaUFj
Y2Vzc2libGUoY3VycmVudENoaWxkLmdldCgpLCAiIiwgQVRTUElfUk9MRV9GSUxMRVIpOwotCi0g
ICAgLy8gSFRNTCByb290IGVsZW1lbnQncyBhY2Nlc3NpYmxlIGVsZW1lbnQgKFdlYiBQcm9jZXNz
KS4KLSAgICBjdXJyZW50UGFyZW50ID0gY3VycmVudENoaWxkOwotICAgIGN1cnJlbnRDaGlsZCA9
IGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQYXJlbnQuZ2V0KCks
IDAsIDApOwotICAgIGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY3VycmVudENoaWxkLmdl
dCgpKSk7Ci0KLSAgICAvLyBIVE1MIGJvZHkncyBhY2Nlc3NpYmxlIGVsZW1lbnQgKFdlYiBQcm9j
ZXNzKS4KLSAgICBjdXJyZW50UGFyZW50ID0gY3VycmVudENoaWxkOwotICAgIGN1cnJlbnRDaGls
ZCA9IGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQYXJlbnQuZ2V0
KCksIDAsIDApOwotICAgIGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY3VycmVudENoaWxk
LmdldCgpKSk7Ci0gICAgY2hlY2tBdHNwaUFjY2Vzc2libGUoY3VycmVudENoaWxkLmdldCgpLCAi
IiwgQVRTUElfUk9MRV9ET0NVTUVOVF9XRUIpOwotCi0gICAgLy8gSFRNTCBIMSdzIGFjY2Vzc2li
bGUgZWxlbWVudCAoV2ViIFByb2Nlc3MpLgotICAgIGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50Q2hp
bGQ7Ci0gICAgY3VycmVudENoaWxkID0gYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5k
ZXgoY3VycmVudFBhcmVudC5nZXQoKSwgMCwgMCk7Ci0gICAgZ19hc3NlcnQoQVRTUElfSVNfQUND
RVNTSUJMRShjdXJyZW50Q2hpbGQuZ2V0KCkpKTsKLSAgICBjaGVja0F0c3BpQWNjZXNzaWJsZShj
dXJyZW50Q2hpbGQuZ2V0KCksICJUaGlzIGlzIGEgdGVzdCIsIEFUU1BJX1JPTEVfSEVBRElORyk7
Ci0KLSAgICAvLyBIVE1MIGZpcnN0IHBhcmFncmFwaCdzIGFjY2Vzc2libGUgZWxlbWVudCAoV2Vi
IFByb2Nlc3MpLgotICAgIGN1cnJlbnRDaGlsZCA9IGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxk
X2F0X2luZGV4KGN1cnJlbnRQYXJlbnQuZ2V0KCksIDEsIDApOwotICAgIGdfYXNzZXJ0KEFUU1BJ
X0lTX0FDQ0VTU0lCTEUoY3VycmVudENoaWxkLmdldCgpKSk7Ci0gICAgY2hlY2tBdHNwaUFjY2Vz
c2libGUoY3VycmVudENoaWxkLmdldCgpLCAiIiwgQVRTUElfUk9MRV9QQVJBR1JBUEgpOwotCi0g
ICAgLy8gSFRNTCBzZWNvbmQgcGFyYWdyYXBoJ3MgYWNjZXNzaWJsZSBlbGVtZW50IChXZWIgUHJv
Y2VzcykuCi0gICAgY3VycmVudENoaWxkID0gYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRf
aW5kZXgoY3VycmVudFBhcmVudC5nZXQoKSwgMiwgMCk7Ci0gICAgZ19hc3NlcnQoQVRTUElfSVNf
QUNDRVNTSUJMRShjdXJyZW50Q2hpbGQuZ2V0KCkpKTsKLSAgICBjaGVja0F0c3BpQWNjZXNzaWJs
ZShjdXJyZW50Q2hpbGQuZ2V0KCksICIiLCBBVFNQSV9ST0xFX1BBUkFHUkFQSCk7Ci0KLSAgICAv
LyBIVE1MIGxpbmsncyBhY2Nlc3NpYmxlIGVsZW1lbnQgKFdlYiBQcm9jZXNzKS4KLSAgICBjdXJy
ZW50UGFyZW50ID0gY3VycmVudENoaWxkOwotICAgIGN1cnJlbnRDaGlsZCA9IGF0c3BpX2FjY2Vz
c2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQYXJlbnQuZ2V0KCksIDAsIDApOwotICAg
IGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY3VycmVudENoaWxkLmdldCgpKSk7Ci0gICAg
Y2hlY2tBdHNwaUFjY2Vzc2libGUoY3VycmVudENoaWxkLmdldCgpLCAiYSBsaW5rIiwgQVRTUElf
Uk9MRV9MSU5LKTsKLX0KLQotdm9pZCBiZWZvcmVBbGwoKQotewotICAgIC8vIFdlIGluc3RhbGwg
YSBoYW5kbGVyIHRvIGVuc3VyZSB0aGF0IHdlIGtpbGwgdGhlIGNoaWxkIHByb2Nlc3MKLSAgICAv
LyBpZiB0aGUgcGFyZW50IGRpZXMgYmVjYXVzZSBvZiB3aGF0ZXZlciB0aGUgcmVhc29uIGlzLgot
ICAgIHNpZ25hbChTSUdBQlJULCBzaWdBYm9ydEhhbmRsZXIpOwotCi0gICAgLy8gU3RhcnQgdGhl
IGFjY2Vzc2liaWxpdHkgdGVzdCBzZXJ2ZXIgYW5kIGxvYWQgdGhlIHRlc3RzLgotICAgIHN0YXJ0
VGVzdFNlcnZlcigpOwotICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdEFjY2Vzc2liaWxpdHki
LCAiYXRzcGktYmFzaWMtaGllcmFyY2h5IiwgdGVzdEF0c3BpQmFzaWNIaWVyYXJjaHkpOwotfQot
Ci12b2lkIGFmdGVyQWxsKCkKLXsKLSAgICAvLyBFbnN1cmUgd2Ugc3RvcCB0aGUgc2VydmVyLgot
ICAgIHN0b3BUZXN0U2VydmVyKCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRGYXZpY29uRGF0YWJh
c2UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTA2Zjc0OTY3Yjg0MDFlMTkz
NmIwMjA0M2JmY2M5ZTZhZWE1MzRmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RX
ZWJLaXRGYXZpY29uRGF0YWJhc2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjc0ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
Ci0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLQotI2luY2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKLSNpbmNsdWRlICJXZWJWaWV3VGVz
dC5oIgotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0jaW5jbHVkZSA8bGlic291cC9zb3VwLmg+
Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgotCi1zdGF0aWMgV2ViS2l0VGVzdFNl
cnZlcioga1NlcnZlcjsKLXN0YXRpYyBjaGFyKiBrVGVtcERpcmVjdG9yeTsKLQotY2xhc3MgRmF2
aWNvbkRhdGFiYXNlVGVzdDogcHVibGljIFdlYlZpZXdUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtF
X0dMSUJfVEVTVF9GSVhUVVJFKEZhdmljb25EYXRhYmFzZVRlc3QpOwotCi0gICAgRmF2aWNvbkRh
dGFiYXNlVGVzdCgpCi0gICAgICAgIDogbV93ZWJDb250ZXh0KHdlYmtpdF93ZWJfY29udGV4dF9n
ZXRfZGVmYXVsdCgpKQotICAgICAgICAsIG1fZmF2aWNvbigwKQotICAgICAgICAsIG1fZXJyb3Io
MCkKLSAgICAgICAgLCBtX2Zhdmljb25Ob3RpZmljYXRpb25SZWNlaXZlZChmYWxzZSkKLSAgICB7
Ci0gICAgICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfd2ViX2Nv
bnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2UobV93ZWJDb250ZXh0KTsKLSAgICAgICAgZ19zaWdu
YWxfY29ubmVjdChkYXRhYmFzZSwgImZhdmljb24tY2hhbmdlZCIsIEdfQ0FMTEJBQ0soZmF2aWNv
bkNoYW5nZWRDYWxsYmFjayksIHRoaXMpOwotICAgIH0KLQotICAgIH5GYXZpY29uRGF0YWJhc2VU
ZXN0KCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2Zhdmljb24pCi0gICAgICAgICAgICBjYWlyb19z
dXJmYWNlX2Rlc3Ryb3kobV9mYXZpY29uKTsKLQotICAgICAgICBXZWJLaXRGYXZpY29uRGF0YWJh
c2UqIGRhdGFiYXNlID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNlKG1f
d2ViQ29udGV4dCk7Ci0gICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hl
ZChkYXRhYmFzZSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7Ci0gICAg
fQotCi0gICAgc3RhdGljIHZvaWQgZmF2aWNvbkNoYW5nZWRDYWxsYmFjayhXZWJLaXRGYXZpY29u
RGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBjaGFyKiBwYWdlVVJJLCBjb25zdCBjaGFyKiBmYXZp
Y29uVVJJLCBGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgaWYgKCFn
X3N0cmNtcDAod2Via2l0X3dlYl92aWV3X2dldF91cmkodGVzdC0+bV93ZWJWaWV3KSwgcGFnZVVS
SSkpCi0gICAgICAgICAgICB0ZXN0LT5tX2Zhdmljb25VUkkgPSBmYXZpY29uVVJJOwotICAgIH0K
LQotICAgIHN0YXRpYyB2b2lkIHZpZXdGYXZpY29uQ2hhbmdlZENhbGxiYWNrKFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcsIEdQYXJhbVNwZWMqIHBzcGVjLCBncG9pbnRlciBkYXRhKQotICAgIHsKLSAg
ICAgICAgRmF2aWNvbkRhdGFiYXNlVGVzdCogdGVzdCA9IHN0YXRpY19jYXN0PEZhdmljb25EYXRh
YmFzZVRlc3QqPihkYXRhKTsKLSAgICAgICAgZ19hc3NlcnQodGVzdC0+bV93ZWJWaWV3ID09IHdl
YlZpZXcpOwotICAgICAgICB0ZXN0LT5tX2Zhdmljb25Ob3RpZmljYXRpb25SZWNlaXZlZCA9IHRy
dWU7Ci0gICAgICAgIHRlc3QtPnF1aXRNYWluTG9vcCgpOwotICAgIH0KLQotICAgIHN0YXRpYyB2
b2lkIGdldEZhdmljb25DYWxsYmFjayhHT2JqZWN0KiBzb3VyY2VPYmplY3QsIEdBc3luY1Jlc3Vs
dCogcmVzdWx0LCB2b2lkKiBkYXRhKQotICAgIHsKLSAgICAgICAgRmF2aWNvbkRhdGFiYXNlVGVz
dCogdGVzdCA9IHN0YXRpY19jYXN0PEZhdmljb25EYXRhYmFzZVRlc3QqPihkYXRhKTsKLSAgICAg
ICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF93ZWJfY29udGV4dF9n
ZXRfZmF2aWNvbl9kYXRhYmFzZSh0ZXN0LT5tX3dlYkNvbnRleHQpOwotICAgICAgICB0ZXN0LT5t
X2Zhdmljb24gPSB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl9maW5pc2goZGF0
YWJhc2UsIHJlc3VsdCwgJnRlc3QtPm1fZXJyb3Iub3V0UHRyKCkpOwotICAgICAgICB0ZXN0LT5x
dWl0TWFpbkxvb3AoKTsKLSAgICB9Ci0KLSAgICB2b2lkIHdhaXRVbnRpbEZhdmljb25DaGFuZ2Vk
KCkKLSAgICB7Ci0gICAgICAgIG1fZmF2aWNvbk5vdGlmaWNhdGlvblJlY2VpdmVkID0gZmFsc2U7
Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgaGFuZGxlcklEID0gZ19zaWduYWxfY29ubmVjdChtX3dl
YlZpZXcsICJub3RpZnk6OmZhdmljb24iLCBHX0NBTExCQUNLKHZpZXdGYXZpY29uQ2hhbmdlZENh
bGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAg
ICAgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KG1fd2ViVmlldywgaGFuZGxlcklEKTsK
LSAgICB9Ci0KLSAgICB2b2lkIGdldEZhdmljb25Gb3JQYWdlVVJJQW5kV2FpdFVudGlsUmVhZHko
Y29uc3QgY2hhciogcGFnZVVSSSkKLSAgICB7Ci0gICAgICAgIG1fZXJyb3IuY2xlYXIoKTsKLSAg
ICAgICAgaWYgKG1fZmF2aWNvbikgewotICAgICAgICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95
KG1fZmF2aWNvbik7Ci0gICAgICAgICAgICBtX2Zhdmljb24gPSAwOwotICAgICAgICB9Ci0KLSAg
ICAgICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF93ZWJfY29udGV4
dF9nZXRfZmF2aWNvbl9kYXRhYmFzZShtX3dlYkNvbnRleHQpOwotICAgICAgICB3ZWJraXRfZmF2
aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbihkYXRhYmFzZSwgcGFnZVVSSSwgMCwgZ2V0RmF2aWNv
bkNhbGxiYWNrLCB0aGlzKTsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwot
ICAgIH0KLQotICAgIFdlYktpdFdlYkNvbnRleHQqIG1fd2ViQ29udGV4dDsKLSAgICBjYWlyb19z
dXJmYWNlX3QqIG1fZmF2aWNvbjsKLSAgICBDU3RyaW5nIG1fZmF2aWNvblVSSTsKLSAgICBHT3du
UHRyPEdFcnJvcj4gbV9lcnJvcjsKLSAgICBib29sIG1fZmF2aWNvbk5vdGlmaWNhdGlvblJlY2Vp
dmVkOwotfTsKLQotc3RhdGljIHZvaWQKLXNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZl
ciwgU291cE1lc3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqIHF1
ZXJ5LCBTb3VwQ2xpZW50Q29udGV4dCogY29udGV4dCwgdm9pZCogZGF0YSkKLXsKLSAgICBpZiAo
bWVzc2FnZS0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgewotICAgICAgICBzb3VwX21lc3Nh
Z2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvZmF2aWNv
bi5pY28iKSkgewotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQ
X1NUQVRVU19OT1RfRk9VTkQpOwotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZSht
ZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNo
YXIqIGNvbnRlbnRzOwotICAgIGdzaXplIGxlbmd0aDsKLSAgICBpZiAoZ19zdHJfZXF1YWwocGF0
aCwgIi9pY29uL2Zhdmljb24uaWNvIikpIHsKLSAgICAgICAgR093blB0cjxjaGFyPiBwYXRoVG9G
YXZpY29uKGdfYnVpbGRfZmlsZW5hbWUoVGVzdDo6Z2V0V2ViS2l0MVRlc3RSZXNvdWNlc0Rpcigp
LmRhdGEoKSwgImJsYW5rLmljbyIsIE5VTEwpKTsKLSAgICAgICAgZ19maWxlX2dldF9jb250ZW50
cyhwYXRoVG9GYXZpY29uLmdldCgpLCAmY29udGVudHMsICZsZW5ndGgsIDApOwotICAgICAgICBz
b3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1P
UllfVEFLRSwgY29udGVudHMsIGxlbmd0aCk7Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChw
YXRoLCAiL25vZmF2aWNvbiIpKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBub0Zhdmlj
b25IVE1MID0gIjxodG1sPjxoZWFkPjxib2R5PnRlc3Q8L2JvZHk+PC9odG1sPiI7Ci0gICAgICAg
IHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01F
TU9SWV9TVEFUSUMsIG5vRmF2aWNvbkhUTUwsIHN0cmxlbihub0Zhdmljb25IVE1MKSk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnRlbnRzSFRNTCA9ICI8aHRt
bD48aGVhZD48bGluayByZWw9J2ljb24nIGhyZWY9Jy9pY29uL2Zhdmljb24uaWNvJyB0eXBlPSdp
bWFnZS94LWljbzsgY2hhcnNldD1iaW5hcnknPjwvaGVhZD48Ym9keT50ZXN0PC9ib2R5PjwvaHRt
bD4iOwotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2Vf
Ym9keSwgU09VUF9NRU1PUllfU1RBVElDLCBjb250ZW50c0hUTUwsIHN0cmxlbihjb250ZW50c0hU
TUwpKTsKLSAgICB9Ci0KLSAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQ
X1NUQVRVU19PSyk7Ci0gICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVz
cG9uc2VfYm9keSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3ROb3RJbml0aWFsaXplZChGYXZpY29u
RGF0YWJhc2VUZXN0KiB0ZXN0KQotewotICAgIC8vIFRyeSB0byByZXRyaWV2ZSBhIHZhbGlkIGZh
dmljb24gZnJvbSBhIG5vdCBpbml0aWFsaXplZCBkYXRhYmFzZS4KLSAgICB0ZXN0LT5nZXRGYXZp
Y29uRm9yUGFnZVVSSUFuZFdhaXRVbnRpbFJlYWR5KGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9m
b28iKS5kYXRhKCkpOwotICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX2Zhdmljb24pOwotICAgIGdfYXNz
ZXJ0KHRlc3QtPm1fZXJyb3IpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2Vycm9yLT5j
b2RlLCA9PSwgV0VCS0lUX0ZBVklDT05fREFUQUJBU0VfRVJST1JfTk9UX0lOSVRJQUxJWkVEKTsK
LX0KLQotc3RhdGljIHZvaWQgdGVzdFNldERpcmVjdG9yeShGYXZpY29uRGF0YWJhc2VUZXN0KiB0
ZXN0KQotewotICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfZmF2aWNvbl9kYXRhYmFzZV9kaXJl
Y3RvcnkodGVzdC0+bV93ZWJDb250ZXh0LCBrVGVtcERpcmVjdG9yeSk7Ci0gICAgZ19hc3NlcnRf
Y21wc3RyKGtUZW1wRGlyZWN0b3J5LCA9PSwgd2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29u
X2RhdGFiYXNlX2RpcmVjdG9yeSh0ZXN0LT5tX3dlYkNvbnRleHQpKTsKLX0KLQotc3RhdGljIHZv
aWQgdGVzdENsZWFyRGF0YWJhc2UoRmF2aWNvbkRhdGFiYXNlVGVzdCogdGVzdCkKLXsKLSAgICBX
ZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9m
YXZpY29uX2RhdGFiYXNlKHRlc3QtPm1fd2ViQ29udGV4dCk7Ci0gICAgd2Via2l0X2Zhdmljb25f
ZGF0YWJhc2VfY2xlYXIoZGF0YWJhc2UpOwotCi0gICAgR093blB0cjxjaGFyPiBpY29uVVJJKHdl
YmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX3VyaShkYXRhYmFzZSwga1NlcnZlci0+
Z2V0VVJJRm9yUGF0aCgiL2ZvbyIpLmRhdGEoKSkpOwotICAgIGdfYXNzZXJ0KCFpY29uVVJJKTsK
LX0KLQotc3RhdGljIHZvaWQgdGVzdEdldEZhdmljb24oRmF2aWNvbkRhdGFiYXNlVGVzdCogdGVz
dCkKLXsKLSAgICAvLyBXZSBuZWVkIHRvIGxvYWQgdGhlIHBhZ2UgZmlyc3QgdG8gZW5zdXJlIHRo
ZSBpY29uIGRhdGEgd2lsbCBiZQotICAgIC8vIGluIHRoZSBkYXRhYmFzZSBpbiBjYXNlIHRoZXJl
J3MgYW4gYXNzb2NpYXRlZCBmYXZpY29uLgotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0
VVJJRm9yUGF0aCgiL2ZvbyIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsRmF2aWNvbkNo
YW5nZWQoKTsKLSAgICBDU3RyaW5nIGZhdmljb25VUkkgPSBrU2VydmVyLT5nZXRVUklGb3JQYXRo
KCIvaWNvbi9mYXZpY29uLmljbyIpOwotCi0gICAgLy8gQ2hlY2sgdGhlIEFQSSByZXRyaWV2aW5n
IGEgdmFsaWQgZmF2aWNvbi4KLSAgICB0ZXN0LT5nZXRGYXZpY29uRm9yUGFnZVVSSUFuZFdhaXRV
bnRpbFJlYWR5KGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9mb28iKS5kYXRhKCkpOwotICAgIGdf
YXNzZXJ0KHRlc3QtPm1fZmF2aWNvbik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPm1fZmF2
aWNvblVSSS5kYXRhKCksID09LCBmYXZpY29uVVJJLmRhdGEoKSk7Ci0gICAgZ19hc3NlcnQoIXRl
c3QtPm1fZXJyb3IpOwotCi0gICAgLy8gQ2hlY2sgdGhhdCB3aWR0aCBhbmQgaGVpZ2h0IG1hdGNo
IHRob3NlIGZyb20gYmxhbmsuaWNvICgxNngxNiBmYXZpY29uKS4KLSAgICBnX2Fzc2VydF9jbXBp
bnQoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgodGVzdC0+bV9mYXZpY29uKSwgPT0sIDE2
KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHRl
c3QtPm1fZmF2aWNvbiksID09LCAxNik7Ci0KLSAgICAvLyBDaGVjayB0aGF0IGFub3RoZXIgcGFn
ZSB3aXRoIHRoZSBzYW1lIGZhdmljb24gcmV0dXJuIHRoZSBzYW1lIGljb24uCi0gICAgY2Fpcm9f
c3VyZmFjZV90KiBmYXZpY29uID0gY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2UodGVzdC0+bV9mYXZp
Y29uKTsKLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9iYXIiKS5k
YXRhKCkpOwotICAgIC8vIEl0J3MgYSBuZXcgcGFnZSBpbiB0aGUgZGF0YWJhc2UsIHNvIGZhdmlj
b24gd2lsbCBjaGFuZ2UgdHdpY2UsIGZpcnN0IHRvIHJlc2V0IGl0Ci0gICAgLy8gYW5kIHRoZW4g
d2hlbiB0aGUgaWNvbiBpcyBsb2FkZWQuCi0gICAgdGVzdC0+d2FpdFVudGlsRmF2aWNvbkNoYW5n
ZWQoKTsKLSAgICB0ZXN0LT53YWl0VW50aWxGYXZpY29uQ2hhbmdlZCgpOwotICAgIHRlc3QtPmdl
dEZhdmljb25Gb3JQYWdlVVJJQW5kV2FpdFVudGlsUmVhZHkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0
aCgiL2JhciIpLmRhdGEoKSk7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV9mYXZpY29uKTsKLSAgICBn
X2Fzc2VydF9jbXBzdHIodGVzdC0+bV9mYXZpY29uVVJJLmRhdGEoKSwgPT0sIGZhdmljb25VUkku
ZGF0YSgpKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX2Zhdmljb24gPT0gZmF2aWNvbik7Ci0gICAg
Z19hc3NlcnQoIXRlc3QtPm1fZXJyb3IpOwotICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShmYXZp
Y29uKTsKLQotICAgIC8vIENoZWNrIHRoZSBBUEkgcmV0cmlldmluZyBhbiBpbnZhbGlkIGZhdmlj
b24uCi0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvbm9mYXZpY29u
IikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxGYXZpY29uQ2hhbmdlZCgpOwotCi0gICAg
dGVzdC0+Z2V0RmF2aWNvbkZvclBhZ2VVUklBbmRXYWl0VW50aWxSZWFkeShrU2VydmVyLT5nZXRV
UklGb3JQYXRoKCIvbm9mYXZpY29uIikuZGF0YSgpKTsKLSAgICBnX2Fzc2VydCghdGVzdC0+bV9m
YXZpY29uKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX2Vycm9yKTsKLX0KLQotc3RhdGljIHZvaWQg
dGVzdEdldEZhdmljb25VUkkoRmF2aWNvbkRhdGFiYXNlVGVzdCogdGVzdCkKLXsKLSAgICBXZWJL
aXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZp
Y29uX2RhdGFiYXNlKHRlc3QtPm1fd2ViQ29udGV4dCk7Ci0KLSAgICBDU3RyaW5nIGJhc2VVUkkg
PSBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvZm9vIik7Ci0gICAgR093blB0cjxjaGFyPiBpY29u
VVJJKHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX3VyaShkYXRhYmFzZSwgYmFz
ZVVSSS5kYXRhKCkpKTsKLSAgICBBU1NFUlRfQ01QX0NTVFJJTkcoaWNvblVSSS5nZXQoKSwgPT0s
IGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pY29uL2Zhdmljb24uaWNvIikpOwotfQotCi1zdGF0
aWMgdm9pZCB0ZXN0V2ViVmlld0Zhdmljb24oRmF2aWNvbkRhdGFiYXNlVGVzdCogdGVzdCkKLXsK
LSAgICB0ZXN0LT5tX2Zhdmljb25VUkkgPSBDU3RyaW5nKCk7Ci0KLSAgICBjYWlyb19zdXJmYWNl
X3QqIGljb25Gcm9tV2ViVmlldyA9IHdlYmtpdF93ZWJfdmlld19nZXRfZmF2aWNvbih0ZXN0LT5t
X3dlYlZpZXcpOwotICAgIGdfYXNzZXJ0KCFpY29uRnJvbVdlYlZpZXcpOwotCi0gICAgdGVzdC0+
bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvZm9vIikuZGF0YSgpKTsKLSAgICB0ZXN0
LT53YWl0VW50aWxGYXZpY29uQ2hhbmdlZCgpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fZmF2aWNv
bk5vdGlmaWNhdGlvblJlY2VpdmVkKTsKLSAgICAvLyBUaGUgaWNvbiBpcyBrbm93biBhbmQgaGFz
bid0IGNoYW5nZWQgaW4gdGhlIGRhdGFiYXNlLCBzbyBub3RpZnk6OmZhdmljb24gaXMgZW1pdHRl
ZAotICAgIC8vIGJ1dCBXZWJLaXRGYXZpY29uRGF0YWJhc2U6Omljb24tY2hhbmdlZCBpc24ndC4K
LSAgICBnX2Fzc2VydCh0ZXN0LT5tX2Zhdmljb25VUkkuaXNOdWxsKCkpOwotCi0gICAgaWNvbkZy
b21XZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X2dldF9mYXZpY29uKHRlc3QtPm1fd2ViVmlldyk7
Ci0gICAgZ19hc3NlcnQoaWNvbkZyb21XZWJWaWV3KTsKLSAgICBnX2Fzc2VydF9jbXB1aW50KGNh
aXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKGljb25Gcm9tV2ViVmlldyksID09LCAxNik7Ci0g
ICAgZ19hc3NlcnRfY21wdWludChjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoaWNvbkZy
b21XZWJWaWV3KSwgPT0sIDE2KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdEZhdmljb25EYXRhYmFz
ZShGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIC8vIFRo
ZXNlIHRlc3RzIGRlcGVuZCBvbiB0aGlzIG9yZGVyIHRvIHJ1biBwcm9wZXJseSBzbyB3ZSBkZWNs
YXJlIHRoZW0gaW4gYSBzaW5nbGUgb25lLgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTExNDM0LgotICAgIHRlc3ROb3RJbml0aWFsaXplZCh0ZXN0
KTsKLSAgICB0ZXN0U2V0RGlyZWN0b3J5KHRlc3QpOwotICAgIHRlc3RHZXRGYXZpY29uKHRlc3Qp
OwotICAgIHRlc3RHZXRGYXZpY29uVVJJKHRlc3QpOwotICAgIHRlc3RXZWJWaWV3RmF2aWNvbih0
ZXN0KTsKLSAgICB0ZXN0Q2xlYXJEYXRhYmFzZSh0ZXN0KTsKLX0KLQotdm9pZCBiZWZvcmVBbGwo
KQotewotICAgIC8vIFN0YXJ0IGEgc291cCBzZXJ2ZXIgZm9yIHRlc3RpbmcuCi0gICAga1NlcnZl
ciA9IG5ldyBXZWJLaXRUZXN0U2VydmVyKCk7Ci0gICAga1NlcnZlci0+cnVuKHNlcnZlckNhbGxi
YWNrKTsKLQotICAgIGtUZW1wRGlyZWN0b3J5ID0gZ19kaXJfbWFrZV90bXAoIldlYktpdDJUZXN0
cy1YWFhYWFgiLCAwKTsKLSAgICBnX2Fzc2VydChrVGVtcERpcmVjdG9yeSk7Ci0KLSAgICAvLyBB
ZGQgdGVzdHMgdG8gdGhlIHN1aXRlLgotICAgIEZhdmljb25EYXRhYmFzZVRlc3Q6OmFkZCgiV2Vi
S2l0RmF2aWNvbkRhdGFiYXNlIiwgImZhdmljb24tZGF0YWJhc2UtdGVzdCIsIHRlc3RGYXZpY29u
RGF0YWJhc2UpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRGYXZpY29uRGF0YWJhc2VGaW5hbGl6
ZWRDYWxsYmFjayhncG9pbnRlciwgR09iamVjdCopCi17Ci0gICAgaWYgKCFnX2ZpbGVfdGVzdChr
VGVtcERpcmVjdG9yeSwgR19GSUxFX1RFU1RfSVNfRElSKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgR093blB0cjxjaGFyPiBmaWxlbmFtZShnX2J1aWxkX2ZpbGVuYW1lKGtUZW1wRGlyZWN0b3J5
LCAiV2VicGFnZUljb25zLmRiIiwgTlVMTCkpOwotICAgIGdfdW5saW5rKGZpbGVuYW1lLmdldCgp
KTsKLQotICAgIGdfcm1kaXIoa1RlbXBEaXJlY3RvcnkpOwotfQotCi12b2lkIGFmdGVyQWxsKCkK
LXsKLSAgICBkZWxldGUga1NlcnZlcjsKLQotICAgIC8vIERlbGV0ZSB0aGUgdGVtcG9yYXJ5IGZp
bGVzIGFmdGVyIHRoZSBJY29uRGF0YWJhc2UgaGFzIGJlZW4KLSAgICAvLyBjbG9zZWQsIHRoYXQg
aXMsIG9uY2UgV2ViS2l0RmF2aWNvbkRhdGFiYXNlIGlzIGJlaW5nIGRlc3Ryb3llZC4KLSAgICBX
ZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9m
YXZpY29uX2RhdGFiYXNlKHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpKTsKLSAgICBn
X29iamVjdF93ZWFrX3JlZihHX09CSkVDVChkYXRhYmFzZSksIHdlYmtpdEZhdmljb25EYXRhYmFz
ZUZpbmFsaXplZENhbGxiYWNrLCAwKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxlci5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0RmluZENvbnRyb2xs
ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMmVlZjRjYTQ4NjNlOWMxYTJj
MzZlNDMxNTdlYzZkNTRiNWQ3MWQzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RX
ZWJLaXRGaW5kQ29udHJvbGxlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMzUgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
LSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotCi0jaW5jbHVkZSAiTG9hZFRyYWNraW5nVGVzdC5oIgotI2luY2x1ZGUgPGd0ay9ndGsuaD4K
LSNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdDIuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVm
UHRyLmg+Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiB0ZXN0U3RyaW5nID0gIjxodG1sPjxib2R5PmZp
cnN0IHRlc3Rpbmcgc2Vjb25kIHRlc3Rpbmcgc2Vjb25kSGFsZjwvYm9keT48L2h0bWw+IjsKLQot
Y2xhc3MgRmluZENvbnRyb2xsZXJUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3QgewotcHVibGljOgot
ICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoRmluZENvbnRyb2xsZXJUZXN0KTsKLQotICAgIEZp
bmRDb250cm9sbGVyVGVzdCgpCi0gICAgICAgIDogbV9maW5kQ29udHJvbGxlcih3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X2ZpbmRfY29udHJvbGxlcihtX3dlYlZpZXcpKQotICAgICAgICAsIG1fcnVuRmlu
ZFVudGlsQ29tcGxldGlvbihmYWxzZSkKLSAgICB7Ci0gICAgICAgIGFzc2VydE9iamVjdElzRGVs
ZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QobV9maW5kQ29udHJvbGxlci5nZXQoKSkpOwot
ICAgIH0KLQotICAgIH5GaW5kQ29udHJvbGxlclRlc3QoKQotICAgIHsKLSAgICAgICAgaWYgKG1f
ZmluZENvbnRyb2xsZXIpCi0gICAgICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0
X21hdGNoZWQobV9maW5kQ29udHJvbGxlci5nZXQoKSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwg
MCwgMCwgMCwgdGhpcyk7Ci0gICAgfQotCi0gICAgdm9pZCBmaW5kKGNvbnN0IGNoYXIqIHNlYXJj
aFRleHQsIGd1aW50MzIgZmluZE9wdGlvbnMsIGd1aW50IG1heE1hdGNoQ291bnQpCi0gICAgewot
ICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fZmluZENvbnRyb2xsZXIuZ2V0KCksICJmb3VuZC10
ZXh0IiwgR19DQUxMQkFDSyhmb3VuZFRleHRDYWxsYmFjayksIHRoaXMpOwotICAgICAgICBnX3Np
Z25hbF9jb25uZWN0KG1fZmluZENvbnRyb2xsZXIuZ2V0KCksICJmYWlsZWQtdG8tZmluZC10ZXh0
IiwgR19DQUxMQkFDSyhmYWlsZWRUb0ZpbmRUZXh0Q2FsbGJhY2spLCB0aGlzKTsKLSAgICAgICAg
d2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2gobV9maW5kQ29udHJvbGxlci5nZXQoKSwgc2Vh
cmNoVGV4dCwgZmluZE9wdGlvbnMsIG1heE1hdGNoQ291bnQpOwotICAgIH0KLQotICAgIHZvaWQg
Y291bnQoY29uc3QgY2hhciogc2VhcmNoVGV4dCwgZ3VpbnQzMiBmaW5kT3B0aW9ucywgZ3VpbnQg
bWF4TWF0Y2hDb3VudCkKLSAgICB7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9maW5kQ29u
dHJvbGxlci5nZXQoKSwgImNvdW50ZWQtbWF0Y2hlcyIsIEdfQ0FMTEJBQ0soY291bnRlZE1hdGNo
ZXNDYWxsYmFjayksIHRoaXMpOwotICAgICAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX2NvdW50
X21hdGNoZXMobV9maW5kQ29udHJvbGxlci5nZXQoKSwgc2VhcmNoVGV4dCwgZmluZE9wdGlvbnMs
IG1heE1hdGNoQ291bnQpOwotICAgIH0KLQotICAgIHZvaWQgd2FpdFVudGlsRmluZEZpbmlzaGVk
KCkKLSAgICB7Ci0gICAgICAgIG1fcnVuRmluZFVudGlsQ29tcGxldGlvbiA9IHRydWU7Ci0gICAg
ICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAgICB9Ci0KLSAgICBHUmVmUHRyPFdl
YktpdEZpbmRDb250cm9sbGVyPiBtX2ZpbmRDb250cm9sbGVyOwotICAgIGJvb2wgbV90ZXh0Rm91
bmQ7Ci0gICAgdW5zaWduZWQgbV9tYXRjaENvdW50OwotCi1wcml2YXRlOgotICAgIGJvb2wgbV9y
dW5GaW5kVW50aWxDb21wbGV0aW9uOwotCi0gICAgc3RhdGljIHZvaWQgZm91bmRUZXh0Q2FsbGJh
Y2soV2ViS2l0RmluZENvbnRyb2xsZXIqLCBndWludCBtYXRjaENvdW50LCBGaW5kQ29udHJvbGxl
clRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICB0ZXN0LT5tX3RleHRGb3VuZCA9IHRydWU7Ci0g
ICAgICAgIHRlc3QtPm1fbWF0Y2hDb3VudCA9IG1hdGNoQ291bnQ7Ci0gICAgICAgIGlmICh0ZXN0
LT5tX3J1bkZpbmRVbnRpbENvbXBsZXRpb24pCi0gICAgICAgICAgICBnX21haW5fbG9vcF9xdWl0
KHRlc3QtPm1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGZhaWxlZFRvRmlu
ZFRleHRDYWxsYmFjayhXZWJLaXRGaW5kQ29udHJvbGxlciosIEZpbmRDb250cm9sbGVyVGVzdCog
dGVzdCkKLSAgICB7Ci0gICAgICAgIHRlc3QtPm1fdGV4dEZvdW5kID0gZmFsc2U7Ci0gICAgICAg
IGlmICh0ZXN0LT5tX3J1bkZpbmRVbnRpbENvbXBsZXRpb24pCi0gICAgICAgICAgICBnX21haW5f
bG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGNv
dW50ZWRNYXRjaGVzQ2FsbGJhY2soV2ViS2l0RmluZENvbnRyb2xsZXIqLCBndWludCBtYXRjaENv
dW50LCBGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICB0ZXN0LT5tX21h
dGNoQ291bnQgPSBtYXRjaENvdW50OwotICAgICAgICBpZiAodGVzdC0+bV9ydW5GaW5kVW50aWxD
b21wbGV0aW9uKQotICAgICAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29w
KTsKLSAgICB9Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xsZXJUZXh0Rm91bmQo
RmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxv
YWRIdG1sKHRlc3RTdHJpbmcsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgp
OwotCi0gICAgdGVzdC0+ZmluZCgidGVzdGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwg
MSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7Ci0KLSAgICBnX2Fzc2VydCh0
ZXN0LT5tX3RleHRGb3VuZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RGaW5kQ29udHJvbGxlclRl
eHROb3RGb3VuZChGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0g
ICAgdGVzdC0+bG9hZEh0bWwodGVzdFN0cmluZywgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9h
ZEZpbmlzaGVkKCk7Ci0KLSAgICB0ZXN0LT5maW5kKCJub3RGb3VuZCIsIFdFQktJVF9GSU5EX09Q
VElPTlNfTk9ORSwgMSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7Ci0KLSAg
ICBnX2Fzc2VydCghdGVzdC0+bV90ZXh0Rm91bmQpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0Rmlu
ZENvbnRyb2xsZXJNYXRjaENvdW50KEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCwgZ2NvbnN0cG9p
bnRlcikKLXsKLSAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0U3RyaW5nLCAwKTsKLSAgICB0ZXN0LT53
YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIHRlc3QtPmZpbmQoInRlc3RpbmciLCBXRUJL
SVRfRklORF9PUFRJT05TX05PTkUsIDIpOwotICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hl
ZCgpOwotCi0gICAgZ19hc3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09IDIpOwotICAgIGdfYXNz
ZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9s
bGVyTWF4TWF0Y2hDb3VudChGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIp
Ci17Ci0gICAgdGVzdC0+bG9hZEh0bWwodGVzdFN0cmluZywgMCk7Ci0gICAgdGVzdC0+d2FpdFVu
dGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICB0ZXN0LT5maW5kKCJ0ZXN0aW5nIiwgV0VCS0lUX0ZJ
TkRfT1BUSU9OU19OT05FLCAxKTsKLSAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsK
LQotICAgIGdfYXNzZXJ0KHRlc3QtPm1fbWF0Y2hDb3VudCA9PSBHX01BWFVJTlQpOwotICAgIGdf
YXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdEZpbmRDb250
cm9sbGVyTmV4dChGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0g
ICAgdGVzdC0+bG9hZEh0bWwodGVzdFN0cmluZywgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9h
ZEZpbmlzaGVkKCk7Ci0KLSAgICB0ZXN0LT5maW5kKCJ0ZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BU
SU9OU19OT05FLCAyKTsKLSAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKLQotICAg
IGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX21hdGNo
Q291bnQgPT0gMik7Ci0KLSAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF9uZXh0KHRl
c3QtPm1fZmluZENvbnRyb2xsZXIuZ2V0KCkpOwotICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5p
c2hlZCgpOwotCi0gICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOwotICAgIGdfYXNzZXJ0
KHRlc3QtPm1fbWF0Y2hDb3VudCA9PSAxKTsKLSAgICBnX2Fzc2VydCghKHdlYmtpdF9maW5kX2Nv
bnRyb2xsZXJfZ2V0X29wdGlvbnModGVzdC0+bV9maW5kQ29udHJvbGxlci5nZXQoKSkgJiBXRUJL
SVRfRklORF9PUFRJT05TX0JBQ0tXQVJEUykpOwotCi0gICAgd2Via2l0X2ZpbmRfY29udHJvbGxl
cl9zZWFyY2hfbmV4dCh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKTsKLSAgICB0ZXN0LT53
YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX3RleHRGb3Vu
ZCk7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09IDEpOwotICAgIGdfYXNzZXJ0
KCEod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfb3B0aW9ucyh0ZXN0LT5tX2ZpbmRDb250cm9s
bGVyLmdldCgpKSAmIFdFQktJVF9GSU5EX09QVElPTlNfQkFDS1dBUkRTKSk7Ci19Ci0KLXN0YXRp
YyB2b2lkIHRlc3RGaW5kQ29udHJvbGxlclByZXZpb3VzKEZpbmRDb250cm9sbGVyVGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0U3RyaW5nLCAwKTsK
LSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIHRlc3QtPmZpbmQoInRl
c3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUsIDIpOwotICAgIHRlc3QtPndhaXRVbnRp
bEZpbmRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09IDIp
OwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKLQotICAgIHdlYmtpdF9maW5kX2Nv
bnRyb2xsZXJfc2VhcmNoX25leHQodGVzdC0+bV9maW5kQ29udHJvbGxlci5nZXQoKSk7Ci0gICAg
dGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7Ci0KLSAgICBnX2Fzc2VydCh0ZXN0LT5tX3Rl
eHRGb3VuZCk7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09IDEpOwotICAgIGdf
YXNzZXJ0KCEod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfb3B0aW9ucyh0ZXN0LT5tX2ZpbmRD
b250cm9sbGVyLmdldCgpKSAmIFdFQktJVF9GSU5EX09QVElPTlNfQkFDS1dBUkRTKSk7Ci0KLSAg
ICB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF9wcmV2aW91cyh0ZXN0LT5tX2ZpbmRDb250
cm9sbGVyLmdldCgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKLQotICAg
IGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX21hdGNo
Q291bnQgPT0gMSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfb3B0
aW9ucyh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKSAmIFdFQktJVF9GSU5EX09QVElPTlNf
QkFDS1dBUkRTKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVyQ291bnRlZE1h
dGNoZXMoRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRl
c3QtPmxvYWRIdG1sKHRlc3RTdHJpbmcsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5p
c2hlZCgpOwotCi0gICAgdGVzdC0+Y291bnQoInRlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05T
X05PTkUsIDIpOwotICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOwotCi0gICAgZ19h
c3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09IDIpOwotCi0gICAgdGVzdC0+Y291bnQoImZpcnN0
IiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAyKTsKLSAgICB0ZXN0LT53YWl0VW50aWxGaW5k
RmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0KHRlc3QtPm1fbWF0Y2hDb3VudCA9PSAxKTsKLQot
ICAgIHRlc3QtPmNvdW50KCJub3RGb3VuZCIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwgMik7
Ci0gICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7Ci0KLSAgICBnX2Fzc2VydCghdGVz
dC0+bV9tYXRjaENvdW50KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVyT3B0
aW9ucyhGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVz
dC0+bG9hZEh0bWwodGVzdFN0cmluZywgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlz
aGVkKCk7Ci0KLSAgICB0ZXN0LT5maW5kKCJUZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19O
T05FLCAyKTsKLSAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKLQotICAgIGdfYXNz
ZXJ0KCF0ZXN0LT5tX3RleHRGb3VuZCk7Ci0KLSAgICB0ZXN0LT5maW5kKCJUZXN0aW5nIiwgV0VC
S0lUX0ZJTkRfT1BUSU9OU19DQVNFX0lOU0VOU0lUSVZFLCAyKTsKLSAgICB0ZXN0LT53YWl0VW50
aWxGaW5kRmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKLQot
ICAgIHRlc3QtPmZpbmQoImVzdGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwgMik7Ci0g
ICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7Ci0KLSAgICBnX2Fzc2VydCh0ZXN0LT5t
X3RleHRGb3VuZCk7Ci0KLSAgICB0ZXN0LT5maW5kKCJlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJ
T05TX0FUX1dPUkRfU1RBUlRTLCAyKTsKLSAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQo
KTsKLQotICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX3RleHRGb3VuZCk7Ci0KLSAgICB0ZXN0LT5maW5k
KCJIYWxmIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19BVF9XT1JEX1NUQVJUUywgMik7Ci0gICAgdGVz
dC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7Ci0KLSAgICBnX2Fzc2VydCghdGVzdC0+bV90ZXh0
Rm91bmQpOwotCi0gICAgdGVzdC0+ZmluZCgiSGFsZiIsIFdFQktJVF9GSU5EX09QVElPTlNfQVRf
V09SRF9TVEFSVFMgfCBXRUJLSVRfRklORF9PUFRJT05TX1RSRUFUX01FRElBTF9DQVBJVEFMX0FT
X1dPUkRfU1RBUlQsIDIpOwotICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOwotCi0g
ICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOwotCi0gICAgdGVzdC0+ZmluZCgidGVzdGlu
ZyIsIFdFQktJVF9GSU5EX09QVElPTlNfV1JBUF9BUk9VTkQsIDMpOwotICAgIHRlc3QtPndhaXRV
bnRpbEZpbmRGaW5pc2hlZCgpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKLQot
ICAgIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX25leHQodGVzdC0+bV9maW5kQ29udHJv
bGxlci5nZXQoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7Ci0gICAgZ19h
c3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOwotCi0gICAgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9z
ZWFyY2hfbmV4dCh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKTsKLSAgICB0ZXN0LT53YWl0
VW50aWxGaW5kRmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7Ci19
Ci0KLXN0YXRpYyB2b2lkIHRlc3RGaW5kQ29udHJvbGxlckhpZGUoRmluZENvbnRyb2xsZXJUZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxvYWRIdG1sKHRlc3RTdHJpbmcs
IDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgdGVzdC0+c2hv
d0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7Ci0KLSAgICBjYWlyb19zdXJmYWNlX3QqIG9y
aWdpbmFsU3VyZmFjZSA9IGNhaXJvX3N1cmZhY2VfcmVmZXJlbmNlKAotICAgICAgICB0ZXN0LT5n
ZXRTbmFwc2hvdEFuZFdhaXRVbnRpbFJlYWR5KFdFQktJVF9TTkFQU0hPVF9SRUdJT05fRlVMTF9E
T0NVTUVOVCwgV0VCS0lUX1NOQVBTSE9UX09QVElPTlNfTk9ORSkpOwotICAgIGdfYXNzZXJ0KG9y
aWdpbmFsU3VyZmFjZSk7Ci0KLSAgICB0ZXN0LT5maW5kKCJ0ZXN0aW5nIiwgV0VCS0lUX0ZJTkRf
T1BUSU9OU19OT05FLCAxKTsKLSAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKLSAg
ICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7Ci0KLSAgICBjYWlyb19zdXJmYWNlX3QqIGhp
Z2hsaWdodFN1cmZhY2UgPSBjYWlyb19zdXJmYWNlX3JlZmVyZW5jZSgKLSAgICAgICAgdGVzdC0+
Z2V0U25hcHNob3RBbmRXYWl0VW50aWxSZWFkeShXRUJLSVRfU05BUFNIT1RfUkVHSU9OX0ZVTExf
RE9DVU1FTlQsIFdFQktJVF9TTkFQU0hPVF9PUFRJT05TX05PTkUpKTsKLSAgICBnX2Fzc2VydCho
aWdobGlnaHRTdXJmYWNlKTsKLSAgICBnX2Fzc2VydCghVGVzdDo6Y2Fpcm9TdXJmYWNlc0VxdWFs
KG9yaWdpbmFsU3VyZmFjZSwgaGlnaGxpZ2h0U3VyZmFjZSkpOwotCi0gICAgV2ViS2l0RmluZENv
bnRyb2xsZXIqIGZpbmRDb250cm9sbGVyID0gd2Via2l0X3dlYl92aWV3X2dldF9maW5kX2NvbnRy
b2xsZXIodGVzdC0+bV93ZWJWaWV3KTsKLSAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJj
aF9maW5pc2goZmluZENvbnRyb2xsZXIpOwotICAgIHdlYmtpdF93ZWJfdmlld19leGVjdXRlX2Vk
aXRpbmdfY29tbWFuZCh0ZXN0LT5tX3dlYlZpZXcsICJVbnNlbGVjdCIpOwotCi0gICAgY2Fpcm9f
c3VyZmFjZV90KiB1bmhpZ2hsaWdodFN1cmZhY2UgPSBjYWlyb19zdXJmYWNlX3JlZmVyZW5jZSgK
LSAgICAgICAgdGVzdC0+Z2V0U25hcHNob3RBbmRXYWl0VW50aWxSZWFkeShXRUJLSVRfU05BUFNI
T1RfUkVHSU9OX0ZVTExfRE9DVU1FTlQsIFdFQktJVF9TTkFQU0hPVF9PUFRJT05TX05PTkUpKTsK
LSAgICBnX2Fzc2VydCh1bmhpZ2hsaWdodFN1cmZhY2UpOwotICAgIGdfYXNzZXJ0KFRlc3Q6OmNh
aXJvU3VyZmFjZXNFcXVhbChvcmlnaW5hbFN1cmZhY2UsIHVuaGlnaGxpZ2h0U3VyZmFjZSkpOwot
Ci0gICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KG9yaWdpbmFsU3VyZmFjZSk7Ci0gICAgY2Fpcm9f
c3VyZmFjZV9kZXN0cm95KGhpZ2hsaWdodFN1cmZhY2UpOwotICAgIGNhaXJvX3N1cmZhY2VfZGVz
dHJveSh1bmhpZ2hsaWdodFN1cmZhY2UpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0RmluZENvbnRy
b2xsZXJJbnN0YW5jZShGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17
Ci0gICAgV2ViS2l0RmluZENvbnRyb2xsZXIqIGZpbmRDb250cm9sbGVyMSA9IHdlYmtpdF93ZWJf
dmlld19nZXRfZmluZF9jb250cm9sbGVyKHRlc3QtPm1fd2ViVmlldyk7Ci0gICAgV2ViS2l0Rmlu
ZENvbnRyb2xsZXIqIGZpbmRDb250cm9sbGVyMiA9IHdlYmtpdF93ZWJfdmlld19nZXRfZmluZF9j
b250cm9sbGVyKHRlc3QtPm1fd2ViVmlldyk7Ci0KLSAgICBnX2Fzc2VydChmaW5kQ29udHJvbGxl
cjEgPT0gZmluZENvbnRyb2xsZXIyKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9s
bGVyR2V0dGVycyhGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0g
ICAgY29uc3QgY2hhciogc2VhcmNoVGV4dCA9ICJ0ZXN0aW5nIjsKLSAgICBndWludCBtYXhNYXRj
aENvdW50ID0gMTsKLSAgICBndWludDMyIGZpbmRPcHRpb25zID0gV0VCS0lUX0ZJTkRfT1BUSU9O
U19XUkFQX0FST1VORCB8IFdFQktJVF9GSU5EX09QVElPTlNfQVRfV09SRF9TVEFSVFM7Ci0gICAg
V2ViS2l0RmluZENvbnRyb2xsZXIqIGZpbmRDb250cm9sbGVyID0gd2Via2l0X3dlYl92aWV3X2dl
dF9maW5kX2NvbnRyb2xsZXIodGVzdC0+bV93ZWJWaWV3KTsKLQotICAgIHdlYmtpdF9maW5kX2Nv
bnRyb2xsZXJfc2VhcmNoKGZpbmRDb250cm9sbGVyLCBzZWFyY2hUZXh0LCBmaW5kT3B0aW9ucywg
bWF4TWF0Y2hDb3VudCk7Ci0gICAgZ19hc3NlcnQod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRf
d2ViX3ZpZXcoZmluZENvbnRyb2xsZXIpID09IHRlc3QtPm1fd2ViVmlldyk7Ci0gICAgZ19hc3Nl
cnQoIWdfc3RyY21wMCh3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9zZWFyY2hfdGV4dChmaW5k
Q29udHJvbGxlciksIHNlYXJjaFRleHQpKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfZmluZF9jb250
cm9sbGVyX2dldF9tYXhfbWF0Y2hfY291bnQoZmluZENvbnRyb2xsZXIpID09IG1heE1hdGNoQ291
bnQpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X29wdGlvbnMoZmlu
ZENvbnRyb2xsZXIpID09IGZpbmRPcHRpb25zKTsKLX0KLQotdm9pZCBiZWZvcmVBbGwoKQotewot
ICAgIEZpbmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udHJvbGxlciIsICJnZXR0
ZXJzIiwgdGVzdEZpbmRDb250cm9sbGVyR2V0dGVycyk7Ci0gICAgRmluZENvbnRyb2xsZXJUZXN0
OjphZGQoIldlYktpdEZpbmRDb250cm9sbGVyIiwgImluc3RhbmNlIiwgdGVzdEZpbmRDb250cm9s
bGVySW5zdGFuY2UpOwotICAgIEZpbmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29u
dHJvbGxlciIsICJ0ZXh0LWZvdW5kIiwgdGVzdEZpbmRDb250cm9sbGVyVGV4dEZvdW5kKTsKLSAg
ICBGaW5kQ29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIiLCAidGV4dC1u
b3QtZm91bmQiLCB0ZXN0RmluZENvbnRyb2xsZXJUZXh0Tm90Rm91bmQpOwotICAgIEZpbmRDb250
cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udHJvbGxlciIsICJtYXRjaC1jb3VudCIsIHRl
c3RGaW5kQ29udHJvbGxlck1hdGNoQ291bnQpOwotICAgIEZpbmRDb250cm9sbGVyVGVzdDo6YWRk
KCJXZWJLaXRGaW5kQ29udHJvbGxlciIsICJtYXgtbWF0Y2gtY291bnQiLCB0ZXN0RmluZENvbnRy
b2xsZXJNYXhNYXRjaENvdW50KTsKLSAgICBGaW5kQ29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0
RmluZENvbnRyb2xsZXIiLCAibmV4dCIsIHRlc3RGaW5kQ29udHJvbGxlck5leHQpOwotICAgIEZp
bmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udHJvbGxlciIsICJwcmV2aW91cyIs
IHRlc3RGaW5kQ29udHJvbGxlclByZXZpb3VzKTsKLSAgICBGaW5kQ29udHJvbGxlclRlc3Q6OmFk
ZCgiV2ViS2l0RmluZENvbnRyb2xsZXIiLCAiY291bnRlZC1tYXRjaGVzIiwgdGVzdEZpbmRDb250
cm9sbGVyQ291bnRlZE1hdGNoZXMpOwotICAgIEZpbmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJL
aXRGaW5kQ29udHJvbGxlciIsICJvcHRpb25zIiwgdGVzdEZpbmRDb250cm9sbGVyT3B0aW9ucyk7
Ci0gICAgRmluZENvbnRyb2xsZXJUZXN0OjphZGQoIldlYktpdEZpbmRDb250cm9sbGVyIiwgImhp
ZGUiLCB0ZXN0RmluZENvbnRyb2xsZXJIaWRlKTsKLX0KLQotdm9pZCBhZnRlckFsbCgpCi17Ci19
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0
V2ViS2l0UG9saWN5Q2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL1Rlc3RXZWJLaXRQb2xpY3lDbGllbnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAyMDllYTA0NWUxNmY3Y2UyYmU0MjAzYTQ1MDg4OGJiZTNiM2ExMDJjLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRQb2xpY3lDbGllbnQuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMjY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlh
IFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiTG9hZFRyYWNraW5nVGVzdC5o
IgotI2luY2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9H
UmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1zdGF0aWMgV2ViS2l0
VGVzdFNlcnZlcioga1NlcnZlcjsKLQotY2xhc3MgUG9saWN5Q2xpZW50VGVzdDogcHVibGljIExv
YWRUcmFja2luZ1Rlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoUG9s
aWN5Q2xpZW50VGVzdCk7Ci0KLSAgICBlbnVtIFBvbGljeURlY2lzaW9uUmVzcG9uc2UgewotICAg
ICAgICBVc2UsCi0gICAgICAgIElnbm9yZSwKLSAgICAgICAgRG93bmxvYWQsCi0gICAgICAgIE5v
bmUKLSAgICB9OwotCi0gICAgUG9saWN5Q2xpZW50VGVzdCgpCi0gICAgICAgIDogTG9hZFRyYWNr
aW5nVGVzdCgpCi0gICAgICAgICwgbV9wb2xpY3lEZWNpc2lvblJlc3BvbnNlKE5vbmUpCi0gICAg
ICAgICwgbV9wb2xpY3lEZWNpc2lvblR5cGVGaWx0ZXIoMCkKLSAgICAgICAgLCBtX3Jlc3BvbmRU
b1BvbGljeURlY2lzaW9uQXN5bmNocm9ub3VzbHkoZmFsc2UpCi0gICAgICAgICwgbV9oYWx0TWFp
bkxvb3BBZnRlck1ha2luZ0RlY2lzaW9uKGZhbHNlKQotICAgIHsKLSAgICAgICAgZ19zaWduYWxf
Y29ubmVjdChtX3dlYlZpZXcsICJkZWNpZGUtcG9saWN5IiwgR19DQUxMQkFDSyhkZWNpZGVQb2xp
Y3lDYWxsYmFjayksIHRoaXMpOwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiBxdWl0TWFp
bkxvb3BMYXRlcihHTWFpbkxvb3AqIGxvb3ApCi0gICAgewotICAgICAgICBnX21haW5fbG9vcF9x
dWl0KGxvb3ApOwotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gICAgc3RhdGljIHZv
aWQgcmVzcG9uZFRvUG9saWN5RGVjaXNpb24oUG9saWN5Q2xpZW50VGVzdCogdGVzdCwgV2ViS2l0
UG9saWN5RGVjaXNpb24qIGRlY2lzaW9uKQotICAgIHsKLSAgICAgICAgc3dpdGNoICh0ZXN0LT5t
X3BvbGljeURlY2lzaW9uUmVzcG9uc2UpIHsKLSAgICAgICAgY2FzZSBVc2U6Ci0gICAgICAgICAg
ICB3ZWJraXRfcG9saWN5X2RlY2lzaW9uX3VzZShkZWNpc2lvbik7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBJZ25vcmU6Ci0gICAgICAgICAgICB3ZWJraXRfcG9saWN5X2RlY2lz
aW9uX2lnbm9yZShkZWNpc2lvbik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBE
b3dubG9hZDoKLSAgICAgICAgICAgIHdlYmtpdF9wb2xpY3lfZGVjaXNpb25fZG93bmxvYWQoZGVj
aXNpb24pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTm9uZToKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRlc3QtPm1faGFsdE1haW5Mb29w
QWZ0ZXJNYWtpbmdEZWNpc2lvbikKLSAgICAgICAgICAgIGdfaWRsZV9hZGQocmVpbnRlcnByZXRf
Y2FzdDxHU291cmNlRnVuYz4ocXVpdE1haW5Mb29wTGF0ZXIpLCB0ZXN0LT5tX21haW5Mb29wKTsK
LSAgICB9Ci0KLSAgICBzdGF0aWMgZ2Jvb2xlYW4gcmVzcG9uZFRvUG9saWN5RGVjaXNpb25MYXRl
cihQb2xpY3lDbGllbnRUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgcmVzcG9uZFRvUG9saWN5
RGVjaXNpb24odGVzdCwgdGVzdC0+bV9wcmV2aW91c1BvbGljeURlY2lzaW9uLmdldCgpKTsKLSAg
ICAgICAgdGVzdC0+bV9wcmV2aW91c1BvbGljeURlY2lzaW9uID0gMDsKLSAgICAgICAgcmV0dXJu
IEZBTFNFOwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiBkZWNpZGVQb2xpY3lDYWxsYmFj
ayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRQb2xpY3lEZWNpc2lvbiogZGVjaXNpb24s
IFdlYktpdFBvbGljeURlY2lzaW9uVHlwZSB0eXBlLCBQb2xpY3lDbGllbnRUZXN0KiB0ZXN0KQot
ICAgIHsKLSAgICAgICAgaWYgKHRlc3QtPm1fcG9saWN5RGVjaXNpb25UeXBlRmlsdGVyICE9IHR5
cGUpCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICAgICAgdGVzdC0+bV9wcmV2aW91
c1BvbGljeURlY2lzaW9uID0gZGVjaXNpb247Ci0gICAgICAgIGlmICh0ZXN0LT5tX3Jlc3BvbmRU
b1BvbGljeURlY2lzaW9uQXN5bmNocm9ub3VzbHkpIHsKLSAgICAgICAgICAgIGdfaWRsZV9hZGQo
cmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4ocmVzcG9uZFRvUG9saWN5RGVjaXNpb25MYXRl
ciksIHRlc3QpOwotICAgICAgICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgICAgIH0KLQotICAgICAg
ICByZXNwb25kVG9Qb2xpY3lEZWNpc2lvbih0ZXN0LCBkZWNpc2lvbik7Ci0KLSAgICAgICAgLy8g
V2UgcmV0dXJuIEZBTFNFIGhlcmUgdG8gZW5zdXJlIHRoYXQgdGhlIGRlZmF1bHQgcG9saWN5IGRl
Y2lzaW9uCi0gICAgICAgIC8vIGhhbmRsZXIgZG9lc24ndCBvdmVycmlkZSB3aGF0ZXZlciB3ZSB1
c2UgaGVyZS4KLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQotICAgIFBvbGljeURlY2lz
aW9uUmVzcG9uc2UgbV9wb2xpY3lEZWNpc2lvblJlc3BvbnNlOwotICAgIGludCBtX3BvbGljeURl
Y2lzaW9uVHlwZUZpbHRlcjsKLSAgICBib29sIG1fcmVzcG9uZFRvUG9saWN5RGVjaXNpb25Bc3lu
Y2hyb25vdXNseTsKLSAgICBib29sIG1faGFsdE1haW5Mb29wQWZ0ZXJNYWtpbmdEZWNpc2lvbjsK
LSAgICBHUmVmUHRyPFdlYktpdFBvbGljeURlY2lzaW9uPiBtX3ByZXZpb3VzUG9saWN5RGVjaXNp
b247Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0TmF2aWdhdGlvblBvbGljeShQb2xpY3lDbGllbnRU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPm1fcG9saWN5RGVjaXNpb25U
eXBlRmlsdGVyID0gV0VCS0lUX1BPTElDWV9ERUNJU0lPTl9UWVBFX05BVklHQVRJT05fQUNUSU9O
OwotCi0gICAgdGVzdC0+bV9wb2xpY3lEZWNpc2lvblJlc3BvbnNlID0gUG9saWN5Q2xpZW50VGVz
dDo6VXNlOwotICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbC8+IiwgImh0dHA6Ly93ZWJraXRndGsu
b3JnLyIpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGdfYXNzZXJ0
X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHMuc2l6ZSgpLCA9PSwgMyk7Ci0KLSAgICAvLyBJZGVh
bGx5IHdlJ2QgbGlrZSB0byBoYXZlIGEgbW9yZSBpbnRlbnNpdmUgdGVzdCBoZXJlLCBidXQgaXQn
cyBzdGlsbCBwcmV0dHkgdHJpY2t5Ci0gICAgLy8gdG8gdHJpZ2dlciBkaWZmZXJlbnQgdHlwZXMg
b2YgbmF2aWdhdGlvbnMgd2l0aCB0aGUgR1RLKyBXZWJLaXQyIEFQSS4KLSAgICBXZWJLaXROYXZp
Z2F0aW9uUG9saWN5RGVjaXNpb24qIGRlY2lzaW9uID0gV0VCS0lUX05BVklHQVRJT05fUE9MSUNZ
X0RFQ0lTSU9OKHRlc3QtPm1fcHJldmlvdXNQb2xpY3lEZWNpc2lvbi5nZXQoKSk7Ci0gICAgZ19h
c3NlcnRfY21waW50KHdlYmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRfbmF2aWdh
dGlvbl90eXBlKGRlY2lzaW9uKSwgPT0sIFdFQktJVF9OQVZJR0FUSU9OX1RZUEVfT1RIRVIpOwot
ICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0
X21vdXNlX2J1dHRvbihkZWNpc2lvbiksID09LCAwKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQod2Vi
a2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF9tb2RpZmllcnMoZGVjaXNpb24pLCA9
PSwgMCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNp
c2lvbl9nZXRfZnJhbWVfbmFtZShkZWNpc2lvbiksID09LCAwKTsKLSAgICBXZWJLaXRVUklSZXF1
ZXN0KiByZXF1ZXN0ID0gd2Via2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF9yZXF1
ZXN0KGRlY2lzaW9uKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3VyaV9yZXF1ZXN0X2dl
dF91cmkocmVxdWVzdCksID09LCAiaHR0cDovL3dlYmtpdGd0ay5vcmcvIik7Ci0KLSAgICB0ZXN0
LT5tX3BvbGljeURlY2lzaW9uUmVzcG9uc2UgPSBQb2xpY3lDbGllbnRUZXN0OjpVc2U7Ci0gICAg
dGVzdC0+bV9yZXNwb25kVG9Qb2xpY3lEZWNpc2lvbkFzeW5jaHJvbm91c2x5ID0gdHJ1ZTsKLSAg
ICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWwvPiIsICJodHRwOi8vd2Via2l0Z3RrLm9yZy8iKTsKLSAg
ICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVz
dC0+bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0sIDMpOwotCi0gICAgLy8gSWYgd2UgYXJlIHdhaXRp
bmcgdW50aWwgbG9hZCBjb21wbGV0aW9uLCBpdCB3aWxsIG5ldmVyIGNvbXBsZXRlIGlmIHdlIGln
bm9yZSB0aGUKLSAgICAvLyBuYXZpZ2F0aW9uLiBTbyB3ZSB0ZWxsIHRoZSBtYWluIGxvb3AgdG8g
cXVpdCBzb21ldGltZSBsYXRlci4KLSAgICB0ZXN0LT5tX3BvbGljeURlY2lzaW9uUmVzcG9uc2Ug
PSBQb2xpY3lDbGllbnRUZXN0OjpJZ25vcmU7Ci0gICAgdGVzdC0+bV9yZXNwb25kVG9Qb2xpY3lE
ZWNpc2lvbkFzeW5jaHJvbm91c2x5ID0gZmFsc2U7Ci0gICAgdGVzdC0+bV9oYWx0TWFpbkxvb3BB
ZnRlck1ha2luZ0RlY2lzaW9uID0gdHJ1ZTsKLSAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWwvPiIs
ICJodHRwOi8vd2Via2l0Z3RrLm9yZy8iKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNo
ZWQoKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0s
IDApOwotCi0gICAgdGVzdC0+bV9wb2xpY3lEZWNpc2lvblJlc3BvbnNlID0gUG9saWN5Q2xpZW50
VGVzdDo6SWdub3JlOwotICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbC8+IiwgImh0dHA6Ly93ZWJr
aXRndGsub3JnLyIpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGdf
YXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHMuc2l6ZSgpLCA9PSwgMCk7Ci19Ci0KLXN0
YXRpYyB2b2lkIHRlc3RSZXNwb25zZVBvbGljeShQb2xpY3lDbGllbnRUZXN0KiB0ZXN0LCBnY29u
c3Rwb2ludGVyKQotewotICAgIHRlc3QtPm1fcG9saWN5RGVjaXNpb25UeXBlRmlsdGVyID0gV0VC
S0lUX1BPTElDWV9ERUNJU0lPTl9UWVBFX1JFU1BPTlNFOwotCi0gICAgdGVzdC0+bV9wb2xpY3lE
ZWNpc2lvblJlc3BvbnNlID0gUG9saWN5Q2xpZW50VGVzdDo6VXNlOwotICAgIHRlc3QtPmxvYWRV
Ukkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVu
dGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50
cy5zaXplKCksID09LCAzKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRz
WzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7Ci0gICAg
Z19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rl
c3Q6OkxvYWRDb21taXR0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVu
dHNbMl0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOwotCi0gICAgV2ViS2l0
UmVzcG9uc2VQb2xpY3lEZWNpc2lvbiogZGVjaXNpb24gPSBXRUJLSVRfUkVTUE9OU0VfUE9MSUNZ
X0RFQ0lTSU9OKHRlc3QtPm1fcHJldmlvdXNQb2xpY3lEZWNpc2lvbi5nZXQoKSk7Ci0gICAgV2Vi
S2l0VVJJUmVxdWVzdCogcmVxdWVzdCA9IHdlYmtpdF9yZXNwb25zZV9wb2xpY3lfZGVjaXNpb25f
Z2V0X3JlcXVlc3QoZGVjaXNpb24pOwotICAgIGdfYXNzZXJ0KFdFQktJVF9JU19VUklfUkVRVUVT
VChyZXF1ZXN0KSk7Ci0gICAgQVNTRVJUX0NNUF9DU1RSSU5HKHdlYmtpdF91cmlfcmVxdWVzdF9n
ZXRfdXJpKHJlcXVlc3QpLCA9PSwga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpKTsKLSAgICBX
ZWJLaXRVUklSZXNwb25zZSogcmVzcG9uc2UgPSB3ZWJraXRfcmVzcG9uc2VfcG9saWN5X2RlY2lz
aW9uX2dldF9yZXNwb25zZShkZWNpc2lvbik7Ci0gICAgZ19hc3NlcnQoV0VCS0lUX0lTX1VSSV9S
RVNQT05TRShyZXNwb25zZSkpOwotICAgIEFTU0VSVF9DTVBfQ1NUUklORyh3ZWJraXRfdXJpX3Jl
c3BvbnNlX2dldF91cmkocmVzcG9uc2UpLCA9PSwga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIp
KTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfY2FuX3Nob3dfbWltZV90eXBlKHRlc3Qt
Pm1fd2ViVmlldywgd2Via2l0X3VyaV9yZXNwb25zZV9nZXRfbWltZV90eXBlKHJlc3BvbnNlKSkg
PT0KLSAgICAgICAgd2Via2l0X3Jlc3BvbnNlX3BvbGljeV9kZWNpc2lvbl9pc19taW1lX3R5cGVf
c3VwcG9ydGVkKGRlY2lzaW9uKSk7Ci0KLSAgICB0ZXN0LT5tX3Jlc3BvbmRUb1BvbGljeURlY2lz
aW9uQXN5bmNocm9ub3VzbHkgPSB0cnVlOwotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0
VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVk
KCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50cy5zaXplKCksID09LCAz
KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzBdLCA9PSwgTG9hZFRy
YWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50
KHRlc3QtPm1fbG9hZEV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRDb21taXR0
ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMl0sID09LCBMb2Fk
VHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOwotCi0gICAgdGVzdC0+bV9yZXNwb25kVG9Qb2xp
Y3lEZWNpc2lvbkFzeW5jaHJvbm91c2x5ID0gZmFsc2U7Ci0gICAgdGVzdC0+bV9wb2xpY3lEZWNp
c2lvblJlc3BvbnNlID0gUG9saWN5Q2xpZW50VGVzdDo6SWdub3JlOwotICAgIHRlc3QtPmxvYWRV
Ukkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVu
dGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZl
bnRzLnNpemUoKSwgPT0sIDMpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVu
dHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsKLSAg
ICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5n
VGVzdDo6UHJvdmlzaW9uYWxMb2FkRmFpbGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+
bV9sb2FkRXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKLX0K
LQotc3RydWN0IENyZWF0ZUNhbGxiYWNrRGF0YSB7Ci0gICAgYm9vbCB0cmllZFRvT3BlbldpbmRv
dzsKLSAgICBHTWFpbkxvb3AqIG1haW5Mb29wOwotfTsKLQotc3RhdGljIFdlYktpdFdlYlZpZXcq
IGNyZWF0ZUNhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIENyZWF0ZUNhbGxiYWNrRGF0
YSogZGF0YSkKLXsKLSAgICBkYXRhLT50cmllZFRvT3BlbldpbmRvdyA9IHRydWU7Ci0gICAgZ19t
YWluX2xvb3BfcXVpdChkYXRhLT5tYWluTG9vcCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRp
YyB2b2lkIHRlc3ROZXdXaW5kb3dQb2xpY3koUG9saWN5Q2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKLXsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogd2luZG93T3BlbmluZ0hUTUwgPQot
ICAgICAgICAiPGh0bWw+PGJvZHk+IgotICAgICAgICAiICAgIDxhIGlkPVwibGlua1wiIGhyZWY9
XCJodHRwOi8vd3d3Lmdvb2dsZS5jb21cIiB0YXJnZXQ9XCJfYmxhbmtcIj5MaW5rPC9hPiIKLSAg
ICAgICAgIiAgICA8c2NyaXB0PiIKLSAgICAgICAgIiAgICAgICAgdmFyIGV2ZW50ID0gZG9jdW1l
bnQuY3JlYXRlRXZlbnQoJ01vdXNlRXZlbnRzJyk7IgotICAgICAgICAiICAgICAgICBldmVudC5p
bml0RXZlbnQoJ2NsaWNrJywgdHJ1ZSwgZmFsc2UpOyIKLSAgICAgICAgIiAgICAgICAgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ2xpbmsnKS5kaXNwYXRjaEV2ZW50KGV2ZW50KTsiCi0gICAgICAg
ICIgICAgPC9zY3JpcHQ+IgotICAgICAgICAiPC9ib2R5PjwvaHRtbD4iOwotICAgIHRlc3QtPm1f
cG9saWN5RGVjaXNpb25UeXBlRmlsdGVyID0gV0VCS0lUX1BPTElDWV9ERUNJU0lPTl9UWVBFX05F
V19XSU5ET1dfQUNUSU9OOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfamF2YXNjcmlwdF9jYW5f
b3Blbl93aW5kb3dzX2F1dG9tYXRpY2FsbHkod2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh0
ZXN0LT5tX3dlYlZpZXcpLCBUUlVFKTsKLQotICAgIENyZWF0ZUNhbGxiYWNrRGF0YSBkYXRhOwot
ICAgIGRhdGEudHJpZWRUb09wZW5XaW5kb3cgPSBmYWxzZTsKLSAgICBkYXRhLm1haW5Mb29wID0g
dGVzdC0+bV9tYWluTG9vcDsKLQotICAgIGdfc2lnbmFsX2Nvbm5lY3QodGVzdC0+bV93ZWJWaWV3
LCAiY3JlYXRlIiwgR19DQUxMQkFDSyhjcmVhdGVDYWxsYmFjayksICZkYXRhKTsKLSAgICB0ZXN0
LT5tX3BvbGljeURlY2lzaW9uUmVzcG9uc2UgPSBQb2xpY3lDbGllbnRUZXN0OjpVc2U7Ci0gICAg
dGVzdC0+bG9hZEh0bWwod2luZG93T3BlbmluZ0hUTUwsICJodHRwOi8vd2Via2l0Z3RrLm9yZy8i
KTsKLSAgICB0ZXN0LT53YWl0KDEpOwotICAgIGdfYXNzZXJ0KGRhdGEudHJpZWRUb09wZW5XaW5k
b3cpOwotCi0gICAgV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uKiBkZWNpc2lvbiA9IFdF
QktJVF9OQVZJR0FUSU9OX1BPTElDWV9ERUNJU0lPTih0ZXN0LT5tX3ByZXZpb3VzUG9saWN5RGVj
aXNpb24uZ2V0KCkpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfbmF2aWdhdGlvbl9wb2xp
Y3lfZGVjaXNpb25fZ2V0X2ZyYW1lX25hbWUoZGVjaXNpb24pLCA9PSwgIl9ibGFuayIpOwotCi0g
ICAgLy8gVXNpbmcgYSBzaG9ydCB0aW1lb3V0IGlzIGEgYml0IHVnbHkgaGVyZSwgYnV0IGl0J3Mg
aGFyZCB0byBnZXQgYXJvdW5kIGJlY2F1c2UgaWYgd2UgYmxvY2sKLSAgICAvLyB0aGUgbmV3IHdp
bmRvdyBzaWduYWwgd2UgY2Fubm90IGhhbHQgdGhlIG1haW4gbG9vcCBpbiB0aGUgY3JlYXRlIGNh
bGxiYWNrLiBJZiB3ZQotICAgIC8vIGhhbHQgdGhlIG1haW4gbG9vcCBpbiB0aGUgcG9saWN5IGRl
Y2lzaW9uLCB0aGUgY3JlYXRlIGNhbGxiYWNrIG5ldmVyIGV4ZWN1dGVzLgotICAgIGRhdGEudHJp
ZWRUb09wZW5XaW5kb3cgPSBmYWxzZTsKLSAgICB0ZXN0LT5tX3BvbGljeURlY2lzaW9uUmVzcG9u
c2UgPSBQb2xpY3lDbGllbnRUZXN0OjpJZ25vcmU7Ci0gICAgdGVzdC0+bG9hZEh0bWwod2luZG93
T3BlbmluZ0hUTUwsICJodHRwOi8vd2Via2l0Z3RrLm9yZy8iKTsKLSAgICB0ZXN0LT53YWl0KC4y
KTsKLSAgICBnX2Fzc2VydCghZGF0YS50cmllZFRvT3BlbldpbmRvdyk7Ci19Ci0KLXN0YXRpYyB2
b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1lc3Nh
Z2UsIGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqLCBTb3VwQ2xpZW50Q29udGV4dCosIGdw
b2ludGVyKQotewotICAgIGlmIChtZXNzYWdlLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7
Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05P
VF9JTVBMRU1FTlRFRCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoZ19zdHJf
ZXF1YWwocGF0aCwgIi8iKSkgewotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogcmVzcG9uc2VT
dHJpbmcgPSAiPGh0bWw+PGJvZHk+VGVzdGluZyE8L2JvZHk+PC9odG1sPiI7Ci0gICAgICAgIHNv
dXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKLSAgICAgICAg
c291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVN
T1JZX1NUQVRJQywgcmVzcG9uc2VTdHJpbmcsIHN0cmxlbihyZXNwb25zZVN0cmluZykpOwotICAg
ICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsK
LSAgICB9IGVsc2UKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09V
UF9TVEFUVVNfTk9UX0ZPVU5EKTsKLX0KLQotdm9pZCBiZWZvcmVBbGwoKQotewotICAgIGtTZXJ2
ZXIgPSBuZXcgV2ViS2l0VGVzdFNlcnZlcigpOwotICAgIGtTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxs
YmFjayk7Ci0KLSAgICBQb2xpY3lDbGllbnRUZXN0OjphZGQoIldlYktpdFBvbGljeUNsaWVudCIs
ICJuYXZpZ2F0aW9uLXBvbGljeSIsIHRlc3ROYXZpZ2F0aW9uUG9saWN5KTsKLSAgICBQb2xpY3lD
bGllbnRUZXN0OjphZGQoIldlYktpdFBvbGljeUNsaWVudCIsICJyZXNwb25zZS1wb2xpY3kiLCB0
ZXN0UmVzcG9uc2VQb2xpY3kpOwotICAgIFBvbGljeUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0UG9s
aWN5Q2xpZW50IiwgIm5ldy13aW5kb3ctcG9saWN5IiwgdGVzdE5ld1dpbmRvd1BvbGljeSk7Ci19
Ci0KLXZvaWQgYWZ0ZXJBbGwoKQotewotICAgIGRlbGV0ZSBrU2VydmVyOwotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFNldHRp
bmdzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJL
aXRTZXR0aW5ncy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxZDMwMThjZDAz
NTg3Zjc0YTczMTM3ZmU3MTUyOTI3YTUyODU5ZDEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvVGVzdFdlYktpdFNldHRpbmdzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM3MCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChjKSAyMDExIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIAotICogYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0
OgotICoKLSAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0IG5vdGljZSwgCi0gKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICoKLSAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgCi0gKiB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciAKLSAqIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogTmVpdGhlciB0aGUgbmFtZSBvZiBNb3Rvcm9sYSBN
b2JpbGl0eSwgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IAotICog
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCAKLSAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTIAotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIAotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQgSE9MREVSIE9SIAotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCAK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiAKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyAKLSAqIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyAKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUg
IlRlc3RNYWluLmgiCi0jaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKLSNpbmNsdWRlICJXZWJLaXRU
ZXN0U2VydmVyLmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHdlYmtpdDIvd2Vi
a2l0Mi5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLQotc3RhdGljIFdlYktp
dFRlc3RTZXJ2ZXIqIGdTZXJ2ZXI7Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJLaXRTZXR0aW5ncyhU
ZXN0KiwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBXZWJLaXRTZXR0aW5ncyogc2V0dGluZ3MgPSB3
ZWJraXRfc2V0dGluZ3NfbmV3KCk7Ci0KLSAgICAvLyBKYXZhU2NyaXB0IGlzIGVuYWJsZWQgYnkg
ZGVmYXVsdC4KLSAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9qYXZhc2Ny
aXB0KHNldHRpbmdzKSk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfamF2YXNjcmlw
dChzZXR0aW5ncywgRkFMU0UpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2Vu
YWJsZV9qYXZhc2NyaXB0KHNldHRpbmdzKSk7Ci0KLSAgICAvLyBCeSBkZWZhdWx0IGF1dG8tbG9h
ZC1pbWFnZSBpcyB0cnVlLgotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfYXV0b19s
b2FkX2ltYWdlcyhzZXR0aW5ncykpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfYXV0b19sb2Fk
X2ltYWdlcyhzZXR0aW5ncywgRkFMU0UpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3Nf
Z2V0X2F1dG9fbG9hZF9pbWFnZXMoc2V0dGluZ3MpKTsKLQotICAgIC8vIGxvYWQtaWNvbnMtaWdu
b3JpbmctaW1hZ2UtbG9hZC1zZXR0aW5nIGlzIGZhbHNlIGJ5IGRlZmF1bHQuCi0gICAgZ19hc3Nl
cnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfbG9hZF9pY29uc19pZ25vcmluZ19pbWFnZV9sb2FkX3Nl
dHRpbmcoc2V0dGluZ3MpKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2xvYWRfaWNvbnNfaWdu
b3JpbmdfaW1hZ2VfbG9hZF9zZXR0aW5nKHNldHRpbmdzLCBUUlVFKTsKLSAgICBnX2Fzc2VydCh3
ZWJraXRfc2V0dGluZ3NfZ2V0X2xvYWRfaWNvbnNfaWdub3JpbmdfaW1hZ2VfbG9hZF9zZXR0aW5n
KHNldHRpbmdzKSk7Ci0gICAgCi0gICAgLy8gT2ZmbGluZSBhcHBsaWNhdGlvbiBjYWNoZSBpcyB0
cnVlIGJ5IGRlZmF1bHQuCi0gICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVf
b2ZmbGluZV93ZWJfYXBwbGljYXRpb25fY2FjaGUoc2V0dGluZ3MpKTsKLSAgICB3ZWJraXRfc2V0
dGluZ3Nfc2V0X2VuYWJsZV9vZmZsaW5lX3dlYl9hcHBsaWNhdGlvbl9jYWNoZShzZXR0aW5ncywg
RkFMU0UpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9vZmZsaW5l
X3dlYl9hcHBsaWNhdGlvbl9jYWNoZShzZXR0aW5ncykpOwotCi0gICAgLy8gTG9jYWwgc3RvcmFn
ZSBpcyBlbmFibGUgYnkgZGVmYXVsdC4KLSAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0
X2VuYWJsZV9odG1sNV9sb2NhbF9zdG9yYWdlKHNldHRpbmdzKSk7Ci0gICAgd2Via2l0X3NldHRp
bmdzX3NldF9lbmFibGVfaHRtbDVfbG9jYWxfc3RvcmFnZShzZXR0aW5ncywgRkFMU0UpOwotICAg
IGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9odG1sNV9sb2NhbF9zdG9yYWdl
KHNldHRpbmdzKSk7Ci0KLSAgICAvLyBIVE1MNSBkYXRhYmFzZSBpcyBlbmFibGVkIGJ5IGRlZmF1
bHQuCi0gICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfaHRtbDVfZGF0YWJh
c2Uoc2V0dGluZ3MpKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9odG1sNV9kYXRh
YmFzZShzZXR0aW5ncywgRkFMU0UpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0
X2VuYWJsZV9odG1sNV9kYXRhYmFzZShzZXR0aW5ncykpOwotCi0gICAgLy8gWFNTIEF1ZGl0b3Ig
aXMgZW5hYmxlZCBieSBkZWZhdWx0LgotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRf
ZW5hYmxlX3hzc19hdWRpdG9yKHNldHRpbmdzKSk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9l
bmFibGVfeHNzX2F1ZGl0b3Ioc2V0dGluZ3MsIEZBTFNFKTsKLSAgICBnX2Fzc2VydCghd2Via2l0
X3NldHRpbmdzX2dldF9lbmFibGVfeHNzX2F1ZGl0b3Ioc2V0dGluZ3MpKTsKLQotICAgIC8vIEZy
YW1lIGZsYXR0ZW5pbmcgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KLSAgICBnX2Fzc2VydCghd2Vi
a2l0X3NldHRpbmdzX2dldF9lbmFibGVfZnJhbWVfZmxhdHRlbmluZyhzZXR0aW5ncykpOwotICAg
IHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX2ZyYW1lX2ZsYXR0ZW5pbmcoc2V0dGluZ3MsIFRS
VUUpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2ZyYW1lX2ZsYXR0
ZW5pbmcoc2V0dGluZ3MpKTsKLQotICAgIC8vIFBsdWdpbnMgYXJlIGVuYWJsZWQgYnkgZGVmYXVs
dC4KLSAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9wbHVnaW5zKHNldHRp
bmdzKSk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfcGx1Z2lucyhzZXR0aW5ncywg
RkFMU0UpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9wbHVnaW5z
KHNldHRpbmdzKSk7Ci0KLSAgICAvLyBKYXZhIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4KLSAgICBn
X2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9qYXZhKHNldHRpbmdzKSk7Ci0gICAg
d2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfamF2YShzZXR0aW5ncywgRkFMU0UpOwotICAgIGdf
YXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9qYXZhKHNldHRpbmdzKSk7Ci0KLSAg
ICAvLyBCeSBkZWZhdWx0LCBKYXZhU2NyaXB0IGNhbiBvcGVuIHdpbmRvd3MgYXV0b21hdGljYWxs
eSBpcyBkaXNhYmxlZC4KLSAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9qYXZhc2Ny
aXB0X2Nhbl9vcGVuX3dpbmRvd3NfYXV0b21hdGljYWxseShzZXR0aW5ncykpOwotICAgIHdlYmtp
dF9zZXR0aW5nc19zZXRfamF2YXNjcmlwdF9jYW5fb3Blbl93aW5kb3dzX2F1dG9tYXRpY2FsbHko
c2V0dGluZ3MsIFRSVUUpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfamF2YXNj
cmlwdF9jYW5fb3Blbl93aW5kb3dzX2F1dG9tYXRpY2FsbHkoc2V0dGluZ3MpKTsKLQotICAgIC8v
IEJ5IGRlZmF1bHQgaHlwZXIgbGluayBhdWRpdGluZyBpcyBkaXNhYmxlZC4KLSAgICBnX2Fzc2Vy
dCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfaHlwZXJsaW5rX2F1ZGl0aW5nKHNldHRpbmdz
KSk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfaHlwZXJsaW5rX2F1ZGl0aW5nKHNl
dHRpbmdzLCBUUlVFKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9o
eXBlcmxpbmtfYXVkaXRpbmcoc2V0dGluZ3MpKTsKLQotICAgIC8vIERlZmF1bHQgZm9udCBmYW1p
bHkgaXMgInNhbnMtc2VyaWYiLgotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2V0dGluZ3Nf
Z2V0X2RlZmF1bHRfZm9udF9mYW1pbHkoc2V0dGluZ3MpLCA9PSwgInNhbnMtc2VyaWYiKTsKLSAg
ICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2RlZmF1bHRfZm9udF9mYW1pbHkoc2V0dGluZ3MsICJtb25v
c3BhY2UiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NldHRpbmdzX2dldF9kZWZhdWx0
X2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJtb25vc3BhY2UiKTsKLQotICAgIC8vIERlZmF1
bHQgbW9ub3NwYWNlIGZvbnQgZmFtaWx5IGZvbnQgZmFtaWx5IGlzICJtb25vc3BhY2UiLgotICAg
IGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2V0dGluZ3NfZ2V0X21vbm9zcGFjZV9mb250X2ZhbWls
eShzZXR0aW5ncyksID09LCAibW9ub3NwYWNlIik7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9t
b25vc3BhY2VfZm9udF9mYW1pbHkoc2V0dGluZ3MsICJzYW5zLXNlcmlmIik7Ci0gICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF9zZXR0aW5nc19nZXRfbW9ub3NwYWNlX2ZvbnRfZmFtaWx5KHNldHRp
bmdzKSwgPT0sICJzYW5zLXNlcmlmIik7Ci0KLSAgICAvLyBEZWZhdWx0IHNlcmlmIGZvbnQgZmFt
aWx5IGlzICJzZXJpZiIuCi0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zZXR0aW5nc19nZXRf
c2VyaWZfZm9udF9mYW1pbHkoc2V0dGluZ3MpLCA9PSwgInNlcmlmIik7Ci0gICAgd2Via2l0X3Nl
dHRpbmdzX3NldF9zZXJpZl9mb250X2ZhbWlseShzZXR0aW5ncywgInNhbnMtc2VyaWYiKTsKLSAg
ICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NldHRpbmdzX2dldF9zZXJpZl9mb250X2ZhbWlseShz
ZXR0aW5ncyksID09LCAic2Fucy1zZXJpZiIpOwotCi0gICAgLy8gRGVmYXVsdCBzYW5zIHNlcmlm
IGZvbnQgZmFtaWx5IGlzICJzYW5zLXNlcmlmIi4KLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0
X3NldHRpbmdzX2dldF9zYW5zX3NlcmlmX2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJzYW5z
LXNlcmlmIik7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9zYW5zX3NlcmlmX2ZvbnRfZmFtaWx5
KHNldHRpbmdzLCAic2VyaWYiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NldHRpbmdz
X2dldF9zYW5zX3NlcmlmX2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJzZXJpZiIpOwotCi0g
ICAgLy8gRGVmYXVsdCBjdXJzaXZlIGZvbnQgZmFtaWx5ICJzZXJpZiIuCi0gICAgZ19hc3NlcnRf
Y21wc3RyKHdlYmtpdF9zZXR0aW5nc19nZXRfY3Vyc2l2ZV9mb250X2ZhbWlseShzZXR0aW5ncyks
ID09LCAic2VyaWYiKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2N1cnNpdmVfZm9udF9mYW1p
bHkoc2V0dGluZ3MsICJzYW5zLXNlcmlmIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9z
ZXR0aW5nc19nZXRfY3Vyc2l2ZV9mb250X2ZhbWlseShzZXR0aW5ncyksID09LCAic2Fucy1zZXJp
ZiIpOwotCi0gICAgLy8gRGVmYXVsdCBmYW50YXN5IGZvbnQgZmFtaWx5IGlzICJzZXJpZiIuCi0g
ICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zZXR0aW5nc19nZXRfZmFudGFzeV9mb250X2ZhbWls
eShzZXR0aW5ncyksID09LCAic2VyaWYiKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2ZhbnRh
c3lfZm9udF9mYW1pbHkoc2V0dGluZ3MsICJzYW5zLXNlcmlmIik7Ci0gICAgZ19hc3NlcnRfY21w
c3RyKHdlYmtpdF9zZXR0aW5nc19nZXRfZmFudGFzeV9mb250X2ZhbWlseShzZXR0aW5ncyksID09
LCAic2Fucy1zZXJpZiIpOwotCi0gICAgLy8gRGVmYXVsdCBwaWN0b2dyYXBoIGZvbnQgZmFtaWx5
IGlzICJzZXJpZiIuCi0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zZXR0aW5nc19nZXRfcGlj
dG9ncmFwaF9mb250X2ZhbWlseShzZXR0aW5ncyksID09LCAic2VyaWYiKTsKLSAgICB3ZWJraXRf
c2V0dGluZ3Nfc2V0X3BpY3RvZ3JhcGhfZm9udF9mYW1pbHkoc2V0dGluZ3MsICJzYW5zLXNlcmlm
Iik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zZXR0aW5nc19nZXRfcGljdG9ncmFwaF9m
b250X2ZhbWlseShzZXR0aW5ncyksID09LCAic2Fucy1zZXJpZiIpOwotCi0gICAgLy8gRGVmYXVs
dCBmb250IHNpemUgaXMgMTYuCi0gICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfc2V0dGluZ3Nf
Z2V0X2RlZmF1bHRfZm9udF9zaXplKHNldHRpbmdzKSwgPT0sIDE2KTsKLSAgICB3ZWJraXRfc2V0
dGluZ3Nfc2V0X2RlZmF1bHRfZm9udF9zaXplKHNldHRpbmdzLCAxNCk7Ci0gICAgZ19hc3NlcnRf
Y21wdWludCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2RlZmF1bHRfZm9udF9zaXplKHNldHRpbmdzKSwg
PT0sIDE0KTsKLQotICAgIC8vIERlZmF1bHQgbW9ub3NwYWNlIGZvbnQgc2l6ZSBpcyAxMy4KLSAg
ICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9zZXR0aW5nc19nZXRfZGVmYXVsdF9tb25vc3BhY2Vf
Zm9udF9zaXplKHNldHRpbmdzKSwgPT0sIDEzKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2Rl
ZmF1bHRfbW9ub3NwYWNlX2ZvbnRfc2l6ZShzZXR0aW5ncywgMTApOwotICAgIGdfYXNzZXJ0X2Nt
cHVpbnQod2Via2l0X3NldHRpbmdzX2dldF9kZWZhdWx0X21vbm9zcGFjZV9mb250X3NpemUoc2V0
dGluZ3MpLCA9PSwgMTApOwotCi0gICAgLy8gRGVmYXVsdCBtaW5pbXVtIGZvbnQgc2l6ZSBpcyAw
LgotICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X3NldHRpbmdzX2dldF9taW5pbXVtX2ZvbnRf
c2l6ZShzZXR0aW5ncyksID09LCAwKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X21pbmltdW1f
Zm9udF9zaXplKHNldHRpbmdzLCA3KTsKLSAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9zZXR0
aW5nc19nZXRfbWluaW11bV9mb250X3NpemUoc2V0dGluZ3MpLCA9PSwgNyk7Ci0KLSAgICAvLyBE
ZWZhdWx0IGNoYXJzZXQgaXMgImlzby04ODU5LTEiLgotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJr
aXRfc2V0dGluZ3NfZ2V0X2RlZmF1bHRfY2hhcnNldChzZXR0aW5ncyksID09LCAiaXNvLTg4NTkt
MSIpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZGVmYXVsdF9jaGFyc2V0KHNldHRpbmdzLCAi
dXRmOCIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2V0dGluZ3NfZ2V0X2RlZmF1bHRf
Y2hhcnNldChzZXR0aW5ncyksID09LCAidXRmOCIpOwotCi0gICAgZ19hc3NlcnQoIXdlYmtpdF9z
ZXR0aW5nc19nZXRfZW5hYmxlX3ByaXZhdGVfYnJvd3Npbmcoc2V0dGluZ3MpKTsKLSAgICB3ZWJr
aXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9wcml2YXRlX2Jyb3dzaW5nKHNldHRpbmdzLCBUUlVFKTsK
LSAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9wcml2YXRlX2Jyb3dzaW5n
KHNldHRpbmdzKSk7Ci0KLSAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVf
ZGV2ZWxvcGVyX2V4dHJhcyhzZXR0aW5ncykpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5h
YmxlX2RldmVsb3Blcl9leHRyYXMoc2V0dGluZ3MsIFRSVUUpOwotICAgIGdfYXNzZXJ0KHdlYmtp
dF9zZXR0aW5nc19nZXRfZW5hYmxlX2RldmVsb3Blcl9leHRyYXMoc2V0dGluZ3MpKTsKLQotICAg
IGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3Jlc2l6YWJsZV90ZXh0X2FyZWFz
KHNldHRpbmdzKSk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfcmVzaXphYmxlX3Rl
eHRfYXJlYXMoc2V0dGluZ3MsIEZBTFNFKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdz
X2dldF9lbmFibGVfcmVzaXphYmxlX3RleHRfYXJlYXMoc2V0dGluZ3MpKTsKLQotICAgIGdfYXNz
ZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3RhYnNfdG9fbGlua3Moc2V0dGluZ3MpKTsK
LSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV90YWJzX3RvX2xpbmtzKHNldHRpbmdzLCBG
QUxTRSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3RhYnNfdG9f
bGlua3Moc2V0dGluZ3MpKTsKLQotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2Vu
YWJsZV9kbnNfcHJlZmV0Y2hpbmcoc2V0dGluZ3MpKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0
X2VuYWJsZV9kbnNfcHJlZmV0Y2hpbmcoc2V0dGluZ3MsIFRSVUUpOwotICAgIGdfYXNzZXJ0KHdl
YmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2Ruc19wcmVmZXRjaGluZyhzZXR0aW5ncykpOwotCi0g
ICAgLy8gQ2FyZXQgYnJvd3NpbmcgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KLSAgICBnX2Fzc2Vy
dCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfY2FyZXRfYnJvd3Npbmcoc2V0dGluZ3MpKTsK
LSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9jYXJldF9icm93c2luZyhzZXR0aW5ncywg
VFJVRSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfY2FyZXRfYnJv
d3Npbmcoc2V0dGluZ3MpKTsKLQotICAgIC8vIEZ1bGxzY3JlZW4gSmF2YVNjcmlwdCBBUEkgaXMg
ZW5hYmxlZCBieSBkZWZhdWx0LgotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5h
YmxlX2Z1bGxzY3JlZW4oc2V0dGluZ3MpKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJs
ZV9mdWxsc2NyZWVuKHNldHRpbmdzLCBGQUxTRSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0
aW5nc19nZXRfZW5hYmxlX2Z1bGxzY3JlZW4oc2V0dGluZ3MpKTsKLQotICAgIC8vIFByaW50IGJh
Y2tncm91bmRzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdAotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0
aW5nc19nZXRfcHJpbnRfYmFja2dyb3VuZHMoc2V0dGluZ3MpKTsKLSAgICB3ZWJraXRfc2V0dGlu
Z3Nfc2V0X3ByaW50X2JhY2tncm91bmRzKHNldHRpbmdzLCBGQUxTRSk7Ci0gICAgZ19hc3NlcnQo
IXdlYmtpdF9zZXR0aW5nc19nZXRfcHJpbnRfYmFja2dyb3VuZHMoc2V0dGluZ3MpKTsKLQotICAg
IC8vIFdlYkF1ZGlvIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCi0gICAgZ19hc3NlcnQoIXdlYmtp
dF9zZXR0aW5nc19nZXRfZW5hYmxlX3dlYmF1ZGlvKHNldHRpbmdzKSk7Ci0gICAgd2Via2l0X3Nl
dHRpbmdzX3NldF9lbmFibGVfd2ViYXVkaW8oc2V0dGluZ3MsIFRSVUUpOwotICAgIGdfYXNzZXJ0
KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3dlYmF1ZGlvKHNldHRpbmdzKSk7Ci0KLSAgICAv
LyBXZWJHTCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0
dGluZ3NfZ2V0X2VuYWJsZV93ZWJnbChzZXR0aW5ncykpOwotICAgIHdlYmtpdF9zZXR0aW5nc19z
ZXRfZW5hYmxlX3dlYmdsKHNldHRpbmdzLCBUUlVFKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfc2V0
dGluZ3NfZ2V0X2VuYWJsZV93ZWJnbChzZXR0aW5ncykpOwotCi0gICAgLy8gQWxsb3cgTW9kYWwg
RGlhbG9ncyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0
dGluZ3NfZ2V0X2FsbG93X21vZGFsX2RpYWxvZ3Moc2V0dGluZ3MpKTsKLSAgICB3ZWJraXRfc2V0
dGluZ3Nfc2V0X2FsbG93X21vZGFsX2RpYWxvZ3Moc2V0dGluZ3MsIFRSVUUpOwotICAgIGdfYXNz
ZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfYWxsb3dfbW9kYWxfZGlhbG9ncyhzZXR0aW5ncykpOwot
Ci0gICAgLy8gWm9vbSB0ZXh0IG9ubHkgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KLSAgICBnX2Fz
c2VydCghd2Via2l0X3NldHRpbmdzX2dldF96b29tX3RleHRfb25seShzZXR0aW5ncykpOwotICAg
IHdlYmtpdF9zZXR0aW5nc19zZXRfem9vbV90ZXh0X29ubHkoc2V0dGluZ3MsIFRSVUUpOwotICAg
IGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfem9vbV90ZXh0X29ubHkoc2V0dGluZ3MpKTsK
LQotICAgIC8vIEJ5IGRlZmF1bHQsIEphdmFTY3JpcHQgY2Fubm90IGFjY2VzcyB0aGUgY2xpcGJv
YXJkLgotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2phdmFzY3JpcHRfY2FuX2Fj
Y2Vzc19jbGlwYm9hcmQoc2V0dGluZ3MpKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2phdmFz
Y3JpcHRfY2FuX2FjY2Vzc19jbGlwYm9hcmQoc2V0dGluZ3MsIFRSVUUpOwotICAgIGdfYXNzZXJ0
KHdlYmtpdF9zZXR0aW5nc19nZXRfamF2YXNjcmlwdF9jYW5fYWNjZXNzX2NsaXBib2FyZChzZXR0
aW5ncykpOwotCi0gICAgLy8gQnkgZGVmYXVsdCwgbWVkaWEgcGxheWJhY2sgZG9lc24ndCByZXF1
aXJlIHVzZXIgZ2VzdHVyZXMuCi0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfbWVk
aWFfcGxheWJhY2tfcmVxdWlyZXNfdXNlcl9nZXN0dXJlKHNldHRpbmdzKSk7Ci0gICAgd2Via2l0
X3NldHRpbmdzX3NldF9tZWRpYV9wbGF5YmFja19yZXF1aXJlc191c2VyX2dlc3R1cmUoc2V0dGlu
Z3MsIFRSVUUpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfbWVkaWFfcGxheWJh
Y2tfcmVxdWlyZXNfdXNlcl9nZXN0dXJlKHNldHRpbmdzKSk7Ci0KLSAgICAvLyBCeSBkZWZhdWx0
LCBpbmxpbmUgbWVkaWEgcGxheWJhY2sgaXMgYWxsb3dlZAotICAgIGdfYXNzZXJ0KHdlYmtpdF9z
ZXR0aW5nc19nZXRfbWVkaWFfcGxheWJhY2tfYWxsb3dzX2lubGluZShzZXR0aW5ncykpOwotICAg
IHdlYmtpdF9zZXR0aW5nc19zZXRfbWVkaWFfcGxheWJhY2tfYWxsb3dzX2lubGluZShzZXR0aW5n
cywgRkFMU0UpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X21lZGlhX3BsYXli
YWNrX2FsbG93c19pbmxpbmUoc2V0dGluZ3MpKTsKLQotICAgIC8vIEJ5IGRlZmF1bHQsIGRlYnVn
IGluZGljYXRvcnMgYXJlIGRpc2FibGVkLgotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3Nf
Z2V0X2RyYXdfY29tcG9zaXRpbmdfaW5kaWNhdG9ycyhzZXR0aW5ncykpOwotICAgIHdlYmtpdF9z
ZXR0aW5nc19zZXRfZHJhd19jb21wb3NpdGluZ19pbmRpY2F0b3JzKHNldHRpbmdzLCBUUlVFKTsK
LSAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2RyYXdfY29tcG9zaXRpbmdfaW5kaWNh
dG9ycyhzZXR0aW5ncykpOwotCi0gICAgLy8gQnkgZGVmYXVsdCwgc2l0ZSBzcGVjaWZpYyBxdWly
a3MgYXJlIGRpc2FibGVkLgotICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJs
ZV9zaXRlX3NwZWNpZmljX3F1aXJrcyhzZXR0aW5ncykpOwotICAgIHdlYmtpdF9zZXR0aW5nc19z
ZXRfZW5hYmxlX3NpdGVfc3BlY2lmaWNfcXVpcmtzKHNldHRpbmdzLCBUUlVFKTsKLSAgICBnX2Fz
c2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9zaXRlX3NwZWNpZmljX3F1aXJrcyhzZXR0
aW5ncykpOwotCi0gICAgLy8gQnkgZGVmYXVsdCwgcGFnZSBjYWNoZSBpcyBlbmFibGVkLgotICAg
IGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3BhZ2VfY2FjaGUoc2V0dGluZ3Mp
KTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9wYWdlX2NhY2hlKHNldHRpbmdzLCBG
QUxTRSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3BhZ2VfY2Fj
aGUoc2V0dGluZ3MpKTsKLQotICAgIC8vIEJ5IGRlZmF1bHQsIHNtb290aCBzY3JvbGxpbmcgaXMg
ZGlzYWJsZWQuCi0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3Ntb290
aF9zY3JvbGxpbmcoc2V0dGluZ3MpKTsKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9z
bW9vdGhfc2Nyb2xsaW5nKHNldHRpbmdzLCBUUlVFKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfc2V0
dGluZ3NfZ2V0X2VuYWJsZV9zbW9vdGhfc2Nyb2xsaW5nKHNldHRpbmdzKSk7Ci0KLSAgICAvLyBC
eSBkZWZhdWx0LCBhY2NlbGVyYXRlZCAyRCBjYW52YXMgaXMgZGlzYWJsZWQuCi0gICAgZ19hc3Nl
cnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2FjY2VsZXJhdGVkXzJkX2NhbnZhcyhzZXR0
aW5ncykpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX2FjY2VsZXJhdGVkXzJkX2Nh
bnZhcyhzZXR0aW5ncywgVFJVRSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9l
bmFibGVfYWNjZWxlcmF0ZWRfMmRfY2FudmFzKHNldHRpbmdzKSk7Ci0KLSAgICAvLyBCeSBkZWZh
dWx0LCB3cml0aW5nIG9mIGNvbnNvbGUgbWVzc2FnZXMgdG8gc3Rkb3V0IGlzIGRpc2FibGVkLgot
ICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV93cml0ZV9jb25zb2xlX21l
c3NhZ2VzX3RvX3N0ZG91dChzZXR0aW5ncykpOwotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5h
YmxlX3dyaXRlX2NvbnNvbGVfbWVzc2FnZXNfdG9fc3Rkb3V0KHNldHRpbmdzLCBUUlVFKTsKLSAg
ICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV93cml0ZV9jb25zb2xlX21lc3Nh
Z2VzX3RvX3N0ZG91dChzZXR0aW5ncykpOwotCi0gICAgLy8gTWVkaWFTdHJlYW0gaXMgZGlzYWJs
ZWQgYnkgZGVmYXVsdC4KLSAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVf
bWVkaWFfc3RyZWFtKHNldHRpbmdzKSk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVf
bWVkaWFfc3RyZWFtKHNldHRpbmdzLCBUUlVFKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGlu
Z3NfZ2V0X2VuYWJsZV9tZWRpYV9zdHJlYW0oc2V0dGluZ3MpKTsKLQotICAgIC8vIEJ5IGRlZmF1
bHQsIFNwYXRpYWxOYXZpZ2F0aW9uIGlzIGRpc2FibGVkCi0gICAgZ19hc3NlcnQoIXdlYmtpdF9z
ZXR0aW5nc19nZXRfZW5hYmxlX3NwYXRpYWxfbmF2aWdhdGlvbihzZXR0aW5ncykpOwotICAgIHdl
YmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX3NwYXRpYWxfbmF2aWdhdGlvbihzZXR0aW5ncywgVFJV
RSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfc3BhdGlhbF9uYXZp
Z2F0aW9uKHNldHRpbmdzKSk7Ci0KLSAgICAvLyBNZWRpYVNvdXJjZSBpcyBkaXNhYmxlZCBieSBk
ZWZhdWx0Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX21lZGlhc291
cmNlKHNldHRpbmdzKSk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfbWVkaWFzb3Vy
Y2Uoc2V0dGluZ3MsIFRSVUUpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5h
YmxlX21lZGlhc291cmNlKHNldHRpbmdzKSk7Ci0KLSAgICBnX29iamVjdF91bnJlZihHX09CSkVD
VChzZXR0aW5ncykpOwotfQotCi12b2lkIHRlc3RXZWJLaXRTZXR0aW5nc05ld1dpdGhTZXR0aW5n
cyhUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIEdSZWZQdHI8V2ViS2l0U2V0dGlu
Z3M+IHNldHRpbmdzID0gYWRvcHRHUmVmKHdlYmtpdF9zZXR0aW5nc19uZXdfd2l0aF9zZXR0aW5n
cygiZW5hYmxlLWphdmFzY3JpcHQiLCBGQUxTRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImF1dG8tbG9hZC1pbWFnZXMiLCBGQUxTRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxv
YWQtaWNvbnMtaWdub3JpbmctaW1hZ2UtbG9hZC1zZXR0aW5nIiwgVFJVRSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTlVMTCkpOwotICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdo
ZW5UZXN0RmluaXNoZXMoR19PQkpFQ1Qoc2V0dGluZ3MuZ2V0KCkpKTsKLSAgICBnX2Fzc2VydCgh
d2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfamF2YXNjcmlwdChzZXR0aW5ncy5nZXQoKSkpOwot
ICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2F1dG9fbG9hZF9pbWFnZXMoc2V0dGlu
Z3MuZ2V0KCkpKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2xvYWRfaWNvbnNf
aWdub3JpbmdfaW1hZ2VfbG9hZF9zZXR0aW5nKHNldHRpbmdzLmdldCgpKSk7Ci19Ci0KLXN0YXRp
YyBDU3RyaW5nIGNvbnZlcnRXZWJWaWV3TWFpblJlc291cmNlRGF0YVRvQ1N0cmluZyhXZWJWaWV3
VGVzdCogdGVzdCkKLXsKLSAgICBzaXplX3QgbWFpblJlc291cmNlRGF0YVNpemUgPSAwOwotICAg
IGNvbnN0IGNoYXIqIG1haW5SZXNvdXJjZURhdGEgPSB0ZXN0LT5tYWluUmVzb3VyY2VEYXRhKG1h
aW5SZXNvdXJjZURhdGFTaXplKTsKLSAgICByZXR1cm4gQ1N0cmluZyhtYWluUmVzb3VyY2VEYXRh
LCBtYWluUmVzb3VyY2VEYXRhU2l6ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFzc2VydFRoYXRVc2Vy
QWdlbnRJc1NlbnRJbkhlYWRlcnMoV2ViVmlld1Rlc3QqIHRlc3QsIGNvbnN0IENTdHJpbmcmIHVz
ZXJBZ2VudCkKLXsKLSAgICB0ZXN0LT5sb2FkVVJJKGdTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi8i
KS5kYXRhKCkpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIEFTU0VS
VF9DTVBfQ1NUUklORyhjb252ZXJ0V2ViVmlld01haW5SZXNvdXJjZURhdGFUb0NTdHJpbmcodGVz
dCksID09LCB1c2VyQWdlbnQpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViS2l0U2V0dGluZ3NV
c2VyQWdlbnQoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgR1JlZlB0
cjxXZWJLaXRTZXR0aW5ncz4gc2V0dGluZ3MgPSBhZG9wdEdSZWYod2Via2l0X3NldHRpbmdzX25l
dygpKTsKLSAgICBDU3RyaW5nIGRlZmF1bHRVc2VyQWdlbnQgPSB3ZWJraXRfc2V0dGluZ3NfZ2V0
X3VzZXJfYWdlbnQoc2V0dGluZ3MuZ2V0KCkpOwotICAgIHdlYmtpdF93ZWJfdmlld19zZXRfc2V0
dGluZ3ModGVzdC0+bV93ZWJWaWV3LCBzZXR0aW5ncy5nZXQoKSk7Ci0KLSAgICBnX2Fzc2VydChn
X3N0cnN0cl9sZW4oZGVmYXVsdFVzZXJBZ2VudC5kYXRhKCksIC0xLCAiQXBwbGVXZWJLaXQiKSk7
Ci0gICAgZ19hc3NlcnQoZ19zdHJzdHJfbGVuKGRlZmF1bHRVc2VyQWdlbnQuZGF0YSgpLCAtMSwg
IlNhZmFyaSIpKTsKLQotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfdXNlcl9hZ2VudChzZXR0aW5n
cy5nZXQoKSwgMCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKGRlZmF1bHRVc2VyQWdlbnQuZGF0YSgp
LCA9PSwgd2Via2l0X3NldHRpbmdzX2dldF91c2VyX2FnZW50KHNldHRpbmdzLmdldCgpKSk7Ci0g
ICAgYXNzZXJ0VGhhdFVzZXJBZ2VudElzU2VudEluSGVhZGVycyh0ZXN0LCBkZWZhdWx0VXNlckFn
ZW50LmRhdGEoKSk7Ci0KLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X3VzZXJfYWdlbnQoc2V0dGlu
Z3MuZ2V0KCksICIiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoZGVmYXVsdFVzZXJBZ2VudC5kYXRh
KCksID09LCB3ZWJraXRfc2V0dGluZ3NfZ2V0X3VzZXJfYWdlbnQoc2V0dGluZ3MuZ2V0KCkpKTsK
LQotICAgIGNvbnN0IGNoYXIqIGZ1bmt5VXNlckFnZW50ID0gIkZ1bmt5ISI7Ci0gICAgd2Via2l0
X3NldHRpbmdzX3NldF91c2VyX2FnZW50KHNldHRpbmdzLmdldCgpLCBmdW5reVVzZXJBZ2VudCk7
Ci0gICAgZ19hc3NlcnRfY21wc3RyKGZ1bmt5VXNlckFnZW50LCA9PSwgd2Via2l0X3NldHRpbmdz
X2dldF91c2VyX2FnZW50KHNldHRpbmdzLmdldCgpKSk7Ci0gICAgYXNzZXJ0VGhhdFVzZXJBZ2Vu
dElzU2VudEluSGVhZGVycyh0ZXN0LCBmdW5reVVzZXJBZ2VudCk7Ci0KLSAgICB3ZWJraXRfc2V0
dGluZ3Nfc2V0X3VzZXJfYWdlbnRfd2l0aF9hcHBsaWNhdGlvbl9kZXRhaWxzKHNldHRpbmdzLmdl
dCgpLCAiV2ViS2l0R1RLKyIsIDApOwotICAgIGNvbnN0IGNoYXIqIHVzZXJBZ2VudFdpdGhOdWxs
VmVyc2lvbiA9IHdlYmtpdF9zZXR0aW5nc19nZXRfdXNlcl9hZ2VudChzZXR0aW5ncy5nZXQoKSk7
Ci0gICAgZ19hc3NlcnRfY21wc3RyKGdfc3Ryc3RyX2xlbih1c2VyQWdlbnRXaXRoTnVsbFZlcnNp
b24sIC0xLCBkZWZhdWx0VXNlckFnZW50LmRhdGEoKSksID09LCB1c2VyQWdlbnRXaXRoTnVsbFZl
cnNpb24pOwotICAgIGdfYXNzZXJ0KGdfc3Ryc3RyX2xlbih1c2VyQWdlbnRXaXRoTnVsbFZlcnNp
b24sIC0xLCAiV2ViS2l0R1RLKyIpKTsKLQotICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfdXNlcl9h
Z2VudF93aXRoX2FwcGxpY2F0aW9uX2RldGFpbHMoc2V0dGluZ3MuZ2V0KCksICJXZWJLaXRHVEsr
IiwgIiIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2V0dGluZ3NfZ2V0X3VzZXJfYWdl
bnQoc2V0dGluZ3MuZ2V0KCkpLCA9PSwgdXNlckFnZW50V2l0aE51bGxWZXJzaW9uKTsKLQotICAg
IHdlYmtpdF9zZXR0aW5nc19zZXRfdXNlcl9hZ2VudF93aXRoX2FwcGxpY2F0aW9uX2RldGFpbHMo
c2V0dGluZ3MuZ2V0KCksICJXZWJDYXRHVEsrIiwgIjMuNC41Iik7Ci0gICAgY29uc3QgY2hhciog
bmV3VXNlckFnZW50ID0gd2Via2l0X3NldHRpbmdzX2dldF91c2VyX2FnZW50KHNldHRpbmdzLmdl
dCgpKTsKLSAgICBnX2Fzc2VydChnX3N0cnN0cl9sZW4obmV3VXNlckFnZW50LCAtMSwgIjMuNC41
IikpOwotICAgIGdfYXNzZXJ0KGdfc3Ryc3RyX2xlbihuZXdVc2VyQWdlbnQsIC0xLCAiV2ViQ2F0
R1RLKyIpKTsKLX0KLQotc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2Vy
dmVyLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSos
IFNvdXBDbGllbnRDb250ZXh0KiwgZ3BvaW50ZXIpCi17Ci0gICAgaWYgKG1lc3NhZ2UtPm1ldGhv
ZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMo
bWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiLyIpKSB7Ci0gICAgICAgIGNvbnN0
IGNoYXIqIHVzZXJBZ2VudCA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9vbmUobWVzc2FnZS0+
cmVxdWVzdF9oZWFkZXJzLCAiVXNlci1BZ2VudCIpOwotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0
X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9i
b2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9DT1BZLCB1c2Vy
QWdlbnQsIHN0cmxlbih1c2VyQWdlbnQpKTsKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfY29t
cGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHNvdXBf
bWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7Ci19Ci0K
LXZvaWQgYmVmb3JlQWxsKCkKLXsKLSAgICBnU2VydmVyID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIo
KTsKLSAgICBnU2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2spOwotCi0gICAgVGVzdDo6YWRkKCJX
ZWJLaXRTZXR0aW5ncyIsICJ3ZWJraXQtc2V0dGluZ3MiLCB0ZXN0V2ViS2l0U2V0dGluZ3MpOwot
ICAgIFRlc3Q6OmFkZCgiV2ViS2l0U2V0dGluZ3MiLCAibmV3LXdpdGgtc2V0dGluZ3MiLCB0ZXN0
V2ViS2l0U2V0dGluZ3NOZXdXaXRoU2V0dGluZ3MpOwotICAgIFdlYlZpZXdUZXN0OjphZGQoIldl
YktpdFNldHRpbmdzIiwgInVzZXItYWdlbnQiLCB0ZXN0V2ViS2l0U2V0dGluZ3NVc2VyQWdlbnQp
OwotfQotCi12b2lkIGFmdGVyQWxsKCkKLXsKLSAgICBkZWxldGUgZ1NlcnZlcjsKLX0KLQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktp
dFZlcnNpb24uY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVz
dFdlYktpdFZlcnNpb24uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzQ3ZmY5
NjIyMDBkYmQyNDQ5OTNmNTIxZDJkMTYzYzEyYWQyM2MzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL1Rlc3RXZWJLaXRWZXJzaW9uLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLQotI2luY2x1ZGUgIlRlc3RNYWluLmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2lu
Y2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgotCi0KLXN0YXRpYyB2b2lkIHRlc3RXZWJLaXRWZXJz
aW9uKFRlc3QqLCBnY29uc3Rwb2ludGVyKQotewotICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0
X2dldF9tYWpvcl92ZXJzaW9uKCksID09LCBXRUJLSVRfTUFKT1JfVkVSU0lPTik7Ci0gICAgZ19h
c3NlcnRfY21wdWludCh3ZWJraXRfZ2V0X21pbm9yX3ZlcnNpb24oKSwgPT0sIFdFQktJVF9NSU5P
Ul9WRVJTSU9OKTsKLSAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9nZXRfbWljcm9fdmVyc2lv
bigpLCA9PSwgV0VCS0lUX01JQ1JPX1ZFUlNJT04pOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2Vi
S2l0Q2hlY2tWZXJzaW9uKFRlc3QqLCBnY29uc3Rwb2ludGVyKQotewotICAgIGdfYXNzZXJ0KFdF
QktJVF9DSEVDS19WRVJTSU9OKFdFQktJVF9NQUpPUl9WRVJTSU9OLCBXRUJLSVRfTUlOT1JfVkVS
U0lPTiwgV0VCS0lUX01JQ1JPX1ZFUlNJT04pKTsKLSAgICBnX2Fzc2VydCghV0VCS0lUX0NIRUNL
X1ZFUlNJT04oV0VCS0lUX01BSk9SX1ZFUlNJT04gKyAxLCBXRUJLSVRfTUlOT1JfVkVSU0lPTiwg
V0VCS0lUX01JQ1JPX1ZFUlNJT04pKTsKLSAgICBnX2Fzc2VydCghV0VCS0lUX0NIRUNLX1ZFUlNJ
T04oV0VCS0lUX01BSk9SX1ZFUlNJT04sIFdFQktJVF9NSU5PUl9WRVJTSU9OICsgMSwgV0VCS0lU
X01JQ1JPX1ZFUlNJT04pKTsKLSAgICBnX2Fzc2VydCghV0VCS0lUX0NIRUNLX1ZFUlNJT04oV0VC
S0lUX01BSk9SX1ZFUlNJT04sIFdFQktJVF9NSU5PUl9WRVJTSU9OLCBXRUJLSVRfTUlDUk9fVkVS
U0lPTiArIDEpKTsKLX0KLQotdm9pZCBiZWZvcmVBbGwoKQotewotICAgIFRlc3Q6OmFkZCgiV2Vi
S2l0VmVyc2lvbiIsICJ2ZXJzaW9uIiwgdGVzdFdlYktpdFZlcnNpb24pOwotICAgIFRlc3Q6OmFk
ZCgiV2ViS2l0VmVyc2lvbiIsICJjaGVjay12ZXJzaW9uIiwgdGVzdFdlYktpdENoZWNrVmVyc2lv
bik7Ci19Ci0KLXZvaWQgYWZ0ZXJBbGwoKQotewotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYkNvbnRleHQuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYkNvbnRleHQu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzBmNDA2N2M1MTRjNjRkMmRhNTZk
ZDRkZjk0NzhkOTYyMTM1ZDIyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJL
aXRXZWJDb250ZXh0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQyNSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNp
bmNsdWRlICJMb2FkVHJhY2tpbmdUZXN0LmgiCi0jaW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5o
IgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdDIuaD4KLSNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4K
LSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nSGFzaC5oPgotCi1zdGF0aWMgV2ViS2l0VGVzdFNlcnZlcioga1NlcnZlcjsKLQotc3RhdGlj
IHZvaWQgdGVzdFdlYkNvbnRleHREZWZhdWx0KFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17
Ci0gICAgLy8gQ2hlY2sgdGhlcmUncyBhIHNpbmdsZSBpbnN0YW5jZSBvZiB0aGUgZGVmYXVsdCB3
ZWIgY29udGV4dC4KLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQo
KSA9PSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSk7Ci19Ci0KLWNsYXNzIFBsdWdp
bnNUZXN0OiBwdWJsaWMgVGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVS
RShQbHVnaW5zVGVzdCk7Ci0KLSAgICBQbHVnaW5zVGVzdCgpCi0gICAgICAgIDogbV9jb250ZXh0
KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpKQotICAgICAgICAsIG1fbWFpbkxvb3Ao
Z19tYWluX2xvb3BfbmV3KDAsIFRSVUUpKQotICAgICAgICAsIG1fcGx1Z2lucygwKQotICAgIHsK
LSAgICAgICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF9hZGRpdGlvbmFsX3BsdWdpbnNfZGlyZWN0
b3J5KG1fY29udGV4dCwgV0VCS0lUX1RFU1RfUExVR0lOX0RJUik7Ci0gICAgfQotCi0gICAgflBs
dWdpbnNUZXN0KCkKLSAgICB7Ci0gICAgICAgIGdfbWFpbl9sb29wX3VucmVmKG1fbWFpbkxvb3Ap
OwotICAgICAgICBnX2xpc3RfZnJlZV9mdWxsKG1fcGx1Z2lucywgZ19vYmplY3RfdW5yZWYpOwot
ICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGdldFBsdWdpbnNBc3luY1JlYWR5Q2FsbGJhY2soR09i
amVjdCosIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBQbHVnaW5zVGVzdCogdGVzdCkKLSAgICB7Ci0g
ICAgICAgIHRlc3QtPm1fcGx1Z2lucyA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfcGx1Z2luc19m
aW5pc2godGVzdC0+bV9jb250ZXh0LCByZXN1bHQsIDApOwotICAgICAgICBnX21haW5fbG9vcF9x
dWl0KHRlc3QtPm1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIEdMaXN0KiBnZXRQbHVnaW5zKCkK
LSAgICB7Ci0gICAgICAgIGdfbGlzdF9mcmVlX2Z1bGwobV9wbHVnaW5zLCBnX29iamVjdF91bnJl
Zik7Ci0gICAgICAgIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfcGx1Z2lucyhtX2NvbnRleHQsIDAs
IHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4oZ2V0UGx1Z2luc0FzeW5jUmVh
ZHlDYWxsYmFjayksIHRoaXMpOwotICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7
Ci0gICAgICAgIHJldHVybiBtX3BsdWdpbnM7Ci0gICAgfQotCi0gICAgV2ViS2l0V2ViQ29udGV4
dCogbV9jb250ZXh0OwotICAgIEdNYWluTG9vcCogbV9tYWluTG9vcDsKLSAgICBHTGlzdCogbV9w
bHVnaW5zOwotfTsKLQotc3RhdGljIHZvaWQgdGVzdFdlYkNvbnRleHRHZXRQbHVnaW5zKFBsdWdp
bnNUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIEdMaXN0KiBwbHVnaW5zID0gdGVz
dC0+Z2V0UGx1Z2lucygpOwotICAgIGdfYXNzZXJ0KHBsdWdpbnMpOwotCi0gICAgR1JlZlB0cjxX
ZWJLaXRQbHVnaW4+IHRlc3RQbHVnaW47Ci0gICAgZm9yIChHTGlzdCogaXRlbSA9IHBsdWdpbnM7
IGl0ZW07IGl0ZW0gPSBnX2xpc3RfbmV4dChpdGVtKSkgewotICAgICAgICBXZWJLaXRQbHVnaW4q
IHBsdWdpbiA9IFdFQktJVF9QTFVHSU4oaXRlbS0+ZGF0YSk7Ci0gICAgICAgIHRlc3QtPmFzc2Vy
dE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QocGx1Z2luKSk7Ci0gICAg
ICAgIGlmICghZ19zdHJjbXAwKHdlYmtpdF9wbHVnaW5fZ2V0X25hbWUocGx1Z2luKSwgIldlYktp
dCBUZXN0IFBsdWdJbiIpKSB7Ci0gICAgICAgICAgICB0ZXN0UGx1Z2luID0gcGx1Z2luOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZ19hc3NlcnQoV0VCS0lUX0lT
X1BMVUdJTih0ZXN0UGx1Z2luLmdldCgpKSk7Ci0KLSAgICBHT3duUHRyPGNoYXI+IHBsdWdpblBh
dGgoZ19idWlsZF9maWxlbmFtZShXRUJLSVRfVEVTVF9QTFVHSU5fRElSLCAibGliVGVzdE5ldHNj
YXBlUGx1Z2luLnNvIiwgTlVMTCkpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfcGx1Z2lu
X2dldF9wYXRoKHRlc3RQbHVnaW4uZ2V0KCkpLCA9PSwgcGx1Z2luUGF0aC5nZXQoKSk7Ci0gICAg
Z19hc3NlcnRfY21wc3RyKHdlYmtpdF9wbHVnaW5fZ2V0X2Rlc2NyaXB0aW9uKHRlc3RQbHVnaW4u
Z2V0KCkpLCA9PSwgIlNpbXBsZSBOZXRzY2FwZcKuIHBsdWctaW4gdGhhdCBoYW5kbGVzIHRlc3Qg
Y29udGVudCBmb3IgV2ViS2l0Iik7Ci0gICAgR0xpc3QqIG1pbWVJbmZvTGlzdCA9IHdlYmtpdF9w
bHVnaW5fZ2V0X21pbWVfaW5mb19saXN0KHRlc3RQbHVnaW4uZ2V0KCkpOwotICAgIGdfYXNzZXJ0
KG1pbWVJbmZvTGlzdCk7Ci0gICAgZ19hc3NlcnRfY21wdWludChnX2xpc3RfbGVuZ3RoKG1pbWVJ
bmZvTGlzdCksID09LCAyKTsKLQotICAgIFdlYktpdE1pbWVJbmZvKiBtaW1lSW5mbyA9IHN0YXRp
Y19jYXN0PFdlYktpdE1pbWVJbmZvKj4obWltZUluZm9MaXN0LT5kYXRhKTsKLSAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X21pbWVfaW5mb19nZXRfbWltZV90eXBlKG1pbWVJbmZvKSwgPT0sICJp
bWFnZS9wbmciKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X21pbWVfaW5mb19nZXRfZGVz
Y3JpcHRpb24obWltZUluZm8pLCA9PSwgInBuZyBpbWFnZSIpOwotICAgIGNvbnN0IGdjaGFyKiBj
b25zdCogZXh0ZW5zaW9ucyA9IHdlYmtpdF9taW1lX2luZm9fZ2V0X2V4dGVuc2lvbnMobWltZUlu
Zm8pOwotICAgIGdfYXNzZXJ0KGV4dGVuc2lvbnMpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihleHRl
bnNpb25zWzBdLCA9PSwgInBuZyIpOwotCi0gICAgbWltZUluZm9MaXN0ID0gZ19saXN0X25leHQo
bWltZUluZm9MaXN0KTsKLSAgICBtaW1lSW5mbyA9IHN0YXRpY19jYXN0PFdlYktpdE1pbWVJbmZv
Kj4obWltZUluZm9MaXN0LT5kYXRhKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X21pbWVf
aW5mb19nZXRfbWltZV90eXBlKG1pbWVJbmZvKSwgPT0sICJhcHBsaWNhdGlvbi94LXdlYmtpdC10
ZXN0LW5ldHNjYXBlIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9taW1lX2luZm9fZ2V0
X2Rlc2NyaXB0aW9uKG1pbWVJbmZvKSwgPT0sICJ0ZXN0IG5ldHNjYXBlIGNvbnRlbnQiKTsKLSAg
ICBleHRlbnNpb25zID0gd2Via2l0X21pbWVfaW5mb19nZXRfZXh0ZW5zaW9ucyhtaW1lSW5mbyk7
Ci0gICAgZ19hc3NlcnQoZXh0ZW5zaW9ucyk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKGV4dGVuc2lv
bnNbMF0sID09LCAidGVzdG5ldHNjYXBlIik7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBrQmFy
SFRNTCA9ICI8aHRtbD48Ym9keT5CYXI8L2JvZHk+PC9odG1sPiI7Ci1zdGF0aWMgY29uc3QgY2hh
cioga0VjaG9IVE1MRm9ybWF0ID0gIjxodG1sPjxib2R5PiVzPC9ib2R5PjwvaHRtbD4iOwotc3Rh
dGljIGNvbnN0IGNoYXIqIGVycm9yRG9tYWluID0gInRlc3QiOwotc3RhdGljIGNvbnN0IGludCBl
cnJvckNvZGUgPSAxMDsKLXN0YXRpYyBjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2UgPSAiRXJyb3Ig
bWVzc2FnZS4iOwotCi1jbGFzcyBVUklTY2hlbWVUZXN0OiBwdWJsaWMgTG9hZFRyYWNraW5nVGVz
dCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShVUklTY2hlbWVUZXN0KTsK
LQotICAgIHN0cnVjdCBVUklTY2hlbWVIYW5kbGVyIHsKLSAgICAgICAgVVJJU2NoZW1lSGFuZGxl
cigpCi0gICAgICAgICAgICA6IHJlcGx5TGVuZ3RoKDApCi0gICAgICAgIHsKLSAgICAgICAgfQot
Ci0gICAgICAgIFVSSVNjaGVtZUhhbmRsZXIoY29uc3QgY2hhciogcmVwbHksIGludCByZXBseUxl
bmd0aCwgY29uc3QgY2hhciogbWltZVR5cGUpCi0gICAgICAgICAgICA6IHJlcGx5KHJlcGx5KQot
ICAgICAgICAgICAgLCByZXBseUxlbmd0aChyZXBseUxlbmd0aCkKLSAgICAgICAgICAgICwgbWlt
ZVR5cGUobWltZVR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIENTdHJpbmcg
cmVwbHk7Ci0gICAgICAgIGludCByZXBseUxlbmd0aDsKLSAgICAgICAgQ1N0cmluZyBtaW1lVHlw
ZTsKLSAgICB9OwotCi0gICAgc3RhdGljIHZvaWQgdXJpU2NoZW1lUmVxdWVzdENhbGxiYWNrKFdl
YktpdFVSSVNjaGVtZVJlcXVlc3QqIHJlcXVlc3QsIGdwb2ludGVyIHVzZXJEYXRhKQotICAgIHsK
LSAgICAgICAgVVJJU2NoZW1lVGVzdCogdGVzdCA9IHN0YXRpY19jYXN0PFVSSVNjaGVtZVRlc3Qq
Pih1c2VyRGF0YSk7Ci0gICAgICAgIHRlc3QtPm1fdXJpU2NoZW1lUmVxdWVzdCA9IHJlcXVlc3Q7
Ci0gICAgICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19P
QkpFQ1QocmVxdWVzdCkpOwotCi0gICAgICAgIGdfYXNzZXJ0KHdlYmtpdF91cmlfc2NoZW1lX3Jl
cXVlc3RfZ2V0X3dlYl92aWV3KHJlcXVlc3QpID09IHRlc3QtPm1fd2ViVmlldyk7Ci0KLSAgICAg
ICAgR1JlZlB0cjxHSW5wdXRTdHJlYW0+IGlucHV0U3RyZWFtID0gYWRvcHRHUmVmKGdfbWVtb3J5
X2lucHV0X3N0cmVhbV9uZXcoKSk7Ci0gICAgICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRl
ZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QoaW5wdXRTdHJlYW0uZ2V0KCkpKTsKLQotICAgICAg
ICBjb25zdCBjaGFyKiBzY2hlbWUgPSB3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dldF9zY2hl
bWUocmVxdWVzdCk7Ci0gICAgICAgIGdfYXNzZXJ0KHNjaGVtZSk7Ci0gICAgICAgIGdfYXNzZXJ0
KHRlc3QtPm1faGFuZGxlcnNNYXAuY29udGFpbnMoU3RyaW5nOjpmcm9tVVRGOChzY2hlbWUpKSk7
Ci0KLSAgICAgICAgaWYgKCFnX3N0cmNtcDAoc2NoZW1lLCAiZXJyb3IiKSkgewotICAgICAgICAg
ICAgR093blB0cjxHRXJyb3I+IGVycm9yKGdfZXJyb3JfbmV3X2xpdGVyYWwoZ19xdWFya19mcm9t
X3N0cmluZyhlcnJvckRvbWFpbiksIGVycm9yQ29kZSwgZXJyb3JNZXNzYWdlKSk7Ci0gICAgICAg
ICAgICB3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2ZpbmlzaF9lcnJvcihyZXF1ZXN0LCBlcnJv
ci5nZXQoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBjb25z
dCBVUklTY2hlbWVIYW5kbGVyJiBoYW5kbGVyID0gdGVzdC0+bV9oYW5kbGVyc01hcC5nZXQoU3Ry
aW5nOjpmcm9tVVRGOChzY2hlbWUpKTsKLQotICAgICAgICBpZiAoIWdfc3RyY21wMChzY2hlbWUs
ICJlY2hvIikpIHsKLSAgICAgICAgICAgIGNoYXIqIHJlcGx5SFRNTCA9IGdfc3RyZHVwX3ByaW50
ZihoYW5kbGVyLnJlcGx5LmRhdGEoKSwgd2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9nZXRfcGF0
aChyZXF1ZXN0KSk7Ci0gICAgICAgICAgICBnX21lbW9yeV9pbnB1dF9zdHJlYW1fYWRkX2RhdGEo
R19NRU1PUllfSU5QVVRfU1RSRUFNKGlucHV0U3RyZWFtLmdldCgpKSwgcmVwbHlIVE1MLCBzdHJs
ZW4ocmVwbHlIVE1MKSwgZ19mcmVlKTsKLSAgICAgICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKHNj
aGVtZSwgImNsb3NlZCIpKQotICAgICAgICAgICAgZ19pbnB1dF9zdHJlYW1fY2xvc2UoaW5wdXRT
dHJlYW0uZ2V0KCksIDAsIDApOwotICAgICAgICBlbHNlIGlmICghaGFuZGxlci5yZXBseS5pc051
bGwoKSkKLSAgICAgICAgICAgIGdfbWVtb3J5X2lucHV0X3N0cmVhbV9hZGRfZGF0YShHX01FTU9S
WV9JTlBVVF9TVFJFQU0oaW5wdXRTdHJlYW0uZ2V0KCkpLCBoYW5kbGVyLnJlcGx5LmRhdGEoKSwg
aGFuZGxlci5yZXBseS5sZW5ndGgoKSwgMCk7Ci0KLSAgICAgICAgd2Via2l0X3VyaV9zY2hlbWVf
cmVxdWVzdF9maW5pc2gocmVxdWVzdCwgaW5wdXRTdHJlYW0uZ2V0KCksIGhhbmRsZXIucmVwbHlM
ZW5ndGgsIGhhbmRsZXIubWltZVR5cGUuZGF0YSgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlZ2lz
dGVyVVJJU2NoZW1lSGFuZGxlcihjb25zdCBjaGFyKiBzY2hlbWUsIGNvbnN0IGNoYXIqIHJlcGx5
LCBpbnQgcmVwbHlMZW5ndGgsIGNvbnN0IGNoYXIqIG1pbWVUeXBlKQotICAgIHsKLSAgICAgICAg
bV9oYW5kbGVyc01hcC5zZXQoU3RyaW5nOjpmcm9tVVRGOChzY2hlbWUpLCBVUklTY2hlbWVIYW5k
bGVyKHJlcGx5LCByZXBseUxlbmd0aCwgbWltZVR5cGUpKTsKLSAgICAgICAgd2Via2l0X3dlYl9j
b250ZXh0X3JlZ2lzdGVyX3VyaV9zY2hlbWUod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0
KCksIHNjaGVtZSwgdXJpU2NoZW1lUmVxdWVzdENhbGxiYWNrLCB0aGlzLCAwKTsKLSAgICB9Ci0K
LSAgICBHUmVmUHRyPFdlYktpdFVSSVNjaGVtZVJlcXVlc3Q+IG1fdXJpU2NoZW1lUmVxdWVzdDsK
LSAgICBIYXNoTWFwPFN0cmluZywgVVJJU2NoZW1lSGFuZGxlcj4gbV9oYW5kbGVyc01hcDsKLX07
Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJDb250ZXh0VVJJU2NoZW1lKFVSSVNjaGVtZVRlc3QqIHRl
c3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+cmVnaXN0ZXJVUklTY2hlbWVIYW5kbGVy
KCJmb28iLCBrQmFySFRNTCwgc3RybGVuKGtCYXJIVE1MKSwgInRleHQvaHRtbCIpOwotICAgIHRl
c3QtPmxvYWRVUkkoImZvbzpibGFuayIpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hl
ZCgpOwotICAgIHNpemVfdCBtYWluUmVzb3VyY2VEYXRhU2l6ZSA9IDA7Ci0gICAgY29uc3QgY2hh
ciogbWFpblJlc291cmNlRGF0YSA9IHRlc3QtPm1haW5SZXNvdXJjZURhdGEobWFpblJlc291cmNl
RGF0YVNpemUpOwotICAgIGdfYXNzZXJ0X2NtcGludChtYWluUmVzb3VyY2VEYXRhU2l6ZSwgPT0s
IHN0cmxlbihrQmFySFRNTCkpOwotICAgIGdfYXNzZXJ0KCFzdHJuY21wKG1haW5SZXNvdXJjZURh
dGEsIGtCYXJIVE1MLCBtYWluUmVzb3VyY2VEYXRhU2l6ZSkpOwotCi0gICAgdGVzdC0+cmVnaXN0
ZXJVUklTY2hlbWVIYW5kbGVyKCJlY2hvIiwga0VjaG9IVE1MRm9ybWF0LCAtMSwgInRleHQvaHRt
bCIpOwotICAgIHRlc3QtPmxvYWRVUkkoImVjaG86aGVsbG8gd29ybGQiKTsKLSAgICB0ZXN0LT53
YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBHT3duUHRyPGNoYXI+IGVjaG9IVE1MKGdfc3Ry
ZHVwX3ByaW50ZihrRWNob0hUTUxGb3JtYXQsIHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0
X3BhdGgodGVzdC0+bV91cmlTY2hlbWVSZXF1ZXN0LmdldCgpKSkpOwotICAgIG1haW5SZXNvdXJj
ZURhdGFTaXplID0gMDsKLSAgICBtYWluUmVzb3VyY2VEYXRhID0gdGVzdC0+bWFpblJlc291cmNl
RGF0YShtYWluUmVzb3VyY2VEYXRhU2l6ZSk7Ci0gICAgZ19hc3NlcnRfY21waW50KG1haW5SZXNv
dXJjZURhdGFTaXplLCA9PSwgc3RybGVuKGVjaG9IVE1MLmdldCgpKSk7Ci0gICAgZ19hc3NlcnQo
IXN0cm5jbXAobWFpblJlc291cmNlRGF0YSwgZWNob0hUTUwuZ2V0KCksIG1haW5SZXNvdXJjZURh
dGFTaXplKSk7Ci0KLSAgICB0ZXN0LT5yZWdpc3RlclVSSVNjaGVtZUhhbmRsZXIoIm5vbWltZSIs
IGtCYXJIVE1MLCAtMSwgMCk7Ci0gICAgdGVzdC0+bV9sb2FkRXZlbnRzLmNsZWFyKCk7Ci0gICAg
dGVzdC0+bG9hZFVSSSgibm9taW1lOmZvbyBiYXIiKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2Fk
RmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX2xvYWRFdmVudHMuY29udGFpbnMoTG9h
ZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkRmFpbGVkKSk7Ci0KLSAgICB0ZXN0LT5yZWdp
c3RlclVSSVNjaGVtZUhhbmRsZXIoImVtcHR5IiwgMCwgMCwgInRleHQvaHRtbCIpOwotICAgIHRl
c3QtPm1fbG9hZEV2ZW50cy5jbGVhcigpOwotICAgIHRlc3QtPmxvYWRVUkkoImVtcHR5Om5vdGhp
bmciKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLSAgICBnX2Fzc2VydCgh
dGVzdC0+bV9sb2FkRXZlbnRzLmNvbnRhaW5zKExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFs
TG9hZEZhaWxlZCkpOwotICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX2xvYWRFdmVudHMuY29udGFpbnMo
TG9hZFRyYWNraW5nVGVzdDo6TG9hZEZhaWxlZCkpOwotCi0gICAgdGVzdC0+cmVnaXN0ZXJVUklT
Y2hlbWVIYW5kbGVyKCJlcnJvciIsIDAsIDAsIDApOwotICAgIHRlc3QtPm1fbG9hZEV2ZW50cy5j
bGVhcigpOwotICAgIHRlc3QtPmxvYWRVUkkoImVycm9yOmVycm9yIik7Ci0gICAgdGVzdC0+d2Fp
dFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV9sb2FkRXZlbnRzLmNv
bnRhaW5zKExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZEZhaWxlZCkpOwotICAgIGdf
YXNzZXJ0KHRlc3QtPm1fbG9hZEZhaWxlZCk7Ci0gICAgZ19hc3NlcnRfZXJyb3IodGVzdC0+bV9l
cnJvci5nZXQoKSwgZ19xdWFya19mcm9tX3N0cmluZyhlcnJvckRvbWFpbiksIGVycm9yQ29kZSk7
Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPm1fZXJyb3ItPm1lc3NhZ2UsID09LCBlcnJvck1l
c3NhZ2UpOwotCi0gICAgdGVzdC0+cmVnaXN0ZXJVUklTY2hlbWVIYW5kbGVyKCJjbG9zZWQiLCAw
LCAwLCAwKTsKLSAgICB0ZXN0LT5tX2xvYWRFdmVudHMuY2xlYXIoKTsKLSAgICB0ZXN0LT5sb2Fk
VVJJKCJjbG9zZWQ6aW5wdXQtc3RyZWFtIik7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlz
aGVkKCk7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV9sb2FkRXZlbnRzLmNvbnRhaW5zKExvYWRUcmFj
a2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZEZhaWxlZCkpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1f
bG9hZEZhaWxlZCk7Ci0gICAgZ19hc3NlcnRfZXJyb3IodGVzdC0+bV9lcnJvci5nZXQoKSwgR19J
T19FUlJPUiwgR19JT19FUlJPUl9DTE9TRUQpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViQ29u
dGV4dFNwZWxsQ2hlY2tlcihUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIFdlYktp
dFdlYkNvbnRleHQqIHdlYkNvbnRleHQgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQo
KTsKLQotICAgIC8vIENoZWNrIHdoYXQgaGFwcGVucyBpZiBubyBzcGVsbCBjaGVja2luZyBsYW5n
dWFnZSBoYXMgYmVlbiBzZXQuCi0gICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBjdXJyZW50TGFuZ3Vh
Z2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyh3ZWJD
b250ZXh0KTsKLSAgICBnX2Fzc2VydCghY3VycmVudExhbmd1YWdlKTsKLQotICAgIC8vIFNldCB0
aGUgbGFuZ3VhZ2UgdG8gYSBzcGVjaWZpYyBvbmUuCi0gICAgR1JlZlB0cjxHUHRyQXJyYXk+IGxh
bmd1YWdlcyA9IGFkb3B0R1JlZihnX3B0cl9hcnJheV9uZXcoKSk7Ci0gICAgZ19wdHJfYXJyYXlf
YWRkKGxhbmd1YWdlcy5nZXQoKSwgY29uc3RfY2FzdDxncG9pbnRlcj4oc3RhdGljX2Nhc3Q8Y29u
c3Qgdm9pZCo+KCJlbl9VUyIpKSk7Ci0gICAgZ19wdHJfYXJyYXlfYWRkKGxhbmd1YWdlcy5nZXQo
KSwgMCk7Ci0gICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF9zcGVsbF9jaGVja2luZ19sYW5ndWFn
ZXMod2ViQ29udGV4dCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKiBjb25zdCo+KGxhbmd1
YWdlcy0+cGRhdGEpKTsKLSAgICBjdXJyZW50TGFuZ3VhZ2UgPSB3ZWJraXRfd2ViX2NvbnRleHRf
Z2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyh3ZWJDb250ZXh0KTsKLSAgICBnX2Fzc2VydF9j
bXB1aW50KGdfc3Rydl9sZW5ndGgoY29uc3RfY2FzdDxjaGFyKio+KGN1cnJlbnRMYW5ndWFnZSkp
LCA9PSwgMSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKGN1cnJlbnRMYW5ndWFnZVswXSwgPT0sICJl
bl9VUyIpOwotCi0gICAgLy8gU2V0IHRoZSBsYW5ndWFnZSBzdHJpbmcgdG8gbGlzdCBvZiB2YWxp
ZCBsYW5ndWFnZXMuCi0gICAgZ19wdHJfYXJyYXlfcmVtb3ZlX2luZGV4X2Zhc3QobGFuZ3VhZ2Vz
LmdldCgpLCBsYW5ndWFnZXMtPmxlbiAtIDEpOwotICAgIGdfcHRyX2FycmF5X2FkZChsYW5ndWFn
ZXMuZ2V0KCksIGNvbnN0X2Nhc3Q8Z3BvaW50ZXI+KHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqPigi
ZW5fR0IiKSkpOwotICAgIGdfcHRyX2FycmF5X2FkZChsYW5ndWFnZXMuZ2V0KCksIDApOwotICAg
IHdlYmtpdF93ZWJfY29udGV4dF9zZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKHdlYkNvbnRl
eHQsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhciogY29uc3QqPihsYW5ndWFnZXMtPnBkYXRh
KSk7Ci0gICAgY3VycmVudExhbmd1YWdlID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9zcGVsbF9j
aGVja2luZ19sYW5ndWFnZXMod2ViQ29udGV4dCk7Ci0gICAgZ19hc3NlcnRfY21wdWludChnX3N0
cnZfbGVuZ3RoKGNvbnN0X2Nhc3Q8Y2hhcioqPihjdXJyZW50TGFuZ3VhZ2UpKSwgPT0sIDIpOwot
ICAgIGdfYXNzZXJ0X2NtcHN0cihjdXJyZW50TGFuZ3VhZ2VbMF0sID09LCAiZW5fVVMiKTsKLSAg
ICBnX2Fzc2VydF9jbXBzdHIoY3VycmVudExhbmd1YWdlWzFdLCA9PSwgImVuX0dCIik7Ci0KLSAg
ICAvLyBUcnkgcGFzc2luZyBhIHdyb25nIGxhbmd1YWdlIGFsb25nIHdpdGggZ29vZCBvbmVzLgot
ICAgIGdfcHRyX2FycmF5X3JlbW92ZV9pbmRleF9mYXN0KGxhbmd1YWdlcy5nZXQoKSwgbGFuZ3Vh
Z2VzLT5sZW4gLSAxKTsKLSAgICBnX3B0cl9hcnJheV9hZGQobGFuZ3VhZ2VzLmdldCgpLCBjb25z
dF9jYXN0PGdwb2ludGVyPihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4oImJkX1dSIikpKTsKLSAg
ICBnX3B0cl9hcnJheV9hZGQobGFuZ3VhZ2VzLmdldCgpLCAwKTsKLSAgICB3ZWJraXRfd2ViX2Nv
bnRleHRfc2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyh3ZWJDb250ZXh0LCByZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIqIGNvbnN0Kj4obGFuZ3VhZ2VzLT5wZGF0YSkpOwotICAgIGN1cnJl
bnRMYW5ndWFnZSA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3Vh
Z2VzKHdlYkNvbnRleHQpOwotICAgIGdfYXNzZXJ0X2NtcHVpbnQoZ19zdHJ2X2xlbmd0aChjb25z
dF9jYXN0PGNoYXIqKj4oY3VycmVudExhbmd1YWdlKSksID09LCAyKTsKLSAgICBnX2Fzc2VydF9j
bXBzdHIoY3VycmVudExhbmd1YWdlWzBdLCA9PSwgImVuX1VTIik7Ci0gICAgZ19hc3NlcnRfY21w
c3RyKGN1cnJlbnRMYW5ndWFnZVsxXSwgPT0sICJlbl9HQiIpOwotCi0gICAgLy8gVHJ5IHBhc3Np
bmcgYSBsaXN0IHdpdGggb25seSB3cm9uZyBsYW5ndWFnZXMuCi0gICAgbGFuZ3VhZ2VzID0gYWRv
cHRHUmVmKGdfcHRyX2FycmF5X25ldygpKTsKLSAgICBnX3B0cl9hcnJheV9hZGQobGFuZ3VhZ2Vz
LmdldCgpLCBjb25zdF9jYXN0PGdwb2ludGVyPihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4oImJk
X1dSIikpKTsKLSAgICBnX3B0cl9hcnJheV9hZGQobGFuZ3VhZ2VzLmdldCgpLCBjb25zdF9jYXN0
PGdwb2ludGVyPihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4oIndyX0JEIikpKTsKLSAgICBnX3B0
cl9hcnJheV9hZGQobGFuZ3VhZ2VzLmdldCgpLCAwKTsKLSAgICB3ZWJraXRfd2ViX2NvbnRleHRf
c2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyh3ZWJDb250ZXh0LCByZWludGVycHJldF9jYXN0
PGNvbnN0IGNoYXIqIGNvbnN0Kj4obGFuZ3VhZ2VzLT5wZGF0YSkpOwotICAgIGN1cnJlbnRMYW5n
dWFnZSA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3VhZ2VzKHdl
YkNvbnRleHQpOwotICAgIGdfYXNzZXJ0KCFjdXJyZW50TGFuZ3VhZ2UpOwotCi0gICAgLy8gQ2hl
Y2sgZGlzYWJsaW5nIGFuZCByZS1lbmFibGluZyBzcGVsbCBjaGVja2luZy4KLSAgICB3ZWJraXRf
d2ViX2NvbnRleHRfc2V0X3NwZWxsX2NoZWNraW5nX2VuYWJsZWQod2ViQ29udGV4dCwgRkFMU0Up
OwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3NwZWxsX2NoZWNraW5nX2Vu
YWJsZWQod2ViQ29udGV4dCkpOwotICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfc3BlbGxfY2hl
Y2tpbmdfZW5hYmxlZCh3ZWJDb250ZXh0LCBUUlVFKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfd2Vi
X2NvbnRleHRfZ2V0X3NwZWxsX2NoZWNraW5nX2VuYWJsZWQod2ViQ29udGV4dCkpOwotfQotCi1z
dGF0aWMgdm9pZCB0ZXN0V2ViQ29udGV4dExhbmd1YWdlcyhXZWJWaWV3VGVzdCogdGVzdCwgZ2Nv
bnN0cG9pbnRlcikKLXsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogZXhwZWN0ZWREZWZhdWx0TGFu
Z3VhZ2UgPSAiZW4iOwotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgi
LyIpLmRhdGEoKSk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0gICAgc2l6
ZV90IG1haW5SZXNvdXJjZURhdGFTaXplID0gMDsKLSAgICBjb25zdCBjaGFyKiBtYWluUmVzb3Vy
Y2VEYXRhID0gdGVzdC0+bWFpblJlc291cmNlRGF0YShtYWluUmVzb3VyY2VEYXRhU2l6ZSk7Ci0g
ICAgZ19hc3NlcnRfY21wdWludChtYWluUmVzb3VyY2VEYXRhU2l6ZSwgPT0sIHN0cmxlbihleHBl
Y3RlZERlZmF1bHRMYW5ndWFnZSkpOwotICAgIGdfYXNzZXJ0KCFzdHJuY21wKG1haW5SZXNvdXJj
ZURhdGEsIGV4cGVjdGVkRGVmYXVsdExhbmd1YWdlLCBtYWluUmVzb3VyY2VEYXRhU2l6ZSkpOwot
Ci0gICAgR1JlZlB0cjxHUHRyQXJyYXk+IGxhbmd1YWdlcyA9IGFkb3B0R1JlZihnX3B0cl9hcnJh
eV9uZXcoKSk7Ci0gICAgZ19wdHJfYXJyYXlfYWRkKGxhbmd1YWdlcy5nZXQoKSwgY29uc3RfY2Fz
dDxncG9pbnRlcj4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KCJlbiIpKSk7Ci0gICAgZ19wdHJf
YXJyYXlfYWRkKGxhbmd1YWdlcy5nZXQoKSwgY29uc3RfY2FzdDxncG9pbnRlcj4oc3RhdGljX2Nh
c3Q8Y29uc3Qgdm9pZCo+KCJFU19lcyIpKSk7Ci0gICAgZ19wdHJfYXJyYXlfYWRkKGxhbmd1YWdl
cy5nZXQoKSwgY29uc3RfY2FzdDxncG9pbnRlcj4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KCJk
RSIpKSk7Ci0gICAgZ19wdHJfYXJyYXlfYWRkKGxhbmd1YWdlcy5nZXQoKSwgMCk7Ci0gICAgd2Vi
a2l0X3dlYl9jb250ZXh0X3NldF9wcmVmZXJyZWRfbGFuZ3VhZ2VzKHdlYmtpdF93ZWJfY29udGV4
dF9nZXRfZGVmYXVsdCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqIGNvbnN0Kj4obGFu
Z3VhZ2VzLT5wZGF0YSkpOwotCi0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGV4cGVjdGVkTGFuZ3Vh
Z2VzID0gImVuLCBlcy1lcztxPTAuOTAsIGRlO3E9MC44MCI7Ci0gICAgdGVzdC0+bG9hZFVSSShr
U2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIikuZGF0YSgpKTsKLSAgICB0ZXN0LT53YWl0VW50aWxM
b2FkRmluaXNoZWQoKTsKLSAgICBtYWluUmVzb3VyY2VEYXRhU2l6ZSA9IDA7Ci0gICAgbWFpblJl
c291cmNlRGF0YSA9IHRlc3QtPm1haW5SZXNvdXJjZURhdGEobWFpblJlc291cmNlRGF0YVNpemUp
OwotICAgIGdfYXNzZXJ0X2NtcHVpbnQobWFpblJlc291cmNlRGF0YVNpemUsID09LCBzdHJsZW4o
ZXhwZWN0ZWRMYW5ndWFnZXMpKTsKLSAgICBnX2Fzc2VydCghc3RybmNtcChtYWluUmVzb3VyY2VE
YXRhLCBleHBlY3RlZExhbmd1YWdlcywgbWFpblJlc291cmNlRGF0YVNpemUpKTsKLX0KLQotc3Rh
dGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSog
bWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSosIFNvdXBDbGllbnRDb250ZXh0
KiwgZ3BvaW50ZXIpCi17Ci0gICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9H
RVQpIHsKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFU
VVNfTk9UX0lNUExFTUVOVEVEKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChn
X3N0cl9lcXVhbChwYXRoLCAiLyIpKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGFjY2VwdExhbmd1
YWdlID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X29uZShtZXNzYWdlLT5yZXF1ZXN0X2hlYWRl
cnMsICJBY2NlcHQtTGFuZ3VhZ2UiKTsKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMo
bWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOwotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBl
bmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfQ09QWSwgYWNjZXB0TGFuZ3Vh
Z2UsIHN0cmxlbihhY2NlcHRMYW5ndWFnZSkpOwotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9j
b21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKLSAgICB9IGVsc2UKLSAgICAgICAgc291
cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0ZPVU5EKTsKLX0K
LQotY2xhc3MgU2VjdXJpdHlQb2xpY3lUZXN0OiBwdWJsaWMgVGVzdCB7Ci1wdWJsaWM6Ci0gICAg
TUFLRV9HTElCX1RFU1RfRklYVFVSRShTZWN1cml0eVBvbGljeVRlc3QpOwotCi0gICAgZW51bSBT
ZWN1cml0eVBvbGljeSB7Ci0gICAgICAgIExvY2FsID0gMSA8PCAxLAotICAgICAgICBOb0FjY2Vz
cyA9IDEgPDwgMiwKLSAgICAgICAgRGlzcGxheUlzb2xhdGVkID0gMSA8PCAzLAotICAgICAgICBT
ZWN1cmUgPSAxIDw8IDQsCi0gICAgICAgIENPUlNFbmFibGVkID0gMSA8PCA1LAotICAgICAgICBF
bXB0eURvY3VtZW50ID0gMSA8PCA2Ci0gICAgfTsKLQotICAgIFNlY3VyaXR5UG9saWN5VGVzdCgp
Ci0gICAgICAgIDogbV9tYW5hZ2VyKHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc2VjdXJpdHlfbWFu
YWdlcih3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSkpCi0gICAgewotICAgIH0KLQot
ICAgIHZvaWQgdmVyaWZ5VGhhdFNjaGVtZU1hdGNoZXNQb2xpY3koY29uc3QgY2hhciogc2NoZW1l
LCB1bnNpZ25lZCBwb2xpY3kpCi0gICAgewotICAgICAgICBpZiAocG9saWN5ICYgTG9jYWwpCi0g
ICAgICAgICAgICBnX2Fzc2VydCh3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl91cmlfc2NoZW1lX2lz
X2xvY2FsKG1fbWFuYWdlciwgc2NoZW1lKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGdf
YXNzZXJ0KCF3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl91cmlfc2NoZW1lX2lzX2xvY2FsKG1fbWFu
YWdlciwgc2NoZW1lKSk7Ci0gICAgICAgIGlmIChwb2xpY3kgJiBOb0FjY2VzcykKLSAgICAgICAg
ICAgIGdfYXNzZXJ0KHdlYmtpdF9zZWN1cml0eV9tYW5hZ2VyX3VyaV9zY2hlbWVfaXNfbm9fYWNj
ZXNzKG1fbWFuYWdlciwgc2NoZW1lKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl91cmlfc2NoZW1lX2lzX25vX2FjY2VzcyhtX21h
bmFnZXIsIHNjaGVtZSkpOwotICAgICAgICBpZiAocG9saWN5ICYgRGlzcGxheUlzb2xhdGVkKQot
ICAgICAgICAgICAgZ19hc3NlcnQod2Via2l0X3NlY3VyaXR5X21hbmFnZXJfdXJpX3NjaGVtZV9p
c19kaXNwbGF5X2lzb2xhdGVkKG1fbWFuYWdlciwgc2NoZW1lKSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl91cmlfc2NoZW1lX2lz
X2Rpc3BsYXlfaXNvbGF0ZWQobV9tYW5hZ2VyLCBzY2hlbWUpKTsKLSAgICAgICAgaWYgKHBvbGlj
eSAmIFNlY3VyZSkKLSAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9zZWN1cml0eV9tYW5hZ2Vy
X3VyaV9zY2hlbWVfaXNfc2VjdXJlKG1fbWFuYWdlciwgc2NoZW1lKSk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl91cmlfc2NoZW1l
X2lzX3NlY3VyZShtX21hbmFnZXIsIHNjaGVtZSkpOwotICAgICAgICBpZiAocG9saWN5ICYgQ09S
U0VuYWJsZWQpCi0gICAgICAgICAgICBnX2Fzc2VydCh3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl91
cmlfc2NoZW1lX2lzX2NvcnNfZW5hYmxlZChtX21hbmFnZXIsIHNjaGVtZSkpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X3NlY3VyaXR5X21hbmFnZXJfdXJpX3Nj
aGVtZV9pc19jb3JzX2VuYWJsZWQobV9tYW5hZ2VyLCBzY2hlbWUpKTsKLSAgICAgICAgaWYgKHBv
bGljeSAmIEVtcHR5RG9jdW1lbnQpCi0gICAgICAgICAgICBnX2Fzc2VydCh3ZWJraXRfc2VjdXJp
dHlfbWFuYWdlcl91cmlfc2NoZW1lX2lzX2VtcHR5X2RvY3VtZW50KG1fbWFuYWdlciwgc2NoZW1l
KSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2VjdXJpdHlf
bWFuYWdlcl91cmlfc2NoZW1lX2lzX2VtcHR5X2RvY3VtZW50KG1fbWFuYWdlciwgc2NoZW1lKSk7
Ci0gICAgfQotCi0gICAgV2ViS2l0U2VjdXJpdHlNYW5hZ2VyKiBtX21hbmFnZXI7Ci19OwotCi1z
dGF0aWMgdm9pZCB0ZXN0V2ViQ29udGV4dFNlY3VyaXR5UG9saWN5KFNlY3VyaXR5UG9saWN5VGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICAvLyBWZXJpZnlUaGF0U2NoZW1lTWF0Y2hl
c1BvbGljeSBkZWZhdWx0IHBvbGljeSBmb3Igd2VsbCBrbm93biBzY2hlbWVzLgotICAgIHRlc3Qt
PnZlcmlmeVRoYXRTY2hlbWVNYXRjaGVzUG9saWN5KCJodHRwIiwgU2VjdXJpdHlQb2xpY3lUZXN0
OjpDT1JTRW5hYmxlZCk7Ci0gICAgdGVzdC0+dmVyaWZ5VGhhdFNjaGVtZU1hdGNoZXNQb2xpY3ko
Imh0dHBzIiwgU2VjdXJpdHlQb2xpY3lUZXN0OjpDT1JTRW5hYmxlZCB8IFNlY3VyaXR5UG9saWN5
VGVzdDo6U2VjdXJlKTsKLSAgICB0ZXN0LT52ZXJpZnlUaGF0U2NoZW1lTWF0Y2hlc1BvbGljeSgi
ZmlsZSIsIFNlY3VyaXR5UG9saWN5VGVzdDo6TG9jYWwpOwotICAgIHRlc3QtPnZlcmlmeVRoYXRT
Y2hlbWVNYXRjaGVzUG9saWN5KCJkYXRhIiwgU2VjdXJpdHlQb2xpY3lUZXN0OjpOb0FjY2VzcyB8
IFNlY3VyaXR5UG9saWN5VGVzdDo6U2VjdXJlKTsKLSAgICB0ZXN0LT52ZXJpZnlUaGF0U2NoZW1l
TWF0Y2hlc1BvbGljeSgiYWJvdXQiLCBTZWN1cml0eVBvbGljeVRlc3Q6Ok5vQWNjZXNzIHwgU2Vj
dXJpdHlQb2xpY3lUZXN0OjpTZWN1cmUgfCBTZWN1cml0eVBvbGljeVRlc3Q6OkVtcHR5RG9jdW1l
bnQpOwotCi0gICAgLy8gQ3VzdG9tIHNjaGVtZS4KLSAgICB0ZXN0LT52ZXJpZnlUaGF0U2NoZW1l
TWF0Y2hlc1BvbGljeSgiZm9vIiwgMCk7Ci0KLSAgICB3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl9y
ZWdpc3Rlcl91cmlfc2NoZW1lX2FzX2xvY2FsKHRlc3QtPm1fbWFuYWdlciwgImZvbyIpOwotICAg
IHRlc3QtPnZlcmlmeVRoYXRTY2hlbWVNYXRjaGVzUG9saWN5KCJmb28iLCBTZWN1cml0eVBvbGlj
eVRlc3Q6OkxvY2FsKTsKLSAgICB3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl9yZWdpc3Rlcl91cmlf
c2NoZW1lX2FzX25vX2FjY2Vzcyh0ZXN0LT5tX21hbmFnZXIsICJmb28iKTsKLSAgICB0ZXN0LT52
ZXJpZnlUaGF0U2NoZW1lTWF0Y2hlc1BvbGljeSgiZm9vIiwgU2VjdXJpdHlQb2xpY3lUZXN0OjpM
b2NhbCB8IFNlY3VyaXR5UG9saWN5VGVzdDo6Tm9BY2Nlc3MpOwotICAgIHdlYmtpdF9zZWN1cml0
eV9tYW5hZ2VyX3JlZ2lzdGVyX3VyaV9zY2hlbWVfYXNfZGlzcGxheV9pc29sYXRlZCh0ZXN0LT5t
X21hbmFnZXIsICJmb28iKTsKLSAgICB0ZXN0LT52ZXJpZnlUaGF0U2NoZW1lTWF0Y2hlc1BvbGlj
eSgiZm9vIiwgU2VjdXJpdHlQb2xpY3lUZXN0OjpMb2NhbCB8IFNlY3VyaXR5UG9saWN5VGVzdDo6
Tm9BY2Nlc3MgfCBTZWN1cml0eVBvbGljeVRlc3Q6OkRpc3BsYXlJc29sYXRlZCk7Ci0gICAgd2Vi
a2l0X3NlY3VyaXR5X21hbmFnZXJfcmVnaXN0ZXJfdXJpX3NjaGVtZV9hc19zZWN1cmUodGVzdC0+
bV9tYW5hZ2VyLCAiZm9vIik7Ci0gICAgdGVzdC0+dmVyaWZ5VGhhdFNjaGVtZU1hdGNoZXNQb2xp
Y3koImZvbyIsIFNlY3VyaXR5UG9saWN5VGVzdDo6TG9jYWwgfCBTZWN1cml0eVBvbGljeVRlc3Q6
Ok5vQWNjZXNzIHwgU2VjdXJpdHlQb2xpY3lUZXN0OjpEaXNwbGF5SXNvbGF0ZWQgfCBTZWN1cml0
eVBvbGljeVRlc3Q6OlNlY3VyZSk7Ci0gICAgd2Via2l0X3NlY3VyaXR5X21hbmFnZXJfcmVnaXN0
ZXJfdXJpX3NjaGVtZV9hc19jb3JzX2VuYWJsZWQodGVzdC0+bV9tYW5hZ2VyLCAiZm9vIik7Ci0g
ICAgdGVzdC0+dmVyaWZ5VGhhdFNjaGVtZU1hdGNoZXNQb2xpY3koImZvbyIsIFNlY3VyaXR5UG9s
aWN5VGVzdDo6TG9jYWwgfCBTZWN1cml0eVBvbGljeVRlc3Q6Ok5vQWNjZXNzIHwgU2VjdXJpdHlQ
b2xpY3lUZXN0OjpEaXNwbGF5SXNvbGF0ZWQgfCBTZWN1cml0eVBvbGljeVRlc3Q6OlNlY3VyZQot
ICAgICAgICAgICAgICAgIHwgU2VjdXJpdHlQb2xpY3lUZXN0OjpDT1JTRW5hYmxlZCk7Ci0gICAg
d2Via2l0X3NlY3VyaXR5X21hbmFnZXJfcmVnaXN0ZXJfdXJpX3NjaGVtZV9hc19lbXB0eV9kb2N1
bWVudCh0ZXN0LT5tX21hbmFnZXIsICJmb28iKTsKLSAgICB0ZXN0LT52ZXJpZnlUaGF0U2NoZW1l
TWF0Y2hlc1BvbGljeSgiZm9vIiwgU2VjdXJpdHlQb2xpY3lUZXN0OjpMb2NhbCB8IFNlY3VyaXR5
UG9saWN5VGVzdDo6Tm9BY2Nlc3MgfCBTZWN1cml0eVBvbGljeVRlc3Q6OkRpc3BsYXlJc29sYXRl
ZCB8IFNlY3VyaXR5UG9saWN5VGVzdDo6U2VjdXJlCi0gICAgICAgICAgICAgICAgfCBTZWN1cml0
eVBvbGljeVRlc3Q6OkNPUlNFbmFibGVkIHwgU2VjdXJpdHlQb2xpY3lUZXN0OjpFbXB0eURvY3Vt
ZW50KTsKLX0KLQotdm9pZCBiZWZvcmVBbGwoKQotewotICAgIGtTZXJ2ZXIgPSBuZXcgV2ViS2l0
VGVzdFNlcnZlcigpOwotICAgIGtTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFjayk7Ci0KLSAgICBU
ZXN0OjphZGQoIldlYktpdFdlYkNvbnRleHQiLCAiZGVmYXVsdC1jb250ZXh0IiwgdGVzdFdlYkNv
bnRleHREZWZhdWx0KTsKLSAgICBQbHVnaW5zVGVzdDo6YWRkKCJXZWJLaXRXZWJDb250ZXh0Iiwg
ImdldC1wbHVnaW5zIiwgdGVzdFdlYkNvbnRleHRHZXRQbHVnaW5zKTsKLSAgICBVUklTY2hlbWVU
ZXN0OjphZGQoIldlYktpdFdlYkNvbnRleHQiLCAidXJpLXNjaGVtZSIsIHRlc3RXZWJDb250ZXh0
VVJJU2NoZW1lKTsKLSAgICBUZXN0OjphZGQoIldlYktpdFdlYkNvbnRleHQiLCAic3BlbGwtY2hl
Y2tlciIsIHRlc3RXZWJDb250ZXh0U3BlbGxDaGVja2VyKTsKLSAgICBXZWJWaWV3VGVzdDo6YWRk
KCJXZWJLaXRXZWJDb250ZXh0IiwgImxhbmd1YWdlcyIsIHRlc3RXZWJDb250ZXh0TGFuZ3VhZ2Vz
KTsKLSAgICBTZWN1cml0eVBvbGljeVRlc3Q6OmFkZCgiV2ViS2l0U2VjdXJpdHlNYW5hZ2VyIiwg
InNlY3VyaXR5LXBvbGljeSIsIHRlc3RXZWJDb250ZXh0U2VjdXJpdHlQb2xpY3kpOwotfQotCi12
b2lkIGFmdGVyQWxsKCkKLXsKLSAgICBkZWxldGUga1NlcnZlcjsKLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJW
aWV3LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDcwYjBhMjdmOTM2MjRkNGVi
NGM4ZjYwMzI3Zjc2YTBkYzgxMmRhNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0
V2ViS2l0V2ViVmlldy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2MDggKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIldlYlZpZXdUZXN0LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdS
ZWYuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1ZhbHVlUmVmLmg+Ci0jaW5jbHVkZSA8
Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Ci0KLXN0YXRp
YyB2b2lkIHRlc3RXZWJWaWV3RGVmYXVsdENvbnRleHQoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25z
dHBvaW50ZXIpCi17Ci0gICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KHRl
c3QtPm1fd2ViVmlldykgPT0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCkpOwotCi0g
ICAgLy8gQ2hlY2sgdGhhdCBhIHdlYiB2aWV3IGNyZWF0ZWQgd2l0aCBnX29iamVjdF9uZXcgaGFz
IHRoZSBkZWZhdWx0IGNvbnRleHQuCi0gICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3PiB3ZWJWaWV3
ID0gV0VCS0lUX1dFQl9WSUVXKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfVklFVywgTlVM
TCkpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dCh3ZWJWaWV3Lmdl
dCgpKSA9PSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSk7Ci19Ci0KLXN0YXRpYyB2
b2lkIHRlc3RXZWJWaWV3Q3VzdG9tQ2hhcnNldChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9p
bnRlcikKLXsKLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2dldF9jdXN0b21fY2hhcnNl
dCh0ZXN0LT5tX3dlYlZpZXcpKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X2N1c3RvbV9jaGFy
c2V0KHRlc3QtPm1fd2ViVmlldywgInV0ZjgiKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0
X3dlYl92aWV3X2dldF9jdXN0b21fY2hhcnNldCh0ZXN0LT5tX3dlYlZpZXcpLCA9PSwgInV0Zjgi
KTsKLSAgICAvLyBHbyBiYWNrIHRvIHRoZSBkZWZhdWx0IGNoYXJzZXQuCi0gICAgd2Via2l0X3dl
Yl92aWV3X3NldF9jdXN0b21fY2hhcnNldCh0ZXN0LT5tX3dlYlZpZXcsIDApOwotICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfZ2V0X2N1c3RvbV9jaGFyc2V0KHRlc3QtPm1fd2ViVmlldykp
OwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1NldHRpbmdzKFdlYlZpZXdUZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQotewotICAgIFdlYktpdFNldHRpbmdzKiBkZWZhdWx0U2V0dGluZ3Mg
PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHRlc3QtPm1fd2ViVmlldyk7Ci0gICAgZ19h
c3NlcnQoZGVmYXVsdFNldHRpbmdzKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0
X2VuYWJsZV9qYXZhc2NyaXB0KGRlZmF1bHRTZXR0aW5ncykpOwotCi0gICAgR1JlZlB0cjxXZWJL
aXRTZXR0aW5ncz4gbmV3U2V0dGluZ3MgPSBhZG9wdEdSZWYod2Via2l0X3NldHRpbmdzX25ldygp
KTsKLSAgICBnX29iamVjdF9zZXQoR19PQkpFQ1QobmV3U2V0dGluZ3MuZ2V0KCkpLCAiZW5hYmxl
LWphdmFzY3JpcHQiLCBGQUxTRSwgTlVMTCk7Ci0gICAgd2Via2l0X3dlYl92aWV3X3NldF9zZXR0
aW5ncyh0ZXN0LT5tX3dlYlZpZXcsIG5ld1NldHRpbmdzLmdldCgpKTsKLQotICAgIFdlYktpdFNl
dHRpbmdzKiBzZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3ModGVzdC0+bV93
ZWJWaWV3KTsKLSAgICBnX2Fzc2VydChzZXR0aW5ncyAhPSBkZWZhdWx0U2V0dGluZ3MpOwotICAg
IGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9qYXZhc2NyaXB0KHNldHRpbmdz
KSk7Ci0KLSAgICBHUmVmUHRyPEd0a1dpZGdldD4gd2ViVmlldzIgPSB3ZWJraXRfd2ViX3ZpZXdf
bmV3KCk7Ci0gICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhH
X09CSkVDVCh3ZWJWaWV3Mi5nZXQoKSkpOwotICAgIHdlYmtpdF93ZWJfdmlld19zZXRfc2V0dGlu
Z3MoV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcyLmdldCgpKSwgc2V0dGluZ3MpOwotICAgIGdfYXNz
ZXJ0KHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3MoV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcy
LmdldCgpKSkgPT0gc2V0dGluZ3MpOwotCi0gICAgR1JlZlB0cjxXZWJLaXRTZXR0aW5ncz4gbmV3
U2V0dGluZ3MyID0gYWRvcHRHUmVmKHdlYmtpdF9zZXR0aW5nc19uZXcoKSk7Ci0gICAgd2Via2l0
X3dlYl92aWV3X3NldF9zZXR0aW5ncyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldzIuZ2V0KCkpLCBu
ZXdTZXR0aW5nczIuZ2V0KCkpOwotICAgIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9z
ZXR0aW5ncyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldzIuZ2V0KCkpKTsKLSAgICBnX2Fzc2VydChz
ZXR0aW5ncyA9PSBuZXdTZXR0aW5nczIuZ2V0KCkpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0
aW5nc19nZXRfZW5hYmxlX2phdmFzY3JpcHQoc2V0dGluZ3MpKTsKLX0KLQotc3RhdGljIHZvaWQg
dGVzdFdlYlZpZXdab29tTGV2ZWwoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17
Ci0gICAgZ19hc3NlcnRfY21wZmxvYXQod2Via2l0X3dlYl92aWV3X2dldF96b29tX2xldmVsKHRl
c3QtPm1fd2ViVmlldyksID09LCAxKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X3pvb21fbGV2
ZWwodGVzdC0+bV93ZWJWaWV3LCAyLjUpOwotICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHdlYmtpdF93
ZWJfdmlld19nZXRfem9vbV9sZXZlbCh0ZXN0LT5tX3dlYlZpZXcpLCA9PSwgMi41KTsKLQotICAg
IHdlYmtpdF9zZXR0aW5nc19zZXRfem9vbV90ZXh0X29ubHkod2Via2l0X3dlYl92aWV3X2dldF9z
ZXR0aW5ncyh0ZXN0LT5tX3dlYlZpZXcpLCBUUlVFKTsKLSAgICAvLyBUaGUgem9vbSBsZXZlbCBz
aG91bGRuJ3QgY2hhbmdlIHdoZW4gem9vbS10ZXh0LW9ubHkgc2V0dGluZyBjaGFuZ2VzLgotICAg
IGdfYXNzZXJ0X2NtcGZsb2F0KHdlYmtpdF93ZWJfdmlld19nZXRfem9vbV9sZXZlbCh0ZXN0LT5t
X3dlYlZpZXcpLCA9PSwgMi41KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdSdW5KYXZh
U2NyaXB0KFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBodG1sID0gIjxodG1sPjxib2R5PjxhIGlkPSdXZWJLaXRMaW5rJyBocmVmPSdo
dHRwOi8vd3d3LndlYmtpdGd0ay5vcmcvJyB0aXRsZT0nV2ViS2l0R1RLKyBUaXRsZSc+V2ViS2l0
R1RLKyBXZWJzaXRlPC9hPjwvYm9keT48L2h0bWw+IjsKLSAgICB0ZXN0LT5sb2FkSHRtbChodG1s
LCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIEdPd25QdHI8
R0Vycm9yPiBlcnJvcjsKLSAgICBXZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBqYXZhc2NyaXB0UmVz
dWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJ3aW5kb3cuZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1dlYktpdExpbmsnKS50aXRsZTsiLCAmZXJyb3Iub3V0UHRy
KCkpOwotICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOwotICAgIGdfYXNzZXJ0KCFlcnJv
ci5nZXQoKSk7Ci0gICAgR093blB0cjxjaGFyPiB2YWx1ZVN0cmluZyhXZWJWaWV3VGVzdDo6amF2
YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnRf
Y21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgIldlYktpdEdUSysgVGl0bGUiKTsKLQotICAg
IGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNo
ZWQoIndpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnV2ViS2l0TGluaycpLmhyZWY7Iiwg
JmVycm9yLm91dFB0cigpKTsKLSAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBn
X2Fzc2VydCghZXJyb3IuZ2V0KCkpOwotICAgIHZhbHVlU3RyaW5nLnNldChXZWJWaWV3VGVzdDo6
amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7Ci0gICAgZ19hc3Nl
cnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgImh0dHA6Ly93d3cud2Via2l0Z3RrLm9y
Zy8iKTsKLQotICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2Fp
dFVudGlsRmluaXNoZWQoIndpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnV2ViS2l0TGlu
aycpLnRleHRDb250ZW50IiwgJmVycm9yLm91dFB0cigpKTsKLSAgICBnX2Fzc2VydChqYXZhc2Ny
aXB0UmVzdWx0KTsKLSAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOwotICAgIHZhbHVlU3RyaW5n
LnNldChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVz
dWx0KSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgIldlYktp
dEdUSysgV2Vic2l0ZSIpOwotCi0gICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFT
Y3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiYSA9IDI1OyIsICZlcnJvci5vdXRQdHIoKSk7Ci0g
ICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAgZ19hc3NlcnQoIWVycm9yLmdldCgp
KTsKLSAgICBnX2Fzc2VydF9jbXBmbG9hdChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRv
TnVtYmVyKGphdmFzY3JpcHRSZXN1bHQpLCA9PSwgMjUpOwotCi0gICAgamF2YXNjcmlwdFJlc3Vs
dCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiYSA9IDIuNTsiLCAm
ZXJyb3Iub3V0UHRyKCkpOwotICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOwotICAgIGdf
YXNzZXJ0KCFlcnJvci5nZXQoKSk7Ci0gICAgZ19hc3NlcnRfY21wZmxvYXQoV2ViVmlld1Rlc3Q6
OmphdmFzY3JpcHRSZXN1bHRUb051bWJlcihqYXZhc2NyaXB0UmVzdWx0KSwgPT0sIDIuNSk7Ci0K
LSAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZp
bmlzaGVkKCJhID0gdHJ1ZSIsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgZ19hc3NlcnQoamF2YXNj
cmlwdFJlc3VsdCk7Ci0gICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKLSAgICBnX2Fzc2VydChX
ZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQm9vbGVhbihqYXZhc2NyaXB0UmVzdWx0KSk7
Ci0KLSAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRp
bEZpbmlzaGVkKCJhID0gZmFsc2UiLCAmZXJyb3Iub3V0UHRyKCkpOwotICAgIGdfYXNzZXJ0KGph
dmFzY3JpcHRSZXN1bHQpOwotICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7Ci0gICAgZ19hc3Nl
cnQoIVdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9Cb29sZWFuKGphdmFzY3JpcHRSZXN1
bHQpKTsKLQotICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2Fp
dFVudGlsRmluaXNoZWQoImEgPSBudWxsIiwgJmVycm9yLm91dFB0cigpKTsKLSAgICBnX2Fzc2Vy
dChqYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOwotICAgIGdf
YXNzZXJ0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0SXNOdWxsKGphdmFzY3JpcHRSZXN1
bHQpKTsKLQotICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2Fp
dFVudGlsRmluaXNoZWQoImZ1bmN0aW9uIEZvbygpIHsgYSA9IDI1OyB9IEZvbygpOyIsICZlcnJv
ci5vdXRQdHIoKSk7Ci0gICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAgZ19hc3Nl
cnQoIWVycm9yLmdldCgpKTsKLSAgICBnX2Fzc2VydChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJl
c3VsdElzVW5kZWZpbmVkKGphdmFzY3JpcHRSZXN1bHQpKTsKLQotICAgIGphdmFzY3JpcHRSZXN1
bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0RnJvbUdSZXNvdXJjZUFuZFdhaXRVbnRpbEZpbmlzaGVk
KCIvb3JnL3dlYmtpdC93ZWJraXQyZ3RrL3Rlc3RzL2xpbmstdGl0bGUuanMiLCAmZXJyb3Iub3V0
UHRyKCkpOwotICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOwotICAgIGdfYXNzZXJ0KCFl
cnJvci5nZXQoKSk7Ci0gICAgdmFsdWVTdHJpbmcuc2V0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0
UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIo
dmFsdWVTdHJpbmcuZ2V0KCksID09LCAiV2ViS2l0R1RLKyBUaXRsZSIpOwotCi0gICAgamF2YXNj
cmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRGcm9tR1Jlc291cmNlQW5kV2FpdFVudGls
RmluaXNoZWQoIi93cm9uZy9wYXRoL3RvL3Jlc291cmNlLmpzIiwgJmVycm9yLm91dFB0cigpKTsK
LSAgICBnX2Fzc2VydCghamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAgZ19hc3NlcnRfZXJyb3IoZXJy
b3IuZ2V0KCksIEdfUkVTT1VSQ0VfRVJST1IsIEdfUkVTT1VSQ0VfRVJST1JfTk9UX0ZPVU5EKTsK
LSAgICBlcnJvci5jbGVhcigpOwotCi0gICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkph
dmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZm9vKCk7IiwgJmVycm9yLm91dFB0cigpKTsK
LSAgICBnX2Fzc2VydCghamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAgZ19hc3NlcnRfZXJyb3IoZXJy
b3IuZ2V0KCksIFdFQktJVF9KQVZBU0NSSVBUX0VSUk9SLCBXRUJLSVRfSkFWQVNDUklQVF9FUlJP
Ul9TQ1JJUFRfRkFJTEVEKTsKLX0KLQotY2xhc3MgRnVsbFNjcmVlbkNsaWVudFRlc3Q6IHB1Ymxp
YyBXZWJWaWV3VGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShGdWxs
U2NyZWVuQ2xpZW50VGVzdCk7Ci0KLSAgICBlbnVtIEZ1bGxTY3JlZW5FdmVudCB7Ci0gICAgICAg
IE5vbmUsCi0gICAgICAgIEVudGVyLAotICAgICAgICBMZWF2ZQotICAgIH07Ci0KLSAgICBzdGF0
aWMgZ2Jvb2xlYW4gdmlld0VudGVyRnVsbFNjcmVlbkNhbGxiYWNrKFdlYktpdFdlYlZpZXcqLCBG
dWxsU2NyZWVuQ2xpZW50VGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHRlc3QtPm1fZXZlbnQg
PSBFbnRlcjsKLSAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKLSAg
ICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiB2aWV3TGVh
dmVGdWxsU2NyZWVuQ2FsbGJhY2soV2ViS2l0V2ViVmlldyosIEZ1bGxTY3JlZW5DbGllbnRUZXN0
KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+bV9ldmVudCA9IExlYXZlOwotICAgICAgICBn
X21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOwotICAgICAgICByZXR1cm4gRkFMU0U7
Ci0gICAgfQotCi0gICAgRnVsbFNjcmVlbkNsaWVudFRlc3QoKQotICAgICAgICA6IG1fZXZlbnQo
Tm9uZSkKLSAgICB7Ci0gICAgICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX2Z1bGxzY3Jl
ZW4od2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyhtX3dlYlZpZXcpLCBUUlVFKTsKLSAgICAg
ICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJlbnRlci1mdWxsc2NyZWVuIiwgR19DQUxM
QkFDSyh2aWV3RW50ZXJGdWxsU2NyZWVuQ2FsbGJhY2spLCB0aGlzKTsKLSAgICAgICAgZ19zaWdu
YWxfY29ubmVjdChtX3dlYlZpZXcsICJsZWF2ZS1mdWxsc2NyZWVuIiwgR19DQUxMQkFDSyh2aWV3
TGVhdmVGdWxsU2NyZWVuQ2FsbGJhY2spLCB0aGlzKTsKLSAgICB9Ci0KLSAgICB+RnVsbFNjcmVl
bkNsaWVudFRlc3QoKQotICAgIHsKLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVj
dF9tYXRjaGVkKG1fd2ViVmlldywgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhp
cyk7Ci0gICAgfQotCi0gICAgdm9pZCByZXF1ZXN0RnVsbFNjcmVlbkFuZFdhaXRVbnRpbEVudGVy
ZWRGdWxsU2NyZWVuKCkKLSAgICB7Ci0gICAgICAgIG1fZXZlbnQgPSBOb25lOwotICAgICAgICB3
ZWJraXRfd2ViX3ZpZXdfcnVuX2phdmFzY3JpcHQobV93ZWJWaWV3LCAiZG9jdW1lbnQuZG9jdW1l
bnRFbGVtZW50LndlYmtpdFJlcXVlc3RGdWxsU2NyZWVuKCk7IiwgMCwgMCwgMCk7Ci0gICAgICAg
IGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZ2Jvb2xl
YW4gbGVhdmVGdWxsU2NyZWVuSWRsZShGdWxsU2NyZWVuQ2xpZW50VGVzdCogdGVzdCkKLSAgICB7
Ci0gICAgICAgIHRlc3QtPmtleVN0cm9rZShHREtfS0VZX0VzY2FwZSk7Ci0gICAgICAgIHJldHVy
biBGQUxTRTsKLSAgICB9Ci0KLSAgICB2b2lkIGxlYXZlRnVsbFNjcmVlbkFuZFdhaXRVbnRpbExl
ZnRGdWxsU2NyZWVuKCkKLSAgICB7Ci0gICAgICAgIG1fZXZlbnQgPSBOb25lOwotICAgICAgICBn
X2lkbGVfYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KGxlYXZlRnVsbFNjcmVlbklk
bGUpLCB0aGlzKTsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotICAgIH0K
LQotICAgIEZ1bGxTY3JlZW5FdmVudCBtX2V2ZW50OwotfTsKLQotc3RhdGljIHZvaWQgdGVzdFdl
YlZpZXdGdWxsU2NyZWVuKEZ1bGxTY3JlZW5DbGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVy
KQotewotICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOwotICAgIHRl
c3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keT5GdWxsU2NyZWVuIHRlc3Q8L2JvZHk+PC9odG1sPiIs
IDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIHRlc3QtPnJlcXVl
c3RGdWxsU2NyZWVuQW5kV2FpdFVudGlsRW50ZXJlZEZ1bGxTY3JlZW4oKTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQodGVzdC0+bV9ldmVudCwgPT0sIEZ1bGxTY3JlZW5DbGllbnRUZXN0OjpFbnRlcik7
Ci0gICAgdGVzdC0+bGVhdmVGdWxsU2NyZWVuQW5kV2FpdFVudGlsTGVmdEZ1bGxTY3JlZW4oKTsK
LSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9ldmVudCwgPT0sIEZ1bGxTY3JlZW5DbGllbnRU
ZXN0OjpMZWF2ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3Q2FuU2hvd01JTUVUeXBl
KFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIC8vIFN1cHBvcnRlZCBN
SU1FIHR5cGVzLgotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19jYW5fc2hvd19taW1lX3R5
cGUodGVzdC0+bV93ZWJWaWV3LCAidGV4dC9odG1sIikpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF93
ZWJfdmlld19jYW5fc2hvd19taW1lX3R5cGUodGVzdC0+bV93ZWJWaWV3LCAidGV4dC9wbGFpbiIp
KTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfY2FuX3Nob3dfbWltZV90eXBlKHRlc3Qt
Pm1fd2ViVmlldywgImltYWdlL2pwZWciKSk7Ci0KLSAgICAvLyBVbnN1cHBvcnRlZCBNSU1FIHR5
cGVzLgotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX3Nob3dfbWltZV90eXBlKHRl
c3QtPm1fd2ViVmlldywgInRleHQvdmNhcmQiKSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJf
dmlld19jYW5fc2hvd19taW1lX3R5cGUodGVzdC0+bV93ZWJWaWV3LCAiYXBwbGljYXRpb24vcGRm
IikpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX3Nob3dfbWltZV90eXBlKHRl
c3QtPm1fd2ViVmlldywgImFwcGxpY2F0aW9uL3ppcCIpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0
X3dlYl92aWV3X2Nhbl9zaG93X21pbWVfdHlwZSh0ZXN0LT5tX3dlYlZpZXcsICJhcHBsaWNhdGlv
bi9vY3RldC1zdHJlYW0iKSk7Ci0KLSAgICAvLyBQbHVnaW5zIGFyZSBvbmx5IHN1cHBvcnRlZCB3
aGVuIGVuYWJsZWQuCi0gICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF9hZGRpdGlvbmFsX3BsdWdp
bnNfZGlyZWN0b3J5KHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dCh0ZXN0LT5tX3dlYlZpZXcp
LCBXRUJLSVRfVEVTVF9QTFVHSU5fRElSKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdf
Y2FuX3Nob3dfbWltZV90eXBlKHRlc3QtPm1fd2ViVmlldywgImFwcGxpY2F0aW9uL3gtd2Via2l0
LXRlc3QtbmV0c2NhcGUiKSk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfcGx1Z2lu
cyh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHRlc3QtPm1fd2ViVmlldyksIEZBTFNFKTsK
LSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9zaG93X21pbWVfdHlwZSh0ZXN0LT5t
X3dlYlZpZXcsICJhcHBsaWNhdGlvbi94LXdlYmtpdC10ZXN0LW5ldHNjYXBlIikpOwotfQotCi1j
bGFzcyBGb3JtQ2xpZW50VGVzdDogcHVibGljIFdlYlZpZXdUZXN0IHsKLXB1YmxpYzoKLSAgICBN
QUtFX0dMSUJfVEVTVF9GSVhUVVJFKEZvcm1DbGllbnRUZXN0KTsKLQotICAgIHN0YXRpYyB2b2lk
IHN1Ym1pdEZvcm1DYWxsYmFjayhXZWJLaXRXZWJWaWV3KiwgV2ViS2l0Rm9ybVN1Ym1pc3Npb25S
ZXF1ZXN0KiByZXF1ZXN0LCBGb3JtQ2xpZW50VGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHRl
c3QtPnN1Ym1pdEZvcm0ocmVxdWVzdCk7Ci0gICAgfQotCi0gICAgRm9ybUNsaWVudFRlc3QoKQot
ICAgICAgICA6IG1fc3VibWl0UG9zaXRpb25YKDApCi0gICAgICAgICwgbV9zdWJtaXRQb3NpdGlv
blkoMCkKLSAgICB7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAic3VibWl0
LWZvcm0iLCBHX0NBTExCQUNLKHN1Ym1pdEZvcm1DYWxsYmFjayksIHRoaXMpOwotICAgIH0KLQot
ICAgIH5Gb3JtQ2xpZW50VGVzdCgpCi0gICAgewotICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19k
aXNjb25uZWN0X21hdGNoZWQobV93ZWJWaWV3LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAw
LCAwLCB0aGlzKTsKLSAgICB9Ci0KLSAgICB2b2lkIHN1Ym1pdEZvcm0oV2ViS2l0Rm9ybVN1Ym1p
c3Npb25SZXF1ZXN0KiByZXF1ZXN0KQotICAgIHsKLSAgICAgICAgYXNzZXJ0T2JqZWN0SXNEZWxl
dGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChyZXF1ZXN0KSk7Ci0gICAgICAgIG1fcmVxdWVz
dCA9IHJlcXVlc3Q7Ci0gICAgICAgIHdlYmtpdF9mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdF9zdWJt
aXQocmVxdWVzdCk7Ci0gICAgICAgIHF1aXRNYWluTG9vcCgpOwotICAgIH0KLQotICAgIEdIYXNo
VGFibGUqIHdhaXRVbnRpbEZvcm1TdWJtaXR0ZWRBbmRHZXRUZXh0RmllbGRzKCkKLSAgICB7Ci0g
ICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAgICAgICAgcmV0dXJuIHdlYmtp
dF9mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdF9nZXRfdGV4dF9maWVsZHMobV9yZXF1ZXN0LmdldCgp
KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZ2Jvb2xlYW4gZG9DbGlja0lkbGVDYWxsYmFjayhGb3Jt
Q2xpZW50VGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIHRlc3QtPmNsaWNrTW91c2VCdXR0b24o
dGVzdC0+bV9zdWJtaXRQb3NpdGlvblgsIHRlc3QtPm1fc3VibWl0UG9zaXRpb25ZLCAxKTsKLSAg
ICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQotICAgIHZvaWQgc3VibWl0Rm9ybUF0UG9zaXRp
b24oaW50IHgsIGludCB5KQotICAgIHsKLSAgICAgICAgbV9zdWJtaXRQb3NpdGlvblggPSB4Owot
ICAgICAgICBtX3N1Ym1pdFBvc2l0aW9uWSA9IHk7Ci0gICAgICAgIGdfaWRsZV9hZGQocmVpbnRl
cnByZXRfY2FzdDxHU291cmNlRnVuYz4oZG9DbGlja0lkbGVDYWxsYmFjayksIHRoaXMpOwotICAg
IH0KLQotICAgIGludCBtX3N1Ym1pdFBvc2l0aW9uWDsKLSAgICBpbnQgbV9zdWJtaXRQb3NpdGlv
blk7Ci0gICAgR1JlZlB0cjxXZWJLaXRGb3JtU3VibWlzc2lvblJlcXVlc3Q+IG1fcmVxdWVzdDsK
LX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3U3VibWl0Rm9ybShGb3JtQ2xpZW50VGVzdCog
dGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50
aWxNYXBwZWQoKTsKLQotICAgIGNvbnN0IGNoYXIqIGZvcm1IVE1MID0KLSAgICAgICAgIjxodG1s
Pjxib2R5PiIKLSAgICAgICAgIiA8Zm9ybSBhY3Rpb249JyMnPiIKLSAgICAgICAgIiAgPGlucHV0
IHR5cGU9J3RleHQnIG5hbWU9J3RleHQxJyB2YWx1ZT0ndmFsdWUxJz4iCi0gICAgICAgICIgIDxp
bnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSd0ZXh0MicgdmFsdWU9J3ZhbHVlMic+IgotICAgICAgICAi
ICA8aW5wdXQgdHlwZT0ncGFzc3dvcmQnIG5hbWU9J3Bhc3N3b3JkJyB2YWx1ZT0nc2VjcmV0Jz4i
Ci0gICAgICAgICIgIDx0ZXh0YXJlYSBjb2xzPSc1JyByb3dzPSc1JyBuYW1lPSd0ZXh0YXJlYSc+
VGV4dDwvdGV4dGFyZWE+IgotICAgICAgICAiICA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdo
aWRkZW4xJyB2YWx1ZT0naGlkZGVuMSc+IgotICAgICAgICAiICA8aW5wdXQgdHlwZT0nc3VibWl0
JyB2YWx1ZT0nU3VibWl0JyBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjEn
IHNpemU9JzEwJz4iCi0gICAgICAgICIgPC9mb3JtPiIKLSAgICAgICAgIjwvYm9keT48L2h0bWw+
IjsKLQotICAgIHRlc3QtPmxvYWRIdG1sKGZvcm1IVE1MLCAiZmlsZTovLy8iKTsKLSAgICB0ZXN0
LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIHRlc3QtPnN1Ym1pdEZvcm1BdFBvc2l0
aW9uKDUsIDUpOwotICAgIEdIYXNoVGFibGUqIHZhbHVlcyA9IHRlc3QtPndhaXRVbnRpbEZvcm1T
dWJtaXR0ZWRBbmRHZXRUZXh0RmllbGRzKCk7Ci0gICAgZ19hc3NlcnQodmFsdWVzKTsKLSAgICBn
X2Fzc2VydF9jbXB1aW50KGdfaGFzaF90YWJsZV9zaXplKHZhbHVlcyksID09LCAzKTsKLSAgICBn
X2Fzc2VydF9jbXBzdHIoc3RhdGljX2Nhc3Q8Y2hhcio+KGdfaGFzaF90YWJsZV9sb29rdXAodmFs
dWVzLCAidGV4dDEiKSksID09LCAidmFsdWUxIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHN0YXRp
Y19jYXN0PGNoYXIqPihnX2hhc2hfdGFibGVfbG9va3VwKHZhbHVlcywgInRleHQyIikpLCA9PSwg
InZhbHVlMiIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihzdGF0aWNfY2FzdDxjaGFyKj4oZ19oYXNo
X3RhYmxlX2xvb2t1cCh2YWx1ZXMsICJwYXNzd29yZCIpKSwgPT0sICJzZWNyZXQiKTsKLX0KLQot
Y2xhc3MgU2F2ZVdlYlZpZXdUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3QgewotcHVibGljOgotICAg
IE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoU2F2ZVdlYlZpZXdUZXN0KTsKLQotICAgIFNhdmVXZWJW
aWV3VGVzdCgpCi0gICAgICAgIDogbV90ZW1wRGlyZWN0b3J5KGdfZGlyX21ha2VfdG1wKCJXZWJL
aXQyU2F2ZVZpZXdUZXN0LVhYWFhYWCIsIDApKQotICAgIHsKLSAgICB9Ci0KLSAgICB+U2F2ZVdl
YlZpZXdUZXN0KCkKLSAgICB7Ci0gICAgICAgIGlmIChHX0lTX0ZJTEUobV9maWxlLmdldCgpKSkK
LSAgICAgICAgICAgIGdfZmlsZV9kZWxldGUobV9maWxlLmdldCgpLCAwLCAwKTsKLQotICAgICAg
ICBpZiAoR19JU19JTlBVVF9TVFJFQU0obV9pbnB1dFN0cmVhbS5nZXQoKSkpCi0gICAgICAgICAg
ICBnX2lucHV0X3N0cmVhbV9jbG9zZShtX2lucHV0U3RyZWFtLmdldCgpLCAwLCAwKTsKLQotICAg
ICAgICBpZiAobV90ZW1wRGlyZWN0b3J5KQotICAgICAgICAgICAgZ19ybWRpcihtX3RlbXBEaXJl
Y3RvcnkuZ2V0KCkpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHdlYlZpZXdTYXZlZFRvU3Ry
ZWFtQ2FsbGJhY2soR09iamVjdCogb2JqZWN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgU2F2ZVdl
YlZpZXdUZXN0KiB0ZXN0KQotICAgIHsKLSAgICAgICAgR093blB0cjxHRXJyb3I+IGVycm9yOwot
ICAgICAgICB0ZXN0LT5tX2lucHV0U3RyZWFtID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJfdmlld19z
YXZlX2ZpbmlzaCh0ZXN0LT5tX3dlYlZpZXcsIHJlc3VsdCwgJmVycm9yLm91dFB0cigpKSk7Ci0g
ICAgICAgIGdfYXNzZXJ0KEdfSVNfSU5QVVRfU1RSRUFNKHRlc3QtPm1faW5wdXRTdHJlYW0uZ2V0
KCkpKTsKLSAgICAgICAgZ19hc3NlcnQoIWVycm9yKTsKLQotICAgICAgICB0ZXN0LT5xdWl0TWFp
bkxvb3AoKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCB3ZWJWaWV3U2F2ZWRUb0ZpbGVDYWxs
YmFjayhHT2JqZWN0KiBvYmplY3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBTYXZlV2ViVmlld1Rl
c3QqIHRlc3QpCi0gICAgewotICAgICAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgICAg
IGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19zYXZlX3RvX2ZpbGVfZmluaXNoKHRlc3QtPm1fd2Vi
VmlldywgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpKTsKLSAgICAgICAgZ19hc3NlcnQoIWVycm9y
KTsKLQotICAgICAgICB0ZXN0LT5xdWl0TWFpbkxvb3AoKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNh
dmVBbmRXYWl0Rm9yU3RyZWFtKCkKLSAgICB7Ci0gICAgICAgIHdlYmtpdF93ZWJfdmlld19zYXZl
KG1fd2ViVmlldywgV0VCS0lUX1NBVkVfTU9ERV9NSFRNTCwgMCwgcmVpbnRlcnByZXRfY2FzdDxH
QXN5bmNSZWFkeUNhbGxiYWNrPih3ZWJWaWV3U2F2ZWRUb1N0cmVhbUNhbGxiYWNrKSwgdGhpcyk7
Ci0gICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAgICB9Ci0KLSAgICB2b2lk
IHNhdmVBbmRXYWl0Rm9yRmlsZSgpCi0gICAgewotICAgICAgICBtX3NhdmVEZXN0aW5hdGlvbkZp
bGVQYXRoLnNldChnX2J1aWxkX2ZpbGVuYW1lKG1fdGVtcERpcmVjdG9yeS5nZXQoKSwgInRlc3RX
ZWJWaWV3U2F2ZVJlc3VsdC5taHQiLCBOVUxMKSk7Ci0gICAgICAgIG1fZmlsZSA9IGFkb3B0R1Jl
ZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKG1fc2F2ZURlc3RpbmF0aW9uRmlsZVBhdGguZ2V0KCkpKTsK
LSAgICAgICAgd2Via2l0X3dlYl92aWV3X3NhdmVfdG9fZmlsZShtX3dlYlZpZXcsIG1fZmlsZS5n
ZXQoKSwgV0VCS0lUX1NBVkVfTU9ERV9NSFRNTCwgMCwgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNS
ZWFkeUNhbGxiYWNrPih3ZWJWaWV3U2F2ZWRUb0ZpbGVDYWxsYmFjayksIHRoaXMpOwotICAgICAg
ICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgR093blB0cjxjaGFy
PiBtX3RlbXBEaXJlY3Rvcnk7Ci0gICAgR093blB0cjxjaGFyPiBtX3NhdmVEZXN0aW5hdGlvbkZp
bGVQYXRoOwotICAgIEdSZWZQdHI8R0lucHV0U3RyZWFtPiBtX2lucHV0U3RyZWFtOwotICAgIEdS
ZWZQdHI8R0ZpbGU+IG1fZmlsZTsKLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3U2F2ZShT
YXZlV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgdGVzdC0+bG9hZEh0
bWwoIjxodG1sPiIKLSAgICAgICAgICAgICAgICAgICAiPGJvZHk+IgotICAgICAgICAgICAgICAg
ICAgICIgIDxwPkEgcGFyYWdyYXBoIHdpdGggcGxhaW4gdGV4dDwvcD4iCi0gICAgICAgICAgICAg
ICAgICAgIiAgPHA+IgotICAgICAgICAgICAgICAgICAgICIgICAgQSByZWQgYm94OiA8aW1nIHNy
Yz0nZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBSUFBQUFD
Q0FJQUFBRDkxSnB6QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDNBWVdE
VE1Wd25TWm53QUFBQjFwVkZoMFEyOXRiV1Z1ZEFBQUFBQUFRM0psWVhSbFpDQjNhWFJvSUVkSlRW
QmtMbVVIQUFBQUZrbEVRVlFJMTJQOHo4REF3TURBeE1EQXdNREFBQUFOSFFFREsrbW15QUFBQUFC
SlJVNUVya0pnZ2c9PSc+PC9icj4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBBIGJsdWUgYm94
OiA8aW1nIHNyYz0nZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdB
QUFBSUFBQUFDQ0FJQUFBRDkxSnB6QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JK
VFVVSDNBWVdEVE12QkhoQUxRQUFBQjFwVkZoMFEyOXRiV1Z1ZEFBQUFBQUFRM0psWVhSbFpDQjNh
WFJvSUVkSlRWQmtMbVVIQUFBQUZrbEVRVlFJMTJOazRQblB3TURBeE1EQXdNREFBQUFMcndFUFBJ
czFwZ0FBQUFCSlJVNUVya0pnZ2c9PSc+IgotICAgICAgICAgICAgICAgICAgICIgIDwvcD4iCi0g
ICAgICAgICAgICAgICAgICAgIjwvYm9keT4iCi0gICAgICAgICAgICAgICAgICAgIjwvaHRtbD4i
LCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIC8vIFdyaXRl
IHRvIGEgZmlsZSBhbmQgdG8gYW4gaW5wdXQgc3RyZWFtLgotICAgIHRlc3QtPnNhdmVBbmRXYWl0
Rm9yRmlsZSgpOwotICAgIHRlc3QtPnNhdmVBbmRXYWl0Rm9yU3RyZWFtKCk7Ci0KLSAgICAvLyBX
ZSBzaG91bGQgaGF2ZSBleGFjdGx5IHRoZSBzYW1lIGFtb3VudCBvZiBieXRlcyBpbiB0aGUgZmls
ZQotICAgIC8vIHRoYW4gdGhvc2UgY29taW5nIGZyb20gdGhlIEdJbnB1dFN0cmVhbS4gV2UgZG9u
J3QgY29tcGFyZSB0aGUKLSAgICAvLyBzdHJpbmdzIHJlYWQgc2luY2UgdGhlICdEYXRlJyBmaWVs
ZCBhbmQgdGhlIGJvdW5kYXJpZXMgd2lsbCBiZQotICAgIC8vIGRpZmZlcmVudCBvbiBlYWNoIGNh
c2UuIE1IVE1MIGZ1bmN0aW9uYWxpdHkgd2lsbCBiZSB0ZXN0ZWQgYnkKLSAgICAvLyBMYXlvdXQg
dGVzdHMsIHNvIGNoZWNraW5nIHRoZSBhbW91bnQgb2YgYnl0ZXMgaXMgZW5vdWdoLgotICAgIEdP
d25QdHI8R0Vycm9yPiBlcnJvcjsKLSAgICBnY2hhciBidWZmZXJbNTEyXSA9IHsgMCB9OwotICAg
IGdzc2l6ZSByZWFkQnl0ZXMgPSAwOwotICAgIGdzc2l6ZSB0b3RhbEJ5dGVzRnJvbVN0cmVhbSA9
IDA7Ci0gICAgd2hpbGUgKHJlYWRCeXRlcyA9IGdfaW5wdXRfc3RyZWFtX3JlYWQodGVzdC0+bV9p
bnB1dFN0cmVhbS5nZXQoKSwgJmJ1ZmZlciwgNTEyLCAwLCAmZXJyb3Iub3V0UHRyKCkpKSB7Ci0g
ICAgICAgIGdfYXNzZXJ0KCFlcnJvcik7Ci0gICAgICAgIHRvdGFsQnl0ZXNGcm9tU3RyZWFtICs9
IHJlYWRCeXRlczsKLSAgICB9Ci0KLSAgICAvLyBDaGVjayB0aGF0IHRoZSBmaWxlIGV4aXN0cyBh
bmQgdGhhdCBpdCBjb250YWlucyB0aGUgc2FtZSBhbW91bnQgb2YgYnl0ZXMuCi0gICAgR1JlZlB0
cjxHRmlsZUluZm8+IGZpbGVJbmZvID0gYWRvcHRHUmVmKGdfZmlsZV9xdWVyeV9pbmZvKHRlc3Qt
Pm1fZmlsZS5nZXQoKSwgR19GSUxFX0FUVFJJQlVURV9TVEFOREFSRF9TSVpFLCBzdGF0aWNfY2Fz
dDxHRmlsZVF1ZXJ5SW5mb0ZsYWdzPigwKSwgMCwgMCkpOwotICAgIGdfYXNzZXJ0X2NtcGludChn
X2ZpbGVfaW5mb19nZXRfc2l6ZShmaWxlSW5mby5nZXQoKSksID09LCB0b3RhbEJ5dGVzRnJvbVN0
cmVhbSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3TW9kZShXZWJWaWV3VGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogaW5kZXhIVE1MID0g
IjxodG1sPjxib2R5PjxwPlRlc3QgV2ViIFZpZXcgTW9kZTwvcD48L2JvZHk+PC9odG1sPiI7Ci0K
LSAgICAvLyBXZWIgbW9kZS4KLSAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF93ZWJfdmlld19n
ZXRfdmlld19tb2RlKHRlc3QtPm1fd2ViVmlldyksID09LCBXRUJLSVRfVklFV19NT0RFX1dFQik7
Ci0gICAgdGVzdC0+bG9hZEh0bWwoaW5kZXhIVE1MLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxM
b2FkRmluaXNoZWQoKTsKLSAgICBXZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBqYXZhc2NyaXB0UmVz
dWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJ3aW5kb3cuZG9j
dW1lbnQuYm9keS50ZXh0Q29udGVudDsiLCAwKTsKLSAgICBHT3duUHRyPGNoYXI+IHZhbHVlU3Ry
aW5nKFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1
bHQpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAiVGVzdCBX
ZWIgVmlldyBNb2RlIik7Ci0KLSAgICAvLyBTb3VyY2UgbW9kZS4KLSAgICB3ZWJraXRfd2ViX3Zp
ZXdfc2V0X3ZpZXdfbW9kZSh0ZXN0LT5tX3dlYlZpZXcsIFdFQktJVF9WSUVXX01PREVfU09VUkNF
KTsKLSAgICB0ZXN0LT5sb2FkSHRtbChpbmRleEhUTUwsIDApOwotICAgIHRlc3QtPndhaXRVbnRp
bExvYWRGaW5pc2hlZCgpOwotICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2Ny
aXB0QW5kV2FpdFVudGlsRmluaXNoZWQoIndpbmRvdy5kb2N1bWVudC5ib2R5LnRleHRDb250ZW50
OyIsIDApOwotICAgIHZhbHVlU3RyaW5nLnNldChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3Vs
dFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHZhbHVl
U3RyaW5nLmdldCgpLCA9PSwgaW5kZXhIVE1MKTsKLX0KLQotLy8gVG8gdGVzdCBwYWdlIHZpc2li
aWxpdHkgQVBJLiBDdXJyZW50bHkgb25seSAndmlzaWJsZScgYW5kICdoaWRkZW4nIHN0YXRlcyBh
cmUgaW1wbGVtZW50ZWQgZnVsbHkgaW4gV2ViQ29yZS4KLS8vIFNlZSBhbHNvIGh0dHA6Ly93d3cu
dzMub3JnL1RSLzIwMTEvV0QtcGFnZS12aXNpYmlsaXR5LTIwMTEwNjAyLyBhbmQgaHR0cHM6Ly9k
ZXZlbG9wZXJzLmdvb2dsZS5jb20vY2hyb21lL3doaXRlcGFwZXJzL3BhZ2V2aXNpYmlsaXR5Ci1z
dGF0aWMgdm9pZCB0ZXN0V2ViVmlld1BhZ2VWaXNpYmlsaXR5KFdlYlZpZXdUZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQotewotICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48dGl0bGU+PC90aXRs
ZT4iCi0gICAgICAgICI8Ym9keT48cD5UZXN0IFdlYiBQYWdlIFZpc2liaWxpdHk8L3A+IgotICAg
ICAgICAiPHNjcmlwdD4iCi0gICAgICAgICJkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwidmlz
aWJpbGl0eWNoYW5nZVwiLCBvblZpc2liaWxpdHlDaGFuZ2UsIGZhbHNlKTsiCi0gICAgICAgICJm
dW5jdGlvbiBvblZpc2liaWxpdHlDaGFuZ2UoKSB7IgotICAgICAgICAiICAgIGRvY3VtZW50LnRp
dGxlID0gZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlOyIKLSAgICAgICAgIn0iCi0gICAgICAgICI8
L3NjcmlwdD4iCi0gICAgICAgICI8L2JvZHk+PC9odG1sPiIsCi0gICAgICAgIDApOwotCi0gICAg
Ly8gV2FpdCB1bnRpbGwgdGhlIHBhZ2UgaXMgbG9hZGVkLiBJbml0aWFsIHZpc2liaWxpdHkgc2hv
dWxkIGJlICdoaWRkZW4nLgotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0g
ICAgR093blB0cjxHRXJyb3I+IGVycm9yOwotICAgIFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGph
dmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQo
ImRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZTsiLCAmZXJyb3Iub3V0UHRyKCkpOwotICAgIGdfYXNz
ZXJ0KGphdmFzY3JpcHRSZXN1bHQpOwotICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7Ci0gICAg
R093blB0cjxjaGFyPiB2YWx1ZVN0cmluZyhXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRv
Q1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3Ry
aW5nLmdldCgpLCA9PSwgImhpZGRlbiIpOwotCi0gICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3Qt
PnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQuaGlkZGVuOyIsICZl
cnJvci5vdXRQdHIoKSk7Ci0gICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAgZ19h
c3NlcnQoIWVycm9yLmdldCgpKTsKLSAgICBnX2Fzc2VydChXZWJWaWV3VGVzdDo6amF2YXNjcmlw
dFJlc3VsdFRvQm9vbGVhbihqYXZhc2NyaXB0UmVzdWx0KSk7Ci0KLSAgICAvLyBTaG93IHRoZSBw
YWdlLiBUaGUgdmlzaWJpbGl0eSBzaG91bGQgYmUgdXBkYXRlZCB0byAndmlzaWJsZScuCi0gICAg
dGVzdC0+c2hvd0luV2luZG93KCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsVGl0bGVDaGFuZ2VkKCk7
Ci0KLSAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRp
bEZpbmlzaGVkKCJkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU7IiwgJmVycm9yLm91dFB0cigpKTsK
LSAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBnX2Fzc2VydCghZXJyb3IuZ2V0
KCkpOwotICAgIHZhbHVlU3RyaW5nLnNldChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRv
Q1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3Ry
aW5nLmdldCgpLCA9PSwgInZpc2libGUiKTsKLQotICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0
LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImRvY3VtZW50LmhpZGRlbjsiLCAm
ZXJyb3Iub3V0UHRyKCkpOwotICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOwotICAgIGdf
YXNzZXJ0KCFlcnJvci5nZXQoKSk7Ci0gICAgZ19hc3NlcnQoIVdlYlZpZXdUZXN0OjpqYXZhc2Ny
aXB0UmVzdWx0VG9Cb29sZWFuKGphdmFzY3JpcHRSZXN1bHQpKTsKLQotICAgIC8vIEhpZGUgdGhl
IHBhZ2UuIFRoZSB2aXNpYmlsaXR5IHNob3VsZCBiZSB1cGRhdGVkIHRvICdoaWRkZW4nLgotICAg
IGd0a193aWRnZXRfaGlkZShHVEtfV0lER0VUKHRlc3QtPm1fd2ViVmlldykpOwotICAgIHRlc3Qt
PndhaXRVbnRpbFRpdGxlQ2hhbmdlZCgpOwotCi0gICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3Qt
PnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQudmlzaWJpbGl0eVN0
YXRlOyIsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7
Ci0gICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKLSAgICB2YWx1ZVN0cmluZy5zZXQoV2ViVmll
d1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0NTdHJpbmcoamF2YXNjcmlwdFJlc3VsdCkpOwotICAg
IGdfYXNzZXJ0X2NtcHN0cih2YWx1ZVN0cmluZy5nZXQoKSwgPT0sICJoaWRkZW4iKTsKLQotICAg
IGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNo
ZWQoImRvY3VtZW50LmhpZGRlbjsiLCAmZXJyb3Iub3V0UHRyKCkpOwotICAgIGdfYXNzZXJ0KGph
dmFzY3JpcHRSZXN1bHQpOwotICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7Ci0gICAgZ19hc3Nl
cnQoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0Jvb2xlYW4oamF2YXNjcmlwdFJlc3Vs
dCkpOwotfQotCi1jbGFzcyBTbmFwc2hvdFdlYlZpZXdUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3Qg
ewotcHVibGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoU25hcHNob3RXZWJWaWV3VGVz
dCk7Ci0KLSAgICBzdGF0aWMgdm9pZCBvblNuYXBzaG90Q2FuY2VsbGVkUmVhZHkoV2ViS2l0V2Vi
Vmlldyogd2ViX3ZpZXcsIEdBc3luY1Jlc3VsdCogcmVzLCBTbmFwc2hvdFdlYlZpZXdUZXN0KiB0
ZXN0KQotICAgIHsKLSAgICAgICAgR093blB0cjxHRXJyb3I+IGVycm9yOwotICAgICAgICB0ZXN0
LT5tX3N1cmZhY2UgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NuYXBzaG90X2ZpbmlzaCh3ZWJfdmll
dywgcmVzLCAmZXJyb3Iub3V0UHRyKCkpOwotICAgICAgICBnX2Fzc2VydCghdGVzdC0+bV9zdXJm
YWNlKTsKLSAgICAgICAgZ19hc3NlcnRfZXJyb3IoZXJyb3IuZ2V0KCksIEdfSU9fRVJST1IsIEdf
SU9fRVJST1JfQ0FOQ0VMTEVEKTsKLSAgICAgICAgdGVzdC0+cXVpdE1haW5Mb29wKCk7Ci0gICAg
fQotCi0gICAgZ2Jvb2xlYW4gZ2V0U25hcHNob3RBbmRDYW5jZWwoKQotICAgIHsKLSAgICAgICAg
aWYgKG1fc3VyZmFjZSkKLSAgICAgICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShtX3N1cmZh
Y2UpOwotICAgICAgICBtX3N1cmZhY2UgPSAwOwotICAgICAgICBHUmVmUHRyPEdDYW5jZWxsYWJs
ZT4gY2FuY2VsbGFibGUgPSBhZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSk7Ci0gICAgICAg
IHdlYmtpdF93ZWJfdmlld19nZXRfc25hcHNob3QobV93ZWJWaWV3LCBXRUJLSVRfU05BUFNIT1Rf
UkVHSU9OX1ZJU0lCTEUsIFdFQktJVF9TTkFQU0hPVF9PUFRJT05TX05PTkUsIGNhbmNlbGxhYmxl
LmdldCgpLCByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KG9uU25hcHNob3RD
YW5jZWxsZWRSZWFkeSksIHRoaXMpOwotICAgICAgICBnX2NhbmNlbGxhYmxlX2NhbmNlbChjYW5j
ZWxsYWJsZS5nZXQoKSk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJW
aWV3U25hcHNob3QoU25hcHNob3RXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsK
LSAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHk+PHA+V2hhdGV2ZXI8L3A+PC9ib2R5Pjwv
aHRtbD4iLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIC8v
IFdlYlZpZXcgbm90IHZpc2libGUuCi0gICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlMSA9IHRl
c3QtPmdldFNuYXBzaG90QW5kV2FpdFVudGlsUmVhZHkoV0VCS0lUX1NOQVBTSE9UX1JFR0lPTl9W
SVNJQkxFLCBXRUJLSVRfU05BUFNIT1RfT1BUSU9OU19OT05FKTsKLSAgICBnX2Fzc2VydCghc3Vy
ZmFjZTEpOwotCi0gICAgLy8gU2hvdyBzdXJmYWNlLCByZXNpemUgdG8gNTB4NTAsIHRyeSBhZ2Fp
bi4KLSAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKLSAgICB0ZXN0
LT5yZXNpemVWaWV3KDUwLCA1MCk7Ci0gICAgc3VyZmFjZTEgPSB0ZXN0LT5nZXRTbmFwc2hvdEFu
ZFdhaXRVbnRpbFJlYWR5KFdFQktJVF9TTkFQU0hPVF9SRUdJT05fVklTSUJMRSwgV0VCS0lUX1NO
QVBTSE9UX09QVElPTlNfTk9ORSk7Ci0gICAgZ19hc3NlcnQoc3VyZmFjZTEpOwotCi0gICAgLy8g
b2J0YWluZWQgc3VyZmFjZSBzaG91bGQgYmUgYXQgdGhlIG1vc3QgNTB4NTAuIFN0b3JlIHRoZSBz
aXplCi0gICAgLy8gZm9yIGNvbXBhcmlzb24gbGF0ZXIuCi0gICAgaW50IHdpZHRoID0gY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZTEpOwotICAgIGludCBoZWlnaHQgPSBjYWly
b19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZTEpOwotICAgIGdfYXNzZXJ0X2NtcGlu
dCh3aWR0aCwgPD0sIDUwKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoaGVpZ2h0LCA8PSwgNTApOwot
Ci0gICAgLy8gU2VsZWN0IGFsbCB0ZXh0IGluIHRoZSBXZWJWaWV3LCByZXF1ZXN0IGEgc25hcHNo
b3QgaWdub3Jpbmcgc2VsZWN0aW9uLgotICAgIHRlc3QtPnNlbGVjdEFsbCgpOwotICAgIHN1cmZh
Y2UxID0gY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2UodGVzdC0+Z2V0U25hcHNob3RBbmRXYWl0VW50
aWxSZWFkeShXRUJLSVRfU05BUFNIT1RfUkVHSU9OX1ZJU0lCTEUsIFdFQktJVF9TTkFQU0hPVF9P
UFRJT05TX05PTkUpKTsKLSAgICBnX2Fzc2VydChzdXJmYWNlMSk7Ci0gICAgZ19hc3NlcnRfY21w
aW50KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UxKSwgPT0sIHdpZHRoKTsK
LSAgICBnX2Fzc2VydF9jbXBpbnQoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZh
Y2UxKSwgPT0sIGhlaWdodCk7Ci0KLSAgICAvLyBDcmVhdGUgaWRlbnRpY2FsIHN1cmZhY2UuCi0g
ICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlMiA9IHRlc3QtPmdldFNuYXBzaG90QW5kV2FpdFVu
dGlsUmVhZHkoV0VCS0lUX1NOQVBTSE9UX1JFR0lPTl9WSVNJQkxFLCBXRUJLSVRfU05BUFNIT1Rf
T1BUSU9OU19OT05FKTsKLSAgICBnX2Fzc2VydChzdXJmYWNlMik7Ci0KLSAgICAvLyBDb21wYXJl
IHRoZXNlIHR3bywgdGhleSBzaG91bGQgYmUgaWRlbnRpY2FsLgotICAgIGdfYXNzZXJ0KFRlc3Q6
OmNhaXJvU3VyZmFjZXNFcXVhbChzdXJmYWNlMSwgc3VyZmFjZTIpKTsKLQotICAgIC8vIFJlcXVl
c3QgYSBuZXcgc25hcHNob3QsIGluY2x1ZGluZyB0aGUgc2VsZWN0aW9uIHRoaXMgdGltZS4gVGhl
Ci0gICAgLy8gc2l6ZSBzaG91bGQgYmUgdGhlIHNhbWUgYnV0IHRoZSByZXN1bHQgbXVzdCBiZSBk
aWZmZXJlbnQgdG8gdGhlCi0gICAgLy8gb25lIHByZXZpb3VzbHkgb2J0YWluZWQuCi0gICAgc3Vy
ZmFjZTIgPSB0ZXN0LT5nZXRTbmFwc2hvdEFuZFdhaXRVbnRpbFJlYWR5KFdFQktJVF9TTkFQU0hP
VF9SRUdJT05fVklTSUJMRSwgV0VCS0lUX1NOQVBTSE9UX09QVElPTlNfSU5DTFVERV9TRUxFQ1RJ
T05fSElHSExJR0hUSU5HKTsKLSAgICBnX2Fzc2VydChzdXJmYWNlMik7Ci0gICAgZ19hc3NlcnRf
Y21waW50KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UyKSwgPT0sIHdpZHRo
KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1
cmZhY2UyKSwgPT0sIGhlaWdodCk7Ci0gICAgZ19hc3NlcnQoIVRlc3Q6OmNhaXJvU3VyZmFjZXNF
cXVhbChzdXJmYWNlMSwgc3VyZmFjZTIpKTsKLQotICAgIC8vIFJlcXVlc3QgYSBzbmFwc2hvdCBv
ZiB0aGUgd2hvbGUgZG9jdW1lbnQgaW4gdGhlIFdlYlZpZXcuIFRoZQotICAgIC8vIHJlc3VsdCBz
aG91bGQgYmUgZGlmZmVyZW50IGZyb20gdGhlIHNpemUgb2J0YWluZWQgcHJldmlvdXNseS4KLSAg
ICBzdXJmYWNlMiA9IHRlc3QtPmdldFNuYXBzaG90QW5kV2FpdFVudGlsUmVhZHkoV0VCS0lUX1NO
QVBTSE9UX1JFR0lPTl9GVUxMX0RPQ1VNRU5ULCBXRUJLSVRfU05BUFNIT1RfT1BUSU9OU19OT05F
KTsKLSAgICBnX2Fzc2VydChzdXJmYWNlMik7Ci0gICAgZ19hc3NlcnRfY21waW50KGNhaXJvX2lt
YWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UyKSwgID4sIHdpZHRoKTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UyKSwgPiwgaGVp
Z2h0KTsKLSAgICBnX2Fzc2VydCghVGVzdDo6Y2Fpcm9TdXJmYWNlc0VxdWFsKHN1cmZhY2UxLCBz
dXJmYWNlMikpOwotCi0gICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KHN1cmZhY2UxKTsKLQotICAg
IGdfYXNzZXJ0KHRlc3QtPmdldFNuYXBzaG90QW5kQ2FuY2VsKCkpOwotfQotCi12b2lkIGJlZm9y
ZUFsbCgpCi17Ci0gICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJkZWZhdWx0
LWNvbnRleHQiLCB0ZXN0V2ViVmlld0RlZmF1bHRDb250ZXh0KTsKLSAgICBXZWJWaWV3VGVzdDo6
YWRkKCJXZWJLaXRXZWJWaWV3IiwgImN1c3RvbS1jaGFyc2V0IiwgdGVzdFdlYlZpZXdDdXN0b21D
aGFyc2V0KTsKLSAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInNldHRpbmdz
IiwgdGVzdFdlYlZpZXdTZXR0aW5ncyk7Ci0gICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2Vi
VmlldyIsICJ6b29tLWxldmVsIiwgdGVzdFdlYlZpZXdab29tTGV2ZWwpOwotICAgIFdlYlZpZXdU
ZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAicnVuLWphdmFzY3JpcHQiLCB0ZXN0V2ViVmlld1J1
bkphdmFTY3JpcHQpOwotICAgIEZ1bGxTY3JlZW5DbGllbnRUZXN0OjphZGQoIldlYktpdFdlYlZp
ZXciLCAiZnVsbHNjcmVlbiIsIHRlc3RXZWJWaWV3RnVsbFNjcmVlbik7Ci0gICAgV2ViVmlld1Rl
c3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJjYW4tc2hvdy1taW1lLXR5cGUiLCB0ZXN0V2ViVmll
d0NhblNob3dNSU1FVHlwZSk7Ci0gICAgRm9ybUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmll
dyIsICJzdWJtaXQtZm9ybSIsIHRlc3RXZWJWaWV3U3VibWl0Rm9ybSk7Ci0gICAgU2F2ZVdlYlZp
ZXdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAic2F2ZSIsIHRlc3RXZWJWaWV3U2F2ZSk7Ci0g
ICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJ2aWV3LW1vZGUiLCB0ZXN0V2Vi
Vmlld01vZGUpOwotICAgIFNuYXBzaG90V2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIs
ICJzbmFwc2hvdCIsIHRlc3RXZWJWaWV3U25hcHNob3QpOwotICAgIFdlYlZpZXdUZXN0OjphZGQo
IldlYktpdFdlYlZpZXciLCAicGFnZS12aXNpYmlsaXR5IiwgdGVzdFdlYlZpZXdQYWdlVmlzaWJp
bGl0eSk7Ci19Ci0KLXZvaWQgYWZ0ZXJBbGwoKQotewotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXdHcm91cC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmll
d0dyb3VwLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDI2YzVjNWI5ZThlZmFl
Mjk5OGQyODM2YWQ5MGFjZDQzYWQyNjFkNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9U
ZXN0V2ViS2l0V2ViVmlld0dyb3VwLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIwNiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0KLSNpbmNsdWRlICJXZWJLaXRUZXN0U2VydmVyLmgiCi0jaW5jbHVkZSAiV2ViVmlld1Rl
c3QuaCIKLSNpbmNsdWRlIDxjc3RkYXJnPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRl
IDx3ZWJraXQyL3dlYmtpdDIuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Ci0K
LXN0YXRpYyBXZWJLaXRUZXN0U2VydmVyKiBrU2VydmVyOwotCi0vLyBUaGVzZSBhcmUgYWxsIGhl
cmUgc28gdGhhdCB0aGV5IGNhbiBiZSBjaGFuZ2VkIGVhc2lseSwgaWYgbmVjZXNzYXJ5Lgotc3Rh
dGljIGNvbnN0IGNoYXIqIGtTdHlsZVNoZWV0SFRNTCA9ICI8aHRtbD48ZGl2IGlkPVwic3R5bGVk
RWxlbWVudFwiPlN3ZWV0IHN0eWxleiE8L2Rpdj48L2h0bWw+IjsKLXN0YXRpYyBjb25zdCBjaGFy
KiBrSW5qZWN0ZWRTdHlsZVNoZWV0ID0gIiNzdHlsZWRFbGVtZW50IHsgZm9udC13ZWlnaHQ6IGJv
bGQ7IH0iOwotc3RhdGljIGNvbnN0IGNoYXIqIGtTdHlsZVNoZWV0VGVzdFNjcmlwdCA9ICJnZXRD
b21wdXRlZFN0eWxlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdHlsZWRFbGVtZW50JykpWydm
b250LXdlaWdodCddIjsKLXN0YXRpYyBjb25zdCBjaGFyKiBrU3R5bGVTaGVldFRlc3RTY3JpcHRS
ZXN1bHQgPSAiYm9sZCI7Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3R3JvdXBEZWZhdWx0KFRl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgLy8gRGVmYXVsdCBncm91cCBpcyBzaGFy
ZWQgYnkgYWxsIFdlYlZpZXdzIGJ5IGRlZmF1bHQuCi0gICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3
PiB3ZWJWaWV3MSA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAg
IEdSZWZQdHI8V2ViS2l0V2ViVmlldz4gd2ViVmlldzIgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0
X3dlYl92aWV3X25ldygpKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2dyb3Vw
KHdlYlZpZXcxLmdldCgpKSA9PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2dyb3VwKHdlYlZpZXcyLmdl
dCgpKSk7Ci0KLSAgICAvLyBTZXR0aW5ncyBhcmUgc2hhcmVkIGJ5IGFsbCB3ZWIgdmlldyBpbiB0
aGUgc2FtZSBncm91cC4KLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdz
KHdlYlZpZXcxLmdldCgpKSA9PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdlYlZpZXcy
LmdldCgpKSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJW
aWV3MS5nZXQoKSkgPT0gd2Via2l0X3dlYl92aWV3X2dyb3VwX2dldF9zZXR0aW5ncyh3ZWJraXRf
d2ViX3ZpZXdfZ2V0X2dyb3VwKHdlYlZpZXcyLmdldCgpKSkpOwotfQotCi1zdGF0aWMgdm9pZCB0
ZXN0V2ViVmlld0dyb3VwTmV3R3JvdXAoVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAg
ICAvLyBQYXNzaW5nIDAgYXMgZ3JvdXAgbmFtZSBnZW5lcmF0ZXMgdGhlIG5hbWUgYXV0b21hdGlj
YWxseS4KLSAgICBHUmVmUHRyPFdlYktpdFdlYlZpZXdHcm91cD4gdmlld0dyb3VwMSA9IGFkb3B0
R1JlZih3ZWJraXRfd2ViX3ZpZXdfZ3JvdXBfbmV3KDApKTsKLSAgICB0ZXN0LT5hc3NlcnRPYmpl
Y3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHZpZXdHcm91cDEuZ2V0KCkpKTsK
LSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ3JvdXBfZ2V0X25hbWUodmlld0dyb3VwMS5n
ZXQoKSkpOwotCi0gICAgLy8gTmV3IGdyb3VwIHdpdGggYSBnaXZlbiBuYW1lLgotICAgIEdSZWZQ
dHI8V2ViS2l0V2ViVmlld0dyb3VwPiB2aWV3R3JvdXAyID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJf
dmlld19ncm91cF9uZXcoIlRlc3RHcm91cDIiKSk7Ci0gICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNE
ZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVCh2aWV3R3JvdXAyLmdldCgpKSk7Ci0gICAg
Z19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19ncm91cF9nZXRfbmFtZSh2aWV3R3JvdXAy
LmdldCgpKSwgPT0sICJUZXN0R3JvdXAyIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93
ZWJfdmlld19ncm91cF9nZXRfbmFtZSh2aWV3R3JvdXAyLmdldCgpKSwgIT0sIHdlYmtpdF93ZWJf
dmlld19ncm91cF9nZXRfbmFtZSh2aWV3R3JvdXAxLmdldCgpKSk7Ci0KLSAgICAvLyBFdmVyeSBn
cm91cCBoYXMgaXRzIG93biBzZXR0aW5ncy4KLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdf
Z3JvdXBfZ2V0X3NldHRpbmdzKHZpZXdHcm91cDEuZ2V0KCkpICE9IHdlYmtpdF93ZWJfdmlld19n
cm91cF9nZXRfc2V0dGluZ3Modmlld0dyb3VwMi5nZXQoKSkpOwotfQotCi1zdGF0aWMgdm9pZCB0
ZXN0V2ViVmlld05ld1dpdGhHcm91cChUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAg
IEdSZWZQdHI8V2ViS2l0V2ViVmlld0dyb3VwPiB2aWV3R3JvdXAxID0gYWRvcHRHUmVmKHdlYmtp
dF93ZWJfdmlld19ncm91cF9uZXcoIlRlc3RHcm91cDEiKSk7Ci0gICAgdGVzdC0+YXNzZXJ0T2Jq
ZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVCh2aWV3R3JvdXAxLmdldCgpKSk7
Ci0gICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3PiB3ZWJWaWV3MSA9IFdFQktJVF9XRUJfVklFVyh3
ZWJraXRfd2ViX3ZpZXdfbmV3X3dpdGhfZ3JvdXAodmlld0dyb3VwMS5nZXQoKSkpOwotICAgIGdf
YXNzZXJ0KHdlYmtpdF93ZWJfdmlld19nZXRfZ3JvdXAod2ViVmlldzEuZ2V0KCkpID09IHZpZXdH
cm91cDEuZ2V0KCkpOwotCi0gICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3PiB3ZWJWaWV3MiA9IFdF
QktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfYXNzZXJ0KHdlYmtp
dF93ZWJfdmlld19nZXRfZ3JvdXAod2ViVmlldzIuZ2V0KCkpICE9IHZpZXdHcm91cDEuZ2V0KCkp
OwotCi0gICAgLy8gU2V0dGluZ3Mgc2hvdWxkIGJlIGRpZmZlcmVudCBmb3Igdmlld3MgaW4gZGlm
ZmVyZW50IGdyb3Vwcy4KLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdz
KHdlYlZpZXcxLmdldCgpKSAhPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdlYlZpZXcy
LmdldCgpKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3R3JvdXBTZXR0aW5ncyhUZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIEdSZWZQdHI8V2ViS2l0V2ViVmlld0dyb3Vw
PiB2aWV3R3JvdXAxID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJfdmlld19ncm91cF9uZXcoIlRlc3RH
cm91cDEiKSk7Ci0gICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hl
cyhHX09CSkVDVCh2aWV3R3JvdXAxLmdldCgpKSk7Ci0gICAgR1JlZlB0cjxXZWJLaXRTZXR0aW5n
cz4gbmV3U2V0dGluZ3MgPSBhZG9wdEdSZWYod2Via2l0X3NldHRpbmdzX25ld193aXRoX3NldHRp
bmdzKCJlbmFibGUtamF2YXNjcmlwdCIsIEZBTFNFLCBOVUxMKSk7Ci0gICAgdGVzdC0+YXNzZXJ0
T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChuZXdTZXR0aW5ncy5nZXQo
KSkpOwotICAgIHdlYmtpdF93ZWJfdmlld19ncm91cF9zZXRfc2V0dGluZ3Modmlld0dyb3VwMS5n
ZXQoKSwgbmV3U2V0dGluZ3MuZ2V0KCkpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19n
cm91cF9nZXRfc2V0dGluZ3Modmlld0dyb3VwMS5nZXQoKSkgPT0gbmV3U2V0dGluZ3MuZ2V0KCkp
OwotCi0gICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3PiB3ZWJWaWV3MSA9IFdFQktJVF9XRUJfVklF
Vyh3ZWJraXRfd2ViX3ZpZXdfbmV3X3dpdGhfZ3JvdXAodmlld0dyb3VwMS5nZXQoKSkpOwotICAg
IEdSZWZQdHI8V2ViS2l0V2ViVmlldz4gd2ViVmlldzIgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0
X3dlYl92aWV3X25ldygpKTsKLSAgICBXZWJLaXRTZXR0aW5ncyogd2ViVmlldzFTZXR0aW5ncyA9
IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmlldzEuZ2V0KCkpOwotICAgIFdlYktp
dFNldHRpbmdzKiB3ZWJWaWV3MlNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5n
cyh3ZWJWaWV3Mi5nZXQoKSk7Ci0gICAgZ19hc3NlcnQod2ViVmlldzFTZXR0aW5ncyAhPSB3ZWJW
aWV3MlNldHRpbmdzKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9q
YXZhc2NyaXB0KHdlYlZpZXcxU2V0dGluZ3MpICE9IHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxl
X2phdmFzY3JpcHQod2ViVmlldzJTZXR0aW5ncykpOwotCi0gICAgd2Via2l0X3dlYl92aWV3X3Nl
dF9zZXR0aW5ncyh3ZWJWaWV3MS5nZXQoKSwgd2ViVmlldzJTZXR0aW5ncyk7Ci0gICAgZ19hc3Nl
cnQod2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3MS5nZXQoKSkgPT0gd2ViVmll
dzJTZXR0aW5ncyk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dyb3VwX2dldF9zZXR0
aW5ncyh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2dyb3VwKHdlYlZpZXcxLmdldCgpKSkgPT0gd2ViVmll
dzJTZXR0aW5ncyk7Ci19Ci0KLXN0YXRpYyBib29sIGlzU3R5bGVTaGVldEluamVjdGVkRm9yVVJM
QXRQYXRoKFdlYlZpZXdUZXN0KiB0ZXN0LCBjb25zdCBjaGFyKiBwYXRoKQotewotICAgIHRlc3Qt
PmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aChwYXRoKS5kYXRhKCkpOwotICAgIHRlc3Qt
PndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgR093blB0cjxHRXJyb3I+IGVycm9yOwot
ICAgIFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5K
YXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoa1N0eWxlU2hlZXRUZXN0U2NyaXB0LCAmZXJy
b3Iub3V0UHRyKCkpOwotICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOwotICAgIGdfYXNz
ZXJ0KCFlcnJvci5nZXQoKSk7Ci0KLSAgICBHT3duUHRyPGNoYXI+IHJlc3VsdFN0cmluZyhXZWJW
aWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7Ci0g
ICAgcmV0dXJuICFnX3N0cmNtcDAocmVzdWx0U3RyaW5nLmdldCgpLCBrU3R5bGVTaGVldFRlc3RT
Y3JpcHRSZXN1bHQpOwotfQotCi1zdGF0aWMgdm9pZCBmaWxsVVJMTGlzdEZyb21QYXRocyhjaGFy
KiogbGlzdCwgY29uc3QgY2hhciogcGF0aCwgLi4uKQotewotICAgIHZhX2xpc3QgYXJndW1lbnRM
aXN0OwotICAgIHZhX3N0YXJ0KGFyZ3VtZW50TGlzdCwgcGF0aCk7Ci0KLSAgICBpbnQgaSA9IDA7
Ci0gICAgd2hpbGUgKHBhdGgpIHsKLSAgICAgICAgLy8gRklYTUU6IFdlIG11c3QgdXNlIGEgd2ls
ZGNhcmQgZm9yIHRoZSBob3N0IGhlcmUgdW50aWwgaHR0cDovL3drYnVnLmNvbS8xMTI0NzYgaXMg
Zml4ZWQuCi0gICAgICAgIC8vIFVudGlsIHRoYXQgdGltZSBwYXR0ZXJucyB3aXRoIHBvcnQgbnVt
YmVycyBpbiB0aGVtIHdpbGwgbm90IHByb3Blcmx5IG1hdGNoIFVSTHMgd2l0aCBwb3J0IG51bWJl
cnMuCi0gICAgICAgIGxpc3RbaSsrXSA9IGdfc3RyZHVwX3ByaW50ZigiaHR0cDovLyovJXMqIiwg
cGF0aCk7Ci0gICAgICAgIHBhdGggPSB2YV9hcmcoYXJndW1lbnRMaXN0LCBjb25zdCBjaGFyKik7
Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCByZW1vdmVPbGRJbmplY3RlZFN0eWxlU2hlZXRzQW5k
UmVzZXRMaXN0cyhXZWJLaXRXZWJWaWV3R3JvdXAqIGdyb3VwLCBjaGFyKiogd2hpdGVsaXN0LCBj
aGFyKiogYmxhY2tsaXN0KQotewotICAgIHdlYmtpdF93ZWJfdmlld19ncm91cF9yZW1vdmVfYWxs
X3VzZXJfc3R5bGVfc2hlZXRzKGdyb3VwKTsKLQotICAgIHdoaWxlICgqd2hpdGVsaXN0KSB7Ci0g
ICAgICAgIGdfZnJlZSgqd2hpdGVsaXN0KTsKLSAgICAgICAgKndoaXRlbGlzdCA9IDA7Ci0gICAg
ICAgIHdoaXRlbGlzdCsrOwotICAgIH0KLQotICAgIHdoaWxlICgqYmxhY2tsaXN0KSB7Ci0gICAg
ICAgIGdfZnJlZSgqYmxhY2tsaXN0KTsKLSAgICAgICAgKmJsYWNrbGlzdCA9IDA7Ci0gICAgICAg
IGJsYWNrbGlzdCsrOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdHcm91cElu
amVjdGVkU3R5bGVTaGVldChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAg
ICBXZWJLaXRXZWJWaWV3R3JvdXAqIGdyb3VwID0gd2Via2l0X3dlYl92aWV3X2dldF9ncm91cCh0
ZXN0LT5tX3dlYlZpZXcpOwotICAgIGNoYXIqIHdoaXRlbGlzdFszXSA9IHsgMCwgMCwgMCB9Owot
ICAgIGNoYXIqIGJsYWNrbGlzdFszXSA9IHsgMCwgMCwgMCB9OwotCi0gICAgcmVtb3ZlT2xkSW5q
ZWN0ZWRTdHlsZVNoZWV0c0FuZFJlc2V0TGlzdHMoZ3JvdXAsIHdoaXRlbGlzdCwgYmxhY2tsaXN0
KTsKLQotICAgIC8vIFdpdGhvdXQgYSB3aGl0ZWxpc3Qgb3IgYSBibGFja2xpc3QgYWxsIFVSTHMg
c2hvdWxkIGhhdmUgdGhlIGluamVjdGVkIHN0eWxlIHNoZWV0LgotICAgIHN0YXRpYyBjb25zdCBj
aGFyKiByYW5kb21QYXRoID0gInNvbWVyYW5kb21wYXRoIjsKLSAgICBnX2Fzc2VydCghaXNTdHls
ZVNoZWV0SW5qZWN0ZWRGb3JVUkxBdFBhdGgodGVzdCwgcmFuZG9tUGF0aCkpOwotICAgIHdlYmtp
dF93ZWJfdmlld19ncm91cF9hZGRfdXNlcl9zdHlsZV9zaGVldChncm91cCwga0luamVjdGVkU3R5
bGVTaGVldCwgMCwgMCwgMCwgV0VCS0lUX0lOSkVDVEVEX0NPTlRFTlRfRlJBTUVTX0FMTCk7Ci0g
ICAgZ19hc3NlcnQoaXNTdHlsZVNoZWV0SW5qZWN0ZWRGb3JVUkxBdFBhdGgodGVzdCwgcmFuZG9t
UGF0aCkpOwotCi0gICAgcmVtb3ZlT2xkSW5qZWN0ZWRTdHlsZVNoZWV0c0FuZFJlc2V0TGlzdHMo
Z3JvdXAsIHdoaXRlbGlzdCwgYmxhY2tsaXN0KTsKLQotICAgIGZpbGxVUkxMaXN0RnJvbVBhdGhz
KGJsYWNrbGlzdCwgcmFuZG9tUGF0aCwgMCk7Ci0gICAgd2Via2l0X3dlYl92aWV3X2dyb3VwX2Fk
ZF91c2VyX3N0eWxlX3NoZWV0KGdyb3VwLCBrSW5qZWN0ZWRTdHlsZVNoZWV0LCAwLCAwLCBibGFj
a2xpc3QsIFdFQktJVF9JTkpFQ1RFRF9DT05URU5UX0ZSQU1FU19BTEwpOwotICAgIGdfYXNzZXJ0
KCFpc1N0eWxlU2hlZXRJbmplY3RlZEZvclVSTEF0UGF0aCh0ZXN0LCByYW5kb21QYXRoKSk7Ci0g
ICAgZ19hc3NlcnQoaXNTdHlsZVNoZWV0SW5qZWN0ZWRGb3JVUkxBdFBhdGgodGVzdCwgInNvbWVv
dGhlcnJhbmRvbXBhdGgiKSk7Ci0KLSAgICByZW1vdmVPbGRJbmplY3RlZFN0eWxlU2hlZXRzQW5k
UmVzZXRMaXN0cyhncm91cCwgd2hpdGVsaXN0LCBibGFja2xpc3QpOwotCi0gICAgc3RhdGljIGNv
bnN0IGNoYXIqIGluVGhlV2hpdGVMaXN0ID0gImludGhld2hpdGVsaXN0IjsKLSAgICBzdGF0aWMg
Y29uc3QgY2hhciogbm90SW5XaGl0ZWxpc3QgPSAibm90aW50aGV3aGl0ZWxpc3QiOwotICAgIHN0
YXRpYyBjb25zdCBjaGFyKiBpblRoZVdoaXRlTGlzdEFuZEJsYWNrTGlzdCA9ICJpbnRoZXdoaXRl
bGlzdGFuZGJsYWNrbGlzdCI7Ci0KLSAgICBmaWxsVVJMTGlzdEZyb21QYXRocyh3aGl0ZWxpc3Qs
IGluVGhlV2hpdGVMaXN0LCBpblRoZVdoaXRlTGlzdEFuZEJsYWNrTGlzdCwgMCk7Ci0gICAgZmls
bFVSTExpc3RGcm9tUGF0aHMoYmxhY2tsaXN0LCBpblRoZVdoaXRlTGlzdEFuZEJsYWNrTGlzdCwg
MCk7Ci0gICAgd2Via2l0X3dlYl92aWV3X2dyb3VwX2FkZF91c2VyX3N0eWxlX3NoZWV0KGdyb3Vw
LCBrSW5qZWN0ZWRTdHlsZVNoZWV0LCAwLCB3aGl0ZWxpc3QsIGJsYWNrbGlzdCwgV0VCS0lUX0lO
SkVDVEVEX0NPTlRFTlRfRlJBTUVTX0FMTCk7Ci0gICAgZ19hc3NlcnQoaXNTdHlsZVNoZWV0SW5q
ZWN0ZWRGb3JVUkxBdFBhdGgodGVzdCwgaW5UaGVXaGl0ZUxpc3QpKTsKLSAgICBnX2Fzc2VydCgh
aXNTdHlsZVNoZWV0SW5qZWN0ZWRGb3JVUkxBdFBhdGgodGVzdCwgaW5UaGVXaGl0ZUxpc3RBbmRC
bGFja0xpc3QpKTsKLSAgICBnX2Fzc2VydCghaXNTdHlsZVNoZWV0SW5qZWN0ZWRGb3JVUkxBdFBh
dGgodGVzdCwgbm90SW5XaGl0ZWxpc3QpKTsKLQotICAgIC8vIEl0J3MgaW1wb3J0YW50IHRvIGNs
ZWFuIHVwIHRoZSBlbnZpcm9ubWVudCBiZWZvcmUgb3RoZXIgdGVzdHMuCi0gICAgcmVtb3ZlT2xk
SW5qZWN0ZWRTdHlsZVNoZWV0c0FuZFJlc2V0TGlzdHMoZ3JvdXAsIHdoaXRlbGlzdCwgYmxhY2ts
aXN0KTsKLX0KLQotc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVy
LCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSosIFNv
dXBDbGllbnRDb250ZXh0KiwgZ3BvaW50ZXIpCi17Ci0gICAgc291cF9tZXNzYWdlX3NldF9zdGF0
dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOwotICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVu
ZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGtTdHlsZVNoZWV0
SFRNTCwgc3RybGVuKGtTdHlsZVNoZWV0SFRNTCkpOwotICAgIHNvdXBfbWVzc2FnZV9ib2R5X2Nv
bXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOwotfQotCi12b2lkIGJlZm9yZUFsbCgpCi17
Ci0gICAga1NlcnZlciA9IG5ldyBXZWJLaXRUZXN0U2VydmVyKCk7Ci0gICAga1NlcnZlci0+cnVu
KHNlcnZlckNhbGxiYWNrKTsKLQotICAgIFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlld0dyb3VwIiwg
ImRlZmF1bHQtZ3JvdXAiLCB0ZXN0V2ViVmlld0dyb3VwRGVmYXVsdCk7Ci0gICAgVGVzdDo6YWRk
KCJXZWJLaXRXZWJWaWV3R3JvdXAiLCAibmV3LWdyb3VwIiwgdGVzdFdlYlZpZXdHcm91cE5ld0dy
b3VwKTsKLSAgICBUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAibmV3LXdpdGgtZ3JvdXAiLCB0
ZXN0V2ViVmlld05ld1dpdGhHcm91cCk7Ci0gICAgVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3R3Jv
dXAiLCAic2V0dGluZ3MiLCB0ZXN0V2ViVmlld0dyb3VwU2V0dGluZ3MpOwotICAgIFdlYlZpZXdU
ZXN0OjphZGQoIldlYktpdFdlYlZpZXdHcm91cCIsICJpbmplY3RlZC1zdHlsZS1zaGVldCIsIHRl
c3RXZWJWaWV3R3JvdXBJbmplY3RlZFN0eWxlU2hlZXQpOwotfQotCi12b2lkIGFmdGVyQWxsKCkK
LXsKLSAgICBkZWxldGUga1NlcnZlcjsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJWaWV3RWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJWaWV3RWRpdG9yLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTMzMTVkYjY4ZDY3NTExYzI1NWMxZmM4YjQ0MTJlODk3
OGVhNjQ5My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViVmlld0VkaXRvci5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAy
LDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYlZpZXdU
ZXN0LmgiCi0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgotCi1jbGFzcyBFZGl0b3JU
ZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3QgewotcHVibGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJ
WFRVUkUoRWRpdG9yVGVzdCk7Ci0KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGtDbGlw
Ym9hcmRXYWl0VGltZW91dCA9IDUwOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQga0Ns
aXBib2FyZFdhaXRNYXhUcmllcyA9IDI7Ci0KLSAgICBFZGl0b3JUZXN0KCkKLSAgICAgICAgOiBt
X2NsaXBib2FyZChndGtfY2xpcGJvYXJkX2dldChHREtfU0VMRUNUSU9OX0NMSVBCT0FSRCkpCi0g
ICAgICAgICwgbV9jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQoZmFsc2UpCi0gICAgICAgICwgbV90
cmllc0NvdW50KDApCi0gICAgewotICAgICAgICBndGtfY2xpcGJvYXJkX2NsZWFyKG1fY2xpcGJv
YXJkKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBjYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmRS
ZWFkeUNhbGxiYWNrKEdPYmplY3QqLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgRWRpdG9yVGVzdCog
dGVzdCkKLSAgICB7Ci0gICAgICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKLSAgICAgICAgdGVz
dC0+bV9jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQgPSB3ZWJraXRfd2ViX3ZpZXdfY2FuX2V4ZWN1
dGVfZWRpdGluZ19jb21tYW5kX2ZpbmlzaCh0ZXN0LT5tX3dlYlZpZXcsIHJlc3VsdCwgJmVycm9y
Lm91dFB0cigpKTsKLSAgICAgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKLSAgICAgICAgZ19t
YWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKLSAgICB9Ci0KLSAgICBib29sIGNhbkV4
ZWN1dGVFZGl0aW5nQ29tbWFuZChjb25zdCBjaGFyKiBjb21tYW5kKQotICAgIHsKLSAgICAgICAg
bV9jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQgPSBmYWxzZTsKLSAgICAgICAgd2Via2l0X3dlYl92
aWV3X2Nhbl9leGVjdXRlX2VkaXRpbmdfY29tbWFuZChtX3dlYlZpZXcsIGNvbW1hbmQsIDAsIHJl
aW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4oY2FuRXhlY3V0ZUVkaXRpbmdDb21t
YW5kUmVhZHlDYWxsYmFjayksIHRoaXMpOwotICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWlu
TG9vcCk7Ci0gICAgICAgIHJldHVybiBtX2NhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZDsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgZ2Jvb2xlYW4gd2FpdEZvckNsaXBib2FyZFRleHQoRWRpdG9yVGVzdCog
dGVzdCkKLSAgICB7Ci0gICAgICAgIHRlc3QtPm1fdHJpZXNDb3VudCsrOwotICAgICAgICBpZiAo
Z3RrX2NsaXBib2FyZF93YWl0X2lzX3RleHRfYXZhaWxhYmxlKHRlc3QtPm1fY2xpcGJvYXJkKSB8
fCB0ZXN0LT5tX3RyaWVzQ291bnQgPiBrQ2xpcGJvYXJkV2FpdE1heFRyaWVzKSB7Ci0gICAgICAg
ICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOwotICAgICAgICAgICAgcmV0
dXJuIEZBTFNFOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgfQotCi0g
ICAgdm9pZCBjb3B5Q2xpcGJvYXJkKCkKLSAgICB7Ci0gICAgICAgIHdlYmtpdF93ZWJfdmlld19l
eGVjdXRlX2VkaXRpbmdfY29tbWFuZChtX3dlYlZpZXcsIFdFQktJVF9FRElUSU5HX0NPTU1BTkRf
Q09QWSk7Ci0gICAgICAgIC8vIFRoZXJlJ3Mgbm8gd2F5IHRvIGtub3cgd2hlbiB0aGUgc2VsZWN0
aW9uIGhhcyBiZWVuIGNvcGllZCB0bwotICAgICAgICAvLyB0aGUgY2xpcGJvYXJkLCBzbyB1c2Ug
YSB0aW1lb3V0IHNvdXJjZSB0byBxdWVyeSB0aGUgY2xpcGJvYXJkLgotICAgICAgICBtX3RyaWVz
Q291bnQgPSAwOwotICAgICAgICBnX3RpbWVvdXRfYWRkKGtDbGlwYm9hcmRXYWl0VGltZW91dCwg
cmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4od2FpdEZvckNsaXBib2FyZFRleHQpLCB0aGlz
KTsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIEd0
a0NsaXBib2FyZCogbV9jbGlwYm9hcmQ7Ci0gICAgYm9vbCBtX2NhbkV4ZWN1dGVFZGl0aW5nQ29t
bWFuZDsKLSAgICBzaXplX3QgbV90cmllc0NvdW50OwotfTsKLQotc3RhdGljIHZvaWQgdGVzdFdl
YlZpZXdFZGl0b3JDdXRDb3B5UGFzdGVOb25FZGl0YWJsZShFZGl0b3JUZXN0KiB0ZXN0LCBnY29u
c3Rwb2ludGVyKQotewotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzZWxlY3RlZFNwYW5IVE1MID0g
IjxodG1sPjxib2R5IGNvbnRlbnRFZGl0YWJsZT1cImZhbHNlXCI+IgotICAgICAgICAiPHNwYW4g
aWQ9XCJtYWluc3BhblwiPkFsbCB3b3JrIGFuZCBubyBwbGF5IDxzcGFuIGlkPVwic3Vic3Bhblwi
Pm1ha2UgSmFjayBhIGR1bGw8L3NwYW4+IGJveS48L3NwYW4+IgotICAgICAgICAiPHNjcmlwdD5k
b2N1bWVudC5nZXRTZWxlY3Rpb24oKS5jb2xsYXBzZSgpO1xuIgotICAgICAgICAiZG9jdW1lbnQu
Z2V0U2VsZWN0aW9uKCkuc2VsZWN0QWxsQ2hpbGRyZW4oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J3N1YnNwYW4nKSk7XG4iCi0gICAgICAgICI8L3NjcmlwdD48L2JvZHk+PC9odG1sPiI7Ci0KLSAg
ICAvLyBOb3RoaW5nIGxvYWRlZCB5ZXQuCi0gICAgZ19hc3NlcnQoIXRlc3QtPmNhbkV4ZWN1dGVF
ZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElOR19DT01NQU5EX0NVVCkpOwotICAgIGdfYXNzZXJ0
KCF0ZXN0LT5jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQoV0VCS0lUX0VESVRJTkdfQ09NTUFORF9D
T1BZKSk7Ci0gICAgZ19hc3NlcnQoIXRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJL
SVRfRURJVElOR19DT01NQU5EX1BBU1RFKSk7Ci0KLSAgICB0ZXN0LT5sb2FkSHRtbChzZWxlY3Rl
ZFNwYW5IVE1MLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKLQotICAg
IGdfYXNzZXJ0KHRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElOR19D
T01NQU5EX0NPUFkpKTsKLSAgICAvLyBJdCdzIG5vdCBwb3NzaWJsZSB0byBjdXQgYW5kIHBhc3Rl
IHdoZW4gY29udGVudCBpcyBub3QgZWRpdGFibGUKLSAgICAvLyBldmVuIGlmIHRoZXJlJ3MgYSBz
ZWxlY3Rpb24uCi0gICAgZ19hc3NlcnQoIXRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChX
RUJLSVRfRURJVElOR19DT01NQU5EX0NVVCkpOwotICAgIGdfYXNzZXJ0KCF0ZXN0LT5jYW5FeGVj
dXRlRWRpdGluZ0NvbW1hbmQoV0VCS0lUX0VESVRJTkdfQ09NTUFORF9QQVNURSkpOwotCi0gICAg
dGVzdC0+Y29weUNsaXBib2FyZCgpOwotICAgIEdPd25QdHI8Y2hhcj4gY2xpcGJvYXJkVGV4dChn
dGtfY2xpcGJvYXJkX3dhaXRfZm9yX3RleHQodGVzdC0+bV9jbGlwYm9hcmQpKTsKLSAgICBnX2Fz
c2VydF9jbXBzdHIoY2xpcGJvYXJkVGV4dC5nZXQoKSwgPT0sICJtYWtlIEphY2sgYSBkdWxsIik7
Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3RWRpdG9yQ3V0Q29weVBhc3RlRWRpdGFibGUo
RWRpdG9yVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBzdGF0aWMgY29uc3QgY2hh
ciogc2VsZWN0ZWRTcGFuSFRNTCA9ICI8aHRtbD48Ym9keSBjb250ZW50RWRpdGFibGU9XCJ0cnVl
XCI+IgotICAgICAgICAiPHNwYW4gaWQ9XCJtYWluc3BhblwiPkFsbCB3b3JrIGFuZCBubyBwbGF5
IDxzcGFuPm1ha2UgSmFjayBhIGR1bGw8L3NwYW4+IGJveS48L3NwYW4+IgotICAgICAgICAiPHNj
cmlwdD5kb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5jb2xsYXBzZSgpO1xuIgotICAgICAgICAiZG9j
dW1lbnQuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0QWxsQ2hpbGRyZW4oZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ21haW5zcGFuJykpO1xuIgotICAgICAgICAiPC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4i
OwotCi0gICAgLy8gTm90aGluZyBsb2FkZWQgeWV0LgotICAgIGdfYXNzZXJ0KCF0ZXN0LT5jYW5F
eGVjdXRlRWRpdGluZ0NvbW1hbmQoV0VCS0lUX0VESVRJTkdfQ09NTUFORF9DVVQpKTsKLSAgICBn
X2Fzc2VydCghdGVzdC0+Y2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kKFdFQktJVF9FRElUSU5HX0NP
TU1BTkRfQ09QWSkpOwotICAgIGdfYXNzZXJ0KCF0ZXN0LT5jYW5FeGVjdXRlRWRpdGluZ0NvbW1h
bmQoV0VCS0lUX0VESVRJTkdfQ09NTUFORF9QQVNURSkpOwotCi0gICAgdGVzdC0+bG9hZEh0bWwo
c2VsZWN0ZWRTcGFuSFRNTCwgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7
Ci0KLSAgICAvLyBUaGVyZSdzIGEgc2VsZWN0aW9uLgotICAgIGdfYXNzZXJ0KHRlc3QtPmNhbkV4
ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElOR19DT01NQU5EX0NVVCkpOwotICAgIGdf
YXNzZXJ0KHRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElOR19DT01N
QU5EX0NPUFkpKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQo
V0VCS0lUX0VESVRJTkdfQ09NTUFORF9QQVNURSkpOwotCi0gICAgdGVzdC0+Y29weUNsaXBib2Fy
ZCgpOwotICAgIEdPd25QdHI8Y2hhcj4gY2xpcGJvYXJkVGV4dChndGtfY2xpcGJvYXJkX3dhaXRf
Zm9yX3RleHQodGVzdC0+bV9jbGlwYm9hcmQpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoY2xpcGJv
YXJkVGV4dC5nZXQoKSwgPT0sICJBbGwgd29yayBhbmQgbm8gcGxheSBtYWtlIEphY2sgYSBkdWxs
IGJveS4iKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdFZGl0b3JTZWxlY3RBbGxOb25F
ZGl0YWJsZShFZGl0b3JUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBzZWxlY3RlZFNwYW5IVE1MID0gIjxodG1sPjxib2R5IGNvbnRlbnRFZGl0YWJs
ZT1cImZhbHNlXCI+IgotICAgICAgICAiPHNwYW4gaWQ9XCJtYWluc3BhblwiPkFsbCB3b3JrIGFu
ZCBubyBwbGF5IDxzcGFuIGlkPVwic3Vic3BhblwiPm1ha2UgSmFjayBhIGR1bGw8L3NwYW4+IGJv
eS48L3NwYW4+IgotICAgICAgICAiPHNjcmlwdD5kb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5jb2xs
YXBzZSgpO1xuIgotICAgICAgICAiZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0QWxsQ2hp
bGRyZW4oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1YnNwYW4nKSk7XG4iCi0gICAgICAgICI8
L3NjcmlwdD48L2JvZHk+PC9odG1sPiI7Ci0KLSAgICBnX2Fzc2VydCh0ZXN0LT5jYW5FeGVjdXRl
RWRpdGluZ0NvbW1hbmQoV0VCS0lUX0VESVRJTkdfQ09NTUFORF9TRUxFQ1RfQUxMKSk7Ci0KLSAg
ICB0ZXN0LT5sb2FkSHRtbChzZWxlY3RlZFNwYW5IVE1MLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50
aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0KHRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5n
Q29tbWFuZChXRUJLSVRfRURJVElOR19DT01NQU5EX1NFTEVDVF9BTEwpKTsKLQotICAgIHRlc3Qt
PmNvcHlDbGlwYm9hcmQoKTsKLSAgICBHT3duUHRyPGNoYXI+IGNsaXBib2FyZFRleHQoZ3RrX2Ns
aXBib2FyZF93YWl0X2Zvcl90ZXh0KHRlc3QtPm1fY2xpcGJvYXJkKSk7Ci0KLSAgICAvLyBJbml0
aWFsbHkgb25seSB0aGUgc3Vic3BhbiBpcyBzZWxlY3RlZC4KLSAgICBnX2Fzc2VydF9jbXBzdHIo
Y2xpcGJvYXJkVGV4dC5nZXQoKSwgPT0sICJtYWtlIEphY2sgYSBkdWxsIik7Ci0KLSAgICB3ZWJr
aXRfd2ViX3ZpZXdfZXhlY3V0ZV9lZGl0aW5nX2NvbW1hbmQodGVzdC0+bV93ZWJWaWV3LCBXRUJL
SVRfRURJVElOR19DT01NQU5EX1NFTEVDVF9BTEwpOwotICAgIHRlc3QtPmNvcHlDbGlwYm9hcmQo
KTsKLSAgICBjbGlwYm9hcmRUZXh0LnNldChndGtfY2xpcGJvYXJkX3dhaXRfZm9yX3RleHQodGVz
dC0+bV9jbGlwYm9hcmQpKTsKLQotICAgIC8vIFRoZSBtYWluc3BhbiBzaG91bGQgYmUgc2VsZWN0
ZWQgYWZ0ZXIgY2FsbGluZyBTRUxFQ1RfQUxMLgotICAgIGdfYXNzZXJ0X2NtcHN0cihjbGlwYm9h
cmRUZXh0LmdldCgpLCA9PSwgIkFsbCB3b3JrIGFuZCBubyBwbGF5IG1ha2UgSmFjayBhIGR1bGwg
Ym95LiIpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0VkaXRvclNlbGVjdEFsbEVkaXRh
YmxlKEVkaXRvclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgc3RhdGljIGNvbnN0
IGNoYXIqIHNlbGVjdGVkU3BhbkhUTUwgPSAiPGh0bWw+PGJvZHkgY29udGVudEVkaXRhYmxlPVwi
dHJ1ZVwiPiIKLSAgICAgICAgIjxzcGFuIGlkPVwibWFpbnNwYW5cIj5BbGwgd29yayBhbmQgbm8g
cGxheSA8c3BhbiBpZD1cInN1YnNwYW5cIj5tYWtlIEphY2sgYSBkdWxsPC9zcGFuPiBib3kuPC9z
cGFuPiIKLSAgICAgICAgIjxzY3JpcHQ+ZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkuY29sbGFwc2Uo
KTtcbiIKLSAgICAgICAgImRvY3VtZW50LmdldFNlbGVjdGlvbigpLnNlbGVjdEFsbENoaWxkcmVu
KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdWJzcGFuJykpO1xuIgotICAgICAgICAiPC9zY3Jp
cHQ+PC9ib2R5PjwvaHRtbD4iOwotCi0gICAgZ19hc3NlcnQodGVzdC0+Y2FuRXhlY3V0ZUVkaXRp
bmdDb21tYW5kKFdFQktJVF9FRElUSU5HX0NPTU1BTkRfU0VMRUNUX0FMTCkpOwotCi0gICAgdGVz
dC0+bG9hZEh0bWwoc2VsZWN0ZWRTcGFuSFRNTCwgMCk7Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9h
ZEZpbmlzaGVkKCk7Ci0KLSAgICBnX2Fzc2VydCh0ZXN0LT5jYW5FeGVjdXRlRWRpdGluZ0NvbW1h
bmQoV0VCS0lUX0VESVRJTkdfQ09NTUFORF9TRUxFQ1RfQUxMKSk7Ci0KLSAgICB0ZXN0LT5jb3B5
Q2xpcGJvYXJkKCk7Ci0gICAgR093blB0cjxjaGFyPiBjbGlwYm9hcmRUZXh0KGd0a19jbGlwYm9h
cmRfd2FpdF9mb3JfdGV4dCh0ZXN0LT5tX2NsaXBib2FyZCkpOwotCi0gICAgLy8gSW5pdGlhbGx5
IG9ubHkgdGhlIHN1YnNwYW4gaXMgc2VsZWN0ZWQuCi0gICAgZ19hc3NlcnRfY21wc3RyKGNsaXBi
b2FyZFRleHQuZ2V0KCksID09LCAibWFrZSBKYWNrIGEgZHVsbCIpOwotCi0gICAgd2Via2l0X3dl
Yl92aWV3X2V4ZWN1dGVfZWRpdGluZ19jb21tYW5kKHRlc3QtPm1fd2ViVmlldywgV0VCS0lUX0VE
SVRJTkdfQ09NTUFORF9TRUxFQ1RfQUxMKTsKLSAgICB0ZXN0LT5jb3B5Q2xpcGJvYXJkKCk7Ci0g
ICAgY2xpcGJvYXJkVGV4dC5zZXQoZ3RrX2NsaXBib2FyZF93YWl0X2Zvcl90ZXh0KHRlc3QtPm1f
Y2xpcGJvYXJkKSk7Ci0KLSAgICAvLyBUaGUgbWFpbnNwYW4gc2hvdWxkIGJlIHNlbGVjdGVkIGFm
dGVyIGNhbGxpbmcgU0VMRUNUX0FMTC4KLSAgICBnX2Fzc2VydF9jbXBzdHIoY2xpcGJvYXJkVGV4
dC5nZXQoKSwgPT0sICJBbGwgd29yayBhbmQgbm8gcGxheSBtYWtlIEphY2sgYSBkdWxsIGJveS4i
KTsKLX0KLQotdm9pZCBiZWZvcmVBbGwoKQotewotICAgIEVkaXRvclRlc3Q6OmFkZCgiV2ViS2l0
V2ViVmlldyIsICJjdXQtY29weS1wYXN0ZS9ub24tZWRpdGFibGUiLCB0ZXN0V2ViVmlld0VkaXRv
ckN1dENvcHlQYXN0ZU5vbkVkaXRhYmxlKTsKLSAgICBFZGl0b3JUZXN0OjphZGQoIldlYktpdFdl
YlZpZXciLCAiY3V0LWNvcHktcGFzdGUvZWRpdGFibGUiLCB0ZXN0V2ViVmlld0VkaXRvckN1dENv
cHlQYXN0ZUVkaXRhYmxlKTsKLSAgICBFZGl0b3JUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAi
c2VsZWN0LWFsbC9ub24tZWRpdGFibGUiLCB0ZXN0V2ViVmlld0VkaXRvclNlbGVjdEFsbE5vbkVk
aXRhYmxlKTsKLSAgICBFZGl0b3JUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAic2VsZWN0LWFs
bC9lZGl0YWJsZSIsIHRlc3RXZWJWaWV3RWRpdG9yU2VsZWN0QWxsRWRpdGFibGUpOwotfQotCi12
b2lkIGFmdGVyQWxsKCkKLXsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL1dlYkV4dGVuc2lvblRlc3QuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViRXh0ZW5zaW9uVGVzdC5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAyMTJlMmIyN2NlMTBiMjI5NTQ3MjNkYzA1MjZlZjczMzhhNTNlOTgu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViRXh0ZW5zaW9uVGVzdC5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwyNjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2Fs
aWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9K
U0NvbnRleHRSZWYuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0ci5oPgot
I2luY2x1ZGUgPGdpby9naW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJp
bmcuaD4KLSNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdC13ZWItZXh0ZW5zaW9uLmg+Ci0jaW5jbHVk
ZSA8d3RmL0RlcXVlLmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgotI2luY2x1ZGUg
PHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0K
LXN0YXRpYyBjb25zdCBjaGFyIGludHJvc3BlY3Rpb25YTUxbXSA9Ci0gICAgIjxub2RlPiIKLSAg
ICAiIDxpbnRlcmZhY2UgbmFtZT0nb3JnLndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9uVGVzdCc+Igot
ICAgICIgIDxtZXRob2QgbmFtZT0nR2V0VGl0bGUnPiIKLSAgICAiICAgPGFyZyB0eXBlPSd0JyBu
YW1lPSdwYWdlSUQnIGRpcmVjdGlvbj0naW4nLz4iCi0gICAgIiAgIDxhcmcgdHlwZT0ncycgbmFt
ZT0ndGl0bGUnIGRpcmVjdGlvbj0nb3V0Jy8+IgotICAgICIgIDwvbWV0aG9kPiIKLSAgICAiICA8
bWV0aG9kIG5hbWU9J0Fib3J0UHJvY2Vzcyc+IgotICAgICIgIDwvbWV0aG9kPiIKLSAgICAiICA8
bWV0aG9kIG5hbWU9J1J1bkphdmFTY3JpcHRJbklzb2xhdGVkV29ybGQnPiIKLSAgICAiICAgPGFy
ZyB0eXBlPSd0JyBuYW1lPSdwYWdlSUQnIGRpcmVjdGlvbj0naW4nLz4iCi0gICAgIiAgIDxhcmcg
dHlwZT0ncycgbmFtZT0nc2NyaXB0JyBkaXJlY3Rpb249J2luJy8+IgotICAgICIgIDwvbWV0aG9k
PiIKLSAgICAiICA8c2lnbmFsIG5hbWU9J0RvY3VtZW50TG9hZGVkJy8+IgotICAgICIgIDxzaWdu
YWwgbmFtZT0nVVJJQ2hhbmdlZCc+IgotICAgICIgICA8YXJnIHR5cGU9J3MnIG5hbWU9J3VyaScg
ZGlyZWN0aW9uPSdvdXQnLz4iCi0gICAgIiAgPC9zaWduYWw+IgotICAgICIgPC9pbnRlcmZhY2U+
IgotICAgICI8L25vZGU+IjsKLQotdHlwZWRlZiBlbnVtIHsKLSAgICBEb2N1bWVudExvYWRlZFNp
Z25hbCwKLSAgICBVUklDaGFuZ2VkU2lnbmFsLAotfSBEZWxheWVkU2lnbmFsVHlwZTsKLQotc3Ry
dWN0IERlbGF5ZWRTaWduYWwgewotICAgIERlbGF5ZWRTaWduYWwoRGVsYXllZFNpZ25hbFR5cGUg
dHlwZSkKLSAgICAgICAgOiB0eXBlKHR5cGUpCi0gICAgewotICAgIH0KLQotICAgIERlbGF5ZWRT
aWduYWwoRGVsYXllZFNpZ25hbFR5cGUgdHlwZSwgY29uc3QgY2hhciogdXJpKQotICAgICAgICA6
IHR5cGUodHlwZSkKLSAgICAgICAgLCB1cmkodXJpKQotICAgIHsKLSAgICB9Ci0KLSAgICBEZWxh
eWVkU2lnbmFsVHlwZSB0eXBlOwotICAgIENTdHJpbmcgdXJpOwotfTsKLQotRGVxdWU8T3duUHRy
PERlbGF5ZWRTaWduYWw+PiBkZWxheWVkU2lnbmFsc1F1ZXVlOwotCi1zdGF0aWMgdm9pZCBlbWl0
RG9jdW1lbnRMb2FkZWQoR0RCdXNDb25uZWN0aW9uKiBjb25uZWN0aW9uKQotewotICAgIGJvb2wg
b2sgPSBnX2RidXNfY29ubmVjdGlvbl9lbWl0X3NpZ25hbCgKLSAgICAgICAgY29ubmVjdGlvbiwK
LSAgICAgICAgMCwKLSAgICAgICAgIi9vcmcvd2Via2l0L2d0ay9XZWJFeHRlbnNpb25UZXN0IiwK
LSAgICAgICAgIm9yZy53ZWJraXQuZ3RrLldlYkV4dGVuc2lvblRlc3QiLAotICAgICAgICAiRG9j
dW1lbnRMb2FkZWQiLAotICAgICAgICAwLAotICAgICAgICAwKTsKLSAgICBnX2Fzc2VydChvayk7
Ci19Ci0KLXN0YXRpYyB2b2lkIGRvY3VtZW50TG9hZGVkQ2FsbGJhY2soV2ViS2l0V2ViUGFnZSos
IFdlYktpdFdlYkV4dGVuc2lvbiogZXh0ZW5zaW9uKQotewotICAgIGdwb2ludGVyIGRhdGEgPSBn
X29iamVjdF9nZXRfZGF0YShHX09CSkVDVChleHRlbnNpb24pLCAiZGJ1cy1jb25uZWN0aW9uIik7
Ci0gICAgaWYgKGRhdGEpCi0gICAgICAgIGVtaXREb2N1bWVudExvYWRlZChHX0RCVVNfQ09OTkVD
VElPTihkYXRhKSk7Ci0gICAgZWxzZQotICAgICAgICBkZWxheWVkU2lnbmFsc1F1ZXVlLmFwcGVu
ZChhZG9wdFB0cihuZXcgRGVsYXllZFNpZ25hbChEb2N1bWVudExvYWRlZFNpZ25hbCkpKTsKLX0K
LQotc3RhdGljIHZvaWQgZW1pdFVSSUNoYW5nZWQoR0RCdXNDb25uZWN0aW9uKiBjb25uZWN0aW9u
LCBjb25zdCBjaGFyKiB1cmkpCi17Ci0gICAgYm9vbCBvayA9IGdfZGJ1c19jb25uZWN0aW9uX2Vt
aXRfc2lnbmFsKAotICAgICAgICBjb25uZWN0aW9uLAotICAgICAgICAwLAotICAgICAgICAiL29y
Zy93ZWJraXQvZ3RrL1dlYkV4dGVuc2lvblRlc3QiLAotICAgICAgICAib3JnLndlYmtpdC5ndGsu
V2ViRXh0ZW5zaW9uVGVzdCIsCi0gICAgICAgICJVUklDaGFuZ2VkIiwKLSAgICAgICAgZ192YXJp
YW50X25ldygiKHMpIiwgdXJpKSwKLSAgICAgICAgMCk7Ci0gICAgZ19hc3NlcnQob2spOwotfQot
Ci1zdGF0aWMgdm9pZCB1cmlDaGFuZ2VkQ2FsbGJhY2soV2ViS2l0V2ViUGFnZSogd2ViUGFnZSwg
R1BhcmFtU3BlYyogcHNwZWMsIFdlYktpdFdlYkV4dGVuc2lvbiogZXh0ZW5zaW9uKQotewotICAg
IGdwb2ludGVyIGRhdGEgPSBnX29iamVjdF9nZXRfZGF0YShHX09CSkVDVChleHRlbnNpb24pLCAi
ZGJ1cy1jb25uZWN0aW9uIik7Ci0gICAgaWYgKGRhdGEpCi0gICAgICAgIGVtaXRVUklDaGFuZ2Vk
KEdfREJVU19DT05ORUNUSU9OKGRhdGEpLCB3ZWJraXRfd2ViX3BhZ2VfZ2V0X3VyaSh3ZWJQYWdl
KSk7Ci0gICAgZWxzZQotICAgICAgICBkZWxheWVkU2lnbmFsc1F1ZXVlLmFwcGVuZChhZG9wdFB0
cihuZXcgRGVsYXllZFNpZ25hbChVUklDaGFuZ2VkU2lnbmFsLCB3ZWJraXRfd2ViX3BhZ2VfZ2V0
X3VyaSh3ZWJQYWdlKSkpKTsKLX0KLQotc3RhdGljIGdib29sZWFuIHNlbmRSZXF1ZXN0Q2FsbGJh
Y2soV2ViS2l0V2ViUGFnZSosIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QsIFdlYktpdFVSSVJl
c3BvbnNlKiwgZ3BvaW50ZXIpCi17Ci0gICAgY29uc3QgY2hhciogcmVxdWVzdFVSSSA9IHdlYmtp
dF91cmlfcmVxdWVzdF9nZXRfdXJpKHJlcXVlc3QpOwotICAgIGdfYXNzZXJ0KHJlcXVlc3RVUkkp
OwotCi0gICAgaWYgKGNvbnN0IGNoYXIqIHN1ZmZpeCA9IGdfc3RycnN0cihyZXF1ZXN0VVJJLCAi
L3JlbW92ZS10aGlzL2phdmFzY3JpcHQuanMiKSkgewotICAgICAgICBHT3duUHRyPGNoYXI+IHBy
ZWZpeChnX3N0cm5kdXAocmVxdWVzdFVSSSwgc3RybGVuKHJlcXVlc3RVUkkpIC0gc3RybGVuKHN1
ZmZpeCkpKTsKLSAgICAgICAgR093blB0cjxjaGFyPiBuZXdVUkkoZ19zdHJkdXBfcHJpbnRmKCIl
cy9qYXZhc2NyaXB0LmpzIiwgcHJlZml4LmdldCgpKSk7Ci0gICAgICAgIHdlYmtpdF91cmlfcmVx
dWVzdF9zZXRfdXJpKHJlcXVlc3QsIG5ld1VSSS5nZXQoKSk7Ci0gICAgfSBlbHNlIGlmIChnX3N0
cl9oYXNfc3VmZml4KHJlcXVlc3RVUkksICIvYWRkLWRvLW5vdC10cmFjay1oZWFkZXIiKSkgewot
ICAgICAgICBTb3VwTWVzc2FnZUhlYWRlcnMqIGhlYWRlcnMgPSB3ZWJraXRfdXJpX3JlcXVlc3Rf
Z2V0X2h0dHBfaGVhZGVycyhyZXF1ZXN0KTsKLSAgICAgICAgZ19hc3NlcnQoaGVhZGVycyk7Ci0g
ICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChoZWFkZXJzLCAiRE5UIiwgIjEiKTsK
LSAgICB9IGVsc2UgaWYgKGdfc3RyX2hhc19zdWZmaXgocmVxdWVzdFVSSSwgIi9jYW5jZWwtdGhp
cy5qcyIpKQotICAgICAgICByZXR1cm4gVFJVRTsKLQotICAgIHJldHVybiBGQUxTRTsKLX0KLQot
c3RhdGljIHZvaWQgcGFnZUNyZWF0ZWRDYWxsYmFjayhXZWJLaXRXZWJFeHRlbnNpb24qIGV4dGVu
c2lvbiwgV2ViS2l0V2ViUGFnZSogd2ViUGFnZSwgZ3BvaW50ZXIpCi17Ci0gICAgZ19zaWduYWxf
Y29ubmVjdCh3ZWJQYWdlLCAiZG9jdW1lbnQtbG9hZGVkIiwgR19DQUxMQkFDSyhkb2N1bWVudExv
YWRlZENhbGxiYWNrKSwgZXh0ZW5zaW9uKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlBhZ2Us
ICJub3RpZnk6OnVyaSIsIEdfQ0FMTEJBQ0sodXJpQ2hhbmdlZENhbGxiYWNrKSwgZXh0ZW5zaW9u
KTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlBhZ2UsICJzZW5kLXJlcXVlc3QiLCBHX0NBTExC
QUNLKHNlbmRSZXF1ZXN0Q2FsbGJhY2spLCAwKTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgZWNo
b0NhbGxiYWNrKEpTQ29udGV4dFJlZiBqc0NvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJl
Ziwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpT
VmFsdWVSZWYqKQotewotICAgIGlmIChhcmd1bWVudENvdW50IDw9IDApCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChqc0NvbnRleHQpOwotCi0gICAgSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IHN0cmluZyhBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShqc0NvbnRleHQsIGFy
Z3VtZW50c1swXSwgMCkpOwotICAgIHJldHVybiBKU1ZhbHVlTWFrZVN0cmluZyhqc0NvbnRleHQs
IHN0cmluZy5nZXQoKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdpbmRvd09iamVjdENsZWFyZWQoV2Vi
S2l0U2NyaXB0V29ybGQqIHdvcmxkLCBXZWJLaXRXZWJQYWdlKiBwYWdlLCBXZWJLaXRGcmFtZSog
ZnJhbWUsIGdwb2ludGVyKQotewotICAgIEpTR2xvYmFsQ29udGV4dFJlZiBqc0NvbnRleHQgPSB3
ZWJraXRfZnJhbWVfZ2V0X2phdmFzY3JpcHRfY29udGV4dF9mb3Jfc2NyaXB0X3dvcmxkKGZyYW1l
LCB3b3JsZCk7Ci0gICAgZ19hc3NlcnQoanNDb250ZXh0KTsKLSAgICBKU09iamVjdFJlZiBnbG9i
YWxPYmplY3QgPSBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoanNDb250ZXh0KTsKLSAgICBnX2Fz
c2VydChnbG9iYWxPYmplY3QpOwotCi0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGZ1bmN0
aW9uTmFtZShBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImVjaG8iKSk7Ci0g
ICAgSlNPYmplY3RSZWYgZnVuY3Rpb24gPSBKU09iamVjdE1ha2VGdW5jdGlvbldpdGhDYWxsYmFj
ayhqc0NvbnRleHQsIGZ1bmN0aW9uTmFtZS5nZXQoKSwgZWNob0NhbGxiYWNrKTsKLSAgICBKU09i
amVjdFNldFByb3BlcnR5KGpzQ29udGV4dCwgZ2xvYmFsT2JqZWN0LCBmdW5jdGlvbk5hbWUuZ2V0
KCksIGZ1bmN0aW9uLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5LCAwKTsKLX0KLQotc3RhdGljIFdlYktpdFdlYlBhZ2UqIGdldFdl
YlBhZ2UoV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24sIHVpbnQ2NF90IHBhZ2VJRCwgR0RC
dXNNZXRob2RJbnZvY2F0aW9uKiBpbnZvY2F0aW9uKQotewotICAgIFdlYktpdFdlYlBhZ2UqIHBh
Z2UgPSB3ZWJraXRfd2ViX2V4dGVuc2lvbl9nZXRfcGFnZShleHRlbnNpb24sIHBhZ2VJRCk7Ci0g
ICAgaWYgKCFwYWdlKSB7Ci0gICAgICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5f
ZXJyb3IoCi0gICAgICAgICAgICBpbnZvY2F0aW9uLCBHX0RCVVNfRVJST1IsIEdfREJVU19FUlJP
Ul9JTlZBTElEX0FSR1MsCi0gICAgICAgICAgICAiSW52YWxpZCBwYWdlIElEOiAlIiBHX0dVSU5U
NjRfRk9STUFULCBwYWdlSUQpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBnX2Fz
c2VydF9jbXB1aW50KHdlYmtpdF93ZWJfcGFnZV9nZXRfaWQocGFnZSksID09LCBwYWdlSUQpOwot
ICAgIHJldHVybiBwYWdlOwotfQotCi1zdGF0aWMgdm9pZCBtZXRob2RDYWxsQ2FsbGJhY2soR0RC
dXNDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBjb25zdCBjaGFyKiBzZW5kZXIsIGNvbnN0IGNoYXIq
IG9iamVjdFBhdGgsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG1ldGhv
ZE5hbWUsIEdWYXJpYW50KiBwYXJhbWV0ZXJzLCBHREJ1c01ldGhvZEludm9jYXRpb24qIGludm9j
YXRpb24sIGdwb2ludGVyIHVzZXJEYXRhKQotewotICAgIGlmIChnX3N0cmNtcDAoaW50ZXJmYWNl
TmFtZSwgIm9yZy53ZWJraXQuZ3RrLldlYkV4dGVuc2lvblRlc3QiKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKCFnX3N0cmNtcDAobWV0aG9kTmFtZSwgIkdldFRpdGxlIikpIHsKLSAgICAg
ICAgdWludDY0X3QgcGFnZUlEOwotICAgICAgICBnX3ZhcmlhbnRfZ2V0KHBhcmFtZXRlcnMsICIo
dCkiLCAmcGFnZUlEKTsKLSAgICAgICAgV2ViS2l0V2ViUGFnZSogcGFnZSA9IGdldFdlYlBhZ2Uo
V0VCS0lUX1dFQl9FWFRFTlNJT04odXNlckRhdGEpLCBwYWdlSUQsIGludm9jYXRpb24pOwotICAg
ICAgICBpZiAoIXBhZ2UpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgV2ViS2l0RE9N
RG9jdW1lbnQqIGRvY3VtZW50ID0gd2Via2l0X3dlYl9wYWdlX2dldF9kb21fZG9jdW1lbnQocGFn
ZSk7Ci0gICAgICAgIEdPd25QdHI8Y2hhcj4gdGl0bGUod2Via2l0X2RvbV9kb2N1bWVudF9nZXRf
dGl0bGUoZG9jdW1lbnQpKTsKLSAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVy
bl92YWx1ZShpbnZvY2F0aW9uLCBnX3ZhcmlhbnRfbmV3KCIocykiLCB0aXRsZS5nZXQoKSkpOwot
ICAgIH0gZWxzZSBpZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAiUnVuSmF2YVNjcmlwdEluSXNv
bGF0ZWRXb3JsZCIpKSB7Ci0gICAgICAgIHVpbnQ2NF90IHBhZ2VJRDsKLSAgICAgICAgY29uc3Qg
Y2hhciogc2NyaXB0OwotICAgICAgICBnX3ZhcmlhbnRfZ2V0KHBhcmFtZXRlcnMsICIodCZzKSIs
ICZwYWdlSUQsICZzY3JpcHQpOwotICAgICAgICBXZWJLaXRXZWJQYWdlKiBwYWdlID0gZ2V0V2Vi
UGFnZShXRUJLSVRfV0VCX0VYVEVOU0lPTih1c2VyRGF0YSksIHBhZ2VJRCwgaW52b2NhdGlvbik7
Ci0gICAgICAgIGlmICghcGFnZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBHUmVm
UHRyPFdlYktpdFNjcmlwdFdvcmxkPiB3b3JsZCA9IGFkb3B0R1JlZih3ZWJraXRfc2NyaXB0X3dv
cmxkX25ldygpKTsKLSAgICAgICAgZ19hc3NlcnQod2Via2l0X3NjcmlwdF93b3JsZF9nZXRfZGVm
YXVsdCgpICE9IHdvcmxkLmdldCgpKTsKLSAgICAgICAgV2ViS2l0RnJhbWUqIGZyYW1lID0gd2Vi
a2l0X3dlYl9wYWdlX2dldF9tYWluX2ZyYW1lKHBhZ2UpOwotICAgICAgICBKU0dsb2JhbENvbnRl
eHRSZWYganNDb250ZXh0ID0gd2Via2l0X2ZyYW1lX2dldF9qYXZhc2NyaXB0X2NvbnRleHRfZm9y
X3NjcmlwdF93b3JsZChmcmFtZSwgd29ybGQuZ2V0KCkpOwotICAgICAgICBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4ganNTY3JpcHQoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KHNjcmlwdCkpOwotICAgICAgICBKU0V2YWx1YXRlU2NyaXB0KGpzQ29udGV4dCwganNTY3JpcHQu
Z2V0KCksIDAsIDAsIDAsIDApOwotICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9jYXRpb25fcmV0
dXJuX3ZhbHVlKGludm9jYXRpb24sIDApOwotICAgIH0gZWxzZSBpZiAoIWdfc3RyY21wMChtZXRo
b2ROYW1lLCAiQWJvcnRQcm9jZXNzIikpIHsKLSAgICAgICAgYWJvcnQoKTsKLSAgICB9Ci19Ci0K
LXN0YXRpYyBjb25zdCBHREJ1c0ludGVyZmFjZVZUYWJsZSBpbnRlcmZhY2VWaXJ0dWFsVGFibGUg
PSB7Ci0gICAgbWV0aG9kQ2FsbENhbGxiYWNrLCAwLCAwLCB7IDAsIH0KLX07Ci0KLXN0YXRpYyB2
b2lkIGJ1c0FjcXVpcmVkQ2FsbGJhY2soR0RCdXNDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBjb25z
dCBjaGFyKiBuYW1lLCBncG9pbnRlciB1c2VyRGF0YSkKLXsKLSAgICBzdGF0aWMgR0RCdXNOb2Rl
SW5mbyAqaW50cm9zcGVjdGlvbkRhdGEgPSAwOwotICAgIGlmICghaW50cm9zcGVjdGlvbkRhdGEp
Ci0gICAgICAgIGludHJvc3BlY3Rpb25EYXRhID0gZ19kYnVzX25vZGVfaW5mb19uZXdfZm9yX3ht
bChpbnRyb3NwZWN0aW9uWE1MLCAwKTsKLQotICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKLSAg
ICB1bnNpZ25lZCByZWdpc3RyYXRpb25JRCA9IGdfZGJ1c19jb25uZWN0aW9uX3JlZ2lzdGVyX29i
amVjdCgKLSAgICAgICAgY29ubmVjdGlvbiwKLSAgICAgICAgIi9vcmcvd2Via2l0L2d0ay9XZWJF
eHRlbnNpb25UZXN0IiwKLSAgICAgICAgaW50cm9zcGVjdGlvbkRhdGEtPmludGVyZmFjZXNbMF0s
Ci0gICAgICAgICZpbnRlcmZhY2VWaXJ0dWFsVGFibGUsCi0gICAgICAgIGdfb2JqZWN0X3JlZih1
c2VyRGF0YSksCi0gICAgICAgIHN0YXRpY19jYXN0PEdEZXN0cm95Tm90aWZ5PihnX29iamVjdF91
bnJlZiksCi0gICAgICAgICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgaWYgKCFyZWdpc3RyYXRpb25J
RCkKLSAgICAgICAgZ193YXJuaW5nKCJGYWlsZWQgdG8gcmVnaXN0ZXIgb2JqZWN0OiAlc1xuIiwg
ZXJyb3ItPm1lc3NhZ2UpOwotCi0gICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QodXNlckRh
dGEpLCAiZGJ1cy1jb25uZWN0aW9uIiwgY29ubmVjdGlvbik7Ci0gICAgd2hpbGUgKGRlbGF5ZWRT
aWduYWxzUXVldWUuc2l6ZSgpKSB7Ci0gICAgICAgIE93blB0cjxEZWxheWVkU2lnbmFsPiBkZWxh
eWVkU2lnbmFsID0gZGVsYXllZFNpZ25hbHNRdWV1ZS50YWtlRmlyc3QoKTsKLSAgICAgICAgc3dp
dGNoIChkZWxheWVkU2lnbmFsLT50eXBlKSB7Ci0gICAgICAgIGNhc2UgRG9jdW1lbnRMb2FkZWRT
aWduYWw6Ci0gICAgICAgICAgICBlbWl0RG9jdW1lbnRMb2FkZWQoY29ubmVjdGlvbik7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBVUklDaGFuZ2VkU2lnbmFsOgotICAgICAgICAg
ICAgZW1pdFVSSUNoYW5nZWQoY29ubmVjdGlvbiwgZGVsYXllZFNpZ25hbC0+dXJpLmRhdGEoKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLX0KLQotZXh0ZXJuICJDIiB2
b2lkIHdlYmtpdF93ZWJfZXh0ZW5zaW9uX2luaXRpYWxpemUoV2ViS2l0V2ViRXh0ZW5zaW9uKiBl
eHRlbnNpb24pCi17Ci0gICAgZ19zaWduYWxfY29ubmVjdChleHRlbnNpb24sICJwYWdlLWNyZWF0
ZWQiLCBHX0NBTExCQUNLKHBhZ2VDcmVhdGVkQ2FsbGJhY2spLCBleHRlbnNpb24pOwotICAgIGdf
c2lnbmFsX2Nvbm5lY3Qod2Via2l0X3NjcmlwdF93b3JsZF9nZXRfZGVmYXVsdCgpLCAid2luZG93
LW9iamVjdC1jbGVhcmVkIiwgR19DQUxMQkFDSyh3aW5kb3dPYmplY3RDbGVhcmVkKSwgMCk7Ci0K
LSAgICBnX2J1c19vd25fbmFtZSgKLSAgICAgICAgR19CVVNfVFlQRV9TRVNTSU9OLAotICAgICAg
ICAib3JnLndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9uVGVzdCIsCi0gICAgICAgIEdfQlVTX05BTUVf
T1dORVJfRkxBR1NfTk9ORSwKLSAgICAgICAgYnVzQWNxdWlyZWRDYWxsYmFjaywKLSAgICAgICAg
MCwgMCwKLSAgICAgICAgZ19vYmplY3RfcmVmKGV4dGVuc2lvbiksCi0gICAgICAgIHN0YXRpY19j
YXN0PEdEZXN0cm95Tm90aWZ5PihnX29iamVjdF91bnJlZikpOwotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViS2l0VGVzdEJ1cy5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJLaXRUZXN0QnVzLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGMyZDNmNjM4YjE2Y2E5ZjI5MDk2YzIzOWYy
ODZlNjJkYjI3MjBiNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJLaXRUZXN0QnVz
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJLaXRU
ZXN0QnVzLmgiCi0KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLVdlYktpdFRlc3RCdXM6OldlYktpdFRlc3RCdXMoKQot
ICAgIDogbV9waWQoLTEpCi17Ci19Ci0KLWJvb2wgV2ViS2l0VGVzdEJ1czo6cnVuKCkKLXsKLSAg
ICAvLyBGSVhNRTogVXNlIEdUZXN0REJ1cyB3aGVuIHdlIGJ1bXAgZ2xpYiB0byAyLjM0LgotICAg
IEdPd25QdHI8Y2hhcj4gZGJ1c0xhdW5jaChnX2ZpbmRfcHJvZ3JhbV9pbl9wYXRoKCJkYnVzLWxh
dW5jaCIpKTsKLSAgICBpZiAoIWRidXNMYXVuY2gpIHsKLSAgICAgICAgZ193YXJuaW5nKCJFcnJv
ciBzdGFydGluZyBEQlVTIGRhZW1vbjogZGJ1cy1sYXVuY2ggbm90IGZvdW5kIGluIHBhdGgiKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEdPd25QdHI8Y2hhcj4gb3V0cHV0
OwotICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKLSAgICBpZiAoIWdfc3Bhd25fY29tbWFuZF9s
aW5lX3N5bmMoZGJ1c0xhdW5jaC5nZXQoKSwgJm91dHB1dC5vdXRQdHIoKSwgMCwgMCwgJmVycm9y
Lm91dFB0cigpKSkgewotICAgICAgICBnX3dhcm5pbmcoIkVycm9yIHN0YXJ0aW5nIERCVVMgZGFl
bW9uOiAlcyIsIGVycm9yLT5tZXNzYWdlKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIFN0cmluZyBvdXRwdXRTdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KG91dHB1dC5nZXQo
KSk7Ci0gICAgVmVjdG9yPFN0cmluZz4gbGluZXM7Ci0gICAgb3V0cHV0U3RyaW5nLnNwbGl0KFVD
aGFyKCdcbicpLCAvKiBhbGxvd0VtcHR5RW50cmllcyAqLyBmYWxzZSwgbGluZXMpOwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbGluZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY2hhcioq
IGtleVZhbHVlID0gZ19zdHJzcGxpdChsaW5lc1tpXS51dGY4KCkuZGF0YSgpLCAiPSIsIDIpOwot
ICAgICAgICBnX2Fzc2VydF9jbXB1aW50KGdfc3Rydl9sZW5ndGgoa2V5VmFsdWUpLCA9PSwgMik7
Ci0gICAgICAgIGlmICghZ19zdHJjbXAwKGtleVZhbHVlWzBdLCAiREJVU19TRVNTSU9OX0JVU19B
RERSRVNTIikpIHsKLSAgICAgICAgICAgIG1fYWRkcmVzcyA9IGtleVZhbHVlWzFdOwotICAgICAg
ICAgICAgZ19zZXRlbnYoIkRCVVNfU0VTU0lPTl9CVVNfQUREUkVTUyIsIGtleVZhbHVlWzFdLCBU
UlVFKTsKLSAgICAgICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKGtleVZhbHVlWzBdLCAiREJVU19T
RVNTSU9OX0JVU19QSUQiKSkKLSAgICAgICAgICAgIG1fcGlkID0gZ19hc2NpaV9zdHJ0b2xsKGtl
eVZhbHVlWzFdLCAwLCAxMCk7Ci0gICAgICAgIGdfc3RyZnJlZXYoa2V5VmFsdWUpOwotICAgIH0K
LQotICAgIHJldHVybiBtX3BpZCA+IDA7Ci19Ci0KLVdlYktpdFRlc3RCdXM6On5XZWJLaXRUZXN0
QnVzKCkKLXsKLSAgICBnX3Vuc2V0ZW52KCJEQlVTX1NFU1NJT05fQlVTX0FERFJFU1MiKTsKLQot
ICAgIGlmIChtX3BpZCAhPSAtMSkKLSAgICAgICAga2lsbChtX3BpZCwgU0lHVEVSTSk7Ci19Ci0K
LUdEQnVzQ29ubmVjdGlvbiogV2ViS2l0VGVzdEJ1czo6Z2V0T3JDcmVhdGVDb25uZWN0aW9uKCkK
LXsKLSAgICBpZiAobV9jb25uZWN0aW9uKQotICAgICAgICByZXR1cm4gbV9jb25uZWN0aW9uLmdl
dCgpOwotCi0gICAgZ19hc3NlcnQoIW1fYWRkcmVzcy5pc051bGwoKSk7Ci0gICAgbV9jb25uZWN0
aW9uID0gYWRvcHRHUmVmKGdfZGJ1c19jb25uZWN0aW9uX25ld19mb3JfYWRkcmVzc19zeW5jKG1f
YWRkcmVzcy5kYXRhKCksCi0gICAgICAgIHN0YXRpY19jYXN0PEdEQnVzQ29ubmVjdGlvbkZsYWdz
PihHX0RCVVNfQ09OTkVDVElPTl9GTEFHU19BVVRIRU5USUNBVElPTl9DTElFTlQgfCBHX0RCVVNf
Q09OTkVDVElPTl9GTEFHU19NRVNTQUdFX0JVU19DT05ORUNUSU9OKSwKLSAgICAgICAgMCwgMCwg
MCkpOwotICAgIHJldHVybiBtX2Nvbm5lY3Rpb24uZ2V0KCk7Ci19Ci0KLXN0YXRpYyB2b2lkIG9u
TmFtZUFwcGVhcmVkKEdEQnVzQ29ubmVjdGlvbiosIGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwg
Z3BvaW50ZXIgdXNlckRhdGEpCi17Ci0gICAgZ19tYWluX2xvb3BfcXVpdChzdGF0aWNfY2FzdDxH
TWFpbkxvb3AqPih1c2VyRGF0YSkpOwotfQotCi1HREJ1c1Byb3h5KiBXZWJLaXRUZXN0QnVzOjpj
cmVhdGVQcm94eShjb25zdCBjaGFyKiBzZXJ2aWNlTmFtZSwgY29uc3QgY2hhciogb2JqZWN0UGF0
aCwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgR01haW5Mb29wKiBtYWluTG9vcCkKLXsKLSAg
ICB1bnNpZ25lZCB3YXRjaGVySUQgPSBnX2J1c193YXRjaF9uYW1lX29uX2Nvbm5lY3Rpb24oZ2V0
T3JDcmVhdGVDb25uZWN0aW9uKCksIHNlcnZpY2VOYW1lLCBHX0JVU19OQU1FX1dBVENIRVJfRkxB
R1NfTk9ORSwgb25OYW1lQXBwZWFyZWQsIDAsIG1haW5Mb29wLCAwKTsKLSAgICBnX21haW5fbG9v
cF9ydW4obWFpbkxvb3ApOwotICAgIGdfYnVzX3Vud2F0Y2hfbmFtZSh3YXRjaGVySUQpOwotCi0g
ICAgR0RCdXNQcm94eSogcHJveHkgPSBnX2RidXNfcHJveHlfbmV3X3N5bmMoCi0gICAgICAgIGNv
bm5lY3Rpb24oKSwKLSAgICAgICAgR19EQlVTX1BST1hZX0ZMQUdTX0RPX05PVF9BVVRPX1NUQVJU
LAotICAgICAgICAwLCAvLyBHREJ1c0ludGVyZmFjZUluZm8KLSAgICAgICAgc2VydmljZU5hbWUs
Ci0gICAgICAgIG9iamVjdFBhdGgsCi0gICAgICAgIGludGVyZmFjZU5hbWUsCi0gICAgICAgIDAs
IC8vIEdDYW5jZWxsYWJsZQotICAgICAgICAwKTsKLSAgICBnX2Fzc2VydChwcm94eSk7Ci0gICAg
cmV0dXJuIHByb3h5OwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvV2ViS2l0VGVzdEJ1cy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvV2ViS2l0VGVzdEJ1cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBiOWY4NTZiMjc1M2VmMmZjZWI0NmQxZmMwNDFlOWRkNDUxNWY2NDU0Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL1dlYktpdFRlc3RCdXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBXZWJL
aXRUZXN0QnVzX2gKLSNkZWZpbmUgV2ViS2l0VGVzdEJ1c19oCi0KLSNpbmNsdWRlIDxnaW8vZ2lv
Lmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLQotY2xhc3MgV2ViS2l0VGVzdEJ1cyB7Ci1wdWJsaWM6Ci0gICAgV2ViS2l0
VGVzdEJ1cygpOwotICAgIHZpcnR1YWwgfldlYktpdFRlc3RCdXMoKTsKLQotICAgIGJvb2wgcnVu
KCk7Ci0gICAgR0RCdXNQcm94eSogY3JlYXRlUHJveHkoY29uc3QgY2hhciogc2VydmljZU5hbWUs
IGNvbnN0IGNoYXIqIG9iamVjdFBhdGgsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIEdNYWlu
TG9vcCopOwotICAgIEdEQnVzQ29ubmVjdGlvbiogY29ubmVjdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fY29ubmVjdGlvbi5nZXQoKTsgfQotCi1wcml2YXRlOgotICAgIEdEQnVzQ29ubmVjdGlvbiog
Z2V0T3JDcmVhdGVDb25uZWN0aW9uKCk7Ci0KLSAgICBwaWRfdCBtX3BpZDsKLSAgICBDU3RyaW5n
IG1fYWRkcmVzczsKLSAgICBHUmVmUHRyPEdEQnVzQ29ubmVjdGlvbj4gbV9jb25uZWN0aW9uOwot
fTsKLQotI2VuZGlmIC8vIFdlYktpdFRlc3RCdXNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViS2l0VGVzdFNlcnZlci5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJLaXRUZXN0U2VydmVyLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThiNGE5YTJiOGZkOWI3NDdkODkyNjdlMWJhZmM2
YmE3ODQ3ODVkYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJLaXRUZXN0U2VydmVy
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYktpdFRl
c3RTZXJ2ZXIuaCIKLQotI2luY2x1ZGUgIlRlc3RNYWluLmgiCi0jaW5jbHVkZSA8d3RmL2dvYmpl
Y3QvR093blB0ci5oPgotCi1XZWJLaXRUZXN0U2VydmVyOjpXZWJLaXRUZXN0U2VydmVyKFNlcnZl
clR5cGUgdHlwZSkKLXsKLSAgICBHT3duUHRyPGNoYXI+IHNzbENlcnRpZmljYXRlRmlsZTsKLSAg
ICBHT3duUHRyPGNoYXI+IHNzbEtleUZpbGU7Ci0gICAgaWYgKHR5cGUgPT0gU2VydmVySFRUUFMp
IHsKLSAgICAgICAgQ1N0cmluZyByZXNvdXJjZXNEaXIgPSBUZXN0OjpnZXRSZXNvdXJjZXNEaXIo
KTsKLSAgICAgICAgc3NsQ2VydGlmaWNhdGVGaWxlLnNldChnX2J1aWxkX2ZpbGVuYW1lKHJlc291
cmNlc0Rpci5kYXRhKCksICJ0ZXN0LWNlcnQucGVtIiwgTlVMTCkpOwotICAgICAgICBzc2xLZXlG
aWxlLnNldChnX2J1aWxkX2ZpbGVuYW1lKHJlc291cmNlc0Rpci5kYXRhKCksICJ0ZXN0LWtleS5w
ZW0iLCBOVUxMKSk7Ci0gICAgfQotCi0gICAgR1JlZlB0cjxTb3VwQWRkcmVzcz4gYWRkcmVzcyA9
IGFkb3B0R1JlZihzb3VwX2FkZHJlc3NfbmV3KCIxMjcuMC4wLjEiLCBTT1VQX0FERFJFU1NfQU5Z
X1BPUlQpKTsKLSAgICBzb3VwX2FkZHJlc3NfcmVzb2x2ZV9zeW5jKGFkZHJlc3MuZ2V0KCksIDAp
OwotCi0gICAgbV9zb3VwU2VydmVyID0gYWRvcHRHUmVmKHNvdXBfc2VydmVyX25ldyhTT1VQX1NF
UlZFUl9JTlRFUkZBQ0UsIGFkZHJlc3MuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTT1VQX1NFUlZFUl9TU0xfQ0VSVF9GSUxFLCBzc2xDZXJ0aWZp
Y2F0ZUZpbGUuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTT1VQX1NFUlZFUl9TU0xfS0VZX0ZJTEUsIHNzbEtleUZpbGUuZ2V0KCksIE5VTEwpKTsK
LSAgICBtX2Jhc2VVUkkgPSB0eXBlID09IFNlcnZlckhUVFBTID8gc291cF91cmlfbmV3KCJodHRw
czovLzEyNy4wLjAuMS8iKSA6IHNvdXBfdXJpX25ldygiaHR0cDovLzEyNy4wLjAuMS8iKTsKLSAg
ICBzb3VwX3VyaV9zZXRfcG9ydChtX2Jhc2VVUkksIHNvdXBfc2VydmVyX2dldF9wb3J0KG1fc291
cFNlcnZlci5nZXQoKSkpOwotfQotCi1XZWJLaXRUZXN0U2VydmVyOjp+V2ViS2l0VGVzdFNlcnZl
cigpCi17Ci0gICAgc291cF91cmlfZnJlZShtX2Jhc2VVUkkpOwotfQotCi12b2lkIFdlYktpdFRl
c3RTZXJ2ZXI6OnJ1bihTb3VwU2VydmVyQ2FsbGJhY2sgc2VydmVyQ2FsbGJhY2spCi17Ci0gICAg
c291cF9zZXJ2ZXJfcnVuX2FzeW5jKG1fc291cFNlcnZlci5nZXQoKSk7Ci0gICAgc291cF9zZXJ2
ZXJfYWRkX2hhbmRsZXIobV9zb3VwU2VydmVyLmdldCgpLCAwLCBzZXJ2ZXJDYWxsYmFjaywgMCwg
MCk7Ci19Ci0KLUNTdHJpbmcgV2ViS2l0VGVzdFNlcnZlcjo6Z2V0VVJJRm9yUGF0aChjb25zdCBj
aGFyKiBwYXRoKQotewotICAgIFNvdXBVUkkqIHVyaSA9IHNvdXBfdXJpX25ld193aXRoX2Jhc2Uo
bV9iYXNlVVJJLCBwYXRoKTsKLSAgICBHT3duUHRyPGdjaGFyPiB1cmlTdHJpbmcoc291cF91cmlf
dG9fc3RyaW5nKHVyaSwgRkFMU0UpKTsKLSAgICBzb3VwX3VyaV9mcmVlKHVyaSk7Ci0gICAgcmV0
dXJuIHVyaVN0cmluZy5nZXQoKTsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViS2l0VGVzdFNlcnZlci5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViS2l0VGVzdFNlcnZlci5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBkNDYyNmY2YjE2ZGJmMjhlZGJiMjE3MzNkMmM1OGE1OTRkNDJkZTYy
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYktpdFRlc3RTZXJ2ZXIuaAorKysgL2Rl
di9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlh
IFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0g
Ki8KLQotI2lmbmRlZiBXZWJLaXRUZXN0U2VydmVyX2gKLSNkZWZpbmUgV2ViS2l0VGVzdFNlcnZl
cl9oCi0KLSNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KLSNpbmNsdWRlIDx3ZWJraXQyL3dlYmtp
dDIuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgotCi1jbGFzcyBXZWJLaXRUZXN0U2VydmVyIHsKLXB1YmxpYzoKLQotICAg
IGVudW0gU2VydmVyVHlwZSB7Ci0gICAgICAgIFNlcnZlckhUVFAsCi0gICAgICAgIFNlcnZlckhU
VFBTCi0gICAgfTsKLQotICAgIFdlYktpdFRlc3RTZXJ2ZXIoU2VydmVyVHlwZSB0eXBlID0gU2Vy
dmVySFRUUCk7Ci0gICAgdmlydHVhbCB+V2ViS2l0VGVzdFNlcnZlcigpOwotCi0gICAgU291cFVS
SSogYmFzZVVSSSgpIHsgcmV0dXJuIG1fYmFzZVVSSTsgfQotCi0gICAgQ1N0cmluZyBnZXRVUklG
b3JQYXRoKGNvbnN0IGNoYXIqIHBhdGgpOwotICAgIHZvaWQgcnVuKFNvdXBTZXJ2ZXJDYWxsYmFj
ayk7Ci0KLXByaXZhdGU6Ci0gICAgR1JlZlB0cjxTb3VwU2VydmVyPiBtX3NvdXBTZXJ2ZXI7Ci0g
ICAgU291cFVSSSogbV9iYXNlVVJJOwotfTsKLQotI2VuZGlmIC8vIFdlYktpdFRlc3RTZXJ2ZXJf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2Vi
UHJvY2Vzc1Rlc3QuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
V2ViUHJvY2Vzc1Rlc3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTFhNmU3
NzY2ODE5OGNiMTZiOWI4MTgyN2VhMTg3ZjUyZmU2M2IzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL1dlYlByb2Nlc3NUZXN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzVGVzdC5oIgotCi0jaW5jbHVkZSA8Z2lvL2dpby5oPgot
I2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KLQotdHlwZWRlZiBIYXNoTWFwPFN0cmlu
Zywgc3RkOjpmdW5jdGlvbjxQYXNzT3duUHRyPFdlYlByb2Nlc3NUZXN0PiAoKT4+IFRlc3RzTWFw
Owotc3RhdGljIFRlc3RzTWFwJiB0ZXN0c01hcCgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NB
TChUZXN0c01hcCwgc190ZXN0c01hcCwgKCkpOwotICAgIHJldHVybiBzX3Rlc3RzTWFwOwotfQot
Ci12b2lkIFdlYlByb2Nlc3NUZXN0OjphZGQoY29uc3QgU3RyaW5nJiB0ZXN0TmFtZSwgc3RkOjpm
dW5jdGlvbjxQYXNzT3duUHRyPFdlYlByb2Nlc3NUZXN0PiAoKT4gY2xvc3VyZSkKLXsKLSAgICB0
ZXN0c01hcCgpLmFkZCh0ZXN0TmFtZSwgc3RkOjpmb3J3YXJkPHN0ZDo6ZnVuY3Rpb248UGFzc093
blB0cjxXZWJQcm9jZXNzVGVzdD4gKCk+PihjbG9zdXJlKSk7Ci19Ci0KLVBhc3NPd25QdHI8V2Vi
UHJvY2Vzc1Rlc3Q+IFdlYlByb2Nlc3NUZXN0OjpjcmVhdGUoY29uc3QgU3RyaW5nJiB0ZXN0TmFt
ZSkKLXsKLSAgICBnX2Fzc2VydCh0ZXN0c01hcCgpLmNvbnRhaW5zKHRlc3ROYW1lKSk7Ci0gICAg
cmV0dXJuIHRlc3RzTWFwKCkuZ2V0KHRlc3ROYW1lKSgpOwotfQotCi1zdGF0aWMgY29uc3QgY2hh
ciBpbnRyb3NwZWN0aW9uWE1MW10gPQotICAgICI8bm9kZT4iCi0gICAgIiA8aW50ZXJmYWNlIG5h
bWU9J29yZy53ZWJraXQuZ3RrLldlYlByb2Nlc3NUZXN0Jz4iCi0gICAgIiAgPG1ldGhvZCBuYW1l
PSdSdW5UZXN0Jz4iCi0gICAgIiAgIDxhcmcgdHlwZT0ncycgbmFtZT0ncGF0aCcgZGlyZWN0aW9u
PSdpbicvPiIKLSAgICAiICAgPGFyZyB0eXBlPSdhe3N2fScgbmFtZT0nYXJncycgZGlyZWN0aW9u
PSdpbicvPiIKLSAgICAiICAgPGFyZyB0eXBlPSdiJyBuYW1lPSdyZXN1bHQnIGRpcmVjdGlvbj0n
b3V0Jy8+IgotICAgICIgIDwvbWV0aG9kPiIKLSAgICAiIDwvaW50ZXJmYWNlPiIKLSAgICAiPC9u
b2RlPiI7Ci0KLXN0YXRpYyB2b2lkIG1ldGhvZENhbGxDYWxsYmFjayhHREJ1c0Nvbm5lY3Rpb24q
IGNvbm5lY3Rpb24sIGNvbnN0IGNoYXIqIHNlbmRlciwgY29uc3QgY2hhciogb2JqZWN0UGF0aCwg
Y29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogbWV0aG9kTmFtZSwgR1Zhcmlh
bnQqIHBhcmFtZXRlcnMsIEdEQnVzTWV0aG9kSW52b2NhdGlvbiogaW52b2NhdGlvbiwgZ3BvaW50
ZXIgdXNlckRhdGEpCi17Ci0gICAgaWYgKGdfc3RyY21wMChpbnRlcmZhY2VOYW1lLCAib3JnLndl
YmtpdC5ndGsuV2ViUHJvY2Vzc1Rlc3QiKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFn
X3N0cmNtcDAobWV0aG9kTmFtZSwgIlJ1blRlc3QiKSkgewotICAgICAgICBjb25zdCBjaGFyKiB0
ZXN0UGF0aDsKLSAgICAgICAgR1ZhcmlhbnQqIGFyZ3M7Ci0gICAgICAgIGdfdmFyaWFudF9nZXQo
cGFyYW1ldGVycywgIigmc0Bhe3N2fSkiLCAmdGVzdFBhdGgsICZhcmdzKTsKLSAgICAgICAgT3du
UHRyPFdlYlByb2Nlc3NUZXN0PiB0ZXN0ID0gV2ViUHJvY2Vzc1Rlc3Q6OmNyZWF0ZShTdHJpbmc6
OmZyb21VVEY4KHRlc3RQYXRoKSk7Ci0gICAgICAgIGJvb2wgcmVzdWx0ID0gdGVzdC0+cnVuVGVz
dChnX3N0cnJzdHIodGVzdFBhdGgsICIvIikgKyAxLCBXRUJLSVRfV0VCX0VYVEVOU0lPTih1c2Vy
RGF0YSksIGFyZ3MpOwotICAgICAgICBnX3ZhcmlhbnRfdW5yZWYoYXJncyk7Ci0KLSAgICAgICAg
Z19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVybl92YWx1ZShpbnZvY2F0aW9uLCBnX3Zhcmlh
bnRfbmV3KCIoYikiLCByZXN1bHQpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZ19hc3NlcnRfbm90
X3JlYWNoZWQoKTsKLX0KLQotc3RhdGljIGNvbnN0IEdEQnVzSW50ZXJmYWNlVlRhYmxlIGludGVy
ZmFjZVZpcnR1YWxUYWJsZSA9IHsKLSAgICBtZXRob2RDYWxsQ2FsbGJhY2ssIDAsIDAsIHsgMCwg
fQotfTsKLQotc3RhdGljIHZvaWQgYnVzQWNxdWlyZWRDYWxsYmFjayhHREJ1c0Nvbm5lY3Rpb24q
IGNvbm5lY3Rpb24sIGNvbnN0IGNoYXIqIG5hbWUsIGdwb2ludGVyIHVzZXJEYXRhKQotewotICAg
IHN0YXRpYyBHREJ1c05vZGVJbmZvICppbnRyb3NwZWN0aW9uRGF0YSA9IDA7Ci0gICAgaWYgKCFp
bnRyb3NwZWN0aW9uRGF0YSkKLSAgICAgICAgaW50cm9zcGVjdGlvbkRhdGEgPSBnX2RidXNfbm9k
ZV9pbmZvX25ld19mb3JfeG1sKGludHJvc3BlY3Rpb25YTUwsIDApOwotCi0gICAgR093blB0cjxH
RXJyb3I+IGVycm9yOwotICAgIHVuc2lnbmVkIHJlZ2lzdHJhdGlvbklEID0gZ19kYnVzX2Nvbm5l
Y3Rpb25fcmVnaXN0ZXJfb2JqZWN0KAotICAgICAgICBjb25uZWN0aW9uLAotICAgICAgICAiL29y
Zy93ZWJraXQvZ3RrL1dlYlByb2Nlc3NUZXN0IiwKLSAgICAgICAgaW50cm9zcGVjdGlvbkRhdGEt
PmludGVyZmFjZXNbMF0sCi0gICAgICAgICZpbnRlcmZhY2VWaXJ0dWFsVGFibGUsCi0gICAgICAg
IGdfb2JqZWN0X3JlZih1c2VyRGF0YSksCi0gICAgICAgIHN0YXRpY19jYXN0PEdEZXN0cm95Tm90
aWZ5PihnX29iamVjdF91bnJlZiksCi0gICAgICAgICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgaWYg
KCFyZWdpc3RyYXRpb25JRCkKLSAgICAgICAgZ193YXJuaW5nKCJGYWlsZWQgdG8gcmVnaXN0ZXIg
b2JqZWN0OiAlc1xuIiwgZXJyb3ItPm1lc3NhZ2UpOwotfQotCi1leHRlcm4gIkMiIHZvaWQgd2Vi
a2l0X3dlYl9leHRlbnNpb25faW5pdGlhbGl6ZShXZWJLaXRXZWJFeHRlbnNpb24qIGV4dGVuc2lv
bikKLXsKLSAgICBnX2J1c19vd25fbmFtZSgKLSAgICAgICAgR19CVVNfVFlQRV9TRVNTSU9OLAot
ICAgICAgICAib3JnLndlYmtpdC5ndGsuV2ViUHJvY2Vzc1Rlc3QiLAotICAgICAgICBHX0JVU19O
QU1FX09XTkVSX0ZMQUdTX05PTkUsCi0gICAgICAgIGJ1c0FjcXVpcmVkQ2FsbGJhY2ssCi0gICAg
ICAgIDAsIDAsCi0gICAgICAgIGdfb2JqZWN0X3JlZihleHRlbnNpb24pLAotICAgICAgICBzdGF0
aWNfY2FzdDxHRGVzdHJveU5vdGlmeT4oZ19vYmplY3RfdW5yZWYpKTsKLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlByb2Nlc3NUZXN0Lmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJQcm9jZXNzVGVzdC5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlM2VlZGQwYjQxNDM3ZDIyZTZlZmVlMDU2
OTg3OTJmYmVlYTBiOTA2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlByb2Nlc3NU
ZXN0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdC13ZWItZXh0ZW5zaW9u
Lmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5o
PgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdIYXNoLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLWNsYXNzIFdl
YlByb2Nlc3NUZXN0IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5XZWJQcm9jZXNzVGVzdCgpIHsg
fQotICAgIHZpcnR1YWwgYm9vbCBydW5UZXN0KGNvbnN0IGNoYXIqIHRlc3ROYW1lLCBXZWJLaXRX
ZWJFeHRlbnNpb24qLCBHVmFyaWFudCogYXJncykgPSAwOwotCi0gICAgc3RhdGljIHZvaWQgYWRk
KGNvbnN0IFN0cmluZyYgdGVzdE5hbWUsIHN0ZDo6ZnVuY3Rpb248UGFzc093blB0cjxXZWJQcm9j
ZXNzVGVzdD4gKCk+KTsKLSAgICBzdGF0aWMgUGFzc093blB0cjxXZWJQcm9jZXNzVGVzdD4gY3Jl
YXRlKGNvbnN0IFN0cmluZyYgdGVzdE5hbWUpOwotfTsKLQotI2RlZmluZSBSRUdJU1RFUl9URVNU
KENsYXNzTmFtZSwgVGVzdE5hbWUpIFwKLSAgICBXZWJQcm9jZXNzVGVzdDo6YWRkKFN0cmluZzo6
ZnJvbVVURjgoVGVzdE5hbWUpLCBDbGFzc05hbWU6OmNyZWF0ZSkKLQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViUHJvY2Vzc1Rlc3RSdW5uZXIu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViUHJvY2Vzc1Rl
c3RSdW5uZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTNjZDk2NTYyYzBm
MDBhMjA4NGUwZmM1ODAyYmM2MjVjMWFiMWMwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L1dlYlByb2Nlc3NUZXN0UnVubmVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzVGVzdFJ1bm5lci5oIgotCi0jaW5jbHVkZSA8d3RmL2dv
YmplY3QvR093blB0ci5oPgotCi1XZWJQcm9jZXNzVGVzdFJ1bm5lcjo6V2ViUHJvY2Vzc1Rlc3RS
dW5uZXIoKQotICAgIDogbV9tYWluTG9vcChnX21haW5fbG9vcF9uZXcoMCwgVFJVRSkpCi0gICAg
LCBtX2J1cyhhZG9wdEdSZWYoZ190ZXN0X2RidXNfbmV3KEdfVEVTVF9EQlVTX05PTkUpKSkKLXsK
LSAgICAvLyBTYXZlIHRoZSBESVNQTEFZIGVudiB2YXIgdG8gcmVzdG9yZSBpdCBhZnRlciBjYWxs
aW5nIGdfdGVzdF9kYnVzX3VwKCkgdGhhdCB1bnNldHMgaXQuCi0gICAgLy8gU2VlIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjU2MjEuCi0gICAgY29uc3QgY2hhciog
ZGlzcGxheSA9IGdfZ2V0ZW52KCJESVNQTEFZIik7Ci0gICAgZ190ZXN0X2RidXNfdXAobV9idXMu
Z2V0KCkpOwotICAgIGdfc2V0ZW52KCJESVNQTEFZIiwgZGlzcGxheSwgRkFMU0UpOwotICAgIG1f
Y29ubmVjdGlvbiA9IGFkb3B0R1JlZihnX2J1c19nZXRfc3luYyhHX0JVU19UWVBFX1NFU1NJT04s
IDAsIDApKTsKLX0KLQotV2ViUHJvY2Vzc1Rlc3RSdW5uZXI6On5XZWJQcm9jZXNzVGVzdFJ1bm5l
cigpCi17Ci0gICAgZ19tYWluX2xvb3BfdW5yZWYobV9tYWluTG9vcCk7Ci0KLSAgICAvLyBnX3Rl
c3RfZGJ1c19kb3duIHdhaXRzIHVudGlsIHRoZSBjb25uZWN0aW9uIGlzIGZyZWVkLCBzbyByZWxl
YXNlIG91ciByZWZzIGV4cGxpY2l0bHkgYmVmb3JlIGNhbGxpbmcgaXQuCi0gICAgbV9jb25uZWN0
aW9uID0gMDsKLSAgICBtX3Byb3h5ID0gMDsKLSAgICBnX3Rlc3RfZGJ1c19kb3duKG1fYnVzLmdl
dCgpKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzVGVzdFJ1bm5lcjo6cHJveHlDcmVhdGVkQ2FsbGJh
Y2soR09iamVjdCosIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBXZWJQcm9jZXNzVGVzdFJ1bm5lciog
dGVzdFJ1bm5lcikKLXsKLSAgICB0ZXN0UnVubmVyLT5tX3Byb3h5ID0gYWRvcHRHUmVmKGdfZGJ1
c19wcm94eV9uZXdfZmluaXNoKHJlc3VsdCwgMCkpOwotICAgIGdfbWFpbl9sb29wX3F1aXQodGVz
dFJ1bm5lci0+bV9tYWluTG9vcCk7Ci19Ci0KLUdEQnVzUHJveHkqIFdlYlByb2Nlc3NUZXN0UnVu
bmVyOjpwcm94eSgpCi17Ci0gICAgaWYgKG1fcHJveHkpCi0gICAgICAgIHJldHVybiBtX3Byb3h5
LmdldCgpOwotCi0gICAgZ19kYnVzX3Byb3h5X25ldyhtX2Nvbm5lY3Rpb24uZ2V0KCksIEdfREJV
U19QUk9YWV9GTEFHU19ET19OT1RfQVVUT19TVEFSVCwgMCwKLSAgICAgICAgIm9yZy53ZWJraXQu
Z3RrLldlYlByb2Nlc3NUZXN0IiwgIi9vcmcvd2Via2l0L2d0ay9XZWJQcm9jZXNzVGVzdCIsICJv
cmcud2Via2l0Lmd0ay5XZWJQcm9jZXNzVGVzdCIsCi0gICAgICAgIDAsIHJlaW50ZXJwcmV0X2Nh
c3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4oV2ViUHJvY2Vzc1Rlc3RSdW5uZXI6OnByb3h5Q3JlYXRl
ZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotICAg
IGdfYXNzZXJ0KG1fcHJveHkuZ2V0KCkpOwotCi0gICAgcmV0dXJuIG1fcHJveHkuZ2V0KCk7Ci19
Ci0KLXZvaWQgV2ViUHJvY2Vzc1Rlc3RSdW5uZXI6Om9uTmFtZUFwcGVhcmVkKEdEQnVzQ29ubmVj
dGlvbiosIGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgZ3BvaW50ZXIgdXNlckRhdGEpCi17Ci0g
ICAgV2ViUHJvY2Vzc1Rlc3RSdW5uZXIqIHRlc3RSdW5uZXIgPSBzdGF0aWNfY2FzdDxXZWJQcm9j
ZXNzVGVzdFJ1bm5lcio+KHVzZXJEYXRhKTsKLSAgICBnX21haW5fbG9vcF9xdWl0KHRlc3RSdW5u
ZXItPm1fbWFpbkxvb3ApOwotfQotCi12b2lkIFdlYlByb2Nlc3NUZXN0UnVubmVyOjpvbk5hbWVW
YW5pc2hlZChHREJ1c0Nvbm5lY3Rpb24qLCBjb25zdCBjaGFyKiBuYW1lLCBncG9pbnRlciB1c2Vy
RGF0YSkKLXsKLSAgICBfZXhpdCgxKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzVGVzdFJ1bm5lcjo6
dGVzdEZpbmlzaGVkQ2FsbGJhY2soR0RCdXNQcm94eSogcHJveHksIEdBc3luY1Jlc3VsdCogcmVz
dWx0LCBXZWJQcm9jZXNzVGVzdFJ1bm5lciogdGVzdFJ1bm5lcikKLXsKLSAgICBHUmVmUHRyPEdW
YXJpYW50PiByZXR1cm5WYWx1ZSA9IGFkb3B0R1JlZihnX2RidXNfcHJveHlfY2FsbF9maW5pc2go
cHJveHksIHJlc3VsdCwgMCkpOwotICAgIGdfYXNzZXJ0KHJldHVyblZhbHVlLmdldCgpKTsKLSAg
ICBnYm9vbGVhbiB0ZXN0UmVzdWx0OwotICAgIGdfdmFyaWFudF9nZXQocmV0dXJuVmFsdWUuZ2V0
KCksICIoYikiLCAmdGVzdFJlc3VsdCk7Ci0gICAgdGVzdFJ1bm5lci0+ZmluaXNoVGVzdCh0ZXN0
UmVzdWx0KTsKLX0KLQotYm9vbCBXZWJQcm9jZXNzVGVzdFJ1bm5lcjo6cnVuVGVzdChjb25zdCBj
aGFyKiBzdWl0ZU5hbWUsIGNvbnN0IGNoYXIqIHRlc3ROYW1lLCBHVmFyaWFudCogYXJncykKLXsK
LSAgICBnX2Fzc2VydChnX3ZhcmlhbnRfaXNfb2ZfdHlwZShhcmdzLCBHX1ZBUklBTlRfVFlQRV9W
QVJESUNUKSk7Ci0KLSAgICB1bnNpZ25lZCB3YXRjaGVySUQgPSBnX2J1c193YXRjaF9uYW1lX29u
X2Nvbm5lY3Rpb24obV9jb25uZWN0aW9uLmdldCgpLCAib3JnLndlYmtpdC5ndGsuV2ViUHJvY2Vz
c1Rlc3QiLCBHX0JVU19OQU1FX1dBVENIRVJfRkxBR1NfTk9ORSwKLSAgICAgICAgV2ViUHJvY2Vz
c1Rlc3RSdW5uZXI6Om9uTmFtZUFwcGVhcmVkLCBXZWJQcm9jZXNzVGVzdFJ1bm5lcjo6b25OYW1l
VmFuaXNoZWQsIHRoaXMsIDApOwotICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLQot
ICAgIG1fdGVzdFJlc3VsdCA9IGZhbHNlOwotICAgIEdPd25QdHI8Y2hhcj4gdGVzdFBhdGgoZ19z
dHJkdXBfcHJpbnRmKCIlcy8lcyIsIHN1aXRlTmFtZSwgdGVzdE5hbWUpKTsKLSAgICBnX2RidXNf
cHJveHlfY2FsbCgKLSAgICAgICAgcHJveHkoKSwKLSAgICAgICAgIlJ1blRlc3QiLAotICAgICAg
ICBnX3ZhcmlhbnRfbmV3KCIoc0Bhe3N2fSkiLCB0ZXN0UGF0aC5nZXQoKSwgYXJncyksCi0gICAg
ICAgIEdfREJVU19DQUxMX0ZMQUdTX05PTkUsCi0gICAgICAgIC0xLCAwLAotICAgICAgICByZWlu
dGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KFdlYlByb2Nlc3NUZXN0UnVubmVyOjp0
ZXN0RmluaXNoZWRDYWxsYmFjayksCi0gICAgICAgIHRoaXMpOwotICAgIGdfbWFpbl9sb29wX3J1
bihtX21haW5Mb29wKTsKLSAgICBnX2J1c191bndhdGNoX25hbWUod2F0Y2hlcklEKTsKLQotICAg
IHJldHVybiBtX3Rlc3RSZXN1bHQ7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Rlc3RSdW5uZXI6OmZp
bmlzaFRlc3QoYm9vbCByZXN1bHQpCi17Ci0gICAgbV90ZXN0UmVzdWx0ID0gcmVzdWx0OwotICAg
IGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJQcm9jZXNzVGVzdFJ1bm5lci5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViUHJvY2Vzc1Rlc3RSdW5uZXIu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQwZmE5NjE1YzY2MjMxZDU5ODRiNzFh
M2YzODhkNDk3ZDU4YTA5MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJQcm9jZXNz
VGVzdFJ1bm5lci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFdlYlByb2Nlc3NUZXN0UnVubmVyX2gK
LSNkZWZpbmUgV2ViUHJvY2Vzc1Rlc3RSdW5uZXJfaAotCi0jaW5jbHVkZSA8Z2lvL2dpby5oPgot
I2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQ
dHIuaD4KLQotY2xhc3MgV2ViUHJvY2Vzc1Rlc3RSdW5uZXIgewotcHVibGljOgotICAgIFdlYlBy
b2Nlc3NUZXN0UnVubmVyKCk7Ci0gICAgfldlYlByb2Nlc3NUZXN0UnVubmVyKCk7Ci0KLSAgICBi
b29sIHJ1blRlc3QoY29uc3QgY2hhciogc3VpdGVOYW1lLCBjb25zdCBjaGFyKiB0ZXN0TmFtZSwg
R1ZhcmlhbnQqIGFyZ3MpOwotCi1wcml2YXRlOgotICAgIHN0YXRpYyB2b2lkIHByb3h5Q3JlYXRl
ZENhbGxiYWNrKEdPYmplY3QqLCBHQXN5bmNSZXN1bHQqLCBXZWJQcm9jZXNzVGVzdFJ1bm5lciop
OwotICAgIHN0YXRpYyB2b2lkIG9uTmFtZUFwcGVhcmVkKEdEQnVzQ29ubmVjdGlvbiosIGNvbnN0
IGNoYXIqLCBjb25zdCBjaGFyKiwgZ3BvaW50ZXIpOwotICAgIHN0YXRpYyB2b2lkIG9uTmFtZVZh
bmlzaGVkKEdEQnVzQ29ubmVjdGlvbiosIGNvbnN0IGNoYXIqLCBncG9pbnRlcik7Ci0gICAgc3Rh
dGljIHZvaWQgdGVzdEZpbmlzaGVkQ2FsbGJhY2soR0RCdXNQcm94eSosIEdBc3luY1Jlc3VsdCos
IFdlYlByb2Nlc3NUZXN0UnVubmVyKik7Ci0KLSAgICBHREJ1c1Byb3h5KiBwcm94eSgpOwotICAg
IHZvaWQgZmluaXNoVGVzdChib29sIHJlc3VsdCk7Ci0KLSAgICBHTWFpbkxvb3AqIG1fbWFpbkxv
b3A7Ci0gICAgR1JlZlB0cjxHVGVzdERCdXM+IG1fYnVzOwotICAgIEdSZWZQdHI8R0RCdXNDb25u
ZWN0aW9uPiBtX2Nvbm5lY3Rpb247Ci0gICAgR1JlZlB0cjxHREJ1c1Byb3h5PiBtX3Byb3h5Owot
ICAgIGJvb2wgbV90ZXN0UmVzdWx0OwotfTsKLQotI2VuZGlmIC8vIFdlYlByb2Nlc3NUZXN0UnVu
bmVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L1dlYlZpZXdUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L1dlYlZpZXdUZXN0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTZjODQzNDU2
ZjM1YzBmMWE5YjMwMWY4NzYxMjE1ZTg0NDkyZWZkZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9XZWJWaWV3VGVzdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NDQgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgotICogUG9ydGlvbnMgQ29weXJpZ2h0
IChjKSAyMDExIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKLQotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HT3duUHRy
R3RrLmg+Ci0KLVdlYlZpZXdUZXN0OjpXZWJWaWV3VGVzdCgpCi0gICAgOiBtX3dlYlZpZXcoV0VC
S0lUX1dFQl9WSUVXKGdfb2JqZWN0X3JlZl9zaW5rKHdlYmtpdF93ZWJfdmlld19uZXcoKSkpKQot
ICAgICwgbV9tYWluTG9vcChnX21haW5fbG9vcF9uZXcoMCwgVFJVRSkpCi0gICAgLCBtX3BhcmVu
dFdpbmRvdygwKQotICAgICwgbV9qYXZhc2NyaXB0UmVzdWx0KDApCi0gICAgLCBtX3Jlc291cmNl
RGF0YVNpemUoMCkKLSAgICAsIG1fc3VyZmFjZSgwKQotewotICAgIGFzc2VydE9iamVjdElzRGVs
ZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QobV93ZWJWaWV3KSk7Ci19Ci0KLVdlYlZpZXdU
ZXN0Ojp+V2ViVmlld1Rlc3QoKQotewotICAgIGlmIChtX3BhcmVudFdpbmRvdykKLSAgICAgICAg
Z3RrX3dpZGdldF9kZXN0cm95KG1fcGFyZW50V2luZG93KTsKLSAgICBpZiAobV9qYXZhc2NyaXB0
UmVzdWx0KQotICAgICAgICB3ZWJraXRfamF2YXNjcmlwdF9yZXN1bHRfdW5yZWYobV9qYXZhc2Ny
aXB0UmVzdWx0KTsKLSAgICBpZiAobV9zdXJmYWNlKQotICAgICAgICBjYWlyb19zdXJmYWNlX2Rl
c3Ryb3kobV9zdXJmYWNlKTsKLSAgICBnX29iamVjdF91bnJlZihtX3dlYlZpZXcpOwotICAgIGdf
bWFpbl9sb29wX3VucmVmKG1fbWFpbkxvb3ApOwotfQotCi12b2lkIFdlYlZpZXdUZXN0Ojpsb2Fk
VVJJKGNvbnN0IGNoYXIqIHVyaSkKLXsKLSAgICBtX2FjdGl2ZVVSSSA9IHVyaTsKLSAgICB3ZWJr
aXRfd2ViX3ZpZXdfbG9hZF91cmkobV93ZWJWaWV3LCB1cmkpOwotfQotCi12b2lkIFdlYlZpZXdU
ZXN0Ojpsb2FkSHRtbChjb25zdCBjaGFyKiBodG1sLCBjb25zdCBjaGFyKiBiYXNlVVJJKQotewot
ICAgIGlmICghYmFzZVVSSSkKLSAgICAgICAgbV9hY3RpdmVVUkkgPSAiYWJvdXQ6YmxhbmsiOwot
ICAgIGVsc2UKLSAgICAgICAgbV9hY3RpdmVVUkkgPSBiYXNlVVJJOwotICAgIHdlYmtpdF93ZWJf
dmlld19sb2FkX2h0bWwobV93ZWJWaWV3LCBodG1sLCBiYXNlVVJJKTsKLX0KLQotdm9pZCBXZWJW
aWV3VGVzdDo6bG9hZFBsYWluVGV4dChjb25zdCBjaGFyKiBwbGFpblRleHQpCi17Ci0gICAgbV9h
Y3RpdmVVUkkgPSAiYWJvdXQ6YmxhbmsiOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3BsYWlu
X3RleHQobV93ZWJWaWV3LCBwbGFpblRleHQpOwotfQotCi12b2lkIFdlYlZpZXdUZXN0Ojpsb2Fk
UmVxdWVzdChXZWJLaXRVUklSZXF1ZXN0KiByZXF1ZXN0KQotewotICAgIG1fYWN0aXZlVVJJID0g
d2Via2l0X3VyaV9yZXF1ZXN0X2dldF91cmkocmVxdWVzdCk7Ci0gICAgd2Via2l0X3dlYl92aWV3
X2xvYWRfcmVxdWVzdChtX3dlYlZpZXcsIHJlcXVlc3QpOwotfQotCi12b2lkIFdlYlZpZXdUZXN0
Ojpsb2FkQWx0ZXJuYXRlSFRNTChjb25zdCBjaGFyKiBodG1sLCBjb25zdCBjaGFyKiBjb250ZW50
VVJJLCBjb25zdCBjaGFyKiBiYXNlVVJJKQotewotICAgIG1fYWN0aXZlVVJJID0gY29udGVudFVS
STsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9hbHRlcm5hdGVfaHRtbChtX3dlYlZpZXcsIGh0
bWwsIGNvbnRlbnRVUkksIGJhc2VVUkkpOwotfQotCi12b2lkIFdlYlZpZXdUZXN0Ojpnb0JhY2so
KQotewotICAgIGlmICh3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2sobV93ZWJWaWV3KSkgewot
ICAgICAgICBXZWJLaXRCYWNrRm9yd2FyZExpc3QqIGxpc3QgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X2JhY2tfZm9yd2FyZF9saXN0KG1fd2ViVmlldyk7Ci0gICAgICAgIFdlYktpdEJhY2tGb3J3YXJk
TGlzdEl0ZW0qIGl0ZW0gPSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X250aF9pdGVtKGxp
c3QsIC0xKTsKLSAgICAgICAgbV9hY3RpdmVVUkkgPSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3Rf
aXRlbV9nZXRfb3JpZ2luYWxfdXJpKGl0ZW0pOwotICAgIH0KLQotICAgIC8vIENhbGwgZ29fYmFj
ayBldmVuIHdoZW4gY2FuX2dvX2JhY2sgcmV0dXJucyBGQUxTRSB0byBjaGVjayBub3RoaW5nIGhh
cHBlbnMuCi0gICAgd2Via2l0X3dlYl92aWV3X2dvX2JhY2sobV93ZWJWaWV3KTsKLX0KLQotdm9p
ZCBXZWJWaWV3VGVzdDo6Z29Gb3J3YXJkKCkKLXsKLSAgICBpZiAod2Via2l0X3dlYl92aWV3X2Nh
bl9nb19mb3J3YXJkKG1fd2ViVmlldykpIHsKLSAgICAgICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0
KiBsaXN0ID0gd2Via2l0X3dlYl92aWV3X2dldF9iYWNrX2ZvcndhcmRfbGlzdChtX3dlYlZpZXcp
OwotICAgICAgICBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiBpdGVtID0gd2Via2l0X2JhY2tf
Zm9yd2FyZF9saXN0X2dldF9udGhfaXRlbShsaXN0LCAxKTsKLSAgICAgICAgbV9hY3RpdmVVUkkg
PSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9nZXRfb3JpZ2luYWxfdXJpKGl0ZW0pOwot
ICAgIH0KLQotICAgIC8vIENhbGwgZ29fZm9yd2FyZCBldmVuIHdoZW4gY2FuX2dvX2ZvcndhcmQg
cmV0dXJucyBGQUxTRSB0byBjaGVjayBub3RoaW5nIGhhcHBlbnMuCi0gICAgd2Via2l0X3dlYl92
aWV3X2dvX2ZvcndhcmQobV93ZWJWaWV3KTsKLX0KLQotdm9pZCBXZWJWaWV3VGVzdDo6Z29Ub0Jh
Y2tGb3J3YXJkTGlzdEl0ZW0oV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSogaXRlbSkKLXsKLSAg
ICBtX2FjdGl2ZVVSSSA9IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dldF9vcmlnaW5h
bF91cmkoaXRlbSk7Ci0gICAgd2Via2l0X3dlYl92aWV3X2dvX3RvX2JhY2tfZm9yd2FyZF9saXN0
X2l0ZW0obV93ZWJWaWV3LCBpdGVtKTsKLX0KLQotdm9pZCBXZWJWaWV3VGVzdDo6cXVpdE1haW5M
b29wKCkKLXsKLSAgICBnX21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3ApOwotfQotCi12b2lkIFdl
YlZpZXdUZXN0OjpxdWl0TWFpbkxvb3BBZnRlclByb2Nlc3NpbmdQZW5kaW5nRXZlbnRzKCkKLXsK
LSAgICB3aGlsZSAoZ3RrX2V2ZW50c19wZW5kaW5nKCkpCi0gICAgICAgIGd0a19tYWluX2l0ZXJh
dGlvbigpOwotICAgIHF1aXRNYWluTG9vcCgpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gcXVpdE1h
aW5Mb29wSWRsZUNhbGxiYWNrKFdlYlZpZXdUZXN0KiB0ZXN0KQotewotICAgIHRlc3QtPnF1aXRN
YWluTG9vcCgpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQotdm9pZCBXZWJWaWV3VGVzdDo6d2Fp
dChkb3VibGUgc2Vjb25kcykKLXsKLSAgICBnX3RpbWVvdXRfYWRkX3NlY29uZHMoc2Vjb25kcywg
cmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4ocXVpdE1haW5Mb29wSWRsZUNhbGxiYWNrKSwg
dGhpcyk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotfQotCi1zdGF0aWMgdm9p
ZCBsb2FkQ2hhbmdlZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRMb2FkRXZlbnQgbG9h
ZEV2ZW50LCBXZWJWaWV3VGVzdCogdGVzdCkKLXsKLSAgICBpZiAobG9hZEV2ZW50ICE9IFdFQktJ
VF9MT0FEX0ZJTklTSEVEKQotICAgICAgICByZXR1cm47Ci0gICAgZ19zaWduYWxfaGFuZGxlcnNf
ZGlzY29ubmVjdF9ieV9mdW5jKHdlYlZpZXcsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGxvYWRD
aGFuZ2VkKSwgdGVzdCk7Ci0gICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsK
LX0KLQotdm9pZCBXZWJWaWV3VGVzdDo6d2FpdFVudGlsTG9hZEZpbmlzaGVkKCkKLXsKLSAgICBn
X3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImxvYWQtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sobG9h
ZENoYW5nZWQpLCB0aGlzKTsKLSAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Ci19Ci0K
LXN0YXRpYyB2b2lkIHRpdGxlQ2hhbmdlZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHUGFyYW1T
cGVjKiwgV2ViVmlld1Rlc3QqIHRlc3QpCi17Ci0gICAgaWYgKCF0ZXN0LT5tX2V4cGVjdGVkVGl0
bGUuaXNOdWxsKCkgJiYgdGVzdC0+bV9leHBlY3RlZFRpdGxlICE9IHdlYmtpdF93ZWJfdmlld19n
ZXRfdGl0bGUod2ViVmlldykpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdfc2lnbmFsX2hhbmRs
ZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyh3ZWJWaWV3LCByZWludGVycHJldF9jYXN0PHZvaWQqPih0
aXRsZUNoYW5nZWQpLCB0ZXN0KTsKLSAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxv
b3ApOwotfQotCi12b2lkIFdlYlZpZXdUZXN0Ojp3YWl0VW50aWxUaXRsZUNoYW5nZWRUbyhjb25z
dCBjaGFyKiBleHBlY3RlZFRpdGxlKQotewotICAgIG1fZXhwZWN0ZWRUaXRsZSA9IGV4cGVjdGVk
VGl0bGU7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJub3RpZnk6OnRpdGxlIiwg
R19DQUxMQkFDSyh0aXRsZUNoYW5nZWQpLCB0aGlzKTsKLSAgICBnX21haW5fbG9vcF9ydW4obV9t
YWluTG9vcCk7Ci0gICAgbV9leHBlY3RlZFRpdGxlID0gQ1N0cmluZygpOwotfQotCi12b2lkIFdl
YlZpZXdUZXN0Ojp3YWl0VW50aWxUaXRsZUNoYW5nZWQoKQotewotICAgIHdhaXRVbnRpbFRpdGxl
Q2hhbmdlZFRvKDApOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gcGFyZW50V2luZG93TWFwcGVkKEd0
a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudCosIFdlYlZpZXdUZXN0KiB0ZXN0KQotewotICAgIGdf
c2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyh3aWRnZXQsIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KHBhcmVudFdpbmRvd01hcHBlZCksIHRlc3QpOwotICAgIGdfbWFpbl9sb29wX3F1
aXQodGVzdC0+bV9tYWluTG9vcCk7Ci0KLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXZvaWQgV2Vi
Vmlld1Rlc3Q6OnNob3dJbldpbmRvdyhHdGtXaW5kb3dUeXBlIHdpbmRvd1R5cGUpCi17Ci0gICAg
Z19hc3NlcnQoIW1fcGFyZW50V2luZG93KTsKLSAgICBtX3BhcmVudFdpbmRvdyA9IGd0a193aW5k
b3dfbmV3KHdpbmRvd1R5cGUpOwotICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIo
bV9wYXJlbnRXaW5kb3cpLCBHVEtfV0lER0VUKG1fd2ViVmlldykpOwotICAgIGd0a193aWRnZXRf
c2hvdyhHVEtfV0lER0VUKG1fd2ViVmlldykpOwotICAgIGd0a193aWRnZXRfc2hvdyhtX3BhcmVu
dFdpbmRvdyk7Ci19Ci0KLXZvaWQgV2ViVmlld1Rlc3Q6OnNob3dJbldpbmRvd0FuZFdhaXRVbnRp
bE1hcHBlZChHdGtXaW5kb3dUeXBlIHdpbmRvd1R5cGUpCi17Ci0gICAgZ19hc3NlcnQoIW1fcGFy
ZW50V2luZG93KTsKLSAgICBtX3BhcmVudFdpbmRvdyA9IGd0a193aW5kb3dfbmV3KHdpbmRvd1R5
cGUpOwotICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIobV9wYXJlbnRXaW5kb3cp
LCBHVEtfV0lER0VUKG1fd2ViVmlldykpOwotICAgIGd0a193aWRnZXRfc2hvdyhHVEtfV0lER0VU
KG1fd2ViVmlldykpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdChtX3BhcmVudFdpbmRvdywgIm1h
cC1ldmVudCIsIEdfQ0FMTEJBQ0socGFyZW50V2luZG93TWFwcGVkKSwgdGhpcyk7Ci0gICAgZ3Rr
X3dpZGdldF9zaG93KG1fcGFyZW50V2luZG93KTsKLSAgICBnX21haW5fbG9vcF9ydW4obV9tYWlu
TG9vcCk7Ci19Ci0KLXZvaWQgV2ViVmlld1Rlc3Q6OnJlc2l6ZVZpZXcoaW50IHdpZHRoLCBpbnQg
aGVpZ2h0KQotewotICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbjsKLSAgICBndGtfd2lkZ2V0
X2dldF9hbGxvY2F0aW9uKEdUS19XSURHRVQobV93ZWJWaWV3KSwgJmFsbG9jYXRpb24pOwotICAg
IGlmICh3aWR0aCAhPSAtMSkKLSAgICAgICAgYWxsb2NhdGlvbi53aWR0aCA9IHdpZHRoOwotICAg
IGlmIChoZWlnaHQgIT0gLTEpCi0gICAgICAgIGFsbG9jYXRpb24uaGVpZ2h0ID0gaGVpZ2h0Owot
ICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKG1fd2ViVmlldyksICZhbGxv
Y2F0aW9uKTsKLX0KLQotdm9pZCBXZWJWaWV3VGVzdDo6c2VsZWN0QWxsKCkKLXsKLSAgICB3ZWJr
aXRfd2ViX3ZpZXdfZXhlY3V0ZV9lZGl0aW5nX2NvbW1hbmQobV93ZWJWaWV3LCAiU2VsZWN0QWxs
Iik7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlc291cmNlR2V0RGF0YUNhbGxiYWNrKEdPYmplY3QqIG9i
amVjdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIGdwb2ludGVyIHVzZXJEYXRhKQotewotICAgIHNp
emVfdCBkYXRhU2l6ZTsKLSAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgdW5zaWduZWQg
Y2hhciogZGF0YSA9IHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X2RhdGFfZmluaXNoKFdFQktJVF9X
RUJfUkVTT1VSQ0Uob2JqZWN0KSwgcmVzdWx0LCAmZGF0YVNpemUsICZlcnJvci5vdXRQdHIoKSk7
Ci0gICAgZ19hc3NlcnQoZGF0YSk7Ci0KLSAgICBXZWJWaWV3VGVzdCogdGVzdCA9IHN0YXRpY19j
YXN0PFdlYlZpZXdUZXN0Kj4odXNlckRhdGEpOwotICAgIHRlc3QtPm1fcmVzb3VyY2VEYXRhLnNl
dChyZWludGVycHJldF9jYXN0PGNoYXIqPihkYXRhKSk7Ci0gICAgdGVzdC0+bV9yZXNvdXJjZURh
dGFTaXplID0gZGF0YVNpemU7Ci0gICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29w
KTsKLX0KLQotY29uc3QgY2hhciogV2ViVmlld1Rlc3Q6Om1haW5SZXNvdXJjZURhdGEoc2l6ZV90
JiBtYWluUmVzb3VyY2VEYXRhU2l6ZSkKLXsKLSAgICBtX3Jlc291cmNlRGF0YVNpemUgPSAwOwot
ICAgIG1fcmVzb3VyY2VEYXRhLmNsZWFyKCk7Ci0gICAgV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291
cmNlID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX3Jlc291cmNlKG1fd2ViVmlldyk7Ci0gICAg
Z19hc3NlcnQocmVzb3VyY2UpOwotCi0gICAgd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZGF0YShy
ZXNvdXJjZSwgMCwgcmVzb3VyY2VHZXREYXRhQ2FsbGJhY2ssIHRoaXMpOwotICAgIGdfbWFpbl9s
b29wX3J1bihtX21haW5Mb29wKTsKLQotICAgIG1haW5SZXNvdXJjZURhdGFTaXplID0gbV9yZXNv
dXJjZURhdGFTaXplOwotICAgIHJldHVybiBtX3Jlc291cmNlRGF0YS5nZXQoKTsKLX0KLQotdm9p
ZCBXZWJWaWV3VGVzdDo6bW91c2VNb3ZlVG8oaW50IHgsIGludCB5LCB1bnNpZ25lZCBpbnQgbW91
c2VNb2RpZmllcnMpCi17Ci0gICAgZ19hc3NlcnQobV9wYXJlbnRXaW5kb3cpOwotICAgIEd0a1dp
ZGdldCogdmlld1dpZGdldCA9IEdUS19XSURHRVQobV93ZWJWaWV3KTsKLSAgICBnX2Fzc2VydChn
dGtfd2lkZ2V0X2dldF9yZWFsaXplZCh2aWV3V2lkZ2V0KSk7Ci0KLSAgICBHT3duUHRyPEdka0V2
ZW50PiBldmVudChnZGtfZXZlbnRfbmV3KEdES19NT1RJT05fTk9USUZZKSk7Ci0gICAgZXZlbnQt
Pm1vdGlvbi54ID0geDsKLSAgICBldmVudC0+bW90aW9uLnkgPSB5OwotCi0gICAgZXZlbnQtPm1v
dGlvbi50aW1lID0gR0RLX0NVUlJFTlRfVElNRTsKLSAgICBldmVudC0+bW90aW9uLndpbmRvdyA9
IGd0a193aWRnZXRfZ2V0X3dpbmRvdyh2aWV3V2lkZ2V0KTsKLSAgICBnX29iamVjdF9yZWYoZXZl
bnQtPm1vdGlvbi53aW5kb3cpOwotICAgIGV2ZW50LT5tb3Rpb24uZGV2aWNlID0gZ2RrX2Rldmlj
ZV9tYW5hZ2VyX2dldF9jbGllbnRfcG9pbnRlcihnZGtfZGlzcGxheV9nZXRfZGV2aWNlX21hbmFn
ZXIoZ3RrX3dpZGdldF9nZXRfZGlzcGxheSh2aWV3V2lkZ2V0KSkpOwotICAgIGV2ZW50LT5tb3Rp
b24uc3RhdGUgPSBtb3VzZU1vZGlmaWVyczsKLSAgICBldmVudC0+bW90aW9uLmF4ZXMgPSAwOwot
Ci0gICAgaW50IHhSb290LCB5Um9vdDsKLSAgICBnZGtfd2luZG93X2dldF9yb290X2Nvb3Jkcyhn
dGtfd2lkZ2V0X2dldF93aW5kb3codmlld1dpZGdldCksIHgsIHksICZ4Um9vdCwgJnlSb290KTsK
LSAgICBldmVudC0+bW90aW9uLnhfcm9vdCA9IHhSb290OwotICAgIGV2ZW50LT5tb3Rpb24ueV9y
b290ID0geVJvb3Q7Ci0gICAgZ3RrX21haW5fZG9fZXZlbnQoZXZlbnQuZ2V0KCkpOwotfQotCi12
b2lkIFdlYlZpZXdUZXN0OjpjbGlja01vdXNlQnV0dG9uKGludCB4LCBpbnQgeSwgdW5zaWduZWQg
aW50IGJ1dHRvbiwgdW5zaWduZWQgaW50IG1vdXNlTW9kaWZpZXJzKQotewotICAgIGRvTW91c2VC
dXR0b25FdmVudChHREtfQlVUVE9OX1BSRVNTLCB4LCB5LCBidXR0b24sIG1vdXNlTW9kaWZpZXJz
KTsKLSAgICBkb01vdXNlQnV0dG9uRXZlbnQoR0RLX0JVVFRPTl9SRUxFQVNFLCB4LCB5LCBidXR0
b24sIG1vdXNlTW9kaWZpZXJzKTsKLX0KLQotdm9pZCBXZWJWaWV3VGVzdDo6a2V5U3Ryb2tlKHVu
c2lnbmVkIGludCBrZXlWYWwsIHVuc2lnbmVkIGludCBrZXlNb2RpZmllcnMpCi17Ci0gICAgZ19h
c3NlcnQobV9wYXJlbnRXaW5kb3cpOwotICAgIEd0a1dpZGdldCogdmlld1dpZGdldCA9IEdUS19X
SURHRVQobV93ZWJWaWV3KTsKLSAgICBnX2Fzc2VydChndGtfd2lkZ2V0X2dldF9yZWFsaXplZCh2
aWV3V2lkZ2V0KSk7Ci0KLSAgICBHT3duUHRyPEdka0V2ZW50PiBldmVudChnZGtfZXZlbnRfbmV3
KEdES19LRVlfUFJFU1MpKTsKLSAgICBldmVudC0+a2V5LmtleXZhbCA9IGtleVZhbDsKLQotICAg
IGV2ZW50LT5rZXkudGltZSA9IEdES19DVVJSRU5UX1RJTUU7Ci0gICAgZXZlbnQtPmtleS53aW5k
b3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3codmlld1dpZGdldCk7Ci0gICAgZ19vYmplY3RfcmVm
KGV2ZW50LT5rZXkud2luZG93KTsKLSAgICBnZGtfZXZlbnRfc2V0X2RldmljZShldmVudC5nZXQo
KSwgZ2RrX2RldmljZV9tYW5hZ2VyX2dldF9jbGllbnRfcG9pbnRlcihnZGtfZGlzcGxheV9nZXRf
ZGV2aWNlX21hbmFnZXIoZ3RrX3dpZGdldF9nZXRfZGlzcGxheSh2aWV3V2lkZ2V0KSkpKTsKLSAg
ICBldmVudC0+a2V5LnN0YXRlID0ga2V5TW9kaWZpZXJzOwotCi0gICAgLy8gV2hlbiBzeW50aGVz
aXppbmcgYW4gZXZlbnQsIGFuIGludmFsaWQgaGFyZHdhcmVfa2V5Y29kZSB2YWx1ZSBjYW4gY2F1
c2UgaXQgdG8gYmUgYmFkbHkgcHJvY2Vzc2VkIGJ5IEdUSysuCi0gICAgR093blB0cjxHZGtLZXlt
YXBLZXk+IGtleXM7Ci0gICAgaW50IGtleXNDb3VudDsKLSAgICBpZiAoZ2RrX2tleW1hcF9nZXRf
ZW50cmllc19mb3Jfa2V5dmFsKGdka19rZXltYXBfZ2V0X2RlZmF1bHQoKSwga2V5VmFsLCAma2V5
cy5vdXRQdHIoKSwgJmtleXNDb3VudCkpCi0gICAgICAgIGV2ZW50LT5rZXkuaGFyZHdhcmVfa2V5
Y29kZSA9IGtleXMuZ2V0KClbMF0ua2V5Y29kZTsKLQotICAgIGd0a19tYWluX2RvX2V2ZW50KGV2
ZW50LmdldCgpKTsKLSAgICBldmVudC0+a2V5LnR5cGUgPSBHREtfS0VZX1JFTEVBU0U7Ci0gICAg
Z3RrX21haW5fZG9fZXZlbnQoZXZlbnQuZ2V0KCkpOwotfQotCi12b2lkIFdlYlZpZXdUZXN0Ojpk
b01vdXNlQnV0dG9uRXZlbnQoR2RrRXZlbnRUeXBlIGV2ZW50VHlwZSwgaW50IHgsIGludCB5LCB1
bnNpZ25lZCBpbnQgYnV0dG9uLCB1bnNpZ25lZCBpbnQgbW91c2VNb2RpZmllcnMpCi17Ci0gICAg
Z19hc3NlcnQobV9wYXJlbnRXaW5kb3cpOwotICAgIEd0a1dpZGdldCogdmlld1dpZGdldCA9IEdU
S19XSURHRVQobV93ZWJWaWV3KTsKLSAgICBnX2Fzc2VydChndGtfd2lkZ2V0X2dldF9yZWFsaXpl
ZCh2aWV3V2lkZ2V0KSk7Ci0KLSAgICBHT3duUHRyPEdka0V2ZW50PiBldmVudChnZGtfZXZlbnRf
bmV3KGV2ZW50VHlwZSkpOwotICAgIGV2ZW50LT5idXR0b24ud2luZG93ID0gZ3RrX3dpZGdldF9n
ZXRfd2luZG93KHZpZXdXaWRnZXQpOwotICAgIGdfb2JqZWN0X3JlZihldmVudC0+YnV0dG9uLndp
bmRvdyk7Ci0KLSAgICBldmVudC0+YnV0dG9uLnRpbWUgPSBHREtfQ1VSUkVOVF9USU1FOwotICAg
IGV2ZW50LT5idXR0b24ueCA9IHg7Ci0gICAgZXZlbnQtPmJ1dHRvbi55ID0geTsKLSAgICBldmVu
dC0+YnV0dG9uLmF4ZXMgPSAwOwotICAgIGV2ZW50LT5idXR0b24uc3RhdGUgPSBtb3VzZU1vZGlm
aWVyczsKLSAgICBldmVudC0+YnV0dG9uLmJ1dHRvbiA9IGJ1dHRvbjsKLQotICAgIGV2ZW50LT5i
dXR0b24uZGV2aWNlID0gZ2RrX2RldmljZV9tYW5hZ2VyX2dldF9jbGllbnRfcG9pbnRlcihnZGtf
ZGlzcGxheV9nZXRfZGV2aWNlX21hbmFnZXIoZ3RrX3dpZGdldF9nZXRfZGlzcGxheSh2aWV3V2lk
Z2V0KSkpOwotCi0gICAgaW50IHhSb290LCB5Um9vdDsKLSAgICBnZGtfd2luZG93X2dldF9yb290
X2Nvb3JkcyhndGtfd2lkZ2V0X2dldF93aW5kb3codmlld1dpZGdldCksIHgsIHksICZ4Um9vdCwg
JnlSb290KTsKLSAgICBldmVudC0+YnV0dG9uLnhfcm9vdCA9IHhSb290OwotICAgIGV2ZW50LT5i
dXR0b24ueV9yb290ID0geVJvb3Q7Ci0gICAgZ3RrX21haW5fZG9fZXZlbnQoZXZlbnQuZ2V0KCkp
OwotfQotCi1zdGF0aWMgdm9pZCBydW5KYXZhU2NyaXB0UmVhZHlDYWxsYmFjayhHT2JqZWN0Kiwg
R0FzeW5jUmVzdWx0KiByZXN1bHQsIFdlYlZpZXdUZXN0KiB0ZXN0KQotewotICAgIHRlc3QtPm1f
amF2YXNjcmlwdFJlc3VsdCA9IHdlYmtpdF93ZWJfdmlld19ydW5famF2YXNjcmlwdF9maW5pc2go
dGVzdC0+bV93ZWJWaWV3LCByZXN1bHQsIHRlc3QtPm1famF2YXNjcmlwdEVycm9yKTsKLSAgICBn
X21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOwotfQotCi1zdGF0aWMgdm9pZCBydW5K
YXZhU2NyaXB0RnJvbUdSZXNvdXJjZVJlYWR5Q2FsbGJhY2soR09iamVjdCosIEdBc3luY1Jlc3Vs
dCogcmVzdWx0LCBXZWJWaWV3VGVzdCogdGVzdCkKLXsKLSAgICB0ZXN0LT5tX2phdmFzY3JpcHRS
ZXN1bHQgPSB3ZWJraXRfd2ViX3ZpZXdfcnVuX2phdmFzY3JpcHRfZnJvbV9ncmVzb3VyY2VfZmlu
aXNoKHRlc3QtPm1fd2ViVmlldywgcmVzdWx0LCB0ZXN0LT5tX2phdmFzY3JpcHRFcnJvcik7Ci0g
ICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKLX0KLQotV2ViS2l0SmF2YXNj
cmlwdFJlc3VsdCogV2ViVmlld1Rlc3Q6OnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hl
ZChjb25zdCBjaGFyKiBqYXZhc2NyaXB0LCBHRXJyb3IqKiBlcnJvcikKLXsKLSAgICBpZiAobV9q
YXZhc2NyaXB0UmVzdWx0KQotICAgICAgICB3ZWJraXRfamF2YXNjcmlwdF9yZXN1bHRfdW5yZWYo
bV9qYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBtX2phdmFzY3JpcHRSZXN1bHQgPSAwOwotICAgIG1f
amF2YXNjcmlwdEVycm9yID0gZXJyb3I7Ci0gICAgd2Via2l0X3dlYl92aWV3X3J1bl9qYXZhc2Ny
aXB0KG1fd2ViVmlldywgamF2YXNjcmlwdCwgMCwgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFk
eUNhbGxiYWNrPihydW5KYXZhU2NyaXB0UmVhZHlDYWxsYmFjayksIHRoaXMpOwotICAgIGdfbWFp
bl9sb29wX3J1bihtX21haW5Mb29wKTsKLQotICAgIHJldHVybiBtX2phdmFzY3JpcHRSZXN1bHQ7
Ci19Ci0KLVdlYktpdEphdmFzY3JpcHRSZXN1bHQqIFdlYlZpZXdUZXN0OjpydW5KYXZhU2NyaXB0
RnJvbUdSZXNvdXJjZUFuZFdhaXRVbnRpbEZpbmlzaGVkKGNvbnN0IGNoYXIqIHJlc291cmNlLCBH
RXJyb3IqKiBlcnJvcikKLXsKLSAgICBpZiAobV9qYXZhc2NyaXB0UmVzdWx0KQotICAgICAgICB3
ZWJraXRfamF2YXNjcmlwdF9yZXN1bHRfdW5yZWYobV9qYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBt
X2phdmFzY3JpcHRSZXN1bHQgPSAwOwotICAgIG1famF2YXNjcmlwdEVycm9yID0gZXJyb3I7Ci0g
ICAgd2Via2l0X3dlYl92aWV3X3J1bl9qYXZhc2NyaXB0X2Zyb21fZ3Jlc291cmNlKG1fd2ViVmll
dywgcmVzb3VyY2UsIDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4ocnVu
SmF2YVNjcmlwdEZyb21HUmVzb3VyY2VSZWFkeUNhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19tYWlu
X2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotCi0gICAgcmV0dXJuIG1famF2YXNjcmlwdFJlc3VsdDsK
LX0KLQotc3RhdGljIGNoYXIqIGpzVmFsdWVUb0NTdHJpbmcoSlNHbG9iYWxDb250ZXh0UmVmIGNv
bnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCi17Ci0gICAgZ19hc3NlcnQodmFsdWUpOwotICAgIGdf
YXNzZXJ0KEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCB2YWx1ZSkpOwotCi0gICAgSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IHN0cmluZ1ZhbHVlKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNv
bnRleHQsIHZhbHVlLCAwKSk7Ci0gICAgZ19hc3NlcnQoc3RyaW5nVmFsdWUpOwotCi0gICAgc2l6
ZV90IGNTdHJpbmdMZW5ndGggPSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUoc3Ry
aW5nVmFsdWUuZ2V0KCkpOwotICAgIGNoYXIqIGNTdHJpbmcgPSBzdGF0aWNfY2FzdDxjaGFyKj4o
Z19tYWxsb2MoY1N0cmluZ0xlbmd0aCkpOwotICAgIEpTU3RyaW5nR2V0VVRGOENTdHJpbmcoc3Ry
aW5nVmFsdWUuZ2V0KCksIGNTdHJpbmcsIGNTdHJpbmdMZW5ndGgpOwotICAgIHJldHVybiBjU3Ry
aW5nOwotfQotCi1jaGFyKiBXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhX
ZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBqYXZhc2NyaXB0UmVzdWx0KQotewotICAgIEpTR2xvYmFs
Q29udGV4dFJlZiBjb250ZXh0ID0gd2Via2l0X2phdmFzY3JpcHRfcmVzdWx0X2dldF9nbG9iYWxf
Y29udGV4dChqYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBnX2Fzc2VydChjb250ZXh0KTsKLSAgICBy
ZXR1cm4ganNWYWx1ZVRvQ1N0cmluZyhjb250ZXh0LCB3ZWJraXRfamF2YXNjcmlwdF9yZXN1bHRf
Z2V0X3ZhbHVlKGphdmFzY3JpcHRSZXN1bHQpKTsKLX0KLQotZG91YmxlIFdlYlZpZXdUZXN0Ojpq
YXZhc2NyaXB0UmVzdWx0VG9OdW1iZXIoV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCogamF2YXNjcmlw
dFJlc3VsdCkKLXsKLSAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCA9IHdlYmtpdF9qYXZh
c2NyaXB0X3Jlc3VsdF9nZXRfZ2xvYmFsX2NvbnRleHQoamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAg
Z19hc3NlcnQoY29udGV4dCk7Ci0gICAgSlNWYWx1ZVJlZiB2YWx1ZSA9IHdlYmtpdF9qYXZhc2Ny
aXB0X3Jlc3VsdF9nZXRfdmFsdWUoamF2YXNjcmlwdFJlc3VsdCk7Ci0gICAgZ19hc3NlcnQodmFs
dWUpOwotICAgIGdfYXNzZXJ0KEpTVmFsdWVJc051bWJlcihjb250ZXh0LCB2YWx1ZSkpOwotCi0g
ICAgcmV0dXJuIEpTVmFsdWVUb051bWJlcihjb250ZXh0LCB2YWx1ZSwgMCk7Ci19Ci0KLWJvb2wg
V2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0Jvb2xlYW4oV2ViS2l0SmF2YXNjcmlwdFJl
c3VsdCogamF2YXNjcmlwdFJlc3VsdCkKLXsKLSAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4
dCA9IHdlYmtpdF9qYXZhc2NyaXB0X3Jlc3VsdF9nZXRfZ2xvYmFsX2NvbnRleHQoamF2YXNjcmlw
dFJlc3VsdCk7Ci0gICAgZ19hc3NlcnQoY29udGV4dCk7Ci0gICAgSlNWYWx1ZVJlZiB2YWx1ZSA9
IHdlYmtpdF9qYXZhc2NyaXB0X3Jlc3VsdF9nZXRfdmFsdWUoamF2YXNjcmlwdFJlc3VsdCk7Ci0g
ICAgZ19hc3NlcnQodmFsdWUpOwotICAgIGdfYXNzZXJ0KEpTVmFsdWVJc0Jvb2xlYW4oY29udGV4
dCwgdmFsdWUpKTsKLQotICAgIHJldHVybiBKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIHZhbHVl
KTsKLX0KLQotYm9vbCBXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdElzTnVsbChXZWJLaXRK
YXZhc2NyaXB0UmVzdWx0KiBqYXZhc2NyaXB0UmVzdWx0KQotewotICAgIEpTR2xvYmFsQ29udGV4
dFJlZiBjb250ZXh0ID0gd2Via2l0X2phdmFzY3JpcHRfcmVzdWx0X2dldF9nbG9iYWxfY29udGV4
dChqYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBnX2Fzc2VydChjb250ZXh0KTsKLSAgICBKU1ZhbHVl
UmVmIHZhbHVlID0gd2Via2l0X2phdmFzY3JpcHRfcmVzdWx0X2dldF92YWx1ZShqYXZhc2NyaXB0
UmVzdWx0KTsKLSAgICBnX2Fzc2VydCh2YWx1ZSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZUlzTnVs
bChjb250ZXh0LCB2YWx1ZSk7Ci19Ci0KLWJvb2wgV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1
bHRJc1VuZGVmaW5lZChXZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBqYXZhc2NyaXB0UmVzdWx0KQot
ewotICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0ID0gd2Via2l0X2phdmFzY3JpcHRfcmVz
dWx0X2dldF9nbG9iYWxfY29udGV4dChqYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBnX2Fzc2VydChj
b250ZXh0KTsKLSAgICBKU1ZhbHVlUmVmIHZhbHVlID0gd2Via2l0X2phdmFzY3JpcHRfcmVzdWx0
X2dldF92YWx1ZShqYXZhc2NyaXB0UmVzdWx0KTsKLSAgICBnX2Fzc2VydCh2YWx1ZSk7Ci0KLSAg
ICByZXR1cm4gSlNWYWx1ZUlzVW5kZWZpbmVkKGNvbnRleHQsIHZhbHVlKTsKLX0KLQotc3RhdGlj
IHZvaWQgb25TbmFwc2hvdFJlYWR5KFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBHQXN5bmNSZXN1
bHQqIHJlcywgV2ViVmlld1Rlc3QqIHRlc3QpCi17Ci0gICAgR093blB0cjxHRXJyb3I+IGVycm9y
OwotICAgIHRlc3QtPm1fc3VyZmFjZSA9IHdlYmtpdF93ZWJfdmlld19nZXRfc25hcHNob3RfZmlu
aXNoKHdlYl92aWV3LCByZXMsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgZ19hc3NlcnQoIXRlc3Qt
Pm1fc3VyZmFjZSB8fCAhZXJyb3IuZ2V0KCkpOwotICAgIGlmIChlcnJvcikKLSAgICAgICAgZ19h
c3NlcnRfZXJyb3IoZXJyb3IuZ2V0KCksIFdFQktJVF9TTkFQU0hPVF9FUlJPUiwgV0VCS0lUX1NO
QVBTSE9UX0VSUk9SX0ZBSUxFRF9UT19DUkVBVEUpOwotICAgIHRlc3QtPnF1aXRNYWluTG9vcCgp
OwotfQotCi1jYWlyb19zdXJmYWNlX3QqIFdlYlZpZXdUZXN0OjpnZXRTbmFwc2hvdEFuZFdhaXRV
bnRpbFJlYWR5KFdlYktpdFNuYXBzaG90UmVnaW9uIHJlZ2lvbiwgV2ViS2l0U25hcHNob3RPcHRp
b25zIG9wdGlvbnMpCi17Ci0gICAgaWYgKG1fc3VyZmFjZSkKLSAgICAgICAgY2Fpcm9fc3VyZmFj
ZV9kZXN0cm95KG1fc3VyZmFjZSk7Ci0gICAgbV9zdXJmYWNlID0gMDsKLSAgICB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X3NuYXBzaG90KG1fd2ViVmlldywgcmVnaW9uLCBvcHRpb25zLCAwLCByZWludGVy
cHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KG9uU25hcHNob3RSZWFkeSksIHRoaXMpOwot
ICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKLSAgICByZXR1cm4gbV9zdXJmYWNlOwot
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2Vi
Vmlld1Rlc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZp
ZXdUZXN0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0NjBlMjJiNGU3NDdlZGMw
ZTM5MjQxOWRlMGJjMGVjM2QxMTgzNzMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2Vi
Vmlld1Rlc3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMSBN
b3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBXZWJW
aWV3VGVzdF9oCi0jZGVmaW5lIFdlYlZpZXdUZXN0X2gKLQotI2luY2x1ZGUgIlRlc3RNYWluLmgi
Ci0jaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgotCi1jbGFzcyBXZWJWaWV3VGVzdDogcHVibGljIFRlc3QgewotcHVibGljOgotICAgIE1B
S0VfR0xJQl9URVNUX0ZJWFRVUkUoV2ViVmlld1Rlc3QpOwotICAgIFdlYlZpZXdUZXN0KCk7Ci0g
ICAgdmlydHVhbCB+V2ViVmlld1Rlc3QoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBsb2FkVVJJKGNv
bnN0IGNoYXIqIHVyaSk7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRIdG1sKGNvbnN0IGNoYXIqIGh0
bWwsIGNvbnN0IGNoYXIqIGJhc2VVUkkpOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUGxhaW5UZXh0
KGNvbnN0IGNoYXIqIHBsYWluVGV4dCk7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXF1ZXN0KFdl
YktpdFVSSVJlcXVlc3QqKTsKLSAgICB2b2lkIGxvYWRBbHRlcm5hdGVIVE1MKGNvbnN0IGNoYXIq
IGh0bWwsIGNvbnN0IGNoYXIqIGNvbnRlbnRVUkksIGNvbnN0IGNoYXIqIGJhc2VVUkkpOwotICAg
IHZvaWQgZ29CYWNrKCk7Ci0gICAgdm9pZCBnb0ZvcndhcmQoKTsKLSAgICB2b2lkIGdvVG9CYWNr
Rm9yd2FyZExpc3RJdGVtKFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qKTsKLQotICAgIHZvaWQg
cXVpdE1haW5Mb29wKCk7Ci0gICAgdm9pZCBxdWl0TWFpbkxvb3BBZnRlclByb2Nlc3NpbmdQZW5k
aW5nRXZlbnRzKCk7Ci0gICAgdm9pZCB3YWl0KGRvdWJsZSBzZWNvbmRzKTsKLSAgICB2b2lkIHdh
aXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIHZvaWQgd2FpdFVudGlsVGl0bGVDaGFuZ2VkVG8o
Y29uc3QgY2hhciogZXhwZWN0ZWRUaXRsZSk7Ci0gICAgdm9pZCB3YWl0VW50aWxUaXRsZUNoYW5n
ZWQoKTsKLSAgICB2b2lkIHNob3dJbldpbmRvdyhHdGtXaW5kb3dUeXBlID0gR1RLX1dJTkRPV19Q
T1BVUCk7Ci0gICAgdm9pZCBzaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoR3RrV2luZG93
VHlwZSA9IEdUS19XSU5ET1dfUE9QVVApOwotICAgIHZvaWQgcmVzaXplVmlldyhpbnQgd2lkdGgs
IGludCBoZWlnaHQpOwotICAgIHZvaWQgc2VsZWN0QWxsKCk7Ci0gICAgY29uc3QgY2hhciogbWFp
blJlc291cmNlRGF0YShzaXplX3QmIG1haW5SZXNvdXJjZURhdGFTaXplKTsKLQotICAgIHZvaWQg
bW91c2VNb3ZlVG8oaW50IHgsIGludCB5LCB1bnNpZ25lZCBpbnQgbW91c2VNb2RpZmllcnMgPSAw
KTsKLSAgICB2b2lkIGNsaWNrTW91c2VCdXR0b24oaW50IHgsIGludCB5LCB1bnNpZ25lZCBpbnQg
YnV0dG9uID0gMSwgdW5zaWduZWQgaW50IG1vdXNlTW9kaWZpZXJzID0gMCk7Ci0gICAgdm9pZCBr
ZXlTdHJva2UodW5zaWduZWQgaW50IGtleVZhbCwgdW5zaWduZWQgaW50IGtleU1vZGlmaWVycyA9
IDApOwotCi0gICAgV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCogcnVuSmF2YVNjcmlwdEFuZFdhaXRV
bnRpbEZpbmlzaGVkKGNvbnN0IGNoYXIqIGphdmFzY3JpcHQsIEdFcnJvcioqKTsKLSAgICBXZWJL
aXRKYXZhc2NyaXB0UmVzdWx0KiBydW5KYXZhU2NyaXB0RnJvbUdSZXNvdXJjZUFuZFdhaXRVbnRp
bEZpbmlzaGVkKGNvbnN0IGNoYXIqIHJlc291cmNlLCBHRXJyb3IqKik7Ci0KLSAgICAvLyBKYXZh
c2NyaXB0IHJlc3VsdCBoZWxwZXJzLgotICAgIHN0YXRpYyBjaGFyKiBqYXZhc2NyaXB0UmVzdWx0
VG9DU3RyaW5nKFdlYktpdEphdmFzY3JpcHRSZXN1bHQqKTsKLSAgICBzdGF0aWMgZG91YmxlIGph
dmFzY3JpcHRSZXN1bHRUb051bWJlcihXZWJLaXRKYXZhc2NyaXB0UmVzdWx0Kik7Ci0gICAgc3Rh
dGljIGJvb2wgamF2YXNjcmlwdFJlc3VsdFRvQm9vbGVhbihXZWJLaXRKYXZhc2NyaXB0UmVzdWx0
Kik7Ci0gICAgc3RhdGljIGJvb2wgamF2YXNjcmlwdFJlc3VsdElzTnVsbChXZWJLaXRKYXZhc2Ny
aXB0UmVzdWx0Kik7Ci0gICAgc3RhdGljIGJvb2wgamF2YXNjcmlwdFJlc3VsdElzVW5kZWZpbmVk
KFdlYktpdEphdmFzY3JpcHRSZXN1bHQqKTsKLQotICAgIGNhaXJvX3N1cmZhY2VfdCogZ2V0U25h
cHNob3RBbmRXYWl0VW50aWxSZWFkeShXZWJLaXRTbmFwc2hvdFJlZ2lvbiwgV2ViS2l0U25hcHNo
b3RPcHRpb25zKTsKLQotICAgIFdlYktpdFdlYlZpZXcqIG1fd2ViVmlldzsKLSAgICBHTWFpbkxv
b3AqIG1fbWFpbkxvb3A7Ci0gICAgQ1N0cmluZyBtX2FjdGl2ZVVSSTsKLSAgICBHdGtXaWRnZXQq
IG1fcGFyZW50V2luZG93OwotICAgIENTdHJpbmcgbV9leHBlY3RlZFRpdGxlOwotICAgIFdlYktp
dEphdmFzY3JpcHRSZXN1bHQqIG1famF2YXNjcmlwdFJlc3VsdDsKLSAgICBHRXJyb3IqKiBtX2ph
dmFzY3JpcHRFcnJvcjsKLSAgICBHT3duUHRyPGNoYXI+IG1fcmVzb3VyY2VEYXRhOwotICAgIHNp
emVfdCBtX3Jlc291cmNlRGF0YVNpemU7Ci0gICAgY2Fpcm9fc3VyZmFjZV90KiBtX3N1cmZhY2U7
Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBkb01vdXNlQnV0dG9uRXZlbnQoR2RrRXZlbnRUeXBlLCBp
bnQsIGludCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwotfTsKLQotI2VuZGlmIC8vIFdl
YlZpZXdUZXN0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL3Jlc291cmNlcy9saW5rLXRpdGxlLmpzIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvcmVzb3VyY2VzL2xpbmstdGl0bGUuanMKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDJjODI0ZGEzODY0MmEwMmZlN2I5ODVjMTM1OWI4MDQ0NTM2ZDBjM2UuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvcmVzb3VyY2VzL2xpbmstdGl0bGUuanMKKysrIC9k
ZXYvbnVsbApAQCAtMSArMCwwIEBACi13aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1dl
YktpdExpbmsnKS50aXRsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL3Jlc291cmNlcy90ZXN0LWNlcnQucGVtIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3QtY2VydC5wZW0KZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGIzNDMwMWYyNTM3NjM3YmYxMGNlOWE5YTNiMzhjNDViMTg4MTQ0
NmQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3QtY2VydC5wZW0K
KysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0tLS0tLUJFR0lOIENFUlRJRklDQVRFLS0t
LS0KLU1JSUI5akNDQVYrZ0F3SUJBZ0lKQUxldVhCbyt2d3o5TUEwR0NTcUdTSWIzRFFFQkJRVUFN
QlF4RWpBUUJnTlYKLUJBTU1DVEV5Tnk0d0xqQXVNVEFlRncweE1qQTNNVEl4TWpRNE1qUmFGdzB5
TWpBM01UQXhNalE0TWpSYU1CUXgKLUVqQVFCZ05WQkFNTUNURXlOeTR3TGpBdU1UQ0JuekFOQmdr
cWhraUc5dzBCQVFFRkFBT0JqUUF3Z1lrQ2dZRUEKLTBUVXpPUXhIQklLREQybWt1cSt0VTkybVF2
RFpnNzNCMEcrTmhyMlQyRzZNYmNMcUl3amcxUVl0QlpXSjgzdFoKLXhNTUVmaXdlSExGODVaOW9o
YXZBZ3hKbEtHN1ltdlpPNzlLa0ZwbWpWMlc1Q1ZSbTBlWU1QbnpteE5Db2FZcW8KLURMbDB6c0g2
S1pPTFBLdS9mWDRlRFg5WHBBUDFmODNoV0IxVUZCbUhLTjhDQXdFQUFhTlFNRTR3SFFZRFZSME8K
LUJCWUVGREh2NVpRMUJkbWh6VHNEVUVvWTU1RVh5VWRLTUI4R0ExVWRJd1FZTUJhQUZESHY1WlEx
QmRtaHpUc0QKLVVFb1k1NUVYeVVkS01Bd0dBMVVkRXdRRk1BTUJBZjh3RFFZSktvWklodmNOQVFF
RkJRQURnWUVBaDNxTUJ4N3YKLWpTb2RNZjNPeVRxVExFN2RlTG5tbkNlQlZwZ3p4UlpFb2l6Y0dx
WWNqaXFPMjdpNU41WjZLVlFzbklUbkxpeUMKLW1VdHVSNUtuRjY5dVRLVXc0bS91Z1plNXdoamln
NU1xMmw0MTBLVks2RWVHNHRkTGxmWFIrd2k0VTVLNEtqUDYKLXA0bmNoUVVYTGEyemNiSm4rVkJl
eEpuNi85d2RocitEVUdZPQotLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3Qta2V5
LnBlbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL3Jlc291cmNlcy90
ZXN0LWtleS5wZW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwMzYyMjJjZWQ1NTY1
ODE5NDEyZWI0ZDAwNjI5MWM1MTQwMjc3NTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
cmVzb3VyY2VzL3Rlc3Qta2V5LnBlbQorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLS0t
LS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLQotTUlJQ2R3SUJBREFOQmdrcWhraUc5dzBCQVFFRkFB
U0NBbUV3Z2dKZEFnRUFBb0dCQU5FMU16a01Sd1NDZ3c5cAotcExxdnJWUGRwa0x3MllPOXdkQnZq
WWE5azlodWpHM0M2aU1JNE5VR0xRV1ZpZk43V2NUREJINHNIaHl4Zk9XZgotYUlXcndJTVNaU2h1
MkpyMlR1L1NwQmFabzFkbHVRbFVadEhtREQ1ODVzVFFxR21LcUF5NWRNN0IraW1UaXp5cgotdjMx
K0hnMS9WNlFEOVgvTjRWZ2RWQlFaaHlqZkFnTUJBQUVDZ1lCMlF3T1VzUnNJTXByUndKOXRKTmZ2
TzdHNwotejVpMS96T3JseFBDNGpITVBCbklCbElDd2djT2hMSTRvT0xkcjVIOFIxMm4wVnFvVDdE
UndQMzk2aXdsSmlwRgotaU8xaGVETW4vOHo4TFBHd2tDSy8rY2swNHJNRGtzeFdJZE13WUtCWHQ5
YWhuSi94Ukx6UTEvM0FKaUFHbm9lNQotL1FMWFF3ZW9mZDRtbWZzaktRSkJBTzJDd1Q3dU1QNm5N
alhndFZNSnE1UVA4VWJlQ1Mxc0VPUEpKYkh1RHhKQgotL0hlUFFIQmpxNGt6RzZDTDRvTzdUKzVm
RHY0ZytmSUlIenVYZXJaMGltc0NRUURoZm1pVEljOU91Y0VJZmc2LwotbXMwSmlLU21XYytxb2lP
Q3RySUx1UXZGb053SlJjaVFBTnFlSnM2d3BhRHZldlNVdkJMR2ZHLzdiM0h2YUU1WAotaXFCZEFr
QkVRSXZwMnFjSHR1Sk42MG9RRjdwUHJSa254VXliMmU4c2xqUVg0cEpBSytneUwxOVVMTUF4aUJk
TAotVm9kOFZZcU50SkZwWSs2UHA5ZloxeGp6YjZBTEFrRUE0SnpyREF3MGxRWEErM1dkdVV3NGl4
T2FkcjJsZHlHMAotMzZLZWJjRHdzZlpPMThtMFE0VW1QejBHeTd6Z04wd3h6dW9jaGF3MFc2K2lQ
VWlZS09sRVhRSkJBTVdRclBsdQotcnJpbm9aUzJmOGRvSjlCTk5VYStSTnBNdWc2VVhjNTVxb1VK
bHlpWEVoK3R1NEFhTU90eHVHSXlDMHNBY3V3NgotWGRBUFZQWEtkN01uZTcwPQotLS0tLS1FTkQg
UFJJVkFURSBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvcmVzb3VyY2VzL3dlYmtpdDJndGstdGVzdHMuZ3Jlc291cmNlLnhtbCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL3Jlc291cmNlcy93ZWJraXQyZ3Rr
LXRlc3RzLmdyZXNvdXJjZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmMWU1
YTY1NDc3MmFlOTQyZDkxMDRlM2RhYmVjZGFjYzc0M2UxYzcuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvcmVzb3VyY2VzL3dlYmtpdDJndGstdGVzdHMuZ3Jlc291cmNlLnhtbAorKysgL2Rl
di9udWxsCkBAIC0xLDYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRG
LTgiPz4KLTxncmVzb3VyY2VzPgotICA8Z3Jlc291cmNlIHByZWZpeD0iL29yZy93ZWJraXQvd2Vi
a2l0Mmd0ay90ZXN0cy8iPgotICAgIDxmaWxlIGFsaWFzPSJsaW5rLXRpdGxlLmpzIj5Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9yZXNvdXJjZXMvbGluay10aXRsZS5qczwv
ZmlsZT4KLSAgPC9ncmVzb3VyY2U+Ci08L2dyZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9Ub29scy9D
aGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMWQ3ODAzMjFhMDY1MzM4ZDQyYjEwNGQx
NTFiZTNhYmM4NDEwNDEzNC4uNmQ4YTVkYjZhZWQ2NzMzZDVhNzMyODJmZjhkMjM1NjliMDFjZDg2
MyAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDEwMyBAQAorMjAxNC0wMS0wNCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lh
QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gTW92ZSBhbGwgR1RLL0dPYmplY3QgdW5pdCB0
ZXN0cyB0byBUb29scy9UZXN0V2ViS2l0QVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMjYzNDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OiBJbmNsdWRlIHRoZSBuZXcgdW5p
dCB0ZXN0cyBzdWJkaXJlY3Rvcmllcy4KKyAgICAgICAgKiBTY3JpcHRzL3J1bi1ndGstdGVzdHM6
IFVwZGF0ZSB0byByZWZlciB0byB0aGUgbmV3IGJ1aWxkIGxvY2F0aW9ucy4KKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHk6IFVwZGF0ZSB0aGUgc3R5bGUgY2hlY2tl
ci4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJfdW5pdHRlc3QucHk6
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9HTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvQWNjZXNzaWJpbGl0eVRlc3RTZXJ2ZXIuY3BwOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvQWNjZXNz
aWJpbGl0eVRlc3RTZXJ2ZXIuY3BwLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Mkd0ay9DTWFrZUxpc3RzLnR4dDogQWRkZWQuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXQyR3RrL0RPTURPTVdpbmRvd1Rlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvRE9NTm9kZVRlc3QuY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvRE9NTm9kZVRlc3QuY3Bw
LgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9GcmFtZVRlc3QuY3Bw
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvRnJh
bWVUZXN0LmNwcC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvSW5z
cGVjdG9yVGVzdFNlcnZlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9JbnNwZWN0b3JUZXN0U2VydmVyLmNwcC4KKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvTG9hZFRyYWNraW5nVGVzdC5jcHA6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9Mb2FkVHJhY2tpbmdU
ZXN0LmNwcC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvTG9hZFRy
YWNraW5nVGVzdC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvTG9hZFRyYWNraW5nVGVzdC5oLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Mkd0ay9UZXN0QXV0aGVudGljYXRpb24uY3BwOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdEF1dGhlbnRpY2F0aW9uLmNwcC4K
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdEJhY2tGb3J3YXJk
TGlzdC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9UZXN0QmFja0ZvcndhcmRMaXN0LmNwcC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdDJHdGsvVGVzdENvbnRleHRNZW51LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RDb250ZXh0TWVudS5jcHAuCisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RDb29raWVNYW5hZ2VyLmNw
cDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rl
c3RDb29raWVNYW5hZ2VyLmNwcC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dDJHdGsvVGVzdERPTURPTVdpbmRvdy5jcHA6IEFkZGVkLgorICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0RE9NTm9kZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0RE9NTm9kZS5jcHAuCisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3REb3dubG9hZHMuY3BwOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdERvd25s
b2Fkcy5jcHAuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RG
cmFtZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9UZXN0RnJhbWUuY3BwLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Mkd0ay9UZXN0SW5zcGVjdG9yLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RJbnNwZWN0b3IuY3BwLgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0SW5zcGVjdG9yU2VydmVyLmNwcDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RJbnNwZWN0b3JT
ZXJ2ZXIuY3BwLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0
TG9hZGVyQ2xpZW50LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL1Rlc3RMb2FkZXJDbGllbnQuY3BwLgorICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0TWFpbi5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0TWFpbi5jcHAuCisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RNYWluLmg6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0TWFpbi5oLgorICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0UHJpbnRpbmcuY3BwOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFByaW50aW5n
LmNwcC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFJlc291
cmNlcy5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9UZXN0UmVzb3VyY2VzLmNwcC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdDJHdGsvVGVzdFNTTC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9UZXN0U1NMLmNwcC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdDJHdGsvVGVzdFVJQ2xpZW50LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RVSUNsaWVudC5jcHAuCisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJFeHRlbnNpb25zLmNwcDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJF
eHRlbnNpb25zLmNwcC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsv
VGVzdFdlYktpdEFjY2Vzc2liaWxpdHkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdEFjY2Vzc2liaWxpdHkuY3BwLgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0RmF2aWNvbkRh
dGFiYXNlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL1Rlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2UuY3BwLgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0RmluZENvbnRyb2xsZXIuY3BwOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktp
dEZpbmRDb250cm9sbGVyLmNwcC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dDJHdGsvVGVzdFdlYktpdFBvbGljeUNsaWVudC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0UG9saWN5Q2xpZW50LmNwcC4K
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFNldHRp
bmdzLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL1Rlc3RXZWJLaXRTZXR0aW5ncy5jcHAuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRWZXJzaW9uLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRWZXJzaW9uLmNwcC4KKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFdlYkNvbnRl
eHQuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvVGVzdFdlYktpdFdlYkNvbnRleHQuY3BwLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0V2ViVmlldy5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlldy5jcHAuCisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRXZWJWaWV3
R3JvdXAuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvVGVzdFdlYktpdFdlYlZpZXdHcm91cC5jcHAuCisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJWaWV3RWRpdG9yLmNwcDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJWaWV3RWRpdG9yLmNw
cC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvV2ViRXh0ZW5zaW9u
VGVzdC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9XZWJFeHRlbnNpb25UZXN0LmNwcC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdDJHdGsvV2ViS2l0VGVzdEJ1cy5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJLaXRUZXN0QnVzLmNwcC4KKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvV2ViS2l0VGVzdEJ1cy5oOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViS2l0VGVzdEJ1cy5o
LgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9XZWJLaXRUZXN0U2Vy
dmVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL1dlYktpdFRlc3RTZXJ2ZXIuY3BwLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Mkd0ay9XZWJLaXRUZXN0U2VydmVyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJLaXRUZXN0U2VydmVyLmguCisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1dlYlByb2Nlc3NUZXN0LmNwcDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlByb2Nlc3NU
ZXN0LmNwcC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvV2ViUHJv
Y2Vzc1Rlc3QuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL1dlYlByb2Nlc3NUZXN0LmguCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyR3RrL1dlYlByb2Nlc3NUZXN0UnVubmVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlByb2Nlc3NUZXN0UnVubmVyLmNwcC4K
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvV2ViUHJvY2Vzc1Rlc3RS
dW5uZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL1dlYlByb2Nlc3NUZXN0UnVubmVyLmguCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXQyR3RrL1dlYlZpZXdUZXN0LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcC4KKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvV2ViVmlld1Rlc3QuaDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmguCisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL3Jlc291cmNlcy9saW5rLXRpdGxl
LmpzOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
cmVzb3VyY2VzL2xpbmstdGl0bGUuanMuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyR3RrL3Jlc291cmNlcy90ZXN0LWNlcnQucGVtOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3QtY2VydC5wZW0uCisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL3Jlc291cmNlcy90ZXN0LWtl
eS5wZW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0
cy9yZXNvdXJjZXMvdGVzdC1rZXkucGVtLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Mkd0ay9yZXNvdXJjZXMvd2Via2l0Mmd0ay10ZXN0cy5ncmVzb3VyY2UueG1sOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvcmVzb3VyY2Vz
L3dlYmtpdDJndGstdGVzdHMuZ3Jlc291cmNlLnhtbC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdEd0ay9DTWFrZUxpc3RzLnR4dDogQWRkZWQuCisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvcmVzb3VyY2VzL2JsYW5rLmljbzogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Jlc291cmNlcy9ibGFuay5pY28uCisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvcmVzb3VyY2VzL3Rlc3QuaHRtbDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Jlc291cmNlcy90ZXN0Lmh0bWwuCisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvcmVzb3VyY2VzL3Rlc3Qub2dnOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvcmVzb3VyY2VzL3Rlc3Qub2dnLgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Jlc291cmNlcy90ZXN0LnBk
ZjogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Jlc291cmNlcy90ZXN0LnBk
Zi4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9yZXNvdXJjZXMvdGVz
dC50eHQ6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy9yZXNvdXJjZXMvdGVz
dC50eHQuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdF91dGls
cy5jOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdF91dGlscy5jLgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RfdXRpbHMuaDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RfdXRpbHMuaC4KKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0YXBwbGljYXRpb25jYWNoZS5jOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGFwcGxpY2F0aW9uY2FjaGUu
Yy4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0YXRrLmM6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXRrLmMuCisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGF0a3JvbGVzLmM6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXRrcm9sZXMuYy4KKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0Y29udGV4dG1lbnUuYzogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rjb250ZXh0bWVudS5jLgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3Rjb3B5YW5kcGFzdGUuYzogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rjb3B5YW5kcGFzdGUuYy4KKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0ZG9tZG9jdW1lbnQuYzogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rkb21kb2N1bWVudC5jLgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3Rkb21kb213aW5kb3cuYzogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rkb21kb213aW5kb3cuYy4KKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0ZG9tbm9kZS5jOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGRvbW5vZGUuYy4KKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0ZG93bmxvYWQuYzogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rkb3dubG9hZC5jLgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RmYXZpY29uZGF0YWJhc2UuYzogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RmYXZpY29uZGF0YWJhc2UuYy4KKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0Z2xvYmFscy5jOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGdsb2JhbHMuYy4KKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0aGl0dGVzdHJlc3VsdC5jOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGhpdHRlc3RyZXN1bHQuYy4KKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0aHR0cGJhY2tlbmQuYzog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RodHRwYmFja2VuZC5jLgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RrZXlldmVudHMuYzog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RrZXlldmVudHMuYy4KKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0bG9hZGluZy5jOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGxvYWRpbmcuYy4KKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0bWltZWhhbmRsaW5nLmM6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0bWltZWhhbmRsaW5nLmMuCisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdG5ldHdvcmtyZXF1ZXN0LmM6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0bmV0d29ya3JlcXVlc3Qu
Yy4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0bmV0d29ya3Jl
c3BvbnNlLmM6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0bmV0d29y
a3Jlc3BvbnNlLmMuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVz
dHdlYmJhY2tmb3J3YXJkbGlzdC5jOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9ndGsvdGVz
dHMvdGVzdHdlYmJhY2tmb3J3YXJkbGlzdC5jLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0R3RrL3Rlc3R3ZWJkYXRhc291cmNlLmM6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
S2l0L2d0ay90ZXN0cy90ZXN0d2ViZGF0YXNvdXJjZS5jLgorICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJmcmFtZS5jOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YktpdC9ndGsvdGVzdHMvdGVzdHdlYmZyYW1lLmMuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRHdGsvdGVzdHdlYmhpc3RvcnlpdGVtLmM6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0L2d0ay90ZXN0cy90ZXN0d2ViaGlzdG9yeWl0ZW0uYy4KKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2ViaW5zcGVjdG9yLmM6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2ViaW5zcGVjdG9yLmMuCisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYnBsdWdpbmRhdGFiYXNlLmM6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2VicGx1Z2luZGF0YWJhc2UuYy4K
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2VicmVzb3VyY2Uu
YzogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJyZXNvdXJjZS5j
LgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJzZXR0aW5n
cy5jOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYnNldHRpbmdz
LmMuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYnZpZXcu
YzogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJ2aWV3LmMuCisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdpbmRvdy5jOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdpbmRvdy5jLgorCiAyMDE0LTAx
LTA0ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KIAogICAgICAgICBb
R1RLXSBbQ01ha2VdIEZpeCB0aGUgdmlkZW8gYW5kIGF1ZGlvIGJ1aWxkCmRpZmYgLS1naXQgYS9U
b29scy9DTWFrZUxpc3RzLnR4dCBiL1Rvb2xzL0NNYWtlTGlzdHMudHh0CmluZGV4IDQxZmY5OWE2
Y2Y3Nzg5YTE5ODU4MzM2NjFjNjA3ZDNiNTAyYzBjMTQuLmY5OTQ1ZjM5YmZiYzNiZGJhZTAxNjZj
YjQwYTEzMzk1ZWQ2YmQ5NDQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NNYWtlTGlzdHMudHh0CisrKyBi
L1Rvb2xzL0NNYWtlTGlzdHMudHh0CkBAIC0xOSwxMCArMTksMTIgQEAgZWxzZWlmICgiJHtQT1JU
fSIgU1RSRVFVQUwgIkdUSyIpCiAgICAgYWRkX3N1YmRpcmVjdG9yeShJbWFnZURpZmYpCiAgICAg
aWYgKEVOQUJMRV9XRUJLSVQyKQogICAgICAgICBhZGRfc3ViZGlyZWN0b3J5KE1pbmlCcm93c2Vy
L2d0aykKKyAgICAgICAgYWRkX3N1YmRpcmVjdG9yeShUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dDJHdGspCiAgICAgZW5kaWYgKCkKICAgICBpZiAoRU5BQkxFX1dFQktJVCkKICAgICAgICAgYWRk
X3N1YmRpcmVjdG9yeShHdGtMYXVuY2hlcikKICAgICAgICAgYWRkX3N1YmRpcmVjdG9yeShEdW1w
UmVuZGVyVHJlZSkKKyAgICAgICAgYWRkX3N1YmRpcmVjdG9yeShUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdEd0aykKICAgICBlbmRpZiAoKQogICAgIGFkZF9zdWJkaXJlY3RvcnkoRHVtcFJlbmRl
clRyZWUvVGVzdE5ldHNjYXBlUGx1Z0luKQogZWxzZWlmICgiJHtQT1JUfSIgU1RSRVFVQUwgIldp
bkNFIikKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvcnVuLWd0ay10ZXN0cyBiL1Rvb2xzL1Nj
cmlwdHMvcnVuLWd0ay10ZXN0cwppbmRleCBlNmI0MDZhMjI5MGU4OTQ2Y2NkNTFlOTU3NzQ3ZDE2
NjEzNmEyYmJmLi41ZGFlYWYwODdjZmI5NjQ1M2Q0YjBjZmNhMmUxNzhmNWE4OTRhZDQ4IDEwMDc1
NQotLS0gYS9Ub29scy9TY3JpcHRzL3J1bi1ndGstdGVzdHMKKysrIGIvVG9vbHMvU2NyaXB0cy9y
dW4tZ3RrLXRlc3RzCkBAIC01OCwzNSArNTgsMzUgQEAgY2xhc3MgVGVzdFRpbWVvdXQoRXhjZXB0
aW9uKToKICAgICBwYXNzCiAKIGNsYXNzIFRlc3RSdW5uZXI6Ci0gICAgVEVTVF9ESVJTID0gWyAi
V2ViS2l0MUdPYmplY3RBUElUZXN0cyIsICJXZWJLaXQyR09iamVjdEFQSVRlc3RzIiwgIlRlc3RX
ZWJLaXRBUEkiIF0KKyAgICBURVNUX0RJUlMgPSBbICJXZWJLaXQyR3RrIiwgIldlYktpdEd0ayIs
ICJXZWJLaXQyIiwgIkphdmFTY3JpcHRDb3JlIiwgIldURiIsICJXZWJDb3JlIiwgICJXZWJDb3Jl
R3RrIiBdCiAKICAgICBTS0lQUEVEID0gWwotICAgICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0MUdP
YmplY3RBUElUZXN0cy90ZXN0ZG93bmxvYWQiLCAiL3dlYmtpdC9kb3dubG9hZC9ub3QtZm91bmQi
LCAiVGVzdCBmYWlscyBpbiBHVEsgTGludXggNjQtYml0IFJlbGVhc2UgYm90IiwgODIzMjkpLAot
ICAgICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0d2ViaW5zcGVj
dG9yIiwgIi93ZWJraXQvd2ViaW5zcGVjdG9yL2Nsb3NlLWFuZC1pbnNwZWN0IiwgIlRlc3QgaXMg
Zmxha3kgaW4gR1RLIExpbnV4IDMyLWJpdCBSZWxlYXNlIGJvdCIsIDgyODY5KSwKLSAgICAgICAg
U2tpcHBlZFRlc3QoIldlYktpdDFHT2JqZWN0QVBJVGVzdHMvdGVzdHdlYnJlc291cmNlIiwgIi93
ZWJraXQvd2VicmVzb3VyY2UvbG9hZGluZyIsICJUZXN0IGZhaWxzIiwgMTA0Njg5KSwKLSAgICAg
ICAgU2tpcHBlZFRlc3QoIldlYktpdDFHT2JqZWN0QVBJVGVzdHMvdGVzdHdlYnJlc291cmNlIiwg
Ii93ZWJraXQvd2VicmVzb3VyY2Uvc3ViX3Jlc291cmNlX2xvYWRpbmciLCAiVGVzdCBmYWlscyBp
biBHVEsgTGludXggNjQtYml0IFJlbGVhc2UgYm90IiwgODIzMzApLAotICAgICAgICBTa2lwcGVk
VGVzdCgiV2ViS2l0MUdPYmplY3RBUElUZXN0cy90ZXN0d2VidmlldyIsICIvd2Via2l0L3dlYnZp
ZXcvaWNvbi11cmkiLCAiVGVzdCB0aW1lcyBvdXQgaW4gR1RLIExpbnV4IDY0LWJpdCBSZWxlYXNl
IGJvdCIsIDgyMzI4KSwKLSAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdDJHT2JqZWN0QVBJVGVz
dHMvVGVzdFJlc291cmNlcyIsICIvd2Via2l0Mi9XZWJLaXRXZWJWaWV3L3Jlc291cmNlcyIsICJU
ZXN0IGlzIGZsYWt5IGluIEdUSyBMaW51eCAzMi1iaXQgUmVsZWFzZSBib3QiLCA4Mjg2OCksCi0g
ICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXQyR09iamVjdEFQSVRlc3RzL1Rlc3RVSUNsaWVudCIs
ICIvd2Via2l0Mi9XZWJLaXRXZWJWaWV3L21vdXNlLXRhcmdldCIsICJUZXN0IHRpbWVzIG91dCBh
ZnRlciByMTUwODkwIiwgMTE3Njg5KSwKLSAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdDJHT2Jq
ZWN0QVBJVGVzdHMvVGVzdEF1dGhlbnRpY2F0aW9uIiwgU2tpcHBlZFRlc3QuRU5USVJFX1NVSVRF
LCAiVGVzdCB0aW1lcyBvdXQgYWZ0ZXIgcjE1MDg5MCIsIDExNzY4OSksCi0gICAgICAgIFNraXBw
ZWRUZXN0KCJXZWJLaXQyR09iamVjdEFQSVRlc3RzL1Rlc3RDb250ZXh0TWVudSIsIFNraXBwZWRU
ZXN0LkVOVElSRV9TVUlURSwgIlRlc3QgdGltZXMgb3V0IGFmdGVyIHIxNTA4OTAiLCAxMTc2ODkp
LAotICAgICAgICBTa2lwcGVkVGVzdCgiVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0MiIsICJXZWJL
aXQyLk1vdXNlTW92ZUFmdGVyQ3Jhc2giLCAiVGVzdCBpcyBmbGFreSIsIDg1MDY2KSwKLSAgICAg
ICAgU2tpcHBlZFRlc3QoIlRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5OZXdG
aXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXMiLCAiVGVzdCBpcyBmbGFreSIsIDg1
MDY2KSwKLSAgICAgICAgU2tpcHBlZFRlc3QoIlRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdDIiLCAi
V2ViS2l0Mi5OZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGcmFtZXMiLCAiVGVzdCBmYWls
cyIsIDg1MDM3KSwKLSAgICAgICAgU2tpcHBlZFRlc3QoIlRlc3RXZWJLaXRBUEkvVGVzdFdlYktp
dDIiLCAiV2ViS2l0Mi5SZXN0b3JlU2Vzc2lvblN0YXRlQ29udGFpbmluZ0Zvcm1EYXRhIiwgIlNl
c3Npb24gU3RhdGUgaXMgbm90IGltcGxlbWVudGVkIGluIEdUSysgcG9ydCIsIDg0OTYwKSwKLSAg
ICAgICAgU2tpcHBlZFRlc3QoIlRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5T
cGFjZWJhclNjcm9sbGluZyIsICJUZXN0IGZhaWxzIiwgODQ5NjEpLAotICAgICAgICBTa2lwcGVk
VGVzdCgiVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0MiIsICJXZWJLaXQyLldLQ29ubmVjdGlvbiIs
ICJUZXN0cyBmYWlsIGFuZCB0aW1lIG91dCBvdXQiLCA4NDk1OSksCi0gICAgICAgIFNraXBwZWRU
ZXN0KCJUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXQyIiwgIldlYktpdDIuV0tQYWdlR2V0U2NhbGVG
YWN0b3JOb3RaZXJvIiwgIlRlc3QgZmFpbHMgYW5kIHRpbWVzIG91dCIsIDg4NDU1KSwKLSAgICAg
ICAgU2tpcHBlZFRlc3QoIlRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5Gb3Jj
ZVJlcGFpbnQiLCAiVGVzdCB0aW1lcyBvdXQiLCAxMDU1MzIpLAotICAgICAgICBTa2lwcGVkVGVz
dCgiVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0MiIsICJXZWJLaXQyLlJlbG9hZFBhZ2VBZnRlckNy
YXNoIiwgIlRlc3QgZmxha2lseSB0aW1lcyBvdXQiLCAxMTAxMjkpLAotICAgICAgICBTa2lwcGVk
VGVzdCgiVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0MiIsICJXZWJLaXQyLkRpZEFzc29jaWF0ZUZv
cm1Db250cm9scyIsICJUZXN0IHRpbWVzIG91dCIsIDEyMDMwMiksCi0gICAgICAgIFNraXBwZWRU
ZXN0KCJUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXQyIiwgIldlYktpdDIuSW5qZWN0ZWRCdW5kbGVG
cmFtZUhpdFRlc3QiLCAiVGVzdCB0aW1lcyBvdXQiLCAxMjAzMDMpLAotICAgICAgICBTa2lwcGVk
VGVzdCgiVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0MiIsICJXZWJLaXQyLlJlc2l6ZVJldmVyc2VQ
YWdpbmF0ZWRXZWJWaWV3IiwgIlRlc3QgZmFpbHMiLCAxMjAzMDUpLAotICAgICAgICBTa2lwcGVk
VGVzdCgiVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0MiIsICJXZWJLaXQyLlNjcm9sbFBpbm5pbmdC
ZWhhdmlvcnMiLCAiVGVzdCBmYWlscyIsIDEyMDMwNiksCi0gICAgICAgIFNraXBwZWRUZXN0KCJU
ZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXQyIiwgIldlYktpdDIuVGVybWluYXRlVHdpY2UiLCAiVGVz
dCBjYXVzZXMgY3Jhc2ggb24gdGhlIG5leHQgdGVzdCIsIDEyMTk3MCksCi0gICAgICAgIFNraXBw
ZWRUZXN0KCJUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXQyIiwgIldlYktpdDIuR2VvbG9jYXRpb25U
cmFuc2l0aW9uVG9IaWdoQWNjdXJhY3kiLCAiVGVzdCBjYXVzZXMgY3Jhc2ggb24gdGhlIG5leHQg
dGVzdCIsIDEyNTA2OCksCi0gICAgICAgIFNraXBwZWRUZXN0KCJUZXN0V2ViS2l0QVBJL1Rlc3RX
ZWJLaXQyIiwgIldlYktpdDIuR2VvbG9jYXRpb25UcmFuc2l0aW9uVG9Mb3dBY2N1cmFjeSIsICJU
ZXN0IGNhdXNlcyBjcmFzaCBvbiB0aGUgbmV4dCB0ZXN0IiwgMTI1MDY4KSwKLSAgICAgICAgU2tp
cHBlZFRlc3QoIldlYktpdDJHT2JqZWN0QVBJVGVzdHMvVGVzdEluc3BlY3RvclNlcnZlciIsIFNr
aXBwZWRUZXN0LkVOVElSRV9TVUlURSwgIlRpbWluZyBvdXQgb24gdGhlIGJvdCIsIDEyMjU3MSks
CisgICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXRHdGsvdGVzdGRvd25sb2FkIiwgIi93ZWJraXQv
ZG93bmxvYWQvbm90LWZvdW5kIiwgIlRlc3QgZmFpbHMgaW4gR1RLIExpbnV4IDY0LWJpdCBSZWxl
YXNlIGJvdCIsIDgyMzI5KSwKKyAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdEd0ay90ZXN0d2Vi
aW5zcGVjdG9yIiwgIi93ZWJraXQvd2ViaW5zcGVjdG9yL2Nsb3NlLWFuZC1pbnNwZWN0IiwgIlRl
c3QgaXMgZmxha3kgaW4gR1RLIExpbnV4IDMyLWJpdCBSZWxlYXNlIGJvdCIsIDgyODY5KSwKKyAg
ICAgICAgU2tpcHBlZFRlc3QoIldlYktpdEd0ay90ZXN0d2VicmVzb3VyY2UiLCAiL3dlYmtpdC93
ZWJyZXNvdXJjZS9sb2FkaW5nIiwgIlRlc3QgZmFpbHMiLCAxMDQ2ODkpLAorICAgICAgICBTa2lw
cGVkVGVzdCgiV2ViS2l0R3RrL3Rlc3R3ZWJyZXNvdXJjZSIsICIvd2Via2l0L3dlYnJlc291cmNl
L3N1Yl9yZXNvdXJjZV9sb2FkaW5nIiwgIlRlc3QgZmFpbHMgaW4gR1RLIExpbnV4IDY0LWJpdCBS
ZWxlYXNlIGJvdCIsIDgyMzMwKSwKKyAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdEd0ay90ZXN0
d2VidmlldyIsICIvd2Via2l0L3dlYnZpZXcvaWNvbi11cmkiLCAiVGVzdCB0aW1lcyBvdXQgaW4g
R1RLIExpbnV4IDY0LWJpdCBSZWxlYXNlIGJvdCIsIDgyMzI4KSwKKyAgICAgICAgU2tpcHBlZFRl
c3QoIldlYktpdDJHdGsvVGVzdFJlc291cmNlcyIsICIvd2Via2l0Mi9XZWJLaXRXZWJWaWV3L3Jl
c291cmNlcyIsICJUZXN0IGlzIGZsYWt5IGluIEdUSyBMaW51eCAzMi1iaXQgUmVsZWFzZSBib3Qi
LCA4Mjg2OCksCisgICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXQyR3RrL1Rlc3RVSUNsaWVudCIs
ICIvd2Via2l0Mi9XZWJLaXRXZWJWaWV3L21vdXNlLXRhcmdldCIsICJUZXN0IHRpbWVzIG91dCBh
ZnRlciByMTUwODkwIiwgMTE3Njg5KSwKKyAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdDJHdGsv
VGVzdEF1dGhlbnRpY2F0aW9uIiwgU2tpcHBlZFRlc3QuRU5USVJFX1NVSVRFLCAiVGVzdCB0aW1l
cyBvdXQgYWZ0ZXIgcjE1MDg5MCIsIDExNzY4OSksCisgICAgICAgIFNraXBwZWRUZXN0KCJXZWJL
aXQyR3RrL1Rlc3RDb250ZXh0TWVudSIsIFNraXBwZWRUZXN0LkVOVElSRV9TVUlURSwgIlRlc3Qg
dGltZXMgb3V0IGFmdGVyIHIxNTA4OTAiLCAxMTc2ODkpLAorICAgICAgICBTa2lwcGVkVGVzdCgi
V2ViS2l0Mi9UZXN0V2ViS2l0MiIsICJXZWJLaXQyLk1vdXNlTW92ZUFmdGVyQ3Jhc2giLCAiVGVz
dCBpcyBmbGFreSIsIDg1MDY2KSwKKyAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdDIvVGVzdFdl
YktpdDIiLCAiV2ViS2l0Mi5OZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXMi
LCAiVGVzdCBpcyBmbGFreSIsIDg1MDY2KSwKKyAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdDIv
VGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5OZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGcmFt
ZXMiLCAiVGVzdCBmYWlscyIsIDg1MDM3KSwKKyAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdDIv
VGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5SZXN0b3JlU2Vzc2lvblN0YXRlQ29udGFpbmluZ0Zvcm1E
YXRhIiwgIlNlc3Npb24gU3RhdGUgaXMgbm90IGltcGxlbWVudGVkIGluIEdUSysgcG9ydCIsIDg0
OTYwKSwKKyAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdDIvVGVzdFdlYktpdDIiLCAiV2ViS2l0
Mi5TcGFjZWJhclNjcm9sbGluZyIsICJUZXN0IGZhaWxzIiwgODQ5NjEpLAorICAgICAgICBTa2lw
cGVkVGVzdCgiV2ViS2l0Mi9UZXN0V2ViS2l0MiIsICJXZWJLaXQyLldLQ29ubmVjdGlvbiIsICJU
ZXN0cyBmYWlsIGFuZCB0aW1lIG91dCBvdXQiLCA4NDk1OSksCisgICAgICAgIFNraXBwZWRUZXN0
KCJXZWJLaXQyL1Rlc3RXZWJLaXQyIiwgIldlYktpdDIuV0tQYWdlR2V0U2NhbGVGYWN0b3JOb3Ra
ZXJvIiwgIlRlc3QgZmFpbHMgYW5kIHRpbWVzIG91dCIsIDg4NDU1KSwKKyAgICAgICAgU2tpcHBl
ZFRlc3QoIldlYktpdDIvVGVzdFdlYktpdDIiLCAiV2ViS2l0Mi5Gb3JjZVJlcGFpbnQiLCAiVGVz
dCB0aW1lcyBvdXQiLCAxMDU1MzIpLAorICAgICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0Mi9UZXN0
V2ViS2l0MiIsICJXZWJLaXQyLlJlbG9hZFBhZ2VBZnRlckNyYXNoIiwgIlRlc3QgZmxha2lseSB0
aW1lcyBvdXQiLCAxMTAxMjkpLAorICAgICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0Mi9UZXN0V2Vi
S2l0MiIsICJXZWJLaXQyLkRpZEFzc29jaWF0ZUZvcm1Db250cm9scyIsICJUZXN0IHRpbWVzIG91
dCIsIDEyMDMwMiksCisgICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXQyL1Rlc3RXZWJLaXQyIiwg
IldlYktpdDIuSW5qZWN0ZWRCdW5kbGVGcmFtZUhpdFRlc3QiLCAiVGVzdCB0aW1lcyBvdXQiLCAx
MjAzMDMpLAorICAgICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0Mi9UZXN0V2ViS2l0MiIsICJXZWJL
aXQyLlJlc2l6ZVJldmVyc2VQYWdpbmF0ZWRXZWJWaWV3IiwgIlRlc3QgZmFpbHMiLCAxMjAzMDUp
LAorICAgICAgICBTa2lwcGVkVGVzdCgiV2ViS2l0Mi9UZXN0V2ViS2l0MiIsICJXZWJLaXQyLlNj
cm9sbFBpbm5pbmdCZWhhdmlvcnMiLCAiVGVzdCBmYWlscyIsIDEyMDMwNiksCisgICAgICAgIFNr
aXBwZWRUZXN0KCJXZWJLaXQyL1Rlc3RXZWJLaXQyIiwgIldlYktpdDIuVGVybWluYXRlVHdpY2Ui
LCAiVGVzdCBjYXVzZXMgY3Jhc2ggb24gdGhlIG5leHQgdGVzdCIsIDEyMTk3MCksCisgICAgICAg
IFNraXBwZWRUZXN0KCJXZWJLaXQyL1Rlc3RXZWJLaXQyIiwgIldlYktpdDIuR2VvbG9jYXRpb25U
cmFuc2l0aW9uVG9IaWdoQWNjdXJhY3kiLCAiVGVzdCBjYXVzZXMgY3Jhc2ggb24gdGhlIG5leHQg
dGVzdCIsIDEyNTA2OCksCisgICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXQyL1Rlc3RXZWJLaXQy
IiwgIldlYktpdDIuR2VvbG9jYXRpb25UcmFuc2l0aW9uVG9Mb3dBY2N1cmFjeSIsICJUZXN0IGNh
dXNlcyBjcmFzaCBvbiB0aGUgbmV4dCB0ZXN0IiwgMTI1MDY4KSwKKyAgICAgICAgU2tpcHBlZFRl
c3QoIldlYktpdDJHdGsvVGVzdEluc3BlY3RvclNlcnZlciIsIFNraXBwZWRUZXN0LkVOVElSRV9T
VUlURSwgIlRpbWluZyBvdXQgb24gdGhlIGJvdCIsIDEyMjU3MSksCiAgICAgXQogCiAgICAgZGVm
IF9faW5pdF9fKHNlbGYsIG9wdGlvbnMsIHRlc3RzPVtdKToKQEAgLTEwNiw2ICsxMDYsOSBAQCBj
bGFzcyBUZXN0UnVubmVyOgogICAgICAgICBzZWxmLl9zcGlfcmVnaXN0cnlkID0gTm9uZQogICAg
ICAgICBzZWxmLl9zcGlfYnVzX2xhdW5jaGVyID0gTm9uZQogCisgICAgZGVmIF90ZXN0X3Byb2dy
YW1zX2Jhc2VfZGlyKHNlbGYpOgorICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuX3By
b2dyYW1zX3BhdGgsICJUZXN0V2ViS2l0QVBJIikKKwogICAgIGRlZiBfZ2V0X3Rlc3RzX2Zyb21f
ZGlyKHNlbGYsIHRlc3RfZGlyKToKICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIodGVzdF9k
aXIpOgogICAgICAgICAgICAgcmV0dXJuIFtdCkBAIC0xMzEsNyArMTM0LDcgQEAgY2xhc3MgVGVz
dFJ1bm5lcjoKIAogICAgICAgICB0ZXN0cyA9IFtdCiAgICAgICAgIGZvciB0ZXN0X2RpciBpbiBz
ZWxmLlRFU1RfRElSUzoKLSAgICAgICAgICAgIGFic29sdXRlX3Rlc3RfZGlyID0gb3MucGF0aC5q
b2luKHNlbGYuX3Byb2dyYW1zX3BhdGgsIHRlc3RfZGlyKQorICAgICAgICAgICAgYWJzb2x1dGVf
dGVzdF9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5fdGVzdF9wcm9ncmFtc19iYXNlX2RpcigpLCB0
ZXN0X2RpcikKICAgICAgICAgICAgIHRlc3RzLmV4dGVuZChzZWxmLl9nZXRfdGVzdHNfZnJvbV9k
aXIoYWJzb2x1dGVfdGVzdF9kaXIpKQogICAgICAgICByZXR1cm4gdGVzdHMKIApAQCAtMzYxLDE3
ICszNjQsMTggQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgcmV0dXJuIDAKIAogICAgIGRl
ZiBfcnVuX3Rlc3Qoc2VsZiwgdGVzdF9wcm9ncmFtKToKLSAgICAgICAgaWYgIkdPYmplY3RBUElU
ZXN0IiBpbiB0ZXN0X3Byb2dyYW06CisgICAgICAgIGJhc2VkaXIgPSBvcy5wYXRoLmJhc2VuYW1l
KG9zLnBhdGguZGlybmFtZSh0ZXN0X3Byb2dyYW0pKQorICAgICAgICBpZiBiYXNlZGlyIGluIFsi
V2ViS2l0Mkd0ayIsICJXZWJLaXRHdGsiXToKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9ydW5f
dGVzdF9nbGliKHRlc3RfcHJvZ3JhbSkKIAotICAgICAgICBpZiAiVGVzdFdlYktpdEFQSSIgaW4g
dGVzdF9wcm9ncmFtOgorICAgICAgICBpZiBiYXNlZGlyIGluIFsiV2ViS2l0MiIsICJKYXZhU2Ny
aXB0Q29yZSIsICJXVEYiLCAiV2ViQ29yZSIsICAiV2ViQ29yZUd0ayJdOgogICAgICAgICAgICAg
cmV0dXJuIHNlbGYuX3J1bl9nb29nbGVfdGVzdF9zdWl0ZSh0ZXN0X3Byb2dyYW0pCiAKICAgICAg
ICAgcmV0dXJuIDEKIAogICAgIGRlZiBydW5fdGVzdHMoc2VsZik6CiAgICAgICAgIGlmIG5vdCBz
ZWxmLl90ZXN0czoKLSAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkVSUk9SOiB0ZXN0cyBu
b3QgZm91bmQgaW4gJXMuXG4iICUgKHNlbGYuX3Byb2dyYW1zX3BhdGgpKQorICAgICAgICAgICAg
c3lzLnN0ZGVyci53cml0ZSgiRVJST1I6IHRlc3RzIG5vdCBmb3VuZCBpbiAlcy5cbiIgJSAoc2Vs
Zi5fdGVzdF9wcm9ncmFtc19iYXNlX2RpcigpKSkKICAgICAgICAgICAgIHN5cy5zdGRlcnIuZmx1
c2goKQogICAgICAgICAgICAgcmV0dXJuIDEKIApAQCAtNDA1LDE3ICs0MDksMTcgQEAgY2xhc3Mg
VGVzdFJ1bm5lcjoKICAgICAgICAgICAgIHNlbGYuX3RlYXJfZG93bl90ZXN0aW5nX2Vudmlyb25t
ZW50KCkKIAogICAgICAgICBpZiBmYWlsZWRfdGVzdHM6Ci0gICAgICAgICAgICBuYW1lcyA9IFt0
ZXN0LnJlcGxhY2Uoc2VsZi5fcHJvZ3JhbXNfcGF0aCwgJycsIDEpIGZvciB0ZXN0IGluIGZhaWxl
ZF90ZXN0c10KKyAgICAgICAgICAgIG5hbWVzID0gW3Rlc3QucmVwbGFjZShzZWxmLl90ZXN0X3By
b2dyYW1zX2Jhc2VfZGlyKCksICcnLCAxKSBmb3IgdGVzdCBpbiBmYWlsZWRfdGVzdHNdCiAgICAg
ICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJUZXN0cyBmYWlsZWQgKCVkKTogJXNcbiIgJSAobGVu
KG5hbWVzKSwgIiwgIi5qb2luKG5hbWVzKSkpCiAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNo
KCkKIAogICAgICAgICBpZiBjcmFzaGVkX3Rlc3RzOgotICAgICAgICAgICAgbmFtZXMgPSBbdGVz
dC5yZXBsYWNlKHNlbGYuX3Byb2dyYW1zX3BhdGgsICcnLCAxKSBmb3IgdGVzdCBpbiBjcmFzaGVk
X3Rlc3RzXQorICAgICAgICAgICAgbmFtZXMgPSBbdGVzdC5yZXBsYWNlKHNlbGYuX3Rlc3RfcHJv
Z3JhbXNfYmFzZV9kaXIoKSwgJycsIDEpIGZvciB0ZXN0IGluIGNyYXNoZWRfdGVzdHNdCiAgICAg
ICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJUZXN0cyB0aGF0IGNyYXNoZWQgKCVkKTogJXNcbiIg
JSAobGVuKG5hbWVzKSwgIiwgIi5qb2luKG5hbWVzKSkpCiAgICAgICAgICAgICBzeXMuc3Rkb3V0
LmZsdXNoKCkKIAogICAgICAgICBpZiB0aW1lZF9vdXRfdGVzdHM6Ci0gICAgICAgICAgICBuYW1l
cyA9IFt0ZXN0LnJlcGxhY2Uoc2VsZi5fcHJvZ3JhbXNfcGF0aCwgJycsIDEpIGZvciB0ZXN0IGlu
IHRpbWVkX291dF90ZXN0c10KKyAgICAgICAgICAgIG5hbWVzID0gW3Rlc3QucmVwbGFjZShzZWxm
Ll90ZXN0X3Byb2dyYW1zX2Jhc2VfZGlyKCksICcnLCAxKSBmb3IgdGVzdCBpbiB0aW1lZF9vdXRf
dGVzdHNdCiAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJUZXN0cyB0aGF0IHRpbWVkIG91
dCAoJWQpOiAlc1xuIiAlIChsZW4obmFtZXMpLCAiLCAiLmpvaW4obmFtZXMpKSkKICAgICAgICAg
ICAgIHN5cy5zdGRvdXQuZmx1c2goKQogCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3N0eWxlL2NoZWNrZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNr
ZXIucHkKaW5kZXggNDIxZWYyNzM3MjE5NzMxZTA2ZGNiMWNhNTYzMTA2NGQyOWRhMmVlMS4uY2Mz
ZGEyNTM1NDZhZDNhOGNkY2U0M2YwMjQyODMzMzUzZTkxZDY0MyAxMDA2NDQKLS0tIGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvc3R5bGUvY2hlY2tlci5weQpAQCAtMzE3LDcgKzMxNyw3IEBAIF9DTUFLRV9GSUxFX0VY
VEVOU0lPTiA9ICdjbWFrZScKICMgV2ViS2l0IG1haW50YWlucyBzb21lIGZpbGVzIGluIE1vemls
bGEgc3R5bGUgb24gcHVycG9zZSB0byBlYXNlCiAjIGZ1dHVyZSBtZXJnZXMuCiBfU0tJUFBFRF9G
SUxFU19XSVRIX1dBUk5JTkcgPSBbCi0gICAgIlNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzLyIsCisg
ICAgIlRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrLyIsCiAgICAgIyBBbGwgV2Vi
S2l0Ki5oIGZpbGVzIGluIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrLAogICAgICMg
ZXhjZXB0IHRob3NlIGVuZGluZyBpbiAuLi5Qcml2YXRlLmggYXJlIEdUSysgQVBJIGhlYWRlcnMs
CiAgICAgIyB3aGljaCBkaWZmZXIgZ3JlYXRseSBmcm9tIFdlYktpdCBjb2Rpbmcgc3R5bGUuCmRp
ZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJfdW5pdHRlc3Qu
cHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJfdW5pdHRlc3QucHkKaW5k
ZXggOTQ1YWZmOThmMjZjMDM5MDNlOGQ5OTk4Y2QwNGM4OGMwNWQwMmU2OC4uYjk1NGU2YjcwNWMy
MjU0Yzk2ZDYwOTcxYzU0NTIxZmExNjU5NzFlMSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9zdHlsZS9jaGVja2VyX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvc3R5bGUvY2hlY2tlcl91bml0dGVzdC5weQpAQCAtMjgwLDcgKzI4MCw3IEBAIGNsYXNz
IENoZWNrZXJEaXNwYXRjaGVyU2tpcFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAi
IiJUZXN0IHNob3VsZF9za2lwX3dpdGhfd2FybmluZygpLiIiIgogICAgICAgICAjIENoZWNrIHNr
aXBwZWQgZmlsZXMuCiAgICAgICAgIHBhdGhzX3RvX3NraXAgPSBbCi0gICAgICAgICAgICJTb3Vy
Y2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXRrLmMiLAorICAgICAgICAgICAiVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGF0ay5jIiwKICAgICAgICAgICAgIlNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaCIsCiAgICAgICAgICAgICJTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgiLAogICAgICAgICAgICAi
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TG9hZGVyLmgiLApAQCAtMjk3
LDggKzI5Nyw4IEBAIGNsYXNzIENoZWNrZXJEaXNwYXRjaGVyU2tpcFRlc3QodW5pdHRlc3QuVGVz
dENhc2UpOgogICAgICAgICAgICAiU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvSGVs
cGVyQ2xhc3MuaCIsCiAgICAgICAgICAgICJTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3LmNwcCIsCiAgICAgICAgICAgICJTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oIiwKLSAgICAgICAgICAgIlNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcCIsCi0gICAgICAg
ICAgICJTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5o
IiwKKyAgICAgICAgICAgIlRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9XZWJW
aWV3VGVzdC5jcHAiLAorICAgICAgICAgICAiVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXQyR3RrL1dlYlZpZXdUZXN0LmgiLAogICAgICAgICAgICAgXQogCiAgICAgICAgIGZvciBwYXRo
IGluIHBhdGhzX25vdF90b19za2lwOgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9H
TlVtYWtlZmlsZS5hbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvR05VbWFrZWZpbGUuYW0KaW5kZXgg
MmVhMTA0MDk5NjMzM2ZlNDExYWVlMzAxNTcwMzYyZjkyOGY1YjQyOC4uZjAxNWExOWYxZDcyMDU1
MTg3NTQ2Y2FhYzBkY2YxNDZmYWRkZDVjNyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9HTlVtYWtlZmlsZS5hbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0dOVW1ha2VmaWxlLmFt
CkBAIC0xLDYgKzEsMTEgQEAKIG5vaW5zdF9MVExJQlJBUklFUyArPSBcCiAJTGlicmFyaWVzL2xp
YlRlc3RXZWJLaXRBUElNYWluLmxhCiAKK2lmIEVOQUJMRV9XRUJLSVQyCitub2luc3RfTFRMSUJS
QVJJRVMgKz0gXAorCUxpYnJhcmllcy9saWJUZXN0V2ViS2l0Mkd0a0FQSS5sYQorZW5kaWYKKwog
TGlicmFyaWVzX2xpYlRlc3RXZWJLaXRBUElNYWluX2xhX1NPVVJDRVMgPSBcCiAJVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0LmggXAogCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHNDb250cm9sbGVy
LmNwcCBcCkBAIC0yMCwzNyArMjUsMTg0IEBAIExpYnJhcmllc19saWJUZXN0V2ViS2l0QVBJTWFp
bl9sYV9DUFBGTEFHUyA9IFwKIAkkKGphdmFzY3JpcHRjb3JlX2NwcGZsYWdzKSBcCiAJJChHVEtf
Q0ZMQUdTKQogCit3ZWJraXRndGtfdGVzdHNfY2ZsYWdzID0gXAorCS1mbm8tc3RyaWN0LWFsaWFz
aW5nIFwKKwktRFRFU1RfUExVR0lOX0RJUj1cIiR7c2hlbGwgcHdkfS8ke3RvcF9idWlsZGRpcn0v
VGVzdE5ldHNjYXBlUGx1Z2luLy5saWJzXCIgXAorCS1JJChzcmNkaXIpL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9Gb3J3YXJkaW5nSGVhZGVycyBcCisJLUkkKFdlYktpdCkgXAorCS1JJChHRU5TT1VS
Q0VTKSBcCisJLUkkKHRvcF9idWlsZGRpcikvU291cmNlL1dlYktpdC9ndGsgXAorCS1JJCh0b3Bf
c3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncyBcCisJLUkkKHRvcF9zcmNkaXIpL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QgXAorCSQoZ2xvYmFsX2NwcGZsYWdzKSBcCisJJChn
bG9iYWxfY2ZsYWdzKSBcCisJJChqYXZhc2NyaXB0Y29yZV9jcHBmbGFncykgXAorCSQoRlJFRVRZ
UEVfQ0ZMQUdTKSBcCisJJChHTElCX0NGTEFHUykgXAorCSQoR1RLX0NGTEFHUykgXAorCSQoTElC
U09VUF9DRkxBR1MpIFwKKwkkKFhSRU5ERVJfQ0ZMQUdTKSBcCisJJChYVF9DRkxBR1MpCisKK3dl
YmtpdGd0a190ZXN0c19sZGFkZCA9IFwKKwlsaWJqYXZhc2NyaXB0Y29yZWd0ay1AV0VCS0lUR1RL
X0FQSV9NQUpPUl9WRVJTSU9OQC5AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQC5sYSBcCisJ
bGlid2Via2l0Z3RrLUBXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05ALkBXRUJLSVRHVEtfQVBJ
X01JTk9SX1ZFUlNJT05ALmxhIFwKKwkkKEZSRUVUWVBFX0xJQlMpIFwKKwkkKEdUS19MSUJTKSBc
CisJJChHTElCX0xJQlMpIFwKKwkkKExJQlNPVVBfTElCUykgXAorCSQoWFJFTkRFUl9MSUJTKQor
Cit3ZWJraXRndGtfdGVzdHNfbGRmbGFncyA9IFwKKwktbm8taW5zdGFsbAorCisKK3dlYmtpdDJn
dGtfdGVzdHNfY3BwZmxhZ3MgPSBcCisJLURXRUJLSVRfRVhFQ19QQVRIPVwiJHtzaGVsbCBwd2R9
LyQodG9wX2J1aWxkZGlyKS9Qcm9ncmFtc1wiIFwKKwktRFdFQktJVF9TUkNfRElSPVwiJHtzaGVs
bCBwd2R9LyR7c3JjZGlyfVwiIFwKKwktRFdFQktJVF9ERVJJVkVEX1NSQ19ESVI9XCIke3NoZWxs
IHB3ZH0vJHt0b3BfYnVpbGRkaXJ9L0Rlcml2ZWRTb3VyY2VzXCIgXAorCS1EV0VCS0lUX1RFU1Rf
UExVR0lOX0RJUj1cIiR7c2hlbGwgcHdkfS8ke3RvcF9idWlsZGRpcn0vVGVzdE5ldHNjYXBlUGx1
Z2luLy5saWJzXCIgXAorCS1EV0VCS0lUX1RFU1RfV0VCX0VYVEVOU0lPTlNfRElSPVwiJHtzaGVs
bCBwd2R9LyR7dG9wX2J1aWxkZGlyfS9MaWJyYXJpZXMvV2ViRXh0ZW5zaW9ucy8ubGlic1wiIFwK
KwktRFdFQktJVF9JTkpFQ1RFRF9CVU5ETEVfUEFUSD1cIiR7c2hlbGwgcHdkfS8kKHRvcF9idWls
ZGRpcikvLmxpYnNcIiBcCisJJChqYXZhc2NyaXB0Y29yZV9jcHBmbGFncykgXAorCS1JJChzcmNk
aXIpL1NvdXJjZSBcCisJLUkkKHNyY2RpcikvU291cmNlL1dlYktpdDIgXAorCS1JJChzcmNkaXIp
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZSBcCisJLUkkKHNyY2RpcikvVG9vbHMvVGVzdFdlYktpdEFQ
SS9ndGsvV2ViS2l0Mkd0ayBcCisJLUkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJjZXMvV2Vi
S2l0Mi9pbmNsdWRlIFwKKwktSSQodG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcy9XZWJLaXQy
L3dlYmtpdDJndGsgXAorCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIv
d2Via2l0Mmd0ay9pbmNsdWRlIFwKKwktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ayBcCisJJChnbG9iYWxfY3BwZmxhZ3MpIFwKKwkkKEZSRUVUWVBFX0NGTEFHUykg
XAorCSQoR0xJQl9DRkxBR1MpIFwKKwkkKEdUS19DRkxBR1MpIFwKKwkkKExJQlNPVVBfQ0ZMQUdT
KQorCit3ZWJraXQyZ3RrX3Rlc3RzX2xkYWRkID0gXAorCUxpYnJhcmllcy9saWJUZXN0V2ViS2l0
Mkd0a0FQSS5sYSBcCisJbGliamF2YXNjcmlwdGNvcmVndGstQFdFQktJVEdUS19BUElfTUFKT1Jf
VkVSU0lPTkAuQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkAubGEgXAorCWxpYndlYmtpdDJn
dGstQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkAuQFdFQktJVEdUS19BUElfTUlOT1JfVkVS
U0lPTkAubGEgXAorCSQoRlJFRVRZUEVfTElCUykgXAorCSQoR0VPQ0xVRV9MSUJTKSBcCisJJChH
TElCX0xJQlMpIFwKKwkkKEdUS19MSUJTKSBcCisJJChMSUJTT1VQX0xJQlMpCisKK3dlYmtpdDJn
dGtfdGVzdHNfbGRmbGFncyA9IFwKKwktbm8taW5zdGFsbAorCitMaWJyYXJpZXNfbGliVGVzdFdl
YktpdDJHdGtBUElfbGFfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdDJHdGsvTG9hZFRyYWNraW5nVGVzdC5jcHAgXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Mkd0ay9Mb2FkVHJhY2tpbmdUZXN0LmggXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Mkd0ay9XZWJLaXRUZXN0QnVzLmNwcCBcCisJVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXQyR3RrL1dlYktpdFRlc3RCdXMuaCBcCisJVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXQyR3RrL1dlYktpdFRlc3RTZXJ2ZXIuY3BwIFwKKwlUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvV2ViS2l0VGVzdFNlcnZlci5oIFwKKwlUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvV2ViUHJvY2Vzc1Rlc3RSdW5uZXIuY3BwIFwKKwlU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvV2ViUHJvY2Vzc1Rlc3RSdW5uZXIu
aCBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RNYWluLmNwcCBc
CisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RNYWluLmggXAorCVRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9XZWJWaWV3VGVzdC5jcHAgXAorCVRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9XZWJWaWV3VGVzdC5oCisKK0xpYnJh
cmllc19saWJUZXN0V2ViS2l0Mkd0a0FQSV9sYV9DUFBGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0
c19jcHBmbGFncykKKworCiBub2luc3RfUFJPR1JBTVMgKz0gXAotCVByb2dyYW1zL1Rlc3RXZWJL
aXRBUEkvVGVzdFdURiBcCi0JUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9UZXN0SmF2YVNjcmlwdENv
cmUgXAotCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYkNvcmUgXAotCVByb2dyYW1zL1Rl
c3RXZWJLaXRBUEkvVGVzdEd0aworCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV1RGL1Rlc3RXVEYg
XAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvSmF2YVNjcmlwdENvcmUvVGVzdEphdmFTY3JpcHRD
b3JlIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYkNvcmUvVGVzdFdlYkNvcmUgXAorCVBy
b2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViQ29yZUd0ay9UZXN0V2ViQ29yZUd0aworCitpZiBFTkFC
TEVfV0VCS0lUMQorbm9pbnN0X1BST0dSQU1TICs9IFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJ
L1dlYktpdEd0ay90ZXN0YXBwbGljYXRpb25jYWNoZSBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQ
SS9XZWJLaXRHdGsvdGVzdGNvbnRleHRtZW51IFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dl
YktpdEd0ay90ZXN0ZG9tZG9jdW1lbnQgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0
R3RrL3Rlc3Rkb21kb213aW5kb3cgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0R3Rr
L3Rlc3Rkb21ub2RlIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdEd0ay90ZXN0aHR0
cGJhY2tlbmQgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0R3RrL3Rlc3RmYXZpY29u
ZGF0YWJhc2UgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0R3RrL3Rlc3Rsb2FkaW5n
IFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdEd0ay90ZXN0Z2xvYmFscyBcCisJUHJv
Z3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXRHdGsvdGVzdG1pbWVoYW5kbGluZyBcCisJUHJvZ3Jh
bXMvVGVzdFdlYktpdEFQSS9XZWJLaXRHdGsvdGVzdG5ldHdvcmtyZXF1ZXN0IFwKKwlQcm9ncmFt
cy9UZXN0V2ViS2l0QVBJL1dlYktpdEd0ay90ZXN0bmV0d29ya3Jlc3BvbnNlIFwKKwlQcm9ncmFt
cy9UZXN0V2ViS2l0QVBJL1dlYktpdEd0ay90ZXN0d2ViZnJhbWUgXAorCVByb2dyYW1zL1Rlc3RX
ZWJLaXRBUEkvV2ViS2l0R3RrL3Rlc3R3ZWJiYWNrZm9yd2FyZGxpc3QgXAorCVByb2dyYW1zL1Rl
c3RXZWJLaXRBUEkvV2ViS2l0R3RrL3Rlc3R3ZWJoaXN0b3J5aXRlbSBcCisJUHJvZ3JhbXMvVGVz
dFdlYktpdEFQSS9XZWJLaXRHdGsvdGVzdHdpbmRvdyBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQ
SS9XZWJLaXRHdGsvdGVzdGRvd25sb2FkIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktp
dEd0ay90ZXN0YXRrIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdEd0ay90ZXN0YXRr
cm9sZXMgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0R3RrL3Rlc3RoaXR0ZXN0cmVz
dWx0IFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdEd0ay90ZXN0d2ViaW5zcGVjdG9y
IFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdEd0ay90ZXN0d2Vic2V0dGluZ3MgXAor
CVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0R3RrL3Rlc3R3ZWJyZXNvdXJjZSBcCisJUHJv
Z3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXRHdGsvdGVzdHdlYmRhdGFzb3VyY2UgXAorCVByb2dy
YW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0R3RrL3Rlc3R3ZWJwbHVnaW5kYXRhYmFzZSBcCisJUHJv
Z3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXRHdGsvdGVzdHdlYnZpZXcgXAorCVByb2dyYW1zL1Rl
c3RXZWJLaXRBUEkvV2ViS2l0R3RrL3Rlc3RrZXlldmVudHMgXAorCVByb2dyYW1zL1Rlc3RXZWJL
aXRBUEkvV2ViS2l0R3RrL3Rlc3Rjb3B5YW5kcGFzdGUKK2VuZGlmCiAKIGlmIEVOQUJMRV9XRUJL
SVQyCiBub2luc3RfUFJPR1JBTVMgKz0gXAotCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvVGVzdFdl
YktpdDIKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdDIvVGVzdFdlYktpdDIgXAorCVBy
b2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0Mkd0ay9JbnNwZWN0b3JUZXN0U2VydmVyIFwKKwlQ
cm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdDJHdGsvVGVzdEF1dGhlbnRpY2F0aW9uIFwKKwlQ
cm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdDJHdGsvVGVzdEJhY2tGb3J3YXJkTGlzdCBcCisJ
UHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXQyR3RrL1Rlc3RDb250ZXh0TWVudSBcCisJUHJv
Z3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXQyR3RrL1Rlc3RDb29raWVNYW5hZ2VyIFwKKwlQcm9n
cmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdDJHdGsvVGVzdERPTU5vZGUgXAorCVByb2dyYW1zL1Rl
c3RXZWJLaXRBUEkvV2ViS2l0Mkd0ay9UZXN0RG93bmxvYWRzIFwKKwlQcm9ncmFtcy9UZXN0V2Vi
S2l0QVBJL1dlYktpdDJHdGsvVGVzdEZyYW1lIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dl
YktpdDJHdGsvVGVzdEluc3BlY3RvciBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXQy
R3RrL1Rlc3RJbnNwZWN0b3JTZXJ2ZXIgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0
Mkd0ay9UZXN0TG9hZGVyQ2xpZW50IFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdDJH
dGsvVGVzdFByaW50aW5nIFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdDJHdGsvVGVz
dFJlc291cmNlcyBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXQyR3RrL1Rlc3RTU0wg
XAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0Mkd0ay9UZXN0VUlDbGllbnQgXAorCVBy
b2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0Mkd0ay9UZXN0V2ViRXh0ZW5zaW9ucyBcCisJUHJv
Z3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRWZXJzaW9uIFwKKwlQcm9n
cmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdDJHdGsvVGVzdFdlYktpdEZhdmljb25EYXRhYmFzZSBc
CisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRGaW5kQ29udHJv
bGxlciBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRQb2xp
Y3lDbGllbnQgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0
U2V0dGluZ3MgXAorCVByb2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0
V2ViQ29udGV4dCBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXQyR3RrL1Rlc3RXZWJL
aXRXZWJWaWV3IFwKKwlQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdDJHdGsvVGVzdFdlYktp
dFdlYlZpZXdHcm91cCBcCisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXQyR3RrL1Rlc3RX
ZWJWaWV3RWRpdG9yCisKK2lmIEhBVkVfQVRTUEkyCitub2luc3RfUFJPR1JBTVMgKz0gXAorCVBy
b2dyYW1zL1Rlc3RXZWJLaXRBUEkvV2ViS2l0Mkd0ay9BY2Nlc3NpYmlsaXR5VGVzdFNlcnZlciBc
CisJUHJvZ3JhbXMvVGVzdFdlYktpdEFQSS9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRBY2Nlc3NpYmls
aXR5CitlbmRpZgogZW5kaWYgIyBFTkFCTEVfV0VCS0lUMgogCi1Qcm9ncmFtc19UZXN0V2ViS2l0
QVBJX1Rlc3RXVEZfQ1BQRkxBR1MgPSBcCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dURl9UZXN0
V1RGX0NQUEZMQUdTID0gXAogCSQoTGlicmFyaWVzX2xpYlRlc3RXZWJLaXRBUElNYWluX2xhX0NQ
UEZMQUdTKSBcCiAJJChHTElCX0xJQlMpIFwKIAkkKENBSVJPX0NGTEFHUykKIAotUHJvZ3JhbXNf
VGVzdFdlYktpdEFQSV9UZXN0V1RGX0NYWEZMQUdTID0gXAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQ
SV9XVEZfVGVzdFdURl9DWFhGTEFHUyA9IFwKIAktREdURVNUX0hBU19SVFRJPTAgXAogCSQoZ2xv
YmFsX2N4eGZsYWdzKQogCi1Qcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RXVEZfTERBREQgPSBc
CitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dURl9UZXN0V1RGX0xEQUREID0gXAogCUxpYnJhcmll
cy9saWJUZXN0V2ViS2l0QVBJTWFpbi5sYSBcCiAJTGlicmFyaWVzL2xpYmd0ZXN0LmxhIFwKIAls
aWJXVEYubGEgXAogCSQoR1RLX0xJQlMpIFwKIAkkKEdMSUJfTElCUykKIAotUHJvZ3JhbXNfVGVz
dFdlYktpdEFQSV9UZXN0V1RGX0xERkxBR1MgPSBcCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dU
Rl9UZXN0V1RGX0xERkxBR1MgPSBcCiAJLW5vLWluc3RhbGwKIAotUHJvZ3JhbXNfVGVzdFdlYktp
dEFQSV9UZXN0V1RGX1NPVVJDRVMgPSBcCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dURl9UZXN0
V1RGX1NPVVJDRVMgPSBcCiAJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQXRvbWljU3Ry
aW5nLmNwcCBcCiAJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ1N0cmluZy5jcHAgXAog
CVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NoZWNrZWRBcml0aG1ldGljT3BlcmF0aW9u
cy5jcHAgXApAQCAtNzgsMjMgKzIzMCwyMyBAQCBQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RX
VEZfU09VUkNFUyA9IFwKIAlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9WZWN0b3IuY3Bw
IFwKIAlUb29scy9UZXN0V2ViS2l0QVBJL1dURlN0cmluZ1V0aWxpdGllcy5oCiAKLVByb2dyYW1z
X1Rlc3RXZWJLaXRBUElfVGVzdEphdmFTY3JpcHRDb3JlX0NQUEZMQUdTID0gXAorUHJvZ3JhbXNf
VGVzdFdlYktpdEFQSV9KYXZhU2NyaXB0Q29yZV9UZXN0SmF2YVNjcmlwdENvcmVfQ1BQRkxBR1Mg
PSBcCiAJJChMaWJyYXJpZXNfbGliVGVzdFdlYktpdEFQSU1haW5fbGFfQ1BQRkxBR1MpCiAKLVBy
b2dyYW1zX1Rlc3RXZWJLaXRBUElfVGVzdEphdmFTY3JpcHRDb3JlX0NYWEZMQUdTID0gXAorUHJv
Z3JhbXNfVGVzdFdlYktpdEFQSV9KYXZhU2NyaXB0Q29yZV9UZXN0SmF2YVNjcmlwdENvcmVfQ1hY
RkxBR1MgPSBcCiAJLURHVEVTVF9IQVNfUlRUST0wIFwKIAkkKGdsb2JhbF9jeHhmbGFncykKIAot
UHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0SmF2YVNjcmlwdENvcmVfTERBREQgPSBcCitQcm9n
cmFtc19UZXN0V2ViS2l0QVBJX0phdmFTY3JpcHRDb3JlX1Rlc3RKYXZhU2NyaXB0Q29yZV9MREFE
RCA9IFwKIAlMaWJyYXJpZXMvbGliVGVzdFdlYktpdEFQSU1haW4ubGEgXAogCUxpYnJhcmllcy9s
aWJndGVzdC5sYSBcCiAJbGliV1RGLmxhIFwKIAkkKEdUS19MSUJTKQogCi1Qcm9ncmFtc19UZXN0
V2ViS2l0QVBJX1Rlc3RKYXZhU2NyaXB0Q29yZV9MREZMQUdTID0gXAorUHJvZ3JhbXNfVGVzdFdl
YktpdEFQSV9KYXZhU2NyaXB0Q29yZV9UZXN0SmF2YVNjcmlwdENvcmVfTERGTEFHUyA9IFwKIAkt
bm8taW5zdGFsbAogCi1Qcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RKYXZhU2NyaXB0Q29yZV9T
T1VSQ0VTID0gXAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9KYXZhU2NyaXB0Q29yZV9UZXN0SmF2
YVNjcmlwdENvcmVfU09VUkNFUyA9IFwKIAlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL0phdmFT
Y3JpcHRDb3JlL1ZNSW5zcGVjdG9yLmNwcAogCiB3ZWJjb3JlX2xheWVyX2RlcHMgPSBcCkBAIC0x
MjksMTUgKzI4MSwxNSBAQCBsaWJXZWJDb3JlTGF5ZXIuYTogJCh3ZWJjb3JlX2xheWVyX2RlcHMp
CiBESVNUQ0xFQU5GSUxFUyArPSBcCiAJJCh0b3BfYnVpbGRkaXIpL2xpYldlYkNvcmVMYXllci5h
CiAKLVByb2dyYW1zX1Rlc3RXZWJLaXRBUElfVGVzdFdlYkNvcmVfQ1BQRkxBR1MgPSBcCitQcm9n
cmFtc19UZXN0V2ViS2l0QVBJX1dlYkNvcmVfVGVzdFdlYkNvcmVfQ1BQRkxBR1MgPSBcCiAJJChM
aWJyYXJpZXNfbGliVGVzdFdlYktpdEFQSU1haW5fbGFfQ1BQRkxBR1MpIFwKIAktSSQodG9wX2J1
aWxkZGlyKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL2luY2x1ZGUKIAotUHJvZ3JhbXNfVGVzdFdl
YktpdEFQSV9UZXN0V2ViQ29yZV9DWFhGTEFHUyA9IFwKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElf
V2ViQ29yZV9UZXN0V2ViQ29yZV9DWFhGTEFHUyA9IFwKIAktREdURVNUX0hBU19SVFRJPTAgXAog
CSQoZ2xvYmFsX2N4eGZsYWdzKQogCi1Qcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RXZWJDb3Jl
X0xEQUREID0gXAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJDb3JlX1Rlc3RXZWJDb3JlX0xE
QUREID0gXAogCUxpYnJhcmllcy9saWJUZXN0V2ViS2l0QVBJTWFpbi5sYSBcCiAJTGlicmFyaWVz
L2xpYmd0ZXN0LmxhIFwKIAlsaWJqYXZhc2NyaXB0Y29yZWd0ay1AV0VCS0lUR1RLX0FQSV9NQUpP
Ul9WRVJTSU9OQC5AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQC5sYSBcCkBAIC0xNjQsMTUg
KzMxNiwxNSBAQCBQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RXZWJDb3JlX0xEQUREID0gXAog
CSQoWFRfTElCUykgXAogCSQoWkxJQl9MSUJTKQogCi1Qcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rl
c3RXZWJDb3JlX0xERkxBR1MgPSBcCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYkNvcmVfVGVz
dFdlYkNvcmVfTERGTEFHUyA9IFwKIAktbm8taW5zdGFsbAogCi1Qcm9ncmFtc19UZXN0V2ViS2l0
QVBJX1Rlc3RXZWJDb3JlX1NPVVJDRVMgPSBcCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYkNv
cmVfVGVzdFdlYkNvcmVfU09VUkNFUyA9IFwKIAlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvVVJMLmNwcCBcCiAJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0xheW91
dFVuaXQuY3BwCiAKLVByb2dyYW1zX1Rlc3RXZWJLaXRBUElfVGVzdEd0a19DUFBGTEFHUyA9IFwK
LQkkKFByb2dyYW1zX1Rlc3RXZWJLaXRBUElfVGVzdFdURl9DUFBGTEFHUykgXAorUHJvZ3JhbXNf
VGVzdFdlYktpdEFQSV9XZWJDb3JlR3RrX1Rlc3RXZWJDb3JlR3RrX0NQUEZMQUdTID0gXAorCSQo
UHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XVEZfVGVzdFdURl9DUFBGTEFHUykgXAogCSQocGxhdGZv
cm1fY3BwZmxhZ3MpIFwKIAkkKHBsYXRmb3JtZ3RrX2NwcGZsYWdzKSBcCiAJJCh3ZWJjb3JlX2Nw
cGZsYWdzKSBcCkBAIC0xODIsMTEgKzMzNCwxMSBAQCBQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rl
c3RHdGtfQ1BQRkxBR1MgPSBcCiAJJChHVEtfQ0ZMQUdTKSBcCiAJJChMSUJTT1VQX0NGTEFHUykK
IAotUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0R3RrX0NYWEZMQUdTID0gXAorUHJvZ3JhbXNf
VGVzdFdlYktpdEFQSV9XZWJDb3JlR3RrX1Rlc3RXZWJDb3JlR3RrX0NYWEZMQUdTID0gXAogCS1E
R1RFU1RfSEFTX1JUVEk9MCBcCiAJJChnbG9iYWxfY3h4ZmxhZ3MpCiAKLVByb2dyYW1zX1Rlc3RX
ZWJLaXRBUElfVGVzdEd0a19MREFERCA9IFwKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViQ29y
ZUd0a19UZXN0V2ViQ29yZUd0a19MREFERCA9IFwKIAlMaWJyYXJpZXMvbGliVGVzdFdlYktpdEFQ
SU1haW4ubGEgXAogCUxpYnJhcmllcy9saWJndGVzdC5sYSBcCiAJbGliamF2YXNjcmlwdGNvcmVn
dGstQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkAuQFdFQktJVEdUS19BUElfTUlOT1JfVkVS
U0lPTkAubGEgXApAQCAtMTk4LDEwICszNTAsMTAgQEAgUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9U
ZXN0R3RrX0xEQUREID0gXAogCSQoR1RLX0xJQlMpIFwKIAkkKExJQlNPVVBfTElCUykKIAotUHJv
Z3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0R3RrX0xERkxBR1MgPSBcCi0JJChQcm9ncmFtc19UZXN0
V2ViS2l0QVBJX1Rlc3RXVEZfTERGTEFHUykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViQ29y
ZUd0a19UZXN0V2ViQ29yZUd0a19MREZMQUdTID0gXAorCSQoUHJvZ3JhbXNfVGVzdFdlYktpdEFQ
SV9XVEZfVGVzdFdURl9MREZMQUdTKQogCi1Qcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RHdGtf
U09VUkNFUyA9IFwKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViQ29yZUd0a19UZXN0V2ViQ29y
ZUd0a19TT1VSQ0VTID0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFBv
aW50LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFNpemUuY3BwIFwKQEAgLTIx
MSwxOSArMzYzLDE5MiBAQCBQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RHdGtfU09VUkNFUyA9
IFwKIAlUb29scy9UZXN0V2ViS2l0QVBJL2NvbmZpZy5oIFwKIAlUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL2d0ay9JbnB1dE1ldGhvZEZpbHRlci5jcHAKIAotUHJvZ3JhbXNfVGVzdFdlYktpdEFQ
SV9UZXN0V2ViS2l0Ml9DUFBGTEFHUyA9IFwKLQkkKFByb2dyYW1zX1Rlc3RXZWJLaXRBUElfVGVz
dFdURl9DUFBGTEFHUykgXAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGFw
cGxpY2F0aW9uY2FjaGVfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdEd0ay90ZXN0YXBwbGljYXRpb25jYWNoZS5jCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dl
YktpdEd0a190ZXN0YXBwbGljYXRpb25jYWNoZV9DRkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19j
ZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0YXBwbGljYXRpb25j
YWNoZV9MREFERCA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktp
dEFQSV9XZWJLaXRHdGtfdGVzdGFwcGxpY2F0aW9uY2FjaGVfTERGTEFHUyA9ICQod2Via2l0Z3Rr
X3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3Rj
b250ZXh0bWVudV9TT1VSQ0VTID0gXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
R3RrL3Rlc3Rjb250ZXh0bWVudS5jCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190
ZXN0Y29udGV4dG1lbnVfQ0ZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfY2ZsYWdzKQorUHJvZ3Jh
bXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGNvbnRleHRtZW51X0xEQUREID0gJCh3ZWJr
aXRndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0
Y29udGV4dG1lbnVfTERGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dy
YW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3Rkb21kb2N1bWVudF9TT1VSQ0VTID0gXAor
CVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3Rkb21kb2N1bWVudC5jCitQ
cm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0ZG9tZG9jdW1lbnRfQ0ZMQUdTID0g
JCh3ZWJraXRndGtfdGVzdHNfY2ZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRH
dGtfdGVzdGRvbWRvY3VtZW50X0xEQUREID0gJCh3ZWJraXRndGtfdGVzdHNfbGRhZGQpCitQcm9n
cmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0ZG9tZG9jdW1lbnRfTERGTEFHUyA9ICQo
d2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0
R3RrX3Rlc3Rkb21kb213aW5kb3dfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdEd0ay90ZXN0ZG9tZG9td2luZG93LmMKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElf
V2ViS2l0R3RrX3Rlc3Rkb21kb213aW5kb3dfQ0ZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfY2Zs
YWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGRvbWRvbXdpbmRvd19M
REFERCA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9X
ZWJLaXRHdGtfdGVzdGRvbWRvbXdpbmRvd19MREZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfbGRm
bGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGRvbW5vZGVfU09V
UkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0ZG9tbm9k
ZS5jCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0ZG9tbm9kZV9DRkxBR1Mg
PSAkKHdlYmtpdGd0a190ZXN0c19jZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktp
dEd0a190ZXN0ZG9tbm9kZV9MREFERCA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3Jh
bXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGRvbW5vZGVfTERGTEFHUyA9ICQod2Via2l0
Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rl
c3RodHRwYmFja2VuZF9TT1VSQ0VTID0gXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0R3RrL3Rlc3RodHRwYmFja2VuZC5jCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0
a190ZXN0aHR0cGJhY2tlbmRfQ0ZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfY2ZsYWdzKQorUHJv
Z3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGh0dHBiYWNrZW5kX0xEQUREID0gJCh3
ZWJraXRndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190
ZXN0aHR0cGJhY2tlbmRfTERGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1By
b2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3RmYXZpY29uZGF0YWJhc2VfU09VUkNF
UyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0ZmF2aWNvbmRh
dGFiYXNlLmMgXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RfdXRp
bHMuYworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGZhdmljb25kYXRhYmFz
ZV9DRkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19jZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0
QVBJX1dlYktpdEd0a190ZXN0ZmF2aWNvbmRhdGFiYXNlX0xEQUREID0gJCh3ZWJraXRndGtfdGVz
dHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0ZmF2aWNvbmRh
dGFiYXNlX0xERkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19U
ZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0Z2xvYmFsc19TT1VSQ0VTID0gXAorCVRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RnbG9iYWxzLmMKK1Byb2dyYW1zX1Rlc3RX
ZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3RnbG9iYWxzX0NGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3Rz
X2NmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3RnbG9iYWxzX0xE
QUREID0gJCh3ZWJraXRndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dl
YktpdEd0a190ZXN0Z2xvYmFsc19MREZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfbGRmbGFncykK
KworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGxvYWRpbmdfU09VUkNFUyA9
IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0bG9hZGluZy5jCitQ
cm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0bG9hZGluZ19DRkxBR1MgPSAkKHdl
YmtpdGd0a190ZXN0c19jZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190
ZXN0bG9hZGluZ19MREFERCA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVz
dFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGxvYWRpbmdfTERGTEFHUyA9ICQod2Via2l0Z3RrX3Rl
c3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3RtaW1l
aGFuZGxpbmdfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0
ay90ZXN0bWltZWhhbmRsaW5nLmMgXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
R3RrL3Rlc3RfdXRpbHMuYworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdG1p
bWVoYW5kbGluZ19DRkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19jZmxhZ3MpCitQcm9ncmFtc19U
ZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0bWltZWhhbmRsaW5nX0xEQUREID0gJCh3ZWJraXRn
dGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0bWlt
ZWhhbmRsaW5nX0xERkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFt
c19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0bmV0d29ya3JlcXVlc3RfU09VUkNFUyA9IFwK
KwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0bmV0d29ya3JlcXVlc3Qu
YworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdG5ldHdvcmtyZXF1ZXN0X0NG
TEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2NmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElf
V2ViS2l0R3RrX3Rlc3RuZXR3b3JrcmVxdWVzdF9MREFERCA9ICQod2Via2l0Z3RrX3Rlc3RzX2xk
YWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdG5ldHdvcmtyZXF1ZXN0
X0xERkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2Vi
S2l0QVBJX1dlYktpdEd0a190ZXN0bmV0d29ya3Jlc3BvbnNlX1NPVVJDRVMgPSBcCisJVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdG5ldHdvcmtyZXNwb25zZS5jCitQcm9n
cmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0bmV0d29ya3Jlc3BvbnNlX0NGTEFHUyA9
ICQod2Via2l0Z3RrX3Rlc3RzX2NmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0
R3RrX3Rlc3RuZXR3b3JrcmVzcG9uc2VfTERBREQgPSAkKHdlYmtpdGd0a190ZXN0c19sZGFkZCkK
K1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3RuZXR3b3JrcmVzcG9uc2VfTERG
TEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRB
UElfV2ViS2l0R3RrX3Rlc3R3ZWJmcmFtZV9TT1VSQ0VTID0gXAorCVRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJmcmFtZS5jCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJ
X1dlYktpdEd0a190ZXN0d2ViZnJhbWVfQ0ZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfY2ZsYWdz
KQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdHdlYmZyYW1lX0xEQUREID0g
JCh3ZWJraXRndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0
a190ZXN0d2ViZnJhbWVfTERGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1By
b2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3R3ZWJwbHVnaW5kYXRhYmFzZV9TT1VS
Q0VTID0gXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJwbHVn
aW5kYXRhYmFzZS5jCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0d2VicGx1
Z2luZGF0YWJhc2VfQ0ZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfY2ZsYWdzKQorUHJvZ3JhbXNf
VGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdHdlYnBsdWdpbmRhdGFiYXNlX0xEQUREID0gJCh3
ZWJraXRndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190
ZXN0d2VicGx1Z2luZGF0YWJhc2VfTERGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3Mp
CisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3R3ZWJiYWNrZm9yd2FyZGxp
c3RfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0
d2ViYmFja2ZvcndhcmRsaXN0LmMKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rl
c3R3ZWJiYWNrZm9yd2FyZGxpc3RfQ0ZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfY2ZsYWdzKQor
UHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdHdlYmJhY2tmb3J3YXJkbGlzdF9M
REFERCA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9X
ZWJLaXRHdGtfdGVzdHdlYmJhY2tmb3J3YXJkbGlzdF9MREZMQUdTID0gJCh3ZWJraXRndGtfdGVz
dHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdHdlYmhp
c3RvcnlpdGVtX1NPVVJDRVMgPSBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRH
dGsvdGVzdHdlYmhpc3RvcnlpdGVtLmMKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3Rr
X3Rlc3R3ZWJoaXN0b3J5aXRlbV9DRkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19jZmxhZ3MpCitQ
cm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0d2ViaGlzdG9yeWl0ZW1fTERBREQg
PSAkKHdlYmtpdGd0a190ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0
R3RrX3Rlc3R3ZWJoaXN0b3J5aXRlbV9MREZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfbGRmbGFn
cykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdHdpbmRvd19TT1VSQ0VT
ID0gXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3aW5kb3cuYwor
UHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdHdpbmRvd19DRkxBR1MgPSAkKHdl
YmtpdGd0a190ZXN0c19jZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190
ZXN0d2luZG93X0xEQUREID0gJCh3ZWJraXRndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0
V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0d2luZG93X0xERkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0
c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0ZG93bmxv
YWRfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0
ZG93bmxvYWQuYworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGRvd25sb2Fk
X0NGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2NmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRB
UElfV2ViS2l0R3RrX3Rlc3Rkb3dubG9hZF9MREFERCA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkYWRk
KQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGRvd25sb2FkX0xERkxBR1Mg
PSAkKHdlYmtpdGd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dl
YktpdEd0a190ZXN0YXRrX1NPVVJDRVMgPSBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRHdGsvdGVzdGF0ay5jCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0
YXRrX0NGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2NmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJL
aXRBUElfV2ViS2l0R3RrX3Rlc3RhdGtfTERBREQgPSAkKHdlYmtpdGd0a190ZXN0c19sZGFkZCkK
K1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3RhdGtfTERGTEFHUyA9ICQod2Vi
a2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3Rr
X3Rlc3RhdGtyb2xlc19TT1VSQ0VTID0gXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0R3RrL3Rlc3RhdGtyb2xlcy5jCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190
ZXN0YXRrcm9sZXNfQ0ZMQUdTID0gJCh3ZWJraXRndGtfdGVzdHNfY2ZsYWdzKQorUHJvZ3JhbXNf
VGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGF0a3JvbGVzX0xEQUREID0gJCh3ZWJraXRndGtf
dGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0YXRrcm9s
ZXNfTERGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RX
ZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3R3ZWJpbnNwZWN0b3JfU09VUkNFUyA9IFwKKwlUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2ViaW5zcGVjdG9yLmMgXAorCVRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RfdXRpbHMuYworUHJvZ3JhbXNfVGVz
dFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdHdlYmluc3BlY3Rvcl9DRkxBR1MgPSAkKHdlYmtpdGd0
a190ZXN0c19jZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0d2Vi
aW5zcGVjdG9yX0xEQUREID0gJCh3ZWJraXRndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0
V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0d2ViaW5zcGVjdG9yX0xERkxBR1MgPSAkKHdlYmtpdGd0
a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0
d2Vic2V0dGluZ3NfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dEd0ay90ZXN0d2Vic2V0dGluZ3MuYworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtf
dGVzdHdlYnNldHRpbmdzX0NGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2NmbGFncykKK1Byb2dy
YW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3R3ZWJzZXR0aW5nc19MREFERCA9ICQod2Vi
a2l0Z3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVz
dHdlYnNldHRpbmdzX0xERkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19sZGZsYWdzKQorCitQcm9n
cmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0d2VicmVzb3VyY2VfU09VUkNFUyA9IFwK
KwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2VicmVzb3VyY2UuYwor
UHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdHdlYnJlc291cmNlX0NGTEFHUyA9
ICQod2Via2l0Z3RrX3Rlc3RzX2NmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0
R3RrX3Rlc3R3ZWJyZXNvdXJjZV9MREFERCA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkYWRkKQorCitQ
cm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0d2ViZGF0YXNvdXJjZV9TT1VSQ0VT
ID0gXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJkYXRhc291
cmNlLmMKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3R3ZWJkYXRhc291cmNl
X0NGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2NmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRB
UElfV2ViS2l0R3RrX3Rlc3R3ZWJkYXRhc291cmNlX0xEQUREID0gJCh3ZWJraXRndGtfdGVzdHNf
bGRhZGQpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3R3ZWJ2aWV3X1NP
VVJDRVMgPSBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYnZp
ZXcuYyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0X3V0aWxzLmMKK1By
b2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3R3ZWJ2aWV3X0NGTEFHUyA9ICQod2Vi
a2l0Z3RrX3Rlc3RzX2NmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rl
c3R3ZWJ2aWV3X0xEQUREID0gJCh3ZWJraXRndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0
V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0d2Vidmlld19MREZMQUdTID0gJCh3ZWJraXRndGtfdGVz
dHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXRHdGtfdGVzdGhpdHRl
c3RyZXN1bHRfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0
ay90ZXN0aGl0dGVzdHJlc3VsdC5jCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190
ZXN0aGl0dGVzdHJlc3VsdF9DRkxBR1MgPSAkKHdlYmtpdGd0a190ZXN0c19jZmxhZ3MpCitQcm9n
cmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0a190ZXN0aGl0dGVzdHJlc3VsdF9MREFERCA9ICQo
d2Via2l0Z3RrX3Rlc3RzX2xkYWRkKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0
a190ZXN0a2V5ZXZlbnRzX1NPVVJDRVMgPSBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRHdGsvdGVzdGtleWV2ZW50cy5jCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdEd0
a190ZXN0a2V5ZXZlbnRzX0NGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2NmbGFncykKK1Byb2dy
YW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3RrZXlldmVudHNfTERBREQgPSAkKHdlYmtp
dGd0a190ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3Rr
ZXlldmVudHNfTERGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1z
X1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3Rjb3B5YW5kcGFzdGVfU09VUkNFUyA9IFwKKwlU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0Y29weWFuZHBhc3RlLmMgXAor
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtWZXJzaW9uaW5nLmMKK1Byb2dyYW1zX1Rl
c3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3Rjb3B5YW5kcGFzdGVfQ0ZMQUdTID0gXAorCSQod2Vi
a2l0Z3RrX3Rlc3RzX2NmbGFncykgXAorCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ayBcCisJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUKK1Byb2dyYW1zX1Rlc3RXZWJL
aXRBUElfV2ViS2l0R3RrX3Rlc3Rjb3B5YW5kcGFzdGVfTERBREQgPSAkKHdlYmtpdGd0a190ZXN0
c19sZGFkZCkKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0R3RrX3Rlc3Rjb3B5YW5kcGFz
dGVfTERGTEFHUyA9ICQod2Via2l0Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKKworUHJvZ3JhbXNfVGVz
dFdlYktpdEFQSV9XZWJLaXQyX1Rlc3RXZWJLaXQyX0NQUEZMQUdTID0gXAorCSQoUHJvZ3JhbXNf
VGVzdFdlYktpdEFQSV9XVEZfVGVzdFdURl9DUFBGTEFHUykgXAogCS1JJCh0b3BfYnVpbGRkaXIp
L0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvaW5jbHVkZSBcCiAJJChGUkVFVFlQRV9DRkxBR1MpIFwK
IAkkKEdMSUJfQ0ZMQUdTKSBcCiAJJChHVEtfQ0ZMQUdTKSBcCiAJJChMSUJTT1VQX0NGTEFHUykK
IAotUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0V2ViS2l0Ml9DWFhGTEFHUyA9IFwKK1Byb2dy
YW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Ml9UZXN0V2ViS2l0Ml9DWFhGTEFHUyA9IFwKIAktREdU
RVNUX0hBU19SVFRJPTAgXAogCSQoZ2xvYmFsX2N4eGZsYWdzKQogCi1Qcm9ncmFtc19UZXN0V2Vi
S2l0QVBJX1Rlc3RXZWJLaXQyX0xEQUREID0gXAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJL
aXQyX1Rlc3RXZWJLaXQyX0xEQUREID0gXAogCUxpYnJhcmllcy9saWJUZXN0V2ViS2l0QVBJTWFp
bi5sYSBcCiAJTGlicmFyaWVzL2xpYmd0ZXN0LmxhIFwKIAlsaWJqYXZhc2NyaXB0Y29yZWd0ay1A
V0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQC5AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9O
QC5sYSBcCkBAIC0yMzMsMTAgKzU1OCwxMCBAQCBQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RX
ZWJLaXQyX0xEQUREID0gXAogCSQoR1RLX0xJQlMpIFwKIAkkKExJQlNPVVBfTElCUykKIAotUHJv
Z3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0V2ViS2l0Ml9MREZMQUdTID0gXAotCSQoUHJvZ3JhbXNf
VGVzdFdlYktpdEFQSV9UZXN0V1RGX0xERkxBR1MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dl
YktpdDJfVGVzdFdlYktpdDJfTERGTEFHUyA9IFwKKwkkKFByb2dyYW1zX1Rlc3RXZWJLaXRBUElf
V1RGX1Rlc3RXVEZfTERGTEFHUykKIAotUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0V2ViS2l0
Ml9TT1VSQ0VTID0gXAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyX1Rlc3RXZWJLaXQy
X1NPVVJDRVMgPSBcCiAJVG9vbHMvVGVzdFdlYktpdEFQSS9jb25maWcuaCBcCiAJVG9vbHMvVGVz
dFdlYktpdEFQSS9ndGsvUGxhdGZvcm1VdGlsaXRpZXNHdGsuY3BwIFwKIAlUb29scy9UZXN0V2Vi
S2l0QVBJL2d0ay9QbGF0Zm9ybVdlYlZpZXdHdGsuY3BwIFwKQEAgLTM1NywxMSArNjgyLDI0NSBA
QCBMaWJyYXJpZXNfbGliVGVzdFdlYktpdEFQSUluamVjdGVkQnVuZGxlX2xhX0NGTEFHUyA9IFwK
IAkkKGdsb2JhbF9jZmxhZ3MpCiAKIAotc3RhbXAtdGVzdHdlYmtpdGFwaS13ZWJjb3JlLWZvcndh
cmRpbmctaGVhZGVyczogJChXZWJLaXQyKS9TY3JpcHRzL2dlbmVyYXRlLWZvcndhcmRpbmctaGVh
ZGVycy5wbCAkKFByb2dyYW1zX1Rlc3RXZWJLaXRBUElfVGVzdFdlYkNvcmVfU09VUkNFUykKK2lm
IEVOQUJMRV9XRUJLSVQyCitub2luc3RfTFRMSUJSQVJJRVMgKz0gTGlicmFyaWVzL1dlYkV4dGVu
c2lvbnMvbGliV2ViRXh0ZW5zaW9uVGVzdC5sYQorZW5kaWYKKworTGlicmFyaWVzX1dlYkV4dGVu
c2lvbnNfbGliV2ViRXh0ZW5zaW9uVGVzdF9sYV9TT1VSQ0VTID0gXAorCVRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9XZWJFeHRlbnNpb25UZXN0LmNwcAorCitMaWJyYXJpZXNf
V2ViRXh0ZW5zaW9uc19saWJXZWJFeHRlbnNpb25UZXN0X2xhX0xERkxBR1MgPSBcCisJLXJwYXRo
ICR7c2hlbGwgcHdkfS8kKHRvcF9idWlsZGRpcikvTGlicmFyaWVzL1dlYkV4dGVuc2lvbnMvLmxp
YnMgXAorCSQobm9fdW5kZWZpbmVkKSBcCisJLWF2b2lkLXZlcnNpb24gXAorCS1tb2R1bGUKKwor
TGlicmFyaWVzX1dlYkV4dGVuc2lvbnNfbGliV2ViRXh0ZW5zaW9uVGVzdF9sYV9DUFBGTEFHUyA9
IFwKKwktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsgXAorCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2VzIFwKKwktSSQodG9w
X2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL3dlYmtpdDJleHRlbnNpb24vaW5jbHVk
ZSBcCisJLURXRUJLSVQyX0NPTVBJTEFUSU9OIFwKKwkkKHdlYmtpdDJndGtfdGVzdHNfY3BwZmxh
Z3MpCisKK0xpYnJhcmllc19XZWJFeHRlbnNpb25zX2xpYldlYkV4dGVuc2lvblRlc3RfbGFfQ1hY
RkxBR1MgPSBcCisgICAgICAgICQoZ2xvYmFsX2N4eGZsYWdzKQorCitMaWJyYXJpZXNfV2ViRXh0
ZW5zaW9uc19saWJXZWJFeHRlbnNpb25UZXN0X2xhX0NGTEFHUyA9IFwKKyAgICAgICAgJChnbG9i
YWxfY2ZsYWdzKQorCisKK2lmIEVOQUJMRV9XRUJLSVQyCitub2luc3RfTFRMSUJSQVJJRVMgKz0g
TGlicmFyaWVzL1dlYkV4dGVuc2lvbnMvbGliV2ViUHJvY2Vzc1Rlc3QubGEKK2VuZGlmCisKK0xp
YnJhcmllc19XZWJFeHRlbnNpb25zX2xpYldlYlByb2Nlc3NUZXN0X2xhX1NPVVJDRVMgPSBcCisJ
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL0RPTU5vZGVUZXN0LmNwcCBcCisJ
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL0ZyYW1lVGVzdC5jcHAgXAorCVRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9XZWJQcm9jZXNzVGVzdC5jcHAgXAor
CVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9XZWJQcm9jZXNzVGVzdC5oCisK
K0xpYnJhcmllc19XZWJFeHRlbnNpb25zX2xpYldlYlByb2Nlc3NUZXN0X2xhX0xERkxBR1MgPSBc
CisJLXJwYXRoICR7c2hlbGwgcHdkfS8kKHRvcF9idWlsZGRpcikvTGlicmFyaWVzL1dlYkV4dGVu
c2lvbnMvLmxpYnMgXAorCSQobm9fdW5kZWZpbmVkKSBcCisJLWF2b2lkLXZlcnNpb24gXAorCS1t
b2R1bGUKKworTGlicmFyaWVzX1dlYkV4dGVuc2lvbnNfbGliV2ViUHJvY2Vzc1Rlc3RfbGFfQ1BQ
RkxBR1MgPSBcCisJLUkkKHNyY2RpcikvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrIFwKKwktSSQodG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcyBcCisJ
LUkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi93ZWJraXQyZXh0ZW5zaW9u
L2luY2x1ZGUgXAorCS1EV0VCS0lUMl9DT01QSUxBVElPTiBcCisJJCh3ZWJraXQyZ3RrX3Rlc3Rz
X2NwcGZsYWdzKQorCitMaWJyYXJpZXNfV2ViRXh0ZW5zaW9uc19saWJXZWJQcm9jZXNzVGVzdF9s
YV9DWFhGTEFHUyA9IFwKKwkkKGdsb2JhbF9jeHhmbGFncykKKworTGlicmFyaWVzX1dlYkV4dGVu
c2lvbnNfbGliV2ViUHJvY2Vzc1Rlc3RfbGFfQ0ZMQUdTID0gXAorCSQoZ2xvYmFsX2NmbGFncykK
KworCitQcm9ncmFtcy9UZXN0V2ViS2l0QVBJL1dlYktpdDJHdGsvcmVzb3VyY2VzL3dlYmtpdDJn
dGstdGVzdHMtcmVzb3VyY2VzLmdyZXNvdXJjZTogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyR3RrL3Jlc291cmNlcy93ZWJraXQyZ3RrLXRlc3RzLmdyZXNvdXJjZS54bWwgJChzaGVs
bCAkKEdMSUJfQ09NUElMRV9SRVNPVVJDRVMpIC0tc291cmNlZGlyPSQoc3JjZGlyKSAtLWdlbmVy
YXRlLWRlcGVuZGVuY2llcyAkKHNyY2RpcikvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXQyR3RrL3Jlc291cmNlcy93ZWJraXQyZ3RrLXRlc3RzLmdyZXNvdXJjZS54bWwpCisJJChBTV9W
X2F0KW1rZGlyIC1wICR7R0VOUFJPR1JBTVN9L1Rlc3RXZWJLaXRBUEkvV2ViS2l0Mkd0ay9yZXNv
dXJjZXMKKwkkKEFNX1ZfR0VOKSAkKEdMSUJfQ09NUElMRV9SRVNPVVJDRVMpIC0tdGFyZ2V0PSRA
IC0tc291cmNlZGlyPSQoc3JjZGlyKSAkPAorCitESVNUQ0xFQU5GSUxFUyArPSBcCisJUHJvZ3Jh
bXMvVGVzdFdlYktpdEFQSS9XZWJLaXQyR3RrL3Jlc291cmNlcy93ZWJraXQyZ3RrLXRlc3RzLXJl
c291cmNlcy5ncmVzb3VyY2UKKworbm9pbnN0X0RBVEEgKz0gXAorCVByb2dyYW1zL1Rlc3RXZWJL
aXRBUEkvV2ViS2l0Mkd0ay9yZXNvdXJjZXMvd2Via2l0Mmd0ay10ZXN0cy1yZXNvdXJjZXMuZ3Jl
c291cmNlCisKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRX
ZWJDb250ZXh0X1NPVVJDRVMgPSBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQy
R3RrL1Rlc3RXZWJLaXRXZWJDb250ZXh0LmNwcAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJL
aXQyR3RrX1Rlc3RXZWJLaXRXZWJDb250ZXh0X0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3Rz
X2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRX
ZWJDb250ZXh0X0xEQUREID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVz
dFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRXZWJDb250ZXh0X0xERkxBR1MgPSAkKHdl
YmtpdDJndGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQy
R3RrX1Rlc3RXZWJLaXRXZWJWaWV3X1NPVVJDRVMgPSBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcAorUHJvZ3JhbXNfVGVzdFdlYktp
dEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRXZWJWaWV3X0NQUEZMQUdTID0gJCh3ZWJraXQyZ3Rr
X3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RX
ZWJLaXRXZWJWaWV3X0xEQUREID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNf
VGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRXZWJWaWV3X0xERkxBR1MgPSAkKHdl
YmtpdDJndGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQy
R3RrX1Rlc3RMb2FkZXJDbGllbnRfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdDJHdGsvVGVzdExvYWRlckNsaWVudC5jcHAKK1Byb2dyYW1zX1Rlc3RXZWJLaXRB
UElfV2ViS2l0Mkd0a19UZXN0TG9hZGVyQ2xpZW50X0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rl
c3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RMb2Fk
ZXJDbGllbnRfTERBREQgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0
V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdExvYWRlckNsaWVudF9MREZMQUdTID0gJCh3ZWJraXQy
Z3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19U
ZXN0V2ViS2l0U2V0dGluZ3NfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdDJHdGsvVGVzdFdlYktpdFNldHRpbmdzLmNwcAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQ
SV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRTZXR0aW5nc19DUFBGTEFHUyA9ICQod2Via2l0Mmd0a190
ZXN0c19jcHBmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0V2Vi
S2l0U2V0dGluZ3NfTERBREQgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19U
ZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYktpdFNldHRpbmdzX0xERkxBR1MgPSAkKHdl
YmtpdDJndGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQy
R3RrX0luc3BlY3RvclRlc3RTZXJ2ZXJfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdDJHdGsvSW5zcGVjdG9yVGVzdFNlcnZlci5jcHAKK1Byb2dyYW1zX1Rlc3RX
ZWJLaXRBUElfV2ViS2l0Mkd0a19JbnNwZWN0b3JUZXN0U2VydmVyX0NQUEZMQUdTID0gJCh3ZWJr
aXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3Rr
X0luc3BlY3RvclRlc3RTZXJ2ZXJfTERBREQgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRhZGQpCitQ
cm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfSW5zcGVjdG9yVGVzdFNlcnZlcl9MREZM
QUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRB
UElfV2ViS2l0Mkd0a19UZXN0QmFja0ZvcndhcmRMaXN0X1NPVVJDRVMgPSBcCisgICAgICAgIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0QmFja0ZvcndhcmRMaXN0LmNw
cAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RCYWNrRm9yd2FyZExpc3Rf
Q1BQRkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfY3BwZmxhZ3MpCitQcm9ncmFtc19UZXN0V2Vi
S2l0QVBJX1dlYktpdDJHdGtfVGVzdEJhY2tGb3J3YXJkTGlzdF9MREFERCA9ICQod2Via2l0Mmd0
a190ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0QmFj
a0ZvcndhcmRMaXN0X0xERkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRmbGFncykKKworUHJv
Z3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRQb2xpY3lDbGllbnRfU09V
UkNFUyA9IFwKKyAgICAgICAgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rl
c3RXZWJLaXRQb2xpY3lDbGllbnQuY3BwCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJH
dGtfVGVzdFdlYktpdFBvbGljeUNsaWVudF9DUFBGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19j
cHBmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0V2ViS2l0UG9s
aWN5Q2xpZW50X0xEQUREID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVz
dFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRQb2xpY3lDbGllbnRfTERGTEFHUyA9ICQo
d2Via2l0Mmd0a190ZXN0c19sZGZsYWdzKQorCitpZiBIQVZFX0FUU1BJMgorUHJvZ3JhbXNfVGVz
dFdlYktpdEFQSV9XZWJLaXQyR3RrX0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyX1NPVVJDRVMgPSBc
CisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL0FjY2Vzc2liaWxpdHlUZXN0
U2VydmVyLmNwcAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX0FjY2Vzc2liaWxp
dHlUZXN0U2VydmVyX0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJv
Z3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyX0xE
QUREID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9X
ZWJLaXQyR3RrX0FjY2Vzc2liaWxpdHlUZXN0U2VydmVyX0xERkxBR1MgPSAkKHdlYmtpdDJndGtf
dGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RX
ZWJLaXRBY2Nlc3NpYmlsaXR5X1NPVVJDRVMgPSBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5LmNwcAorUHJvZ3JhbXNfVGVzdFdl
YktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5X0NQUEZMQUdTID0gJCh3
ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKSAkKEFUU1BJMl9DRkxBR1MpCitQcm9ncmFtc19UZXN0
V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYktpdEFjY2Vzc2liaWxpdHlfTERBREQgPSAkKHdl
YmtpdDJndGtfdGVzdHNfbGRhZGQpICQoQVRTUEkyX0xJQlMpCitQcm9ncmFtc19UZXN0V2ViS2l0
QVBJX1dlYktpdDJHdGtfVGVzdFdlYktpdEFjY2Vzc2liaWxpdHlfTERGTEFHUyA9ICQod2Via2l0
Mmd0a190ZXN0c19sZGZsYWdzKQorZW5kaWYKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJL
aXQyR3RrX1Rlc3REb3dubG9hZHNfU09VUkNFUyA9IFwKKyAgICAgICAgVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3REb3dubG9hZHMuY3BwCitQcm9ncmFtc19UZXN0V2Vi
S2l0QVBJX1dlYktpdDJHdGtfVGVzdERvd25sb2Fkc19DUFBGTEFHUyA9ICQod2Via2l0Mmd0a190
ZXN0c19jcHBmbGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0RG93
bmxvYWRzX0xEQUREID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdl
YktpdEFQSV9XZWJLaXQyR3RrX1Rlc3REb3dubG9hZHNfTERGTEFHUyA9ICQod2Via2l0Mmd0a190
ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFdl
YlZpZXdFZGl0b3JfU09VUkNFUyA9IFwKKyAgICAgICAgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXQyR3RrL1Rlc3RXZWJWaWV3RWRpdG9yLmNwcAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQ
SV9XZWJLaXQyR3RrX1Rlc3RXZWJWaWV3RWRpdG9yX0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rl
c3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJW
aWV3RWRpdG9yX0xEQUREID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVz
dFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJWaWV3RWRpdG9yX0xERkxBR1MgPSAkKHdlYmtp
dDJndGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3Rr
X1Rlc3RQcmludGluZ19TT1VSQ0VTID0gXAorICAgICAgICBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdDJHdGsvVGVzdFByaW50aW5nLmNwcAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9X
ZWJLaXQyR3RrX1Rlc3RQcmludGluZ19DUFBGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19jcHBm
bGFncykgJChHVEtfVU5JWF9QUklOVElOR19DRkxBR1MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJ
X1dlYktpdDJHdGtfVGVzdFByaW50aW5nX0xEQUREID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkYWRk
KSAkKEdUS19VTklYX1BSSU5USU5HX0xJQlMpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktp
dDJHdGtfVGVzdFByaW50aW5nX0xERkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRmbGFncykK
KworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRGYXZpY29uRGF0
YWJhc2VfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsv
VGVzdFdlYktpdEZhdmljb25EYXRhYmFzZS5jcHAKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2Vi
S2l0Mkd0a19UZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlX0NQUEZMQUdTID0gJCh3ZWJraXQyZ3Rr
X3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RX
ZWJLaXRGYXZpY29uRGF0YWJhc2VfTERBREQgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRhZGQpCitQ
cm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYktpdEZhdmljb25EYXRhYmFz
ZV9MREZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RX
ZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0V2ViS2l0RmluZENvbnRyb2xsZXJfU09VUkNFUyA9IFwK
KwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdEZpbmRDb250
cm9sbGVyLmNwcAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRG
aW5kQ29udHJvbGxlcl9DUFBGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19jcHBmbGFncykKK1By
b2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0V2ViS2l0RmluZENvbnRyb2xsZXJf
TERBREQgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJ
X1dlYktpdDJHdGtfVGVzdFdlYktpdEZpbmRDb250cm9sbGVyX0xERkxBR1MgPSAkKHdlYmtpdDJn
dGtfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rl
c3RSZXNvdXJjZXNfU09VUkNFUyA9IFwKKyAgICAgICAgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXQyR3RrL1Rlc3RSZXNvdXJjZXMuY3BwCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dl
YktpdDJHdGtfVGVzdFJlc291cmNlc19DUFBGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19jcHBm
bGFncykKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0UmVzb3VyY2VzX0xE
QUREID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9X
ZWJLaXQyR3RrX1Rlc3RSZXNvdXJjZXNfTERGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19sZGZs
YWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdENvb2tpZU1hbmFn
ZXJfU09VUkNFUyA9IFwKKyAgICAgICAgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQy
R3RrL1Rlc3RDb29raWVNYW5hZ2VyLmNwcAorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQy
R3RrX1Rlc3RDb29raWVNYW5hZ2VyX0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZs
YWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RDb29raWVNYW5hZ2Vy
X0xEQUREID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQ
SV9XZWJLaXQyR3RrX1Rlc3RDb29raWVNYW5hZ2VyX0xERkxBR1MgPSAkKHdlYmtpdDJndGtfdGVz
dHNfbGRmbGFncykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RJbnNw
ZWN0b3JfU09VUkNFUyA9IFwKKyAgICAgICAgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXQyR3RrL1Rlc3RJbnNwZWN0b3IuY3BwCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJH
dGtfVGVzdEluc3BlY3Rvcl9DUFBGTEFHUyA9IFwKKwkkKHdlYmtpdDJndGtfdGVzdHNfY3BwZmxh
Z3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdEluc3BlY3Rvcl9MREFE
RCA9ICQod2Via2l0Mmd0a190ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2Vi
S2l0Mkd0a19UZXN0SW5zcGVjdG9yX0xERkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRmbGFn
cykKKworUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RJbnNwZWN0b3JTZXJ2
ZXJfU09VUkNFUyA9IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVz
dEluc3BlY3RvclNlcnZlci5jcHAKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19U
ZXN0SW5zcGVjdG9yU2VydmVyX0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdz
KQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RJbnNwZWN0b3JTZXJ2ZXJf
TERBREQgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJ
X1dlYktpdDJHdGtfVGVzdEluc3BlY3RvclNlcnZlcl9MREZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rl
c3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0V2Vi
S2l0VmVyc2lvbl9TT1VSQ0VTID0gXAorICAgICAgICBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdDJHdGsvVGVzdFdlYktpdFZlcnNpb24uY3BwCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJ
X1dlYktpdDJHdGtfVGVzdFdlYktpdFZlcnNpb25fQ1BQRkxBR1MgPSAkKHdlYmtpdDJndGtfdGVz
dHNfY3BwZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYktp
dFZlcnNpb25fTERBREQgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0
V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYktpdFZlcnNpb25fTERGTEFHUyA9ICQod2Via2l0
Mmd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtf
VGVzdENvbnRleHRNZW51X1NPVVJDRVMgPSBcCisgICAgICAgIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Mkd0ay9UZXN0Q29udGV4dE1lbnUuY3BwCitQcm9ncmFtc19UZXN0V2ViS2l0
QVBJX1dlYktpdDJHdGtfVGVzdENvbnRleHRNZW51X0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rl
c3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RDb250
ZXh0TWVudV9MREFERCA9ICQod2Via2l0Mmd0a190ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1Rlc3RX
ZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0Q29udGV4dE1lbnVfTERGTEFHUyA9ICQod2Via2l0Mmd0
a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVz
dFNTTF9TT1VSQ0VTID0gXAorICAgICAgICBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dDJHdGsvVGVzdFNTTC5jcHAKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0
U1NMX0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVz
dFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RTU0xfTERBREQgPSAkKHdlYmtpdDJndGtfdGVzdHNf
bGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFNTTF9MREZMQUdT
ID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElf
V2ViS2l0Mkd0a19UZXN0V2ViRXh0ZW5zaW9uc19TT1VSQ0VTID0gXAorICAgICAgICBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYkV4dGVuc2lvbnMuY3BwCitQcm9n
cmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYkV4dGVuc2lvbnNfQ1BQRkxBR1Mg
PSAkKHdlYmtpdDJndGtfdGVzdHNfY3BwZmxhZ3MpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dl
YktpdDJHdGtfVGVzdFdlYkV4dGVuc2lvbnNfTERBREQgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRh
ZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYkV4dGVuc2lvbnNf
TERGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2Vi
S2l0QVBJX1dlYktpdDJHdGtfVGVzdFdlYktpdFdlYlZpZXdHcm91cF9TT1VSQ0VTID0gXAorICAg
ICAgICBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFdlYlZp
ZXdHcm91cC5jcHAKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0V2ViS2l0
V2ViVmlld0dyb3VwX0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJv
Z3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RXZWJLaXRXZWJWaWV3R3JvdXBfTERB
REQgPSAkKHdlYmtpdDJndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dl
YktpdDJHdGtfVGVzdFdlYktpdFdlYlZpZXdHcm91cF9MREZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rl
c3RzX2xkZmxhZ3MpCisKK1Byb2dyYW1zX1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0RE9N
Tm9kZV9TT1VSQ0VTID0gXAorICAgICAgICBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dDJHdGsvVGVzdERPTU5vZGUuY3BwCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtf
VGVzdERPTU5vZGVfQ1BQRkxBR1MgPSAkKHdlYmtpdDJndGtfdGVzdHNfY3BwZmxhZ3MpCitQcm9n
cmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdERPTU5vZGVfTERBREQgPSAkKHdlYmtp
dDJndGtfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVz
dERPTU5vZGVfTERGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFt
c19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdEZyYW1lX1NPVVJDRVMgPSBcCisgICAgICAg
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0RnJhbWUuY3BwCitQcm9n
cmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdEZyYW1lX0NQUEZMQUdTID0gJCh3ZWJr
aXQyZ3RrX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3Rr
X1Rlc3RGcmFtZV9MREFERCA9ICQod2Via2l0Mmd0a190ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1Rl
c3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0RnJhbWVfTERGTEFHUyA9ICQod2Via2l0Mmd0a190
ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktpdDJHdGtfVGVzdEF1
dGhlbnRpY2F0aW9uX1NPVVJDRVMgPSBcCisgICAgICAgIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Mkd0ay9UZXN0QXV0aGVudGljYXRpb24uY3BwCitQcm9ncmFtc19UZXN0V2ViS2l0
QVBJX1dlYktpdDJHdGtfVGVzdEF1dGhlbnRpY2F0aW9uX0NQUEZMQUdTID0gJCh3ZWJraXQyZ3Rr
X3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RB
dXRoZW50aWNhdGlvbl9MREFERCA9ICQod2Via2l0Mmd0a190ZXN0c19sZGFkZCkKK1Byb2dyYW1z
X1Rlc3RXZWJLaXRBUElfV2ViS2l0Mkd0a19UZXN0QXV0aGVudGljYXRpb25fTERGTEFHUyA9ICQo
d2Via2l0Mmd0a190ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYktp
dDJHdGtfVGVzdFVJQ2xpZW50X1NPVVJDRVMgPSBcCisgICAgICAgIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0VUlDbGllbnQuY3BwCitQcm9ncmFtc19UZXN0V2ViS2l0
QVBJX1dlYktpdDJHdGtfVGVzdFVJQ2xpZW50X0NQUEZMQUdTID0gJCh3ZWJraXQyZ3RrX3Rlc3Rz
X2NwcGZsYWdzKQorUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJLaXQyR3RrX1Rlc3RVSUNsaWVu
dF9MREFERCA9ICQod2Via2l0Mmd0a190ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1Rlc3RXZWJLaXRB
UElfV2ViS2l0Mkd0a19UZXN0VUlDbGllbnRfTERGTEFHUyA9ICQod2Via2l0Mmd0a190ZXN0c19s
ZGZsYWdzKQorCisKK3N0YW1wLXRlc3R3ZWJraXRhcGktd2ViY29yZS1mb3J3YXJkaW5nLWhlYWRl
cnM6ICQoV2ViS2l0MikvU2NyaXB0cy9nZW5lcmF0ZS1mb3J3YXJkaW5nLWhlYWRlcnMucGwgJChQ
cm9ncmFtc19UZXN0V2ViS2l0QVBJX1dlYkNvcmVfVGVzdFdlYkNvcmVfU09VUkNFUykKIAkkKEFN
X1ZfR0VOKSQoUEVSTCkgJDwgJChzcmNkaXIpL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZSAkKEdFTlNPVVJDRVNfV0VCQ09SRSkvaW5jbHVkZSBndGsgXAogCSYmIGVjaG8gdGltZXN0
YW1wID4gJChARikKIAotc3RhbXAtdGVzdHdlYmtpdGFwaS13ZWJraXQyLWZvcndhcmRpbmctaGVh
ZGVyczogJChXZWJLaXQyKS9TY3JpcHRzL2dlbmVyYXRlLWZvcndhcmRpbmctaGVhZGVycy5wbCAk
KFByb2dyYW1zX1Rlc3RXZWJLaXRBUElfVGVzdFdlYktpdDJfU09VUkNFUykgJChMaWJyYXJpZXNf
bGliVGVzdFdlYktpdEFQSUluamVjdGVkQnVuZGxlX2xhX1NPVVJDRVMpCitzdGFtcC10ZXN0d2Vi
a2l0YXBpLXdlYmtpdDItZm9yd2FyZGluZy1oZWFkZXJzOiAkKFdlYktpdDIpL1NjcmlwdHMvZ2Vu
ZXJhdGUtZm9yd2FyZGluZy1oZWFkZXJzLnBsICQoUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9XZWJL
aXQyX1Rlc3RXZWJLaXQyX1NPVVJDRVMpICQoTGlicmFyaWVzX2xpYlRlc3RXZWJLaXRBUElJbmpl
Y3RlZEJ1bmRsZV9sYV9TT1VSQ0VTKQogCSQoQU1fVl9HRU4pJChQRVJMKSAkPCAkKHNyY2Rpcikv
VG9vbHMvVGVzdFdlYktpdEFQSSAkKEdFTlNPVVJDRVNfV0VCS0lUMikvaW5jbHVkZSBndGsgXAog
CSYmIGVjaG8gdGltZXN0YW1wID4gJChARikKIApAQCAtMzg2LDQgKzk0NSwxNCBAQCBFWFRSQV9E
SVNUICs9IFwKIAlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvc2ltcGxlLmh0bWwg
XAogCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9zaW1wbGUtaWZyYW1lLmh0bWwg
XAogCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9zaW1wbGUtdGFsbC5odG1sIFwK
LQlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvc3BhY2ViYXItc2Nyb2xsaW5nLmh0
bWwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvc3BhY2ViYXItc2Nyb2xsaW5n
Lmh0bWwgXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9yZXNvdXJjZXMv
dGVzdC1jZXJ0LnBlbSBcCisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL3Jl
c291cmNlcy90ZXN0LWtleS5wZW0gXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Mkd0ay9yZXNvdXJjZXMvd2Via2l0Mmd0ay10ZXN0cy5ncmVzb3VyY2UueG1sIFwKKwlUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvcmVzb3VyY2VzL2xpbmstdGl0bGUuanMgXAor
CVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RfdXRpbHMuaCBcCisJVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvcmVzb3VyY2VzL2JsYW5rLmljbyBcCisJ
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvcmVzb3VyY2VzL3Rlc3QuaHRtbCBc
CisJVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvcmVzb3VyY2VzL3Rlc3Qub2dn
IFwKKwlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9yZXNvdXJjZXMvdGVzdC5w
ZGYgXAorCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Jlc291cmNlcy90ZXN0
LnR4dApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL0Fj
Y2Vzc2liaWxpdHlUZXN0U2VydmVyLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Mkd0ay9BY2Nlc3NpYmlsaXR5VGVzdFNlcnZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTY1ZmNmYjZl
NDhmNWM2MmZkYjE5ZjIxMWRkNDRiZmExYjMxZDY5YQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9BY2Nlc3NpYmlsaXR5VGVzdFNlcnZlci5j
cHAKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5M
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUg
PHdlYmtpdDIvd2Via2l0Mi5oPgorCitzdGF0aWMgdm9pZCBsb2FkQ2hhbmdlZENhbGxiYWNrKFdl
YktpdFdlYlZpZXcqLCBXZWJLaXRMb2FkRXZlbnQgbG9hZEV2ZW50LCBncG9pbnRlcikKK3sKKyAg
ICAvLyBTZW5kIGEgbWVzc2FnZSB0byB0aGUgcGFyZW50IHByb2Nlc3Mgd2hlbiB3ZSdyZSByZWFk
eS4KKyAgICBpZiAobG9hZEV2ZW50ID09IFdFQktJVF9MT0FEX0ZJTklTSEVEKQorICAgICAgICBn
X3ByaW50KCJPSyIpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7Cisg
ICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIEFUSyBicmlkZ2UgaXMgbG9hZGVkLgorICAgIGdfc2V0
ZW52KCJHVEtfTU9EVUxFUyIsICJhdGstYnJpZGdlIiwgVFJVRSk7CisKKyAgICBndGtfaW5pdCgm
YXJnYywgJmFyZ3YpOworCisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJf
VklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX2h0
bWwod2ViVmlldywKKyAgICAgICAgIjxodG1sPiIKKyAgICAgICAgIiAgPGJvZHk+IgorICAgICAg
ICAiICAgPGgxPlRoaXMgaXMgYSB0ZXN0PC9oMT4iCisgICAgICAgICIgICA8cD5UaGlzIGlzIGEg
cGFyYWdyYXBoIHdpdGggc29tZSBwbGFpbiB0ZXh0LjwvcD4iCisgICAgICAgICIgICA8cD5UaGlz
IHBhcmFncmFwaCBjb250YWlucyA8YSBocmVmPVwiaHR0cDovL3d3dy53ZWJraXRndGsub3JnXCI+
YSBsaW5rPC9hPiBpbiB0aGUgbWlkZGxlLjwvcD4iCisgICAgICAgICIgIDwvYm9keT4iCisgICAg
ICAgICI8L2h0bWw+IiwKKyAgICAgICAgMCk7CisKKyAgICBHdGtXaWRnZXQqIHdpbmRvdyA9IGd0
a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOworICAgIGd0a19jb250YWluZXJfYWRk
KEdUS19DT05UQUlORVIod2luZG93KSwgR1RLX1dJREdFVCh3ZWJWaWV3KSk7CisgICAgZ3RrX3dp
ZGdldF9zaG93X2FsbCh3aW5kb3cpOworCisgICAgZ19zaWduYWxfY29ubmVjdCh3aW5kb3csICJk
ZWxldGUtZXZlbnQiLCBHX0NBTExCQUNLKGd0a19tYWluX3F1aXQpLCAwKTsKKyAgICBnX3NpZ25h
bF9jb25uZWN0KHdlYlZpZXcsICJsb2FkLWNoYW5nZWQiLCBHX0NBTExCQUNLKGxvYWRDaGFuZ2Vk
Q2FsbGJhY2spLCAwKTsKKworICAgIGd0a19tYWluKCk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvQ01ha2VMaXN0cy50eHQgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDA1
NjZmODYzZGVlY2UwM2QyNmYwOTIwYjI2YTYyMDQzMzZjMjYzYwotLS0gL2Rldi9udWxsCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9DTWFrZUxpc3RzLnR4dApAQCAt
MCwwICsxLDEwOCBAQAorc2V0KFRFU1RfTElCUkFSWV9ESVIgJHtDTUFLRV9MSUJSQVJZX09VVFBV
VF9ESVJFQ1RPUll9L1dlYktpdDJHdGtBUElUZXN0cykKK3NldChURVNUX0JJTkFSWV9ESVIgJHtD
TUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUll9L1Rlc3RXZWJLaXRBUEkvV2ViS2l0Mkd0aykK
K3NldChURVNUX1JFU09VUkNFU19ESVIgJHtURVNUX0JJTkFSWV9ESVJ9L3Jlc291cmNlcykKK2Zp
bGUoTUFLRV9ESVJFQ1RPUlkgJHtURVNUX1JFU09VUkNFU19ESVJ9KQorCithZGRfZGVmaW5pdGlv
bnMoCisgICAgLURXRUJLSVRfVEVTVF9QTFVHSU5fRElSPSIke0NNQUtFX0xJQlJBUllfT1VUUFVU
X0RJUkVDVE9SWX0iCisgICAgLURXRUJLSVRfRVhFQ19QQVRIPSIke0NNQUtFX1JVTlRJTUVfT1VU
UFVUX0RJUkVDVE9SWX0iCisgICAgLURXRUJLSVRfU1JDX0RJUj0iJHtDTUFLRV9TT1VSQ0VfRElS
fSIKKyAgICAtRFdFQktJVF9URVNUX1dFQl9FWFRFTlNJT05TX0RJUj0iJHtURVNUX0xJQlJBUllf
RElSfSIKKyAgICAtRFdFQktJVF9JTkpFQ1RFRF9CVU5ETEVfUEFUSD0iJHtDTUFLRV9MSUJSQVJZ
X09VVFBVVF9ESVJFQ1RPUll9IgorKQorCitpbmNsdWRlX2RpcmVjdG9yaWVzKAorICAgICR7Q01B
S0VfQklOQVJZX0RJUn0KKyAgICAke0NNQUtFX1NPVVJDRV9ESVJ9L1NvdXJjZQorICAgICR7Q01B
S0VfU09VUkNFX0RJUn0vU291cmNlL1dURgorICAgICR7REVSSVZFRF9TT1VSQ0VTX0RJUn0KKyAg
ICAke0RFUklWRURfU09VUkNFU19XRUJLSVQyR1RLX0RJUn0KKyAgICAke0ZPUldBUkRJTkdfSEVB
REVSU19ESVJ9CisgICAgJHtGT1JXQVJESU5HX0hFQURFUlNfV0VCS0lUMkdUS19ESVJ9CisgICAg
JHtGT1JXQVJESU5HX0hFQURFUlNfV0VCS0lUMkdUS19FWFRFTlNJT05fRElSfQorICAgICR7QVRT
UElfSU5DTFVERV9ESVJTfQorICAgICR7R0xJQl9JTkNMVURFX0RJUlN9CisgICAgJHtHVEszX0lO
Q0xVREVfRElSU30KKyAgICAke0xJQlNPVVBfSU5DTFVERV9ESVJTfQorKQorCithZGRfbGlicmFy
eShXZWJLaXQyQVBJVGVzdENvcmUgU1RBVElDCisgICAgTG9hZFRyYWNraW5nVGVzdC5jcHAKKyAg
ICBXZWJLaXRUZXN0QnVzLmNwcAorICAgIFdlYktpdFRlc3RTZXJ2ZXIuY3BwCisgICAgV2ViUHJv
Y2Vzc1Rlc3RSdW5uZXIuY3BwCisgICAgVGVzdE1haW4uY3BwCisgICAgV2ViVmlld1Rlc3QuY3Bw
CispCisKK3RhcmdldF9saW5rX2xpYnJhcmllcyhXZWJLaXQyQVBJVGVzdENvcmUgV2ViS2l0MikK
KworYWRkX2N1c3RvbV90YXJnZXQodGVzdC1ncmVzb3VyY2UtYnVuZGxlCisgICAgREVQRU5EUyBy
ZXNvdXJjZXMvd2Via2l0Mmd0ay10ZXN0cy5ncmVzb3VyY2UueG1sCisgICAgICAgICAgICByZXNv
dXJjZXMvbGluay10aXRsZS5qcworICAgIENPTU1BTkQgZ2xpYi1jb21waWxlLXJlc291cmNlcwor
ICAgICAgICAgICAgLS10YXJnZXQ9JHtURVNUX1JFU09VUkNFU19ESVJ9L3dlYmtpdDJndGstdGVz
dHMtcmVzb3VyY2VzLmdyZXNvdXJjZQorICAgICAgICAgICAgLS1zb3VyY2VkaXI9JHtDTUFLRV9T
T1VSQ0VfRElSfQorICAgICAgICAgICAgJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9yZXNvdXJj
ZXMvd2Via2l0Mmd0ay10ZXN0cy5ncmVzb3VyY2UueG1sCispCisKK21hY3JvKEFERF9XSzJfVEVT
VF9XRUJfRVhURU5TSU9OIGV4dGVuc2lvbl9uYW1lKQorICAgIGFkZF9saWJyYXJ5KCR7ZXh0ZW5z
aW9uX25hbWV9IE1PRFVMRSAke0FSR059KQorICAgIGFkZF9kZXBlbmRlbmNpZXMoJHtleHRlbnNp
b25fbmFtZX0gV2ViS2l0MikKKyAgICBzZXRfcHJvcGVydHkoCisgICAgICAgIFRBUkdFVCAke2V4
dGVuc2lvbl9uYW1lfQorICAgICAgICBBUFBFTkQKKyAgICAgICAgUFJPUEVSVFkgQ09NUElMRV9E
RUZJTklUSU9OUyBXRUJLSVQyX0NPTVBJTEFUSU9OCisgICAgKQorICAgIHNldF90YXJnZXRfcHJv
cGVydGllcygke2V4dGVuc2lvbl9uYW1lfSBQUk9QRVJUSUVTCisgICAgICAgIExJQlJBUllfT1VU
UFVUX0RJUkVDVE9SWSAke1RFU1RfTElCUkFSWV9ESVJ9CisgICAgKQorZW5kbWFjcm8oKQorCitt
YWNybyhBRERfV0syX1RFU1QgdGVzdF9uYW1lKQorICAgIGFkZF9leGVjdXRhYmxlKCR7dGVzdF9u
YW1lfSAke0FSR059KQorICAgIGFkZF9kZXBlbmRlbmNpZXMoJHt0ZXN0X25hbWV9CisgICAgICAg
IHRlc3QtZ3Jlc291cmNlLWJ1bmRsZQorICAgICAgICBXZWJFeHRlbnNpb25UZXN0CisgICAgKQor
ICAgIHRhcmdldF9saW5rX2xpYnJhcmllcygke3Rlc3RfbmFtZX0KKyAgICAgICAgSmF2YVNjcmlw
dENvcmUKKyAgICAgICAgV2ViS2l0MgorICAgICAgICBXZWJLaXQyQVBJVGVzdENvcmUKKyAgICAg
ICAgJHtBVFNQSV9MSUJSQVJJRVN9CisgICAgICAgICR7R0xJQl9MSUJSQVJJRVN9CisgICAgICAg
ICR7R1RLM19MSUJSQVJJRVN9CisgICAgICAgICR7TElCU09VUF9MSUJSQVJJRVN9CisgICAgKQor
ICAgIHNldF90YXJnZXRfcHJvcGVydGllcygke3Rlc3RfbmFtZX0gUFJPUEVSVElFUworICAgICAg
ICBSVU5USU1FX09VVFBVVF9ESVJFQ1RPUlkgJHtURVNUX0JJTkFSWV9ESVJ9CisgICAgKQorZW5k
bWFjcm8oKQorCitBRERfV0syX1RFU1RfV0VCX0VYVEVOU0lPTihXZWJFeHRlbnNpb25UZXN0IFdl
YkV4dGVuc2lvblRlc3QuY3BwKQorQUREX1dLMl9URVNUX1dFQl9FWFRFTlNJT04oV2ViUHJvY2Vz
c1Rlc3QgRE9NTm9kZVRlc3QuY3BwIEZyYW1lVGVzdC5jcHAgV2ViUHJvY2Vzc1Rlc3QuY3BwKQor
CitBRERfV0syX1RFU1QoSW5zcGVjdG9yVGVzdFNlcnZlciBJbnNwZWN0b3JUZXN0U2VydmVyLmNw
cCkKK0FERF9XSzJfVEVTVChUZXN0QmFja0ZvcndhcmRMaXN0IFRlc3RCYWNrRm9yd2FyZExpc3Qu
Y3BwKQorQUREX1dLMl9URVNUKFRlc3RDb250ZXh0TWVudSBUZXN0Q29udGV4dE1lbnUuY3BwKQor
QUREX1dLMl9URVNUKFRlc3RDb29raWVNYW5hZ2VyIFRlc3RDb29raWVNYW5hZ2VyLmNwcCkKK0FE
RF9XSzJfVEVTVChUZXN0RE9NTm9kZSBUZXN0RE9NTm9kZS5jcHApCitBRERfV0syX1RFU1QoVGVz
dERvd25sb2FkcyBUZXN0RG93bmxvYWRzLmNwcCkKK0FERF9XSzJfVEVTVChUZXN0RnJhbWUgVGVz
dEZyYW1lLmNwcCkKK0FERF9XSzJfVEVTVChUZXN0SW5zcGVjdG9yIFRlc3RJbnNwZWN0b3IuY3Bw
KQorQUREX1dLMl9URVNUKFRlc3RJbnNwZWN0b3JTZXJ2ZXIgVGVzdEluc3BlY3RvclNlcnZlci5j
cHApCitBRERfV0syX1RFU1QoVGVzdExvYWRlckNsaWVudCBUZXN0TG9hZGVyQ2xpZW50LmNwcCkK
K0FERF9XSzJfVEVTVChUZXN0UHJpbnRpbmcgVGVzdFByaW50aW5nLmNwcCkKK0FERF9XSzJfVEVT
VChUZXN0U1NMIFRlc3RTU0wuY3BwKQorQUREX1dLMl9URVNUKFRlc3RXZWJFeHRlbnNpb25zIFRl
c3RXZWJFeHRlbnNpb25zLmNwcCkKK0FERF9XSzJfVEVTVChUZXN0V2ViS2l0UG9saWN5Q2xpZW50
IFRlc3RXZWJLaXRQb2xpY3lDbGllbnQuY3BwKQorQUREX1dLMl9URVNUKFRlc3RXZWJLaXRTZXR0
aW5ncyBUZXN0V2ViS2l0U2V0dGluZ3MuY3BwKQorQUREX1dLMl9URVNUKFRlc3RXZWJLaXRWZXJz
aW9uIFRlc3RXZWJLaXRWZXJzaW9uLmNwcCkKK0FERF9XSzJfVEVTVChUZXN0V2ViS2l0V2ViVmll
d0dyb3VwIFRlc3RXZWJLaXRXZWJWaWV3R3JvdXAuY3BwKQorQUREX1dLMl9URVNUKFRlc3RXZWJL
aXRXZWJDb250ZXh0IFRlc3RXZWJLaXRXZWJDb250ZXh0LmNwcCkKK0FERF9XSzJfVEVTVChUZXN0
V2ViS2l0V2ViVmlldyBUZXN0V2ViS2l0V2ViVmlldy5jcHApCisKK2lmIChBVFNQSV9GT1VORCkK
KyAgICBBRERfV0syX1RFU1QoQWNjZXNzaWJpbGl0eVRlc3RTZXJ2ZXIgQWNjZXNzaWJpbGl0eVRl
c3RTZXJ2ZXIuY3BwKQorICAgIEFERF9XSzJfVEVTVChUZXN0V2ViS2l0QWNjZXNzaWJpbGl0eSBU
ZXN0V2ViS2l0QWNjZXNzaWJpbGl0eS5jcHApCitlbmRpZiAoKQpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL0RPTURPTVdpbmRvd1Rlc3QuY3BwIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL0RPTURPTVdpbmRvd1Rlc3QuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjdjYWFkNTQ4YTNlOTYzM2ZlZjYyNjAyMDYxZTM1OTI4ZGMxYzA3NmQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvRE9NRE9N
V2luZG93VGVzdC5jcHAKQEAgLTAsMCArMSwyMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiV2ViUHJvY2Vz
c1Rlc3QuaCIKKyNpbmNsdWRlIDxnaW8vZ2lvLmg+CisjaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQt
d2ViLWV4dGVuc2lvbi5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisKK2NsYXNzIFdlYktp
dERPTURPTVdpbmRvd1Rlc3Q7CitzdGF0aWMgZ2Jvb2xlYW4gbG9hZGVkQ2FsbGJhY2soV2ViS2l0
RE9NRE9NV2luZG93KiwgV2ViS2l0RE9NRXZlbnQqLCBXZWJLaXRET01ET01XaW5kb3dUZXN0Kik7
CitzdGF0aWMgZ2Jvb2xlYW4gY2xpY2tlZENhbGxiYWNrKFdlYktpdERPTURPTVdpbmRvdyosIFdl
YktpdERPTUV2ZW50KiwgV2ViS2l0RE9NRE9NV2luZG93VGVzdCopOworCitjbGFzcyBXZWJLaXRE
T01ET01XaW5kb3dUZXN0IDogcHVibGljIFdlYlByb2Nlc3NUZXN0IHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUGFzc093blB0cjxXZWJQcm9jZXNzVGVzdD4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQ
dHIobmV3IFdlYktpdERPTURPTVdpbmRvd1Rlc3QoKSk7IH0KKworcHJpdmF0ZToKKyAgICBndWlu
dDY0IHdlYlBhZ2VGcm9tQXJncyhHVmFyaWFudCogYXJncykKKyAgICB7CisgICAgICAgIEdWYXJp
YW50SXRlciBpdGVyOworICAgICAgICBnX3ZhcmlhbnRfaXRlcl9pbml0KCZpdGVyLCBhcmdzKTsK
KworICAgICAgICBjb25zdCBjaGFyKiBrZXk7CisgICAgICAgIEdWYXJpYW50KiB2YWx1ZTsKKyAg
ICAgICAgd2hpbGUgKGdfdmFyaWFudF9pdGVyX2xvb3AoJml0ZXIsICJ7JnN2fSIsICZrZXksICZ2
YWx1ZSkpIHsKKyAgICAgICAgICAgIGlmICghc3RyY21wKGtleSwgInBhZ2VJRCIpICYmIGdfdmFy
aWFudF9jbGFzc2lmeSh2YWx1ZSkgPT0gR19WQVJJQU5UX0NMQVNTX1VJTlQ2NCkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ192YXJpYW50X2dldF91aW50NjQodmFsdWUpOworICAgICAgICB9CisK
KyAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgYm9vbCB0ZXN0U2lnbmFscyhXZWJLaXRXZWJFeHRlbnNpb24qIGV4dGVuc2lvbiwg
R1ZhcmlhbnQqIGFyZ3MpCisgICAgeworICAgICAgICBub3RpZnkoInJlYWR5IiwgIiIpOworCisg
ICAgICAgIFdlYktpdFdlYlBhZ2UqIHBhZ2UgPSB3ZWJraXRfd2ViX2V4dGVuc2lvbl9nZXRfcGFn
ZShleHRlbnNpb24sIHdlYlBhZ2VGcm9tQXJncyhhcmdzKSk7CisgICAgICAgIGdfYXNzZXJ0KFdF
QktJVF9JU19XRUJfUEFHRShwYWdlKSk7CisgICAgICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1
bWVudCA9IHdlYmtpdF93ZWJfcGFnZV9nZXRfZG9tX2RvY3VtZW50KHBhZ2UpOworICAgICAgICBn
X2Fzc2VydChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKGRvY3VtZW50KSk7CisKKyAgICAgICAgV2Vi
S2l0RE9NRE9NV2luZG93KiBkb21XaW5kb3cgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9kZWZh
dWx0X3ZpZXcoZG9jdW1lbnQpOworICAgICAgICBnX2Fzc2VydChkb21XaW5kb3cpOworCisgICAg
ICAgIC8vIFRoZSAibG9hZCIgV2ViS2l0RE9NRE9NV2luZG93IHNpZ25hbCBpcyBpc3N1ZWQgYmVm
b3JlIHRoaXMgdGVzdCBpcworICAgICAgICAvLyBjYWxsZWQuIFRoZXJlJ3Mgbm8gd2F5IHRvIGNh
cHR1cmUgaXQgaGVyZS4gV2Ugc2ltcGx5IGFzc3VtZSB0aGF0CisgICAgICAgIC8vIHRoZSBkb2N1
bWVudCBpcyBsb2FkZWQgYW5kIG5vdGlmeSB0aGUgdWlwcm9jZXNzIGFjY29yZGluZ2x5CisgICAg
ICAgIC8vIG5vdGlmeSgibG9hZGVkIiwgIiIpOworCisgICAgICAgIHdlYmtpdF9kb21fZXZlbnRf
dGFyZ2V0X2FkZF9ldmVudF9saXN0ZW5lcigKKyAgICAgICAgICAgIFdFQktJVF9ET01fRVZFTlRf
VEFSR0VUKGRvbVdpbmRvdyksCisgICAgICAgICAgICAibG9hZCIsCisgICAgICAgICAgICBHX0NB
TExCQUNLKGxvYWRlZENhbGxiYWNrKSwKKyAgICAgICAgICAgIGZhbHNlLAorICAgICAgICAgICAg
dGhpcyk7CisKKyAgICAgICAgLy8gbG9hZGVkQ2FsbGJhY2soKSB3aWxsIHN0b3AgdGhpcyBsb29w
CisgICAgICAgIFJ1bkxvb3A6OnJ1bigpOworCisgICAgICAgIGRvY3VtZW50ID0gd2Via2l0X3dl
Yl9wYWdlX2dldF9kb21fZG9jdW1lbnQocGFnZSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9E
T01fSVNfRE9DVU1FTlQoZG9jdW1lbnQpKTsKKworICAgICAgICBXZWJLaXRET01FbGVtZW50KiBl
bGVtZW50ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudF9ieV9pZChkb2N1bWVudCwg
InRlc3QiKTsKKyAgICAgICAgZ19hc3NlcnQoZWxlbWVudCk7CisKKyAgICAgICAgd2Via2l0X2Rv
bV9ldmVudF90YXJnZXRfYWRkX2V2ZW50X2xpc3RlbmVyKAorICAgICAgICAgICAgV0VCS0lUX0RP
TV9FVkVOVF9UQVJHRVQoZWxlbWVudCksCisgICAgICAgICAgICAiY2xpY2siLAorICAgICAgICAg
ICAgR19DQUxMQkFDSyhjbGlja2VkQ2FsbGJhY2spLAorICAgICAgICAgICAgZmFsc2UsCisgICAg
ICAgICAgICB0aGlzKTsKKworICAgICAgICAvLyBUaGUgImNsaWNrIiBhY3Rpb24gd2lsbCBiZSBp
c3N1ZWQgaW4gdGhlIHVpcHJvY2VzcyBhbmQgdGhhdCB3aWxsCisgICAgICAgIC8vIHRyaWdnZXIg
dGhlIGRvbSBldmVudCBoZXJlLgorICAgICAgICAvLyBjbGlja2VkQ2FsbGJhY2soKSB3aWxsIHN0
b3AgdGhpcyBsb29wCisgICAgICAgIFJ1bkxvb3A6OnJ1bigpOworCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIGJvb2wgdGVzdERpc3BhdGNoRXZlbnQoV2ViS2l0V2ViRXh0ZW5z
aW9uKiBleHRlbnNpb24sIEdWYXJpYW50KiBhcmdzKQorICAgIHsKKyAgICAgICAgbm90aWZ5KCJy
ZWFkeSIsICIiKTsKKworICAgICAgICBXZWJLaXRXZWJQYWdlKiBwYWdlID0gd2Via2l0X3dlYl9l
eHRlbnNpb25fZ2V0X3BhZ2UoZXh0ZW5zaW9uLCB3ZWJQYWdlRnJvbUFyZ3MoYXJncykpOworICAg
ICAgICBnX2Fzc2VydChXRUJLSVRfSVNfV0VCX1BBR0UocGFnZSkpOworICAgICAgICBXZWJLaXRE
T01Eb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3BhZ2VfZ2V0X2RvbV9kb2N1bWVudChw
YWdlKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChkb2N1bWVudCkp
OworCisgICAgICAgIFdlYktpdERPTURPTVdpbmRvdyogZG9tV2luZG93ID0gd2Via2l0X2RvbV9k
b2N1bWVudF9nZXRfZGVmYXVsdF92aWV3KGRvY3VtZW50KTsKKyAgICAgICAgZ19hc3NlcnQoZG9t
V2luZG93KTsKKworICAgICAgICAvLyBUaGUgImxvYWQiIFdlYktpdERPTURPTVdpbmRvdyBzaWdu
YWwgaXMgaXNzdWVkIGJlZm9yZSB0aGlzIHRlc3QgaXMKKyAgICAgICAgLy8gY2FsbGVkLiBUaGVy
ZSdzIG5vIHdheSB0byBjYXB0dXJlIGl0IGhlcmUuIFdlIHNpbXBseSBhc3N1bWUgdGhhdAorICAg
ICAgICAvLyB0aGUgZG9jdW1lbnQgaXMgbG9hZGVkIGFuZCBub3RpZnkgdGhlIHVpcHJvY2VzcyBh
Y2NvcmRpbmdseQorICAgICAgICAvLyBub3RpZnkoImxvYWRlZCIsICIiKTsKKworICAgICAgICB3
ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9hZGRfZXZlbnRfbGlzdGVuZXIoCisgICAgICAgICAgICBX
RUJLSVRfRE9NX0VWRU5UX1RBUkdFVChkb21XaW5kb3cpLAorICAgICAgICAgICAgImxvYWQiLAor
ICAgICAgICAgICAgR19DQUxMQkFDSyhsb2FkZWRDYWxsYmFjayksCisgICAgICAgICAgICBmYWxz
ZSwKKyAgICAgICAgICAgIHRoaXMpOworCisgICAgICAgIC8vIGxvYWRlZENhbGxiYWNrKCkgd2ls
bCBzdG9wIHRoaXMgbG9vcAorICAgICAgICBSdW5Mb29wOjpydW4oKTsKKworICAgICAgICBkb2N1
bWVudCA9IHdlYmtpdF93ZWJfcGFnZV9nZXRfZG9tX2RvY3VtZW50KHBhZ2UpOworICAgICAgICBn
X2Fzc2VydChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKGRvY3VtZW50KSk7CisKKyAgICAgICAgV2Vi
S2l0RE9NRWxlbWVudCogZWxlbWVudCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRf
YnlfaWQoZG9jdW1lbnQsICJ0ZXN0Iik7CisgICAgICAgIGdfYXNzZXJ0KGVsZW1lbnQpOworCisg
ICAgICAgIFdlYktpdERPTUV2ZW50KiBldmVudCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRl
X2V2ZW50KGRvY3VtZW50LCAiTW91c2VFdmVudCIsIDApOworICAgICAgICBnX2Fzc2VydChldmVu
dCk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfRVZFTlQoZXZlbnQpKTsKKyAgICAg
ICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19NT1VTRV9FVkVOVChldmVudCkpOworCisgICAgICAg
IGdsb25nIGNsaWVudFgsIGNsaWVudFk7CisgICAgICAgIGNsaWVudFggPSB3ZWJraXRfZG9tX2Vs
ZW1lbnRfZ2V0X2NsaWVudF9sZWZ0KGVsZW1lbnQpOworICAgICAgICBjbGllbnRZID0gd2Via2l0
X2RvbV9lbGVtZW50X2dldF9jbGllbnRfdG9wKGVsZW1lbnQpOworCisgICAgICAgIHdlYmtpdF9k
b21fZXZlbnRfdGFyZ2V0X2FkZF9ldmVudF9saXN0ZW5lcigKKyAgICAgICAgICAgIFdFQktJVF9E
T01fRVZFTlRfVEFSR0VUKGVsZW1lbnQpLAorICAgICAgICAgICAgImNsaWNrIiwKKyAgICAgICAg
ICAgIEdfQ0FMTEJBQ0soY2xpY2tlZENhbGxiYWNrKSwKKyAgICAgICAgICAgIGZhbHNlLAorICAg
ICAgICAgICAgdGhpcyk7CisKKyAgICAgICAgd2Via2l0X2RvbV9tb3VzZV9ldmVudF9pbml0X21v
dXNlX2V2ZW50KFdFQktJVF9ET01fTU9VU0VfRVZFTlQoZXZlbnQpLAorICAgICAgICAgICAgImNs
aWNrIiwgVFJVRSwgVFJVRSwKKyAgICAgICAgICAgIGRvbVdpbmRvdywgMCwgMCwgMCwgY2xpZW50
WCwgY2xpZW50WSwKKyAgICAgICAgICAgIEZBTFNFLCBGQUxTRSwgRkFMU0UsIEZBTFNFLAorICAg
ICAgICAgICAgMSwgV0VCS0lUX0RPTV9FVkVOVF9UQVJHRVQoZWxlbWVudCkpOworCisgICAgICAg
IHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2Rpc3BhdGNoX2V2ZW50KFdFQktJVF9ET01fRVZFTlRf
VEFSR0VUKGVsZW1lbnQpLCBldmVudCwgMCk7CisKKyAgICAgICAgLy8gY2xpY2tlZENhbGxiYWNr
KCkgd2lsbCBzdG9wIHRoaXMgbG9vcAorICAgICAgICBSdW5Mb29wOjpydW4oKTsKKworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIHRlc3RHZXRDb21wdXRlZFN0eWxlKFdl
YktpdFdlYkV4dGVuc2lvbiogZXh0ZW5zaW9uLCBHVmFyaWFudCogYXJncykKKyAgICB7CisgICAg
ICAgIFdlYktpdFdlYlBhZ2UqIHBhZ2UgPSB3ZWJraXRfd2ViX2V4dGVuc2lvbl9nZXRfcGFnZShl
eHRlbnNpb24sIHdlYlBhZ2VGcm9tQXJncyhhcmdzKSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJ
VF9JU19XRUJfUEFHRShwYWdlKSk7CisgICAgICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1bWVu
dCA9IHdlYmtpdF93ZWJfcGFnZV9nZXRfZG9tX2RvY3VtZW50KHBhZ2UpOworICAgICAgICBnX2Fz
c2VydChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKGRvY3VtZW50KSk7CisgICAgICAgIFdlYktpdERP
TURPTVdpbmRvdyogZG9tV2luZG93ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZGVmYXVsdF92
aWV3KGRvY3VtZW50KTsKKyAgICAgICAgZ19hc3NlcnQoZG9tV2luZG93KTsKKyAgICAgICAgV2Vi
S2l0RE9NRWxlbWVudCogZWxlbWVudCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRf
YnlfaWQoZG9jdW1lbnQsICJ0ZXN0Iik7CisgICAgICAgIGdfYXNzZXJ0KGVsZW1lbnQpOworICAg
ICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoZWxlbWVudCkpOworICAgICAgICBX
ZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uKiBjc3NTdHlsZSA9IHdlYmtpdF9kb21fZG9tX3dp
bmRvd19nZXRfY29tcHV0ZWRfc3R5bGUoZG9tV2luZG93LCBlbGVtZW50LCAwKTsKKyAgICAgICAg
Z2NoYXIqIGZvbnRTaXplID0gd2Via2l0X2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25fZ2V0X3By
b3BlcnR5X3ZhbHVlKGNzc1N0eWxlLCAiZm9udC1zaXplIik7CisgICAgICAgIGdfYXNzZXJ0X2Nt
cHN0cihmb250U2l6ZSwgPT0sICIxNnB4Iik7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgdmlydHVhbCBib29sIHJ1blRlc3QoY29uc3QgY2hhciogdGVzdE5hbWUsIFdlYktp
dFdlYkV4dGVuc2lvbiogZXh0ZW5zaW9uLCBHVmFyaWFudCogYXJncykKKyAgICB7CisgICAgICAg
IGlmICghc3RyY21wKHRlc3ROYW1lLCAic2lnbmFscyIpKQorICAgICAgICAgICAgcmV0dXJuIHRl
c3RTaWduYWxzKGV4dGVuc2lvbiwgYXJncyk7CisgICAgICAgIGlmICghc3RyY21wKHRlc3ROYW1l
LCAiZGlzcGF0Y2gtZXZlbnQiKSkKKyAgICAgICAgICAgIHJldHVybiB0ZXN0RGlzcGF0Y2hFdmVu
dChleHRlbnNpb24sIGFyZ3MpOworICAgICAgICBpZiAoIXN0cmNtcCh0ZXN0TmFtZSwgImdldC1j
b21wdXRlZC1zdHlsZSIpKQorICAgICAgICAgICAgcmV0dXJuIHRlc3RHZXRDb21wdXRlZFN0eWxl
KGV4dGVuc2lvbiwgYXJncyk7CisKKyAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK307CisKK3N0YXRpYyB2b2lkIF9fYXR0cmlidXRl
X18oKGNvbnN0cnVjdG9yKSkgcmVnaXN0ZXJUZXN0cygpCit7CisgICAgUkVHSVNURVJfVEVTVChX
ZWJLaXRET01ET01XaW5kb3dUZXN0LCAiV2ViS2l0RE9NRE9NV2luZG93L3NpZ25hbHMiKTsKKyAg
ICBSRUdJU1RFUl9URVNUKFdlYktpdERPTURPTVdpbmRvd1Rlc3QsICJXZWJLaXRET01ET01XaW5k
b3cvZGlzcGF0Y2gtZXZlbnQiKTsKKyAgICBSRUdJU1RFUl9URVNUKFdlYktpdERPTURPTVdpbmRv
d1Rlc3QsICJXZWJLaXRET01ET01XaW5kb3cvZ2V0LWNvbXB1dGVkLXN0eWxlIik7Cit9CisKK3N0
YXRpYyBnYm9vbGVhbiBsb2FkZWRDYWxsYmFjayhXZWJLaXRET01ET01XaW5kb3cqIHZpZXcsIFdl
YktpdERPTUV2ZW50KiBldmVudCwgV2ViS2l0RE9NRE9NV2luZG93VGVzdCogdGVzdCkKK3sKKyAg
ICB0ZXN0LT5ub3RpZnkoImxvYWRlZCIsICIiKTsKKworICAgIC8vIFN0b3AgdGhlIGxvb3AgYW5k
IGxldCB0ZXN0U2lnbmFscygpIG9yIHRlc3REaXNwYXRjaEV2ZW50KCkgY29udGludWUgaXRzIGNv
dXJzZQorICAgIFJ1bkxvb3A6OmN1cnJlbnQoKS0+c3RvcCgpOworCisgICAgcmV0dXJuIEZBTFNF
OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gY2xpY2tlZENhbGxiYWNrKFdlYktpdERPTURPTVdpbmRv
dyogdmlldywgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBXZWJLaXRET01ET01XaW5kb3dUZXN0KiB0
ZXN0KQoreworICAgIHRlc3QtPm5vdGlmeSgiY2xpY2tlZCIsICIiKTsKKyAgICB0ZXN0LT5ub3Rp
ZnkoImZpbmlzaCIsICIiKTsKKworICAgIC8vIFN0b3AgdGhlIGxvb3AgYW5kIGxldCB0ZXN0U2ln
bmFscygpIG9yIHRlc3REaXNwYXRjaEV2ZW50KCkgY29udGludWUgaXRzIGNvdXJzZQorICAgIFJ1
bkxvb3A6OmN1cnJlbnQoKS0+c3RvcCgpOworCisgICAgcmV0dXJuIEZBTFNFOworfQpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL0RPTU5vZGVUZXN0LmNw
cCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9ET01Ob2RlVGVzdC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZTE3NTRjZjIxZGZkMGY5ODU0MmI0MGEyZGJmOGYwNmJhOTI1MDE3YgotLS0g
L2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9ET01O
b2RlVGVzdC5jcHAKQEAgLTAsMCArMSwyMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
SWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Rl
c3QuaCIKKyNpbmNsdWRlIDxnaW8vZ2lvLmg+CisjaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQtd2Vi
LWV4dGVuc2lvbi5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKworY2xhc3Mg
V2ViS2l0RE9NTm9kZVRlc3QgOiBwdWJsaWMgV2ViUHJvY2Vzc1Rlc3QgeworcHVibGljOgorICAg
IHN0YXRpYyBQYXNzT3duUHRyPFdlYlByb2Nlc3NUZXN0PiBjcmVhdGUoKSB7IHJldHVybiBhZG9w
dFB0cihuZXcgV2ViS2l0RE9NTm9kZVRlc3QoKSk7IH0KKworcHJpdmF0ZToKKyAgICBndWludDY0
IHdlYlBhZ2VGcm9tQXJncyhHVmFyaWFudCogYXJncykKKyAgICB7CisgICAgICAgIEdWYXJpYW50
SXRlciBpdGVyOworICAgICAgICBnX3ZhcmlhbnRfaXRlcl9pbml0KCZpdGVyLCBhcmdzKTsKKwor
ICAgICAgICBjb25zdCBjaGFyKiBrZXk7CisgICAgICAgIEdWYXJpYW50KiB2YWx1ZTsKKyAgICAg
ICAgd2hpbGUgKGdfdmFyaWFudF9pdGVyX2xvb3AoJml0ZXIsICJ7JnN2fSIsICZrZXksICZ2YWx1
ZSkpIHsKKyAgICAgICAgICAgIGlmICghc3RyY21wKGtleSwgInBhZ2VJRCIpICYmIGdfdmFyaWFu
dF9jbGFzc2lmeSh2YWx1ZSkgPT0gR19WQVJJQU5UX0NMQVNTX1VJTlQ2NCkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ192YXJpYW50X2dldF91aW50NjQodmFsdWUpOworICAgICAgICB9CisKKyAg
ICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
CisgICAgYm9vbCB0ZXN0SGllcmFyY2h5TmF2aWdhdGlvbihXZWJLaXRXZWJFeHRlbnNpb24qIGV4
dGVuc2lvbiwgR1ZhcmlhbnQqIGFyZ3MpCisgICAgeworICAgICAgICBXZWJLaXRXZWJQYWdlKiBw
YWdlID0gd2Via2l0X3dlYl9leHRlbnNpb25fZ2V0X3BhZ2UoZXh0ZW5zaW9uLCB3ZWJQYWdlRnJv
bUFyZ3MoYXJncykpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfV0VCX1BBR0UocGFnZSkp
OworICAgICAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3BhZ2Vf
Z2V0X2RvbV9kb2N1bWVudChwYWdlKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19E
T0NVTUVOVChkb2N1bWVudCkpOworCisgICAgICAgIFdlYktpdERPTUhUTUxIZWFkRWxlbWVudCog
aGVhZCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2hlYWQoZG9jdW1lbnQpOworICAgICAgICBn
X2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfSEVBRF9FTEVNRU5UKGhlYWQpKTsKKworICAgICAg
ICAvLyBUaXRsZSwgaGVhZCdzIGNoaWxkLgorICAgICAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25v
ZGVfaGFzX2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShoZWFkKSkpOworICAgICAgICBHUmVm
UHRyPFdlYktpdERPTU5vZGVMaXN0PiBsaXN0ID0gYWRvcHRHUmVmKHdlYmtpdF9kb21fbm9kZV9n
ZXRfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGhlYWQpKSk7CisgICAgICAgIGdfYXNzZXJ0
KFdFQktJVF9ET01fSVNfTk9ERV9MSVNUKGxpc3QuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRf
Y21waW50KHdlYmtpdF9kb21fbm9kZV9saXN0X2dldF9sZW5ndGgobGlzdC5nZXQoKSksID09LCAx
KTsKKyAgICAgICAgV2ViS2l0RE9NTm9kZSogbm9kZSA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0
ZW0obGlzdC5nZXQoKSwgMCk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9U
SVRMRV9FTEVNRU5UKG5vZGUpKTsKKworICAgICAgICAvLyBCb2R5LCBIZWFkIHNpYmxpbmcuCisg
ICAgICAgIG5vZGUgPSB3ZWJraXRfZG9tX25vZGVfZ2V0X25leHRfc2libGluZyhXRUJLSVRfRE9N
X05PREUoaGVhZCkpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfQk9EWV9F
TEVNRU5UKG5vZGUpKTsKKyAgICAgICAgV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50KiBib2R5ID0g
V0VCS0lUX0RPTV9IVE1MX0JPRFlfRUxFTUVOVChub2RlKTsKKworICAgICAgICAvLyBUaGVyZSBp
cyBubyB0aGlyZCBzaWJsaW5nCisgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG9tX25vZGVfZ2V0
X25leHRfc2libGluZyhub2RlKSk7CisKKyAgICAgICAgLy8gQm9keSdzIHByZXZpb3VzIHNpYmxp
bmcgaXMgSGVhZC4KKyAgICAgICAgbm9kZSA9IHdlYmtpdF9kb21fbm9kZV9nZXRfcHJldmlvdXNf
c2libGluZyhXRUJLSVRfRE9NX05PREUoYm9keSkpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRf
RE9NX0lTX0hUTUxfSEVBRF9FTEVNRU5UKG5vZGUpKTsKKworICAgICAgICAvLyBCb2R5IGhhcyAz
IGNoaWxkcmVuLgorICAgICAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaGFzX2NoaWxkX25v
ZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSkpOworICAgICAgICBsaXN0ID0gYWRvcHRHUmVmKHdl
YmtpdF9kb21fbm9kZV9nZXRfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKSk7Cisg
ICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuZ3RoID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xl
bmd0aChsaXN0LmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGxlbmd0aCwgPT0sIDMp
OworCisgICAgICAgIC8vIFRoZSB0aHJlZSBvZiB0aGVtIGFyZSBQIHRhZ3MuCisgICAgICAgIGZv
ciAodW5zaWduZWQgbG9uZyBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBu
b2RlID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0LmdldCgpLCBpKTsKKyAgICAgICAg
ICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9QQVJBR1JBUEhfRUxFTUVOVChub2RlKSk7
CisgICAgICAgIH0KKworICAgICAgICAvLyBHbyBiYWNrd2FyZHMKKyAgICAgICAgdW5zaWduZWQg
aTsKKyAgICAgICAgZm9yIChpID0gMDsgbm9kZTsgbm9kZSA9IHdlYmtpdF9kb21fbm9kZV9nZXRf
cHJldmlvdXNfc2libGluZyhub2RlKSwgaSsrKSB7IH0KKyAgICAgICAgZ19hc3NlcnRfY21waW50
KGksID09LCAzKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIHRl
c3RJbnNlcnRpb24oV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24sIEdWYXJpYW50KiBhcmdz
KQorICAgIHsKKyAgICAgICAgV2ViS2l0V2ViUGFnZSogcGFnZSA9IHdlYmtpdF93ZWJfZXh0ZW5z
aW9uX2dldF9wYWdlKGV4dGVuc2lvbiwgd2ViUGFnZUZyb21BcmdzKGFyZ3MpKTsKKyAgICAgICAg
Z19hc3NlcnQoV0VCS0lUX0lTX1dFQl9QQUdFKHBhZ2UpKTsKKyAgICAgICAgV2ViS2l0RE9NRG9j
dW1lbnQqIGRvY3VtZW50ID0gd2Via2l0X3dlYl9wYWdlX2dldF9kb21fZG9jdW1lbnQocGFnZSk7
CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfRE9DVU1FTlQoZG9jdW1lbnQpKTsKKwor
ICAgICAgICBXZWJLaXRET01IVE1MRWxlbWVudCogYm9keSA9IHdlYmtpdF9kb21fZG9jdW1lbnRf
Z2V0X2JvZHkoZG9jdW1lbnQpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxf
RUxFTUVOVChib2R5KSk7CisKKyAgICAgICAgLy8gQm9keSBzaG91bGRuJ3QgaGF2ZSBhbnkgY2hp
bGRyZW4gYXQgdGhpcyBwb2ludC4KKyAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9kb21fbm9kZV9o
YXNfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKSk7CisKKyAgICAgICAgLy8gSW5z
ZXJ0IG9uZSBQIGVsZW1lbnQuCisgICAgICAgIFdlYktpdERPTUVsZW1lbnQqIHAgPSB3ZWJraXRf
ZG9tX2RvY3VtZW50X2NyZWF0ZV9lbGVtZW50KGRvY3VtZW50LCAiUCIsIDApOworICAgICAgICBn
X2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChwKSk7CisgICAgICAgIHdlYmtpdF9k
b21fbm9kZV9hcHBlbmRfY2hpbGQoV0VCS0lUX0RPTV9OT0RFKGJvZHkpLCBXRUJLSVRfRE9NX05P
REUocCksIDApOworCisgICAgICAgIC8vIE5vdyBpdCBzaG91bGQgaGF2ZSBvbmUsIHRoZSBzYW1l
IHRoYXQgd2UgaW5zZXJ0ZWQuCisgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9oYXNf
Y2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKSk7CisgICAgICAgIEdSZWZQdHI8V2Vi
S2l0RE9NTm9kZUxpc3Q+IGxpc3QgPSBhZG9wdEdSZWYod2Via2l0X2RvbV9ub2RlX2dldF9jaGls
ZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lU
X0RPTV9JU19OT0RFX0xJU1QobGlzdC5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQo
d2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChsaXN0LmdldCgpKSwgPT0sIDEpOworICAg
ICAgICBXZWJLaXRET01Ob2RlKiBub2RlID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0
LmdldCgpLCAwKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0VMRU1FTlQo
bm9kZSkpOworICAgICAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaXNfc2FtZV9ub2RlKFdF
QktJVF9ET01fTk9ERShwKSwgbm9kZSkpOworCisgICAgICAgIC8vIFJlcGxhY2UgdGhlIFAgdGFn
IHdpdGggYSBESVYgdGFnLgorICAgICAgICBXZWJLaXRET01FbGVtZW50KiBkaXYgPSB3ZWJraXRf
ZG9tX2RvY3VtZW50X2NyZWF0ZV9lbGVtZW50KGRvY3VtZW50LCAiRElWIiwgMCk7CisgICAgICAg
IGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKGRpdikpOworICAgICAgICB3ZWJr
aXRfZG9tX25vZGVfcmVwbGFjZV9jaGlsZChXRUJLSVRfRE9NX05PREUoYm9keSksIFdFQktJVF9E
T01fTk9ERShkaXYpLCBXRUJLSVRfRE9NX05PREUocCksIDApOworICAgICAgICBnX2Fzc2VydCh3
ZWJraXRfZG9tX25vZGVfaGFzX2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSkpOwor
ICAgICAgICBsaXN0ID0gYWRvcHRHUmVmKHdlYmtpdF9kb21fbm9kZV9nZXRfY2hpbGRfbm9kZXMo
V0VCS0lUX0RPTV9OT0RFKGJvZHkpKSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNf
Tk9ERV9MSVNUKGxpc3QuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9k
b21fbm9kZV9saXN0X2dldF9sZW5ndGgobGlzdC5nZXQoKSksID09LCAxKTsKKyAgICAgICAgbm9k
ZSA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdC5nZXQoKSwgMCk7CisgICAgICAgIGdf
YXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKG5vZGUpKTsKKyAgICAgICAgZ19hc3Nl
cnQod2Via2l0X2RvbV9ub2RlX2lzX3NhbWVfbm9kZShXRUJLSVRfRE9NX05PREUoZGl2KSwgbm9k
ZSkpOworCisgICAgICAgIC8vIE5vdyByZW1vdmUgdGhlIHRhZy4KKyAgICAgICAgd2Via2l0X2Rv
bV9ub2RlX3JlbW92ZV9jaGlsZChXRUJLSVRfRE9NX05PREUoYm9keSksIG5vZGUsIDApOworICAg
ICAgICBsaXN0ID0gYWRvcHRHUmVmKHdlYmtpdF9kb21fbm9kZV9nZXRfY2hpbGRfbm9kZXMoV0VC
S0lUX0RPTV9OT0RFKGJvZHkpKSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfTk9E
RV9MSVNUKGxpc3QuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9kb21f
bm9kZV9saXN0X2dldF9sZW5ndGgobGlzdC5nZXQoKSksID09LCAwKTsKKworICAgICAgICAvLyBU
ZXN0IGluc2VydCBiZWZvcmUuIElmIHJlZkNoaWxkIGlzIG51bGwsIGluc2VydCBuZXdDaGlsZCBh
cyBsYXN0IGVsZW1lbnQgb2YgcGFyZW50LgorICAgICAgICBkaXYgPSB3ZWJraXRfZG9tX2RvY3Vt
ZW50X2NyZWF0ZV9lbGVtZW50KGRvY3VtZW50LCAiRElWIiwgMCk7CisgICAgICAgIGdfYXNzZXJ0
KFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKGRpdikpOworICAgICAgICB3ZWJraXRfZG9tX25v
ZGVfaW5zZXJ0X2JlZm9yZShXRUJLSVRfRE9NX05PREUoYm9keSksIFdFQktJVF9ET01fTk9ERShk
aXYpLCAwLCAwKTsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2hhc19jaGlsZF9u
b2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpKTsKKyAgICAgICAgbGlzdCA9IGFkb3B0R1JlZih3
ZWJraXRfZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSkpOwor
ICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX05PREVfTElTVChsaXN0LmdldCgpKSk7Cisg
ICAgICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxp
c3QuZ2V0KCkpLCA9PSwgMSk7CisgICAgICAgIG5vZGUgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9p
dGVtKGxpc3QuZ2V0KCksIDApOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxf
RUxFTUVOVChub2RlKSk7CisgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9pc19zYW1l
X25vZGUoV0VCS0lUX0RPTV9OT0RFKGRpdiksIG5vZGUpKTsKKworICAgICAgICAvLyBOb3cgaW5z
ZXJ0IGEgJ3AnIGJlZm9yZSAnZGl2Jy4KKyAgICAgICAgcCA9IHdlYmtpdF9kb21fZG9jdW1lbnRf
Y3JlYXRlX2VsZW1lbnQoZG9jdW1lbnQsICJQIiwgMCk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJ
VF9ET01fSVNfSFRNTF9FTEVNRU5UKHApKTsKKyAgICAgICAgd2Via2l0X2RvbV9ub2RlX2luc2Vy
dF9iZWZvcmUoV0VCS0lUX0RPTV9OT0RFKGJvZHkpLCBXRUJLSVRfRE9NX05PREUocCksIFdFQktJ
VF9ET01fTk9ERShkaXYpLCAwKTsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2hh
c19jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpKTsKKyAgICAgICAgbGlzdCA9IGFk
b3B0R1JlZih3ZWJraXRfZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShi
b2R5KSkpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX05PREVfTElTVChsaXN0Lmdl
dCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRf
bGVuZ3RoKGxpc3QuZ2V0KCkpLCA9PSwgMik7CisgICAgICAgIG5vZGUgPSB3ZWJraXRfZG9tX25v
ZGVfbGlzdF9pdGVtKGxpc3QuZ2V0KCksIDApOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9N
X0lTX0hUTUxfRUxFTUVOVChub2RlKSk7CisgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9k
ZV9pc19zYW1lX25vZGUoV0VCS0lUX0RPTV9OT0RFKHApLCBub2RlKSk7CisgICAgICAgIG5vZGUg
PSB3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtKGxpc3QuZ2V0KCksIDEpOworICAgICAgICBnX2Fz
c2VydChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChub2RlKSk7CisgICAgICAgIGdfYXNzZXJ0
KHdlYmtpdF9kb21fbm9kZV9pc19zYW1lX25vZGUoV0VCS0lUX0RPTV9OT0RFKGRpdiksIG5vZGUp
KTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIHRlc3RUYWdOYW1l
cyhXZWJLaXRXZWJFeHRlbnNpb24qIGV4dGVuc2lvbiwgR1ZhcmlhbnQqIGFyZ3MpCisgICAgewor
ICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogZXhwZWN0ZWRUYWdOYW1lc1tdID0geyAiSFRNTCIs
ICJIRUFEIiwgIkJPRFkiLCAiVklERU8iLCAiU09VUkNFIiwgIlZJREVPIiwgIlNPVVJDRSIsICJJ
TlBVVCIgfTsKKworICAgICAgICBXZWJLaXRXZWJQYWdlKiBwYWdlID0gd2Via2l0X3dlYl9leHRl
bnNpb25fZ2V0X3BhZ2UoZXh0ZW5zaW9uLCB3ZWJQYWdlRnJvbUFyZ3MoYXJncykpOworICAgICAg
ICBnX2Fzc2VydChXRUJLSVRfSVNfV0VCX1BBR0UocGFnZSkpOworICAgICAgICBXZWJLaXRET01E
b2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3BhZ2VfZ2V0X2RvbV9kb2N1bWVudChwYWdl
KTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChkb2N1bWVudCkpOwor
CisgICAgICAgIFdlYktpdERPTU5vZGVMaXN0KiBsaXN0ID0gd2Via2l0X2RvbV9kb2N1bWVudF9n
ZXRfZWxlbWVudHNfYnlfdGFnX25hbWUoZG9jdW1lbnQsICIqIik7CisgICAgICAgIGd1bG9uZyBu
b2RlQ291bnQgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QpOworICAgICAg
ICBnX2Fzc2VydF9jbXB1aW50KG5vZGVDb3VudCwgPT0sIEdfTl9FTEVNRU5UUyhleHBlY3RlZFRh
Z05hbWVzKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2RlQ291bnQ7IGkr
KykgeworICAgICAgICAgICAgV2ViS2l0RE9NTm9kZSogbm9kZSA9IHdlYmtpdF9kb21fbm9kZV9s
aXN0X2l0ZW0obGlzdCwgaSk7CisgICAgICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX05P
REUobm9kZSkpOworICAgICAgICAgICAgR093blB0cjxjaGFyPiB0YWdOYW1lKHdlYmtpdF9kb21f
bm9kZV9nZXRfbm9kZV9uYW1lKG5vZGUpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih0
YWdOYW1lLmdldCgpLCA9PSwgZXhwZWN0ZWRUYWdOYW1lc1tpXSk7CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgcnVuVGVzdChjb25z
dCBjaGFyKiB0ZXN0TmFtZSwgV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24sIEdWYXJpYW50
KiBhcmdzKQorICAgIHsKKyAgICAgICAgaWYgKCFzdHJjbXAodGVzdE5hbWUsICJoaWVyYXJjaHkt
bmF2aWdhdGlvbiIpKQorICAgICAgICAgICAgcmV0dXJuIHRlc3RIaWVyYXJjaHlOYXZpZ2F0aW9u
KGV4dGVuc2lvbiwgYXJncyk7CisgICAgICAgIGlmICghc3RyY21wKHRlc3ROYW1lLCAiaW5zZXJ0
aW9uIikpCisgICAgICAgICAgICByZXR1cm4gdGVzdEluc2VydGlvbihleHRlbnNpb24sIGFyZ3Mp
OworICAgICAgICBpZiAoIXN0cmNtcCh0ZXN0TmFtZSwgInRhZy1uYW1lcyIpKQorICAgICAgICAg
ICAgcmV0dXJuIHRlc3RUYWdOYW1lcyhleHRlbnNpb24sIGFyZ3MpOworCisgICAgICAgIGdfYXNz
ZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9OworCitz
dGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChjb25zdHJ1Y3RvcikpIHJlZ2lzdGVyVGVzdHMoKQor
eworICAgIFJFR0lTVEVSX1RFU1QoV2ViS2l0RE9NTm9kZVRlc3QsICJXZWJLaXRET01Ob2RlL2hp
ZXJhcmNoeS1uYXZpZ2F0aW9uIik7CisgICAgUkVHSVNURVJfVEVTVChXZWJLaXRET01Ob2RlVGVz
dCwgIldlYktpdERPTU5vZGUvaW5zZXJ0aW9uIik7CisgICAgUkVHSVNURVJfVEVTVChXZWJLaXRE
T01Ob2RlVGVzdCwgIldlYktpdERPTU5vZGUvdGFnLW5hbWVzIik7Cit9CisKKwpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL0ZyYW1lVGVzdC5jcHAgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvRnJhbWVUZXN0LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi40ZDQ4NTBmNTIxYjM5YWY3MmEzZmUwMTZkYjczZTcwYjY0ZWE5MTA4Ci0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL0ZyYW1lVGVzdC5j
cHAKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSWdhbGlhIFMu
TC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Rlc3QuaCIKKyNp
bmNsdWRlIDxnaW8vZ2lvLmg+CisjaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQtd2ViLWV4dGVuc2lv
bi5oPgorCitjbGFzcyBXZWJLaXRGcmFtZVRlc3QgOiBwdWJsaWMgV2ViUHJvY2Vzc1Rlc3Qgewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFdlYlByb2Nlc3NUZXN0PiBjcmVhdGUoKSB7
IHJldHVybiBhZG9wdFB0cihuZXcgV2ViS2l0RnJhbWVUZXN0KCkpOyB9CisKK3ByaXZhdGU6Cisg
ICAgZ3VpbnQ2NCB3ZWJQYWdlRnJvbUFyZ3MoR1ZhcmlhbnQqIGFyZ3MpCisgICAgeworICAgICAg
ICBHVmFyaWFudEl0ZXIgaXRlcjsKKyAgICAgICAgZ192YXJpYW50X2l0ZXJfaW5pdCgmaXRlciwg
YXJncyk7CisKKyAgICAgICAgY29uc3QgY2hhcioga2V5OworICAgICAgICBHVmFyaWFudCogdmFs
dWU7CisgICAgICAgIHdoaWxlIChnX3ZhcmlhbnRfaXRlcl9sb29wKCZpdGVyLCAieyZzdn0iLCAm
a2V5LCAmdmFsdWUpKSB7CisgICAgICAgICAgICBpZiAoIXN0cmNtcChrZXksICJwYWdlSUQiKSAm
JiBnX3ZhcmlhbnRfY2xhc3NpZnkodmFsdWUpID09IEdfVkFSSUFOVF9DTEFTU19VSU5UNjQpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdfdmFyaWFudF9nZXRfdWludDY0KHZhbHVlKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KKworICAgIGJvb2wgdGVzdE1haW5GcmFtZShXZWJLaXRXZWJFeHRlbnNpb24qIGV4
dGVuc2lvbiwgR1ZhcmlhbnQqIGFyZ3MpCisgICAgeworICAgICAgICBXZWJLaXRXZWJQYWdlKiBw
YWdlID0gd2Via2l0X3dlYl9leHRlbnNpb25fZ2V0X3BhZ2UoZXh0ZW5zaW9uLCB3ZWJQYWdlRnJv
bUFyZ3MoYXJncykpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfV0VCX1BBR0UocGFnZSkp
OworCisgICAgICAgIFdlYktpdEZyYW1lKiBmcmFtZSA9IHdlYmtpdF93ZWJfcGFnZV9nZXRfbWFp
bl9mcmFtZShwYWdlKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX0ZSQU1FKGZyYW1lKSk7
CisgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9mcmFtZV9pc19tYWluX2ZyYW1lKGZyYW1lKSk7CisK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCB0ZXN0VVJJKFdlYktpdFdl
YkV4dGVuc2lvbiogZXh0ZW5zaW9uLCBHVmFyaWFudCogYXJncykKKyAgICB7CisgICAgICAgIFdl
YktpdFdlYlBhZ2UqIHBhZ2UgPSB3ZWJraXRfd2ViX2V4dGVuc2lvbl9nZXRfcGFnZShleHRlbnNp
b24sIHdlYlBhZ2VGcm9tQXJncyhhcmdzKSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19X
RUJfUEFHRShwYWdlKSk7CisKKyAgICAgICAgV2ViS2l0RnJhbWUqIGZyYW1lID0gd2Via2l0X3dl
Yl9wYWdlX2dldF9tYWluX2ZyYW1lKHBhZ2UpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNf
RlJBTUUoZnJhbWUpKTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfcGFnZV9n
ZXRfdXJpKHBhZ2UpLCA9PSwgd2Via2l0X2ZyYW1lX2dldF91cmkoZnJhbWUpKTsKKworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIHRlc3RKYXZhU2NyaXB0Q29udGV4dChX
ZWJLaXRXZWJFeHRlbnNpb24qIGV4dGVuc2lvbiwgR1ZhcmlhbnQqIGFyZ3MpCisgICAgeworICAg
ICAgICBXZWJLaXRXZWJQYWdlKiBwYWdlID0gd2Via2l0X3dlYl9leHRlbnNpb25fZ2V0X3BhZ2Uo
ZXh0ZW5zaW9uLCB3ZWJQYWdlRnJvbUFyZ3MoYXJncykpOworICAgICAgICBnX2Fzc2VydChXRUJL
SVRfSVNfV0VCX1BBR0UocGFnZSkpOworCisgICAgICAgIFdlYktpdEZyYW1lKiBmcmFtZSA9IHdl
YmtpdF93ZWJfcGFnZV9nZXRfbWFpbl9mcmFtZShwYWdlKTsKKyAgICAgICAgZ19hc3NlcnQoV0VC
S0lUX0lTX0ZSQU1FKGZyYW1lKSk7CisgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9mcmFtZV9nZXRf
amF2YXNjcmlwdF9nbG9iYWxfY29udGV4dChmcmFtZSkpOworCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBydW5UZXN0KGNvbnN0IGNoYXIqIHRlc3ROYW1l
LCBXZWJLaXRXZWJFeHRlbnNpb24qIGV4dGVuc2lvbiwgR1ZhcmlhbnQqIGFyZ3MpCisgICAgewor
ICAgICAgICBpZiAoIXN0cmNtcCh0ZXN0TmFtZSwgIm1haW4tZnJhbWUiKSkKKyAgICAgICAgICAg
IHJldHVybiB0ZXN0TWFpbkZyYW1lKGV4dGVuc2lvbiwgYXJncyk7CisgICAgICAgIGlmICghc3Ry
Y21wKHRlc3ROYW1lLCAidXJpIikpCisgICAgICAgICAgICByZXR1cm4gdGVzdFVSSShleHRlbnNp
b24sIGFyZ3MpOworICAgICAgICBpZiAoIXN0cmNtcCh0ZXN0TmFtZSwgImphdmFzY3JpcHQtY29u
dGV4dCIpKQorICAgICAgICAgICAgcmV0dXJuIHRlc3RKYXZhU2NyaXB0Q29udGV4dChleHRlbnNp
b24sIGFyZ3MpOworCisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9Cit9OworCitzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChjb25z
dHJ1Y3RvcikpIHJlZ2lzdGVyVGVzdHMoKQoreworICAgIFJFR0lTVEVSX1RFU1QoV2ViS2l0RnJh
bWVUZXN0LCAiV2ViS2l0RnJhbWUvbWFpbi1mcmFtZSIpOworICAgIFJFR0lTVEVSX1RFU1QoV2Vi
S2l0RnJhbWVUZXN0LCAiV2ViS2l0RnJhbWUvdXJpIik7CisgICAgUkVHSVNURVJfVEVTVChXZWJL
aXRGcmFtZVRlc3QsICJXZWJLaXRGcmFtZS9qYXZhc2NyaXB0LWNvbnRleHQiKTsKK30KZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9JbnNwZWN0b3JUZXN0
U2VydmVyLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9JbnNwZWN0
b3JUZXN0U2VydmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMTNiMDQzZGYxNmQ4OWQwZWJhMDQ3NzJmZjBm
NDFjNmM4ZDk0YmFlCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXQyR3RrL0luc3BlY3RvclRlc3RTZXJ2ZXIuY3BwCkBAIC0wLDAgKzEsNTggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcyBMdGQuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICog
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lu
Y2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdDIuaD4KKworc3RhdGlj
IHZvaWQgbG9hZENoYW5nZWRDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiwgV2ViS2l0TG9hZEV2ZW50
IGxvYWRFdmVudCwgZ3BvaW50ZXIpCit7CisgICAgLy8gU2VuZCBhIG1lc3NhZ2UgdG8gdGhlIHBh
cmVudCBwcm9jZXNzIHdoZW4gd2UncmUgcmVhZHkuCisgICAgaWYgKGxvYWRFdmVudCA9PSBXRUJL
SVRfTE9BRF9GSU5JU0hFRCkKKyAgICAgICAgZ19wcmludCgiT0siKTsKK30KKworaW50IG1haW4o
aW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIGd0a19pbml0KCZhcmdjLCAmYXJndik7CisK
KyAgICAvLyBPdmVyd3JpdGUgV0VCS0lUX0lOU1BFQ1RPUl9TRVJWRVIgdmFyaWFibGUgd2l0aCBk
ZWZhdWx0IHZhbHVlLgorICAgIGdfc2V0ZW52KCJXRUJLSVRfSU5TUEVDVE9SX1NFUlZFUiIsICIx
MjcuMC4wLjE6Mjk5OSIsIFRSVUUpOworCisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdF
QktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIHdlYmtpdF9zZXR0aW5n
c19zZXRfZW5hYmxlX2RldmVsb3Blcl9leHRyYXMod2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5n
cyh3ZWJWaWV3KSwgVFJVRSk7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfaHRtbCh3ZWJWaWV3
LAorICAgICAgICAiPGh0bWw+PGJvZHk+PHA+V2ViS2l0R1RLKyBJbnNwZWN0b3IgVGVzdCBTZXJ2
ZXI8L3A+PC9ib2R5PjwvaHRtbD4iLAorICAgICAgICAiaHR0cDovLzEyNy4wLjAuMToyOTk5LyIp
OworCisgICAgR3RrV2lkZ2V0KiB3aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RP
UExFVkVMKTsKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIEdU
S19XSURHRVQod2ViVmlldykpOworICAgIGd0a193aWRnZXRfc2hvd19hbGwod2luZG93KTsKKwor
ICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2luZG93LCAiZGVsZXRlLWV2ZW50IiwgR19DQUxMQkFDSyhn
dGtfbWFpbl9xdWl0KSwgMCk7CisgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAibG9hZC1j
aGFuZ2VkIiwgR19DQUxMQkFDSyhsb2FkQ2hhbmdlZENhbGxiYWNrKSwgMCk7CisKKyAgICBndGtf
bWFpbigpOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQy
R3RrL0xvYWRUcmFja2luZ1Rlc3QuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXQyR3RrL0xvYWRUcmFja2luZ1Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRmMzQyMDQ5MmM5OGI3M2Vh
YWU0ZGE5MmZjNjZjNjhiYmI2YmNhNDYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvTG9hZFRyYWNraW5nVGVzdC5jcHAKQEAgLTAsMCArMSwy
MDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkxvYWRUcmFja2luZ1Rlc3QuaCIKKworI2luY2x1ZGUgPHdlYmtp
dDIvd2Via2l0Mi5oPgorCitzdGF0aWMgdm9pZCBsb2FkQ2hhbmdlZENhbGxiYWNrKFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcsIFdlYktpdExvYWRFdmVudCBsb2FkRXZlbnQsIExvYWRUcmFja2luZ1Rl
c3QqIHRlc3QpCit7CisgICAgc3dpdGNoIChsb2FkRXZlbnQpIHsKKyAgICBjYXNlIFdFQktJVF9M
T0FEX1NUQVJURUQ6CisgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19pc19sb2FkaW5n
KHdlYlZpZXcpKTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPm1fYWN0aXZlVVJJLmRh
dGEoKSwgPT0sIHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKHdlYlZpZXcpKTsKKyAgICAgICAgdGVz
dC0+cHJvdmlzaW9uYWxMb2FkU3RhcnRlZCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdF
QktJVF9MT0FEX1JFRElSRUNURUQ6CisgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19p
c19sb2FkaW5nKHdlYlZpZXcpKTsKKyAgICAgICAgdGVzdC0+bV9hY3RpdmVVUkkgPSB3ZWJraXRf
d2ViX3ZpZXdfZ2V0X3VyaSh3ZWJWaWV3KTsKKyAgICAgICAgaWYgKCF0ZXN0LT5tX3JlZGlyZWN0
VVJJLmlzTnVsbCgpKQorICAgICAgICAgICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPm1fcmVkaXJl
Y3RVUkkuZGF0YSgpLCA9PSwgdGVzdC0+bV9hY3RpdmVVUkkuZGF0YSgpKTsKKyAgICAgICAgdGVz
dC0+cHJvdmlzaW9uYWxMb2FkUmVjZWl2ZWRTZXJ2ZXJSZWRpcmVjdCgpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFdFQktJVF9MT0FEX0NPTU1JVFRFRDogeworICAgICAgICBnX2Fzc2VydCh3
ZWJraXRfd2ViX3ZpZXdfaXNfbG9hZGluZyh3ZWJWaWV3KSk7CisgICAgICAgIGdfYXNzZXJ0X2Nt
cHN0cih0ZXN0LT5tX2FjdGl2ZVVSSS5kYXRhKCksID09LCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3Vy
aSh3ZWJWaWV3KSk7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBvbiBjb21taXR0ZWQgd2UgYWx3
YXlzIGhhdmUgYSBtYWluIHJlc291cmNlIHdpdGggYSByZXNwb25zZS4KKyAgICAgICAgV2ViS2l0
V2ViUmVzb3VyY2UqIHJlc291cmNlID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX3Jlc291cmNl
KHdlYlZpZXcpOworICAgICAgICBnX2Fzc2VydChyZXNvdXJjZSk7CisgICAgICAgIGdfYXNzZXJ0
KHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3Jlc3BvbnNlKHJlc291cmNlKSk7CisKKyAgICAgICAg
dGVzdC0+bG9hZENvbW1pdHRlZCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBX
RUJLSVRfTE9BRF9GSU5JU0hFRDoKKyAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19p
c19sb2FkaW5nKHdlYlZpZXcpKTsKKyAgICAgICAgaWYgKCF0ZXN0LT5tX2xvYWRGYWlsZWQpCisg
ICAgICAgICAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9hY3RpdmVVUkkuZGF0YSgpLCA9PSwg
d2Via2l0X3dlYl92aWV3X2dldF91cmkod2ViVmlldykpOworICAgICAgICB0ZXN0LT5sb2FkRmlu
aXNoZWQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgZ19hc3NlcnRf
bm90X3JlYWNoZWQoKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRGYWlsZWRDYWxsYmFj
ayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRMb2FkRXZlbnQgbG9hZEV2ZW50LCBjb25z
dCBjaGFyKiBmYWlsaW5nVVJJLCBHRXJyb3IqIGVycm9yLCBMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0
KQoreworICAgIHRlc3QtPm1fbG9hZEZhaWxlZCA9IHRydWU7CisgICAgdGVzdC0+bV9lcnJvci5z
ZXQoZ19lcnJvcl9jb3B5KGVycm9yKSk7CisKKyAgICBzd2l0Y2ggKGxvYWRFdmVudCkgeworICAg
IGNhc2UgV0VCS0lUX0xPQURfU1RBUlRFRDoKKyAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJf
dmlld19pc19sb2FkaW5nKHdlYlZpZXcpKTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHRlc3Qt
Pm1fYWN0aXZlVVJJLmRhdGEoKSwgPT0sIHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKHdlYlZpZXcp
KTsKKyAgICAgICAgZ19hc3NlcnQoZXJyb3IpOworICAgICAgICB0ZXN0LT5wcm92aXNpb25hbExv
YWRGYWlsZWQoZmFpbGluZ1VSSSwgZXJyb3IpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdF
QktJVF9MT0FEX0NPTU1JVFRFRDoKKyAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19p
c19sb2FkaW5nKHdlYlZpZXcpKTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPm1fYWN0
aXZlVVJJLmRhdGEoKSwgPT0sIHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKHdlYlZpZXcpKTsKKyAg
ICAgICAgZ19hc3NlcnQoZXJyb3IpOworICAgICAgICB0ZXN0LT5sb2FkRmFpbGVkKGZhaWxpbmdV
UkksIGVycm9yKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgZ19hc3Nl
cnRfbm90X3JlYWNoZWQoKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGVzdGltYXRlZFByb2dy
ZXNzQ2hhbmdlZENhbGxiYWNrKEdPYmplY3QqLCBHUGFyYW1TcGVjKiwgTG9hZFRyYWNraW5nVGVz
dCogdGVzdCkKK3sKKyAgICB0ZXN0LT5lc3RpbWF0ZWRQcm9ncmVzc0NoYW5nZWQoKTsKK30KKwor
TG9hZFRyYWNraW5nVGVzdDo6TG9hZFRyYWNraW5nVGVzdCgpCisgICAgOiBtX3J1bkxvYWRVbnRp
bENvbXBsZXRpb24oZmFsc2UpCisgICAgLCBtX2xvYWRGYWlsZWQoZmFsc2UpCit7CisgICAgZ19z
aWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJsb2FkLWNoYW5nZWQiLCBHX0NBTExCQUNLKGxvYWRD
aGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywg
ImxvYWQtZmFpbGVkIiwgR19DQUxMQkFDSyhsb2FkRmFpbGVkQ2FsbGJhY2spLCB0aGlzKTsKKyAg
ICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgIm5vdGlmeTo6ZXN0aW1hdGVkLWxvYWQtcHJv
Z3Jlc3MiLCBHX0NBTExCQUNLKGVzdGltYXRlZFByb2dyZXNzQ2hhbmdlZENhbGxiYWNrKSwgdGhp
cyk7CisKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2dldF91cmkobV93ZWJWaWV3KSk7
Cit9CisKK0xvYWRUcmFja2luZ1Rlc3Q6On5Mb2FkVHJhY2tpbmdUZXN0KCkKK3sKKyAgICBnX3Np
Z25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV93ZWJWaWV3LCBHX1NJR05BTF9NQVRD
SF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKK30KKwordm9pZCBMb2FkVHJhY2tpbmdUZXN0Ojp3
YWl0VW50aWxMb2FkRmluaXNoZWQoKQoreworICAgIG1fZXN0aW1hdGVkUHJvZ3Jlc3MgPSAwOwor
ICAgIG1fcnVuTG9hZFVudGlsQ29tcGxldGlvbiA9IHRydWU7CisgICAgZ19tYWluX2xvb3BfcnVu
KG1fbWFpbkxvb3ApOworfQorCit2b2lkIExvYWRUcmFja2luZ1Rlc3Q6OnByb3Zpc2lvbmFsTG9h
ZFN0YXJ0ZWQoKQoreworICAgIG1fbG9hZEV2ZW50cy5hcHBlbmQoUHJvdmlzaW9uYWxMb2FkU3Rh
cnRlZCk7Cit9CisKK3ZvaWQgTG9hZFRyYWNraW5nVGVzdDo6cHJvdmlzaW9uYWxMb2FkUmVjZWl2
ZWRTZXJ2ZXJSZWRpcmVjdCgpCit7CisgICAgbV9sb2FkRXZlbnRzLmFwcGVuZChQcm92aXNpb25h
bExvYWRSZWNlaXZlZFNlcnZlclJlZGlyZWN0KTsKK30KKwordm9pZCBMb2FkVHJhY2tpbmdUZXN0
Ojpwcm92aXNpb25hbExvYWRGYWlsZWQoY29uc3QgZ2NoYXIqIGZhaWxpbmdVUkksIEdFcnJvciog
ZXJyb3IpCit7CisgICAgbV9sb2FkRXZlbnRzLmFwcGVuZChQcm92aXNpb25hbExvYWRGYWlsZWQp
OworfQorCit2b2lkIExvYWRUcmFja2luZ1Rlc3Q6OmxvYWRDb21taXR0ZWQoKQoreworICAgIG1f
bG9hZEV2ZW50cy5hcHBlbmQoTG9hZENvbW1pdHRlZCk7Cit9CisKK3ZvaWQgTG9hZFRyYWNraW5n
VGVzdDo6bG9hZEZpbmlzaGVkKCkKK3sKKyAgICBtX2xvYWRFdmVudHMuYXBwZW5kKExvYWRGaW5p
c2hlZCk7CisgICAgaWYgKG1fcnVuTG9hZFVudGlsQ29tcGxldGlvbikKKyAgICAgICAgZ19tYWlu
X2xvb3BfcXVpdChtX21haW5Mb29wKTsKK30KKwordm9pZCBMb2FkVHJhY2tpbmdUZXN0Ojpsb2Fk
RmFpbGVkKGNvbnN0IGdjaGFyKiBmYWlsaW5nVVJJLCBHRXJyb3IqIGVycm9yKQoreworICAgIG1f
bG9hZEV2ZW50cy5hcHBlbmQoTG9hZEZhaWxlZCk7Cit9CisKK3ZvaWQgTG9hZFRyYWNraW5nVGVz
dDo6ZXN0aW1hdGVkUHJvZ3Jlc3NDaGFuZ2VkKCkKK3sKKyAgICBkb3VibGUgcHJvZ3Jlc3MgPSB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X2VzdGltYXRlZF9sb2FkX3Byb2dyZXNzKG1fd2ViVmlldyk7Cisg
ICAgZ19hc3NlcnRfY21wZmxvYXQobV9lc3RpbWF0ZWRQcm9ncmVzcywgPCwgcHJvZ3Jlc3MpOwor
ICAgIG1fZXN0aW1hdGVkUHJvZ3Jlc3MgPSBwcm9ncmVzczsKK30KKwordm9pZCBMb2FkVHJhY2tp
bmdUZXN0Ojpsb2FkVVJJKGNvbnN0IGNoYXIqIHVyaSkKK3sKKyAgICBtX2xvYWRFdmVudHMuY2xl
YXIoKTsKKyAgICBtX2VzdGltYXRlZFByb2dyZXNzID0gMDsKKyAgICBtX2Vycm9yLmNsZWFyKCk7
CisgICAgV2ViVmlld1Rlc3Q6OmxvYWRVUkkodXJpKTsKK30KKwordm9pZCBMb2FkVHJhY2tpbmdU
ZXN0Ojpsb2FkSHRtbChjb25zdCBjaGFyKiBodG1sLCBjb25zdCBjaGFyKiBiYXNlVVJJKQorewor
ICAgIG1fbG9hZEV2ZW50cy5jbGVhcigpOworICAgIG1fZXN0aW1hdGVkUHJvZ3Jlc3MgPSAwOwor
ICAgIG1fZXJyb3IuY2xlYXIoKTsKKyAgICBXZWJWaWV3VGVzdDo6bG9hZEh0bWwoaHRtbCwgYmFz
ZVVSSSk7Cit9CisKK3ZvaWQgTG9hZFRyYWNraW5nVGVzdDo6bG9hZFBsYWluVGV4dChjb25zdCBj
aGFyKiBwbGFpblRleHQpCit7CisgICAgbV9sb2FkRXZlbnRzLmNsZWFyKCk7CisgICAgbV9lc3Rp
bWF0ZWRQcm9ncmVzcyA9IDA7CisgICAgbV9lcnJvci5jbGVhcigpOworICAgIFdlYlZpZXdUZXN0
Ojpsb2FkUGxhaW5UZXh0KHBsYWluVGV4dCk7Cit9CisKK3ZvaWQgTG9hZFRyYWNraW5nVGVzdDo6
bG9hZFJlcXVlc3QoV2ViS2l0VVJJUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBtX2xvYWRFdmVu
dHMuY2xlYXIoKTsKKyAgICBtX2VzdGltYXRlZFByb2dyZXNzID0gMDsKKyAgICBtX2Vycm9yLmNs
ZWFyKCk7CisgICAgV2ViVmlld1Rlc3Q6OmxvYWRSZXF1ZXN0KHJlcXVlc3QpOworfQorCit2b2lk
IExvYWRUcmFja2luZ1Rlc3Q6OnJlbG9hZCgpCit7CisgICAgbV9sb2FkRXZlbnRzLmNsZWFyKCk7
CisgICAgbV9lc3RpbWF0ZWRQcm9ncmVzcyA9IDA7CisgICAgbV9lcnJvci5jbGVhcigpOworICAg
IHdlYmtpdF93ZWJfdmlld19yZWxvYWQobV93ZWJWaWV3KTsKK30KKwordm9pZCBMb2FkVHJhY2tp
bmdUZXN0Ojpnb0JhY2soKQoreworICAgIG1fbG9hZEV2ZW50cy5jbGVhcigpOworICAgIG1fZXN0
aW1hdGVkUHJvZ3Jlc3MgPSAwOworICAgIG1fZXJyb3IuY2xlYXIoKTsKKyAgICBXZWJWaWV3VGVz
dDo6Z29CYWNrKCk7Cit9CisKK3ZvaWQgTG9hZFRyYWNraW5nVGVzdDo6Z29Gb3J3YXJkKCkKK3sK
KyAgICBtX2xvYWRFdmVudHMuY2xlYXIoKTsKKyAgICBtX2VzdGltYXRlZFByb2dyZXNzID0gMDsK
KyAgICBtX2Vycm9yLmNsZWFyKCk7CisgICAgV2ViVmlld1Rlc3Q6OmdvRm9yd2FyZCgpOworfQpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL0xvYWRUcmFj
a2luZ1Rlc3QuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9Mb2FkVHJh
Y2tpbmdUZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTNjZjc4NDNkOTI3MTRiNjlhZTBhYzIyYTZmZmVhY2Vk
Yjg2ZjFlZQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Mkd0ay9Mb2FkVHJhY2tpbmdUZXN0LmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIExvYWRUcmFja2luZ1Rlc3RfaAorI2Rl
ZmluZSBMb2FkVHJhY2tpbmdUZXN0X2gKKworI2luY2x1ZGUgIlRlc3RNYWluLmgiCisjaW5jbHVk
ZSAiV2ViVmlld1Rlc3QuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK2NsYXNzIExvYWRU
cmFja2luZ1Rlc3QgOiBwdWJsaWMgV2ViVmlld1Rlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJ
Ql9URVNUX0ZJWFRVUkUoTG9hZFRyYWNraW5nVGVzdCk7CisgICAgTG9hZFRyYWNraW5nVGVzdCgp
OworICAgIHZpcnR1YWwgfkxvYWRUcmFja2luZ1Rlc3QoKTsKKyAgICB2b2lkIHdhaXRVbnRpbExv
YWRGaW5pc2hlZCgpOworCisgICAgdmlydHVhbCB2b2lkIHByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcHJvdmlzaW9uYWxMb2FkUmVjZWl2ZWRTZXJ2ZXJSZWRpcmVj
dCgpOworICAgIHZpcnR1YWwgdm9pZCBwcm92aXNpb25hbExvYWRGYWlsZWQoY29uc3QgZ2NoYXIq
IGZhaWxpbmdVUkksIEdFcnJvciopOworICAgIHZpcnR1YWwgdm9pZCBsb2FkQ29tbWl0dGVkKCk7
CisgICAgdmlydHVhbCB2b2lkIGxvYWRGaW5pc2hlZCgpOworICAgIHZpcnR1YWwgdm9pZCBsb2Fk
RmFpbGVkKGNvbnN0IGNoYXIqIGZhaWxpbmdVUkksIEdFcnJvciopOworICAgIHZpcnR1YWwgdm9p
ZCBlc3RpbWF0ZWRQcm9ncmVzc0NoYW5nZWQoKTsKKworICAgIHZvaWQgbG9hZFVSSShjb25zdCBj
aGFyKiB1cmkpOworICAgIHZvaWQgbG9hZEh0bWwoY29uc3QgY2hhciogaHRtbCwgY29uc3QgY2hh
ciogYmFzZVVSSSk7CisgICAgdm9pZCBsb2FkUGxhaW5UZXh0KGNvbnN0IGNoYXIqIHBsYWluVGV4
dCk7CisgICAgdm9pZCBsb2FkUmVxdWVzdChXZWJLaXRVUklSZXF1ZXN0Kik7CisgICAgdm9pZCBy
ZWxvYWQoKTsKKyAgICB2b2lkIGdvQmFjaygpOworICAgIHZvaWQgZ29Gb3J3YXJkKCk7CisKKyAg
ICB2b2lkIHNldFJlZGlyZWN0VVJJKGNvbnN0IGNoYXIqIHVyaSkgeyBtX3JlZGlyZWN0VVJJID0g
dXJpOyB9CisKKyAgICBlbnVtIExvYWRFdmVudHMgeworICAgICAgICBQcm92aXNpb25hbExvYWRT
dGFydGVkLAorICAgICAgICBQcm92aXNpb25hbExvYWRSZWNlaXZlZFNlcnZlclJlZGlyZWN0LAor
ICAgICAgICBQcm92aXNpb25hbExvYWRGYWlsZWQsCisgICAgICAgIExvYWRDb21taXR0ZWQsCisg
ICAgICAgIExvYWRGaW5pc2hlZCwKKyAgICAgICAgTG9hZEZhaWxlZAorICAgIH07CisgICAgYm9v
bCBtX3J1bkxvYWRVbnRpbENvbXBsZXRpb247CisgICAgYm9vbCBtX2xvYWRGYWlsZWQ7CisgICAg
R093blB0cjxHRXJyb3I+IG1fZXJyb3I7CisgICAgVmVjdG9yPExvYWRFdmVudHM+IG1fbG9hZEV2
ZW50czsKKyAgICBmbG9hdCBtX2VzdGltYXRlZFByb2dyZXNzOworICAgIENTdHJpbmcgbV9yZWRp
cmVjdFVSSTsKK307CisKKyNlbmRpZiAvLyBMb2FkVHJhY2tpbmdUZXN0X2gKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0QXV0aGVudGljYXRpb24u
Y3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RBdXRoZW50aWNh
dGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZWRlNDIyNTU2YzA1MGQzMTkyMDFlOWJhYmIwYmZjMGY4ZDg2
MmE1OQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Mkd0ay9UZXN0QXV0aGVudGljYXRpb24uY3BwCkBAIC0wLDAgKzEsMjg2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiTG9hZFRyYWNraW5nVGVzdC5oIgorI2luY2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKKyNp
bmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisKK3N0YXRpYyBXZWJLaXRUZXN0U2VydmVy
KiBrU2VydmVyOworCitjbGFzcyBBdXRoZW50aWNhdGlvblRlc3Q6IHB1YmxpYyBMb2FkVHJhY2tp
bmdUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKEF1dGhlbnRpY2F0
aW9uVGVzdCk7CisKKyAgICBBdXRoZW50aWNhdGlvblRlc3QoKQorICAgIHsKKyAgICAgICAgZ19z
aWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJhdXRoZW50aWNhdGUiLCBHX0NBTExCQUNLKHJ1bkF1
dGhlbnRpY2F0aW9uQ2FsbGJhY2spLCB0aGlzKTsKKyAgICB9CisKKyAgICB+QXV0aGVudGljYXRp
b25UZXN0KCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0
Y2hlZChtX3dlYlZpZXcsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOwor
ICAgIH0KKworICAgIHN0YXRpYyBpbnQgYXV0aGVudGljYXRpb25SZXRyaWVzOworICAgIHN0YXRp
YyBib29sIGF1dGhlbnRpY2F0aW9uQ2FuY2VsbGVkUmVjZWl2ZWQ7CisKKyAgICB2b2lkIGxvYWRV
UkkoY29uc3QgY2hhciogdXJpKQorICAgIHsKKyAgICAgICAgLy8gUmVzZXQgdGhlIHJldHJ5IGNv
dW50IG9mIHRoZSBmYWtlIHNlcnZlciB3aGVuIGEgcGFnZSBpcyBsb2FkZWQuCisgICAgICAgIGF1
dGhlbnRpY2F0aW9uUmV0cmllcyA9IDA7CisgICAgICAgIGF1dGhlbnRpY2F0aW9uQ2FuY2VsbGVk
UmVjZWl2ZWQgPSBmYWxzZTsKKyAgICAgICAgTG9hZFRyYWNraW5nVGVzdDo6bG9hZFVSSSh1cmkp
OworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBydW5BdXRoZW50aWNhdGlvbkNhbGxiYWNr
KFdlYktpdFdlYlZpZXcqLCBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QsIEF1
dGhlbnRpY2F0aW9uVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
cmVxdWVzdCwgImNhbmNlbGxlZCIsIEdfQ0FMTEJBQ0soYXV0aGVudGljYXRpb25DYW5jZWxsZWRD
YWxsYmFjayksIHRlc3QpOworICAgICAgICB0ZXN0LT5ydW5BdXRoZW50aWNhdGlvbihyZXF1ZXN0
KTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgYXV0aGVu
dGljYXRpb25DYW5jZWxsZWRDYWxsYmFjayhXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqLCBB
dXRoZW50aWNhdGlvblRlc3QqKQorICAgIHsKKyAgICAgICAgYXV0aGVudGljYXRpb25DYW5jZWxs
ZWRSZWNlaXZlZCA9IHRydWU7CisgICAgfQorCisgICAgdm9pZCBydW5BdXRoZW50aWNhdGlvbihX
ZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QpCisgICAgeworICAgICAgICBhc3Nl
cnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHJlcXVlc3QpKTsKKyAg
ICAgICAgbV9hdXRoZW50aWNhdGlvblJlcXVlc3QgPSByZXF1ZXN0OworICAgICAgICBnX21haW5f
bG9vcF9xdWl0KG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIFdlYktpdEF1dGhlbnRpY2F0aW9u
UmVxdWVzdCogd2FpdEZvckF1dGhlbnRpY2F0aW9uUmVxdWVzdCgpCisgICAgeworICAgICAgICBn
X21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgICAgIHJldHVybiBtX2F1dGhlbnRpY2F0
aW9uUmVxdWVzdC5nZXQoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR1JlZlB0cjxXZWJLaXRB
dXRoZW50aWNhdGlvblJlcXVlc3Q+IG1fYXV0aGVudGljYXRpb25SZXF1ZXN0OworfTsKKworaW50
IEF1dGhlbnRpY2F0aW9uVGVzdDo6YXV0aGVudGljYXRpb25SZXRyaWVzID0gMDsKK2Jvb2wgQXV0
aGVudGljYXRpb25UZXN0OjphdXRoZW50aWNhdGlvbkNhbmNlbGxlZFJlY2VpdmVkID0gZmFsc2U7
CisKK3N0YXRpYyBjb25zdCBjaGFyIGF1dGhUZXN0VXNlcm5hbWVbXSA9ICJ1c2VybmFtZSI7Citz
dGF0aWMgY29uc3QgY2hhciBhdXRoVGVzdFBhc3N3b3JkW10gPSAicGFzc3dvcmQiOworc3RhdGlj
IGNvbnN0IGNoYXIgYXV0aEV4cGVjdGVkU3VjY2Vzc1RpdGxlW10gPSAiV2ViS2l0Mkd0aysgQXV0
aGVudGljYXRpb24gdGVzdCI7CitzdGF0aWMgY29uc3QgY2hhciBhdXRoRXhwZWN0ZWRGYWlsdXJl
VGl0bGVbXSA9ICI0MDEgQXV0aG9yaXphdGlvbiBSZXF1aXJlZCI7CitzdGF0aWMgY29uc3QgY2hh
ciBhdXRoRXhwZWN0ZWRBdXRob3JpemF0aW9uW10gPSAiQmFzaWMgZFhObGNtNWhiV1U2Y0dGemMz
ZHZjbVE9IjsgLy8gQmFzZTY0IGVuY29kaW5nIG9mICJ1c2VybmFtZTpwYXNzd29yZCIuCitzdGF0
aWMgY29uc3QgY2hhciBhdXRoU3VjY2Vzc0hUTUxTdHJpbmdbXSA9CisgICAgIjxodG1sPiIKKyAg
ICAiPGhlYWQ+PHRpdGxlPldlYktpdDJHdGsrIEF1dGhlbnRpY2F0aW9uIHRlc3Q8L3RpdGxlPjwv
aGVhZD4iCisgICAgIjxib2R5PjwvYm9keT48L2h0bWw+IjsKK3N0YXRpYyBjb25zdCBjaGFyIGF1
dGhGYWlsdXJlSFRNTFN0cmluZ1tdID0KKyAgICAiPGh0bWw+IgorICAgICI8aGVhZD48dGl0bGU+
NDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQ8L3RpdGxlPjwvaGVhZD4iCisgICAgIjxib2R5Pjwv
Ym9keT48L2h0bWw+IjsKKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvblJl
cXVlc3QoQXV0aGVudGljYXRpb25UZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIC8v
IFRlc3QgYXV0aGVudGljYXRpb24gcmVxdWVzdCBnZXR0ZXJzIG1hdGNoIHNvdXAgYXV0aGVudGlj
YXRpb24gaGVhZGVyLgorICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgi
L2F1dGgtdGVzdC5odG1sIikuZGF0YSgpKTsKKyAgICBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVl
c3QqIHJlcXVlc3QgPSB0ZXN0LT53YWl0Rm9yQXV0aGVudGljYXRpb25SZXF1ZXN0KCk7CisgICAg
Z19hc3NlcnRfY21wc3RyKHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9ob3N0KHJl
cXVlc3QpLCA9PSwgc291cF91cmlfZ2V0X2hvc3Qoa1NlcnZlci0+YmFzZVVSSSgpKSk7CisgICAg
Z19hc3NlcnRfY21wdWludCh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcG9ydChy
ZXF1ZXN0KSwgPT0sIHNvdXBfdXJpX2dldF9wb3J0KGtTZXJ2ZXItPmJhc2VVUkkoKSkpOworICAg
IGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcmVhbG0o
cmVxdWVzdCksID09LCAibXkgcmVhbG0iKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfYXV0aGVudGlj
YXRpb25fcmVxdWVzdF9nZXRfc2NoZW1lKHJlcXVlc3QpID09IFdFQktJVF9BVVRIRU5USUNBVElP
Tl9TQ0hFTUVfSFRUUF9CQVNJQyk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9hdXRoZW50aWNhdGlv
bl9yZXF1ZXN0X2lzX2Zvcl9wcm94eShyZXF1ZXN0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9h
dXRoZW50aWNhdGlvbl9yZXF1ZXN0X2lzX3JldHJ5KHJlcXVlc3QpKTsKK30KKworc3RhdGljIHZv
aWQgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvbkNhbmNlbChBdXRoZW50aWNhdGlvblRlc3QqIHRl
c3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8gVGVzdCBjYW5jZWwuCisgICAgdGVzdC0+bG9h
ZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvYXV0aC10ZXN0Lmh0bWwiKS5kYXRhKCkpOwor
ICAgIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCA9IHRlc3QtPndhaXRGb3JB
dXRoZW50aWNhdGlvblJlcXVlc3QoKTsKKyAgICB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVz
dF9jYW5jZWwocmVxdWVzdCk7CisgICAgLy8gU2VydmVyIGRvZXNuJ3QgYXNrIGZvciBuZXcgY3Jl
ZGVudGlhbHMuCisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fz
c2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0sIDMpOworICAgIGdfYXNz
ZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQ
cm92aXNpb25hbExvYWRTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2Fk
RXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkRmFpbGVkKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNr
aW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKKworICAgIGdfYXNzZXJ0X2Vycm9yKHRlc3QtPm1fZXJy
b3IuZ2V0KCksIFdFQktJVF9ORVRXT1JLX0VSUk9SLCBXRUJLSVRfTkVUV09SS19FUlJPUl9DQU5D
RUxMRUQpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uTG9hZENh
bmNlbGxlZChBdXRoZW50aWNhdGlvblRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAg
dGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvYXV0aC10ZXN0Lmh0bWwiKS5k
YXRhKCkpOworICAgIHRlc3QtPndhaXRGb3JBdXRoZW50aWNhdGlvblJlcXVlc3QoKTsKKyAgICB3
ZWJraXRfd2ViX3ZpZXdfc3RvcF9sb2FkaW5nKHRlc3QtPm1fd2ViVmlldyk7CisgICAgLy8gRXhw
ZWN0IGVtcHR5IHBhZ2UuCisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAg
Z19hc3NlcnQodGVzdC0+YXV0aGVudGljYXRpb25DYW5jZWxsZWRSZWNlaXZlZCk7CisKKyAgICBn
X2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0sIDMpOworICAgIGdf
YXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0
OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9s
b2FkRXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkRmFpbGVk
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzJdLCA9PSwgTG9hZFRy
YWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKKworICAgIGdfYXNzZXJ0X2Vycm9yKHRlc3QtPm1f
ZXJyb3IuZ2V0KCksIFdFQktJVF9ORVRXT1JLX0VSUk9SLCBXRUJLSVRfTkVUV09SS19FUlJPUl9D
QU5DRUxMRUQpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uRmFp
bHVyZShBdXRoZW50aWNhdGlvblRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8g
VGVzdCBhdXRoZW50aWNhdGlvbiBmYWlsdXJlcy4KKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXIt
PmdldFVSSUZvclBhdGgoIi9hdXRoLXRlc3QuaHRtbCIpLmRhdGEoKSk7CisgICAgV2ViS2l0QXV0
aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0ID0gdGVzdC0+d2FpdEZvckF1dGhlbnRpY2F0aW9u
UmVxdWVzdCgpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9p
c19yZXRyeShyZXF1ZXN0KSk7CisgICAgV2ViS2l0Q3JlZGVudGlhbCogY3JlZGVudGlhbCA9IHdl
YmtpdF9jcmVkZW50aWFsX25ldyhhdXRoVGVzdFVzZXJuYW1lLCAid3JvbmdwYXNzd29yZCIsIFdF
QktJVF9DUkVERU5USUFMX1BFUlNJU1RFTkNFX05PTkUpOworICAgIHdlYmtpdF9hdXRoZW50aWNh
dGlvbl9yZXF1ZXN0X2F1dGhlbnRpY2F0ZShyZXF1ZXN0LCBjcmVkZW50aWFsKTsKKyAgICB3ZWJr
aXRfY3JlZGVudGlhbF9mcmVlKGNyZWRlbnRpYWwpOworICAgIC8vIEV4cGVjdCBhIHNlY29uZCBh
dXRoZW50aWNhdGlvbiByZXF1ZXN0LgorICAgIHJlcXVlc3QgPSB0ZXN0LT53YWl0Rm9yQXV0aGVu
dGljYXRpb25SZXF1ZXN0KCk7CisgICAgZ19hc3NlcnQod2Via2l0X2F1dGhlbnRpY2F0aW9uX3Jl
cXVlc3RfaXNfcmV0cnkocmVxdWVzdCkpOworICAgIC8vIFRlc3Qgc2Vjb25kIGZhaWx1cmUuCisg
ICAgY3JlZGVudGlhbCA9IHdlYmtpdF9jcmVkZW50aWFsX25ldyhhdXRoVGVzdFVzZXJuYW1lLCAi
d3JvbmdwYXNzd29yZDIiLCBXRUJLSVRfQ1JFREVOVElBTF9QRVJTSVNURU5DRV9OT05FKTsKKyAg
ICB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9hdXRoZW50aWNhdGUocmVxdWVzdCwgY3Jl
ZGVudGlhbCk7CisgICAgd2Via2l0X2NyZWRlbnRpYWxfZnJlZShjcmVkZW50aWFsKTsKKyAgICAv
LyBFeHBlY3QgYXV0aGVudGljYXRpb24gZmFpbGVkIHBhZ2UuCisgICAgdGVzdC0+d2FpdFVudGls
TG9hZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRz
LnNpemUoKSwgPT0sIDMpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNb
MF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVz
dDo6TG9hZENvbW1pdHRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50
c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7CisgICAgZ19hc3NlcnRf
Y21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRfdGl0bGUodGVzdC0+bV93ZWJWaWV3KSwgPT0sIGF1
dGhFeHBlY3RlZEZhaWx1cmVUaXRsZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3QXV0
aGVudGljYXRpb25Ob0NyZWRlbnRpYWwoQXV0aGVudGljYXRpb25UZXN0KiB0ZXN0LCBnY29uc3Rw
b2ludGVyKQoreworICAgIC8vIFRlc3QgY29udGludWUgd2l0aG91dCBjcmVkZW50aWFscy4KKyAg
ICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9hdXRoLXRlc3QuaHRtbCIp
LmRhdGEoKSk7CisgICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0ID0gdGVz
dC0+d2FpdEZvckF1dGhlbnRpY2F0aW9uUmVxdWVzdCgpOworICAgIHdlYmtpdF9hdXRoZW50aWNh
dGlvbl9yZXF1ZXN0X2F1dGhlbnRpY2F0ZShyZXF1ZXN0LCAwKTsKKyAgICAvLyBTZXJ2ZXIgZG9l
c24ndCBhc2sgZm9yIG5ldyBjcmVkZW50aWFscy4KKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmlu
aXNoZWQoKTsKKworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHMuc2l6ZSgp
LCA9PSwgMyk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1swXSwgPT0s
IExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0
X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2Fk
Q29tbWl0dGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzJdLCA9
PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIo
d2Via2l0X3dlYl92aWV3X2dldF90aXRsZSh0ZXN0LT5tX3dlYlZpZXcpLCA9PSwgYXV0aEV4cGVj
dGVkRmFpbHVyZVRpdGxlKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdBdXRoZW50aWNh
dGlvblN0b3JhZ2UoQXV0aGVudGljYXRpb25UZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQorewor
ICAgIC8vIEVuYWJsZSBwcml2YXRlIGJyb3dzaW5nIGJlZm9yZSBhdXRoZW50aWNhdGlvbiByZXF1
ZXN0IHRvIHRlc3QgdGhhdCBjcmVkZW50aWFscyBjYW4ndCBiZSBzYXZlZC4KKyAgICB3ZWJraXRf
c2V0dGluZ3Nfc2V0X2VuYWJsZV9wcml2YXRlX2Jyb3dzaW5nKHdlYmtpdF93ZWJfdmlld19nZXRf
c2V0dGluZ3ModGVzdC0+bV93ZWJWaWV3KSwgVFJVRSk7CisgICAgdGVzdC0+bG9hZFVSSShrU2Vy
dmVyLT5nZXRVUklGb3JQYXRoKCIvYXV0aC10ZXN0Lmh0bWwiKS5kYXRhKCkpOworICAgIFdlYktp
dEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCA9IHRlc3QtPndhaXRGb3JBdXRoZW50aWNh
dGlvblJlcXVlc3QoKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVl
c3RfZ2V0X3Byb3Bvc2VkX2NyZWRlbnRpYWwocmVxdWVzdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJr
aXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jYW5fc2F2ZV9jcmVkZW50aWFscyhyZXF1ZXN0KSk7
CisKKyAgICAvLyBJZiBXZWJLaXQgaGFzIGJlZW4gY29tcGlsZWQgd2l0aCBsaWJzZWNyZXQsIGFu
ZCBwcml2YXRlIGJyb3dzaW5nIGlzIGRpc2FibGVkCisgICAgLy8gdGhlbiBjaGVjayB0aGF0IGNy
ZWRlbnRpYWxzIGNhbiBiZSBzYXZlZC4KKyNpZiBFTkFCTEUoQ1JFREVOVElBTF9TVE9SQUdFKQor
ICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX3ByaXZhdGVfYnJvd3Npbmcod2Via2l0X3dl
Yl92aWV3X2dldF9zZXR0aW5ncyh0ZXN0LT5tX3dlYlZpZXcpLCBGQUxTRSk7CisgICAgdGVzdC0+
bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvYXV0aC10ZXN0Lmh0bWwiKS5kYXRhKCkp
OworICAgIHJlcXVlc3QgPSB0ZXN0LT53YWl0Rm9yQXV0aGVudGljYXRpb25SZXF1ZXN0KCk7Cisg
ICAgZ19hc3NlcnQoIXdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9wcm9wb3NlZF9j
cmVkZW50aWFsKHJlcXVlc3QpKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfYXV0aGVudGljYXRpb25f
cmVxdWVzdF9jYW5fc2F2ZV9jcmVkZW50aWFscyhyZXF1ZXN0KSk7CisjZW5kaWYKK30KKworc3Rh
dGljIHZvaWQgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvblN1Y2Nlc3MoQXV0aGVudGljYXRpb25U
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIC8vIFRlc3QgY29ycmVjdCBhdXRoZW50
aWNhdGlvbi4KKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9hdXRo
LXRlc3QuaHRtbCIpLmRhdGEoKSk7CisgICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiBy
ZXF1ZXN0ID0gdGVzdC0+d2FpdEZvckF1dGhlbnRpY2F0aW9uUmVxdWVzdCgpOworICAgIFdlYktp
dENyZWRlbnRpYWwqIGNyZWRlbnRpYWwgPSB3ZWJraXRfY3JlZGVudGlhbF9uZXcoYXV0aFRlc3RV
c2VybmFtZSwgYXV0aFRlc3RQYXNzd29yZCwgV0VCS0lUX0NSRURFTlRJQUxfUEVSU0lTVEVOQ0Vf
Rk9SX1NFU1NJT04pOworICAgIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2F1dGhlbnRp
Y2F0ZShyZXF1ZXN0LCBjcmVkZW50aWFsKTsKKyAgICB3ZWJraXRfY3JlZGVudGlhbF9mcmVlKGNy
ZWRlbnRpYWwpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgZ19h
c3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50cy5zaXplKCksID09LCAzKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6
UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9h
ZEV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRDb21taXR0ZWQpOworICAgIGdf
YXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMl0sID09LCBMb2FkVHJhY2tpbmdUZXN0
OjpMb2FkRmluaXNoZWQpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0
X3RpdGxlKHRlc3QtPm1fd2ViVmlldyksID09LCBhdXRoRXhwZWN0ZWRTdWNjZXNzVGl0bGUpOwor
CisgICAgLy8gVGVzdCBsb2FkaW5nIHRoZSBzYW1lIChhdXRob3JpemVkKSBwYWdlIGFnYWluLgor
ICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2F1dGgtdGVzdC5odG1s
IikuZGF0YSgpKTsKKyAgICAvLyBUaGVyZSBpcyBubyBhdXRoZW50aWNhdGlvbiBjaGFsbGVuZ2Uu
CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydF9jbXBp
bnQodGVzdC0+bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0sIDMpOworICAgIGdfYXNzZXJ0X2NtcGlu
dCh0ZXN0LT5tX2xvYWRFdmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25h
bExvYWRTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzFd
LCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZENvbW1pdHRlZCk7CisgICAgZ19hc3NlcnRfY21w
aW50KHRlc3QtPm1fbG9hZEV2ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5p
c2hlZCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRfdGl0bGUodGVz
dC0+bV93ZWJWaWV3KSwgPT0sIGF1dGhFeHBlY3RlZFN1Y2Nlc3NUaXRsZSk7Cit9CisKK3N0YXRp
YyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwg
Y29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSosIFNvdXBDbGllbnRDb250ZXh0Kiwgdm9pZCop
Cit7CisgICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKKyAgICAg
ICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExF
TUVOVEVEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghc3RyY21wKHBhdGgs
ICIvYXV0aC10ZXN0Lmh0bWwiKSkgeworICAgICAgICBjb25zdCBjaGFyKiBhdXRob3JpemF0aW9u
ID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X29uZShtZXNzYWdlLT5yZXF1ZXN0X2hlYWRlcnMs
ICJBdXRob3JpemF0aW9uIik7CisgICAgICAgIC8vIFJlcXVpcmUgYXV0aGVudGljYXRpb24uCisg
ICAgICAgIGlmICghZ19zdHJjbXAwKGF1dGhvcml6YXRpb24sIGF1dGhFeHBlY3RlZEF1dGhvcml6
YXRpb24pKSB7CisgICAgICAgICAgICAvLyBTdWNjZXNzZnVsIGF1dGhlbnRpY2F0aW9uLgorICAg
ICAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0sp
OworICAgICAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNl
X2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgYXV0aFN1Y2Nlc3NIVE1MU3RyaW5nLCBzdHJsZW4o
YXV0aFN1Y2Nlc3NIVE1MU3RyaW5nKSk7CisgICAgICAgICAgICBBdXRoZW50aWNhdGlvblRlc3Q6
OmF1dGhlbnRpY2F0aW9uUmV0cmllcyA9IDA7CisgICAgICAgIH0gZWxzZSBpZiAoKytBdXRoZW50
aWNhdGlvblRlc3Q6OmF1dGhlbnRpY2F0aW9uUmV0cmllcyA8IDMpIHsKKyAgICAgICAgICAgIC8v
IE5vIG9yIGludmFsaWQgYXV0aG9yaXphdGlvbiBoZWFkZXIgcHJvdmlkZWQgYnkgdGhlIGNsaWVu
dCwgcmVxdWVzdCBhdXRoZW50aWNhdGlvbiB0d2ljZSB0aGVuIGZhaWwuCisgICAgICAgICAgICBz
b3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19VTkFVVEhPUklaRUQp
OworICAgICAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1lc3NhZ2UtPnJlc3Bv
bnNlX2hlYWRlcnMsICJXV1ctQXV0aGVudGljYXRlIiwgIkJhc2ljIHJlYWxtPVwibXkgcmVhbG1c
IiIpOworICAgICAgICAgICAgLy8gSW5jbHVkZSBhIGZhaWx1cmUgbWVzc2FnZSBpbiBjYXNlIHRo
ZSB1c2VyIGF0dGVtcHRzIHRvIHByb2NlZWQgd2l0aG91dCBhdXRoZW50aWNhdGlvbi4KKyAgICAg
ICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBT
T1VQX01FTU9SWV9TVEFUSUMsIGF1dGhGYWlsdXJlSFRNTFN0cmluZywgc3RybGVuKGF1dGhGYWls
dXJlSFRNTFN0cmluZykpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gQXV0aGVu
dGljYXRpb24gbm90IHN1Y2Nlc3NmdWwsIGRpc3BsYXkgYSAiNDAxIEF1dGhvcml6YXRpb24gUmVx
dWlyZWQiIHBhZ2UuCisgICAgICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdl
LCBTT1VQX1NUQVRVU19PSyk7CisgICAgICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQo
bWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBhdXRoRmFpbHVyZUhU
TUxTdHJpbmcsIHN0cmxlbihhdXRoRmFpbHVyZUhUTUxTdHJpbmcpKTsKKyAgICAgICAgfQorICAg
IH0gZWxzZQorICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NU
QVRVU19OT1RfRk9VTkQpOworCisgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2Fn
ZS0+cmVzcG9uc2VfYm9keSk7Cit9CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICBrU2VydmVy
ID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIoKTsKKyAgICBrU2VydmVyLT5ydW4oc2VydmVyQ2FsbGJh
Y2spOworCisgICAgQXV0aGVudGljYXRpb25UZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiYXV0
aGVudGljYXRpb24tcmVxdWVzdCIsIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25SZXF1ZXN0KTsK
KyAgICBBdXRoZW50aWNhdGlvblRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJhdXRoZW50aWNh
dGlvbi1jYW5jZWwiLCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uQ2FuY2VsKTsKKyAgICBBdXRo
ZW50aWNhdGlvblRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJhdXRoZW50aWNhdGlvbi1sb2Fk
LWNhbmNlbGxlZCIsIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25Mb2FkQ2FuY2VsbGVkKTsKKyAg
ICBBdXRoZW50aWNhdGlvblRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJhdXRoZW50aWNhdGlv
bi1mYWlsdXJlIiwgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvbkZhaWx1cmUpOworICAgIEF1dGhl
bnRpY2F0aW9uVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImF1dGhlbnRpY2F0aW9uLW5vLWNy
ZWRlbnRpYWwiLCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uTm9DcmVkZW50aWFsKTsKKyAgICBB
dXRoZW50aWNhdGlvblRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJhdXRoZW50aWNhdGlvbi1z
dG9yYWdlIiwgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvblN0b3JhZ2UpOworICAgIC8vIFRlc3Rp
bmcgYXV0aGVudGljYXRpb24gc3VjY2VzcyBtdXN0IGJlIGRvbmUgbGFzdCBiZWNhdXNlIGxpYnNv
dXAgd2lsbCBuZXZlciBmaXJlCisgICAgLy8gdGhlIGF1dGhlbnRpY2F0ZSBzaWduYWwgYWdhaW4g
b25jZSBhdXRoZW50aWNhdGlvbiBpcyBzdWNjZXNzZnVsLgorICAgIEF1dGhlbnRpY2F0aW9uVGVz
dDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImF1dGhlbnRpY2F0aW9uLXN1Y2Nlc3MiLCB0ZXN0V2Vi
Vmlld0F1dGhlbnRpY2F0aW9uU3VjY2Vzcyk7Cit9CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworICAg
IGRlbGV0ZSBrU2VydmVyOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXQyR3RrL1Rlc3RCYWNrRm9yd2FyZExpc3QuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RCYWNrRm9yd2FyZExpc3QuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI0
NzkzNjZhNDIyODQ3M2Y1OWVlNDM3MDE3NWQ1YTFjNDZjNDA3MWUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdEJhY2tGb3J3YXJkTGlz
dC5jcHAKQEAgLTAsMCArMSwyODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlh
IFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5o
IgorI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1
ZGUgPGxpYnNvdXAvc291cC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHdlYmtp
dDIvd2Via2l0Mi5oPgorCisvLyBCYWNrIGZvcndhcmQgbGlzdCBsaW1pdCBpcyAxMDAgYnkgZGVm
YXVsdC4KK3N0YXRpYyBjb25zdCBpbnQga0JhY2tGb3J3YXJkTGlzdExpbWl0ID0gMTAwOworCitz
dGF0aWMgV2ViS2l0VGVzdFNlcnZlcioga1NlcnZlcjsKKworc3RhdGljIHZvaWQgc2VydmVyQ2Fs
bGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbXNnLCBjb25zdCBjaGFyKiBw
YXRoLCBHSGFzaFRhYmxlKiBxdWVyeSwgU291cENsaWVudENvbnRleHQqIGNvbnRleHQsIGdwb2lu
dGVyIGRhdGEpCit7CisgICAgaWYgKG1zZy0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgewor
ICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX05PVF9JTVBM
RU1FTlRFRCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZ19zdHJfaGFzX3N1
ZmZpeChwYXRoLCAiZmF2aWNvbi5pY28iKSkgeworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0
YXR1cyhtc2csIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX09LKTsKKwor
ICAgIGNoYXIqIGJvZHkgPSBnX3N0cmR1cF9wcmludGYoIjxodG1sPjx0aXRsZT4lczwvdGl0bGU+
PGJvZHk+JXM8L2JvZHk+PC9odG1sPiIsIHBhdGggKyAxLCBwYXRoICsgMSk7CisgICAgc291cF9t
ZXNzYWdlX2JvZHlfYXBwZW5kKG1zZy0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwg
Ym9keSwgc3RybGVuKGJvZHkpKTsKKworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1z
Zy0+cmVzcG9uc2VfYm9keSk7Cit9CisKK2NsYXNzIEJhY2tGb3J3YXJkTGlzdFRlc3Q6IHB1Ymxp
YyBXZWJWaWV3VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShCYWNr
Rm9yd2FyZExpc3RUZXN0KTsKKworICAgIGVudW0geworICAgICAgICBCYWNrd2FyZCwKKyAgICAg
ICAgRm9yd2FyZAorICAgIH07CisKKyAgICBlbnVtIHsKKyAgICAgICAgQ3VycmVudEl0ZW0gID0g
MSA8PCAwLAorICAgICAgICBBZGRlZEl0ZW0gICAgPSAxIDw8IDEsCisgICAgICAgIFJlbW92ZWRJ
dGVtcyA9IDEgPDwgMgorICAgIH07CisKKyAgICBzdGF0aWMgdm9pZCBjaGVja0l0ZW0oV2ViS2l0
QmFja0ZvcndhcmRMaXN0SXRlbSogaXRlbSwgY29uc3QgY2hhciogdGl0bGUsIGNvbnN0IGNoYXIq
IHVyaSwgY29uc3QgY2hhciogb3JpZ2luYWxVUkkpCisgICAgeworICAgICAgICBnX2Fzc2VydChp
dGVtKTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9p
dGVtX2dldF91cmkoaXRlbSksID09LCB1cmkpOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Vi
a2l0X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fZ2V0X3RpdGxlKGl0ZW0pLCA9PSAsIHRpdGxlKTsK
KyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dl
dF9vcmlnaW5hbF91cmkoaXRlbSksID09LCBvcmlnaW5hbFVSSSk7CisgICAgfQorCisgICAgc3Rh
dGljIHZvaWQgY2hlY2tJdGVtSW5kZXgoV2ViS2l0QmFja0ZvcndhcmRMaXN0KiBsaXN0KQorICAg
IHsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9udGhfaXRl
bShsaXN0LCAtMSkgPT0gd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2l0ZW0obGlz
dCkpOworICAgICAgICBnX2Fzc2VydCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X250aF9p
dGVtKGxpc3QsIDApID09IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVt
KGxpc3QpKTsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9u
dGhfaXRlbShsaXN0LCAxKSA9PSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRf
aXRlbShsaXN0KSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgY2hlY2tMaXN0KFdlYktpdEJh
Y2tGb3J3YXJkTGlzdCogbGlzdCwgdW5zaWduZWQgdHlwZSwgV2ViS2l0QmFja0ZvcndhcmRMaXN0
SXRlbSoqIGl0ZW1zLCB1bnNpZ25lZCBuSXRlbXMpCisgICAgeworICAgICAgICBHTGlzdCogbGlz
dEl0ZW1zID0gdHlwZSA9PSBCYWNrRm9yd2FyZExpc3RUZXN0OjpCYWNrd2FyZCA/IHdlYmtpdF9i
YWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19saXN0KGxpc3QpIDoKKyAgICAgICAgICAgIHdlYmtp
dF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0KGxpc3QpOworICAgICAgICBnX2Fz
c2VydChsaXN0SXRlbXMpOworCisgICAgICAgIHVuc2lnbmVkIGkgPSAwOworICAgICAgICBmb3Ig
KEdMaXN0KiBsaXN0SXRlbSA9IGxpc3RJdGVtczsgbGlzdEl0ZW07IGxpc3RJdGVtID0gZ19saXN0
X25leHQobGlzdEl0ZW0pLCBpKyspIHsKKyAgICAgICAgICAgIGdfYXNzZXJ0X2NtcHVpbnQoaSwg
PCwgbkl0ZW1zKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KGxpc3RJdGVtLT5kYXRhID09IGl0ZW1z
W2ldKTsKKyAgICAgICAgfQorICAgICAgICBnX2xpc3RfZnJlZShsaXN0SXRlbXMpOworICAgIH0K
KworICAgIHN0YXRpYyB2b2lkIGJhY2tGb3J3YXJkTGlzdENoYW5nZWQoV2ViS2l0QmFja0Zvcndh
cmRMaXN0KiBsaXN0LCBXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKiBhZGRlZEl0ZW0sIEdMaXN0
KiByZW1vdmVkSXRlbXMsIEJhY2tGb3J3YXJkTGlzdFRlc3QqIHRlc3QpCisgICAgeworICAgICAg
ICB0ZXN0LT5tX2hhc0NoYW5nZWQgPSB0cnVlOworCisgICAgICAgIGlmICh0ZXN0LT5tX2NoYW5n
ZWRGbGFncyAmIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OkFkZGVkSXRlbSkgeworICAgICAgICAgICAg
Z19hc3NlcnQoV0VCS0lUX0lTX0JBQ0tfRk9SV0FSRF9MSVNUX0lURU0oYWRkZWRJdGVtKSk7Cisg
ICAgICAgICAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdf
T0JKRUNUKGFkZGVkSXRlbSkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGdfYXNzZXJ0
KCFhZGRlZEl0ZW0pOworCisgICAgICAgIGlmICh0ZXN0LT5tX2NoYW5nZWRGbGFncyAmIEJhY2tG
b3J3YXJkTGlzdFRlc3Q6OlJlbW92ZWRJdGVtcykgeworICAgICAgICAgICAgZ19hc3NlcnQocmVt
b3ZlZEl0ZW1zKTsKKyAgICAgICAgICAgIGZvciAoR0xpc3QqIGl0ZXIgPSByZW1vdmVkSXRlbXM7
IGl0ZXI7IGl0ZXIgPSBpdGVyLT5uZXh0KSB7CisgICAgICAgICAgICAgICAgZ19hc3NlcnQoV0VC
S0lUX0lTX0JBQ0tfRk9SV0FSRF9MSVNUX0lURU0oaXRlci0+ZGF0YSkpOworICAgICAgICAgICAg
ICAgIGlmICh0ZXN0LT5tX2V4cGVjdGVkUmVtb3ZlZEl0ZW1zKQorICAgICAgICAgICAgICAgICAg
ICBnX2Fzc2VydChnX2xpc3RfZmluZCh0ZXN0LT5tX2V4cGVjdGVkUmVtb3ZlZEl0ZW1zLCBpdGVy
LT5kYXRhKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBn
X2Fzc2VydCghcmVtb3ZlZEl0ZW1zKTsKKyAgICB9CisKKyAgICBCYWNrRm9yd2FyZExpc3RUZXN0
KCkKKyAgICAgICAgOiBtX2xpc3Qod2Via2l0X3dlYl92aWV3X2dldF9iYWNrX2ZvcndhcmRfbGlz
dChtX3dlYlZpZXcpKQorICAgICAgICAsIG1fY2hhbmdlZEZsYWdzKDApCisgICAgICAgICwgbV9o
YXNDaGFuZ2VkKGZhbHNlKQorICAgICAgICAsIG1fZXhwZWN0ZWRSZW1vdmVkSXRlbXMoMCkKKyAg
ICB7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9saXN0LCAiY2hhbmdlZCIsIEdfQ0FMTEJB
Q0soYmFja0ZvcndhcmRMaXN0Q2hhbmdlZCksIHRoaXMpOworICAgICAgICBhc3NlcnRPYmplY3RJ
c0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKG1fbGlzdCkpOworICAgIH0KKworICAg
IH5CYWNrRm9yd2FyZExpc3RUZXN0KCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJz
X2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX2xpc3QsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAs
IDAsIHRoaXMpOworICAgIH0KKworICAgIHZvaWQgd2FpdFVudGlsTG9hZEZpbmlzaGVkKCkKKyAg
ICB7CisgICAgICAgIG1faGFzQ2hhbmdlZCA9IGZhbHNlOworICAgICAgICBXZWJWaWV3VGVzdDo6
d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgICAgIGdfYXNzZXJ0KG1faGFzQ2hhbmdlZCk7
CisgICAgfQorCisgICAgdm9pZCB3YWl0VW50aWxMb2FkRmluaXNoZWRBbmRDaGVja1JlbW92ZWRJ
dGVtcyhHTGlzdCogcmVtb3ZlZEl0ZW1zKQorICAgIHsKKyAgICAgICAgbV9leHBlY3RlZFJlbW92
ZWRJdGVtcyA9IHJlbW92ZWRJdGVtczsKKyAgICAgICAgd2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7
CisgICAgICAgIG1fZXhwZWN0ZWRSZW1vdmVkSXRlbXMgPSAwOworICAgIH0KKworICAgIFdlYktp
dEJhY2tGb3J3YXJkTGlzdCogbV9saXN0OworICAgIHVuc2lnbmVkIGxvbmcgbV9jaGFuZ2VkRmxh
Z3M7CisgICAgYm9vbCBtX2hhc0NoYW5nZWQ7CisgICAgR0xpc3QqIG1fZXhwZWN0ZWRSZW1vdmVk
SXRlbXM7Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0QmFja0ZvcndhcmRMaXN0TmF2aWdhdGlvbihC
YWNrRm9yd2FyZExpc3RUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIFdlYktpdEJh
Y2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW1zWzFdOworCisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJf
dmlld19jYW5fZ29fYmFjayh0ZXN0LT5tX3dlYlZpZXcpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0
X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHRlc3QtPm1fd2ViVmlldykpOworCisgICAgZ19hc3Nl
cnRfY21wdWludCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2xlbmd0aCh0ZXN0LT5tX2xp
c3QpLCA9PSwgMCk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRf
Y3VycmVudF9pdGVtKHRlc3QtPm1fbGlzdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19m
b3J3YXJkX2xpc3RfZ2V0X2JhY2tfaXRlbSh0ZXN0LT5tX2xpc3QpKTsKKyAgICBnX2Fzc2VydCgh
d2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2l0ZW0odGVzdC0+bV9saXN0KSk7
CisgICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tJdGVtSW5kZXgodGVzdC0+bV9saXN0KTsK
KyAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3QodGVz
dC0+bV9saXN0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRf
Zm9yd2FyZF9saXN0KHRlc3QtPm1fbGlzdCkpOworCisgICAgQ1N0cmluZyB1cmlQYWdlMSA9IGtT
ZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9QYWdlMSIpOworICAgIHRlc3QtPm1fY2hhbmdlZEZsYWdz
ID0gQmFja0ZvcndhcmRMaXN0VGVzdDo6Q3VycmVudEl0ZW0gfCBCYWNrRm9yd2FyZExpc3RUZXN0
OjpBZGRlZEl0ZW07CisgICAgdGVzdC0+bG9hZFVSSSh1cmlQYWdlMS5kYXRhKCkpOworICAgIHRl
c3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJf
dmlld19jYW5fZ29fYmFjayh0ZXN0LT5tX3dlYlZpZXcpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0
X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHRlc3QtPm1fd2ViVmlldykpOworCisgICAgZ19hc3Nl
cnRfY21wdWludCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2xlbmd0aCh0ZXN0LT5tX2xp
c3QpLCA9PSwgMSk7CisgICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbSogaXRlbVBhZ2UxID0g
d2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0odGVzdC0+bV9saXN0KTsK
KyAgICBCYWNrRm9yd2FyZExpc3RUZXN0OjpjaGVja0l0ZW0oaXRlbVBhZ2UxLCAiUGFnZTEiLCB1
cmlQYWdlMS5kYXRhKCksIHVyaVBhZ2UxLmRhdGEoKSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9i
YWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19pdGVtKHRlc3QtPm1fbGlzdCkpOworICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRlbSh0ZXN0LT5tX2xp
c3QpKTsKKyAgICBCYWNrRm9yd2FyZExpc3RUZXN0OjpjaGVja0l0ZW1JbmRleCh0ZXN0LT5tX2xp
c3QpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGlz
dCh0ZXN0LT5tX2xpc3QpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0
X2dldF9mb3J3YXJkX2xpc3QodGVzdC0+bV9saXN0KSk7CisKKyAgICBDU3RyaW5nIHVyaVBhZ2Uy
ID0ga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL1BhZ2UyIik7CisgICAgdGVzdC0+bV9jaGFuZ2Vk
RmxhZ3MgPSBCYWNrRm9yd2FyZExpc3RUZXN0OjpDdXJyZW50SXRlbSB8IEJhY2tGb3J3YXJkTGlz
dFRlc3Q6OkFkZGVkSXRlbTsKKyAgICB0ZXN0LT5sb2FkVVJJKHVyaVBhZ2UyLmRhdGEoKSk7Cisg
ICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCh3ZWJraXRf
d2ViX3ZpZXdfY2FuX2dvX2JhY2sodGVzdC0+bV93ZWJWaWV3KSk7CisgICAgZ19hc3NlcnQoIXdl
YmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh0ZXN0LT5tX3dlYlZpZXcpKTsKKworICAgIGdf
YXNzZXJ0X2NtcHVpbnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9sZW5ndGgodGVzdC0+
bV9saXN0KSwgPT0sIDIpOworICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW1QYWdl
MiA9IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKHRlc3QtPm1fbGlz
dCk7CisgICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tJdGVtKGl0ZW1QYWdlMiwgIlBhZ2Uy
IiwgdXJpUGFnZTIuZGF0YSgpLCB1cmlQYWdlMi5kYXRhKCkpOworICAgIGdfYXNzZXJ0KHdlYmtp
dF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19pdGVtKHRlc3QtPm1fbGlzdCkgPT0gaXRlbVBh
Z2UxKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJk
X2l0ZW0odGVzdC0+bV9saXN0KSk7CisgICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tJdGVt
SW5kZXgodGVzdC0+bV9saXN0KTsKKyAgICBpdGVtc1swXSA9IGl0ZW1QYWdlMTsKKyAgICBCYWNr
Rm9yd2FyZExpc3RUZXN0OjpjaGVja0xpc3QodGVzdC0+bV9saXN0LCBCYWNrRm9yd2FyZExpc3RU
ZXN0OjpCYWNrd2FyZCwgaXRlbXMsIDEpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3
YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlzdCh0ZXN0LT5tX2xpc3QpKTsKKworICAgIHRlc3QtPm1f
Y2hhbmdlZEZsYWdzID0gQmFja0ZvcndhcmRMaXN0VGVzdDo6Q3VycmVudEl0ZW07CisgICAgdGVz
dC0+Z29CYWNrKCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBn
X2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrKHRlc3QtPm1fd2ViVmlldykpOwor
ICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh0ZXN0LT5tX3dlYlZp
ZXcpKTsKKworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dl
dF9sZW5ndGgodGVzdC0+bV9saXN0KSwgPT0sIDIpOworICAgIGdfYXNzZXJ0KGl0ZW1QYWdlMSA9
PSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh0ZXN0LT5tX2xpc3Qp
KTsKKyAgICBCYWNrRm9yd2FyZExpc3RUZXN0OjpjaGVja0l0ZW0od2Via2l0X2JhY2tfZm9yd2Fy
ZF9saXN0X2dldF9jdXJyZW50X2l0ZW0odGVzdC0+bV9saXN0KSwgIlBhZ2UxIiwgdXJpUGFnZTEu
ZGF0YSgpLCB1cmlQYWdlMS5kYXRhKCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYmFja19mb3J3
YXJkX2xpc3RfZ2V0X2JhY2tfaXRlbSh0ZXN0LT5tX2xpc3QpKTsKKyAgICBnX2Fzc2VydCh3ZWJr
aXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRlbSh0ZXN0LT5tX2xpc3QpID09IGl0
ZW1QYWdlMik7CisgICAgQmFja0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tJdGVtSW5kZXgodGVzdC0+
bV9saXN0KTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNr
X2xpc3QodGVzdC0+bV9saXN0KSk7CisgICAgaXRlbXNbMF0gPSBpdGVtUGFnZTI7CisgICAgQmFj
a0ZvcndhcmRMaXN0VGVzdDo6Y2hlY2tMaXN0KHRlc3QtPm1fbGlzdCwgQmFja0ZvcndhcmRMaXN0
VGVzdDo6Rm9yd2FyZCwgaXRlbXMsIDEpOworCisgICAgdGVzdC0+bV9jaGFuZ2VkRmxhZ3MgPSBC
YWNrRm9yd2FyZExpc3RUZXN0OjpDdXJyZW50SXRlbTsKKyAgICB0ZXN0LT5nb0ZvcndhcmQoKTsK
KyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHdlYmtp
dF93ZWJfdmlld19jYW5fZ29fYmFjayh0ZXN0LT5tX3dlYlZpZXcpKTsKKyAgICBnX2Fzc2VydCgh
d2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHRlc3QtPm1fd2ViVmlldykpOworCisgICAg
Z19hc3NlcnRfY21wdWludCh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2xlbmd0aCh0ZXN0
LT5tX2xpc3QpLCA9PSwgMik7CisgICAgZ19hc3NlcnQoaXRlbVBhZ2UyID09IHdlYmtpdF9iYWNr
X2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKHRlc3QtPm1fbGlzdCkpOworICAgIEJhY2tG
b3J3YXJkTGlzdFRlc3Q6OmNoZWNrSXRlbSh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1
cnJlbnRfaXRlbSh0ZXN0LT5tX2xpc3QpLCAiUGFnZTIiLCB1cmlQYWdlMi5kYXRhKCksIHVyaVBh
Z2UyLmRhdGEoKSk7CisgICAgZ19hc3NlcnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9i
YWNrX2l0ZW0odGVzdC0+bV9saXN0KSA9PSBpdGVtUGFnZTEpOworICAgIGdfYXNzZXJ0KCF3ZWJr
aXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRlbSh0ZXN0LT5tX2xpc3QpKTsKKyAg
ICBCYWNrRm9yd2FyZExpc3RUZXN0OjpjaGVja0l0ZW1JbmRleCh0ZXN0LT5tX2xpc3QpOworICAg
IGl0ZW1zWzBdID0gaXRlbVBhZ2UxOworICAgIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OmNoZWNrTGlz
dCh0ZXN0LT5tX2xpc3QsIEJhY2tGb3J3YXJkTGlzdFRlc3Q6OkJhY2t3YXJkLCBpdGVtcywgMSk7
CisgICAgZ19hc3NlcnQoIXdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0
KHRlc3QtPm1fbGlzdCkpOworCisgICAgdGVzdC0+bV9jaGFuZ2VkRmxhZ3MgPSBCYWNrRm9yd2Fy
ZExpc3RUZXN0OjpDdXJyZW50SXRlbTsKKyAgICB0ZXN0LT5nb1RvQmFja0ZvcndhcmRMaXN0SXRl
bShpdGVtUGFnZTEpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAg
Z19hc3NlcnQoaXRlbVBhZ2UxID09IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVu
dF9pdGVtKHRlc3QtPm1fbGlzdCkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0QmFja0ZvcndhcmRM
aXN0TGltaXRBbmRDYWNoZShCYWNrRm9yd2FyZExpc3RUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVy
KQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwga0JhY2tGb3J3YXJkTGlzdExpbWl0OyBpKysp
IHsKKyAgICAgICAgR093blB0cjxjaGFyPiBwYXRoKGdfc3RyZHVwX3ByaW50ZigiL1BhZ2UlZCIs
IGkpKTsKKyAgICAgICAgdGVzdC0+bV9jaGFuZ2VkRmxhZ3MgPSBCYWNrRm9yd2FyZExpc3RUZXN0
OjpDdXJyZW50SXRlbSB8IEJhY2tGb3J3YXJkTGlzdFRlc3Q6OkFkZGVkSXRlbTsKKyAgICAgICAg
dGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKHBhdGguZ2V0KCkpLmRhdGEoKSk7
CisgICAgICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIH0KKworICAgIGdf
YXNzZXJ0X2NtcHVpbnQod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9sZW5ndGgodGVzdC0+
bV9saXN0KSwgPT0sIGtCYWNrRm9yd2FyZExpc3RMaW1pdCk7CisgICAgV2ViS2l0QmFja0Zvcndh
cmRMaXN0SXRlbSogaXRlbVBhZ2VGaXJzdCA9IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRf
bnRoX2l0ZW0odGVzdC0+bV9saXN0LCAtKGtCYWNrRm9yd2FyZExpc3RMaW1pdCAtIDEpKTsKKyAg
ICBHT3duUHRyPEdMaXN0PiByZW1vdmVkSXRlbXMoZ19saXN0X3ByZXBlbmQoMCwgaXRlbVBhZ2VG
aXJzdCkpOworCisgICAgR093blB0cjxjaGFyPiBwYXRoKGdfc3RyZHVwX3ByaW50ZigiL1BhZ2Ul
ZCIsIGtCYWNrRm9yd2FyZExpc3RMaW1pdCkpOworICAgIHRlc3QtPm1fY2hhbmdlZEZsYWdzID0g
QmFja0ZvcndhcmRMaXN0VGVzdDo6Q3VycmVudEl0ZW0gfCBCYWNrRm9yd2FyZExpc3RUZXN0OjpB
ZGRlZEl0ZW0gfCBCYWNrRm9yd2FyZExpc3RUZXN0OjpSZW1vdmVkSXRlbXM7CisgICAgdGVzdC0+
bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKHBhdGguZ2V0KCkpLmRhdGEoKSk7CisgICAg
dGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkQW5kQ2hlY2tSZW1vdmVkSXRlbXMocmVtb3ZlZEl0
ZW1zLmdldCgpKTsKKworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2JhY2tfZm9yd2FyZF9s
aXN0X2dldF9sZW5ndGgodGVzdC0+bV9saXN0KSwgPT0sIGtCYWNrRm9yd2FyZExpc3RMaW1pdCk7
Cit9CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICBrU2VydmVyID0gbmV3IFdlYktpdFRlc3RT
ZXJ2ZXIoKTsKKyAgICBrU2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2spOworCisgICAgQmFja0Zv
cndhcmRMaXN0VGVzdDo6YWRkKCJCYWNrRm9yd2FyZExpc3QiLCAibmF2aWdhdGlvbiIsIHRlc3RC
YWNrRm9yd2FyZExpc3ROYXZpZ2F0aW9uKTsKKyAgICBCYWNrRm9yd2FyZExpc3RUZXN0OjphZGQo
IkJhY2tGb3J3YXJkTGlzdCIsICJsaXN0LWxpbWl0LWFuZC1jYWNoZSIsIHRlc3RCYWNrRm9yd2Fy
ZExpc3RMaW1pdEFuZENhY2hlKTsKK30KKwordm9pZCBhZnRlckFsbCgpCit7CisgICAgZGVsZXRl
IGtTZXJ2ZXI7Cit9CisKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Mkd0ay9UZXN0Q29udGV4dE1lbnUuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyR3RrL1Rlc3RDb250ZXh0TWVudS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTIzMjliOWQ4MTk5N2U0
YWRmMGE1YTAxZTg3NTA1ZTQzYzA2NGE2NAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0Q29udGV4dE1lbnUuY3BwCkBAIC0wLDAgKzEs
ODY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKKyNpbmNsdWRlIDx3dGYvZ29iamVj
dC9HUmVmUHRyLmg+CisKK2NsYXNzIENvbnRleHRNZW51VGVzdDogcHVibGljIFdlYlZpZXdUZXN0
IHsKK3B1YmxpYzoKKyAgICBlbnVtIENvbnRleHRNZW51SXRlbVN0YXRlRmxhZ3MgeworICAgICAg
ICBWaXNpYmxlID0gMSA8PCAwLAorICAgICAgICBFbmFibGVkID0gMSA8PCAxLAorICAgICAgICBD
aGVja2VkID0gMSA8PCAyCisgICAgfTsKKworICAgIHZvaWQgY2hlY2tDb250ZXh0TWVudUV2ZW50
KEdka0V2ZW50KiBldmVudCkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KGV2ZW50KTsKKyAgICAg
ICAgZ19hc3NlcnRfY21waW50KGV2ZW50LT50eXBlLCA9PSwgR0RLX0JVVFRPTl9QUkVTUyk7Cisg
ICAgICAgIGdfYXNzZXJ0X2NtcGludChldmVudC0+YnV0dG9uLmJ1dHRvbiwgPT0sIDMpOworICAg
ICAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnQtPmJ1dHRvbi54LCA9PSwgbV9tZW51UG9zaXRpb25Y
KTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGV2ZW50LT5idXR0b24ueSwgPT0sIG1fbWVudVBv
c2l0aW9uWSk7CisgICAgfQorCisgICAgc3RhdGljIGdib29sZWFuIGNvbnRleHRNZW51Q2FsbGJh
Y2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0Q29udGV4dE1lbnUqIGNvbnRleHRNZW51
LCBHZGtFdmVudCogZXZlbnQsIFdlYktpdEhpdFRlc3RSZXN1bHQqIGhpdFRlc3RSZXN1bHQsIENv
bnRleHRNZW51VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19D
T05URVhUX01FTlUoY29udGV4dE1lbnUpKTsKKyAgICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNE
ZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChjb250ZXh0TWVudSkpOworICAgICAgICB0
ZXN0LT5jaGVja0NvbnRleHRNZW51RXZlbnQoZXZlbnQpOworICAgICAgICBnX2Fzc2VydChXRUJL
SVRfSVNfSElUX1RFU1RfUkVTVUxUKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgdGVzdC0+YXNz
ZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChoaXRUZXN0UmVzdWx0
KSk7CisKKyAgICAgICAgcmV0dXJuIHRlc3QtPmNvbnRleHRNZW51KGNvbnRleHRNZW51LCBldmVu
dCwgaGl0VGVzdFJlc3VsdCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgY29udGV4dE1lbnVE
aXNtaXNzZWRDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiwgQ29udGV4dE1lbnVUZXN0KiB0ZXN0KQor
ICAgIHsKKyAgICAgICAgdGVzdC0+Y29udGV4dE1lbnVEaXNtaXNzZWQoKTsKKyAgICB9CisKKyAg
ICBDb250ZXh0TWVudVRlc3QoKQorICAgICAgICA6IG1fbWVudVBvc2l0aW9uWCgwKQorICAgICAg
ICAsIG1fbWVudVBvc2l0aW9uWSgwKQorICAgIHsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdCht
X3dlYlZpZXcsICJjb250ZXh0LW1lbnUiLCBHX0NBTExCQUNLKGNvbnRleHRNZW51Q2FsbGJhY2sp
LCB0aGlzKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJjb250ZXh0LW1l
bnUtZGlzbWlzc2VkIiwgR19DQUxMQkFDSyhjb250ZXh0TWVudURpc21pc3NlZENhbGxiYWNrKSwg
dGhpcyk7CisgICAgfQorCisgICAgfkNvbnRleHRNZW51VGVzdCgpCisgICAgeworICAgICAgICBn
X3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV93ZWJWaWV3LCBHX1NJR05BTF9N
QVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wg
Y29udGV4dE1lbnUoV2ViS2l0Q29udGV4dE1lbnUqLCBHZGtFdmVudCosIFdlYktpdEhpdFRlc3RS
ZXN1bHQqKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgY29udGV4dE1lbnVEaXNtaXNzZWQoKQor
ICAgIHsKKyAgICAgICAgcXVpdE1haW5Mb29wKCk7CisgICAgfQorCisgICAgR3RrTWVudSogZ2V0
UG9wdXBNZW51KCkKKyAgICB7CisgICAgICAgIEdPd25QdHI8R0xpc3Q+IHRvcGxldmVscyhndGtf
d2luZG93X2xpc3RfdG9wbGV2ZWxzKCkpOworICAgICAgICBmb3IgKEdMaXN0KiBpdGVyID0gdG9w
bGV2ZWxzLmdldCgpOyBpdGVyOyBpdGVyID0gZ19saXN0X25leHQoaXRlcikpIHsKKyAgICAgICAg
ICAgIGlmICghR1RLX0lTX1dJTkRPVyhpdGVyLT5kYXRhKSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICAgICAgR3RrV2lkZ2V0KiBjaGlsZCA9IGd0a19iaW5fZ2V0X2NoaWxk
KEdUS19CSU4oaXRlci0+ZGF0YSkpOworICAgICAgICAgICAgaWYgKCFHVEtfSVNfTUVOVShjaGls
ZCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlmIChndGtfbWVu
dV9nZXRfYXR0YWNoX3dpZGdldChHVEtfTUVOVShjaGlsZCkpID09IEdUS19XSURHRVQobV93ZWJW
aWV3KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR1RLX01FTlUoY2hpbGQpOworICAgICAgICB9
CisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KKworICAgIGJvb2wgc2hvdWxkU2hvd0lucHV0TWV0aG9kc01lbnUoKQorICAgIHsKKyAgICAg
ICAgR3RrU2V0dGluZ3MqIHNldHRpbmdzID0gZ3RrX3dpZGdldF9nZXRfc2V0dGluZ3MoR1RLX1dJ
REdFVChtX3dlYlZpZXcpKTsKKyAgICAgICAgaWYgKCFzZXR0aW5ncykKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgICAgIGdib29sZWFuIHNob3dJbnB1dE1ldGhvZE1lbnU7CisgICAg
ICAgIGdfb2JqZWN0X2dldChzZXR0aW5ncywgImd0ay1zaG93LWlucHV0LW1ldGhvZC1tZW51Iiwg
JnNob3dJbnB1dE1ldGhvZE1lbnUsIE5VTEwpOworICAgICAgICByZXR1cm4gc2hvd0lucHV0TWV0
aG9kTWVudTsKKyAgICB9CisKKyAgICB2b2lkIGNoZWNrQWN0aW9uU3RhdGUoR3RrQWN0aW9uKiBh
Y3Rpb24sIHVuc2lnbmVkIHN0YXRlKQorICAgIHsKKyAgICAgICAgaWYgKHN0YXRlICYgVmlzaWJs
ZSkKKyAgICAgICAgICAgIGdfYXNzZXJ0KGd0a19hY3Rpb25fZ2V0X3Zpc2libGUoYWN0aW9uKSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdfYXNzZXJ0KCFndGtfYWN0aW9uX2dldF92aXNp
YmxlKGFjdGlvbikpOworCisgICAgICAgIGlmIChzdGF0ZSAmIEVuYWJsZWQpCisgICAgICAgICAg
ICBnX2Fzc2VydChndGtfYWN0aW9uX2dldF9zZW5zaXRpdmUoYWN0aW9uKSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGdfYXNzZXJ0KCFndGtfYWN0aW9uX2dldF9zZW5zaXRpdmUoYWN0aW9u
KSk7CisKKyAgICAgICAgaWYgKEdUS19JU19UT0dHTEVfQUNUSU9OKGFjdGlvbikpIHsKKyAgICAg
ICAgICAgIGlmIChzdGF0ZSAmIENoZWNrZWQpCisgICAgICAgICAgICAgICAgZ19hc3NlcnQoZ3Rr
X3RvZ2dsZV9hY3Rpb25fZ2V0X2FjdGl2ZShHVEtfVE9HR0xFX0FDVElPTihhY3Rpb24pKSk7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZ19hc3NlcnQoIWd0a190b2dnbGVfYWN0
aW9uX2dldF9hY3RpdmUoR1RLX1RPR0dMRV9BQ1RJT04oYWN0aW9uKSkpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgR0xpc3QqIGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4
dChHTGlzdCogaXRlbXMsIFdlYktpdENvbnRleHRNZW51QWN0aW9uIHN0b2NrQWN0aW9uLCB1bnNp
Z25lZCBzdGF0ZSkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KGl0ZW1zKTsKKyAgICAgICAgZ19h
c3NlcnQoV0VCS0lUX0lTX0NPTlRFWFRfTUVOVV9JVEVNKGl0ZW1zLT5kYXRhKSk7CisKKyAgICAg
ICAgV2ViS2l0Q29udGV4dE1lbnVJdGVtKiBpdGVtID0gV0VCS0lUX0NPTlRFWFRfTUVOVV9JVEVN
KGl0ZW1zLT5kYXRhKTsKKyAgICAgICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5p
c2hlcyhHX09CSkVDVChpdGVtKSk7CisKKyAgICAgICAgR3RrQWN0aW9uKiBhY3Rpb24gPSB3ZWJr
aXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X2FjdGlvbihpdGVtKTsKKyAgICAgICAgZ19hc3NlcnQo
R1RLX0lTX0FDVElPTihhY3Rpb24pKTsKKworICAgICAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0
X2NvbnRleHRfbWVudV9pdGVtX2dldF9zdG9ja19hY3Rpb24oaXRlbSksID09LCBzdG9ja0FjdGlv
bik7CisKKyAgICAgICAgY2hlY2tBY3Rpb25TdGF0ZShhY3Rpb24sIHN0YXRlKTsKKworICAgICAg
ICByZXR1cm4gZ19saXN0X25leHQoaXRlbXMpOworICAgIH0KKworICAgIEdMaXN0KiBjaGVja0N1
cnJlbnRJdGVtSXNDdXN0b21BY3Rpb25BbmRHZXROZXh0KEdMaXN0KiBpdGVtcywgY29uc3QgY2hh
ciogbGFiZWwsIHVuc2lnbmVkIHN0YXRlKQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQoaXRlbXMp
OworICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfQ09OVEVYVF9NRU5VX0lURU0oaXRlbXMtPmRh
dGEpKTsKKworICAgICAgICBXZWJLaXRDb250ZXh0TWVudUl0ZW0qIGl0ZW0gPSBXRUJLSVRfQ09O
VEVYVF9NRU5VX0lURU0oaXRlbXMtPmRhdGEpOworICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0
ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKGl0ZW0pKTsKKworICAgICAgICBHdGtBY3Rpb24q
IGFjdGlvbiA9IHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRfYWN0aW9uKGl0ZW0pOworICAg
ICAgICBnX2Fzc2VydChHVEtfSVNfQUNUSU9OKGFjdGlvbikpOworCisgICAgICAgIGdfYXNzZXJ0
X2NtcGludCh3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X3N0b2NrX2FjdGlvbihpdGVtKSwg
PT0sIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NVU1RPTSk7CisgICAgICAgIGdfYXNzZXJ0
X2NtcHN0cihndGtfYWN0aW9uX2dldF9sYWJlbChhY3Rpb24pLCA9PSwgbGFiZWwpOworCisgICAg
ICAgIGNoZWNrQWN0aW9uU3RhdGUoYWN0aW9uLCBzdGF0ZSk7CisKKyAgICAgICAgcmV0dXJuIGdf
bGlzdF9uZXh0KGl0ZW1zKTsKKyAgICB9CisKKyAgICBHTGlzdCogY2hlY2tDdXJyZW50SXRlbUlz
U3ViTWVudUFuZEdldE5leHQoR0xpc3QqIGl0ZW1zLCBjb25zdCBjaGFyKiBsYWJlbCwgdW5zaWdu
ZWQgc3RhdGUsIEdMaXN0Kiogc3ViTWVudUl0ZXIpCisgICAgeworICAgICAgICBnX2Fzc2VydChp
dGVtcyk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19DT05URVhUX01FTlVfSVRFTShpdGVt
cy0+ZGF0YSkpOworCisgICAgICAgIFdlYktpdENvbnRleHRNZW51SXRlbSogaXRlbSA9IFdFQktJ
VF9DT05URVhUX01FTlVfSVRFTShpdGVtcy0+ZGF0YSk7CisgICAgICAgIGFzc2VydE9iamVjdElz
RGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QoaXRlbSkpOworCisgICAgICAgIEd0a0Fj
dGlvbiogYWN0aW9uID0gd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF9hY3Rpb24oaXRlbSk7
CisgICAgICAgIGdfYXNzZXJ0KEdUS19JU19BQ1RJT04oYWN0aW9uKSk7CisKKyAgICAgICAgZ19h
c3NlcnRfY21wc3RyKGd0a19hY3Rpb25fZ2V0X2xhYmVsKGFjdGlvbiksID09LCBsYWJlbCk7Cisg
ICAgICAgIGNoZWNrQWN0aW9uU3RhdGUoYWN0aW9uLCBzdGF0ZSk7CisKKyAgICAgICAgV2ViS2l0
Q29udGV4dE1lbnUqIHN1Yk1lbnUgPSB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X3N1Ym1l
bnUoaXRlbSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19DT05URVhUX01FTlUoc3ViTWVu
dSkpOworICAgICAgICBpZiAoc3ViTWVudUl0ZXIpCisgICAgICAgICAgICAqc3ViTWVudUl0ZXIg
PSB3ZWJraXRfY29udGV4dF9tZW51X2dldF9pdGVtcyhzdWJNZW51KTsKKworICAgICAgICByZXR1
cm4gZ19saXN0X25leHQoaXRlbXMpOworICAgIH0KKworICAgIEdMaXN0KiBjaGVja0N1cnJlbnRJ
dGVtSXNTZXBhcmF0b3JBbmRHZXROZXh0KEdMaXN0KiBpdGVtcykKKyAgICB7CisgICAgICAgIGdf
YXNzZXJ0KGl0ZW1zKTsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX0NPTlRFWFRfTUVOVV9J
VEVNKGl0ZW1zLT5kYXRhKSk7CisKKyAgICAgICAgV2ViS2l0Q29udGV4dE1lbnVJdGVtKiBpdGVt
ID0gV0VCS0lUX0NPTlRFWFRfTUVOVV9JVEVNKGl0ZW1zLT5kYXRhKTsKKyAgICAgICAgZ19hc3Nl
cnQod2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2lzX3NlcGFyYXRvcihpdGVtKSk7CisKKyAgICAg
ICAgcmV0dXJuIGdfbGlzdF9uZXh0KGl0ZW1zKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xl
YW4gZG9SaWdodENsaWNrSWRsZUNhbGxiYWNrKENvbnRleHRNZW51VGVzdCogdGVzdCkKKyAgICB7
CisgICAgICAgIHRlc3QtPmNsaWNrTW91c2VCdXR0b24odGVzdC0+bV9tZW51UG9zaXRpb25YLCB0
ZXN0LT5tX21lbnVQb3NpdGlvblksIDMpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQor
CisgICAgdm9pZCBzaG93Q29udGV4dE1lbnVBdFBvc2l0aW9uQW5kV2FpdFVudGlsRmluaXNoZWQo
aW50IHgsIGludCB5KQorICAgIHsKKyAgICAgICAgbV9tZW51UG9zaXRpb25YID0geDsKKyAgICAg
ICAgbV9tZW51UG9zaXRpb25ZID0geTsKKyAgICAgICAgZ19pZGxlX2FkZChyZWludGVycHJldF9j
YXN0PEdTb3VyY2VGdW5jPihkb1JpZ2h0Q2xpY2tJZGxlQ2FsbGJhY2spLCB0aGlzKTsKKyAgICAg
ICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIHZvaWQgc2hvd0Nv
bnRleHRNZW51QW5kV2FpdFVudGlsRmluaXNoZWQoKQorICAgIHsKKyAgICAgICAgc2hvd0NvbnRl
eHRNZW51QXRQb3NpdGlvbkFuZFdhaXRVbnRpbEZpbmlzaGVkKDAsIDApOworICAgIH0KKworICAg
IHN0YXRpYyBnYm9vbGVhbiBzaW11bGF0ZUVzY0tleUlkbGVDYWxsYmFjayhDb250ZXh0TWVudVRl
c3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT5rZXlTdHJva2UoR0RLX0tFWV9Fc2NhcGUp
OworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgdm9pZCBkaXNtaXNzQ29udGV4
dE1lbnVBbmRXYWl0VW50aWxGaW5pc2hlZCgpCisgICAgeworICAgICAgICBnX2lkbGVfYWRkKHJl
aW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHNpbXVsYXRlRXNjS2V5SWRsZUNhbGxiYWNrKSwg
dGhpcyk7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICB9CisKKyAg
ICBkb3VibGUgbV9tZW51UG9zaXRpb25YOworICAgIGRvdWJsZSBtX21lbnVQb3NpdGlvblk7Cit9
OworCitjbGFzcyBDb250ZXh0TWVudURlZmF1bHRUZXN0OiBwdWJsaWMgQ29udGV4dE1lbnVUZXN0
IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKENvbnRleHRNZW51RGVmYXVs
dFRlc3QpOworCisgICAgZW51bSBEZWZhdWx0TWVudVR5cGUgeworICAgICAgICBOYXZpZ2F0aW9u
LAorICAgICAgICBMaW5rLAorICAgICAgICBJbWFnZSwKKyAgICAgICAgTGlua0ltYWdlLAorICAg
ICAgICBWaWRlbywKKyAgICAgICAgQXVkaW8sCisgICAgICAgIEVkaXRhYmxlCisgICAgfTsKKwor
ICAgIENvbnRleHRNZW51RGVmYXVsdFRlc3QoKQorICAgICAgICA6IG1fZXhwZWN0ZWRNZW51VHlw
ZShOYXZpZ2F0aW9uKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGNvbnRleHRNZW51KFdlYktp
dENvbnRleHRNZW51KiBjb250ZXh0TWVudSwgR2RrRXZlbnQqIGV2ZW50LCBXZWJLaXRIaXRUZXN0
UmVzdWx0KiBoaXRUZXN0UmVzdWx0KQorICAgIHsKKyAgICAgICAgR0xpc3QqIGl0ZXIgPSB3ZWJr
aXRfY29udGV4dF9tZW51X2dldF9pdGVtcyhjb250ZXh0TWVudSk7CisKKyAgICAgICAgc3dpdGNo
IChtX2V4cGVjdGVkTWVudVR5cGUpIHsKKyAgICAgICAgY2FzZSBOYXZpZ2F0aW9uOgorICAgICAg
ICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhp
dFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVz
dWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkpOworICAgICAgICAgICAgZ19hc3Nl
cnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0
KSk7CisgICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0
X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1
cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVO
VV9BQ1RJT05fR09fQkFDSywgVmlzaWJsZSk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJy
ZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVf
QUNUSU9OX0dPX0ZPUldBUkQsIFZpc2libGUpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3Vy
cmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5V
X0FDVElPTl9TVE9QLCBWaXNpYmxlKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJ
dGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T05fUkVMT0FELCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBMaW5rOgorICAgICAgICAgICAgZ19hc3NlcnQod2Via2l0X2hpdF90ZXN0X3Jlc3Vs
dF9jb250ZXh0X2lzX2xpbmsoaGl0VGVzdFJlc3VsdCkpOworICAgICAgICAgICAgZ19hc3NlcnQo
IXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0KSk7
CisgICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lz
X21lZGlhKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0
X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkpOworICAgICAg
ICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVy
LCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0xJTkssIFZpc2libGUgfCBFbmFibGVk
KTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdl
dE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9MSU5LX0lOX05FV19X
SU5ET1csIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJl
bnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9B
Q1RJT05fRE9XTkxPQURfTElOS19UT19ESVNLLCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAg
ICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIs
IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFlfTElOS19UT19DTElQQk9BUkQsIFZpc2li
bGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEltYWdlOgor
ICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19s
aW5rKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVz
dF9yZXN1bHRfY29udGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0KSk7CisgICAgICAgICAgICBn
X2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RS
ZXN1bHQpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2Nv
bnRleHRfaXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkpOworICAgICAgICAgICAgaXRlciA9IGNo
ZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVY
VF9NRU5VX0FDVElPTl9PUEVOX0lNQUdFX0lOX05FV19XSU5ET1csIFZpc2libGUgfCBFbmFibGVk
KTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdl
dE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRE9XTkxPQURfSU1BR0VfVE9f
RElTSywgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVu
dEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FD
VElPTl9DT1BZX0lNQUdFX1RPX0NMSVBCT0FSRCwgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAg
ICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVy
LCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX0lNQUdFX1VSTF9UT19DTElQQk9BUkQs
IFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExp
bmtJbWFnZToKKyAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29u
dGV4dF9pc19saW5rKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtp
dF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0KSk7CisgICAg
ICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlh
KGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3Rf
cmVzdWx0X2NvbnRleHRfaXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkpOworICAgICAgICAgICAg
aXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0xJTkssIFZpc2libGUgfCBFbmFibGVkKTsKKyAg
ICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQo
aXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9MSU5LX0lOX05FV19XSU5ET1cs
IFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVt
SXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05f
RE9XTkxPQURfTElOS19UT19ESVNLLCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBp
dGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJ
VF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFlfTElOS19UT19DTElQQk9BUkQsIFZpc2libGUgfCBF
bmFibGVkKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTZXBhcmF0b3JB
bmRHZXROZXh0KGl0ZXIpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0
b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVO
X0lNQUdFX0lOX05FV19XSU5ET1csIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGl0
ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lU
X0NPTlRFWFRfTUVOVV9BQ1RJT05fRE9XTkxPQURfSU1BR0VfVE9fRElTSywgVmlzaWJsZSB8IEVu
YWJsZWQpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9u
QW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX0lNQUdFX1RP
X0NMSVBCT0FSRCwgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICAgICAgaXRlciA9IGNoZWNr
Q3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9N
RU5VX0FDVElPTl9DT1BZX0lNQUdFX1VSTF9UT19DTElQQk9BUkQsIFZpc2libGUgfCBFbmFibGVk
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZpZGVvOgorICAgICAgICAgICAg
Z19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RS
ZXN1bHQpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2Nv
bnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkpOworICAgICAgICAgICAgZ19hc3NlcnQod2Vi
a2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQpKTsKKyAg
ICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfZWRp
dGFibGUoaGl0VGVzdFJlc3VsdCkpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0
ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
Tl9NRURJQV9QTEFZLCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBpdGVyID0gY2hl
Y2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhU
X01FTlVfQUNUSU9OX01FRElBX01VVEUsIFZpc2libGUpOworICAgICAgICAgICAgaXRlciA9IGNo
ZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVY
VF9NRU5VX0FDVElPTl9UT0dHTEVfTUVESUFfQ09OVFJPTFMsIFZpc2libGUgfCBFbmFibGVkIHwg
Q2hlY2tlZCk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rp
b25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1RPR0dMRV9NRURJ
QV9MT09QLCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJy
ZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVf
QUNUSU9OX0VOVEVSX1ZJREVPX0ZVTExTQ1JFRU4sIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAg
ICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTZXBhcmF0b3JBbmRHZXROZXh0KGl0ZXIp
OworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0
TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX1ZJREVPX0xJTktfVE9f
Q0xJUEJPQVJELCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBpdGVyID0gY2hlY2tD
dXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01F
TlVfQUNUSU9OX09QRU5fVklERU9fSU5fTkVXX1dJTkRPVywgVmlzaWJsZSB8IEVuYWJsZWQpOwor
ICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4
dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9ET1dOTE9BRF9WSURFT19UT19ESVNL
LCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBB
dWRpbzoKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRl
eHRfaXNfbGluayhoaXRUZXN0UmVzdWx0KSk7CisgICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0
X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAg
ICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYSho
aXRUZXN0UmVzdWx0KSk7CisgICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jl
c3VsdF9jb250ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgICAgIGl0
ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lU
X0NPTlRFWFRfTUVOVV9BQ1RJT05fTUVESUFfUExBWSwgVmlzaWJsZSB8IEVuYWJsZWQpOworICAg
ICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChp
dGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9NRURJQV9NVVRFLCBWaXNpYmxlKTsKKyAg
ICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQo
aXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fVE9HR0xFX01FRElBX0NPTlRST0xTLCBW
aXNpYmxlIHwgRW5hYmxlZCB8IENoZWNrZWQpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3Vy
cmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5V
X0FDVElPTl9UT0dHTEVfTUVESUFfTE9PUCwgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICAg
ICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0TmV4dChpdGVyLCBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9FTlRFUl9WSURFT19GVUxMU0NSRUVOLCBWaXNpYmxl
KTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTZXBhcmF0b3JBbmRHZXRO
ZXh0KGl0ZXIpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0
aW9uQW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX0FVRElP
X0xJTktfVE9fQ0xJUEJPQVJELCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBpdGVy
ID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9D
T05URVhUX01FTlVfQUNUSU9OX09QRU5fQVVESU9fSU5fTkVXX1dJTkRPVywgVmlzaWJsZSB8IEVu
YWJsZWQpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9u
QW5kR2V0TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9ET1dOTE9BRF9BVURJ
T19UT19ESVNLLCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBFZGl0YWJsZToKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3Rf
cmVzdWx0X2NvbnRleHRfaXNfbGluayhoaXRUZXN0UmVzdWx0KSk7CisgICAgICAgICAgICBnX2Fz
c2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1
bHQpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRl
eHRfaXNfbWVkaWEoaGl0VGVzdFJlc3VsdCkpOworICAgICAgICAgICAgZ19hc3NlcnQod2Via2l0
X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKKyAg
ICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQo
aXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ1VULCBWaXNpYmxlKTsKKyAgICAgICAg
ICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwg
V0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWSwgVmlzaWJsZSk7CisgICAgICAgICAgICBp
dGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJ
VF9DT05URVhUX01FTlVfQUNUSU9OX1BBU1RFLCBWaXNpYmxlIHwgRW5hYmxlZCk7CisgICAgICAg
ICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIs
IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0RFTEVURSwgVmlzaWJsZSk7CisgICAgICAgICAg
ICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU2VwYXJhdG9yQW5kR2V0TmV4dChpdGVyKTsKKyAg
ICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQo
aXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fU0VMRUNUX0FMTCwgVmlzaWJsZSB8IEVu
YWJsZWQpOworICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1NlcGFyYXRvckFu
ZEdldE5leHQoaXRlcik7CisgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd0lucHV0TWV0aG9kc01l
bnUoKSkKKyAgICAgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rp
b25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0lOUFVUX01FVEhP
RFMsIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJ
dGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T05fVU5JQ09ERSwgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2RldmVsb3Blcl9l
eHRyYXMod2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyhtX3dlYlZpZXcpKSkgeworICAgICAg
ICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1NlcGFyYXRvckFuZEdldE5leHQoaXRlcik7
CisgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXRO
ZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0lOU1BFQ1RfRUxFTUVOVCwgVmlz
aWJsZSB8IEVuYWJsZWQpOworICAgICAgICB9CisgICAgICAgIGdfYXNzZXJ0KCFpdGVyKTsKKwor
ICAgICAgICBxdWl0TWFpbkxvb3AoKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICBEZWZhdWx0TWVudVR5cGUgbV9leHBlY3RlZE1lbnVUeXBlOworfTsKKworc3RhdGljIHZv
aWQgdGVzdENvbnRleHRNZW51RGVmYXVsdE1lbnUoQ29udGV4dE1lbnVEZWZhdWx0VGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxN
YXBwZWQoKTsKKworICAgIGNvbnN0IGNoYXIqIGxpbmtzSFRNTCA9CisgICAgICAgICI8aHRtbD48
Ym9keT4iCisgICAgICAgICIgPGEgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRv
cDoxJyBocmVmPSdodHRwOi8vd3d3LndlYmtpdGd0ay5vcmcnIHRpdGxlPSdXZWJLaXRHVEsrIFRp
dGxlJz5XZWJLaXRHVEsrIFdlYnNpdGU8L2E+IgorICAgICAgICAiIDxpbWcgc3R5bGU9J3Bvc2l0
aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRvcDoxMCcgc3JjPScweGRlYWRiZWVmJyB3aWR0aD01IGhl
aWdodD01PjwvaW1nPiIKKyAgICAgICAgIiA8YSBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxl
ZnQ6MTsgdG9wOjIwJyBocmVmPSdodHRwOi8vd3d3LndlYmtpdGd0ay5vcmcvbG9nbycgdGl0bGU9
J1dlYktpdEdUSysgTG9nbyc+PGltZyBzcmM9JzB4ZGVhZGJlZWYnIHdpZHRoPTUgaGVpZ2h0PTU+
PC9pbWc+PC9hPiIKKyAgICAgICAgIiA8aW5wdXQgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBs
ZWZ0OjE7IHRvcDozMCcgc2l6ZT0nMTAnPjwvaW5wdXQ+IgorICAgICAgICAiIDx2aWRlbyBzdHls
ZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjUwJyB3aWR0aD0nMzAwJyBoZWlnaHQ9
JzMwMCcgY29udHJvbHM9J2NvbnRyb2xzJyBwcmVsb2FkPSdub25lJz48c291cmNlIHNyYz0nbW92
aWUub2dnJyB0eXBlPSd2aWRlby9vZ2cnIC8+PC92aWRlbz4iCisgICAgICAgICIgPGF1ZGlvIHN0
eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6NjAnIHdpZHRoPSc1MCcgaGVpZ2h0
PScyMCcgY29udHJvbHM9J2NvbnRyb2xzJyBwcmVsb2FkPSdub25lJz48c291cmNlIHNyYz0ndHJh
Y2subXAzJyB0eXBlPSdhdWRpby9tcDMnIC8+PC9hdWRpbz4iCisgICAgICAgICI8L2JvZHk+PC9o
dG1sPiI7CisgICAgdGVzdC0+bG9hZEh0bWwobGlua3NIVE1MLCAiZmlsZTovLy8iKTsKKyAgICB0
ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIC8vIENvbnRleHQgbWVudSBmb3Ig
ZG9jdW1lbnQuCisgICAgdGVzdC0+bV9leHBlY3RlZE1lbnVUeXBlID0gQ29udGV4dE1lbnVEZWZh
dWx0VGVzdDo6TmF2aWdhdGlvbjsKKyAgICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBdFBvc2l0aW9u
QW5kV2FpdFVudGlsRmluaXNoZWQoMCwgMCk7CisKKyAgICAvLyBDb250ZXh0IG1lbnUgZm9yIGxp
bmsuCisgICAgdGVzdC0+bV9leHBlY3RlZE1lbnVUeXBlID0gQ29udGV4dE1lbnVEZWZhdWx0VGVz
dDo6TGluazsKKyAgICB0ZXN0LT5zaG93Q29udGV4dE1lbnVBdFBvc2l0aW9uQW5kV2FpdFVudGls
RmluaXNoZWQoMSwgMSk7CisKKyAgICAvLyBDb250ZXh0IG1lbnUgZm9yIGltYWdlLgorICAgIHRl
c3QtPm1fZXhwZWN0ZWRNZW51VHlwZSA9IENvbnRleHRNZW51RGVmYXVsdFRlc3Q6OkltYWdlOwor
ICAgIHRlc3QtPnNob3dDb250ZXh0TWVudUF0UG9zaXRpb25BbmRXYWl0VW50aWxGaW5pc2hlZCgx
LCAxMCk7CisKKyAgICAvLyBFbmFibGUgZGV2ZWxvcGVyIGV4dHJhcyBub3csIHNvIHRoYXQgaW5z
cGVjdG9yIGVsZW1lbnQKKyAgICAvLyB3aWxsIGJlIHNob3duIGluIHRoZSBkZWZhdWx0IGNvbnRl
eHQgbWVudS4KKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9kZXZlbG9wZXJfZXh0cmFz
KHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3ModGVzdC0+bV93ZWJWaWV3KSwgVFJVRSk7CisK
KyAgICAvLyBDb250ZXh0IG1lbnUgZm9yIGltYWdlIGxpbmsuCisgICAgdGVzdC0+bV9leHBlY3Rl
ZE1lbnVUeXBlID0gQ29udGV4dE1lbnVEZWZhdWx0VGVzdDo6TGlua0ltYWdlOworICAgIHRlc3Qt
PnNob3dDb250ZXh0TWVudUF0UG9zaXRpb25BbmRXYWl0VW50aWxGaW5pc2hlZCgxLCAyMCk7CisK
KyAgICAvLyBDb250ZXh0IG1lbnUgZm9yIHZpZGVvLgorICAgIHRlc3QtPm1fZXhwZWN0ZWRNZW51
VHlwZSA9IENvbnRleHRNZW51RGVmYXVsdFRlc3Q6OlZpZGVvOworICAgIHRlc3QtPnNob3dDb250
ZXh0TWVudUF0UG9zaXRpb25BbmRXYWl0VW50aWxGaW5pc2hlZCgxLCA1MCk7CisKKyAgICAvLyBD
b250ZXh0IG1lbnUgZm9yIGF1ZGlvLgorICAgIHRlc3QtPm1fZXhwZWN0ZWRNZW51VHlwZSA9IENv
bnRleHRNZW51RGVmYXVsdFRlc3Q6OkF1ZGlvOworICAgIHRlc3QtPnNob3dDb250ZXh0TWVudUF0
UG9zaXRpb25BbmRXYWl0VW50aWxGaW5pc2hlZCgxLCA2MCk7CisKKyAgICAvLyBDb250ZXh0IG1l
bnUgZm9yIGVkaXRhYmxlLgorICAgIHRlc3QtPm1fZXhwZWN0ZWRNZW51VHlwZSA9IENvbnRleHRN
ZW51RGVmYXVsdFRlc3Q6OkVkaXRhYmxlOworICAgIHRlc3QtPnNob3dDb250ZXh0TWVudUF0UG9z
aXRpb25BbmRXYWl0VW50aWxGaW5pc2hlZCg1LCAzNSk7Cit9CisKK2NsYXNzIENvbnRleHRNZW51
Q3VzdG9tVGVzdDogcHVibGljIENvbnRleHRNZW51VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9H
TElCX1RFU1RfRklYVFVSRShDb250ZXh0TWVudUN1c3RvbVRlc3QpOworCisgICAgQ29udGV4dE1l
bnVDdXN0b21UZXN0KCkKKyAgICAgICAgOiBtX2l0ZW1Ub0FjdGl2YXRlTGFiZWwoMCkKKyAgICAg
ICAgLCBtX2FjdGl2YXRlZChmYWxzZSkKKyAgICAgICAgLCBtX3RvZ2dsZWQoZmFsc2UpCisgICAg
eworICAgIH0KKworICAgIGJvb2wgY29udGV4dE1lbnUoV2ViS2l0Q29udGV4dE1lbnUqIGNvbnRl
eHRNZW51LCBHZGtFdmVudCosIFdlYktpdEhpdFRlc3RSZXN1bHQqIGhpdFRlc3RSZXN1bHQpCisg
ICAgeworICAgICAgICAvLyBBcHBlbmQgb3VyIGN1c3RvbSBpdGVtIHRvIHRoZSBkZWZhdWx0IG1l
bnUuCisgICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJr
aXRfY29udGV4dF9tZW51X2l0ZW1fbmV3KG1fYWN0aW9uLmdldCgpKSk7CisgICAgICAgIHF1aXRN
YWluTG9vcCgpOworCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBHdGtNZW51
SXRlbSogZ2V0TWVudUl0ZW0oR3RrTWVudSogbWVudSwgY29uc3QgZ2NoYXIqIGl0ZW1MYWJlbCkK
KyAgICB7CisgICAgICAgIEdPd25QdHI8R0xpc3Q+IGl0ZW1zKGd0a19jb250YWluZXJfZ2V0X2No
aWxkcmVuKEdUS19DT05UQUlORVIobWVudSkpKTsKKyAgICAgICAgZm9yIChHTGlzdCogaXRlciA9
IGl0ZW1zLmdldCgpOyBpdGVyOyBpdGVyID0gZ19saXN0X25leHQoaXRlcikpIHsKKyAgICAgICAg
ICAgIEd0a01lbnVJdGVtKiBjaGlsZCA9IEdUS19NRU5VX0lURU0oaXRlci0+ZGF0YSk7CisgICAg
ICAgICAgICBpZiAoZ19zdHJfZXF1YWwoaXRlbUxhYmVsLCBndGtfbWVudV9pdGVtX2dldF9sYWJl
bChjaGlsZCkpKQorICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDsKKyAgICAgICAgfQorICAg
ICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisK
KyAgICB2b2lkIGFjdGl2YXRlTWVudUl0ZW0oKQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQobV9p
dGVtVG9BY3RpdmF0ZUxhYmVsKTsKKyAgICAgICAgR3RrTWVudSogbWVudSA9IGdldFBvcHVwTWVu
dSgpOworICAgICAgICBHdGtNZW51SXRlbSogaXRlbSA9IGdldE1lbnVJdGVtKG1lbnUsIG1faXRl
bVRvQWN0aXZhdGVMYWJlbCk7CisgICAgICAgIGd0a19tZW51X3NoZWxsX2FjdGl2YXRlX2l0ZW0o
R1RLX01FTlVfU0hFTEwobWVudSksIEdUS19XSURHRVQoaXRlbSksIFRSVUUpOworICAgICAgICBt
X2l0ZW1Ub0FjdGl2YXRlTGFiZWwgPSAwOworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBh
Y3RpdmF0ZU1lbnVJdGVtSWRsZUNhbGxiYWNrKGdwb2ludGVyIHVzZXJEYXRhKQorICAgIHsKKyAg
ICAgICAgQ29udGV4dE1lbnVDdXN0b21UZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8Q29udGV4dE1l
bnVDdXN0b21UZXN0Kj4odXNlckRhdGEpOworICAgICAgICB0ZXN0LT5hY3RpdmF0ZU1lbnVJdGVt
KCk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICB2b2lkIGFjdGl2YXRlQ3Vz
dG9tTWVudUl0ZW1BbmRXYWl0VW50aWxBY3RpdmF0ZWQoY29uc3QgY2hhciogYWN0aW9uTGFiZWwp
CisgICAgeworICAgICAgICBtX2FjdGl2YXRlZCA9IG1fdG9nZ2xlZCA9IGZhbHNlOworICAgICAg
ICBtX2l0ZW1Ub0FjdGl2YXRlTGFiZWwgPSBhY3Rpb25MYWJlbDsKKyAgICAgICAgZ19pZGxlX2Fk
ZChhY3RpdmF0ZU1lbnVJdGVtSWRsZUNhbGxiYWNrLCB0aGlzKTsKKyAgICAgICAgZ19tYWluX2xv
b3BfcnVuKG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIHZvaWQgdG9nZ2xlQ3VzdG9tTWVudUl0
ZW1BbmRXYWl0VW50aWxUb2dnbGVkKGNvbnN0IGNoYXIqIGFjdGlvbkxhYmVsKQorICAgIHsKKyAg
ICAgICAgYWN0aXZhdGVDdXN0b21NZW51SXRlbUFuZFdhaXRVbnRpbEFjdGl2YXRlZChhY3Rpb25M
YWJlbCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgYWN0aW9uQWN0aXZhdGVkQ2FsbGJhY2so
R3RrQWN0aW9uKiwgQ29udGV4dE1lbnVDdXN0b21UZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAg
dGVzdC0+bV9hY3RpdmF0ZWQgPSB0cnVlOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGFjdGlv
blRvZ2dsZWRDYWxsYmFjayhHdGtBY3Rpb24qLCBDb250ZXh0TWVudUN1c3RvbVRlc3QqIHRlc3Qp
CisgICAgeworICAgICAgICB0ZXN0LT5tX3RvZ2dsZWQgPSB0cnVlOworICAgIH0KKworICAgIHZv
aWQgc2V0QWN0aW9uKEd0a0FjdGlvbiogYWN0aW9uKQorICAgIHsKKyAgICAgICAgbV9hY3Rpb24g
PSBhY3Rpb247CisgICAgICAgIGlmIChHVEtfSVNfVE9HR0xFX0FDVElPTihhY3Rpb24pKQorICAg
ICAgICAgICAgZ19zaWduYWxfY29ubmVjdChhY3Rpb24sICJ0b2dnbGVkIiwgR19DQUxMQkFDSyhh
Y3Rpb25Ub2dnbGVkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
Z19zaWduYWxfY29ubmVjdChhY3Rpb24sICJhY3RpdmF0ZSIsIEdfQ0FMTEJBQ0soYWN0aW9uQWN0
aXZhdGVkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICB9CisKKyAgICBHUmVmUHRyPEd0a0FjdGlvbj4g
bV9hY3Rpb247CisgICAgY29uc3QgY2hhciogbV9pdGVtVG9BY3RpdmF0ZUxhYmVsOworICAgIGJv
b2wgbV9hY3RpdmF0ZWQ7CisgICAgYm9vbCBtX3RvZ2dsZWQ7Cit9OworCitzdGF0aWMgdm9pZCB0
ZXN0Q29udGV4dE1lbnVQb3B1bGF0ZU1lbnUoQ29udGV4dE1lbnVDdXN0b21UZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBl
ZCgpOworCisgICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxib2R5PldlYktpdEdUSysgQ29udGV4
dCBtZW51IHRlc3RzPC9ib2R5PjwvaHRtbD4iLCAiZmlsZTovLy8iKTsKKyAgICB0ZXN0LT53YWl0
VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIC8vIENyZWF0ZSBhIGN1c3RvbSBtZW51IGl0ZW0u
CisgICAgR1JlZlB0cjxHdGtBY3Rpb24+IGFjdGlvbiA9IGFkb3B0R1JlZihndGtfYWN0aW9uX25l
dygiV2ViS2l0R1RLK0N1c3RvbUFjdGlvbiIsICJDdXN0b20gX0FjdGlvbiIsIDAsIDApKTsKKyAg
ICB0ZXN0LT5zZXRBY3Rpb24oYWN0aW9uLmdldCgpKTsKKyAgICB0ZXN0LT5zaG93Q29udGV4dE1l
bnVBbmRXYWl0VW50aWxGaW5pc2hlZCgpOworICAgIHRlc3QtPmFjdGl2YXRlQ3VzdG9tTWVudUl0
ZW1BbmRXYWl0VW50aWxBY3RpdmF0ZWQoZ3RrX2FjdGlvbl9nZXRfbGFiZWwoYWN0aW9uLmdldCgp
KSk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9hY3RpdmF0ZWQpOworICAgIGdfYXNzZXJ0KCF0ZXN0
LT5tX3RvZ2dsZWQpOworCisgICAgLy8gQ3JlYXRlIGEgY3VzdG9tIHRvZ2dsZSBtZW51IGl0ZW0u
CisgICAgR1JlZlB0cjxHdGtBY3Rpb24+IHRvZ2dsZUFjdGlvbiA9IGFkb3B0R1JlZihHVEtfQUNU
SU9OKGd0a190b2dnbGVfYWN0aW9uX25ldygiV2ViS2l0R1RLK0N1c3RvbVRvZ2dsZUFjdGlvbiIs
ICJDdXN0b20gX1RvZ2dsZSBBY3Rpb24iLCAwLCAwKSkpOworICAgIHRlc3QtPnNldEFjdGlvbih0
b2dnbGVBY3Rpb24uZ2V0KCkpOworICAgIHRlc3QtPnNob3dDb250ZXh0TWVudUFuZFdhaXRVbnRp
bEZpbmlzaGVkKCk7CisgICAgdGVzdC0+dG9nZ2xlQ3VzdG9tTWVudUl0ZW1BbmRXYWl0VW50aWxU
b2dnbGVkKGd0a19hY3Rpb25fZ2V0X2xhYmVsKHRvZ2dsZUFjdGlvbi5nZXQoKSkpOworICAgIGdf
YXNzZXJ0KCF0ZXN0LT5tX2FjdGl2YXRlZCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV90b2dnbGVk
KTsKK30KKworY2xhc3MgQ29udGV4dE1lbnVDdXN0b21GdWxsVGVzdDogcHVibGljIENvbnRleHRN
ZW51VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShDb250ZXh0TWVu
dUN1c3RvbUZ1bGxUZXN0KTsKKworICAgIGJvb2wgY29udGV4dE1lbnUoV2ViS2l0Q29udGV4dE1l
bnUqIGNvbnRleHRNZW51LCBHZGtFdmVudCosIFdlYktpdEhpdFRlc3RSZXN1bHQqKQorICAgIHsK
KyAgICAgICAgLy8gQ2xlYXIgcHJvcG9zZWQgbWVudSBhbmQgYnVpbGQgb3VyIG93bi4KKyAgICAg
ICAgd2Via2l0X2NvbnRleHRfbWVudV9yZW1vdmVfYWxsKGNvbnRleHRNZW51KTsKKyAgICAgICAg
Z19hc3NlcnRfY21waW50KHdlYmtpdF9jb250ZXh0X21lbnVfZ2V0X25faXRlbXMoY29udGV4dE1l
bnUpLCA9PSwgMCk7CisKKyAgICAgICAgLy8gQWRkIGFjdGlvbnMgZnJvbSBzdG9jay4KKyAgICAg
ICAgd2Via2l0X2NvbnRleHRfbWVudV9wcmVwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4
dF9tZW51X2l0ZW1fbmV3X2Zyb21fc3RvY2tfYWN0aW9uKFdFQktJVF9DT05URVhUX01FTlVfQUNU
SU9OX0dPX0JBQ0spKTsKKyAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBlbmQoY29udGV4
dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfZnJvbV9zdG9ja19hY3Rpb24oV0VC
S0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fR09fRk9SV0FSRCkpOworICAgICAgICB3ZWJraXRfY29u
dGV4dF9tZW51X2luc2VydChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25l
d19zZXBhcmF0b3IoKSwgMik7CisKKyAgICAgICAgLy8gQWRkIGN1c3RvbSBhY3Rpb25zLgorICAg
ICAgICBHUmVmUHRyPEd0a0FjdGlvbj4gYWN0aW9uID0gYWRvcHRHUmVmKGd0a19hY3Rpb25fbmV3
KCJXZWJLaXRHVEsrQ3VzdG9tQWN0aW9uIiwgIkN1c3RvbSBfQWN0aW9uIiwgMCwgMCkpOworICAg
ICAgICBndGtfYWN0aW9uX3NldF9zZW5zaXRpdmUoYWN0aW9uLmdldCgpLCBGQUxTRSk7CisgICAg
ICAgIHdlYmtpdF9jb250ZXh0X21lbnVfaW5zZXJ0KGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4
dF9tZW51X2l0ZW1fbmV3KGFjdGlvbi5nZXQoKSksIC0xKTsKKyAgICAgICAgR1JlZlB0cjxHdGtB
Y3Rpb24+IHRvZ2dsZUFjdGlvbiA9IGFkb3B0R1JlZihHVEtfQUNUSU9OKGd0a190b2dnbGVfYWN0
aW9uX25ldygiV2ViS2l0R1RLK0N1c3RvbVRvZ2dsZUFjdGlvbiIsICJDdXN0b20gX1RvZ2dsZSBB
Y3Rpb24iLCAwLCAwKSkpOworICAgICAgICBndGtfdG9nZ2xlX2FjdGlvbl9zZXRfYWN0aXZlKEdU
S19UT0dHTEVfQUNUSU9OKHRvZ2dsZUFjdGlvbi5nZXQoKSksIFRSVUUpOworICAgICAgICB3ZWJr
aXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9p
dGVtX25ldyh0b2dnbGVBY3Rpb24uZ2V0KCkpKTsKKyAgICAgICAgd2Via2l0X2NvbnRleHRfbWVu
dV9hcHBlbmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfc2VwYXJh
dG9yKCkpOworCisgICAgICAgIC8vIEFkZCBhIHN1Ym1lbnUuCisgICAgICAgIEdSZWZQdHI8V2Vi
S2l0Q29udGV4dE1lbnU+IHN1Yk1lbnUgPSBhZG9wdEdSZWYod2Via2l0X2NvbnRleHRfbWVudV9u
ZXcoKSk7CisgICAgICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19P
QkpFQ1Qoc3ViTWVudS5nZXQoKSkpOworICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2luc2Vy
dChzdWJNZW51LmdldCgpLCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X2Zyb21fc3RvY2tf
YWN0aW9uX3dpdGhfbGFiZWwoV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fU1RPUCwgIlN0b3Ag
TG9hZCIpLCAwKTsKKyAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9pbnNlcnQoc3ViTWVudS5n
ZXQoKSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19mcm9tX3N0b2NrX2FjdGlvbihXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9SRUxPQUQpLCAtMSk7CisgICAgICAgIHdlYmtpdF9jb250
ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3
X3dpdGhfc3VibWVudSgiTG9hZCBvcHRpb25zIiwgc3ViTWVudS5nZXQoKSkpOworICAgICAgICB3
ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVu
dV9pdGVtX25ld19zZXBhcmF0b3IoKSk7CisKKyAgICAgICAgLy8gTW92ZSBMb2FkIHN1Ym1lbnUg
YmVmb3JlIGN1c3RvbSBhY3Rpb25zLgorICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X21vdmVf
aXRlbShjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9sYXN0KGNvbnRleHRNZW51KSwg
Myk7CisgICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfbW92ZV9pdGVtKGNvbnRleHRNZW51LCB3
ZWJraXRfY29udGV4dF9tZW51X2xhc3QoY29udGV4dE1lbnUpLCAzKTsKKworICAgICAgICAvLyBJ
ZiBsYXN0IGl0ZW0gaXMgYSBzZXBhcmF0b3IsIHJlbW92ZSBpdC4KKyAgICAgICAgaWYgKHdlYmtp
dF9jb250ZXh0X21lbnVfaXRlbV9pc19zZXBhcmF0b3Iod2Via2l0X2NvbnRleHRfbWVudV9sYXN0
KGNvbnRleHRNZW51KSkpCisgICAgICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X3JlbW92ZShj
b250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9sYXN0KGNvbnRleHRNZW51KSk7CisKKyAg
ICAgICAgLy8gQ2hlY2sgdGhlIG1lbnUuCisgICAgICAgIEdMaXN0KiBpdGVyID0gd2Via2l0X2Nv
bnRleHRfbWVudV9nZXRfaXRlbXMoY29udGV4dE1lbnUpOworCisgICAgICAgIGl0ZXIgPSBjaGVj
a0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRf
TUVOVV9BQ1RJT05fR09fQkFDSywgVmlzaWJsZSB8IEVuYWJsZWQpOworICAgICAgICBpdGVyID0g
Y2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25BbmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05U
RVhUX01FTlVfQUNUSU9OX0dPX0ZPUldBUkQsIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAg
aXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1NlcGFyYXRvckFuZEdldE5leHQoaXRlcik7CisKKyAg
ICAgICAgR0xpc3QqIHN1Yk1lbnVJdGVyID0gMDsKKyAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVu
dEl0ZW1Jc1N1Yk1lbnVBbmRHZXROZXh0KGl0ZXIsICJMb2FkIG9wdGlvbnMiLCBWaXNpYmxlIHwg
RW5hYmxlZCwgJnN1Yk1lbnVJdGVyKTsKKyAgICAgICAgc3ViTWVudUl0ZXIgPSBjaGVja0N1cnJl
bnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoc3ViTWVudUl0ZXIsIFdFQktJVF9DT05URVhU
X01FTlVfQUNUSU9OX1NUT1AsIFZpc2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgc3ViTWVudUl0
ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoc3ViTWVudUl0ZXIs
IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1JFTE9BRCwgVmlzaWJsZSB8IEVuYWJsZWQpOwor
ICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU2VwYXJhdG9yQW5kR2V0TmV4dChpdGVy
KTsKKworICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzQ3VzdG9tQWN0aW9uQW5kR2V0
TmV4dChpdGVyLCAiQ3VzdG9tIF9BY3Rpb24iLCBWaXNpYmxlKTsKKyAgICAgICAgaXRlciA9IGNo
ZWNrQ3VycmVudEl0ZW1Jc0N1c3RvbUFjdGlvbkFuZEdldE5leHQoaXRlciwgIkN1c3RvbSBfVG9n
Z2xlIEFjdGlvbiIsIFZpc2libGUgfCBFbmFibGVkIHwgQ2hlY2tlZCk7CisgICAgICAgIGdfYXNz
ZXJ0KCFpdGVyKTsKKworICAgICAgICBxdWl0TWFpbkxvb3AoKTsKKworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0Q29udGV4dE1lbnVDdXN0b21NZW51
KENvbnRleHRNZW51Q3VzdG9tRnVsbFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAg
dGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7CisKKyAgICB0ZXN0LT5sb2Fk
SHRtbCgiPGh0bWw+PGJvZHk+V2ViS2l0R1RLKyBDb250ZXh0IG1lbnUgdGVzdHM8L2JvZHk+PC9o
dG1sPiIsICJmaWxlOi8vLyIpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwor
CisgICAgdGVzdC0+c2hvd0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmluaXNoZWQoKTsKK30KKwor
Y2xhc3MgQ29udGV4dE1lbnVEaXNhYmxlZFRlc3Q6IHB1YmxpYyBDb250ZXh0TWVudVRlc3Qgewor
cHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoQ29udGV4dE1lbnVEaXNhYmxlZFRl
c3QpOworCisgICAgZW51bSBEaXNhYmxlTW9kZSB7CisgICAgICAgIElnbm9yZUNsaWNrcywKKyAg
ICAgICAgSWdub3JlRGVmYXVsdE1lbnUKKyAgICB9OworCisgICAgc3RhdGljIGdib29sZWFuIGJ1
dHRvblByZXNzRXZlbnRDYWxsYmFjayhHdGtXaWRnZXQqLCBHZGtFdmVudCogZXZlbnQsIENvbnRl
eHRNZW51RGlzYWJsZWRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgaWYgKGV2ZW50LT5idXR0
b24uYnV0dG9uICE9IDMpCisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIHJldHVy
biB0ZXN0LT5yaWdodEJ1dHRvblByZXNzZWQoKTsKKyAgICB9CisKKyAgICBDb250ZXh0TWVudURp
c2FibGVkVGVzdCgpCisgICAgICAgIDogbV9kaXNhYmxlTW9kZShJZ25vcmVDbGlja3MpCisgICAg
eworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImJ1dHRvbi1wcmVzcy1ldmVu
dCIsIEdfQ0FMTEJBQ0soYnV0dG9uUHJlc3NFdmVudENhbGxiYWNrKSwgdGhpcyk7CisgICAgfQor
CisgICAgYm9vbCBjb250ZXh0TWVudShXZWJLaXRDb250ZXh0TWVudSogY29udGV4dE1lbnUsIEdk
a0V2ZW50KiwgV2ViS2l0SGl0VGVzdFJlc3VsdCopCisgICAgeworICAgICAgICBpZiAobV9kaXNh
YmxlTW9kZSA9PSBJZ25vcmVDbGlja3MpCisgICAgICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hl
ZCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBxdWl0TWFpbkxvb3AoKTsKKworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIHJpZ2h0QnV0dG9uUHJlc3NlZCgpCisg
ICAgeworICAgICAgICBpZiAobV9kaXNhYmxlTW9kZSA9PSBJZ25vcmVDbGlja3MpIHsKKyAgICAg
ICAgICAgIHF1aXRNYWluTG9vcEFmdGVyUHJvY2Vzc2luZ1BlbmRpbmdFdmVudHMoKTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBEaXNhYmxlTW9kZSBtX2Rpc2FibGVNb2RlOworfTsKKworc3RhdGljIHZvaWQg
dGVzdENvbnRleHRNZW51RGlzYWJsZU1lbnUoQ29udGV4dE1lbnVEaXNhYmxlZFRlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFw
cGVkKCk7CisKKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHk+V2ViS2l0R1RLKyBDb250
ZXh0IG1lbnUgdGVzdHM8L2JvZHk+PC9odG1sPiIsICJmaWxlOi8vLyIpOworICAgIHRlc3QtPndh
aXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+bV9kaXNhYmxlTW9kZSA9IENvbnRl
eHRNZW51RGlzYWJsZWRUZXN0OjpJZ25vcmVEZWZhdWx0TWVudTsKKyAgICB0ZXN0LT5zaG93Q29u
dGV4dE1lbnVBbmRXYWl0VW50aWxGaW5pc2hlZCgpOworCisgICAgdGVzdC0+bV9kaXNhYmxlTW9k
ZSA9IENvbnRleHRNZW51RGlzYWJsZWRUZXN0OjpJZ25vcmVDbGlja3M7CisgICAgdGVzdC0+c2hv
d0NvbnRleHRNZW51QW5kV2FpdFVudGlsRmluaXNoZWQoKTsKK30KKworY2xhc3MgQ29udGV4dE1l
bnVTdWJtZW51VGVzdDogcHVibGljIENvbnRleHRNZW51VGVzdCB7CitwdWJsaWM6CisgICAgTUFL
RV9HTElCX1RFU1RfRklYVFVSRShDb250ZXh0TWVudVN1Ym1lbnVUZXN0KTsKKworICAgIGJvb2wg
Y29udGV4dE1lbnUoV2ViS2l0Q29udGV4dE1lbnUqIGNvbnRleHRNZW51LCBHZGtFdmVudCosIFdl
YktpdEhpdFRlc3RSZXN1bHQqKQorICAgIHsKKyAgICAgICAgc2l6ZV90IG1lbnVTaXplID0gd2Vi
a2l0X2NvbnRleHRfbWVudV9nZXRfbl9pdGVtcyhjb250ZXh0TWVudSk7CisgICAgICAgIEdSZWZQ
dHI8V2ViS2l0Q29udGV4dE1lbnU+IHN1Yk1lbnUgPSBhZG9wdEdSZWYod2Via2l0X2NvbnRleHRf
bWVudV9uZXcoKSk7CisgICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRN
ZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X3dpdGhfc3VibWVudSgiU3ViTWVudUl0
ZW0iLCBzdWJNZW51LmdldCgpKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2Nv
bnRleHRfbWVudV9nZXRfbl9pdGVtcyhjb250ZXh0TWVudSksID09LCBtZW51U2l6ZSArIDEpOwor
CisgICAgICAgIEdSZWZQdHI8V2ViS2l0Q29udGV4dE1lbnU+IHN1Yk1lbnUyID0gYWRvcHRHUmVm
KHdlYmtpdF9jb250ZXh0X21lbnVfbmV3KCkpOworICAgICAgICBHUmVmUHRyPFdlYktpdENvbnRl
eHRNZW51SXRlbT4gaXRlbSA9IHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfZnJvbV9zdG9j
a19hY3Rpb24oV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9MSU5LKTsKKworICAgICAg
ICAvLyBBZGQgc3VibWVudSB0byBuZXdseSBjcmVhdGVkIGl0ZW0uCisgICAgICAgIGdfYXNzZXJ0
KCF3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X3N1Ym1lbnUoaXRlbS5nZXQoKSkpOworICAg
ICAgICB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fc2V0X3N1Ym1lbnUoaXRlbS5nZXQoKSwgc3Vi
TWVudTIuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydCh3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1f
Z2V0X3N1Ym1lbnUoaXRlbS5nZXQoKSkgPT0gc3ViTWVudTIuZ2V0KCkpOworCisgICAgICAgIC8v
IFJlcGxhY2UgdGhlIHN1Ym1lbnUuCisgICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9z
ZXRfc3VibWVudShpdGVtLmdldCgpLCAwKTsKKyAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF9jb250
ZXh0X21lbnVfaXRlbV9nZXRfc3VibWVudShpdGVtLmdldCgpKSk7CisKKyAgICAgICAgLy8gVHJ5
IHRvIGFkZCBhIHN1Ym1lbnUgYWxyZWFkeSBhZGRlZCB0byBhbm90aGVyIGl0ZW0uCisgICAgICAg
IHJlbW92ZUxvZ0ZhdGFsRmxhZyhHX0xPR19MRVZFTF9XQVJOSU5HKTsKKyAgICAgICAgd2Via2l0
X2NvbnRleHRfbWVudV9pdGVtX3NldF9zdWJtZW51KGl0ZW0uZ2V0KCksIHN1Yk1lbnUuZ2V0KCkp
OworICAgICAgICBhZGRMb2dGYXRhbEZsYWcoR19MT0dfTEVWRUxfV0FSTklORyk7CisgICAgICAg
IGdfYXNzZXJ0KCF3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X3N1Ym1lbnUoaXRlbS5nZXQo
KSkpOworCisgICAgICAgIC8vIEEgcmVtb3ZlZCBzdWJtZW51IHNob3VsZG4ndCBoYXZlIGEgcGFy
ZW50LgorICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fc2V0X3N1Ym1lbnUoaXRlbS5n
ZXQoKSwgc3ViTWVudTIuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydCh3ZWJraXRfY29udGV4dF9t
ZW51X2l0ZW1fZ2V0X3N1Ym1lbnUoaXRlbS5nZXQoKSkgPT0gc3ViTWVudTIuZ2V0KCkpOworCisg
ICAgICAgIHF1aXRNYWluTG9vcCgpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307
CisKK3N0YXRpYyB2b2lkIHRlc3RDb250ZXh0TWVudVN1Yk1lbnUoQ29udGV4dE1lbnVTdWJtZW51
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRX
YWl0VW50aWxNYXBwZWQoKTsKKworICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keT5XZWJL
aXRHVEsrIENvbnRleHQgbWVudSB0ZXN0czwvYm9keT48L2h0bWw+IiwgImZpbGU6Ly8vIik7Cisg
ICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5zaG93Q29udGV4
dE1lbnVBbmRXYWl0VW50aWxGaW5pc2hlZCgpOworfQorCitjbGFzcyBDb250ZXh0TWVudURpc21p
c3NlZFRlc3Q6IHB1YmxpYyBDb250ZXh0TWVudVRlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJ
Ql9URVNUX0ZJWFRVUkUoQ29udGV4dE1lbnVEaXNtaXNzZWRUZXN0KTsKKworICAgIENvbnRleHRN
ZW51RGlzbWlzc2VkVGVzdCgpCisgICAgICAgIDogbV9kaXNtaXNzZWQoZmFsc2UpCisgICAgewor
ICAgIH0KKworICAgIGJvb2wgY29udGV4dE1lbnUoV2ViS2l0Q29udGV4dE1lbnUqIGNvbnRleHRN
ZW51LCBHZGtFdmVudCosIFdlYktpdEhpdFRlc3RSZXN1bHQqKQorICAgIHsKKyAgICAgICAgcXVp
dE1haW5Mb29wKCk7CisgICAgICAgIC8vIFNob3cgdGhlIGRlZmF1bHQgY29udGV4dCBtZW51Lgor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdm9pZCBjb250ZXh0TWVudURpc21p
c3NlZCgpCisgICAgeworICAgICAgICBtX2Rpc21pc3NlZCA9IHRydWU7CisgICAgICAgIENvbnRl
eHRNZW51VGVzdDo6Y29udGV4dE1lbnVEaXNtaXNzZWQoKTsKKyAgICB9CisKKyAgICB2b2lkIHNo
b3dDb250ZXh0TWVudUFuZFdhaXRVbnRpbERpc21pc3NlZCgpCisgICAgeworICAgICAgICBzaG93
Q29udGV4dE1lbnVBbmRXYWl0VW50aWxGaW5pc2hlZCgpOworICAgICAgICBkaXNtaXNzQ29udGV4
dE1lbnVBbmRXYWl0VW50aWxGaW5pc2hlZCgpOworICAgIH0KKworICAgIGJvb2wgbV9kaXNtaXNz
ZWQ7Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0Q29udGV4dE1lbnVEaXNtaXNzZWQoQ29udGV4dE1l
bnVEaXNtaXNzZWRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPnNob3dJ
bldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOworCisgICAgdGVzdC0+bG9hZEh0bWwoIjxodG1s
Pjxib2R5PldlYktpdEdUSysgQ29udGV4dCBtZW51IHRlc3RzPC9ib2R5PjwvaHRtbD4iLCAiZmls
ZTovLy8iKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3Qt
PnNob3dDb250ZXh0TWVudUFuZFdhaXRVbnRpbERpc21pc3NlZCgpOworICAgIGdfYXNzZXJ0KHRl
c3QtPm1fZGlzbWlzc2VkKTsKK30KKworY2xhc3MgQ29udGV4dE1lbnVTbWFydFNlcGFyYXRvcnNU
ZXN0OiBwdWJsaWMgQ29udGV4dE1lbnVUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVT
VF9GSVhUVVJFKENvbnRleHRNZW51U21hcnRTZXBhcmF0b3JzVGVzdCk7CisKKyAgICBib29sIGNv
bnRleHRNZW51KFdlYktpdENvbnRleHRNZW51KiBjb250ZXh0TWVudSwgR2RrRXZlbnQqLCBXZWJL
aXRIaXRUZXN0UmVzdWx0KikKKyAgICB7CisgICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfcmVt
b3ZlX2FsbChjb250ZXh0TWVudSk7CisKKyAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBl
bmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdfc2VwYXJhdG9yKCkp
OworICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0
X2NvbnRleHRfbWVudV9pdGVtX25ld19zZXBhcmF0b3IoKSk7CisgICAgICAgIHdlYmtpdF9jb250
ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3
X2Zyb21fc3RvY2tfYWN0aW9uKFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0dPX0JBQ0spKTsK
KyAgICAgICAgd2Via2l0X2NvbnRleHRfbWVudV9hcHBlbmQoY29udGV4dE1lbnUsIHdlYmtpdF9j
b250ZXh0X21lbnVfaXRlbV9uZXdfZnJvbV9zdG9ja19hY3Rpb24oV0VCS0lUX0NPTlRFWFRfTUVO
VV9BQ1RJT05fR09fRk9SV0FSRCkpOworICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVu
ZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX25ld19zZXBhcmF0b3IoKSk7
CisgICAgICAgIHdlYmtpdF9jb250ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRf
Y29udGV4dF9tZW51X2l0ZW1fbmV3X3NlcGFyYXRvcigpKTsKKyAgICAgICAgd2Via2l0X2NvbnRl
eHRfbWVudV9hcHBlbmQoY29udGV4dE1lbnUsIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9uZXdf
ZnJvbV9zdG9ja19hY3Rpb24oV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWSkpOworICAg
ICAgICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0X2NvbnRl
eHRfbWVudV9pdGVtX25ld19zZXBhcmF0b3IoKSk7CisgICAgICAgIHdlYmtpdF9jb250ZXh0X21l
bnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3X2Zyb21f
c3RvY2tfYWN0aW9uKFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0lOU1BFQ1RfRUxFTUVOVCkp
OworICAgICAgICB3ZWJraXRfY29udGV4dF9tZW51X2FwcGVuZChjb250ZXh0TWVudSwgd2Via2l0
X2NvbnRleHRfbWVudV9pdGVtX25ld19zZXBhcmF0b3IoKSk7CisgICAgICAgIHdlYmtpdF9jb250
ZXh0X21lbnVfYXBwZW5kKGNvbnRleHRNZW51LCB3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fbmV3
X3NlcGFyYXRvcigpKTsKKworICAgICAgICBxdWl0TWFpbkxvb3AoKTsKKworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgR3RrTWVudSogc2hvd0NvbnRleHRNZW51QW5kR2V0R3Rr
TWVudSgpCisgICAgeworICAgICAgICBzaG93Q29udGV4dE1lbnVBbmRXYWl0VW50aWxGaW5pc2hl
ZCgpOworICAgICAgICByZXR1cm4gZ2V0UG9wdXBNZW51KCk7CisgICAgfQorfTsKKworc3RhdGlj
IHZvaWQgdGVzdENvbnRleHRNZW51U21hcnRTZXBhcmF0b3JzKENvbnRleHRNZW51U21hcnRTZXBh
cmF0b3JzVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5zaG93SW5XaW5k
b3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKKworICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9k
eT5XZWJLaXRHVEsrIENvbnRleHQgbWVudSB0ZXN0czwvYm9keT48L2h0bWw+IiwgImZpbGU6Ly8v
Iik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBHdGtNZW51KiBt
ZW51ID0gdGVzdC0+c2hvd0NvbnRleHRNZW51QW5kR2V0R3RrTWVudSgpOworICAgIGdfYXNzZXJ0
KG1lbnUpOworCisgICAgLy8gTGVhZGluZyBhbmQgdHJhaWxpbmcgc2VwYXJhdG9ycyBhcmUgbm90
IGFkZGVkIHRvIHRoZSBjb250ZXh0IG1lbnUuCisgICAgR093blB0cjxHTGlzdD4gbWVudUl0ZW1z
KGd0a19jb250YWluZXJfZ2V0X2NoaWxkcmVuKEdUS19DT05UQUlORVIobWVudSkpKTsKKyAgICBn
X2Fzc2VydF9jbXB1aW50KGdfbGlzdF9sZW5ndGgobWVudUl0ZW1zLmdldCgpKSwgPT0sIDYpOwor
ICAgIEd0a1dpZGdldCogaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVt
cy5nZXQoKSwgMCkpOworICAgIGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShp
dGVtKSAmJiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKKyAgICBpdGVtID0gR1RLX1dJ
REdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCAxKSk7CisgICAgZ19hc3NlcnQo
IUdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2li
bGUoaXRlbSkpOworICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRl
bXMuZ2V0KCksIDIpKTsKKyAgICBnX2Fzc2VydChHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShp
dGVtKSAmJiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKKyAgICBpdGVtID0gR1RLX1dJ
REdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCAzKSk7CisgICAgZ19hc3NlcnQo
IUdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2li
bGUoaXRlbSkpOworICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRl
bXMuZ2V0KCksIDQpKTsKKyAgICBnX2Fzc2VydChHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShp
dGVtKSAmJiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKKyAgICBpdGVtID0gR1RLX1dJ
REdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCA1KSk7CisgICAgZ19hc3NlcnQo
IUdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zpc2li
bGUoaXRlbSkpOworCisgICAgLy8gSGlkaW5nIGEgbWVudSBpdGVtIGJldHdlZW4gdHdvIHNlcGFy
YXRvcnMgaGlkZXMgdGhlIGZvbGxvd2luZyBzZXBhcmF0b3IuCisgICAgR3RrQWN0aW9uKiBhY3Rp
b24gPSBndGtfYWN0aXZhdGFibGVfZ2V0X3JlbGF0ZWRfYWN0aW9uKEdUS19BQ1RJVkFUQUJMRShn
X2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCAzKSkpOworICAgIGd0a19hY3Rpb25fc2V0
X3Zpc2libGUoYWN0aW9uLCBGQUxTRSk7CisgICAgbWVudUl0ZW1zLnNldChndGtfY29udGFpbmVy
X2dldF9jaGlsZHJlbihHVEtfQ09OVEFJTkVSKG1lbnUpKSk7CisgICAgZ19hc3NlcnRfY21wdWlu
dChnX2xpc3RfbGVuZ3RoKG1lbnVJdGVtcy5nZXQoKSksID09LCA2KTsKKyAgICBpdGVtID0gR1RL
X1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCAwKSk7CisgICAgZ19hc3Nl
cnQoIUdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zp
c2libGUoaXRlbSkpOworICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51
SXRlbXMuZ2V0KCksIDEpKTsKKyAgICBnX2Fzc2VydCghR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lU
RU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7CisgICAgaXRlbSA9IEdU
S19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgMikpOworICAgIGdfYXNz
ZXJ0KEdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pICYmIGd0a193aWRnZXRfZ2V0X3Zp
c2libGUoaXRlbSkpOworICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51
SXRlbXMuZ2V0KCksIDMpKTsKKyAgICBnX2Fzc2VydCghR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lU
RU0oaXRlbSkgJiYgIWd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOworICAgIGl0ZW0gPSBH
VEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDQpKTsKKyAgICBnX2Fz
c2VydChHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAmJiAhZ3RrX3dpZGdldF9nZXRf
dmlzaWJsZShpdGVtKSk7CisgICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1l
bnVJdGVtcy5nZXQoKSwgNSkpOworICAgIGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVf
SVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKKyAgICBndGtfYWN0
aW9uX3NldF92aXNpYmxlKGFjdGlvbiwgVFJVRSk7CisKKyAgICAvLyBTaG93aW5nIGFuIGFjdGlv
biBiZXR3ZWVuIHR3byBzZXBhcmF0b3JzIHNob3dzIHRoZSBoaWRkZW4gc2VwYXJhdG9yLgorICAg
IGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDApKTsK
KyAgICBnX2Fzc2VydCghR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dp
ZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7CisgICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250
aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgMSkpOworICAgIGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJB
VE9SX01FTlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKKyAg
ICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCAyKSk7
CisgICAgZ19hc3NlcnQoR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dp
ZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7CisgICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250
aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgMykpOworICAgIGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJB
VE9SX01FTlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKKyAg
ICBpdGVtID0gR1RLX1dJREdFVChnX2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCA0KSk7
CisgICAgZ19hc3NlcnQoR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dp
ZGdldF9nZXRfdmlzaWJsZShpdGVtKSk7CisgICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250
aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgNSkpOworICAgIGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJB
VE9SX01FTlVfSVRFTShpdGVtKSAmJiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKKwor
ICAgIC8vIFRyYWlsaW5nIHNlcGFyYXRvcnMgYXJlIGhpZGRlbiB0b28uCisgICAgYWN0aW9uID0g
Z3RrX2FjdGl2YXRhYmxlX2dldF9yZWxhdGVkX2FjdGlvbihHVEtfQUNUSVZBVEFCTEUoZ19saXN0
X250aF9kYXRhKG1lbnVJdGVtcy5nZXQoKSwgNSkpKTsKKyAgICBndGtfYWN0aW9uX3NldF92aXNp
YmxlKGFjdGlvbiwgRkFMU0UpOworICAgIG1lbnVJdGVtcy5zZXQoZ3RrX2NvbnRhaW5lcl9nZXRf
Y2hpbGRyZW4oR1RLX0NPTlRBSU5FUihtZW51KSkpOworICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdf
bGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0KCksIDApKTsKKyAgICBnX2Fzc2VydCghR1RLX0lT
X1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVt
KSk7CisgICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQo
KSwgMSkpOworICAgIGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAm
JiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKKyAgICBpdGVtID0gR1RLX1dJREdFVChn
X2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCAyKSk7CisgICAgZ19hc3NlcnQoR1RLX0lT
X1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShpdGVt
KSk7CisgICAgaXRlbSA9IEdUS19XSURHRVQoZ19saXN0X250aF9kYXRhKG1lbnVJdGVtcy5nZXQo
KSwgMykpOworICAgIGdfYXNzZXJ0KCFHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVtKSAm
JiBndGtfd2lkZ2V0X2dldF92aXNpYmxlKGl0ZW0pKTsKKyAgICBpdGVtID0gR1RLX1dJREdFVChn
X2xpc3RfbnRoX2RhdGEobWVudUl0ZW1zLmdldCgpLCA0KSk7CisgICAgZ19hc3NlcnQoR1RLX0lT
X1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkgJiYgIWd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRl
bSkpOworICAgIGl0ZW0gPSBHVEtfV0lER0VUKGdfbGlzdF9udGhfZGF0YShtZW51SXRlbXMuZ2V0
KCksIDUpKTsKKyAgICBnX2Fzc2VydCghR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0oaXRlbSkg
JiYgIWd0a193aWRnZXRfZ2V0X3Zpc2libGUoaXRlbSkpOworfQorCit2b2lkIGJlZm9yZUFsbCgp
Cit7CisgICAgQ29udGV4dE1lbnVEZWZhdWx0VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImRl
ZmF1bHQtbWVudSIsIHRlc3RDb250ZXh0TWVudURlZmF1bHRNZW51KTsKKyAgICBDb250ZXh0TWVu
dUN1c3RvbVRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJwb3B1bGF0ZS1tZW51IiwgdGVzdENv
bnRleHRNZW51UG9wdWxhdGVNZW51KTsKKyAgICBDb250ZXh0TWVudUN1c3RvbUZ1bGxUZXN0Ojph
ZGQoIldlYktpdFdlYlZpZXciLCAiY3VzdG9tLW1lbnUiLCB0ZXN0Q29udGV4dE1lbnVDdXN0b21N
ZW51KTsKKyAgICBDb250ZXh0TWVudURpc2FibGVkVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3Iiwg
ImRpc2FibGUtbWVudSIsIHRlc3RDb250ZXh0TWVudURpc2FibGVNZW51KTsKKyAgICBDb250ZXh0
TWVudVN1Ym1lbnVUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAic3VibWVudSIsIHRlc3RDb250
ZXh0TWVudVN1Yk1lbnUpOworICAgIENvbnRleHRNZW51RGlzbWlzc2VkVGVzdDo6YWRkKCJXZWJL
aXRXZWJWaWV3IiwgIm1lbnUtZGlzbWlzc2VkIiwgdGVzdENvbnRleHRNZW51RGlzbWlzc2VkKTsK
KyAgICBDb250ZXh0TWVudVNtYXJ0U2VwYXJhdG9yc1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIs
ICJzbWFydC1zZXBhcmF0b3JzIiwgdGVzdENvbnRleHRNZW51U21hcnRTZXBhcmF0b3JzKTsKK30K
Kwordm9pZCBhZnRlckFsbCgpCit7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdDJHdGsvVGVzdENvb2tpZU1hbmFnZXIuY3BwIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RDb29raWVNYW5hZ2VyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
ZGM2YjViOWJhZmMwMTQyNzYzYTA0YTU2NzU4NWFmN2Y5MDM1OGJlCi0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RDb29raWVNYW5hZ2Vy
LmNwcApAQCAtMCwwICsxLDMzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEg
Uy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJXZWJLaXRUZXN0U2VydmVyLmgi
CisjaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKKyNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgorCitz
dGF0aWMgV2ViS2l0VGVzdFNlcnZlcioga1NlcnZlcjsKK3N0YXRpYyBjaGFyKiBrVGVtcERpcmVj
dG9yeTsKKworc3RhdGljIGNvbnN0IGNoYXIqIGtGaXJzdFBhcnR5RG9tYWluID0gIjEyNy4wLjAu
MSI7CitzdGF0aWMgY29uc3QgY2hhcioga1RoaXJkUGFydHlEb21haW4gPSAibG9jYWxob3N0IjsK
K3N0YXRpYyBjb25zdCBjaGFyKiBrSW5kZXhIdG1sRm9ybWF0ID0KKyAgICAiPGh0bWw+PGJvZHk+
IgorICAgICIgPHA+V2ViS2l0R1RLKyBDb29raWUgTWFuYWdlciB0ZXN0PC9wPiIKKyAgICAiIDxp
bWcgc3JjPSdodHRwOi8vbG9jYWxob3N0OiV1L2ltYWdlLnBuZycgd2lkdGg9NSBoZWlnaHQ9NT48
L2ltZz4iCisgICAgIjwvYm9keT48L2h0bWw+IjsKKworY2xhc3MgQ29va2llTWFuYWdlclRlc3Q6
IHB1YmxpYyBXZWJWaWV3VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVS
RShDb29raWVNYW5hZ2VyVGVzdCk7CisKKyAgICBzdGF0aWMgdm9pZCBjb29raWVzQ2hhbmdlZENh
bGxiYWNrKFdlYktpdENvb2tpZU1hbmFnZXIqLCBDb29raWVNYW5hZ2VyVGVzdCogdGVzdCkKKyAg
ICB7CisgICAgICAgIHRlc3QtPm1fY29va2llc0NoYW5nZWQgPSB0cnVlOworICAgICAgICBpZiAo
dGVzdC0+bV9maW5pc2hMb29wV2hlbkNvb2tpZXNDaGFuZ2UpCisgICAgICAgICAgICBnX21haW5f
bG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworICAgIH0KKworICAgIENvb2tpZU1hbmFnZXJU
ZXN0KCkKKyAgICAgICAgOiBXZWJWaWV3VGVzdCgpCisgICAgICAgICwgbV9jb29raWVNYW5hZ2Vy
KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfY29va2llX21hbmFnZXIod2Via2l0X3dlYl92aWV3X2dl
dF9jb250ZXh0KG1fd2ViVmlldykpKQorICAgICAgICAsIG1fYWNjZXB0UG9saWN5KFdFQktJVF9D
T09LSUVfUE9MSUNZX0FDQ0VQVF9OT19USElSRF9QQVJUWSkKKyAgICAgICAgLCBtX2RvbWFpbnMo
MCkKKyAgICAgICAgLCBtX2Nvb2tpZXNDaGFuZ2VkKGZhbHNlKQorICAgICAgICAsIG1fZmluaXNo
TG9vcFdoZW5Db29raWVzQ2hhbmdlKGZhbHNlKQorICAgIHsKKyAgICAgICAgZ19zaWduYWxfY29u
bmVjdChtX2Nvb2tpZU1hbmFnZXIsICJjaGFuZ2VkIiwgR19DQUxMQkFDSyhjb29raWVzQ2hhbmdl
ZENhbGxiYWNrKSwgdGhpcyk7CisgICAgfQorCisgICAgfkNvb2tpZU1hbmFnZXJUZXN0KCkKKyAg
ICB7CisgICAgICAgIGdfc3RyZnJlZXYobV9kb21haW5zKTsKKyAgICAgICAgZ19zaWduYWxfaGFu
ZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fY29va2llTWFuYWdlciwgR19TSUdOQUxfTUFUQ0hf
REFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7CisgICAgICAgIGlmIChtX2Nvb2tpZXNUZXh0RmlsZSkK
KyAgICAgICAgICAgIGdfdW5saW5rKG1fY29va2llc1RleHRGaWxlLmdldCgpKTsKKyAgICAgICAg
aWYgKG1fY29va2llc1NRTGl0ZUZpbGUpCisgICAgICAgICAgICBnX3VubGluayhtX2Nvb2tpZXNT
UUxpdGVGaWxlLmdldCgpKTsKKyAgICB9CisKKyAgICB2b2lkIHNldFBlcnNpc3RlbnRTdG9yYWdl
KFdlYktpdENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlIHN0b3JhZ2UpCisgICAgeworICAgICAgICBj
b25zdCBjaGFyKiBmaWxlbmFtZSA9IDA7CisgICAgICAgIHN3aXRjaCAoc3RvcmFnZSkgeworICAg
ICAgICBjYXNlIFdFQktJVF9DT09LSUVfUEVSU0lTVEVOVF9TVE9SQUdFX1RFWFQ6CisgICAgICAg
ICAgICBpZiAoIW1fY29va2llc1RleHRGaWxlKQorICAgICAgICAgICAgICAgIG1fY29va2llc1Rl
eHRGaWxlLnNldChnX2J1aWxkX2ZpbGVuYW1lKGtUZW1wRGlyZWN0b3J5LCAiY29va2llcy50eHQi
LCBOVUxMKSk7CisgICAgICAgICAgICBmaWxlbmFtZSA9IG1fY29va2llc1RleHRGaWxlLmdldCgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0VCS0lUX0NPT0tJRV9QRVJTSVNU
RU5UX1NUT1JBR0VfU1FMSVRFOgorICAgICAgICAgICAgaWYgKCFtX2Nvb2tpZXNTUUxpdGVGaWxl
KQorICAgICAgICAgICAgICAgIG1fY29va2llc1NRTGl0ZUZpbGUuc2V0KGdfYnVpbGRfZmlsZW5h
bWUoa1RlbXBEaXJlY3RvcnksICJjb29raWVzLmRiIiwgTlVMTCkpOworICAgICAgICAgICAgZmls
ZW5hbWUgPSBtX2Nvb2tpZXNTUUxpdGVGaWxlLmdldCgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAg
ICAgICB9CisgICAgICAgIHdlYmtpdF9jb29raWVfbWFuYWdlcl9zZXRfcGVyc2lzdGVudF9zdG9y
YWdlKG1fY29va2llTWFuYWdlciwgZmlsZW5hbWUsIHN0b3JhZ2UpOworICAgIH0KKworICAgIHN0
YXRpYyB2b2lkIGdldEFjY2VwdFBvbGljeVJlYWR5Q2FsbGJhY2soR09iamVjdCogb2JqZWN0LCBH
QXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEpCisgICAgeworICAgICAgICBH
T3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgICAgIFdlYktpdENvb2tpZUFjY2VwdFBvbGljeSBw
b2xpY3kgPSB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2FjY2VwdF9wb2xpY3lfZmluaXNoKFdF
QktJVF9DT09LSUVfTUFOQUdFUihvYmplY3QpLCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSk7Cisg
ICAgICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7CisKKyAgICAgICAgQ29va2llTWFuYWdlclRl
c3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxDb29raWVNYW5hZ2VyVGVzdCo+KHVzZXJEYXRhKTsKKyAg
ICAgICAgdGVzdC0+bV9hY2NlcHRQb2xpY3kgPSBwb2xpY3k7CisgICAgICAgIGdfbWFpbl9sb29w
X3F1aXQodGVzdC0+bV9tYWluTG9vcCk7CisgICAgfQorCisgICAgV2ViS2l0Q29va2llQWNjZXB0
UG9saWN5IGdldEFjY2VwdFBvbGljeSgpCisgICAgeworICAgICAgICBtX2FjY2VwdFBvbGljeSA9
IFdFQktJVF9DT09LSUVfUE9MSUNZX0FDQ0VQVF9OT19USElSRF9QQVJUWTsKKyAgICAgICAgd2Vi
a2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5KG1fY29va2llTWFuYWdlciwgMCwg
Z2V0QWNjZXB0UG9saWN5UmVhZHlDYWxsYmFjaywgdGhpcyk7CisgICAgICAgIGdfbWFpbl9sb29w
X3J1bihtX21haW5Mb29wKTsKKworICAgICAgICByZXR1cm4gbV9hY2NlcHRQb2xpY3k7CisgICAg
fQorCisgICAgdm9pZCBzZXRBY2NlcHRQb2xpY3koV2ViS2l0Q29va2llQWNjZXB0UG9saWN5IHBv
bGljeSkKKyAgICB7CisgICAgICAgIHdlYmtpdF9jb29raWVfbWFuYWdlcl9zZXRfYWNjZXB0X3Bv
bGljeShtX2Nvb2tpZU1hbmFnZXIsIHBvbGljeSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQg
Z2V0RG9tYWluc1JlYWR5Q2FsbGJhY2soR09iamVjdCogb2JqZWN0LCBHQXN5bmNSZXN1bHQqIHJl
c3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEpCisgICAgeworICAgICAgICBHT3duUHRyPEdFcnJvcj4g
ZXJyb3I7CisgICAgICAgIGNoYXIqKiBkb21haW5zID0gd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dl
dF9kb21haW5zX3dpdGhfY29va2llc19maW5pc2goV0VCS0lUX0NPT0tJRV9NQU5BR0VSKG9iamVj
dCksIHJlc3VsdCwgJmVycm9yLm91dFB0cigpKTsKKyAgICAgICAgZ19hc3NlcnQoIWVycm9yLmdl
dCgpKTsKKworICAgICAgICBDb29raWVNYW5hZ2VyVGVzdCogdGVzdCA9IHN0YXRpY19jYXN0PENv
b2tpZU1hbmFnZXJUZXN0Kj4odXNlckRhdGEpOworICAgICAgICB0ZXN0LT5tX2RvbWFpbnMgPSBk
b21haW5zOworICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworICAg
IH0KKworICAgIGNoYXIqKiBnZXREb21haW5zKCkKKyAgICB7CisgICAgICAgIGdfc3RyZnJlZXYo
bV9kb21haW5zKTsKKyAgICAgICAgbV9kb21haW5zID0gMDsKKyAgICAgICAgd2Via2l0X2Nvb2tp
ZV9tYW5hZ2VyX2dldF9kb21haW5zX3dpdGhfY29va2llcyhtX2Nvb2tpZU1hbmFnZXIsIDAsIGdl
dERvbWFpbnNSZWFkeUNhbGxiYWNrLCB0aGlzKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1f
bWFpbkxvb3ApOworCisgICAgICAgIHJldHVybiBtX2RvbWFpbnM7CisgICAgfQorCisgICAgYm9v
bCBoYXNEb21haW4oY29uc3QgY2hhciogZG9tYWluKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2Rv
bWFpbnMpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IG1fZG9tYWluc1tpXTsgKytpKQorICAgICAgICAgICAgaWYgKGdfc3RyX2VxdWFsKG1f
ZG9tYWluc1tpXSwgZG9tYWluKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHZvaWQgZGVsZXRlQ29va2llc0ZvckRvbWFp
bihjb25zdCBjaGFyKiBkb21haW4pCisgICAgeworICAgICAgICB3ZWJraXRfY29va2llX21hbmFn
ZXJfZGVsZXRlX2Nvb2tpZXNfZm9yX2RvbWFpbihtX2Nvb2tpZU1hbmFnZXIsIGRvbWFpbik7Cisg
ICAgfQorCisgICAgdm9pZCBkZWxldGVBbGxDb29raWVzKCkKKyAgICB7CisgICAgICAgIHdlYmtp
dF9jb29raWVfbWFuYWdlcl9kZWxldGVfYWxsX2Nvb2tpZXMobV9jb29raWVNYW5hZ2VyKTsKKyAg
ICB9CisKKyAgICB2b2lkIHdhaXRVbnRpbENvb2tpZXNDaGFuZ2VkKCkKKyAgICB7CisgICAgICAg
IG1fY29va2llc0NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgbV9maW5pc2hMb29wV2hlbkNvb2tp
ZXNDaGFuZ2UgPSB0cnVlOworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Cisg
ICAgICAgIG1fZmluaXNoTG9vcFdoZW5Db29raWVzQ2hhbmdlID0gZmFsc2U7CisgICAgfQorCisg
ICAgV2ViS2l0Q29va2llTWFuYWdlciogbV9jb29raWVNYW5hZ2VyOworICAgIFdlYktpdENvb2tp
ZUFjY2VwdFBvbGljeSBtX2FjY2VwdFBvbGljeTsKKyAgICBjaGFyKiogbV9kb21haW5zOworICAg
IGJvb2wgbV9jb29raWVzQ2hhbmdlZDsKKyAgICBib29sIG1fZmluaXNoTG9vcFdoZW5Db29raWVz
Q2hhbmdlOworICAgIEdPd25QdHI8Y2hhcj4gbV9jb29raWVzVGV4dEZpbGU7CisgICAgR093blB0
cjxjaGFyPiBtX2Nvb2tpZXNTUUxpdGVGaWxlOworfTsKKworc3RhdGljIHZvaWQgdGVzdENvb2tp
ZU1hbmFnZXJBY2NlcHRQb2xpY3koQ29va2llTWFuYWdlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCit7CisgICAgLy8gRGVmYXVsdCBwb2xpY3kgaXMgTk9fVEhJUkRfUEFSVFkuCisgICAgZ19h
c3NlcnRfY21waW50KHRlc3QtPmdldEFjY2VwdFBvbGljeSgpLCA9PSwgV0VCS0lUX0NPT0tJRV9Q
T0xJQ1lfQUNDRVBUX05PX1RISVJEX1BBUlRZKTsKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXIt
PmdldFVSSUZvclBhdGgoIi9pbmRleC5odG1sIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50
aWxMb2FkRmluaXNoZWQoKTsKKyAgICBjaGFyKiogZG9tYWlucyA9IHRlc3QtPmdldERvbWFpbnMo
KTsKKyAgICBnX2Fzc2VydChkb21haW5zKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xl
bmd0aChkb21haW5zKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcHN0cihkb21haW5zWzBdLCA9
PSwga0ZpcnN0UGFydHlEb21haW4pOworICAgIHRlc3QtPmRlbGV0ZUFsbENvb2tpZXMoKTsKKwor
ICAgIHRlc3QtPnNldEFjY2VwdFBvbGljeShXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfQUxX
QVlTKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+Z2V0QWNjZXB0UG9saWN5KCksID09LCBX
RUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfQUxXQVlTKTsKKyAgICB0ZXN0LT5sb2FkVVJJKGtT
ZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbmRleC5odG1sIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53
YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBkb21haW5zID0gdGVzdC0+Z2V0RG9tYWlucygp
OworICAgIGdfYXNzZXJ0KGRvbWFpbnMpOworICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVu
Z3RoKGRvbWFpbnMpLCA9PSwgMik7CisgICAgZ19hc3NlcnQodGVzdC0+aGFzRG9tYWluKGtGaXJz
dFBhcnR5RG9tYWluKSk7CisgICAgZ19hc3NlcnQodGVzdC0+aGFzRG9tYWluKGtUaGlyZFBhcnR5
RG9tYWluKSk7CisgICAgdGVzdC0+ZGVsZXRlQWxsQ29va2llcygpOworCisgICAgdGVzdC0+c2V0
QWNjZXB0UG9saWN5KFdFQktJVF9DT09LSUVfUE9MSUNZX0FDQ0VQVF9ORVZFUik7CisgICAgZ19h
c3NlcnRfY21waW50KHRlc3QtPmdldEFjY2VwdFBvbGljeSgpLCA9PSwgV0VCS0lUX0NPT0tJRV9Q
T0xJQ1lfQUNDRVBUX05FVkVSKTsKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZv
clBhdGgoIi9pbmRleC5odG1sIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmlu
aXNoZWQoKTsKKyAgICBkb21haW5zID0gdGVzdC0+Z2V0RG9tYWlucygpOworICAgIGdfYXNzZXJ0
KGRvbWFpbnMpOworICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKGRvbWFpbnMpLCA9
PSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RDb29raWVNYW5hZ2VyRGVsZXRlQ29va2llcyhD
b29raWVNYW5hZ2VyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5zZXRB
Y2NlcHRQb2xpY3koV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX0FMV0FZUyk7CisgICAgdGVz
dC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvaW5kZXguaHRtbCIpLmRhdGEoKSk7
CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnRfY21waW50
KGdfc3Rydl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlucygpKSwgPT0sIDIpOworCisgICAgLy8gRGVs
ZXRlIGZpcnN0IHBhcnR5IGNvb2tpZXMuCisgICAgdGVzdC0+ZGVsZXRlQ29va2llc0ZvckRvbWFp
bihrRmlyc3RQYXJ0eURvbWFpbik7CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgo
dGVzdC0+Z2V0RG9tYWlucygpKSwgPT0sIDEpOworCisgICAgLy8gRGVsZXRlIHRoaXJkIHBhcnR5
IGNvb2tpZXMuCisgICAgdGVzdC0+ZGVsZXRlQ29va2llc0ZvckRvbWFpbihrVGhpcmRQYXJ0eURv
bWFpbik7CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlu
cygpKSwgPT0sIDApOworCisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRo
KCIvaW5kZXguaHRtbCIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVk
KCk7CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlucygp
KSwgPT0sIDIpOworCisgICAgLy8gRGVsZXRlIGFsbCBjb29raWVzLgorICAgIHRlc3QtPmRlbGV0
ZUFsbENvb2tpZXMoKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0LT5n
ZXREb21haW5zKCkpLCA9PSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RDb29raWVNYW5hZ2Vy
Q29va2llc0NoYW5nZWQoQ29va2llTWFuYWdlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7
CisgICAgZ19hc3NlcnQoIXRlc3QtPm1fY29va2llc0NoYW5nZWQpOworICAgIHRlc3QtPnNldEFj
Y2VwdFBvbGljeShXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfQUxXQVlTKTsKKyAgICB0ZXN0
LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbmRleC5odG1sIikuZGF0YSgpKTsK
KyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5t
X2Nvb2tpZXNDaGFuZ2VkKTsKKworICAgIHRlc3QtPmRlbGV0ZUNvb2tpZXNGb3JEb21haW4oa0Zp
cnN0UGFydHlEb21haW4pOworICAgIHRlc3QtPndhaXRVbnRpbENvb2tpZXNDaGFuZ2VkKCk7Cisg
ICAgZ19hc3NlcnQodGVzdC0+bV9jb29raWVzQ2hhbmdlZCk7CisKKyAgICB0ZXN0LT5kZWxldGVB
bGxDb29raWVzKCk7CisgICAgdGVzdC0+d2FpdFVudGlsQ29va2llc0NoYW5nZWQoKTsKKyAgICBn
X2Fzc2VydCh0ZXN0LT5tX2Nvb2tpZXNDaGFuZ2VkKTsKK30KKworc3RhdGljIHZvaWQgdGVzdENv
b2tpZU1hbmFnZXJQZXJzaXN0ZW50U3RvcmFnZShDb29raWVNYW5hZ2VyVGVzdCogdGVzdCwgZ2Nv
bnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5zZXRBY2NlcHRQb2xpY3koV0VCS0lUX0NPT0tJRV9Q
T0xJQ1lfQUNDRVBUX0FMV0FZUyk7CisKKyAgICAvLyBUZXh0IHN0b3JhZ2UgdXNpbmcgYSBuZXcg
ZmlsZS4KKyAgICB0ZXN0LT5zZXRQZXJzaXN0ZW50U3RvcmFnZShXRUJLSVRfQ09PS0lFX1BFUlNJ
U1RFTlRfU1RPUkFHRV9URVhUKTsKKyAgICBjaGFyKiogZG9tYWlucyA9IHRlc3QtPmdldERvbWFp
bnMoKTsKKyAgICBnX2Fzc2VydChkb21haW5zKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2
X2xlbmd0aChkb21haW5zKSwgPT0sIDApOworCisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5n
ZXRVUklGb3JQYXRoKCIvaW5kZXguaHRtbCIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGls
TG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9jb29raWVzQ2hhbmdlZCk7Cisg
ICAgZG9tYWlucyA9IHRlc3QtPmdldERvbWFpbnMoKTsKKyAgICBnX2Fzc2VydChkb21haW5zKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aChkb21haW5zKSwgPT0sIDIpOworCisK
KyAgICAvLyBTUUxpdGUgc3RvcmFnZSB1c2luZyBhIG5ldyBmaWxlLgorICAgIHRlc3QtPnNldFBl
cnNpc3RlbnRTdG9yYWdlKFdFQktJVF9DT09LSUVfUEVSU0lTVEVOVF9TVE9SQUdFX1NRTElURSk7
CisgICAgZG9tYWlucyA9IHRlc3QtPmdldERvbWFpbnMoKTsKKyAgICBnX2Fzc2VydChkb21haW5z
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aChkb21haW5zKSwgPT0sIDApOwor
CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvaW5kZXguaHRtbCIp
LmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3Nl
cnQodGVzdC0+bV9jb29raWVzQ2hhbmdlZCk7CisgICAgZG9tYWlucyA9IHRlc3QtPmdldERvbWFp
bnMoKTsKKyAgICBnX2Fzc2VydChkb21haW5zKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2
X2xlbmd0aChkb21haW5zKSwgPT0sIDIpOworCisgICAgLy8gVGV4dCBzdG9yYWdlIHVzaW5nIGFu
IGV4aXN0aW5nIGZpbGUuCisgICAgdGVzdC0+c2V0UGVyc2lzdGVudFN0b3JhZ2UoV0VCS0lUX0NP
T0tJRV9QRVJTSVNURU5UX1NUT1JBR0VfVEVYVCk7CisgICAgZG9tYWlucyA9IHRlc3QtPmdldERv
bWFpbnMoKTsKKyAgICBnX2Fzc2VydChkb21haW5zKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19z
dHJ2X2xlbmd0aChkb21haW5zKSwgPT0sIDIpOworICAgIHRlc3QtPmRlbGV0ZUFsbENvb2tpZXMo
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0LT5nZXREb21haW5zKCkp
LCA9PSwgMCk7CisKKyAgICAvLyBTUUxpdGUgc3RvcmFnZSB3aXRoIGFuIGV4aXN0aW5nIGZpbGUu
CisgICAgdGVzdC0+c2V0UGVyc2lzdGVudFN0b3JhZ2UoV0VCS0lUX0NPT0tJRV9QRVJTSVNURU5U
X1NUT1JBR0VfU1FMSVRFKTsKKyAgICBkb21haW5zID0gdGVzdC0+Z2V0RG9tYWlucygpOworICAg
IGdfYXNzZXJ0KGRvbWFpbnMpOworICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKGRv
bWFpbnMpLCA9PSwgMik7CisgICAgdGVzdC0+ZGVsZXRlQWxsQ29va2llcygpOworICAgIGdfYXNz
ZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKHRlc3QtPmdldERvbWFpbnMoKSksID09LCAwKTsKK30K
Kworc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVz
c2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSosIFNvdXBDbGllbnRD
b250ZXh0KiwgZ3BvaW50ZXIpCit7CisgICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01F
VEhPRF9HRVQpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09V
UF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKKyAgICBp
ZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9pbmRleC5odG1sIikpIHsKKyAgICAgICAgY2hhciogaW5k
ZXhIdG1sID0gZ19zdHJkdXBfcHJpbnRmKGtJbmRleEh0bWxGb3JtYXQsIHNvdXBfc2VydmVyX2dl
dF9wb3J0KHNlcnZlcikpOworICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19yZXBsYWNlKG1l
c3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJTZXQtQ29va2llIiwgImZvbz1iYXI7IE1heC1BZ2U9
NjAiKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNl
X2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGluZGV4SHRtbCwgc3RybGVuKGluZGV4SHRtbCkpOwor
ICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9pbWFnZS5wbmciKSkKKyAgICAgICAg
c291cF9tZXNzYWdlX2hlYWRlcnNfcmVwbGFjZShtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAi
U2V0LUNvb2tpZSIsICJiYXo9cXV4OyBNYXgtQWdlPTYwIik7CisgICAgZWxzZQorICAgICAgICBz
b3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfRk9VTkQpOwor
ICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOwor
fQorCit2b2lkIGJlZm9yZUFsbCgpCit7CisgICAga1NlcnZlciA9IG5ldyBXZWJLaXRUZXN0U2Vy
dmVyKCk7CisgICAga1NlcnZlci0+cnVuKHNlcnZlckNhbGxiYWNrKTsKKworICAgIGtUZW1wRGly
ZWN0b3J5ID0gZ19kaXJfbWFrZV90bXAoIldlYktpdDJUZXN0cy1YWFhYWFgiLCAwKTsKKyAgICBn
X2Fzc2VydChrVGVtcERpcmVjdG9yeSk7CisKKyAgICBDb29raWVNYW5hZ2VyVGVzdDo6YWRkKCJX
ZWJLaXRDb29raWVNYW5hZ2VyIiwgImFjY2VwdC1wb2xpY3kiLCB0ZXN0Q29va2llTWFuYWdlckFj
Y2VwdFBvbGljeSk7CisgICAgQ29va2llTWFuYWdlclRlc3Q6OmFkZCgiV2ViS2l0Q29va2llTWFu
YWdlciIsICJkZWxldGUtY29va2llcyIsIHRlc3RDb29raWVNYW5hZ2VyRGVsZXRlQ29va2llcyk7
CisgICAgQ29va2llTWFuYWdlclRlc3Q6OmFkZCgiV2ViS2l0Q29va2llTWFuYWdlciIsICJjb29r
aWVzLWNoYW5nZWQiLCB0ZXN0Q29va2llTWFuYWdlckNvb2tpZXNDaGFuZ2VkKTsKKyAgICBDb29r
aWVNYW5hZ2VyVGVzdDo6YWRkKCJXZWJLaXRDb29raWVNYW5hZ2VyIiwgInBlcnNpc3RlbnQtc3Rv
cmFnZSIsIHRlc3RDb29raWVNYW5hZ2VyUGVyc2lzdGVudFN0b3JhZ2UpOworfQorCit2b2lkIGFm
dGVyQWxsKCkKK3sKKyAgICBkZWxldGUga1NlcnZlcjsKKyAgICBnX3JtZGlyKGtUZW1wRGlyZWN0
b3J5KTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0
ay9UZXN0RE9NRE9NV2luZG93LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Mkd0ay9UZXN0RE9NRE9NV2luZG93LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45OGM2ZTEwNjQxZjU5ZDhmMmZj
NGJhYTk1NTFjYjlhNmU0ZTcyYmRhCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RET01ET01XaW5kb3cuY3BwCkBAIC0wLDAgKzEsMTUy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpbmNsdWRlICJXZWJQcm9jZXNzVGVzdFJ1bm5lci5oIgorI2luY2x1ZGUgIldl
YlZpZXdUZXN0LmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Vi
a2l0Mi5oPgorCisjZGVmaW5lIEhUTUxfRE9DVU1FTlQgIjxodG1sPjxoZWFkPjx0aXRsZT48L3Rp
dGxlPjwvaGVhZD48c3R5bGUgdHlwZT0ndGV4dC9jc3MnPiN0ZXN0IHsgZm9udC1zaXplOiAxNnB4
OyB9PC9zdHlsZT48Ym9keT48cCBpZD0ndGVzdCc+dGVzdDwvcD48L2JvZHk+PC9odG1sPiIKKwor
dHlwZWRlZiBzdHJ1Y3QgeworICAgIGdib29sZWFuIGxvYWRlZDsKKyAgICBnYm9vbGVhbiBjbGlj
a2VkOworICAgIFdlYlByb2Nlc3NUZXN0UnVubmVyKiB0ZXN0UnVubmVyOworICAgIFdlYlZpZXdU
ZXN0KiB0ZXN0OworfSBEb21Eb21XaW5kb3dUZXN0U3RhdHVzOworCitzdGF0aWMgRG9tRG9tV2lu
ZG93VGVzdFN0YXR1cyBzdGF0dXM7CisKK3N0YXRpYyB2b2lkIHNpZ25hbHNOb3RpZnlDYWxsYmFj
ayhjb25zdCBnY2hhciAqa2V5LCBjb25zdCBnY2hhciAqdmFsdWUsIGdjb25zdHBvaW50ZXIpCit7
CisgICAgaWYgKGdfc3RyX2VxdWFsKGtleSwgInJlYWR5IikpIHsKKyAgICAgICAgLy8gVGhlIGRv
Y3VtZW50IHdhcyBhbHJlYWR5IGxvYWRlZCBpbiB0aGUgd2VicHJvY2VzcywgYW5kIGl0cyAibG9h
ZCIKKyAgICAgICAgLy8gc2lnbmFsIGNvdWxkbid0IGJlIGNhcHR1cmVkIG9uIHRpbWUgKHdhcyBp
c3N1ZWQgYmVmb3JlIHRoZSB0ZXN0CisgICAgICAgIC8vIHN0YXJ0ZWQpLiBXZSBsb2FkIGl0IGFn
YWluIHRvIGZvcmNlIGEgbmV3ICJsb2FkIiBzaWduYWwgaW4gdGhlCisgICAgICAgIC8vIHdlYnBy
b2Nlc3MsIHdoaWNoIHdpbGwgYmUgY2FwdHVyZWQgdGhpcyB0aW1lCisgICAgICAgIHN0YXR1cy50
ZXN0LT5sb2FkSHRtbChIVE1MX0RPQ1VNRU5ULCAwKTsKKyAgICB9CisKKyAgICBpZiAoZ19zdHJf
ZXF1YWwoa2V5LCAibG9hZGVkIikpIHsKKyAgICAgICAgc3RhdHVzLmxvYWRlZCA9IFRSVUU7Cisg
ICAgICAgIHN0YXR1cy50ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKKwor
ICAgICAgICAvLyBDbGljayBpbiBhIGtub3duIGxvY2F0aW9uIHdoZXJlIHRoZSB0ZXh0IGlzCisg
ICAgICAgIHN0YXR1cy50ZXN0LT5jbGlja01vdXNlQnV0dG9uKDIwLCAxOCwgMSwgMCk7CisgICAg
fQorCisgICAgaWYgKGdfc3RyX2VxdWFsKGtleSwgImNsaWNrZWQiKSkKKyAgICAgICAgc3RhdHVz
LmNsaWNrZWQgPSBUUlVFOworCisgICAgaWYgKGdfc3RyX2VxdWFsKGtleSwgImZpbmlzaCIpKSB7
CisgICAgICAgIHN0YXR1cy50ZXN0ID0gMDsKKyAgICAgICAgc3RhdHVzLnRlc3RSdW5uZXItPmZp
bmlzaFRlc3Qoc3RhdHVzLmxvYWRlZCAmJiBzdGF0dXMuY2xpY2tlZCk7CisgICAgfQorfQorCitz
dGF0aWMgdm9pZCBkaXNwYXRjaEV2ZW50Tm90aWZ5Q2FsbGJhY2soY29uc3QgZ2NoYXIgKmtleSwg
Y29uc3QgZ2NoYXIgKnZhbHVlLCBnY29uc3Rwb2ludGVyKQoreworICAgIGlmIChnX3N0cl9lcXVh
bChrZXksICJyZWFkeSIpKSB7CisgICAgICAgIC8vIFRoZSBkb2N1bWVudCB3YXMgYWxyZWFkeSBs
b2FkZWQgaW4gdGhlIHdlYnByb2Nlc3MsIGFuZCBpdHMgImxvYWQiCisgICAgICAgIC8vIHNpZ25h
bCBjb3VsZG4ndCBiZSBjYXB0dXJlZCBvbiB0aW1lICh3YXMgaXNzdWVkIGJlZm9yZSB0aGUgdGVz
dAorICAgICAgICAvLyBzdGFydGVkKS4gV2UgbG9hZCBpdCBhZ2FpbiB0byBmb3JjZSBhIG5ldyAi
bG9hZCIgc2lnbmFsIGluIHRoZQorICAgICAgICAvLyB3ZWJwcm9jZXNzLCB3aGljaCB3aWxsIGJl
IGNhcHR1cmVkIHRoaXMgdGltZQorICAgICAgICBzdGF0dXMudGVzdC0+bG9hZEh0bWwoSFRNTF9E
T0NVTUVOVCwgMCk7CisgICAgfQorCisgICAgaWYgKGdfc3RyX2VxdWFsKGtleSwgImxvYWRlZCIp
KQorICAgICAgICBzdGF0dXMubG9hZGVkID0gVFJVRTsKKworICAgIGlmIChnX3N0cl9lcXVhbChr
ZXksICJjbGlja2VkIikpCisgICAgICAgIHN0YXR1cy5jbGlja2VkID0gVFJVRTsKKworICAgIGlm
IChnX3N0cl9lcXVhbChrZXksICJmaW5pc2giKSkgeworICAgICAgICBzdGF0dXMudGVzdCA9IDA7
CisgICAgICAgIHN0YXR1cy50ZXN0UnVubmVyLT5maW5pc2hUZXN0KHN0YXR1cy5sb2FkZWQgJiYg
c3RhdHVzLmNsaWNrZWQpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgdGVzdFdlYktpdERPTURP
TVdpbmRvd1NpZ25hbHMoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAg
c3RhdHVzLmxvYWRlZCA9IEZBTFNFOworICAgIHN0YXR1cy5jbGlja2VkID0gRkFMU0U7CisgICAg
c3RhdHVzLnRlc3QgPSB0ZXN0OworCisgICAgc3RhdHVzLnRlc3RSdW5uZXItPnNldE5vdGlmeUNh
bGxiYWNrKEdfQ0FMTEJBQ0soc2lnbmFsc05vdGlmeUNhbGxiYWNrKSwgMCk7CisKKyAgICAvLyBU
aGUgSFRNTCBkb2N1bWVudCB3aWxsIHdlIGxvYWRlZCBsYXRlciwgd2hlbiB0aGUgdGVzdCBpcyAi
cmVhZHkiIGJlY2F1c2UKKyAgICAvLyB3ZSB3YW50IHRvIHRlc3QgdGhlICJsb2FkIiBzaWduYWwK
KworICAgIEdWYXJpYW50QnVpbGRlciBidWlsZGVyOworICAgIGdfdmFyaWFudF9idWlsZGVyX2lu
aXQoJmJ1aWxkZXIsIEdfVkFSSUFOVF9UWVBFX1ZBUkRJQ1QpOworICAgIGdfdmFyaWFudF9idWls
ZGVyX2FkZCgmYnVpbGRlciwgIntzdn0iLCAicGFnZUlEIiwgZ192YXJpYW50X25ld191aW50NjQo
d2Via2l0X3dlYl92aWV3X2dldF9wYWdlX2lkKHN0YXR1cy50ZXN0LT5tX3dlYlZpZXcpKSk7Cisg
ICAgc3RhdHVzLnRlc3RSdW5uZXItPnJ1blRlc3RBbmRXYWl0KCJXZWJLaXRET01ET01XaW5kb3ci
LCAic2lnbmFscyIsIGdfdmFyaWFudF9idWlsZGVyX2VuZCgmYnVpbGRlcikpOworICAgIGdfYXNz
ZXJ0KHN0YXR1cy50ZXN0UnVubmVyLT5nZXRUZXN0UmVzdWx0KCkpOworfQorCitzdGF0aWMgdm9p
ZCB0ZXN0V2ViS2l0RE9NRE9NV2luZG93RGlzcGF0Y2hFdmVudChXZWJWaWV3VGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKK3sKKyAgICBzdGF0dXMubG9hZGVkID0gRkFMU0U7CisgICAgc3RhdHVz
LmNsaWNrZWQgPSBGQUxTRTsKKyAgICBzdGF0dXMudGVzdCA9IHRlc3Q7CisKKyAgICBzdGF0dXMu
dGVzdFJ1bm5lci0+c2V0Tm90aWZ5Q2FsbGJhY2soR19DQUxMQkFDSyhkaXNwYXRjaEV2ZW50Tm90
aWZ5Q2FsbGJhY2spLCAwKTsKKworICAgIC8vIFRoZSBIVE1MIGRvY3VtZW50IHdpbGwgd2UgbG9h
ZGVkIGxhdGVyLCB3aGVuIHRoZSB0ZXN0IGlzICJyZWFkeSIgYmVjYXVzZQorICAgIC8vIHdlIHdh
bnQgdG8gdGVzdCB0aGUgImxvYWQiIHNpZ25hbAorCisgICAgR1ZhcmlhbnRCdWlsZGVyIGJ1aWxk
ZXI7CisgICAgZ192YXJpYW50X2J1aWxkZXJfaW5pdCgmYnVpbGRlciwgR19WQVJJQU5UX1RZUEVf
VkFSRElDVCk7CisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKCZidWlsZGVyLCAie3N2fSIsICJw
YWdlSUQiLCBnX3ZhcmlhbnRfbmV3X3VpbnQ2NCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3BhZ2VfaWQo
c3RhdHVzLnRlc3QtPm1fd2ViVmlldykpKTsKKyAgICBzdGF0dXMudGVzdFJ1bm5lci0+cnVuVGVz
dEFuZFdhaXQoIldlYktpdERPTURPTVdpbmRvdyIsICJkaXNwYXRjaC1ldmVudCIsIGdfdmFyaWFu
dF9idWlsZGVyX2VuZCgmYnVpbGRlcikpOworICAgIGdfYXNzZXJ0KHN0YXR1cy50ZXN0UnVubmVy
LT5nZXRUZXN0UmVzdWx0KCkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViS2l0RE9NRE9NV2lu
ZG93R2V0Q29tcHV0ZWRTdHlsZShXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sK
KyAgICBzdGF0dXMubG9hZGVkID0gRkFMU0U7CisgICAgc3RhdHVzLmNsaWNrZWQgPSBGQUxTRTsK
KyAgICBzdGF0dXMudGVzdCA9IHRlc3Q7CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogdGVzdEhU
TUwgPSBIVE1MX0RPQ1VNRU5UOworICAgIHN0YXR1cy50ZXN0LT5sb2FkSHRtbCh0ZXN0SFRNTCwg
MCk7CisgICAgc3RhdHVzLnRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgR1Zh
cmlhbnRCdWlsZGVyIGJ1aWxkZXI7CisgICAgZ192YXJpYW50X2J1aWxkZXJfaW5pdCgmYnVpbGRl
ciwgR19WQVJJQU5UX1RZUEVfVkFSRElDVCk7CisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKCZi
dWlsZGVyLCAie3N2fSIsICJwYWdlSUQiLCBnX3ZhcmlhbnRfbmV3X3VpbnQ2NCh3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X3BhZ2VfaWQoc3RhdHVzLnRlc3QtPm1fd2ViVmlldykpKTsKKyAgICBnX2Fzc2Vy
dChzdGF0dXMudGVzdFJ1bm5lci0+cnVuVGVzdCgiV2ViS2l0RE9NRE9NV2luZG93IiwgImdldC1j
b21wdXRlZC1zdHlsZSIsIGdfdmFyaWFudF9idWlsZGVyX2VuZCgmYnVpbGRlcikpKTsKK30KKwor
dm9pZCBiZWZvcmVBbGwoKQoreworICAgIHN0YXR1cy50ZXN0UnVubmVyID0gbmV3IFdlYlByb2Nl
c3NUZXN0UnVubmVyKCk7CisgICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF93ZWJfZXh0ZW5zaW9u
c19kaXJlY3Rvcnkod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCksIFdFQktJVF9URVNU
X1dFQl9FWFRFTlNJT05TX0RJUik7CisKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRET01E
T01XaW5kb3ciLCAic2lnbmFscyIsIHRlc3RXZWJLaXRET01ET01XaW5kb3dTaWduYWxzKTsKKyAg
ICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRET01ET01XaW5kb3ciLCAiZGlzcGF0Y2gtZXZlbnQi
LCB0ZXN0V2ViS2l0RE9NRE9NV2luZG93RGlzcGF0Y2hFdmVudCk7CisgICAgV2ViVmlld1Rlc3Q6
OmFkZCgiV2ViS2l0RE9NRE9NV2luZG93IiwgImdldC1jb21wdXRlZC1zdHlsZSIsIHRlc3RXZWJL
aXRET01ET01XaW5kb3dHZXRDb21wdXRlZFN0eWxlKTsKK30KKwordm9pZCBhZnRlckFsbCgpCit7
CisgICAgZGVsZXRlIHN0YXR1cy50ZXN0UnVubmVyOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RET01Ob2RlLmNwcCBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0RE9NTm9kZS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmQz
MjA3NzZmMzVjYTYyNWZiMTNlMGQ5ZGJhYTE0YjVlZWEzOWE2ZAotLS0gL2Rldi9udWxsCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0RE9NTm9kZS5jcHAKQEAg
LTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJZ2FsaWEgUy5MLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Rlc3RSdW5uZXIuaCIKKyNp
bmNsdWRlICJXZWJWaWV3VGVzdC5oIgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3
ZWJraXQyL3dlYmtpdDIuaD4KKworc3RhdGljIFdlYlByb2Nlc3NUZXN0UnVubmVyKiB0ZXN0UnVu
bmVyOworCitzdGF0aWMgdm9pZCB0ZXN0V2ViS2l0RE9NTm9kZUhpZXJhcmNoeU5hdmlnYXRpb24o
V2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgc3RhdGljIGNvbnN0IGNo
YXIqIHRlc3RIVE1MID0gIjxodG1sPjxoZWFkPjx0aXRsZT5UaGlzIGlzIHRoZSB0aXRsZTwvdGl0
bGU+PC9oZWFkPjxib2R5PjxwPjE8L3A+PHA+MjwvcD48cD4zPC9wPjwvYm9keT48L2h0bWw+IjsK
KyAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0SFRNTCwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9h
ZEZpbmlzaGVkKCk7CisKKyAgICBHVmFyaWFudEJ1aWxkZXIgYnVpbGRlcjsKKyAgICBnX3Zhcmlh
bnRfYnVpbGRlcl9pbml0KCZidWlsZGVyLCBHX1ZBUklBTlRfVFlQRV9WQVJESUNUKTsKKyAgICBn
X3ZhcmlhbnRfYnVpbGRlcl9hZGQoJmJ1aWxkZXIsICJ7c3Z9IiwgInBhZ2VJRCIsIGdfdmFyaWFu
dF9uZXdfdWludDY0KHdlYmtpdF93ZWJfdmlld19nZXRfcGFnZV9pZCh0ZXN0LT5tX3dlYlZpZXcp
KSk7CisgICAgZ19hc3NlcnQodGVzdFJ1bm5lci0+cnVuVGVzdCgiV2ViS2l0RE9NTm9kZSIsICJo
aWVyYXJjaHktbmF2aWdhdGlvbiIsIGdfdmFyaWFudF9idWlsZGVyX2VuZCgmYnVpbGRlcikpKTsK
K30KKworc3RhdGljIHZvaWQgdGVzdFdlYktpdERPTU5vZGVJbnNlcnRpb24oV2ViVmlld1Rlc3Qq
IHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHRlc3RIVE1M
ID0gIjxodG1sPjxib2R5PjwvYm9keT48L2h0bWw+IjsKKyAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0
SFRNTCwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBHVmFy
aWFudEJ1aWxkZXIgYnVpbGRlcjsKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9pbml0KCZidWlsZGVy
LCBHX1ZBUklBTlRfVFlQRV9WQVJESUNUKTsKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoJmJ1
aWxkZXIsICJ7c3Z9IiwgInBhZ2VJRCIsIGdfdmFyaWFudF9uZXdfdWludDY0KHdlYmtpdF93ZWJf
dmlld19nZXRfcGFnZV9pZCh0ZXN0LT5tX3dlYlZpZXcpKSk7CisgICAgZ19hc3NlcnQodGVzdFJ1
bm5lci0+cnVuVGVzdCgiV2ViS2l0RE9NTm9kZSIsICJpbnNlcnRpb24iLCBnX3ZhcmlhbnRfYnVp
bGRlcl9lbmQoJmJ1aWxkZXIpKSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJLaXRET01Ob2Rl
VGFnTmFtZXMoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgc3RhdGlj
IGNvbnN0IGNoYXIqIHRlc3RIVE1MID0gIjxodG1sPjxoZWFkPjwvaGVhZD48Ym9keT4iCisgICAg
ICAgICI8dmlkZW8gaWQ9J3ZpZGVvJyBwcmVsb2FkPSdub25lJz4iCisgICAgICAgICIgICAgPHNv
dXJjZSBzcmM9J21vdmllLm9nZycgdHlwZT0ndmlkZW8vb2dnJz4iCisgICAgICAgICIgICAgICAg
IFlvdXIgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSB2aWRlbyB0YWcuIgorICAgICAgICAi
PC92aWRlbz4iCisgICAgICAgICI8dmlkZW8gaWQ9J3ZpZGVvMicgcHJlbG9hZD0nbm9uZSc+Igor
ICAgICAgICAiICAgICA8c291cmNlIHNyYz0nbW92aWUub2dnJyB0eXBlPSd2aWRlby9vZ2cnPiIK
KyAgICAgICAgIiAgICAgICAgWW91ciBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgdGhlIHZpZGVv
IHRhZy4iCisgICAgICAgICI8L3ZpZGVvPiIKKyAgICAgICAgIjxpbnB1dCB0eXBlPSdoaWRkZW4n
IGlkPSd0ZXN0JyBuYW1lPSdmaW5pc2gnIHZhbHVlPSdmYWxzZSc+PC9ib2R5PjwvaHRtbD4iOwor
ICAgIHRlc3QtPmxvYWRIdG1sKHRlc3RIVE1MLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2Fk
RmluaXNoZWQoKTsKKworICAgIEdWYXJpYW50QnVpbGRlciBidWlsZGVyOworICAgIGdfdmFyaWFu
dF9idWlsZGVyX2luaXQoJmJ1aWxkZXIsIEdfVkFSSUFOVF9UWVBFX1ZBUkRJQ1QpOworICAgIGdf
dmFyaWFudF9idWlsZGVyX2FkZCgmYnVpbGRlciwgIntzdn0iLCAicGFnZUlEIiwgZ192YXJpYW50
X25ld191aW50NjQod2Via2l0X3dlYl92aWV3X2dldF9wYWdlX2lkKHRlc3QtPm1fd2ViVmlldykp
KTsKKyAgICBnX2Fzc2VydCh0ZXN0UnVubmVyLT5ydW5UZXN0KCJXZWJLaXRET01Ob2RlIiwgInRh
Zy1uYW1lcyIsIGdfdmFyaWFudF9idWlsZGVyX2VuZCgmYnVpbGRlcikpKTsKK30KKwordm9pZCBi
ZWZvcmVBbGwoKQoreworICAgIHRlc3RSdW5uZXIgPSBuZXcgV2ViUHJvY2Vzc1Rlc3RSdW5uZXIo
KTsKKyAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3dlYl9leHRlbnNpb25zX2RpcmVjdG9yeSh3
ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSwgV0VCS0lUX1RFU1RfV0VCX0VYVEVOU0lP
TlNfRElSKTsKKworICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdERPTU5vZGUiLCAiaGllcmFy
Y2h5LW5hdmlnYXRpb24iLCB0ZXN0V2ViS2l0RE9NTm9kZUhpZXJhcmNoeU5hdmlnYXRpb24pOwor
ICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdERPTU5vZGUiLCAiaW5zZXJ0aW9uIiwgdGVzdFdl
YktpdERPTU5vZGVJbnNlcnRpb24pOworICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdERPTU5v
ZGUiLCAidGFnLW5hbWVzIiwgdGVzdFdlYktpdERPTU5vZGVUYWdOYW1lcyk7Cit9CisKK3ZvaWQg
YWZ0ZXJBbGwoKQoreworICAgIGRlbGV0ZSB0ZXN0UnVubmVyOworfQpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3REb3dubG9hZHMuY3BwIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3REb3dubG9hZHMuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmNlMTU5OTA2YzllYjUxMjQ2ZTUwNTE2MGVlNzljYjMwNzgzMmYxMWUKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdERvd25s
b2Fkcy5jcHAKQEAgLTAsMCArMSw1MjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdh
bGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZl
ci5oIgorI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCisjaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4K
KyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CisjaW5jbHVk
ZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3
dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCitz
dGF0aWMgY2hhcioga1RlbXBEaXJlY3Rvcnk7CisKK2NsYXNzIERvd25sb2FkVGVzdDogcHVibGlj
IFRlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoRG93bmxvYWRUZXN0
KTsKKworICAgIGVudW0gRG93bmxvYWRFdmVudCB7CisgICAgICAgIFN0YXJ0ZWQsCisgICAgICAg
IFJlY2VpdmVkUmVzcG9uc2UsCisgICAgICAgIENyZWF0ZWREZXN0aW5hdGlvbiwKKyAgICAgICAg
UmVjZWl2ZWREYXRhLAorICAgICAgICBGYWlsZWQsCisgICAgICAgIEZpbmlzaGVkCisgICAgfTsK
KworICAgIHN0YXRpYyB2b2lkIHJlY2VpdmVkUmVzcG9uc2VDYWxsYmFjayhXZWJLaXREb3dubG9h
ZCogZG93bmxvYWQsIEdQYXJhbVNwZWMqLCBEb3dubG9hZFRlc3QqIHRlc3QpCisgICAgeworICAg
ICAgICBnX2Fzc2VydCh3ZWJraXRfZG93bmxvYWRfZ2V0X3Jlc3BvbnNlKGRvd25sb2FkKSk7Cisg
ICAgICAgIHRlc3QtPnJlY2VpdmVkUmVzcG9uc2UoZG93bmxvYWQpOworICAgIH0KKworICAgIHN0
YXRpYyBnYm9vbGVhbiBjcmVhdGVkRGVzdGluYXRpb25DYWxsYmFjayhXZWJLaXREb3dubG9hZCog
ZG93bmxvYWQsIGNvbnN0IGdjaGFyKiBkZXN0aW5hdGlvbiwgRG93bmxvYWRUZXN0KiB0ZXN0KQor
ICAgIHsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbihk
b3dubG9hZCkpOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2Rvd25sb2FkX2dldF9k
ZXN0aW5hdGlvbihkb3dubG9hZCksID09LCBkZXN0aW5hdGlvbik7CisgICAgICAgIHRlc3QtPmNy
ZWF0ZWREZXN0aW5hdGlvbihkb3dubG9hZCwgZGVzdGluYXRpb24pOworICAgICAgICByZXR1cm4g
VFJVRTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gcmVjZWl2ZWREYXRhQ2FsbGJhY2so
V2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBndWludDY0IGRhdGFMZW5ndGgsIERvd25sb2FkVGVz
dCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPnJlY2VpdmVkRGF0YShkb3dubG9hZCwgZGF0
YUxlbmd0aCk7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKworICAgIHN0YXRpYyBnYm9v
bGVhbiBmaW5pc2hlZENhbGxiYWNrKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgRG93bmxvYWRU
ZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+ZmluaXNoZWQoZG93bmxvYWQpOworICAg
ICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gZmFpbGVkQ2Fs
bGJhY2soV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBHRXJyb3IqIGVycm9yLCBEb3dubG9hZFRl
c3QqIHRlc3QpCisgICAgeworICAgICAgICBnX2Fzc2VydChlcnJvcik7CisgICAgICAgIHRlc3Qt
PmZhaWxlZChkb3dubG9hZCwgZXJyb3IpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisK
KyAgICBzdGF0aWMgZ2Jvb2xlYW4gZGVjaWRlRGVzdGluYXRpb25DYWxsYmFjayhXZWJLaXREb3du
bG9hZCogZG93bmxvYWQsIGNvbnN0IGdjaGFyKiBzdWdnZXN0ZWRGaWxlbmFtZSwgRG93bmxvYWRU
ZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQoc3VnZ2VzdGVkRmlsZW5hbWUpOwor
ICAgICAgICB0ZXN0LT5kZWNpZGVEZXN0aW5hdGlvbihkb3dubG9hZCwgc3VnZ2VzdGVkRmlsZW5h
bWUpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBkb3du
bG9hZFN0YXJ0ZWRDYWxsYmFjayhXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0LCBXZWJLaXREb3du
bG9hZCogZG93bmxvYWQsIERvd25sb2FkVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIGdfYXNz
ZXJ0KHdlYmtpdF9kb3dubG9hZF9nZXRfcmVxdWVzdChkb3dubG9hZCkpOworICAgICAgICB0ZXN0
LT5zdGFydGVkKGRvd25sb2FkKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChkb3dubG9hZCwg
Im5vdGlmeTo6cmVzcG9uc2UiLCBHX0NBTExCQUNLKHJlY2VpdmVkUmVzcG9uc2VDYWxsYmFjayks
IHRlc3QpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGRvd25sb2FkLCAiY3JlYXRlZC1kZXN0
aW5hdGlvbiIsIEdfQ0FMTEJBQ0soY3JlYXRlZERlc3RpbmF0aW9uQ2FsbGJhY2spLCB0ZXN0KTsK
KyAgICAgICAgZ19zaWduYWxfY29ubmVjdChkb3dubG9hZCwgInJlY2VpdmVkLWRhdGEiLCBHX0NB
TExCQUNLKHJlY2VpdmVkRGF0YUNhbGxiYWNrKSwgdGVzdCk7CisgICAgICAgIGdfc2lnbmFsX2Nv
bm5lY3QoZG93bmxvYWQsICJmaW5pc2hlZCIsIEdfQ0FMTEJBQ0soZmluaXNoZWRDYWxsYmFjayks
IHRlc3QpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGRvd25sb2FkLCAiZmFpbGVkIiwgR19D
QUxMQkFDSyhmYWlsZWRDYWxsYmFjayksIHRlc3QpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0
KGRvd25sb2FkLCAiZGVjaWRlLWRlc3RpbmF0aW9uIiwgR19DQUxMQkFDSyhkZWNpZGVEZXN0aW5h
dGlvbkNhbGxiYWNrKSwgdGVzdCk7CisgICAgfQorCisgICAgRG93bmxvYWRUZXN0KCkKKyAgICAg
ICAgOiBtX3dlYkNvbnRleHQod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCkpCisgICAg
ICAgICwgbV9tYWluTG9vcChnX21haW5fbG9vcF9uZXcoMCwgVFJVRSkpCisgICAgICAgICwgbV9k
b3dubG9hZFNpemUoMCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJDb250
ZXh0LCAiZG93bmxvYWQtc3RhcnRlZCIsIEdfQ0FMTEJBQ0soZG93bmxvYWRTdGFydGVkQ2FsbGJh
Y2spLCB0aGlzKTsKKyAgICB9CisKKyAgICB+RG93bmxvYWRUZXN0KCkKKyAgICB7CisgICAgICAg
IGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3dlYkNvbnRleHQsIEdfU0lH
TkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOworICAgICAgICBnX21haW5fbG9vcF91
bnJlZihtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRlZChXZWJL
aXREb3dubG9hZCogZG93bmxvYWQpCisgICAgeworICAgICAgICBtX2Rvd25sb2FkRXZlbnRzLmFw
cGVuZChTdGFydGVkKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRSZXNwb25z
ZShXZWJLaXREb3dubG9hZCogZG93bmxvYWQpCisgICAgeworICAgICAgICBtX2Rvd25sb2FkRXZl
bnRzLmFwcGVuZChSZWNlaXZlZFJlc3BvbnNlKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
Y3JlYXRlZERlc3RpbmF0aW9uKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgY29uc3QgY2hhciog
ZGVzdGluYXRpb24pCisgICAgeworICAgICAgICBtX2Rvd25sb2FkRXZlbnRzLmFwcGVuZChDcmVh
dGVkRGVzdGluYXRpb24pOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlZERhdGEo
V2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBndWludDY0IGRhdGFMZW5ndGgpCisgICAgeworICAg
ICAgICBtX2Rvd25sb2FkU2l6ZSArPSBkYXRhTGVuZ3RoOworICAgICAgICBpZiAoIW1fZG93bmxv
YWRFdmVudHMuY29udGFpbnMoUmVjZWl2ZWREYXRhKSkKKyAgICAgICAgICAgIG1fZG93bmxvYWRF
dmVudHMuYXBwZW5kKFJlY2VpdmVkRGF0YSk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGZp
bmlzaGVkKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0
X2NtcHVpbnQobV9kb3dubG9hZFNpemUsID09LCB3ZWJraXRfZG93bmxvYWRfZ2V0X3JlY2VpdmVk
X2RhdGFfbGVuZ3RoKGRvd25sb2FkKSk7CisgICAgICAgIG1fZG93bmxvYWRFdmVudHMuYXBwZW5k
KEZpbmlzaGVkKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX21haW5Mb29wKTsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgZmFpbGVkKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgR0Vy
cm9yKiBlcnJvcikKKyAgICB7CisgICAgICAgIG1fZG93bmxvYWRFdmVudHMuYXBwZW5kKEZhaWxl
ZCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRlY2lkZURlc3RpbmF0aW9uKFdlYktpdERv
d25sb2FkKiBkb3dubG9hZCwgY29uc3QgZ2NoYXIqIHN1Z2dlc3RlZEZpbGVuYW1lKQorICAgIHsK
KyAgICAgICAgR093blB0cjxjaGFyPiBkZXN0aW5hdGlvbihnX2J1aWxkX2ZpbGVuYW1lKGtUZW1w
RGlyZWN0b3J5LCBzdWdnZXN0ZWRGaWxlbmFtZSwgTlVMTCkpOworICAgICAgICBHT3duUHRyPGNo
YXI+IGRlc3RpbmF0aW9uVVJJKGdfZmlsZW5hbWVfdG9fdXJpKGRlc3RpbmF0aW9uLmdldCgpLCAw
LCAwKSk7CisgICAgICAgIHdlYmtpdF9kb3dubG9hZF9zZXRfZGVzdGluYXRpb24oZG93bmxvYWQs
IGRlc3RpbmF0aW9uVVJJLmdldCgpKTsKKyAgICB9CisKKyAgICBXZWJLaXREb3dubG9hZCogZG93
bmxvYWRVUklBbmRXYWl0VW50aWxGaW5pc2hlcyhjb25zdCBDU3RyaW5nJiByZXF1ZXN0VVJJKQor
ICAgIHsKKyAgICAgICAgV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkID0gd2Via2l0X3dlYl9jb250
ZXh0X2Rvd25sb2FkX3VyaShtX3dlYkNvbnRleHQsIHJlcXVlc3RVUkkuZGF0YSgpKTsKKyAgICAg
ICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChkb3dubG9h
ZCkpOworCisgICAgICAgIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QgPSB3ZWJraXRfZG93bmxv
YWRfZ2V0X3JlcXVlc3QoZG93bmxvYWQpOworICAgICAgICBnX2Fzc2VydChyZXF1ZXN0KTsKKyAg
ICAgICAgQVNTRVJUX0NNUF9DU1RSSU5HKHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfdXJpKHJlcXVl
c3QpLCA9PSwgcmVxdWVzdFVSSSk7CisKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxv
b3ApOworCisgICAgICAgIHJldHVybiBkb3dubG9hZDsKKyAgICB9CisKKyAgICB2b2lkIGNoZWNr
RGVzdGluYXRpb25BbmREZWxldGVGaWxlKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgY29uc3Qg
Y2hhciogZXhwZWN0ZWROYW1lKQorICAgIHsKKyAgICAgICAgaWYgKCF3ZWJraXRfZG93bmxvYWRf
Z2V0X2Rlc3RpbmF0aW9uKGRvd25sb2FkKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
R1JlZlB0cjxHRmlsZT4gZGVzdEZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfdXJpKHdl
YmtpdF9kb3dubG9hZF9nZXRfZGVzdGluYXRpb24oZG93bmxvYWQpKSk7CisgICAgICAgIEdPd25Q
dHI8Y2hhcj4gZGVzdEJhc2VuYW1lKGdfZmlsZV9nZXRfYmFzZW5hbWUoZGVzdEZpbGUuZ2V0KCkp
KTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKGRlc3RCYXNlbmFtZS5nZXQoKSwgPT0sIGV4cGVj
dGVkTmFtZSk7CisKKyAgICAgICAgZ19maWxlX2RlbGV0ZShkZXN0RmlsZS5nZXQoKSwgMCwgMCk7
CisgICAgfQorCisgICAgV2ViS2l0V2ViQ29udGV4dCogbV93ZWJDb250ZXh0OworICAgIEdNYWlu
TG9vcCogbV9tYWluTG9vcDsKKyAgICBWZWN0b3I8RG93bmxvYWRFdmVudD4gbV9kb3dubG9hZEV2
ZW50czsKKyAgICBndWludDY0IG1fZG93bmxvYWRTaXplOworfTsKKworc3RhdGljIHZvaWQgdGVz
dERvd25sb2FkTG9jYWxGaWxlKERvd25sb2FkVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sK
KyAgICBHT3duUHRyPGNoYXI+IHNvdXJjZVBhdGgoZ19idWlsZF9maWxlbmFtZShUZXN0OjpnZXRX
ZWJLaXQxVGVzdFJlc291Y2VzRGlyKCkuZGF0YSgpLCAidGVzdC5wZGYiLCBOVUxMKSk7CisgICAg
R1JlZlB0cjxHRmlsZT4gc291cmNlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgoc291
cmNlUGF0aC5nZXQoKSkpOworICAgIEdSZWZQdHI8R0ZpbGVJbmZvPiBzb3VyY2VJbmZvID0gYWRv
cHRHUmVmKGdfZmlsZV9xdWVyeV9pbmZvKHNvdXJjZS5nZXQoKSwgR19GSUxFX0FUVFJJQlVURV9T
VEFOREFSRF9TSVpFLCBzdGF0aWNfY2FzdDxHRmlsZVF1ZXJ5SW5mb0ZsYWdzPigwKSwgMCwgMCkp
OworICAgIEdPd25QdHI8Y2hhcj4gc291cmNlVVJJKGdfZmlsZV9nZXRfdXJpKHNvdXJjZS5nZXQo
KSkpOworICAgIEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkID0gYWRvcHRHUmVmKHRl
c3QtPmRvd25sb2FkVVJJQW5kV2FpdFVudGlsRmluaXNoZXMoc291cmNlVVJJLmdldCgpKSk7Cisg
ICAgZ19hc3NlcnQoIXdlYmtpdF9kb3dubG9hZF9nZXRfd2ViX3ZpZXcoZG93bmxvYWQuZ2V0KCkp
KTsKKworICAgIFZlY3RvcjxEb3dubG9hZFRlc3Q6OkRvd25sb2FkRXZlbnQ+JiBldmVudHMgPSB0
ZXN0LT5tX2Rvd25sb2FkRXZlbnRzOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgp
LCA9PSwgNSk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIERvd25sb2FkVGVz
dDo6U3RhcnRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIERvd25sb2Fk
VGVzdDo6UmVjZWl2ZWRSZXNwb25zZSk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwg
PT0sIERvd25sb2FkVGVzdDo6Q3JlYXRlZERlc3RpbmF0aW9uKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoZXZlbnRzWzNdLCA9PSwgRG93bmxvYWRUZXN0OjpSZWNlaXZlZERhdGEpOworICAgIGdfYXNz
ZXJ0X2NtcGludChldmVudHNbNF0sID09LCBEb3dubG9hZFRlc3Q6OkZpbmlzaGVkKTsKKworICAg
IFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QgPSB3ZWJraXRfZG93bmxvYWRfZ2V0X3JlcXVlc3Qo
ZG93bmxvYWQuZ2V0KCkpOworICAgIGdfYXNzZXJ0KHJlcXVlc3QpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KSwgPT0sIHNvdXJjZVVSSS5n
ZXQoKSk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9kb3dubG9hZFNpemUsID09LCBn
X2ZpbGVfaW5mb19nZXRfc2l6ZShzb3VyY2VJbmZvLmdldCgpKSk7CisgICAgZ19hc3NlcnQod2Vi
a2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbihkb3dubG9hZC5nZXQoKSkpOworICAgIGdfYXNz
ZXJ0X2NtcGZsb2F0KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNzKGRvd25s
b2FkLmdldCgpKSwgPT0sIDEpOworICAgIHRlc3QtPmNoZWNrRGVzdGluYXRpb25BbmREZWxldGVG
aWxlKGRvd25sb2FkLmdldCgpLCAidGVzdC5wZGYiKTsKK30KKworY2xhc3MgRG93bmxvYWRFcnJv
clRlc3Q6IHB1YmxpYyBEb3dubG9hZFRlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNU
X0ZJWFRVUkUoRG93bmxvYWRFcnJvclRlc3QpOworCisgICAgRG93bmxvYWRFcnJvclRlc3QoKQor
ICAgICAgICA6IG1fZXhwZWN0ZWRFcnJvcihXRUJLSVRfRE9XTkxPQURfRVJST1JfTkVUV09SSykK
KyAgICB7CisgICAgfQorCisgICAgdm9pZCByZWNlaXZlZFJlc3BvbnNlKFdlYktpdERvd25sb2Fk
KiBkb3dubG9hZCkKKyAgICB7CisgICAgICAgIERvd25sb2FkVGVzdDo6cmVjZWl2ZWRSZXNwb25z
ZShkb3dubG9hZCk7CisgICAgICAgIGlmIChtX2V4cGVjdGVkRXJyb3IgPT0gV0VCS0lUX0RPV05M
T0FEX0VSUk9SX0NBTkNFTExFRF9CWV9VU0VSKQorICAgICAgICAgICAgd2Via2l0X2Rvd25sb2Fk
X2NhbmNlbChkb3dubG9hZCk7CisgICAgfQorCisgICAgdm9pZCBjcmVhdGVkRGVzdGluYXRpb24o
V2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBjb25zdCBjaGFyKiBkZXN0aW5hdGlvbikKKyAgICB7
CisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgfQorCisgICAgdm9pZCBmYWls
ZWQoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBHRXJyb3IqIGVycm9yKQorICAgIHsKKyAgICAg
ICAgZ19hc3NlcnQoZ19lcnJvcl9tYXRjaGVzKGVycm9yLCBXRUJLSVRfRE9XTkxPQURfRVJST1Is
IG1fZXhwZWN0ZWRFcnJvcikpOworICAgICAgICBEb3dubG9hZFRlc3Q6OmZhaWxlZChkb3dubG9h
ZCwgZXJyb3IpOworICAgIH0KKworICAgIHZvaWQgZGVjaWRlRGVzdGluYXRpb24oV2ViS2l0RG93
bmxvYWQqIGRvd25sb2FkLCBjb25zdCBnY2hhciogc3VnZ2VzdGVkRmlsZW5hbWUpCisgICAgewor
ICAgICAgICBpZiAobV9leHBlY3RlZEVycm9yICE9IFdFQktJVF9ET1dOTE9BRF9FUlJPUl9ERVNU
SU5BVElPTikgeworICAgICAgICAgICAgRG93bmxvYWRUZXN0OjpkZWNpZGVEZXN0aW5hdGlvbihk
b3dubG9hZCwgc3VnZ2VzdGVkRmlsZW5hbWUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIHdlYmtpdF9kb3dubG9hZF9zZXRfZGVzdGluYXRpb24oZG93bmxvYWQsICJm
aWxlOi8vL2Zvby9iYXIiKTsKKyAgICB9CisKKyAgICBXZWJLaXREb3dubG9hZEVycm9yIG1fZXhw
ZWN0ZWRFcnJvcjsKK307CisKK3N0YXRpYyB2b2lkIHRlc3REb3dubG9hZExvY2FsRmlsZUVycm9y
KERvd25sb2FkRXJyb3JUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPm1f
ZXhwZWN0ZWRFcnJvciA9IFdFQktJVF9ET1dOTE9BRF9FUlJPUl9ORVRXT1JLOworICAgIEdSZWZQ
dHI8V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkID0gYWRvcHRHUmVmKHRlc3QtPmRvd25sb2FkVVJJ
QW5kV2FpdFVudGlsRmluaXNoZXMoImZpbGU6Ly8vZm9vL2JhciIpKTsKKyAgICBnX2Fzc2VydCgh
d2Via2l0X2Rvd25sb2FkX2dldF93ZWJfdmlldyhkb3dubG9hZC5nZXQoKSkpOworCisgICAgVmVj
dG9yPERvd25sb2FkVGVzdDo6RG93bmxvYWRFdmVudD4mIGV2ZW50cyA9IHRlc3QtPm1fZG93bmxv
YWRFdmVudHM7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAzKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgRG93bmxvYWRUZXN0OjpTdGFydGVkKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgRG93bmxvYWRUZXN0OjpGYWlsZWQp
OworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBEb3dubG9hZFRlc3Q6OkZpbmlz
aGVkKTsKKyAgICBldmVudHMuY2xlYXIoKTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdCh3ZWJraXRf
ZG93bmxvYWRfZ2V0X2VzdGltYXRlZF9wcm9ncmVzcyhkb3dubG9hZC5nZXQoKSksIDwsIDEpOwor
CisgICAgdGVzdC0+bV9leHBlY3RlZEVycm9yID0gV0VCS0lUX0RPV05MT0FEX0VSUk9SX0RFU1RJ
TkFUSU9OOworICAgIEdPd25QdHI8Y2hhcj4gcGF0aChnX2J1aWxkX2ZpbGVuYW1lKFRlc3Q6Omdl
dFdlYktpdDFUZXN0UmVzb3VjZXNEaXIoKS5kYXRhKCksICJ0ZXN0LnBkZiIsIE5VTEwpKTsKKyAg
ICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgocGF0
aC5nZXQoKSkpOworICAgIEdPd25QdHI8Y2hhcj4gdXJpKGdfZmlsZV9nZXRfdXJpKGZpbGUuZ2V0
KCkpKTsKKyAgICBkb3dubG9hZCA9IGFkb3B0R1JlZih0ZXN0LT5kb3dubG9hZFVSSUFuZFdhaXRV
bnRpbEZpbmlzaGVzKHVyaS5nZXQoKSkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG93bmxvYWRf
Z2V0X3dlYl92aWV3KGRvd25sb2FkLmdldCgpKSk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZl
bnRzLnNpemUoKSwgPT0sIDQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBE
b3dubG9hZFRlc3Q6OlN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09
LCBEb3dubG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOworICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHNbMl0sID09LCBEb3dubG9hZFRlc3Q6OkZhaWxlZCk7CisgICAgZ19hc3NlcnRfY21waW50
KGV2ZW50c1szXSwgPT0sIERvd25sb2FkVGVzdDo6RmluaXNoZWQpOworICAgIGV2ZW50cy5jbGVh
cigpOworICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVk
X3Byb2dyZXNzKGRvd25sb2FkLmdldCgpKSwgPCwgMSk7CisgICAgdGVzdC0+Y2hlY2tEZXN0aW5h
dGlvbkFuZERlbGV0ZUZpbGUoZG93bmxvYWQuZ2V0KCksICJiYXIiKTsKKworICAgIHRlc3QtPm1f
ZXhwZWN0ZWRFcnJvciA9IFdFQktJVF9ET1dOTE9BRF9FUlJPUl9DQU5DRUxMRURfQllfVVNFUjsK
KyAgICBkb3dubG9hZCA9IGFkb3B0R1JlZih0ZXN0LT5kb3dubG9hZFVSSUFuZFdhaXRVbnRpbEZp
bmlzaGVzKHVyaS5nZXQoKSkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG93bmxvYWRfZ2V0X3dl
Yl92aWV3KGRvd25sb2FkLmdldCgpKSk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNp
emUoKSwgPT0sIDQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBEb3dubG9h
ZFRlc3Q6OlN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBEb3du
bG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNb
Ml0sID09LCBEb3dubG9hZFRlc3Q6OkZhaWxlZCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50
c1szXSwgPT0sIERvd25sb2FkVGVzdDo6RmluaXNoZWQpOworICAgIGV2ZW50cy5jbGVhcigpOwor
ICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dy
ZXNzKGRvd25sb2FkLmdldCgpKSwgPCwgMSk7CisgICAgdGVzdC0+Y2hlY2tEZXN0aW5hdGlvbkFu
ZERlbGV0ZUZpbGUoZG93bmxvYWQuZ2V0KCksICJ0ZXN0LnBkZiIpOworfQorCitzdGF0aWMgV2Vi
S2l0VGVzdFNlcnZlcioga1NlcnZlcjsKK3N0YXRpYyBjb25zdCBjaGFyKiBrU2VydmVyU3VnZ2Vz
dGVkRmlsZW5hbWUgPSAid2Via2l0LWRvd25sb2FkZWQtZmlsZSI7CisKK3N0YXRpYyB2b2lkIHNl
cnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1lc3NhZ2UsIGNv
bnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqLCBTb3VwQ2xpZW50Q29udGV4dCosIGdwb2ludGVy
KQoreworICAgIGlmIChtZXNzYWdlLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7CisgICAg
ICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9JTVBM
RU1FTlRFRCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBHT3duUHRyPGNoYXI+IGZp
bGVQYXRoKGdfYnVpbGRfZmlsZW5hbWUoVGVzdDo6Z2V0V2ViS2l0MVRlc3RSZXNvdWNlc0Rpcigp
LmRhdGEoKSwgcGF0aCwgTlVMTCkpOworICAgIGNoYXIqIGNvbnRlbnRzOworICAgIGdzaXplIGNv
bnRlbnRzTGVuZ3RoOworICAgIGlmICghZ19maWxlX2dldF9jb250ZW50cyhmaWxlUGF0aC5nZXQo
KSwgJmNvbnRlbnRzLCAmY29udGVudHNMZW5ndGgsIDApKSB7CisgICAgICAgIHNvdXBfbWVzc2Fn
ZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7CisgICAgICAgIHNv
dXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwg
U09VUF9TVEFUVVNfT0spOworCisgICAgR093blB0cjxjaGFyPiBjb250ZW50RGlzcG9zaXRpb24o
Z19zdHJkdXBfcHJpbnRmKCJmaWxlbmFtZT0lcyIsIGtTZXJ2ZXJTdWdnZXN0ZWRGaWxlbmFtZSkp
OworICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9oZWFk
ZXJzLCAiQ29udGVudC1EaXNwb3NpdGlvbiIsIGNvbnRlbnREaXNwb3NpdGlvbi5nZXQoKSk7Cisg
ICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBf
TUVNT1JZX1RBS0UsIGNvbnRlbnRzLCBjb250ZW50c0xlbmd0aCk7CisKKyAgICBzb3VwX21lc3Nh
Z2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKK30KKworc3RhdGljIHZv
aWQgdGVzdERvd25sb2FkUmVtb3RlRmlsZShEb3dubG9hZFRlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCit7CisgICAgR1JlZlB0cjxXZWJLaXREb3dubG9hZD4gZG93bmxvYWQgPSBhZG9wdEdSZWYo
dGVzdC0+ZG93bmxvYWRVUklBbmRXYWl0VW50aWxGaW5pc2hlcyhrU2VydmVyLT5nZXRVUklGb3JQ
YXRoKCIvdGVzdC5wZGYiKSkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG93bmxvYWRfZ2V0X3dl
Yl92aWV3KGRvd25sb2FkLmdldCgpKSk7CisKKyAgICBWZWN0b3I8RG93bmxvYWRUZXN0OjpEb3du
bG9hZEV2ZW50PiYgZXZlbnRzID0gdGVzdC0+bV9kb3dubG9hZEV2ZW50czsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDUpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVu
dHNbMF0sID09LCBEb3dubG9hZFRlc3Q6OlN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHNbMV0sID09LCBEb3dubG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOworICAgIGdfYXNz
ZXJ0X2NtcGludChldmVudHNbMl0sID09LCBEb3dubG9hZFRlc3Q6OkNyZWF0ZWREZXN0aW5hdGlv
bik7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1szXSwgPT0sIERvd25sb2FkVGVzdDo6UmVj
ZWl2ZWREYXRhKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzRdLCA9PSwgRG93bmxvYWRU
ZXN0OjpGaW5pc2hlZCk7CisgICAgZXZlbnRzLmNsZWFyKCk7CisKKyAgICBXZWJLaXRVUklSZXF1
ZXN0KiByZXF1ZXN0ID0gd2Via2l0X2Rvd25sb2FkX2dldF9yZXF1ZXN0KGRvd25sb2FkLmdldCgp
KTsKKyAgICBnX2Fzc2VydChyZXF1ZXN0KTsKKyAgICBBU1NFUlRfQ01QX0NTVFJJTkcod2Via2l0
X3VyaV9yZXF1ZXN0X2dldF91cmkocmVxdWVzdCksID09LCBrU2VydmVyLT5nZXRVUklGb3JQYXRo
KCIvdGVzdC5wZGYiKSk7CisKKyAgICBnX2Fzc2VydCh3ZWJraXRfZG93bmxvYWRfZ2V0X2Rlc3Rp
bmF0aW9uKGRvd25sb2FkLmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21wZmxvYXQod2Via2l0X2Rv
d25sb2FkX2dldF9lc3RpbWF0ZWRfcHJvZ3Jlc3MoZG93bmxvYWQuZ2V0KCkpLCA9PSwgMSk7Cisg
ICAgdGVzdC0+Y2hlY2tEZXN0aW5hdGlvbkFuZERlbGV0ZUZpbGUoZG93bmxvYWQuZ2V0KCksIGtT
ZXJ2ZXJTdWdnZXN0ZWRGaWxlbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3REb3dubG9hZFJl
bW90ZUZpbGVFcnJvcihEb3dubG9hZEVycm9yVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sK
KyAgICB0ZXN0LT5tX2V4cGVjdGVkRXJyb3IgPSBXRUJLSVRfRE9XTkxPQURfRVJST1JfTkVUV09S
SzsKKyAgICBHUmVmUHRyPFdlYktpdERvd25sb2FkPiBkb3dubG9hZCA9IGFkb3B0R1JlZih0ZXN0
LT5kb3dubG9hZFVSSUFuZFdhaXRVbnRpbEZpbmlzaGVzKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgo
Ii9mb28iKSkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG93bmxvYWRfZ2V0X3dlYl92aWV3KGRv
d25sb2FkLmdldCgpKSk7CisKKyAgICBWZWN0b3I8RG93bmxvYWRUZXN0OjpEb3dubG9hZEV2ZW50
PiYgZXZlbnRzID0gdGVzdC0+bV9kb3dubG9hZEV2ZW50czsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
ZXZlbnRzLnNpemUoKSwgPT0sIDQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09
LCBEb3dubG9hZFRlc3Q6OlN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0s
ID09LCBEb3dubG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHNbMl0sID09LCBEb3dubG9hZFRlc3Q6OkZhaWxlZCk7CisgICAgZ19hc3NlcnRfY21w
aW50KGV2ZW50c1szXSwgPT0sIERvd25sb2FkVGVzdDo6RmluaXNoZWQpOworICAgIGV2ZW50cy5j
bGVhcigpOworICAgIFdlYktpdFVSSVJlc3BvbnNlKiByZXNwb25zZSA9IHdlYmtpdF9kb3dubG9h
ZF9nZXRfcmVzcG9uc2UoZG93bmxvYWQuZ2V0KCkpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Vi
a2l0X3VyaV9yZXNwb25zZV9nZXRfc3RhdHVzX2NvZGUocmVzcG9uc2UpLCA9PSwgNDA0KTsKKyAg
ICBnX2Fzc2VydF9jbXBmbG9hdCh3ZWJraXRfZG93bmxvYWRfZ2V0X2VzdGltYXRlZF9wcm9ncmVz
cyhkb3dubG9hZC5nZXQoKSksIDwsIDEpOworCisgICAgdGVzdC0+bV9leHBlY3RlZEVycm9yID0g
V0VCS0lUX0RPV05MT0FEX0VSUk9SX0RFU1RJTkFUSU9OOworICAgIGRvd25sb2FkID0gYWRvcHRH
UmVmKHRlc3QtPmRvd25sb2FkVVJJQW5kV2FpdFVudGlsRmluaXNoZXMoa1NlcnZlci0+Z2V0VVJJ
Rm9yUGF0aCgiL3Rlc3QucGRmIikpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2Rvd25sb2FkX2dl
dF93ZWJfdmlldyhkb3dubG9hZC5nZXQoKSkpOworCisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50
cy5zaXplKCksID09LCA0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgRG93
bmxvYWRUZXN0OjpTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwg
RG93bmxvYWRUZXN0OjpSZWNlaXZlZFJlc3BvbnNlKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZl
bnRzWzJdLCA9PSwgRG93bmxvYWRUZXN0OjpGYWlsZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHNbM10sID09LCBEb3dubG9hZFRlc3Q6OkZpbmlzaGVkKTsKKyAgICBldmVudHMuY2xlYXIo
KTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdCh3ZWJraXRfZG93bmxvYWRfZ2V0X2VzdGltYXRlZF9w
cm9ncmVzcyhkb3dubG9hZC5nZXQoKSksIDwsIDEpOworICAgIHRlc3QtPmNoZWNrRGVzdGluYXRp
b25BbmREZWxldGVGaWxlKGRvd25sb2FkLmdldCgpLCAiYmFyIik7CisKKyAgICB0ZXN0LT5tX2V4
cGVjdGVkRXJyb3IgPSBXRUJLSVRfRE9XTkxPQURfRVJST1JfQ0FOQ0VMTEVEX0JZX1VTRVI7Cisg
ICAgZG93bmxvYWQgPSBhZG9wdEdSZWYodGVzdC0+ZG93bmxvYWRVUklBbmRXYWl0VW50aWxGaW5p
c2hlcyhrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvdGVzdC5wZGYiKSkpOworICAgIGdfYXNzZXJ0
KCF3ZWJraXRfZG93bmxvYWRfZ2V0X3dlYl92aWV3KGRvd25sb2FkLmdldCgpKSk7CisKKyAgICBn
X2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDQpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHNbMF0sID09LCBEb3dubG9hZFRlc3Q6OlN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2Nt
cGludChldmVudHNbMV0sID09LCBEb3dubG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOworICAg
IGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBEb3dubG9hZFRlc3Q6OkZhaWxlZCk7Cisg
ICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1szXSwgPT0sIERvd25sb2FkVGVzdDo6RmluaXNoZWQp
OworICAgIGV2ZW50cy5jbGVhcigpOworICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHdlYmtpdF9kb3du
bG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNzKGRvd25sb2FkLmdldCgpKSwgPCwgMSk7CisgICAg
dGVzdC0+Y2hlY2tEZXN0aW5hdGlvbkFuZERlbGV0ZUZpbGUoZG93bmxvYWQuZ2V0KCksIGtTZXJ2
ZXJTdWdnZXN0ZWRGaWxlbmFtZSk7Cit9CisKK2NsYXNzIFdlYlZpZXdEb3dubG9hZFRlc3Q6IHB1
YmxpYyBXZWJWaWV3VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShX
ZWJWaWV3RG93bmxvYWRUZXN0KTsKKworICAgIHN0YXRpYyB2b2lkIGRvd25sb2FkU3RhcnRlZENh
bGxiYWNrKFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYktpdERvd25sb2FkKiBkb3dubG9h
ZCwgV2ViVmlld0Rvd25sb2FkVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPm1fZG93
bmxvYWQgPSBkb3dubG9hZDsKKyAgICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hl
blRlc3RGaW5pc2hlcyhHX09CSkVDVChkb3dubG9hZCkpOworICAgICAgICB0ZXN0LT5xdWl0TWFp
bkxvb3AoKTsKKyAgICB9CisKKyAgICBXZWJWaWV3RG93bmxvYWRUZXN0KCkKKyAgICB7CisgICAg
ICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KG1fd2ViVmll
dyksICJkb3dubG9hZC1zdGFydGVkIiwgR19DQUxMQkFDSyhkb3dubG9hZFN0YXJ0ZWRDYWxsYmFj
ayksIHRoaXMpOworICAgIH0KKworICAgIH5XZWJWaWV3RG93bmxvYWRUZXN0KCkKKyAgICB7Cisg
ICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZCh3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X2NvbnRleHQobV93ZWJWaWV3KSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwg
MCwgdGhpcyk7CisgICAgfQorCisgICAgdm9pZCB3YWl0VW50aWxEb3dubG9hZFN0YXJ0ZWQoKQor
ICAgIHsKKyAgICAgICAgbV9kb3dubG9hZCA9IDA7CisgICAgICAgIGdfbWFpbl9sb29wX3J1biht
X21haW5Mb29wKTsKKyAgICAgICAgZ19hc3NlcnQobV9kb3dubG9hZC5nZXQoKSk7CisgICAgfQor
CisgICAgc3RhdGljIGdib29sZWFuIGRvd25sb2FkRGVjaWRlRGVzdGluYXRpb25DYWxsYmFjayhX
ZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IGdjaGFyKiBzdWdnZXN0ZWRGaWxlbmFtZSwg
V2ViVmlld0Rvd25sb2FkVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIEdPd25QdHI8Y2hhcj4g
ZGVzdGluYXRpb24oZ19idWlsZF9maWxlbmFtZShrVGVtcERpcmVjdG9yeSwgc3VnZ2VzdGVkRmls
ZW5hbWUsIE5VTEwpKTsKKyAgICAgICAgR093blB0cjxjaGFyPiBkZXN0aW5hdGlvblVSSShnX2Zp
bGVuYW1lX3RvX3VyaShkZXN0aW5hdGlvbi5nZXQoKSwgMCwgMCkpOworICAgICAgICB3ZWJraXRf
ZG93bmxvYWRfc2V0X2Rlc3RpbmF0aW9uKGRvd25sb2FkLCBkZXN0aW5hdGlvblVSSS5nZXQoKSk7
CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGRvd25sb2Fk
RmluaXNoZWRDYWxsYmFjayhXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIFdlYlZpZXdEb3dubG9h
ZFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT5xdWl0TWFpbkxvb3AoKTsKKyAgICB9
CisKKyAgICB2b2lkIHdhaXRVbnRpbERvd25sb2FkRmluaXNoZWQoKQorICAgIHsKKyAgICAgICAg
Z19zaWduYWxfY29ubmVjdChtX2Rvd25sb2FkLmdldCgpLCAiZGVjaWRlLWRlc3RpbmF0aW9uIiwg
R19DQUxMQkFDSyhkb3dubG9hZERlY2lkZURlc3RpbmF0aW9uQ2FsbGJhY2spLCB0aGlzKTsKKyAg
ICAgICAgZ19zaWduYWxfY29ubmVjdChtX2Rvd25sb2FkLmdldCgpLCAiZmluaXNoZWQiLCBHX0NB
TExCQUNLKGRvd25sb2FkRmluaXNoZWRDYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX21haW5f
bG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgfQorCisgICAgR1JlZlB0cjxXZWJLaXREb3dubG9h
ZD4gbV9kb3dubG9hZDsKK307CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3RG93bmxvYWRVUkko
V2ViVmlld0Rvd25sb2FkVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBHUmVmUHRy
PFdlYktpdERvd25sb2FkPiBkb3dubG9hZCA9IGFkb3B0R1JlZih3ZWJraXRfd2ViX3ZpZXdfZG93
bmxvYWRfdXJpKHRlc3QtPm1fd2ViVmlldywga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3Rlc3Qu
cGRmIikuZGF0YSgpKSk7CisgICAgdGVzdC0+d2FpdFVudGlsRG93bmxvYWRTdGFydGVkKCk7Cisg
ICAgZ19hc3NlcnQodGVzdC0+bV93ZWJWaWV3ID09IHdlYmtpdF9kb3dubG9hZF9nZXRfd2ViX3Zp
ZXcoZG93bmxvYWQuZ2V0KCkpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxEb3dubG9hZEZpbmlzaGVk
KCk7CisKKyAgICBHUmVmUHRyPEdGaWxlPiBkb3dubG9hZEZpbGUgPSBhZG9wdEdSZWYoZ19maWxl
X25ld19mb3JfdXJpKHdlYmtpdF9kb3dubG9hZF9nZXRfZGVzdGluYXRpb24oZG93bmxvYWQuZ2V0
KCkpKSk7CisgICAgR1JlZlB0cjxHRmlsZUluZm8+IGRvd25sb2FkRmlsZUluZm8gPSBhZG9wdEdS
ZWYoZ19maWxlX3F1ZXJ5X2luZm8oZG93bmxvYWRGaWxlLmdldCgpLCBHX0ZJTEVfQVRUUklCVVRF
X1NUQU5EQVJEX1NJWkUsIHN0YXRpY19jYXN0PEdGaWxlUXVlcnlJbmZvRmxhZ3M+KDApLCAwLCAw
KSk7CisgICAgZ19hc3NlcnRfY21waW50KGdfZmlsZV9pbmZvX2dldF9zaXplKGRvd25sb2FkRmls
ZUluZm8uZ2V0KCkpLCA+LCAwKTsKKyAgICBnX2ZpbGVfZGVsZXRlKGRvd25sb2FkRmlsZS5nZXQo
KSwgMCwgMCk7Cit9CisKK2NsYXNzIFBvbGljeVJlc3BvbnNlRG93bmxvYWRUZXN0OiBwdWJsaWMg
V2ViVmlld0Rvd25sb2FkVGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVS
RShQb2xpY3lSZXNwb25zZURvd25sb2FkVGVzdCk7CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gZGVj
aWRlUG9saWN5Q2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0UG9saWN5RGVj
aXNpb24qIGRlY2lzaW9uLCBXZWJLaXRQb2xpY3lEZWNpc2lvblR5cGUgdHlwZSwgUG9saWN5UmVz
cG9uc2VEb3dubG9hZFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICBpZiAodHlwZSAhPSBXRUJL
SVRfUE9MSUNZX0RFQ0lTSU9OX1RZUEVfUkVTUE9OU0UpCisgICAgICAgICAgICByZXR1cm4gRkFM
U0U7CisKKyAgICAgICAgd2Via2l0X3BvbGljeV9kZWNpc2lvbl9kb3dubG9hZChkZWNpc2lvbik7
CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKworICAgIFBvbGljeVJlc3BvbnNlRG93bmxv
YWRUZXN0KCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAiZGVj
aWRlLXBvbGljeSIsIEdfQ0FMTEJBQ0soZGVjaWRlUG9saWN5Q2FsbGJhY2spLCB0aGlzKTsKKyAg
ICB9CisKKyAgICB+UG9saWN5UmVzcG9uc2VEb3dubG9hZFRlc3QoKQorICAgIHsKKyAgICAgICAg
Z19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fd2ViVmlldywgR19TSUdOQUxf
TUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7CisgICAgfQorCisgICAgdm9pZCBjYW5jZWxE
b3dubG9hZEFuZFdhaXRVbnRpbEZpbmlzaGVkKCkKKyAgICB7CisgICAgICAgIHdlYmtpdF9kb3du
bG9hZF9jYW5jZWwobV9kb3dubG9hZC5nZXQoKSk7CisgICAgICAgIHdhaXRVbnRpbERvd25sb2Fk
RmluaXNoZWQoKTsKKyAgICAgICAgbV9kb3dubG9hZCA9IDA7CisgICAgfQorfTsKKworc3RhdGlj
IHZvaWQgdGVzdFBvbGljeVJlc3BvbnNlRG93bmxvYWQoUG9saWN5UmVzcG9uc2VEb3dubG9hZFRl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8gVGVzdCB0aGF0IGEgZG93bmxvYWQg
c3RhcnRlZCBieSB0aGUgdGhlIHBvbGljeSBjaGVja2VyIGNvbnRhaW5zIHRoZSB3ZWIgdmlldy4K
KyAgICBDU3RyaW5nIHJlcXVlc3RVUkkgPSBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvdGVzdC5w
ZGYiKS5kYXRhKCk7CisgICAgdGVzdC0+bG9hZFVSSShyZXF1ZXN0VVJJLmRhdGEoKSk7CisgICAg
dGVzdC0+d2FpdFVudGlsRG93bmxvYWRTdGFydGVkKCk7CisKKyAgICBXZWJLaXRVUklSZXF1ZXN0
KiByZXF1ZXN0ID0gd2Via2l0X2Rvd25sb2FkX2dldF9yZXF1ZXN0KHRlc3QtPm1fZG93bmxvYWQu
Z2V0KCkpOworICAgIGdfYXNzZXJ0KHJlcXVlc3QpOworICAgIEFTU0VSVF9DTVBfQ1NUUklORyh3
ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KSwgPT0sIHJlcXVlc3RVUkkpOworCisg
ICAgZ19hc3NlcnQodGVzdC0+bV93ZWJWaWV3ID09IHdlYmtpdF9kb3dubG9hZF9nZXRfd2ViX3Zp
ZXcodGVzdC0+bV9kb3dubG9hZC5nZXQoKSkpOworICAgIHRlc3QtPmNhbmNlbERvd25sb2FkQW5k
V2FpdFVudGlsRmluaXNoZWQoKTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQoreworICAgIGtTZXJ2
ZXIgPSBuZXcgV2ViS2l0VGVzdFNlcnZlcigpOworICAgIGtTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxs
YmFjayk7CisKKyAgICBrVGVtcERpcmVjdG9yeSA9IGdfZGlyX21ha2VfdG1wKCJXZWJLaXQyVGVz
dHMtWFhYWFhYIiwgMCk7CisgICAgZ19hc3NlcnQoa1RlbXBEaXJlY3RvcnkpOworCisgICAgRG93
bmxvYWRUZXN0OjphZGQoIkRvd25sb2FkcyIsICJsb2NhbC1maWxlIiwgdGVzdERvd25sb2FkTG9j
YWxGaWxlKTsKKyAgICBEb3dubG9hZEVycm9yVGVzdDo6YWRkKCJEb3dubG9hZHMiLCAibG9jYWwt
ZmlsZS1lcnJvciIsIHRlc3REb3dubG9hZExvY2FsRmlsZUVycm9yKTsKKyAgICBEb3dubG9hZFRl
c3Q6OmFkZCgiRG93bmxvYWRzIiwgInJlbW90ZS1maWxlIiwgdGVzdERvd25sb2FkUmVtb3RlRmls
ZSk7CisgICAgRG93bmxvYWRFcnJvclRlc3Q6OmFkZCgiRG93bmxvYWRzIiwgInJlbW90ZS1maWxl
LWVycm9yIiwgdGVzdERvd25sb2FkUmVtb3RlRmlsZUVycm9yKTsKKyAgICBXZWJWaWV3RG93bmxv
YWRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiZG93bmxvYWQtdXJpIiwgdGVzdFdlYlZpZXdE
b3dubG9hZFVSSSk7CisgICAgUG9saWN5UmVzcG9uc2VEb3dubG9hZFRlc3Q6OmFkZCgiRG93bmxv
YWRzIiwgInBvbGljeS1kZWNpc2lvbi1kb3dubG9hZCIsIHRlc3RQb2xpY3lSZXNwb25zZURvd25s
b2FkKTsKK30KKwordm9pZCBhZnRlckFsbCgpCit7CisgICAgZGVsZXRlIGtTZXJ2ZXI7CisgICAg
Z19ybWRpcihrVGVtcERpcmVjdG9yeSk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdEZyYW1lLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Mkd0ay9UZXN0RnJhbWUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE2M2IwNzlkY2Q5NTBj
ZmFlYjVhMTc4YjFlNTdjMjY3NzcwOTM1MDkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdEZyYW1lLmNwcApAQCAtMCwwICsxLDY5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpbmNsdWRlICJXZWJQcm9jZXNzVGVzdFJ1bm5lci5oIgorI2luY2x1ZGUgIldlYlZp
ZXdUZXN0LmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0
Mi5oPgorCitzdGF0aWMgV2ViUHJvY2Vzc1Rlc3RSdW5uZXIqIHRlc3RSdW5uZXI7CisKK3N0YXRp
YyB2b2lkIHdlYmtpdEZyYW1lVGVzdFJ1bihXZWJWaWV3VGVzdCogdGVzdCwgY29uc3QgY2hhciog
dGVzdE5hbWUpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHRlc3RIVE1MID0gIjxodG1sPjxi
b2R5PjwvYm9keT48L2h0bWw+IjsKKyAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0SFRNTCwgMCk7Cisg
ICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBHVmFyaWFudEJ1aWxkZXIg
YnVpbGRlcjsKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9pbml0KCZidWlsZGVyLCBHX1ZBUklBTlRf
VFlQRV9WQVJESUNUKTsKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoJmJ1aWxkZXIsICJ7c3Z9
IiwgInBhZ2VJRCIsIGdfdmFyaWFudF9uZXdfdWludDY0KHdlYmtpdF93ZWJfdmlld19nZXRfcGFn
ZV9pZCh0ZXN0LT5tX3dlYlZpZXcpKSk7CisgICAgZ19hc3NlcnQodGVzdFJ1bm5lci0+cnVuVGVz
dCgiV2ViS2l0RnJhbWUiLCB0ZXN0TmFtZSwgZ192YXJpYW50X2J1aWxkZXJfZW5kKCZidWlsZGVy
KSkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViS2l0RnJhbWVNYWluRnJhbWUoV2ViVmlld1Rl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgd2Via2l0RnJhbWVUZXN0UnVuKHRlc3Qs
ICJtYWluLWZyYW1lIik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJLaXRGcmFtZVVSSShXZWJW
aWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB3ZWJraXRGcmFtZVRlc3RSdW4o
dGVzdCwgInVyaSIpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViS2l0RnJhbWVKYXZhU2NyaXB0
Q29udGV4dChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB3ZWJraXRG
cmFtZVRlc3RSdW4odGVzdCwgImphdmFzY3JpcHQtY29udGV4dCIpOworfQorCit2b2lkIGJlZm9y
ZUFsbCgpCit7CisgICAgdGVzdFJ1bm5lciA9IG5ldyBXZWJQcm9jZXNzVGVzdFJ1bm5lcigpOwor
ICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfd2ViX2V4dGVuc2lvbnNfZGlyZWN0b3J5KHdlYmtp
dF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpLCBXRUJLSVRfVEVTVF9XRUJfRVhURU5TSU9OU19E
SVIpOworCisgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0RnJhbWUiLCAibWFpbi1mcmFtZSIs
IHRlc3RXZWJLaXRGcmFtZU1haW5GcmFtZSk7CisgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0
RnJhbWUiLCAidXJpIiwgdGVzdFdlYktpdEZyYW1lVVJJKTsKKyAgICBXZWJWaWV3VGVzdDo6YWRk
KCJXZWJLaXRGcmFtZSIsICJqYXZhc2NyaXB0LWNvbnRleHQiLCB0ZXN0V2ViS2l0RnJhbWVKYXZh
U2NyaXB0Q29udGV4dCk7Cit9CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworICAgIGRlbGV0ZSB0ZXN0
UnVubmVyOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQy
R3RrL1Rlc3RJbnNwZWN0b3IuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQy
R3RrL1Rlc3RJbnNwZWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFmMDQzMDM4OTE0MGY0MTg1YWQ1MWRh
MmQ0YjY4Y2QxYmJjNTQ5ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdDJHdGsvVGVzdEluc3BlY3Rvci5jcHAKQEAgLTAsMCArMSwzNTYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5j
bHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCitjbGFzcyBJbnNwZWN0b3JUZXN0OiBwdWJs
aWMgV2ViVmlld1Rlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoSW5z
cGVjdG9yVGVzdCk7CisKKyAgICBlbnVtIEluc3BlY3RvckV2ZW50cyB7CisgICAgICAgIE9wZW5X
aW5kb3csCisgICAgICAgIEJyaW5nVG9Gcm9udCwKKyAgICAgICAgQ2xvc2VkLAorICAgICAgICBB
dHRhY2gsCisgICAgICAgIERldGFjaAorICAgIH07CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gb3Bl
bldpbmRvd0NhbGxiYWNrKFdlYktpdFdlYkluc3BlY3RvciosIEluc3BlY3RvclRlc3QqIHRlc3Qp
CisgICAgeworICAgICAgICByZXR1cm4gdGVzdC0+b3BlbldpbmRvdygpOworICAgIH0KKworICAg
IHN0YXRpYyBnYm9vbGVhbiBicmluZ1RvRnJvbnRDYWxsYmFjayhXZWJLaXRXZWJJbnNwZWN0b3Iq
LCBJbnNwZWN0b3JUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRlc3QtPmJyaW5n
VG9Gcm9udCgpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGNsb3NlZENhbGxiYWNrKFdlYktp
dFdlYkluc3BlY3RvciosIEluc3BlY3RvclRlc3QqIHRlc3QpCisgICAgeworICAgICAgICByZXR1
cm4gdGVzdC0+Y2xvc2VkKCk7CisgICAgfQorCisgICAgc3RhdGljIGdib29sZWFuIGF0dGFjaENh
bGxiYWNrKFdlYktpdFdlYkluc3BlY3RvciosIEluc3BlY3RvclRlc3QqIHRlc3QpCisgICAgewor
ICAgICAgICByZXR1cm4gdGVzdC0+YXR0YWNoKCk7CisgICAgfQorCisgICAgc3RhdGljIGdib29s
ZWFuIGRldGFjaENhbGxiYWNrKFdlYktpdFdlYkluc3BlY3RvciosIEluc3BlY3RvclRlc3QqIHRl
c3QpCisgICAgeworICAgICAgICByZXR1cm4gdGVzdC0+ZGV0YWNoKCk7CisgICAgfQorCisgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIGdNaW5pbXVtQXR0YWNoZWRJbnNwZWN0b3JXaWR0aCA9IDc1
MDsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZ01pbmltdW1BdHRhY2hlZEluc3BlY3Rvckhl
aWdodCA9IDI1MDsKKworICAgIEluc3BlY3RvclRlc3QoKQorICAgICAgICA6IFdlYlZpZXdUZXN0
KCkKKyAgICAgICAgLCBtX2luc3BlY3Rvcih3ZWJraXRfd2ViX3ZpZXdfZ2V0X2luc3BlY3Rvciht
X3dlYlZpZXcpKQorICAgIHsKKyAgICAgICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfZGV2
ZWxvcGVyX2V4dHJhcyh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKG1fd2ViVmlldyksIFRS
VUUpOworICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JK
RUNUKG1faW5zcGVjdG9yKSk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9pbnNwZWN0b3Is
ICJvcGVuLXdpbmRvdyIsIEdfQ0FMTEJBQ0sob3BlbldpbmRvd0NhbGxiYWNrKSwgdGhpcyk7Cisg
ICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9pbnNwZWN0b3IsICJicmluZy10by1mcm9udCIsIEdf
Q0FMTEJBQ0soYnJpbmdUb0Zyb250Q2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgZ19zaWduYWxf
Y29ubmVjdChtX2luc3BlY3RvciwgImNsb3NlZCIsIEdfQ0FMTEJBQ0soY2xvc2VkQ2FsbGJhY2sp
LCB0aGlzKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX2luc3BlY3RvciwgImF0dGFjaCIs
IEdfQ0FMTEJBQ0soYXR0YWNoQ2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgZ19zaWduYWxfY29u
bmVjdChtX2luc3BlY3RvciwgImRldGFjaCIsIEdfQ0FMTEJBQ0soZGV0YWNoQ2FsbGJhY2spLCB0
aGlzKTsKKyAgICB9CisKKyAgICB+SW5zcGVjdG9yVGVzdCgpCisgICAgeworICAgICAgICBnX3Np
Z25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9pbnNwZWN0b3IsIEdfU0lHTkFMX01B
VENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBv
cGVuV2luZG93KCkKKyAgICB7CisgICAgICAgIG1fZXZlbnRzLmFwcGVuZChPcGVuV2luZG93KTsK
KyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX21haW5Mb29wKTsKKyAgICAgICAgcmV0dXJuIFRS
VUU7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIGJyaW5nVG9Gcm9udCgpCisgICAgeworICAg
ICAgICBtX2V2ZW50cy5hcHBlbmQoQnJpbmdUb0Zyb250KTsKKyAgICAgICAgZ19tYWluX2xvb3Bf
cXVpdChtX21haW5Mb29wKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIHZp
cnR1YWwgdm9pZCBjbG9zZWQoKQorICAgIHsKKyAgICAgICAgbV9ldmVudHMuYXBwZW5kKENsb3Nl
ZCk7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIGF0dGFjaCgpCisgICAgeworICAgICAgICBt
X2V2ZW50cy5hcHBlbmQoQXR0YWNoKTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisg
ICAgdmlydHVhbCBib29sIGRldGFjaCgpCisgICAgeworICAgICAgICBtX2V2ZW50cy5hcHBlbmQo
RGV0YWNoKTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisKKyAgICBzdGF0aWMgZ2Jv
b2xlYW4gc2hvd0lkbGUoSW5zcGVjdG9yVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHdlYmtp
dF93ZWJfaW5zcGVjdG9yX3Nob3codGVzdC0+bV9pbnNwZWN0b3IpOworICAgICAgICByZXR1cm4g
RkFMU0U7CisgICAgfQorCisgICAgdm9pZCBzaG93KCkKKyAgICB7CisgICAgICAgIGdfaWRsZV9h
ZGQocmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oc2hvd0lkbGUpLCB0aGlzKTsKKyAgICAg
ICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIHZvaWQgcmVzaXpl
Vmlld0FuZEF0dGFjaCgpCisgICAgeworICAgICAgICAvLyBSZXNpemUgdGhlIHZpZXcgdG8gbWFr
ZSByb29tIGZvciB0aGUgaW5zcGVjdG9yLgorICAgICAgICByZXNpemVWaWV3KGdNaW5pbXVtQXR0
YWNoZWRJbnNwZWN0b3JXaWR0aCwgKGdNaW5pbXVtQXR0YWNoZWRJbnNwZWN0b3JIZWlnaHQgKyAx
KSAqIDQgLyAzKTsKKyAgICAgICAgd2Via2l0X3dlYl9pbnNwZWN0b3JfYXR0YWNoKG1faW5zcGVj
dG9yKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gZGV0YWNoSWRsZShJbnNwZWN0b3JU
ZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgd2Via2l0X3dlYl9pbnNwZWN0b3JfZGV0YWNoKHRl
c3QtPm1faW5zcGVjdG9yKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIHZv
aWQgZGV0YWNoQW5kV2FpdFVudGlsV2luZG93T3BlbmVkKCkKKyAgICB7CisgICAgICAgIGdfaWRs
ZV9hZGQocmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oZGV0YWNoSWRsZSksIHRoaXMpOwor
ICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgfQorCisgICAgdm9pZCBj
bG9zZSgpCisgICAgeworICAgICAgICB3ZWJraXRfd2ViX2luc3BlY3Rvcl9jbG9zZShtX2luc3Bl
Y3Rvcik7CisgICAgfQorCisgICAgV2ViS2l0V2ViSW5zcGVjdG9yKiBtX2luc3BlY3RvcjsKKyAg
ICBWZWN0b3I8SW5zcGVjdG9yRXZlbnRzPiBtX2V2ZW50czsKK307CisKK3N0YXRpYyB2b2lkIHRl
c3RJbnNwZWN0b3JEZWZhdWx0KEluc3BlY3RvclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7
CisgICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKEdUS19XSU5ET1dfVE9Q
TEVWRUwpOworICAgIHRlc3QtPnJlc2l6ZVZpZXcoMjAwLCAyMDApOworICAgIHRlc3QtPmxvYWRI
dG1sKCI8aHRtbD48Ym9keT48cD5XZWJLaXRHVEsrIEluc3BlY3RvciB0ZXN0PC9wPjwvYm9keT48
L2h0bWw+IiwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0
ZXN0LT5zaG93KCk7CisgICAgLy8gV2UgZG9uJ3QgYWRkIHRoZSB2aWV3IHRvIGEgY29udGFpbmVy
LCBzbyBjb25zdW1lIHRoZSB3ZWFrIHJlZiB3aXRoIEdSZWZQdHIuCisgICAgR1JlZlB0cjxXZWJL
aXRXZWJWaWV3QmFzZT4gaW5zcGVjdG9yVmlldyA9IHdlYmtpdF93ZWJfaW5zcGVjdG9yX2dldF93
ZWJfdmlldyh0ZXN0LT5tX2luc3BlY3Rvcik7CisgICAgZ19hc3NlcnQoaW5zcGVjdG9yVmlldy5n
ZXQoKSk7CisgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhH
X09CSkVDVChpbnNwZWN0b3JWaWV3LmdldCgpKSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJf
aW5zcGVjdG9yX2lzX2F0dGFjaGVkKHRlc3QtPm1faW5zcGVjdG9yKSk7CisgICAgZ19hc3NlcnRf
Y21wdWludCh3ZWJraXRfd2ViX2luc3BlY3Rvcl9nZXRfYXR0YWNoZWRfaGVpZ2h0KHRlc3QtPm1f
aW5zcGVjdG9yKSwgPT0sIDApOworICAgIFZlY3RvcjxJbnNwZWN0b3JUZXN0OjpJbnNwZWN0b3JF
dmVudHM+JiBldmVudHMgPSB0ZXN0LT5tX2V2ZW50czsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZl
bnRzLnNpemUoKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBJ
bnNwZWN0b3JUZXN0OjpPcGVuV2luZG93KTsKKyAgICB0ZXN0LT5tX2V2ZW50cy5jbGVhcigpOwor
CisgICAgdGVzdC0+c2hvdygpOworICAgIGV2ZW50cyA9IHRlc3QtPm1fZXZlbnRzOworICAgIGdf
YXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21waW50
KGV2ZW50c1swXSwgPT0sIEluc3BlY3RvclRlc3Q6OkJyaW5nVG9Gcm9udCk7CisgICAgdGVzdC0+
bV9ldmVudHMuY2xlYXIoKTsKKworICAgIHRlc3QtPnJlc2l6ZVZpZXdBbmRBdHRhY2goKTsKKyAg
ICBnX2Fzc2VydCh3ZWJraXRfd2ViX2luc3BlY3Rvcl9pc19hdHRhY2hlZCh0ZXN0LT5tX2luc3Bl
Y3RvcikpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X3dlYl9pbnNwZWN0b3JfZ2V0X2F0
dGFjaGVkX2hlaWdodCh0ZXN0LT5tX2luc3BlY3RvciksID49LCBJbnNwZWN0b3JUZXN0OjpnTWlu
aW11bUF0dGFjaGVkSW5zcGVjdG9ySGVpZ2h0KTsKKyAgICBldmVudHMgPSB0ZXN0LT5tX2V2ZW50
czsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDEpOworICAgIGdfYXNz
ZXJ0X2NtcGludChldmVudHNbMF0sID09LCBJbnNwZWN0b3JUZXN0OjpBdHRhY2gpOworICAgIHRl
c3QtPm1fZXZlbnRzLmNsZWFyKCk7CisKKyAgICB0ZXN0LT5kZXRhY2hBbmRXYWl0VW50aWxXaW5k
b3dPcGVuZWQoKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl9pbnNwZWN0b3JfaXNfYXR0YWNo
ZWQodGVzdC0+bV9pbnNwZWN0b3IpKTsKKyAgICBldmVudHMgPSB0ZXN0LT5tX2V2ZW50czsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDIpOworICAgIGdfYXNzZXJ0X2Nt
cGludChldmVudHNbMF0sID09LCBJbnNwZWN0b3JUZXN0OjpEZXRhY2gpOworICAgIGdfYXNzZXJ0
X2NtcGludChldmVudHNbMV0sID09LCBJbnNwZWN0b3JUZXN0OjpPcGVuV2luZG93KTsKKyAgICB0
ZXN0LT5tX2V2ZW50cy5jbGVhcigpOworCisgICAgdGVzdC0+Y2xvc2UoKTsKKyAgICBldmVudHMg
PSB0ZXN0LT5tX2V2ZW50czsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0s
IDEpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBJbnNwZWN0b3JUZXN0OjpD
bG9zZWQpOworICAgIHRlc3QtPm1fZXZlbnRzLmNsZWFyKCk7Cit9CisKK2NsYXNzIEN1c3RvbUlu
c3BlY3RvclRlc3Q6IHB1YmxpYyBJbnNwZWN0b3JUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dM
SUJfVEVTVF9GSVhUVVJFKEN1c3RvbUluc3BlY3RvclRlc3QpOworCisgICAgQ3VzdG9tSW5zcGVj
dG9yVGVzdCgpCisgICAgICAgIDogSW5zcGVjdG9yVGVzdCgpCisgICAgICAgICwgbV9pbnNwZWN0
b3JXaW5kb3coMCkKKyAgICB7CisgICAgfQorCisgICAgfkN1c3RvbUluc3BlY3RvclRlc3QoKQor
ICAgIHsKKyAgICAgICAgaWYgKG1faW5zcGVjdG9yV2luZG93KQorICAgICAgICAgICAgZ3RrX3dp
ZGdldF9kZXN0cm95KG1faW5zcGVjdG9yV2luZG93KTsKKyAgICB9CisKKyAgICBib29sIG9wZW5X
aW5kb3coKQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQoIW1faW5zcGVjdG9yV2luZG93KTsKKyAg
ICAgICAgbV9pbnNwZWN0b3JXaW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExF
VkVMKTsKKyAgICAgICAgV2ViS2l0V2ViVmlld0Jhc2UqIGluc3BlY3RvclZpZXcgPSB3ZWJraXRf
d2ViX2luc3BlY3Rvcl9nZXRfd2ViX3ZpZXcobV9pbnNwZWN0b3IpOworICAgICAgICBnX2Fzc2Vy
dChpbnNwZWN0b3JWaWV3KTsKKyAgICAgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5F
UihtX2luc3BlY3RvcldpbmRvdyksIEdUS19XSURHRVQoaW5zcGVjdG9yVmlldykpOworICAgICAg
ICBndGtfd2lkZ2V0X3Nob3dfYWxsKG1faW5zcGVjdG9yV2luZG93KTsKKworICAgICAgICByZXR1
cm4gSW5zcGVjdG9yVGVzdDo6b3BlbldpbmRvdygpOworICAgIH0KKworICAgIHZvaWQgY2xvc2Vk
KCkKKyAgICB7CisgICAgICAgIGlmIChtX2luc3BlY3RvcldpbmRvdykgeworICAgICAgICAgICAg
Z3RrX3dpZGdldF9kZXN0cm95KG1faW5zcGVjdG9yV2luZG93KTsKKyAgICAgICAgICAgIG1faW5z
cGVjdG9yV2luZG93ID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBJbnNwZWN0b3JU
ZXN0OjpjbG9zZWQoKTsKKyAgICB9CisKKyAgICBib29sIGF0dGFjaCgpCisgICAgeworICAgICAg
ICBHUmVmUHRyPFdlYktpdFdlYlZpZXdCYXNlPiBpbnNwZWN0b3JWaWV3ID0gd2Via2l0X3dlYl9p
bnNwZWN0b3JfZ2V0X3dlYl92aWV3KG1faW5zcGVjdG9yKTsKKyAgICAgICAgaWYgKG1faW5zcGVj
dG9yV2luZG93KSB7CisgICAgICAgICAgICBndGtfY29udGFpbmVyX3JlbW92ZShHVEtfQ09OVEFJ
TkVSKG1faW5zcGVjdG9yV2luZG93KSwgR1RLX1dJREdFVChpbnNwZWN0b3JWaWV3LmdldCgpKSk7
CisgICAgICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV9pbnNwZWN0b3JXaW5kb3cpOworICAg
ICAgICAgICAgbV9pbnNwZWN0b3JXaW5kb3cgPSAwOworICAgICAgICB9CisKKyAgICAgICAgR3Rr
V2lkZ2V0KiBwYW5lOworICAgICAgICBpZiAoZ3RrX2Jpbl9nZXRfY2hpbGQoR1RLX0JJTihtX3Bh
cmVudFdpbmRvdykpID09IEdUS19XSURHRVQobV93ZWJWaWV3KSkgeworICAgICAgICAgICAgR1Jl
ZlB0cjxXZWJLaXRXZWJWaWV3PiBpbnNwZWN0ZWRWaWV3ID0gbV93ZWJWaWV3OworICAgICAgICAg
ICAgZ3RrX2NvbnRhaW5lcl9yZW1vdmUoR1RLX0NPTlRBSU5FUihtX3BhcmVudFdpbmRvdyksIEdU
S19XSURHRVQobV93ZWJWaWV3KSk7CisgICAgICAgICAgICBwYW5lID0gZ3RrX3BhbmVkX25ldyhH
VEtfT1JJRU5UQVRJT05fVkVSVElDQUwpOworICAgICAgICAgICAgZ3RrX3BhbmVkX2FkZDEoR1RL
X1BBTkVEKHBhbmUpLCBHVEtfV0lER0VUKG1fd2ViVmlldykpOworICAgICAgICAgICAgZ3RrX2Nv
bnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihtX3BhcmVudFdpbmRvdyksIHBhbmUpOworICAgICAg
ICAgICAgZ3RrX3dpZGdldF9zaG93X2FsbChwYW5lKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICBwYW5lID0gZ3RrX2Jpbl9nZXRfY2hpbGQoR1RLX0JJTihtX3BhcmVudFdpbmRvdykpOwor
ICAgICAgICBndGtfcGFuZWRfc2V0X3Bvc2l0aW9uKEdUS19QQU5FRChwYW5lKSwgd2Via2l0X3dl
Yl9pbnNwZWN0b3JfZ2V0X2F0dGFjaGVkX2hlaWdodChtX2luc3BlY3RvcikpOworICAgICAgICBn
dGtfcGFuZWRfYWRkMihHVEtfUEFORUQocGFuZSksIEdUS19XSURHRVQoaW5zcGVjdG9yVmlldy5n
ZXQoKSkpOworCisgICAgICAgIHJldHVybiBJbnNwZWN0b3JUZXN0OjphdHRhY2goKTsKKyAgICB9
CisKKyAgICBib29sIGRldGFjaCgpCisgICAgeworICAgICAgICBHUmVmUHRyPFdlYktpdFdlYlZp
ZXdCYXNlPiBpbnNwZWN0b3JWaWV3ID0gd2Via2l0X3dlYl9pbnNwZWN0b3JfZ2V0X3dlYl92aWV3
KG1faW5zcGVjdG9yKTsKKyAgICAgICAgR3RrV2lkZ2V0KiBwYW5lID0gZ3RrX2Jpbl9nZXRfY2hp
bGQoR1RLX0JJTihtX3BhcmVudFdpbmRvdykpOworICAgICAgICBnX2Fzc2VydChHVEtfSVNfUEFO
RUQocGFuZSkpOworICAgICAgICBndGtfY29udGFpbmVyX3JlbW92ZShHVEtfQ09OVEFJTkVSKHBh
bmUpLCBHVEtfV0lER0VUKGluc3BlY3RvclZpZXcuZ2V0KCkpKTsKKyAgICAgICAgcmV0dXJuIElu
c3BlY3RvclRlc3Q6OmRldGFjaCgpOworICAgIH0KKworICAgIHZvaWQgZGVzdHJveVdpbmRvdygp
CisgICAgeworICAgICAgICBnX2Fzc2VydChtX2luc3BlY3RvcldpbmRvdyk7CisgICAgICAgIGd0
a193aWRnZXRfZGVzdHJveShtX2luc3BlY3RvcldpbmRvdyk7CisgICAgICAgIG1faW5zcGVjdG9y
V2luZG93ID0gMDsKKyAgICB9CisKKyAgICBHdGtXaWRnZXQqIG1faW5zcGVjdG9yV2luZG93Owor
fTsKKworc3RhdGljIHZvaWQgdGVzdEluc3BlY3Rvck1hbnVhbEF0dGFjaERldGFjaChDdXN0b21J
bnNwZWN0b3JUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPnNob3dJbldp
bmRvd0FuZFdhaXRVbnRpbE1hcHBlZChHVEtfV0lORE9XX1RPUExFVkVMKTsKKyAgICB0ZXN0LT5y
ZXNpemVWaWV3KDIwMCwgMjAwKTsKKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHk+PHA+
V2ViS2l0R1RLKyBJbnNwZWN0b3IgdGVzdDwvcD48L2JvZHk+PC9odG1sPiIsIDApOworICAgIHRl
c3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+c2hvdygpOworICAgIHRl
c3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1Qod2Via2l0
X3dlYl9pbnNwZWN0b3JfZ2V0X3dlYl92aWV3KHRlc3QtPm1faW5zcGVjdG9yKSkpOworICAgIGdf
YXNzZXJ0KCF3ZWJraXRfd2ViX2luc3BlY3Rvcl9pc19hdHRhY2hlZCh0ZXN0LT5tX2luc3BlY3Rv
cikpOworICAgIFZlY3RvcjxJbnNwZWN0b3JUZXN0OjpJbnNwZWN0b3JFdmVudHM+JiBldmVudHMg
PSB0ZXN0LT5tX2V2ZW50czsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0s
IDEpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBJbnNwZWN0b3JUZXN0OjpP
cGVuV2luZG93KTsKKyAgICB0ZXN0LT5tX2V2ZW50cy5jbGVhcigpOworCisgICAgdGVzdC0+cmVz
aXplVmlld0FuZEF0dGFjaCgpOworICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfaW5zcGVjdG9yX2lz
X2F0dGFjaGVkKHRlc3QtPm1faW5zcGVjdG9yKSk7CisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJr
aXRfd2ViX2luc3BlY3Rvcl9nZXRfYXR0YWNoZWRfaGVpZ2h0KHRlc3QtPm1faW5zcGVjdG9yKSwg
Pj0sIEluc3BlY3RvclRlc3Q6OmdNaW5pbXVtQXR0YWNoZWRJbnNwZWN0b3JIZWlnaHQpOworICAg
IGV2ZW50cyA9IHRlc3QtPm1fZXZlbnRzOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6
ZSgpLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIEluc3BlY3Rv
clRlc3Q6OkF0dGFjaCk7CisgICAgdGVzdC0+bV9ldmVudHMuY2xlYXIoKTsKKworICAgIHRlc3Qt
PmRldGFjaEFuZFdhaXRVbnRpbFdpbmRvd09wZW5lZCgpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRf
d2ViX2luc3BlY3Rvcl9pc19hdHRhY2hlZCh0ZXN0LT5tX2luc3BlY3RvcikpOworICAgIGV2ZW50
cyA9IHRlc3QtPm1fZXZlbnRzOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9
PSwgMik7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIEluc3BlY3RvclRlc3Q6
OkRldGFjaCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIEluc3BlY3RvclRl
c3Q6Ok9wZW5XaW5kb3cpOworICAgIHRlc3QtPm1fZXZlbnRzLmNsZWFyKCk7CisKKyAgICB0ZXN0
LT5yZXNpemVWaWV3QW5kQXR0YWNoKCk7CisgICAgZ19hc3NlcnQod2Via2l0X3dlYl9pbnNwZWN0
b3JfaXNfYXR0YWNoZWQodGVzdC0+bV9pbnNwZWN0b3IpKTsKKyAgICB0ZXN0LT5tX2V2ZW50cy5j
bGVhcigpOworICAgIHRlc3QtPmNsb3NlKCk7CisgICAgZXZlbnRzID0gdGVzdC0+bV9ldmVudHM7
CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAyKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgSW5zcGVjdG9yVGVzdDo6RGV0YWNoKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgSW5zcGVjdG9yVGVzdDo6Q2xvc2VkKTsKKyAgICB0
ZXN0LT5tX2V2ZW50cy5jbGVhcigpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0SW5zcGVjdG9yQ3Vz
dG9tQ29udGFpbmVyRGVzdHJveWVkKEN1c3RvbUluc3BlY3RvclRlc3QqIHRlc3QsIGdjb25zdHBv
aW50ZXIpCit7CisgICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKEdUS19X
SU5ET1dfVE9QTEVWRUwpOworICAgIHRlc3QtPnJlc2l6ZVZpZXcoMjAwLCAyMDApOworICAgIHRl
c3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keT48cD5XZWJLaXRHVEsrIEluc3BlY3RvciB0ZXN0PC9w
PjwvYm9keT48L2h0bWw+IiwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7
CisKKyAgICB0ZXN0LT5zaG93KCk7CisgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hl
blRlc3RGaW5pc2hlcyhHX09CSkVDVCh3ZWJraXRfd2ViX2luc3BlY3Rvcl9nZXRfd2ViX3ZpZXco
dGVzdC0+bV9pbnNwZWN0b3IpKSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfaW5zcGVjdG9y
X2lzX2F0dGFjaGVkKHRlc3QtPm1faW5zcGVjdG9yKSk7CisKKyAgICB0ZXN0LT5tX2V2ZW50cy5j
bGVhcigpOworICAgIHRlc3QtPmRlc3Ryb3lXaW5kb3coKTsKKyAgICBWZWN0b3I8SW5zcGVjdG9y
VGVzdDo6SW5zcGVjdG9yRXZlbnRzPiYgZXZlbnRzID0gdGVzdC0+bV9ldmVudHM7CisgICAgZ19h
c3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
ZXZlbnRzWzBdLCA9PSwgSW5zcGVjdG9yVGVzdDo6Q2xvc2VkKTsKKyAgICB0ZXN0LT5tX2V2ZW50
cy5jbGVhcigpOworfQorCit2b2lkIGJlZm9yZUFsbCgpCit7CisgICAgSW5zcGVjdG9yVGVzdDo6
YWRkKCJXZWJLaXRXZWJJbnNwZWN0b3IiLCAiZGVmYXVsdCIsIHRlc3RJbnNwZWN0b3JEZWZhdWx0
KTsKKyAgICBDdXN0b21JbnNwZWN0b3JUZXN0OjphZGQoIldlYktpdFdlYkluc3BlY3RvciIsICJt
YW51YWwtYXR0YWNoLWRldGFjaCIsIHRlc3RJbnNwZWN0b3JNYW51YWxBdHRhY2hEZXRhY2gpOwor
ICAgIEN1c3RvbUluc3BlY3RvclRlc3Q6OmFkZCgiV2ViS2l0V2ViSW5zcGVjdG9yIiwgImN1c3Rv
bS1jb250YWluZXItZGVzdHJveWVkIiwgdGVzdEluc3BlY3RvckN1c3RvbUNvbnRhaW5lckRlc3Ry
b3llZCk7Cit9CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RJbnNwZWN0b3JTZXJ2ZXIuY3BwIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RJbnNwZWN0b3JTZXJ2ZXIuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmZiYjYyY2UzZTkyOTlhZjEyOTgzYmZmZjg3NzRkNzUzMTc4NzkwOTAKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVz
dEluc3BlY3RvclNlcnZlci5jcHAKQEAgLTAsMCArMSwyOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcyBMdGQuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
KyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIldlYlZpZXdU
ZXN0LmgiCisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCisvLyBOYW1lIG9mIHRoZSB0ZXN0IHNlcnZlciBhcHBsaWNhdGlv
biBjcmVhdGluZyB0aGUgd2ViVmlldyBvYmplY3QuCitzdGF0aWMgY29uc3QgY2hhciogZ1Rlc3RT
ZXJ2ZXJBcHBOYW1lID0gIkluc3BlY3RvclRlc3RTZXJ2ZXIiOworCisvLyBNYXggc2Vjb25kcyB0
byB3YWl0IGZvciB0aGUgdGVzdCBzZXJ2ZXIgYmVmb3JlIGluc3BlY3RpbmcgaXQuCitzdGF0aWMg
Y29uc3QgaW50IGdNYXhXYWl0Rm9yQ2hpbGQgPSA1OworCisvLyBUaGUgUElEIGZvciB0aGUgdGVz
dCBzZXJ2ZXIgcnVubmluZywgc28gd2UgY2FuIGtpbGwgaXQgaWYgbmVlZGVkLgorc3RhdGljIEdQ
aWQgZ0NoaWxkUHJvY2Vzc1BpZCA9IDA7CisKKy8vIFdoZXRoZXIgdGhlIGNoaWxkIGhhcyByZXBs
aWVkIGFuZCBpdCdzIHJlYWR5Lgorc3RhdGljIGJvb2wgZ0NoaWxkSXNSZWFkeSA9IGZhbHNlOwor
CitzdGF0aWMgdm9pZCBzdG9wVGVzdFNlcnZlcigpCit7CisgICAgLy8gRG8gbm90aGluZyBpZiB0
aGVyZSdzIG5vIHNlcnZlciBydW5uaW5nLgorICAgIGlmICghZ0NoaWxkUHJvY2Vzc1BpZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgZ19zcGF3bl9jbG9zZV9waWQoZ0NoaWxkUHJvY2Vzc1BpZCk7
CisgICAga2lsbChnQ2hpbGRQcm9jZXNzUGlkLCBTSUdURVJNKTsKKyAgICBnQ2hpbGRQcm9jZXNz
UGlkID0gMDsKK30KKworc3RhdGljIHZvaWQgc2lnQWJvcnRIYW5kbGVyKGludCBzaWdOdW0pCit7
CisgICAgLy8gSnVzdCBzdG9wIHRoZSB0ZXN0IHNlcnZlciBpZiBTSUdBQlJUIHdhcyByZWNlaXZl
ZC4KKyAgICBzdG9wVGVzdFNlcnZlcigpOworfQorCitzdGF0aWMgZ3BvaW50ZXIgdGVzdFNlcnZl
ck1vbml0b3JUaHJlYWRGdW5jKGdwb2ludGVyKQoreworICAgIC8vIFdhaXQgZm9yIHRoZSBzcGVj
aWZpZWQgdGltZW91dCB0byBoYXBwZW4uCisgICAgZ191c2xlZXAoZ01heFdhaXRGb3JDaGlsZCAq
IEdfVVNFQ19QRVJfU0VDKTsKKworICAgIC8vIEtpbGwgdGhlIGNoaWxkIHByb2Nlc3MgaWYgbm90
IHJlYWR5IHlldC4KKyAgICBpZiAoIWdDaGlsZElzUmVhZHkpCisgICAgICAgIHN0b3BUZXN0U2Vy
dmVyKCk7CisKKyAgICBnX3RocmVhZF9leGl0KDApOworICAgIHJldHVybiAwOworfQorCitzdGF0
aWMgdm9pZCBzdGFydFRlc3RTZXJ2ZXJNb25pdG9yKCkKK3sKKyAgICBnQ2hpbGRJc1JlYWR5ID0g
ZmFsc2U7CisgICAgZ190aHJlYWRfbmV3KCJUZXN0U2VydmVyTW9uaXRvciIsIHRlc3RTZXJ2ZXJN
b25pdG9yVGhyZWFkRnVuYywgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHN0YXJ0VGVzdFNlcnZlcigp
Cit7CisgICAgLy8gUHJlcGFyZSBhcmd2W10gZm9yIHNwYXduaW5nIHRoZSBzZXJ2ZXIgcHJvY2Vz
cy4KKyAgICBHT3duUHRyPGNoYXI+IHRlc3RTZXJ2ZXJQYXRoKGdfYnVpbGRfZmlsZW5hbWUoV0VC
S0lUX0VYRUNfUEFUSCwgIlRlc3RXZWJLaXRBUEkiLCAiV2ViS2l0Mkd0ayIsIGdUZXN0U2VydmVy
QXBwTmFtZSwgTlVMTCkpOworCisgICAgLy8gV2UgaW5zdGFsbCBhIGhhbmRsZXIgdG8gZW5zdXJl
IHRoYXQgd2Uga2lsbCB0aGUgY2hpbGQgcHJvY2VzcworICAgIC8vIGlmIHRoZSBwYXJlbnQgZGll
cyBiZWNhdXNlIG9mIHdoYXRldmVyIHRoZSByZWFzb24gaXMuCisgICAgc2lnbmFsKFNJR0FCUlQs
IHNpZ0Fib3J0SGFuZGxlcik7CisKKyAgICBjaGFyKiB0ZXN0U2VydmVyQXJndlsyXTsKKyAgICB0
ZXN0U2VydmVyQXJndlswXSA9IHRlc3RTZXJ2ZXJQYXRoLmdldCgpOworICAgIHRlc3RTZXJ2ZXJB
cmd2WzFdID0gMDsKKworICAgIC8vIFNwYXduIHRoZSBzZXJ2ZXIsIGdldHRpbmcgaXRzIHN0ZG91
dCBmaWxlIGRlc2NyaXB0b3IgdG8gc2V0IGEKKyAgICAvLyBjb21tdW5pY2F0aW9uIGNoYW5uZWws
IHNvIHdlIGtub3cgd2hlbiBpdCdzIHJlYWR5LgorICAgIGludCBjaGlsZFN0ZG91dCA9IDA7Cisg
ICAgZ19hc3NlcnQoZ19zcGF3bl9hc3luY193aXRoX3BpcGVzKDAsIHRlc3RTZXJ2ZXJBcmd2LCAw
LCBzdGF0aWNfY2FzdDxHU3Bhd25GbGFncz4oMCksIDAsIDAsCisgICAgICAgICZnQ2hpbGRQcm9j
ZXNzUGlkLCAwLCAmY2hpbGRTdGRvdXQsIDAsIDApKTsKKworICAgIC8vIFN0YXJ0IG1vbml0b3Jp
bmcgdGhlIHRlc3Qgc2VydmVyIChpbiBhIHNlcGFyYXRlIHRocmVhZCkgdG8KKyAgICAvLyBlbnN1
cmUgd2UgZG9uJ3QgYmxvY2sgb24gdGhlIGNoaWxkIHByb2Nlc3MgbW9yZSB0aGFuIGEgdGltZW91
dC4KKyAgICBzdGFydFRlc3RTZXJ2ZXJNb25pdG9yKCk7CisKKyAgICBjaGFyIG1zZ1syXTsKKyAg
ICBHSU9DaGFubmVsKiBpb0NoYW5uZWwgPSBnX2lvX2NoYW5uZWxfdW5peF9uZXcoY2hpbGRTdGRv
dXQpOworICAgIGlmIChnX2lvX2NoYW5uZWxfcmVhZF9jaGFycyhpb0NoYW5uZWwsIG1zZywgMiwg
MCwgMCkgPT0gR19JT19TVEFUVVNfTk9STUFMKSB7CisgICAgICAgIC8vIENoZWNrIHdoZXRoZXIg
dGhlIHNlcnZlciBzZW50IGEgbWVzc2FnZSBzYXlpbmcgaXQncyByZWFkeQorICAgICAgICAvLyBh
bmQgc3RvcmUgdGhlIHJlc3VsdCBnbG9iYWxseSwgc28gdGhlIG1vbml0b3IgY2FuIHNlZSBpdC4K
KyAgICAgICAgZ0NoaWxkSXNSZWFkeSA9IG1zZ1swXSA9PSAnTycgJiYgbXNnWzFdID09ICdLJzsK
KyAgICB9CisgICAgZ19pb19jaGFubmVsX3VucmVmKGlvQ2hhbm5lbCk7CisgICAgY2xvc2UoY2hp
bGRTdGRvdXQpOworCisgICAgLy8gVGhlIHRpbWVvdXQgd2FzIHJlYWNoZWQgYW5kIHRoZSBzZXJ2
ZXIgaXMgbm90IHJlYWR5IHlldCwgc28KKyAgICAvLyBzdG9wIGl0IGlubWVkaWF0ZWx5LCBhbmQg
bGV0IHRoZSB1bml0IHRlc3RzIGZhaWwuCisgICAgaWYgKCFnQ2hpbGRJc1JlYWR5KQorICAgICAg
ICBzdG9wVGVzdFNlcnZlcigpOworfQorCitjbGFzcyBJbnNwZWN0b3JTZXJ2ZXJUZXN0OiBwdWJs
aWMgV2ViVmlld1Rlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoSW5z
cGVjdG9yU2VydmVyVGVzdCk7CisKKyAgICBJbnNwZWN0b3JTZXJ2ZXJUZXN0KCkKKyAgICAgICAg
OiBXZWJWaWV3VGVzdCgpCisgICAgeworICAgIH0KKworICAgIGJvb2wgZ2V0UGFnZUxpc3QoKQor
ICAgIHsKKyAgICAgICAgbG9hZEh0bWwoIjxzY3JpcHQgdHlwZT1cInRleHQvamF2YXNjcmlwdFwi
PlxuIgorICAgICAgICAgICAgInZhciBwYWdlcztcbiIKKyAgICAgICAgICAgICJ2YXIgeGhyID0g
bmV3IFhNTEh0dHBSZXF1ZXN0O1xuIgorICAgICAgICAgICAgInhoci5vcGVuKFwiR0VUXCIsIFwi
L3BhZ2VsaXN0Lmpzb25cIik7XG4iCisgICAgICAgICAgICAieGhyLm9ubG9hZCA9IGZ1bmN0aW9u
KGUpIHtcbiIKKyAgICAgICAgICAgICAgICAiaWYgKHhoci5zdGF0dXMgPT0gMjAwKSB7XG4iCisg
ICAgICAgICAgICAgICAgICAgICJwYWdlcyA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7
XG4iCisgICAgICAgICAgICAgICAgICAgICJkb2N1bWVudC50aXRsZSA9IFwiT0tcIjtcbiIKKyAg
ICAgICAgICAgICAgICAifSBlbHNlIFxuIgorICAgICAgICAgICAgICAgICAgICAiZG9jdW1lbnQu
dGl0bGUgPSBcIkZBSUxcIjtcbiIKKyAgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAg
Inhoci5zZW5kKCk7XG4iCisgICAgICAgICAgICAiPC9zY3JpcHQ+XG4iLAorICAgICAgICAgICAg
Imh0dHA6Ly8xMjcuMC4wLjE6Mjk5OS8iKTsKKworICAgICAgICB3YWl0VW50aWxUaXRsZUNoYW5n
ZWQoKTsKKworICAgICAgICBpZiAoIXN0cmNtcCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3RpdGxlKG1f
d2ViVmlldyksICJPSyIpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIH5JbnNwZWN0b3JTZXJ2ZXJUZXN0KCkKKyAgICB7Cisg
ICAgfQorfTsKKworLy8gVGVzdCB0byBnZXQgaW5zcGVjdG9yIHNlcnZlciBwYWdlIGxpc3QgZnJv
bSB0aGUgdGVzdCBzZXJ2ZXIuCisvLyBTaG91bGQgY29udGFpbiBvbmx5IG9uZSBlbnRyeSBwb2lu
dGluZyB0byBodHRwOi8vMTI3LjAuMC4xOjI5OTkvd2ViaW5zcGVjdG9yL01haW4uaHRtbD9wYWdl
PTEKK3N0YXRpYyB2b2lkIHRlc3RJbnNwZWN0b3JTZXJ2ZXJQYWdlTGlzdChJbnNwZWN0b3JTZXJ2
ZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIEdPd25QdHI8R0Vycm9yPiBlcnJv
cjsKKworICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZChHVEtfV0lORE9X
X1RPUExFVkVMKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5nZXRQYWdlTGlzdCgpKTsKKworICAgIFdl
YktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2Ny
aXB0QW5kV2FpdFVudGlsRmluaXNoZWQoInBhZ2VzLmxlbmd0aDsiLCAmZXJyb3Iub3V0UHRyKCkp
OworICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KCFlcnJvci5n
ZXQoKSk7CisgICAgZ19hc3NlcnRfY21waW50KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0
VG9OdW1iZXIoamF2YXNjcmlwdFJlc3VsdCksID09LCAxKTsKKworICAgIGphdmFzY3JpcHRSZXN1
bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoInBhZ2VzWzBdLmlk
OyIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7Cisg
ICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKyAgICBpbnQgcGFnZUlkID0gV2ViVmlld1Rlc3Q6
OmphdmFzY3JpcHRSZXN1bHRUb051bWJlcihqYXZhc2NyaXB0UmVzdWx0KTsKKworICAgIEdPd25Q
dHI8Y2hhcj4gdmFsdWVTdHJpbmc7CisgICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkph
dmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgicGFnZXNbMF0udXJsOyIsICZlcnJvci5vdXRQ
dHIoKSk7CisgICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVy
cm9yLmdldCgpKTsKKyAgICB2YWx1ZVN0cmluZy5zZXQoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRS
ZXN1bHRUb0NTdHJpbmcoamF2YXNjcmlwdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih2
YWx1ZVN0cmluZy5nZXQoKSwgPT0sICJodHRwOi8vMTI3LjAuMC4xOjI5OTkvIik7CisKKyAgICBq
YXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVk
KCJwYWdlc1swXS5pbnNwZWN0b3JVcmw7IiwgJmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fzc2Vy
dChqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOworICAgIHZh
bHVlU3RyaW5nLnNldChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZh
c2NyaXB0UmVzdWx0KSk7CisgICAgU3RyaW5nIHZhbGlkSW5zcGVjdG9yVVJMID0gU3RyaW5nKCIv
TWFpbi5odG1sP3BhZ2U9IikgKyBTdHJpbmc6Om51bWJlcihwYWdlSWQpOworICAgIEFTU0VSVF9D
TVBfQ1NUUklORyh2YWx1ZVN0cmluZy5nZXQoKSwgPT0sIHZhbGlkSW5zcGVjdG9yVVJMLnV0Zjgo
KSk7Cit9CisKKy8vIFRlc3Qgc2VuZGluZyBhIHJhdyByZW1vdGUgZGVidWdnaW5nIG1lc3NhZ2Ug
dGhyb3VnaCBvdXIgd2ViIHNvY2tldCBzZXJ2ZXIuCisvLyBGb3IgdGhpcyBzcGVjaWZpYyBtZXNz
YWdlIHNlZTogaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9jaHJvbWUvZGV2dG9vbHMvZG9jcy9wcm90
b2NvbC90b3QvcnVudGltZS5odG1sI2NvbW1hbmQtZXZhbHVhdGUKK3N0YXRpYyB2b2lkIHRlc3RS
ZW1vdGVEZWJ1Z2dpbmdNZXNzYWdlKEluc3BlY3RvclNlcnZlclRlc3QqIHRlc3QsIGdjb25zdHBv
aW50ZXIpCit7CisgICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKEdUS19X
SU5ET1dfVE9QTEVWRUwpOworCisgICAgdGVzdC0+bG9hZEh0bWwoIjxzY3JpcHQgdHlwZT1cInRl
eHQvamF2YXNjcmlwdFwiPlxuIgorICAgICAgICAidmFyIHNvY2tldCA9IG5ldyBXZWJTb2NrZXQo
J3dzOi8vMTI3LjAuMC4xOjI5OTkvZGV2dG9vbHMvcGFnZS8xJyk7XG4iCisgICAgICAgICJzb2Nr
ZXQub25tZXNzYWdlID0gZnVuY3Rpb24obWVzc2FnZSkge1xuIgorICAgICAgICAgICAgInZhciBy
ZXNwb25zZSA9IEpTT04ucGFyc2UobWVzc2FnZS5kYXRhKTtcbiIKKyAgICAgICAgICAgICJpZiAo
cmVzcG9uc2UuaWQgPT09IDEpXG4iCisgICAgICAgICAgICAgICAgImRvY3VtZW50LnRpdGxlID0g
cmVzcG9uc2UucmVzdWx0LnJlc3VsdC52YWx1ZTtcbiIKKyAgICAgICAgICAgICJlbHNlXG4iCisg
ICAgICAgICAgICAgICAgImRvY3VtZW50LnRpdGxlID0gXCJGQUlMXCI7XG4iCisgICAgICAgICAg
ICAifVxuIgorICAgICAgICAgICAgInNvY2tldC5vbm9wZW4gPSBmdW5jdGlvbigpIHtcbiIKKyAg
ICAgICAgICAgICJzb2NrZXQuc2VuZCgne1wiaWRcIjogMSwgXCJtZXRob2RcIjogXCJSdW50aW1l
LmV2YWx1YXRlXCIsIFwicGFyYW1zXCI6IHtcImV4cHJlc3Npb25cIjogXCIyICsgMlwiIH0gfScp
O1xuIgorICAgICAgICAifVxuIgorICAgICAgICAiPC9zY3JpcHQ+IiwKKyAgICAgICAgImh0dHA6
Ly8xMjcuMC4wLjE6Mjk5OS8iKTsKKyAgICB0ZXN0LT53YWl0VW50aWxUaXRsZUNoYW5nZWQoKTsK
KworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3RpdGxlKHRlc3QtPm1f
d2ViVmlldyksID09LCAiNCIpOworfQorCitzdGF0aWMgdm9pZCBvcGVuUmVtb3RlRGVidWdnaW5n
U2Vzc2lvbihJbnNwZWN0b3JTZXJ2ZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAg
IC8vIFRvIHRlc3QgdGhlIHdob2xlIHBpcGVsaW5lIHRoaXMgZXhwbG9pdHMgYSBiZWhhdmlvciBv
ZiB0aGUgaW5zcGVjdG9yIGZyb250LWVuZCB3aGljaCB3b24ndCBwcm92aWRlIHRoZSBwYWdlIGFk
ZHJlc3MgYXMgdGl0bGUgdW5sZXNzIHRoZQorICAgIC8vIGRlYnVnZ2luZyBzZXNzaW9uIHdhcyBl
c3RhYmxpc2hlZCBjb3JyZWN0bHkgdGhyb3VnaCB3ZWIgc29ja2V0LgorICAgIC8vIEluIG91ciBj
YXNlIHBhZ2UgVVJMIHNob3VsZCBiZSBodHRwOi8vMTI3LjAuMC4xOjI5OTkvCisgICAgLy8gU28g
dGhpcyB0ZXN0IGNhc2Ugd2lsbCBmYWlsIGlmOgorICAgIC8vIC0gVGhlIHBhZ2UgbGlzdCBkaWRu
J3QgcmV0dXJuIGEgdmFsaWQgaW5zcGVjdG9yIFVSTAorICAgIC8vIC0gT3IgdGhlIGZyb250LWVu
ZCBjb3VsZG4ndCBiZSBsb2FkZWQgdGhyb3VnaCB0aGUgaW5zcGVjdG9yIEhUVFAgc2VydmVyCisg
ICAgLy8gLSBPciB0aGUgd2ViIHNvY2tldCBjb25uZWN0aW9uIGNvdWxkbid0IGJlIGVzdGFibGlz
aGVkIGJldHdlZW4gdGhlIGZyb250LWVuZCBhbmQgdGhlIHBhZ2UgdGhyb3VnaCB0aGUgaW5zcGVj
dG9yIHNlcnZlcgorICAgIC8vIExldCdzIHNlZSBpZiB0aGlzIHRlc3QgaXNuJ3QgcmFpc2luZyB0
b28gbWFueSBmYWxzZSBwb3NpdGl2ZXMsIGluIHdoaWNoIGNhc2Ugd2Ugc2hvdWxkIHVzZSBhIGJl
dHRlciBwcmVkaWNhdGUgaWYgYXZhaWxhYmxlLgorCisgICAgdGVzdC0+c2hvd0luV2luZG93QW5k
V2FpdFVudGlsTWFwcGVkKEdUS19XSU5ET1dfVE9QTEVWRUwpOworCisgICAgZ19hc3NlcnQodGVz
dC0+Z2V0UGFnZUxpc3QoKSk7CisKKyAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgV2Vi
S2l0SmF2YXNjcmlwdFJlc3VsdCogamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3Jp
cHRBbmRXYWl0VW50aWxGaW5pc2hlZCgicGFnZXNbMF0uaW5zcGVjdG9yVXJsOyIsICZlcnJvci5v
dXRQdHIoKSk7CisgICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQo
IWVycm9yLmdldCgpKTsKKworICAgIFN0cmluZyByZXNvbHZlZFVSTCA9IFN0cmluZygiaHR0cDov
LzEyNy4wLjAuMToyOTk5LyIpICsgU3RyaW5nOjpmcm9tVVRGOChXZWJWaWV3VGVzdDo6amF2YXNj
cmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7CisgICAgdGVzdC0+bG9hZFVS
SShyZXNvbHZlZFVSTC51dGY4KCkuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmlu
aXNoZWQoKTsKKworICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5k
V2FpdFVudGlsRmluaXNoZWQoIndpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgn
bGknKVswXS50aXRsZSIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQoamF2YXNjcmlw
dFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKworICAgIEdPd25QdHI8Y2hh
cj4gdGl0bGUoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0NTdHJpbmcoamF2YXNjcmlw
dFJlc3VsdCkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0aXRsZS5nZXQoKSwgPT0sICJodHRwOi8v
MTI3LjAuMC4xOjI5OTkvIik7Cit9CisKK3N0YXRpYyB2b2lkIHNlbmRJbmNvbXBsZXRlUmVxdWVz
dChJbnNwZWN0b3JTZXJ2ZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIEdPd25Q
dHI8R0Vycm9yPiBlcnJvcjsKKworICAgIC8vIENvbm5lY3QgdG8gdGhlIGluc3BlY3RvciBzZXJ2
ZXIuCisgICAgR1JlZlB0cjxHU29ja2V0Q2xpZW50PiBjbGllbnQgPSBhZG9wdEdSZWYoZ19zb2Nr
ZXRfY2xpZW50X25ldygpKTsKKyAgICBHUmVmUHRyPEdTb2NrZXRDb25uZWN0aW9uPiBjb25uZWN0
aW9uID0gYWRvcHRHUmVmKGdfc29ja2V0X2NsaWVudF9jb25uZWN0X3RvX2hvc3QoY2xpZW50Lmdl
dCgpLCAiMTI3LjAuMC4xIiwgMjk5OSwgMCwgJmVycm9yLm91dFB0cigpKSk7CisgICAgZ19hc3Nl
cnRfbm9fZXJyb3IoZXJyb3IuZ2V0KCkpOworCisgICAgLy8gU2VuZCBpbmNvbXBsZXRlIHJlcXVl
c3QgKG1pc3NpbmcgYmxhbmsgbGluZSBhZnRlciBoZWFkZXJzKSBhbmQgY2hlY2sgaWYgaW5zcGVj
dG9yIHNlcnZlcgorICAgIC8vIHJlcGxpZXMuIFRoZSBzZXJ2ZXIgc2hvdWxkIG5vdCByZXBseSB0
byBhbiBpbmNvbXBsZXRlIHJlcXVlc3QgYW5kIHRoZSB0ZXN0IHNob3VsZCB0aW1lb3V0CisgICAg
Ly8gb24gcmVhZC4KKyAgICBHT3V0cHV0U3RyZWFtKiBvc3RyZWFtID0gZ19pb19zdHJlYW1fZ2V0
X291dHB1dF9zdHJlYW0oR19JT19TVFJFQU0oY29ubmVjdGlvbi5nZXQoKSkpOworICAgIC8vIFJl
cXVlc3QgbWlzc2luZyBibGFuayBsaW5lIGFmdGVyIGhlYWRlcnMuCisgICAgY29uc3QgZ2NoYXIq
IGluY29tcGxldGVSZXF1ZXN0ID0gIkdFVCAvZGV2dG9vbHMvcGFnZS8xIEhUVFAvMS4xXHJcbkhv
c3Q6IExvY2FsaG9zdFxyXG4iOworICAgIGdfb3V0cHV0X3N0cmVhbV93cml0ZShvc3RyZWFtLCBp
bmNvbXBsZXRlUmVxdWVzdCwgc3RybGVuKGluY29tcGxldGVSZXF1ZXN0KSwgMCwgJmVycm9yLm91
dFB0cigpKTsKKyAgICBnX2Fzc2VydF9ub19lcnJvcihlcnJvci5nZXQoKSk7CisKKyAgICBHSW5w
dXRTdHJlYW0qIGlzdHJlYW0gPSBnX2lvX3N0cmVhbV9nZXRfaW5wdXRfc3RyZWFtKEdfSU9fU1RS
RUFNKGNvbm5lY3Rpb24uZ2V0KCkpKTsKKyAgICBjaGFyIHJlc3BvbnNlWzE2XTsKKyAgICBtZW1z
ZXQocmVzcG9uc2UsIDAsIHNpemVvZihyZXNwb25zZSkpOworICAgIEdSZWZQdHI8R0NhbmNlbGxh
YmxlPiBjYW5jZWwgPSBhZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSk7CisgICAgZ19pbnB1
dF9zdHJlYW1fcmVhZF9hc3luYyhpc3RyZWFtLCByZXNwb25zZSwgc2l6ZW9mKHJlc3BvbnNlKSAt
IDEsIEdfUFJJT1JJVFlfREVGQVVMVCwgY2FuY2VsLmdldCgpLCAwLCAwKTsKKyAgICAvLyBHaXZl
IGEgY2hhbmNlIGZvciB0aGUgc2VydmVyIHRvIHJlcGx5LgorICAgIHRlc3QtPndhaXQoMSk7Cisg
ICAgZ19jYW5jZWxsYWJsZV9jYW5jZWwoY2FuY2VsLmdldCgpKTsKKyAgICAvLyBJZiB3ZSBnb3Qg
YW55IGFuc3dlciBpdCBtZWFucyB0aGUgc2VydmVyIHJlcGxpZWQgdG8gYW4gaW5jb21wbGV0ZSBy
ZXF1ZXN0LCBsZXRzIGZhaWwuCisgICAgZ19hc3NlcnQocmVzcG9uc2VbMF0gPT0gJ1wwJyk7Cit9
CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICAvLyBPdmVyd3JpdGUgV0VCS0lUX0lOU1BFQ1RP
Ul9TRVJWRVIgdmFyaWFibGUgd2l0aCBkZWZhdWx0IElQIGFkZHJlc3MgYnV0IGRpZmZlcmVudCBw
b3J0IHRvIGF2b2lkIGNvbmZsaWN0IHdpdGggdGhlIHRlc3QgaW5zcGVjdG9yIHNlcnZlciBwYWdl
LgorICAgIGdfc2V0ZW52KCJXRUJLSVRfSU5TUEVDVE9SX1NFUlZFUiIsICIxMjcuMC4wLjE6Mjk5
OCIsIFRSVUUpOworCisgICAgc3RhcnRUZXN0U2VydmVyKCk7CisgICAgSW5zcGVjdG9yU2VydmVy
VGVzdDo6YWRkKCJXZWJLaXRXZWJJbnNwZWN0b3JTZXJ2ZXIiLCAidGVzdC1wYWdlLWxpc3QiLCB0
ZXN0SW5zcGVjdG9yU2VydmVyUGFnZUxpc3QpOworICAgIEluc3BlY3RvclNlcnZlclRlc3Q6OmFk
ZCgiV2ViS2l0V2ViSW5zcGVjdG9yU2VydmVyIiwgInRlc3QtcmVtb3RlLWRlYnVnZ2luZy1tZXNz
YWdlIiwgdGVzdFJlbW90ZURlYnVnZ2luZ01lc3NhZ2UpOworICAgIEluc3BlY3RvclNlcnZlclRl
c3Q6OmFkZCgiV2ViS2l0V2ViSW5zcGVjdG9yU2VydmVyIiwgInRlc3Qtb3Blbi1kZWJ1Z2dpbmct
c2Vzc2lvbiIsIG9wZW5SZW1vdGVEZWJ1Z2dpbmdTZXNzaW9uKTsKKyAgICBJbnNwZWN0b3JTZXJ2
ZXJUZXN0OjphZGQoIldlYktpdFdlYkluc3BlY3RvclNlcnZlciIsICJ0ZXN0LWluY29tcGxldGUt
cmVxdWVzdCIsIHNlbmRJbmNvbXBsZXRlUmVxdWVzdCk7CisKK30KKwordm9pZCBhZnRlckFsbCgp
Cit7CisgICAgc3RvcFRlc3RTZXJ2ZXIoKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0TG9hZGVyQ2xpZW50LmNwcCBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0TG9hZGVyQ2xpZW50LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4zMzE5MTVlMDA0NTQ2ZTQ3NGM4NjdkM2NiN2E3ZmQyMTQ2ZmJlMzQ5Ci0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RMb2FkZXJDbGll
bnQuY3BwCkBAIC0wLDAgKzEsNDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEw
IEd1c3Rhdm8gTm9yb25oYSBTaWx2YQorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExIElnYWxp
YSBTLkwuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTEgTW90b3JvbGEgTW9iaWxpdHks
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1
ZGUgIkxvYWRUcmFja2luZ1Rlc3QuaCIKKyNpbmNsdWRlICJXZWJLaXRUZXN0QnVzLmgiCisjaW5j
bHVkZSAiV2ViS2l0VGVzdFNlcnZlci5oIgorI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCisjaW5j
bHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KKworc3RhdGljIFdlYktpdFRlc3RCdXMqIGJ1czsKK3N0YXRpYyBX
ZWJLaXRUZXN0U2VydmVyKiBrU2VydmVyOworCitjb25zdCBjaGFyKiBrRE5USGVhZGVyTm90UHJl
c2VudCA9ICJETlQgaGVhZGVyIG5vdCBwcmVzZW50IjsKKworc3RhdGljIHZvaWQgdGVzdExvYWRp
bmdTdGF0dXMoTG9hZFRyYWNraW5nVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlciBkYXRhKQorewor
ICAgIHRlc3QtPnNldFJlZGlyZWN0VVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9ub3JtYWwi
KS5kYXRhKCkpOworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3Jl
ZGlyZWN0IikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKwor
ICAgIFZlY3RvcjxMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRXZlbnRzPiYgZXZlbnRzID0gdGVzdC0+
bV9sb2FkRXZlbnRzOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgNCk7
CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlBy
b3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09
LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRSZWNlaXZlZFNlcnZlclJlZGlyZWN0
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6
TG9hZENvbW1pdHRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1szXSwgPT0sIExvYWRU
cmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RMb2FkaW5n
RXJyb3IoTG9hZFRyYWNraW5nVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0
LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9lcnJvciIpLmRhdGEoKSk7CisgICAg
dGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBWZWN0b3I8TG9hZFRyYWNraW5n
VGVzdDo6TG9hZEV2ZW50cz4mIGV2ZW50cyA9IHRlc3QtPm1fbG9hZEV2ZW50czsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDMpOworICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJv
dmlzaW9uYWxMb2FkRmFpbGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwg
TG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKK30KKworc3RhdGljIHZvaWQgYXNzZXJ0
Tm9ybWFsTG9hZEhhcHBlbmVkKFZlY3RvcjxMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRXZlbnRzPiYg
ZXZlbnRzKQoreworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgMyk7Cisg
ICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zp
c2lvbmFsTG9hZFN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBM
b2FkVHJhY2tpbmdUZXN0OjpMb2FkQ29tbWl0dGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZl
bnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKK30KKworc3RhdGlj
IHZvaWQgdGVzdExvYWRIdG1sKExvYWRUcmFja2luZ1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIp
Cit7CisgICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxib2R5PkhlbGxvIFdlYktpdC1HVEsrPC9i
b2R5PjwvaHRtbD4iLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAg
ICBhc3NlcnROb3JtYWxMb2FkSGFwcGVuZWQodGVzdC0+bV9sb2FkRXZlbnRzKTsKK30KKworc3Rh
dGljIHZvaWQgdGVzdExvYWRBbHRlcm5hdGVIVE1MKExvYWRUcmFja2luZ1Rlc3QqIHRlc3QsIGdj
b25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEFsdGVybmF0ZUhUTUwoIjxodG1sPjxib2R5
PkFsdGVybmF0ZSBwYWdlPC9ib2R5PjwvaHRtbD4iLCAiaHR0cDovL2Vycm9yLXBhZ2UuZm9vLyIs
IDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIGFzc2VydE5vcm1h
bExvYWRIYXBwZW5lZCh0ZXN0LT5tX2xvYWRFdmVudHMpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0
TG9hZFBsYWluVGV4dChMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQorewor
ICAgIHRlc3QtPmxvYWRQbGFpblRleHQoIkhlbGxvIFdlYktpdC1HVEsrIik7CisgICAgdGVzdC0+
d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgYXNzZXJ0Tm9ybWFsTG9hZEhhcHBlbmVkKHRl
c3QtPm1fbG9hZEV2ZW50cyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RMb2FkUmVxdWVzdChMb2Fk
VHJhY2tpbmdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIEdSZWZQdHI8V2ViS2l0
VVJJUmVxdWVzdD4gcmVxdWVzdCh3ZWJraXRfdXJpX3JlcXVlc3RfbmV3KGtTZXJ2ZXItPmdldFVS
SUZvclBhdGgoIi9ub3JtYWwiKS5kYXRhKCkpKTsKKyAgICB0ZXN0LT5sb2FkUmVxdWVzdChyZXF1
ZXN0LmdldCgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBhc3Nl
cnROb3JtYWxMb2FkSGFwcGVuZWQodGVzdC0+bV9sb2FkRXZlbnRzKTsKK30KKworY2xhc3MgTG9h
ZFN0b3BUcmFja2luZ1Rlc3QgOiBwdWJsaWMgTG9hZFRyYWNraW5nVGVzdCB7CitwdWJsaWM6Cisg
ICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShMb2FkU3RvcFRyYWNraW5nVGVzdCk7CisKKyAgICB2
aXJ0dWFsIHZvaWQgbG9hZENvbW1pdHRlZCgpCisgICAgeworICAgICAgICBMb2FkVHJhY2tpbmdU
ZXN0Ojpsb2FkQ29tbWl0dGVkKCk7CisgICAgICAgIHdlYmtpdF93ZWJfdmlld19zdG9wX2xvYWRp
bmcobV93ZWJWaWV3KTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIGxvYWRGYWlsZWQoY29uc3Qg
Z2NoYXIqIGZhaWxpbmdVUkksIEdFcnJvciogZXJyb3IpCisgICAgeworICAgICAgICBnX2Fzc2Vy
dChnX2Vycm9yX21hdGNoZXMoZXJyb3IsIFdFQktJVF9ORVRXT1JLX0VSUk9SLCBXRUJLSVRfTkVU
V09SS19FUlJPUl9DQU5DRUxMRUQpKTsKKyAgICAgICAgTG9hZFRyYWNraW5nVGVzdDo6bG9hZEZh
aWxlZChmYWlsaW5nVVJJLCBlcnJvcik7CisgICAgfQorfTsKKworc3RhdGljIHZvaWQgdGVzdExv
YWRDYW5jZWxsZWQoTG9hZFN0b3BUcmFja2luZ1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7
CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvY2FuY2VsbGVkIiku
ZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIFZlY3Rv
cjxMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRXZlbnRzPiYgZXZlbnRzID0gdGVzdC0+bV9sb2FkRXZl
bnRzOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgNCk7CisgICAgZ19h
c3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFs
TG9hZFN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBMb2FkVHJh
Y2tpbmdUZXN0OjpMb2FkQ29tbWl0dGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJd
LCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZhaWxlZCk7CisgICAgZ19hc3NlcnRfY21waW50
KGV2ZW50c1szXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7Cit9CisKK3N0
YXRpYyB2b2lkIHRlc3RXZWJWaWV3VGl0bGUoTG9hZFRyYWNraW5nVGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKK3sKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2dldF90aXRsZSh0ZXN0
LT5tX3dlYlZpZXcpKTsKKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGhlYWQ+PHRpdGxlPldl
bGNvbWUgdG8gV2ViS2l0LUdUSyshPC90aXRsZT48L2hlYWQ+PC9odG1sPiIsIDApOworICAgIHRl
c3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRf
d2ViX3ZpZXdfZ2V0X3RpdGxlKHRlc3QtPm1fd2ViVmlldyksID09LCAiV2VsY29tZSB0byBXZWJL
aXQtR1RLKyEiKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdSZWxvYWQoTG9hZFRyYWNr
aW5nVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICAvLyBDaGVjayB0aGF0IG5vdGhp
bmcgaGFwcGVucyB3aGVuIHRoZXJlJ3Mgbm90aGluZyB0byByZWxvYWQuCisgICAgdGVzdC0+cmVs
b2FkKCk7CisgICAgdGVzdC0+d2FpdCgwLjI1KTsgLy8gV2FpdCBmb3IgYSBxdWFydGVyIG9mIGEg
c2Vjb25kLgorCisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvbm9y
bWFsIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBh
c3NlcnROb3JtYWxMb2FkSGFwcGVuZWQodGVzdC0+bV9sb2FkRXZlbnRzKTsKKworICAgIHRlc3Qt
PnJlbG9hZCgpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIGFzc2Vy
dE5vcm1hbExvYWRIYXBwZW5lZCh0ZXN0LT5tX2xvYWRFdmVudHMpOworfQorCitzdGF0aWMgdm9p
ZCB0ZXN0TG9hZFByb2dyZXNzKExvYWRUcmFja2luZ1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIp
Cit7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvbm9ybWFsIiku
ZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2Vy
dF9jbXBmbG9hdCh0ZXN0LT5tX2VzdGltYXRlZFByb2dyZXNzLCA9PSwgMSk7Cit9CisKK3N0YXRp
YyB2b2lkIHRlc3RXZWJWaWV3SGlzdG9yeUxvYWQoTG9hZFRyYWNraW5nVGVzdCogdGVzdCwgZ2Nv
bnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgo
Ii9ub3JtYWwiKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwor
ICAgIGFzc2VydE5vcm1hbExvYWRIYXBwZW5lZCh0ZXN0LT5tX2xvYWRFdmVudHMpOworCisgICAg
dGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvbm9ybWFsMiIpLmRhdGEoKSk7
CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgYXNzZXJ0Tm9ybWFsTG9h
ZEhhcHBlbmVkKHRlc3QtPm1fbG9hZEV2ZW50cyk7CisKKyAgICAvLyBDaGVjayB0aGF0IGxvYWQg
cHJvY2VzcyBpcyB0aGUgc2FtZSBmb3IgcGFnZXMgbG9hZGVkIGZyb20gaGlzdG9yeSBjYWNoZS4K
KyAgICB0ZXN0LT5nb0JhY2soKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsK
KyAgICBhc3NlcnROb3JtYWxMb2FkSGFwcGVuZWQodGVzdC0+bV9sb2FkRXZlbnRzKTsKKworICAg
IHRlc3QtPmdvRm9yd2FyZCgpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwor
ICAgIGFzc2VydE5vcm1hbExvYWRIYXBwZW5lZCh0ZXN0LT5tX2xvYWRFdmVudHMpOworfQorCitj
bGFzcyBWaWV3VVJJVHJhY2tpbmdUZXN0OiBwdWJsaWMgTG9hZFRyYWNraW5nVGVzdCB7CitwdWJs
aWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShWaWV3VVJJVHJhY2tpbmdUZXN0KTsKKwor
ICAgIHN0YXRpYyB2b2lkIHVyaUNoYW5nZWQoR09iamVjdCosIEdQYXJhbVNwZWMqLCBWaWV3VVJJ
VHJhY2tpbmdUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHRlc3Qt
Pm1fYWN0aXZlVVJJLmRhdGEoKSwgIT0sIHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKHRlc3QtPm1f
d2ViVmlldykpOworICAgICAgICB0ZXN0LT5tX2FjdGl2ZVVSSSA9IHdlYmtpdF93ZWJfdmlld19n
ZXRfdXJpKHRlc3QtPm1fd2ViVmlldyk7CisgICAgfQorCisgICAgVmlld1VSSVRyYWNraW5nVGVz
dCgpCisgICAgICAgIDogbV9hY3RpdmVVUkkod2Via2l0X3dlYl92aWV3X2dldF91cmkobV93ZWJW
aWV3KSkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KG1fYWN0aXZlVVJJLmlzTnVsbCgpKTsKKyAg
ICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJub3RpZnk6OnVyaSIsIEdfQ0FMTEJB
Q0sodXJpQ2hhbmdlZCksIHRoaXMpOworICAgIH0KKworICAgIHZvaWQgcHJvdmlzaW9uYWxMb2Fk
U3RhcnRlZCgpCisgICAgeworICAgICAgICBjaGVja0FjdGl2ZVVSSSgiL3JlZGlyZWN0Iik7Cisg
ICAgfQorCisgICAgdm9pZCBwcm92aXNpb25hbExvYWRSZWNlaXZlZFNlcnZlclJlZGlyZWN0KCkK
KyAgICB7CisgICAgICAgIGNoZWNrQWN0aXZlVVJJKCIvbm9ybWFsIik7CisgICAgfQorCisgICAg
dm9pZCBsb2FkQ29tbWl0dGVkKCkKKyAgICB7CisgICAgICAgIGNoZWNrQWN0aXZlVVJJKCIvbm9y
bWFsIik7CisgICAgfQorCisgICAgdm9pZCBsb2FkRmluaXNoZWQoKQorICAgIHsKKyAgICAgICAg
Y2hlY2tBY3RpdmVVUkkoIi9ub3JtYWwiKTsKKyAgICAgICAgTG9hZFRyYWNraW5nVGVzdDo6bG9h
ZEZpbmlzaGVkKCk7CisgICAgfQorCisgICAgQ1N0cmluZyBtX2FjdGl2ZVVSSTsKKworcHJpdmF0
ZToKKyAgICB2b2lkIGNoZWNrQWN0aXZlVVJJKGNvbnN0IGNoYXIqIHVyaSkKKyAgICB7CisgICAg
ICAgIEFTU0VSVF9DTVBfQ1NUUklORyhtX2FjdGl2ZVVSSSwgPT0sIGtTZXJ2ZXItPmdldFVSSUZv
clBhdGgodXJpKSk7CisgICAgfQorfTsKKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdBY3RpdmVV
UkkoVmlld1VSSVRyYWNraW5nVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0
LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9yZWRpcmVjdCIpLmRhdGEoKSk7Cisg
ICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Cit9CisKK2NsYXNzIFZpZXdJc0xvYWRp
bmdUZXN0OiBwdWJsaWMgTG9hZFRyYWNraW5nVGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElC
X1RFU1RfRklYVFVSRShWaWV3SXNMb2FkaW5nVGVzdCk7CisKKyAgICBzdGF0aWMgdm9pZCBpc0xv
YWRpbmdDaGFuZ2VkKEdPYmplY3QqLCBHUGFyYW1TcGVjKiwgVmlld0lzTG9hZGluZ1Rlc3QqIHRl
c3QpCisgICAgeworICAgICAgICBpZiAod2Via2l0X3dlYl92aWV3X2lzX2xvYWRpbmcodGVzdC0+
bV93ZWJWaWV3KSkKKyAgICAgICAgICAgIHRlc3QtPmJlZ2luTG9hZCgpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICB0ZXN0LT5lbmRMb2FkKCk7CisgICAgfQorCisgICAgVmlld0lzTG9hZGlu
Z1Rlc3QoKQorICAgIHsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJub3Rp
Znk6OmlzLWxvYWRpbmciLCBHX0NBTExCQUNLKGlzTG9hZGluZ0NoYW5nZWQpLCB0aGlzKTsKKyAg
ICB9CisKKyAgICB2b2lkIGJlZ2luTG9hZCgpCisgICAgeworICAgICAgICAvLyBOZXcgbG9hZCwg
bG9hZC1zdGFydGVkIGhhc24ndCBiZWVuIGVtaXR0ZWQgeWV0LgorICAgICAgICBnX2Fzc2VydCht
X2xvYWRFdmVudHMuaXNFbXB0eSgpKTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93
ZWJfdmlld19nZXRfdXJpKG1fd2ViVmlldyksID09LCBtX2FjdGl2ZVVSSS5kYXRhKCkpOworICAg
IH0KKworICAgIHZvaWQgZW5kTG9hZCgpCisgICAgeworICAgICAgICAvLyBMb2FkIGZpbmlzaCwg
bG9hZC1maW5pc2hlZCBhbmQgbG9hZC1mYWlsZWQgaGF2ZW4ndCBiZWVuIGVtaXR0ZWQgeWV0Lgor
ICAgICAgICBnX2Fzc2VydCghbV9sb2FkRXZlbnRzLmlzRW1wdHkoKSk7CisgICAgICAgIGdfYXNz
ZXJ0KCFtX2xvYWRFdmVudHMuY29udGFpbnMoTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVk
KSk7CisgICAgICAgIGdfYXNzZXJ0KCFtX2xvYWRFdmVudHMuY29udGFpbnMoTG9hZFRyYWNraW5n
VGVzdDo6TG9hZEZhaWxlZCkpOworICAgIH0KK307CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3
SXNMb2FkaW5nKFZpZXdJc0xvYWRpbmdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAg
IHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL25vcm1hbCIpLmRhdGEoKSk7
CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5yZWxvYWQo
KTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3QtPmxvYWRV
Ukkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2Vycm9yIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53
YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0
VVJJRm9yUGF0aCgiL25vcm1hbCIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZp
bmlzaGVkKCk7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvbm9y
bWFsMiIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAg
ICB0ZXN0LT5nb0JhY2soKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKwor
ICAgIHRlc3QtPmdvRm9yd2FyZCgpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgp
OworfQorCitjbGFzcyBXZWJQYWdlVVJJVGVzdDogcHVibGljIFdlYlZpZXdUZXN0IHsKK3B1Ymxp
YzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFdlYlBhZ2VVUklUZXN0KTsKKworICAgIHN0
YXRpYyB2b2lkIHdlYlBhZ2VVUklDaGFuZ2VkQ2FsbGJhY2soR0RCdXNDb25uZWN0aW9uKiwgY29u
c3QgY2hhciosIGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIEdWYXJpYW50
KiByZXN1bHQsIFdlYlBhZ2VVUklUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgY29uc3QgY2hh
ciogdXJpOworICAgICAgICBnX3ZhcmlhbnRfZ2V0KHJlc3VsdCwgIigmcykiLCAmdXJpKTsKKyAg
ICAgICAgdGVzdC0+bV93ZWJQYWdlVVJJcy5hcHBlbmQodXJpKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgdm9pZCB3ZWJWaWV3VVJJQ2hhbmdlZChHT2JqZWN0KiwgR1BhcmFtU3BlYyosIFdlYlBhZ2VV
UklUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+bV93ZWJWaWV3VVJJcy5hcHBlbmQo
d2Via2l0X3dlYl92aWV3X2dldF91cmkodGVzdC0+bV93ZWJWaWV3KSk7CisgICAgfQorCisgICAg
V2ViUGFnZVVSSVRlc3QoKQorICAgIHsKKyAgICAgICAgR1JlZlB0cjxHREJ1c1Byb3h5PiBwcm94
eSA9IGFkb3B0R1JlZihidXMtPmNyZWF0ZVByb3h5KCJvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNp
b25UZXN0IiwKKyAgICAgICAgICAgICIvb3JnL3dlYmtpdC9ndGsvV2ViRXh0ZW5zaW9uVGVzdCIs
ICJvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwgbV9tYWluTG9vcCkpOworICAgICAg
ICBtX3VyaUNoYW5nZWRTaWduYWxJRCA9IGdfZGJ1c19jb25uZWN0aW9uX3NpZ25hbF9zdWJzY3Jp
YmUoCisgICAgICAgICAgICBnX2RidXNfcHJveHlfZ2V0X2Nvbm5lY3Rpb24ocHJveHkuZ2V0KCkp
LAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICJvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNp
b25UZXN0IiwKKyAgICAgICAgICAgICJVUklDaGFuZ2VkIiwKKyAgICAgICAgICAgICIvb3JnL3dl
YmtpdC9ndGsvV2ViRXh0ZW5zaW9uVGVzdCIsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAg
R19EQlVTX1NJR05BTF9GTEFHU19OT05FLAorICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxH
REJ1c1NpZ25hbENhbGxiYWNrPih3ZWJQYWdlVVJJQ2hhbmdlZENhbGxiYWNrKSwKKyAgICAgICAg
ICAgIHRoaXMsCisgICAgICAgICAgICAwKTsKKyAgICAgICAgZ19hc3NlcnQobV91cmlDaGFuZ2Vk
U2lnbmFsSUQpOworCisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAibm90aWZ5
Ojp1cmkiLCBHX0NBTExCQUNLKHdlYlZpZXdVUklDaGFuZ2VkKSwgdGhpcyk7CisgICAgfQorCisg
ICAgfldlYlBhZ2VVUklUZXN0KCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rp
c2Nvbm5lY3RfbWF0Y2hlZChtX3dlYlZpZXcsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAs
IDAsIHRoaXMpOworICAgICAgICBnX2RidXNfY29ubmVjdGlvbl9zaWduYWxfdW5zdWJzY3JpYmUo
YnVzLT5jb25uZWN0aW9uKCksIG1fdXJpQ2hhbmdlZFNpZ25hbElEKTsKKyAgICB9CisKKyAgICB1
bnNpZ25lZCBtX3VyaUNoYW5nZWRTaWduYWxJRDsKKyAgICBWZWN0b3I8Q1N0cmluZz4gbV93ZWJQ
YWdlVVJJczsKKyAgICBWZWN0b3I8Q1N0cmluZz4gbV93ZWJWaWV3VVJJczsKK307CisKK3N0YXRp
YyB2b2lkIHRlc3RXZWJQYWdlVVJJKFdlYlBhZ2VVUklUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVy
KQoreworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3JlZGlyZWN0
IikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIGdf
YXNzZXJ0X2NtcGludCh0ZXN0LT5tX3dlYlBhZ2VVUklzLnNpemUoKSwgPT0sIHRlc3QtPm1fd2Vi
Vmlld1VSSXMuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRlc3QtPm1fd2Vi
UGFnZVVSSXMuc2l6ZSgpOyArK2kpCisgICAgICAgIEFTU0VSVF9DTVBfQ1NUUklORyh0ZXN0LT5t
X3dlYlBhZ2VVUklzW2ldLCA9PSwgdGVzdC0+bV93ZWJWaWV3VVJJc1tpXSk7CisKKyAgICBnX2Fz
c2VydF9jbXBpbnQodGVzdC0+bV93ZWJQYWdlVVJJcy5zaXplKCksID09LCAyKTsKKyAgICBBU1NF
UlRfQ01QX0NTVFJJTkcodGVzdC0+bV93ZWJQYWdlVVJJc1swXSwgPT0sIGtTZXJ2ZXItPmdldFVS
SUZvclBhdGgoIi9yZWRpcmVjdCIpKTsKKyAgICBBU1NFUlRfQ01QX0NTVFJJTkcodGVzdC0+bV93
ZWJQYWdlVVJJc1sxXSwgPT0sIGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9ub3JtYWwiKSk7CisK
K30KKworc3RhdGljIHZvaWQgdGVzdFVSSVJlcXVlc3RIVFRQSGVhZGVycyhXZWJWaWV3VGVzdCog
dGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBHUmVmUHRyPFdlYktpdFVSSVJlcXVlc3Q+IHVy
aVJlcXVlc3QgPSBhZG9wdEdSZWYod2Via2l0X3VyaV9yZXF1ZXN0X25ldygiZmlsZTovLy9mb28v
YmFyIikpOworICAgIGdfYXNzZXJ0KHVyaVJlcXVlc3QuZ2V0KCkpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3VyaSh1cmlSZXF1ZXN0LmdldCgpKSwgPT0sICJm
aWxlOi8vL2Zvby9iYXIiKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3VyaV9yZXF1ZXN0X2dldF9o
dHRwX2hlYWRlcnModXJpUmVxdWVzdC5nZXQoKSkpOworCisgICAgLy8gTG9hZCBhIHJlcXVlc3Qg
d2l0aCBubyBEbyBOb3QgVHJhY2sgaGVhZGVyLgorICAgIHdlYmtpdF91cmlfcmVxdWVzdF9zZXRf
dXJpKHVyaVJlcXVlc3QuZ2V0KCksIGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9kby1ub3QtdHJh
Y2staGVhZGVyIikuZGF0YSgpKTsKKyAgICB0ZXN0LT5sb2FkUmVxdWVzdCh1cmlSZXF1ZXN0Lmdl
dCgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHNpemVfdCBt
YWluUmVzb3VyY2VEYXRhU2l6ZSA9IDA7CisgICAgY29uc3QgY2hhciogbWFpblJlc291cmNlRGF0
YSA9IHRlc3QtPm1haW5SZXNvdXJjZURhdGEobWFpblJlc291cmNlRGF0YVNpemUpOworICAgIGdf
YXNzZXJ0X2NtcGludChtYWluUmVzb3VyY2VEYXRhU2l6ZSwgPT0sIHN0cmxlbihrRE5USGVhZGVy
Tm90UHJlc2VudCkpOworICAgIGdfYXNzZXJ0KCFzdHJuY21wKG1haW5SZXNvdXJjZURhdGEsIGtE
TlRIZWFkZXJOb3RQcmVzZW50LCBtYWluUmVzb3VyY2VEYXRhU2l6ZSkpOworCisgICAgLy8gQWRk
IHRoZSBEbyBOb3QgVHJhY2sgaGVhZGVyIGFuZCBsb2FkIHRoZSByZXF1ZXN0IGFnYWluLgorICAg
IFNvdXBNZXNzYWdlSGVhZGVycyogaGVhZGVycyA9IHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfaHR0
cF9oZWFkZXJzKHVyaVJlcXVlc3QuZ2V0KCkpOworICAgIGdfYXNzZXJ0KGhlYWRlcnMpOworICAg
IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChoZWFkZXJzLCAiRE5UIiwgIjEiKTsKKyAgICB0
ZXN0LT5sb2FkUmVxdWVzdCh1cmlSZXF1ZXN0LmdldCgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxM
b2FkRmluaXNoZWQoKTsKKworICAgIG1haW5SZXNvdXJjZURhdGEgPSB0ZXN0LT5tYWluUmVzb3Vy
Y2VEYXRhKG1haW5SZXNvdXJjZURhdGFTaXplKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQobWFpblJl
c291cmNlRGF0YVNpemUsID09LCAxKTsKKyAgICBnX2Fzc2VydCghc3RybmNtcChtYWluUmVzb3Vy
Y2VEYXRhLCAiMSIsIG1haW5SZXNvdXJjZURhdGFTaXplKSk7CisKKyAgICAvLyBMb2FkIGEgVVJJ
IGZvciB3aGljaCB0aGUgd2ViIGV4dGVuc2lvbiB3aWxsIGFkZCB0aGUgRG8gTm90IFRyYWNrIGhl
YWRlci4KKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9hZGQtZG8t
bm90LXRyYWNrLWhlYWRlciIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlz
aGVkKCk7CisKKyAgICBtYWluUmVzb3VyY2VEYXRhID0gdGVzdC0+bWFpblJlc291cmNlRGF0YSht
YWluUmVzb3VyY2VEYXRhU2l6ZSk7CisgICAgZ19hc3NlcnRfY21waW50KG1haW5SZXNvdXJjZURh
dGFTaXplLCA9PSwgMSk7CisgICAgZ19hc3NlcnQoIXN0cm5jbXAobWFpblJlc291cmNlRGF0YSwg
IjEiLCBtYWluUmVzb3VyY2VEYXRhU2l6ZSkpOworfQorCitzdGF0aWMgdm9pZCBzZXJ2ZXJDYWxs
YmFjayhTb3VwU2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBjaGFy
KiBwYXRoLCBHSGFzaFRhYmxlKiwgU291cENsaWVudENvbnRleHQqLCBncG9pbnRlcikKK3sKKyAg
ICBzdGF0aWMgY29uc3QgY2hhciogcmVzcG9uc2VTdHJpbmcgPSAiPGh0bWw+PGJvZHk+VGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyEiCisgICAg
ICAgICJUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyEiCisgICAgICAgICJU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyEiCisgICAgICAgICJUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyEiCisgICAgICAgICJUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyEiCisgICAgICAgICJUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyEiCisgICAgICAgICJUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyEiCisgICAgICAgICJUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyE8L2JvZHk+PC9odG1sPiI7CisKKyAgICBpZiAobWVzc2FnZS0+bWV0aG9kICE9IFNP
VVBfTUVUSE9EX0dFVCkgeworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdl
LCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOwor
CisgICAgaWYgKGdfc3RyX2hhc19wcmVmaXgocGF0aCwgIi9ub3JtYWwiKSkKKyAgICAgICAgc291
cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZ
X1NUQVRJQywgcmVzcG9uc2VTdHJpbmcsIHN0cmxlbihyZXNwb25zZVN0cmluZykpOworICAgIGVs
c2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvZXJyb3IiKSkKKyAgICAgICAgc291cF9tZXNzYWdl
X3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfQ0FOVF9DT05ORUNUKTsKKyAgICBlbHNl
IGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3JlZGlyZWN0IikpIHsKKyAgICAgICAgc291cF9tZXNz
YWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTU9WRURfUEVSTUFORU5UTFkpOwor
ICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVh
ZGVycywgIkxvY2F0aW9uIiwgIi9ub3JtYWwiKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFs
KHBhdGgsICIvY2FuY2VsbGVkIikpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfc2V0
X2VuY29kaW5nKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsIFNPVVBfRU5DT0RJTkdfQ0hVTktF
RCk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9i
b2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIHJlc3BvbnNlU3RyaW5nLCBzdHJsZW4ocmVzcG9uc2VT
dHJpbmcpKTsKKyAgICAgICAgc291cF9zZXJ2ZXJfdW5wYXVzZV9tZXNzYWdlKHNlcnZlciwgbWVz
c2FnZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgs
ICIvZG8tbm90LXRyYWNrLWhlYWRlciIpIHx8IGdfc3RyX2VxdWFsKHBhdGgsICIvYWRkLWRvLW5v
dC10cmFjay1oZWFkZXIiKSkgeworICAgICAgICBjb25zdCBjaGFyKiBkb05vdFRyYWNrID0gc291
cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X29uZShtZXNzYWdlLT5yZXF1ZXN0X2hlYWRlcnMsICJETlQi
KTsKKyAgICAgICAgaWYgKGRvTm90VHJhY2spCisgICAgICAgICAgICBzb3VwX21lc3NhZ2VfYm9k
eV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfQ09QWSwgZG9Ob3RU
cmFjaywgc3RybGVuKGRvTm90VHJhY2spKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc291
cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZ
X1NUQVRJQywga0ROVEhlYWRlck5vdFByZXNlbnQsIHN0cmxlbihrRE5USGVhZGVyTm90UHJlc2Vu
dCkpOworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRV
U19PSyk7CisgICAgfSBlbHNlCisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3Nh
Z2UsIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7CisKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21w
bGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQorewor
ICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfd2ViX2V4dGVuc2lvbnNfZGlyZWN0b3J5KHdlYmtp
dF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpLCBXRUJLSVRfVEVTVF9XRUJfRVhURU5TSU9OU19E
SVIpOworICAgIGJ1cyA9IG5ldyBXZWJLaXRUZXN0QnVzKCk7CisgICAgaWYgKCFidXMtPnJ1bigp
KQorICAgICAgICByZXR1cm47CisKKyAgICBrU2VydmVyID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIo
KTsKKyAgICBrU2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2spOworCisgICAgTG9hZFRyYWNraW5n
VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImxvYWRpbmctc3RhdHVzIiwgdGVzdExvYWRpbmdT
dGF0dXMpOworICAgIExvYWRUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJsb2Fk
aW5nLWVycm9yIiwgdGVzdExvYWRpbmdFcnJvcik7CisgICAgTG9hZFRyYWNraW5nVGVzdDo6YWRk
KCJXZWJLaXRXZWJWaWV3IiwgImxvYWQtaHRtbCIsIHRlc3RMb2FkSHRtbCk7CisgICAgTG9hZFRy
YWNraW5nVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImxvYWQtYWx0ZXJuYXRlLWh0bWwiLCB0
ZXN0TG9hZEFsdGVybmF0ZUhUTUwpOworICAgIExvYWRUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0
V2ViVmlldyIsICJsb2FkLXBsYWluLXRleHQiLCB0ZXN0TG9hZFBsYWluVGV4dCk7CisgICAgTG9h
ZFRyYWNraW5nVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImxvYWQtcmVxdWVzdCIsIHRlc3RM
b2FkUmVxdWVzdCk7CisgICAgTG9hZFN0b3BUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmll
dyIsICJzdG9wLWxvYWRpbmciLCB0ZXN0TG9hZENhbmNlbGxlZCk7CisgICAgTG9hZFRyYWNraW5n
VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInRpdGxlIiwgdGVzdFdlYlZpZXdUaXRsZSk7Cisg
ICAgTG9hZFRyYWNraW5nVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInByb2dyZXNzIiwgdGVz
dExvYWRQcm9ncmVzcyk7CisgICAgTG9hZFRyYWNraW5nVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3
IiwgInJlbG9hZCIsIHRlc3RXZWJWaWV3UmVsb2FkKTsKKyAgICBMb2FkVHJhY2tpbmdUZXN0Ojph
ZGQoIldlYktpdFdlYlZpZXciLCAiaGlzdG9yeS1sb2FkIiwgdGVzdFdlYlZpZXdIaXN0b3J5TG9h
ZCk7CisKKyAgICAvLyBUaGlzIHRlc3QgY2hlY2tzIHRoYXQgd2ViIHZpZXcgbm90aWZ5Ojp1cmkg
c2lnbmFsIGlzIGNvcnJlY3RseSBlbWl0dGVkCisgICAgLy8gYW5kIHRoZSB1cmkgaXMgYWxyZWFk
eSB1cGRhdGVkIHdoZW4gbG9hZGVyIGNsaWVudCBzaWduYWxzIGFyZSBlbWl0dGVkLgorICAgIFZp
ZXdVUklUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJhY3RpdmUtdXJpIiwgdGVz
dFdlYlZpZXdBY3RpdmVVUkkpOworCisgICAgVmlld0lzTG9hZGluZ1Rlc3Q6OmFkZCgiV2ViS2l0
V2ViVmlldyIsICJpcy1sb2FkaW5nIiwgdGVzdFdlYlZpZXdJc0xvYWRpbmcpOworICAgIFdlYlBh
Z2VVUklUZXN0OjphZGQoIldlYktpdFdlYlBhZ2UiLCAiZ2V0LXVyaSIsIHRlc3RXZWJQYWdlVVJJ
KTsKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRVUklSZXF1ZXN0IiwgImh0dHAtaGVhZGVy
cyIsIHRlc3RVUklSZXF1ZXN0SFRUUEhlYWRlcnMpOworfQorCit2b2lkIGFmdGVyQWxsKCkKK3sK
KyAgICBkZWxldGUgYnVzOworICAgIGRlbGV0ZSBrU2VydmVyOworfQpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RNYWluLmNwcCBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0TWFpbi5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDIx
ZmZkN2YxM2FlODE3ZTk5OTNiYzlmYzk3ZGM3MmNhMGMyODg3YQotLS0gL2Rldi9udWxsCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0TWFpbi5jcHAKQEAgLTAs
MCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdE1haW4uaCIKKworI2luY2x1ZGUgPGdsaWIvZ3N0
ZGlvLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5o
PgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKwordm9pZCBiZWZvcmVBbGwoKTsK
K3ZvaWQgYWZ0ZXJBbGwoKTsKKworc3RhdGljIHZvaWQgcmVnaXN0ZXJHUmVzb3VyY2Uodm9pZCkK
K3sKKyAgICBHT3duUHRyPGNoYXI+IHJlc291cmNlc1BhdGgoZ19idWlsZF9maWxlbmFtZShXRUJL
SVRfRVhFQ19QQVRILCAiVGVzdFdlYktpdEFQSSIsICJXZWJLaXQyR3RrIiwgInJlc291cmNlcyIs
ICJ3ZWJraXQyZ3RrLXRlc3RzLXJlc291cmNlcy5ncmVzb3VyY2UiLCBOVUxMKSk7CisgICAgR1Jl
c291cmNlKiByZXNvdXJjZSA9IGdfcmVzb3VyY2VfbG9hZChyZXNvdXJjZXNQYXRoLmdldCgpLCAw
KTsKKyAgICBnX2Fzc2VydChyZXNvdXJjZSk7CisKKyAgICBnX3Jlc291cmNlc19yZWdpc3Rlcihy
ZXNvdXJjZSk7CisgICAgZ19yZXNvdXJjZV91bnJlZihyZXNvdXJjZSk7Cit9CisKK3N0YXRpYyB2
b2lkIHJlbW92ZU5vbkVtcHR5RGlyZWN0b3J5KGNvbnN0IGNoYXIqIGRpcmVjdG9yeVBhdGgpCit7
CisgICAgR0RpciogZGlyZWN0b3J5ID0gZ19kaXJfb3BlbihkaXJlY3RvcnlQYXRoLCAwLCAwKTsK
KyAgICBnX2Fzc2VydChkaXJlY3RvcnkpOworICAgIGNvbnN0IGNoYXIqIGZpbGVOYW1lOworICAg
IHdoaWxlICgoZmlsZU5hbWUgPSBnX2Rpcl9yZWFkX25hbWUoZGlyZWN0b3J5KSkpIHsKKyAgICAg
ICAgR093blB0cjxjaGFyPiBmaWxlUGF0aChnX2J1aWxkX2ZpbGVuYW1lKGRpcmVjdG9yeVBhdGgs
IGZpbGVOYW1lLCBOVUxMKSk7CisgICAgICAgIGdfdW5saW5rKGZpbGVQYXRoLmdldCgpKTsKKyAg
ICB9CisgICAgZ19kaXJfY2xvc2UoZGlyZWN0b3J5KTsKKyAgICBnX3JtZGlyKGRpcmVjdG9yeVBh
dGgpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgZ191bnNl
dGVudigiREJVU19TRVNTSU9OX0JVU19BRERSRVNTIik7CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJn
YywgJmFyZ3YsIDApOworICAgIGdfc2V0ZW52KCJXRUJLSVRfRVhFQ19QQVRIIiwgV0VCS0lUX0VY
RUNfUEFUSCwgRkFMU0UpOworICAgIGdfc2V0ZW52KCJXRUJLSVRfSU5KRUNURURfQlVORExFX1BB
VEgiLCBXRUJLSVRfSU5KRUNURURfQlVORExFX1BBVEgsIEZBTFNFKTsKKyAgICBnX3NldGVudigi
TENfQUxMIiwgIkMiLCBUUlVFKTsKKyAgICBnX3NldGVudigiR0lPX1VTRV9WRlMiLCAibG9jYWwi
LCBUUlVFKTsKKyAgICBnX3NldGVudigiR1NFVFRJTkdTX0JBQ0tFTkQiLCAibWVtb3J5IiwgVFJV
RSk7CisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKKwor
ICAgIHJlZ2lzdGVyR1Jlc291cmNlKCk7CisKKyAgICBHT3duUHRyPGNoYXI+IGRpc2tDYWNoZVRl
bXBEaXJlY3RvcnkoZ19kaXJfbWFrZV90bXAoIldlYktpdDJUZXN0c0Rpc2tDYWNoZS1YWFhYWFgi
LCAwKSk7CisgICAgZ19hc3NlcnQoZGlza0NhY2hlVGVtcERpcmVjdG9yeS5nZXQoKSk7CisgICAg
d2Via2l0X3dlYl9jb250ZXh0X3NldF9kaXNrX2NhY2hlX2RpcmVjdG9yeSh3ZWJraXRfd2ViX2Nv
bnRleHRfZ2V0X2RlZmF1bHQoKSwgZGlza0NhY2hlVGVtcERpcmVjdG9yeS5nZXQoKSk7CisKKyAg
ICBiZWZvcmVBbGwoKTsKKyAgICBpbnQgcmV0dXJuVmFsdWUgPSBnX3Rlc3RfcnVuKCk7CisgICAg
YWZ0ZXJBbGwoKTsKKworICAgIHJlbW92ZU5vbkVtcHR5RGlyZWN0b3J5KGRpc2tDYWNoZVRlbXBE
aXJlY3RvcnkuZ2V0KCkpOworCisgICAgcmV0dXJuIHJldHVyblZhbHVlOworfQpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RNYWluLmggYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdE1haW4uaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4w
ZTExZDQwNTZlN2UyODVlOWQ0ZmEwNDdlODU3ZGRmNDU0MDBhY2E2Ci0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RNYWluLmgKQEAgLTAs
MCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRl
ZiBUZXN0TWFpbl9oCisjZGVmaW5lIFRlc3RNYWluX2gKKworI2luY2x1ZGUgPGNhaXJvLmg+Cisj
aW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1
ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CisKKyNkZWZpbmUgTUFLRV9HTElCX1RFU1RfRklYVFVSRShDbGFzc05hbWUpIFwKKyAgICBzdGF0
aWMgdm9pZCBzZXRVcChDbGFzc05hbWUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkgXAor
ICAgIHsgXAorICAgICAgICBuZXcgKGZpeHR1cmUpIENsYXNzTmFtZTsgXAorICAgIH0gXAorICAg
IHN0YXRpYyB2b2lkIHRlYXJEb3duKENsYXNzTmFtZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBk
YXRhKSBcCisgICAgeyBcCisgICAgICAgIGZpeHR1cmUtPn5DbGFzc05hbWUoKTsgXAorICAgIH0g
XAorICAgIHN0YXRpYyB2b2lkIGFkZChjb25zdCBjaGFyKiBzdWl0ZU5hbWUsIGNvbnN0IGNoYXIq
IHRlc3ROYW1lLCB2b2lkICgqdGVzdEZ1bmMpKENsYXNzTmFtZSosIGNvbnN0IHZvaWQqKSkgXAor
ICAgIHsgXAorICAgICAgICBHT3duUHRyPGdjaGFyPiB0ZXN0UGF0aChnX3N0cmR1cF9wcmludGYo
Ii93ZWJraXQyLyVzLyVzIiwgc3VpdGVOYW1lLCB0ZXN0TmFtZSkpOyBcCisgICAgICAgIGdfdGVz
dF9hZGQodGVzdFBhdGguZ2V0KCksIENsYXNzTmFtZSwgMCwgQ2xhc3NOYW1lOjpzZXRVcCwgdGVz
dEZ1bmMsIENsYXNzTmFtZTo6dGVhckRvd24pOyBcCisgICAgfQorCisjZGVmaW5lIEFTU0VSVF9D
TVBfQ1NUUklORyhzMSwgY21wLCBzMikgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgQ1N0
cmluZyBfX3MxID0gKHMxKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgIENTdHJpbmcgX19zMiA9IChzMik7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoZ19zdHJjbXAwKF9fczEuZGF0
YSgpLCBfX3MyLmRhdGEoKSkgY21wIDApIDsgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZWxz
ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgICAgICBnX2Fzc2VydGlvbl9tZXNzYWdlX2NtcHN0cihHX0xPR19ET01B
SU4sIF9fRklMRV9fLCBfX0xJTkVfXywgXAorICAgICAgICAgICAgICAgIEdfU1RSRlVOQywgI3Mx
ICIgIiAjY21wICIgIiAjczIsIF9fczEuZGF0YSgpLCAjY21wLCBfX3MyLmRhdGEoKSk7IFwKKyAg
ICB9IHdoaWxlICgwKQorCisKK2NsYXNzIFRlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9U
RVNUX0ZJWFRVUkUoVGVzdCk7CisKKyAgICB+VGVzdCgpCisgICAgeworICAgICAgICBpZiAobV93
YXRjaGVkT2JqZWN0cy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
Z19wcmludCgiTGVha2VkIG9iamVjdHM6Iik7CisgICAgICAgIEhhc2hTZXQ8R09iamVjdCo+Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSBtX3dhdGNoZWRPYmplY3RzLmVuZCgpOworICAgICAgICBmb3Ig
KEhhc2hTZXQ8R09iamVjdCo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fd2F0Y2hlZE9iamVjdHMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgZ19wcmludCgiICVzKCVwKSIs
IGdfdHlwZV9uYW1lX2Zyb21faW5zdGFuY2UocmVpbnRlcnByZXRfY2FzdDxHVHlwZUluc3RhbmNl
Kj4oKml0KSksICppdCk7CisgICAgICAgIGdfcHJpbnQoIlxuIik7CisKKyAgICAgICAgZ19hc3Nl
cnQobV93YXRjaGVkT2JqZWN0cy5pc0VtcHR5KCkpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lk
IG9iamVjdEZpbmFsaXplZChUZXN0KiB0ZXN0LCBHT2JqZWN0KiBmaW5hbGl6ZWRPYmplY3QpCisg
ICAgeworICAgICAgICB0ZXN0LT5tX3dhdGNoZWRPYmplY3RzLnJlbW92ZShmaW5hbGl6ZWRPYmpl
Y3QpOworICAgIH0KKworICAgIHZvaWQgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5p
c2hlcyhHT2JqZWN0KiBvYmplY3QpCisgICAgeworICAgICAgICBtX3dhdGNoZWRPYmplY3RzLmFk
ZChvYmplY3QpOworICAgICAgICBnX29iamVjdF93ZWFrX3JlZihvYmplY3QsIHJlaW50ZXJwcmV0
X2Nhc3Q8R1dlYWtOb3RpZnk+KG9iamVjdEZpbmFsaXplZCksIHRoaXMpOworICAgIH0KKworICAg
IHN0YXRpYyBDU3RyaW5nIGdldFdlYktpdDFUZXN0UmVzb3VjZXNEaXIoKQorICAgIHsKKyAgICAg
ICAgR093blB0cjxjaGFyPiByZXNvdXJjZXNEaXIoZ19idWlsZF9maWxlbmFtZShXRUJLSVRfU1JD
X0RJUiwgIlRvb2xzIiwgIlRlc3RXZWJLaXRBUEkiLCAiVGVzdHMiLCAiV2ViS2l0R3RrIiwgInJl
c291cmNlcyIsIE5VTEwpKTsKKyAgICAgICAgcmV0dXJuIHJlc291cmNlc0Rpci5nZXQoKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgQ1N0cmluZyBnZXRSZXNvdXJjZXNEaXIoKQorICAgIHsKKyAgICAg
ICAgR093blB0cjxjaGFyPiByZXNvdXJjZXNEaXIoZ19idWlsZF9maWxlbmFtZShXRUJLSVRfU1JD
X0RJUiwgIlRvb2xzIiwgIlRlc3RXZWJLaXRBUEkiLCAiVGVzdHMiLCAiV2ViS2l0Mkd0ayIsICJy
ZXNvdXJjZXMiLCBOVUxMKSk7CisgICAgICAgIHJldHVybiByZXNvdXJjZXNEaXIuZ2V0KCk7Cisg
ICAgfQorCisgICAgdm9pZCBhZGRMb2dGYXRhbEZsYWcodW5zaWduZWQgZmxhZykKKyAgICB7Cisg
ICAgICAgIHVuc2lnbmVkIGZhdGFsTWFzayA9IGdfbG9nX3NldF9hbHdheXNfZmF0YWwoc3RhdGlj
X2Nhc3Q8R0xvZ0xldmVsRmxhZ3M+KEdfTE9HX0ZBVEFMX01BU0spKTsKKyAgICAgICAgZmF0YWxN
YXNrIHw9IGZsYWc7CisgICAgICAgIGdfbG9nX3NldF9hbHdheXNfZmF0YWwoc3RhdGljX2Nhc3Q8
R0xvZ0xldmVsRmxhZ3M+KGZhdGFsTWFzaykpOworICAgIH0KKworICAgIHZvaWQgcmVtb3ZlTG9n
RmF0YWxGbGFnKHVuc2lnbmVkIGZsYWcpCisgICAgeworICAgICAgICB1bnNpZ25lZCBmYXRhbE1h
c2sgPSBnX2xvZ19zZXRfYWx3YXlzX2ZhdGFsKHN0YXRpY19jYXN0PEdMb2dMZXZlbEZsYWdzPihH
X0xPR19GQVRBTF9NQVNLKSk7CisgICAgICAgIGZhdGFsTWFzayAmPSB+ZmxhZzsKKyAgICAgICAg
Z19sb2dfc2V0X2Fsd2F5c19mYXRhbChzdGF0aWNfY2FzdDxHTG9nTGV2ZWxGbGFncz4oZmF0YWxN
YXNrKSk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgY2Fpcm9TdXJmYWNlc0VxdWFsKGNhaXJv
X3N1cmZhY2VfdCogczEsIGNhaXJvX3N1cmZhY2VfdCogczIpCisgICAgeworICAgICAgICByZXR1
cm4gKGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2Zvcm1hdChzMSkgPT0gY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9nZXRfZm9ybWF0KHMyKQorICAgICAgICAgICAgJiYgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfd2lkdGgoczEpID09IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHMyKQorICAgICAg
ICAgICAgJiYgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHMxKSA9PSBjYWlyb19pbWFn
ZV9zdXJmYWNlX2dldF9oZWlnaHQoczIpCisgICAgICAgICAgICAmJiBjYWlyb19pbWFnZV9zdXJm
YWNlX2dldF9zdHJpZGUoczEpID09IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShzMikK
KyAgICAgICAgICAgICYmICFtZW1jbXAoY29uc3RfY2FzdDxjb25zdCB2b2lkKj4ocmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzMSkpKSwKKyAgICAg
ICAgICAgICAgICBjb25zdF9jYXN0PGNvbnN0IHZvaWQqPihyZWludGVycHJldF9jYXN0PHZvaWQq
PihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHMyKSkpLAorICAgICAgICAgICAgICAgIGNh
aXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzMSkqY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRf
c3RyaWRlKHMxKSkpOworICAgIH0KKworICAgIEhhc2hTZXQ8R09iamVjdCo+IG1fd2F0Y2hlZE9i
amVjdHM7Cit9OworCisjZW5kaWYgLy8gVGVzdE1haW5faApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RQcmludGluZy5jcHAgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFByaW50aW5nLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40
MDhlMmFhZGNlODQ0NzU0NTNjYzc3ODQ0NWI0NDM3ZGYzOTA5NWFlCi0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RQcmludGluZy5jcHAK
QEAgLTAsMCArMSwyMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgorI2luY2x1ZGUg
PGdsaWIvZ3N0ZGlvLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCisjaWZk
ZWYgSEFWRV9HVEtfVU5JWF9QUklOVElORworI2luY2x1ZGUgPGd0ay9ndGt1bml4cHJpbnQuaD4K
KyNlbmRpZgorCitzdGF0aWMgY2hhcioga1RlbXBEaXJlY3Rvcnk7CisKK3N0YXRpYyB2b2lkIHRl
c3RQcmludE9wZXJhdGlvblByaW50U2V0dGluZ3MoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBv
aW50ZXIpCit7CisgICAgR1JlZlB0cjxXZWJLaXRQcmludE9wZXJhdGlvbj4gcHJpbnRPcGVyYXRp
b24gPSBhZG9wdEdSZWYod2Via2l0X3ByaW50X29wZXJhdGlvbl9uZXcodGVzdC0+bV93ZWJWaWV3
KSk7CisgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09C
SkVDVChwcmludE9wZXJhdGlvbi5nZXQoKSkpOworCisgICAgZ19hc3NlcnQoIXdlYmtpdF9wcmlu
dF9vcGVyYXRpb25fZ2V0X3ByaW50X3NldHRpbmdzKHByaW50T3BlcmF0aW9uLmdldCgpKSk7Cisg
ICAgZ19hc3NlcnQoIXdlYmtpdF9wcmludF9vcGVyYXRpb25fZ2V0X3BhZ2Vfc2V0dXAocHJpbnRP
cGVyYXRpb24uZ2V0KCkpKTsKKworICAgIEdSZWZQdHI8R3RrUHJpbnRTZXR0aW5ncz4gcHJpbnRT
ZXR0aW5ncyA9IGFkb3B0R1JlZihndGtfcHJpbnRfc2V0dGluZ3NfbmV3KCkpOworICAgIHRlc3Qt
PmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QocHJpbnRTZXR0
aW5ncy5nZXQoKSkpOworCisgICAgR1JlZlB0cjxHdGtQYWdlU2V0dXA+IHBhZ2VTZXR1cCA9IGFk
b3B0R1JlZihndGtfcGFnZV9zZXR1cF9uZXcoKSk7CisgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNE
ZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChwYWdlU2V0dXAuZ2V0KCkpKTsKKworICAg
IHdlYmtpdF9wcmludF9vcGVyYXRpb25fc2V0X3ByaW50X3NldHRpbmdzKHByaW50T3BlcmF0aW9u
LmdldCgpLCBwcmludFNldHRpbmdzLmdldCgpKTsKKyAgICB3ZWJraXRfcHJpbnRfb3BlcmF0aW9u
X3NldF9wYWdlX3NldHVwKHByaW50T3BlcmF0aW9uLmdldCgpLCBwYWdlU2V0dXAuZ2V0KCkpOwor
CisgICAgZ19hc3NlcnQod2Via2l0X3ByaW50X29wZXJhdGlvbl9nZXRfcHJpbnRfc2V0dGluZ3Mo
cHJpbnRPcGVyYXRpb24uZ2V0KCkpID09IHByaW50U2V0dGluZ3MuZ2V0KCkpOworICAgIGdfYXNz
ZXJ0KHdlYmtpdF9wcmludF9vcGVyYXRpb25fZ2V0X3BhZ2Vfc2V0dXAocHJpbnRPcGVyYXRpb24u
Z2V0KCkpID09IHBhZ2VTZXR1cC5nZXQoKSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3
UHJpbnRDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRQcmludE9wZXJhdGlv
biogcHJpbnRPcGVyYXRpb24sIFdlYlZpZXdUZXN0KiB0ZXN0KQoreworICAgIGdfYXNzZXJ0KHdl
YlZpZXcgPT0gdGVzdC0+bV93ZWJWaWV3KTsKKworICAgIGdfYXNzZXJ0KFdFQktJVF9JU19QUklO
VF9PUEVSQVRJT04ocHJpbnRPcGVyYXRpb24pKTsKKyAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0Rl
bGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHByaW50T3BlcmF0aW9uKSk7CisKKyAgICBn
X2Fzc2VydCghd2Via2l0X3ByaW50X29wZXJhdGlvbl9nZXRfcHJpbnRfc2V0dGluZ3MocHJpbnRP
cGVyYXRpb24pKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3ByaW50X29wZXJhdGlvbl9nZXRfcGFn
ZV9zZXR1cChwcmludE9wZXJhdGlvbikpOworCisgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5t
X21haW5Mb29wKTsKKworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2Vi
Vmlld1ByaW50KFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIGdfc2ln
bmFsX2Nvbm5lY3QodGVzdC0+bV93ZWJWaWV3LCAicHJpbnQiLCBHX0NBTExCQUNLKHdlYlZpZXdQ
cmludENhbGxiYWNrKSwgdGVzdCk7CisgICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxib2R5IG9u
TG9hZD1cInByaW50KCk7XCI+V2ViS2l0R1RLKyBwcmludGluZyB0ZXN0PC9ib2R5PjwvaHRtbD4i
LCAwKTsKKyAgICBnX21haW5fbG9vcF9ydW4odGVzdC0+bV9tYWluTG9vcCk7Cit9CisKKyNpZmRl
ZiBIQVZFX0dUS19VTklYX1BSSU5USU5HCitjbGFzcyBQcmludFRlc3Q6IHB1YmxpYyBXZWJWaWV3
VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShQcmludFRlc3QpOwor
CisgICAgc3RhdGljIHZvaWQgcHJpbnRGaW5pc2hlZENhbGxiYWNrKFdlYktpdFByaW50T3BlcmF0
aW9uKiwgUHJpbnRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0
ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBwcmludEZhaWxlZENh
bGxiYWNrKFdlYktpdFByaW50T3BlcmF0aW9uKiwgR0Vycm9yKiBlcnJvciwgUHJpbnRUZXN0KiB0
ZXN0KQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQodGVzdC0+bV9leHBlY3RlZEVycm9yKTsKKyAg
ICAgICAgZ19hc3NlcnQoZXJyb3IpOworICAgICAgICBnX2Fzc2VydChnX2Vycm9yX21hdGNoZXMo
ZXJyb3IsIFdFQktJVF9QUklOVF9FUlJPUiwgdGVzdC0+bV9leHBlY3RlZEVycm9yKSk7CisgICAg
fQorCisgICAgUHJpbnRUZXN0KCkKKyAgICAgICAgOiBtX2V4cGVjdGVkRXJyb3IoMCkKKyAgICB7
CisgICAgICAgIG1fcHJpbnRPcGVyYXRpb24gPSBhZG9wdEdSZWYod2Via2l0X3ByaW50X29wZXJh
dGlvbl9uZXcobV93ZWJWaWV3KSk7CisgICAgICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5U
ZXN0RmluaXNoZXMoR19PQkpFQ1QobV9wcmludE9wZXJhdGlvbi5nZXQoKSkpOworICAgICAgICBn
X3NpZ25hbF9jb25uZWN0KG1fcHJpbnRPcGVyYXRpb24uZ2V0KCksICJmaW5pc2hlZCIsIEdfQ0FM
TEJBQ0socHJpbnRGaW5pc2hlZENhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIGdfc2lnbmFsX2Nv
bm5lY3QobV9wcmludE9wZXJhdGlvbi5nZXQoKSwgImZhaWxlZCIsIEdfQ0FMTEJBQ0socHJpbnRG
YWlsZWRDYWxsYmFjayksIHRoaXMpOworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiB0ZXN0
UHJpbnRPcGVyYXRpb25QcmludFByaW50ZXIoR3RrUHJpbnRlciogcHJpbnRlciwgZ3BvaW50ZXIg
dXNlckRhdGEpCisgICAgeworICAgICAgICBpZiAoc3RyY21wKGd0a19wcmludGVyX2dldF9uYW1l
KHByaW50ZXIpLCAiUHJpbnQgdG8gRmlsZSIpKQorICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwor
CisgICAgICAgIEd0a1ByaW50ZXIqKiBmb3VuZFByaW50ZXIgPSBzdGF0aWNfY2FzdDxHdGtQcmlu
dGVyKio+KHVzZXJEYXRhKTsKKyAgICAgICAgKmZvdW5kUHJpbnRlciA9IHN0YXRpY19jYXN0PEd0
a1ByaW50ZXIqPihnX29iamVjdF9yZWYocHJpbnRlcikpOworICAgICAgICByZXR1cm4gVFJVRTsK
KyAgICB9CisKKyAgICBHdGtQcmludGVyKiBmaW5kUHJpbnRUb0ZpbGVQcmludGVyKCkKKyAgICB7
CisgICAgICAgIEd0a1ByaW50ZXIqIHByaW50ZXIgPSAwOworICAgICAgICBndGtfZW51bWVyYXRl
X3ByaW50ZXJzKHRlc3RQcmludE9wZXJhdGlvblByaW50UHJpbnRlciwgJnByaW50ZXIsIDAsIFRS
VUUpOworICAgICAgICByZXR1cm4gcHJpbnRlcjsKKyAgICB9CisKKyAgICB2b2lkIHdhaXRVbnRp
bFByaW50RmluaXNoZWQoKQorICAgIHsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxv
b3ApOworICAgIH0KKworICAgIEdSZWZQdHI8V2ViS2l0UHJpbnRPcGVyYXRpb24+IG1fcHJpbnRP
cGVyYXRpb247CisgICAgdW5zaWduZWQgbV9leHBlY3RlZEVycm9yOworfTsKKworc3RhdGljIHZv
aWQgdGVzdFByaW50T3BlcmF0aW9uUHJpbnQoUHJpbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVy
KQoreworICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keT5XZWJLaXRHVEsrIHByaW50aW5n
IHRlc3Q8L2JvZHk+PC9odG1sPiIsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hl
ZCgpOworCisgICAgR1JlZlB0cjxHdGtQcmludGVyPiBwcmludGVyID0gYWRvcHRHUmVmKHRlc3Qt
PmZpbmRQcmludFRvRmlsZVByaW50ZXIoKSk7CisgICAgaWYgKCFwcmludGVyKSB7CisgICAgICAg
IGdfbWVzc2FnZSgiJXMiLCAiQ2Fubm90IHRlc3QgV2ViS2l0UHJpbnRPcGVyYXRpb24vcHJpbnQ6
IG5vIHN1aXRhYmxlIHByaW50ZXIgZm91bmQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIEdPd25QdHI8Y2hhcj4gb3V0cHV0RmlsZW5hbWUoZ19idWlsZF9maWxlbmFtZShrVGVtcERp
cmVjdG9yeSwgIndlYmtpdC1wcmludC5wZGYiLCBOVUxMKSk7CisgICAgR1JlZlB0cjxHRmlsZT4g
b3V0cHV0RmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKG91dHB1dEZpbGVuYW1l
LmdldCgpKSk7CisgICAgR093blB0cjxjaGFyPiBvdXRwdXRVUkkoZ19maWxlX2dldF91cmkob3V0
cHV0RmlsZS5nZXQoKSkpOworCisgICAgR1JlZlB0cjxHdGtQcmludFNldHRpbmdzPiBwcmludFNl
dHRpbmdzID0gYWRvcHRHUmVmKGd0a19wcmludF9zZXR0aW5nc19uZXcoKSk7CisgICAgZ3RrX3By
aW50X3NldHRpbmdzX3NldF9wcmludGVyKHByaW50U2V0dGluZ3MuZ2V0KCksIGd0a19wcmludGVy
X2dldF9uYW1lKHByaW50ZXIuZ2V0KCkpKTsKKyAgICBndGtfcHJpbnRfc2V0dGluZ3Nfc2V0KHBy
aW50U2V0dGluZ3MuZ2V0KCksIEdUS19QUklOVF9TRVRUSU5HU19PVVRQVVRfVVJJLCBvdXRwdXRV
UkkuZ2V0KCkpOworCisgICAgd2Via2l0X3ByaW50X29wZXJhdGlvbl9zZXRfcHJpbnRfc2V0dGlu
Z3ModGVzdC0+bV9wcmludE9wZXJhdGlvbi5nZXQoKSwgcHJpbnRTZXR0aW5ncy5nZXQoKSk7Cisg
ICAgd2Via2l0X3ByaW50X29wZXJhdGlvbl9wcmludCh0ZXN0LT5tX3ByaW50T3BlcmF0aW9uLmdl
dCgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxQcmludEZpbmlzaGVkKCk7CisKKyAgICBHUmVmUHRy
PEdGaWxlSW5mbz4gZmlsZUluZm8gPSBhZG9wdEdSZWYoZ19maWxlX3F1ZXJ5X2luZm8ob3V0cHV0
RmlsZS5nZXQoKSwKKyAgICAgICAgR19GSUxFX0FUVFJJQlVURV9TVEFOREFSRF9TSVpFICIsIiBH
X0ZJTEVfQVRUUklCVVRFX1NUQU5EQVJEX0NPTlRFTlRfVFlQRSwKKyAgICAgICAgc3RhdGljX2Nh
c3Q8R0ZpbGVRdWVyeUluZm9GbGFncz4oMCksIDAsIDApKTsKKyAgICBnX2Fzc2VydChmaWxlSW5m
by5nZXQoKSk7CisgICAgZ19hc3NlcnRfY21waW50KGdfZmlsZV9pbmZvX2dldF9zaXplKGZpbGVJ
bmZvLmdldCgpKSwgPiwgMCk7CisgICAgZ19hc3NlcnRfY21wc3RyKGdfZmlsZV9pbmZvX2dldF9j
b250ZW50X3R5cGUoZmlsZUluZm8uZ2V0KCkpLCA9PSwgImFwcGxpY2F0aW9uL3BkZiIpOworCisg
ICAgZ19maWxlX2RlbGV0ZShvdXRwdXRGaWxlLmdldCgpLCAwLCAwKTsKK30KKworc3RhdGljIHZv
aWQgdGVzdFByaW50T3BlcmF0aW9uRXJyb3JzKFByaW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRl
cikKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHk+V2ViS2l0R1RLKyBwcmludGlu
ZyBlcnJvcnMgdGVzdDwvYm9keT48L2h0bWw+IiwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9h
ZEZpbmlzaGVkKCk7CisKKyAgICBHUmVmUHRyPEd0a1ByaW50ZXI+IHByaW50ZXIgPSBhZG9wdEdS
ZWYodGVzdC0+ZmluZFByaW50VG9GaWxlUHJpbnRlcigpKTsKKyAgICBpZiAoIXByaW50ZXIpIHsK
KyAgICAgICAgZ19tZXNzYWdlKCIlcyIsICJDYW5ub3QgdGVzdCBXZWJLaXRQcmludE9wZXJhdGlv
bi9wcmludDogbm8gc3VpdGFibGUgcHJpbnRlciBmb3VuZCIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgLy8gR2VuZXJhbCBFcnJvcjogaW52YWxpZCBmaWxlbmFtZS4KKyAgICB0ZXN0
LT5tX2V4cGVjdGVkRXJyb3IgPSBXRUJLSVRfUFJJTlRfRVJST1JfR0VORVJBTDsKKyAgICBHUmVm
UHRyPEd0a1ByaW50U2V0dGluZ3M+IHByaW50U2V0dGluZ3MgPSBhZG9wdEdSZWYoZ3RrX3ByaW50
X3NldHRpbmdzX25ldygpKTsKKyAgICBndGtfcHJpbnRfc2V0dGluZ3Nfc2V0X3ByaW50ZXIocHJp
bnRTZXR0aW5ncy5nZXQoKSwgZ3RrX3ByaW50ZXJfZ2V0X25hbWUocHJpbnRlci5nZXQoKSkpOwor
ICAgIGd0a19wcmludF9zZXR0aW5nc19zZXQocHJpbnRTZXR0aW5ncy5nZXQoKSwgR1RLX1BSSU5U
X1NFVFRJTkdTX09VVFBVVF9VUkksICJmaWxlOi8vL2Zvby9iYXIiKTsKKyAgICB3ZWJraXRfcHJp
bnRfb3BlcmF0aW9uX3NldF9wcmludF9zZXR0aW5ncyh0ZXN0LT5tX3ByaW50T3BlcmF0aW9uLmdl
dCgpLCBwcmludFNldHRpbmdzLmdldCgpKTsKKyAgICB3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX3By
aW50KHRlc3QtPm1fcHJpbnRPcGVyYXRpb24uZ2V0KCkpOworICAgIHRlc3QtPndhaXRVbnRpbFBy
aW50RmluaXNoZWQoKTsKKworICAgIC8vIFByaW50ZXIgbm90IGZvdW5kIGVycm9yLgorICAgIHRl
c3QtPm1fZXhwZWN0ZWRFcnJvciA9IFdFQktJVF9QUklOVF9FUlJPUl9QUklOVEVSX05PVF9GT1VO
RDsKKyAgICBndGtfcHJpbnRfc2V0dGluZ3Nfc2V0X3ByaW50ZXIocHJpbnRTZXR0aW5ncy5nZXQo
KSwgIlRoZSBmYWtlIFdlYktpdCBwcmludGVyIik7CisgICAgd2Via2l0X3ByaW50X29wZXJhdGlv
bl9wcmludCh0ZXN0LT5tX3ByaW50T3BlcmF0aW9uLmdldCgpKTsKKyAgICB0ZXN0LT53YWl0VW50
aWxQcmludEZpbmlzaGVkKCk7CisKKyAgICAvLyBObyBwYWdlcyB0byBwcmludDogcHJpbnQgZXZl
biBwYWdlcyBmb3IgYSBzaW5nbGUgcGFnZSBkb2N1bWVudC4KKyAgICB0ZXN0LT5tX2V4cGVjdGVk
RXJyb3IgPSBXRUJLSVRfUFJJTlRfRVJST1JfSU5WQUxJRF9QQUdFX1JBTkdFOworICAgIGd0a19w
cmludF9zZXR0aW5nc19zZXRfcHJpbnRlcihwcmludFNldHRpbmdzLmdldCgpLCBndGtfcHJpbnRl
cl9nZXRfbmFtZShwcmludGVyLmdldCgpKSk7CisgICAgZ3RrX3ByaW50X3NldHRpbmdzX3NldF9w
YWdlX3NldChwcmludFNldHRpbmdzLmdldCgpLCBHVEtfUEFHRV9TRVRfRVZFTik7CisgICAgd2Vi
a2l0X3ByaW50X29wZXJhdGlvbl9wcmludCh0ZXN0LT5tX3ByaW50T3BlcmF0aW9uLmdldCgpKTsK
KyAgICB0ZXN0LT53YWl0VW50aWxQcmludEZpbmlzaGVkKCk7Cit9CisjZW5kaWYgLy8gSEFWRV9H
VEtfVU5JWF9QUklOVElORworCit2b2lkIGJlZm9yZUFsbCgpCit7CisgICAga1RlbXBEaXJlY3Rv
cnkgPSBnX2Rpcl9tYWtlX3RtcCgiV2ViS2l0MlRlc3RzLVhYWFhYWCIsIDApOworICAgIGdfYXNz
ZXJ0KGtUZW1wRGlyZWN0b3J5KTsKKworICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFByaW50
T3BlcmF0aW9uIiwgInByaW50aW5nLXNldHRpbmdzIiwgdGVzdFByaW50T3BlcmF0aW9uUHJpbnRT
ZXR0aW5ncyk7CisgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJwcmludCIs
IHRlc3RXZWJWaWV3UHJpbnQpOworI2lmZGVmIEhBVkVfR1RLX1VOSVhfUFJJTlRJTkcKKyAgICBQ
cmludFRlc3Q6OmFkZCgiV2ViS2l0UHJpbnRPcGVyYXRpb24iLCAicHJpbnQiLCB0ZXN0UHJpbnRP
cGVyYXRpb25QcmludCk7CisgICAgUHJpbnRUZXN0OjphZGQoIldlYktpdFByaW50T3BlcmF0aW9u
IiwgInByaW50LWVycm9ycyIsIHRlc3RQcmludE9wZXJhdGlvbkVycm9ycyk7CisjZW5kaWYKK30K
Kwordm9pZCBhZnRlckFsbCgpCit7CisgICAgZ19ybWRpcihrVGVtcERpcmVjdG9yeSk7Cit9CmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFJlc291
cmNlcy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFJlc291
cmNlcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMGMyMWM3MWViMDg0YjMwOTE4ZGE2ZTIwNGQ0MDQyMTBmNjFj
ZTVjNQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Mkd0ay9UZXN0UmVzb3VyY2VzLmNwcApAQCAtMCwwICsxLDc4OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJX
ZWJLaXRUZXN0U2VydmVyLmgiCisjaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCitzdGF0aWMg
V2ViS2l0VGVzdFNlcnZlcioga1NlcnZlcjsKKworc3RhdGljIGNvbnN0IGNoYXIqIGtJbmRleEh0
bWwgPQorICAgICI8aHRtbD48aGVhZD4iCisgICAgIiA8bGluayByZWw9J3N0eWxlc2hlZXQnIGhy
ZWY9Jy9zdHlsZS5jc3MnIHR5cGU9J3RleHQvY3NzJz4iCisgICAgIiA8c2NyaXB0IGxhbmd1YWdl
PSdqYXZhc2NyaXB0JyBzcmM9Jy9qYXZhc2NyaXB0LmpzJz48L3NjcmlwdD4iCisgICAgIjwvaGVh
ZD48Ym9keT5XZWJLaXRHVEsrIHJlc291cmNlcyB0ZXN0PC9ib2R5PjwvaHRtbD4iOworCitzdGF0
aWMgY29uc3QgY2hhcioga1N0eWxlQ1NTID0KKyAgICAiYm9keSB7IgorICAgICIgICAgbWFyZ2lu
OiAwcHg7IgorICAgICIgICAgcGFkZGluZzogMHB4OyIKKyAgICAiICAgIGZvbnQtZmFtaWx5OiBz
YW5zLXNlcmlmOyIKKyAgICAiICAgIGJhY2tncm91bmQ6IHVybCgvYmxhbmsuaWNvKSAwIDAgbm8t
cmVwZWF0OyIKKyAgICAiICAgIGNvbG9yOiBibGFjazsiCisgICAgIn0iOworCitzdGF0aWMgY29u
c3QgY2hhcioga0phdmFzY3JpcHQgPSAiZnVuY3Rpb24gZm9vICgpIHsgdmFyIGEgPSAxOyB9IjsK
KworY2xhc3MgUmVzb3VyY2VzVGVzdDogcHVibGljIFdlYlZpZXdUZXN0IHsKK3B1YmxpYzoKKyAg
ICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFJlc291cmNlc1Rlc3QpOworCisgICAgc3RhdGljIHZv
aWQgcmVzb3VyY2VTZW50UmVxdWVzdENhbGxiYWNrKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJj
ZSwgV2ViS2l0VVJJUmVxdWVzdCogcmVxdWVzdCwgV2ViS2l0VVJJUmVzcG9uc2UqIHJlZGlyZWN0
UmVzcG9uc2UsIFJlc291cmNlc1Rlc3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT5hc3Nl
cnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHJlcXVlc3QpKTsKKyAg
ICAgICAgaWYgKHJlZGlyZWN0UmVzcG9uc2UpCisgICAgICAgICAgICB0ZXN0LT5hc3NlcnRPYmpl
Y3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHJlZGlyZWN0UmVzcG9uc2UpKTsK
KyAgICAgICAgdGVzdC0+cmVzb3VyY2VTZW50UmVxdWVzdChyZXNvdXJjZSwgcmVxdWVzdCwgcmVk
aXJlY3RSZXNwb25zZSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVzb3VyY2VSZWNlaXZl
ZFJlc3BvbnNlQ2FsbGJhY2soV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBHUGFyYW1TcGVj
KiwgUmVzb3VyY2VzVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF93
ZWJfcmVzb3VyY2VfZ2V0X3Jlc3BvbnNlKHJlc291cmNlKSk7CisgICAgICAgIHRlc3QtPnJlc291
cmNlUmVjZWl2ZWRSZXNwb25zZShyZXNvdXJjZSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQg
cmVzb3VyY2VSZWNlaXZlZERhdGFDYWxsYmFjayhXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2Us
IGd1aW50NjQgYnl0ZXNSZWNlaXZlZCwgUmVzb3VyY2VzVGVzdCogdGVzdCkKKyAgICB7CisgICAg
ICAgIHRlc3QtPnJlc291cmNlUmVjZWl2ZWREYXRhKHJlc291cmNlLCBieXRlc1JlY2VpdmVkKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZXNvdXJjZUZpbmlzaGVkQ2FsbGJhY2soV2ViS2l0
V2ViUmVzb3VyY2UqIHJlc291cmNlLCBSZXNvdXJjZXNUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAg
ICAgdGVzdC0+cmVzb3VyY2VGaW5pc2hlZChyZXNvdXJjZSk7CisgICAgfQorCisgICAgc3RhdGlj
IHZvaWQgcmVzb3VyY2VGYWlsZWRDYWxsYmFjayhXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2Us
IEdFcnJvciogZXJyb3IsIFJlc291cmNlc1Rlc3QqIHRlc3QpCisgICAgeworICAgICAgICBnX2Fz
c2VydChlcnJvcik7CisgICAgICAgIHRlc3QtPnJlc291cmNlRmFpbGVkKHJlc291cmNlLCBlcnJv
cik7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVzb3VyY2VMb2FkU3RhcnRlZENhbGxiYWNr
KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgV2Vi
S2l0VVJJUmVxdWVzdCogcmVxdWVzdCwgUmVzb3VyY2VzVGVzdCogdGVzdCkKKyAgICB7CisgICAg
ICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1Qo
cmVzb3VyY2UpKTsKKyAgICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RG
aW5pc2hlcyhHX09CSkVDVChyZXF1ZXN0KSk7CisKKyAgICAgICAgLy8gSWdub3JlIGZhdmljb25z
LgorICAgICAgICBpZiAoZ19zdHJfaGFzX3N1ZmZpeCh3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3Vy
aShyZXF1ZXN0KSwgImZhdmljb24uaWNvIikpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgdGVzdC0+cmVzb3VyY2VMb2FkU3RhcnRlZChyZXNvdXJjZSwgcmVxdWVzdCk7CisgICAgICAg
IGdfc2lnbmFsX2Nvbm5lY3QocmVzb3VyY2UsICJzZW50LXJlcXVlc3QiLCBHX0NBTExCQUNLKHJl
c291cmNlU2VudFJlcXVlc3RDYWxsYmFjayksIHRlc3QpOworICAgICAgICBnX3NpZ25hbF9jb25u
ZWN0KHJlc291cmNlLCAibm90aWZ5OjpyZXNwb25zZSIsIEdfQ0FMTEJBQ0socmVzb3VyY2VSZWNl
aXZlZFJlc3BvbnNlQ2FsbGJhY2spLCB0ZXN0KTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChy
ZXNvdXJjZSwgInJlY2VpdmVkLWRhdGEiLCBHX0NBTExCQUNLKHJlc291cmNlUmVjZWl2ZWREYXRh
Q2FsbGJhY2spLCB0ZXN0KTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChyZXNvdXJjZSwgImZp
bmlzaGVkIiwgR19DQUxMQkFDSyhyZXNvdXJjZUZpbmlzaGVkQ2FsbGJhY2spLCB0ZXN0KTsKKyAg
ICAgICAgZ19zaWduYWxfY29ubmVjdChyZXNvdXJjZSwgImZhaWxlZCIsIEdfQ0FMTEJBQ0socmVz
b3VyY2VGYWlsZWRDYWxsYmFjayksIHRlc3QpOworICAgIH0KKworICAgIHZvaWQgY2xlYXJTdWJy
ZXNvdXJjZXMoKQorICAgIHsKKyAgICAgICAgZ19saXN0X2ZyZWVfZnVsbChtX3N1YnJlc291cmNl
cywgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oZ19vYmplY3RfdW5yZWYpKTsKKyAg
ICAgICAgbV9zdWJyZXNvdXJjZXMgPSAwOworICAgIH0KKworICAgIFJlc291cmNlc1Rlc3QoKQor
ICAgICAgICA6IFdlYlZpZXdUZXN0KCkKKyAgICAgICAgLCBtX3Jlc291cmNlc0xvYWRlZCgwKQor
ICAgICAgICAsIG1fcmVzb3VyY2VzVG9Mb2FkKDApCisgICAgICAgICwgbV9yZXNvdXJjZURhdGFT
aXplKDApCisgICAgICAgICwgbV9zdWJyZXNvdXJjZXMoMCkKKyAgICB7CisgICAgICAgIGdfc2ln
bmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAicmVzb3VyY2UtbG9hZC1zdGFydGVkIiwgR19DQUxMQkFD
SyhyZXNvdXJjZUxvYWRTdGFydGVkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICB9CisKKyAgICB+UmVz
b3VyY2VzVGVzdCgpCisgICAgeworICAgICAgICBjbGVhclN1YnJlc291cmNlcygpOworICAgIH0K
KworICAgIHZpcnR1YWwgdm9pZCByZXNvdXJjZUxvYWRTdGFydGVkKFdlYktpdFdlYlJlc291cmNl
KiByZXNvdXJjZSwgV2ViS2l0VVJJUmVxdWVzdCogcmVxdWVzdCkKKyAgICB7CisgICAgfQorCisg
ICAgdmlydHVhbCB2b2lkIHJlc291cmNlU2VudFJlcXVlc3QoV2ViS2l0V2ViUmVzb3VyY2UqIHJl
c291cmNlLCBXZWJLaXRVUklSZXF1ZXN0KiByZXF1ZXN0LCBXZWJLaXRVUklSZXNwb25zZSogcmVk
aXJlY3RSZXNwb25zZSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHJlc291cmNl
UmVjZWl2ZWRSZXNwb25zZShXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UpCisgICAgeworICAg
IH0KKworICAgIHZpcnR1YWwgdm9pZCByZXNvdXJjZVJlY2VpdmVkRGF0YShXZWJLaXRXZWJSZXNv
dXJjZSogcmVzb3VyY2UsIGd1aW50NjQgYnl0ZXNSZWNlaXZlZCkKKyAgICB7CisgICAgfQorCisg
ICAgdmlydHVhbCB2b2lkIHJlc291cmNlRmluaXNoZWQoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291
cmNlKQorICAgIHsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVk
KHJlc291cmNlLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKKyAgICAg
ICAgaWYgKHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9yZXNvdXJjZShtX3dlYlZpZXcpICE9IHJl
c291cmNlKQorICAgICAgICAgICAgbV9zdWJyZXNvdXJjZXMgPSBnX2xpc3RfcHJlcGVuZChtX3N1
YnJlc291cmNlcywgZ19vYmplY3RfcmVmKHJlc291cmNlKSk7CisgICAgICAgIGlmICgrK21fcmVz
b3VyY2VzTG9hZGVkID09IG1fcmVzb3VyY2VzVG9Mb2FkKQorICAgICAgICAgICAgZ19tYWluX2xv
b3BfcXVpdChtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVzb3VyY2VG
YWlsZWQoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBHRXJyb3IqIGVycm9yKQorICAgIHsK
KyAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICB9CisKKyAgICB2b2lkIHdhaXRV
bnRpbFJlc291cmNlc0xvYWRlZChzaXplX3QgcmVzb3VyY2VzQ291bnQpCisgICAgeworICAgICAg
ICBtX3Jlc291cmNlc0xvYWRlZCA9IDA7CisgICAgICAgIG1fcmVzb3VyY2VzVG9Mb2FkID0gcmVz
b3VyY2VzQ291bnQ7CisgICAgICAgIGNsZWFyU3VicmVzb3VyY2VzKCk7CisgICAgICAgIGdfbWFp
bl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBHTGlzdCogc3VicmVzb3VyY2Vz
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3N1YnJlc291cmNlczsKKyAgICB9CisKKyAgICBz
dGF0aWMgdm9pZCByZXNvdXJjZUdldERhdGFDYWxsYmFjayhHT2JqZWN0KiBvYmplY3QsIEdBc3lu
Y1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkKKyAgICB7CisgICAgICAgIHNpemVf
dCBkYXRhU2l6ZTsKKyAgICAgICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAgICAgICB1bnNp
Z25lZCBjaGFyKiBkYXRhID0gd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZGF0YV9maW5pc2goV0VC
S0lUX1dFQl9SRVNPVVJDRShvYmplY3QpLCByZXN1bHQsICZkYXRhU2l6ZSwgJmVycm9yLm91dFB0
cigpKTsKKyAgICAgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKyAgICAgICAgZ19hc3NlcnQo
ZGF0YSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChkYXRhU2l6ZSwgPiwgMCk7CisKKyAgICAg
ICAgUmVzb3VyY2VzVGVzdCogdGVzdCA9IHN0YXRpY19jYXN0PFJlc291cmNlc1Rlc3QqPih1c2Vy
RGF0YSk7CisgICAgICAgIHRlc3QtPm1fcmVzb3VyY2VEYXRhLnNldChyZWludGVycHJldF9jYXN0
PGNoYXIqPihkYXRhKSk7CisgICAgICAgIHRlc3QtPm1fcmVzb3VyY2VEYXRhU2l6ZSA9IGRhdGFT
aXplOworICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworICAgIH0K
KworICAgIHZvaWQgY2hlY2tSZXNvdXJjZURhdGEoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNl
KQorICAgIHsKKyAgICAgICAgbV9yZXNvdXJjZURhdGFTaXplID0gMDsKKyAgICAgICAgd2Via2l0
X3dlYl9yZXNvdXJjZV9nZXRfZGF0YShyZXNvdXJjZSwgMCwgcmVzb3VyY2VHZXREYXRhQ2FsbGJh
Y2ssIHRoaXMpOworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisKKyAgICAg
ICAgY29uc3QgY2hhciogdXJpID0gd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJpKHJlc291cmNl
KTsKKyAgICAgICAgaWYgKHVyaSA9PSBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIikpIHsKKyAg
ICAgICAgICAgIGdfYXNzZXJ0X2NtcGludChtX3Jlc291cmNlRGF0YVNpemUsID09LCBzdHJsZW4o
a0luZGV4SHRtbCkpOworICAgICAgICAgICAgZ19hc3NlcnQoIXN0cm5jbXAobV9yZXNvdXJjZURh
dGEuZ2V0KCksIGtJbmRleEh0bWwsIG1fcmVzb3VyY2VEYXRhU2l6ZSkpOworICAgICAgICB9IGVs
c2UgaWYgKHVyaSA9PSBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvc3R5bGUuY3NzIikpIHsKKyAg
ICAgICAgICAgIGdfYXNzZXJ0X2NtcGludChtX3Jlc291cmNlRGF0YVNpemUsID09LCBzdHJsZW4o
a1N0eWxlQ1NTKSk7CisgICAgICAgICAgICBnX2Fzc2VydCghc3RybmNtcChtX3Jlc291cmNlRGF0
YS5nZXQoKSwga1N0eWxlQ1NTLCBtX3Jlc291cmNlRGF0YVNpemUpKTsKKyAgICAgICAgfSBlbHNl
IGlmICh1cmkgPT0ga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2phdmFzY3JpcHQuanMiKSkgewor
ICAgICAgICAgICAgZ19hc3NlcnRfY21waW50KG1fcmVzb3VyY2VEYXRhU2l6ZSwgPT0sIHN0cmxl
bihrSmF2YXNjcmlwdCkpOworICAgICAgICAgICAgZ19hc3NlcnQoIXN0cm5jbXAobV9yZXNvdXJj
ZURhdGEuZ2V0KCksIGtKYXZhc2NyaXB0LCBtX3Jlc291cmNlRGF0YVNpemUpKTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgICAgICBtX3Jl
c291cmNlRGF0YS5jbGVhcigpOworICAgIH0KKworICAgIHNpemVfdCBtX3Jlc291cmNlc0xvYWRl
ZDsKKyAgICBzaXplX3QgbV9yZXNvdXJjZXNUb0xvYWQ7CisgICAgR093blB0cjxjaGFyPiBtX3Jl
c291cmNlRGF0YTsKKyAgICBzaXplX3QgbV9yZXNvdXJjZURhdGFTaXplOworICAgIEdMaXN0KiBt
X3N1YnJlc291cmNlczsKK307CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3UmVzb3VyY2VzKFJl
c291cmNlc1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8gTm90aGluZyBsb2Fk
ZWQgeWV0LCB0aGVyZSBzaG91bG5kJ3QgYmUgcmVzb3VyY2VzLgorICAgIGdfYXNzZXJ0KCF3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2UodGVzdC0+bV93ZWJWaWV3KSk7CisgICAgZ19h
c3NlcnQoIXRlc3QtPnN1YnJlc291cmNlcygpKTsKKworICAgIC8vIExvYWQgc2ltcGxlIHBhZ2Ug
d2l0aG91dCBzdWJyZXNvdXJjZXMuCisgICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxib2R5PlRl
c3RpbmcgV2ViS2l0R1RLKzwvYm9keT48L2h0bWw+IiwgMCk7CisgICAgdGVzdC0+d2FpdFVudGls
TG9hZEZpbmlzaGVkKCk7CisgICAgV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlID0gd2Via2l0
X3dlYl92aWV3X2dldF9tYWluX3Jlc291cmNlKHRlc3QtPm1fd2ViVmlldyk7CisgICAgZ19hc3Nl
cnQocmVzb3VyY2UpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3Vy
aSh0ZXN0LT5tX3dlYlZpZXcpLCA9PSwgd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJpKHJlc291
cmNlKSk7CisgICAgZ19hc3NlcnQoIXRlc3QtPnN1YnJlc291cmNlcygpKTsKKworICAgIC8vIExv
YWQgc2ltcGxlIHBhZ2Ugd2l0aCBzdWJyZXNvdXJjZXMuCisgICAgdGVzdC0+bG9hZFVSSShrU2Vy
dmVyLT5nZXRVUklGb3JQYXRoKCIvIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxSZXNv
dXJjZXNMb2FkZWQoNCk7CisKKyAgICByZXNvdXJjZSA9IHdlYmtpdF93ZWJfdmlld19nZXRfbWFp
bl9yZXNvdXJjZSh0ZXN0LT5tX3dlYlZpZXcpOworICAgIGdfYXNzZXJ0KHJlc291cmNlKTsKKyAg
ICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dldF91cmkodGVzdC0+bV93ZWJWaWV3
KSwgPT0sIHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaShyZXNvdXJjZSkpOworICAgIEdMaXN0
KiBzdWJyZXNvdXJjZXMgPSB0ZXN0LT5zdWJyZXNvdXJjZXMoKTsKKyAgICBnX2Fzc2VydChzdWJy
ZXNvdXJjZXMpOworICAgIGdfYXNzZXJ0X2NtcGludChnX2xpc3RfbGVuZ3RoKHN1YnJlc291cmNl
cyksID09LCAzKTsKKworI2lmIDAKKyAgICAvLyBMb2FkIHRoZSBzYW1lIFVSSSBhZ2Fpbi4KKyAg
ICAvLyBGSVhNRTogd2UgbmVlZCBhIHdvcmthcm91bmQgZm9yIGJ1ZyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg1MTAuCisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVy
LT5nZXRVUklGb3JQYXRoKCIvIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxSZXNvdXJj
ZXNMb2FkZWQoNCk7CisjZW5kaWYKKworICAgIC8vIFJlbG9hZC4KKyAgICB3ZWJraXRfd2ViX3Zp
ZXdfcmVsb2FkX2J5cGFzc19jYWNoZSh0ZXN0LT5tX3dlYlZpZXcpOworICAgIHRlc3QtPndhaXRV
bnRpbFJlc291cmNlc0xvYWRlZCg0KTsKK30KKworY2xhc3MgU2luZ2xlUmVzb3VyY2VMb2FkVGVz
dDogcHVibGljIFJlc291cmNlc1Rlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJ
WFRVUkUoU2luZ2xlUmVzb3VyY2VMb2FkVGVzdCk7CisKKyAgICBlbnVtIExvYWRFdmVudHMgewor
ICAgICAgICBTdGFydGVkLAorICAgICAgICBTZW50UmVxdWVzdCwKKyAgICAgICAgUmVkaXJlY3Rl
ZCwKKyAgICAgICAgUmVjZWl2ZWRSZXNwb25zZSwKKyAgICAgICAgUmVjZWl2ZWREYXRhLAorICAg
ICAgICBGaW5pc2hlZCwKKyAgICAgICAgRmFpbGVkCisgICAgfTsKKworICAgIFNpbmdsZVJlc291
cmNlTG9hZFRlc3QoKQorICAgICAgICA6IFJlc291cmNlc1Rlc3QoKQorICAgICAgICAsIG1fcmVz
b3VyY2VEYXRhUmVjZWl2ZWQoMCkKKyAgICB7CisgICAgICAgIG1fcmVzb3VyY2VzVG9Mb2FkID0g
MjsKKyAgICB9CisKKyAgICB2b2lkIHJlc291cmNlTG9hZFN0YXJ0ZWQoV2ViS2l0V2ViUmVzb3Vy
Y2UqIHJlc291cmNlLCBXZWJLaXRVUklSZXF1ZXN0KiByZXF1ZXN0KQorICAgIHsKKyAgICAgICAg
aWYgKHJlc291cmNlID09IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9yZXNvdXJjZShtX3dlYlZp
ZXcpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fcmVzb3VyY2VEYXRhUmVjZWl2
ZWQgPSAwOworICAgICAgICBtX3Jlc291cmNlID0gcmVzb3VyY2U7CisgICAgICAgIG1fbG9hZEV2
ZW50cy5hcHBlbmQoU3RhcnRlZCk7CisgICAgfQorCisgICAgdm9pZCByZXNvdXJjZVNlbnRSZXF1
ZXN0KFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgV2ViS2l0VVJJUmVxdWVzdCogcmVxdWVz
dCwgV2ViS2l0VVJJUmVzcG9uc2UqIHJlZGlyZWN0UmVzcG9uc2UpCisgICAgeworICAgICAgICBp
ZiAocmVzb3VyY2UgIT0gbV9yZXNvdXJjZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBpZiAocmVkaXJlY3RSZXNwb25zZSkKKyAgICAgICAgICAgIG1fbG9hZEV2ZW50cy5hcHBlbmQo
UmVkaXJlY3RlZCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fbG9hZEV2ZW50cy5hcHBl
bmQoU2VudFJlcXVlc3QpOworICAgIH0KKworICAgIHZvaWQgcmVzb3VyY2VSZWNlaXZlZFJlc3Bv
bnNlKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSkKKyAgICB7CisgICAgICAgIGlmIChyZXNv
dXJjZSAhPSBtX3Jlc291cmNlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fbG9h
ZEV2ZW50cy5hcHBlbmQoUmVjZWl2ZWRSZXNwb25zZSk7CisgICAgfQorCisgICAgdm9pZCByZXNv
dXJjZVJlY2VpdmVkRGF0YShXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIGd1aW50NjQgYnl0
ZXNSZWNlaXZlZCkKKyAgICB7CisgICAgICAgIGlmIChyZXNvdXJjZSAhPSBtX3Jlc291cmNlKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fcmVzb3VyY2VEYXRhUmVjZWl2ZWQgKz0g
Ynl0ZXNSZWNlaXZlZDsKKyAgICAgICAgaWYgKCFtX2xvYWRFdmVudHMuY29udGFpbnMoUmVjZWl2
ZWREYXRhKSkKKyAgICAgICAgICAgIG1fbG9hZEV2ZW50cy5hcHBlbmQoUmVjZWl2ZWREYXRhKTsK
KyAgICB9CisKKyAgICB2b2lkIHJlc291cmNlRmluaXNoZWQoV2ViS2l0V2ViUmVzb3VyY2UqIHJl
c291cmNlKQorICAgIHsKKyAgICAgICAgaWYgKHJlc291cmNlICE9IG1fcmVzb3VyY2UpIHsKKyAg
ICAgICAgICAgIFJlc291cmNlc1Rlc3Q6OnJlc291cmNlRmluaXNoZWQocmVzb3VyY2UpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFtX2xvYWRFdmVudHMu
Y29udGFpbnMoRmFpbGVkKSkgeworICAgICAgICAgICAgV2ViS2l0VVJJUmVzcG9uc2UqIHJlc3Bv
bnNlID0gd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfcmVzcG9uc2UobV9yZXNvdXJjZS5nZXQoKSk7
CisgICAgICAgICAgICBnX2Fzc2VydChyZXNwb25zZSk7CisgICAgICAgICAgICBnX2Fzc2VydF9j
bXBpbnQod2Via2l0X3VyaV9yZXNwb25zZV9nZXRfY29udGVudF9sZW5ndGgocmVzcG9uc2UpLCA9
PSwgbV9yZXNvdXJjZURhdGFSZWNlaXZlZCk7CisgICAgICAgIH0KKyAgICAgICAgbV9sb2FkRXZl
bnRzLmFwcGVuZChGaW5pc2hlZCk7CisgICAgICAgIFJlc291cmNlc1Rlc3Q6OnJlc291cmNlRmlu
aXNoZWQocmVzb3VyY2UpOworICAgIH0KKworICAgIHZvaWQgcmVzb3VyY2VGYWlsZWQoV2ViS2l0
V2ViUmVzb3VyY2UqIHJlc291cmNlLCBHRXJyb3IqIGVycm9yKQorICAgIHsKKyAgICAgICAgaWYg
KHJlc291cmNlID09IG1fcmVzb3VyY2UpCisgICAgICAgICAgICBtX2xvYWRFdmVudHMuYXBwZW5k
KEZhaWxlZCk7CisgICAgfQorCisgICAgdm9pZCB3YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hl
ZCgpCisgICAgeworICAgICAgICBtX3Jlc291cmNlID0gMDsKKyAgICAgICAgbV9yZXNvdXJjZXNM
b2FkZWQgPSAwOworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgfQor
CisgICAgV2ViS2l0VVJJUmVzcG9uc2UqIHdhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlzaGVkQW5k
UmV0dXJuVVJJUmVzcG9uc2UoKQorICAgIHsKKyAgICAgICAgd2FpdFVudGlsUmVzb3VyY2VMb2Fk
RmluaXNoZWQoKTsKKyAgICAgICAgZ19hc3NlcnQobV9yZXNvdXJjZSk7CisgICAgICAgIHJldHVy
biB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF9yZXNwb25zZShtX3Jlc291cmNlLmdldCgpKTsKKyAg
ICB9CisKKyAgICBHUmVmUHRyPFdlYktpdFdlYlJlc291cmNlPiBtX3Jlc291cmNlOworICAgIFZl
Y3RvcjxMb2FkRXZlbnRzPiBtX2xvYWRFdmVudHM7CisgICAgZ3VpbnQ2NCBtX3Jlc291cmNlRGF0
YVJlY2VpdmVkOworfTsKKworc3RhdGljIHZvaWQgdGVzdFdlYlJlc291cmNlTG9hZGluZyhTaW5n
bGVSZXNvdXJjZUxvYWRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxv
YWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2phdmFzY3JpcHQuaHRtbCIpLmRhdGEoKSk7
CisgICAgdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2Vy
dCh0ZXN0LT5tX3Jlc291cmNlKTsKKyAgICBWZWN0b3I8U2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6
TG9hZEV2ZW50cz4mIGV2ZW50cyA9IHRlc3QtPm1fbG9hZEV2ZW50czsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDUpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNb
MF0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoZXZlbnRzWzFdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6U2VudFJlcXVlc3Qp
OworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRU
ZXN0OjpSZWNlaXZlZFJlc3BvbnNlKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzNdLCA9
PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6UmVjZWl2ZWREYXRhKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoZXZlbnRzWzRdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6RmluaXNoZWQpOwor
ICAgIGV2ZW50cy5jbGVhcigpOworCisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklG
b3JQYXRoKCIvcmVkaXJlY3RlZC1jc3MuaHRtbCIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVu
dGlsUmVzb3VyY2VMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3Jlc291cmNl
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDYpOworICAgIGdfYXNz
ZXJ0X2NtcGludChldmVudHNbMF0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpTdGFydGVk
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2Fk
VGVzdDo6U2VudFJlcXVlc3QpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBT
aW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpSZWRpcmVjdGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
ZXZlbnRzWzNdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6UmVjZWl2ZWRSZXNwb25zZSk7
CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1s0XSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRl
c3Q6OlJlY2VpdmVkRGF0YSk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1s1XSwgPT0sIFNp
bmdsZVJlc291cmNlTG9hZFRlc3Q6OkZpbmlzaGVkKTsKKyAgICBldmVudHMuY2xlYXIoKTsKKwor
ICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2ludmFsaWQtY3NzLmh0
bWwiKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlzaGVkKCk7
CisgICAgZ19hc3NlcnQodGVzdC0+bV9yZXNvdXJjZSk7CisgICAgZ19hc3NlcnRfY21waW50KGV2
ZW50cy5zaXplKCksID09LCA0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwg
U2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6U3RhcnRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2
ZW50c1sxXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlNlbnRSZXF1ZXN0KTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6RmFp
bGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzNdLCA9PSwgU2luZ2xlUmVzb3VyY2VM
b2FkVGVzdDo6RmluaXNoZWQpOworICAgIGV2ZW50cy5jbGVhcigpOworfQorCitzdGF0aWMgdm9p
ZCB0ZXN0V2ViUmVzb3VyY2VSZXNwb25zZShTaW5nbGVSZXNvdXJjZUxvYWRUZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQoreworICAgIC8vIE5vIGNhY2hlZCByZXNvdXJjZTogRmlyc3QgbG9hZC4K
KyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9qYXZhc2NyaXB0Lmh0
bWwiKS5kYXRhKCkpOworICAgIFdlYktpdFVSSVJlc3BvbnNlKiByZXNwb25zZSA9IHRlc3QtPndh
aXRVbnRpbFJlc291cmNlTG9hZEZpbmlzaGVkQW5kUmV0dXJuVVJJUmVzcG9uc2UoKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQod2Via2l0X3VyaV9yZXNwb25zZV9nZXRfc3RhdHVzX2NvZGUocmVzcG9u
c2UpLCA9PSwgU09VUF9TVEFUVVNfT0spOworCisgICAgLy8gTm8gY2FjaGVkIHJlc291cmNlOiBT
ZWNvbmQgbG9hZC4KKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9q
YXZhc2NyaXB0Lmh0bWwiKS5kYXRhKCkpOworICAgIHJlc3BvbnNlID0gdGVzdC0+d2FpdFVudGls
UmVzb3VyY2VMb2FkRmluaXNoZWRBbmRSZXR1cm5VUklSZXNwb25zZSgpOworICAgIGdfYXNzZXJ0
X2NtcGludCh3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF9zdGF0dXNfY29kZShyZXNwb25zZSksID09
LCBTT1VQX1NUQVRVU19PSyk7CisKKyAgICAvLyBObyBjYWNoZWQgcmVzb3VyY2U6IFJlbG9hZC4K
KyAgICB3ZWJraXRfd2ViX3ZpZXdfcmVsb2FkKHRlc3QtPm1fd2ViVmlldyk7CisgICAgcmVzcG9u
c2UgPSB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZEFuZFJldHVyblVSSVJlc3Bv
bnNlKCk7CisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0X3N0YXR1
c19jb2RlKHJlc3BvbnNlKSwgPT0sIFNPVVBfU1RBVFVTX09LKTsKKworICAgIC8vIENhY2hlZCBy
ZXNvdXJjZTogRmlyc3QgbG9hZC4KKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZv
clBhdGgoIi9pbWFnZS5odG1sIikuZGF0YSgpKTsKKyAgICByZXNwb25zZSA9IHRlc3QtPndhaXRV
bnRpbFJlc291cmNlTG9hZEZpbmlzaGVkQW5kUmV0dXJuVVJJUmVzcG9uc2UoKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQod2Via2l0X3VyaV9yZXNwb25zZV9nZXRfc3RhdHVzX2NvZGUocmVzcG9uc2Up
LCA9PSwgU09VUF9TVEFUVVNfT0spOworCisgICAgLy8gQ2FjaGVkIHJlc291cmNlOiBTZWNvbmQg
bG9hZC4KKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbWFnZS5o
dG1sIikuZGF0YSgpKTsKKyAgICByZXNwb25zZSA9IHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9h
ZEZpbmlzaGVkQW5kUmV0dXJuVVJJUmVzcG9uc2UoKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Vi
a2l0X3VyaV9yZXNwb25zZV9nZXRfc3RhdHVzX2NvZGUocmVzcG9uc2UpLCA9PSwgU09VUF9TVEFU
VVNfT0spOworCisgICAgLy8gQ2FjaGVkIHJlc291cmNlOiBSZWxvYWQuCisgICAgd2Via2l0X3dl
Yl92aWV3X3JlbG9hZCh0ZXN0LT5tX3dlYlZpZXcpOworICAgIHJlc3BvbnNlID0gdGVzdC0+d2Fp
dFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWRBbmRSZXR1cm5VUklSZXNwb25zZSgpOworICAgIGdf
YXNzZXJ0X2NtcGludCh3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF9zdGF0dXNfY29kZShyZXNwb25z
ZSksID09LCBTT1VQX1NUQVRVU19OT1RfTU9ESUZJRUQpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0
V2ViUmVzb3VyY2VNaW1lVHlwZShTaW5nbGVSZXNvdXJjZUxvYWRUZXN0KiB0ZXN0LCBnY29uc3Rw
b2ludGVyKQoreworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2ph
dmFzY3JpcHQuaHRtbCIpLmRhdGEoKSk7CisgICAgV2ViS2l0VVJJUmVzcG9uc2UqIHJlc3BvbnNl
ID0gdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWRBbmRSZXR1cm5VUklSZXNwb25z
ZSgpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF9taW1lX3R5
cGUocmVzcG9uc2UpLCA9PSwgInRleHQvamF2YXNjcmlwdCIpOworCisgICAgdGVzdC0+bG9hZFVS
SShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvaW1hZ2UuaHRtbCIpLmRhdGEoKSk7CisgICAgcmVz
cG9uc2UgPSB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZEFuZFJldHVyblVSSVJl
c3BvbnNlKCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0X21p
bWVfdHlwZShyZXNwb25zZSksID09LCAiaW1hZ2Uvdm5kLm1pY3Jvc29mdC5pY29uIik7CisKKyAg
ICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9yZWRpcmVjdGVkLWNzcy5o
dG1sIikuZGF0YSgpKTsKKyAgICByZXNwb25zZSA9IHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9h
ZEZpbmlzaGVkQW5kUmV0dXJuVVJJUmVzcG9uc2UoKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Vi
a2l0X3VyaV9yZXNwb25zZV9nZXRfbWltZV90eXBlKHJlc3BvbnNlKSwgPT0sICJ0ZXh0L2NzcyIp
OworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViUmVzb3VyY2VTdWdnZXN0ZWRGaWxlbmFtZShTaW5n
bGVSZXNvdXJjZUxvYWRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxv
YWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2phdmFzY3JpcHQuaHRtbCIpLmRhdGEoKSk7
CisgICAgV2ViS2l0VVJJUmVzcG9uc2UqIHJlc3BvbnNlID0gdGVzdC0+d2FpdFVudGlsUmVzb3Vy
Y2VMb2FkRmluaXNoZWRBbmRSZXR1cm5VUklSZXNwb25zZSgpOworICAgIGdfYXNzZXJ0X2NtcHN0
cih3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF9zdWdnZXN0ZWRfZmlsZW5hbWUocmVzcG9uc2UpLCA9
PSwgIkphdmFTY3JpcHQuanMiKTsKKworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJ
Rm9yUGF0aCgiL2ltYWdlLmh0bWwiKS5kYXRhKCkpOworICAgIHJlc3BvbnNlID0gdGVzdC0+d2Fp
dFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWRBbmRSZXR1cm5VUklSZXNwb25zZSgpOworICAgIGdf
YXNzZXJ0KCF3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF9zdWdnZXN0ZWRfZmlsZW5hbWUocmVzcG9u
c2UpKTsKK30KKworY2xhc3MgUmVzb3VyY2VVUklUcmFja2luZ1Rlc3Q6IHB1YmxpYyBTaW5nbGVS
ZXNvdXJjZUxvYWRUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFJl
c291cmNlVVJJVHJhY2tpbmdUZXN0KTsKKworICAgIFJlc291cmNlVVJJVHJhY2tpbmdUZXN0KCkK
KyAgICAgICAgOiBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0KCkKKyAgICB7CisgICAgfQorCisgICAg
c3RhdGljIHZvaWQgdXJpQ2hhbmdlZChXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIEdQYXJh
bVNwZWMqLCBSZXNvdXJjZVVSSVRyYWNraW5nVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIGdf
YXNzZXJ0KHJlc291cmNlID09IHRlc3QtPm1fcmVzb3VyY2UuZ2V0KCkpOworICAgICAgICBnX2Fz
c2VydF9jbXBzdHIodGVzdC0+bV9hY3RpdmVVUkkuZGF0YSgpLCAhPSwgd2Via2l0X3dlYl9yZXNv
dXJjZV9nZXRfdXJpKHRlc3QtPm1fcmVzb3VyY2UuZ2V0KCkpKTsKKyAgICAgICAgdGVzdC0+bV9h
Y3RpdmVVUkkgPSB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF91cmkodGVzdC0+bV9yZXNvdXJjZS5n
ZXQoKSk7CisgICAgfQorCisgICAgdm9pZCByZXNvdXJjZUxvYWRTdGFydGVkKFdlYktpdFdlYlJl
c291cmNlKiByZXNvdXJjZSwgV2ViS2l0VVJJUmVxdWVzdCogcmVxdWVzdCkKKyAgICB7CisgICAg
ICAgIGlmIChyZXNvdXJjZSA9PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2UobV93
ZWJWaWV3KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX3Jlc291cmNlID0gcmVz
b3VyY2U7CisgICAgICAgIG1fYWN0aXZlVVJJID0gd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJp
KHJlc291cmNlKTsKKyAgICAgICAgY2hlY2tBY3RpdmVVUkkoIi9yZWRpcmVjdGVkLmNzcyIpOwor
ICAgICAgICBnX2Fzc2VydF9jbXBzdHIobV9hY3RpdmVVUkkuZGF0YSgpLCA9PSwgd2Via2l0X3Vy
aV9yZXF1ZXN0X2dldF91cmkocmVxdWVzdCkpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KHJl
c291cmNlLCAibm90aWZ5Ojp1cmkiLCBHX0NBTExCQUNLKHVyaUNoYW5nZWQpLCB0aGlzKTsKKyAg
ICB9CisKKyAgICB2b2lkIHJlc291cmNlU2VudFJlcXVlc3QoV2ViS2l0V2ViUmVzb3VyY2UqIHJl
c291cmNlLCBXZWJLaXRVUklSZXF1ZXN0KiByZXF1ZXN0LCBXZWJLaXRVUklSZXNwb25zZSogcmVk
aXJlY3RSZXNwb25zZSkKKyAgICB7CisgICAgICAgIGlmIChyZXNvdXJjZSAhPSBtX3Jlc291cmNl
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChyZWRpcmVjdFJlc3BvbnNlKQor
ICAgICAgICAgICAgY2hlY2tBY3RpdmVVUkkoIi9zaW1wbGUtc3R5bGUuY3NzIik7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGNoZWNrQWN0aXZlVVJJKCIvcmVkaXJlY3RlZC5jc3MiKTsKKyAg
ICAgICAgZ19hc3NlcnRfY21wc3RyKG1fYWN0aXZlVVJJLmRhdGEoKSwgPT0sIHdlYmtpdF91cmlf
cmVxdWVzdF9nZXRfdXJpKHJlcXVlc3QpKTsKKyAgICB9CisKKyAgICB2b2lkIHJlc291cmNlUmVj
ZWl2ZWRSZXNwb25zZShXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UpCisgICAgeworICAgICAg
ICBpZiAocmVzb3VyY2UgIT0gbV9yZXNvdXJjZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBjaGVja0FjdGl2ZVVSSSgiL3NpbXBsZS1zdHlsZS5jc3MiKTsKKyAgICB9CisKKyAgICB2
b2lkIHJlc291cmNlUmVjZWl2ZWREYXRhKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgZ3Vp
bnQ2NCBieXRlc1JlY2VpdmVkKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHJlc291cmNlRmlu
aXNoZWQoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlKQorICAgIHsKKyAgICAgICAgaWYgKHJl
c291cmNlID09IG1fcmVzb3VyY2UpCisgICAgICAgICAgICBjaGVja0FjdGl2ZVVSSSgiL3NpbXBs
ZS1zdHlsZS5jc3MiKTsKKyAgICAgICAgUmVzb3VyY2VzVGVzdDo6cmVzb3VyY2VGaW5pc2hlZChy
ZXNvdXJjZSk7CisgICAgfQorCisgICAgdm9pZCByZXNvdXJjZUZhaWxlZChXZWJLaXRXZWJSZXNv
dXJjZSosIEdFcnJvciopCisgICAgeworICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwor
ICAgIH0KKworICAgIENTdHJpbmcgbV9hY3RpdmVVUkk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBj
aGVja0FjdGl2ZVVSSShjb25zdCBjaGFyKiB1cmkpCisgICAgeworICAgICAgICBBU1NFUlRfQ01Q
X0NTVFJJTkcobV9hY3RpdmVVUkksID09LCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKHVyaSkpOwor
ICAgIH0KK307CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJSZXNvdXJjZUFjdGl2ZVVSSShSZXNvdXJj
ZVVSSVRyYWNraW5nVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2Fk
VVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9yZWRpcmVjdGVkLWNzcy5odG1sIikuZGF0YSgp
KTsKKyAgICB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZCgpOworfQorCitzdGF0
aWMgdm9pZCB0ZXN0V2ViUmVzb3VyY2VHZXREYXRhKFJlc291cmNlc1Rlc3QqIHRlc3QsIGdjb25z
dHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIv
IikuZGF0YSgpKTsKKyAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgYmUgNCBpbnN0ZWFkIG9mIDMs
IGJ1dCB3ZSBkb24ndCBnZXQgdGhlIGNzcyBpbWFnZSByZXNvdXJjZQorICAgIC8vIGR1ZSB0byBi
dWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NTEwLgorICAgIHRl
c3QtPndhaXRVbnRpbFJlc291cmNlc0xvYWRlZCgzKTsKKworICAgIFdlYktpdFdlYlJlc291cmNl
KiByZXNvdXJjZSA9IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9yZXNvdXJjZSh0ZXN0LT5tX3dl
YlZpZXcpOworICAgIGdfYXNzZXJ0KHJlc291cmNlKTsKKyAgICB0ZXN0LT5jaGVja1Jlc291cmNl
RGF0YShyZXNvdXJjZSk7CisKKyAgICBHTGlzdCogc3VicmVzb3VyY2VzID0gdGVzdC0+c3VicmVz
b3VyY2VzKCk7CisgICAgZm9yIChHTGlzdCogaXRlbSA9IHN1YnJlc291cmNlczsgaXRlbTsgaXRl
bSA9IGdfbGlzdF9uZXh0KGl0ZW0pKQorICAgICAgICB0ZXN0LT5jaGVja1Jlc291cmNlRGF0YShX
RUJLSVRfV0VCX1JFU09VUkNFKGl0ZW0tPmRhdGEpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdl
YlZpZXdSZXNvdXJjZXNIaXN0b3J5Q2FjaGUoU2luZ2xlUmVzb3VyY2VMb2FkVGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKK3sKKyAgICBDU3RyaW5nIGphdmFzY3JpcHRVUkkgPSBrU2VydmVyLT5n
ZXRVUklGb3JQYXRoKCIvamF2YXNjcmlwdC5odG1sIik7CisgICAgdGVzdC0+bG9hZFVSSShqYXZh
c2NyaXB0VVJJLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNo
ZWQoKTsKKyAgICBXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UgPSB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X21haW5fcmVzb3VyY2UodGVzdC0+bV93ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChyZXNvdXJj
ZSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaShyZXNv
dXJjZSksID09LCBqYXZhc2NyaXB0VVJJLmRhdGEoKSk7CisKKyAgICBDU3RyaW5nIHNpbXBsZVN0
eWxlQ1NTVVJJID0ga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3NpbXBsZS1zdHlsZS1jc3MuaHRt
bCIpOworICAgIHRlc3QtPmxvYWRVUkkoc2ltcGxlU3R5bGVDU1NVUkkuZGF0YSgpKTsKKyAgICB0
ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5pc2hlZCgpOworICAgIHJlc291cmNlID0gd2Vi
a2l0X3dlYl92aWV3X2dldF9tYWluX3Jlc291cmNlKHRlc3QtPm1fd2ViVmlldyk7CisgICAgZ19h
c3NlcnQocmVzb3VyY2UpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3Jlc291cmNl
X2dldF91cmkocmVzb3VyY2UpLCA9PSwgc2ltcGxlU3R5bGVDU1NVUkkuZGF0YSgpKTsKKworICAg
IHRlc3QtPmdvQmFjaygpOworICAgIHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9hZEZpbmlzaGVk
KCk7CisgICAgcmVzb3VyY2UgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2UodGVz
dC0+bV93ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChyZXNvdXJjZSk7CisgICAgZ19hc3NlcnRfY21w
c3RyKHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaShyZXNvdXJjZSksID09LCBqYXZhc2NyaXB0
VVJJLmRhdGEoKSk7CisKKyAgICB0ZXN0LT5nb0ZvcndhcmQoKTsKKyAgICB0ZXN0LT53YWl0VW50
aWxSZXNvdXJjZUxvYWRGaW5pc2hlZCgpOworICAgIHJlc291cmNlID0gd2Via2l0X3dlYl92aWV3
X2dldF9tYWluX3Jlc291cmNlKHRlc3QtPm1fd2ViVmlldyk7CisgICAgZ19hc3NlcnQocmVzb3Vy
Y2UpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3Jlc291cmNlX2dldF91cmkocmVz
b3VyY2UpLCA9PSwgc2ltcGxlU3R5bGVDU1NVUkkuZGF0YSgpKTsKK30KKworY2xhc3MgU2VuZFJl
cXVlc3RUZXN0OiBwdWJsaWMgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdCB7CitwdWJsaWM6CisgICAg
TUFLRV9HTElCX1RFU1RfRklYVFVSRShTZW5kUmVxdWVzdFRlc3QpOworCisgICAgdm9pZCByZXNv
dXJjZVNlbnRSZXF1ZXN0KFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgV2ViS2l0VVJJUmVx
dWVzdCogcmVxdWVzdCwgV2ViS2l0VVJJUmVzcG9uc2UqIHJlZGlyZWN0UmVzcG9uc2UpCisgICAg
eworICAgICAgICBpZiAocmVzb3VyY2UgIT0gbV9yZXNvdXJjZSkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBpZiAocmVkaXJlY3RSZXNwb25zZSkKKyAgICAgICAgICAgIGdfYXNzZXJ0
X2NtcHN0cih3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KSwgPT0sIG1fZXhwZWN0
ZWROZXdSZXNvdXJjZVVSSUFmdGVyUmVkaXJlY3Rpb24uZGF0YSgpKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfdXJpKHJl
cXVlc3QpLCA9PSwgbV9leHBlY3RlZE5ld1Jlc291cmNlVVJJLmRhdGEoKSk7CisgICAgICAgIGdf
YXNzZXJ0X2NtcHN0cih3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KSwgPT0sIHdl
YmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaShyZXNvdXJjZSkpOworCisgICAgICAgIFNpbmdsZVJl
c291cmNlTG9hZFRlc3Q6OnJlc291cmNlU2VudFJlcXVlc3QocmVzb3VyY2UsIHJlcXVlc3QsIHJl
ZGlyZWN0UmVzcG9uc2UpOworICAgIH0KKworICAgIHZvaWQgcmVzb3VyY2VGYWlsZWQoV2ViS2l0
V2ViUmVzb3VyY2UqIHJlc291cmNlLCBHRXJyb3IqIGVycm9yKQorICAgIHsKKyAgICAgICAgaWYg
KHJlc291cmNlICE9IG1fcmVzb3VyY2UpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
Z19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaShyZXNvdXJjZSksID09
LCBtX2V4cGVjdGVkQ2FuY2VsbGVkUmVzb3VyY2VVUkkuZGF0YSgpKTsKKyAgICAgICAgZ19hc3Nl
cnRfZXJyb3IoZXJyb3IsIFdFQktJVF9ORVRXT1JLX0VSUk9SLCBXRUJLSVRfTkVUV09SS19FUlJP
Ul9DQU5DRUxMRUQpOworCisgICAgICAgIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OnJlc291cmNl
RmFpbGVkKHJlc291cmNlLCBlcnJvcik7CisgICAgfQorCisgICAgdm9pZCBzZXRFeHBlY3RlZE5l
d1Jlc291cmNlVVJJKGNvbnN0IENTdHJpbmcmIHVyaSkKKyAgICB7CisgICAgICAgIG1fZXhwZWN0
ZWROZXdSZXNvdXJjZVVSSSA9IHVyaTsKKyAgICB9CisKKyAgICB2b2lkIHNldEV4cGVjdGVkQ2Fu
Y2VsbGVkUmVzb3VyY2VVUkkoY29uc3QgQ1N0cmluZyYgdXJpKQorICAgIHsKKyAgICAgICAgbV9l
eHBlY3RlZENhbmNlbGxlZFJlc291cmNlVVJJID0gdXJpOworICAgIH0KKworICAgIHZvaWQgc2V0
RXhwZWN0ZWROZXdSZXNvdXJjZVVSSUFmdGVyUmVkaXJlY3Rpb24oY29uc3QgQ1N0cmluZyYgdXJp
KQorICAgIHsKKyAgICAgICAgbV9leHBlY3RlZE5ld1Jlc291cmNlVVJJQWZ0ZXJSZWRpcmVjdGlv
biA9IHVyaTsKKyAgICB9CisKKyAgICBDU3RyaW5nIG1fZXhwZWN0ZWROZXdSZXNvdXJjZVVSSTsK
KyAgICBDU3RyaW5nIG1fZXhwZWN0ZWRDYW5jZWxsZWRSZXNvdXJjZVVSSTsKKyAgICBDU3RyaW5n
IG1fZXhwZWN0ZWROZXdSZXNvdXJjZVVSSUFmdGVyUmVkaXJlY3Rpb247Cit9OworCitzdGF0aWMg
dm9pZCB0ZXN0V2ViUmVzb3VyY2VTZW5kUmVxdWVzdChTZW5kUmVxdWVzdFRlc3QqIHRlc3QsIGdj
b25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+c2V0RXhwZWN0ZWROZXdSZXNvdXJjZVVSSShrU2Vy
dmVyLT5nZXRVUklGb3JQYXRoKCIvamF2YXNjcmlwdC5qcyIpKTsKKyAgICB0ZXN0LT5sb2FkVVJJ
KGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoInJlbGF0aXZlLWphdmFzY3JpcHQuaHRtbCIpLmRhdGEo
KSk7CisgICAgdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fz
c2VydCh0ZXN0LT5tX3Jlc291cmNlKTsKKworICAgIFZlY3RvcjxTaW5nbGVSZXNvdXJjZUxvYWRU
ZXN0OjpMb2FkRXZlbnRzPiYgZXZlbnRzID0gdGVzdC0+bV9sb2FkRXZlbnRzOworICAgIGdfYXNz
ZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgNSk7CisgICAgZ19hc3NlcnRfY21waW50KGV2
ZW50c1swXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlN0YXJ0ZWQpOworICAgIGdfYXNz
ZXJ0X2NtcGludChldmVudHNbMV0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpTZW50UmVx
dWVzdCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIFNpbmdsZVJlc291cmNl
TG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNb
M10sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpSZWNlaXZlZERhdGEpOworICAgIGdfYXNz
ZXJ0X2NtcGludChldmVudHNbNF0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpGaW5pc2hl
ZCk7CisgICAgZXZlbnRzLmNsZWFyKCk7CisKKyAgICAvLyBDYW5jZWwgcmVxdWVzdC4KKyAgICB0
ZXN0LT5zZXRFeHBlY3RlZENhbmNlbGxlZFJlc291cmNlVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBh
dGgoIi9jYW5jZWwtdGhpcy5qcyIpKTsKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVS
SUZvclBhdGgoIi9yZXNvdXJjZS10by1jYW5jZWwuaHRtbCIpLmRhdGEoKSk7CisgICAgdGVzdC0+
d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3Jl
c291cmNlKTsKKworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgMyk7Cisg
ICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6
OlN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBTaW5nbGVSZXNv
dXJjZUxvYWRUZXN0OjpGYWlsZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09
LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpGaW5pc2hlZCk7CisgICAgZXZlbnRzLmNsZWFyKCk7
CisKKyAgICAvLyBVUkkgY2hhbmdlZCBhZnRlciBhIHJlZGlyZWN0LgorICAgIHRlc3QtPnNldEV4
cGVjdGVkTmV3UmVzb3VyY2VVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3JlZGlyZWN0ZWQu
anMiKSk7CisgICAgdGVzdC0+c2V0RXhwZWN0ZWROZXdSZXNvdXJjZVVSSUFmdGVyUmVkaXJlY3Rp
b24oa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2phdmFzY3JpcHQuanMiKSk7CisgICAgdGVzdC0+
bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCJyZWRpcmVjdGVkLWphdmFzY3JpcHQuaHRt
bCIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWQoKTsK
KyAgICBnX2Fzc2VydCh0ZXN0LT5tX3Jlc291cmNlKTsKKworICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHMuc2l6ZSgpLCA9PSwgNik7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0s
IFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHNbMV0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpTZW50UmVxdWVzdCk7CisgICAg
Z19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlJl
ZGlyZWN0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbM10sID09LCBTaW5nbGVSZXNv
dXJjZUxvYWRUZXN0OjpSZWNlaXZlZFJlc3BvbnNlKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZl
bnRzWzRdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6UmVjZWl2ZWREYXRhKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoZXZlbnRzWzVdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6Rmlu
aXNoZWQpOworICAgIGV2ZW50cy5jbGVhcigpOworCisgICAgLy8gQ2FuY2VsIGFmdGVyIGEgcmVk
aXJlY3QuCisgICAgdGVzdC0+c2V0RXhwZWN0ZWROZXdSZXNvdXJjZVVSSShrU2VydmVyLT5nZXRV
UklGb3JQYXRoKCIvcmVkaXJlY3RlZC10by1jYW5jZWwuanMiKSk7CisgICAgdGVzdC0+c2V0RXhw
ZWN0ZWRDYW5jZWxsZWRSZXNvdXJjZVVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvcmVkaXJl
Y3RlZC10by1jYW5jZWwuanMiKSk7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklG
b3JQYXRoKCIvcmVkaXJlY3RlZC10by1jYW5jZWwuaHRtbCIpLmRhdGEoKSk7CisgICAgdGVzdC0+
d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3Jl
c291cmNlKTsKKworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgNCk7Cisg
ICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6
OlN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBTaW5nbGVSZXNv
dXJjZUxvYWRUZXN0OjpTZW50UmVxdWVzdCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sy
XSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OkZhaWxlZCk7CisgICAgZ19hc3NlcnRfY21w
aW50KGV2ZW50c1szXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OkZpbmlzaGVkKTsKKyAg
ICBldmVudHMuY2xlYXIoKTsKK30KKworc3RhdGljIHZvaWQgYWRkQ2FjaGVIVFRQSGVhZGVyc1Rv
UmVzcG9uc2UoU291cE1lc3NhZ2UqIG1lc3NhZ2UpCit7CisgICAgLy8gVGhlIGFjdHVhbCBkYXRl
IGRvZXNuJ3QgcmVhbGx5IG1hdHRlci4KKyAgICBTb3VwRGF0ZSogc291cERhdGUgPSBzb3VwX2Rh
dGVfbmV3X2Zyb21fbm93KDApOworICAgIEdPd25QdHI8Y2hhcj4gZGF0ZShzb3VwX2RhdGVfdG9f
c3RyaW5nKHNvdXBEYXRlLCBTT1VQX0RBVEVfSFRUUCkpOworICAgIHNvdXBfbWVzc2FnZV9oZWFk
ZXJzX2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiTGFzdC1Nb2RpZmllZCIsIGRh
dGUuZ2V0KCkpOworICAgIHNvdXBfZGF0ZV9mcmVlKHNvdXBEYXRlKTsKKyAgICBzb3VwX21lc3Nh
Z2VfaGVhZGVyc19hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIkNhY2hlLWNvbnRy
b2wiLCAicHVibGljLCBtYXgtYWdlPTMxNTM2MDAwIik7CisgICAgc291cERhdGUgPSBzb3VwX2Rh
dGVfbmV3X2Zyb21fbm93KDM2MDApOworICAgIGRhdGUuc2V0KHNvdXBfZGF0ZV90b19zdHJpbmco
c291cERhdGUsIFNPVVBfREFURV9IVFRQKSk7CisgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBw
ZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJFeHBpcmVzIiwgZGF0ZS5nZXQoKSk7Cisg
ICAgc291cF9kYXRlX2ZyZWUoc291cERhdGUpOworfQorCitzdGF0aWMgdm9pZCBzZXJ2ZXJDYWxs
YmFjayhTb3VwU2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBjaGFy
KiBwYXRoLCBHSGFzaFRhYmxlKiwgU291cENsaWVudENvbnRleHQqLCBncG9pbnRlcikKK3sKKyAg
ICBpZiAobWVzc2FnZS0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgeworICAgICAgICBzb3Vw
X21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMo
bWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOworCisgICAgaWYgKHNvdXBfbWVzc2FnZV9oZWFkZXJz
X2dldF9vbmUobWVzc2FnZS0+cmVxdWVzdF9oZWFkZXJzLCAiSWYtTW9kaWZpZWQtU2luY2UiKSkg
eworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19O
T1RfTU9ESUZJRUQpOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdl
LT5yZXNwb25zZV9ib2R5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChnX3N0
cl9lcXVhbChwYXRoLCAiLyIpKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZCht
ZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGtJbmRleEh0bWwsIHN0
cmxlbihrSW5kZXhIdG1sKSk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2ph
dmFzY3JpcHQuaHRtbCIpKSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBqYXZhc2NyaXB0
SHRtbCA9ICI8aHRtbD48aGVhZD48c2NyaXB0IGxhbmd1YWdlPSdqYXZhc2NyaXB0JyBzcmM9Jy9q
YXZhc2NyaXB0LmpzJz48L3NjcmlwdD48L2hlYWQ+PGJvZHk+PC9ib2R5PjwvaHRtbD4iOworICAg
ICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09V
UF9NRU1PUllfU1RBVElDLCBqYXZhc2NyaXB0SHRtbCwgc3RybGVuKGphdmFzY3JpcHRIdG1sKSk7
CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2ltYWdlLmh0bWwiKSkgeworICAg
ICAgICBzdGF0aWMgY29uc3QgY2hhciogaW1hZ2VIVE1MID0gIjxodG1sPjxib2R5PjxpbWcgc3Jj
PScvYmxhbmsuaWNvJz48L2ltZz48L2JvZHk+PC9odG1sPiI7CisgICAgICAgIHNvdXBfbWVzc2Fn
ZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMs
IGltYWdlSFRNTCwgc3RybGVuKGltYWdlSFRNTCkpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1
YWwocGF0aCwgIi9yZWRpcmVjdGVkLWNzcy5odG1sIikpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0
IGNoYXIqIHJlZGlyZWN0ZWRDU1NIdG1sID0gIjxodG1sPjxoZWFkPjxsaW5rIHJlbD0nc3R5bGVz
aGVldCcgaHJlZj0nL3JlZGlyZWN0ZWQuY3NzJyB0eXBlPSd0ZXh0L2Nzcyc+PC9oZWFkPjxib2R5
PjwvaHRtbD4iOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVz
cG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCByZWRpcmVjdGVkQ1NTSHRtbCwgc3RybGVu
KHJlZGlyZWN0ZWRDU1NIdG1sKSk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAi
L2ludmFsaWQtY3NzLmh0bWwiKSkgeworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogaW52YWxp
ZENTU0h0bWwgPSAiPGh0bWw+PGhlYWQ+PGxpbmsgcmVsPSdzdHlsZXNoZWV0JyBocmVmPScvaW52
YWxpZC5jc3MnIHR5cGU9J3RleHQvY3NzJz48L2hlYWQ+PGJvZHk+PC9odG1sPiI7CisgICAgICAg
IHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01F
TU9SWV9TVEFUSUMsIGludmFsaWRDU1NIdG1sLCBzdHJsZW4oaW52YWxpZENTU0h0bWwpKTsKKyAg
ICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvc2ltcGxlLXN0eWxlLWNzcy5odG1sIikp
IHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHNpbXBsZVN0eWxlQ1NTSHRtbCA9ICI8aHRt
bD48aGVhZD48bGluayByZWw9J3N0eWxlc2hlZXQnIGhyZWY9Jy9zaW1wbGUtc3R5bGUuY3NzJyB0
eXBlPSd0ZXh0L2Nzcyc+PC9oZWFkPjxib2R5PjwvaHRtbD4iOworICAgICAgICBzb3VwX21lc3Nh
Z2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElD
LCBzaW1wbGVTdHlsZUNTU0h0bWwsIHN0cmxlbihzaW1wbGVTdHlsZUNTU0h0bWwpKTsKKyAgICB9
IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvc3R5bGUuY3NzIikpIHsKKyAgICAgICAgc291
cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZ
X1NUQVRJQywga1N0eWxlQ1NTLCBzdHJsZW4oa1N0eWxlQ1NTKSk7CisgICAgICAgIGFkZENhY2hl
SFRUUEhlYWRlcnNUb1Jlc3BvbnNlKG1lc3NhZ2UpOworICAgICAgICBzb3VwX21lc3NhZ2VfaGVh
ZGVyc19hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIkNvbnRlbnQtVHlwZSIsICJ0
ZXh0L2NzcyIpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9qYXZhc2NyaXB0
LmpzIikpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3Bv
bnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywga0phdmFzY3JpcHQsIHN0cmxlbihrSmF2YXNj
cmlwdCkpOworICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobWVzc2FnZS0+cmVz
cG9uc2VfaGVhZGVycywgIkNvbnRlbnQtVHlwZSIsICJ0ZXh0L2phdmFzY3JpcHQiKTsKKyAgICAg
ICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMs
ICJDb250ZW50LURpc3Bvc2l0aW9uIiwgImZpbGVuYW1lPUphdmFTY3JpcHQuanMiKTsKKyAgICB9
IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvcmVsYXRpdmUtamF2YXNjcmlwdC5odG1sIikp
IHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGphdmFzY3JpcHRSZWxhdGl2ZUhUTUwgPSAi
PGh0bWw+PGhlYWQ+PHNjcmlwdCBsYW5ndWFnZT0namF2YXNjcmlwdCcgc3JjPSdyZW1vdmUtdGhp
cy9qYXZhc2NyaXB0LmpzJz48L3NjcmlwdD48L2hlYWQ+PGJvZHk+PC9ib2R5PjwvaHRtbD4iOwor
ICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwg
U09VUF9NRU1PUllfU1RBVElDLCBqYXZhc2NyaXB0UmVsYXRpdmVIVE1MLCBzdHJsZW4oamF2YXNj
cmlwdFJlbGF0aXZlSFRNTCkpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9y
ZXNvdXJjZS10by1jYW5jZWwuaHRtbCIpKSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBy
ZXNvdXJjZVRvQ2FuY2VsSFRNTCA9ICI8aHRtbD48aGVhZD48c2NyaXB0IGxhbmd1YWdlPSdqYXZh
c2NyaXB0JyBzcmM9J2NhbmNlbC10aGlzLmpzJz48L3NjcmlwdD48L2hlYWQ+PGJvZHk+PC9ib2R5
PjwvaHRtbD4iOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVz
cG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCByZXNvdXJjZVRvQ2FuY2VsSFRNTCwgc3Ry
bGVuKHJlc291cmNlVG9DYW5jZWxIVE1MKSk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChw
YXRoLCAiL3JlZGlyZWN0ZWQtamF2YXNjcmlwdC5odG1sIikpIHsKKyAgICAgICAgc3RhdGljIGNv
bnN0IGNoYXIqIGphdmFzY3JpcHRSZWxhdGl2ZUhUTUwgPSAiPGh0bWw+PGhlYWQ+PHNjcmlwdCBs
YW5ndWFnZT0namF2YXNjcmlwdCcgc3JjPScvcmVkaXJlY3RlZC5qcyc+PC9zY3JpcHQ+PC9oZWFk
Pjxib2R5PjwvYm9keT48L2h0bWw+IjsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5k
KG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgamF2YXNjcmlwdFJl
bGF0aXZlSFRNTCwgc3RybGVuKGphdmFzY3JpcHRSZWxhdGl2ZUhUTUwpKTsKKyAgICB9IGVsc2Ug
aWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvcmVkaXJlY3RlZC10by1jYW5jZWwuaHRtbCIpKSB7Cisg
ICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBqYXZhc2NyaXB0UmVsYXRpdmVIVE1MID0gIjxodG1s
PjxoZWFkPjxzY3JpcHQgbGFuZ3VhZ2U9J2phdmFzY3JpcHQnIHNyYz0nL3JlZGlyZWN0ZWQtdG8t
Y2FuY2VsLmpzJz48L3NjcmlwdD48L2hlYWQ+PGJvZHk+PC9ib2R5PjwvaHRtbD4iOworICAgICAg
ICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9N
RU1PUllfU1RBVElDLCBqYXZhc2NyaXB0UmVsYXRpdmVIVE1MLCBzdHJsZW4oamF2YXNjcmlwdFJl
bGF0aXZlSFRNTCkpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9ibGFuay5p
Y28iKSkgeworICAgICAgICBHT3duUHRyPGNoYXI+IGZpbGVQYXRoKGdfYnVpbGRfZmlsZW5hbWUo
VGVzdDo6Z2V0V2ViS2l0MVRlc3RSZXNvdWNlc0RpcigpLmRhdGEoKSwgcGF0aCwgTlVMTCkpOwor
ICAgICAgICBjaGFyKiBjb250ZW50czsKKyAgICAgICAgZ3NpemUgY29udGVudHNMZW5ndGg7Cisg
ICAgICAgIGdfZmlsZV9nZXRfY29udGVudHMoZmlsZVBhdGguZ2V0KCksICZjb250ZW50cywgJmNv
bnRlbnRzTGVuZ3RoLCAwKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3Nh
Z2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGNvbnRlbnRzLCBjb250ZW50c0xl
bmd0aCk7CisgICAgICAgIGFkZENhY2hlSFRUUEhlYWRlcnNUb1Jlc3BvbnNlKG1lc3NhZ2UpOwor
ICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVh
ZGVycywgIkNvbnRlbnQtVHlwZSIsICJpbWFnZS92bmQubWljcm9zb2Z0Lmljb24iKTsKKyAgICB9
IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvc2ltcGxlLXN0eWxlLmNzcyIpKSB7CisgICAg
ICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzaW1wbGVDU1MgPQorICAgICAgICAgICAgImJvZHkgeyIK
KyAgICAgICAgICAgICIgICAgbWFyZ2luOiAwcHg7IgorICAgICAgICAgICAgIiAgICBwYWRkaW5n
OiAwcHg7IgorICAgICAgICAgICAgIn0iOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBl
bmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBzaW1wbGVDU1Ms
IHN0cmxlbihzaW1wbGVDU1MpKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5k
KG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJDb250ZW50LVR5cGUiLCAidGV4dC9jc3MiKTsK
KyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvcmVkaXJlY3RlZC5jc3MiKSkgewor
ICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19NT1ZF
RF9QRVJNQU5FTlRMWSk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChtZXNz
YWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiTG9jYXRpb24iLCAiL3NpbXBsZS1zdHlsZS5jc3MiKTsK
KyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvcmVkaXJlY3RlZC5qcyIpKSB7Cisg
ICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX01PVkVE
X1BFUk1BTkVOVExZKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1lc3Nh
Z2UtPnJlc3BvbnNlX2hlYWRlcnMsICJMb2NhdGlvbiIsICIvcmVtb3ZlLXRoaXMvamF2YXNjcmlw
dC5qcyIpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9yZWRpcmVjdGVkLXRv
LWNhbmNlbC5qcyIpKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2Us
IFNPVVBfU1RBVFVTX01PVkVEX1BFUk1BTkVOVExZKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2hl
YWRlcnNfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJMb2NhdGlvbiIsICIvY2Fu
Y2VsLXRoaXMuanMiKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvaW52YWxp
ZC5jc3MiKSkKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9T
VEFUVVNfQ0FOVF9DT05ORUNUKTsKKyAgICBlbHNlCisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRf
c3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7CisgICAgc291cF9tZXNzYWdl
X2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7Cit9CisKK3ZvaWQgYmVmb3Jl
QWxsKCkKK3sKKyAgICBrU2VydmVyID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIoKTsKKyAgICBrU2Vy
dmVyLT5ydW4oc2VydmVyQ2FsbGJhY2spOworCisgICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF93
ZWJfZXh0ZW5zaW9uc19kaXJlY3Rvcnkod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCks
IFdFQktJVF9URVNUX1dFQl9FWFRFTlNJT05TX0RJUik7CisKKyAgICBSZXNvdXJjZXNUZXN0Ojph
ZGQoIldlYktpdFdlYlZpZXciLCAicmVzb3VyY2VzIiwgdGVzdFdlYlZpZXdSZXNvdXJjZXMpOwor
ICAgIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OmFkZCgiV2ViS2l0V2ViUmVzb3VyY2UiLCAibG9h
ZGluZyIsIHRlc3RXZWJSZXNvdXJjZUxvYWRpbmcpOworICAgIFNpbmdsZVJlc291cmNlTG9hZFRl
c3Q6OmFkZCgiV2ViS2l0V2ViUmVzb3VyY2UiLCAicmVzcG9uc2UiLCB0ZXN0V2ViUmVzb3VyY2VS
ZXNwb25zZSk7CisgICAgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6YWRkKCJXZWJLaXRXZWJSZXNv
dXJjZSIsICJtaW1lLXR5cGUiLCB0ZXN0V2ViUmVzb3VyY2VNaW1lVHlwZSk7CisgICAgU2luZ2xl
UmVzb3VyY2VMb2FkVGVzdDo6YWRkKCJXZWJLaXRXZWJSZXNvdXJjZSIsICJzdWdnZXN0ZWQtZmls
ZW5hbWUiLCB0ZXN0V2ViUmVzb3VyY2VTdWdnZXN0ZWRGaWxlbmFtZSk7CisgICAgUmVzb3VyY2VV
UklUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViUmVzb3VyY2UiLCAiYWN0aXZlLXVyaSIsIHRl
c3RXZWJSZXNvdXJjZUFjdGl2ZVVSSSk7CisgICAgUmVzb3VyY2VzVGVzdDo6YWRkKCJXZWJLaXRX
ZWJSZXNvdXJjZSIsICJnZXQtZGF0YSIsIHRlc3RXZWJSZXNvdXJjZUdldERhdGEpOworICAgIFNp
bmdsZVJlc291cmNlTG9hZFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJoaXN0b3J5LWNhY2hl
IiwgdGVzdFdlYlZpZXdSZXNvdXJjZXNIaXN0b3J5Q2FjaGUpOworICAgIFNlbmRSZXF1ZXN0VGVz
dDo6YWRkKCJXZWJLaXRXZWJQYWdlIiwgInNlbmQtcmVxdWVzdCIsIHRlc3RXZWJSZXNvdXJjZVNl
bmRSZXF1ZXN0KTsKK30KKwordm9pZCBhZnRlckFsbCgpCit7CisgICAgZGVsZXRlIGtTZXJ2ZXI7
Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVz
dFNTTC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFNTTC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZTMxODBjNWJjOGM5MjQ4N2JjMTM0YTE2NGJiZDRkZjJiODJiN2E0Mgot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9U
ZXN0U1NMLmNwcApAQCAtMCwwICsxLDI5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJ
Z2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJMb2FkVHJhY2tpbmdU
ZXN0LmgiCisjaW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5oIgorI2luY2x1ZGUgPGd0ay9ndGsu
aD4KKworc3RhdGljIFdlYktpdFRlc3RTZXJ2ZXIqIGtIdHRwc1NlcnZlcjsKK3N0YXRpYyBXZWJL
aXRUZXN0U2VydmVyKiBrSHR0cFNlcnZlcjsKKworc3RhdGljIGNvbnN0IGNoYXIqIGluZGV4SFRN
TCA9ICI8aHRtbD48Ym9keT5UZXN0aW5nIFdlYktpdDJHVEsrIFNTTDwvYm9keT48L2h0bWxsPiI7
CitzdGF0aWMgY29uc3QgY2hhciogaW5zZWN1cmVDb250ZW50SFRNTCA9ICI8aHRtbD48c2NyaXB0
IHNyYz1cIiVzXCI+PC9zY3JpcHQ+PGJvZHk+PHA+VGV4dCArIGltYWdlIDxpbWcgc3JjPVwiJXNc
IiBhbGlnbj1cInJpZ2h0XCIvPjwvcD48L2JvZHk+PC9odG1sPiI7CitzdGF0aWMgY29uc3QgY2hh
ciBUTFNFeHBlY3RlZFN1Y2Nlc3NUaXRsZVtdID0gIldlYktpdDJHdGsrIFRMUyBwZXJtaXNzaW9u
IHRlc3QiOworc3RhdGljIGNvbnN0IGNoYXIgVExTU3VjY2Vzc0hUTUxTdHJpbmdbXSA9ICI8aHRt
bD48aGVhZD48dGl0bGU+V2ViS2l0Mkd0aysgVExTIHBlcm1pc3Npb24gdGVzdDwvdGl0bGU+PC9o
ZWFkPjxib2R5PjwvYm9keT48L2h0bWw+IjsKKworY2xhc3MgU1NMVGVzdDogcHVibGljIExvYWRU
cmFja2luZ1Rlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoU1NMVGVz
dCk7CisKKyAgICBTU0xUZXN0KCkKKyAgICAgICAgOiBtX3Rsc0Vycm9ycyhzdGF0aWNfY2FzdDxH
VGxzQ2VydGlmaWNhdGVGbGFncz4oMCkpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9p
ZCBwcm92aXNpb25hbExvYWRGYWlsZWQoY29uc3QgZ2NoYXIqIGZhaWxpbmdVUkksIEdFcnJvciog
ZXJyb3IpCisgICAgeworICAgICAgICBnX2Fzc2VydF9lcnJvcihlcnJvciwgU09VUF9IVFRQX0VS
Uk9SLCBTT1VQX1NUQVRVU19TU0xfRkFJTEVEKTsKKyAgICAgICAgTG9hZFRyYWNraW5nVGVzdDo6
cHJvdmlzaW9uYWxMb2FkRmFpbGVkKGZhaWxpbmdVUkksIGVycm9yKTsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgbG9hZENvbW1pdHRlZCgpCisgICAgeworICAgICAgICBHVGxzQ2VydGlmaWNh
dGUqIGNlcnRpZmljYXRlID0gMDsKKyAgICAgICAgd2Via2l0X3dlYl92aWV3X2dldF90bHNfaW5m
byhtX3dlYlZpZXcsICZjZXJ0aWZpY2F0ZSwgJm1fdGxzRXJyb3JzKTsKKyAgICAgICAgbV9jZXJ0
aWZpY2F0ZSA9IGNlcnRpZmljYXRlOworICAgICAgICBMb2FkVHJhY2tpbmdUZXN0Ojpsb2FkQ29t
bWl0dGVkKCk7CisgICAgfQorCisgICAgdm9pZCB3YWl0VW50aWxMb2FkRmluaXNoZWQoKQorICAg
IHsKKyAgICAgICAgbV9jZXJ0aWZpY2F0ZSA9IDA7CisgICAgICAgIG1fdGxzRXJyb3JzID0gc3Rh
dGljX2Nhc3Q8R1Rsc0NlcnRpZmljYXRlRmxhZ3M+KDApOworICAgICAgICBMb2FkVHJhY2tpbmdU
ZXN0Ojp3YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICB9CisKKyAgICBHUmVmUHRyPEdUbHND
ZXJ0aWZpY2F0ZT4gbV9jZXJ0aWZpY2F0ZTsKKyAgICBHVGxzQ2VydGlmaWNhdGVGbGFncyBtX3Rs
c0Vycm9yczsKK307CisKK3N0YXRpYyB2b2lkIHRlc3RTU0woU1NMVGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkVVJJKGtIdHRwc1NlcnZlci0+Z2V0VVJJRm9yUGF0
aCgiLyIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAg
Z19hc3NlcnQodGVzdC0+bV9jZXJ0aWZpY2F0ZSk7CisgICAgLy8gV2UgYWx3YXlzIGV4cGVjdCBl
cnJvcnMgYmVjYXVzZSB3ZSBhcmUgdXNpbmcgYSBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZSwKKyAg
ICAvLyBidXQgb25seSBHX1RMU19DRVJUSUZJQ0FURV9VTktOT1dOX0NBIGZsYWdzIHNob3VsZCBi
ZSBwcmVzZW50LgorICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGxzRXJyb3JzKTsKKyAgICBnX2Fzc2Vy
dF9jbXB1aW50KHRlc3QtPm1fdGxzRXJyb3JzLCA9PSwgR19UTFNfQ0VSVElGSUNBVEVfVU5LTk9X
Tl9DQSk7CisKKyAgICAvLyBOb24gSFRUUFMgbG9hZHMgc2hvdWxkbid0IGhhdmUgYSBjZXJ0aWZp
Y2F0ZSBub3IgZXJyb3JzLgorICAgIHRlc3QtPmxvYWRIdG1sKGluZGV4SFRNTCwgMCk7CisgICAg
dGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnQoIXRlc3QtPm1fY2Vy
dGlmaWNhdGUpOworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX3Rsc0Vycm9ycyk7Cit9CisKK2NsYXNz
IEluc2VjdXJlQ29udGVudFRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7CitwdWJsaWM6CisgICAg
TUFLRV9HTElCX1RFU1RfRklYVFVSRShJbnNlY3VyZUNvbnRlbnRUZXN0KTsKKworICAgIEluc2Vj
dXJlQ29udGVudFRlc3QoKQorICAgICAgICA6IG1faW5zZWN1cmVDb250ZW50UnVuKGZhbHNlKQor
ICAgICAgICAsIG1faW5zZWN1cmVDb250ZW50RGlzcGxheWVkKGZhbHNlKQorICAgIHsKKyAgICAg
ICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJpbnNlY3VyZS1jb250ZW50LWRldGVjdGVk
IiwgR19DQUxMQkFDSyhpbnNlY3VyZUNvbnRlbnREZXRlY3RlZENhbGxiYWNrKSwgdGhpcyk7Cisg
ICAgfQorCisgICAgc3RhdGljIHZvaWQgaW5zZWN1cmVDb250ZW50RGV0ZWN0ZWRDYWxsYmFjayhX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRJbnNlY3VyZUNvbnRlbnRFdmVudCBldmVudCwg
SW5zZWN1cmVDb250ZW50VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KHdlYlZp
ZXcgPT0gdGVzdC0+bV93ZWJWaWV3KTsKKworICAgICAgICBpZiAoZXZlbnQgPT0gV0VCS0lUX0lO
U0VDVVJFX0NPTlRFTlRfUlVOKQorICAgICAgICAgICAgdGVzdC0+bV9pbnNlY3VyZUNvbnRlbnRS
dW4gPSB0cnVlOworCisgICAgICAgIGlmIChldmVudCA9PSBXRUJLSVRfSU5TRUNVUkVfQ09OVEVO
VF9ESVNQTEFZRUQpCisgICAgICAgICAgICB0ZXN0LT5tX2luc2VjdXJlQ29udGVudERpc3BsYXll
ZCA9IHRydWU7CisgICAgfQorCisgICAgYm9vbCBtX2luc2VjdXJlQ29udGVudFJ1bjsKKyAgICBi
b29sIG1faW5zZWN1cmVDb250ZW50RGlzcGxheWVkOworfTsKKworc3RhdGljIHZvaWQgdGVzdElu
c2VjdXJlQ29udGVudChJbnNlY3VyZUNvbnRlbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQor
eworICAgIHRlc3QtPmxvYWRVUkkoa0h0dHBzU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvaW5zZWN1
cmUtY29udGVudC8iKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgp
OworCisgICAgZ19hc3NlcnQodGVzdC0+bV9pbnNlY3VyZUNvbnRlbnRSdW4pOworICAgIGdfYXNz
ZXJ0KHRlc3QtPm1faW5zZWN1cmVDb250ZW50RGlzcGxheWVkKTsKK30KKworc3RhdGljIHZvaWQg
dGVzdFRMU0Vycm9yc1BvbGljeShTU0xUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAg
IFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQo
dGVzdC0+bV93ZWJWaWV3KTsKKyAgICAvLyBUTFMgZXJyb3JzIGFyZSBpZ25vcmVkIGJ5IGRlZmF1
bHQuCisgICAgZ19hc3NlcnQod2Via2l0X3dlYl9jb250ZXh0X2dldF90bHNfZXJyb3JzX3BvbGlj
eShjb250ZXh0KSA9PSBXRUJLSVRfVExTX0VSUk9SU19QT0xJQ1lfSUdOT1JFKTsKKyAgICB0ZXN0
LT5sb2FkVVJJKGtIdHRwc1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7CisgICAg
dGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnQoIXRlc3QtPm1fbG9h
ZEZhaWxlZCk7CisKKyAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3Rsc19lcnJvcnNfcG9saWN5
KGNvbnRleHQsIFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9GQUlMKTsKKyAgICB0ZXN0LT5sb2Fk
VVJJKGtIdHRwc1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7CisgICAgdGVzdC0+
d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9sb2FkRmFpbGVk
KTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX2xvYWRFdmVudHMuY29udGFpbnMoTG9hZFRyYWNraW5n
VGVzdDo6UHJvdmlzaW9uYWxMb2FkRmFpbGVkKSk7CisgICAgZ19hc3NlcnQoIXRlc3QtPm1fbG9h
ZEV2ZW50cy5jb250YWlucyhMb2FkVHJhY2tpbmdUZXN0OjpMb2FkQ29tbWl0dGVkKSk7Cit9CisK
K2NsYXNzIFRMU0Vycm9yc1Rlc3Q6IHB1YmxpYyBTU0xUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtF
X0dMSUJfVEVTVF9GSVhUVVJFKFRMU0Vycm9yc1Rlc3QpOworCisgICAgVExTRXJyb3JzVGVzdCgp
CisgICAgeworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImxvYWQtZmFpbGVk
LXdpdGgtdGxzLWVycm9ycyIsIEdfQ0FMTEJBQ0socnVuTG9hZEZhaWxlZFdpdGhUTFNFcnJvcnND
YWxsYmFjayksIHRoaXMpOworICAgIH0KKworICAgIH5UTFNFcnJvcnNUZXN0KCkKKyAgICB7Cisg
ICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3dlYlZpZXcsIEdf
U0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOworICAgICAgICBpZiAobV9jZXJ0
aWZpY2F0ZUluZm8pCisgICAgICAgICAgICB3ZWJraXRfY2VydGlmaWNhdGVfaW5mb19mcmVlKG1f
Y2VydGlmaWNhdGVJbmZvKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gcnVuTG9hZEZh
aWxlZFdpdGhUTFNFcnJvcnNDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiwgV2ViS2l0Q2VydGlmaWNh
dGVJbmZvKiBpbmZvLCBjb25zdCBjaGFyKiBob3N0LCBUTFNFcnJvcnNUZXN0KiB0ZXN0KQorICAg
IHsKKyAgICAgICAgdGVzdC0+cnVuTG9hZEZhaWxlZFdpdGhUTFNFcnJvcnMoaW5mbywgaG9zdCk7
CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKworICAgIHZvaWQgcnVuTG9hZEZhaWxlZFdp
dGhUTFNFcnJvcnMoV2ViS2l0Q2VydGlmaWNhdGVJbmZvKiBpbmZvLCBjb25zdCBjaGFyKiBob3N0
KQorICAgIHsKKyAgICAgICAgaWYgKG1fY2VydGlmaWNhdGVJbmZvKQorICAgICAgICAgICAgd2Vi
a2l0X2NlcnRpZmljYXRlX2luZm9fZnJlZShtX2NlcnRpZmljYXRlSW5mbyk7CisgICAgICAgIG1f
Y2VydGlmaWNhdGVJbmZvID0gd2Via2l0X2NlcnRpZmljYXRlX2luZm9fY29weShpbmZvKTsKKyAg
ICAgICAgbV9ob3N0LnNldChnX3N0cmR1cChob3N0KSk7CisgICAgICAgIGdfbWFpbl9sb29wX3F1
aXQobV9tYWluTG9vcCk7CisgICAgfQorCisgICAgdm9pZCB3YWl0VW50aWxMb2FkRmFpbGVkV2l0
aFRMU0Vycm9ycygpCisgICAgeworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7
CisgICAgfQorCisgICAgV2ViS2l0Q2VydGlmaWNhdGVJbmZvKiBjZXJ0aWZpY2F0ZUluZm8oKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY2VydGlmaWNhdGVJbmZvOworICAgIH0KKworICAgIGNv
bnN0IGNoYXIqIGhvc3QoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faG9zdC5nZXQoKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgV2ViS2l0Q2VydGlmaWNhdGVJbmZvKiBtX2NlcnRpZmljYXRl
SW5mbzsKKyAgICBHT3duUHRyPGNoYXI+IG1faG9zdDsKK307CisKK3N0YXRpYyB2b2lkIHRlc3RM
b2FkRmFpbGVkV2l0aFRMU0Vycm9ycyhUTFNFcnJvcnNUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVy
KQoreworICAgIFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X2NvbnRleHQodGVzdC0+bV93ZWJWaWV3KTsKKyAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3Rs
c19lcnJvcnNfcG9saWN5KGNvbnRleHQsIFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9GQUlMKTsK
KworICAgIC8vIFRoZSBsb2FkLWZhaWxlZC13aXRoLXRscy1lcnJvcnMgc2lnbmFsIHNob3VsZCBi
ZSBlbWl0dGVkIHdoZW4gdGhlcmUgaXMgYSBUTFMgZmFpbHVyZS4KKyAgICB0ZXN0LT5sb2FkVVJJ
KGtIdHRwc1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3Rlc3QtdGxzLyIpLmRhdGEoKSk7CisgICAg
dGVzdC0+d2FpdFVudGlsTG9hZEZhaWxlZFdpdGhUTFNFcnJvcnMoKTsKKyAgICAvLyBUZXN0IHRo
ZSBXZWJLaXRDZXJ0aWZpY2F0ZUluZm8gQVBJLgorICAgIGdfYXNzZXJ0KEdfSVNfVExTX0NFUlRJ
RklDQVRFKHdlYmtpdF9jZXJ0aWZpY2F0ZV9pbmZvX2dldF90bHNfY2VydGlmaWNhdGUodGVzdC0+
Y2VydGlmaWNhdGVJbmZvKCkpKSk7CisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfY2VydGlm
aWNhdGVfaW5mb19nZXRfdGxzX2Vycm9ycyh0ZXN0LT5jZXJ0aWZpY2F0ZUluZm8oKSksID09LCBH
X1RMU19DRVJUSUZJQ0FURV9VTktOT1dOX0NBKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+
aG9zdCgpLCA9PSwgc291cF91cmlfZ2V0X2hvc3Qoa0h0dHBzU2VydmVyLT5iYXNlVVJJKCkpKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzBdLCA9PSwgTG9hZFRyYWNr
aW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KHRl
c3QtPm1fbG9hZEV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7
CisKKyAgICAvLyBUZXN0IGFsbG93aW5nIGFuIGV4Y2VwdGlvbiBmb3IgdGhpcyBjZXJ0aWZpY2F0
ZSBvbiB0aGlzIGhvc3QuCisgICAgd2Via2l0X3dlYl9jb250ZXh0X2FsbG93X3Rsc19jZXJ0aWZp
Y2F0ZV9mb3JfaG9zdChjb250ZXh0LCB0ZXN0LT5jZXJ0aWZpY2F0ZUluZm8oKSwgdGVzdC0+aG9z
dCgpKTsKKyAgICAvLyBUaGUgcGFnZSBzaG91bGQgbm93IGxvYWQgd2l0aG91dCBlcnJvcnMuCisg
ICAgdGVzdC0+bG9hZFVSSShrSHR0cHNTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi90ZXN0LXRscy8i
KS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgZ19h
c3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1swXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6
OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xv
YWRFdmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkQ29tbWl0dGVkKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVz
dDo6TG9hZEZpbmlzaGVkKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dl
dF90aXRsZSh0ZXN0LT5tX3dlYlZpZXcpLCA9PSwgVExTRXhwZWN0ZWRTdWNjZXNzVGl0bGUpOwor
fQorCisKK3N0YXRpYyB2b2lkIGh0dHBzU2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVy
LCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSosIFNv
dXBDbGllbnRDb250ZXh0KiwgZ3BvaW50ZXIpCit7CisgICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAh
PSBTT1VQX01FVEhPRF9HRVQpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVz
c2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiLyIpKSB7CisgICAgICAgIHNvdXBfbWVz
c2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKKyAgICAgICAgc291cF9t
ZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NU
QVRJQywgaW5kZXhIVE1MLCBzdHJsZW4oaW5kZXhIVE1MKSk7CisgICAgICAgIHNvdXBfbWVzc2Fn
ZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOworICAgIH0gZWxzZSBpZiAo
Z19zdHJfZXF1YWwocGF0aCwgIi9pbnNlY3VyZS1jb250ZW50LyIpKSB7CisgICAgICAgIEdPd25Q
dHI8Y2hhcj4gcmVzcG9uc2VIVE1MKGdfc3RyZHVwX3ByaW50ZihpbnNlY3VyZUNvbnRlbnRIVE1M
LCBrSHR0cFNlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3Rlc3Qtc2NyaXB0IikuZGF0YSgpLCBrSHR0
cFNlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3Rlc3QtaW1hZ2UiKS5kYXRhKCkpKTsKKyAgICAgICAg
c291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVN
T1JZX0NPUFksIHJlc3BvbnNlSFRNTC5nZXQoKSwgc3RybGVuKHJlc3BvbnNlSFRNTC5nZXQoKSkp
OworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19P
Syk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNl
X2JvZHkpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi90ZXN0LXRscy8iKSkg
eworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19P
Syk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9i
b2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIFRMU1N1Y2Nlc3NIVE1MU3RyaW5nLCBzdHJsZW4oVExT
U3VjY2Vzc0hUTUxTdHJpbmcpKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUo
bWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7CisgICAgfSBlbHNlCisgICAgICAgIHNvdXBfbWVzc2Fn
ZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7Cit9CisKK3N0YXRp
YyB2b2lkIGh0dHBTZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdl
KiBtZXNzYWdlLCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiwgU291cENsaWVudENvbnRl
eHQqLCBncG9pbnRlcikKK3sKKyAgICBpZiAobWVzc2FnZS0+bWV0aG9kICE9IFNPVVBfTUVUSE9E
X0dFVCkgeworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NU
QVRVU19OT1RfSU1QTEVNRU5URUQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KGdfc3RyX2VxdWFsKHBhdGgsICIvdGVzdC1zY3JpcHQiKSkgeworICAgICAgICBHT3duUHRyPGNo
YXI+IHBhdGhUb0ZpbGUoZ19idWlsZF9maWxlbmFtZShUZXN0OjpnZXRSZXNvdXJjZXNEaXIoKS5k
YXRhKCksICJsaW5rLXRpdGxlLmpzIiwgTlVMTCkpOworICAgICAgICBjaGFyKiBjb250ZW50czsK
KyAgICAgICAgZ3NpemUgbGVuZ3RoOworICAgICAgICBnX2ZpbGVfZ2V0X2NvbnRlbnRzKHBhdGhU
b0ZpbGUuZ2V0KCksICZjb250ZW50cywgJmxlbmd0aCwgMCk7CisKKyAgICAgICAgc291cF9tZXNz
YWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0Us
IGNvbnRlbnRzLCBsZW5ndGgpOworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNz
YWdlLCBTT1VQX1NUQVRVU19PSyk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRl
KG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0
aCwgIi90ZXN0LWltYWdlIikpIHsKKyAgICAgICAgR093blB0cjxjaGFyPiBwYXRoVG9GaWxlKGdf
YnVpbGRfZmlsZW5hbWUoVGVzdDo6Z2V0V2ViS2l0MVRlc3RSZXNvdWNlc0RpcigpLmRhdGEoKSwg
ImJsYW5rLmljbyIsIE5VTEwpKTsKKyAgICAgICAgY2hhciogY29udGVudHM7CisgICAgICAgIGdz
aXplIGxlbmd0aDsKKyAgICAgICAgZ19maWxlX2dldF9jb250ZW50cyhwYXRoVG9GaWxlLmdldCgp
LCAmY29udGVudHMsICZsZW5ndGgsIDApOworCisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2Fw
cGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBjb250ZW50cywg
bGVuZ3RoKTsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9T
VEFUVVNfT0spOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5y
ZXNwb25zZV9ib2R5KTsKKyAgICB9IGVsc2UKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0
dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0ZPVU5EKTsKK30KKwordm9pZCBiZWZvcmVBbGwo
KQoreworICAgIGtIdHRwc1NlcnZlciA9IG5ldyBXZWJLaXRUZXN0U2VydmVyKFdlYktpdFRlc3RT
ZXJ2ZXI6OlNlcnZlckhUVFBTKTsKKyAgICBrSHR0cHNTZXJ2ZXItPnJ1bihodHRwc1NlcnZlckNh
bGxiYWNrKTsKKworICAgIGtIdHRwU2VydmVyID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIoV2ViS2l0
VGVzdFNlcnZlcjo6U2VydmVySFRUUCk7CisgICAga0h0dHBTZXJ2ZXItPnJ1bihodHRwU2VydmVy
Q2FsbGJhY2spOworCisgICAgU1NMVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInNzbCIsIHRl
c3RTU0wpOworICAgIEluc2VjdXJlQ29udGVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJp
bnNlY3VyZS1jb250ZW50IiwgdGVzdEluc2VjdXJlQ29udGVudCk7CisgICAgLy8gSW4gdGhpcyBj
YXNlIHRoZSBvcmRlciBvZiB0aGUgdGVzdHMgZG9lcyBtYXR0ZXIgYmVjYXVzZSB0bHMtZXJyb3Jz
LXBvbGljeSB0ZXN0cyB0aGUgZGVmYXVsdCBwb2xpY3ksCisgICAgLy8gYW5kIGV4cGVjdHMgdGhh
dCBubyBleGNlcHRpb24gd2lsbCBoYXZlIGJlZW4gYWRkZWQgZm9yIHRoaXMgY2VydGlmaWNhdGUg
YW5kIGhvc3QgcGFpciBhcyBpcworICAgIC8vIGRvbmUgaW4gdGhlIHRscy1wZXJtaXNzaW9uLXJl
cXVlc3QgdGVzdC4KKyAgICBTU0xUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAidGxzLWVycm9y
cy1wb2xpY3kiLCB0ZXN0VExTRXJyb3JzUG9saWN5KTsKKyAgICBUTFNFcnJvcnNUZXN0OjphZGQo
IldlYktpdFdlYlZpZXciLCAibG9hZC1mYWlsZWQtd2l0aC10bHMtZXJyb3JzIiwgdGVzdExvYWRG
YWlsZWRXaXRoVExTRXJyb3JzKTsKK30KKwordm9pZCBhZnRlckFsbCgpCit7CisgICAgZGVsZXRl
IGtIdHRwc1NlcnZlcjsKKyAgICBkZWxldGUga0h0dHBTZXJ2ZXI7Cit9CmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFVJQ2xpZW50LmNwcCBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0VUlDbGllbnQuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmJjMzBkNmRhNjIxMjA0YzEwNWE2Y2YzY2VlNzZiZmJmNTU4MWQzZWUKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFVJQ2xp
ZW50LmNwcApAQCAtMCwwICsxLDY3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2Fs
aWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCisj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCitzdGF0aWMgY29uc3QgY2hhciog
a0FsZXJ0RGlhbG9nTWVzc2FnZSA9ICJXZWJLaXRHVEsrIGFsZXJ0IGRpYWxvZyBtZXNzYWdlIjsK
K3N0YXRpYyBjb25zdCBjaGFyKiBrQ29uZmlybURpYWxvZ01lc3NhZ2UgPSAiV2ViS2l0R1RLKyBj
b25maXJtIGRpYWxvZyBtZXNzYWdlIjsKK3N0YXRpYyBjb25zdCBjaGFyKiBrUHJvbXB0RGlhbG9n
TWVzc2FnZSA9ICJXZWJLaXRHVEsrIHByb21wdCBkaWFsb2cgbWVzc2FnZSI7CitzdGF0aWMgY29u
c3QgY2hhcioga1Byb21wdERpYWxvZ1JldHVybmVkVGV4dCA9ICJXZWJLaXRHVEsrIHByb21wdCBk
aWFsb2cgcmV0dXJuZWQgdGV4dCI7CisKK2NsYXNzIFVJQ2xpZW50VGVzdDogcHVibGljIFdlYlZp
ZXdUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFVJQ2xpZW50VGVz
dCk7CisKKyAgICBlbnVtIFdlYlZpZXdFdmVudHMgeworICAgICAgICBDcmVhdGUsCisgICAgICAg
IFJlYWR5VG9TaG93LAorICAgICAgICBSdW5Bc01vZGFsLAorICAgICAgICBDbG9zZQorICAgIH07
CisKKyAgICBjbGFzcyBXaW5kb3dQcm9wZXJ0aWVzIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFdp
bmRvd1Byb3BlcnRpZXMoKQorICAgICAgICAgICAgOiBtX2lzTnVsbCh0cnVlKQorICAgICAgICAg
ICAgLCBtX3Rvb2xiYXJWaXNpYmxlKHRydWUpCisgICAgICAgICAgICAsIG1fc3RhdHVzYmFyVmlz
aWJsZSh0cnVlKQorICAgICAgICAgICAgLCBtX3Njcm9sbGJhcnNWaXNpYmxlKHRydWUpCisgICAg
ICAgICAgICAsIG1fbWVudWJhclZpc2libGUodHJ1ZSkKKyAgICAgICAgICAgICwgbV9sb2NhdGlv
bmJhclZpc2libGUodHJ1ZSkKKyAgICAgICAgICAgICwgbV9yZXNpemFibGUodHJ1ZSkKKyAgICAg
ICAgICAgICwgbV9mdWxsc2NyZWVuKGZhbHNlKQorICAgICAgICB7CisgICAgICAgICAgICBtZW1z
ZXQoJm1fZ2VvbWV0cnksIDAsIHNpemVvZihHZGtSZWN0YW5nbGUpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIFdpbmRvd1Byb3BlcnRpZXMoV2ViS2l0V2luZG93UHJvcGVydGllcyogd2luZG93UHJv
cGVydGllcykKKyAgICAgICAgICAgIDogbV9pc051bGwoZmFsc2UpCisgICAgICAgICAgICAsIG1f
dG9vbGJhclZpc2libGUod2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF90b29sYmFyX3Zpc2li
bGUod2luZG93UHJvcGVydGllcykpCisgICAgICAgICAgICAsIG1fc3RhdHVzYmFyVmlzaWJsZSh3
ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X3N0YXR1c2Jhcl92aXNpYmxlKHdpbmRvd1Byb3Bl
cnRpZXMpKQorICAgICAgICAgICAgLCBtX3Njcm9sbGJhcnNWaXNpYmxlKHdlYmtpdF93aW5kb3df
cHJvcGVydGllc19nZXRfc2Nyb2xsYmFyc192aXNpYmxlKHdpbmRvd1Byb3BlcnRpZXMpKQorICAg
ICAgICAgICAgLCBtX21lbnViYXJWaXNpYmxlKHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRf
bWVudWJhcl92aXNpYmxlKHdpbmRvd1Byb3BlcnRpZXMpKQorICAgICAgICAgICAgLCBtX2xvY2F0
aW9uYmFyVmlzaWJsZSh3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X2xvY2F0aW9uYmFyX3Zp
c2libGUod2luZG93UHJvcGVydGllcykpCisgICAgICAgICAgICAsIG1fcmVzaXphYmxlKHdlYmtp
dF93aW5kb3dfcHJvcGVydGllc19nZXRfcmVzaXphYmxlKHdpbmRvd1Byb3BlcnRpZXMpKQorICAg
ICAgICAgICAgLCBtX2Z1bGxzY3JlZW4od2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF9mdWxs
c2NyZWVuKHdpbmRvd1Byb3BlcnRpZXMpKQorICAgICAgICB7CisgICAgICAgICAgICB3ZWJraXRf
d2luZG93X3Byb3BlcnRpZXNfZ2V0X2dlb21ldHJ5KHdpbmRvd1Byb3BlcnRpZXMsICZtX2dlb21l
dHJ5KTsKKyAgICAgICAgfQorCisgICAgICAgIFdpbmRvd1Byb3BlcnRpZXMoR2RrUmVjdGFuZ2xl
KiBnZW9tZXRyeSwgYm9vbCB0b29sYmFyVmlzaWJsZSwgYm9vbCBzdGF0dXNiYXJWaXNpYmxlLCBi
b29sIHNjcm9sbGJhcnNWaXNpYmxlLCBib29sIG1lbnViYXJWaXNpYmxlLCBib29sIGxvY2F0aW9u
YmFyVmlzaWJsZSwgYm9vbCByZXNpemFibGUsIGJvb2wgZnVsbHNjcmVlbikKKyAgICAgICAgICAg
IDogbV9pc051bGwoZmFsc2UpCisgICAgICAgICAgICAsIG1fZ2VvbWV0cnkoKmdlb21ldHJ5KQor
ICAgICAgICAgICAgLCBtX3Rvb2xiYXJWaXNpYmxlKHRvb2xiYXJWaXNpYmxlKQorICAgICAgICAg
ICAgLCBtX3N0YXR1c2JhclZpc2libGUoc3RhdHVzYmFyVmlzaWJsZSkKKyAgICAgICAgICAgICwg
bV9zY3JvbGxiYXJzVmlzaWJsZShzY3JvbGxiYXJzVmlzaWJsZSkKKyAgICAgICAgICAgICwgbV9t
ZW51YmFyVmlzaWJsZShtZW51YmFyVmlzaWJsZSkKKyAgICAgICAgICAgICwgbV9sb2NhdGlvbmJh
clZpc2libGUobG9jYXRpb25iYXJWaXNpYmxlKQorICAgICAgICAgICAgLCBtX3Jlc2l6YWJsZShy
ZXNpemFibGUpCisgICAgICAgICAgICAsIG1fZnVsbHNjcmVlbihmdWxsc2NyZWVuKQorICAgICAg
ICB7CisgICAgICAgIH0KKworICAgICAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1f
aXNOdWxsOyB9CisKKyAgICAgICAgdm9pZCBhc3NlcnRFcXVhbChjb25zdCBXaW5kb3dQcm9wZXJ0
aWVzJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgZ19hc3NlcnRfY21waW50
KG1fZ2VvbWV0cnkueCwgPT0sIG90aGVyLm1fZ2VvbWV0cnkueCk7CisgICAgICAgICAgICBnX2Fz
c2VydF9jbXBpbnQobV9nZW9tZXRyeS55LCA9PSwgb3RoZXIubV9nZW9tZXRyeS55KTsKKyAgICAg
ICAgICAgIGdfYXNzZXJ0X2NtcGludChtX2dlb21ldHJ5LndpZHRoLCA9PSwgb3RoZXIubV9nZW9t
ZXRyeS53aWR0aCk7CisgICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQobV9nZW9tZXRyeS5oZWln
aHQsID09LCBvdGhlci5tX2dlb21ldHJ5LmhlaWdodCk7CisgICAgICAgICAgICBnX2Fzc2VydF9j
bXBpbnQoc3RhdGljX2Nhc3Q8aW50PihtX3Rvb2xiYXJWaXNpYmxlKSwgPT0sIHN0YXRpY19jYXN0
PGludD4ob3RoZXIubV90b29sYmFyVmlzaWJsZSkpOworICAgICAgICAgICAgZ19hc3NlcnRfY21w
aW50KHN0YXRpY19jYXN0PGludD4obV9zdGF0dXNiYXJWaXNpYmxlKSwgPT0sIHN0YXRpY19jYXN0
PGludD4ob3RoZXIubV9zdGF0dXNiYXJWaXNpYmxlKSk7CisgICAgICAgICAgICBnX2Fzc2VydF9j
bXBpbnQoc3RhdGljX2Nhc3Q8aW50PihtX3Njcm9sbGJhcnNWaXNpYmxlKSwgPT0sIHN0YXRpY19j
YXN0PGludD4ob3RoZXIubV9zY3JvbGxiYXJzVmlzaWJsZSkpOworICAgICAgICAgICAgZ19hc3Nl
cnRfY21waW50KHN0YXRpY19jYXN0PGludD4obV9tZW51YmFyVmlzaWJsZSksID09LCBzdGF0aWNf
Y2FzdDxpbnQ+KG90aGVyLm1fbWVudWJhclZpc2libGUpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0
X2NtcGludChzdGF0aWNfY2FzdDxpbnQ+KG1fbG9jYXRpb25iYXJWaXNpYmxlKSwgPT0sIHN0YXRp
Y19jYXN0PGludD4ob3RoZXIubV9sb2NhdGlvbmJhclZpc2libGUpKTsKKyAgICAgICAgICAgIGdf
YXNzZXJ0X2NtcGludChzdGF0aWNfY2FzdDxpbnQ+KG1fcmVzaXphYmxlKSwgPT0sIHN0YXRpY19j
YXN0PGludD4ob3RoZXIubV9yZXNpemFibGUpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0X2NtcGlu
dChzdGF0aWNfY2FzdDxpbnQ+KG1fZnVsbHNjcmVlbiksID09LCBzdGF0aWNfY2FzdDxpbnQ+KG90
aGVyLm1fZnVsbHNjcmVlbikpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBi
b29sIG1faXNOdWxsOworCisgICAgICAgIEdka1JlY3RhbmdsZSBtX2dlb21ldHJ5OworCisgICAg
ICAgIGJvb2wgbV90b29sYmFyVmlzaWJsZTsKKyAgICAgICAgYm9vbCBtX3N0YXR1c2JhclZpc2li
bGU7CisgICAgICAgIGJvb2wgbV9zY3JvbGxiYXJzVmlzaWJsZTsKKyAgICAgICAgYm9vbCBtX21l
bnViYXJWaXNpYmxlOworICAgICAgICBib29sIG1fbG9jYXRpb25iYXJWaXNpYmxlOworCisgICAg
ICAgIGJvb2wgbV9yZXNpemFibGU7CisgICAgICAgIGJvb2wgbV9mdWxsc2NyZWVuOworICAgIH07
CisKKyAgICBzdGF0aWMgdm9pZCB3aW5kb3dQcm9wZXJ0aWVzTm90aWZ5Q2FsbGJhY2soR09iamVj
dCosIEdQYXJhbVNwZWMqIHBhcmFtU3BlYywgVUlDbGllbnRUZXN0KiB0ZXN0KQorICAgIHsKKyAg
ICAgICAgdGVzdC0+bV93aW5kb3dQcm9wZXJ0aWVzQ2hhbmdlZC5hZGQoZ19wYXJhbV9zcGVjX2dl
dF9uYW1lKHBhcmFtU3BlYykpOworICAgIH0KKworICAgIHN0YXRpYyBHdGtXaWRnZXQqIHZpZXdD
cmVhdGVDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBVSUNsaWVudFRlc3QqIHRlc3Qp
CisgICAgeworICAgICAgICByZXR1cm4gdGVzdC0+dmlld0NyZWF0ZSh3ZWJWaWV3KTsKKyAgICB9
CisKKyAgICBzdGF0aWMgdm9pZCB2aWV3UmVhZHlUb1Nob3dDYWxsYmFjayhXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3LCBVSUNsaWVudFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT52aWV3
UmVhZHlUb1Nob3cod2ViVmlldyk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgdmlld0Nsb3Nl
Q2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgVUlDbGllbnRUZXN0KiB0ZXN0KQorICAg
IHsKKyAgICAgICAgdGVzdC0+dmlld0Nsb3NlKHdlYlZpZXcpOworICAgIH0KKworICAgIHZvaWQg
c2NyaXB0QWxlcnQoV2ViS2l0U2NyaXB0RGlhbG9nKiBkaWFsb2cpCisgICAgeworICAgICAgICBz
d2l0Y2ggKG1fc2NyaXB0RGlhbG9nVHlwZSkgeworICAgICAgICBjYXNlIFdFQktJVF9TQ1JJUFRf
RElBTE9HX0FMRVJUOgorICAgICAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zY3JpcHRf
ZGlhbG9nX2dldF9tZXNzYWdlKGRpYWxvZyksID09LCBrQWxlcnREaWFsb2dNZXNzYWdlKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdFQktJVF9TQ1JJUFRfRElBTE9HX0NPTkZJ
Uk06CisgICAgICAgICAgICBnX2Fzc2VydChtX3NjcmlwdERpYWxvZ0NvbmZpcm1lZCk7CisgICAg
ICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NjcmlwdF9kaWFsb2dfZ2V0X21lc3NhZ2Uo
ZGlhbG9nKSwgPT0sICJjb25maXJtZWQiKTsKKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgV0VCS0lUX1NDUklQVF9ESUFMT0dfUFJPTVBUOgorICAgICAgICAgICAgZ19hc3NlcnRf
Y21wc3RyKHdlYmtpdF9zY3JpcHRfZGlhbG9nX2dldF9tZXNzYWdlKGRpYWxvZyksID09LCBrUHJv
bXB0RGlhbG9nUmV0dXJuZWRUZXh0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICB2b2lk
IHNjcmlwdENvbmZpcm0oV2ViS2l0U2NyaXB0RGlhbG9nKiBkaWFsb2cpCisgICAgeworICAgICAg
ICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NjcmlwdF9kaWFsb2dfZ2V0X21lc3NhZ2UoZGlhbG9n
KSwgPT0sIGtDb25maXJtRGlhbG9nTWVzc2FnZSk7CisgICAgICAgIG1fc2NyaXB0RGlhbG9nQ29u
ZmlybWVkID0gIW1fc2NyaXB0RGlhbG9nQ29uZmlybWVkOworICAgICAgICB3ZWJraXRfc2NyaXB0
X2RpYWxvZ19jb25maXJtX3NldF9jb25maXJtZWQoZGlhbG9nLCBtX3NjcmlwdERpYWxvZ0NvbmZp
cm1lZCk7CisgICAgfQorCisgICAgdm9pZCBzY3JpcHRQcm9tcHQoV2ViS2l0U2NyaXB0RGlhbG9n
KiBkaWFsb2cpCisgICAgeworICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NjcmlwdF9k
aWFsb2dfZ2V0X21lc3NhZ2UoZGlhbG9nKSwgPT0sIGtQcm9tcHREaWFsb2dNZXNzYWdlKTsKKyAg
ICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zY3JpcHRfZGlhbG9nX3Byb21wdF9nZXRfZGVm
YXVsdF90ZXh0KGRpYWxvZyksID09LCAiZGVmYXVsdCIpOworICAgICAgICB3ZWJraXRfc2NyaXB0
X2RpYWxvZ19wcm9tcHRfc2V0X3RleHQoZGlhbG9nLCBrUHJvbXB0RGlhbG9nUmV0dXJuZWRUZXh0
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gc2NyaXB0RGlhbG9nKFdlYktpdFdlYlZp
ZXcqLCBXZWJLaXRTY3JpcHREaWFsb2cqIGRpYWxvZywgVUlDbGllbnRUZXN0KiB0ZXN0KQorICAg
IHsKKyAgICAgICAgc3dpdGNoICh3ZWJraXRfc2NyaXB0X2RpYWxvZ19nZXRfZGlhbG9nX3R5cGUo
ZGlhbG9nKSkgeworICAgICAgICBjYXNlIFdFQktJVF9TQ1JJUFRfRElBTE9HX0FMRVJUOgorICAg
ICAgICAgICAgdGVzdC0+c2NyaXB0QWxlcnQoZGlhbG9nKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFdFQktJVF9TQ1JJUFRfRElBTE9HX0NPTkZJUk06CisgICAgICAgICAgICB0
ZXN0LT5zY3JpcHRDb25maXJtKGRpYWxvZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBXRUJLSVRfU0NSSVBUX0RJQUxPR19QUk9NUFQ6CisgICAgICAgICAgICB0ZXN0LT5zY3Jp
cHRQcm9tcHQoZGlhbG9nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgbW91c2VUYXJnZXRDaGFu
Z2VkKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRIaXRUZXN0UmVzdWx0KiBoaXRUZXN0UmVzdWx0LCBn
dWludCBtb2RpZmllcnMsIFVJQ2xpZW50VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIGdfYXNz
ZXJ0KFdFQktJVF9JU19ISVRfVEVTVF9SRVNVTFQoaGl0VGVzdFJlc3VsdCkpOworICAgICAgICB0
ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKGhpdFRl
c3RSZXN1bHQpKTsKKworICAgICAgICB0ZXN0LT5tX21vdXNlVGFyZ2V0SGl0VGVzdFJlc3VsdCA9
IGhpdFRlc3RSZXN1bHQ7CisgICAgICAgIHRlc3QtPm1fbW91c2VUYXJnZXRNb2RpZmllcnMgPSBt
b2RpZmllcnM7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7Cisg
ICAgfQorCisgICAgc3RhdGljIGdib29sZWFuIHBlcm1pc3Npb25SZXF1ZXN0ZWQoV2ViS2l0V2Vi
VmlldyosIFdlYktpdFBlcm1pc3Npb25SZXF1ZXN0KiByZXF1ZXN0LCBVSUNsaWVudFRlc3QqIHRl
c3QpCisgICAgeworICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfUEVSTUlTU0lPTl9SRVFVRVNU
KHJlcXVlc3QpKTsKKyAgICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RG
aW5pc2hlcyhHX09CSkVDVChyZXF1ZXN0KSk7CisKKyAgICAgICAgaWYgKHRlc3QtPm1fYWxsb3dQ
ZXJtaXNzaW9uUmVxdWVzdHMpCisgICAgICAgICAgICB3ZWJraXRfcGVybWlzc2lvbl9yZXF1ZXN0
X2FsbG93KHJlcXVlc3QpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB3ZWJraXRfcGVybWlz
c2lvbl9yZXF1ZXN0X2RlbnkocmVxdWVzdCk7CisKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAg
fQorCisgICAgVUlDbGllbnRUZXN0KCkKKyAgICAgICAgOiBtX3NjcmlwdERpYWxvZ1R5cGUoV0VC
S0lUX1NDUklQVF9ESUFMT0dfQUxFUlQpCisgICAgICAgICwgbV9zY3JpcHREaWFsb2dDb25maXJt
ZWQodHJ1ZSkKKyAgICAgICAgLCBtX2FsbG93UGVybWlzc2lvblJlcXVlc3RzKGZhbHNlKQorICAg
ICAgICAsIG1fbW91c2VUYXJnZXRNb2RpZmllcnMoMCkKKyAgICB7CisgICAgICAgIHdlYmtpdF9z
ZXR0aW5nc19zZXRfamF2YXNjcmlwdF9jYW5fb3Blbl93aW5kb3dzX2F1dG9tYXRpY2FsbHkod2Vi
a2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyhtX3dlYlZpZXcpLCBUUlVFKTsKKyAgICAgICAgZ19z
aWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJjcmVhdGUiLCBHX0NBTExCQUNLKHZpZXdDcmVhdGVD
YWxsYmFjayksIHRoaXMpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgInNj
cmlwdC1kaWFsb2ciLCBHX0NBTExCQUNLKHNjcmlwdERpYWxvZyksIHRoaXMpOworICAgICAgICBn
X3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgIm1vdXNlLXRhcmdldC1jaGFuZ2VkIiwgR19DQUxM
QkFDSyhtb3VzZVRhcmdldENoYW5nZWQpLCB0aGlzKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVj
dChtX3dlYlZpZXcsICJwZXJtaXNzaW9uLXJlcXVlc3QiLCBHX0NBTExCQUNLKHBlcm1pc3Npb25S
ZXF1ZXN0ZWQpLCB0aGlzKTsKKyAgICB9CisKKyAgICB+VUlDbGllbnRUZXN0KCkKKyAgICB7Cisg
ICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3dlYlZpZXcsIEdf
U0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOworICAgIH0KKworICAgIHZvaWQg
d2FpdFVudGlsTWFpbkxvb3BGaW5pc2hlcygpCisgICAgeworICAgICAgICBnX21haW5fbG9vcF9y
dW4obV9tYWluTG9vcCk7CisgICAgfQorCisgICAgdm9pZCBzZXRFeHBlY3RlZFdpbmRvd1Byb3Bl
cnRpZXMoY29uc3QgV2luZG93UHJvcGVydGllcyYgd2luZG93UHJvcGVydGllcykKKyAgICB7Cisg
ICAgICAgIG1fd2luZG93UHJvcGVydGllcyA9IHdpbmRvd1Byb3BlcnRpZXM7CisgICAgfQorCisg
ICAgV2ViS2l0SGl0VGVzdFJlc3VsdCogbW92ZU1vdXNlQW5kV2FpdFVudGlsTW91c2VUYXJnZXRD
aGFuZ2VkKGludCB4LCBpbnQgeSwgdW5zaWduZWQgbW91c2VNb2RpZmllcnMgPSAwKQorICAgIHsK
KyAgICAgICAgbW91c2VNb3ZlVG8oeCwgeSwgbW91c2VNb2RpZmllcnMpOworICAgICAgICBnX21h
aW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgICAgIHJldHVybiBtX21vdXNlVGFyZ2V0SGl0
VGVzdFJlc3VsdC5nZXQoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIEd0a1dpZGdldCogdmlld0Ny
ZWF0ZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQod2Vi
VmlldyA9PSBtX3dlYlZpZXcpOworCisgICAgICAgIEd0a1dpZGdldCogbmV3V2ViVmlldyA9IHdl
YmtpdF93ZWJfdmlld19uZXdfd2l0aF9jb250ZXh0KHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4
dCh3ZWJWaWV3KSk7CisgICAgICAgIGdfb2JqZWN0X3JlZl9zaW5rKG5ld1dlYlZpZXcpOworCisg
ICAgICAgIG1fd2ViVmlld0V2ZW50cy5hcHBlbmQoQ3JlYXRlKTsKKworICAgICAgICBXZWJLaXRX
aW5kb3dQcm9wZXJ0aWVzKiB3aW5kb3dQcm9wZXJ0aWVzID0gd2Via2l0X3dlYl92aWV3X2dldF93
aW5kb3dfcHJvcGVydGllcyhXRUJLSVRfV0VCX1ZJRVcobmV3V2ViVmlldykpOworICAgICAgICBn
X2Fzc2VydCh3aW5kb3dQcm9wZXJ0aWVzKTsKKyAgICAgICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVk
V2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVCh3aW5kb3dQcm9wZXJ0aWVzKSk7CisgICAgICAgIG1f
d2luZG93UHJvcGVydGllc0NoYW5nZWQuY2xlYXIoKTsKKworICAgICAgICBnX3NpZ25hbF9jb25u
ZWN0KHdpbmRvd1Byb3BlcnRpZXMsICJub3RpZnkiLCBHX0NBTExCQUNLKHdpbmRvd1Byb3BlcnRp
ZXNOb3RpZnlDYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG5ld1dl
YlZpZXcsICJyZWFkeS10by1zaG93IiwgR19DQUxMQkFDSyh2aWV3UmVhZHlUb1Nob3dDYWxsYmFj
ayksIHRoaXMpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG5ld1dlYlZpZXcsICJjbG9zZSIs
IEdfQ0FMTEJBQ0sodmlld0Nsb3NlQ2FsbGJhY2spLCB0aGlzKTsKKworICAgICAgICByZXR1cm4g
bmV3V2ViVmlldzsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgdmlld1JlYWR5VG9TaG93KFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcpCisgICAgeworICAgICAgICBnX2Fzc2VydCh3ZWJWaWV3ICE9
IG1fd2ViVmlldyk7CisKKyAgICAgICAgV2ViS2l0V2luZG93UHJvcGVydGllcyogd2luZG93UHJv
cGVydGllcyA9IHdlYmtpdF93ZWJfdmlld19nZXRfd2luZG93X3Byb3BlcnRpZXMod2ViVmlldyk7
CisgICAgICAgIGdfYXNzZXJ0KHdpbmRvd1Byb3BlcnRpZXMpOworICAgICAgICBpZiAoIW1fd2lu
ZG93UHJvcGVydGllcy5pc051bGwoKSkKKyAgICAgICAgICAgIFdpbmRvd1Byb3BlcnRpZXMod2lu
ZG93UHJvcGVydGllcykuYXNzZXJ0RXF1YWwobV93aW5kb3dQcm9wZXJ0aWVzKTsKKworICAgICAg
ICBtX3dlYlZpZXdFdmVudHMuYXBwZW5kKFJlYWR5VG9TaG93KTsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgdmlld0Nsb3NlKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCisgICAgeworICAgICAg
ICBnX2Fzc2VydCh3ZWJWaWV3ICE9IG1fd2ViVmlldyk7CisKKyAgICAgICAgbV93ZWJWaWV3RXZl
bnRzLmFwcGVuZChDbG9zZSk7CisgICAgICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOworCisg
ICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7CisgICAgfQorCisgICAgVmVjdG9y
PFdlYlZpZXdFdmVudHM+IG1fd2ViVmlld0V2ZW50czsKKyAgICBXZWJLaXRTY3JpcHREaWFsb2dU
eXBlIG1fc2NyaXB0RGlhbG9nVHlwZTsKKyAgICBib29sIG1fc2NyaXB0RGlhbG9nQ29uZmlybWVk
OworICAgIGJvb2wgbV9hbGxvd1Blcm1pc3Npb25SZXF1ZXN0czsKKyAgICBXaW5kb3dQcm9wZXJ0
aWVzIG1fd2luZG93UHJvcGVydGllczsKKyAgICBIYXNoU2V0PFdURjo6U3RyaW5nPiBtX3dpbmRv
d1Byb3BlcnRpZXNDaGFuZ2VkOworICAgIEdSZWZQdHI8V2ViS2l0SGl0VGVzdFJlc3VsdD4gbV9t
b3VzZVRhcmdldEhpdFRlc3RSZXN1bHQ7CisgICAgdW5zaWduZWQgbV9tb3VzZVRhcmdldE1vZGlm
aWVyczsKK307CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3Q3JlYXRlUmVhZHlDbG9zZShVSUNs
aWVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwoIjxo
dG1sPjxib2R5IG9uTG9hZD1cIndpbmRvdy5vcGVuKCkuY2xvc2UoKTtcIj48L2h0bWw+IiwgMCk7
CisgICAgdGVzdC0+d2FpdFVudGlsTWFpbkxvb3BGaW5pc2hlcygpOworCisgICAgVmVjdG9yPFVJ
Q2xpZW50VGVzdDo6V2ViVmlld0V2ZW50cz4mIGV2ZW50cyA9IHRlc3QtPm1fd2ViVmlld0V2ZW50
czsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDMpOworICAgIGdfYXNz
ZXJ0X2NtcGludChldmVudHNbMF0sID09LCBVSUNsaWVudFRlc3Q6OkNyZWF0ZSk7CisgICAgZ19h
c3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIFVJQ2xpZW50VGVzdDo6UmVhZHlUb1Nob3cpOwor
ICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBVSUNsaWVudFRlc3Q6OkNsb3NlKTsK
K30KKworc3RhdGljIGdib29sZWFuIGNoZWNrTWltZVR5cGVGb3JGaWx0ZXIoR3RrRmlsZUZpbHRl
ciogZmlsdGVyLCBjb25zdCBnY2hhciogbWltZVR5cGUpCit7CisgICAgR3RrRmlsZUZpbHRlcklu
Zm8gZmlsdGVySW5mbzsKKyAgICBmaWx0ZXJJbmZvLmNvbnRhaW5zID0gR1RLX0ZJTEVfRklMVEVS
X01JTUVfVFlQRTsKKyAgICBmaWx0ZXJJbmZvLm1pbWVfdHlwZSA9IG1pbWVUeXBlOworICAgIHJl
dHVybiBndGtfZmlsZV9maWx0ZXJfZmlsdGVyKGZpbHRlciwgJmZpbHRlckluZm8pOworfQorCitj
bGFzcyBNb2RhbERpYWxvZ3NUZXN0OiBwdWJsaWMgVUlDbGllbnRUZXN0IHsKK3B1YmxpYzoKKyAg
ICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKE1vZGFsRGlhbG9nc1Rlc3QpOworCisgICAgc3RhdGlj
IHZvaWQgZGlhbG9nUnVuQXNNb2RhbENhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIE1v
ZGFsRGlhbG9nc1Rlc3QqIHRlc3QpCisgICAgeworICAgICAgICBnX2Fzc2VydCh3ZWJWaWV3ICE9
IHRlc3QtPm1fd2ViVmlldyk7CisgICAgICAgIHRlc3QtPm1fd2ViVmlld0V2ZW50cy5hcHBlbmQo
UnVuQXNNb2RhbCk7CisgICAgfQorCisgICAgR3RrV2lkZ2V0KiB2aWV3Q3JlYXRlKFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcpCisgICAgeworICAgICAgICBnX2Fzc2VydCh3ZWJWaWV3ID09IG1fd2Vi
Vmlldyk7CisKKyAgICAgICAgR3RrV2lkZ2V0KiBuZXdXZWJWaWV3ID0gVUlDbGllbnRUZXN0Ojp2
aWV3Q3JlYXRlKHdlYlZpZXcpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG5ld1dlYlZpZXcs
ICJydW4tYXMtbW9kYWwiLCBHX0NBTExCQUNLKGRpYWxvZ1J1bkFzTW9kYWxDYWxsYmFjayksIHRo
aXMpOworICAgICAgICByZXR1cm4gbmV3V2ViVmlldzsKKyAgICB9CisKKyAgICB2b2lkIHZpZXdS
ZWFkeVRvU2hvdyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQorICAgIHsKKyAgICAgICAgZ19hc3Nl
cnQod2ViVmlldyAhPSBtX3dlYlZpZXcpOworICAgICAgICBtX3dlYlZpZXdFdmVudHMuYXBwZW5k
KFJlYWR5VG9TaG93KTsKKyAgICB9Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0FsbG93
TW9kYWxEaWFsb2dzKE1vZGFsRGlhbG9nc1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7Cisg
ICAgV2ViS2l0U2V0dGluZ3MqIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5n
cyh0ZXN0LT5tX3dlYlZpZXcpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfYWxsb3dfbW9kYWxf
ZGlhbG9ncyhzZXR0aW5ncywgVFJVRSk7CisKKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJv
ZHkgb25sb2FkPVwid2luZG93LnNob3dNb2RhbERpYWxvZygnZGF0YTp0ZXh0L2h0bWwsPGh0bWw+
PGJvZHkvPjxzY3JpcHQ+d2luZG93LmNsb3NlKCk7PC9zY3JpcHQ+PC9odG1sPicpXCI+PC9ib2R5
PjwvaHRtbD4iLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxNYWluTG9vcEZpbmlzaGVzKCk7CisK
KyAgICBWZWN0b3I8VUlDbGllbnRUZXN0OjpXZWJWaWV3RXZlbnRzPiYgZXZlbnRzID0gdGVzdC0+
bV93ZWJWaWV3RXZlbnRzOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwg
NCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIFVJQ2xpZW50VGVzdDo6Q3Jl
YXRlKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgVUlDbGllbnRUZXN0OjpS
ZWFkeVRvU2hvdyk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIFVJQ2xpZW50
VGVzdDo6UnVuQXNNb2RhbCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1szXSwgPT0sIFVJ
Q2xpZW50VGVzdDo6Q2xvc2UpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0Rpc2FsbG93
TW9kYWxEaWFsb2dzKE1vZGFsRGlhbG9nc1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7Cisg
ICAgV2ViS2l0U2V0dGluZ3MqIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5n
cyh0ZXN0LT5tX3dlYlZpZXcpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfYWxsb3dfbW9kYWxf
ZGlhbG9ncyhzZXR0aW5ncywgRkFMU0UpOworCisgICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxi
b2R5IG9ubG9hZD1cIndpbmRvdy5zaG93TW9kYWxEaWFsb2coJ2RhdGE6dGV4dC9odG1sLDxodG1s
Pjxib2R5Lz48c2NyaXB0PndpbmRvdy5jbG9zZSgpOzwvc2NyaXB0PjwvaHRtbD4nKVwiPjwvYm9k
eT48L2h0bWw+IiwgMCk7CisgICAgLy8gV2UgbmVlZCB0byB1c2UgYSB0aW1lb3V0IGhlcmUgYmVj
YXVzZSB0aGUgdmlld0Nsb3NlKCkgZnVuY3Rpb24KKyAgICAvLyB3b24ndCBldmVyIGJlIGNhbGxl
ZCBhcyB0aGUgZGlhbG9nIHdvbid0IGJlIGNyZWF0ZWQuCisgICAgdGVzdC0+d2FpdCgxKTsKKwor
ICAgIFZlY3RvcjxVSUNsaWVudFRlc3Q6OldlYlZpZXdFdmVudHM+JiBldmVudHMgPSB0ZXN0LT5t
X3dlYlZpZXdFdmVudHM7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAw
KTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdKYXZhU2NyaXB0RGlhbG9ncyhVSUNsaWVu
dFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGh0
bWxPbkxvYWRGb3JtYXQgPSAiPGh0bWw+PGJvZHkgb25Mb2FkPVwiJXNcIj48L2JvZHk+PC9odG1s
PiI7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGpzQWxlcnRGb3JtYXQgPSAiYWxlcnQoJyVzJyki
OworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBqc0NvbmZpcm1Gb3JtYXQgPSAiZG8geyBjb25maXJt
ZWQgPSBjb25maXJtKCclcycpOyB9IHdoaWxlICghY29uZmlybWVkKTsgYWxlcnQoJ2NvbmZpcm1l
ZCcpOyI7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGpzUHJvbXB0Rm9ybWF0ID0gImFsZXJ0KHBy
b21wdCgnJXMnLCAnZGVmYXVsdCcpKTsiOworCisgICAgdGVzdC0+bV9zY3JpcHREaWFsb2dUeXBl
ID0gV0VCS0lUX1NDUklQVF9ESUFMT0dfQUxFUlQ7CisgICAgR093blB0cjxjaGFyPiBhbGVydERp
YWxvZ01lc3NhZ2UoZ19zdHJkdXBfcHJpbnRmKGpzQWxlcnRGb3JtYXQsIGtBbGVydERpYWxvZ01l
c3NhZ2UpKTsKKyAgICBHT3duUHRyPGNoYXI+IGFsZXJ0SFRNTChnX3N0cmR1cF9wcmludGYoaHRt
bE9uTG9hZEZvcm1hdCwgYWxlcnREaWFsb2dNZXNzYWdlLmdldCgpKSk7CisgICAgdGVzdC0+bG9h
ZEh0bWwoYWxlcnRIVE1MLmdldCgpLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxNYWluTG9vcEZp
bmlzaGVzKCk7CisKKyAgICB0ZXN0LT5tX3NjcmlwdERpYWxvZ1R5cGUgPSBXRUJLSVRfU0NSSVBU
X0RJQUxPR19DT05GSVJNOworICAgIEdPd25QdHI8Y2hhcj4gY29uZmlybURpYWxvZ01lc3NhZ2Uo
Z19zdHJkdXBfcHJpbnRmKGpzQ29uZmlybUZvcm1hdCwga0NvbmZpcm1EaWFsb2dNZXNzYWdlKSk7
CisgICAgR093blB0cjxjaGFyPiBjb25maXJtSFRNTChnX3N0cmR1cF9wcmludGYoaHRtbE9uTG9h
ZEZvcm1hdCwgY29uZmlybURpYWxvZ01lc3NhZ2UuZ2V0KCkpKTsKKyAgICB0ZXN0LT5sb2FkSHRt
bChjb25maXJtSFRNTC5nZXQoKSwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTWFpbkxvb3BGaW5p
c2hlcygpOworCisgICAgdGVzdC0+bV9zY3JpcHREaWFsb2dUeXBlID0gV0VCS0lUX1NDUklQVF9E
SUFMT0dfUFJPTVBUOworICAgIEdPd25QdHI8Y2hhcj4gcHJvbXB0RGlhbG9nTWVzc2FnZShnX3N0
cmR1cF9wcmludGYoanNQcm9tcHRGb3JtYXQsIGtQcm9tcHREaWFsb2dNZXNzYWdlKSk7CisgICAg
R093blB0cjxjaGFyPiBwcm9tcHRIVE1MKGdfc3RyZHVwX3ByaW50ZihodG1sT25Mb2FkRm9ybWF0
LCBwcm9tcHREaWFsb2dNZXNzYWdlLmdldCgpKSk7CisgICAgdGVzdC0+bG9hZEh0bWwocHJvbXB0
SFRNTC5nZXQoKSwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTWFpbkxvb3BGaW5pc2hlcygpOwor
fQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1dpbmRvd1Byb3BlcnRpZXMoVUlDbGllbnRUZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyKiB3aW5kb3dQ
cm9ycGVydGllc1N0cmluZyA9ICJsZWZ0PTEwMCx0b3A9MTUwLHdpZHRoPTQwMCxoZWlnaHQ9NDAw
LGxvY2F0aW9uPW5vLG1lbnViYXI9bm8sc3RhdHVzPW5vLHRvb2xiYXI9bm8sc2Nyb2xsYmFycz1u
byI7CisgICAgR2RrUmVjdGFuZ2xlIGdlb21ldHJ5ID0geyAxMDAsIDE1MCwgNDAwLCA0MDAgfTsK
KyAgICB0ZXN0LT5zZXRFeHBlY3RlZFdpbmRvd1Byb3BlcnRpZXMoVUlDbGllbnRUZXN0OjpXaW5k
b3dQcm9wZXJ0aWVzKCZnZW9tZXRyeSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNl
LCB0cnVlLCBmYWxzZSkpOworCisgICAgR093blB0cjxjaGFyPiBodG1sU3RyaW5nKGdfc3RyZHVw
X3ByaW50ZigiPGh0bWw+PGJvZHkgb25Mb2FkPVwid2luZG93Lm9wZW4oJycsICcnLCAnJXMnKS5j
bG9zZSgpO1wiPjwvYm9keT48L2h0bWw+Iiwgd2luZG93UHJvcnBlcnRpZXNTdHJpbmcpKTsKKyAg
ICB0ZXN0LT5sb2FkSHRtbChodG1sU3RyaW5nLmdldCgpLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50
aWxNYWluTG9vcEZpbmlzaGVzKCk7CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogcHJvcGVydGll
c0NoYW5nZWRbXSA9IHsKKyAgICAgICAgImdlb21ldHJ5IiwgImxvY2F0aW9uYmFyLXZpc2libGUi
LCAibWVudWJhci12aXNpYmxlIiwgInN0YXR1c2Jhci12aXNpYmxlIiwgInRvb2xiYXItdmlzaWJs
ZSIsICJzY3JvbGxiYXJzLXZpc2libGUiCisgICAgfTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IEdfTl9FTEVNRU5UUyhwcm9wZXJ0aWVzQ2hhbmdlZCk7ICsraSkKKyAgICAgICAgZ19hc3Nl
cnQodGVzdC0+bV93aW5kb3dQcm9wZXJ0aWVzQ2hhbmdlZC5jb250YWlucyhwcm9wZXJ0aWVzQ2hh
bmdlZFtpXSkpOworCisgICAgVmVjdG9yPFVJQ2xpZW50VGVzdDo6V2ViVmlld0V2ZW50cz4mIGV2
ZW50cyA9IHRlc3QtPm1fd2ViVmlld0V2ZW50czsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRz
LnNpemUoKSwgPT0sIDMpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBVSUNs
aWVudFRlc3Q6OkNyZWF0ZSk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIFVJ
Q2xpZW50VGVzdDo6UmVhZHlUb1Nob3cpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0s
ID09LCBVSUNsaWVudFRlc3Q6OkNsb3NlKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdN
b3VzZVRhcmdldChVSUNsaWVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVz
dC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKEdUS19XSU5ET1dfVE9QTEVWRUwpOwor
CisgICAgY29uc3QgY2hhciogbGlua3NIb3ZlcmVkSFRNTCA9CisgICAgICAgICI8aHRtbD48Ym9k
eT4iCisgICAgICAgICIgPGEgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRvcDox
JyBocmVmPSdodHRwOi8vd3d3LndlYmtpdGd0ay5vcmcnIHRpdGxlPSdXZWJLaXRHVEsrIFRpdGxl
Jz5XZWJLaXRHVEsrIFdlYnNpdGU8L2E+IgorICAgICAgICAiIDxpbWcgc3R5bGU9J3Bvc2l0aW9u
OmFic29sdXRlOyBsZWZ0OjE7IHRvcDoxMCcgc3JjPScweGRlYWRiZWVmJyB3aWR0aD01IGhlaWdo
dD01PjwvaW1nPiIKKyAgICAgICAgIiA8YSBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6
MTsgdG9wOjIwJyBocmVmPSdodHRwOi8vd3d3LndlYmtpdGd0ay5vcmcvbG9nbycgdGl0bGU9J1dl
YktpdEdUSysgTG9nbyc+PGltZyBzcmM9JzB4ZGVhZGJlZWYnIHdpZHRoPTUgaGVpZ2h0PTU+PC9p
bWc+PC9hPiIKKyAgICAgICAgIiA8aW5wdXQgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0
OjE7IHRvcDozMCcgc2l6ZT0nMTAnPjwvaW5wdXQ+IgorICAgICAgICAiIDxkaXYgc3R5bGU9J3Bv
c2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRvcDo1MDsgd2lkdGg6MzA7IGhlaWdodDozMDsgb3Zl
cmZsb3c6c2Nyb2xsJz4mbmJzcDs8L2Rpdj4iCisgICAgICAgICIgPHZpZGVvIHN0eWxlPSdwb3Np
dGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6MTAwJyB3aWR0aD0nMzAwJyBoZWlnaHQ9JzMwMCcg
Y29udHJvbHM9J2NvbnRyb2xzJyBwcmVsb2FkPSdub25lJz48c291cmNlIHNyYz0nbW92aWUub2dn
JyB0eXBlPSd2aWRlby9vZ2cnIC8+PC92aWRlbz4iCisgICAgICAgICI8L2JvZHk+PC9odG1sPiI7
CisKKyAgICB0ZXN0LT5sb2FkSHRtbChsaW5rc0hvdmVyZWRIVE1MLCAiZmlsZTovLy8iKTsKKyAg
ICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIC8vIE1vdmUgb3ZlciBsaW5r
LgorICAgIFdlYktpdEhpdFRlc3RSZXN1bHQqIGhpdFRlc3RSZXN1bHQgPSB0ZXN0LT5tb3ZlTW91
c2VBbmRXYWl0VW50aWxNb3VzZVRhcmdldENoYW5nZWQoMSwgMSk7CisgICAgZ19hc3NlcnQod2Vi
a2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xpbmsoaGl0VGVzdFJlc3VsdCkpOworICAg
IGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVz
dFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRf
aXNfbWVkaWEoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3Rf
cmVzdWx0X2NvbnRleHRfaXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0
X2NtcHN0cih3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9saW5rX3VyaShoaXRUZXN0UmVzdWx0
KSwgPT0sICJodHRwOi8vd3d3LndlYmtpdGd0ay5vcmcvIik7CisgICAgZ19hc3NlcnRfY21wc3Ry
KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2xpbmtfdGl0bGUoaGl0VGVzdFJlc3VsdCksID09
LCAiV2ViS2l0R1RLKyBUaXRsZSIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfaGl0X3Rl
c3RfcmVzdWx0X2dldF9saW5rX2xhYmVsKGhpdFRlc3RSZXN1bHQpLCA9PSwgIldlYktpdEdUSysg
V2Vic2l0ZSIpOworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX21vdXNlVGFyZ2V0TW9kaWZpZXJzKTsK
KworICAgIC8vIE1vdmUgb3V0IG9mIHRoZSBsaW5rLgorICAgIGhpdFRlc3RSZXN1bHQgPSB0ZXN0
LT5tb3ZlTW91c2VBbmRXYWl0VW50aWxNb3VzZVRhcmdldENoYW5nZWQoMCwgMCk7CisgICAgZ19h
c3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RSZXN1
bHQpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2lt
YWdlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3Vs
dF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0
X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKKyAg
ICBnX2Fzc2VydCghdGVzdC0+bV9tb3VzZVRhcmdldE1vZGlmaWVycyk7CisKKyAgICAvLyBNb3Zl
IG92ZXIgaW1hZ2Ugd2l0aCBHREtfQ09OVFJPTF9NQVNLLgorICAgIGhpdFRlc3RSZXN1bHQgPSB0
ZXN0LT5tb3ZlTW91c2VBbmRXYWl0VW50aWxNb3VzZVRhcmdldENoYW5nZWQoMSwgMTAsIEdES19D
T05UUk9MX01BU0spOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRl
eHRfaXNfbGluayhoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQod2Via2l0X2hpdF90ZXN0
X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCgh
d2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQpKTsK
KyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRhYmxl
KGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9j
b250ZXh0X2lzX3Njcm9sbGJhcihoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnRfY21wc3Ry
KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2ltYWdlX3VyaShoaXRUZXN0UmVzdWx0KSwgPT0s
ICJmaWxlOi8vLzB4ZGVhZGJlZWYiKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX21vdXNlVGFyZ2V0
TW9kaWZpZXJzICYgR0RLX0NPTlRST0xfTUFTSyk7CisKKyAgICAvLyBNb3ZlIG92ZXIgaW1hZ2Ug
bGluay4KKyAgICBoaXRUZXN0UmVzdWx0ID0gdGVzdC0+bW92ZU1vdXNlQW5kV2FpdFVudGlsTW91
c2VUYXJnZXRDaGFuZ2VkKDEsIDIwKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVz
dWx0X2NvbnRleHRfaXNfbGluayhoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQod2Via2l0
X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBn
X2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RS
ZXN1bHQpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lz
X2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0
X3Jlc3VsdF9jb250ZXh0X2lzX3Njcm9sbGJhcihoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2xpbmtfdXJpKGhpdFRlc3RSZXN1
bHQpLCA9PSwgImh0dHA6Ly93d3cud2Via2l0Z3RrLm9yZy9sb2dvIik7CisgICAgZ19hc3NlcnRf
Y21wc3RyKHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2ltYWdlX3VyaShoaXRUZXN0UmVzdWx0
KSwgPT0sICJmaWxlOi8vLzB4ZGVhZGJlZWYiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0
X2hpdF90ZXN0X3Jlc3VsdF9nZXRfbGlua190aXRsZShoaXRUZXN0UmVzdWx0KSwgPT0sICJXZWJL
aXRHVEsrIExvZ28iKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRf
bGlua19sYWJlbChoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQoIXRlc3QtPm1fbW91c2VU
YXJnZXRNb2RpZmllcnMpOworCisgICAgLy8gTW92ZSBvdmVyIG1lZGlhLgorICAgIGhpdFRlc3RS
ZXN1bHQgPSB0ZXN0LT5tb3ZlTW91c2VBbmRXYWl0VW50aWxNb3VzZVRhcmdldENoYW5nZWQoMSwg
MTAwKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xp
bmsoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0
X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9o
aXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19h
c3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0
UmVzdWx0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9p
c19zY3JvbGxiYXIoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRf
aGl0X3Rlc3RfcmVzdWx0X2dldF9tZWRpYV91cmkoaGl0VGVzdFJlc3VsdCksID09LCAiZmlsZTov
Ly9tb3ZpZS5vZ2ciKTsKKyAgICBnX2Fzc2VydCghdGVzdC0+bV9tb3VzZVRhcmdldE1vZGlmaWVy
cyk7CisKKyAgICAvLyBNb3ZlciBvdmVyIGlucHV0LgorICAgIGhpdFRlc3RSZXN1bHQgPSB0ZXN0
LT5tb3ZlTW91c2VBbmRXYWl0VW50aWxNb3VzZVRhcmdldENoYW5nZWQoNSwgMzUpOworICAgIGdf
YXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluayhoaXRUZXN0UmVz
dWx0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19p
bWFnZShoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1
bHRfY29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtp
dF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19zY3JvbGxiYXIoaGl0VGVzdFJlc3VsdCkpOwor
ICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19lZGl0YWJsZSho
aXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQoIXRlc3QtPm1fbW91c2VUYXJnZXRNb2RpZmll
cnMpOworCisgICAgLy8gTW92ZSBvdmVyIHNjcm9sbGJhci4KKyAgICBoaXRUZXN0UmVzdWx0ID0g
dGVzdC0+bW92ZU1vdXNlQW5kV2FpdFVudGlsTW91c2VUYXJnZXRDaGFuZ2VkKDUsIDc1KTsKKyAg
ICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xpbmsoaGl0VGVz
dFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRf
aXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3Rf
cmVzdWx0X2NvbnRleHRfaXNfbWVkaWEoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF3
ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkp
OworICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19zY3JvbGxi
YXIoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX21vdXNlVGFyZ2V0TW9k
aWZpZXJzKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdQZXJtaXNzaW9uUmVxdWVzdHMo
VUlDbGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIC8vIFNvbWUgdmVyc2lv
bnMgb2YgZ2VvY2x1ZSBnaXZlIGEgcnVudGltZSB3YXJuaW5nIGJlY2F1c2UgaXQgdHJpZXMKKyAg
ICAvLyB0byByZWdpc3RlciB0aGUgZXJyb3IgcXVhcmsgdHdpY2UuIFNlZSBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODk4NTguCisgICAgLy8gTWFrZSB3YXJuaW5ncyBu
b24tZmF0YWwgZm9yIHRoaXMgdGVzdCB0byBtYWtlIGl0IHBhc3MuCisgICAgdGVzdC0+cmVtb3Zl
TG9nRmF0YWxGbGFnKEdfTE9HX0xFVkVMX1dBUk5JTkcpOworICAgIHRlc3QtPnNob3dJbldpbmRv
d0FuZFdhaXRVbnRpbE1hcHBlZCgpOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBnZW9sb2NhdGlv
blJlcXVlc3RIVE1MID0KKyAgICAgICAgIjxodG1sPiIKKyAgICAgICAgIiAgPHNjcmlwdD4iCisg
ICAgICAgICIgIGZ1bmN0aW9uIHJ1blRlc3QoKSIKKyAgICAgICAgIiAgeyIKKyAgICAgICAgIiAg
ICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGZ1bmN0aW9uKHApIHsg
ZG9jdW1lbnQudGl0bGUgPSBcIk9LXCIgfSwiCisgICAgICAgICIgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihlKSB7IGRvY3VtZW50LnRpdGxlID0g
ZS5jb2RlIH0pOyIKKyAgICAgICAgIiAgfSIKKyAgICAgICAgIiAgPC9zY3JpcHQ+IgorICAgICAg
ICAiICA8Ym9keSBvbmxvYWQ9J3J1blRlc3QoKTsnPjwvYm9keT4iCisgICAgICAgICI8L2h0bWw+
IjsKKworICAgIC8vIFRlc3QgZGVueWluZyBhIHBlcm1pc3Npb24gcmVxdWVzdC4KKyAgICB0ZXN0
LT5tX2FsbG93UGVybWlzc2lvblJlcXVlc3RzID0gZmFsc2U7CisgICAgdGVzdC0+bG9hZEh0bWwo
Z2VvbG9jYXRpb25SZXF1ZXN0SFRNTCwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsVGl0bGVDaGFu
Z2VkKCk7CisKKyAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIEdlb2xvY2F0aW9uIEFQSSBzcGVjaWZp
Y2F0aW9uLCAnMScgaXMgdGhlCisgICAgLy8gZXJyb3IgY29kZSByZXR1cm5lZCBmb3IgdGhlIFBF
Uk1JU1NJT05fREVOSUVEIGVycm9yLgorICAgIC8vIGh0dHA6Ly9kZXYudzMub3JnL2dlby9hcGkv
c3BlYy1zb3VyY2UuaHRtbCNwb3NpdGlvbl9lcnJvcl9pbnRlcmZhY2UKKyAgICBjb25zdCBnY2hh
ciogcmVzdWx0ID0gd2Via2l0X3dlYl92aWV3X2dldF90aXRsZSh0ZXN0LT5tX3dlYlZpZXcpOwor
ICAgIGdfYXNzZXJ0X2NtcHN0cihyZXN1bHQsID09LCAiMSIpOworCisgICAgLy8gVGVzdCBhbGxv
d2luZyBhIHBlcm1pc3Npb24gcmVxdWVzdC4KKyAgICB0ZXN0LT5tX2FsbG93UGVybWlzc2lvblJl
cXVlc3RzID0gdHJ1ZTsKKyAgICB0ZXN0LT5sb2FkSHRtbChnZW9sb2NhdGlvblJlcXVlc3RIVE1M
LCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxUaXRsZUNoYW5nZWQoKTsKKworICAgIC8vIENoZWNr
IHRoYXQgd2UgZGlkIG5vdCBnZXQgdGhlIFBFUk1JU1NJT05fREVOSUVEIGVycm9yIG5vdy4KKyAg
ICByZXN1bHQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3RpdGxlKHRlc3QtPm1fd2ViVmlldyk7Cisg
ICAgZ19hc3NlcnRfY21wc3RyKHJlc3VsdCwgIT0sICIxIik7CisgICAgdGVzdC0+YWRkTG9nRmF0
YWxGbGFnKEdfTE9HX0xFVkVMX1dBUk5JTkcpOworfQorCitjbGFzcyBGaWxlQ2hvb3NlclRlc3Q6
IHB1YmxpYyBVSUNsaWVudFRlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRV
UkUoRmlsZUNob29zZXJUZXN0KTsKKworICAgIEZpbGVDaG9vc2VyVGVzdCgpCisgICAgeworICAg
ICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgInJ1bi1maWxlLWNob29zZXIiLCBHX0NB
TExCQUNLKHJ1bkZpbGVDaG9vc2VyQ2FsbGJhY2spLCB0aGlzKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgZ2Jvb2xlYW4gcnVuRmlsZUNob29zZXJDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiwgV2ViS2l0
RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0LCBGaWxlQ2hvb3NlclRlc3QqIHRlc3QpCisgICAg
eworICAgICAgICB0ZXN0LT5ydW5GaWxlQ2hvb3NlcihyZXF1ZXN0KTsKKyAgICAgICAgcmV0dXJu
IFRSVUU7CisgICAgfQorCisgICAgdm9pZCBydW5GaWxlQ2hvb3NlcihXZWJLaXRGaWxlQ2hvb3Nl
clJlcXVlc3QqIHJlcXVlc3QpCisgICAgeworICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRX
aGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHJlcXVlc3QpKTsKKyAgICAgICAgbV9maWxlQ2hvb3Nl
clJlcXVlc3QgPSByZXF1ZXN0OworICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3Ap
OworICAgIH0KKworICAgIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogY2xpY2tNb3VzZUJ1dHRv
bkFuZFdhaXRGb3JGaWxlQ2hvb3NlclJlcXVlc3QoaW50IHgsIGludCB5KQorICAgIHsKKyAgICAg
ICAgY2xpY2tNb3VzZUJ1dHRvbih4LCB5KTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFp
bkxvb3ApOworICAgICAgICByZXR1cm4gbV9maWxlQ2hvb3NlclJlcXVlc3QuZ2V0KCk7CisgICAg
fQorCitwcml2YXRlOgorICAgIEdSZWZQdHI8V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0PiBtX2Zp
bGVDaG9vc2VyUmVxdWVzdDsKK307CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3RmlsZUNob29z
ZXJSZXF1ZXN0KEZpbGVDaG9vc2VyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0
ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKKyAgICBzdGF0aWMgY29uc3Qg
Y2hhciogZmlsZUNob29zZXJIVE1MRm9ybWF0ID0gIjxodG1sPjxib2R5PjxpbnB1dCBzdHlsZT0n
cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDowO21hcmdpbjowO3BhZGRpbmc6MCcgdHlwZT0n
ZmlsZScgJXMvPjwvYm9keT48L2h0bWw+IjsKKworICAgIC8vIE11bHRpcGxlIHNlbGVjdGlvbnMg
bm90IGFsbG93ZWQsIG5vIE1JTUUgZmlsdGVyaW5nLgorICAgIEdPd25QdHI8Y2hhcj4gc2ltcGxl
RmlsZVVwbG9hZEhUTUwoZ19zdHJkdXBfcHJpbnRmKGZpbGVDaG9vc2VySFRNTEZvcm1hdCwgIiIp
KTsKKyAgICB0ZXN0LT5sb2FkSHRtbChzaW1wbGVGaWxlVXBsb2FkSFRNTC5nZXQoKSwgMCk7Cisg
ICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgV2ViS2l0RmlsZUNob29zZXJS
ZXF1ZXN0KiBmaWxlQ2hvb3NlclJlcXVlc3QgPSB0ZXN0LT5jbGlja01vdXNlQnV0dG9uQW5kV2Fp
dEZvckZpbGVDaG9vc2VyUmVxdWVzdCg1LCA1KTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2ZpbGVf
Y2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RfbXVsdGlwbGUoZmlsZUNob29zZXJSZXF1ZXN0KSk7
CisKKyAgICBjb25zdCBnY2hhciogY29uc3QqIG1pbWVUeXBlcyA9IHdlYmtpdF9maWxlX2Nob29z
ZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcyhmaWxlQ2hvb3NlclJlcXVlc3QpOworICAgIGdfYXNz
ZXJ0KCFtaW1lVHlwZXMpOworICAgIEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciA9IHdlYmtpdF9maWxl
X2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIoZmlsZUNob29zZXJSZXF1ZXN0
KTsKKyAgICBnX2Fzc2VydCghZmlsdGVyKTsKKyAgICBjb25zdCBnY2hhciogY29uc3QqIHNlbGVj
dGVkRmlsZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVz
KGZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIXNlbGVjdGVkRmlsZXMpOworICAg
IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9jYW5jZWwoZmlsZUNob29zZXJSZXF1ZXN0KTsK
KworICAgIC8vIE11bHRpcGxlIHNlbGVjdGlvbnMgYWxsb3dlZCwgbm8gTUlNRSBmaWx0ZXJpbmcs
IHNvbWUgcHJlLXNlbGVjdGVkIGZpbGVzLgorICAgIEdPd25QdHI8Y2hhcj4gbXVsdGlwbGVTZWxl
Y3Rpb25GaWxlVXBsb2FkSFRNTChnX3N0cmR1cF9wcmludGYoZmlsZUNob29zZXJIVE1MRm9ybWF0
LCAibXVsdGlwbGUiKSk7CisgICAgdGVzdC0+bG9hZEh0bWwobXVsdGlwbGVTZWxlY3Rpb25GaWxl
VXBsb2FkSFRNTC5nZXQoKSwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7
CisgICAgZmlsZUNob29zZXJSZXF1ZXN0ID0gdGVzdC0+Y2xpY2tNb3VzZUJ1dHRvbkFuZFdhaXRG
b3JGaWxlQ2hvb3NlclJlcXVlc3QoNSwgNSk7CisgICAgZ19hc3NlcnQod2Via2l0X2ZpbGVfY2hv
b3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RfbXVsdGlwbGUoZmlsZUNob29zZXJSZXF1ZXN0KSk7CisK
KyAgICBtaW1lVHlwZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlw
ZXMoZmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghbWltZVR5cGVzKTsKKyAgICBm
aWx0ZXIgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVy
KGZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIWZpbHRlcik7CisgICAgc2VsZWN0
ZWRGaWxlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMo
ZmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxlcyk7CisKKyAg
ICAvLyBTZWxlY3Qgc29tZSBmaWxlcy4KKyAgICBjb25zdCBnY2hhciogZmlsZXNUb1NlbGVjdFs0
XSA9IHsgIi9mb28iLCAiL2Zvby9iYXIiLCAiL2Zvby9iYXIvYmF6IiwgMCB9OworICAgIHdlYmtp
dF9maWxlX2Nob29zZXJfcmVxdWVzdF9zZWxlY3RfZmlsZXMoZmlsZUNob29zZXJSZXF1ZXN0LCBm
aWxlc1RvU2VsZWN0KTsKKworICAgIC8vIENoZWNrIHRoZSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBq
dXN0IHNlbGVjdGVkLgorICAgIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3Jl
cXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3Nl
cnQoc2VsZWN0ZWRGaWxlcyk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMF0s
ID09LCAiL2ZvbyIpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzFdLCA9PSwg
Ii9mb28vYmFyIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMl0sID09LCAi
L2Zvby9iYXIvYmF6Iik7CisgICAgZ19hc3NlcnQoIXNlbGVjdGVkRmlsZXNbM10pOworCisgICAg
Ly8gUGVyZm9ybSBhbm90aGVyIHJlcXVlc3QgdG8gY2hlY2sgaWYgdGhlIGxpc3Qgb2YgZmlsZXMg
c2VsZWN0ZWQKKyAgICAvLyBpbiB0aGUgcHJldmlvdXMgc3RlcCBhcHBlYXJzIG5vdyBhcyBwYXJ0
IG9mIHRoZSBuZXcgcmVxdWVzdC4KKyAgICBmaWxlQ2hvb3NlclJlcXVlc3QgPSB0ZXN0LT5jbGlj
a01vdXNlQnV0dG9uQW5kV2FpdEZvckZpbGVDaG9vc2VyUmVxdWVzdCg1LCA1KTsKKyAgICBzZWxl
Y3RlZEZpbGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxl
cyhmaWxlQ2hvb3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0KHNlbGVjdGVkRmlsZXMpOworICAg
IGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzBdLCA9PSwgIi9mb28iKTsKKyAgICBnX2Fz
c2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1sxXSwgPT0sICIvZm9vL2JhciIpOworICAgIGdfYXNz
ZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzJdLCA9PSwgIi9mb28vYmFyL2JheiIpOworICAgIGdf
YXNzZXJ0KCFzZWxlY3RlZEZpbGVzWzNdKTsKKyAgICB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVl
c3RfY2FuY2VsKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisKKyAgICAvLyBNdWx0aXBsZSBzZWxlY3Rp
b25zIG5vdCBhbGxvd2VkLCBvbmx5IGFjY2VwdCBpbWFnZXMsIGF1ZGlvIGFuZCB2aWRlbyBmaWxl
cy4uCisgICAgR093blB0cjxjaGFyPiBtaW1lRmlsdGVyZWRGaWxlVXBsb2FkSFRNTChnX3N0cmR1
cF9wcmludGYoZmlsZUNob29zZXJIVE1MRm9ybWF0LCAiYWNjZXB0PSdhdWRpby8qLHZpZGVvLyos
aW1hZ2UvKiciKSk7CisgICAgdGVzdC0+bG9hZEh0bWwobWltZUZpbHRlcmVkRmlsZVVwbG9hZEhU
TUwuZ2V0KCksIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIGZp
bGVDaG9vc2VyUmVxdWVzdCA9IHRlc3QtPmNsaWNrTW91c2VCdXR0b25BbmRXYWl0Rm9yRmlsZUNo
b29zZXJSZXF1ZXN0KDUsIDUpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfZmlsZV9jaG9vc2VyX3Jl
cXVlc3RfZ2V0X3NlbGVjdF9tdWx0aXBsZShmaWxlQ2hvb3NlclJlcXVlc3QpKTsKKworICAgIG1p
bWVUeXBlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcyhmaWxl
Q2hvb3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0KG1pbWVUeXBlcyk7CisgICAgZ19hc3NlcnRf
Y21wc3RyKG1pbWVUeXBlc1swXSwgPT0sICJhdWRpby8qIik7CisgICAgZ19hc3NlcnRfY21wc3Ry
KG1pbWVUeXBlc1sxXSwgPT0sICJ2aWRlby8qIik7CisgICAgZ19hc3NlcnRfY21wc3RyKG1pbWVU
eXBlc1syXSwgPT0sICJpbWFnZS8qIik7CisgICAgZ19hc3NlcnQoIW1pbWVUeXBlc1szXSk7CisK
KyAgICBmaWx0ZXIgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNf
ZmlsdGVyKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQoR1RLX0lTX0ZJTEVfRklM
VEVSKGZpbHRlcikpOworICAgIGdfYXNzZXJ0KGNoZWNrTWltZVR5cGVGb3JGaWx0ZXIoZmlsdGVy
LCAiYXVkaW8vKiIpKTsKKyAgICBnX2Fzc2VydChjaGVja01pbWVUeXBlRm9yRmlsdGVyKGZpbHRl
ciwgInZpZGVvLyoiKSk7CisgICAgZ19hc3NlcnQoY2hlY2tNaW1lVHlwZUZvckZpbHRlcihmaWx0
ZXIsICJpbWFnZS8qIikpOworCisgICAgc2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9maWxlX2Nob29z
ZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMoZmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBn
X2Fzc2VydCghc2VsZWN0ZWRGaWxlcyk7CisgICAgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X2NhbmNlbChmaWxlQ2hvb3NlclJlcXVlc3QpOworfQorCit2b2lkIGJlZm9yZUFsbCgpCit7Cisg
ICAgVUlDbGllbnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiY3JlYXRlLXJlYWR5LWNsb3Nl
IiwgdGVzdFdlYlZpZXdDcmVhdGVSZWFkeUNsb3NlKTsKKyAgICBNb2RhbERpYWxvZ3NUZXN0Ojph
ZGQoIldlYktpdFdlYlZpZXciLCAiYWxsb3ctbW9kYWwtZGlhbG9ncyIsIHRlc3RXZWJWaWV3QWxs
b3dNb2RhbERpYWxvZ3MpOworICAgIE1vZGFsRGlhbG9nc1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmll
dyIsICJkaXNhbGxvdy1tb2RhbC1kaWFsb2dzIiwgdGVzdFdlYlZpZXdEaXNhbGxvd01vZGFsRGlh
bG9ncyk7CisgICAgVUlDbGllbnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiamF2YXNjcmlw
dC1kaWFsb2dzIiwgdGVzdFdlYlZpZXdKYXZhU2NyaXB0RGlhbG9ncyk7CisgICAgVUlDbGllbnRU
ZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAid2luZG93LXByb3BlcnRpZXMiLCB0ZXN0V2ViVmll
d1dpbmRvd1Byb3BlcnRpZXMpOworICAgIFVJQ2xpZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3
IiwgIm1vdXNlLXRhcmdldCIsIHRlc3RXZWJWaWV3TW91c2VUYXJnZXQpOworICAgIFVJQ2xpZW50
VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInBlcm1pc3Npb24tcmVxdWVzdHMiLCB0ZXN0V2Vi
Vmlld1Blcm1pc3Npb25SZXF1ZXN0cyk7CisgICAgRmlsZUNob29zZXJUZXN0OjphZGQoIldlYktp
dFdlYlZpZXciLCAiZmlsZS1jaG9vc2VyLXJlcXVlc3QiLCB0ZXN0V2ViVmlld0ZpbGVDaG9vc2Vy
UmVxdWVzdCk7Cit9CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworfQpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJFeHRlbnNpb25zLmNwcCBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViRXh0ZW5zaW9ucy5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYjAzYzlkY2FkNWEzN2RhZWE0MGI3YmFkMjM5YmMzYTc1ZWE3MWI4OQotLS0g
L2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0
V2ViRXh0ZW5zaW9ucy5jcHAKQEAgLTAsMCArMSwxOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIldlYktp
dFRlc3RCdXMuaCIKKyNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgorI2luY2x1ZGUgPHd0Zi9nb2Jq
ZWN0L0dSZWZQdHIuaD4KKworc3RhdGljIFdlYktpdFRlc3RCdXMqIGJ1czsKKworc3RhdGljIHZv
aWQgdGVzdFdlYkV4dGVuc2lvbkdldFRpdGxlKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2lu
dGVyKQoreworICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48aGVhZD48dGl0bGU+V2ViS2l0R1RL
KyBXZWIgRXh0ZW5zaW9ucyBUZXN0PC90aXRsZT48L2hlYWQ+PGJvZHk+PC9ib2R5PjwvaHRtbD4i
LCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIEdSZWZQdHI8
R0RCdXNQcm94eT4gcHJveHkgPSBhZG9wdEdSZWYoYnVzLT5jcmVhdGVQcm94eSgib3JnLndlYmtp
dC5ndGsuV2ViRXh0ZW5zaW9uVGVzdCIsCisgICAgICAgICIvb3JnL3dlYmtpdC9ndGsvV2ViRXh0
ZW5zaW9uVGVzdCIgLCAib3JnLndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9uVGVzdCIsIHRlc3QtPm1f
bWFpbkxvb3ApKTsKKyAgICBHUmVmUHRyPEdWYXJpYW50PiByZXN1bHQgPSBhZG9wdEdSZWYoZ19k
YnVzX3Byb3h5X2NhbGxfc3luYygKKyAgICAgICAgcHJveHkuZ2V0KCksCisgICAgICAgICJHZXRU
aXRsZSIsCisgICAgICAgIGdfdmFyaWFudF9uZXcoIih0KSIsIHdlYmtpdF93ZWJfdmlld19nZXRf
cGFnZV9pZCh0ZXN0LT5tX3dlYlZpZXcpKSwKKyAgICAgICAgR19EQlVTX0NBTExfRkxBR1NfTk9O
RSwKKyAgICAgICAgLTEsIDAsIDApKTsKKyAgICBnX2Fzc2VydChyZXN1bHQpOworCisgICAgY29u
c3QgY2hhciogdGl0bGU7CisgICAgZ192YXJpYW50X2dldChyZXN1bHQuZ2V0KCksICIoJnMpIiwg
JnRpdGxlKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGl0bGUsID09LCAiV2ViS2l0R1RLKyBXZWIg
RXh0ZW5zaW9ucyBUZXN0Iik7Cit9CisKK3N0YXRpYyB2b2lkIGRvY3VtZW50TG9hZGVkQ2FsbGJh
Y2soR0RCdXNDb25uZWN0aW9uKiwgY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBjb25zdCBjaGFy
KiwgY29uc3QgY2hhciosIEdWYXJpYW50KiwgV2ViVmlld1Rlc3QqIHRlc3QpCit7CisgICAgZ19t
YWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKK30KKworc3RhdGljIHZvaWQgdGVzdERv
Y3VtZW50TG9hZGVkU2lnbmFsKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQorewor
ICAgIEdSZWZQdHI8R0RCdXNQcm94eT4gcHJveHkgPSBhZG9wdEdSZWYoYnVzLT5jcmVhdGVQcm94
eSgib3JnLndlYmtpdC5ndGsuV2ViRXh0ZW5zaW9uVGVzdCIsCisgICAgICAgICIvb3JnL3dlYmtp
dC9ndGsvV2ViRXh0ZW5zaW9uVGVzdCIsICJvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0
IiwgdGVzdC0+bV9tYWluTG9vcCkpOworICAgIEdEQnVzQ29ubmVjdGlvbiogY29ubmVjdGlvbiA9
IGdfZGJ1c19wcm94eV9nZXRfY29ubmVjdGlvbihwcm94eS5nZXQoKSk7CisgICAgZ3VpbnQgaWQg
PSBnX2RidXNfY29ubmVjdGlvbl9zaWduYWxfc3Vic2NyaWJlKGNvbm5lY3Rpb24sCisgICAgICAg
IDAsCisgICAgICAgICJvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwKKyAgICAgICAg
IkRvY3VtZW50TG9hZGVkIiwKKyAgICAgICAgIi9vcmcvd2Via2l0L2d0ay9XZWJFeHRlbnNpb25U
ZXN0IiwKKyAgICAgICAgMCwKKyAgICAgICAgR19EQlVTX1NJR05BTF9GTEFHU19OT05FLAorICAg
ICAgICByZWludGVycHJldF9jYXN0PEdEQnVzU2lnbmFsQ2FsbGJhY2s+KGRvY3VtZW50TG9hZGVk
Q2FsbGJhY2spLAorICAgICAgICB0ZXN0LAorICAgICAgICAwKTsKKyAgICBnX2Fzc2VydChpZCk7
CisKKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGhlYWQ+PHRpdGxlPldlYktpdEdUSysgV2Vi
IEV4dGVuc2lvbnMgVGVzdDwvdGl0bGU+PC9oZWFkPjxib2R5PjwvYm9keT48L2h0bWw+IiwgMCk7
CisgICAgZ19tYWluX2xvb3BfcnVuKHRlc3QtPm1fbWFpbkxvb3ApOworICAgIGdfZGJ1c19jb25u
ZWN0aW9uX3NpZ25hbF91bnN1YnNjcmliZShjb25uZWN0aW9uLCBpZCk7Cit9CisKK3N0YXRpYyBn
Ym9vbGVhbiB3ZWJQcm9jZXNzQ3Jhc2hlZENhbGxiYWNrKFdlYktpdFdlYlZpZXcqLCBXZWJWaWV3
VGVzdCogdGVzdCkKK3sKKyAgICB0ZXN0LT5xdWl0TWFpbkxvb3AoKTsKKworICAgIHJldHVybiBG
QUxTRTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYktpdFdlYlZpZXdQcm9jZXNzQ3Jhc2hlZChX
ZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbCgi
PGh0bWw+PC9odG1sPiIsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwor
CisgICAgZ19zaWduYWxfY29ubmVjdCh0ZXN0LT5tX3dlYlZpZXcsICJ3ZWItcHJvY2Vzcy1jcmFz
aGVkIiwKKyAgICAgICAgR19DQUxMQkFDSyh3ZWJQcm9jZXNzQ3Jhc2hlZENhbGxiYWNrKSwgdGVz
dCk7CisKKyAgICBHUmVmUHRyPEdEQnVzUHJveHk+IHByb3h5ID0gYWRvcHRHUmVmKGJ1cy0+Y3Jl
YXRlUHJveHkoIm9yZy53ZWJraXQuZ3RrLldlYkV4dGVuc2lvblRlc3QiLAorICAgICAgICAiL29y
Zy93ZWJraXQvZ3RrL1dlYkV4dGVuc2lvblRlc3QiLCAib3JnLndlYmtpdC5ndGsuV2ViRXh0ZW5z
aW9uVGVzdCIsIHRlc3QtPm1fbWFpbkxvb3ApKTsKKworICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHJl
c3VsdCA9IGFkb3B0R1JlZihnX2RidXNfcHJveHlfY2FsbF9zeW5jKAorICAgICAgICBwcm94eS5n
ZXQoKSwKKyAgICAgICAgIkFib3J0UHJvY2VzcyIsCisgICAgICAgIDAsCisgICAgICAgIEdfREJV
U19DQUxMX0ZMQUdTX05PTkUsCisgICAgICAgIC0xLCAwLCAwKSk7CisgICAgZ19hc3NlcnQoIXJl
c3VsdCk7CisgICAgZ19tYWluX2xvb3BfcnVuKHRlc3QtPm1fbWFpbkxvb3ApOworfQorCitzdGF0
aWMgdm9pZCB0ZXN0V2ViRXh0ZW5zaW9uV2luZG93T2JqZWN0Q2xlYXJlZChXZWJWaWV3VGVzdCog
dGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGhlYWRl
cj48L2hlYWRlcj48Ym9keT48L2JvZHk+PC9odG1sPiIsIDApOworICAgIHRlc3QtPndhaXRVbnRp
bExvYWRGaW5pc2hlZCgpOworCisgICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAgIFdlYktp
dEphdmFzY3JpcHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0
QW5kV2FpdFVudGlsRmluaXNoZWQoIndpbmRvdy5lY2hvKCdGb28nKTsiLCAmZXJyb3Iub3V0UHRy
KCkpOworICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KCFlcnJv
ci5nZXQoKSk7CisgICAgR093blB0cjxjaGFyPiB2YWx1ZVN0cmluZyhXZWJWaWV3VGVzdDo6amF2
YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7CisgICAgZ19hc3NlcnRf
Y21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgIkZvbyIpOworfQorCitzdGF0aWMgZ2Jvb2xl
YW4gc2NyaXB0RGlhbG9nQ2FsbGJhY2soV2ViS2l0V2ViVmlldyosIFdlYktpdFNjcmlwdERpYWxv
ZyogZGlhbG9nLCBjaGFyKiogcmVzdWx0KQoreworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0
X3NjcmlwdF9kaWFsb2dfZ2V0X2RpYWxvZ190eXBlKGRpYWxvZyksID09LCBXRUJLSVRfU0NSSVBU
X0RJQUxPR19BTEVSVCk7CisgICAgZ19hc3NlcnQoISpyZXN1bHQpOworICAgICpyZXN1bHQgPSBn
X3N0cmR1cCh3ZWJraXRfc2NyaXB0X2RpYWxvZ19nZXRfbWVzc2FnZShkaWFsb2cpKTsKKyAgICBy
ZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQgcnVuSmF2YVNjcmlwdEluSXNvbGF0ZWRXb3Js
ZEZpbmlzaGVkQ2FsbGJhY2soR0RCdXNQcm94eSogcHJveHksIEdBc3luY1Jlc3VsdCogcmVzdWx0
LCBXZWJWaWV3VGVzdCogdGVzdCkKK3sKKyAgICBnX2RidXNfcHJveHlfY2FsbF9maW5pc2gocHJv
eHksIHJlc3VsdCwgMCk7CisgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsK
K30KKworc3RhdGljIHZvaWQgdGVzdFdlYkV4dGVuc2lvbklzb2xhdGVkV29ybGQoV2ViVmlld1Rl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjxo
ZWFkZXI+PC9oZWFkZXI+PGJvZHk+PGRpdiBpZD0nY29uc29sZSc+PC9kaXY+PC9ib2R5PjwvaHRt
bD4iLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIEdPd25Q
dHI8Y2hhcj4gcmVzdWx0OworICAgIGd1bG9uZyBzY3JpcHREaWFsb2dJRCA9IGdfc2lnbmFsX2Nv
bm5lY3QodGVzdC0+bV93ZWJWaWV3LCAic2NyaXB0LWRpYWxvZyIsIEdfQ0FMTEJBQ0soc2NyaXB0
RGlhbG9nQ2FsbGJhY2spLCAmcmVzdWx0Lm91dFB0cigpKTsKKworICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBtYWluV29ybGRTY3JpcHQgPQorICAgICAgICAidG9wLmZvbyA9ICdGb28nO1xuIgorICAg
ICAgICAiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5pbm5lckhUTUwgPSB0b3Au
Zm9vO1xuIgorICAgICAgICAid2luZG93Lm9wZW4gPSBmdW5jdGlvbiAoKSB7IGFsZXJ0KCdNYWlu
IFdvcmxkJyk7IH1cbiIKKyAgICAgICAgImRvY3VtZW50Lm9wZW4oMSwgMiwgMyk7IjsKKyAgICB0
ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQobWFpbldvcmxkU2NyaXB0LCAw
KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIocmVzdWx0LmdldCgpLCA9PSwgIk1haW4gV29ybGQiKTsK
KyAgICByZXN1bHQuY2xlYXIoKTsKKworICAgIFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFz
Y3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJykuaW5uZXJIVE1MIiwgMCk7CisgICAgZ19h
c3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgR093blB0cjxjaGFyPiB2YWx1ZVN0cmluZyhX
ZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7
CisgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgIkZvbyIpOworCisg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIGlzb2xhdGVkV29ybGRTY3JpcHQgPQorICAgICAgICAiZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5pbm5lckhUTUwgPSB0b3AuZm9vO1xuIgor
ICAgICAgICAid2luZG93Lm9wZW4gPSBmdW5jdGlvbiAoKSB7IGFsZXJ0KCdJc29sYXRlZCBXb3Js
ZCcpOyB9XG4iCisgICAgICAgICJkb2N1bWVudC5vcGVuKDEsIDIsIDMpOyI7CisgICAgR1JlZlB0
cjxHREJ1c1Byb3h5PiBwcm94eSA9IGFkb3B0R1JlZihidXMtPmNyZWF0ZVByb3h5KCJvcmcud2Vi
a2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwKKyAgICAgICAgIi9vcmcvd2Via2l0L2d0ay9XZWJF
eHRlbnNpb25UZXN0IiAsICJvcmcud2Via2l0Lmd0ay5XZWJFeHRlbnNpb25UZXN0IiwgdGVzdC0+
bV9tYWluTG9vcCkpOworICAgIGdfZGJ1c19wcm94eV9jYWxsKHByb3h5LmdldCgpLAorICAgICAg
ICAiUnVuSmF2YVNjcmlwdEluSXNvbGF0ZWRXb3JsZCIsCisgICAgICAgIGdfdmFyaWFudF9uZXco
Iih0JnMpIiwgd2Via2l0X3dlYl92aWV3X2dldF9wYWdlX2lkKHRlc3QtPm1fd2ViVmlldyksIGlz
b2xhdGVkV29ybGRTY3JpcHQpLAorICAgICAgICBHX0RCVVNfQ0FMTF9GTEFHU19OT05FLAorICAg
ICAgICAtMSwgMCwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNr
PihydW5KYXZhU2NyaXB0SW5Jc29sYXRlZFdvcmxkRmluaXNoZWRDYWxsYmFjayksCisgICAgICAg
IHRlc3QpOworICAgIGdfbWFpbl9sb29wX3J1bih0ZXN0LT5tX21haW5Mb29wKTsKKyAgICBnX2Fz
c2VydF9jbXBzdHIocmVzdWx0LmdldCgpLCA9PSwgIklzb2xhdGVkIFdvcmxkIik7CisgICAgcmVz
dWx0LmNsZWFyKCk7CisKKyAgICAvLyBDaGVjayB0aGF0ICd0b3AuZm9vJyBkZWZpbmVkIGluIG1h
aW4gd29ybGQgaXMgbm90IHZpc2libGUgaW4gaXNvbGF0ZWQgd29ybGQuCisgICAgamF2YXNjcmlw
dFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5pbm5lckhUTUwiLCAwKTsKKyAgICBnX2Fzc2Vy
dChqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICB2YWx1ZVN0cmluZy5zZXQoV2ViVmlld1Rlc3Q6Omph
dmFzY3JpcHRSZXN1bHRUb0NTdHJpbmcoamF2YXNjcmlwdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0
X2NtcHN0cih2YWx1ZVN0cmluZy5nZXQoKSwgPT0sICJ1bmRlZmluZWQiKTsKKworICAgIGdfc2ln
bmFsX2hhbmRsZXJfZGlzY29ubmVjdCh0ZXN0LT5tX3dlYlZpZXcsIHNjcmlwdERpYWxvZ0lEKTsK
K30KKwordm9pZCBiZWZvcmVBbGwoKQoreworICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfd2Vi
X2V4dGVuc2lvbnNfZGlyZWN0b3J5KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpLCBX
RUJLSVRfVEVTVF9XRUJfRVhURU5TSU9OU19ESVIpOworICAgIGJ1cyA9IG5ldyBXZWJLaXRUZXN0
QnVzKCk7CisgICAgaWYgKCFidXMtPnJ1bigpKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJW
aWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJFeHRlbnNpb24iLCAiZG9tLWRvY3VtZW50LXRpdGxlIiwg
dGVzdFdlYkV4dGVuc2lvbkdldFRpdGxlKTsKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRX
ZWJFeHRlbnNpb24iLCAiZG9jdW1lbnQtbG9hZGVkLXNpZ25hbCIsIHRlc3REb2N1bWVudExvYWRl
ZFNpZ25hbCk7CisgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJ3ZWItcHJv
Y2Vzcy1jcmFzaGVkIiwgdGVzdFdlYktpdFdlYlZpZXdQcm9jZXNzQ3Jhc2hlZCk7CisgICAgV2Vi
Vmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViRXh0ZW5zaW9uIiwgIndpbmRvdy1vYmplY3QtY2xlYXJl
ZCIsIHRlc3RXZWJFeHRlbnNpb25XaW5kb3dPYmplY3RDbGVhcmVkKTsKKyAgICBXZWJWaWV3VGVz
dDo6YWRkKCJXZWJLaXRXZWJFeHRlbnNpb24iLCAiaXNvbGF0ZWQtd29ybGQiLCB0ZXN0V2ViRXh0
ZW5zaW9uSXNvbGF0ZWRXb3JsZCk7Cit9CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworICAgIGRlbGV0
ZSBidXM7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJH
dGsvVGVzdFdlYktpdEFjY2Vzc2liaWxpdHkuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNDdj
YzMxNTMzZDU0NGFlYmVkYjk5MDQ4OGVlMTRhNDljNTJhM2JkCi0tLSAvZGV2L251bGwKKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRBY2Nlc3NpYmls
aXR5LmNwcApAQCAtMCwwICsxLDIyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2Fs
aWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVGVzdE1haW4uaCIKKyNp
bmNsdWRlICJXZWJWaWV3VGVzdC5oIgorCisvLyBUaGUgbGliYXRzcGkgaGVhZGVycyBkb24ndCB1
c2UgR19CRUdJTl9ERUNMUworZXh0ZXJuICJDIiB7CisjaW5jbHVkZSA8YXRzcGkvYXRzcGkuaD4K
K30KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxn
bGliLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCisvLyBOYW1lIG9mIHRoZSB0ZXN0IHNl
cnZlciBhcHBsaWNhdGlvbiBjcmVhdGluZyB0aGUgd2ViVmlldyBvYmplY3QuCitzdGF0aWMgY29u
c3QgY2hhcioga1Rlc3RTZXJ2ZXJBcHBOYW1lID0gIkFjY2Vzc2liaWxpdHlUZXN0U2VydmVyIjsK
KworLy8gTWF4IHNlY29uZHMgdG8gd2FpdCBmb3IgdGhlIHRlc3Qgc2VydmVyIGJlZm9yZSBpbnNw
ZWN0aW5nIGl0Lgorc3RhdGljIGNvbnN0IGludCBrTWF4V2FpdEZvckNoaWxkID0gNTsKKworLy8g
VGhlIFBJRCBmb3IgdGhlIHRlc3Qgc2VydmVyIHJ1bm5pbmcsIHNvIHdlIGNhbiBraWxsIGl0IGlm
IG5lZWRlZC4KK3N0YXRpYyBHUGlkIGtDaGlsZFByb2Nlc3NQaWQgPSAwOworCisvLyBXaGV0aGVy
IHRoZSBjaGlsZCBoYXMgcmVwbGllZCBhbmQgaXQncyByZWFkeS4KK3N0YXRpYyBib29sIGtDaGls
ZElzUmVhZHkgPSBmYWxzZTsKKworc3RhdGljIHZvaWQgc3RvcFRlc3RTZXJ2ZXIoKQoreworICAg
IC8vIERvIG5vdGhpbmcgaWYgdGhlcmUncyBubyBzZXJ2ZXIgcnVubmluZy4KKyAgICBpZiAoIWtD
aGlsZFByb2Nlc3NQaWQpCisgICAgICAgIHJldHVybjsKKworICAgIGdfc3Bhd25fY2xvc2VfcGlk
KGtDaGlsZFByb2Nlc3NQaWQpOworICAgIGtpbGwoa0NoaWxkUHJvY2Vzc1BpZCwgU0lHVEVSTSk7
CisgICAga0NoaWxkUHJvY2Vzc1BpZCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHNpZ0Fib3J0SGFu
ZGxlcihpbnQgc2lnTnVtKQoreworICAgIC8vIEp1c3Qgc3RvcCB0aGUgdGVzdCBzZXJ2ZXIgaWYg
U0lHQUJSVCB3YXMgcmVjZWl2ZWQuCisgICAgc3RvcFRlc3RTZXJ2ZXIoKTsKK30KKworc3RhdGlj
IGdwb2ludGVyIHRlc3RTZXJ2ZXJNb25pdG9yVGhyZWFkRnVuYyhncG9pbnRlcikKK3sKKyAgICAv
LyBXYWl0IGZvciB0aGUgc3BlY2lmaWVkIHRpbWVvdXQgdG8gaGFwcGVuLgorICAgIGdfdXNsZWVw
KGtNYXhXYWl0Rm9yQ2hpbGQgKiBHX1VTRUNfUEVSX1NFQyk7CisKKyAgICAvLyBLaWxsIHRoZSBj
aGlsZCBwcm9jZXNzIGlmIG5vdCByZWFkeSB5ZXQuCisgICAgaWYgKCFrQ2hpbGRJc1JlYWR5KQor
ICAgICAgICBzdG9wVGVzdFNlcnZlcigpOworCisgICAgZ190aHJlYWRfZXhpdCgwKTsKKyAgICBy
ZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3RhcnRUZXN0U2VydmVyTW9uaXRvcigpCit7Cisg
ICAga0NoaWxkSXNSZWFkeSA9IGZhbHNlOworICAgIGdfdGhyZWFkX25ldygiVGVzdFNlcnZlck1v
bml0b3IiLCB0ZXN0U2VydmVyTW9uaXRvclRocmVhZEZ1bmMsIDApOworfQorCitzdGF0aWMgdm9p
ZCBzdGFydFRlc3RTZXJ2ZXIoKQoreworICAgIC8vIFByZXBhcmUgYXJndltdIGZvciBzcGF3bmlu
ZyB0aGUgc2VydmVyIHByb2Nlc3MuCisgICAgR093blB0cjxjaGFyPiB0ZXN0U2VydmVyUGF0aChn
X2J1aWxkX2ZpbGVuYW1lKFdFQktJVF9FWEVDX1BBVEgsICJUZXN0V2ViS2l0QVBJIiwgIldlYktp
dDJHdGsiLCBrVGVzdFNlcnZlckFwcE5hbWUsIE5VTEwpKTsKKworICAgIGNoYXIqIHRlc3RTZXJ2
ZXJBcmd2WzJdOworICAgIHRlc3RTZXJ2ZXJBcmd2WzBdID0gdGVzdFNlcnZlclBhdGguZ2V0KCk7
CisgICAgdGVzdFNlcnZlckFyZ3ZbMV0gPSAwOworCisgICAgLy8gU3Bhd24gdGhlIHNlcnZlciwg
Z2V0dGluZyBpdHMgc3Rkb3V0IGZpbGUgZGVzY3JpcHRvciB0byBzZXQgYQorICAgIC8vIGNvbW11
bmljYXRpb24gY2hhbm5lbCwgc28gd2Uga25vdyB3aGVuIGl0J3MgcmVhZHkuCisgICAgaW50IGNo
aWxkU3Rkb3V0ID0gMDsKKyAgICBpZiAoIWdfc3Bhd25fYXN5bmNfd2l0aF9waXBlcygwLCB0ZXN0
U2VydmVyQXJndiwgMCwgc3RhdGljX2Nhc3Q8R1NwYXduRmxhZ3M+KDApLCAwLCAwLCAma0NoaWxk
UHJvY2Vzc1BpZCwgMCwgJmNoaWxkU3Rkb3V0LCAwLCAwKSkgeworICAgICAgICBjbG9zZShjaGls
ZFN0ZG91dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBTdGFydCBtb25pdG9y
aW5nIHRoZSB0ZXN0IHNlcnZlciAoaW4gYSBzZXBhcmF0ZSB0aHJlYWQpIHRvCisgICAgLy8gZW5z
dXJlIHdlIGRvbid0IGJsb2NrIG9uIHRoZSBjaGlsZCBwcm9jZXNzIG1vcmUgdGhhbiBhIHRpbWVv
dXQuCisgICAgc3RhcnRUZXN0U2VydmVyTW9uaXRvcigpOworCisgICAgY2hhciBtc2dbMl07Cisg
ICAgR0lPQ2hhbm5lbCogaW9DaGFubmVsID0gZ19pb19jaGFubmVsX3VuaXhfbmV3KGNoaWxkU3Rk
b3V0KTsKKyAgICBpZiAoZ19pb19jaGFubmVsX3JlYWRfY2hhcnMoaW9DaGFubmVsLCBtc2csIDIs
IDAsIDApID09IEdfSU9fU1RBVFVTX05PUk1BTCkgeworICAgICAgICAvLyBDaGVjayB3aGV0aGVy
IHRoZSBzZXJ2ZXIgc2VudCBhIG1lc3NhZ2Ugc2F5aW5nIGl0J3MgcmVhZHkKKyAgICAgICAgLy8g
YW5kIHN0b3JlIHRoZSByZXN1bHQgZ2xvYmFsbHksIHNvIHRoZSBtb25pdG9yIGNhbiBzZWUgaXQu
CisgICAgICAgIGtDaGlsZElzUmVhZHkgPSBtc2dbMF0gPT0gJ08nICYmIG1zZ1sxXSA9PSAnSyc7
CisgICAgfQorICAgIGdfaW9fY2hhbm5lbF91bnJlZihpb0NoYW5uZWwpOworICAgIGNsb3NlKGNo
aWxkU3Rkb3V0KTsKKworICAgIC8vIFRoZSB0aW1lb3V0IHdhcyByZWFjaGVkIGFuZCB0aGUgc2Vy
dmVyIGlzIG5vdCByZWFkeSB5ZXQsIHNvCisgICAgLy8gc3RvcCBpdCBpbm1lZGlhdGVseSwgYW5k
IGxldCB0aGUgdW5pdCB0ZXN0cyBmYWlsLgorICAgIGlmICgha0NoaWxkSXNSZWFkeSkKKyAgICAg
ICAgc3RvcFRlc3RTZXJ2ZXIoKTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tBdHNwaUFjY2Vzc2li
bGUoQXRzcGlBY2Nlc3NpYmxlKiBhY2Nlc3NpYmxlLCBjb25zdCBjaGFyKiB0YXJnZXROYW1lLCBB
dHNwaVJvbGUgdGFyZ2V0Um9sZSkKK3sKKyAgICBnX2Fzc2VydChBVFNQSV9JU19BQ0NFU1NJQkxF
KGFjY2Vzc2libGUpKTsKKworICAgIEdPd25QdHI8Y2hhcj4gbmFtZShhdHNwaV9hY2Nlc3NpYmxl
X2dldF9uYW1lKGFjY2Vzc2libGUsIDApKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGFyZ2V0TmFt
ZSwgPT0sIG5hbWUuZ2V0KCkpOworICAgIGdfYXNzZXJ0X2NtcGludCh0YXJnZXRSb2xlLCA9PSwg
YXRzcGlfYWNjZXNzaWJsZV9nZXRfcm9sZShhY2Nlc3NpYmxlLCAwKSk7Cit9CisKK3N0YXRpYyBH
UmVmUHRyPEF0c3BpQWNjZXNzaWJsZT4gZmluZFRlc3RTZXJ2ZXJBcHBsaWNhdGlvbigpCit7Cisg
ICAgLy8gT25seSBvbmUgZGVza3RvcCBpcyBzdXBwb3J0ZWQgYnkgQVRTUEkgYXQgdGhlIG1vbWVu
dC4KKyAgICBHUmVmUHRyPEF0c3BpQWNjZXNzaWJsZT4gZGVza3RvcCA9IGFkb3B0R1JlZihhdHNw
aV9nZXRfZGVza3RvcCgwKSk7CisKKyAgICAvLyBMb29rIGZvciB0aGUgc2VydmVyIGFwcGxpY2F0
aW9uIGluIHRoZSBsaXN0IG9mIGFwcHMuCisgICAgR1JlZlB0cjxBdHNwaUFjY2Vzc2libGU+IGN1
cnJlbnQ7CisgICAgaW50IGNoaWxkQ291bnQgPSBhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9j
b3VudChkZXNrdG9wLmdldCgpLCAwKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkQ291
bnQ7IGkrKykgeworICAgICAgICBjdXJyZW50ID0gYWRvcHRHUmVmKGF0c3BpX2FjY2Vzc2libGVf
Z2V0X2NoaWxkX2F0X2luZGV4KGRlc2t0b3AuZ2V0KCksIGksIDApKTsKKyAgICAgICAgaWYgKCFn
X3N0cmNtcDAoYXRzcGlfYWNjZXNzaWJsZV9nZXRfbmFtZShjdXJyZW50LmdldCgpLCAwKSwga1Rl
c3RTZXJ2ZXJBcHBOYW1lKSkKKyAgICAgICAgICAgIHJldHVybiBjdXJyZW50OworICAgIH0KKwor
ICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0ZXN0QXRzcGlCYXNpY0hpZXJhcmNoeShX
ZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICAvLyBUaGUgdGVzdCBzZXJ2
ZXIncyBhY2Nlc3NpYmlsaXR5IG9iamVjdCAoVUkgUHJvY2VzcykuCisgICAgR1JlZlB0cjxBdHNw
aUFjY2Vzc2libGU+IHRlc3RTZXJ2ZXJBcHAgPSBmaW5kVGVzdFNlcnZlckFwcGxpY2F0aW9uKCk7
CisgICAgZ19hc3NlcnQoQVRTUElfSVNfQUNDRVNTSUJMRSh0ZXN0U2VydmVyQXBwLmdldCgpKSk7
CisgICAgY2hlY2tBdHNwaUFjY2Vzc2libGUodGVzdFNlcnZlckFwcC5nZXQoKSwgIkFjY2Vzc2li
aWxpdHlUZXN0U2VydmVyIiwgQVRTUElfUk9MRV9BUFBMSUNBVElPTik7CisKKyAgICAvLyBUaGUg
bWFpbiB3aW5kb3cncyBhY2Nlc3NpYmlsaXR5IG9iamVjdCAoVUkgUHJvY2VzcykuCisgICAgR1Jl
ZlB0cjxBdHNwaUFjY2Vzc2libGU+IGN1cnJlbnRQYXJlbnQgPSB0ZXN0U2VydmVyQXBwOworICAg
IEdSZWZQdHI8QXRzcGlBY2Nlc3NpYmxlPiBjdXJyZW50Q2hpbGQgPSBhZG9wdEdSZWYoYXRzcGlf
YWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoY3VycmVudFBhcmVudC5nZXQoKSwgMCwgMCkp
OworICAgIGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY3VycmVudENoaWxkLmdldCgpKSk7
CisgICAgY2hlY2tBdHNwaUFjY2Vzc2libGUoY3VycmVudENoaWxkLmdldCgpLCAiIiwgQVRTUElf
Uk9MRV9GUkFNRSk7CisKKyAgICAvLyBUaGUgV2ViVmlldydzIGFjY2Vzc2liaWxpdHkgb2JqZWN0
IChVSSBQcm9jZXNzKS4KKyAgICBjdXJyZW50UGFyZW50ID0gY3VycmVudENoaWxkOworICAgIGN1
cnJlbnRDaGlsZCA9IGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGN1cnJlbnRQ
YXJlbnQuZ2V0KCksIDAsIDApOworICAgIGdfYXNzZXJ0KEFUU1BJX0lTX0FDQ0VTU0lCTEUoY3Vy
cmVudENoaWxkLmdldCgpKSk7CisgICAgY2hlY2tBdHNwaUFjY2Vzc2libGUoY3VycmVudENoaWxk
LmdldCgpLCAiIiwgQVRTUElfUk9MRV9GSUxMRVIpOworCisgICAgLy8gVGhlIFdlYlBhZ2UncyBh
Y2Nlc3NpYmlsaXR5IG9iamVjdCAoV2ViIFByb2Nlc3MpLgorICAgIGN1cnJlbnRQYXJlbnQgPSBj
dXJyZW50Q2hpbGQ7CisgICAgY3VycmVudENoaWxkID0gYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hp
bGRfYXRfaW5kZXgoY3VycmVudFBhcmVudC5nZXQoKSwgMCwgMCk7CisgICAgZ19hc3NlcnQoQVRT
UElfSVNfQUNDRVNTSUJMRShjdXJyZW50Q2hpbGQuZ2V0KCkpKTsKKyAgICBjaGVja0F0c3BpQWNj
ZXNzaWJsZShjdXJyZW50Q2hpbGQuZ2V0KCksICIiLCBBVFNQSV9ST0xFX0ZJTExFUik7CisKKyAg
ICAvLyBIVE1MIHJvb3QgZWxlbWVudCdzIGFjY2Vzc2libGUgZWxlbWVudCAoV2ViIFByb2Nlc3Mp
LgorICAgIGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50Q2hpbGQ7CisgICAgY3VycmVudENoaWxkID0g
YXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoY3VycmVudFBhcmVudC5nZXQoKSwg
MCwgMCk7CisgICAgZ19hc3NlcnQoQVRTUElfSVNfQUNDRVNTSUJMRShjdXJyZW50Q2hpbGQuZ2V0
KCkpKTsKKworICAgIC8vIEhUTUwgYm9keSdzIGFjY2Vzc2libGUgZWxlbWVudCAoV2ViIFByb2Nl
c3MpLgorICAgIGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50Q2hpbGQ7CisgICAgY3VycmVudENoaWxk
ID0gYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoY3VycmVudFBhcmVudC5nZXQo
KSwgMCwgMCk7CisgICAgZ19hc3NlcnQoQVRTUElfSVNfQUNDRVNTSUJMRShjdXJyZW50Q2hpbGQu
Z2V0KCkpKTsKKyAgICBjaGVja0F0c3BpQWNjZXNzaWJsZShjdXJyZW50Q2hpbGQuZ2V0KCksICIi
LCBBVFNQSV9ST0xFX0RPQ1VNRU5UX1dFQik7CisKKyAgICAvLyBIVE1MIEgxJ3MgYWNjZXNzaWJs
ZSBlbGVtZW50IChXZWIgUHJvY2VzcykuCisgICAgY3VycmVudFBhcmVudCA9IGN1cnJlbnRDaGls
ZDsKKyAgICBjdXJyZW50Q2hpbGQgPSBhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRl
eChjdXJyZW50UGFyZW50LmdldCgpLCAwLCAwKTsKKyAgICBnX2Fzc2VydChBVFNQSV9JU19BQ0NF
U1NJQkxFKGN1cnJlbnRDaGlsZC5nZXQoKSkpOworICAgIGNoZWNrQXRzcGlBY2Nlc3NpYmxlKGN1
cnJlbnRDaGlsZC5nZXQoKSwgIlRoaXMgaXMgYSB0ZXN0IiwgQVRTUElfUk9MRV9IRUFESU5HKTsK
KworICAgIC8vIEhUTUwgZmlyc3QgcGFyYWdyYXBoJ3MgYWNjZXNzaWJsZSBlbGVtZW50IChXZWIg
UHJvY2VzcykuCisgICAgY3VycmVudENoaWxkID0gYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRf
YXRfaW5kZXgoY3VycmVudFBhcmVudC5nZXQoKSwgMSwgMCk7CisgICAgZ19hc3NlcnQoQVRTUElf
SVNfQUNDRVNTSUJMRShjdXJyZW50Q2hpbGQuZ2V0KCkpKTsKKyAgICBjaGVja0F0c3BpQWNjZXNz
aWJsZShjdXJyZW50Q2hpbGQuZ2V0KCksICIiLCBBVFNQSV9ST0xFX1BBUkFHUkFQSCk7CisKKyAg
ICAvLyBIVE1MIHNlY29uZCBwYXJhZ3JhcGgncyBhY2Nlc3NpYmxlIGVsZW1lbnQgKFdlYiBQcm9j
ZXNzKS4KKyAgICBjdXJyZW50Q2hpbGQgPSBhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9p
bmRleChjdXJyZW50UGFyZW50LmdldCgpLCAyLCAwKTsKKyAgICBnX2Fzc2VydChBVFNQSV9JU19B
Q0NFU1NJQkxFKGN1cnJlbnRDaGlsZC5nZXQoKSkpOworICAgIGNoZWNrQXRzcGlBY2Nlc3NpYmxl
KGN1cnJlbnRDaGlsZC5nZXQoKSwgIiIsIEFUU1BJX1JPTEVfUEFSQUdSQVBIKTsKKworICAgIC8v
IEhUTUwgbGluaydzIGFjY2Vzc2libGUgZWxlbWVudCAoV2ViIFByb2Nlc3MpLgorICAgIGN1cnJl
bnRQYXJlbnQgPSBjdXJyZW50Q2hpbGQ7CisgICAgY3VycmVudENoaWxkID0gYXRzcGlfYWNjZXNz
aWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoY3VycmVudFBhcmVudC5nZXQoKSwgMCwgMCk7CisgICAg
Z19hc3NlcnQoQVRTUElfSVNfQUNDRVNTSUJMRShjdXJyZW50Q2hpbGQuZ2V0KCkpKTsKKyAgICBj
aGVja0F0c3BpQWNjZXNzaWJsZShjdXJyZW50Q2hpbGQuZ2V0KCksICJhIGxpbmsiLCBBVFNQSV9S
T0xFX0xJTkspOworfQorCit2b2lkIGJlZm9yZUFsbCgpCit7CisgICAgLy8gV2UgaW5zdGFsbCBh
IGhhbmRsZXIgdG8gZW5zdXJlIHRoYXQgd2Uga2lsbCB0aGUgY2hpbGQgcHJvY2VzcworICAgIC8v
IGlmIHRoZSBwYXJlbnQgZGllcyBiZWNhdXNlIG9mIHdoYXRldmVyIHRoZSByZWFzb24gaXMuCisg
ICAgc2lnbmFsKFNJR0FCUlQsIHNpZ0Fib3J0SGFuZGxlcik7CisKKyAgICAvLyBTdGFydCB0aGUg
YWNjZXNzaWJpbGl0eSB0ZXN0IHNlcnZlciBhbmQgbG9hZCB0aGUgdGVzdHMuCisgICAgc3RhcnRU
ZXN0U2VydmVyKCk7CisgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0QWNjZXNzaWJpbGl0eSIs
ICJhdHNwaS1iYXNpYy1oaWVyYXJjaHkiLCB0ZXN0QXRzcGlCYXNpY0hpZXJhcmNoeSk7Cit9CisK
K3ZvaWQgYWZ0ZXJBbGwoKQoreworICAgIC8vIEVuc3VyZSB3ZSBzdG9wIHRoZSBzZXJ2ZXIuCisg
ICAgc3RvcFRlc3RTZXJ2ZXIoKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlLmNwcCBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4xYTA2Zjc0OTY3Yjg0MDFlMTkzNmIwMjA0M2JmY2M5ZTZhZWE1MzRmCi0t
LSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rl
c3RXZWJLaXRGYXZpY29uRGF0YWJhc2UuY3BwCkBAIC0wLDAgKzEsMjc0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNs
dWRlICJXZWJLaXRUZXN0U2VydmVyLmgiCisjaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKKyNpbmNs
dWRlIDxnbGliL2dzdGRpby5oPgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgorI2luY2x1ZGUg
PHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKworc3RhdGljIFdlYktpdFRlc3RTZXJ2ZXIqIGtTZXJ2
ZXI7CitzdGF0aWMgY2hhcioga1RlbXBEaXJlY3Rvcnk7CisKK2NsYXNzIEZhdmljb25EYXRhYmFz
ZVRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1Rf
RklYVFVSRShGYXZpY29uRGF0YWJhc2VUZXN0KTsKKworICAgIEZhdmljb25EYXRhYmFzZVRlc3Qo
KQorICAgICAgICA6IG1fd2ViQ29udGV4dCh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQo
KSkKKyAgICAgICAgLCBtX2Zhdmljb24oMCkKKyAgICAgICAgLCBtX2Vycm9yKDApCisgICAgICAg
ICwgbV9mYXZpY29uTm90aWZpY2F0aW9uUmVjZWl2ZWQoZmFsc2UpCisgICAgeworICAgICAgICBX
ZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9m
YXZpY29uX2RhdGFiYXNlKG1fd2ViQ29udGV4dCk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
ZGF0YWJhc2UsICJmYXZpY29uLWNoYW5nZWQiLCBHX0NBTExCQUNLKGZhdmljb25DaGFuZ2VkQ2Fs
bGJhY2spLCB0aGlzKTsKKyAgICB9CisKKyAgICB+RmF2aWNvbkRhdGFiYXNlVGVzdCgpCisgICAg
eworICAgICAgICBpZiAobV9mYXZpY29uKQorICAgICAgICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0
cm95KG1fZmF2aWNvbik7CisKKyAgICAgICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFz
ZSA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFzZShtX3dlYkNvbnRleHQp
OworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQoZGF0YWJhc2Us
IEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOworICAgIH0KKworICAgIHN0
YXRpYyB2b2lkIGZhdmljb25DaGFuZ2VkQ2FsbGJhY2soV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBk
YXRhYmFzZSwgY29uc3QgY2hhciogcGFnZVVSSSwgY29uc3QgY2hhciogZmF2aWNvblVSSSwgRmF2
aWNvbkRhdGFiYXNlVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIGlmICghZ19zdHJjbXAwKHdl
YmtpdF93ZWJfdmlld19nZXRfdXJpKHRlc3QtPm1fd2ViVmlldyksIHBhZ2VVUkkpKQorICAgICAg
ICAgICAgdGVzdC0+bV9mYXZpY29uVVJJID0gZmF2aWNvblVSSTsKKyAgICB9CisKKyAgICBzdGF0
aWMgdm9pZCB2aWV3RmF2aWNvbkNoYW5nZWRDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3
LCBHUGFyYW1TcGVjKiBwc3BlYywgZ3BvaW50ZXIgZGF0YSkKKyAgICB7CisgICAgICAgIEZhdmlj
b25EYXRhYmFzZVRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxGYXZpY29uRGF0YWJhc2VUZXN0Kj4o
ZGF0YSk7CisgICAgICAgIGdfYXNzZXJ0KHRlc3QtPm1fd2ViVmlldyA9PSB3ZWJWaWV3KTsKKyAg
ICAgICAgdGVzdC0+bV9mYXZpY29uTm90aWZpY2F0aW9uUmVjZWl2ZWQgPSB0cnVlOworICAgICAg
ICB0ZXN0LT5xdWl0TWFpbkxvb3AoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBnZXRGYXZp
Y29uQ2FsbGJhY2soR09iamVjdCogc291cmNlT2JqZWN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwg
dm9pZCogZGF0YSkKKyAgICB7CisgICAgICAgIEZhdmljb25EYXRhYmFzZVRlc3QqIHRlc3QgPSBz
dGF0aWNfY2FzdDxGYXZpY29uRGF0YWJhc2VUZXN0Kj4oZGF0YSk7CisgICAgICAgIFdlYktpdEZh
dmljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25f
ZGF0YWJhc2UodGVzdC0+bV93ZWJDb250ZXh0KTsKKyAgICAgICAgdGVzdC0+bV9mYXZpY29uID0g
d2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fZmluaXNoKGRhdGFiYXNlLCByZXN1
bHQsICZ0ZXN0LT5tX2Vycm9yLm91dFB0cigpKTsKKyAgICAgICAgdGVzdC0+cXVpdE1haW5Mb29w
KCk7CisgICAgfQorCisgICAgdm9pZCB3YWl0VW50aWxGYXZpY29uQ2hhbmdlZCgpCisgICAgewor
ICAgICAgICBtX2Zhdmljb25Ob3RpZmljYXRpb25SZWNlaXZlZCA9IGZhbHNlOworICAgICAgICB1
bnNpZ25lZCBsb25nIGhhbmRsZXJJRCA9IGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAibm90
aWZ5OjpmYXZpY29uIiwgR19DQUxMQkFDSyh2aWV3RmF2aWNvbkNoYW5nZWRDYWxsYmFjayksIHRo
aXMpOworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgICAgIGdfc2ln
bmFsX2hhbmRsZXJfZGlzY29ubmVjdChtX3dlYlZpZXcsIGhhbmRsZXJJRCk7CisgICAgfQorCisg
ICAgdm9pZCBnZXRGYXZpY29uRm9yUGFnZVVSSUFuZFdhaXRVbnRpbFJlYWR5KGNvbnN0IGNoYXIq
IHBhZ2VVUkkpCisgICAgeworICAgICAgICBtX2Vycm9yLmNsZWFyKCk7CisgICAgICAgIGlmICht
X2Zhdmljb24pIHsKKyAgICAgICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShtX2Zhdmljb24p
OworICAgICAgICAgICAgbV9mYXZpY29uID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIFdlYktp
dEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmlj
b25fZGF0YWJhc2UobV93ZWJDb250ZXh0KTsKKyAgICAgICAgd2Via2l0X2Zhdmljb25fZGF0YWJh
c2VfZ2V0X2Zhdmljb24oZGF0YWJhc2UsIHBhZ2VVUkksIDAsIGdldEZhdmljb25DYWxsYmFjaywg
dGhpcyk7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICB9CisKKyAg
ICBXZWJLaXRXZWJDb250ZXh0KiBtX3dlYkNvbnRleHQ7CisgICAgY2Fpcm9fc3VyZmFjZV90KiBt
X2Zhdmljb247CisgICAgQ1N0cmluZyBtX2Zhdmljb25VUkk7CisgICAgR093blB0cjxHRXJyb3I+
IG1fZXJyb3I7CisgICAgYm9vbCBtX2Zhdmljb25Ob3RpZmljYXRpb25SZWNlaXZlZDsKK307CisK
K3N0YXRpYyB2b2lkCitzZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNz
YWdlKiBtZXNzYWdlLCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiBxdWVyeSwgU291cENs
aWVudENvbnRleHQqIGNvbnRleHQsIHZvaWQqIGRhdGEpCit7CisgICAgaWYgKG1lc3NhZ2UtPm1l
dGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0
dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2Zhdmljb24uaWNvIikpIHsK
KyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9U
X0ZPVU5EKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVz
cG9uc2VfYm9keSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjaGFyKiBjb250ZW50
czsKKyAgICBnc2l6ZSBsZW5ndGg7CisgICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvaWNvbi9m
YXZpY29uLmljbyIpKSB7CisgICAgICAgIEdPd25QdHI8Y2hhcj4gcGF0aFRvRmF2aWNvbihnX2J1
aWxkX2ZpbGVuYW1lKFRlc3Q6OmdldFdlYktpdDFUZXN0UmVzb3VjZXNEaXIoKS5kYXRhKCksICJi
bGFuay5pY28iLCBOVUxMKSk7CisgICAgICAgIGdfZmlsZV9nZXRfY29udGVudHMocGF0aFRvRmF2
aWNvbi5nZXQoKSwgJmNvbnRlbnRzLCAmbGVuZ3RoLCAwKTsKKyAgICAgICAgc291cF9tZXNzYWdl
X2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGNv
bnRlbnRzLCBsZW5ndGgpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9ub2Zh
dmljb24iKSkgeworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogbm9GYXZpY29uSFRNTCA9ICI8
aHRtbD48aGVhZD48Ym9keT50ZXN0PC9ib2R5PjwvaHRtbD4iOworICAgICAgICBzb3VwX21lc3Nh
Z2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElD
LCBub0Zhdmljb25IVE1MLCBzdHJsZW4obm9GYXZpY29uSFRNTCkpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb250ZW50c0hUTUwgPSAiPGh0bWw+PGhlYWQ+PGxp
bmsgcmVsPSdpY29uJyBocmVmPScvaWNvbi9mYXZpY29uLmljbycgdHlwZT0naW1hZ2UveC1pY287
IGNoYXJzZXQ9YmluYXJ5Jz48L2hlYWQ+PGJvZHk+dGVzdDwvYm9keT48L2h0bWw+IjsKKyAgICAg
ICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBf
TUVNT1JZX1NUQVRJQywgY29udGVudHNIVE1MLCBzdHJsZW4oY29udGVudHNIVE1MKSk7CisgICAg
fQorCisgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0sp
OworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkp
OworfQorCitzdGF0aWMgdm9pZCB0ZXN0Tm90SW5pdGlhbGl6ZWQoRmF2aWNvbkRhdGFiYXNlVGVz
dCogdGVzdCkKK3sKKyAgICAvLyBUcnkgdG8gcmV0cmlldmUgYSB2YWxpZCBmYXZpY29uIGZyb20g
YSBub3QgaW5pdGlhbGl6ZWQgZGF0YWJhc2UuCisgICAgdGVzdC0+Z2V0RmF2aWNvbkZvclBhZ2VV
UklBbmRXYWl0VW50aWxSZWFkeShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvZm9vIikuZGF0YSgp
KTsKKyAgICBnX2Fzc2VydCghdGVzdC0+bV9mYXZpY29uKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5t
X2Vycm9yKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9lcnJvci0+Y29kZSwgPT0sIFdF
QktJVF9GQVZJQ09OX0RBVEFCQVNFX0VSUk9SX05PVF9JTklUSUFMSVpFRCk7Cit9CisKK3N0YXRp
YyB2b2lkIHRlc3RTZXREaXJlY3RvcnkoRmF2aWNvbkRhdGFiYXNlVGVzdCogdGVzdCkKK3sKKyAg
ICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X2Zhdmljb25fZGF0YWJhc2VfZGlyZWN0b3J5KHRlc3Qt
Pm1fd2ViQ29udGV4dCwga1RlbXBEaXJlY3RvcnkpOworICAgIGdfYXNzZXJ0X2NtcHN0cihrVGVt
cERpcmVjdG9yeSwgPT0sIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFzZV9k
aXJlY3RvcnkodGVzdC0+bV93ZWJDb250ZXh0KSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RDbGVh
ckRhdGFiYXNlKEZhdmljb25EYXRhYmFzZVRlc3QqIHRlc3QpCit7CisgICAgV2ViS2l0RmF2aWNv
bkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZmF2aWNvbl9kYXRh
YmFzZSh0ZXN0LT5tX3dlYkNvbnRleHQpOworICAgIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2Ns
ZWFyKGRhdGFiYXNlKTsKKworICAgIEdPd25QdHI8Y2hhcj4gaWNvblVSSSh3ZWJraXRfZmF2aWNv
bl9kYXRhYmFzZV9nZXRfZmF2aWNvbl91cmkoZGF0YWJhc2UsIGtTZXJ2ZXItPmdldFVSSUZvclBh
dGgoIi9mb28iKS5kYXRhKCkpKTsKKyAgICBnX2Fzc2VydCghaWNvblVSSSk7Cit9CisKK3N0YXRp
YyB2b2lkIHRlc3RHZXRGYXZpY29uKEZhdmljb25EYXRhYmFzZVRlc3QqIHRlc3QpCit7CisgICAg
Ly8gV2UgbmVlZCB0byBsb2FkIHRoZSBwYWdlIGZpcnN0IHRvIGVuc3VyZSB0aGUgaWNvbiBkYXRh
IHdpbGwgYmUKKyAgICAvLyBpbiB0aGUgZGF0YWJhc2UgaW4gY2FzZSB0aGVyZSdzIGFuIGFzc29j
aWF0ZWQgZmF2aWNvbi4KKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgo
Ii9mb28iKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbEZhdmljb25DaGFuZ2VkKCk7Cisg
ICAgQ1N0cmluZyBmYXZpY29uVVJJID0ga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2ljb24vZmF2
aWNvbi5pY28iKTsKKworICAgIC8vIENoZWNrIHRoZSBBUEkgcmV0cmlldmluZyBhIHZhbGlkIGZh
dmljb24uCisgICAgdGVzdC0+Z2V0RmF2aWNvbkZvclBhZ2VVUklBbmRXYWl0VW50aWxSZWFkeShr
U2VydmVyLT5nZXRVUklGb3JQYXRoKCIvZm9vIikuZGF0YSgpKTsKKyAgICBnX2Fzc2VydCh0ZXN0
LT5tX2Zhdmljb24pOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXN0LT5tX2Zhdmljb25VUkkuZGF0
YSgpLCA9PSwgZmF2aWNvblVSSS5kYXRhKCkpOworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX2Vycm9y
KTsKKworICAgIC8vIENoZWNrIHRoYXQgd2lkdGggYW5kIGhlaWdodCBtYXRjaCB0aG9zZSBmcm9t
IGJsYW5rLmljbyAoMTZ4MTYgZmF2aWNvbikuCisgICAgZ19hc3NlcnRfY21waW50KGNhaXJvX2lt
YWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHRlc3QtPm1fZmF2aWNvbiksID09LCAxNik7CisgICAgZ19h
c3NlcnRfY21waW50KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodCh0ZXN0LT5tX2Zhdmlj
b24pLCA9PSwgMTYpOworCisgICAgLy8gQ2hlY2sgdGhhdCBhbm90aGVyIHBhZ2Ugd2l0aCB0aGUg
c2FtZSBmYXZpY29uIHJldHVybiB0aGUgc2FtZSBpY29uLgorICAgIGNhaXJvX3N1cmZhY2VfdCog
ZmF2aWNvbiA9IGNhaXJvX3N1cmZhY2VfcmVmZXJlbmNlKHRlc3QtPm1fZmF2aWNvbik7CisgICAg
dGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvYmFyIikuZGF0YSgpKTsKKyAg
ICAvLyBJdCdzIGEgbmV3IHBhZ2UgaW4gdGhlIGRhdGFiYXNlLCBzbyBmYXZpY29uIHdpbGwgY2hh
bmdlIHR3aWNlLCBmaXJzdCB0byByZXNldCBpdAorICAgIC8vIGFuZCB0aGVuIHdoZW4gdGhlIGlj
b24gaXMgbG9hZGVkLgorICAgIHRlc3QtPndhaXRVbnRpbEZhdmljb25DaGFuZ2VkKCk7CisgICAg
dGVzdC0+d2FpdFVudGlsRmF2aWNvbkNoYW5nZWQoKTsKKyAgICB0ZXN0LT5nZXRGYXZpY29uRm9y
UGFnZVVSSUFuZFdhaXRVbnRpbFJlYWR5KGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9iYXIiKS5k
YXRhKCkpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fZmF2aWNvbik7CisgICAgZ19hc3NlcnRfY21w
c3RyKHRlc3QtPm1fZmF2aWNvblVSSS5kYXRhKCksID09LCBmYXZpY29uVVJJLmRhdGEoKSk7Cisg
ICAgZ19hc3NlcnQodGVzdC0+bV9mYXZpY29uID09IGZhdmljb24pOworICAgIGdfYXNzZXJ0KCF0
ZXN0LT5tX2Vycm9yKTsKKyAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koZmF2aWNvbik7CisKKyAg
ICAvLyBDaGVjayB0aGUgQVBJIHJldHJpZXZpbmcgYW4gaW52YWxpZCBmYXZpY29uLgorICAgIHRl
c3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL25vZmF2aWNvbiIpLmRhdGEoKSk7
CisgICAgdGVzdC0+d2FpdFVudGlsRmF2aWNvbkNoYW5nZWQoKTsKKworICAgIHRlc3QtPmdldEZh
dmljb25Gb3JQYWdlVVJJQW5kV2FpdFVudGlsUmVhZHkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgi
L25vZmF2aWNvbiIpLmRhdGEoKSk7CisgICAgZ19hc3NlcnQoIXRlc3QtPm1fZmF2aWNvbik7Cisg
ICAgZ19hc3NlcnQodGVzdC0+bV9lcnJvcik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RHZXRGYXZp
Y29uVVJJKEZhdmljb25EYXRhYmFzZVRlc3QqIHRlc3QpCit7CisgICAgV2ViS2l0RmF2aWNvbkRh
dGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFz
ZSh0ZXN0LT5tX3dlYkNvbnRleHQpOworCisgICAgQ1N0cmluZyBiYXNlVVJJID0ga1NlcnZlci0+
Z2V0VVJJRm9yUGF0aCgiL2ZvbyIpOworICAgIEdPd25QdHI8Y2hhcj4gaWNvblVSSSh3ZWJraXRf
ZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl91cmkoZGF0YWJhc2UsIGJhc2VVUkkuZGF0YSgp
KSk7CisgICAgQVNTRVJUX0NNUF9DU1RSSU5HKGljb25VUkkuZ2V0KCksID09LCBrU2VydmVyLT5n
ZXRVUklGb3JQYXRoKCIvaWNvbi9mYXZpY29uLmljbyIpKTsKK30KKworc3RhdGljIHZvaWQgdGVz
dFdlYlZpZXdGYXZpY29uKEZhdmljb25EYXRhYmFzZVRlc3QqIHRlc3QpCit7CisgICAgdGVzdC0+
bV9mYXZpY29uVVJJID0gQ1N0cmluZygpOworCisgICAgY2Fpcm9fc3VyZmFjZV90KiBpY29uRnJv
bVdlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2Zhdmljb24odGVzdC0+bV93ZWJWaWV3KTsK
KyAgICBnX2Fzc2VydCghaWNvbkZyb21XZWJWaWV3KTsKKworICAgIHRlc3QtPmxvYWRVUkkoa1Nl
cnZlci0+Z2V0VVJJRm9yUGF0aCgiL2ZvbyIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGls
RmF2aWNvbkNoYW5nZWQoKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX2Zhdmljb25Ob3RpZmljYXRp
b25SZWNlaXZlZCk7CisgICAgLy8gVGhlIGljb24gaXMga25vd24gYW5kIGhhc24ndCBjaGFuZ2Vk
IGluIHRoZSBkYXRhYmFzZSwgc28gbm90aWZ5OjpmYXZpY29uIGlzIGVtaXR0ZWQKKyAgICAvLyBi
dXQgV2ViS2l0RmF2aWNvbkRhdGFiYXNlOjppY29uLWNoYW5nZWQgaXNuJ3QuCisgICAgZ19hc3Nl
cnQodGVzdC0+bV9mYXZpY29uVVJJLmlzTnVsbCgpKTsKKworICAgIGljb25Gcm9tV2ViVmlldyA9
IHdlYmtpdF93ZWJfdmlld19nZXRfZmF2aWNvbih0ZXN0LT5tX3dlYlZpZXcpOworICAgIGdfYXNz
ZXJ0KGljb25Gcm9tV2ViVmlldyk7CisgICAgZ19hc3NlcnRfY21wdWludChjYWlyb19pbWFnZV9z
dXJmYWNlX2dldF93aWR0aChpY29uRnJvbVdlYlZpZXcpLCA9PSwgMTYpOworICAgIGdfYXNzZXJ0
X2NtcHVpbnQoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KGljb25Gcm9tV2ViVmlldyks
ID09LCAxNik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RGYXZpY29uRGF0YWJhc2UoRmF2aWNvbkRh
dGFiYXNlVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICAvLyBUaGVzZSB0ZXN0cyBk
ZXBlbmQgb24gdGhpcyBvcmRlciB0byBydW4gcHJvcGVybHkgc28gd2UgZGVjbGFyZSB0aGVtIGlu
IGEgc2luZ2xlIG9uZS4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTExMTQzNC4KKyAgICB0ZXN0Tm90SW5pdGlhbGl6ZWQodGVzdCk7CisgICAgdGVz
dFNldERpcmVjdG9yeSh0ZXN0KTsKKyAgICB0ZXN0R2V0RmF2aWNvbih0ZXN0KTsKKyAgICB0ZXN0
R2V0RmF2aWNvblVSSSh0ZXN0KTsKKyAgICB0ZXN0V2ViVmlld0Zhdmljb24odGVzdCk7CisgICAg
dGVzdENsZWFyRGF0YWJhc2UodGVzdCk7Cit9CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICAv
LyBTdGFydCBhIHNvdXAgc2VydmVyIGZvciB0ZXN0aW5nLgorICAgIGtTZXJ2ZXIgPSBuZXcgV2Vi
S2l0VGVzdFNlcnZlcigpOworICAgIGtTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFjayk7CisKKyAg
ICBrVGVtcERpcmVjdG9yeSA9IGdfZGlyX21ha2VfdG1wKCJXZWJLaXQyVGVzdHMtWFhYWFhYIiwg
MCk7CisgICAgZ19hc3NlcnQoa1RlbXBEaXJlY3RvcnkpOworCisgICAgLy8gQWRkIHRlc3RzIHRv
IHRoZSBzdWl0ZS4KKyAgICBGYXZpY29uRGF0YWJhc2VUZXN0OjphZGQoIldlYktpdEZhdmljb25E
YXRhYmFzZSIsICJmYXZpY29uLWRhdGFiYXNlLXRlc3QiLCB0ZXN0RmF2aWNvbkRhdGFiYXNlKTsK
K30KKworc3RhdGljIHZvaWQgd2Via2l0RmF2aWNvbkRhdGFiYXNlRmluYWxpemVkQ2FsbGJhY2so
Z3BvaW50ZXIsIEdPYmplY3QqKQoreworICAgIGlmICghZ19maWxlX3Rlc3Qoa1RlbXBEaXJlY3Rv
cnksIEdfRklMRV9URVNUX0lTX0RJUikpCisgICAgICAgIHJldHVybjsKKworICAgIEdPd25QdHI8
Y2hhcj4gZmlsZW5hbWUoZ19idWlsZF9maWxlbmFtZShrVGVtcERpcmVjdG9yeSwgIldlYnBhZ2VJ
Y29ucy5kYiIsIE5VTEwpKTsKKyAgICBnX3VubGluayhmaWxlbmFtZS5nZXQoKSk7CisKKyAgICBn
X3JtZGlyKGtUZW1wRGlyZWN0b3J5KTsKK30KKwordm9pZCBhZnRlckFsbCgpCit7CisgICAgZGVs
ZXRlIGtTZXJ2ZXI7CisKKyAgICAvLyBEZWxldGUgdGhlIHRlbXBvcmFyeSBmaWxlcyBhZnRlciB0
aGUgSWNvbkRhdGFiYXNlIGhhcyBiZWVuCisgICAgLy8gY2xvc2VkLCB0aGF0IGlzLCBvbmNlIFdl
YktpdEZhdmljb25EYXRhYmFzZSBpcyBiZWluZyBkZXN0cm95ZWQuCisgICAgV2ViS2l0RmF2aWNv
bkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZmF2aWNvbl9kYXRh
YmFzZSh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSk7CisgICAgZ19vYmplY3Rfd2Vh
a19yZWYoR19PQkpFQ1QoZGF0YWJhc2UpLCB3ZWJraXRGYXZpY29uRGF0YWJhc2VGaW5hbGl6ZWRD
YWxsYmFjaywgMCk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdDJHdGsvVGVzdFdlYktpdEZpbmRDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0RmluZENvbnRyb2xsZXIuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmQyZWVmNGNhNDg2M2U5YzFhMmMzNmU0MzE1N2VjNmQ1NGI1ZDcxZDMKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdEZp
bmRDb250cm9sbGVyLmNwcApAQCAtMCwwICsxLDMzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
LDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiTG9hZFRy
YWNraW5nVGVzdC5oIgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL3dl
YmtpdDIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisKK3N0YXRpYyBjb25z
dCBjaGFyKiB0ZXN0U3RyaW5nID0gIjxodG1sPjxib2R5PmZpcnN0IHRlc3Rpbmcgc2Vjb25kIHRl
c3Rpbmcgc2Vjb25kSGFsZjwvYm9keT48L2h0bWw+IjsKKworY2xhc3MgRmluZENvbnRyb2xsZXJU
ZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJ
WFRVUkUoRmluZENvbnRyb2xsZXJUZXN0KTsKKworICAgIEZpbmRDb250cm9sbGVyVGVzdCgpCisg
ICAgICAgIDogbV9maW5kQ29udHJvbGxlcih3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ZpbmRfY29udHJv
bGxlcihtX3dlYlZpZXcpKQorICAgICAgICAsIG1fcnVuRmluZFVudGlsQ29tcGxldGlvbihmYWxz
ZSkKKyAgICB7CisgICAgICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMo
R19PQkpFQ1QobV9maW5kQ29udHJvbGxlci5nZXQoKSkpOworICAgIH0KKworICAgIH5GaW5kQ29u
dHJvbGxlclRlc3QoKQorICAgIHsKKyAgICAgICAgaWYgKG1fZmluZENvbnRyb2xsZXIpCisgICAg
ICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9maW5kQ29udHJv
bGxlci5nZXQoKSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7CisgICAg
fQorCisgICAgdm9pZCBmaW5kKGNvbnN0IGNoYXIqIHNlYXJjaFRleHQsIGd1aW50MzIgZmluZE9w
dGlvbnMsIGd1aW50IG1heE1hdGNoQ291bnQpCisgICAgeworICAgICAgICBnX3NpZ25hbF9jb25u
ZWN0KG1fZmluZENvbnRyb2xsZXIuZ2V0KCksICJmb3VuZC10ZXh0IiwgR19DQUxMQkFDSyhmb3Vu
ZFRleHRDYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fZmluZENv
bnRyb2xsZXIuZ2V0KCksICJmYWlsZWQtdG8tZmluZC10ZXh0IiwgR19DQUxMQkFDSyhmYWlsZWRU
b0ZpbmRUZXh0Q2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgd2Via2l0X2ZpbmRfY29udHJvbGxl
cl9zZWFyY2gobV9maW5kQ29udHJvbGxlci5nZXQoKSwgc2VhcmNoVGV4dCwgZmluZE9wdGlvbnMs
IG1heE1hdGNoQ291bnQpOworICAgIH0KKworICAgIHZvaWQgY291bnQoY29uc3QgY2hhciogc2Vh
cmNoVGV4dCwgZ3VpbnQzMiBmaW5kT3B0aW9ucywgZ3VpbnQgbWF4TWF0Y2hDb3VudCkKKyAgICB7
CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9maW5kQ29udHJvbGxlci5nZXQoKSwgImNvdW50
ZWQtbWF0Y2hlcyIsIEdfQ0FMTEJBQ0soY291bnRlZE1hdGNoZXNDYWxsYmFjayksIHRoaXMpOwor
ICAgICAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX2NvdW50X21hdGNoZXMobV9maW5kQ29udHJv
bGxlci5nZXQoKSwgc2VhcmNoVGV4dCwgZmluZE9wdGlvbnMsIG1heE1hdGNoQ291bnQpOworICAg
IH0KKworICAgIHZvaWQgd2FpdFVudGlsRmluZEZpbmlzaGVkKCkKKyAgICB7CisgICAgICAgIG1f
cnVuRmluZFVudGlsQ29tcGxldGlvbiA9IHRydWU7CisgICAgICAgIGdfbWFpbl9sb29wX3J1biht
X21haW5Mb29wKTsKKyAgICB9CisKKyAgICBHUmVmUHRyPFdlYktpdEZpbmRDb250cm9sbGVyPiBt
X2ZpbmRDb250cm9sbGVyOworICAgIGJvb2wgbV90ZXh0Rm91bmQ7CisgICAgdW5zaWduZWQgbV9t
YXRjaENvdW50OworCitwcml2YXRlOgorICAgIGJvb2wgbV9ydW5GaW5kVW50aWxDb21wbGV0aW9u
OworCisgICAgc3RhdGljIHZvaWQgZm91bmRUZXh0Q2FsbGJhY2soV2ViS2l0RmluZENvbnRyb2xs
ZXIqLCBndWludCBtYXRjaENvdW50LCBGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QpCisgICAgewor
ICAgICAgICB0ZXN0LT5tX3RleHRGb3VuZCA9IHRydWU7CisgICAgICAgIHRlc3QtPm1fbWF0Y2hD
b3VudCA9IG1hdGNoQ291bnQ7CisgICAgICAgIGlmICh0ZXN0LT5tX3J1bkZpbmRVbnRpbENvbXBs
ZXRpb24pCisgICAgICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOwor
ICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGZhaWxlZFRvRmluZFRleHRDYWxsYmFjayhXZWJLaXRG
aW5kQ29udHJvbGxlciosIEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAg
IHRlc3QtPm1fdGV4dEZvdW5kID0gZmFsc2U7CisgICAgICAgIGlmICh0ZXN0LT5tX3J1bkZpbmRV
bnRpbENvbXBsZXRpb24pCisgICAgICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFp
bkxvb3ApOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGNvdW50ZWRNYXRjaGVzQ2FsbGJhY2so
V2ViS2l0RmluZENvbnRyb2xsZXIqLCBndWludCBtYXRjaENvdW50LCBGaW5kQ29udHJvbGxlclRl
c3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT5tX21hdGNoQ291bnQgPSBtYXRjaENvdW50
OworICAgICAgICBpZiAodGVzdC0+bV9ydW5GaW5kVW50aWxDb21wbGV0aW9uKQorICAgICAgICAg
ICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9Cit9OworCitzdGF0
aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xsZXJUZXh0Rm91bmQoRmluZENvbnRyb2xsZXJUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRIdG1sKHRlc3RTdHJpbmcsIDAp
OworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+ZmluZCgi
dGVzdGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwgMSk7CisgICAgdGVzdC0+d2FpdFVu
dGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7Cit9
CisKK3N0YXRpYyB2b2lkIHRlc3RGaW5kQ29udHJvbGxlclRleHROb3RGb3VuZChGaW5kQ29udHJv
bGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwodGVz
dFN0cmluZywgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0
ZXN0LT5maW5kKCJub3RGb3VuZCIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwgMSk7CisgICAg
dGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCghdGVzdC0+bV90
ZXh0Rm91bmQpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xsZXJNYXRjaENvdW50
KEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5s
b2FkSHRtbCh0ZXN0U3RyaW5nLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQo
KTsKKworICAgIHRlc3QtPmZpbmQoInRlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUs
IDIpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQo
dGVzdC0+bV9tYXRjaENvdW50ID09IDIpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5k
KTsKK30KKworc3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVyTWF4TWF0Y2hDb3VudChGaW5k
Q29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0
bWwodGVzdFN0cmluZywgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisK
KyAgICB0ZXN0LT5maW5kKCJ0ZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAxKTsK
KyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3Qt
Pm1fbWF0Y2hDb3VudCA9PSBHX01BWFVJTlQpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZv
dW5kKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVyTmV4dChGaW5kQ29udHJv
bGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwodGVz
dFN0cmluZywgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0
ZXN0LT5maW5kKCJ0ZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAyKTsKKyAgICB0
ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4
dEZvdW5kKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX21hdGNoQ291bnQgPT0gMik7CisKKyAgICB3
ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF9uZXh0KHRlc3QtPm1fZmluZENvbnRyb2xsZXIu
Z2V0KCkpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3Nl
cnQodGVzdC0+bV90ZXh0Rm91bmQpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fbWF0Y2hDb3VudCA9
PSAxKTsKKyAgICBnX2Fzc2VydCghKHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X29wdGlvbnMo
dGVzdC0+bV9maW5kQ29udHJvbGxlci5nZXQoKSkgJiBXRUJLSVRfRklORF9PUFRJT05TX0JBQ0tX
QVJEUykpOworCisgICAgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfbmV4dCh0ZXN0LT5t
X2ZpbmRDb250cm9sbGVyLmdldCgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQo
KTsKKworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX3RleHRGb3VuZCk7CisgICAgZ19hc3NlcnQodGVz
dC0+bV9tYXRjaENvdW50ID09IDEpOworICAgIGdfYXNzZXJ0KCEod2Via2l0X2ZpbmRfY29udHJv
bGxlcl9nZXRfb3B0aW9ucyh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKSAmIFdFQktJVF9G
SU5EX09QVElPTlNfQkFDS1dBUkRTKSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RGaW5kQ29udHJv
bGxlclByZXZpb3VzKEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sK
KyAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0U3RyaW5nLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxM
b2FkRmluaXNoZWQoKTsKKworICAgIHRlc3QtPmZpbmQoInRlc3RpbmciLCBXRUJLSVRfRklORF9P
UFRJT05TX05PTkUsIDIpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworCisg
ICAgZ19hc3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09IDIpOworICAgIGdfYXNzZXJ0KHRlc3Qt
Pm1fdGV4dEZvdW5kKTsKKworICAgIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX25leHQo
dGVzdC0+bV9maW5kQ29udHJvbGxlci5nZXQoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZp
bmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7CisgICAgZ19hc3Nl
cnQodGVzdC0+bV9tYXRjaENvdW50ID09IDEpOworICAgIGdfYXNzZXJ0KCEod2Via2l0X2ZpbmRf
Y29udHJvbGxlcl9nZXRfb3B0aW9ucyh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKSAmIFdF
QktJVF9GSU5EX09QVElPTlNfQkFDS1dBUkRTKSk7CisKKyAgICB3ZWJraXRfZmluZF9jb250cm9s
bGVyX3NlYXJjaF9wcmV2aW91cyh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKTsKKyAgICB0
ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4
dEZvdW5kKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX21hdGNoQ291bnQgPT0gMSk7CisgICAgZ19h
c3NlcnQod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfb3B0aW9ucyh0ZXN0LT5tX2ZpbmRDb250
cm9sbGVyLmdldCgpKSAmIFdFQktJVF9GSU5EX09QVElPTlNfQkFDS1dBUkRTKTsKK30KKworc3Rh
dGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVyQ291bnRlZE1hdGNoZXMoRmluZENvbnRyb2xsZXJU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRIdG1sKHRlc3RTdHJp
bmcsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+
Y291bnQoInRlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUsIDIpOworICAgIHRlc3Qt
PndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQodGVzdC0+bV9tYXRjaENv
dW50ID09IDIpOworCisgICAgdGVzdC0+Y291bnQoImZpcnN0IiwgV0VCS0lUX0ZJTkRfT1BUSU9O
U19OT05FLCAyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdf
YXNzZXJ0KHRlc3QtPm1fbWF0Y2hDb3VudCA9PSAxKTsKKworICAgIHRlc3QtPmNvdW50KCJub3RG
b3VuZCIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwgMik7CisgICAgdGVzdC0+d2FpdFVudGls
RmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCghdGVzdC0+bV9tYXRjaENvdW50KTsKK30K
Kworc3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVyT3B0aW9ucyhGaW5kQ29udHJvbGxlclRl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwodGVzdFN0cmlu
ZywgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5m
aW5kKCJUZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAyKTsKKyAgICB0ZXN0LT53
YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX3RleHRGb3Vu
ZCk7CisKKyAgICB0ZXN0LT5maW5kKCJUZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19DQVNF
X0lOU0VOU0lUSVZFLCAyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKwor
ICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKKworICAgIHRlc3QtPmZpbmQoImVzdGlu
ZyIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwgMik7CisgICAgdGVzdC0+d2FpdFVudGlsRmlu
ZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7CisKKyAgICB0
ZXN0LT5maW5kKCJlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05TX0FUX1dPUkRfU1RBUlRTLCAy
KTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KCF0
ZXN0LT5tX3RleHRGb3VuZCk7CisKKyAgICB0ZXN0LT5maW5kKCJIYWxmIiwgV0VCS0lUX0ZJTkRf
T1BUSU9OU19BVF9XT1JEX1NUQVJUUywgMik7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlz
aGVkKCk7CisKKyAgICBnX2Fzc2VydCghdGVzdC0+bV90ZXh0Rm91bmQpOworCisgICAgdGVzdC0+
ZmluZCgiSGFsZiIsIFdFQktJVF9GSU5EX09QVElPTlNfQVRfV09SRF9TVEFSVFMgfCBXRUJLSVRf
RklORF9PUFRJT05TX1RSRUFUX01FRElBTF9DQVBJVEFMX0FTX1dPUkRfU1RBUlQsIDIpOworICAg
IHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQodGVzdC0+bV90
ZXh0Rm91bmQpOworCisgICAgdGVzdC0+ZmluZCgidGVzdGluZyIsIFdFQktJVF9GSU5EX09QVElP
TlNfV1JBUF9BUk9VTkQsIDMpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOwor
ICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKKworICAgIHdlYmtpdF9maW5kX2NvbnRy
b2xsZXJfc2VhcmNoX25leHQodGVzdC0+bV9maW5kQ29udHJvbGxlci5nZXQoKSk7CisgICAgdGVz
dC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91
bmQpOworCisgICAgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfbmV4dCh0ZXN0LT5tX2Zp
bmRDb250cm9sbGVyLmdldCgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsK
KyAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RG
aW5kQ29udHJvbGxlckhpZGUoRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVy
KQoreworICAgIHRlc3QtPmxvYWRIdG1sKHRlc3RTdHJpbmcsIDApOworICAgIHRlc3QtPndhaXRV
bnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGls
TWFwcGVkKCk7CisKKyAgICBjYWlyb19zdXJmYWNlX3QqIG9yaWdpbmFsU3VyZmFjZSA9IGNhaXJv
X3N1cmZhY2VfcmVmZXJlbmNlKAorICAgICAgICB0ZXN0LT5nZXRTbmFwc2hvdEFuZFdhaXRVbnRp
bFJlYWR5KFdFQktJVF9TTkFQU0hPVF9SRUdJT05fRlVMTF9ET0NVTUVOVCwgV0VCS0lUX1NOQVBT
SE9UX09QVElPTlNfTk9ORSkpOworICAgIGdfYXNzZXJ0KG9yaWdpbmFsU3VyZmFjZSk7CisKKyAg
ICB0ZXN0LT5maW5kKCJ0ZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAxKTsKKyAg
ICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3Rl
eHRGb3VuZCk7CisKKyAgICBjYWlyb19zdXJmYWNlX3QqIGhpZ2hsaWdodFN1cmZhY2UgPSBjYWly
b19zdXJmYWNlX3JlZmVyZW5jZSgKKyAgICAgICAgdGVzdC0+Z2V0U25hcHNob3RBbmRXYWl0VW50
aWxSZWFkeShXRUJLSVRfU05BUFNIT1RfUkVHSU9OX0ZVTExfRE9DVU1FTlQsIFdFQktJVF9TTkFQ
U0hPVF9PUFRJT05TX05PTkUpKTsKKyAgICBnX2Fzc2VydChoaWdobGlnaHRTdXJmYWNlKTsKKyAg
ICBnX2Fzc2VydCghVGVzdDo6Y2Fpcm9TdXJmYWNlc0VxdWFsKG9yaWdpbmFsU3VyZmFjZSwgaGln
aGxpZ2h0U3VyZmFjZSkpOworCisgICAgV2ViS2l0RmluZENvbnRyb2xsZXIqIGZpbmRDb250cm9s
bGVyID0gd2Via2l0X3dlYl92aWV3X2dldF9maW5kX2NvbnRyb2xsZXIodGVzdC0+bV93ZWJWaWV3
KTsKKyAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF9maW5pc2goZmluZENvbnRyb2xs
ZXIpOworICAgIHdlYmtpdF93ZWJfdmlld19leGVjdXRlX2VkaXRpbmdfY29tbWFuZCh0ZXN0LT5t
X3dlYlZpZXcsICJVbnNlbGVjdCIpOworCisgICAgY2Fpcm9fc3VyZmFjZV90KiB1bmhpZ2hsaWdo
dFN1cmZhY2UgPSBjYWlyb19zdXJmYWNlX3JlZmVyZW5jZSgKKyAgICAgICAgdGVzdC0+Z2V0U25h
cHNob3RBbmRXYWl0VW50aWxSZWFkeShXRUJLSVRfU05BUFNIT1RfUkVHSU9OX0ZVTExfRE9DVU1F
TlQsIFdFQktJVF9TTkFQU0hPVF9PUFRJT05TX05PTkUpKTsKKyAgICBnX2Fzc2VydCh1bmhpZ2hs
aWdodFN1cmZhY2UpOworICAgIGdfYXNzZXJ0KFRlc3Q6OmNhaXJvU3VyZmFjZXNFcXVhbChvcmln
aW5hbFN1cmZhY2UsIHVuaGlnaGxpZ2h0U3VyZmFjZSkpOworCisgICAgY2Fpcm9fc3VyZmFjZV9k
ZXN0cm95KG9yaWdpbmFsU3VyZmFjZSk7CisgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KGhpZ2hs
aWdodFN1cmZhY2UpOworICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveSh1bmhpZ2hsaWdodFN1cmZh
Y2UpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xsZXJJbnN0YW5jZShGaW5kQ29u
dHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgV2ViS2l0RmluZENvbnRy
b2xsZXIqIGZpbmRDb250cm9sbGVyMSA9IHdlYmtpdF93ZWJfdmlld19nZXRfZmluZF9jb250cm9s
bGVyKHRlc3QtPm1fd2ViVmlldyk7CisgICAgV2ViS2l0RmluZENvbnRyb2xsZXIqIGZpbmRDb250
cm9sbGVyMiA9IHdlYmtpdF93ZWJfdmlld19nZXRfZmluZF9jb250cm9sbGVyKHRlc3QtPm1fd2Vi
Vmlldyk7CisKKyAgICBnX2Fzc2VydChmaW5kQ29udHJvbGxlcjEgPT0gZmluZENvbnRyb2xsZXIy
KTsKK30KKworc3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVyR2V0dGVycyhGaW5kQ29udHJv
bGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgY29uc3QgY2hhciogc2VhcmNo
VGV4dCA9ICJ0ZXN0aW5nIjsKKyAgICBndWludCBtYXhNYXRjaENvdW50ID0gMTsKKyAgICBndWlu
dDMyIGZpbmRPcHRpb25zID0gV0VCS0lUX0ZJTkRfT1BUSU9OU19XUkFQX0FST1VORCB8IFdFQktJ
VF9GSU5EX09QVElPTlNfQVRfV09SRF9TVEFSVFM7CisgICAgV2ViS2l0RmluZENvbnRyb2xsZXIq
IGZpbmRDb250cm9sbGVyID0gd2Via2l0X3dlYl92aWV3X2dldF9maW5kX2NvbnRyb2xsZXIodGVz
dC0+bV93ZWJWaWV3KTsKKworICAgIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoKGZpbmRD
b250cm9sbGVyLCBzZWFyY2hUZXh0LCBmaW5kT3B0aW9ucywgbWF4TWF0Y2hDb3VudCk7CisgICAg
Z19hc3NlcnQod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfd2ViX3ZpZXcoZmluZENvbnRyb2xs
ZXIpID09IHRlc3QtPm1fd2ViVmlldyk7CisgICAgZ19hc3NlcnQoIWdfc3RyY21wMCh3ZWJraXRf
ZmluZF9jb250cm9sbGVyX2dldF9zZWFyY2hfdGV4dChmaW5kQ29udHJvbGxlciksIHNlYXJjaFRl
eHQpKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9tYXhfbWF0Y2hf
Y291bnQoZmluZENvbnRyb2xsZXIpID09IG1heE1hdGNoQ291bnQpOworICAgIGdfYXNzZXJ0KHdl
YmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X29wdGlvbnMoZmluZENvbnRyb2xsZXIpID09IGZpbmRP
cHRpb25zKTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQoreworICAgIEZpbmRDb250cm9sbGVyVGVz
dDo6YWRkKCJXZWJLaXRGaW5kQ29udHJvbGxlciIsICJnZXR0ZXJzIiwgdGVzdEZpbmRDb250cm9s
bGVyR2V0dGVycyk7CisgICAgRmluZENvbnRyb2xsZXJUZXN0OjphZGQoIldlYktpdEZpbmRDb250
cm9sbGVyIiwgImluc3RhbmNlIiwgdGVzdEZpbmRDb250cm9sbGVySW5zdGFuY2UpOworICAgIEZp
bmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udHJvbGxlciIsICJ0ZXh0LWZvdW5k
IiwgdGVzdEZpbmRDb250cm9sbGVyVGV4dEZvdW5kKTsKKyAgICBGaW5kQ29udHJvbGxlclRlc3Q6
OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIiLCAidGV4dC1ub3QtZm91bmQiLCB0ZXN0RmluZENv
bnRyb2xsZXJUZXh0Tm90Rm91bmQpOworICAgIEZpbmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJL
aXRGaW5kQ29udHJvbGxlciIsICJtYXRjaC1jb3VudCIsIHRlc3RGaW5kQ29udHJvbGxlck1hdGNo
Q291bnQpOworICAgIEZpbmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udHJvbGxl
ciIsICJtYXgtbWF0Y2gtY291bnQiLCB0ZXN0RmluZENvbnRyb2xsZXJNYXhNYXRjaENvdW50KTsK
KyAgICBGaW5kQ29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIiLCAibmV4
dCIsIHRlc3RGaW5kQ29udHJvbGxlck5leHQpOworICAgIEZpbmRDb250cm9sbGVyVGVzdDo6YWRk
KCJXZWJLaXRGaW5kQ29udHJvbGxlciIsICJwcmV2aW91cyIsIHRlc3RGaW5kQ29udHJvbGxlclBy
ZXZpb3VzKTsKKyAgICBGaW5kQ29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRyb2xs
ZXIiLCAiY291bnRlZC1tYXRjaGVzIiwgdGVzdEZpbmRDb250cm9sbGVyQ291bnRlZE1hdGNoZXMp
OworICAgIEZpbmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udHJvbGxlciIsICJv
cHRpb25zIiwgdGVzdEZpbmRDb250cm9sbGVyT3B0aW9ucyk7CisgICAgRmluZENvbnRyb2xsZXJU
ZXN0OjphZGQoIldlYktpdEZpbmRDb250cm9sbGVyIiwgImhpZGUiLCB0ZXN0RmluZENvbnRyb2xs
ZXJIaWRlKTsKK30KKwordm9pZCBhZnRlckFsbCgpCit7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFBvbGljeUNsaWVudC5jcHAg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFBvbGljeUNs
aWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMjA5ZWEwNDVlMTZmN2NlMmJlNDIwM2E0NTA4ODhiYmUzYjNh
MTAyYwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Mkd0ay9UZXN0V2ViS2l0UG9saWN5Q2xpZW50LmNwcApAQCAtMCwwICsxLDI2NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
bmNsdWRlICJMb2FkVHJhY2tpbmdUZXN0LmgiCisjaW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5o
IgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisKK3N0YXRpYyBXZWJLaXRUZXN0U2VydmVyKiBrU2VydmVyOworCitjbGFzcyBQ
b2xpY3lDbGllbnRUZXN0OiBwdWJsaWMgTG9hZFRyYWNraW5nVGVzdCB7CitwdWJsaWM6CisgICAg
TUFLRV9HTElCX1RFU1RfRklYVFVSRShQb2xpY3lDbGllbnRUZXN0KTsKKworICAgIGVudW0gUG9s
aWN5RGVjaXNpb25SZXNwb25zZSB7CisgICAgICAgIFVzZSwKKyAgICAgICAgSWdub3JlLAorICAg
ICAgICBEb3dubG9hZCwKKyAgICAgICAgTm9uZQorICAgIH07CisKKyAgICBQb2xpY3lDbGllbnRU
ZXN0KCkKKyAgICAgICAgOiBMb2FkVHJhY2tpbmdUZXN0KCkKKyAgICAgICAgLCBtX3BvbGljeURl
Y2lzaW9uUmVzcG9uc2UoTm9uZSkKKyAgICAgICAgLCBtX3BvbGljeURlY2lzaW9uVHlwZUZpbHRl
cigwKQorICAgICAgICAsIG1fcmVzcG9uZFRvUG9saWN5RGVjaXNpb25Bc3luY2hyb25vdXNseShm
YWxzZSkKKyAgICAgICAgLCBtX2hhbHRNYWluTG9vcEFmdGVyTWFraW5nRGVjaXNpb24oZmFsc2Up
CisgICAgeworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImRlY2lkZS1wb2xp
Y3kiLCBHX0NBTExCQUNLKGRlY2lkZVBvbGljeUNhbGxiYWNrKSwgdGhpcyk7CisgICAgfQorCisg
ICAgc3RhdGljIGdib29sZWFuIHF1aXRNYWluTG9vcExhdGVyKEdNYWluTG9vcCogbG9vcCkKKyAg
ICB7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7CisgICAgICAgIHJldHVybiBGQUxT
RTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZXNwb25kVG9Qb2xpY3lEZWNpc2lvbihQb2xp
Y3lDbGllbnRUZXN0KiB0ZXN0LCBXZWJLaXRQb2xpY3lEZWNpc2lvbiogZGVjaXNpb24pCisgICAg
eworICAgICAgICBzd2l0Y2ggKHRlc3QtPm1fcG9saWN5RGVjaXNpb25SZXNwb25zZSkgeworICAg
ICAgICBjYXNlIFVzZToKKyAgICAgICAgICAgIHdlYmtpdF9wb2xpY3lfZGVjaXNpb25fdXNlKGRl
Y2lzaW9uKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElnbm9yZToKKyAgICAg
ICAgICAgIHdlYmtpdF9wb2xpY3lfZGVjaXNpb25faWdub3JlKGRlY2lzaW9uKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIERvd25sb2FkOgorICAgICAgICAgICAgd2Via2l0X3Bv
bGljeV9kZWNpc2lvbl9kb3dubG9hZChkZWNpc2lvbik7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBOb25lOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAodGVzdC0+bV9oYWx0TWFpbkxvb3BBZnRlck1ha2luZ0RlY2lzaW9uKQorICAgICAgICAg
ICAgZ19pZGxlX2FkZChyZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihxdWl0TWFpbkxvb3BM
YXRlciksIHRlc3QtPm1fbWFpbkxvb3ApOworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBy
ZXNwb25kVG9Qb2xpY3lEZWNpc2lvbkxhdGVyKFBvbGljeUNsaWVudFRlc3QqIHRlc3QpCisgICAg
eworICAgICAgICByZXNwb25kVG9Qb2xpY3lEZWNpc2lvbih0ZXN0LCB0ZXN0LT5tX3ByZXZpb3Vz
UG9saWN5RGVjaXNpb24uZ2V0KCkpOworICAgICAgICB0ZXN0LT5tX3ByZXZpb3VzUG9saWN5RGVj
aXNpb24gPSAwOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgc3RhdGljIGdi
b29sZWFuIGRlY2lkZVBvbGljeUNhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktp
dFBvbGljeURlY2lzaW9uKiBkZWNpc2lvbiwgV2ViS2l0UG9saWN5RGVjaXNpb25UeXBlIHR5cGUs
IFBvbGljeUNsaWVudFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICBpZiAodGVzdC0+bV9wb2xp
Y3lEZWNpc2lvblR5cGVGaWx0ZXIgIT0gdHlwZSkKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsK
KworICAgICAgICB0ZXN0LT5tX3ByZXZpb3VzUG9saWN5RGVjaXNpb24gPSBkZWNpc2lvbjsKKyAg
ICAgICAgaWYgKHRlc3QtPm1fcmVzcG9uZFRvUG9saWN5RGVjaXNpb25Bc3luY2hyb25vdXNseSkg
eworICAgICAgICAgICAgZ19pZGxlX2FkZChyZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihy
ZXNwb25kVG9Qb2xpY3lEZWNpc2lvbkxhdGVyKSwgdGVzdCk7CisgICAgICAgICAgICByZXR1cm4g
VFJVRTsKKyAgICAgICAgfQorCisgICAgICAgIHJlc3BvbmRUb1BvbGljeURlY2lzaW9uKHRlc3Qs
IGRlY2lzaW9uKTsKKworICAgICAgICAvLyBXZSByZXR1cm4gRkFMU0UgaGVyZSB0byBlbnN1cmUg
dGhhdCB0aGUgZGVmYXVsdCBwb2xpY3kgZGVjaXNpb24KKyAgICAgICAgLy8gaGFuZGxlciBkb2Vz
bid0IG92ZXJyaWRlIHdoYXRldmVyIHdlIHVzZSBoZXJlLgorICAgICAgICByZXR1cm4gRkFMU0U7
CisgICAgfQorCisgICAgUG9saWN5RGVjaXNpb25SZXNwb25zZSBtX3BvbGljeURlY2lzaW9uUmVz
cG9uc2U7CisgICAgaW50IG1fcG9saWN5RGVjaXNpb25UeXBlRmlsdGVyOworICAgIGJvb2wgbV9y
ZXNwb25kVG9Qb2xpY3lEZWNpc2lvbkFzeW5jaHJvbm91c2x5OworICAgIGJvb2wgbV9oYWx0TWFp
bkxvb3BBZnRlck1ha2luZ0RlY2lzaW9uOworICAgIEdSZWZQdHI8V2ViS2l0UG9saWN5RGVjaXNp
b24+IG1fcHJldmlvdXNQb2xpY3lEZWNpc2lvbjsKK307CisKK3N0YXRpYyB2b2lkIHRlc3ROYXZp
Z2F0aW9uUG9saWN5KFBvbGljeUNsaWVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7Cisg
ICAgdGVzdC0+bV9wb2xpY3lEZWNpc2lvblR5cGVGaWx0ZXIgPSBXRUJLSVRfUE9MSUNZX0RFQ0lT
SU9OX1RZUEVfTkFWSUdBVElPTl9BQ1RJT047CisKKyAgICB0ZXN0LT5tX3BvbGljeURlY2lzaW9u
UmVzcG9uc2UgPSBQb2xpY3lDbGllbnRUZXN0OjpVc2U7CisgICAgdGVzdC0+bG9hZEh0bWwoIjxo
dG1sLz4iLCAiaHR0cDovL3dlYmtpdGd0ay5vcmcvIik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9h
ZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50cy5zaXpl
KCksID09LCAzKTsKKworICAgIC8vIElkZWFsbHkgd2UnZCBsaWtlIHRvIGhhdmUgYSBtb3JlIGlu
dGVuc2l2ZSB0ZXN0IGhlcmUsIGJ1dCBpdCdzIHN0aWxsIHByZXR0eSB0cmlja3kKKyAgICAvLyB0
byB0cmlnZ2VyIGRpZmZlcmVudCB0eXBlcyBvZiBuYXZpZ2F0aW9ucyB3aXRoIHRoZSBHVEsrIFdl
YktpdDIgQVBJLgorICAgIFdlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbiogZGVjaXNpb24g
PSBXRUJLSVRfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJT04odGVzdC0+bV9wcmV2aW91c1BvbGlj
eURlY2lzaW9uLmdldCgpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X25hdmlnYXRpb25f
cG9saWN5X2RlY2lzaW9uX2dldF9uYXZpZ2F0aW9uX3R5cGUoZGVjaXNpb24pLCA9PSwgV0VCS0lU
X05BVklHQVRJT05fVFlQRV9PVEhFUik7CisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9uYXZp
Z2F0aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRfbW91c2VfYnV0dG9uKGRlY2lzaW9uKSwgPT0sIDAp
OworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25f
Z2V0X21vZGlmaWVycyhkZWNpc2lvbiksID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Vi
a2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF9mcmFtZV9uYW1lKGRlY2lzaW9uKSwg
PT0sIDApOworICAgIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QgPSB3ZWJraXRfbmF2aWdhdGlv
bl9wb2xpY3lfZGVjaXNpb25fZ2V0X3JlcXVlc3QoZGVjaXNpb24pOworICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KSwgPT0sICJodHRwOi8vd2Vi
a2l0Z3RrLm9yZy8iKTsKKworICAgIHRlc3QtPm1fcG9saWN5RGVjaXNpb25SZXNwb25zZSA9IFBv
bGljeUNsaWVudFRlc3Q6OlVzZTsKKyAgICB0ZXN0LT5tX3Jlc3BvbmRUb1BvbGljeURlY2lzaW9u
QXN5bmNocm9ub3VzbHkgPSB0cnVlOworICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbC8+IiwgImh0
dHA6Ly93ZWJraXRndGsub3JnLyIpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgp
OworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHMuc2l6ZSgpLCA9PSwgMyk7
CisKKyAgICAvLyBJZiB3ZSBhcmUgd2FpdGluZyB1bnRpbCBsb2FkIGNvbXBsZXRpb24sIGl0IHdp
bGwgbmV2ZXIgY29tcGxldGUgaWYgd2UgaWdub3JlIHRoZQorICAgIC8vIG5hdmlnYXRpb24uIFNv
IHdlIHRlbGwgdGhlIG1haW4gbG9vcCB0byBxdWl0IHNvbWV0aW1lIGxhdGVyLgorICAgIHRlc3Qt
Pm1fcG9saWN5RGVjaXNpb25SZXNwb25zZSA9IFBvbGljeUNsaWVudFRlc3Q6Oklnbm9yZTsKKyAg
ICB0ZXN0LT5tX3Jlc3BvbmRUb1BvbGljeURlY2lzaW9uQXN5bmNocm9ub3VzbHkgPSBmYWxzZTsK
KyAgICB0ZXN0LT5tX2hhbHRNYWluTG9vcEFmdGVyTWFraW5nRGVjaXNpb24gPSB0cnVlOworICAg
IHRlc3QtPmxvYWRIdG1sKCI8aHRtbC8+IiwgImh0dHA6Ly93ZWJraXRndGsub3JnLyIpOworICAg
IHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0
LT5tX2xvYWRFdmVudHMuc2l6ZSgpLCA9PSwgMCk7CisKKyAgICB0ZXN0LT5tX3BvbGljeURlY2lz
aW9uUmVzcG9uc2UgPSBQb2xpY3lDbGllbnRUZXN0OjpJZ25vcmU7CisgICAgdGVzdC0+bG9hZEh0
bWwoIjxodG1sLz4iLCAiaHR0cDovL3dlYmtpdGd0ay5vcmcvIik7CisgICAgdGVzdC0+d2FpdFVu
dGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50
cy5zaXplKCksID09LCAwKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFJlc3BvbnNlUG9saWN5KFBv
bGljeUNsaWVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bV9wb2xp
Y3lEZWNpc2lvblR5cGVGaWx0ZXIgPSBXRUJLSVRfUE9MSUNZX0RFQ0lTSU9OX1RZUEVfUkVTUE9O
U0U7CisKKyAgICB0ZXN0LT5tX3BvbGljeURlY2lzaW9uUmVzcG9uc2UgPSBQb2xpY3lDbGllbnRU
ZXN0OjpVc2U7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIiku
ZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0sIDMpOworICAgIGdfYXNzZXJ0
X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92
aXNpb25hbExvYWRTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZl
bnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZENvbW1pdHRlZCk7CisgICAgZ19hc3Nl
cnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6Okxv
YWRGaW5pc2hlZCk7CisKKyAgICBXZWJLaXRSZXNwb25zZVBvbGljeURlY2lzaW9uKiBkZWNpc2lv
biA9IFdFQktJVF9SRVNQT05TRV9QT0xJQ1lfREVDSVNJT04odGVzdC0+bV9wcmV2aW91c1BvbGlj
eURlY2lzaW9uLmdldCgpKTsKKyAgICBXZWJLaXRVUklSZXF1ZXN0KiByZXF1ZXN0ID0gd2Via2l0
X3Jlc3BvbnNlX3BvbGljeV9kZWNpc2lvbl9nZXRfcmVxdWVzdChkZWNpc2lvbik7CisgICAgZ19h
c3NlcnQoV0VCS0lUX0lTX1VSSV9SRVFVRVNUKHJlcXVlc3QpKTsKKyAgICBBU1NFUlRfQ01QX0NT
VFJJTkcod2Via2l0X3VyaV9yZXF1ZXN0X2dldF91cmkocmVxdWVzdCksID09LCBrU2VydmVyLT5n
ZXRVUklGb3JQYXRoKCIvIikpOworICAgIFdlYktpdFVSSVJlc3BvbnNlKiByZXNwb25zZSA9IHdl
YmtpdF9yZXNwb25zZV9wb2xpY3lfZGVjaXNpb25fZ2V0X3Jlc3BvbnNlKGRlY2lzaW9uKTsKKyAg
ICBnX2Fzc2VydChXRUJLSVRfSVNfVVJJX1JFU1BPTlNFKHJlc3BvbnNlKSk7CisgICAgQVNTRVJU
X0NNUF9DU1RSSU5HKHdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0X3VyaShyZXNwb25zZSksID09LCBr
U2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIikpOworICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmll
d19jYW5fc2hvd19taW1lX3R5cGUodGVzdC0+bV93ZWJWaWV3LCB3ZWJraXRfdXJpX3Jlc3BvbnNl
X2dldF9taW1lX3R5cGUocmVzcG9uc2UpKSA9PQorICAgICAgICB3ZWJraXRfcmVzcG9uc2VfcG9s
aWN5X2RlY2lzaW9uX2lzX21pbWVfdHlwZV9zdXBwb3J0ZWQoZGVjaXNpb24pKTsKKworICAgIHRl
c3QtPm1fcmVzcG9uZFRvUG9saWN5RGVjaXNpb25Bc3luY2hyb25vdXNseSA9IHRydWU7CisgICAg
dGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIikuZGF0YSgpKTsKKyAgICB0
ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+
bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0sIDMpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5t
X2xvYWRFdmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFy
dGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzFdLCA9PSwgTG9h
ZFRyYWNraW5nVGVzdDo6TG9hZENvbW1pdHRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3Qt
Pm1fbG9hZEV2ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7CisK
KyAgICB0ZXN0LT5tX3Jlc3BvbmRUb1BvbGljeURlY2lzaW9uQXN5bmNocm9ub3VzbHkgPSBmYWxz
ZTsKKyAgICB0ZXN0LT5tX3BvbGljeURlY2lzaW9uUmVzcG9uc2UgPSBQb2xpY3lDbGllbnRUZXN0
OjpJZ25vcmU7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIiku
ZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIGdfYXNz
ZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHMuc2l6ZSgpLCA9PSwgMyk7CisgICAgZ19hc3Nl
cnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1swXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlBy
b3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRF
dmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRGYWlsZWQpOwor
ICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMl0sID09LCBMb2FkVHJhY2tp
bmdUZXN0OjpMb2FkRmluaXNoZWQpOworfQorCitzdHJ1Y3QgQ3JlYXRlQ2FsbGJhY2tEYXRhIHsK
KyAgICBib29sIHRyaWVkVG9PcGVuV2luZG93OworICAgIEdNYWluTG9vcCogbWFpbkxvb3A7Cit9
OworCitzdGF0aWMgV2ViS2l0V2ViVmlldyogY3JlYXRlQ2FsbGJhY2soV2ViS2l0V2ViVmlldyog
d2ViVmlldywgQ3JlYXRlQ2FsbGJhY2tEYXRhKiBkYXRhKQoreworICAgIGRhdGEtPnRyaWVkVG9P
cGVuV2luZG93ID0gdHJ1ZTsKKyAgICBnX21haW5fbG9vcF9xdWl0KGRhdGEtPm1haW5Mb29wKTsK
KyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdGVzdE5ld1dpbmRvd1BvbGljeShQb2xp
Y3lDbGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHN0YXRpYyBjb25zdCBj
aGFyKiB3aW5kb3dPcGVuaW5nSFRNTCA9CisgICAgICAgICI8aHRtbD48Ym9keT4iCisgICAgICAg
ICIgICAgPGEgaWQ9XCJsaW5rXCIgaHJlZj1cImh0dHA6Ly93d3cuZ29vZ2xlLmNvbVwiIHRhcmdl
dD1cIl9ibGFua1wiPkxpbms8L2E+IgorICAgICAgICAiICAgIDxzY3JpcHQ+IgorICAgICAgICAi
ICAgICAgICB2YXIgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnTW91c2VFdmVudHMnKTsi
CisgICAgICAgICIgICAgICAgIGV2ZW50LmluaXRFdmVudCgnY2xpY2snLCB0cnVlLCBmYWxzZSk7
IgorICAgICAgICAiICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGluaycpLmRpc3Bh
dGNoRXZlbnQoZXZlbnQpOyIKKyAgICAgICAgIiAgICA8L3NjcmlwdD4iCisgICAgICAgICI8L2Jv
ZHk+PC9odG1sPiI7CisgICAgdGVzdC0+bV9wb2xpY3lEZWNpc2lvblR5cGVGaWx0ZXIgPSBXRUJL
SVRfUE9MSUNZX0RFQ0lTSU9OX1RZUEVfTkVXX1dJTkRPV19BQ1RJT047CisgICAgd2Via2l0X3Nl
dHRpbmdzX3NldF9qYXZhc2NyaXB0X2Nhbl9vcGVuX3dpbmRvd3NfYXV0b21hdGljYWxseSh3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHRlc3QtPm1fd2ViVmlldyksIFRSVUUpOworCisgICAg
Q3JlYXRlQ2FsbGJhY2tEYXRhIGRhdGE7CisgICAgZGF0YS50cmllZFRvT3BlbldpbmRvdyA9IGZh
bHNlOworICAgIGRhdGEubWFpbkxvb3AgPSB0ZXN0LT5tX21haW5Mb29wOworCisgICAgZ19zaWdu
YWxfY29ubmVjdCh0ZXN0LT5tX3dlYlZpZXcsICJjcmVhdGUiLCBHX0NBTExCQUNLKGNyZWF0ZUNh
bGxiYWNrKSwgJmRhdGEpOworICAgIHRlc3QtPm1fcG9saWN5RGVjaXNpb25SZXNwb25zZSA9IFBv
bGljeUNsaWVudFRlc3Q6OlVzZTsKKyAgICB0ZXN0LT5sb2FkSHRtbCh3aW5kb3dPcGVuaW5nSFRN
TCwgImh0dHA6Ly93ZWJraXRndGsub3JnLyIpOworICAgIHRlc3QtPndhaXQoMSk7CisgICAgZ19h
c3NlcnQoZGF0YS50cmllZFRvT3BlbldpbmRvdyk7CisKKyAgICBXZWJLaXROYXZpZ2F0aW9uUG9s
aWN5RGVjaXNpb24qIGRlY2lzaW9uID0gV0VCS0lUX05BVklHQVRJT05fUE9MSUNZX0RFQ0lTSU9O
KHRlc3QtPm1fcHJldmlvdXNQb2xpY3lEZWNpc2lvbi5nZXQoKSk7CisgICAgZ19hc3NlcnRfY21w
c3RyKHdlYmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRfZnJhbWVfbmFtZShkZWNp
c2lvbiksID09LCAiX2JsYW5rIik7CisKKyAgICAvLyBVc2luZyBhIHNob3J0IHRpbWVvdXQgaXMg
YSBiaXQgdWdseSBoZXJlLCBidXQgaXQncyBoYXJkIHRvIGdldCBhcm91bmQgYmVjYXVzZSBpZiB3
ZSBibG9jaworICAgIC8vIHRoZSBuZXcgd2luZG93IHNpZ25hbCB3ZSBjYW5ub3QgaGFsdCB0aGUg
bWFpbiBsb29wIGluIHRoZSBjcmVhdGUgY2FsbGJhY2suIElmIHdlCisgICAgLy8gaGFsdCB0aGUg
bWFpbiBsb29wIGluIHRoZSBwb2xpY3kgZGVjaXNpb24sIHRoZSBjcmVhdGUgY2FsbGJhY2sgbmV2
ZXIgZXhlY3V0ZXMuCisgICAgZGF0YS50cmllZFRvT3BlbldpbmRvdyA9IGZhbHNlOworICAgIHRl
c3QtPm1fcG9saWN5RGVjaXNpb25SZXNwb25zZSA9IFBvbGljeUNsaWVudFRlc3Q6Oklnbm9yZTsK
KyAgICB0ZXN0LT5sb2FkSHRtbCh3aW5kb3dPcGVuaW5nSFRNTCwgImh0dHA6Ly93ZWJraXRndGsu
b3JnLyIpOworICAgIHRlc3QtPndhaXQoLjIpOworICAgIGdfYXNzZXJ0KCFkYXRhLnRyaWVkVG9P
cGVuV2luZG93KTsKK30KKworc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciog
c2VydmVyLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJs
ZSosIFNvdXBDbGllbnRDb250ZXh0KiwgZ3BvaW50ZXIpCit7CisgICAgaWYgKG1lc3NhZ2UtPm1l
dGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0
dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiLyIpKSB7CisgICAgICAgIHN0
YXRpYyBjb25zdCBjaGFyKiByZXNwb25zZVN0cmluZyA9ICI8aHRtbD48Ym9keT5UZXN0aW5nITwv
Ym9keT48L2h0bWw+IjsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwg
U09VUF9TVEFUVVNfT0spOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2Fn
ZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCByZXNwb25zZVN0cmluZywgc3Ry
bGVuKHJlc3BvbnNlU3RyaW5nKSk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRl
KG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOworICAgIH0gZWxzZQorICAgICAgICBzb3VwX21lc3Nh
Z2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfRk9VTkQpOworfQorCit2b2lk
IGJlZm9yZUFsbCgpCit7CisgICAga1NlcnZlciA9IG5ldyBXZWJLaXRUZXN0U2VydmVyKCk7Cisg
ICAga1NlcnZlci0+cnVuKHNlcnZlckNhbGxiYWNrKTsKKworICAgIFBvbGljeUNsaWVudFRlc3Q6
OmFkZCgiV2ViS2l0UG9saWN5Q2xpZW50IiwgIm5hdmlnYXRpb24tcG9saWN5IiwgdGVzdE5hdmln
YXRpb25Qb2xpY3kpOworICAgIFBvbGljeUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0UG9saWN5Q2xp
ZW50IiwgInJlc3BvbnNlLXBvbGljeSIsIHRlc3RSZXNwb25zZVBvbGljeSk7CisgICAgUG9saWN5
Q2xpZW50VGVzdDo6YWRkKCJXZWJLaXRQb2xpY3lDbGllbnQiLCAibmV3LXdpbmRvdy1wb2xpY3ki
LCB0ZXN0TmV3V2luZG93UG9saWN5KTsKK30KKwordm9pZCBhZnRlckFsbCgpCit7CisgICAgZGVs
ZXRlIGtTZXJ2ZXI7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdDJHdGsvVGVzdFdlYktpdFNldHRpbmdzLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0U2V0dGluZ3MuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYwZjk2NGUz
NWY3MWYxMTRiY2FjMGUwNjg0MGM4MzU0NWMwNjJhYTUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFNldHRpbmdzLmNwcApA
QCAtMCwwICsxLDM3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMSBNb3Rvcm9sYSBNb2Jp
bGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZp
Y2F0aW9uLCAKKyAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIAorICogdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dCBub3RpY2UsIAorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IgCisgKiBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJp
YnV0b3JzIG1heSAKKyAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgCisgKiBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiAKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiAKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCAK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIAorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgCisgKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpbmNsdWRlICJUZXN0TWFpbi5oIgorI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCisj
aW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5oIgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNs
dWRlIDx3ZWJraXQyL3dlYmtpdDIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+
CisKK3N0YXRpYyBXZWJLaXRUZXN0U2VydmVyKiBnU2VydmVyOworCitzdGF0aWMgdm9pZCB0ZXN0
V2ViS2l0U2V0dGluZ3MoVGVzdCosIGdjb25zdHBvaW50ZXIpCit7CisgICAgV2ViS2l0U2V0dGlu
Z3MqIHNldHRpbmdzID0gd2Via2l0X3NldHRpbmdzX25ldygpOworCisgICAgLy8gSmF2YVNjcmlw
dCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dl
dF9lbmFibGVfamF2YXNjcmlwdChzZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRf
ZW5hYmxlX2phdmFzY3JpcHQoc2V0dGluZ3MsIEZBTFNFKTsKKyAgICBnX2Fzc2VydCghd2Via2l0
X3NldHRpbmdzX2dldF9lbmFibGVfamF2YXNjcmlwdChzZXR0aW5ncykpOworCisgICAgLy8gQnkg
ZGVmYXVsdCBhdXRvLWxvYWQtaW1hZ2UgaXMgdHJ1ZS4KKyAgICBnX2Fzc2VydCh3ZWJraXRfc2V0
dGluZ3NfZ2V0X2F1dG9fbG9hZF9pbWFnZXMoc2V0dGluZ3MpKTsKKyAgICB3ZWJraXRfc2V0dGlu
Z3Nfc2V0X2F1dG9fbG9hZF9pbWFnZXMoc2V0dGluZ3MsIEZBTFNFKTsKKyAgICBnX2Fzc2VydCgh
d2Via2l0X3NldHRpbmdzX2dldF9hdXRvX2xvYWRfaW1hZ2VzKHNldHRpbmdzKSk7CisKKyAgICAv
LyBsb2FkLWljb25zLWlnbm9yaW5nLWltYWdlLWxvYWQtc2V0dGluZyBpcyBmYWxzZSBieSBkZWZh
dWx0LgorICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2xvYWRfaWNvbnNfaWdub3Jp
bmdfaW1hZ2VfbG9hZF9zZXR0aW5nKHNldHRpbmdzKSk7CisgICAgd2Via2l0X3NldHRpbmdzX3Nl
dF9sb2FkX2ljb25zX2lnbm9yaW5nX2ltYWdlX2xvYWRfc2V0dGluZyhzZXR0aW5ncywgVFJVRSk7
CisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9sb2FkX2ljb25zX2lnbm9yaW5nX2lt
YWdlX2xvYWRfc2V0dGluZyhzZXR0aW5ncykpOworICAgIAorICAgIC8vIE9mZmxpbmUgYXBwbGlj
YXRpb24gY2FjaGUgaXMgdHJ1ZSBieSBkZWZhdWx0LgorICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0
aW5nc19nZXRfZW5hYmxlX29mZmxpbmVfd2ViX2FwcGxpY2F0aW9uX2NhY2hlKHNldHRpbmdzKSk7
CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfb2ZmbGluZV93ZWJfYXBwbGljYXRpb25f
Y2FjaGUoc2V0dGluZ3MsIEZBTFNFKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dl
dF9lbmFibGVfb2ZmbGluZV93ZWJfYXBwbGljYXRpb25fY2FjaGUoc2V0dGluZ3MpKTsKKworICAg
IC8vIExvY2FsIHN0b3JhZ2UgaXMgZW5hYmxlIGJ5IGRlZmF1bHQuCisgICAgZ19hc3NlcnQod2Vi
a2l0X3NldHRpbmdzX2dldF9lbmFibGVfaHRtbDVfbG9jYWxfc3RvcmFnZShzZXR0aW5ncykpOwor
ICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX2h0bWw1X2xvY2FsX3N0b3JhZ2Uoc2V0dGlu
Z3MsIEZBTFNFKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfaHRt
bDVfbG9jYWxfc3RvcmFnZShzZXR0aW5ncykpOworCisgICAgLy8gSFRNTDUgZGF0YWJhc2UgaXMg
ZW5hYmxlZCBieSBkZWZhdWx0LgorICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5h
YmxlX2h0bWw1X2RhdGFiYXNlKHNldHRpbmdzKSk7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9l
bmFibGVfaHRtbDVfZGF0YWJhc2Uoc2V0dGluZ3MsIEZBTFNFKTsKKyAgICBnX2Fzc2VydCghd2Vi
a2l0X3NldHRpbmdzX2dldF9lbmFibGVfaHRtbDVfZGF0YWJhc2Uoc2V0dGluZ3MpKTsKKworICAg
IC8vIFhTUyBBdWRpdG9yIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4KKyAgICBnX2Fzc2VydCh3ZWJr
aXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV94c3NfYXVkaXRvcihzZXR0aW5ncykpOworICAgIHdlYmtp
dF9zZXR0aW5nc19zZXRfZW5hYmxlX3hzc19hdWRpdG9yKHNldHRpbmdzLCBGQUxTRSk7CisgICAg
Z19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3hzc19hdWRpdG9yKHNldHRpbmdz
KSk7CisKKyAgICAvLyBGcmFtZSBmbGF0dGVuaW5nIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisg
ICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2ZyYW1lX2ZsYXR0ZW5pbmco
c2V0dGluZ3MpKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9mcmFtZV9mbGF0dGVu
aW5nKHNldHRpbmdzLCBUUlVFKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2Vu
YWJsZV9mcmFtZV9mbGF0dGVuaW5nKHNldHRpbmdzKSk7CisKKyAgICAvLyBQbHVnaW5zIGFyZSBl
bmFibGVkIGJ5IGRlZmF1bHQuCisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFi
bGVfcGx1Z2lucyhzZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX3Bs
dWdpbnMoc2V0dGluZ3MsIEZBTFNFKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dl
dF9lbmFibGVfcGx1Z2lucyhzZXR0aW5ncykpOworCisgICAgLy8gSmF2YSBpcyBlbmFibGVkIGJ5
IGRlZmF1bHQuCisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfamF2YShz
ZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX2phdmEoc2V0dGluZ3Ms
IEZBTFNFKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfamF2YShz
ZXR0aW5ncykpOworCisgICAgLy8gQnkgZGVmYXVsdCwgSmF2YVNjcmlwdCBjYW4gb3BlbiB3aW5k
b3dzIGF1dG9tYXRpY2FsbHkgaXMgZGlzYWJsZWQuCisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0
aW5nc19nZXRfamF2YXNjcmlwdF9jYW5fb3Blbl93aW5kb3dzX2F1dG9tYXRpY2FsbHkoc2V0dGlu
Z3MpKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2phdmFzY3JpcHRfY2FuX29wZW5fd2luZG93
c19hdXRvbWF0aWNhbGx5KHNldHRpbmdzLCBUUlVFKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfc2V0
dGluZ3NfZ2V0X2phdmFzY3JpcHRfY2FuX29wZW5fd2luZG93c19hdXRvbWF0aWNhbGx5KHNldHRp
bmdzKSk7CisKKyAgICAvLyBCeSBkZWZhdWx0IGh5cGVyIGxpbmsgYXVkaXRpbmcgaXMgZGlzYWJs
ZWQuCisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2h5cGVybGlua19h
dWRpdGluZyhzZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX2h5cGVy
bGlua19hdWRpdGluZyhzZXR0aW5ncywgVFJVRSk7CisgICAgZ19hc3NlcnQod2Via2l0X3NldHRp
bmdzX2dldF9lbmFibGVfaHlwZXJsaW5rX2F1ZGl0aW5nKHNldHRpbmdzKSk7CisKKyAgICAvLyBE
ZWZhdWx0IGZvbnQgZmFtaWx5IGlzICJzYW5zLXNlcmlmIi4KKyAgICBnX2Fzc2VydF9jbXBzdHIo
d2Via2l0X3NldHRpbmdzX2dldF9kZWZhdWx0X2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJz
YW5zLXNlcmlmIik7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9kZWZhdWx0X2ZvbnRfZmFtaWx5
KHNldHRpbmdzLCAibW9ub3NwYWNlIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zZXR0
aW5nc19nZXRfZGVmYXVsdF9mb250X2ZhbWlseShzZXR0aW5ncyksID09LCAibW9ub3NwYWNlIik7
CisKKyAgICAvLyBEZWZhdWx0IG1vbm9zcGFjZSBmb250IGZhbWlseSBmb250IGZhbWlseSBpcyAi
bW9ub3NwYWNlIi4KKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NldHRpbmdzX2dldF9tb25v
c3BhY2VfZm9udF9mYW1pbHkoc2V0dGluZ3MpLCA9PSwgIm1vbm9zcGFjZSIpOworICAgIHdlYmtp
dF9zZXR0aW5nc19zZXRfbW9ub3NwYWNlX2ZvbnRfZmFtaWx5KHNldHRpbmdzLCAic2Fucy1zZXJp
ZiIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2V0dGluZ3NfZ2V0X21vbm9zcGFjZV9m
b250X2ZhbWlseShzZXR0aW5ncyksID09LCAic2Fucy1zZXJpZiIpOworCisgICAgLy8gRGVmYXVs
dCBzZXJpZiBmb250IGZhbWlseSBpcyAic2VyaWYiLgorICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJr
aXRfc2V0dGluZ3NfZ2V0X3NlcmlmX2ZvbnRfZmFtaWx5KHNldHRpbmdzKSwgPT0sICJzZXJpZiIp
OworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfc2VyaWZfZm9udF9mYW1pbHkoc2V0dGluZ3MsICJz
YW5zLXNlcmlmIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zZXR0aW5nc19nZXRfc2Vy
aWZfZm9udF9mYW1pbHkoc2V0dGluZ3MpLCA9PSwgInNhbnMtc2VyaWYiKTsKKworICAgIC8vIERl
ZmF1bHQgc2FucyBzZXJpZiBmb250IGZhbWlseSBpcyAic2Fucy1zZXJpZiIuCisgICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF9zZXR0aW5nc19nZXRfc2Fuc19zZXJpZl9mb250X2ZhbWlseShzZXR0
aW5ncyksID09LCAic2Fucy1zZXJpZiIpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfc2Fuc19z
ZXJpZl9mb250X2ZhbWlseShzZXR0aW5ncywgInNlcmlmIik7CisgICAgZ19hc3NlcnRfY21wc3Ry
KHdlYmtpdF9zZXR0aW5nc19nZXRfc2Fuc19zZXJpZl9mb250X2ZhbWlseShzZXR0aW5ncyksID09
LCAic2VyaWYiKTsKKworICAgIC8vIERlZmF1bHQgY3Vyc2l2ZSBmb250IGZhbWlseSAic2VyaWYi
LgorICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2V0dGluZ3NfZ2V0X2N1cnNpdmVfZm9udF9m
YW1pbHkoc2V0dGluZ3MpLCA9PSwgInNlcmlmIik7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9j
dXJzaXZlX2ZvbnRfZmFtaWx5KHNldHRpbmdzLCAic2Fucy1zZXJpZiIpOworICAgIGdfYXNzZXJ0
X2NtcHN0cih3ZWJraXRfc2V0dGluZ3NfZ2V0X2N1cnNpdmVfZm9udF9mYW1pbHkoc2V0dGluZ3Mp
LCA9PSwgInNhbnMtc2VyaWYiKTsKKworICAgIC8vIERlZmF1bHQgZmFudGFzeSBmb250IGZhbWls
eSBpcyAic2VyaWYiLgorICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2V0dGluZ3NfZ2V0X2Zh
bnRhc3lfZm9udF9mYW1pbHkoc2V0dGluZ3MpLCA9PSwgInNlcmlmIik7CisgICAgd2Via2l0X3Nl
dHRpbmdzX3NldF9mYW50YXN5X2ZvbnRfZmFtaWx5KHNldHRpbmdzLCAic2Fucy1zZXJpZiIpOwor
ICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2V0dGluZ3NfZ2V0X2ZhbnRhc3lfZm9udF9mYW1p
bHkoc2V0dGluZ3MpLCA9PSwgInNhbnMtc2VyaWYiKTsKKworICAgIC8vIERlZmF1bHQgcGljdG9n
cmFwaCBmb250IGZhbWlseSBpcyAic2VyaWYiLgorICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRf
c2V0dGluZ3NfZ2V0X3BpY3RvZ3JhcGhfZm9udF9mYW1pbHkoc2V0dGluZ3MpLCA9PSwgInNlcmlm
Iik7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9waWN0b2dyYXBoX2ZvbnRfZmFtaWx5KHNldHRp
bmdzLCAic2Fucy1zZXJpZiIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2V0dGluZ3Nf
Z2V0X3BpY3RvZ3JhcGhfZm9udF9mYW1pbHkoc2V0dGluZ3MpLCA9PSwgInNhbnMtc2VyaWYiKTsK
KworICAgIC8vIERlZmF1bHQgZm9udCBzaXplIGlzIDE2LgorICAgIGdfYXNzZXJ0X2NtcHVpbnQo
d2Via2l0X3NldHRpbmdzX2dldF9kZWZhdWx0X2ZvbnRfc2l6ZShzZXR0aW5ncyksID09LCAxNik7
CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9kZWZhdWx0X2ZvbnRfc2l6ZShzZXR0aW5ncywgMTQp
OworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X3NldHRpbmdzX2dldF9kZWZhdWx0X2ZvbnRf
c2l6ZShzZXR0aW5ncyksID09LCAxNCk7CisKKyAgICAvLyBEZWZhdWx0IG1vbm9zcGFjZSBmb250
IHNpemUgaXMgMTMuCisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2Rl
ZmF1bHRfbW9ub3NwYWNlX2ZvbnRfc2l6ZShzZXR0aW5ncyksID09LCAxMyk7CisgICAgd2Via2l0
X3NldHRpbmdzX3NldF9kZWZhdWx0X21vbm9zcGFjZV9mb250X3NpemUoc2V0dGluZ3MsIDEwKTsK
KyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9zZXR0aW5nc19nZXRfZGVmYXVsdF9tb25vc3Bh
Y2VfZm9udF9zaXplKHNldHRpbmdzKSwgPT0sIDEwKTsKKworICAgIC8vIERlZmF1bHQgbWluaW11
bSBmb250IHNpemUgaXMgMC4KKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9zZXR0aW5nc19n
ZXRfbWluaW11bV9mb250X3NpemUoc2V0dGluZ3MpLCA9PSwgMCk7CisgICAgd2Via2l0X3NldHRp
bmdzX3NldF9taW5pbXVtX2ZvbnRfc2l6ZShzZXR0aW5ncywgNyk7CisgICAgZ19hc3NlcnRfY21w
dWludCh3ZWJraXRfc2V0dGluZ3NfZ2V0X21pbmltdW1fZm9udF9zaXplKHNldHRpbmdzKSwgPT0s
IDcpOworCisgICAgLy8gRGVmYXVsdCBjaGFyc2V0IGlzICJpc28tODg1OS0xIi4KKyAgICBnX2Fz
c2VydF9jbXBzdHIod2Via2l0X3NldHRpbmdzX2dldF9kZWZhdWx0X2NoYXJzZXQoc2V0dGluZ3Mp
LCA9PSwgImlzby04ODU5LTEiKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2RlZmF1bHRfY2hh
cnNldChzZXR0aW5ncywgInV0ZjgiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NldHRp
bmdzX2dldF9kZWZhdWx0X2NoYXJzZXQoc2V0dGluZ3MpLCA9PSwgInV0ZjgiKTsKKworICAgIGdf
YXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9wcml2YXRlX2Jyb3dzaW5nKHNldHRp
bmdzKSk7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfcHJpdmF0ZV9icm93c2luZyhz
ZXR0aW5ncywgVFJVRSk7CisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVf
cHJpdmF0ZV9icm93c2luZyhzZXR0aW5ncykpOworCisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0
aW5nc19nZXRfZW5hYmxlX2RldmVsb3Blcl9leHRyYXMoc2V0dGluZ3MpKTsKKyAgICB3ZWJraXRf
c2V0dGluZ3Nfc2V0X2VuYWJsZV9kZXZlbG9wZXJfZXh0cmFzKHNldHRpbmdzLCBUUlVFKTsKKyAg
ICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9kZXZlbG9wZXJfZXh0cmFzKHNl
dHRpbmdzKSk7CisKKyAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9yZXNp
emFibGVfdGV4dF9hcmVhcyhzZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5h
YmxlX3Jlc2l6YWJsZV90ZXh0X2FyZWFzKHNldHRpbmdzLCBGQUxTRSk7CisgICAgZ19hc3NlcnQo
IXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3Jlc2l6YWJsZV90ZXh0X2FyZWFzKHNldHRpbmdz
KSk7CisKKyAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV90YWJzX3RvX2xp
bmtzKHNldHRpbmdzKSk7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfdGFic190b19s
aW5rcyhzZXR0aW5ncywgRkFMU0UpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0
X2VuYWJsZV90YWJzX3RvX2xpbmtzKHNldHRpbmdzKSk7CisKKyAgICBnX2Fzc2VydCghd2Via2l0
X3NldHRpbmdzX2dldF9lbmFibGVfZG5zX3ByZWZldGNoaW5nKHNldHRpbmdzKSk7CisgICAgd2Vi
a2l0X3NldHRpbmdzX3NldF9lbmFibGVfZG5zX3ByZWZldGNoaW5nKHNldHRpbmdzLCBUUlVFKTsK
KyAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9kbnNfcHJlZmV0Y2hpbmco
c2V0dGluZ3MpKTsKKworICAgIC8vIENhcmV0IGJyb3dzaW5nIGlzIGRpc2FibGVkIGJ5IGRlZmF1
bHQuCisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2NhcmV0X2Jyb3dz
aW5nKHNldHRpbmdzKSk7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfY2FyZXRfYnJv
d3Npbmcoc2V0dGluZ3MsIFRSVUUpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRf
ZW5hYmxlX2NhcmV0X2Jyb3dzaW5nKHNldHRpbmdzKSk7CisKKyAgICAvLyBGdWxsc2NyZWVuIEph
dmFTY3JpcHQgQVBJIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4KKyAgICBnX2Fzc2VydCh3ZWJraXRf
c2V0dGluZ3NfZ2V0X2VuYWJsZV9mdWxsc2NyZWVuKHNldHRpbmdzKSk7CisgICAgd2Via2l0X3Nl
dHRpbmdzX3NldF9lbmFibGVfZnVsbHNjcmVlbihzZXR0aW5ncywgRkFMU0UpOworICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9mdWxsc2NyZWVuKHNldHRpbmdzKSk7CisK
KyAgICAvLyBQcmludCBiYWNrZ3JvdW5kcyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQKKyAgICBnX2Fz
c2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X3ByaW50X2JhY2tncm91bmRzKHNldHRpbmdzKSk7Cisg
ICAgd2Via2l0X3NldHRpbmdzX3NldF9wcmludF9iYWNrZ3JvdW5kcyhzZXR0aW5ncywgRkFMU0Up
OworICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X3ByaW50X2JhY2tncm91bmRzKHNl
dHRpbmdzKSk7CisKKyAgICAvLyBXZWJBdWRpbyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorICAg
IGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV93ZWJhdWRpbyhzZXR0aW5ncykp
OworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX3dlYmF1ZGlvKHNldHRpbmdzLCBUUlVF
KTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV93ZWJhdWRpbyhzZXR0
aW5ncykpOworCisgICAgLy8gV2ViR0wgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKyAgICBnX2Fz
c2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfd2ViZ2woc2V0dGluZ3MpKTsKKyAgICB3
ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV93ZWJnbChzZXR0aW5ncywgVFJVRSk7CisgICAgZ19h
c3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfd2ViZ2woc2V0dGluZ3MpKTsKKworICAg
IC8vIEFsbG93IE1vZGFsIERpYWxvZ3MgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKyAgICBnX2Fz
c2VydCghd2Via2l0X3NldHRpbmdzX2dldF9hbGxvd19tb2RhbF9kaWFsb2dzKHNldHRpbmdzKSk7
CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9hbGxvd19tb2RhbF9kaWFsb2dzKHNldHRpbmdzLCBU
UlVFKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2FsbG93X21vZGFsX2RpYWxv
Z3Moc2V0dGluZ3MpKTsKKworICAgIC8vIFpvb20gdGV4dCBvbmx5IGlzIGRpc2FibGVkIGJ5IGRl
ZmF1bHQuCisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0aW5nc19nZXRfem9vbV90ZXh0X29ubHko
c2V0dGluZ3MpKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X3pvb21fdGV4dF9vbmx5KHNldHRp
bmdzLCBUUlVFKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X3pvb21fdGV4dF9v
bmx5KHNldHRpbmdzKSk7CisKKyAgICAvLyBCeSBkZWZhdWx0LCBKYXZhU2NyaXB0IGNhbm5vdCBh
Y2Nlc3MgdGhlIGNsaXBib2FyZC4KKyAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9q
YXZhc2NyaXB0X2Nhbl9hY2Nlc3NfY2xpcGJvYXJkKHNldHRpbmdzKSk7CisgICAgd2Via2l0X3Nl
dHRpbmdzX3NldF9qYXZhc2NyaXB0X2Nhbl9hY2Nlc3NfY2xpcGJvYXJkKHNldHRpbmdzLCBUUlVF
KTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2phdmFzY3JpcHRfY2FuX2FjY2Vz
c19jbGlwYm9hcmQoc2V0dGluZ3MpKTsKKworICAgIC8vIEJ5IGRlZmF1bHQsIG1lZGlhIHBsYXli
YWNrIGRvZXNuJ3QgcmVxdWlyZSB1c2VyIGdlc3R1cmVzLgorICAgIGdfYXNzZXJ0KCF3ZWJraXRf
c2V0dGluZ3NfZ2V0X21lZGlhX3BsYXliYWNrX3JlcXVpcmVzX3VzZXJfZ2VzdHVyZShzZXR0aW5n
cykpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfbWVkaWFfcGxheWJhY2tfcmVxdWlyZXNfdXNl
cl9nZXN0dXJlKHNldHRpbmdzLCBUUlVFKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3Nf
Z2V0X21lZGlhX3BsYXliYWNrX3JlcXVpcmVzX3VzZXJfZ2VzdHVyZShzZXR0aW5ncykpOworCisg
ICAgLy8gQnkgZGVmYXVsdCwgaW5saW5lIG1lZGlhIHBsYXliYWNrIGlzIGFsbG93ZWQKKyAgICBn
X2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X21lZGlhX3BsYXliYWNrX2FsbG93c19pbmxpbmUo
c2V0dGluZ3MpKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X21lZGlhX3BsYXliYWNrX2FsbG93
c19pbmxpbmUoc2V0dGluZ3MsIEZBTFNFKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdz
X2dldF9tZWRpYV9wbGF5YmFja19hbGxvd3NfaW5saW5lKHNldHRpbmdzKSk7CisKKyAgICAvLyBC
eSBkZWZhdWx0LCBkZWJ1ZyBpbmRpY2F0b3JzIGFyZSBkaXNhYmxlZC4KKyAgICBnX2Fzc2VydCgh
d2Via2l0X3NldHRpbmdzX2dldF9kcmF3X2NvbXBvc2l0aW5nX2luZGljYXRvcnMoc2V0dGluZ3Mp
KTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2RyYXdfY29tcG9zaXRpbmdfaW5kaWNhdG9ycyhz
ZXR0aW5ncywgVFJVRSk7CisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9kcmF3X2Nv
bXBvc2l0aW5nX2luZGljYXRvcnMoc2V0dGluZ3MpKTsKKworICAgIC8vIEJ5IGRlZmF1bHQsIHNp
dGUgc3BlY2lmaWMgcXVpcmtzIGFyZSBkaXNhYmxlZC4KKyAgICBnX2Fzc2VydCghd2Via2l0X3Nl
dHRpbmdzX2dldF9lbmFibGVfc2l0ZV9zcGVjaWZpY19xdWlya3Moc2V0dGluZ3MpKTsKKyAgICB3
ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9zaXRlX3NwZWNpZmljX3F1aXJrcyhzZXR0aW5ncywg
VFJVRSk7CisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfc2l0ZV9zcGVj
aWZpY19xdWlya3Moc2V0dGluZ3MpKTsKKworICAgIC8vIEJ5IGRlZmF1bHQsIHBhZ2UgY2FjaGUg
aXMgZW5hYmxlZC4KKyAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9wYWdl
X2NhY2hlKHNldHRpbmdzKSk7CisgICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfcGFnZV9j
YWNoZShzZXR0aW5ncywgRkFMU0UpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0
X2VuYWJsZV9wYWdlX2NhY2hlKHNldHRpbmdzKSk7CisKKyAgICAvLyBCeSBkZWZhdWx0LCBzbW9v
dGggc2Nyb2xsaW5nIGlzIGRpc2FibGVkLgorICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3Nf
Z2V0X2VuYWJsZV9zbW9vdGhfc2Nyb2xsaW5nKHNldHRpbmdzKSk7CisgICAgd2Via2l0X3NldHRp
bmdzX3NldF9lbmFibGVfc21vb3RoX3Njcm9sbGluZyhzZXR0aW5ncywgVFJVRSk7CisgICAgZ19h
c3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfc21vb3RoX3Njcm9sbGluZyhzZXR0aW5n
cykpOworCisgICAgLy8gQnkgZGVmYXVsdCwgYWNjZWxlcmF0ZWQgMkQgY2FudmFzIGlzIGRpc2Fi
bGVkLgorICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9hY2NlbGVyYXRl
ZF8yZF9jYW52YXMoc2V0dGluZ3MpKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9h
Y2NlbGVyYXRlZF8yZF9jYW52YXMoc2V0dGluZ3MsIFRSVUUpOworICAgIGdfYXNzZXJ0KHdlYmtp
dF9zZXR0aW5nc19nZXRfZW5hYmxlX2FjY2VsZXJhdGVkXzJkX2NhbnZhcyhzZXR0aW5ncykpOwor
CisgICAgLy8gQnkgZGVmYXVsdCwgd3JpdGluZyBvZiBjb25zb2xlIG1lc3NhZ2VzIHRvIHN0ZG91
dCBpcyBkaXNhYmxlZC4KKyAgICBnX2Fzc2VydCghd2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVf
d3JpdGVfY29uc29sZV9tZXNzYWdlc190b19zdGRvdXQoc2V0dGluZ3MpKTsKKyAgICB3ZWJraXRf
c2V0dGluZ3Nfc2V0X2VuYWJsZV93cml0ZV9jb25zb2xlX21lc3NhZ2VzX3RvX3N0ZG91dChzZXR0
aW5ncywgVFJVRSk7CisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfd3Jp
dGVfY29uc29sZV9tZXNzYWdlc190b19zdGRvdXQoc2V0dGluZ3MpKTsKKworICAgIC8vIE1lZGlh
U3RyZWFtIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0
aW5nc19nZXRfZW5hYmxlX21lZGlhX3N0cmVhbShzZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0
aW5nc19zZXRfZW5hYmxlX21lZGlhX3N0cmVhbShzZXR0aW5ncywgVFJVRSk7CisgICAgZ19hc3Nl
cnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfbWVkaWFfc3RyZWFtKHNldHRpbmdzKSk7CisK
KyAgICAvLyBCeSBkZWZhdWx0LCBTcGF0aWFsTmF2aWdhdGlvbiBpcyBkaXNhYmxlZAorICAgIGdf
YXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9zcGF0aWFsX25hdmlnYXRpb24oc2V0
dGluZ3MpKTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9zcGF0aWFsX25hdmlnYXRp
b24oc2V0dGluZ3MsIFRSVUUpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5h
YmxlX3NwYXRpYWxfbmF2aWdhdGlvbihzZXR0aW5ncykpOworCisgICAgLy8gTWVkaWFTb3VyY2Ug
aXMgZGlzYWJsZWQgYnkgZGVmYXVsdAorICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0
X2VuYWJsZV9tZWRpYXNvdXJjZShzZXR0aW5ncykpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRf
ZW5hYmxlX21lZGlhc291cmNlKHNldHRpbmdzLCBUUlVFKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRf
c2V0dGluZ3NfZ2V0X2VuYWJsZV9tZWRpYXNvdXJjZShzZXR0aW5ncykpOworCisgICAgZ19vYmpl
Y3RfdW5yZWYoR19PQkpFQ1Qoc2V0dGluZ3MpKTsKK30KKwordm9pZCB0ZXN0V2ViS2l0U2V0dGlu
Z3NOZXdXaXRoU2V0dGluZ3MoVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBHUmVm
UHRyPFdlYktpdFNldHRpbmdzPiBzZXR0aW5ncyA9IGFkb3B0R1JlZih3ZWJraXRfc2V0dGluZ3Nf
bmV3X3dpdGhfc2V0dGluZ3MoCisgICAgICAgICJlbmFibGUtamF2YXNjcmlwdCIsIEZBTFNFLAor
ICAgICAgICAiYXV0by1sb2FkLWltYWdlcyIsIEZBTFNFLAorICAgICAgICAibG9hZC1pY29ucy1p
Z25vcmluZy1pbWFnZS1sb2FkLXNldHRpbmciLCBUUlVFLAorICAgICAgICBudWxscHRyKSk7Cisg
ICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChz
ZXR0aW5ncy5nZXQoKSkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJs
ZV9qYXZhc2NyaXB0KHNldHRpbmdzLmdldCgpKSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9zZXR0
aW5nc19nZXRfYXV0b19sb2FkX2ltYWdlcyhzZXR0aW5ncy5nZXQoKSkpOworICAgIGdfYXNzZXJ0
KHdlYmtpdF9zZXR0aW5nc19nZXRfbG9hZF9pY29uc19pZ25vcmluZ19pbWFnZV9sb2FkX3NldHRp
bmcoc2V0dGluZ3MuZ2V0KCkpKTsKK30KKworc3RhdGljIENTdHJpbmcgY29udmVydFdlYlZpZXdN
YWluUmVzb3VyY2VEYXRhVG9DU3RyaW5nKFdlYlZpZXdUZXN0KiB0ZXN0KQoreworICAgIHNpemVf
dCBtYWluUmVzb3VyY2VEYXRhU2l6ZSA9IDA7CisgICAgY29uc3QgY2hhciogbWFpblJlc291cmNl
RGF0YSA9IHRlc3QtPm1haW5SZXNvdXJjZURhdGEobWFpblJlc291cmNlRGF0YVNpemUpOworICAg
IHJldHVybiBDU3RyaW5nKG1haW5SZXNvdXJjZURhdGEsIG1haW5SZXNvdXJjZURhdGFTaXplKTsK
K30KKworc3RhdGljIHZvaWQgYXNzZXJ0VGhhdFVzZXJBZ2VudElzU2VudEluSGVhZGVycyhXZWJW
aWV3VGVzdCogdGVzdCwgY29uc3QgQ1N0cmluZyYgdXNlckFnZW50KQoreworICAgIHRlc3QtPmxv
YWRVUkkoZ1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2Fp
dFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgQVNTRVJUX0NNUF9DU1RSSU5HKGNvbnZlcnRXZWJW
aWV3TWFpblJlc291cmNlRGF0YVRvQ1N0cmluZyh0ZXN0KSwgPT0sIHVzZXJBZ2VudCk7Cit9CisK
K3N0YXRpYyB2b2lkIHRlc3RXZWJLaXRTZXR0aW5nc1VzZXJBZ2VudChXZWJWaWV3VGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBHUmVmUHRyPFdlYktpdFNldHRpbmdzPiBzZXR0aW5n
cyA9IGFkb3B0R1JlZih3ZWJraXRfc2V0dGluZ3NfbmV3KCkpOworICAgIENTdHJpbmcgZGVmYXVs
dFVzZXJBZ2VudCA9IHdlYmtpdF9zZXR0aW5nc19nZXRfdXNlcl9hZ2VudChzZXR0aW5ncy5nZXQo
KSk7CisgICAgd2Via2l0X3dlYl92aWV3X3NldF9zZXR0aW5ncyh0ZXN0LT5tX3dlYlZpZXcsIHNl
dHRpbmdzLmdldCgpKTsKKworICAgIGdfYXNzZXJ0KGdfc3Ryc3RyX2xlbihkZWZhdWx0VXNlckFn
ZW50LmRhdGEoKSwgLTEsICJBcHBsZVdlYktpdCIpKTsKKyAgICBnX2Fzc2VydChnX3N0cnN0cl9s
ZW4oZGVmYXVsdFVzZXJBZ2VudC5kYXRhKCksIC0xLCAiU2FmYXJpIikpOworCisgICAgd2Via2l0
X3NldHRpbmdzX3NldF91c2VyX2FnZW50KHNldHRpbmdzLmdldCgpLCAwKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIoZGVmYXVsdFVzZXJBZ2VudC5kYXRhKCksID09LCB3ZWJraXRfc2V0dGluZ3NfZ2V0
X3VzZXJfYWdlbnQoc2V0dGluZ3MuZ2V0KCkpKTsKKyAgICBhc3NlcnRUaGF0VXNlckFnZW50SXNT
ZW50SW5IZWFkZXJzKHRlc3QsIGRlZmF1bHRVc2VyQWdlbnQuZGF0YSgpKTsKKworICAgIHdlYmtp
dF9zZXR0aW5nc19zZXRfdXNlcl9hZ2VudChzZXR0aW5ncy5nZXQoKSwgIiIpOworICAgIGdfYXNz
ZXJ0X2NtcHN0cihkZWZhdWx0VXNlckFnZW50LmRhdGEoKSwgPT0sIHdlYmtpdF9zZXR0aW5nc19n
ZXRfdXNlcl9hZ2VudChzZXR0aW5ncy5nZXQoKSkpOworCisgICAgY29uc3QgY2hhciogZnVua3lV
c2VyQWdlbnQgPSAiRnVua3khIjsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X3VzZXJfYWdlbnQo
c2V0dGluZ3MuZ2V0KCksIGZ1bmt5VXNlckFnZW50KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoZnVu
a3lVc2VyQWdlbnQsID09LCB3ZWJraXRfc2V0dGluZ3NfZ2V0X3VzZXJfYWdlbnQoc2V0dGluZ3Mu
Z2V0KCkpKTsKKyAgICBhc3NlcnRUaGF0VXNlckFnZW50SXNTZW50SW5IZWFkZXJzKHRlc3QsIGZ1
bmt5VXNlckFnZW50KTsKKworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfdXNlcl9hZ2VudF93aXRo
X2FwcGxpY2F0aW9uX2RldGFpbHMoc2V0dGluZ3MuZ2V0KCksICJXZWJLaXRHVEsrIiwgMCk7Cisg
ICAgY29uc3QgY2hhciogdXNlckFnZW50V2l0aE51bGxWZXJzaW9uID0gd2Via2l0X3NldHRpbmdz
X2dldF91c2VyX2FnZW50KHNldHRpbmdzLmdldCgpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoZ19z
dHJzdHJfbGVuKHVzZXJBZ2VudFdpdGhOdWxsVmVyc2lvbiwgLTEsIGRlZmF1bHRVc2VyQWdlbnQu
ZGF0YSgpKSwgPT0sIHVzZXJBZ2VudFdpdGhOdWxsVmVyc2lvbik7CisgICAgZ19hc3NlcnQoZ19z
dHJzdHJfbGVuKHVzZXJBZ2VudFdpdGhOdWxsVmVyc2lvbiwgLTEsICJXZWJLaXRHVEsrIikpOwor
CisgICAgd2Via2l0X3NldHRpbmdzX3NldF91c2VyX2FnZW50X3dpdGhfYXBwbGljYXRpb25fZGV0
YWlscyhzZXR0aW5ncy5nZXQoKSwgIldlYktpdEdUSysiLCAiIik7CisgICAgZ19hc3NlcnRfY21w
c3RyKHdlYmtpdF9zZXR0aW5nc19nZXRfdXNlcl9hZ2VudChzZXR0aW5ncy5nZXQoKSksID09LCB1
c2VyQWdlbnRXaXRoTnVsbFZlcnNpb24pOworCisgICAgd2Via2l0X3NldHRpbmdzX3NldF91c2Vy
X2FnZW50X3dpdGhfYXBwbGljYXRpb25fZGV0YWlscyhzZXR0aW5ncy5nZXQoKSwgIldlYkNhdEdU
SysiLCAiMy40LjUiKTsKKyAgICBjb25zdCBjaGFyKiBuZXdVc2VyQWdlbnQgPSB3ZWJraXRfc2V0
dGluZ3NfZ2V0X3VzZXJfYWdlbnQoc2V0dGluZ3MuZ2V0KCkpOworICAgIGdfYXNzZXJ0KGdfc3Ry
c3RyX2xlbihuZXdVc2VyQWdlbnQsIC0xLCAiMy40LjUiKSk7CisgICAgZ19hc3NlcnQoZ19zdHJz
dHJfbGVuKG5ld1VzZXJBZ2VudCwgLTEsICJXZWJDYXRHVEsrIikpOworfQorCitzdGF0aWMgdm9p
ZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtZXNzYWdl
LCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiwgU291cENsaWVudENvbnRleHQqLCBncG9p
bnRlcikKK3sKKyAgICBpZiAobWVzc2FnZS0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgewor
ICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1Rf
SU1QTEVNRU5URUQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGdfc3RyX2Vx
dWFsKHBhdGgsICIvIikpIHsKKyAgICAgICAgY29uc3QgY2hhciogdXNlckFnZW50ID0gc291cF9t
ZXNzYWdlX2hlYWRlcnNfZ2V0X29uZShtZXNzYWdlLT5yZXF1ZXN0X2hlYWRlcnMsICJVc2VyLUFn
ZW50Iik7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RB
VFVTX09LKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3Bv
bnNlX2JvZHksIFNPVVBfTUVNT1JZX0NPUFksIHVzZXJBZ2VudCwgc3RybGVuKHVzZXJBZ2VudCkp
OworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9i
b2R5KTsKKyAgICB9IGVsc2UKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2Fn
ZSwgU09VUF9TVEFUVVNfTk9UX0ZPVU5EKTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQoreworICAg
IGdTZXJ2ZXIgPSBuZXcgV2ViS2l0VGVzdFNlcnZlcigpOworICAgIGdTZXJ2ZXItPnJ1bihzZXJ2
ZXJDYWxsYmFjayk7CisKKyAgICBUZXN0OjphZGQoIldlYktpdFNldHRpbmdzIiwgIndlYmtpdC1z
ZXR0aW5ncyIsIHRlc3RXZWJLaXRTZXR0aW5ncyk7CisgICAgVGVzdDo6YWRkKCJXZWJLaXRTZXR0
aW5ncyIsICJuZXctd2l0aC1zZXR0aW5ncyIsIHRlc3RXZWJLaXRTZXR0aW5nc05ld1dpdGhTZXR0
aW5ncyk7CisgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0U2V0dGluZ3MiLCAidXNlci1hZ2Vu
dCIsIHRlc3RXZWJLaXRTZXR0aW5nc1VzZXJBZ2VudCk7Cit9CisKK3ZvaWQgYWZ0ZXJBbGwoKQor
eworICAgIGRlbGV0ZSBnU2VydmVyOworfQorCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFZlcnNpb24uY3BwIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRWZXJzaW9uLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5lNzQ3ZmY5NjIyMDBkYmQyNDQ5OTNmNTIxZDJkMTYzYzEyYWQyM2MzCi0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRWZXJz
aW9uLmNwcApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxp
YSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJUZXN0TWFpbi5oIgorI2lu
Y2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdDIuaD4KKworCitzdGF0
aWMgdm9pZCB0ZXN0V2ViS2l0VmVyc2lvbihUZXN0KiwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBn
X2Fzc2VydF9jbXB1aW50KHdlYmtpdF9nZXRfbWFqb3JfdmVyc2lvbigpLCA9PSwgV0VCS0lUX01B
Sk9SX1ZFUlNJT04pOworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2dldF9taW5vcl92ZXJz
aW9uKCksID09LCBXRUJLSVRfTUlOT1JfVkVSU0lPTik7CisgICAgZ19hc3NlcnRfY21wdWludCh3
ZWJraXRfZ2V0X21pY3JvX3ZlcnNpb24oKSwgPT0sIFdFQktJVF9NSUNST19WRVJTSU9OKTsKK30K
Kworc3RhdGljIHZvaWQgdGVzdFdlYktpdENoZWNrVmVyc2lvbihUZXN0KiwgZ2NvbnN0cG9pbnRl
cikKK3sKKyAgICBnX2Fzc2VydChXRUJLSVRfQ0hFQ0tfVkVSU0lPTihXRUJLSVRfTUFKT1JfVkVS
U0lPTiwgV0VCS0lUX01JTk9SX1ZFUlNJT04sIFdFQktJVF9NSUNST19WRVJTSU9OKSk7CisgICAg
Z19hc3NlcnQoIVdFQktJVF9DSEVDS19WRVJTSU9OKFdFQktJVF9NQUpPUl9WRVJTSU9OICsgMSwg
V0VCS0lUX01JTk9SX1ZFUlNJT04sIFdFQktJVF9NSUNST19WRVJTSU9OKSk7CisgICAgZ19hc3Nl
cnQoIVdFQktJVF9DSEVDS19WRVJTSU9OKFdFQktJVF9NQUpPUl9WRVJTSU9OLCBXRUJLSVRfTUlO
T1JfVkVSU0lPTiArIDEsIFdFQktJVF9NSUNST19WRVJTSU9OKSk7CisgICAgZ19hc3NlcnQoIVdF
QktJVF9DSEVDS19WRVJTSU9OKFdFQktJVF9NQUpPUl9WRVJTSU9OLCBXRUJLSVRfTUlOT1JfVkVS
U0lPTiwgV0VCS0lUX01JQ1JPX1ZFUlNJT04gKyAxKSk7Cit9CisKK3ZvaWQgYmVmb3JlQWxsKCkK
K3sKKyAgICBUZXN0OjphZGQoIldlYktpdFZlcnNpb24iLCAidmVyc2lvbiIsIHRlc3RXZWJLaXRW
ZXJzaW9uKTsKKyAgICBUZXN0OjphZGQoIldlYktpdFZlcnNpb24iLCAiY2hlY2stdmVyc2lvbiIs
IHRlc3RXZWJLaXRDaGVja1ZlcnNpb24pOworfQorCit2b2lkIGFmdGVyQWxsKCkKK3sKK30KZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0
V2ViQ29udGV4dC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVz
dFdlYktpdFdlYkNvbnRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE0MTQ4NTNhMzUwNjVmMmUwOTYxMzA3
NTVmMTg3NGZjZjk1YTcyODIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFdlYkNvbnRleHQuY3BwCkBAIC0wLDAgKzEsNDI1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpbmNsdWRlICJMb2FkVHJhY2tpbmdUZXN0LmgiCisjaW5jbHVkZSAiV2ViS2l0
VGVzdFNlcnZlci5oIgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL3dl
YmtpdDIuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0
L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCitzdGF0aWMgV2ViS2l0VGVzdFNlcnZlcioga1NlcnZl
cjsKKworc3RhdGljIHZvaWQgdGVzdFdlYkNvbnRleHREZWZhdWx0KFRlc3QqIHRlc3QsIGdjb25z
dHBvaW50ZXIpCit7CisgICAgLy8gQ2hlY2sgdGhlcmUncyBhIHNpbmdsZSBpbnN0YW5jZSBvZiB0
aGUgZGVmYXVsdCB3ZWIgY29udGV4dC4KKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2NvbnRleHRf
Z2V0X2RlZmF1bHQoKSA9PSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSk7Cit9CisK
K2NsYXNzIFBsdWdpbnNUZXN0OiBwdWJsaWMgVGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElC
X1RFU1RfRklYVFVSRShQbHVnaW5zVGVzdCk7CisKKyAgICBQbHVnaW5zVGVzdCgpCisgICAgICAg
IDogbV9jb250ZXh0KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpKQorICAgICAgICAs
IG1fbWFpbkxvb3AoZ19tYWluX2xvb3BfbmV3KDAsIFRSVUUpKQorICAgICAgICAsIG1fcGx1Z2lu
cygwKQorICAgIHsKKyAgICAgICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF9hZGRpdGlvbmFsX3Bs
dWdpbnNfZGlyZWN0b3J5KG1fY29udGV4dCwgV0VCS0lUX1RFU1RfUExVR0lOX0RJUik7CisgICAg
fQorCisgICAgflBsdWdpbnNUZXN0KCkKKyAgICB7CisgICAgICAgIGdfbWFpbl9sb29wX3VucmVm
KG1fbWFpbkxvb3ApOworICAgICAgICBnX2xpc3RfZnJlZV9mdWxsKG1fcGx1Z2lucywgZ19vYmpl
Y3RfdW5yZWYpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGdldFBsdWdpbnNBc3luY1JlYWR5
Q2FsbGJhY2soR09iamVjdCosIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBQbHVnaW5zVGVzdCogdGVz
dCkKKyAgICB7CisgICAgICAgIHRlc3QtPm1fcGx1Z2lucyA9IHdlYmtpdF93ZWJfY29udGV4dF9n
ZXRfcGx1Z2luc19maW5pc2godGVzdC0+bV9jb250ZXh0LCByZXN1bHQsIDApOworICAgICAgICBn
X21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworICAgIH0KKworICAgIEdMaXN0KiBn
ZXRQbHVnaW5zKCkKKyAgICB7CisgICAgICAgIGdfbGlzdF9mcmVlX2Z1bGwobV9wbHVnaW5zLCBn
X29iamVjdF91bnJlZik7CisgICAgICAgIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfcGx1Z2lucyht
X2NvbnRleHQsIDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4oZ2V0UGx1
Z2luc0FzeW5jUmVhZHlDYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX21haW5fbG9vcF9ydW4o
bV9tYWluTG9vcCk7CisgICAgICAgIHJldHVybiBtX3BsdWdpbnM7CisgICAgfQorCisgICAgV2Vi
S2l0V2ViQ29udGV4dCogbV9jb250ZXh0OworICAgIEdNYWluTG9vcCogbV9tYWluTG9vcDsKKyAg
ICBHTGlzdCogbV9wbHVnaW5zOworfTsKKworc3RhdGljIHZvaWQgdGVzdFdlYkNvbnRleHRHZXRQ
bHVnaW5zKFBsdWdpbnNUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIEdMaXN0KiBw
bHVnaW5zID0gdGVzdC0+Z2V0UGx1Z2lucygpOworICAgIGdfYXNzZXJ0KHBsdWdpbnMpOworCisg
ICAgR1JlZlB0cjxXZWJLaXRQbHVnaW4+IHRlc3RQbHVnaW47CisgICAgZm9yIChHTGlzdCogaXRl
bSA9IHBsdWdpbnM7IGl0ZW07IGl0ZW0gPSBnX2xpc3RfbmV4dChpdGVtKSkgeworICAgICAgICBX
ZWJLaXRQbHVnaW4qIHBsdWdpbiA9IFdFQktJVF9QTFVHSU4oaXRlbS0+ZGF0YSk7CisgICAgICAg
IHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QocGx1
Z2luKSk7CisgICAgICAgIGlmICghZ19zdHJjbXAwKHdlYmtpdF9wbHVnaW5fZ2V0X25hbWUocGx1
Z2luKSwgIldlYktpdCBUZXN0IFBsdWdJbiIpKSB7CisgICAgICAgICAgICB0ZXN0UGx1Z2luID0g
cGx1Z2luOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgZ19hc3Nl
cnQoV0VCS0lUX0lTX1BMVUdJTih0ZXN0UGx1Z2luLmdldCgpKSk7CisKKyAgICBHT3duUHRyPGNo
YXI+IHBsdWdpblBhdGgoZ19idWlsZF9maWxlbmFtZShXRUJLSVRfVEVTVF9QTFVHSU5fRElSLCAi
bGliVGVzdE5ldHNjYXBlUGx1Z2luLnNvIiwgTlVMTCkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3
ZWJraXRfcGx1Z2luX2dldF9wYXRoKHRlc3RQbHVnaW4uZ2V0KCkpLCA9PSwgcGx1Z2luUGF0aC5n
ZXQoKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9wbHVnaW5fZ2V0X2Rlc2NyaXB0aW9u
KHRlc3RQbHVnaW4uZ2V0KCkpLCA9PSwgIlNpbXBsZSBOZXRzY2FwZcKuIHBsdWctaW4gdGhhdCBo
YW5kbGVzIHRlc3QgY29udGVudCBmb3IgV2ViS2l0Iik7CisgICAgR0xpc3QqIG1pbWVJbmZvTGlz
dCA9IHdlYmtpdF9wbHVnaW5fZ2V0X21pbWVfaW5mb19saXN0KHRlc3RQbHVnaW4uZ2V0KCkpOwor
ICAgIGdfYXNzZXJ0KG1pbWVJbmZvTGlzdCk7CisgICAgZ19hc3NlcnRfY21wdWludChnX2xpc3Rf
bGVuZ3RoKG1pbWVJbmZvTGlzdCksID09LCAyKTsKKworICAgIFdlYktpdE1pbWVJbmZvKiBtaW1l
SW5mbyA9IHN0YXRpY19jYXN0PFdlYktpdE1pbWVJbmZvKj4obWltZUluZm9MaXN0LT5kYXRhKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X21pbWVfaW5mb19nZXRfbWltZV90eXBlKG1pbWVJ
bmZvKSwgPT0sICJpbWFnZS9wbmciKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X21pbWVf
aW5mb19nZXRfZGVzY3JpcHRpb24obWltZUluZm8pLCA9PSwgInBuZyBpbWFnZSIpOworICAgIGNv
bnN0IGdjaGFyKiBjb25zdCogZXh0ZW5zaW9ucyA9IHdlYmtpdF9taW1lX2luZm9fZ2V0X2V4dGVu
c2lvbnMobWltZUluZm8pOworICAgIGdfYXNzZXJ0KGV4dGVuc2lvbnMpOworICAgIGdfYXNzZXJ0
X2NtcHN0cihleHRlbnNpb25zWzBdLCA9PSwgInBuZyIpOworCisgICAgbWltZUluZm9MaXN0ID0g
Z19saXN0X25leHQobWltZUluZm9MaXN0KTsKKyAgICBtaW1lSW5mbyA9IHN0YXRpY19jYXN0PFdl
YktpdE1pbWVJbmZvKj4obWltZUluZm9MaXN0LT5kYXRhKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIo
d2Via2l0X21pbWVfaW5mb19nZXRfbWltZV90eXBlKG1pbWVJbmZvKSwgPT0sICJhcHBsaWNhdGlv
bi94LXdlYmtpdC10ZXN0LW5ldHNjYXBlIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9t
aW1lX2luZm9fZ2V0X2Rlc2NyaXB0aW9uKG1pbWVJbmZvKSwgPT0sICJ0ZXN0IG5ldHNjYXBlIGNv
bnRlbnQiKTsKKyAgICBleHRlbnNpb25zID0gd2Via2l0X21pbWVfaW5mb19nZXRfZXh0ZW5zaW9u
cyhtaW1lSW5mbyk7CisgICAgZ19hc3NlcnQoZXh0ZW5zaW9ucyk7CisgICAgZ19hc3NlcnRfY21w
c3RyKGV4dGVuc2lvbnNbMF0sID09LCAidGVzdG5ldHNjYXBlIik7Cit9CisKK3N0YXRpYyBjb25z
dCBjaGFyKiBrQmFySFRNTCA9ICI8aHRtbD48Ym9keT5CYXI8L2JvZHk+PC9odG1sPiI7CitzdGF0
aWMgY29uc3QgY2hhcioga0VjaG9IVE1MRm9ybWF0ID0gIjxodG1sPjxib2R5PiVzPC9ib2R5Pjwv
aHRtbD4iOworc3RhdGljIGNvbnN0IGNoYXIqIGVycm9yRG9tYWluID0gInRlc3QiOworc3RhdGlj
IGNvbnN0IGludCBlcnJvckNvZGUgPSAxMDsKK3N0YXRpYyBjb25zdCBjaGFyKiBlcnJvck1lc3Nh
Z2UgPSAiRXJyb3IgbWVzc2FnZS4iOworCitjbGFzcyBVUklTY2hlbWVUZXN0OiBwdWJsaWMgTG9h
ZFRyYWNraW5nVGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShVUklT
Y2hlbWVUZXN0KTsKKworICAgIHN0cnVjdCBVUklTY2hlbWVIYW5kbGVyIHsKKyAgICAgICAgVVJJ
U2NoZW1lSGFuZGxlcigpCisgICAgICAgICAgICA6IHJlcGx5TGVuZ3RoKDApCisgICAgICAgIHsK
KyAgICAgICAgfQorCisgICAgICAgIFVSSVNjaGVtZUhhbmRsZXIoY29uc3QgY2hhciogcmVwbHks
IGludCByZXBseUxlbmd0aCwgY29uc3QgY2hhciogbWltZVR5cGUpCisgICAgICAgICAgICA6IHJl
cGx5KHJlcGx5KQorICAgICAgICAgICAgLCByZXBseUxlbmd0aChyZXBseUxlbmd0aCkKKyAgICAg
ICAgICAgICwgbWltZVR5cGUobWltZVR5cGUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAg
ICAgIENTdHJpbmcgcmVwbHk7CisgICAgICAgIGludCByZXBseUxlbmd0aDsKKyAgICAgICAgQ1N0
cmluZyBtaW1lVHlwZTsKKyAgICB9OworCisgICAgc3RhdGljIHZvaWQgdXJpU2NoZW1lUmVxdWVz
dENhbGxiYWNrKFdlYktpdFVSSVNjaGVtZVJlcXVlc3QqIHJlcXVlc3QsIGdwb2ludGVyIHVzZXJE
YXRhKQorICAgIHsKKyAgICAgICAgVVJJU2NoZW1lVGVzdCogdGVzdCA9IHN0YXRpY19jYXN0PFVS
SVNjaGVtZVRlc3QqPih1c2VyRGF0YSk7CisgICAgICAgIHRlc3QtPm1fdXJpU2NoZW1lUmVxdWVz
dCA9IHJlcXVlc3Q7CisgICAgICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0
RmluaXNoZXMoR19PQkpFQ1QocmVxdWVzdCkpOworCisgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF91
cmlfc2NoZW1lX3JlcXVlc3RfZ2V0X3dlYl92aWV3KHJlcXVlc3QpID09IHRlc3QtPm1fd2ViVmll
dyk7CisKKyAgICAgICAgR1JlZlB0cjxHSW5wdXRTdHJlYW0+IGlucHV0U3RyZWFtID0gYWRvcHRH
UmVmKGdfbWVtb3J5X2lucHV0X3N0cmVhbV9uZXcoKSk7CisgICAgICAgIHRlc3QtPmFzc2VydE9i
amVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QoaW5wdXRTdHJlYW0uZ2V0KCkp
KTsKKworICAgICAgICBjb25zdCBjaGFyKiBzY2hlbWUgPSB3ZWJraXRfdXJpX3NjaGVtZV9yZXF1
ZXN0X2dldF9zY2hlbWUocmVxdWVzdCk7CisgICAgICAgIGdfYXNzZXJ0KHNjaGVtZSk7CisgICAg
ICAgIGdfYXNzZXJ0KHRlc3QtPm1faGFuZGxlcnNNYXAuY29udGFpbnMoU3RyaW5nOjpmcm9tVVRG
OChzY2hlbWUpKSk7CisKKyAgICAgICAgaWYgKCFnX3N0cmNtcDAoc2NoZW1lLCAiZXJyb3IiKSkg
eworICAgICAgICAgICAgR093blB0cjxHRXJyb3I+IGVycm9yKGdfZXJyb3JfbmV3X2xpdGVyYWwo
Z19xdWFya19mcm9tX3N0cmluZyhlcnJvckRvbWFpbiksIGVycm9yQ29kZSwgZXJyb3JNZXNzYWdl
KSk7CisgICAgICAgICAgICB3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2ZpbmlzaF9lcnJvcihy
ZXF1ZXN0LCBlcnJvci5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBjb25zdCBVUklTY2hlbWVIYW5kbGVyJiBoYW5kbGVyID0gdGVzdC0+bV9oYW5kbGVy
c01hcC5nZXQoU3RyaW5nOjpmcm9tVVRGOChzY2hlbWUpKTsKKworICAgICAgICBpZiAoIWdfc3Ry
Y21wMChzY2hlbWUsICJlY2hvIikpIHsKKyAgICAgICAgICAgIGNoYXIqIHJlcGx5SFRNTCA9IGdf
c3RyZHVwX3ByaW50ZihoYW5kbGVyLnJlcGx5LmRhdGEoKSwgd2Via2l0X3VyaV9zY2hlbWVfcmVx
dWVzdF9nZXRfcGF0aChyZXF1ZXN0KSk7CisgICAgICAgICAgICBnX21lbW9yeV9pbnB1dF9zdHJl
YW1fYWRkX2RhdGEoR19NRU1PUllfSU5QVVRfU1RSRUFNKGlucHV0U3RyZWFtLmdldCgpKSwgcmVw
bHlIVE1MLCBzdHJsZW4ocmVwbHlIVE1MKSwgZ19mcmVlKTsKKyAgICAgICAgfSBlbHNlIGlmICgh
Z19zdHJjbXAwKHNjaGVtZSwgImNsb3NlZCIpKQorICAgICAgICAgICAgZ19pbnB1dF9zdHJlYW1f
Y2xvc2UoaW5wdXRTdHJlYW0uZ2V0KCksIDAsIDApOworICAgICAgICBlbHNlIGlmICghaGFuZGxl
ci5yZXBseS5pc051bGwoKSkKKyAgICAgICAgICAgIGdfbWVtb3J5X2lucHV0X3N0cmVhbV9hZGRf
ZGF0YShHX01FTU9SWV9JTlBVVF9TVFJFQU0oaW5wdXRTdHJlYW0uZ2V0KCkpLCBoYW5kbGVyLnJl
cGx5LmRhdGEoKSwgaGFuZGxlci5yZXBseS5sZW5ndGgoKSwgMCk7CisKKyAgICAgICAgd2Via2l0
X3VyaV9zY2hlbWVfcmVxdWVzdF9maW5pc2gocmVxdWVzdCwgaW5wdXRTdHJlYW0uZ2V0KCksIGhh
bmRsZXIucmVwbHlMZW5ndGgsIGhhbmRsZXIubWltZVR5cGUuZGF0YSgpKTsKKyAgICB9CisKKyAg
ICB2b2lkIHJlZ2lzdGVyVVJJU2NoZW1lSGFuZGxlcihjb25zdCBjaGFyKiBzY2hlbWUsIGNvbnN0
IGNoYXIqIHJlcGx5LCBpbnQgcmVwbHlMZW5ndGgsIGNvbnN0IGNoYXIqIG1pbWVUeXBlKQorICAg
IHsKKyAgICAgICAgbV9oYW5kbGVyc01hcC5zZXQoU3RyaW5nOjpmcm9tVVRGOChzY2hlbWUpLCBV
UklTY2hlbWVIYW5kbGVyKHJlcGx5LCByZXBseUxlbmd0aCwgbWltZVR5cGUpKTsKKyAgICAgICAg
d2Via2l0X3dlYl9jb250ZXh0X3JlZ2lzdGVyX3VyaV9zY2hlbWUod2Via2l0X3dlYl9jb250ZXh0
X2dldF9kZWZhdWx0KCksIHNjaGVtZSwgdXJpU2NoZW1lUmVxdWVzdENhbGxiYWNrLCB0aGlzLCAw
KTsKKyAgICB9CisKKyAgICBHUmVmUHRyPFdlYktpdFVSSVNjaGVtZVJlcXVlc3Q+IG1fdXJpU2No
ZW1lUmVxdWVzdDsKKyAgICBIYXNoTWFwPFN0cmluZywgVVJJU2NoZW1lSGFuZGxlcj4gbV9oYW5k
bGVyc01hcDsKK307CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJDb250ZXh0VVJJU2NoZW1lKFVSSVNj
aGVtZVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+cmVnaXN0ZXJVUklT
Y2hlbWVIYW5kbGVyKCJmb28iLCBrQmFySFRNTCwgc3RybGVuKGtCYXJIVE1MKSwgInRleHQvaHRt
bCIpOworICAgIHRlc3QtPmxvYWRVUkkoImZvbzpibGFuayIpOworICAgIHRlc3QtPndhaXRVbnRp
bExvYWRGaW5pc2hlZCgpOworICAgIHNpemVfdCBtYWluUmVzb3VyY2VEYXRhU2l6ZSA9IDA7Cisg
ICAgY29uc3QgY2hhciogbWFpblJlc291cmNlRGF0YSA9IHRlc3QtPm1haW5SZXNvdXJjZURhdGEo
bWFpblJlc291cmNlRGF0YVNpemUpOworICAgIGdfYXNzZXJ0X2NtcGludChtYWluUmVzb3VyY2VE
YXRhU2l6ZSwgPT0sIHN0cmxlbihrQmFySFRNTCkpOworICAgIGdfYXNzZXJ0KCFzdHJuY21wKG1h
aW5SZXNvdXJjZURhdGEsIGtCYXJIVE1MLCBtYWluUmVzb3VyY2VEYXRhU2l6ZSkpOworCisgICAg
dGVzdC0+cmVnaXN0ZXJVUklTY2hlbWVIYW5kbGVyKCJlY2hvIiwga0VjaG9IVE1MRm9ybWF0LCAt
MSwgInRleHQvaHRtbCIpOworICAgIHRlc3QtPmxvYWRVUkkoImVjaG86aGVsbG8gd29ybGQiKTsK
KyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBHT3duUHRyPGNoYXI+IGVj
aG9IVE1MKGdfc3RyZHVwX3ByaW50ZihrRWNob0hUTUxGb3JtYXQsIHdlYmtpdF91cmlfc2NoZW1l
X3JlcXVlc3RfZ2V0X3BhdGgodGVzdC0+bV91cmlTY2hlbWVSZXF1ZXN0LmdldCgpKSkpOworICAg
IG1haW5SZXNvdXJjZURhdGFTaXplID0gMDsKKyAgICBtYWluUmVzb3VyY2VEYXRhID0gdGVzdC0+
bWFpblJlc291cmNlRGF0YShtYWluUmVzb3VyY2VEYXRhU2l6ZSk7CisgICAgZ19hc3NlcnRfY21w
aW50KG1haW5SZXNvdXJjZURhdGFTaXplLCA9PSwgc3RybGVuKGVjaG9IVE1MLmdldCgpKSk7Cisg
ICAgZ19hc3NlcnQoIXN0cm5jbXAobWFpblJlc291cmNlRGF0YSwgZWNob0hUTUwuZ2V0KCksIG1h
aW5SZXNvdXJjZURhdGFTaXplKSk7CisKKyAgICB0ZXN0LT5yZWdpc3RlclVSSVNjaGVtZUhhbmRs
ZXIoIm5vbWltZSIsIGtCYXJIVE1MLCAtMSwgMCk7CisgICAgdGVzdC0+bV9sb2FkRXZlbnRzLmNs
ZWFyKCk7CisgICAgdGVzdC0+bG9hZFVSSSgibm9taW1lOmZvbyBiYXIiKTsKKyAgICB0ZXN0LT53
YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX2xvYWRFdmVudHMu
Y29udGFpbnMoTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkRmFpbGVkKSk7CisKKyAg
ICB0ZXN0LT5yZWdpc3RlclVSSVNjaGVtZUhhbmRsZXIoImVtcHR5IiwgMCwgMCwgInRleHQvaHRt
bCIpOworICAgIHRlc3QtPm1fbG9hZEV2ZW50cy5jbGVhcigpOworICAgIHRlc3QtPmxvYWRVUkko
ImVtcHR5Om5vdGhpbmciKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAg
ICBnX2Fzc2VydCghdGVzdC0+bV9sb2FkRXZlbnRzLmNvbnRhaW5zKExvYWRUcmFja2luZ1Rlc3Q6
OlByb3Zpc2lvbmFsTG9hZEZhaWxlZCkpOworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX2xvYWRFdmVu
dHMuY29udGFpbnMoTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZhaWxlZCkpOworCisgICAgdGVzdC0+
cmVnaXN0ZXJVUklTY2hlbWVIYW5kbGVyKCJlcnJvciIsIDAsIDAsIDApOworICAgIHRlc3QtPm1f
bG9hZEV2ZW50cy5jbGVhcigpOworICAgIHRlc3QtPmxvYWRVUkkoImVycm9yOmVycm9yIik7Cisg
ICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9s
b2FkRXZlbnRzLmNvbnRhaW5zKExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZEZhaWxl
ZCkpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fbG9hZEZhaWxlZCk7CisgICAgZ19hc3NlcnRfZXJy
b3IodGVzdC0+bV9lcnJvci5nZXQoKSwgZ19xdWFya19mcm9tX3N0cmluZyhlcnJvckRvbWFpbiks
IGVycm9yQ29kZSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPm1fZXJyb3ItPm1lc3NhZ2Us
ID09LCBlcnJvck1lc3NhZ2UpOworCisgICAgdGVzdC0+cmVnaXN0ZXJVUklTY2hlbWVIYW5kbGVy
KCJjbG9zZWQiLCAwLCAwLCAwKTsKKyAgICB0ZXN0LT5tX2xvYWRFdmVudHMuY2xlYXIoKTsKKyAg
ICB0ZXN0LT5sb2FkVVJJKCJjbG9zZWQ6aW5wdXQtc3RyZWFtIik7CisgICAgdGVzdC0+d2FpdFVu
dGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9sb2FkRXZlbnRzLmNvbnRh
aW5zKExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZEZhaWxlZCkpOworICAgIGdfYXNz
ZXJ0KHRlc3QtPm1fbG9hZEZhaWxlZCk7CisgICAgZ19hc3NlcnRfZXJyb3IodGVzdC0+bV9lcnJv
ci5nZXQoKSwgR19JT19FUlJPUiwgR19JT19FUlJPUl9DTE9TRUQpOworfQorCitzdGF0aWMgdm9p
ZCB0ZXN0V2ViQ29udGV4dFNwZWxsQ2hlY2tlcihUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQor
eworICAgIFdlYktpdFdlYkNvbnRleHQqIHdlYkNvbnRleHQgPSB3ZWJraXRfd2ViX2NvbnRleHRf
Z2V0X2RlZmF1bHQoKTsKKworICAgIC8vIENoZWNrIHdoYXQgaGFwcGVucyBpZiBubyBzcGVsbCBj
aGVja2luZyBsYW5ndWFnZSBoYXMgYmVlbiBzZXQuCisgICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBj
dXJyZW50TGFuZ3VhZ2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3NwZWxsX2NoZWNraW5nX2xh
bmd1YWdlcyh3ZWJDb250ZXh0KTsKKyAgICBnX2Fzc2VydCghY3VycmVudExhbmd1YWdlKTsKKwor
ICAgIC8vIFNldCB0aGUgbGFuZ3VhZ2UgdG8gYSBzcGVjaWZpYyBvbmUuCisgICAgR1JlZlB0cjxH
UHRyQXJyYXk+IGxhbmd1YWdlcyA9IGFkb3B0R1JlZihnX3B0cl9hcnJheV9uZXcoKSk7CisgICAg
Z19wdHJfYXJyYXlfYWRkKGxhbmd1YWdlcy5nZXQoKSwgY29uc3RfY2FzdDxncG9pbnRlcj4oc3Rh
dGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KCJlbl9VUyIpKSk7CisgICAgZ19wdHJfYXJyYXlfYWRkKGxh
bmd1YWdlcy5nZXQoKSwgMCk7CisgICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF9zcGVsbF9jaGVj
a2luZ19sYW5ndWFnZXMod2ViQ29udGV4dCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKiBj
b25zdCo+KGxhbmd1YWdlcy0+cGRhdGEpKTsKKyAgICBjdXJyZW50TGFuZ3VhZ2UgPSB3ZWJraXRf
d2ViX2NvbnRleHRfZ2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyh3ZWJDb250ZXh0KTsKKyAg
ICBnX2Fzc2VydF9jbXB1aW50KGdfc3Rydl9sZW5ndGgoY29uc3RfY2FzdDxjaGFyKio+KGN1cnJl
bnRMYW5ndWFnZSkpLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGN1cnJlbnRMYW5ndWFn
ZVswXSwgPT0sICJlbl9VUyIpOworCisgICAgLy8gU2V0IHRoZSBsYW5ndWFnZSBzdHJpbmcgdG8g
bGlzdCBvZiB2YWxpZCBsYW5ndWFnZXMuCisgICAgZ19wdHJfYXJyYXlfcmVtb3ZlX2luZGV4X2Zh
c3QobGFuZ3VhZ2VzLmdldCgpLCBsYW5ndWFnZXMtPmxlbiAtIDEpOworICAgIGdfcHRyX2FycmF5
X2FkZChsYW5ndWFnZXMuZ2V0KCksIGNvbnN0X2Nhc3Q8Z3BvaW50ZXI+KHN0YXRpY19jYXN0PGNv
bnN0IHZvaWQqPigiZW5fR0IiKSkpOworICAgIGdfcHRyX2FycmF5X2FkZChsYW5ndWFnZXMuZ2V0
KCksIDApOworICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfc3BlbGxfY2hlY2tpbmdfbGFuZ3Vh
Z2VzKHdlYkNvbnRleHQsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhciogY29uc3QqPihsYW5n
dWFnZXMtPnBkYXRhKSk7CisgICAgY3VycmVudExhbmd1YWdlID0gd2Via2l0X3dlYl9jb250ZXh0
X2dldF9zcGVsbF9jaGVja2luZ19sYW5ndWFnZXMod2ViQ29udGV4dCk7CisgICAgZ19hc3NlcnRf
Y21wdWludChnX3N0cnZfbGVuZ3RoKGNvbnN0X2Nhc3Q8Y2hhcioqPihjdXJyZW50TGFuZ3VhZ2Up
KSwgPT0sIDIpOworICAgIGdfYXNzZXJ0X2NtcHN0cihjdXJyZW50TGFuZ3VhZ2VbMF0sID09LCAi
ZW5fVVMiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoY3VycmVudExhbmd1YWdlWzFdLCA9PSwgImVu
X0dCIik7CisKKyAgICAvLyBUcnkgcGFzc2luZyBhIHdyb25nIGxhbmd1YWdlIGFsb25nIHdpdGgg
Z29vZCBvbmVzLgorICAgIGdfcHRyX2FycmF5X3JlbW92ZV9pbmRleF9mYXN0KGxhbmd1YWdlcy5n
ZXQoKSwgbGFuZ3VhZ2VzLT5sZW4gLSAxKTsKKyAgICBnX3B0cl9hcnJheV9hZGQobGFuZ3VhZ2Vz
LmdldCgpLCBjb25zdF9jYXN0PGdwb2ludGVyPihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4oImJk
X1dSIikpKTsKKyAgICBnX3B0cl9hcnJheV9hZGQobGFuZ3VhZ2VzLmdldCgpLCAwKTsKKyAgICB3
ZWJraXRfd2ViX2NvbnRleHRfc2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyh3ZWJDb250ZXh0
LCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqIGNvbnN0Kj4obGFuZ3VhZ2VzLT5wZGF0YSkp
OworICAgIGN1cnJlbnRMYW5ndWFnZSA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hl
Y2tpbmdfbGFuZ3VhZ2VzKHdlYkNvbnRleHQpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQoZ19zdHJ2
X2xlbmd0aChjb25zdF9jYXN0PGNoYXIqKj4oY3VycmVudExhbmd1YWdlKSksID09LCAyKTsKKyAg
ICBnX2Fzc2VydF9jbXBzdHIoY3VycmVudExhbmd1YWdlWzBdLCA9PSwgImVuX1VTIik7CisgICAg
Z19hc3NlcnRfY21wc3RyKGN1cnJlbnRMYW5ndWFnZVsxXSwgPT0sICJlbl9HQiIpOworCisgICAg
Ly8gVHJ5IHBhc3NpbmcgYSBsaXN0IHdpdGggb25seSB3cm9uZyBsYW5ndWFnZXMuCisgICAgbGFu
Z3VhZ2VzID0gYWRvcHRHUmVmKGdfcHRyX2FycmF5X25ldygpKTsKKyAgICBnX3B0cl9hcnJheV9h
ZGQobGFuZ3VhZ2VzLmdldCgpLCBjb25zdF9jYXN0PGdwb2ludGVyPihzdGF0aWNfY2FzdDxjb25z
dCB2b2lkKj4oImJkX1dSIikpKTsKKyAgICBnX3B0cl9hcnJheV9hZGQobGFuZ3VhZ2VzLmdldCgp
LCBjb25zdF9jYXN0PGdwb2ludGVyPihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4oIndyX0JEIikp
KTsKKyAgICBnX3B0cl9hcnJheV9hZGQobGFuZ3VhZ2VzLmdldCgpLCAwKTsKKyAgICB3ZWJraXRf
d2ViX2NvbnRleHRfc2V0X3NwZWxsX2NoZWNraW5nX2xhbmd1YWdlcyh3ZWJDb250ZXh0LCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IGNoYXIqIGNvbnN0Kj4obGFuZ3VhZ2VzLT5wZGF0YSkpOworICAg
IGN1cnJlbnRMYW5ndWFnZSA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc3BlbGxfY2hlY2tpbmdf
bGFuZ3VhZ2VzKHdlYkNvbnRleHQpOworICAgIGdfYXNzZXJ0KCFjdXJyZW50TGFuZ3VhZ2UpOwor
CisgICAgLy8gQ2hlY2sgZGlzYWJsaW5nIGFuZCByZS1lbmFibGluZyBzcGVsbCBjaGVja2luZy4K
KyAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3NwZWxsX2NoZWNraW5nX2VuYWJsZWQod2ViQ29u
dGV4dCwgRkFMU0UpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3NwZWxs
X2NoZWNraW5nX2VuYWJsZWQod2ViQ29udGV4dCkpOworICAgIHdlYmtpdF93ZWJfY29udGV4dF9z
ZXRfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZCh3ZWJDb250ZXh0LCBUUlVFKTsKKyAgICBnX2Fzc2Vy
dCh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3NwZWxsX2NoZWNraW5nX2VuYWJsZWQod2ViQ29udGV4
dCkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViQ29udGV4dExhbmd1YWdlcyhXZWJWaWV3VGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZXhwZWN0
ZWREZWZhdWx0TGFuZ3VhZ2UgPSAiZW4iOworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0
VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVk
KCk7CisgICAgc2l6ZV90IG1haW5SZXNvdXJjZURhdGFTaXplID0gMDsKKyAgICBjb25zdCBjaGFy
KiBtYWluUmVzb3VyY2VEYXRhID0gdGVzdC0+bWFpblJlc291cmNlRGF0YShtYWluUmVzb3VyY2VE
YXRhU2l6ZSk7CisgICAgZ19hc3NlcnRfY21wdWludChtYWluUmVzb3VyY2VEYXRhU2l6ZSwgPT0s
IHN0cmxlbihleHBlY3RlZERlZmF1bHRMYW5ndWFnZSkpOworICAgIGdfYXNzZXJ0KCFzdHJuY21w
KG1haW5SZXNvdXJjZURhdGEsIGV4cGVjdGVkRGVmYXVsdExhbmd1YWdlLCBtYWluUmVzb3VyY2VE
YXRhU2l6ZSkpOworCisgICAgR1JlZlB0cjxHUHRyQXJyYXk+IGxhbmd1YWdlcyA9IGFkb3B0R1Jl
ZihnX3B0cl9hcnJheV9uZXcoKSk7CisgICAgZ19wdHJfYXJyYXlfYWRkKGxhbmd1YWdlcy5nZXQo
KSwgY29uc3RfY2FzdDxncG9pbnRlcj4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KCJlbiIpKSk7
CisgICAgZ19wdHJfYXJyYXlfYWRkKGxhbmd1YWdlcy5nZXQoKSwgY29uc3RfY2FzdDxncG9pbnRl
cj4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KCJFU19lcyIpKSk7CisgICAgZ19wdHJfYXJyYXlf
YWRkKGxhbmd1YWdlcy5nZXQoKSwgY29uc3RfY2FzdDxncG9pbnRlcj4oc3RhdGljX2Nhc3Q8Y29u
c3Qgdm9pZCo+KCJkRSIpKSk7CisgICAgZ19wdHJfYXJyYXlfYWRkKGxhbmd1YWdlcy5nZXQoKSwg
MCk7CisgICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF9wcmVmZXJyZWRfbGFuZ3VhZ2VzKHdlYmtp
dF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIq
IGNvbnN0Kj4obGFuZ3VhZ2VzLT5wZGF0YSkpOworCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGV4
cGVjdGVkTGFuZ3VhZ2VzID0gImVuLCBlcy1lcztxPTAuOTAsIGRlO3E9MC44MCI7CisgICAgdGVz
dC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIikuZGF0YSgpKTsKKyAgICB0ZXN0
LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBtYWluUmVzb3VyY2VEYXRhU2l6ZSA9IDA7
CisgICAgbWFpblJlc291cmNlRGF0YSA9IHRlc3QtPm1haW5SZXNvdXJjZURhdGEobWFpblJlc291
cmNlRGF0YVNpemUpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQobWFpblJlc291cmNlRGF0YVNpemUs
ID09LCBzdHJsZW4oZXhwZWN0ZWRMYW5ndWFnZXMpKTsKKyAgICBnX2Fzc2VydCghc3RybmNtcCht
YWluUmVzb3VyY2VEYXRhLCBleHBlY3RlZExhbmd1YWdlcywgbWFpblJlc291cmNlRGF0YVNpemUp
KTsKK30KKworc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBT
b3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSosIFNvdXBD
bGllbnRDb250ZXh0KiwgZ3BvaW50ZXIpCit7CisgICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBT
T1VQX01FVEhPRF9HRVQpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2Fn
ZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiLyIpKSB7CisgICAgICAgIGNvbnN0IGNoYXIq
IGFjY2VwdExhbmd1YWdlID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X29uZShtZXNzYWdlLT5y
ZXF1ZXN0X2hlYWRlcnMsICJBY2NlcHQtTGFuZ3VhZ2UiKTsKKyAgICAgICAgc291cF9tZXNzYWdl
X3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOworICAgICAgICBzb3VwX21lc3Nh
Z2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfQ09QWSwg
YWNjZXB0TGFuZ3VhZ2UsIHN0cmxlbihhY2NlcHRMYW5ndWFnZSkpOworICAgICAgICBzb3VwX21l
c3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKKyAgICB9IGVsc2UK
KyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9U
X0ZPVU5EKTsKK30KKworY2xhc3MgU2VjdXJpdHlQb2xpY3lUZXN0OiBwdWJsaWMgVGVzdCB7Citw
dWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShTZWN1cml0eVBvbGljeVRlc3QpOwor
CisgICAgZW51bSBTZWN1cml0eVBvbGljeSB7CisgICAgICAgIExvY2FsID0gMSA8PCAxLAorICAg
ICAgICBOb0FjY2VzcyA9IDEgPDwgMiwKKyAgICAgICAgRGlzcGxheUlzb2xhdGVkID0gMSA8PCAz
LAorICAgICAgICBTZWN1cmUgPSAxIDw8IDQsCisgICAgICAgIENPUlNFbmFibGVkID0gMSA8PCA1
LAorICAgICAgICBFbXB0eURvY3VtZW50ID0gMSA8PCA2CisgICAgfTsKKworICAgIFNlY3VyaXR5
UG9saWN5VGVzdCgpCisgICAgICAgIDogbV9tYW5hZ2VyKHdlYmtpdF93ZWJfY29udGV4dF9nZXRf
c2VjdXJpdHlfbWFuYWdlcih3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSkpCisgICAg
eworICAgIH0KKworICAgIHZvaWQgdmVyaWZ5VGhhdFNjaGVtZU1hdGNoZXNQb2xpY3koY29uc3Qg
Y2hhciogc2NoZW1lLCB1bnNpZ25lZCBwb2xpY3kpCisgICAgeworICAgICAgICBpZiAocG9saWN5
ICYgTG9jYWwpCisgICAgICAgICAgICBnX2Fzc2VydCh3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl91
cmlfc2NoZW1lX2lzX2xvY2FsKG1fbWFuYWdlciwgc2NoZW1lKSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl91cmlfc2NoZW1lX2lz
X2xvY2FsKG1fbWFuYWdlciwgc2NoZW1lKSk7CisgICAgICAgIGlmIChwb2xpY3kgJiBOb0FjY2Vz
cykKKyAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9zZWN1cml0eV9tYW5hZ2VyX3VyaV9zY2hl
bWVfaXNfbm9fYWNjZXNzKG1fbWFuYWdlciwgc2NoZW1lKSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl91cmlfc2NoZW1lX2lzX25v
X2FjY2VzcyhtX21hbmFnZXIsIHNjaGVtZSkpOworICAgICAgICBpZiAocG9saWN5ICYgRGlzcGxh
eUlzb2xhdGVkKQorICAgICAgICAgICAgZ19hc3NlcnQod2Via2l0X3NlY3VyaXR5X21hbmFnZXJf
dXJpX3NjaGVtZV9pc19kaXNwbGF5X2lzb2xhdGVkKG1fbWFuYWdlciwgc2NoZW1lKSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl91
cmlfc2NoZW1lX2lzX2Rpc3BsYXlfaXNvbGF0ZWQobV9tYW5hZ2VyLCBzY2hlbWUpKTsKKyAgICAg
ICAgaWYgKHBvbGljeSAmIFNlY3VyZSkKKyAgICAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9zZWN1
cml0eV9tYW5hZ2VyX3VyaV9zY2hlbWVfaXNfc2VjdXJlKG1fbWFuYWdlciwgc2NoZW1lKSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfc2VjdXJpdHlfbWFuYWdl
cl91cmlfc2NoZW1lX2lzX3NlY3VyZShtX21hbmFnZXIsIHNjaGVtZSkpOworICAgICAgICBpZiAo
cG9saWN5ICYgQ09SU0VuYWJsZWQpCisgICAgICAgICAgICBnX2Fzc2VydCh3ZWJraXRfc2VjdXJp
dHlfbWFuYWdlcl91cmlfc2NoZW1lX2lzX2NvcnNfZW5hYmxlZChtX21hbmFnZXIsIHNjaGVtZSkp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBnX2Fzc2VydCghd2Via2l0X3NlY3VyaXR5X21h
bmFnZXJfdXJpX3NjaGVtZV9pc19jb3JzX2VuYWJsZWQobV9tYW5hZ2VyLCBzY2hlbWUpKTsKKyAg
ICAgICAgaWYgKHBvbGljeSAmIEVtcHR5RG9jdW1lbnQpCisgICAgICAgICAgICBnX2Fzc2VydCh3
ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl91cmlfc2NoZW1lX2lzX2VtcHR5X2RvY3VtZW50KG1fbWFu
YWdlciwgc2NoZW1lKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJr
aXRfc2VjdXJpdHlfbWFuYWdlcl91cmlfc2NoZW1lX2lzX2VtcHR5X2RvY3VtZW50KG1fbWFuYWdl
ciwgc2NoZW1lKSk7CisgICAgfQorCisgICAgV2ViS2l0U2VjdXJpdHlNYW5hZ2VyKiBtX21hbmFn
ZXI7Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0V2ViQ29udGV4dFNlY3VyaXR5UG9saWN5KFNlY3Vy
aXR5UG9saWN5VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICAvLyBWZXJpZnlUaGF0
U2NoZW1lTWF0Y2hlc1BvbGljeSBkZWZhdWx0IHBvbGljeSBmb3Igd2VsbCBrbm93biBzY2hlbWVz
LgorICAgIHRlc3QtPnZlcmlmeVRoYXRTY2hlbWVNYXRjaGVzUG9saWN5KCJodHRwIiwgU2VjdXJp
dHlQb2xpY3lUZXN0OjpDT1JTRW5hYmxlZCk7CisgICAgdGVzdC0+dmVyaWZ5VGhhdFNjaGVtZU1h
dGNoZXNQb2xpY3koImh0dHBzIiwgU2VjdXJpdHlQb2xpY3lUZXN0OjpDT1JTRW5hYmxlZCB8IFNl
Y3VyaXR5UG9saWN5VGVzdDo6U2VjdXJlKTsKKyAgICB0ZXN0LT52ZXJpZnlUaGF0U2NoZW1lTWF0
Y2hlc1BvbGljeSgiZmlsZSIsIFNlY3VyaXR5UG9saWN5VGVzdDo6TG9jYWwpOworICAgIHRlc3Qt
PnZlcmlmeVRoYXRTY2hlbWVNYXRjaGVzUG9saWN5KCJkYXRhIiwgU2VjdXJpdHlQb2xpY3lUZXN0
OjpOb0FjY2VzcyB8IFNlY3VyaXR5UG9saWN5VGVzdDo6U2VjdXJlKTsKKyAgICB0ZXN0LT52ZXJp
ZnlUaGF0U2NoZW1lTWF0Y2hlc1BvbGljeSgiYWJvdXQiLCBTZWN1cml0eVBvbGljeVRlc3Q6Ok5v
QWNjZXNzIHwgU2VjdXJpdHlQb2xpY3lUZXN0OjpTZWN1cmUgfCBTZWN1cml0eVBvbGljeVRlc3Q6
OkVtcHR5RG9jdW1lbnQpOworCisgICAgLy8gQ3VzdG9tIHNjaGVtZS4KKyAgICB0ZXN0LT52ZXJp
ZnlUaGF0U2NoZW1lTWF0Y2hlc1BvbGljeSgiZm9vIiwgMCk7CisKKyAgICB3ZWJraXRfc2VjdXJp
dHlfbWFuYWdlcl9yZWdpc3Rlcl91cmlfc2NoZW1lX2FzX2xvY2FsKHRlc3QtPm1fbWFuYWdlciwg
ImZvbyIpOworICAgIHRlc3QtPnZlcmlmeVRoYXRTY2hlbWVNYXRjaGVzUG9saWN5KCJmb28iLCBT
ZWN1cml0eVBvbGljeVRlc3Q6OkxvY2FsKTsKKyAgICB3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl9y
ZWdpc3Rlcl91cmlfc2NoZW1lX2FzX25vX2FjY2Vzcyh0ZXN0LT5tX21hbmFnZXIsICJmb28iKTsK
KyAgICB0ZXN0LT52ZXJpZnlUaGF0U2NoZW1lTWF0Y2hlc1BvbGljeSgiZm9vIiwgU2VjdXJpdHlQ
b2xpY3lUZXN0OjpMb2NhbCB8IFNlY3VyaXR5UG9saWN5VGVzdDo6Tm9BY2Nlc3MpOworICAgIHdl
YmtpdF9zZWN1cml0eV9tYW5hZ2VyX3JlZ2lzdGVyX3VyaV9zY2hlbWVfYXNfZGlzcGxheV9pc29s
YXRlZCh0ZXN0LT5tX21hbmFnZXIsICJmb28iKTsKKyAgICB0ZXN0LT52ZXJpZnlUaGF0U2NoZW1l
TWF0Y2hlc1BvbGljeSgiZm9vIiwgU2VjdXJpdHlQb2xpY3lUZXN0OjpMb2NhbCB8IFNlY3VyaXR5
UG9saWN5VGVzdDo6Tm9BY2Nlc3MgfCBTZWN1cml0eVBvbGljeVRlc3Q6OkRpc3BsYXlJc29sYXRl
ZCk7CisgICAgd2Via2l0X3NlY3VyaXR5X21hbmFnZXJfcmVnaXN0ZXJfdXJpX3NjaGVtZV9hc19z
ZWN1cmUodGVzdC0+bV9tYW5hZ2VyLCAiZm9vIik7CisgICAgdGVzdC0+dmVyaWZ5VGhhdFNjaGVt
ZU1hdGNoZXNQb2xpY3koImZvbyIsIFNlY3VyaXR5UG9saWN5VGVzdDo6TG9jYWwgfCBTZWN1cml0
eVBvbGljeVRlc3Q6Ok5vQWNjZXNzIHwgU2VjdXJpdHlQb2xpY3lUZXN0OjpEaXNwbGF5SXNvbGF0
ZWQgfCBTZWN1cml0eVBvbGljeVRlc3Q6OlNlY3VyZSk7CisgICAgd2Via2l0X3NlY3VyaXR5X21h
bmFnZXJfcmVnaXN0ZXJfdXJpX3NjaGVtZV9hc19jb3JzX2VuYWJsZWQodGVzdC0+bV9tYW5hZ2Vy
LCAiZm9vIik7CisgICAgdGVzdC0+dmVyaWZ5VGhhdFNjaGVtZU1hdGNoZXNQb2xpY3koImZvbyIs
IFNlY3VyaXR5UG9saWN5VGVzdDo6TG9jYWwgfCBTZWN1cml0eVBvbGljeVRlc3Q6Ok5vQWNjZXNz
IHwgU2VjdXJpdHlQb2xpY3lUZXN0OjpEaXNwbGF5SXNvbGF0ZWQgfCBTZWN1cml0eVBvbGljeVRl
c3Q6OlNlY3VyZQorICAgICAgICB8IFNlY3VyaXR5UG9saWN5VGVzdDo6Q09SU0VuYWJsZWQpOwor
ICAgIHdlYmtpdF9zZWN1cml0eV9tYW5hZ2VyX3JlZ2lzdGVyX3VyaV9zY2hlbWVfYXNfZW1wdHlf
ZG9jdW1lbnQodGVzdC0+bV9tYW5hZ2VyLCAiZm9vIik7CisgICAgdGVzdC0+dmVyaWZ5VGhhdFNj
aGVtZU1hdGNoZXNQb2xpY3koImZvbyIsIFNlY3VyaXR5UG9saWN5VGVzdDo6TG9jYWwgfCBTZWN1
cml0eVBvbGljeVRlc3Q6Ok5vQWNjZXNzIHwgU2VjdXJpdHlQb2xpY3lUZXN0OjpEaXNwbGF5SXNv
bGF0ZWQgfCBTZWN1cml0eVBvbGljeVRlc3Q6OlNlY3VyZQorICAgICAgICB8IFNlY3VyaXR5UG9s
aWN5VGVzdDo6Q09SU0VuYWJsZWQgfCBTZWN1cml0eVBvbGljeVRlc3Q6OkVtcHR5RG9jdW1lbnQp
OworfQorCit2b2lkIGJlZm9yZUFsbCgpCit7CisgICAga1NlcnZlciA9IG5ldyBXZWJLaXRUZXN0
U2VydmVyKCk7CisgICAga1NlcnZlci0+cnVuKHNlcnZlckNhbGxiYWNrKTsKKworICAgIFRlc3Q6
OmFkZCgiV2ViS2l0V2ViQ29udGV4dCIsICJkZWZhdWx0LWNvbnRleHQiLCB0ZXN0V2ViQ29udGV4
dERlZmF1bHQpOworICAgIFBsdWdpbnNUZXN0OjphZGQoIldlYktpdFdlYkNvbnRleHQiLCAiZ2V0
LXBsdWdpbnMiLCB0ZXN0V2ViQ29udGV4dEdldFBsdWdpbnMpOworICAgIFVSSVNjaGVtZVRlc3Q6
OmFkZCgiV2ViS2l0V2ViQ29udGV4dCIsICJ1cmktc2NoZW1lIiwgdGVzdFdlYkNvbnRleHRVUklT
Y2hlbWUpOworICAgIFRlc3Q6OmFkZCgiV2ViS2l0V2ViQ29udGV4dCIsICJzcGVsbC1jaGVja2Vy
IiwgdGVzdFdlYkNvbnRleHRTcGVsbENoZWNrZXIpOworICAgIFdlYlZpZXdUZXN0OjphZGQoIldl
YktpdFdlYkNvbnRleHQiLCAibGFuZ3VhZ2VzIiwgdGVzdFdlYkNvbnRleHRMYW5ndWFnZXMpOwor
ICAgIFNlY3VyaXR5UG9saWN5VGVzdDo6YWRkKCJXZWJLaXRTZWN1cml0eU1hbmFnZXIiLCAic2Vj
dXJpdHktcG9saWN5IiwgdGVzdFdlYkNvbnRleHRTZWN1cml0eVBvbGljeSk7Cit9CisKK3ZvaWQg
YWZ0ZXJBbGwoKQoreworICAgIGRlbGV0ZSBrU2VydmVyOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcCBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0V2ViVmlldy5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYTQ5YjM3NmY0ODE3NGIxOTg4MWQxODE3YjEzNjg2ZTMyM2Y4MDlkOAotLS0g
L2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0
V2ViS2l0V2ViVmlldy5jcHAKQEAgLTAsMCArMSw2MDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJWaWV3
VGVzdC5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+CisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSlNWYWx1ZVJlZi5oPgorI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+
CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCitzdGF0aWMgdm9pZCB0ZXN0V2Vi
Vmlld0RlZmF1bHRDb250ZXh0KFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQorewor
ICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dCh0ZXN0LT5tX3dlYlZpZXcp
ID09IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpKTsKKworICAgIC8vIENoZWNrIHRo
YXQgYSB3ZWIgdmlldyBjcmVhdGVkIHdpdGggZ19vYmplY3RfbmV3IGhhcyB0aGUgZGVmYXVsdCBj
b250ZXh0LgorICAgIEdSZWZQdHI8V2ViS2l0V2ViVmlldz4gd2ViVmlldyA9IFdFQktJVF9XRUJf
VklFVyhnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCX1ZJRVcsIE5VTEwpKTsKKyAgICBnX2Fz
c2VydCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQod2ViVmlldy5nZXQoKSkgPT0gd2Via2l0
X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmll
d0N1c3RvbUNoYXJzZXQoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAg
Z19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19nZXRfY3VzdG9tX2NoYXJzZXQodGVzdC0+bV93ZWJW
aWV3KSk7CisgICAgd2Via2l0X3dlYl92aWV3X3NldF9jdXN0b21fY2hhcnNldCh0ZXN0LT5tX3dl
YlZpZXcsICJ1dGY4Iik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRf
Y3VzdG9tX2NoYXJzZXQodGVzdC0+bV93ZWJWaWV3KSwgPT0sICJ1dGY4Iik7CisgICAgLy8gR28g
YmFjayB0byB0aGUgZGVmYXVsdCBjaGFyc2V0LgorICAgIHdlYmtpdF93ZWJfdmlld19zZXRfY3Vz
dG9tX2NoYXJzZXQodGVzdC0+bV93ZWJWaWV3LCAwKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dl
Yl92aWV3X2dldF9jdXN0b21fY2hhcnNldCh0ZXN0LT5tX3dlYlZpZXcpKTsKK30KKworc3RhdGlj
IHZvaWQgdGVzdFdlYlZpZXdTZXR0aW5ncyhXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRl
cikKK3sKKyAgICBXZWJLaXRTZXR0aW5ncyogZGVmYXVsdFNldHRpbmdzID0gd2Via2l0X3dlYl92
aWV3X2dldF9zZXR0aW5ncyh0ZXN0LT5tX3dlYlZpZXcpOworICAgIGdfYXNzZXJ0KGRlZmF1bHRT
ZXR0aW5ncyk7CisgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfamF2YXNj
cmlwdChkZWZhdWx0U2V0dGluZ3MpKTsKKworICAgIEdSZWZQdHI8V2ViS2l0U2V0dGluZ3M+IG5l
d1NldHRpbmdzID0gYWRvcHRHUmVmKHdlYmtpdF9zZXR0aW5nc19uZXcoKSk7CisgICAgZ19vYmpl
Y3Rfc2V0KEdfT0JKRUNUKG5ld1NldHRpbmdzLmdldCgpKSwgImVuYWJsZS1qYXZhc2NyaXB0Iiwg
RkFMU0UsIE5VTEwpOworICAgIHdlYmtpdF93ZWJfdmlld19zZXRfc2V0dGluZ3ModGVzdC0+bV93
ZWJWaWV3LCBuZXdTZXR0aW5ncy5nZXQoKSk7CisKKyAgICBXZWJLaXRTZXR0aW5ncyogc2V0dGlu
Z3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHRlc3QtPm1fd2ViVmlldyk7CisgICAg
Z19hc3NlcnQoc2V0dGluZ3MgIT0gZGVmYXVsdFNldHRpbmdzKTsKKyAgICBnX2Fzc2VydCghd2Vi
a2l0X3NldHRpbmdzX2dldF9lbmFibGVfamF2YXNjcmlwdChzZXR0aW5ncykpOworCisgICAgR1Jl
ZlB0cjxHdGtXaWRnZXQ+IHdlYlZpZXcyID0gd2Via2l0X3dlYl92aWV3X25ldygpOworICAgIHRl
c3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1Qod2ViVmll
dzIuZ2V0KCkpKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X3NldHRpbmdzKFdFQktJVF9XRUJf
VklFVyh3ZWJWaWV3Mi5nZXQoKSksIHNldHRpbmdzKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X3NldHRpbmdzKFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3Mi5nZXQoKSkpID09IHNl
dHRpbmdzKTsKKworICAgIEdSZWZQdHI8V2ViS2l0U2V0dGluZ3M+IG5ld1NldHRpbmdzMiA9IGFk
b3B0R1JlZih3ZWJraXRfc2V0dGluZ3NfbmV3KCkpOworICAgIHdlYmtpdF93ZWJfdmlld19zZXRf
c2V0dGluZ3MoV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcyLmdldCgpKSwgbmV3U2V0dGluZ3MyLmdl
dCgpKTsKKyAgICBzZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3MoV0VCS0lU
X1dFQl9WSUVXKHdlYlZpZXcyLmdldCgpKSk7CisgICAgZ19hc3NlcnQoc2V0dGluZ3MgPT0gbmV3
U2V0dGluZ3MyLmdldCgpKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJs
ZV9qYXZhc2NyaXB0KHNldHRpbmdzKSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3Wm9v
bUxldmVsKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIGdfYXNzZXJ0
X2NtcGZsb2F0KHdlYmtpdF93ZWJfdmlld19nZXRfem9vbV9sZXZlbCh0ZXN0LT5tX3dlYlZpZXcp
LCA9PSwgMSk7CisgICAgd2Via2l0X3dlYl92aWV3X3NldF96b29tX2xldmVsKHRlc3QtPm1fd2Vi
VmlldywgMi41KTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3pv
b21fbGV2ZWwodGVzdC0+bV93ZWJWaWV3KSwgPT0sIDIuNSk7CisKKyAgICB3ZWJraXRfc2V0dGlu
Z3Nfc2V0X3pvb21fdGV4dF9vbmx5KHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3ModGVzdC0+
bV93ZWJWaWV3KSwgVFJVRSk7CisgICAgLy8gVGhlIHpvb20gbGV2ZWwgc2hvdWxkbid0IGNoYW5n
ZSB3aGVuIHpvb20tdGV4dC1vbmx5IHNldHRpbmcgY2hhbmdlcy4KKyAgICBnX2Fzc2VydF9jbXBm
bG9hdCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3pvb21fbGV2ZWwodGVzdC0+bV93ZWJWaWV3KSwgPT0s
IDIuNSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3UnVuSmF2YVNjcmlwdChXZWJWaWV3
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciogaHRt
bCA9ICI8aHRtbD48Ym9keT48YSBpZD0nV2ViS2l0TGluaycgaHJlZj0naHR0cDovL3d3dy53ZWJr
aXRndGsub3JnLycgdGl0bGU9J1dlYktpdEdUSysgVGl0bGUnPldlYktpdEdUSysgV2Vic2l0ZTwv
YT48L2JvZHk+PC9odG1sPiI7CisgICAgdGVzdC0+bG9hZEh0bWwoaHRtbCwgMCk7CisgICAgdGVz
dC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7
CisgICAgV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCogamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1
bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgid2luZG93LmRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdXZWJLaXRMaW5rJykudGl0bGU7IiwgJmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fz
c2VydChqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOworICAg
IEdPd25QdHI8Y2hhcj4gdmFsdWVTdHJpbmcoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRU
b0NTdHJpbmcoamF2YXNjcmlwdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih2YWx1ZVN0
cmluZy5nZXQoKSwgPT0sICJXZWJLaXRHVEsrIFRpdGxlIik7CisKKyAgICBqYXZhc2NyaXB0UmVz
dWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJ3aW5kb3cuZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1dlYktpdExpbmsnKS5ocmVmOyIsICZlcnJvci5vdXRQdHIo
KSk7CisgICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9y
LmdldCgpKTsKKyAgICB2YWx1ZVN0cmluZy5zZXQoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1
bHRUb0NTdHJpbmcoamF2YXNjcmlwdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih2YWx1
ZVN0cmluZy5nZXQoKSwgPT0sICJodHRwOi8vd3d3LndlYmtpdGd0ay5vcmcvIik7CisKKyAgICBq
YXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVk
KCJ3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1dlYktpdExpbmsnKS50ZXh0Q29udGVu
dCIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7Cisg
ICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKyAgICB2YWx1ZVN0cmluZy5zZXQoV2ViVmlld1Rl
c3Q6OmphdmFzY3JpcHRSZXN1bHRUb0NTdHJpbmcoamF2YXNjcmlwdFJlc3VsdCkpOworICAgIGdf
YXNzZXJ0X2NtcHN0cih2YWx1ZVN0cmluZy5nZXQoKSwgPT0sICJXZWJLaXRHVEsrIFdlYnNpdGUi
KTsKKworICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVu
dGlsRmluaXNoZWQoImEgPSAyNTsiLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGdfYXNzZXJ0KGph
dmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7CisgICAgZ19hc3Nl
cnRfY21wZmxvYXQoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb051bWJlcihqYXZhc2Ny
aXB0UmVzdWx0KSwgPT0sIDI1KTsKKworICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5K
YXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImEgPSAyLjU7IiwgJmVycm9yLm91dFB0cigp
KTsKKyAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydCghZXJyb3Iu
Z2V0KCkpOworICAgIGdfYXNzZXJ0X2NtcGZsb2F0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVz
dWx0VG9OdW1iZXIoamF2YXNjcmlwdFJlc3VsdCksID09LCAyLjUpOworCisgICAgamF2YXNjcmlw
dFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiYSA9IHRy
dWUiLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOwor
ICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7CisgICAgZ19hc3NlcnQoV2ViVmlld1Rlc3Q6Omph
dmFzY3JpcHRSZXN1bHRUb0Jvb2xlYW4oamF2YXNjcmlwdFJlc3VsdCkpOworCisgICAgamF2YXNj
cmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiYSA9
IGZhbHNlIiwgJmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0
KTsKKyAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOworICAgIGdfYXNzZXJ0KCFXZWJWaWV3VGVz
dDo6amF2YXNjcmlwdFJlc3VsdFRvQm9vbGVhbihqYXZhc2NyaXB0UmVzdWx0KSk7CisKKyAgICBq
YXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVk
KCJhID0gbnVsbCIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQoamF2YXNjcmlwdFJl
c3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKyAgICBnX2Fzc2VydChXZWJWaWV3
VGVzdDo6amF2YXNjcmlwdFJlc3VsdElzTnVsbChqYXZhc2NyaXB0UmVzdWx0KSk7CisKKyAgICBq
YXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVk
KCJmdW5jdGlvbiBGb28oKSB7IGEgPSAyNTsgfSBGb28oKTsiLCAmZXJyb3Iub3V0UHRyKCkpOwor
ICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQo
KSk7CisgICAgZ19hc3NlcnQoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRJc1VuZGVmaW5l
ZChqYXZhc2NyaXB0UmVzdWx0KSk7CisKKyAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVu
SmF2YVNjcmlwdEZyb21HUmVzb3VyY2VBbmRXYWl0VW50aWxGaW5pc2hlZCgiL29yZy93ZWJraXQv
d2Via2l0Mmd0ay90ZXN0cy9saW5rLXRpdGxlLmpzIiwgJmVycm9yLm91dFB0cigpKTsKKyAgICBn
X2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOwor
ICAgIHZhbHVlU3RyaW5nLnNldChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmlu
ZyhqYXZhc2NyaXB0UmVzdWx0KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdl
dCgpLCA9PSwgIldlYktpdEdUSysgVGl0bGUiKTsKKworICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0
ZXN0LT5ydW5KYXZhU2NyaXB0RnJvbUdSZXNvdXJjZUFuZFdhaXRVbnRpbEZpbmlzaGVkKCIvd3Jv
bmcvcGF0aC90by9yZXNvdXJjZS5qcyIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQo
IWphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0X2Vycm9yKGVycm9yLmdldCgpLCBHX1JF
U09VUkNFX0VSUk9SLCBHX1JFU09VUkNFX0VSUk9SX05PVF9GT1VORCk7CisgICAgZXJyb3IuY2xl
YXIoKTsKKworICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2Fp
dFVudGlsRmluaXNoZWQoImZvbygpOyIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQo
IWphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0X2Vycm9yKGVycm9yLmdldCgpLCBXRUJL
SVRfSkFWQVNDUklQVF9FUlJPUiwgV0VCS0lUX0pBVkFTQ1JJUFRfRVJST1JfU0NSSVBUX0ZBSUxF
RCk7Cit9CisKK2NsYXNzIEZ1bGxTY3JlZW5DbGllbnRUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3Qg
eworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoRnVsbFNjcmVlbkNsaWVudFRl
c3QpOworCisgICAgZW51bSBGdWxsU2NyZWVuRXZlbnQgeworICAgICAgICBOb25lLAorICAgICAg
ICBFbnRlciwKKyAgICAgICAgTGVhdmUKKyAgICB9OworCisgICAgc3RhdGljIGdib29sZWFuIHZp
ZXdFbnRlckZ1bGxTY3JlZW5DYWxsYmFjayhXZWJLaXRXZWJWaWV3KiwgRnVsbFNjcmVlbkNsaWVu
dFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT5tX2V2ZW50ID0gRW50ZXI7CisgICAg
ICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7CisgICAgICAgIHJldHVybiBG
QUxTRTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gdmlld0xlYXZlRnVsbFNjcmVlbkNh
bGxiYWNrKFdlYktpdFdlYlZpZXcqLCBGdWxsU2NyZWVuQ2xpZW50VGVzdCogdGVzdCkKKyAgICB7
CisgICAgICAgIHRlc3QtPm1fZXZlbnQgPSBMZWF2ZTsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVp
dCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAg
IEZ1bGxTY3JlZW5DbGllbnRUZXN0KCkKKyAgICAgICAgOiBtX2V2ZW50KE5vbmUpCisgICAgewor
ICAgICAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9mdWxsc2NyZWVuKHdlYmtpdF93ZWJf
dmlld19nZXRfc2V0dGluZ3MobV93ZWJWaWV3KSwgVFJVRSk7CisgICAgICAgIGdfc2lnbmFsX2Nv
bm5lY3QobV93ZWJWaWV3LCAiZW50ZXItZnVsbHNjcmVlbiIsIEdfQ0FMTEJBQ0sodmlld0VudGVy
RnVsbFNjcmVlbkNhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93
ZWJWaWV3LCAibGVhdmUtZnVsbHNjcmVlbiIsIEdfQ0FMTEJBQ0sodmlld0xlYXZlRnVsbFNjcmVl
bkNhbGxiYWNrKSwgdGhpcyk7CisgICAgfQorCisgICAgfkZ1bGxTY3JlZW5DbGllbnRUZXN0KCkK
KyAgICB7CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3dl
YlZpZXcsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOworICAgIH0KKwor
ICAgIHZvaWQgcmVxdWVzdEZ1bGxTY3JlZW5BbmRXYWl0VW50aWxFbnRlcmVkRnVsbFNjcmVlbigp
CisgICAgeworICAgICAgICBtX2V2ZW50ID0gTm9uZTsKKyAgICAgICAgd2Via2l0X3dlYl92aWV3
X3J1bl9qYXZhc2NyaXB0KG1fd2ViVmlldywgImRvY3VtZW50LmRvY3VtZW50RWxlbWVudC53ZWJr
aXRSZXF1ZXN0RnVsbFNjcmVlbigpOyIsIDAsIDAsIDApOworICAgICAgICBnX21haW5fbG9vcF9y
dW4obV9tYWluTG9vcCk7CisgICAgfQorCisgICAgc3RhdGljIGdib29sZWFuIGxlYXZlRnVsbFNj
cmVlbklkbGUoRnVsbFNjcmVlbkNsaWVudFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0
LT5rZXlTdHJva2UoR0RLX0tFWV9Fc2NhcGUpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAg
fQorCisgICAgdm9pZCBsZWF2ZUZ1bGxTY3JlZW5BbmRXYWl0VW50aWxMZWZ0RnVsbFNjcmVlbigp
CisgICAgeworICAgICAgICBtX2V2ZW50ID0gTm9uZTsKKyAgICAgICAgZ19pZGxlX2FkZChyZWlu
dGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihsZWF2ZUZ1bGxTY3JlZW5JZGxlKSwgdGhpcyk7Cisg
ICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBGdWxsU2Ny
ZWVuRXZlbnQgbV9ldmVudDsKK307CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3RnVsbFNjcmVl
bihGdWxsU2NyZWVuQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0
LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKKyAgICB0ZXN0LT5sb2FkSHRtbCgi
PGh0bWw+PGJvZHk+RnVsbFNjcmVlbiB0ZXN0PC9ib2R5PjwvaHRtbD4iLCAwKTsKKyAgICB0ZXN0
LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICB0ZXN0LT5yZXF1ZXN0RnVsbFNjcmVlbkFu
ZFdhaXRVbnRpbEVudGVyZWRGdWxsU2NyZWVuKCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3Qt
Pm1fZXZlbnQsID09LCBGdWxsU2NyZWVuQ2xpZW50VGVzdDo6RW50ZXIpOworICAgIHRlc3QtPmxl
YXZlRnVsbFNjcmVlbkFuZFdhaXRVbnRpbExlZnRGdWxsU2NyZWVuKCk7CisgICAgZ19hc3NlcnRf
Y21waW50KHRlc3QtPm1fZXZlbnQsID09LCBGdWxsU2NyZWVuQ2xpZW50VGVzdDo6TGVhdmUpOwor
fQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0NhblNob3dNSU1FVHlwZShXZWJWaWV3VGVzdCog
dGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICAvLyBTdXBwb3J0ZWQgTUlNRSB0eXBlcy4KKyAg
ICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfY2FuX3Nob3dfbWltZV90eXBlKHRlc3QtPm1fd2Vi
VmlldywgInRleHQvaHRtbCIpKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfY2FuX3No
b3dfbWltZV90eXBlKHRlc3QtPm1fd2ViVmlldywgInRleHQvcGxhaW4iKSk7CisgICAgZ19hc3Nl
cnQod2Via2l0X3dlYl92aWV3X2Nhbl9zaG93X21pbWVfdHlwZSh0ZXN0LT5tX3dlYlZpZXcsICJp
bWFnZS9qcGVnIikpOworCisgICAgLy8gVW5zdXBwb3J0ZWQgTUlNRSB0eXBlcy4KKyAgICBnX2Fz
c2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9zaG93X21pbWVfdHlwZSh0ZXN0LT5tX3dlYlZpZXcs
ICJ0ZXh0L3ZjYXJkIikpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX3Nob3df
bWltZV90eXBlKHRlc3QtPm1fd2ViVmlldywgImFwcGxpY2F0aW9uL3BkZiIpKTsKKyAgICBnX2Fz
c2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9zaG93X21pbWVfdHlwZSh0ZXN0LT5tX3dlYlZpZXcs
ICJhcHBsaWNhdGlvbi96aXAiKSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5f
c2hvd19taW1lX3R5cGUodGVzdC0+bV93ZWJWaWV3LCAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFt
IikpOworCisgICAgLy8gUGx1Z2lucyBhcmUgb25seSBzdXBwb3J0ZWQgd2hlbiBlbmFibGVkLgor
ICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfYWRkaXRpb25hbF9wbHVnaW5zX2RpcmVjdG9yeSh3
ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQodGVzdC0+bV93ZWJWaWV3KSwgV0VCS0lUX1RFU1Rf
UExVR0lOX0RJUik7CisgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2Nhbl9zaG93X21pbWVf
dHlwZSh0ZXN0LT5tX3dlYlZpZXcsICJhcHBsaWNhdGlvbi94LXdlYmtpdC10ZXN0LW5ldHNjYXBl
IikpOworICAgIHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX3BsdWdpbnMod2Via2l0X3dlYl92
aWV3X2dldF9zZXR0aW5ncyh0ZXN0LT5tX3dlYlZpZXcpLCBGQUxTRSk7CisgICAgZ19hc3NlcnQo
IXdlYmtpdF93ZWJfdmlld19jYW5fc2hvd19taW1lX3R5cGUodGVzdC0+bV93ZWJWaWV3LCAiYXBw
bGljYXRpb24veC13ZWJraXQtdGVzdC1uZXRzY2FwZSIpKTsKK30KKworY2xhc3MgRm9ybUNsaWVu
dFRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1Rf
RklYVFVSRShGb3JtQ2xpZW50VGVzdCk7CisKKyAgICBzdGF0aWMgdm9pZCBzdWJtaXRGb3JtQ2Fs
bGJhY2soV2ViS2l0V2ViVmlldyosIFdlYktpdEZvcm1TdWJtaXNzaW9uUmVxdWVzdCogcmVxdWVz
dCwgRm9ybUNsaWVudFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT5zdWJtaXRGb3Jt
KHJlcXVlc3QpOworICAgIH0KKworICAgIEZvcm1DbGllbnRUZXN0KCkKKyAgICAgICAgOiBtX3N1
Ym1pdFBvc2l0aW9uWCgwKQorICAgICAgICAsIG1fc3VibWl0UG9zaXRpb25ZKDApCisgICAgewor
ICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgInN1Ym1pdC1mb3JtIiwgR19DQUxM
QkFDSyhzdWJtaXRGb3JtQ2FsbGJhY2spLCB0aGlzKTsKKyAgICB9CisKKyAgICB+Rm9ybUNsaWVu
dFRlc3QoKQorICAgIHsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRj
aGVkKG1fd2ViVmlldywgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7Cisg
ICAgfQorCisgICAgdm9pZCBzdWJtaXRGb3JtKFdlYktpdEZvcm1TdWJtaXNzaW9uUmVxdWVzdCog
cmVxdWVzdCkKKyAgICB7CisgICAgICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0Rmlu
aXNoZXMoR19PQkpFQ1QocmVxdWVzdCkpOworICAgICAgICBtX3JlcXVlc3QgPSByZXF1ZXN0Owor
ICAgICAgICB3ZWJraXRfZm9ybV9zdWJtaXNzaW9uX3JlcXVlc3Rfc3VibWl0KHJlcXVlc3QpOwor
ICAgICAgICBxdWl0TWFpbkxvb3AoKTsKKyAgICB9CisKKyAgICBHSGFzaFRhYmxlKiB3YWl0VW50
aWxGb3JtU3VibWl0dGVkQW5kR2V0VGV4dEZpZWxkcygpCisgICAgeworICAgICAgICBnX21haW5f
bG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgICAgIHJldHVybiB3ZWJraXRfZm9ybV9zdWJtaXNz
aW9uX3JlcXVlc3RfZ2V0X3RleHRfZmllbGRzKG1fcmVxdWVzdC5nZXQoKSk7CisgICAgfQorCisg
ICAgc3RhdGljIGdib29sZWFuIGRvQ2xpY2tJZGxlQ2FsbGJhY2soRm9ybUNsaWVudFRlc3QqIHRl
c3QpCisgICAgeworICAgICAgICB0ZXN0LT5jbGlja01vdXNlQnV0dG9uKHRlc3QtPm1fc3VibWl0
UG9zaXRpb25YLCB0ZXN0LT5tX3N1Ym1pdFBvc2l0aW9uWSwgMSk7CisgICAgICAgIHJldHVybiBG
QUxTRTsKKyAgICB9CisKKyAgICB2b2lkIHN1Ym1pdEZvcm1BdFBvc2l0aW9uKGludCB4LCBpbnQg
eSkKKyAgICB7CisgICAgICAgIG1fc3VibWl0UG9zaXRpb25YID0geDsKKyAgICAgICAgbV9zdWJt
aXRQb3NpdGlvblkgPSB5OworICAgICAgICBnX2lkbGVfYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8R1Nv
dXJjZUZ1bmM+KGRvQ2xpY2tJZGxlQ2FsbGJhY2spLCB0aGlzKTsKKyAgICB9CisKKyAgICBpbnQg
bV9zdWJtaXRQb3NpdGlvblg7CisgICAgaW50IG1fc3VibWl0UG9zaXRpb25ZOworICAgIEdSZWZQ
dHI8V2ViS2l0Rm9ybVN1Ym1pc3Npb25SZXF1ZXN0PiBtX3JlcXVlc3Q7Cit9OworCitzdGF0aWMg
dm9pZCB0ZXN0V2ViVmlld1N1Ym1pdEZvcm0oRm9ybUNsaWVudFRlc3QqIHRlc3QsIGdjb25zdHBv
aW50ZXIpCit7CisgICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7CisK
KyAgICBjb25zdCBjaGFyKiBmb3JtSFRNTCA9CisgICAgICAgICI8aHRtbD48Ym9keT4iCisgICAg
ICAgICIgPGZvcm0gYWN0aW9uPScjJz4iCisgICAgICAgICIgIDxpbnB1dCB0eXBlPSd0ZXh0JyBu
YW1lPSd0ZXh0MScgdmFsdWU9J3ZhbHVlMSc+IgorICAgICAgICAiICA8aW5wdXQgdHlwZT0ndGV4
dCcgbmFtZT0ndGV4dDInIHZhbHVlPSd2YWx1ZTInPiIKKyAgICAgICAgIiAgPGlucHV0IHR5cGU9
J3Bhc3N3b3JkJyBuYW1lPSdwYXNzd29yZCcgdmFsdWU9J3NlY3JldCc+IgorICAgICAgICAiICA8
dGV4dGFyZWEgY29scz0nNScgcm93cz0nNScgbmFtZT0ndGV4dGFyZWEnPlRleHQ8L3RleHRhcmVh
PiIKKyAgICAgICAgIiAgPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0naGlkZGVuMScgdmFsdWU9
J2hpZGRlbjEnPiIKKyAgICAgICAgIiAgPGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9J1N1Ym1p
dCcgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRvcDoxJyBzaXplPScxMCc+Igor
ICAgICAgICAiIDwvZm9ybT4iCisgICAgICAgICI8L2JvZHk+PC9odG1sPiI7CisKKyAgICB0ZXN0
LT5sb2FkSHRtbChmb3JtSFRNTCwgImZpbGU6Ly8vIik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9h
ZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5zdWJtaXRGb3JtQXRQb3NpdGlvbig1LCA1KTsKKyAg
ICBHSGFzaFRhYmxlKiB2YWx1ZXMgPSB0ZXN0LT53YWl0VW50aWxGb3JtU3VibWl0dGVkQW5kR2V0
VGV4dEZpZWxkcygpOworICAgIGdfYXNzZXJ0KHZhbHVlcyk7CisgICAgZ19hc3NlcnRfY21wdWlu
dChnX2hhc2hfdGFibGVfc2l6ZSh2YWx1ZXMpLCA9PSwgMyk7CisgICAgZ19hc3NlcnRfY21wc3Ry
KHN0YXRpY19jYXN0PGNoYXIqPihnX2hhc2hfdGFibGVfbG9va3VwKHZhbHVlcywgInRleHQxIikp
LCA9PSwgInZhbHVlMSIpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzdGF0aWNfY2FzdDxjaGFyKj4o
Z19oYXNoX3RhYmxlX2xvb2t1cCh2YWx1ZXMsICJ0ZXh0MiIpKSwgPT0sICJ2YWx1ZTIiKTsKKyAg
ICBnX2Fzc2VydF9jbXBzdHIoc3RhdGljX2Nhc3Q8Y2hhcio+KGdfaGFzaF90YWJsZV9sb29rdXAo
dmFsdWVzLCAicGFzc3dvcmQiKSksID09LCAic2VjcmV0Iik7Cit9CisKK2NsYXNzIFNhdmVXZWJW
aWV3VGVzdDogcHVibGljIFdlYlZpZXdUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVT
VF9GSVhUVVJFKFNhdmVXZWJWaWV3VGVzdCk7CisKKyAgICBTYXZlV2ViVmlld1Rlc3QoKQorICAg
ICAgICA6IG1fdGVtcERpcmVjdG9yeShnX2Rpcl9tYWtlX3RtcCgiV2ViS2l0MlNhdmVWaWV3VGVz
dC1YWFhYWFgiLCAwKSkKKyAgICB7CisgICAgfQorCisgICAgflNhdmVXZWJWaWV3VGVzdCgpCisg
ICAgeworICAgICAgICBpZiAoR19JU19GSUxFKG1fZmlsZS5nZXQoKSkpCisgICAgICAgICAgICBn
X2ZpbGVfZGVsZXRlKG1fZmlsZS5nZXQoKSwgMCwgMCk7CisKKyAgICAgICAgaWYgKEdfSVNfSU5Q
VVRfU1RSRUFNKG1faW5wdXRTdHJlYW0uZ2V0KCkpKQorICAgICAgICAgICAgZ19pbnB1dF9zdHJl
YW1fY2xvc2UobV9pbnB1dFN0cmVhbS5nZXQoKSwgMCwgMCk7CisKKyAgICAgICAgaWYgKG1fdGVt
cERpcmVjdG9yeSkKKyAgICAgICAgICAgIGdfcm1kaXIobV90ZW1wRGlyZWN0b3J5LmdldCgpKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCB3ZWJWaWV3U2F2ZWRUb1N0cmVhbUNhbGxiYWNrKEdP
YmplY3QqIG9iamVjdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIFNhdmVXZWJWaWV3VGVzdCogdGVz
dCkKKyAgICB7CisgICAgICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICAgICAgdGVzdC0+
bV9pbnB1dFN0cmVhbSA9IGFkb3B0R1JlZih3ZWJraXRfd2ViX3ZpZXdfc2F2ZV9maW5pc2godGVz
dC0+bV93ZWJWaWV3LCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSkpOworICAgICAgICBnX2Fzc2Vy
dChHX0lTX0lOUFVUX1NUUkVBTSh0ZXN0LT5tX2lucHV0U3RyZWFtLmdldCgpKSk7CisgICAgICAg
IGdfYXNzZXJ0KCFlcnJvcik7CisKKyAgICAgICAgdGVzdC0+cXVpdE1haW5Mb29wKCk7CisgICAg
fQorCisgICAgc3RhdGljIHZvaWQgd2ViVmlld1NhdmVkVG9GaWxlQ2FsbGJhY2soR09iamVjdCog
b2JqZWN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgU2F2ZVdlYlZpZXdUZXN0KiB0ZXN0KQorICAg
IHsKKyAgICAgICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAgICAgICBnX2Fzc2VydCh3ZWJr
aXRfd2ViX3ZpZXdfc2F2ZV90b19maWxlX2ZpbmlzaCh0ZXN0LT5tX3dlYlZpZXcsIHJlc3VsdCwg
JmVycm9yLm91dFB0cigpKSk7CisgICAgICAgIGdfYXNzZXJ0KCFlcnJvcik7CisKKyAgICAgICAg
dGVzdC0+cXVpdE1haW5Mb29wKCk7CisgICAgfQorCisgICAgdm9pZCBzYXZlQW5kV2FpdEZvclN0
cmVhbSgpCisgICAgeworICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfc2F2ZShtX3dlYlZpZXcsIFdF
QktJVF9TQVZFX01PREVfTUhUTUwsIDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxs
YmFjaz4od2ViVmlld1NhdmVkVG9TdHJlYW1DYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX21h
aW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgfQorCisgICAgdm9pZCBzYXZlQW5kV2FpdEZv
ckZpbGUoKQorICAgIHsKKyAgICAgICAgbV9zYXZlRGVzdGluYXRpb25GaWxlUGF0aC5zZXQoZ19i
dWlsZF9maWxlbmFtZShtX3RlbXBEaXJlY3RvcnkuZ2V0KCksICJ0ZXN0V2ViVmlld1NhdmVSZXN1
bHQubWh0IiwgTlVMTCkpOworICAgICAgICBtX2ZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19m
b3JfcGF0aChtX3NhdmVEZXN0aW5hdGlvbkZpbGVQYXRoLmdldCgpKSk7CisgICAgICAgIHdlYmtp
dF93ZWJfdmlld19zYXZlX3RvX2ZpbGUobV93ZWJWaWV3LCBtX2ZpbGUuZ2V0KCksIFdFQktJVF9T
QVZFX01PREVfTUhUTUwsIDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4o
d2ViVmlld1NhdmVkVG9GaWxlQ2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgZ19tYWluX2xvb3Bf
cnVuKG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIEdPd25QdHI8Y2hhcj4gbV90ZW1wRGlyZWN0
b3J5OworICAgIEdPd25QdHI8Y2hhcj4gbV9zYXZlRGVzdGluYXRpb25GaWxlUGF0aDsKKyAgICBH
UmVmUHRyPEdJbnB1dFN0cmVhbT4gbV9pbnB1dFN0cmVhbTsKKyAgICBHUmVmUHRyPEdGaWxlPiBt
X2ZpbGU7Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1NhdmUoU2F2ZVdlYlZpZXdUZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD4iCisg
ICAgICAgICI8Ym9keT4iCisgICAgICAgICIgIDxwPkEgcGFyYWdyYXBoIHdpdGggcGxhaW4gdGV4
dDwvcD4iCisgICAgICAgICIgIDxwPiIKKyAgICAgICAgIiAgICBBIHJlZCBib3g6IDxpbWcgc3Jj
PSdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFJQUFBQUND
QUlBQUFEOTFKcHpBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUIzUkpUVVVIM0FZV0RU
TVZ3blNabndBQUFCMXBWRmgwUTI5dGJXVnVkQUFBQUFBQVEzSmxZWFJsWkNCM2FYUm9JRWRKVFZC
a0xtVUhBQUFBRmtsRVFWUUkxMlA4ejhEQXdNREF4TURBd01EQUFBQU5IUUVESyttbXlBQUFBQUJK
UlU1RXJrSmdnZz09Jz48L2JyPiIKKyAgICAgICAgIiAgICBBIGJsdWUgYm94OiA8aW1nIHNyYz0n
ZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBSUFBQUFDQ0FJ
QUFBRDkxSnB6QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDNBWVdEVE12
QkhoQUxRQUFBQjFwVkZoMFEyOXRiV1Z1ZEFBQUFBQUFRM0psWVhSbFpDQjNhWFJvSUVkSlRWQmtM
bVVIQUFBQUZrbEVRVlFJMTJOazRQblB3TURBeE1EQXdNREFBQUFMcndFUFBJczFwZ0FBQUFCSlJV
NUVya0pnZ2c9PSc+IgorICAgICAgICAiICA8L3A+IgorICAgICAgICAiPC9ib2R5PiIKKyAgICAg
ICAgIjwvaHRtbD4iLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKwor
ICAgIC8vIFdyaXRlIHRvIGEgZmlsZSBhbmQgdG8gYW4gaW5wdXQgc3RyZWFtLgorICAgIHRlc3Qt
PnNhdmVBbmRXYWl0Rm9yRmlsZSgpOworICAgIHRlc3QtPnNhdmVBbmRXYWl0Rm9yU3RyZWFtKCk7
CisKKyAgICAvLyBXZSBzaG91bGQgaGF2ZSBleGFjdGx5IHRoZSBzYW1lIGFtb3VudCBvZiBieXRl
cyBpbiB0aGUgZmlsZQorICAgIC8vIHRoYW4gdGhvc2UgY29taW5nIGZyb20gdGhlIEdJbnB1dFN0
cmVhbS4gV2UgZG9uJ3QgY29tcGFyZSB0aGUKKyAgICAvLyBzdHJpbmdzIHJlYWQgc2luY2UgdGhl
ICdEYXRlJyBmaWVsZCBhbmQgdGhlIGJvdW5kYXJpZXMgd2lsbCBiZQorICAgIC8vIGRpZmZlcmVu
dCBvbiBlYWNoIGNhc2UuIE1IVE1MIGZ1bmN0aW9uYWxpdHkgd2lsbCBiZSB0ZXN0ZWQgYnkKKyAg
ICAvLyBMYXlvdXQgdGVzdHMsIHNvIGNoZWNraW5nIHRoZSBhbW91bnQgb2YgYnl0ZXMgaXMgZW5v
dWdoLgorICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBnY2hhciBidWZmZXJbNTEyXSA9
IHsgMCB9OworICAgIGdzc2l6ZSByZWFkQnl0ZXMgPSAwOworICAgIGdzc2l6ZSB0b3RhbEJ5dGVz
RnJvbVN0cmVhbSA9IDA7CisgICAgd2hpbGUgKHJlYWRCeXRlcyA9IGdfaW5wdXRfc3RyZWFtX3Jl
YWQodGVzdC0+bV9pbnB1dFN0cmVhbS5nZXQoKSwgJmJ1ZmZlciwgNTEyLCAwLCAmZXJyb3Iub3V0
UHRyKCkpKSB7CisgICAgICAgIGdfYXNzZXJ0KCFlcnJvcik7CisgICAgICAgIHRvdGFsQnl0ZXNG
cm9tU3RyZWFtICs9IHJlYWRCeXRlczsKKyAgICB9CisKKyAgICAvLyBDaGVjayB0aGF0IHRoZSBm
aWxlIGV4aXN0cyBhbmQgdGhhdCBpdCBjb250YWlucyB0aGUgc2FtZSBhbW91bnQgb2YgYnl0ZXMu
CisgICAgR1JlZlB0cjxHRmlsZUluZm8+IGZpbGVJbmZvID0gYWRvcHRHUmVmKGdfZmlsZV9xdWVy
eV9pbmZvKHRlc3QtPm1fZmlsZS5nZXQoKSwgR19GSUxFX0FUVFJJQlVURV9TVEFOREFSRF9TSVpF
LCBzdGF0aWNfY2FzdDxHRmlsZVF1ZXJ5SW5mb0ZsYWdzPigwKSwgMCwgMCkpOworICAgIGdfYXNz
ZXJ0X2NtcGludChnX2ZpbGVfaW5mb19nZXRfc2l6ZShmaWxlSW5mby5nZXQoKSksID09LCB0b3Rh
bEJ5dGVzRnJvbVN0cmVhbSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3TW9kZShXZWJW
aWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciog
aW5kZXhIVE1MID0gIjxodG1sPjxib2R5PjxwPlRlc3QgV2ViIFZpZXcgTW9kZTwvcD48L2JvZHk+
PC9odG1sPiI7CisKKyAgICAvLyBXZWIgbW9kZS4KKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtp
dF93ZWJfdmlld19nZXRfdmlld19tb2RlKHRlc3QtPm1fd2ViVmlldyksID09LCBXRUJLSVRfVklF
V19NT0RFX1dFQik7CisgICAgdGVzdC0+bG9hZEh0bWwoaW5kZXhIVE1MLCAwKTsKKyAgICB0ZXN0
LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBXZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBq
YXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVk
KCJ3aW5kb3cuZG9jdW1lbnQuYm9keS50ZXh0Q29udGVudDsiLCAwKTsKKyAgICBHT3duUHRyPGNo
YXI+IHZhbHVlU3RyaW5nKFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGph
dmFzY3JpcHRSZXN1bHQpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCks
ID09LCAiVGVzdCBXZWIgVmlldyBNb2RlIik7CisKKyAgICAvLyBTb3VyY2UgbW9kZS4KKyAgICB3
ZWJraXRfd2ViX3ZpZXdfc2V0X3ZpZXdfbW9kZSh0ZXN0LT5tX3dlYlZpZXcsIFdFQktJVF9WSUVX
X01PREVfU09VUkNFKTsKKyAgICB0ZXN0LT5sb2FkSHRtbChpbmRleEhUTUwsIDApOworICAgIHRl
c3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0
LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoIndpbmRvdy5kb2N1bWVudC5ib2R5
LnRleHRDb250ZW50OyIsIDApOworICAgIHZhbHVlU3RyaW5nLnNldChXZWJWaWV3VGVzdDo6amF2
YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7CisgICAgZ19hc3NlcnRf
Y21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgaW5kZXhIVE1MKTsKK30KKworLy8gVG8gdGVz
dCBwYWdlIHZpc2liaWxpdHkgQVBJLiBDdXJyZW50bHkgb25seSAndmlzaWJsZScgYW5kICdoaWRk
ZW4nIHN0YXRlcyBhcmUgaW1wbGVtZW50ZWQgZnVsbHkgaW4gV2ViQ29yZS4KKy8vIFNlZSBhbHNv
IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvV0QtcGFnZS12aXNpYmlsaXR5LTIwMTEwNjAyLyBh
bmQgaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vY2hyb21lL3doaXRlcGFwZXJzL3BhZ2V2
aXNpYmlsaXR5CitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1BhZ2VWaXNpYmlsaXR5KFdlYlZpZXdU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48
dGl0bGU+PC90aXRsZT4iCisgICAgICAgICI8Ym9keT48cD5UZXN0IFdlYiBQYWdlIFZpc2liaWxp
dHk8L3A+IgorICAgICAgICAiPHNjcmlwdD4iCisgICAgICAgICJkb2N1bWVudC5hZGRFdmVudExp
c3RlbmVyKFwidmlzaWJpbGl0eWNoYW5nZVwiLCBvblZpc2liaWxpdHlDaGFuZ2UsIGZhbHNlKTsi
CisgICAgICAgICJmdW5jdGlvbiBvblZpc2liaWxpdHlDaGFuZ2UoKSB7IgorICAgICAgICAiICAg
IGRvY3VtZW50LnRpdGxlID0gZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlOyIKKyAgICAgICAgIn0i
CisgICAgICAgICI8L3NjcmlwdD4iCisgICAgICAgICI8L2JvZHk+PC9odG1sPiIsCisgICAgICAg
IDApOworCisgICAgLy8gV2FpdCB1bnRpbGwgdGhlIHBhZ2UgaXMgbG9hZGVkLiBJbml0aWFsIHZp
c2liaWxpdHkgc2hvdWxkIGJlICdoaWRkZW4nLgorICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5p
c2hlZCgpOworCisgICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAgIFdlYktpdEphdmFzY3Jp
cHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVu
dGlsRmluaXNoZWQoImRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZTsiLCAmZXJyb3Iub3V0UHRyKCkp
OworICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KCFlcnJvci5n
ZXQoKSk7CisgICAgR093blB0cjxjaGFyPiB2YWx1ZVN0cmluZyhXZWJWaWV3VGVzdDo6amF2YXNj
cmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7CisgICAgZ19hc3NlcnRfY21w
c3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgImhpZGRlbiIpOworCisgICAgamF2YXNjcmlwdFJl
c3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQu
aGlkZGVuOyIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3Vs
dCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKyAgICBnX2Fzc2VydChXZWJWaWV3VGVz
dDo6amF2YXNjcmlwdFJlc3VsdFRvQm9vbGVhbihqYXZhc2NyaXB0UmVzdWx0KSk7CisKKyAgICAv
LyBTaG93IHRoZSBwYWdlLiBUaGUgdmlzaWJpbGl0eSBzaG91bGQgYmUgdXBkYXRlZCB0byAndmlz
aWJsZScuCisgICAgdGVzdC0+c2hvd0luV2luZG93KCk7CisgICAgdGVzdC0+d2FpdFVudGlsVGl0
bGVDaGFuZ2VkKCk7CisKKyAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlw
dEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU7IiwgJmVycm9y
Lm91dFB0cigpKTsKKyAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2Vy
dCghZXJyb3IuZ2V0KCkpOworICAgIHZhbHVlU3RyaW5nLnNldChXZWJWaWV3VGVzdDo6amF2YXNj
cmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7CisgICAgZ19hc3NlcnRfY21w
c3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgInZpc2libGUiKTsKKworICAgIGphdmFzY3JpcHRS
ZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImRvY3VtZW50
LmhpZGRlbjsiLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1
bHQpOworICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7CisgICAgZ19hc3NlcnQoIVdlYlZpZXdU
ZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9Cb29sZWFuKGphdmFzY3JpcHRSZXN1bHQpKTsKKworICAg
IC8vIEhpZGUgdGhlIHBhZ2UuIFRoZSB2aXNpYmlsaXR5IHNob3VsZCBiZSB1cGRhdGVkIHRvICdo
aWRkZW4nLgorICAgIGd0a193aWRnZXRfaGlkZShHVEtfV0lER0VUKHRlc3QtPm1fd2ViVmlldykp
OworICAgIHRlc3QtPndhaXRVbnRpbFRpdGxlQ2hhbmdlZCgpOworCisgICAgamF2YXNjcmlwdFJl
c3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQu
dmlzaWJpbGl0eVN0YXRlOyIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQoamF2YXNj
cmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKyAgICB2YWx1ZVN0cmlu
Zy5zZXQoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0NTdHJpbmcoamF2YXNjcmlwdFJl
c3VsdCkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih2YWx1ZVN0cmluZy5nZXQoKSwgPT0sICJoaWRk
ZW4iKTsKKworICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2Fp
dFVudGlsRmluaXNoZWQoImRvY3VtZW50LmhpZGRlbjsiLCAmZXJyb3Iub3V0UHRyKCkpOworICAg
IGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7
CisgICAgZ19hc3NlcnQoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0Jvb2xlYW4oamF2
YXNjcmlwdFJlc3VsdCkpOworfQorCitjbGFzcyBTbmFwc2hvdFdlYlZpZXdUZXN0OiBwdWJsaWMg
V2ViVmlld1Rlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoU25hcHNo
b3RXZWJWaWV3VGVzdCk7CisKKyAgICBzdGF0aWMgdm9pZCBvblNuYXBzaG90Q2FuY2VsbGVkUmVh
ZHkoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIEdBc3luY1Jlc3VsdCogcmVzLCBTbmFwc2hvdFdl
YlZpZXdUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgR093blB0cjxHRXJyb3I+IGVycm9yOwor
ICAgICAgICB0ZXN0LT5tX3N1cmZhY2UgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NuYXBzaG90X2Zp
bmlzaCh3ZWJfdmlldywgcmVzLCAmZXJyb3Iub3V0UHRyKCkpOworICAgICAgICBnX2Fzc2VydCgh
dGVzdC0+bV9zdXJmYWNlKTsKKyAgICAgICAgZ19hc3NlcnRfZXJyb3IoZXJyb3IuZ2V0KCksIEdf
SU9fRVJST1IsIEdfSU9fRVJST1JfQ0FOQ0VMTEVEKTsKKyAgICAgICAgdGVzdC0+cXVpdE1haW5M
b29wKCk7CisgICAgfQorCisgICAgZ2Jvb2xlYW4gZ2V0U25hcHNob3RBbmRDYW5jZWwoKQorICAg
IHsKKyAgICAgICAgaWYgKG1fc3VyZmFjZSkKKyAgICAgICAgICAgIGNhaXJvX3N1cmZhY2VfZGVz
dHJveShtX3N1cmZhY2UpOworICAgICAgICBtX3N1cmZhY2UgPSAwOworICAgICAgICBHUmVmUHRy
PEdDYW5jZWxsYWJsZT4gY2FuY2VsbGFibGUgPSBhZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9uZXco
KSk7CisgICAgICAgIHdlYmtpdF93ZWJfdmlld19nZXRfc25hcHNob3QobV93ZWJWaWV3LCBXRUJL
SVRfU05BUFNIT1RfUkVHSU9OX1ZJU0lCTEUsIFdFQktJVF9TTkFQU0hPVF9PUFRJT05TX05PTkUs
IGNhbmNlbGxhYmxlLmdldCgpLCByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+
KG9uU25hcHNob3RDYW5jZWxsZWRSZWFkeSksIHRoaXMpOworICAgICAgICBnX2NhbmNlbGxhYmxl
X2NhbmNlbChjYW5jZWxsYWJsZS5nZXQoKSk7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21h
aW5Mb29wKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK307CisKK3N0YXRpYyB2
b2lkIHRlc3RXZWJWaWV3U25hcHNob3QoU25hcHNob3RXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHk+PHA+V2hhdGV2ZXI8
L3A+PC9ib2R5PjwvaHRtbD4iLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQo
KTsKKworICAgIC8vIFdlYlZpZXcgbm90IHZpc2libGUuCisgICAgY2Fpcm9fc3VyZmFjZV90KiBz
dXJmYWNlMSA9IHRlc3QtPmdldFNuYXBzaG90QW5kV2FpdFVudGlsUmVhZHkoV0VCS0lUX1NOQVBT
SE9UX1JFR0lPTl9WSVNJQkxFLCBXRUJLSVRfU05BUFNIT1RfT1BUSU9OU19OT05FKTsKKyAgICBn
X2Fzc2VydCghc3VyZmFjZTEpOworCisgICAgLy8gU2hvdyBzdXJmYWNlLCByZXNpemUgdG8gNTB4
NTAsIHRyeSBhZ2Fpbi4KKyAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQo
KTsKKyAgICB0ZXN0LT5yZXNpemVWaWV3KDUwLCA1MCk7CisgICAgc3VyZmFjZTEgPSB0ZXN0LT5n
ZXRTbmFwc2hvdEFuZFdhaXRVbnRpbFJlYWR5KFdFQktJVF9TTkFQU0hPVF9SRUdJT05fVklTSUJM
RSwgV0VCS0lUX1NOQVBTSE9UX09QVElPTlNfTk9ORSk7CisgICAgZ19hc3NlcnQoc3VyZmFjZTEp
OworCisgICAgLy8gb2J0YWluZWQgc3VyZmFjZSBzaG91bGQgYmUgYXQgdGhlIG1vc3QgNTB4NTAu
IFN0b3JlIHRoZSBzaXplCisgICAgLy8gZm9yIGNvbXBhcmlzb24gbGF0ZXIuCisgICAgaW50IHdp
ZHRoID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZTEpOworICAgIGludCBo
ZWlnaHQgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZTEpOworICAgIGdf
YXNzZXJ0X2NtcGludCh3aWR0aCwgPD0sIDUwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoaGVpZ2h0
LCA8PSwgNTApOworCisgICAgLy8gU2VsZWN0IGFsbCB0ZXh0IGluIHRoZSBXZWJWaWV3LCByZXF1
ZXN0IGEgc25hcHNob3QgaWdub3Jpbmcgc2VsZWN0aW9uLgorICAgIHRlc3QtPnNlbGVjdEFsbCgp
OworICAgIHN1cmZhY2UxID0gY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2UodGVzdC0+Z2V0U25hcHNo
b3RBbmRXYWl0VW50aWxSZWFkeShXRUJLSVRfU05BUFNIT1RfUkVHSU9OX1ZJU0lCTEUsIFdFQktJ
VF9TTkFQU0hPVF9PUFRJT05TX05PTkUpKTsKKyAgICBnX2Fzc2VydChzdXJmYWNlMSk7CisgICAg
Z19hc3NlcnRfY21waW50KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UxKSwg
PT0sIHdpZHRoKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRf
aGVpZ2h0KHN1cmZhY2UxKSwgPT0sIGhlaWdodCk7CisKKyAgICAvLyBDcmVhdGUgaWRlbnRpY2Fs
IHN1cmZhY2UuCisgICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlMiA9IHRlc3QtPmdldFNuYXBz
aG90QW5kV2FpdFVudGlsUmVhZHkoV0VCS0lUX1NOQVBTSE9UX1JFR0lPTl9WSVNJQkxFLCBXRUJL
SVRfU05BUFNIT1RfT1BUSU9OU19OT05FKTsKKyAgICBnX2Fzc2VydChzdXJmYWNlMik7CisKKyAg
ICAvLyBDb21wYXJlIHRoZXNlIHR3bywgdGhleSBzaG91bGQgYmUgaWRlbnRpY2FsLgorICAgIGdf
YXNzZXJ0KFRlc3Q6OmNhaXJvU3VyZmFjZXNFcXVhbChzdXJmYWNlMSwgc3VyZmFjZTIpKTsKKwor
ICAgIC8vIFJlcXVlc3QgYSBuZXcgc25hcHNob3QsIGluY2x1ZGluZyB0aGUgc2VsZWN0aW9uIHRo
aXMgdGltZS4gVGhlCisgICAgLy8gc2l6ZSBzaG91bGQgYmUgdGhlIHNhbWUgYnV0IHRoZSByZXN1
bHQgbXVzdCBiZSBkaWZmZXJlbnQgdG8gdGhlCisgICAgLy8gb25lIHByZXZpb3VzbHkgb2J0YWlu
ZWQuCisgICAgc3VyZmFjZTIgPSB0ZXN0LT5nZXRTbmFwc2hvdEFuZFdhaXRVbnRpbFJlYWR5KFdF
QktJVF9TTkFQU0hPVF9SRUdJT05fVklTSUJMRSwgV0VCS0lUX1NOQVBTSE9UX09QVElPTlNfSU5D
TFVERV9TRUxFQ1RJT05fSElHSExJR0hUSU5HKTsKKyAgICBnX2Fzc2VydChzdXJmYWNlMik7Cisg
ICAgZ19hc3NlcnRfY21waW50KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2Uy
KSwgPT0sIHdpZHRoKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfaGVpZ2h0KHN1cmZhY2UyKSwgPT0sIGhlaWdodCk7CisgICAgZ19hc3NlcnQoIVRlc3Q6OmNh
aXJvU3VyZmFjZXNFcXVhbChzdXJmYWNlMSwgc3VyZmFjZTIpKTsKKworICAgIC8vIFJlcXVlc3Qg
YSBzbmFwc2hvdCBvZiB0aGUgd2hvbGUgZG9jdW1lbnQgaW4gdGhlIFdlYlZpZXcuIFRoZQorICAg
IC8vIHJlc3VsdCBzaG91bGQgYmUgZGlmZmVyZW50IGZyb20gdGhlIHNpemUgb2J0YWluZWQgcHJl
dmlvdXNseS4KKyAgICBzdXJmYWNlMiA9IHRlc3QtPmdldFNuYXBzaG90QW5kV2FpdFVudGlsUmVh
ZHkoV0VCS0lUX1NOQVBTSE9UX1JFR0lPTl9GVUxMX0RPQ1VNRU5ULCBXRUJLSVRfU05BUFNIT1Rf
T1BUSU9OU19OT05FKTsKKyAgICBnX2Fzc2VydChzdXJmYWNlMik7CisgICAgZ19hc3NlcnRfY21w
aW50KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UyKSwgID4sIHdpZHRoKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZh
Y2UyKSwgPiwgaGVpZ2h0KTsKKyAgICBnX2Fzc2VydCghVGVzdDo6Y2Fpcm9TdXJmYWNlc0VxdWFs
KHN1cmZhY2UxLCBzdXJmYWNlMikpOworCisgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KHN1cmZh
Y2UxKTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPmdldFNuYXBzaG90QW5kQ2FuY2VsKCkpOworfQor
Cit2b2lkIGJlZm9yZUFsbCgpCit7CisgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmll
dyIsICJkZWZhdWx0LWNvbnRleHQiLCB0ZXN0V2ViVmlld0RlZmF1bHRDb250ZXh0KTsKKyAgICBX
ZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImN1c3RvbS1jaGFyc2V0IiwgdGVzdFdl
YlZpZXdDdXN0b21DaGFyc2V0KTsKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3
IiwgInNldHRpbmdzIiwgdGVzdFdlYlZpZXdTZXR0aW5ncyk7CisgICAgV2ViVmlld1Rlc3Q6OmFk
ZCgiV2ViS2l0V2ViVmlldyIsICJ6b29tLWxldmVsIiwgdGVzdFdlYlZpZXdab29tTGV2ZWwpOwor
ICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAicnVuLWphdmFzY3JpcHQiLCB0
ZXN0V2ViVmlld1J1bkphdmFTY3JpcHQpOworICAgIEZ1bGxTY3JlZW5DbGllbnRUZXN0OjphZGQo
IldlYktpdFdlYlZpZXciLCAiZnVsbHNjcmVlbiIsIHRlc3RXZWJWaWV3RnVsbFNjcmVlbik7Cisg
ICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJjYW4tc2hvdy1taW1lLXR5cGUi
LCB0ZXN0V2ViVmlld0NhblNob3dNSU1FVHlwZSk7CisgICAgRm9ybUNsaWVudFRlc3Q6OmFkZCgi
V2ViS2l0V2ViVmlldyIsICJzdWJtaXQtZm9ybSIsIHRlc3RXZWJWaWV3U3VibWl0Rm9ybSk7Cisg
ICAgU2F2ZVdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAic2F2ZSIsIHRlc3RXZWJW
aWV3U2F2ZSk7CisgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJ2aWV3LW1v
ZGUiLCB0ZXN0V2ViVmlld01vZGUpOworICAgIFNuYXBzaG90V2ViVmlld1Rlc3Q6OmFkZCgiV2Vi
S2l0V2ViVmlldyIsICJzbmFwc2hvdCIsIHRlc3RXZWJWaWV3U25hcHNob3QpOworICAgIFdlYlZp
ZXdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAicGFnZS12aXNpYmlsaXR5IiwgdGVzdFdlYlZp
ZXdQYWdlVmlzaWJpbGl0eSk7Cit9CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworfQpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRXZWJWaWV3
R3JvdXAuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJL
aXRXZWJWaWV3R3JvdXAuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQwMTY1NWZmNTE0YjExODhmNmMzY2M2MjBk
MDgzZDNkMmExNzMxNWYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFdlYlZpZXdHcm91cC5jcHAKQEAgLTAsMCArMSwyMDYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2luY2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKKyNpbmNsdWRlICJXZWJWaWV3
VGVzdC5oIgorI2luY2x1ZGUgPGNzdGRhcmc+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1
ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4K
Kworc3RhdGljIFdlYktpdFRlc3RTZXJ2ZXIqIGtTZXJ2ZXI7CisKKy8vIFRoZXNlIGFyZSBhbGwg
aGVyZSBzbyB0aGF0IHRoZXkgY2FuIGJlIGNoYW5nZWQgZWFzaWx5LCBpZiBuZWNlc3NhcnkuCitz
dGF0aWMgY29uc3QgY2hhcioga1N0eWxlU2hlZXRIVE1MID0gIjxodG1sPjxkaXYgaWQ9XCJzdHls
ZWRFbGVtZW50XCI+U3dlZXQgc3R5bGV6ITwvZGl2PjwvaHRtbD4iOworc3RhdGljIGNvbnN0IGNo
YXIqIGtJbmplY3RlZFN0eWxlU2hlZXQgPSAiI3N0eWxlZEVsZW1lbnQgeyBmb250LXdlaWdodDog
Ym9sZDsgfSI7CitzdGF0aWMgY29uc3QgY2hhcioga1N0eWxlU2hlZXRUZXN0U2NyaXB0ID0gImdl
dENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0eWxlZEVsZW1lbnQnKSlb
J2ZvbnQtd2VpZ2h0J10iOworc3RhdGljIGNvbnN0IGNoYXIqIGtTdHlsZVNoZWV0VGVzdFNjcmlw
dFJlc3VsdCA9ICJib2xkIjsKKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdHcm91cERlZmF1bHQo
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICAvLyBEZWZhdWx0IGdyb3VwIGlzIHNo
YXJlZCBieSBhbGwgV2ViVmlld3MgYnkgZGVmYXVsdC4KKyAgICBHUmVmUHRyPFdlYktpdFdlYlZp
ZXc+IHdlYlZpZXcxID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Cisg
ICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3PiB3ZWJWaWV3MiA9IFdFQktJVF9XRUJfVklFVyh3ZWJr
aXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19nZXRfZ3Jv
dXAod2ViVmlldzEuZ2V0KCkpID09IHdlYmtpdF93ZWJfdmlld19nZXRfZ3JvdXAod2ViVmlldzIu
Z2V0KCkpKTsKKworICAgIC8vIFNldHRpbmdzIGFyZSBzaGFyZWQgYnkgYWxsIHdlYiB2aWV3IGlu
IHRoZSBzYW1lIGdyb3VwLgorICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGlu
Z3Mod2ViVmlldzEuZ2V0KCkpID09IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmll
dzIuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdl
YlZpZXcxLmdldCgpKSA9PSB3ZWJraXRfd2ViX3ZpZXdfZ3JvdXBfZ2V0X3NldHRpbmdzKHdlYmtp
dF93ZWJfdmlld19nZXRfZ3JvdXAod2ViVmlldzIuZ2V0KCkpKSk7Cit9CisKK3N0YXRpYyB2b2lk
IHRlc3RXZWJWaWV3R3JvdXBOZXdHcm91cChUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQorewor
ICAgIC8vIFBhc3NpbmcgMCBhcyBncm91cCBuYW1lIGdlbmVyYXRlcyB0aGUgbmFtZSBhdXRvbWF0
aWNhbGx5LgorICAgIEdSZWZQdHI8V2ViS2l0V2ViVmlld0dyb3VwPiB2aWV3R3JvdXAxID0gYWRv
cHRHUmVmKHdlYmtpdF93ZWJfdmlld19ncm91cF9uZXcoMCkpOworICAgIHRlc3QtPmFzc2VydE9i
amVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1Qodmlld0dyb3VwMS5nZXQoKSkp
OworICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19ncm91cF9nZXRfbmFtZSh2aWV3R3JvdXAx
LmdldCgpKSk7CisKKyAgICAvLyBOZXcgZ3JvdXAgd2l0aCBhIGdpdmVuIG5hbWUuCisgICAgR1Jl
ZlB0cjxXZWJLaXRXZWJWaWV3R3JvdXA+IHZpZXdHcm91cDIgPSBhZG9wdEdSZWYod2Via2l0X3dl
Yl92aWV3X2dyb3VwX25ldygiVGVzdEdyb3VwMiIpKTsKKyAgICB0ZXN0LT5hc3NlcnRPYmplY3RJ
c0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHZpZXdHcm91cDIuZ2V0KCkpKTsKKyAg
ICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dyb3VwX2dldF9uYW1lKHZpZXdHcm91
cDIuZ2V0KCkpLCA9PSwgIlRlc3RHcm91cDIiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0
X3dlYl92aWV3X2dyb3VwX2dldF9uYW1lKHZpZXdHcm91cDIuZ2V0KCkpLCAhPSwgd2Via2l0X3dl
Yl92aWV3X2dyb3VwX2dldF9uYW1lKHZpZXdHcm91cDEuZ2V0KCkpKTsKKworICAgIC8vIEV2ZXJ5
IGdyb3VwIGhhcyBpdHMgb3duIHNldHRpbmdzLgorICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmll
d19ncm91cF9nZXRfc2V0dGluZ3Modmlld0dyb3VwMS5nZXQoKSkgIT0gd2Via2l0X3dlYl92aWV3
X2dyb3VwX2dldF9zZXR0aW5ncyh2aWV3R3JvdXAyLmdldCgpKSk7Cit9CisKK3N0YXRpYyB2b2lk
IHRlc3RXZWJWaWV3TmV3V2l0aEdyb3VwKFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7Cisg
ICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3R3JvdXA+IHZpZXdHcm91cDEgPSBhZG9wdEdSZWYod2Vi
a2l0X3dlYl92aWV3X2dyb3VwX25ldygiVGVzdEdyb3VwMSIpKTsKKyAgICB0ZXN0LT5hc3NlcnRP
YmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHZpZXdHcm91cDEuZ2V0KCkp
KTsKKyAgICBHUmVmUHRyPFdlYktpdFdlYlZpZXc+IHdlYlZpZXcxID0gV0VCS0lUX1dFQl9WSUVX
KHdlYmtpdF93ZWJfdmlld19uZXdfd2l0aF9ncm91cCh2aWV3R3JvdXAxLmdldCgpKSk7CisgICAg
Z19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dldF9ncm91cCh3ZWJWaWV3MS5nZXQoKSkgPT0gdmll
d0dyb3VwMS5nZXQoKSk7CisKKyAgICBHUmVmUHRyPFdlYktpdFdlYlZpZXc+IHdlYlZpZXcyID0g
V0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19hc3NlcnQod2Vi
a2l0X3dlYl92aWV3X2dldF9ncm91cCh3ZWJWaWV3Mi5nZXQoKSkgIT0gdmlld0dyb3VwMS5nZXQo
KSk7CisKKyAgICAvLyBTZXR0aW5ncyBzaG91bGQgYmUgZGlmZmVyZW50IGZvciB2aWV3cyBpbiBk
aWZmZXJlbnQgZ3JvdXBzLgorICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGlu
Z3Mod2ViVmlldzEuZ2V0KCkpICE9IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmll
dzIuZ2V0KCkpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdHcm91cFNldHRpbmdzKFRl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3R3Jv
dXA+IHZpZXdHcm91cDEgPSBhZG9wdEdSZWYod2Via2l0X3dlYl92aWV3X2dyb3VwX25ldygiVGVz
dEdyb3VwMSIpKTsKKyAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlz
aGVzKEdfT0JKRUNUKHZpZXdHcm91cDEuZ2V0KCkpKTsKKyAgICBHUmVmUHRyPFdlYktpdFNldHRp
bmdzPiBuZXdTZXR0aW5ncyA9IGFkb3B0R1JlZih3ZWJraXRfc2V0dGluZ3NfbmV3X3dpdGhfc2V0
dGluZ3MoImVuYWJsZS1qYXZhc2NyaXB0IiwgRkFMU0UsIG51bGxwdHIpKTsKKyAgICB0ZXN0LT5h
c3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKG5ld1NldHRpbmdz
LmdldCgpKSk7CisgICAgd2Via2l0X3dlYl92aWV3X2dyb3VwX3NldF9zZXR0aW5ncyh2aWV3R3Jv
dXAxLmdldCgpLCBuZXdTZXR0aW5ncy5nZXQoKSk7CisgICAgZ19hc3NlcnQod2Via2l0X3dlYl92
aWV3X2dyb3VwX2dldF9zZXR0aW5ncyh2aWV3R3JvdXAxLmdldCgpKSA9PSBuZXdTZXR0aW5ncy5n
ZXQoKSk7CisKKyAgICBHUmVmUHRyPFdlYktpdFdlYlZpZXc+IHdlYlZpZXcxID0gV0VCS0lUX1dF
Ql9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXdfd2l0aF9ncm91cCh2aWV3R3JvdXAxLmdldCgpKSk7
CisgICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3PiB3ZWJWaWV3MiA9IFdFQktJVF9XRUJfVklFVyh3
ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIFdlYktpdFNldHRpbmdzKiB3ZWJWaWV3MVNldHRp
bmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3MS5nZXQoKSk7CisgICAg
V2ViS2l0U2V0dGluZ3MqIHdlYlZpZXcyU2V0dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3Nl
dHRpbmdzKHdlYlZpZXcyLmdldCgpKTsKKyAgICBnX2Fzc2VydCh3ZWJWaWV3MVNldHRpbmdzICE9
IHdlYlZpZXcyU2V0dGluZ3MpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5h
YmxlX2phdmFzY3JpcHQod2ViVmlldzFTZXR0aW5ncykgIT0gd2Via2l0X3NldHRpbmdzX2dldF9l
bmFibGVfamF2YXNjcmlwdCh3ZWJWaWV3MlNldHRpbmdzKSk7CisKKyAgICB3ZWJraXRfd2ViX3Zp
ZXdfc2V0X3NldHRpbmdzKHdlYlZpZXcxLmdldCgpLCB3ZWJWaWV3MlNldHRpbmdzKTsKKyAgICBn
X2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdlYlZpZXcxLmdldCgpKSA9PSB3
ZWJWaWV3MlNldHRpbmdzKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ3JvdXBfZ2V0
X3NldHRpbmdzKHdlYmtpdF93ZWJfdmlld19nZXRfZ3JvdXAod2ViVmlldzEuZ2V0KCkpKSA9PSB3
ZWJWaWV3MlNldHRpbmdzKTsKK30KKworc3RhdGljIGJvb2wgaXNTdHlsZVNoZWV0SW5qZWN0ZWRG
b3JVUkxBdFBhdGgoV2ViVmlld1Rlc3QqIHRlc3QsIGNvbnN0IGNoYXIqIHBhdGgpCit7CisgICAg
dGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKHBhdGgpLmRhdGEoKSk7CisgICAg
dGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBHT3duUHRyPEdFcnJvcj4gZXJy
b3I7CisgICAgV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCogamF2YXNjcmlwdFJlc3VsdCA9IHRlc3Qt
PnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZChrU3R5bGVTaGVldFRlc3RTY3JpcHQs
ICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAg
Z19hc3NlcnQoIWVycm9yLmdldCgpKTsKKworICAgIEdPd25QdHI8Y2hhcj4gcmVzdWx0U3RyaW5n
KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQp
KTsKKyAgICByZXR1cm4gIWdfc3RyY21wMChyZXN1bHRTdHJpbmcuZ2V0KCksIGtTdHlsZVNoZWV0
VGVzdFNjcmlwdFJlc3VsdCk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGxVUkxMaXN0RnJvbVBhdGhz
KGNoYXIqKiBsaXN0LCBjb25zdCBjaGFyKiBwYXRoLCAuLi4pCit7CisgICAgdmFfbGlzdCBhcmd1
bWVudExpc3Q7CisgICAgdmFfc3RhcnQoYXJndW1lbnRMaXN0LCBwYXRoKTsKKworICAgIGludCBp
ID0gMDsKKyAgICB3aGlsZSAocGF0aCkgeworICAgICAgICAvLyBGSVhNRTogV2UgbXVzdCB1c2Ug
YSB3aWxkY2FyZCBmb3IgdGhlIGhvc3QgaGVyZSB1bnRpbCBodHRwOi8vd2tidWcuY29tLzExMjQ3
NiBpcyBmaXhlZC4KKyAgICAgICAgLy8gVW50aWwgdGhhdCB0aW1lIHBhdHRlcm5zIHdpdGggcG9y
dCBudW1iZXJzIGluIHRoZW0gd2lsbCBub3QgcHJvcGVybHkgbWF0Y2ggVVJMcyB3aXRoIHBvcnQg
bnVtYmVycy4KKyAgICAgICAgbGlzdFtpKytdID0gZ19zdHJkdXBfcHJpbnRmKCJodHRwOi8vKi8l
cyoiLCBwYXRoKTsKKyAgICAgICAgcGF0aCA9IHZhX2FyZyhhcmd1bWVudExpc3QsIGNvbnN0IGNo
YXIqKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZU9sZEluamVjdGVkU3R5bGVTaGVl
dHNBbmRSZXNldExpc3RzKFdlYktpdFdlYlZpZXdHcm91cCogZ3JvdXAsIGNoYXIqKiB3aGl0ZWxp
c3QsIGNoYXIqKiBibGFja2xpc3QpCit7CisgICAgd2Via2l0X3dlYl92aWV3X2dyb3VwX3JlbW92
ZV9hbGxfdXNlcl9zdHlsZV9zaGVldHMoZ3JvdXApOworCisgICAgd2hpbGUgKCp3aGl0ZWxpc3Qp
IHsKKyAgICAgICAgZ19mcmVlKCp3aGl0ZWxpc3QpOworICAgICAgICAqd2hpdGVsaXN0ID0gMDsK
KyAgICAgICAgd2hpdGVsaXN0Kys7CisgICAgfQorCisgICAgd2hpbGUgKCpibGFja2xpc3QpIHsK
KyAgICAgICAgZ19mcmVlKCpibGFja2xpc3QpOworICAgICAgICAqYmxhY2tsaXN0ID0gMDsKKyAg
ICAgICAgYmxhY2tsaXN0Kys7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0dy
b3VwSW5qZWN0ZWRTdHlsZVNoZWV0KFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQor
eworICAgIFdlYktpdFdlYlZpZXdHcm91cCogZ3JvdXAgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2dy
b3VwKHRlc3QtPm1fd2ViVmlldyk7CisgICAgY2hhciogd2hpdGVsaXN0WzNdID0geyAwLCAwLCAw
IH07CisgICAgY2hhciogYmxhY2tsaXN0WzNdID0geyAwLCAwLCAwIH07CisKKyAgICByZW1vdmVP
bGRJbmplY3RlZFN0eWxlU2hlZXRzQW5kUmVzZXRMaXN0cyhncm91cCwgd2hpdGVsaXN0LCBibGFj
a2xpc3QpOworCisgICAgLy8gV2l0aG91dCBhIHdoaXRlbGlzdCBvciBhIGJsYWNrbGlzdCBhbGwg
VVJMcyBzaG91bGQgaGF2ZSB0aGUgaW5qZWN0ZWQgc3R5bGUgc2hlZXQuCisgICAgc3RhdGljIGNv
bnN0IGNoYXIqIHJhbmRvbVBhdGggPSAic29tZXJhbmRvbXBhdGgiOworICAgIGdfYXNzZXJ0KCFp
c1N0eWxlU2hlZXRJbmplY3RlZEZvclVSTEF0UGF0aCh0ZXN0LCByYW5kb21QYXRoKSk7CisgICAg
d2Via2l0X3dlYl92aWV3X2dyb3VwX2FkZF91c2VyX3N0eWxlX3NoZWV0KGdyb3VwLCBrSW5qZWN0
ZWRTdHlsZVNoZWV0LCAwLCAwLCAwLCBXRUJLSVRfSU5KRUNURURfQ09OVEVOVF9GUkFNRVNfQUxM
KTsKKyAgICBnX2Fzc2VydChpc1N0eWxlU2hlZXRJbmplY3RlZEZvclVSTEF0UGF0aCh0ZXN0LCBy
YW5kb21QYXRoKSk7CisKKyAgICByZW1vdmVPbGRJbmplY3RlZFN0eWxlU2hlZXRzQW5kUmVzZXRM
aXN0cyhncm91cCwgd2hpdGVsaXN0LCBibGFja2xpc3QpOworCisgICAgZmlsbFVSTExpc3RGcm9t
UGF0aHMoYmxhY2tsaXN0LCByYW5kb21QYXRoLCAwKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfZ3Jv
dXBfYWRkX3VzZXJfc3R5bGVfc2hlZXQoZ3JvdXAsIGtJbmplY3RlZFN0eWxlU2hlZXQsIDAsIDAs
IGJsYWNrbGlzdCwgV0VCS0lUX0lOSkVDVEVEX0NPTlRFTlRfRlJBTUVTX0FMTCk7CisgICAgZ19h
c3NlcnQoIWlzU3R5bGVTaGVldEluamVjdGVkRm9yVVJMQXRQYXRoKHRlc3QsIHJhbmRvbVBhdGgp
KTsKKyAgICBnX2Fzc2VydChpc1N0eWxlU2hlZXRJbmplY3RlZEZvclVSTEF0UGF0aCh0ZXN0LCAi
c29tZW90aGVycmFuZG9tcGF0aCIpKTsKKworICAgIHJlbW92ZU9sZEluamVjdGVkU3R5bGVTaGVl
dHNBbmRSZXNldExpc3RzKGdyb3VwLCB3aGl0ZWxpc3QsIGJsYWNrbGlzdCk7CisKKyAgICBzdGF0
aWMgY29uc3QgY2hhciogaW5UaGVXaGl0ZUxpc3QgPSAiaW50aGV3aGl0ZWxpc3QiOworICAgIHN0
YXRpYyBjb25zdCBjaGFyKiBub3RJbldoaXRlbGlzdCA9ICJub3RpbnRoZXdoaXRlbGlzdCI7Cisg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIGluVGhlV2hpdGVMaXN0QW5kQmxhY2tMaXN0ID0gImludGhl
d2hpdGVsaXN0YW5kYmxhY2tsaXN0IjsKKworICAgIGZpbGxVUkxMaXN0RnJvbVBhdGhzKHdoaXRl
bGlzdCwgaW5UaGVXaGl0ZUxpc3QsIGluVGhlV2hpdGVMaXN0QW5kQmxhY2tMaXN0LCAwKTsKKyAg
ICBmaWxsVVJMTGlzdEZyb21QYXRocyhibGFja2xpc3QsIGluVGhlV2hpdGVMaXN0QW5kQmxhY2tM
aXN0LCAwKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfZ3JvdXBfYWRkX3VzZXJfc3R5bGVfc2hlZXQo
Z3JvdXAsIGtJbmplY3RlZFN0eWxlU2hlZXQsIDAsIHdoaXRlbGlzdCwgYmxhY2tsaXN0LCBXRUJL
SVRfSU5KRUNURURfQ09OVEVOVF9GUkFNRVNfQUxMKTsKKyAgICBnX2Fzc2VydChpc1N0eWxlU2hl
ZXRJbmplY3RlZEZvclVSTEF0UGF0aCh0ZXN0LCBpblRoZVdoaXRlTGlzdCkpOworICAgIGdfYXNz
ZXJ0KCFpc1N0eWxlU2hlZXRJbmplY3RlZEZvclVSTEF0UGF0aCh0ZXN0LCBpblRoZVdoaXRlTGlz
dEFuZEJsYWNrTGlzdCkpOworICAgIGdfYXNzZXJ0KCFpc1N0eWxlU2hlZXRJbmplY3RlZEZvclVS
TEF0UGF0aCh0ZXN0LCBub3RJbldoaXRlbGlzdCkpOworCisgICAgLy8gSXQncyBpbXBvcnRhbnQg
dG8gY2xlYW4gdXAgdGhlIGVudmlyb25tZW50IGJlZm9yZSBvdGhlciB0ZXN0cy4KKyAgICByZW1v
dmVPbGRJbmplY3RlZFN0eWxlU2hlZXRzQW5kUmVzZXRMaXN0cyhncm91cCwgd2hpdGVsaXN0LCBi
bGFja2xpc3QpOworfQorCitzdGF0aWMgdm9pZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBz
ZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxl
KiwgU291cENsaWVudENvbnRleHQqLCBncG9pbnRlcikKK3sKKyAgICBzb3VwX21lc3NhZ2Vfc2V0
X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7CisgICAgc291cF9tZXNzYWdlX2JvZHlf
YXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywga1N0eWxl
U2hlZXRIVE1MLCBzdHJsZW4oa1N0eWxlU2hlZXRIVE1MKSk7CisgICAgc291cF9tZXNzYWdlX2Jv
ZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7Cit9CisKK3ZvaWQgYmVmb3JlQWxs
KCkKK3sKKyAgICBrU2VydmVyID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIoKTsKKyAgICBrU2VydmVy
LT5ydW4oc2VydmVyQ2FsbGJhY2spOworCisgICAgVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3R3Jv
dXAiLCAiZGVmYXVsdC1ncm91cCIsIHRlc3RXZWJWaWV3R3JvdXBEZWZhdWx0KTsKKyAgICBUZXN0
OjphZGQoIldlYktpdFdlYlZpZXdHcm91cCIsICJuZXctZ3JvdXAiLCB0ZXN0V2ViVmlld0dyb3Vw
TmV3R3JvdXApOworICAgIFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJuZXctd2l0aC1ncm91
cCIsIHRlc3RXZWJWaWV3TmV3V2l0aEdyb3VwKTsKKyAgICBUZXN0OjphZGQoIldlYktpdFdlYlZp
ZXdHcm91cCIsICJzZXR0aW5ncyIsIHRlc3RXZWJWaWV3R3JvdXBTZXR0aW5ncyk7CisgICAgV2Vi
Vmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlld0dyb3VwIiwgImluamVjdGVkLXN0eWxlLXNoZWV0
IiwgdGVzdFdlYlZpZXdHcm91cEluamVjdGVkU3R5bGVTaGVldCk7Cit9CisKK3ZvaWQgYWZ0ZXJB
bGwoKQoreworICAgIGRlbGV0ZSBrU2VydmVyOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJWaWV3RWRpdG9yLmNwcCBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViVmlld0VkaXRvci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMWVhMmFjZDI3NjVhYjcwNWFmZDdiMGIyMGJjODkyNmQ3NzY3NDFmMAotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViVmll
d0VkaXRvci5jcHAKQEAgLTAsMCArMSwyMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
SWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJWaWV3VGVzdC5o
IgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKworY2xhc3MgRWRpdG9yVGVzdDog
cHVibGljIFdlYlZpZXdUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJF
KEVkaXRvclRlc3QpOworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGtDbGlwYm9hcmRXYWl0
VGltZW91dCA9IDUwOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBrQ2xpcGJvYXJkV2FpdE1h
eFRyaWVzID0gMjsKKworICAgIEVkaXRvclRlc3QoKQorICAgICAgICA6IG1fY2xpcGJvYXJkKGd0
a19jbGlwYm9hcmRfZ2V0KEdES19TRUxFQ1RJT05fQ0xJUEJPQVJEKSkKKyAgICAgICAgLCBtX2Nh
bkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChmYWxzZSkKKyAgICAgICAgLCBtX3RyaWVzQ291bnQoMCkK
KyAgICB7CisgICAgICAgIGd0a19jbGlwYm9hcmRfY2xlYXIobV9jbGlwYm9hcmQpOworICAgIH0K
KworICAgIHN0YXRpYyB2b2lkIGNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZFJlYWR5Q2FsbGJhY2so
R09iamVjdCosIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBFZGl0b3JUZXN0KiB0ZXN0KQorICAgIHsK
KyAgICAgICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAgICAgICB0ZXN0LT5tX2NhbkV4ZWN1
dGVFZGl0aW5nQ29tbWFuZCA9IHdlYmtpdF93ZWJfdmlld19jYW5fZXhlY3V0ZV9lZGl0aW5nX2Nv
bW1hbmRfZmluaXNoKHRlc3QtPm1fd2ViVmlldywgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpOwor
ICAgICAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOworICAgICAgICBnX21haW5fbG9vcF9xdWl0
KHRlc3QtPm1fbWFpbkxvb3ApOworICAgIH0KKworICAgIGJvb2wgY2FuRXhlY3V0ZUVkaXRpbmdD
b21tYW5kKGNvbnN0IGNoYXIqIGNvbW1hbmQpCisgICAgeworICAgICAgICBtX2NhbkV4ZWN1dGVF
ZGl0aW5nQ29tbWFuZCA9IGZhbHNlOworICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfY2FuX2V4ZWN1
dGVfZWRpdGluZ19jb21tYW5kKG1fd2ViVmlldywgY29tbWFuZCwgMCwgcmVpbnRlcnByZXRfY2Fz
dDxHQXN5bmNSZWFkeUNhbGxiYWNrPihjYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmRSZWFkeUNhbGxi
YWNrKSwgdGhpcyk7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICAg
ICAgcmV0dXJuIG1fY2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kOworICAgIH0KKworICAgIHN0YXRp
YyBnYm9vbGVhbiB3YWl0Rm9yQ2xpcGJvYXJkVGV4dChFZGl0b3JUZXN0KiB0ZXN0KQorICAgIHsK
KyAgICAgICAgdGVzdC0+bV90cmllc0NvdW50Kys7CisgICAgICAgIGlmIChndGtfY2xpcGJvYXJk
X3dhaXRfaXNfdGV4dF9hdmFpbGFibGUodGVzdC0+bV9jbGlwYm9hcmQpIHx8IHRlc3QtPm1fdHJp
ZXNDb3VudCA+IGtDbGlwYm9hcmRXYWl0TWF4VHJpZXMpIHsKKyAgICAgICAgICAgIGdfbWFpbl9s
b29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICB2b2lkIGNvcHlD
bGlwYm9hcmQoKQorICAgIHsKKyAgICAgICAgd2Via2l0X3dlYl92aWV3X2V4ZWN1dGVfZWRpdGlu
Z19jb21tYW5kKG1fd2ViVmlldywgV0VCS0lUX0VESVRJTkdfQ09NTUFORF9DT1BZKTsKKyAgICAg
ICAgLy8gVGhlcmUncyBubyB3YXkgdG8ga25vdyB3aGVuIHRoZSBzZWxlY3Rpb24gaGFzIGJlZW4g
Y29waWVkIHRvCisgICAgICAgIC8vIHRoZSBjbGlwYm9hcmQsIHNvIHVzZSBhIHRpbWVvdXQgc291
cmNlIHRvIHF1ZXJ5IHRoZSBjbGlwYm9hcmQuCisgICAgICAgIG1fdHJpZXNDb3VudCA9IDA7Cisg
ICAgICAgIGdfdGltZW91dF9hZGQoa0NsaXBib2FyZFdhaXRUaW1lb3V0LCByZWludGVycHJldF9j
YXN0PEdTb3VyY2VGdW5jPih3YWl0Rm9yQ2xpcGJvYXJkVGV4dCksIHRoaXMpOworICAgICAgICBn
X21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgfQorCisgICAgR3RrQ2xpcGJvYXJkKiBt
X2NsaXBib2FyZDsKKyAgICBib29sIG1fY2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kOworICAgIHNp
emVfdCBtX3RyaWVzQ291bnQ7Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0VkaXRvckN1
dENvcHlQYXN0ZU5vbkVkaXRhYmxlKEVkaXRvclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7
CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHNlbGVjdGVkU3BhbkhUTUwgPSAiPGh0bWw+PGJvZHkg
Y29udGVudEVkaXRhYmxlPVwiZmFsc2VcIj4iCisgICAgICAgICI8c3BhbiBpZD1cIm1haW5zcGFu
XCI+QWxsIHdvcmsgYW5kIG5vIHBsYXkgPHNwYW4gaWQ9XCJzdWJzcGFuXCI+bWFrZSBKYWNrIGEg
ZHVsbDwvc3Bhbj4gYm95Ljwvc3Bhbj4iCisgICAgICAgICI8c2NyaXB0PmRvY3VtZW50LmdldFNl
bGVjdGlvbigpLmNvbGxhcHNlKCk7XG4iCisgICAgICAgICJkb2N1bWVudC5nZXRTZWxlY3Rpb24o
KS5zZWxlY3RBbGxDaGlsZHJlbihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3Vic3BhbicpKTtc
biIKKyAgICAgICAgIjwvc2NyaXB0PjwvYm9keT48L2h0bWw+IjsKKworICAgIC8vIE5vdGhpbmcg
bG9hZGVkIHlldC4KKyAgICBnX2Fzc2VydCghdGVzdC0+Y2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5k
KFdFQktJVF9FRElUSU5HX0NPTU1BTkRfQ1VUKSk7CisgICAgZ19hc3NlcnQoIXRlc3QtPmNhbkV4
ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElOR19DT01NQU5EX0NPUFkpKTsKKyAgICBn
X2Fzc2VydCghdGVzdC0+Y2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kKFdFQktJVF9FRElUSU5HX0NP
TU1BTkRfUEFTVEUpKTsKKworICAgIHRlc3QtPmxvYWRIdG1sKHNlbGVjdGVkU3BhbkhUTUwsIDAp
OworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQodGVz
dC0+Y2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kKFdFQktJVF9FRElUSU5HX0NPTU1BTkRfQ09QWSkp
OworICAgIC8vIEl0J3Mgbm90IHBvc3NpYmxlIHRvIGN1dCBhbmQgcGFzdGUgd2hlbiBjb250ZW50
IGlzIG5vdCBlZGl0YWJsZQorICAgIC8vIGV2ZW4gaWYgdGhlcmUncyBhIHNlbGVjdGlvbi4KKyAg
ICBnX2Fzc2VydCghdGVzdC0+Y2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kKFdFQktJVF9FRElUSU5H
X0NPTU1BTkRfQ1VUKSk7CisgICAgZ19hc3NlcnQoIXRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29t
bWFuZChXRUJLSVRfRURJVElOR19DT01NQU5EX1BBU1RFKSk7CisKKyAgICB0ZXN0LT5jb3B5Q2xp
cGJvYXJkKCk7CisgICAgR093blB0cjxjaGFyPiBjbGlwYm9hcmRUZXh0KGd0a19jbGlwYm9hcmRf
d2FpdF9mb3JfdGV4dCh0ZXN0LT5tX2NsaXBib2FyZCkpOworICAgIGdfYXNzZXJ0X2NtcHN0cihj
bGlwYm9hcmRUZXh0LmdldCgpLCA9PSwgIm1ha2UgSmFjayBhIGR1bGwiKTsKK30KKworc3RhdGlj
IHZvaWQgdGVzdFdlYlZpZXdFZGl0b3JDdXRDb3B5UGFzdGVFZGl0YWJsZShFZGl0b3JUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzZWxlY3RlZFNw
YW5IVE1MID0gIjxodG1sPjxib2R5IGNvbnRlbnRFZGl0YWJsZT1cInRydWVcIj4iCisgICAgICAg
ICI8c3BhbiBpZD1cIm1haW5zcGFuXCI+QWxsIHdvcmsgYW5kIG5vIHBsYXkgPHNwYW4+bWFrZSBK
YWNrIGEgZHVsbDwvc3Bhbj4gYm95Ljwvc3Bhbj4iCisgICAgICAgICI8c2NyaXB0PmRvY3VtZW50
LmdldFNlbGVjdGlvbigpLmNvbGxhcHNlKCk7XG4iCisgICAgICAgICJkb2N1bWVudC5nZXRTZWxl
Y3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJlbihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbnNw
YW4nKSk7XG4iCisgICAgICAgICI8L3NjcmlwdD48L2JvZHk+PC9odG1sPiI7CisKKyAgICAvLyBO
b3RoaW5nIGxvYWRlZCB5ZXQuCisgICAgZ19hc3NlcnQoIXRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5n
Q29tbWFuZChXRUJLSVRfRURJVElOR19DT01NQU5EX0NVVCkpOworICAgIGdfYXNzZXJ0KCF0ZXN0
LT5jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQoV0VCS0lUX0VESVRJTkdfQ09NTUFORF9DT1BZKSk7
CisgICAgZ19hc3NlcnQoIXRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJ
VElOR19DT01NQU5EX1BBU1RFKSk7CisKKyAgICB0ZXN0LT5sb2FkSHRtbChzZWxlY3RlZFNwYW5I
VE1MLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIC8vIFRo
ZXJlJ3MgYSBzZWxlY3Rpb24uCisgICAgZ19hc3NlcnQodGVzdC0+Y2FuRXhlY3V0ZUVkaXRpbmdD
b21tYW5kKFdFQktJVF9FRElUSU5HX0NPTU1BTkRfQ1VUKSk7CisgICAgZ19hc3NlcnQodGVzdC0+
Y2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kKFdFQktJVF9FRElUSU5HX0NPTU1BTkRfQ09QWSkpOwor
ICAgIGdfYXNzZXJ0KHRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJVElO
R19DT01NQU5EX1BBU1RFKSk7CisKKyAgICB0ZXN0LT5jb3B5Q2xpcGJvYXJkKCk7CisgICAgR093
blB0cjxjaGFyPiBjbGlwYm9hcmRUZXh0KGd0a19jbGlwYm9hcmRfd2FpdF9mb3JfdGV4dCh0ZXN0
LT5tX2NsaXBib2FyZCkpOworICAgIGdfYXNzZXJ0X2NtcHN0cihjbGlwYm9hcmRUZXh0LmdldCgp
LCA9PSwgIkFsbCB3b3JrIGFuZCBubyBwbGF5IG1ha2UgSmFjayBhIGR1bGwgYm95LiIpOworfQor
CitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0VkaXRvclNlbGVjdEFsbE5vbkVkaXRhYmxlKEVkaXRv
clRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHNl
bGVjdGVkU3BhbkhUTUwgPSAiPGh0bWw+PGJvZHkgY29udGVudEVkaXRhYmxlPVwiZmFsc2VcIj4i
CisgICAgICAgICI8c3BhbiBpZD1cIm1haW5zcGFuXCI+QWxsIHdvcmsgYW5kIG5vIHBsYXkgPHNw
YW4gaWQ9XCJzdWJzcGFuXCI+bWFrZSBKYWNrIGEgZHVsbDwvc3Bhbj4gYm95Ljwvc3Bhbj4iCisg
ICAgICAgICI8c2NyaXB0PmRvY3VtZW50LmdldFNlbGVjdGlvbigpLmNvbGxhcHNlKCk7XG4iCisg
ICAgICAgICJkb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJlbihkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnc3Vic3BhbicpKTtcbiIKKyAgICAgICAgIjwvc2NyaXB0PjwvYm9k
eT48L2h0bWw+IjsKKworICAgIGdfYXNzZXJ0KHRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFu
ZChXRUJLSVRfRURJVElOR19DT01NQU5EX1NFTEVDVF9BTEwpKTsKKworICAgIHRlc3QtPmxvYWRI
dG1sKHNlbGVjdGVkU3BhbkhUTUwsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hl
ZCgpOworCisgICAgZ19hc3NlcnQodGVzdC0+Y2FuRXhlY3V0ZUVkaXRpbmdDb21tYW5kKFdFQktJ
VF9FRElUSU5HX0NPTU1BTkRfU0VMRUNUX0FMTCkpOworCisgICAgdGVzdC0+Y29weUNsaXBib2Fy
ZCgpOworICAgIEdPd25QdHI8Y2hhcj4gY2xpcGJvYXJkVGV4dChndGtfY2xpcGJvYXJkX3dhaXRf
Zm9yX3RleHQodGVzdC0+bV9jbGlwYm9hcmQpKTsKKworICAgIC8vIEluaXRpYWxseSBvbmx5IHRo
ZSBzdWJzcGFuIGlzIHNlbGVjdGVkLgorICAgIGdfYXNzZXJ0X2NtcHN0cihjbGlwYm9hcmRUZXh0
LmdldCgpLCA9PSwgIm1ha2UgSmFjayBhIGR1bGwiKTsKKworICAgIHdlYmtpdF93ZWJfdmlld19l
eGVjdXRlX2VkaXRpbmdfY29tbWFuZCh0ZXN0LT5tX3dlYlZpZXcsIFdFQktJVF9FRElUSU5HX0NP
TU1BTkRfU0VMRUNUX0FMTCk7CisgICAgdGVzdC0+Y29weUNsaXBib2FyZCgpOworICAgIGNsaXBi
b2FyZFRleHQuc2V0KGd0a19jbGlwYm9hcmRfd2FpdF9mb3JfdGV4dCh0ZXN0LT5tX2NsaXBib2Fy
ZCkpOworCisgICAgLy8gVGhlIG1haW5zcGFuIHNob3VsZCBiZSBzZWxlY3RlZCBhZnRlciBjYWxs
aW5nIFNFTEVDVF9BTEwuCisgICAgZ19hc3NlcnRfY21wc3RyKGNsaXBib2FyZFRleHQuZ2V0KCks
ID09LCAiQWxsIHdvcmsgYW5kIG5vIHBsYXkgbWFrZSBKYWNrIGEgZHVsbCBib3kuIik7Cit9CisK
K3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3RWRpdG9yU2VsZWN0QWxsRWRpdGFibGUoRWRpdG9yVGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciogc2VsZWN0
ZWRTcGFuSFRNTCA9ICI8aHRtbD48Ym9keSBjb250ZW50RWRpdGFibGU9XCJ0cnVlXCI+IgorICAg
ICAgICAiPHNwYW4gaWQ9XCJtYWluc3BhblwiPkFsbCB3b3JrIGFuZCBubyBwbGF5IDxzcGFuIGlk
PVwic3Vic3BhblwiPm1ha2UgSmFjayBhIGR1bGw8L3NwYW4+IGJveS48L3NwYW4+IgorICAgICAg
ICAiPHNjcmlwdD5kb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5jb2xsYXBzZSgpO1xuIgorICAgICAg
ICAiZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0QWxsQ2hpbGRyZW4oZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ3N1YnNwYW4nKSk7XG4iCisgICAgICAgICI8L3NjcmlwdD48L2JvZHk+PC9o
dG1sPiI7CisKKyAgICBnX2Fzc2VydCh0ZXN0LT5jYW5FeGVjdXRlRWRpdGluZ0NvbW1hbmQoV0VC
S0lUX0VESVRJTkdfQ09NTUFORF9TRUxFQ1RfQUxMKSk7CisKKyAgICB0ZXN0LT5sb2FkSHRtbChz
ZWxlY3RlZFNwYW5IVE1MLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsK
KworICAgIGdfYXNzZXJ0KHRlc3QtPmNhbkV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXRUJLSVRfRURJ
VElOR19DT01NQU5EX1NFTEVDVF9BTEwpKTsKKworICAgIHRlc3QtPmNvcHlDbGlwYm9hcmQoKTsK
KyAgICBHT3duUHRyPGNoYXI+IGNsaXBib2FyZFRleHQoZ3RrX2NsaXBib2FyZF93YWl0X2Zvcl90
ZXh0KHRlc3QtPm1fY2xpcGJvYXJkKSk7CisKKyAgICAvLyBJbml0aWFsbHkgb25seSB0aGUgc3Vi
c3BhbiBpcyBzZWxlY3RlZC4KKyAgICBnX2Fzc2VydF9jbXBzdHIoY2xpcGJvYXJkVGV4dC5nZXQo
KSwgPT0sICJtYWtlIEphY2sgYSBkdWxsIik7CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfZXhlY3V0
ZV9lZGl0aW5nX2NvbW1hbmQodGVzdC0+bV93ZWJWaWV3LCBXRUJLSVRfRURJVElOR19DT01NQU5E
X1NFTEVDVF9BTEwpOworICAgIHRlc3QtPmNvcHlDbGlwYm9hcmQoKTsKKyAgICBjbGlwYm9hcmRU
ZXh0LnNldChndGtfY2xpcGJvYXJkX3dhaXRfZm9yX3RleHQodGVzdC0+bV9jbGlwYm9hcmQpKTsK
KworICAgIC8vIFRoZSBtYWluc3BhbiBzaG91bGQgYmUgc2VsZWN0ZWQgYWZ0ZXIgY2FsbGluZyBT
RUxFQ1RfQUxMLgorICAgIGdfYXNzZXJ0X2NtcHN0cihjbGlwYm9hcmRUZXh0LmdldCgpLCA9PSwg
IkFsbCB3b3JrIGFuZCBubyBwbGF5IG1ha2UgSmFjayBhIGR1bGwgYm95LiIpOworfQorCit2b2lk
IGJlZm9yZUFsbCgpCit7CisgICAgRWRpdG9yVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImN1
dC1jb3B5LXBhc3RlL25vbi1lZGl0YWJsZSIsIHRlc3RXZWJWaWV3RWRpdG9yQ3V0Q29weVBhc3Rl
Tm9uRWRpdGFibGUpOworICAgIEVkaXRvclRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJjdXQt
Y29weS1wYXN0ZS9lZGl0YWJsZSIsIHRlc3RXZWJWaWV3RWRpdG9yQ3V0Q29weVBhc3RlRWRpdGFi
bGUpOworICAgIEVkaXRvclRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJzZWxlY3QtYWxsL25v
bi1lZGl0YWJsZSIsIHRlc3RXZWJWaWV3RWRpdG9yU2VsZWN0QWxsTm9uRWRpdGFibGUpOworICAg
IEVkaXRvclRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJzZWxlY3QtYWxsL2VkaXRhYmxlIiwg
dGVzdFdlYlZpZXdFZGl0b3JTZWxlY3RBbGxFZGl0YWJsZSk7Cit9CisKK3ZvaWQgYWZ0ZXJBbGwo
KQoreworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3Rr
L1dlYkV4dGVuc2lvblRlc3QuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQy
R3RrL1dlYkV4dGVuc2lvblRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQwY2I2Y2FmOTE1ZTE0YmM4MTQ5
ZjNjZDNiM2MwZWYzODI5MjgxNTcKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdDJHdGsvV2ViRXh0ZW5zaW9uVGVzdC5jcHAKQEAgLTAsMCArMSwyNjYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0UmVmLmg+CisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDxnaW8vZ2lvLmg+Cisj
aW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8d2Via2l0
Mi93ZWJraXQtd2ViLWV4dGVuc2lvbi5oPgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCitzdGF0aWMgY29uc3QgY2hhciBpbnRy
b3NwZWN0aW9uWE1MW10gPQorICAgICI8bm9kZT4iCisgICAgIiA8aW50ZXJmYWNlIG5hbWU9J29y
Zy53ZWJraXQuZ3RrLldlYkV4dGVuc2lvblRlc3QnPiIKKyAgICAiICA8bWV0aG9kIG5hbWU9J0dl
dFRpdGxlJz4iCisgICAgIiAgIDxhcmcgdHlwZT0ndCcgbmFtZT0ncGFnZUlEJyBkaXJlY3Rpb249
J2luJy8+IgorICAgICIgICA8YXJnIHR5cGU9J3MnIG5hbWU9J3RpdGxlJyBkaXJlY3Rpb249J291
dCcvPiIKKyAgICAiICA8L21ldGhvZD4iCisgICAgIiAgPG1ldGhvZCBuYW1lPSdBYm9ydFByb2Nl
c3MnPiIKKyAgICAiICA8L21ldGhvZD4iCisgICAgIiAgPG1ldGhvZCBuYW1lPSdSdW5KYXZhU2Ny
aXB0SW5Jc29sYXRlZFdvcmxkJz4iCisgICAgIiAgIDxhcmcgdHlwZT0ndCcgbmFtZT0ncGFnZUlE
JyBkaXJlY3Rpb249J2luJy8+IgorICAgICIgICA8YXJnIHR5cGU9J3MnIG5hbWU9J3NjcmlwdCcg
ZGlyZWN0aW9uPSdpbicvPiIKKyAgICAiICA8L21ldGhvZD4iCisgICAgIiAgPHNpZ25hbCBuYW1l
PSdEb2N1bWVudExvYWRlZCcvPiIKKyAgICAiICA8c2lnbmFsIG5hbWU9J1VSSUNoYW5nZWQnPiIK
KyAgICAiICAgPGFyZyB0eXBlPSdzJyBuYW1lPSd1cmknIGRpcmVjdGlvbj0nb3V0Jy8+IgorICAg
ICIgIDwvc2lnbmFsPiIKKyAgICAiIDwvaW50ZXJmYWNlPiIKKyAgICAiPC9ub2RlPiI7CisKK3R5
cGVkZWYgZW51bSB7CisgICAgRG9jdW1lbnRMb2FkZWRTaWduYWwsCisgICAgVVJJQ2hhbmdlZFNp
Z25hbCwKK30gRGVsYXllZFNpZ25hbFR5cGU7CisKK3N0cnVjdCBEZWxheWVkU2lnbmFsIHsKKyAg
ICBEZWxheWVkU2lnbmFsKERlbGF5ZWRTaWduYWxUeXBlIHR5cGUpCisgICAgICAgIDogdHlwZSh0
eXBlKQorICAgIHsKKyAgICB9CisKKyAgICBEZWxheWVkU2lnbmFsKERlbGF5ZWRTaWduYWxUeXBl
IHR5cGUsIGNvbnN0IGNoYXIqIHVyaSkKKyAgICAgICAgOiB0eXBlKHR5cGUpCisgICAgICAgICwg
dXJpKHVyaSkKKyAgICB7CisgICAgfQorCisgICAgRGVsYXllZFNpZ25hbFR5cGUgdHlwZTsKKyAg
ICBDU3RyaW5nIHVyaTsKK307CisKK0RlcXVlPE93blB0cjxEZWxheWVkU2lnbmFsPj4gZGVsYXll
ZFNpZ25hbHNRdWV1ZTsKKworc3RhdGljIHZvaWQgZW1pdERvY3VtZW50TG9hZGVkKEdEQnVzQ29u
bmVjdGlvbiogY29ubmVjdGlvbikKK3sKKyAgICBib29sIG9rID0gZ19kYnVzX2Nvbm5lY3Rpb25f
ZW1pdF9zaWduYWwoCisgICAgICAgIGNvbm5lY3Rpb24sCisgICAgICAgIDAsCisgICAgICAgICIv
b3JnL3dlYmtpdC9ndGsvV2ViRXh0ZW5zaW9uVGVzdCIsCisgICAgICAgICJvcmcud2Via2l0Lmd0
ay5XZWJFeHRlbnNpb25UZXN0IiwKKyAgICAgICAgIkRvY3VtZW50TG9hZGVkIiwKKyAgICAgICAg
MCwKKyAgICAgICAgMCk7CisgICAgZ19hc3NlcnQob2spOworfQorCitzdGF0aWMgdm9pZCBkb2N1
bWVudExvYWRlZENhbGxiYWNrKFdlYktpdFdlYlBhZ2UqLCBXZWJLaXRXZWJFeHRlbnNpb24qIGV4
dGVuc2lvbikKK3sKKyAgICBncG9pbnRlciBkYXRhID0gZ19vYmplY3RfZ2V0X2RhdGEoR19PQkpF
Q1QoZXh0ZW5zaW9uKSwgImRidXMtY29ubmVjdGlvbiIpOworICAgIGlmIChkYXRhKQorICAgICAg
ICBlbWl0RG9jdW1lbnRMb2FkZWQoR19EQlVTX0NPTk5FQ1RJT04oZGF0YSkpOworICAgIGVsc2UK
KyAgICAgICAgZGVsYXllZFNpZ25hbHNRdWV1ZS5hcHBlbmQoYWRvcHRQdHIobmV3IERlbGF5ZWRT
aWduYWwoRG9jdW1lbnRMb2FkZWRTaWduYWwpKSk7Cit9CisKK3N0YXRpYyB2b2lkIGVtaXRVUklD
aGFuZ2VkKEdEQnVzQ29ubmVjdGlvbiogY29ubmVjdGlvbiwgY29uc3QgY2hhciogdXJpKQorewor
ICAgIGJvb2wgb2sgPSBnX2RidXNfY29ubmVjdGlvbl9lbWl0X3NpZ25hbCgKKyAgICAgICAgY29u
bmVjdGlvbiwKKyAgICAgICAgMCwKKyAgICAgICAgIi9vcmcvd2Via2l0L2d0ay9XZWJFeHRlbnNp
b25UZXN0IiwKKyAgICAgICAgIm9yZy53ZWJraXQuZ3RrLldlYkV4dGVuc2lvblRlc3QiLAorICAg
ICAgICAiVVJJQ2hhbmdlZCIsCisgICAgICAgIGdfdmFyaWFudF9uZXcoIihzKSIsIHVyaSksCisg
ICAgICAgIDApOworICAgIGdfYXNzZXJ0KG9rKTsKK30KKworc3RhdGljIHZvaWQgdXJpQ2hhbmdl
ZENhbGxiYWNrKFdlYktpdFdlYlBhZ2UqIHdlYlBhZ2UsIEdQYXJhbVNwZWMqIHBzcGVjLCBXZWJL
aXRXZWJFeHRlbnNpb24qIGV4dGVuc2lvbikKK3sKKyAgICBncG9pbnRlciBkYXRhID0gZ19vYmpl
Y3RfZ2V0X2RhdGEoR19PQkpFQ1QoZXh0ZW5zaW9uKSwgImRidXMtY29ubmVjdGlvbiIpOworICAg
IGlmIChkYXRhKQorICAgICAgICBlbWl0VVJJQ2hhbmdlZChHX0RCVVNfQ09OTkVDVElPTihkYXRh
KSwgd2Via2l0X3dlYl9wYWdlX2dldF91cmkod2ViUGFnZSkpOworICAgIGVsc2UKKyAgICAgICAg
ZGVsYXllZFNpZ25hbHNRdWV1ZS5hcHBlbmQoYWRvcHRQdHIobmV3IERlbGF5ZWRTaWduYWwoVVJJ
Q2hhbmdlZFNpZ25hbCwgd2Via2l0X3dlYl9wYWdlX2dldF91cmkod2ViUGFnZSkpKSk7Cit9CisK
K3N0YXRpYyBnYm9vbGVhbiBzZW5kUmVxdWVzdENhbGxiYWNrKFdlYktpdFdlYlBhZ2UqLCBXZWJL
aXRVUklSZXF1ZXN0KiByZXF1ZXN0LCBXZWJLaXRVUklSZXNwb25zZSosIGdwb2ludGVyKQorewor
ICAgIGNvbnN0IGNoYXIqIHJlcXVlc3RVUkkgPSB3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3VyaShy
ZXF1ZXN0KTsKKyAgICBnX2Fzc2VydChyZXF1ZXN0VVJJKTsKKworICAgIGlmIChjb25zdCBjaGFy
KiBzdWZmaXggPSBnX3N0cnJzdHIocmVxdWVzdFVSSSwgIi9yZW1vdmUtdGhpcy9qYXZhc2NyaXB0
LmpzIikpIHsKKyAgICAgICAgR093blB0cjxjaGFyPiBwcmVmaXgoZ19zdHJuZHVwKHJlcXVlc3RV
UkksIHN0cmxlbihyZXF1ZXN0VVJJKSAtIHN0cmxlbihzdWZmaXgpKSk7CisgICAgICAgIEdPd25Q
dHI8Y2hhcj4gbmV3VVJJKGdfc3RyZHVwX3ByaW50ZigiJXMvamF2YXNjcmlwdC5qcyIsIHByZWZp
eC5nZXQoKSkpOworICAgICAgICB3ZWJraXRfdXJpX3JlcXVlc3Rfc2V0X3VyaShyZXF1ZXN0LCBu
ZXdVUkkuZ2V0KCkpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfaGFzX3N1ZmZpeChyZXF1ZXN0VVJJ
LCAiL2FkZC1kby1ub3QtdHJhY2staGVhZGVyIikpIHsKKyAgICAgICAgU291cE1lc3NhZ2VIZWFk
ZXJzKiBoZWFkZXJzID0gd2Via2l0X3VyaV9yZXF1ZXN0X2dldF9odHRwX2hlYWRlcnMocmVxdWVz
dCk7CisgICAgICAgIGdfYXNzZXJ0KGhlYWRlcnMpOworICAgICAgICBzb3VwX21lc3NhZ2VfaGVh
ZGVyc19hcHBlbmQoaGVhZGVycywgIkROVCIsICIxIik7CisgICAgfSBlbHNlIGlmIChnX3N0cl9o
YXNfc3VmZml4KHJlcXVlc3RVUkksICIvY2FuY2VsLXRoaXMuanMiKSkKKyAgICAgICAgcmV0dXJu
IFRSVUU7CisKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkIHBhZ2VDcmVhdGVk
Q2FsbGJhY2soV2ViS2l0V2ViRXh0ZW5zaW9uKiBleHRlbnNpb24sIFdlYktpdFdlYlBhZ2UqIHdl
YlBhZ2UsIGdwb2ludGVyKQoreworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViUGFnZSwgImRvY3Vt
ZW50LWxvYWRlZCIsIEdfQ0FMTEJBQ0soZG9jdW1lbnRMb2FkZWRDYWxsYmFjayksIGV4dGVuc2lv
bik7CisgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJQYWdlLCAibm90aWZ5Ojp1cmkiLCBHX0NBTExC
QUNLKHVyaUNoYW5nZWRDYWxsYmFjayksIGV4dGVuc2lvbik7CisgICAgZ19zaWduYWxfY29ubmVj
dCh3ZWJQYWdlLCAic2VuZC1yZXF1ZXN0IiwgR19DQUxMQkFDSyhzZW5kUmVxdWVzdENhbGxiYWNr
KSwgMCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGVjaG9DYWxsYmFjayhKU0NvbnRleHRSZWYg
anNDb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYsIHNpemVfdCBhcmd1bWVudENvdW50
LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKikKK3sKKyAgICBpZiAo
YXJndW1lbnRDb3VudCA8PSAwKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
anNDb250ZXh0KTsKKworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzdHJpbmcoQWRvcHQs
IEpTVmFsdWVUb1N0cmluZ0NvcHkoanNDb250ZXh0LCBhcmd1bWVudHNbMF0sIDApKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VTdHJpbmcoanNDb250ZXh0LCBzdHJpbmcuZ2V0KCkpOworfQorCitz
dGF0aWMgdm9pZCB3aW5kb3dPYmplY3RDbGVhcmVkKFdlYktpdFNjcmlwdFdvcmxkKiB3b3JsZCwg
V2ViS2l0V2ViUGFnZSogcGFnZSwgV2ViS2l0RnJhbWUqIGZyYW1lLCBncG9pbnRlcikKK3sKKyAg
ICBKU0dsb2JhbENvbnRleHRSZWYganNDb250ZXh0ID0gd2Via2l0X2ZyYW1lX2dldF9qYXZhc2Ny
aXB0X2NvbnRleHRfZm9yX3NjcmlwdF93b3JsZChmcmFtZSwgd29ybGQpOworICAgIGdfYXNzZXJ0
KGpzQ29udGV4dCk7CisgICAgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0ID0gSlNDb250ZXh0R2V0
R2xvYmFsT2JqZWN0KGpzQ29udGV4dCk7CisgICAgZ19hc3NlcnQoZ2xvYmFsT2JqZWN0KTsKKwor
ICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBmdW5jdGlvbk5hbWUoQWRvcHQsIEpTU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJlY2hvIikpOworICAgIEpTT2JqZWN0UmVmIGZ1bmN0aW9u
ID0gSlNPYmplY3RNYWtlRnVuY3Rpb25XaXRoQ2FsbGJhY2soanNDb250ZXh0LCBmdW5jdGlvbk5h
bWUuZ2V0KCksIGVjaG9DYWxsYmFjayk7CisgICAgSlNPYmplY3RTZXRQcm9wZXJ0eShqc0NvbnRl
eHQsIGdsb2JhbE9iamVjdCwgZnVuY3Rpb25OYW1lLmdldCgpLCBmdW5jdGlvbiwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIHwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSwgMCk7
Cit9CisKK3N0YXRpYyBXZWJLaXRXZWJQYWdlKiBnZXRXZWJQYWdlKFdlYktpdFdlYkV4dGVuc2lv
biogZXh0ZW5zaW9uLCB1aW50NjRfdCBwYWdlSUQsIEdEQnVzTWV0aG9kSW52b2NhdGlvbiogaW52
b2NhdGlvbikKK3sKKyAgICBXZWJLaXRXZWJQYWdlKiBwYWdlID0gd2Via2l0X3dlYl9leHRlbnNp
b25fZ2V0X3BhZ2UoZXh0ZW5zaW9uLCBwYWdlSUQpOworICAgIGlmICghcGFnZSkgeworICAgICAg
ICBnX2RidXNfbWV0aG9kX2ludm9jYXRpb25fcmV0dXJuX2Vycm9yKAorICAgICAgICAgICAgaW52
b2NhdGlvbiwgR19EQlVTX0VSUk9SLCBHX0RCVVNfRVJST1JfSU5WQUxJRF9BUkdTLAorICAgICAg
ICAgICAgIkludmFsaWQgcGFnZSBJRDogJSIgR19HVUlOVDY0X0ZPUk1BVCwgcGFnZUlEKTsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfd2Vi
X3BhZ2VfZ2V0X2lkKHBhZ2UpLCA9PSwgcGFnZUlEKTsKKyAgICByZXR1cm4gcGFnZTsKK30KKwor
c3RhdGljIHZvaWQgbWV0aG9kQ2FsbENhbGxiYWNrKEdEQnVzQ29ubmVjdGlvbiogY29ubmVjdGlv
biwgY29uc3QgY2hhciogc2VuZGVyLCBjb25zdCBjaGFyKiBvYmplY3RQYXRoLCBjb25zdCBjaGFy
KiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBtZXRob2ROYW1lLCBHVmFyaWFudCogcGFyYW1l
dGVycywgR0RCdXNNZXRob2RJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBncG9pbnRlciB1c2VyRGF0
YSkKK3sKKyAgICBpZiAoZ19zdHJjbXAwKGludGVyZmFjZU5hbWUsICJvcmcud2Via2l0Lmd0ay5X
ZWJFeHRlbnNpb25UZXN0IikpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghZ19zdHJjbXAw
KG1ldGhvZE5hbWUsICJHZXRUaXRsZSIpKSB7CisgICAgICAgIHVpbnQ2NF90IHBhZ2VJRDsKKyAg
ICAgICAgZ192YXJpYW50X2dldChwYXJhbWV0ZXJzLCAiKHQpIiwgJnBhZ2VJRCk7CisgICAgICAg
IFdlYktpdFdlYlBhZ2UqIHBhZ2UgPSBnZXRXZWJQYWdlKFdFQktJVF9XRUJfRVhURU5TSU9OKHVz
ZXJEYXRhKSwgcGFnZUlELCBpbnZvY2F0aW9uKTsKKyAgICAgICAgaWYgKCFwYWdlKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1bWVudCA9IHdl
YmtpdF93ZWJfcGFnZV9nZXRfZG9tX2RvY3VtZW50KHBhZ2UpOworICAgICAgICBHT3duUHRyPGNo
YXI+IHRpdGxlKHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3RpdGxlKGRvY3VtZW50KSk7CisgICAg
ICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUoaW52b2NhdGlvbiwgZ192
YXJpYW50X25ldygiKHMpIiwgdGl0bGUuZ2V0KCkpKTsKKyAgICB9IGVsc2UgaWYgKCFnX3N0cmNt
cDAobWV0aG9kTmFtZSwgIlJ1bkphdmFTY3JpcHRJbklzb2xhdGVkV29ybGQiKSkgeworICAgICAg
ICB1aW50NjRfdCBwYWdlSUQ7CisgICAgICAgIGNvbnN0IGNoYXIqIHNjcmlwdDsKKyAgICAgICAg
Z192YXJpYW50X2dldChwYXJhbWV0ZXJzLCAiKHQmcykiLCAmcGFnZUlELCAmc2NyaXB0KTsKKyAg
ICAgICAgV2ViS2l0V2ViUGFnZSogcGFnZSA9IGdldFdlYlBhZ2UoV0VCS0lUX1dFQl9FWFRFTlNJ
T04odXNlckRhdGEpLCBwYWdlSUQsIGludm9jYXRpb24pOworICAgICAgICBpZiAoIXBhZ2UpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgR1JlZlB0cjxXZWJLaXRTY3JpcHRXb3JsZD4g
d29ybGQgPSBhZG9wdEdSZWYod2Via2l0X3NjcmlwdF93b3JsZF9uZXcoKSk7CisgICAgICAgIGdf
YXNzZXJ0KHdlYmtpdF9zY3JpcHRfd29ybGRfZ2V0X2RlZmF1bHQoKSAhPSB3b3JsZC5nZXQoKSk7
CisgICAgICAgIFdlYktpdEZyYW1lKiBmcmFtZSA9IHdlYmtpdF93ZWJfcGFnZV9nZXRfbWFpbl9m
cmFtZShwYWdlKTsKKyAgICAgICAgSlNHbG9iYWxDb250ZXh0UmVmIGpzQ29udGV4dCA9IHdlYmtp
dF9mcmFtZV9nZXRfamF2YXNjcmlwdF9jb250ZXh0X2Zvcl9zY3JpcHRfd29ybGQoZnJhbWUsIHdv
cmxkLmdldCgpKTsKKyAgICAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGpzU2NyaXB0KEFk
b3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhzY3JpcHQpKTsKKyAgICAgICAgSlNF
dmFsdWF0ZVNjcmlwdChqc0NvbnRleHQsIGpzU2NyaXB0LmdldCgpLCAwLCAwLCAwLCAwKTsKKyAg
ICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVybl92YWx1ZShpbnZvY2F0aW9uLCAw
KTsKKyAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAobWV0aG9kTmFtZSwgIkFib3J0UHJvY2VzcyIp
KQorICAgICAgICBhYm9ydCgpOworfQorCitzdGF0aWMgY29uc3QgR0RCdXNJbnRlcmZhY2VWVGFi
bGUgaW50ZXJmYWNlVmlydHVhbFRhYmxlID0geworICAgIG1ldGhvZENhbGxDYWxsYmFjaywgMCwg
MCwgeyAwLCB9Cit9OworCitzdGF0aWMgdm9pZCBidXNBY3F1aXJlZENhbGxiYWNrKEdEQnVzQ29u
bmVjdGlvbiogY29ubmVjdGlvbiwgY29uc3QgY2hhciogbmFtZSwgZ3BvaW50ZXIgdXNlckRhdGEp
Cit7CisgICAgc3RhdGljIEdEQnVzTm9kZUluZm8qIGludHJvc3BlY3Rpb25EYXRhID0gMDsKKyAg
ICBpZiAoIWludHJvc3BlY3Rpb25EYXRhKQorICAgICAgICBpbnRyb3NwZWN0aW9uRGF0YSA9IGdf
ZGJ1c19ub2RlX2luZm9fbmV3X2Zvcl94bWwoaW50cm9zcGVjdGlvblhNTCwgMCk7CisKKyAgICBH
T3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgdW5zaWduZWQgcmVnaXN0cmF0aW9uSUQgPSBnX2Ri
dXNfY29ubmVjdGlvbl9yZWdpc3Rlcl9vYmplY3QoCisgICAgICAgIGNvbm5lY3Rpb24sCisgICAg
ICAgICIvb3JnL3dlYmtpdC9ndGsvV2ViRXh0ZW5zaW9uVGVzdCIsCisgICAgICAgIGludHJvc3Bl
Y3Rpb25EYXRhLT5pbnRlcmZhY2VzWzBdLAorICAgICAgICAmaW50ZXJmYWNlVmlydHVhbFRhYmxl
LAorICAgICAgICBnX29iamVjdF9yZWYodXNlckRhdGEpLAorICAgICAgICBzdGF0aWNfY2FzdDxH
RGVzdHJveU5vdGlmeT4oZ19vYmplY3RfdW5yZWYpLAorICAgICAgICAmZXJyb3Iub3V0UHRyKCkp
OworICAgIGlmICghcmVnaXN0cmF0aW9uSUQpCisgICAgICAgIGdfd2FybmluZygiRmFpbGVkIHRv
IHJlZ2lzdGVyIG9iamVjdDogJXNcbiIsIGVycm9yLT5tZXNzYWdlKTsKKworICAgIGdfb2JqZWN0
X3NldF9kYXRhKEdfT0JKRUNUKHVzZXJEYXRhKSwgImRidXMtY29ubmVjdGlvbiIsIGNvbm5lY3Rp
b24pOworICAgIHdoaWxlIChkZWxheWVkU2lnbmFsc1F1ZXVlLnNpemUoKSkgeworICAgICAgICBP
d25QdHI8RGVsYXllZFNpZ25hbD4gZGVsYXllZFNpZ25hbCA9IGRlbGF5ZWRTaWduYWxzUXVldWUu
dGFrZUZpcnN0KCk7CisgICAgICAgIHN3aXRjaCAoZGVsYXllZFNpZ25hbC0+dHlwZSkgeworICAg
ICAgICBjYXNlIERvY3VtZW50TG9hZGVkU2lnbmFsOgorICAgICAgICAgICAgZW1pdERvY3VtZW50
TG9hZGVkKGNvbm5lY3Rpb24pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVVJJ
Q2hhbmdlZFNpZ25hbDoKKyAgICAgICAgICAgIGVtaXRVUklDaGFuZ2VkKGNvbm5lY3Rpb24sIGRl
bGF5ZWRTaWduYWwtPnVyaS5kYXRhKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK2V4dGVybiAiQyIgdm9pZCB3ZWJraXRfd2ViX2V4dGVuc2lvbl9pbml0aWFs
aXplKFdlYktpdFdlYkV4dGVuc2lvbiogZXh0ZW5zaW9uKQoreworICAgIGdfc2lnbmFsX2Nvbm5l
Y3QoZXh0ZW5zaW9uLCAicGFnZS1jcmVhdGVkIiwgR19DQUxMQkFDSyhwYWdlQ3JlYXRlZENhbGxi
YWNrKSwgZXh0ZW5zaW9uKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdlYmtpdF9zY3JpcHRfd29y
bGRfZ2V0X2RlZmF1bHQoKSwgIndpbmRvdy1vYmplY3QtY2xlYXJlZCIsIEdfQ0FMTEJBQ0sod2lu
ZG93T2JqZWN0Q2xlYXJlZCksIDApOworCisgICAgZ19idXNfb3duX25hbWUoCisgICAgICAgIEdf
QlVTX1RZUEVfU0VTU0lPTiwKKyAgICAgICAgIm9yZy53ZWJraXQuZ3RrLldlYkV4dGVuc2lvblRl
c3QiLAorICAgICAgICBHX0JVU19OQU1FX09XTkVSX0ZMQUdTX05PTkUsCisgICAgICAgIGJ1c0Fj
cXVpcmVkQ2FsbGJhY2ssCisgICAgICAgIDAsIDAsCisgICAgICAgIGdfb2JqZWN0X3JlZihleHRl
bnNpb24pLAorICAgICAgICBzdGF0aWNfY2FzdDxHRGVzdHJveU5vdGlmeT4oZ19vYmplY3RfdW5y
ZWYpKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0
ay9XZWJLaXRUZXN0QnVzLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0
ay9XZWJLaXRUZXN0QnVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YzJkM2Y2MzhiMTZjYTlmMjkwOTZjMjM5
ZjI4NmU2MmRiMjcyMGI3Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXQyR3RrL1dlYktpdFRlc3RCdXMuY3BwCkBAIC0wLDAgKzEsMTA2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXZWJLaXRUZXN0QnVzLmgiCisKKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK1dlYktpdFRlc3RCdXM6Oldl
YktpdFRlc3RCdXMoKQorICAgIDogbV9waWQoLTEpCit7Cit9CisKK2Jvb2wgV2ViS2l0VGVzdEJ1
czo6cnVuKCkKK3sKKyAgICAvLyBGSVhNRTogVXNlIEdUZXN0REJ1cyB3aGVuIHdlIGJ1bXAgZ2xp
YiB0byAyLjM0LgorICAgIEdPd25QdHI8Y2hhcj4gZGJ1c0xhdW5jaChnX2ZpbmRfcHJvZ3JhbV9p
bl9wYXRoKCJkYnVzLWxhdW5jaCIpKTsKKyAgICBpZiAoIWRidXNMYXVuY2gpIHsKKyAgICAgICAg
Z193YXJuaW5nKCJFcnJvciBzdGFydGluZyBEQlVTIGRhZW1vbjogZGJ1cy1sYXVuY2ggbm90IGZv
dW5kIGluIHBhdGgiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEdPd25Q
dHI8Y2hhcj4gb3V0cHV0OworICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBpZiAoIWdf
c3Bhd25fY29tbWFuZF9saW5lX3N5bmMoZGJ1c0xhdW5jaC5nZXQoKSwgJm91dHB1dC5vdXRQdHIo
KSwgMCwgMCwgJmVycm9yLm91dFB0cigpKSkgeworICAgICAgICBnX3dhcm5pbmcoIkVycm9yIHN0
YXJ0aW5nIERCVVMgZGFlbW9uOiAlcyIsIGVycm9yLT5tZXNzYWdlKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIFN0cmluZyBvdXRwdXRTdHJpbmcgPSBTdHJpbmc6OmZyb21V
VEY4KG91dHB1dC5nZXQoKSk7CisgICAgVmVjdG9yPFN0cmluZz4gbGluZXM7CisgICAgb3V0cHV0
U3RyaW5nLnNwbGl0KFVDaGFyKCdcbicpLCAvKiBhbGxvd0VtcHR5RW50cmllcyAqLyBmYWxzZSwg
bGluZXMpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGluZXMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgY2hhcioqIGtleVZhbHVlID0gZ19zdHJzcGxpdChsaW5lc1tpXS51dGY4KCkuZGF0
YSgpLCAiPSIsIDIpOworICAgICAgICBnX2Fzc2VydF9jbXB1aW50KGdfc3Rydl9sZW5ndGgoa2V5
VmFsdWUpLCA9PSwgMik7CisgICAgICAgIGlmICghZ19zdHJjbXAwKGtleVZhbHVlWzBdLCAiREJV
U19TRVNTSU9OX0JVU19BRERSRVNTIikpIHsKKyAgICAgICAgICAgIG1fYWRkcmVzcyA9IGtleVZh
bHVlWzFdOworICAgICAgICAgICAgZ19zZXRlbnYoIkRCVVNfU0VTU0lPTl9CVVNfQUREUkVTUyIs
IGtleVZhbHVlWzFdLCBUUlVFKTsKKyAgICAgICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKGtleVZh
bHVlWzBdLCAiREJVU19TRVNTSU9OX0JVU19QSUQiKSkKKyAgICAgICAgICAgIG1fcGlkID0gZ19h
c2NpaV9zdHJ0b2xsKGtleVZhbHVlWzFdLCAwLCAxMCk7CisgICAgICAgIGdfc3RyZnJlZXYoa2V5
VmFsdWUpOworICAgIH0KKworICAgIHJldHVybiBtX3BpZCA+IDA7Cit9CisKK1dlYktpdFRlc3RC
dXM6On5XZWJLaXRUZXN0QnVzKCkKK3sKKyAgICBnX3Vuc2V0ZW52KCJEQlVTX1NFU1NJT05fQlVT
X0FERFJFU1MiKTsKKworICAgIGlmIChtX3BpZCAhPSAtMSkKKyAgICAgICAga2lsbChtX3BpZCwg
U0lHVEVSTSk7Cit9CisKK0dEQnVzQ29ubmVjdGlvbiogV2ViS2l0VGVzdEJ1czo6Z2V0T3JDcmVh
dGVDb25uZWN0aW9uKCkKK3sKKyAgICBpZiAobV9jb25uZWN0aW9uKQorICAgICAgICByZXR1cm4g
bV9jb25uZWN0aW9uLmdldCgpOworCisgICAgZ19hc3NlcnQoIW1fYWRkcmVzcy5pc051bGwoKSk7
CisgICAgbV9jb25uZWN0aW9uID0gYWRvcHRHUmVmKGdfZGJ1c19jb25uZWN0aW9uX25ld19mb3Jf
YWRkcmVzc19zeW5jKG1fYWRkcmVzcy5kYXRhKCksCisgICAgICAgIHN0YXRpY19jYXN0PEdEQnVz
Q29ubmVjdGlvbkZsYWdzPihHX0RCVVNfQ09OTkVDVElPTl9GTEFHU19BVVRIRU5USUNBVElPTl9D
TElFTlQgfCBHX0RCVVNfQ09OTkVDVElPTl9GTEFHU19NRVNTQUdFX0JVU19DT05ORUNUSU9OKSwK
KyAgICAgICAgMCwgMCwgMCkpOworICAgIHJldHVybiBtX2Nvbm5lY3Rpb24uZ2V0KCk7Cit9CisK
K3N0YXRpYyB2b2lkIG9uTmFtZUFwcGVhcmVkKEdEQnVzQ29ubmVjdGlvbiosIGNvbnN0IGNoYXIq
LCBjb25zdCBjaGFyKiwgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgZ19tYWluX2xvb3BfcXVp
dChzdGF0aWNfY2FzdDxHTWFpbkxvb3AqPih1c2VyRGF0YSkpOworfQorCitHREJ1c1Byb3h5KiBX
ZWJLaXRUZXN0QnVzOjpjcmVhdGVQcm94eShjb25zdCBjaGFyKiBzZXJ2aWNlTmFtZSwgY29uc3Qg
Y2hhciogb2JqZWN0UGF0aCwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgR01haW5Mb29wKiBt
YWluTG9vcCkKK3sKKyAgICB1bnNpZ25lZCB3YXRjaGVySUQgPSBnX2J1c193YXRjaF9uYW1lX29u
X2Nvbm5lY3Rpb24oZ2V0T3JDcmVhdGVDb25uZWN0aW9uKCksIHNlcnZpY2VOYW1lLCBHX0JVU19O
QU1FX1dBVENIRVJfRkxBR1NfTk9ORSwgb25OYW1lQXBwZWFyZWQsIDAsIG1haW5Mb29wLCAwKTsK
KyAgICBnX21haW5fbG9vcF9ydW4obWFpbkxvb3ApOworICAgIGdfYnVzX3Vud2F0Y2hfbmFtZSh3
YXRjaGVySUQpOworCisgICAgR0RCdXNQcm94eSogcHJveHkgPSBnX2RidXNfcHJveHlfbmV3X3N5
bmMoCisgICAgICAgIGNvbm5lY3Rpb24oKSwKKyAgICAgICAgR19EQlVTX1BST1hZX0ZMQUdTX0RP
X05PVF9BVVRPX1NUQVJULAorICAgICAgICAwLCAvLyBHREJ1c0ludGVyZmFjZUluZm8KKyAgICAg
ICAgc2VydmljZU5hbWUsCisgICAgICAgIG9iamVjdFBhdGgsCisgICAgICAgIGludGVyZmFjZU5h
bWUsCisgICAgICAgIDAsIC8vIEdDYW5jZWxsYWJsZQorICAgICAgICAwKTsKKyAgICBnX2Fzc2Vy
dChwcm94eSk7CisgICAgcmV0dXJuIHByb3h5OworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1dlYktpdFRlc3RCdXMuaCBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9XZWJLaXRUZXN0QnVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjlmODU2
YjI3NTNlZjJmY2ViNDZkMWZjMDQxZTlkZDQ1MTVmNjQ1NAotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9XZWJLaXRUZXN0QnVzLmgKQEAgLTAs
MCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVm
IFdlYktpdFRlc3RCdXNfaAorI2RlZmluZSBXZWJLaXRUZXN0QnVzX2gKKworI2luY2x1ZGUgPGdp
by9naW8uaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgorCitjbGFzcyBXZWJLaXRUZXN0QnVzIHsKK3B1YmxpYzoKKyAgICBX
ZWJLaXRUZXN0QnVzKCk7CisgICAgdmlydHVhbCB+V2ViS2l0VGVzdEJ1cygpOworCisgICAgYm9v
bCBydW4oKTsKKyAgICBHREJ1c1Byb3h5KiBjcmVhdGVQcm94eShjb25zdCBjaGFyKiBzZXJ2aWNl
TmFtZSwgY29uc3QgY2hhciogb2JqZWN0UGF0aCwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwg
R01haW5Mb29wKik7CisgICAgR0RCdXNDb25uZWN0aW9uKiBjb25uZWN0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb25uZWN0aW9uLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgR0RCdXNDb25uZWN0
aW9uKiBnZXRPckNyZWF0ZUNvbm5lY3Rpb24oKTsKKworICAgIHBpZF90IG1fcGlkOworICAgIENT
dHJpbmcgbV9hZGRyZXNzOworICAgIEdSZWZQdHI8R0RCdXNDb25uZWN0aW9uPiBtX2Nvbm5lY3Rp
b247Cit9OworCisjZW5kaWYgLy8gV2ViS2l0VGVzdEJ1c19oCmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvV2ViS2l0VGVzdFNlcnZlci5jcHAgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvV2ViS2l0VGVzdFNlcnZlci5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMGFhODZiYzY4YTZmMmY3ZTllMGZjZDU5N2RjZjlmZDhmNzZjZDQwZgotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9XZWJLaXRU
ZXN0U2VydmVyLmNwcApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRUZXN0U2Vy
dmVyLmgiCisKKyNpbmNsdWRlICJUZXN0TWFpbi5oIgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dP
d25QdHIuaD4KKworV2ViS2l0VGVzdFNlcnZlcjo6V2ViS2l0VGVzdFNlcnZlcihTZXJ2ZXJUeXBl
IHR5cGUpCit7CisgICAgR093blB0cjxjaGFyPiBzc2xDZXJ0aWZpY2F0ZUZpbGU7CisgICAgR093
blB0cjxjaGFyPiBzc2xLZXlGaWxlOworICAgIGlmICh0eXBlID09IFNlcnZlckhUVFBTKSB7Cisg
ICAgICAgIENTdHJpbmcgcmVzb3VyY2VzRGlyID0gVGVzdDo6Z2V0UmVzb3VyY2VzRGlyKCk7Cisg
ICAgICAgIHNzbENlcnRpZmljYXRlRmlsZS5zZXQoZ19idWlsZF9maWxlbmFtZShyZXNvdXJjZXNE
aXIuZGF0YSgpLCAidGVzdC1jZXJ0LnBlbSIsIE5VTEwpKTsKKyAgICAgICAgc3NsS2V5RmlsZS5z
ZXQoZ19idWlsZF9maWxlbmFtZShyZXNvdXJjZXNEaXIuZGF0YSgpLCAidGVzdC1rZXkucGVtIiwg
TlVMTCkpOworICAgIH0KKworICAgIEdSZWZQdHI8U291cEFkZHJlc3M+IGFkZHJlc3MgPSBhZG9w
dEdSZWYoc291cF9hZGRyZXNzX25ldygiMTI3LjAuMC4xIiwgU09VUF9BRERSRVNTX0FOWV9QT1JU
KSk7CisgICAgc291cF9hZGRyZXNzX3Jlc29sdmVfc3luYyhhZGRyZXNzLmdldCgpLCAwKTsKKwor
ICAgIG1fc291cFNlcnZlciA9IGFkb3B0R1JlZihzb3VwX3NlcnZlcl9uZXcoU09VUF9TRVJWRVJf
SU5URVJGQUNFLCBhZGRyZXNzLmdldCgpLAorICAgICAgICBTT1VQX1NFUlZFUl9TU0xfQ0VSVF9G
SUxFLCBzc2xDZXJ0aWZpY2F0ZUZpbGUuZ2V0KCksCisgICAgICAgIFNPVVBfU0VSVkVSX1NTTF9L
RVlfRklMRSwgc3NsS2V5RmlsZS5nZXQoKSwgbnVsbHB0cikpOworICAgIG1fYmFzZVVSSSA9IHR5
cGUgPT0gU2VydmVySFRUUFMgPyBzb3VwX3VyaV9uZXcoImh0dHBzOi8vMTI3LjAuMC4xLyIpIDog
c291cF91cmlfbmV3KCJodHRwOi8vMTI3LjAuMC4xLyIpOworICAgIHNvdXBfdXJpX3NldF9wb3J0
KG1fYmFzZVVSSSwgc291cF9zZXJ2ZXJfZ2V0X3BvcnQobV9zb3VwU2VydmVyLmdldCgpKSk7Cit9
CisKK1dlYktpdFRlc3RTZXJ2ZXI6On5XZWJLaXRUZXN0U2VydmVyKCkKK3sKKyAgICBzb3VwX3Vy
aV9mcmVlKG1fYmFzZVVSSSk7Cit9CisKK3ZvaWQgV2ViS2l0VGVzdFNlcnZlcjo6cnVuKFNvdXBT
ZXJ2ZXJDYWxsYmFjayBzZXJ2ZXJDYWxsYmFjaykKK3sKKyAgICBzb3VwX3NlcnZlcl9ydW5fYXN5
bmMobV9zb3VwU2VydmVyLmdldCgpKTsKKyAgICBzb3VwX3NlcnZlcl9hZGRfaGFuZGxlcihtX3Nv
dXBTZXJ2ZXIuZ2V0KCksIDAsIHNlcnZlckNhbGxiYWNrLCAwLCAwKTsKK30KKworQ1N0cmluZyBX
ZWJLaXRUZXN0U2VydmVyOjpnZXRVUklGb3JQYXRoKGNvbnN0IGNoYXIqIHBhdGgpCit7CisgICAg
U291cFVSSSogdXJpID0gc291cF91cmlfbmV3X3dpdGhfYmFzZShtX2Jhc2VVUkksIHBhdGgpOwor
ICAgIEdPd25QdHI8Z2NoYXI+IHVyaVN0cmluZyhzb3VwX3VyaV90b19zdHJpbmcodXJpLCBGQUxT
RSkpOworICAgIHNvdXBfdXJpX2ZyZWUodXJpKTsKKyAgICByZXR1cm4gdXJpU3RyaW5nLmdldCgp
OworfQorCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsv
V2ViS2l0VGVzdFNlcnZlci5oIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3Rr
L1dlYktpdFRlc3RTZXJ2ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MDJmN2ZhZDA0ODM0OGJkNzYyMWRiYWI5
MmQzY2U5MDRhODcyYjRkCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXQyR3RrL1dlYktpdFRlc3RTZXJ2ZXIuaApAQCAtMCwwICsxLDQ5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0VGVzdFNlcnZl
cl9oCisjZGVmaW5lIFdlYktpdFRlc3RTZXJ2ZXJfaAorCisjaW5jbHVkZSA8bGlic291cC9zb3Vw
Lmg+CisjaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3Qv
R1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworY2xhc3MgV2ViS2l0
VGVzdFNlcnZlciB7CitwdWJsaWM6CisKKyAgICBlbnVtIFNlcnZlclR5cGUgeworICAgICAgICBT
ZXJ2ZXJIVFRQLAorICAgICAgICBTZXJ2ZXJIVFRQUworICAgIH07CisKKyAgICBXZWJLaXRUZXN0
U2VydmVyKFNlcnZlclR5cGUgPSBTZXJ2ZXJIVFRQKTsKKyAgICB2aXJ0dWFsIH5XZWJLaXRUZXN0
U2VydmVyKCk7CisKKyAgICBTb3VwVVJJKiBiYXNlVVJJKCkgeyByZXR1cm4gbV9iYXNlVVJJOyB9
CisKKyAgICBDU3RyaW5nIGdldFVSSUZvclBhdGgoY29uc3QgY2hhciogcGF0aCk7CisgICAgdm9p
ZCBydW4oU291cFNlcnZlckNhbGxiYWNrKTsKKworcHJpdmF0ZToKKyAgICBHUmVmUHRyPFNvdXBT
ZXJ2ZXI+IG1fc291cFNlcnZlcjsKKyAgICBTb3VwVVJJKiBtX2Jhc2VVUkk7Cit9OworCisjZW5k
aWYgLy8gV2ViS2l0VGVzdFNlcnZlcl9oCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdDJHdGsvV2ViUHJvY2Vzc1Rlc3QuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXQyR3RrL1dlYlByb2Nlc3NUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YzAwODM3
MWUyMGVjMmRhZDdmODRjNTEwNDMyYWRhY2JiYWIzYzI5Ci0tLSAvZGV2L251bGwKKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1dlYlByb2Nlc3NUZXN0LmNwcApAQCAt
MCwwICsxLDEwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJZ2FsaWEgUy5MLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Rlc3QuaCIKKworI2luY2x1ZGUg
PGdpby9naW8uaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisKK3R5cGVkZWYg
SGFzaE1hcDxTdHJpbmcsIHN0ZDo6ZnVuY3Rpb248UGFzc093blB0cjxXZWJQcm9jZXNzVGVzdD4g
KCk+PiBUZXN0c01hcDsKK3N0YXRpYyBUZXN0c01hcCYgdGVzdHNNYXAoKQoreworICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoVGVzdHNNYXAsIHNfdGVzdHNNYXAsICgpKTsKKyAgICByZXR1cm4gc190
ZXN0c01hcDsKK30KKwordm9pZCBXZWJQcm9jZXNzVGVzdDo6YWRkKGNvbnN0IFN0cmluZyYgdGVz
dE5hbWUsIHN0ZDo6ZnVuY3Rpb248UGFzc093blB0cjxXZWJQcm9jZXNzVGVzdD4gKCk+IGNsb3N1
cmUpCit7CisgICAgdGVzdHNNYXAoKS5hZGQodGVzdE5hbWUsIHN0ZDo6Zm9yd2FyZDxzdGQ6OmZ1
bmN0aW9uPFBhc3NPd25QdHI8V2ViUHJvY2Vzc1Rlc3Q+ICgpPj4oY2xvc3VyZSkpOworfQorCitQ
YXNzT3duUHRyPFdlYlByb2Nlc3NUZXN0PiBXZWJQcm9jZXNzVGVzdDo6Y3JlYXRlKGNvbnN0IFN0
cmluZyYgdGVzdE5hbWUpCit7CisgICAgZ19hc3NlcnQodGVzdHNNYXAoKS5jb250YWlucyh0ZXN0
TmFtZSkpOworICAgIHJldHVybiB0ZXN0c01hcCgpLmdldCh0ZXN0TmFtZSkoKTsKK30KKworc3Rh
dGljIGNvbnN0IGNoYXIgaW50cm9zcGVjdGlvblhNTFtdID0KKyAgICAiPG5vZGU+IgorICAgICIg
PGludGVyZmFjZSBuYW1lPSdvcmcud2Via2l0Lmd0ay5XZWJQcm9jZXNzVGVzdCc+IgorICAgICIg
IDxtZXRob2QgbmFtZT0nUnVuVGVzdCc+IgorICAgICIgICA8YXJnIHR5cGU9J3MnIG5hbWU9J3Bh
dGgnIGRpcmVjdGlvbj0naW4nLz4iCisgICAgIiAgIDxhcmcgdHlwZT0nYXtzdn0nIG5hbWU9J2Fy
Z3MnIGRpcmVjdGlvbj0naW4nLz4iCisgICAgIiAgIDxhcmcgdHlwZT0nYicgbmFtZT0ncmVzdWx0
JyBkaXJlY3Rpb249J291dCcvPiIKKyAgICAiICA8L21ldGhvZD4iCisgICAgIiA8L2ludGVyZmFj
ZT4iCisgICAgIjwvbm9kZT4iOworCitzdGF0aWMgdm9pZCBtZXRob2RDYWxsQ2FsbGJhY2soR0RC
dXNDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBjb25zdCBjaGFyKiBzZW5kZXIsIGNvbnN0IGNoYXIq
IG9iamVjdFBhdGgsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG1ldGhv
ZE5hbWUsIEdWYXJpYW50KiBwYXJhbWV0ZXJzLCBHREJ1c01ldGhvZEludm9jYXRpb24qIGludm9j
YXRpb24sIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIGlmIChnX3N0cmNtcDAoaW50ZXJmYWNl
TmFtZSwgIm9yZy53ZWJraXQuZ3RrLldlYlByb2Nlc3NUZXN0IikpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJSdW5UZXN0IikpIHsKKyAgICAgICAg
Y29uc3QgY2hhciogdGVzdFBhdGg7CisgICAgICAgIEdWYXJpYW50KiBhcmdzOworICAgICAgICBn
X3ZhcmlhbnRfZ2V0KHBhcmFtZXRlcnMsICIoJnNAYXtzdn0pIiwgJnRlc3RQYXRoLCAmYXJncyk7
CisgICAgICAgIE93blB0cjxXZWJQcm9jZXNzVGVzdD4gdGVzdCA9IFdlYlByb2Nlc3NUZXN0Ojpj
cmVhdGUoU3RyaW5nOjpmcm9tVVRGOCh0ZXN0UGF0aCkpOworICAgICAgICBib29sIHJlc3VsdCA9
IHRlc3QtPnJ1blRlc3QoZ19zdHJyc3RyKHRlc3RQYXRoLCAiLyIpICsgMSwgV0VCS0lUX1dFQl9F
WFRFTlNJT04odXNlckRhdGEpLCBhcmdzKTsKKyAgICAgICAgZ192YXJpYW50X3VucmVmKGFyZ3Mp
OworCisgICAgICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUoaW52b2Nh
dGlvbiwgZ192YXJpYW50X25ldygiKGIpIiwgcmVzdWx0KSk7CisgICAgfSBlbHNlCisgICAgICAg
IGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Cit9CisKK3N0YXRpYyBjb25zdCBHREJ1c0ludGVyZmFj
ZVZUYWJsZSBpbnRlcmZhY2VWaXJ0dWFsVGFibGUgPSB7CisgICAgbWV0aG9kQ2FsbENhbGxiYWNr
LCAwLCAwLCB7IDAsIH0KK307CisKK3N0YXRpYyB2b2lkIGJ1c0FjcXVpcmVkQ2FsbGJhY2soR0RC
dXNDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBjb25zdCBjaGFyKiBuYW1lLCBncG9pbnRlciB1c2Vy
RGF0YSkKK3sKKyAgICBzdGF0aWMgR0RCdXNOb2RlSW5mbyogaW50cm9zcGVjdGlvbkRhdGEgPSAw
OworICAgIGlmICghaW50cm9zcGVjdGlvbkRhdGEpCisgICAgICAgIGludHJvc3BlY3Rpb25EYXRh
ID0gZ19kYnVzX25vZGVfaW5mb19uZXdfZm9yX3htbChpbnRyb3NwZWN0aW9uWE1MLCAwKTsKKwor
ICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICB1bnNpZ25lZCByZWdpc3RyYXRpb25JRCA9
IGdfZGJ1c19jb25uZWN0aW9uX3JlZ2lzdGVyX29iamVjdCgKKyAgICAgICAgY29ubmVjdGlvbiwK
KyAgICAgICAgIi9vcmcvd2Via2l0L2d0ay9XZWJQcm9jZXNzVGVzdCIsCisgICAgICAgIGludHJv
c3BlY3Rpb25EYXRhLT5pbnRlcmZhY2VzWzBdLAorICAgICAgICAmaW50ZXJmYWNlVmlydHVhbFRh
YmxlLAorICAgICAgICBnX29iamVjdF9yZWYodXNlckRhdGEpLAorICAgICAgICBzdGF0aWNfY2Fz
dDxHRGVzdHJveU5vdGlmeT4oZ19vYmplY3RfdW5yZWYpLAorICAgICAgICAmZXJyb3Iub3V0UHRy
KCkpOworICAgIGlmICghcmVnaXN0cmF0aW9uSUQpCisgICAgICAgIGdfd2FybmluZygiRmFpbGVk
IHRvIHJlZ2lzdGVyIG9iamVjdDogJXNcbiIsIGVycm9yLT5tZXNzYWdlKTsKK30KKworZXh0ZXJu
ICJDIiB2b2lkIHdlYmtpdF93ZWJfZXh0ZW5zaW9uX2luaXRpYWxpemUoV2ViS2l0V2ViRXh0ZW5z
aW9uKiBleHRlbnNpb24pCit7CisgICAgZ19idXNfb3duX25hbWUoCisgICAgICAgIEdfQlVTX1RZ
UEVfU0VTU0lPTiwKKyAgICAgICAgIm9yZy53ZWJraXQuZ3RrLldlYlByb2Nlc3NUZXN0IiwKKyAg
ICAgICAgR19CVVNfTkFNRV9PV05FUl9GTEFHU19OT05FLAorICAgICAgICBidXNBY3F1aXJlZENh
bGxiYWNrLAorICAgICAgICAwLCAwLAorICAgICAgICBnX29iamVjdF9yZWYoZXh0ZW5zaW9uKSwK
KyAgICAgICAgc3RhdGljX2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGdfb2JqZWN0X3VucmVmKSk7Cit9
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvV2ViUHJv
Y2Vzc1Rlc3QuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9XZWJQcm9j
ZXNzVGVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUzZWVkZDBiNDE0MzdkMjJlNmVmZWUwNTY5ODc5MmZiZWVh
MGI5MDYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dDJHdGsvV2ViUHJvY2Vzc1Rlc3QuaApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdC13ZWItZXh0ZW5z
aW9uLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdIYXNoLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK2NsYXNz
IFdlYlByb2Nlc3NUZXN0IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5XZWJQcm9jZXNzVGVzdCgp
IHsgfQorICAgIHZpcnR1YWwgYm9vbCBydW5UZXN0KGNvbnN0IGNoYXIqIHRlc3ROYW1lLCBXZWJL
aXRXZWJFeHRlbnNpb24qLCBHVmFyaWFudCogYXJncykgPSAwOworCisgICAgc3RhdGljIHZvaWQg
YWRkKGNvbnN0IFN0cmluZyYgdGVzdE5hbWUsIHN0ZDo6ZnVuY3Rpb248UGFzc093blB0cjxXZWJQ
cm9jZXNzVGVzdD4gKCk+KTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxXZWJQcm9jZXNzVGVzdD4g
Y3JlYXRlKGNvbnN0IFN0cmluZyYgdGVzdE5hbWUpOworfTsKKworI2RlZmluZSBSRUdJU1RFUl9U
RVNUKENsYXNzTmFtZSwgVGVzdE5hbWUpIFwKKyAgICBXZWJQcm9jZXNzVGVzdDo6YWRkKFN0cmlu
Zzo6ZnJvbVVURjgoVGVzdE5hbWUpLCBDbGFzc05hbWU6OmNyZWF0ZSkKKwpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1dlYlByb2Nlc3NUZXN0UnVubmVy
LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9XZWJQcm9jZXNzVGVz
dFJ1bm5lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGEzY2Q5NjU2MmMwZjAwYTIwODRlMGZjNTgwMmJjNjI1
YzFhYjFjMAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Mkd0ay9XZWJQcm9jZXNzVGVzdFJ1bm5lci5jcHAKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIldlYlByb2Nlc3NUZXN0UnVubmVyLmgiCisKKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9H
T3duUHRyLmg+CisKK1dlYlByb2Nlc3NUZXN0UnVubmVyOjpXZWJQcm9jZXNzVGVzdFJ1bm5lcigp
CisgICAgOiBtX21haW5Mb29wKGdfbWFpbl9sb29wX25ldygwLCBUUlVFKSkKKyAgICAsIG1fYnVz
KGFkb3B0R1JlZihnX3Rlc3RfZGJ1c19uZXcoR19URVNUX0RCVVNfTk9ORSkpKQoreworICAgIC8v
IFNhdmUgdGhlIERJU1BMQVkgZW52IHZhciB0byByZXN0b3JlIGl0IGFmdGVyIGNhbGxpbmcgZ190
ZXN0X2RidXNfdXAoKSB0aGF0IHVuc2V0cyBpdC4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNTYyMS4KKyAgICBjb25zdCBjaGFyKiBkaXNwbGF5
ID0gZ19nZXRlbnYoIkRJU1BMQVkiKTsKKyAgICBnX3Rlc3RfZGJ1c191cChtX2J1cy5nZXQoKSk7
CisgICAgZ19zZXRlbnYoIkRJU1BMQVkiLCBkaXNwbGF5LCBGQUxTRSk7CisgICAgbV9jb25uZWN0
aW9uID0gYWRvcHRHUmVmKGdfYnVzX2dldF9zeW5jKEdfQlVTX1RZUEVfU0VTU0lPTiwgMCwgMCkp
OworfQorCitXZWJQcm9jZXNzVGVzdFJ1bm5lcjo6fldlYlByb2Nlc3NUZXN0UnVubmVyKCkKK3sK
KyAgICBnX21haW5fbG9vcF91bnJlZihtX21haW5Mb29wKTsKKworICAgIC8vIGdfdGVzdF9kYnVz
X2Rvd24gd2FpdHMgdW50aWwgdGhlIGNvbm5lY3Rpb24gaXMgZnJlZWQsIHNvIHJlbGVhc2Ugb3Vy
IHJlZnMgZXhwbGljaXRseSBiZWZvcmUgY2FsbGluZyBpdC4KKyAgICBtX2Nvbm5lY3Rpb24gPSAw
OworICAgIG1fcHJveHkgPSAwOworICAgIGdfdGVzdF9kYnVzX2Rvd24obV9idXMuZ2V0KCkpOwor
fQorCit2b2lkIFdlYlByb2Nlc3NUZXN0UnVubmVyOjpwcm94eUNyZWF0ZWRDYWxsYmFjayhHT2Jq
ZWN0KiwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIFdlYlByb2Nlc3NUZXN0UnVubmVyKiB0ZXN0UnVu
bmVyKQoreworICAgIHRlc3RSdW5uZXItPm1fcHJveHkgPSBhZG9wdEdSZWYoZ19kYnVzX3Byb3h5
X25ld19maW5pc2gocmVzdWx0LCAwKSk7CisgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0UnVubmVy
LT5tX21haW5Mb29wKTsKK30KKworR0RCdXNQcm94eSogV2ViUHJvY2Vzc1Rlc3RSdW5uZXI6OnBy
b3h5KCkKK3sKKyAgICBpZiAobV9wcm94eSkKKyAgICAgICAgcmV0dXJuIG1fcHJveHkuZ2V0KCk7
CisKKyAgICBnX2RidXNfcHJveHlfbmV3KG1fY29ubmVjdGlvbi5nZXQoKSwgR19EQlVTX1BST1hZ
X0ZMQUdTX0RPX05PVF9BVVRPX1NUQVJULCAwLAorICAgICAgICAib3JnLndlYmtpdC5ndGsuV2Vi
UHJvY2Vzc1Rlc3QiLCAiL29yZy93ZWJraXQvZ3RrL1dlYlByb2Nlc3NUZXN0IiwgIm9yZy53ZWJr
aXQuZ3RrLldlYlByb2Nlc3NUZXN0IiwKKyAgICAgICAgMCwgcmVpbnRlcnByZXRfY2FzdDxHQXN5
bmNSZWFkeUNhbGxiYWNrPihXZWJQcm9jZXNzVGVzdFJ1bm5lcjo6cHJveHlDcmVhdGVkQ2FsbGJh
Y2spLCB0aGlzKTsKKyAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgZ19hc3Nl
cnQobV9wcm94eS5nZXQoKSk7CisKKyAgICByZXR1cm4gbV9wcm94eS5nZXQoKTsKK30KKwordm9p
ZCBXZWJQcm9jZXNzVGVzdFJ1bm5lcjo6b25OYW1lQXBwZWFyZWQoR0RCdXNDb25uZWN0aW9uKiwg
Y29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBXZWJQ
cm9jZXNzVGVzdFJ1bm5lciogdGVzdFJ1bm5lciA9IHN0YXRpY19jYXN0PFdlYlByb2Nlc3NUZXN0
UnVubmVyKj4odXNlckRhdGEpOworICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdFJ1bm5lci0+bV9t
YWluTG9vcCk7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzc1Rlc3RSdW5uZXI6Om9uTmFtZVZhbmlzaGVk
KEdEQnVzQ29ubmVjdGlvbiosIGNvbnN0IGNoYXIqIG5hbWUsIGdwb2ludGVyIHVzZXJEYXRhKQor
eworICAgIF9leGl0KDEpOworfQorCit2b2lkIFdlYlByb2Nlc3NUZXN0UnVubmVyOjp0ZXN0Rmlu
aXNoZWRDYWxsYmFjayhHREJ1c1Byb3h5KiBwcm94eSwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIFdl
YlByb2Nlc3NUZXN0UnVubmVyKiB0ZXN0UnVubmVyKQoreworICAgIEdSZWZQdHI8R1ZhcmlhbnQ+
IHJldHVyblZhbHVlID0gYWRvcHRHUmVmKGdfZGJ1c19wcm94eV9jYWxsX2ZpbmlzaChwcm94eSwg
cmVzdWx0LCAwKSk7CisgICAgZ19hc3NlcnQocmV0dXJuVmFsdWUuZ2V0KCkpOworICAgIGdib29s
ZWFuIHRlc3RSZXN1bHQ7CisgICAgZ192YXJpYW50X2dldChyZXR1cm5WYWx1ZS5nZXQoKSwgIihi
KSIsICZ0ZXN0UmVzdWx0KTsKKyAgICB0ZXN0UnVubmVyLT5maW5pc2hUZXN0KHRlc3RSZXN1bHQp
OworfQorCitib29sIFdlYlByb2Nlc3NUZXN0UnVubmVyOjpydW5UZXN0KGNvbnN0IGNoYXIqIHN1
aXRlTmFtZSwgY29uc3QgY2hhciogdGVzdE5hbWUsIEdWYXJpYW50KiBhcmdzKQoreworICAgIGdf
YXNzZXJ0KGdfdmFyaWFudF9pc19vZl90eXBlKGFyZ3MsIEdfVkFSSUFOVF9UWVBFX1ZBUkRJQ1Qp
KTsKKworICAgIHVuc2lnbmVkIHdhdGNoZXJJRCA9IGdfYnVzX3dhdGNoX25hbWVfb25fY29ubmVj
dGlvbihtX2Nvbm5lY3Rpb24uZ2V0KCksICJvcmcud2Via2l0Lmd0ay5XZWJQcm9jZXNzVGVzdCIs
IEdfQlVTX05BTUVfV0FUQ0hFUl9GTEFHU19OT05FLAorICAgICAgICBXZWJQcm9jZXNzVGVzdFJ1
bm5lcjo6b25OYW1lQXBwZWFyZWQsIFdlYlByb2Nlc3NUZXN0UnVubmVyOjpvbk5hbWVWYW5pc2hl
ZCwgdGhpcywgMCk7CisgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworCisgICAgbV90
ZXN0UmVzdWx0ID0gZmFsc2U7CisgICAgR093blB0cjxjaGFyPiB0ZXN0UGF0aChnX3N0cmR1cF9w
cmludGYoIiVzLyVzIiwgc3VpdGVOYW1lLCB0ZXN0TmFtZSkpOworICAgIGdfZGJ1c19wcm94eV9j
YWxsKAorICAgICAgICBwcm94eSgpLAorICAgICAgICAiUnVuVGVzdCIsCisgICAgICAgIGdfdmFy
aWFudF9uZXcoIihzQGF7c3Z9KSIsIHRlc3RQYXRoLmdldCgpLCBhcmdzKSwKKyAgICAgICAgR19E
QlVTX0NBTExfRkxBR1NfTk9ORSwKKyAgICAgICAgLTEsIDAsCisgICAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4oV2ViUHJvY2Vzc1Rlc3RSdW5uZXI6OnRlc3RGaW5p
c2hlZENhbGxiYWNrKSwKKyAgICAgICAgdGhpcyk7CisgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFp
bkxvb3ApOworICAgIGdfYnVzX3Vud2F0Y2hfbmFtZSh3YXRjaGVySUQpOworCisgICAgcmV0dXJu
IG1fdGVzdFJlc3VsdDsKK30KKwordm9pZCBXZWJQcm9jZXNzVGVzdFJ1bm5lcjo6ZmluaXNoVGVz
dChib29sIHJlc3VsdCkKK3sKKyAgICBtX3Rlc3RSZXN1bHQgPSByZXN1bHQ7CisgICAgZ19tYWlu
X2xvb3BfcXVpdChtX21haW5Mb29wKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Mkd0ay9XZWJQcm9jZXNzVGVzdFJ1bm5lci5oIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1dlYlByb2Nlc3NUZXN0UnVubmVyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYzQwZmE5NjE1YzY2MjMxZDU5ODRiNzFhM2YzODhkNDk3ZDU4YTA5MAotLS0gL2Rldi9udWxs
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9XZWJQcm9jZXNzVGVz
dFJ1bm5lci5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSWdh
bGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2lmbmRlZiBXZWJQcm9jZXNzVGVzdFJ1bm5lcl9oCisjZGVmaW5lIFdlYlByb2Nl
c3NUZXN0UnVubmVyX2gKKworI2luY2x1ZGUgPGdpby9naW8uaD4KKyNpbmNsdWRlIDx3ZWJraXQy
L3dlYmtpdDIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisKK2NsYXNzIFdl
YlByb2Nlc3NUZXN0UnVubmVyIHsKK3B1YmxpYzoKKyAgICBXZWJQcm9jZXNzVGVzdFJ1bm5lcigp
OworICAgIH5XZWJQcm9jZXNzVGVzdFJ1bm5lcigpOworCisgICAgYm9vbCBydW5UZXN0KGNvbnN0
IGNoYXIqIHN1aXRlTmFtZSwgY29uc3QgY2hhciogdGVzdE5hbWUsIEdWYXJpYW50KiBhcmdzKTsK
KworcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCBwcm94eUNyZWF0ZWRDYWxsYmFjayhHT2JqZWN0
KiwgR0FzeW5jUmVzdWx0KiwgV2ViUHJvY2Vzc1Rlc3RSdW5uZXIqKTsKKyAgICBzdGF0aWMgdm9p
ZCBvbk5hbWVBcHBlYXJlZChHREJ1c0Nvbm5lY3Rpb24qLCBjb25zdCBjaGFyKiwgY29uc3QgY2hh
ciosIGdwb2ludGVyKTsKKyAgICBzdGF0aWMgdm9pZCBvbk5hbWVWYW5pc2hlZChHREJ1c0Nvbm5l
Y3Rpb24qLCBjb25zdCBjaGFyKiwgZ3BvaW50ZXIpOworICAgIHN0YXRpYyB2b2lkIHRlc3RGaW5p
c2hlZENhbGxiYWNrKEdEQnVzUHJveHkqLCBHQXN5bmNSZXN1bHQqLCBXZWJQcm9jZXNzVGVzdFJ1
bm5lciopOworCisgICAgR0RCdXNQcm94eSogcHJveHkoKTsKKyAgICB2b2lkIGZpbmlzaFRlc3Qo
Ym9vbCByZXN1bHQpOworCisgICAgR01haW5Mb29wKiBtX21haW5Mb29wOworICAgIEdSZWZQdHI8
R1Rlc3REQnVzPiBtX2J1czsKKyAgICBHUmVmUHRyPEdEQnVzQ29ubmVjdGlvbj4gbV9jb25uZWN0
aW9uOworICAgIEdSZWZQdHI8R0RCdXNQcm94eT4gbV9wcm94eTsKKyAgICBib29sIG1fdGVzdFJl
c3VsdDsKK307CisKKyNlbmRpZiAvLyBXZWJQcm9jZXNzVGVzdFJ1bm5lcl9oCmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvV2ViVmlld1Rlc3QuY3BwIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1dlYlZpZXdUZXN0LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi44ZDZkZjU1MjFjYzVkMjFkZjEwZWFlMzY1NDkxZTg3MWM5NTgyOGYxCi0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1dlYlZpZXdU
ZXN0LmNwcApAQCAtMCwwICsxLDQ0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2Fs
aWEgUy5MLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDExIE1vdG9yb2xhIE1vYmlsaXR5
LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV2ViVmlld1Rlc3QuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTUmV0YWluUHRy
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HT3duUHRyR3RrLmg+CisKK1dlYlZpZXdUZXN0OjpXZWJW
aWV3VGVzdCgpCisgICAgOiBtX3dlYlZpZXcoV0VCS0lUX1dFQl9WSUVXKGdfb2JqZWN0X3JlZl9z
aW5rKHdlYmtpdF93ZWJfdmlld19uZXcoKSkpKQorICAgICwgbV9tYWluTG9vcChnX21haW5fbG9v
cF9uZXcoMCwgVFJVRSkpCisgICAgLCBtX3BhcmVudFdpbmRvdygwKQorICAgICwgbV9qYXZhc2Ny
aXB0UmVzdWx0KDApCisgICAgLCBtX3Jlc291cmNlRGF0YVNpemUoMCkKKyAgICAsIG1fc3VyZmFj
ZSgwKQoreworICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpF
Q1QobV93ZWJWaWV3KSk7Cit9CisKK1dlYlZpZXdUZXN0Ojp+V2ViVmlld1Rlc3QoKQoreworICAg
IGlmIChtX3BhcmVudFdpbmRvdykKKyAgICAgICAgZ3RrX3dpZGdldF9kZXN0cm95KG1fcGFyZW50
V2luZG93KTsKKyAgICBpZiAobV9qYXZhc2NyaXB0UmVzdWx0KQorICAgICAgICB3ZWJraXRfamF2
YXNjcmlwdF9yZXN1bHRfdW5yZWYobV9qYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBpZiAobV9zdXJm
YWNlKQorICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3kobV9zdXJmYWNlKTsKKyAgICBnX29i
amVjdF91bnJlZihtX3dlYlZpZXcpOworICAgIGdfbWFpbl9sb29wX3VucmVmKG1fbWFpbkxvb3Ap
OworfQorCit2b2lkIFdlYlZpZXdUZXN0Ojpsb2FkVVJJKGNvbnN0IGNoYXIqIHVyaSkKK3sKKyAg
ICBtX2FjdGl2ZVVSSSA9IHVyaTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkobV93ZWJW
aWV3LCB1cmkpOworfQorCit2b2lkIFdlYlZpZXdUZXN0Ojpsb2FkSHRtbChjb25zdCBjaGFyKiBo
dG1sLCBjb25zdCBjaGFyKiBiYXNlVVJJKQoreworICAgIGlmICghYmFzZVVSSSkKKyAgICAgICAg
bV9hY3RpdmVVUkkgPSAiYWJvdXQ6YmxhbmsiOworICAgIGVsc2UKKyAgICAgICAgbV9hY3RpdmVV
UkkgPSBiYXNlVVJJOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX2h0bWwobV93ZWJWaWV3LCBo
dG1sLCBiYXNlVVJJKTsKK30KKwordm9pZCBXZWJWaWV3VGVzdDo6bG9hZFBsYWluVGV4dChjb25z
dCBjaGFyKiBwbGFpblRleHQpCit7CisgICAgbV9hY3RpdmVVUkkgPSAiYWJvdXQ6YmxhbmsiOwor
ICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3BsYWluX3RleHQobV93ZWJWaWV3LCBwbGFpblRleHQp
OworfQorCit2b2lkIFdlYlZpZXdUZXN0Ojpsb2FkUmVxdWVzdChXZWJLaXRVUklSZXF1ZXN0KiBy
ZXF1ZXN0KQoreworICAgIG1fYWN0aXZlVVJJID0gd2Via2l0X3VyaV9yZXF1ZXN0X2dldF91cmko
cmVxdWVzdCk7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfcmVxdWVzdChtX3dlYlZpZXcsIHJl
cXVlc3QpOworfQorCit2b2lkIFdlYlZpZXdUZXN0Ojpsb2FkQWx0ZXJuYXRlSFRNTChjb25zdCBj
aGFyKiBodG1sLCBjb25zdCBjaGFyKiBjb250ZW50VVJJLCBjb25zdCBjaGFyKiBiYXNlVVJJKQor
eworICAgIG1fYWN0aXZlVVJJID0gY29udGVudFVSSTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9h
ZF9hbHRlcm5hdGVfaHRtbChtX3dlYlZpZXcsIGh0bWwsIGNvbnRlbnRVUkksIGJhc2VVUkkpOwor
fQorCit2b2lkIFdlYlZpZXdUZXN0Ojpnb0JhY2soKQoreworICAgIGlmICh3ZWJraXRfd2ViX3Zp
ZXdfY2FuX2dvX2JhY2sobV93ZWJWaWV3KSkgeworICAgICAgICBXZWJLaXRCYWNrRm9yd2FyZExp
c3QqIGxpc3QgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2JhY2tfZm9yd2FyZF9saXN0KG1fd2ViVmll
dyk7CisgICAgICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW0gPSB3ZWJraXRfYmFj
a19mb3J3YXJkX2xpc3RfZ2V0X250aF9pdGVtKGxpc3QsIC0xKTsKKyAgICAgICAgbV9hY3RpdmVV
UkkgPSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9nZXRfb3JpZ2luYWxfdXJpKGl0ZW0p
OworICAgIH0KKworICAgIC8vIENhbGwgZ29fYmFjayBldmVuIHdoZW4gY2FuX2dvX2JhY2sgcmV0
dXJucyBGQUxTRSB0byBjaGVjayBub3RoaW5nIGhhcHBlbnMuCisgICAgd2Via2l0X3dlYl92aWV3
X2dvX2JhY2sobV93ZWJWaWV3KTsKK30KKwordm9pZCBXZWJWaWV3VGVzdDo6Z29Gb3J3YXJkKCkK
K3sKKyAgICBpZiAod2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKG1fd2ViVmlldykpIHsK
KyAgICAgICAgV2ViS2l0QmFja0ZvcndhcmRMaXN0KiBsaXN0ID0gd2Via2l0X3dlYl92aWV3X2dl
dF9iYWNrX2ZvcndhcmRfbGlzdChtX3dlYlZpZXcpOworICAgICAgICBXZWJLaXRCYWNrRm9yd2Fy
ZExpc3RJdGVtKiBpdGVtID0gd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9udGhfaXRlbShs
aXN0LCAxKTsKKyAgICAgICAgbV9hY3RpdmVVUkkgPSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3Rf
aXRlbV9nZXRfb3JpZ2luYWxfdXJpKGl0ZW0pOworICAgIH0KKworICAgIC8vIENhbGwgZ29fZm9y
d2FyZCBldmVuIHdoZW4gY2FuX2dvX2ZvcndhcmQgcmV0dXJucyBGQUxTRSB0byBjaGVjayBub3Ro
aW5nIGhhcHBlbnMuCisgICAgd2Via2l0X3dlYl92aWV3X2dvX2ZvcndhcmQobV93ZWJWaWV3KTsK
K30KKwordm9pZCBXZWJWaWV3VGVzdDo6Z29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW0oV2ViS2l0QmFj
a0ZvcndhcmRMaXN0SXRlbSogaXRlbSkKK3sKKyAgICBtX2FjdGl2ZVVSSSA9IHdlYmtpdF9iYWNr
X2ZvcndhcmRfbGlzdF9pdGVtX2dldF9vcmlnaW5hbF91cmkoaXRlbSk7CisgICAgd2Via2l0X3dl
Yl92aWV3X2dvX3RvX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW0obV93ZWJWaWV3LCBpdGVtKTsKK30K
Kwordm9pZCBXZWJWaWV3VGVzdDo6cXVpdE1haW5Mb29wKCkKK3sKKyAgICBnX21haW5fbG9vcF9x
dWl0KG1fbWFpbkxvb3ApOworfQorCit2b2lkIFdlYlZpZXdUZXN0OjpxdWl0TWFpbkxvb3BBZnRl
clByb2Nlc3NpbmdQZW5kaW5nRXZlbnRzKCkKK3sKKyAgICB3aGlsZSAoZ3RrX2V2ZW50c19wZW5k
aW5nKCkpCisgICAgICAgIGd0a19tYWluX2l0ZXJhdGlvbigpOworICAgIHF1aXRNYWluTG9vcCgp
OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gcXVpdE1haW5Mb29wSWRsZUNhbGxiYWNrKFdlYlZpZXdU
ZXN0KiB0ZXN0KQoreworICAgIHRlc3QtPnF1aXRNYWluTG9vcCgpOworICAgIHJldHVybiBGQUxT
RTsKK30KKwordm9pZCBXZWJWaWV3VGVzdDo6d2FpdChkb3VibGUgc2Vjb25kcykKK3sKKyAgICBn
X3RpbWVvdXRfYWRkX3NlY29uZHMoc2Vjb25kcywgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVu
Yz4ocXVpdE1haW5Mb29wSWRsZUNhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19tYWluX2xvb3BfcnVu
KG1fbWFpbkxvb3ApOworfQorCitzdGF0aWMgdm9pZCBsb2FkQ2hhbmdlZChXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3LCBXZWJLaXRMb2FkRXZlbnQgbG9hZEV2ZW50LCBXZWJWaWV3VGVzdCogdGVzdCkK
K3sKKyAgICBpZiAobG9hZEV2ZW50ICE9IFdFQktJVF9MT0FEX0ZJTklTSEVEKQorICAgICAgICBy
ZXR1cm47CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKHdlYlZpZXcs
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGxvYWRDaGFuZ2VkKSwgdGVzdCk7CisgICAgZ19tYWlu
X2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKK30KKwordm9pZCBXZWJWaWV3VGVzdDo6d2Fp
dFVudGlsTG9hZEZpbmlzaGVkKCkKK3sKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywg
ImxvYWQtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sobG9hZENoYW5nZWQpLCB0aGlzKTsKKyAgICBnX21h
aW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIHRpdGxlQ2hhbmdlZChX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHUGFyYW1TcGVjKiwgV2ViVmlld1Rlc3QqIHRlc3QpCit7
CisgICAgaWYgKCF0ZXN0LT5tX2V4cGVjdGVkVGl0bGUuaXNOdWxsKCkgJiYgdGVzdC0+bV9leHBl
Y3RlZFRpdGxlICE9IHdlYmtpdF93ZWJfdmlld19nZXRfdGl0bGUod2ViVmlldykpCisgICAgICAg
IHJldHVybjsKKworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyh3ZWJW
aWV3LCByZWludGVycHJldF9jYXN0PHZvaWQqPih0aXRsZUNoYW5nZWQpLCB0ZXN0KTsKKyAgICBn
X21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworfQorCit2b2lkIFdlYlZpZXdUZXN0
Ojp3YWl0VW50aWxUaXRsZUNoYW5nZWRUbyhjb25zdCBjaGFyKiBleHBlY3RlZFRpdGxlKQorewor
ICAgIG1fZXhwZWN0ZWRUaXRsZSA9IGV4cGVjdGVkVGl0bGU7CisgICAgZ19zaWduYWxfY29ubmVj
dChtX3dlYlZpZXcsICJub3RpZnk6OnRpdGxlIiwgR19DQUxMQkFDSyh0aXRsZUNoYW5nZWQpLCB0
aGlzKTsKKyAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgbV9leHBlY3RlZFRp
dGxlID0gQ1N0cmluZygpOworfQorCit2b2lkIFdlYlZpZXdUZXN0Ojp3YWl0VW50aWxUaXRsZUNo
YW5nZWQoKQoreworICAgIHdhaXRVbnRpbFRpdGxlQ2hhbmdlZFRvKDApOworfQorCitzdGF0aWMg
Z2Jvb2xlYW4gcGFyZW50V2luZG93TWFwcGVkKEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudCos
IFdlYlZpZXdUZXN0KiB0ZXN0KQoreworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3Rf
YnlfZnVuYyh3aWRnZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHBhcmVudFdpbmRvd01hcHBl
ZCksIHRlc3QpOworICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7CisKKyAg
ICByZXR1cm4gRkFMU0U7Cit9CisKK3ZvaWQgV2ViVmlld1Rlc3Q6OnNob3dJbldpbmRvdyhHdGtX
aW5kb3dUeXBlIHdpbmRvd1R5cGUpCit7CisgICAgZ19hc3NlcnQoIW1fcGFyZW50V2luZG93KTsK
KyAgICBtX3BhcmVudFdpbmRvdyA9IGd0a193aW5kb3dfbmV3KHdpbmRvd1R5cGUpOworICAgIGd0
a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIobV9wYXJlbnRXaW5kb3cpLCBHVEtfV0lER0VU
KG1fd2ViVmlldykpOworICAgIGd0a193aWRnZXRfc2hvdyhHVEtfV0lER0VUKG1fd2ViVmlldykp
OworICAgIGd0a193aWRnZXRfc2hvdyhtX3BhcmVudFdpbmRvdyk7Cit9CisKK3ZvaWQgV2ViVmll
d1Rlc3Q6OnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZChHdGtXaW5kb3dUeXBlIHdpbmRv
d1R5cGUpCit7CisgICAgZ19hc3NlcnQoIW1fcGFyZW50V2luZG93KTsKKyAgICBtX3BhcmVudFdp
bmRvdyA9IGd0a193aW5kb3dfbmV3KHdpbmRvd1R5cGUpOworICAgIGd0a19jb250YWluZXJfYWRk
KEdUS19DT05UQUlORVIobV9wYXJlbnRXaW5kb3cpLCBHVEtfV0lER0VUKG1fd2ViVmlldykpOwor
ICAgIGd0a193aWRnZXRfc2hvdyhHVEtfV0lER0VUKG1fd2ViVmlldykpOworCisgICAgZ19zaWdu
YWxfY29ubmVjdChtX3BhcmVudFdpbmRvdywgIm1hcC1ldmVudCIsIEdfQ0FMTEJBQ0socGFyZW50
V2luZG93TWFwcGVkKSwgdGhpcyk7CisgICAgZ3RrX3dpZGdldF9zaG93KG1fcGFyZW50V2luZG93
KTsKKyAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Cit9CisKK3ZvaWQgV2ViVmlld1Rl
c3Q6OnJlc2l6ZVZpZXcoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIEd0a0FsbG9jYXRp
b24gYWxsb2NhdGlvbjsKKyAgICBndGtfd2lkZ2V0X2dldF9hbGxvY2F0aW9uKEdUS19XSURHRVQo
bV93ZWJWaWV3KSwgJmFsbG9jYXRpb24pOworICAgIGlmICh3aWR0aCAhPSAtMSkKKyAgICAgICAg
YWxsb2NhdGlvbi53aWR0aCA9IHdpZHRoOworICAgIGlmIChoZWlnaHQgIT0gLTEpCisgICAgICAg
IGFsbG9jYXRpb24uaGVpZ2h0ID0gaGVpZ2h0OworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0
ZShHVEtfV0lER0VUKG1fd2ViVmlldyksICZhbGxvY2F0aW9uKTsKK30KKwordm9pZCBXZWJWaWV3
VGVzdDo6c2VsZWN0QWxsKCkKK3sKKyAgICB3ZWJraXRfd2ViX3ZpZXdfZXhlY3V0ZV9lZGl0aW5n
X2NvbW1hbmQobV93ZWJWaWV3LCAiU2VsZWN0QWxsIik7Cit9CisKK3N0YXRpYyB2b2lkIHJlc291
cmNlR2V0RGF0YUNhbGxiYWNrKEdPYmplY3QqIG9iamVjdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQs
IGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIHNpemVfdCBkYXRhU2l6ZTsKKyAgICBHT3duUHRy
PEdFcnJvcj4gZXJyb3I7CisgICAgdW5zaWduZWQgY2hhciogZGF0YSA9IHdlYmtpdF93ZWJfcmVz
b3VyY2VfZ2V0X2RhdGFfZmluaXNoKFdFQktJVF9XRUJfUkVTT1VSQ0Uob2JqZWN0KSwgcmVzdWx0
LCAmZGF0YVNpemUsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQoZGF0YSk7CisKKyAg
ICBXZWJWaWV3VGVzdCogdGVzdCA9IHN0YXRpY19jYXN0PFdlYlZpZXdUZXN0Kj4odXNlckRhdGEp
OworICAgIHRlc3QtPm1fcmVzb3VyY2VEYXRhLnNldChyZWludGVycHJldF9jYXN0PGNoYXIqPihk
YXRhKSk7CisgICAgdGVzdC0+bV9yZXNvdXJjZURhdGFTaXplID0gZGF0YVNpemU7CisgICAgZ19t
YWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKK30KKworY29uc3QgY2hhciogV2ViVmll
d1Rlc3Q6Om1haW5SZXNvdXJjZURhdGEoc2l6ZV90JiBtYWluUmVzb3VyY2VEYXRhU2l6ZSkKK3sK
KyAgICBtX3Jlc291cmNlRGF0YVNpemUgPSAwOworICAgIG1fcmVzb3VyY2VEYXRhLmNsZWFyKCk7
CisgICAgV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlID0gd2Via2l0X3dlYl92aWV3X2dldF9t
YWluX3Jlc291cmNlKG1fd2ViVmlldyk7CisgICAgZ19hc3NlcnQocmVzb3VyY2UpOworCisgICAg
d2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZGF0YShyZXNvdXJjZSwgMCwgcmVzb3VyY2VHZXREYXRh
Q2FsbGJhY2ssIHRoaXMpOworICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKworICAg
IG1haW5SZXNvdXJjZURhdGFTaXplID0gbV9yZXNvdXJjZURhdGFTaXplOworICAgIHJldHVybiBt
X3Jlc291cmNlRGF0YS5nZXQoKTsKK30KKwordm9pZCBXZWJWaWV3VGVzdDo6bW91c2VNb3ZlVG8o
aW50IHgsIGludCB5LCB1bnNpZ25lZCBtb3VzZU1vZGlmaWVycykKK3sKKyAgICBnX2Fzc2VydCht
X3BhcmVudFdpbmRvdyk7CisgICAgR3RrV2lkZ2V0KiB2aWV3V2lkZ2V0ID0gR1RLX1dJREdFVCht
X3dlYlZpZXcpOworICAgIGdfYXNzZXJ0KGd0a193aWRnZXRfZ2V0X3JlYWxpemVkKHZpZXdXaWRn
ZXQpKTsKKworICAgIEdPd25QdHI8R2RrRXZlbnQ+IGV2ZW50KGdka19ldmVudF9uZXcoR0RLX01P
VElPTl9OT1RJRlkpKTsKKyAgICBldmVudC0+bW90aW9uLnggPSB4OworICAgIGV2ZW50LT5tb3Rp
b24ueSA9IHk7CisKKyAgICBldmVudC0+bW90aW9uLnRpbWUgPSBHREtfQ1VSUkVOVF9USU1FOwor
ICAgIGV2ZW50LT5tb3Rpb24ud2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KHZpZXdXaWRn
ZXQpOworICAgIGdfb2JqZWN0X3JlZihldmVudC0+bW90aW9uLndpbmRvdyk7CisgICAgZXZlbnQt
Pm1vdGlvbi5kZXZpY2UgPSBnZGtfZGV2aWNlX21hbmFnZXJfZ2V0X2NsaWVudF9wb2ludGVyKGdk
a19kaXNwbGF5X2dldF9kZXZpY2VfbWFuYWdlcihndGtfd2lkZ2V0X2dldF9kaXNwbGF5KHZpZXdX
aWRnZXQpKSk7CisgICAgZXZlbnQtPm1vdGlvbi5zdGF0ZSA9IG1vdXNlTW9kaWZpZXJzOworICAg
IGV2ZW50LT5tb3Rpb24uYXhlcyA9IDA7CisKKyAgICBpbnQgeFJvb3QsIHlSb290OworICAgIGdk
a193aW5kb3dfZ2V0X3Jvb3RfY29vcmRzKGd0a193aWRnZXRfZ2V0X3dpbmRvdyh2aWV3V2lkZ2V0
KSwgeCwgeSwgJnhSb290LCAmeVJvb3QpOworICAgIGV2ZW50LT5tb3Rpb24ueF9yb290ID0geFJv
b3Q7CisgICAgZXZlbnQtPm1vdGlvbi55X3Jvb3QgPSB5Um9vdDsKKyAgICBndGtfbWFpbl9kb19l
dmVudChldmVudC5nZXQoKSk7Cit9CisKK3ZvaWQgV2ViVmlld1Rlc3Q6OmNsaWNrTW91c2VCdXR0
b24oaW50IHgsIGludCB5LCB1bnNpZ25lZCBidXR0b24sIHVuc2lnbmVkIG1vdXNlTW9kaWZpZXJz
KQoreworICAgIGRvTW91c2VCdXR0b25FdmVudChHREtfQlVUVE9OX1BSRVNTLCB4LCB5LCBidXR0
b24sIG1vdXNlTW9kaWZpZXJzKTsKKyAgICBkb01vdXNlQnV0dG9uRXZlbnQoR0RLX0JVVFRPTl9S
RUxFQVNFLCB4LCB5LCBidXR0b24sIG1vdXNlTW9kaWZpZXJzKTsKK30KKwordm9pZCBXZWJWaWV3
VGVzdDo6a2V5U3Ryb2tlKHVuc2lnbmVkIGtleVZhbCwgdW5zaWduZWQga2V5TW9kaWZpZXJzKQor
eworICAgIGdfYXNzZXJ0KG1fcGFyZW50V2luZG93KTsKKyAgICBHdGtXaWRnZXQqIHZpZXdXaWRn
ZXQgPSBHVEtfV0lER0VUKG1fd2ViVmlldyk7CisgICAgZ19hc3NlcnQoZ3RrX3dpZGdldF9nZXRf
cmVhbGl6ZWQodmlld1dpZGdldCkpOworCisgICAgR093blB0cjxHZGtFdmVudD4gZXZlbnQoZ2Rr
X2V2ZW50X25ldyhHREtfS0VZX1BSRVNTKSk7CisgICAgZXZlbnQtPmtleS5rZXl2YWwgPSBrZXlW
YWw7CisKKyAgICBldmVudC0+a2V5LnRpbWUgPSBHREtfQ1VSUkVOVF9USU1FOworICAgIGV2ZW50
LT5rZXkud2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KHZpZXdXaWRnZXQpOworICAgIGdf
b2JqZWN0X3JlZihldmVudC0+a2V5LndpbmRvdyk7CisgICAgZ2RrX2V2ZW50X3NldF9kZXZpY2Uo
ZXZlbnQuZ2V0KCksIGdka19kZXZpY2VfbWFuYWdlcl9nZXRfY2xpZW50X3BvaW50ZXIoZ2RrX2Rp
c3BsYXlfZ2V0X2RldmljZV9tYW5hZ2VyKGd0a193aWRnZXRfZ2V0X2Rpc3BsYXkodmlld1dpZGdl
dCkpKSk7CisgICAgZXZlbnQtPmtleS5zdGF0ZSA9IGtleU1vZGlmaWVyczsKKworICAgIC8vIFdo
ZW4gc3ludGhlc2l6aW5nIGFuIGV2ZW50LCBhbiBpbnZhbGlkIGhhcmR3YXJlX2tleWNvZGUgdmFs
dWUgY2FuIGNhdXNlIGl0IHRvIGJlIGJhZGx5IHByb2Nlc3NlZCBieSBHVEsrLgorICAgIEdPd25Q
dHI8R2RrS2V5bWFwS2V5PiBrZXlzOworICAgIGludCBrZXlzQ291bnQ7CisgICAgaWYgKGdka19r
ZXltYXBfZ2V0X2VudHJpZXNfZm9yX2tleXZhbChnZGtfa2V5bWFwX2dldF9kZWZhdWx0KCksIGtl
eVZhbCwgJmtleXMub3V0UHRyKCksICZrZXlzQ291bnQpKQorICAgICAgICBldmVudC0+a2V5Lmhh
cmR3YXJlX2tleWNvZGUgPSBrZXlzLmdldCgpWzBdLmtleWNvZGU7CisKKyAgICBndGtfbWFpbl9k
b19ldmVudChldmVudC5nZXQoKSk7CisgICAgZXZlbnQtPmtleS50eXBlID0gR0RLX0tFWV9SRUxF
QVNFOworICAgIGd0a19tYWluX2RvX2V2ZW50KGV2ZW50LmdldCgpKTsKK30KKwordm9pZCBXZWJW
aWV3VGVzdDo6ZG9Nb3VzZUJ1dHRvbkV2ZW50KEdka0V2ZW50VHlwZSBldmVudFR5cGUsIGludCB4
LCBpbnQgeSwgdW5zaWduZWQgYnV0dG9uLCB1bnNpZ25lZCBtb3VzZU1vZGlmaWVycykKK3sKKyAg
ICBnX2Fzc2VydChtX3BhcmVudFdpbmRvdyk7CisgICAgR3RrV2lkZ2V0KiB2aWV3V2lkZ2V0ID0g
R1RLX1dJREdFVChtX3dlYlZpZXcpOworICAgIGdfYXNzZXJ0KGd0a193aWRnZXRfZ2V0X3JlYWxp
emVkKHZpZXdXaWRnZXQpKTsKKworICAgIEdPd25QdHI8R2RrRXZlbnQ+IGV2ZW50KGdka19ldmVu
dF9uZXcoZXZlbnRUeXBlKSk7CisgICAgZXZlbnQtPmJ1dHRvbi53aW5kb3cgPSBndGtfd2lkZ2V0
X2dldF93aW5kb3codmlld1dpZGdldCk7CisgICAgZ19vYmplY3RfcmVmKGV2ZW50LT5idXR0b24u
d2luZG93KTsKKworICAgIGV2ZW50LT5idXR0b24udGltZSA9IEdES19DVVJSRU5UX1RJTUU7Cisg
ICAgZXZlbnQtPmJ1dHRvbi54ID0geDsKKyAgICBldmVudC0+YnV0dG9uLnkgPSB5OworICAgIGV2
ZW50LT5idXR0b24uYXhlcyA9IDA7CisgICAgZXZlbnQtPmJ1dHRvbi5zdGF0ZSA9IG1vdXNlTW9k
aWZpZXJzOworICAgIGV2ZW50LT5idXR0b24uYnV0dG9uID0gYnV0dG9uOworCisgICAgZXZlbnQt
PmJ1dHRvbi5kZXZpY2UgPSBnZGtfZGV2aWNlX21hbmFnZXJfZ2V0X2NsaWVudF9wb2ludGVyKGdk
a19kaXNwbGF5X2dldF9kZXZpY2VfbWFuYWdlcihndGtfd2lkZ2V0X2dldF9kaXNwbGF5KHZpZXdX
aWRnZXQpKSk7CisKKyAgICBpbnQgeFJvb3QsIHlSb290OworICAgIGdka193aW5kb3dfZ2V0X3Jv
b3RfY29vcmRzKGd0a193aWRnZXRfZ2V0X3dpbmRvdyh2aWV3V2lkZ2V0KSwgeCwgeSwgJnhSb290
LCAmeVJvb3QpOworICAgIGV2ZW50LT5idXR0b24ueF9yb290ID0geFJvb3Q7CisgICAgZXZlbnQt
PmJ1dHRvbi55X3Jvb3QgPSB5Um9vdDsKKyAgICBndGtfbWFpbl9kb19ldmVudChldmVudC5nZXQo
KSk7Cit9CisKK3N0YXRpYyB2b2lkIHJ1bkphdmFTY3JpcHRSZWFkeUNhbGxiYWNrKEdPYmplY3Qq
LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgV2ViVmlld1Rlc3QqIHRlc3QpCit7CisgICAgdGVzdC0+
bV9qYXZhc2NyaXB0UmVzdWx0ID0gd2Via2l0X3dlYl92aWV3X3J1bl9qYXZhc2NyaXB0X2Zpbmlz
aCh0ZXN0LT5tX3dlYlZpZXcsIHJlc3VsdCwgdGVzdC0+bV9qYXZhc2NyaXB0RXJyb3IpOworICAg
IGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIHJ1
bkphdmFTY3JpcHRGcm9tR1Jlc291cmNlUmVhZHlDYWxsYmFjayhHT2JqZWN0KiwgR0FzeW5jUmVz
dWx0KiByZXN1bHQsIFdlYlZpZXdUZXN0KiB0ZXN0KQoreworICAgIHRlc3QtPm1famF2YXNjcmlw
dFJlc3VsdCA9IHdlYmtpdF93ZWJfdmlld19ydW5famF2YXNjcmlwdF9mcm9tX2dyZXNvdXJjZV9m
aW5pc2godGVzdC0+bV93ZWJWaWV3LCByZXN1bHQsIHRlc3QtPm1famF2YXNjcmlwdEVycm9yKTsK
KyAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworfQorCitXZWJLaXRKYXZh
c2NyaXB0UmVzdWx0KiBXZWJWaWV3VGVzdDo6cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlz
aGVkKGNvbnN0IGNoYXIqIGphdmFzY3JpcHQsIEdFcnJvcioqIGVycm9yKQoreworICAgIGlmICht
X2phdmFzY3JpcHRSZXN1bHQpCisgICAgICAgIHdlYmtpdF9qYXZhc2NyaXB0X3Jlc3VsdF91bnJl
ZihtX2phdmFzY3JpcHRSZXN1bHQpOworICAgIG1famF2YXNjcmlwdFJlc3VsdCA9IDA7CisgICAg
bV9qYXZhc2NyaXB0RXJyb3IgPSBlcnJvcjsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfcnVuX2phdmFz
Y3JpcHQobV93ZWJWaWV3LCBqYXZhc2NyaXB0LCAwLCByZWludGVycHJldF9jYXN0PEdBc3luY1Jl
YWR5Q2FsbGJhY2s+KHJ1bkphdmFTY3JpcHRSZWFkeUNhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19t
YWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworCisgICAgcmV0dXJuIG1famF2YXNjcmlwdFJlc3Vs
dDsKK30KKworV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCogV2ViVmlld1Rlc3Q6OnJ1bkphdmFTY3Jp
cHRGcm9tR1Jlc291cmNlQW5kV2FpdFVudGlsRmluaXNoZWQoY29uc3QgY2hhciogcmVzb3VyY2Us
IEdFcnJvcioqIGVycm9yKQoreworICAgIGlmIChtX2phdmFzY3JpcHRSZXN1bHQpCisgICAgICAg
IHdlYmtpdF9qYXZhc2NyaXB0X3Jlc3VsdF91bnJlZihtX2phdmFzY3JpcHRSZXN1bHQpOworICAg
IG1famF2YXNjcmlwdFJlc3VsdCA9IDA7CisgICAgbV9qYXZhc2NyaXB0RXJyb3IgPSBlcnJvcjsK
KyAgICB3ZWJraXRfd2ViX3ZpZXdfcnVuX2phdmFzY3JpcHRfZnJvbV9ncmVzb3VyY2UobV93ZWJW
aWV3LCByZXNvdXJjZSwgMCwgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihy
dW5KYXZhU2NyaXB0RnJvbUdSZXNvdXJjZVJlYWR5Q2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX21h
aW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisKKyAgICByZXR1cm4gbV9qYXZhc2NyaXB0UmVzdWx0
OworfQorCitzdGF0aWMgY2hhcioganNWYWx1ZVRvQ1N0cmluZyhKU0dsb2JhbENvbnRleHRSZWYg
Y29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKK3sKKyAgICBnX2Fzc2VydCh2YWx1ZSk7CisgICAg
Z19hc3NlcnQoSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIHZhbHVlKSk7CisKKyAgICBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gc3RyaW5nVmFsdWUoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHko
Y29udGV4dCwgdmFsdWUsIDApKTsKKyAgICBnX2Fzc2VydChzdHJpbmdWYWx1ZSk7CisKKyAgICBz
aXplX3QgY1N0cmluZ0xlbmd0aCA9IEpTU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShz
dHJpbmdWYWx1ZS5nZXQoKSk7CisgICAgY2hhciogY1N0cmluZyA9IHN0YXRpY19jYXN0PGNoYXIq
PihnX21hbGxvYyhjU3RyaW5nTGVuZ3RoKSk7CisgICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhz
dHJpbmdWYWx1ZS5nZXQoKSwgY1N0cmluZywgY1N0cmluZ0xlbmd0aCk7CisgICAgcmV0dXJuIGNT
dHJpbmc7Cit9CisKK2NoYXIqIFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5n
KFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQpCit7CisgICAgSlNHbG9i
YWxDb250ZXh0UmVmIGNvbnRleHQgPSB3ZWJraXRfamF2YXNjcmlwdF9yZXN1bHRfZ2V0X2dsb2Jh
bF9jb250ZXh0KGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KGNvbnRleHQpOworICAg
IHJldHVybiBqc1ZhbHVlVG9DU3RyaW5nKGNvbnRleHQsIHdlYmtpdF9qYXZhc2NyaXB0X3Jlc3Vs
dF9nZXRfdmFsdWUoamF2YXNjcmlwdFJlc3VsdCkpOworfQorCitkb3VibGUgV2ViVmlld1Rlc3Q6
OmphdmFzY3JpcHRSZXN1bHRUb051bWJlcihXZWJLaXRKYXZhc2NyaXB0UmVzdWx0KiBqYXZhc2Ny
aXB0UmVzdWx0KQoreworICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0ID0gd2Via2l0X2ph
dmFzY3JpcHRfcmVzdWx0X2dldF9nbG9iYWxfY29udGV4dChqYXZhc2NyaXB0UmVzdWx0KTsKKyAg
ICBnX2Fzc2VydChjb250ZXh0KTsKKyAgICBKU1ZhbHVlUmVmIHZhbHVlID0gd2Via2l0X2phdmFz
Y3JpcHRfcmVzdWx0X2dldF92YWx1ZShqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydCh2
YWx1ZSk7CisgICAgZ19hc3NlcnQoSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIHZhbHVlKSk7CisK
KyAgICByZXR1cm4gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIHZhbHVlLCAwKTsKK30KKworYm9v
bCBXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQm9vbGVhbihXZWJLaXRKYXZhc2NyaXB0
UmVzdWx0KiBqYXZhc2NyaXB0UmVzdWx0KQoreworICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250
ZXh0ID0gd2Via2l0X2phdmFzY3JpcHRfcmVzdWx0X2dldF9nbG9iYWxfY29udGV4dChqYXZhc2Ny
aXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydChjb250ZXh0KTsKKyAgICBKU1ZhbHVlUmVmIHZhbHVl
ID0gd2Via2l0X2phdmFzY3JpcHRfcmVzdWx0X2dldF92YWx1ZShqYXZhc2NyaXB0UmVzdWx0KTsK
KyAgICBnX2Fzc2VydCh2YWx1ZSk7CisgICAgZ19hc3NlcnQoSlNWYWx1ZUlzQm9vbGVhbihjb250
ZXh0LCB2YWx1ZSkpOworCisgICAgcmV0dXJuIEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgdmFs
dWUpOworfQorCitib29sIFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0SXNOdWxsKFdlYktp
dEphdmFzY3JpcHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQpCit7CisgICAgSlNHbG9iYWxDb250
ZXh0UmVmIGNvbnRleHQgPSB3ZWJraXRfamF2YXNjcmlwdF9yZXN1bHRfZ2V0X2dsb2JhbF9jb250
ZXh0KGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KGNvbnRleHQpOworICAgIEpTVmFs
dWVSZWYgdmFsdWUgPSB3ZWJraXRfamF2YXNjcmlwdF9yZXN1bHRfZ2V0X3ZhbHVlKGphdmFzY3Jp
cHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KHZhbHVlKTsKKworICAgIHJldHVybiBKU1ZhbHVlSXNO
dWxsKGNvbnRleHQsIHZhbHVlKTsKK30KKworYm9vbCBXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJl
c3VsdElzVW5kZWZpbmVkKFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQp
Cit7CisgICAgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQgPSB3ZWJraXRfamF2YXNjcmlwdF9y
ZXN1bHRfZ2V0X2dsb2JhbF9jb250ZXh0KGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0
KGNvbnRleHQpOworICAgIEpTVmFsdWVSZWYgdmFsdWUgPSB3ZWJraXRfamF2YXNjcmlwdF9yZXN1
bHRfZ2V0X3ZhbHVlKGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KHZhbHVlKTsKKwor
ICAgIHJldHVybiBKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwgdmFsdWUpOworfQorCitzdGF0
aWMgdm9pZCBvblNuYXBzaG90UmVhZHkoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIEdBc3luY1Jl
c3VsdCogcmVzLCBXZWJWaWV3VGVzdCogdGVzdCkKK3sKKyAgICBHT3duUHRyPEdFcnJvcj4gZXJy
b3I7CisgICAgdGVzdC0+bV9zdXJmYWNlID0gd2Via2l0X3dlYl92aWV3X2dldF9zbmFwc2hvdF9m
aW5pc2god2ViX3ZpZXcsIHJlcywgJmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fzc2VydCghdGVz
dC0+bV9zdXJmYWNlIHx8ICFlcnJvci5nZXQoKSk7CisgICAgaWYgKGVycm9yKQorICAgICAgICBn
X2Fzc2VydF9lcnJvcihlcnJvci5nZXQoKSwgV0VCS0lUX1NOQVBTSE9UX0VSUk9SLCBXRUJLSVRf
U05BUFNIT1RfRVJST1JfRkFJTEVEX1RPX0NSRUFURSk7CisgICAgdGVzdC0+cXVpdE1haW5Mb29w
KCk7Cit9CisKK2NhaXJvX3N1cmZhY2VfdCogV2ViVmlld1Rlc3Q6OmdldFNuYXBzaG90QW5kV2Fp
dFVudGlsUmVhZHkoV2ViS2l0U25hcHNob3RSZWdpb24gcmVnaW9uLCBXZWJLaXRTbmFwc2hvdE9w
dGlvbnMgb3B0aW9ucykKK3sKKyAgICBpZiAobV9zdXJmYWNlKQorICAgICAgICBjYWlyb19zdXJm
YWNlX2Rlc3Ryb3kobV9zdXJmYWNlKTsKKyAgICBtX3N1cmZhY2UgPSAwOworICAgIHdlYmtpdF93
ZWJfdmlld19nZXRfc25hcHNob3QobV93ZWJWaWV3LCByZWdpb24sIG9wdGlvbnMsIDAsIHJlaW50
ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4ob25TbmFwc2hvdFJlYWR5KSwgdGhpcyk7
CisgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgIHJldHVybiBtX3N1cmZhY2U7
Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvV2Vi
Vmlld1Rlc3QuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9XZWJWaWV3
VGVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmFlZWIwNjJjMzY4OTY3Yzg3MmU3YzBkYmVhYzg4MjlhY2I5NWQ4
MzgKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJH
dGsvV2ViVmlld1Rlc3QuaApAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIElnYWxpYSBTLkwuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTEgTW90b3JvbGEg
TW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViVmlld1Rlc3Rf
aAorI2RlZmluZSBXZWJWaWV3VGVzdF9oCisKKyNpbmNsdWRlICJUZXN0TWFpbi5oIgorI2luY2x1
ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwor
Y2xhc3MgV2ViVmlld1Rlc3Q6IHB1YmxpYyBUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJf
VEVTVF9GSVhUVVJFKFdlYlZpZXdUZXN0KTsKKyAgICBXZWJWaWV3VGVzdCgpOworICAgIHZpcnR1
YWwgfldlYlZpZXdUZXN0KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFVSSShjb25zdCBjaGFy
KiB1cmkpOworICAgIHZpcnR1YWwgdm9pZCBsb2FkSHRtbChjb25zdCBjaGFyKiBodG1sLCBjb25z
dCBjaGFyKiBiYXNlVVJJKTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFBsYWluVGV4dChjb25zdCBj
aGFyKiBwbGFpblRleHQpOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVxdWVzdChXZWJLaXRVUklS
ZXF1ZXN0Kik7CisgICAgdm9pZCBsb2FkQWx0ZXJuYXRlSFRNTChjb25zdCBjaGFyKiBodG1sLCBj
b25zdCBjaGFyKiBjb250ZW50VVJJLCBjb25zdCBjaGFyKiBiYXNlVVJJKTsKKyAgICB2b2lkIGdv
QmFjaygpOworICAgIHZvaWQgZ29Gb3J3YXJkKCk7CisgICAgdm9pZCBnb1RvQmFja0ZvcndhcmRM
aXN0SXRlbShXZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtKik7CisKKyAgICB2b2lkIHF1aXRNYWlu
TG9vcCgpOworICAgIHZvaWQgcXVpdE1haW5Mb29wQWZ0ZXJQcm9jZXNzaW5nUGVuZGluZ0V2ZW50
cygpOworICAgIHZvaWQgd2FpdChkb3VibGUgc2Vjb25kcyk7CisgICAgdm9pZCB3YWl0VW50aWxM
b2FkRmluaXNoZWQoKTsKKyAgICB2b2lkIHdhaXRVbnRpbFRpdGxlQ2hhbmdlZFRvKGNvbnN0IGNo
YXIqIGV4cGVjdGVkVGl0bGUpOworICAgIHZvaWQgd2FpdFVudGlsVGl0bGVDaGFuZ2VkKCk7Cisg
ICAgdm9pZCBzaG93SW5XaW5kb3coR3RrV2luZG93VHlwZSA9IEdUS19XSU5ET1dfUE9QVVApOwor
ICAgIHZvaWQgc2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKEd0a1dpbmRvd1R5cGUgPSBH
VEtfV0lORE9XX1BPUFVQKTsKKyAgICB2b2lkIHJlc2l6ZVZpZXcoaW50IHdpZHRoLCBpbnQgaGVp
Z2h0KTsKKyAgICB2b2lkIHNlbGVjdEFsbCgpOworICAgIGNvbnN0IGNoYXIqIG1haW5SZXNvdXJj
ZURhdGEoc2l6ZV90JiBtYWluUmVzb3VyY2VEYXRhU2l6ZSk7CisKKyAgICB2b2lkIG1vdXNlTW92
ZVRvKGludCB4LCBpbnQgeSwgdW5zaWduZWQgbW91c2VNb2RpZmllcnMgPSAwKTsKKyAgICB2b2lk
IGNsaWNrTW91c2VCdXR0b24oaW50IHgsIGludCB5LCB1bnNpZ25lZCBidXR0b24gPSAxLCB1bnNp
Z25lZCBtb3VzZU1vZGlmaWVycyA9IDApOworICAgIHZvaWQga2V5U3Ryb2tlKHVuc2lnbmVkIGtl
eVZhbCwgdW5zaWduZWQga2V5TW9kaWZpZXJzID0gMCk7CisKKyAgICBXZWJLaXRKYXZhc2NyaXB0
UmVzdWx0KiBydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoY29uc3QgY2hhciogamF2
YXNjcmlwdCwgR0Vycm9yKiopOworICAgIFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIHJ1bkphdmFT
Y3JpcHRGcm9tR1Jlc291cmNlQW5kV2FpdFVudGlsRmluaXNoZWQoY29uc3QgY2hhciogcmVzb3Vy
Y2UsIEdFcnJvcioqKTsKKworICAgIC8vIEphdmFzY3JpcHQgcmVzdWx0IGhlbHBlcnMuCisgICAg
c3RhdGljIGNoYXIqIGphdmFzY3JpcHRSZXN1bHRUb0NTdHJpbmcoV2ViS2l0SmF2YXNjcmlwdFJl
c3VsdCopOworICAgIHN0YXRpYyBkb3VibGUgamF2YXNjcmlwdFJlc3VsdFRvTnVtYmVyKFdlYktp
dEphdmFzY3JpcHRSZXN1bHQqKTsKKyAgICBzdGF0aWMgYm9vbCBqYXZhc2NyaXB0UmVzdWx0VG9C
b29sZWFuKFdlYktpdEphdmFzY3JpcHRSZXN1bHQqKTsKKyAgICBzdGF0aWMgYm9vbCBqYXZhc2Ny
aXB0UmVzdWx0SXNOdWxsKFdlYktpdEphdmFzY3JpcHRSZXN1bHQqKTsKKyAgICBzdGF0aWMgYm9v
bCBqYXZhc2NyaXB0UmVzdWx0SXNVbmRlZmluZWQoV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCopOwor
CisgICAgY2Fpcm9fc3VyZmFjZV90KiBnZXRTbmFwc2hvdEFuZFdhaXRVbnRpbFJlYWR5KFdlYktp
dFNuYXBzaG90UmVnaW9uLCBXZWJLaXRTbmFwc2hvdE9wdGlvbnMpOworCisgICAgV2ViS2l0V2Vi
VmlldyogbV93ZWJWaWV3OworICAgIEdNYWluTG9vcCogbV9tYWluTG9vcDsKKyAgICBDU3RyaW5n
IG1fYWN0aXZlVVJJOworICAgIEd0a1dpZGdldCogbV9wYXJlbnRXaW5kb3c7CisgICAgQ1N0cmlu
ZyBtX2V4cGVjdGVkVGl0bGU7CisgICAgV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCogbV9qYXZhc2Ny
aXB0UmVzdWx0OworICAgIEdFcnJvcioqIG1famF2YXNjcmlwdEVycm9yOworICAgIEdPd25QdHI8
Y2hhcj4gbV9yZXNvdXJjZURhdGE7CisgICAgc2l6ZV90IG1fcmVzb3VyY2VEYXRhU2l6ZTsKKyAg
ICBjYWlyb19zdXJmYWNlX3QqIG1fc3VyZmFjZTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGRvTW91
c2VCdXR0b25FdmVudChHZGtFdmVudFR5cGUsIGludCwgaW50LCB1bnNpZ25lZCwgdW5zaWduZWQp
OworfTsKKworI2VuZGlmIC8vIFdlYlZpZXdUZXN0X2gKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9yZXNvdXJjZXMvbGluay10aXRsZS5qcyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9yZXNvdXJjZXMvbGluay10aXRsZS5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4yYzgyNGRhMzg2NDJhMDJmZTdiOTg1YzEzNTliODA0NDUzNmQwYzNlCi0tLSAv
ZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL3Jlc291
cmNlcy9saW5rLXRpdGxlLmpzCkBAIC0wLDAgKzEgQEAKK3dpbmRvdy5kb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnV2ViS2l0TGluaycpLnRpdGxlOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQyR3RrL3Jlc291cmNlcy90ZXN0LWNlcnQucGVtIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL3Jlc291cmNlcy90ZXN0LWNlcnQucGVtCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmIzNDMwMWYyNTM3NjM3YmYxMGNlOWE5YTNiMzhjNDViMTg4MTQ0NmQKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvcmVzb3VyY2Vz
L3Rlc3QtY2VydC5wZW0KQEAgLTAsMCArMSwxMyBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0t
LS0tCitNSUlCOWpDQ0FWK2dBd0lCQWdJSkFMZXVYQm8rdnd6OU1BMEdDU3FHU0liM0RRRUJCUVVB
TUJReEVqQVFCZ05WCitCQU1NQ1RFeU55NHdMakF1TVRBZUZ3MHhNakEzTVRJeE1qUTRNalJhRncw
eU1qQTNNVEF4TWpRNE1qUmFNQlF4CitFakFRQmdOVkJBTU1DVEV5Tnk0d0xqQXVNVENCbnpBTkJn
a3Foa2lHOXcwQkFRRUZBQU9CalFBd2dZa0NnWUVBCiswVFV6T1F4SEJJS0REMm1rdXErdFU5Mm1R
dkRaZzczQjBHK05ocjJUMkc2TWJjTHFJd2pnMVFZdEJaV0o4M3RaCit4TU1FZml3ZUhMRjg1Wjlv
aGF2QWd4SmxLRzdZbXZaTzc5S2tGcG1qVjJXNUNWUm0wZVlNUG56bXhOQ29hWXFvCitETGwwenNI
NktaT0xQS3UvZlg0ZURYOVhwQVAxZjgzaFdCMVVGQm1IS044Q0F3RUFBYU5RTUU0d0hRWURWUjBP
CitCQllFRkRIdjVaUTFCZG1oelRzRFVFb1k1NUVYeVVkS01COEdBMVVkSXdRWU1CYUFGREh2NVpR
MUJkbWh6VHNECitVRW9ZNTVFWHlVZEtNQXdHQTFVZEV3UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFR
RUZCUUFEZ1lFQWgzcU1CeDd2CitqU29kTWYzT3lUcVRMRTdkZUxubW5DZUJWcGd6eFJaRW9pemNH
cVljamlxTzI3aTVONVo2S1ZRc25JVG5MaXlDCittVXR1UjVLbkY2OXVUS1V3NG0vdWdaZTV3aGpp
ZzVNcTJsNDEwS1ZLNkVlRzR0ZExsZlhSK3dpNFU1SzRLalA2CitwNG5jaFFVWExhMnpjYkpuK1ZC
ZXhKbjYvOXdkaHIrRFVHWT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9yZXNvdXJjZXMvdGVzdC1rZXku
cGVtIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL3Jlc291cmNlcy90ZXN0
LWtleS5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOTAzNjIyMmNlZDU1NjU4MTk0MTJlYjRkMDA2MjkxYzUxNDAy
Nzc1OAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Mkd0ay9yZXNvdXJjZXMvdGVzdC1rZXkucGVtCkBAIC0wLDAgKzEsMTYgQEAKKy0tLS0tQkVHSU4g
UFJJVkFURSBLRVktLS0tLQorTUlJQ2R3SUJBREFOQmdrcWhraUc5dzBCQVFFRkFBU0NBbUV3Z2dK
ZEFnRUFBb0dCQU5FMU16a01Sd1NDZ3c5cAorcExxdnJWUGRwa0x3MllPOXdkQnZqWWE5azlodWpH
M0M2aU1JNE5VR0xRV1ZpZk43V2NUREJINHNIaHl4Zk9XZgorYUlXcndJTVNaU2h1MkpyMlR1L1Nw
QmFabzFkbHVRbFVadEhtREQ1ODVzVFFxR21LcUF5NWRNN0IraW1UaXp5cgordjMxK0hnMS9WNlFE
OVgvTjRWZ2RWQlFaaHlqZkFnTUJBQUVDZ1lCMlF3T1VzUnNJTXByUndKOXRKTmZ2TzdHNworejVp
MS96T3JseFBDNGpITVBCbklCbElDd2djT2hMSTRvT0xkcjVIOFIxMm4wVnFvVDdEUndQMzk2aXds
SmlwRgoraU8xaGVETW4vOHo4TFBHd2tDSy8rY2swNHJNRGtzeFdJZE13WUtCWHQ5YWhuSi94Ukx6
UTEvM0FKaUFHbm9lNQorL1FMWFF3ZW9mZDRtbWZzaktRSkJBTzJDd1Q3dU1QNm5NalhndFZNSnE1
UVA4VWJlQ1Mxc0VPUEpKYkh1RHhKQgorL0hlUFFIQmpxNGt6RzZDTDRvTzdUKzVmRHY0ZytmSUlI
enVYZXJaMGltc0NRUURoZm1pVEljOU91Y0VJZmc2LworbXMwSmlLU21XYytxb2lPQ3RySUx1UXZG
b053SlJjaVFBTnFlSnM2d3BhRHZldlNVdkJMR2ZHLzdiM0h2YUU1WAoraXFCZEFrQkVRSXZwMnFj
SHR1Sk42MG9RRjdwUHJSa254VXliMmU4c2xqUVg0cEpBSytneUwxOVVMTUF4aUJkTAorVm9kOFZZ
cU50SkZwWSs2UHA5ZloxeGp6YjZBTEFrRUE0SnpyREF3MGxRWEErM1dkdVV3NGl4T2FkcjJsZHlH
MAorMzZLZWJjRHdzZlpPMThtMFE0VW1QejBHeTd6Z04wd3h6dW9jaGF3MFc2K2lQVWlZS09sRVhR
SkJBTVdRclBsdQorcnJpbm9aUzJmOGRvSjlCTk5VYStSTnBNdWc2VVhjNTVxb1VKbHlpWEVoK3R1
NEFhTU90eHVHSXlDMHNBY3V3NgorWGRBUFZQWEtkN01uZTcwPQorLS0tLS1FTkQgUFJJVkFURSBL
RVktLS0tLQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3Rr
L3Jlc291cmNlcy93ZWJraXQyZ3RrLXRlc3RzLmdyZXNvdXJjZS54bWwgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvcmVzb3VyY2VzL3dlYmtpdDJndGstdGVzdHMuZ3Jlc291
cmNlLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5iMzg4Njg0MjA5ZGEzZWRlZDNlYTIxMDNjNzQzNWJlNWU2Y2Zi
NmJiCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQy
R3RrL3Jlc291cmNlcy93ZWJraXQyZ3RrLXRlc3RzLmdyZXNvdXJjZS54bWwKQEAgLTAsMCArMSw2
IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGdyZXNvdXJjZXM+
CisgIDxncmVzb3VyY2UgcHJlZml4PSIvb3JnL3dlYmtpdC93ZWJraXQyZ3RrL3Rlc3RzLyI+Cisg
ICAgPGZpbGUgYWxpYXM9ImxpbmstdGl0bGUuanMiPlRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Mkd0ay9yZXNvdXJjZXMvbGluay10aXRsZS5qczwvZmlsZT4KKyAgPC9ncmVzb3VyY2U+
Cis8L2dyZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdEd0ay9DTWFrZUxpc3RzLnR4dCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
R3RrL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJmYmZlZDhmMzljMTMxMzlkYzg2OTI5NDZj
YjY4NjM5MmFlMWZiNjYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdEd0ay9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDU4IEBACithZGRfZGVmaW5p
dGlvbnMoLURURVNUX1BMVUdJTl9ESVI9IiR7Q01BS0VfTElCUkFSWV9PVVRQVVRfRElSRUNUT1JZ
fSIpCitpbmNsdWRlX2RpcmVjdG9yaWVzKAorICAgICR7Q01BS0VfQklOQVJZX0RJUn0KKyAgICAk
e0NNQUtFX1NPVVJDRV9ESVJ9L1NvdXJjZQorICAgICR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNl
L0phdmFTY3JpcHRDb3JlL0ZvcndhcmRpbmdIZWFkZXJzCisgICAgJHtDTUFLRV9TT1VSQ0VfRElS
fS9Tb3VyY2UvV2ViS2l0L2d0aworICAgICR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrCisgICAgJHtDTUFLRV9TT1VSQ0VfRElSfS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybQorICAgICR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNlL1dURgorICAgICR7REVSSVZF
RF9TT1VSQ0VTX0RJUn0KKyAgICAke0RFUklWRURfU09VUkNFU19XRUJLSVRHVEtfRElSfQorICAg
ICR7R0xJQl9JTkNMVURFX0RJUlN9CisgICAgJHtHVEszX0lOQ0xVREVfRElSU30KKyAgICAke0xJ
QlNPVVBfSU5DTFVERV9ESVJTfQorKQorCittYWNybyhBRERfV0sxX1RFU1QgdGVzdF9uYW1lKQor
ICAgIGFkZF9leGVjdXRhYmxlKCR7dGVzdF9uYW1lfSAke0FSR059KQorICAgIHRhcmdldF9saW5r
X2xpYnJhcmllcygke3Rlc3RfbmFtZX0KKyAgICAgICAgSmF2YVNjcmlwdENvcmUKKyAgICAgICAg
V2ViS2l0CisgICAgICAgICR7R0xJQl9MSUJSQVJJRVN9CisgICAgICAgICR7R1RLM19MSUJSQVJJ
RVN9CisgICAgICAgICR7TElCU09VUF9MSUJSQVJJRVN9CisgICAgKQorICAgIHNldF90YXJnZXRf
cHJvcGVydGllcygke3Rlc3RfbmFtZX0gUFJPUEVSVElFUworICAgICAgICBSVU5USU1FX09VVFBV
VF9ESVJFQ1RPUlkgJHtDTUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUll9L1Rlc3RXZWJLaXRB
UEkvV2ViS2l0R3RrCisgICAgKQorZW5kbWFjcm8oKQorCitBRERfV0sxX1RFU1QodGVzdGFwcGxp
Y2F0aW9uY2FjaGUgdGVzdGFwcGxpY2F0aW9uY2FjaGUuYykKK0FERF9XSzFfVEVTVCh0ZXN0YXRr
cm9sZXMgdGVzdGF0a3JvbGVzLmMpCitBRERfV0sxX1RFU1QodGVzdGF0ayB0ZXN0YXRrLmMpCitB
RERfV0sxX1RFU1QodGVzdGNvbnRleHRtZW51IHRlc3Rjb250ZXh0bWVudS5jKQorQUREX1dLMV9U
RVNUKHRlc3Rjb3B5YW5kcGFzdGUgdGVzdGNvcHlhbmRwYXN0ZS5jICR7V0VCQ09SRV9ESVJ9L3Bs
YXRmb3JtL2d0ay9HdGtWZXJzaW9uaW5nLmMpCitBRERfV0sxX1RFU1QodGVzdGRvbWRvY3VtZW50
IHRlc3Rkb21kb2N1bWVudC5jKQorQUREX1dLMV9URVNUKHRlc3Rkb21kb213aW5kb3cgdGVzdGRv
bWRvbXdpbmRvdy5jKQorQUREX1dLMV9URVNUKHRlc3Rkb21ub2RlIHRlc3Rkb21ub2RlLmMpCitB
RERfV0sxX1RFU1QodGVzdGRvd25sb2FkIHRlc3Rkb3dubG9hZC5jKQorQUREX1dLMV9URVNUKHRl
c3RmYXZpY29uZGF0YWJhc2UgdGVzdGZhdmljb25kYXRhYmFzZS5jIHRlc3RfdXRpbHMuYykKK0FE
RF9XSzFfVEVTVCh0ZXN0Z2xvYmFscyB0ZXN0Z2xvYmFscy5jKQorQUREX1dLMV9URVNUKHRlc3Ro
aXR0ZXN0cmVzdWx0IHRlc3RoaXR0ZXN0cmVzdWx0LmMpCitBRERfV0sxX1RFU1QodGVzdGh0dHBi
YWNrZW5kIHRlc3RodHRwYmFja2VuZC5jKQorQUREX1dLMV9URVNUKHRlc3RrZXlldmVudHMgdGVz
dGtleWV2ZW50cy5jKQorQUREX1dLMV9URVNUKHRlc3Rsb2FkaW5nIHRlc3Rsb2FkaW5nLmMpCitB
RERfV0sxX1RFU1QodGVzdG1pbWVoYW5kbGluZyB0ZXN0bWltZWhhbmRsaW5nLmMgdGVzdF91dGls
cy5jKQorQUREX1dLMV9URVNUKHRlc3RuZXR3b3JrcmVxdWVzdCB0ZXN0bmV0d29ya3JlcXVlc3Qu
YykKK0FERF9XSzFfVEVTVCh0ZXN0bmV0d29ya3Jlc3BvbnNlIHRlc3RuZXR3b3JrcmVzcG9uc2Uu
YykKK0FERF9XSzFfVEVTVCh0ZXN0d2ViYmFja2ZvcndhcmRsaXN0IHRlc3R3ZWJiYWNrZm9yd2Fy
ZGxpc3QuYykKK0FERF9XSzFfVEVTVCh0ZXN0d2ViZGF0YXNvdXJjZSB0ZXN0d2ViZGF0YXNvdXJj
ZS5jKQorQUREX1dLMV9URVNUKHRlc3R3ZWJmcmFtZSB0ZXN0d2ViZnJhbWUuYykKK0FERF9XSzFf
VEVTVCh0ZXN0d2ViaGlzdG9yeWl0ZW0gdGVzdHdlYmhpc3RvcnlpdGVtLmMpCitBRERfV0sxX1RF
U1QodGVzdHdlYmluc3BlY3RvciB0ZXN0d2ViaW5zcGVjdG9yLmMgdGVzdF91dGlscy5jKQorQURE
X1dLMV9URVNUKHRlc3R3ZWJwbHVnaW5kYXRhYmFzZSB0ZXN0d2VicGx1Z2luZGF0YWJhc2UuYykK
K0FERF9XSzFfVEVTVCh0ZXN0d2VicmVzb3VyY2UgdGVzdHdlYnJlc291cmNlLmMpCitBRERfV0sx
X1RFU1QodGVzdHdlYnNldHRpbmdzIHRlc3R3ZWJzZXR0aW5ncy5jKQorQUREX1dLMV9URVNUKHRl
c3R3ZWJ2aWV3IHRlc3R3ZWJ2aWV3LmMgdGVzdF91dGlscy5jKQorQUREX1dLMV9URVNUKHRlc3R3
aW5kb3cgdGVzdHdpbmRvdy5jKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRHdGsvcmVzb3VyY2VzL2JsYW5rLmljbyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0R3RrL3Jlc291cmNlcy9ibGFuay5pY28KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWE4NDhiOTkxNmU1
OTA4NDQxM2ZjMWU3YTA5MGRlYmY1ZjQ5MTRkYgpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMTk4
CnBjbVpRelU8NSh8MFZYaUxmcXtXUjQyVSY9U09BQz5mRVhsPzM7aDU4QUQwd2UjUX1SWTFWako7
CgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdEd0ay9yZXNvdXJjZXMvdGVzdC5odG1sIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRHdGsvcmVzb3VyY2VzL3Rlc3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45OGY3ZDRm
ZDkzYmI0YWRkNDJlYTQ2MGVjZTg1MmYxNzFlNTA4NDY2Ci0tLSAvZGV2L251bGwKKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvcmVzb3VyY2VzL3Rlc3QuaHRtbApAQCAt
MCwwICsxLDYgQEAKKzxodG1sPgorPGhlYWQ+PHRpdGxlPnRlc3Q8L3RpdGxlPjwvaGVhZD4KKzxi
b2R5PnRlc3Q8L2JvZHk+Cis8L2h0bWw+PjwvaGVhZD4KKzxib2R5PnRlc3Q8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9yZXNv
dXJjZXMvdGVzdC5vZ2cgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9yZXNv
dXJjZXMvdGVzdC5vZ2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2YzYTNiOWM1ZDY0N2M3MmExNGQzYjQ5NmNjNjI2
ZDQxMmY4YjAwZgpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMzAxMzEKemNtZUZaY1VWKXxfQXRD
cDhYKktzQWkrPntMTVIzWlBOKUt3TmtTNHNIOSYkUG1QdFl9R3pHKm1qKFM1aWd1bm0tCnpRcSYy
ZDJvVzRXeiY8eDFBU2ZiODUkaitiWSVAQ0pJUTVTMkxGZUIwZSlzITVAOSVxXy19QytWP3FfRzhV
RG4/Rgp6PntaVE1kITJvPFpwKVR2ZkI9N21SNUNlcEF1REVOPSVKPDEmVFd+QnIwb2s4MnlXWkwx
cjhZPmZLTmx+N0pCfEcKekVjQXJuNV9qTDBIQUloaHt9R1RNTXBeO2BOUnJaKCVoelJZcHs2RCZW
JjBFVzRXQGNBbkV9aWQleiVhQUFvS0BkCnpTNThuMjFoODw4WEJjJSpIQ2AkUGZCPUJaJDxeWHVW
ejZzZE1McXFxPkklVV5aamYxNlR+Um5saVBMJXh7V0dFWgp6I0ZHSSkwVHRifXF+Uz8kQD5zd1kl
Q2VHN1R8aVFWfDFxa0dDVVAjb3dFcmlVeFVKM0klXyY+UVQlRUR6djFvWHEKemZGKkZxQ3EqcUoz
YmpLNDF4Xm13WEFWMFlKRGlEZ1l0aU40eW9SWntWT34hZzRATHcmWkR9WThkYDltYz1hX2tQCnpV
az9mTW9Re2IqYVJJWXdAQWsyUFp4OD5LbjcmXko2fX1lXiN3TVA/ITdkRTFjNVNaQ2dvcGFERUdr
Z0olTEhyNwp6TldxPD9FMW1YTkMhRSYoej0qVytvJCUmR2leOWNsKnMqRS0mVihCfmNpaDt5RlNh
Xj0hfDhwb3J9SDw9PTVQOHIKelVyczZiRUI+PFlvMVlpcmA9d0pNcG1Qa1VkZyFYQiszRnR6PSNo
Ql5aM3F5KmZEKT17SW5BfWFBLUZqKWA5eEEoCnp1a3ZfcitMYlFHbGBpfnk1Q0ZqLTNxaEF1K3gt
OEVpTHE0KXw5eGFCaHVyYFIjXnQzOWAlNCo0eWVPd2puR0JRbgp6NyM7Pk5PPDdUbCFBemdFK2tH
eD1VakBndFM9XkN8dSZaeXY3WDZiNTN1Rmc/PCFMe2RWTHQrNkJnJGhrKHw3JiQKeilpPF8+LSsp
b0VmUlg9bSRiUWMrQElvQXBCdnZKPnUtPktlX2g/YlUhJjIoOExIR3xkITJzJnxON1VOISs4P2g1
CnpTa3lrJndVWCo0YHdCJk0lZyhlYCpTKTc7PlheKyNuM2tAV1lYKV5TPEYodHpnN0xMWUE5OX5y
KXxzQG9VV2U7IQp6ekNDTylXRnY+K2xDSWE5d0JENCFlUGhSS3BSfUFJIU1WYlV4QEEzUUw/NmNj
aSFFOT1BMEYhcXhEV1J6eWo3UVMKeiMmaT4kYCEpWFhjVU1ncD5pJn5gU1RObj52eWBEREluO2U2
N3pOM3ArMlA+UXRTPkFNPk82O0M4PCFUQkBJelgyCnpnOzYla256Q308dWJjYCU5XnBMfnwxKXtk
JHspRDZ2MFVTSm5TT0hBPms0QmJYfWRUVV9gS3NIQXFlalliMX1tZwp6PUhsWD5Dcjd1UjJvUigr
Xn5efSFuPH1EMFQkP15mNmlpZlZkP18xYV5Ja3tfc3h2UlU5KXFSZy13RjUxPV5BbSMKeiNKfE9C
dWs5bChvIzhtKTxxXz9AU31ZUTstPGNNQlh2Z2hTYEl9flVkfjsqcEgjZHF1VTBtPj1qUCk8YzBr
RntJCnp5X2QtZmgxVD1aO29KejA9PzRQO1EqdHMkbSYpdSUlQTcqR29XaWQmdUt3ViY/bmo+cURf
KjJlY3I8eV8xYk40Iwp6YndhZT9yYip2fk5wWnNUJlYteDIyXiZ1Qml8emVPVV9PWT1II2NfdG84
JkJyMnJaIUdwYGFZfnphPlhVRkx+ZiEKejt1dWArNmtHMXtTPUUtcCtTWnoqUGgwaTR8QnhKfD0y
KjRubXxGOSN4YGJYPmx+aD0zSUhPTyFlQiR9cHwyRjxoCnphQEotIyE0Wn1tVVomSChOc2lJZUpf
d2VrRT1LcnxBSih7ZjAhQztTWn1HbnEwMDNodEtKQClfQnI/aWxJPzh1Qwp6JTBueiN7ZVBBaXhP
TGhtZTl7TC1ZJFg2VDA2YzFKcDR3dyFzVkVJN1dHa2AzMU5NVSgxRF9zbCpyK3tGPmN8ZyUKej1A
MzBpSz1vOVEyamBRZjkhUWd5WSE/KzN4NW8/RTk9JF9SNHYkKyo7S3Y+bylZfH15T09TbXkobW9V
a09Xcn5WCnpvJkAwfT0mSUYld3QkMGkhaVF6R25xfGZOUTJke3pASSplNUNeLUgjM19RXzwyJTdO
dVljNjtlcWNATWAxOGI4MQp6ZEg2NXBpdThybntvN25EcEt6OGF7Q19ednt+aDd+ViZLMlUwTDxj
JDFebHotKUh9RSVSUT9iK0BRX3RiNFN3YUwKemlpPkA8WVBXNWUpdHRuNyl1TExIJCR2QCp0WUNs
ZSp9Wmh0cUdyPWxwRzhNYXVIYDJFJU10fEMmKXxsbUZ0QXt1Cno7b0g3e0AtPSlUdWZuWEZPKCpo
XzV2d05pbEtPcSpoWDRCSlF+OzxUNlFCWkNtcyRWMXJ2YHh+MFJIOWl2OU50MQp6Q3tLV1pEazFp
JDI+fDVAcERxMmJoeHp8cmB5VWZSRG1ubE1eYitmSWB6d2YmeEw4Jj4hJVArbiFqWmRlU3RNdXkK
ejdfbzQ3YzBTSjVDVWw+OFhGeCFNeHBkTiU+cHFjPntIdk9oXnVybTkmYEVBdDAmRH5vKHRPfTdA
I3dkb0hKZWBoCno1bmVaNHFmYko+PklGdFNkSTlaeiRgRlF5UCZwZ3xzN31DbS1Ab2VkWExgQkB3
eDB9X0daPEhYPFZLUmhxczV5Sgp6SihOXl5UZDFla0hYRl9eaGJPeEJVUFp5aW93RHt7KWpyYFFf
JGRyT2pXO2M+ZU53bkVnMjhhWTQyR1FhMzVPd1gKenAhTGV5PTJpbyZObSVhenIqfnt4dFhgLXl6
fWZ8fDAzX2FZcWNUQzIxb3UwOGZgSnIkREJJYF5oRyVDX3hMKk9WCnowZD0hN0FyPj5ZUTBpZztG
bFU0UylyYnVvWTNhaCtnYGEpfU5WWil4cG9WIXRELVpFKCFwQioxYVB7JnFqPSYqNAp6RCQzMloz
Q0Q0QnU4ZCp9bmlgfExMT2h6UHFSPFlOPHNxJXEjOzdQKUcqQiheaGtwYG1lbkFAd2B+WHtmYVRT
V3UKemZOen5SQSlaZVRaP3wtNHFRS0AmRD1CV2wjO0dYeGd6ZTtya2RiUCpaZHBAMjQwcmZvUjNL
YnUwVUkxeUZpMnhYCno2bGViTWNHJihuMClzJCteI1IrTylDaWBmPXNtajB6Jk4pK3VBfEZmYk8p
Qz1lfEJea1lffSR0SC00ejhVM0tqKgp6PzA8SWpGQzFyWGZ+bTI5RENhOCtHLUA+JWFCeWk3TXBY
V1N5PXlRJEA5JGx9fEJXNTsrWTg4bGUlMSklZU1mQEwKej0+XyU4RmF1eStJc2s0UkAqUX54Xl9A
bW8oSUZQfVd1N1AyNn1HdUI0dmhxa3ole0AwfEg9TjQzaHR2S3tJeF56CnopNWB6S1cjSW1PKllk
eWpGYUxrJFd+Q3xaSnUhZVhtWEJuYDxgc0xsSVVPT0ZVPjRoVVNwdXZuT20oKX1iS2E/PAp6SlMy
cTcoRlZ8K0UzMmZNYzg9TjsrdGZIRVA0JT9DN0dQNH1TUnZLOF9DQTBLMWxQZSFrIzAwfFhzVkRG
ZEd1MjEKelFYT0Vick5ESkAtWFQ0MzlsVnFqTSN2ZXN1NSp4KlFwfV4qWkNHZWNZND4kfnlnanNZ
U3ttMlo8STxvbFUjTSZBCnpuVzByZ2NAMkBHO2FxSlZiTGVNRVQkfF4mKHUwPSR6YnVYUmZQcXRC
VVR9O3JaWEpAc2pBTlJoRSV1bk0qZ2wyXgp6dGt3UjI8eEY4T3ZrX2ElOCUhNTNSbE8oNzhGJnV+
dik8NEdoYnswYFIzbHxPJXgyV1FnYEhSPF9JKDJ6SFpOaEMKeip+STtgcCsydVg+TjREOHAjaCVH
eG9QU3s1Qmg+NzlNYngpaE5nOyZzUH0hYj9AZVRRRTRwQipURWVfcjVlNF9sCnpodiljVUpIclVV
IUU/TkMyIVhlKEIjIUJhaEtoMCt1SWFBXmNwYFpHelomMyk7OSktV2ZITW13Yzt5MUBMZ3N6aQp6
eHshbTVBSlB2RVA0R2w7PCVnPDtpUXdYMjxHcjcjQkZnUFU1cXx0NDdvTDhPWlhOPj4tWH5UZSl7
P3ghU25wKlAKei1rfWpwST1nNDIkRi1UNGdNLV9IX19qfVVqa0NjZjRuMzA0MVM8UC1hTEFEeXRT
aEU5VStkT1hlWHhwaXI4KXwpCnphUURwOGRhZXo0RWFGX0V6Pm4tNDBGWHA0RD1ka1hvczk/bkVJ
fXkoO0xQdyNGN2pCYzxxaSEtVTMhQFJ2TGspfgp6dSt7RyEzNGQ4PTA0ejhYN1BRY1lWNkhuPEhj
Qld8NF5sbnJaUnV7IU5ZeDteVUBzVVJwQjA9dHR5KyVVSTZrPF4KemdvRVZ9YXdQVUYka2dCZWUh
O1NQdWshMjs+IUwtXlNudj00RUNxQSRxd09aMyhleVBCPVVARS1Pbz11UXVBVHZHCno7YGA+Njsx
PlZ7UTdXfXNgTlRoUClmeUl1JU5LLSVNRmA7PWZabDZLN0ojdFc1MVl9Mkc4WCY2PiVtJn56V0A4
MQp6VTlmQklDPVlgdTg+UHxqKCUpQD14OTQ1S3lXRHA8PysoMXZ5eFIrMzl9eT9RTihQZlhzOWst
IypLX1Q+e2tCc08KentTbSlfcUY2JFQ1fF9Ubz9eNn19ei1mST9KNiRRQnM2WU1VPSp5MXpzWkNk
SCRNUCE2SHsjRnkmOXpnc1FBcnc0CnphbCMrQmxlLWZiVXd6NExvSEMkRGxIKzNZS2dldl5CfVBj
ISE5VHlwVENOT3F1KzUlM2Ngd0FKPTRsbih3R3JoQAp6YWRld09AJHZVWndhR1ItaXBYaX09WGJC
VHkrTExee2dIUi0qeFJXNyRmY1clZGIjS0JjMDdwfSN2OX5iVyh7RWEKemUqMFllZmFURVdgcVIr
WTBUMGMpelEjWDJgUE56QjRKdTAoYiVabXMxK0EpJnstRSYoe0otb0pyO1BXfUV9dis3Cno+QlVW
am1+PV44YEJPUUVJayE4cD9qRVMwOUR9a3lQVC08YklASWx2V3J5JEhiZy0/cDdTO0R7e3xGRUdO
bz4yNwp6SzFKK3swQCl1KFB8NzFFJDB4P1JXcmtMY00qZ0BZTlpmd0NhTUA4clpaTSVFSXp7UDNi
PT5WeWMmfSZUd3lmQVoKelhUVXQ4bipRMmZ6VyozOFhYVSYqMXQwbWB4fT9+eENGWCEoeTBBQ0xL
O3trdjZfc19tTTMjUCReNHNMclF1TDY8CnpUPFc0Y2tsYWs4dktOKEZEX2drdHhwZWY5amJ4NXUq
dCNpTVZOWjlSJDskX2MyP2NMIWdAYkBBUVhpdkc1MHg4cwp6MFNvSyY2NkR8IWhZNHdKcEdxYT1Q
KX00dCV+RCteTj5eYEF1IyR3d3BnISpreTskWns8UFFtPy1jRHRYbD49VGEKekx4YD9Be2hfJkw8
PU4he3RpJF48VmwmcS14Nmg3WHN+JTJxWnxgY1hIUmJYSEZzTmlCVlVhRXFTLXtJPjwzP3ptCnpI
Rjw9RD5fKjEtWCY/cnVBJVpfIVkzaDtOUFowOF5hbGt0TF5EPjhJeV8oZ0J1PGxsfFBlRFE9KUJv
MGBvbiNjbQp6MUxOMm5zc2R0fVFTZypEU1F4RWVUdWlVYndwXk02MGM5IXhZcEBra1dFcy12emZQ
U0VhV1NDYj1WRiUpRC11SVkKenYlX3xOdzAtbmVvQTE9PEcwUld4eTYkSU01ZU9ASC0xbllYYCtZ
SWBJV0ZxdFM2NkV5QkFyOHUzKns5XzByPkx2CnpEb3U2ZVV9c35PJEheKT0/dl9GNGN8cmw5SU45
NzVKYTNkPikzTmorZChnN2s8YSk2Uyg9ZDQ1TClvY2JEfn0pOQp6b3MpJCE/PVApQW82PEZHQFFF
UUolQiQqYGtrTl5pRCorcUZANzZCPGlBLV9IXkRFKVZ4ZFRvUVZ2RHY5VTIlaXIKekBGSjxIUDI5
bi07Tnp2NjhnZnFobEp9aT4oUzNIflpqVzxldTFWJFRnN0xmb3syaz0oXmJAT0JUT28kQm1LMUV4
CnplQn5Ia0d3MSl9cDNMTGAyP2FlYU5Uc31iYilGZmc2YmlmJkU9ZldENU9jLUBEUWdGa2RfSyFl
PCo5PkNxRWBWbQp6bm5qMG4kd3BiME98RF5UUiY1fF4mMUhjNF80an1Lb0FuVjRHNyNGKD9GUXlp
KEVkRUhjdVV5PkJsZihLMEhxS2oKejg4THVyM0FwTXtRdjMtRDJ9QjNUWkFKKW9uKDl2Q3o8Iz14
UG9zTFgza0skZWxwfW5qNDhjNzZgQHhSVm52Kk5gCnpLNXVeI3dCZ2gyISQoVUZHam1uNXQ9NHYp
O2xBTz1EVC1+JTNyRUBgXnswUkZ4dV5LSGZeYyVadVhnbE1lcDZuSgp6TXA5bFEjbnI2MSh+KDBw
Z2k9OzZYSWZ4KmVZU3lqbUZ5VDlPNWUhI2VDZDVpVnxScV5MTlF2RFpyVT9GV3o4Yi0KejJ6TWEp
ZHsrNVJUfWRlPXVnO1Fzb0NaMkk2bEdBUHN9VzFKWX19aDshfUZ2eWlUQn0+Q1B7MDcjUlMlYWNh
VW51CnpVZER+I0x8KmlJNmtrKFkrY1F8TTh5YmozKyVCX30jSkxeTXBXemchbn5zckY/UF87XjlJ
PnE3PSp5b3hrIXVKcQp6TjtXOFAwVTN9cmdxR1NxPSN0fVYzKjF6YSZGU2xJM31jI0NjS2kwdUtw
UE1zJHE3fFkzST4lMElrUlg5aEpYTXgKeiQ+VChiTzl0Wno2XnZhVUgqQWklVEhtc3k8Tko5fmpe
MnNGSlJlfWxqITBOc0djLU5GKGBlNGBye0A0QU9YYnlwCnpQb2RqVV5XTHpoTjxQYEVzKG9PQ1c+
S241Pj04ZzBZWCorZXZqJmt6dis+dDZeeTZkYEVgcj9uYU9IfEBkR1dxcQp6TmA5THVYeCROKkY+
QypGemdPOyghLW1SMSNNfFdCbEFMUj1gNXJ4QXlzKyFveyY0Vkt2Z0dCRUhtYjlhZjRuTkQKekVw
YkNodWhkYWJjXmh7YlMwRnRkT14rKEZDe2ljfSNeVkxVWEs5UihAak9DS3QwbVg2TClrOGNeN15E
YEtATF81Cno1KCRqcm8/Qjh1cnxMa35JN3FZaGFwWE1jbk85fElodD1mZDR+cHluZndJV1B1WHhR
QytmZjhiOS1sWW1GbE9gZAp6Ty13NDRmM1J6Q0RqQ15nK25WfH0teGgzUHZRe3QySV58VHFjendB
NztXYHM2dlUrMC15WkRYbT9eRHchIX1eNjwKekZZKjJLanRpVER3eHtCczdiZlhfT19GQCklNiN5
MU41WmM0Z0lUQklqdTgtdiY2NT1SeFVgV1FjezVJPzUrUVJaCnpHNilzI3VwZihGU0dxLXJBKkFG
V1k5SXdFa2Ayc3JLN3l6K3F1TEA0JkJyNmYhc2tAbk9xaHJwVyhNVW1RUH5veAp6bCM8IzhmZz9h
Q0Ehfko+UXlpWVFTbnxgfkhhXmtpYCE3K043eSk0cHFOO1FOYk8hPmtuZUtCbitkJlJkN0YrT3MK
emx3SGhHPC1le31yU1NUZFRZbC1TO3FTMmN5VjtBJHJ3VGttYW07MFFjSmBLQ15FNVRGNTN9K3sk
QkkkdWlEPmh4Cno/a01mbCs0IVBDTEFpR0klIXx6RHcxNSNvdFBZYntZZjV7QXQjP0NQUGVyODk/
aTIpdEdXLU4rMlRxandYJjBpdAp6S1JEIzYmXk9zaTJDTlcxT0gmVytMRFZXTGxnd3o4QCtlayRu
YjExcCZMWk80cihyS0BnUUcpKFl9OXVWcVE+QjEKenp9Izd5UnZOUmNkK217RUUtNSYhJEZvOSk7
WjB7MW84e0o3RmYxYnI1O0VoMXNoJUJDX0hwJD5adn00TStzNnJHCnpGTTBePkRTejdSUDhSbDBj
SGVoQmY4WGN4aEFsYSVsd3o/SDVFYnEmTjBxbXR1UE9KZj5NNXBMWFNFTTlIeWZ9egp6Kn09SklE
cUBEITVFalQkOWFMNjVsI1QpdjxQMWJANWZpeFd1fmVMNVF7X2VAdTRCdFJtNVNXcExCI3YxNUxJ
IWUKejEkc1h4b288Rmw5TExJVEJNXkY5UGFUcmI7N2NVKzZkMTZ7WEtyY08rYz5YfldgbkM/d3lH
a0s9TjFGTmdINGo5Cnpia1oxPDQ5UTNmKlI3QiY+KG5sK19EfUFaVXRYUGcqe1BPLW9Bd3Nidk42
I0tpaUNBJSgrMXhjWkhDUCtKZWU9Rwp6RllIcGdQSHQ5RU4tfi1+TFIhVT44dUo8YTxmdSRqVmJI
VFpYTkF+WCEmQTwzaHtXVEJESmstc2M/WktzaER9M2cKellNfjkleHNJd3l0MFRtQmFCMGFjIUhC
Y0xneUlHaz5ybX15O2wmPElYKEI8fElNcDRgUXQhQVhGVC11JndsMkdsCnp0NXRjO1JhQnRIdjZe
UXw3Y1VlM2U5PzY+Izd2c3VzNTlkKHN3RXVPMllmNnReQClxSUdBRnd4Yj49bEsmIzR7cQp6LWFI
Z3VsbHRebiFVM1BIZWVzcyVVPVRsPXclZkRnJmV3WUROdTMpLVolZTteVmckKjc9N3hjbEckU3Ng
aXJgPi0Kej4+eipGWmpob2d0JDtBMUpqZSNtIyNiPSZnR18jPXNyVitkXm0lSy1hVmVZSUlHI1FD
TjY/fjsoZ0VGa0p0NzRjCno9TlkoejFJMSlmRzNJVlNpaEBXO0JhVWZaakxsSjc1M35mTEwxZzs9
anQmKE1ea1k4cV4zaFJOdDNWej9xSkBBNQp6MEY1JlhBfX0/QUpQSHxpMytXOWV0QnxaIWBgMV9Z
QEJsWD9YWkR1b2ZvJmA4PGhRRiZaZnttI3RjcmUqZV8wRj4KekpDbG47Xm00XlAqPk8qSWVJR1Rx
c259Q0c8bnFrOXVvYSFQVHlnbndhI1BTMD54YXVaRk5OfCpYN1opUGpzcSs9CnpQT2huUXN7R0Bk
c0xqc3RjTzxhKHpnJllYOE99U2cqO2Q7I09wU358OVkpcFFOO1dmMWRrT1RtYz1wKkI0Kmctdgp6
eXUxUyotQVp0MVBZbWpjKzlrO0UoVDxvUm1nI2R7a0J4Tlc5R2pEPDIrVjNOLUJ5cjlUWSgoYkhz
XldWYEEpaksKemJWYDleMmM0PnFYPntabnRvSm0meTtBWGpEVVN+YG9NaC1+JHJQe1AhU2IjRmtJ
cFJ6RVh7MGkkLWRPOVhUcz1YCno4fFFTazBPOUdIbkZjNlY5Q3dXO3NiViU1TjBxPH43blZhbnZh
ckFiJXAkTyZLMntuYWN+STNjJWhhan1HXiNDPAp6JU8jbDBoPiMhZnQ5cGVpX3czUzdPMHMoYiha
c2ZBOU1yZjJQeSR2ZVEqWDt1VitpQU5oSnEoSG13OWszVnRvRCgKejZYYGl4MVY7NUxrPWR+WWZY
KSZHeFZLX3BJaWlkO0ZyZVF5dFZNRDs9elBsR3BNfnQ7Mm5lQGR5KEVQOSRjYVpICnpvX3Q1Jjwr
Q1hmdkQ0NXB5ey03X1B6KDg/KVFiNTBxOW1AVV5DMDhXeypFUyhsZWM3PjhyJG1oO2ZhYj88PVVi
cwp6Y2pkcklUYXN8RkJYZ1JQaEhaPmJqJmlYNGorSkNKcil5NT1LKHxhcVgpaWdIVStRKDZ3NlA3
Y3NKOEIpaUkwSncKelFSQzVaUm5OOH01VCNBR3V0ZTw1aW5+VntVITZGV1UxIz5DJW9WNU5NeCQt
R2pWN0kmeT0+cWBhP0cjUkpQQ2YxCnp3c3ZzOz9hQUtAWnZTbmBDOHB6aW44YmJYcjdkP2QlO2Ry
d1BBX2BrO24zNEY4YEAwMG93OWdUcnh3cUZZVW5xbwp6IVBKZFo8PnpeKWc2PHIwejlUND5MbHc0
VntrY2t8ZComaVZGJVolWHRQUFE+SzNrRzlra3dwOXooUU5GQlB0MW0KeipGIzIpaWEzRzkjI29Y
YFo0TipaZ3ktUnJlRnZQTFNxQDEkZEc0SElAc1MpZ1o7TEJ7NEoxe1BEXitJI0RVQ0VXCnpoNlVm
UHFMPkNXNyVoaGt4SXtTLTNxRHE1R3FuaHIoQVp+TkI/TXB8ei1ybE4weSt2JnpweUhEO2o8KEoq
NXhDMQp6OWZaKn1mejd2a1FsP1g5PGk3PFJweWE5fmNMcUR3blF2SEJQJFVqdHhwR295U05PIz5o
MTFse3FWfWRyNXVARSUKeiszUmVtUWgwZDJXUDB4NDh2OGotMU1ZOypwNmtpUXdBKHpZRGFmcmRC
MzdFKGdrODNYXzlge2JNI2JXUkhJajJNCnpaQD89aj5xY0A8My1ZVmowWlZHS04kZ29oJnFxRm9Y
YnRYZj44cmtzI31EcD9tT1ZZfnUzfmIhaFlGTiR4PVY5Twp6PE5NRWstIWIlJUpPcW1QN3M2XzFr
RFRvNXo9PCVTQlI8eE9AV0FsQXN1TndoQmZDNVRBYENiLWhvJVVjOFhhaHQKej8+YylrPkYteVlV
VXhBTDQqb2Uld3VBeXUpWkhpaTdQWF4wRnhpNlhpUj05MXhGdUAkQnRjezxNRlJqU0EhLSgoCnpx
NXgpfChiPHUtb0NvZSY2UyR8VzhTfFRIMkhuUmpVYGtgRFVebXdyOTcwTFhNPkk/LTJLM1FgKnBO
WmxJMSo/ZQp6TS03XllHWTktZERycFdkeEgrWmNTKlFtPWROanBnMm47bSNLP3M1XntNSHFLdWQh
SnAkVEcrJV9mJT8zWHByJiMKem41bkYlWDRYRXljSmRHOWgxbUpGWjxaXz1MQEA1QlhHOXdjOE9k
PTkraCVqfmYrT3V4YHxqQ1dNYTUhLS18NkQ1CnpUQTRVWkpWNDlSPDxLN1h7YDk3N1AyRkt9RmBt
JUZCR1Y/O1dNSi1LUkdQQG55a2hEdGJoWVBxSnJvJjZaZWFMTgp6bEBzUk9TT2NgQlcmRkVsXz5+
LTVJeCYwfGJOdUJBQjlmMHZSX0BCem5mSExrWFYmdEBhc2tuVlpDZml1R0JuVikKenJNe345JXNh
NzFPYmFyXipCI0p9UjlDZV98TEdxKGVRPVFiQ1A1ZX4jcnlPN0x2TzFgQD5kVTFocTFRaF42Nzg4
CnpfTz9XckowIURTNShWSGc5VlBnRlZeOHpsUl5rYE9aWkQ+UHtvQCp1ck92Pno/R19gfElNZnNl
JFc+UEgwODJ2Pgp6M0A4RjMkQzsoZE09PEE2ekAxN3JIMXJYc18jKk8laDk8Rz96bGNFJU5aVzk7
ZDF8KkE7O2BwMWFGTGw0c1QrWTEKej5sS3JQWUV2PldTI0UkWHdIQzcpQipxcW1zJV8mO0M+TlU8
aCllSDQqfX1lNSkqNCV3X1hTeGE0WkUqe010alRmCnpIfXB5JGFRWTxLPStmfV8+RTg+IU8haDZS
ekJyUUFee1lxYCMkdnE/LTRJWjtDI0I0KFplSU84JjU8UUx6MjdRUQp6PlpIeUFpZG1WXlRIJmQr
MXdqKWpjVzUmantmUC1vcjZ6PD5nMFEqYlo7NSpgPSpPWEpwPXdFKUxgJHEhVkIxKTYKek9gTE88
P2ZxMy1xdCFMQkIxPFB2I1NSUl9kVSZ7byh+RzNGKXdgKkxvdDJ4OEhFdUU9WXJiNWpJe1E9QVFf
e3FQCnooSSYxYkRYUUhsQXZ+c1RJeVlYMGFRdUF4PTU1PXkpdGphfHt7R1A+ZkE5V1RnT21PZUtE
X0FrWUZ6UXpeVUlZPgp6S0hXSzJRMnpTK09vIWZadWopSjw9Sl5uMmNSX1l4VXFyJSZMYzdaWlF0
fTY8NChxUUlBYDRFUDFePFpgdTZuVWAKeiE4X0dFSFM4SXdke18xXnxKYFRyX1FPN3M/MDI2b3to
OU1OI2tNLVRAO2pIbHBVX19xSnlLYWB2JDc8WHVsM2ZkCno/aUA2e2I1cH5QQl40VXdaO2R0Sz57
ZmFDMUBiITdeQVpQJlNXRzhvUURJR3RxfG9CaW9OKlZLSlc9T3o2Klcqfgp6NmNPLXJsdVpmKiRi
ZmA0JmlpMjE3R0BaNnpBKko0R31UKDQzSDhDcU0ofXVVbk0/KEhhbTI2JTEqO0FoTD5XK2gKej9K
ekBCcWQ+emhhWH5wS0pMZ3JDSGY2aUx3eiYzfHtyKzl1RD1qfkUhTjhoQm9IQyY5bHhkfTkrIXg4
Nit6a2hzCnp1OUxRPm1OclNxai1qRUVWU0U8eER7KypzRypXRDhIP2JTbmp6MEsreiNxMm1ee31U
fCVAV0heQSVUNSZkVllmWgp6N3NIMEQ+N0pAaT1saykydVF9JkBBX2NfPGNoP3V2dFNuSnh2JiZt
PTREUEtnS2pnfEdzOC01LVJaVVVYM21Db3gKekpkWX1HOyNoPz54WXJsPDh9bSExay1qfE5xWlZ4
Jmk8aUIrSXl4Rl9idmFKK3ZMSCY8UGQ8PClzJHRDTkJGfi1kCnpaVnxOOyNhUnRXd3p+eFBMcTc3
SnoxQm8yZyhSRFZSfCNKezg5VmRHcWs2M2JieyMyenF7dmNZIXkyel8+WUx4Rgp6QkQmYFRkSF4h
cFRHPXJTaWRZej0lNWVudD9GcjRQTiY8PyhYT1U3LUJIcjRTWmFNaW11VXQ/VkdpblpvdChDMGoK
el5fX0tTIVRNcGJZQjQoQlklTVBsTipBOzdgZSpnJDx9aj5HSm15THwhUnNKI3VecFlWZGFoemM4
eyFrN047SFM8CnpDO3k1TyRFMDlMQ1pibk5JM3h1bFdxWUB7WEFgUV5NdHs0JUo+X0VaeSZjdHY/
YWh7UHUpQmc+Z3pUam9CPjJnIQp6QlgxTFA+bmo4PTI1YnVfTn5jZUArZXRjVVRNTmFeXi0oRzlM
MmJMITc7T3s2TUxSMWsoTT1iWFl7ZFFSRGlNZWoKel4yKyRFV1FafDtwcCQrWFc1eTgjYEtSVTkt
Kncle3R2NmtkPyYha2F3Y15KTTgqM3hfYn5HRiN4WF8yRSs9ZiQ/Cnpeej9gYjZUQGl0SmJSdVc3
Y3lFQXVxNHxMbiVkISQmc3BCbWM2TT4raEs9MHtSO0FPMCVRPDBjQ3xmP185PV9KOwp6dD5gTGF6
I3I4a2FpdzE+QHA4Y1U0aEpMMl8+WTsjI3JGR3VTZXtuOXRJTURSRSk4TURmSDF+MC1LXmh3JEpz
T00KejJINjl9VjtPRWNBbG1DR1ZVJXZtd24oV0grWiloKHE1aj1FWUo4ZXxYSmNNRV5XdytXXzQ9
Uj1eJHQxXj9UYEAwCnprTURmRlNASURKWHFEeSQ7V0g5KnJXRz1xUTM3QHIxJSt6fEkpdXVBMT1F
T0JabnVuWjFkQX0tUHRiWHJGZ01JYAp6VUJiUXEzRmRsNEF7dW5XeFdtZVd7XnN0MjhMUk41KUZE
XkZlJUIqNEFvUmA4X2Iqe1ROcGEtdEBYenIxTjAhZTMKemc+a1I3Szs5Vj42WjkrYFgkUWltZH1e
NGZsUzBxJUl7RGlCNjVxK2FGR15SPmNxPUZfR1lLZkdnUWA/M3FQdl5oCnppSnNvVG1TeFRvKkhB
dyk3QjhgVWh9c3g2Jm5MKGopd0ZLNCQwI218I3FDO28kNzAtI3NQZ0Q4XjxqbXhmXyRycgp6TUEm
ODk3UGxnWkBScl4mSF5hQHpUZllHVVV6QTNxPFdZdWY1MnlAJnMrTygjMCZUWEpzWk51S2RGT1h2
JExVMmoKeiQqbWdxJFM3emBqZE02TXB5QEhZfDVPaUZFWnZ+O0BfQ2spfDY7M21gMjd3dVRZPX18
TGY9MmVKWmAlVEg7JTxUCnpeKUdzV2VILWA1M2YhXkVPTH5rLUlmKWB6bmBXRVlrUTd9TEk5Mk1T
SUZYdklXT2goazZTZmR7blZMOShMK0F9Qgp6Jj9GQm1PWTAybXYoV15DSVl6YHxAe2pSX2c5KXVy
RXt5VFRvM2tmPzNnZGBiZzM7MTNFSnl3PDFuM0JoKGhmRiMKemw5ZGZ1KihOSTNUYz8xfVlYdzFJ
dnFfIzJLQmQpeCRLJD8qeW50anM4cUQ0ekszaEFXWm4tTWp7YDJvKSZRRWZUCnplWFoqXkxaelNm
QV9IKlFRMTtnWilUKkZeaTUqOUstWDAlMkl2PztOQ1olQkRgbkAlPVUmIy19M21yRHEtTGVTbwp6
bVg/djhHcClJSzNRanpVSj1jNUpMZEV2KmFpRSRNI3BIRU48ZXxEPUIjMXhPP2Rjd1dmTWQwbypr
SzF8JU1VZWUKekZ8TV5nc0h1SCg/I3g9OzhJUH5zMHk2Tk83fVlvbE5DXlhoUTx5eHBhIzIpMUd3
JXUpWk49R2ZGZ0RjVjV5QDhaCnpZPm9HcEB6SEE5cjlePiQrPldoe2s9NHMoTytFck9IMXRDdEll
NXdCJjRhYWkqJmYkRk54bS1NRkxAWXNKWHZLcwp6Y3ZQN2M+Qjd3cXNpNVJPQEVrfFZ4QGVicHhI
dzBUPHF+JUFMN1Z6cSY9JjNKSEZQIUBPZHYyI1Q4d2JXZzArRiMKelppTilVOCF8MUx4WEllU3Fr
dzlOQGdQS3R5XihCQjF7I0lIdDc2ZlNeK0tNSCtxe1ApJFJgXj0hOzAqZ1YyTDgxCnp3KmRWaFAy
RUR9V2NUVGFOWFk/JiRfPEM8OXkrdDdFRW5sLTZmUmgxJXNfeFU0M3NKcHBvKU9jaWZrNVMtQ3w+
bAp6TzBZS34/fm1eYFhAT3ZZc0FGPElETk9zTj9jKHBadSliSGV0b1p4MnN8bjFhYjIxKTc8RWxK
N1FrdEp2RXZ8Y00KelVyPn0oPj5VO0FJakRGOzNIM2dIX1N1P35HZWhuQFZoPCVWQy1mfDxGJiFO
eXJDQmEqJW1hSit4LU18cUNzOSslCnptUD9rbWxBc25iPEBHKTk3Y2EkamlBTnhQRExacHFyfFUk
dzlBLSZCeTVpLUM+P2UrUjhGeWRBR3ZhYkZpKiQ0Kgp6cXlEeVJ7WH1rXnBiKWZZb28+QnxYZX5N
R08tOURMZ3FOXnw3TjAlb0FHLTZwKio2OHMqU20mJEljVUZMPjZrQSoKelAtN29tYnM0JDModElq
Vi01ej4oKTZIYz1TTSY5T0NIdVRpdUhSX0NpYFZzPF5vVlJjOXVhaTQ/fmx5Z1lPQXdZCnpZSCgh
ZUdJcHotKkkpeWI0YG1vUCslfm5lJX5gNlliZU14Wks8IzBTIWNxfnIpRUU+bGM/bFZeQmQ5ZHdC
SkBOZAp6V05rI1N5d3RPKnRwdk48MSo7ViUmRXsmO0A+clorUUMxQ2Y/MmNBZ1FPdGxEQWQ5bUBj
Ync0NEFnbHQlKVJCUVQKemtlaXlPRy1RclZLdUZmRlk/Y3xJSFowSkM8TyE5KnVNelVPTEBWSjRr
WSNROE5PckwhQWZ1eEFScEN4aSU5P35ICnpafk8rJmc/VipHeDQqUyteRTBUWWVPQC02NzwwM3Bv
Rk1ofV9FflBqeFZ6MDx4Xzc8M0YyPzUmVVZvZzlIXmpeIQp6b0hsRU4qIzZsVVczYnQtbiEpWGtj
N3E2WG48Yi0jLWd2eEVrPVc+OytVSlgpbUFZU2QlTXhEcHY5WVZRZ3AkKzAKekt4Y298dVRBYHwq
aSUqU05Rfkc0QkAzIzltdDRrPHBLdWVacGUoJVEzMHNWRj9XeX5sNTcoVyZtNDkyQHkpK3JrCnpS
fUIlWmp3UCtMY0tvKU9BVn0lajlBI1Jnd1pyJXotTVNHT2xURDJXVUErRGdhWkU1QmUpQy1Le0xF
MTFxJE4yegp6KmVzSVoxI285Q2puNnMjSmJDclhEYXhVJXt2bnlWaXhDaThoOyhraDZjLVpDV3Uy
eUJieXk2JF9gVjUzMl9PO0oKelhhPHh9JDI8I1U4RyE2NkEmUExFey1ScSZMOEtGZzlnLSNEMG5r
JUdyeCNoSCtKYUM+RFA5THU7eSVAb3N4dTw1Cno0cjl3ZzRYTlZ0OUVgbVYqNSNMNiN5VWtuMTFR
Y0FMV0tlMkBIXnIpYmtZI0NkY281JXliPE1RIVYyNm8/UkZVcAp6YWJKOVcjQmEtdkpjQyZDck53
UH4xPlIrK25fPFF2amVJPitxXjQ5K3tCQSFoeEZBMi1SMi1Xb1VsUWFvLVE4Vz0KejUqT1E/emQ7
ZGxHOysjMyNTbFM9YS01akpWdHFSTGxOPVo0JX47Kzc3T1JfMHgwZStZVW1EcXFUdVFKe3Y5Wmpg
Cno8KjZwfU5EM3lyeS1+bjRYOVExQWRuRTFCS3ojOzhkcVZORHlqby1UKCVAJXcleVFGWT1PQWZS
YHNhPEMlX0JgeAp6I0wrZEtNUntDenBCbkFUNzR8VipgUX5GYF9xWTMpTSRMQ0FJVCpJVms8IXQq
SFkzTTBATiV8T2tWMThDQ3VaZlAKek42WVV8eUxKWF9hXz5TKFRqSldBe3ZOVGQ2IX4tZGtMPHM1
VUpUOVFiPWpUOUpiOShBTzRXeiohWUJzRWg3KmQ4CnpwMGhZJDNfJWY4NCZ7KXIyYXopJiVxN3t7
NXN1NSkmTjdTNHlgZTIpQnMzZnFOdUUmbERWfiFZc2JVbnQ0JXxURwp6JntaSk45M3lzQXB2K1pO
QUJMPlYtaVVOZXIhfVpsVVlCaUVzKjM7d0c4YTVkNk9pMU9PSkx2JXo0cXdaRnZqXzwKelRWeCU1
MUFlejZLa2I8aSl9M2cwc3tBclklYnVHUF5fPVFGV2hMJkpISm47czZ5OXI8WUklTms9JCFRaUxw
TzBzCnptfnlrcVdyUipfVzFMT3ZydHdpMzFgaSl3UWR6PWwrdU18VTQxOTI/aWlpdWtlTDtYXyVn
VmQqdXRKbmVXTzEzOQp6MHteVnZreSVAcjtoc3xfWXBZaTt4JksqcnFFRU1kO20qaCtqNFdgSCgj
bDt5Pn5CMFMpVTVSfUsyayZIYGhCYE4KejRLPH5OWl9vZU1LQHxKXjxJPmRmYj8tIyZxbVBAMEJN
PFhRKUFxI1huR0x1UiFzNDZALXloMG1KS2duRXRxY3t1CnozNiR2XkJoNDNlM0Z3clAyM05sfk5Z
KFA0UHVkUzMlVmJwTF97ezBwMmx1RWdOY2NHN09LaTUlTjtTQnR4PVV0Kwp6M1F1dmpjMD5WQENz
b05acmpYKV9sLSl4KVRgfDU/Z0VpdnwwQGtQbFhWQyleK2NScCE0OUhfLUx5UmRkYEZ1YjgKeiUx
d3ZFdyM4fnl5VWAjcHZUc0l7bSp4VGM+T2I8RWo/YlZ1SFhMQXJNRjQzSnlFQ2ktXztjflZoK3w8
UjFaKEY5CnpQZ0dTYnNPcWFePnR2Tzdedj5GcSYtVUBBNFAmREhpKVgoaiNGWkJ3YDdPTjRMKHlG
JUArSylIQmtgLTNiU2RNUgp6VkhAQCYqU0g9RzJ6XyRNMX5VOz4kbTN0VTd2VnY/UlMrMj9CdkZi
ZDNZU0pZNHA9IXR5ezdUYHhDR1Y9M2Mtb3IKeklQMFh0d2hIczJDSDxZUXR5LWB7dHxIU2hyZSpS
RCtoKTlMTEFxO2B1diNjdyVIKk9CR0NpRCFxSGdGNnJHJU42CnplQ2lfTVcoWF5HMmFLKHolYncj
blZlQzs9UlpnUm0/V3dpTz9tbGJPelZZeWpBJkNqNFotcHJTdCN9WiRzRENqMQp6e3g4MnxSbGV+
Jm9fZW07dihwPzEyPz5yWkxObWo1PmYhRyp3ezZ8TD0rMiYpQ3FIYW1UJD93ZSFJc2B+RHtabF4K
ejwrYEslZHdgNjUyYmp3YTBHQVItaFE+PEJnYUhFJXAqMHMjbXhLejVWV0kzQCVTLUAmOUV3OHRR
TEN2bDFYNTJUCnptN1d8PDVSdUtYSStkRUwwNnRDVFlDYWw1bzYoZWJSU3BIO3wyRHl6azUjTntV
P0M3UDgyfWEjN19VY3d1TlJCJQp6ViV6WmN2ZXpwZko7Yik1RVI0Vko5IXFsS1ZFaD1MVXdaY1pt
fHR8LV84YW8rYj9jbnI0VnZRRVE0ZCtUeDFPJn0KeihMfjw3RE0+d0VFNVl4MG5afGcqQURMWT5P
Nm99dVlBQHkhJHJ0Tk1tUmMqUDVlSFJ9b29CZmQlZn1YZFRkJF8lCnoySWRWfUJTZFZnKkF2YGFk
TVdFRnN7VHIxX0hkaHA2WXdZP2MkeTs2TFhRX00keGcxVzJrKk91UWlEYnRRU045cAp6dDtYRUA+
PlZwQlhZYTdENz59cThKMW5QdWJINHZAWnJBR0lHbCN4QVVFQyhHUmQhOFBuNklXXmJsQzhDVjlk
UHUKelNzREZ1QD42eHxCfXchUC19SWBOWWoqOURaO2lScVErd3NKdkpKZ0VhOT09UypTSk47cHRT
JVU2PlNVekM8KnBUCnp0aHF4V3RKXmRATWEwVVIyKz1qfXEqKXZaUUpJPThyb1kqMzdiP2x3dmZK
V1VlMiNfSVZ7Xms9bHFqK1RBKVVzNQp6ekZDJF8+bkBtOyQqV3MoPG1OO2smeEZQb3FnRE9gNyl+
eks0aGNtcClEbz05N2w5RlRuO21OVjl5ejhmTXBZT3oKejxyaiM/aVVIdVBGOUxTeFA1QzBxWT1H
QTR6KilZbyt8KVFmPTJ4MlBiYkdrZz9UT0VFLWZZJkU8Oyo0S2lPaU1MCnplZzRNPSQ5JHAmSjRf
UkVyWUcoI19kUCVEVnJpRyE+R19mb3dnUF58Q0xLOVU5JDwhVVQ9SH5nUkBnZW48TUpEbAp6K21P
WC1YNGhSdVY/QmREWHEjNT03SzNrMFQmd34wNVEkPC0xKGBgdUJWPE9oTyZASmU0JFhWbUpWXzV+
dGNgVXYKekpNYDBNbz9EbVVeRiR0Ykg1Py1YcU10PmwqRXAmQyRQbX05P0A+Vn1lWUV8RiRGemF5
c2pKYEtGOzNmWGBwXkBFCnp1N1QoI0kyXz19diQzfGRMZ2kkPlApRT18NTVhdCVFUlZ2dFdjZSVo
V0VLWH5RSno7dT9qWCkxT1JacXhTQHZWfQp6QEx4YGktTE5NRTRodjJWRzxeTDVzU2JBRDJPcylT
emYlaUIxcD5aY1pBXkBHe2Qmb1VeX3dLKDRLYldCP25YKVUKenlRcGBQO3lCJUtjN0RhdjlSayg+
QEQyblV5ND9ZSEVoNWA/VDtCbXZKMVZiMCpnWmY5djZ3KUskSzJKWmdnUEZuCnombzstWCM/PkQ3
JWZUdmdrTHlfTmxNRUdxRj5OVDIlbzI4RUV9QzxVQkJRUGFjRSUkNzNeOH5lMS1UaHkkRX57aAp6
VzhERSgxWip8UXNvODk2ei1tQilLVVh2a0lUcHJLNjw2b0MzQnRKI1k5STthIWdHelNZcmRjaVE/
cWhxcHZiNGUKelFTWjB1YnVATENQcWtfRlBKXiNzPihqXzd5YGtBKkVjdyUkYWc+O2IlejxaOSV+
N1hAeD8tbDQ2VSM1fiNqRyNkCnpDRFJUKXY8KX44JEU1NFFpfntNQVQxNUAqNWEod15MailVdU4o
aW5eenc4KFl3MXVzQzNJXm8qdGRTUlk4PUppSQp6bHR5V0wkNnstRlg1elZCS01RSzZHfiVEbGo+
JGlRM1VVN0I4aTE2Y1l8TnFXSUx9RXx2MDRfZGE7eFhLPlh6JWQKem9eNWZManZ5PUwmQ31rN3VD
UkVTPUhsRjB2LVBONSl6b15BPUdJUCg0eit5dndMYVNGT3VEcEs1I3dyTiZQLVY0CnpiTUlxXm9u
O3RfKlY3T0BKeygyM0tKYVZfIUNidUA4UjRGLShvRl4qTkhIaG9HQjh4NmlzVWZicCppT31raDJW
RQp6Nm82dyZBZCM2JEdOe21WMmJBWERTJHhnfT5MR1FwQXYjcjdqMlZ6RTtqIUJRVnMmIyswbm9M
OWpea0x9dGdwJkkKej9JN2ohTnRAM15Kank2SjhiYHVXMTxaY2lhVUE+XjNJTCs0MXFWbWdXQEl2
SmZMVjAwejZnX1VNcEl3ZilvWD11CnpkRXw9LWAtYlMoQFVecnEhdjFBUj9fTWhfV09pPSEkd210
b2p5fW1WSExCLVV0fU50bSh6Zjt2YkwqZyZYKm8mVAp6clg+a0lvI0c5UWpaPnBMZ2lHU0cpbV92
WG5rSiE0Wm0jckFKQjdEUzZAK1BBRHo+OUFjak8rZlA4ZypKPFhudSUKeldkdWRnQWAjMUBTTHt3
VDBUd00+JDMmPlFAR09mVjR+fWZBSU9ZMml2ZjhyVjlTQlVRSGo7OUM3YXdkPT84JENrCnpYO1ly
KWxDMFdvSzVOPEojMlRsck5QZy1ndjVVOXVWZy12PGxJbXQqbUFmSCNGcVo7KGlmRWAxaXIleGRI
by1RYAp6ZWRtYHhIb1R3VEJzcEhMcV9fK3M3emtVc0VndW82OClSdzVeRT4tZ2BscVBTUEtDREo5
NX1FKjdiTUJuYSFyKWcKekFWK34+RSNwVWV5VGtxPyZAQGNwa3I/UEg2QVhkfiRsWEozJDxzX0RW
ZE9lejVLSldaQ0ZiVzRlR3UzI0ZFSGsmCnpsVzdyVGlYIztmc3xWSURJVHxHejcmTF5qJiUzbylG
Q0ZEPnklc0V6SVQqY3hOPFJzfSUtaVR6X0JoN01ZbGNAUgp6dFk2QkckQWs8N3spUGViSnklYzZI
aDxNfUA1WntHK0ZpOCRtZk5DTmQxRURhajttY3R5PjFANmgrNGIwWnE0IWIKelRjPisxWmRLMXtH
NihSRCo7anRiQldPJDBIbit1fDZpbF9aZ3dNMXxkUU9FZD8kaz1CSEleeXZEYWIxe0pAaCN2CnpX
WUl4fFR2JUchOyNXT1IzTmJhSyQlSCR5ND5adm5oRT1GaWUwVGJ1QGFrMnJEVWJLK0ZCWSZecyto
WkFYUHhESgp6KzZXN29valBGeipnQ1hsIzlAaD5EJDFXRG9YRWtrOHgtLVJ6RVBWNE8jazQkKiN7
fHlvKGk1M2koUz9TXilUXmMKeipiS3hmRXRKQWpqcT10VmtZVzA+JSU3akF7XjhIR2FMdFBZVlp5
JEVQZ2dXPVJERTklUUJCRXZqbT1oOT1ZKUNBCnpuRz8+JTt1UzJlJH1Bc2BtSjIrNHgwLUBlRUVT
NCVvdD1wMlhSO245UjNpJH0xZTYhV0g0RTlSNnZ1NnRjOXBlfQp6Xk5MczZSP283Yjg1TVV4cWs/
RXNxZExOPExvP010dEBjIzZQelhuXnstTD4+PEZ3WE5oMm57PGc4K1BMTCpWeHIKejVjOyt8QWl5
WWpBMkVKaF4+Uz1KNE9LYmVTJCoqenBxYFlVP1glSSp4YUg1amlmY0hjblJ3dT4jNj9BUkA5ZTZH
CnpwfWhHfnVkaUVpJmkoNCRoe059R0creC0xSGQjLVZxPTU0dFhhPSsqUn5kWTZUUyFAJWBJdG95
PWtPeGdDVjgrJQp6WHNZX01edmNnemY/JTIheCVOUEUoI1ZGND4hSTc8WmVGcUVZN3cjclljdWlu
SWc2X0BAWVRKMEZ9fTw0KWM2N0MKenBDVz5BbnZWK3lUdnh7Kz4oZm50MUFYS30pZk1JN2FyKmhh
WXJmISE1c1I7RHJkbVItbSlHaVJOeGpuQDxETWRlCnpYMWhNVzI/LVE3WVZgQlU7Kk8xZkFwUmls
aCRKbjNAcHVqVGxYdjh3QjBPVCNrWTdGPFRMaXhCdz05a0YmaHxQfgp6TGl4Y3BXNnJEb29GK3FG
b2l6TisqSzI0JVFzPkZjS3g5NkFpbzB8VHhpaSYmNWVmV1o8NyRGKCp2V2VJeX0rYnwKekl0JCV5
S2pxQD5Ubz4mWHJwWSoqKW02eyhqUXZUPEZYXzAkei1AVFZUNGdtNnNyX299Jml2fWpTfl9YPlVW
ZFFCCnpfVHFnPEZheXJTI1EzP3lZakliaVk0KClNTHQ5cF5JWmg5SzhTbD19PUtWbX53V2t+elY4
fGNXQlg8PEFGMEleWAp6WUYxSjclRCRWRmFsODckPkRaKVp5ZGJwbj9UU1UxWmJVY3YwJHkrdntY
SUJrYkhRRmY5PksyeTs9Xmo5dDI0NSsKej9QX0tjbWA8cHdrUFBOYTdNJlNpdlNrZn09dXVTS2Va
OSVFcXdTXlRUTVhmM0luUVV2SFRhcUhzSy0tPXhyTntPCnp2X350VyN7d2h4O1VudEQtOHF5ViND
fShzK1IkOHxIdWRJcW9JeD5qXi1SfH1VWDxmIWAma3BXS2lhPXhue0A0eQp6akppdHxSb1dRbE0z
ajItcilwfU9ORjc4WGNGY0hCYD1LQkMqMnE8ciNqOTw5dUg5SU1EZk5wT1Qyd2xBMyZwPCoKekJD
dkBaKk8oUThSU25QOXVRVFJNJXwhSXFuZyl2NkM2eiU1VFYyfUBmNk5RTj1GNCUzblVoXjhoK0Ax
IUs2anJOCnpKQWI+Yl9kRTNHO1FXI3ZNJjstOzdlfnA7WFVESHxHKF5oUTJySj92MXl9QjZ7eUcz
RWliT1Rwd151ZnUtfDRYRAp6IyVTemAkOUM3QUoocGdOankwZV5ZUD45MTwjQjNfMmx9JV5PX1h6
T2xzWURVJDxOWWdabDNwN1FnUkJVYj98S2sKekJpTUxKIVBMcSpDJnk7KEA4RVZgRzVsRlktOEwy
dk0+IXpaRUtVPSYqWDxqWnJ4dEgmY3AzRjZWPVJ2SlRVX1UhCnpLWXYmcyhJbFdQND5MQHNvMSEo
KFBpd1VeTXJrZ1NTJXRQQGZXdE9GXzQlUlBgSztRQj07RU5uN1oldUchMHA0LQp6JEBFOys4b3dw
V2U2Q3B6Jk5PVEl6VX4xWFFARUMmOURNfWAmJGNaNylVUD9TO2RmekBMKzVEKXNuJlh5ZV9qNi0K
emtHPCpGcW9LSTNjbjIrMGB0SH5gQVYrTllJe0RDSHFNVWtXRDckfDdxPXtnQ0tibjE2Vk9jI3Nx
T1U4SUc/M28zCnpFN1JzJWNCVXw5MHpSMm9oTz4/cHQjK3tjQ04hbWYjYHp7WV96JipHcjZqbEZH
bmRENTQzUmB1ejFsVC0lT2V9Jgp6N0Z8bE08UHApUCpDQlM3aWBVPFFOMUk3YWZ2cmxneUhEbU9z
MipUcSVCNT5iMSlncUUlUmIlcWBHdGJjK1ErdyEKem05e05DfEhyb2pNSSRgbyZhMHdqZ00pPUhI
TT05SnlCWEdIPyNtfm9uI2Rqdl9QbDMpSmhHeVVaRmd8elBSYmFKCnoyRDN8eiFmO3VhNEszc3Nq
eiZ9JldxcU5nKkNLTHpWYiEmJW0tTmszUndtUTIoIWFrN05peDBTQkF+PS1eN0dMWgp6bF9JZkNy
eTtWPnd4ST1ATiQhKjZrYiMhQzxCcGBVYzg9KWJ7WS0xXzM8UHJ+RWRnTj56eEBEeF55biNhck1O
OUoKelRnPVBkdXNGKjdPNEM9cnt1KU52ZExmWT1iPkBxUCFzVXhMQmIkWllWUXJAP1VmMHRgdH5X
b1Eldm9+TT15c0RKCnp6N2o3TG5lIUtjWmlsMlRpe194RHtwUF9kS2FVJUtZZ1Uld0p+PSR4WkMl
Zl5lWCh1VXJIaG97VWg4ckdgc3UqcQp6SWhEflR5N25mbGQ5bk9KVVI/VzM+Kkl6S1lvYlFtUDgm
SWRLJm14Z2wrd3JAa24qTlI/dnJ3TD11dytpWSkqbm8Kel8zSGB2RXQ7PXMjTjNrK0xzLT1uWF8j
aWpWPVVFOThhWiklVDYlWiFDK3V0N2QyUT4/P0JTNGhjR2RRTWV3bk1lCnprJWtxbV8lcj1tMU13
Y0VhcT8rcHlaUnFAend5aEQlUnMmZiROPVQhTWIhMmUwVTdhbUBzRilhKlgmYldFcCYtSQp6bjBN
dXVleGkxLVhoemtYI1NAJEhhT1NQMi0+NX5nNzU/WGM+JGpaVndiO0ZGYkQ7TkQ0LTJmUGMjdjxz
UXJKMEEKem84KUZ0YzNZI21zP3ZqQXEzeEhwQmxsYmZeZT9qMVNAIWQ7TmE0ajckVypSSno+RSsl
Q3FPUE0tUFM3Y3NjNSlpCnpaYUJOJVk0NzYwN2hEZ2BvUS1MQ19KaDJzMihqfVVIbTY8cj0ybk99
UENQTEU+eHB5YzghSDM5TFM+TVZaKjAmPQp6Rlp0VlVsUSZEeVc7dnl3YCl2IUhYKWhlYmF8Y0o1
RWB1XzJleSRzUUdefXpXZDJaPShieCZiaV9PJHo+P1B0PXwKeiVFaGw8Y0duT0g8RGtPJUFEM0NM
QE47ZVJtSGdZfXY/YldISktTT2AwdU1kRnJDYDUjPjlMVnx5ZyVve2MhfFIwCnpNb2lAb3RMZV45
KWkhUm1aSER5Z2BFVEQkcGplRlIxaFVpVDMxPzdmMFNeb35DbjxFb2tMSilCMDshRWFifWg3Swp6
NXZvSThQQzBsVENIISR8NDY4Sj1namImfnhhOHJtdEt5XzMhPDBVTUpFTmVKbz08U31lSUBDOF83
Qj5gMHB1VWYKemA+ZWQ8REt4QGVaKT9VMkxmI1RwJEEtVTtNR0RTNXJubFl5Wk5eLTJBKF9OO3c1
NnxxcmVDZzhheXV1TD8jYlFpCnpSVjhESiVCYWhGKjZ0bWJsPGheVCFKYlc8Mi04SkZxNG1vUGNF
bnp3Wl5AKlB2aDNjbHp4dnVlPio4S1BqcEU3Ygp6ZEVhZmd5WGl9X3VReVk2TV54cihJPGppYj4k
aCslV0JUfT4lPHdfbmpDJX11V2o4azd4ZUl2ekZwK29EcS1YZ3YKekgleysqZWtPemVnKkJeckBC
fmhpIXlZJGA4S0ZuS1ReSFFYJkF1UjVKMWpjO0pvZEkqeiQla0ZkczByOHJxK2BRCnpvRCtmLSlS
c1VXVD9ASEJDWVZRX2orKTRrOTF4cDFqJW9KSEdvXnxINjdJQiRrTERma3xFPSFBaWtLSEZVe3BB
Twp6eiREUTtiaX0rbyVEVSFiJUdIRFglQT9GZDQ5fnFOQGJ3PkshKnVicCk/QG43N0xvcCY8Z3tD
OWYlK0E4Rjg4RU8KenNSSFpta01nUWJEWDE1c28qYFhLbl8mZmlEbW1vNXR6WWtoWlowaW08P29F
cShXdiZzIzlQVzUpNmh1Kz84cWF0CnpmUkExbGBHJTlETFFrakArdHZJPTQ1VkJPYUBacEF3NSM+
RDh4UiZeLUt6SHQ9Uzh2IXBgR2t5UjMkMFk0MlVwYAp6ZGojJko0QjNQWCNZKCokJGZ6UEs3eStH
Yz1+d0tfeDJDZjR5Y35YQWV6PmVmdWY+ellXeSFEUmdLZ1BsbHc2OzIKejdMaWpYI3BlLVNvSmJV
JXdjSU9QQURnTml2Yk1jY2ooIVUkNlFIRWVBQUota0traVpCQzh0ZjwkMExibThlZkNqCnp3cnY+
NTA1M0J+WHRYT29iKjdhTSgjV0xZdj9Gd0JDIzZVTzwjcGhYQyZWNmxxOyorMmFmSXBmPS1aWG8w
QG59fQp6VzZHU1AwQj4mKHw3OE43MGItS3k8TEMlRzJeS2s4SVJyTXs/PUgoezh2aWZ7Z2JTTW4w
IXFeIzRhK1VSa2ZzbzYKenVlVDFHSEQoZ3hUJlN7UjIpOF8kRk1kKj9eTHR3JCZ6O3UkP1E5O0w4
NW0zVWgzcGBRcXZ7SWc7fCE8I3JwT2FjCno+ciV4TnR2UGZXQ1BsLUg4UHE2NiNxX0F6bWFYKk8p
PipZdU9UK0Q2VURvSnBJYTkoISZeMk9teUxnO1JxaUQxNQp6eSZWZTdSYllVVEAyPCgydmN7QUs2
PllWIzRLeU5pMnhlOXItcXpoaUEzZm9LVld4U2QoWSo7WjJzJUZRVj4yaEcKenFKdnhTQVBPfC17
dTBiT2NrUzF3ajA0JjNpO1k5fHEoLXUmOEczbk9JR2w+JGBjTzxNTXxaTCZ1UzZEVmFOJEtxCnpg
Q1JeO0ZBfGU1X04/K0Bse19CYF45VFRIUFpiKDUwX2M3WHEoXytTY3dtSipicktMKnFHQzA8TkhS
RHlxb0goaQp6QX0lJjh3fHR0Q0l9ejJIdE5YTHZHP2krITs4N3RhUSNnKFE0THRiNnZHOyRQITc3
S3syNT95TEFZa0F0eSlJfC0KeiRBVGJuWGlVVnFiJitEQmN3TXgzZU40MXV5Pzh4OEl4SVJtUVlh
T1JDNmNJKD5xUmxeVj5lMEghKFd6RUVEem1XCnpKdkNoLXpyNjc+PDE9fkdgZzE+Nmo2Knh6ZEJr
ajRPKX05LShtN0xJUzY4PmhgPGIrKmtoSVRpSHZkdD0+NCRqaAp6Tj4heCRvXl9BVXNgJkA3YjNk
eCFsZT1jMG1TSG5BLVR0UW4mQXVkYV9GR2tyVztKTSZBJGUwWTFxN2VAV0o4fU8Kek1sOWwwUFU3
MHkwKllNOSh8KjI4eVkwXjIrbn13fFl4RFFjcTNJUjBMNmRweSUwcml7TCZfZVFoYyZNWm9uRSZo
Cnp4cSsxV1ZgPUdaczw+VH1CYGMyUGxFdWU2UmxkPn02WkVIaGYrelRVTzQ/PXkrJGNxb19WU3R7
dm55P1IyczhSRQp6c2dSdHxGN3N2WjlLY2tfPlZ1ZDgla29jO1NNRzUhUzM1aVhlUC1vOCVTVlZ1
cnJOTnxUMzVafFlWRUQtUHJDR2QKek4qfjxTNzRNcFVgfDxJRUtVO25xa19ZRmxGLSZyTmcmdSsy
OWNPRVArbldzPz03KC1oMil9Z3NFe1Q2XnFJYFlxCnpxLVZwQTRPMklRKCErT2k4ZlMwTG1nLXtJ
NlJuK3dtTEsrWU1RTjN0Z1NIYyF3amFoXkt3aiomQGpmMFVpSFdrIwp6VStIN0p3dSpCSVAwb30w
I0tlSHlTSyQyZSkkMyQ+PkhmQ0FDRzB0QjxufDh2QDQ2eVF6e0tpSUV6MHkqPmo3RnwKekY+S15L
SF9+djVCYDMrUC0/TnRnUEVLNyM5Y1goKVpGT0ZKbHtRUGFXZUx9LUJgR2AhZWUxSGxRQ0MqMSlU
JjJuCnoqQ3FlRF4jSVdgKjVrfWczdEV5M2xfNClGSjdTbnNSVHRjbnlodXdHQCFJUE9JLWo0cl92
Xjg3Yl4kNjZfclBEYwp6YEApYXc8M25BKFV1czZVbjI5Z3dra2QkY3tHeEJ0UFJ+fnI0fntFR2pg
S08rbF4xN2piSENWVHdpcjxgdEB6bEAKenJHZVBGSmg4fWFvYDFaMkR2OyRNVShRQzhRXmMkMG4+
SHAjVVN2MVE5SjtUJS1rUUREVzleQyRANClVfFF9b1UxCnpebkQyU0ZUWFBXZH1hSjgzN3FRSGND
cFVwMUQwWjEjdi1ARnBRPjBaM1ZrUDQmZVp2aXckbSVQTkJ1Sm1PKWskKgp6KjMrOFNLNlY+bXdf
JXRxKThkIWtOZ3EpK1VOcTlWNW5yOG1RNGpyNWo7MC0zZT1uQ2xkUUV6dHp+WE9wVHR9VTkKelZp
QXRfYm1ee0dfN21lSmstVWprRnskQk50NGpTe1d6X1Bybkh4dEJAbGZseHJAZnFhVF4hentKZUAp
SnY9d0p6Cnp8TXJvfj18K0NoQyNxVjkpQTk7aWtOcUNQeVVyYFp3d0E+JXFjUlUhSjJiUnRHfEMt
bm8hazE+Pz5VSFd7eWdjKgp6Pyg8KWwrVXxRNl51KiN5KFU7ZlJrX0k8KkI7RzRWKmtnUDUhNHBI
b0I+d3l3dnVfZUUrYExfX3xLJkh2LXJ9fiEKenpuPGooSShqUF5ZRGQyeWJrUSlMYFUzZ3Q4PVlh
byg3THtIdiZ1a3g8JXI+biNtYk1iJFVpPkYhVlRGKG5paldJCnplSDBfIShiUGpNKTwrdU04KlZN
ZGNFXn1tK2ZeOz9eS0dCYjg3eWQ4ZHEkZGhKTklwfS01RHoxdVltV1dVOVUqIwp6XmQwRS1CITtG
RXRQYk8ocXlZb0o4Pj92N01fUTQobHx4a2g8YD0wUCo5MUpiKUIxSlV3fEcmK3U2P19eWUpRYkYK
eiQzKlA8YHR5KlFVKEhldWxWaFY1PyNsPXF0K1kqK0lPWT9eQWQ5K2hOdkNxdSQqVVQ7cUp9Nylk
RWRgJjUxIUtPCnolQWZZamY0U0EkU0xCMj8pQXo7UHk+cVZwK2Z7QStlfCMwdmE+eDlUO2J3QzhE
eylnbnBtWFdESjhkaExuRGs4Ygp6VzFyP0AyKUN0V0pxRWZXKCVzR01WTilEQ2BvemtzZCZfP0JS
RXx6dVlAemwpNktDVjJQRGBxQ25PO0VONSVUSFUKenY5eGhpU2pibWombXZ6KGY5YTxgYz5WYXRa
Jn5PMkZZI1c8RjY2aGtCPkhZeTxpTntDeVQ5I3l0QmBlfnFUNTxzCnpUZkRlREhzUHkwQkZjfEVX
dGshPkIyOy12Rlg4JTxPVGtRZlhTPTRTUzNEP25HUjI5YWMzcnF4SWs/PSR8NjxFUgp6VWF7VyNH
b3BWcTw4RU1OT09aR1ZANmEkfituSG15czMpVzA/Y1RLQXhoflIhQCNJcDREVGd1R3F9VzhCU2FU
e3QKem1jWW16dn44ITFDI01jIzRTTSo/czx6RSRwQV81cD1LWmd0Jk5NOGtHfm9OXkFQXiFOQVB7
MFVoKWNNSnJld0FaCnpENDEpMzB3STxtRS03a1JXNk0tQ0ZYRCFYckRtcFdnU2RuIWcoZyYlNFgm
QU94TXBjaStjWnx6WX1QYyooISlJMAp6YjZ4TVpgK1ZVOG9POEpFfE5afns/a2VuZXtPcVVNRHlJ
IWcqMDQ0a0o1am4kN15aVmJYVmxlNlleMUtRd1Z9YkoKekhmPlQyd1dARCZUTXsze1p7d2RHbklg
TzZvcGI1SmgoVF57ZCNpVCpTfVM2cXhvNkhxJE5XJVdLMENXSzxeMCYjCnoxNHYldGYkKGhmQUV1
cD9MdzJyKi01a20qOGlmNUJjak1iQjV2Mzk1WW5lPitzXiskOyg3YyFuNW0oM1djXyN9TAp6PiVh
Tio7YFAweytGcWAmWio9UXhaempfMSV+dmF5KWtLI2sqTndJOXNsNz85KzVGJG94TVM2cFV1JE8x
eHdvI3gKejYzY3FAKEBJK2p2ODVvaE9SO2FCdz58X2xDY3JPIV5aVTh2NkxSZEB7Q2k8ezJHVXF7
P1RQN3gxbVJTeiNefHY0Cnpfb0U8YHBHezNAYDQ3MEhUTXRLMFpGfXdlP2JlKjMkcV5DeGh2OzBk
KXk9YDZidGw8UDh6OU1fSHhTQ3BNMGVlJQp6YDxRN0ZleV40TDwqIT1GOT1jdUord2h2SFJgJSk+
T0J8Tk50OHxLZXpBc3xGYzFBMisqIStHc3FqSlpgbiV+fj4KektFdDdabVRZbChJKEtWUys2a3Va
P3dFY2c8b2cqT2JfKnxnZFRJb0BTJmN8P19qej4xQ0V1Y3UlYHM8UmtDRFAyCnpNQ1hiJj5BQiZo
VVhlZSVSdHckVHJyNCFNUTY9PERTaj53M2gtZFZkeXl1JTZKZUlDZ1VrcXJ6SShMcFVRakt5UQp6
bXYqZS12Kk87QU5LJXhXcGx7NlFJdzF0MV5QaTdyUzlXMn5HaV9zM3Z9d0FiemtWJFcqUjt7QG9Z
VSE3OD9HYGQKenRxKiZ1YzJTcHVVaT1XfkUpN3VtWDApRFcxT0AxdzxiMCFxKWZuQj1ebVReQCkw
U05CJj1sWCtJM3xJITlhRi1sCnprfUdvMDMla2V+TUI1MiglOVJ+V3VhR2F8LWBnO0ZLaDx5M2VH
NGNTaipRUDdfMyh7LTdkQzh8UEl7WD1MRyQmXgp6SFNLRUxtJXl+e0FXeSZoMjNndT50OTwtZCNK
P05JLXN1Pz97WTJZYUl6TGhhaUw0amtSQThGcXp+Y3Eme19uRncKeih5Z1BuKXshKTF5PkpWaz1O
amVrJFY+Y0dSZilraE48XiVReGdjN3ticDhKN1oqRGUhP0AoT2VRdjhheGNPKyhnCnpDcXQwKnZ+
dnB3UilkcmBSb0BjeW5xZ15TeDQoQ2EmcShlTV93NCVudn1eaUgoPjdoZnJPZ3F3eSNqZjBDMU9l
fAp6JngreTNwa1IzWiUxMDR1QDg/P1lMUVR0fVg4ISM5MXwtYFJPJnE7Pi1YQHtaTkQ7UTwyY0tm
Nkdudmspe0lLJUkKeiZmcW54QkZ8YyRIUlRrUit0bj1QbXtMNVhGYjxRKzlRbW5KTXt1c3RQJkxm
OSFEXz5FVER+aWMqKS0oUEtPTW5ECnpMJFF2YmA5aGh5RD81MSspekxuSF5AU3skcDQmR0ckfWVI
K182YT9WcUI5bGRfSX5NLUgjSXUyQipTKVpYSjRlQQp6OFpqWit5fVFGSUVRO2tQMmBfVSR6VnBA
eWpMSnZYdUM/dHNlRU5eYWA+SmpxYVJNZiVhRSFFQGh5RmM2KzcwR0oKejlKb0hTYG96V0d5WTl7
KGVLNVYrY3lYX25eVm58Tm5YIzs+NHE/dClKdz5eaC0jKTUmYlNSdEdNY35Bd01jZyNGCnp5bm0/
N1N2eHtLSVB5QjdJT0RWXl81YUU0ITJTTEhwc3RAMXE2TFA3REtLKUwjcFg9bGhOV2VleHdKZEtj
I1ZIYAp6YShIQ2J1VjRLK2x+ZmN4cmR2KlEzWjVjekAtX1k1QnpCSGpzU3ZtYCtESygxNllRTkBw
VU9BTiEmPHtPJSVxO3QKemtzQyF4anpjNEE4M0lnJnk4OT5CTXxNUlVafS1mZyRGX1Y3QG1mckw3
ZmRodSYyaSlBPyU+WVlfUHlASWx8cFZDCnpvTnFefWh+UVJhMjhINmwjbStFeEEhUkIkZjVDJjN6
Q0J+RHtZJmh2T3hJPmFmSzJqX2R8IUNWOEBIVzxWc0UhPwp6XmFDNGJ4TlEkYkpEK3FXe2A+STRM
QSs8X2gqQDlPanheYj50Z0g7fmdtRHdJbjU4O0FGSkNtZTlrQDAoYkt3eFQKem9QRTZJTUEhcGRf
TytKZD0wQChtTzJeV25makNrb3Q2bGYwclM3SnhFQylEM3c+eVZBanMxP2JANVopJmF8cjhFCnpq
bzI+Xj9NKG1KcDJRTiFPXjwraGRyUz1aY3kyRW83SnpaSzl+VDtMOzNwPWFyNlR8TEhDUiZvUHM4
JURydHI/dQp6d2ttPk1XR2ZlTTZ5Vj9SMTBwNiopQUglJUVCNG9vIzIocVReVXsxdVh7JTIxRVpO
djttZkVKVWx1WSk3UkBnLSQKendWNmEqMU4qP3AoSEcyd0ZEI2NJMnlraWNwTDlaRF9qS3ZoR2pg
aH1RYEFxQyh4O0AqVUFRbGd7USo0Xlh0IWVNCno8PFJ9eCMhYyttbTZ4NzhvU3l3Qzw8RUZzeEUk
UXtCUTtoelh9Q21lKFE1Qnt3aUl9XkBFPih3cHBRXmQqKng3LQp6XkRBU1l5SElZNnxJeWlRJEEr
Uy15JUcjTmhUV0FKSDA5ZUAmYiYmRlVrWXJhOTlVbi00PStFLVczUUBPY2RsMzAKemQrV14kP0o5
RmRLWkUzNUNIQW56eU9KcmpARGg4dDU8aXQwZ3lTNClLSiZVPzY1Vj8kWSpuc2JaIzI2QUloNT9P
Cnp1QitGU2QtTFpYemZRbjhUP2EmeUsjey1Rai1iOHwkNnIxVCUxYHtMIUktYCpjezswNEBEN1k+
IXJROEZaMn15eAp6T3tlUmkjJmREcEh2d19RUz5HNl8qQDNtfCtNP1UrYSQkOTMyTyR6QSh7Y0FY
YiVvfT8/dEdDQWA3MyF7ZSZ+VDQKejVqS2FPaVpLNz8qQjtqTS0xb0YhSkFTfDJzfmxtJVpVIWI0
RTQ5al85WUxgJTMmP1Y5czhMfCsrPGZaT0EpTC1GCnpwN0d8bCNnPz96am9WX0Vadyk3PWw2UCg5
MkVtTitLZ2BaSC1CPz1WWCpYQlV4bnAhO2BfQHl3OXw3LXckfXslOAp6WkApYHpZVWdgSXgoPHJi
MFlpT2JMN2V7WGooRiktVyR7V3lEJGVeS09IeEYoUUpCOEwtQENNQUlfXnd1dzd1azQKemQwMmBu
MTlTU3dmJURTaGQwLW5VVyo3MSpifjVaX21oVE8oN3R5IzkqSDRmTVo+WFVKUXVvIXRzOUdmI1pX
cXE7CnolTUY5UjV4eX11YXZVfjI3Q0ZhWVd+WEJBWUROaUo+P2BwZ3ZjYHEzQ1RCRik+S3xhQzEt
UHRTNF4mfD01SmI0Vwp6VnQ9I3VIQG9YemxGSE45VDtvMEx6TjlBbzBxTDQ5M0ZaTkEoU0pUVzUq
LWxSQ2NIVGk/KzQ0eSNQRD1GOX41RkcKekhTbXcrK2l5UVRtN2FMcz9XLXpwM08tJXI4X155QnFp
VlooVjBxQD8lTkwrejZ0YlJ2QGpBOGpfPk1aTiZEVXdrCnpVK2IjX3ptPFF7RnQ8PWo+VlJiRFM/
NlNQYSFKOzluamYzNSgocjItem4kdDtQa2dlUWVlKn0qX1JQYzJPe2wmMwp6bE9LJGghbmpvdkFy
PzElTCUmNWE0e0wwOzloZTdzZ3FZbWBjVEc1UWklKGhlMGh6WSg+IUJZKW9oQ19MTEQpV0YKelZY
ej8zVE8oYD8ycCF+e00pZFBXYVFUa0t4cllOd3JuKTE+eGtSciomKCNANkhafCkreVVVJFU7PXsk
ODl2JkZXCnpaXzVJV2tXal59PzEmNnF5TElaXnduTyh2WmlLemFgd2F7ZUNNTz5MPmVVOUh6aXht
KWRgOENZd1NscSZGS0dSTAp6OEJEcnl7RmtxKzFvPiptYi18Ymx2UUpxYCREPyVUYS13fDAyWkIq
P3d4XzJjWW8kcGx1Ujg5d3g5XjtMI2VHfWoKeiR7a19LWHlGbjt1ck5xVmQ0ZmpScWBgdjV5czMw
PUc5PmJwUG1LV0EqZT9ObDc1OT9lJklIdVluZk1yTVJvU0hCCnpeOUgodjAwXjt4Z3BHOV5EaGpF
NnIhQDB2NFgyciFwdD1sTDVLMnR8RE5XNHxBZzBGOzhZVCVTYSNoNyMmSnNtMAp6S2x1MV54SF45
eVBHajFNclk3U05za1BDUCZ9KF8hP09gNWdDWlRQdXcqYT9nV3QoVWlkM3tNP3RhczRrNW5nNUYK
eiFxciElaV9RXjdQeHk9UXBSK0Vnbik0TkE9JUc2QDZ8ejFHUiQwfnomPiU5fGZGdEE1R044N1Mq
KCt3QG9LcmdwCnpzbi1kPFlOZkY5Y2xrKzxrWGwoYFdvaXJrQHhCVGotY0JuRGZHbndvTEZ7NVA/
PGwhd3BhTFAyMk1gRUFvOSp3PAp6RDtmOThSS1N2Tit3WiM3VkNSc2J2TlFsNE02djxDXitNZnNR
QUk4ZTl2dUg1ZTdiRV9hbDtMX1d8NGw/cXZOS1YKeiVCMDwmOGVHSjI9TUZAXklKJiYkQlZFRnEl
eTRPR3l2eX1vZ0xobnFKPHdNMExNay11T1NScGp5TFdKKz11fW96CnpUd0BeNW0jJTNePUA3PV4/
VTx9bEA2Mns4OEtGVXZMd3lsQz5GSVY2YSpEUFcmcXpFPy1VOEotcG1BbjspaGckewp6VSlDTzA0
aEBOVEFVQkdBekQ1YzQ4fnx6Xz5kb0ZjdnlyUENOYUthZkBLRE1vNXooOXQqayVNVkU3SWFhRHFG
bncKekdMJks3WGtTVTlxM2U4QlBeRWtTME97XykrYFd+djZ7cSZjQl4/OWQ5JmEwaHVgIV4oKTRD
MXFuckgzRzt+WUljCnpLaXFgKXFXTEY2eVN5akFMLXFGbXN1cTMhbzBJJStQX28yMjlGRUY1enBV
by0hT3hQPDhLMldXPVVUfjtaJEVGZAp6dkx1U25FZ2VoTnsheXxscXtlNWtwQjcjaD4rQTtiU2Ix
R1dCczB+SCFESFJ4Y0wyQUJmZEhaelM/aDY1PCNgMU0Kej1wOSZROVVSKClwczR3QHphZU9WWmx5
ZmtycztVTGRuMkZDTUVjUl5tbFlOLS1TcClhU1VASGQkWDl8Qk5aRnxUCnozSlgzdzA3LUtUKVEq
PmxGQFZLUjdTPjU/OytOJFVUYE1hZlM3Y1Z1bXVheipEJGFUJnUraShxdU1Ufng7aH5wWAp6QVYw
M0xVViM1eXl4MVppVWhGeHBvJHlSN3R1ZFNLPiNjPVRhX3ZaITxMYG41e0daNiFYUnBYWmNoKFBY
PWl1RTQKemd8MTN8ME1LdFJQSyRpXm1yVCNkQyNSQmd0YVcwZlFoP0t8ck0/SXU7TnZhQWFHLWlg
QjZrb3phUG9QJGJHZCpPCnozXzxqYmo0Z1Y3eGJhI1MoSkwmSjwwbCU4ZkAxVmEoWldUb05Ec242
OGNyOzhTWVMyb2h+OVZRPT1VRUdZKldBeAp6cilhWlpEKHROUlFhcTsxdGBLZ1lVK3tWemNmaHxp
KCVwXzJ4cWc0Z2lAP1NLK3FFeWVhVVJAR3psKyp7NjdYZ20Kek53dGhHI3R5JXpPfWFCXmtweD1Z
WDxMN0sxNzh1anI8WT9iY0piUkpOSlRufXc3ci1UVlFHLUA0XzZocksqVjdUCnpWajs5QHhtUCs7
VzxfVUIzSXpjKjl9aEIwNzFzNSsqKl9kUUl1KHRia35sWEdNcCVkLWhYSGxLVjEyUkdtOCtfQQp6
KWI1RmIpd2JJUExmPDhAcGErQWFEaHJTMUs+K0pzS01EITRSX2coPkpucH1xLWsmeUVNVFYxJHc7
fnNmJVpOU3EKenpmaWFaOWdnfT0jb0JTV1ZEeT8zMFhfUVYmY2tOKyExKHk2Rk1hTCFyflMqPEhX
YFNrRkJNKSVWIXoyOWdaSTtOCnpQfn1SeGFEWmNNclRMSXoqUjVOWmJveVkmUiVnZTw9bWFNMzRT
fTZuRDRXTm0hazdVSEs/ZlZ0TkdrdHY8dF9ycwp6K05QbCpDPFJ0M241cEspTDw+ezZ7R0B5YCNy
JUMta3tYfmBRRmBObmVZUnxnND0/VjA9TCh3QEdCU1hvM3haXy0KemVONzRjVHo8Xl9KcDEkekot
YStlezByeVJTRDdnYEwwSkV7NEhoYiRTZEpgJExpYHV4bzBsSzdZcDdBOGVtP1U0CnpZTiE+P14j
XjVlX2xueDlAI35yciEhZTw3Rkh+IUFrM3ojTih6TzZ3ZXpwLUp6ej5RR0FUdFBnPGh0Yyt2WWh8
RQp6OSRwPGhlKVJ6enk5SFZOKm9tek5sdj12SFhZNWhgX14jPWREXn5nV0VzeSM3JnV4MVIoJGJ2
SWFyO1ckQUpDZn0KejhXRTZSPyUyJSZTZXhUYGZTUTxUeXt7aThxIW00clpfSVhhVEsqPCYlTCFZ
Iy1LUmBtVkNkOVZqakVGRT1YTEwpCno5Y14mKCl5WmV1eVFRXlQwJCNlbGR9NVp8OEYrUjlBPzVR
WGxtU1BsPmx+Jk12dUxwMW4kUnxfdk49VTU/MnJ6Xgp6SjFualFSVkl0JENrTVFBYTVSVXtPZncy
fDcmNzx6TCs0K1pJNXUxfiEjcE19V0pWdyFtWTU/YGV+fW5yKX5FNjsKemdpYldtQmQxJUlWSW9J
d01XP3pFX0pMZkNrO3g7NEdhXlQ4ZXYycHVLSGVsWihzLUcraX5eUzthbnIrJnN3Kj18CnooaEIh
NT0jVnp0dUFreGxWN2xmeG1JeFVDUjBwMGYpOXtRYHl9MUYodSkmM1VpayQoJmJCayRAdHgzdUUp
NT1MVAp6Y3N0REhqMlk3Q1lvNENUIyFNT2BGaTk5LWtsd1dWKTB5RnAhb30+ZzhEckw4cXUxN1JY
MXF1WXcxTGdRVjVlKGMKelBUamdre2owVWBGfVR7Qz09JGo0X2Y3WSRffUclRiNxQC04SkNhekxt
Y2xpYGsoQl5TeWJgQiZ1fj1PUyZRQENQCnojJkFMcnlmLS1Me1BXKHUqVipTTiFINWZeYzxhVFg+
cyFrQGxVcWZFcmQxSFl7VjFWe2F4YiRxNnktSEFkeG99ZAp6UHVRSzxJfEduc3lMaVBPQHttemNZ
OFZXdDRhMXJTYnROZ3wpMTYwcXU2cTFjeC14ciYjO2gpQ0s0UGgpQjZedmIKelZYJmJtPSV8QU11
N3J8UGJTSSROWkRpPFU3YVpSPDRKZG1WT2ZLNXwzNFVedFc2PGVIXytUYEBzNG5Ld1dBV3JzCnpr
MG03UT9XNUdmeUE4azc4eldzUkFjS0wpajMtWVhKcVc8Q0o7ViVCM1ArNSVvd1pXVTBycytoV3N7
OWlBan5CZAp6YkN3XlEwOTVyI0luMjl0ZDkmYXBYbnAxUG80Y3FJVz4kdnwmfUhWaHYtclZDTkor
e2Q8Pz41SE55XjxZRDZYN0IKek95XmxSNUooIS1sI2V3ZDNxcmNyZFJZOEJnKW02a3U8PVlGOV85
YyYrSn14XllHP1B5LSZhbERCVU1ANVBlMTtkCnpYfVJkQi0jRDgtJjJxb0lhcH40Nm5gWTx9YUpO
fEAxRmVsTHdSRStXNmQhaExFZ1o4flBXO0whK3VtTldwP1dSIwp6dXshZF5sSVI3PTReZ3stO302
JlU0M3N0STlvb3JDKCZ4NCs1KGVUcz5XQmYzaHhhVTdLbjxxNDlpPEJ2MD9KfXAKekpqZChWSjFm
MnQqez9naXUzdigyPUN8cVZsN2wzWnBfcTZzUFlqRG0wU0xrWGQoPDFQNDU8KVRANCNCZkw/JDJZ
CnptP0VvQDw9M3g4el5aMFhBLSZDTiVeTDRJVFI3Rz82SCNtKU1ufl9tJGZOXy1gZkg7VXN0NElJ
ajU8T1pDMXdpZwp6KXQmfXs/ek9FMSElcTt4Nz5Jey1iZlV9eXsma3QmUVVhd05GUnw+dSUyUVBC
JXZuTj1rITMjZ1NeI2R2YWpuSCEKekRNTi1OTHk7KDRwc1J4Qz1qLU1OMyt6UnI7U1RMMFZYJnxM
P05SUiVDRXwoP3VeaVNlSlRDNGE4Vz9aVzlBWnQhCnpGJUFmYCpvTFMjRklmYHk3U05wQl8rQ1Jh
RCtxPSFMaE14VmlzTUs2WjFleTUraXp5NW84JU4mPVd9bTBpXjxeVgp6SzdzPyoobHB0c01QemB6
SyZDeFhIWFRGLXs9TVNYUk4jLSpjfWU+Kll1K0tBcmJ0VnFgQ1UoY0B2NmMlWGxvRCoKeldVSD88
OE4rcEVBdTE3eUZYKkxISSUmZUVTODFuUHJ3ZTR+dWlWc0RufldoRm1CZWdyPEoyS3ZkVE9LYm5S
fkRmCnpCSnpBI2FOdVEhTyNsbDZTcnwrcWlxfT1nZEdFPit0RmUmaylJV3gkY3FfSkxaU25EYnZw
QURmM15HTWsrb2tvNgp6JEF4aE1MNGdZM1dsNEJzNFhyN1NyckdZZ0w4R01ya1ZkfCprWmArR0kx
dDw/KkBuMEE9fkBtdjI1YUlzLXMtdjYKejZjTEU8cHBmYS14XnFaYiFOUGZvWkM7SitIYyZhTko+
RlNEIyRvflozNW5OMGlueWJ0Xng1XjBAJHtHPGV0Q0F7Cno7Mz1QSEZEU2w5V3xZdD93PF5CJDM2
OHprRFExOTcwTVVHTyFRVGZ8QVpUYyEzPDZrRUYmckZWRGZSLWsxTFErYwp6MjgzWFB6UUF0MFM/
USRJTkwoMX5IdT5+Pzd0QTJBN0RVYUZVWG9GN0YtSzM5Mzd8SCp1KEBERF4qPXUlZXpKPlgKemZZ
ZFdnOFo5UlR1cXI4dEVFVU0kPkcxJFJEST9mdzJZSjxhdEZVc2RUcHFpezViO2pEUzU0VjgjO2dC
ZyV0cm5GCnorRnd0TnozTStrSkNWPzd2Kjg9PlUoKllgLVlNMj44I2pvOE0oRylEKGhiNC1vcFpX
NHM7TykzJXFkWndsVkxiKQp6Q1N1b2RxMWZpQE5MUlU1RyFmc2Z6QSFaODUoUmFnVSVVNmoyKz1Y
TGh9UHZYKWdXZEN6YDQ2ZihmViQkIUFnNzUKek91Vz1ye09qbDM2PWJrREp9cWhoZlk4S15WaShl
X187dnxSR1ROJTxye1E3PigmeVF4TGJPfF45IVc5bnNqPiRICnp0dFFENjJPcXt3NlVRWCFSYXVl
UV9LXlUjd08zdk4lV145RnBiezhoNXV8d2R1K1M4OWJpVjI4KiNrZTNMME52PAp6KHZuWXVscitE
MVREdntPU2JBd2lsOUViSlZYKyUycU0wQmgrJVJfTFo7byk7JUI4PFF6cXpFeF9afERGWXMxaDcK
emYxJTdRR0laI1dibTIrYD10cmR9QkA2X0dYOGstayMlIUpaYDRKaEhWVEgrVDQjWEpmZEplSExP
KllHKmE3SGZACnpQQyZ+NXQrKHA7MHN0X05TZno0U0RgbG9WSy1SIzNxSy0+QzBKOEMrJXxgRyFl
N1g0UzB7OSl7c0JAbXxlUF8oeAp6ZHVPMWxsSElXdkgpO2ZMXlU1fXk5YnV9PD5Scm1OXntnPW5J
UlU3RVNpWkJKciM7PUN6UTBhY1NHTGJMaHR7cU8Kej1DP29XUSNOUWF7Z2hKejB8MGpmeEBhfDtj
PyQoOVpZdVlXM1N3eihtckR7QV9SKFAqSlJrXmx1UXg0OS1KRllOCnp5SFVpZnNFVyErNzx8eWRI
NWEmUkRxR2UlWSZacnN2cWxPKSlNZyU8az1eTndhVz1uIUhAclR3PkpASHBOIWF3Uwp6YT5QfGU5
SmZkWXVLa1U4STBycVJtcTZgMmlUSk07PnFEMDxTcyNnWSRQSUBhOEctNVJ4TyFuYzZnWC1SX25t
UGgKekw+NGYtYjxQfVUhUHBaXns2I0NwMTEmT1B1RH1rP188Q25BdF9Je3M7NmVhY1FWc2U2M2ZZ
ZFpyNjl4SSQqdyZkCnpXYm5EbiZGZlV7bzliLVk+ek54SipLRzg3dXchJVdwWE5PIUE0VmQ3eGRl
QFV6cnQzUXBrODdvS3RWU1c5c3U0PAp6UyFhOW0mKGpLe1pDWllvSiRISEt3eSFZSyMkKzhASjls
RT1ON3Q1cGQwbHEheVVEKGB1T0NFdDdpXzt5Ylg+aU0KekAtOFleWiFibERwd2s4QWlzYG1pNlBe
Qm5rWWxnRSpzc0gqViVwTTlQdHA3JFNRRTdMcGg4JjJGN0ZWKGFCJjA4CnpNWH1HaTVqcF91QTkm
NGl5aFlDMm1ucy1RNjhObEBMYiRBI0tAQChkcXYxeSY/YUhBPkZgcE59Y3p3KlZhazMjSAp6ZmxM
aVVqJjZYYXNZKyFYekNleURhTH04ZitPJkh4aWB8fCRDZ2JNSXlASXclKjJVN2kzKngyJkUzSX1R
WjR0cFEKejZebk13KCF5NUQ/OERTWClyUlAqKHs9YHFzKXYlTThvWiFIK1lDZSZMVm1RQElDT3Qo
Kjw4cylKckByT3VUPFZICnpOR3M0eDUoaURnNVNlNFVhTSpzdDQtMSZnWG1FNk9SMFA5RVBTeW1w
b1dMeCh3b2dqTHNLX0R9dkU1NTQmWFBDQwp6Z0VAR0V3QGZYPSs1K0tMKDhjM1YpODJgUiktTXZI
Xn5nPExSS2IhWlorfUo+c3s0V2ZiaTRLVjEofT5JNGB6YnMKemorN2k3YUFROHpRJEQ8eEhoU3Vr
fEVJYiNhXzkxPkBSekFLOz9YJk82My1FS2U0JWdzZGFGM0p7JUN5SjMwY1VBCnpFNnllVlpERkVm
PXkzX0wmTilGalR9TFp8X3QlJFktT2NjIU9YNlpEdFB7YmtsdCRPdTdONXA+b1BKdEltUGYwRgp6
KlJpWVllb09vTCtoen1FS0VNVDBnZUc1UER7SFQhRGhsQUYhO2xsUUR8V01DVnVUWHQzcmgjZFR9
ckt6MzVmc2gKenhyOzQ9IWVfK0VUTCshZ0hpOz1qQ3BFT2Vad1pUPkNaV04wSVgybHZzJSRGVEFZ
RkFiRDh4WEVMP1dAJm5MJDVVCnpKckV2aCZjOX1CPil+bDczQW80RFpkWUJaTys+MmFvcCgyS0wz
JiRGJD10RDM7bzF3a2NheSE+LTMkdUJfQ2VyKAp6YU1TP205O2FpaDVlWU9sbX02YVIhYilOcFlh
UXxSYi1meEFiZXB3QiZQISRIbGJ+TH5hd3xqIWNTYSo5I1UmemYKemtmNEw4N29lWigtfnJTYzs9
Qz09c2A4MWhfXilJeCZLSD5sITJ6JHRKPFB1STl0TX5oMiFSM3cySEEjZjZ8b35TCnowcjRtVEs9
YUtmQTs1JCNQTkJCRypebDJYdzVjTiZNdCpsOyNWcGBpQD5IYGtAOXJZdy1RRC11ezQqdXBeZiVP
SAp6KTR6V2NPT1BuOVpKNSN0djJwcXc9ZEw7RkgxQzZIaWx0dyZaWEdQYV9pbFN0IztFanpfXmh3
IT9pbDR7Q3lqZlAKem1OVTVNblooTlJmdFc3Ylg7KVY+WCpATE8zPUlSKHA1bCZMMm4tRFRSPUx0
QTstb3A9KjFMemU5R1MqP1NvR1YqCnotKDZ8d1ZYPmQwUG41JlBWXldWMGI1QnZ5PHojaDk7YCg/
KztYcFZ3eCtAbjJeRGtrZlV8R3RPd0xhSDMqMHczMgp6dDs8N0p8RGFHNW92Xm9hd2BVJFEoOSNk
MnBhYXFIKlMtREZ3OUtGSz00Xkx6NjZpbEZKbGtaTnROLWtue2Qtc0QKeiNiVDUhM3wmemB3bDE8
SDlZLXRjSnl8ZUY3XyE5VDx6NTxDIWlTNDd0amklSm5IQ05qPEM2ZUFlQmhiUjBte3pkCnp1ekhj
bTgoIypvcSZZcl8mX1JtUUZLJlB7Rz8kRiNqP2EtT3JgfUI0WUxwSGpnRF4/dEJ9QyNVTlB6Uz4w
eD5uUAp6bSV+SWtiSk5WLWEjXmNKLVR9dmVfS157TmZkJllKWjVEJC01THBJMWFXNFN1TkEyeHh0
UFUyZGx1PWBLR3BkSDwKemZGZF9aTHglaWNfMmMjYlBjOzdYaWszSyojcEEzWmpGISpNcEhGfTh7
SCokWF43SFl9N2UxZG5ILUckSUE8YWYzCnpjWWlyPmNHMUQkTWc8T1J1Qj5FKipiKUFgNlooKGtt
KGZUMD4mcElFSjIwfHtKNVprMGFXamJEOXh4ITBnIUpDNAp6N0VmbyZONHNwTkxZOHduamB7U0NP
M1B0OHVlTWEtPDBrRndpI3k1RlB0QnBjaiRLfEhpQ25EJWdhY35qYCh9bDEKekRVX3dNazdwMior
KkQrKktrVWJxMCRYX2kxc0F3cUpSfjE1IU9SaD8hZXhuUVR3RWhiOHE2em9yJkA3bThLMGQ5CnpC
RXsmemE7SWEyTzwka3p4PzBQWSYyYFNPPEFvNlohT1ckK3BwPSFIWjhQPjReQCt4OXNDbWJWYnBA
fCVfbmBBZQp6U3N7bT1wNnMqNWAqLWNqeWomaTxYTmQwIylEMXg1ZHg4S2hGYVc4ajsqdEt8NnpY
RSpaMEBgQHNtNFFvUUFSTWYKeiQydz9XKV96cl92c3JsVEUjT1BIQ1M/e1IxNUkrbldlMVFvZ0xH
MXhTZ1NMS0UjQFgxYUNXSX1ETEBGOXUqfWBFCnp8RmxJMDI7ZDdgQXBqT3h1TXJaXyZWPzRAJjIk
VjkzQ0NtUGp5N24oMDYrKnBCQHBTM0xpdCsleE0yVnxOKDJvMgp6VVNMYFQ8RGUoenRlTHt4V3Qr
YjZUaWA2UXU7JlhnSFgxQDdeOFd6PDVNN3RBWipNZXk7c2sjO0dKNVhrS2p+Kl8Kejw9SDc+RShs
YjI3JSNhQ0g2dyE5XjBTNTNXbHxiV0VHfkgrYmBzZ3dSOHsyYUhlOCQxc0xQdDw2fWM4Ung5anpk
Cnp5VXRJJEM8KVNsTjZ9b0MqcGZsKDZgPHBxeENYMjxgVXhpKTVtcnRee1d3YCk3NTZCZ1dMTmU8
Wmh6RmtaRXF4Twp6YzlXYH5ZTUBXS289RFVSPzA4dCl7dkZoc3N8N1haaWRVRlQ1IUtmWjRtTCND
Yj5hUD1oekREbTRVclNya2lodF8KenVONEdEQCRsZTtCfStXWjlTTmZqeHpjU3NSXnl6OFFSa1lh
UVpZfmhlTj9WKDI9ZCMoZGJhYVMkMlZJO3BaeFpiCnpLdzcpKSUlKUhLZUJ2PHdaajtSWFdgS3BT
Z0hCWkVHUWNQRkwtRnY3P3loQF5UQGhTWWE0P1Q/eEJMfWBXRFZNdwp6cjcrbENnc3JYfiVJSFhw
MW5uR1leTyM2PFk3ZTBHcz5JT25mMm5OQ2JRaVdscWoqITxJPzhsOVo0e1JlNSpIQj0Kemk4RThD
UWlNciZDb3hsYyRucyVQNHNQX014Rz5vKVRUejdOMTk+b2ozYzMlSDZfaTNYUC1SbUlmc0p6Mk9H
LSEtCno4QUp1bjRYXmYpT0M2QW09bDV8b3VWd1B5aythOTQ8VSN0bkdpbVIwYEU0NX5YYTdFVHxF
YW1GdkFDZTFCODVhNAp6PVgzfXBUVnJEYUpzfV4wZWR4TH1Bcno+QTBIIS1zTEIpaDtJU1UpV3Vg
PzNiVHdtcDgrfVpMfCFVbnp5T0pabH0KejFGMHIwY1RrOXU2YCo2aV9ke0olLUxIRCZxU1JaJSRh
QH1pI1g9fmVfJUpmN0BObik8NSFwPSkyJTJzYD9yaFEmCnpDbUI3bkZDdE1DVEFWPXozRTFwUig8
KFVTSmlia0NtUH1fVTMtc3t7WSUpTEFsKlhDYF9ObyRQdnt3PnBAOCQ/eAp6eU0ydGMhQnUjSHYx
bWN2U15zJXIjbz5ZN2RGTFh8LX1gRmtzLUYoNWBFTDdYO1cmIT8zdVB9ZF9PaTU9RDxgRHgKensh
ITl9VTMpaFMwe0NwM3ZGR3M+NExEYkt0YEVhUHZNRSFWYH0yVnMxZXhGbUBUPyZmbipsaVl2Vnkq
eyl5UEVMCnpDTWZQS0FuZTE2bWx2e0dEcWVtbk9aN2Zya2o4KVQwUFd0cGAyaD9UU1pjKiE0VTlu
cnRRZHpFK2lPbUJDST9XYwp6KDxZZmVZbiVHb2ZOVFg1U1JeQ3hXLT1meyM1JUUtOyVGZ29ZTmli
bGtQUU9Ob2RDYFRMZXh3RHoyWHhHJCQtKXYKemokTkJAQ29lKE1Qek18IXRYPGhsdigwbVlCUndN
TGwmP3E1ZUVXT2hWQkpBfmxyTzQodiVhTkhQfk91Sm1kP2xECnp7ams2NmdWTllMTUpLdHd8RGRr
PkFRQWU+V1hlTjBAKXc2c2A+c0JEPk0wPkt6SiQrPzg8Z3Nfa148NHp7enRAUgp6QG16UV9tMWdi
VlJhKDUjRDhmbkdZPW52OGlnTHxMMUpnI3M/b2olfHM5ai1wdH05Y1FUJHJmR3UzTm87OXVxdnoK
elhwUnFCcX1ZaTF6QDRRfSRpPGR2WjtNNldrRUl6MnNEemIydFhQLWNZV1YmPU1FfSlhemU9VHsk
NF5qY2xqY3JaCnp0SGEyeXg7KkFYbmBTR2BNPE5RanNpZ1gxc0hwSnFBfWZ7VWZCZGhWe1l7PklN
Wm4ld3ckQWYrRWAqTX5fNHo4aQp6SkJpYW48VGY3LTYxIy0jSVRUeSlKaVFAUGFaQ3RVZlh6YmIj
e3YqJCNjMlJHMjxCVVRzU0dHPFFyO1dOTFprZkAKejBkXilEODdNPndaSUQ4KHQqM0J9UnI4VndI
WDd2eFZpKjdjbmckVUhjJnxZYWpGQEwmdFFsKkxBMyR+Z3s+V3V2Cnp7ZzleJmUpWE4lVF5WcXZC
bUBRY0AmTntWa19jZTMhRSt6Uz1WWU5KMEc2VElhQGhWZzVqWXcxI2RPSztwS3l0Iwp6KCVrKjtv
Xl5YVHFYPlZWXlRzPmd3PzAyVCs2dWs5X1IrKUJFb1ViJngzczZVWE00MXk1fj4wJHNTcj5CblY5
N2IKejI7ZWE+e2tkNVV0ISNxNndZZ2JqZH16MyVwMnsmPDgybzZUPXZVVSNjfUVCdk1eRnc/c0c+
JnUhZVIlUCZ8WmpECnp5NVpFdSNxbzwtN1NIQD01UjAhb0BiUnYyPWs+UUZjX0RGI2ZXfitrNXNG
aFMlVHp+WHZSYWppV3dFcX1oKW1YWQp6KUw4PEV2NkR2PiFRPVlKSGt4WExQP3NsJmEoaGRaSTxY
fmhYVTYmM19+M2kyPWtaMFkyKnJ0KD1QPklyNmhGMU4KektvJkcwTUlEandaXlo4R0R8Zk93WFh6
fVNZQW59ek88WmZ5eUl3b2d4c3VuZjA1T31jYTUpbStvZTBMbGlEUX1lCnpwMmplbkRTVih6ZjtV
VT9LcmNpRnBnSUQ/UD9ANmxpNG1ZNUxSK1piVEk7NEI1TmotdlFWM0pBN0BPWDF2RWg+cAp6QzZw
Q01DYSNgRFBmRFNNbkxJU3ImbUwrcGwmQlRMUDU1QHZHTUV8ZXpCTCQ/emBfYGg1KmYjWVh0dX00
dD18T0UKejFZak47VD8rWUMjc1hpKCUzSmBlKGdDb30qRm59TzxsRXUjVGNFXkJNfUhJUSNQfHhS
YD1NRFlWM3koRlBCVEhHCnpwbEBhcjk0a3ppZHo4S0BBeSFwKHt6XzgwdX57UlBsYlhTI2d0c25s
SEhSS19ien5aZDlfanBpbTU7ekwlWkp8Owp6KEBIVjZYJSl+eURYcFlOPjlDWCh1eG1nWXpjcV9t
bGtWcWxeQllBcmBQYVdLWlZXR2JweTxgUSpfLW9fY3l1fT0KensqMF5iMlRTYjVgM148cUJ4b25F
WVIqdk05ZT1kYWgqa294Nj8/VzR0JUB2VzFgKn1ycHchaUFuREFxa0lgYDZ9Cno+TXx1fXdhN1Be
eDR3em5zcUwtRWhDUip1SFRMRDlyXnl8R0M4OXo1VTFke3VwdWZMc3pxUlhTWHI7Wm48PjhIcgp6
dEF8fXVDIU1fYFUjeWs9YzwwZS1KN3w0PF4pZWtoZkpfeWNoY3ooQmwqd0tUZmppMHlXVShPRUNU
SWMrKmE2OUkKemZOJmI1bDxEMkh2U2h4VyNGQ1lFQCN6IUxiT28xQkIyM0sxYkQoV2c0QT5pczQ1
OVFkRyhVI3MpKzF6aWRwWFBuCnpaamgpalUxRiU4bT9vUEhBQDlheTk+ZmwjeU9mWiFSR35GcFZj
N3VVV2VfNGRBRnhfOGw5MGY7RTh+T1VNdFBBRgp6X0NRTjBWK31kUXteI24+WHNqIXhBQHxjP2l8
P21JVTZfRDNuVTNHejxxYiVuMTRqcThZaDJrWEFedyMjQyQ9SyUKek9qaFcrO0tKUE5tKDZveWVS
RVQ+TFR3ZjQtM0xOQ3NhYGlTKkVkJFZtKF90fXl0YT5ReiRgJDkod3pmYkYpTGBWCnpnQy1+bk1H
RmhRbFd7NjRuNnNhWm54YVUtaUJvYiEtV0Q9YHo7UGNGRmRoKil3aGghZzVvZml3cy01aE14OFh9
Kwp6ZHxVRWhkQDlUOzBwPiROI3Q7ezFjP1FoQl9+KyhTci0rcmReViZ8KlkpQzw8MTJGeDJQdmNv
fS1RRnd2anIhQFcKenFhb2ljSX00LSt7Xloxb3IkeX0/TzR3ZH41YXh2RkpvOz9aPD8+RnVAMD01
V2BYYSlhdiUjfUFAMlFUI0A9V3ZtCnpWbGtqKGtAdmwza25gfTY1dnVII008bDhwQWBTK0shMTdk
KT9SfihpNU98YExjPzxYcXsyTWkwO3xSMURwSVUySgp6RSg0eGctRGFXeTdSKj1nK0Z9cWNCWCZg
eSNyOGxnMl5mVkRhVF5mTmYrXnptZWhOZUhJdGlJJk44ajUrIXhxUz4Kem0wJmNEV19BVE9mTkJ7
Q3hYMXlyQEtPe0FDUj18TXBjXkVxNGQ+Z3lkPytLZE1fMSpGYnhtNnN6ais3QyZFO2l9Cnp6cz5K
RiMoUzBwa3UyR0JuUEB+TkFGdTRge2d4VkBXNHdJSEo5bm5yRlZ8MkY2OWhreE9qPEp9e1BsIXkh
bWFEawp6c1hIZnd7Tm50NEc5WDl8SjEybnJpMiRYcjJYbUxjNz16JE1WYnlULXNESCM1NS01VUBt
TDE0eWE4dFVmX0JvZSMKemFtTVRfSC1sNER6JTt4bEdhVmtyMHkpRVlJQkAtJml2XmFxLVFQemp6
SWxHPiF1MC0oP1F5Z1FlVHdMZlJQN3VUCnpvfj9hTXRYQ2dlS3p3KThzYnttYlA1RFk5U3t7MHJZ
Izdrd0pVIXBtemo9TXIrPHQ9TChCQlpZUTRPbTxUPlJiNwp6PEpHQiMxM0tDeyh4V31BanFYRl9w
cGF2OWhaVDVQV3RGcFZMSnFmLSFLQCskbkxtX2FPJk9iTFghXiFhaikpYCgKeiojekw2byNtNFZi
cXE/NS0kMlo2MXF9b01SfHU3Kl9gYShxUHdeJnphZ3MofGs3OSN3JGcpZmozOy14Kkc/YzdwCnoy
OEtsM1RteFptQGtkWEE4MXNZKDcxdTN5MTI2I0RvVmszWDFIPUtHQyF6aTEhJD5xST1neFgwR1ds
Y3F4ZE5PXwp6djQ9WCNVUyswWFdmOUJndFBAfXNnKUhBRElzTFlNXyV4ZSRgdXZNKV45SUBhRWs4
YWliSzclWVZuOGIwYmtUUkUKenZQaypoSiVoTiticHt6OTZwKDBCNVpeeSRGYGdhdUZQdTU4SmV9
QyttaFZzTCVwNFUzem4xRWlwO0JuWlUzRyRTCnoqPWFCNjBJbGgoPHlgP3R6bm1EbF4leSVqI1kq
b3ZjTWt3ZTImJSFRZWtnSmZRYjRBaGpZUVRaaGQ9ODREd0YjWgp6MFRqJWJ2TGVLQUttMmBeRGpE
VEQ2amR2K0w2aEtuQ3doVV5rcHxqJU0jZm9YIz1PaC1tK0dvOFlvNmVyTDg/aS0KekE4RVJAdHNq
IVB8RXdLYlVGTG5kOCllIWZLQVU9Zk5+JGkwb0VxP3FMaT03bj1EU2B5SCZsMXFVc0Uwe0U9RUht
CnpgS1c8Rm82YyM9Zz8pRj57WntxVjBGPW9DPHc4M152JWNnREttIW8xKExXN2pOMz8wcEw8fXdY
V1BxMDN7VmYhQgp6OF5hN1Y/akA3dXQkaVlKR0hudXJaK0wmdDRFKypSSiVCS05vKW4wR1NpeGZh
QGc/fkR3VXdkV2F0PCo2eUlpKkkKenolcG8pUVllTm8yaUppSGhHODF1eiteQz48T1V3RjIwTFV+
STRsbj1GcDI+fkZqPEQ2S2gjLXU1NXFCUlVAeT1DCnpWaF47XjckYERpKSstVntadWVMSSp1JDY3
TSQqe317Vnl8YnBNQSQjQDM+e3BuKXN4KUw4RGZQPCgzWiReY3JtTgp6XnVVX3c/IWtMKVg/VkJQ
bkFEcDBxWTx4YiVrYVQoWDlXaUJMVk0jdjEkKWNCU0dCPW94KEJMN3V+KGxqSlctKnsKek1NWE0x
KUpzfHw+T2Z7MmZGIzRJWDJxYXpzalczWkVFcCRgYH1ZY2NFNHZnYzlmak1ybjwwIzQyPWF1PTN6
RTZkCnp5TkhfK0ZRYTk5YzskWCpJUXZ7dmgjdllqPEpfS0MyUCo4JjRCUVdeK1R5ZHtJbSgjN2I/
dX1SeCF2WWcxV3J0PAp6ekMmb3d0eWtfenVNU1VuWm19ZH05KG97TWtmPmJyc3ppVmx3RTduRW0x
JWZweVQ9ZjUzP017OCRPOWAxbiRwYkMKeks4bFZBak1ZTDAjUjQqV2NaVjA+XmgqfVhEd2smI0JO
TzlfcTN6Qn1CRCt5aXM2K083O1NvWXFqVCp6PzwqP1ozCno5MHNvRCNBWTtXKHBBaWBMcn1AWW5N
Ui1sZ2IwQGE5VzdNeERHUSRIVG1aPkticmdnVCl2Kn4/aDg7akxJPCNRewpaRyNNVXtTPVhOQlZq
JVN+NSlmQXgqRih8M3t7WGcxVigkT3wKCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Jlc291cmNlcy90ZXN0LnBk
ZiBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Jlc291cmNlcy90ZXN0LnBk
ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4yNDI0YzE5ZDk4YjYyMWZlYWRmM2U0ZDYxZjdiZmY0NzEwN2EzNzRkCkdJ
VCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCA3NDIxCnpjbWFpM2J5JD8hd15vckY1SlhUPzg1S2x3ZEkl
QU9mdVh4d1ZyWFZ5Mm11S0pOa0sjO2dgcT0yUWpuQkpxKE0/Nwp6QzhRKC1yMVp7cyYrbylOX2Rm
U35vO353QFlwP3lUKnpld2R0aWBQXmdCRkFjITIjVEAqeyRgaFJqcHxOQz1kKzkKelM9YS1fI1gt
cyN0Y3t5MzVKcj99ZzN4eDNaV3VmVz9QJV9Yay09RXZ0U31OMTA5UTlXI0BxP3VuWmd9VzJSSjhu
CnpAJS0qIyM4ZExJQnd0UWlNaEBIaTlebV54WWwoNikoRHMyek9oeyZXYT9tVWEybG11WVFqfWpZ
WG5ETDUmYHIxWQp6RjNKZyVvVF8tP1lWbzRXe3ZBND0wR1NgVjFwPk50Yyh7Z1ltRC0xaU8jRVI2
ZWdQe2lJWHF+V0wybE4hITcye0cKelY2RmJKT25mNmIzbjJNT2RWeFM3cX1rc3gjSj9nent2VlAy
NWgoO0gwKXZiRUoqLTgyVXY+ODdCPihCcGFSWmI8Cno+Y3t0RSU9TDxiJnQ5aX4ySTt0a2UjR14t
RUNAVkgjZEhyRU0qcW8yfE18d2B0TnUjdENDO1l+WDVQek8lKylTOQp6WHpLblhKSUpHQ3B8VTE8
aWZnUFU+NlU2PD97fENAYHdaT21eeWJ8OSgoXnRRI0A0JnY2bGJId0hjWGEoKjJRQG8KejlRdmcj
QTRuVzslSkkyPz1fYklHMC1rY1k3OE8yRVAwN3drUVVKWWZoSEIwJGM1OXMqNTxiSlNKSEd4eUo5
d0ctCnoqViFoJl5VcmVGWDhmJWo1OWVQLXBJZWI9S1hxbD85PUR3XmVGYURkMjFBZjQ+RkV4S0A+
aDBkcjJKMFh2e3pscAp6ZFhDJVF6Zig5b2gyMVF9dF42e0g3VmpZMiluMGU0RDAjKVhkYDE5SD1e
fT1fe05TVEswb3sxNnZyZ2hwdGE0UCMKeihkOT4pdlhVPnVgdSlWV1hvcXQwWkJgUGBgQDQwY0hD
NFBxN1BWSWVFfVp5KCozUWN+NkljLTFiZik2TkhYLVZpCnpadEh2ZlBJRSkmOyNLfjQkTTFTPjFw
VFZteTZ7Nk5DOFhMTW9KRG55PmVkYGthZFgtPEFUOWpgX0J6WD5jZnA3Swp6Ukw1N30xfEMoS0Yh
ZVJMcmtPSmIrUlE+dlJ0T3I+VkRlfmxBJUEqWXRsPHdFJDJpcz4mdW5MRHclRXw4N2NxQUAKem5J
Z0t7VE45PDllJiMrVTd3PUNBK358NHVVUih8bGA0WkFuPXVEdEJ8SDNydDx5fTBWSjQxOEMjbkVh
PnVpU0ohCnpKNUZWOUFuekFvR1ZXSmYhUDkxc0EyJXdTZSU2VmItVTV9MXJNeHJzSlBZeGFqajdS
I0dtIUVDP2NOUWtJbFhONAp6XklWNVpHKCVDVVhtOGFjSE8kVkBhalMyYC1NVShvM0hgVUohSjNB
ZjxKWSMxQ2s+NzJkcH0qWHBSQ1BzYWMjeyMKem5xO2YpSFpVcDZtfSlmVHREdSYoanZhalZHSGM4
WlZQSm9gNk1EWWpSMT9WZVZOb05BS09zPHhYRUJFYlZEVyVECnp2cGcpYnNSM0VlcVNNcCVQX1Ym
UClGVWxOKnkqY0Qxc0ElRUl5cSR8KTlsalhuRDJBWFV8UDQoNz5TTThCVXZ3bgp6ajBiI2h6MUx2
VF92NE4kKk4+anVeMnQ9ciVydjlwTktRUEVeSlQkRmx7bXlzJldxVX4xWGpNd3Vme3kqJno+T0gK
ekVRYDgqVVRiY3F5eT8tY1AmKW4hNH1WOChJYGAwMWlOZkJ8WiQrRVdUKUVSUzFDaVg+TWNDTWk3
dGlMb1JJYUxxCnoofkxhWFJXcElLNWJ8JDYpTWtzaSVOOVN1YUAxR3heWUQtZDZOYEhOIVV3LU5j
bzAjI15WVjRLQFQ1RWx5KXBGJAp6c2spcWNKLW4hI28hak43V2ZNTC1oa2k0ejRTTU8jPU59TXQ9
JWNOXmVvOEl+bUBfcm4jMzFSQCYyWTR4LX1PNVcKentZSW15UGA0dlpePmlFa0trIWkhUnVpSElz
bXI7dzlQakpwck9hSFY/dkFfKlJCY2xhe0FKeCRIRE0zaUUxNyZPCnpwPiU9amRgbSMkcSt7aWxt
UkB9K0M5QnUjSjFJLUQ8Q1lFUU97PXJhdFRWTU0tV0txI1dGXjw9XmQ+Kmxaa2JxTAp6cnwkMWdY
fFVBWnghSTl0dWBfalRKK0h4eWsxSCRYKnItcT94Z1FvRHdkdlFjK2cyb289OC1rZmQwTHUyX0wq
KisKel9ha09IQTYpWkpCYHY7NDxYI1EwbiZTJkZaUFlALSR6YWN+MFR+OTBpPlZ7e2ZmJk5rYm17
dXVefD5nXygpKU1uCnozK1FObHJhYXJCSm1zfFljeHowPiQ2OTA+VD0xOGJuIVpjZCtwWi1mWXZ4
VD4oOFJ7VVYydGM5cE58UXUwVWdoNAp6VFJ7T2ZpeWJaS0xHS0FOX0tYPzFDXyQlanl+VXIwVFB1
a0lHUjBZKklaQCV9Zyh+fnwzK0U0JTx+JHt4OzQ9OTsKejZtJkxQPW9kKjwpNk8+MEExQ2Yhb0s4
e1REbyZwaHNyJUlrKSpNZiEzbGlqVVNaOU91PXVofjs7aEZibmYhRSg0Cno9UVI0dDloYC00JXRw
TVp2VWlBT3h1dldCclVVKihhZ2clPnZ3cXVPUDVyVntVZSZCVTlEI3dUOFYlVTVScCR1WAp6QWNF
ezZGdEU0bj9maG4pJU1QNyFYRTN4TzhadTFYSHpzIzJeZHBvYGhhVFU0aCV6XjE1MDtZPkI/fTRr
dlZRSVQKelpFb2AlanJscUQwekZuaEV7QylKSHdyemgtVlglUUdwKktBTjNoUSF5Tn0/LVg4aHMm
YEpRP2QjYm5FTEAyeGBvCnotdGR8TXBsJDAkMmZ0d3JWVlN3ISlMVCQocHhlV0FsX2ZSN3lHMTFl
QGZ6NCFCPT1Se1lkfUhscDs3OXsrciYzUQp6QD9XZUQwdXhmIVMqaE14d1JPSVZaSjFNe0hKezha
S0JaYUhWRD9pdXpzMDgrcVdKMD1eYWpRQCt2TDQxKTVBMy0Keig/X0RSLU1yXzVJY3VjdiNufGEk
JlpBJDA/VUd6e0k/Xk1SeTZZbiV1XzgqY2pBNC0xR2t6e0ZgdWRsVGQ2dSRICnpEPzZKNSEpRFhv
JVM/dT4kYlkmKm1ETHlUdTM0YCRzI0w1IXQtUlE0U0NqbXFxNylWdUVLKFRWJDlfODBEWFkzegp6
YndOVHJ2ZnlhenQxeWkqJkd7Km5nbVJIeSZDaHtgZCNjMFNAbHV6cj09MTRuWjA4OFAqJm9oVGRp
PiQ7dChSUmAKeipvMDV5K2pAZHtvcHtGVEAja3Zhc2tNNykoaT4te188eip2JG9ubXJYZT1eKThG
JHJCJkRDJFV5JiFJWSslaD08CnpgPT5+QG5rfipPPlVzN0c1Pm4+T1c9cG8kMT1NS2tBOT9TeTY8
fkxZZFNhUDlwYERCWTUzKDMoI0p3eS0taH5sXwp6eUBYX25LbHtNP1V2R1U7QXM4PXFrclV1cSQx
YTQrVVUtZm0pQW15U2RjRl5fTFdHYSVsc2g5WUJpXzdCbGQ1fG4KelpqKChJMUo0NWJReGAjN0p1
VT45Un5UNlRSUWs0VnRXSjJ1Rk52T21XYXZqJCFjPj10VkVmfXgyKUg9M2FJUWdvCnohQj15Wklg
PnBhNVZlJEt7JFhVUk40TXYmcWt4OXwzdktfWGBWeGl6NlB3fGYlU0hedmNGd2U9YFJTMUV7X1Yo
VAp6TEw2a0Y8OyYlWj4rT3owRkloKGtnUWc+PCF9IVUtdiRyVEtXZU8xJDhkcl4pWGk/WVRwcG0o
bWc9Xm4wOSZCKloKenYteWlCUFM2YnFXO21pOFBRRUZQekhMVUY0eTJ4dTl+JVlZM1VPY3NqNkdS
UURKdUpkKDVSR2hGdUIjNTVySHZiCnplSDZKXy09OTF0MGs2b31GWlNqP1BfQTB5djBCQDRrZXZJ
LXc7JF59ZGdOdm5xQVBLcVl+MkJQP3thcDFwUUxjQwp6JjJHNUZGS3IzU3ZVbnBfQ2s4V1pnWVUp
K2RBIyVoPyp7Yj9CVVliYF9rdmZBTWpaRno7QFoyTkpfVVZXN2M5YikKeloqWH1JTmVmJm98MUBG
fENSfFhiYV4tUVI3ak1hNmdVblFya34+e3pLISglO3lFfUhfeCNuNEhjOVpjMyYoJGkoCnoxQGY5
QT9JbnY8VmVIUHdJNEpreTdtSEJ4c3drbGxYWSRfZz1BcUcxcn1raCRgcHtJJGNNXnVEOVYyfj01
N2BwWgp6Q1o8Z0tXQWp2PTA9QDIoRVFEYHxZT3wkIVMyV3ZxWlUzQSZoKDZoR2ptUmp1SXd7KiVf
ZHY0QnZlVTlJaiNCU2oKejEzeEVOdk9SZmlaZiR6Kyk3c0tuVm40SUVQTHBHcVY+UVF7OXdVKnN5
ZTcrb1FrQ3tRNXQzI24rS142VGdGfExxCnoyOWloTEZ1UnYtdll7Z3x7V0YyezVrKi01ZHw9KXwo
VyZgJCRYdippM3FgT30pZV5JV1pgd00ral9scE9pXl5VIwp6eXwlUWtrZ0w4JiV6SClvSmwraWVq
cGtfPHhYQHJNITwtISNtZml4b0I2OXleQHA8UCllekEpUGc7WVJpTzFIVzsKel41YTgqUWd8TCM+
bEI/KD4kaVk+K0BxPWdDfDAkVT80bVNjY2xiZz5HPTByWWRSJip3REJ6KFg8JF9NNSs+UGlUCnox
OyUkMy1oRiRidlJOPkhSXyVkVm9hQmteeFMxQHhII1JsU0o0aj0xamQ2e3lfSVRCPkt1Tkx0Q0I8
WlltSVNabAp6QCFxU0oleEM+Py1qcig+ZVYwJiN6OzBUclpxb2Q/YXU4TT5HZkBOfjdlJjxBYXpE
YD5hQDs2fik9cWdLdCkzPmMKelIqMkgqLXtkYlozUnheaThJflowXkx2TmIwbWA1Nilpbj5WZCRw
RW4lVDF3enVIX3VuSGFFKlNeYEBoQWJXTCYzCnpTNkA8Um5nTnF+dF9afk1wWjV8R0l+Z3pZLTBr
O29lQTYqfm95RVNvRHclUGlNPXluYStQbTt6ZT4rfGB3Tn07IQp6eGlXT1ItaD85OVErYDJGcnlU
NHpje0ZUI2VYZSQyS2R4MUM+cSY1dj44eEpzckdwTElKeHhwI19QMUVOVHxJSyoKenZgZ1JmP2Qx
ciVxSXg/Yy1DKns3TUhBZVE+c2lHKWJMa2R4c1ZpNT1IdzcrNS1tOUI3VkFTckQpbT5haUVVXlI/
CnpUcUQhdDtEYU97cysmdUJsaVFsIXBpNm1BKjd8KTEoWVYwRUNqUlgwRFhjIU0+e3lRbmN7ZEA0
KT0yK2UkP31DZwp6PFdBek4kYCo/V2IkZShXd3A1PV9RS2h5N3c5OTtyaGk+ejhVNUBSWmc3NyFE
QUBYc0JXdldqdlBsZVlWczJkTTEKeiszSTNGM29BUS1kRHEjMzc+LUJwSkMzYypqS1F1bm9YWHly
VGVtKGcrJkBAMVVVOyR9eSZqcFd0TU1oRFQ1UD98CnprPmBucnokYURmNGNHayZrOWE7MTRNd1d7
ZUctbVorVTF6elQrNV5UT2ZwPjRPanMpV0N9MFF8cyFSaik3X1M3Xwp6YSs7fUUhZWxkSVRYQFkx
M1FeKUsqX2BReFhRVHJpbEYya2dAQjckPDNETFRWSXpNdn4yK25NSihQM2QoXkh9TCMKens4dV8/
cXgrcVE1NjV0OXdxLW89MlVwaU5qakRAWk5xcWFVR2ZoUyprN1AlQDJLOW9SSzdhQiQ9OHo0aEtB
PGZgCnpjeURfQXljKCViMSk/MFU3VWhAZHRVXmhPWlV+Q2NeVkIoWCs5dyVtIzlwTng0UlBTSFJ+
eUJAc25peCFPdVB7Iwp6cCliZSQkVCRrfXcoKj1TZDthWlp6PGl5TkM2IUAqVEIkKVNCTlA5P2ps
emJhek1PY0c2YElOSmRMTD5iWDN5SWQKejJAXzhVSj1gP2AtWiZTOSgjQSZFJTkkTjlBVipAcnBt
ZXNkYlVpfmtNN29WQ2U0dVJpRDY2QEtOPG1nMEY1U3JQCnpnPW8yTHZEUDt8OCUjQktCUmxEZDVB
VGt9Vl95YiQkdFUmOWJOTjU8TzVwc0lIQlFCfXRKdVokLXA8U1JQR2BgTwp6QUZid1ZYeHAxUm9V
VT5zV1Y3VzNNYH4qTGtXMnktTVopS1UpOTxgRDlmKGJyJGo4d0g3ZXFRYG9WWHtBYUZ9VTIKej98
Qz0keXx2PE4lVz00dkh3Rj1qZH5qPnNnUjxmNzEra1Q9NF5sWUc0bH15SmtXTmBBSk4wY2g1JEFT
KCRMdDRaCno8aDtvb3NwaXVpUVZzZHxYUHlQR3I0O3ZSSSoqWUwmMDRJbmY2eFFQd1MtN2xud1E7
bXRYV14oMillQ3c2TGx2Zgp6ViFYYCUjMXp3Q1ltSXl4dTFgMnNKZV9PTCtmUVhMbXswdlF4P0VF
QD5idjI8WmZTTit6cSghUGIlUmhVVXhnMEUKeldXdWxWZC1KWHw+PDVtVkI0dV4+IXlXREhyVXB4
YCk7X34wSW82Yn1eU0goZ29pdVFxQU1YZldwaHs9NXM8NU4jCnpqayNzbnF+VkNWaHUhZmY2Uy1S
YzVkJVl5NHdvd04hPjxTSTRQS2ozZG5aVDVJPGxJKCp4Yz4kP1dOfTJwYHFPNwp6cktMSVJxYTtS
eEAhQDZCYkdTTE5IX2hGeHE1fSpBdG5TcnJqIVc1dHRPVUo5KUthbm5QPUVqVTNONDw/JXgkTkEK
eiNLTnlwLT15YkdgLSRBNHleJnZJYWRJOWxwVlQyKkt8ODAhKjhrTTNINiVBJE81VUlJSUh0fk9D
UkkobWA+YXBrCnpJQCFeN1dMTVkjc0ptKUNSQmtsI3l8M0J4JHt4enUxd1YzK2VmWjw/T0RoPCo9
RSVBckdVdFZCKjdwdXV2e2dLdwp6YENEWjZKZVV5TSpOSD1xV1hsWS1vSDJkIV80MjIld2IzJlk/
Vy1lRXgzZWJRdHF2d1ZyezkhTzgreWF3TDI4MjsKenc3cjNzY2E/YFpDYl4pTWZiekt+dGNEalRl
JjlwOzA8KlM4WHA3SW5jelhzNi0qWjJ1RSQteEM4KkFMRWx7WDlOCnozdDBGZjZWZ1hjKipYdkBE
dXtRRGdyT0tPQ2NXeihwIzFfWnY5WX5eZ3VIdHt6ITZyJml6LVlIRUFBYnp6bTImQQp6Yi1VdXpf
U0RBcWcwXiFFWkU+KnNSNSkjTVh6dnNhc35HI1dNTCRBQD53U2E4dTdSM1RCYV5rNDlCSWxiKlBA
fiQKenZkWGxUUHZaNlV3MSRDSVR5cGNuUz0qMXRrK0YlWDNUPkxQdXdrSnglcjhGKEx7dVYxRihU
WChOKVRiPGJsKnN2CnpWcExtZUN3Ti1tOXJiKXBXYEY4aTJ0THhQcFBCZGJkbXRXQHR6MkF+eVpM
bX1aQDRSKWc7NlZmK300TExldz9RLQp6R1ExQUZkfHlDRSZfZy07RWpWTWwlWmlWMVp8K093YDB9
YnRjIW9ab01DdjhXO1ZnQDkkKENjfDw2cT5COEpATj0KenpHN2tQJiVPbTdZQGxSfT9IY1QyNUhs
UncxRF41TCsoeDskKmEqWiRAWXYrP1h1Z15kIzIoREdoTUpUYFpjfE94CnpxT0VoTXtOKXFHcHpO
R2NKVXBGd1chTnpwZHdZS35zT3AtNiVLZk1aSV54S25FKl9mPiV9fnA1a3p6P049bDx5Kgp6QGB9
cDY9fXlLfChlQkR3NHZ5anMoUTFRPV5uOSRHZ2hZO3tpX3R3Q09xTXJxWmNpfVhrbldZX0ZKR2hR
dUppOXoKej13ZFJ7PHVUX3RWQV88c1BMfkNvemxNP3NgQj8yLTYyeHxiMEZJbmZWM0IlaFJ+ZmRA
JkxocDxHd1k9KitWTyR+CnptaGFBNmItY30hbmJNSlYmcVEtPi1aUXJgXmhLRipEY1JtYnJtbjAw
NEJrdiNUIz9OfSomVERoaik7c2UyUWNVUAp6cFBkI2JrVyp+MTslaHM1TkN7aWZ2NlA+YHotcVE4
UHJGYyN0dH4tSWFyME9tOFJWQyMkPUVLTUAyUHVwQiV0dm8KejA4NT0/JUVxMTNyZlFfaFM5VXkq
RE9VI0lCYH00KWZLRkNnajJ1NT1zQj48RWU5ejFPVCpqZWNGKVhTb04wOVFxCno1d3YwfGIwQDxK
VD0xaUtHYD1uN1NLaWZ1RVVPM2R0Z2QtQylPY1pQP3UtQ284bHhAaSpedCVge2xVbHNedEctdwp6
Y2l4WG9oQ2c1VkBybmZjNyFVSHFWTj8yZ3MrR2I7Z0J3UWorIWp8KSlDR29pZjZSKHIpOVBiNyUk
fD5GUU1VTUMKelQtQGg+MntJS1YtKk5mR3drPTg3KnVGdiUjeU9tJVZWVElkbSVDZGZtUGglbTx3
eG9CZXlWRy1NSG1ZQWsyVyZsCnprVjQ9Y1pAdXJvb2NkbCV2UUNgUnZ3V3E/e2N2aEhxM2cmcGZB
JikjQChBQGpfYCNze3FHejEqdj4kIX1TPnkzQwp6dGgjR2tPQDQoRGRONE9acEVOVTd6JDckWD47
Mj93dCpGb0x5aF8jNUV5eHJYbj82KTFJNmhPVUxXdyM0cWdYMj8Kejd5QzMldUchfnRmJT4oWT0+
dyh5SkhGMVRAWmlffENKN31LLXgpay1ZdGZ1PFJtVTQyPXMmcXslKjU8KSNmRXdMCnolOFlTK25X
dXZXPzRZJG0oKDMwTnJ1eDM4Zm9CcWYmO3RfKnpvYU8/U2U4YSFwSUdYPG9XMkNuaFhqXkJuJnI+
Uwp6Nll1PWB4VyZnemBOVW5aTEN5PFAjamRtJCU+MEVxbk9KYEU8ND9aQSlMPDJBSiRHSTlzWGFF
Z0UyM2V7XmRAKVAKenhLTUV8SihafExZez9+MEg0VUApJjwoOCR7dHJxeXhhZnUoN3E5TEVUNVh3
Rl5CRXs2YEdiQWJPdyQwZGl2dDVxCnowN3V4VF9QJGJeQGp9T1ZZclRCIW01eCpOaWYkT2hqb01e
V0Q4NGJiUDBXZUtfSVEyMlgyVmV+VTZaTmBjWkdJQwp6eH59ZmpAVklWNl98cikxI3V4R3ZOK0Y4
WjYjQlVJcHtyWElpY1NJVVFWd2JEU18zeFVTJm1yRmBMPmJ5VnB9NXUKekFTQHZsSXhpSFJPJTZ6
XnhPbGxueD0tbCl6NmVMRVViKEpeYC1mejhuT2kpVmh4Qio3Pm5OQEU2aitaYVpwQEtPCnpIJXxU
ZkBwWDg+YUVOem9AQTBDb2ZgNldQI04maVp1SlNCT1J8RXpvKTBBXnhKUnRLNEs8QHlySE0/QXRN
UmlxUAp6PFM0WHY9MkMhQ2NYN0Y+ciVHcEBlQEA0amR1YklsO0NoPy1gQEpgRz9HYyg/UilZaW5X
RVR9PD8qQV8oTztXTHYKelJMNFg+cH44UkdHPT19Rlg9LX5wVj9ieWUpPWRXRVlLZ2FWY0ViXj92
JjJ0VGIwLVcpVDhpfVdFOEFJTUBhQXJJCnpJSUk+MVopWGk0bTJZaWFmcEZwclFCenRQPVY+R2U1
az4rOVZQRl4jMHRPPzFxOVBDemtiO31KcW4pSmAqMldQNwp6MU9xQCl1OWdfQTgmRV9QMHN4Vldr
djteVzVGYE1FR0l5NTgqeEFeK2s9Nmt+VDVjRjhVNyFlWTI/P0g5Rn4mZkYKenEkO2M/djhNVztz
O3RPZzUmVGhLaDliZkxQaiVWa25GX1dRY3JvfU9CQGp+XlIrPWlKJUg2RlFjazRPeHNtQUFQCnpY
SWpVbEJGPnVFWio5PF5DS1hLe0g0Zkh5WmlTPnlGNjs5NVBwMnxtXiVUMTtjKHVwYzwod15qKSh7
c2NVJU8/Nwp6enJNWHEoN2dGbWFZZzg+aylUJSZFZlVoV2VRZUg0OXlAUE87Q2lvdXZ0cVF7dUtU
TD1YVGowd2B7eT83KDgoYysKekVHPjZIUTtqPitFVldnfHZgJmotUE5nVCo1XyZZMU89NDxoNENv
ZmVubHFoeVJNfnl5QSleVU9zQyhXMTRWTCl0CnpMMnZRUUZUQipQNFFnPWJuQlJ2JmNqIyYrV3Y2
LTJEb09DQDgyYSUzbjhHJWxGRXtabjlmdD1CK2RNOGhsR0x5Qwp6USlzP0FyP0shO1h0TWR+VldY
bWkjQWxAOHo4KEp5S1Njalo8ZXlYa1h9TWR0ayQ5bnZjZ09zZU59SWM0TlNwRDAKekdyfHQ8PlZ+
cDQkQ0d3aSs1Q0BwNWRjV2YmZFNaISlkKz99MEZlK2Q1RHRke1ZJcmJIc0ljKHdmZEdTbnF5YV5N
CnpmaFBhRztlUWJrTmFDcGAwSGxyNiFQPTJ9MXdoaWFZWGJocDEwdip+alJySVhOUSZtNF5OXyNJ
NjlYWDleUzI1fQp6OWdubHIhbmhmTWhga0d0SHBiSjw8UjdxcXRAPDZteTE1TW9xOzhIVWFUWlBq
MEJLQGVhcWY2YWo0S2RBR05CMWwKeiFDMlh1bGEyeigwNzRXMjZvRXJjS3lyQVR5RUN4fnFEOVE1
SW84I2cxWXpqfkxUTTM/ZlFPd1dNcEk1MnF5VGd5Cno9Mj0xbGdkI2Rmd0JRT1BieDsxemM5S2Ni
QXRuTy0+NWVQbFVwQGYtYSlQK3ZQY0tNYFJrRXtrSDNJKGpsPU8raAp6eHMhNzdfZUIxIVdBb2J2
JUE5ejdhVz0lTFpIUGhzNGpLU2JiSC1xJEVKLShrKFNLdXNeYkhKd1NhKE9xfE5hM0oKenY2YW9T
SG4lWllLezt2T2YyOHozJUB0eDBRdG9jSElKYEpvN0w1amo7bGcwQkZwJmVvRnllck4hOTwjWGde
fFI2Cno7djV1QXlpSkk1cSRxS3F7KlhmP2h5ZjVnTSNRVj80K3NQYWZ+WlNVYHdjO1lnQSZ6PHlL
TG9kaVRSSG5vVHgrNgp6Z0E8e1ZCb219VGYrbT9EdTdTIUR8QX0rSXY1MSU/XkR5RVpOZT10ZEVI
UWMrVipCZDBqMkxsVjZhcG9CRUNMbVUKeiFVZSVsOXgjfVBfaXRKQyNBQj1oVT8ybnpBUl8obzBG
ZWo7MzwwelR7dmt1YzVYOV9+OXc3RVZHQjZsSXIxSmxlCnpMQlloRnw1SnY5aXhTVnNLVkBKal5q
fl5KaV5Ubz9yeWhiUntGaDdee3gzV3ZhWDA+Xzl1a1dEdztvalZVcF54ZAp6cVdAbHQ2I2JpQkhA
ckZWZzIkN250ITN3cEEqS3FYaU5nYE9gVEduMktuaHJFOTF1ZHs0KUcjVGtPM00yI2dXM1kKemFG
aSQqQ1dWQmRyS016e3ZMYXc4OFpIZiVLfWshJnBrUmFxO1F2PTQ5UmVBZ0NDVjBLPkVQPF8xT3k+
YkQ2b2BfCnhDXylNP0R9cUtLTHtKRH1ESmM7VjVkO2IlallMVklOS3wlcEdzbkNBLWNuKStBXj5o
flN2NTReeld7bkBfV0orOwoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvcmVzb3VyY2VzL3Rlc3QudHh0IGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvcmVzb3VyY2VzL3Rlc3QudHh0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjlkYWVhZmI5ODY0Y2Y0MzA1NWFlOTNiZWIwYWZkNmM3ZDE0NGJmYTQKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9yZXNvdXJjZXMv
dGVzdC50eHQKQEAgLTAsMCArMSBAQAordGVzdApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdF91dGlscy5jIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRHdGsvdGVzdF91dGlscy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZiYjY0NWQwZGNjYmFhNDE5
MTdiOWY2MTk0ZDVmMWI5MmFkZDhkMTQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0X3V0aWxzLmMKQEAgLTAsMCArMSw1MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBBcm5vIFJlbmV2aWVyCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJ0ZXN0X3V0aWxz
LmgiCisKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KKworaW50
IHRlc3R1dGlsc19yZWxhdGl2ZV9jaGRpcihjb25zdCBnY2hhciAqdGFyZ2V0RmlsZW5hbWUsIGNv
bnN0IGdjaGFyICpleGVjdXRhYmxlUGF0aCkKK3sKKyAgICAvKiB1c2VyIGNhbiBzZXQgbG9jYXRp
b24gb2YgdGhlIHdlYmtpdCByZXBvc2l0b3J5IGRpcmVjdG9yeSBpZiBpdCBkaWZmZXJzIGZyb20g
YnVpbGQgZGlyZWN0b3J5ICovCisgICAgY29uc3QgZ2NoYXIgKnJlcG9QYXRoID0gZ19nZXRlbnYo
IldFQktJVFJFUE9ESVIiKTsKKyAgICBpZiAocmVwb1BhdGgpIHsKKyAgICAgICAgaWYgKGdfY2hk
aXIocmVwb1BhdGgpKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0gZWxzZSBpZiAoZ19j
aGRpcihnX3BhdGhfZ2V0X2Rpcm5hbWUoZXhlY3V0YWJsZVBhdGgpKSkKKyAgICAgICAgICAgIHJl
dHVybiAtMTsKKworICAgIHdoaWxlICghZ19maWxlX3Rlc3QodGFyZ2V0RmlsZW5hbWUsIEdfRklM
RV9URVNUX0VYSVNUUykpIHsKKyAgICAgICAgZ2NoYXIgKnBhdGhOYW1lOworICAgICAgICBpZiAo
Z19jaGRpcigiLi4iKSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgZ19hc3NlcnQo
IWdfc3RyX2VxdWFsKChwYXRoTmFtZSA9IGdfZ2V0X2N1cnJlbnRfZGlyKCkpLCAiLyIpKTsKKyAg
ICAgICAgZ19mcmVlKHBhdGhOYW1lKTsKKyAgICB9CisKKyAgICBnY2hhciAqZGlyTmFtZSA9IGdf
cGF0aF9nZXRfZGlybmFtZSh0YXJnZXRGaWxlbmFtZSk7CisgICAgaWYgKGdfY2hkaXIoZGlyTmFt
ZSkpIHsKKyAgICAgICAgZ19mcmVlKGRpck5hbWUpOworICAgICAgICByZXR1cm4gLTE7CisgICAg
fQorCisgICAgZ19mcmVlKGRpck5hbWUpOworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdF91dGlscy5oIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdF91dGlscy5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVj
NjBkYTNmMGZhYmIzYWVkOGJhODA0NTgyMDJjNzk0YThlM2Y3MjAKLS0tIC9kZXYvbnVsbAorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0X3V0aWxzLmgKQEAgLTAs
MCArMSwzIEBACisjaW5jbHVkZSA8Z2xpYi5oPgorCitpbnQgdGVzdHV0aWxzX3JlbGF0aXZlX2No
ZGlyKGNvbnN0IGdjaGFyICp0YXJnZXRGaWxlbmFtZSwgY29uc3QgZ2NoYXIgKmV4ZWN1dGFibGVQ
YXRoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rl
c3RhcHBsaWNhdGlvbmNhY2hlLmMgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0
ay90ZXN0YXBwbGljYXRpb25jYWNoZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcxOGY0MDFhN2I3YTE1NTUzYzBi
MzljNjQ3MWFkMjU5Mjc3NjAzZTMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0YXBwbGljYXRpb25jYWNoZS5jCkBAIC0wLDAgKzEsNDkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTHVrYXN6IFNsYWNoY2lhaworICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxnbGliL2dwcmludGYuaD4K
KyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgorCitzdGF0
aWMgdm9pZCB0ZXN0X2FwcGxpY2F0aW9uX2NhY2hlX21heGltdW1fc2l6ZSgpCit7CisgICAgdW5z
aWduZWQgbG9uZyBsb25nIG1heFNpemUgPSA4MTkyOworICAgIHdlYmtpdF9hcHBsaWNhdGlvbl9j
YWNoZV9zZXRfbWF4aW11bV9zaXplKG1heFNpemUpOworCisgICAgLy8gQ3JlYXRpbmcgYSBXZWJW
aWV3IC0gbWFrZSBzdXJlIHRoYXQgaXQgZGlkbid0IGNoYW5nZSBhbnl0aGluZworICAgIFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygp
KTsKKyAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKKyAgICBnX29iamVjdF91bnJlZih3
ZWJWaWV3KTsKKworICAgIGdfYXNzZXJ0KG1heFNpemUgPT0gd2Via2l0X2FwcGxpY2F0aW9uX2Nh
Y2hlX2dldF9tYXhpbXVtX3NpemUoKSk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiog
YXJndikKK3sKKyAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7CisKKyAgICBn
X3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOworICAgIGdfdGVzdF9h
ZGRfZnVuYygiL3dlYmtpdC9hcHBsaWNhdGlvbl9jYWNoZS9tYXhpbXVtX3NpemUiLAorICAgICAg
ICAgICAgICAgICAgICB0ZXN0X2FwcGxpY2F0aW9uX2NhY2hlX21heGltdW1fc2l6ZSk7CisKKyAg
ICByZXR1cm4gZ190ZXN0X3J1bigpOworfQorCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0YXRrLmMgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdEd0ay90ZXN0YXRrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmEyZGI2MTQ2ZWEwODZkZTM3OGQ3YWQx
MzM2NTVkMmUyMjE5YzdiMAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0R3RrL3Rlc3RhdGsuYwpAQCAtMCwwICsxLDE0NzYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5n
IEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z2xpYi9nc3Rk
aW8uaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8bG9jYWxlLmg+CisjaW5jbHVk
ZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgorCitzdGF0aWMgY29uc3Qg
Y2hhciogY2VudGVyZWRDb250ZW50cyA9ICI8aHRtbD48Ym9keT48cCBzdHlsZT0ndGV4dC1hbGln
bjogY2VudGVyOyc+U2hvcnQgbGluZTwvcD48cCBzdHlsZT0ndGV4dC1hbGlnbjogY2VudGVyOyc+
TG9uZy1zaXplIGxpbmUgd2l0aCBzb21lIGZvbyBiYXIgYmF6IGNvbnRlbnQ8L3A+PHAgc3R5bGU9
J3RleHQtYWxpZ246IGNlbnRlcjsnPlNob3J0IGxpbmU8L3A+PHAgc3R5bGU9J3RleHQtYWxpZ246
IGNlbnRlcjsnPlRoaXMgaXMgYSBtdWx0aS1saW5lIHBhcmFncmFwaDxiciAvPndoZXJlIHRoZSBm
aXJzdCBsaW5lPGJyIC8+aXMgdGhlIGJpZ2dlc3Qgb25lPC9wPjwvYm9keT48L2h0bWw+IjsKKwor
c3RhdGljIGNvbnN0IGNoYXIqIGNvbnRlbnRzID0gIjxodG1sPjxib2R5PjxwPlRoaXMgaXMgYSB0
ZXN0LiBUaGlzIGlzIHRoZSBzZWNvbmQgc2VudGVuY2UuIEFuZCB0aGlzIHRoZSB0aGlyZC48L3A+
PC9ib2R5PjwvaHRtbD4iOworCitzdGF0aWMgY29uc3QgY2hhciogY29udGVudHNJblRhYmxlV2l0
aEhlYWRlcnMgPSAiPGh0bWw+PGJvZHk+PHRhYmxlPjx0cj48dGg+Zm9vPC90aD48dGg+YmFyPC90
aD48dGggY29sc3Bhbj0nMic+YmF6PC90aD48L3RyPjx0cj48dGg+cXV4PC90aD48dGQ+MTwvdGQ+
PHRkPjI8L3RkPjx0ZD4zPC90ZD48L3RyPjx0cj48dGggcm93c3Bhbj0nMic+cXV1eDwvdGg+PHRk
PjQ8L3RkPjx0ZD41PC90ZD48dGQ+NjwvdGQ+PC90cj48dHI+PHRkPjY8L3RkPjx0ZD43PC90ZD48
dGQ+ODwvdGQ+PC90cj48dHI+PHRoPmNvcmdlPC90aD48dGQ+OTwvdGQ+PHRkPjEwPC90ZD48dGQ+
MTE8L3RkPjwvdHI+PC90YWJsZT48dGFibGU+PHRyPjx0ZD4xPC90ZD48dGQ+MjwvdGQ+PC90cj48
dHI+PHRkPjM8L3RkPjx0ZD40PC90ZD48L3RyPjwvdGFibGU+PC9ib2R5PjwvaHRtbD4iOworCitz
dGF0aWMgY29uc3QgY2hhciogY29udGVudHNXaXRoRXh0cmFuZW91c1doaXRlU3BhY2VzID0gIjxo
dG1sPjxoZWFkPjxib2R5PjxwPlRoaXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYWdy
YXBoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmtlZCE8L3A+PC9ib2R5PjwvaHRtbD4iOwor
CitzdGF0aWMgY29uc3QgY2hhciogY29tYm9Cb3hTZWxlY3RvciA9ICI8aHRtbD48Ym9keT48c2Vs
ZWN0PjxvcHRpb24gc2VsZWN0ZWQgdmFsdWU9J2Zvbyc+Zm9vPC9vcHRpb24+PG9wdGlvbiB2YWx1
ZT0nYmFyJz5iYXI8L29wdGlvbj48L3NlbGVjdD48L2JvZHk+PC9odG1sPiI7CisKK3N0YXRpYyBj
b25zdCBjaGFyKiBlbWJlZGRlZE9iamVjdHMgPSAiPGh0bWw+PGJvZHk+PHA+Q2hvb3NlOiA8aW5w
dXQgdmFsdWU9J2ZvbycgdHlwZT0nY2hlY2tib3gnLz5mb28gPGlucHV0IHZhbHVlPSdiYXInIHR5
cGU9J2NoZWNrYm94Jy8+YmFyIChwaWNrIG9uZSk8L3A+PHA+Q2hvb3NlOiA8c2VsZWN0IG5hbWU9
J2Zvbyc+PG9wdGlvbj5iYXI8L29wdGlvbj48b3B0aW9uPmJhejwvb3B0aW9uPjwvc2VsZWN0PiAo
cGljayBvbmUpPC9wPjxwPjxpbnB1dCBuYW1lPSdmb29iYXJidXR0b24nIHZhbHVlPSdmb29iYXIn
IHR5cGU9J2J1dHRvbicvPjwvcD48L2JvZHk+PC9odG1sPiI7CisKK3N0YXRpYyBjb25zdCBjaGFy
KiBmb3JtV2l0aFRleHRJbnB1dHMgPSAiPGh0bWw+PGJvZHk+PGZvcm0+PGlucHV0IHR5cGU9J3Rl
eHQnIG5hbWU9J2VudHJ5JyAvPjxpbnB1dCB0eXBlPSdwYXNzd29yZCcgbmFtZT0ncGFzc3dvcmRF
bnRyeScgLz48L2Zvcm0+PC9ib2R5PjwvaHRtbD4iOworCitzdGF0aWMgY29uc3QgY2hhciogaHlw
ZXJ0ZXh0QW5kSHlwZXJsaW5rcyA9ICI8aHRtbD48Ym9keT48cD5BIHBhcmFncmFwaCB3aXRoIG5v
IGxpbmtzIGF0IGFsbDwvcD48cD48YSBocmVmPSdodHRwOi8vZm9vLmJhci5iYXovJz5BIGxpbmU8
L2E+IHdpdGggPGEgaHJlZj0naHR0cDovL2Jhci5iYXouZm9vLyc+YSBsaW5rIGluIHRoZSBtaWRk
bGU8L2E+IGFzIHdlbGwgYXMgYXQgdGhlIGJlZ2lubmluZyBhbmQgPGEgaHJlZj0naHR0cDovL2Jh
ei5mb28uYmFyLyc+YXQgdGhlIGVuZDwvYT48L3A+PG9sPjxsaT5MaXN0IGl0ZW0gd2l0aCBhIDxz
cGFuPjxhIGhyZWY9J2h0dHA6Ly9mb28uYmFyLmJhei8nPmxpbmsgaW5zaWRlIGEgc3BhbiBub2Rl
PC9hPjwvc3Bhbj48L2xpPjwvb2w+PC9ib2R5PjwvaHRtbD4iOworCitzdGF0aWMgY29uc3QgY2hh
ciogbGF5b3V0QW5kRGF0YVRhYmxlcyA9ICI8aHRtbD48Ym9keT48dGFibGU+PHRyPjx0aD5PZGQ8
L3RoPjx0aD5FdmVuPC90aD48L3RyPjx0cj48dGQ+MTwvdGQ+PHRkPjI8L3RkPjwvdHI+PC90YWJs
ZT48dGFibGU+PHRyPjx0ZD5mb288L3RkPjx0ZD5iYXI8L3RkPjwvdHI+PC90YWJsZT48L2JvZHk+
PC9odG1sPiI7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBsaW5rc1dpdGhJbmxpbmVJbWFnZXMgPSAi
PGh0bWw+PGhlYWQ+PHN0eWxlPmEuaHR0cDpiZWZvcmUge2NvbnRlbnQ6IHVybChuby1pbWFnZS5w
bmcpO308L3N0eWxlPjxib2R5PjxwPjxhIGNsYXNzPSdodHRwJyBocmVmPSdmb28nPmZvbzwvYT4g
YmFyIGJhejwvcD48cD5mb28gPGEgY2xhc3M9J2h0dHAnIGhyZWY9J2Jhcic+YmFyPC9hPiBiYXo8
L3A+PHA+Zm9vIGJhciA8YSBjbGFzcz0naHR0cCcgaHJlZj0nYmF6Jz5iYXo8L2E+PC9wPjwvYm9k
eT48L2h0bWw+IjsKKworc3RhdGljIGNvbnN0IGNoYXIqIGxpc3RzT2ZJdGVtcyA9ICI8aHRtbD48
Ym9keT48dWw+PGxpPnRleHQgb25seTwvbGk+PGxpPjxhIGhyZWY9J2Zvbyc+bGluayBvbmx5PC9h
PjwvbGk+PGxpPnRleHQgYW5kIGEgPGEgaHJlZj0nYmFyJz5saW5rPC9hPjwvbGk+PC91bD48b2w+
PGxpPnRleHQgb25seTwvbGk+PGxpPjxhIGhyZWY9J2Zvbyc+bGluayBvbmx5PC9hPjwvbGk+PGxp
PnRleHQgYW5kIGEgPGEgaHJlZj0nYmFyJz5saW5rPC9hPjwvbGk+PC9vbD48L2JvZHk+PC9odG1s
PiI7CisKK3N0YXRpYyBjb25zdCBjaGFyKiB0ZXh0Rm9yQ2FyZXRCcm93c2luZyA9ICI8aHRtbD48
Ym9keT48aDE+QSB0ZXh0IGhlYWRlcjwvaDE+PHA+QSBwYXJhZ3JhcGggPGEgaHJlZj0naHR0cDov
L2Zvby5iYXIuYmF6Lyc+d2l0aCBhIGxpbms8L2E+IGluIHRoZSBtaWRkbGU8L3A+PG9sPjxsaT5B
IGxpc3QgaXRlbTwvbGk+PGxpPjxzcGFuIHN0eWxlPSdkaXNwbGF5OmJsb2NrOyc+QmxvY2sgc3Bh
biBpbiBhIGxpc3QgaXRlbTwvc3Bhbj48c3Bhbj5JbmxpbmUgc3BhbiBpbiBhIGxpc3QgaXRlbTwv
c3Bhbj48L2xpPjxsaT48YSBocmVmPSdmb28nPjxzcGFuIHN0eWxlPSdkaXNwbGF5OmJsb2NrOyc+
QmxvY2sgc3BhbiBpbiBhIGxpbmsgaW4gYSBsaXN0IGl0ZW08L3NwYW4+PHNwYW4+SW5saW5lIHNw
YW4gaW4gYSBsaW5rIGluIGEgbGlzdCBpdGVtPC9zcGFuPjwvYT48L2xpPjwvb2w+PHNlbGVjdD48
b3B0aW9uIHNlbGVjdGVkIHZhbHVlPSdmb28nPkFuIG9wdGlvbiBpbiBhIGNvbWJvIGJveDwvb3B0
aW9uPjwvc2VsZWN0PjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdmb28nIHZhbHVlPSdmb28gYmFy
IGJheicgLz48dGFibGU+PHRyPjx0ZD5hIHRhYmxlIGNlbGw8L3RkPjx0ZD48L3RkPjx0ZD48YSBo
cmVmPSdmb28nPjxzcGFuIHN0eWxlPSdkaXNwbGF5OmJsb2NrOyc+QmxvY2sgc3BhbiBpbiBhIGxp
bmsgaW4gYSB0YWJsZSBjZWxsPC9zcGFuPjxzcGFuPklubGluZSBzcGFuIGluIGEgbGluayBpbiBh
IHRhYmxlIGNlbGw8L3NwYW4+PC9hPjwvdGQ+PHRkPjxzcGFuIHN0eWxlPSdkaXNwbGF5OmJsb2Nr
Oyc+QmxvY2sgc3BhbiBpbiBhIHRhYmxlIGNlbGw8L3NwYW4+PHNwYW4+SW5saW5lIHNwYW4gaW4g
YSB0YWJsZSBjZWxsPC9zcGFuPjwvdGQ+PC90cj48L3RhYmxlPjxoND48YSBocmVmPSdmb28nPjxz
cGFuIHN0eWxlPSdkaXNwbGF5OmJsb2NrOyc+QmxvY2sgc3BhbiBpbiBhIGxpbmsgaW4gYSBoZWFk
aW5nPC9zcGFuPjxzcGFuPklubGluZSBzcGFuIGluIGEgbGluayBpbiBhIGhlYWRpbmc8L3NwYW4+
PC9oND48aDQ+PHNwYW4gc3R5bGU9J2Rpc3BsYXk6YmxvY2s7Jz5CbG9jayBzcGFuIGluIGEgaGVh
ZGluZzwvc3Bhbj48c3Bhbj5JbmxpbmUgc3BhbiBpbiBhIGhlYWRpbmc8L3NwYW4+PC9oND48L2Jv
ZHk+PC9odG1sPiI7CisKK3N0YXRpYyBjb25zdCBjaGFyKiB0ZXh0Rm9yU2VsZWN0aW9ucyA9ICI8
aHRtbD48Ym9keT48cD5BIHBhcmFncmFwaCB3aXRoIHBsYWluIHRleHQ8L3A+PHA+QSBwYXJhZ3Jh
cGggd2l0aCA8YSBocmVmPSdodHRwOi8vd2Via2l0Lm9yZyc+YSBsaW5rPC9hPiBpbiB0aGUgbWlk
ZGxlPC9wPjxvbD48bGk+QSBsaXN0IGl0ZW08L2xpPjwvb2w+PHNlbGVjdD48L2JvZHk+PC9odG1s
PiI7CisKK3N0YXRpYyBjb25zdCBjaGFyKiB0ZXh0V2l0aEF0dHJpYnV0ZXMgPSAiPGh0bWw+PGhl
YWQ+PHN0eWxlPi5zdDEge2ZvbnQtZmFtaWx5OiBtb25vc3BhY2U7IGNvbG9yOnJnYigxMjAsMTIx
LDEyMik7fSAuc3QyIHt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOyBiYWNrZ3JvdW5kLWNvbG9y
OnJnYig4MCw4MSw4Mik7fTwvc3R5bGU+PC9oZWFkPjxib2R5PjxwIHN0eWxlPVwiZm9udC1zaXpl
OjE0OyB0ZXh0LWFsaWduOnJpZ2h0O1wiPlRoaXMgaXMgdGhlIDxpPmZpcnN0PC9pPjxiPiBzZW50
ZW5jZSBvZiB0aGlzIHRleHQuPC9iPjwvcD48cCBjbGFzcz1cInN0MVwiPlRoaXMgc2VudGVuY2Ug
c2hvdWxkIGhhdmUgYW4gc3R5bGUgYXBwbGllZCA8c3BhbiBjbGFzcz1cInN0MlwiPmFuZCB0aGlz
IHBhcnQgc2hvdWxkIGhhdmUgYW5vdGhlciBvbmU8L3NwYW4+LjwvcD48cD54PHN1Yj4xPC9zdWI+
PHN1cD4yPC9zdXA+PXg8c3ViPjI8L3N1Yj48c3VwPjM8L3N1cD48L3A+PHAgc3R5bGU9XCJ0ZXh0
LWFsaWduOmNlbnRlcjtcIj5UaGlzIHNlbnRlbmNlIGlzIHRoZSA8c3RyaWtlPmxhc3Q8L3N0cmlr
ZT4gb25lLjwvcD48L2JvZHk+PC9odG1sPiI7CisKK3N0YXRpYyBBdGtPYmplY3QqIGdldFdlYkFy
ZWFPYmplY3QoV2ViS2l0V2ViVmlldyogd2ViVmlldykKK3sKKyAgICAvKiBNYW51YWxseSBzcGlu
IHRoZSBtYWluIGNvbnRleHQgdG8gbWFrZSBzdXJlIHRoZSBhY2Nlc3NpYmxlCisgICAgICAgb2Jq
ZWN0cyBhcmUgcHJvcGVybHkgY3JlYXRlZCBiZWZvcmUgY29udGludWluZy4gKi8KKyAgICB3aGls
ZSAoZ19tYWluX2NvbnRleHRfcGVuZGluZygwKSkKKyAgICAgICAgZ19tYWluX2NvbnRleHRfaXRl
cmF0aW9uKDAsIFRSVUUpOworCisgICAgQXRrT2JqZWN0KiByb290T2JqZWN0ID0gZ3RrX3dpZGdl
dF9nZXRfYWNjZXNzaWJsZShHVEtfV0lER0VUKHdlYlZpZXcpKTsKKyAgICBpZiAoIXJvb3RPYmpl
Y3QpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgQXRrT2JqZWN0KiB3ZWJBcmVhT2JqZWN0
ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChyb290T2JqZWN0LCAwKTsKKyAgICBp
ZiAoIXdlYkFyZWFPYmplY3QpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyogV2UgZG9u
J3QgbmVlZCB0aGUgZXh0cmEgcmVmIGhlcmUuICovCisgICAgZ19vYmplY3RfdW5yZWYod2ViQXJl
YU9iamVjdCk7CisKKyAgICByZXR1cm4gd2ViQXJlYU9iamVjdDsKK30KKworc3RhdGljIGdjaGFy
KiB0ZXh0Q2FyZXRNb3ZlZFJlc3VsdCA9IDA7CisKK3N0YXRpYyB2b2lkIHRleHRDYXJldE1vdmVk
Q2FsbGJhY2soQXRrVGV4dCogdGV4dCwgZ2ludCBwb3MsIGdwb2ludGVyIGRhdGEpCit7CisgICAg
Z19hc3NlcnQoQVRLX0lTX1RFWFQodGV4dCkpOworCisgICAgZ19mcmVlKHRleHRDYXJldE1vdmVk
UmVzdWx0KTsKKyAgICBBdGtSb2xlIHJvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKEFUS19PQkpF
Q1QodGV4dCkpOworICAgIHRleHRDYXJldE1vdmVkUmVzdWx0ID0gZ19zdHJkdXBfcHJpbnRmKCJ8
JXN8JWR8IiwgYXRrX3JvbGVfZ2V0X25hbWUocm9sZSksIHBvcyk7Cit9CisKK3N0YXRpYyB2b2lk
IHRlc3RXZWJraXRBdGtDYXJldE9mZnNldHMoKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBnX29iamVj
dF9yZWZfc2luayh3ZWJWaWV3KTsKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAs
IDAsIDgwMCwgNjAwIH07CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQo
d2ViVmlldyksICZhbGxvY2F0aW9uKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmco
d2ViVmlldywgdGV4dEZvckNhcmV0QnJvd3NpbmcsIDAsIDAsIDApOworCisgICAgQXRrT2JqZWN0
KiBvYmplY3QgPSBnZXRXZWJBcmVhT2JqZWN0KHdlYlZpZXcpOworICAgIGdfYXNzZXJ0KG9iamVj
dCk7CisKKyAgICBBdGtPYmplY3QqIGhlYWRlciA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVf
Y2hpbGQob2JqZWN0LCAwKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChoZWFkZXIpKTsKKyAg
ICBnX3NpZ25hbF9jb25uZWN0KGhlYWRlciwgInRleHQtY2FyZXQtbW92ZWQiLCBHX0NBTExCQUNL
KHRleHRDYXJldE1vdmVkQ2FsbGJhY2spLCAwKTsKKworICAgIC8qIEl0IHNob3VsZCBiZSBwb3Nz
aWJsZSB0byBwbGFjZSB0aGUgY2FyZXQgaW5zaWRlIGEgaGVhZGVyLiAqLworICAgIGdib29sZWFu
IHJlc3VsdCA9IGF0a190ZXh0X3NldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQoaGVhZGVyKSwgNSk7
CisgICAgZ19hc3NlcnRfY21waW50KHJlc3VsdCwgPT0sIFRSVUUpOworICAgIGdpbnQgb2Zmc2V0
ID0gYXRrX3RleHRfZ2V0X2NhcmV0X29mZnNldChBVEtfVEVYVChoZWFkZXIpKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQob2Zmc2V0LCA9PSwgNSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHRDYXJl
dE1vdmVkUmVzdWx0LCA9PSwgInxoZWFkaW5nfDV8Iik7CisKKyAgICBBdGtPYmplY3QqIHBhcmFn
cmFwaCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAxKTsKKyAgICBn
X2Fzc2VydChBVEtfSVNfVEVYVChwYXJhZ3JhcGgpKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KHBh
cmFncmFwaCwgInRleHQtY2FyZXQtbW92ZWQiLCBHX0NBTExCQUNLKHRleHRDYXJldE1vdmVkQ2Fs
bGJhY2spLCAwKTsKKworICAgIC8qIEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBwbGFjZSB0aGUg
Y2FyZXQgaW5zaWRlIGEgcGFyYWdyYXBoIGFuZCBhIGxpbmsuICovCisgICAgcmVzdWx0ID0gYXRr
X3RleHRfc2V0X2NhcmV0X29mZnNldChBVEtfVEVYVChwYXJhZ3JhcGgpLCA1KTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQocmVzdWx0LCA9PSwgVFJVRSk7CisgICAgb2Zmc2V0ID0gYXRrX3RleHRfZ2V0
X2NhcmV0X29mZnNldChBVEtfVEVYVChwYXJhZ3JhcGgpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
b2Zmc2V0LCA9PSwgNSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHRDYXJldE1vdmVkUmVzdWx0
LCA9PSwgInxwYXJhZ3JhcGh8NXwiKTsKKworICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9jYXJl
dF9vZmZzZXQoQVRLX1RFWFQocGFyYWdyYXBoKSwgMjApOworICAgIGdfYXNzZXJ0X2NtcGludChy
ZXN1bHQsID09LCBUUlVFKTsKKyAgICBvZmZzZXQgPSBhdGtfdGV4dF9nZXRfY2FyZXRfb2Zmc2V0
KEFUS19URVhUKHBhcmFncmFwaCkpOworICAgIGdfYXNzZXJ0X2NtcGludChvZmZzZXQsID09LCAy
MCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHRDYXJldE1vdmVkUmVzdWx0LCA9PSwgInxwYXJh
Z3JhcGh8MjB8Iik7CisKKyAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfY2FyZXRfb2Zmc2V0KEFU
S19URVhUKHBhcmFncmFwaCksIDMwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocmVzdWx0LCA9PSwg
VFJVRSk7CisgICAgb2Zmc2V0ID0gYXRrX3RleHRfZ2V0X2NhcmV0X29mZnNldChBVEtfVEVYVChw
YXJhZ3JhcGgpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQob2Zmc2V0LCA9PSwgMzApOworICAgIGdf
YXNzZXJ0X2NtcHN0cih0ZXh0Q2FyZXRNb3ZlZFJlc3VsdCwgPT0sICJ8cGFyYWdyYXBofDMwfCIp
OworCisgICAgQXRrT2JqZWN0KiBsaW5rID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGls
ZChwYXJhZ3JhcGgsIDApOworICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKGxpbmspKTsKKworICAg
IHJlc3VsdCA9IGF0a190ZXh0X3NldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQobGluayksIDUpOwor
ICAgIGdfYXNzZXJ0X2NtcGludChyZXN1bHQsID09LCBUUlVFKTsKKyAgICBvZmZzZXQgPSBhdGtf
dGV4dF9nZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhUKGxpbmspKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQob2Zmc2V0LCA9PSwgNSk7CisgICAgLyogUG9zaXRpb25zIGluc2lkZSBsaW5rcyBhcmUgcmVw
b3J0ZWQgcmVsYXRpdmUgdG8gdGhlIHBhcmFncmFwaC4gKi8KKyAgICBnX2Fzc2VydF9jbXBzdHIo
dGV4dENhcmV0TW92ZWRSZXN1bHQsID09LCAifHBhcmFncmFwaHwxN3wiKTsKKworICAgIEF0a09i
amVjdCogbGlzdCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAyKTsK
KyAgICBnX2Fzc2VydChBVEtfT0JKRUNUKGxpc3QpKTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0
X2dldF9yb2xlKGxpc3QpID09IEFUS19ST0xFX0xJU1QpOworICAgIGdfYXNzZXJ0X2NtcGludChh
dGtfb2JqZWN0X2dldF9uX2FjY2Vzc2libGVfY2hpbGRyZW4obGlzdCksID09LCAzKTsKKworICAg
IEF0a09iamVjdCogbGlzdEl0ZW0gPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGxp
c3QsIDApOworICAgIGxpc3RJdGVtID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChs
aXN0LCAyKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChsaXN0SXRlbSkpOworCisgICAgLyog
SXQncyBub3QgcG9zc2libGUgdG8gcGxhY2UgdGhlIGNhcmV0IGluc2lkZSBhbiBpdGVtJ3MgbWFy
a2VyLiAqLworICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQo
bGlzdEl0ZW0pLCAxKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocmVzdWx0LCA9PSwgRkFMU0UpOwor
CisgICAgLyogSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHBsYWNlIHRoZSBjYXJldCBpbnNpZGUg
YW4gaXRlbSdzIHRleHQuICovCisgICAgcmVzdWx0ID0gYXRrX3RleHRfc2V0X2NhcmV0X29mZnNl
dChBVEtfVEVYVChsaXN0SXRlbSksIDUpOworICAgIGdfYXNzZXJ0X2NtcGludChyZXN1bHQsID09
LCBUUlVFKTsKKyAgICBvZmZzZXQgPSBhdGtfdGV4dF9nZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhU
KGxpc3RJdGVtKSk7CisgICAgZ19hc3NlcnRfY21waW50KG9mZnNldCwgPT0sIDUpOworCisgICAg
QXRrT2JqZWN0KiBwYW5lbCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0
LCAzKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfT0JKRUNUKHBhbmVsKSk7CisgICAgZ19hc3NlcnQo
YXRrX29iamVjdF9nZXRfcm9sZShwYW5lbCkgPT0gQVRLX1JPTEVfUEFORUwpOworCisgICAgQXRr
T2JqZWN0KiBjb21ib0JveCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQocGFuZWws
IDApOworICAgIGdfYXNzZXJ0KEFUS19JU19PQkpFQ1QoY29tYm9Cb3gpKTsKKyAgICBnX2Fzc2Vy
dChhdGtfb2JqZWN0X2dldF9yb2xlKGNvbWJvQm94KSA9PSBBVEtfUk9MRV9DT01CT19CT1gpOwor
CisgICAgQXRrT2JqZWN0KiBtZW51UG9wdXAgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2No
aWxkKGNvbWJvQm94LCAwKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfT0JKRUNUKG1lbnVQb3B1cCkp
OworICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUobWVudVBvcHVwKSA9PSBBVEtfUk9M
RV9NRU5VKTsKKworICAgIEF0a09iamVjdCogY29tYm9Cb3hPcHRpb24gPSBhdGtfb2JqZWN0X3Jl
Zl9hY2Nlc3NpYmxlX2NoaWxkKG1lbnVQb3B1cCwgMCk7CisgICAgZ19hc3NlcnQoQVRLX0lTX09C
SkVDVChjb21ib0JveE9wdGlvbikpOworICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUo
Y29tYm9Cb3hPcHRpb24pID09IEFUS19ST0xFX01FTlVfSVRFTSk7CisKKyAgICAvKiBJdCdzIG5v
dCBwb3NzaWJsZSB0byBwbGFjZSB0aGUgY2FyZXQgaW5zaWRlIGFuIG9wdGlvbiBmb3IgYSBjb21i
b2JveC4gKi8KKyAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhU
KGNvbWJvQm94T3B0aW9uKSwgMSk7CisgICAgZ19hc3NlcnRfY21waW50KHJlc3VsdCwgPT0sIEZB
TFNFKTsKKworICAgIEF0a09iamVjdCogdGV4dEVudHJ5ID0gYXRrX29iamVjdF9yZWZfYWNjZXNz
aWJsZV9jaGlsZChwYW5lbCwgMSk7CisgICAgZ19hc3NlcnQoQVRLX0lTX09CSkVDVCh0ZXh0RW50
cnkpKTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKHRleHRFbnRyeSkgPT0gQVRL
X1JPTEVfRU5UUlkpOworCisgICAgcmVzdWx0ID0gYXRrX3RleHRfc2V0X2NhcmV0X29mZnNldChB
VEtfVEVYVCh0ZXh0RW50cnkpLCA1KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocmVzdWx0LCA9PSwg
VFJVRSk7CisgICAgb2Zmc2V0ID0gYXRrX3RleHRfZ2V0X2NhcmV0X29mZnNldChBVEtfVEVYVCh0
ZXh0RW50cnkpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQob2Zmc2V0LCA9PSwgNSk7CisKKyAgICBB
dGtPYmplY3QqIHRhYmxlID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3Qs
IDQpOworICAgIGdfYXNzZXJ0KEFUS19JU19PQkpFQ1QodGFibGUpKTsKKyAgICBnX2Fzc2VydChh
dGtfb2JqZWN0X2dldF9yb2xlKHRhYmxlKSA9PSBBVEtfUk9MRV9UQUJMRSk7CisgICAgZ19hc3Nl
cnRfY21waW50KGF0a19vYmplY3RfZ2V0X25fYWNjZXNzaWJsZV9jaGlsZHJlbih0YWJsZSksID09
LCA0KTsKKworICAgIEF0a09iamVjdCogdGFibGVDZWxsID0gYXRrX29iamVjdF9yZWZfYWNjZXNz
aWJsZV9jaGlsZCh0YWJsZSwgMCk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZSh0
YWJsZUNlbGwpID09IEFUS19ST0xFX1RBQkxFX0NFTEwpOworICAgIHJlc3VsdCA9IGF0a190ZXh0
X3NldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQodGFibGVDZWxsKSwgMik7CisgICAgZ19hc3NlcnRf
Y21waW50KHJlc3VsdCwgPT0sIFRSVUUpOworICAgIG9mZnNldCA9IGF0a190ZXh0X2dldF9jYXJl
dF9vZmZzZXQoQVRLX1RFWFQodGFibGVDZWxsKSk7CisgICAgZ19hc3NlcnRfY21waW50KG9mZnNl
dCwgPT0sIDIpOworCisgICAgZ19mcmVlKHRleHRDYXJldE1vdmVkUmVzdWx0KTsKKworICAgIGdf
b2JqZWN0X3VucmVmKHBhcmFncmFwaCk7CisgICAgZ19vYmplY3RfdW5yZWYobGluayk7CisgICAg
Z19vYmplY3RfdW5yZWYobGlzdCk7CisgICAgZ19vYmplY3RfdW5yZWYobGlzdEl0ZW0pOworICAg
IGdfb2JqZWN0X3VucmVmKHBhbmVsKTsKKyAgICBnX29iamVjdF91bnJlZihjb21ib0JveCk7Cisg
ICAgZ19vYmplY3RfdW5yZWYobWVudVBvcHVwKTsKKyAgICBnX29iamVjdF91bnJlZihjb21ib0Jv
eE9wdGlvbik7CisgICAgZ19vYmplY3RfdW5yZWYodGV4dEVudHJ5KTsKKyAgICBnX29iamVjdF91
bnJlZih0YWJsZSk7CisgICAgZ19vYmplY3RfdW5yZWYodGFibGVDZWxsKTsKKyAgICBnX29iamVj
dF91bnJlZih3ZWJWaWV3KTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0NhcmV0T2Zm
c2V0c0FuZEV4dHJhbm91c1doaXRlU3BhY2VzKCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmpl
Y3RfcmVmX3Npbmsod2ViVmlldyk7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAw
LCAwLCA4MDAsIDYwMCB9OworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VU
KHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5n
KHdlYlZpZXcsIGNvbnRlbnRzV2l0aEV4dHJhbmVvdXNXaGl0ZVNwYWNlcywgMCwgMCwgMCk7CisK
KyAgICAvKiBFbmFibGUgY2FyZXQgYnJvd3NpbmcuICovCisgICAgV2ViS2l0V2ViU2V0dGluZ3Mq
IHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3KTsKKyAgICBn
X29iamVjdF9zZXQoR19PQkpFQ1Qoc2V0dGluZ3MpLCAiZW5hYmxlLWNhcmV0LWJyb3dzaW5nIiwg
VFJVRSwgTlVMTCk7CisKKyAgICAvKiBHZXQgdG8gdGhlIGlubmVyIEF0a1RleHQgb2JqZWN0LiAq
LworICAgIEF0a09iamVjdCogb2JqZWN0ID0gZ2V0V2ViQXJlYU9iamVjdCh3ZWJWaWV3KTsKKyAg
ICBnX2Fzc2VydChvYmplY3QpOworICAgIG9iamVjdCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2li
bGVfY2hpbGQob2JqZWN0LCAwKTsKKyAgICBnX2Fzc2VydChvYmplY3QpOworCisgICAgQXRrVGV4
dCogdGV4dE9iamVjdCA9IEFUS19URVhUKG9iamVjdCk7CisgICAgZ19hc3NlcnQoQVRLX0lTX1RF
WFQodGV4dE9iamVjdCkpOworCisgICAgZ2ludCBjaGFyYWN0ZXJDb3VudCA9IGF0a190ZXh0X2dl
dF9jaGFyYWN0ZXJfY291bnQodGV4dE9iamVjdCk7CisgICAgZ19hc3NlcnRfY21waW50KGNoYXJh
Y3RlckNvdW50LCA9PSwgMjUpOworCisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gYXRrX3RleHRfc2V0
X2NhcmV0X29mZnNldCh0ZXh0T2JqZWN0LCBjaGFyYWN0ZXJDb3VudCAtIDEpOworICAgIGdfYXNz
ZXJ0X2NtcGludChyZXN1bHQsID09LCBUUlVFKTsKKworICAgIGdpbnQgY2FyZXRPZmZzZXQgPSBh
dGtfdGV4dF9nZXRfY2FyZXRfb2Zmc2V0KHRleHRPYmplY3QpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChjYXJldE9mZnNldCwgPT0sIGNoYXJhY3RlckNvdW50IC0gMSk7CisKKyAgICByZXN1bHQgPSBh
dGtfdGV4dF9zZXRfY2FyZXRfb2Zmc2V0KHRleHRPYmplY3QsIGNoYXJhY3RlckNvdW50KTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQocmVzdWx0LCA9PSwgVFJVRSk7CisKKyAgICBjYXJldE9mZnNldCA9
IGF0a190ZXh0X2dldF9jYXJldF9vZmZzZXQodGV4dE9iamVjdCk7CisgICAgZ19hc3NlcnRfY21w
aW50KGNhcmV0T2Zmc2V0LCA9PSwgY2hhcmFjdGVyQ291bnQpOworCisgICAgZ19vYmplY3RfdW5y
ZWYob2JqZWN0KTsKKyAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKK30KKworc3RhdGljIHZv
aWQgdGVzdFdlYmtpdEF0a0NvbWJvQm94KCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3
ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmplY3Rf
cmVmX3Npbmsod2ViVmlldyk7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAw
LCA4MDAsIDYwMCB9OworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdl
YlZpZXcpLCAmYWxsb2NhdGlvbik7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdl
YlZpZXcsIGNvbWJvQm94U2VsZWN0b3IsIDAsIDAsIDApOworCisgICAgQXRrT2JqZWN0KiBvYmpl
Y3QgPSBnZXRXZWJBcmVhT2JqZWN0KHdlYlZpZXcpOworICAgIGdfYXNzZXJ0KG9iamVjdCk7CisK
KyAgICBBdGtPYmplY3QqIGZvcm1PYmplY3QgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2No
aWxkKG9iamVjdCwgMCk7CisgICAgZ19hc3NlcnQoZm9ybU9iamVjdCk7CisKKyAgICBBdGtPYmpl
Y3QqIGNvbWJvQm94ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmb3JtT2JqZWN0
LCAwKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfT0JKRUNUKGNvbWJvQm94KSk7CisKKyAgICBBdGtP
YmplY3QqIG1lbnVQb3B1cCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoY29tYm9C
b3gsIDApOworICAgIGdfYXNzZXJ0KEFUS19JU19PQkpFQ1QobWVudVBvcHVwKSk7CisKKyAgICBB
dGtPYmplY3QqIGl0ZW0xID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChtZW51UG9w
dXAsIDApOworICAgIGdfYXNzZXJ0KEFUS19JU19PQkpFQ1QoaXRlbTEpKTsKKworICAgIEF0a09i
amVjdCogaXRlbTIgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG1lbnVQb3B1cCwg
MSk7CisgICAgZ19hc3NlcnQoQVRLX0lTX09CSkVDVChpdGVtMikpOworCisgICAgLyogQ2hlY2sg
cm9sZXMuICovCisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShjb21ib0JveCkgPT0g
QVRLX1JPTEVfQ09NQk9fQk9YKTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKG1l
bnVQb3B1cCkgPT0gQVRLX1JPTEVfTUVOVSk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRf
cm9sZShpdGVtMSkgPT0gQVRLX1JPTEVfTUVOVV9JVEVNKTsKKyAgICBnX2Fzc2VydChhdGtfb2Jq
ZWN0X2dldF9yb2xlKGl0ZW0yKSA9PSBBVEtfUk9MRV9NRU5VX0lURU0pOworCisgICAgLyogQ2hl
Y2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBBdGtTZWxlY3Rpb24gaW50ZXJmYWNlLiAqLwor
ICAgIGdfYXNzZXJ0KEFUS19JU19TRUxFQ1RJT04oY29tYm9Cb3gpKTsKKyAgICBBdGtTZWxlY3Rp
b24qIGF0a1NlbGVjdGlvbiA9IEFUS19TRUxFQ1RJT04oY29tYm9Cb3gpOworICAgIGdfYXNzZXJ0
X2NtcGludChhdGtfc2VsZWN0aW9uX2dldF9zZWxlY3Rpb25fY291bnQoYXRrU2VsZWN0aW9uKSwg
PT0sIDEpOworICAgIGdfYXNzZXJ0KGF0a19zZWxlY3Rpb25faXNfY2hpbGRfc2VsZWN0ZWQoYXRr
U2VsZWN0aW9uLCAwKSk7CisgICAgZ19hc3NlcnQoIWF0a19zZWxlY3Rpb25faXNfY2hpbGRfc2Vs
ZWN0ZWQoYXRrU2VsZWN0aW9uLCAxKSk7CisgICAgQXRrT2JqZWN0KiBzZWxlY3RlZEl0ZW0gPSBh
dGtfc2VsZWN0aW9uX3JlZl9zZWxlY3Rpb24oYXRrU2VsZWN0aW9uLCAwKTsKKyAgICBnX2Fzc2Vy
dChzZWxlY3RlZEl0ZW0gPT0gaXRlbTEpOworICAgIGdfb2JqZWN0X3VucmVmKHNlbGVjdGVkSXRl
bSk7CisKKyAgICAvKiBDaGVjayB0aGF0IHRoZSBtZW51IHBvcHVwIGhhcyAwIGxpbmtzIGFuZCBk
b2Vzbid0IGNyYXNoIGZyb20gY2hlY2tpbmcuICovCisgICAgZ2ludCBuTGlua3MgPSBhdGtfaHlw
ZXJ0ZXh0X2dldF9uX2xpbmtzKEFUS19IWVBFUlRFWFQobWVudVBvcHVwKSk7CisgICAgZ19hc3Nl
cnRfY21waW50KG5MaW5rcywgPT0sIDApOworCisgICAgLyogQ2hlY2sgdGhlIGltcGxlbWVudGF0
aW9ucyBvZiB0aGUgQXRrQWN0aW9uIGludGVyZmFjZS4gKi8KKyAgICBnX2Fzc2VydChBVEtfSVNf
QUNUSU9OKGNvbWJvQm94KSk7CisgICAgQXRrQWN0aW9uKiBhdGtBY3Rpb24gPSBBVEtfQUNUSU9O
KGNvbWJvQm94KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2FjdGlvbl9nZXRfbl9hY3Rpb25z
KGF0a0FjdGlvbiksID09LCAxKTsKKyAgICBnX2Fzc2VydChhdGtfYWN0aW9uX2RvX2FjdGlvbihh
dGtBY3Rpb24sIDApKTsKKworICAgIGdfYXNzZXJ0KEFUS19JU19BQ1RJT04obWVudVBvcHVwKSk7
CisgICAgYXRrQWN0aW9uID0gQVRLX0FDVElPTihtZW51UG9wdXApOworICAgIGdfYXNzZXJ0X2Nt
cGludChhdGtfYWN0aW9uX2dldF9uX2FjdGlvbnMoYXRrQWN0aW9uKSwgPT0sIDEpOworICAgIGdf
YXNzZXJ0KGF0a19hY3Rpb25fZG9fYWN0aW9uKGF0a0FjdGlvbiwgMCkpOworCisgICAgZ19hc3Nl
cnQoQVRLX0lTX0FDVElPTihpdGVtMSkpOworICAgIGF0a0FjdGlvbiA9IEFUS19BQ1RJT04oaXRl
bTEpOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfYWN0aW9uX2dldF9uX2FjdGlvbnMoYXRrQWN0
aW9uKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0KGF0a19hY3Rpb25fZG9fYWN0aW9uKGF0a0FjdGlv
biwgMCkpOworCisgICAgZ19hc3NlcnQoQVRLX0lTX0FDVElPTihpdGVtMikpOworICAgIGF0a0Fj
dGlvbiA9IEFUS19BQ1RJT04oaXRlbTIpOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfYWN0aW9u
X2dldF9uX2FjdGlvbnMoYXRrQWN0aW9uKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0KGF0a19hY3Rp
b25fZG9fYWN0aW9uKGF0a0FjdGlvbiwgMCkpOworCisgICAgLyogQWZ0ZXIgc2VsZWN0aW5nIHRo
ZSBzZWNvbmQgaXRlbSwgc2VsZWN0aW9uIHNob3VsZCBoYXZlIGNoYW5nZWQuICovCisgICAgZ19h
c3NlcnRfY21waW50KGF0a19zZWxlY3Rpb25fZ2V0X3NlbGVjdGlvbl9jb3VudChhdGtTZWxlY3Rp
b24pLCA9PSwgMSk7CisgICAgZ19hc3NlcnQoIWF0a19zZWxlY3Rpb25faXNfY2hpbGRfc2VsZWN0
ZWQoYXRrU2VsZWN0aW9uLCAwKSk7CisgICAgZ19hc3NlcnQoYXRrX3NlbGVjdGlvbl9pc19jaGls
ZF9zZWxlY3RlZChhdGtTZWxlY3Rpb24sIDEpKTsKKyAgICBzZWxlY3RlZEl0ZW0gPSBhdGtfc2Vs
ZWN0aW9uX3JlZl9zZWxlY3Rpb24oYXRrU2VsZWN0aW9uLCAwKTsKKyAgICBnX2Fzc2VydChzZWxl
Y3RlZEl0ZW0gPT0gaXRlbTIpOworICAgIGdfb2JqZWN0X3VucmVmKHNlbGVjdGVkSXRlbSk7CisK
KyAgICBnX29iamVjdF91bnJlZihmb3JtT2JqZWN0KTsKKyAgICBnX29iamVjdF91bnJlZihjb21i
b0JveCk7CisgICAgZ19vYmplY3RfdW5yZWYobWVudVBvcHVwKTsKKyAgICBnX29iamVjdF91bnJl
ZihpdGVtMSk7CisgICAgZ19vYmplY3RfdW5yZWYoaXRlbTIpOworICAgIGdfb2JqZWN0X3VucmVm
KHdlYlZpZXcpOworfQorCitzdGF0aWMgZ2NoYXIqIGxvYWRpbmdFdmVudHNSZXN1bHQgPSAwOwor
CitzdGF0aWMgdm9pZCB1cGRhdGVMb2FkaW5nRXZlbnRzUmVzdWx0KGNvbnN0IGdjaGFyKiBzaWdu
YWxOYW1lKQoreworICAgIGdfYXNzZXJ0KHNpZ25hbE5hbWUpOworCisgICAgZ2NoYXIqIHByZXZp
b3VzUmVzdWx0ID0gbG9hZGluZ0V2ZW50c1Jlc3VsdDsKKyAgICBsb2FkaW5nRXZlbnRzUmVzdWx0
ID0gZ19zdHJkdXBfcHJpbnRmKCIlc3wlcyIsIHByZXZpb3VzUmVzdWx0LCBzaWduYWxOYW1lKTsK
KyAgICBnX2ZyZWUocHJldmlvdXNSZXN1bHQpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gZG9jdW1l
bnRMb2FkaW5nRXZlbnRDYWxsYmFjayhHU2lnbmFsSW52b2NhdGlvbkhpbnQgKnNpZ25hbEhpbnQs
IGd1aW50IG51bVBhcmFtVmFsdWVzLCBjb25zdCBHVmFsdWUgKnBhcmFtVmFsdWVzLCBncG9pbnRl
ciBkYXRhKQoreworICAgIC8vIEF0IGxlYXN0IHdlIHNob3VsZCByZWNlaXZlIHRoZSBpbnN0YW5j
ZSBlbWl0dGluZyB0aGUgc2lnbmFsLgorICAgIGlmIChudW1QYXJhbVZhbHVlcyA8IDEpCisgICAg
ICAgIHJldHVybiBUUlVFOworCisgICAgR1NpZ25hbFF1ZXJ5IHNpZ25hbF9xdWVyeTsKKyAgICBn
X3NpZ25hbF9xdWVyeShzaWduYWxIaW50LT5zaWduYWxfaWQsICZzaWduYWxfcXVlcnkpOworCisg
ICAgdXBkYXRlTG9hZGluZ0V2ZW50c1Jlc3VsdChzaWduYWxfcXVlcnkuc2lnbmFsX25hbWUpOwor
ICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrRG9jdW1lbnRM
b2FkaW5nRXZlbnRzKCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dF
Ql9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmplY3RfcmVmX3Npbmsod2Vi
Vmlldyk7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9
OworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxs
b2NhdGlvbik7CisKKyAgICAvKiBDb25uZWN0IGdsb2JhbGx5IHRvIHNlZSB0aG9zZSBldmVudHMg
ZHVyaW5nIGEgZnV0dXJlIGxvYWQuICovCisgICAgZ3VpbnQgbG9hZENvbXBsZXRlTGlzdGVuZXJJ
ZCA9IGF0a19hZGRfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGRvY3VtZW50TG9hZGluZ0V2ZW50Q2Fs
bGJhY2ssICJBVEs6QXRrRG9jdW1lbnQ6bG9hZC1jb21wbGV0ZSIpOworCisgICAgLyogRG8gdGhl
IGxvYWQsIHNvIHdlIGNhbiBzZWUgdGhvc2UgZXZlbnRzIGhhcHBlbmluZy4gKi8KKyAgICBsb2Fk
aW5nRXZlbnRzUmVzdWx0ID0gZ19zdHJkdXAoIiIpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2Fk
X3N0cmluZyh3ZWJWaWV3LCBjb250ZW50cywgMCwgMCwgMCk7CisKKyAgICAvKiBUcmlnZ2VyIHRo
ZSBjcmVhdGlvbiBvZiB0aGUgZnVsbCBhY2Nlc3NpYmlsaXR5IGhpZXJhcmNoeSBieQorICAgICAg
IGFza2luZyBmb3IgdGhlIHdlYkFyZWEgb2JqZWN0LCBzbyB3ZSBjYW4gbGlzdGVuIHRvIGV2ZW50
cy4gKi8KKyAgICBnZXRXZWJBcmVhT2JqZWN0KHdlYlZpZXcpOworCisgICAgYXRrX3JlbW92ZV9n
bG9iYWxfZXZlbnRfbGlzdGVuZXIobG9hZENvbXBsZXRlTGlzdGVuZXJJZCk7CisKKyAgICBnX2Fz
c2VydF9jbXBzdHIobG9hZGluZ0V2ZW50c1Jlc3VsdCwgPT0sICJ8bG9hZC1jb21wbGV0ZSIpOwor
CisgICAgZ19mcmVlKGxvYWRpbmdFdmVudHNSZXN1bHQpOworICAgIGdfb2JqZWN0X3VucmVmKHdl
YlZpZXcpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrRW1iZWRkZWRPYmplY3RzKCkK
K3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93
ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7CisgICAgR3Rr
QWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9OworICAgIGd0a193aWRn
ZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7CisgICAg
d2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIGVtYmVkZGVkT2JqZWN0cywgMCwg
MCwgMCk7CisKKyAgICBBdGtPYmplY3QqIG9iamVjdCA9IGdldFdlYkFyZWFPYmplY3Qod2ViVmll
dyk7CisgICAgZ19hc3NlcnQob2JqZWN0KTsKKworICAgIEF0a1RleHQqIHBhcmFncmFwaDEgPSBB
VEtfVEVYVChhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMCkpOworICAg
IGdfYXNzZXJ0KEFUS19JU19URVhUKHBhcmFncmFwaDEpKTsKKyAgICBnX2Fzc2VydChBVEtfSVNf
SFlQRVJURVhUKHBhcmFncmFwaDEpKTsKKworICAgIGdpbnQgbkxpbmtzID0gYXRrX2h5cGVydGV4
dF9nZXRfbl9saW5rcyhBVEtfSFlQRVJURVhUKHBhcmFncmFwaDEpKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQobkxpbmtzLCA9PSwgMik7CisKKyAgICBBdGtIeXBlcmxpbmsqIGhMaW5rID0gYXRrX2h5
cGVydGV4dF9nZXRfbGluayhBVEtfSFlQRVJURVhUKHBhcmFncmFwaDEpLCAwKTsKKyAgICBnX2Fz
c2VydChBVEtfSFlQRVJMSU5LKGhMaW5rKSk7CisgICAgQXRrT2JqZWN0KiBoTGlua09iamVjdCA9
IGF0a19oeXBlcmxpbmtfZ2V0X29iamVjdChoTGluaywgMCk7CisgICAgZ19hc3NlcnQoQVRLX09C
SkVDVChoTGlua09iamVjdCkpOworICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoaExp
bmtPYmplY3QpID09IEFUS19ST0xFX0NIRUNLX0JPWCk7CisgICAgZ19hc3NlcnRfY21waW50KGF0
a19oeXBlcmxpbmtfZ2V0X3N0YXJ0X2luZGV4KGhMaW5rKSwgPT0sIDgpOworICAgIGdfYXNzZXJ0
X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9lbmRfaW5kZXgoaExpbmspLCA9PSwgOSk7CisgICAg
Z19hc3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0X25fYW5jaG9ycyhoTGluayksID09LCAx
KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoYXRrX2h5cGVybGlua19nZXRfdXJpKGhMaW5rLCAwKSwg
PT0sIDApOworCisgICAgQXRrVGV4dCogcGFyYWdyYXBoMiA9IEFUS19URVhUKGF0a19vYmplY3Rf
cmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAxKSk7CisgICAgZ19hc3NlcnQoQVRLX0lTX0hZ
UEVSVEVYVChwYXJhZ3JhcGgyKSk7CisKKyAgICBuTGlua3MgPSBhdGtfaHlwZXJ0ZXh0X2dldF9u
X2xpbmtzKEFUS19IWVBFUlRFWFQocGFyYWdyYXBoMikpOworICAgIGdfYXNzZXJ0X2NtcGludChu
TGlua3MsID09LCAxKTsKKworICAgIGhMaW5rID0gYXRrX2h5cGVydGV4dF9nZXRfbGluayhBVEtf
SFlQRVJURVhUKHBhcmFncmFwaDIpLCAwKTsKKyAgICBnX2Fzc2VydChBVEtfSFlQRVJMSU5LKGhM
aW5rKSk7CisgICAgaExpbmtPYmplY3QgPSBhdGtfaHlwZXJsaW5rX2dldF9vYmplY3QoaExpbmss
IDApOworICAgIGdfYXNzZXJ0KEFUS19PQkpFQ1QoaExpbmtPYmplY3QpKTsKKyAgICBnX2Fzc2Vy
dChhdGtfb2JqZWN0X2dldF9yb2xlKGhMaW5rT2JqZWN0KSA9PSBBVEtfUk9MRV9DT01CT19CT1gp
OworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9zdGFydF9pbmRleChoTGlu
ayksID09LCA4KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfZW5kX2lu
ZGV4KGhMaW5rKSwgPT0sIDkpOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dl
dF9uX2FuY2hvcnMoaExpbmspLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGF0a19oeXBl
cmxpbmtfZ2V0X3VyaShoTGluaywgMCksID09LCAwKTsKKworICAgIEF0a1RleHQqIHBhcmFncmFw
aDMgPSBBVEtfVEVYVChhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMikp
OworICAgIGdfYXNzZXJ0KEFUS19JU19IWVBFUlRFWFQocGFyYWdyYXBoMykpOworCisgICAgbkxp
bmtzID0gYXRrX2h5cGVydGV4dF9nZXRfbl9saW5rcyhBVEtfSFlQRVJURVhUKHBhcmFncmFwaDMp
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQobkxpbmtzLCA9PSwgMSk7CisKKyAgICBoTGluayA9IGF0
a19oeXBlcnRleHRfZ2V0X2xpbmsoQVRLX0hZUEVSVEVYVChwYXJhZ3JhcGgzKSwgMCk7CisgICAg
Z19hc3NlcnQoQVRLX0hZUEVSTElOSyhoTGluaykpOworICAgIGhMaW5rT2JqZWN0ID0gYXRrX2h5
cGVybGlua19nZXRfb2JqZWN0KGhMaW5rLCAwKTsKKyAgICBnX2Fzc2VydChBVEtfT0JKRUNUKGhM
aW5rT2JqZWN0KSk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShoTGlua09iamVj
dCkgPT0gQVRLX1JPTEVfUFVTSF9CVVRUT04pOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlw
ZXJsaW5rX2dldF9zdGFydF9pbmRleChoTGluayksID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoYXRrX2h5cGVybGlua19nZXRfZW5kX2luZGV4KGhMaW5rKSwgPT0sIDEpOworICAgIGdfYXNz
ZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9uX2FuY2hvcnMoaExpbmspLCA9PSwgMSk7Cisg
ICAgZ19hc3NlcnRfY21wc3RyKGF0a19oeXBlcmxpbmtfZ2V0X3VyaShoTGluaywgMCksID09LCAw
KTsKKworICAgIGdfb2JqZWN0X3VucmVmKHBhcmFncmFwaDEpOworICAgIGdfb2JqZWN0X3VucmVm
KHBhcmFncmFwaDIpOworICAgIGdfb2JqZWN0X3VucmVmKHBhcmFncmFwaDMpOworICAgIGdfb2Jq
ZWN0X3VucmVmKHdlYlZpZXcpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrR2V0SGVh
ZGVyc0luVGFibGUoKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VC
X1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBnX29iamVjdF9yZWZfc2luayh3ZWJW
aWV3KTsKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDgwMCwgNjAwIH07
CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQod2ViVmlldyksICZhbGxv
Y2F0aW9uKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgY29udGVu
dHNJblRhYmxlV2l0aEhlYWRlcnMsIDAsIDAsIDApOworCisgICAgQXRrT2JqZWN0KiBheFdlYlZp
ZXcgPSBnZXRXZWJBcmVhT2JqZWN0KHdlYlZpZXcpOworICAgIGdfYXNzZXJ0KGF4V2ViVmlldyk7
CisKKyAgICAvKiBDaGVjayB0YWJsZSB3aXRoIGJvdGggY29sdW1uIGFuZCByb3cgaGVhZGVycy4g
Ki8KKyAgICBBdGtPYmplY3QqIHRhYmxlID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGls
ZChheFdlYlZpZXcsIDApOworICAgIGdfYXNzZXJ0KHRhYmxlKTsKKyAgICBnX2Fzc2VydChhdGtf
b2JqZWN0X2dldF9yb2xlKHRhYmxlKSA9PSBBVEtfUk9MRV9UQUJMRSk7CisKKyAgICBBdGtPYmpl
Y3QqIGNvbEhlYWRlciA9IGF0a190YWJsZV9nZXRfY29sdW1uX2hlYWRlcihBVEtfVEFCTEUodGFi
bGUpLCAwKTsKKyAgICBnX2Fzc2VydChjb2xIZWFkZXIpOworICAgIGdfYXNzZXJ0KGF0a19vYmpl
Y3RfZ2V0X3JvbGUoY29sSGVhZGVyKSA9PSBBVEtfUk9MRV9UQUJMRV9DRUxMKTsKKyAgICBnX2Fz
c2VydChhdGtfb2JqZWN0X2dldF9pbmRleF9pbl9wYXJlbnQoY29sSGVhZGVyKSA9PSAwKTsKKwor
ICAgIGNvbEhlYWRlciA9IGF0a190YWJsZV9nZXRfY29sdW1uX2hlYWRlcihBVEtfVEFCTEUodGFi
bGUpLCAxKTsKKyAgICBnX2Fzc2VydChjb2xIZWFkZXIpOworICAgIGdfYXNzZXJ0KGF0a19vYmpl
Y3RfZ2V0X3JvbGUoY29sSGVhZGVyKSA9PSBBVEtfUk9MRV9UQUJMRV9DRUxMKTsKKyAgICBnX2Fz
c2VydChhdGtfb2JqZWN0X2dldF9pbmRleF9pbl9wYXJlbnQoY29sSGVhZGVyKSA9PSAxKTsKKwor
ICAgIGNvbEhlYWRlciA9IGF0a190YWJsZV9nZXRfY29sdW1uX2hlYWRlcihBVEtfVEFCTEUodGFi
bGUpLCAyKTsKKyAgICBnX2Fzc2VydChjb2xIZWFkZXIpOworICAgIGdfYXNzZXJ0KGF0a19vYmpl
Y3RfZ2V0X3JvbGUoY29sSGVhZGVyKSA9PSBBVEtfUk9MRV9UQUJMRV9DRUxMKTsKKyAgICBnX2Fz
c2VydChhdGtfb2JqZWN0X2dldF9pbmRleF9pbl9wYXJlbnQoY29sSGVhZGVyKSA9PSAyKTsKKwor
ICAgIGNvbEhlYWRlciA9IGF0a190YWJsZV9nZXRfY29sdW1uX2hlYWRlcihBVEtfVEFCTEUodGFi
bGUpLCAzKTsKKyAgICBnX2Fzc2VydChjb2xIZWFkZXIpOworICAgIGdfYXNzZXJ0KGF0a19vYmpl
Y3RfZ2V0X3JvbGUoY29sSGVhZGVyKSA9PSBBVEtfUk9MRV9UQUJMRV9DRUxMKTsKKyAgICBnX2Fz
c2VydChhdGtfb2JqZWN0X2dldF9pbmRleF9pbl9wYXJlbnQoY29sSGVhZGVyKSA9PSAyKTsKKwor
ICAgIEF0a09iamVjdCogcm93SGVhZGVyID0gYXRrX3RhYmxlX2dldF9yb3dfaGVhZGVyKEFUS19U
QUJMRSh0YWJsZSksIDApOworICAgIGdfYXNzZXJ0KHJvd0hlYWRlcik7CisgICAgZ19hc3NlcnQo
YXRrX29iamVjdF9nZXRfcm9sZShyb3dIZWFkZXIpID09IEFUS19ST0xFX1RBQkxFX0NFTEwpOwor
ICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X2luZGV4X2luX3BhcmVudChyb3dIZWFkZXIpID09
IDApOworCisgICAgcm93SGVhZGVyID0gYXRrX3RhYmxlX2dldF9yb3dfaGVhZGVyKEFUS19UQUJM
RSh0YWJsZSksIDEpOworICAgIGdfYXNzZXJ0KHJvd0hlYWRlcik7CisgICAgZ19hc3NlcnQoYXRr
X29iamVjdF9nZXRfcm9sZShyb3dIZWFkZXIpID09IEFUS19ST0xFX1RBQkxFX0NFTEwpOworICAg
IGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X2luZGV4X2luX3BhcmVudChyb3dIZWFkZXIpID09IDMp
OworCisgICAgcm93SGVhZGVyID0gYXRrX3RhYmxlX2dldF9yb3dfaGVhZGVyKEFUS19UQUJMRSh0
YWJsZSksIDIpOworICAgIGdfYXNzZXJ0KHJvd0hlYWRlcik7CisgICAgZ19hc3NlcnQoYXRrX29i
amVjdF9nZXRfcm9sZShyb3dIZWFkZXIpID09IEFUS19ST0xFX1RBQkxFX0NFTEwpOworICAgIGdf
YXNzZXJ0KGF0a19vYmplY3RfZ2V0X2luZGV4X2luX3BhcmVudChyb3dIZWFkZXIpID09IDcpOwor
CisgICAgcm93SGVhZGVyID0gYXRrX3RhYmxlX2dldF9yb3dfaGVhZGVyKEFUS19UQUJMRSh0YWJs
ZSksIDMpOworICAgIGdfYXNzZXJ0KHJvd0hlYWRlcik7CisgICAgZ19hc3NlcnQoYXRrX29iamVj
dF9nZXRfcm9sZShyb3dIZWFkZXIpID09IEFUS19ST0xFX1RBQkxFX0NFTEwpOworICAgIGdfYXNz
ZXJ0KGF0a19vYmplY3RfZ2V0X2luZGV4X2luX3BhcmVudChyb3dIZWFkZXIpID09IDcpOworCisg
ICAgZ19vYmplY3RfdW5yZWYodGFibGUpOworCisgICAgLyogQ2hlY2sgdGFibGUgd2l0aCBubyBo
ZWFkZXJzIGF0IGFsbC4gKi8KKyAgICB0YWJsZSA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVf
Y2hpbGQoYXhXZWJWaWV3LCAxKTsKKyAgICBnX2Fzc2VydCh0YWJsZSk7CisgICAgZ19hc3NlcnQo
YXRrX29iamVjdF9nZXRfcm9sZSh0YWJsZSkgPT0gQVRLX1JPTEVfVEFCTEUpOworCisgICAgY29s
SGVhZGVyID0gYXRrX3RhYmxlX2dldF9jb2x1bW5faGVhZGVyKEFUS19UQUJMRSh0YWJsZSksIDAp
OworICAgIGdfYXNzZXJ0KGNvbEhlYWRlciA9PSAwKTsKKworICAgIGNvbEhlYWRlciA9IGF0a190
YWJsZV9nZXRfY29sdW1uX2hlYWRlcihBVEtfVEFCTEUodGFibGUpLCAxKTsKKyAgICBnX2Fzc2Vy
dChjb2xIZWFkZXIgPT0gMCk7CisKKyAgICByb3dIZWFkZXIgPSBhdGtfdGFibGVfZ2V0X3Jvd19o
ZWFkZXIoQVRLX1RBQkxFKHRhYmxlKSwgMCk7CisgICAgZ19hc3NlcnQocm93SGVhZGVyID09IDAp
OworCisgICAgcm93SGVhZGVyID0gYXRrX3RhYmxlX2dldF9yb3dfaGVhZGVyKEFUS19UQUJMRSh0
YWJsZSksIDEpOworICAgIGdfYXNzZXJ0KHJvd0hlYWRlciA9PSAwKTsKKworICAgIGdfb2JqZWN0
X3VucmVmKHRhYmxlKTsKKyAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKK30KKworc3RhdGlj
IGdpbnQgY29tcEF0a0F0dHJpYnV0ZShBdGtBdHRyaWJ1dGUqIGExLCBBdGtBdHRyaWJ1dGUqIGEy
KQoreworICAgIGdpbnQgc3RyY21wVmFsID0gZ19zdHJjbXAwKGExLT5uYW1lLCBhMi0+bmFtZSk7
CisgICAgaWYgKHN0cmNtcFZhbCkKKyAgICAgICAgcmV0dXJuIHN0cmNtcFZhbDsKKyAgICByZXR1
cm4gZ19zdHJjbXAwKGExLT52YWx1ZSwgYTItPnZhbHVlKTsKK30KKworc3RhdGljIGdpbnQgY29t
cEF0a0F0dHJpYnV0ZU5hbWUoQXRrQXR0cmlidXRlKiBhMSwgQXRrQXR0cmlidXRlKiBhMikKK3sK
KyAgICByZXR1cm4gZ19zdHJjbXAwKGExLT5uYW1lLCBhMi0+bmFtZSk7Cit9CisKK3N0YXRpYyBn
Ym9vbGVhbiBhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVOYW1lSGFzVmFsdWUoQXRrQXR0cmlidXRl
U2V0KiBzZXQsIGNvbnN0IGdjaGFyKiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBnY2hhciogdmFsdWUp
Cit7CisgICAgQXRrQXR0cmlidXRlIGF0OworICAgIGF0Lm5hbWUgPSAoZ2NoYXIqKWF0dHJpYnV0
ZU5hbWU7CisgICAgR1NMaXN0KiBlbGVtZW50ID0gZ19zbGlzdF9maW5kX2N1c3RvbShzZXQsICZh
dCwgKEdDb21wYXJlRnVuYyljb21wQXRrQXR0cmlidXRlTmFtZSk7CisgICAgcmV0dXJuIGVsZW1l
bnQgJiYgIWdfc3RyY21wMCgoKEF0a0F0dHJpYnV0ZSopKGVsZW1lbnQtPmRhdGEpKS0+dmFsdWUs
IHZhbHVlKTsKK30KKworc3RhdGljIGdib29sZWFuIGF0a0F0dHJpYnV0ZVNldENvbnRhaW5zQXR0
cmlidXRlTmFtZShBdGtBdHRyaWJ1dGVTZXQqIHNldCwgY29uc3QgZ2NoYXIqIGF0dHJpYnV0ZU5h
bWUpCit7CisgICAgQXRrQXR0cmlidXRlIGF0OworICAgIGF0Lm5hbWUgPSAoZ2NoYXIqKWF0dHJp
YnV0ZU5hbWU7CisgICAgcmV0dXJuIGdfc2xpc3RfZmluZF9jdXN0b20oc2V0LCAmYXQsIChHQ29t
cGFyZUZ1bmMpY29tcEF0a0F0dHJpYnV0ZU5hbWUpID8gdHJ1ZSA6IGZhbHNlOworfQorCitzdGF0
aWMgZ2Jvb2xlYW4gYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlSGFzVmFsdWUoQXRrQXR0cmlidXRl
U2V0KiBzZXQsIEF0a1RleHRBdHRyaWJ1dGUgYXR0cmlidXRlLCBjb25zdCBnY2hhciogdmFsdWUp
Cit7CisgICAgcmV0dXJuIGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZU5hbWVIYXNWYWx1ZShzZXQs
IGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShhdHRyaWJ1dGUpLCB2YWx1ZSk7Cit9CisKK3N0
YXRpYyBnYm9vbGVhbiBhdGtBdHRyaWJ1dGVTZXRBcmVFcXVhbChBdGtBdHRyaWJ1dGVTZXQqIHNl
dDEsIEF0a0F0dHJpYnV0ZVNldCogc2V0MikKK3sKKyAgICBpZiAoIXNldDEpCisgICAgICAgIHJl
dHVybiAhc2V0MjsKKworICAgIHNldDEgPSBnX3NsaXN0X3NvcnQoc2V0MSwgKEdDb21wYXJlRnVu
Yyljb21wQXRrQXR0cmlidXRlKTsKKyAgICBzZXQyID0gZ19zbGlzdF9zb3J0KHNldDIsIChHQ29t
cGFyZUZ1bmMpY29tcEF0a0F0dHJpYnV0ZSk7CisKKyAgICB3aGlsZSAoc2V0MSkgeworICAgICAg
ICBpZiAoIXNldDIgfHwgY29tcEF0a0F0dHJpYnV0ZShzZXQxLT5kYXRhLCBzZXQyLT5kYXRhKSkK
KyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgICAgICBzZXQxID0gc2V0MS0+bmV4dDsK
KyAgICAgICAgc2V0MiA9IHNldDItPm5leHQ7CisgICAgfQorCisgICAgcmV0dXJuICghc2V0Mik7
Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtUZXh0QXR0cmlidXRlcygpCit7CisgICAg
V2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdf
bmV3KCkpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOworICAgIEd0a0FsbG9jYXRp
b24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgODAwLCA2MDAgfTsKKyAgICBndGtfd2lkZ2V0X3NpemVf
YWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOworICAgIHdlYmtpdF93
ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LCB0ZXh0V2l0aEF0dHJpYnV0ZXMsIDAsIDAsIDAp
OworCisgICAgQXRrT2JqZWN0KiBvYmplY3QgPSBnZXRXZWJBcmVhT2JqZWN0KHdlYlZpZXcpOwor
ICAgIGdfYXNzZXJ0KG9iamVjdCk7CisKKyAgICBBdGtPYmplY3QqIGNoaWxkID0gYXRrX29iamVj
dF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDApOworICAgIGdfYXNzZXJ0KGNoaWxkICYm
IEFUS19JU19URVhUKGNoaWxkKSk7CisgICAgQXRrVGV4dCogY2hpbGRUZXh0ID0gQVRLX1RFWFQo
Y2hpbGQpOworCisgICAgZ2ludCBzdGFydE9mZnNldDsKKyAgICBnaW50IGVuZE9mZnNldDsKKyAg
ICBBdGtBdHRyaWJ1dGVTZXQqIHNldDEgPSBhdGtfdGV4dF9nZXRfcnVuX2F0dHJpYnV0ZXMoY2hp
bGRUZXh0LCAwLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChzdGFydE9mZnNldCwgPT0sIDApOworICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09
LCAxMik7CisgICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0QXJlRXF1YWwoc2V0MSwgMCkpOwor
CisgICAgQXRrQXR0cmlidXRlU2V0KiBzZXQyID0gYXRrX3RleHRfZ2V0X3J1bl9hdHRyaWJ1dGVz
KGNoaWxkVGV4dCwgMTUsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgZ19hc3NlcnRf
Y21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMTIpOworICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZz
ZXQsID09LCAxNyk7CisgICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlSGFzVmFs
dWUoc2V0MiwgQVRLX1RFWFRfQVRUUl9TVFlMRSwgIml0YWxpYyIpKTsKKworICAgIEF0a0F0dHJp
YnV0ZVNldCogc2V0MyA9IGF0a190ZXh0X2dldF9ydW5fYXR0cmlidXRlcyhjaGlsZFRleHQsIDE3
LCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOworICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9m
ZnNldCwgPT0sIDE3KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgNDApOwor
ICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDMsIEFUS19U
RVhUX0FUVFJfV0VJR0hULCAiNzAwIikpOworCisgICAgQXRrQXR0cmlidXRlU2V0KiBzZXQ0ID0g
YXRrX3RleHRfZ2V0X2RlZmF1bHRfYXR0cmlidXRlcyhjaGlsZFRleHQpOworICAgIGdfYXNzZXJ0
KGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDQsIEFUS19URVhUX0FUVFJfU1RZ
TEUsICJub3JtYWwiKSk7CisgICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlSGFz
VmFsdWUoc2V0NCwgQVRLX1RFWFRfQVRUUl9KVVNUSUZJQ0FUSU9OLCAicmlnaHQiKSk7CisgICAg
Z19hc3NlcnQoYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlSGFzVmFsdWUoc2V0NCwgQVRLX1RFWFRf
QVRUUl9TSVpFLCAiMTQiKSk7CisgICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJlZShzZXQxKTsKKyAg
ICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHNldDIpOworICAgIGF0a19hdHRyaWJ1dGVfc2V0X2Zy
ZWUoc2V0Myk7CisgICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJlZShzZXQ0KTsKKworICAgIGdfb2Jq
ZWN0X3VucmVmKGNoaWxkKTsKKyAgICBjaGlsZCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVf
Y2hpbGQob2JqZWN0LCAxKTsKKyAgICBnX2Fzc2VydChjaGlsZCAmJiBBVEtfSVNfVEVYVChjaGls
ZCkpOworICAgIGNoaWxkVGV4dCA9IEFUS19URVhUKGNoaWxkKTsKKworICAgIHNldDEgPSBhdGtf
dGV4dF9nZXRfZGVmYXVsdF9hdHRyaWJ1dGVzKGNoaWxkVGV4dCk7CisgICAgZ19hc3NlcnQoYXRr
QXR0cmlidXRlU2V0QXR0cmlidXRlSGFzVmFsdWUoc2V0MSwgQVRLX1RFWFRfQVRUUl9GQU1JTFlf
TkFNRSwgIm1vbm9zcGFjZSIpKTsKKyAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1
dGVIYXNWYWx1ZShzZXQxLCBBVEtfVEVYVF9BVFRSX1NUWUxFLCAibm9ybWFsIikpOworICAgIGdf
YXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDEsIEFUS19URVhUX0FU
VFJfU1RSSUtFVEhST1VHSCwgImZhbHNlIikpOworICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNl
dEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDEsIEFUS19URVhUX0FUVFJfV0VJR0hULCAiNDAwIikpOwor
ICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDEsIEFUS19U
RVhUX0FUVFJfRkdfQ09MT1IsICIxMjAsMTIxLDEyMiIpKTsKKworICAgIHNldDIgPSBhdGtfdGV4
dF9nZXRfcnVuX2F0dHJpYnV0ZXMoY2hpbGRUZXh0LCA0MywgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zm
c2V0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCA0Myk7CisgICAgZ19h
c3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0sIDgwKTsKKyAgICAvKiBDaGVja3MgdGhhdCBkZWZh
dWx0IGF0dHJpYnV0ZXMgb2YgdGV4dCBhcmUgbm90IHJldHVybmVkIHdoZW4gY2FsbGVkIHRvIGF0
a190ZXh0X2dldF9ydW5fYXR0cmlidXRlcy4gKi8KKyAgICBnX2Fzc2VydCghYXRrQXR0cmlidXRl
U2V0QXR0cmlidXRlSGFzVmFsdWUoc2V0MiwgQVRLX1RFWFRfQVRUUl9GR19DT0xPUiwgIjEyMCwx
MjEsMTIyIikpOworICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVl
KHNldDIsIEFUS19URVhUX0FUVFJfVU5ERVJMSU5FLCAic2luZ2xlIikpOworICAgIGdfYXNzZXJ0
KGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDIsIEFUS19URVhUX0FUVFJfQkdf
Q09MT1IsICI4MCw4MSw4MiIpKTsKKyAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHNldDEpOwor
ICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0Mik7CisgICAgZ19vYmplY3RfdW5yZWYoY2hp
bGQpOworCisgICAgY2hpbGQgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVj
dCwgMik7CisgICAgZ19hc3NlcnQoY2hpbGQgJiYgQVRLX0lTX1RFWFQoY2hpbGQpKTsKKyAgICBj
aGlsZFRleHQgPSBBVEtfVEVYVChjaGlsZCk7CisKKyAgICBzZXQxID0gYXRrX3RleHRfZ2V0X3J1
bl9hdHRyaWJ1dGVzKGNoaWxkVGV4dCwgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAg
ICBzZXQyID0gYXRrX3RleHRfZ2V0X3J1bl9hdHRyaWJ1dGVzKGNoaWxkVGV4dCwgMywgJnN0YXJ0
T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBcmVFcXVh
bChzZXQxLCBzZXQyKSk7CisgICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJlZShzZXQyKTsKKworICAg
IHNldDIgPSBhdGtfdGV4dF9nZXRfcnVuX2F0dHJpYnV0ZXMoY2hpbGRUZXh0LCAxLCAmc3RhcnRP
ZmZzZXQsICZlbmRPZmZzZXQpOworICAgIHNldDMgPSBhdGtfdGV4dF9nZXRfcnVuX2F0dHJpYnV0
ZXMoY2hpbGRUZXh0LCA1LCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOworICAgIGdfYXNzZXJ0
KGF0a0F0dHJpYnV0ZVNldEFyZUVxdWFsKHNldDIsIHNldDMpKTsKKyAgICBnX2Fzc2VydCghYXRr
QXR0cmlidXRlU2V0QXJlRXF1YWwoc2V0MSwgc2V0MikpOworICAgIGF0a19hdHRyaWJ1dGVfc2V0
X2ZyZWUoc2V0Myk7CisKKyAgICBzZXQzID0gYXRrX3RleHRfZ2V0X3J1bl9hdHRyaWJ1dGVzKGNo
aWxkVGV4dCwgMiwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAgICBzZXQ0ID0gYXRrX3Rl
eHRfZ2V0X3J1bl9hdHRyaWJ1dGVzKGNoaWxkVGV4dCwgNiwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zm
c2V0KTsKKyAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBcmVFcXVhbChzZXQzLCBzZXQ0KSk7
CisgICAgZ19hc3NlcnQoIWF0a0F0dHJpYnV0ZVNldEFyZUVxdWFsKHNldDEsIHNldDMpKTsKKyAg
ICBnX2Fzc2VydCghYXRrQXR0cmlidXRlU2V0QXJlRXF1YWwoc2V0Miwgc2V0MykpOworICAgIGF0
a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0MSk7CisgICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJlZShz
ZXQyKTsKKyAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHNldDMpOworICAgIGF0a19hdHRyaWJ1
dGVfc2V0X2ZyZWUoc2V0NCk7CisgICAgZ19vYmplY3RfdW5yZWYoY2hpbGQpOworCisgICAgY2hp
bGQgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMyk7CisgICAgZ19h
c3NlcnQoY2hpbGQgJiYgQVRLX0lTX1RFWFQoY2hpbGQpKTsKKyAgICBjaGlsZFRleHQgPSBBVEtf
VEVYVChjaGlsZCk7CisgICAgc2V0MSA9IGF0a190ZXh0X2dldF9ydW5fYXR0cmlidXRlcyhjaGls
ZFRleHQsIDI0LCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChzdGFydE9mZnNldCwgPT0sIDIxKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9
PSwgMjUpOworICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKHNl
dDEsIEFUS19URVhUX0FUVFJfU1RSSUtFVEhST1VHSCwgInRydWUiKSk7CisKKyAgICBzZXQyID0g
YXRrX3RleHRfZ2V0X3J1bl9hdHRyaWJ1dGVzKGNoaWxkVGV4dCwgMjUsICZzdGFydE9mZnNldCwg
JmVuZE9mZnNldCk7CisgICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMjUpOwor
ICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCAzMCk7CisgICAgZ19hc3NlcnQoYXRr
QXR0cmlidXRlU2V0QXJlRXF1YWwoc2V0MiwgMCkpOworCisgICAgc2V0MyA9IGF0a190ZXh0X2dl
dF9kZWZhdWx0X2F0dHJpYnV0ZXMoY2hpbGRUZXh0KTsKKyAgICBnX2Fzc2VydChhdGtBdHRyaWJ1
dGVTZXRBdHRyaWJ1dGVIYXNWYWx1ZShzZXQzLCBBVEtfVEVYVF9BVFRSX0pVU1RJRklDQVRJT04s
ICJjZW50ZXIiKSk7CisgICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJlZShzZXQxKTsKKyAgICBhdGtf
YXR0cmlidXRlX3NldF9mcmVlKHNldDIpOworICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0
Myk7CisKKyAgICBnX29iamVjdF91bnJlZihjaGlsZCk7Cit9CisKK3N0YXRpYyBnY2hhciogdGV4
dFNlbGVjdGlvbkNoYW5nZWRSZXN1bHQgPSAwOworCitzdGF0aWMgdm9pZCB0ZXh0U2VsZWN0aW9u
Q2hhbmdlZENhbGxiYWNrKEF0a1RleHQqIHRleHQsIGdwb2ludGVyIGRhdGEpCit7CisgICAgZ19h
c3NlcnQoQVRLX0lTX1RFWFQodGV4dCkpOworCisgICAgZ19mcmVlKHRleHRTZWxlY3Rpb25DaGFu
Z2VkUmVzdWx0KTsKKyAgICBBdGtSb2xlIHJvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKEFUS19P
QkpFQ1QodGV4dCkpOworICAgIGludCBzdGFydE9mZnNldCA9IDA7CisgICAgaW50IGVuZE9mZnNl
dCA9IDA7CisgICAgYXRrX3RleHRfZ2V0X3NlbGVjdGlvbihBVEtfVEVYVCh0ZXh0KSwgMCwgJnN0
YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAgICB0ZXh0U2VsZWN0aW9uQ2hhbmdlZFJlc3VsdCA9
IGdfc3RyZHVwX3ByaW50ZigifCVzfCVkfCVkfCIsIGF0a19yb2xlX2dldF9uYW1lKHJvbGUpLCBz
dGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a1Rl
eHRTZWxlY3Rpb25zKCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dF
Ql9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmplY3RfcmVmX3Npbmsod2Vi
Vmlldyk7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9
OworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxs
b2NhdGlvbik7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIHRleHRG
b3JTZWxlY3Rpb25zLCAwLCAwLCAwKTsKKworICAgIEF0a09iamVjdCogb2JqZWN0ID0gZ2V0V2Vi
QXJlYU9iamVjdCh3ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChvYmplY3QpOworCisgICAgQXRrVGV4
dCogcGFyYWdyYXBoMSA9IEFUS19URVhUKGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQo
b2JqZWN0LCAwKSk7CisgICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQocGFyYWdyYXBoMSkpOworICAg
IGdfc2lnbmFsX2Nvbm5lY3QocGFyYWdyYXBoMSwgInRleHQtc2VsZWN0aW9uLWNoYW5nZWQiLCBH
X0NBTExCQUNLKHRleHRTZWxlY3Rpb25DaGFuZ2VkQ2FsbGJhY2spLCAwKTsKKworICAgIEF0a1Rl
eHQqIHBhcmFncmFwaDIgPSBBVEtfVEVYVChhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxk
KG9iamVjdCwgMSkpOworICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHBhcmFncmFwaDIpKTsKKyAg
ICBnX3NpZ25hbF9jb25uZWN0KHBhcmFncmFwaDIsICJ0ZXh0LXNlbGVjdGlvbi1jaGFuZ2VkIiwg
R19DQUxMQkFDSyh0ZXh0U2VsZWN0aW9uQ2hhbmdlZENhbGxiYWNrKSwgMCk7CisKKyAgICBBdGtU
ZXh0KiBsaW5rID0gQVRLX1RFWFQoYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChBVEtf
T0JKRUNUKHBhcmFncmFwaDIpLCAwKSk7CisgICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQobGluaykp
OworCisgICAgQXRrT2JqZWN0KiBsaXN0ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGls
ZChvYmplY3QsIDIpOworICAgIGdfYXNzZXJ0KEFUS19PQkpFQ1QobGlzdCkpOworCisgICAgQXRr
VGV4dCogbGlzdEl0ZW0gPSBBVEtfVEVYVChhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxk
KGxpc3QsIDApKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChsaXN0SXRlbSkpOworCisgICAg
LyogRmlyc3QgcGFyYWdyYXBoIChzaW1wbGUgdGV4dCkuICovCisKKyAgICAvKiBCYXNpYyBpbml0
aWFsIGNoZWNrcy4gKi8KKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX3RleHRfZ2V0X25fc2VsZWN0
aW9ucyhwYXJhZ3JhcGgxKSwgPT0sIDApOworCisgICAgZ2ludCBzdGFydE9mZnNldDsKKyAgICBn
aW50IGVuZE9mZnNldDsKKyAgICBnY2hhciogc2VsZWN0ZWRUZXh0ID0gYXRrX3RleHRfZ2V0X3Nl
bGVjdGlvbihwYXJhZ3JhcGgxLCAwLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOworICAgIGdf
YXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDApOworICAgIGdfYXNzZXJ0X2NtcGludChl
bmRPZmZzZXQsID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRUZXh0LCA9PSwg
MCk7CisgICAgZ19mcmVlIChzZWxlY3RlZFRleHQpOworCisgICAgLyogVHJ5IHJlbW92aW5nIGEg
bm9uIGV4aXN0aW5nICh5ZXQpIHNlbGVjdGlvbi4gKi8KKyAgICBnYm9vbGVhbiByZXN1bHQgPSBh
dGtfdGV4dF9yZW1vdmVfc2VsZWN0aW9uKHBhcmFncmFwaDEsIDApOworICAgIGdfYXNzZXJ0KCFy
ZXN1bHQpOworCisgICAgLyogVHJ5IHNldHRpbmcgYSAwLWNoYXIgc2VsZWN0aW9uLiAqLworICAg
IHJlc3VsdCA9IGF0a190ZXh0X3NldF9zZWxlY3Rpb24ocGFyYWdyYXBoMSwgMCwgNSwgNSk7Cisg
ICAgZ19hc3NlcnQocmVzdWx0KTsKKworICAgIC8qIE1ha2UgYSBzZWxlY3Rpb24gYW5kIHRlc3Qg
aXQuICovCisgICAgcmVzdWx0ID0gYXRrX3RleHRfc2V0X3NlbGVjdGlvbihwYXJhZ3JhcGgxLCAw
LCA1LCAyNSk7CisgICAgZ19hc3NlcnQocmVzdWx0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRr
X3RleHRfZ2V0X25fc2VsZWN0aW9ucyhwYXJhZ3JhcGgxKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0
X2NtcHN0cih0ZXh0U2VsZWN0aW9uQ2hhbmdlZFJlc3VsdCwgPT0sICJ8cGFyYWdyYXBofDV8MjV8
Iik7CisgICAgc2VsZWN0ZWRUZXh0ID0gYXRrX3RleHRfZ2V0X3NlbGVjdGlvbihwYXJhZ3JhcGgx
LCAwLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOworICAgIGdfYXNzZXJ0X2NtcGludChzdGFy
dE9mZnNldCwgPT0sIDUpOworICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCAyNSk7
CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkVGV4dCwgPT0sICJhZ3JhcGggd2l0aCBwbGFp
biB0ZSIpOworICAgIGdfZnJlZSAoc2VsZWN0ZWRUZXh0KTsKKworICAgIC8qIFRyeSByZW1vdmlu
ZyB0aGUgc2VsZWN0aW9uIGZyb20gb3RoZXIgQXRrVGV4dCBvYmplY3QgKHNob3VsZCBmYWlsKS4g
Ki8KKyAgICByZXN1bHQgPSBhdGtfdGV4dF9yZW1vdmVfc2VsZWN0aW9uKHBhcmFncmFwaDIsIDAp
OworICAgIGdfYXNzZXJ0KCFyZXN1bHQpOworCisgICAgLyogUmVtb3ZlIHRoZSBzZWxlY3Rpb24g
YW5kIHRlc3QgZXZlcnl0aGluZyBhZ2Fpbi4gKi8KKyAgICByZXN1bHQgPSBhdGtfdGV4dF9yZW1v
dmVfc2VsZWN0aW9uKHBhcmFncmFwaDEsIDApOworICAgIGdfYXNzZXJ0KHJlc3VsdCk7CisgICAg
Z19hc3NlcnRfY21waW50KGF0a190ZXh0X2dldF9uX3NlbGVjdGlvbnMocGFyYWdyYXBoMSksID09
LCAwKTsKKyAgICBzZWxlY3RlZFRleHQgPSBhdGtfdGV4dF9nZXRfc2VsZWN0aW9uKHBhcmFncmFw
aDEsIDAsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgLyogTm93IG9mZnNldHMgc2hv
dWxkIGJlIHRoZSBzYW1lLCBzZXQgdG8gdGhlIGxhc3QgcG9zaXRpb24gb2YgdGhlIGNhcmV0LiAq
LworICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIGVuZE9mZnNldCk7CisgICAg
Z19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMjUpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChlbmRPZmZzZXQsID09LCAyNSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkVGV4dCwg
PT0sIDApOworICAgIGdfZnJlZSAoc2VsZWN0ZWRUZXh0KTsKKworICAgIC8qIFNlY29uZCBwYXJh
Z3JhcGggKHRleHQgKyBsaW5rICsgdGV4dCkuICovCisKKyAgICAvKiBTZXQgYSBzZWxlY3Rpb24g
cGFydGlhbGx5IGNvdmVyaW5nIHRoZSBsaW5rIGFuZCB0ZXN0IGl0LiAqLworICAgIHJlc3VsdCA9
IGF0a190ZXh0X3NldF9zZWxlY3Rpb24ocGFyYWdyYXBoMiwgMCwgNywgMjEpOworICAgIGdfYXNz
ZXJ0KHJlc3VsdCk7CisKKyAgICAvKiBUZXN0IHRoZSBwYXJhZ3JhcGggZmlyc3QuICovCisgICAg
Z19hc3NlcnRfY21waW50KGF0a190ZXh0X2dldF9uX3NlbGVjdGlvbnMocGFyYWdyYXBoMiksID09
LCAxKTsKKyAgICBzZWxlY3RlZFRleHQgPSBhdGtfdGV4dF9nZXRfc2VsZWN0aW9uKHBhcmFncmFw
aDIsIDAsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgZ19hc3NlcnRfY21waW50KHN0
YXJ0T2Zmc2V0LCA9PSwgNyk7CisgICAgZ19hc3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0sIDIx
KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRUZXh0LCA9PSwgInJhcGggd2l0aCBhIGxp
Iik7CisgICAgZ19mcmVlIChzZWxlY3RlZFRleHQpOworCisgICAgLyogTm93IHRlc3QganVzdCB0
aGUgbGluay4gKi8KKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX3RleHRfZ2V0X25fc2VsZWN0aW9u
cyhsaW5rKSwgPT0sIDEpOworICAgIHNlbGVjdGVkVGV4dCA9IGF0a190ZXh0X2dldF9zZWxlY3Rp
b24obGluaywgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoc3RhcnRPZmZzZXQsID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9
PSwgNCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkVGV4dCwgPT0sICJhIGxpIik7Cisg
ICAgZ19mcmVlIChzZWxlY3RlZFRleHQpOworCisgICAgLyogTWFrZSBhIHNlbGVjdGlvbiBhZnRl
ciB0aGUgbGluayBhbmQgY2hlY2sgc2VsZWN0aW9uIGZvciB0aGUgd2hvbGUgcGFyYWdyYXBoLiAq
LworICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9zZWxlY3Rpb24ocGFyYWdyYXBoMiwgMCwgMjcs
IDM3KTsKKyAgICBnX2Fzc2VydChyZXN1bHQpOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfdGV4
dF9nZXRfbl9zZWxlY3Rpb25zKHBhcmFncmFwaDIpLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21w
c3RyKHRleHRTZWxlY3Rpb25DaGFuZ2VkUmVzdWx0LCA9PSwgInxwYXJhZ3JhcGh8Mjd8Mzd8Iik7
CisgICAgc2VsZWN0ZWRUZXh0ID0gYXRrX3RleHRfZ2V0X3NlbGVjdGlvbihwYXJhZ3JhcGgyLCAw
LCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOworICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9m
ZnNldCwgPT0sIDI3KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMzcpOwor
ICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZFRleHQsID09LCAidGhlIG1pZGRsZSIpOworICAg
IGdfZnJlZSAoc2VsZWN0ZWRUZXh0KTsKKworICAgIC8qIFJlbW92ZSBzZWxlY3Rpb25zIGFuZCB0
ZXh0IGV2ZXJ5dGhpbmcgYWdhaW4uICovCisgICAgcmVzdWx0ID0gYXRrX3RleHRfcmVtb3ZlX3Nl
bGVjdGlvbihwYXJhZ3JhcGgyLCAwKTsKKyAgICBnX2Fzc2VydChyZXN1bHQpOworICAgIGdfYXNz
ZXJ0X2NtcGludChhdGtfdGV4dF9nZXRfbl9zZWxlY3Rpb25zKHBhcmFncmFwaDIpLCA9PSwgMCk7
CisgICAgc2VsZWN0ZWRUZXh0ID0gYXRrX3RleHRfZ2V0X3NlbGVjdGlvbihwYXJhZ3JhcGgyLCAw
LCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOworICAgIC8qIE5vdyBvZmZzZXRzIHNob3VsZCBi
ZSB0aGUgc2FtZSAobm8gc2VsZWN0aW9uKS4gKi8KKyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRP
ZmZzZXQsID09LCBlbmRPZmZzZXQpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZFRleHQs
ID09LCAwKTsKKyAgICBnX2ZyZWUgKHNlbGVjdGVkVGV4dCk7CisKKyAgICBnX2Fzc2VydF9jbXBp
bnQoYXRrX3RleHRfZ2V0X25fc2VsZWN0aW9ucyhsaW5rKSwgPT0sIDApOworICAgIHNlbGVjdGVk
VGV4dCA9IGF0a190ZXh0X2dldF9zZWxlY3Rpb24obGluaywgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5k
T2Zmc2V0KTsKKyAgICAvKiBOb3cgb2Zmc2V0cyBzaG91bGQgYmUgdGhlIHNhbWUgKG5vIHNlbGVj
dGlvbikuICovCisgICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgZW5kT2Zmc2V0
KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRUZXh0LCA9PSwgMCk7CisgICAgZ19mcmVl
IChzZWxlY3RlZFRleHQpOworCisgICAgLyogTGlzdCBpdGVtICovCisKKyAgICBnX2Fzc2VydChh
dGtfb2JqZWN0X2dldF9yb2xlKGxpc3QpID09IEFUS19ST0xFX0xJU1QpOworICAgIGdfYXNzZXJ0
X2NtcGludChhdGtfb2JqZWN0X2dldF9uX2FjY2Vzc2libGVfY2hpbGRyZW4obGlzdCksID09LCAx
KTsKKworICAgIC8qIEl0J3Mgbm90IHBvc3NpYmxlIHRvIHNlbGVjdCB0ZXh0IGluc2lkZSBhbiBp
dGVtJ3MgbWFya2VyLiAqLworICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9zZWxlY3Rpb24gKGxp
c3RJdGVtLCAwLCAwLCA5KTsKKyAgICBnX2Fzc2VydCghcmVzdWx0KTsKKyAgICByZXN1bHQgPSBh
dGtfdGV4dF9zZXRfc2VsZWN0aW9uIChsaXN0SXRlbSwgMCwgOSwgMSk7CisgICAgZ19hc3NlcnQo
IXJlc3VsdCk7CisKKyAgICAvKiBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8gc2VsZWN0IHRleHQg
aW5zaWRlIGFuIGl0ZW0ncyB0ZXh0LiAqLworICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9zZWxl
Y3Rpb24gKGxpc3RJdGVtLCAwLCAzLCA5KTsKKyAgICBnX2Fzc2VydChyZXN1bHQpOworCisgICAg
Z19hc3NlcnRfY21waW50KGF0a190ZXh0X2dldF9uX3NlbGVjdGlvbnMobGlzdEl0ZW0pLCA9PSwg
MSk7CisgICAgc2VsZWN0ZWRUZXh0ID0gYXRrX3RleHRfZ2V0X3NlbGVjdGlvbihsaXN0SXRlbSwg
MCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRP
ZmZzZXQsID09LCAzKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgOSk7Cisg
ICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkVGV4dCwgPT0sICJBIGxpc3QiKTsKKyAgICBnX2Zy
ZWUgKHNlbGVjdGVkVGV4dCk7CisKKyAgICBnX2ZyZWUodGV4dFNlbGVjdGlvbkNoYW5nZWRSZXN1
bHQpOworCisgICAgZ19vYmplY3RfdW5yZWYocGFyYWdyYXBoMSk7CisgICAgZ19vYmplY3RfdW5y
ZWYocGFyYWdyYXBoMik7CisgICAgZ19vYmplY3RfdW5yZWYobGluayk7CisgICAgZ19vYmplY3Rf
dW5yZWYobGlzdCk7CisgICAgZ19vYmplY3RfdW5yZWYobGlzdEl0ZW0pOworICAgIGdfb2JqZWN0
X3VucmVmKHdlYlZpZXcpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrR2V0RXh0ZW50
cygpCit7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJr
aXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOworICAg
IEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgODAwLCA2MDAgfTsKKyAgICBndGtf
d2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOwor
ICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LCBjZW50ZXJlZENvbnRlbnRz
LCAwLCAwLCAwKTsKKworICAgIEF0a09iamVjdCogb2JqZWN0ID0gZ2V0V2ViQXJlYU9iamVjdCh3
ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChvYmplY3QpOworCisgICAgQXRrVGV4dCogc2hvcnRUZXh0
MSA9IEFUS19URVhUKGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAwKSk7
CisgICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQoc2hvcnRUZXh0MSkpOworICAgIEF0a1RleHQqIGxv
bmdUZXh0ID0gQVRLX1RFWFQoYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3Qs
IDEpKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChsb25nVGV4dCkpOworICAgIEF0a1RleHQq
IHNob3J0VGV4dDIgPSBBVEtfVEVYVChhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9i
amVjdCwgMikpOworICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHNob3J0VGV4dDIpKTsKKyAgICBB
dGtUZXh0KiBtdWx0aWxpbmVUZXh0ID0gQVRLX1RFWFQoYXRrX29iamVjdF9yZWZfYWNjZXNzaWJs
ZV9jaGlsZChvYmplY3QsIDMpKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChtdWx0aWxpbmVU
ZXh0KSk7CisKKyAgICAvKiBTdGFydCB3aXRoIHdpbmRvdyBleHRlbnRzLiAqLworICAgIEF0a1Rl
eHRSZWN0YW5nbGUgc2xpbmVfd2luZG93MSwgc2xpbmVfd2luZG93MiwgbGxpbmVfd2luZG93LCBt
bGluZV93aW5kb3c7CisgICAgYXRrX3RleHRfZ2V0X3JhbmdlX2V4dGVudHMoc2hvcnRUZXh0MSwg
MCwgMTAsIEFUS19YWV9XSU5ET1csICZzbGluZV93aW5kb3cxKTsKKyAgICBhdGtfdGV4dF9nZXRf
cmFuZ2VfZXh0ZW50cyhsb25nVGV4dCwgMCwgNDQsIEFUS19YWV9XSU5ET1csICZsbGluZV93aW5k
b3cpOworICAgIGF0a190ZXh0X2dldF9yYW5nZV9leHRlbnRzKHNob3J0VGV4dDIsIDAsIDEwLCBB
VEtfWFlfV0lORE9XLCAmc2xpbmVfd2luZG93Mik7CisgICAgYXRrX3RleHRfZ2V0X3JhbmdlX2V4
dGVudHMobXVsdGlsaW5lVGV4dCwgMCwgNjAsIEFUS19YWV9XSU5ET1csICZtbGluZV93aW5kb3cp
OworCisgICAgLyogQ2hlY2sgdmVydGljYWwgbGluZSBwb3NpdGlvbi4gKi8KKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoc2xpbmVfd2luZG93MS55ICsgc2xpbmVfd2luZG93MS5oZWlnaHQsIDw9LCBsbGlu
ZV93aW5kb3cueSk7CisgICAgZ19hc3NlcnRfY21waW50KGxsaW5lX3dpbmRvdy55ICsgbGxpbmVf
d2luZG93LmhlaWdodCArIHNsaW5lX3dpbmRvdzIuaGVpZ2h0LCA8PSwgbWxpbmVfd2luZG93Lnkp
OworCisgICAgLyogUGFyYWdyYXBocyAxIGFuZCAzIGhhdmUgaWRlbnRpY2FsIHRleHQgYW5kIGFs
aWdubWVudC4gKi8KKyAgICBnX2Fzc2VydF9jbXBpbnQoc2xpbmVfd2luZG93MS54LCA9PSwgc2xp
bmVfd2luZG93Mi54KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc2xpbmVfd2luZG93MS53aWR0aCwg
PT0sIHNsaW5lX3dpbmRvdzIud2lkdGgpOworICAgIGdfYXNzZXJ0X2NtcGludChzbGluZV93aW5k
b3cxLmhlaWdodCwgPT0sIHNsaW5lX3dpbmRvdzIuaGVpZ2h0KTsKKworICAgIC8qIEFsbCBsaW5l
cyBzaG91bGQgYmUgdGhlIHNhbWUgaGVpZ2h0OyBsaW5lIDIgaXMgdGhlIHdpZGVzdCBsaW5lLiAq
LworICAgIGdfYXNzZXJ0X2NtcGludChzbGluZV93aW5kb3cxLmhlaWdodCwgPT0sIGxsaW5lX3dp
bmRvdy5oZWlnaHQpOworICAgIGdfYXNzZXJ0X2NtcGludChzbGluZV93aW5kb3cxLndpZHRoLCA8
LCBsbGluZV93aW5kb3cud2lkdGgpOworCisgICAgLyogTWFrZSBzdXJlIHRoZSBjaGFyYWN0ZXIg
ZXh0ZW50cyBqaXZlIHdpdGggdGhlIHJhbmdlIGV4dGVudHMuICovCisgICAgZ2ludCB4OworICAg
IGdpbnQgeTsKKyAgICBnaW50IHdpZHRoOworICAgIGdpbnQgaGVpZ2h0OworCisgICAgLyogRmly
c3QgcGFyYWdyYXBoIChzaG9ydCB0ZXh0KS4gKi8KKyAgICBhdGtfdGV4dF9nZXRfY2hhcmFjdGVy
X2V4dGVudHMoc2hvcnRUZXh0MSwgMCwgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQsIEFUS19YWV9X
SU5ET1cpOworICAgIGdfYXNzZXJ0X2NtcGludCh4LCA9PSwgc2xpbmVfd2luZG93MS54KTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoeSwgPT0sIHNsaW5lX3dpbmRvdzEueSk7CisgICAgZ19hc3NlcnRf
Y21waW50KGhlaWdodCwgPT0sIHNsaW5lX3dpbmRvdzEuaGVpZ2h0KTsKKworICAgIGF0a190ZXh0
X2dldF9jaGFyYWN0ZXJfZXh0ZW50cyhzaG9ydFRleHQxLCA5LCAmeCwgJnksICZ3aWR0aCwgJmhl
aWdodCwgQVRLX1hZX1dJTkRPVyk7CisgICAgZ19hc3NlcnRfY21waW50KHgsID09LCBzbGluZV93
aW5kb3cxLnggKyBzbGluZV93aW5kb3cxLndpZHRoIC0gd2lkdGgpOworICAgIGdfYXNzZXJ0X2Nt
cGludCh5LCA9PSwgc2xpbmVfd2luZG93MS55KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoaGVpZ2h0
LCA9PSwgc2xpbmVfd2luZG93MS5oZWlnaHQpOworCisgICAgLyogU2Vjb25kIHBhcmFncmFwaCAo
bG9uZyB0ZXh0KS4gKi8KKyAgICBhdGtfdGV4dF9nZXRfY2hhcmFjdGVyX2V4dGVudHMobG9uZ1Rl
eHQsIDAsICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0LCBBVEtfWFlfV0lORE9XKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoeCwgPT0sIGxsaW5lX3dpbmRvdy54KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
eSwgPT0sIGxsaW5lX3dpbmRvdy55KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoaGVpZ2h0LCA9PSwg
bGxpbmVfd2luZG93LmhlaWdodCk7CisKKyAgICBhdGtfdGV4dF9nZXRfY2hhcmFjdGVyX2V4dGVu
dHMobG9uZ1RleHQsIDQzLCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCwgQVRLX1hZX1dJTkRPVyk7
CisgICAgZ19hc3NlcnRfY21waW50KHgsID09LCBsbGluZV93aW5kb3cueCArIGxsaW5lX3dpbmRv
dy53aWR0aCAtIHdpZHRoKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoeSwgPT0sIGxsaW5lX3dpbmRv
dy55KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoaGVpZ2h0LCA9PSwgbGxpbmVfd2luZG93LmhlaWdo
dCk7CisKKyAgICAvKiBUaGlyZCBwYXJhZ3JhcGggKHNob3J0IHRleHQpLiAqLworICAgIGF0a190
ZXh0X2dldF9jaGFyYWN0ZXJfZXh0ZW50cyhzaG9ydFRleHQyLCAwLCAmeCwgJnksICZ3aWR0aCwg
JmhlaWdodCwgQVRLX1hZX1dJTkRPVyk7CisgICAgZ19hc3NlcnRfY21waW50KHgsID09LCBzbGlu
ZV93aW5kb3cyLngpOworICAgIGdfYXNzZXJ0X2NtcGludCh5LCA9PSwgc2xpbmVfd2luZG93Mi55
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoaGVpZ2h0LCA9PSwgc2xpbmVfd2luZG93Mi5oZWlnaHQp
OworCisgICAgYXRrX3RleHRfZ2V0X2NoYXJhY3Rlcl9leHRlbnRzKHNob3J0VGV4dDIsIDksICZ4
LCAmeSwgJndpZHRoLCAmaGVpZ2h0LCBBVEtfWFlfV0lORE9XKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoeCwgPT0sIHNsaW5lX3dpbmRvdzIueCArIHNsaW5lX3dpbmRvdzIud2lkdGggLSB3aWR0aCk7
CisgICAgZ19hc3NlcnRfY21waW50KHksID09LCBzbGluZV93aW5kb3cyLnkpOworICAgIGdfYXNz
ZXJ0X2NtcGludChoZWlnaHQsID09LCBzbGluZV93aW5kb3cyLmhlaWdodCk7CisKKyAgICAvKiBG
b3VyIHBhcmFncmFwaCAoMyBsaW5lcyBtdWx0aS1saW5lIHRleHQpLiAqLworICAgIGF0a190ZXh0
X2dldF9jaGFyYWN0ZXJfZXh0ZW50cyhtdWx0aWxpbmVUZXh0LCAwLCAmeCwgJnksICZ3aWR0aCwg
JmhlaWdodCwgQVRLX1hZX1dJTkRPVyk7CisgICAgZ19hc3NlcnRfY21waW50KHgsID09LCBtbGlu
ZV93aW5kb3cueCk7CisgICAgZ19hc3NlcnRfY21waW50KHksID09LCBtbGluZV93aW5kb3cueSk7
CisgICAgZ19hc3NlcnRfY21waW50KDMgKiBoZWlnaHQsID09LCBtbGluZV93aW5kb3cuaGVpZ2h0
KTsKKworICAgIGF0a190ZXh0X2dldF9jaGFyYWN0ZXJfZXh0ZW50cyhtdWx0aWxpbmVUZXh0LCA1
OSwgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQsIEFUS19YWV9XSU5ET1cpOworICAgIC8qIExhc3Qg
bGluZSB3b24ndCBmaWxsIHRoZSB3aG9sZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlLiAqLworICAg
IGdfYXNzZXJ0X2NtcGludCh4LCA8PSwgbWxpbmVfd2luZG93LnggKyBtbGluZV93aW5kb3cud2lk
dGggLSB3aWR0aCk7CisgICAgZ19hc3NlcnRfY21waW50KHksID09LCBtbGluZV93aW5kb3cueSAr
IG1saW5lX3dpbmRvdy5oZWlnaHQgLSBoZWlnaHQpOworICAgIGdfYXNzZXJ0X2NtcGludChoZWln
aHQsIDw9LCBtbGluZV93aW5kb3cuaGVpZ2h0KTsKKworICAgIC8qIENoZWNrIHRoYXQgZXh0ZW50
IGZvciBhIGZ1bGwgbGluZSBhcmUgdGhlIHNhbWUgaGVpZ2h0IHRoYW4gZm9yCisgICAgICAgYSBw
YXJ0aWFsIHNlY3Rpb24gb2YgdGhlIHNhbWUgbGluZSAqLworICAgIGdpbnQgc3RhcnRPZmZzZXQ7
CisgICAgZ2ludCBlbmRPZmZzZXQ7CisKKyNpZiAhQVRLX0NIRUNLX1ZFUlNJT04oMiwgMTAsIDAp
CisgICAgZ2NoYXIqIHRleHQgPSBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQobXVsdGlsaW5l
VGV4dCwgMCwgQVRLX1RFWFRfQk9VTkRBUllfTElORV9TVEFSVCwgJnN0YXJ0T2Zmc2V0LCAmZW5k
T2Zmc2V0KTsKKyAgICBnX2ZyZWUodGV4dCk7CisjZWxzZQorICAgIGdjaGFyKiB0ZXh0ID0gYXRr
X3RleHRfZ2V0X3N0cmluZ19hdF9vZmZzZXQobXVsdGlsaW5lVGV4dCwgMCwgQVRLX1RFWFRfR1JB
TlVMQVJJVFlfTElORSwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAgICBnX2ZyZWUodGV4
dCk7CisjZW5kaWYKKworICAgIEF0a1RleHRSZWN0YW5nbGUgZmxpbmVfd2luZG93OworICAgIEF0
a1RleHRSZWN0YW5nbGUgYWZsaW5lX3dpbmRvdzsKKyAgICBhdGtfdGV4dF9nZXRfcmFuZ2VfZXh0
ZW50cyhtdWx0aWxpbmVUZXh0LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBBVEtfWFlfV0lORE9X
LCAmZmxpbmVfd2luZG93KTsKKyAgICBhdGtfdGV4dF9nZXRfcmFuZ2VfZXh0ZW50cyhtdWx0aWxp
bmVUZXh0LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0IC0gMSwgQVRLX1hZX1dJTkRPVywgJmFmbGlu
ZV93aW5kb3cpOworICAgIGdfYXNzZXJ0X2NtcGludChmbGluZV93aW5kb3cueCwgPT0sIGFmbGlu
ZV93aW5kb3cueCk7CisgICAgZ19hc3NlcnRfY21waW50KGZsaW5lX3dpbmRvdy55LCA9PSwgYWZs
aW5lX3dpbmRvdy55KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZmxpbmVfd2luZG93LmhlaWdodCwg
PT0sIGFmbGluZV93aW5kb3cuaGVpZ2h0KTsKKworICAgIGdfb2JqZWN0X3VucmVmKHNob3J0VGV4
dDEpOworICAgIGdfb2JqZWN0X3VucmVmKHNob3J0VGV4dDIpOworICAgIGdfb2JqZWN0X3VucmVm
KGxvbmdUZXh0KTsKKyAgICBnX29iamVjdF91bnJlZihtdWx0aWxpbmVUZXh0KTsKKyAgICBnX29i
amVjdF91bnJlZih3ZWJWaWV3KTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0xheW91
dEFuZERhdGFUYWJsZXMoKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRf
V0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBnX29iamVjdF9yZWZfc2luayh3
ZWJWaWV3KTsKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDgwMCwgNjAw
IH07CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQod2ViVmlldyksICZh
bGxvY2F0aW9uKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgbGF5
b3V0QW5kRGF0YVRhYmxlcywgMCwgMCwgMCk7CisKKyAgICBBdGtPYmplY3QqIG9iamVjdCA9IGdl
dFdlYkFyZWFPYmplY3Qod2ViVmlldyk7CisgICAgZ19hc3NlcnQob2JqZWN0KTsKKworICAgIC8q
IENoZWNrIHRoZSBub24tbGF5b3V0IHRhYmxlIChkYXRhIHRhYmxlKS4gKi8KKworICAgIEF0a09i
amVjdCogdGFibGUxID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDAp
OworICAgIGdfYXNzZXJ0KEFUS19JU19UQUJMRSh0YWJsZTEpKTsKKyAgICBBdGtBdHRyaWJ1dGVT
ZXQqIHNldDEgPSBhdGtfb2JqZWN0X2dldF9hdHRyaWJ1dGVzKHRhYmxlMSk7CisgICAgZ19hc3Nl
cnQoc2V0MSk7CisgICAgZ19hc3NlcnQoIWF0a0F0dHJpYnV0ZVNldENvbnRhaW5zQXR0cmlidXRl
TmFtZShzZXQxLCAibGF5b3V0LWd1ZXNzIikpOworICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUo
c2V0MSk7CisKKyAgICAvKiBDaGVjayB0aGUgbGF5b3V0IHRhYmxlLiAqLworCisgICAgQXRrT2Jq
ZWN0KiB0YWJsZTIgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMSk7
CisgICAgZ19hc3NlcnQoQVRLX0lTX1RBQkxFKHRhYmxlMikpOworICAgIEF0a0F0dHJpYnV0ZVNl
dCogc2V0MiA9IGF0a19vYmplY3RfZ2V0X2F0dHJpYnV0ZXModGFibGUyKTsKKyAgICBnX2Fzc2Vy
dChzZXQyKTsKKyAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRDb250YWluc0F0dHJpYnV0ZU5h
bWUoc2V0MiwgImxheW91dC1ndWVzcyIpKTsKKyAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRB
dHRyaWJ1dGVOYW1lSGFzVmFsdWUoc2V0MiwgImxheW91dC1ndWVzcyIsICJ0cnVlIikpOworICAg
IGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0Mik7CisKKyAgICBnX29iamVjdF91bnJlZih0YWJs
ZTEpOworICAgIGdfb2JqZWN0X3VucmVmKHRhYmxlMik7CisgICAgZ19vYmplY3RfdW5yZWYod2Vi
Vmlldyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtMaW5rc1dpdGhJbmxpbmVJbWFn
ZXMoKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Vi
a2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKKyAg
ICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDgwMCwgNjAwIH07CisgICAgZ3Rr
X3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQod2ViVmlldyksICZhbGxvY2F0aW9uKTsK
KyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgbGlua3NXaXRoSW5saW5l
SW1hZ2VzLCAwLCAwLCAwKTsKKworICAgIEF0a09iamVjdCogb2JqZWN0ID0gZ2V0V2ViQXJlYU9i
amVjdCh3ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChvYmplY3QpOworCisgICAgLyogRmlyc3QgcGFy
YWdyYXBoIChsaW5rIGF0IHRoZSBiZWdpbm5pbmcpLiAqLworICAgIEF0a09iamVjdCogcGFyYWdy
YXBoID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDApOworICAgIGdf
YXNzZXJ0KEFUS19JU19URVhUKHBhcmFncmFwaCkpOworICAgIGdpbnQgc3RhcnRPZmZzZXQ7Cisg
ICAgZ2ludCBlbmRPZmZzZXQ7CisKKyNpZiAhQVRLX0NIRUNLX1ZFUlNJT04oMiwgMTAsIDApCisg
ICAgZ2NoYXIqIHRleHQgPSBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQoQVRLX1RFWFQocGFy
YWdyYXBoKSwgMCwgQVRLX1RFWFRfQk9VTkRBUllfTElORV9TVEFSVCwgJnN0YXJ0T2Zmc2V0LCAm
ZW5kT2Zmc2V0KTsKKyAgICBnX2Fzc2VydCh0ZXh0KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGV4
dCwgPT0sICJmb28gYmFyIGJheiIpOworICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwg
PT0sIDApOworICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCAxMSk7CisgICAgZ19m
cmVlKHRleHQpOworI2Vsc2UKKyAgICBnY2hhciogdGV4dCA9IGF0a190ZXh0X2dldF9zdHJpbmdf
YXRfb2Zmc2V0KEFUS19URVhUKHBhcmFncmFwaCksIDAsIEFUS19URVhUX0dSQU5VTEFSSVRZX0xJ
TkUsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgZ19hc3NlcnQodGV4dCk7CisgICAg
Z19hc3NlcnRfY21wc3RyKHRleHQsID09LCAiZm9vIGJhciBiYXoiKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoc3RhcnRPZmZzZXQsID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0
LCA9PSwgMTEpOworICAgIGdfZnJlZSh0ZXh0KTsKKyNlbmRpZgorCisgICAgZ19vYmplY3RfdW5y
ZWYocGFyYWdyYXBoKTsKKworICAgIC8qIFNlY29uZCBwYXJhZ3JhcGggKGxpbmsgaW4gdGhlIG1p
ZGRsZSkuICovCisgICAgcGFyYWdyYXBoID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGls
ZChvYmplY3QsIDEpOworICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHBhcmFncmFwaCkpOworCisj
aWYgIUFUS19DSEVDS19WRVJTSU9OKDIsIDEwLCAwKQorICAgIHRleHQgPSBhdGtfdGV4dF9nZXRf
dGV4dF9hdF9vZmZzZXQoQVRLX1RFWFQocGFyYWdyYXBoKSwgMCwgQVRLX1RFWFRfQk9VTkRBUllf
TElORV9TVEFSVCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAgICBnX2Fzc2VydCh0ZXh0
KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGV4dCwgPT0sICJmb28gYmFyIGJheiIpOworICAgIGdf
YXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDApOworICAgIGdfYXNzZXJ0X2NtcGludChl
bmRPZmZzZXQsID09LCAxMSk7CisgICAgZ19mcmVlKHRleHQpOworI2Vsc2UKKyAgICB0ZXh0ID0g
YXRrX3RleHRfZ2V0X3N0cmluZ19hdF9vZmZzZXQoQVRLX1RFWFQocGFyYWdyYXBoKSwgMCwgQVRL
X1RFWFRfR1JBTlVMQVJJVFlfTElORSwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAgICBn
X2Fzc2VydCh0ZXh0KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGV4dCwgPT0sICJmb28gYmFyIGJh
eiIpOworICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDApOworICAgIGdfYXNz
ZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCAxMSk7CisgICAgZ19mcmVlKHRleHQpOworI2VuZGlm
CisKKyAgICBnX29iamVjdF91bnJlZihwYXJhZ3JhcGgpOworCisgICAgLyogVGhpcmQgcGFyYWdy
YXBoIChsaW5rIGF0IHRoZSBlbmQpLiAqLworICAgIHBhcmFncmFwaCA9IGF0a19vYmplY3RfcmVm
X2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAyKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChw
YXJhZ3JhcGgpKTsKKworI2lmICFBVEtfQ0hFQ0tfVkVSU0lPTigyLCAxMCwgMCkKKyAgICB0ZXh0
ID0gYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0KEFUS19URVhUKHBhcmFncmFwaCksIDAsIEFU
S19URVhUX0JPVU5EQVJZX0xJTkVfU1RBUlQsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7Cisg
ICAgZ19hc3NlcnQodGV4dCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09LCAiZm9vIGJh
ciBiYXoiKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAwKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMTEpOworICAgIGdfZnJlZSh0ZXh0KTsKKyNl
bHNlCisgICAgdGV4dCA9IGF0a190ZXh0X2dldF9zdHJpbmdfYXRfb2Zmc2V0KEFUS19URVhUKHBh
cmFncmFwaCksIDAsIEFUS19URVhUX0dSQU5VTEFSSVRZX0xJTkUsICZzdGFydE9mZnNldCwgJmVu
ZE9mZnNldCk7CisgICAgZ19hc3NlcnQodGV4dCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHQs
ID09LCAiZm9vIGJhciBiYXoiKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09
LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMTEpOworICAgIGdfZnJl
ZSh0ZXh0KTsKKyNlbmRpZgorCisgICAgZ19vYmplY3RfdW5yZWYocGFyYWdyYXBoKTsKKyAgICBn
X29iamVjdF91bnJlZih3ZWJWaWV3KTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0h5
cGVydGV4dEFuZEh5cGVybGlua3MoKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBX
RUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBnX29iamVjdF9yZWZf
c2luayh3ZWJWaWV3KTsKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDgw
MCwgNjAwIH07CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQod2ViVmll
dyksICZhbGxvY2F0aW9uKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmll
dywgaHlwZXJ0ZXh0QW5kSHlwZXJsaW5rcywgMCwgMCwgMCk7CisKKyAgICBBdGtPYmplY3QqIG9i
amVjdCA9IGdldFdlYkFyZWFPYmplY3Qod2ViVmlldyk7CisgICAgZ19hc3NlcnQob2JqZWN0KTsK
KworICAgIEF0a09iamVjdCogcGFyYWdyYXBoMSA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVf
Y2hpbGQob2JqZWN0LCAwKTsKKyAgICBnX2Fzc2VydChBVEtfT0JKRUNUKHBhcmFncmFwaDEpKTsK
KyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKHBhcmFncmFwaDEpID09IEFUS19ST0xF
X1BBUkFHUkFQSCk7CisgICAgZ19hc3NlcnQoQVRLX0lTX0hZUEVSVEVYVChwYXJhZ3JhcGgxKSk7
CisKKyAgICAvKiBObyBsaW5rcyBpbiB0aGUgZmlyc3QgcGFyYWdyYXBoLiAqLworICAgIGdpbnQg
bkxpbmtzID0gYXRrX2h5cGVydGV4dF9nZXRfbl9saW5rcyhBVEtfSFlQRVJURVhUKHBhcmFncmFw
aDEpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQobkxpbmtzLCA9PSwgMCk7CisKKyAgICBBdGtPYmpl
Y3QqIHBhcmFncmFwaDIgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwg
MSk7CisgICAgZ19hc3NlcnQoQVRLX09CSkVDVChwYXJhZ3JhcGgyKSk7CisgICAgZ19hc3NlcnQo
YXRrX29iamVjdF9nZXRfcm9sZShwYXJhZ3JhcGgyKSA9PSBBVEtfUk9MRV9QQVJBR1JBUEgpOwor
ICAgIGdfYXNzZXJ0KEFUS19JU19IWVBFUlRFWFQocGFyYWdyYXBoMikpOworCisgICAgLyogQ2hl
Y2sgbGlua3MgaW4gdGhlIHNlY29uZCBwYXJhZ3JhcGguCisgICAgICAgbkxpbmtzID0gYXRrX2h5
cGVydGV4dF9nZXRfbl9saW5rcyhBVEtfSFlQRVJURVhUKHBhcmFncmFwaDIpKTsKKyAgICAgICBn
X2Fzc2VydF9jbXBpbnQobkxpbmtzLCA9PSwgMyk7ICovCisKKyAgICBBdGtIeXBlcmxpbmsqIGhM
aW5rMSA9IGF0a19oeXBlcnRleHRfZ2V0X2xpbmsoQVRLX0hZUEVSVEVYVChwYXJhZ3JhcGgyKSwg
MCk7CisgICAgZ19hc3NlcnQoQVRLX0hZUEVSTElOSyhoTGluazEpKTsKKyAgICBBdGtPYmplY3Qq
IGhMaW5rT2JqZWN0MSA9IGF0a19oeXBlcmxpbmtfZ2V0X29iamVjdChoTGluazEsIDApOworICAg
IGdfYXNzZXJ0KEFUS19PQkpFQ1QoaExpbmtPYmplY3QxKSk7CisgICAgZ19hc3NlcnQoYXRrX29i
amVjdF9nZXRfcm9sZShoTGlua09iamVjdDEpID09IEFUS19ST0xFX0xJTkspOworICAgIGdfYXNz
ZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9zdGFydF9pbmRleChoTGluazEpLCA9PSwgMCk7
CisgICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0X2VuZF9pbmRleChoTGluazEp
LCA9PSwgNik7CisgICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0X25fYW5jaG9y
cyhoTGluazEpLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGF0a19oeXBlcmxpbmtfZ2V0
X3VyaShoTGluazEsIDApLCA9PSwgImh0dHA6Ly9mb28uYmFyLmJhei8iKTsKKworICAgIEF0a0h5
cGVybGluayogaExpbmsyID0gYXRrX2h5cGVydGV4dF9nZXRfbGluayhBVEtfSFlQRVJURVhUKHBh
cmFncmFwaDIpLCAxKTsKKyAgICBnX2Fzc2VydChBVEtfSFlQRVJMSU5LKGhMaW5rMikpOworICAg
IEF0a09iamVjdCogaExpbmtPYmplY3QyID0gYXRrX2h5cGVybGlua19nZXRfb2JqZWN0KGhMaW5r
MiwgMCk7CisgICAgZ19hc3NlcnQoQVRLX09CSkVDVChoTGlua09iamVjdDIpKTsKKyAgICBnX2Fz
c2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGhMaW5rT2JqZWN0MikgPT0gQVRLX1JPTEVfTElOSyk7
CisgICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0X3N0YXJ0X2luZGV4KGhMaW5r
MiksID09LCAxMik7CisgICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0X2VuZF9p
bmRleChoTGluazIpLCA9PSwgMzIpOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5r
X2dldF9uX2FuY2hvcnMoaExpbmsyKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcHN0cihhdGtf
aHlwZXJsaW5rX2dldF91cmkoaExpbmsyLCAwKSwgPT0sICJodHRwOi8vYmFyLmJhei5mb28vIik7
CisKKyAgICBBdGtIeXBlcmxpbmsqIGhMaW5rMyA9IGF0a19oeXBlcnRleHRfZ2V0X2xpbmsoQVRL
X0hZUEVSVEVYVChwYXJhZ3JhcGgyKSwgMik7CisgICAgZ19hc3NlcnQoQVRLX0hZUEVSTElOSyho
TGluazMpKTsKKyAgICBBdGtPYmplY3QqIGhMaW5rT2JqZWN0MyA9IGF0a19oeXBlcmxpbmtfZ2V0
X29iamVjdChoTGluazMsIDApOworICAgIGdfYXNzZXJ0KEFUS19PQkpFQ1QoaExpbmtPYmplY3Qz
KSk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShoTGlua09iamVjdDMpID09IEFU
S19ST0xFX0xJTkspOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9zdGFy
dF9pbmRleChoTGluazMpLCA9PSwgNjUpOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJs
aW5rX2dldF9lbmRfaW5kZXgoaExpbmszKSwgPT0sIDc1KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
YXRrX2h5cGVybGlua19nZXRfbl9hbmNob3JzKGhMaW5rMyksID09LCAxKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIoYXRrX2h5cGVybGlua19nZXRfdXJpKGhMaW5rMywgMCksID09LCAiaHR0cDovL2Jh
ei5mb28uYmFyLyIpOworCisgICAgQXRrT2JqZWN0KiBsaXN0ID0gYXRrX29iamVjdF9yZWZfYWNj
ZXNzaWJsZV9jaGlsZChvYmplY3QsIDIpOworICAgIGdfYXNzZXJ0KEFUS19PQkpFQ1QobGlzdCkp
OworICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUobGlzdCkgPT0gQVRLX1JPTEVfTElT
VCk7CisgICAgZ19hc3NlcnRfY21waW50KGF0a19vYmplY3RfZ2V0X25fYWNjZXNzaWJsZV9jaGls
ZHJlbihsaXN0KSwgPT0sIDEpOworCisgICAgQXRrT2JqZWN0KiBsaXN0SXRlbSA9IGF0a19vYmpl
Y3RfcmVmX2FjY2Vzc2libGVfY2hpbGQobGlzdCwgMCk7CisgICAgZ19hc3NlcnQoQVRLX0lTX1RF
WFQobGlzdEl0ZW0pKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfSFlQRVJURVhUKGxpc3RJdGVtKSk7
CisKKyAgICBBdGtIeXBlcmxpbmsqIGhMaW5rSW5MaXN0SXRlbSA9IGF0a19oeXBlcnRleHRfZ2V0
X2xpbmsoQVRLX0hZUEVSVEVYVChsaXN0SXRlbSksIDApOworICAgIGdfYXNzZXJ0KEFUS19IWVBF
UkxJTksoaExpbmtJbkxpc3RJdGVtKSk7CisgICAgQXRrT2JqZWN0KiBoTGlua09iamVjdCA9IGF0
a19oeXBlcmxpbmtfZ2V0X29iamVjdChoTGlua0luTGlzdEl0ZW0sIDApOworICAgIGdfYXNzZXJ0
KEFUS19PQkpFQ1QoaExpbmtPYmplY3QpKTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9y
b2xlKGhMaW5rT2JqZWN0KSA9PSBBVEtfUk9MRV9MSU5LKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
YXRrX2h5cGVybGlua19nZXRfc3RhcnRfaW5kZXgoaExpbmtJbkxpc3RJdGVtKSwgPT0sIDIwKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfZW5kX2luZGV4KGhMaW5rSW5M
aXN0SXRlbSksID09LCA0Myk7CisgICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0
X25fYW5jaG9ycyhoTGlua0luTGlzdEl0ZW0pLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21wc3Ry
KGF0a19oeXBlcmxpbmtfZ2V0X3VyaShoTGlua0luTGlzdEl0ZW0sIDApLCA9PSwgImh0dHA6Ly9m
b28uYmFyLmJhei8iKTsKKworICAgIC8qIEZpbmFsbHkgY2hlY2sgdGhlIEF0a0FjdGlvbiBpbnRl
cmZhY2UgZm9yIGEgZ2l2ZW4gQXRrSHlwZXJsaW5rLiAqLworICAgIGdfYXNzZXJ0KEFUS19JU19B
Q1RJT04oaExpbmsxKSk7CisgICAgZ19hc3NlcnRfY21waW50KGF0a19hY3Rpb25fZ2V0X25fYWN0
aW9ucyhBVEtfQUNUSU9OKGhMaW5rMSkpLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGF0
a19hY3Rpb25fZ2V0X2tleWJpbmRpbmcoQVRLX0FDVElPTihoTGluazEpLCAwKSwgPT0sICIiKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIoYXRrX2FjdGlvbl9nZXRfbmFtZShBVEtfQUNUSU9OKGhMaW5r
MSksIDApLCA9PSwgImp1bXAiKTsKKyAgICBnX2Fzc2VydChhdGtfYWN0aW9uX2RvX2FjdGlvbihB
VEtfQUNUSU9OKGhMaW5rMSksIDApKTsKKworICAgIGdfb2JqZWN0X3VucmVmKHBhcmFncmFwaDEp
OworICAgIGdfb2JqZWN0X3VucmVmKHBhcmFncmFwaDIpOworICAgIGdfb2JqZWN0X3VucmVmKGxp
c3QpOworICAgIGdfb2JqZWN0X3VucmVmKGxpc3RJdGVtKTsKKyAgICBnX29iamVjdF91bnJlZih3
ZWJWaWV3KTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0xpc3RzT2ZJdGVtcygpCit7
CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2Vi
X3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOworICAgIEd0a0Fs
bG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgODAwLCA2MDAgfTsKKyAgICBndGtfd2lkZ2V0
X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOworICAgIHdl
YmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LCBsaXN0c09mSXRlbXMsIDAsIDAsIDAp
OworCisgICAgQXRrT2JqZWN0KiBvYmplY3QgPSBnZXRXZWJBcmVhT2JqZWN0KHdlYlZpZXcpOwor
ICAgIGdfYXNzZXJ0KG9iamVjdCk7CisKKyAgICAvKiBVbm9yZGVyZWQgbGlzdC4gKi8KKworICAg
IEF0a09iamVjdCogdUxpc3QgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVj
dCwgMCk7CisgICAgZ19hc3NlcnQoQVRLX09CSkVDVCh1TGlzdCkpOworICAgIGdfYXNzZXJ0KGF0
a19vYmplY3RfZ2V0X3JvbGUodUxpc3QpID09IEFUS19ST0xFX0xJU1QpOworICAgIGdfYXNzZXJ0
X2NtcGludChhdGtfb2JqZWN0X2dldF9uX2FjY2Vzc2libGVfY2hpbGRyZW4odUxpc3QpLCA9PSwg
Myk7CisKKyAgICBBdGtPYmplY3QqIGl0ZW0xID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9j
aGlsZCh1TGlzdCwgMCk7CisgICAgQXRrT2JqZWN0KiBpdGVtMiA9IGF0a19vYmplY3RfcmVmX2Fj
Y2Vzc2libGVfY2hpbGQodUxpc3QsIDEpOworICAgIEF0a09iamVjdCogaXRlbTMgPSBhdGtfb2Jq
ZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKHVMaXN0LCAyKTsKKworICAgIGdfYXNzZXJ0X2NtcGlu
dChhdGtfb2JqZWN0X2dldF9uX2FjY2Vzc2libGVfY2hpbGRyZW4oaXRlbTEpLCA9PSwgMCk7Cisg
ICAgZ19hc3NlcnRfY21waW50KGF0a19vYmplY3RfZ2V0X25fYWNjZXNzaWJsZV9jaGlsZHJlbihp
dGVtMiksID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX29iamVjdF9nZXRfbl9hY2Nl
c3NpYmxlX2NoaWxkcmVuKGl0ZW0zKSwgPT0sIDEpOworCisgICAgZ19vYmplY3RfdW5yZWYoaXRl
bTEpOworICAgIGdfb2JqZWN0X3VucmVmKGl0ZW0yKTsKKyAgICBnX29iamVjdF91bnJlZihpdGVt
Myk7CisKKyAgICAvKiBPcmRlcmVkIGxpc3QuICovCisKKyAgICBBdGtPYmplY3QqIG9MaXN0ID0g
YXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDEpOworICAgIGdfYXNzZXJ0
KEFUS19PQkpFQ1Qob0xpc3QpKTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKG9M
aXN0KSA9PSBBVEtfUk9MRV9MSVNUKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX29iamVjdF9n
ZXRfbl9hY2Nlc3NpYmxlX2NoaWxkcmVuKG9MaXN0KSwgPT0sIDMpOworCisgICAgaXRlbTEgPSBh
dGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9MaXN0LCAwKTsKKyAgICBpdGVtMiA9IGF0
a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob0xpc3QsIDEpOworICAgIGl0ZW0zID0gYXRr
X29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvTGlzdCwgMik7CisKKyAgICBnX2Fzc2VydF9j
bXBpbnQoYXRrX29iamVjdF9nZXRfbl9hY2Nlc3NpYmxlX2NoaWxkcmVuKGl0ZW0xKSwgPT0sIDAp
OworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfb2JqZWN0X2dldF9uX2FjY2Vzc2libGVfY2hpbGRy
ZW4oaXRlbTIpLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21waW50KGF0a19vYmplY3RfZ2V0X25f
YWNjZXNzaWJsZV9jaGlsZHJlbihpdGVtMyksID09LCAxKTsKKworICAgIGdfb2JqZWN0X3VucmVm
KGl0ZW0xKTsKKyAgICBnX29iamVjdF91bnJlZihpdGVtMik7CisgICAgZ19vYmplY3RfdW5yZWYo
aXRlbTMpOworCisgICAgZ19vYmplY3RfdW5yZWYodUxpc3QpOworICAgIGdfb2JqZWN0X3VucmVm
KG9MaXN0KTsKKyAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKK30KKwordHlwZWRlZiBlbnVt
IHsKKyAgVEVYVF9DSEFOR0VfSU5TRVJUID0gMSwKKyAgVEVYVF9DSEFOR0VfUkVNT1ZFID0gMgor
fSBUZXh0Q2hhbmdlVHlwZTsKKworc3RhdGljIGdjaGFyKiB0ZXh0Q2hhbmdlZFJlc3VsdCA9IDA7
CisKK3N0YXRpYyB2b2lkIHRleHRDaGFuZ2VkQ2IoQXRrVGV4dCogdGV4dCwgZ2ludCBwb3MsIGdp
bnQgbGVuLCBnY2hhciogbW9kaWZpZWRUZXh0LCBncG9pbnRlciBkYXRhKQoreworICAgIGdfYXNz
ZXJ0KHRleHQgJiYgQVRLX0lTX09CSkVDVCh0ZXh0KSk7CisKKyAgICBUZXh0Q2hhbmdlVHlwZSB0
eXBlID0gR1BPSU5URVJfVE9fSU5UKGRhdGEpOworICAgIGdfZnJlZSh0ZXh0Q2hhbmdlZFJlc3Vs
dCk7CisgICAgdGV4dENoYW5nZWRSZXN1bHQgPSBnX3N0cmR1cF9wcmludGYoInwlZHwlZHwlZHwn
JXMnfCIsIHR5cGUsIHBvcywgbGVuLCBtb2RpZmllZFRleHQpOworfQorCitzdGF0aWMgdm9pZCB0
ZXN0V2Via2l0QXRrVGV4dENoYW5nZWROb3RpZmljYXRpb25zKCkKK3sKKyAgICBXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Cisg
ICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0
aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9OworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShH
VEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7CisgICAgd2Via2l0X3dlYl92aWV3X2xv
YWRfc3RyaW5nKHdlYlZpZXcsIGZvcm1XaXRoVGV4dElucHV0cywgMCwgMCwgMCk7CisKKyAgICBB
dGtPYmplY3QqIG9iamVjdCA9IGdldFdlYkFyZWFPYmplY3Qod2ViVmlldyk7CisgICAgZ19hc3Nl
cnQob2JqZWN0KTsKKworICAgIEF0a09iamVjdCogZm9ybSA9IGF0a19vYmplY3RfcmVmX2FjY2Vz
c2libGVfY2hpbGQob2JqZWN0LCAwKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfT0JKRUNUKGZvcm0p
KTsKKworICAgIC8qIEZpcnN0IGNoZWNrIG5vcm1hbCB0ZXh0IGVudHJpZXMuICovCisgICAgQXRr
T2JqZWN0KiB0ZXh0RW50cnkgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZvcm0s
IDApOworICAgIGdfYXNzZXJ0KEFUS19JU19FRElUQUJMRV9URVhUKHRleHRFbnRyeSkpOworICAg
IGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoQVRLX09CSkVDVCh0ZXh0RW50cnkpKSA9PSBB
VEtfUk9MRV9FTlRSWSk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHRleHRFbnRyeSwgInRleHQt
aW5zZXJ0IiwKKyAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sodGV4dENoYW5nZWRDYiks
CisgICAgICAgICAgICAgICAgICAgICBHSU5UX1RPX1BPSU5URVIoVEVYVF9DSEFOR0VfSU5TRVJU
KSk7CisgICAgZ19zaWduYWxfY29ubmVjdCh0ZXh0RW50cnksICJ0ZXh0LXJlbW92ZSIsCisgICAg
ICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKHRleHRDaGFuZ2VkQ2IpLAorICAgICAgICAgICAg
ICAgICAgICAgR0lOVF9UT19QT0lOVEVSKFRFWFRfQ0hBTkdFX1JFTU9WRSkpOworCisgICAgZ2lu
dCBwb3MgPSAwOworICAgIGF0a19lZGl0YWJsZV90ZXh0X2luc2VydF90ZXh0KEFUS19FRElUQUJM
RV9URVhUKHRleHRFbnRyeSksICJmb28gYmFyIGJheiIsIDExLCAmcG9zKTsKKyAgICBjaGFyKiB0
ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHQoQVRLX1RFWFQodGV4dEVudHJ5KSwgMCwgLTEpOworICAg
IGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwgImZvbyBiYXIgYmF6Iik7CisgICAgZ19hc3NlcnRf
Y21wc3RyKHRleHRDaGFuZ2VkUmVzdWx0LCA9PSwgInwxfDB8MTF8J2ZvbyBiYXIgYmF6J3wiKTsK
KyAgICBnX2ZyZWUodGV4dCk7CisKKyAgICBhdGtfZWRpdGFibGVfdGV4dF9kZWxldGVfdGV4dChB
VEtfRURJVEFCTEVfVEVYVCh0ZXh0RW50cnkpLCA0LCA3KTsKKyAgICB0ZXh0ID0gYXRrX3RleHRf
Z2V0X3RleHQoQVRLX1RFWFQodGV4dEVudHJ5KSwgMCwgLTEpOworICAgIGdfYXNzZXJ0X2NtcHN0
cih0ZXh0LCA9PSwgImZvbyAgYmF6Iik7CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHRDaGFuZ2Vk
UmVzdWx0LCA9PSwgInwyfDR8M3wnYmFyJ3wiKTsKKyAgICBnX2ZyZWUodGV4dCk7CisKKyAgICBw
b3MgPSA0OworICAgIGF0a19lZGl0YWJsZV90ZXh0X2luc2VydF90ZXh0KEFUS19FRElUQUJMRV9U
RVhUKHRleHRFbnRyeSksICJxdXggcXV1eCB0b2JlaWdub3JlZCIsIDgsICZwb3MpOworICAgIHRl
eHQgPSBhdGtfdGV4dF9nZXRfdGV4dChBVEtfVEVYVCh0ZXh0RW50cnkpLCAwLCAtMSk7CisgICAg
Z19hc3NlcnRfY21wc3RyKHRleHQsID09LCAiZm9vIHF1eCBxdXV4IGJheiIpOworICAgIGdfYXNz
ZXJ0X2NtcHN0cih0ZXh0Q2hhbmdlZFJlc3VsdCwgPT0sICJ8MXw0fDh8J3F1eCBxdXV4J3wiKTsK
KyAgICBnX2ZyZWUodGV4dCk7CisKKyAgICAvKiBOb3cgY2hlY2sgZm9yIHBhc3N3b3JkIGVudHJp
ZXMuICovCisgICAgQXRrT2JqZWN0KiBwYXNzd29yZEVudHJ5ID0gYXRrX29iamVjdF9yZWZfYWNj
ZXNzaWJsZV9jaGlsZChmb3JtLCAxKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfRURJVEFCTEVfVEVY
VChwYXNzd29yZEVudHJ5KSk7CisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShBVEtf
T0JKRUNUKHBhc3N3b3JkRW50cnkpKSA9PSBBVEtfUk9MRV9QQVNTV09SRF9URVhUKTsKKworICAg
IGdfc2lnbmFsX2Nvbm5lY3QocGFzc3dvcmRFbnRyeSwgInRleHQtaW5zZXJ0IiwKKyAgICAgICAg
ICAgICAgICAgICAgIEdfQ0FMTEJBQ0sodGV4dENoYW5nZWRDYiksCisgICAgICAgICAgICAgICAg
ICAgICBHSU5UX1RPX1BPSU5URVIoVEVYVF9DSEFOR0VfSU5TRVJUKSk7CisgICAgZ19zaWduYWxf
Y29ubmVjdChwYXNzd29yZEVudHJ5LCAidGV4dC1yZW1vdmUiLAorICAgICAgICAgICAgICAgICAg
ICAgR19DQUxMQkFDSyh0ZXh0Q2hhbmdlZENiKSwKKyAgICAgICAgICAgICAgICAgICAgIEdJTlRf
VE9fUE9JTlRFUihURVhUX0NIQU5HRV9SRU1PVkUpKTsKKworICAgIHBvcyA9IDA7CisgICAgLyog
QSBzaW5nbGUgYnVsbGV0IGNoYXJhY3RlciBpcyAnXDM0MlwyMDBcMjQyJyAqLworICAgIGF0a19l
ZGl0YWJsZV90ZXh0X2luc2VydF90ZXh0KEFUS19FRElUQUJMRV9URVhUKHBhc3N3b3JkRW50cnkp
LCAiZm9vYmFyIiwgNiwgJnBvcyk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHRDaGFuZ2VkUmVz
dWx0LCA9PSwgInwxfDB8NnwnXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0
MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyJ3wiKTsKKyAgICB0ZXh0ID0gYXRrX3Rl
eHRfZ2V0X3RleHQoQVRLX1RFWFQocGFzc3dvcmRFbnRyeSksIDAsIC0xKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIodGV4dCwgPT0sICJcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDJc
MzQyXDIwMFwyNDJcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDIiKTsKKyAgICBnX2ZyZWUodGV4dCk7
CisKKyAgICBhdGtfZWRpdGFibGVfdGV4dF9kZWxldGVfdGV4dChBVEtfRURJVEFCTEVfVEVYVChw
YXNzd29yZEVudHJ5KSwgMiwgNCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHRDaGFuZ2VkUmVz
dWx0LCA9PSwgInwyfDJ8MnwnXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyJ3wiKTsKKworICAgIHRl
eHQgPSBhdGtfdGV4dF9nZXRfdGV4dChBVEtfVEVYVChwYXNzd29yZEVudHJ5KSwgMCwgLTEpOwor
ICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwgIlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0Mlwz
NDJcMjAwXDI0MlwzNDJcMjAwXDI0MiIpOworICAgIGdfZnJlZSh0ZXh0KTsKKworICAgIHBvcyA9
IDM7CisgICAgYXRrX2VkaXRhYmxlX3RleHRfaW5zZXJ0X3RleHQoQVRLX0VESVRBQkxFX1RFWFQo
cGFzc3dvcmRFbnRyeSksICJxdXggdG9iZWlnbm9yZWQiLCAzLCAmcG9zKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIodGV4dENoYW5nZWRSZXN1bHQsID09LCAifDF8M3wzfCdcMzQyXDIwMFwyNDJcMzQy
XDIwMFwyNDJcMzQyXDIwMFwyNDInfCIpOworCisgICAgdGV4dCA9IGF0a190ZXh0X2dldF90ZXh0
KEFUS19URVhUKHBhc3N3b3JkRW50cnkpLCAwLCAtMSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRl
eHQsID09LCAiXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQy
XDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyIik7CisgICAgZ19mcmVlKHRleHQp
OworCisgICAgZ19mcmVlKHRleHRDaGFuZ2VkUmVzdWx0KTsKKworICAgIGdfb2JqZWN0X3VucmVm
KGZvcm0pOworICAgIGdfb2JqZWN0X3VucmVmKHRleHRFbnRyeSk7CisgICAgZ19vYmplY3RfdW5y
ZWYocGFzc3dvcmRFbnRyeSk7CisgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Cit9CisKK3N0
YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtQYXJlbnRGb3JSb290T2JqZWN0KCkKK3sKKyAgICBXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXco
KSk7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9Owor
ICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2Nh
dGlvbik7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIGNvbnRlbnRz
LCAwLCAwLCAwKTsKKworICAgIC8qIFdlIG5lZWQgYSBwYXJlbnQgY29udGFpbmVyIHdpZGdldCBm
b3IgdGhlIHdlYnZpZXcuICovCisgICAgR3RrV2lkZ2V0KiBwYXJlbnRDb250YWluZXIgPSBndGtf
d2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKKyAgICBnX29iamVjdF9yZWZfc2luayhw
YXJlbnRDb250YWluZXIpOworICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIocGFy
ZW50Q29udGFpbmVyKSwgR1RLX1dJREdFVCh3ZWJWaWV3KSk7CisKKyAgICBBdGtPYmplY3QqIGF4
UGFyZW50ID0gZ3RrX3dpZGdldF9nZXRfYWNjZXNzaWJsZShwYXJlbnRDb250YWluZXIpOworICAg
IGdfYXNzZXJ0KEFUS19JU19PQkpFQ1QoYXhQYXJlbnQpKTsKKworICAgIEF0a09iamVjdCogYXhS
b290ID0gZ3RrX3dpZGdldF9nZXRfYWNjZXNzaWJsZShHVEtfV0lER0VUKHdlYlZpZXcpKTsKKyAg
ICBnX2Fzc2VydChBVEtfSVNfT0JKRUNUKGF4Um9vdCkpOworCisgICAgLyogVGhlIGNoaWxkIGZv
ciB0aGUgcGFyZW50IGNvbnRhaW5lcidzIGFjY2Vzc2liaWxpdHkgb2JqZWN0CisgICAgICAgc2hv
dWxkIGJlIHRoZSBhY2Nlc3NpYmlsaXR5IG9iamVjdCBmb3IgdGhlIFdlYlZpZXcncyByb290LiAq
LworICAgIEF0a09iamVjdCogYXhQYXJlbnRDaGlsZCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2li
bGVfY2hpbGQoYXhQYXJlbnQsIDApOworICAgIGdfYXNzZXJ0KGF4UGFyZW50Q2hpbGQgPT0gYXhS
b290KTsKKworICAgIC8qIEJvdHRvbS11cCBuYXZpZ2F0aW9uIHNob3VsZCBtYXRjaCB0b3AtZG93
biBvbmUuICovCisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcGFyZW50KGF4UGFyZW50Q2hp
bGQpID09IGF4UGFyZW50KTsKKworICAgIGdfb2JqZWN0X3VucmVmKGF4UGFyZW50Q2hpbGQpOwor
ICAgIGdfb2JqZWN0X3VucmVmKHBhcmVudENvbnRhaW5lcik7Cit9CisKK3N0YXRpYyB2b2lkIHRl
c3RXZWJraXRBdGtTZXRQYXJlbnRGb3JPYmplY3QoKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBHdGtB
bGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDgwMCwgNjAwIH07CisgICAgZ3RrX3dpZGdl
dF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQod2ViVmlldyksICZhbGxvY2F0aW9uKTsKKyAgICB3
ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgY29udGVudHMsIDAsIDAsIDApOwor
CisgICAgLyogUHV0IHRoZSB3ZWJ2aWV3IGluIGEgcGFyZW50IGNvbnRhaW5lciB3aWRnZXQgdG8g
Y2hlY2sgdGhhdCB0aGUKKyAgICAgICBub3JtYWwgYmVoYXZpb3VyIGtlZXBzIHdvcmtpbmcgYXMg
ZXhwZWN0ZWQgYnkgZGVmYXVsdC4gKi8KKyAgICBHdGtXaWRnZXQqIHBhcmVudENvbnRhaW5lciA9
IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOworICAgIGdfb2JqZWN0X3JlZl9z
aW5rKHBhcmVudENvbnRhaW5lcik7CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5F
UihwYXJlbnRDb250YWluZXIpLCBHVEtfV0lER0VUKHdlYlZpZXcpKTsKKworICAgIEF0a09iamVj
dCogYXhSb290ID0gZ3RrX3dpZGdldF9nZXRfYWNjZXNzaWJsZShHVEtfV0lER0VUKHdlYlZpZXcp
KTsKKyAgICBnX2Fzc2VydChBVEtfSVNfT0JKRUNUKGF4Um9vdCkpOworCisgICAgQXRrT2JqZWN0
KiBheFBhcmVudCA9IGd0a193aWRnZXRfZ2V0X2FjY2Vzc2libGUocGFyZW50Q29udGFpbmVyKTsK
KyAgICBnX2Fzc2VydChBVEtfSVNfT0JKRUNUKGF4UGFyZW50KSk7CisKKyAgICAvKiBUaGUgcGFy
ZW50IG9mIHRoZSByb290IG9iamVjdCBpcyB0aGUgcGFyZW50IGNvbnRhaW5lcidzIGExMXkgb2Jq
ZWN0LiAqLworICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3BhcmVudChheFJvb3QpID09IGF4
UGFyZW50KTsKKworICAgIC8qIFdlIG5vdyBuZWVkIHRvIHVzZSBzb21ldGhpbmcgYXMgYSBhbiBh
bHRlcm5hdGl2ZSBwYXJlbnQgZm9yCisgICAgICAgdGhlIGExMXkgb2JqZWN0IGFzc29jaWF0ZWQg
d2l0aCB0aGUgcm9vdCBvZiB0aGUgRE9NIHRyZWUuICovCisgICAgR3RrV2lkZ2V0KiBhbHRlcm5h
dGl2ZVBhcmVudCA9IGd0a19idXR0b25fbmV3KCk7CisgICAgZ19vYmplY3RfcmVmX3NpbmsoYWx0
ZXJuYXRpdmVQYXJlbnQpOworCisgICAgQXRrT2JqZWN0KiBheEFsdGVybmF0aXZlUGFyZW50ID0g
Z3RrX3dpZGdldF9nZXRfYWNjZXNzaWJsZShhbHRlcm5hdGl2ZVBhcmVudCk7CisgICAgZ19hc3Nl
cnQoQVRLX0lTX09CSkVDVChheEFsdGVybmF0aXZlUGFyZW50KSk7CisKKyAgICAvKiBNYW51YWxs
eSBzZXQgdGhlIGFsdGVybmF0aXZlIHBhcmVudCdzIGFjY2Vzc2liaWxpdHkgb2JqZWN0IGFzCisg
ICAgICAgdGhlIHBhcmVudCBmb3IgdGhlIFdlYktpdCBhY2Nlc3NpYmlsaXR5IHJvb3Qgb2JqZWN0
IGFuZCBjaGVjay4gKi8KKyAgICBhdGtfb2JqZWN0X3NldF9wYXJlbnQoYXhSb290LCBheEFsdGVy
bmF0aXZlUGFyZW50KTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9wYXJlbnQoYXhSb290
KSA9PSBheEFsdGVybmF0aXZlUGFyZW50KTsKKworICAgIGdfb2JqZWN0X3VucmVmKGFsdGVybmF0
aXZlUGFyZW50KTsKKyAgICBnX29iamVjdF91bnJlZihwYXJlbnRDb250YWluZXIpOworfQorCisj
aWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKK3N0YXRpYyB2b2lkIGluaXRpYWxpemVUZXN0aW5nRnJh
bWV3b3JrKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICAvKiBFbnN1cmUgR0FJTCBpcyB0
aGUgb25seSBtb2R1bGUgbG9hZGVkLiAqLworICAgIGdfc2V0ZW52KCJHVEtfTU9EVUxFUyIsICJn
YWlsIiwgVFJVRSk7CisKKyAgICAvKiBGb2xsb3dpbmcgbGluZXMgd2VyZSB0YWtlbiBmcm9tIGd0
a190ZXN0X2luaXQoKS4gKi8KKyAgICBnX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIDApOworICAg
IGd0a19kaXNhYmxlX3NldGxvY2FsZSgpOworICAgIHNldGxvY2FsZShMQ19BTEwsICJDIik7CisK
KyAgICBndGtfaW5pdCgmYXJnYywgJmFyZ3YpOworfQorI2VuZGlmCisKK2ludCBtYWluKGludCBh
cmdjLCBjaGFyKiogYXJndikKK3sKKyNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorICAgIC8qIFdl
IGNhbid0IGp1c3QgY2FsbCB0byBndGtfdGVzdF9pbml0KCkgaW4gdGhpcyBjYXNlIGJlY2F1c2Ug
aXRzCisgICAgICAgaW1wbGVtZW50YXRpb24gbWFrZXMgc3VyZSB0aGF0IG5vIEdUSysgbW9kdWxl
IHdpbGwgYmUgbG9hZGVkLCBhbmQKKyAgICAgICB3ZSB3aWxsIG5lZWQgdG8gbG9hZCBHQUlMIGZv
ciB0ZXN0cyB0aGF0IG5lZWQgdG8gdXNlIEF0a09iamVjdHMKKyAgICAgICBmcm9tIG5vbi1XZWJL
aXQgR3RrV2lkZ2V0cyAoZS5nIHBhcmVudEZvclJvb3RPYmplY3QpLiovCisgICAgaW5pdGlhbGl6
ZVRlc3RpbmdGcmFtZXdvcmsoYXJnYywgYXJndik7CisjZWxzZQorICAgIGd0a190ZXN0X2luaXQo
JmFyZ2MsICZhcmd2LCBOVUxMKTsKKyNlbmRpZgorCisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRr
L2NhcmV0T2Zmc2V0cyIsIHRlc3RXZWJraXRBdGtDYXJldE9mZnNldHMpOworICAgIGdfdGVzdF9h
ZGRfZnVuYygiL3dlYmtpdC9hdGsvY2FyZXRPZmZzZXRzQW5kRXh0cmFub3VzV2hpdGVTcGFjZXMi
LCB0ZXN0V2Via2l0QXRrQ2FyZXRPZmZzZXRzQW5kRXh0cmFub3VzV2hpdGVTcGFjZXMpOworICAg
IGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvY29tYm9Cb3giLCB0ZXN0V2Via2l0QXRrQ29t
Ym9Cb3gpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvZG9jdW1lbnRMb2FkaW5n
RXZlbnRzIiwgdGVzdFdlYmtpdEF0a0RvY3VtZW50TG9hZGluZ0V2ZW50cyk7CisgICAgZ190ZXN0
X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9lbWJlZGRlZE9iamVjdHMiLCB0ZXN0V2Via2l0QXRrRW1i
ZWRkZWRPYmplY3RzKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2dldEhlYWRl
cnNJblRhYmxlIiwgdGVzdFdlYmtpdEF0a0dldEhlYWRlcnNJblRhYmxlKTsKKyAgICBnX3Rlc3Rf
YWRkX2Z1bmMoIi93ZWJraXQvYXRrL3RleHRBdHRyaWJ1dGVzIiwgdGVzdFdlYmtpdEF0a1RleHRB
dHRyaWJ1dGVzKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL3RleHRTZWxlY3Rp
b25zIiwgdGVzdFdlYmtpdEF0a1RleHRTZWxlY3Rpb25zKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMo
Ii93ZWJraXQvYXRrL2dldEV4dGVudHMiLCB0ZXN0V2Via2l0QXRrR2V0RXh0ZW50cyk7CisgICAg
Z190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9oeXBlcnRleHRBbmRIeXBlcmxpbmtzIiwgdGVz
dFdlYmtpdEF0a0h5cGVydGV4dEFuZEh5cGVybGlua3MpOworICAgIGdfdGVzdF9hZGRfZnVuYygi
L3dlYmtpdC9hdGsvbGF5b3V0QW5kRGF0YVRhYmxlcyIsIHRlc3RXZWJraXRBdGtMYXlvdXRBbmRE
YXRhVGFibGVzKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2xpbmtzV2l0aElu
bGluZUltYWdlcyIsIHRlc3RXZWJraXRBdGtMaW5rc1dpdGhJbmxpbmVJbWFnZXMpOworICAgIGdf
dGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvbGlzdHNPZkl0ZW1zIiwgdGVzdFdlYmtpdEF0a0xp
c3RzT2ZJdGVtcyk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay90ZXh0Q2hhbmdl
ZE5vdGlmaWNhdGlvbnMiLCB0ZXN0V2Via2l0QXRrVGV4dENoYW5nZWROb3RpZmljYXRpb25zKTsK
KyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL3BhcmVudEZvclJvb3RPYmplY3QiLCB0
ZXN0V2Via2l0QXRrUGFyZW50Rm9yUm9vdE9iamVjdCk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIv
d2Via2l0L2F0ay9zZXRQYXJlbnRGb3JPYmplY3QiLCB0ZXN0V2Via2l0QXRrU2V0UGFyZW50Rm9y
T2JqZWN0KTsKKyAgICByZXR1cm4gZ190ZXN0X3J1biAoKTsKK30KKwpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGF0a3JvbGVzLmMgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0YXRrcm9sZXMuYwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44
ODgxN2NmOGFlOWZjYWI0NTcxMTFlZWVkMGM2ZmNlNDI5NTcxMTk4Ci0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGF0a3JvbGVzLmMKQEAg
LTAsMCArMSw0MjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxMCBKb2FubWFyaWUgRGlnZ3MK
KyAqIENvcHlyaWdodCDCqSAyMDEwIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KKyNpbmNsdWRlIDxndGsv
Z3RrLmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgorCisvKiBOb24gZm9ybSByb2xlcyAq
LworI2RlZmluZSBIVE1MX0RPQ1VNRU5UX0ZSQU1FICI8aHRtbD48Ym9keT5UaGlzIGlzIGEgdGVz
dC48L2JvZHk+PC9odG1sPiIKKyNkZWZpbmUgSFRNTF9IRUFESU5HICI8aHRtbD48Ym9keT48aDE+
MTwvaDE+PGgyPjI8L2gyPjxoMz4zPC9oMz48aDQ+NDwvaDQ+PGg1PjU8L2g1PjxoNj42PC9oNj48
L2JvZHk+PC9odG1sPiIKKyNkZWZpbmUgSFRNTF9JTUFHRSAiPGh0bWw+PGJvZHk+PGltZyBzcmM9
J2Zvb2Jhci5wbmcnIGFsdD0nVGhpcyBpcyBhIHRlc3QuJy8+PC9ib2R5PjwvaHRtbD4iCisjZGVm
aW5lIEhUTUxfTElOS19URVhUICI8aHRtbD48Ym9keT48YSBocmVmPSdmb29iYXIuaHRtbCc+VGhp
cyBpcyBhIHRlc3QuPC9hPjwvYm9keT48L2h0bWw+IgorI2RlZmluZSBIVE1MX0xJU1QgIjxodG1s
Pjxib2R5Pjx1bD48bGk+MTwvbGk+PGxpPjI8L2xpPjwvdWw+PG9sPjxsaT4xPC9saT48bGk+Mjwv
bGk+PC9vbD48L2JvZHk+PC9odG1sPiIKKyNkZWZpbmUgSFRNTF9QQVJBR1JBUEggIjxodG1sPjxi
b2R5PjxwPlRoaXMgaXMgYSB0ZXN0LjwvcD48L2JvZHk+PC9odG1sPiIKKyNkZWZpbmUgSFRNTF9T
RUNUSU9OICI8aHRtbD48Ym9keT48ZGl2PlRoaXMgaXMgYSB0ZXN0LjwvZGl2PjwvYm9keT48L2h0
bWw+IgorI2RlZmluZSBIVE1MX1RBQkxFICI8aHRtbD48Ym9keT48dGFibGUgYm9yZGVyPScxJz48
dHI+PHRkPlRoaXMgaXM8L3RkPjx0ZD5hIHRlc3QuPC90ZD48L3RyPjwvdGFibGU+PC9ib2R5Pjwv
aHRtbD4iCisjZGVmaW5lIEhUTUxfU0VQQVJBVE9SICI8aHRtbD48Ym9keT48aHIvPjwvYm9keT48
L2h0bWw+IgorI2RlZmluZSBIVE1MX0NPTUJPQk9YICI8aHRtbD48Ym9keT48c2VsZWN0IHNpemU9
JzEnPjxvcHRpb24+b25lPC9vcHRpb24+PG9wdGlvbj50d288L29wdGlvbj48b3B0aW9uPnRocmVl
PC9vcHRpb24+PC9zZWxlY3Q+PC9ib2R5PjwvaHRtbD4iCisvKiBGb3JtIHJvbGVzICovCisjZGVm
aW5lIEhUTUxfRk9STSAiPGh0bWw+PGJvZHk+PGZvcm0+VGhpcyBpcyBhIHRlc3QuPC9mb3JtPjwv
Ym9keT48L2h0bWw+IgorI2RlZmluZSBIVE1MX0NIRUNLX0JPWCAiPGh0bWw+PGJvZHk+PGlucHV0
IHR5cGU9J2NoZWNrYm94JyAvPlRoaXMgaXMgYSB0ZXN0LjwvYm9keT48L2h0bWw+IgorI2RlZmlu
ZSBIVE1MX0xBQkVMRURfRU5UUlkgIjxodG1sPjxib2R5PjxsYWJlbCBmb3I9J2Zvbyc+TmFtZTo8
L2xhYmVsPjxpbnB1dCB0eXBlPSd0ZXh0JyBpZD0nZm9vJyAvPjwvYm9keT48L2h0bWw+IgorI2Rl
ZmluZSBIVE1MX0xJU1RCT1ggIjxodG1sPjxib2R5PjxzZWxlY3Qgc2l6ZT0nMyc+PG9wdGlvbj5v
bmU8L29wdGlvbj48b3B0aW9uPnR3bzwvb3B0aW9uPjxvcHRpb24+dGhyZWU8L29wdGlvbj48L3Nl
bGVjdD48L2JvZHk+PC9odG1sPiIKKyNkZWZpbmUgSFRNTF9QQVNTV09SRF9URVhUICI8aHRtbD48
Ym9keT48aW5wdXQgdHlwZT0ncGFzc3dvcmQnIC8+PC9ib2R5PjwvaHRtbD4iCisjZGVmaW5lIEhU
TUxfUFVTSF9CVVRUT04gIjxodG1sPjxib2R5PjxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPSdv
aycgLz5UaGlzIGlzIGEgdGVzdC48L2JvZHk+PC9odG1sPiIKKyNkZWZpbmUgSFRNTF9SQURJT19C
VVRUT04gIjxodG1sPjxib2R5PjxpbnB1dCB0eXBlPSdyYWRpbycgLz5UaGlzIGlzIGEgdGVzdC48
L2JvZHk+PC9odG1sPiIKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIEF0a09iamVjdCogZG9jdW1l
bnQ7CisgICAgQXRrT2JqZWN0KiBvYmo7CisgICAgQXRrUm9sZSByb2xlOworICAgIEd0a1dpZGdl
dCogd2ViVmlldzsKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jOworICAgIEdNYWluTG9vcCogbG9v
cDsKK30gQXRrUm9sZXNGaXh0dXJlOworCitzdGF0aWMgZ2Jvb2xlYW4gZmluaXNoX2xvYWRpbmco
QXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlKQoreworICAgIGlmIChnX21haW5fbG9vcF9pc19ydW5u
aW5nKGZpeHR1cmUtPmxvb3ApKQorICAgICAgICBnX21haW5fbG9vcF9xdWl0KGZpeHR1cmUtPmxv
b3ApOworCisgICAgLy8gV2l0aCB0aGUgY2hhbmdlIHRvIHN1cHBvcnQgV0syIGFjY2Vzc2liaWxp
dHksIHRoZSByb290IG9iamVjdAorICAgIC8vIGhhcyBjaGFuZ2VkIGFuZCBpdCdzIG5vIGxvbmdl
ciB0aGUgZG9jdW1lbnQgZnJhbWUsIGJ1dCBhIHNjcm9sbAorICAgIC8vIHBhbmUgY29udGFpbmlu
ZyB0aGUgZG9jdW1lbnQgZnJhbWUgYXMgaXRzIG9ubHkgY2hpbGQuIFNlZSB0aGUKKyAgICAvLyBi
dWcgNzIzOTAgZm9yIG1vcmUgZGV0YWlscyBvbiB0aGlzIGNoYW5nZS4KKyAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIzOTAKKyAgICBBdGtPYmplY3QqIHJv
b3RPYmplY3QgPSBndGtfd2lkZ2V0X2dldF9hY2Nlc3NpYmxlKGZpeHR1cmUtPndlYlZpZXcpOwor
ICAgIGZpeHR1cmUtPmRvY3VtZW50ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChy
b290T2JqZWN0LCAwKTsKKyAgICBnX2Fzc2VydChmaXh0dXJlLT5kb2N1bWVudCk7CisKKyAgICAv
LyBSZW1vdmUgdGhlIHJlZmVyZW5jZSBhZGRlZCBieSByZWZfYWNjZXNzaWJsZV9jaGlsZCgpIGFu
ZAorICAgIC8vIHJldHVybiwgc2luY2Ugd2UgZG9uJ3QgbmVlZCB0byBrZWVwIHRoYXQgZXh0cmEg
cmVmIGF0IGFsbC4KKyAgICBnX29iamVjdF91bnJlZihmaXh0dXJlLT5kb2N1bWVudCk7CisgICAg
cmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZCBhdGtfcm9sZXNfZml4dHVyZV9zZXR1cChB
dGtSb2xlc0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBmaXh0
dXJlLT5sb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworICAgIGZpeHR1cmUtPmFs
bG9jID0gKEd0a0FsbG9jYXRpb24pIHsgMCwgMCwgODAwLCA2MDAgfTsKKyAgICBmaXh0dXJlLT53
ZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKGZp
eHR1cmUtPndlYlZpZXcpOworCisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKGZpeHR1cmUt
PndlYlZpZXcsICZmaXh0dXJlLT5hbGxvYyk7CisKKyAgICBpZiAoZGF0YSAhPSBOVUxMKQorICAg
ICAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVXIChmaXh0dXJl
LT53ZWJWaWV3KSwgKGNvbnN0IGNoYXIqKSBkYXRhLCBOVUxMLCBOVUxMLCBOVUxMKTsKKworICAg
IGdfaWRsZV9hZGQoKEdTb3VyY2VGdW5jKSBmaW5pc2hfbG9hZGluZywgZml4dHVyZSk7CisgICAg
Z19tYWluX2xvb3BfcnVuKGZpeHR1cmUtPmxvb3ApOworfQorCitzdGF0aWMgdm9pZCBhdGtfcm9s
ZXNfZml4dHVyZV90ZWFyZG93bihBdGtSb2xlc0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50
ZXIgZGF0YSkKK3sKKyAgICBnX29iamVjdF91bnJlZihmaXh0dXJlLT53ZWJWaWV3KTsKKyAgICBn
X21haW5fbG9vcF91bnJlZihmaXh0dXJlLT5sb29wKTsKK30KKworc3RhdGljIHZvaWQgZ2V0X2No
aWxkX2FuZF90ZXN0X3JvbGUoQXRrT2JqZWN0KiBvYmosIGdpbnQgcG9zLCBBdGtSb2xlIHJvbGUp
Cit7CisgICAgQXRrT2JqZWN0KiBjaGlsZDsKKyAgICBBdGtSb2xlIGNoaWxkX3JvbGU7CisKKyAg
ICBjaGlsZCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqLCBwb3MpOworICAg
IGdfYXNzZXJ0KGNoaWxkKTsKKyAgICBjaGlsZF9yb2xlID0gYXRrX29iamVjdF9nZXRfcm9sZShj
aGlsZCk7CisgICAgZ19hc3NlcnQoY2hpbGRfcm9sZSA9PSByb2xlKTsKKworICAgIGdfb2JqZWN0
X3VucmVmKGNoaWxkKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xl
X2RvY3VtZW50X2ZyYW1lKEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBk
YXRhKQoreworICAgIGZpeHR1cmUtPnJvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKGZpeHR1cmUt
PmRvY3VtZW50KTsKKyAgICBnX2Fzc2VydChmaXh0dXJlLT5yb2xlID09IEFUS19ST0xFX0RPQ1VN
RU5UX1dFQik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9oZWFk
aW5nKEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAg
IGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPmRvY3VtZW50LCAwLCBBVEtfUk9MRV9I
RUFESU5HKTsKKyAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5kb2N1bWVudCwg
MSwgQVRLX1JPTEVfSEVBRElORyk7CisgICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVy
ZS0+ZG9jdW1lbnQsIDIsIEFUS19ST0xFX0hFQURJTkcpOworICAgIGdldF9jaGlsZF9hbmRfdGVz
dF9yb2xlKGZpeHR1cmUtPmRvY3VtZW50LCAzLCBBVEtfUk9MRV9IRUFESU5HKTsKKyAgICBnZXRf
Y2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5kb2N1bWVudCwgNCwgQVRLX1JPTEVfSEVBRElO
Ryk7CisgICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+ZG9jdW1lbnQsIDUsIEFU
S19ST0xFX0hFQURJTkcpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3Jv
bGVfaW1hZ2UoQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7
CisgICAgLy8gVGhpcyBpcyBhbiBleHRyYW5lb3VzIG9iamVjdCBvZiBBVEtfUk9MRV9QQU5FTCB3
aGljaCB3ZSBzaG91bGQgZ2V0IHJpZCBvZi4KKyAgICBmaXh0dXJlLT5vYmogPSBhdGtfb2JqZWN0
X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZpeHR1cmUtPmRvY3VtZW50LCAwKTsKKyAgICBnX2Fzc2Vy
dChmaXh0dXJlLT5vYmopOworCisgICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+
b2JqLCAwLCBBVEtfUk9MRV9JTUFHRSk7CisKKyAgICBnX29iamVjdF91bnJlZihmaXh0dXJlLT5v
YmopOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfbGluayhBdGtS
b2xlc0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICAvLyBUaGlz
IGlzIGFuIGV4dHJhbmVvdXMgb2JqZWN0IG9mIEFUS19ST0xFX1BBTkVMIHdoaWNoIHdlIHNob3Vs
ZCBnZXQgcmlkIG9mLgorICAgIGZpeHR1cmUtPm9iaiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2li
bGVfY2hpbGQoZml4dHVyZS0+ZG9jdW1lbnQsIDApOworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPm9i
aik7CisKKyAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5vYmosIDAsIEFUS19S
T0xFX0xJTkspOworCisgICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+b2JqKTsKK30KKworc3Rh
dGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xpc3RfYW5kX2l0ZW0oQXRrUm9sZXNG
aXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgQXRrT2JqZWN0KiBs
aXN0T2JqOworCisgICAgbGlzdE9iaiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQo
Zml4dHVyZS0+ZG9jdW1lbnQsIDApOworICAgIGdfYXNzZXJ0KGxpc3RPYmopOworICAgIGZpeHR1
cmUtPnJvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKGxpc3RPYmopOworICAgIGdfYXNzZXJ0KGZp
eHR1cmUtPnJvbGUgPT0gQVRLX1JPTEVfTElTVCk7CisKKyAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rf
cm9sZShsaXN0T2JqLCAwLCBBVEtfUk9MRV9MSVNUX0lURU0pOworICAgIGdldF9jaGlsZF9hbmRf
dGVzdF9yb2xlKGxpc3RPYmosIDEsIEFUS19ST0xFX0xJU1RfSVRFTSk7CisgICAgZ19vYmplY3Rf
dW5yZWYobGlzdE9iaik7CisKKyAgICBsaXN0T2JqID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJs
ZV9jaGlsZChmaXh0dXJlLT5kb2N1bWVudCwgMSk7CisgICAgZ19hc3NlcnQobGlzdE9iaik7Cisg
ICAgZml4dHVyZS0+cm9sZSA9IGF0a19vYmplY3RfZ2V0X3JvbGUobGlzdE9iaik7CisgICAgZ19h
c3NlcnQoZml4dHVyZS0+cm9sZSA9PSBBVEtfUk9MRV9MSVNUKTsKKworICAgIGdldF9jaGlsZF9h
bmRfdGVzdF9yb2xlKGxpc3RPYmosIDAsIEFUS19ST0xFX0xJU1RfSVRFTSk7CisgICAgZ2V0X2No
aWxkX2FuZF90ZXN0X3JvbGUobGlzdE9iaiwgMSwgQVRLX1JPTEVfTElTVF9JVEVNKTsKKyAgICBn
X29iamVjdF91bnJlZihsaXN0T2JqKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRr
X2dldF9yb2xlX3BhcmFncmFwaChBdGtSb2xlc0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50
ZXIgZGF0YSkKK3sKKyAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5kb2N1bWVu
dCwgMCwgQVRLX1JPTEVfUEFSQUdSQVBIKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRf
YXRrX2dldF9yb2xlX3NlY3Rpb24oQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2lu
dGVyIGRhdGEpCit7CisgICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+ZG9jdW1l
bnQsIDAsIEFUS19ST0xFX1NFQ1RJT04pOworfQorCisvLyBEb2VzIG5vdCB5ZXQgdGVzdCB0YWJs
ZSBjZWxscyBiZWNhdXNlIG9mIGJ1ZyAzMDg5NS4KK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0
a19nZXRfcm9sZV90YWJsZShBdGtSb2xlc0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIg
ZGF0YSkKK3sKKyAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5kb2N1bWVudCwg
MCwgQVRLX1JPTEVfVEFCTEUpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0
X3JvbGVfc2VwYXJhdG9yKEF0a1JvbGVzRml4dHVyZSAqZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBk
YXRhKQoreworICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPmRvY3VtZW50LCAw
LCBBVEtfUk9MRV9TRVBBUkFUT1IpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtf
Z2V0X3JvbGVfY29tYm9ib3goQXRrUm9sZXNGaXh0dXJlICpmaXh0dXJlLCBnY29uc3Rwb2ludGVy
IGRhdGEpCit7CisgICAgQXRrT2JqZWN0KiBjb21ib2JveE1lbnU7CisKKyAgICAvLyBUaGlzIGlz
IGFuIGV4dHJhbmVvdXMgb2JqZWN0IG9mIEFUS19ST0xFX1BBTkVMIHdoaWNoIHdlIHNob3VsZCBn
ZXQgcmlkIG9mLgorICAgIGZpeHR1cmUtPm9iaiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVf
Y2hpbGQoZml4dHVyZS0+ZG9jdW1lbnQsIDApOworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPm9iaik7
CisKKyAgICBmaXh0dXJlLT5vYmogPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZp
eHR1cmUtPm9iaiwgMCk7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+b2JqKTsKKyAgICBmaXh0dXJl
LT5yb2xlID0gYXRrX29iamVjdF9nZXRfcm9sZShmaXh0dXJlLT5vYmopOworICAgIGdfYXNzZXJ0
KGZpeHR1cmUtPnJvbGUgPT0gQVRLX1JPTEVfQ09NQk9fQk9YKTsKKworICAgIGNvbWJvYm94TWVu
dSA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoZml4dHVyZS0+b2JqLCAwKTsKKyAg
ICBnX2Fzc2VydChjb21ib2JveE1lbnUpOworICAgIGZpeHR1cmUtPnJvbGUgPSBhdGtfb2JqZWN0
X2dldF9yb2xlKGNvbWJvYm94TWVudSk7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+cm9sZSA9PSBB
VEtfUk9MRV9NRU5VKTsKKworICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGNvbWJvYm94TWVu
dSwgMCwgQVRLX1JPTEVfTUVOVV9JVEVNKTsKKyAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShj
b21ib2JveE1lbnUsIDEsIEFUS19ST0xFX01FTlVfSVRFTSk7CisgICAgZ2V0X2NoaWxkX2FuZF90
ZXN0X3JvbGUoY29tYm9ib3hNZW51LCAyLCBBVEtfUk9MRV9NRU5VX0lURU0pOworCisgICAgZ19v
YmplY3RfdW5yZWYoZml4dHVyZS0+b2JqKTsKKyAgICBnX29iamVjdF91bnJlZihjb21ib2JveE1l
bnUpOworfQorCisvKiBGb3JtIHJvbGVzICovCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtf
Z2V0X3JvbGVfZm9ybShBdGtSb2xlc0ZpeHR1cmUgKmZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0
YSkKK3sKKyAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5kb2N1bWVudCwgMCwg
QVRLX1JPTEVfRk9STSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9s
ZV9jaGVja19ib3goQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEp
Cit7CisgICAgLy8gVGhpcyBpcyBhbiBleHRyYW5lb3VzIG9iamVjdCBvZiBBVEtfUk9MRV9QQU5F
TCB3aGljaCB3ZSBzaG91bGQgZ2V0IHJpZCBvZi4KKyAgICBmaXh0dXJlLT5vYmogPSBhdGtfb2Jq
ZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZpeHR1cmUtPmRvY3VtZW50LCAwKTsKKyAgICBnX2Fz
c2VydChmaXh0dXJlLT5vYmopOworCisgICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVy
ZS0+b2JqLCAwLCBBVEtfUk9MRV9DSEVDS19CT1gpOworCisgICAgZ19vYmplY3RfdW5yZWYoZml4
dHVyZS0+b2JqKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2Vu
dHJ5KEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAg
IC8vIFRoaXMgaXMgYW4gZXh0cmFuZW91cyBvYmplY3Qgb2YgQVRLX1JPTEVfUEFORUwgd2hpY2gg
d2Ugc2hvdWxkIGdldCByaWQgb2YuCisgICAgZml4dHVyZS0+b2JqID0gYXRrX29iamVjdF9yZWZf
YWNjZXNzaWJsZV9jaGlsZChmaXh0dXJlLT5kb2N1bWVudCwgMCk7CisgICAgZ19hc3NlcnQoZml4
dHVyZS0+b2JqKTsKKworICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPm9iaiwg
MSwgQVRLX1JPTEVfRU5UUlkpOworCisgICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+b2JqKTsK
K30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xhYmVsKEF0a1JvbGVz
Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIC8vIFRoaXMgaXMg
YW4gZXh0cmFuZW91cyBvYmplY3Qgb2YgQVRLX1JPTEVfUEFORUwgd2hpY2ggd2Ugc2hvdWxkIGdl
dCByaWQgb2YuCisgICAgZml4dHVyZS0+b2JqID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9j
aGlsZChmaXh0dXJlLT5kb2N1bWVudCwgMCk7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+b2JqKTsK
KworICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPm9iaiwgMCwgQVRLX1JPTEVf
TEFCRUwpOworCisgICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+b2JqKTsKK30KKworc3RhdGlj
IHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xpc3Rib3goQXRrUm9sZXNGaXh0dXJlKiBm
aXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgQXRrT2JqZWN0KiBsaXN0Ym94T2Jq
OworICAgIC8vIFRoaXMgaXMgYW4gZXh0cmFuZW91cyBvYmplY3Qgb2YgQVRLX1JPTEVfUEFORUwg
d2hpY2ggd2Ugc2hvdWxkIGdldCByaWQgb2YuCisgICAgZml4dHVyZS0+b2JqID0gYXRrX29iamVj
dF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmaXh0dXJlLT5kb2N1bWVudCwgMCk7CisgICAgZ19hc3Nl
cnQoZml4dHVyZS0+b2JqKTsKKworICAgIGxpc3Rib3hPYmogPSBhdGtfb2JqZWN0X3JlZl9hY2Nl
c3NpYmxlX2NoaWxkKGZpeHR1cmUtPm9iaiwgMCk7CisgICAgZ19hc3NlcnQobGlzdGJveE9iaik7
CisgICAgZml4dHVyZS0+cm9sZSA9IGF0a19vYmplY3RfZ2V0X3JvbGUobGlzdGJveE9iaik7Cisg
ICAgZ19hc3NlcnQoZml4dHVyZS0+cm9sZSA9PSBBVEtfUk9MRV9MSVNUKTsKKworICAgIGdldF9j
aGlsZF9hbmRfdGVzdF9yb2xlKGxpc3Rib3hPYmosIDAsIEFUS19ST0xFX0xJU1RfSVRFTSk7Cisg
ICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUobGlzdGJveE9iaiwgMSwgQVRLX1JPTEVfTElTVF9J
VEVNKTsKKyAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShsaXN0Ym94T2JqLCAyLCBBVEtfUk9M
RV9MSVNUX0lURU0pOworCisgICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+b2JqKTsKKyAgICBn
X29iamVjdF91bnJlZihsaXN0Ym94T2JqKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRf
YXRrX2dldF9yb2xlX3Bhc3N3b3JkX3RleHQoQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29u
c3Rwb2ludGVyIGRhdGEpCit7CisgICAgLy8gVGhpcyBpcyBhbiBleHRyYW5lb3VzIG9iamVjdCBv
ZiBBVEtfUk9MRV9QQU5FTCB3aGljaCB3ZSBzaG91bGQgZ2V0IHJpZCBvZi4KKyAgICBmaXh0dXJl
LT5vYmogPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZpeHR1cmUtPmRvY3VtZW50
LCAwKTsKKyAgICBnX2Fzc2VydChmaXh0dXJlLT5vYmopOworCisgICAgZ2V0X2NoaWxkX2FuZF90
ZXN0X3JvbGUoZml4dHVyZS0+b2JqLCAwLCBBVEtfUk9MRV9QQVNTV09SRF9URVhUKTsKKworICAg
IGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9iaik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Vi
a2l0X2F0a19nZXRfcm9sZV9wdXNoX2J1dHRvbihBdGtSb2xlc0ZpeHR1cmUqIGZpeHR1cmUsIGdj
b25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICAvLyBUaGlzIGlzIGFuIGV4dHJhbmVvdXMgb2JqZWN0
IG9mIEFUS19ST0xFX1BBTkVMIHdoaWNoIHdlIHNob3VsZCBnZXQgcmlkIG9mLgorICAgIGZpeHR1
cmUtPm9iaiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoZml4dHVyZS0+ZG9jdW1l
bnQsIDApOworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPm9iaik7CisKKyAgICBnZXRfY2hpbGRfYW5k
X3Rlc3Rfcm9sZShmaXh0dXJlLT5vYmosIDAsIEFUS19ST0xFX1BVU0hfQlVUVE9OKTsKKworICAg
IGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9iaik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Vi
a2l0X2F0a19nZXRfcm9sZV9yYWRpb19idXR0b24oQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBn
Y29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgLy8gVGhpcyBpcyBhbiBleHRyYW5lb3VzIG9iamVj
dCBvZiBBVEtfUk9MRV9QQU5FTCB3aGljaCB3ZSBzaG91bGQgZ2V0IHJpZCBvZi4KKyAgICBmaXh0
dXJlLT5vYmogPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZpeHR1cmUtPmRvY3Vt
ZW50LCAwKTsKKyAgICBnX2Fzc2VydChmaXh0dXJlLT5vYmopOworCisgICAgZ2V0X2NoaWxkX2Fu
ZF90ZXN0X3JvbGUoZml4dHVyZS0+b2JqLCAwLCBBVEtfUk9MRV9SQURJT19CVVRUT04pOworCisg
ICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+b2JqKTsKK30KKworaW50IG1haW4oaW50IGFyZ2Ms
IGNoYXIqKiBhcmd2KQoreworICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsK
KworICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7CisKKyAg
ICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfZG9jdW1l
bnRfZnJhbWUiLAorICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX0RPQ1VNRU5U
X0ZSQU1FLAorICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAsCisgICAgICAg
ICAgICAgICB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfZG9jdW1lbnRfZnJhbWUsCisgICAgICAg
ICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICBnX3Rlc3RfYWRkKCIv
d2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfaGVhZGluZyIsCisgICAgICAgICAg
ICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhUTUxfSEVBRElORywKKyAgICAgICAgICAgICAgIGF0a19y
b2xlc19maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9y
b2xlX2hlYWRpbmcsCisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7
CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVf
aW1hZ2UiLAorICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX0lNQUdFLAorICAg
ICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0
X3dlYmtpdF9hdGtfZ2V0X3JvbGVfaW1hZ2UsCisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4
dHVyZV90ZWFyZG93bik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtp
dF9hdGtfZ2V0X3JvbGVfbGluayIsCisgICAgICAgICAgICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhU
TUxfTElOS19URVhULAorICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAsCisg
ICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfbGluaywKKyAgICAgICAgICAg
ICAgIGF0a19yb2xlc19maXh0dXJlX3RlYXJkb3duKTsKKworICAgIGdfdGVzdF9hZGQoIi93ZWJr
aXQvYXRrL3Rlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9saXN0X2FuZF9pdGVtIiwKKyAgICAgICAg
ICAgICAgIEF0a1JvbGVzRml4dHVyZSwgSFRNTF9MSVNULAorICAgICAgICAgICAgICAgYXRrX3Jv
bGVzX2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3Jv
bGVfbGlzdF9hbmRfaXRlbSwKKyAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3RlYXJk
b3duKTsKKworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvYXRrL3Rlc3Rfd2Via2l0X2F0a19nZXRf
cm9sZV9wYXJhZ3JhcGgiLAorICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX1BB
UkFHUkFQSCwKKyAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAorICAgICAg
ICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX3BhcmFncmFwaCwKKyAgICAgICAgICAg
ICAgIGF0a19yb2xlc19maXh0dXJlX3RlYXJkb3duKTsKKworICAgIGdfdGVzdF9hZGQoIi93ZWJr
aXQvYXRrL3Rlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9zZWN0aW9uIiwKKyAgICAgICAgICAgICAg
IEF0a1JvbGVzRml4dHVyZSwgSFRNTF9TRUNUSU9OLAorICAgICAgICAgICAgICAgYXRrX3JvbGVz
X2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVf
c2VjdGlvbiwKKyAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3RlYXJkb3duKTsKKwor
ICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvYXRrL3Rlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV90YWJs
ZSIsCisgICAgICAgICAgICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhUTUxfVEFCTEUsCisgICAgICAg
ICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3Rfd2Vi
a2l0X2F0a19nZXRfcm9sZV90YWJsZSwKKyAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJl
X3RlYXJkb3duKTsKKworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvYXRrL3Rlc3Rfd2Via2l0X2F0
a19nZXRfcm9sZV9zZXBhcmF0b3IiLAorICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBI
VE1MX1NFUEFSQVRPUiwKKyAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAor
ICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX3NlcGFyYXRvciwKKyAgICAg
ICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3RlYXJkb3duKTsKKworICAgIGdfdGVzdF9hZGQo
Ii93ZWJraXQvYXRrL3Rlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9jb21ib2JveCIsCisgICAgICAg
ICAgICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhUTUxfQ09NQk9CT1gsCisgICAgICAgICAgICAgICBh
dGtfcm9sZXNfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X2F0a19n
ZXRfcm9sZV9jb21ib2JveCwKKyAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3RlYXJk
b3duKTsKKworICAgIC8qIEZvcm0gcm9sZXMgKi8KKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0
ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfZm9ybSIsCisgICAgICAgICAgICAgICBBdGtSb2xl
c0ZpeHR1cmUsIEhUTUxfRk9STSwKKyAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3Nl
dHVwLAorICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2Zvcm0sCisgICAg
ICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7CisgICAgZ190ZXN0X2FkZCgi
L3dlYmtpdC9hdGsvdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2NoZWNrX2JveCIsCisgICAgICAg
ICAgICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhUTUxfQ0hFQ0tfQk9YLAorICAgICAgICAgICAgICAg
YXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF9hdGtf
Z2V0X3JvbGVfY2hlY2tfYm94LAorICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfdGVh
cmRvd24pOworCisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9hdGsvdGVzdF93ZWJraXRfYXRrX2dl
dF9yb2xlX2VudHJ5IiwKKyAgICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVyZSwgSFRNTF9MQUJF
TEVEX0VOVFJZLAorICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAsCisgICAg
ICAgICAgICAgICB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfZW50cnksCisgICAgICAgICAgICAg
ICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0
L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfbGFiZWwiLAorICAgICAgICAgICAgICAgQXRr
Um9sZXNGaXh0dXJlLCBIVE1MX0xBQkVMRURfRU5UUlksCisgICAgICAgICAgICAgICBhdGtfcm9s
ZXNfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9s
ZV9sYWJlbCwKKyAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3RlYXJkb3duKTsKKwor
ICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvYXRrL3Rlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9saXN0
Ym94IiwKKyAgICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVyZSwgSFRNTF9MSVNUQk9YLAorICAg
ICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0
X3dlYmtpdF9hdGtfZ2V0X3JvbGVfbGlzdGJveCwKKyAgICAgICAgICAgICAgIGF0a19yb2xlc19m
aXh0dXJlX3RlYXJkb3duKTsKKworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvYXRrL3Rlc3Rfd2Vi
a2l0X2F0a19nZXRfcm9sZV9wYXNzd29yZF90ZXh0IiwKKyAgICAgICAgICAgICAgIEF0a1JvbGVz
Rml4dHVyZSwgSFRNTF9QQVNTV09SRF9URVhULAorICAgICAgICAgICAgICAgYXRrX3JvbGVzX2Zp
eHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfcGFz
c3dvcmRfdGV4dCwKKyAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3RlYXJkb3duKTsK
KworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvYXRrL3Rlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9w
dXNoX2J1dHRvbiIsCisgICAgICAgICAgICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhUTUxfUFVTSF9C
VVRUT04sCisgICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV9zZXR1cCwKKyAgICAgICAg
ICAgICAgIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9wdXNoX2J1dHRvbiwKKyAgICAgICAgICAg
ICAgIGF0a19yb2xlc19maXh0dXJlX3RlYXJkb3duKTsKKworICAgIGdfdGVzdF9hZGQoIi93ZWJr
aXQvYXRrL3Rlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9yYWRpb19idXR0b24iLAorICAgICAgICAg
ICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX1JBRElPX0JVVFRPTiwKKyAgICAgICAgICAgICAg
IGF0a19yb2xlc19maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRr
X2dldF9yb2xlX3JhZGlvX2J1dHRvbiwKKyAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJl
X3RlYXJkb3duKTsKKworICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7Cit9CmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0Y29udGV4dG1lbnUuYyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3Rjb250ZXh0bWVudS5jCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjU0YWFhNTcxOTYxY2Y2MTE3NmZjOWNmNGU0OGNiOTM5NjVhODU1NWYKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0Y29udGV4
dG1lbnUuYwpAQCAtMCwwICsxLDMxNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2Fs
aWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4K
KwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGNoYXIgKmRhdGE7CisgICAgZ3VpbnQgZmxhZzsKK30g
VGVzdEluZm87CisKK3N0YXRpYyBHTWFpbkxvb3AgKmxvb3A7CisKK3R5cGVkZWYgc3RydWN0IHsK
KyAgICBXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3OworICAgIFRlc3RJbmZvICppbmZvOworfSBDb250
ZXh0TWVudUZpeHR1cmU7CisKK3N0YXRpYyBUZXN0SW5mbyAqdGVzdEluZm9OZXcoY29uc3QgY2hh
ciAqZGF0YSwgZ3VpbnQgZmxhZykKK3sKKyAgICBUZXN0SW5mbyAqaW5mbyA9IGdfc2xpY2VfbmV3
KFRlc3RJbmZvKTsKKyAgICBpbmZvLT5kYXRhID0gZ19zdHJkdXAoZGF0YSk7CisgICAgaW5mby0+
ZmxhZyA9IGZsYWc7CisKKyAgICByZXR1cm4gaW5mbzsKK30KKworc3RhdGljIHZvaWQgdGVzdElu
Zm9EZXN0cm95KFRlc3RJbmZvICppbmZvKQoreworICAgIGdfZnJlZShpbmZvLT5kYXRhKTsKKyAg
ICBnX3NsaWNlX2ZyZWUoVGVzdEluZm8sIGluZm8pOworfQorCitzdGF0aWMgdm9pZCBjb250ZXh0
TWVudUZpeHR1cmVTZXR1cChDb250ZXh0TWVudUZpeHR1cmUgKmZpeHR1cmUsIGdjb25zdHBvaW50
ZXIgZGF0YSkKK3sKKyAgICBmaXh0dXJlLT53ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtp
dF93ZWJfdmlld19uZXcoKSk7CisgICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVF
KTsKKyAgICBmaXh0dXJlLT5pbmZvID0gKFRlc3RJbmZvICopZGF0YTsKK30KKworc3RhdGljIHZv
aWQgY29udGV4dE1lbnVGaXh0dXJlVGVhcmRvd24oQ29udGV4dE1lbnVGaXh0dXJlICpmaXh0dXJl
LCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+d2Vi
Vmlldyk7CisgICAgZ19tYWluX2xvb3BfdW5yZWYobG9vcCk7CisgICAgdGVzdEluZm9EZXN0cm95
KGZpeHR1cmUtPmluZm8pOworfQorCitzdGF0aWMgR0xpc3QgKmNoZWNrQWN0aW9uKEdMaXN0ICpp
dGVyLCBXZWJLaXRDb250ZXh0TWVudUFjdGlvbiBhY3Rpb24pCit7CisgICAgR3RrTWVudUl0ZW0g
Kml0ZW0gPSAoR3RrTWVudUl0ZW0gKilpdGVyLT5kYXRhOworCisgICAgZ19hc3NlcnQoR1RLX0lT
X01FTlVfSVRFTShpdGVtKSk7CisgICAgZ19hc3NlcnQod2Via2l0X2NvbnRleHRfbWVudV9pdGVt
X2dldF9hY3Rpb24oaXRlbSkgPT0gYWN0aW9uKTsKKworICAgIHJldHVybiBpdGVyLT5uZXh0Owor
fQorCitzdGF0aWMgR0xpc3QgKmNoZWNrQWN0aW9uV2l0aFN1Ym1lbnUoR0xpc3QgKml0ZXIsIFdl
YktpdENvbnRleHRNZW51QWN0aW9uIGFjdGlvbikKK3sKKyAgICBHdGtNZW51SXRlbSAqaXRlbSA9
IChHdGtNZW51SXRlbSAqKWl0ZXItPmRhdGE7CisKKyAgICBnX2Fzc2VydChHVEtfSVNfTUVOVV9J
VEVNKGl0ZW0pKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfY29udGV4dF9tZW51X2l0ZW1fZ2V0X2Fj
dGlvbihpdGVtKSA9PSBhY3Rpb24pOworICAgIGdfYXNzZXJ0KEdUS19JU19NRU5VKGd0a19tZW51
X2l0ZW1fZ2V0X3N1Ym1lbnUoaXRlbSkpKTsKKworICAgIHJldHVybiBpdGVyLT5uZXh0OworfQor
CitzdGF0aWMgR0xpc3QgKmNoZWNrU2VwYXJhdG9yKEdMaXN0ICppdGVyKQoreworICAgIEd0a01l
bnVJdGVtICppdGVtID0gKEd0a01lbnVJdGVtICopaXRlci0+ZGF0YTsKKworICAgIGdfYXNzZXJ0
KEdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKGl0ZW0pKTsKKworICAgIHJldHVybiBpdGVyLT5u
ZXh0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gY29udGV4dE1lbnVDYWxsYmFjayhXZWJLaXRXZWJW
aWV3ICp3ZWJWaWV3LCBHdGtXaWRnZXQgKmRlZmF1bHRNZW51LCBXZWJLaXRIaXRUZXN0UmVzdWx0
ICpoaXRUZXN0UmVzdWx0LCBnYm9vbGVhbiBrZXlib2FyZE1vZGUsIGdwb2ludGVyIHVzZXJEYXRh
KQoreworICAgIFRlc3RJbmZvICppbmZvID0gKFRlc3RJbmZvICopdXNlckRhdGE7CisgICAgZ3Vp
bnQgY29udGV4dDsKKyAgICBHTGlzdCAqaXRlbXM7CisgICAgR0xpc3QgKml0ZXI7CisKKyAgICAv
KiBDaGVjayBzaWduYWwgcGFyYW1ldGVycyAqLworICAgIGdfYXNzZXJ0KFdFQktJVF9JU19XRUJf
VklFVyh3ZWJWaWV3KSk7CisgICAgZ19hc3NlcnQoR1RLX0lTX01FTlUoZGVmYXVsdE1lbnUpKTsK
KyAgICBnX2Fzc2VydChXRUJLSVRfSVNfSElUX1RFU1RfUkVTVUxUKGhpdFRlc3RSZXN1bHQpKTsK
KyAgICBnX2Fzc2VydCgha2V5Ym9hcmRNb2RlKTsKKworICAgIGdfb2JqZWN0X2dldChoaXRUZXN0
UmVzdWx0LCAiY29udGV4dCIsICZjb250ZXh0LCBOVUxMKTsKKyAgICBnX2Fzc2VydChjb250ZXh0
ICYgaW5mby0+ZmxhZyk7CisKKyAgICBpdGVtcyA9IGd0a19jb250YWluZXJfZ2V0X2NoaWxkcmVu
KEdUS19DT05UQUlORVIoZGVmYXVsdE1lbnUpKTsKKyAgICBzd2l0Y2ggKGluZm8tPmZsYWcpIHsK
KyAgICBjYXNlIFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9ET0NVTUVOVDoKKyAgICAg
ICAgaXRlciA9IGl0ZW1zOworICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lU
X0NPTlRFWFRfTUVOVV9BQ1RJT05fR09fQkFDSyk7CisgICAgICAgIGl0ZXIgPSBjaGVja0FjdGlv
bihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9HT19GT1JXQVJEKTsKKyAgICAgICAg
aXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1NUT1Ap
OworICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9B
Q1RJT05fUkVMT0FEKTsKKyAgICAgICAgZ19hc3NlcnQoIWl0ZXIpOworCisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0lNQUdFOgorICAgICAg
ICBpdGVyID0gaXRlbXM7CisgICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRf
Q09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0lNQUdFX0lOX05FV19XSU5ET1cpOworICAgICAgICBp
dGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRE9XTkxP
QURfSU1BR0VfVE9fRElTSyk7CisgICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZX0lNQUdFX1RPX0NMSVBCT0FSRCk7CisgICAgICAg
IGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZ
X0lNQUdFX1VSTF9UT19DTElQQk9BUkQpOworICAgICAgICBnX2Fzc2VydCghaXRlcik7CisKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfRURJ
VEFCTEU6CisgICAgICAgIGl0ZXIgPSBpdGVtczsKKyAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9u
KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NVVCk7CisgICAgICAgIGl0ZXIgPSBj
aGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DT1BZKTsKKyAgICAg
ICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1BB
U1RFKTsKKyAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01F
TlVfQUNUSU9OX0RFTEVURSk7CisgICAgICAgIGl0ZXIgPSBjaGVja1NlcGFyYXRvcihpdGVyKTsK
KyAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNU
SU9OX1NFTEVDVF9BTEwpOworICAgICAgICBpdGVyID0gY2hlY2tTZXBhcmF0b3IoaXRlcik7Cisg
ICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbldpdGhTdWJtZW51KGl0ZXIsIFdFQktJVF9DT05URVhU
X01FTlVfQUNUSU9OX0lOUFVUX01FVEhPRFMpOworICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb25X
aXRoU3VibWVudShpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9VTklDT0RFKTsKKyAg
ICAgICAgZ19hc3NlcnQoIWl0ZXIpOworCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VCS0lU
X0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0xJTks6CisgICAgICAgIGl0ZXIgPSBpdGVtczsKKyAg
ICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9O
X09QRU5fTElOSyk7CisgICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09O
VEVYVF9NRU5VX0FDVElPTl9PUEVOX0xJTktfSU5fTkVXX1dJTkRPVyk7CisgICAgICAgIGl0ZXIg
PSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9ET1dOTE9BRF9M
SU5LX1RPX0RJU0spOworICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NP
TlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9MSU5LX1RPX0NMSVBCT0FSRCk7CisgICAgICAgIGdfYXNz
ZXJ0KCFpdGVyKTsKKworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBnX2Fz
c2VydF9ub3RfcmVhY2hlZCgpOworICAgIH0KKworICAgIGdfbGlzdF9mcmVlKGl0ZW1zKTsKKyAg
ICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRp
YyB2b2lkIHB1c2hFdmVudChXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3KQoreworICAgIEdka0V2ZW50
ICpldmVudCA9IGdka19ldmVudF9uZXcoR0RLX0JVVFRPTl9QUkVTUyk7CisjaWYgR1RLX0NIRUNL
X1ZFUlNJT04oMywgMCwgMCkKKyAgICBHZGtEZXZpY2VNYW5hZ2VyICpkZXZpY2VNYW5hZ2VyOwor
I2VuZGlmCisKKyAgICBldmVudC0+YW55LndpbmRvdyA9IGdfb2JqZWN0X3JlZihndGtfd2lkZ2V0
X2dldF93aW5kb3coR1RLX1dJREdFVCh3ZWJWaWV3KSkpOworICAgIGV2ZW50LT5hbnkuc2VuZF9l
dmVudCA9IEZBTFNFOworICAgIGV2ZW50LT5idXR0b24udGltZSA9IEdES19DVVJSRU5UX1RJTUU7
CisgICAgZXZlbnQtPmJ1dHRvbi5idXR0b24gPSAzOworICAgIGV2ZW50LT5idXR0b24ueCA9IGV2
ZW50LT5idXR0b24ueSA9IDU7CisgICAgZXZlbnQtPmJ1dHRvbi54X3Jvb3QgPSBldmVudC0+YnV0
dG9uLng7CisgICAgZXZlbnQtPmJ1dHRvbi55X3Jvb3QgPSBldmVudC0+YnV0dG9uLnk7CisjaWYg
R1RLX0NIRUNLX1ZFUlNJT04oMywgMCwgMCkKKyAgICBkZXZpY2VNYW5hZ2VyID0gZ2RrX2Rpc3Bs
YXlfZ2V0X2RldmljZV9tYW5hZ2VyKGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCkpOworICAgIGV2
ZW50LT5idXR0b24uZGV2aWNlID0gZ2RrX2RldmljZV9tYW5hZ2VyX2dldF9jbGllbnRfcG9pbnRl
cihkZXZpY2VNYW5hZ2VyKTsKKyNlbmRpZgorCisgICAgZ2RrX2V2ZW50X3B1dChldmVudCk7Cisg
ICAgZ2RrX2V2ZW50X2ZyZWUoZXZlbnQpOworfQorCitzdGF0aWMgdm9pZCBsb2FkU3RhdHVzQ2Fs
bGJhY2soV2ViS2l0V2ViVmlldyAqd2ViVmlldywgR1BhcmFtU3BlYyAqc3BlYywgZ3BvaW50ZXIg
ZGF0YSkKK3sKKyAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJfdmlld19n
ZXRfbG9hZF9zdGF0dXMod2ViVmlldyk7CisgICAgVGVzdEluZm8gKmluZm8gPSAoVGVzdEluZm8g
KilkYXRhOworCisgICAgZ19hc3NlcnQoc3RhdHVzICE9IFdFQktJVF9MT0FEX0ZBSUxFRCk7CisK
KyAgICBpZiAoc3RhdHVzICE9IFdFQktJVF9MT0FEX0ZJTklTSEVEKQorICAgICAgICByZXR1cm47
CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJjb250ZXh0LW1lbnUiLCBHX0NBTExC
QUNLKGNvbnRleHRNZW51Q2FsbGJhY2spLCBpbmZvKTsKKyAgICBwdXNoRXZlbnQod2ViVmlldyk7
Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBtYXBFdmVudENhbGxiYWNrKEd0a1dpZGdldCAqd2lkZ2V0
LCBHZGtFdmVudCAqZXZlbnQsIGdwb2ludGVyIGRhdGEpCit7CisgICAgZ3RrX3dpZGdldF9ncmFi
X2ZvY3VzKHdpZGdldCk7CisgICAgQ29udGV4dE1lbnVGaXh0dXJlICpmaXh0dXJlID0gKENvbnRl
eHRNZW51Rml4dHVyZSAqKWRhdGE7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKGZp
eHR1cmUtPndlYlZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeHR1cmUt
PmluZm8tPmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXh0L2h0bWwi
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXRmLTgiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiZmlsZTovLyIpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4
dHVyZS0+d2ViVmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLCBHX0NBTExCQUNLKGxvYWRTdGF0
dXNDYWxsYmFjayksIGZpeHR1cmUtPmluZm8pOworICAgIHJldHVybiBGQUxTRTsKK30KKworc3Rh
dGljIHZvaWQgdGVzdENvbnRleHRNZW51KENvbnRleHRNZW51Rml4dHVyZSAqZml4dHVyZSwgZ2Nv
bnN0cG9pbnRlciBkYXRhKQoreworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwg
MCwgNTAsIDUwIH07CisgICAgR3RrV2lkZ2V0ICp3aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtf
V0lORE9XX1BPUFVQKTsKKworICAgIGd0a193aW5kb3dfcmVzaXplKEdUS19XSU5ET1cod2luZG93
KSwgNTAsIDUwKTsKKyAgICBndGtfd2luZG93X21vdmUoR1RLX1dJTkRPVyh3aW5kb3cpLCAwLCAw
KTsKKyAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVChmaXh0dXJlLT53ZWJW
aWV3KSwgJmFsbG9jYXRpb24pOworICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIo
d2luZG93KSwgR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSk7CisgICAgZ19zaWduYWxfY29u
bmVjdCh3aW5kb3csICJtYXAtZXZlbnQiLCBHX0NBTExCQUNLKG1hcEV2ZW50Q2FsbGJhY2spLCBm
aXh0dXJlKTsKKyAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7CisKKyAgICBnX21haW5f
bG9vcF9ydW4obG9vcCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBjb250ZXh0TWVudUN1c3RvbUl0
ZW1DYWxsYmFjayhXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3LCBHdGtXaWRnZXQgKmRlZmF1bHRNZW51
LCBXZWJLaXRIaXRUZXN0UmVzdWx0ICpoaXRUZXN0UmVzdWx0LCBnYm9vbGVhbiBrZXlib2FyZE1v
ZGUsIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIFRlc3RJbmZvICppbmZvID0gKFRlc3RJbmZv
ICopdXNlckRhdGE7CisgICAgZ3VpbnQgY29udGV4dDsKKyAgICBHTGlzdCAqaXRlbXM7CisgICAg
R0xpc3QgKml0ZXI7CisgICAgR3RrV2lkZ2V0ICptZW51SXRlbTsKKyAgICBHdGtBY3Rpb24gKmFj
dGlvbjsKKworICAgIC8qIENoZWNrIHNpZ25hbCBwYXJhbWV0ZXJzICovCisgICAgZ19hc3NlcnQo
V0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpKTsKKyAgICBnX2Fzc2VydChHVEtfSVNfTUVOVShk
ZWZhdWx0TWVudSkpOworICAgIGdfYXNzZXJ0KFdFQktJVF9JU19ISVRfVEVTVF9SRVNVTFQoaGl0
VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCFrZXlib2FyZE1vZGUpOworCisgICAgZ19vYmpl
Y3RfZ2V0KGhpdFRlc3RSZXN1bHQsICJjb250ZXh0IiwgJmNvbnRleHQsIE5VTEwpOworICAgIGdf
YXNzZXJ0KGNvbnRleHQgJiBpbmZvLT5mbGFnKTsKKworICAgIGFjdGlvbiA9IGd0a19hY3Rpb25f
bmV3KCJUZXN0QWN0aW9uIiwgIkN1c3RvbSBBY3Rpb24iLCAiQ3VzdG9tIEFjdGlvbiBUb29sdGlw
IiwgTlVMTCk7CisgICAgbWVudUl0ZW0gPSBndGtfYWN0aW9uX2NyZWF0ZV9tZW51X2l0ZW0oYWN0
aW9uKTsKKyAgICBnX29iamVjdF91bnJlZihhY3Rpb24pOworCisgICAgZ3RrX21lbnVfc2hlbGxf
YXBwZW5kKEdUS19NRU5VX1NIRUxMKGRlZmF1bHRNZW51KSwgbWVudUl0ZW0pOworICAgIGd0a193
aWRnZXRfc2hvdyhtZW51SXRlbSk7CisKKyAgICBpdGVtcyA9IGd0a19jb250YWluZXJfZ2V0X2No
aWxkcmVuKEdUS19DT05UQUlORVIoZGVmYXVsdE1lbnUpKTsKKyAgICBpdGVyID0gaXRlbXM7Cisg
ICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0dP
X0JBQ0spOworICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5V
X0FDVElPTl9HT19GT1JXQVJEKTsKKyAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lU
X0NPTlRFWFRfTUVOVV9BQ1RJT05fU1RPUCk7CisgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIs
IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1JFTE9BRCk7CisgICAgaXRlciA9IGNoZWNrQWN0
aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX05PX0FDVElPTik7CisgICAgZ19h
c3NlcnQoIWl0ZXIpOworCisgICAgZ19saXN0X2ZyZWUoaXRlbXMpOworICAgIGdfbWFpbl9sb29w
X3F1aXQobG9vcCk7CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQgdGVzdENv
bnRleHRNZW51Q3VzdG9tSXRlbShDb250ZXh0TWVudUZpeHR1cmUgKmZpeHR1cmUsIGdjb25zdHBv
aW50ZXIgZGF0YSkKK3sKKyAgICBHdGtXaWRnZXQgKndpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdU
S19XSU5ET1dfUE9QVVApOworICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2lu
ZG93KSwgR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSk7CisgICAgZ3RrX3dpZGdldF9zaG93
X2FsbCh3aW5kb3cpOworICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1cyhHVEtfV0lER0VUKGZpeHR1
cmUtPndlYlZpZXcpKTsKKworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhmaXh0dXJl
LT53ZWJWaWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXh0dXJlLT5pbmZv
LT5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGV4dC9odG1sIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInV0Zi04IiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImZpbGU6Ly8iKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUt
PndlYlZpZXcsICJjb250ZXh0LW1lbnUiLCBHX0NBTExCQUNLKGNvbnRleHRNZW51Q3VzdG9tSXRl
bUNhbGxiYWNrKSwgZml4dHVyZS0+aW5mbyk7CisgICAgcHVzaEV2ZW50KGZpeHR1cmUtPndlYlZp
ZXcpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgZ3RrX3Rl
c3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKKworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvdGVzdGNv
bnRleHRtZW51L2RvY3VtZW50IiwgQ29udGV4dE1lbnVGaXh0dXJlLAorICAgICAgICAgICAgICAg
dGVzdEluZm9OZXcoIjxodG1sPjxib2R5PjxoMT5XZWJLaXRHVEsrITwvaDE+PC9ib2R5PjwvaHRt
bD4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9D
T05URVhUX0RPQ1VNRU5UKSwKKyAgICAgICAgICAgICAgIGNvbnRleHRNZW51Rml4dHVyZVNldHVw
LCB0ZXN0Q29udGV4dE1lbnUsIGNvbnRleHRNZW51Rml4dHVyZVRlYXJkb3duKTsKKyAgICAvKiBX
ZSBoYXJkY29kZSBhbGwgZWxlbWVudHMgdG8gYmUgYXQgMCwwIHNvIHRoYXQgd2Uga25vdyB3aGVy
ZSB0byBnZW5lcmF0ZSB0aGUgYnV0dG9uIGV2ZW50cyAqLworICAgIGdfdGVzdF9hZGQoIi93ZWJr
aXQvdGVzdGNvbnRleHRtZW51L2ltYWdlIiwgQ29udGV4dE1lbnVGaXh0dXJlLAorICAgICAgICAg
ICAgICAgdGVzdEluZm9OZXcoIjxodG1sPjxib2R5PjxpbWcgc3R5bGU9J3Bvc2l0aW9uOmFic29s
dXRlOyBsZWZ0OjA7IHRvcDowJyBzcmM9JzB4ZGVhZGJlZWYnIHdpZHRoPTUwIGhlaWdodD01MD48
L2ltZz48L2JvZHk+PC9odG1sPiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRf
SElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfSU1BR0UpLAorICAgICAgICAgICAgICAgY29udGV4dE1l
bnVGaXh0dXJlU2V0dXAsIHRlc3RDb250ZXh0TWVudSwgY29udGV4dE1lbnVGaXh0dXJlVGVhcmRv
d24pOworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvdGVzdGNvbnRleHRtZW51L2VkaXRhYmxlIiwg
Q29udGV4dE1lbnVGaXh0dXJlLAorICAgICAgICAgICAgICAgdGVzdEluZm9OZXcoIjxodG1sPjxi
b2R5PjxpbnB1dCBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MDsgdG9wOjAnIHNpemU9
JzM1Jz48L2lucHV0Pj48L2JvZHk+PC9odG1sPiIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfRURJVEFCTEUpLAorICAgICAgICAgICAg
ICAgY29udGV4dE1lbnVGaXh0dXJlU2V0dXAsIHRlc3RDb250ZXh0TWVudSwgY29udGV4dE1lbnVG
aXh0dXJlVGVhcmRvd24pOworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvdGVzdGNvbnRleHRtZW51
L2xpbmsiLCBDb250ZXh0TWVudUZpeHR1cmUsCisgICAgICAgICAgICAgICB0ZXN0SW5mb05ldygi
PGh0bWw+PGJvZHk+PGEgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjA7IHRvcDowJyBo
cmVmPSdodHRwOi8vd3d3LmV4YW1wbGUuY29tJz5IRUxMTyBXT1JMRDwvYT48L2JvZHk+PC9odG1s
PiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NP
TlRFWFRfTElOSyksCisgICAgICAgICAgICAgICBjb250ZXh0TWVudUZpeHR1cmVTZXR1cCwgdGVz
dENvbnRleHRNZW51LCBjb250ZXh0TWVudUZpeHR1cmVUZWFyZG93bik7CisgICAgZ190ZXN0X2Fk
ZCgiL3dlYmtpdC90ZXN0Y29udGV4dG1lbnUvY3VzdG9taXRlbSIsIENvbnRleHRNZW51Rml4dHVy
ZSwKKyAgICAgICAgICAgICAgIHRlc3RJbmZvTmV3KCI8aHRtbD48Ym9keT48aDE+V2ViS2l0R1RL
KyE8L2gxPjwvYm9keT48L2h0bWw+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJ
VF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9ET0NVTUVOVCksCisgICAgICAgICAgICAgICBjb250
ZXh0TWVudUZpeHR1cmVTZXR1cCwgdGVzdENvbnRleHRNZW51Q3VzdG9tSXRlbSwgY29udGV4dE1l
bnVGaXh0dXJlVGVhcmRvd24pOworCisgICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsKK30KKwpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGNvcHlhbmRw
YXN0ZS5jIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGNvcHlhbmRw
YXN0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmJiMzhlYTY2YjA0NTRiYTZhNjA4YmMxODYxZjI5MWYzOTVmMDQx
M2YKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0
ay90ZXN0Y29weWFuZHBhc3RlLmMKQEAgLTAsMCArMSwyNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxlcnJu
by5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUg
PGdsaWIvZ3N0ZGlvLmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgorI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlND
b250ZXh0UmVmLmg+CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjaGFyKiBwYWdlOworICAgIGNo
YXIqIGV4cGVjdGVkQ29udGVudDsKK30gVGVzdEluZm87CisKK3R5cGVkZWYgc3RydWN0IHsKKyAg
ICBHdGtXaWRnZXQqIHdpbmRvdzsKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OworICAgIEdN
YWluTG9vcCogbG9vcDsKKyAgICBUZXN0SW5mbyogaW5mbzsKK30gQ29weUFuZFBhc3RlRml4dHVy
ZTsKKworVGVzdEluZm8qCit0ZXN0X2luZm9fbmV3KGNvbnN0IGNoYXIqIHBhZ2UsIGNvbnN0IGNo
YXIqIGV4cGVjdGVkQ29udGVudCkKK3sKKyAgICBUZXN0SW5mbyogaW5mbzsKKyAgICBpbmZvID0g
Z19zbGljZV9uZXcwKFRlc3RJbmZvKTsKKyAgICBpbmZvLT5wYWdlID0gZ19zdHJkdXAocGFnZSk7
CisgICAgaWYgKGV4cGVjdGVkQ29udGVudCkKKyAgICAgICAgaW5mby0+ZXhwZWN0ZWRDb250ZW50
ID0gZ19zdHJkdXAoZXhwZWN0ZWRDb250ZW50KTsKKyAgICByZXR1cm4gaW5mbzsKK30KKwordm9p
ZAordGVzdF9pbmZvX2Rlc3Ryb3koVGVzdEluZm8qIGluZm8pCit7CisgICAgZ19mcmVlKGluZm8t
PnBhZ2UpOworICAgIGdfZnJlZShpbmZvLT5leHBlY3RlZENvbnRlbnQpOworICAgIGdfc2xpY2Vf
ZnJlZShUZXN0SW5mbywgaW5mbyk7Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlfYW5kX3Bhc3RlX2Zp
eHR1cmVfc2V0dXAoQ29weUFuZFBhc3RlRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBk
YXRhKQoreworICAgIGZpeHR1cmUtPmxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7
CisKKyAgICBmaXh0dXJlLT53aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExF
VkVMKTsKKyAgICBmaXh0dXJlLT53ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJf
dmlld19uZXcoKSk7CisKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGZpeHR1
cmUtPndpbmRvdyksIEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldykpOworfQorCitzdGF0aWMg
dm9pZCBjb3B5X2FuZF9wYXN0ZV9maXh0dXJlX3RlYXJkb3duKENvcHlBbmRQYXN0ZUZpeHR1cmUq
IGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBndGtfd2lkZ2V0X2Rlc3Ryb3ko
Zml4dHVyZS0+d2luZG93KTsKKyAgICBnX21haW5fbG9vcF91bnJlZihmaXh0dXJlLT5sb29wKTsK
KyAgICB0ZXN0X2luZm9fZGVzdHJveShmaXh0dXJlLT5pbmZvKTsKK30KKworc3RhdGljIHZvaWQg
bG9hZF9zdGF0dXNfY2IoV2ViS2l0V2ViVmlldyogd2ViVmlldywgR1BhcmFtU3BlYyogc3BlYywg
Z3BvaW50ZXIgZGF0YSkKK3sKKyAgICBDb3B5QW5kUGFzdGVGaXh0dXJlKiBmaXh0dXJlID0gKENv
cHlBbmRQYXN0ZUZpeHR1cmUqKWRhdGE7CisgICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYlZpZXcpOworICAgIGlmIChzdGF0dXMg
IT0gV0VCS0lUX0xPQURfRklOSVNIRUQpCisgICAgICAgIHJldHVybjsKKworICAgIEd0a0NsaXBi
b2FyZCogY2xpcGJvYXJkID0gZ3RrX2NsaXBib2FyZF9nZXQoR0RLX1NFTEVDVElPTl9DTElQQk9B
UkQpOworICAgIGd0a19jbGlwYm9hcmRfY2xlYXIoY2xpcGJvYXJkKTsKKworICAgIHdlYmtpdF93
ZWJfdmlld19jb3B5X2NsaXBib2FyZCh3ZWJWaWV3KTsKKworICAgIGdjaGFyKiB0ZXh0ID0gZ3Rr
X2NsaXBib2FyZF93YWl0X2Zvcl90ZXh0KGNsaXBib2FyZCk7CisgICAgZ19hc3NlcnQodGV4dCB8
fCAhZml4dHVyZS0+aW5mby0+ZXhwZWN0ZWRDb250ZW50KTsKKyAgICBnX2Fzc2VydCghdGV4dCB8
fCAhc3RyY21wKHRleHQsIGZpeHR1cmUtPmluZm8tPmV4cGVjdGVkQ29udGVudCkpOworICAgIGdf
ZnJlZSh0ZXh0KTsKKworICAgIC8vIFZlcmlmeSB0aGF0IHRoZSBtYXJrdXAgc3RhcnRzIHdpdGgg
dGhlIHByb3BlciBjb250ZW50LXR5cGUgbWV0YSB0YWcgcHJlZml4LgorICAgIEd0a1NlbGVjdGlv
bkRhdGEqIHNlbGVjdGlvbkRhdGEgPSBndGtfY2xpcGJvYXJkX3dhaXRfZm9yX2NvbnRlbnRzKGNs
aXBib2FyZCwgZ2RrX2F0b21faW50ZXJuKCJ0ZXh0L2h0bWwiLCBGQUxTRSkpOworICAgIGlmIChz
ZWxlY3Rpb25EYXRhKSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBtYXJrdXBQcmVmaXgg
PSAiPG1ldGEgaHR0cC1lcXVpdj1cImNvbnRlbnQtdHlwZVwiIGNvbnRlbnQ9XCJ0ZXh0L2h0bWw7
IGNoYXJzZXQ9dXRmLThcIj4iOworICAgICAgICBjaGFyKiBtYXJrdXAgPSBnX3N0cm5kdXAoKGNv
bnN0IGNoYXIqKSBndGtfc2VsZWN0aW9uX2RhdGFfZ2V0X2RhdGEoc2VsZWN0aW9uRGF0YSksCisg
ICAgICAgICAgICBndGtfc2VsZWN0aW9uX2RhdGFfZ2V0X2xlbmd0aChzZWxlY3Rpb25EYXRhKSk7
CisgICAgICAgIGdfYXNzZXJ0KHN0cmxlbihtYXJrdXBQcmVmaXgpIDw9IHN0cmxlbihtYXJrdXAp
KTsKKyAgICAgICAgZ19hc3NlcnQoIXN0cm5jbXAobWFya3VwUHJlZml4LCBtYXJrdXAsIHN0cmxl
bihtYXJrdXBQcmVmaXgpKSk7CisgICAgICAgIGdfZnJlZShtYXJrdXApOworICAgIH0KKworICAg
IGdfYXNzZXJ0KCFndGtfY2xpcGJvYXJkX3dhaXRfaXNfdXJpc19hdmFpbGFibGUoY2xpcGJvYXJk
KSk7CisgICAgZ19hc3NlcnQoIWd0a19jbGlwYm9hcmRfd2FpdF9pc19pbWFnZV9hdmFpbGFibGUo
Y2xpcGJvYXJkKSk7CisKKyAgICBnX21haW5fbG9vcF9xdWl0KGZpeHR1cmUtPmxvb3ApOworfQor
CitnYm9vbGVhbiBtYXBfZXZlbnRfY2IoR3RrV2lkZ2V0ICp3aWRnZXQsIEdka0V2ZW50KiBldmVu
dCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBDb3B5QW5kUGFzdGVGaXh0dXJlKiBmaXh0dXJlID0g
KENvcHlBbmRQYXN0ZUZpeHR1cmUqKWRhdGE7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3Ry
aW5nKGZpeHR1cmUtPndlYlZpZXcsIGZpeHR1cmUtPmluZm8tPnBhZ2UsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJ0ZXh0L2h0bWwiLCAidXRmLTgiLCAiZmlsZTovLyIpOworICAg
IHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9jb3B5X2FuZF9wYXN0ZShDb3B5
QW5kUGFzdGVGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgZml4
dHVyZS0+aW5mbyA9IChUZXN0SW5mbyopZGF0YTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1
cmUtPndpbmRvdywgIm1hcC1ldmVudCIsCisgICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNL
KG1hcF9ldmVudF9jYiksIGZpeHR1cmUpOworCisgICAgZ3RrX3dpZGdldF9zaG93KGZpeHR1cmUt
PndpbmRvdyk7CisgICAgZ3RrX3dpZGdldF9zaG93KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmll
dykpOworICAgIGd0a193aW5kb3dfcHJlc2VudChHVEtfV0lORE9XKGZpeHR1cmUtPndpbmRvdykp
OworICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1cyhHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcp
KTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2ViVmlldywgIm5vdGlmeTo6bG9h
ZC1zdGF0dXMiLAorICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhsb2FkX3N0YXR1c19j
YiksIGZpeHR1cmUpOworCisgICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1cmUtPmxvb3ApOworfQor
CitzdGF0aWMgQ29weUFuZFBhc3RlRml4dHVyZSogY3VycmVudEZpeHR1cmU7CitzdGF0aWMgSlNW
YWx1ZVJlZiBydW5QYXN0ZVRlc3RDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmpl
Y3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENv
dW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
Cit7CisgICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKEdUS19XSURHRVQoY3VycmVudEZpeHR1cmUt
PndlYlZpZXcpKTsKKworICAgIC8vIFNpbXVsYXRlIGEgcGFzdGUga2V5Ym9hcmQgc2VxdWVuY2Uu
CisgICAgR2RrRXZlbnQqIGV2ZW50ID0gZ2RrX2V2ZW50X25ldyhHREtfS0VZX1BSRVNTKTsKKyAg
ICBldmVudC0+a2V5LmtleXZhbCA9IGdka191bmljb2RlX3RvX2tleXZhbCgndicpOworICAgIGV2
ZW50LT5rZXkuc3RhdGUgPSBHREtfQ09OVFJPTF9NQVNLOworICAgIGV2ZW50LT5rZXkud2luZG93
ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KEdUS19XSURHRVQoY3VycmVudEZpeHR1cmUtPndlYlZp
ZXcpKTsKKyAgICBnX29iamVjdF9yZWYoZXZlbnQtPmtleS53aW5kb3cpOworI2lmbmRlZiBHVEtf
QVBJX1ZFUlNJT05fMgorICAgIEdka0RldmljZU1hbmFnZXIqIG1hbmFnZXIgPSAgZ2RrX2Rpc3Bs
YXlfZ2V0X2RldmljZV9tYW5hZ2VyKGdka193aW5kb3dfZ2V0X2Rpc3BsYXkoZXZlbnQtPmtleS53
aW5kb3cpKTsKKyAgICBnZGtfZXZlbnRfc2V0X2RldmljZShldmVudCwgZ2RrX2RldmljZV9tYW5h
Z2VyX2dldF9jbGllbnRfcG9pbnRlcihtYW5hZ2VyKSk7CisjZW5kaWYKKworICAgIEdka0tleW1h
cEtleSoga2V5czsKKyAgICBnaW50IG5fa2V5czsKKyAgICBpZiAoZ2RrX2tleW1hcF9nZXRfZW50
cmllc19mb3Jfa2V5dmFsKGdka19rZXltYXBfZ2V0X2RlZmF1bHQoKSwgZXZlbnQtPmtleS5rZXl2
YWwsICZrZXlzLCAmbl9rZXlzKSkgeworICAgICAgICBldmVudC0+a2V5LmhhcmR3YXJlX2tleWNv
ZGUgPSBrZXlzWzBdLmtleWNvZGU7CisgICAgICAgIGdfZnJlZShrZXlzKTsKKyAgICB9CisKKyAg
ICBndGtfbWFpbl9kb19ldmVudChldmVudCk7CisgICAgZXZlbnQtPmtleS50eXBlID0gR0RLX0tF
WV9SRUxFQVNFOworICAgIGd0a19tYWluX2RvX2V2ZW50KGV2ZW50KTsKKyAgICBnZGtfZXZlbnRf
ZnJlZShldmVudCk7CisKKyAgICBKU1N0cmluZ1JlZiBzY3JpcHRTdHJpbmcgPSBKU1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiZG9jdW1lbnQuYm9keS5pbm5lckhUTUw7Iik7CisgICAgSlNW
YWx1ZVJlZiB2YWx1ZSA9IEpTRXZhbHVhdGVTY3JpcHQoY29udGV4dCwgc2NyaXB0U3RyaW5nLCAw
LCAwLCAwLCAwKTsKKyAgICBKU1N0cmluZ1JlbGVhc2Uoc2NyaXB0U3RyaW5nKTsKKworICAgIGdf
YXNzZXJ0KEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCB2YWx1ZSkpOworICAgIEpTU3RyaW5nUmVm
IGFjdHVhbCA9IEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsIGV4Y2VwdGlvbik7
CisgICAgZ19hc3NlcnQoIWV4Y2VwdGlvbiB8fCAhKmV4Y2VwdGlvbik7CisgICAgZ19hc3NlcnQo
Y3VycmVudEZpeHR1cmUtPmluZm8tPmV4cGVjdGVkQ29udGVudCk7CisgICAgSlNTdHJpbmdSZWYg
ZXhwZWN0ZWQgPSBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhjdXJyZW50Rml4dHVyZS0+
aW5mby0+ZXhwZWN0ZWRDb250ZW50KTsKKyAgICBnX2Fzc2VydChKU1N0cmluZ0lzRXF1YWwoZXhw
ZWN0ZWQsIGFjdHVhbCkpOworCisgICAgSlNTdHJpbmdSZWxlYXNlKGV4cGVjdGVkKTsKKyAgICBK
U1N0cmluZ1JlbGVhc2UoYWN0dWFsKTsKKyAgICBnX21haW5fbG9vcF9xdWl0KGN1cnJlbnRGaXh0
dXJlLT5sb29wKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9
CisKK3N0YXRpYyB2b2lkIHdpbmRvd19vYmplY3RfY2xlYXJlZF9jYWxsYmFjayhXZWJLaXRXZWJW
aWV3KiB3ZWJfdmlldywgV2ViS2l0V2ViRnJhbWUqIHdlYl9mcmFtZSwgSlNHbG9iYWxDb250ZXh0
UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHdpbmRvd19vYmplY3QsIGdwb2ludGVyIGRhdGEpCit7
CisgICAgSlNTdHJpbmdSZWYgbmFtZSA9IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJy
dW5UZXN0Iik7CisgICAgSlNPYmplY3RSZWYgdGVzdENvbXBsZXRlID0gSlNPYmplY3RNYWtlRnVu
Y3Rpb25XaXRoQ2FsbGJhY2soY29udGV4dCwgbmFtZSwgcnVuUGFzdGVUZXN0Q2FsbGJhY2spOwor
ICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwgd2luZG93X29iamVjdCwgbmFtZSwgdGVz
dENvbXBsZXRlLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUsIDApOworICAgIEpTU3RyaW5nUmVs
ZWFzZShuYW1lKTsKK30KKworc3RhdGljIHZvaWQgcGFzdGluZ190ZXN0X2dldF9kYXRhX2NhbGxi
YWNrKEd0a0NsaXBib2FyZCogY2xpcGJvYXJkLCBHdGtTZWxlY3Rpb25EYXRhKiBzZWxlY3Rpb25f
ZGF0YSwgZ3VpbnQgaW5mbywgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBndGtfc2VsZWN0aW9uX2Rh
dGFfc2V0KHNlbGVjdGlvbl9kYXRhLCBnZGtfYXRvbV9pbnRlcm4oInRleHQvaHRtbCIsIEZBTFNF
KSwgOCwgKGNvbnN0IGd1Y2hhciopIGRhdGEsIHN0cmxlbigoY2hhciopZGF0YSkgKyAxKTsKK30K
Kworc3RhdGljIHZvaWQgcGFzdGluZ190ZXN0X2NsZWFyX2RhdGFfY2FsbGJhY2soR3RrQ2xpcGJv
YXJkKiBjbGlwYm9hcmQsIGdwb2ludGVyIGRhdGEpCit7CisgICAgZ19mcmVlKGRhdGEpOworfQor
CitzdGF0aWMgdm9pZCB0ZXN0X3Bhc3RpbmdfbWFya3VwKENvcHlBbmRQYXN0ZUZpeHR1cmUqIGZp
eHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBmaXh0dXJlLT5pbmZvID0gKFRlc3RJ
bmZvKilkYXRhOworICAgIGN1cnJlbnRGaXh0dXJlID0gZml4dHVyZTsKKworICAgIEd0a1Rhcmdl
dExpc3QqIHRhcmdldExpc3QgPSBndGtfdGFyZ2V0X2xpc3RfbmV3KDAsIDApOworICAgIGd0a190
YXJnZXRfbGlzdF9hZGQodGFyZ2V0TGlzdCwgZ2RrX2F0b21faW50ZXJuKCJ0ZXh0L2h0bWwiLCBG
QUxTRSksIDAsIDApOworCisgICAgaW50IG51bWJlck9mVGFyZ2V0cyA9IDE7CisgICAgR3RrVGFy
Z2V0RW50cnkqIHRhcmdldFRhYmxlID0gZ3RrX3RhcmdldF90YWJsZV9uZXdfZnJvbV9saXN0KHRh
cmdldExpc3QsICZudW1iZXJPZlRhcmdldHMpOworICAgIGd0a19jbGlwYm9hcmRfc2V0X3dpdGhf
ZGF0YShndGtfY2xpcGJvYXJkX2dldChHREtfU0VMRUNUSU9OX0NMSVBCT0FSRCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFRhYmxlLCBudW1iZXJPZlRhcmdldHMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RpbmdfdGVzdF9nZXRfZGF0YV9jYWxs
YmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzdGluZ190ZXN0X2NsZWFy
X2RhdGFfY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfc3RyZHVw
KGZpeHR1cmUtPmluZm8tPmV4cGVjdGVkQ29udGVudCkpOworICAgIGd0a190YXJnZXRfbGlzdF91
bnJlZih0YXJnZXRMaXN0KTsKKyAgICBndGtfdGFyZ2V0X3RhYmxlX2ZyZWUodGFyZ2V0VGFibGUs
IG51bWJlck9mVGFyZ2V0cyk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndpbmRv
dywgIm1hcC1ldmVudCIsCisgICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKG1hcF9ldmVu
dF9jYiksIGZpeHR1cmUpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2ViVmlldywg
IndpbmRvdy1vYmplY3QtY2xlYXJlZCIsCisgICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNL
KHdpbmRvd19vYmplY3RfY2xlYXJlZF9jYWxsYmFjayksIGZpeHR1cmUpOworCisgICAgZ3RrX3dp
ZGdldF9zaG93KGZpeHR1cmUtPndpbmRvdyk7CisgICAgZ3RrX3dpZGdldF9zaG93KEdUS19XSURH
RVQoZml4dHVyZS0+d2ViVmlldykpOworICAgIGd0a193aW5kb3dfcHJlc2VudChHVEtfV0lORE9X
KGZpeHR1cmUtPndpbmRvdykpOworCisgICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1cmUtPmxvb3Ap
OworfQorCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBndGtfdGVz
dF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7CisKKyAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBz
Oi8vYnVncy53ZWJraXQub3JnLyIpOworICAgIGNvbnN0IGNoYXIqIHNlbGVjdGVkX3NwYW5faHRt
bCA9ICI8aHRtbD48Ym9keT4iCisgICAgICAgICI8c3BhbiBpZD1cIm1haW5zcGFuXCI+QWxsIHdv
cmsgYW5kIG5vIHBsYXkgPHNwYW4+bWFrZSBKYWNrIGEgZHVsbDwvc3Bhbj4gYm95Ljwvc3Bhbj4i
CisgICAgICAgICI8c2NyaXB0PmRvY3VtZW50LmdldFNlbGVjdGlvbigpLmNvbGxhcHNlKCk7XG4i
CisgICAgICAgICJkb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJlbihkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbnNwYW4nKSk7XG4iCisgICAgICAgICI8L3NjcmlwdD48
L2JvZHk+PC9odG1sPiI7CisgICAgY29uc3QgY2hhciogbm9fc2VsZWN0aW9uX2h0bWwgPSAiPGh0
bWw+PGJvZHk+IgorICAgICAgICAiPHNwYW4gaWQ9XCJtYWluc3BhblwiPkFsbCB3b3JrIGFuZCBu
byBwbGF5IDxzcGFuPm1ha2UgSmFjayBhIGR1bGw8L3NwYW4+IGJveTwvc3Bhbj4iCisgICAgICAg
ICI8c2NyaXB0PmRvY3VtZW50LmdldFNlbGVjdGlvbigpLmNvbGxhcHNlKCk7XG4iCisgICAgICAg
ICI8L3NjcmlwdD48L2JvZHk+PC9odG1sPiI7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2Nv
cHlhbmRwYXN0ZS9zZWxlY3Rpb24iLCBDb3B5QW5kUGFzdGVGaXh0dXJlLAorICAgICAgICAgICAg
ICAgdGVzdF9pbmZvX25ldyhzZWxlY3RlZF9zcGFuX2h0bWwsICJBbGwgd29yayBhbmQgbm8gcGxh
eSBtYWtlIEphY2sgYSBkdWxsIGJveS4iKSwKKyAgICAgICAgICAgICAgIGNvcHlfYW5kX3Bhc3Rl
X2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0X2NvcHlfYW5kX3Bhc3RlLAorICAg
ICAgICAgICAgICAgY29weV9hbmRfcGFzdGVfZml4dHVyZV90ZWFyZG93bik7CisgICAgZ190ZXN0
X2FkZCgiL3dlYmtpdC9jb3B5YW5kcGFzdGUvbm8tc2VsZWN0aW9uIiwgQ29weUFuZFBhc3RlRml4
dHVyZSwKKyAgICAgICAgICAgICAgIHRlc3RfaW5mb19uZXcobm9fc2VsZWN0aW9uX2h0bWwsIDAp
LAorICAgICAgICAgICAgICAgY29weV9hbmRfcGFzdGVfZml4dHVyZV9zZXR1cCwKKyAgICAgICAg
ICAgICAgIHRlc3RfY29weV9hbmRfcGFzdGUsCisgICAgICAgICAgICAgICBjb3B5X2FuZF9wYXN0
ZV9maXh0dXJlX3RlYXJkb3duKTsKKworICAgIGNvbnN0IGNoYXIqIHBhc3RlX3Rlc3RfaHRtbCA9
ICI8aHRtbD4iCisgICAgICAgICI8Ym9keSBvbkxvYWQ9XCJkb2N1bWVudC5ib2R5LmZvY3VzKCk7
IHJ1blRlc3QoKTtcIiBjb250ZW50RWRpdGFibGU9XCJ0cnVlXCI+IgorICAgICAgICAiPC9ib2R5
PjwvaHRtbD4iOworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvY29weWFuZHBhc3RlL3Bhc3RlLW1h
cmt1cCIsIENvcHlBbmRQYXN0ZUZpeHR1cmUsCisgICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3
KHBhc3RlX3Rlc3RfaHRtbCwgImJvYmJ5IiksCisgICAgICAgICAgICAgICBjb3B5X2FuZF9wYXN0
ZV9maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF9wYXN0aW5nX21hcmt1cCwKKyAg
ICAgICAgICAgICAgIGNvcHlfYW5kX3Bhc3RlX2ZpeHR1cmVfdGVhcmRvd24pOworCisgICAgcmV0
dXJuIGdfdGVzdF9ydW4oKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0R3RrL3Rlc3Rkb21kb2N1bWVudC5jIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRHdGsvdGVzdGRvbWRvY3VtZW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGM5OTdkZGFkM2EwNDVj
NzYwYjE5YWI2ZGJhYmZjMDIwZTZjNWZhMQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3Rkb21kb2N1bWVudC5jCkBAIC0wLDAgKzEsNDI4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJ0ZXN0X3V0aWxzLmgiCisKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5j
bHVkZSA8Z2xpYi9nc3RkaW8uaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d2Vi
a2l0L3dlYmtpdC5oPgorCisjZGVmaW5lIEhUTUxfRE9DVU1FTlRfVElUTEUgIjxodG1sPjxoZWFk
Pjx0aXRsZT5UaGlzIGlzIHRoZSB0aXRsZTwvdGl0bGU+PC9oZWFkPjxib2R5PjwvYm9keT48L2h0
bWw+IgorI2RlZmluZSBIVE1MX0RPQ1VNRU5UX0VMRU1FTlRTICI8aHRtbD48Ym9keT48dWw+PGxp
PjE8L2xpPjxsaT4yPC9saT48bGk+MzwvbGk+PC91bD48L2JvZHk+PC9odG1sPiIKKyNkZWZpbmUg
SFRNTF9ET0NVTUVOVF9FTEVNRU5UU19DTEFTUyAiPGh0bWw+PGJvZHk+PGRpdiBjbGFzcz1cInRl
c3RcIj48L2Rpdj48ZGl2IGNsYXNzPVwic3RyYW5nZVwiPjwvZGl2PjxkaXYgY2xhc3M9XCJ0ZXN0
XCI+PC9kaXY+PC9ib2R5PjwvaHRtbD4iCisjZGVmaW5lIEhUTUxfRE9DVU1FTlRfRUxFTUVOVFNf
SUQgIjxodG1sPjxib2R5PjxkaXYgaWQ9XCJ0ZXN0b2tcIj48L2Rpdj48ZGl2IGlkPVwidGVzdGJh
ZFwiPmZpcnN0PC9kaXY+PGRpdiBpZD1cInRlc3RiYWRcIj5zZWNvbmQ8L2Rpdj48L2JvZHk+PC9o
dG1sPiIKKyNkZWZpbmUgSFRNTF9ET0NVTUVOVF9MSU5LUyAiPGh0bWw+PGhlYWQ+PHRpdGxlPlRp
dGxlPC90aXRsZT48L2hlYWQ+PGJvZHk+PGEgaHJlZj1cImFib3V0OmJsYW5rXCI+Ymxhbms8L2E+
PGEgaHJlZj1cImh0dHA6Ly93d3cuZ29vZ2xlLmNvbVwiPmdvb2dsZTwvYT48YSBocmVmPVwiaHR0
cDovL3d3dy53ZWJraXQub3JnXCI+d2Via2l0PC9hPjwvYm9keT48L2h0bWw+IgorI2RlZmluZSBI
VE1MX0RPQ1VNRU5UX0lGUkFNRSAiPGh0bWw+PGhlYWQ+PHRpdGxlPklGcmFtZTwvdGl0bGU+PC9o
ZWFkPjxib2R5PjxpZnJhbWUgaWQ9J2lmcmFtZSc+PC9pZnJhbWU+PGRpdiBpZD0ndGVzdCc+PC9k
aXY+PC9ib2R5PjwvaHRtbD4iCisjZGVmaW5lIEhUTUxfRE9DVU1FTlRfVEFCTEUgIjxodG1sPjxi
b2R5Pjx0YWJsZSBpZD1cInRhYmxlXCI+PC90YWJsZT48L2JvZHk+PC9odG1sPiIKKyNkZWZpbmUg
SFRNTF9ET0NVTUVOVF9FVkFMVUFURSAiPGh0bWw+PGhlYWQ+PHRpdGxlPjwvdGl0bGU+PC9oZWFk
Pjxib2R5PjxkaXY+Rmlyc3QgZGl2PC9kaXY+PGRpdj5TZWNvbmQgZGl2PC9kaXY+PC9ib2R5Pjwv
aHRtbD4iCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBHdGtXaWRnZXQqIHdlYlZpZXc7CisgICAg
R01haW5Mb29wKiBsb29wOworfSBEb21Eb2N1bWVudEZpeHR1cmU7CisKK3N0YXRpYyBnYm9vbGVh
biBmaW5pc2hfbG9hZGluZyhEb21Eb2N1bWVudEZpeHR1cmUqIGZpeHR1cmUpCit7CisgICAgaWYg
KGdfbWFpbl9sb29wX2lzX3J1bm5pbmcoZml4dHVyZS0+bG9vcCkpCisgICAgICAgIGdfbWFpbl9s
b29wX3F1aXQoZml4dHVyZS0+bG9vcCk7CisKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRp
YyB2b2lkIGRvbV9kb2N1bWVudF9maXh0dXJlX3NldHVwKERvbURvY3VtZW50Rml4dHVyZSogZml4
dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGZpeHR1cmUtPmxvb3AgPSBnX21haW5f
bG9vcF9uZXcoTlVMTCwgVFJVRSk7CisgICAgZml4dHVyZS0+d2ViVmlldyA9IHdlYmtpdF93ZWJf
dmlld19uZXcoKTsKKyAgICBnX29iamVjdF9yZWZfc2luayhmaXh0dXJlLT53ZWJWaWV3KTsKKwor
ICAgIGlmIChkYXRhICE9IE5VTEwpCisgICAgICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmlu
ZyhXRUJLSVRfV0VCX1ZJRVcgKGZpeHR1cmUtPndlYlZpZXcpLCAoY29uc3QgY2hhciopIGRhdGEs
IE5VTEwsIE5VTEwsIE5VTEwpOworCisgICAgZ19pZGxlX2FkZCgoR1NvdXJjZUZ1bmMpZmluaXNo
X2xvYWRpbmcsIGZpeHR1cmUpOworICAgIGdfbWFpbl9sb29wX3J1bihmaXh0dXJlLT5sb29wKTsK
K30KKworc3RhdGljIHZvaWQgZG9tX2RvY3VtZW50X2ZpeHR1cmVfdGVhcmRvd24oRG9tRG9jdW1l
bnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgaWYgKGZpeHR1
cmUtPndlYlZpZXcpCisgICAgICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPndlYlZpZXcpOwor
ICAgIGdfbWFpbl9sb29wX3VucmVmKGZpeHR1cmUtPmxvb3ApOworfQorCitzdGF0aWMgdm9pZCB0
ZXN0X2RvbV9kb2N1bWVudF90aXRsZShEb21Eb2N1bWVudEZpeHR1cmUqIGZpeHR1cmUsIGdjb25z
dHBvaW50ZXIgZGF0YSkKK3sKKyAgICBnX2Fzc2VydChmaXh0dXJlKTsKKyAgICBXZWJLaXRXZWJW
aWV3KiB2aWV3ID0gKFdlYktpdFdlYlZpZXcqKWZpeHR1cmUtPndlYlZpZXc7CisgICAgZ19hc3Nl
cnQodmlldyk7CisgICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50ID0gd2Via2l0X3dlYl92
aWV3X2dldF9kb21fZG9jdW1lbnQodmlldyk7CisgICAgZ19hc3NlcnQoZG9jdW1lbnQpOworICAg
IGdjaGFyKiB0aXRsZSA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3RpdGxlKGRvY3VtZW50KTsK
KyAgICBnX2Fzc2VydCh0aXRsZSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRpdGxlLCA9PSwgIlRo
aXMgaXMgdGhlIHRpdGxlIik7CisgICAgZ19mcmVlKHRpdGxlKTsKKyAgICB3ZWJraXRfZG9tX2Rv
Y3VtZW50X3NldF90aXRsZShkb2N1bWVudCwgIlRoaXMgaXMgdGhlIHNlY29uZCB0aXRsZSIpOwor
ICAgIHRpdGxlID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfdGl0bGUoZG9jdW1lbnQpOworICAg
IGdfYXNzZXJ0KHRpdGxlKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGl0bGUsID09LCAiVGhpcyBp
cyB0aGUgc2Vjb25kIHRpdGxlIik7CisgICAgZ19mcmVlKHRpdGxlKTsKK30KKworc3RhdGljIHZv
aWQgdGVzdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRzX2J5X3RhZ19uYW1lKERvbURvY3VtZW50
Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGdfYXNzZXJ0KGZp
eHR1cmUpOworICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSAoV2ViS2l0V2ViVmlldyopZml4dHVy
ZS0+d2ViVmlldzsKKyAgICBnX2Fzc2VydCh2aWV3KTsKKyAgICBXZWJLaXRET01Eb2N1bWVudCog
ZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKKyAgICBn
X2Fzc2VydChkb2N1bWVudCk7CisgICAgV2ViS2l0RE9NTm9kZUxpc3QqIGxpc3QgPSB3ZWJraXRf
ZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19ieV90YWdfbmFtZShkb2N1bWVudCwgImxpIik7Cisg
ICAgZ19hc3NlcnQobGlzdCk7CisgICAgZ3Vsb25nIGxlbmd0aCA9IHdlYmtpdF9kb21fbm9kZV9s
aXN0X2dldF9sZW5ndGgobGlzdCk7CisgICAgZ19hc3NlcnRfY21waW50KGxlbmd0aCwgPT0sIDMp
OworCisgICAgZ3VpbnQgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewor
ICAgICAgICBXZWJLaXRET01Ob2RlKiBpdGVtID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShs
aXN0LCBpKTsKKyAgICAgICAgZ19hc3NlcnQoaXRlbSk7CisgICAgICAgIFdlYktpdERPTUVsZW1l
bnQqIGVsZW1lbnQgPSAoV2ViS2l0RE9NRWxlbWVudCopaXRlbTsKKyAgICAgICAgZ19hc3NlcnQo
ZWxlbWVudCk7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0
X3RhZ19uYW1lKGVsZW1lbnQpLCA9PSwgIkxJIik7CisgICAgICAgIFdlYktpdERPTUhUTUxFbGVt
ZW50KiBodG1sRWxlbWVudCA9IChXZWJLaXRET01IVE1MRWxlbWVudCopZWxlbWVudDsKKyAgICAg
ICAgY2hhciogbiA9IGdfc3RyZHVwX3ByaW50ZigiJWQiLCBpKzEpOworICAgICAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0X2lubmVyX3RleHQoaHRtbEVsZW1l
bnQpLCA9PSwgbik7CisgICAgICAgIGdfZnJlZShuKTsKKyAgICB9CisKKyAgICBnX29iamVjdF91
bnJlZihsaXN0KTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1l
bnRzX2J5X2NsYXNzX25hbWUoRG9tRG9jdW1lbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2lu
dGVyIGRhdGEpCit7CisgICAgZ19hc3NlcnQoZml4dHVyZSk7CisgICAgV2ViS2l0V2ViVmlldyog
dmlldyA9IChXZWJLaXRXZWJWaWV3KilmaXh0dXJlLT53ZWJWaWV3OworICAgIGdfYXNzZXJ0KHZp
ZXcpOworICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmlld19n
ZXRfZG9tX2RvY3VtZW50KHZpZXcpOworICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsKKyAgICBXZWJL
aXRET01Ob2RlTGlzdCogbGlzdCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRzX2J5
X2NsYXNzX25hbWUoZG9jdW1lbnQsICJ0ZXN0Iik7CisgICAgZ19hc3NlcnQobGlzdCk7CisgICAg
Z3Vsb25nIGxlbmd0aCA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2dldF9sZW5ndGgobGlzdCk7Cisg
ICAgZ19hc3NlcnRfY21waW50KGxlbmd0aCwgPT0sIDIpOworCisgICAgZ3VpbnQgaTsKKworICAg
IGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBXZWJLaXRET01Ob2RlKiBp
dGVtID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0LCBpKTsKKyAgICAgICAgZ19hc3Nl
cnQoaXRlbSk7CisgICAgICAgIFdlYktpdERPTUVsZW1lbnQqIGVsZW1lbnQgPSAoV2ViS2l0RE9N
RWxlbWVudCopaXRlbTsKKyAgICAgICAgZ19hc3NlcnQoZWxlbWVudCk7CisgICAgICAgIGdfYXNz
ZXJ0X2NtcHN0cih3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3RhZ19uYW1lKGVsZW1lbnQpLCA9PSwg
IkRJViIpOworICAgIH0KKworICAgIGdfb2JqZWN0X3VucmVmKGxpc3QpOworfQorCitzdGF0aWMg
dm9pZCB0ZXN0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudF9ieV9pZChEb21Eb2N1bWVudEZpeHR1
cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBnX2Fzc2VydChmaXh0dXJl
KTsKKyAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gKFdlYktpdFdlYlZpZXcqKWZpeHR1cmUtPndl
YlZpZXc7CisgICAgZ19hc3NlcnQodmlldyk7CisgICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQodmlldyk7CisgICAgZ19hc3Nl
cnQoZG9jdW1lbnQpOworICAgIFdlYktpdERPTUVsZW1lbnQqIGVsZW1lbnQgPSB3ZWJraXRfZG9t
X2RvY3VtZW50X2dldF9lbGVtZW50X2J5X2lkKGRvY3VtZW50LCAidGVzdG9rIik7CisgICAgZ19h
c3NlcnQoZWxlbWVudCk7CisgICAgZWxlbWVudCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2Vs
ZW1lbnRfYnlfaWQoZG9jdW1lbnQsICJ0aGlzLWlkLWRvZXMtbm90LWV4aXN0Iik7CisgICAgZ19h
c3NlcnQoZWxlbWVudCA9PSAwKTsKKyAgICAvKiBUaGUgRE9NIHNwZWMgc2F5cyB0aGUgcmV0dXJu
IHZhbHVlIGlzIHVuZGVmaW5lZCB3aGVuIHRoZXJlJ3MKKyAgICAgKiBtb3JlIHRoYW4gb25lIGVs
ZW1lbnQgd2l0aCB0aGUgc2FtZSBpZDsgaW4gb3VyIGNhc2UgdGhlIGZpcnN0CisgICAgICogb25l
IHdpbGwgYmUgcmV0dXJuZWQgKi8KKyAgICBlbGVtZW50ID0gd2Via2l0X2RvbV9kb2N1bWVudF9n
ZXRfZWxlbWVudF9ieV9pZChkb2N1bWVudCwgInRlc3RiYWQiKTsKKyAgICBnX2Fzc2VydChlbGVt
ZW50KTsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudCogaHRtbEVsZW1lbnQgPSAoV2ViS2l0RE9N
SFRNTEVsZW1lbnQqKWVsZW1lbnQ7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9kb21faHRt
bF9lbGVtZW50X2dldF9pbm5lcl90ZXh0KGh0bWxFbGVtZW50KSwgPT0sICJmaXJzdCIpOworfQor
CitzdGF0aWMgdm9pZCB0ZXN0X2RvbV9kb2N1bWVudF9nZXRfbGlua3MoRG9tRG9jdW1lbnRGaXh0
dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgZ19hc3NlcnQoZml4dHVy
ZSk7CisgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IChXZWJLaXRXZWJWaWV3KilmaXh0dXJlLT53
ZWJWaWV3OworICAgIGdfYXNzZXJ0KHZpZXcpOworICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1
bWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50KHZpZXcpOworICAgIGdfYXNz
ZXJ0KGRvY3VtZW50KTsKKyAgICBXZWJLaXRET01IVE1MQ29sbGVjdGlvbiAqY29sbGVjdGlvbiA9
IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2xpbmtzKGRvY3VtZW50KTsKKyAgICBnX2Fzc2VydChj
b2xsZWN0aW9uKTsKKyAgICBndWxvbmcgbGVuZ3RoID0gd2Via2l0X2RvbV9odG1sX2NvbGxlY3Rp
b25fZ2V0X2xlbmd0aChjb2xsZWN0aW9uKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQobGVuZ3RoLCA9
PSwgMyk7CisKKyAgICBndWludCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsr
KSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBuYW1lc1tdID0geyAiYmxhbmsiLCAiZ29v
Z2xlIiwgIndlYmtpdCIgfTsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHVyaXNbXSA9IHsg
ImFib3V0OmJsYW5rIiwgImh0dHA6Ly93d3cuZ29vZ2xlLmNvbS8iLCAiaHR0cDovL3d3dy53ZWJr
aXQub3JnLyIgfTsKKyAgICAgICAgV2ViS2l0RE9NTm9kZSAqbm9kZSA9IHdlYmtpdF9kb21faHRt
bF9jb2xsZWN0aW9uX2l0ZW0oY29sbGVjdGlvbiwgaSk7CisgICAgICAgIGdfYXNzZXJ0KG5vZGUp
OworICAgICAgICBXZWJLaXRET01FbGVtZW50KiBlbGVtZW50ID0gKFdlYktpdERPTUVsZW1lbnQq
KW5vZGU7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3Rh
Z19uYW1lKGVsZW1lbnQpLCA9PSwgIkEiKTsKKyAgICAgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQg
Kmh0bWxFbGVtZW50ID0gKFdlYktpdERPTUhUTUxFbGVtZW50KillbGVtZW50OworICAgICAgICBn
X2Fzc2VydF9jbXBzdHIod2Via2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0X2lubmVyX3RleHQoaHRt
bEVsZW1lbnQpLCA9PSwgbmFtZXNbaV0pOworICAgICAgICBXZWJLaXRET01IVE1MQW5jaG9yRWxl
bWVudCAqYW5jaG9yID0gKFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KillbGVtZW50OworICAg
ICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9o
cmVmKGFuY2hvciksID09LCB1cmlzW2ldKTsKKyAgICB9CisgICAgZ19vYmplY3RfdW5yZWYoY29s
bGVjdGlvbik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfZG9tX2RvY3VtZW50X2luc2VydF9yb3co
RG9tRG9jdW1lbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAg
Z19hc3NlcnQoZml4dHVyZSk7CisgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IChXZWJLaXRXZWJW
aWV3KilmaXh0dXJlLT53ZWJWaWV3OworICAgIGdfYXNzZXJ0KHZpZXcpOworICAgIFdlYktpdERP
TURvY3VtZW50KiBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50KHZp
ZXcpOworICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfRE9DVU1FTlQoZG9jdW1lbnQpKTsKKyAg
ICBXZWJLaXRET01FbGVtZW50KiB0YWJsZSA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1l
bnRfYnlfaWQoZG9jdW1lbnQsICJ0YWJsZSIpOworICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNf
SFRNTF9FTEVNRU5UKHRhYmxlKSk7CisgICAgV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24qIHJvd3Mg
PSB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRfcm93cyhXRUJLSVRfRE9NX0hUTUxf
VEFCTEVfRUxFTUVOVCh0YWJsZSkpOworICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9D
T0xMRUNUSU9OKHJvd3MpKTsKKworICAgIC8vIFRhYmxlIGlzIGluaXRpYWxseSBlbXB0eS4KKyAg
ICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X2RvbV9odG1sX2NvbGxlY3Rpb25fZ2V0X2xlbmd0aChy
b3dzKSwgPT0sIDApOworICAgIFdlYktpdERPTUhUTUxFbGVtZW50KiByb3cgPSB3ZWJraXRfZG9t
X2h0bWxfdGFibGVfZWxlbWVudF9pbnNlcnRfcm93KFdFQktJVF9ET01fSFRNTF9UQUJMRV9FTEVN
RU5UKHRhYmxlKSwgLTEsIE5VTEwpOworICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9U
QUJMRV9ST1dfRUxFTUVOVChyb3cpKTsKKyAgICByb3dzID0gd2Via2l0X2RvbV9odG1sX3RhYmxl
X2VsZW1lbnRfZ2V0X3Jvd3MoV0VCS0lUX0RPTV9IVE1MX1RBQkxFX0VMRU1FTlQodGFibGUpKTsK
KyAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfQ09MTEVDVElPTihyb3dzKSk7CisgICAg
Z19hc3NlcnRfY21waW50KHdlYmtpdF9kb21faHRtbF9jb2xsZWN0aW9uX2dldF9sZW5ndGgocm93
cyksID09LCAxKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9kb21fZG9jdW1lbnRfZXZhbHVhdGUo
RG9tRG9jdW1lbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAg
Z19hc3NlcnQoZml4dHVyZSk7CisgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IChXZWJLaXRXZWJW
aWV3KilmaXh0dXJlLT53ZWJWaWV3OworICAgIGdfYXNzZXJ0KHZpZXcpOworICAgIFdlYktpdERP
TURvY3VtZW50KiBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50KHZp
ZXcpOworICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfRE9DVU1FTlQoZG9jdW1lbnQpKTsKKyAg
ICBXZWJLaXRET01Ob2RlTGlzdCogbGlzdCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1l
bnRzX2J5X3RhZ19uYW1lKGRvY3VtZW50LCAiaHRtbCIpOworICAgIGdfYXNzZXJ0KGxpc3QpOwor
ICAgIGd1bG9uZyBsZW5ndGggPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3Qp
OworICAgIGdfYXNzZXJ0X2NtcGludChsZW5ndGgsID09LCAxKTsKKyAgICBXZWJLaXRET01Ob2Rl
KiBodG1sID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0LCAwKTsKKyAgICBnX2Fzc2Vy
dChXRUJLSVRfRE9NX0lTX05PREUoaHRtbCkpOworCisgICAgV2ViS2l0RE9NWFBhdGhSZXN1bHQq
IHJlc3VsdCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZXZhbHVhdGUoZG9jdW1lbnQsICIvL2RpdiIs
IGh0bWwsIE5VTEwsIDAsIE5VTEwsIE5VTEwpOworICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNf
WFBBVEhfUkVTVUxUKHJlc3VsdCkpOworCisgICAgaW50IGkgPSAwOworICAgIFdlYktpdERPTU5v
ZGUqIG5vZGU7CisgICAgd2hpbGUgKCAobm9kZSA9IHdlYmtpdF9kb21feHBhdGhfcmVzdWx0X2l0
ZXJhdGVfbmV4dChyZXN1bHQsIE5VTEwpKSAhPSBOVUxMKSB7CisgICAgICAgIGdfYXNzZXJ0KG5v
ZGUpOworICAgICAgICBXZWJLaXRET01FbGVtZW50KiBlbGVtZW50ID0gKFdlYktpdERPTUVsZW1l
bnQqKW5vZGU7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0
X3RhZ19uYW1lKGVsZW1lbnQpLCA9PSwgIkRJViIpOworICAgICAgICBpKys7CisgICAgfQorICAg
IGdfYXNzZXJ0X2NtcGludChpLCA9PSwgMik7CisKKyAgICBnX29iamVjdF91bnJlZihsaXN0KTsK
K30KKworc3RhdGljIHZvaWQgd2Vha19ub3RpZnkoZ3BvaW50ZXIgZGF0YSwgR09iamVjdCogem9t
YmllKQoreworICAgIGd1aW50KiBjb3VudCA9IChndWludCopZGF0YTsKKyAgICAoKmNvdW50KSsr
OworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2RvbV9kb2N1bWVudF9nYXJiYWdlX2NvbGxlY3Rpb24o
RG9tRG9jdW1lbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAg
Z3VpbnQgY291bnQgPSAwOworICAgIGdfYXNzZXJ0KGZpeHR1cmUpOworICAgIFdlYktpdFdlYlZp
ZXcqIHZpZXcgPSAoV2ViS2l0V2ViVmlldyopZml4dHVyZS0+d2ViVmlldzsKKyAgICBnX2Fzc2Vy
dCh2aWV3KTsKKyAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKKyAgICBnX2Fzc2VydChkb2N1bWVudCk7CisgICAg
Z19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1QoZG9jdW1lbnQpLCAoR1dlYWtOb3RpZnkpd2Vha19u
b3RpZnksICZjb3VudCk7CisgICAgV2ViS2l0RE9NSFRNTEhlYWRFbGVtZW50KiBoZWFkID0gd2Vi
a2l0X2RvbV9kb2N1bWVudF9nZXRfaGVhZChkb2N1bWVudCk7CisgICAgZ19hc3NlcnQoaGVhZCk7
CisgICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1QoaGVhZCksIChHV2Vha05vdGlmeSl3ZWFr
X25vdGlmeSwgJmNvdW50KTsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudCogYm9keSA9IHdlYmtp
dF9kb21fZG9jdW1lbnRfZ2V0X2JvZHkoZG9jdW1lbnQpOworICAgIGdfYXNzZXJ0KGJvZHkpOwor
ICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGJvZHkpLCAoR1dlYWtOb3RpZnkpd2Vha19u
b3RpZnksICZjb3VudCk7CisgICAgV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24gKmNvbGxlY3Rpb24g
PSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9saW5rcyhkb2N1bWVudCk7CisgICAgZ19hc3NlcnQo
Y29sbGVjdGlvbik7CisgICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1QoY29sbGVjdGlvbiks
IChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKKworICAgIHdlYmtpdF93ZWJfdmll
d19sb2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcodmlldyksIEhUTUxfRE9DVU1FTlRfTElOS1Ms
IE5VTEwsIE5VTEwsIE5VTEwpOworCisgICAgd2hpbGUgKGdfbWFpbl9jb250ZXh0X3BlbmRpbmco
TlVMTCkpCisgICAgICAgIGdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbihOVUxMLCBGQUxTRSk7CisK
KyAgICBnX2Fzc2VydF9jbXB1aW50KGNvdW50LCA9PSwgMyk7CisKKyAgICBnX29iamVjdF91bnJl
Zihjb2xsZWN0aW9uKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGNvdW50LCA9PSwgNCk7CisKKyAg
ICBjb3VudCA9IDA7CisKKyAgICBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2Rv
Y3VtZW50KHZpZXcpOworICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsKKyAgICBnX29iamVjdF93ZWFr
X3JlZihHX09CSkVDVChkb2N1bWVudCksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50
KTsKKyAgICBoZWFkID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfaGVhZChkb2N1bWVudCk7Cisg
ICAgZ19hc3NlcnQoaGVhZCk7CisgICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1QoaGVhZCks
IChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKKyAgICBib2R5ID0gd2Via2l0X2Rv
bV9kb2N1bWVudF9nZXRfYm9keShkb2N1bWVudCk7CisgICAgZ19hc3NlcnQoYm9keSk7CisgICAg
Z19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1QoYm9keSksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlm
eSwgJmNvdW50KTsKKyAgICBjb2xsZWN0aW9uID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfbGlu
a3MoZG9jdW1lbnQpOworICAgIGdfYXNzZXJ0KGNvbGxlY3Rpb24pOworICAgIGdfb2JqZWN0X3dl
YWtfcmVmKEdfT0JKRUNUKGNvbGxlY3Rpb24pLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZj
b3VudCk7CisgICAgLyogQXNrIHR3aWNlIGZvciB0aGUgc2FtZSBvYmplY3QgKi8KKyAgICBXZWJL
aXRET01IVE1MQ29sbGVjdGlvbiogY29sbGVjdGlvbjIgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dl
dF9saW5rcyhkb2N1bWVudCk7CisgICAgZ19hc3NlcnQoY29sbGVjdGlvbjIpOworICAgIGdfb2Jq
ZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGNvbGxlY3Rpb24yKSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90
aWZ5LCAmY291bnQpOworCisgICAgZ19vYmplY3RfdW5yZWYoZG9jdW1lbnQpOworICAgIGdfb2Jq
ZWN0X3VucmVmKGhlYWQpOworICAgIGdfb2JqZWN0X3VucmVmKGJvZHkpOworICAgIGdfb2JqZWN0
X3VucmVmKGNvbGxlY3Rpb24pOworICAgIGdfb2JqZWN0X3VucmVmKGNvbGxlY3Rpb24yKTsKKwor
ICAgIGdfYXNzZXJ0X2NtcHVpbnQoY291bnQsID09LCA1KTsKKworICAgIHdlYmtpdF93ZWJfdmll
d19sb2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcodmlldyksIEhUTUxfRE9DVU1FTlRfSUZSQU1F
LCBOVUxMLCBOVUxMLCBOVUxMKTsKKworICAgIHdoaWxlIChnX21haW5fY29udGV4dF9wZW5kaW5n
KE5VTEwpKQorICAgICAgICBnX21haW5fY29udGV4dF9pdGVyYXRpb24oTlVMTCwgRkFMU0UpOwor
CisgICAgY291bnQgPSAwOworCisgICAgZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2Rv
bV9kb2N1bWVudCh2aWV3KTsKKyAgICBXZWJLaXRET01FbGVtZW50KiBkaXYgPSB3ZWJraXRfZG9t
X2RvY3VtZW50X2dldF9lbGVtZW50X2J5X2lkKGRvY3VtZW50LCAidGVzdCIpOworICAgIGdfYXNz
ZXJ0KGRpdik7CisgICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1QoZGl2KSwgKEdXZWFrTm90
aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOworICAgIFdlYktpdERPTUVsZW1lbnQqIGlmcmFtZSA9
IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRfYnlfaWQoZG9jdW1lbnQsICJpZnJhbWUi
KTsKKyAgICBnX2Fzc2VydChpZnJhbWUpOworCisgICAgd2Via2l0X2RvbV9lbGVtZW50X3NldF9h
dHRyaWJ1dGUoaWZyYW1lLCAic3JjIiwgImRhdGE6PGh0bWw+PGhlYWQ+PC9oZWFkPjwvaHRtbD4i
LCBOVUxMKTsKKworICAgIHdoaWxlIChnX21haW5fY29udGV4dF9wZW5kaW5nKE5VTEwpKQorICAg
ICAgICBnX21haW5fY29udGV4dF9pdGVyYXRpb24oTlVMTCwgRkFMU0UpOworCisgICAgV2ViS2l0
RE9NRG9jdW1lbnQqIGlmcmFtZURvY3VtZW50ID0gd2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVt
ZW50X2dldF9jb250ZW50X2RvY3VtZW50KFdFQktJVF9ET01fSFRNTF9JRlJBTUVfRUxFTUVOVChp
ZnJhbWUpKTsKKyAgICBnX2Fzc2VydChpZnJhbWVEb2N1bWVudCk7CisgICAgaGVhZCA9IHdlYmtp
dF9kb21fZG9jdW1lbnRfZ2V0X2hlYWQoaWZyYW1lRG9jdW1lbnQpOworICAgIGdfYXNzZXJ0KGhl
YWQpOworICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGhlYWQpLCAoR1dlYWtOb3RpZnkp
d2Vha19ub3RpZnksICZjb3VudCk7CisKKyAgICB3ZWJraXRfZG9tX2VsZW1lbnRfc2V0X2F0dHJp
YnV0ZShpZnJhbWUsICJzcmMiLCAiYWJvdXQ6YmxhbmsiLCBOVUxMKTsKKworICAgIHdoaWxlIChn
X21haW5fY29udGV4dF9wZW5kaW5nKE5VTEwpKQorICAgICAgICBnX21haW5fY29udGV4dF9pdGVy
YXRpb24oTlVMTCwgRkFMU0UpOworCisgICAgZ19hc3NlcnRfY21wdWludChjb3VudCwgPT0sIDEp
OworCisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklFVyh2aWV3
KSwgSFRNTF9ET0NVTUVOVF9MSU5LUywgTlVMTCwgTlVMTCwgTlVMTCk7CisKKyAgICB3aGlsZSAo
Z19tYWluX2NvbnRleHRfcGVuZGluZyhOVUxMKSkKKyAgICAgICAgZ19tYWluX2NvbnRleHRfaXRl
cmF0aW9uKE5VTEwsIEZBTFNFKTsKKworICAgIGdfYXNzZXJ0X2NtcHVpbnQoY291bnQsID09LCAy
KTsKKworICAgIGNvdW50ID0gMDsKKworICAgIGRvY3VtZW50ID0gd2Via2l0X3dlYl92aWV3X2dl
dF9kb21fZG9jdW1lbnQodmlldyk7CisgICAgZ19hc3NlcnQoZG9jdW1lbnQpOworICAgIGdfb2Jq
ZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGRvY3VtZW50KSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5
LCAmY291bnQpOworICAgIC8qIEFzayB0d2ljZSBmb3IgdGhlIERvY3VtZW50ICovCisgICAgV2Vi
S2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50MiA9IHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3Vt
ZW50KHZpZXcpOworICAgIGdfYXNzZXJ0KGRvY3VtZW50Mik7CisgICAgZ19vYmplY3Rfd2Vha19y
ZWYoR19PQkpFQ1QoZG9jdW1lbnQyKSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQp
OworICAgIGhlYWQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9oZWFkKGRvY3VtZW50KTsKKyAg
ICBnX2Fzc2VydChoZWFkKTsKKyAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVDVChoZWFkKSwg
KEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOworICAgIGJvZHkgPSB3ZWJraXRfZG9t
X2RvY3VtZW50X2dldF9ib2R5KGRvY3VtZW50KTsKKyAgICBnX2Fzc2VydChib2R5KTsKKyAgICBn
X29iamVjdF93ZWFrX3JlZihHX09CSkVDVChib2R5KSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5
LCAmY291bnQpOworICAgIGNvbGxlY3Rpb24gPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9saW5r
cyhkb2N1bWVudCk7CisgICAgZ19hc3NlcnQoY29sbGVjdGlvbik7CisgICAgZ19vYmplY3Rfd2Vh
a19yZWYoR19PQkpFQ1QoY29sbGVjdGlvbiksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNv
dW50KTsKKworICAgIGd0a193aWRnZXRfZGVzdHJveShmaXh0dXJlLT53ZWJWaWV3KTsKKyAgICBm
aXh0dXJlLT53ZWJWaWV3ID0gTlVMTDsKKworICAgIGdfYXNzZXJ0X2NtcHVpbnQoY291bnQsID09
LCA0KTsKKworICAgIGdfb2JqZWN0X3VucmVmKGNvbGxlY3Rpb24pOworCisgICAgZ19hc3NlcnRf
Y21wdWludChjb3VudCwgPT0sIDUpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFy
Z3YpCit7CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAgZ190
ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKKworICAgIGdfdGVzdF9h
ZGQoIi93ZWJraXQvZG9tZG9jdW1lbnQvdGVzdF90aXRsZSIsCisgICAgICAgICAgICAgICBEb21E
b2N1bWVudEZpeHR1cmUsIEhUTUxfRE9DVU1FTlRfVElUTEUsCisgICAgICAgICAgICAgICBkb21f
ZG9jdW1lbnRfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3RfZG9tX2RvY3VtZW50
X3RpdGxlLAorICAgICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfdGVhcmRvd24pOwor
CisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9kb21kb2N1bWVudC90ZXN0X2dldF9lbGVtZW50c19i
eV90YWdfbmFtZSIsCisgICAgICAgICAgICAgICBEb21Eb2N1bWVudEZpeHR1cmUsIEhUTUxfRE9D
VU1FTlRfRUxFTUVOVFMsCisgICAgICAgICAgICAgICBkb21fZG9jdW1lbnRfZml4dHVyZV9zZXR1
cCwKKyAgICAgICAgICAgICAgIHRlc3RfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19ieV90YWdf
bmFtZSwKKyAgICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKTsKKwor
ICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvZG9tZG9jdW1lbnQvdGVzdF9nZXRfZWxlbWVudHNfYnlf
Y2xhc3NfbmFtZSIsCisgICAgICAgICAgICAgICBEb21Eb2N1bWVudEZpeHR1cmUsIEhUTUxfRE9D
VU1FTlRfRUxFTUVOVFNfQ0xBU1MsCisgICAgICAgICAgICAgICBkb21fZG9jdW1lbnRfZml4dHVy
ZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3RfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19i
eV9jbGFzc19uYW1lLAorICAgICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfdGVhcmRv
d24pOworCisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9kb21kb2N1bWVudC90ZXN0X2dldF9lbGVt
ZW50X2J5X2lkIiwKKyAgICAgICAgICAgICAgIERvbURvY3VtZW50Rml4dHVyZSwgSFRNTF9ET0NV
TUVOVF9FTEVNRU5UU19JRCwKKyAgICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3Nl
dHVwLAorICAgICAgICAgICAgICAgdGVzdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRfYnlfaWQs
CisgICAgICAgICAgICAgICBkb21fZG9jdW1lbnRfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICBn
X3Rlc3RfYWRkKCIvd2Via2l0L2RvbWRvY3VtZW50L3Rlc3RfZ2V0X2xpbmtzIiwKKyAgICAgICAg
ICAgICAgIERvbURvY3VtZW50Rml4dHVyZSwgSFRNTF9ET0NVTUVOVF9MSU5LUywKKyAgICAgICAg
ICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF9k
b21fZG9jdW1lbnRfZ2V0X2xpbmtzLAorICAgICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1
cmVfdGVhcmRvd24pOworCisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9kb21kb2N1bWVudC90ZXN0
X3RhYmxlX2luc2VydF9yb3ciLAorICAgICAgICAgICAgICAgRG9tRG9jdW1lbnRGaXh0dXJlLCBI
VE1MX0RPQ1VNRU5UX1RBQkxFLAorICAgICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVf
c2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0X2RvbV9kb2N1bWVudF9pbnNlcnRfcm93LAorICAg
ICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfdGVhcmRvd24pOworCisgICAgZ190ZXN0
X2FkZCgiL3dlYmtpdC9kb21kb2N1bWVudC90ZXN0X2RvY3VtZW50X2V2YWx1YXRlIiwKKyAgICAg
ICAgICAgICAgIERvbURvY3VtZW50Rml4dHVyZSwgSFRNTF9ET0NVTUVOVF9FVkFMVUFURSwKKyAg
ICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAg
dGVzdF9kb21fZG9jdW1lbnRfZXZhbHVhdGUsCisgICAgICAgICAgICAgICBkb21fZG9jdW1lbnRf
Zml4dHVyZV90ZWFyZG93bik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2RvbWRvY3VtZW50
L3Rlc3RfZ2FyYmFnZV9jb2xsZWN0aW9uIiwKKyAgICAgICAgICAgICAgIERvbURvY3VtZW50Rml4
dHVyZSwgSFRNTF9ET0NVTUVOVF9MSU5LUywKKyAgICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9m
aXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF9kb21fZG9jdW1lbnRfZ2FyYmFnZV9j
b2xsZWN0aW9uLAorICAgICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfdGVhcmRvd24p
OworCisgICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsKK30KKwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGRvbWRvbXdpbmRvdy5jIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGRvbWRvbXdpbmRvdy5jCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjE0ZmNkMTg2YTBlZTg0MmFhMGE4ZDkxNTdhMDcyNGQ2OTY1MzhhZDgKLS0tIC9kZXYvbnVsbAor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0ZG9tZG9td2luZG93
LmMKQEAgLTAsMCArMSwyNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMu
TC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInRlc3RfdXRpbHMuaCIKKworI2luY2x1
ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgorI2luY2x1ZGUgPGd0ay9ndGsu
aD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+CisKKyNkZWZpbmUgSFRNTF9ET0NVTUVOVCAi
PGh0bWw+PGhlYWQ+PHRpdGxlPjwvdGl0bGU+PC9oZWFkPjxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+
I3Rlc3QgeyBmb250LXNpemU6IDE2cHg7IH08L3N0eWxlPjxib2R5PjxwIGlkPSd0ZXN0Jz50ZXN0
PC9wPjwvYm9keT48L2h0bWw+IgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgR3RrV2lkZ2V0KiB3
ZWJWaWV3OworICAgIEd0a1dpZGdldCogd2luZG93OworICAgIFdlYktpdERPTURPTVdpbmRvdyog
ZG9tV2luZG93OworICAgIEdNYWluTG9vcCogbG9vcDsKKworICAgIGdib29sZWFuIGxvYWRlZDsK
KyAgICBnYm9vbGVhbiBjbGlja2VkOworICAgIGdjb25zdHBvaW50ZXIgZGF0YTsKK30gRG9tRG9t
dmlld0ZpeHR1cmU7CisKK3N0YXRpYyBnYm9vbGVhbiBmaW5pc2hfbG9hZGluZyhEb21Eb212aWV3
Rml4dHVyZSogZml4dHVyZSkKK3sKKyAgICBpZiAoZ19tYWluX2xvb3BfaXNfcnVubmluZyhmaXh0
dXJlLT5sb29wKSkKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChmaXh0dXJlLT5sb29wKTsKKwor
ICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgZG9tX2RvbXZpZXdfZml4dHVyZV9z
ZXR1cChEb21Eb212aWV3Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQorewor
ICAgIGZpeHR1cmUtPmxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisgICAgZml4
dHVyZS0+d2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7CisgICAg
Zml4dHVyZS0+d2ViVmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKKyAgICBmaXh0dXJlLT5k
YXRhID0gZGF0YTsKKworICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIoZml4dHVy
ZS0+d2luZG93KSwgR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSk7Cit9CisKK3N0YXRpYyB2
b2lkIGRvbV9kb212aWV3X2ZpeHR1cmVfdGVhcmRvd24oRG9tRG9tdmlld0ZpeHR1cmUqIGZpeHR1
cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koZml4dHVy
ZS0+d2luZG93KTsKKyAgICBnX21haW5fbG9vcF91bnJlZihmaXh0dXJlLT5sb29wKTsKK30KKwor
c3RhdGljIHZvaWQgZG9tX2RvbV93aW5kb3dfZml4dHVyZV9zZXR1cChEb21Eb212aWV3Rml4dHVy
ZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGZpeHR1cmUtPmxvb3AgPSBn
X21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisgICAgZml4dHVyZS0+d2ViVmlldyA9IHdlYmtp
dF93ZWJfdmlld19uZXcoKTsKKyAgICBnX29iamVjdF9yZWZfc2luayhmaXh0dXJlLT53ZWJWaWV3
KTsKKworICAgIGlmIChkYXRhICE9IE5VTEwpCisgICAgICAgIHdlYmtpdF93ZWJfdmlld19sb2Fk
X3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcgKGZpeHR1cmUtPndlYlZpZXcpLCAoY29uc3QgY2hhciop
IGRhdGEsIE5VTEwsIE5VTEwsIE5VTEwpOworCisgICAgZ19pZGxlX2FkZCgoR1NvdXJjZUZ1bmMp
ZmluaXNoX2xvYWRpbmcsIGZpeHR1cmUpOworICAgIGdfbWFpbl9sb29wX3J1bihmaXh0dXJlLT5s
b29wKTsKK30KKworc3RhdGljIHZvaWQgZG9tX2RvbV93aW5kb3dfZml4dHVyZV90ZWFyZG93bihE
b21Eb212aWV3Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGlm
IChmaXh0dXJlLT53ZWJWaWV3KQorICAgICAgICBnX29iamVjdF91bnJlZihmaXh0dXJlLT53ZWJW
aWV3KTsKKyAgICBnX21haW5fbG9vcF91bnJlZihmaXh0dXJlLT5sb29wKTsKK30KKworc3RhdGlj
IGdib29sZWFuIGxvYWRlZENhbGxiYWNrKFdlYktpdERPTURPTVdpbmRvdyogdmlldywgV2ViS2l0
RE9NRXZlbnQqIGV2ZW50LCBEb21Eb212aWV3Rml4dHVyZSogZml4dHVyZSkKK3sKKyAgICBnX2Fz
c2VydChmaXh0dXJlLT5sb2FkZWQgPT0gRkFMU0UpOworICAgIGZpeHR1cmUtPmxvYWRlZCA9IFRS
VUU7CisKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBjbGlja2VkQ2Fs
bGJhY2soV2ViS2l0RE9NRE9NV2luZG93KiB2aWV3LCBXZWJLaXRET01FdmVudCogZXZlbnQsIERv
bURvbXZpZXdGaXh0dXJlKiBmaXh0dXJlKQoreworICAgIFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0
YXJnZXQ7CisgICAgZ3VzaG9ydCBwaGFzZTsKKworICAgIGdfYXNzZXJ0KGV2ZW50KTsKKyAgICBn
X2Fzc2VydChXRUJLSVRfRE9NX0lTX0VWRU5UKGV2ZW50KSk7CisKKyAgICAvLyBXZSBzaG91bGQg
Y2F0Y2ggdGhpcyBpbiB0aGUgYnViYmxpbmcgdXAgcGhhc2UsIHNpbmNlIHdlIGFyZSBjb25uZWN0
aW5nIHRvIHRoZSB0b3BsZXZlbCBvYmplY3QKKyAgICBwaGFzZSA9IHdlYmtpdF9kb21fZXZlbnRf
Z2V0X2V2ZW50X3BoYXNlKGV2ZW50KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocGhhc2UsID09LCAz
KTsKKworICAgIHRhcmdldCA9IHdlYmtpdF9kb21fZXZlbnRfZ2V0X2N1cnJlbnRfdGFyZ2V0KGV2
ZW50KTsKKyAgICBnX2Fzc2VydCh0YXJnZXQgPT0gV0VCS0lUX0RPTV9FVkVOVF9UQVJHRVQodmll
dykpOworCisgICAgZ19hc3NlcnQoZml4dHVyZS0+Y2xpY2tlZCA9PSBGQUxTRSk7CisgICAgZml4
dHVyZS0+Y2xpY2tlZCA9IFRSVUU7CisKKyAgICBmaW5pc2hfbG9hZGluZyhmaXh0dXJlKTsKKwor
ICAgIHJldHVybiBGQUxTRTsKK30KKworZ2Jvb2xlYW4gbWFwX2V2ZW50X2NiKEd0a1dpZGdldCAq
d2lkZ2V0LCBHZGtFdmVudCogZXZlbnQsIERvbURvbXZpZXdGaXh0dXJlKiBmaXh0dXJlKQorewor
ICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcgKGZpeHR1cmUt
PndlYlZpZXcpLCAoY29uc3QgY2hhciopZml4dHVyZS0+ZGF0YSwgTlVMTCwgTlVMTCwgTlVMTCk7
CisKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRfZXZlbnRfY2FsbGJh
Y2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgR1BhcmFtU3BlYyogc3BlYywgRG9tRG9tdmlld0Zp
eHR1cmUqIGZpeHR1cmUpCit7CisgICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRf
d2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYlZpZXcpOworICAgIGlmIChzdGF0dXMgPT0gV0VC
S0lUX0xPQURfRklOSVNIRUQpIHsKKyAgICAgICAgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfYWRk
X2V2ZW50X2xpc3RlbmVyKFdFQktJVF9ET01fRVZFTlRfVEFSR0VUKGZpeHR1cmUtPmRvbVdpbmRv
dyksICJjbGljayIsIEdfQ0FMTEJBQ0soY2xpY2tlZENhbGxiYWNrKSwgZmFsc2UsIGZpeHR1cmUp
OworCisgICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmNsaWNrZWQgPT0gRkFMU0UpOworICAgICAg
ICBndGtfdGVzdF93aWRnZXRfY2xpY2soR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSwgMSwg
MCk7CisgICAgfQorCit9CisKK3N0YXRpYyB2b2lkIHRlc3RfZG9tX2RvbXZpZXdfc2lnbmFscyhE
b21Eb212aWV3Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGdf
YXNzZXJ0KGZpeHR1cmUpOworICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSAoV2ViS2l0V2ViVmll
dyopZml4dHVyZS0+d2ViVmlldzsKKyAgICBnX2Fzc2VydCh2aWV3KTsKKyAgICBXZWJLaXRET01E
b2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3
KTsKKyAgICBnX2Fzc2VydChkb2N1bWVudCk7CisgICAgV2ViS2l0RE9NRE9NV2luZG93KiBkb21X
aW5kb3cgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9kZWZhdWx0X3ZpZXcoZG9jdW1lbnQpOwor
ICAgIGdfYXNzZXJ0KGRvbVdpbmRvdyk7CisKKyAgICBmaXh0dXJlLT5kb21XaW5kb3cgPSBkb21X
aW5kb3c7CisKKyAgICB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9hZGRfZXZlbnRfbGlzdGVuZXIo
V0VCS0lUX0RPTV9FVkVOVF9UQVJHRVQoZml4dHVyZS0+ZG9tV2luZG93KSwgImxvYWQiLCBHX0NB
TExCQUNLKGxvYWRlZENhbGxiYWNrKSwgZmFsc2UsIGZpeHR1cmUpOworICAgIGdfc2lnbmFsX2Nv
bm5lY3QoZml4dHVyZS0+d2luZG93LCAibWFwLWV2ZW50IiwgR19DQUxMQkFDSyhtYXBfZXZlbnRf
Y2IpLCBmaXh0dXJlKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJu
b3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhsb2FkX2V2ZW50X2NhbGxiYWNrKSwgZml4
dHVyZSk7CisKKyAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKGZpeHR1cmUtPndpbmRvdyk7CisgICAg
Z3RrX3dpbmRvd19wcmVzZW50KEdUS19XSU5ET1coZml4dHVyZS0+d2luZG93KSk7CisKKyAgICBn
X21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7CisKKyAgICBnX2Fzc2VydChmaXh0dXJlLT5s
b2FkZWQpOworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmNsaWNrZWQpOworfQorCitzdGF0aWMgZ2Jv
b2xlYW4KK2NsaWNrZWRfY2IoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9N
RXZlbnQqIGV2ZW50LCBEb21Eb212aWV3Rml4dHVyZSogZml4dHVyZSkKK3sKKyAgICBnX2Fzc2Vy
dChmaXh0dXJlLT5jbGlja2VkID09IEZBTFNFKTsKKyAgICBmaXh0dXJlLT5jbGlja2VkID0gVFJV
RTsKKyAgICBmaW5pc2hfbG9hZGluZyhmaXh0dXJlKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisK
K3N0YXRpYyB2b2lkIGxvYWRfc3RhdHVzX2NhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcs
IEdQYXJhbVNwZWMqIHNwZWMsIERvbURvbXZpZXdGaXh0dXJlKiBmaXh0dXJlKQoreworICAgIFdl
YktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh3
ZWJWaWV3KTsKKyAgICBpZiAoc3RhdHVzID09IFdFQktJVF9MT0FEX0ZJTklTSEVEKSB7CisgICAg
ICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1bWVudDsKKyAgICAgICAgV2ViS2l0RE9NRE9NV2lu
ZG93KiBkb21XaW5kb3c7CisgICAgICAgIFdlYktpdERPTUVsZW1lbnQqIGVsZW1lbnQ7CisgICAg
ICAgIFdlYktpdERPTUV2ZW50KiBldmVudDsKKyAgICAgICAgZ2xvbmcgY2xpZW50WCwgY2xpZW50
WTsKKworICAgICAgICBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50
KFdFQktJVF9XRUJfVklFVyhmaXh0dXJlLT53ZWJWaWV3KSk7CisgICAgICAgIGdfYXNzZXJ0KGRv
Y3VtZW50KTsKKyAgICAgICAgZG9tV2luZG93ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZGVm
YXVsdF92aWV3KGRvY3VtZW50KTsKKyAgICAgICAgZ19hc3NlcnQoZG9tV2luZG93KTsKKyAgICAg
ICAgZml4dHVyZS0+ZG9tV2luZG93ID0gZG9tV2luZG93OworCisgICAgICAgIGVsZW1lbnQgPSB3
ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50X2J5X2lkKGRvY3VtZW50LCAidGVzdCIpOwor
ICAgICAgICBnX2Fzc2VydChlbGVtZW50KTsKKyAgICAgICAgZXZlbnQgPSB3ZWJraXRfZG9tX2Rv
Y3VtZW50X2NyZWF0ZV9ldmVudChkb2N1bWVudCwgIk1vdXNlRXZlbnQiLCBOVUxMKTsKKyAgICAg
ICAgZ19hc3NlcnQoZXZlbnQpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0VWRU5U
KGV2ZW50KSk7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfTU9VU0VfRVZFTlQoZXZl
bnQpKTsKKyAgICAgICAgY2xpZW50WCA9IHdlYmtpdF9kb21fZWxlbWVudF9nZXRfY2xpZW50X2xl
ZnQoZWxlbWVudCk7CisgICAgICAgIGNsaWVudFkgPSB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2Ns
aWVudF90b3AoZWxlbWVudCk7CisgICAgICAgIHdlYmtpdF9kb21fbW91c2VfZXZlbnRfaW5pdF9t
b3VzZV9ldmVudChXRUJLSVRfRE9NX01PVVNFX0VWRU5UKGV2ZW50KSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjbGljayIsIFRSVUUsIFRSVUUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXh0dXJlLT5k
b21XaW5kb3csIDAsIDAsIDAsIGNsaWVudFgsIGNsaWVudFksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSwgRkFMU0UsIEZBTFNFLCBGQUxTRSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIFdFQktJ
VF9ET01fRVZFTlRfVEFSR0VUKGVsZW1lbnQpKTsKKyAgICAgICAgd2Via2l0X2RvbV9ldmVudF90
YXJnZXRfYWRkX2V2ZW50X2xpc3RlbmVyKFdFQktJVF9ET01fRVZFTlRfVEFSR0VUKGVsZW1lbnQp
LCAiY2xpY2siLCBHX0NBTExCQUNLKGNsaWNrZWRfY2IpLCBmYWxzZSwgZml4dHVyZSk7CisgICAg
ICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmNsaWNrZWQgPT0gRkFMU0UpOworICAgICAgICB3ZWJraXRf
ZG9tX2V2ZW50X3RhcmdldF9kaXNwYXRjaF9ldmVudChXRUJLSVRfRE9NX0VWRU5UX1RBUkdFVChl
bGVtZW50KSwgZXZlbnQsIE5VTEwpOworICAgIH0KKworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2Rv
bV9kb212aWV3X2Rpc3BhdGNoX2V2ZW50KERvbURvbXZpZXdGaXh0dXJlKiBmaXh0dXJlLCBnY29u
c3Rwb2ludGVyIGRhdGEpCit7CisgICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53aW5kb3cs
ICJtYXAtZXZlbnQiLCBHX0NBTExCQUNLKG1hcF9ldmVudF9jYiksIGZpeHR1cmUpOworICAgIGdf
c2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2ViVmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLCBH
X0NBTExCQUNLKGxvYWRfc3RhdHVzX2NhbGxiYWNrKSwgZml4dHVyZSk7CisKKyAgICBndGtfd2lk
Z2V0X3Nob3dfYWxsKGZpeHR1cmUtPndpbmRvdyk7CisgICAgZ3RrX3dpbmRvd19wcmVzZW50KEdU
S19XSU5ET1coZml4dHVyZS0+d2luZG93KSk7CisKKyAgICBnX21haW5fbG9vcF9ydW4gKGZpeHR1
cmUtPmxvb3ApOworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmNsaWNrZWQpOworfQorCitzdGF0aWMg
dm9pZCB0ZXN0X2RvbV9kb21fd2luZG93X2dldF9jb21wdXRlZF9zdHlsZShEb21Eb212aWV3Rml4
dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIFdlYktpdERPTURvY3Vt
ZW50KiBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50KFdFQktJVF9X
RUJfVklFVyhmaXh0dXJlLT53ZWJWaWV3KSk7CisgICAgZ19hc3NlcnQoZG9jdW1lbnQpOworICAg
IFdlYktpdERPTURPTVdpbmRvdyogZG9tV2luZG93ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRf
ZGVmYXVsdF92aWV3KGRvY3VtZW50KTsKKyAgICBnX2Fzc2VydChkb21XaW5kb3cpOworCisgICAg
V2ViS2l0RE9NRWxlbWVudCogIGVsZW1lbnQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVt
ZW50X2J5X2lkKGRvY3VtZW50LCAidGVzdCIpOworICAgIGdfYXNzZXJ0KGVsZW1lbnQpOworICAg
IGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfRUxFTUVOVChlbGVtZW50KSk7CisgICAgV2ViS2l0RE9N
Q1NTU3R5bGVEZWNsYXJhdGlvbiogY3NzU3R5bGUgPSB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0
X2NvbXB1dGVkX3N0eWxlKGRvbVdpbmRvdywgZWxlbWVudCwgTlVMTCk7CisgICAgZ2NoYXIqIGZv
bnRTaXplID0gd2Via2l0X2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25fZ2V0X3Byb3BlcnR5X3Zh
bHVlKGNzc1N0eWxlLCAiZm9udC1zaXplIik7CisgICAgZ19hc3NlcnRfY21wc3RyKGZvbnRTaXpl
LCA9PSwgIjE2cHgiKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQorewor
ICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKKworICAgIGdfdGVzdF9idWdf
YmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Vi
a2l0L2RvbWRvbXZpZXcvc2lnbmFscyIsCisgICAgICAgICAgICAgICBEb21Eb212aWV3Rml4dHVy
ZSwgSFRNTF9ET0NVTUVOVCwKKyAgICAgICAgICAgICAgIGRvbV9kb212aWV3X2ZpeHR1cmVfc2V0
dXAsCisgICAgICAgICAgICAgICB0ZXN0X2RvbV9kb212aWV3X3NpZ25hbHMsCisgICAgICAgICAg
ICAgICBkb21fZG9tdmlld19maXh0dXJlX3RlYXJkb3duKTsKKworICAgIGdfdGVzdF9hZGQoIi93
ZWJraXQvZG9tZG9tdmlldy9kaXNwYXRjaF9ldmVudCIsCisgICAgICAgICAgICAgICBEb21Eb212
aWV3Rml4dHVyZSwgSFRNTF9ET0NVTUVOVCwKKyAgICAgICAgICAgICAgIGRvbV9kb212aWV3X2Zp
eHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0X2RvbV9kb212aWV3X2Rpc3BhdGNoX2V2
ZW50LAorICAgICAgICAgICAgICAgZG9tX2RvbXZpZXdfZml4dHVyZV90ZWFyZG93bik7CisKKyAg
ICBnX3Rlc3RfYWRkKCIvd2Via2l0L2RvbWRvbXdpbmRvdy9nZXRfY29tcHV0ZWRfc3R5bGUiLAor
ICAgICAgICAgICAgICAgRG9tRG9tdmlld0ZpeHR1cmUsIEhUTUxfRE9DVU1FTlQsCisgICAgICAg
ICAgICAgICBkb21fZG9tX3dpbmRvd19maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVz
dF9kb21fZG9tX3dpbmRvd19nZXRfY29tcHV0ZWRfc3R5bGUsCisgICAgICAgICAgICAgICBkb21f
ZG9tX3dpbmRvd19maXh0dXJlX3RlYXJkb3duKTsKKworICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7
Cit9CisKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rl
c3Rkb21ub2RlLmMgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0ZG9t
bm9kZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmVkNGJjYmRhYTYyMDdmYTAyYzY4ZTI4MmJlMmNkYmY5Y2Y1ZTI3
NGQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0
ay90ZXN0ZG9tbm9kZS5jCkBAIC0wLDAgKzEsMjE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJ0ZXN0X3V0aWxz
LmgiCisKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KKyNpbmNs
dWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgorCisjZGVmaW5lIEhU
TUxfRE9DVU1FTlRfSElFUkFSQ0hZX05BVklHQVRJT04gIjxodG1sPjxoZWFkPjx0aXRsZT5UaGlz
IGlzIHRoZSB0aXRsZTwvdGl0bGU+PC9oZWFkPjxib2R5PjxwPjE8L3A+PHA+MjwvcD48cD4zPC9w
PjwvYm9keT48L2h0bWw+IgorI2RlZmluZSBIVE1MX0RPQ1VNRU5UX05PREVfSU5TRVJUSU9OICI8
aHRtbD48Ym9keT48L2JvZHk+PC9odG1sPiIKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIEd0a1dp
ZGdldCogd2ViVmlldzsKKyAgICBHTWFpbkxvb3AqIGxvb3A7Cit9IERvbU5vZGVGaXh0dXJlOwor
CitzdGF0aWMgZ2Jvb2xlYW4gZmluaXNoX2xvYWRpbmcoRG9tTm9kZUZpeHR1cmUqIGZpeHR1cmUp
Cit7CisgICAgaWYgKGdfbWFpbl9sb29wX2lzX3J1bm5pbmcoZml4dHVyZS0+bG9vcCkpCisgICAg
ICAgIGdfbWFpbl9sb29wX3F1aXQoZml4dHVyZS0+bG9vcCk7CisKKyAgICByZXR1cm4gRkFMU0U7
Cit9CisKK3N0YXRpYyB2b2lkIGRvbV9ub2RlX2ZpeHR1cmVfc2V0dXAoRG9tTm9kZUZpeHR1cmUq
IGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBmaXh0dXJlLT5sb29wID0gZ19t
YWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworICAgIGZpeHR1cmUtPndlYlZpZXcgPSB3ZWJraXRf
d2ViX3ZpZXdfbmV3KCk7CisgICAgZ19vYmplY3RfcmVmX3NpbmsoZml4dHVyZS0+d2ViVmlldyk7
CisKKyAgICBpZiAoZGF0YSAhPSBOVUxMKQorICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9z
dHJpbmcoV0VCS0lUX1dFQl9WSUVXKGZpeHR1cmUtPndlYlZpZXcpLCAoY29uc3QgY2hhciopZGF0
YSwgTlVMTCwgTlVMTCwgTlVMTCk7CisKKyAgICBnX2lkbGVfYWRkKChHU291cmNlRnVuYylmaW5p
c2hfbG9hZGluZywgZml4dHVyZSk7CisgICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1cmUtPmxvb3Ap
OworfQorCitzdGF0aWMgdm9pZCBkb21fbm9kZV9maXh0dXJlX3RlYXJkb3duKERvbU5vZGVGaXh0
dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgZ19vYmplY3RfdW5yZWYo
Zml4dHVyZS0+d2ViVmlldyk7CisgICAgZ19tYWluX2xvb3BfdW5yZWYoZml4dHVyZS0+bG9vcCk7
Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfZG9tX25vZGVfaGllcmFyY2h5X25hdmlnYXRpb24oRG9t
Tm9kZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBXZWJLaXRE
T01Eb2N1bWVudCogZG9jdW1lbnQ7CisgICAgV2ViS2l0RE9NSFRNTEhlYWRFbGVtZW50KiBoZWFk
OworICAgIFdlYktpdERPTUhUTUxCb2R5RWxlbWVudCogYm9keTsKKyAgICBXZWJLaXRET01Ob2Rl
TGlzdCogbGlzdDsKKyAgICBXZWJLaXRET01Ob2RlKiBwdHI7CisgICAgZ3Vsb25nIGksIGxlbmd0
aDsKKworICAgIGRvY3VtZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQoV0VC
S0lUX1dFQl9WSUVXKGZpeHR1cmUtPndlYlZpZXcpKTsKKyAgICBnX2Fzc2VydChkb2N1bWVudCk7
CisgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChkb2N1bWVudCkpOworICAgIGhl
YWQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9oZWFkKGRvY3VtZW50KTsKKyAgICBnX2Fzc2Vy
dChoZWFkKTsKKyAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfSEVBRF9FTEVNRU5UKGhl
YWQpKTsKKworICAgIC8qIFRpdGxlLCBoZWFkJ3MgY2hpbGQgKi8KKyAgICBnX2Fzc2VydCh3ZWJr
aXRfZG9tX25vZGVfaGFzX2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShoZWFkKSkpOworICAg
IGxpc3QgPSB3ZWJraXRfZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERSho
ZWFkKSk7CisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9kb21fbm9kZV9saXN0X2dldF9sZW5n
dGgobGlzdCksID09LCAxKTsKKyAgICBwdHIgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtKGxp
c3QsIDApOworICAgIGdfYXNzZXJ0KHB0cik7CisgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19I
VE1MX1RJVExFX0VMRU1FTlQocHRyKSk7CisgICAgZ19vYmplY3RfdW5yZWYobGlzdCk7CisKKyAg
ICAvKiBCb2R5LCBIZWFkIHNpYmxpbmcgKi8KKyAgICBwdHIgPSB3ZWJraXRfZG9tX25vZGVfZ2V0
X25leHRfc2libGluZyhXRUJLSVRfRE9NX05PREUoaGVhZCkpOworICAgIGdfYXNzZXJ0KHB0cik7
CisgICAgYm9keSA9IFdFQktJVF9ET01fSFRNTF9CT0RZX0VMRU1FTlQocHRyKTsKKyAgICBnX2Fz
c2VydChXRUJLSVRfRE9NX0lTX0hUTUxfQk9EWV9FTEVNRU5UKGJvZHkpKTsKKworICAgIC8qIFRo
ZXJlIGlzIG5vIHRoaXJkIHNpYmxpbmcgKi8KKyAgICBwdHIgPSB3ZWJraXRfZG9tX25vZGVfZ2V0
X25leHRfc2libGluZyhwdHIpOworICAgIGdfYXNzZXJ0KHB0ciA9PSBOVUxMKTsKKworICAgIC8q
IEJvZHkncyBwcmV2aW91cyBzaWJsaW5nIGlzIEhlYWQgKi8KKyAgICBwdHIgPSB3ZWJraXRfZG9t
X25vZGVfZ2V0X3ByZXZpb3VzX3NpYmxpbmcoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKTsKKyAgICBn
X2Fzc2VydChwdHIpOworICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9IRUFEX0VMRU1F
TlQocHRyKSk7CisKKyAgICAvKiBCb2R5IGhhcyAzIGNoaWxkcmVuICovCisgICAgZ19hc3NlcnQo
d2Via2l0X2RvbV9ub2RlX2hhc19jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpKTsK
KyAgICBsaXN0ID0gd2Via2l0X2RvbV9ub2RlX2dldF9jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05P
REUoYm9keSkpOworICAgIGxlbmd0aCA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2dldF9sZW5ndGgo
bGlzdCk7CisgICAgZ19hc3NlcnRfY21waW50KGxlbmd0aCwgPT0sIDMpOworCisgICAgLyogVGhl
IHRocmVlIG9mIHRoZW0gYXJlIFAgdGFncyAqLworICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7
IGkrKykgeworICAgICAgICBwdHIgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtKGxpc3QsIGkp
OworICAgICAgICBnX2Fzc2VydChwdHIpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lT
X0hUTUxfUEFSQUdSQVBIX0VMRU1FTlQocHRyKSk7CisgICAgfQorCisgICAgLyogR28gYmFja3dh
cmRzICovCisgICAgZm9yIChpID0gMDsgcHRyOyBwdHIgPSB3ZWJraXRfZG9tX25vZGVfZ2V0X3By
ZXZpb3VzX3NpYmxpbmcocHRyKSwgaSsrKQorICAgICAgICAvKiBOb3RoaW5nICovOworCisgICAg
Z19hc3NlcnRfY21waW50KGksID09LCAzKTsKKyAgICBnX29iamVjdF91bnJlZihsaXN0KTsKK30K
Kworc3RhdGljIHZvaWQgdGVzdF9kb21fbm9kZV9pbnNlcnRpb24oRG9tTm9kZUZpeHR1cmUqIGZp
eHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBXZWJLaXRET01Eb2N1bWVudCogZG9j
dW1lbnQ7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQqIGJvZHk7CisgICAgV2ViS2l0RE9NRWxl
bWVudCogcCwgKmRpdjsKKyAgICBXZWJLaXRET01Ob2RlTGlzdCogbGlzdDsKKyAgICBXZWJLaXRE
T01Ob2RlKiBub2RlOworCisgICAgZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9k
b2N1bWVudChXRUJLSVRfV0VCX1ZJRVcoZml4dHVyZS0+d2ViVmlldykpOworICAgIGdfYXNzZXJ0
KGRvY3VtZW50KTsKKyAgICBib2R5ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfYm9keShkb2N1
bWVudCk7CisgICAgZ19hc3NlcnQoYm9keSk7CisgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19I
VE1MX0VMRU1FTlQoYm9keSkpOworCisgICAgLyogQm9keSBzaG91bGRuJ3QgaGF2ZSBhbnkgY2hp
bGRyZW4gYXQgdGhpcyBwb2ludCAqLworICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9oYXNf
Y2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKSA9PSBGQUxTRSk7CisKKyAgICAvKiBJ
bnNlcnQgb25lIFAgZWxlbWVudCAqLworICAgIHAgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0
ZV9lbGVtZW50KGRvY3VtZW50LCAiUCIsIE5VTEwpOworICAgIHdlYmtpdF9kb21fbm9kZV9hcHBl
bmRfY2hpbGQoV0VCS0lUX0RPTV9OT0RFKGJvZHkpLCBXRUJLSVRfRE9NX05PREUocCksIE5VTEwp
OworCisgICAgLyogTm93IGl0IHNob3VsZCBoYXZlIG9uZSwgdGhlIHNhbWUgdGhhdCB3ZSBpbnNl
cnRlZCAqLworICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9oYXNfY2hpbGRfbm9kZXMoV0VC
S0lUX0RPTV9OT0RFKGJvZHkpKSk7CisgICAgbGlzdCA9IHdlYmtpdF9kb21fbm9kZV9nZXRfY2hp
bGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Vi
a2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChsaXN0KSwgPT0sIDEpOworICAgIG5vZGUgPSB3
ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtKGxpc3QsIDApOworICAgIGdfYXNzZXJ0KG5vZGUpOwor
ICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9pc19zYW1lX25vZGUoV0VCS0lUX0RPTV9OT0RF
KHApLCBub2RlKSk7CisgICAgZ19vYmplY3RfdW5yZWYobGlzdCk7CisKKyAgICAvKiBSZXBsYWNl
IHRoZSBQIHRhZyB3aXRoIGEgRElWIHRhZyAqLworICAgIGRpdiA9IHdlYmtpdF9kb21fZG9jdW1l
bnRfY3JlYXRlX2VsZW1lbnQoZG9jdW1lbnQsICJESVYiLCBOVUxMKTsKKyAgICB3ZWJraXRfZG9t
X25vZGVfcmVwbGFjZV9jaGlsZChXRUJLSVRfRE9NX05PREUoYm9keSksIFdFQktJVF9ET01fTk9E
RShkaXYpLCBXRUJLSVRfRE9NX05PREUocCksIE5VTEwpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9k
b21fbm9kZV9oYXNfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKSk7CisgICAgbGlz
dCA9IHdlYmtpdF9kb21fbm9kZV9nZXRfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkp
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChs
aXN0KSwgPT0sIDEpOworICAgIG5vZGUgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtKGxpc3Qs
IDApOworICAgIGdfYXNzZXJ0KG5vZGUpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9p
c19zYW1lX25vZGUoV0VCS0lUX0RPTV9OT0RFKGRpdiksIG5vZGUpKTsKKyAgICBnX29iamVjdF91
bnJlZihsaXN0KTsKKworICAgIC8qIE5vdyByZW1vdmUgdGhlIHRhZyAqLworICAgIHdlYmtpdF9k
b21fbm9kZV9yZW1vdmVfY2hpbGQoV0VCS0lUX0RPTV9OT0RFKGJvZHkpLCBub2RlLCBOVUxMKTsK
KyAgICBsaXN0ID0gd2Via2l0X2RvbV9ub2RlX2dldF9jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05P
REUoYm9keSkpOworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRf
bGVuZ3RoKGxpc3QpLCA9PSwgMCk7CisgICAgZ19vYmplY3RfdW5yZWYobGlzdCk7CisKKyAgICAv
KiBUZXN0IGluc2VydF9iZWZvcmUgKi8KKworICAgIC8qIElmIHJlZkNoaWxkIGlzIG51bGwsIGlu
c2VydCBuZXdDaGlsZCBhcyBsYXN0IGVsZW1lbnQgb2YgcGFyZW50ICovCisgICAgZGl2ID0gd2Vi
a2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZWxlbWVudChkb2N1bWVudCwgIkRJViIsIE5VTEwpOwor
ICAgIHdlYmtpdF9kb21fbm9kZV9pbnNlcnRfYmVmb3JlKFdFQktJVF9ET01fTk9ERShib2R5KSwg
V0VCS0lUX0RPTV9OT0RFKGRpdiksIE5VTEwsIE5VTEwpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9k
b21fbm9kZV9oYXNfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKSk7CisgICAgbGlz
dCA9IHdlYmtpdF9kb21fbm9kZV9nZXRfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkp
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChs
aXN0KSwgPT0sIDEpOworICAgIG5vZGUgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtKGxpc3Qs
IDApOworICAgIGdfYXNzZXJ0KG5vZGUpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9p
c19zYW1lX25vZGUoV0VCS0lUX0RPTV9OT0RFKGRpdiksIG5vZGUpKTsKKyAgICBnX29iamVjdF91
bnJlZihsaXN0KTsKKworICAgIC8qIE5vdyBpbnNlcnQgYSAncCcgYmVmb3JlICdkaXYnICovCisg
ICAgcCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2VsZW1lbnQoZG9jdW1lbnQsICJQIiwg
TlVMTCk7CisgICAgd2Via2l0X2RvbV9ub2RlX2luc2VydF9iZWZvcmUoV0VCS0lUX0RPTV9OT0RF
KGJvZHkpLCBXRUJLSVRfRE9NX05PREUocCksIFdFQktJVF9ET01fTk9ERShkaXYpLCBOVUxMKTsK
KyAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVfaGFzX2NoaWxkX25vZGVzKFdFQktJVF9ET01f
Tk9ERShib2R5KSkpOworICAgIGxpc3QgPSB3ZWJraXRfZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVz
KFdFQktJVF9ET01fTk9ERShib2R5KSk7CisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9kb21f
bm9kZV9saXN0X2dldF9sZW5ndGgobGlzdCksID09LCAyKTsKKyAgICBub2RlID0gd2Via2l0X2Rv
bV9ub2RlX2xpc3RfaXRlbShsaXN0LCAwKTsKKyAgICBnX2Fzc2VydChub2RlKTsKKyAgICBnX2Fz
c2VydCh3ZWJraXRfZG9tX25vZGVfaXNfc2FtZV9ub2RlKFdFQktJVF9ET01fTk9ERShwKSwgbm9k
ZSkpOworICAgIG5vZGUgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtKGxpc3QsIDEpOworICAg
IGdfYXNzZXJ0KG5vZGUpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9pc19zYW1lX25v
ZGUoV0VCS0lUX0RPTV9OT0RFKGRpdiksIG5vZGUpKTsKKyAgICBnX29iamVjdF91bnJlZihsaXN0
KTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIGd0a190ZXN0
X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKKworICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvIik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2RvbW5vZGUv
dGVzdF9oaWVyYXJjaHlfbmF2aWdhdGlvbiIsCisgICAgICAgICAgICAgICBEb21Ob2RlRml4dHVy
ZSwgSFRNTF9ET0NVTUVOVF9ISUVSQVJDSFlfTkFWSUdBVElPTiwKKyAgICAgICAgICAgICAgIGRv
bV9ub2RlX2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0X2RvbV9ub2RlX2hpZXJh
cmNoeV9uYXZpZ2F0aW9uLAorICAgICAgICAgICAgICAgZG9tX25vZGVfZml4dHVyZV90ZWFyZG93
bik7CisKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2RvbW5vZGUvdGVzdF9pbnNlcnRpb24iLAor
ICAgICAgICAgICAgICAgRG9tTm9kZUZpeHR1cmUsIEhUTUxfRE9DVU1FTlRfTk9ERV9JTlNFUlRJ
T04sCisgICAgICAgICAgICAgICBkb21fbm9kZV9maXh0dXJlX3NldHVwLAorICAgICAgICAgICAg
ICAgdGVzdF9kb21fbm9kZV9pbnNlcnRpb24sCisgICAgICAgICAgICAgICBkb21fbm9kZV9maXh0
dXJlX3RlYXJkb3duKTsKKworICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7Cit9CisKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3Rkb3dubG9hZC5jIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGRvd25sb2FkLmMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZjhlOGRlZDkzMjJmNGRiODQ0ZDVmYzA5M2I0ZDg2ODlmODUwNWE0ZAotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3Rkb3dubG9h
ZC5jCkBAIC0wLDAgKzEsMzIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IENocmlzdGlh
biBEeXdhbiA8Y2hyaXN0aWFuQHR3b3RvYXN0cy5kZT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGdsaWIvZ3N0
ZGlvLmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgorCitHTWFpbkxvb3AqIGxvb3A7Citj
aGFyKiB0ZW1wb3JhcnlGaWxlbmFtZSA9IE5VTEw7CitXZWJLaXREb3dubG9hZCogdGhlRG93bmxv
YWQgPSBOVUxMOworCitzdGF0aWMgdm9pZAordGVzdF93ZWJraXRfZG93bmxvYWRfY3JlYXRlKHZv
aWQpCit7CisgICAgV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3Q7CisgICAgV2ViS2l0RG93
bmxvYWQqIGRvd25sb2FkOworICAgIGNvbnN0IGdjaGFyKiB1cmkgPSAiaHR0cDovL2V4YW1wbGUu
Y29tIjsKKyAgICBnY2hhciogdG1wRGlyOworCisgICAgcmVxdWVzdCA9IHdlYmtpdF9uZXR3b3Jr
X3JlcXVlc3RfbmV3KHVyaSk7CisgICAgZG93bmxvYWQgPSB3ZWJraXRfZG93bmxvYWRfbmV3KHJl
cXVlc3QpOworICAgIGdfb2JqZWN0X3VucmVmKHJlcXVlc3QpOworICAgIGdfYXNzZXJ0X2NtcHN0
cih3ZWJraXRfZG93bmxvYWRfZ2V0X3VyaShkb3dubG9hZCksID09LCB1cmkpOworICAgIGdfYXNz
ZXJ0KHdlYmtpdF9kb3dubG9hZF9nZXRfbmV0d29ya19yZXF1ZXN0KGRvd25sb2FkKSA9PSByZXF1
ZXN0KTsKKyAgICBnX2Fzc2VydChnX3N0cnJzdHIodXJpLCB3ZWJraXRfZG93bmxvYWRfZ2V0X3N1
Z2dlc3RlZF9maWxlbmFtZShkb3dubG9hZCkpKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfZG93bmxv
YWRfZ2V0X3N0YXR1cyhkb3dubG9hZCkgPT0gV0VCS0lUX0RPV05MT0FEX1NUQVRVU19DUkVBVEVE
KTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2Rvd25sb2FkX2dldF90b3RhbF9zaXplKGRvd25sb2Fk
KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9kb3dubG9hZF9nZXRfY3VycmVudF9zaXplKGRvd25s
b2FkKSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9kb3dubG9hZF9nZXRfcHJvZ3Jlc3MoZG93bmxv
YWQpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2Rvd25sb2FkX2dldF9lbGFwc2VkX3RpbWUoZG93
bmxvYWQpKTsKKyAgICB0bXBEaXIgPSBnX2ZpbGVuYW1lX3RvX3VyaShnX2dldF90bXBfZGlyKCks
IE5VTEwsIE5VTEwpOworICAgIHdlYmtpdF9kb3dubG9hZF9zZXRfZGVzdGluYXRpb25fdXJpKGRv
d25sb2FkLCB0bXBEaXIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0bXBEaXIsID09LCB3ZWJraXRf
ZG93bmxvYWRfZ2V0X2Rlc3RpbmF0aW9uX3VyaShkb3dubG9hZCkpOzsKKyAgICBnX2ZyZWUodG1w
RGlyKTsKKyAgICBnX29iamVjdF91bnJlZihkb3dubG9hZCk7Cit9CisKK3N0YXRpYyBnYm9vbGVh
bgorbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fcmVxdWVzdGVkX2NiKFdlYktpdFdlYlZpZXcq
IHdlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktp
dFdlYkZyYW1lKiB3ZWJfZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV2ViS2l0V2ViTmF2aWdhdGlvbkFjdGlvbiogYWN0aW9uLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFdlYlBvbGljeURl
Y2lzaW9uKiBkZWNpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBncG9pbnRlciBkYXRhKQoreworICAgIHdlYmtpdF93ZWJfcG9saWN5X2RlY2lzaW9uX2Rvd25s
b2FkKGRlY2lzaW9uKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQKK25vdGlm
eV9zdGF0dXNfY2IoR09iamVjdCogb2JqZWN0LCBHUGFyYW1TcGVjKiBwc3BlYywgZ3BvaW50ZXIg
ZGF0YSkKK3sKKyAgICBXZWJLaXREb3dubG9hZCogZG93bmxvYWQgPSBXRUJLSVRfRE9XTkxPQUQo
b2JqZWN0KTsKKyAgICBzd2l0Y2ggKHdlYmtpdF9kb3dubG9hZF9nZXRfc3RhdHVzKGRvd25sb2Fk
KSkgeworICAgIGNhc2UgV0VCS0lUX0RPV05MT0FEX1NUQVRVU19GSU5JU0hFRDoKKyAgICBjYXNl
IFdFQktJVF9ET1dOTE9BRF9TVEFUVVNfRVJST1I6CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQo
bG9vcCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0RPV05MT0FEX1NUQVRVU19D
QU5DRUxMRUQ6CisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIGdib29s
ZWFuCitzZXRfZmlsZW5hbWUoZ2NoYXIqIGZpbGVuYW1lKQoreworICAgIGdjaGFyICp1cmkgPSBn
X2ZpbGVuYW1lX3RvX3VyaShmaWxlbmFtZSwgTlVMTCwgTlVMTCk7CisKKyAgICB3ZWJraXRfZG93
bmxvYWRfc2V0X2Rlc3RpbmF0aW9uX3VyaSh0aGVEb3dubG9hZCwgdXJpKTsKKyAgICBnX2ZyZWUo
dXJpKTsKKworICAgIHdlYmtpdF9kb3dubG9hZF9zdGFydCh0aGVEb3dubG9hZCk7CisgICAgcmV0
dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZAoraGFuZGxlX2Rvd25sb2FkX3JlcXVlc3RlZF9j
YihXZWJLaXREb3dubG9hZCogZG93bmxvYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdib29sZWFuKiBiZWVuVGhlcmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29s
ZWFuIGFzeW5jaCkKK3sKKyAgICB0aGVEb3dubG9hZCA9IGRvd25sb2FkOworICAgICpiZWVuVGhl
cmUgPSBUUlVFOworCisgICAgaWYgKHRlbXBvcmFyeUZpbGVuYW1lKSB7CisgICAgICAgIGlmIChh
c3luY2gpIHsKKyAgICAgICAgICAgIGdfaWRsZV9hZGQoKEdTb3VyY2VGdW5jKXNldF9maWxlbmFt
ZSwgdGVtcG9yYXJ5RmlsZW5hbWUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZ2No
YXIgKnVyaSA9IGdfZmlsZW5hbWVfdG9fdXJpKHRlbXBvcmFyeUZpbGVuYW1lLCBOVUxMLCBOVUxM
KTsKKyAgICAgICAgICAgIGlmICh1cmkpCisgICAgICAgICAgICAgICAgd2Via2l0X2Rvd25sb2Fk
X3NldF9kZXN0aW5hdGlvbl91cmkoZG93bmxvYWQsIHVyaSk7CisgICAgICAgICAgICBnX2ZyZWUo
dXJpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGdfc2lnbmFsX2Nvbm5lY3QoZG93bmxvYWQs
ICJub3RpZnk6OnN0YXR1cyIsCisgICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKG5vdGlm
eV9zdGF0dXNfY2IpLCBOVUxMKTsKK30KKworc3RhdGljIGdib29sZWFuCitkb3dubG9hZF9yZXF1
ZXN0ZWRfY2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsCisgICAgICAgICAgICAgICAgICAgICAg
V2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLAorICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFu
KiBiZWVuVGhlcmUpCit7CisgICAgaGFuZGxlX2Rvd25sb2FkX3JlcXVlc3RlZF9jYihkb3dubG9h
ZCwgYmVlblRoZXJlLCBGQUxTRSk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9v
bGVhbgorZG93bmxvYWRfcmVxdWVzdGVkX2FzeW5jaF9jYihXZWJLaXRXZWJWaWV3KiB3ZWJfdmll
dywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0RG93bmxvYWQqIGRvd25sb2Fk
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiogYmVlblRoZXJlKQorewor
ICAgIGhhbmRsZV9kb3dubG9hZF9yZXF1ZXN0ZWRfY2IoZG93bmxvYWQsIGJlZW5UaGVyZSwgVFJV
RSk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3dlYmtpdF9kb3du
bG9hZF9wZXJmb3JtKGdib29sZWFuIGFzeW5jaCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgR0NhbGxi
YWNrIGRvd25sb2FkUmVxdWVzdENhbGxiYWNrID0gTlVMTDsKKworICAgIGdfb2JqZWN0X3JlZl9z
aW5rKEdfT0JKRUNUKHdlYlZpZXcpKTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywg
Im5hdmlnYXRpb24tcG9saWN5LWRlY2lzaW9uLXJlcXVlc3RlZCIsCisgICAgICAgICAgICAgICAg
ICAgICBHX0NBTExCQUNLKG5hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX3JlcXVlc3RlZF9jYiks
CisgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKworICAgIGlmIChhc3luY2gpCisgICAgICAg
IGRvd25sb2FkUmVxdWVzdENhbGxiYWNrID0gR19DQUxMQkFDSyhkb3dubG9hZF9yZXF1ZXN0ZWRf
YXN5bmNoX2NiKTsKKyAgICBlbHNlCisgICAgICAgIGRvd25sb2FkUmVxdWVzdENhbGxiYWNrID0g
R19DQUxMQkFDSyhkb3dubG9hZF9yZXF1ZXN0ZWRfY2IpOworCisgICAgZ2Jvb2xlYW4gYmVlblRo
ZXJlID0gRkFMU0U7CisgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAiZG93bmxvYWQtcmVx
dWVzdGVkIiwKKyAgICAgICAgICAgICAgICAgICAgIGRvd25sb2FkUmVxdWVzdENhbGxiYWNrLCAm
YmVlblRoZXJlKTsKKworICAgIC8qIFByZXBhcmF0aW9uOyBGSVhNRTogd2Ugc2hvdWxkIG1vdmUg
dGhpcyBjb2RlIHRvIGEgdGVzdAorICAgICAqIHV0aWxpdGllcyBmaWxlLCBiZWNhdXNlIHdlIGhh
dmUgYSB2ZXJ5IHNpbWlsYXIgb25lIGluCisgICAgICogdGVzdHdlYmZyYW1lLmMgKi8KKyAgICBH
RXJyb3IgKmVycm9yID0gTlVMTDsKKyAgICBnY2hhciogZmlsZW5hbWU7CisgICAgaW50IGZkID0g
Z19maWxlX29wZW5fdG1wKCJ3ZWJraXQtdGVzdHdlYmRvd25sb2FkLVhYWFhYWCIsICZmaWxlbmFt
ZSwgJmVycm9yKTsKKyAgICBjbG9zZShmZCk7CisKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIGdf
Y3JpdGljYWwoIkZhaWxlZCB0byBvcGVuIGEgdGVtcG9yYXJ5IGZpbGUgZm9yIHdyaXRpbmc6ICVz
LiIsIGVycm9yLT5tZXNzYWdlKTsKKworICAgIGlmIChnX3VubGluayhmaWxlbmFtZSkgPT0gLTEp
CisgICAgICAgIGdfY3JpdGljYWwoIkZhaWxlZCB0byBkZWxldGUgdGhlIHRlbXBvcmFyeSBmaWxl
OiAlcy4iLCBnX3N0cmVycm9yKGVycm5vKSk7CisKKyAgICB0aGVEb3dubG9hZCA9IE5VTEw7Cisg
ICAgdGVtcG9yYXJ5RmlsZW5hbWUgPSBmaWxlbmFtZTsKKworICAgIGxvb3AgPSBnX21haW5fbG9v
cF9uZXcoTlVMTCwgVFJVRSk7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHdlYlZpZXcs
ICJodHRwOi8vZ25vbWUub3JnLyIpOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAg
IGdfYXNzZXJ0X2NtcGludChiZWVuVGhlcmUsID09LCBUUlVFKTsKKworICAgIGdfYXNzZXJ0X2Nt
cGludChnX2ZpbGVfdGVzdCh0ZW1wb3JhcnlGaWxlbmFtZSwgR19GSUxFX1RFU1RfSVNfUkVHVUxB
UiksID09LCBUUlVFKTsKKworICAgIGdfdW5saW5rKHRlbXBvcmFyeUZpbGVuYW1lKTsKKyAgICBn
X2ZyZWUodGVtcG9yYXJ5RmlsZW5hbWUpOworICAgIHRlbXBvcmFyeUZpbGVuYW1lID0gTlVMTDsK
KworICAgIGdfbWFpbl9sb29wX3VucmVmKGxvb3ApOworICAgIGdfb2JqZWN0X3VucmVmKHdlYlZp
ZXcpOworfQorCitzdGF0aWMgdm9pZAordGVzdF93ZWJraXRfZG93bmxvYWRfc3luY2godm9pZCkK
K3sKKyAgICB0ZXN0X3dlYmtpdF9kb3dubG9hZF9wZXJmb3JtKEZBTFNFKTsKK30KKworc3RhdGlj
IHZvaWQKK3Rlc3Rfd2Via2l0X2Rvd25sb2FkX2FzeW5jaCh2b2lkKQoreworICAgIHRlc3Rfd2Vi
a2l0X2Rvd25sb2FkX3BlcmZvcm0oVFJVRSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBtaW1lX3R5
cGVfcG9saWN5X2RlY2lzaW9uX3JlcXVlc3RlZF9jYihXZWJLaXRXZWJWaWV3KiB2aWV3LCBXZWJL
aXRXZWJGcmFtZSogZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QsIGNvbnN0IGNo
YXIqIG1pbWVfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXZWJLaXRXZWJQb2xpY3lEZWNpc2lvbiogZGVjaXNpb24sIGdwb2ludGVy
IGRhdGEpCit7CisgICAgd2Via2l0X3dlYl9wb2xpY3lfZGVjaXNpb25fZG93bmxvYWQoZGVjaXNp
b24pOworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZCBpZGxlX3F1aXRfbG9vcF9j
YihXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgR1BhcmFtU3BlYyogcHNwZWMsIGdwb2ludGVyIGRh
dGEpCit7CisgICAgaWYgKHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMod2ViX3ZpZXcp
ID09IFdFQktJVF9MT0FEX0ZJTklTSEVEIHx8CisgICAgICAgIHdlYmtpdF93ZWJfdmlld19nZXRf
bG9hZF9zdGF0dXMod2ViX3ZpZXcpID09IFdFQktJVF9MT0FEX0ZBSUxFRCkKKyAgICAgICAgZ19t
YWluX2xvb3BfcXVpdChsb29wKTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3Rfd2Via2l0X2Rvd25s
b2FkX2RhdGEodm9pZCkKK3sKKyAgICBnYm9vbGVhbiBiZWVuVGhlcmUgPSBGQUxTRTsKKyAgICBX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19u
ZXcoKSk7CisgICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7CisKKyAgICBnX3NpZ25hbF9j
b25uZWN0KHdlYlZpZXcsICJkb3dubG9hZC1yZXF1ZXN0ZWQiLAorICAgICAgICAgICAgICAgICAg
ICAgR19DQUxMQkFDSyhkb3dubG9hZF9yZXF1ZXN0ZWRfY2IpLAorICAgICAgICAgICAgICAgICAg
ICAgJmJlZW5UaGVyZSk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJub3RpZnk6
OmxvYWQtc3RhdHVzIiwKKyAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0soaWRsZV9xdWl0
X2xvb3BfY2IpLAorICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICBnX3NpZ25hbF9j
b25uZWN0KHdlYlZpZXcsICJtaW1lLXR5cGUtcG9saWN5LWRlY2lzaW9uLXJlcXVlc3RlZCIsCisg
ICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKG1pbWVfdHlwZV9wb2xpY3lfZGVjaXNpb25f
cmVxdWVzdGVkX2NiKSwKKyAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgbG9vcCA9
IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKKworICAgIC8qIFdlJ3JlIHRlc3RpbmcgZm9y
IGEgY3Jhc2gsIHNvIGp1c3Qgbm90IGNyYXNoaW5nIGlzIGEgcGFzcyAqLworICAgIHdlYmtpdF93
ZWJfdmlld19sb2FkX3VyaSh3ZWJWaWV3LCAiZGF0YTphcHBsaWNhdGlvbi9vY3RlY3Qtc3RyZWFt
LCIpOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIGdfYXNzZXJ0X2NtcGludChi
ZWVuVGhlcmUsID09LCBUUlVFKTsKKworICAgIGdfbWFpbl9sb29wX3VucmVmKGxvb3ApOworICAg
IGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOworfQorCitzdGF0aWMgdm9pZCBub3RpZnlEb3dubG9h
ZFN0YXR1c0NhbGxiYWNrKEdPYmplY3QgKm9iamVjdCwgR1BhcmFtU3BlYyAqcHNwZWMsIGdwb2lu
dGVyIGRhdGEpCit7CisgICAgV2ViS2l0RG93bmxvYWQgKmRvd25sb2FkID0gV0VCS0lUX0RPV05M
T0FEKG9iamVjdCk7CisgICAgV2ViS2l0TmV0d29ya1Jlc3BvbnNlICpyZXNwb25zZSA9IHdlYmtp
dF9kb3dubG9hZF9nZXRfbmV0d29ya19yZXNwb25zZShkb3dubG9hZCk7CisgICAgU291cE1lc3Nh
Z2UgKm1lc3NhZ2UgPSB3ZWJraXRfbmV0d29ya19yZXNwb25zZV9nZXRfbWVzc2FnZShyZXNwb25z
ZSk7CisKKyAgICBzd2l0Y2ggKHdlYmtpdF9kb3dubG9hZF9nZXRfc3RhdHVzKGRvd25sb2FkKSkg
eworICAgIGNhc2UgV0VCS0lUX0RPV05MT0FEX1NUQVRVU19FUlJPUjoKKyAgICAgICAgZ19hc3Nl
cnRfY21waW50KG1lc3NhZ2UtPnN0YXR1c19jb2RlLCA9PSwgNDA0KTsKKyAgICAgICAgZ19tYWlu
X2xvb3BfcXVpdChsb29wKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXRUJLSVRfRE9XTkxP
QURfU1RBVFVTX0ZJTklTSEVEOgorICAgIGNhc2UgV0VCS0lUX0RPV05MT0FEX1NUQVRVU19DQU5D
RUxMRUQ6CisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgc2Vy
dmVyQ2FsbGJhY2soU291cFNlcnZlciAqc2VydmVyLCBTb3VwTWVzc2FnZSAqbWVzc2FnZSwgY29u
c3QgY2hhciAqcGF0aCwgR0hhc2hUYWJsZSAqcXVlcnksIFNvdXBDbGllbnRDb250ZXh0ICpjb250
ZXh0LCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBpZiAobWVzc2FnZS0+bWV0aG9kICE9IFNP
VVBfTUVUSE9EX0dFVCkgeworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdl
LCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0ZP
VU5EKTsKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9i
b2R5KTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfZG93bmxvYWRfbm90X2ZvdW5kKHZv
aWQpCit7CisgICAgU291cFNlcnZlciAqc2VydmVyID0gc291cF9zZXJ2ZXJfbmV3KFNPVVBfU0VS
VkVSX1BPUlQsIDAsIE5VTEwpOworICAgIHNvdXBfc2VydmVyX3J1bl9hc3luYyhzZXJ2ZXIpOwor
ICAgIHNvdXBfc2VydmVyX2FkZF9oYW5kbGVyKHNlcnZlciwgTlVMTCwgc2VydmVyQ2FsbGJhY2ss
IE5VTEwsIE5VTEwpOworICAgIFNvdXBVUkkgKmJhc2VVUkkgPSBzb3VwX3VyaV9uZXcoImh0dHA6
Ly8xMjcuMC4wLjEvIik7CisgICAgc291cF91cmlfc2V0X3BvcnQoYmFzZVVSSSwgc291cF9zZXJ2
ZXJfZ2V0X3BvcnQoc2VydmVyKSk7CisKKyAgICBTb3VwVVJJICp1cmkgPSBzb3VwX3VyaV9uZXdf
d2l0aF9iYXNlKGJhc2VVUkksICIvZm9vIik7CisgICAgY2hhciAqdXJpU3RyaW5nID0gc291cF91
cmlfdG9fc3RyaW5nKHVyaSwgRkFMU0UpOworICAgIHNvdXBfdXJpX2ZyZWUodXJpKTsKKworICAg
IGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisgICAgV2ViS2l0TmV0d29ya1Jl
cXVlc3QgKnJlcXVlc3QgPSB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X25ldyh1cmlTdHJpbmcpOwor
ICAgIGdfZnJlZSAodXJpU3RyaW5nKTsKKyAgICBXZWJLaXREb3dubG9hZCAqZG93bmxvYWQgPSB3
ZWJraXRfZG93bmxvYWRfbmV3KHJlcXVlc3QpOworICAgIGdfb2JqZWN0X3VucmVmKHJlcXVlc3Qp
OworCisgICAgd2Via2l0X2Rvd25sb2FkX3NldF9kZXN0aW5hdGlvbl91cmkoZG93bmxvYWQsICJm
aWxlOi8vL3RtcC9mb28iKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KGRvd25sb2FkLCAibm90aWZ5
OjpzdGF0dXMiLCBHX0NBTExCQUNLKG5vdGlmeURvd25sb2FkU3RhdHVzQ2FsbGJhY2spLCBOVUxM
KTsKKworICAgIHdlYmtpdF9kb3dubG9hZF9zdGFydChkb3dubG9hZCk7CisgICAgZ19tYWluX2xv
b3BfcnVuKGxvb3ApOworCisgICAgZ19vYmplY3RfdW5yZWYoZG93bmxvYWQpOworICAgIGdfbWFp
bl9sb29wX3VucmVmKGxvb3ApOworICAgIHNvdXBfdXJpX2ZyZWUoYmFzZVVSSSk7CisgICAgZ19v
YmplY3RfdW5yZWYoc2VydmVyKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2
KQoreworICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKKworICAgIGdfdGVz
dF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7CisgICAgZ190ZXN0X2FkZF9m
dW5jKCIvd2Via2l0L2Rvd25sb2FkL2NyZWF0ZSIsIHRlc3Rfd2Via2l0X2Rvd25sb2FkX2NyZWF0
ZSk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2Rvd25sb2FkL3N5bmNoIiwgdGVzdF93
ZWJraXRfZG93bmxvYWRfc3luY2gpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9kb3du
bG9hZC9hc3luY2giLCB0ZXN0X3dlYmtpdF9kb3dubG9hZF9hc3luY2gpOworICAgIGdfdGVzdF9h
ZGRfZnVuYygiL3dlYmtpdC9kb3dubG9hZC9kYXRhIiwgdGVzdF93ZWJraXRfZG93bmxvYWRfZGF0
YSk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2Rvd25sb2FkL25vdC1mb3VuZCIsIHRl
c3Rfd2Via2l0X2Rvd25sb2FkX25vdF9mb3VuZCk7CisgICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7
Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0
ZmF2aWNvbmRhdGFiYXNlLmMgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90
ZXN0ZmF2aWNvbmRhdGFiYXNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDcyZGE0OTZiYmI2MjdiNDQ1OTgzNGI1
ZTE0MDc0MjUyZjhlNWYyZAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0R3RrL3Rlc3RmYXZpY29uZGF0YWJhc2UuYwpAQCAtMCwwICsxLDI3NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAidGVzdF91dGlscy5oIgorI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CisjaW5j
bHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHdlYmtpdC93
ZWJraXQuaD4KKworY29uc3QgaW50IGdJY29uU2l6ZSA9IDE2OworCitHTWFpbkxvb3AgKmxvb3A7
CitjaGFyICpiYXNlVVJJOworCitzdGF0aWMgdm9pZAorc2VydmVyQ2FsbGJhY2soU291cFNlcnZl
ciAqc2VydmVyLCBTb3VwTWVzc2FnZSAqbWVzc2FnZSwgY29uc3QgY2hhciAqcGF0aCwgR0hhc2hU
YWJsZSAqcXVlcnksIFNvdXBDbGllbnRDb250ZXh0ICpjb250ZXh0LCB2b2lkICpkYXRhKQorewor
ICAgIGlmIChtZXNzYWdlLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7CisgICAgICAgIHNv
dXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9JTVBMRU1FTlRF
RCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1
cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7CisKKyAgICBjaGFyICpjb250ZW50czsKKyAgICBn
c2l6ZSBsZW5ndGg7CisgICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvZmF2aWNvbi5pY28iKSkg
eworICAgICAgICBHRXJyb3IgKmVycm9yID0gTlVMTDsKKworICAgICAgICBnX2ZpbGVfZ2V0X2Nv
bnRlbnRzKCJibGFuay5pY28iLCAmY29udGVudHMsICZsZW5ndGgsICZlcnJvcik7CisgICAgICAg
IGdfYXNzZXJ0KCFlcnJvcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29udGVudHMgPSBnX3N0
cmR1cCgiPGh0bWw+PGJvZHk+dGVzdDwvYm9keT48L2h0bWw+Iik7CisgICAgICAgIGxlbmd0aCA9
IHN0cmxlbihjb250ZW50cyk7CisgICAgfQorCisgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5k
KG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGNvbnRlbnRzLCBsZW5n
dGgpOworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2Jv
ZHkpOworfQorCitzdGF0aWMgdm9pZCBkZWxldGVEYXRhYmFzZUZpbGVJZkV4aXN0cyhjb25zdCBj
aGFyICpkYXRhYmFzZVBhdGgpCit7CisgICAgaWYgKCFnX2ZpbGVfdGVzdChkYXRhYmFzZVBhdGgs
IEdfRklMRV9URVNUX0lTX0RJUikpCisgICAgICAgIHJldHVybjsKKworICAgIGNoYXIgKmRhdGFi
YXNlRmlsZW5hbWUgPSBnX2J1aWxkX2ZpbGVuYW1lKGRhdGFiYXNlUGF0aCwgIldlYnBhZ2VJY29u
cy5kYiIsIE5VTEwpOworICAgIGlmIChnX3VubGluayhkYXRhYmFzZUZpbGVuYW1lKSA9PSAtMSkg
eworICAgICAgICBnX2ZyZWUoZGF0YWJhc2VGaWxlbmFtZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBnX2ZyZWUoZGF0YWJhc2VGaWxlbmFtZSk7CisgICAgZ19ybWRpcihkYXRhYmFz
ZVBhdGgpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlU2V0UGF0
aCgpCit7CisgICAgY2hhciAqZGF0YWJhc2VQYXRoID0gZ19idWlsZF9maWxlbmFtZShnX2dldF90
bXBfZGlyKCksICJ3ZWJraXQtdGVzdGZhdmljb25kYXRhYmFzZSIsIE5VTEwpOworICAgIGRlbGV0
ZURhdGFiYXNlRmlsZUlmRXhpc3RzKGRhdGFiYXNlUGF0aCk7CisKKyAgICBXZWJLaXRGYXZpY29u
RGF0YWJhc2UgKmRhdGFiYXNlID0gd2Via2l0X2dldF9mYXZpY29uX2RhdGFiYXNlKCk7CisgICAg
d2Via2l0X2Zhdmljb25fZGF0YWJhc2Vfc2V0X3BhdGgoZGF0YWJhc2UsIGRhdGFiYXNlUGF0aCk7
CisKKyAgICBnX2Fzc2VydF9jbXBzdHIoZGF0YWJhc2VQYXRoLCA9PSwgd2Via2l0X2Zhdmljb25f
ZGF0YWJhc2VfZ2V0X3BhdGgoZGF0YWJhc2UpKTsKKworICAgIGdfZnJlZShkYXRhYmFzZVBhdGgp
OworfQorCisvLyBTZWUgdGhlIGNvbW1lbnQgaW4gbWFpbigpIGZ1bmN0aW9uIHRoYXQgZ29lcyB3
aXRoIHRoaXMgc2FtZSBndWFyZC4KKyNpZmRlZiBOREVCVUcKKworc3RhdGljIHZvaWQgZmF2aWNv
bkRhdGFiYXNlR2V0VmFsaWRGYXZpY29uQ2FsbGJhY2soR09iamVjdCAqc291cmNlT2JqZWN0LCBH
QXN5bmNSZXN1bHQgKnJlc3VsdCwgdm9pZCAqdXNlckRhdGEpCit7CisgICAgZ2Jvb2xlYW4gKmJl
ZW5IZXJlID0gKGdib29sZWFuKil1c2VyRGF0YTsKKyAgICBHRXJyb3IgKmVycm9yID0gTlVMTDsK
KyAgICBHZGtQaXhidWYgKmljb24gPSB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNv
bl9waXhidWZfZmluaXNoKFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFKHNvdXJjZU9iamVjdCksIHJl
c3VsdCwgJmVycm9yKTsKKyAgICBnX2Fzc2VydChpY29uKTsKKyAgICBnX29iamVjdF91bnJlZihp
Y29uKTsKKworICAgICpiZWVuSGVyZSA9IFRSVUU7CisKKyAgICBnX21haW5fbG9vcF9xdWl0KGxv
b3ApOworfQorCitzdGF0aWMgdm9pZCBmYXZpY29uRGF0YWJhc2VHZXRJbnZhbGlkRmF2aWNvbkNh
bGxiYWNrKEdPYmplY3QgKnNvdXJjZU9iamVjdCwgR0FzeW5jUmVzdWx0ICpyZXN1bHQsIHZvaWQg
KnVzZXJEYXRhKQoreworICAgIGdib29sZWFuICpiZWVuSGVyZSA9IChnYm9vbGVhbiopdXNlckRh
dGE7CisgICAgR0Vycm9yICplcnJvciA9IE5VTEw7CisgICAgR2RrUGl4YnVmICppY29uID0gd2Vi
a2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fcGl4YnVmX2ZpbmlzaChXRUJLSVRfRkFW
SUNPTl9EQVRBQkFTRShzb3VyY2VPYmplY3QpLCByZXN1bHQsICZlcnJvcik7CisgICAgZ19hc3Nl
cnQoIWljb24pOworCisgICAgKmJlZW5IZXJlID0gVFJVRTsKKworICAgIGdfbWFpbl9sb29wX3F1
aXQobG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIGZhdmljb25EYXRhYmFzZUdldEZhdmljb25DYW5j
ZWxsZWRDYWxsYmFjayhHT2JqZWN0ICpzb3VyY2VPYmplY3QsIEdBc3luY1Jlc3VsdCAqcmVzdWx0
LCB2b2lkICp1c2VyRGF0YSkKK3sKKyAgICBnYm9vbGVhbiAqYmVlbkhlcmUgPSAoZ2Jvb2xlYW4q
KXVzZXJEYXRhOworICAgIEdFcnJvciAqZXJyb3IgPSBOVUxMOworICAgIEdka1BpeGJ1ZiAqaWNv
biA9IHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX3BpeGJ1Zl9maW5pc2goV0VC
S0lUX0ZBVklDT05fREFUQUJBU0Uoc291cmNlT2JqZWN0KSwgcmVzdWx0LCAmZXJyb3IpOworICAg
IGdfYXNzZXJ0KCFpY29uKTsKKyAgICBnX2Fzc2VydChlcnJvciAmJiBnX2Vycm9yX21hdGNoZXMo
ZXJyb3IsIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfQ0FOQ0VMTEVEKSk7CisKKyAgICAqYmVlbkhl
cmUgPSBUUlVFOworCisgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKK30KKworc3RhdGljIGlu
bGluZSB2b2lkIHF1aXRNYWluTG9vcElmTG9hZENvbXBsZXRlZChnYm9vbGVhbiAqaWNvbk9yUGFn
ZUxvYWRlZCkKK3sKKyAgICBpZiAoKmljb25PclBhZ2VMb2FkZWQpCisgICAgICAgIGdfbWFpbl9s
b29wX3F1aXQobG9vcCk7CisgICAgZWxzZQorICAgICAgICAqaWNvbk9yUGFnZUxvYWRlZCA9IFRS
VUU7Cit9CisKK3N0YXRpYyB2b2lkIGlkbGVRdWl0TG9vcENhbGxiYWNrKFdlYktpdFdlYlZpZXcg
KndlYlZpZXcsIEdQYXJhbVNwZWMgKnBhcmFtU3BlYywgZ2Jvb2xlYW4gKmljb25PclBhZ2VMb2Fk
ZWQpCit7CisgICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X2xvYWRfc3RhdHVzKHdlYlZpZXcpOworCisgICAgaWYgKHN0YXR1cyA9PSBXRUJLSVRfTE9BRF9G
SU5JU0hFRCB8fCBzdGF0dXMgPT0gV0VCS0lUX0xPQURfRkFJTEVEKQorICAgICAgICBxdWl0TWFp
bkxvb3BJZkxvYWRDb21wbGV0ZWQoaWNvbk9yUGFnZUxvYWRlZCk7Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdFdlYlZpZXdJY29uTG9hZGVkKFdlYktpdEZhdmljb25EYXRhYmFzZSAqZGF0YWJhc2Us
IGNvbnN0IGNoYXIgKmZyYW1lVVJJLCBnYm9vbGVhbiAqaWNvbk9yUGFnZUxvYWRlZCkKK3sKKyAg
ICBxdWl0TWFpbkxvb3BJZkxvYWRDb21wbGV0ZWQoaWNvbk9yUGFnZUxvYWRlZCk7Cit9CisKK3N0
YXRpYyB2b2lkIGxvYWRVUkkoY29uc3QgY2hhciAqdXJpKQoreworICAgIFdlYktpdFdlYlZpZXcg
KnZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBnYm9v
bGVhbiBpY29uT3JQYWdlTG9hZGVkID0gRkFMU0U7CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9h
ZF91cmkodmlldywgdXJpKTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3QodmlldywgIm5vdGlmeTo6
bG9hZC1zdGF0dXMiLCBHX0NBTExCQUNLKGlkbGVRdWl0TG9vcENhbGxiYWNrKSwgJmljb25PclBh
Z2VMb2FkZWQpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QodmlldywgImljb24tbG9hZGVkIiwgR19D
QUxMQkFDSyh3ZWJraXRXZWJWaWV3SWNvbkxvYWRlZCksICZpY29uT3JQYWdlTG9hZGVkKTsKKwor
ICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nv
bm5lY3RfbWF0Y2hlZCh2aWV3LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCAmaWNv
bk9yUGFnZUxvYWRlZCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBmYXZpY29uRGF0YWJhc2VHZXRW
YWxpZEZhdmljb25JZGxlKHZvaWQgKnVzZXJEYXRhKQoreworICAgIHdlYmtpdF9mYXZpY29uX2Rh
dGFiYXNlX2dldF9mYXZpY29uX3BpeGJ1Zih3ZWJraXRfZ2V0X2Zhdmljb25fZGF0YWJhc2UoKSwg
YmFzZVVSSSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z0ljb25TaXplLCBnSWNvblNpemUsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZhdmljb25EYXRhYmFzZUdldFZhbGlkRmF2aWNvbkNhbGxiYWNr
LCB1c2VyRGF0YSk7CisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gZmF2
aWNvbkRhdGFiYXNlR2V0SW52YWxpZEZhdmljb25JZGxlKHZvaWQgKnVzZXJEYXRhKQoreworICAg
IHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX3BpeGJ1Zih3ZWJraXRfZ2V0X2Zh
dmljb25fZGF0YWJhc2UoKSwgImh0dHA6Ly93d3cud2Via2l0Z3RrLm9yZy8iLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnSWNvblNpemUsIGdJY29uU2l6
ZSwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmF2aWNvbkRhdGFiYXNlR2V0SW52YWxpZEZhdmljb25DYWxsYmFjaywgdXNlckRhdGEpOworICAg
IHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGdib29sZWFuIGZhdmljb25EYXRhYmFzZUdldEZh
dmljb25DYW5jZWxsZWRJZGxlKHZvaWQgKnVzZXJEYXRhKQoreworICAgIEdDYW5jZWxsYWJsZSAq
Y2FuY2VsbGFibGUgPSBnX2NhbmNlbGxhYmxlX25ldygpOworICAgIHdlYmtpdF9mYXZpY29uX2Rh
dGFiYXNlX2dldF9mYXZpY29uX3BpeGJ1Zih3ZWJraXRfZ2V0X2Zhdmljb25fZGF0YWJhc2UoKSwg
YmFzZVVSSSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z0ljb25TaXplLCBnSWNvblNpemUsIGNhbmNlbGxhYmxlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmYXZpY29uRGF0YWJhc2VHZXRGYXZpY29uQ2FuY2Vs
bGVkQ2FsbGJhY2ssIHVzZXJEYXRhKTsKKyAgICBnX2NhbmNlbGxhYmxlX2NhbmNlbChjYW5jZWxs
YWJsZSk7CisgICAgZ19vYmplY3RfdW5yZWYoY2FuY2VsbGFibGUpOworICAgIHJldHVybiBGQUxT
RTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYktpdEZhdmljb25EYXRhYmFzZUdldEZhdmljb24o
KQoreworICAgIGdib29sZWFuIGJlZW5Ub0ljb25DYWxsYmFjazsKKworICAgIGxvb3AgPSBnX21h
aW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisKKyAgICAvKiBMb2FkIHVyaSB0byBtYWtlIHN1cmUg
ZmF2aWNvbiBpcyBhZGRlZCB0byBkYXRhYmFzZS4gKi8KKyAgICBsb2FkVVJJKGJhc2VVUkkpOwor
CisgICAgYmVlblRvSWNvbkNhbGxiYWNrID0gRkFMU0U7CisgICAgZ19pZGxlX2FkZCgoR1NvdXJj
ZUZ1bmMpZmF2aWNvbkRhdGFiYXNlR2V0VmFsaWRGYXZpY29uSWRsZSwgJmJlZW5Ub0ljb25DYWxs
YmFjayk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworICAgIGdfYXNzZXJ0KGJlZW5Ub0lj
b25DYWxsYmFjayk7CisKKyAgICBiZWVuVG9JY29uQ2FsbGJhY2sgPSBGQUxTRTsKKyAgICBnX2lk
bGVfYWRkKChHU291cmNlRnVuYylmYXZpY29uRGF0YWJhc2VHZXRJbnZhbGlkRmF2aWNvbklkbGUs
ICZiZWVuVG9JY29uQ2FsbGJhY2spOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKyAgICBn
X2Fzc2VydChiZWVuVG9JY29uQ2FsbGJhY2spOworCisgICAgYmVlblRvSWNvbkNhbGxiYWNrID0g
RkFMU0U7CisgICAgZ19pZGxlX2FkZCgoR1NvdXJjZUZ1bmMpZmF2aWNvbkRhdGFiYXNlR2V0RmF2
aWNvbkNhbmNlbGxlZElkbGUsICZiZWVuVG9JY29uQ2FsbGJhY2spOworICAgIGdfbWFpbl9sb29w
X3J1bihsb29wKTsKKyAgICBnX2Fzc2VydChiZWVuVG9JY29uQ2FsbGJhY2spOworfQorCitzdGF0
aWMgdm9pZCB0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNvblVSSSgpCit7CisgICAg
Y2hhciAqaWNvblVSSSA9IHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX3VyaSh3
ZWJraXRfZ2V0X2Zhdmljb25fZGF0YWJhc2UoKSwgYmFzZVVSSSk7CisgICAgY2hhciAqZXhwZWN0
ZWRVUkkgPSBnX3N0cmR1cF9wcmludGYoIiVzZmF2aWNvbi5pY28iLCBiYXNlVVJJKTsKKyAgICBn
X2Fzc2VydF9jbXBzdHIoaWNvblVSSSwgPT0sIGV4cGVjdGVkVVJJKTsKKyAgICBnX2ZyZWUoZXhw
ZWN0ZWRVUkkpOworICAgIGdfZnJlZShpY29uVVJJKTsKK30KKworI2VuZGlmCisKK3N0YXRpYyB2
b2lkIHRlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VSZW1vdmVBbGwodm9pZCkKK3sKKyAgICBXZWJL
aXRGYXZpY29uRGF0YWJhc2UgKmRhdGFiYXNlID0gd2Via2l0X2dldF9mYXZpY29uX2RhdGFiYXNl
KCk7CisgICAgd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfY2xlYXIoZGF0YWJhc2UpOworICAgIGNo
YXIgKmljb25VUkkgPSB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl91cmkoZGF0
YWJhc2UsIGJhc2VVUkkpOworICAgIGdfYXNzZXJ0KCFpY29uVVJJKTsKKyAgICBnX2ZyZWUoaWNv
blVSSSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VDbG9zZURh
dGFiYXNlKHZvaWQpCit7CisgICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlICpkYXRhYmFzZSA9IHdl
YmtpdF9nZXRfZmF2aWNvbl9kYXRhYmFzZSgpOworICAgIGNoYXIgKmRhdGFiYXNlUGF0aCA9IGdf
c3RyZHVwKHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9wYXRoKGRhdGFiYXNlKSk7CisgICAg
d2Via2l0X2Zhdmljb25fZGF0YWJhc2Vfc2V0X3BhdGgoZGF0YWJhc2UsIDApOworICAgIGRlbGV0
ZURhdGFiYXNlRmlsZUlmRXhpc3RzKGRhdGFiYXNlUGF0aCk7CisgICAgZ19mcmVlKGRhdGFiYXNl
UGF0aCk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBndGtf
dGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7CisKKyAgICAvKiBUaGlzIGhvcGVmdWxseSBt
YWtlcyB0aGUgdGVzdCBpbmRlcGVuZGVudCBvZiB0aGUgcGF0aCBpdCdzIGNhbGxlZCBmcm9tLiAq
LworICAgIHRlc3R1dGlsc19yZWxhdGl2ZV9jaGRpcigiVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRHdGsvcmVzb3VyY2VzL3Rlc3QuaHRtbCIsIGFyZ3ZbMF0pOworCisgICAgU291cFNl
cnZlciAqc2VydmVyID0gc291cF9zZXJ2ZXJfbmV3KFNPVVBfU0VSVkVSX1BPUlQsIDAsIE5VTEwp
OworICAgIHNvdXBfc2VydmVyX3J1bl9hc3luYyhzZXJ2ZXIpOworCisgICAgc291cF9zZXJ2ZXJf
YWRkX2hhbmRsZXIoc2VydmVyLCBOVUxMLCBzZXJ2ZXJDYWxsYmFjaywgTlVMTCwgTlVMTCk7CisK
KyAgICBTb3VwVVJJICpzb3VwVVJJID0gc291cF91cmlfbmV3KCJodHRwOi8vMTI3LjAuMC4xLyIp
OworICAgIHNvdXBfdXJpX3NldF9wb3J0KHNvdXBVUkksIHNvdXBfc2VydmVyX2dldF9wb3J0KHNl
cnZlcikpOworCisgICAgYmFzZVVSSSA9IHNvdXBfdXJpX3RvX3N0cmluZyhzb3VwVVJJLCBGQUxT
RSk7CisgICAgc291cF91cmlfZnJlZShzb3VwVVJJKTsKKworICAgIGdfdGVzdF9idWdfYmFzZSgi
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0
L2Zhdmljb25kYXRhYmFzZS9zZXQtcGF0aCIsIHRlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VTZXRQ
YXRoKTsKKworICAgIC8vIFRoZXNlIHR3byB0ZXN0cyB3aWxsIHRyaWdnZXIgYW4gQVNTRVJUSU9O
IG9uIGRlYnVnIGJ1aWxkcyBkdWUKKyAgICAvLyB0byBodHRwOi8vd2Via2l0Lm9yZy9iLzY3NTgy
LiBSZW1vdmUgdGhlIGd1YXJkcyBvbmNlIHRoZSBidWcgaXMgZml4ZWQuCisjaWZkZWYgTkRFQlVH
CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2Zhdmljb25kYXRhYmFzZS9nZXQtZmF2aWNv
biIsIHRlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VHZXRGYXZpY29uKTsKKyAgICBnX3Rlc3RfYWRk
X2Z1bmMoIi93ZWJraXQvZmF2aWNvbmRhdGFiYXNlL2dldC1mYXZpY29uLXVyaSIsIHRlc3RXZWJL
aXRGYXZpY29uRGF0YWJhc2VHZXRGYXZpY29uVVJJKTsKKyNlbmRpZgorCisgICAgZ190ZXN0X2Fk
ZF9mdW5jKCIvd2Via2l0L2Zhdmljb25kYXRhYmFzZS9yZW1vdmUtYWxsIiwgdGVzdFdlYktpdEZh
dmljb25EYXRhYmFzZVJlbW92ZUFsbCk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2Zh
dmljb25kYXRhYmFzZS9jbG9zZS1kYiIsIHRlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VDbG9zZURh
dGFiYXNlKTsKKworICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7Cit9CmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0Z2xvYmFscy5jIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGdsb2JhbHMuYwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40Yjll
YzRmY2Y1ZDhhNjYwYzRkODQ5ZGUwNThlOTFhOTVhNWZlMzc3Ci0tLSAvZGV2L251bGwKKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGdsb2JhbHMuYwpAQCAtMCww
ICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBDb2xsYWJvcmEgTHRkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPGxpYnNvdXAv
c291cC5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKworLy8gTWFrZSBzdXJlIHRoZSBz
ZXNzaW9uIGlzIGluaXRpYWxpemVkIHByb3Blcmx5IHdoZW4gd2Via2l0X2dldF9kZWZhdWx0X3Nl
c3Npb24oKSBpcyBjYWxsZWQuCitzdGF0aWMgdm9pZCB0ZXN0X2dsb2JhbHNfZGVmYXVsdF9zZXNz
aW9uKCkKK3sKKyAgICBnX3Rlc3RfYnVnKCIzNjc1NCIpOworCisgICAgU291cFNlc3Npb24qIHNl
c3Npb24gPSB3ZWJraXRfZ2V0X2RlZmF1bHRfc2Vzc2lvbigpOworICAgIHNvdXBfc2Vzc2lvbl9y
ZW1vdmVfZmVhdHVyZV9ieV90eXBlKHNlc3Npb24sIFdFQktJVF9UWVBFX1NPVVBfQVVUSF9ESUFM
T0cpOworCisgICAgLy8gVGhpcyBtYWtlcyBzdXJlIG91ciBpbml0aWFsaXphdGlvbiByYW4uCisg
ICAgZ19hc3NlcnQoc291cF9zZXNzaW9uX2dldF9mZWF0dXJlKHNlc3Npb24sIFNPVVBfVFlQRV9D
T05URU5UX0RFQ09ERVIpICE9IE5VTEwpOworCisgICAgLy8gQ3JlYXRpbmcgYSBXZWJWaWV3IHNo
b3VsZCBtYWtlIHN1cmUgdGhlIHNlc3Npb24gaXMKKyAgICAvLyBpbml0aWFsaXplZCwgYW5kIG5v
dCBtZXNzIHdpdGggb3VyIGNoYW5nZXMuCisgICAgV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcgPSBX
RUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBnX29iamVjdF9yZWZf
c2luayh3ZWJfdmlldyk7CisgICAgZ19vYmplY3RfdW5yZWYod2ViX3ZpZXcpOworCisgICAgLy8g
VGhlc2UgbWFrZXMgc3VyZSBvdXIgbW9kaWZpY2F0aW9uIHdhcyBrZXB0LgorICAgIGdfYXNzZXJ0
KHNvdXBfc2Vzc2lvbl9nZXRfZmVhdHVyZShzZXNzaW9uLCBTT1VQX1RZUEVfQ09OVEVOVF9ERUNP
REVSKSAhPSBOVUxMKTsKKyAgICBnX2Fzc2VydChzb3VwX3Nlc3Npb25fZ2V0X2ZlYXR1cmUoc2Vz
c2lvbiwgV0VCS0lUX1RZUEVfU09VUF9BVVRIX0RJQUxPRykgPT0gTlVMTCk7Cit9CisKK3N0YXRp
YyB2b2lkIHRlc3RfZ2xvYmFsc19zZWN1cml0eV9wb2xpY3koKQoreworICAgIC8vIENoZWNrIGRl
ZmF1bHQgcG9saWN5IGZvciB3ZWxsIGtub3duIHNjaGVtZXMuCisgICAgV2ViS2l0U2VjdXJpdHlQ
b2xpY3kgcG9saWN5ID0gd2Via2l0X2dldF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUo
Imh0dHAiKTsKKyAgICBndWludCBtYXNrID0gV0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9DT1JTX0VO
QUJMRUQ7CisgICAgZ19hc3NlcnRfY21wdWludChwb2xpY3kgJiBtYXNrLCA9PSwgbWFzayk7CisK
KyAgICBwb2xpY3kgPSB3ZWJraXRfZ2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgi
aHR0cHMiKTsKKyAgICBtYXNrID0gV0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9TRUNVUkUgfCBXRUJL
SVRfU0VDVVJJVFlfUE9MSUNZX0NPUlNfRU5BQkxFRDsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHBv
bGljeSAmIG1hc2ssID09LCBtYXNrKTsKKworICAgIHBvbGljeSA9IHdlYmtpdF9nZXRfc2VjdXJp
dHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJmaWxlIik7CisgICAgbWFzayA9IFdFQktJVF9TRUNV
UklUWV9QT0xJQ1lfTE9DQUw7CisgICAgZ19hc3NlcnRfY21wdWludChwb2xpY3kgJiBtYXNrLCA9
PSwgbWFzayk7CisKKyAgICBwb2xpY3kgPSB3ZWJraXRfZ2V0X3NlY3VyaXR5X3BvbGljeV9mb3Jf
dXJpX3NjaGVtZSgiZGF0YSIpOworICAgIG1hc2sgPSBXRUJLSVRfU0VDVVJJVFlfUE9MSUNZX05P
X0FDQ0VTU19UT19PVEhFUl9TQ0hFTUUgfCBXRUJLSVRfU0VDVVJJVFlfUE9MSUNZX1NFQ1VSRTsK
KyAgICBnX2Fzc2VydF9jbXB1aW50KHBvbGljeSAmIG1hc2ssID09LCBtYXNrKTsKKworICAgIHBv
bGljeSA9IHdlYmtpdF9nZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJhYm91dCIp
OworICAgIG1hc2sgPSBXRUJLSVRfU0VDVVJJVFlfUE9MSUNZX05PX0FDQ0VTU19UT19PVEhFUl9T
Q0hFTUUgfCBXRUJLSVRfU0VDVVJJVFlfUE9MSUNZX1NFQ1VSRSB8IFdFQktJVF9TRUNVUklUWV9Q
T0xJQ1lfRU1QVFlfRE9DVU1FTlQ7CisgICAgZ19hc3NlcnRfY21wdWludChwb2xpY3kgJiBtYXNr
LCA9PSwgbWFzayk7CisKKyAgICAvLyBDdXN0b20gc2NoZW1lLgorICAgIHBvbGljeSA9IHdlYmtp
dF9nZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJmb28iKTsKKyAgICBnX2Fzc2Vy
dCghcG9saWN5KTsKKworICAgIHBvbGljeSB8PSBXRUJLSVRfU0VDVVJJVFlfUE9MSUNZX0xPQ0FM
OworICAgIHdlYmtpdF9zZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJmb28iLCBw
b2xpY3kpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2dldF9zZWN1cml0eV9wb2xpY3lf
Zm9yX3VyaV9zY2hlbWUoImZvbyIpLCA9PSwgcG9saWN5KTsKKworICAgIHBvbGljeSB8PSBXRUJL
SVRfU0VDVVJJVFlfUE9MSUNZX05PX0FDQ0VTU19UT19PVEhFUl9TQ0hFTUU7CisgICAgd2Via2l0
X3NldF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUoImZvbyIsIHBvbGljeSk7CisgICAg
Z19hc3NlcnRfY21wdWludCh3ZWJraXRfZ2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVt
ZSgiZm9vIiksID09LCBwb2xpY3kpOworCisgICAgcG9saWN5IHw9IFdFQktJVF9TRUNVUklUWV9Q
T0xJQ1lfRElTUExBWV9JU09MQVRFRDsKKyAgICB3ZWJraXRfc2V0X3NlY3VyaXR5X3BvbGljeV9m
b3JfdXJpX3NjaGVtZSgiZm9vIiwgcG9saWN5KTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtp
dF9nZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJmb28iKSwgPT0sIHBvbGljeSk7
CisKKyAgICBwb2xpY3kgfD0gV0VCS0lUX1NFQ1VSSVRZX1BPTElDWV9TRUNVUkU7CisgICAgd2Vi
a2l0X3NldF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUoImZvbyIsIHBvbGljeSk7Cisg
ICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfZ2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3Nj
aGVtZSgiZm9vIiksID09LCBwb2xpY3kpOworCisgICAgcG9saWN5IHw9IFdFQktJVF9TRUNVUklU
WV9QT0xJQ1lfQ09SU19FTkFCTEVEOworICAgIHdlYmtpdF9zZXRfc2VjdXJpdHlfcG9saWN5X2Zv
cl91cmlfc2NoZW1lKCJmb28iLCBwb2xpY3kpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0
X2dldF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUoImZvbyIpLCA9PSwgcG9saWN5KTsK
KworICAgIHBvbGljeSB8PSBXRUJLSVRfU0VDVVJJVFlfUE9MSUNZX0VNUFRZX0RPQ1VNRU5UOwor
ICAgIHdlYmtpdF9zZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJmb28iLCBwb2xp
Y3kpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2dldF9zZWN1cml0eV9wb2xpY3lfZm9y
X3VyaV9zY2hlbWUoImZvbyIpLCA9PSwgcG9saWN5KTsKK30KKworaW50IG1haW4oaW50IGFyZ2Ms
IGNoYXIqKiBhcmd2KQoreworICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsK
KworICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7CisgICAg
Z190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2dsb2JhbHMvZGVmYXVsdF9zZXNzaW9uIiwKKyAgICAg
ICAgICAgICAgICAgICAgdGVzdF9nbG9iYWxzX2RlZmF1bHRfc2Vzc2lvbik7CisgICAgZ190ZXN0
X2FkZF9mdW5jKCIvd2Via2l0L2dsb2JhbHMvc2VjdXJpdHktcG9saWN5IiwKKyAgICAgICAgICAg
ICAgICAgICAgdGVzdF9nbG9iYWxzX3NlY3VyaXR5X3BvbGljeSk7CisgICAgcmV0dXJuIGdfdGVz
dF9ydW4oKTsKK30KKwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRHdGsvdGVzdGhpdHRlc3RyZXN1bHQuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0R3RrL3Rlc3RoaXR0ZXN0cmVzdWx0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2JmMDExMDQ4M2ExMDA3Y2I2
Zjk1MmRkYmMzZWJjMDA1N2E0OWFlZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RoaXR0ZXN0cmVzdWx0LmMKQEAgLTAsMCArMSwxNjkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUg
PGdsaWIvZ3N0ZGlvLmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgorCit0eXBlZGVmIHN0
cnVjdCB7CisgIGNoYXIqIGRhdGE7CisgIGd1aW50IGZsYWc7Cit9IFRlc3RJbmZvOworCitzdGF0
aWMgR01haW5Mb29wKiBsb29wOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgV2ViS2l0V2ViVmll
dyogd2ViVmlldzsKKyAgICBUZXN0SW5mbyogaW5mbzsKK30gSGl0VGVzdFJlc3VsdEZpeHR1cmU7
CisKK1Rlc3RJbmZvKgordGVzdF9pbmZvX25ldyhjb25zdCBjaGFyKiBkYXRhLCBndWludCBmbGFn
KQoreworICAgIFRlc3RJbmZvKiBpbmZvOworCisgICAgaW5mbyA9IGdfc2xpY2VfbmV3KFRlc3RJ
bmZvKTsKKyAgICBpbmZvLT5kYXRhID0gZ19zdHJkdXAoZGF0YSk7CisgICAgaW5mby0+ZmxhZyA9
IGZsYWc7CisKKyAgICByZXR1cm4gaW5mbzsKK30KKwordm9pZAordGVzdF9pbmZvX2Rlc3Ryb3ko
VGVzdEluZm8qIGluZm8pCit7CisgICAgZ19mcmVlKGluZm8tPmRhdGEpOworICAgIGdfc2xpY2Vf
ZnJlZShUZXN0SW5mbywgaW5mbyk7Cit9CisKK3N0YXRpYyB2b2lkIGhpdF90ZXN0X3Jlc3VsdF9m
aXh0dXJlX3NldHVwKEhpdFRlc3RSZXN1bHRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVy
IGRhdGEpCit7CisgICAgZml4dHVyZS0+d2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRf
d2ViX3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKGZpeHR1cmUtPndlYlZpZXcp
OworICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisgICAgZml4dHVyZS0+
aW5mbyA9IChUZXN0SW5mbyopZGF0YTsKK30KKworc3RhdGljIHZvaWQgaGl0X3Rlc3RfcmVzdWx0
X2ZpeHR1cmVfdGVhcmRvd24oSGl0VGVzdFJlc3VsdEZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBv
aW50ZXIgZGF0YSkKK3sKKyAgICBnX29iamVjdF91bnJlZihmaXh0dXJlLT53ZWJWaWV3KTsKKyAg
ICBnX21haW5fbG9vcF91bnJlZihsb29wKTsKKyAgICB0ZXN0X2luZm9fZGVzdHJveShmaXh0dXJl
LT5pbmZvKTsKK30KKworc3RhdGljIHZvaWQKK2xvYWRfc3RhdHVzX2NiKFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcsCisgICAgICAgICAgICAgICBHUGFyYW1TcGVjKiBzcGVjLAorICAgICAgICAgICAg
ICAgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtp
dF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMod2ViVmlldyk7CisgICAgVGVzdEluZm8qIGluZm8g
PSAoVGVzdEluZm8qKWRhdGE7CisKKyAgICBpZiAoc3RhdHVzID09IFdFQktJVF9MT0FEX0ZJTklT
SEVEKSB7CisgICAgICAgIFdlYktpdEhpdFRlc3RSZXN1bHQqIHJlc3VsdDsKKyAgICAgICAgZ3Vp
bnQgY29udGV4dDsKKyAgICAgICAgR2RrRXZlbnQqIGV2ZW50ID0gZ2RrX2V2ZW50X25ldyhHREtf
QlVUVE9OX1BSRVNTKTsKKyAgICAgICAgV2ViS2l0RE9NTm9kZSogbm9kZTsKKyAgICAgICAgZ2lu
dCB4LCB5OworCisgICAgICAgIC8qIENsb3NlIGVub3VnaCB0byAwLDAgKi8KKyAgICAgICAgZXZl
bnQtPmJ1dHRvbi54ID0gNTsKKyAgICAgICAgZXZlbnQtPmJ1dHRvbi55ID0gNTsKKworICAgICAg
ICByZXN1bHQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2hpdF90ZXN0X3Jlc3VsdCh3ZWJWaWV3LCAo
R2RrRXZlbnRCdXR0b24qKSBldmVudCk7CisgICAgICAgIGdka19ldmVudF9mcmVlKGV2ZW50KTsK
KyAgICAgICAgZ19hc3NlcnQocmVzdWx0KTsKKworICAgICAgICBnX29iamVjdF9nZXQocmVzdWx0
LCAiY29udGV4dCIsICZjb250ZXh0LCBOVUxMKTsKKyAgICAgICAgZ19hc3NlcnQoY29udGV4dCAm
IGluZm8tPmZsYWcpOworCisgICAgICAgIGdfb2JqZWN0X2dldChyZXN1bHQsICJpbm5lci1ub2Rl
IiwgJm5vZGUsIE5VTEwpOworICAgICAgICBnX2Fzc2VydChub2RlKTsKKyAgICAgICAgZ19hc3Nl
cnQoV0VCS0lUX0RPTV9JU19OT0RFKG5vZGUpKTsKKworICAgICAgICBnX29iamVjdF9nZXQocmVz
dWx0LCAieCIsICZ4LCAieSIsICZ5LCBOVUxMKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KHgs
ID09LCA1KTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KHksID09LCA1KTsKKworICAgICAgICAv
KiBXZSBjYW4gb25seSB0ZXN0IHRoZXNlIG5vZGUgdHlwZXMgYXQgdGhlIG1vbWVudC4gSW4gdGhl
CisgICAgICAgICAqIGlucHV0IGNhc2UgdGhlcmUgc2VlbXMgdG8gYmUgYW4gZXh0cmEgbGF5ZXIg
d2l0aCBhIERJViBvbgorICAgICAgICAgKiB0b3Agb2YgdGhlIGlucHV0LCB3aGljaCBnZXRzIGFz
c2lnbmVkIHRvIHRoZSBpbm5lci1ub2RlLgorICAgICAgICAgKiB0YWcgKi8KKyAgICAgICAgaWYg
KGluZm8tPmZsYWcgPT0gV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0RPQ1VNRU5UKQor
ICAgICAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0hUTUxfRUxFTUVOVChub2Rl
KSk7CisgICAgICAgIGVsc2UgaWYgKGluZm8tPmZsYWcgPT0gV0VCS0lUX0hJVF9URVNUX1JFU1VM
VF9DT05URVhUX0lNQUdFKQorICAgICAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1M
X0lNQUdFX0VMRU1FTlQobm9kZSkpOworICAgICAgICBlbHNlIGlmIChpbmZvLT5mbGFnID09IFdF
QktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9MSU5LKSB7CisgICAgICAgICAgICAvKiBUaGUg
aGl0IHRlc3Qgd2lsbCBnaXZlIHVzIHRoZSBpbm5lciB0ZXh0IG5vZGUsIHdlIHdhbnQKKyAgICAg
ICAgICAgICAqIHRoZSBBIHRhZyAqLworICAgICAgICAgICAgV2ViS2l0RE9NTm9kZSogcGFyZW50
ID0gd2Via2l0X2RvbV9ub2RlX2dldF9wYXJlbnRfbm9kZShub2RlKTsKKyAgICAgICAgICAgIGdf
YXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9BTkNIT1JfRUxFTUVOVChwYXJlbnQpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGdfb2JqZWN0X3VucmVmKHJlc3VsdCk7CisgICAgICAgIGdfbWFpbl9s
b29wX3F1aXQobG9vcCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAordGVzdF93ZWJraXRfaGl0
X3Rlc3RfcmVzdWx0KEhpdFRlc3RSZXN1bHRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVy
IGRhdGEpCit7CisgICAgVGVzdEluZm8qIGluZm8gPSAoVGVzdEluZm8qKWRhdGE7CisgICAgR3Rr
QWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA1MCwgNTAgfTsKKworICAgIHdlYmtpdF93
ZWJfdmlld19sb2FkX3N0cmluZyhmaXh0dXJlLT53ZWJWaWV3LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbmZvLT5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAidGV4dC9odG1sIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInV0Zi04IiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGU6Ly8iKTsKKyAgICBndGtfd2lk
Z2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSwgJmFsbG9jYXRp
b24pOworICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2ViVmlldywgIm5vdGlmeTo6bG9h
ZC1zdGF0dXMiLCBHX0NBTExCQUNLKGxvYWRfc3RhdHVzX2NiKSwgaW5mbyk7CisgICAgZ19tYWlu
X2xvb3BfcnVuKGxvb3ApOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7
CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAgZ190ZXN0X2J1
Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKKworICAgIGdfdGVzdF9hZGQoIi93
ZWJraXQvaGl0dGVzdHJlc3VsdC9kb2N1bWVudCIsIEhpdFRlc3RSZXN1bHRGaXh0dXJlLCAKKyAg
ICAgICAgICAgICAgIHRlc3RfaW5mb19uZXcoIjxodG1sPjxib2R5PjxoMT5XZWJLaXRHVEsrITwv
aDE+PC9ib2R5PjwvaHRtbD4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRf
SElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfRE9DVU1FTlQpLAorICAgICAgICAgICAgICAgaGl0X3Rl
c3RfcmVzdWx0X2ZpeHR1cmVfc2V0dXAsIHRlc3Rfd2Via2l0X2hpdF90ZXN0X3Jlc3VsdCwgaGl0
X3Rlc3RfcmVzdWx0X2ZpeHR1cmVfdGVhcmRvd24pOworICAgIC8qIFdlIGhhcmRjb2RlIGFsbCBl
bGVtZW50cyB0byBiZSBhdCAwLDAgc28gdGhhdCB3ZSBrbm93IHdoZXJlIHRvCisgICAgICogZ2Vu
ZXJhdGUgdGhlIGJ1dHRvbiBldmVudHMgKi8KKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2hpdHRl
c3RyZXN1bHQvaW1hZ2UiLCBIaXRUZXN0UmVzdWx0Rml4dHVyZSwKKyAgICAgICAgICAgICAgIHRl
c3RfaW5mb19uZXcoIjxodG1sPjxib2R5PjxpbWcgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBs
ZWZ0OjA7IHRvcDowJ3NyYz0nMHhkZWFkYmVlZicgd2lkdGg9NTAgaGVpZ2h0PTUwPjwvaW1nPjwv
Ym9keT48L2h0bWw+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX0hJVF9U
RVNUX1JFU1VMVF9DT05URVhUX0lNQUdFKSwKKyAgICAgICAgICAgICAgIGhpdF90ZXN0X3Jlc3Vs
dF9maXh0dXJlX3NldHVwLCB0ZXN0X3dlYmtpdF9oaXRfdGVzdF9yZXN1bHQsIGhpdF90ZXN0X3Jl
c3VsdF9maXh0dXJlX3RlYXJkb3duKTsKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2hpdHRlc3Ry
ZXN1bHQvZWRpdGFibGUiLCBIaXRUZXN0UmVzdWx0Rml4dHVyZSwKKyAgICAgICAgICAgICAgIHRl
c3RfaW5mb19uZXcoIjxodG1sPjxib2R5PjxpbnB1dCBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7
IGxlZnQ6MDsgdG9wOjAnIHNpemU9JzM1Jz48L2lucHV0Pj48L2JvZHk+PC9odG1sPiIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9F
RElUQUJMRSksCisgICAgICAgICAgICAgICBoaXRfdGVzdF9yZXN1bHRfZml4dHVyZV9zZXR1cCwg
dGVzdF93ZWJraXRfaGl0X3Rlc3RfcmVzdWx0LCBoaXRfdGVzdF9yZXN1bHRfZml4dHVyZV90ZWFy
ZG93bik7CisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9oaXR0ZXN0cmVzdWx0L2xpbmsiLCBIaXRU
ZXN0UmVzdWx0Rml4dHVyZSwKKyAgICAgICAgICAgICAgIHRlc3RfaW5mb19uZXcoIjxodG1sPjxi
b2R5PjxhIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDowOyB0b3A6MCcgaHJlZj0naHR0
cDovL3d3dy5leGFtcGxlLmNvbSc+SEVMTE8gV09STEQ8L2E+PC9ib2R5PjwvaHRtbD4iLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRf
TElOSyksCisgICAgICAgICAgICAgICBoaXRfdGVzdF9yZXN1bHRfZml4dHVyZV9zZXR1cCwgdGVz
dF93ZWJraXRfaGl0X3Rlc3RfcmVzdWx0LCBoaXRfdGVzdF9yZXN1bHRfZml4dHVyZV90ZWFyZG93
bik7CisgICAgICAgICAgICAgICAKKyAgICByZXR1cm4gZ190ZXN0X3J1biAoKTsKK30KKwpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGh0dHBiYWNr
ZW5kLmMgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0aHR0cGJhY2tl
bmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi45Mzc3Njg3OWIwNTNhNjZmNWY1NWQyOWQyYjI4Njg1NmQ5Njc4Y2Jj
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsv
dGVzdGh0dHBiYWNrZW5kLmMKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSBHdXN0YXZvIE5vcm9uaGEgU2lsdmEKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
PGVycm5vLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1
ZGUgPGdsaWIvZ3N0ZGlvLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtp
dC93ZWJraXQuaD4KKworLy8gTm90IHlldCBwdWJsaWMgQVBJCitTb3VwTWVzc2FnZSogd2Via2l0
X25ldHdvcmtfcmVxdWVzdF9nZXRfbWVzc2FnZShXZWJLaXROZXR3b3JrUmVxdWVzdCogcmVxdWVz
dCk7CisKK3N0YXRpYyBnYm9vbGVhbiBuYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9yZXF1ZXN0
ZWRfY2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFdlYkZyYW1lKiB3ZWJfZnJhbWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRXZWJOYXZpZ2F0aW9uQWN0aW9u
KiBhY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdlYktpdFdlYlBvbGljeURlY2lzaW9uKiBkZWNpc2lvbiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgZGF0
YSkKK3sKKyAgICBTb3VwTWVzc2FnZSogbWVzc2FnZSA9IHdlYmtpdF9uZXR3b3JrX3JlcXVlc3Rf
Z2V0X21lc3NhZ2UocmVxdWVzdCk7CisKKyAgICAvKiAxIC0+IHdlYmtpdF9uZXR3b3JrX3JlcXVl
c3Rfd2l0aF9jb3JlX3JlcXVlc3QKKyAgICAgKgorICAgICAqIFRoZSBTb3VwTWVzc2FnZSBpcyBj
cmVhdGVkIGV4Y2x1c2l2ZWx5IGZvciB0aGUgZW1pc3Npb24gb2YgdGhpcworICAgICAqIHNpZ25h
bC4KKyAgICAgKi8KKyAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QobWVzc2FnZSktPnJlZl9j
b3VudCwgPT0sIDEpOworCisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZCB0ZXN0
X3NvdXBfbWVzc2FnZV9saWZldGltZSgpCit7CisgICAgV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcg
PSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKworICAgIGdfb2JqZWN0
X3JlZl9zaW5rKHdlYl92aWV3KTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViX3ZpZXcsICJu
YXZpZ2F0aW9uLXBvbGljeS1kZWNpc2lvbi1yZXF1ZXN0ZWQiLAorICAgICAgICAgICAgICAgICAg
ICAgR19DQUxMQkFDSyhuYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9yZXF1ZXN0ZWRfY2IpLAor
ICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICAvKiBsb2FkX3VyaSB3aWxsIHRyaWdn
ZXIgdGhlIG5hdmlnYXRpb24tcG9saWN5LWRlY2lzaW9uLXJlcXVlc3RlZAorICAgICAqIHNpZ25h
bCBlbWlzc2lvbjsKKyAgICAgKi8KKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkod2ViX3Zp
ZXcsICJodHRwOi8vMTI3LjAuMC4xLyIpOworCisgICAgZ19vYmplY3RfdW5yZWYod2ViX3ZpZXcp
OworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgZ3RrX3Rlc3Rf
aW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvc291cG1l
c3NhZ2UvbGlmZXRpbWUiLCB0ZXN0X3NvdXBfbWVzc2FnZV9saWZldGltZSk7CisgICAgcmV0dXJu
IGdfdGVzdF9ydW4gKCk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdEd0ay90ZXN0a2V5ZXZlbnRzLmMgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdEd0ay90ZXN0a2V5ZXZlbnRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWNkMDFmMzVmNDhmMmQ2NjE2Yzcx
OGZiMjBlMGRjOWFmNmJjZWJhOQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RrZXlldmVudHMuYwpAQCAtMCwwICsxLDM5MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBNYXJ0aW4gUm9iaW5zb24gPG1yb2JpbnNvbkB3
ZWJraXQub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5j
bHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Z2xpYi9nc3Rk
aW8uaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSlNTdHJpbmdSZWYuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NvbnRleHRSZWYu
aD4KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGNoYXIqIHBhZ2U7CisgICAgY2hhciogdGV4dDsK
KyAgICBnYm9vbGVhbiBzaG91bGRCZUhhbmRsZWQ7Cit9IFRlc3RJbmZvOworCit0eXBlZGVmIHN0
cnVjdCB7CisgICAgR3RrV2lkZ2V0KiB3aW5kb3c7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmll
dzsKKyAgICBHTWFpbkxvb3AqIGxvb3A7CisgICAgVGVzdEluZm8qIGluZm87Cit9IEtleUV2ZW50
Rml4dHVyZTsKKworVGVzdEluZm8qCit0ZXN0X2luZm9fbmV3KGNvbnN0IGNoYXIqIHBhZ2UsIGdi
b29sZWFuIHNob3VsZEJlSGFuZGxlZCkKK3sKKyAgICBUZXN0SW5mbyogaW5mbzsKKworICAgIGlu
Zm8gPSBnX3NsaWNlX25ldyhUZXN0SW5mbyk7CisgICAgaW5mby0+cGFnZSA9IGdfc3RyZHVwKHBh
Z2UpOworICAgIGluZm8tPnNob3VsZEJlSGFuZGxlZCA9IHNob3VsZEJlSGFuZGxlZDsKKyAgICBp
bmZvLT50ZXh0ID0gMDsKKworICAgIHJldHVybiBpbmZvOworfQorCit2b2lkCit0ZXN0X2luZm9f
ZGVzdHJveShUZXN0SW5mbyogaW5mbykKK3sKKyAgICBnX2ZyZWUoaW5mby0+cGFnZSk7CisgICAg
Z19mcmVlKGluZm8tPnRleHQpOworICAgIGdfc2xpY2VfZnJlZShUZXN0SW5mbywgaW5mbyk7Cit9
CisKK3N0YXRpYyB2b2lkIGtleV9ldmVudF9maXh0dXJlX3NldHVwKEtleUV2ZW50Rml4dHVyZSog
Zml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGZpeHR1cmUtPmxvb3AgPSBnX21h
aW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisKKyAgICBmaXh0dXJlLT53aW5kb3cgPSBndGtfd2lu
ZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKKyAgICBmaXh0dXJlLT53ZWJWaWV3ID0gV0VC
S0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisKKyAgICBndGtfY29udGFpbmVy
X2FkZChHVEtfQ09OVEFJTkVSKGZpeHR1cmUtPndpbmRvdyksIEdUS19XSURHRVQoZml4dHVyZS0+
d2ViVmlldykpOworfQorCitzdGF0aWMgdm9pZCBrZXlfZXZlbnRfZml4dHVyZV90ZWFyZG93bihL
ZXlFdmVudEZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBndGtf
d2lkZ2V0X2Rlc3Ryb3koZml4dHVyZS0+d2luZG93KTsKKyAgICBnX21haW5fbG9vcF91bnJlZihm
aXh0dXJlLT5sb29wKTsKKyAgICB0ZXN0X2luZm9fZGVzdHJveShmaXh0dXJlLT5pbmZvKTsKK30K
Kworc3RhdGljIGdib29sZWFuIGtleV9wcmVzc19ldmVudF9jYihXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3LCBHZGtFdmVudCogZXZlbnQsIGdwb2ludGVyIGRhdGEpCit7CisgICAgS2V5RXZlbnRGaXh0
dXJlKiBmaXh0dXJlID0gKEtleUV2ZW50Rml4dHVyZSopZGF0YTsKKyAgICBnYm9vbGVhbiBoYW5k
bGVkID0gR1RLX1dJREdFVF9HRVRfQ0xBU1MoZml4dHVyZS0+d2ViVmlldyktPmtleV9wcmVzc19l
dmVudChHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpLCAmZXZlbnQtPmtleSk7CisgICAgZ19h
c3NlcnRfY21waW50KGhhbmRsZWQsID09LCBmaXh0dXJlLT5pbmZvLT5zaG91bGRCZUhhbmRsZWQp
OworCisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4ga2V5X3JlbGVhc2Vf
ZXZlbnRfY2IoV2ViS2l0V2ViVmlldyogd2ViVmlldywgR2RrRXZlbnQqIGV2ZW50LCBncG9pbnRl
ciBkYXRhKQoreworICAgIC8vIFdlYkNvcmUgbmV2ZXIgc2VlbXMgdG8gbWFyayBrZXl1cCBldmVu
dHMgYXMgaGFuZGxlZC4KKyAgICBLZXlFdmVudEZpeHR1cmUqIGZpeHR1cmUgPSAoS2V5RXZlbnRG
aXh0dXJlKilkYXRhOworICAgIGdib29sZWFuIGhhbmRsZWQgPSBHVEtfV0lER0VUX0dFVF9DTEFT
UyhmaXh0dXJlLT53ZWJWaWV3KS0+a2V5X3ByZXNzX2V2ZW50KEdUS19XSURHRVQoZml4dHVyZS0+
d2ViVmlldyksICZldmVudC0+a2V5KTsKKyAgICBnX2Fzc2VydCghaGFuZGxlZCk7CisKKyAgICBn
X21haW5fbG9vcF9xdWl0KGZpeHR1cmUtPmxvb3ApOworCisgICAgcmV0dXJuIEZBTFNFOworfQor
CitzdGF0aWMgdm9pZCB0ZXN0X2tleXByZXNzX2V2ZW50c19sb2FkX3N0YXR1c19jYihXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3LCBHUGFyYW1TcGVjKiBzcGVjLCBncG9pbnRlciBkYXRhKQoreworICAg
IEtleUV2ZW50Rml4dHVyZSogZml4dHVyZSA9IChLZXlFdmVudEZpeHR1cmUqKWRhdGE7CisgICAg
V2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVz
KHdlYlZpZXcpOworICAgIGlmIChzdGF0dXMgPT0gV0VCS0lUX0xPQURfRklOSVNIRUQpIHsKKyAg
ICAgICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53ZWJWaWV3LCAia2V5LXByZXNzLWV2ZW50
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKGtleV9wcmVzc19ldmVudF9j
YiksIGZpeHR1cmUpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcs
ICJrZXktcmVsZWFzZS1ldmVudCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFD
SyhrZXlfcmVsZWFzZV9ldmVudF9jYiksIGZpeHR1cmUpOworICAgICAgICBpZiAoIWd0a190ZXN0
X3dpZGdldF9zZW5kX2tleShHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGtfdW5pY29kZV90b19rZXl2YWwoJ2EnKSwg
MCkpCisgICAgICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgIH0KKworfQorCitn
Ym9vbGVhbiBtYXBfZXZlbnRfY2IoR3RrV2lkZ2V0ICp3aWRnZXQsIEdka0V2ZW50KiBldmVudCwg
Z3BvaW50ZXIgZGF0YSkKK3sKKyAgICBLZXlFdmVudEZpeHR1cmUqIGZpeHR1cmUgPSAoS2V5RXZl
bnRGaXh0dXJlKilkYXRhOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhmaXh0dXJl
LT53ZWJWaWV3LCBmaXh0dXJlLT5pbmZvLT5wYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAidGV4dC9odG1sIiwgInV0Zi04IiwgImZpbGU6Ly8iKTsKKyAgICByZXR1cm4gRkFM
U0U7Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwX2tleWV2ZW50X3Rlc3QoS2V5RXZlbnRGaXh0dXJl
KiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEsIEdDYWxsYmFjayBsb2FkX2V2ZW50X2NhbGxi
YWNrKQoreworICAgIGZpeHR1cmUtPmluZm8gPSAoVGVzdEluZm8qKWRhdGE7CisgICAgZ19zaWdu
YWxfY29ubmVjdChmaXh0dXJlLT53aW5kb3csICJtYXAtZXZlbnQiLAorICAgICAgICAgICAgICAg
ICAgICAgR19DQUxMQkFDSyhtYXBfZXZlbnRfY2IpLCBmaXh0dXJlKTsKKworICAgIGd0a193aWRn
ZXRfZ3JhYl9mb2N1cyhHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpKTsKKyAgICBndGtfd2lk
Z2V0X3Nob3coZml4dHVyZS0+d2luZG93KTsKKyAgICBndGtfd2lkZ2V0X3Nob3coR1RLX1dJREdF
VChmaXh0dXJlLT53ZWJWaWV3KSk7CisgICAgZ3RrX3dpbmRvd19wcmVzZW50KEdUS19XSU5ET1co
Zml4dHVyZS0+d2luZG93KSk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZp
ZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwKKyAgICAgICAgICAgICAgICAgICAgIGxvYWRfZXZl
bnRfY2FsbGJhY2ssIGZpeHR1cmUpOworCisgICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1cmUtPmxv
b3ApOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2tleXByZXNzX2V2ZW50cyhLZXlFdmVudEZpeHR1
cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBzZXR1cF9rZXlldmVudF90
ZXN0KGZpeHR1cmUsIGRhdGEsIEdfQ0FMTEJBQ0sodGVzdF9rZXlwcmVzc19ldmVudHNfbG9hZF9z
dGF0dXNfY2IpKTsKK30KKworc3RhdGljIGdib29sZWFuIGVsZW1lbnRfdGV4dF9lcXVhbF90byhK
U0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgZ2NoYXIqIHRleHQpCit7CisgICAgSlNTdHJpbmdS
ZWYgc2NyaXB0U3RyaW5nID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoCisgICAgICAi
d2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaW5cIikudmFsdWU7Iik7CisgICAgSlNW
YWx1ZVJlZiB2YWx1ZSA9IEpTRXZhbHVhdGVTY3JpcHQoY29udGV4dCwgc2NyaXB0U3RyaW5nLCAw
LCAwLCAwLCAwKTsKKyAgICBKU1N0cmluZ1JlbGVhc2Uoc2NyaXB0U3RyaW5nKTsKKworICAgIC8v
IElmIHRoZSB2YWx1ZSBpc24ndCBhIHN0cmluZywgdGhlIGVsZW1lbnQgaXMgcHJvYmFibHkgYSBk
aXYKKyAgICAvLyBzbyBncmFiIHRoZSBpbm5lclRleHQgaW5zdGVhZC4KKyAgICBpZiAoIUpTVmFs
dWVJc1N0cmluZyhjb250ZXh0LCB2YWx1ZSkpIHsKKyAgICAgICAgSlNTdHJpbmdSZWYgc2NyaXB0
U3RyaW5nID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoCisgICAgICAgICAgIndpbmRv
dy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImluXCIpLmlubmVyVGV4dDsiKTsKKyAgICAgICAg
dmFsdWUgPSBKU0V2YWx1YXRlU2NyaXB0KGNvbnRleHQsIHNjcmlwdFN0cmluZywgMCwgMCwgMCwg
MCk7CisgICAgICAgIEpTU3RyaW5nUmVsZWFzZShzY3JpcHRTdHJpbmcpOworICAgIH0KKworICAg
IGdfYXNzZXJ0KEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCB2YWx1ZSkpOworICAgIEpTU3RyaW5n
UmVmIGlucHV0U3RyaW5nID0gSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCB2YWx1ZSwgMCk7
CisgICAgZ19hc3NlcnQoaW5wdXRTdHJpbmcpOworCisgICAgZ2ludCBzaXplID0gSlNTdHJpbmdH
ZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKGlucHV0U3RyaW5nKTsKKyAgICBnY2hhciogY1N0cmlu
ZyA9IGdfbWFsbG9jKHNpemUpOworICAgIEpTU3RyaW5nR2V0VVRGOENTdHJpbmcoaW5wdXRTdHJp
bmcsIGNTdHJpbmcsIHNpemUpOworICAgIEpTU3RyaW5nUmVsZWFzZShpbnB1dFN0cmluZyk7CisK
KyAgICBnYm9vbGVhbiByZXN1bHQgPSBnX3V0ZjhfY29sbGF0ZShjU3RyaW5nLCB0ZXh0KSA9PSAw
OworICAgIGdfZnJlZShjU3RyaW5nKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMg
dm9pZCB0ZXN0X2ltZV9sb2FkX3N0YXR1c19jYihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHUGFy
YW1TcGVjKiBzcGVjLCBncG9pbnRlciBkYXRhKQoreworICAgIEtleUV2ZW50Rml4dHVyZSogZml4
dHVyZSA9IChLZXlFdmVudEZpeHR1cmUqKWRhdGE7CisgICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0
dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYlZpZXcpOworICAgIGlmIChz
dGF0dXMgIT0gV0VCS0lUX0xPQURfRklOSVNIRUQpCisgICAgICAgIHJldHVybjsKKworICAgIEpT
R2xvYmFsQ29udGV4dFJlZiBjb250ZXh0ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfZ2xvYmFsX2Nv
bnRleHQoCisgICAgICAgIHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh3ZWJWaWV3KSk7
CisgICAgZ19hc3NlcnQoY29udGV4dCk7CisKKyAgICBHdGtJTUNvbnRleHQqIGltQ29udGV4dCA9
IDA7CisgICAgZ19vYmplY3RfZ2V0KHdlYlZpZXcsICJpbS1jb250ZXh0IiwgJmltQ29udGV4dCwg
TlVMTCk7CisgICAgZ19hc3NlcnQoaW1Db250ZXh0KTsKKworICAgIC8vIFRlc3QgdGhhdCBjb21t
aXRzIHRoYXQgaGFwcGVuIG91dHNpZGUgb2Yga2V5IGV2ZW50cworICAgIC8vIGNoYW5nZSB0aGUg
dGV4dCBmaWVsZCBpbW1lZGlhdGVseS4gVGhpcyBjbG9zZWx5IHJlcGxpY2F0ZXMKKyAgICAvLyB0
aGUgYmVoYXZpb3Igb2YgU0NJTS4KKyAgICBnX2Fzc2VydChlbGVtZW50X3RleHRfZXF1YWxfdG8o
Y29udGV4dCwgIiIpKTsKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoaW1Db250ZXh0LCAiY29t
bWl0IiwgImEiKTsKKyAgICBnX2Fzc2VydChlbGVtZW50X3RleHRfZXF1YWxfdG8oY29udGV4dCwg
ImEiKSk7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKGltQ29udGV4dCwgImNvbW1pdCIsICJi
Iik7CisgICAgZ19hc3NlcnQoZWxlbWVudF90ZXh0X2VxdWFsX3RvKGNvbnRleHQsICJhYiIpKTsK
KyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoaW1Db250ZXh0LCAiY29tbWl0IiwgImMiKTsKKyAg
ICBnX2Fzc2VydChlbGVtZW50X3RleHRfZXF1YWxfdG8oY29udGV4dCwgImFiYyIpKTsKKworICAg
IGdfb2JqZWN0X3VucmVmKGltQ29udGV4dCk7CisgICAgZ19tYWluX2xvb3BfcXVpdChmaXh0dXJl
LT5sb29wKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9pbWUoS2V5RXZlbnRGaXh0dXJlKiBmaXh0
dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgc2V0dXBfa2V5ZXZlbnRfdGVzdChmaXh0
dXJlLCBkYXRhLCBHX0NBTExCQUNLKHRlc3RfaW1lX2xvYWRfc3RhdHVzX2NiKSk7Cit9CisKK3N0
YXRpYyBnYm9vbGVhbiB2ZXJpZnlfY29udGVudHMoZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBLZXlF
dmVudEZpeHR1cmUqIGZpeHR1cmUgPSAoS2V5RXZlbnRGaXh0dXJlKilkYXRhOworICAgIEpTR2xv
YmFsQ29udGV4dFJlZiBjb250ZXh0ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfZ2xvYmFsX2NvbnRl
eHQoCisgICAgICAgIHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZShmaXh0dXJlLT53ZWJW
aWV3KSk7CisgICAgZ19hc3NlcnQoY29udGV4dCk7CisKKyAgICBnX2Fzc2VydChlbGVtZW50X3Rl
eHRfZXF1YWxfdG8oY29udGV4dCwgZml4dHVyZS0+aW5mby0+dGV4dCkpOworICAgIGdfbWFpbl9s
b29wX3F1aXQoZml4dHVyZS0+bG9vcCk7CisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMg
dm9pZCB0ZXN0X2Jsb2NraW5nX2xvYWRfc3RhdHVzX2NiKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcs
IEdQYXJhbVNwZWMqIHNwZWMsIGdwb2ludGVyIGRhdGEpCit7CisgICAgS2V5RXZlbnRGaXh0dXJl
KiBmaXh0dXJlID0gKEtleUV2ZW50Rml4dHVyZSopZGF0YTsKKyAgICBXZWJLaXRMb2FkU3RhdHVz
IHN0YXR1cyA9IHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMod2ViVmlldyk7CisgICAg
aWYgKHN0YXR1cyAhPSBXRUJLSVRfTE9BRF9GSU5JU0hFRCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gVGhlIGZpcnN0IGtleXByZXNzIGV2ZW50IHNob3VsZCBub3QgbW9kaWZ5IHRoZSBmaWVs
ZC4KKyAgICBmaXh0dXJlLT5pbmZvLT50ZXh0ID0gZ19zdHJkdXAoImJjIik7CisgICAgaWYgKCFn
dGtfdGVzdF93aWRnZXRfc2VuZF9rZXkoR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdka191bmljb2RlX3RvX2tleXZhbCgnYScp
LCAwKSkKKyAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICBpZiAoIWd0a190ZXN0
X3dpZGdldF9zZW5kX2tleShHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdka191bmljb2RlX3RvX2tleXZhbCgnYicpLCAwKSkK
KyAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICBpZiAoIWd0a190ZXN0X3dpZGdl
dF9zZW5kX2tleShHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdka191bmljb2RlX3RvX2tleXZhbCgnYycpLCAwKSkKKyAgICAg
ICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKworICAgIGdfaWRsZV9hZGQodmVyaWZ5X2NvbnRl
bnRzLCBmaXh0dXJlKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9ibG9ja2luZyhLZXlFdmVudEZp
eHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBzZXR1cF9rZXlldmVu
dF90ZXN0KGZpeHR1cmUsIGRhdGEsIEdfQ0FMTEJBQ0sodGVzdF9ibG9ja2luZ19sb2FkX3N0YXR1
c19jYikpOworfQorCisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkKK3N0YXRpYyB2b2lk
IHRlc3RfeGltX2xvYWRfc3RhdHVzX2NiKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEdQYXJhbVNw
ZWMqIHNwZWMsIGdwb2ludGVyIGRhdGEpCit7CisgICAgS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJl
ID0gKEtleUV2ZW50Rml4dHVyZSopZGF0YTsKKyAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9
IHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMod2ViVmlldyk7CisgICAgaWYgKHN0YXR1
cyAhPSBXRUJLSVRfTE9BRF9GSU5JU0hFRCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3RrSU1D
b250ZXh0KiBpbUNvbnRleHQgPSAwOworICAgIGdfb2JqZWN0X2dldCh3ZWJWaWV3LCAiaW0tY29u
dGV4dCIsICZpbUNvbnRleHQsIE5VTEwpOworICAgIGdfYXNzZXJ0KGltQ29udGV4dCk7CisKKyAg
ICBnY2hhciogb3JpZ2luYWxJZCA9IGdfc3RyZHVwKGd0a19pbV9tdWx0aWNvbnRleHRfZ2V0X2Nv
bnRleHRfaWQoR1RLX0lNX01VTFRJQ09OVEVYVChpbUNvbnRleHQpKSk7CisgICAgZ3RrX2ltX211
bHRpY29udGV4dF9zZXRfY29udGV4dF9pZChHVEtfSU1fTVVMVElDT05URVhUKGltQ29udGV4dCks
ICJ4aW0iKTsKKworICAgIC8vIFRlc3QgdGhhdCBjb21taXRzIHRoYXQgaGFwcGVuIG91dHNpZGUg
b2Yga2V5IGV2ZW50cworICAgIC8vIGNoYW5nZSB0aGUgdGV4dCBmaWVsZCBpbW1lZGlhdGVseS4g
VGhpcyBjbG9zZWx5IHJlcGxpY2F0ZXMKKyAgICAvLyB0aGUgYmVoYXZpb3Igb2YgU0NJTS4KKyAg
ICBmaXh0dXJlLT5pbmZvLT50ZXh0ID0gZ19zdHJkdXAoImRlYmlhbiIpOworICAgIGlmICghZ3Rr
X3Rlc3Rfd2lkZ2V0X3NlbmRfa2V5KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldyksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGtfdW5pY29kZV90b19rZXl2YWwoJ2QnKSwg
MCkpCisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgaWYgKCFndGtfdGVzdF93
aWRnZXRfc2VuZF9rZXkoR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2RrX3VuaWNvZGVfdG9fa2V5dmFsKCdlJyksIDApKQorICAgICAg
ICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgIGlmICghZ3RrX3Rlc3Rfd2lkZ2V0X3NlbmRf
a2V5KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldyksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdka191bmljb2RlX3RvX2tleXZhbCgnYicpLCAwKSkKKyAgICAgICAgZ19hc3NlcnRf
bm90X3JlYWNoZWQoKTsKKyAgICBpZiAoIWd0a190ZXN0X3dpZGdldF9zZW5kX2tleShHVEtfV0lE
R0VUKGZpeHR1cmUtPndlYlZpZXcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGtf
dW5pY29kZV90b19rZXl2YWwoJ2knKSwgMCkpCisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVk
KCk7CisgICAgaWYgKCFndGtfdGVzdF93aWRnZXRfc2VuZF9rZXkoR1RLX1dJREdFVChmaXh0dXJl
LT53ZWJWaWV3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RrX3VuaWNvZGVfdG9f
a2V5dmFsKCdhJyksIDApKQorICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgIGlm
ICghZ3RrX3Rlc3Rfd2lkZ2V0X3NlbmRfa2V5KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldyks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdka191bmljb2RlX3RvX2tleXZhbCgnbicp
LCAwKSkKKyAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKworICAgIGd0a19pbV9tdWx0
aWNvbnRleHRfc2V0X2NvbnRleHRfaWQoR1RLX0lNX01VTFRJQ09OVEVYVChpbUNvbnRleHQpLCBv
cmlnaW5hbElkKTsKKyAgICBnX2ZyZWUob3JpZ2luYWxJZCk7CisgICAgZ19vYmplY3RfdW5yZWYo
aW1Db250ZXh0KTsKKworICAgIGdfaWRsZV9hZGQodmVyaWZ5X2NvbnRlbnRzLCBmaXh0dXJlKTsK
K30KKworc3RhdGljIHZvaWQgdGVzdF94aW0oS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29u
c3Rwb2ludGVyIGRhdGEpCit7CisgICAgc2V0dXBfa2V5ZXZlbnRfdGVzdChmaXh0dXJlLCBkYXRh
LCBHX0NBTExCQUNLKHRlc3RfeGltX2xvYWRfc3RhdHVzX2NiKSk7Cit9CisjZW5kaWYKKworaW50
IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIGd0a190ZXN0X2luaXQoJmFyZ2Ms
ICZhcmd2LCBOVUxMKTsKKworICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvIik7CisKKworICAgIC8vIFdlJ2xsIHRlc3QgaW5wdXQgb24gYSBzbGV3IG9mIGRpZmZl
cmVudCBub2RlIHR5cGVzLiBLZXkgZXZlbnRzIHRvCisgICAgLy8gdGV4dCBpbnB1dHMgYW5kIGVk
aXRhYmxlIGRpdnMgc2hvdWxkIGJlIG1hcmtlZCBhcyBoYW5kbGVkLiBLZXkgZXZlbnRzCisgICAg
Ly8gdG8gYnV0dG9ucyBhbmQgbGlua3Mgc2hvdWxkIG5vdC4KKyAgICBjb25zdCBjaGFyKiB0ZXh0
aW5wdXRfaHRtbCA9ICI8aHRtbD48Ym9keT48aW5wdXQgaWQ9XCJpblwiIHR5cGU9XCJ0ZXh0XCI+
IgorICAgICAgICAiPHNjcmlwdD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW4nKS5mb2N1cygp
Ozwvc2NyaXB0PjwvYm9keT48L2h0bWw+IjsKKyAgICBjb25zdCBjaGFyKiBidXR0b25faHRtbCA9
ICI8aHRtbD48Ym9keT48aW5wdXQgaWQ9XCJpblwiIHR5cGU9XCJidXR0b25cIj4iCisgICAgICAg
ICI8c2NyaXB0PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbicpLmZvY3VzKCk7PC9zY3JpcHQ+
PC9ib2R5PjwvaHRtbD4iOworICAgIGNvbnN0IGNoYXIqIGxpbmtfaHRtbCA9ICI8aHRtbD48Ym9k
eT48YSBocmVmPVwiaHR0cDovL3d3dy5nbm9tZS5vcmdcIiBpZD1cImluXCI+IgorICAgICAgICAi
TElOS1kgTUNMSU5LRVJTT048L2E+PHNjcmlwdD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW4n
KS5mb2N1cygpOzwvc2NyaXB0PiIKKyAgICAgICAgIjwvYm9keT48L2h0bWw+IjsKKyAgICBjb25z
dCBjaGFyKiBkaXZfaHRtbCA9ICI8aHRtbD48Ym9keT48ZGl2IGlkPVwiaW5cIiBjb250ZW50ZWRp
dGFibGU9XCJ0cnVlXCI+IgorICAgICAgICAiPHNjcmlwdD5kb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnaW4nKS5mb2N1cygpOzwvc2NyaXB0PjwvYm9keT48L2h0bWw+IjsKKworICAgIC8vIFRoZXNl
IGFyZSBzaW1pbGFyIHRvIHRoZSBibG9ja3MgYWJvdmUsIGJ1dCB0aGV5IHNob3VsZCBibG9jayB0
aGUgZmlyc3QKKyAgICAvLyBrZXlwcmVzcyBtb2RpZnlpbmcgdGhlIGVkaXRhYmxlIG5vZGUuCisg
ICAgY29uc3QgY2hhciogdGV4dGlucHV0X2h0bWxfYmxvY2tpbmcgPSAiPGh0bWw+PGJvZHk+Igor
ICAgICAgICAiPGlucHV0IGlkPVwiaW5cIiB0eXBlPVwidGV4dFwiICIKKyAgICAgICAgIm9ua2V5
cHJlc3M9XCJpZiAoZmlyc3QpIHtldmVudC5wcmV2ZW50RGVmYXVsdCgpO2ZpcnN0PWZhbHNlO31c
Ij4iCisgICAgICAgICI8c2NyaXB0PmZpcnN0ID0gdHJ1ZTtcbmRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdpbicpLmZvY3VzKCk7PC9zY3JpcHQ+XG4iCisgICAgICAgICI8L3NjcmlwdD48L2JvZHk+
PC9odG1sPiI7CisgICAgY29uc3QgY2hhciogZGl2X2h0bWxfYmxvY2tpbmcgPSAiPGh0bWw+PGJv
ZHk+IgorICAgICAgICAiPGRpdiBpZD1cImluXCIgY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiICIK
KyAgICAgICAgIm9ua2V5cHJlc3M9XCJpZiAoZmlyc3QpIHtldmVudC5wcmV2ZW50RGVmYXVsdCgp
O2ZpcnN0PWZhbHNlO31cIj4iCisgICAgICAgICI8c2NyaXB0PmZpcnN0ID0gdHJ1ZTsgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ2luJykuZm9jdXMoKTs8L3NjcmlwdD5cbiIKKyAgICAgICAgIjwv
c2NyaXB0PjwvYm9keT48L2h0bWw+IjsKKworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQva2V5ZXZl
bnRzL2V2ZW50LXRleHRpbnB1dCIsIEtleUV2ZW50Rml4dHVyZSwKKyAgICAgICAgICAgICAgIHRl
c3RfaW5mb19uZXcodGV4dGlucHV0X2h0bWwsIFRSVUUpLAorICAgICAgICAgICAgICAga2V5X2V2
ZW50X2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0X2tleXByZXNzX2V2ZW50cywK
KyAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3RlYXJkb3duKTsKKyAgICBnX3Rlc3Rf
YWRkKCIvd2Via2l0L2tleWV2ZW50cy9ldmVudC1idXR0b25zIiwgS2V5RXZlbnRGaXh0dXJlLAor
ICAgICAgICAgICAgICAgdGVzdF9pbmZvX25ldyhidXR0b25faHRtbCwgRkFMU0UpLAorICAgICAg
ICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0X2tl
eXByZXNzX2V2ZW50cywKKyAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3RlYXJkb3du
KTsKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2tleWV2ZW50cy9ldmVudC1saW5rIiwgS2V5RXZl
bnRGaXh0dXJlLAorICAgICAgICAgICAgICAgdGVzdF9pbmZvX25ldyhsaW5rX2h0bWwsIEZBTFNF
KSwKKyAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3NldHVwLAorICAgICAgICAgICAg
ICAgdGVzdF9rZXlwcmVzc19ldmVudHMsCisgICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVy
ZV90ZWFyZG93bik7CisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9rZXlldmVudC9ldmVudC1kaXYi
LCBLZXlFdmVudEZpeHR1cmUsCisgICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KGRpdl9odG1s
LCBUUlVFKSwKKyAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3NldHVwLAorICAgICAg
ICAgICAgICAgdGVzdF9rZXlwcmVzc19ldmVudHMsCisgICAgICAgICAgICAgICBrZXlfZXZlbnRf
Zml4dHVyZV90ZWFyZG93bik7CisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9rZXlldmVudC9pbWUt
dGV4dGlucHV0IiwgS2V5RXZlbnRGaXh0dXJlLAorICAgICAgICAgICAgICAgdGVzdF9pbmZvX25l
dyh0ZXh0aW5wdXRfaHRtbCwgVFJVRSksCisgICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVy
ZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3RfaW1lLAorICAgICAgICAgICAgICAga2V5X2V2
ZW50X2ZpeHR1cmVfdGVhcmRvd24pOworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQva2V5ZXZlbnQv
aW1lLWRpdiIsIEtleUV2ZW50Rml4dHVyZSwKKyAgICAgICAgICAgICAgIHRlc3RfaW5mb19uZXco
ZGl2X2h0bWwsIFRSVUUpLAorICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfc2V0dXAs
CisgICAgICAgICAgICAgICB0ZXN0X2ltZSwKKyAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0
dXJlX3RlYXJkb3duKTsKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2tleWV2ZW50L2Jsb2NrLXRl
eHRpbnB1dCIsIEtleUV2ZW50Rml4dHVyZSwKKyAgICAgICAgICAgICAgIHRlc3RfaW5mb19uZXco
dGV4dGlucHV0X2h0bWxfYmxvY2tpbmcsIFRSVUUpLAorICAgICAgICAgICAgICAga2V5X2V2ZW50
X2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0X2Jsb2NraW5nLAorICAgICAgICAg
ICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfdGVhcmRvd24pOworICAgIGdfdGVzdF9hZGQoIi93ZWJr
aXQva2V5ZXZlbnQvYmxvY2stZGl2IiwgS2V5RXZlbnRGaXh0dXJlLAorICAgICAgICAgICAgICAg
dGVzdF9pbmZvX25ldyhkaXZfaHRtbF9ibG9ja2luZywgVFJVRSksCisgICAgICAgICAgICAgICBr
ZXlfZXZlbnRfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3RfYmxvY2tpbmcsCisg
ICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV90ZWFyZG93bik7CisjaWYgZGVmaW5lZChH
REtfV0lORE9XSU5HX1gxMSkKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2tleWV2ZW50L3hpbS10
ZXh0aW5wdXQiLCBLZXlFdmVudEZpeHR1cmUsCisgICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3
KHRleHRpbnB1dF9odG1sLCBUUlVFKSwKKyAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJl
X3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF94aW0sCisgICAgICAgICAgICAgICBrZXlfZXZl
bnRfZml4dHVyZV90ZWFyZG93bik7CisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9rZXlldmVudC94
aW0tZGl2IiwgS2V5RXZlbnRGaXh0dXJlLAorICAgICAgICAgICAgICAgdGVzdF9pbmZvX25ldyhk
aXZfaHRtbCwgVFJVRSksCisgICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV9zZXR1cCwK
KyAgICAgICAgICAgICAgIHRlc3RfeGltLAorICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1
cmVfdGVhcmRvd24pOworI2VuZGlmCisKKyAgICByZXR1cm4gZ190ZXN0X3J1bigpOworfQorCmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0bG9hZGlu
Zy5jIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGxvYWRpbmcuYwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5hMGE5MjBmMDRjNWMyMGRmNWQ2MmRhZDg2ZmQ0ODM4MWIyNTc1ZDRkCi0tLSAv
ZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGxv
YWRpbmcuYwpAQCAtMCwwICsxLDQzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAx
MCBHdXN0YXZvIE5vcm9uaGEgU2lsdmEKKyAqIENvcHlyaWdodCAoQykgMjAwOSBJZ2FsaWEgUy5M
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPGxp
YnNvdXAvc291cC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJr
aXQuaD4KKworLyogVGhpcyBzdHJpbmcgaGFzIHRvIGJlIHJhdGhlciBiaWcgYmVjYXVzZSBvZiB0
aGUgY2FuY2VsbGVkIHRlc3QgLSBpdAorICogbG9va3MgbGlrZSBzb3VwIHJlZnVzZXMgdG8gc2Vu
ZCBvciByZWNlaXZlIGEgdG9vIHNtYWxsIGNodW5rICovCisjZGVmaW5lIEhUTUxfU1RSSU5HICI8
aHRtbD48Ym9keT5UZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchPC9ib2R5PjwvaHRtbD4iCisKK1NvdXBVUkkqIGJhc2VfdXJpOworCisv
KiBGb3IgcmVhbCByZXF1ZXN0IHRlc3RpbmcgKi8KK3N0YXRpYyB2b2lkCitzZXJ2ZXJfY2FsbGJh
Y2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbXNnLAorICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqIHF1ZXJ5LAorICAgICAgICAgICAgICAgIFNv
dXBDbGllbnRDb250ZXh0KiBjb250ZXh0LCBncG9pbnRlciBkYXRhKQoreworICAgIGlmIChtc2ct
Pm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9z
dGF0dXMobXNnLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobXNnLCBTT1VQX1NUQVRVU19P
Syk7CisKKyAgICBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi90ZXN0X2xvYWRpbmdfc3RhdHVzIikg
fHwgZ19zdHJfZXF1YWwocGF0aCwgIi90ZXN0X2xvYWRpbmdfc3RhdHVzMiIpKQorICAgICAgICBz
b3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobXNnLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9T
VEFUSUMsIEhUTUxfU1RSSU5HLCBzdHJsZW4oSFRNTF9TVFJJTkcpKTsKKyAgICBlbHNlIGlmIChn
X3N0cl9lcXVhbChwYXRoLCAiL3Rlc3RfbG9hZF9lcnJvciIpKSB7CisgICAgICAgIHNvdXBfbWVz
c2FnZV9zZXRfc3RhdHVzKG1zZywgU09VUF9TVEFUVVNfQ0FOVF9DT05ORUNUKTsKKyAgICB9IGVs
c2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvdGVzdF9sb2FkaW5nX2NhbmNlbGxlZCIpKSB7Cisg
ICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX3NldF9lbmNvZGluZyhtc2ctPnJlc3BvbnNlX2hl
YWRlcnMsIFNPVVBfRU5DT0RJTkdfQ0hVTktFRCk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5
X2FwcGVuZChtc2ctPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgSFRNTF9TVFJJ
TkcsIHN0cmxlbihIVE1MX1NUUklORykpOworICAgICAgICBzb3VwX3NlcnZlcl91bnBhdXNlX21l
c3NhZ2Uoc2VydmVyLCBtc2cpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc291cF9t
ZXNzYWdlX2JvZHlfY29tcGxldGUobXNnLT5yZXNwb25zZV9ib2R5KTsKK30KKwordHlwZWRlZiBz
dHJ1Y3QgeworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXc7CisgICAgR01haW5Mb29wICpsb29w
OworICAgIGdib29sZWFuIGhhc19iZWVuX3Byb3Zpc2lvbmFsOworICAgIGdib29sZWFuIGhhc19i
ZWVuX2NvbW1pdHRlZDsKKyAgICBnYm9vbGVhbiBoYXNfYmVlbl9maXJzdF92aXN1YWxseV9ub25f
ZW1wdHlfbGF5b3V0OworICAgIGdib29sZWFuIGhhc19iZWVuX2ZpbmlzaGVkOworICAgIGdib29s
ZWFuIGhhc19iZWVuX2ZhaWxlZDsKKyAgICBnYm9vbGVhbiBoYXNfYmVlbl9sb2FkX2Vycm9yOwor
fSBXZWJMb2FkaW5nRml4dHVyZTsKKworc3RhdGljIHZvaWQgd2ViX2xvYWRpbmdfZml4dHVyZV9z
ZXR1cChXZWJMb2FkaW5nRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQorewor
ICAgIGZpeHR1cmUtPndlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25l
dygpKTsKKyAgICBmaXh0dXJlLT5sb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwor
ICAgIGdfb2JqZWN0X3JlZl9zaW5rKGZpeHR1cmUtPndlYlZpZXcpOworICAgIGZpeHR1cmUtPmhh
c19iZWVuX3Byb3Zpc2lvbmFsID0gRkFMU0U7CisgICAgZml4dHVyZS0+aGFzX2JlZW5fY29tbWl0
dGVkID0gRkFMU0U7CisgICAgZml4dHVyZS0+aGFzX2JlZW5fZmlyc3RfdmlzdWFsbHlfbm9uX2Vt
cHR5X2xheW91dCA9IEZBTFNFOworICAgIGZpeHR1cmUtPmhhc19iZWVuX2ZpbmlzaGVkID0gRkFM
U0U7CisgICAgZml4dHVyZS0+aGFzX2JlZW5fZmFpbGVkID0gRkFMU0U7CisgICAgZml4dHVyZS0+
aGFzX2JlZW5fbG9hZF9lcnJvciA9IEZBTFNFOworfQorCitzdGF0aWMgdm9pZCB3ZWJfbG9hZGlu
Z19maXh0dXJlX3RlYXJkb3duKFdlYkxvYWRpbmdGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2lu
dGVyIGRhdGEpCit7CisgICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+d2ViVmlldyk7CisgICAg
Z19tYWluX2xvb3BfdW5yZWYoZml4dHVyZS0+bG9vcCk7Cit9CisKK3N0YXRpYyBjaGFyKiBnZXRf
dXJpX2Zvcl9wYXRoKGNvbnN0IGNoYXIqIHBhdGgpCit7CisgICAgU291cFVSSSogdXJpOworICAg
IGNoYXIqIHVyaV9zdHJpbmc7CisKKyAgICB1cmkgPSBzb3VwX3VyaV9uZXdfd2l0aF9iYXNlKGJh
c2VfdXJpLCBwYXRoKTsKKyAgICB1cmlfc3RyaW5nID0gc291cF91cmlfdG9fc3RyaW5nKHVyaSwg
RkFMU0UpOworICAgIHNvdXBfdXJpX2ZyZWUgKHVyaSk7CisKKyAgICByZXR1cm4gdXJpX3N0cmlu
ZzsKK30KKworc3RhdGljIHZvaWQgbG9hZF9maW5pc2hlZF9jYihXZWJLaXRXZWJWaWV3KiB3ZWJf
dmlldywgV2ViS2l0V2ViRnJhbWUqIHdlYl9mcmFtZSwgV2ViTG9hZGluZ0ZpeHR1cmUqIGZpeHR1
cmUpCit7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwpOworICAg
IGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX2NvbW1pdHRlZCk7CisgICAgZ19hc3NlcnQoZml4
dHVyZS0+aGFzX2JlZW5fZmlyc3RfdmlzdWFsbHlfbm9uX2VtcHR5X2xheW91dCk7CisKKyAgICBn
X21haW5fbG9vcF9xdWl0KGZpeHR1cmUtPmxvb3ApOworfQorCisKK3N0YXRpYyB2b2lkIHN0YXR1
c19jaGFuZ2VkX2NiKEdPYmplY3QqIG9iamVjdCwgR1BhcmFtU3BlYyogcHNwZWMsIFdlYkxvYWRp
bmdGaXh0dXJlKiBmaXh0dXJlKQoreworICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Vi
a2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyhXRUJLSVRfV0VCX1ZJRVcob2JqZWN0KSk7CisK
KyAgICBzd2l0Y2ggKHN0YXR1cykgeworICAgIGNhc2UgV0VCS0lUX0xPQURfUFJPVklTSU9OQUw6
CisgICAgICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCk7CisgICAg
ICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNfYmVlbl9jb21taXR0ZWQpOworICAgICAgICBnX2Fz
c2VydCghZml4dHVyZS0+aGFzX2JlZW5fZmlyc3RfdmlzdWFsbHlfbm9uX2VtcHR5X2xheW91dCk7
CisgICAgICAgIGZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsID0gVFJVRTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBXRUJLSVRfTE9BRF9DT01NSVRURUQ6CisgICAgICAgIGdfYXNzZXJ0
KGZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsKTsKKyAgICAgICAgZ19hc3NlcnQoIWZpeHR1
cmUtPmhhc19iZWVuX2NvbW1pdHRlZCk7CisgICAgICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNf
YmVlbl9maXJzdF92aXN1YWxseV9ub25fZW1wdHlfbGF5b3V0KTsKKyAgICAgICAgZml4dHVyZS0+
aGFzX2JlZW5fY29tbWl0dGVkID0gVFJVRTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXRUJL
SVRfTE9BRF9GSVJTVF9WSVNVQUxMWV9OT05fRU1QVFlfTEFZT1VUOgorICAgICAgICBnX2Fzc2Vy
dChmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCk7CisgICAgICAgIGdfYXNzZXJ0KGZpeHR1
cmUtPmhhc19iZWVuX2NvbW1pdHRlZCk7CisgICAgICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNf
YmVlbl9maXJzdF92aXN1YWxseV9ub25fZW1wdHlfbGF5b3V0KTsKKyAgICAgICAgZml4dHVyZS0+
aGFzX2JlZW5fZmlyc3RfdmlzdWFsbHlfbm9uX2VtcHR5X2xheW91dCA9IFRSVUU7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0xPQURfRklOSVNIRUQ6CisgICAgICAgIGdfYXNzZXJ0
KGZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsKTsKKyAgICAgICAgZ19hc3NlcnQoZml4dHVy
ZS0+aGFzX2JlZW5fY29tbWl0dGVkKTsKKyAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2Jl
ZW5fZmlyc3RfdmlzdWFsbHlfbm9uX2VtcHR5X2xheW91dCk7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgfQorfQorCitz
dGF0aWMgdm9pZCB0ZXN0X2xvYWRpbmdfc3RhdHVzKFdlYkxvYWRpbmdGaXh0dXJlKiBmaXh0dXJl
LCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgY2hhciogdXJpX3N0cmluZzsKKworICAgIGdf
YXNzZXJ0X2NtcGludCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKGZpeHR1cmUtPndl
YlZpZXcpLCA9PSwgV0VCS0lUX0xPQURfUFJPVklTSU9OQUwpOworCisgICAgZ19vYmplY3RfY29u
bmVjdChHX09CSkVDVChmaXh0dXJlLT53ZWJWaWV3KSwKKyAgICAgICAgICAgICAgICAgICAgICJz
aWduYWw6Om5vdGlmeTo6bG9hZC1zdGF0dXMiLCBHX0NBTExCQUNLKHN0YXR1c19jaGFuZ2VkX2Ni
KSwgZml4dHVyZSwKKyAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6OmxvYWQtZmluaXNoZWQi
LCBHX0NBTExCQUNLKGxvYWRfZmluaXNoZWRfY2IpLCBmaXh0dXJlLAorICAgICAgICAgICAgICAg
ICAgICAgTlVMTCk7CisKKyAgICB1cmlfc3RyaW5nID0gZ2V0X3VyaV9mb3JfcGF0aCgiL3Rlc3Rf
bG9hZGluZ19zdGF0dXMiKTsKKworICAgIC8qIGxvYWRfdXJpIHdpbGwgdHJpZ2dlciB0aGUgbmF2
aWdhdGlvbi1wb2xpY3ktZGVjaXNpb24tcmVxdWVzdGVkCisgICAgICogc2lnbmFsIGVtaXNzaW9u
OworICAgICAqLworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaShmaXh0dXJlLT53ZWJWaWV3
LCB1cmlfc3RyaW5nKTsKKyAgICBnX2ZyZWUodXJpX3N0cmluZyk7CisKKyAgICBnX21haW5fbG9v
cF9ydW4oZml4dHVyZS0+bG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRfZXJyb3Jfc3RhdHVz
X2NoYW5nZWRfY2IoR09iamVjdCogb2JqZWN0LCBHUGFyYW1TcGVjKiBwc3BlYywgV2ViTG9hZGlu
Z0ZpeHR1cmUqIGZpeHR1cmUpCit7CisgICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKFdFQktJVF9XRUJfVklFVyhvYmplY3QpKTsKKwor
ICAgIHN3aXRjaChzdGF0dXMpIHsKKyAgICBjYXNlIFdFQktJVF9MT0FEX1BST1ZJU0lPTkFMOgor
ICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwpOworICAgICAg
ICBmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCA9IFRSVUU7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgV0VCS0lUX0xPQURfQ09NTUlUVEVEOgorICAgICAgICBnX2Fzc2VydCghZml4dHVy
ZS0+aGFzX2JlZW5fY29tbWl0dGVkKTsKKyAgICAgICAgZml4dHVyZS0+aGFzX2JlZW5fY29tbWl0
dGVkID0gVFJVRTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXRUJLSVRfTE9BRF9GSU5JU0hF
RDoKKyAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwpOworICAg
ICAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9sb2FkX2Vycm9yKTsKKyAgICAgICAgZ19h
c3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fZmFpbGVkKTsKKyAgICAgICAgZ19hc3NlcnQoIWZpeHR1
cmUtPmhhc19iZWVuX2ZpbmlzaGVkKTsKKyAgICAgICAgZml4dHVyZS0+aGFzX2JlZW5fZmluaXNo
ZWQgPSBUUlVFOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9MT0FEX0ZBSUxFRDoK
KyAgICAgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX2ZhaWxlZCk7CisgICAgICAgIGZp
eHR1cmUtPmhhc19iZWVuX2ZhaWxlZCA9IFRSVUU7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQo
Zml4dHVyZS0+bG9vcCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJy
ZWFrOworICAgIH0KK30KKworc3RhdGljIGdib29sZWFuIGxvYWRfZXJyb3JfY2IoV2ViS2l0V2Vi
Vmlldyogd2ViVmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLCBjb25zdCBjaGFyKiB1cmksIEdF
cnJvciAqZXJyb3IsIFdlYkxvYWRpbmdGaXh0dXJlKiBmaXh0dXJlKQoreworICAgIGdfYXNzZXJ0
KGZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsKTsKKyAgICBnX2Fzc2VydCghZml4dHVyZS0+
aGFzX2JlZW5fbG9hZF9lcnJvcik7CisgICAgZml4dHVyZS0+aGFzX2JlZW5fbG9hZF9lcnJvciA9
IFRSVUU7CisKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfbG9hZGlu
Z19lcnJvcihXZWJMb2FkaW5nRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQor
eworICAgIGNoYXIqIHVyaV9zdHJpbmc7CisKKyAgICBnX3Rlc3RfYnVnKCIyODg0MiIpOworCisg
ICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53ZWJWaWV3LCAibG9hZC1lcnJvciIsIEdfQ0FM
TEJBQ0sobG9hZF9lcnJvcl9jYiksIGZpeHR1cmUpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4
dHVyZS0+d2ViVmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLCBHX0NBTExCQUNLKGxvYWRfZXJy
b3Jfc3RhdHVzX2NoYW5nZWRfY2IpLCBmaXh0dXJlKTsKKworICAgIHVyaV9zdHJpbmcgPSBnZXRf
dXJpX2Zvcl9wYXRoKCIvdGVzdF9sb2FkX2Vycm9yIik7CisgICAgd2Via2l0X3dlYl92aWV3X2xv
YWRfdXJpKGZpeHR1cmUtPndlYlZpZXcsIHVyaV9zdHJpbmcpOworICAgIGdfZnJlZSh1cmlfc3Ry
aW5nKTsKKworICAgIGdfbWFpbl9sb29wX3J1bihmaXh0dXJlLT5sb29wKTsKKworICAgIGdfYXNz
ZXJ0KGZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsKTsKKyAgICBnX2Fzc2VydCghZml4dHVy
ZS0+aGFzX2JlZW5fY29tbWl0dGVkKTsKKyAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9s
b2FkX2Vycm9yKTsKKyAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9mYWlsZWQpOworICAg
IGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNfYmVlbl9maW5pc2hlZCk7Cit9CisKKy8qIENhbmNlbGxl
ZCBsb2FkICovCisKK3N0YXRpYyBnYm9vbGVhbiBsb2FkX2NhbmNlbGxlZF9jYihXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3LCBXZWJLaXRXZWJGcmFtZSogZnJhbWUsIGNvbnN0IGNoYXIqIHVyaSwgR0Vy
cm9yICplcnJvciwgV2ViTG9hZGluZ0ZpeHR1cmUqIGZpeHR1cmUpCit7CisgICAgZ19hc3NlcnQo
Zml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwpOworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhh
c19iZWVuX2ZhaWxlZCk7CisgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX2xvYWRfZXJy
b3IpOworICAgIGdfYXNzZXJ0KGVycm9yLT5jb2RlID09IFdFQktJVF9ORVRXT1JLX0VSUk9SX0NB
TkNFTExFRCk7CisgICAgZml4dHVyZS0+aGFzX2JlZW5fbG9hZF9lcnJvciA9IFRSVUU7CisKKyAg
ICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuIHN0b3BfbG9hZCAoZ3BvaW50ZXIg
ZGF0YSkKK3sKKyAgICB3ZWJraXRfd2ViX3ZpZXdfc3RvcF9sb2FkaW5nKFdFQktJVF9XRUJfVklF
VyhkYXRhKSk7CisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZCBsb2FkX2NhbmNl
bGxlZF9zdGF0dXNfY2hhbmdlZF9jYihHT2JqZWN0KiBvYmplY3QsIEdQYXJhbVNwZWMqIHBzcGVj
LCBXZWJMb2FkaW5nRml4dHVyZSogZml4dHVyZSkKK3sKKyAgICBXZWJLaXRMb2FkU3RhdHVzIHN0
YXR1cyA9IHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMoV0VCS0lUX1dFQl9WSUVXKG9i
amVjdCkpOworCisgICAgc3dpdGNoKHN0YXR1cykgeworICAgIGNhc2UgV0VCS0lUX0xPQURfUFJP
VklTSU9OQUw6CisgICAgICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25h
bCk7CisgICAgICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNfYmVlbl9mYWlsZWQpOworICAgICAg
ICBmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCA9IFRSVUU7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgV0VCS0lUX0xPQURfQ09NTUlUVEVEOgorICAgICAgICBnX2lkbGVfYWRkIChzdG9w
X2xvYWQsIG9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0xPQURfRkFJ
TEVEOgorICAgICAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCk7Cisg
ICAgICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNfYmVlbl9mYWlsZWQpOworICAgICAgICBnX2Fz
c2VydCghZml4dHVyZS0+aGFzX2JlZW5fbG9hZF9lcnJvcik7CisgICAgICAgIGZpeHR1cmUtPmhh
c19iZWVuX2ZhaWxlZCA9IFRSVUU7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQoZml4dHVyZS0+
bG9vcCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0xPQURfRklOSVNIRUQ6Cisg
ICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgdGVzdF9sb2FkaW5n
X2NhbmNlbGxlZChXZWJMb2FkaW5nRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRh
KQoreworICAgIGNoYXIqIHVyaV9zdHJpbmc7CisKKyAgICBnX3Rlc3RfYnVnKCIyOTY0NCIpOwor
CisgICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53ZWJWaWV3LCAibG9hZC1lcnJvciIsIEdf
Q0FMTEJBQ0sobG9hZF9jYW5jZWxsZWRfY2IpLCBmaXh0dXJlKTsKKyAgICBnX3NpZ25hbF9jb25u
ZWN0KGZpeHR1cmUtPndlYlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhs
b2FkX2NhbmNlbGxlZF9zdGF0dXNfY2hhbmdlZF9jYiksIGZpeHR1cmUpOworCisgICAgdXJpX3N0
cmluZyA9IGdldF91cmlfZm9yX3BhdGgoIi90ZXN0X2xvYWRpbmdfY2FuY2VsbGVkIik7CisgICAg
d2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKGZpeHR1cmUtPndlYlZpZXcsIHVyaV9zdHJpbmcpOwor
ICAgIGdfZnJlZSh1cmlfc3RyaW5nKTsKKworICAgIGdfbWFpbl9sb29wX3J1bihmaXh0dXJlLT5s
b29wKTsKK30KKworc3RhdGljIHZvaWQgbG9hZF9nb2JhY2tfc3RhdHVzX2NoYW5nZWRfY2IoR09i
amVjdCogb2JqZWN0LCBHUGFyYW1TcGVjKiBwc3BlYywgV2ViTG9hZGluZ0ZpeHR1cmUqIGZpeHR1
cmUpCit7CisgICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X2xvYWRfc3RhdHVzKFdFQktJVF9XRUJfVklFVyhvYmplY3QpKTsKKworICAgIHN3aXRjaChzdGF0
dXMpIHsKKyAgICBjYXNlIFdFQktJVF9MT0FEX1BST1ZJU0lPTkFMOgorICAgICAgICBnX2Fzc2Vy
dCghZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwpOworICAgICAgICBmaXh0dXJlLT5oYXNf
YmVlbl9wcm92aXNpb25hbCA9IFRSVUU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VCS0lU
X0xPQURfQ09NTUlUVEVEOgorICAgICAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9wcm92
aXNpb25hbCk7CisgICAgICAgIGZpeHR1cmUtPmhhc19iZWVuX2NvbW1pdHRlZCA9IFRSVUU7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0xPQURfRkFJTEVEOgorICAgICAgICBnX2Fz
c2VydF9ub3RfcmVhY2hlZCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9MT0FE
X0ZJTklTSEVEOgorICAgICAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25h
bCk7CisgICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX2NvbW1pdHRlZCk7CisgICAg
ICAgIGZpeHR1cmUtPmhhc19iZWVuX2ZpbmlzaGVkID0gVFJVRTsKKyAgICAgICAgZ19tYWluX2xv
b3BfcXVpdChmaXh0dXJlLT5sb29wKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBsb2FkX3dlbnRiYWNrX3N0YXR1
c19jaGFuZ2VkX2NiKEdPYmplY3QqIG9iamVjdCwgR1BhcmFtU3BlYyogcHNwZWMsIFdlYkxvYWRp
bmdGaXh0dXJlKiBmaXh0dXJlKQoreworICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Vi
a2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyhXRUJLSVRfV0VCX1ZJRVcob2JqZWN0KSk7Cisg
ICAgY2hhciogdXJpX3N0cmluZzsKKyAgICBjaGFyKiB1cmlfc3RyaW5nMjsKKworICAgIHVyaV9z
dHJpbmcgPSBnZXRfdXJpX2Zvcl9wYXRoKCIvdGVzdF9sb2FkaW5nX3N0YXR1cyIpOworICAgIHVy
aV9zdHJpbmcyID0gZ2V0X3VyaV9mb3JfcGF0aCgiL3Rlc3RfbG9hZGluZ19zdGF0dXMyIik7CisK
KyAgICBzd2l0Y2goc3RhdHVzKSB7CisgICAgY2FzZSBXRUJLSVRfTE9BRF9QUk9WSVNJT05BTDoK
KyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKGZpeHR1cmUt
PndlYlZpZXcpLCA9PSwgdXJpX3N0cmluZzIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdF
QktJVF9MT0FEX0NPTU1JVFRFRDoKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJf
dmlld19nZXRfdXJpKGZpeHR1cmUtPndlYlZpZXcpLCA9PSwgdXJpX3N0cmluZyk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0xPQURfRkFJTEVEOgorICAgICAgICBnX2Fzc2VydF9u
b3RfcmVhY2hlZCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9MT0FEX0ZJTklT
SEVEOgorICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dldF91cmkoZml4
dHVyZS0+d2ViVmlldyksID09LCB1cmlfc3RyaW5nKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVp
dChmaXh0dXJlLT5sb29wKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgZ19mcmVlKHVyaV9zdHJpbmcpOworICAgIGdfZnJlZSh1cmlf
c3RyaW5nMik7Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRfZXJyb3JfdGVzdChXZWJLaXRXZWJWaWV3
KiB3ZWJ2aWV3LCBXZWJLaXRXZWJGcmFtZSogZnJhbWUsIGNvbnN0IGNoYXIqIHVyaSwgR0Vycm9y
KiBlcnJvcikKK3sKKyAgICBnX2RlYnVnKCJFcnJvcjogJXMiLCBlcnJvci0+bWVzc2FnZSk7Cit9
CisKK3N0YXRpYyB2b2lkIHRlc3RfbG9hZGluZ19nb2JhY2soV2ViTG9hZGluZ0ZpeHR1cmUqIGZp
eHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBjaGFyKiB1cmlfc3RyaW5nOworCisg
ICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1
cyIsIEdfQ0FMTEJBQ0sobG9hZF9nb2JhY2tfc3RhdHVzX2NoYW5nZWRfY2IpLCBmaXh0dXJlKTsK
KworICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2ViVmlldywgImxvYWQtZXJyb3IiLCBH
X0NBTExCQUNLKGxvYWRfZXJyb3JfdGVzdCksIGZpeHR1cmUpOworCisgICAgdXJpX3N0cmluZyA9
IGdldF91cmlfZm9yX3BhdGgoIi90ZXN0X2xvYWRpbmdfc3RhdHVzIik7CisgICAgd2Via2l0X3dl
Yl92aWV3X2xvYWRfdXJpKGZpeHR1cmUtPndlYlZpZXcsIHVyaV9zdHJpbmcpOworICAgIGdfZnJl
ZSh1cmlfc3RyaW5nKTsKKworICAgIGdfbWFpbl9sb29wX3J1bihmaXh0dXJlLT5sb29wKTsKKwor
ICAgIGZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsID0gRkFMU0U7CisgICAgZml4dHVyZS0+
aGFzX2JlZW5fY29tbWl0dGVkID0gRkFMU0U7CisgICAgZml4dHVyZS0+aGFzX2JlZW5fZmlyc3Rf
dmlzdWFsbHlfbm9uX2VtcHR5X2xheW91dCA9IEZBTFNFOworICAgIGZpeHR1cmUtPmhhc19iZWVu
X2ZpbmlzaGVkID0gRkFMU0U7CisgICAgZml4dHVyZS0+aGFzX2JlZW5fZmFpbGVkID0gRkFMU0U7
CisgICAgZml4dHVyZS0+aGFzX2JlZW5fbG9hZF9lcnJvciA9IEZBTFNFOworCisgICAgdXJpX3N0
cmluZyA9IGdldF91cmlfZm9yX3BhdGgoIi90ZXN0X2xvYWRpbmdfc3RhdHVzMiIpOworICAgIHdl
YmtpdF93ZWJfdmlld19sb2FkX3VyaShmaXh0dXJlLT53ZWJWaWV3LCB1cmlfc3RyaW5nKTsKKyAg
ICBnX2ZyZWUodXJpX3N0cmluZyk7CisKKyAgICBnX21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9v
cCk7CisKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMoZml4dHVyZS0+
d2ViVmlldywgbG9hZF9nb2JhY2tfc3RhdHVzX2NoYW5nZWRfY2IsIGZpeHR1cmUpOworCisgICAg
Zml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwgPSBGQUxTRTsKKyAgICBmaXh0dXJlLT5oYXNf
YmVlbl9jb21taXR0ZWQgPSBGQUxTRTsKKyAgICBmaXh0dXJlLT5oYXNfYmVlbl9maXJzdF92aXN1
YWxseV9ub25fZW1wdHlfbGF5b3V0ID0gRkFMU0U7CisgICAgZml4dHVyZS0+aGFzX2JlZW5fZmlu
aXNoZWQgPSBGQUxTRTsKKyAgICBmaXh0dXJlLT5oYXNfYmVlbl9mYWlsZWQgPSBGQUxTRTsKKyAg
ICBmaXh0dXJlLT5oYXNfYmVlbl9sb2FkX2Vycm9yID0gRkFMU0U7CisKKyAgICBnX3NpZ25hbF9j
b25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFD
Syhsb2FkX3dlbnRiYWNrX3N0YXR1c19jaGFuZ2VkX2NiKSwgZml4dHVyZSk7CisgICAgd2Via2l0
X3dlYl92aWV3X2dvX2JhY2soZml4dHVyZS0+d2ViVmlldyk7CisKKyAgICBnX21haW5fbG9vcF9y
dW4oZml4dHVyZS0+bG9vcCk7CisKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5
X2Z1bmMoZml4dHVyZS0+d2ViVmlldywgbG9hZF93ZW50YmFja19zdGF0dXNfY2hhbmdlZF9jYiwg
Zml4dHVyZSk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBT
b3VwU2VydmVyKiBzZXJ2ZXI7CisKKyAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVM
TCk7CisKKyAgICBzZXJ2ZXIgPSBzb3VwX3NlcnZlcl9uZXcoU09VUF9TRVJWRVJfUE9SVCwgMCwg
TlVMTCk7CisgICAgc291cF9zZXJ2ZXJfcnVuX2FzeW5jKHNlcnZlcik7CisKKyAgICBzb3VwX3Nl
cnZlcl9hZGRfaGFuZGxlcihzZXJ2ZXIsIE5VTEwsIHNlcnZlcl9jYWxsYmFjaywgTlVMTCwgTlVM
TCk7CisKKyAgICBiYXNlX3VyaSA9IHNvdXBfdXJpX25ldygiaHR0cDovLzEyNy4wLjAuMS8iKTsK
KyAgICBzb3VwX3VyaV9zZXRfcG9ydChiYXNlX3VyaSwgc291cF9zZXJ2ZXJfZ2V0X3BvcnQoc2Vy
dmVyKSk7CisKKyAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIp
OworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvbG9hZGluZy9zdGF0dXMiLAorICAgICAgICAgICAg
ICAgV2ViTG9hZGluZ0ZpeHR1cmUsIE5VTEwsCisgICAgICAgICAgICAgICB3ZWJfbG9hZGluZ19m
aXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF9sb2FkaW5nX3N0YXR1cywKKyAgICAg
ICAgICAgICAgIHdlYl9sb2FkaW5nX2ZpeHR1cmVfdGVhcmRvd24pOworICAgIGdfdGVzdF9hZGQo
Ii93ZWJraXQvbG9hZGluZy9lcnJvciIsCisgICAgICAgICAgICAgICBXZWJMb2FkaW5nRml4dHVy
ZSwgTlVMTCwKKyAgICAgICAgICAgICAgIHdlYl9sb2FkaW5nX2ZpeHR1cmVfc2V0dXAsCisgICAg
ICAgICAgICAgICB0ZXN0X2xvYWRpbmdfZXJyb3IsCisgICAgICAgICAgICAgICB3ZWJfbG9hZGlu
Z19maXh0dXJlX3RlYXJkb3duKTsKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2xvYWRpbmcvY2Fu
Y2VsbGVkIiwKKyAgICAgICAgICAgICAgIFdlYkxvYWRpbmdGaXh0dXJlLCBOVUxMLAorICAgICAg
ICAgICAgICAgd2ViX2xvYWRpbmdfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3Rf
bG9hZGluZ19jYW5jZWxsZWQsCisgICAgICAgICAgICAgICB3ZWJfbG9hZGluZ19maXh0dXJlX3Rl
YXJkb3duKTsKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2xvYWRpbmcvZ29iYWNrIiwKKyAgICAg
ICAgICAgICAgIFdlYkxvYWRpbmdGaXh0dXJlLCBOVUxMLAorICAgICAgICAgICAgICAgd2ViX2xv
YWRpbmdfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3RfbG9hZGluZ19nb2JhY2ss
CisgICAgICAgICAgICAgICB3ZWJfbG9hZGluZ19maXh0dXJlX3RlYXJkb3duKTsKKyAgICByZXR1
cm4gZ190ZXN0X3J1bigpOworfQorCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdEd0ay90ZXN0bWltZWhhbmRsaW5nLmMgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdEd0ay90ZXN0bWltZWhhbmRsaW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGM5MDY5MThkYTk0
MDlkNmZkYzk5M2ViMTM2NWEwZWRkODgzMzVkZAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RtaW1laGFuZGxpbmcuYwpAQCAtMCwwICsx
LDIwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4gTWljaGFlbCBBbG9uem8KKyAq
IENvcHlyaWdodCAoQykgMjAwOSBHdXN0YXZvIE5vcm9uaGEgU2lsdmEKKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgInRlc3RfdXRpbHMuaCIKKworI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNs
dWRlIDxnbGliL2dzdGRpby5oPgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgorI2luY2x1ZGUg
PHN0cmluZy5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKyNpbmNsdWRlIDx1bmlzdGQu
aD4KKworR01haW5Mb29wKiBsb29wOworU291cFNlc3Npb24gKnNlc3Npb247CitjaGFyKiBiYXNl
X3VyaTsKKworLyogRm9yIHJlYWwgcmVxdWVzdCB0ZXN0aW5nICovCitzdGF0aWMgdm9pZAorc2Vy
dmVyX2NhbGxiYWNrKFNvdXBTZXJ2ZXIgKnNlcnZlciwgU291cE1lc3NhZ2UgKm1zZywKKyAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwgR0hhc2hUYWJsZSAqcXVlcnksCisgICAgICAg
ICAgICAgICAgIFNvdXBDbGllbnRDb250ZXh0ICpjb250ZXh0LCBncG9pbnRlciBkYXRhKQorewor
ICAgIGlmIChtc2ctPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKKyAgICAgICAgc291cF9t
ZXNzYWdlX3NldF9zdGF0dXMobXNnLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobXNnLCBT
T1VQX1NUQVRVU19PSyk7CisKKyAgICAvKiBQREYgKi8KKyAgICBpZiAoZ19zdHJfZXF1YWwocGF0
aCwgIi9wZGYiKSkgeworICAgICAgICBjaGFyKiBjb250ZW50czsKKyAgICAgICAgZ3NpemUgbGVu
Z3RoOworICAgICAgICBHRXJyb3IqIGVycm9yID0gTlVMTDsKKworICAgICAgICBnX2ZpbGVfZ2V0
X2NvbnRlbnRzKCJ0ZXN0LnBkZiIsICZjb250ZW50cywgJmxlbmd0aCwgJmVycm9yKTsKKyAgICAg
ICAgZ19hc3NlcnQoIWVycm9yKTsKKworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQo
bXNnLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBjb250ZW50cywgbGVuZ3RoKTsK
KyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvaHRtbCIpKSB7CisgICAgICAgIGNo
YXIqIGNvbnRlbnRzOworICAgICAgICBnc2l6ZSBsZW5ndGg7CisgICAgICAgIEdFcnJvciogZXJy
b3IgPSBOVUxMOworCisgICAgICAgIGdfZmlsZV9nZXRfY29udGVudHMoInRlc3QuaHRtbCIsICZj
b250ZW50cywgJmxlbmd0aCwgJmVycm9yKTsKKyAgICAgICAgZ19hc3NlcnQoIWVycm9yKTsKKwor
ICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobXNnLT5yZXNwb25zZV9ib2R5LCBTT1VQ
X01FTU9SWV9UQUtFLCBjb250ZW50cywgbGVuZ3RoKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2Vx
dWFsKHBhdGgsICIvdGV4dCIpKSB7CisgICAgICAgIGNoYXIqIGNvbnRlbnRzOworICAgICAgICBn
c2l6ZSBsZW5ndGg7CisgICAgICAgIEdFcnJvciogZXJyb3IgPSBOVUxMOworCisgICAgICAgIHNv
dXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChtc2ctPnJlc3BvbnNlX2hlYWRlcnMsICJDb250ZW50
LURpc3Bvc2l0aW9uIiwgImF0dGFjaG1lbnQ7IGZpbGVuYW1lPXRlc3QudHh0Iik7CisKKyAgICAg
ICAgZ19maWxlX2dldF9jb250ZW50cygidGVzdC50eHQiLCAmY29udGVudHMsICZsZW5ndGgsICZl
cnJvcik7CisgICAgICAgIGdfYXNzZXJ0KCFlcnJvcik7CisKKyAgICAgICAgc291cF9tZXNzYWdl
X2JvZHlfYXBwZW5kKG1zZy0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgY29udGVu
dHMsIGxlbmd0aCk7CisgICAgfQorCisgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobXNn
LT5yZXNwb25zZV9ib2R5KTsKK30KKworc3RhdGljIHZvaWQgaWRsZV9xdWl0X2xvb3BfY2IoV2Vi
S2l0V2ViVmlldyogd2ViX3ZpZXcsIEdQYXJhbVNwZWMqIHBzcGVjLCBncG9pbnRlciBkYXRhKQor
eworICAgIGlmICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYl92aWV3KSA9PSBX
RUJLSVRfTE9BRF9GSU5JU0hFRCB8fAorICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRf
c3RhdHVzKHdlYl92aWV3KSA9PSBXRUJLSVRfTE9BRF9GQUlMRUQpCisgICAgICAgIGdfbWFpbl9s
b29wX3F1aXQobG9vcCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBtaW1lX3R5cGVfcG9saWN5X2Rl
Y2lzaW9uX3JlcXVlc3RlZF9jYihXZWJLaXRXZWJWaWV3KiB2aWV3LCBXZWJLaXRXZWJGcmFtZSog
ZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QsIGNvbnN0IGNoYXIqIG1pbWVfdHlw
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXZWJLaXRXZWJQb2xpY3lEZWNpc2lvbiogZGVjaXNpb24sIGdwb2ludGVyIGRhdGEpCit7Cisg
ICAgY2hhciogdHlwZSA9IChjaGFyKilkYXRhOworCisgICAgaWYgKGdfc3RyX2VxdWFsKHR5cGUs
ICJwZGYiKSkgeworICAgICAgICBnX2Fzc2VydF9jbXBzdHIobWltZV90eXBlLCA9PSwgImFwcGxp
Y2F0aW9uL3BkZiIpOworICAgICAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9zaG93
X21pbWVfdHlwZSh2aWV3LCBtaW1lX3R5cGUpKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFs
KHR5cGUsICJodG1sIikpIHsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKG1pbWVfdHlwZSwgPT0s
ICJ0ZXh0L2h0bWwiKTsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2Nhbl9zaG93
X21pbWVfdHlwZSh2aWV3LCBtaW1lX3R5cGUpKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFs
KHR5cGUsICJ0ZXh0IikpIHsKKyAgICAgICAgV2ViS2l0TmV0d29ya1Jlc3BvbnNlKiByZXNwb25z
ZSA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X25ldHdvcmtfcmVzcG9uc2UoZnJhbWUpOworICAgICAg
ICBTb3VwTWVzc2FnZSogbWVzc2FnZSA9IHdlYmtpdF9uZXR3b3JrX3Jlc3BvbnNlX2dldF9tZXNz
YWdlKHJlc3BvbnNlKTsKKyAgICAgICAgY2hhciogZGlzcG9zaXRpb247CisKKyAgICAgICAgZ19h
c3NlcnQobWVzc2FnZSk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9jb250ZW50
X2Rpc3Bvc2l0aW9uKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkaXNwb3NpdGlvbiwgTlVMTCk7
CisgICAgICAgIGdfb2JqZWN0X3VucmVmKHJlc3BvbnNlKTsKKworICAgICAgICBnX2Fzc2VydF9j
bXBzdHIoZGlzcG9zaXRpb24sID09LCAiYXR0YWNobWVudCIpOworICAgICAgICBnX2ZyZWUoZGlz
cG9zaXRpb24pOworCisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cihtaW1lX3R5cGUsID09LCAidGV4
dC9wbGFpbiIpOworICAgICAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfY2FuX3Nob3dfbWlt
ZV90eXBlKHZpZXcsIG1pbWVfdHlwZSkpOworICAgIH0KKworICAgIGdfZnJlZSh0eXBlKTsKKwor
ICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgdGVzdFJlbW90ZU1pbWVUeXBlKGNv
bnN0IHZvaWQqIGRhdGEpCit7CisgICAgY29uc3QgY2hhciogbmFtZSA9IChjb25zdCBjaGFyKikg
ZGF0YTsKKyAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93
ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmplY3RfcmVmX3NpbmsoR19PQkpFQ1QodmlldykpOwor
CisgICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKKworICAgIGdfb2JqZWN0
X2Nvbm5lY3QoR19PQkpFQ1QodmlldyksCisgICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjpu
b3RpZnk6OmxvYWQtc3RhdHVzIiwgaWRsZV9xdWl0X2xvb3BfY2IsIE5VTEwsCisgICAgICAgICAg
ICAgICAgICAgICAic2lnbmFsOjptaW1lLXR5cGUtcG9saWN5LWRlY2lzaW9uLXJlcXVlc3RlZCIs
IG1pbWVfdHlwZV9wb2xpY3lfZGVjaXNpb25fcmVxdWVzdGVkX2NiLCBnX3N0cmR1cChuYW1lKSwK
KyAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgY2hhciogZWZmZWN0aXZlX3VyaSA9
IGdfc3RyZHVwX3ByaW50ZigiJXMlcyIsIGJhc2VfdXJpLCBuYW1lKTsKKyAgICB3ZWJraXRfd2Vi
X3ZpZXdfbG9hZF91cmkodmlldywgZWZmZWN0aXZlX3VyaSk7CisgICAgZ19mcmVlKGVmZmVjdGl2
ZV91cmkpOworCisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgZ19vYmplY3RfdW5y
ZWYodmlldyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RMb2NhbE1pbWVUeXBlKGNvbnN0IHZvaWQq
IGRhdGEpCit7CisgICAgIGNvbnN0IGNoYXIqIHR5cGVOYW1lID0gKGNvbnN0IGNoYXIqKSBkYXRh
OworICAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJf
dmlld19uZXcoKSk7CisgICAgIGdfb2JqZWN0X3JlZl9zaW5rKEdfT0JKRUNUKHZpZXcpKTsKKwor
ICAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworCisgICAgIGdfb2JqZWN0
X2Nvbm5lY3QoR19PQkpFQ1QodmlldyksCisgICAgICAgICAgICAgICAgICAgICAgInNpZ25hbDo6
bm90aWZ5Ojpsb2FkLXN0YXR1cyIsIGlkbGVfcXVpdF9sb29wX2NiLCBOVUxMLAorICAgICAgICAg
ICAgICAgICAgICAgICJzaWduYWw6Om1pbWUtdHlwZS1wb2xpY3ktZGVjaXNpb24tcmVxdWVzdGVk
IiwgbWltZV90eXBlX3BvbGljeV9kZWNpc2lvbl9yZXF1ZXN0ZWRfY2IsIGdfc3RyZHVwKHR5cGVO
YW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKworICAgICBnY2hhciogZmlsZW5h
bWUgPSBnX3N0cmR1cF9wcmludGYoInRlc3QuJXMiLCB0eXBlTmFtZSk7CisgICAgIEdGaWxlKiBm
aWxlID0gZ19maWxlX25ld19mb3JfcGF0aChmaWxlbmFtZSk7CisgICAgIGdfZnJlZShmaWxlbmFt
ZSk7CisKKyAgICAgZ2NoYXIqIGZpbGVVUkkgPSBnX2ZpbGVfZ2V0X3VyaShmaWxlKTsKKyAgICAg
Z19vYmplY3RfdW5yZWYoZmlsZSk7CisKKyAgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHZp
ZXcsIGZpbGVVUkkpOworICAgICBnX2ZyZWUoZmlsZVVSSSk7CisgCisgICAgIGdfbWFpbl9sb29w
X3J1bihsb29wKTsKKyAgICAgZ19vYmplY3RfdW5yZWYodmlldyk7Cit9CisKK2ludCBtYWluKGlu
dCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBTb3VwU2VydmVyKiBzZXJ2ZXI7CisgICAgU291
cFVSSSogc291cF91cmk7CisKKyAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7
CisKKyAgICAvKiBIb3BlZnVsbHkgbWFrZSB0ZXN0IGluZGVwZW5kZW50IG9mIHRoZSBwYXRoIGl0
J3MgY2FsbGVkIGZyb20uICovCisgICAgdGVzdHV0aWxzX3JlbGF0aXZlX2NoZGlyKCJUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9yZXNvdXJjZXMvdGVzdC5odG1sIiwgYXJndlsw
XSk7CisKKyAgICBzZXJ2ZXIgPSBzb3VwX3NlcnZlcl9uZXcoU09VUF9TRVJWRVJfUE9SVCwgMCwg
TlVMTCk7CisgICAgc291cF9zZXJ2ZXJfcnVuX2FzeW5jKHNlcnZlcik7CisKKyAgICBzb3VwX3Nl
cnZlcl9hZGRfaGFuZGxlcihzZXJ2ZXIsIE5VTEwsIHNlcnZlcl9jYWxsYmFjaywgTlVMTCwgTlVM
TCk7CisKKyAgICBzb3VwX3VyaSA9IHNvdXBfdXJpX25ldygiaHR0cDovLzEyNy4wLjAuMS8iKTsK
KyAgICBzb3VwX3VyaV9zZXRfcG9ydChzb3VwX3VyaSwgc291cF9zZXJ2ZXJfZ2V0X3BvcnQoc2Vy
dmVyKSk7CisKKyAgICBiYXNlX3VyaSA9IHNvdXBfdXJpX3RvX3N0cmluZyhzb3VwX3VyaSwgRkFM
U0UpOworICAgIHNvdXBfdXJpX2ZyZWUoc291cF91cmkpOworCisgICAgZ190ZXN0X2J1Z19iYXNl
KCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYWRkX2RhdGFfZnVuYygi
L3dlYmtpdC9taW1lL3JlbW90ZS1QREYiLCAicGRmIiwgdGVzdFJlbW90ZU1pbWVUeXBlKTsKKyAg
ICBnX3Rlc3RfYWRkX2RhdGFfZnVuYygiL3dlYmtpdC9taW1lL3JlbW90ZS1IVE1MIiwgImh0bWwi
LCB0ZXN0UmVtb3RlTWltZVR5cGUpOworICAgIGdfdGVzdF9hZGRfZGF0YV9mdW5jKCIvd2Via2l0
L21pbWUvcmVtb3RlLVRFWFQiLCAidGV4dCIsIHRlc3RSZW1vdGVNaW1lVHlwZSk7CisgICAgZ190
ZXN0X2FkZF9kYXRhX2Z1bmMoIi93ZWJraXQvbWltZS9sb2NhbC1QREYiLCAicGRmIiwgdGVzdExv
Y2FsTWltZVR5cGUpOworICAgIGdfdGVzdF9hZGRfZGF0YV9mdW5jKCIvd2Via2l0L21pbWUvbG9j
YWwtSFRNTCIsICJodG1sIiwgdGVzdExvY2FsTWltZVR5cGUpOworICAgIGdfdGVzdF9hZGRfZGF0
YV9mdW5jKCIvd2Via2l0L21pbWUvbG9jYWwtVEVYVCIsICJ0ZXh0IiwgdGVzdExvY2FsTWltZVR5
cGUpOworCisgICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RuZXR3b3JrcmVxdWVzdC5jIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdG5ldHdvcmtyZXF1ZXN0LmMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMWIyYzkwZjJkMjNhYjIxYzA4MzI0MjQ2YmQxY2JlNGE4ZDQ3MzE0MwotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RuZXR3b3Jr
cmVxdWVzdC5jCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR3Vz
dGF2byBOb3JvbmhhIFNpbHZhCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxlcnJuby5o
PgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxnbGli
L2dzdGRpby5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNp
bmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+CisKK3N0YXRpYyB2b2lkIHRlc3RfbmV0d29ya19yZXF1
ZXN0X2NyZWF0ZV9kZXN0cm95KCkKK3sKKyAgICBXZWJLaXROZXR3b3JrUmVxdWVzdCogcmVxdWVz
dDsKKyAgICBTb3VwTWVzc2FnZSogbWVzc2FnZTsKKworICAgIC8qIFRlc3QgY3JlYXRpb24gd2l0
aCBVUkkgKi8KKyAgICByZXF1ZXN0ID0gV0VCS0lUX05FVFdPUktfUkVRVUVTVChnX29iamVjdF9u
ZXcoV0VCS0lUX1RZUEVfTkVUV09SS19SRVFVRVNULCAidXJpIiwgImh0dHA6Ly9kZWJpYW4ub3Jn
LyIsIE5VTEwpKTsKKyAgICBnX2Fzc2VydChXRUJLSVRfSVNfTkVUV09SS19SRVFVRVNUKHJlcXVl
c3QpKTsKKyAgICBtZXNzYWdlID0gd2Via2l0X25ldHdvcmtfcmVxdWVzdF9nZXRfbWVzc2FnZShy
ZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghbWVzc2FnZSk7CisgICAgZ19vYmplY3RfdW5yZWYocmVx
dWVzdCk7CisKKyAgICAvKiBUZXN0IGNyZWF0aW9uIHdpdGggU291cE1lc3NhZ2UgKi8KKyAgICBt
ZXNzYWdlID0gc291cF9tZXNzYWdlX25ldygiR0VUIiwgImh0dHA6Ly9kZWJpYW4ub3JnLyIpOwor
ICAgIHJlcXVlc3QgPSBXRUJLSVRfTkVUV09SS19SRVFVRVNUKGdfb2JqZWN0X25ldyhXRUJLSVRf
VFlQRV9ORVRXT1JLX1JFUVVFU1QsICJtZXNzYWdlIiwgbWVzc2FnZSwgTlVMTCkpOworICAgIGdf
YXNzZXJ0KFdFQktJVF9JU19ORVRXT1JLX1JFUVVFU1QocmVxdWVzdCkpOworICAgIGdfYXNzZXJ0
X2NtcGludChHX09CSkVDVChtZXNzYWdlKS0+cmVmX2NvdW50LCA9PSwgMik7CisgICAgZ19vYmpl
Y3RfdW5yZWYocmVxdWVzdCk7CisgICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKG1lc3NhZ2Up
LT5yZWZfY291bnQsID09LCAxKTsKKyAgICBnX29iamVjdF91bnJlZihtZXNzYWdlKTsKKworICAg
IC8qIFRlc3QgY3JlYXRpb24gd2l0aCBib3RoIFNvdXBNZXNzYWdlIGFuZCBVUkkgKi8KKyAgICBt
ZXNzYWdlID0gc291cF9tZXNzYWdlX25ldygiR0VUIiwgImh0dHA6Ly9kZWJpYW4ub3JnLyIpOwor
ICAgIHJlcXVlc3QgPSBXRUJLSVRfTkVUV09SS19SRVFVRVNUKGdfb2JqZWN0X25ldyhXRUJLSVRf
VFlQRV9ORVRXT1JLX1JFUVVFU1QsICJtZXNzYWdlIiwgbWVzc2FnZSwgInVyaSIsICJodHRwOi8v
Z25vbWUub3JnLyIsIE5VTEwpKTsKKyAgICBnX2Fzc2VydChXRUJLSVRfSVNfTkVUV09SS19SRVFV
RVNUKHJlcXVlc3QpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QobWVzc2FnZSktPnJl
Zl9jb3VudCwgPT0sIDIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfbmV0d29ya19yZXF1
ZXN0X2dldF91cmkocmVxdWVzdCksID09LCAiaHR0cDovL2dub21lLm9yZy8iKTsKKyAgICBnX29i
amVjdF91bnJlZihyZXF1ZXN0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QobWVzc2Fn
ZSktPnJlZl9jb3VudCwgPT0sIDEpOworICAgIGdfb2JqZWN0X3VucmVmKG1lc3NhZ2UpOworfQor
CitzdGF0aWMgdm9pZCB0ZXN0X25ldHdvcmtfcmVxdWVzdF9wcm9wZXJ0aWVzKCkKK3sKKyAgICBX
ZWJLaXROZXR3b3JrUmVxdWVzdCogcmVxdWVzdDsKKyAgICBTb3VwTWVzc2FnZSogbWVzc2FnZTsK
KyAgICBnY2hhciogc291cFVSSTsKKworICAgIC8qIFRlc3QgVVJJIGlzIHNldCBjb3JyZWN0bHkg
d2hlbiBjcmVhdGluZyB3aXRoIFVSSSAqLworICAgIHJlcXVlc3QgPSB3ZWJraXRfbmV0d29ya19y
ZXF1ZXN0X25ldygiaHR0cDovL2RlYmlhbi5vcmcvIik7CisgICAgZ19hc3NlcnQoV0VCS0lUX0lT
X05FVFdPUktfUkVRVUVTVChyZXF1ZXN0KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9u
ZXR3b3JrX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KSwgPT0sICJodHRwOi8vZGViaWFuLm9yZy8i
KTsKKyAgICBnX29iamVjdF91bnJlZihyZXF1ZXN0KTsKKworICAgIC8qIFRlc3QgVVJJIGlzIHNl
dCBjb3JyZWN0bHkgd2hlbiBjcmVhdGluZyB3aXRoIE1lc3NhZ2UgKi8KKyAgICBtZXNzYWdlID0g
c291cF9tZXNzYWdlX25ldygiR0VUIiwgImh0dHA6Ly9kZWJpYW4ub3JnLyIpOworICAgIHJlcXVl
c3QgPSBXRUJLSVRfTkVUV09SS19SRVFVRVNUKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9ORVRX
T1JLX1JFUVVFU1QsICJtZXNzYWdlIiwgbWVzc2FnZSwgTlVMTCkpOworICAgIGdfYXNzZXJ0KFdF
QktJVF9JU19ORVRXT1JLX1JFUVVFU1QocmVxdWVzdCkpOworICAgIGdfb2JqZWN0X3VucmVmKG1l
c3NhZ2UpOworCisgICAgbWVzc2FnZSA9IHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfZ2V0X21lc3Nh
Z2UocmVxdWVzdCk7CisgICAgc291cFVSSSA9IHNvdXBfdXJpX3RvX3N0cmluZyhzb3VwX21lc3Nh
Z2VfZ2V0X3VyaShtZXNzYWdlKSwgRkFMU0UpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzb3VwVVJJ
LCA9PSwgImh0dHA6Ly9kZWJpYW4ub3JnLyIpOworICAgIGdfZnJlZShzb3VwVVJJKTsKKworICAg
IGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfbmV0d29ya19yZXF1ZXN0X2dldF91cmkocmVxdWVzdCks
ID09LCAiaHR0cDovL2RlYmlhbi5vcmcvIik7CisgICAgZ19vYmplY3RfdW5yZWYocmVxdWVzdCk7
Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBndGtfdGVzdF9p
bml0KCZhcmdjLCAmYXJndiwgTlVMTCk7CisKKyAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8v
YnVncy53ZWJraXQub3JnLyIpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9uZXR3b3Jr
cmVxdWVzdC9jcmVhdGVkZXN0cm95IiwgdGVzdF9uZXR3b3JrX3JlcXVlc3RfY3JlYXRlX2Rlc3Ry
b3kpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9uZXR3b3JrcmVxdWVzdC9wcm9wZXJ0
aWVzIiwgdGVzdF9uZXR3b3JrX3JlcXVlc3RfcHJvcGVydGllcyk7CisgICAgcmV0dXJuIGdfdGVz
dF9ydW4gKCk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dEd0ay90ZXN0bmV0d29ya3Jlc3BvbnNlLmMgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdEd0ay90ZXN0bmV0d29ya3Jlc3BvbnNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjgwNmFhMTExZmU4YjYy
NzkxNzYyZDJmYzM5MzI1ZGE1N2RlYTdhYgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RuZXR3b3JrcmVzcG9uc2UuYwpAQCAtMCwwICsx
LDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEd1c3Rhdm8gTm9yb25oYSBTaWx2YQor
ICogQ29weXJpZ2h0IChDKSAyMDA5IENvbGxhYm9yYSBMdGQuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGdsaWIu
aD4KKyNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNs
dWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+CisKK3N0YXRpYyB2b2lk
IHRlc3RfbmV0d29ya19yZXNwb25zZV9jcmVhdGVfZGVzdHJveSgpCit7CisgICAgV2ViS2l0TmV0
d29ya1Jlc3BvbnNlKiByZXNwb25zZTsKKyAgICBTb3VwTWVzc2FnZSogbWVzc2FnZTsKKworICAg
IC8qIFRlc3QgY3JlYXRpb24gd2l0aCBVUkkgKi8KKyAgICByZXNwb25zZSA9IFdFQktJVF9ORVRX
T1JLX1JFU1BPTlNFKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9ORVRXT1JLX1JFU1BPTlNFLCAi
dXJpIiwgImh0dHA6Ly9kZWJpYW4ub3JnLyIsIE5VTEwpKTsKKyAgICBnX2Fzc2VydChXRUJLSVRf
SVNfTkVUV09SS19SRVNQT05TRShyZXNwb25zZSkpOworICAgIG1lc3NhZ2UgPSB3ZWJraXRfbmV0
d29ya19yZXNwb25zZV9nZXRfbWVzc2FnZShyZXNwb25zZSk7CisgICAgZ19hc3NlcnQoIW1lc3Nh
Z2UpOworICAgIGdfb2JqZWN0X3VucmVmKHJlc3BvbnNlKTsKKworICAgIC8qIFRlc3QgY3JlYXRp
b24gd2l0aCBTb3VwTWVzc2FnZSAqLworICAgIG1lc3NhZ2UgPSBzb3VwX21lc3NhZ2VfbmV3KCJH
RVQiLCAiaHR0cDovL2RlYmlhbi5vcmcvIik7CisgICAgcmVzcG9uc2UgPSBXRUJLSVRfTkVUV09S
S19SRVNQT05TRShnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfTkVUV09SS19SRVNQT05TRSwgIm1l
c3NhZ2UiLCBtZXNzYWdlLCBOVUxMKSk7CisgICAgZ19hc3NlcnQoV0VCS0lUX0lTX05FVFdPUktf
UkVTUE9OU0UocmVzcG9uc2UpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QobWVzc2Fn
ZSktPnJlZl9jb3VudCwgPT0sIDIpOworICAgIGdfb2JqZWN0X3VucmVmKHJlc3BvbnNlKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QobWVzc2FnZSktPnJlZl9jb3VudCwgPT0sIDEpOwor
ICAgIGdfb2JqZWN0X3VucmVmKG1lc3NhZ2UpOworCisgICAgLyogVGVzdCBjcmVhdGlvbiB3aXRo
IGJvdGggU291cE1lc3NhZ2UgYW5kIFVSSSAqLworICAgIG1lc3NhZ2UgPSBzb3VwX21lc3NhZ2Vf
bmV3KCJHRVQiLCAiaHR0cDovL2RlYmlhbi5vcmcvIik7CisgICAgcmVzcG9uc2UgPSBXRUJLSVRf
TkVUV09SS19SRVNQT05TRShnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfTkVUV09SS19SRVNQT05T
RSwgIm1lc3NhZ2UiLCBtZXNzYWdlLCAidXJpIiwgImh0dHA6Ly9nbm9tZS5vcmcvIiwgTlVMTCkp
OworICAgIGdfYXNzZXJ0KFdFQktJVF9JU19ORVRXT1JLX1JFU1BPTlNFKHJlc3BvbnNlKSk7Cisg
ICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKG1lc3NhZ2UpLT5yZWZfY291bnQsID09LCAyKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X25ldHdvcmtfcmVzcG9uc2VfZ2V0X3VyaShyZXNw
b25zZSksID09LCAiaHR0cDovL2dub21lLm9yZy8iKTsKKyAgICBnX29iamVjdF91bnJlZihyZXNw
b25zZSk7CisgICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKG1lc3NhZ2UpLT5yZWZfY291bnQs
ID09LCAxKTsKKyAgICBnX29iamVjdF91bnJlZihtZXNzYWdlKTsKK30KKworc3RhdGljIHZvaWQg
dGVzdF9uZXR3b3JrX3Jlc3BvbnNlX3Byb3BlcnRpZXMoKQoreworICAgIFdlYktpdE5ldHdvcmtS
ZXNwb25zZSogcmVzcG9uc2U7CisgICAgU291cE1lc3NhZ2UqIG1lc3NhZ2U7CisgICAgZ2NoYXIq
IHNvdXBVUkk7CisKKyAgICAvKiBUZXN0IFVSSSBpcyBzZXQgY29ycmVjdGx5IHdoZW4gY3JlYXRp
bmcgd2l0aCBVUkkgKi8KKyAgICByZXNwb25zZSA9IHdlYmtpdF9uZXR3b3JrX3Jlc3BvbnNlX25l
dygiaHR0cDovL2RlYmlhbi5vcmcvIik7CisgICAgZ19hc3NlcnQoV0VCS0lUX0lTX05FVFdPUktf
UkVTUE9OU0UocmVzcG9uc2UpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X25ldHdvcmtf
cmVzcG9uc2VfZ2V0X3VyaShyZXNwb25zZSksID09LCAiaHR0cDovL2RlYmlhbi5vcmcvIik7Cisg
ICAgZ19vYmplY3RfdW5yZWYocmVzcG9uc2UpOworCisgICAgLyogVGVzdCBVUkkgaXMgc2V0IGNv
cnJlY3RseSB3aGVuIGNyZWF0aW5nIHdpdGggTWVzc2FnZSAqLworICAgIG1lc3NhZ2UgPSBzb3Vw
X21lc3NhZ2VfbmV3KCJHRVQiLCAiaHR0cDovL2RlYmlhbi5vcmcvIik7CisgICAgcmVzcG9uc2Ug
PSBXRUJLSVRfTkVUV09SS19SRVNQT05TRShnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfTkVUV09S
S19SRVNQT05TRSwgIm1lc3NhZ2UiLCBtZXNzYWdlLCBOVUxMKSk7CisgICAgZ19hc3NlcnQoV0VC
S0lUX0lTX05FVFdPUktfUkVTUE9OU0UocmVzcG9uc2UpKTsKKyAgICBnX29iamVjdF91bnJlZiht
ZXNzYWdlKTsKKworICAgIG1lc3NhZ2UgPSB3ZWJraXRfbmV0d29ya19yZXNwb25zZV9nZXRfbWVz
c2FnZShyZXNwb25zZSk7CisgICAgc291cFVSSSA9IHNvdXBfdXJpX3RvX3N0cmluZyhzb3VwX21l
c3NhZ2VfZ2V0X3VyaShtZXNzYWdlKSwgRkFMU0UpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzb3Vw
VVJJLCA9PSwgImh0dHA6Ly9kZWJpYW4ub3JnLyIpOworICAgIGdfZnJlZShzb3VwVVJJKTsKKwor
ICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfbmV0d29ya19yZXNwb25zZV9nZXRfdXJpKHJlc3Bv
bnNlKSwgPT0sICJodHRwOi8vZGViaWFuLm9yZy8iKTsKKyAgICBnX29iamVjdF91bnJlZihyZXNw
b25zZSk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBndGtf
dGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7CisKKyAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0
dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9u
ZXR3b3JrcmVzcG9uc2UvY3JlYXRlZGVzdHJveSIsIHRlc3RfbmV0d29ya19yZXNwb25zZV9jcmVh
dGVfZGVzdHJveSk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L25ldHdvcmtyZXNwb25z
ZS9wcm9wZXJ0aWVzIiwgdGVzdF9uZXR3b3JrX3Jlc3BvbnNlX3Byb3BlcnRpZXMpOworICAgIHJl
dHVybiBnX3Rlc3RfcnVuICgpOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRHdGsvdGVzdHdlYmJhY2tmb3J3YXJkbGlzdC5jIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYmJhY2tmb3J3YXJkbGlzdC5jCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
Ljc3ODJkNDA3MDQxODJmZmZlY2RiNzVjZjA4NGQxYTQ2YWUzYzBkNjUKLS0tIC9kZXYvbnVsbAor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2ViYmFja2Zvcndh
cmRsaXN0LmMKQEAgLTAsMCArMSwzMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSG9s
Z2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPGds
aWIuaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgor
CitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2xpZmV0aW1lKHZvaWQp
Cit7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldzsKKyAgICBXZWJLaXRXZWJCYWNrRm9yd2Fy
ZExpc3QqIGJhY2tGb3J3YXJkTGlzdDsKKyAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogY3VycmVu
dEl0ZW07CisgICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGZvcndhcmRJdGVtOworICAgIFdlYktp
dFdlYkhpc3RvcnlJdGVtKiBiYWNrSXRlbTsKKyAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogbnRo
SXRlbTsKKyAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogaXRlbTE7CisgICAgV2ViS2l0V2ViSGlz
dG9yeUl0ZW0qIGl0ZW0yOworICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBpdGVtMzsKKyAgICBX
ZWJLaXRXZWJIaXN0b3J5SXRlbSogaXRlbTQ7CisgICAgR0xpc3QqIGJhY2tMaXN0ID0gTlVMTDsK
KyAgICBHTGlzdCogZm9yd2FyZExpc3QgPSBOVUxMOworICAgIGdfdGVzdF9idWcoIjE5ODk4Iik7
CisKKyAgICB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7
CisgICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7CisgICAgYmFja0ZvcndhcmRMaXN0ID0g
d2Via2l0X3dlYl92aWV3X2dldF9iYWNrX2ZvcndhcmRfbGlzdCh3ZWJWaWV3KTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoR19PQkpFQ1QoYmFja0ZvcndhcmRMaXN0KS0+cmVmX2NvdW50LCA9PSwgMSk7
CisKKyAgICAvKiBhZGQgdGVzdCBpdGVtcyAqLworICAgIGl0ZW0xID0gd2Via2l0X3dlYl9oaXN0
b3J5X2l0ZW1fbmV3X3dpdGhfZGF0YSgiaHR0cDovL2V4YW1wbGUuY29tLzEvIiwgIlNpdGUgMSIp
OworICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfYWRkX2l0ZW0oYmFja0ZvcndhcmRM
aXN0LCBpdGVtMSk7CisgICAgZ19vYmplY3RfdW5yZWYoaXRlbTEpOworCisgICAgaXRlbTIgPSB3
ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9uZXdfd2l0aF9kYXRhKCJodHRwOi8vZXhhbXBsZS5jb20v
Mi8iLCAiU2l0ZSAyIik7CisgICAgd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9hZGRfaXRl
bShiYWNrRm9yd2FyZExpc3QsIGl0ZW0yKTsKKyAgICBnX29iamVjdF91bnJlZihpdGVtMik7CisK
KyAgICBpdGVtMyA9IHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX25ld193aXRoX2RhdGEoImh0dHA6
Ly9leGFtcGxlLmNvbS8zLyIsICJTaXRlIDMiKTsKKyAgICB3ZWJraXRfd2ViX2JhY2tfZm9yd2Fy
ZF9saXN0X2FkZF9pdGVtKGJhY2tGb3J3YXJkTGlzdCwgaXRlbTMpOworICAgIGdfb2JqZWN0X3Vu
cmVmKGl0ZW0zKTsKKworICAgIGl0ZW00ID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dp
dGhfZGF0YSgiaHR0cDovL2V4YW1wbGUuY29tLzQvIiwgIlNpdGUgNCIpOworICAgIHdlYmtpdF93
ZWJfYmFja19mb3J3YXJkX2xpc3RfYWRkX2l0ZW0oYmFja0ZvcndhcmRMaXN0LCBpdGVtNCk7Cisg
ICAgZ19vYmplY3RfdW5yZWYoaXRlbTQpOworCisgICAgLyogbWFrZSBzdXJlIHRoZXNlIGZ1bmN0
aW9ucyBkb24ndCBhZGQgdW5uZWNlc3NhcnkgcmVmIHRvIHRoZSBoaXN0b3J5IGl0ZW0gKi8KKyAg
ICBiYWNrSXRlbSA9IHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfaXRlbShi
YWNrRm9yd2FyZExpc3QpOworICAgIGdfb2JqZWN0X3JlZihiYWNrSXRlbSk7CisgICAgZ19hc3Nl
cnRfY21waW50KEdfT0JKRUNUKGJhY2tJdGVtKS0+cmVmX2NvdW50LCA9PSwgMik7CisgICAgZ19v
YmplY3RfdW5yZWYoYmFja0l0ZW0pOworICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChiYWNr
SXRlbSktPnJlZl9jb3VudCwgPT0sIDEpOworCisgICAgY3VycmVudEl0ZW0gPSB3ZWJraXRfd2Vi
X2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0oYmFja0ZvcndhcmRMaXN0KTsKKyAg
ICBnX29iamVjdF9yZWYoY3VycmVudEl0ZW0pOworICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVD
VChjdXJyZW50SXRlbSktPnJlZl9jb3VudCwgPT0sIDIpOworICAgIGdfb2JqZWN0X3VucmVmKGN1
cnJlbnRJdGVtKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoY3VycmVudEl0ZW0pLT5y
ZWZfY291bnQsID09LCAxKTsKKworICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ29f
dG9faXRlbShiYWNrRm9yd2FyZExpc3QsIGl0ZW0yKTsKKyAgICBmb3J3YXJkSXRlbSA9IHdlYmtp
dF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRlbShiYWNrRm9yd2FyZExpc3Qp
OworICAgIGdfb2JqZWN0X3JlZihmb3J3YXJkSXRlbSk7CisgICAgZ19hc3NlcnRfY21waW50KEdf
T0JKRUNUKGZvcndhcmRJdGVtKS0+cmVmX2NvdW50LCA9PSwgMik7CisgICAgZ19vYmplY3RfdW5y
ZWYoZm9yd2FyZEl0ZW0pOworICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChmb3J3YXJkSXRl
bSktPnJlZl9jb3VudCwgPT0sIDEpOworCisgICAgbnRoSXRlbSA9IHdlYmtpdF93ZWJfYmFja19m
b3J3YXJkX2xpc3RfZ2V0X250aF9pdGVtKGJhY2tGb3J3YXJkTGlzdCwgMSk7CisgICAgZ19vYmpl
Y3RfcmVmKG50aEl0ZW0pOworICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChudGhJdGVtKS0+
cmVmX2NvdW50LCA9PSwgMik7CisgICAgZ19vYmplY3RfdW5yZWYobnRoSXRlbSk7CisgICAgZ19h
c3NlcnRfY21waW50KEdfT0JKRUNUKG50aEl0ZW0pLT5yZWZfY291bnQsID09LCAxKTsKKworICAg
IGJhY2tMaXN0ID0gd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19saXN0X3dp
dGhfbGltaXQoYmFja0ZvcndhcmRMaXN0LCA1KTsKKyAgICBmb3IgKDsgYmFja0xpc3Q7IGJhY2tM
aXN0ID0gYmFja0xpc3QtPm5leHQpCisgICAgICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChi
YWNrTGlzdC0+ZGF0YSktPnJlZl9jb3VudCwgPT0sIDEpOworCisgICAgZm9yd2FyZExpc3QgPSB3
ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xpc3Rfd2l0aF9saW1pdChi
YWNrRm9yd2FyZExpc3QsIDUpOworICAgIGZvciAoOyBmb3J3YXJkTGlzdDsgZm9yd2FyZExpc3Qg
PSBmb3J3YXJkTGlzdC0+bmV4dCkKKyAgICAgICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKGZv
cndhcmRMaXN0LT5kYXRhKS0+cmVmX2NvdW50LCA9PSwgMSk7CisKKyAgICBnX2xpc3RfZnJlZShm
b3J3YXJkTGlzdCk7CisgICAgZ19saXN0X2ZyZWUoYmFja0xpc3QpOworICAgIGdfYXNzZXJ0X2Nt
cGludChHX09CSkVDVChpdGVtMSktPnJlZl9jb3VudCwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2Nt
cGludChHX09CSkVDVChpdGVtMiktPnJlZl9jb3VudCwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2Nt
cGludChHX09CSkVDVChpdGVtMyktPnJlZl9jb3VudCwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2Nt
cGludChHX09CSkVDVChpdGVtNCktPnJlZl9jb3VudCwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2Nt
cGludChHX09CSkVDVChiYWNrRm9yd2FyZExpc3QpLT5yZWZfY291bnQsID09LCAxKTsKKyAgICBn
X29iamVjdF91bnJlZih3ZWJWaWV3KTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2Vi
X2JhY2tfZm9yd2FyZF9saXN0X29yZGVyKHZvaWQpCit7CisgICAgV2ViS2l0V2ViVmlldyogd2Vi
VmlldzsKKyAgICBXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYkJhY2tGb3J3YXJkTGlzdDsK
KyAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogaXRlbTE7CisgICAgV2ViS2l0V2ViSGlzdG9yeUl0
ZW0qIGl0ZW0yOworICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBpdGVtMzsKKyAgICBXZWJLaXRX
ZWJIaXN0b3J5SXRlbSogaXRlbTQ7CisgICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGN1cnJlbnRJ
dGVtOworICAgIEdMaXN0KiBiYWNrTGlzdCA9IE5VTEw7CisgICAgR0xpc3QqIGZvcndhcmRMaXN0
ID0gTlVMTDsKKyAgICBnX3Rlc3RfYnVnKCIyMjY5NCIpOworCisgICAgd2ViVmlldyA9IFdFQktJ
VF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3JlZl9zaW5r
KHdlYlZpZXcpOworCisgICAgd2Via2l0X3dlYl92aWV3X3NldF9tYWludGFpbnNfYmFja19mb3J3
YXJkX2xpc3Qod2ViVmlldywgVFJVRSk7CisgICAgd2ViQmFja0ZvcndhcmRMaXN0ID0gd2Via2l0
X3dlYl92aWV3X2dldF9iYWNrX2ZvcndhcmRfbGlzdCh3ZWJWaWV3KTsKKyAgICBnX2Fzc2VydCh3
ZWJCYWNrRm9yd2FyZExpc3QpOworCisgICAgLy8gQ2hlY2sgdGhhdCB0aGVyZSBpcyBubyBpdGVt
LgorICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50
X2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0KSk7CisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93
ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGVuZ3RoKHdlYkJhY2tGb3J3YXJkTGlz
dCksID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRf
bGlzdF9nZXRfYmFja19sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDApOworICAgIGdf
YXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQod2ViVmlldykpOworICAgIGdf
YXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2sod2ViVmlldykpOworCisgICAgLy8g
QWRkIGEgbmV3IGl0ZW1zCisgICAgaXRlbTEgPSB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9uZXdf
d2l0aF9kYXRhKCJodHRwOi8vZXhhbXBsZS5jb20vMS8iLCAiU2l0ZSAxIik7CisgICAgd2Via2l0
X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9hZGRfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QsIGl0ZW0x
KTsKKyAgICBnX29iamVjdF91bnJlZihpdGVtMSk7CisgICAgZ19hc3NlcnQod2Via2l0X3dlYl9i
YWNrX2ZvcndhcmRfbGlzdF9jb250YWluc19pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCwgaXRlbTEp
KTsKKworICAgIGl0ZW0yID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dpdGhfZGF0YSgi
aHR0cDovL2V4YW1wbGUuY29tLzIvIiwgIlNpdGUgMiIpOworICAgIHdlYmtpdF93ZWJfYmFja19m
b3J3YXJkX2xpc3RfYWRkX2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0LCBpdGVtMik7CisgICAgZ19v
YmplY3RfdW5yZWYoaXRlbTIpOworICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfYmFja19mb3J3YXJk
X2xpc3RfY29udGFpbnNfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QsIGl0ZW0yKSk7CisKKyAgICBp
dGVtMyA9IHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX25ld193aXRoX2RhdGEoImh0dHA6Ly9leGFt
cGxlLmNvbS8zLyIsICJTaXRlIDMiKTsKKyAgICB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0
X2FkZF9pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCwgaXRlbTMpOworICAgIGdfb2JqZWN0X3VucmVm
KGl0ZW0zKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2NvbnRh
aW5zX2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0LCBpdGVtMykpOworCisgICAgaXRlbTQgPSB3ZWJr
aXRfd2ViX2hpc3RvcnlfaXRlbV9uZXdfd2l0aF9kYXRhKCJodHRwOi8vZXhhbXBsZS5jb20vNC8i
LCAiU2l0ZSA0Iik7CisgICAgd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9hZGRfaXRlbSh3
ZWJCYWNrRm9yd2FyZExpc3QsIGl0ZW00KTsKKyAgICBnX29iamVjdF91bnJlZihpdGVtNCk7Cisg
ICAgZ19hc3NlcnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9jb250YWluc19pdGVtKHdl
YkJhY2tGb3J3YXJkTGlzdCwgaXRlbTQpKTsKKworICAgIC8vIGNoZWNrIHRoZSBiYWNrIGxpc3Qg
b3JkZXIKKyAgICBiYWNrTGlzdCA9IHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2Jh
Y2tfbGlzdF93aXRoX2xpbWl0KHdlYkJhY2tGb3J3YXJkTGlzdCwgNSk7CisgICAgZ19hc3NlcnQo
YmFja0xpc3QpOworCisgICAgY3VycmVudEl0ZW0gPSBXRUJLSVRfV0VCX0hJU1RPUllfSVRFTShi
YWNrTGlzdC0+ZGF0YSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9p
dGVtX2dldF91cmkoY3VycmVudEl0ZW0pLCA9PSwgImh0dHA6Ly9leGFtcGxlLmNvbS8zLyIpOwor
ICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdGl0bGUoY3Vy
cmVudEl0ZW0pLCA9PSwgIlNpdGUgMyIpOworICAgIGJhY2tMaXN0ID0gYmFja0xpc3QtPm5leHQ7
CisKKyAgICBjdXJyZW50SXRlbSA9IFdFQktJVF9XRUJfSElTVE9SWV9JVEVNKGJhY2tMaXN0LT5k
YXRhKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3Vy
aShjdXJyZW50SXRlbSksID09LCAiaHR0cDovL2V4YW1wbGUuY29tLzIvIik7CisgICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF90aXRsZShjdXJyZW50SXRlbSks
ID09LCAiU2l0ZSAyIik7CisgICAgYmFja0xpc3QgPSBiYWNrTGlzdC0+bmV4dDsKKworICAgIGN1
cnJlbnRJdGVtID0gV0VCS0lUX1dFQl9ISVNUT1JZX0lURU0oYmFja0xpc3QtPmRhdGEpOworICAg
IGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdXJpKGN1cnJlbnRJ
dGVtKSwgPT0sICJodHRwOi8vZXhhbXBsZS5jb20vMS8iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIo
d2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3RpdGxlKGN1cnJlbnRJdGVtKSwgPT0sICJTaXRl
IDEiKTsKKyAgICBnX2xpc3RfZnJlZShiYWNrTGlzdCk7CisKKyAgICAvLyBjaGVjayB0aGUgZm9y
d2FyZCBsaXN0IG9yZGVyCisgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dvX3RvX2JhY2tf
Zm9yd2FyZF9pdGVtKHdlYlZpZXcsIGl0ZW0xKSk7CisgICAgZm9yd2FyZExpc3QgPSB3ZWJraXRf
d2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xpc3Rfd2l0aF9saW1pdCh3ZWJCYWNr
Rm9yd2FyZExpc3QsNSk7CisgICAgZ19hc3NlcnQoZm9yd2FyZExpc3QpOworCisgICAgY3VycmVu
dEl0ZW0gPSBXRUJLSVRfV0VCX0hJU1RPUllfSVRFTShmb3J3YXJkTGlzdC0+ZGF0YSk7CisgICAg
Z19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF91cmkoY3VycmVudEl0
ZW0pLCA9PSwgImh0dHA6Ly9leGFtcGxlLmNvbS80LyIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3
ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdGl0bGUoY3VycmVudEl0ZW0pLCA9PSwgIlNpdGUg
NCIpOworICAgIGZvcndhcmRMaXN0ID0gZm9yd2FyZExpc3QtPm5leHQ7CisKKyAgICBjdXJyZW50
SXRlbSA9IFdFQktJVF9XRUJfSElTVE9SWV9JVEVNKGZvcndhcmRMaXN0LT5kYXRhKTsKKyAgICBn
X2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3VyaShjdXJyZW50SXRl
bSksID09LCAiaHR0cDovL2V4YW1wbGUuY29tLzMvIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdl
YmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF90aXRsZShjdXJyZW50SXRlbSksID09LCAiU2l0ZSAz
Iik7CisgICAgZm9yd2FyZExpc3QgPSBmb3J3YXJkTGlzdC0+bmV4dDsKKworICAgIGN1cnJlbnRJ
dGVtID0gV0VCS0lUX1dFQl9ISVNUT1JZX0lURU0oZm9yd2FyZExpc3QtPmRhdGEpOworICAgIGdf
YXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdXJpKGN1cnJlbnRJdGVt
KSwgPT0sICJodHRwOi8vZXhhbXBsZS5jb20vMi8iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Vi
a2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3RpdGxlKGN1cnJlbnRJdGVtKSwgPT0sICJTaXRlIDIi
KTsKKworICAgIGdfbGlzdF9mcmVlKGZvcndhcmRMaXN0KTsKKyAgICBnX29iamVjdF91bnJlZih3
ZWJWaWV3KTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9s
aXN0X2FkZF9pdGVtKHZvaWQpCit7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldzsKKyAgICBX
ZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYkJhY2tGb3J3YXJkTGlzdDsKKyAgICBXZWJLaXRX
ZWJIaXN0b3J5SXRlbSogYWRkSXRlbTE7CisgICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGFkZEl0
ZW0yOworICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBiYWNrSXRlbTsKKyAgICBXZWJLaXRXZWJI
aXN0b3J5SXRlbSogY3VycmVudEl0ZW07CisgICAgZ190ZXN0X2J1ZygiMjI5ODgiKTsKKworICAg
IHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBn
X29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKKworICAgIHdlYmtpdF93ZWJfdmlld19zZXRfbWFp
bnRhaW5zX2JhY2tfZm9yd2FyZF9saXN0KHdlYlZpZXcsIFRSVUUpOworICAgIHdlYkJhY2tGb3J3
YXJkTGlzdCA9IHdlYmtpdF93ZWJfdmlld19nZXRfYmFja19mb3J3YXJkX2xpc3Qod2ViVmlldyk7
CisgICAgZ19hc3NlcnQod2ViQmFja0ZvcndhcmRMaXN0KTsKKworICAgIC8vIENoZWNrIHRoYXQg
dGhlcmUgaXMgbm8gaXRlbS4KKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRf
bGlzdF9nZXRfY3VycmVudF9pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCkpOworICAgIGdfYXNzZXJ0
X2NtcGludCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xlbmd0aCh3
ZWJCYWNrRm9yd2FyZExpc3QpLCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93
ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGVuZ3RoKHdlYkJhY2tGb3J3YXJkTGlzdCks
ID09LCAwKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHdl
YlZpZXcpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrKHdlYlZp
ZXcpKTsKKworICAgIC8vIEFkZCBhIG5ldyBpdGVtCisgICAgYWRkSXRlbTEgPSB3ZWJraXRfd2Vi
X2hpc3RvcnlfaXRlbV9uZXdfd2l0aF9kYXRhKCJodHRwOi8vZXhhbXBsZS5jb20vIiwgIkFkZGVk
IHNpdGUiKTsKKyAgICB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2FkZF9pdGVtKHdlYkJh
Y2tGb3J3YXJkTGlzdCwgYWRkSXRlbTEpOworICAgIGdfb2JqZWN0X3VucmVmKGFkZEl0ZW0xKTsK
KyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2NvbnRhaW5zX2l0ZW0o
d2ViQmFja0ZvcndhcmRMaXN0LCBhZGRJdGVtMSkpOworCisgICAgLy8gQ2hlY2sgdGhhdCB0aGUg
YWRkZWQgaXRlbSBpcyB0aGUgY3VycmVudCBpdGVtLgorICAgIGN1cnJlbnRJdGVtID0gd2Via2l0
X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKHdlYkJhY2tGb3J3YXJkTGlz
dCk7CisgICAgZ19hc3NlcnQoY3VycmVudEl0ZW0pOworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJr
aXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xlbmd0aCh3ZWJCYWNrRm9yd2Fy
ZExpc3QpLCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJfYmFja19mb3J3
YXJkX2xpc3RfZ2V0X2JhY2tfbGVuZ3RoKHdlYkJhY2tGb3J3YXJkTGlzdCksID09LCAwKTsKKyAg
ICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHdlYlZpZXcpKTsKKyAg
ICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrKHdlYlZpZXcpKTsKKyAgICBn
X2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3VyaShjdXJyZW50SXRl
bSksID09LCAiaHR0cDovL2V4YW1wbGUuY29tLyIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJr
aXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdGl0bGUoY3VycmVudEl0ZW0pLCA9PSwgIkFkZGVkIHNp
dGUiKTsKKworICAgIC8vIEFkZCBhbm90aGVyIGl0ZW0uCisgICAgYWRkSXRlbTIgPSB3ZWJraXRf
d2ViX2hpc3RvcnlfaXRlbV9uZXdfd2l0aF9kYXRhKCJodHRwOi8vZXhhbXBsZS5jb20vMi8iLCAi
QWRkZWQgc2l0ZSAyIik7CisgICAgd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9hZGRfaXRl
bSh3ZWJCYWNrRm9yd2FyZExpc3QsIGFkZEl0ZW0yKTsKKyAgICBnX29iamVjdF91bnJlZihhZGRJ
dGVtMik7CisgICAgZ19hc3NlcnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9jb250YWlu
c19pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCwgYWRkSXRlbTIpKTsKKworICAgIC8vIENoZWNrIHRo
YXQgdGhlIGFkZGVkIGl0ZW0gaXMgbmV3IGN1cnJlbnQgaXRlbS4KKyAgICBjdXJyZW50SXRlbSA9
IHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh3ZWJCYWNrRm9y
d2FyZExpc3QpOworICAgIGdfYXNzZXJ0KGN1cnJlbnRJdGVtKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9sZW5ndGgod2ViQmFj
a0ZvcndhcmRMaXN0KSwgPT0sIDApOworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2ViX2Jh
Y2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xlbmd0aCh3ZWJCYWNrRm9yd2FyZExpc3QpLCA9PSwg
MSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh3ZWJWaWV3
KSk7CisgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrKHdlYlZpZXcpKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3VyaShjdXJy
ZW50SXRlbSksID09LCAiaHR0cDovL2V4YW1wbGUuY29tLzIvIik7CisgICAgZ19hc3NlcnRfY21w
c3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF90aXRsZShjdXJyZW50SXRlbSksID09LCAi
QWRkZWQgc2l0ZSAyIik7CisKKyAgICBiYWNrSXRlbSA9IHdlYmtpdF93ZWJfYmFja19mb3J3YXJk
X2xpc3RfZ2V0X2JhY2tfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QpOworICAgIGdfYXNzZXJ0KGJh
Y2tJdGVtKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0
X3VyaShiYWNrSXRlbSksID09LCAiaHR0cDovL2V4YW1wbGUuY29tLyIpOworICAgIGdfYXNzZXJ0
X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdGl0bGUoYmFja0l0ZW0pLCA9PSwg
IkFkZGVkIHNpdGUiKTsKKworICAgIC8vIEdvIHRvIHRoZSBmaXJzdCBhZGRlZCBpdGVtLgorICAg
IGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19nb190b19iYWNrX2ZvcndhcmRfaXRlbSh3ZWJWaWV3
LCBhZGRJdGVtMSkpOworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2ViX2JhY2tfZm9yd2Fy
ZF9saXN0X2dldF9mb3J3YXJkX2xlbmd0aCh3ZWJCYWNrRm9yd2FyZExpc3QpLCA9PSwgMSk7Cisg
ICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tf
bGVuZ3RoKHdlYkJhY2tGb3J3YXJkTGlzdCksID09LCAwKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRf
d2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQod2ViVmlldykpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRf
d2ViX3ZpZXdfY2FuX2dvX2JhY2sod2ViVmlldykpOworCisgICAgZ19vYmplY3RfdW5yZWYod2Vi
Vmlldyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlz
dF9jbGVhcih2b2lkKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXc7CisgICAgV2ViS2l0
V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJCYWNrRm9yd2FyZExpc3Q7CisgICAgV2ViS2l0V2ViSGlz
dG9yeUl0ZW0qIGFkZEl0ZW07CisgICAgZ190ZXN0X2J1ZygiMzYxNzMiKTsKKworICAgIHdlYlZp
ZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBnX29iamVj
dF9yZWZfc2luayh3ZWJWaWV3KTsKKworICAgIHdlYkJhY2tGb3J3YXJkTGlzdCA9IHdlYmtpdF93
ZWJfdmlld19nZXRfYmFja19mb3J3YXJkX2xpc3Qod2ViVmlldyk7CisgICAgZ19hc3NlcnQod2Vi
QmFja0ZvcndhcmRMaXN0KTsKKworICAgIC8vIENoZWNrIHRoYXQgdGhlcmUgaXMgbm8gaXRlbS4K
KyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9y
d2FyZF9sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDApOworICAgIGdfYXNzZXJ0X2Nt
cGludCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xlbmd0aCh3ZWJCYWNr
Rm9yd2FyZExpc3QpLCA9PSwgMCk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfYmFja19mb3J3
YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QpKTsKKyAgICBnX2Fz
c2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHdlYlZpZXcpKTsKKyAgICBnX2Fz
c2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrKHdlYlZpZXcpKTsKKworICAgIC8vIENo
ZWNrIHRoYXQgY2xlYXJpbmcgdGhlIGVtcHR5IGxpc3QgZG9lcyBub3QgbW9kaWZ5IGNvdW50ZXJz
CisgICAgd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9jbGVhcih3ZWJCYWNrRm9yd2FyZExp
c3QpOworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dl
dF9mb3J3YXJkX2xlbmd0aCh3ZWJCYWNrRm9yd2FyZExpc3QpLCA9PSwgMCk7CisgICAgZ19hc3Nl
cnRfY21waW50KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGVuZ3RoKHdl
YkJhY2tGb3J3YXJkTGlzdCksID09LCAwKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl9iYWNr
X2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCkpOworICAg
IGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQod2ViVmlldykpOworICAg
IGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2sod2ViVmlldykpOworCisgICAg
Ly8gQWRkIGEgbmV3IGl0ZW0KKyAgICBhZGRJdGVtID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1f
bmV3X3dpdGhfZGF0YSgiaHR0cDovL2V4YW1wbGUuY29tLyIsICJBZGRlZCBzaXRlIik7CisgICAg
d2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9hZGRfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3Qs
IGFkZEl0ZW0pOworICAgIGdfb2JqZWN0X3VucmVmKGFkZEl0ZW0pOworICAgIGdfYXNzZXJ0KHdl
YmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY29udGFpbnNfaXRlbSh3ZWJCYWNrRm9yd2FyZExp
c3QsIGFkZEl0ZW0pKTsKKworICAgIC8vIENoZWNrIHRoYXQgYWZ0ZXIgY2xlYXJpbmcgdGhlIGxp
c3QgdGhlIGFkZGVkIGl0ZW0gaXMgbm8gbG9uZ2VyIGluIHRoZSBsaXN0CisgICAgd2Via2l0X3dl
Yl9iYWNrX2ZvcndhcmRfbGlzdF9jbGVhcih3ZWJCYWNrRm9yd2FyZExpc3QpOworICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2NvbnRhaW5zX2l0ZW0od2ViQmFja0Zv
cndhcmRMaXN0LCBhZGRJdGVtKSk7CisKKyAgICAvLyBDaGVjayB0aGF0IGFmdGVyIGNsZWFyaW5n
IGl0LCB0aGUgbGlzdCBpcyBlbXB0eQorICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2ViX2Jh
Y2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xlbmd0aCh3ZWJCYWNrRm9yd2FyZExpc3QpLCA9
PSwgMCk7CisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3Rf
Z2V0X2JhY2tfbGVuZ3RoKHdlYkJhY2tGb3J3YXJkTGlzdCksID09LCAwKTsKKyAgICBnX2Fzc2Vy
dCghd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKHdlYkJhY2tG
b3J3YXJkTGlzdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2Zvcndh
cmQod2ViVmlldykpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2so
d2ViVmlldykpOworCisgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Cit9CisKK2ludCBtYWlu
KGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJn
diwgTlVMTCk7CisKKyAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3Jn
LyIpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJiYWNrZm9yd2FyZGxpc3QvYWRk
X2l0ZW0iLCB0ZXN0X3dlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfYWRkX2l0ZW0pOworICAg
IGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJiYWNrZm9yd2FyZGxpc3QvbGlzdF9vcmRlciIs
IHRlc3Rfd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9vcmRlcik7CisgICAgZ190ZXN0X2Fk
ZF9mdW5jKCIvd2Via2l0L3dlYmhpc3RvcnlpdGVtL2xpZmV0aW1lIiwgdGVzdF93ZWJraXRfd2Vi
X2hpc3RvcnlfaXRlbV9saWZldGltZSk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dl
YmJhY2tmb3J3YXJkbGlzdC9jbGVhciIsIHRlc3Rfd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlz
dF9jbGVhcik7CisgICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7Cit9CmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2ViZGF0YXNvdXJjZS5jIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYmRhdGFzb3VyY2UuYwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4wNTY2MjU3NDQ4YmM3N2RmMzVjYjRhYzM0MGFlNmFiYTAzODkyN2I5Ci0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYmRh
dGFzb3VyY2UuYwpAQCAtMCwwICsxLDI0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBK
YW4gTWljaGFlbCBBbG9uem8KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPGdsaWIuaD4K
KyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgorCitzdGF0
aWMgY29uc3QgZ3Nob3J0IGRlZmF1bHRUaW1lb3V0ID0gMTA7CitndWludCB3YWl0VGltZXI7Citn
Ym9vbGVhbiBzaG91bGRXYWl0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgV2ViS2l0V2ViVmll
dyogd2ViVmlldzsKKyAgICBXZWJLaXRXZWJGcmFtZSogbWFpbkZyYW1lOworfSBXZWJEYXRhU291
cmNlRml4dHVyZTsKKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX2RhdGFfc291cmNlX2dl
dF9pbml0aWFsX3JlcXVlc3QoKQoreworICAgIFdlYktpdFdlYlZpZXcqIHZpZXc7CisgICAgV2Vi
S2l0V2ViRnJhbWUqIGZyYW1lOworICAgIFdlYktpdFdlYkRhdGFTb3VyY2UqIGRhdGFTb3VyY2U7
CisgICAgV2ViS2l0TmV0d29ya1JlcXVlc3QqIGluaXRpYWxSZXF1ZXN0OworCisgICAgdmlldyA9
IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3Jl
Zl9zaW5rKHZpZXcpOworICAgIGZyYW1lID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX2ZyYW1l
KHZpZXcpOworCisgICAgV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QgPSB3ZWJraXRfbmV0
d29ya19yZXF1ZXN0X25ldygiaHR0cDovL3d3dy5nb29nbGUuY29tIik7CisgICAgd2Via2l0X3dl
Yl9mcmFtZV9sb2FkX3JlcXVlc3QoZnJhbWUsIHJlcXVlc3QpOworICAgIGdfb2JqZWN0X3VucmVm
KHJlcXVlc3QpOworCisgICAgZGF0YVNvdXJjZSA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3Byb3Zp
c2lvbmFsX2RhdGFfc291cmNlKGZyYW1lKTsKKyAgICBnX2Fzc2VydChkYXRhU291cmNlKTsKKyAg
ICBpbml0aWFsUmVxdWVzdCA9IHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X2luaXRpYWxfcmVx
dWVzdChkYXRhU291cmNlKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X25ldHdvcmtfcmVx
dWVzdF9nZXRfdXJpKGluaXRpYWxSZXF1ZXN0KSwgPT0sICJodHRwOi8vd3d3Lmdvb2dsZS5jb20v
Iik7CisKKyAgICBnX29iamVjdF91bnJlZih2aWV3KTsKK30KKworc3RhdGljIHZvaWQgbm90aWZ5
X2xvYWRfc3RhdHVzX3VucmVhY2hhYmxlX2NiKFdlYktpdFdlYlZpZXcqIHZpZXcsIEdQYXJhbVNw
ZWMqIHBzcGVjLCBHTWFpbkxvb3AqIGxvb3ApCit7CisgICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0
dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzICh2aWV3KTsKKyAgICBXZWJLaXRX
ZWJGcmFtZSogZnJhbWUgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUodmlldyk7CisK
KyAgICBnX2Fzc2VydChzdGF0dXMgIT0gV0VCS0lUX0xPQURfRklOSVNIRUQpOworCisgICAgaWYg
KHN0YXR1cyAhPSBXRUJLSVRfTE9BRF9GQUlMRUQpCisgICAgICAgIHJldHVybjsKKworICAgIFdl
YktpdFdlYkRhdGFTb3VyY2UqIGRhdGFzb3VyY2UgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9kYXRh
X3NvdXJjZShmcmFtZSk7CisKKyAgICBnX2Fzc2VydF9jbXBzdHIoImh0dHA6Ly90aGlzLmhvc3Qu
ZG9lcy5ub3QuZXhpc3QvZG9pcmVhbGx5ZXhpc3QuaHRtbCIsID09LAorICAgICAgICAgICAgICAg
ICAgICB3ZWJraXRfd2ViX2RhdGFfc291cmNlX2dldF91bnJlYWNoYWJsZV91cmkoZGF0YXNvdXJj
ZSkpOworCisgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKK30KKworc3RhdGljIHZvaWQgbm90
aWZ5X2xvYWRfc3RhdHVzX2NiKFdlYktpdFdlYlZpZXcqIHZpZXcsIEdQYXJhbVNwZWMqIHBzcGVj
LCBHTWFpbkxvb3AqIGxvb3ApCit7CisgICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzICh2aWV3KTsKKyAgICBXZWJLaXRXZWJGcmFtZSog
ZnJhbWUgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUodmlldyk7CisgICAgV2ViS2l0
V2ViRGF0YVNvdXJjZSogZGF0YVNvdXJjZSA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X2RhdGFfc291
cmNlKGZyYW1lKTsKKworICAgIGlmIChzdGF0dXMgPT0gV0VCS0lUX0xPQURfQ09NTUlUVEVEKSB7
CisgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfaXNfbG9hZGluZyhkYXRh
U291cmNlKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZWxzZSBpZiAoc3RhdHVzICE9
IFdFQktJVF9MT0FEX0ZJTklTSEVEKQorICAgICAgICByZXR1cm47CisKKyAgICAvKiBUZXN0IGdl
dF9yZXF1ZXN0ICovCisgICAgZ190ZXN0X21lc3NhZ2UoIlRlc3Rpbmcgd2Via2l0X3dlYl9kYXRh
X3NvdXJjZV9nZXRfcmVxdWVzdCIpOworICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0
ID0gd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfcmVxdWVzdChkYXRhU291cmNlKTsKKyAgICBn
X2Fzc2VydF9jbXBzdHIod2Via2l0X25ldHdvcmtfcmVxdWVzdF9nZXRfdXJpKHJlcXVlc3QpLCA9
PSwgImh0dHA6Ly93d3cud2Via2l0Lm9yZy8iKTsKKworICAgIC8qIFRlc3QgZ2V0X21haW5fcmVz
b3VyY2UgKi8KKyAgICBnX3Rlc3RfbWVzc2FnZSgiVGVzdGluZyB3ZWJraXRfd2ViX2RhdGFfc291
cmNlX2dldF9tYWluX3Jlc291cmNlIik7CisgICAgV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNl
ID0gd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfbWFpbl9yZXNvdXJjZShkYXRhU291cmNlKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIoInRleHQvaHRtbCIsID09LCB3ZWJraXRfd2ViX3Jlc291cmNl
X2dldF9taW1lX3R5cGUocmVzb3VyY2UpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoImh0dHA6Ly93
d3cud2Via2l0Lm9yZy8iLCA9PSwgd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJpKHJlc291cmNl
KSk7CisKKyAgICAvKiBUZXN0IGdldF9kYXRhLiBXZSBqdXN0IHRlc3QgaWYgZGF0YSBoYXMgY2Vy
dGFpbiBzaXplIGZvciB0aGUgbWVhbiB0aW1lICovCisgICAgZ190ZXN0X21lc3NhZ2UoIlRlc3Rp
bmcgd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfZGF0YSBoYXMgY2VydGFpbiBzaXplIik7Cisg
ICAgR1N0cmluZyogZGF0YSA9IHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X2RhdGEoZGF0YVNv
dXJjZSk7CisgICAgZ19hc3NlcnQoZGF0YS0+bGVuID4gMTAwKTsKKworICAgIC8qIEZJWE1FOiBB
ZGQgdGVzdCBmb3IgZ2V0X2VuY29kaW5nICovCisKKyAgICBnX21haW5fbG9vcF9xdWl0KGxvb3Ap
OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2FpdF90aW1lcl9maXJlZChHTWFpbkxvb3AqIGxvb3Ap
Cit7CisgICAgd2FpdFRpbWVyID0gMDsKKyAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworCisg
ICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfZGF0YV9z
b3VyY2UoKQoreworICAgIFdlYktpdFdlYlZpZXcqIHZpZXc7CisgICAgR01haW5Mb29wKiBsb29w
OworCisgICAgdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwor
ICAgIGdfb2JqZWN0X3JlZl9zaW5rKHZpZXcpOworICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXco
TlVMTCwgVFJVRSk7CisgICAgZ19zaWduYWxfY29ubmVjdCh2aWV3LCAibm90aWZ5Ojpsb2FkLXN0
YXR1cyIsIEdfQ0FMTEJBQ0sobm90aWZ5X2xvYWRfc3RhdHVzX2NiKSwgbG9vcCk7CisgICAgd2Vi
a2l0X3dlYl92aWV3X2xvYWRfdXJpKHZpZXcsICJodHRwOi8vd3d3LndlYmtpdC5vcmciKTsKKwor
ICAgIHdhaXRUaW1lciA9IGdfdGltZW91dF9hZGRfc2Vjb25kcyhkZWZhdWx0VGltZW91dCwgKEdT
b3VyY2VGdW5jKXdhaXRfdGltZXJfZmlyZWQsIGxvb3ApOworCisgICAgZ19tYWluX2xvb3BfcnVu
KGxvb3ApOworCisgICAgaWYgKHdhaXRUaW1lcikKKyAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKHdh
aXRUaW1lcik7CisKKyAgICB3YWl0VGltZXIgPSAwOworCisgICAgZ19tYWluX2xvb3BfdW5yZWYo
bG9vcCk7CisgICAgZ19vYmplY3RfdW5yZWYodmlldyk7Cit9CisKK3N0YXRpYyB2b2lkIG5vdGlm
eV9sb2FkX3N0YXR1c19saWZldGltZV9jYihXZWJLaXRXZWJWaWV3KiB2aWV3LCBHUGFyYW1TcGVj
KiBwc3BlYywgR01haW5Mb29wKiBsb29wKQoreworICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVz
ID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyAodmlldyk7CisgICAgV2ViS2l0V2Vi
RnJhbWUqIGZyYW1lID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKHZpZXcpOworICAg
IFdlYktpdFdlYkRhdGFTb3VyY2UqIGRhdGFTb3VyY2UgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9k
YXRhX3NvdXJjZShmcmFtZSk7CisKKyAgICBpZiAoc3RhdHVzID09IFdFQktJVF9MT0FEX0NPTU1J
VFRFRCkgeworICAgICAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2RhdGFfc291cmNlX2lzX2xvYWRp
bmcoZGF0YVNvdXJjZSkpOworICAgICAgICByZXR1cm47CisgICAgfSBlbHNlIGlmIChzdGF0dXMg
IT0gV0VCS0lUX0xPQURfRklOSVNIRUQpCisgICAgICAgIHJldHVybjsKKworICAgIGdfbWFpbl9s
b29wX3F1aXQobG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9kYXRhX3Nv
dXJjZV9saWZldGltZSgpCit7CisgICAgV2ViS2l0V2ViVmlldyogdmlldzsKKyAgICBHTWFpbkxv
b3AqIGxvb3A7CisKKyAgICB2aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19u
ZXcoKSk7CisgICAgZ19vYmplY3RfcmVmX3Npbmsodmlldyk7CisgICAgbG9vcCA9IGdfbWFpbl9s
b29wX25ldyhOVUxMLCBUUlVFKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KHZpZXcsICJub3RpZnk6
OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhub3RpZnlfbG9hZF9zdGF0dXNfbGlmZXRpbWVfY2Ip
LCBsb29wKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkodmlldywgImh0dHA6Ly93d3cu
d2Via2l0Lm9yZyIpOworCisgICAgd2FpdFRpbWVyID0gZ190aW1lb3V0X2FkZF9zZWNvbmRzKGRl
ZmF1bHRUaW1lb3V0LCAoR1NvdXJjZUZ1bmMpd2FpdF90aW1lcl9maXJlZCwgbG9vcCk7CisKKyAg
ICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICBXZWJLaXRXZWJEYXRhU291cmNlKiBkYXRh
U291cmNlID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfZGF0YV9zb3VyY2Uod2Via2l0X3dlYl92aWV3
X2dldF9tYWluX2ZyYW1lKHZpZXcpKTsKKyAgICBHTGlzdCogc3ViUmVzb3VyY2VzID0gd2Via2l0
X3dlYl9kYXRhX3NvdXJjZV9nZXRfc3VicmVzb3VyY2VzKGRhdGFTb3VyY2UpOworICAgIGdpbnQg
bnVtYmVyT2ZSZXNvdXJjZXMgPSBnX2xpc3RfbGVuZ3RoKHN1YlJlc291cmNlcyk7CisgICAgZ19s
aXN0X2ZyZWUoc3ViUmVzb3VyY2VzKTsKKworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHZpZXcpLCA9PSwgV0VCS0lUX0xPQURfRklOSVNIRUQpOwor
CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHZpZXcsICJodHRwOi8vZ25vbWUub3JnIik7
CisKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh2
aWV3KSwgPT0sIFdFQktJVF9MT0FEX1BST1ZJU0lPTkFMKTsKKworICAgIHdlYmtpdF93ZWJfdmll
d19zdG9wX2xvYWRpbmcodmlldyk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl92
aWV3X2dldF9sb2FkX3N0YXR1cyh2aWV3KSwgPT0sIFdFQktJVF9MT0FEX0ZBSUxFRCk7CisKKyAg
ICBzdWJSZXNvdXJjZXMgPSB3ZWJraXRfd2ViX2RhdGFfc291cmNlX2dldF9zdWJyZXNvdXJjZXMo
ZGF0YVNvdXJjZSk7CisgICAgZ19hc3NlcnRfY21waW50KG51bWJlck9mUmVzb3VyY2VzLCA9PSwg
Z19saXN0X2xlbmd0aChzdWJSZXNvdXJjZXMpKTsKKyAgICBnX2xpc3RfZnJlZShzdWJSZXNvdXJj
ZXMpOworCisgICAgaWYgKHdhaXRUaW1lcikKKyAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKHdhaXRU
aW1lcik7CisKKyAgICB3YWl0VGltZXIgPSAwOworCisgICAgZ19tYWluX2xvb3BfdW5yZWYobG9v
cCk7CisgICAgZ19vYmplY3RfdW5yZWYodmlldyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Vi
a2l0X3dlYl9kYXRhX3NvdXJjZV91bnJlYWNoYWJsZV91cmkoKQoreworICAgIC8qIEZJWE1FOiB0
aGlzIHRlc3QgZmFpbHMgY3VycmVudGx5LiAqLworICAgIHJldHVybjsKKworICAgIFdlYktpdFdl
YlZpZXcqIHZpZXc7CisgICAgR01haW5Mb29wKiBsb29wOworCisgICAgdmlldyA9IFdFQktJVF9X
RUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKHZp
ZXcpOworICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisgICAgZ19zaWdu
YWxfY29ubmVjdCh2aWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0sobm90aWZ5
X2xvYWRfc3RhdHVzX3VucmVhY2hhYmxlX2NiKSwgbG9vcCk7CisgICAgd2Via2l0X3dlYl92aWV3
X2xvYWRfdXJpKHZpZXcsICJodHRwOi8vdGhpcy5ob3N0LmRvZXMubm90LmV4aXN0L2RvaXJlYWxs
eWV4aXN0Lmh0bWwiKTsKKworICAgIHdhaXRUaW1lciA9IGdfdGltZW91dF9hZGRfc2Vjb25kcyhk
ZWZhdWx0VGltZW91dCwgKEdTb3VyY2VGdW5jKXdhaXRfdGltZXJfZmlyZWQsIGxvb3ApOworCisg
ICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgaWYgKHdhaXRUaW1lcikKKyAgICAgICAg
Z19zb3VyY2VfcmVtb3ZlKHdhaXRUaW1lcik7CisKKyAgICB3YWl0VGltZXIgPSAwOworCisgICAg
Z19tYWluX2xvb3BfdW5yZWYobG9vcCk7CisgICAgZ19vYmplY3RfdW5yZWYodmlldyk7Cit9CisK
K2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBndGtfdGVzdF9pbml0KCZh
cmdjLCAmYXJndiwgTlVMTCk7CisKKyAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53
ZWJraXQub3JnLyIpOworICAgIGdfdGVzdF9idWcoIjI0NzU4Iik7CisgICAgZ190ZXN0X2FkZF9m
dW5jKCIvd2Via2l0L3dlYmRhdGFzb3VyY2UvZ2V0X2luaXRpYWxfcmVxdWVzdCIsCisgICAgICAg
ICAgICAgICAgICAgIHRlc3Rfd2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfaW5pdGlhbF9yZXF1
ZXN0KTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2ViZGF0YXNvdXJjZS9hcGkiLAor
ICAgICAgICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF93ZWJfZGF0YV9zb3VyY2UpOworICAgIGdf
dGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJkYXRhc291cmNlL3VucmVhY2hhYmxlX3VyaSIsCisg
ICAgICAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X3dlYl9kYXRhX3NvdXJjZV91bnJlYWNoYWJs
ZV91cmkpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJkYXRhc291cmNlL2xpZmV0
aW1lIiwKKyAgICAgICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfd2ViX2RhdGFfc291cmNlX2xp
ZmV0aW1lKTsKKworICAgIHJldHVybiBnX3Rlc3RfcnVuICgpOworfQpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYmZyYW1lLmMgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2ViZnJhbWUuYwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4x
MTMxODczZDRkOGVlN2Q2OGIzZTdiMzQxYjk4NDRlZDNjZDI0NTU1Ci0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYmZyYW1lLmMKQEAg
LTAsMCArMSwyMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0
ZXIgRnJleXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAwOSBDb2xsYWJvcmEgTHRkLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNp
bmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KKyNpbmNsdWRlIDxndGsv
Z3RrLmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgorCitzdGF0aWMgaW50IG51bWJlck9m
RnJhbWVzQ3JlYXRlZCA9IDA7CisKK3N0YXRpYyB2b2lkIGNyZWF0ZUZyYW1lU2lnbmFsVGVzdEZy
YW1lQ3JlYXRlZENhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFdlYkZyYW1l
KiBmcmFtZSwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBudW1iZXJPZkZyYW1lc0NyZWF0ZWQrKzsK
K30KKworc3RhdGljIGdib29sZWFuIGNyZWF0ZUZyYW1lU2lnbmFsVGVzdFRpbWVvdXQoZ3BvaW50
ZXIgZGF0YSkKK3sKKyAgICBnX2Fzc2VydF9jbXBpbnQobnVtYmVyT2ZGcmFtZXNDcmVhdGVkLCA9
PSwgMik7CisgICAgZ19tYWluX2xvb3BfcXVpdCgoR01haW5Mb29wKikgZGF0YSk7CisgICAgcmV0
dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfY3JlYXRl
ZF9zaWduYWwodm9pZCkKK3sKKyAgICBHdGtXaWRnZXQqIHdlYlZpZXc7CisgICAgR3RrV2lkZ2V0
KiB3aW5kb3c7CisgICAgR01haW5Mb29wKiBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRS
VUUpOworCisgICAgd2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7
CisKKyAgICB3ZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygpOworICAgIGdfc2lnbmFsX2Nv
bm5lY3Qod2ViVmlldywgImZyYW1lLWNyZWF0ZWQiLCBHX0NBTExCQUNLKGNyZWF0ZUZyYW1lU2ln
bmFsVGVzdEZyYW1lQ3JlYXRlZENhbGxiYWNrKSwgbG9vcCk7CisKKyAgICAvLyBXZSB3YW50IHRv
IGVuc3VyZSB0aGF0IGV4YWN0bHkgdHdvIGNyZWF0ZS1mcmFtZSBzaWduYWxzIGFyZQorICAgIC8v
IGZpcmVkIGFuZCBubyBtb3JlLCBzbyB3ZSBzZXQgYSB0aW1lb3V0IGhlcmUuIFRoZXJlIGRvZXMg
bm90IGFwcGVhcgorICAgIC8vIHRvIGJlIGEgc2ltcGxlIHdheSB2aWEgdGhlIEFQSSB0byBmaWd1
cmUgb3V0IHdoZW4gYWxsIGZyYW1lcyBoYXZlCisgICAgLy8gbG9hZGVkLgorICAgIGdfdGltZW91
dF9hZGQoNTAwLCBjcmVhdGVGcmFtZVNpZ25hbFRlc3RUaW1lb3V0LCBsb29wKTsKKworICAgIGd0
a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgd2ViVmlldyk7CisgICAgZ3Rr
X3dpZGdldF9zaG93KHdpbmRvdyk7CisgICAgZ3RrX3dpZGdldF9zaG93KHdlYlZpZXcpOworCisg
ICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3KSwK
KyAgICAgICAgIjxodG1sPjxib2R5PkZyYW1lcyEiCisgICAgICAgICI8aWZyYW1lPjwvaWZyYW1l
PiIKKyAgICAgICAgIjxpZnJhbWU+PC9pZnJhbWU+IgorICAgICAgICAiPC9ib2R5PjwvaHRtbD4i
LAorICAgICAgICAidGV4dC9odG1sIiwgInV0Zi04IiwgImZpbGU6Ly8iKTsKKyAgICBnX21haW5f
bG9vcF9ydW4obG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9mcmFtZV9j
cmVhdGVfZGVzdHJveSh2b2lkKQoreworICAgIEd0a1dpZGdldCAqd2ViVmlldzsKKyAgICBHdGtX
aWRnZXQgKndpbmRvdzsKKworICAgIGdfdGVzdF9idWcoIjIxODM3Iik7CisgICAgd2ViVmlldyA9
IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKKyAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1Qod2ViVmlldyktPnJlZl9jb3VudCwgPT0sIDEp
OworICAgIC8vIFRoaXMgY3Jhc2hlZCB3aXRoIHRoZSBvcmlnaW5hbCB2ZXJzaW9uCisgICAgZ19v
YmplY3RfdW5yZWYod2ViVmlldyk7CisKKyAgICBnX3Rlc3RfYnVnKCIyNTA0MiIpOworICAgIHdp
bmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOworICAgIHdlYlZpZXcg
PSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRB
SU5FUih3aW5kb3cpLCB3ZWJWaWV3KTsKKyAgICBndGtfd2lkZ2V0X3Nob3cod2luZG93KTsKKyAg
ICBndGtfd2lkZ2V0X3Nob3cod2ViVmlldyk7CisgICAgZ3RrX3dpZGdldF9kZXN0cm95KHdlYlZp
ZXcpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfbGlmZXRpbWUodm9p
ZCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OworICAgIFdlYktpdFdlYkZyYW1lKiB3
ZWJGcmFtZTsKKyAgICBnX3Rlc3RfYnVnKCIyMTgzNyIpOworCisgICAgd2ViVmlldyA9IFdFQktJ
VF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3JlZl9zaW5r
KHdlYlZpZXcpOworICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVCh3ZWJWaWV3KS0+cmVmX2Nv
dW50LCA9PSwgMSk7CisgICAgd2ViRnJhbWUgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJh
bWUod2ViVmlldyk7CisgICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKHdlYkZyYW1lKS0+cmVm
X2NvdW50LCA9PSwgMSk7CisKKyAgICAvLyBBZGQgZHVtbXkgcmVmZXJlbmNlIG9uIHRoZSBXZWJL
aXRXZWJGcmFtZSB0byBrZWVwIGl0IGFsaXZlCisgICAgZ19vYmplY3RfcmVmKHdlYkZyYW1lKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1Qod2ViRnJhbWUpLT5yZWZfY291bnQsID09LCAy
KTsKKworICAgIC8vIFRoaXMgY3Jhc2hlZCB3aXRoIHRoZSBvcmlnaW5hbCB2ZXJzaW9uCisgICAg
Z19vYmplY3RfdW5yZWYod2ViVmlldyk7CisKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgZnJh
bWUgZ290IGRlbGV0ZWQgYXMgd2VsbC4gV2UgZGlkIHRoaXMKKyAgICAvLyBieSBhZGRpbmcgYW4g
ZXh0cmEgcmVmIG9uIHRoZSBXZWJLaXRXZWJGcmFtZSBhbmQgd2Ugc2hvdWxkCisgICAgLy8gYmUg
dGhlIG9uZSBob2xkaW5nIHRoZSBsYXN0IHJlZmVyZW5jZS4KKyAgICBnX2Fzc2VydF9jbXBpbnQo
R19PQkpFQ1Qod2ViRnJhbWUpLT5yZWZfY291bnQsID09LCAxKTsKKyAgICBnX29iamVjdF91bnJl
Zih3ZWJGcmFtZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBwcmludF9yZXF1ZXN0ZWRfY2IoV2Vi
S2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0V2ViRnJhbWUqIHdlYkZyYW1lLCBHTWFpbkxvb3Aq
IGxvb3ApCit7CisgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1Qod2ViVmlldyksICJzaWdu
YWwtaGFuZGxlZCIsIEdJTlRfVE9fUE9JTlRFUihUUlVFKSk7CisgICAgZ19tYWluX2xvb3BfcXVp
dChsb29wKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfdGltZW91
dChHTWFpbkxvb3AqIGxvb3ApCit7CisgICAgaWYgKGdfbWFpbl9sb29wX2lzX3J1bm5pbmcobG9v
cCkpCisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIHRl
c3Rfd2Via2l0X3dlYl9mcmFtZV9wcmludGluZyh2b2lkKQoreworICAgIFdlYktpdFdlYlZpZXcq
IHdlYlZpZXc7CisKKyAgICB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmll
d19uZXcoKSk7CisgICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7CisgICAgZ19hc3NlcnRf
Y21waW50KEdfT0JKRUNUKHdlYlZpZXcpLT5yZWZfY291bnQsID09LCAxKTsKKworICAgIHdlYmtp
dF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiPGh0bWw+PGJvZHk+PGgxPldlYktpdEdUSyshPC9oMT48L2JvZHk+PC9odG1sPiIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXh0L2h0bWwiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAidXRmLTgiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiZmlsZTovLyIpOworCisgICAgR01haW5Mb29wKiBsb29wID0gZ19tYWluX2xvb3Bf
bmV3KE5VTEwsIFRSVUUpOworCisgICAgLy8gRG9lcyBqYXZhc2NyaXB0IHByaW50KCkgd29yayBj
b3JyZWN0bHk/CisgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAicHJpbnQtcmVxdWVzdGVk
IiwKKyAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0socHJpbnRfcmVxdWVzdGVkX2NiKSwK
KyAgICAgICAgICAgICAgICAgICAgIGxvb3ApOworCisgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19P
QkpFQ1Qod2ViVmlldyksICJzaWduYWwtaGFuZGxlZCIsIEdJTlRfVE9fUE9JTlRFUihGQUxTRSkp
OworICAgIHdlYmtpdF93ZWJfdmlld19leGVjdXRlX3NjcmlwdCAod2ViVmlldywgInByaW50KCk7
Iik7CisKKyAgICAvLyBHaXZlIGphdmFzY3JpcHRjb3JlIHNvbWUgdGltZSB0byBwcm9jZXNzIHRo
ZSBwcmludCByZXF1ZXN0LCBidXQKKyAgICAvLyBwcmVwYXJlIGEgdGltZW91dCB0byBhdm9pZCBp
dCBydW5uaW5nIGZvcmV2ZXIgaW4gY2FzZSB0aGUgc2lnbmFsIGlzCisgICAgLy8gbmV2ZXIgZW1p
dHRlZC4KKyAgICBnX3RpbWVvdXRfYWRkKDEwMDAsIChHU291cmNlRnVuYylwcmludF90aW1lb3V0
LCBsb29wKTsKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICBnX2Fzc2VydF9jbXBp
bnQoR1BPSU5URVJfVE9fSU5UKGdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKHdlYlZpZXcpLCAi
c2lnbmFsLWhhbmRsZWQiKSksID09LCBUUlVFKTsKKworICAgIC8vIERvZXMgcHJpbnRpbmcgZGly
ZWN0bHkgdG8gYSBmaWxlPworICAgIEdFcnJvciAqZXJyb3IgPSBOVUxMOworICAgIGdjaGFyKiB0
ZW1wb3JhcnlGaWxlbmFtZSA9IE5VTEw7CisgICAgZ2ludCBmZCA9IGdfZmlsZV9vcGVuX3RtcCAo
IndlYmtpdC10ZXN0d2ViZnJhbWUtWFhYWFhYIiwgJnRlbXBvcmFyeUZpbGVuYW1lLCAmZXJyb3Ip
OworICAgIGNsb3NlKGZkKTsKKworICAgIGlmIChlcnJvcikgeworICAgICAgICBnX2NyaXRpY2Fs
KCJGYWlsZWQgdG8gb3BlbiBhIHRlbXBvcmFyeSBmaWxlIGZvciB3cml0aW5nOiAlcy4iLCBlcnJv
ci0+bWVzc2FnZSk7CisgICAgICAgIGdfZXJyb3JfZnJlZShlcnJvcik7CisgICAgICAgIGdvdG8g
Y2xlYW51cDsKKyAgICB9CisKKyAgICAvLyBXZSBkZWxldGUgdGhlIGZpbGUsIHNvIHRoYXQgd2Ug
Y2FuIGVhc2lseSBmaWd1cmUgb3V0IHRoYXQgdGhlCisgICAgLy8gZmlsZSBnb3QgcHJpbnRlZDsK
KyAgICBpZiAoZ191bmxpbmsodGVtcG9yYXJ5RmlsZW5hbWUpID09IC0xKSB7CisgICAgICAgIGdf
d2FybmluZygiRmFpbGVkIHRvIGRlbGV0ZSB0aGUgdGVtcG9yYXJ5IGZpbGU6ICVzLlxuVGhpcyBt
YXkgY2F1c2UgdGhlIHRlc3QgdG8gYmUgYm9ndXMuIiwgZ19zdHJlcnJvcihlcnJubykpOworICAg
IH0KKworICAgIFdlYktpdFdlYkZyYW1lKiB3ZWJGcmFtZSA9IHdlYmtpdF93ZWJfdmlld19nZXRf
bWFpbl9mcmFtZSh3ZWJWaWV3KTsKKyAgICBHdGtQcmludE9wZXJhdGlvbiogb3BlcmF0aW9uID0g
Z3RrX3ByaW50X29wZXJhdGlvbl9uZXcoKTsKKyAgICBHdGtQcmludE9wZXJhdGlvbkFjdGlvbiBh
Y3Rpb24gPSBHVEtfUFJJTlRfT1BFUkFUSU9OX0FDVElPTl9FWFBPUlQ7CisgICAgR3RrUHJpbnRP
cGVyYXRpb25SZXN1bHQgcmVzdWx0OworCisgICAgZ3RrX3ByaW50X29wZXJhdGlvbl9zZXRfZXhw
b3J0X2ZpbGVuYW1lKG9wZXJhdGlvbiwgdGVtcG9yYXJ5RmlsZW5hbWUpOworICAgIHJlc3VsdCA9
IHdlYmtpdF93ZWJfZnJhbWVfcHJpbnRfZnVsbCAod2ViRnJhbWUsIG9wZXJhdGlvbiwgYWN0aW9u
LCBOVUxMKTsKKworICAgIGdfYXNzZXJ0X2NtcGludChyZXN1bHQsID09LCBHVEtfUFJJTlRfT1BF
UkFUSU9OX1JFU1VMVF9BUFBMWSk7CisgICAgZ19hc3NlcnRfY21waW50KGdfZmlsZV90ZXN0KHRl
bXBvcmFyeUZpbGVuYW1lLCBHX0ZJTEVfVEVTVF9JU19SRUdVTEFSKSwgPT0sIFRSVUUpOworCisg
ICAgZ191bmxpbmsodGVtcG9yYXJ5RmlsZW5hbWUpOworICAgIGdfb2JqZWN0X3VucmVmKG9wZXJh
dGlvbik7CitjbGVhbnVwOgorICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOworICAgIGdfZnJl
ZSh0ZW1wb3JhcnlGaWxlbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9m
cmFtZV9yZXNwb25zZSgpCit7CisgICAgV2ViS2l0V2ViRnJhbWUqIGZyYW1lID0gZ19vYmplY3Rf
bmV3KFdFQktJVF9UWVBFX1dFQl9GUkFNRSwgTlVMTCk7CisgICAgV2ViS2l0TmV0d29ya1Jlc3Bv
bnNlKiByZXNwb25zZSA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X25ldHdvcmtfcmVzcG9uc2UoZnJh
bWUpOworICAgIGdfYXNzZXJ0KCFyZXNwb25zZSk7CisgICAgZ19vYmplY3RfdW5yZWYoZnJhbWUp
OworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgZ3RrX3Rlc3Rf
aW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vidmll
dy9jcmVhdGVfZGVzdHJveSIsIHRlc3Rfd2Via2l0X3dlYl9mcmFtZV9jcmVhdGVfZGVzdHJveSk7
CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnZpZXcvZnJhbWUtY3JlYXRlZF9zaWdu
YWwiLCB0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfY3JlYXRlZF9zaWduYWwpOworICAgIGdfdGVzdF9h
ZGRfZnVuYygiL3dlYmtpdC93ZWJmcmFtZS9saWZldGltZSIsIHRlc3Rfd2Via2l0X3dlYl9mcmFt
ZV9saWZldGltZSk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnZpZXcvcHJpbnRp
bmciLCB0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfcHJpbnRpbmcpOworICAgIGdfdGVzdF9hZGRfZnVu
YygiL3dlYmtpdC93ZWJ2aWV3L3Jlc3BvbnNlIiwgdGVzdF93ZWJraXRfd2ViX2ZyYW1lX3Jlc3Bv
bnNlKTsKKyAgICByZXR1cm4gZ190ZXN0X3J1biAoKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJoaXN0b3J5aXRlbS5jIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYmhpc3RvcnlpdGVtLmMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uODJlMTkxYzIwOGM3NTM5ODBkZWI1YmI5ZTYwNzVjZmI2NGMxYWI5ZAotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJoaXN0
b3J5aXRlbS5jCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFu
IE1pY2hhZWwgQWxvbnpvCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxnbGliLmg+Cisj
aW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKwordHlwZWRl
ZiBzdHJ1Y3QgeworICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBpdGVtOworfSBXZWJIaXN0b3J5
SXRlbUZpeHR1cmU7CisKK3N0YXRpYyB2b2lkIHdlYl9oaXN0b3J5X2l0ZW1fZml4dHVyZV9zZXR1
cChXZWJIaXN0b3J5SXRlbUZpeHR1cmUqIGZpeHR1cmUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGZpeHR1cmUt
Pml0ZW0gPSB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9uZXdfd2l0aF9kYXRhKCJodHRwOi8vZXhh
bXBsZS5jb20vIiwgIkV4YW1wbGUxIik7CisgICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKGZp
eHR1cmUtPml0ZW0pLT5yZWZfY291bnQsID09ICwgMSk7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+
aXRlbSAhPSBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgd2ViX2hpc3RvcnlfaXRlbV9maXh0dXJl
X3RlYXJkb3duKFdlYkhpc3RvcnlJdGVtRml4dHVyZSogZml4dHVyZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY29uc3Rwb2ludGVyIGRhdGEpCit7Cisg
ICAgZ19hc3NlcnQoZml4dHVyZS0+aXRlbSAhPSBOVUxMKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
R19PQkpFQ1QoZml4dHVyZS0+aXRlbSktPnJlZl9jb3VudCwgPT0sIDEpOworfQorCitzdGF0aWMg
dm9pZCB0ZXN0X3dlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF9kYXRhKFdlYkhpc3RvcnlJdGVt
Rml4dHVyZSogZml4dHVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGdfYXNzZXJ0X2NtcHN0cih3
ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdGl0bGUoZml4dHVyZS0+aXRlbSksID09LCAiRXhh
bXBsZTEiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0
X3VyaShmaXh0dXJlLT5pdGVtKSwgPT0sICJodHRwOi8vZXhhbXBsZS5jb20vIik7Cit9CisKK3N0
YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fYWx0ZXJuYXRlX3RpdGxlKFdl
Ykhpc3RvcnlJdGVtRml4dHVyZSogZml4dHVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAg
ICB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9zZXRfYWx0ZXJuYXRlX3RpdGxlKGZpeHR1cmUtPml0
ZW0sICJBbHRlcm5hdGUgdGl0bGUiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9o
aXN0b3J5X2l0ZW1fZ2V0X2FsdGVybmF0ZV90aXRsZShmaXh0dXJlLT5pdGVtKSwgPT0sICJBbHRl
cm5hdGUgdGl0bGUiKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQorewor
ICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKKworICAgIGdfdGVzdF9idWdf
YmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7CisgICAgZ190ZXN0X2FkZCgiL3dlYmtp
dC93ZWJoaXN0b3J5aXRlbS9nZXRfZGF0YSIsCisgICAgICAgICAgICAgICBXZWJIaXN0b3J5SXRl
bUZpeHR1cmUsIDAsIHdlYl9oaXN0b3J5X2l0ZW1fZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAg
ICAgIHRlc3Rfd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X2RhdGEsIHdlYl9oaXN0b3J5X2l0
ZW1fZml4dHVyZV90ZWFyZG93bik7CisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC93ZWJoaXN0b3J5
aXRlbS9hbHRlcm5hdGVfdGl0bGUiLAorICAgICAgICAgICAgICAgV2ViSGlzdG9yeUl0ZW1GaXh0
dXJlLCAwLCB3ZWJfaGlzdG9yeV9pdGVtX2ZpeHR1cmVfc2V0dXAsCisgICAgICAgICAgICAgICB0
ZXN0X3dlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2FsdGVybmF0ZV90aXRsZSwgd2ViX2hpc3Rvcnlf
aXRlbV9maXh0dXJlX3RlYXJkb3duKTsKKyAgICByZXR1cm4gZ190ZXN0X3J1biAoKTsKK30KZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJpbnNw
ZWN0b3IuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJpbnNw
ZWN0b3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5hNzQzODJmZjNmNDNjYmUzZGIyZGZmMTg1MmJmNDgwNDUyOWFl
MzRlCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRH
dGsvdGVzdHdlYmluc3BlY3Rvci5jCkBAIC0wLDAgKzEsMTczIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSA8Z25zQGdub21lLm9yZz4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgInRlc3RfdXRpbHMuaCIKKworI2luY2x1ZGUgPHN0cmluZy5o
PgorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d2Vi
a2l0L3dlYmtpdC5oPgorCitHTWFpbkxvb3AgKmxvb3A7CitHdGtXaWRnZXQgKndpbmRvdzsKKwor
c3RhdGljIGdib29sZWFuIHF1aXRMb29wKGdwb2ludGVyIGRhdGEpCit7CisgICAgZ19tYWluX2xv
b3BfcXVpdChsb29wKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworLyogSWdub3JlIHNpbXBsZSB0
cmFuc2xhdGlvbi1yZWxhdGVkIG1lc3NhZ2VzIGFuZCB1cGdyYWRlIG90aGVyCisgKiBtZXNzYWdl
cyB0byB3YXJuaW5ncy4KKyAqLworc3RhdGljIGdib29sZWFuIGNvbnNvbGVNZXNzYWdlQ2FsbGJh
Y2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgY29uc3QgY2hhciogbWVzc2FnZSwgdW5zaWduZWQg
aW50IGxpbmUsIGNvbnN0IGNoYXIqIHNvdXJjZUlkKQoreworICAgIGlmIChzdHJzdHIobWVzc2Fn
ZSwgIkxvY2FsaXplZCBzdHJpbmciKSB8fCBzdHJzdHIobWVzc2FnZSwgIlByb3RvY29sIEVycm9y
OiB0aGUgbWVzc2FnZSBpcyBmb3Igbm9uLWV4aXN0aW5nIGRvbWFpbiAnUHJvZmlsZXInIikgfHwK
KyAgICAgICAgc3Ryc3RyKG1lc3NhZ2UsICJEaWRuJ3QgZmluZCBhIFRyZWVFbGVtZW50IGZvciBh
IHJlcHJlc2VudGVkT2JqZWN0IikpCisgICAgICAgIHJldHVybiBUUlVFOworCisgICAgZ193YXJu
aW5nKCJDb25zb2xlOiAlcyBAJWQ6ICVzXG4iLCBzb3VyY2VJZCwgbGluZSwgbWVzc2FnZSk7Cisg
ICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBXZWJLaXRXZWJWaWV3KiBpbnNwZWN0RWxlbWVu
dENhbGxiYWNrKFdlYktpdFdlYkluc3BlY3RvciAqaW5zcGVjdG9yLCBXZWJLaXRXZWJWaWV3ICpp
bnNwZWN0ZWRXZWJWaWV3LCBpbnQgKnRpbWVzRWxlbWVudEluc3BlY3RlZCkKK3sKKyAgICAqdGlt
ZXNFbGVtZW50SW5zcGVjdGVkID0gKnRpbWVzRWxlbWVudEluc3BlY3RlZCArIDE7CisKKyAgICB3
aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKKworICAgIEd0a1dp
ZGdldCAqbmV3V2ViVmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKKyAgICBndGtfY29udGFp
bmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIG5ld1dlYlZpZXcpOworCisgICAgZ19zaWdu
YWxfY29ubmVjdChuZXdXZWJWaWV3LCAiY29uc29sZS1tZXNzYWdlIiwKKyAgICAgICAgICAgICAg
ICAgICAgIEdfQ0FMTEJBQ0soY29uc29sZU1lc3NhZ2VDYWxsYmFjayksIE5VTEwpOworCisgICAg
cmV0dXJuIFdFQktJVF9XRUJfVklFVyhuZXdXZWJWaWV3KTsKK30KKworc3RhdGljIGdib29sZWFu
IGNsb3NlSW5zcGVjdG9yKFdlYktpdFdlYkluc3BlY3RvciAqaW5zcGVjdG9yLCBpbnQgKnRpbWVz
Q2xvc2VkKQoreworICAgICp0aW1lc0Nsb3NlZCA9ICp0aW1lc0Nsb3NlZCArIDE7CisKKyAgICBn
dGtfd2lkZ2V0X2Rlc3Ryb3kod2luZG93KTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGlj
IGdib29sZWFuIHNob3dJbnNwZWN0b3IoV2ViS2l0V2ViSW5zcGVjdG9yICppbnNwZWN0b3IsIGdw
b2ludGVyIGRhdGEpCit7CisgICAgZ19pZGxlX2FkZChxdWl0TG9vcCwgTlVMTCk7CisgICAgcmV0
dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRGaW5pc2hlZChXZWJLaXRXZWJWaWV3ICp3
ZWJWaWV3LCBXZWJLaXRXZWJGcmFtZSAqZnJhbWUsIGdib29sZWFuICppc0xvYWRGaW5pc2hlZCkK
K3sKKyAgICAqaXNMb2FkRmluaXNoZWQgPSBUUlVFOworICAgIGlmIChnX21haW5fbG9vcF9pc19y
dW5uaW5nKGxvb3ApKQorICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworfQorCitzdGF0
aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfaW5zcGVjdG9yX2Nsb3NlX2FuZF9pbnNwZWN0KCkKK3sK
KyAgICBXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJf
dmlld19uZXcoKSk7CisgICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKKwor
ICAgIGdib29sZWFuIGlzTG9hZEZpbmlzaGVkID0gRkFMU0U7CisgICAgZ19zaWduYWxfY29ubmVj
dCh3ZWJWaWV3LCAibG9hZC1maW5pc2hlZCIsIEdfQ0FMTEJBQ0sobG9hZEZpbmlzaGVkKSwgJmlz
TG9hZEZpbmlzaGVkKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxodG1sPjxib2R5PjxwPndvb2hvbzwv
cD48L2JvZHk+PC9odG1sPiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXh0
L2h0bWwiLCAiVVRGLTgiLCAiZmlsZTovLyIpOworICAgIGlmICghaXNMb2FkRmluaXNoZWQpCisg
ICAgICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIGdfb2JqZWN0X3NldCh3ZWJraXRf
d2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdlYlZpZXcpLCAiZW5hYmxlLWRldmVsb3Blci1leHRyYXMi
LCBUUlVFLCBOVUxMKTsKKyAgICBXZWJLaXRXZWJJbnNwZWN0b3IgKmluc3BlY3RvciA9IHdlYmtp
dF93ZWJfdmlld19nZXRfaW5zcGVjdG9yKHdlYlZpZXcpOworCisgICAgaW50IHRpbWVzRWxlbWVu
dEluc3BlY3RlZCA9IDA7CisgICAgaW50IHRpbWVzQ2xvc2VkID0gMDsKKyAgICBnX29iamVjdF9j
b25uZWN0KGluc3BlY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6Omluc3BlY3Qt
d2ViLXZpZXciLCBHX0NBTExCQUNLKGluc3BlY3RFbGVtZW50Q2FsbGJhY2spLCAmdGltZXNFbGVt
ZW50SW5zcGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgInNpZ25hbDo6c2hvdy13aW5kb3ci
LCBHX0NBTExCQUNLKHNob3dJbnNwZWN0b3IpLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAg
InNpZ25hbDo6Y2xvc2Utd2luZG93IiwgR19DQUxMQkFDSyhjbG9zZUluc3BlY3RvciksICZ0aW1l
c0Nsb3NlZCwKKyAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgd2Via2l0X3dlYl9p
bnNwZWN0b3JfaW5zcGVjdF9jb29yZGluYXRlcyhpbnNwZWN0b3IsIDAuMCwgMC4wKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQodGltZXNFbGVtZW50SW5zcGVjdGVkLCA9PSwgMSk7CisKKyAgICBnX21h
aW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICB3ZWJraXRfd2ViX2luc3BlY3Rvcl9jbG9zZShpbnNw
ZWN0b3IpOworICAgIGdfYXNzZXJ0X2NtcGludCh0aW1lc0Nsb3NlZCwgPT0sIDEpOworCisgICAg
d2Via2l0X3dlYl9pbnNwZWN0b3JfaW5zcGVjdF9jb29yZGluYXRlcyhpbnNwZWN0b3IsIDAuMCwg
MC4wKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGltZXNFbGVtZW50SW5zcGVjdGVkLCA9PSwgMik7
CisKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICBndGtfd2lkZ2V0X2Rlc3Ryb3ko
R1RLX1dJREdFVCh3ZWJWaWV3KSk7CisgICAgZ19hc3NlcnRfY21waW50KHRpbWVzQ2xvc2VkLCA9
PSwgMik7CisKKyAgICBnX21haW5fbG9vcF91bnJlZihsb29wKTsKK30KKworc3RhdGljIHZvaWQg
dGVzdF93ZWJraXRfd2ViX2luc3BlY3Rvcl9kZXN0cm95X2luc3BlY3RlZF93ZWJfdmlldygpCit7
CisgICAgV2ViS2l0V2ViVmlldyAqd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2Vi
X3ZpZXdfbmV3KCkpOworICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisK
KyAgICBnYm9vbGVhbiBpc0xvYWRGaW5pc2hlZCA9IEZBTFNFOworICAgIGdfc2lnbmFsX2Nvbm5l
Y3Qod2ViVmlldywgImxvYWQtZmluaXNoZWQiLCBHX0NBTExCQUNLKGxvYWRGaW5pc2hlZCksICZp
c0xvYWRGaW5pc2hlZCk7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8aHRtbD48Ym9keT48cD53b29ob288
L3A+PC9ib2R5PjwvaHRtbD4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGV4
dC9odG1sIiwgIlVURi04IiwgImZpbGU6Ly8iKTsKKyAgICBpZiAoIWlzTG9hZEZpbmlzaGVkKQor
ICAgICAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICBnX29iamVjdF9zZXQod2Via2l0
X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3KSwgImVuYWJsZS1kZXZlbG9wZXItZXh0cmFz
IiwgVFJVRSwgTlVMTCk7CisgICAgV2ViS2l0V2ViSW5zcGVjdG9yICppbnNwZWN0b3IgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X2luc3BlY3Rvcih3ZWJWaWV3KTsKKworICAgIGludCB0aW1lc0VsZW1l
bnRJbnNwZWN0ZWQgPSAwOworICAgIGludCB0aW1lc0Nsb3NlZCA9IDA7CisgICAgZ19vYmplY3Rf
Y29ubmVjdChpbnNwZWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjppbnNwZWN0
LXdlYi12aWV3IiwgR19DQUxMQkFDSyhpbnNwZWN0RWxlbWVudENhbGxiYWNrKSwgJnRpbWVzRWxl
bWVudEluc3BlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6OnNob3ctd2luZG93
IiwgR19DQUxMQkFDSyhzaG93SW5zcGVjdG9yKSwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAg
ICJzaWduYWw6OmNsb3NlLXdpbmRvdyIsIEdfQ0FMTEJBQ0soY2xvc2VJbnNwZWN0b3IpLCAmdGlt
ZXNDbG9zZWQsCisgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKworICAgIHdlYmtpdF93ZWJf
aW5zcGVjdG9yX2luc3BlY3RfY29vcmRpbmF0ZXMoaW5zcGVjdG9yLCAwLjAsIDAuMCk7CisgICAg
Z19hc3NlcnRfY21waW50KHRpbWVzRWxlbWVudEluc3BlY3RlZCwgPT0sIDEpOworCisgICAgZ19t
YWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgZ3RrX3dpZGdldF9kZXN0cm95KEdUS19XSURHRVQo
d2ViVmlldykpOworICAgIGdfYXNzZXJ0X2NtcGludCh0aW1lc0Nsb3NlZCwgPT0sIDEpOworCisg
ICAgZ19tYWluX2xvb3BfdW5yZWYobG9vcCk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFy
KiogYXJndikKK3sKKyAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7CisKKyAg
ICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOworICAgIGdfdGVz
dF9hZGRfZnVuYygiL3dlYmtpdC93ZWJpbnNwZWN0b3IvZGVzdHJveS1pbnNwZWN0ZWQtd2ViLXZp
ZXciLCB0ZXN0X3dlYmtpdF93ZWJfaW5zcGVjdG9yX2Rlc3Ryb3lfaW5zcGVjdGVkX3dlYl92aWV3
KTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2ViaW5zcGVjdG9yL2Nsb3NlLWFuZC1p
bnNwZWN0IiwgdGVzdF93ZWJraXRfd2ViX2luc3BlY3Rvcl9jbG9zZV9hbmRfaW5zcGVjdCk7CisK
KyAgICByZXR1cm4gZ190ZXN0X3J1bigpOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYnBsdWdpbmRhdGFiYXNlLmMgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2VicGx1Z2luZGF0YWJhc2UuYwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi42NTI4MTFiMTM5MDU4NzRjOTg3N2E0YTlhMDg5ZDU0ZDVlZWZiNTQ4Ci0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYnBsdWdp
bmRhdGFiYXNlLmMKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBJ
Z2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNs
dWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KKyNpbmNsdWRlIDxndGsvZ3Rr
Lmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgorCisvKiBUaGlzIGZ1bmN0aW9uIGlzIG5v
dCBwdWJsaWMsIHNvIHdlIG5lZWQgYW4gZXh0ZXJuIGRlY2xhcmF0aW9uICovCitleHRlcm4gdm9p
ZCB3ZWJraXRfd2ViX3NldHRpbmdzX2FkZF9leHRyYV9wbHVnaW5fZGlyZWN0b3J5KFdlYktpdFdl
YlZpZXcqIHZpZXcsIGNvbnN0IGdjaGFyKiBkaXJlY3RvcnkpOworCitzdGF0aWMgdm9pZCB0ZXN0
X3dlYmtpdF93ZWJfcGx1Z2luX2RhdGFiYXNlX2dldF9wbHVnaW5zKCkKK3sKKyAgICBXZWJLaXRX
ZWJWaWV3KiB2aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Cisg
ICAgV2ViS2l0V2ViUGx1Z2luRGF0YWJhc2UqIGRhdGFiYXNlOworICAgIEdTTGlzdCogcGx1Z2lu
TGlzdCwgKnA7CisgICAgZ2Jvb2xlYW4gZm91bmQgPSBGQUxTRTsKKyAgICBnYm9vbGVhbiBlbmFi
bGVkID0gRkFMU0U7CisKKyAgICB3ZWJraXRfd2ViX3NldHRpbmdzX2FkZF9leHRyYV9wbHVnaW5f
ZGlyZWN0b3J5KHZpZXcsIFRFU1RfUExVR0lOX0RJUik7CisgICAgZ19vYmplY3RfcmVmX3Npbmso
R19PQkpFQ1QodmlldykpOworCisgICAgZGF0YWJhc2UgPSB3ZWJraXRfZ2V0X3dlYl9wbHVnaW5f
ZGF0YWJhc2UoKTsKKyAgICBwbHVnaW5MaXN0ID0gd2Via2l0X3dlYl9wbHVnaW5fZGF0YWJhc2Vf
Z2V0X3BsdWdpbnMoZGF0YWJhc2UpOworICAgIGZvciAocCA9IHBsdWdpbkxpc3Q7IHA7IHAgPSBw
LT5uZXh0KSB7CisgICAgICAgIFdlYktpdFdlYlBsdWdpbiogcGx1Z2luID0gKFdlYktpdFdlYlBs
dWdpbiopcC0+ZGF0YTsKKyAgICAgICAgaWYgKCFnX3N0cmNtcDAod2Via2l0X3dlYl9wbHVnaW5f
Z2V0X25hbWUocGx1Z2luKSwgIldlYktpdCBUZXN0IFBsdWdJbiIpICYmCisgICAgICAgICAgICAh
Z19zdHJjbXAwKHdlYmtpdF93ZWJfcGx1Z2luX2dldF9kZXNjcmlwdGlvbihwbHVnaW4pLCAiU2lt
cGxlIE5ldHNjYXBlwq4gcGx1Zy1pbiB0aGF0IGhhbmRsZXMgdGVzdCBjb250ZW50IGZvciBXZWJL
aXQiKSkgeworICAgICAgICAgICAgZm91bmQgPSBUUlVFOworICAgICAgICAgICAgZW5hYmxlZCA9
IHdlYmtpdF93ZWJfcGx1Z2luX2dldF9lbmFibGVkKHBsdWdpbik7CisgICAgICAgICAgICB3ZWJr
aXRfd2ViX3BsdWdpbl9zZXRfZW5hYmxlZChwbHVnaW4sIEZBTFNFKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICB3ZWJraXRfd2ViX3BsdWdpbl9kYXRhYmFzZV9wbHVnaW5zX2xpc3RfZnJlZShwbHVn
aW5MaXN0KTsKKyAgICBnX2Fzc2VydChmb3VuZCk7CisgICAgZ19hc3NlcnQoZW5hYmxlZCk7CisK
KyAgICB3ZWJraXRfd2ViX3BsdWdpbl9kYXRhYmFzZV9yZWZyZXNoKGRhdGFiYXNlKTsKKyAgICBw
bHVnaW5MaXN0ID0gd2Via2l0X3dlYl9wbHVnaW5fZGF0YWJhc2VfZ2V0X3BsdWdpbnMoZGF0YWJh
c2UpOworCisgICAgZm9yIChwID0gcGx1Z2luTGlzdDsgcDsgcCA9IHAtPm5leHQpIHsKKyAgICAg
ICAgV2ViS2l0V2ViUGx1Z2luKiBwbHVnaW4gPSAoV2ViS2l0V2ViUGx1Z2luKilwLT5kYXRhOwor
ICAgICAgICBpZiAoIWdfc3RyY21wMCh3ZWJraXRfd2ViX3BsdWdpbl9nZXRfbmFtZShwbHVnaW4p
LCAiV2ViS2l0IFRlc3QgUGx1Z0luIikgJiYKKyAgICAgICAgICAgICFnX3N0cmNtcDAod2Via2l0
X3dlYl9wbHVnaW5fZ2V0X2Rlc2NyaXB0aW9uKHBsdWdpbiksICJTaW1wbGUgTmV0c2NhcGXCriBw
bHVnLWluIHRoYXQgaGFuZGxlcyB0ZXN0IGNvbnRlbnQgZm9yIFdlYktpdCIpKQorICAgICAgICAg
ICAgZW5hYmxlZCA9IHdlYmtpdF93ZWJfcGx1Z2luX2dldF9lbmFibGVkKHBsdWdpbik7CisgICAg
fQorICAgIHdlYmtpdF93ZWJfcGx1Z2luX2RhdGFiYXNlX3BsdWdpbnNfbGlzdF9mcmVlKHBsdWdp
bkxpc3QpOworICAgIGdfYXNzZXJ0KCFlbmFibGVkKTsKKworICAgIGdfb2JqZWN0X3VucmVmKHZp
ZXcpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgZ3RrX3Rl
c3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAgZ190ZXN0X2J1Z19iYXNlKCJodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vi
cGx1Z2luZGF0YWJhc2UvZ2V0cGx1Z2lucyIsIHRlc3Rfd2Via2l0X3dlYl9wbHVnaW5fZGF0YWJh
c2VfZ2V0X3BsdWdpbnMpOworICAgIHJldHVybiBnX3Rlc3RfcnVuICgpOworfQpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYnJlc291cmNlLmMg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2VicmVzb3VyY2UuYwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5mYzU4YjdhZDcyYTE2ODdmODVhYzEyYWRkYzU2NmE4OTE5ZDYzNDFiCi0tLSAv
ZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdl
YnJlc291cmNlLmMKQEAgLTAsMCArMSwzMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
SmFuIE1pY2hhZWwgQWxvbnpvCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxnbGliLmg+
CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgorI2luY2x1
ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKworI2RlZmluZSBJTkRF
WF9IVE1MICI8aHRtbD48L2h0bWw+IgorI2RlZmluZSBNQUlOX0hUTUwgIjxodG1sPjxoZWFkPjxz
Y3JpcHQgbGFuZ3VhZ2U9XCJqYXZhc2NyaXB0XCIgc3JjPVwiL2phdmFzY3JpcHQuanNcIj48L3Nj
cmlwdD48L2hlYWQ+PGJvZHk+PGgxPmhhaDwvaDE+PC9odG1sPiIKKyNkZWZpbmUgSkFWQVNDUklQ
VCAiZnVuY3Rpb24gYmxhaCAoKSB7IHZhciBhID0gMTsgfSIKKworR01haW5Mb29wKiBsb29wOwor
U291cFNlc3Npb24gKnNlc3Npb247CitjaGFyICpiYXNlX3VyaTsKK1dlYktpdFdlYlJlc291cmNl
KiBtYWluX3Jlc291cmNlOworV2ViS2l0V2ViUmVzb3VyY2UqIHN1Yl9yZXNvdXJjZTsKKwordHlw
ZWRlZiBzdHJ1Y3QgeworICAgIFdlYktpdFdlYlJlc291cmNlKiB3ZWJSZXNvdXJjZTsKKyAgICBX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OworfSBXZWJSZXNvdXJjZUZpeHR1cmU7CisKKy8qIEZvciBy
ZWFsIHJlcXVlc3QgdGVzdGluZyAqLworc3RhdGljIHZvaWQKK3NlcnZlcl9jYWxsYmFjayAoU291
cFNlcnZlciAqc2VydmVyLCBTb3VwTWVzc2FnZSAqbXNnLAorICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyICpwYXRoLCBHSGFzaFRhYmxlICpxdWVyeSwKKyAgICAgICAgICAgICAgICAgU291cENs
aWVudENvbnRleHQgKmNvbnRleHQsIGdwb2ludGVyIGRhdGEpCit7CisgICAgaWYgKG1zZy0+bWV0
aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgeworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1
cyAobXNnLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMgKG1zZywgU09VUF9TVEFUVVNfT0sp
OworCisgICAgLyogUmVkaXJlY3QgKi8KKyAgICBpZiAoZ19zdHJfZXF1YWwgKHBhdGgsICIvIikp
IHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMgKG1zZywgU09VUF9TVEFUVVNfTU9W
RURfUEVSTUFORU5UTFkpOworCisgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZCAo
bXNnLT5yZXNwb25zZV9oZWFkZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJMb2NhdGlvbiIsICIvaW5kZXguaHRtbCIpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1
YWwgKHBhdGgsICIvaW5kZXguaHRtbCIpKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2Fw
cGVuZCAobXNnLT5yZXNwb25zZV9ib2R5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFNPVVBfTUVNT1JZX0NPUFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SU5ERVhfSFRNTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4gKElO
REVYX0hUTUwpKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsIChwYXRoLCAiL21haW4uaHRt
bCIpKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZCAobXNnLT5yZXNwb25zZV9i
b2R5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPVVBfTUVNT1JZX0NPUFks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFJTl9IVE1MLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiAoTUFJTl9IVE1MKSk7CisgICAgfSBlbHNl
IGlmIChnX3N0cl9lcXVhbCAocGF0aCwgIi9qYXZhc2NyaXB0LmpzIikpIHsKKyAgICAgICAgc291
cF9tZXNzYWdlX2JvZHlfYXBwZW5kIChtc2ctPnJlc3BvbnNlX2JvZHksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU09VUF9NRU1PUllfQ09QWSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBKQVZBU0NSSVBULAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0cmxlbiAoSkFWQVNDUklQVCkpOworICAgIH0KKworCisgICAgc291cF9tZXNzYWdl
X2JvZHlfY29tcGxldGUgKG1zZy0+cmVzcG9uc2VfYm9keSk7Cit9CisKK3N0YXRpYyB2b2lkIHdl
Yl9yZXNvdXJjZV9maXh0dXJlX3NldHVwKFdlYlJlc291cmNlRml4dHVyZSogZml4dHVyZSwgZ2Nv
bnN0cG9pbnRlciBkYXRhKQoreworICAgIGZpeHR1cmUtPndlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJ
RVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBnX29iamVjdF9yZWZfc2luayhmaXh0dXJl
LT53ZWJWaWV3KTsKKyAgICBjb25zdCBnY2hhciogd2ViRGF0YSA9ICI8aHRtbD48L2h0bWw+IjsK
KyAgICBmaXh0dXJlLT53ZWJSZXNvdXJjZSA9IHdlYmtpdF93ZWJfcmVzb3VyY2VfbmV3KHdlYkRh
dGEsIHN0cmxlbih3ZWJEYXRhKSwgImh0dHA6Ly9leGFtcGxlLmNvbS8iLCAidGV4dC9odG1sIiwg
InV0ZjgiLCAiRXhhbXBsZS5jb20iKTsKKyAgICBnX2Fzc2VydChmaXh0dXJlLT53ZWJSZXNvdXJj
ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYl9yZXNvdXJjZV9maXh0dXJlX3RlYXJkb3duKFdlYlJl
c291cmNlRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGdfYXNz
ZXJ0KGZpeHR1cmUtPndlYlJlc291cmNlKTsKKyAgICBnX29iamVjdF91bnJlZihmaXh0dXJlLT53
ZWJSZXNvdXJjZSk7CisgICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+d2ViVmlldyk7Cit9CisK
K3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJsKFdlYlJlc291cmNl
Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGdjaGFyKiB1cmw7
CisgICAgZ19vYmplY3RfZ2V0KEdfT0JKRUNUKGZpeHR1cmUtPndlYlJlc291cmNlKSwgInVyaSIs
ICZ1cmwsIE5VTEwpOworICAgIGdfYXNzZXJ0X2NtcHN0cih1cmwsID09LCAiaHR0cDovL2V4YW1w
bGUuY29tLyIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3Jlc291cmNlX2dldF91
cmkoZml4dHVyZS0+d2ViUmVzb3VyY2UpICw9PSwiaHR0cDovL2V4YW1wbGUuY29tLyIpOworICAg
IGdfZnJlZSh1cmwpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfcmVzb3VyY2Vf
Z2V0X2RhdGEoV2ViUmVzb3VyY2VGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEp
Cit7CisgICAgR1N0cmluZyogY2hhckRhdGEgPSB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF9kYXRh
KGZpeHR1cmUtPndlYlJlc291cmNlKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoY2hhckRhdGEtPnN0
ciwgPT0sICI8aHRtbD48L2h0bWw+Iik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dl
Yl9yZXNvdXJjZV9nZXRfbWltZV90eXBlKFdlYlJlc291cmNlRml4dHVyZSogZml4dHVyZSwgZ2Nv
bnN0cG9pbnRlciBkYXRhKQoreworICAgIGdjaGFyKiBtaW1lX3R5cGU7CisgICAgZ19vYmplY3Rf
Z2V0KEdfT0JKRUNUKGZpeHR1cmUtPndlYlJlc291cmNlKSwgIm1pbWUtdHlwZSIsICZtaW1lX3R5
cGUsIE5VTEwpOworICAgIGdfYXNzZXJ0X2NtcHN0cihtaW1lX3R5cGUsID09LCAidGV4dC9odG1s
Iik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X21pbWVfdHlw
ZShmaXh0dXJlLT53ZWJSZXNvdXJjZSksPT0sInRleHQvaHRtbCIpOworICAgIGdfZnJlZShtaW1l
X3R5cGUpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X2Vu
Y29kaW5nKFdlYlJlc291cmNlRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQor
eworICAgIGdjaGFyKiB0ZXh0X2VuY29kaW5nOworICAgIGdfb2JqZWN0X2dldChHX09CSkVDVChm
aXh0dXJlLT53ZWJSZXNvdXJjZSksICJlbmNvZGluZyIsICZ0ZXh0X2VuY29kaW5nLCBOVUxMKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIodGV4dF9lbmNvZGluZywgPT0sICJ1dGY4Iik7CisgICAgZ19h
c3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X2VuY29kaW5nKGZpeHR1cmUtPndl
YlJlc291cmNlKSw9PSwidXRmOCIpOworICAgIGdfZnJlZSh0ZXh0X2VuY29kaW5nKTsKK30KKwor
c3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3Jlc291cmNlX2dldF9mcmFtZV9uYW1lKFdlYlJl
c291cmNlRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGdjaGFy
KiBmcmFtZV9uYW1lOworICAgIGdfb2JqZWN0X2dldChHX09CSkVDVChmaXh0dXJlLT53ZWJSZXNv
dXJjZSksICJmcmFtZS1uYW1lIiwgJmZyYW1lX25hbWUsIE5VTEwpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cihmcmFtZV9uYW1lLCA9PSwgIkV4YW1wbGUuY29tIik7CisgICAgZ19hc3NlcnRfY21wc3Ry
KHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X2ZyYW1lX25hbWUoZml4dHVyZS0+d2ViUmVzb3VyY2Up
LD09LCJFeGFtcGxlLmNvbSIpOworICAgIGdfZnJlZShmcmFtZV9uYW1lKTsKK30KKworc3RhdGlj
IHZvaWQgcmVzb3VyY2VfcmVxdWVzdF9zdGFydGluZ19jYihXZWJLaXRXZWJWaWV3KiB3ZWJfdmll
dywgV2ViS2l0V2ViRnJhbWUqIHdlYl9mcmFtZSwgV2ViS2l0V2ViUmVzb3VyY2UqIHdlYl9yZXNv
dXJjZSwgV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QsIFdlYktpdE5ldHdvcmtSZXNwb25z
ZSogcmVzcG9uc2UsIGdwb2ludGVyIGRhdGEpCit7CisgICAgZ2ludCogYmVlbl90aGVyZSA9IGRh
dGE7CisgICAgKmJlZW5fdGhlcmUgPSAqYmVlbl90aGVyZSArIDE7CisKKyAgICBpZiAoKmJlZW5f
dGhlcmUgPT0gMSkgeworICAgICAgICBnX2Fzc2VydCghbWFpbl9yZXNvdXJjZSk7CisgICAgICAg
IG1haW5fcmVzb3VyY2UgPSBnX29iamVjdF9yZWYod2ViX3Jlc291cmNlKTsKKworICAgICAgICBn
X2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJpKHdlYl9yZXNvdXJjZSks
ID09LCBiYXNlX3VyaSk7CisKKyAgICAgICAgLyogVGhpcyBzaG91bGQgYmUgYSByZWRpcmVjdCwg
c28gdGhlIHJlc3BvbnNlIG11c3QgYmUgTlVMTCAqLworICAgICAgICBnX2Fzc2VydCghcmVzcG9u
c2UpOworICAgIH0gZWxzZSBpZiAoKmJlZW5fdGhlcmUgPT0gMikgeworICAgICAgICBjaGFyKiB1
cmkgPSBnX3N0cmR1cF9wcmludGYoIiVzaW5kZXguaHRtbCIsIGJhc2VfdXJpKTsKKworICAgICAg
ICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJpKHdlYl9yZXNvdXJj
ZSksID09LCB1cmkpOworCisgICAgICAgIC8qIENhbmNlbCB0aGUgcmVxdWVzdC4gKi8KKyAgICAg
ICAgd2Via2l0X25ldHdvcmtfcmVxdWVzdF9zZXRfdXJpKHJlcXVlc3QsICJhYm91dDpibGFuayIp
OworCisgICAgICAgIGdfZnJlZSh1cmkpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgbm90aWZ5
X2xvYWRfc3RhdHVzX2NiKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBHUGFyYW1TcGVjKiBwc3Bl
YywgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBpZiAod2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0
YXR1cyh3ZWJfdmlldykgPT0gV0VCS0lUX0xPQURfRklOSVNIRUQpIHsKKyAgICAgICAgZ2Jvb2xl
YW4qIGJlZW5fdGhlcmUgPSBkYXRhOworICAgICAgICAqYmVlbl90aGVyZSA9IFRSVUU7CisKKyAg
ICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKHdlYl92aWV3KSwg
PT0sICJhYm91dDpibGFuayIpOworCisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Cisg
ICAgfQorfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYl9yZXNvdXJjZV9sb2FkaW5nKCkKK3sKKyAg
ICBXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3Zp
ZXdfbmV3KCkpOworICAgIGdpbnQgYmVlbl90b19yZXNvdXJjZV9yZXF1ZXN0X3N0YXJ0aW5nID0g
MDsKKyAgICBnYm9vbGVhbiBiZWVuX3RvX2xvYWRfZmluaXNoZWQgPSBGQUxTRTsKKyAgICBXZWJL
aXRXZWJGcmFtZSogd2ViX2ZyYW1lOworICAgIFdlYktpdFdlYkRhdGFTb3VyY2UqIGRhdGFfc291
cmNlOworCisgICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKKworICAgIGdf
b2JqZWN0X3JlZl9zaW5rKHdlYl92aWV3KTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViX3Zp
ZXcsICJyZXNvdXJjZS1yZXF1ZXN0LXN0YXJ0aW5nIiwKKyAgICAgICAgICAgICAgICAgICAgIEdf
Q0FMTEJBQ0socmVzb3VyY2VfcmVxdWVzdF9zdGFydGluZ19jYiksCisgICAgICAgICAgICAgICAg
ICAgICAmYmVlbl90b19yZXNvdXJjZV9yZXF1ZXN0X3N0YXJ0aW5nKTsKKworICAgIGdfc2lnbmFs
X2Nvbm5lY3Qod2ViX3ZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwKKyAgICAgICAgICAgICAg
ICAgICAgIEdfQ0FMTEJBQ0sobm90aWZ5X2xvYWRfc3RhdHVzX2NiKSwKKyAgICAgICAgICAgICAg
ICAgICAgICZiZWVuX3RvX2xvYWRfZmluaXNoZWQpOworCisgICAgd2Via2l0X3dlYl92aWV3X2xv
YWRfdXJpKHdlYl92aWV3LCBiYXNlX3VyaSk7CisKKyAgICAvKiBXZSB3b24ndCBnZXQgZmluaXNo
ZWQgaW1tZWRpYXRlbHksIGJlY2F1c2Ugb2YgdGhlIHJlZGlyZWN0ICovCisgICAgZ19tYWluX2xv
b3BfcnVuKGxvb3ApOworICAgIAorICAgIHdlYl9mcmFtZSA9IHdlYmtpdF93ZWJfdmlld19nZXRf
bWFpbl9mcmFtZSh3ZWJfdmlldyk7CisgICAgZGF0YV9zb3VyY2UgPSB3ZWJraXRfd2ViX2ZyYW1l
X2dldF9kYXRhX3NvdXJjZSh3ZWJfZnJhbWUpOworCisgICAgZ19hc3NlcnQobWFpbl9yZXNvdXJj
ZSk7CisgICAgZ19hc3NlcnQod2Via2l0X3dlYl9kYXRhX3NvdXJjZV9nZXRfbWFpbl9yZXNvdXJj
ZShkYXRhX3NvdXJjZSkgPT0gbWFpbl9yZXNvdXJjZSk7CisgICAgZ19vYmplY3RfdW5yZWYobWFp
bl9yZXNvdXJjZSk7CisgICAgCisgICAgZ19hc3NlcnRfY21waW50KGJlZW5fdG9fcmVzb3VyY2Vf
cmVxdWVzdF9zdGFydGluZywgPT0sIDIpOworICAgIGdfYXNzZXJ0X2NtcGludChiZWVuX3RvX2xv
YWRfZmluaXNoZWQsID09LCBUUlVFKTsKKworICAgIGdfb2JqZWN0X3VucmVmKHdlYl92aWV3KTsK
KyAgICBnX21haW5fbG9vcF91bnJlZihsb29wKTsKK30KKworc3RhdGljIHZvaWQgcmVzb3VyY2Vf
cmVxdWVzdF9zdGFydGluZ19zdWJfY2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIFdlYktpdFdl
YkZyYW1lKiB3ZWJfZnJhbWUsIFdlYktpdFdlYlJlc291cmNlKiB3ZWJfcmVzb3VyY2UsIFdlYktp
dE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0LCBXZWJLaXROZXR3b3JrUmVzcG9uc2UqIHJlc3BvbnNl
LCBncG9pbnRlciBkYXRhKQoreworICAgIGlmICghbWFpbl9yZXNvdXJjZSkKKyAgICAgICAgbWFp
bl9yZXNvdXJjZSA9IGdfb2JqZWN0X3JlZih3ZWJfcmVzb3VyY2UpOworICAgIGVsc2UgaWYgKCFz
dWJfcmVzb3VyY2UpCisgICAgICBzdWJfcmVzb3VyY2UgPSBnX29iamVjdF9yZWYod2ViX3Jlc291
cmNlKTsKK30KKworc3RhdGljIHZvaWQgbm90aWZ5X2xvYWRfc3RhdHVzX3N1Yl9jYihXZWJLaXRX
ZWJWaWV3KiB3ZWJfdmlldywgR1BhcmFtU3BlYyogcHNwZWMsIGdwb2ludGVyIGRhdGEpCit7Cisg
ICAgaWYgKHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMod2ViX3ZpZXcpID09IFdFQktJ
VF9MT0FEX0ZJTklTSEVEKQorICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworfQorCitz
dGF0aWMgZ2Jvb2xlYW4gaWRsZV9xdWl0X2xvb3BfY2IoZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBn
X21haW5fbG9vcF9xdWl0KGxvb3ApOworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZv
aWQgdGVzdF93ZWJfcmVzb3VyY2Vfc3ViX3Jlc291cmNlX2xvYWRpbmcoKQoreworICAgIFdlYktp
dFdlYlZpZXcqIHdlYl92aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXco
KSk7CisgICAgV2ViS2l0V2ViRnJhbWUqIHdlYl9mcmFtZTsKKyAgICBXZWJLaXRXZWJEYXRhU291
cmNlKiBkYXRhX3NvdXJjZTsKKyAgICBHTGlzdCogc3ViX3Jlc291cmNlczsKKyAgICBjaGFyKiB1
cmkgPSBnX3N0cmR1cF9wcmludGYoIiVzbWFpbi5odG1sIiwgYmFzZV91cmkpOworCisgICAgbWFp
bl9yZXNvdXJjZSA9IE5VTEw7CisgICAgCisgICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxM
LCBUUlVFKTsKKworICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYl92aWV3KTsKKworICAgIGdfc2ln
bmFsX2Nvbm5lY3Qod2ViX3ZpZXcsICJyZXNvdXJjZS1yZXF1ZXN0LXN0YXJ0aW5nIiwKKyAgICAg
ICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0socmVzb3VyY2VfcmVxdWVzdF9zdGFydGluZ19zdWJf
Y2IpLAorICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0
KHdlYl92aWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsCisgICAgICAgICAgICAgICAgICAgICBH
X0NBTExCQUNLKG5vdGlmeV9sb2FkX3N0YXR1c19zdWJfY2IpLAorICAgICAgICAgICAgICAgICAg
ICAgTlVMTCk7CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkod2ViX3ZpZXcsIHVyaSk7
CisKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICAvKiBUaGUgbWFpbiByZXNvdXJj
ZSBzaG91bGQgYmUgbG9hZGVkOyBub3cgbGV0J3Mgd2FpdCBmb3IgdGhlIHN1Yi1yZXNvdXJjZSB0
byBsb2FkICovCisgICAgZ19pZGxlX2FkZChpZGxlX3F1aXRfbG9vcF9jYiwgTlVMTCk7CisgICAg
Z19tYWluX2xvb3BfcnVuKGxvb3ApOworICAgIAorICAgIGdfYXNzZXJ0KG1haW5fcmVzb3VyY2Ug
JiYgc3ViX3Jlc291cmNlKTsKKyAgICBnX2Fzc2VydChtYWluX3Jlc291cmNlICE9IHN1Yl9yZXNv
dXJjZSk7CisKKyAgICB3ZWJfZnJhbWUgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUo
d2ViX3ZpZXcpOworICAgIGRhdGFfc291cmNlID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfZGF0YV9z
b3VyY2Uod2ViX2ZyYW1lKTsKKworICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfZGF0YV9zb3VyY2Vf
Z2V0X21haW5fcmVzb3VyY2UoZGF0YV9zb3VyY2UpID09IG1haW5fcmVzb3VyY2UpOworICAgIGdf
b2JqZWN0X3VucmVmKG1haW5fcmVzb3VyY2UpOworCisgICAgc3ViX3Jlc291cmNlcyA9IHdlYmtp
dF93ZWJfZGF0YV9zb3VyY2VfZ2V0X3N1YnJlc291cmNlcyhkYXRhX3NvdXJjZSk7CisgICAgLy8g
RXhwZWN0ZWQgcmVzb3VyY2VzOiBqYXZhc2NyaXB0cy5qcywgZmF2aWNvbi5pY28KKyAgICBnX2Fz
c2VydChzdWJfcmVzb3VyY2VzKTsKKyAgICBnX2Fzc2VydChzdWJfcmVzb3VyY2VzLT5uZXh0KTsK
KyAgICBnX2Fzc2VydCghc3ViX3Jlc291cmNlcy0+bmV4dC0+bmV4dCk7CisKKyAgICAvLyBUZXN0
IHRoYXQgdGhlIG9iamVjdCB3ZSBnb3QgZnJvbSB0aGUgZGF0YSBzb3VyY2UgaXMgdGhlIHNhbWUK
KyAgICAvLyB0aGF0IHdlbnQgdGhyb3VnaCByZXNvdXJjZS1yZXF1ZXN0LXN0YXJ0aW5nLiBOb3Rl
IHRoYXQgdGhlIG9yZGVyIGlzCisgICAgLy8gbm90IGltcG9ydGFudCAoYW5kIG5vdCBndWFyYW50
ZWVkIHNpbmNlIHRoZSByZXNvdXJjZXMgYXJlIHN0b3JlZCBpbiBhCisgICAgLy8gaGFzaHRhYmxl
KS4KKyAgICBnX2Fzc2VydChXRUJLSVRfV0VCX1JFU09VUkNFKHN1Yl9yZXNvdXJjZXMtPmRhdGEp
ID09IHN1Yl9yZXNvdXJjZQorICAgICAgICAgICAgIHx8IFdFQktJVF9XRUJfUkVTT1VSQ0Uoc3Vi
X3Jlc291cmNlcy0+bmV4dC0+ZGF0YSkgPT0gc3ViX3Jlc291cmNlKTsKKworICAgIGdfb2JqZWN0
X3VucmVmKHdlYl92aWV3KTsKKyAgICBnX21haW5fbG9vcF91bnJlZihsb29wKTsKK30KKworaW50
IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIFNvdXBTZXJ2ZXIqIHNlcnZlcjsK
KyAgICBTb3VwVVJJKiBzb3VwX3VyaTsKKworICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2
LCBOVUxMKTsKKworICAgIHNlcnZlciA9IHNvdXBfc2VydmVyX25ldyhTT1VQX1NFUlZFUl9QT1JU
LCAwLCBOVUxMKTsKKyAgICBzb3VwX3NlcnZlcl9ydW5fYXN5bmMoc2VydmVyKTsKKworICAgIHNv
dXBfc2VydmVyX2FkZF9oYW5kbGVyKHNlcnZlciwgTlVMTCwgc2VydmVyX2NhbGxiYWNrLCBOVUxM
LCBOVUxMKTsKKworICAgIHNvdXBfdXJpID0gc291cF91cmlfbmV3KCJodHRwOi8vMTI3LjAuMC4x
LyIpOworICAgIHNvdXBfdXJpX3NldF9wb3J0KHNvdXBfdXJpLCBzb3VwX3NlcnZlcl9nZXRfcG9y
dChzZXJ2ZXIpKTsKKworICAgIGJhc2VfdXJpID0gc291cF91cmlfdG9fc3RyaW5nKHNvdXBfdXJp
LCBGQUxTRSk7CisgICAgc291cF91cmlfZnJlZShzb3VwX3VyaSk7CisKKyAgICBnX3Rlc3RfYnVn
X2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOworICAgIGdfdGVzdF9hZGQoIi93ZWJr
aXQvd2VicmVzb3VyY2UvZ2V0X3VybCIsCisgICAgICAgICAgICAgICBXZWJSZXNvdXJjZUZpeHR1
cmUsIDAsIHdlYl9yZXNvdXJjZV9maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF93
ZWJraXRfd2ViX3Jlc291cmNlX2dldF91cmwsIHdlYl9yZXNvdXJjZV9maXh0dXJlX3RlYXJkb3du
KTsKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L3dlYnJlc291cmNlL2dldF9taW1lX3R5cGUiLAor
ICAgICAgICAgICAgICAgV2ViUmVzb3VyY2VGaXh0dXJlLCAwLCB3ZWJfcmVzb3VyY2VfZml4dHVy
ZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfbWlt
ZV90eXBlLCB3ZWJfcmVzb3VyY2VfZml4dHVyZV90ZWFyZG93bik7CisgICAgZ190ZXN0X2FkZCgi
L3dlYmtpdC93ZWJyZXNvdXJjZS9nZXRfdGV4dF9lbmNvZGluZ19uYW1lIiwKKyAgICAgICAgICAg
ICAgIFdlYlJlc291cmNlRml4dHVyZSwgMCwgd2ViX3Jlc291cmNlX2ZpeHR1cmVfc2V0dXAsCisg
ICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X2VuY29kaW5nLCB3ZWJf
cmVzb3VyY2VfZml4dHVyZV90ZWFyZG93bik7CisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC93ZWJy
ZXNvdXJjZS9nZXRfZnJhbWVfbmFtZSIsCisgICAgICAgICAgICAgICBXZWJSZXNvdXJjZUZpeHR1
cmUsIDAsIHdlYl9yZXNvdXJjZV9maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF93
ZWJraXRfd2ViX3Jlc291cmNlX2dldF9mcmFtZV9uYW1lLCB3ZWJfcmVzb3VyY2VfZml4dHVyZV90
ZWFyZG93bik7CisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdC93ZWJyZXNvdXJjZS9nZXRfZGF0YSIs
CisgICAgICAgICAgICAgICBXZWJSZXNvdXJjZUZpeHR1cmUsIDAsIHdlYl9yZXNvdXJjZV9maXh0
dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfd2ViX3Jlc291cmNlX2dldF9k
YXRhLCB3ZWJfcmVzb3VyY2VfZml4dHVyZV90ZWFyZG93bik7CisKKyAgICBnX3Rlc3RfYWRkX2Z1
bmMoIi93ZWJraXQvd2VicmVzb3VyY2UvbG9hZGluZyIsIHRlc3Rfd2ViX3Jlc291cmNlX2xvYWRp
bmcpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJyZXNvdXJjZS9zdWJfcmVzb3Vy
Y2VfbG9hZGluZyIsIHRlc3Rfd2ViX3Jlc291cmNlX3N1Yl9yZXNvdXJjZV9sb2FkaW5nKTsKKwor
ICAgIHJldHVybiBnX3Rlc3RfcnVuICgpOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYnNldHRpbmdzLmMgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2Vic2V0dGluZ3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNTQ4OWNk
ZGQ5OTM0NTE4ODJhNjg5NzQwOTgxMmQ4NDIyMTFhNzM0Ci0tLSAvZGV2L251bGwKKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYnNldHRpbmdzLmMKQEAgLTAs
MCArMSwxNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIE1pY2hhZWwgQWxvbnpv
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z3RrL2d0
ay5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKworLyogUHJpdmF0ZSBBUEkgKi8KK2No
YXIqIHdlYmtpdFdlYlNldHRpbmdzVXNlckFnZW50Rm9yVVJJKFdlYktpdFdlYlNldHRpbmdzICpz
ZXR0aW5ncywgY29uc3QgY2hhciAqdXJpKTsKKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2Vi
X3NldHRpbmdzX2NvcHkodm9pZCkKK3sKKyAgICBXZWJLaXRXZWJTZXR0aW5ncyAqc2V0dGluZ3Mg
PSB3ZWJraXRfd2ViX3NldHRpbmdzX25ldygpOworCisgICAgLy8gU2V0IHNvbWUgbm9uLWRlZmF1
bHQgc2V0dGluZ3MgdG8gdmVyaWZ5IHRoYXQgc2V0dGluZ3MgYXJlIHByb3Blcmx5IGNvcGllZC4K
KyAgICBnX29iamVjdF9zZXQoc2V0dGluZ3MsCisgICAgICAgICAgICAgICAgICJlbmFibGUtd2Vi
Z2wiLCBUUlVFLAorICAgICAgICAgICAgICAgICAiZW5hYmxlLWZ1bGxzY3JlZW4iLCBUUlVFLAor
ICAgICAgICAgICAgICAgICAiYXV0by1sb2FkLWltYWdlcyIsIEZBTFNFLAorICAgICAgICAgICAg
ICAgICAiZGVmYXVsdC1lbmNvZGluZyIsICJ1dGYtOCIsCisgICAgICAgICAgICAgICAgICJlbmFi
bGUtbWVkaWFzb3VyY2UiLCBUUlVFLAorICAgICAgICAgICAgICAgICBOVUxMKTsKKworICAgIFdl
YktpdFdlYlNldHRpbmdzICpjb3B5ID0gd2Via2l0X3dlYl9zZXR0aW5nc19jb3B5KHNldHRpbmdz
KTsKKworICAgIGdib29sZWFuIGVuYWJsZVdlYkdMID0gRkFMU0U7CisgICAgZ2Jvb2xlYW4gZW5h
YmxlRnVsbHNjcmVlbiA9IEZBTFNFOworICAgIGdib29sZWFuIGF1dG9Mb2FkSW1hZ2VzID0gRkFM
U0U7CisgICAgZ2Jvb2xlYW4gZW5hYmxlTWVkaWFTb3VyY2UgPSBGQUxTRTsKKyAgICBjaGFyICpk
ZWZhdWx0RW5jb2RpbmcgPSAwOworICAgIGdfb2JqZWN0X2dldChjb3B5LAorICAgICAgICAgICAg
ICAgICAiZW5hYmxlLWZ1bGxzY3JlZW4iLCAmZW5hYmxlRnVsbHNjcmVlbiwKKyAgICAgICAgICAg
ICAgICAgImVuYWJsZS13ZWJnbCIsICZlbmFibGVXZWJHTCwKKyAgICAgICAgICAgICAgICAgImF1
dG8tbG9hZC1pbWFnZXMiLCAmYXV0b0xvYWRJbWFnZXMsCisgICAgICAgICAgICAgICAgICJkZWZh
dWx0LWVuY29kaW5nIiwgJmRlZmF1bHRFbmNvZGluZywKKyAgICAgICAgICAgICAgICAgImVuYWJs
ZS1tZWRpYXNvdXJjZSIsICZlbmFibGVNZWRpYVNvdXJjZSwKKyAgICAgICAgICAgICAgICAgTlVM
TCk7CisKKyAgICBnX2Fzc2VydChlbmFibGVXZWJHTCk7CisgICAgZ19hc3NlcnQoZW5hYmxlRnVs
bHNjcmVlbik7CisgICAgZ19hc3NlcnQoIWF1dG9Mb2FkSW1hZ2VzKTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIoZGVmYXVsdEVuY29kaW5nLCA9PSwgInV0Zi04Iik7CisgICAgZ19hc3NlcnQoZW5hYmxl
TWVkaWFTb3VyY2UpOworICAgIGdfZnJlZShkZWZhdWx0RW5jb2RpbmcpOworfQorCitzdGF0aWMg
dm9pZCB0ZXN0X25vbl9xdWlya3lfdXNlcl9hZ2VudHMoV2ViS2l0V2ViU2V0dGluZ3MgKnNldHRp
bmdzLCBjb25zdCBjaGFyICpkZWZhdWx0VXNlckFnZW50KQoreworICAgIGNoYXIgKnVzZXJBZ2Vu
dCA9IDA7CisKKyAgICAvLyB0ZXN0IGEgY3VzdG9tIFVBIHN0cmluZworICAgIHVzZXJBZ2VudCA9
IDA7CisgICAgZ19vYmplY3Rfc2V0KHNldHRpbmdzLCAidXNlci1hZ2VudCIsICJ0ZXN0d2Vic2V0
dGluZ3MvMC4xIiwgTlVMTCk7CisgICAgZ19vYmplY3RfZ2V0KHNldHRpbmdzLCJ1c2VyLWFnZW50
IiwgJnVzZXJBZ2VudCwgTlVMTCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHVzZXJBZ2VudCwgPT0s
ICJ0ZXN0d2Vic2V0dGluZ3MvMC4xIik7CisgICAgZ19mcmVlKHVzZXJBZ2VudCk7CisKKyAgICAv
LyBzZXR0aW5nIGl0IHRvIE5VTEwgb3IgYW4gZW1wdHkgdmFsdWUgc2hvdWxkIGdpdmUgdXMgdGhl
IGRlZmF1bHQgVUEgc3RyaW5nCisgICAgdXNlckFnZW50ID0gMDsKKyAgICBnX29iamVjdF9zZXQo
c2V0dGluZ3MsICJ1c2VyLWFnZW50IiwgMCwgTlVMTCk7CisgICAgZ19vYmplY3RfZ2V0KHNldHRp
bmdzLCJ1c2VyLWFnZW50IiwgJnVzZXJBZ2VudCwgTlVMTCk7CisgICAgZ19hc3NlcnRfY21wc3Ry
KHVzZXJBZ2VudCwgPT0sIGRlZmF1bHRVc2VyQWdlbnQpOworICAgIGdfZnJlZSh1c2VyQWdlbnQp
OworCisgICAgdXNlckFnZW50ID0gMDsKKyAgICBnX29iamVjdF9zZXQoc2V0dGluZ3MsICJ1c2Vy
LWFnZW50IiwgIiIsIE5VTEwpOworICAgIGdfb2JqZWN0X2dldChzZXR0aW5ncywidXNlci1hZ2Vu
dCIsICZ1c2VyQWdlbnQsIE5VTEwpOworICAgIGdfYXNzZXJ0X2NtcHN0cih1c2VyQWdlbnQsID09
LCBkZWZhdWx0VXNlckFnZW50KTsKKyAgICBnX2ZyZWUodXNlckFnZW50KTsKK30KKworc3RhdGlj
IHZvaWQgdGVzdF93ZWJraXRfd2ViX3NldHRpbmdzX3VzZXJfYWdlbnQodm9pZCkKK3sKKyAgICBX
ZWJLaXRXZWJTZXR0aW5ncyAqc2V0dGluZ3M7CisgICAgR3RrV2lkZ2V0ICp3ZWJWaWV3OworICAg
IGNoYXIgKmRlZmF1bHRVc2VyQWdlbnQ7CisgICAgY2hhciAqdXNlckFnZW50ID0gMDsKKyAgICBn
X3Rlc3RfYnVnKCIxNzM3NSIpOworCisgICAgd2ViVmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXco
KTsKKyAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKKworICAgIHNldHRpbmdzID0gd2Vi
a2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldykpOworICAg
IGRlZmF1bHRVc2VyQWdlbnQgPSBnX3N0cmR1cCh3ZWJraXRfd2ViX3NldHRpbmdzX2dldF91c2Vy
X2FnZW50KHNldHRpbmdzKSk7CisKKyAgICB0ZXN0X25vbl9xdWlya3lfdXNlcl9hZ2VudHMoc2V0
dGluZ3MsIGRlZmF1bHRVc2VyQWdlbnQpOworCisgICAgLyogVGVzdCBxdWlya3kgZ29vZ2xlIGRv
bWFpbnMgKi8KKyAgICBnX29iamVjdF9zZXQoc2V0dGluZ3MsICJ1c2VyLWFnZW50IiwgInRlc3R3
ZWJzZXR0aW5ncy8wLjEiLCBOVUxMKTsKKworICAgIHVzZXJBZ2VudCA9IHdlYmtpdFdlYlNldHRp
bmdzVXNlckFnZW50Rm9yVVJJKHNldHRpbmdzLCAiaHR0cDovL3d3dy5nb29nbGUuY29tLyIpOwor
ICAgIGdfYXNzZXJ0X2NtcHN0cih1c2VyQWdlbnQsID09LCAidGVzdHdlYnNldHRpbmdzLzAuMSIp
OworICAgIGdfZnJlZSh1c2VyQWdlbnQpOworCisgICAgdXNlckFnZW50ID0gd2Via2l0V2ViU2V0
dGluZ3NVc2VyQWdlbnRGb3JVUkkoc2V0dGluZ3MsICJodHRwOi8vZ21haWwuY29tLyIpOworICAg
IGdfYXNzZXJ0X2NtcHN0cih1c2VyQWdlbnQsID09LCAidGVzdHdlYnNldHRpbmdzLzAuMSIpOwor
ICAgIGdfZnJlZSh1c2VyQWdlbnQpOworCisgICAgdXNlckFnZW50ID0gd2Via2l0V2ViU2V0dGlu
Z3NVc2VyQWdlbnRGb3JVUkkoc2V0dGluZ3MsICJodHRwOi8vd3d3Lmdvb2dsZS5jb20uYnIvIik7
CisgICAgZ19hc3NlcnRfY21wc3RyKHVzZXJBZ2VudCwgPT0sICJ0ZXN0d2Vic2V0dGluZ3MvMC4x
Iik7CisgICAgZ19mcmVlKHVzZXJBZ2VudCk7CisKKyAgICB1c2VyQWdlbnQgPSB3ZWJraXRXZWJT
ZXR0aW5nc1VzZXJBZ2VudEZvclVSSShzZXR0aW5ncywgImh0dHA6Ly9jYWxlbmRhci5nb29nbGUu
Y29tLyIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih1c2VyQWdlbnQsID09LCAidGVzdHdlYnNldHRp
bmdzLzAuMSIpOworICAgIGdfZnJlZSh1c2VyQWdlbnQpOworCisgICAgLyogTm93IGVuYWJsZSBx
dWlya3MgaGFuZGxpbmcgKi8KKyAgICBnX29iamVjdF9zZXQoc2V0dGluZ3MsICJlbmFibGUtc2l0
ZS1zcGVjaWZpYy1xdWlya3MiLCBUUlVFLCBOVUxMKTsKKworICAgIHRlc3Rfbm9uX3F1aXJreV91
c2VyX2FnZW50cyhzZXR0aW5ncywgZGVmYXVsdFVzZXJBZ2VudCk7CisKKyAgICBnX29iamVjdF9z
ZXQoc2V0dGluZ3MsICJ1c2VyLWFnZW50IiwgInRlc3R3ZWJzZXR0aW5ncy8wLjEiLCBOVUxMKTsK
KworICAgIHVzZXJBZ2VudCA9IHdlYmtpdFdlYlNldHRpbmdzVXNlckFnZW50Rm9yVVJJKHNldHRp
bmdzLCAiaHR0cDovL3d3dy5nb29nbGUuY29tLyIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih1c2Vy
QWdlbnQsID09LCBkZWZhdWx0VXNlckFnZW50KTsKKyAgICBnX2ZyZWUodXNlckFnZW50KTsKKwor
ICAgIHVzZXJBZ2VudCA9IHdlYmtpdFdlYlNldHRpbmdzVXNlckFnZW50Rm9yVVJJKHNldHRpbmdz
LCAiaHR0cDovL2dtYWlsLmNvbS8iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodXNlckFnZW50LCA9
PSwgZGVmYXVsdFVzZXJBZ2VudCk7CisgICAgZ19mcmVlKHVzZXJBZ2VudCk7CisKKyAgICB1c2Vy
QWdlbnQgPSB3ZWJraXRXZWJTZXR0aW5nc1VzZXJBZ2VudEZvclVSSShzZXR0aW5ncywgImh0dHA6
Ly93d3cuZ29vZ2xlLmNvbS5ici8iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodXNlckFnZW50LCA9
PSwgZGVmYXVsdFVzZXJBZ2VudCk7CisgICAgZ19mcmVlKHVzZXJBZ2VudCk7CisKKyAgICB1c2Vy
QWdlbnQgPSB3ZWJraXRXZWJTZXR0aW5nc1VzZXJBZ2VudEZvclVSSShzZXR0aW5ncywgImh0dHA6
Ly93d3cuZ29vZ2xlLnVrLm5vdC5jb20uYnIvIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHVzZXJB
Z2VudCwgPT0sICJ0ZXN0d2Vic2V0dGluZ3MvMC4xIik7CisgICAgZ19mcmVlKHVzZXJBZ2VudCk7
CisKKyAgICBnX2ZyZWUoZGVmYXVsdFVzZXJBZ2VudCk7CisgICAgZ19vYmplY3RfdW5yZWYod2Vi
Vmlldyk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBndGtf
dGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7CisKKyAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0
dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93
ZWJzZXR0aW5ncy91c2VyX2FnZW50IiwgdGVzdF93ZWJraXRfd2ViX3NldHRpbmdzX3VzZXJfYWdl
bnQpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJzZXR0aW5ncy9jb3B5IiwgdGVz
dF93ZWJraXRfd2ViX3NldHRpbmdzX2NvcHkpOworICAgIHJldHVybiBnX3Rlc3RfcnVuICgpOwor
fQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdl
YnZpZXcuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJ2aWV3
LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNjRkOTJhMmQxYjRiYjA1Y2Q2YjdhNzg2ZjhkOGQ4MzRkZjZkYzIxNwot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rl
c3R3ZWJ2aWV3LmMKQEAgLTAsMCArMSw3NDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
SG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBD
b2xsYWJvcmEgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJ0ZXN0X3V0aWxzLmgiCisKKyNpbmNsdWRlIDxlcnJuby5o
PgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8
Z2xpYi5oPgorI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CisjaW5jbHVkZSA8Z2RrL2dkay5oPgor
I2luY2x1ZGUgPGdkay9nZGtrZXlzeW1zLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1
ZGUgPHdlYmtpdC93ZWJraXQuaD4KKworR01haW5Mb29wKiBsb29wOworU291cFNlc3Npb24gKnNl
c3Npb247CitjaGFyKiBiYXNlX3VyaTsKKworLyogRm9yIHJlYWwgcmVxdWVzdCB0ZXN0aW5nICov
CitzdGF0aWMgdm9pZAorc2VydmVyX2NhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1l
c3NhZ2UqIG1zZywKKyAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJs
ZSogcXVlcnksCisgICAgICAgICAgICAgICAgIFNvdXBDbGllbnRDb250ZXh0KiBjb250ZXh0LCBn
cG9pbnRlciBkYXRhKQoreworICAgIGlmIChtc2ctPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQp
IHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobXNnLCBTT1VQX1NUQVRVU19OT1Rf
SU1QTEVNRU5URUQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc291cF9tZXNzYWdl
X3NldF9zdGF0dXMobXNnLCBTT1VQX1NUQVRVU19PSyk7CisKKyAgICBpZiAoZ19zdHJfZXF1YWwo
cGF0aCwgIi9mYXZpY29uLmljbyIpKSB7CisgICAgICAgIGNoYXIqIGNvbnRlbnRzOworICAgICAg
ICBnc2l6ZSBsZW5ndGg7CisgICAgICAgIEdFcnJvciogZXJyb3IgPSBOVUxMOworCisgICAgICAg
IGdfZmlsZV9nZXRfY29udGVudHMoImJsYW5rLmljbyIsICZjb250ZW50cywgJmxlbmd0aCwgJmVy
cm9yKTsKKyAgICAgICAgZ19hc3NlcnQoIWVycm9yKTsKKworICAgICAgICBzb3VwX21lc3NhZ2Vf
Ym9keV9hcHBlbmQobXNnLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBjb250ZW50
cywgbGVuZ3RoKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvYmlnZGl2Lmh0
bWwiKSkgeworICAgICAgICBjaGFyKiBjb250ZW50cyA9IGdfc3RyZHVwKCI8aHRtbD48Ym9keT48
YSBpZD1cImxpbmtcIiBocmVmPVwiaHR0cDovL2FiYy5kZWZcIj50ZXN0PC9hPjxkaXYgc3R5bGU9
XCJiYWNrZ3JvdW5kLWNvbG9yOiBncmVlbjsgaGVpZ2h0OiAxMjAwcHg7XCI+PC9kaXY+PC9ib2R5
PjwvaHRtbD4iKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1zZy0+cmVzcG9u
c2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgY29udGVudHMsIHN0cmxlbihjb250ZW50cykpOwor
ICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9pZnJhbWUuaHRtbCIpKSB7CisgICAg
ICAgIGNoYXIqIGNvbnRlbnRzID0gZ19zdHJkdXAoIjxodG1sPjxib2R5IGlkPVwic29tZS1jb250
ZW50XCI+PGRpdiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IGdyZWVuOyBoZWlnaHQ6IDUwcHg7
XCI+PC9kaXY+PGlmcmFtZSBzcmM9XCJiaWdkaXYuaHRtbFwiPjwvaWZyYW1lPjwvYm9keT48L2h0
bWw+Iik7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtc2ctPnJlc3BvbnNlX2Jv
ZHksIFNPVVBfTUVNT1JZX1RBS0UsIGNvbnRlbnRzLCBzdHJsZW4oY29udGVudHMpKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBjaGFyKiBjb250ZW50cyA9IGdfc3RyZHVwKCI8aHRtbD48Ym9keT50
ZXN0PC9ib2R5PjwvaHRtbD4iKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1z
Zy0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgY29udGVudHMsIHN0cmxlbihjb250
ZW50cykpOworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1zZy0+cmVz
cG9uc2VfYm9keSk7Cit9CisKK3N0YXRpYyB2b2lkIGlkbGVfcXVpdF9sb29wX2NiKFdlYktpdFdl
YlZpZXcqIHdlYl92aWV3LCBHUGFyYW1TcGVjKiBwc3BlYywgZ3BvaW50ZXIgZGF0YSkKK3sKKyAg
ICBpZiAod2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJfdmlldykgPT0gV0VCS0lU
X0xPQURfRklOSVNIRUQgfHwKKyAgICAgICAgd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1
cyh3ZWJfdmlldykgPT0gV0VCS0lUX0xPQURfRkFJTEVEKQorICAgICAgICBnX21haW5fbG9vcF9x
dWl0KGxvb3ApOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gdGltZW91dF9jYihncG9pbnRlciBkYXRh
KQoreworICAgIGdfZXJyb3IoIkRpZG4ndCBnZXQgaWNvbi11cmkgYmVmb3JlIHRpbWluZyBvdXQu
Iik7CisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZCBpY29uX3VyaV9jaGFuZ2Vk
X2NiKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBHUGFyYW1TcGVjKiBwc3BlYywgZ3BvaW50ZXIg
ZGF0YSkKK3sKKyAgICBjaGFyKiBleHBlY3RlZF91cmk7CisKKyAgICBnX2Fzc2VydF9jbXBzdHIo
Z19wYXJhbV9zcGVjX2dldF9uYW1lKHBzcGVjKSwgPT0sICJpY29uLXVyaSIpOworCisgICAgZXhw
ZWN0ZWRfdXJpID0gZ19zdHJkdXBfcHJpbnRmKCIlc2Zhdmljb24uaWNvIiwgYmFzZV91cmkpOwor
ICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fdXJpKHdlYl92aWV3
KSwgPT0sIGV4cGVjdGVkX3VyaSk7CisgICAgZ19mcmVlKGV4cGVjdGVkX3VyaSk7CisKKyAgICBn
X21haW5fbG9vcF9xdWl0KGxvb3ApOworfQorCitzdGF0aWMgdm9pZCBpY29uX2xvYWRlZF9jYihX
ZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgY2hhciogaWNvbl91cmksIGdwb2ludGVyIGRhdGEpCit7
CisgICAgZ2Jvb2xlYW4qIGJlZW5faGVyZSA9IChnYm9vbGVhbiopZGF0YTsKKyAgICBjaGFyKiBl
eHBlY3RlZF91cmkgPSBnX3N0cmR1cF9wcmludGYoIiVzZmF2aWNvbi5pY28iLCBiYXNlX3VyaSk7
CisgICAgZ19hc3NlcnRfY21wc3RyKGljb25fdXJpLCA9PSwgZXhwZWN0ZWRfdXJpKTsKKyAgICBn
X2ZyZWUoZXhwZWN0ZWRfdXJpKTsKKworICAgIGdfYXNzZXJ0X2NtcHN0cihpY29uX3VyaSwgPT0s
IHdlYmtpdF93ZWJfdmlld19nZXRfaWNvbl91cmkod2ViX3ZpZXcpKTsKKworICAgICpiZWVuX2hl
cmUgPSBUUlVFOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfdmlld19pY29uX3Vy
aSgpCit7CisgICAgZ2Jvb2xlYW4gYmVlbl90b19pY29uX2xvYWRlZCA9IEZBTFNFOworICAgIFdl
YktpdFdlYlZpZXcqIHZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygp
KTsKKyAgICBnX29iamVjdF9yZWZfc2luayhHX09CSkVDVCh2aWV3KSk7CisKKyAgICBsb29wID0g
Z19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworCisgICAgZ19vYmplY3RfY29ubmVjdChHX09C
SkVDVCh2aWV3KSwKKyAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6Om5vdGlmeTo6aWNvbi11
cmkiLCBpY29uX3VyaV9jaGFuZ2VkX2NiLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgInNp
Z25hbDo6aWNvbi1sb2FkZWQiLCBpY29uX2xvYWRlZF9jYiwgJmJlZW5fdG9faWNvbl9sb2FkZWQs
CisgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKworICAgIHdlYmtpdF93ZWJfdmlld19sb2Fk
X3VyaSh2aWV3LCBiYXNlX3VyaSk7CisKKyAgICBndWludCB0aW1lb3V0X2lkID0gZ190aW1lb3V0
X2FkZCg1MDAsIHRpbWVvdXRfY2IsIDApOworCisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwor
CisgICAgZ19zb3VyY2VfcmVtb3ZlKHRpbWVvdXRfaWQpOworCisgICAgZ19hc3NlcnQoYmVlbl90
b19pY29uX2xvYWRlZCk7CisKKyAgICBnX29iamVjdF91bnJlZih2aWV3KTsKK30KKworc3RhdGlj
IGdib29sZWFuIG1hcF9ldmVudF9jYihHdGtXaWRnZXQgKndpZGdldCwgR2RrRXZlbnQqIGV2ZW50
LCBncG9pbnRlciBkYXRhKQoreworICAgIEdNYWluTG9vcCogbG9vcCA9IChHTWFpbkxvb3AqKWRh
dGE7CisgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKKworICAgIHJldHVybiBGQUxTRTsKK30K
Kworc3RhdGljIGdib29sZWFuIHF1aXRfYWZ0ZXJfc2hvcnRfZGVsYXlfY2IoZ3BvaW50ZXIgZGF0
YSkKK3sKKyAgICBnX21haW5fbG9vcF9xdWl0KChHTWFpbkxvb3AqKWRhdGEpOworICAgIHJldHVy
biBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3ZpZXdfZ3JhYl9mb2N1
cygpCit7CisgICAgY2hhciogdXJpID0gZ19zdHJjb25jYXQoYmFzZV91cmksICJpZnJhbWUuaHRt
bCIsIE5VTEwpOworICAgIEd0a1dpZGdldCogd2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJ
TkRPV19QT1BVUCk7CisgICAgR3RrV2lkZ2V0KiBzY3JvbGxlZF93aW5kb3cgPSBndGtfc2Nyb2xs
ZWRfd2luZG93X25ldyhOVUxMLCBOVUxMKTsKKyAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gV0VC
S0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgR3RrQWRqdXN0bWVudCog
YWRqdXN0bWVudDsKKworICAgIGd0a193aW5kb3dfc2V0X2RlZmF1bHRfc2l6ZShHVEtfV0lORE9X
KHdpbmRvdyksIDQwMCwgMjAwKTsKKworICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlO
RVIod2luZG93KSwgc2Nyb2xsZWRfd2luZG93KTsKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtf
Q09OVEFJTkVSKHNjcm9sbGVkX3dpbmRvdyksIEdUS19XSURHRVQodmlldykpOworCisgICAgZ3Rr
X3Njcm9sbGVkX3dpbmRvd19zZXRfcG9saWN5KEdUS19TQ1JPTExFRF9XSU5ET1coc2Nyb2xsZWRf
d2luZG93KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1BPTElDWV9B
VVRPTUFUSUMsIEdUS19QT0xJQ1lfQVVUT01BVElDKTsKKworICAgIGxvb3AgPSBnX21haW5fbG9v
cF9uZXcoTlVMTCwgVFJVRSk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHZpZXcsICJub3RpZnk6
OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhpZGxlX3F1aXRfbG9vcF9jYiksIE5VTEwpOworCisg
ICAgLyogV2FpdCBmb3Igd2luZG93IHRvIHNob3cgdXAgKi8KKyAgICBndGtfd2lkZ2V0X3Nob3df
YWxsKHdpbmRvdyk7CisgICAgZ19zaWduYWxfY29ubmVjdCh3aW5kb3csICJtYXAtZXZlbnQiLAor
ICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhtYXBfZXZlbnRfY2IpLCBsb29wKTsKKyAg
ICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICAvKiBMb2FkIGEgcGFnZSB3aXRoIGEgYmln
IGRpdiB0aGF0IHdpbGwgY2F1c2Ugc2Nyb2xsYmFycyB0byBhcHBlYXIgKi8KKyAgICB3ZWJraXRf
d2ViX3ZpZXdfbG9hZF91cmkodmlldywgdXJpKTsKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7
CisKKyAgICBhZGp1c3RtZW50ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19nZXRfdmFkanVzdG1lbnQo
R1RLX1NDUk9MTEVEX1dJTkRPVyhzY3JvbGxlZF93aW5kb3cpKTsKKyAgICBnX2Fzc2VydF9jbXBm
bG9hdChndGtfYWRqdXN0bWVudF9nZXRfdmFsdWUoYWRqdXN0bWVudCksID09LCAwLjApOworCisg
ICAgLyogU2luY2Ugd2Via2l0X3dlYl92aWV3X2V4ZWN1dGVfc2NyaXB0IGRvZXMgbm90IHJldHVy
biBhIHZhbHVlLAorICAgICAgIGl0IGlzIGltcG9zc2libGUgdG8ga25vdyBpZiBhbiBpbm5lciBk
b2N1bWVudCBoYXMgZm9jdXMgYWZ0ZXIKKyAgICAgICBhIG5vZGUgb2YgaXQgd2FzIGZvY3VzZWQg
dmlhIC5mb2N1cygpIG1ldGhvZC4KKyAgICAgICBUaGUgY29kZSBiZWxvdyBpcyBhbiB3b3JrYXJv
dW5kOiBpZiB0aGUgbm9kZSBoYXMgZm9jdXMsIGEgc2Nyb2xsCisgICAgICAgYWN0aW9uIGlzIHBl
cmZvcm1lZCBhbmQgYWZ0ZXJ3YXJkIGl0IGlzIGNoZWNrZWQgaWYgdGhlIGFkanVzdG1lbnQKKyAg
ICAgICBoYXMgdG8gYmUgZGlmZmVyZW50IGZyb20gMC4KKyAgICAqLworICAgIGNoYXIgc2NyaXB0
W10gPSAidmFyIGlubmVyRG9jID0gZG9jdW1lbnQuZGVmYXVsdFZpZXcuZnJhbWVzWzBdLmRvY3Vt
ZW50OyBcCisgICAgICAgICAgICAgICAgICAgICBpbm5lckRvYy5nZXRFbGVtZW50QnlJZChcImxp
bmtcIikuZm9jdXMoKTsgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgIGlmIChp
bm5lckRvYy5oYXNGb2N1cygpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICAgICAgICAgICAgICAgICAgd2luZG93LnNjcm9sbEJ5KDAsIDEwMCk7IjsKKworICAgIC8q
IEZvY3VzIGFuIGVsZW1lbnQgdXNpbmcgSmF2YVNjcmlwdCAqLworICAgIHdlYmtpdF93ZWJfdmll
d19leGVjdXRlX3NjcmlwdCh2aWV3LCBzY3JpcHQpOworCisgICAgLyogQWRqdXN0bWVudHMgdXBk
YXRlIGFzeW5jaHJvbm91c2x5LCBzbyB3ZSBtdXN0IHdhaXQgYSBiaXQuICovCisgICAgZ190aW1l
b3V0X2FkZCgxMDAsIHF1aXRfYWZ0ZXJfc2hvcnRfZGVsYXlfY2IsIGxvb3ApOworICAgIGdfbWFp
bl9sb29wX3J1bihsb29wKTsKKworICAgIC8qIE1ha2Ugc3VyZSB0aGUgU2Nyb2xsZWRXaW5kb3cg
bm90aWNlZCB0aGUgc2Nyb2xsICovCisgICAgZ19hc3NlcnRfY21wZmxvYXQoZ3RrX2FkanVzdG1l
bnRfZ2V0X3ZhbHVlKGFkanVzdG1lbnQpLCAhPSwgMC4wKTsKKworICAgIGdfZnJlZSh1cmkpOwor
ICAgIGd0a193aWRnZXRfZGVzdHJveSh3aW5kb3cpOworfQorCitzdGF0aWMgdm9pZCBkb190ZXN0
X3dlYmtpdF93ZWJfdmlld19hZGp1c3RtZW50cyhnYm9vbGVhbiB3aXRoX3BhZ2VfY2FjaGUpCit7
CisgICAgY2hhciogZWZmZWN0aXZlX3VyaSA9IGdfc3RyY29uY2F0KGJhc2VfdXJpLCAiYmlnZGl2
Lmh0bWwiLCBOVUxMKTsKKyAgICBjaGFyKiBzZWNvbmRfdXJpID0gZ19zdHJjb25jYXQoYmFzZV91
cmksICJpZnJhbWUuaHRtbCIsIE5VTEwpOworICAgIEd0a1dpZGdldCogd2luZG93ID0gZ3RrX3dp
bmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7CisgICAgR3RrV2lkZ2V0KiBzY3JvbGxlZF93
aW5kb3cgPSBndGtfc2Nyb2xsZWRfd2luZG93X25ldyhOVUxMLCBOVUxMKTsKKyAgICBXZWJLaXRX
ZWJWaWV3KiB2aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Cisg
ICAgR3RrQWRqdXN0bWVudCogYWRqdXN0bWVudDsKKyAgICBkb3VibGUgbG93ZXI7CisgICAgZG91
YmxlIHVwcGVyOworCisgICAgaWYgKHdpdGhfcGFnZV9jYWNoZSkgeworICAgICAgICBXZWJLaXRX
ZWJTZXR0aW5ncyogc2V0dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHZpZXcp
OworICAgICAgICBnX29iamVjdF9zZXQoc2V0dGluZ3MsICJlbmFibGUtcGFnZS1jYWNoZSIsIFRS
VUUsIE5VTEwpOworICAgIH0KKworICAgIGd0a193aW5kb3dfc2V0X2RlZmF1bHRfc2l6ZShHVEtf
V0lORE9XKHdpbmRvdyksIDQwMCwgMjAwKTsKKworICAgIGd0a19jb250YWluZXJfYWRkKEdUS19D
T05UQUlORVIod2luZG93KSwgc2Nyb2xsZWRfd2luZG93KTsKKyAgICBndGtfY29udGFpbmVyX2Fk
ZChHVEtfQ09OVEFJTkVSKHNjcm9sbGVkX3dpbmRvdyksIEdUS19XSURHRVQodmlldykpOworCisg
ICAgZ3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfcG9saWN5KEdUS19TQ1JPTExFRF9XSU5ET1coc2Ny
b2xsZWRfd2luZG93KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1BP
TElDWV9BVVRPTUFUSUMsIEdUS19QT0xJQ1lfQVVUT01BVElDKTsKKworICAgIGxvb3AgPSBnX21h
aW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisKKyAgICBnX29iamVjdF9jb25uZWN0KEdfT0JKRUNU
KHZpZXcpLAorICAgICAgICAgICAgICAgICAgICAgInNpZ25hbDo6bm90aWZ5Ojpsb2FkLXN0YXR1
cyIsIGlkbGVfcXVpdF9sb29wX2NiLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgTlVMTCk7
CisKKyAgICAvKiBXYWl0IGZvciB3aW5kb3cgdG8gc2hvdyB1cCAqLworICAgIGd0a193aWRnZXRf
c2hvd19hbGwod2luZG93KTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdpbmRvdywgIm1hcC1ldmVu
dCIsCisgICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKG1hcF9ldmVudF9jYiksIGxvb3Ap
OworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIC8qIExvYWQgYSBwYWdlIHdpdGgg
YSBiaWcgZGl2IHRoYXQgd2lsbCBjYXVzZSBzY3JvbGxiYXJzIHRvIGFwcGVhciAqLworICAgIHdl
YmtpdF93ZWJfdmlld19sb2FkX3VyaSh2aWV3LCBlZmZlY3RpdmVfdXJpKTsKKyAgICBnX21haW5f
bG9vcF9ydW4obG9vcCk7CisKKyAgICAvKiBBZGp1c3RtZW50cyB1cGRhdGUgYXN5bmNocm9ub3Vz
bHksIHNvIHdlIG11c3Qgd2FpdCBhIGJpdC4gKi8KKyAgICBnX3RpbWVvdXRfYWRkKDEwMCwgcXVp
dF9hZnRlcl9zaG9ydF9kZWxheV9jYiwgbG9vcCk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3Ap
OworCisgICAgYWRqdXN0bWVudCA9IGd0a19zY3JvbGxlZF93aW5kb3dfZ2V0X3ZhZGp1c3RtZW50
KEdUS19TQ1JPTExFRF9XSU5ET1coc2Nyb2xsZWRfd2luZG93KSk7CisgICAgZ19hc3NlcnRfY21w
ZmxvYXQoZ3RrX2FkanVzdG1lbnRfZ2V0X3ZhbHVlKGFkanVzdG1lbnQpLCA9PSwgMC4wKTsKKwor
ICAgIGxvd2VyID0gZ3RrX2FkanVzdG1lbnRfZ2V0X2xvd2VyKGFkanVzdG1lbnQpOworICAgIHVw
cGVyID0gZ3RrX2FkanVzdG1lbnRfZ2V0X3VwcGVyKGFkanVzdG1lbnQpOworCisgICAgLyogU2Ny
b2xsIHRoZSB2aWV3IHVzaW5nIEphdmFTY3JpcHQgKi8KKyAgICB3ZWJraXRfd2ViX3ZpZXdfZXhl
Y3V0ZV9zY3JpcHQodmlldywgIndpbmRvdy5zY3JvbGxCeSgwLCAxMDApIik7CisKKyAgICAvKiBB
ZGp1c3RtZW50cyB1cGRhdGUgYXN5bmNocm9ub3VzbHksIHNvIHdlIG11c3Qgd2FpdCBhIGJpdC4g
Ki8KKyAgICBnX3RpbWVvdXRfYWRkKDEwMCwgcXVpdF9hZnRlcl9zaG9ydF9kZWxheV9jYiwgbG9v
cCk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgLyogTWFrZSBzdXJlIHRoZSBT
Y3JvbGxlZFdpbmRvdyBub3RpY2VkIHRoZSBzY3JvbGwgKi8KKyAgICBnX2Fzc2VydF9jbXBmbG9h
dChndGtfYWRqdXN0bWVudF9nZXRfdmFsdWUoYWRqdXN0bWVudCksID09LCAxMDAuMCk7CisKKyAg
ICAvKiBMb2FkIGEgc2Vjb25kIFVSSSAqLworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh2
aWV3LCBzZWNvbmRfdXJpKTsKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICAvKiBU
aGUgcGFnZSBsb2FkZWQgYnV0IHRoZSBhZGp1c3RtZW50cyBtYXkgbm90IGJlIHVwZGF0ZWQgeWV0
LiBXYWl0IGEgYml0LiAqLworICAgIGdfdGltZW91dF9hZGQoMTAwLCBxdWl0X2FmdGVyX3Nob3J0
X2RlbGF5X2NiLCBsb29wKTsKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICAvKiBN
YWtlIHN1cmUgdGhlIHNjcm9sbGJhciBoYXMgYmVlbiByZXNldCAqLworICAgIGdfYXNzZXJ0X2Nt
cGZsb2F0KGd0a19hZGp1c3RtZW50X2dldF92YWx1ZShhZGp1c3RtZW50KSwgPT0sIDAuMCk7CisK
KyAgICAvKiBHbyBiYWNrICovCisgICAgd2Via2l0X3dlYl92aWV3X2dvX2JhY2sodmlldyk7CisK
KyAgICAvKiBXaGVuIHVzaW5nIHBhZ2UgY2FjaGUsIGdvX2JhY2sgd2lsbCByZXR1cm4gc3luY3Jv
bm91c2x5ICovCisgICAgaWYgKCF3aXRoX3BhZ2VfY2FjaGUpCisgICAgICAgIGdfbWFpbl9sb29w
X3J1bihsb29wKTsKKworICAgIC8qIE1ha2Ugc3VyZSBHVEsrIGhhcyB0aW1lIHRvIHByb2Nlc3Mg
dGhlIGNoYW5nZXMgaW4gc2l6ZSwgZm9yIHRoZSBhZGp1c21lbnRzICovCisgICAgd2hpbGUgKGd0
a19ldmVudHNfcGVuZGluZygpKQorICAgICAgICBndGtfbWFpbl9pdGVyYXRpb24oKTsKKworICAg
IC8qIE1ha2Ugc3VyZSB1cHBlciBhbmQgbG93ZXIgYm91bmRzIGhhdmUgYmVlbiByZXN0b3JlZCBj
b3JyZWN0bHkgKi8KKyAgICBnX2Fzc2VydF9jbXBmbG9hdChsb3dlciwgPT0sIGd0a19hZGp1c3Rt
ZW50X2dldF9sb3dlcihhZGp1c3RtZW50KSk7CisgICAgZ19hc3NlcnRfY21wZmxvYXQodXBwZXIs
ID09LCBndGtfYWRqdXN0bWVudF9nZXRfdXBwZXIoYWRqdXN0bWVudCkpOworICAgIGdfYXNzZXJ0
X2NtcGZsb2F0KGd0a19hZGp1c3RtZW50X2dldF92YWx1ZShhZGp1c3RtZW50KSwgPT0sIDEwMC4w
KTsKKworICAgIGdfZnJlZShlZmZlY3RpdmVfdXJpKTsKKyAgICBnX2ZyZWUoc2Vjb25kX3VyaSk7
CisKKyAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kod2luZG93KTsKK30KKworc3RhdGljIHZvaWQgdGVz
dF93ZWJraXRfd2ViX3ZpZXdfYWRqdXN0bWVudHMoKQoreworICAgIC8qIFRlc3QgdGhpcyB3aXRo
IHBhZ2UgY2FjaGUgZGlzYWJsZWQsIGFuZCBlbmFibGVkLiAqLworICAgIGRvX3Rlc3Rfd2Via2l0
X3dlYl92aWV3X2FkanVzdG1lbnRzKEZBTFNFKTsKKyAgICBkb190ZXN0X3dlYmtpdF93ZWJfdmll
d19hZGp1c3RtZW50cyhUUlVFKTsKK30KKworZ2Jvb2xlYW4gZGVsYXllZF9kZXN0cm95KGdwb2lu
dGVyIGRhdGEpCit7CisgICAgZ3RrX3dpZGdldF9kZXN0cm95KEdUS19XSURHRVQoZGF0YSkpOwor
ICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7CisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0
aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfdmlld19kZXN0cm95KCkKK3sKKyAgICBHdGtXaWRnZXQq
IHdpbmRvdzsKKyAgICBHdGtXaWRnZXQqIHdlYl92aWV3OworCisgICAgd2luZG93ID0gZ3RrX3dp
bmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7CisgICAgd2ViX3ZpZXcgPSB3ZWJraXRfd2Vi
X3ZpZXdfbmV3KCk7CisKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRv
dyksIHdlYl92aWV3KTsKKworICAgIGd0a193aWRnZXRfc2hvd19hbGwod2luZG93KTsKKworICAg
IGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisKKyAgICBnX3NpZ25hbF9jb25u
ZWN0KHdpbmRvdywgIm1hcC1ldmVudCIsCisgICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNL
KG1hcF9ldmVudF9jYiksIGxvb3ApOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAg
IGdfaWRsZV9hZGQoZGVsYXllZF9kZXN0cm95LCB3ZWJfdmlldyk7CisgICAgZ19tYWluX2xvb3Bf
cnVuKGxvb3ApOworCisgICAgZ3RrX3dpZGdldF9kZXN0cm95KHdpbmRvdyk7Cit9CisKK3N0YXRp
YyB2b2lkIHRlc3Rfd2Via2l0X3dlYl92aWV3X3dpbmRvd19mZWF0dXJlcygpCit7CisgICAgR3Rr
V2lkZ2V0KiB3aW5kb3c7CisgICAgR3RrV2lkZ2V0KiB3ZWJfdmlldzsKKyAgICAKKyAgICB3aW5k
b3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKKyAgICB3ZWJfdmlldyA9
IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKKyAgICAKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtf
Q09OVEFJTkVSKHdpbmRvdyksIHdlYl92aWV3KTsKKyAgICAKKyAgICBndGtfd2lkZ2V0X3Nob3df
YWxsKHdpbmRvdyk7CisgICAgCisgICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVF
KTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2luZG93LCAibWFwLWV2ZW50IiwKKyAgICAgICAg
ICAgICAgICAgICAgIEdfQ0FMTEJBQ0sobWFwX2V2ZW50X2NiKSwgbG9vcCk7CisgICAgZ19tYWlu
X2xvb3BfcnVuKGxvb3ApOworICAgIAorICAgIC8qIEJ1ZyAjMzYxNDQgKi8KKyAgICBnX29iamVj
dF9zZXQoR19PQkpFQ1Qod2ViX3ZpZXcpLCAid2luZG93LWZlYXR1cmVzIiwgTlVMTCwgTlVMTCk7
CisgICAgCisgICAgZ3RrX3dpZGdldF9kZXN0cm95KHdpbmRvdyk7Cit9ICAgIAorCitzdGF0aWMg
dm9pZCB0ZXN0X3dlYmtpdF93ZWJfdmlld19pbl9vZmZzY3JlZW5fd2luZG93X2RvZXNfbm90X2Ny
YXNoKCkKK3sKKyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworCisgICAg
R3RrV2lkZ2V0ICp3aW5kb3cgPSBndGtfb2Zmc2NyZWVuX3dpbmRvd19uZXcoKTsKKyAgICBHdGtX
aWRnZXQgKndlYl92aWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygpOworCisgICAgZ3RrX2NvbnRh
aW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB3ZWJfdmlldyk7CisgICAgZ3RrX3dpZGdl
dF9zaG93X2FsbCh3aW5kb3cpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViX3ZpZXcsICJub3Rp
Znk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhpZGxlX3F1aXRfbG9vcF9jYiksIE5VTEwpOwor
ICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaShXRUJLSVRfV0VCX1ZJRVcod2ViX3ZpZXcpLCBi
YXNlX3VyaSk7CisKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICBndGtfd2lkZ2V0
X2Rlc3Ryb3kod2luZG93KTsKKyAgICBnX21haW5fbG9vcF91bnJlZihsb29wKTsKK30KKworc3Rh
dGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3ZpZXdfZG9lc19ub3Rfc3RlYWxfZm9jdXMoKQorewor
ICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisKKyAgICBHdGtXaWRnZXQg
KndpbmRvdyA9IGd0a19vZmZzY3JlZW5fd2luZG93X25ldygpOworICAgIEd0a1dpZGdldCAqd2Vi
VmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKKyAgICBHdGtXaWRnZXQgKmVudHJ5ID0gZ3Rr
X2VudHJ5X25ldygpOworCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICBHdGtXaWRnZXQg
KmJveCA9IGd0a19oYm94X25ldyhGQUxTRSwgMCk7CisjZWxzZQorICAgIEd0a1dpZGdldCAqYm94
ID0gZ3RrX2JveF9uZXcoR1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUwsIDApOworI2VuZGlmCisK
KyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGJveCksIHdlYlZpZXcpOworICAg
IGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIoYm94KSwgZW50cnkpOworICAgIGd0a19j
b250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgYm94KTsKKyAgICBndGtfd2lkZ2V0
X3Nob3dfYWxsKHdpbmRvdyk7CisKKyAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMoZW50cnkpOwor
ICAgIGdfYXNzZXJ0KGd0a193aWRnZXRfaXNfZm9jdXMoZW50cnkpKTsKKworICAgIGdfc2lnbmFs
X2Nvbm5lY3Qod2ViVmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLCBHX0NBTExCQUNLKGlkbGVf
cXVpdF9sb29wX2NiKSwgTlVMTCk7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfaHRtbF9zdHJp
bmcoV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpLAorICAgICAgICAiPGh0bWw+PGJvZHk+IgorICAg
ICAgICAiICAgIDxpbnB1dCBpZD1cImVudHJ5XCIgdHlwZT1cInRleHRcIi8+IgorICAgICAgICAi
ICAgIDxzY3JpcHQ+IgorICAgICAgICAiICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChc
ImVudHJ5XCIpLmZvY3VzKCk7IgorICAgICAgICAiICAgIDwvc2NyaXB0PiIKKyAgICAgICAgIjwv
Ym9keT48L2h0bWw+IiwgImZpbGU6Ly8iKTsKKworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsK
KworICAgIGdfYXNzZXJ0KGd0a193aWRnZXRfaXNfZm9jdXMoZW50cnkpKTsKKworICAgIGd0a193
aWRnZXRfZGVzdHJveSh3aW5kb3cpOworICAgIGdfbWFpbl9sb29wX3VucmVmKGxvb3ApOworfQor
CitzdGF0aWMgZ2Jvb2xlYW4gZW1pdEtleVN0cm9rZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQor
eworICAgIEdka0V2ZW50KiBwcmVzc0V2ZW50ID0gZ2RrX2V2ZW50X25ldyhHREtfS0VZX1BSRVNT
KTsKKyAgICBwcmVzc0V2ZW50LT5rZXkua2V5dmFsID0gR0RLX0tFWV9mOworICAgIEdka1dpbmRv
dyogd2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KEdUS19XSURHRVQod2ViVmlldykpOwor
ICAgIHByZXNzRXZlbnQtPmtleS53aW5kb3cgPSB3aW5kb3c7CisgICAgZ19vYmplY3RfcmVmKHBy
ZXNzRXZlbnQtPmtleS53aW5kb3cpOworCisjaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAg
R2RrRGV2aWNlTWFuYWdlciogbWFuYWdlciA9IGdka19kaXNwbGF5X2dldF9kZXZpY2VfbWFuYWdl
cihnZGtfd2luZG93X2dldF9kaXNwbGF5KHdpbmRvdykpOworICAgIGdka19ldmVudF9zZXRfZGV2
aWNlKHByZXNzRXZlbnQsIGdka19kZXZpY2VfbWFuYWdlcl9nZXRfY2xpZW50X3BvaW50ZXIobWFu
YWdlcikpOworI2VuZGlmCisKKyAgICAvLyBXaGVuIHN5bnRoZXNpemluZyBhbiBldmVudCwgYW4g
aW52YWxpZCBoYXJkd2FyZV9rZXljb2RlIHZhbHVlCisgICAgLy8gY2FuIGNhdXNlIGl0IHRvIGJl
IGJhZGx5IHByb2Nlc3NlZCBieSBHdGsrLgorICAgIEdka0tleW1hcEtleSoga2V5czsKKyAgICBn
aW50IG5fa2V5czsKKyAgICBpZiAoZ2RrX2tleW1hcF9nZXRfZW50cmllc19mb3Jfa2V5dmFsKGdk
a19rZXltYXBfZ2V0X2RlZmF1bHQoKSwgR0RLX0tFWV9mLCAma2V5cywgJm5fa2V5cykpIHsKKyAg
ICAgICAgcHJlc3NFdmVudC0+a2V5LmhhcmR3YXJlX2tleWNvZGUgPSBrZXlzWzBdLmtleWNvZGU7
CisgICAgICAgIGdfZnJlZShrZXlzKTsKKyAgICB9CisKKyAgICBHZGtFdmVudCogcmVsZWFzZUV2
ZW50ID0gZ2RrX2V2ZW50X2NvcHkocHJlc3NFdmVudCk7CisgICAgZ3RrX21haW5fZG9fZXZlbnQo
cHJlc3NFdmVudCk7CisgICAgZ2RrX2V2ZW50X2ZyZWUocHJlc3NFdmVudCk7CisgICAgcmVsZWFz
ZUV2ZW50LT5rZXkudHlwZSA9IEdES19LRVlfUkVMRUFTRTsKKyAgICBndGtfbWFpbl9kb19ldmVu
dChyZWxlYXNlRXZlbnQpOworICAgIGdka19ldmVudF9mcmVlKHJlbGVhc2VFdmVudCk7CisKKyAg
ICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBlbnRlcmluZ19mdWxsc2NyZWVu
X2NiKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEdPYmplY3QqIGVsZW1lbnQsIGdib29sZWFuIGJs
b2NrZWQpCit7CisgICAgaWYgKGJsb2NrZWQpCisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobG9v
cCk7CisgICAgZWxzZQorICAgICAgICBnX3RpbWVvdXRfYWRkKDIwMCwgKEdTb3VyY2VGdW5jKSBl
bWl0S2V5U3Ryb2tlLCB3ZWJWaWV3KTsKKyAgICByZXR1cm4gYmxvY2tlZDsKK30KKworc3RhdGlj
IGdib29sZWFuIGxlYXZpbmdfZnVsbHNjcmVlbl9jYihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBH
T2JqZWN0KiBlbGVtZW50LCBncG9pbnRlciBkYXRhKQoreworICAgIGdfbWFpbl9sb29wX3F1aXQo
bG9vcCk7CisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93
ZWJfdmlld19mdWxsc2NyZWVuKGdjb25zdHBvaW50ZXIgYmxvY2tlZCkKK3sKKyAgICBHdGtXaWRn
ZXQqIHdpbmRvdzsKKyAgICBHdGtXaWRnZXQqIHdlYl92aWV3OworICAgIFdlYktpdFdlYlNldHRp
bmdzICpzZXR0aW5nczsKKworICAgIHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1df
VE9QTEVWRUwpOworICAgIHdlYl92aWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygpOworCisgICAg
c2V0dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKFdFQktJVF9XRUJfVklFVyh3
ZWJfdmlldykpOworICAgIGdfb2JqZWN0X3NldChzZXR0aW5ncywgImVuYWJsZS1mdWxsc2NyZWVu
IiwgVFJVRSwgTlVMTCk7CisgICAgd2Via2l0X3dlYl92aWV3X3NldF9zZXR0aW5ncyhXRUJLSVRf
V0VCX1ZJRVcod2ViX3ZpZXcpLCBzZXR0aW5ncyk7CisKKyAgICBndGtfY29udGFpbmVyX2FkZChH
VEtfQ09OVEFJTkVSKHdpbmRvdyksIHdlYl92aWV3KTsKKworICAgIGd0a193aWRnZXRfc2hvd19h
bGwod2luZG93KTsKKworICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisK
KyAgICBnX3NpZ25hbF9jb25uZWN0KHdlYl92aWV3LCAiZW50ZXJpbmctZnVsbHNjcmVlbiIsIEdf
Q0FMTEJBQ0soZW50ZXJpbmdfZnVsbHNjcmVlbl9jYiksIChncG9pbnRlcikgYmxvY2tlZCk7Cisg
ICAgZ19zaWduYWxfY29ubmVjdCh3ZWJfdmlldywgImxlYXZpbmctZnVsbHNjcmVlbiIsIEdfQ0FM
TEJBQ0sobGVhdmluZ19mdWxsc2NyZWVuX2NiKSwgTlVMTCk7CisKKyAgICB3ZWJraXRfd2ViX3Zp
ZXdfbG9hZF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVXKHdlYl92aWV3KSwgIjxodG1sPjxib2R5PiIK
KyAgICAgICAgICAgICAgICAgICAiPHNjcmlwdD4iCisgICAgICAgICAgICAgICAgICAgInZhciBl
dmVudE5hbWUgPSAna2V5cHJlc3MnOyIKKyAgICAgICAgICAgICAgICAgICAiZG9jdW1lbnQuYWRk
RXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGZ1bmN0aW9uICgpIHsiCisgICAgICAgICAgICAgICAg
ICAgIiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQud2Via2l0UmVxdWVzdEZ1bGxTY3JlZW4o
KTsiCisgICAgICAgICAgICAgICAgICAgIn0sIGZhbHNlKTsiCisgICAgICAgICAgICAgICAgICAg
Ijwvc2NyaXB0PjwvYm9keT48L2h0bWw+IiwgTlVMTCwgTlVMTCwgTlVMTCk7CisKKyAgICBnX3Rp
bWVvdXRfYWRkKDEwMCwgKEdTb3VyY2VGdW5jKSBlbWl0S2V5U3Ryb2tlLCBXRUJLSVRfV0VCX1ZJ
RVcod2ViX3ZpZXcpKTsKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICBndGtfd2lk
Z2V0X2Rlc3Ryb3kod2luZG93KTsKK30KKworc3RhdGljIGdib29sZWFuIGNoZWNrTWltZVR5cGVG
b3JGaWx0ZXIoR3RrRmlsZUZpbHRlciogZmlsdGVyLCBjb25zdCBnY2hhciogbWltZVR5cGUpCit7
CisgICAgR3RrRmlsZUZpbHRlckluZm8gZmlsdGVyX2luZm87CisgICAgZmlsdGVyX2luZm8uY29u
dGFpbnMgPSBHVEtfRklMRV9GSUxURVJfTUlNRV9UWVBFOworICAgIGZpbHRlcl9pbmZvLm1pbWVf
dHlwZSA9IG1pbWVUeXBlOworICAgIHJldHVybiBndGtfZmlsZV9maWx0ZXJfZmlsdGVyKGZpbHRl
ciwgJmZpbHRlcl9pbmZvKTsKK30KKworc3RhdGljIGdib29sZWFuIHJ1bkZpbGVDaG9vc2VyQ2JO
b011bHRpc2VsTm9NaW1lKFdlYktpdFdlYlZpZXcqIHdlYnZpZXcsIFdlYktpdEZpbGVDaG9vc2Vy
UmVxdWVzdCogcmVxdWVzdCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBnX2Fzc2VydCghd2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RfbXVsdGlwbGUocmVxdWVzdCkpOworCisg
ICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBtaW1lVHlwZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3Jl
cXVlc3RfZ2V0X21pbWVfdHlwZXMocmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIW1pbWVUeXBlcyk7
CisgICAgR3RrRmlsZUZpbHRlciogZmlsdGVyID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X2dldF9taW1lX3R5cGVzX2ZpbHRlcihyZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghZmlsdGVyKTsK
KworICAgIGNvbnN0IGdjaGFyKiBjb25zdCogc2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9maWxlX2No
b29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMocmVxdWVzdCk7CisgICAgZ19hc3NlcnQo
IXNlbGVjdGVkRmlsZXMpOworCisgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKKyAgICByZXR1
cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuIHJ1bkZpbGVDaG9vc2VyQ2JNdWx0aXNlbE5v
TWltZShXZWJLaXRXZWJWaWV3KiB3ZWJ2aWV3LCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJl
cXVlc3QsIGdwb2ludGVyIGRhdGEpCit7CisgICAgZ19hc3NlcnQod2Via2l0X2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X2dldF9zZWxlY3RfbXVsdGlwbGUocmVxdWVzdCkpOworCisgICAgY29uc3QgZ2No
YXIqIGNvbnN0KiBtaW1lVHlwZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21p
bWVfdHlwZXMocmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIW1pbWVUeXBlcyk7CisgICAgR3RrRmls
ZUZpbHRlciogZmlsdGVyID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5
cGVzX2ZpbHRlcihyZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghZmlsdGVyKTsKKyAgICBjb25zdCBn
Y2hhciogY29uc3QqIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rf
Z2V0X3NlbGVjdGVkX2ZpbGVzKHJlcXVlc3QpOworICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZpbGVz
KTsKKworICAgIC8vIFNlbGVjdCBzb21lIGZpbGVzLgorICAgIGNvbnN0IGdjaGFyKiBmaWxlc1Rv
U2VsZWN0WzRdID0geyAiL2ZvbyIsICIvZm9vL2JhciIsICIvZm9vL2Jhci9iYXoiLCAwIH07Cisg
ICAgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3NlbGVjdF9maWxlcyhyZXF1ZXN0LCBmaWxl
c1RvU2VsZWN0KTsKKworICAgIC8vIENoZWNrIHRoZSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBqdXN0
IHNlbGVjdGVkLgorICAgIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVl
c3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKHJlcXVlc3QpOworICAgIGdfYXNzZXJ0KHNlbGVjdGVkRmls
ZXMpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzBdLCA9PSwgIi9mb28iKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1sxXSwgPT0sICIvZm9vL2JhciIpOwor
ICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzJdLCA9PSwgIi9mb28vYmFyL2JheiIp
OworICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZpbGVzWzNdKTsKKworICAgIGdfbWFpbl9sb29wX3F1
aXQobG9vcCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBydW5GaWxl
Q2hvb3NlckNiU2VsZWN0aW9uUmV0YWluZWQoV2ViS2l0V2ViVmlldyogd2VidmlldywgV2ViS2l0
RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0LCBncG9pbnRlciBkYXRhKQoreworICAgIGNvbnN0
IGdjaGFyKiBjb25zdCogc2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVz
dF9nZXRfc2VsZWN0ZWRfZmlsZXMocmVxdWVzdCk7CisgICAgZ19hc3NlcnQoc2VsZWN0ZWRGaWxl
cyk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMF0sID09LCAiL2ZvbyIpOwor
ICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzFdLCA9PSwgIi9mb28vYmFyIik7Cisg
ICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMl0sID09LCAiL2Zvby9iYXIvYmF6Iik7
CisgICAgZ19hc3NlcnQoIXNlbGVjdGVkRmlsZXNbM10pOworCisgICAgZ19tYWluX2xvb3BfcXVp
dChsb29wKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuIHJ1bkZpbGVD
aG9vc2VyQ2JOb011bHRpc2VsQWNjZXB0VHlwZXMoV2ViS2l0V2ViVmlldyogd2VidmlldywgV2Vi
S2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0LCBncG9pbnRlciBkYXRhKQoreworICAgIGdf
YXNzZXJ0KCF3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdF9tdWx0aXBsZShy
ZXF1ZXN0KSk7CisKKyAgICBjb25zdCBnY2hhciogY29uc3QqIG1pbWVUeXBlcyA9IHdlYmtpdF9m
aWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcyhyZXF1ZXN0KTsKKyAgICBnX2Fzc2Vy
dChtaW1lVHlwZXMpOworICAgIGdfYXNzZXJ0X2NtcHN0cihtaW1lVHlwZXNbMF0sID09LCAiYXVk
aW8vKiIpOworICAgIGdfYXNzZXJ0X2NtcHN0cihtaW1lVHlwZXNbMV0sID09LCAidmlkZW8vKiIp
OworICAgIGdfYXNzZXJ0X2NtcHN0cihtaW1lVHlwZXNbMl0sID09LCAiaW1hZ2UvKiIpOworICAg
IGdfYXNzZXJ0KCFtaW1lVHlwZXNbM10pOworCisgICAgR3RrRmlsZUZpbHRlciogZmlsdGVyID0g
d2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcihyZXF1ZXN0
KTsKKyAgICBnX2Fzc2VydChHVEtfSVNfRklMRV9GSUxURVIoZmlsdGVyKSk7CisgICAgZ19hc3Nl
cnQoY2hlY2tNaW1lVHlwZUZvckZpbHRlcihmaWx0ZXIsICJhdWRpby8qIikpOworICAgIGdfYXNz
ZXJ0KGNoZWNrTWltZVR5cGVGb3JGaWx0ZXIoZmlsdGVyLCAidmlkZW8vKiIpKTsKKyAgICBnX2Fz
c2VydChjaGVja01pbWVUeXBlRm9yRmlsdGVyKGZpbHRlciwgImltYWdlLyoiKSk7CisKKyAgICBj
b25zdCBnY2hhciogY29uc3QqIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3Jl
cXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKHJlcXVlc3QpOworICAgIGdfYXNzZXJ0KCFzZWxlY3Rl
ZEZpbGVzKTsKKworICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7CisgICAgcmV0dXJuIFRSVUU7
Cit9CisKK3ZvaWQgZG9Nb3VzZUJ1dHRvbkV2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVu
dFR5cGUgZXZlbnRUeXBlLCBpbnQgeCwgaW50IHksIHVuc2lnbmVkIGludCBidXR0b24sIHVuc2ln
bmVkIGludCBtb2RpZmllcnMpCit7CisgICAgZ19hc3NlcnQoZ3RrX3dpZGdldF9nZXRfcmVhbGl6
ZWQod2lkZ2V0KSk7CisKKyAgICBHZGtFdmVudCogZXZlbnQgPSBnZGtfZXZlbnRfbmV3KGV2ZW50
VHlwZSk7CisgICAgZXZlbnQtPmJ1dHRvbi53aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3co
d2lkZ2V0KTsKKyAgICBnX29iamVjdF9yZWYoZXZlbnQtPmJ1dHRvbi53aW5kb3cpOworCisgICAg
ZXZlbnQtPmJ1dHRvbi50aW1lID0gR0RLX0NVUlJFTlRfVElNRTsKKyAgICBldmVudC0+YnV0dG9u
LnggPSB4OworICAgIGV2ZW50LT5idXR0b24ueSA9IHk7CisgICAgZXZlbnQtPmJ1dHRvbi5heGVz
ID0gMDsKKyAgICBldmVudC0+YnV0dG9uLnN0YXRlID0gbW9kaWZpZXJzOworICAgIGV2ZW50LT5i
dXR0b24uYnV0dG9uID0gYnV0dG9uOworCisjaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAg
ZXZlbnQtPmJ1dHRvbi5kZXZpY2UgPSBnZGtfZGV2aWNlX21hbmFnZXJfZ2V0X2NsaWVudF9wb2lu
dGVyKGdka19kaXNwbGF5X2dldF9kZXZpY2VfbWFuYWdlcihndGtfd2lkZ2V0X2dldF9kaXNwbGF5
KHdpZGdldCkpKTsKKyNlbmRpZgorCisgICAgaW50IHhSb290LCB5Um9vdDsKKyAgICBnZGtfd2lu
ZG93X2dldF9yb290X2Nvb3JkcyhndGtfd2lkZ2V0X2dldF93aW5kb3cod2lkZ2V0KSwgeCwgeSwg
JnhSb290LCAmeVJvb3QpOworICAgIGV2ZW50LT5idXR0b24ueF9yb290ID0geFJvb3Q7CisgICAg
ZXZlbnQtPmJ1dHRvbi55X3Jvb3QgPSB5Um9vdDsKKyAgICBndGtfbWFpbl9kb19ldmVudChldmVu
dCk7Cit9CisKK3N0YXRpYyB2b2lkIGNsaWNrTW91c2VCdXR0b24oR3RrV2lkZ2V0KiB3aWRnZXQs
IGludCB4LCBpbnQgeSwgdW5zaWduZWQgaW50IGJ1dHRvbiwgdW5zaWduZWQgaW50IG1vZGlmaWVy
cykKK3sKKyAgICBkb01vdXNlQnV0dG9uRXZlbnQod2lkZ2V0LCBHREtfQlVUVE9OX1BSRVNTLCB4
LCB5LCBidXR0b24sIG1vZGlmaWVycyk7CisgICAgZG9Nb3VzZUJ1dHRvbkV2ZW50KHdpZGdldCwg
R0RLX0JVVFRPTl9SRUxFQVNFLCB4LCB5LCBidXR0b24sIG1vZGlmaWVycyk7Cit9CisKK3N0YXRp
YyBnYm9vbGVhbiBjbGlja01vdXNlQnV0dG9uQW5kV2FpdEZvckZpbGVDaG9vc2VyUmVxdWVzdChX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQoreworICAgIGNsaWNrTW91c2VCdXR0b24oR1RLX1dJREdF
VCh3ZWJWaWV3KSwgNSwgNSwgMSwgMCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2
b2lkIHRlc3Rfd2Via2l0X3dlYl92aWV3X2ZpbGVfY2hvb3NlcigpCit7CisgICAgY29uc3QgZ2No
YXIqIGh0bWxGb3JtYXRCYXNlID0gIjxodG1sPjxib2R5PiIKKyAgICAgICAgICAgICI8aW5wdXQg
c3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MDttYXJnaW46MDtwYWRkaW5nOjAn
IHR5cGU9J2ZpbGUnICVzLz4iCisgICAgICAgICAgICAiPC9ib2R5PjwvaHRtbD4iOworCisgICAg
R3RrV2lkZ2V0KiB3aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsK
KyAgICBHdGtXaWRnZXQqIHdlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7CisgICAgZ3Rr
X2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB3ZWJWaWV3KTsKKyAgICBndGtf
d2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7CisKKyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5V
TEwsIFRSVUUpOworCisgICAgLy8gTXVsdGlwbGUgc2VsZWN0aW9ucyBub3QgYWxsb3dlZCwgbm8g
TUlNRSBmaWx0ZXJpbmcuCisgICAgZ3Vsb25nIGhhbmRsZXIgPSBnX3NpZ25hbF9jb25uZWN0KHdl
YlZpZXcsICJydW4tZmlsZS1jaG9vc2VyIiwgR19DQUxMQkFDSyhydW5GaWxlQ2hvb3NlckNiTm9N
dWx0aXNlbE5vTWltZSksIE5VTEwpOworICAgIGdjaGFyKiBodG1sRm9ybWF0ID0gZ19zdHJkdXBf
cHJpbnRmKGh0bWxGb3JtYXRCYXNlLCAiIik7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3Ry
aW5nKFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3KSwgaHRtbEZvcm1hdCwgTlVMTCwgTlVMTCwgTlVM
TCk7CisgICAgZ19mcmVlKGh0bWxGb3JtYXQpOworCisgICAgZ190aW1lb3V0X2FkZCgxMDAsIChH
U291cmNlRnVuYykgY2xpY2tNb3VzZUJ1dHRvbkFuZFdhaXRGb3JGaWxlQ2hvb3NlclJlcXVlc3Qs
IFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3KSk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwor
CisgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KHdlYlZpZXcsIGhhbmRsZXIpOworCisg
ICAgLy8gTXVsdGlwbGUgc2VsZWN0aW9ucyBhbGxvd2VkLCBubyBNSU1FIGZpbHRlcmluZywgc29t
ZSBwcmUtc2VsZWN0ZWQgZmlsZXMuCisgICAgaGFuZGxlciA9IGdfc2lnbmFsX2Nvbm5lY3Qod2Vi
VmlldywgInJ1bi1maWxlLWNob29zZXIiLCBHX0NBTExCQUNLKHJ1bkZpbGVDaG9vc2VyQ2JNdWx0
aXNlbE5vTWltZSksIE5VTEwpOworICAgIGh0bWxGb3JtYXQgPSBnX3N0cmR1cF9wcmludGYoaHRt
bEZvcm1hdEJhc2UsICJtdWx0aXBsZSIpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmlu
ZyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldyksIGh0bWxGb3JtYXQsIE5VTEwsIE5VTEwsIE5VTEwp
OworICAgIGdfZnJlZShodG1sRm9ybWF0KTsKKworICAgIGdfdGltZW91dF9hZGQoMTAwLCAoR1Nv
dXJjZUZ1bmMpIGNsaWNrTW91c2VCdXR0b25BbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0LCBX
RUJLSVRfV0VCX1ZJRVcod2ViVmlldykpOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKwor
ICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdCh3ZWJWaWV3LCBoYW5kbGVyKTsKKworICAg
IC8vIFBlcmZvcm0gYW5vdGhlciByZXF1ZXN0IHRvIGNoZWNrIGlmIHRoZSBsaXN0IG9mIGZpbGVz
IHNlbGVjdGVkCisgICAgLy8gaW4gdGhlIHByZXZpb3VzIHN0ZXAgYXBwZWFycyBub3cgYXMgcGFy
dCBvZiB0aGUgbmV3IHJlcXVlc3QuCisgICAgaGFuZGxlciA9IGdfc2lnbmFsX2Nvbm5lY3Qod2Vi
VmlldywgInJ1bi1maWxlLWNob29zZXIiLCBHX0NBTExCQUNLKHJ1bkZpbGVDaG9vc2VyQ2JTZWxl
Y3Rpb25SZXRhaW5lZCksIE5VTEwpOworICAgIGdfdGltZW91dF9hZGQoMTAwLCAoR1NvdXJjZUZ1
bmMpIGNsaWNrTW91c2VCdXR0b25BbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0LCBXRUJLSVRf
V0VCX1ZJRVcod2ViVmlldykpOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIGdf
c2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdCh3ZWJWaWV3LCBoYW5kbGVyKTsKKworICAgIC8vIE11
bHRpcGxlIHNlbGVjdGlvbnMgbm90IGFsbG93ZWQsIG9ubHkgYWNjZXB0IGltYWdlcywgYXVkaW8g
YW5kIHZpZGVvIGZpbGVzLgorICAgIGhhbmRsZXIgPSBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcs
ICJydW4tZmlsZS1jaG9vc2VyIiwgR19DQUxMQkFDSyhydW5GaWxlQ2hvb3NlckNiTm9NdWx0aXNl
bEFjY2VwdFR5cGVzKSwgTlVMTCk7CisgICAgaHRtbEZvcm1hdCA9IGdfc3RyZHVwX3ByaW50Ziho
dG1sRm9ybWF0QmFzZSwgImFjY2VwdD0nYXVkaW8vKix2aWRlby8qLGltYWdlLyonIik7CisgICAg
d2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3KSwgaHRt
bEZvcm1hdCwgTlVMTCwgTlVMTCwgTlVMTCk7CisgICAgZ19mcmVlKGh0bWxGb3JtYXQpOworCisg
ICAgZ190aW1lb3V0X2FkZCgxMDAsIChHU291cmNlRnVuYykgY2xpY2tNb3VzZUJ1dHRvbkFuZFdh
aXRGb3JGaWxlQ2hvb3NlclJlcXVlc3QsIFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3KSk7CisgICAg
Z19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0
KHdlYlZpZXcsIGhhbmRsZXIpOworICAgIGd0a193aWRnZXRfZGVzdHJveSh3aW5kb3cpOworfQor
CitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfdmlld19zb3VyY2VfbW9kZSgpCit7CisgICAg
R3RrV2lkZ2V0KiB3ZWJfdmlldzsKKworICAgIHdlYl92aWV3ID0gd2Via2l0X3dlYl92aWV3X25l
dygpOworCisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklFVyh3
ZWJfdmlldyksICI8aHRtbD48Ym9keT48L2JvZHk+PC9odG1sPiIsIE5VTEwsIE5VTEwsIE5VTEwp
OworCisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19nZXRfdmlld19zb3VyY2VfbW9kZShX
RUJLSVRfV0VCX1ZJRVcod2ViX3ZpZXcpKSk7CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X3Zp
ZXdfc291cmNlX21vZGUoV0VCS0lUX1dFQl9WSUVXKHdlYl92aWV3KSwgVFJVRSk7CisKKyAgICBn
X2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3ZpZXdfc291cmNlX21vZGUoV0VCS0lUX1dFQl9W
SUVXKHdlYl92aWV3KSkpOworCisgICAgd2Via2l0X3dlYl92aWV3X3NldF92aWV3X3NvdXJjZV9t
b2RlKFdFQktJVF9XRUJfVklFVyh3ZWJfdmlldyksIEZBTFNFKTsKKworICAgIGdfYXNzZXJ0KCF3
ZWJraXRfd2ViX3ZpZXdfZ2V0X3ZpZXdfc291cmNlX21vZGUoV0VCS0lUX1dFQl9WSUVXKHdlYl92
aWV3KSkpOworCisgICAgZ3RrX3dpZGdldF9kZXN0cm95KHdlYl92aWV3KTsKK30KKworaW50IG1h
aW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIFNvdXBTZXJ2ZXIqIHNlcnZlcjsKKyAg
ICBTb3VwVVJJKiBzb3VwX3VyaTsKKworICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBO
VUxMKTsKKworICAgIC8qIEhvcGVmdWxseSBtYWtlIHRlc3QgaW5kZXBlbmRlbnQgb2YgdGhlIHBh
dGggaXQncyBjYWxsZWQgZnJvbS4gKi8KKyAgICB0ZXN0dXRpbHNfcmVsYXRpdmVfY2hkaXIoIlRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Jlc291cmNlcy90ZXN0Lmh0bWwiLCBh
cmd2WzBdKTsKKworICAgIHNlcnZlciA9IHNvdXBfc2VydmVyX25ldyhTT1VQX1NFUlZFUl9QT1JU
LCAwLCBOVUxMKTsKKyAgICBzb3VwX3NlcnZlcl9ydW5fYXN5bmMoc2VydmVyKTsKKworICAgIHNv
dXBfc2VydmVyX2FkZF9oYW5kbGVyKHNlcnZlciwgTlVMTCwgc2VydmVyX2NhbGxiYWNrLCBOVUxM
LCBOVUxMKTsKKworICAgIHNvdXBfdXJpID0gc291cF91cmlfbmV3KCJodHRwOi8vMTI3LjAuMC4x
LyIpOworICAgIHNvdXBfdXJpX3NldF9wb3J0KHNvdXBfdXJpLCBzb3VwX3NlcnZlcl9nZXRfcG9y
dChzZXJ2ZXIpKTsKKworICAgIGJhc2VfdXJpID0gc291cF91cmlfdG9fc3RyaW5nKHNvdXBfdXJp
LCBGQUxTRSk7CisgICAgc291cF91cmlfZnJlZShzb3VwX3VyaSk7CisKKyAgICBnX3Rlc3RfYnVn
X2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOworICAgIGdfdGVzdF9hZGRfZnVuYygi
L3dlYmtpdC93ZWJ2aWV3L2ljb24tdXJpIiwgdGVzdF93ZWJraXRfd2ViX3ZpZXdfaWNvbl91cmkp
OworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJ2aWV3L2FkanVzdG1lbnRzIiwgdGVz
dF93ZWJraXRfd2ViX3ZpZXdfYWRqdXN0bWVudHMpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dl
YmtpdC93ZWJ2aWV3L2Rlc3Ryb3kiLCB0ZXN0X3dlYmtpdF93ZWJfdmlld19kZXN0cm95KTsKKyAg
ICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vidmlldy9ncmFiX2ZvY3VzIiwgdGVzdF93ZWJr
aXRfd2ViX3ZpZXdfZ3JhYl9mb2N1cyk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dl
YnZpZXcvd2luZG93LWZlYXR1cmVzIiwgdGVzdF93ZWJraXRfd2ViX3ZpZXdfd2luZG93X2ZlYXR1
cmVzKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vidmlldy93ZWJ2aWV3LWluLW9m
ZnNjcmVlbi13aW5kb3ctZG9lcy1ub3QtY3Jhc2giLCB0ZXN0X3dlYmtpdF93ZWJfdmlld19pbl9v
ZmZzY3JlZW5fd2luZG93X2RvZXNfbm90X2NyYXNoKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93
ZWJraXQvd2Vidmlldy93ZWJ2aWV3LWRvZXMtbm90LXN0ZWFsLWZvY3VzIiwgdGVzdF93ZWJraXRf
d2ViX3ZpZXdfZG9lc19ub3Rfc3RlYWxfZm9jdXMpOworICAgIGdfdGVzdF9hZGRfZGF0YV9mdW5j
KCIvd2Via2l0L3dlYnZpZXcvZnVsbHNjcmVlbiIsIEdJTlRfVE9fUE9JTlRFUihGQUxTRSksIHRl
c3Rfd2Via2l0X3dlYl92aWV3X2Z1bGxzY3JlZW4pOworICAgIGdfdGVzdF9hZGRfZGF0YV9mdW5j
KCIvd2Via2l0L3dlYnZpZXcvZnVsbHNjcmVlbi1ibG9ja2VkIiwgR0lOVF9UT19QT0lOVEVSKFRS
VUUpLCB0ZXN0X3dlYmtpdF93ZWJfdmlld19mdWxsc2NyZWVuKTsKKyAgICBnX3Rlc3RfYWRkX2Z1
bmMoIi93ZWJraXQvd2Vidmlldy9maWxlLWNob29zZXIiLCB0ZXN0X3dlYmtpdF93ZWJfdmlld19m
aWxlX2Nob29zZXIpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJ2aWV3L3NvdXJj
ZS1tb2RlIiwgdGVzdF93ZWJraXRfd2ViX3ZpZXdfc291cmNlX21vZGUpOworCisgICAgcmV0dXJu
IGdfdGVzdF9ydW4gKCk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdEd0ay90ZXN0d2luZG93LmMgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dEd0ay90ZXN0d2luZG93LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWVkYTQ3YjEyNzdkNjVkY2I1OGUxZTM3OWE3
YTJiY2VlNjZhNWEwYQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0R3RrL3Rlc3R3aW5kb3cuYwpAQCAtMCwwICsxLDExOSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSBDb2xsYWJvcmEgTHRkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKworc3RhdGljIHZvaWQg
bm90aWZ5X2xvYWRfc3RhdHVzX2NiKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBHUGFyYW1TcGVj
KiBwc3BlYywgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBpZiAod2Via2l0X3dlYl92aWV3X2dldF9s
b2FkX3N0YXR1cyh3ZWJfdmlldykgPT0gV0VCS0lUX0xPQURfRklOSVNIRUQpIHsKKyAgICAgICAg
R01haW5Mb29wKiBsb29wID0gKEdNYWluTG9vcCopZGF0YTsKKworICAgICAgICBnX21haW5fbG9v
cF9xdWl0KGxvb3ApOworICAgIH0KK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2luZG93
X3Njcm9sbGJhcl9wb2xpY3kodm9pZCkKK3sKKyAgICBHTWFpbkxvb3AqIGxvb3A7CisgICAgR3Rr
V2lkZ2V0KiBzY3JvbGxlZFdpbmRvdzsKKyAgICBHdGtXaWRnZXQqIHdlYlZpZXc7CisgICAgV2Vi
S2l0V2ViRnJhbWUqIG1haW5GcmFtZTsKKyAgICBHdGtQb2xpY3lUeXBlIGhvcml6b250YWxQb2xp
Y3k7CisgICAgR3RrUG9saWN5VHlwZSB2ZXJ0aWNhbFBvbGljeTsKKworICAgIGxvb3AgPSBnX21h
aW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisKKyAgICBzY3JvbGxlZFdpbmRvdyA9IGd0a19zY3Jv
bGxlZF93aW5kb3dfbmV3KE5VTEwsIE5VTEwpOworICAgIGd0a19zY3JvbGxlZF93aW5kb3dfc2V0
X3BvbGljeShHVEtfU0NST0xMRURfV0lORE9XKHNjcm9sbGVkV2luZG93KSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1BPTElDWV9BVVRPTUFUSUMsIEdUS19QT0xJQ1lf
QVVUT01BVElDKTsKKworICAgIHdlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7CisgICAg
Z19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZp
ZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwKKyAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJB
Q0sobm90aWZ5X2xvYWRfc3RhdHVzX2NiKSwgbG9vcCk7CisKKyAgICBndGtfY29udGFpbmVyX2Fk
ZChHVEtfQ09OVEFJTkVSKHNjcm9sbGVkV2luZG93KSwgd2ViVmlldyk7CisKKyAgICBtYWluRnJh
bWUgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUoV0VCS0lUX1dFQl9WSUVXKHdlYlZp
ZXcpKTsKKworICAgIC8qIFRlc3Qgd2UgY29ycmVjdGx5IGFwcGx5IHBvbGljeSBmb3Igbm90IGhh
dmluZyBzY3JvbGxiYXJzOyBUaGlzCisgICAgICogY2FzZSBpcyBzcGVjaWFsLCBiZWNhdXNlIHdl
IHR1cm4gdGhlIHBvbGljeSBmcm9tIE5FVkVSIHRvCisgICAgICogQVVUT01BVElDLCBzaW5jZSB3
ZSBjYW5ub3QgZWFzaWx5IHJlcHJlc2VudCB0aGUgc2FtZSB0aGluZworICAgICAqIHVzaW5nIEd0
a1Njcm9sbGVkV2luZG93ICovCisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfaHRtbF9zdHJpbmco
V0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICI8aHRtbD48Ym9keT5XZWJLaXQhPC9ib2R5PjxzY3JpcHQ+ZG9jdW1lbnQuZ2V0RWxl
bWVudHNCeVRhZ05hbWUoJ2JvZHknKVswXS5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nOzwvc2Ny
aXB0PjwvaHRtbD4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxl
Oi8vIik7CisKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICBndGtfc2Nyb2xsZWRf
d2luZG93X2dldF9wb2xpY3koR1RLX1NDUk9MTEVEX1dJTkRPVyhzY3JvbGxlZFdpbmRvdyksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZob3Jpem9udGFsUG9saWN5LCAmdmVy
dGljYWxQb2xpY3kpOworCisgICAgZ19hc3NlcnQoaG9yaXpvbnRhbFBvbGljeSA9PSBHVEtfUE9M
SUNZX0FVVE9NQVRJQyk7CisgICAgZ19hc3NlcnQodmVydGljYWxQb2xpY3kgPT0gR1RLX1BPTElD
WV9BVVRPTUFUSUMpOworCisgICAgZ19hc3NlcnQoR1RLX1BPTElDWV9ORVZFUiA9PSB3ZWJraXRf
d2ViX2ZyYW1lX2dldF9ob3Jpem9udGFsX3Njcm9sbGJhcl9wb2xpY3kobWFpbkZyYW1lKSk7Cisg
ICAgZ19hc3NlcnQoR1RLX1BPTElDWV9ORVZFUiA9PSB3ZWJraXRfd2ViX2ZyYW1lX2dldF92ZXJ0
aWNhbF9zY3JvbGxiYXJfcG9saWN5KG1haW5GcmFtZSkpOworCisgICAgLyogVGVzdCB3ZSBjb3Jy
ZWN0bHkgYXBwbHkgcG9saWN5IGZvciBhbHdheXMgaGF2aW5nIHNjcm9sbGJhcnMgKi8KKyAgICB3
ZWJraXRfd2ViX3ZpZXdfbG9hZF9odG1sX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldyks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxodG1sPjxib2R5PldlYktp
dCE8L2JvZHk+PHNjcmlwdD5kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBd
LnN0eWxlLm92ZXJmbG93ID0gJ3Njcm9sbCc7PC9zY3JpcHQ+PC9odG1sPiIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGU6Ly8iKTsKKworICAgIGdfbWFpbl9sb29w
X3J1bihsb29wKTsKKworICAgIGd0a19zY3JvbGxlZF93aW5kb3dfZ2V0X3BvbGljeShHVEtfU0NS
T0xMRURfV0lORE9XKHNjcm9sbGVkV2luZG93KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJmhvcml6b250YWxQb2xpY3ksICZ2ZXJ0aWNhbFBvbGljeSk7CisKKyAgICBnX2Fz
c2VydChob3Jpem9udGFsUG9saWN5ID09IEdUS19QT0xJQ1lfQUxXQVlTKTsKKyAgICBnX2Fzc2Vy
dCh2ZXJ0aWNhbFBvbGljeSA9PSBHVEtfUE9MSUNZX0FMV0FZUyk7CisKKyAgICBnX2Fzc2VydCho
b3Jpem9udGFsUG9saWN5ID09IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X2hvcml6b250YWxfc2Nyb2xs
YmFyX3BvbGljeShtYWluRnJhbWUpKTsKKyAgICBnX2Fzc2VydCh2ZXJ0aWNhbFBvbGljeSA9PSB3
ZWJraXRfd2ViX2ZyYW1lX2dldF92ZXJ0aWNhbF9zY3JvbGxiYXJfcG9saWN5KG1haW5GcmFtZSkp
OworCisgICAgLyogVGVzdCB3ZSBjb3JyZWN0bHkgYXBwbHkgcG9saWN5IGZvciBoYXZpbmcgc2Ny
b2xsYmFycyB3aGVuIG5lZWRlZCAqLworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX2h0bWxfc3Ry
aW5nKFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiPGh0bWw+PGJvZHk+V2ViS2l0ITwvYm9keT48c2NyaXB0PmRvY3VtZW50Lmdl
dEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0uc3R5bGUub3ZlcmZsb3cgPSAnYXV0byc7PC9z
Y3JpcHQ+PC9odG1sPiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZp
bGU6Ly8iKTsKKworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIGd0a19zY3JvbGxl
ZF93aW5kb3dfZ2V0X3BvbGljeShHVEtfU0NST0xMRURfV0lORE9XKHNjcm9sbGVkV2luZG93KSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhvcml6b250YWxQb2xpY3ksICZ2
ZXJ0aWNhbFBvbGljeSk7CisKKyAgICBnX2Fzc2VydChob3Jpem9udGFsUG9saWN5ID09IEdUS19Q
T0xJQ1lfQVVUT01BVElDKTsKKyAgICBnX2Fzc2VydCh2ZXJ0aWNhbFBvbGljeSA9PSBHVEtfUE9M
SUNZX0FVVE9NQVRJQyk7CisKKyAgICBnX2Fzc2VydChob3Jpem9udGFsUG9saWN5ID09IHdlYmtp
dF93ZWJfZnJhbWVfZ2V0X2hvcml6b250YWxfc2Nyb2xsYmFyX3BvbGljeShtYWluRnJhbWUpKTsK
KyAgICBnX2Fzc2VydCh2ZXJ0aWNhbFBvbGljeSA9PSB3ZWJraXRfd2ViX2ZyYW1lX2dldF92ZXJ0
aWNhbF9zY3JvbGxiYXJfcG9saWN5KG1haW5GcmFtZSkpOworCisgICAgZ19vYmplY3RfdW5yZWYo
d2ViVmlldyk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBn
dGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7CisKKyAgICBnX3Rlc3RfYnVnX2Jhc2Uo
Imh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtp
dC93aW5kb3cvc2Nyb2xsYmFyX3BvbGljeSIsIHRlc3Rfd2Via2l0X3dpbmRvd19zY3JvbGxiYXJf
cG9saWN5KTsKKyAgICByZXR1cm4gZ190ZXN0X3J1biAoKTsKK30KZGlmZiAtLWdpdCBhL0NoYW5n
ZUxvZyBiL0NoYW5nZUxvZwppbmRleCA4ZDliZDMyZDUyNzg0Y2UxN2QyMDMxZjNiOTg4M2RlYWQz
Mzg1MDAwLi5iMTFlMDUzZDY1MmNlNWQ0N2RiMjRkOTk1ZWMyODEzNWY4N2VkN2E1IDEwMDY0NAot
LS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTQtMDEt
MDQgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAg
IFtHVEtdIE1vdmUgYWxsIEdUSy9HT2JqZWN0IHVuaXQgdGVzdHMgdG8gVG9vbHMvVGVzdFdlYktp
dEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI2
MzQyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5hbTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZS4KKyAgICAgICAgKiBTb3VyY2Uv
UGxhdGZvcm1HVEsuY21ha2U6IE5vIGxvbmdlciBpbmNsdWRlIHRoZSBvbGQgdW5pdCB0ZXN0cyBk
aXJlY3Rvcmllcy4KKwogMjAxNC0wMS0wNCAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGln
YWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gW0NNYWtlXSBJbXByb3ZlIHRoZSB3YXkgd2UgbG9j
YXRlIGdvYmplY3QtaW50cm9zcGVjdGlvbgpkaWZmIC0tZ2l0IGEvR05VbWFrZWZpbGUuYW0gYi9H
TlVtYWtlZmlsZS5hbQppbmRleCBiM2YwYTA0Nzk2NGFjZmFkNzgxZmM1MGI4NTcxMmY4YTNhM2Nj
ZDhmLi41NGRhMmIxMjBlZjg3YzRjZTc1MDQ5ODA5OGE3YmU3NWM2MTI1NDkyIDEwMDY0NAotLS0g
YS9HTlVtYWtlZmlsZS5hbQorKysgYi9HTlVtYWtlZmlsZS5hbQpAQCAtNTksNyArNTksNiBAQCBu
b2luc3RfSEVBREVSUyA6PQogbm9pbnN0X0xUTElCUkFSSUVTIDo9CiBsaWJfTFRMSUJSQVJJRVMg
Oj0KIElETF9CSU5ESU5HUyA6PQotVEVTVF9QUk9HUyA6PQogUE9GSUxFUyA6PQogUE9fTElOR1VB
UyA6PQogVVNFUl9MSU5HVUFTIDo9CkBAIC0yMTQsOCArMjEzLDYgQEAgaW5jbHVkZSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9HTlVtYWtlZmlsZS5hbQogaW5jbHVkZSBTb3VyY2UvVGhpcmRQYXJ0
eS9sZXZlbGRiL0dOVW1ha2VmaWxlLmFtCiAKIGlmIEVOQUJMRV9ERVZFTE9QRVJfTU9ERQotaW5j
bHVkZSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5h
bQotaW5jbHVkZSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbQogaW5jbHVk
ZSBTb3VyY2UvVGhpcmRQYXJ0eS9ndGVzdC9HTlVtYWtlZmlsZS5hbQogaW5jbHVkZSBUb29scy9H
TlVtYWtlZmlsZS5hbQogaW5jbHVkZSBUb29scy9UZXN0V2ViS2l0QVBJL0dOVW1ha2VmaWxlLmFt
Cg==
</data>
<flag name="review"
          id="244075"
          type_id="1"
          status="+"
          setter="gustavo"
    />
          </attachment>
      

    </bug>

</bugzilla>